This is python.info, produced by makeinfo version 7.1 from python.texi.

     Python 3.13.11, fevereiro 01, 2026

     Author name not set

     Copyright © 2001-2026, Python Software Foundation

INFO-DIR-SECTION Miscellaneous
START-INFO-DIR-ENTRY
* python: (python.info). One line description of project
END-INFO-DIR-ENTRY


   Generated by Sphinx 8.2.3.


File: python.info,  Node: Top,  Next: O que há de novo no Python,  Up: (dir)

Python
******

     Python 3.13.11, fevereiro 01, 2026

     Author name not set

     Copyright © 2001-2026, Python Software Foundation

* Menu:

* O que há de novo no Python::
* O tutorial do Python::
* Configurações e Uso do Python::
* A Referência da Linguagem Python::
* A Biblioteca Padrão do Python::
* Estendendo e incorporando o interpretador Python::
* Manual de referência da API Python/C::
* Instalando módulos Python::
* Python HOWTOs::
* Perguntas Frequentes Sobre Python::
* Descontinuações::
* Glossário::
* Sobre esta documentação::
* Lidando com bugs::
* Direitos autorais::
* História e Licença::
* Índice de Módulos Python::
* Índice::

 -- The Detailed Node Listing --

O que há de novo no Python

* O que há de novo no Python 3.13: O que há de novo no Python 3 13.
* O que há de novo no Python 3.12: O que há de novo no Python 3 12.
* O que há de novo no Python 3.11: O que há de novo no Python 3 11.
* O que há de novo no Python 3.10: O que há de novo no Python 3 10.
* O que há de novo no Python 3.9: O que há de novo no Python 3 9.
* O que há de novo no Python 3.8: O que há de novo no Python 3 8.
* O que há de novo no Python 3.7: O que há de novo no Python 3 7.
* What’s New In Python 3.6: What’s New In Python 3 6.
* O que há de novo no Python 3.5: O que há de novo no Python 3 5.
* O que há de novo no Python 3.4: O que há de novo no Python 3 4.
* O que há de novo no Python 3.3: O que há de novo no Python 3 3.
* O que há de novo no Python 3.2: O que há de novo no Python 3 2.
* O que há de novo no Python 3.1: O que há de novo no Python 3 1.
* O que há de novo no Python 3.0: O que há de novo no Python 3 0.
* O que há de novo no Python 2.7: O que há de novo no Python 2 7.
* O que há de novo no Python 2.6: O que há de novo no Python 2 6.
* What’s New in Python 2.5: What’s New in Python 2 5.
* What’s New in Python 2.4: What’s New in Python 2 4.
* What’s New in Python 2.3: What’s New in Python 2 3.
* What’s New in Python 2.2: What’s New in Python 2 2.
* What’s New in Python 2.1: What’s New in Python 2 1.
* What’s New in Python 2.0: What’s New in Python 2 0.
* Changelog::

O que há de novo no Python 3.13

* Resumo – Destaques da versão::
* Novas funcionalidades::
* Outras mudanças na linguagem::
* Novos módulos::
* Módulos melhorados::
* Otimizações::
* Módulos e APIs removidas::
* Novas descontinuações::
* Alterações de bytecode do CPython::
* Alterações na API C::
* Mudanças na construção::
* Portando para o Python 3.13: Portando para o Python 3 13.
* Mudanças em teste de regressão::
* Alterações notáveis no 3.13.1: Alterações notáveis no 3 13 1.
* Alterações notáveis no 3.13.4: Alterações notáveis no 3 13 4.

Novas funcionalidades

* Um melhor interpretador interativo::
* Mensagens de erro melhoradas::
* CPython com threads livres::
* Um compilador just-in-time (JIT) experimental: Um compilador just-in-time JIT experimental.
* Definidas semânticas de mutação para locals(): Definidas semânticas de mutação para locals.
* Suporte para plataformas móveis::

Módulos melhorados

* argparse::
* array::
* ast::
* asyncio::
* base64::
* compileall::
* concurrent.futures: concurrent futures.
* configparser::
* copy::
* ctypes::
* dbm::
* dis::
* doctest::
* email::
* enum::
* fractions::
* glob::
* importlib::
* io::
* ipaddress::
* itertools::
* marshal::
* math::
* mimetypes::
* mmap::
* multiprocessing::
* os::
* os.path: os path.
* pathlib::
* pdb::
* queue::
* random::
* re::
* shutil::
* site::
* sqlite3::
* ssl::
* statistics::
* subprocess::
* sys::
* tempfile::
* time::
* tkinter::
* traceback::
* types::
* typing::
* unicodedata::
* venv::
* avisos::
* xml::
* zipimport::

Módulos e APIs removidas

* PEP 594; remove “baterias descarregadas” da biblioteca padrão: PEP 594 remove “baterias descarregadas” da biblioteca padrão.
* 2to3::
* builtins::
* configparser: configparser<2>.
* importlib.metadata: importlib metadata.
* locale::
* opcode::
* optparse::
* pathlib: pathlib<2>.
* re: re<2>.
* tkinter.tix: tkinter tix.
* turtle::
* typing: typing<2>.
* unittest::
* urllib::
* webbrowser::

Novas descontinuações

* Remoção pendente no Python 3.14: Remoção pendente no Python 3 14.
* Remoção pendente no Python 3.15: Remoção pendente no Python 3 15.
* Remoção pendente no Python 3.16: Remoção pendente no Python 3 16.
* Remoção pendente no Python 3.17: Remoção pendente no Python 3 17.
* Remoção pendente no Python 3.18: Remoção pendente no Python 3 18.
* Remoção pendente em versões futuras::

Alterações na API C

* Novas funcionalidades: Novas funcionalidades<2>.
* Alterações na API C: Alterações na API C<2>.
* Mudanças na API C Limitada::
* APIs C removidas::
* APIs C descontinuadas::

APIs C descontinuadas

* Remoção pendente no Python 3.14: Remoção pendente no Python 3 14<2>.
* Remoção pendente no Python 3.15: Remoção pendente no Python 3 15<2>.
* Remoção pendente no Python 3.16: Remoção pendente no Python 3 16<2>.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<2>.

Portando para o Python 3.13

* Alterações na API Python::
* Alterações na API C: Alterações na API C<3>.

Alterações notáveis no 3.13.1

* sys: sys<2>.

Alterações notáveis no 3.13.4

* os.path: os path<2>.
* tarfile::

O que há de novo no Python 3.12

* Resumo – Destaques da versão: Resumo – Destaques da versão<2>.
* Novas funcionalidades: Novas funcionalidades<3>.
* Novos recursos relacionados a dicas de tipo::
* Outras mudanças na linguagem: Outras mudanças na linguagem<2>.
* Novos módulos: Novos módulos<2>.
* Módulos melhorados: Módulos melhorados<2>.
* Otimizações: Otimizações<2>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<2>.
* Ferramentas e daemons::
* Descontinuados::
* Removidos::
* Portando para Python 3.12: Portando para Python 3 12.
* Mudanças na construção: Mudanças na construção<2>.
* Alterações na API C: Alterações na API C<4>.

Novas funcionalidades

* PEP 695; Sintaxe do parâmetro de tipo: PEP 695 Sintaxe do parâmetro de tipo.
* PEP 701; Formalização sintática de f-strings: PEP 701 Formalização sintática de f-strings.
* PEP 684; Uma GIL por interpretador: PEP 684 Uma GIL por interpretador.
* PEP 669; Monitoramento de baixo impacto para CPython: PEP 669 Monitoramento de baixo impacto para CPython.
* PEP 688; Tornando o protocolo de buffer acessível no Python: PEP 688 Tornando o protocolo de buffer acessível no Python.
* PEP 709; Fazendo inline de compreensão: PEP 709 Fazendo inline de compreensão.
* Mensagens de erro melhoradas: Mensagens de erro melhoradas<2>.

Novos recursos relacionados a dicas de tipo

* PEP 692; Usando TypedDict para tipagem mais precisa de **kwargs: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs.
* PEP 698; Substitui decorador para tipagem estática: PEP 698 Substitui decorador para tipagem estática.

Módulos melhorados

* array: array<2>.
* asyncio: asyncio<2>.
* calendar::
* csv::
* dis: dis<2>.
* fractions: fractions<2>.
* importlib.resources: importlib resources.
* inspect::
* itertools: itertools<2>.
* math: math<2>.
* os: os<2>.
* os.path: os path<3>.
* pathlib: pathlib<3>.
* platform::
* pdb: pdb<2>.
* random: random<2>.
* shutil: shutil<2>.
* sqlite3: sqlite3<2>.
* statistics: statistics<2>.
* sys: sys<3>.
* tempfile: tempfile<2>.
* threading::
* tkinter: tkinter<2>.
* tokenize::
* types: types<2>.
* typing: typing<3>.
* unicodedata: unicodedata<2>.
* unittest: unittest<2>.
* uuid::

Descontinuados

* Remoção pendente no Python 3.13: Remoção pendente no Python 3 13.
* Remoção pendente no Python 3.14: Remoção pendente no Python 3 14<3>.
* Remoção pendente no Python 3.15: Remoção pendente no Python 3 15<3>.
* Remoção pendente no Python 3.16: Remoção pendente no Python 3 16<3>.
* Remoção pendente no Python 3.17: Remoção pendente no Python 3 17<2>.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<3>.

Removidos

* asynchat e asyncore::
* configparser: configparser<3>.
* distutils::
* ensurepip::
* enum: enum<2>.
* ftplib::
* gzip::
* hashlib::
* importlib: importlib<2>.
* imp::
* io: io<2>.
* locale: locale<2>.
* smtpd::
* sqlite3: sqlite3<3>.
* ssl: ssl<2>.
* unittest: unittest<3>.
* webbrowser: webbrowser<2>.
* xml.etree.ElementTree: xml etree ElementTree.
* zipimport: zipimport<2>.
* Outros::

Portando para Python 3.12

* Alterações na API Python: Alterações na API Python<2>.

Alterações na API C

* Novas funcionalidades: Novas funcionalidades<4>.
* Portando para Python 3.12: Portando para Python 3 12<2>.
* Descontinuados: Descontinuados<2>.
* Removidos: Removidos<2>.

Descontinuados

* Remoção pendente no Python 3.14: Remoção pendente no Python 3 14<4>.
* Remoção pendente no Python 3.15: Remoção pendente no Python 3 15<4>.
* Remoção pendente no Python 3.16: Remoção pendente no Python 3 16<4>.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<4>.

O que há de novo no Python 3.11

* Resumo – Destaques da versão: Resumo – Destaques da versão<3>.
* Novas funcionalidades: Novas funcionalidades<5>.
* Novos recursos relacionados a dicas de tipo: Novos recursos relacionados a dicas de tipo<2>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<3>.
* Outras mudanças na implementação do CPython::
* Novos módulos: Novos módulos<3>.
* Módulos melhorados: Módulos melhorados<3>.
* Otimizações: Otimizações<3>.
* CPython mais rápido::
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<3>.
* Descontinuados: Descontinuados<3>.
* Pendente remoção no Python 3.12: Pendente remoção no Python 3 12.
* Removidos: Removidos<3>.
* Portando para Python 3.11: Portando para Python 3 11.
* Mudanças na construção: Mudanças na construção<3>.
* Alterações na API C: Alterações na API C<5>.
* Alterações notáveis no 3.11.4: Alterações notáveis no 3 11 4.
* Alterações notáveis no 3.11.5: Alterações notáveis no 3 11 5.

Novas funcionalidades

* PEP 657; Localizações de erros refinadas em tracebacks: PEP 657 Localizações de erros refinadas em tracebacks.
* PEP 654; Grupos de exceção e except*: PEP 654 Grupos de exceção e except*.
* PEP 678; Exceções podem ser enriquecidas com notas: PEP 678 Exceções podem ser enriquecidas com notas.
* Melhorias no inicializador py.exe do Windows: Melhorias no inicializador py exe do Windows.

Novos recursos relacionados a dicas de tipo

* PEP 646; Genéricos variádicos: PEP 646 Genéricos variádicos.
* PEP 655; Marcando itens TypedDict individuais como obrigatórios ou não obrigatórios: PEP 655 Marcando itens TypedDict individuais como obrigatórios ou não obrigatórios.
* PEP 673; Tipo Self: PEP 673 Tipo Self.
* PEP 675; Tipo de string literal arbitrário: PEP 675 Tipo de string literal arbitrário.
* PEP 681; Transformações de classe de dados: PEP 681 Transformações de classe de dados.
* PEP 563 pode não ser o futuro::

Módulos melhorados

* asyncio: asyncio<3>.
* contextlib::
* dataclasses::
* datetime::
* enum: enum<3>.
* fcntl::
* fractions: fractions<3>.
* functools::
* gzip: gzip<2>.
* hashlib: hashlib<2>.
* IDLE e idlelib::
* inspect: inspect<2>.
* locale: locale<3>.
* logging::
* math: math<3>.
* operador::
* os: os<3>.
* pathlib: pathlib<4>.
* re: re<3>.
* shutil: shutil<3>.
* socket::
* sqlite3: sqlite3<4>.
* string::
* sys: sys<4>.
* sysconfig::
* tempfile: tempfile<3>.
* threading: threading<2>.
* time: time<2>.
* tkinter: tkinter<3>.
* traceback: traceback<2>.
* typing: typing<4>.
* unicodedata: unicodedata<3>.
* unittest: unittest<4>.
* venv: venv<2>.
* avisos: avisos<2>.
* zipfile::

CPython mais rápido

* Inicialização mais rápida::
* Tempo de execução mais rápido::
* Diversos::
* FAQ::
* Sobre::

Inicialização mais rápida

* Importações congeladas/objetos de código estático::

Tempo de execução mais rápido

* Quadros Python menos custosos e mais preguiçosos::
* Chamadas de função Python em linha::
* PEP 659; Interpretador adaptativo especializado: PEP 659 Interpretador adaptativo especializado.

FAQ

* Como devo escrever meu código para utilizar esses aceleradores?::
* O CPython 3.11 usará mais memória?: O CPython 3 11 usará mais memória?.
* Não vejo nenhuma aceleração em minha carga de trabalho. Por que?: Não vejo nenhuma aceleração em minha carga de trabalho Por que?.
* Existe um compilador JIT?::

Alterações de bytecode do CPython

* Novos opcodes::
* Opcodes substituídos::
* Opcodes alterados/removidos::

Descontinuados

* Linguagem/Embutidos::
* Módulos::
* Biblioteca Padrão::

Alterações na API C

* Novas funcionalidades: Novas funcionalidades<6>.
* Portando para Python 3.11: Portando para Python 3 11<2>.
* Descontinuados: Descontinuados<4>.
* Pendente remoção no Python 3.12: Pendente remoção no Python 3 12<2>.
* Removidos: Removidos<4>.

Alterações notáveis no 3.11.4

* tarfile: tarfile<2>.

Alterações notáveis no 3.11.5

* OpenSSL::

O que há de novo no Python 3.10

* Resumo – Destaques da versão: Resumo – Destaques da versão<4>.
* Novas funcionalidades: Novas funcionalidades<7>.
* Novos recursos relacionados a dicas de tipo: Novos recursos relacionados a dicas de tipo<3>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<4>.
* Novos módulos: Novos módulos<4>.
* Módulos melhorados: Módulos melhorados<4>.
* Otimizações: Otimizações<4>.
* Descontinuados: Descontinuados<5>.
* Removidos: Removidos<5>.
* Portando para Python 3.10: Portando para Python 3 10.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<4>.
* Mudanças na construção: Mudanças na construção<4>.
* Alterações na API C: Alterações na API C<7>.
* Recursos de segurança notáveis no 3.10.7: Recursos de segurança notáveis no 3 10 7.
* Recursos de segurança notáveis no 3.10.8: Recursos de segurança notáveis no 3 10 8.
* Alterações notáveis no 3.10.12: Alterações notáveis no 3 10 12.

Novas funcionalidades

* Gerenciadores de contexto entre parênteses::
* Melhores mensagens de erro::
* PEP 626; Números de linha precisos para depuração e outras ferramentas: PEP 626 Números de linha precisos para depuração e outras ferramentas.
* PEP 634; Correspondência de padrão estrutural: PEP 634 Correspondência de padrão estrutural.
* EncodingWarning opcional e opção encoding="locale"::

Melhores mensagens de erro

* SyntaxErrors::
* IndentationErrors::
* AttributeErrors::
* NameErrors::

PEP 634: Correspondência de padrão estrutural

* Sintaxe e operações::
* Abordagem declarativa::
* Padrão simples; corresponder a um literal: Padrão simples corresponder a um literal.
* Padrões com uma literal e variável::
* Padrões e classes::
* Padrões aninhados::
* Padrões complexos e o curinga::
* Guarda::
* Outros recursos-chave::

Padrão simples: corresponder a um literal

* Comportamento sem o curinga::

Padrões e classes

* Padrões com parâmetros posicionais::

Novos recursos relacionados a dicas de tipo

* PEP 604; novo operador de união de tipo: PEP 604 novo operador de união de tipo.
* PEP 612; variáveis de especificação de parâmetros: PEP 612 variáveis de especificação de parâmetros.
* PEP 613; TypeAlias: PEP 613 TypeAlias.
* PEP 647; guardas de tipo definidas pelo usuário: PEP 647 guardas de tipo definidas pelo usuário.

Módulos melhorados

* asyncio: asyncio<4>.
* argparse: argparse<2>.
* array: array<3>.
* asynchat, asyncore, smtpd: asynchat asyncore smtpd.
* base64: base64<2>.
* bdb::
* bisect::
* codecs::
* collections.abc: collections abc.
* contextlib: contextlib<2>.
* curses::
* dataclasses: dataclasses<2>.
* distutils: distutils<2>.
* doctest: doctest<2>.
* encodings::
* enum: enum<4>.
* fileinput::
* faulthandler::
* gc::
* glob: glob<2>.
* hashlib: hashlib<3>.
* hmac::
* IDLE e idlelib: IDLE e idlelib<2>.
* importlib.metadata: importlib metadata<2>.
* inspect: inspect<3>.
* itertools: itertools<3>.
* linecache::
* os: os<4>.
* os.path: os path<4>.
* pathlib: pathlib<5>.
* platform: platform<2>.
* pprint::
* py_compile::
* pyclbr::
* shelve::
* statistics: statistics<3>.
* site: site<2>.
* socket: socket<2>.
* ssl: ssl<3>.
* sqlite3: sqlite3<5>.
* sys: sys<5>.
* _thread::
* threading: threading<3>.
* traceback: traceback<3>.
* types: types<3>.
* typing: typing<5>.
* unittest: unittest<5>.
* urllib.parse: urllib parse.
* xml: xml<2>.
* zipimport: zipimport<3>.

dataclasses

* __slots__::
* Campos somente-nomeados::

Portando para Python 3.10

* Alterações na sintaxe Python::
* Alterações na API Python: Alterações na API Python<3>.
* Alterações na API C: Alterações na API C<6>.

Alterações na API C

* PEP 652; Mantendo a ABI estável: PEP 652 Mantendo a ABI estável.
* Novas funcionalidades: Novas funcionalidades<8>.
* Portando para Python 3.10: Portando para Python 3 10<2>.
* Descontinuados: Descontinuados<6>.
* Removidos: Removidos<6>.

Alterações notáveis no 3.10.12

* tarfile: tarfile<3>.

O que há de novo no Python 3.9

* Resumo – Destaques da versão: Resumo – Destaques da versão<5>.
* Você deve verificar DeprecationWarning no seu código::
* Novas funcionalidades: Novas funcionalidades<9>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<5>.
* Novos módulos: Novos módulos<5>.
* Módulos melhorados: Módulos melhorados<5>.
* Otimizações: Otimizações<5>.
* Descontinuados: Descontinuados<7>.
* Removidos: Removidos<7>.
* Portando para Python 3.9: Portando para Python 3 9.
* Mudanças na construção: Mudanças na construção<5>.
* Alterações na API C: Alterações na API C<9>.
* Alterações notáveis no Python 3.9.1: Alterações notáveis no Python 3 9 1.
* Alterações notáveis no Python 3.9.2: Alterações notáveis no Python 3 9 2.
* Alterações notáveis no Python 3.9.3: Alterações notáveis no Python 3 9 3.
* Alterações notáveis no Python 3.9.5: Alterações notáveis no Python 3 9 5.
* Recursos de segurança notáveis no 3.9.14: Recursos de segurança notáveis no 3 9 14.
* Alterações notáveis no 3.9.17: Alterações notáveis no 3 9 17.

Novas funcionalidades

* Operadores de mesclagem & atualização de dicionário::
* Novos métodos de strings para remover prefixos e sufixos::
* Type hinting genéricos nas coleções padrão::
* Novo analisador sintático::

Novos módulos

* zoneinfo::
* graphlib::

Módulos melhorados

* ast: ast<2>.
* asyncio: asyncio<5>.
* compileall: compileall<2>.
* concurrent.futures: concurrent futures<2>.
* curses: curses<2>.
* datetime: datetime<2>.
* distutils: distutils<3>.
* fcntl: fcntl<2>.
* ftplib: ftplib<2>.
* gc: gc<2>.
* hashlib: hashlib<4>.
* http::
* IDLE e idlelib: IDLE e idlelib<3>.
* imaplib::
* importlib: importlib<3>.
* inspect: inspect<4>.
* ipaddress: ipaddress<2>.
* math: math<4>.
* multiprocessing: multiprocessing<2>.
* nntplib::
* os: os<5>.
* pathlib: pathlib<6>.
* pdb: pdb<3>.
* poplib::
* pprint: pprint<2>.
* pydoc::
* random: random<3>.
* signal::
* smtplib::
* socket: socket<3>.
* time: time<3>.
* sys: sys<6>.
* tracemalloc::
* typing: typing<6>.
* unicodedata: unicodedata<4>.
* venv: venv<3>.
* xml: xml<3>.

Portando para Python 3.9

* Alterações na API Python: Alterações na API Python<4>.
* Alterações na API C: Alterações na API C<8>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<5>.

Alterações na API C

* Novas funcionalidades: Novas funcionalidades<10>.
* Portando para Python 3.9: Portando para Python 3 9<2>.
* Removidos: Removidos<8>.

Alterações notáveis no Python 3.9.1

* typing: typing<7>.
* Suporte a macOS 11.0 (Big Sur) e Apple Silicon Mac: Suporte a macOS 11 0 Big Sur e Apple Silicon Mac.

Alterações notáveis no Python 3.9.2

* collections.abc: collections abc<2>.
* urllib.parse: urllib parse<2>.

Alterações notáveis no Python 3.9.5

* urllib.parse: urllib parse<3>.

Alterações notáveis no 3.9.17

* tarfile: tarfile<4>.

O que há de novo no Python 3.8

* Resumo – Destaques da versão: Resumo – Destaques da versão<6>.
* Novas funcionalidades: Novas funcionalidades<11>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<6>.
* Novos módulos: Novos módulos<6>.
* Módulos melhorados: Módulos melhorados<6>.
* Otimizações: Otimizações<6>.
* Mudanças a construções e API C::
* Descontinuados: Descontinuados<8>.
* Remoção de APIs e recursos::
* Portando para o Python 3.8: Portando para o Python 3 8.
* Alterações notáveis no Python 3.8.1: Alterações notáveis no Python 3 8 1.
* Alterações notáveis no Python 3.8.2: Alterações notáveis no Python 3 8 2.
* Alterações notáveis no Python 3.8.3: Alterações notáveis no Python 3 8 3.
* Alterações notáveis no Python 3.8.8: Alterações notáveis no Python 3 8 8.
* Alterações notáveis no Python 3.8.9: Alterações notáveis no Python 3 8 9.
* Alterações notáveis no Python 3.8.10: Alterações notáveis no Python 3 8 10.
* Alterações notáveis no Python 3.8.10: Alterações notáveis no Python 3 8 10<2>.
* Alterações notáveis no Python 3.8.12: Alterações notáveis no Python 3 8 12.
* Recursos de segurança notáveis no 3.8.14: Recursos de segurança notáveis no 3 8 14.
* Alterações notáveis no 3.8.17: Alterações notáveis no 3 8 17.

Novas funcionalidades

* Expressões de atribuição::
* Parâmetros somente-posicionais::
* Cache do sistema de arquivos paralelo para arquivos de bytecode compilados::
* A compilação de depuração usa a mesma ABI da compilação de lançamento::
* O suporte a f-strings = para expressões de auto-documentação e depuração::
* PEP 578; Ganchos de auditoria em tempo de execução Python: PEP 578 Ganchos de auditoria em tempo de execução Python.
* PEP 587; Configuração de Inicialização do Python: PEP 587 Configuração de Inicialização do Python.
* PEP 590; Vectorcall; um protocolo de chamada rápida para CPython: PEP 590 Vectorcall um protocolo de chamada rápida para CPython.
* Protocolo de Pickle 5 com buffers de dados fora da banda::

Módulos melhorados

* ast: ast<3>.
* asyncio: asyncio<6>.
* builtins: builtins<2>.
* collections::
* cProfile::
* csv: csv<2>.
* curses: curses<3>.
* ctypes: ctypes<2>.
* datetime: datetime<3>.
* functools: functools<2>.
* gc: gc<3>.
* gettext::
* gzip: gzip<3>.
* IDLE e idlelib: IDLE e idlelib<4>.
* inspect: inspect<5>.
* io: io<3>.
* itertools: itertools<4>.
* json.tool: json tool.
* logging: logging<2>.
* math: math<5>.
* mmap: mmap<2>.
* multiprocessing: multiprocessing<3>.
* os: os<6>.
* os.path: os path<5>.
* pathlib: pathlib<7>.
* pickle::
* plistlib::
* pprint: pprint<3>.
* py_compile: py_compile<2>.
* shlex::
* shutil: shutil<4>.
* socket: socket<4>.
* ssl: ssl<4>.
* statistics: statistics<4>.
* sys: sys<7>.
* tarfile: tarfile<5>.
* threading: threading<4>.
* tokenize: tokenize<2>.
* tkinter: tkinter<4>.
* time: time<4>.
* typing: typing<8>.
* unicodedata: unicodedata<5>.
* unittest: unittest<6>.
* venv: venv<4>.
* weakref::
* xml: xml<4>.
* xmlrpc::

Portando para o Python 3.8

* Alterações no comportamento do Python::
* Alterações na API Python: Alterações na API Python<5>.
* Alterações na API C: Alterações na API C<10>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<6>.
* Ferramentas e daemons: Ferramentas e daemons<2>.

Alterações notáveis no Python 3.8.10

* Suporte a macOS 11.0 (Big Sur) e Apple Silicon Mac: Suporte a macOS 11 0 Big Sur e Apple Silicon Mac<2>.

Alterações notáveis no Python 3.8.10

* urllib.parse: urllib parse<4>.

Alterações notáveis no Python 3.8.12

* Alterações na API Python: Alterações na API Python<6>.

Alterações notáveis no 3.8.17

* tarfile: tarfile<6>.

O que há de novo no Python 3.7

* Resumo – Destaques da versão: Resumo – Destaques da versão<7>.
* Novas funcionalidades: Novas funcionalidades<12>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<7>.
* Novos módulos: Novos módulos<7>.
* Módulos melhorados: Módulos melhorados<7>.
* Alterações na API C: Alterações na API C<11>.
* Mudanças na construção: Mudanças na construção<6>.
* Otimizações: Otimizações<7>.
* Outras mudanças na implementação do CPython: Outras mudanças na implementação do CPython<2>.
* Comportamento do Python descontinuado::
* Deprecated Python modules, functions and methods: Deprecated Python modules functions and methods.
* Deprecated functions and types of the C API::
* Platform Support Removals::
* Remoção de APIs e recursos: Remoção de APIs e recursos<2>.
* Module Removals::
* Windows-only Changes::
* Porting to Python 3.7: Porting to Python 3 7.
* Notable changes in Python 3.7.1: Notable changes in Python 3 7 1.
* Notable changes in Python 3.7.2: Notable changes in Python 3 7 2.
* Notable changes in Python 3.7.6: Notable changes in Python 3 7 6.
* Notable changes in Python 3.7.10: Notable changes in Python 3 7 10.
* Notable changes in Python 3.7.11: Notable changes in Python 3 7 11.
* Notable security feature in 3.7.14: Notable security feature in 3 7 14.

Novas funcionalidades

* PEP 563; Avaliação Postergada de Anotações: PEP 563 Avaliação Postergada de Anotações.
* PEP 538; Coerção de localidade C legada: PEP 538 Coerção de localidade C legada.
* PEP 540; Modo de tempo de execução UTF-8 forçado: PEP 540 Modo de tempo de execução UTF-8 forçado.
* PEP 553; breakpoint() embutida: PEP 553 breakpoint embutida.
* PEP 539; Nova API C para armazenamento local de thread: PEP 539 Nova API C para armazenamento local de thread.
* PEP 562; Personalização de acesso aos atributos do módulo: PEP 562 Personalização de acesso aos atributos do módulo.
* PEP 564; Novas funções de tempo com resolução de nanossegundos: PEP 564 Novas funções de tempo com resolução de nanossegundos.
* PEP 565; Mostra DeprecationWarning em __main__: PEP 565 Mostra DeprecationWarning em __main__.
* PEP 560; Suporte básico para módulo typing e tipos genéricos: PEP 560 Suporte básico para módulo typing e tipos genéricos.
* PEP 552; Arquivos .pyc baseados em hash: PEP 552 Arquivos pyc baseados em hash.
* PEP 545; Traduções da documentação do Python: PEP 545 Traduções da documentação do Python.
* Modo de Desenvolvimento do Python (-X dev): Modo de Desenvolvimento do Python -X dev.

Novos módulos

* contextvars::
* dataclasses: dataclasses<3>.
* importlib.resources: importlib resources<2>.

Módulos melhorados

* argparse: argparse<3>.
* asyncio: asyncio<7>.
* binascii::
* calendar: calendar<2>.
* collections: collections<2>.
* compileall: compileall<3>.
* concurrent.futures: concurrent futures<3>.
* contextlib: contextlib<3>.
* cProfile: cProfile<2>.
* crypt::
* datetime: datetime<4>.
* dbm: dbm<2>.
* decimal::
* dis: dis<3>.
* distutils: distutils<4>.
* enum: enum<5>.
* functools: functools<3>.
* gc: gc<4>.
* hmac: hmac<2>.
* http.client: http client.
* http.server: http server.
* idlelib e IDLE::
* importlib: importlib<4>.
* io: io<4>.
* ipaddress: ipaddress<3>.
* itertools: itertools<5>.
* locale: locale<4>.
* logging: logging<3>.
* math: math<6>.
* mimetypes: mimetypes<2>.
* msilib::
* multiprocessing: multiprocessing<4>.
* os: os<7>.
* pathlib: pathlib<8>.
* pdb: pdb<4>.
* py_compile: py_compile<3>.
* pydoc: pydoc<2>.
* queue: queue<2>.
* re: re<4>.
* signal: signal<2>.
* socket: socket<5>.
* socketserver::
* sqlite3: sqlite3<6>.
* ssl: ssl<5>.
* string: string<2>.
* subprocess: subprocess<2>.
* sys: sys<8>.
* time: time<5>.
* tkinter: tkinter<5>.
* tracemalloc: tracemalloc<2>.
* types: types<4>.
* unicodedata: unicodedata<6>.
* unittest: unittest<7>.
* unittest.mock: unittest mock.
* urllib.parse: urllib parse<5>.
* uu::
* uuid: uuid<2>.
* avisos: avisos<3>.
* xml: xml<5>.
* xml.etree: xml etree.
* xmlrpc.server: xmlrpc server.
* zipapp::
* zipfile: zipfile<2>.

Deprecated Python modules, functions and methods

* aifc::
* asyncio: asyncio<8>.
* collections: collections<3>.
* dbm: dbm<3>.
* enum: enum<6>.
* gettext: gettext<2>.
* importlib: importlib<5>.
* locale: locale<5>.
* macpath::
* threading: threading<5>.
* socket: socket<6>.
* ssl: ssl<6>.
* sunau::
* sys: sys<9>.
* wave::

Porting to Python 3.7

* Changes in Python Behavior::
* Alterações na API Python: Alterações na API Python<7>.
* Alterações na API C: Alterações na API C<12>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<7>.
* Windows-only Changes: Windows-only Changes<2>.
* Other CPython implementation changes::

What’s New In Python 3.6

* Resumo – Destaques da versão: Resumo – Destaques da versão<8>.
* Novas funcionalidades: Novas funcionalidades<13>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<8>.
* Novos módulos: Novos módulos<8>.
* Módulos melhorados: Módulos melhorados<8>.
* Otimizações: Otimizações<8>.
* Mudanças a construções e API C: Mudanças a construções e API C<2>.
* Other Improvements::
* Descontinuados: Descontinuados<9>.
* Removidos: Removidos<9>.
* Porting to Python 3.6: Porting to Python 3 6.
* Notable changes in Python 3.6.2: Notable changes in Python 3 6 2.
* Notable changes in Python 3.6.4: Notable changes in Python 3 6 4.
* Notable changes in Python 3.6.5: Notable changes in Python 3 6 5.
* Notable changes in Python 3.6.7: Notable changes in Python 3 6 7.
* Notable changes in Python 3.6.10: Notable changes in Python 3 6 10.
* Notable changes in Python 3.6.13: Notable changes in Python 3 6 13.
* Notable changes in Python 3.6.14: Notable changes in Python 3 6 14.

Novas funcionalidades

* PEP 498; Formatted string literals: PEP 498 Formatted string literals.
* PEP 526; Syntax for variable annotations: PEP 526 Syntax for variable annotations.
* PEP 515; Underscores in Numeric Literals: PEP 515 Underscores in Numeric Literals.
* PEP 525; Asynchronous Generators: PEP 525 Asynchronous Generators.
* PEP 530; Asynchronous Comprehensions: PEP 530 Asynchronous Comprehensions.
* PEP 487; Simpler customization of class creation: PEP 487 Simpler customization of class creation.
* PEP 487; Descriptor Protocol Enhancements: PEP 487 Descriptor Protocol Enhancements.
* PEP 519; Adding a file system path protocol: PEP 519 Adding a file system path protocol.
* PEP 495; Local Time Disambiguation: PEP 495 Local Time Disambiguation.
* PEP 529; Change Windows filesystem encoding to UTF-8: PEP 529 Change Windows filesystem encoding to UTF-8.
* PEP 528; Change Windows console encoding to UTF-8: PEP 528 Change Windows console encoding to UTF-8.
* PEP 520; Preserving Class Attribute Definition Order: PEP 520 Preserving Class Attribute Definition Order.
* PEP 468; Preserving Keyword Argument Order: PEP 468 Preserving Keyword Argument Order.
* New dict implementation::
* PEP 523; Adding a frame evaluation API to CPython: PEP 523 Adding a frame evaluation API to CPython.
* PYTHONMALLOC environment variable::
* DTrace and SystemTap probing support::

Novos módulos

* segredos::

Módulos melhorados

* array: array<4>.
* ast: ast<4>.
* asyncio: asyncio<9>.
* binascii: binascii<2>.
* cmath::
* collections: collections<4>.
* concurrent.futures: concurrent futures<4>.
* contextlib: contextlib<4>.
* datetime: datetime<5>.
* decimal: decimal<2>.
* distutils: distutils<5>.
* email: email<2>.
* encodings: encodings<2>.
* enum: enum<7>.
* faulthandler: faulthandler<2>.
* fileinput: fileinput<2>.
* hashlib: hashlib<5>.
* http.client: http client<2>.
* idlelib e IDLE: idlelib e IDLE<2>.
* importlib: importlib<6>.
* inspect: inspect<6>.
* json::
* logging: logging<4>.
* math: math<7>.
* multiprocessing: multiprocessing<5>.
* os: os<8>.
* pathlib: pathlib<9>.
* pdb: pdb<5>.
* pickle: pickle<2>.
* pickletools::
* pydoc: pydoc<3>.
* random: random<4>.
* re: re<5>.
* readline::
* rlcompleter::
* shlex: shlex<2>.
* site: site<3>.
* sqlite3: sqlite3<7>.
* socket: socket<7>.
* socketserver: socketserver<2>.
* ssl: ssl<7>.
* statistics: statistics<5>.
* struct::
* subprocess: subprocess<3>.
* sys: sys<10>.
* telnetlib::
* time: time<6>.
* timeit::
* tkinter: tkinter<6>.
* traceback: traceback<4>.
* tracemalloc: tracemalloc<3>.
* typing: typing<9>.
* unicodedata: unicodedata<7>.
* unittest.mock: unittest mock<2>.
* urllib.request: urllib request.
* urllib.robotparser: urllib robotparser.
* venv: venv<5>.
* avisos: avisos<4>.
* winreg::
* winsound::
* xmlrpc.client: xmlrpc client.
* zipfile: zipfile<3>.
* zlib::

Descontinuados

* New Keywords::
* Deprecated Python behavior::
* Deprecated Python modules, functions and methods: Deprecated Python modules functions and methods<2>.
* xml: xml<6>.
* Deprecated functions and types of the C API: Deprecated functions and types of the C API<2>.
* Deprecated Build Options::

Deprecated Python modules, functions and methods

* asynchat::
* asyncore::
* dbm: dbm<4>.
* distutils: distutils<6>.
* grp::
* importlib: importlib<7>.
* os: os<9>.
* re: re<6>.
* ssl: ssl<8>.
* tkinter: tkinter<7>.
* venv: venv<6>.

Removidos

* Remoção de APIs e recursos: Remoção de APIs e recursos<3>.

Porting to Python 3.6

* Changes in ‘python’ Command Behavior::
* Alterações na API Python: Alterações na API Python<8>.
* Alterações na API C: Alterações na API C<13>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<8>.

Notable changes in Python 3.6.2

* Novo alvo de construção make regen-all::
* Remoção do alvo de construção make touch::

O que há de novo no Python 3.5

* Resumo – Destaques da versão: Resumo – Destaques da versão<9>.
* Novas funcionalidades: Novas funcionalidades<14>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<9>.
* Novos módulos: Novos módulos<9>.
* Módulos melhorados: Módulos melhorados<9>.
* Other module-level changes::
* Otimizações: Otimizações<9>.
* Mudanças a construções e API C: Mudanças a construções e API C<3>.
* Descontinuados: Descontinuados<10>.
* Removidos: Removidos<10>.
* Porting to Python 3.5: Porting to Python 3 5.
* Notable changes in Python 3.5.4: Notable changes in Python 3 5 4.

Novas funcionalidades

* PEP 492 - Coroutines with async and await syntax::
* PEP 465 - A dedicated infix operator for matrix multiplication::
* PEP 448 - Additional Unpacking Generalizations::
* PEP 461 - percent formatting support for bytes and bytearray::
* PEP 484 - Type Hints::
* PEP 471 - os.scandir() function – a better and faster directory iterator: PEP 471 - os scandir function – a better and faster directory iterator.
* PEP 475; Retry system calls failing with EINTR: PEP 475 Retry system calls failing with EINTR.
* PEP 479; Change StopIteration handling inside generators: PEP 479 Change StopIteration handling inside generators.
* PEP 485; A function for testing approximate equality: PEP 485 A function for testing approximate equality.
* PEP 486; Make the Python Launcher aware of virtual environments: PEP 486 Make the Python Launcher aware of virtual environments.
* PEP 488; Elimination of PYO files: PEP 488 Elimination of PYO files.
* PEP 489; Multi-phase extension module initialization: PEP 489 Multi-phase extension module initialization.

Novos módulos

* typing: typing<10>.
* zipapp: zipapp<2>.

Módulos melhorados

* argparse: argparse<4>.
* asyncio: asyncio<10>.
* bz2::
* cgi::
* cmath: cmath<2>.
* código::
* collections: collections<5>.
* collections.abc: collections abc<3>.
* compileall: compileall<4>.
* concurrent.futures: concurrent futures<5>.
* configparser: configparser<4>.
* contextlib: contextlib<5>.
* csv: csv<3>.
* curses: curses<4>.
* dbm: dbm<5>.
* difflib::
* distutils: distutils<7>.
* doctest: doctest<3>.
* email: email<3>.
* enum: enum<8>.
* faulthandler: faulthandler<3>.
* functools: functools<4>.
* glob: glob<3>.
* gzip: gzip<4>.
* heapq::
* http: http<2>.
* http.client: http client<3>.
* idlelib e IDLE: idlelib e IDLE<3>.
* imaplib: imaplib<2>.
* imghdr::
* importlib: importlib<8>.
* inspect: inspect<7>.
* io: io<5>.
* ipaddress: ipaddress<4>.
* json: json<2>.
* linecache: linecache<2>.
* locale: locale<6>.
* logging: logging<5>.
* lzma::
* math: math<8>.
* multiprocessing: multiprocessing<6>.
* operador: operador<2>.
* os: os<10>.
* pathlib: pathlib<10>.
* pickle: pickle<3>.
* poplib: poplib<2>.
* re: re<7>.
* readline: readline<2>.
* selectors::
* shutil: shutil<5>.
* signal: signal<3>.
* smtpd: smtpd<2>.
* smtplib: smtplib<2>.
* sndhdr::
* socket: socket<8>.
* ssl: ssl<9>.
* sqlite3: sqlite3<8>.
* subprocess: subprocess<4>.
* sys: sys<11>.
* sysconfig: sysconfig<2>.
* tarfile: tarfile<7>.
* threading: threading<6>.
* time: time<7>.
* timeit: timeit<2>.
* tkinter: tkinter<8>.
* traceback: traceback<5>.
* types: types<5>.
* unicodedata: unicodedata<8>.
* unittest: unittest<8>.
* unittest.mock: unittest mock<3>.
* urllib: urllib<2>.
* wsgiref::
* xmlrpc: xmlrpc<2>.
* xml.sax: xml sax.
* zipfile: zipfile<4>.

ssl

* Підтримка BIO пам’яті::
* Application-Layer Protocol Negotiation Support::
* Other Changes::

Descontinuados

* New Keywords: New Keywords<2>.
* Comportamento do Python descontinuado: Comportamento do Python descontinuado<2>.
* Unsupported Operating Systems::
* Deprecated Python modules, functions and methods: Deprecated Python modules functions and methods<3>.

Removidos

* Remoção de APIs e recursos: Remoção de APIs e recursos<4>.

Porting to Python 3.5

* Alterações no comportamento do Python: Alterações no comportamento do Python<2>.
* Alterações na API Python: Alterações na API Python<9>.
* Alterações na API C: Alterações na API C<14>.

Notable changes in Python 3.5.4

* Novo alvo de construção make regen-all: Novo alvo de construção make regen-all<2>.
* Remoção do alvo de construção make touch: Remoção do alvo de construção make touch<2>.

O que há de novo no Python 3.4

* Resumo – Destaques da versão: Resumo – Destaques da versão<10>.
* Novas funcionalidades: Novas funcionalidades<15>.
* Novos módulos: Novos módulos<10>.
* Módulos melhorados: Módulos melhorados<10>.
* CPython Implementation Changes::
* Descontinuados: Descontinuados<11>.
* Removidos: Removidos<11>.
* Porting to Python 3.4: Porting to Python 3 4.
* Alterado em 3.4.3: Alterado em 3 4 3.

Novas funcionalidades

* PEP 453; Explicit Bootstrapping of PIP in Python Installations: PEP 453 Explicit Bootstrapping of PIP in Python Installations.
* PEP 446; Newly Created File Descriptors Are Non-Inheritable: PEP 446 Newly Created File Descriptors Are Non-Inheritable.
* Melhorias no manuseio de Codecs::
* PEP 451; A ModuleSpec Type for the Import System: PEP 451 A ModuleSpec Type for the Import System.
* Outras mudanças na linguagem: Outras mudanças na linguagem<10>.

PEP 453: Explicit Bootstrapping of PIP in Python Installations

* Bootstrapping pip By Default::
* Mudanças na documentação::

Novos módulos

* asyncio: asyncio<11>.
* ensurepip: ensurepip<2>.
* enum: enum<9>.
* pathlib: pathlib<11>.
* selectors: selectors<2>.
* statistics: statistics<6>.
* tracemalloc: tracemalloc<4>.

Módulos melhorados

* abc::
* aifc: aifc<2>.
* argparse: argparse<5>.
* audioop::
* base64: base64<3>.
* collections: collections<6>.
* colorsys::
* contextlib: contextlib<6>.
* dbm: dbm<6>.
* dis: dis<4>.
* doctest: doctest<4>.
* email: email<4>.
* filecmp::
* functools: functools<5>.
* gc: gc<5>.
* glob: glob<4>.
* hashlib: hashlib<6>.
* hmac: hmac<3>.
* html::
* http: http<3>.
* idlelib e IDLE: idlelib e IDLE<4>.
* importlib: importlib<9>.
* inspect: inspect<8>.
* ipaddress: ipaddress<5>.
* logging: logging<6>.
* marshal: marshal<2>.
* mmap: mmap<3>.
* multiprocessing: multiprocessing<7>.
* operador: operador<3>.
* os: os<11>.
* pdb: pdb<6>.
* pickle: pickle<4>.
* plistlib: plistlib<2>.
* poplib: poplib<3>.
* pprint: pprint<4>.
* pty::
* pydoc: pydoc<4>.
* re: re<8>.
* resource::
* select::
* shelve: shelve<2>.
* shutil: shutil<6>.
* smtpd: smtpd<3>.
* smtplib: smtplib<3>.
* socket: socket<9>.
* sqlite3: sqlite3<9>.
* ssl: ssl<10>.
* stat::
* struct: struct<2>.
* subprocess: subprocess<5>.
* sunau: sunau<2>.
* sys: sys<12>.
* tarfile: tarfile<8>.
* textwrap::
* threading: threading<7>.
* traceback: traceback<6>.
* types: types<6>.
* urllib: urllib<3>.
* unittest: unittest<9>.
* venv: venv<7>.
* wave: wave<2>.
* weakref: weakref<2>.
* xml.etree: xml etree<2>.
* zipfile: zipfile<5>.

CPython Implementation Changes

* PEP 445; Customization of CPython Memory Allocators: PEP 445 Customization of CPython Memory Allocators.
* PEP 442; Safe Object Finalization: PEP 442 Safe Object Finalization.
* PEP 456; Secure and Interchangeable Hash Algorithm: PEP 456 Secure and Interchangeable Hash Algorithm.
* PEP 436; Argument Clinic: PEP 436 Argument Clinic.
* Other Alterações a compilações e API C::
* Other Improvements: Other Improvements<2>.
* Otimizações Relevantes::

Descontinuados

* Deprecations in the Python API::
* Deprecated Features::

Removidos

* Operating Systems No Longer Supported::
* Remoção de APIs e recursos: Remoção de APIs e recursos<5>.
* Code Cleanups::

Porting to Python 3.4

* Changes in ‘python’ Command Behavior: Changes in ‘python’ Command Behavior<2>.
* Alterações na API Python: Alterações na API Python<10>.
* Alterações na API C: Alterações na API C<15>.

Alterado em 3.4.3

* PEP 476; Habilitando verificação de certificado por padrão para clientes http stdlib: PEP 476 Habilitando verificação de certificado por padrão para clientes http stdlib.

O que há de novo no Python 3.3

* Resumo – Destaques da versão: Resumo – Destaques da versão<11>.
* PEP 405; Ambientes Virtuais: PEP 405 Ambientes Virtuais.
* PEP 420; Implicit Namespace Packages: PEP 420 Implicit Namespace Packages.
* PEP 3118; New memoryview implementation and buffer protocol documentation: PEP 3118 New memoryview implementation and buffer protocol documentation.
* PEP 393; Flexible String Representation: PEP 393 Flexible String Representation.
* PEP 397; Python Launcher for Windows: PEP 397 Python Launcher for Windows.
* PEP 3151; Reworking the OS and IO exception hierarchy: PEP 3151 Reworking the OS and IO exception hierarchy.
* PEP 380; Syntax for Delegating to a Subgenerator: PEP 380 Syntax for Delegating to a Subgenerator.
* PEP 409; Suppressing exception context: PEP 409 Suppressing exception context.
* PEP 414; Explicit Unicode literals: PEP 414 Explicit Unicode literals.
* PEP 3155; Qualified name for classes and functions: PEP 3155 Qualified name for classes and functions.
* PEP 412; Key-Sharing Dictionary: PEP 412 Key-Sharing Dictionary.
* PEP 362; Function Signature Object: PEP 362 Function Signature Object.
* PEP 421; Adding sys.implementation: PEP 421 Adding sys implementation.
* Using importlib as the Implementation of Import::
* Outras mudanças na linguagem: Outras mudanças na linguagem<11>.
* A Finer-Grained Import Lock::
* Builtin functions and types::
* Novos módulos: Novos módulos<11>.
* Módulos melhorados: Módulos melhorados<11>.
* Otimizações: Otimizações<10>.
* Mudanças a construções e API C: Mudanças a construções e API C<4>.
* Descontinuados: Descontinuados<12>.
* Porting to Python 3.3: Porting to Python 3 3.

PEP 3118: New memoryview implementation and buffer protocol documentation

* Recursos::
* Mudanças na API::

PEP 393: Flexible String Representation

* Funcionalidade::
* Desempenho e utilização de recursos::

PEP 421: Adding sys.implementation

* SimpleNamespace::

Using importlib as the Implementation of Import

* New APIs::
* Visible Changes::

Novos módulos

* faulthandler: faulthandler<4>.
* ipaddress: ipaddress<6>.
* lzma: lzma<2>.

Módulos melhorados

* abc: abc<2>.
* array: array<5>.
* base64: base64<4>.
* binascii: binascii<3>.
* bz2: bz2<2>.
* codecs: codecs<2>.
* collections: collections<7>.
* contextlib: contextlib<7>.
* crypt: crypt<2>.
* curses: curses<5>.
* datetime: datetime<6>.
* decimal: decimal<3>.
* email: email<5>.
* ftplib: ftplib<3>.
* functools: functools<6>.
* gc: gc<6>.
* hmac: hmac<4>.
* http: http<4>.
* html: html<2>.
* imaplib: imaplib<3>.
* inspect: inspect<9>.
* io: io<6>.
* itertools: itertools<6>.
* logging: logging<7>.
* math: math<9>.
* mmap: mmap<4>.
* multiprocessing: multiprocessing<8>.
* nntplib: nntplib<2>.
* os: os<12>.
* pdb: pdb<7>.
* pickle: pickle<5>.
* pydoc: pydoc<5>.
* re: re<9>.
* sched::
* select: select<2>.
* shlex: shlex<3>.
* shutil: shutil<7>.
* signal: signal<4>.
* smtpd: smtpd<4>.
* smtplib: smtplib<4>.
* socket: socket<10>.
* socketserver: socketserver<3>.
* sqlite3: sqlite3<10>.
* ssl: ssl<11>.
* stat: stat<2>.
* struct: struct<3>.
* subprocess: subprocess<6>.
* sys: sys<13>.
* tarfile: tarfile<9>.
* tempfile: tempfile<4>.
* textwrap: textwrap<2>.
* threading: threading<8>.
* time: time<8>.
* types: types<7>.
* unittest: unittest<10>.
* urllib: urllib<4>.
* webbrowser: webbrowser<3>.
* xml.etree.ElementTree: xml etree ElementTree<2>.
* zlib: zlib<2>.

decimal

* Recursos: Recursos<2>.
* Mudanças na API: Mudanças na API<2>.

email

* Policy Framework::
* Provisional Policy with New Header API::
* Other API Changes::

Descontinuados

* Unsupported Operating Systems: Unsupported Operating Systems<2>.
* Deprecated Python modules, functions and methods: Deprecated Python modules functions and methods<4>.
* Deprecated functions and types of the C API: Deprecated functions and types of the C API<3>.
* Deprecated features::

Porting to Python 3.3

* Porting Python code::
* Porting C code::
* Building C extensions::
* Command Line Switch Changes::

O que há de novo no Python 3.2

* PEP 384; Defining a Stable ABI: PEP 384 Defining a Stable ABI.
* PEP 389; Argparse Command Line Parsing Module: PEP 389 Argparse Command Line Parsing Module.
* PEP 391; Dictionary Based Configuration for Logging: PEP 391 Dictionary Based Configuration for Logging.
* PEP 3148; The concurrent.futures module: PEP 3148 The concurrent futures module.
* PEP 3147; PYC Repository Directories: PEP 3147 PYC Repository Directories.
* PEP 3149; ABI Version Tagged .so Files: PEP 3149 ABI Version Tagged so Files.
* PEP 3333; Python Web Server Gateway Interface v1.0.1: PEP 3333 Python Web Server Gateway Interface v1 0 1.
* Outras mudanças na linguagem: Outras mudanças na linguagem<12>.
* New, Improved, and Deprecated Modules: New Improved and Deprecated Modules.
* Multi-threading::
* Otimizações: Otimizações<11>.
* Unicode::
* Codecs::
* Documentação::
* IDLE::
* Code Repository::
* Mudanças a construções e API C: Mudanças a construções e API C<5>.
* Porting to Python 3.2: Porting to Python 3 2.

New, Improved, and Deprecated Modules

* email: email<6>.
* elementtree::
* functools: functools<7>.
* itertools: itertools<7>.
* collections: collections<8>.
* threading: threading<9>.
* datetime and time::
* math: math<10>.
* abc: abc<3>.
* io: io<7>.
* reprlib::
* logging: logging<8>.
* csv: csv<4>.
* contextlib: contextlib<8>.
* decimal and fractions::
* ftp::
* popen::
* select: select<3>.
* gzip and zipfile::
* tarfile: tarfile<10>.
* hashlib: hashlib<7>.
* ast: ast<5>.
* os: os<13>.
* shutil: shutil<8>.
* sqlite3: sqlite3<11>.
* html: html<3>.
* socket: socket<11>.
* ssl: ssl<12>.
* nntp::
* сертифікати::
* imaplib: imaplib<4>.
* http.client: http client<4>.
* unittest: unittest<11>.
* random: random<5>.
* poplib: poplib<4>.
* asyncore: asyncore<2>.
* tempfile: tempfile<5>.
* inspect: inspect<10>.
* pydoc: pydoc<6>.
* dis: dis<5>.
* dbm: dbm<7>.
* ctypes: ctypes<3>.
* site: site<4>.
* sysconfig: sysconfig<3>.
* pdb: pdb<8>.
* configparser: configparser<5>.
* urllib.parse: urllib parse<6>.
* mailbox::
* turtledemo::

O que há de novo no Python 3.1

* PEP 372; Dicionários ordenados: PEP 372 Dicionários ordenados.
* PEP 378; Especificador de formato para separador de milhares: PEP 378 Especificador de formato para separador de milhares.
* Outras mudanças na linguagem: Outras mudanças na linguagem<13>.
* New, Improved, and Deprecated Modules: New Improved and Deprecated Modules<2>.
* Otimizações: Otimizações<12>.
* IDLE: IDLE<2>.
* Mudanças a construções e API C: Mudanças a construções e API C<6>.
* Porting to Python 3.1: Porting to Python 3 1.

O que há de novo no Python 3.0

* Obstáculos comuns::
* Visão geral das alterações da sintaxe::
* Mudanças já presentes no Python 2.6: Mudanças já presentes no Python 2 6.
* Mudanças na biblioteca::
* PEP 3101; Uma nova abordagem para formatação de strings: PEP 3101 Uma nova abordagem para formatação de strings.
* Mudanças para exceções::
* Outras mudanças diversas::
* Mudanças a construções e API C: Mudanças a construções e API C<7>.
* Desempenho::
* Portando para o Python 3.0: Portando para o Python 3 0.

Obstáculos comuns

* print é uma função::
* Visualizações e iteradores em vez de listas::
* Comparações de ordenação::
* Inteiros::
* Texto vs. Dados em vez de Unicode vs. 8 bits: Texto vs Dados em vez de Unicode vs 8 bits.

Visão geral das alterações da sintaxe

* Nova sintaxe::
* Sintaxe alterada::
* Sintaxe removida::

Outras mudanças diversas

* Operadores e métodos especiais::
* Funções embutidas::

O que há de novo no Python 2.7

* O futuro para o Python 2.x: O futuro para o Python 2 x.
* Mudanças no tratamento de avisos de descontinuação::
* Recursos do Python 3.1: Recursos do Python 3 1.
* PEP 372; Adicionando um dicionário ordenado a coleções: PEP 372 Adicionando um dicionário ordenado a coleções.
* PEP 378; Especificador de formato para separador de milhares: PEP 378 Especificador de formato para separador de milhares<2>.
* PEP 389; O módulo argparse para analisar linhas de comando: PEP 389 O módulo argparse para analisar linhas de comando.
* PEP 391; Configuração baseada em dicionário para logging: PEP 391 Configuração baseada em dicionário para logging.
* PEP 3106; Views de dicionário: PEP 3106 Views de dicionário.
* PEP 3137; O objeto memoryview: PEP 3137 O objeto memoryview.
* Outras mudanças na linguagem: Outras mudanças na linguagem<14>.
* Módulos Novos ou Aprimorados::
* Mudanças a construções e API C: Mudanças a construções e API C<8>.
* Outras alterações e correções::
* Portando para Python 2.7: Portando para Python 2 7.
* Novos recursos adicionados às versões de manutenção do Python 2.7: Novos recursos adicionados às versões de manutenção do Python 2 7.
* Reconhecimentos::

Outras mudanças na linguagem

* Alterações no interpretador::
* Otimizações: Otimizações<13>.

Módulos Novos ou Aprimorados

* Novo módulo; importlib: Novo módulo importlib.
* Novo módulo; sysconfig: Novo módulo sysconfig.
* ttk; Widgets temáticos para Tk: ttk Widgets temáticos para Tk.
* Módulo atualizado; unittest: Módulo atualizado unittest.
* Módulo atualizado; ElementTree 1.3: Módulo atualizado ElementTree 1 3.

Mudanças a construções e API C

* Capsules::
* Alterações específicas da porta; Windows: Alterações específicas da porta Windows.
* Alterações específicas da porta; Mac OS X: Alterações específicas da porta Mac OS X.
* Alterações específicas da porta; FreeBSD: Alterações específicas da porta FreeBSD.

Novos recursos adicionados às versões de manutenção do Python 2.7

* Duas novas variáveis de ambiente para modo de depuração::
* PEP 434; Exceção de aprimoramento do IDLE para todos os branches: PEP 434 Exceção de aprimoramento do IDLE para todos os branches.
* PEP 466; Aprimoramentos de segurança de rede do Python 2.7: PEP 466 Aprimoramentos de segurança de rede do Python 2 7.
* PEP 477; Backport do ensurepip (PEP 453) para o Python 2.7: PEP 477 Backport do ensurepip PEP 453 para o Python 2 7.
* PEP 476; Habilitando verificação de certificado por padrão para clientes http stdlib: PEP 476 Habilitando verificação de certificado por padrão para clientes http stdlib<2>.
* PEP 493; Ferramentas de migração de verificação HTTPS para Python 2.7: PEP 493 Ferramentas de migração de verificação HTTPS para Python 2 7.
* Novo alvo de construção make regen-all: Novo alvo de construção make regen-all<3>.
* Remoção do alvo de construção make touch: Remoção do alvo de construção make touch<3>.

PEP 477: Backport do ensurepip (PEP 453) para o Python 2.7

* Bootstrapping pip By Default: Bootstrapping pip By Default<2>.
* Mudanças na documentação: Mudanças na documentação<2>.

O que há de novo no Python 2.6

* Python 3.0: Python 3 0.
* Changes to the Development Process::
* PEP 343; The ‘with’ statement: PEP 343 The ‘with’ statement.
* PEP 366; Explicit Relative Imports From a Main Module: PEP 366 Explicit Relative Imports From a Main Module.
* PEP 370; Per-user site-packages Directory: PEP 370 Per-user site-packages Directory.
* PEP 371; The multiprocessing Package: PEP 371 The multiprocessing Package.
* PEP 3101; Advanced String Formatting: PEP 3101 Advanced String Formatting.
* PEP 3105; print As a Function: PEP 3105 print As a Function.
* PEP 3110; Exception-Handling Changes: PEP 3110 Exception-Handling Changes.
* PEP 3112; Byte Literals: PEP 3112 Byte Literals.
* PEP 3116; New I/O Library: PEP 3116 New I/O Library.
* PEP 3118; Revised Buffer Protocol: PEP 3118 Revised Buffer Protocol.
* PEP 3119; Abstract Base Classes: PEP 3119 Abstract Base Classes.
* PEP 3127; Integer Literal Support and Syntax: PEP 3127 Integer Literal Support and Syntax.
* PEP 3129; Class Decorators: PEP 3129 Class Decorators.
* PEP 3141; A Type Hierarchy for Numbers: PEP 3141 A Type Hierarchy for Numbers.
* Outras mudanças na linguagem: Outras mudanças na linguagem<15>.
* Módulos Novos ou Aprimorados: Módulos Novos ou Aprimorados<2>.
* Deprecations and Removals::
* Mudanças a construções e API C: Mudanças a construções e API C<9>.
* Porting to Python 2.6: Porting to Python 2 6.
* Reconhecimentos: Reconhecimentos<2>.

Changes to the Development Process

* New Issue Tracker; Roundup: New Issue Tracker Roundup.
* New Documentation Format; reStructuredText Using Sphinx: New Documentation Format reStructuredText Using Sphinx.

PEP 343: The ‘with’ statement

* Writing Context Managers::
* The contextlib module::

PEP 3141: A Type Hierarchy for Numbers

* The fractions Module::

Outras mudanças na linguagem

* Otimizações: Otimizações<14>.
* Alterações no interpretador: Alterações no interpretador<2>.

Módulos Novos ou Aprimorados

* The ast module::
* The future_builtins module::
* The json module; JavaScript Object Notation: The json module JavaScript Object Notation.
* The plistlib module; A Property-List Parser: The plistlib module A Property-List Parser.
* ctypes Enhancements::
* Improved SSL Support::

Mudanças a construções e API C

* Alterações específicas da porta; Windows: Alterações específicas da porta Windows<2>.
* Alterações específicas da porta; Mac OS X: Alterações específicas da porta Mac OS X<2>.
* Port-Specific Changes; IRIX: Port-Specific Changes IRIX.

What’s New in Python 2.5

* PEP 308; Conditional Expressions: PEP 308 Conditional Expressions.
* PEP 309; Partial Function Application: PEP 309 Partial Function Application.
* PEP 314; Metadata for Python Software Packages v1.1: PEP 314 Metadata for Python Software Packages v1 1.
* PEP 328; Absolute and Relative Imports: PEP 328 Absolute and Relative Imports.
* PEP 338; Executing Modules as Scripts: PEP 338 Executing Modules as Scripts.
* PEP 341; Unified try/except/finally: PEP 341 Unified try/except/finally.
* PEP 342; New Generator Features: PEP 342 New Generator Features.
* PEP 343; The ‘with’ statement: PEP 343 The ‘with’ statement<2>.
* PEP 352; Exceptions as New-Style Classes: PEP 352 Exceptions as New-Style Classes.
* PEP 353; Using ssize_t as the index type: PEP 353 Using ssize_t as the index type.
* PEP 357; The ‘__index__’ method: PEP 357 The ‘__index__’ method.
* Outras mudanças na linguagem: Outras mudanças na linguagem<16>.
* New, Improved, and Removed Modules: New Improved and Removed Modules.
* Mudanças a construções e API C: Mudanças a construções e API C<10>.
* Porting to Python 2.5: Porting to Python 2 5.
* Reconhecimentos: Reconhecimentos<3>.

PEP 343: The ‘with’ statement

* Writing Context Managers: Writing Context Managers<2>.
* The contextlib module: The contextlib module<2>.

Outras mudanças na linguagem

* Interactive Interpreter Changes::
* Otimizações: Otimizações<15>.

New, Improved, and Removed Modules

* The ctypes package::
* The ElementTree package::
* The hashlib package::
* The sqlite3 package::
* The wsgiref package::

Mudanças a construções e API C

* Port-Specific Changes::

What’s New in Python 2.4

* PEP 218; Built-In Set Objects: PEP 218 Built-In Set Objects.
* PEP 237; Unifying Long Integers and Integers: PEP 237 Unifying Long Integers and Integers.
* PEP 289; Generator Expressions: PEP 289 Generator Expressions.
* PEP 292; Simpler String Substitutions: PEP 292 Simpler String Substitutions.
* PEP 318; Decorators for Functions and Methods: PEP 318 Decorators for Functions and Methods.
* PEP 322; Reverse Iteration: PEP 322 Reverse Iteration.
* PEP 324; New subprocess Module: PEP 324 New subprocess Module.
* PEP 327; Decimal Data Type: PEP 327 Decimal Data Type.
* PEP 328; Multi-line Imports: PEP 328 Multi-line Imports.
* PEP 331; Locale-Independent Float/String Conversions: PEP 331 Locale-Independent Float/String Conversions.
* Outras mudanças na linguagem: Outras mudanças na linguagem<17>.
* New, Improved, and Deprecated Modules: New Improved and Deprecated Modules<3>.
* Mudanças a construções e API C: Mudanças a construções e API C<11>.
* Porting to Python 2.4: Porting to Python 2 4.
* Reconhecimentos: Reconhecimentos<4>.

PEP 327: Decimal Data Type

* Why is Decimal needed?::
* The Decimal type::
* The Context type::

Outras mudanças na linguagem

* Otimizações: Otimizações<16>.

New, Improved, and Deprecated Modules

* cookielib::
* doctest: doctest<5>.

Mudanças a construções e API C

* Port-Specific Changes: Port-Specific Changes<2>.

What’s New in Python 2.3

* PEP 218; A Standard Set Datatype: PEP 218 A Standard Set Datatype.
* PEP 255; Simple Generators: PEP 255 Simple Generators.
* PEP 263; Source Code Encodings: PEP 263 Source Code Encodings.
* PEP 273; Importing Modules from ZIP Archives: PEP 273 Importing Modules from ZIP Archives.
* PEP 277; Unicode file name support for Windows NT: PEP 277 Unicode file name support for Windows NT.
* PEP 278; Universal Newline Support: PEP 278 Universal Newline Support.
* PEP 279; enumerate(): PEP 279 enumerate.
* PEP 282; The logging Package: PEP 282 The logging Package.
* PEP 285; A Boolean Type: PEP 285 A Boolean Type.
* PEP 293; Codec Error Handling Callbacks: PEP 293 Codec Error Handling Callbacks.
* PEP 301; Package Index and Metadata for Distutils: PEP 301 Package Index and Metadata for Distutils.
* PEP 302; New Import Hooks: PEP 302 New Import Hooks.
* PEP 305; Comma-separated Files: PEP 305 Comma-separated Files.
* PEP 307; Pickle Enhancements: PEP 307 Pickle Enhancements.
* Extended Slices::
* Outras mudanças na linguagem: Outras mudanças na linguagem<18>.
* New, Improved, and Deprecated Modules: New Improved and Deprecated Modules<4>.
* Pymalloc; A Specialized Object Allocator: Pymalloc A Specialized Object Allocator.
* Mudanças a construções e API C: Mudanças a construções e API C<12>.
* Outras alterações e correções: Outras alterações e correções<2>.
* Porting to Python 2.3: Porting to Python 2 3.
* Reconhecimentos: Reconhecimentos<5>.

Outras mudanças na linguagem

* String Changes::
* Otimizações: Otimizações<17>.

New, Improved, and Deprecated Modules

* Date/Time Type::
* The optparse Module::

Mudanças a construções e API C

* Port-Specific Changes: Port-Specific Changes<3>.

What’s New in Python 2.2

* Introdução::
* PEPs 252 and 253; Type and Class Changes: PEPs 252 and 253 Type and Class Changes.
* PEP 234; Iterators: PEP 234 Iterators.
* PEP 255; Simple Generators: PEP 255 Simple Generators<2>.
* PEP 237; Unifying Long Integers and Integers: PEP 237 Unifying Long Integers and Integers<2>.
* PEP 238; Changing the Division Operator: PEP 238 Changing the Division Operator.
* Unicode Changes::
* PEP 227; Nested Scopes: PEP 227 Nested Scopes.
* Módulos Novos ou Aprimorados: Módulos Novos ou Aprimorados<3>.
* Interpreter Changes and Fixes::
* Outras alterações e correções: Outras alterações e correções<3>.
* Reconhecimentos: Reconhecimentos<6>.

PEPs 252 and 253: Type and Class Changes

* Old and New Classes::
* Descriptors::
* Multiple Inheritance; The Diamond Rule: Multiple Inheritance The Diamond Rule.
* Attribute Access::
* Related Links::

What’s New in Python 2.1

* Introdução: Introdução<2>.
* PEP 227; Nested Scopes: PEP 227 Nested Scopes<2>.
* PEP 236; __future__ Directives: PEP 236 __future__ Directives.
* PEP 207; Rich Comparisons: PEP 207 Rich Comparisons.
* PEP 230; Warning Framework: PEP 230 Warning Framework.
* PEP 229; New Build System: PEP 229 New Build System.
* PEP 205; Weak References: PEP 205 Weak References.
* PEP 232; Function Attributes: PEP 232 Function Attributes.
* PEP 235; Importing Modules on Case-Insensitive Platforms: PEP 235 Importing Modules on Case-Insensitive Platforms.
* PEP 217; Interactive Display Hook: PEP 217 Interactive Display Hook.
* PEP 208; New Coercion Model: PEP 208 New Coercion Model.
* PEP 241; Metadata in Python Packages: PEP 241 Metadata in Python Packages.
* Módulos Novos ou Aprimorados: Módulos Novos ou Aprimorados<4>.
* Outras alterações e correções: Outras alterações e correções<4>.
* Reconhecimentos: Reconhecimentos<7>.

What’s New in Python 2.0

* Introdução: Introdução<3>.
* What About Python 1.6?: What About Python 1 6?.
* New Development Process::
* Unicode: Unicode<2>.
* Compreensões de lista::
* Augmented Assignment::
* String Methods::
* Garbage Collection of Cycles::
* Other Core Changes::
* Porting to 2.0: Porting to 2 0.
* Extending/Embedding Changes::
* Distutils; Making Modules Easy to Install: Distutils Making Modules Easy to Install.
* XML Modules::
* Module changes::
* Novos módulos: Novos módulos<12>.
* IDLE Improvements::
* Deleted and Deprecated Modules::
* Reconhecimentos: Reconhecimentos<8>.

Other Core Changes

* Minor Language Changes::
* Changes to Built-in Functions::

XML Modules

* SAX2 Support::
* DOM Support::
* Relationship to PyXML::

Changelog

* Python seguinte::
* Python 3.13.11 final: Python 3 13 11 final.
* Python 3.13.10 final: Python 3 13 10 final.
* Python 3.13.9 final: Python 3 13 9 final.
* Python 3.13.8 final: Python 3 13 8 final.
* Python 3.13.7 final: Python 3 13 7 final.
* Python 3.13.6 final: Python 3 13 6 final.
* Python 3.13.5 final: Python 3 13 5 final.
* Python 3.13.4 final: Python 3 13 4 final.
* Python 3.13.3 final: Python 3 13 3 final.
* Python 3.13.2 final: Python 3 13 2 final.
* Python 3.13.1 final: Python 3 13 1 final.
* Python 3.13.0 final: Python 3 13 0 final.
* Python 3.13.0 release candidate 3: Python 3 13 0 release candidate 3.
* Python 3.13.0 release candidate 2: Python 3 13 0 release candidate 2.
* Python 3.13.0 release candidate 1: Python 3 13 0 release candidate 1.
* Python 3.13.0 beta 4: Python 3 13 0 beta 4.
* Python 3.13.0 beta 3: Python 3 13 0 beta 3.
* Python 3.13.0 beta 2: Python 3 13 0 beta 2.
* Python 3.13.0 beta 1: Python 3 13 0 beta 1.
* Python 3.13.0 alpha 6: Python 3 13 0 alpha 6.
* Python 3.13.0 alpha 5: Python 3 13 0 alpha 5.
* Python 3.13.0 alpha 4: Python 3 13 0 alpha 4.
* Python 3.13.0 alpha 3: Python 3 13 0 alpha 3.
* Python 3.13.0 alpha 2: Python 3 13 0 alpha 2.
* Python 3.13.0 alpha 1: Python 3 13 0 alpha 1.
* Python 3.12.0 beta 1: Python 3 12 0 beta 1.
* Python 3.12.0 alpha 7: Python 3 12 0 alpha 7.
* Python 3.12.0 alpha 6: Python 3 12 0 alpha 6.
* Python 3.12.0 alpha 5: Python 3 12 0 alpha 5.
* Python 3.12.0 alpha 4: Python 3 12 0 alpha 4.
* Python 3.12.0 alpha 3: Python 3 12 0 alpha 3.
* Python 3.12.0 alpha 2: Python 3 12 0 alpha 2.
* Python 3.12.0 alpha 1: Python 3 12 0 alpha 1.
* Python 3.11.0 beta 1: Python 3 11 0 beta 1.
* Python 3.11.0 alpha 7: Python 3 11 0 alpha 7.
* Python 3.11.0 alpha 6: Python 3 11 0 alpha 6.
* Python 3.11.0 alpha 5: Python 3 11 0 alpha 5.
* Python 3.11.0 alpha 4: Python 3 11 0 alpha 4.
* Python 3.11.0 alpha 3: Python 3 11 0 alpha 3.
* Python 3.11.0 alpha 2: Python 3 11 0 alpha 2.
* Python 3.11.0 alpha 1: Python 3 11 0 alpha 1.
* Python 3.10.0 beta 1: Python 3 10 0 beta 1.
* Python 3.10.0 alpha 7: Python 3 10 0 alpha 7.
* Python 3.10.0 alpha 6: Python 3 10 0 alpha 6.
* Python 3.10.0 alpha 5: Python 3 10 0 alpha 5.
* Python 3.10.0 alpha 4: Python 3 10 0 alpha 4.
* Python 3.10.0 alpha 3: Python 3 10 0 alpha 3.
* Python 3.10.0 alpha 2: Python 3 10 0 alpha 2.
* Python 3.10.0 alpha 1: Python 3 10 0 alpha 1.
* Python 3.9.0 beta 1: Python 3 9 0 beta 1.
* Python 3.9.0 alpha 6: Python 3 9 0 alpha 6.
* Python 3.9.0 alpha 5: Python 3 9 0 alpha 5.
* Python 3.9.0 alpha 4: Python 3 9 0 alpha 4.
* Python 3.9.0 alpha 3: Python 3 9 0 alpha 3.
* Python 3.9.0 alpha 2: Python 3 9 0 alpha 2.
* Python 3.9.0 alpha 1: Python 3 9 0 alpha 1.
* Python 3.8.0 beta 1: Python 3 8 0 beta 1.
* Python 3.8.0 alpha 4: Python 3 8 0 alpha 4.
* Python 3.8.0 alpha 3: Python 3 8 0 alpha 3.
* Python 3.8.0 alpha 2: Python 3 8 0 alpha 2.
* Python 3.8.0 alpha 1: Python 3 8 0 alpha 1.
* Python 3.7.0 final: Python 3 7 0 final.
* Python 3.7.0 release candidate 1: Python 3 7 0 release candidate 1.
* Python 3.7.0 beta 5: Python 3 7 0 beta 5.
* Python 3.7.0 beta 4: Python 3 7 0 beta 4.
* Python 3.7.0 beta 3: Python 3 7 0 beta 3.
* Python 3.7.0 beta 2: Python 3 7 0 beta 2.
* Python 3.7.0 beta 1: Python 3 7 0 beta 1.
* Python 3.7.0 alpha 4: Python 3 7 0 alpha 4.
* Python 3.7.0 alpha 3: Python 3 7 0 alpha 3.
* Python 3.7.0 alpha 2: Python 3 7 0 alpha 2.
* Python 3.7.0 alpha 1: Python 3 7 0 alpha 1.
* Python 3.6.6 final: Python 3 6 6 final.
* Python 3.6.6 release candidate 1: Python 3 6 6 release candidate 1.
* Python 3.6.5 final: Python 3 6 5 final.
* Python 3.6.5 release candidate 1: Python 3 6 5 release candidate 1.
* Python 3.6.4 final: Python 3 6 4 final.
* Python 3.6.4 release candidate 1: Python 3 6 4 release candidate 1.
* Python 3.6.3 final: Python 3 6 3 final.
* Python 3.6.3 release candidate 1: Python 3 6 3 release candidate 1.
* Python 3.6.2 final: Python 3 6 2 final.
* Python 3.6.2 release candidate 2: Python 3 6 2 release candidate 2.
* Python 3.6.2 release candidate 1: Python 3 6 2 release candidate 1.
* Python 3.6.1 final: Python 3 6 1 final.
* Python 3.6.1 release candidate 1: Python 3 6 1 release candidate 1.
* Python 3.6.0 final: Python 3 6 0 final.
* Python 3.6.0 release candidate 2: Python 3 6 0 release candidate 2.
* Python 3.6.0 release candidate 1: Python 3 6 0 release candidate 1.
* Python 3.6.0 beta 4: Python 3 6 0 beta 4.
* Python 3.6.0 beta 3: Python 3 6 0 beta 3.
* Python 3.6.0 beta 2: Python 3 6 0 beta 2.
* Python 3.6.0 beta 1: Python 3 6 0 beta 1.
* Python 3.6.0 alpha 4: Python 3 6 0 alpha 4.
* Python 3.6.0 alpha 3: Python 3 6 0 alpha 3.
* Python 3.6.0 alpha 2: Python 3 6 0 alpha 2.
* Python 3.6.0 alpha 1: Python 3 6 0 alpha 1.
* Python 3.5.5 final: Python 3 5 5 final.
* Python 3.5.5 release candidate 1: Python 3 5 5 release candidate 1.
* Python 3.5.4 final: Python 3 5 4 final.
* Python 3.5.4 release candidate 1: Python 3 5 4 release candidate 1.
* Python 3.5.3 final: Python 3 5 3 final.
* Python 3.5.3 release candidate 1: Python 3 5 3 release candidate 1.
* Python 3.5.2 final: Python 3 5 2 final.
* Python 3.5.2 release candidate 1: Python 3 5 2 release candidate 1.
* Python 3.5.1 final: Python 3 5 1 final.
* Python 3.5.1 release candidate 1: Python 3 5 1 release candidate 1.
* Python 3.5.0 final: Python 3 5 0 final.
* Python 3.5.0 release candidate 4: Python 3 5 0 release candidate 4.
* Python 3.5.0 release candidate 3: Python 3 5 0 release candidate 3.
* Python 3.5.0 release candidate 2: Python 3 5 0 release candidate 2.
* Python 3.5.0 release candidate 1: Python 3 5 0 release candidate 1.
* Python 3.5.0 beta 4: Python 3 5 0 beta 4.
* Python 3.5.0 beta 3: Python 3 5 0 beta 3.
* Python 3.5.0 beta 2: Python 3 5 0 beta 2.
* Python 3.5.0 beta 1: Python 3 5 0 beta 1.
* Python 3.5.0 alpha 4: Python 3 5 0 alpha 4.
* Python 3.5.0 alpha 3: Python 3 5 0 alpha 3.
* Python 3.5.0 alpha 2: Python 3 5 0 alpha 2.
* Python 3.5.0 alpha 1: Python 3 5 0 alpha 1.

Python seguinte

* Windows::
* Ferramentas/Demos::
* Testes::
* Segurança::
* Biblioteca::
* IDLE: IDLE<3>.
* Núcleo e embutidos::
* API C::
* Construção::

Python 3.13.11 final

* Segurança: Segurança<2>.
* Biblioteca: Biblioteca<2>.
* Núcleo e embutidos: Núcleo e embutidos<2>.

Python 3.13.10 final

* Ferramentas/Demos: Ferramentas/Demos<2>.
* Testes: Testes<2>.
* Segurança: Segurança<3>.
* Biblioteca: Biblioteca<3>.
* IDLE: IDLE<4>.
* Documentação: Documentação<2>.
* Núcleo e embutidos: Núcleo e embutidos<3>.
* API C: API C<2>.

Python 3.13.9 final

* Biblioteca: Biblioteca<4>.

Python 3.13.8 final

* macOS::
* Windows: Windows<2>.
* Ferramentas/Demos: Ferramentas/Demos<3>.
* Testes: Testes<3>.
* Segurança: Segurança<4>.
* Biblioteca: Biblioteca<5>.
* Núcleo e embutidos: Núcleo e embutidos<4>.
* API C: API C<3>.
* Construção: Construção<2>.

Python 3.13.7 final

* Biblioteca: Biblioteca<6>.
* Documentação: Documentação<3>.
* Núcleo e embutidos: Núcleo e embutidos<5>.

Python 3.13.6 final

* macOS: macOS<2>.
* Windows: Windows<3>.
* Ferramentas/Demos: Ferramentas/Demos<4>.
* Testes: Testes<4>.
* Segurança: Segurança<5>.
* Biblioteca: Biblioteca<7>.
* Documentação: Documentação<4>.
* Núcleo e embutidos: Núcleo e embutidos<6>.
* Construção: Construção<3>.

Python 3.13.5 final

* Windows: Windows<4>.
* Testes: Testes<5>.
* Biblioteca: Biblioteca<8>.
* Núcleo e embutidos: Núcleo e embutidos<7>.
* API C: API C<4>.

Python 3.13.4 final

* Windows: Windows<5>.
* Testes: Testes<6>.
* Segurança: Segurança<6>.
* Biblioteca: Biblioteca<9>.
* IDLE: IDLE<5>.
* Documentação: Documentação<5>.
* Biblioteca: Biblioteca<10>.
* Núcleo e embutidos: Núcleo e embutidos<8>.
* Biblioteca: Biblioteca<11>.
* Núcleo e embutidos: Núcleo e embutidos<9>.
* API C: API C<5>.
* Construção: Construção<4>.

Python 3.13.3 final

* macOS: macOS<3>.
* Windows: Windows<6>.
* Ferramentas/Demos: Ferramentas/Demos<5>.
* Testes: Testes<7>.
* Segurança: Segurança<7>.
* Biblioteca: Biblioteca<12>.
* IDLE: IDLE<6>.
* Documentação: Documentação<6>.
* Núcleo e embutidos: Núcleo e embutidos<10>.
* Biblioteca: Biblioteca<13>.
* Núcleo e embutidos: Núcleo e embutidos<11>.
* API C: API C<6>.
* Construção: Construção<5>.

Python 3.13.2 final

* macOS: macOS<4>.
* Windows: Windows<7>.
* Ferramentas/Demos: Ferramentas/Demos<6>.
* Testes: Testes<8>.
* Segurança: Segurança<8>.
* Biblioteca: Biblioteca<14>.
* Documentação: Documentação<7>.
* Biblioteca: Biblioteca<15>.
* Núcleo e embutidos: Núcleo e embutidos<12>.
* API C: API C<7>.
* Construção: Construção<6>.

Python 3.13.1 final

* macOS: macOS<5>.
* Windows: Windows<8>.
* Ferramentas/Demos: Ferramentas/Demos<7>.
* Testes: Testes<9>.
* Segurança: Segurança<9>.
* Biblioteca: Biblioteca<16>.
* IDLE: IDLE<7>.
* Documentação: Documentação<8>.
* Núcleo e embutidos: Núcleo e embutidos<13>.
* Biblioteca: Biblioteca<17>.
* Núcleo e embutidos: Núcleo e embutidos<14>.
* Biblioteca: Biblioteca<18>.
* Núcleo e embutidos: Núcleo e embutidos<15>.
* API C: API C<8>.
* Construção: Construção<7>.

Python 3.13.0 final

* Biblioteca: Biblioteca<19>.
* Núcleo e embutidos: Núcleo e embutidos<16>.

Python 3.13.0 release candidate 3

* macOS: macOS<6>.
* Windows: Windows<9>.
* Testes: Testes<10>.
* Biblioteca: Biblioteca<20>.
* IDLE: IDLE<8>.
* Documentação: Documentação<9>.
* Núcleo e embutidos: Núcleo e embutidos<17>.
* API C: API C<9>.
* Construção: Construção<8>.

Python 3.13.0 release candidate 2

* macOS: macOS<7>.
* Windows: Windows<10>.
* Ferramentas/Demos: Ferramentas/Demos<8>.
* Testes: Testes<11>.
* Segurança: Segurança<10>.
* Biblioteca: Biblioteca<21>.
* IDLE: IDLE<9>.
* Biblioteca: Biblioteca<22>.
* Núcleo e embutidos: Núcleo e embutidos<18>.
* API C: API C<10>.
* Construção: Construção<9>.

Python 3.13.0 release candidate 1

* Testes: Testes<12>.
* Segurança: Segurança<11>.
* Biblioteca: Biblioteca<23>.
* IDLE: IDLE<10>.
* Núcleo e embutidos: Núcleo e embutidos<19>.
* API C: API C<11>.
* Construção: Construção<10>.

Python 3.13.0 beta 4

* Testes: Testes<13>.
* Biblioteca: Biblioteca<24>.
* IDLE: IDLE<11>.
* Documentação: Documentação<10>.
* Núcleo e embutidos: Núcleo e embutidos<20>.
* API C: API C<12>.
* Construção: Construção<11>.

Python 3.13.0 beta 3

* Núcleo e embutidos: Núcleo e embutidos<21>.
* Biblioteca: Biblioteca<25>.
* Núcleo e embutidos: Núcleo e embutidos<22>.
* Biblioteca: Biblioteca<26>.
* Construção: Construção<12>.
* API C: API C<13>.

Python 3.13.0 beta 2

* Segurança: Segurança<12>.
* Núcleo e embutidos: Núcleo e embutidos<23>.
* Biblioteca: Biblioteca<27>.
* Testes: Testes<14>.
* Construção: Construção<13>.
* Windows: Windows<11>.
* API C: API C<14>.

Python 3.13.0 beta 1

* Segurança: Segurança<13>.
* Núcleo e embutidos: Núcleo e embutidos<24>.
* Biblioteca: Biblioteca<28>.
* Núcleo e embutidos: Núcleo e embutidos<25>.
* Biblioteca: Biblioteca<29>.
* Documentação: Documentação<11>.
* Construção: Construção<14>.
* Windows: Windows<12>.
* macOS: macOS<8>.
* IDLE: IDLE<12>.
* API C: API C<15>.

Python 3.13.0 alpha 6

* Núcleo e embutidos: Núcleo e embutidos<26>.
* Biblioteca: Biblioteca<30>.
* Núcleo e embutidos: Núcleo e embutidos<27>.
* Biblioteca: Biblioteca<31>.
* Documentação: Documentação<12>.
* Testes: Testes<15>.
* Construção: Construção<15>.
* Windows: Windows<13>.
* API C: API C<16>.

Python 3.13.0 alpha 5

* Segurança: Segurança<14>.
* Núcleo e embutidos: Núcleo e embutidos<28>.
* Biblioteca: Biblioteca<32>.
* Núcleo e embutidos: Núcleo e embutidos<29>.
* Biblioteca: Biblioteca<33>.
* Núcleo e embutidos: Núcleo e embutidos<30>.
* Biblioteca: Biblioteca<34>.
* Documentação: Documentação<13>.
* Testes: Testes<16>.
* Construção: Construção<16>.
* Windows: Windows<14>.
* macOS: macOS<9>.
* IDLE: IDLE<13>.
* Ferramentas/Demos: Ferramentas/Demos<9>.
* API C: API C<17>.

Python 3.13.0 alpha 4

* Segurança: Segurança<15>.
* Núcleo e embutidos: Núcleo e embutidos<31>.
* Biblioteca: Biblioteca<35>.
* Documentação: Documentação<14>.
* Testes: Testes<17>.
* Construção: Construção<17>.
* Windows: Windows<15>.
* macOS: macOS<10>.
* IDLE: IDLE<14>.
* Ferramentas/Demos: Ferramentas/Demos<10>.
* API C: API C<18>.

Python 3.13.0 alpha 3

* Segurança: Segurança<16>.
* Núcleo e embutidos: Núcleo e embutidos<32>.
* Biblioteca: Biblioteca<36>.
* Documentação: Documentação<15>.
* Testes: Testes<18>.
* Construção: Construção<18>.
* Windows: Windows<16>.
* macOS: macOS<11>.
* IDLE: IDLE<15>.
* API C: API C<19>.

Python 3.13.0 alpha 2

* Núcleo e embutidos: Núcleo e embutidos<33>.
* Biblioteca: Biblioteca<37>.
* Testes: Testes<19>.
* Construção: Construção<19>.
* Windows: Windows<17>.
* macOS: macOS<12>.
* IDLE: IDLE<16>.
* Ferramentas/Demos: Ferramentas/Demos<11>.
* API C: API C<20>.

Python 3.13.0 alpha 1

* Segurança: Segurança<17>.
* Núcleo e embutidos: Núcleo e embutidos<34>.
* Biblioteca: Biblioteca<38>.
* Documentação: Documentação<16>.
* Testes: Testes<20>.
* Construção: Construção<20>.
* Windows: Windows<18>.
* macOS: macOS<13>.
* IDLE: IDLE<17>.
* Ferramentas/Demos: Ferramentas/Demos<12>.
* API C: API C<21>.

Python 3.12.0 beta 1

* Segurança: Segurança<18>.
* Biblioteca: Biblioteca<39>.
* Núcleo e embutidos: Núcleo e embutidos<35>.
* Biblioteca: Biblioteca<40>.
* Núcleo e embutidos: Núcleo e embutidos<36>.
* Biblioteca: Biblioteca<41>.
* Núcleo e embutidos: Núcleo e embutidos<37>.
* Biblioteca: Biblioteca<42>.
* Documentação: Documentação<17>.
* Testes: Testes<21>.
* Construção: Construção<21>.
* Windows: Windows<19>.
* macOS: macOS<14>.
* IDLE: IDLE<18>.
* Ferramentas/Demos: Ferramentas/Demos<13>.
* API C: API C<22>.

Python 3.12.0 alpha 7

* Núcleo e embutidos: Núcleo e embutidos<38>.
* Biblioteca: Biblioteca<43>.
* Núcleo e embutidos: Núcleo e embutidos<39>.
* Construção: Construção<22>.
* Núcleo e embutidos: Núcleo e embutidos<40>.
* Biblioteca: Biblioteca<44>.
* Documentação: Documentação<18>.
* Testes: Testes<22>.
* Construção: Construção<23>.
* Windows: Windows<20>.
* Ferramentas/Demos: Ferramentas/Demos<14>.
* API C: API C<23>.

Python 3.12.0 alpha 6

* Segurança: Segurança<19>.
* Núcleo e embutidos: Núcleo e embutidos<41>.
* Biblioteca: Biblioteca<45>.
* Documentação: Documentação<19>.
* Testes: Testes<23>.
* Construção: Construção<24>.
* Windows: Windows<21>.
* macOS: macOS<15>.
* API C: API C<24>.

Python 3.12.0 alpha 5

* Segurança: Segurança<20>.
* Núcleo e embutidos: Núcleo e embutidos<42>.
* Biblioteca: Biblioteca<46>.
* Documentação: Documentação<20>.
* Testes: Testes<24>.
* Construção: Construção<25>.
* Windows: Windows<22>.

Python 3.12.0 alpha 4

* Núcleo e embutidos: Núcleo e embutidos<43>.
* Biblioteca: Biblioteca<47>.
* Núcleo e embutidos: Núcleo e embutidos<44>.
* Biblioteca: Biblioteca<48>.
* Núcleo e embutidos: Núcleo e embutidos<45>.
* Biblioteca: Biblioteca<49>.
* Documentação: Documentação<21>.
* Testes: Testes<25>.
* Construção: Construção<26>.
* Windows: Windows<23>.
* macOS: macOS<16>.
* Ferramentas/Demos: Ferramentas/Demos<15>.
* API C: API C<25>.

Python 3.12.0 alpha 3

* Segurança: Segurança<21>.
* Núcleo e embutidos: Núcleo e embutidos<46>.
* Biblioteca: Biblioteca<50>.
* Núcleo e embutidos: Núcleo e embutidos<47>.
* Biblioteca: Biblioteca<51>.
* Documentação: Documentação<22>.
* Testes: Testes<26>.
* Construção: Construção<27>.
* Windows: Windows<24>.
* macOS: macOS<17>.
* Ferramentas/Demos: Ferramentas/Demos<16>.
* API C: API C<26>.

Python 3.12.0 alpha 2

* Segurança: Segurança<22>.
* Núcleo e embutidos: Núcleo e embutidos<48>.
* Construção: Construção<28>.
* Núcleo e embutidos: Núcleo e embutidos<49>.
* Biblioteca: Biblioteca<52>.
* Documentação: Documentação<23>.
* Testes: Testes<27>.
* Construção: Construção<29>.
* Windows: Windows<25>.
* macOS: macOS<18>.
* API C: API C<27>.

Python 3.12.0 alpha 1

* Segurança: Segurança<23>.
* Núcleo e embutidos: Núcleo e embutidos<50>.
* Biblioteca: Biblioteca<53>.
* Núcleo e embutidos: Núcleo e embutidos<51>.
* Biblioteca: Biblioteca<54>.
* Núcleo e embutidos: Núcleo e embutidos<52>.
* Biblioteca: Biblioteca<55>.
* Núcleo e embutidos: Núcleo e embutidos<53>.
* Biblioteca: Biblioteca<56>.
* Núcleo e embutidos: Núcleo e embutidos<54>.
* Biblioteca: Biblioteca<57>.
* Núcleo e embutidos: Núcleo e embutidos<55>.
* Biblioteca: Biblioteca<58>.
* Núcleo e embutidos: Núcleo e embutidos<56>.
* Biblioteca: Biblioteca<59>.
* Núcleo e embutidos: Núcleo e embutidos<57>.
* Biblioteca: Biblioteca<60>.
* Núcleo e embutidos: Núcleo e embutidos<58>.
* Biblioteca: Biblioteca<61>.
* Núcleo e embutidos: Núcleo e embutidos<59>.
* Biblioteca: Biblioteca<62>.
* Documentação: Documentação<24>.
* Testes: Testes<28>.
* Construção: Construção<30>.
* Windows: Windows<26>.
* macOS: macOS<19>.
* IDLE: IDLE<19>.
* Ferramentas/Demos: Ferramentas/Demos<17>.
* API C: API C<28>.

Python 3.11.0 beta 1

* Segurança: Segurança<24>.
* Núcleo e embutidos: Núcleo e embutidos<60>.
* Biblioteca: Biblioteca<63>.
* Núcleo e embutidos: Núcleo e embutidos<61>.
* Construção: Construção<31>.
* Núcleo e embutidos: Núcleo e embutidos<62>.
* Biblioteca: Biblioteca<64>.
* Documentação: Documentação<25>.
* Testes: Testes<29>.
* Construção: Construção<32>.
* Windows: Windows<27>.
* macOS: macOS<20>.
* Ferramentas/Demos: Ferramentas/Demos<18>.
* API C: API C<29>.

Python 3.11.0 alpha 7

* Núcleo e embutidos: Núcleo e embutidos<63>.
* Biblioteca: Biblioteca<65>.
* Núcleo e embutidos: Núcleo e embutidos<64>.
* Biblioteca: Biblioteca<66>.
* Núcleo e embutidos: Núcleo e embutidos<65>.
* Biblioteca: Biblioteca<67>.
* Documentação: Documentação<26>.
* Testes: Testes<30>.
* Construção: Construção<33>.
* Windows: Windows<28>.
* macOS: macOS<21>.
* Ferramentas/Demos: Ferramentas/Demos<19>.
* API C: API C<30>.

Python 3.11.0 alpha 6

* Núcleo e embutidos: Núcleo e embutidos<66>.
* Biblioteca: Biblioteca<68>.
* Núcleo e embutidos: Núcleo e embutidos<67>.
* Biblioteca: Biblioteca<69>.
* Núcleo e embutidos: Núcleo e embutidos<68>.
* Biblioteca: Biblioteca<70>.
* Núcleo e embutidos: Núcleo e embutidos<69>.
* Biblioteca: Biblioteca<71>.
* Documentação: Documentação<27>.
* Testes: Testes<31>.
* Construção: Construção<34>.
* Windows: Windows<29>.
* IDLE: IDLE<20>.
* API C: API C<31>.

Python 3.11.0 alpha 5

* Núcleo e embutidos: Núcleo e embutidos<70>.
* Biblioteca: Biblioteca<72>.
* Núcleo e embutidos: Núcleo e embutidos<71>.
* Biblioteca: Biblioteca<73>.
* Construção: Construção<35>.
* Núcleo e embutidos: Núcleo e embutidos<72>.
* Biblioteca: Biblioteca<74>.
* Documentação: Documentação<28>.
* Testes: Testes<32>.
* Construção: Construção<36>.
* Windows: Windows<30>.
* macOS: macOS<22>.
* IDLE: IDLE<21>.
* API C: API C<32>.

Python 3.11.0 alpha 4

* Núcleo e embutidos: Núcleo e embutidos<73>.
* Biblioteca: Biblioteca<75>.
* Núcleo e embutidos: Núcleo e embutidos<74>.
* Biblioteca: Biblioteca<76>.
* Núcleo e embutidos: Núcleo e embutidos<75>.
* Biblioteca: Biblioteca<77>.
* Núcleo e embutidos: Núcleo e embutidos<76>.
* Biblioteca: Biblioteca<78>.
* Documentação: Documentação<29>.
* Testes: Testes<33>.
* Construção: Construção<37>.
* Windows: Windows<31>.
* macOS: macOS<23>.
* API C: API C<33>.

Python 3.11.0 alpha 3

* Núcleo e embutidos: Núcleo e embutidos<77>.
* Biblioteca: Biblioteca<79>.
* Núcleo e embutidos: Núcleo e embutidos<78>.
* Biblioteca: Biblioteca<80>.
* Documentação: Documentação<30>.
* Testes: Testes<34>.
* Construção: Construção<38>.
* Windows: Windows<32>.
* macOS: macOS<24>.
* API C: API C<34>.

Python 3.11.0 alpha 2

* Núcleo e embutidos: Núcleo e embutidos<79>.
* Biblioteca: Biblioteca<81>.
* Documentação: Documentação<31>.
* Testes: Testes<35>.
* Construção: Construção<39>.
* Windows: Windows<33>.
* macOS: macOS<25>.
* IDLE: IDLE<22>.
* API C: API C<35>.

Python 3.11.0 alpha 1

* Segurança: Segurança<25>.
* Núcleo e embutidos: Núcleo e embutidos<80>.
* Biblioteca: Biblioteca<82>.
* Núcleo e embutidos: Núcleo e embutidos<81>.
* Biblioteca: Biblioteca<83>.
* Núcleo e embutidos: Núcleo e embutidos<82>.
* Biblioteca: Biblioteca<84>.
* Núcleo e embutidos: Núcleo e embutidos<83>.
* Biblioteca: Biblioteca<85>.
* Núcleo e embutidos: Núcleo e embutidos<84>.
* Biblioteca: Biblioteca<86>.
* Núcleo e embutidos: Núcleo e embutidos<85>.
* Biblioteca: Biblioteca<87>.
* Núcleo e embutidos: Núcleo e embutidos<86>.
* Biblioteca: Biblioteca<88>.
* Núcleo e embutidos: Núcleo e embutidos<87>.
* Biblioteca: Biblioteca<89>.
* Núcleo e embutidos: Núcleo e embutidos<88>.
* Biblioteca: Biblioteca<90>.
* Núcleo e embutidos: Núcleo e embutidos<89>.
* Biblioteca: Biblioteca<91>.
* Documentação: Documentação<32>.
* Testes: Testes<36>.
* Construção: Construção<40>.
* Windows: Windows<34>.
* macOS: macOS<26>.
* IDLE: IDLE<23>.
* Ferramentas/Demos: Ferramentas/Demos<20>.
* API C: API C<36>.

Python 3.10.0 beta 1

* Segurança: Segurança<26>.
* Núcleo e embutidos: Núcleo e embutidos<90>.
* Biblioteca: Biblioteca<92>.
* Núcleo e embutidos: Núcleo e embutidos<91>.
* Biblioteca: Biblioteca<93>.
* Núcleo e embutidos: Núcleo e embutidos<92>.
* Biblioteca: Biblioteca<94>.
* Documentação: Documentação<33>.
* Testes: Testes<37>.
* Construção: Construção<41>.
* Windows: Windows<35>.
* macOS: macOS<27>.
* IDLE: IDLE<24>.
* API C: API C<37>.

Python 3.10.0 alpha 7

* Segurança: Segurança<27>.
* Núcleo e embutidos: Núcleo e embutidos<93>.
* Biblioteca: Biblioteca<95>.
* Núcleo e embutidos: Núcleo e embutidos<94>.
* Biblioteca: Biblioteca<96>.
* Documentação: Documentação<34>.
* Testes: Testes<38>.
* Construção: Construção<42>.
* Windows: Windows<36>.
* IDLE: IDLE<25>.
* API C: API C<38>.

Python 3.10.0 alpha 6

* Segurança: Segurança<28>.
* Núcleo e embutidos: Núcleo e embutidos<95>.
* Biblioteca: Biblioteca<97>.
* Núcleo e embutidos: Núcleo e embutidos<96>.
* Biblioteca: Biblioteca<98>.
* Núcleo e embutidos: Núcleo e embutidos<97>.
* Biblioteca: Biblioteca<99>.
* Documentação: Documentação<35>.
* Testes: Testes<39>.
* Construção: Construção<43>.
* Windows: Windows<37>.
* macOS: macOS<28>.
* IDLE: IDLE<26>.
* API C: API C<39>.

Python 3.10.0 alpha 5

* Segurança: Segurança<29>.
* Núcleo e embutidos: Núcleo e embutidos<98>.
* Biblioteca: Biblioteca<100>.
* Núcleo e embutidos: Núcleo e embutidos<99>.
* Biblioteca: Biblioteca<101>.
* Documentação: Documentação<36>.
* Testes: Testes<40>.
* Construção: Construção<44>.
* Windows: Windows<38>.
* macOS: macOS<29>.
* IDLE: IDLE<27>.
* API C: API C<40>.

Python 3.10.0 alpha 4

* Núcleo e embutidos: Núcleo e embutidos<100>.
* Biblioteca: Biblioteca<102>.
* Núcleo e embutidos: Núcleo e embutidos<101>.
* Biblioteca: Biblioteca<103>.
* Núcleo e embutidos: Núcleo e embutidos<102>.
* Biblioteca: Biblioteca<104>.
* Documentação: Documentação<37>.
* Testes: Testes<41>.
* Construção: Construção<45>.
* macOS: macOS<30>.
* Ferramentas/Demos: Ferramentas/Demos<21>.
* API C: API C<41>.

Python 3.10.0 alpha 3

* Segurança: Segurança<30>.
* Núcleo e embutidos: Núcleo e embutidos<103>.
* Biblioteca: Biblioteca<105>.
* Núcleo e embutidos: Núcleo e embutidos<104>.
* Biblioteca: Biblioteca<106>.
* Núcleo e embutidos: Núcleo e embutidos<105>.
* Biblioteca: Biblioteca<107>.
* Núcleo e embutidos: Núcleo e embutidos<106>.
* Biblioteca: Biblioteca<108>.
* Documentação: Documentação<38>.
* Testes: Testes<42>.
* Construção: Construção<46>.
* Windows: Windows<39>.
* macOS: macOS<31>.
* IDLE: IDLE<28>.
* Ferramentas/Demos: Ferramentas/Demos<22>.
* API C: API C<42>.

Python 3.10.0 alpha 2

* Segurança: Segurança<31>.
* Núcleo e embutidos: Núcleo e embutidos<107>.
* Biblioteca: Biblioteca<109>.
* Núcleo e embutidos: Núcleo e embutidos<108>.
* Biblioteca: Biblioteca<110>.
* Documentação: Documentação<39>.
* Testes: Testes<43>.
* Construção: Construção<47>.
* Windows: Windows<40>.
* macOS: macOS<32>.
* IDLE: IDLE<29>.
* API C: API C<43>.

Python 3.10.0 alpha 1

* Segurança: Segurança<32>.
* Núcleo e embutidos: Núcleo e embutidos<109>.
* Biblioteca: Biblioteca<111>.
* Núcleo e embutidos: Núcleo e embutidos<110>.
* Biblioteca: Biblioteca<112>.
* Núcleo e embutidos: Núcleo e embutidos<111>.
* Biblioteca: Biblioteca<113>.
* Núcleo e embutidos: Núcleo e embutidos<112>.
* Biblioteca: Biblioteca<114>.
* Núcleo e embutidos: Núcleo e embutidos<113>.
* Biblioteca: Biblioteca<115>.
* Núcleo e embutidos: Núcleo e embutidos<114>.
* Biblioteca: Biblioteca<116>.
* Núcleo e embutidos: Núcleo e embutidos<115>.
* Biblioteca: Biblioteca<117>.
* Núcleo e embutidos: Núcleo e embutidos<116>.
* Biblioteca: Biblioteca<118>.
* Núcleo e embutidos: Núcleo e embutidos<117>.
* Biblioteca: Biblioteca<119>.
* Núcleo e embutidos: Núcleo e embutidos<118>.
* Biblioteca: Biblioteca<120>.
* Núcleo e embutidos: Núcleo e embutidos<119>.
* Biblioteca: Biblioteca<121>.
* Núcleo e embutidos: Núcleo e embutidos<120>.
* Biblioteca: Biblioteca<122>.
* Núcleo e embutidos: Núcleo e embutidos<121>.
* Biblioteca: Biblioteca<123>.
* Núcleo e embutidos: Núcleo e embutidos<122>.
* Biblioteca: Biblioteca<124>.
* Núcleo e embutidos: Núcleo e embutidos<123>.
* Biblioteca: Biblioteca<125>.
* Documentação: Documentação<40>.
* Testes: Testes<44>.
* Construção: Construção<48>.
* Windows: Windows<41>.
* macOS: macOS<33>.
* IDLE: IDLE<30>.
* API C: API C<44>.

Python 3.9.0 beta 1

* Segurança: Segurança<33>.
* Núcleo e embutidos: Núcleo e embutidos<124>.
* Biblioteca: Biblioteca<126>.
* Documentação: Documentação<41>.
* Testes: Testes<45>.
* Construção: Construção<49>.
* Windows: Windows<42>.
* macOS: macOS<34>.
* Ferramentas/Demos: Ferramentas/Demos<23>.
* API C: API C<45>.

Python 3.9.0 alpha 6

* Segurança: Segurança<34>.
* Núcleo e embutidos: Núcleo e embutidos<125>.
* Biblioteca: Biblioteca<127>.
* Documentação: Documentação<42>.
* Testes: Testes<46>.
* Construção: Construção<50>.
* Windows: Windows<43>.
* macOS: macOS<35>.
* IDLE: IDLE<31>.
* Ferramentas/Demos: Ferramentas/Demos<24>.
* API C: API C<46>.

Python 3.9.0 alpha 5

* Segurança: Segurança<35>.
* Núcleo e embutidos: Núcleo e embutidos<126>.
* Biblioteca: Biblioteca<128>.
* Documentação: Documentação<43>.
* Testes: Testes<47>.
* Construção: Construção<51>.
* Windows: Windows<44>.
* macOS: macOS<36>.
* IDLE: IDLE<32>.
* Ferramentas/Demos: Ferramentas/Demos<25>.
* API C: API C<47>.

Python 3.9.0 alpha 4

* Segurança: Segurança<36>.
* Núcleo e embutidos: Núcleo e embutidos<127>.
* Biblioteca: Biblioteca<129>.
* Documentação: Documentação<44>.
* Testes: Testes<48>.
* Construção: Construção<52>.
* Windows: Windows<45>.
* IDLE: IDLE<33>.
* API C: API C<48>.

Python 3.9.0 alpha 3

* Núcleo e embutidos: Núcleo e embutidos<128>.
* Biblioteca: Biblioteca<130>.
* Documentação: Documentação<45>.
* Construção: Construção<53>.
* IDLE: IDLE<34>.
* API C: API C<49>.

Python 3.9.0 alpha 2

* Segurança: Segurança<37>.
* Núcleo e embutidos: Núcleo e embutidos<129>.
* Biblioteca: Biblioteca<131>.
* Documentação: Documentação<46>.
* Testes: Testes<49>.
* Construção: Construção<54>.
* Windows: Windows<46>.
* macOS: macOS<37>.
* IDLE: IDLE<35>.
* API C: API C<50>.

Python 3.9.0 alpha 1

* Segurança: Segurança<38>.
* Núcleo e embutidos: Núcleo e embutidos<130>.
* Biblioteca: Biblioteca<132>.
* Documentação: Documentação<47>.
* Testes: Testes<50>.
* Construção: Construção<55>.
* Windows: Windows<47>.
* macOS: macOS<38>.
* IDLE: IDLE<36>.
* Ferramentas/Demos: Ferramentas/Demos<26>.
* API C: API C<51>.

Python 3.8.0 beta 1

* Segurança: Segurança<39>.
* Núcleo e embutidos: Núcleo e embutidos<131>.
* Biblioteca: Biblioteca<133>.
* Documentação: Documentação<48>.
* Testes: Testes<51>.
* Construção: Construção<56>.
* Windows: Windows<48>.
* macOS: macOS<39>.
* IDLE: IDLE<37>.
* Ferramentas/Demos: Ferramentas/Demos<27>.
* API C: API C<52>.

Python 3.8.0 alpha 4

* Segurança: Segurança<40>.
* Núcleo e embutidos: Núcleo e embutidos<132>.
* Biblioteca: Biblioteca<134>.
* Documentação: Documentação<49>.
* Testes: Testes<52>.
* Construção: Construção<57>.
* Windows: Windows<49>.
* macOS: macOS<40>.
* IDLE: IDLE<38>.
* Ferramentas/Demos: Ferramentas/Demos<28>.
* API C: API C<53>.

Python 3.8.0 alpha 3

* Segurança: Segurança<41>.
* Núcleo e embutidos: Núcleo e embutidos<133>.
* Biblioteca: Biblioteca<135>.
* Documentação: Documentação<50>.
* Testes: Testes<53>.
* Construção: Construção<58>.
* Windows: Windows<50>.
* IDLE: IDLE<39>.
* Ferramentas/Demos: Ferramentas/Demos<29>.
* API C: API C<54>.

Python 3.8.0 alpha 2

* Núcleo e embutidos: Núcleo e embutidos<134>.
* Biblioteca: Biblioteca<136>.
* Documentação: Documentação<51>.
* Testes: Testes<54>.
* Windows: Windows<51>.
* IDLE: IDLE<40>.

Python 3.8.0 alpha 1

* Segurança: Segurança<42>.
* Núcleo e embutidos: Núcleo e embutidos<135>.
* Biblioteca: Biblioteca<137>.
* Documentação: Documentação<52>.
* Testes: Testes<55>.
* Construção: Construção<59>.
* Windows: Windows<52>.
* macOS: macOS<41>.
* IDLE: IDLE<41>.
* Ferramentas/Demos: Ferramentas/Demos<30>.
* API C: API C<55>.

Python 3.7.0 final

* Biblioteca: Biblioteca<138>.
* API C: API C<56>.

Python 3.7.0 release candidate 1

* Núcleo e embutidos: Núcleo e embutidos<136>.
* Biblioteca: Biblioteca<139>.
* Documentação: Documentação<53>.
* Construção: Construção<60>.
* Windows: Windows<53>.
* IDLE: IDLE<42>.

Python 3.7.0 beta 5

* Núcleo e embutidos: Núcleo e embutidos<137>.
* Biblioteca: Biblioteca<140>.
* Documentação: Documentação<54>.
* Testes: Testes<56>.
* Construção: Construção<61>.
* macOS: macOS<42>.
* IDLE: IDLE<43>.

Python 3.7.0 beta 4

* Núcleo e embutidos: Núcleo e embutidos<138>.
* Biblioteca: Biblioteca<141>.
* Documentação: Documentação<55>.
* Testes: Testes<57>.
* Construção: Construção<62>.
* Windows: Windows<54>.
* macOS: macOS<43>.
* IDLE: IDLE<44>.
* Ferramentas/Demos: Ferramentas/Demos<31>.

Python 3.7.0 beta 3

* Segurança: Segurança<43>.
* Núcleo e embutidos: Núcleo e embutidos<139>.
* Biblioteca: Biblioteca<142>.
* Documentação: Documentação<56>.
* Testes: Testes<58>.
* Construção: Construção<63>.
* Windows: Windows<55>.
* macOS: macOS<44>.
* IDLE: IDLE<45>.
* Ferramentas/Demos: Ferramentas/Demos<32>.
* API C: API C<57>.

Python 3.7.0 beta 2

* Segurança: Segurança<44>.
* Núcleo e embutidos: Núcleo e embutidos<140>.
* Biblioteca: Biblioteca<143>.
* Documentação: Documentação<57>.
* Testes: Testes<59>.
* Construção: Construção<64>.
* Windows: Windows<56>.
* macOS: macOS<45>.
* IDLE: IDLE<46>.
* Ferramentas/Demos: Ferramentas/Demos<33>.

Python 3.7.0 beta 1

* Núcleo e embutidos: Núcleo e embutidos<141>.
* Biblioteca: Biblioteca<144>.
* Documentação: Documentação<58>.
* Testes: Testes<60>.
* Construção: Construção<65>.
* Windows: Windows<57>.
* macOS: macOS<46>.
* API C: API C<58>.

Python 3.7.0 alpha 4

* Núcleo e embutidos: Núcleo e embutidos<142>.
* Biblioteca: Biblioteca<145>.
* Documentação: Documentação<59>.
* Testes: Testes<61>.
* Windows: Windows<58>.
* Ferramentas/Demos: Ferramentas/Demos<34>.
* API C: API C<59>.

Python 3.7.0 alpha 3

* Núcleo e embutidos: Núcleo e embutidos<143>.
* Biblioteca: Biblioteca<146>.
* Documentação: Documentação<60>.
* Testes: Testes<62>.
* Construção: Construção<66>.
* Windows: Windows<59>.
* macOS: macOS<47>.
* IDLE: IDLE<47>.
* Ferramentas/Demos: Ferramentas/Demos<35>.
* API C: API C<60>.

Python 3.7.0 alpha 2

* Núcleo e embutidos: Núcleo e embutidos<144>.
* Biblioteca: Biblioteca<147>.
* Documentação: Documentação<61>.
* Construção: Construção<67>.
* IDLE: IDLE<48>.
* API C: API C<61>.

Python 3.7.0 alpha 1

* Segurança: Segurança<45>.
* Núcleo e embutidos: Núcleo e embutidos<145>.
* Biblioteca: Biblioteca<148>.
* Documentação: Documentação<62>.
* Testes: Testes<63>.
* Construção: Construção<68>.
* Windows: Windows<60>.
* IDLE: IDLE<49>.
* Ferramentas/Demos: Ferramentas/Demos<36>.
* API C: API C<62>.

Python 3.6.6 release candidate 1

* Núcleo e embutidos: Núcleo e embutidos<146>.
* Biblioteca: Biblioteca<149>.
* Documentação: Documentação<63>.
* Testes: Testes<64>.
* Construção: Construção<69>.
* Windows: Windows<61>.
* macOS: macOS<48>.
* IDLE: IDLE<50>.
* Ferramentas/Demos: Ferramentas/Demos<37>.
* API C: API C<63>.

Python 3.6.5 final

* Testes: Testes<65>.
* Construção: Construção<70>.

Python 3.6.5 release candidate 1

* Segurança: Segurança<46>.
* Núcleo e embutidos: Núcleo e embutidos<147>.
* Biblioteca: Biblioteca<150>.
* Documentação: Documentação<64>.
* Testes: Testes<66>.
* Construção: Construção<71>.
* Windows: Windows<62>.
* macOS: macOS<49>.
* IDLE: IDLE<51>.
* Ferramentas/Demos: Ferramentas/Demos<38>.
* API C: API C<64>.

Python 3.6.4 release candidate 1

* Núcleo e embutidos: Núcleo e embutidos<148>.
* Biblioteca: Biblioteca<151>.
* Documentação: Documentação<65>.
* Testes: Testes<67>.
* Construção: Construção<72>.
* Windows: Windows<63>.
* macOS: macOS<50>.
* IDLE: IDLE<52>.
* Ferramentas/Demos: Ferramentas/Demos<39>.
* API C: API C<65>.

Python 3.6.3 final

* Biblioteca: Biblioteca<152>.
* Construção: Construção<73>.

Python 3.6.3 release candidate 1

* Segurança: Segurança<47>.
* Núcleo e embutidos: Núcleo e embutidos<149>.
* Biblioteca: Biblioteca<153>.
* Documentação: Documentação<66>.
* Testes: Testes<68>.
* Construção: Construção<74>.
* Windows: Windows<64>.
* IDLE: IDLE<53>.
* Ferramentas/Demos: Ferramentas/Demos<40>.

Python 3.6.2 release candidate 2

* Segurança: Segurança<48>.

Python 3.6.2 release candidate 1

* Segurança: Segurança<49>.
* Núcleo e embutidos: Núcleo e embutidos<150>.
* Biblioteca: Biblioteca<154>.
* IDLE: IDLE<54>.
* API C: API C<66>.
* Construção: Construção<75>.
* Documentação: Documentação<67>.
* Ferramentas/Demos: Ferramentas/Demos<41>.
* Testes: Testes<69>.
* Windows: Windows<65>.

Python 3.6.1 final

* Núcleo e embutidos: Núcleo e embutidos<151>.
* Construção: Construção<76>.

Python 3.6.1 release candidate 1

* Núcleo e embutidos: Núcleo e embutidos<152>.
* Biblioteca: Biblioteca<155>.
* IDLE: IDLE<55>.
* Windows: Windows<66>.
* API C: API C<67>.
* Documentação: Documentação<68>.
* Testes: Testes<70>.
* Construção: Construção<77>.

Python 3.6.0 release candidate 2

* Núcleo e embutidos: Núcleo e embutidos<153>.
* Ferramentas/Demos: Ferramentas/Demos<42>.
* Windows: Windows<67>.
* Construção: Construção<78>.

Python 3.6.0 release candidate 1

* Núcleo e embutidos: Núcleo e embutidos<154>.
* Biblioteca: Biblioteca<156>.
* API C: API C<68>.
* Documentação: Documentação<69>.
* Ferramentas/Demos: Ferramentas/Demos<43>.

Python 3.6.0 beta 4

* Núcleo e embutidos: Núcleo e embutidos<155>.
* Biblioteca: Biblioteca<157>.
* Documentação: Documentação<70>.
* Testes: Testes<71>.
* Construção: Construção<79>.

Python 3.6.0 beta 3

* Núcleo e embutidos: Núcleo e embutidos<156>.
* Biblioteca: Biblioteca<158>.
* Windows: Windows<68>.
* Construção: Construção<80>.
* Testes: Testes<72>.

Python 3.6.0 beta 2

* Núcleo e embutidos: Núcleo e embutidos<157>.
* Biblioteca: Biblioteca<159>.
* Windows: Windows<69>.
* API C: API C<69>.
* Construção: Construção<81>.
* Testes: Testes<73>.

Python 3.6.0 beta 1

* Núcleo e embutidos: Núcleo e embutidos<158>.
* Biblioteca: Biblioteca<160>.
* IDLE: IDLE<56>.
* API C: API C<70>.
* Testes: Testes<74>.
* Construção: Construção<82>.
* Ferramentas/Demos: Ferramentas/Demos<44>.
* Windows: Windows<70>.

Python 3.6.0 alpha 4

* Núcleo e embutidos: Núcleo e embutidos<159>.
* Biblioteca: Biblioteca<161>.
* IDLE: IDLE<57>.
* Testes: Testes<75>.
* Windows: Windows<71>.
* Construção: Construção<83>.

Python 3.6.0 alpha 3

* Segurança: Segurança<50>.
* Núcleo e embutidos: Núcleo e embutidos<160>.
* Biblioteca: Biblioteca<162>.
* IDLE: IDLE<58>.
* API C: API C<71>.
* Construção: Construção<84>.
* Ferramentas/Demos: Ferramentas/Demos<45>.
* Documentação: Documentação<71>.
* Testes: Testes<76>.

Python 3.6.0 alpha 2

* Segurança: Segurança<51>.
* Núcleo e embutidos: Núcleo e embutidos<161>.
* Biblioteca: Biblioteca<163>.
* IDLE: IDLE<59>.
* Documentação: Documentação<72>.
* Testes: Testes<77>.
* Windows: Windows<72>.
* Construção: Construção<85>.
* API C: API C<72>.
* Ferramentas/Demos: Ferramentas/Demos<46>.

Python 3.6.0 alpha 1

* Segurança: Segurança<52>.
* Núcleo e embutidos: Núcleo e embutidos<162>.
* Biblioteca: Biblioteca<164>.
* IDLE: IDLE<60>.
* Documentação: Documentação<73>.
* Testes: Testes<78>.
* Construção: Construção<86>.
* Windows: Windows<73>.
* Ferramentas/Demos: Ferramentas/Demos<47>.
* API C: API C<73>.

Python 3.5.5 release candidate 1

* Segurança: Segurança<53>.
* Núcleo e embutidos: Núcleo e embutidos<163>.
* Biblioteca: Biblioteca<165>.

Python 3.5.4 final

* Biblioteca: Biblioteca<166>.

Python 3.5.4 release candidate 1

* Segurança: Segurança<54>.
* Núcleo e embutidos: Núcleo e embutidos<164>.
* Biblioteca: Biblioteca<167>.
* Documentação: Documentação<74>.
* Testes: Testes<79>.
* Construção: Construção<87>.
* Windows: Windows<74>.
* API C: API C<74>.

Python 3.5.3 release candidate 1

* Segurança: Segurança<55>.
* Núcleo e embutidos: Núcleo e embutidos<165>.
* Biblioteca: Biblioteca<168>.
* IDLE: IDLE<61>.
* API C: API C<75>.
* Documentação: Documentação<75>.
* Testes: Testes<80>.
* Ferramentas/Demos: Ferramentas/Demos<48>.
* Windows: Windows<75>.
* Construção: Construção<88>.

Python 3.5.2 final

* Núcleo e embutidos: Núcleo e embutidos<166>.
* Testes: Testes<81>.
* IDLE: IDLE<62>.

Python 3.5.2 release candidate 1

* Segurança: Segurança<56>.
* Núcleo e embutidos: Núcleo e embutidos<167>.
* Biblioteca: Biblioteca<169>.
* IDLE: IDLE<63>.
* Documentação: Documentação<76>.
* Testes: Testes<82>.
* Construção: Construção<89>.
* Windows: Windows<76>.
* Ferramentas/Demos: Ferramentas/Demos<49>.

Python 3.5.1 final

* Núcleo e embutidos: Núcleo e embutidos<168>.
* Windows: Windows<77>.

Python 3.5.1 release candidate 1

* Núcleo e embutidos: Núcleo e embutidos<169>.
* Biblioteca: Biblioteca<170>.
* IDLE: IDLE<64>.
* Documentação: Documentação<77>.
* Testes: Testes<83>.
* Construção: Construção<90>.
* Windows: Windows<78>.
* Ferramentas/Demos: Ferramentas/Demos<50>.

Python 3.5.0 final

* Construção: Construção<91>.

Python 3.5.0 release candidate 4

* Biblioteca: Biblioteca<171>.
* Construção: Construção<92>.

Python 3.5.0 release candidate 3

* Núcleo e embutidos: Núcleo e embutidos<170>.
* Biblioteca: Biblioteca<172>.

Python 3.5.0 release candidate 2

* Núcleo e embutidos: Núcleo e embutidos<171>.
* Biblioteca: Biblioteca<173>.

Python 3.5.0 release candidate 1

* Núcleo e embutidos: Núcleo e embutidos<172>.
* Biblioteca: Biblioteca<174>.
* IDLE: IDLE<65>.
* Documentação: Documentação<78>.
* Testes: Testes<84>.

Python 3.5.0 beta 4

* Núcleo e embutidos: Núcleo e embutidos<173>.
* Biblioteca: Biblioteca<175>.
* Construção: Construção<93>.

Python 3.5.0 beta 3

* Núcleo e embutidos: Núcleo e embutidos<174>.
* Biblioteca: Biblioteca<176>.
* Testes: Testes<85>.
* Documentação: Documentação<79>.
* Construção: Construção<94>.

Python 3.5.0 beta 2

* Núcleo e embutidos: Núcleo e embutidos<175>.
* Biblioteca: Biblioteca<177>.

Python 3.5.0 beta 1

* Núcleo e embutidos: Núcleo e embutidos<176>.
* Biblioteca: Biblioteca<178>.
* IDLE: IDLE<66>.
* Testes: Testes<86>.
* Documentação: Documentação<80>.
* Ferramentas/Demos: Ferramentas/Demos<51>.

Python 3.5.0 alpha 4

* Núcleo e embutidos: Núcleo e embutidos<177>.
* Biblioteca: Biblioteca<179>.
* Construção: Construção<95>.
* Testes: Testes<87>.
* Ferramentas/Demos: Ferramentas/Demos<52>.
* API C: API C<76>.

Python 3.5.0 alpha 3

* Núcleo e embutidos: Núcleo e embutidos<178>.
* Biblioteca: Biblioteca<180>.
* Construção: Construção<96>.
* Testes: Testes<88>.
* Ferramentas/Demos: Ferramentas/Demos<53>.

Python 3.5.0 alpha 2

* Núcleo e embutidos: Núcleo e embutidos<179>.
* Biblioteca: Biblioteca<181>.
* Construção: Construção<97>.
* API C: API C<77>.
* Windows: Windows<79>.

Python 3.5.0 alpha 1

* Núcleo e embutidos: Núcleo e embutidos<180>.
* Biblioteca: Biblioteca<182>.
* IDLE: IDLE<67>.
* Construção: Construção<98>.
* API C: API C<78>.
* Documentação: Documentação<81>.
* Testes: Testes<89>.
* Ferramentas/Demos: Ferramentas/Demos<54>.
* Windows: Windows<80>.

O tutorial do Python

* Abrindo seu apetite::
* Utilizando o interpretador Python::
* Uma introdução informal ao Python::
* Mais ferramentas de controle de fluxo::
* Estruturas de dados::
* Módulos: Módulos<2>.
* Entrada e Saída::
* Erros e exceções::
* Classes::
* Um breve passeio pela biblioteca padrão::
* Um breve passeio pela biblioteca padrão — parte II::
* Ambientes virtuais e pacotes::
* E agora?::
* Edição de entrada interativa e substituição de histórico::
* Aritmética de ponto flutuante; problemas e limitações: Aritmética de ponto flutuante problemas e limitações.
* Anexo::

Utilizando o interpretador Python

* Chamando o interpretador::
* O interpretador e seu ambiente::

Chamando o interpretador

* Passagem de argumentos::
* Modo interativo::

O interpretador e seu ambiente

* Edição de código-fonte::

Uma introdução informal ao Python

* Usando Python como uma calculadora::
* Primeiros passos para a programação::

Usando Python como uma calculadora

* Números::
* Texto::
* Listas::

Mais ferramentas de controle de fluxo

* Instruções if::
* Instruções for::
* A função range(): A função range.
* Instruções break e continue::
* Cláusulas else em laços::
* Instruções pass::
* Instruções match::
* Definindo funções::
* Mais sobre definição de funções::
* Intermezzo; estilo de codificação: Intermezzo estilo de codificação.

Mais sobre definição de funções

* Argumentos com valor padrão::
* Argumentos nomeados::
* Parâmetros especiais::
* Listas de argumentos arbitrárias::
* Desempacotando listas de argumentos::
* Expressões lambda::
* Strings de documentação::
* Anotações de função::

Parâmetros especiais

* Argumentos posicional-ou-nomeados::
* Parâmetros somente-posicionais: Parâmetros somente-posicionais<2>.
* Argumentos somente-nomeados::
* Exemplos de funções::
* Recapitulando::

Estruturas de dados

* Mais sobre listas::
* A instrução del::
* Tuplas e Sequências::
* Conjuntos::
* Dicionários::
* Técnicas de iteração::
* Mais sobre condições::
* Comparando sequências e outros tipos::

Mais sobre listas

* Usando listas como pilhas::
* Usando listas como filas::
* Compreensões de lista: Compreensões de lista<2>.
* Compreensões de lista aninhadas::

Módulos

* Mais sobre módulos::
* Módulos padrões::
* A função dir(): A função dir.
* Pacotes::

Mais sobre módulos

* Executando módulos como scripts::
* O caminho de busca dos módulos::
* Arquivos Python “compilados”::

Pacotes

* Importando * de um pacote::
* Referências em um mesmo pacote::
* Pacotes em múltiplos diretórios::

Entrada e Saída

* Refinando a formatação de saída::
* Leitura e escrita de arquivos::

Refinando a formatação de saída

* Strings literais formatadas::
* O método format(): O método format.
* Formatação manual de string::
* Formatação de strings à moda antiga::

Leitura e escrita de arquivos

* Métodos de objetos arquivo::
* Gravando dados estruturados com json::

Erros e exceções

* Erros de sintaxe::
* Exceções::
* Tratamento de exceções::
* Levantando exceções::
* Encadeamento de exceções::
* Exceções definidas pelo usuário::
* Definindo ações de limpeza::
* Ações de limpeza predefinidas::
* Criando e tratando várias exceções não relacionadas::
* Enriquecendo exceções com notas::

Classes

* Uma palavra sobre nomes e objetos::
* Escopos e espaços de nomes do Python::
* Uma primeira olhada nas classes::
* Observações aleatórias::
* Herança::
* Variáveis privadas::
* Curiosidades e conclusões::
* Iteradores::
* Geradores::
* Expressões geradoras::

Escopos e espaços de nomes do Python

* Exemplo de escopos e espaço de nomes::

Uma primeira olhada nas classes

* Sintaxe da definição de classe::
* Objetos classe::
* Objetos instância::
* Objetos método::
* Variáveis de classe e instância::

Herança

* Herança múltipla::

Um breve passeio pela biblioteca padrão

* Interface com o sistema operacional::
* Caracteres curinga::
* Argumentos de linha de comando::
* Redirecionamento de erros e encerramento do programa::
* Reconhecimento de padrões em strings::
* Matemática::
* Acesso à internet::
* Data e hora::
* Compressão de dados::
* Medição de desempenho::
* Controle de qualidade::
* Baterias incluídas::

Um breve passeio pela biblioteca padrão — parte II

* Formatando a saída::
* Usando templates::
* Trabalhando com formatos binários de dados::
* Multi-threading: Multi-threading<2>.
* Gerando logs::
* Referências fracas::
* Ferramentas para trabalhar com listas::
* Aritmética decimal com ponto flutuante::

Ambientes virtuais e pacotes

* Introdução: Introdução<4>.
* Criando ambientes virtuais::
* Gerenciando pacotes com o pip::

Edição de entrada interativa e substituição de histórico

* Tab completion e histórico de edição::
* Alternativas ao interpretador interativo::

Aritmética de ponto flutuante: problemas e limitações

* Erro de representação::

Anexo

* Modo interativo: Modo interativo<2>.

Modo interativo

* Tratamento de erros::
* Scripts Python executáveis::
* Arquivo de inicialização do modo interativo::
* Módulos de customização::

Configurações e Uso do Python

* Linha de comando e ambiente::
* Utilizando Python em plataformas Unix::
* Configurando o Python::
* Utilizando Python no Windows::
* Usando Python em macOS::
* Utilizando Python no Android::
* Usando Python no iOS::
* Editores e IDEs::

Linha de comando e ambiente

* Linha de comando::
* Variáveis de ambiente::

Linha de comando

* Opções de interface::
* Opções genéricas::
* Opções diversas::
* Controlando cores::
* Opções que você não deve usar::

Variáveis de ambiente

* Variáveis de modo de depuração::

Utilizando Python em plataformas Unix

* Obtendo e instalando a versão mais recente do Python::
* Compilando o Python::
* Paths e arquivos relacionados com o Python::
* Diversos: Diversos<2>.
* OpenSSL personalizado::

Obtendo e instalando a versão mais recente do Python

* No Linux::
* No FreeBSD e OpenBSD::

No Linux

* Instalação do IDLE::

Configurando o Python

* Requisitos de construção::
* Arquivos gerados::
* Opções de configuração::
* Sistema de Construção Python::
* Sinalizadores do compilador e do vinculador::

Arquivos gerados

* Script configure::

Opções de configuração

* Opções gerais::
* Opções do compilador C::
* Opções da ligação::
* Opções para dependências de terceiros::
* Opções de WebAssembly::
* Opções de instalação::
* Opções de desempenho::
* Compilação de depuração do Python::
* Opções de depuração::
* Opções da ligação: Opções da ligação<2>.
* Opções da biblioteca::
* Opções de segurança::
* Opções do macOS::
* Opções do iOS::
* Opções de compilação cruzada::

Sistema de Construção Python

* Arquivos principais do sistema de construção::
* Principais etapas de construção::
* Alvos principais do Makefile::
* Extensões C::

Alvos principais do Makefile

* make::
* make platform::
* make profile-opt::
* make clean::
* make distclean::
* make install::
* make test::
* make buildbottest::
* make regen-all::

Sinalizadores do compilador e do vinculador

* Sinalizadores do pré-processador::
* Sinalizadores do compilador::
* Sinalizadores do vinculador::

Utilizando Python no Windows

* O instalador completo::
* O pacote Microsoft Store::
* Os pacotes nuget.org: Os pacotes nuget org.
* O pacote embutível::
* Pacotes Alternativos::
* Configurando o Python: Configurando o Python<2>.
* Modo UTF-8::
* Inicializador Python para Windows::
* Encontrando módulos::
* Módulos adicionais::
* Compilando Python no Windows::
* Outras plataformas::

O instalador completo

* Etapas de instalação::
* Removendo a Limitação do MAX_PATH::
* Instalando sem UI::
* Instalando Sem Download::
* Modificando uma instalação::
* Instalando binários com threads livres::

O pacote Microsoft Store

* Problemas conhecidos::

Problemas conhecidos

* Redirecionamento de dados locais, registro e caminhos temporários: Redirecionamento de dados locais registro e caminhos temporários.

Os pacotes nuget.org

* Pacotes com threads livres::

O pacote embutível

* Aplicação Python::
* Incorporando Python::

Configurando o Python

* Excursus; Configurando variáveis de ambiente: Excursus Configurando variáveis de ambiente.
* Encontrando o executável do Python::

Inicializador Python para Windows

* Começando::
* Linhas Shebang::
* Argumentos em linhas shebang::
* Personalização::
* Diagnósticos::
* Teste de simulação::
* Instalar sob demanda::
* Códigos de retorno::

Começando

* Pela linha de comando::
* Ambientes virtuais::
* Por um script::
* Por associação de arquivos::

Personalização

* Personalização via arquivos INI::
* Personalizando versões padrão do Python::

Módulos adicionais

* PyWin32::
* cx_Freeze::

Usando Python em macOS

* Usando Python para macOS do python.org: Usando Python para macOS do python org.
* Distribuições alternativas::
* Instalando pacotes adicionais ao python::
* Programação de GUI::
* Tópicos Avançados::
* Outros recursos::

Usando Python para macOS do python.org

* Etapas de instalação: Etapas de instalação<2>.
* Como executar um script Python::

Tópicos Avançados

* Instalando binários com threads livres: Instalando binários com threads livres<2>.
* Instalação usando a linha de comando::
* Distribuindo aplicações Python::
* Conformidade com a App Store::

Utilizando Python no Android

* Adicionando Python a uma aplicação Android::
* Construindo um pacote Python para Android::

Usando Python no iOS

* Python em tempo de execução no iOS::
* Instalando Python no iOS::
* Conformidade com a App Store: Conformidade com a App Store<2>.

Python em tempo de execução no iOS

* Compatibilidade com a versão do iOS::
* Identificação da plataforma::
* Disponibilidade da biblioteca padrão::
* Módulos de extensão binária::
* Binários stub do compilador::

Instalando Python no iOS

* Ferramentas para construir aplicações de iOS::
* Adicionando Python a um projeto iOS::
* Testando um pacote Python::

Editores e IDEs

* IDLE — editor e console Python::
* Outros editores e IDEs::

A Referência da Linguagem Python

* Introdução: Introdução<5>.
* Análise léxica::
* Modelo de dados::
* Modelo de execução::
* O sistema de importação::
* Expressões::
* Instruções simples::
* Instruções compostas::
* Componentes de Alto Nível::
* Especificação completa da gramática::

Introdução

* Implementações Alternativas::
* Notação::

Análise léxica

* Estrutura das linhas::
* Outros tokens::
* Identificadores e palavras-chave::
* Literais::
* Operadores::
* Delimitadores::

Estrutura das linhas

* Linhas lógicas::
* Linhas físicas::
* Comentários::
* Declarações de codificação::
* Junção de linha explícita::
* Junção de linha implícita::
* Linhas em branco::
* Indentação::
* Espaços em branco entre tokens::

Identificadores e palavras-chave

* Palavras reservadas::
* Palavras reservadas contextuais::
* Classes reservadas de identificadores::

Literais

* Literais de string e bytes::
* Concatenação de literal de string::
* f-strings::
* Literais numéricos::
* Inteiros literais::
* Literais de ponto flutuante::
* Literais imaginários::

Literais de string e bytes

* Sequências de escape::

Modelo de dados

* Objetos, valores e tipos: Objetos valores e tipos.
* A hierarquia de tipos padrão::
* Nomes de métodos especiais::
* Corrotinas::

A hierarquia de tipos padrão

* None::
* NotImplemented::
* Ellipsis::
* numbers.Number: numbers Number.
* Sequências::
* Tipos de conjuntos::
* Mapeamentos::
* Tipos chamáveis::
* Módulos: Módulos<3>.
* Classes personalizadas::
* Instâncias de classe: Instâncias de classe<2>.
* Objetos de E/S (também conhecidos como objetos arquivo): Objetos de E/S também conhecidos como objetos arquivo.
* Tipos internos::

numbers.Number

* numbers.Integral: numbers Integral.
* numbers.Real (float): numbers Real float.
* numbers.Complex (complex): numbers Complex complex.

Sequências

* Sequências imutáveis::
* Sequências mutáveis::

Mapeamentos

* Dicionários: Dicionários<2>.

Tipos chamáveis

* Funções definidas pelo usuário::
* Métodos de instância::
* Funções geradoras::
* Funções de corrotina::
* Funções geradoras assíncronas::
* Funções embutidas: Funções embutidas<2>.
* Métodos embutidos::
* Classes: Classes<2>.
* Instâncias de classe::

Funções definidas pelo usuário

* Atributos especiais de somente leitura::
* Atributos especiais graváveis::

Módulos

* Atributos relacionados à importação em objetos de módulo::
* Outros atributos graváveis em objetos de módulo::
* Dicionários do módulo::

Classes personalizadas

* Atributos especiais::
* Métodos especiais::

Instâncias de classe

* Atributos especiais: Atributos especiais<2>.

Tipos internos

* Objetos código::
* Objetos quadro::
* Objetos traceback::
* Objetos slice::
* Objetos método estático::
* Objetos método de classe::

Objetos código

* Atributos especiais de somente leitura: Atributos especiais de somente leitura<2>.
* Métodos de objetos código::

Objetos quadro

* Atributos especiais de somente leitura: Atributos especiais de somente leitura<3>.
* Atributos especiais graváveis: Atributos especiais graváveis<2>.
* Métodos de objetos quadro::

Nomes de métodos especiais

* Personalização básica::
* Personalizando o acesso aos atributos::
* Personalizando a criação de classe::
* Personalizando verificações de instância e subclasse::
* Emulando tipos genéricos::
* Emulando objetos chamáveis::
* Emulando tipos contêineres::
* Emulando tipos numéricos::
* Gerenciadores de contexto da instrução with::
* Customizando argumentos posicionais na classe correspondência de padrão::
* Emulando tipos buffer::
* Pesquisa de método especial::

Personalizando o acesso aos atributos

* Personalizando acesso a atributos de módulos::
* Implementando descritores::
* Invocando descritores::
* __slots__: __slots__<2>.

Personalizando a criação de classe

* Metaclasses::
* Resolvendo entradas de MRO::
* Determinando a metaclasse apropriada::
* Preparando o espaço de nomes da classe::
* Executando o corpo da classe::
* Criando o objeto classe::
* Usos para metaclasses::

Emulando tipos genéricos

* O propósito de __class_getitem__::
* __class_getitem__ versus __getitem__::

Corrotinas

* Objetos aguardáveis::
* Objetos corrotina::
* Iteradores assíncronos::
* Gerenciadores de contexto assíncronos::

Modelo de execução

* Estrutura de um programa::
* Nomeação e ligação::
* Exceções: Exceções<2>.

Nomeação e ligação

* Ligação de nomes::
* Resolução de nomes::
* Escopos de anotação::
* Avaliação preguiçosa::
* Builtins e execução restrita::
* Interação com recursos dinâmicos::

O sistema de importação

* importlib: importlib<10>.
* Pacotes: Pacotes<2>.
* Caminho de busca::
* Carregando::
* O localizador baseado no caminho::
* Substituindo o sistema de importação padrão::
* Importações relativas ao pacote::
* Considerações especiais para __main__::
* Referências::

Pacotes

* Pacotes regulares::
* Pacotes de espaço de nomes::

Caminho de busca

* O cache de módulos::
* Localizadores e carregadores::
* Ganchos de importação::
* O metacaminho::

Carregando

* Carregadores::
* Submódulos::
* Especificações de módulo::
* Atributo __path__ dos módulos::
* Representações do módulo::
* Invalidação de bytecode em cache::

O localizador baseado no caminho

* Localizadores de entrada de caminho::
* Protocolo do localizador de entrada de caminho::

Considerações especiais para __main__

* __main__.__spec__: __main__ __spec__.

Expressões

* Conversões aritméticas::
* Átomos::
* Primárias::
* Expressão await::
* O operador de potência::
* Operações aritméticas unárias e bit a bit::
* Operações binárias aritméticas::
* Operações de deslocamento::
* Operações binárias bit a bit::
* Comparações::
* Operações booleanas::
* Expressões de atribuição: Expressões de atribuição<2>.
* Expressões condicionais::
* Lambdas::
* Listas de expressões::
* Ordem de avaliação::
* Precedência de operadores::

Átomos

* Identificadores (Nomes): Identificadores Nomes.
* Literais: Literais<2>.
* Formas de parênteses::
* Sintaxe de criação de listas, conjuntos e dicionários: Sintaxe de criação de listas conjuntos e dicionários.
* Sintaxes de criação de lista::
* Sintaxes de criação de conjunto::
* Sintaxes de criação de dicionário::
* Expressões geradoras: Expressões geradoras<2>.
* Expressões yield::

Identificadores (Nomes)

* Desfiguração de nome privado::

Expressões yield

* Métodos de iterador gerador::
* Exemplos::
* Funções geradoras assíncronas: Funções geradoras assíncronas<2>.
* Métodos geradores-iteradores assíncronos::

Primárias

* Referências de atributo::
* Subscrições::
* Fatiamentos::
* Chamadas::

Comparações

* Comparações de valor::
* Operações de teste de pertinência::
* Comparações de identidade::

Instruções simples

* Instruções de expressão::
* Instruções de atribuição::
* A instrução assert::
* A instrução pass::
* A instrução del: A instrução del<2>.
* A instrução return::
* A instrução yield::
* A instrução raise::
* A instrução break::
* A instrução continue::
* A instrução import::
* A instrução global::
* A instrução nonlocal::
* A instrução type::

Instruções de atribuição

* Instruções de atribuição aumentada::
* instruções de atribuição anotado::

A instrução import

* Instruções future::

Instruções compostas

* A instrução if::
* A instrução while::
* A instrução for::
* A instrução try::
* A instrução with::
* A instrução match::
* Definições de função::
* Definições de classe::
* Corrotinas: Corrotinas<2>.
* Listas de parâmetros de tipo::

A instrução try

* Cláusula except::
* Cláusula except*::
* Cláusula else::
* Cláusula finally::

A instrução match

* Visão Geral::
* Guards::
* Blocos irrefutáveis de case::
* Padrões::

Padrões

* Padrões OR::
* Padrões AS::
* Padrões literais::
* Padrões de captura::
* Padrões curingas::
* Padrões de valor::
* Padrões de grupo::
* Padrões de sequência::
* Padrões de mapeamento::
* Padrões de classe::

Corrotinas

* Definição de função de corrotina::
* A instrução async for::
* A instrução async with::

Listas de parâmetros de tipo

* Funções genéricas::
* Classes genéricas::
* Apelidos de tipo genérico::

Componentes de Alto Nível

* Programas Python completos::
* Entrada de arquivo::
* Entrada interativa::
* Entrada de expressão::

A Biblioteca Padrão do Python

* Introdução: Introdução<6>.
* Funções embutidas: Funções embutidas<3>.
* Constantes embutidas::
* Tipos embutidos::
* Exceções embutidas::
* Serviços de Processamento de Texto::
* Serviços de Dados Binários::
* Tipos de Dados::
* Módulos Matemáticos e Numéricos::
* Módulos de Programação Funcional::
* Acesso a arquivos e diretórios::
* Persistência de Dados::
* Compressão de Dados e Arquivamento::
* Formatos de Arquivo::
* Serviços Criptográficos::
* Serviços Genéricos do Sistema Operacional::
* Bibliotecas de interface de linha de comando::
* Execução Concorrente::
* Comunicação em Rede e Interprocesso::
* Manuseio de Dados na Internet::
* Ferramentas de Processamento de Markup Estruturado::
* Protocolos de Internet e Suporte::
* Serviços Multimídia::
* Internacionalização::
* Interfaces gráficas de usuário com Tk::
* Ferramentas de Desenvolvimento::
* Depuração e perfilamento::
* Empacotamento e Distribuição de Software::
* Serviços de Tempo de Execução Python::
* Interpretadores Python Personalizados::
* Importando módulos::
* Serviços da Linguagem Python::
* Serviços Específicos do MS Windows::
* Serviços específicos do Unix::
* Interface de linha de comando (CLI) de módulos: Interface de linha de comando CLI de módulos.
* Módulos substituídos::
* Módulos removidos::
* Considerações de Segurança: Considerações de Segurança<3>.

Introdução

* Observações sobre disponibilidade::

Observações sobre disponibilidade

* Plataformas WebAssembly::
* Plataformas móveis::

Constantes embutidas

* Constantes adicionadas pelo módulo site::

Tipos embutidos

* Teste do valor verdade::
* Operações booleanas — and, or, not: Operações booleanas — and or not.
* Comparações: Comparações<2>.
* Tipos numéricos — int, float, complex: Tipos numéricos — int float complex.
* Tipo booleano - bool::
* Tipos iteradores::
* Tipos sequências — list, tuple, range: Tipos sequências — list tuple range.
* Tipo sequência de texto — str::
* Tipos de sequência binária — bytes, bytearray, memoryview: Tipos de sequência binária — bytes bytearray memoryview.
* Tipo conjuntos — set, frozenset: Tipo conjuntos — set frozenset.
* Tipo mapeamento — dict::
* Tipos de Gerenciador de Contexto::
* Tipos de anotação de tipo — Apelido genérico, União: Tipos de anotação de tipo — Apelido genérico União.
* Outros tipos embutidos::
* Atributos Especiais::
* Limitação de comprimento de string na conversão para inteiro::

Tipos numéricos — int, float, complex

* Operações de bits em tipos inteiros::
* Métodos adicionais em tipos inteiros::
* Métodos adicionais em ponto flutuante::
* Hashing de tipos numéricos::

Tipos iteradores

* Tipos geradores::

Tipos sequências — list, tuple, range

* Operações comuns de sequências::
* Tipos sequência imutáveis::
* Tipos sequências mutáveis::
* Listas: Listas<2>.
* Tuplas::
* Intervalos::

Tipo sequência de texto — str

* String Methods: String Methods<2>.
* Strings literais formatadas (f-strings): Strings literais formatadas f-strings.
* Formatação de string no estilo printf::

Tipos de sequência binária — bytes, bytearray, memoryview

* Objetos bytes::
* Objetos Bytearray::
* Operações com Bytes e Bytearray::
* Estilo de Formatação de bytes printf-style::
* Memory Views::

Tipo mapeamento — dict

* Objetos de visão de dicionário::

Tipos de anotação de tipo — Apelido genérico, União

* Tipo Generic Alias::
* Tipo União::

Tipo Generic Alias

* Classes genéricas padrão::
* Atributos especiais de objetos GenericAlias::

Outros tipos embutidos

* Módulos: Módulos<4>.
* Classes e Instâncias de Classes::
* Funções::
* Métodos::
* Objetos código: Objetos código<2>.
* Objetos tipo::
* O objeto nulo::
* O Objeto Ellipsis::
* O Objeto NotImplemented::
* Objetos Internos::

Limitação de comprimento de string na conversão para inteiro

* APIs afetadas::
* Configurando o limiter::
* Configuração recomendada::

Exceções embutidas

* Contexto da exceção::
* Herdando de exceções embutidas::
* Classes base::
* Exceções concretas::
* Avisos::
* Grupos de exceções::
* Hierarquia das exceções::

Exceções concretas

* Exceções de sistema operacional::

Serviços de Processamento de Texto

* string — Operações comuns de strings::
* re — Operações com expressões regulares::
* difflib — Helpers for computing deltas::
* textwrap — Quebra automática e preenchimento de texto::
* unicodedata — Banco de dados de Unicode::
* stringprep — Preparação de string para internet::
* readline — Interface para o GNU readline::
* rlcompleter — Função de autocomplemento para GNU readline::

string — Operações comuns de strings

* Constantes de strings::
* Formatação personalizada de strings::
* Sintaxe das strings de formato::
* Strings template::
* Funções auxiliares::

Sintaxe das strings de formato

* Minilinguagem de especificação de formato::
* Exemplos de formato::

re — Operações com expressões regulares

* Sintaxe de expressão regular::
* Conteúdo do módulo::
* Objetos expressão regular::
* Objetos correspondência::
* Exemplos de expressão regular::

Conteúdo do módulo

* Sinalizadores::
* Funções: Funções<2>.
* Exceções: Exceções<3>.

Exemplos de expressão regular

* Verificando por um par::
* Simulando scanf(): Simulando scanf.
* search() vs. match(): search vs match.
* Criando uma lista telefônica::
* Mastigando texto::
* Encontrando todos os advérbios::
* Encontrando todos os advérbios e suas posições::
* Notação de string bruta::
* Escrevendo um tokenizador::

difflib — Helpers for computing deltas

* SequenceMatcher Objects::
* SequenceMatcher Examples::
* Differ Objects::
* Differ Example::
* A command-line interface to difflib::
* ndiff example::

readline — Interface para o GNU readline

* Arquivo init::
* Buffer de linha::
* Arquivo de histórico::
* Lista de histórico::
* Ganchos de inicialização::
* Autocomplemento::
* Exemplo::

Serviços de Dados Binários

* struct — Interpreta bytes como dados binários empacotados::
* codecs — Codec registry and base classes::

struct — Interpreta bytes como dados binários empacotados

* Funções e exceções::
* Format Strings::
* Applications::
* Classes: Classes<3>.

Format Strings

* Byte Order, Size, and Alignment: Byte Order Size and Alignment.
* Caracteres Formatados::
* Exemplos: Exemplos<2>.

Applications

* Native Formats::
* Standard Formats::

codecs — Codec registry and base classes

* Codec Base Classes::
* Encodings and Unicode::
* Standard Encodings::
* Python Specific Encodings::
* encodings — Encodings package::
* encodings.idna — Internationalized Domain Names in Applications: encodings idna — Internationalized Domain Names in Applications.
* encodings.mbcs — Windows ANSI codepage: encodings mbcs — Windows ANSI codepage.
* encodings.utf_8_sig — UTF-8 codec with BOM signature: encodings utf_8_sig — UTF-8 codec with BOM signature.

Codec Base Classes

* Error Handlers::
* Stateless Encoding and Decoding::
* Incremental Encoding and Decoding::
* Stream Encoding and Decoding::

Incremental Encoding and Decoding

* IncrementalEncoder Objects::
* IncrementalDecoder Objects::

Stream Encoding and Decoding

* StreamWriter Objects::
* StreamReader Objects::
* StreamReaderWriter Objects::
* StreamRecoder Objects::

Python Specific Encodings

* Text Encodings::
* Binary Transforms::
* Standalone Codec Functions::
* Text Transforms::

Tipos de Dados

* datetime — Tipos básicos de data e hora::
* zoneinfo — Suporte a fuso horário da IANA::
* calendar — Funções gerais relacionadas ao calendário::
* collections — Tipos de dados de contêineres::
* collections.abc — Classes Base Abstratas para Contêineres: collections abc — Classes Base Abstratas para Contêineres.
* heapq — Algoritmo de fila heap::
* bisect — Algoritmo de bisseção de vetor::
* array— Vetores eficientes de valores numéricos::
* weakref — Referências fracas::
* types — Criação de tipos dinâmicos e nomes para tipos embutidos::
* copy — Operações de cópia profunda e cópia rasa::
* pprint — Impressão bonita de dados::
* reprlib — Implementação alternativa à repr(): reprlib — Implementação alternativa à repr.
* enum — Suporte a enumerações::
* graphlib — Funcionalidade para operar com estruturas do tipo grafo::

datetime — Tipos básicos de data e hora

* Objetos Conscientes e Ingênuos::
* Constantes::
* Tipos disponíveis::
* Objetos timedelta::
* Objetos date::
* Objetos datetime::
* Objetos time::
* Objetos tzinfo::
* Objetos timezone::
* Comportamento de strftime() e strptime(): Comportamento de strftime e strptime.

Tipos disponíveis

* Propriedades Comuns::
* Determinando se um Objeto é Consciente ou Ingênuo::

Objetos timedelta

* Exemplos de uso; timedelta: Exemplos de uso timedelta.

Objetos date

* Exemplos de uso; date: Exemplos de uso date.

Objetos datetime

* Exemplos de uso; datetime: Exemplos de uso datetime.

Objetos time

* Exemplos de uso; time: Exemplos de uso time.

Comportamento de strftime() e strptime()

* Códigos de formato strftime() e strptime(): Códigos de formato strftime e strptime.
* Detalhes técnicos::

zoneinfo — Suporte a fuso horário da IANA

* Usando ZoneInfo::
* Fontes de dados::
* A classe ZoneInfo::
* Funções: Funções<3>.
* Globals::
* Exceptions and warnings::

Fontes de dados

* Configurando as fontes de dados::

Configurando as fontes de dados

* Configuração em tempo de compilação::
* Configuração do ambiente::
* Configuração em tempo de execução::

A classe ZoneInfo

* String representations::
* Pickle serialization::

calendar — Funções gerais relacionadas ao calendário

* Uso na linha de comando::

collections — Tipos de dados de contêineres

* Objetos ChainMap::
* Objetos Counter::
* Objetos deque::
* Objetos defaultdict::
* Função de fábrica para tuplas com campos nomeados namedtuple(): Função de fábrica para tuplas com campos nomeados namedtuple.
* Objetos OrderedDict::
* Objetos UserDict::
* Objetos UserList::
* Objetos UserString::

Objetos ChainMap

* Exemplos e Receitas de ChainMap::

Objetos deque

* Receitas de deque::

Objetos defaultdict

* Exemplos de defaultdict::

Objetos OrderedDict

* Exemplos e receitas de OrderedDict::

collections.abc — Classes Base Abstratas para Contêineres

* Classes Base Abstratas de Coleções::
* Classes Base Abstrata de Coleções – Descrições Detalhadas::
* Exemplos e receitas::

heapq — Algoritmo de fila heap

* Exemplos básicos::
* Notas de implementação da fila de prioridade::
* Teoria::

bisect — Algoritmo de bisseção de vetor

* Observações sobre desempenho::
* Buscando em listas ordenadas::
* Exemplos: Exemplos<3>.

weakref — Referências fracas

* Objetos referência fraca::
* Exemplo: Exemplo<2>.
* Objetos finalizadores::
* Comparando finalizadores com métodos __del__(): Comparando finalizadores com métodos __del__.

types — Criação de tipos dinâmicos e nomes para tipos embutidos

* Criação de tipos dinâmicos::
* Tipos padrão do interpretador::
* Classes e funções de utilidades adicionais::
* Funções de utilidade de corrotina::

pprint — Impressão bonita de dados

* Funções: Funções<4>.
* Objetos PrettyPrinter::
* Exemplo: Exemplo<3>.

reprlib — Implementação alternativa à repr()

* Objetos Repr::
* Estendendo objetos Repr::

enum — Suporte a enumerações

* Conteúdo do módulo: Conteúdo do módulo<2>.
* Tipos de Dados: Tipos de Dados<2>.
* Utilities and Decorators::
* Notas::

Tipos de Dados

* Nomes __dunder__ suportados::
* Nomes _sunder_ suportados::

graphlib — Funcionalidade para operar com estruturas do tipo grafo

* Exceções: Exceções<4>.

Módulos Matemáticos e Numéricos

* numbers — Classes base abstratas numéricas::
* math — Funções matemáticas::
* cmath — Funções matemáticas para números complexos::
* decimal — Aritmética de ponto fixo decimal e ponto flutuante::
* fractions — Números racionais::
* random — Gera números pseudoaleatórios::
* statistics — Funções estatísticas::

numbers — Classes base abstratas numéricas

* A torre numérica::
* Notas para implementadores de tipos::

Notas para implementadores de tipos

* Adicionando mais ABCs numéricas::
* Implementando as operações aritméticas::

math — Funções matemáticas

* Funções de teoria dos números::
* Arimética de ponto flutuante::
* Funções de manipulação de ponto flutuante::
* Funções de potências, exponenciais e logarítmicas: Funções de potências exponenciais e logarítmicas.
* Funções de soma e produto::
* Conversão angular::
* Funções trigonométricas::
* Funções hiperbólicas::
* Funções especiais::
* Constantes: Constantes<2>.

cmath — Funções matemáticas para números complexos

* Conversões de e para coordenadas polares::
* Funções de potência e logarítmicas::
* Funções trigonométricas: Funções trigonométricas<2>.
* Funções hiperbólicas: Funções hiperbólicas<2>.
* Funções de classificação::
* Constantes: Constantes<3>.

decimal — Aritmética de ponto fixo decimal e ponto flutuante

* Tutorial de início rápido::
* Objetos de Decimal::
* Objetos de contexto::
* Constantes: Constantes<4>.
* Modos de arredondamento::
* Sinais::
* Observações sobre ponto flutuante::
* Trabalhando com threads::
* Receitas::
* FAQ sobre Decimal::

Objetos de Decimal

* Operandos lógicos::

Observações sobre ponto flutuante

* Atenuando o erro de arredondamento com maior precisão::
* Valores especiais::

random — Gera números pseudoaleatórios

* Funções de contabilidade::
* Funções para bytes::
* Funções para inteiros::
* Funções para sequências::
* Distribuições discretas::
* Distribuições com valor real::
* Gerador alternativo::
* Notas sobre reprodutibilidade::
* Exemplos: Exemplos<4>.
* Receitas: Receitas<2>.
* Uso na linha de comando: Uso na linha de comando<2>.
* Exemplos na linha de comando::

statistics — Funções estatísticas

* Médias e medidas de valor central::
* Medidas de espalhamento::
* Estatísticas para relações entre duas entradas::
* Detalhes das funções::
* Exceções: Exceções<5>.
* Objetos NormalDist::
* Exemplos e receitas: Exemplos e receitas<2>.

Exemplos e receitas

* Problemas clássicos de probabilidade::
* Entradas de Monte Carlo para simulações::
* Aproximação de distribuições binomiais::
* Classificador bayesiano ingênuo::

Módulos de Programação Funcional

* itertools — Funções que criam iteradores para laços eficientes::
* functools — Funções e operações de ordem superior em objetos chamáveis::
* operator — Operadores padrões como funções::

itertools — Funções que criam iteradores para laços eficientes

* Funções do intertools::
* Receitas com itertools::

functools — Funções e operações de ordem superior em objetos chamáveis

* Objetos partial::

operator — Operadores padrões como funções

* Mapeando os operadores para suas respectivas funções::
* Operadores in-place::

Acesso a arquivos e diretórios

* pathlib — Caminhos do sistema de arquivos orientados a objetos::
* os.path — Manipulações comuns de nomes de caminhos: os path — Manipulações comuns de nomes de caminhos.
* stat — Interpretando resultados de stat(): stat — Interpretando resultados de stat.
* filecmp — Comparações de arquivos e diretórios::
* tempfile — Generate temporary files and directories::
* glob — Expansão de padrão de nome de arquivo no estilo Unix::
* fnmatch — Correspondência de padrões de nome de arquivo Unix::
* linecache — Acesso aleatório a linhas de texto::
* shutil — Operações de arquivo de alto nível::

pathlib — Caminhos do sistema de arquivos orientados a objetos

* Uso básico::
* Exceções: Exceções<6>.
* Caminhos puros::
* Caminhos concretos::
* Linguagem de padrões::
* Comparação com o módulo glob::
* Comparação com os módulos os e os.path: Comparação com os módulos os e os path.

Caminhos puros

* Propriedades gerais::
* Operadores: Operadores<2>.
* Acessando partes individuais::
* Métodos e propriedades::

Caminhos concretos

* Analisando e gerando URIs::
* Expandindo e resolvendo caminhos::
* Consultando tipo de arquivo e status::
* Lendo e escrevendo arquivos::
* Lendo diretórios::
* Criando arquivos e diretórios::
* Renomeando e excluindo::
* Permissões e propriedade::

Comparação com os módulos os e os.path

* Ferramentas correspondentes::

filecmp — Comparações de arquivos e diretórios

* A classe dircmp::

tempfile — Generate temporary files and directories

* Exemplos: Exemplos<5>.
* Deprecated functions and variables::

glob — Expansão de padrão de nome de arquivo no estilo Unix

* Exemplos: Exemplos<6>.

shutil — Operações de arquivo de alto nível

* Operações de diretório e arquivos::
* Operações de arquivamento::
* Consultando o tamanho do terminal de saída::

Operações de diretório e arquivos

* Operações de cópia eficientes dependentes da plataforma::
* Exemplo de copytree::
* exemplo rmtree::

Operações de arquivamento

* Exemplo de arquivo::
* Exemplo de arquivamento com base_dir::

Persistência de Dados

* pickle — Serialização de objetos Python::
* copyreg — Registra funções de suporte pickle::
* shelve — Python object persistence::
* marshal — Serialização interna de objetos Python::
* dbm — Interfaces para “banco de dados” Unix::
* sqlite3 —- interface DB-API 2.0 interface para bancos de dados SQLite: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite.

pickle — Serialização de objetos Python

* Relacionamento com outros módulos Python::
* Formato de fluxo de dados::
* Interface do módulo::
* O que pode ser serializado e desserializado com pickle?::
* Serializando com pickle instâncias de classes::
* Redução personalizada para tipos, funções e outros objetos: Redução personalizada para tipos funções e outros objetos.
* Buffers fora da banda::
* Restringindo globais::
* Desempenho: Desempenho<2>.
* Exemplos: Exemplos<7>.

Relacionamento com outros módulos Python

* Comparação com marshal::
* Comparação com json::

Serializando com pickle instâncias de classes

* Persistência de objetos externos::
* Tabelas de despacho::
* Manipulação de objetos com estado::

Buffers fora da banda

* API de provedor::
* API de consumidor::
* Exemplo: Exemplo<4>.

copyreg — Registra funções de suporte pickle

* Exemplo: Exemplo<5>.

shelve — Python object persistence

* Restrições::
* Exemplo: Exemplo<6>.

dbm — Interfaces para “banco de dados” Unix

* dbm.sqlite3 — Backend de SQLite para dbm: dbm sqlite3 — Backend de SQLite para dbm.
* dbm.gnu — Gerenciador de banco de dados do GNU: dbm gnu — Gerenciador de banco de dados do GNU.
* dbm.ndbm — New Database Manager: dbm ndbm — New Database Manager.
* dbm.dumb — Implementação portátil do DBM: dbm dumb — Implementação portátil do DBM.

sqlite3 —- interface DB-API 2.0 interface para bancos de dados SQLite

* Tutorial::
* Referência::
* Guias de como fazer::
* Explicação::

Referência

* Funções do módulo::
* Constantes do módulo::
* Connection objects::
* Cursor objects::
* Row objects::
* Blob objects::
* PrepareProtocol objects::
* Exceções: Exceções<7>.
* SQLite and Python types::
* Default adapters and converters (deprecated): Default adapters and converters deprecated.
* Interface de linha de comando::

Guias de como fazer

* How to use placeholders to bind values in SQL queries::
* How to adapt custom Python types to SQLite values::
* How to convert SQLite values to custom Python types::
* Adapter and converter recipes::
* How to use connection shortcut methods::
* How to use the connection context manager::
* How to work with SQLite URIs::
* How to create and use row factories::
* How to handle non-UTF-8 text encodings::

How to adapt custom Python types to SQLite values

* How to write adaptable objects::
* How to register adapter callables::

Explicação

* Controle de transações::

Controle de transações

* Controle de transações através do atributo autocommit::
* Controle de transação através do atributo isolation_level::

Compressão de Dados e Arquivamento

* zlib — Compactação compatível com gzip::
* gzip — Suporte para arquivos gzip::
* bz2 — Suporte para compressão bzip2::
* lzma — Compressão usando o algoritmo LZMA::
* zipfile — Trabalha com arquivos ZIP::
* tarfile — Ler e gravar arquivos do tipo tar::

gzip — Suporte para arquivos gzip

* Exemplos de uso::
* Interface de linha de comando: Interface de linha de comando<2>.

Interface de linha de comando

* Opções de linha de comando::

bz2 — Suporte para compressão bzip2

* (Des)compressão de arquivos: Des compressão de arquivos.
* (Des)compressão incremental: Des compressão incremental.
* (De)compressão de uma só vez (one-shot): De compressão de uma só vez one-shot.
* Exemplos de uso: Exemplos de uso<2>.

lzma — Compressão usando o algoritmo LZMA

* Lendo e escrevendo arquivos comprimidos::
* Comprimindo e descomprimindo dados na memória::
* Diversos: Diversos<3>.
* Especificando cadeias de filtros personalizadas::
* Exemplos: Exemplos<8>.

zipfile — Trabalha com arquivos ZIP

* Objetos ZipFile::
* Objetos Path::
* Objetos PyZipFile::
* Objetos ZipInfo::
* Interface de linha de comando: Interface de linha de comando<3>.
* Armadilhas de descompressão::

Interface de linha de comando

* Opções de linha de comando: Opções de linha de comando<2>.

Armadilhas de descompressão

* Do próprio arquivo::
* Limitações do sistema de arquivos::
* Limitações de recursos::
* Interrupção::
* Comportamentos padrão da extração::

tarfile — Ler e gravar arquivos do tipo tar

* Objetos TarFile::
* Objetos TarInfo::
* Filtros de extração::
* Interface de linha de comando: Interface de linha de comando<4>.
* Exemplos: Exemplos<9>.
* Formatos tar suportados::
* Problemas de Unicode::

Filtros de extração

* Default named filters::
* Filter errors::
* Dicas para verificação adicional::
* Suporte a versões mais antigas do Python::
* Stateful extraction filter example::

Interface de linha de comando

* Opções de linha de comando: Opções de linha de comando<3>.

Exemplos

* Reading examples::
* Writing examples::

Formatos de Arquivo

* csv — Leitura e escrita de arquivos CSV::
* configparser — Analisador sintático de arquivo de configuração::
* tomllib — Analisa arquivos TOML::
* netrc — Arquivo de processamento netrc::
* plistlib — Gera e analisa arquivos Apple .plist: plistlib — Gera e analisa arquivos Apple plist.

csv — Leitura e escrita de arquivos CSV

* Conteúdo do módulo: Conteúdo do módulo<3>.
* Dialetos e parâmetros de formatação::
* Objetos Reader::
* Objetos Writer::
* Exemplos: Exemplos<10>.

configparser — Analisador sintático de arquivo de configuração

* Início rápido::
* Tipos de dados suportados::
* Valores reservas::
* Estrutura dos arquivos INI::
* Seções não nomeadas::
* Interpolação de valores::
* Acesso através do protocolo de mapeamento::
* Personalizando o comportamento do analisador sintático::
* Exemplos de APIs legadas::
* Objetos ConfigParser::
* Objetos RawConfigParser::
* Exceções: Exceções<8>.

tomllib — Analisa arquivos TOML

* Exemplos: Exemplos<11>.
* Tabela de conversão::

netrc — Arquivo de processamento netrc

* Objetos netrc::

plistlib — Gera e analisa arquivos Apple .plist

* Exemplos: Exemplos<12>.

Serviços Criptográficos

* hashlib — Resumos de mensagens e hashes seguros::
* hmac — Código de autenticação de mensagem com chave hash::
* secrets — Gera números aleatórios seguros para gerenciar segredos::

hashlib — Resumos de mensagens e hashes seguros

* Algoritmos de hash::
* Uso::
* Construtores::
* Atributos::
* Objetos hash::
* Resumos de comprimento variável de SHAKE::
* Hash de arquivo::
* Derivação de chave::
* BLAKE2::

BLAKE2

* Criando objetos hash::
* Constantes: Constantes<5>.
* Exemplos: Exemplos<13>.
* Credits::

Exemplos

* Simple hashing::
* Using different digest sizes::
* Keyed hashing::
* Randomized hashing::
* Personalization::
* Modo árvore::

secrets — Gera números aleatórios seguros para gerenciar segredos

* Números aleatórios::
* Gerando tokens::
* Outras funções::
* Receitas e melhores práticas::

Gerando tokens

* Quantos bytes os tokens devem usar?::

Serviços Genéricos do Sistema Operacional

* os — Diversas interfaces de sistema operacional::
* io — Ferramentas essenciais para trabalhar com fluxos::
* time — Acesso ao horário e conversões::
* logging — Recursos de registro de eventos para Python::
* logging.config — Configuração do módulo logging: logging config — Configuração do módulo logging.
* logging.handlers — Manipuladores de logging: logging handlers — Manipuladores de logging.
* platform — Acesso aos dados de identificação da plataforma subjacente::
* errno — Símbolos padrão do sistema errno::
* ctypes — Uma biblioteca de funções externas para Python::

os — Diversas interfaces de sistema operacional

* Nomes de arquivos, argumentos de linha de comando e variáveis de ambiente: Nomes de arquivos argumentos de linha de comando e variáveis de ambiente.
* Modo UTF-8 do Python::
* Parâmetros de processo::
* Criação de objetos arquivos::
* Operações dos descritores de arquivos::
* Arquivos e diretórios::
* Gerenciamento de processo::
* Interface do agendador::
* Diversas informações de sistema::
* Números aleatórios: Números aleatórios<2>.

Operações dos descritores de arquivos

* Consultando o tamanho de um terminal::
* Herança de descritores de arquivos::

Arquivos e diretórios

* Descritores de arquivo de temporizador::
* Atributos estendidos do Linux::

io — Ferramentas essenciais para trabalhar com fluxos

* Visão Geral: Visão Geral<2>.
* Codificação do texto::
* Interface de alto nível do módulo::
* hierarquia de classe::
* Desempenho: Desempenho<3>.

Visão Geral

* E/S de texto::
* E/S binária::
* E/S bruta::

Codificação do texto

* Ativar EncodingWarning::

hierarquia de classe

* I/O Base Classes::
* Raw File I/O::
* Buffered Streams::
* E/S de texto: E/S de texto<2>.

Desempenho

* E/S binária: E/S binária<2>.
* E/S de texto: E/S de texto<3>.
* Multi-threading: Multi-threading<3>.
* Reentrancy::

time — Acesso ao horário e conversões

* Funções: Funções<5>.
* Constantes de ID de Relógio::
* Constantes de Fuso Horário::

logging — Recursos de registro de eventos para Python

* Objetos Logger::
* Níveis de Logging::
* Objetos Handler::
* Formatter Objects::
* Filter Objects::
* LogRecord Objects::
* Atributos LogRecord::
* LoggerAdapter Objects::
* Thread Safety::
* Funções de nível de módulo::
* Module-Level Attributes::
* Integration with the warnings module::

logging.config — Configuração do módulo logging

* Funções de configuração::
* Considerações de segurança::
* Esquema do Dicionário de Configuração::
* Formato do arquivo de configuração::

Esquema do Dicionário de Configuração

* Detalhes do Esquema de Dicionário::
* Configuração Incremental::
* Conexões de objeto::
* Objetos definidos pelo usuário::
* Ordem de configuração de manipuladores::
* Acesso a objetos externos::
* Acesso a objetos internos::
* Resolução de importações e importadores personalizados::
* Configurando QueueHandler e QueueListener::

logging.handlers — Manipuladores de logging

* StreamHandler::
* FileHandler::
* NullHandler::
* WatchedFileHandler::
* BaseRotatingHandler::
* RotatingFileHandler::
* TimedRotatingFileHandler::
* SocketHandler::
* DatagramHandler::
* SysLogHandler::
* NTEventLogHandler::
* SMTPHandler::
* MemoryHandler::
* HTTPHandler::
* QueueHandler::
* QueueListener::

platform —  Acesso aos dados de identificação da plataforma subjacente

* Multiplataforma::
* Plataforma Java::
* Plataforma Windows::
* Plataforma macOS::
* Plataforma iOS::
* Plataformas Unix::
* Plataformas Linux::
* Plataforma Android::
* Uso na linha de comando: Uso na linha de comando<3>.

ctypes — Uma biblioteca de funções externas para Python

* Tutorial ctypes::
* Referência ctypes::

Tutorial ctypes

* Carregando bibliotecas de links dinâmicos::
* Acessando funções de dlls carregadas::
* Chamando funções::
* Tipos de dados fundamentais::
* Chamando funções, continuação: Chamando funções continuação.
* Chamando funções variadas::
* Chamando funções com seus próprios tipos de dados personalizados::
* Especificando os tipos de argumentos necessários (protótipos de função): Especificando os tipos de argumentos necessários protótipos de função.
* Tipos de Retorno::
* Passando ponteiros (ou; passando parâmetros por referência): Passando ponteiros ou passando parâmetros por referência.
* Estruturas e uniões::
* Structure/union alignment and byte order::
* Campos de bit em estruturas e uniões::
* Vetores::
* Ponteiros::
* Conversão de Tipos::
* Tipos Incompletos::
* Funções Callbacks::
* Acessando valores exportados de dlls::
* Surpresas::
* Tipos de dados de tamanho variável::

Referência ctypes

* Encontrando bibliotecas compartilhadas::
* Loading shared libraries::
* Foreign functions::
* Function prototypes::
* Funções utilitárias::
* Data types::
* Tipos de dados fundamentais: Tipos de dados fundamentais<2>.
* Tipos de dados estruturados::
* Arrays and pointers::

Bibliotecas de interface de linha de comando

* argparse — Analisador sintático para opções de linha de comando, argumentos e subcomandos: argparse — Analisador sintático para opções de linha de comando argumentos e subcomandos.
* optparse — Analisador sintático para opções de linha de comando::
* getpass — Entrada de senha portátil::
* fileinput — Itera sobre linhas de múltiplos fluxos de entrada::
* curses — Gerenciador de terminal para visualizadores de células de caracteres.: curses — Gerenciador de terminal para visualizadores de células de caracteres.
* curses.textpad — Text input widget for curses programs: curses textpad — Text input widget for curses programs.
* curses.ascii — Utilitários para caracteres ASCII: curses ascii — Utilitários para caracteres ASCII.
* curses.panel — Uma extensão de pilha de painéis para o curses: curses panel — Uma extensão de pilha de painéis para o curses.
* cmd — Suporte para interpretadores de comando orientado a linhas::

argparse — Analisador sintático para opções de linha de comando, argumentos e subcomandos

* Objetos ArgumentParser::
* O método add_argument(): O método add_argument.
* O método parse_args(): O método parse_args.
* Outros utilitários::
* Exceções: Exceções<9>.

Objetos ArgumentParser

* prog::
* usage::
* description::
* epilog::
* parents::
* formatter_class::
* prefix_chars::
* fromfile_prefix_chars::
* argument_default::
* allow_abbrev::
* conflict_handler::
* add_help::
* exit_on_error::

O método add_argument()

* name ou flags::
* ação::
* nargs::
* const::
* default::
* tipo::
* choices::
* required::
* help::
* metavar::
* dest::
* deprecated::
* Classes de ação::

O método parse_args()

* Sintaxe de valores da opção::
* Argumentos inválidos::
* Argumentos contendo -::
* Abreviações de argumento (correspondência de prefixo): Abreviações de argumento correspondência de prefixo.
* Além do sys.argv: Além do sys argv.
* O objeto Namespace::

Outros utilitários

* Subcomandos::
* Objetos FileType::
* Grupos de argumentos::
* Exclusão mútua::
* Padrões do analisador sintático::
* Imprimindo a ajuda::
* Análise parcial::
* Personalizando a análise de arquivos::
* Métodos de saída::
* Análise misturada::
* Registrando ações e tipos personalizados::

Exceções

* Tutorial de Argparse::
* Migrando código optparse para argparse::

Tutorial de Argparse

* Conceitos::
* O básico::
* Apresentando os argumentos posicionais::
* Apresentando os argumentos opcionais::
* Combinando argumentos posicionais e opcionais::
* Avançando um pouco mais::
* Como traduzir a saída do argparse::
* Conversores de tipo personalizados::
* Conclusão::

Apresentando os argumentos opcionais

* Opções curtas::

Avançando um pouco mais

* Especificando argumentos ambíguos::
* Opções conflitantes::

optparse — Analisador sintático para opções de linha de comando

* Escolhendo uma biblioteca de análise de linha de comando::
* Introdução: Introdução<7>.
* Contexto::
* Tutorial: Tutorial<2>.
* Guia de referência::
* Funções de retorno de opção::
* Estendendo optparse::
* Exceções: Exceções<10>.

Contexto

* Terminologia::
* Para que servem as opções?::
* Para que servem os argumentos posicionais?::

Tutorial

* Compreendendo as ações de opções::
* A ação store::
* Manipulando opções (sinalizadores) booleanas: Manipulando opções sinalizadores booleanas.
* Outras ações::
* Valores padrão::
* Gerando texto de ajuda::
* Exibindo uma string de versão::
* Como optparse trata erros::
* Juntando tudo::

Gerando texto de ajuda

* Agrupando opções::

Guia de referência

* Criando o analisador sintático::
* Preenchendo o analisador sintático::
* Definindo as opções::
* Atributos da classe Option::
* Ações de opção padrão::
* Tipos de opção padrão::
* Análise de argumentos::
* Consultando e manipulando seu analisador sintático de opções::
* Conflitos entre opções::
* Limpeza::
* Outros métodos::

Funções de retorno de opção

* Definindo uma opção de retorno de chamada::
* Como os retornos de chamada são chamados::
* Levantando erros em uma função de retorno::
* Exemplo de função de retorno 1; retorno de chamada trivial: Exemplo de função de retorno 1 retorno de chamada trivial.
* Exemplo de função de retorno 2; verificar a ordem das opções: Exemplo de função de retorno 2 verificar a ordem das opções.
* Exemplo 3 de função de retorno; verificar a ordem das opções (generalizada): Exemplo 3 de função de retorno verificar a ordem das opções generalizada.
* Exemplo de função de retorno 4; verificar uma condição arbitrária: Exemplo de função de retorno 4 verificar uma condição arbitrária.
* Exemplo de função de retorno 5; argumentos fixos: Exemplo de função de retorno 5 argumentos fixos.
* Exemplo de função de retorno 6; argumentos variáveis: Exemplo de função de retorno 6 argumentos variáveis.

Estendendo optparse

* Adicionando novos tipos::
* Adicionando novas ações::

curses — Gerenciador de terminal para visualizadores de células de caracteres.

* Funções: Funções<6>.
* Window Objects::
* Constantes: Constantes<6>.

curses.textpad — Text input widget for curses programs

* Textbox objects::

curses.panel — Uma extensão de pilha de painéis para o curses

* Funções: Funções<7>.
* Objetos painel::

cmd — Suporte para interpretadores de comando orientado a linhas

* Objetos Cmd::
* Exemplo do Cmd::

Execução Concorrente

* threading — Paralelismo baseado em threads::
* multiprocessing — Paralelismo baseado em processo::
* multiprocessing.shared_memory — Memória compartilhada para acesso direto entre processos: multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
* O pacote concurrent::
* concurrent.futures — Launching parallel tasks: concurrent futures — Launching parallel tasks.
* subprocess — Gerenciamento de subprocessos::
* sched — Agendador de eventos::
* queue — A synchronized queue class::
* contextvars — Variáveis de contexto::
* _thread— API de segmentação de baixo nível::

threading — Paralelismo baseado em threads

* Introdução: Introdução<8>.
* GIL and performance considerations::
* Referência: Referência<2>.
* Using locks, conditions, and semaphores in the with statement: Using locks conditions and semaphores in the with statement.

Referência

* Thread-local data::
* Thread objects::
* Lock objects::
* RLock objects::
* Condition objects::
* Semaphore objects::
* Semaphore example::
* Event objects::
* Timer objects::
* Barrier objects::

multiprocessing — Paralelismo baseado em processo

* Introdução: Introdução<9>.
* Referência: Referência<3>.
* Programming guidelines::
* Exemplos: Exemplos<14>.

Introdução

* A classe Process::
* Contextos e métodos de inicialização::
* Trocando objetos entre processos::
* Sincronização entre processos::
* Compartilhando estado entre processos::
* Usando um pool de workers::

Referência

* Global start method::
* Process e exceções::
* Encadeamentos e filas::
* Diversos: Diversos<4>.
* Objetos de conexão::
* Primitivas de sincronização::
* Objetos ctypes compartilhados::
* Gerenciadores::
* Objetos proxies::
* Process Pools::
* Listeners and Clients::
* Authentication keys::
* Gerando logs: Gerando logs<2>.
* The multiprocessing.dummy module: The multiprocessing dummy module.

Objetos ctypes compartilhados

* O módulo multiprocessing.sharedctypes: O módulo multiprocessing sharedctypes.

Gerenciadores

* Customized managers::
* Using a remote manager::

Objetos proxies

* Limpeza: Limpeza<2>.

Listeners and Clients

* Formatos de Endereços::

Programming guidelines

* All start methods::
* The spawn and forkserver start methods::

concurrent.futures — Launching parallel tasks

* Executor Objects::
* ThreadPoolExecutor::
* ProcessPoolExecutor::
* Future Objects::
* Module Functions::
* Exception classes::

ThreadPoolExecutor

* Exemplo de ThreadPoolExecutor::

ProcessPoolExecutor

* ProcessPoolExecutor Example::

subprocess — Gerenciamento de subprocessos

* Usando o módulo subprocess::
* Considerações de Segurança::
* Objetos Popen::
* Windows Popen Helpers::
* API de alto nível mais antiga::
* Replacing Older Functions with the subprocess Module::
* Legacy Shell Invocation Functions::
* Notas: Notas<2>.

Usando o módulo subprocess

* Argumentos usados frequentemente::
* Construtor Popen::
* Exceções: Exceções<11>.

Windows Popen Helpers

* Constantes do Windows::

Replacing Older Functions with the subprocess Module

* Replacing /bin/sh shell command substitution::
* Replacing shell pipeline::
* Substituindo os.system(): Substituindo os system.
* Replacing the os.spawn family: Replacing the os spawn family.
* Replacing os.popen(), os.popen2(), os.popen3(): Replacing os popen os popen2 os popen3.
* Replacing functions from the popen2 module::

Notas

* Timeout Behavior::
* Converter uma sequência de argumentos em uma string no Windows::
* Disabling use of vfork() or posix_spawn(): Disabling use of vfork or posix_spawn.

sched — Agendador de eventos

* Objetos Scheduler::

queue — A synchronized queue class

* Objetos Queue::
* Objetos SimpleQueue::

Objetos Queue

* Waiting for task completion::
* Terminating queues::

contextvars — Variáveis de contexto

* Variáveis de contexto::
* Gerenciamento de contexto manual::
* Suporte a asyncio::

Comunicação em Rede e Interprocesso

* asyncio — E/S assíncrona::
* socket — Interface de rede de baixo nível::
* ssl — Invólucro de TLS/SSL para objetos socket::
* select — Waiting for I/O completion::
* selectors — High-level I/O multiplexing::
* signal — Define manipuladores para eventos assíncronos::
* mmap — Suporte a arquivos mapeados na memória::

asyncio — E/S assíncrona

* Runners::
* Corrotinas e tarefas::
* Streams::
* Synchronization Primitives::
* Subprocessos::
* Filas::
* Exceções: Exceções<13>.
* Laço de eventos::
* Futuros::
* Transports e Protocols::
* Políticas::
* Suporte a plataformas::
* Extensão::
* Índice da API de alto nível::
* Índice de APIs de baixo nível::
* Desenvolvendo com asyncio::

Runners

* Executando um programa asyncio::
* Runner context manager::
* Handling Keyboard Interruption::

Corrotinas e tarefas

* Corrotinas: Corrotinas<3>.
* Aguardáveis::
* Criando tarefas::
* Cancelamento de tarefas::
* Grupos de tarefas::
* Dormindo::
* Executando tarefas concorrentemente::
* Fábrica de tarefas ansiosas::
* Protegendo contra cancelamento::
* Tempo limite::
* Primitivas de espera::
* Executando em threads::
* Agendando a partir de outras threads::
* Introspecção::
* Objeto Task::

Grupos de tarefas

* Encerrando um grupo de tarefas::

Streams

* StreamReader::
* StreamWriter::
* Exemplos: Exemplos<15>.

Exemplos

* Cliente para eco TCP usando streams::
* Servidor eco TCP usando streams::
* Obtém headers HTTP::
* Registra um soquete aberto para aguardar por dados usando streams::

Synchronization Primitives

* Lock::
* Evento::
* Condição::
* Semaphore::
* BoundedSemaphore::
* Barrier::

Subprocessos

* Criando subprocessos::
* Constantes: Constantes<7>.
* Interagindo com subprocessos::

Interagindo com subprocessos

* Subprocesso e Threads::
* Exemplos: Exemplos<16>.

Filas

* Queue::
* Fila de prioridade::
* Filas LIFO (último a entrar, primeiro a sair): Filas LIFO último a entrar primeiro a sair.
* Exceções: Exceções<12>.
* Exemplos: Exemplos<17>.

Laço de eventos

* Métodos do laço de eventos::
* Tratadores de função de retorno::
* Objetos Server::
* Implementações do laço de eventos::
* Exemplos: Exemplos<18>.

Métodos do laço de eventos

* Executar e interromper o laço::
* Agendando funções de retorno::
* Agendando funções de retorno atrasadas::
* Criando Futures e Tasks::
* Abrindo conexões de rede::
* Criando servidores de rede::
* Transferindo arquivos::
* Atualizando TLS::
* Observando descritores de arquivo::
* Trabalhando com objetos soquete diretamente::
* DNS::
* Trabalhando com encadeamentos::
* Sinais Unix::
* Executando código em conjuntos de threads ou processos::
* Tratando erros da API::
* Habilitando o modo de debug::
* Executando subprocessos::

Exemplos

* Hello World com call_soon(): Hello World com call_soon.
* Exibe a data atual com call_later(): Exibe a data atual com call_later.
* Observa um descritor de arquivo por eventos de leitura::
* Define tratadores de sinais para SIGINT e SIGTERM::

Futuros

* Funções Future::
* Objeto Future::

Transports e Protocols

* Transportes::
* Protocolos::
* Exemplos: Exemplos<19>.

Transportes

* Transports Hierarchy::
* Base Transport::
* Read-only Transports::
* Write-only Transports::
* Transportes de datagrama::
* Transportes de Subprocesso::

Protocolos

* Protocolos de Base::
* Base Protocol::
* Streaming Protocols::
* Protocolos de Streaming Bufferizados::
* Protocolos de Datagramas::
* Protocolos de Subprocesso::

Exemplos

* TCP Echo Server::
* TCP Echo Client::
* UDP Echo Server::
* UDP Echo Client::
* Connecting Existing Sockets::
* loop.subprocess_exec() and SubprocessProtocol: loop subprocess_exec and SubprocessProtocol.

Políticas

* Getting and Setting the Policy::
* Policy Objects::
* Monitores de processos::
* Custom Policies::

Suporte a plataformas

* Todas as plataformas::
* Windows: Windows<81>.
* macOS: macOS<51>.

Windows

* Suporte para subprocesso no Windows::

Extensão

* Escrevendo um laço de eventos personalizado::
* Construtores privados de Future e Task::
* Suporte ao ciclo de vida de tarefas::

Índice da API de alto nível

* Tarefas::
* Filas: Filas<2>.
* Subprocessos: Subprocessos<2>.
* Streams: Streams<2>.
* Sincronização::
* Exceções: Exceções<14>.

Índice de APIs de baixo nível

* Obtendo o laço de eventos::
* Métodos do laço de eventos: Métodos do laço de eventos<2>.
* Transportes: Transportes<2>.
* Protocolos: Protocolos<2>.
* Políticas de laço de eventos::

Desenvolvendo com asyncio

* Modo de Depuração::
* Concorrência e Múltiplas Threads::
* Executando código bloqueante::
* Gerando logs: Gerando logs<3>.
* Detectar corrotinas nunca aguardadas::
* Detectar exceções nunca recuperadas::

socket — Interface de rede de baixo nível

* Famílias de soquete::
* Conteúdo do módulo: Conteúdo do módulo<4>.
* Socket Objects::
* Notas sobre tempo limite de soquete::
* Exemplo: Exemplo<7>.

Conteúdo do módulo

* Exceções: Exceções<15>.
* Constantes: Constantes<8>.
* Funções: Funções<8>.

Funções

* Criação de sockets::
* Outras funções: Outras funções<2>.

Notas sobre tempo limite de soquete

* Timeouts and the connect method::
* Timeouts and the accept method::

ssl — Invólucro de TLS/SSL para objetos socket

* Funções, constantes e exceções.: Funções constantes e exceções.
* SSL Sockets::
* SSL Contexts::
* Certificados::
* Exemplos: Exemplos<20>.
* Notes on non-blocking sockets::
* Підтримка BIO пам’яті: Підтримка BIO пам’яті<2>.
* SSL session::
* Considerações de segurança: Considerações de segurança<2>.
* TLS 1.3: TLS 1 3.

Funções, constantes e exceções.

* Criação de socket::
* Criação de contexto::
* Exceções: Exceções<16>.
* Random generation::
* Manipulação de certificados::
* Constantes: Constantes<9>.

Certificados

* Certificate chains::
* CA certificates::
* Combined key and certificate::
* Self-signed certificates::

Exemplos

* Testing for SSL support::
* Client-side operation::
* Server-side operation::

Considerações de segurança

* Best defaults::
* Manual settings::
* Multi-processing::

Manual settings

* Verifying certificates::
* Protocol versions::
* Cipher selection::

select — Waiting for I/O completion

* /dev/poll Polling Objects::
* Edge and Level Trigger Polling (epoll) Objects: Edge and Level Trigger Polling epoll Objects.
* Polling Objects::
* Kqueue Objects::
* Kevent Objects::

selectors — High-level I/O multiplexing

* Introdução: Introdução<10>.
* Classes: Classes<4>.
* Exemplos: Exemplos<21>.

signal — Define manipuladores para eventos assíncronos

* Regras gerais::
* Conteúdo do módulo: Conteúdo do módulo<5>.
* Exemplos: Exemplos<22>.
* Nota sobre SIGPIPE::
* Nota sobre manipuladores de sinais e exceções::

Regras gerais

* Execução de manipuladores de sinais Python::
* Sinais e threads::

mmap — Suporte a arquivos mapeados na memória

* Constantes MADV_*::
* Constantes MAP_*::

Manuseio de Dados na Internet

* email — Um e-mail e um pacote MIME manipulável::
* json — Codificador e decodificador JSON::
* mailbox — Manipule caixas de entradas em vários formatos::
* mimetypes — Mapeia nomes de arquivos para tipos MIME::
* base64 — Base16, Base32, Base64, Base85 Data Encodings: base64 — Base16 Base32 Base64 Base85 Data Encodings.
* binascii — Converte entre binário e ASCII::
* quopri — Codifica e decodifica dados MIME imprimidos entre aspas::

email — Um e-mail e um pacote MIME manipulável

* email.message; Representing an email message: email message Representing an email message.
* email.parser; Parsing email messages: email parser Parsing email messages.
* email.generator; Geração de documentos MIME: email generator Geração de documentos MIME.
* email.policy; Policy Objects: email policy Policy Objects.
* email.errors; Classes de Exceção e Defeito.: email errors Classes de Exceção e Defeito.
* email.headerregistry; Custom Header Objects: email headerregistry Custom Header Objects.
* email.contentmanager; Gerenciando conteúdo MIME: email contentmanager Gerenciando conteúdo MIME.
* email; Exemplos: email Exemplos.
* email.message.Message; Representing an email message using the compat32 API: email message Message Representing an email message using the compat32 API.
* email.mimeemail.mime; Criando e-mail e objetos MIME do zero: email mimeemail mime Criando e-mail e objetos MIME do zero.
* email.header; Internationalized headers: email header Internationalized headers.
* email.charset; Representando conjuntos de caracteres: email charset Representando conjuntos de caracteres.
* email.encoders; Codificadores: email encoders Codificadores.
* email.utils; Utilitários diversos: email utils Utilitários diversos.
* email.iterators; Iteradores: email iterators Iteradores.

email.parser: Parsing email messages

* API do FeedParser::
* Parser API::
* Additional notes::

email.contentmanager: Gerenciando conteúdo MIME

* Content Manager Instances::

json — Codificador e decodificador JSON

* Uso básico: Uso básico<2>.
* Codificadores e decodificadores::
* Exceções: Exceções<17>.
* Conformidade e interoperabilidade entre padrões::
* Interface de linha de comando: Interface de linha de comando<5>.

Conformidade e interoperabilidade entre padrões

* Codificações de caracteres::
* Valores numéricos infinitos e NaN::
* Nomes repetidos dentro de um objeto::
* Valores não objeto e não vetor de nível superior::
* Limitações de implementação::

Interface de linha de comando

* Opções da linha de comando::

mailbox — Manipule caixas de entradas em vários formatos

* Objetos Mailbox::
* Message objects::
* Exceções: Exceções<18>.
* Exemplos: Exemplos<23>.

Objetos Mailbox

* Maildir objects::
* mbox objects::
* MH objects::
* Babyl objects::
* MMDF objects::

Message objects

* MaildirMessage objects::
* mboxMessage objects::
* MHMessage objects::
* BabylMessage objects::
* MMDFMessage objects::

mimetypes — Mapeia nomes de arquivos para tipos MIME

* Objetos MimeTypes::

base64 — Base16, Base32, Base64, Base85 Data Encodings

* RFC 4648 Encodings::
* Base85 Encodings::
* Legacy Interface::
* Considerações de Segurança: Considerações de Segurança<2>.

Ferramentas de Processamento de Markup Estruturado

* html — Suporte HTML (HyperText Markup Language): html — Suporte HTML HyperText Markup Language.
* html.parser — Analisador simples de HTML e XHTML: html parser — Analisador simples de HTML e XHTML.
* html.entities — Definições de entidades gerais de HTML: html entities — Definições de entidades gerais de HTML.
* Módulos de Processamento de XML::
* xml.etree.ElementTree — A API XML ElementTree: xml etree ElementTree — A API XML ElementTree.
* xml.dom — The Document Object Model API: xml dom — The Document Object Model API.
* xml.dom.minidom — Minimal DOM implementation: xml dom minidom — Minimal DOM implementation.
* xml.dom.pulldom — Suporte para construir árvores parciais de DOM: xml dom pulldom — Suporte para construir árvores parciais de DOM.
* xml.sax — Support for SAX2 parsers: xml sax — Support for SAX2 parsers.
* xml.sax.handler — Classes base para manipuladores de SAX: xml sax handler — Classes base para manipuladores de SAX.
* xml.sax.saxutils — Utilitários de SAX: xml sax saxutils — Utilitários de SAX.
* xml.sax.xmlreader — Interface for XML parsers: xml sax xmlreader — Interface for XML parsers.
* xml.parsers.expat — Fast XML parsing using Expat: xml parsers expat — Fast XML parsing using Expat.

html.parser — Analisador simples de HTML e XHTML

* Exemplo de aplicação para análise de HTML::
* Métodos HTMLParser::
* Exemplos: Exemplos<24>.

Módulos de Processamento de XML

* Segurança no XML::

xml.etree.ElementTree — A API XML ElementTree

* Tutorial: Tutorial<3>.
* Suporte a XPath::
* Referência: Referência<4>.
* Suporte a XInclude::
* Referência: Referência<5>.

Tutorial

* Árvore e elementos XML::
* Analisando XML::
* A API de pull para análise sem bloqueio::
* Encontrando elementos interessantes::
* Modificando um arquivo XML::
* Construindo documentos XML::
* Analisando XML com espaços de nomes::

Suporte a XPath

* Exemplo: Exemplo<8>.
* Supported XPath syntax::

Referência

* Funções: Funções<9>.

Suporte a XInclude

* Exemplo: Exemplo<9>.

Referência

* Funções: Funções<10>.
* Element Objects::
* ElementTree Objects::
* QName Objects::
* TreeBuilder Objects::
* Objetos XMLParser::
* XMLPullParser Objects::
* Exceções: Exceções<19>.

xml.dom — The Document Object Model API

* Conteúdo do módulo: Conteúdo do módulo<6>.
* Objects in the DOM::
* Conformance::

Objects in the DOM

* DOMImplementation Objects::
* Objetos Node::
* Objetos NodeList::
* DocumentType Objects::
* Document Objects::
* Element Objects: Element Objects<2>.
* Attr Objects::
* NamedNodeMap Objects::
* Comment Objects::
* Text and CDATASection Objects::
* Objetos ProcessingInstruction::
* Exceções: Exceções<20>.

Conformance

* Type Mapping::
* Accessor Methods::

xml.dom.minidom — Minimal DOM implementation

* Objetos DOM::
* DOM Example::
* minidom e o padrão DOM::

xml.dom.pulldom — Suporte para construir árvores parciais de DOM

* Objetos DOMEventStream::

xml.sax — Support for SAX2 parsers

* SAXException Objects::

xml.sax.handler — Classes base para manipuladores de SAX

* ContentHandler Objects::
* DTDHandler Objects::
* EntityResolver Objects::
* ErrorHandler Objects::
* LexicalHandler Objects::

xml.sax.xmlreader — Interface for XML parsers

* XMLReader Objects::
* IncrementalParser Objects::
* Locator Objects::
* InputSource Objects::
* The Attributes Interface::
* The AttributesNS Interface::

xml.parsers.expat — Fast XML parsing using Expat

* Objetos XMLParser: Objetos XMLParser<2>.
* Exceções ExpatError::
* Exemplo: Exemplo<10>.
* Content Model Descriptions::
* Constantes de erro de expatriados::

Protocolos de Internet e Suporte

* webbrowser — Controlador de navegador web conveniente::
* wsgiref — Implementação de referência e utilitários WSGI::
* urllib — Módulos de manipulação de URL::
* urllib.request — Biblioteca extensível para abrir URLs: urllib request — Biblioteca extensível para abrir URLs.
* urllib.response — Response classes used by urllib: urllib response — Response classes used by urllib.
* urllib.parse — Analisa URLs para componentes: urllib parse — Analisa URLs para componentes.
* urllib.error — Classes de exceção levantadas por urllib.request: urllib error — Classes de exceção levantadas por urllib request.
* urllib.robotparser — Analisador sintático de robots.txt: urllib robotparser — Analisador sintático de robots txt.
* http — módulos HTTP::
* http.client — HTTP protocol client: http client — HTTP protocol client.
* ftplib — FTP protocol client::
* poplib — Cliente de protocolo POP3::
* imaplib — IMAP4 protocol client::
* smtplib — Cliente de protocolo SMTP::
* uuid — Objetos UUID conforme RFC 4122::
* socketserver — Um framework para servidores de rede::
* http.server — HTTP servers: http server — HTTP servers.
* http.cookies — HTTP state management: http cookies — HTTP state management.
* http.cookiejar — Cookie handling for HTTP clients: http cookiejar — Cookie handling for HTTP clients.
* xmlrpc — Módulos de servidor e cliente XMLRPC::
* xmlrpc.client — Cliente XML-RPC: xmlrpc client — Cliente XML-RPC.
* xmlrpc.server — Servidores XML-RPC básicos: xmlrpc server — Servidores XML-RPC básicos.
* ipaddress — Biblioteca de manipulação de IPv4/IPv6::

webbrowser — Controlador de navegador web conveniente

* Interface de linha de comando: Interface de linha de comando<6>.
* Objetos controladores de navegador::

wsgiref — Implementação de referência e utilitários WSGI

* wsgiref.util – Utilidades do ambiente WSGI: wsgiref util – Utilidades do ambiente WSGI.
* wsgiref.headers – Ferramentas de cabeçalho de resposta WSGI: wsgiref headers – Ferramentas de cabeçalho de resposta WSGI.
* wsgiref.simple_server – um servidor HTTP WSGI simples: wsgiref simple_server – um servidor HTTP WSGI simples.
* wsgiref.validate — Verificador de conformidade WSGI: wsgiref validate — Verificador de conformidade WSGI.
* wsgiref.handlers – classes base de servidor/gateway: wsgiref handlers – classes base de servidor/gateway.
* wsgiref.types – WSGI types for static type checking: wsgiref types – WSGI types for static type checking.
* Exemplos: Exemplos<25>.

urllib.request — Biblioteca extensível para abrir URLs

* Objeto Request::
* OpenerDirector Objects::
* BaseHandler Objects::
* HTTPRedirectHandler Objects::
* HTTPCookieProcessor Objects::
* ProxyHandler Objects::
* HTTPPasswordMgr Objects::
* HTTPPasswordMgrWithPriorAuth Objects::
* AbstractBasicAuthHandler Objects::
* HTTPBasicAuthHandler Objects::
* ProxyBasicAuthHandler Objects::
* AbstractDigestAuthHandler Objects::
* HTTPDigestAuthHandler Objects::
* ProxyDigestAuthHandler Objects::
* HTTPHandler Objects::
* Objetos HTTPSHandler::
* FileHandler Objects::
* DataHandler Objects::
* FTPHandler Objects::
* CacheFTPHandler Objects::
* Objetos UnknownHandler::
* HTTPErrorProcessor Objects::
* Exemplos: Exemplos<26>.
* Legacy interface::
* urllib.request Restrictions: urllib request Restrictions.

urllib.parse — Analisa URLs para componentes

* Análise de URL::
* Segurança ao analisar URLs::
* Analisando bytes codificados em ASCII::
* Structured Parse Results::
* URL Quoting::

http — módulos HTTP

* códigos de status HTTP::
* Categorias de HTTP status::
* Métodos HTTP::

http.client — HTTP protocol client

* Objetos de HTTPConnection::
* Objetos HTTPResponse::
* Exemplos: Exemplos<27>.
* HTTPMessage Objects::

ftplib — FTP protocol client

* Referência: Referência<6>.

Referência

* FTP objects::
* FTP_TLS objects::
* Module variables::

poplib — Cliente de protocolo POP3

* Objetos POP3::
* Exemplo POP3::

imaplib — IMAP4 protocol client

* Objetos IMAP4::
* Exemplo IMAP4::

smtplib — Cliente de protocolo SMTP

* Objetos SMTP::
* Exemplo SMTP::

uuid — Objetos UUID conforme RFC 4122

* Uso na linha de comando: Uso na linha de comando<4>.
* Exemplo: Exemplo<11>.
* Exemplo de linha de comando::

socketserver — Um framework para servidores de rede

* Notas sobre criação do servidor::
* Objetos Server: Objetos Server<2>.
* Objetos manipulador de requisições::
* Exemplos: Exemplos<28>.

Exemplos

* Exemplo de socketserver.TCPServer: Exemplo de socketserver TCPServer.
* Exemplo socketserver.UDPServer: Exemplo socketserver UDPServer.
* Mixins assíncronos::

http.server — HTTP servers

* Interface de linha de comando: Interface de linha de comando<7>.
* Considerações de segurança: Considerações de segurança<3>.

http.cookies — HTTP state management

* Objetos Cookie::
* Objetos Morsel::
* Exemplo: Exemplo<12>.

http.cookiejar — Cookie handling for HTTP clients

* CookieJar and FileCookieJar Objects::
* FileCookieJar subclasses and co-operation with web browsers::
* Objeto CookiePolicy::
* DefaultCookiePolicy Objects::
* Objetos Cookie: Objetos Cookie<2>.
* Exemplos: Exemplos<29>.

xmlrpc.client — Cliente XML-RPC

* Objetos ServerProxy::
* Objetos DateTime::
* Objetos Binários::
* Objetos Fault::
* Objetos ProtocolError::
* Objetos MultiCall::
* Convenience Functions::
* Exemplo de uso do cliente::
* Example of Client and Server Usage::

xmlrpc.server — Servidores XML-RPC básicos

* Objetos de SimpleXMLRPCServer::
* CGIXMLRPCRequestHandler::
* Documentando servidor XMLRPC::
* Objetos de DocXMLRPCServer::
* DocCGIXMLRPCRequestHandler::

Objetos de SimpleXMLRPCServer

* Exemplo de SimpleXMLRPCServer::

ipaddress — Biblioteca de manipulação de IPv4/IPv6

* Funções de fábrica de conveniência::
* Endereços IP::
* Definições de rede IP::
* Objetos de interface::
* Outras funções de nível de módulo::
* Exceções personalizadas::

Endereços IP

* Objetos de endereço::
* Conversão para strings e inteiros::
* Operadores: Operadores<3>.

Operadores

* Operadores de comparação::
* Operadores aritméticos::

Definições de rede IP

* Prefixo, máscara de rede e máscara de host: Prefixo máscara de rede e máscara de host.
* Objetos de rede::
* Operadores: Operadores<4>.

Operadores

* Operadores lógicos::
* Iteração::
* Redes como contêineres de endereços::

Objetos de interface

* Operadores: Operadores<5>.

Operadores

* Operadores lógicos: Operadores lógicos<2>.

Serviços Multimídia

* wave — Read and write WAV files::
* colorsys — Conversões entre sistemas de cores::

wave — Read and write WAV files

* Objetos Wave_read::
* Objetos Wave_write::

Internacionalização

* gettext — Serviços de internacionalização multilíngues::
* locale — Serviços de internacionalização::

gettext — Serviços de internacionalização multilíngues

* API do GNU gettext::
* API baseada em classe::
* Internacionalizando seus programas e módulos::
* Reconhecimentos: Reconhecimentos<9>.

API baseada em classe

* A classe NullTranslations::
* A classe GNUTranslations::
* Suporte a catálogo de mensagens do Solaris::
* O construtor Catalog::

Internacionalizando seus programas e módulos

* Localizando seu módulo::
* Localizando sua aplicação::
* Alterando os idiomas durante o uso::
* Traduções adiadas::

locale — Serviços de internacionalização

* Histórico, detalhes, dicas, dicas e advertências: Histórico detalhes dicas dicas e advertências.
* Nomes de localidades::
* Para escritores de extensão e programas que incorporam Python::
* Acesso a catálogos de mensagens::

Interfaces gráficas de usuário com Tk

* tkinter — Interface Python para Tcl/Tk::
* tkinter.colorchooser — Diálogo de escolha de cor: tkinter colorchooser — Diálogo de escolha de cor.
* tkinter.font — Invólucro de fontes Tkinter: tkinter font — Invólucro de fontes Tkinter.
* Diálogos Tkinter::
* tkinter.messagebox — Prompts de mensagem do Tkinter: tkinter messagebox — Prompts de mensagem do Tkinter.
* tkinter.scrolledtext — Widget de texto de rolado: tkinter scrolledtext — Widget de texto de rolado.
* tkinter.dnd — Suporte para arrastar e soltar: tkinter dnd — Suporte para arrastar e soltar.
* tkinter.ttk — Widgets temáticos do Tk: tkinter ttk — Widgets temáticos do Tk.
* IDLE — editor e console Python: IDLE — editor e console Python<2>.
* turtle — Gráficos tartaruga::

tkinter — Interface Python para Tcl/Tk

* Arquitetura::
* Módulos Tkinter::
* Preservador de vida Tkinter::
* Modelo de threading::
* Referência Útil::
* Tratadores de arquivos::

Preservador de vida Tkinter

* Um programa Olá Mundo::
* Conceitos importantes do Tk::
* Entendendo como Tkinter envolve Tcl/Tk::
* Como é que eu…? Que opção faz…?::
* Navegando no Manual de Referência Tcl/Tk::

Referência Útil

* Opções de Definição::
* O Empacotador::
* Opções do Empacotador::
* Acoplando Variáveis de Widgets::
* O Gerenciador de Janela::
* Opções de Tipos de Dados do Tk::
* Ligações e Eventos::
* O Parâmetro index::
* Imagens::

Diálogos Tkinter

* tkinter.simpledialog — Diálogos de entrada padrão do Tkinter: tkinter simpledialog — Diálogos de entrada padrão do Tkinter.
* tkinter.filedialog — Caixas de diálogo de seleção de arquivo: tkinter filedialog — Caixas de diálogo de seleção de arquivo.
* tkinter.commondialog — Modelos de janela de diálogo: tkinter commondialog — Modelos de janela de diálogo.

tkinter.filedialog — Caixas de diálogo de seleção de arquivo

* Caixas de diálogo nativos de carregar/salvar::

tkinter.ttk — Widgets temáticos do Tk

* Usando Ttk::
* Widgets Ttk::
* Widget::
* Combobox::
* Spinbox::
* Notebook::
* Progressbar::
* Separator::
* Sizegrip::
* Treeview::
* Ttk Styling::

Widget

* Opções padrão::
* Opções de ferramenta rolável::
* Opções de rótulo::
* Opções de compatibilidade::
* Estados de Widget::
* ttk.Widget: ttk Widget.

Combobox

* Opções::
* Eventos virtuais::
* ttk.Combobox: ttk Combobox.

Spinbox

* Opções: Opções<2>.
* Eventos virtuais: Eventos virtuais<2>.
* ttk.Spinbox: ttk Spinbox.

Notebook

* Opções: Opções<3>.
* Tab Options::
* Tab Identifiers::
* Virtual Events::
* ttk.Notebook: ttk Notebook.

Progressbar

* Opções: Opções<4>.
* ttk.Progressbar: ttk Progressbar.

Separator

* Opções: Opções<5>.

Sizegrip

* Platform-specific notes::
* Bugs::

Treeview

* Opções: Opções<6>.
* Item Options::
* Tag Options::
* Column Identifiers::
* Virtual Events: Virtual Events<2>.
* ttk.Treeview: ttk Treeview.

Ttk Styling

* Layouts::

IDLE — editor e console Python

* Menus::
* Editing and Navigation::
* Startup and Code Execution::
* Help and Preferences::
* idlelib — implementation of IDLE application::

Menus

* Menu File (Console e editor): Menu File Console e editor.
* Menu Edit (Shell e Editor): Menu Edit Shell e Editor.
* Menu Format (Somente na janela do Editor): Menu Format Somente na janela do Editor.
* Run menu (Editor window only): Run menu Editor window only.
* Shell menu (Shell window only): Shell menu Shell window only.
* Debug menu (Shell window only): Debug menu Shell window only.
* Options menu (Shell and Editor): Options menu Shell and Editor.
* Window menu (Shell and Editor): Window menu Shell and Editor.
* Help menu (Shell and Editor): Help menu Shell and Editor.
* Context menus::

Editing and Navigation

* Editor windows::
* Teclas de atalho::
* Indentação automática::
* Busca e Substituição::
* Completions::
* Dicas de chamada::
* Format block::
* Code Context::
* Shell window::
* Text colors::

Startup and Code Execution

* Uso na linha de comando: Uso na linha de comando<5>.
* Startup failure::
* Running user code::
* User output in Shell::
* Developing tkinter applications::
* Running without a subprocess::

Help and Preferences

* Help sources::
* Setting preferences::
* IDLE on macOS::
* Extensions::

turtle — Gráficos tartaruga

* Introdução: Introdução<11>.
* Começando: Começando<2>.
* Tutorial: Tutorial<4>.
* Como fazer…::
* Referência Gráficos de Tartaruga::
* Métodos de RawTurtle/Turtle e funções correspondentes::
* métodos do TurtleScreen/Screen e as funções correspondentes::
* Classes Públicas::
* Explicação: Explicação<2>.
* Ajuda e Configuração::
* turtledemo — Scripts de Demonstração::
* Modificações desde a versão do Python 2.6: Modificações desde a versão do Python 2 6.
* Modificações desde a versão do Python 3.0: Modificações desde a versão do Python 3 0.

Tutorial

* Iniciando um ambiente da tartaruga::
* Desenho básico::
* Criação de padrões algorítmicos::

Desenho básico

* Controle da Caneta::
* A posição da tartaruga::

Como fazer…

* Comece o mais rápido possível::
* Use o espaço de nomes do módulo turtle::
* Use o módulo gráfico de tartaruga dentro de um script com código específico::
* Use o módulo gráficos da tartaruga orientado a objetos::

Referência Gráficos de Tartaruga

* Métodos de Turtle::
* Métodos de TurtleScreen/Screen::

Métodos de RawTurtle/Turtle e funções correspondentes

* Movimentos de Turtle::
* Fala o estado de Turtle::
* Configurações de medida::
* Controle da Caneta: Controle da Caneta<2>.
* Estado da tartaruga::
* Eventos Utilizados::
* Métodos Especiais da Tartaruga::
* Formas compostas::

Controle da Caneta

* Estado do Desenho::
* Controle da Cor::
* Preenchimento::
* Mais sobre o Controle do Desenho::

Estado da tartaruga

* Visibilidade::
* Aparência::

métodos do TurtleScreen/Screen e as funções correspondentes

* Controle da Janela::
* Controle da animação::
* Usando os eventos de tela::
* Métodos de entrada::
* Configurações e métodos especiais::
* Métodos específico do Screen, estes métodos não são herdados do TurtleScreen: Métodos específico do Screen estes métodos não são herdados do TurtleScreen.

Ajuda e Configuração

* Como usar a Ajuda::
* Tradução de docstrings em diferentes idiomas::
* Como configurar Screen and Turtles::

Ferramentas de Desenvolvimento

* typing — Suporte para dicas de tipo::
* pydoc — Gerador de documentação e sistema de ajuda online::
* Modo de Desenvolvimento do Python::
* doctest — Teste exemplos interativos de Python::
* unittest — Framework de testes unitários::
* unittest.mock — mock object library: unittest mock — mock object library.
* unittest.mock — primeiros passos: unittest mock — primeiros passos.
* test — Pacote de Testes de Regressão do Python::
* test.support — Utilitários para o conjunto de teste do Python: test support — Utilitários para o conjunto de teste do Python.
* test.support.socket_helper — Utilities for socket tests: test support socket_helper — Utilities for socket tests.
* test.support.script_helper — Utilities for the Python execution tests: test support script_helper — Utilities for the Python execution tests.
* test.support.bytecode_helper — Ferramentas de suporte para testar a geração correta de bytecode: test support bytecode_helper — Ferramentas de suporte para testar a geração correta de bytecode.
* test.support.threading_helper — Utilities for threading tests: test support threading_helper — Utilities for threading tests.
* test.support.os_helper — Utilities for os tests: test support os_helper — Utilities for os tests.
* test.support.import_helper — Utilities for import tests: test support import_helper — Utilities for import tests.
* test.support.warnings_helper — Utilities for warnings tests: test support warnings_helper — Utilities for warnings tests.

typing — Suporte para dicas de tipo

* Especificação para o sistema de tipos do Python::
* Apelidos de tipo::
* NewType::
* Anotações de objetos chamáveis::
* Genéricos::
* Anotando tuplas::
* O tipo de objetos de classe::
* Anotando geradores e corrotinas::
* Tipos genéricos definidos pelo usuário::
* O tipo Any::
* Subtipagem nominal vs estrutural::
* Conteúdo do módulo: Conteúdo do módulo<7>.
* Cronograma de descontinuação dos principais recursos::

Conteúdo do módulo

* Tipos primitivos especiais::
* Protocolos: Protocolos<3>.
* ABCs para trabalhar com E/S::
* Funções e decoradores::
* Auxiliares de introspecção::
* Constante::
* Apelidos descontinuados::

Tipos primitivos especiais

* Tipos especiais::
* Formas especiais::
* Criando tipos genéricos e apelidos de tipo::
* Outras diretivas especiais::

Apelidos descontinuados

* Apelidos de tipos embutidos::
* Apelidos para tipos em collections::
* Apelidos de outros tipos concretos::
* Apelidos de contêineres ABC em collections.abc.: Apelidos de contêineres ABC em collections abc.
* Apelidos para ABCs assíncronas em collections.abc: Apelidos para ABCs assíncronas em collections abc.
* Apelidos para outros ABCs em collections.abc.: Apelidos para outros ABCs em collections abc.
* Apelidos de ABCs da contextlib::

Modo de Desenvolvimento do Python

* Efeitos do Modo de Desenvolvimento do Python::
* Exemplo de ResourceWarning::
* Exemplo de erro de descritor de arquivo inválido::

doctest — Teste exemplos interativos de Python

* Uso simples; verificando exemplos em Docstrings: Uso simples verificando exemplos em Docstrings.
* Utilização comum; Verificando exemplos em um arquivo texto: Utilização comum Verificando exemplos em um arquivo texto.
* Uso na linha de comando: Uso na linha de comando<6>.
* Como ele funciona::
* Basic API::
* API do Unittest::
* Advanced API::
* Depuração::
* Soapbox::

Como ele funciona

* Quais docstrings são examinadas?::
* Como os exemplos de docstrings são reconhecidos?::
* Qual é o contexto de execução?::
* E quanto às exceções?::
* Flags opcionais::
* Directives::
* Avisos: Avisos<2>.

Advanced API

* DocTest Objects::
* Example Objects::
* DocTestFinder objects::
* DocTestParser objects::
* TestResults objects::
* DocTestRunner objects::
* OutputChecker objects::

unittest — Framework de testes unitários

* Exemplo Básico::
* Interface de linha de comando: Interface de linha de comando<8>.
* Test Discovery::
* Organizando código teste::
* Reutilizando códigos de teste antigos::
* Ignorando testes e falhas esperadas::
* Distinguindo iterações de teste utilizando subtestes::
* Classes e funções::
* Classes e Módulos de Definição de Contexto::
* Tratamento de sinal::

Interface de linha de comando

* Opções de linha de comando: Opções de linha de comando<4>.

Classes e funções

* Casos de teste::
* Grouping tests::
* Carregando e executando testes::

Carregando e executando testes

* load_tests Protocol::

Classes e Módulos de Definição de Contexto

* setUpClass and tearDownClass::
* setUpModule and tearDownModule::

unittest.mock — mock object library

* Guia Rápido::
* A classe Mock::
* Os criadores de patches::
* MagicMock and magic method support::
* Ajudantes::
* Order of precedence of side_effect, return_value and wraps: Order of precedence of side_effect return_value and wraps.

A classe Mock

* Fazendo chamadas::
* Deletando Atributos::
* Nomes de Mock e o atributo name::
* Anexando Mocks como Atributos::

Os criadores de patches

* patch::
* patch.object: patch object.
* patch.dict: patch dict.
* patch.multiple: patch multiple.
* métodos do patch; start e stop: métodos do patch start e stop.
* patch de embutidos::
* TEST_PREFIX::
* Aninhando Decoradores Patch::
* Onde fazer patch::
* Patching Descriptors and Proxy Objects::

MagicMock and magic method support

* Simulando Métodos Mágicos::
* Magic Mock::

Ajudantes

* sentinel::
* DEFAULT::
* chamada::
* create_autospec::
* ANY::
* FILTER_DIR::
* mock_open::
* Especificação automática::
* Vedando mocks::

unittest.mock — primeiros passos

* Usando Mock::
* Patch Decorators::
* Further Examples::

Usando Mock

* Métodos de aplicação de patches em Mock::
* Mock de chamadas de métodos em um objeto::
* Mocking Classes::
* Nomeando os mocks::
* Rastreando todas as chamadas::
* Setting Return Values and Attributes::
* Raising exceptions with mocks::
* Side effect functions and iterables::
* Mocking asynchronous iterators::
* Mocking asynchronous context manager::
* Creating a Mock from an Existing Object::
* Using side_effect to return per file content::

Further Examples

* Mocking chained calls::
* Partial mocking::
* Mocking a Generator Method::
* Applying the same patch to every test method::
* Mocking Unbound Methods::
* Checking multiple calls with mock::
* Coping with mutable arguments::
* Nesting Patches::
* Mocking a dictionary with MagicMock::
* Mock subclasses and their attributes::
* Mocking imports with patch.dict: Mocking imports with patch dict.
* Tracking order of calls and less verbose call assertions::
* More complex argument matching::

test — Pacote de Testes de Regressão do Python

* Escrever testes unitários para o pacote test::
* Executando testes usando a interface de linha de comando::

Depuração e perfilamento

* Tabela de eventos de auditoria::
* bdb — Framework do depurador::
* faulthandler — Dump the Python traceback::
* pdb — O depurador do Python::
* Os Profilers do Python::
* timeit — Mede o tempo de execução de pequenos trechos de código::
* trace — Rastreia ou acompanha a execução de instruções Python::
* tracemalloc — Trace memory allocations::

faulthandler — Dump the Python traceback

* Dumping the traceback::
* Fault handler state::
* Dumping the tracebacks after a timeout::
* Dumping the traceback on a user signal::
* Issue with file descriptors::
* Exemplo: Exemplo<13>.

pdb — O depurador do Python

* Interface de linha de comando: Interface de linha de comando<9>.
* Comandos de depuração::

Os Profilers do Python

* Introdução aos profilers::
* Instant User’s Manual::
* profile and cProfile Module Reference::
* A classe Stats::
* What Is Deterministic Profiling?::
* Limitações::
* Calibration::
* Using a custom timer::

timeit — Mede o tempo de execução de pequenos trechos de código

* Exemplos básicos: Exemplos básicos<2>.
* Interface em Python::
* Interface de linha de comando: Interface de linha de comando<10>.
* Exemplos: Exemplos<30>.

trace — Rastreia ou acompanha a execução de instruções Python

* Uso na linha de comando: Uso na linha de comando<7>.
* Interface programática::

Uso na linha de comando

* Opções principais::
* Modificadores::
* Filtros::

tracemalloc — Trace memory allocations

* Exemplos: Exemplos<31>.
* API::

Exemplos

* Exibe o top 10::
* Compute differences::
* Get the traceback of a memory block::
* Pretty top::

Pretty top

* Record the current and peak size of all traced memory blocks::

API

* Funções: Funções<11>.
* DomainFilter::
* Filter::
* Frame::
* Snapshot::
* Statistic::
* StatisticDiff::
* Trace::
* Traceback::

Empacotamento e Distribuição de Software

* ensurepip — Inicialização do instalador do pip::
* venv — Criação de ambientes virtuais::
* zipapp — Gerencia arquivos zip executáveis do Python::

ensurepip — Inicialização do instalador do pip

* Interface de linha de comando: Interface de linha de comando<11>.
* API do módulo::

venv — Criação de ambientes virtuais

* Criando ambientes virtuais: Criando ambientes virtuais<2>.
* Como funcionam os venvs::
* API: API<2>.
* Um exemplo de extensão de EnvBuilder::

zipapp — Gerencia arquivos zip executáveis do Python

* Exemplo básico::
* Interface de linha de comando: Interface de linha de comando<12>.
* API do Python::
* Exemplos: Exemplos<32>.
* Especificando o interpretador::
* Criando aplicações autônomas com zipapp::
* O formato de arquivo da aplicação zip Python::

Criando aplicações autônomas com zipapp

* Advertência::

Serviços de Tempo de Execução Python

* sys — Parâmetros e funções específicas do sistema::
* sys.monitoring — Monitoramento de eventos de execução: sys monitoring — Monitoramento de eventos de execução.
* sysconfig — Fornece acesso às informações de configuração do Python::
* builtins — Objetos embutidos::
* __main__ — Ambiente de código principal::
* warnings — Controle de avisos::
* dataclasses — Data Classes::
* contextlib — Utilitários para contextos da instrução with::
* abc — Classes base abstratas::
* atexit — Manipuladores de saída::
* traceback — Imprime ou recupera um traceback da pilha::
* __future__ — Definições de instruções future::
* gc — Interface para o coletor de lixo::
* inspect — Inspecione objetos vivos::
* site — Gancho de configuração específico do site::

sys.monitoring — Monitoramento de eventos de execução

* Identificadores de ferramenta::
* Eventos::
* Ativação e desativação de eventos::
* Registro de funções de retorno de chamada::

Identificadores de ferramenta

* Registro e uso de ferramentas::

Eventos

* Eventos locais::
* Eventos auxiliares::
* Outros eventos::
* O evento STOP_ITERATION::

Ativação e desativação de eventos

* Definir eventos globalmente::
* Eventos por objeto código::
* Desativação de eventos::

Registro de funções de retorno de chamada

* Argumentos da função de retorno de chamada::

sysconfig — Fornece acesso às informações de configuração do Python

* Variáveis de configuração::
* Caminhos de instalação::
* Esquema de usuário::
* Esquema de home::
* Esquema de prefixo::
* Funções de caminho de instalação::
* Outras funções: Outras funções<3>.
* Uso na linha de comando: Uso na linha de comando<8>.

Esquema de usuário

* posix_user::
* nt_user::
* osx_framework_user::

Esquema de home

* posix_home::

Esquema de prefixo

* posix_prefix::
* nt::

__main__ — Ambiente de código principal

* __name__ == '__main__'::
* __main__.py em pacotes Python: __main__ py em pacotes Python.
* import __main__::

__name__ == '__main__'

* O que é o “ambiente de código principal”?::
* Uso idiomático::
* Considerações sobre pacotes::

__main__.py em pacotes Python

* Uso idiomático: Uso idiomático<2>.

warnings — Controle de avisos

* Categorias de avisos::
* O filtro de avisos::
* Temporarily Suppressing Warnings::
* Testing Warnings::
* Updating Code For New Versions of Dependencies::
* Funções disponíveis::
* Gerenciadores de contexto disponíveis::

O filtro de avisos

* Critérios de supressão de avisos repetidos::
* Descrevendo filtros de aviso::
* Filtro de avisos padrão::
* Overriding the default filter::

dataclasses — Data Classes

* Conteúdo do módulo: Conteúdo do módulo<8>.
* Processamento pós-inicialização::
* Variáveis de classe::
* Variáveis de inicialização apenas::
* Frozen instances::
* Herança: Herança<2>.
* Re-ordering of keyword-only parameters in __init__(): Re-ordering of keyword-only parameters in __init__.
* Funções padrão de fábrica::
* Valores padrão mutáveis::
* Descriptor-typed fields::

contextlib — Utilitários para contextos da instrução with

* Utilitários::
* Exemplos e receitas: Exemplos e receitas<3>.
* Single use, reusable and reentrant context managers: Single use reusable and reentrant context managers.

Exemplos e receitas

* Supporting a variable number of context managers::
* Catching exceptions from __enter__ methods::
* Cleaning up in an __enter__ implementation::
* Replacing any use of try-finally and flag variables::
* Using a context manager as a function decorator::

Single use, reusable and reentrant context managers

* Reentrant context managers::
* Gerenciadores de contexto reutilizáveis::

atexit — Manipuladores de saída

* Exemplo do atexit::

traceback — Imprime ou recupera um traceback da pilha

* Funções de nível de módulo: Funções de nível de módulo<2>.
* TracebackException Objects::
* StackSummary Objects::
* FrameSummary Objects::
* Examples of Using the Module-Level Functions::
* Examples of Using TracebackException::

__future__ — Definições de instruções future

* Conteúdo do módulo: Conteúdo do módulo<9>.

inspect — Inspecione objetos vivos

* Tipos e membros::
* Retrieving source code::
* Introspecting callables with the Signature object::
* Classes e funções: Classes e funções<2>.
* A pilha to interpretador::
* Fetching attributes statically::
* Current State of Generators, Coroutines, and Asynchronous Generators: Current State of Generators Coroutines and Asynchronous Generators.
* Code Objects Bit Flags::
* Buffer flags::
* Interface de linha de comando: Interface de linha de comando<13>.

site — Gancho de configuração específico do site

* sitecustomize::
* usercustomize::
* Configuração Readline::
* Conteúdo do módulo: Conteúdo do módulo<10>.
* Interface de linha de comando: Interface de linha de comando<14>.

Interpretadores Python Personalizados

* code — Classes bases do interpretador::
* codeop — Compila código Python::

code — Classes bases do interpretador

* Objetos de interpretador interativo::
* Objetos de console Interativo::

Importando módulos

* zipimport - Importa módulos de arquivos Zip::
* pkgutil — Utilitário de extensão de pacote::
* modulefinder — Procura módulos usados por um script::
* runpy — Localizando e executando módulos Python::
* importlib — A implementação de import::
* importlib.resources – Leitura, abertura e acesso a recursos de pacotes: importlib resources – Leitura abertura e acesso a recursos de pacotes.
* importlib.resources.abc – Classes base abstratas para recursos: importlib resources abc – Classes base abstratas para recursos.
* importlib.metadata – Acessando metadados do pacote: importlib metadata – Acessando metadados do pacote.
* A inicialização do caminho de pesquisa de módulos sys.path: A inicialização do caminho de pesquisa de módulos sys path.

zipimport - Importa módulos de arquivos Zip

* Objetos zipimporter::
* Exemplos: Exemplos<33>.

modulefinder — Procura módulos usados por um script

* Exemplo de uso de ModuleFinder::

importlib — A implementação de import

* Introdução: Introdução<12>.
* Funções: Funções<12>.
* importlib.abc – classes base abstratas relacionadas a importação: importlib abc – classes base abstratas relacionadas a importação.
* importlib.machinery – Importadores e ganchos de caminho: importlib machinery – Importadores e ganchos de caminho.
* importlib.util – Utility code for importers: importlib util – Utility code for importers.
* Exemplos: Exemplos<34>.

Exemplos

* Importing programmatically::
* Checando se o módulo pode ser importado::
* Importa o arquivo de origem diretamente::
* Implementing lazy imports::
* Setting up an importer::
* Approximating importlib.import_module(): Approximating importlib import_module.

importlib.resources – Leitura, abertura e acesso a recursos de pacotes

* API funcional::

importlib.metadata – Acessando metadados do pacote

* Visão Geral: Visão Geral<3>.
* API funcional: API funcional<2>.
* Distribuições::
* Descoberta de distribuição::
* Estendendo o algoritmo de pesquisa::

API funcional

* Pontos de entrada::
* Metadados de distribuição::
* Versões de distribuição::
* Arquivos de distribuição::
* Requisitos de distribuição::
* Mapeando importação pra pacotes de distribuição::

Estendendo o algoritmo de pesquisa

* Exemplo: Exemplo<14>.

A inicialização do caminho de pesquisa de módulos sys.path

* Ambientes virtuais: Ambientes virtuais<2>.
* Arquivos _pth::
* Python embarcado::

Serviços da Linguagem Python

* ast — Árvores de Sintaxe Abstrata::
* symtable — Acesso a tabela de símbolos do compilador::
* token — Constantes usadas com árvores de análises do Python::
* keyword — Testando palavras reservadas do Python::
* tokenize — Tokenizador para código-fonte Python::
* tabnanny — Detecção de indentação ambígua::
* pyclbr — Suporte a navegador de módulos do Python::
* py_compile — Compila arquivos fonte do Python::
* compileall — Compilar bibliotecas do Python para bytecode::
* dis — Disassembler de bytecode do Python::
* pickletools — Ferramentas para desenvolvedores pickle::

ast — Árvores de Sintaxe Abstrata

* Gramática Abstrata::
* Classes de nós::
* Auxiliares de ast::
* Sinalizadores do compilador: Sinalizadores do compilador<2>.
* Uso na linha de comando: Uso na linha de comando<9>.

Classes de nós

* Nós raízes::
* Literais: Literais<3>.
* Variáveis::
* Expressões: Expressões<2>.
* Instruções::
* Fluxo de controle::
* Correspondência de padrões::
* Anotações de tipos::
* Parâmetros de tipo::
* Definições de função e classe::
* Async e await::

Expressões

* Subscrição::
* Compreensões::

Instruções

* Importações::

symtable — Acesso a tabela de símbolos do compilador

* Generating Symbol Tables::
* Examining Symbol Tables::
* Uso na linha de comando: Uso na linha de comando<10>.

tokenize — Tokenizador para código-fonte Python

* Tokenizando entradas::
* Uso na linha de comando: Uso na linha de comando<11>.
* Exemplos: Exemplos<35>.

pyclbr — Suporte a navegador de módulos do Python

* Objetos Function::
* Objetos classe: Objetos classe<2>.

py_compile — Compila arquivos fonte do Python

* Interface de linha de comando: Interface de linha de comando<15>.

compileall — Compilar bibliotecas do Python para bytecode

* Uso na linha de comando: Uso na linha de comando<12>.
* Funções públicas::

dis — Disassembler de bytecode do Python

* Interface de linha de comando: Interface de linha de comando<16>.
* Análise de bytecode::
* Funções de análise::
* Instruções em bytecode do Python::
* Opcode collections::

pickletools — Ferramentas para desenvolvedores pickle

* Uso na linha de comando: Uso na linha de comando<13>.
* Interface programática: Interface programática<2>.

Uso na linha de comando

* Opções da linha de comando: Opções da linha de comando<2>.

Serviços Específicos do MS Windows

* msvcrt — Rotinas úteis do runtime MS VC++::
* winreg — Acesso aos registros do Windows::
* winsound — Interface de reprodução de som para o Windows::

msvcrt — Rotinas úteis do runtime MS VC++

* Operações com arquivos::
* E/S de console::
* Outras funções: Outras funções<4>.

winreg — Acesso aos registros do Windows

* Funções: Funções<13>.
* Constantes: Constantes<10>.
* Objetos identificador de registro::

Constantes

* Constantes HKEY_*::
* Direitos de acesso::
* Tipos de valores::

Direitos de acesso

* Específico de 64 bits::

Serviços específicos do Unix

* shlex — Simple lexical analysis::
* posix — As chamadas de sistema mais comuns do POSIX::
* pwd — A senha do banco de dados::
* grp — O banco de dados de grupos::
* termios — Controle de tty no estilo POSIX::
* tty — Funções de controle de terminal::
* pty — Utilitários de pseudoterminal::
* fcntl — as chamadas de sistema fcntl e ioctl::
* resource — Informação de uso de recursos::
* syslog — Rotinas da biblioteca syslog do Unix::

shlex — Simple lexical analysis

* shlex Objects::
* Regras de análise::
* Improved Compatibility with Shells::

posix — As chamadas de sistema mais comuns do POSIX

* Suporte a arquivos grandes::
* Conteúdo notável do módulo::

termios — Controle de tty no estilo POSIX

* Exemplo: Exemplo<15>.

pty — Utilitários de pseudoterminal

* Exemplo: Exemplo<16>.

resource — Informação de uso de recursos

* Limites de recursos::
* Uso de recursos::

syslog — Rotinas da biblioteca syslog do Unix

* Exemplos: Exemplos<36>.

Exemplos

* Exemplo simples::

Módulos substituídos

* getopt — Analisador sintático no estilo C para opções de linha de comando::

Módulos removidos

* aifc — Lê e escreve arquivos AIFF e AIFC::
* asynchat — Manipulador de comando/resposta de socket assíncrono::
* asyncore — Manipulador de socket assíncrono::
* audioop — Manipulando dados de áudio original::
* cgi — Suporte a Common Gateway Interface::
* cgitb — Gerenciador de traceback para scripts de CGI::
* chunk — Lê dados em blocos IFF::
* crypt — Função para verificar senhas Unix::
* distutils — Criação e instalação de módulos do Python::
* imghdr — Determina o tipo de uma imagem::
* imp — Acessa os componentes internos de importação::
* mailcap — Manipulação de arquivo Mailcap::
* msilib — Lê e escreve arquivos do Microsoft Installer::
* nis — Interface para NIS da Sun (Yellow Pages): nis — Interface para NIS da Sun Yellow Pages.
* nntplib — Cliente de protocolo NNTP::
* ossaudiodev — Acesso a dispositivos de áudio compatíveis com OSS::
* pipes — Interface para pipelines do shell::
* smtpd — Serviços SMTP::
* sndhdr — Determina o tipo de arquivos de som::
* spwd — O banco de dados de senhas shadow::
* sunau — Lê e escreve arquivos AU da Sun::
* telnetlib — cliente Telnet::
* uu — Codifica e decodifica arquivos uuencode::
* xdrlib — Codifica e decodifica dados XDR::

Estendendo e incorporando o interpretador Python

* Ferramentas de terceiros recomendadas::
* Criando extensões sem ferramentas de terceiros::
* Incorporando o tempo de execução do CPython em uma aplicação maior::

Criando extensões sem ferramentas de terceiros

* Estendendo Python com C ou C++::
* Definindo Tipos de Extensão; Tutorial: Definindo Tipos de Extensão Tutorial.
* Defining Extension Types; Assorted Topics: Defining Extension Types Assorted Topics.
* Construindo extensões C e C++::
* Construindo Extensões C e C++ no Windows::

Estendendo Python com C ou C++

* Um Exemplo Simples::
* Intermezzo; erros e exceções: Intermezzo erros e exceções.
* De volta ao exemplo::
* A tabela de métodos e a função de inicialização do módulo::
* Compilação e vinculação::
* Chamando funções Python de C::
* Extraindo parâmetros em funções de extensão::
* Parâmetros nomeados para funções de extensão::
* Construindo valores arbitrários::
* Contagens de referências::
* Escrevendo extensões em C++::
* Fornecendo uma API C para um módulo de extensão::

Contagens de referências

* Contagem de referências no Python::
* Regras de propriedade::
* Gelo fino::
* Ponteiros NULL::

Definindo Tipos de Extensão: Tutorial

* O básico: O básico<2>.
* Adicionando dados e métodos ao exemplo básico::
* Fornecendo controle mais preciso sobre atributos de dados::
* Apoiando a coleta de lixo cíclica::
* Criando subclasses de outros tipos::

Defining Extension Types: Assorted Topics

* Finalization and De-allocation::
* Object Presentation::
* Attribute Management::
* Object Comparison::
* Abstract Protocol Support::
* Weak Reference Support::
* More Suggestions::

Attribute Management

* Generic Attribute Management::
* Type-specific Attribute Management::

Construindo extensões C e C++

* Construindo extensões C e C ++ com setuptools::

Construindo Extensões C e C++ no Windows

* Uma abordagem de livro de receitas::
* Diferenças entre o Unix e o Windows::
* Usando DLLs na prática::

Incorporando o tempo de execução do CPython em uma aplicação maior

* Incorporando o Python numa Outra Aplicação::

Incorporando o Python numa Outra Aplicação

* Very High Level Embedding::
* Beyond Very High Level Embedding; An overview: Beyond Very High Level Embedding An overview.
* Pure Embedding::
* Extending Embedded Python::
* Embedding Python in C++::
* Compiling and Linking under Unix-like systems::

Manual de referência da API Python/C

* Introdução: Introdução<13>.
* Estabilidade da API C::
* A camada de nível muito alto::
* Contagem de referências::
* Tratamento de exceções: Tratamento de exceções<2>.
* Utilitários: Utilitários<2>.
* Camada de Objetos Abstratos::
* Camada de Objetos Concretos::
* Inicialização, finalização e threads: Inicialização finalização e threads.
* Configuração de inicialização do Python::
* Gerenciamento de Memória::
* Suporte a implementação de Objetos::
* API e Versionamento de ABI::
* API C de monitoramento::
* Gerando eventos de execução::

Introdução

* Padrões de codificação::
* Arquivos de inclusão::
* Macros úteis::
* Objetos, tipos e contagens de referências: Objetos tipos e contagens de referências.
* Exceções: Exceções<21>.
* Incorporando Python: Incorporando Python<2>.
* Compilações de depuração::
* Ferramentas de terceiros recomendadas: Ferramentas de terceiros recomendadas<2>.

Objetos, tipos e contagens de referências

* Contagens de referências: Contagens de referências<2>.
* Tipos::

Contagens de referências

* Detalhes da contagem de referências::

Estabilidade da API C

* API C Instável::
* Interface Binária de Aplicação Estável::
* Considerações da plataforma::
* Conteúdo da API Limitada::

Interface Binária de Aplicação Estável

* API C Limitada::
* ABI Estável::
* Escopo e Desempenho da API Limitada::
* Limitações da API Limitada::

A camada de nível muito alto

* Símbolos iniciais disponíveis::
* Stack Effects::

Tratamento de exceções

* Impressão e limpeza::
* Levantando exceções: Levantando exceções<2>.
* Emitindo avisos::
* Consultando o indicador de erro::
* Tratamento de sinal: Tratamento de sinal<2>.
* Classes de exceção::
* Objeto Exceção::
* Objetos de exceção Unicode::
* Controle de recursão::
* Exception and warning types::
* Tracebacks::

Exception and warning types

* Tipos de exceção::
* OSError aliases::
* Warning types::

Utilitários

* Utilitários do sistema operacional::
* Funções de sistema::
* Controle de processos::
* Importando módulos: Importando módulos<2>.
* Suporte a marshalling de dados::
* Análise de argumentos e construção de valores::
* Conversão e formação de strings::
* Classificação e conversão de caracteres::
* API do PyHash::
* Reflexão::
* Registro de codec e funções de suporte::
* API C PyTime::
* Suporte a Mapas do Perf::

Análise de argumentos e construção de valores

* Análise de argumentos: Análise de argumentos<2>.
* Construindo valores::

Análise de argumentos

* Strings e buffers::
* Números: Números<2>.
* Outros objetos::
* Funções da API::

Registro de codec e funções de suporte

* API de pesquisa de codec::
* API de registro de tratamentos de erros de decodificação Unicode::
* Variáveis utilitárias de codec::

API C PyTime

* Tipos: Tipos<2>.
* Funções de relógio::
* Funções de relógio brutas::
* Funções de conversão::

Camada de Objetos Abstratos

* Protocolo de objeto::
* Protocolo de chamada::
* Protocolo de número::
* Protocolo de sequência::
* Protocolo de mapeamento::
* Protocolo Iterador::
* Protocolo de buffer::

Protocolo de chamada

* O protocolo tp_call::
* O protocolo vectorcall::
* API de chamada de objetos::
* API de suporte a chamadas::

O protocolo vectorcall

* Controle de recursão: Controle de recursão<2>.
* API de suporte à chamada de vetores::

Protocolo de buffer

* Estrutura de Buffer::
* Tipos de solicitação do buffer::
* Vetores Complexos::
* Funções relacionadas ao Buffer::

Tipos de solicitação do buffer

* campos independentes do pedido::
* apenas em formato::
* forma, avanços, suboffsets: forma avanços suboffsets.
* requisições contíguas::
* requisições compostas::

Vetores Complexos

* Estilo NumPy; forma e avanços: Estilo NumPy forma e avanços.
* Estilo-PIL; forma, avanços e suboffsets: Estilo-PIL forma avanços e suboffsets.

Camada de Objetos Concretos

* Objetos Fundamentais::
* Objetos Numéricos::
* Objetos Sequência::
* Coleções::
* Objetos Function: Objetos Function<2>.
* Outros Objetos::
* API C para módulos de extensão::

Objetos Fundamentais

* Objetos tipo: Objetos tipo<2>.
* O Objeto None::

Objetos tipo

* Creating Heap-Allocated Types::

Objetos Numéricos

* Objetos Inteiros::
* Objetos Booleanos::
* Objetos de ponto flutuante::
* Objetos números complexos::

Objetos de ponto flutuante

* As funções Pack e Unpack::

As funções Pack e Unpack

* Funções Pack::
* Funções de Unpack::

Objetos números complexos

* Números complexos como estruturas C.: Números complexos como estruturas C.
* Números complexos como objetos Python::

Objetos Sequência

* Objetos bytes: Objetos bytes<2>.
* Objetos byte array::
* Objetos Unicode e Codecs::
* Objeto tupla::
* Objetos sequência de estrutura::
* Objeto List::

Objetos byte array

* Macros para verificação de tipo::
* Funções diretas da API::
* Macros::

Objetos Unicode e Codecs

* Objetos Unicode::
* Built-in Codecs::
* Methods and Slot Functions::

Objetos Unicode

* Tipo Unicode::
* Propriedade de caracteres Unicode::
* Creating and accessing Unicode strings::
* Locale Encoding::
* File System Encoding::
* wchar_t Support::

Built-in Codecs

* Generic Codecs::
* UTF-8 Codecs::
* UTF-32 Codecs::
* UTF-16 Codecs::
* UTF-7 Codecs::
* Unicode-Escape Codecs::
* Raw-Unicode-Escape Codecs::
* Latin-1 Codecs::
* ASCII Codecs::
* Character Map Codecs::
* MBCS codecs for Windows::

Coleções

* Objetos dicionários::
* Objeto Set::

Objetos dicionários

* Objetos visão de dicionário::
* Dicionários ordenados::

Objetos Function

* Objetos Function: Objetos Function<3>.
* Objetos de Método de Instância::
* Objetos método: Objetos método<2>.
* Objeto célula::
* Objetos código: Objetos código<3>.
* Sinalizadores de objetos código::
* Informação adicional::

Outros Objetos

* Objetos arquivos::
* Objetos do Módulo::
* Objetos Iteradores::
* Objetos descritores::
* Objetos Slice::
* Objetos MemoryView::
* Objetos buffer serializados com pickle::
* Objetos referência fraca: Objetos referência fraca<2>.
* Capsules: Capsules<2>.
* Objetos Frame::
* Objetos Geradores::
* Objetos corrotina: Objetos corrotina<2>.
* Objetos de variáveis de contexto::
* Objetos de indicação de tipos::

Objetos do Módulo

* Inicializando módulos C::
* Pesquisa por módulos::

Inicializando módulos C

* inicialização de fase única::
* Inicialização multifásica::
* Funções de criação de módulo de baixo nível::
* Support functions::

Objetos Iteradores

* Objetos intervalo::
* Tipos de iteradores embutidos::
* Outros objetos iteradores::

Objetos descritores

* Descritores embutidos::

Objetos Slice

* Objeto Ellipsis::

Objetos Frame

* Proxies locais de quadro::
* Legacy Local Variable APIs::
* Internal Frames::

Objetos Geradores

* Objetos geradores assíncronos::

API C para módulos de extensão

* API C de curses::
* Dados internos::
* Objetos DateTime: Objetos DateTime<2>.
* Dados internos: Dados internos<2>.

Inicialização, finalização e threads

* Antes da inicialização do Python::
* Variáveis de configuração global::
* Inicializando e encerrando o interpretador::
* Parâmetros de todo o processo::
* Estado de thread e a trava global do interpretador::
* Sub-interpreter support::
* Notificações assíncronas::
* Profiling and Tracing::
* Reference tracing::
* Advanced Debugger Support::
* Thread Local Storage Support::
* Synchronization Primitives: Synchronization Primitives<2>.
* Operating System Thread APIs::

Estado de thread e a trava global do interpretador

* Releasing the GIL from extension code::
* Threads não-Python criadas::
* Cuidados com o uso de fork(): Cuidados com o uso de fork.
* Cautions regarding runtime finalization::
* High-level API::
* Low-level API::

Sub-interpreter support

* A Per-Interpreter GIL::
* Bugs and caveats::

Thread Local Storage Support

* Thread Specific Storage (TSS) API: Thread Specific Storage TSS API.
* Thread Local Storage (TLS) API: Thread Local Storage TLS API.

Thread Specific Storage (TSS) API

* Alocação dinâmica::
* Métodos: Métodos<2>.

Synchronization Primitives

* Python Critical Section API::
* Legacy Locking APIs::

Configuração de inicialização do Python

* Exemplo: Exemplo<17>.
* PyWideStringList::
* PyStatus::
* PyPreConfig::
* Pré-inicializar Python com PyPreConfig::
* PyConfig::
* Initialization with PyConfig::
* Isolated Configuration::
* Configuração do Python::
* Python Path Configuration::
* Py_GetArgcArgv(): Py_GetArgcArgv.
* Multi-Phase Initialization Private Provisional API::

Gerenciamento de Memória

* Visão Geral: Visão Geral<4>.
* Allocator Domains::
* Raw Memory Interface::
* Interface da Memória::
* Alocadores de objeto::
* Alocadores de memória padrão::
* Alocadores de memória::
* Debug hooks on the Python memory allocators::
* The pymalloc allocator::
* The mimalloc allocator::
* tracemalloc C API::
* Exemplos: Exemplos<37>.

Interface da Memória

* Apelidos descontinuados: Apelidos descontinuados<2>.

The pymalloc allocator

* Customize pymalloc Arena Allocator::

Suporte a implementação de Objetos

* Alocando objetos na heap::
* Estruturas comuns de objetos::
* Estruturas de objetos tipo::
* Suporte a Coleta Cíclica de Lixo::

Alocando objetos na heap

* Apelidos descontinuados: Apelidos descontinuados<3>.

Estruturas comuns de objetos

* Macros e tipos de objetos base::
* Implementing functions and methods::
* Accessing attributes of extension types::

Accessing attributes of extension types

* Member flags::
* Member types::
* Defining Getters and Setters::

Estruturas de objetos tipo

* Referências rápidas::
* PyTypeObject Definition::
* PyObject Slots::
* PyVarObject Slots::
* PyTypeObject Slots::
* Static Types::
* Tipos no heap::
* Number Object Structures::
* Mapping Object Structures::
* Sequence Object Structures::
* Buffer Object Structures::
* Async Object Structures::
* Slot Type typedefs::
* Exemplos: Exemplos<38>.

Referências rápidas

* “slots tp”::
* sub-slots::
* slot typedefs::

Suporte a Coleta Cíclica de Lixo

* Controlando o estado do coletor de lixo::
* Querying Garbage Collector State::

Gerando eventos de execução

* Gerenciando o Estado de um Monitoramento::

Instalando módulos Python

* Termos chave::
* Uso básico: Uso básico<3>.
* Como eu …?::
* Problemas comuns de instalação::

Como eu …?

* … instalo pip em versões do Python anteriores ao Python 3.4?: … instalo pip em versões do Python anteriores ao Python 3 4?.
* … instalo pacotes apenas para o usuário atual?::
* … instalo pacotes científicos do Python?::
* … trabalho com várias versões do Python instaladas em paralelo?::

Problemas comuns de instalação

* Instalando no sistema Python no Linux::
* Pip não instalado::
* Instalando extensões binárias::

Python HOWTOs

* Uma visão geral conceitual de asyncio::
* Portando módulos de extensão para o Python 3::
* Programação em Curses com Python::
* Guia de descritores::
* Depurando extensões de API C e internos do CPython com GDB::
* Enum::
* Programação Funcional::
* Logging::
* Livro de receitas do logging::
* Expressões Regulares::
* Programação de Soquetes::
* Técnicas de ordenação::
* Unicode: Unicode<3>.
* Como buscar recursos da Internet usando o pacote urllib::
* Uma introdução ao módulo ipaddress::
* Instrumentando o CPython com DTrace e SystemTap::
* Suporte do Python ao perfilador perf do Linux::
* Boas práticas para anotações::
* Isolando módulos de extensão::
* Descritor de arquivo de temporizador::
* A Ordem de Resolução de Métodos do Python 2.3: A Ordem de Resolução de Métodos do Python 2 3.
* Suporte experimental do Python para threads livres::
* Suporte a extensões da API C para threads livres::

Uma visão geral conceitual de asyncio

* Uma visão geral conceitual parte 1; o alto nível: Uma visão geral conceitual parte 1 o alto nível.
* Uma visão geral conceitual, parte 2; os detalhes: Uma visão geral conceitual parte 2 os detalhes.

Uma visão geral conceitual parte 1: o alto nível

* Laço de eventos: Laço de eventos<2>.
* Funções assíncronas e corrotinas::
* Tarefas: Tarefas<2>.
* await::

Uma visão geral conceitual, parte 2: os detalhes

* O funcionamento interno das corrotinas::
* Futuros: Futuros<2>.
* Um asyncio.sleep caseiro: Um asyncio sleep caseiro.

Programação em Curses com Python

* O que é curses?::
* Começando e terminando uma aplicação curses::
* Janelas e Pads::
* Exibindo texto::
* Entrada de usuário::
* Para mais informações::

O que é curses?

* O módulo curses de Python::

Exibindo texto

* Atributos e Cor::

Guia de descritores

* Introdução: Introdução<14>.
* Exemplo completamente prático::
* Tutorial técnico::
* Equivalentes de Python puro::

Introdução

* Exemplo simples; um descritor que retorna uma constante: Exemplo simples um descritor que retorna uma constante.
* Pesquisas dinâmicas::
* Atributos gerenciados::
* Nomes personalizados::
* Pensamentos finais::

Exemplo completamente prático

* Classe Validator::
* Validadores personalizados::
* Aplicação prática::

Tutorial técnico

* Resumo::
* Definição e introdução::
* Protocolo Descriptor::
* Visão geral da invocação do descritor::
* Invocação de uma instância::
* Invocação de uma classe::
* Invocação de super::
* Resumo da lógica de invocação::
* Notificação automática de nome::
* Exemplo de ORM::

Equivalentes de Python puro

* Propriedades::
* Funções e métodos::
* Tipos de métodos::
* Métodos estáticos::
* Métodos de classe::
* Member objects and __slots__::

Depurando extensões de API C e internos do CPython com GDB

* Pré-requisitos::
* Usando a compilação de depuração e o modo de desenvolvimento::
* Usando a extensão python-gdb::
* Uso com comandos do GDB::

Pré-requisitos

* Configuração com Python construído a partir do código-fonte::
* Configuração para Python a partir de uma distribuição Linux::

Usando a extensão python-gdb

* Pretty-printers::
* py-list::
* py-up e py-down::
* py-bt::
* py-print::
* py-locals::

Enum

* Acesso programático aos membros da enumeração e seus atributos.: Acesso programático aos membros da enumeração e seus atributos.
* Membros e valores duplicados em enums::
* Garantindo valores únicos na enumeração::
* Usando valores automáticos::
* Iteração: Iteração<2>.
* Comparações: Comparações<3>.
* Membros e atributos permitidos em enumerações::
* Herança restrita de Enum::
* Suporte a dataclass::
* Pickling::
* API funcional: API funcional<3>.
* Derived Enumerations::
* When to use __new__() vs. __init__(): When to use __new__ vs __init__.
* How are Enums and Flags different?::
* Enum Cookbook::
* Subclassing EnumType::

Derived Enumerations

* IntEnum::
* StrEnum::
* IntFlag::
* Sinalizador::
* Outros: Outros<2>.

When to use __new__() vs. __init__()

* Finer Points::

Finer Points

* Nomes __dunder__ suportados: Nomes __dunder__ suportados<2>.
* Nomes _sunder_ suportados: Nomes _sunder_ suportados<2>.
* _Private__names::
* Enum member type::
* Creating members that are mixed with other data types::
* Boolean value of Enum classes and members::
* Enum classes with methods::
* Combining members of Flag::
* Flag and IntFlag minutia::

How are Enums and Flags different?

* Enum Classes::
* Flag Classes::
* Enum Members (aka instances): Enum Members aka instances.
* Flag Members::

Enum Cookbook

* Omitting values::
* OrderedEnum::
* DuplicateFreeEnum::
* MultiValueEnum::
* Planet::
* TimePeriod::

Omitting values

* Using auto::
* Using object::
* Using a descriptive string::
* Using a custom __new__(): Using a custom __new__.

Programação Funcional

* Introdução: Introdução<15>.
* Iteradores: Iteradores<2>.
* Expressões do gerador e compreensões de lista::
* Geradores: Geradores<2>.
* Funções embutidas: Funções embutidas<4>.
* O módulo itertools::
* O módulo functools::
* Pequenas funções e as expressões lambda::
* Histórico de Revisão e Reconhecimentos::
* Referências: Referências<2>.

Introdução

* Probabilidade formal::
* Modularidade::
* Fácil de depurar e testar::
* Componibilidade::

Iteradores

* Tipos de Dados que Suportam Iteradores::

Geradores

* Passando valores para um gerador::

O módulo itertools

* Criando novos iteradores::
* Calling functions on elements::
* Selecionando elementos::
* Combinatoric functions::
* Agrupando elementos::

O módulo functools

* O módulo operator::

Referências

* Geral::
* Python-specific::
* Documentação do Python::

Logging

* Tutorial Básico de Logging::
* Tutorial Avançado do Logging::
* Níveis de Logging: Níveis de Logging<2>.
* Handlers úteis::
* Exceções levantadas durante logging::
* Usando objetos arbitrários como mensagens::
* Optimização::
* Outros recursos: Outros recursos<2>.

Tutorial Básico de Logging

* Quando usar logging::
* Um exemplo simples::
* Logging em um arquivo::
* Logging de variáveis dinâmicas::
* Alterar o formato das mensagens exibidas::
* Exibindo data/hora em mensagens::
* Próximos Passos::

Tutorial Avançado do Logging

* Fluxo de Logging::
* Registradores::
* Manipuladores::
* Formatadores::
* Configurando Logging::
* O que acontece se nenhuma configuração é fornecida::
* Configurando logging para uma biblioteca::

Níveis de Logging

* Níveis personalizados::

Livro de receitas do logging

* Usando logging em vários módulos::
* Registro de eventos de várias threads::
* Múltiplos manipuladores e formatadores::
* Logging to multiple destinations::
* Custom handling of levels::
* Configuration server example::
* Dealing with handlers that block::
* Sending and receiving logging events across a network::
* Adding contextual information to your logging output::
* Use of contextvars::
* Imparting contextual information in handlers::
* Logging to a single file from multiple processes::
* Using file rotation::
* Use of alternative formatting styles::
* Personalizando o LogRecord::
* Subclassing QueueHandler and QueueListener- a ZeroMQ example::
* Subclassing QueueHandler and QueueListener- a pynng example::
* An example dictionary-based configuration::
* Using a rotator and namer to customize log rotation processing::
* A more elaborate multiprocessing example::
* Inserting a BOM into messages sent to a SysLogHandler::
* Implementing structured logging::
* Customizing handlers with dictConfig(): Customizing handlers with dictConfig.
* Using particular formatting styles throughout your application::
* Configuring filters with dictConfig(): Configuring filters with dictConfig.
* Customized exception formatting::
* Speaking logging messages::
* Buffering logging messages and outputting them conditionally::
* Sending logging messages to email, with buffering: Sending logging messages to email with buffering.
* Formatting times using UTC (GMT) via configuration: Formatting times using UTC GMT via configuration.
* Using a context manager for selective logging::
* A CLI application starter template::
* A Qt GUI for logging::
* Logging to syslog with RFC5424 support::
* How to treat a logger like an output stream::
* How to uniformly handle newlines in logging output::
* Patterns to avoid::
* Outros recursos: Outros recursos<3>.

Sending and receiving logging events across a network

* Running a logging socket listener in production::

Adding contextual information to your logging output

* Using LoggerAdapters to impart contextual information::
* Using Filters to impart contextual information::

Using LoggerAdapters to impart contextual information

* Using objects other than dicts to pass contextual information::

Logging to a single file from multiple processes

* Using concurrent.futures.ProcessPoolExecutor: Using concurrent futures ProcessPoolExecutor.
* Deploying Web applications using Gunicorn and uWSGI::

Subclassing QueueHandler and QueueListener- a ZeroMQ example

* Subclass QueueHandler::
* Subclass QueueListener::

Subclassing QueueHandler and QueueListener- a pynng example

* Subclass QueueListener: Subclass QueueListener<2>.
* Subclass QueueHandler: Subclass QueueHandler<2>.

Using particular formatting styles throughout your application

* Using LogRecord factories::
* Using custom message objects::

Patterns to avoid

* Opening the same log file multiple times::
* Using loggers as attributes in a class or passing them as parameters::
* Adding handlers other than NullHandler to a logger in a library::
* Creating a lot of loggers::

Expressões Regulares

* Introdução: Introdução<16>.
* Padrões simples::
* Usando expressões regulares::
* Mais poder dos padrões::
* Modificando strings::
* Problemas comuns::
* Comentários: Comentários<2>.

Padrões simples

* Correspondendo caracteres::
* Repetindo coisas::

Usando expressões regulares

* Compilando expressões regulares::
* A praga da contrabarra::
* Executando correspondências::
* Funções de nível de módulo: Funções de nível de módulo<3>.
* Sinalizadores de compilação::

Mais poder dos padrões

* Mais metacaracteres::
* Agrupamento::
* Não captura e grupos nomeados::
* Asserções lookahead::

Modificando strings

* Dividindo as strings::
* Busca e Substituição: Busca e Substituição<2>.

Problemas comuns

* Usando métodos de string::
* match() versus search(): match versus search.
* Gulosos versus não-gulosos::
* Usando re.VERBOSE: Usando re VERBOSE.

Programação de Soquetes

* Soquetes::
* Criando um Soquete::
* Usando um Soquete::
* Desconectando::
* Soquetes não-bloqueantes::

Soquetes

* História::

Criando um Soquete

* IPC::

Usando um Soquete

* Dados Binários::

Desconectando

* Quando o Soquete Morre::

Técnicas de ordenação

* Básico de ordenação::
* Funções chave::
* Operator Module Functions and Partial Function Evaluation::
* Ascendente e descendente::
* Estabilidade de Ordenação e Ordenações Complexas::
* Decorate-Sort-Undecorate::
* Funções de comparação::
* Curiosidades e conclusões: Curiosidades e conclusões<2>.
* Ordenações parciais::

Unicode

* Introdução ao Unicode::
* Suporte a Unicode no Python::
* Reading and Writing Unicode Data::
* Reconhecimentos: Reconhecimentos<10>.

Introdução ao Unicode

* Definições::
* Codificações::
* Referências: Referências<3>.

Suporte a Unicode no Python

* O Tipo String::
* Convertendo para Bytes::
* Unicode Literals in Python Source Code::
* Propriedades Unicode::
* Comparando Strings::
* Expressões Regulares Unicode::
* Referências: Referências<4>.

Reading and Writing Unicode Data

* Nomes de arquivos Unicode::
* Tips for Writing Unicode-aware Programs::
* Referências: Referências<5>.

Tips for Writing Unicode-aware Programs

* Converting Between File Encodings::
* Files in an Unknown Encoding::

Como buscar recursos da Internet usando o pacote urllib

* Introdução: Introdução<17>.
* Acessando URLs::
* Tratamento de exceções: Tratamento de exceções<3>.
* info e geturl::
* Abridores e tratadores::
* Autenticação básica::
* Proxies::
* Socekts e camadas::
* Notas de rodapé::

Acessando URLs

* Dados::
* Cabeçalhos::

Tratamento de exceções

* URLError::
* HTTPError::
* Resumindo::

HTTPError

* Códigos de erro::

Resumindo

* Número 1::
* Número 2::

Uma introdução ao módulo ipaddress

* Criando objetos de Endereço/Rede/Interface::
* Inspecionando objetos endereço/rede/interface::
* Redes como listas de Addresses::
* Comparações: Comparações<4>.
* Usando endereços IP com outros módulos::
* Obtendo mais detalhes quando a criação da instância falha::

Criando objetos de Endereço/Rede/Interface

* Uma observação sobre versões do IP::
* Endereços IP de host::
* Definindo redes::
* Interfaces do host::

Instrumentando o CPython com DTrace e SystemTap

* Habilitando os marcadores estáticos::
* Sondas estáticas do DTtrace::
* Marcadores estáticos do SystemTap::
* Marcadores estáticos disponíveis::
* Tapsets de SystemTap::
* Exemplos: Exemplos<39>.

Suporte do Python ao perfilador perf do Linux

* Como habilitar o suporte a perfilação com perf::
* Como obter os melhores resultados::
* Como trabalhar sem ponteiros de quadro::

Boas práticas para anotações

* Acessando o dicionário de anotações de um objeto no Python 3.10 e nas versões mais recentes: Acessando o dicionário de anotações de um objeto no Python 3 10 e nas versões mais recentes.
* Acessando o dicionário de anotações de um objeto no Python 3.9 e nas versões mais antigas: Acessando o dicionário de anotações de um objeto no Python 3 9 e nas versões mais antigas.
* Recuperando manualmente anotações transformadas em strings::
* Melhores práticas para __annotations__ em qualquer versão Python::
* Peculiaridades de __annotations__::

Isolando módulos de extensão

* Quem deveria ler isto::
* Contexto: Contexto<2>.
* Fazendo módulos seguros com múltiplos interpretadores::
* Tipos no heap: Tipos no heap<2>.
* Problemas em aberto::

Contexto

* Entra o estado por módulo::
* Objetos de módulo isolados::
* Casos particulares surpreendentes::

Fazendo módulos seguros com múltiplos interpretadores

* Gerenciando estado global::
* Gerenciando estado por módulo::
* Exclusão voluntária; limitando a um objeto de módulo por processo: Exclusão voluntária limitando a um objeto de módulo por processo.
* Acesso ao estado de módulo a partir de funções::

Tipos no heap

* Mudando tipos estáticos para tipos no heap::
* Definindo tipos no heap::
* Protocolo de recolhimento de lixo::
* Acessando o estado do módulo a partir de classes::
* Acesso ao estado do módulo a partir de métodos regulares::
* Acesso ao estado do módulo a partir de métodos slot, getters e setters: Acesso ao estado do módulo a partir de métodos slot getters e setters.
* Tempo de vida do estado do módulo::

Protocolo de recolhimento de lixo

* tp_traverse no Python 3.8 e anteriores: tp_traverse no Python 3 8 e anteriores.
* Delegando a função tp_traverse::
* Definindo tp_dealloc::
* Evitar substituir tp_free::
* Evitar PyObject_New::

Problemas em aberto

* Escopo por classe::
* Conversão sem perdas para tipos no heap::

Descritor de arquivo de temporizador

* Exemplos: Exemplos<40>.

A Ordem de Resolução de Métodos do Python 2.3

* O início::
* A ordem de resolução de métodos C3::
* Exemplos: Exemplos<41>.
* Ordens de resolução de métodos ruins::
* O fim::
* Recursos: Recursos<3>.

Suporte experimental do Python para threads livres

* Instalação::
* Identificando um Python com threads livres::
* A trava global do interpretador no Python com threads livres::
* Segurança nas threads::
* Limitações conhecidas::

Limitações conhecidas

* Imortalização::
* Objetos quadro: Objetos quadro<2>.
* Iteradores: Iteradores<3>.
* Desempenho com thread única::

Suporte a extensões da API C para threads livres

* Identificando a construção com threads livres em C::
* Inicialização de módulo::
* Diretrizes gerais de API::
* Referências emprestadas::
* APIs de alocação de memória::
* APIs da GIL e de estado de threads::
* Protegendo o estado interno das extensões::
* Construindo extensões para a construção com threads livres::

Inicialização de módulo

* Inicialização multifásica: Inicialização multifásica<2>.
* Inicialização monofásica::

Diretrizes gerais de API

* Segurança de threads de contêineres::

Segurança de threads de contêineres

* PyDict_Next::

Construindo extensões para a construção com threads livres

* API C limitada e ABI estável::
* Windows: Windows<82>.

Perguntas Frequentes Sobre Python

* Python Geral::
* FAQ sobre programação::
* FAQ sobre design e histórico::
* FAQ de Bibliotecas e Extensões::
* FAQ sobre Extensão/Incorporação::
* Python no Windows::
* FAQ da Interface Gráfica do Usuário::
* FAD de “Por que o Python está instalado em meu computador?”::

Python Geral

* Informações gerais::
* Python no mundo real::

Informações gerais

* O que é Python?::
* O que é a Python Software Foundation?::
* Existem restrições de direitos autorais sobre o uso de Python?::
* Em primeiro lugar, por que o Python foi desenvolvido?: Em primeiro lugar por que o Python foi desenvolvido?.
* Para o que Python é excelente?::
* Como funciona o esquema de numeração de versões do Python?::
* Como faço para obter uma cópia dos fonte do Python?::
* Como faço para obter a documentação do Python?::
* Eu nunca programei antes. Existe um tutorial básico do Python?: Eu nunca programei antes Existe um tutorial básico do Python?.
* Existe um grupo de discussão ou lista de discussão dedicada ao Python?::
* Como faço para obter uma versão de teste beta do Python?::
* Como eu envio um relatório de erros e correções para o Python?::
* Existem alguns artigos publicados sobre o Python para que eu possa fazer referência?::
* Existem alguns livros sobre o Python?::
* Onde está armazenado o site www.python.org?: Onde está armazenado o site www python org?.
* Por que o nome Python?::
* Eu tenho que gostar de “Monty Python’s Flying Circus”?::

Python no mundo real

* Quão estável é o Python?::
* Quantas pessoas usam o Python?::
* Existe algum projeto significativo feito em Python?::
* Quais são os novos desenvolvimentos esperados para o Python no futuro?::
* É razoável propor mudanças incompatíveis com o Python?::
* O Python é uma boa linguagem para quem está começando na programação agora?::

FAQ sobre programação

* Perguntas gerais::
* Núcleo da linguagem::
* Números e strings::
* Desempenho: Desempenho<4>.
* Sequencias (Tuplas/Listas): Sequencias Tuplas/Listas.
* Objetos::
* Módulos: Módulos<5>.

Perguntas gerais

* Existe um depurador a nível de código-fonte que possua pontos de interrupção (breakpoints), single-stepping, etc.?: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?.
* Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?::
* Como posso criar um binário independente a partir de um script Python?::
* Existem padrões para a codificação ou um guia de estilo utilizado pela comunidade Python?::

Núcleo da linguagem

* Porque recebo o erro UnboundLocalError quando a variável possui um valor associado?::
* Quais são as regras para variáveis locais e globais em Python?::
* Por que os lambdas definidos em um laço com valores diferentes retornam o mesmo resultado?::
* Como definir variáveis globais dentro de módulos?::
* Quais são as “melhores práticas” quando fazemos uso da importação de módulos?::
* Por que os valores padrão são compartilhados entre objetos?::
* Como passo parâmetros opcionais ou parâmetros nomeados de uma função para outra?::
* Qual a diferença entre argumentos e parâmetros?::
* Por que ao alterar a lista ‘y’ também altera a lista ‘x’?::
* Como escrevo uma função com parâmetros de saída (chamada por referência)?: Como escrevo uma função com parâmetros de saída chamada por referência ?.
* Como fazer uma função de ordem superior em Python?::
* Como faço para copiar um objeto no Python?::
* Como posso encontrar os métodos ou atributos de um objeto?::
* Como que o meu código pode descobrir o nome de um objeto?::
* O que há com a precedência do operador vírgula?::
* Existe um equivalente ao operador ternário “?;” do C?: Existe um equivalente ao operador ternário “? ” do C?.
* É possível escrever instruções de uma só linha ofuscadas em Python?::
* O que a barra(/) na lista de parâmetros de uma função significa?: O que a barra / na lista de parâmetros de uma função significa?.

Números e strings

* Como faço para especificar números inteiros hexadecimais e octais?::
* Por que -22 // 10 retorna -3?::
* Como obtenho um atributo de um literal int em vez de SyntaxError?::
* Como faço para converter uma string em um número?::
* Como faço para converter um número em uma string?::
* Como faço para modificar uma string internamente?::
* Como faço para invocar funções/métodos através de strings?::
* Existe um equivalente em Perl chomp() para remover linhas novas ao final de strings?: Existe um equivalente em Perl chomp para remover linhas novas ao final de strings?.
* Existe uma função scanf() ou sscanf() ou algo equivalente?: Existe uma função scanf ou sscanf ou algo equivalente?.
* O que significa o erro UnicodeDecodeError ou UnicodeEncodeError?::
* Posso terminar uma string bruta com um número ímpar de contrabarras?::

Desempenho

* Meu programa está muito lento. Como faço para melhorar o desempenho?: Meu programa está muito lento Como faço para melhorar o desempenho?.
* Qual é a maneira mais eficiente de concatenar muitas strings?::

Sequencias (Tuplas/Listas)

* Como faço para converter tuplas em listas?::
* O que é um índice negativo?::
* Como que eu itero uma sequência na ordem inversa?::
* Como que removo itens duplicados de uma lista?::
* How do you remove multiple items from a list?::
* Como fazer um vetor em Python?::
* Como faço para criar uma lista multidimensional?::
* Como eu aplico um método ou função para uma sequência de objetos?::
* Porque uma_tupla[i] += [‘item’] levanta uma exceção quando a adição funciona?::
* Quero fazer uma ordenação confusa; você pode fazer uma transformação schwartziana em Python?: Quero fazer uma ordenação confusa você pode fazer uma transformação schwartziana em Python?.
* Como eu posso ordenar uma lista pelos valores de outra lista?::

Objetos

* O que é uma classe?::
* O que é um método?::
* O que é o self?::
* Como eu verifico se um objeto é uma instância de uma dada classe ou de uma subclasse dela?::
* O que é delegação?::
* Como eu chamo um método definido em uma classe base a partir de uma classe derivada que a estende?::
* Como eu posso organizar meu código para facilitar a troca da classe base?::
* Como faço para criar dados de classe estáticos e métodos de classe estáticos?::
* Como eu posso sobrecarregar construtores (ou métodos) em Python?: Como eu posso sobrecarregar construtores ou métodos em Python?.
* Eu tentei usar __spam e recebi um erro sobre _SomeClassName__spam.: Eu tentei usar __spam e recebi um erro sobre _SomeClassName__spam.
* Minha classe define __del__, mas o mesmo não é chamado quando eu excluo o objeto.: Minha classe define __del__ mas o mesmo não é chamado quando eu excluo o objeto.
* Como eu consigo pegar uma lista de todas as instâncias de uma dada classe?::
* Por que o resultado de id() aparenta não ser único?: Por que o resultado de id aparenta não ser único?.
* Quando eu posso depender dos testes de identidade com o operador is?::
* Como uma subclasse pode controlar quais dados são armazenados em uma instância imutável?::
* Como faço para armazenar em cache as chamadas de um método?::

Módulos

* Como faço para criar um arquivo .pyc?: Como faço para criar um arquivo pyc?.
* Como encontro o nome do módulo atual?::
* Como posso ter módulos que se importam mutuamente?::
* __import__(‘x.y.z’) retorna <módulo ‘x’>; como faço para obter z?: __import__ ‘x y z’ retorna <módulo ‘x’>; como faço para obter z?.
* Quando eu edito um módulo importado e o reimporto, as mudanças não aparecem. Por que isso acontece?: Quando eu edito um módulo importado e o reimporto as mudanças não aparecem Por que isso acontece?.

FAQ sobre design e histórico

* Por que o Python usa indentação para agrupamento de instruções?::
* Por que eu estou recebendo resultados estranhos com simples operações aritméticas?::
* Por que o cálculo de pontos flutuantes são tão imprecisos?::
* Por que strings do Python são imutáveis?::
* Por que o ‘self’ deve ser usado explicitamente em definições de método e chamadas?::
* Por que não posso usar uma atribuição em uma expressão?::
* Por que o Python usa métodos para algumas funcionalidades (ex; lista.index()) mas funções para outras (ex; len(lista))?: Por que o Python usa métodos para algumas funcionalidades ex lista index mas funções para outras ex len lista ?.
* Por que o join() é um método de string em vez de ser um método de lista ou tupla?: Por que o join é um método de string em vez de ser um método de lista ou tupla?.
* Quão rápidas são as exceções?::
* Por que não existe uma instrução de switch ou case no Python?::
* Você não pode emular threads no interpretador em vez de confiar em uma implementação de thread específica do sistema operacional?::
* Por que expressões lambda não podem conter instruções?::
* O Python pode ser compilado para linguagem de máquina, C ou alguma outra linguagem?: O Python pode ser compilado para linguagem de máquina C ou alguma outra linguagem?.
* Como o Python gerencia memória?::
* Por que o CPython não usa uma forma mais tradicional de esquema de coleta de lixo?::
* Por que toda memória não é liberada quando o CPython fecha?::
* Por que existem tipos de dados separados para tuplas e listas?::
* Como as listas são implementadas no CPython?::
* Como são os dicionários implementados no CPython?::
* Por que chaves de dicionário devem ser imutáveis?::
* Por que lista.sort() não retorna a lista ordenada?: Por que lista sort não retorna a lista ordenada?.
* Como você especifica e aplica um spec de interface no Python?::
* Por que não há goto?::
* Por que strings brutas (r-strings) não podem terminar com uma contrabarra?: Por que strings brutas r-strings não podem terminar com uma contrabarra?.
* Por que o Python não tem uma instrução “with” para atribuição de atributos?::
* Por que os geradores não suportam a instrução with?::
* Por que dois pontos são necessários para as instruções de if/while/def/class?::
* Por que o Python permite vírgulas ao final de listas e tuplas?::

FAQ de Bibliotecas e Extensões

* Questões gerais sobre bibliotecas::
* Tarefas comuns::
* Threads::
* Entrada e Saída: Entrada e Saída<2>.
* Programação Rede / Internet::
* Base de Dados::
* Matemáticos e Numéricos::

Questões gerais sobre bibliotecas

* Como encontrar um módulo ou aplicação para realizar uma tarefa X?::
* Onde está o código-fonte do math.py (socket.py, regex.py, etc.)?: Onde está o código-fonte do math py socket py regex py etc ?.
* Como tornar um script Python executável no Unix?::
* Existe um pacote de curses/termcap para Python?::
* Existe a função onexit() equivalente ao C no Python?: Existe a função onexit equivalente ao C no Python?.
* Por que o meu manipulador de sinal não funciona?::

Tarefas comuns

* Como testar um programa ou componente Python?::
* Como faço para criar uma documentação de doc strings?::
* Como faço para pressionar uma tecla de cada vez?::

Threads

* Como faço para programar usando threads?::
* Nenhuma de minhas threads parece funcionar, por que?: Nenhuma de minhas threads parece funcionar por que?.
* Como distribuo o trabalho entre várias threads de trabalho?::
* Que tipos de variáveis globais mutáveis são seguras para thread?::
* Não podemos remover a Trava Global do interpretador?::

Entrada e Saída

* Como faço para excluir um arquivo? (E outras perguntas sobre arquivos): Como faço para excluir um arquivo? E outras perguntas sobre arquivos.
* Como eu copio um arquivo?::
* Como leio (ou escrevo) dados binários?: Como leio ou escrevo dados binários?.
* Por que não consigo usar os.read() em um encadeamento com os.popen()?: Por que não consigo usar os read em um encadeamento com os popen ?.
* Como acesso a porta serial (RS232)?: Como acesso a porta serial RS232 ?.
* Por que o sys.stdout (stdin, stderr) não fecha?: Por que o sys stdout stdin stderr não fecha?.

Programação Rede / Internet

* Quais ferramentas para WWW existem no Python?::
* Qual módulo devo usar para ajudar na geração do HTML?::
* Como envio um e-mail de um script Python?::
* Como evito um bloqueio no método connect() de um soquete?: Como evito um bloqueio no método connect de um soquete?.

Base de Dados

* Existem interfaces para banco de dados em Python?::
* Como você implementa objetos persistentes no Python?::

Matemáticos e Numéricos

* Como gero número aleatórios no Python?::

FAQ sobre Extensão/Incorporação

* Posso criar minhas próprias funções em C?::
* Posso criar minhas próprias funções em C++?::
* Escrever C é difícil; há alguma alternativa?::
* Como posso executar instruções arbitrárias de Python a partir de C?::
* Como posso executar e obter o resultado de uma expressão Python arbitrária a partir de C?::
* Como extraio valores em C a partir de um objeto Python?::
* Como posso utilizar Py_BuildValue() para criar uma tupla de comprimento arbitrário?: Como posso utilizar Py_BuildValue para criar uma tupla de comprimento arbitrário?.
* Como eu chamo um método de um objeto a partir do C?::
* Como posso capturar a saída da função PyErr_Print() (ou qualquer outra coisa que escreva para stdout/stderr)?: Como posso capturar a saída da função PyErr_Print ou qualquer outra coisa que escreva para stdout/stderr ?.
* Como faço para acessar a partir do C um módulo escrito em Python?::
* Como posso interagir com objetos C++ a partir do Python?::
* Adicionei um módulo usando o arquivo de Setup e o make falha; por quê?::
* Como eu depuro uma extensão?::
* Quero compilar um módulo Python no meu sistema Linux, mas alguns arquivos estão faltando. Por quê?: Quero compilar um módulo Python no meu sistema Linux mas alguns arquivos estão faltando Por quê?.
* Como posso distinguir “entrada incompleta” de “entrada inválida”?::
* Como encontro os símbolos __builtin_new ou __pure_virtual não-definidos no g++?::
* Posso criar uma classe de objetos com alguns métodos implementados em C e outros em Python (por exemplo, via herança)?: Posso criar uma classe de objetos com alguns métodos implementados em C e outros em Python por exemplo via herança ?.

Python no Windows

* Como faço para executar um programa Python no Windows?::
* Como eu faço para criar programas Python executáveis?::
* Por que Python às vezes demora tanto para iniciar?::
* Como eu faço para criar um executável a partir de um código Python?::
* Um arquivo *.pyd é o mesmo que um DLL?: Um arquivo * pyd é o mesmo que um DLL?.
* Como eu posso embutir Python dentro de uma aplicação do Windows?::
* Como eu impeço editores de adicionarem tabulações na minha source do Python?::
* Como faço para verificar uma tecla pressionada sem bloquear?::
* Como resolvo o erro da api-ms-win-crt-runtime-l1-1-0.dll ausente?: Como resolvo o erro da api-ms-win-crt-runtime-l1-1-0 dll ausente?.

FAQ da Interface Gráfica do Usuário

* Perguntas Gerais sobre a GUI::
* Quais toolkits de GUI existem para o Python?::
* Perguntas do Tkinter::

Perguntas do Tkinter

* Como eu congelo as aplicações Tkinter?::
* Posso ter eventos Tk manipulados enquanto aguardo pelo E/S?::
* Não consigo fazer as ligações de tecla funcionarem no Tkinter; por que?: Não consigo fazer as ligações de tecla funcionarem no Tkinter por que?.

FAD de “Por que o Python está instalado em meu computador?”

* O que é Python?: O que é Python?<2>.
* Porque Python está instalado em minha máquina?::
* Eu posso apagar o Python?::

Descontinuações

* Remoção pendente no Python 3.14: Remoção pendente no Python 3 14<5>.
* Remoção pendente no Python 3.15: Remoção pendente no Python 3 15<5>.
* Remoção pendente no Python 3.16: Remoção pendente no Python 3 16<5>.
* Remoção pendente no Python 3.17: Remoção pendente no Python 3 17<3>.
* Remoção pendente no Python 3.18: Remoção pendente no Python 3 18<2>.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<5>.
* Descontinuações na API C::

Descontinuações na API C

* Remoção pendente no Python 3.14: Remoção pendente no Python 3 14<6>.
* Remoção pendente no Python 3.15: Remoção pendente no Python 3 15<6>.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<6>.

Sobre esta documentação

* Contribuidores da documentação do Python::

Lidando com bugs

* Bugs na documentação::
* Usando o rastreador de problemas do Python::
* Começando a contribuir com o Python por conta própria::

História e Licença

* História do software::
* Termos e condições para acessar ou usar Python::
* Licenças e Reconhecimentos para Software Incorporado::

Termos e condições para acessar ou usar Python

* PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2::
* ACORDO DE LICENCIAMENTO DA BEOPEN.COM PARA PYTHON 2.0: ACORDO DE LICENCIAMENTO DA BEOPEN COM PARA PYTHON 2 0.
* CONTRATO DE LICENÇA DA CNRI PARA O PYTHON 1.6.1: CONTRATO DE LICENÇA DA CNRI PARA O PYTHON 1 6 1.
* ACORDO DE LICENÇA DA CWI PARA PYTHON 0.9.0 A 1.2: ACORDO DE LICENÇA DA CWI PARA PYTHON 0 9 0 A 1 2.
* ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION::

Licenças e Reconhecimentos para Software Incorporado

* Mersenne Twister::
* Soquetes: Soquetes<2>.
* Serviços de soquete assíncrono::
* Gerenciamento de cookies::
* Rastreamento de execução::
* Funções UUencode e UUdecode::
* Chamadas de procedimento remoto XML::
* test_epoll::
* kqueue de seleção::
* SipHash24::
* strtod e dtoa::
* OpenSSL: OpenSSL<2>.
* expat::
* libffi::
* zlib: zlib<3>.
* cfuhash::
* libmpdec::
* Conjunto de testes C14N do W3C::
* mimalloc::
* asyncio: asyncio<12>.
* Global Unbounded Sequences (GUS): Global Unbounded Sequences GUS.



File: python.info,  Node: O que há de novo no Python,  Next: O tutorial do Python,  Prev: Top,  Up: Top

1 O que há de novo no Python
****************************

A série “O que há de novo no Python” é uma série de ensaios que nos guia
através das mudanças mais importantes entre as principais versões do
Python.  Ela é imprescindível para aqueles que desejam manter-se
atualizados a cada novo lançamento.

* Menu:

* O que há de novo no Python 3.13: O que há de novo no Python 3 13.
* O que há de novo no Python 3.12: O que há de novo no Python 3 12.
* O que há de novo no Python 3.11: O que há de novo no Python 3 11.
* O que há de novo no Python 3.10: O que há de novo no Python 3 10.
* O que há de novo no Python 3.9: O que há de novo no Python 3 9.
* O que há de novo no Python 3.8: O que há de novo no Python 3 8.
* O que há de novo no Python 3.7: O que há de novo no Python 3 7.
* What’s New In Python 3.6: What’s New In Python 3 6.
* O que há de novo no Python 3.5: O que há de novo no Python 3 5.
* O que há de novo no Python 3.4: O que há de novo no Python 3 4.
* O que há de novo no Python 3.3: O que há de novo no Python 3 3.
* O que há de novo no Python 3.2: O que há de novo no Python 3 2.
* O que há de novo no Python 3.1: O que há de novo no Python 3 1.
* O que há de novo no Python 3.0: O que há de novo no Python 3 0.
* O que há de novo no Python 2.7: O que há de novo no Python 2 7.
* O que há de novo no Python 2.6: O que há de novo no Python 2 6.
* What’s New in Python 2.5: What’s New in Python 2 5.
* What’s New in Python 2.4: What’s New in Python 2 4.
* What’s New in Python 2.3: What’s New in Python 2 3.
* What’s New in Python 2.2: What’s New in Python 2 2.
* What’s New in Python 2.1: What’s New in Python 2 1.
* What’s New in Python 2.0: What’s New in Python 2 0.
* Changelog::


File: python.info,  Node: O que há de novo no Python 3 13,  Next: O que há de novo no Python 3 12,  Up: O que há de novo no Python

1.1 O que há de novo no Python 3.13
===================================


Editores: Adam Turner e Thomas Wouters

Este artigo explica os novos recursos no Python 3.13, em comparação com
3.12.  Python 3.13 foi lançado em 7 de outubro de 2024.  Veja *note
changelog: 13c. para uma lista completa de mudanças.

Ver também
..........

PEP 719(1) – Cronograma de lançamento do Python 3.13

* Menu:

* Resumo – Destaques da versão::
* Novas funcionalidades::
* Outras mudanças na linguagem::
* Novos módulos::
* Módulos melhorados::
* Otimizações::
* Módulos e APIs removidas::
* Novas descontinuações::
* Alterações de bytecode do CPython::
* Alterações na API C::
* Mudanças na construção::
* Portando para o Python 3.13: Portando para o Python 3 13.
* Mudanças em teste de regressão::
* Alterações notáveis no 3.13.1: Alterações notáveis no 3 13 1.
* Alterações notáveis no 3.13.4: Alterações notáveis no 3 13 4.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0719/


File: python.info,  Node: Resumo – Destaques da versão,  Next: Novas funcionalidades,  Up: O que há de novo no Python 3 13

1.1.1 Resumo – Destaques da versão
----------------------------------

O Python 3.13 é a versão estável mais recente da linguagem de
programação Python, com uma mistura de mudanças na linguagem, na
implementação e na biblioteca padrão.  As maiores mudanças incluem um
novo *note interpretador interativo: 13e, suporte experimental para
execução em um *note modo de threads livres: 13f. ( PEP 703(1)) e um
*note compilador Just-In-Time: 140. ( PEP 744(2)).

As mensagens de erro continuam a melhorar, com tracebacks (situação da
pilha de execução) agora realçados em cores por padrão.  A função
embutida *note locals(): 141. agora tem *note semânticas definidas: 142.
para alterar o mapeamento retornado, e os parâmetros de tipo agora
oferecem suporte a valores padrão.

As alterações da biblioteca contêm a remoção de APIs e módulos
descontinuados, bem como as melhorias usuais em facilidade de uso e
correção.  Vários módulos da biblioteca padrão legados agora *note foram
removidos: 143. após sua descontinuação no Python 3.11 ( PEP 594(3)).

Este artigo não tenta fornecer uma especificação completa de todos os
novos recursos, mas fornece uma visão geral conveniente.  Para detalhes
completos, consulte a documentação, como *note Referência da Biblioteca:
144. e *note Referência da Linguagem: 145.  Para entender a
implementação completa e a justificativa do design para uma mudança,
consulte a PEP para um novo recurso específico; mas observe que as PEPs
geralmente não são mantidas atualizadas depois que um recurso é
totalmente implementado.  Veja *note Portando para o Python 3.13: 146.
para orientação sobre atualização a partir de versões anteriores do
Python.

__________________________________________________________________

Melhorias no interpretador:

   * Um *note interpretador interativo: 13e. bastante aprimorado e *note
     mensagens de erro aprimoradas: 147.

   * PEP 667(4): a função embutida *note locals(): 141. agora tem *note
     semântica definida: 142. ao fazer a mutação do mapeamento
     retornado.  Os depuradores do Python e ferramentas semelhantes
     agora podem atualizar variáveis locais de maneira mais confiável em
     escopos otimizados, mesmo durante a execução simultânea de código.

   * PEP 703(5): CPython 3.13 tem suporte experimental para ser
     executado com a *note trava global do interpretador: 148, ou GIL,
     desabilitada.  Veja *note CPython com threads livres: 13f. para
     mais detalhes.

   * PEP 744(6): um *note compilador JIT: 140. básico foi adicionado.
     Atualmente está desativado por padrão (embora possamos ativá-lo
     mais tarde).  As melhorias de desempenho são modestas – esperamos
     melhorar isso nas próximas versões.

   * Suporte a cores no novo *note interpretador interativo: 13e, bem
     como na saída de *note tracebacks: 147. e de *note doctest: 149.
     Isso pode ser desabilitado através das variáveis de ambiente *note
     PYTHON_COLORS: 14a. e NO_COLOR(7).

Melhorias no modelo de dados Python:

   * *note __static_attributes__: 14b. armazena os nomes dos atributos
     acessados por meio de ‘self.X’ em qualquer função no corpo da
     classe.

   * *note __firstlineno__: 14c. registra o número da primeira linha da
     definição de classe.

Melhorias significativas na biblioteca padrão:

   * Adiciona uma nova exceção *note PythonFinalizationError: 14d,
     levantada quando uma operação é bloqueada durante a *note
     finalização: 14e.

   * O módulo *note argparse: 6. agora oferece suporte a descontinuar
     opções de linha de comando, argumentos posicionais e subcomandos.

   * As novas funções *note base64.z85encode(): 14f. e *note
     base64.z85decode(): 150. oferecem suporte à codificação e
     decodificação de dados Z85(8).

   * O módulo *note copy: 25. agora tem uma função *note copy.replace():
     151, com suporte para muitos tipos embutidos e qualquer classe que
     defina o método *note __replace__(): 152.

   * O novo módulo *note dbm.sqlite3: 35. agora é o backend *note dbm:
     31. padrão.

   * O módulo *note os: a1. tem um *note conjunto de novas funções: 153.
     para trabalhar com os descritores de arquivo de notificação de
     temporizador do Linux.

   * O módulo *note random: b8. agora tem uma *note interface de linha
     de comando: 154.

Melhorias de Segurança:

   * *note ssl.create_default_context(): 155. define *note
     ssl.VERIFY_X509_PARTIAL_CHAIN: 156. e *note ssl.VERIFY_X509_STRICT:
     157. como sinalizadores padrão.

Melhorias na API C:

   * O slot *note Py_mod_gil: 158. agora é usado para indicar que um
     módulo de extensão oferece suporte à execução com a *note GIL: 159.
     desabilitada.

   * A *note API C PyTime: 15a. foi adicionada, fornecendo acesso aos
     relógios do sistema.

   * *note PyMutex: 15b. é um novo mutex leve que ocupa um único byte.

   * Há um novo *note conjunto de funções: 15c. para gerar eventos de
     monitoramento da PEP 669(9) na API C.

Novos recursos de tipagem:

   * PEP 696(10): parâmetros de tipo (*note typing.TypeVar: 15d, *note
     typing.ParamSpec: 15e. e *note typing.TypeVarTuple: 15f.) agora
     oferecem suporte a valores padrão.

   * PEP 702(11): o novo decorador *note warnings.deprecated(): 160.
     adiciona suporte para marcar descontinuações no sistema de tipos e
     ambiente de execução.

   * PEP 705(12): *note typing.ReadOnly: 161. pode ser usado para marcar
     um item de *note typing.TypedDict: 162. como somente leitura para
     verificadores de tipo.

   * PEP 742(13): *note typing.TypeIs: 163. fornece um comportamento de
     estreitamento de tipo mais intuitivo, como uma alternativa ao *note
     typing.TypeGuard: 164.

Suporte à plataforma:

   * PEP 730(14): iOS da Apple agora é uma *note plataforma oficialmente
     com suporte: 165, no tier 3(15).

   * PEP 738(16): Android é agora uma *note plataforma oficialmente com
     suporte: 165, no tier 3(17).

   * ‘wasm32-wasi’ agora é uma plataforma com suporte tier 2(18).

   * ‘wasm32-emscripten’ não é mais uma plataforma oficialmente com
     suporte.

Remoções importantes:

   * *note PEP 594: 143.: as 19 “baterias descarregadas” (módulos
     legados da biblioteca padrão) restantes foram removidas da
     biblioteca padrão: ‘aifc’, ‘audioop’, ‘cgi’, ‘cgitb’, ‘chunk’,
     ‘crypt’, ‘imghdr’, ‘mailcap’, ‘msilib’, ‘nis’, ‘nntplib’,
     ‘ossaudiodev’, ‘pipes’, ‘sndhdr’, ‘spwd’, ‘sunau’, ‘telnetlib’,
     ‘uu’ e ‘xdrlib’.

   * Remove a ferramenta ‘2to3’ e o módulo ‘lib2to3’ (descontinuados no
     Python 3.11).

   * Remove o módulo ‘tkinter.tix’ (descontinuado no Python 3.6).

   * Remove a função ‘locale.resetlocale()’.

   * Remove os espaços de nomes ‘typing.io’ e ‘typing.re’.

   * Remove descritores encadeados de *note classmethod: 166.

Mudanças no cronograma de lançamento:

PEP 602(19) (“Ciclo de Lançamento Anual para Python”) foi atualizado
para estender o período de suporte total (“bugfix”) para novos
lançamentos para dois anos.  Esta política atualizada significa que:

   * O Python 3.9–3.12 tem um ano e meio de suporte total, seguido por
     três anos e meio de correções de segurança.

   * Python 3.13 e posteriores têm dois anos de suporte total, seguidos
     de três anos de correções de segurança.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0703/

   (2) https://peps.python.org/pep-0744/

   (3) https://peps.python.org/pep-0594/

   (4) https://peps.python.org/pep-0667/

   (5) https://peps.python.org/pep-0703/

   (6) https://peps.python.org/pep-0744/

   (7) https://no-color.org/

   (8) https://rfc.zeromq.org/spec/32/

   (9) https://peps.python.org/pep-0669/

   (10) https://peps.python.org/pep-0696/

   (11) https://peps.python.org/pep-0702/

   (12) https://peps.python.org/pep-0705/

   (13) https://peps.python.org/pep-0742/

   (14) https://peps.python.org/pep-0730/

   (15) https://peps.python.org/pep-0011/#tier-3

   (16) https://peps.python.org/pep-0738/

   (17) https://peps.python.org/pep-0011/#tier-3

   (18) https://peps.python.org/pep-0011/#tier-2

   (19) https://peps.python.org/pep-0602/


File: python.info,  Node: Novas funcionalidades,  Next: Outras mudanças na linguagem,  Prev: Resumo – Destaques da versão,  Up: O que há de novo no Python 3 13

1.1.2 Novas funcionalidades
---------------------------

* Menu:

* Um melhor interpretador interativo::
* Mensagens de erro melhoradas::
* CPython com threads livres::
* Um compilador just-in-time (JIT) experimental: Um compilador just-in-time JIT experimental.
* Definidas semânticas de mutação para locals(): Definidas semânticas de mutação para locals.
* Suporte para plataformas móveis::


File: python.info,  Node: Um melhor interpretador interativo,  Next: Mensagens de erro melhoradas,  Up: Novas funcionalidades

1.1.2.1 Um melhor interpretador interativo
..........................................

Python agora usa um novo console *note interativo: 169. por padrão, com
base no código do projeto PyPy(1).  Quando o usuário inicia o *note
REPL: 16a. de um terminal interativo, agora os seguintes novos recursos
estão disponíveis:

   * Edição multilinha com preservação do histórico.

   * Suporte direto para comandos específicos do REPL, como ‘help’,
     ‘exit’ e ‘quit’, sem a necessidade de chamá-los como funções.

   * Prompts e tracebacks com *note cores habilitadas por padrão: 16b.

   * Ajuda interativa para navegar usando ‘F1’ com um histórico de
     comandos separado.

   * Navegação no histórico usando ‘F2’ que ignora a saída, bem como os
     prompts *note >>>: 16c. e *note …: 16d.

   * “Modo de colagem” com ‘F3’ que facilita colar blocos de código
     maiores (pressione ‘F3’ novamente para retornar ao prompt normal).

Para desabilitar o novo console interativo, defina a variável de
ambiente *note PYTHON_BASIC_REPL: 16e.  Para mais informações sobre o
modo interativo, veja *note Modo interativo: 16f.

(Contribuição de Pablo Galindo Salgado, Łukasz Langa e Lysandros
Nikolaou em gh-111201(2) baseado no código do projeto PyPy.  Suporte ao
Windows foi uma contribuição de Dino Viehland e Anthony Shaw.)

   ---------- Footnotes ----------

   (1) https://pypy.org/

   (2) https://github.com/python/cpython/issues/111201


File: python.info,  Node: Mensagens de erro melhoradas,  Next: CPython com threads livres,  Prev: Um melhor interpretador interativo,  Up: Novas funcionalidades

1.1.2.2 Mensagens de erro melhoradas
....................................

   * O interpretador agora usa cores por padrão ao exibir tracebacks no
     terminal.  Este recurso *note pode ser controlado: 16b. por meio da
     nova variável de ambiente *note PYTHON_COLORS: 14a, bem como das
     variáveis de ambiente canônicas NO_COLOR(1) e FORCE_COLOR(2).
     (Contribuição de Pablo Galindo Salgado em gh-112730(3).)

   * Um erro comum é escrever um script com o mesmo nome de um módulo de
     biblioteca padrão.  Quando isso resulta em erros, agora exibimos
     uma mensagem de erro mais útil:

          $ python random.py
          Traceback (most recent call last):
            File "/home/me/random.py", line 1, in <module>
              import random
            File "/home/me/random.py", line 3, in <module>
              print(random.randint(5))
                    ^^^^^^^^^^^^^^
          AttributeError: module 'random' has no attribute 'randint' (consider renaming '/home/me/random.py' since it has the same name as the standard library module named 'random' and prevents importing that standard library module)

     Da mesma forma, se um script tiver o mesmo nome de um módulo de
     terceiros que ele tentar importar e isso resultar em erros, também
     exibiremos uma mensagem de erro mais útil:

          $ python numpy.py
          Traceback (most recent call last):
            File "/home/me/numpy.py", line 1, in <module>
              import numpy as np
            File "/home/me/numpy.py", line 3, in <module>
              np.array([1, 2, 3])
              ^^^^^^^^
          AttributeError: module 'numpy' has no attribute 'array' (consider renaming '/home/me/numpy.py' if it has the same name as a library you intended to import)

     (Contribuição de Shantanu Jain em gh-95754(4).)

   * A mensagem de erro agora tenta sugerir o argumento nomeado correto
     quando um argumento nomeado incorreto é passado para uma função.

          >>> "Better error messages!".split(max_split=1)
          Traceback (most recent call last):
            File "<python-input-0>", line 1, in <module>
              "Better error messages!".split(max_split=1)
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^
          TypeError: split() got an unexpected keyword argument 'max_split'. Did you mean 'maxsplit'?

     (Contribuição de Pablo Galindo Salgado e Shantanu Jain em
     gh-107944(5).)

   ---------- Footnotes ----------

   (1) https://no-color.org/

   (2) https://force-color.org/

   (3) https://github.com/python/cpython/issues/112730

   (4) https://github.com/python/cpython/issues/95754

   (5) https://github.com/python/cpython/issues/107944


File: python.info,  Node: CPython com threads livres,  Next: Um compilador just-in-time JIT experimental,  Prev: Mensagens de erro melhoradas,  Up: Novas funcionalidades

1.1.2.3 CPython com threads livres
..................................

O CPython agora tem suporte experimental para execução em modo de
threads livres, com a *note trava global do interpretador: 148. (GIL)
desabilitada.  Este é um recurso experimental e, portanto, não é
habilitado por padrão.  O modo de threads livres requer um executável
diferente, geralmente chamado de ‘python3.13t’ ou ‘python3.13t.exe’.
Binários pré-construídos marcados como 'free-threaded' podem ser
instalados como parte dos instaladores oficiais *note Windows: 172. e
*note macOS: 173, ou o CPython pode ser construído a partir da fonte com
a opção *note -disable-gil: 174.

A execução de threads livres permite a utilização total do poder de
processamento disponível ao executar threads em paralelo nos núcleos de
CPU disponíveis.  Embora nem todos os softwares se beneficiem disso
automaticamente, programas projetados com threading em mente serão
executados mais rapidamente em hardware multi-core.  'O modo de threads
livres é experimental' e o trabalho está em andamento para melhorá-lo:
espere alguns bugs e um impacto substancial no desempenho de thread
único.  As construções com threads livres do CPython oferecem suporte à
execução opcional com a GIL habilitada no tempo de execução usando a
variável de ambiente *note PYTHON_GIL: 175. ou a opção de linha de
comando *note -X gil=1: 176.

Para verificar se o interpretador atual oferece suporte a threads
livres, *note python -VV: 177. e *note sys.version: 178. contêm
“experimental free-threading build”.  A nova função
‘sys._is_gil_enabled()’ pode ser usada para verificar se a GIL está
realmente desabilitada no processo em execução.

Os módulos de extensão da API C precisam ser construídos especificamente
para a construção com threads livres.  Extensões que oferecem suporte à
execução com *note GIL: 159. desabilitada devem usar o slot *note
Py_mod_gil: 158.  Extensões que usam inicialização monofásica devem usar
*note PyUnstable_Module_SetGIL(): 179. para indicar se oferecem suporte
à execução com a GIL desabilitada.  A importação de extensões C que não
usam esses mecanismos fará com que a GIL seja habilitada, a menos que a
GIL tenha sido explicitamente desabilitada com a variável de ambiente
*note PYTHON_GIL: 175. ou a opção *note -X gil=0: 176.  pip 24.1 ou mais
recentes é necessário para instalar pacotes com extensões C na
construção com threads livres.

Este trabalho foi possível graças a muitos indivíduos e organizações,
incluindo a grande comunidade de colaboradores do Python e projetos de
terceiros para testar e habilitar o suporte para threads livres.
Colaboradores notáveis incluem: Sam Gross, Ken Jin, Donghee Na, Itamar
Oren, Matt Page, Brett Simmers, Dino Viehland, Carl Meyer, Nathan
Goldbaum, Ralf Gommers, Lysandros Nikolaou e muitos outros.  Muitos
desses colaboradores são empregados pela Meta, que forneceu recursos de
engenharia significativos para dar suporte a este projeto.

Ver também
..........

PEP 703(1) “Tornando a trava global do interpretador opcional no
CPython” contém justificativa e informações sobre este trabalho.

Portando módulos de extensão para oferecer suporte a threads livres(2):
um guia de portabilidade mantido pela comunidade para autores de
extensões.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0703/

   (2) https://py-free-threading.github.io/porting/


File: python.info,  Node: Um compilador just-in-time JIT experimental,  Next: Definidas semânticas de mutação para locals,  Prev: CPython com threads livres,  Up: Novas funcionalidades

1.1.2.4 Um compilador just-in-time (JIT) experimental
.....................................................

Quando o CPython é configurado e construído usando a opção
‘--enable-experimental-jit’, um compilador just-in-time (JIT) é
adicionado, o que pode acelerar alguns programas Python.  No Windows,
use ‘PCbuild/build.bat --experimental-jit’ para habilitar o JIT ou
‘--experimental-jit-interpreter’ para habilitar o interpretador Tier 2.
Os requisitos de construção e outras informações de suporte estão
contidos em(1) ‘Tools/jit/README.md’.

A opção ‘--enable-experimental-jit’ aceita esses valores (opcionais),
assumindo como padrão ‘yes’ se ‘--enable-experimental-jit’ estiver
presente sem o valor opcional.

   * ‘no’: desativa todo o pipeline de Tier 2 e JIT.

   * ‘yes’: habilita o JIT. Para desabilitar o JIT em tempo de execução,
     passe a variável de ambiente *note PYTHON_JIT=0: 17b.

   * ‘yes-off’: constrói o JIT, mas desabilita-o por padrão.  Para
     habilitar o JIT em tempo de execução, passe a variável de ambiente
     *note PYTHON_JIT=1: 17b.

   * ‘interpreter’: habilita o interpretador Tier 2, mas desabilita o
     JIT. O interpretador pode ser desabilitado executando com *note
     PYTHON_JIT=0: 17b.

A arquitetura interna é aproximadamente a seguinte:

   * Começamos com especializado 'bytecode de Tier 1'.  Veja *note O que
     há de novo no 3.11: 17c. para detalhes.

   * Quando o bytecode Tier 1 fica quente o suficiente, ele é traduzido
     para uma nova representação intermediária (IR) puramente interna,
     também chamado de 'IR Tier 2', e às vezes chamada de micro-ops
     (“uops”).

   * O IR Tier 2 usa a mesma máquina virtual baseada em pilha que o Tier
     1, mas o formato de instrução é mais adequado para tradução em
     código de máquina.

   * Temos vários passes de otimização para IR Tier 2, que são aplicados
     antes de serem interpretados ou traduzidos em código de máquina.

   * Existe um interpretador de Tier 2, mas ele se destina
     principalmente à depuração dos estágios iniciais do pipeline de
     otimização.  O interpretador Tier 2 pode ser habilitado
     configurando o Python com ‘--enable-experimental-jit=interpreter’.

   * Quando o JIT está habilitado, o IR Tier 2 otimizado é traduzido em
     código de máquina, que é então executado.

   * O processo de tradução de código de máquina usa uma técnica chamada
     'copiar e corrigir'.  Não possui dependências de tempo de execução,
     mas há uma nova dependência de tempo de construção no LLVM.

Ver também
..........

PEP 744(2)

(JIT de Brandt Bucher, inspirado em um artigo de Haoran Xu e Fredrik
Kjolstad.  Tier 2 IR de Mark Shannon e Guido van Rossum.  Otimizador
Tier 2 de Ken Jin.)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/blob/main/Tools/jit/README.md

   (2) https://peps.python.org/pep-0744/


File: python.info,  Node: Definidas semânticas de mutação para locals,  Next: Suporte para plataformas móveis,  Prev: Um compilador just-in-time JIT experimental,  Up: Novas funcionalidades

1.1.2.5 Definidas semânticas de mutação para ‘locals()’
.......................................................

Historicamente, o resultado esperado da mutação do valor de retorno de
*note locals(): 141. foi deixada para as implementações individuais de
Python definirem.  A partir do Python 3.13, PEP 667(1) padroniza o
comportamento histórico do CPython para a maioria dos escopos de
execução de código, mas altera *note escopos otimizados: 17e. (funções,
geradores, corrotinas, compreensões e expressões geradoras) para
retornar explicitamente instantâneos independentes das variáveis locais
atualmente atribuídas, incluindo variáveis não locais referenciadas
localmente capturadas em encerramentos.

Esta mudança na semântica de *note locals(): 141. em escopos otimizados
também afeta o comportamento padrão das funções de execução de código
que visam implicitamente ‘locals()’ se nenhum espaço de nomes explícito
for fornecido (como *note exec(): 17f. e *note eval(): 180.).  Nas
versões anteriores, se as alterações podiam ou não ser acessadas
chamando ‘locals()’ após chamar a função de execução de código dependia
da implementação.  Especificamente no CPython, esse código normalmente
parece funcionar conforme desejado, mas às vezes pode falhar em escopos
otimizados com base em outro código (incluindo depuradores e ferramentas
de rastreamento de execução de código), redefinindo potencialmente o
instantâneo compartilhado nesse escopo.  Agora, o código sempre será
executado em um instantâneo independente das variáveis locais em escopos
otimizados e, portanto, as alterações nunca serão visíveis em chamadas
subsequentes para ‘locals()’.  Para acessar as alterações feitas nesses
casos, uma referência explícita de espaço de nomes deve agora ser
passada para a função relevante.  Alternativamente, pode fazer sentido
atualizar o código afetado para usar uma API de execução de código de
nível mais alto que retorne o espaço de nomes de execução de código
resultante (por exemplo, *note runpy.run_path(): 181. ao executar
arquivos Python do disco).

Para garantir que depuradores e ferramentas semelhantes possam atualizar
de forma confiável variáveis locais em escopos afetados por esta
mudança, *note FrameType.f_locals: 182. agora retorna um proxy
write-through para as variáveis locais e não locais referenciadas
localmente do quadro nesses escopos, em vez de retornar uma instância
‘dict’ compartilhada atualizada inconsistentemente com semântica de
tempo de execução indefinida.

Veja PEP 667(2) para mais detalhes, incluindo alterações e
descontinuações relacionadas à API C. Notas de portabilidade também são
fornecidas abaixo para as *note APIs de Python: 183. e as *note APIs de
C: 184. afetadas.

(PEP e implementação são contribuição de Mark Shannon e Tian Gao em
gh-74929(3).  Atualizações da documentação fornecidas por Guido van
Rossum e Alyssa Coghlan.)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0667/

   (2) https://peps.python.org/pep-0667/

   (3) https://github.com/python/cpython/issues/74929


File: python.info,  Node: Suporte para plataformas móveis,  Prev: Definidas semânticas de mutação para locals,  Up: Novas funcionalidades

1.1.2.6 Suporte para plataformas móveis
.......................................

PEP 730(1): iOS agora é uma plataforma com suporte conforme a PEP 11(2),
com os alvos ‘arm64-apple-ios’ e ‘arm64-apple-ios-simulator’ no nível 3
(dispositivos iPhone e iPad lançados após 2013 e o simulador Xcode iOS
sendo executado em hardware Apple Silicon, respectivamente).
‘x86_64-apple-ios-simulator’ (o simulador Xcode iOS sendo executado em
hardware ‘x86_64’ mais antigo) não é uma plataforma com suporte nível 3,
mas terá o melhor suporte possível.  (PEP escrita e implementação como
contribuição de Russell Keith-Magee em gh-114099(3).)

PEP 738(4): Android agora é uma plataforma com suporte conforme a PEP
11(5), com os alvos ‘aarch64-linux-android’ e ‘x86_64-linux-android’ no
nível 3.  Os alvos de 32 bits ‘arm-linux-androideabi’ e
‘i686-linux-android’ não são plataformas com suporte de nível 3, mas
terão o melhor suporte possível.  (PEP escrita e implementação como
contribuição de Malcolm Smith em gh-116622(6).)

Ver também
..........

PEP 730(7), PEP 738(8)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0730/

   (2) https://peps.python.org/pep-0011/

   (3) https://github.com/python/cpython/issues/114099

   (4) https://peps.python.org/pep-0738/

   (5) https://peps.python.org/pep-0011/

   (6) https://github.com/python/cpython/issues/116622

   (7) https://peps.python.org/pep-0730/

   (8) https://peps.python.org/pep-0738/


File: python.info,  Node: Outras mudanças na linguagem,  Next: Novos módulos,  Prev: Novas funcionalidades,  Up: O que há de novo no Python 3 13

1.1.3 Outras mudanças na linguagem
----------------------------------

   * O compilador agora remove espaços em branco comuns de cada linha em
     uma docstring.  Isso reduz o tamanho do *note cache de bytecode:
     187. (como arquivos ‘.pyc’), com reduções no tamanho do arquivo de
     cerca de 5%, por exemplo, em ‘sqlalchemy.orm.session’ do SQLAlchemy
     2.0.  Essa alteração afeta ferramentas que usam docstrings, como
     *note doctest: 3a.

          >>> def spam():
          ...     """
          ...         Esta é uma docstring com
          ...           espaços em branco no começo.
          ...
          ...         Ela atém mesmo tem vários parágrafos!
          ...     """
          ...
          >>> spam.__doc__
          '\n\nEsta é uma docstring com\n\n espaços em branco no começo.\n\n\nEla atém mesmo tem vários parágrafos!\n\n'

     (Contribuição de Inada Naoki em gh-81283(1).)

   * *note Escopos de anotação: 188. dentro dos escopos de classe agora
     pode conter lambdas e compreensões.  As compreensões localizadas
     nos escopos de classe não são incorporadas ao escopo pai.

          class C[T]:
              type Alias = lambda: T

     (Contribuição de Jelle Zijlstra em gh-109118(2) e gh-118160(3).)

   * *note Instruções future: 189. não são mais acionadas por
     importações relativas do módulo *note __future__: 0, o que
     significa que instruções no formato ‘from .__future__ import ...’
     agora são simplesmente importações relativas padrão, sem recursos
     especiais ativados.  (Contribuição de Jeremiah Gabriel Pascual em
     gh-118216(4).)

   * Declarações *note global: 18a. agora são permitidas em blocos *note
     except: 18b. quando esse global é usado no bloco *note else: 18c.
     Anteriormente, isso erroneamente levantava uma exceção *note
     SyntaxError: 18d.  (Contribuição de Irit Katriel em gh-111123(5).)

   * Adiciona *note PYTHON_FROZEN_MODULES: 18e, uma nova variável de
     ambiente que determina se os módulos congelados são ignorados pelo
     maquinário de importação, equivalente à opção de linha de comando
     *note -X frozen_modules: 176.  (Contribuição de Yilei Yang em
     gh-111374(6).)

   * Adicionado *note suporte ao perfilador perf: 18f. funcionando sem
     ponteiros de quadro(7) através da nova variável de ambiente *note
     PYTHON_PERF_JIT_SUPPORT: 190. e opção de linha de comando *note -X
     perf_jit: 176.  (Contribuição de Pablo Galindo em gh-118518(8).)

   * A localização de um arquivo ‘.python_history’ pode ser alterada por
     meio da nova variável de ambiente *note PYTHON_HISTORY: 191.
     (Contribuição de Levi Sabah, Zackery Spytz e Hugo van Kemenade em
     gh-73965(9).)

   * As classes têm um novo atributo *note __static_attributes__: 14b.
     Isso é preenchido pelo compilador, com uma tupla de nomes de
     atributos da classe que são atribuídos através de ‘self.<name>’ de
     qualquer função em seu corpo.  (Contribuição de Irit Katriel em
     gh-115775(10).)

   * O compilador agora cria um atributo ‘__firstlineno__’ em classes
     com o número da primeira linha da definição de classe.
     (Contribuição de Serhiy Storchaka em gh-118465(11).)

   * As funções embutidas *note exec(): 17f. e *note eval(): 180. agora
     aceitam os argumentos 'globals' e 'locals' como nomeados.
     (Contribuição de Raphael Gaschignard em gh-105879(12))

   * A função embutida *note compile(): 192. agora aceita um novo
     sinalizador, ‘ast.PyCF_OPTIMIZED_AST’, que é semelhante a
     ‘ast.PyCF_ONLY_AST’ exceto que a AST retornada é otimizada de
     acordo com o valor do argumento 'optimize'.  (Contribuição de Irit
     Katriel em gh-108113(13)).

   * Adiciona um atributo *note __name__: 193. em objetos *note
     property: 194.  (Contribuição de Eugene Toder em gh-101860(14).)

   * Adiciona *note PythonFinalizationError: 14d, uma nova exceção
     derivada de *note RuntimeError: 195. e usada para sinalizar quando
     as operações são bloqueadas durante a *note finalização: 14e.  Os
     seguintes chamáveis agora levantam ‘PythonFinalizationError’, em
     vez de *note RuntimeError: 195.:

        * *note _thread.start_new_thread(): 196.

        * *note os.fork(): 197.

        * *note os.forkpty(): 198.

        * *note subprocess.Popen: 199.

     (Contribuição de Victor Stinner em gh-114570(15).)

   * Permite que o argumento 'count' de *note str.replace(): 19a. seja
     um argumento nomeado.  (Contribuição de Hugo van Kemenade em
     gh-106487(16).)

   * Muitas funções agora emitem um aviso se um valor booleano for
     passado como argumento do descritor de arquivo.  Isso pode ajudar a
     detectar alguns erros mais cedo.  (Contribuição de Serhiy Storchaka
     em gh-82626(17).)

   * Adicionados atributos ‘name’ e ‘mode’ para objetos arquivo ou
     similares compactados e arquivados nos módulos *note bz2: 13, *note
     lzma: 8a, *note tarfile: de. e *note zipfile: 131.  (Contribuição
     de Serhiy Storchaka em gh-115961(18).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/81283

   (2) https://github.com/python/cpython/issues/109118

   (3) https://github.com/python/cpython/issues/118160

   (4) https://github.com/python/cpython/issues/118216

   (5) https://github.com/python/cpython/issues/111123

   (6) https://github.com/python/cpython/issues/111374

   (7) https://pt.wikipedia.org/wiki/Pilha_de_chamada

   (8) https://github.com/python/cpython/issues/118518

   (9) https://github.com/python/cpython/issues/73965

   (10) https://github.com/python/cpython/issues/115775

   (11) https://github.com/python/cpython/issues/118465

   (12) https://github.com/python/cpython/issues/105879

   (13) https://github.com/python/cpython/issues/108113

   (14) https://github.com/python/cpython/issues/101860

   (15) https://github.com/python/cpython/issues/114570

   (16) https://github.com/python/cpython/issues/106487

   (17) https://github.com/python/cpython/issues/82626

   (18) https://github.com/python/cpython/issues/115961


File: python.info,  Node: Novos módulos,  Next: Módulos melhorados,  Prev: Outras mudanças na linguagem,  Up: O que há de novo no Python 3 13

1.1.4 Novos módulos
-------------------

   * *note dbm.sqlite3: 35.: um backend SQLite para *note dbm: 31.
     (Contribuição de Raymond Hettinger e Erlend E. Aasland em
     gh-100414(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100414


File: python.info,  Node: Módulos melhorados,  Next: Otimizações,  Prev: Novos módulos,  Up: O que há de novo no Python 3 13

1.1.5 Módulos melhorados
------------------------

* Menu:

* argparse::
* array::
* ast::
* asyncio::
* base64::
* compileall::
* concurrent.futures: concurrent futures.
* configparser::
* copy::
* ctypes::
* dbm::
* dis::
* doctest::
* email::
* enum::
* fractions::
* glob::
* importlib::
* io::
* ipaddress::
* itertools::
* marshal::
* math::
* mimetypes::
* mmap::
* multiprocessing::
* os::
* os.path: os path.
* pathlib::
* pdb::
* queue::
* random::
* re::
* shutil::
* site::
* sqlite3::
* ssl::
* statistics::
* subprocess::
* sys::
* tempfile::
* time::
* tkinter::
* traceback::
* types::
* typing::
* unicodedata::
* venv::
* avisos::
* xml::
* zipimport::


File: python.info,  Node: argparse,  Next: array,  Up: Módulos melhorados

1.1.5.1 argparse
................

   * Adiciona o parâmetro 'deprecated' aos métodos *note add_argument():
     19e. e ‘add_parser()’, o qual permite descontinuar opções de linha
     de comando, argumentos posicionais e subcomandos.  (Contribuição de
     Serhiy Storchaka em gh-83648(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/83648


File: python.info,  Node: array,  Next: ast,  Prev: argparse,  Up: Módulos melhorados

1.1.5.2 array
.............

   * Adiciona o código do tipo ‘'w'’ (‘Py_UCS4’) para caracteres
     Unicode.  Ele deve ser usado no lugar do código do tipo ‘'u'’
     descontinuado.  (Contribuição de Inada Naoki em gh-80480(1).)

   * Registra *note array.array: 1a0. como *note MutableSequence: 1a1.
     implementando o método *note clear(): 1a2.  (Contribuição de Mike
     Zimin em gh-114894(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/80480

   (2) https://github.com/python/cpython/issues/114894


File: python.info,  Node: ast,  Next: asyncio,  Prev: array,  Up: Módulos melhorados

1.1.5.3 ast
...........

   * Os construtores dos tipos de nós no módulo *note ast: 8. agora são
     mais rígidos nos argumentos que aceitam, com um comportamento mais
     intuitivo quando os argumentos são omitidos.

     Se um campo opcional em um nó da AST não for incluído como
     argumento ao construir uma instância, o campo agora será definido
     como ‘None’.  Da mesma forma, se um campo de lista for omitido,
     esse campo será agora definido como uma lista vazia, e se um campo
     ‘expr_context’ for omitido, o padrão será *note Load(): 1a4.
     (Anteriormente, em todos os casos, o atributo estaria ausente na
     instância do nó da AST recém-construída.)

     Em todos os outros casos, nos quais um argumento é omitido, o
     construtor de nós vai emitir uma *note DeprecationWarning: 1a5.
     Isso vai levantar uma exceção no Python 3.15.  Da mesma forma,
     passar um argumento nomeado para o construtor que não mapeia para
     um campo no nó da AST agora está descontinuado e vai levantar uma
     exceção no Python 3.15.

     Estas mudanças não se aplicam às subclasses de *note ast.AST: 1a6.
     definidas pelo usuário, a menos que a classe opte pelo novo
     comportamento definindo o mapeamento *note AST._field_types: 1a7.

     (Contribuição de Jelle Zijlstra em gh-105858(1), gh-117486(2) e
     gh-118851(3).)

   * *note ast.parse(): 1a8. agora aceita um argumento opcional
     'optimize' que é passado para *note compile(): 192.  Isto torna
     possível obter uma AST otimizada.  (Contribuição de Irit Katriel em
     gh-108113(4).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/105858

   (2) https://github.com/python/cpython/issues/117486

   (3) https://github.com/python/cpython/issues/118851

   (4) https://github.com/python/cpython/issues/108113


File: python.info,  Node: asyncio,  Next: base64,  Prev: ast,  Up: Módulos melhorados

1.1.5.4 asyncio
...............

   * *note asyncio.as_completed(): 1aa. agora retorna um objeto que é ao
     mesmo tempo um *note iterador assíncrono: 1ab. e um *note iterator:
     1ac. simples de *note aguardáveis: 1ad.  Os aguardáveis gerados
     pela iteração assíncrona incluem tarefas originais ou objetos
     futuros que foram passados, facilitando a associação dos resultados
     às tarefas que estão sendo concluídas.  (Contribuição de Justin
     Arthur em gh-77714(1).)

   * *note asyncio.loop.create_unix_server(): 1ae. agora removerá
     automaticamente o soquete Unix quando o servidor for fechado.
     (Contribuição de Pierre Ossman em gh-111246(2).)

   * *note DatagramTransport.sendto(): 1af. agora enviará datagramas de
     comprimento zero se for chamado com um objeto de bytes vazios.  O
     controle de fluxo de transporte agora também leva em conta o
     cabeçalho do datagrama ao calcular o tamanho do buffer.
     (Contribuição de Jamie Phan em gh-115199(3).)

   * Adiciona *note Queue.shutdown: 1b0. e *note QueueShutDown: 1b1.
     para gerenciar a terminação da fila.  (Contribuição de Laurie
     Opperman e Yves Duprat em gh-104228(4).)

   * Adiciona os métodos *note Server.close_clients(): 1b2. e *note
     Server.abort_clients(): 1b3, que fecham de forma mais forçada um
     servidor asyncio.  (Contribuição de Pierre Ossman em gh-113538(5).)

   * Aceita uma tupla de separadores em *note StreamReader.readuntil():
     1b4, parando quando qualquer um deles for encontrado.
     (Contribuição de Bruce Merry em gh-81322(6).)

   * Melhora o comportamento de *note TaskGroup: 1b5. quando um
     cancelamento externo colide com um cancelamento interno.  Por
     exemplo, quando dois grupos de tarefas estão aninhados e ambos
     experimentam uma exceção em uma tarefa filho simultaneamente, é
     possível que o grupo de tarefas externo seja interrompido, porque
     seu cancelamento interno foi engolido pelo grupo de tarefas
     interno.

     No caso em que um grupo de tarefas é cancelado externamente e
     também deve levantar *note ExceptionGroup: 1b6, ele agora chamará o
     método *note cancel(): 1b7. da tarefa pai.  Isso garante que uma
     *note CancelledError: 1b8. será levantada no próximo *note await:
     1b9, para que o cancelamento não seja perdido.

     Um benefício adicional dessas mudanças é que os grupos de tarefas
     agora preservam a contagem de cancelamentos (*note cancelling():
     1ba.).

     Para lidar com alguns casos extremos, *note uncancel(): 1bb. agora
     pode redefinir o sinalizador não documentado ‘_must_cancel’ quando
     a contagem de cancelamentos chegar a zero.

     (Inspirado por um relatório de problema enviado por Arthur Tacca em
     gh-116720(7).)

   * Quando *note TaskGroup.create_task(): 1bc. é chamado em um *note
     TaskGroup: 1b5. inativo, a corrotina fornecida será fechada (o que
     evita um *note RuntimeWarning: 1bd. sobre uma corrotina que nunca
     foi aguardada).  (Contribuição de Arthur Tacca e Jason Zhang em
     gh-115957(8).)

   * A função e os métodos ‘create_task’ receberam um novo argumento
     ‘**kwargs’ que é passado para o construtor da tarefa.  Essa
     alteração foi adicionada acidentalmente na versão 3.13.3 e quebrou
     o contrato da API para fábricas de tarefas personalizadas.  Várias
     fábricas de tarefas de terceiros implementaram soluções
     alternativas para isso.  Na versão 3.13.4 e versões posteriores, o
     antigo contrato de fábrica é mantido novamente (até a versão 3.14).
     Para manter as soluções alternativas funcionando, o argumento extra
     ‘**kwargs’ ainda permite a passagem de argumentos nomeados
     adicionais para *note Task: 1be. e para fábricas de tarefas
     personalizadas.

     Isso afeta as seguintes funções e métodos: *note
     asyncio.create_task(): 1bf, *note asyncio.loop.create_task(): 1c0,
     *note asyncio.TaskGroup.create_task(): 1bc.  (Contribuição de
     Thomas Grainger em gh-128307(9).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/77714

   (2) https://github.com/python/cpython/issues/111246

   (3) https://github.com/python/cpython/issues/115199

   (4) https://github.com/python/cpython/issues/104228

   (5) https://github.com/python/cpython/issues/113538

   (6) https://github.com/python/cpython/issues/81322

   (7) https://github.com/python/cpython/issues/116720

   (8) https://github.com/python/cpython/issues/115957

   (9) https://github.com/python/cpython/issues/128307


File: python.info,  Node: base64,  Next: compileall,  Prev: asyncio,  Up: Módulos melhorados

1.1.5.5 base64
..............

   * Adiciona as funções *note z85encode(): 14f. e *note z85decode():
     150. para codificar *note bytes: 1c2. como dados Z85(1) e
     decodificar dados codificados em Z85 para ‘bytes’.  (Contribuição
     de Matan Perelman em gh-75299(2).)

   ---------- Footnotes ----------

   (1) https://rfc.zeromq.org/spec/32/

   (2) https://github.com/python/cpython/issues/75299


File: python.info,  Node: compileall,  Next: concurrent futures,  Prev: base64,  Up: Módulos melhorados

1.1.5.6 compileall
..................

   * O número padrão de threads e processos de trabalho é agora
     selecionado usando *note os.process_cpu_count(): 1c4. em vez de
     *note os.cpu_count(): 1c5.  (Contribuição de Victor Stinner em
     gh-109649(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109649


File: python.info,  Node: concurrent futures,  Next: configparser,  Prev: compileall,  Up: Módulos melhorados

1.1.5.7 concurrent.futures
..........................

   * O número padrão de threads e processos de trabalho é agora
     selecionado usando *note os.process_cpu_count(): 1c4. em vez de
     *note os.cpu_count(): 1c5.  (Contribuição de Victor Stinner em
     gh-109649(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109649


File: python.info,  Node: configparser,  Next: copy,  Prev: concurrent futures,  Up: Módulos melhorados

1.1.5.8 configparser
....................

   * *note ConfigParser: 1c8. agora tem suporte para seções sem nome, o
     que permite pares de chave-valor de nível superior.  Isso pode ser
     habilitado com o novo parâmetro 'allow_unnamed_section'.
     (Contribuição de Pedro Sousa Lacerda em gh-66449(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/66449


File: python.info,  Node: copy,  Next: ctypes,  Prev: configparser,  Up: Módulos melhorados

1.1.5.9 copy
............

   * A nova função *note replace(): 151. e o protocolo *note replace:
     152. tornam a criação de cópias modificadas de objetos muito mais
     simples.  Isso é especialmente útil ao trabalhar com objetos
     imutáveis.  Os seguintes tipos dão suporte à função *note
     replace(): 151. e implementam o protocolo replace:

        * *note collections.namedtuple(): 1ca.

        * *note dataclasses.dataclass: 1cb.

        * *note datetime.datetime: 1cc, *note datetime.date: 1cd, *note
          datetime.time: 1ce.

        * *note inspect.Signature: 1cf, *note inspect.Parameter: 1d0.

        * *note types.SimpleNamespace: 1d1.

        * *note objetos código: 1d2.

     Qualquer classe definida pelo usuário também pode ter suporte a
     *note copy.replace(): 151. definindo o método *note __replace__():
     152.  (Contribuição de Serhiy Storchaka em gh-108751(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/108751


File: python.info,  Node: ctypes,  Next: dbm,  Prev: copy,  Up: Módulos melhorados

1.1.5.10 ctypes
...............

   * Como consequência da refatoração interna necessária, a
     inicialização de metaclasses internas agora acontece em ‘__init__’
     em vez de ‘__new__’.  Isso afeta projetos que fazem subclasse
     dessas metaclasses internas para fornecer inicialização
     personalizada.  De forma geral:

        - A lógica personalizada que foi feita em ‘__new__’ após chamar
          ‘super().__new__’ deve ser movida para ‘__init__’.

        - Para criar uma classe, chame a metaclasse, não apenas o método
          ‘__new__’ da metaclasse.

     Veja gh-124520(1) para discussão e links para mudanças em alguns
     projetos afetados.

   * Os objetos *note ctypes.Structure: 1d4. têm um novo atributo *note
     _align_: 1d5. que permite que o alinhamento da estrutura que está
     sendo empacotada para/da memória seja especificado explicitamente.
     (Contribuição de Matt Sanderson em gh-112433(2))

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124520

   (2) https://github.com/python/cpython/issues/112433


File: python.info,  Node: dbm,  Next: dis,  Prev: ctypes,  Up: Módulos melhorados

1.1.5.11 dbm
............

   * Adiciona *note dbm.sqlite3: 35, um novo módulo que implementa um
     backend SQLite, e torna-o o backend padrão ‘dbm’.  (Contribuição de
     Raymond Hettinger e Erlend E. Aasland em gh-100414(1).)

   * Permite a remoção de todos os itens do banco de dados por meio dos
     novos métodos ‘clear()’ dos objetos de banco de dados GDBM e NDBM.
     (Contribuição de Donghee Na em gh-107122(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100414

   (2) https://github.com/python/cpython/issues/107122


File: python.info,  Node: dis,  Next: doctest,  Prev: dbm,  Up: Módulos melhorados

1.1.5.12 dis
............

   * Altera a saída das funções do módulo *note dis: 38. para mostrar
     rótulos lógicos para alvos de salto e manipuladores de exceção, em
     vez de deslocamentos.  Os deslocamentos podem ser adicionados com a
     nova opção de linha de comando *note -O: 1d8. ou o argumento
     'show_offsets'.  (Contribuição de Irit Katriel em gh-112137(1).)

   * *note get_instructions(): 1d9. não representa mais entradas de
     cache como instruções separadas.  Em vez disso, ele os retorna como
     parte de *note Instruction: 1da, no novo campo 'cache_info'.  O
     argumento 'show_caches' para *note get_instructions(): 1d9. foi
     descontinuado e não tem mais nenhum efeito.  (Contribuição de Irit
     Katriel em gh-112962(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/112137

   (2) https://github.com/python/cpython/issues/112962


File: python.info,  Node: doctest,  Next: email,  Prev: dis,  Up: Módulos melhorados

1.1.5.13 doctest
................

   * A saída do *note doctest: 3a. é agora colorida por padrão.  Isso
     pode ser controlado através da nova variável de ambiente *note
     PYTHON_COLORS: 14a, bem como das variáveis de ambiente canônicas
     NO_COLOR(1) e FORCE_COLOR(2). Veja também *note Controlando cores:
     16b.  (Contribuição de Hugo van Kemenade em gh-117225(3).)

   * O método *note DocTestRunner.run(): 1dc. agora conta o número de
     testes ignorados.  Adiciona os atributos *note DocTestRunner.skips:
     1dd. e *note TestResults.skipped: 1de.  (Contribuição de Victor
     Stinner em gh-108794(4).)

   ---------- Footnotes ----------

   (1) https://no-color.org/

   (2) https://force-color.org/

   (3) https://github.com/python/cpython/issues/117225

   (4) https://github.com/python/cpython/issues/108794


File: python.info,  Node: email,  Next: enum,  Prev: doctest,  Up: Módulos melhorados

1.1.5.14 email
..............

   * Cabeçalhos com novas linhas embutidas são agora colocadas entre
     aspas na saída.  O *note generator: 40. agora se recusará a
     serializar (escrever) cabeçalhos que estão dobrados ou delimitados
     incorretamente, de modo que eles seriam analisados como vários
     cabeçalhos ou unidos a dados adjacentes.  Se você precisar
     desativar esse recurso de segurança, defina *note
     verify_generated_headers: 1e0.  (Contribuição de Bas Bloemsaat e
     Petr Viktorin em gh-121650(1).)

   * *note getaddresses(): 1e1. e *note parseaddr(): 1e2. agora retornam
     pares ‘('', '')’ em mais situações onde endereços de e-mail
     inválidos são encontrados em vez de valores potencialmente
     imprecisos.  As duas funções têm agora um novo parâmetro opcional
     'strict' (padrão ‘True’).  Para obter o comportamento antigo
     (aceitar entrada malformada), ‘strict=False’.
     ‘getattr(email.utils, 'supports_strict_parsing', False)’ pode ser
     usado para verificar se o parâmetro 'strict' está disponível.
     (Contribuição de Thomas Dwyer e Victor Stinner para gh-102988(2)
     para melhorar a correção CVE 2023-27043(3).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/121650

   (2) https://github.com/python/cpython/issues/102988

   (3) https://www.cve.org/CVERecord?id=CVE-2023-27043


File: python.info,  Node: enum,  Next: fractions,  Prev: email,  Up: Módulos melhorados

1.1.5.15 enum
.............

   * *note EnumDict: 1e4. foi tornada pública para melhor suporte às
     subclasses de *note EnumType: 1e5.


File: python.info,  Node: fractions,  Next: glob,  Prev: enum,  Up: Módulos melhorados

1.1.5.16 fractions
..................

   * Os objetos *note Fraction: 1e7. agora oferecem suporte às regras
     padrões da *note minilinguagem de especificação de formato: 1e8.
     para preenchimento, alinhamento, manipulação de sinais, largura
     mínima e agrupamento.  (Contribuição de Mark Dickinson em
     gh-111320(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/111320


File: python.info,  Node: glob,  Next: importlib,  Prev: fractions,  Up: Módulos melhorados

1.1.5.17 glob
.............

   * Adiciona *note translate(): 1ea, uma função que converte uma
     especificação de caminho com curingas estilo shell em uma expressão
     regular.  (Contribuição de Barney Gale em gh-72904(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/72904


File: python.info,  Node: importlib,  Next: io,  Prev: glob,  Up: Módulos melhorados

1.1.5.18 importlib
..................

   * As seguintes funções em *note importlib.resources: 7b. agora
     permitem acessar um diretório (ou árvore) de recursos, usando
     múltiplos argumentos posicionais (os argumentos 'encoding' e
     'errors' nas funções de leitura de texto agora são
     somente-nomeados):

        * *note is_resource(): 1ec.

        * *note open_binary(): 1ed.

        * *note open_text(): 1ee.

        * *note path(): 1ef.

        * *note read_binary(): 1f0.

        * *note read_text(): 1f1.

     Essas funções não estão mais descontinuadas e não estão programadas
     para remoção.  (Contribuição de Petr Viktorin em gh-116608(1).)

   * A função *note contents(): 1f2. permanece descontinuada em favor da
     API completa *note Traversable: 1f3.  No entanto, agora não há
     planos para removê-la.  (Contribuição de Petr Viktorin em
     gh-116608(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/116608

   (2) https://github.com/python/cpython/issues/116608


File: python.info,  Node: io,  Next: ipaddress,  Prev: importlib,  Up: Módulos melhorados

1.1.5.19 io
...........

   * O finalizador *note IOBase: 1f5. agora registra quaisquer erros
     levantados pelo método *note close(): 1f6. com *note
     sys.unraisablehook: 1f7.  Anteriormente, os erros eram ignorados
     silenciosamente por padrão e registrados apenas em *note Modo de
     Desenvolvimento do Python: 1f8. ou ao usar uma *note construção de
     depuração do Python: 1f9.  (Contribuição de Victor Stinner em
     gh-62948(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/62948


File: python.info,  Node: ipaddress,  Next: itertools,  Prev: io,  Up: Módulos melhorados

1.1.5.20 ipaddress
..................

   * Adiciona a propriedade *note IPv4Address.ipv6_mapped: 1fb, que
     retorna o endereço IPv6 mapeado para IPv4.  (Contribuição de
     Charles Machalow em gh-109466(1).)

   * Corrige os comportamentos de ‘is_global’ e ‘is_private’ em *note
     IPv4Address: 1fc, *note IPv6Address: 1fd, *note IPv4Network: 1fe. e
     *note IPv6Network: 1ff.  (Contribuição de Jakub Stasiak em
     gh-113171(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109466

   (2) https://github.com/python/cpython/issues/113171


File: python.info,  Node: itertools,  Next: marshal,  Prev: ipaddress,  Up: Módulos melhorados

1.1.5.21 itertools
..................

   * *note batched(): 201. tem um novo parâmetro 'strict', que levanta
     uma *note ValueError: 202. se o lote final for menor que o tamanho
     do lote especificado.  (Contribuição de Raymond Hettinger em
     gh-113202(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/113202


File: python.info,  Node: marshal,  Next: math,  Prev: itertools,  Up: Módulos melhorados

1.1.5.22 marshal
................

   * Adiciona o parâmetro 'allow_code' nas funções do módulo.  Passar
     ‘allow_code=False’ evita a serialização e desserialização de
     objetos de código que são incompatíveis entre versões do Python.
     (Contribuição de Serhiy Storchaka em gh-113626(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/113626


File: python.info,  Node: math,  Next: mimetypes,  Prev: marshal,  Up: Módulos melhorados

1.1.5.23 math
.............

   * A nova função *note fma(): 205. realiza operações fundidas de
     multiplicação e adição.  Ela calcula ‘x * y + z’ com apenas uma
     única rodada e, portanto, evita qualquer perda intermediária de
     precisão.  Ele envolve a função ‘fma()’ fornecida pelo C99 e segue
     a especificação da operação IEEE 754 “fusedMultiplyAdd” para casos
     especiais.  (Contribuição de Mark Dickinson e Victor Stinner em
     gh-73468(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/73468


File: python.info,  Node: mimetypes,  Next: mmap,  Prev: math,  Up: Módulos melhorados

1.1.5.24 mimetypes
..................

   * Adiciona a função *note guess_file_type(): 207. para adivinhar um
     tipo MIME de um caminho do sistema de arquivos.  Usar caminhos com
     *note guess_type(): 208. agora está *note suavemente descontinuada:
     209.  (Contribuição de Serhiy Storchaka em gh-66543(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/66543


File: python.info,  Node: mmap,  Next: multiprocessing,  Prev: mimetypes,  Up: Módulos melhorados

1.1.5.25 mmap
.............

   * *note mmap: 20b. agora está protegida contra travamentos no Windows
     quando a memória mapeada está inacessível devido a erros no sistema
     de arquivos ou violações de acesso.  (Contribuição de Jannis
     Weigend em gh-118209(1).)

   * *note mmap: 20b. tem um novo método *note seekable(): 20c. que pode
     ser usado quando um objeto arquivo ou similar pesquisável é
     necessário.  O método *note seek(): 20d. agora retorna a nova
     posição absoluta.  (Contribuição de Donghee Na e Sylvie Liberman em
     gh-111835(2).)

   * O novo parâmetro 'trackfd' somente para UNIX para *note mmap: 20b.
     controla a duplicação do descritor de arquivo; se falso, o
     descritor de arquivo especificado por 'fileno' não será duplicado.
     (Contribuição de Zackery Spytz e Petr Viktorin em gh-78502(3).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118209

   (2) https://github.com/python/cpython/issues/111835

   (3) https://github.com/python/cpython/issues/78502


File: python.info,  Node: multiprocessing,  Next: os,  Prev: mmap,  Up: Módulos melhorados

1.1.5.26 multiprocessing
........................

   * O número padrão de threads e processos de trabalho é agora
     selecionado usando *note os.process_cpu_count(): 1c4. em vez de
     *note os.cpu_count(): 1c5.  (Contribuição de Victor Stinner em
     gh-109649(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109649


File: python.info,  Node: os,  Next: os path,  Prev: multiprocessing,  Up: Módulos melhorados

1.1.5.27 os
...........

   * Adiciona a função *note process_cpu_count(): 1c4. para obter o
     número de núcleos lógicos de CPU utilizáveis pela thread de chamada
     do processo atual.  (Contribuição de Victor Stinner em
     gh-109649(1).)

   * *note cpu_count(): 1c5. e *note process_cpu_count(): 1c4. podem ser
     substituídos através da nova variável de ambiente *note
     PYTHON_CPU_COUNT: 210. ou da nova opção de linha de comando *note
     -X cpu_count: 176.  Esta opção é útil para usuários que precisam
     limitar os recursos da CPU de um sistema contêiner sem precisar
     modificar código da aplicação ou o contêiner em si.  (Contribuição
     de Donghee Na em gh-109595(2).)

   * Adiciona uma *note interface de baixo nível: 153. aos ‘descritores
     de arquivo de temporizador(3)’ do Linux via *note timerfd_create():
     211, *note timerfd_settime(): 212, *note timerfd_settime_ns(): 213,
     *note timerfd_gettime(): 214, *note timerfd_gettime_ns(): 215,
     *note TFD_NONBLOCK: 216, *note TFD_CLOEXEC: 217, *note
     TFD_TIMER_ABSTIME: 218. e *note TFD_TIMER_CANCEL_ON_SET: 219.
     (Contribuição de Masaru Tsuchiyama em gh-108277(4).)

   * *note lchmod(): 21a. e o argumento 'follow_symlinks' em *note
     chmod(): 21b. estão agora disponíveis no Windows.  Observe que o
     valor padrão de 'follow_symlinks' em ‘lchmod()’ é ‘False’ no
     Windows.  (Contribuição de Serhiy Storchaka em gh-59616(5).)

   * *note fchmod(): 21c. e suporte para descritores de arquivo em *note
     chmod(): 21b. estão agora disponíveis no Windows.  (Contribuição de
     Serhiy Storchaka em gh-113191(6).)

   * No Windows, *note mkdir(): 21d. e *note makedirs(): 21e. agora
     oferecem suporte a passar um valor 'mode' de ‘0o700’ para aplicar
     controle de acesso ao novo diretório.  Isso afeta implicitamente
     *note tempfile.mkdtemp(): 21f. e é uma mitigação para CVE
     2024-4030(7).  Outros valores para 'mode' continuam a ser
     ignorados.  (Contribuição de Steve Dower em gh-118486(8).)

   * *note posix_spawn(): 220. agora aceita ‘None’ para o argumento
     'env', o que faz com que o processo recém-gerado use o ambiente de
     processo atual.  (Contribuição de Jakub Kulik em gh-113119(9).)

   * *note posix_spawn(): 220. agora pode usar o atributo *note
     POSIX_SPAWN_CLOSEFROM: 221. no parâmetro 'file_actions' em
     plataformas que oferecem suporte a
     ‘posix_spawn_file_actions_addclosefrom_np()’.  (Contribuição de
     Jakub Kulik em gh-113117(10).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109649

   (2) https://github.com/python/cpython/issues/109595

   (3) https://manpages.debian.org/timerfd_create(2)

   (4) https://github.com/python/cpython/issues/108277

   (5) https://github.com/python/cpython/issues/59616

   (6) https://github.com/python/cpython/issues/113191

   (7) https://www.cve.org/CVERecord?id=CVE-2024-4030

   (8) https://github.com/python/cpython/issues/118486

   (9) https://github.com/python/cpython/issues/113119

   (10) https://github.com/python/cpython/issues/113117


File: python.info,  Node: os path,  Next: pathlib,  Prev: os,  Up: Módulos melhorados

1.1.5.28 os.path
................

   * Adiciona *note isreserved(): 223. para verificar se um caminho está
     reservado no sistema atual.  Esta função está disponível apenas no
     Windows.  (Contribuição de Barney Gale em gh-88569(1).)

   * No Windows, *note isabs(): 224. não considera mais caminhos que
     começam com exatamente uma barra (‘\’ ou ‘/’) como absolutos.
     (Contribuição de Barney Gale e Jon Foster em gh-44626(2).)

   * *note realpath(): 225. agora resolve nomes de arquivos no estilo
     MS-DOS, mesmo que o arquivo não esteja acessível.  (Contribuição de
     Moonsik Park em gh-82367(3).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/88569

   (2) https://github.com/python/cpython/issues/44626

   (3) https://github.com/python/cpython/issues/82367


File: python.info,  Node: pathlib,  Next: pdb,  Prev: os path,  Up: Módulos melhorados

1.1.5.29 pathlib
................

   * Adiciona *note UnsupportedOperation: 227, que é levantada em vez de
     *note NotImplementedError: 228. quando uma operação de caminho não
     é possível.  (Contribuição de Barney Gale em gh-89812(1).)

   * Adiciona um novo construtor para criar objetos *note Path: 229. a
     partir de URIs ‘file’ (‘file:///’), *note Path.from_uri(): 22a.
     (Contribuição de Barney Gale em gh-107465(2).)

   * Adiciona *note PurePath.full_match(): 22b. para corresponder
     caminhos com curingas do tipo shell, incluindo o curinga recursivo
     “‘**’”.  (Contribuição de Barney Gale em gh-73435(3).)

   * Adiciona o atributo de classe *note PurePath.parser: 22c. para
     armazenar a implementação de *note os.path: a2. usada para análise
     e junção de caminhos de baixo nível.  Isso vai ser ‘posixpath’ ou
     ‘ntpath’.

   * Adiciona o argumento somente-nomeado 'recurse_symlinks' a *note
     Path.glob(): 22d. e *note rglob(): 22e.  (Contribuição de Barney
     Gale em gh-77609(4).)

   * *note Path.glob(): 22d. e *note rglob(): 22e. agora retornam
     arquivos e diretórios quando recebem um padrão que termina com
     “‘**’”.  Anteriormente, apenas os diretórios eram retornados.
     (Contribuição de Barney Gale em gh-70303(5).)

   * Adiciona o argumento somente-nomeado 'follow_symlinks' a *note
     Path.is_file: 22f, *note Path.is_dir: 230, *note Path.owner(): 231.
     e *note Path.group(): 232.  (Contribuição de Barney Gale em
     gh-105793(6) e Kamil Turek em gh-107962(7).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/89812

   (2) https://github.com/python/cpython/issues/107465

   (3) https://github.com/python/cpython/issues/73435

   (4) https://github.com/python/cpython/issues/77609

   (5) https://github.com/python/cpython/issues/70303

   (6) https://github.com/python/cpython/issues/105793

   (7) https://github.com/python/cpython/issues/107962


File: python.info,  Node: pdb,  Next: queue,  Prev: pathlib,  Up: Módulos melhorados

1.1.5.30 pdb
............

   * *note breakpoint(): 234. e *note set_trace(): 235. agora entram no
     depurador imediatamente em vez de na próxima linha de código a ser
     executada.  Esta mudança evita que o depurador quebre fora do
     contexto quando ‘breakpoint()’ estiver posicionado no final do
     contexto.  (Contribuição de Tian Gao em gh-118579(1).)

   * ‘sys.path[0]’ não mais é substituído pelo diretório do script que
     está sendo depurado quando *note sys.flags.safe_path: 236. está
     definido.(Contribuição de Tian Gao e Christian Walther em
     gh-111762(2).)

   * *note zipapp: 130. agora é aceito como alvo de depuração.
     (Contribuição de Tian Gao em gh-118501(3).)

   * Adiciona a capacidade de mover entre exceções encadeadas durante a
     depuração post-mortem em *note pm(): 237. usando o novo comando
     *note exceptions [número_exc]: 238. para Pdb.  (Contribuição de
     Matthias Bussonnier em gh-106676(4).)

   * Expressões e instruções cujo prefixo é um comando pdb agora são
     identificadas e executadas corretamente.  (Contribuição de Tian Gao
     em gh-108464(5).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118579

   (2) https://github.com/python/cpython/issues/111762

   (3) https://github.com/python/cpython/issues/118501

   (4) https://github.com/python/cpython/issues/106676

   (5) https://github.com/python/cpython/issues/108464


File: python.info,  Node: queue,  Next: random,  Prev: pdb,  Up: Módulos melhorados

1.1.5.31 queue
..............

   * Adiciona *note Queue.shutdown: 23a. e *note ShutDown: 23b. para
     gerenciar a finalização da fila.  (Contribuição de Laurie Opperman
     e Yves Duprat em gh-104750(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/104750


File: python.info,  Node: random,  Next: re,  Prev: queue,  Up: Módulos melhorados

1.1.5.32 random
...............

   * Adiciona uma *note interface de linha de comando: 154.
     (Contribuição de Hugo van Kemenade em gh-118131(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118131


File: python.info,  Node: re,  Next: shutil,  Prev: random,  Up: Módulos melhorados

1.1.5.33 re
...........

   * Renomeia ‘re.error’ para *note PatternError: 23e. para maior
     clareza.  ‘re.error’ é mantido para compatibilidade com versões
     anteriores.


File: python.info,  Node: shutil,  Next: site,  Prev: re,  Up: Módulos melhorados

1.1.5.34 shutil
...............

   * Suporte aos argumentos nomeados 'dir_fd' e 'follow_symlinks' em
     *note chown(): 240.  (Contribuição de Berker Peksag e Tahia K em
     gh-62308(1))

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/62308


File: python.info,  Node: site,  Next: sqlite3,  Prev: shutil,  Up: Módulos melhorados

1.1.5.35 site
.............

   * Os arquivos ‘.pth’ agora são decodificados primeiro usando UTF-8 e
     depois usando *note codificação da localidade: 242. se a
     decodificação UTF-8 falhar.  (Contribuição de Inada Naoki em
     gh-117802(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/117802


File: python.info,  Node: sqlite3,  Next: ssl,  Prev: site,  Up: Módulos melhorados

1.1.5.36 sqlite3
................

   * Uma *note ResourceWarning: 244. agora é emitida se um objeto *note
     Connection: 245. não for explicitamente *note fechado: 246.
     (Contribuição de Erlend E. Aasland em gh-105539(1).)

   * Adiciona o parâmetro somente-nomeado 'filter' a *note
     Connection.iterdump(): 247. para filtrar objetos de banco de dados
     para despejo.  (Contribuição de Mariusz Felisiak em gh-91602(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/105539

   (2) https://github.com/python/cpython/issues/91602


File: python.info,  Node: ssl,  Next: statistics,  Prev: sqlite3,  Up: Módulos melhorados

1.1.5.37 ssl
............

   * A API *note create_default_context(): 155. agora inclui *note
     VERIFY_X509_PARTIAL_CHAIN: 156. e *note VERIFY_X509_STRICT: 157. em
     seus sinalizadores padrão.

          Nota: *note VERIFY_X509_STRICT: 157. pode rejeitar
          certificados pré- RFC 5280(1) ou malformados que a
          implementação OpenSSL subjacente poderia aceitar.  Embora não
          seja recomendado desativar isso, você pode fazer isso usando:

               import ssl

               ctx = ssl.create_default_context()
               ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT

     (Contribuição de William Woodruff em gh-112389(2).)

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc5280.html

   (2) https://github.com/python/cpython/issues/112389


File: python.info,  Node: statistics,  Next: subprocess,  Prev: ssl,  Up: Módulos melhorados

1.1.5.38 statistics
...................

   * Adiciona *note kde(): 24a. para estimativa de densidade do núcleo.
     Isto torna possível estimar uma função de densidade de
     probabilidade contínua a partir de um número fixo de amostras
     discretas.  (Contribuição de Raymond Hettinger em gh-115863(1).)

   * Adiciona *note kde_random(): 24b. para amostragem de uma função de
     densidade de probabilidade estimada criada por *note kde(): 24a.
     (Contribuição de Raymond Hettinger em gh-115863(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115863

   (2) https://github.com/python/cpython/issues/115863


File: python.info,  Node: subprocess,  Next: sys,  Prev: statistics,  Up: Módulos melhorados

1.1.5.39 subprocess
...................

   * O módulo *note subprocess: d6. agora usa a função *note
     posix_spawn(): 220. em mais situações.

     Notavelmente, quando 'close_fds' é ‘True’ (o padrão), *note
     posix_spawn(): 220. será usado quando a biblioteca C fornecer
     ‘posix_spawn_file_actions_addclosefrom_np()’, que inclui versões
     recentes do Linux, FreeBSD e Solaris.  No Linux, isso deve ter um
     desempenho semelhante ao código existente baseado em ‘vfork()’ do
     Linux.

     Um botão de controle privado ‘subprocess._USE_POSIX_SPAWN’ pode ser
     definido como ‘False’ se você precisar forçar *note subprocess: d6.
     a nunca usar *note posix_spawn(): 220.  Por favor, informe o motivo
     e os detalhes da plataforma no *note rastreador de problemas: 24e.
     se você definir isso para que possamos melhorar nossa lógica de
     seleção de API para todos.  (Contribuído por Jakub Kulik em
     gh-113117(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/113117


File: python.info,  Node: sys,  Next: tempfile,  Prev: subprocess,  Up: Módulos melhorados

1.1.5.40 sys
............

   * Adiciona a função *note _is_interned(): 250. para testar se uma
     string foi internada.  Não há garantia de que esta função exista em
     todas as implementações do Python.  (Contribuição de Serhiy
     Storchaka em gh-78573(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/78573


File: python.info,  Node: tempfile,  Next: time,  Prev: sys,  Up: Módulos melhorados

1.1.5.41 tempfile
.................

   * No Windows, o modo padrão ‘0o700’ usado por *note
     tempfile.mkdtemp(): 21f. agora limita o acesso ao novo diretório
     devido a alterações em *note os.mkdir(): 21d.  Esta é uma mitigação
     para CVE 2024-4030(1).  (Contribuição de Steve Dower em
     gh-118486(2).)

   ---------- Footnotes ----------

   (1) https://www.cve.org/CVERecord?id=CVE-2024-4030

   (2) https://github.com/python/cpython/issues/118486


File: python.info,  Node: time,  Next: tkinter,  Prev: tempfile,  Up: Módulos melhorados

1.1.5.42 time
.............

   * No Windows, *note monotonic(): 253. agora usa o relógio
     ‘QueryPerformanceCounter()’ para uma resolução de 1 microssegundo,
     em vez do relógio ‘GetTickCount64()’ que tem uma resolução de 15.6
     milissegundos.  (Contribuição de Victor Stinner em gh-88494(1).)

   * No Windows, *note time(): 254. agora usa o relógio
     ‘GetSystemTimePreciseAsFileTime()’ para uma resolução de 1
     microssegundo, em vez do relógio ‘GetSystemTimeAsFileTime()’ que
     tem uma resolução de 15.6 milissegundos.  (Contribuição de Victor
     Stinner em gh-63207(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/88494

   (2) https://github.com/python/cpython/issues/63207


File: python.info,  Node: tkinter,  Next: traceback,  Prev: time,  Up: Módulos melhorados

1.1.5.43 tkinter
................

   * Adiciona métodos de widget *note tkinter: f0.: ‘tk_busy_hold()’,
     ‘tk_busy_configure()’, ‘tk_busy_cget()’, ‘tk_busy_forget()’,
     ‘tk_busy_current()’ e ‘tk_busy_status()’.  (Contribuição de Miguel,
     klappnase e Serhiy Storchaka em gh-72684(1).)

   * O método ‘wm_attributes()’ de widget *note tkinter: f0. agora
     aceita o nome do atributo sem o prefixo negativo para obter
     atributos de janela (por exemplo, ‘w.wm_attributes('alpha')’) e
     permite especificar atributos e valores para definir como
     argumentos nomeados (por exemplo, ‘w.wm_attributes(alpha=0.5)’).
     (Contribuição de Serhiy Storchaka em gh-43457(2).)

   * ‘wm_attributes()’ agora pode retornar atributos como um *note dict:
     256, usando o novo parâmetro somente-nomeado opcional
     'return_python_dict'.  (Contribuição de Serhiy Storchaka em
     gh-43457(3).)

   * ‘Text.count()’ agora pode retornar um *note int: 257. simples
     quando o novo parâmetro somente-nomeado opcional 'return_ints' é
     usado.  Caso contrário, a contagem única é retornada como uma tupla
     de 1 elemento ou ‘None’.  (Contribuição de Serhiy Storchaka em
     gh-97928(4).)

   * Suporte ao tipo de elemento “vsapi” no método *note
     element_create(): 258. de *note tkinter.ttk.Style: 259.
     (Contribuição de Serhiy Storchaka em gh-68166(5).)

   * Adiciona o método ‘after_info()’ para widgets do Tkinter.
     (Contribuição de Cheryl Sabella em gh-77020(6).)

   * Adiciona um novo método ‘copy_replace()’ a ‘PhotoImage’ para copiar
     uma região de uma imagem para outra, possivelmente com zoom de
     pixel, subamostragem ou ambos.  (Contribuição de Serhiy Storchaka
     em gh-118225(7).)

   * Adiciona parâmetro 'from_coords' para os métodos ‘copy()’, ‘zoom()’
     e ‘subsample()’ da classe ‘PhotoImage’.  Adiciona parâmetros 'zoom'
     e 'subsample' para o método ‘copy()’ da classe ‘PhotoImage’.
     (Contribuição de Serhiy Storchaka em gh-118225(8).)

   * Adiciona os métodos ‘PhotoImage’ ‘read()’ para ler uma imagem de um
     arquivo e ‘data()’ para obter os dados da imagem.  Adiciona os
     parâmetros 'background' e 'grayscale' ao método ‘write()’.
     (Contribuição de Serhiy Storchaka em gh-118271(9).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/72684

   (2) https://github.com/python/cpython/issues/43457

   (3) https://github.com/python/cpython/issues/43457

   (4) https://github.com/python/cpython/issues/97928

   (5) https://github.com/python/cpython/issues/68166

   (6) https://github.com/python/cpython/issues/77020

   (7) https://github.com/python/cpython/issues/118225

   (8) https://github.com/python/cpython/issues/118225

   (9) https://github.com/python/cpython/issues/118271


File: python.info,  Node: traceback,  Next: types,  Prev: tkinter,  Up: Módulos melhorados

1.1.5.44 traceback
..................

   * Adiciona o atributo *note exc_type_str: 25b. a *note
     TracebackException: 25c, que contém uma exibição de string do
     'exc_type'.  Descontinua o atributo *note exc_type: 25d, que contém
     o próprio objeto de tipo.  Adicione o parâmetro 'save_exc_type'
     (padrão ‘True’) para indicar se ‘exc_type’ deve ser salvo.
     (Contribuição de Irit Katriel em gh-112332(1).)

   * Adiciona um novo parâmetro somente-nomeado 'show_group' a *note
     TracebackException.format_exception_only(): 25e. para formatar
     (recursivamente) as exceções aninhadas de uma instância *note
     BaseExceptionGroup: 25f.  (Contribuição de Irit Katriel em
     gh-105292(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/112332

   (2) https://github.com/python/cpython/issues/105292


File: python.info,  Node: types,  Next: typing,  Prev: traceback,  Up: Módulos melhorados

1.1.5.45 types
..............

   * *note SimpleNamespace: 1d1. agora pode receber um único argumento
     posicional para inicializar os argumentos do espaço de nomes.  Este
     argumento deve ser um mapeamento ou um iterável de pares
     chave-valor.  (Contribuição de Serhiy Storchaka em gh-108191(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/108191


File: python.info,  Node: typing,  Next: unicodedata,  Prev: types,  Up: Módulos melhorados

1.1.5.46 typing
...............

   * PEP 705(1): adiciona *note ReadOnly: 161, uma construção especial
     de tipagem para marcar um item *note TypedDict: 162. como somente
     leitura para verificadores de tipo.

   * PEP 742(2): adiciona *note TypeIs: 163, uma construção de tipagem
     que pode ser usada para instruir um verificador de tipos sobre como
     restringir um tipo.

   * Adiciona *note NoDefault: 262, um objeto sinalizador usado para
     representar os padrões de alguns parâmetros no módulo *note typing:
     104.  (Contribuição de Jelle Zijlstra em gh-116126(3).)

   * Adicione *note get_protocol_members(): 263. para retornar o
     conjunto de membros que definem uma *note typing.Protocol: 264.
     (Contribuição de Jelle Zijlstra em gh-104873(4).)

   * Adiciona *note is_protocol(): 265. para verificar se uma classe é
     uma *note Protocol: 264.  (Contribuição de Jelle Zijlstra em
     gh-104873(5).)

   * *note ClassVar: 266. agora pode ser aninhado em *note Final: 267, e
     vice-versa.  (Contribuição de Mehdi Drissi em gh-89547(6).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0705/

   (2) https://peps.python.org/pep-0742/

   (3) https://github.com/python/cpython/issues/116126

   (4) https://github.com/python/cpython/issues/104873

   (5) https://github.com/python/cpython/issues/104873

   (6) https://github.com/python/cpython/issues/89547


File: python.info,  Node: unicodedata,  Next: venv,  Prev: typing,  Up: Módulos melhorados

1.1.5.47 unicodedata
....................

   * Atualiza o banco de dados Unicode para a versão 15.1.0(1).
     (Contribuição de James Gerity em gh-109559(2).)

   ---------- Footnotes ----------

   (1) https://www.unicode.org/versions/Unicode15.1.0/

   (2) https://github.com/python/cpython/issues/109559


File: python.info,  Node: venv,  Next: avisos,  Prev: unicodedata,  Up: Módulos melhorados

1.1.5.48 venv
.............

   * Adiciona suporte para criar arquivos ignorados pelo gerenciamento
     de controle de fontes (SCM) no diretório de um ambiente virtual.
     Por padrão, o Git é compatível.  Isso está implementado como
     ativado por padrão por meio da API, que pode ser estendido para
     oferecer suporte a outros SCMs (*note EnvBuilder: 26a. e *note
     create(): 26b.) e desativado por padrão por meio da CLI, usando
     ‘--without-scm-ignore-files’.  (Contribuição de Brett Cannon em
     gh-108125(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/108125


File: python.info,  Node: avisos,  Next: xml,  Prev: venv,  Up: Módulos melhorados

1.1.5.49 avisos
...............

   * PEP 702(1): O novo decorador *note warnings.deprecated(): 160.
     fornece uma maneira de comunicar descontinuações para um *note
     verificador de tipo estático: 26d. e avisar sobre o uso de classes
     e funções obsoletas.  Um *note DeprecationWarning: 1a5. também pode
     ser emitido quando uma função ou classe decorada é usada em tempo
     de execução.  (Contribuição de Jelle Zijlstra em gh-104003(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0702/

   (2) https://github.com/python/cpython/issues/104003


File: python.info,  Node: xml,  Next: zipimport,  Prev: avisos,  Up: Módulos melhorados

1.1.5.50 xml
............

   * Permite controlar o adiamento da nova análise do Expat >=2.6.0 (
     CVE 2023-52425(1)) adicionando cinco novos métodos:

        * *note xml.etree.ElementTree.XMLParser.flush(): 26f.

        * *note xml.etree.ElementTree.XMLPullParser.flush(): 270.

        * *note xml.parsers.expat.xmlparser.GetReparseDeferralEnabled():
          271.

        * *note xml.parsers.expat.xmlparser.SetReparseDeferralEnabled():
          272.

        * ‘xml.sax.expatreader.ExpatParser.flush()’

     (Contribuição de Sebastian Pipping em gh-115623(2).)

   * Adiciona o método ‘close()’ para o iterador retornado por *note
     iterparse(): 273. para limpeza explícita.  (Contribuição de Serhiy
     Storchaka em gh-69893(3).)

   ---------- Footnotes ----------

   (1) https://www.cve.org/CVERecord?id=CVE-2023-52425

   (2) https://github.com/python/cpython/issues/115623

   (3) https://github.com/python/cpython/issues/69893


File: python.info,  Node: zipimport,  Prev: xml,  Up: Módulos melhorados

1.1.5.51 zipimport
..................

   * Adiciona suporte para arquivos no formato ZIP64(1).  Todo mundo
     adora dados enormes, certo?  (Contribuição de Tim Hatch em
     gh-94146(2).)

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Zip_(file_format)#ZIP64

   (2) https://github.com/python/cpython/issues/94146


File: python.info,  Node: Otimizações,  Next: Módulos e APIs removidas,  Prev: Módulos melhorados,  Up: O que há de novo no Python 3 13

1.1.6 Otimizações
-----------------

   * Vários módulos de biblioteca padrão tiveram seus tempos de
     importação significativamente melhorados.  Por exemplo, o tempo de
     importação do módulo *note typing: 104. foi reduzido em cerca de um
     terço pela remoção de dependências em *note re: b9. e *note
     contextlib: 23.  Outros módulos para aproveitar a aceleração no
     tempo de importação incluem *note email.utils: 50, *note enum: 56,
     *note functools: 5f, *note importlib.metadata: 7a. e *note
     threading: ed.  (Contribuição de Alex Waygood, Shantanu Jain, Adam
     Turner, Daniel Hollas e outros em gh-109653(1).)

   * *note textwrap.indent(): 276. agora é cerca de 30% mais rápido do
     que antes para entradas grandes.  (Contribuição de Inada Naoki em
     gh-107369(2).)

   * O módulo *note subprocess: d6. agora a função *note posix_spawn():
     220. em mais situações, incluindo quando 'close_fds' é ‘True’ (o
     padrão) em muitas plataformas.  Isto deve fornecer um aumento
     notável de desempenho ao iniciar processos no FreeBSD e Solaris.
     Veja a seção de *note subprocess: 24d. acima para detalhes.
     (Contribuição de Jakub Kulik em gh-113117(3).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109653

   (2) https://github.com/python/cpython/issues/107369

   (3) https://github.com/python/cpython/issues/113117


File: python.info,  Node: Módulos e APIs removidas,  Next: Novas descontinuações,  Prev: Otimizações,  Up: O que há de novo no Python 3 13

1.1.7 Módulos e APIs removidas
------------------------------

* Menu:

* PEP 594; remove “baterias descarregadas” da biblioteca padrão: PEP 594 remove “baterias descarregadas” da biblioteca padrão.
* 2to3::
* builtins::
* configparser: configparser<2>.
* importlib.metadata: importlib metadata.
* locale::
* opcode::
* optparse::
* pathlib: pathlib<2>.
* re: re<2>.
* tkinter.tix: tkinter tix.
* turtle::
* typing: typing<2>.
* unittest::
* urllib::
* webbrowser::


File: python.info,  Node: PEP 594 remove “baterias descarregadas” da biblioteca padrão,  Next: 2to3,  Up: Módulos e APIs removidas

1.1.7.1 PEP 594: remove “baterias descarregadas” da biblioteca padrão
.....................................................................

PEP 594(1) propôs remover 19 módulos da biblioteca padrão,
coloquialmente chamados de “baterias descarregadas” devido ao seu status
histórico, obsoleto ou inseguro.  Todos os módulos a seguir foram
descontinuados no Python 3.11 e agora foram removidos:

   * ‘aifc’

        * standard-aifc(2): Use a redistribuição da biblioteca ‘aifc’ do
          PyPI.

   * ‘audioop’

        * audioop-lts(3): Use a biblioteca ‘audioop-lts’ do PyPI.

   * ‘chunk’

        * standard-chunk(4): Use a redistribuição da biblioteca ‘chunk’
          do PyPI.

   * ‘cgi’ e ‘cgitb’

        * ‘cgi.FieldStorage’ normalmente pode ser substituído por *note
          urllib.parse.parse_qsl(): 279. para solicitações ‘GET’ e
          ‘HEAD’, e o módulo *note email.message: 44. ou a biblioteca
          multipart(5) para solicitações ‘POST’ e ‘PUT’.

        * ‘cgi.parse()’ pode ser substituído chamando *note
          urllib.parse.parse_qs(): 27a. diretamente na string de
          consulta desejada, a menos que a entrada seja
          ‘multipart/form-data’, que deve ser substituída conforme
          descrito abaixo para ‘cgi.parse_multipart()’.

        * ‘cgi.parse_header()’ pode ser substituído pela funcionalidade
          do pacote *note email: 3b, que implementa os mesmos RFCs MIME.
          Por exemplo, com *note email.message.EmailMessage: 27b.:

               from email.message import EmailMessage

               msg = EmailMessage()
               msg['content-type'] = 'application/json; charset="utf8"'
               main, params = msg.get_content_type(), msg['content-type'].params

        * ‘cgi.parse_multipart()’ pode ser substituído pela
          funcionalidade no pacote *note email: 3b, que implementa os
          mesmos RFCs de MIME, ou pela biblioteca multipart(6).  Por
          exemplo, as classes *note email.message.EmailMessage: 27b. e
          *note email.message.Message: 27c.

        * standard-cgi(7): e standard-cgitb(8): Use a redistribuição das
          bibliotecas ‘cgi’ e ‘cgitb’ do PyPI.

   * ‘crypt’ e a extensão privada ‘_crypt’.  O módulo *note hashlib: 68.
     pode ser uma substituição apropriada quando simplesmente fazer hash
     de um valor é necessário.  Caso contrário, várias bibliotecas de
     terceiros no PyPI estão disponíveis:

        * bcrypt(9): hashing de senha moderno para seu software e
          servidores.

        * argon2-cffi(10): algoritmo seguro de hashing de senha Argon2.

        * legacycrypt(11): envólucro ao *note ctypes: 2a. para a chamada
          POSIX da biblioteca de criptografia e funcionalidade
          associada.

        * crypt_r(12): fork do módulo ‘crypt’, um envólucro para a
          chamada da biblioteca ‘crypt_r(3)(13)’ e funcionalidade
          associada.

        * standard-crypt(14) e deprecated-crypt-alternative(15): Use a
          redistribuição de ‘crypt’ e a reimplementação das bibliotecas
          ‘_crypt’ do PyPI.

   * ‘imghdr’: as bibliotecas filetype(16), puremagic(17) ou
     python-magic(18) devem ser usadas como substituições.  Por exemplo,
     a função ‘puremagic.what()’ pode ser usada para substituir a função
     ‘imghdr.what()’ para todos os formatos de arquivo que tinham
     suporte de ‘imghdr’.

        * standard-imghdr(19): Use a redistribuição da biblioteca
          ‘imghdr’ do PyPI.

   * ‘mailcap’: use o módulo *note mimetypes: 8f.

        * standard-mailcap(20): Use a redistribuição da biblioteca
          ‘mailcap’ do PyPI.

   * ‘msilib’

   * ‘nis’

   * ‘nntplib’: use a biblioteca pynntp(21) do PyPI.

        * standard-nntplib(22): Use a redistribuição da biblioteca
          ‘nntplib’ do PyPI.

   * ‘ossaudiodev’: para reprodução de áudio, use a biblioteca
     pygame(23) do PyPI.

   * ‘pipes’: Use o módulo *note subprocess: d6. em vez disso.  Use
     *note shlex.quote(): 27d. para substituir a função não documentada
     ‘pipes.quote’.

        * standard-pipes(24): Use a redistribuição da biblioteca ‘pipes’
          do PyPI.

   * ‘sndhdr’: as bibliotecas filetype(25), puremagic(26) ou
     python-magic(27) devem ser usadas como substitutas.

        * standard-sndhdr(28): Use a redistribuição da biblioteca
          ‘sndhdr’ do PyPI.

   * ‘spwd’: use a biblioteca python-pam(29) do PyPI.

   * ‘sunau’

        * standard-sunau(30): Use a redistribuição da biblioteca ‘sunau’
          do PyPI.

   * ‘telnetlib’: use as bibliotecas telnetlib3(31) ou Exscript(32) do
     PyPI.

        * standard-telnetlib(33): Use a redistribuição da biblioteca
          ‘telnetlib’ do PyPI.

   * ‘uu’: use o módulo *note base64: e. como uma alternativa moderna.

        * standard-uu(34): Use a redistribuição da biblioteca ‘uu’ do
          PyPI.

   * ‘xdrlib’

        * standard-xdrlib(35): Use a redistribuição da biblioteca
          ‘xdrlib’ do PyPI.

(Contribuição de Victor Stinner e Zachary Ware em gh-104773(36) e
gh-104780(37).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://pypi.org/project/standard-aifc/

   (3) https://pypi.org/project/audioop-lts/

   (4) https://pypi.org/project/standard-chunk/

   (5) https://pypi.org/project/multipart/

   (6) https://pypi.org/project/multipart/

   (7) https://pypi.org/project/standard-cgi/

   (8) https://pypi.org/project/standard-cgitb/

   (9) https://pypi.org/project/bcrypt/

   (10) https://pypi.org/project/argon2-cffi/

   (11) https://pypi.org/project/legacycrypt/

   (12) https://pypi.org/project/crypt_r/

   (13) https://manpages.debian.org/crypt_r(3)

   (14) https://pypi.org/project/standard-crypt/

   (15) https://pypi.org/project/deprecated-crypt-alternative/

   (16) https://pypi.org/project/filetype/

   (17) https://pypi.org/project/puremagic/

   (18) https://pypi.org/project/python-magic/

   (19) https://pypi.org/project/standard-imghdr/

   (20) https://pypi.org/project/standard-mailcap/

   (21) https://pypi.org/project/pynntp/

   (22) https://pypi.org/project/standard-nntplib/

   (23) https://pypi.org/project/pygame/

   (24) https://pypi.org/project/standard-pipes/

   (25) https://pypi.org/project/filetype/

   (26) https://pypi.org/project/puremagic/

   (27) https://pypi.org/project/python-magic/

   (28) https://pypi.org/project/standard-sndhdr/

   (29) https://pypi.org/project/python-pam/

   (30) https://pypi.org/project/standard-sunau/

   (31) https://pypi.org/project/telnetlib3/

   (32) https://pypi.org/project/Exscript/

   (33) https://pypi.org/project/standard-telnetlib/

   (34) https://pypi.org/project/standard-uu/

   (35) https://pypi.org/project/standard-xdrlib/

   (36) https://github.com/python/cpython/issues/104773

   (37) https://github.com/python/cpython/issues/104780


File: python.info,  Node: 2to3,  Next: builtins,  Prev: PEP 594 remove “baterias descarregadas” da biblioteca padrão,  Up: Módulos e APIs removidas

1.1.7.2 2to3
............

   * Remove o programa ‘2to3’ e o módulo ‘lib2to3’, já descontinuados no
     Python 3.11.  (Contribuição de Victor Stinner em gh-104780(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/104780


File: python.info,  Node: builtins,  Next: configparser<2>,  Prev: 2to3,  Up: Módulos e APIs removidas

1.1.7.3 builtins
................

   * Remove suporte aos descritores *note classmethod: 166. encadeados
     (introduzidos em gh-63272(1)).  Eles não podem mais serem usados
     para agrupar outros descritores como *note property: 194.  O design
     central desse recurso apresentava falhas e levou a problemas.  Para
     “passar” um *note classmethod: 166, considere usar o atributo
     ‘__wrapped__’ que foi adicionado no Python 3.10.  (Contribuição de
     Raymond Hettinger em gh-89519(2).)

   * Chamar *note frame.clear(): 280. em um quadro suspenso levanta
     *note RuntimeError: 195. (como sempre foi o caso para um quadro em
     execução).  (Contribuição de Irit Katriel em gh-79932(3).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/63272

   (2) https://github.com/python/cpython/issues/89519

   (3) https://github.com/python/cpython/issues/79932


File: python.info,  Node: configparser<2>,  Next: importlib metadata,  Prev: builtins,  Up: Módulos e APIs removidas

1.1.7.4 configparser
....................

   * Remove a classe não documentada ‘LegacyInterpolation’,
     descontinuada na docstring desde Python 3.2 e em tempo de execução
     desde Python 3.11.  (Contribuição de Hugo van Kemenade em
     gh-104886(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/104886


File: python.info,  Node: importlib metadata,  Next: locale,  Prev: configparser<2>,  Up: Módulos e APIs removidas

1.1.7.5 importlib.metadata
..........................

   * Remove o acesso descontinuado a subscrito (*note __getitem__():
     283.) para objetos *note EntryPoint: 284.  (Contribuição de Jason
     R.  Coombs em gh-113175(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/113175


File: python.info,  Node: locale,  Next: opcode,  Prev: importlib metadata,  Up: Módulos e APIs removidas

1.1.7.6 locale
..............

   * Remove a função ‘locale.resetlocale()’, descontinuada no Python
     3.11.  Use ‘locale.setlocale(locale.LC_ALL, "")’.  (Contribuição de
     Victor Stinner em gh-104783(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/104783


File: python.info,  Node: opcode,  Next: optparse,  Prev: locale,  Up: Módulos e APIs removidas

1.1.7.7 opcode
..............

   * Move ‘opcode.ENABLE_SPECIALIZATION’ para
     ‘_opcode.ENABLE_SPECIALIZATION’.  Este campo foi adicionado na
     versão 3.12, nunca foi documentado e não se destina ao uso externo.
     (Contribuição de Irit Katriel em gh-105481(1).)

   * Remove ‘opcode.is_pseudo()’, ‘opcode.MIN_PSEUDO_OPCODE’ e
     ‘opcode.MAX_PSEUDO_OPCODE’, que foram adicionados no Python 3.12,
     mas nunca foram documentados nem expostos através de *note dis: 38,
     e não foram planejados para serem usados externamente.
     (Contribuição de Irit Katriel em gh-105481(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/105481

   (2) https://github.com/python/cpython/issues/105481


File: python.info,  Node: optparse,  Next: pathlib<2>,  Prev: opcode,  Up: Módulos e APIs removidas

1.1.7.8 optparse
................

   * Este módulo não é mais considerado *note suavemente descontinuado:
     209.  Enquanto o *note argparse: 6. continua sendo o preferido para
     novos projetos que não estão usando uma biblioteca de processamento
     de argumentos de linha de comando de terceiros, há aspectos da
     maneira como ‘argparse’ funciona que significam que o módulo
     ‘optparse’ de nível inferior pode fornecer uma base melhor para
     'escrever' bibliotecas de processamento de argumentos e para
     implementar aplicações de linha de comando que aderem mais
     estritamente do que ‘argparse’ a várias convenções de processamento
     de linha de comando Unix que se originam no comportamento da função
     C ‘getopt()’.  (Contribuição de Alyssa Coghlan e Serhiy Storchaka
     em gh-126180(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126180


File: python.info,  Node: pathlib<2>,  Next: re<2>,  Prev: optparse,  Up: Módulos e APIs removidas

1.1.7.9 pathlib
...............

   * Remove a capacidade de usar objetos *note Path: 229. como
     gerenciadores de contexto.  Essa funcionalidade foi descontinuada e
     não tinha efeito desde o Python 3.9.  (Contribuição de Barney Gale
     em gh-83863(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/83863


File: python.info,  Node: re<2>,  Next: tkinter tix,  Prev: pathlib<2>,  Up: Módulos e APIs removidas

1.1.7.10 re
...........

   * Remove a função ‘re.template()’ não documentada, descontinuada e
     quebrada e o sinalizador ‘re.TEMPLATE’ / ‘re.T’.  (Contribuição de
     Serhiy Storchaka e Nikita Sobolev em gh-105687(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/105687


File: python.info,  Node: tkinter tix,  Next: turtle,  Prev: re<2>,  Up: Módulos e APIs removidas

1.1.7.11 tkinter.tix
....................

   * Remove o módulo ‘tkinter.tix’, descontinuado no Python 3.6.  A
     biblioteca Tix de terceiros que o módulo empacota não é mantida.
     (Contribuição de Zachary Ware em gh-75552(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/75552


File: python.info,  Node: turtle,  Next: typing<2>,  Prev: tkinter tix,  Up: Módulos e APIs removidas

1.1.7.12 turtle
...............

   * Remove o método ‘RawTurtle.settiltangle()’, descontinuado na
     documentação desde o Python 3.1 e em tempo de execução desde o
     Python 3.11.  (Contribuição de Hugo van Kemenade em gh-104876(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/104876


File: python.info,  Node: typing<2>,  Next: unittest,  Prev: turtle,  Up: Módulos e APIs removidas

1.1.7.13 typing
...............

   * Remove os espaços de nomes ‘typing.io’ e ‘typing.re’,
     descontinuados desde o Python 3.8.  Os itens nesses espaços de
     nomes podem ser importados diretamente do módulo *note typing: 104.
     (Contribuição de Sebastian Rittau em gh-92871(1).)

   * Remove o método de argumento nomeado de criação de tipos *note
     TypedDict: 162, descontinuados no Python 3.11.  (Contribuição de
     Tomas Roun em gh-104786(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/92871

   (2) https://github.com/python/cpython/issues/104786


File: python.info,  Node: unittest,  Next: urllib,  Prev: typing<2>,  Up: Módulos e APIs removidas

1.1.7.14 unittest
.................

   * Remove as seguintes funções *note unittest: 106, descontinuadas no
     Python 3.11:

        * ‘unittest.findTestCases()’

        * ‘unittest.makeSuite()’

        * ‘unittest.getTestCaseNames()’

     Em vez delas, use os métodos de *note TestLoader: 28e.:

        * *note loadTestsFromModule(): 28f.

        * *note loadTestsFromTestCase(): 290.

        * *note getTestCaseNames(): 291.

     (Contribuição de Hugo van Kemenade em gh-104835(1).)

   * Remove o método ‘TestProgram.usageExit()’ não testado e não
     documentado, descontinuado no Python 3.11.  (Contribuição de Hugo
     van Kemenade em gh-104992(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/104835

   (2) https://github.com/python/cpython/issues/104992


File: python.info,  Node: urllib,  Next: webbrowser,  Prev: unittest,  Up: Módulos e APIs removidas

1.1.7.15 urllib
...............

   * Remove os parâmetros 'cafile', 'capath' e 'cadefault' da função
     *note urllib.request.urlopen(): 293, descontinuada no Python 3.6.
     Em vez disso, use o parâmetro 'context' com uma instância de *note
     SSLContext: 294.  A função *note ssl.SSLContext.load_cert_chain():
     295. pode ser usada para carregar certificados específicos ou deixe
     *note ssl.create_default_context(): 155. selecionar os certificados
     de autoridade certificadora (AC) confiável do sistema operacional.
     (Contribuição de Victor Stinner em gh-105382(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/105382


File: python.info,  Node: webbrowser,  Prev: urllib,  Up: Módulos e APIs removidas

1.1.7.16 webbrowser
...................

   * Remove a classe ‘MacOSX’ não testada e não documentada,
     descontinuada no Python 3.11.  Use a classe ‘MacOSXOSAScript’
     (introduzida no Python 3.2).  (Contribuição de Hugo van Kemenade em
     gh-104804(1).)

   * Remove o atributo descontinuado ‘MacOSXOSAScript._name’.  Use o
     atributo *note MacOSXOSAScript.name: 297.  (Contribuição de Nikita
     Sobolev em gh-105546(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/104804

   (2) https://github.com/python/cpython/issues/105546


File: python.info,  Node: Novas descontinuações,  Next: Alterações de bytecode do CPython,  Prev: Módulos e APIs removidas,  Up: O que há de novo no Python 3 13

1.1.8 Novas descontinuações
---------------------------

   * *note Funções definidas pelo usuário: 299.:

        * A atribuição ao atributo *note __code__: 29a. de uma função
          onde o tipo do novo objeto código não corresponde ao tipo da
          função está descontinuada.  Os diferentes tipos são: função
          simples, gerador, gerador assíncrono e corrotina.
          (Contribuição de Irit Katriel em gh-81137(1).)

   * *note array: 7.:

        * Descontinua o código de formato ‘'u'’ (‘wchar_t’).  Este
          código de formato foi descontinuado na documentação desde o
          Python 3.3 e será removido no Python 3.16.  Use o código de
          formato ‘'w'’ (*note Py_UCS4: 29b.) para caracteres Unicode.
          (Contribuição de Hugo van Kemenade em gh-80480(2).)

   * *note ctypes: 2a.:

        * Descontinua a função não documentada ‘SetPointerType()’, que
          será removida no Python 3.15.  (Contribuição de Victor Stinner
          em gh-105733(3).)

        * *note Descontinua suavemente: 209. a função *note ARRAY():
          29c. em favor da multiplicação ‘type * length’.  (Contribuição
          de Victor Stinner em gh-105733(4).)

   * *note decimal: 36.:

        * Deprecate the non-standard and undocumented *note Decimal:
          29d. format specifier ‘'N'’, which is only supported in the
          ‘decimal’ module’s C implementation.  Scheduled to be removed
          in Python 3.18.  (Contributed by Serhiy Storchaka in
          gh-89902(5).)

   * *note dis: 38.:

        * Descontinua o separador ‘HAVE_ARGUMENT’.  Em vez disso,
          Verifique a associação em *note hasarg: 29e.  (Contribuição de
          Irit Katriel em gh-109319(6).)

   * *note gettext: 63.:

        * Descontinua números não inteiros como argumentos para funções
          e métodos que consideram formas plurais no módulo ‘gettext’,
          ainda que nenhuma tradução tenha sido encontrada.
          (Contribuição de Serhiy Storchaka em gh-88434(7).)

   * *note glob: 64.:

        * Descontinua as funções não documentadas ‘glob0()’ e ‘glob1()’.
          Em vez disso, use *note glob(): 29f. e passe um *note objeto
          caminho ou similar: 2a0. especificando o diretório raiz para o
          parâmetro 'root_dir'.  (Contribuição de Barney Gale em
          gh-117337(8).)

   * *note http.server: 72.:

        * Descontinua *note CGIHTTPRequestHandler: 2a1, a ser removido
          no Python 3.15.  Servidores HTTP CGI baseados em processos
          estão fora de moda há muito tempo.  Este código estava
          desatualizado, sem manutenção e raramente era usado.  Ele tem
          um alto potencial para bugs de segurança e funcionalidade.
          (Contribuição de Gregory P. Smith em gh-109096(9).)

        * Descontinua o sinalizador ‘--cgi’ para a interface de linha de
          comando ‘python -m http.server’, a ser removido no Python
          3.15.  (Contribuição de Gregory P. Smith em gh-109096(10).)

   * *note mimetypes: 8f.:

        * *note Descontinua suavemente: 209. argumentos caminho de
          arquivo para *note guess_type(): 208, use *note
          guess_file_type(): 207. em vez disso.  (Contribuição de Serhiy
          Storchaka em gh-66543(11).)

   * *note re: b9.:

        * Descontinua a passagem dos argumentos opcionais 'maxsplit',
          'count' ou 'flags' como argumentos posicionais para as funções
          de nível de módulo *note split(): 2a2, *note sub(): 2a3. e
          *note subn(): 2a4.  Esses parâmetros se tornarão *note
          somente-nomeados: 2a5. em uma versão futura do Python.
          (Contribuição de Serhiy Storchaka em gh-56166(12).)

   * *note pathlib: a4.:

        * Descontinua *note PurePath.is_reserved(): 2a6, a ser removido
          no Python 3.15.  Use *note os.path.isreserved(): 223. para
          detectar caminhos reservados no Windows.  (Contribuição de
          Barney Gale em gh-88569(13).)

   * *note platform: aa.:

        * Descontinua *note java_ver(): 2a7, a ser removida no Python
          3.15.  Esta função é útil apenas para suporte a Jython, tem
          uma API confusa e é amplamente não testada.  (Contribuição de
          Nikita Sobolev em gh-116349(14).)

   * *note pydoc: b5.:

        * Descontinua a função não documentada ‘ispackage()’.
          (Contribuição de Zackery Spytz em gh-64020(15).)

   * *note sqlite3: cf.:

        * Descontinua a passagem de mais de um argumento posicional para
          a função *note connect(): 2a8. e o construtor *note
          Connection: 245.  Os parâmetros restantes se tornarão
          somente-nomeados no Python 3.15.  (Contribuição de Erlend E.
          Aasland em gh-107948(16).)

        * Descontinua a passagem de nome, número de argumentos e o
          chamável como argumentos nomeados para *note
          Connection.create_function(): 2a9. e *note
          Connection.create_aggregate(): 2aa. Esses parâmetros se
          tornarão somente-posicionais no Python 3.15.  (Contribuição de
          Erlend E. Aasland em gh-108278(17).)

        * Descontinua a passagem do chamável de função de retorno como
          argumento nomeado para os métodos *note set_authorizer(): 2ab,
          *note set_progress_handler(): 2ac. e *note
          set_trace_callback(): 2ad. da classe *note Connection: 245.
          Os chamáveis de função de retorno se tornarão
          somente-posicionais no Python 3.15.  (Contribuição de Erlend
          E.  Aasland em gh-108278(18).)

   * *note sys: d9.:

        * Descontinua a função *note _enablelegacywindowsfsencoding():
          2ae, para ser removida no Python 3.16.  Em vez disso, use a
          variável de ambiente *note PYTHONLEGACYWINDOWSFSENCODING: 2af.
          (Contribuição de Inada Naoki em gh-73427(19).)

   * *note tarfile: de.:

        * Descontinua o atributo ‘TarFile.tarfile’ não documentado e não
          utilizado, a ser removido no Python 3.16.  (Contribuição em
          gh-115256(20).)

   * *note traceback: fe.:

        * Descontinua o atributo *note TracebackException.exc_type: 25d.
          Em vez disso, use *note TracebackException.exc_type_str: 25b.
          (Contribuição de Irit Katriel em gh-112332(21).)

   * *note typing: 104.:

        * Descontinua a não-documentada sintaxe de argumento nomeado
          para criação de classes *note NamedTuple: 2b0. (por exemplo,
          ‘Point = NamedTuple("Point", x=int, y=int)’), para ser
          removido no Python 3.15.  Em vez disso, use as sintaxes
          baseada em classe ou a funcional.  (Contribuição de Alex
          Waygood in gh-105566(22).)

        * Descontinua a omissão do parâmetro 'fields' ao criar uma
          classe *note NamedTuple: 2b0. ou *note typing.TypedDict: 162.
          e descontinua a passagem de ‘None’ para o parâmetro 'fields'
          de ambos os tipos.  O Python 3.15 exigirá uma sequência válida
          para o parâmetro 'fields'.  Para criar uma classe NamedTuple
          com zero campos, use ‘class NT(NamedTuple): pass’ ou ‘NT =
          NamedTuple("NT", ())’.  Para criar uma classe TypedDict com
          zero campos, use ‘class TD(TypedDict): pass’ ou ‘TD =
          TypedDict("TD", {})’.  (Contribuição de Alex Waygood em
          gh-105566(23) e gh-105570(24).)

        * Descontinua o decorador de função *note
          typing.no_type_check_decorator(): 2b1. para ser removido no
          Python 3.15.  Depois de oito anos no módulo *note typing: 104,
          ele ainda não foi implementado por nenhum dos principais
          verificadores de tipos.  (Contribuição de Alex Waygood em
          gh-106309(25).)

        * Descontinua *note typing.AnyStr: 2b2.  No Python 3.16, isso
          será removido de ‘typing.__all__’, e uma *note
          DeprecationWarning: 1a5. será levantada em tempo de execução
          quando isso for importado ou acessado.  Será removido
          completamente em Python 3.18.  Em vez disso, use a nova *note
          sintaxe de parâmetro de tipo: 2b3.  (Contribuição de Michael
          The em gh-107116(26).)

   * *note wave: 113.:

        * Descontinua os métodos *note getmark(): 2b4, ‘setmark()’ e
          *note getmarkers(): 2b5. das classes *note Wave_read: 2b6. e
          *note Wave_write: 2b7, a serem removidos no Python 3.15.
          (Contribuição de Victor Stinner em gh-105096(27).)

* Menu:

* Remoção pendente no Python 3.14: Remoção pendente no Python 3 14.
* Remoção pendente no Python 3.15: Remoção pendente no Python 3 15.
* Remoção pendente no Python 3.16: Remoção pendente no Python 3 16.
* Remoção pendente no Python 3.17: Remoção pendente no Python 3 17.
* Remoção pendente no Python 3.18: Remoção pendente no Python 3 18.
* Remoção pendente em versões futuras::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/81137

   (2) https://github.com/python/cpython/issues/80480

   (3) https://github.com/python/cpython/issues/105733

   (4) https://github.com/python/cpython/issues/105733

   (5) https://github.com/python/cpython/issues/89902

   (6) https://github.com/python/cpython/issues/109319

   (7) https://github.com/python/cpython/issues/88434

   (8) https://github.com/python/cpython/issues/117337

   (9) https://github.com/python/cpython/issues/109096

   (10) https://github.com/python/cpython/issues/109096

   (11) https://github.com/python/cpython/issues/66543

   (12) https://github.com/python/cpython/issues/56166

   (13) https://github.com/python/cpython/issues/88569

   (14) https://github.com/python/cpython/issues/116349

   (15) https://github.com/python/cpython/issues/64020

   (16) https://github.com/python/cpython/issues/107948

   (17) https://github.com/python/cpython/issues/108278

   (18) https://github.com/python/cpython/issues/108278

   (19) https://github.com/python/cpython/issues/73427

   (20) https://github.com/python/cpython/issues/115256

   (21) https://github.com/python/cpython/issues/112332

   (22) https://github.com/python/cpython/issues/105566

   (23) https://github.com/python/cpython/issues/105566

   (24) https://github.com/python/cpython/issues/105570

   (25) https://github.com/python/cpython/issues/106309

   (26) https://github.com/python/cpython/issues/107116

   (27) https://github.com/python/cpython/issues/105096


File: python.info,  Node: Remoção pendente no Python 3 14,  Next: Remoção pendente no Python 3 15,  Up: Novas descontinuações

1.1.8.1 Remoção pendente no Python 3.14
.......................................

   * *note argparse: 6.: Os parâmetros 'type', 'choices' e 'metavar' de
     ‘argparse.BooleanOptionalAction’ foram descontinuados e serão
     removidos na versão 3.14.  (Contribuição de Nikita Sobolev em
     gh-92248(1).)

   * *note ast: 8.: os seguintes recursos foram descontinuados na
     documentação desde Python 3.8, agora fazem com que um *note
     DeprecationWarning: 1a5. seja emitido em tempo de execução quando
     eles são acessados ou usados, e serão removidos no Python 3.14:

        * ‘ast.Num’

        * ‘ast.Str’

        * ‘ast.Bytes’

        * ‘ast.NameConstant’

        * ‘ast.Ellipsis’

     Em vez disso, use *note ast.Constant: 2b9.  (Contribuição de Serhiy
     Storchaka em gh-90953(2).)

   * *note asyncio: a.:

        * As classes filhas dos observadores *note
          MultiLoopChildWatcher: 2ba, *note FastChildWatcher: 2bb, *note
          AbstractChildWatcher: 2bc. e *note SafeChildWatcher: 2bd.
          foram descontinuadas e serão removidas no Python 3.14.
          (Contribuição de Kumar Aditya em gh-94597(3).)

        * *note asyncio.set_child_watcher(): 2be, *note
          asyncio.get_child_watcher(): 2bf, *note
          asyncio.AbstractEventLoopPolicy.set_child_watcher(): 2c0. e
          *note asyncio.AbstractEventLoopPolicy.get_child_watcher():
          2c1. foram descontinuados e serão removidos no Python 3.14.
          (Contribuição de Kumar Aditya em gh-94597(4).)

        * O método *note get_event_loop(): 2c2. da política de laço de
          eventos padrão agora emite um *note DeprecationWarning: 1a5.
          se não houver nenhum laço de eventos atual definido e decidir
          criar um.  (Contribuição de Serhiy Storchaka e Guido van
          Rossum em gh-100160(5).)

   * *note builtins: 12.: ‘bool(NotImplemented)’ now emits a *note
     DeprecationWarning: 1a5. and will raise a *note TypeError: 2c3. in
     Python 3.14.  (Contributed by Jelle Zijlstra in gh-118767(6).)

   * *note email: 3b.: Descontinua o parâmetro 'isdst' em *note
     email.utils.localtime(): 2c4.  (Contribuição de Alan Williams em
     gh-72346(7).)

   * *note importlib.abc: 78. descontinuou as classes:

        * ‘importlib.abc.ResourceReader’

        * ‘importlib.abc.Traversable’

        * ‘importlib.abc.TraversableResources’

     Em vez disso, use classes de *note importlib.resources.abc: 7c.:

        * *note importlib.resources.abc.Traversable: 1f3.

        * *note importlib.resources.abc.TraversableResources: 2c5.

     (Contribuição de Jason R. Coombs e Hugo van Kemenade em
     gh-93963(8).)

   * *note itertools: 81. tinha suporte não documentado, ineficiente,
     historicamente cheio de bugs e inconsistente para operações de
     cópia, cópia profunda e serialização com pickle.  Isso será
     removido na versão 3.14 para uma redução significativa no volume de
     código e na carga de manutenção.  (Contribuição de Raymond
     Hettinger em gh-101588(9).)

   * *note multiprocessing: 94.: o método de inicialização padrão será
     alterado para um mais seguro no Linux, BSDs e outras plataformas
     POSIX não-macOS onde ‘'fork'’ é atualmente o padrão (gh-84559(10)).
     Adicionar um aviso de tempo de execução sobre isso foi considerado
     muito perturbador, pois não se espera que a maior parte do código
     se importe.  Use as APIs *note get_context(): 2c6. ou *note
     set_start_method(): 2c7. para especificar explicitamente quando seu
     código 'requer' ‘'fork'’.  Veja *note Contextos e métodos de
     inicialização: 2c8.

   * *note pathlib: a4.: *note is_relative_to(): 2c9. e *note
     relative_to(): 2ca.: passar argumentos adicionais foi
     descontinuado.

   * *note pkgutil: a9.: *note find_loader(): 2cb. e *note get_loader():
     2cc. agora levantam *note DeprecationWarning: 1a5.; use *note
     importlib.util.find_spec(): 2cd.  (Contribuição de Nikita Sobolev
     em gh-97850(11).)

   * *note pty: b1.:

        * ‘master_open()’: use *note pty.openpty(): 2ce.

        * ‘slave_open()’: use *note pty.openpty(): 2ce.

   * *note sqlite3: cf.:

        * *note version: 2cf. e *note version_info: 2d0.

        * *note execute(): 2d1. e *note executemany(): 2d2. se *note
          espaços reservados nomeados: 2d3. forem usados e 'parameters'
          for uma sequência em vez de um *note dict: 256. .

   * *note urllib: 108.: ‘urllib.parse.Quoter’ está obsoleto: não foi
     planejado para ser uma API pública.  (Contribuição de Gregory P.
     Smith em gh-88168(12).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/92248

   (2) https://github.com/python/cpython/issues/90953

   (3) https://github.com/python/cpython/issues/94597

   (4) https://github.com/python/cpython/issues/94597

   (5) https://github.com/python/cpython/issues/100160

   (6) https://github.com/python/cpython/issues/118767

   (7) https://github.com/python/cpython/issues/72346

   (8) https://github.com/python/cpython/issues/93963

   (9) https://github.com/python/cpython/issues/101588

   (10) https://github.com/python/cpython/issues/84559

   (11) https://github.com/python/cpython/issues/97850

   (12) https://github.com/python/cpython/issues/88168


File: python.info,  Node: Remoção pendente no Python 3 15,  Next: Remoção pendente no Python 3 16,  Prev: Remoção pendente no Python 3 14,  Up: Novas descontinuações

1.1.8.2 Remoção pendente no Python 3.15
.......................................

   * O sistema de importação:

        * A definição de *note __cached__: 2d5. em um módulo enquanto
          falha na definição de *note __spec__.cached: 2d6. 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.  (gh-97879(1))

        * A definição de *note __package__: 2d7. em um módulo enquanto
          falha na definição de *note __spec__.parent: 2d8. está
          descontinuado.  No Python 3.15, ‘__package__’ deixará de ser
          definido ou levado em consideração pelo sistema de importação
          ou pela biblioteca padrão.  (gh-97879(2))

   * *note ctypes: 2a.:

        * A função não documentada ‘ctypes.SetPointerType()’ foi
          descontinuada desde o Python 3.13.

   * *note http.server: 72.:

        * A classe obsoleta e raramente usada *note
          CGIHTTPRequestHandler: 2a1. foi descontinuada desde o Python
          3.13.  Não existe substituição direta.  'Qualquer coisa' é
          melhor que CGI para fazer a interface de um servidor web com
          um manipulador de requisição.

        * O sinalizador ‘--cgi’ para a interface de linha de comando
          ‘python -m http.server’ foi descontinuado desde o Python 3.13.

   * *note importlib: 77.:

        * Método ‘load_module()’: use ‘exec_module()’.

   * *note locale: 86.:

        * A função *note getdefaultlocale(): 2d9. foi descontinuada
          desde o Python 3.11.  Sua remoção foi planejada originalmente
          para o Python 3.13 (gh-90817(3)), mas foi adiada para o Python
          3.15.  Em vez disso, use *note getlocale(): 2da, *note
          setlocale(): 2db. e *note getencoding(): 2dc.  (Contribuição
          de Hugo van Kemenade em gh-111187(4).)

   * *note pathlib: a4.:

        * *note PurePath.is_reserved(): 2a6. foi descontinuado desde o
          Python 3.13.  Use *note os.path.isreserved(): 223. para
          detectar caminhos reservados no Windows.

   * *note platform: aa.:

        * *note java_ver(): 2a7. foi descontinuada desde o Python 3.13.
          Esta função é útil apenas para suporte Jython, tem uma API
          confusa e é amplamente não testada.

   * *note sysconfig: db.:

        * O argumento 'check_home' de *note sysconfig.is_python_build():
          2dd. foi descontinuado desde o Python 3.12.

   * *note threading: ed.:

        * *note RLock(): 2de. não aceitará argumentos no Python 3.15.  A
          passagem quaisquer argumentos foi descontinuada desde o Python
          3.14, pois a versão Python não permite nenhum argumento, mas a
          versão C permite qualquer número de argumentos posicionais ou
          nomeados, ignorando todos os argumentos.

   * *note types: 103.:

        * *note types.CodeType: 2df.: o acesso a *note co_lnotab: 2e0.
          foi descontinuado na PEP 626(5) desde 3.10 e foi planejado
          para ser removido em 3.12, mas só recebeu uma *note
          DeprecationWarning: 1a5. adequada em 3.12.  Pode ser removido
          em 3.15.  (Contribuição de Nikita Sobolev em gh-101866(6).)

   * *note typing: 104.:

        * A não-documentada sintaxe de argumento nomeado para criar
          classes *note NamedTuple: 2b0. (por exemplo, ‘Point =
          NamedTuple("Point", x=int, y=int)’) foi descontinuada desde o
          Python 3.13.  Em vez disso, use as sintaxes baseada em classe
          ou funcional.

        * Ao usar a sintaxe funcional de *note TypedDict: 162.s, não
          passar um valor para o parâmetro 'fields' (‘TD =
          TypedDict("TD")’) ou passar ‘None’ (‘TD = TypedDict("TD",
          None)’) foi está descontinuado desde o Python 3.13.  Use
          ‘class TD(TypedDict): pass’ ou ‘TD = TypedDict("TD", {})’ para
          criar uma classe TypedDict com nenhum campo.

        * A função decoradora *note typing.no_type_check_decorator():
          2b1. foi descontinuada desde o Python 3.13.  Após oito anos no
          módulo *note typing: 104, ela ainda não foi suportada por
          nenhum verificador de tipo importante.

   * *note wave: 113.:

        * Os métodos *note getmark(): 2b4, ‘setmark()’ e *note
          getmarkers(): 2b5. das classes *note Wave_read: 2b6. e *note
          Wave_write: 2b7. foram descontinuados desde o Python 3.13.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/97879

   (2) https://github.com/python/cpython/issues/97879

   (3) https://github.com/python/cpython/issues/90817

   (4) https://github.com/python/cpython/issues/111187

   (5) https://peps.python.org/pep-0626/

   (6) https://github.com/python/cpython/issues/101866


File: python.info,  Node: Remoção pendente no Python 3 16,  Next: Remoção pendente no Python 3 17,  Prev: Remoção pendente no Python 3 15,  Up: Novas descontinuações

1.1.8.3 Remoção pendente no Python 3.16
.......................................

   * O sistema de importação:

        * A definição de *note __loader__: 2e2. em um módulo enquanto
          falha na definição de *note __spec__.loader: 2e3. está
          descontinuado.  No Python 3.16, ‘__loader__’ deixará de ser
          definido ou levado em consideração pelo sistema de importação
          ou pela biblioteca padrão.

   * *note array: 7.:

        * O código de formato ‘'u'’ (‘wchar_t’) foi descontinuado na
          documentação desde o Python 3.3 e do ambiente de execução
          desde o Python 3.13.  Em vez disso, use o código de formato
          ‘'w'’ (*note Py_UCS4: 29b.) para caracteres Unicode.

   * *note asyncio: a.:

        * ‘asyncio.iscoroutinefunction()’ foi descontinuado e será
          removido no Python 3.16, use *note
          inspect.iscoroutinefunction(): 2e4. em vez disso.
          (Contribuição de Jiahao Li e Kumar Aditya em gh-122875(1).)

   * *note builtins: 12.:

        * A inversão bit a bit em tipos booleanos, ‘~True’ ou ‘~False’
          foi descontinuada desde o Python 3.12, pois produz resultados
          surpreendentes e não intuitivos (‘-2’ e ‘-1’).  Em vez disso,
          use ‘not x’ para a negação lógica de um booleano.  No caso
          raro de você precisar da inversão bit a bit do inteiro
          subjacente, converta para ‘int’ explicitamente (‘~int(x)’).

   * *note shutil: c5.:

        * A exceção ‘ExecError’ foi descontinuada desde o Python 3.14.
          Ela não foi usada por nenhuma função em ‘shutil’ desde o
          Python 3.4, e agora é um alias de *note RuntimeError: 195.

   * *note symtable: d8.:

        * O método *note Class.get_methods: 2e5. foi descontinuado desde
          o Python 3.14.

   * *note sys: d9.:

        * A função *note _enablelegacywindowsfsencoding(): 2ae. foi
          descontinuada desde o Python 3.13.  Em vez disso, use a
          variável de ambiente *note PYTHONLEGACYWINDOWSFSENCODING: 2af.

   * *note tarfile: de.:

        * O atributo não documentado e não utilizado ‘TarFile.tarfile’
          foi descontinuado desde o Python 3.13.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/122875


File: python.info,  Node: Remoção pendente no Python 3 17,  Next: Remoção pendente no Python 3 18,  Prev: Remoção pendente no Python 3 16,  Up: Novas descontinuações

1.1.8.4 Remoção pendente no Python 3.17
.......................................

   * *note collections.abc: 1e.:

        - *note collections.abc.ByteString: 2e7. está agendado para
          remoção no Python 3.17.

          Use ‘isinstance(obj, collections.abc.Buffer)’ para testar se
          ‘obj’ implementa o *note protocolo de buffer: 2e8. em tempo de
          execução.  Para uso em anotações de tipo, use *note Buffer:
          2e9. ou uma união que especifique explicitamente os tipos
          suportados pelo seu código (por exemplo, ‘bytes | bytearray |
          memoryview’).

          ‘ByteString’ foi originalmente concebido para ser uma classe
          abstrata que serviria como um supertipo de *note bytes: 1c2. e
          *note bytearray: 2ea.  No entanto, como o ABC nunca teve
          métodos, saber que um objeto era uma instância de ‘ByteString’
          nunca lhe dizia nada de útil sobre o objeto.  Outros tipos
          comuns de buffer, como *note memoryview: 2eb, também nunca
          foram entendidos como subtipos de ‘ByteString’ (seja em tempo
          de execução ou por verificadores de tipo estáticos).

          Veja PEP 688(1) para mais detalhes.  (Contribuição de Shantanu
          Jain em gh-91896(2).)

   * *note typing: 104.:

        - Antes do Python 3.14, as uniões antigas eram implementadas
          usando a classe privada ‘typing._UnionGenericAlias’.  Essa
          classe não é mais necessária para a implementação, mas foi
          mantida para compatibilidade com versões anteriores, com
          remoção prevista para o Python 3.17.  Os usuários devem usar
          auxiliares de introspecção documentados, como *note
          typing.get_origin(): 2ec. e *note typing.get_args(): 2ed, em
          vez de depender de detalhes de implementação privada.

        - *note typing.ByteString: 2ee, obsoleto desde o Python 3.9,
          está programado para ser removido no Python 3.17.

          Use ‘isinstance(obj, collections.abc.Buffer)’ para testar se
          ‘obj’ implementa o *note protocolo de buffer: 2e8. em tempo de
          execução.  Para uso em anotações de tipo, use *note Buffer:
          2e9. ou uma união que especifique explicitamente os tipos
          suportados pelo seu código (por exemplo, ‘bytes | bytearray |
          memoryview’).

          ‘ByteString’ foi originalmente concebido para ser uma classe
          abstrata que serviria como um supertipo de *note bytes: 1c2. e
          *note bytearray: 2ea.  No entanto, como o ABC nunca teve
          métodos, saber que um objeto era uma instância de ‘ByteString’
          nunca lhe dizia nada de útil sobre o objeto.  Outros tipos
          comuns de buffer, como *note memoryview: 2eb, também nunca
          foram entendidos como subtipos de ‘ByteString’ (seja em tempo
          de execução ou por verificadores de tipo estáticos).

          Veja PEP 688(3) para mais detalhes.  (Contribuição de Shantanu
          Jain em gh-91896(4).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0688/#current-options

   (2) https://github.com/python/cpython/issues/91896

   (3) https://peps.python.org/pep-0688/#current-options

   (4) https://github.com/python/cpython/issues/91896


File: python.info,  Node: Remoção pendente no Python 3 18,  Next: Remoção pendente em versões futuras,  Prev: Remoção pendente no Python 3 17,  Up: Novas descontinuações

1.1.8.5 Remoção pendente no Python 3.18
.......................................

   * *note decimal: 36.:

        * O especificador de formato de *note Decimal: 29d. não padrão e
          não documentado ‘'N'’, que só é suportado na implementação C
          do módulo ‘decimal’, foi descontinuada desde o Python 3.13.
          (Contribuição de Serhiy Storchaka em gh-89902(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/89902


File: python.info,  Node: Remoção pendente em versões futuras,  Prev: Remoção pendente no Python 3 18,  Up: Novas descontinuações

1.1.8.6 Remoção pendente em versões futuras
...........................................

As APIs a seguir serão removidas no futuro, embora atualmente não haja
uma data agendada para sua remoção.

   * *note argparse: 6.: o aninhamento de grupos de argumentos e o
     aninhamento de grupos mutuamente exclusivos estão descontinuados.

   * *note builtins: 12.:

        * Geradores: a assinatura ‘throw(type, exc, tb)’ e ‘athrow(type,
          exc, tb)’ está descontinuada: use ‘throw(exc)’ e
          ‘athrow(exc)’, a assinatura do argumento único.

        * Atualmente Python aceita literais numéricos imediatamente
          seguidos por palavras reservadas como, por exemplo, ‘0in x’,
          ‘1or x’, ‘0if 1else 2’.  Ele permite expressões confusas e
          ambíguas como ‘[0x1for x in y]’ (que pode ser interpretada
          como ‘[0x1 for x in y]’ ou ‘[0x1f or x in y]’).  Um aviso de
          sintaxe é levantado se o literal numérico for imediatamente
          seguido por uma das palavras reservadas *note and: 2f1, *note
          else: 18c, *note for: 2f2, *note if: 2f3, *note in: 2f4. ,
          *note is: 2f5. e *note or: 2f6.  Em uma versão futura, será
          alterado para um erro de sintaxe.  (gh-87999(1))

        * Suporte para métodos ‘__index__()’ e ‘__int__()’ retornando
          tipo não-int: esses métodos serão necessários para retornar
          uma instância de uma subclasse estrita de *note int: 257.

        * Suporte para o método ‘__float__()’ retornando uma subclasse
          estrita de *note float: 2f7.: esses métodos serão necessários
          para retornar uma instância de *note float: 2f7.

        * Suporte para o método ‘__complex__()’ retornando uma subclasse
          estrita de *note complex: 2f8.: esses métodos serão
          necessários para retornar uma instância de *note complex: 2f8.

        * Delegação do método ‘int()’ para o ‘__trunc__()’.

        * Passar um número complexo como argumento 'real' ou 'imag' no
          construtor *note complex(): 2f8. agora está descontinuado;
          deve ser passado apenas como um único argumento posicional.
          (Contribuição de Serhiy Storchaka em gh-109218(2).)

   * *note calendar: 14.: as constantes ‘calendar.January’ e
     ‘calendar.February’ foram descontinuadas e substituídas por *note
     calendar.JANUARY: 2f9. e *note calendar.FEBRUARY: 2fa.
     (Contribuição de Prince Roshan em gh-103636(3).)

   * *note codeobject.co_lnotab: 2e0.: use o método *note
     codeobject.co_lines(): 2fb.

   * *note datetime: 30.:

        * *note utcnow(): 2fc.: use
          ‘datetime.datetime.now(tz=datetime.UTC)’.

        * *note utcfromtimestamp(): 2fd.: use
          ‘datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)’.

   * *note gettext: 63.: o valor de plural deve ser um número inteiro.

   * *note importlib: 77.:

        * O parâmetro 'debug_override' de *note cache_from_source():
          2fe. foi descontinuado: use o parâmetro 'optimization'.

   * *note importlib.metadata: 7a.:

        * Interface de tupla ‘EntryPoints’.

        * ‘None’ implícito nos valores de retorno.

   * *note logging: 87.: o método ‘warn()’ foi descontinuado desde o
     Python 3.3, use *note warning(): 2ff.

   * *note mailbox: 8b.: o uso da entrada StringIO e do modo de texto
     foi descontinuado; em vez disso, use BytesIO e o modo binário.

   * *note os: a1.: chame *note os.register_at_fork(): 300. em processo
     multithread.

   * ‘pydoc.ErrorDuringImport’: um valor de tupla para o parâmetro
     'exc_info' foi descontinuado, use uma instância de exceção.

   * *note re: b9.: regras mais rigorosas agora são aplicadas para
     referências numéricas de grupos e nomes de grupos em expressões
     regulares.  Apenas a sequência de dígitos ASCII agora é aceita como
     referência numérica.  O nome do grupo em padrões de bytes e strings
     de substituição agora pode conter apenas letras e dígitos ASCII e
     sublinhado.  (Contribuição de Serhiy Storchaka em gh-91760(4).)

   * Módulos ‘sre_compile’, ‘sre_constants’ e ‘sre_parse’.

   * *note shutil: c5.: o parâmetro 'onerror' de *note rmtree(): 301.
     foi descontinuado no Python 3.12; use o parâmetro 'onexc'.

   * Protocolos e opções de *note ssl: d0.

        * *note ssl.SSLContext: 294. sem argumento de protocolo foi
          descontinuado.

        * *note ssl.SSLContext: 294.: *note set_npn_protocols(): 302. e
          ‘selected_npn_protocol()’ foram descontinuados, use ALPN.

        * Opções de ‘ssl.OP_NO_SSL*’

        * Opções de ‘ssl.OP_NO_TLS*’

        * ‘ssl.PROTOCOL_SSLv3’

        * ‘ssl.PROTOCOL_TLS’

        * ‘ssl.PROTOCOL_TLSv1’

        * ‘ssl.PROTOCOL_TLSv1_1’

        * ‘ssl.PROTOCOL_TLSv1_2’

        * ‘ssl.TLSVersion.SSLv3’

        * ‘ssl.TLSVersion.TLSv1’

        * ‘ssl.TLSVersion.TLSv1_1’

   * Métodos de *note threading: ed.:

        * ‘threading.Condition.notifyAll()’: use *note notify_all():
          303.

        * ‘threading.Event.isSet()’: use *note is_set(): 304.

        * ‘threading.Thread.isDaemon()’, *note
          threading.Thread.setDaemon(): 305.: use o atributo *note
          threading.Thread.daemon: 306.

        * ‘threading.Thread.getName()’, *note
          threading.Thread.setName(): 307.: use o atributo *note
          threading.Thread.name: 308.

        * ‘threading.currentThread()’: use *note
          threading.current_thread(): 309.

        * ‘threading.activeCount()’: use *note threading.active_count():
          30a.

   * *note typing.Text: 30b. (gh-92332(5)).

   * *note unittest.IsolatedAsyncioTestCase: 30c.: foi descontinuado
     retornar um valor que não seja ‘None’ de um caso de teste.

   * Funções descontinuadas de *note urllib.parse: 10a.: use *note
     urlparse(): 30d.

        * ‘splitattr()’

        * ‘splithost()’

        * ‘splitnport()’

        * ‘splitpasswd()’

        * ‘splitport()’

        * ‘splitquery()’

        * ‘splittag()’

        * ‘splittype()’

        * ‘splituser()’

        * ‘splitvalue()’

        * ‘to_bytes()’

   * *note urllib.request: 10b.: o estilo de *note URLopener: 30e. e
     *note FancyURLopener: 30f. de invocar solicitações foi
     descontinuado.  Use as mais novas funções e métodos *note
     urlopen(): 293.

   * *note wsgiref: 118.: ‘SimpleHandler.stdout.write()’ não deve fazer
     gravações parciais.

   * *note xml.etree.ElementTree: 125.: testar o valor verdade de um
     *note Element: 310. está descontinuado.  Em um lançamento futuro
     isso sempre retornará ‘True’.  Em vez disso, prefira os testes
     explícitos ‘len(elem)’ ou ‘elem is not None’.

   * *note zipimport.zipimporter.load_module(): 311. foi descontinuado:
     use *note exec_module(): 312.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/87999

   (2) https://github.com/python/cpython/issues/109218

   (3) https://github.com/python/cpython/issues/103636

   (4) https://github.com/python/cpython/issues/91760

   (5) https://github.com/python/cpython/issues/92332


File: python.info,  Node: Alterações de bytecode do CPython,  Next: Alterações na API C,  Prev: Novas descontinuações,  Up: O que há de novo no Python 3 13

1.1.9 Alterações de bytecode do CPython
---------------------------------------

   * O oparg de *note YIELD_VALUE: 314. agora é ‘1’ se o yield fizer
     parte de um yield-from ou um await, e ‘0’ caso contrário.  O oparg
     de *note RESUME: 315. foi alterado para adicionar um bit indicando
     se a profundidade de exceção é 1, o que é necessário para otimizar
     o fechamento dos geradores.  (Contribuição de Irit Katriel em
     gh-111354(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/111354


File: python.info,  Node: Alterações na API C,  Next: Mudanças na construção,  Prev: Alterações de bytecode do CPython,  Up: O que há de novo no Python 3 13

1.1.10 Alterações na API C
--------------------------

* Menu:

* Novas funcionalidades: Novas funcionalidades<2>.
* Alterações na API C: Alterações na API C<2>.
* Mudanças na API C Limitada::
* APIs C removidas::
* APIs C descontinuadas::


File: python.info,  Node: Novas funcionalidades<2>,  Next: Alterações na API C<2>,  Up: Alterações na API C

1.1.10.1 Novas funcionalidades
..............................

   * Adiciona a *note API C PyMonitoring C: 15c. para gerar eventos de
     monitoramento da PEP 669(1):

        * *note PyMonitoringState: 318.

        * *note PyMonitoring_FirePyStartEvent(): 319.

        * *note PyMonitoring_FirePyResumeEvent(): 31a.

        * *note PyMonitoring_FirePyReturnEvent(): 31b.

        * *note PyMonitoring_FirePyYieldEvent(): 31c.

        * *note PyMonitoring_FireCallEvent(): 31d.

        * *note PyMonitoring_FireLineEvent(): 31e.

        * *note PyMonitoring_FireJumpEvent(): 31f.

        * *note PyMonitoring_FireBranchEvent(): 320.

        * *note PyMonitoring_FireCReturnEvent(): 321.

        * *note PyMonitoring_FirePyThrowEvent(): 322.

        * *note PyMonitoring_FireRaiseEvent(): 323.

        * *note PyMonitoring_FireCRaiseEvent(): 324.

        * *note PyMonitoring_FireReraiseEvent(): 325.

        * *note PyMonitoring_FireExceptionHandledEvent(): 326.

        * *note PyMonitoring_FirePyUnwindEvent(): 327.

        * *note PyMonitoring_FireStopIterationEvent(): 328.

        * *note PyMonitoring_EnterScope(): 329.

        * *note PyMonitoring_ExitScope(): 32a.

     (Contribuição de Irit Katriel em gh-111997(2)).

   * Adiciona *note PyMutex: 15b, um mutex leve que ocupa um único byte,
     e as novas funções *note PyMutex_Lock(): 32b. e *note
     PyMutex_Unlock(): 32c.  ‘PyMutex_Lock()’ irá liberar a *note GIL:
     159. (se atualmente mantida) se a operação precisar de bloqueio.
     (Contribuição de Sam Gross em gh-108724(3).)

   * Adiciona a *note API C PyTime: 15a, fornecendo acesso aos relógios
     do sistema.

        * *note PyTime_t: 32d.

        * *note PyTime_MIN: 32e. e *note PyTime_MAX: 32f.

        * *note PyTime_AsSecondsDouble(): 330.

        * *note PyTime_Monotonic(): 331.

        * *note PyTime_MonotonicRaw(): 332.

        * *note PyTime_PerfCounter(): 333.

        * *note PyTime_PerfCounterRaw(): 334.

        * *note PyTime_Time(): 335.

        * *note PyTime_TimeRaw(): 336.

     (Contribuição de Victor Stinner e Petr Viktorin em gh-110850(4).)

   * Adiciona a função *note PyDict_ContainsString(): 337. com o mesmo
     comportamento de *note PyDict_Contains(): 338, mas 'key' é
     especificada como uma string de bytes const char* codificada em
     UTF-8, em vez de um *note PyObject: 339.*.  (Contribuição de Victor
     Stinner em gh-108314(5).)

   * Adiciona as funções *note PyDict_GetItemRef(): 33a. e *note
     PyDict_GetItemStringRef(): 33b. functions, que são semelhantes a
     *note PyDict_GetItemWithError(): 33c, mas retornam uma *note
     referência forte: 33d. em vez de uma *note referência emprestada:
     33e.  Além disso, essas funções retornam ‘-1’ em caso de erro,
     dispensando a necessidade de checar ‘PyErr_Occurred()’.
     (Contribuição de Victor Stinner em gh-106004(6).)

   * Adiciona a função *note PyDict_SetDefaultRef(): 33f, que é
     semelhante a *note PyDict_SetDefault(): 340, mas retorna uma *note
     referência forte: 33d. em vez de uma *note referência emprestada:
     33e.  Esta função retorna ‘-1’ em caso de erro, ‘0’ na inserção e
     ‘1’ se a chave já estivesse presente no dicionário.  (Contribuição
     de Sam Gross em gh-112066(7).)

   * Adiciona as funções *note PyDict_Pop(): 341. e *note
     PyDict_PopString(): 342. para remover uma chave de um dicionário e,
     opcionalmente, retornam o valor removido.  Isto é semelhante a
     *note dict.pop(): 343, mas sem o valor padrão e sem levantar *note
     KeyError: 344. se a chave estiver ausente.  (Contribuição de Stefan
     Behnel e Victor Stinner em gh-111262(8).)

   * Adiciona as funções *note PyMapping_GetOptionalItem(): 345. e *note
     PyMapping_GetOptionalItemString(): 346. como alternativas a *note
     PyObject_GetAttr(): 347. e *note PyObject_GetAttrString(): 348,
     respectivamente.  As novas funções não levantam *note KeyError:
     344. se o atributo não for encontrado no mapeamento.  Essas
     variantes são mais convenientes e rápidas se o atributo ausente não
     for tratado como uma falha.  (Contribuição de Serhiy Storchaka em
     gh-106307(9).)

   * Adiciona as funções *note PyObject_GetOptionalAttr(): 349. e *note
     PyObject_GetOptionalAttrString(): 34a, variantes de *note
     PyObject_GetAttr(): 347. e *note PyObject_GetAttrString(): 348,
     respectivamente.  Essas novas funções não levantam *note
     AttributeError: 34b. se o atributo não for encontrado.  Essas
     variantes são mais convenientes e rápidas se o atributo ausente não
     for tratado como uma falha.  (Contribuição de Serhiy Storchaka em
     gh-106521(10).)

   * Adiciona a função *note PyErr_FormatUnraisable(): 34c. como uma
     extensão para *note PyErr_WriteUnraisable(): 34d, que permite
     personalizar a mensagem de aviso.  (Contribuição de Serhiy
     Storchaka em gh-108082(11).)

   * Adiciona novas funções que retornam uma *note referência forte:
     33d. em vez de uma *note referência emprestada: 33e. para quadros
     locais, globais, e embutidos, como parte de *note PEP 667: 142.:

        * *note PyEval_GetFrameBuiltins(): 34e. substitui *note
          PyEval_GetBuiltins(): 34f.

        * *note PyEval_GetFrameGlobals(): 350. substitui *note
          PyEval_GetGlobals(): 351.

        * *note PyEval_GetFrameLocals(): 352. substitui *note
          PyEval_GetLocals(): 353.

     (Contribuição de Mark Shannon e Tian Gao em gh-74929(12).)

   * Adiciona as funções *note Py_GetConstant(): 354. e *note
     Py_GetConstantBorrowed(): 355. para referências *note fortes: 33d.
     ou *note emprestadas: 33e. para constantes.  Por exemplo,
     ‘Py_GetConstant(Py_CONSTANT_ZERO)’ retorna uma referência forte
     para a constante zero.  (Contribuição de Victor Stinner em
     gh-115754(13).)

   * Adiciona a função *note PyImport_AddModuleRef(): 356. como uma
     substituta para *note PyImport_AddModule(): 357. mas retorna uma
     *note referência forte: 33d. em vez de uma *note referência
     emprestada: 33e.  (Contribuição de Victor Stinner em
     gh-105922(14).)

   * Adiciona a função *note Py_IsFinalizing(): 358. para verificar se o
     interpretador Python principal está *note sendo desligado: 14e.
     (Contribuição de Victor Stinner em gh-108014(15).)

   * Adiciona a função *note PyList_GetItemRef(): 359. como uma
     substituta para *note PyList_GetItem(): 35a. mas que retorna uma
     *note referência forte: 33d. em vez de uma *note referência
     emprestada: 33e.  (Contribuição de Sam Gross em gh-114329(16).)

   * Adiciona as funções *note PyList_Extend(): 35b. e *note
     PyList_Clear(): 35c, espelhando os métodos *note list.extend():
     35d. e *note list.clear(): 35e. do Python.  (Contribuição de Victor
     Stinner em gh-111138(17).)

   * Adiciona a função *note PyLong_AsInt(): 35f, semelhante à *note
     PyLong_AsLong(): 360, mas armazena o resultado em um int em vez de
     um long em C. (Contribuição de Victor Stinner em gh-108014(18).)

   * Adiciona as funções *note PyLong_AsNativeBytes(): 361, *note
     PyLong_FromNativeBytes(): 362. e *note
     PyLong_FromUnsignedNativeBytes(): 363. para simplificar a conversão
     entre tipos inteiros nativos e objetos *note int: 257. do Python.
     (Contribuição de Steve Dower em gh-111140(19).)

   * Adiciona a função *note PyModule_Add(): 364, que é semelhante a
     *note PyModule_AddObjectRef(): 365. e *note PyModule_AddObject():
     366, mas sempre rouba uma referência ao valor.  (Contribuição de
     Serhiy Storchaka em gh-86493(20).)

   * Adiciona a função *note PyObject_GenericHash(): 367. que implementa
     a função hashing padrão de um objeto Python.  (Contribuição de
     Serhiy Storchaka em gh-113024(21).)

   * Adiciona a função *note Py_HashPointer(): 368. para fazer hash de
     um ponteiro.  (Contribuição de Victor Stinner em gh-111545(22).)

   * Adiciona as funções *note PyObject_VisitManagedDict(): 369. e *note
     PyObject_ClearManagedDict(): 36a. que devem ser chamadas pelas
     funções traverse e clear de um tipo usando o sinalizador *note
     Py_TPFLAGS_MANAGED_DICT: 36b.  O projeto pythoncapi-compat(23) pode
     ser usado para obter essas funções no Python 3.11 e 3.12.
     (Contribuição de Victor Stinner em gh-107073(24).)

   * Adiciona as funções *note PyRefTracer_SetTracer(): 36c. e *note
     PyRefTracer_GetTracer(): 36d, que permitem rastrear a criação e
     destruição de objetos da mesma forma que o módulo *note
     tracemalloc: ff.  (Contribuição de Pablo Galindo em gh-93502(25).)

   * Adiciona a função *note PySys_AuditTuple(): 36e. como uma
     alternativa à *note PySys_Audit(): 36f, que recebe argumentos de
     evento como um objeto *note tuple: 370. do Python.  (Contribuição
     de Victor Stinner em gh-85283(26).)

   * Adiciona a função *note PyThreadState_GetUnchecked(): 371. como uma
     alternativa a *note PyThreadState_Get(): 372. que não mata o
     processo com um erro fatal se for ‘NULL’.  O chamador é responsável
     por verificar se o resultado é ‘NULL’.  (Contribuição de Victor
     Stinner em gh-108867(27).)

   * Adiciona a função *note PyType_GetFullyQualifiedName(): 373. para
     obter o nome totalmente qualificado do tipo.  O nome do módulo é
     prefixado se *note type.__module__: 374. for uma string e não for
     igual a ‘'builtins'’ ou ‘'__main__'’.  (Contribuição de Victor
     Stinner em gh-111696(28).)

   * Adiciona a função *note PyType_GetModuleName(): 375. para obter o
     nome do módulo do tipo.  Isto é equivalente a obter o atributo
     *note type.__module__: 374.  (Contribuição de Eric Snow e Victor
     Stinner em gh-111696(29).)

   * Adiciona as funções *note PyUnicode_EqualToUTF8AndSize(): 376. e
     *note PyUnicode_EqualToUTF8(): 377.: comparam o objeto Unicode com
     uma string const char* codificada em UTF-8 e retornam ‘1’ se forem
     iguais ou ‘0’ caso contrário.  Essas funções não levantam exceções.
     (Contribuição de Serhiy Storchaka em gh-110289(30).)

   * Adiciona a função *note PyWeakref_GetRef(): 378. como uma
     alternativa a *note PyWeakref_GetObject(): 379, mas retorna uma
     *note referência forte: 33d, ou ‘NULL’ se o referente não mais
     existir.  (Contribuição de Victor Stinner em gh-105927(31).)

   * Adiciona variantes fixas de funções que ignoram erros
     silenciosamente:

        * *note PyObject_HasAttrWithError(): 37a. substitui *note
          PyObject_HasAttr(): 37b.

        * *note PyObject_HasAttrStringWithError(): 37c. substitui *note
          PyObject_HasAttrString(): 37d.

        * *note PyMapping_HasKeyWithError(): 37e. substitui *note
          PyMapping_HasKey(): 37f.

        * *note PyMapping_HasKeyStringWithError(): 380. substitui *note
          PyMapping_HasKeyString(): 381.

     As novas funções retornam ‘-1’ para erros e o padrão ‘1’ para
     verdadeiro e ‘0’ para falso.

     (Contribuição de Serhiy Storchaka em gh-108511(32).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0669/

   (2) https://github.com/python/cpython/issues/111997

   (3) https://github.com/python/cpython/issues/108724

   (4) https://github.com/python/cpython/issues/110850

   (5) https://github.com/python/cpython/issues/108314

   (6) https://github.com/python/cpython/issues/106004

   (7) https://github.com/python/cpython/issues/112066

   (8) https://github.com/python/cpython/issues/111262

   (9) https://github.com/python/cpython/issues/106307

   (10) https://github.com/python/cpython/issues/106521

   (11) https://github.com/python/cpython/issues/108082

   (12) https://github.com/python/cpython/issues/74929

   (13) https://github.com/python/cpython/issues/115754

   (14) https://github.com/python/cpython/issues/105922

   (15) https://github.com/python/cpython/issues/108014

   (16) https://github.com/python/cpython/issues/114329

   (17) https://github.com/python/cpython/issues/111138

   (18) https://github.com/python/cpython/issues/108014

   (19) https://github.com/python/cpython/issues/111140

   (20) https://github.com/python/cpython/issues/86493

   (21) https://github.com/python/cpython/issues/113024

   (22) https://github.com/python/cpython/issues/111545

   (23) https://github.com/python/pythoncapi-compat/

   (24) https://github.com/python/cpython/issues/107073

   (25) https://github.com/python/cpython/issues/93502

   (26) https://github.com/python/cpython/issues/85283

   (27) https://github.com/python/cpython/issues/108867

   (28) https://github.com/python/cpython/issues/111696

   (29) https://github.com/python/cpython/issues/111696

   (30) https://github.com/python/cpython/issues/110289

   (31) https://github.com/python/cpython/issues/105927

   (32) https://github.com/python/cpython/issues/108511


File: python.info,  Node: Alterações na API C<2>,  Next: Mudanças na API C Limitada,  Prev: Novas funcionalidades<2>,  Up: Alterações na API C

1.1.10.2 Alterações na API C
............................

   * O parâmetro 'keywords' das funções *note
     PyArg_ParseTupleAndKeywords(): 383. e *note
     PyArg_VaParseTupleAndKeywords(): 384. agora é do tipo char *const*
     em C e const char *const* em C++, em vez de char**.  Em C++, isso
     torna essas funções compatíveis com argumentos dos tipos const char
     *const*, const char**, ou char *const* sem uma conversão de tipo
     explícita.  Em C, as funções aceitam apenas argumentos do tipo char
     *const*.  Isso pode ser sobrescrito com a macro *note PY_CXX_CONST:
     385.  (Contribuição de Serhiy Storchaka em gh-65210(1).)

   * *note PyArg_ParseTupleAndKeywords(): 383. agora oferece suporte a
     nomes de parâmetros nomeados não-ASCII. (Contribuição de Serhiy
     Storchaka em gh-110815(2).)

   * A função ‘PyCode_GetFirstFree()’ é agora uma API instável e foi
     renomeada para *note PyUnstable_Code_GetFirstFree(): 386.
     (Contribuição de Bogdan Romanyuk em gh-115781(3).)

   * As funções *note PyDict_GetItem(): 387, *note
     PyDict_GetItemString(): 388, *note PyMapping_HasKey(): 37f, *note
     PyMapping_HasKeyString(): 381, *note PyObject_HasAttr(): 37b, *note
     PyObject_HasAttrString(): 37d, e *note PySys_GetObject(): 389, que
     apagam todos os erros que ocorrem ao chamá-las, agora reportam tais
     erros usando *note sys.unraisablehook(): 1f7.  Você pode
     substituí-las por outras funções conforme recomendado na
     documentação.  (Contribuição de Serhiy Storchaka em gh-106672(4).)

   * Adiciona suporte para os formatos ‘%T’, ‘%#T’, ‘%N’ e ‘%#N’ a *note
     PyUnicode_FromFormat(): 38a.:

        * ‘%T’: Obtém o nome totalmente qualificado de um tipo de objeto

        * ‘%#T’: Como acima, mas usa dois pontos como separador

        * ‘%N’: Obtém o nome totalmente qualificado de um tipo

        * ‘%#N’: Como acima, mas usa dois pontos como separador

     Veja PEP 737(5) para uma descrição completa.  (Contribuição de
     Victor Stinner em gh-111696(6).)

   * Você não precisa mais definir a macro ‘PY_SSIZE_T_CLEAN’ antes de
     incluir ‘Python.h’ ao usar formatos ‘#’ em *note códigos de
     formato: 38b.  APIs que aceitam os códigos de formato sempre usam
     ‘Py_ssize_t’ para formatos ‘#’.  (Contribuição de Inada Naoki em
     gh-104922(7).)

   * Se Python for construído em *note modo de depuração: 1f9. ou *note
     com asserções: 38c, *note PyTuple_SET_ITEM(): 38d. e *note
     PyList_SET_ITEM(): 38e. agora verificam o argumento do índice com
     uma asserção.  (Contribuição de Victor Stinner em gh-106168(8).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/65210

   (2) https://github.com/python/cpython/issues/110815

   (3) https://github.com/python/cpython/issues/115781

   (4) https://github.com/python/cpython/issues/106672

   (5) https://peps.python.org/pep-0737/

   (6) https://github.com/python/cpython/issues/111696

   (7) https://github.com/python/cpython/issues/104922

   (8) https://github.com/python/cpython/issues/106168


File: python.info,  Node: Mudanças na API C Limitada,  Next: APIs C removidas,  Prev: Alterações na API C<2>,  Up: Alterações na API C

1.1.10.3 Mudanças na API C Limitada
...................................

   * As seguintes funções agora estão incluídas na API C limitada:

        * *note PyMem_RawMalloc(): 390.

        * *note PyMem_RawCalloc(): 391.

        * *note PyMem_RawRealloc(): 392.

        * *note PyMem_RawFree(): 393.

        * *note PySys_Audit(): 36f.

        * *note PySys_AuditTuple(): 36e.

        * *note PyType_GetModuleByDef(): 394.

     (Contributed by Victor Stinner in gh-85283(1) and gh-116936(2).)

   * Python construído com *note -with-trace-refs: 395. (referências de
     rastreamento) agora oferece suporte à *note API Limitada: 396.
     (Contribuição de Victor Stinner em gh-108634(3).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/85283

   (2) https://github.com/python/cpython/issues/116936

   (3) https://github.com/python/cpython/issues/108634


File: python.info,  Node: APIs C removidas,  Next: APIs C descontinuadas,  Prev: Mudanças na API C Limitada,  Up: Alterações na API C

1.1.10.4 APIs C removidas
.........................

   * Remove diversas funções, macros, variáveis, etc com nomes
     prefixados por ‘_Py’ ou ‘_PY’ (consideradas como API privada).  Se
     o seu projeto for afetado por uma dessas remoções e você acreditar
     que a API removida deve permanecer disponível, por favor *note abra
     um novo relatório de problema: 24e. para solicitar uma API C
     pública e adicione ‘cc: @vstinner’ ao problema para notificar
     Victor Stinner.  (Contribuição de Victor Stinner em gh-106320(1).)

   * Remove protocolos de buffer antigos descontinuados no Python 3.0:
     use *note Protocolo de buffer: 2e8.

        * ‘PyObject_CheckReadBuffer()’: use *note
          PyObject_CheckBuffer(): 398. para testar se o objeto oferece
          suporte ao protocolo de buffer.  Observe que *note
          PyObject_CheckBuffer(): 398. não garante que *note
          PyObject_GetBuffer(): 399. terá sucesso.  Para testar se o
          objeto é realmente legível, veja o próximo exemplo de *note
          PyObject_GetBuffer(): 399.

        * ‘PyObject_AsCharBuffer()’, ‘PyObject_AsReadBuffer()’: use
          *note PyObject_GetBuffer(): 399. e *note PyBuffer_Release():
          39a.:

               Py_buffer view;
               if (PyObject_GetBuffer(obj, &view, PyBUF_SIMPLE) < 0) {
                   return NULL;
               }
               // Usa `view.buf` e `view.len` para ler do buffer.
               // Você pode precisar converter buf como `(const char*)view.buf`.
               PyBuffer_Release(&view);

        * ‘PyObject_AsWriteBuffer()’: use *note PyObject_GetBuffer():
          399. e *note PyBuffer_Release(): 39a.:

               Py_buffer view;
               if (PyObject_GetBuffer(obj, &view, PyBUF_WRITABLE) < 0) {
                   return NULL;
               }
               // Usa `view.buf` e `view.len` para gravar no buffer.
               PyBuffer_Release(&view);

     (Contribuição de Inada Naoki in gh-85275(2).)

   * Remove diversas funções descontinuadas no Python 3.9:

        * ‘PyEval_CallObject()’, ‘PyEval_CallObjectWithKeywords()’: use
          *note PyObject_CallNoArgs(): 39b. ou *note PyObject_Call():
          39c.

               Aviso: Os argumentos posicionais de *note
               PyObject_Call(): 39c. devem ser uma *note tuple: 370. e
               não podem ser ‘NULL’, os argumentos nomeados devem ser
               *note dict: 256. ou ‘NULL’, enquanto funções removidas
               verificavam o tipo de argumentos e aceitavam argumentos
               posicionais e nomeados ‘NULL’.  Para substituir
               ‘PyEval_CallObjectWithKeywords(func, NULL, kwargs)’ por
               *note PyObject_Call(): 39c, passe uma tupla vazia como
               argumentos posicionais usando *note PyTuple_New(0): 39d.

        * ‘PyEval_CallFunction()’: use *note PyObject_CallFunction():
          39e.

        * ‘PyEval_CallMethod()’: use *note PyObject_CallMethod(): 39f.

        * ‘PyCFunction_Call()’: use *note PyObject_Call(): 39c.

     (Contribuição de Victor Stinner em gh-105107(3).)

   * Remove as seguintes funções antigas da configuração de
     inicialização do Python, descontinuadas no Python 3.11:

        * ‘PySys_AddWarnOptionUnicode()’: use *note
          PyConfig.warnoptions: 3a0.

        * ‘PySys_AddWarnOption()’: use *note PyConfig.warnoptions: 3a0.

        * ‘PySys_AddXOption()’: use *note PyConfig.xoptions: 3a1.

        * ‘PySys_HasWarnOptions()’: use *note PyConfig.xoptions: 3a1.

        * ‘PySys_SetPath()’: defina *note PyConfig.module_search_paths:
          3a2.

        * ‘Py_SetPath()’: defina *note PyConfig.module_search_paths:
          3a2.

        * ‘Py_SetStandardStreamEncoding()’: defina *note
          PyConfig.stdio_encoding: 3a3, e também talvez *note
          PyConfig.legacy_windows_stdio: 3a4. (no Windows).

        * ‘_Py_SetProgramFullPath()’: defina *note PyConfig.executable:
          3a5.

     Em vez disso, use a nova API *note PyConfig: 3a6. da *note
     Configuração de Inicialização do Python: 3a7. ( PEP 587(4)),
     adicionada ao Python 3.8.  (Contribuição de Victor Stinner em
     gh-105145(5).)

   * Remove as funções ‘PyEval_AcquireLock()’ e ‘PyEval_ReleaseLock()’,
     descontinuadas no Python 3.2.  Eles não atualizavam o estado atual
     da thread.  Elas podem ser substituídas por:

        * *note PyEval_SaveThread(): 3a8. e *note
          PyEval_RestoreThread(): 3a9.;

        * *note PyEval_AcquireThread(): 3aa. e *note
          PyEval_RestoreThread(): 3a9. de baixo nível;

        * ou *note PyGILState_Ensure(): 3ab. e *note
          PyGILState_Release(): 3ac.

     (Contribuição de Victor Stinner em gh-105182(6).)

   * Remove a função ‘PyEval_ThreadsInitialized()’, descontinuada no
     Python 3.9.  Desde Python 3.7, ‘Py_Initialize()’ sempre cria a GIL:
     chamar ‘PyEval_InitThreads()’ não faz nada e
     ‘PyEval_ThreadsInitialized()’ sempre retorna diferente de zero.
     (Contribuição de Victor Stinner em gh-105182(7).)

   * Remove o apelido ‘_PyInterpreterState_Get()’ de *note
     PyInterpreterState_Get(): 3ad. que era mantido para compatibilidade
     com versões anteriores do Python 3.8.  O projeto
     pythoncapi-compat(8) pode ser usado para obter *note
     PyInterpreterState_Get(): 3ad. no Python 3.8 e versões anteriores.
     (Contribuição de Victor Stinner em gh-106320(9).)

   * Remove a função privada ‘_PyObject_FastCall()’: use
     ‘PyObject_Vectorcall()’, a qual está disponível desde Python 3.8 (
     PEP 590(10)).  (Contribuição de Victor Stinner em gh-106023(11).)

   * Remove o arquivo de cabeçalho ‘cpython/pytime.h’, que continha
     apenas funções privadas.  (Contribuição de Victor Stinner em
     gh-106316(12).)

   * Remove a constante não documentada ‘PY_TIMEOUT_MAX’ da API C
     limitada.  (Contribuição de Victor Stinner em gh-110014(13).)

   * Remove as antigas macros de trashcan ‘Py_TRASHCAN_SAFE_BEGIN’ e
     ‘Py_TRASHCAN_SAFE_END’.  Substitua ambas pelas novas macros
     ‘Py_TRASHCAN_BEGIN’ e ‘Py_TRASHCAN_END’.  (Contribuição de Irit
     Katriel em gh-105111(14).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/106320

   (2) https://github.com/python/cpython/issues/85275

   (3) https://github.com/python/cpython/issues/105107

   (4) https://peps.python.org/pep-0587/

   (5) https://github.com/python/cpython/issues/105145

   (6) https://github.com/python/cpython/issues/105182

   (7) https://github.com/python/cpython/issues/105182

   (8) https://github.com/python/pythoncapi-compat/

   (9) https://github.com/python/cpython/issues/106320

   (10) https://peps.python.org/pep-0590/

   (11) https://github.com/python/cpython/issues/106023

   (12) https://github.com/python/cpython/issues/106316

   (13) https://github.com/python/cpython/issues/110014

   (14) https://github.com/python/cpython/issues/105111


File: python.info,  Node: APIs C descontinuadas,  Prev: APIs C removidas,  Up: Alterações na API C

1.1.10.5 APIs C descontinuadas
..............................

   * Descontinua antigas funções de inicialização do Python:

        * *note PySys_ResetWarnOptions(): 3af.: apague *note
          sys.warnoptions: 3b0. e ‘warnings.filters’.

        * *note Py_GetExecPrefix(): 3b1.: leia *note sys.exec_prefix:
          3b2.

        * *note Py_GetPath(): 3b3.: leia *note sys.path: 3b4.

        * *note Py_GetPrefix(): 3b5.: leia *note sys.prefix: 3b6.

        * *note Py_GetProgramFullPath(): 3b7.: leia *note
          sys.executable: 3b8.

        * *note Py_GetProgramName(): 3b9.: leia *note sys.executable:
          3b8.

        * *note Py_GetPythonHome(): 3ba.: leia *note PyConfig.home: 3bb.
          ou a variável de ambiente *note PYTHONHOME: 3bc.

     (Contribuição de Victor Stinner em gh-105145(1).)

   * *note Descontinua suavemente: 209. as funções *note
     PyEval_GetBuiltins(): 34f, *note PyEval_GetGlobals(): 351. e *note
     PyEval_GetLocals(): 353, que retornam uma *note referência
     emprestada: 33e.  (Suavemente descontinuadas como parte da PEP
     667(2).)

   * Descontinua a função *note PyImport_ImportModuleNoBlock(): 3bd. que
     é apenas um apelido para *note PyImport_ImportModule(): 3be. desde
     o Python 3.3.  (Contribuição de Victor Stinner em gh-105396(3).)

   * *note Descontinua suavemente: 209. a função *note
     PyModule_AddObject(): 366.  Ela deve ser substituída por *note
     PyModule_Add(): 364. ou *note PyModule_AddObjectRef(): 365.
     (Contribuição de Serhiy Storchaka em gh-86493(4).)

   * Descontinua os tipos antigos ‘Py_UNICODE’ e ‘PY_UNICODE_TYPE’ e
     define ‘Py_UNICODE_WIDE’.  Em vez disso, use o tipo ‘wchar_t’
     diretamente.  Desde Python 3.3, ‘Py_UNICODE’ e ‘PY_UNICODE_TYPE’
     são apenas apelidos para ‘wchar_t’.  (Contribuição de Victor
     Stinner em gh-105156(5).)

   * Descontinua as funções *note PyWeakref_GetObject(): 379. e *note
     PyWeakref_GET_OBJECT(): 3bf, que retornam uma *note referência
     emprestada: 33e.  Em vez disso, use a nova função *note
     PyWeakref_GetRef(): 378, que retorna uma *note referência forte:
     33d.  O projeto pythoncapi-compat(6) pode ser usado para obter
     *note PyWeakref_GetRef(): 378. no Python 3.12 e versões anteriores.
     (Contribuição de Victor Stinner em gh-105927(7).)

* Menu:

* Remoção pendente no Python 3.14: Remoção pendente no Python 3 14<2>.
* Remoção pendente no Python 3.15: Remoção pendente no Python 3 15<2>.
* Remoção pendente no Python 3.16: Remoção pendente no Python 3 16<2>.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<2>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/105145

   (2) https://peps.python.org/pep-0667/

   (3) https://github.com/python/cpython/issues/105396

   (4) https://github.com/python/cpython/issues/86493

   (5) https://github.com/python/cpython/issues/105156

   (6) https://github.com/python/pythoncapi-compat/

   (7) https://github.com/python/cpython/issues/105927


File: python.info,  Node: Remoção pendente no Python 3 14<2>,  Next: Remoção pendente no Python 3 15<2>,  Up: APIs C descontinuadas

1.1.10.6 Remoção pendente no Python 3.14
........................................

   * O campo ‘ma_version_tag’ em *note PyDictObject: 3c1. para módulos
     de extensão ( PEP 699(1); gh-101193(2)).

   * A criação de *note tipos imutáveis: 3c2. com bases mutáveis
     (gh-95388(3)).

   * Funções para configurar a inicialização do Python, descontinuadas
     no Python 3.11:

        * ‘PySys_SetArgvEx()’: defina *note PyConfig.argv: 3c3.

        * ‘PySys_SetArgv()’: defina *note PyConfig.argv: 3c3.

        * ‘Py_SetProgramName()’: defina *note PyConfig.program_name:
          3c4.

        * ‘Py_SetPythonHome()’: defina *note PyConfig.home: 3bb.

     Em vez disso, a API *note Py_InitializeFromConfig(): 3c5. deve ser
     usada com *note PyConfig: 3a6.

   * Variáveis de configuração globais

        * *note Py_DebugFlag: 3c6.: use *note PyConfig.parser_debug:
          3c7.

        * *note Py_VerboseFlag: 3c8.: use *note PyConfig.verbose: 3c9.

        * *note Py_QuietFlag: 3ca.: use *note PyConfig.quiet: 3cb.

        * *note Py_InteractiveFlag: 3cc.: use *note
          PyConfig.interactive: 3cd.

        * *note Py_InspectFlag: 3ce.: use *note PyConfig.inspect: 3cf.

        * *note Py_OptimizeFlag: 3d0.: use *note
          PyConfig.optimization_level: 3d1.

        * *note Py_NoSiteFlag: 3d2.: use *note PyConfig.site_import:
          3d3.

        * *note Py_BytesWarningFlag: 3d4.: use *note
          PyConfig.bytes_warning: 3d5.

        * *note Py_FrozenFlag: 3d6.: use *note
          PyConfig.pathconfig_warnings: 3d7.

        * *note Py_IgnoreEnvironmentFlag: 3d8.: use *note
          PyConfig.use_environment: 3d9.

        * *note Py_DontWriteBytecodeFlag: 3da.: use *note
          PyConfig.write_bytecode: 3db.

        * *note Py_NoUserSiteDirectory: 3dc.: use *note
          PyConfig.user_site_directory: 3dd.

        * *note Py_UnbufferedStdioFlag: 3de.: use *note
          PyConfig.buffered_stdio: 3df.

        * *note Py_HashRandomizationFlag: 3e0.: use *note
          PyConfig.use_hash_seed: 3e1. e *note PyConfig.hash_seed: 3e2.

        * *note Py_IsolatedFlag: 3e3.: use *note PyConfig.isolated: 3e4.

        * *note Py_LegacyWindowsFSEncodingFlag: 3e5.: use *note
          PyPreConfig.legacy_windows_fs_encoding: 3e6.

        * *note Py_LegacyWindowsStdioFlag: 3e7.: use *note
          PyConfig.legacy_windows_stdio: 3a4.

        * ‘Py_FileSystemDefaultEncoding’: use *note
          PyConfig.filesystem_encoding: 3e8.

        * ‘Py_HasFileSystemDefaultEncoding’: use *note
          PyConfig.filesystem_encoding: 3e8.

        * ‘Py_FileSystemDefaultEncodeErrors’: use *note
          PyConfig.filesystem_errors: 3e9.

        * ‘Py_UTF8Mode’: use *note PyPreConfig.utf8_mode: 3ea.  (veja
          *note Py_PreInitialize(): 3eb.)

     Em vez disso, a API *note Py_InitializeFromConfig(): 3c5. deve ser
     usada com *note PyConfig: 3a6.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0699/

   (2) https://github.com/python/cpython/issues/101193

   (3) https://github.com/python/cpython/issues/95388


File: python.info,  Node: Remoção pendente no Python 3 15<2>,  Next: Remoção pendente no Python 3 16<2>,  Prev: Remoção pendente no Python 3 14<2>,  Up: APIs C descontinuadas

1.1.10.7 Remoção pendente no Python 3.15
........................................

   * The *note PyImport_ImportModuleNoBlock(): 3bd.: use *note
     PyImport_ImportModule(): 3be.

   * *note PyWeakref_GetObject(): 379. e *note PyWeakref_GET_OBJECT():
     3bf.: use *note PyWeakref_GetRef(): 378.

   * O tipo *note Py_UNICODE: 3ed. e a macro ‘Py_UNICODE_WIDE’: use
     ‘wchar_t’.

   * Funções de inicialização do Python

        * *note PySys_ResetWarnOptions(): 3af.: apague *note
          sys.warnoptions: 3b0. e ‘warnings.filters’.

        * *note Py_GetExecPrefix(): 3b1.: obtenha *note
          sys.base_exec_prefix: 3ee. e *note sys.exec_prefix: 3b2.

        * *note Py_GetPath(): 3b3.: leia *note sys.path: 3b4.

        * *note Py_GetPrefix(): 3b5.: obtenha *note sys.base_prefix:
          3ef. e *note sys.prefix: 3b6.

        * *note Py_GetProgramFullPath(): 3b7.: leia *note
          sys.executable: 3b8.

        * *note Py_GetProgramName(): 3b9.: leia *note sys.executable:
          3b8.

        * *note Py_GetPythonHome(): 3ba.: leia *note PyConfig.home: 3bb.
          ou a variável de ambiente *note PYTHONHOME: 3bc.


File: python.info,  Node: Remoção pendente no Python 3 16<2>,  Next: Remoção pendente em versões futuras<2>,  Prev: Remoção pendente no Python 3 15<2>,  Up: APIs C descontinuadas

1.1.10.8 Remoção pendente no Python 3.16
........................................

   * A cópia empacotada do ‘libmpdec’.


File: python.info,  Node: Remoção pendente em versões futuras<2>,  Prev: Remoção pendente no Python 3 16<2>,  Up: APIs C descontinuadas

1.1.10.9 Remoção pendente em versões futuras
............................................

As APIs a seguir foram descontinuadas e serão removidas, embora
atualmente não haja uma data agendada para sua remoção.

   * *note Py_TPFLAGS_HAVE_FINALIZE: 3f2.: desnecessária desde o Python
     3.8.

   * *note PyErr_Fetch(): 3f3.: use *note PyErr_GetRaisedException():
     3f4.

   * *note PyErr_NormalizeException(): 3f5.: use *note
     PyErr_GetRaisedException(): 3f4.

   * *note PyErr_Restore(): 3f6.: use *note PyErr_SetRaisedException():
     3f7.

   * *note PyModule_GetFilename(): 3f8.: use *note
     PyModule_GetFilenameObject(): 3f9.

   * *note PyOS_AfterFork(): 3fa.: use *note PyOS_AfterFork_Child():
     3fb.

   * *note PySlice_GetIndicesEx(): 3fc.: use *note PySlice_Unpack():
     3fd. e *note PySlice_AdjustIndices(): 3fe.

   * ‘PyUnicode_AsDecodedObject()’: use *note PyCodec_Decode(): 3ff.

   * ‘PyUnicode_AsDecodedUnicode()’: use *note PyCodec_Decode(): 3ff.

   * ‘PyUnicode_AsEncodedObject()’: use *note PyCodec_Encode(): 400.

   * ‘PyUnicode_AsEncodedUnicode()’: use *note PyCodec_Encode(): 400.

   * *note PyUnicode_READY(): 401.: desnecessário desde o Python 3.12

   * ‘PyErr_Display()’: use *note PyErr_DisplayException(): 402.

   * ‘_PyErr_ChainExceptions()’: use ‘_PyErr_ChainExceptions1()’.

   * O membro ‘PyBytesObject.ob_shash’: chame *note PyObject_Hash():
     403.

   * O membro ‘PyDictObject.ma_version_tag’.

   * API do Thread Local Storage (TLS):

        * *note PyThread_create_key(): 404.: use *note
          PyThread_tss_alloc(): 405.

        * *note PyThread_delete_key(): 406.: use *note
          PyThread_tss_free(): 407.

        * *note PyThread_set_key_value(): 408.: use *note
          PyThread_tss_set(): 409.

        * *note PyThread_get_key_value(): 40a.: use *note
          PyThread_tss_get(): 40b.

        * *note PyThread_delete_key_value(): 40c.: use *note
          PyThread_tss_delete(): 40d.

        * *note PyThread_ReInitTLS(): 40e.: desnecessário desde o Python
          3.7.


File: python.info,  Node: Mudanças na construção,  Next: Portando para o Python 3 13,  Prev: Alterações na API C,  Up: O que há de novo no Python 3 13

1.1.11 Mudanças na construção
-----------------------------

   * ‘arm64-apple-ios’ e ‘arm64-apple-ios-simulator’ são agora
     plataformas de nível 3 da PEP 11(1).  (Escrita e implementação da
     *note PEP 730: 165. foi uma contribuição de Russell Keith-Magee em
     gh-114099(2).)

   * ‘aarch64-linux-android’ e ‘x86_64-linux-android’ são agora
     plataformas de nível 3 da PEP 11(3).  (Escrita e implementação da
     *note PEP 738: 165. foi uma contribuição de Malcolm Smith em
     gh-116622(4).)

   * ‘wasm32-wasi’ agora é uma plataforma de nível 2 segundo a PEP
     11(5).  (Contribuição de Brett Cannon em gh-115192(6).)

   * ‘wasm32-emscripten’ não é mais uma plataforma suportada pela PEP
     11(7).  (Contribuição de Brett Cannon em gh-115192(8).)

   * Construir CPython agora requer um compilador com suporte para a
     biblioteca atômica C11, funções atômicas embutidas do GCC ou
     intrínsecos interligados MSVC.

   * Autoconf 2.71 e aclocal 1.16.5 agora são necessários para regerar o
     script ‘configure’.  (Contribuição de Christian Heimes em
     gh-89886(9) e de Victor Stinner em gh-112090(10).)

   * SQLite 3.15.2 ou mais recente é necessário para construir o módulo
     de extensão *note sqlite3: cf.  (Contribuição de Erlend Aasland em
     gh-105875(11).)

   * CPython agora inclui a biblioteca mimalloc(12) por padrão.  Está
     licenciada sob a licença do MIT; veja *note licença do mimalloc:
     411.  O mimalloc incluído tem alterações personalizadas, veja
     gh-113141(13) para detalhes.  (Contribuição de Dino Viehland em
     gh-109914(14).)

   * A opção *note -with-system-libmpdec: 412. do ‘configure’ agora tem
     como padrão ‘yes’.  A cópia empacotada de ‘libmpdec’ será removida
     no Python 3.16.

   * Python construído com *note -with-trace-refs: 395. (referências de
     rastreamento) do ‘configure’ tem compatibilidade de ABI com a
     construção de lançamento do Python e a *note construção de
     depuração: 1f9.  (Contribuição de Victor Stinner em gh-108634(15).)

   * Em sistemas POSIX, os nomes de arquivos pkg-config (‘.pc’) agora
     incluem os sinalizadores de ABI. Por exemplo, a construção com
     threads livres gera ‘python-3.13t.pc’ e a construção de depuração
     gera ‘python-3.13d.pc’.

   * As extensões C ‘errno’, ‘fcntl’, ‘grp’, ‘md5’, ‘pwd’, ‘resource’,
     ‘termios’, ‘winsound’, ‘_ctypes_test’,
     ‘_multiprocessing.posixshmem’, ‘_scproxy’, ‘_stat’, ‘_statistics’,
     ‘_testconsole’, ‘_testimportmultiple’ e ‘_uuid’ são agora
     construídas com a *note API C limitada: 396.  (Contribuição de
     Victor Stinner em gh-85283(16).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0011/

   (2) https://github.com/python/cpython/issues/114099

   (3) https://peps.python.org/pep-0011/

   (4) https://github.com/python/cpython/issues/116622

   (5) https://peps.python.org/pep-0011/

   (6) https://github.com/python/cpython/issues/115192

   (7) https://peps.python.org/pep-0011/

   (8) https://github.com/python/cpython/issues/115192

   (9) https://github.com/python/cpython/issues/89886

   (10) https://github.com/python/cpython/issues/112090

   (11) https://github.com/python/cpython/issues/105875

   (12) https://github.com/microsoft/mimalloc/

   (13) https://github.com/python/cpython/issues/113141

   (14) https://github.com/python/cpython/issues/109914

   (15) https://github.com/python/cpython/issues/108634

   (16) https://github.com/python/cpython/issues/85283


File: python.info,  Node: Portando para o Python 3 13,  Next: Mudanças em teste de regressão,  Prev: Mudanças na construção,  Up: O que há de novo no Python 3 13

1.1.12 Portando para o Python 3.13
----------------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções que podem exigir alterações no seu código.

* Menu:

* Alterações na API Python::
* Alterações na API C: Alterações na API C<3>.


File: python.info,  Node: Alterações na API Python,  Next: Alterações na API C<3>,  Up: Portando para o Python 3 13

1.1.12.1 Alterações na API Python
.................................

   * *note PEP 667: 142. introduz várias mudanças na semântica de *note
     locals(): 141. e *note f_locals: 182.:

        * Chamar *note locals(): 141. em um *note escopo otimizado: 17e.
          agora produz uma captura independente em cada chamada e,
          portanto, não atualiza mais implicitamente as referências
          retornadas anteriormente.  Obter o comportamento legado do
          CPython agora requer chamadas explícitas para atualizar o
          dicionário inicialmente retornado com os resultados de
          chamadas subsequentes para ‘locals()’.  Funções de execução de
          código que visam implicitamente ‘locals()’ (como ‘exec’ e
          ‘eval’) devem receber um espaço de nomes explícito para
          acessar seus resultados em um escopo otimizado.  (Alterado
          como parte da PEP 667(1).)

        * Chamar *note locals(): 141. de uma compreensão no módulo ou
          escopo de classe (inclusive via ‘exec’ ou ‘eval’) mais uma vez
          se comporta como se a compreensão estivesse sendo executada
          como uma função aninhada independente (isto é, as variáveis
          locais de o escopo que contém não está incluído).  No Python
          3.12, isso mudou para incluir as variáveis locais do escopo
          que o contém ao implementar a PEP 709(2).  (Alterado como
          parte da PEP 667(3).)

        * Acessar *note FrameType.f_locals: 182. em um *note escopo
          otimizado: 17e. agora retorna um proxy de “write-through” em
          vez de uma captura que é atualizado em horários mal
          especificados.  Se uma captura for desejada, ela deve ser
          criada explicitamente com ‘dict’ ou com o método ‘.copy()’ do
          proxy.  (Alterado como parte da PEP 667(4).)

   * *note functools.partial: 414. agora emite uma *note FutureWarning:
     415. quando é usado como método.  Seu comportamento será alterado
     em versões futuras do Python.  Envolva-a em *note staticmethod():
     416. se quiser preservar o comportamento antigo.  (Contribuição de
     Serhiy Storchaka em gh-121027(5).)

   * Uma exceção *note OSError: 417. agora é levantada por *note
     getpass.getuser(): 418. para qualquer falha na recuperação de um
     nome de usuário, em vez de *note ImportError: 419. em plataformas
     não-Unix ou *note KeyError: 344. em plataformas Unix onde o banco
     de dados de senhas está vazio.

   * O valor do atributo ‘mode’ de *note gzip.GzipFile: 41a. agora é uma
     string (‘'rb'’ ou ‘'wb'’) e não mais um inteiro (‘1’ ou ‘2’).  O
     valor do atributo ‘mode’ do objeto arquivo ou similar legível
     retornado por *note zipfile.ZipFile.open(): 41b. é agora ‘'rb'’ e
     não mais ‘'r'’.  (Contribuição de Serhiy Storchaka em
     gh-115961(6).)

   * *note mailbox.Maildir: 41c. agora ignora arquivos com um ponto
     inicial (‘.’).  (Contribuição de Zackery Spytz em gh-65559(7).)

   * *note pathlib.Path.glob(): 22d. e *note rglob(): 22e. agora
     retornam arquivos e diretórios se um padrão que termina com “‘**’”
     for fornecido, em vez de apenas diretórios.  Os usuários podem
     adicionar uma barra final para manter o comportamento anterior e
     corresponder apenas aos diretórios.

   * O módulo *note threading: ed. agora espera que o módulo ‘_thread’
     tenha uma função ‘_is_main_interpreter’.  É uma função sem
     argumentos que retorna ‘True’ se o interpretador atual for o
     interpretador principal.

     Qualquer biblioteca ou aplicação que forneça um módulo ‘_thread’
     personalizado deve obrigatoriamente fornecer
     ‘_is_main_interpreter()’, da mesma forma que outros atributos
     “privados” do módulo.  (Veja gh-112826(8).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0667/

   (2) https://peps.python.org/pep-0709/

   (3) https://peps.python.org/pep-0667/

   (4) https://peps.python.org/pep-0667/

   (5) https://github.com/python/cpython/issues/121027

   (6) https://github.com/python/cpython/issues/115961

   (7) https://github.com/python/cpython/issues/65559

   (8) https://github.com/python/cpython/issues/112826


File: python.info,  Node: Alterações na API C<3>,  Prev: Alterações na API Python,  Up: Portando para o Python 3 13

1.1.12.2 Alterações na API C
............................

   * ‘Python.h’ não inclui mais o cabeçalho padrão ‘<ieeefp.h>’.  Ele
     foi incluído para a função ‘finite()’ que agora é fornecida pelo
     cabeçalho ‘<math.h>’.  Agora deve ser incluído explicitamente, se
     necessário.  Remove também a macro ‘HAVE_IEEEFP_H’.  (Contribuição
     de Victor Stinner em gh-108765(1).)

   * ‘Python.h’ não inclui mais estes arquivos de cabeçalho padrão:
     ‘<time.h>’, ‘<sys/select.h>’ e ‘<sys/time.h>’.  Se necessário,
     deverão agora ser incluídos explicitamente.  Por exemplo,
     ‘<time.h>’ fornece as funções ‘clock()’ e ‘gmtime()’,
     ‘<sys/select.h>’ fornece o ‘select()’, e ‘<sys/time.h>’ fornece as
     funções ‘futimes()’, ‘gettimeofday()’ e ‘setitimer()’.
     (Contribuição de Victor Stinner em gh-108765(2).)

   * No Windows, ‘Python.h’ não inclui mais o arquivo de cabeçalho
     padrão ‘<stddef.h>’.  Se necessário, deverá agora ser incluído
     explicitamente.  Por exemplo, ele fornece a função ‘offsetof()’ e
     os tipos ‘size_t’ e ‘ptrdiff_t’.  Incluindo ‘<stddef.h>’
     explicitamente já era necessário para todas as outras plataformas,
     a macro ‘HAVE_STDDEF_H’ só é definida no Windows.  (Contribuição de
     Victor Stinner em gh-108765(3).)

   * Se a macro *note Py_LIMITED_API: 41e. estiver definida, as macros
     ‘Py_BUILD_CORE’, ‘Py_BUILD_CORE_BUILTIN’ e ‘Py_BUILD_CORE_MODULE’
     agora são indefinidas por ‘<Python.h>’.  (Contribuição de Victor
     Stinner em gh-85283(4).)

   * As macros antigas da lixeira ‘Py_TRASHCAN_SAFE_BEGIN’ e
     ‘Py_TRASHCAN_SAFE_END’ foram removidas.  Elas devem ser
     substituídas pelas novas macros ‘Py_TRASHCAN_BEGIN’ e
     ‘Py_TRASHCAN_END’.

     Uma função ‘tp_dealloc’ que contém as macros antigas, como:

          static void
          dealocador_de_meutipo(meutipo *p)
          {
              PyObject_GC_UnTrack(p);
              Py_TRASHCAN_SAFE_BEGIN(p);
              ...
              Py_TRASHCAN_SAFE_END
          }

     deve migrar para as novas macros da seguinte forma:

          static void
          dealocador_de_meutipo(meutipo *p)
          {
              PyObject_GC_UnTrack(p);
              Py_TRASHCAN_BEGIN(p, dealocador_de_meutipo);
              ...
              Py_TRASHCAN_END
          }

     Observe que ‘Py_TRASHCAN_BEGIN’ tem um segundo argumento que deve
     ser a função de desalocação em que está.  As novas macros foram
     adicionadas no Python 3.8 e as macros antigas foram descontinuadas
     no Python 3.11.  (Contribuição de Irit Katriel em gh-105111(5).)

   * *note PEP 667: 142. introduz várias mudanças em funções
     relacionadas a quadro:

        * Os efeitos da mutação do dicionário retornado de *note
          PyEval_GetLocals(): 353. em um *note escopo otimizado: 17e.
          foram alterados.  Novas entradas de dict adicionadas desta
          forma agora 'apenas' ficarão visíveis para chamadas *note
          PyEval_GetLocals(): 353. subsequentes nesse quadro, como *note
          PyFrame_GetLocals(): 41f, *note locals(): 141. e *note
          FrameType.f_locals: 182. não acessa mais o mesmo dicionário
          armazenado em cache subjacente.  As alterações feitas nas
          entradas para nomes de variáveis reais e nomes adicionados
          através das interfaces proxy de “write-through” serão
          substituídas em chamadas subsequentes para *note
          PyEval_GetLocals(): 353. nesse quadro.  A atualização de
          código recomendada depende de como a função estava sendo
          usada, portanto, consulte o aviso de descontinuação na função
          para obter detalhes.

        * Chamar *note PyFrame_GetLocals(): 41f. em um *note escopo
          otimizado: 17e. agora retorna um proxy de “write-through” em
          vez de uma captura que é atualizada em horários mal
          especificados.  Se uma captura for desejada, ela deve ser
          criada explicitamente (por exemplo, com *note PyDict_Copy():
          420.) ou chamando a nova API *note PyEval_GetFrameLocals():
          352.

        * ‘PyFrame_FastToLocals()’ e ‘PyFrame_FastToLocalsWithError()’
          não têm mais nenhum efeito.  Chamar essas funções tem sido
          redundante desde o Python 3.11, quando *note
          PyFrame_GetLocals(): 41f. foi introduzido pela primeira vez.

        * ‘PyFrame_LocalsToFast()’ não tem mais efeito.  Chamar esta
          função é redundante agora que *note PyFrame_GetLocals(): 41f.
          retorna um proxy de “write-through” para *note escopos
          otimizados: 17e.

   * O Python 3.13 removeu muitas funções privadas.  Algumas delas podem
     ser substituídas usando estas alternativas:

        * ‘_PyDict_Pop()’: *note PyDict_Pop(): 341. ou *note
          PyDict_PopString(): 342.;

        * ‘_PyDict_GetItemWithError()’: *note PyDict_GetItemRef(): 33a.;

        * ‘_PyErr_WriteUnraisableMsg()’: *note PyErr_FormatUnraisable():
          34c.;

        * ‘_PyEval_SetTrace()’: *note PyEval_SetTrace(): 421. ou *note
          PyEval_SetTraceAllThreads(): 422.;

        * ‘_PyList_Extend()’: *note PyList_Extend(): 35b.;

        * ‘_PyLong_AsInt()’: *note PyLong_AsInt(): 35f.;

        * ‘_PyMem_RawStrdup()’: ‘strdup()’;

        * ‘_PyMem_Strdup()’: ‘strdup()’;

        * ‘_PyObject_ClearManagedDict()’: *note
          PyObject_ClearManagedDict(): 36a.;

        * ‘_PyObject_VisitManagedDict()’: *note
          PyObject_VisitManagedDict(): 369.;

        * ‘_PyThreadState_UncheckedGet()’: *note
          PyThreadState_GetUnchecked(): 371.;

        * ‘_PyTime_AsSecondsDouble()’: *note PyTime_AsSecondsDouble():
          330.;

        * ‘_PyTime_GetMonotonicClock()’: *note PyTime_Monotonic(): 331.
          ou *note PyTime_MonotonicRaw(): 332.;

        * ‘_PyTime_GetPerfCounter()’: *note PyTime_PerfCounter(): 333.
          ou *note PyTime_PerfCounterRaw(): 334.;

        * ‘_PyTime_GetSystemClock()’: *note PyTime_Time(): 335. ou *note
          PyTime_TimeRaw(): 336.;

        * ‘_PyTime_MAX’: *note PyTime_MAX: 32f.;

        * ‘_PyTime_MIN’: *note PyTime_MIN: 32e.;

        * ‘_PyTime_t’: *note PyTime_t: 32d.;

        * ‘_Py_HashPointer()’: *note Py_HashPointer(): 368.;

        * ‘_Py_IsFinalizing()’: *note Py_IsFinalizing(): 358.

     O projeto pythoncapi-compat(6) pode ser usado para obter a maioria
     dessas novas funções no Python 3.12 e versões anteriores.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/108765

   (2) https://github.com/python/cpython/issues/108765

   (3) https://github.com/python/cpython/issues/108765

   (4) https://github.com/python/cpython/issues/85283

   (5) https://github.com/python/cpython/issues/105111

   (6) https://github.com/python/pythoncapi-compat/


File: python.info,  Node: Mudanças em teste de regressão,  Next: Alterações notáveis no 3 13 1,  Prev: Portando para o Python 3 13,  Up: O que há de novo no Python 3 13

1.1.13 Mudanças em teste de regressão
-------------------------------------

   * Python construído com *note -with-pydebug: 424. do ‘configure’
     agora oferece suporte a uma opção de linha de comando *note -X
     presite=pacote.módulo: 176.  Se usado, especifica um módulo que
     deve ser importado no início do ciclo de vida do interpretador,
     antes que ‘site.py’ seja executado.  (Contribuição de Łukasz Langa
     em gh-110769(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/110769


File: python.info,  Node: Alterações notáveis no 3 13 1,  Next: Alterações notáveis no 3 13 4,  Prev: Mudanças em teste de regressão,  Up: O que há de novo no Python 3 13

1.1.14 Alterações notáveis no 3.13.1
------------------------------------

* Menu:

* sys: sys<2>.


File: python.info,  Node: sys<2>,  Up: Alterações notáveis no 3 13 1

1.1.14.1 sys
............

   * A função especial *note sys.getobjects(): 427, anteriormente não
     documentada, que só existe em construções especializadas do Python,
     agora pode retornar objetos de outros interpretadores além daquele
     em que foi chamada.


File: python.info,  Node: Alterações notáveis no 3 13 4,  Prev: Alterações notáveis no 3 13 1,  Up: O que há de novo no Python 3 13

1.1.15 Alterações notáveis no 3.13.4
------------------------------------

* Menu:

* os.path: os path<2>.
* tarfile::


File: python.info,  Node: os path<2>,  Next: tarfile,  Up: Alterações notáveis no 3 13 4

1.1.15.1 os.path
................

   * O parâmetro 'strict' para *note os.path.realpath(): 225. aceita um
     novo valor, *note os.path.ALLOW_MISSING: 42a.  Se usado, erros
     diferentes de *note FileNotFoundError: 42b. serão levantados
     novamente; o caminho resultante pode estar ausente, mas estará
     livre de links simbólicos.  (Contribuição de Petr Viktorin para CVE
     2025-4517(1).)

   ---------- Footnotes ----------

   (1) https://www.cve.org/CVERecord?id=CVE-2025-4517


File: python.info,  Node: tarfile,  Prev: os path<2>,  Up: Alterações notáveis no 3 13 4

1.1.15.2 tarfile
................

   * *note data_filter(): 42d. agora normaliza alvos de links simbólicos
     para evitar ataques de travessia de caminho.  (Contribuição de Petr
     Viktorin em gh-127987(1) e CVE 2025-4138(2).)

   * *note extractall(): 42e. agora ignora a correção de atributos de
     diretório quando um diretório é removido ou substituído por outro
     tipo de arquivo.  (Contribuição de Petr Viktorin em gh-127987(3) e
     CVE 2024-12718(4).)

   * *note extract(): 42f. e *note extractall(): 42e. agora (re)aplicam
     o filtro de extração ao substituir um link (físico ou simbólico)
     por uma cópia de outro membro do arquivo e ao corrigir atributos de
     diretório.  O primeiro levanta uma nova exceção, *note
     LinkFallbackError: 430.  (Contribuição de Petr Viktorin para CVE
     2025-4330(5) e CVE 2024-12718(6).)

   * *note extract(): 42f. e *note extractall(): 42e. não extraem mais
     membros rejeitados quando *note errorlevel(): 431. é zero.
     (Contribuição de Matt Prodani e Petr Viktorin em gh-112887(7) e CVE
     2025-4435(8).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/127987

   (2) https://www.cve.org/CVERecord?id=CVE-2025-4138

   (3) https://github.com/python/cpython/issues/127987

   (4) https://www.cve.org/CVERecord?id=CVE-2024-12718

   (5) https://www.cve.org/CVERecord?id=CVE-2025-4330

   (6) https://www.cve.org/CVERecord?id=CVE-2024-12718

   (7) https://github.com/python/cpython/issues/112887

   (8) https://www.cve.org/CVERecord?id=CVE-2025-4435


File: python.info,  Node: O que há de novo no Python 3 12,  Next: O que há de novo no Python 3 11,  Prev: O que há de novo no Python 3 13,  Up: O que há de novo no Python

1.2 O que há de novo no Python 3.12
===================================


Editor: Adam Turner

Este artigo explica os novos recursos no Python 3.12, em comparação com
3.11.  Python 3.12 foi lançado em 2 de outubro de 2023.  Veja *note
changelog: 13c. para uma lista completa de mudanças.

Ver também
..........

PEP 693(1) – Agendamento de lançamento do Python 3.12

* Menu:

* Resumo – Destaques da versão: Resumo – Destaques da versão<2>.
* Novas funcionalidades: Novas funcionalidades<3>.
* Novos recursos relacionados a dicas de tipo::
* Outras mudanças na linguagem: Outras mudanças na linguagem<2>.
* Novos módulos: Novos módulos<2>.
* Módulos melhorados: Módulos melhorados<2>.
* Otimizações: Otimizações<2>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<2>.
* Ferramentas e daemons::
* Descontinuados::
* Removidos::
* Portando para Python 3.12: Portando para Python 3 12.
* Mudanças na construção: Mudanças na construção<2>.
* Alterações na API C: Alterações na API C<4>.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0693/


File: python.info,  Node: Resumo – Destaques da versão<2>,  Next: Novas funcionalidades<3>,  Up: O que há de novo no Python 3 12

1.2.1 Resumo – Destaques da versão
----------------------------------

Python 3.12 é uma versão estável da linguagem de programação Python, com
uma combinação de alterações na linguagem e na biblioteca padrão.  As
alterações da biblioteca se concentram na limpeza de APIs
descontinuadas, usabilidade e correção.  É importante notar que o pacote
‘distutils’ foi removido da biblioteca padrão.  O suporte ao sistema de
arquivos em *note os: a1. e *note pathlib: a4. teve uma série de
melhorias e vários módulos têm melhor desempenho.

As mudanças de linguagem se concentram na usabilidade, já que *note
f-strings: 436. tiveram muitas limitações removidas e as sugestões ‘Did
you mean …’ continuam a melhorar.  A nova *note sintaxe de parâmetro
type: 437. e a instrução *note type: 438. melhoram a ergonomia para usar
*note tipos genéricos: 439. e *note apelidos de tipos: 43a. com
verificadores de tipo estáticos.

Este artigo não tenta fornecer uma especificação completa de todos os
novos recursos, mas fornece uma visão geral conveniente.  Para detalhes
completos, você deve consultar a documentação, como *note Referência da
Biblioteca: 144. e *note Referência da Linguagem: 145.  Se você quiser
entender a implementação completa e a justificativa do design para uma
mudança, consulte a PEP para um novo recurso específico; mas observe que
as PEPs geralmente não são mantidas atualizadas depois que um recurso é
totalmente implementado.

__________________________________________________________________

Novos recursos de sintaxe:

   * *note PEP 695: 437, sintaxe de parâmetro de tipo e a instrução
     *note type: 438.

Novos recursos de gramática:

   * *note PEP 701: 43b, *note f-strings: 436. na gramática

Melhorias no interpretador:

   * *note PEP 684: 43c, uma única *note GIL: 148. por interpretador

   * *note PEP 669: 43d, monitoramento de baixo impacto

   * *note Aprimoradas as sugestões 'Did you mean ...': 43e. para as
     exceções *note NameError: 43f, *note ImportError: 419. e *note
     SyntaxError: 18d.

Melhorias no modelo de dados Python:

   * *note PEP 688: 440, usando o *note protocolo de buffer: 2e8. do
     Python

Melhorias significativas na biblioteca padrão:

   * A classe *note pathlib.Path: 229. agora oferece suporte a fazer
     subclasses

   * O módulo *note os: a1. recebeu vários aprimoramentos para suporte
     ao Windows

   * Uma *note interface de linha de comando: 441. foi adicionada ao
     módulo *note sqlite3: cf.

   * As verificações de *note isinstance(): 442. para *note protocolos
     verificáveis em tempo de execução: 443. desfruta de um aumento de
     velocidade entre duas e 20 vezes

   * O pacote *note asyncio: a. teve vários aprimoramentos desempenho,
     com alguns benchmarks mostrando um aumento de 75% na velocidade.

   * Uma *note interface de linha de comando: 444. foi adicionada ao
     módulo *note uuid: 110.

   * Devido às alterações na *note PEP 701: 43b, a produção de tokens
     por meio do módulo *note tokenize: fb. é até 64% mais rápida.

Melhorias de Segurança:

   * Substitui as implementações embutidas do *note hashlib: 68. de
     SHA1, SHA3, SHA2-384, SHA2-512 e MD5 pelo código formalmente
     verificado do projeto HACL*(1).  Essas implementações embutidas
     permanecem como fallbacks que são usados somente quando o OpenSSL
     não as fornece.

Melhorias na API C:

   * *note PEP 697: 445, tier instável de API C

   * *note PEP 683: 446, objetos imortal

Melhorias na implementação do CPython:

   * *note PEP 709: 447, inlining de compreensão

   * *note Suporte do CPython: 18f. para o perfilador Linux ‘perf’

   * Implementa proteção contra estouro de pilha em plataformas
     suportadas

Novos recursos de tipagem:

   * *note PEP 692: 448, usando *note TypedDict: 162. para anotar *note
     **kwargs: 449.

   * *note PEP 698: 44a, decorador *note typing.override(): 44b.

Descontinuações, remoções ou restrições importantes:

   * PEP 623(2): Remove ‘wstr’ os objetos Unicode na API C do Python,
     reduzindo o tamanho de cada objeto *note str: 44c. em pelo menos 8
     bytes.

   * PEP 632(3): Remove o pacote ‘distutils’.  Consulte o guia de
     migração(4) para obter conselhos sobre a substituição das APIs
     fornecidas por ele.  O pacote de terceiros Setuptools(5) continua
     fornecendo ‘distutils’, se você ainda precisar dele no Python 3.12
     e posterior.

   * gh-95299(6): Não pré-instala ‘setuptools’ em ambientes virtuais
     criados com *note venv: 111.  Isso significa que ‘distutils’,
     ‘setuptools’, ‘pkg_resources’ e ‘easy_install’ não estarão mais
     disponíveis por padrão; para acessá-los, execute ‘pip install
     setuptools’ no ambiente virtual *note ativado: 44d.

   * Os módulos ‘asynchat’, ‘asyncore’ e ‘imp’ foram removidos,
     juntamente com vários *note apelidos de métodos: 44e. de *note
     unittest.TestCase: 44f.

   ---------- Footnotes ----------

   (1) https://github.com/hacl-star/hacl-star/

   (2) https://peps.python.org/pep-0623/

   (3) https://peps.python.org/pep-0632/

   (4) https://peps.python.org/pep-0632/#migration-advice

   (5) 
https://setuptools.pypa.io/en/latest/deprecated/distutils-legacy.html

   (6) https://github.com/python/cpython/issues/95299


File: python.info,  Node: Novas funcionalidades<3>,  Next: Novos recursos relacionados a dicas de tipo,  Prev: Resumo – Destaques da versão<2>,  Up: O que há de novo no Python 3 12

1.2.2 Novas funcionalidades
---------------------------

* Menu:

* PEP 695; Sintaxe do parâmetro de tipo: PEP 695 Sintaxe do parâmetro de tipo.
* PEP 701; Formalização sintática de f-strings: PEP 701 Formalização sintática de f-strings.
* PEP 684; Uma GIL por interpretador: PEP 684 Uma GIL por interpretador.
* PEP 669; Monitoramento de baixo impacto para CPython: PEP 669 Monitoramento de baixo impacto para CPython.
* PEP 688; Tornando o protocolo de buffer acessível no Python: PEP 688 Tornando o protocolo de buffer acessível no Python.
* PEP 709; Fazendo inline de compreensão: PEP 709 Fazendo inline de compreensão.
* Mensagens de erro melhoradas: Mensagens de erro melhoradas<2>.


File: python.info,  Node: PEP 695 Sintaxe do parâmetro de tipo,  Next: PEP 701 Formalização sintática de f-strings,  Up: Novas funcionalidades<3>

1.2.2.1 PEP 695: Sintaxe do parâmetro de tipo
.............................................

As classes e funções genéricas sob a PEP 484(1) foram declaradas usando
uma sintaxe detalhada que deixou o escopo dos parâmetros de tipo pouco
claro e exigiu declarações explícitas de variação.

PEP 695(2) apresenta uma maneira nova, mais compacta e explícita de
criar *note classes genéricas: 452. e *note funções: 453.:

     def max[T](args: Iterable[T]) -> T:
         ...

     class list[T]:
         def __getitem__(self, index: int, /) -> T:
             ...

         def append(self, element: T) -> None:
             ...

Além disso, a PEP introduz uma nova maneira de declarar *note apelidos
de tipos: 454. usando a instrução *note type: 438, que cria uma
instância de *note TypeAliasType: 455.:

     type Point = tuple[float, float]

Os apelidos de tipo também podem ser *note genéricos: 456.:

     type Point[T] = tuple[T, T]

A nova sintaxe permite declarar os parâmetros *note TypeVarTuple: 15f. e
*note ParamSpec: 15e, bem como os parâmetros *note TypeVar: 15d. com
limites ou restrições:

     type IntFunc[**P] = Callable[P, int]  # ParamSpec
     type LabeledTuple[*Ts] = tuple[str, *Ts]  # TypeVarTuple
     type HashableSequence[T: Hashable] = Sequence[T]  # TypeVar com vínculo
     type IntOrStrSequence[T: (int, str)] = Sequence[T]  # TypeVar com restrições

O valor dos apelidos de tipo e os limites e restrições das variáveis de
tipo criadas por meio dessa sintaxe são avaliados somente sob demanda
(consulte *note avaliação preguiçosa: 457.).  Isso significa que os
apelidos de tipo podem se referir a outros tipos definidos
posteriormente no arquivo.

Os parâmetros de tipo declarados por meio de uma lista de parâmetros de
tipo são visíveis no escopo da declaração e em quaisquer escopos
aninhados, mas não no escopo externo.  Por exemplo, eles podem ser
usados nas anotações de tipo para os métodos de uma classe genérica ou
no corpo da classe.  Entretanto, não podem ser usadas no escopo do
módulo depois que a classe é definida.  Consulte *note Listas de
parâmetros de tipo: 2b3. para obter uma descrição detalhada da semântica
de tempo de execução dos parâmetros de tipo.

Para dar suporte a essa semântica de escopo, um novo tipo de escopo é
introduzido, o *note escopo de anotação: 188.  Os escopos de anotação se
comportam, em sua maior parte, como escopos de função, mas interagem de
forma diferente com os escopos de classe.  No Python 3.13, *note
anotações: 458. também serão avaliadas em escopos de anotação.

Consulte PEP 695(3) para obter mais detalhes.

(PEP escrita por Eric Traut.  Implementação por Jelle Zijlstra, Eric
Traut e outros em gh-103764(4)).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/

   (2) https://peps.python.org/pep-0695/

   (3) https://peps.python.org/pep-0695/

   (4) https://github.com/python/cpython/issues/103764


File: python.info,  Node: PEP 701 Formalização sintática de f-strings,  Next: PEP 684 Uma GIL por interpretador,  Prev: PEP 695 Sintaxe do parâmetro de tipo,  Up: Novas funcionalidades<3>

1.2.2.2 PEP 701: Formalização sintática de f-strings
....................................................

PEP 701(1) resolve algumas restrições no uso de *note f-strings: 436.
Componentes de expressão dentro de f-strings agora podem ser qualquer
expressão válida do Python, incluindo strings reutilizando a mesma aspa
que a f-string contida, expressões multi-linhas, comentários, barras
invertidas e sequências de escape unicode.  Vamos cobri-los em detalhes:

   * Reuso de aspas: no Python 3.11, reusar as mesmas aspas que a
     f-string que contém levanta um *note SyntaxError: 18d, forçando o
     usuário a usar outras aspas disponíveis (como usar aspas duplas ou
     triplas se a f-string usa aspas simples).  No Python 3.12, agora
     você pode fazer coisas como esta:

          >>> songs = ['Take me back to Eden', 'Alkaline', 'Ascensionism']
          >>> f"This is the playlist: {", ".join(songs)}"
          'This is the playlist: Take me back to Eden, Alkaline, Ascensionism'

     Observe que, antes dessa alteração, não havia limite explícito de
     como f-strings podem ser aninhadas, mas o fato de as aspas de
     string não poderem ser reusadas dentro do componente de expressão
     de f-strings tornava impossível aninhar f-strings arbitrariamente.
     Na verdade, esta é a f-string mais aninhada que poderia ser
     escrita:

          >>> f"""{f'''{f'{f"{1+1}"}'}'''}"""
          '2'

     Como agora f-strings podem conter qualquer expressão Python válida
     dentro de componentes de expressão, agora é possível aninhar
     f-strings arbitrariamente:

          >>> f"{f"{f"{f"{f"{f"{1+1}"}"}"}"}"}"
          '2'

   * Expressões e comentários multilinhas: no Python 3.11, as expressões
     f-string devem ser definidas em uma única linha, ainda que a
     expressão dentro de f-string externas possa normalmente abranger
     várias linhas (como listas literais sendo definidas em várias
     linhas), tornando-as mais difíceis de ler.  No Python 3.12, agora
     você pode definir f-strings abrangendo várias linhas e adicionar
     comentários inline:

          >>> f"This is the playlist: {", ".join([
          ...     'Take me back to Eden',  # My, my, those eyes like fire
          ...     'Alkaline',              # Not acid nor alkaline
          ...     'Ascensionism'           # Take to the broken skies at last
          ... ])}"
          'This is the playlist: Take me back to Eden, Alkaline, Ascensionism'

   * Contrabarra e caracteres unicode: antes do Python 3.12, as
     expressões f-string não podiam conter nenhum caractere ‘\’.  Isso
     também afetou as *note sequências de escape: 45a. unicode (como
     ‘\N{snowman}’), pois elas contêm a parte ‘\N’ que anteriormente não
     podia fazer parte dos componentes de expressão de f-strings.
     Agora, você pode definir expressões como esta:

          >>> print(f"This is the playlist: {"\n".join(songs)}")
          This is the playlist: Take me back to Eden
          Alkaline
          Ascensionism
          >>> print(f"This is the playlist: {"\N{BLACK HEART SUIT}".join(songs)}")
          This is the playlist: Take me back to Eden♥Alkaline♥Ascensionism

Veja PEP 701(2) para mais detalhes.

Como um efeito colateral positivo de como esse recurso foi implementado
(analisando f-strings com o analisador GASE ou PEG(3)), agora as
mensagens de erro para f-strings são mais precisas e incluem o local
exato do erro.  Por exemplo, no Python 3.11, a seguinte f-string levanta
um *note SyntaxError: 18d.:

     >>> my_string = f"{x z y}" + f"{1 + 1}"
       File "<stdin>", line 1
         (x z y)
          ^^^
     SyntaxError: f-string: invalid syntax. Perhaps you forgot a comma?

mas a mensagem de erro não inclui o local exato do erro dentro da linha
e também tem a expressão artificialmente cercada por parênteses.  No
Python 3.12, como as f-strings são analisadas com o analisador GASE, as
mensagens de erro podem ser mais precisas e mostrar a linha inteira:

     >>> minha_string = f"{x z y}" + f"{1 + 1}"
       File "<stdin>", line 1
         minha_string = f"{x z y}" + f"{1 + 1}"
                        ^^^
     SyntaxError: invalid syntax. Perhaps you forgot a comma?

(Contribuição de Pablo Galindo, Batuhan Taskaya, Lysandros Nikolaou,
Cristián Maureira-Fredes e Marta Gómez em gh-102856(4).  PEP escrito por
Pablo Galindo, Batuhan Taskaya, Lysandros Nikolaou e Marta Gómez).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0701/

   (2) https://peps.python.org/pep-0701/

   (3) https://peps.python.org/pep-0617/

   (4) https://github.com/python/cpython/issues/102856


File: python.info,  Node: PEP 684 Uma GIL por interpretador,  Next: PEP 669 Monitoramento de baixo impacto para CPython,  Prev: PEP 701 Formalização sintática de f-strings,  Up: Novas funcionalidades<3>

1.2.2.3 PEP 684: Uma GIL por interpretador
..........................................

A PEP 684(1) introduz uma *note GIL: 148. por interpretador, para que
subinterpretadores possam agora ser criados com uma GIL único por
interpretador.  Isso permite que programas Python aproveitem ao máximo
vários núcleos de CPU. Isso está atualmente disponível apenas por meio
da API C, embora uma API Python seja esperada para 3.13(2).

Use a nova função *note Py_NewInterpreterFromConfig(): 45c. para criar
um interpretador com sua própria GIL:

     PyInterpreterConfig config = {
         .check_multi_interp_extensions = 1,
         .gil = PyInterpreterConfig_OWN_GIL,
     };
     PyThreadState *tstate = NULL;
     PyStatus status = Py_NewInterpreterFromConfig(&tstate, &config);
     if (PyStatus_Exception(status)) {
         return -1;
     }
     /* O novo interpretador agora está ativo na atual thread. */

Para obter mais exemplos de como usar a API C para subinterpretadores
com uma GIL por interpretador, consulte
‘Modules/_xxsubinterpretersmodule.c’.

(Contribuição de Eric Snow em gh-104210(3), etc.)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0684/

   (2) https://peps.python.org/pep-0554/

   (3) https://github.com/python/cpython/issues/104210


File: python.info,  Node: PEP 669 Monitoramento de baixo impacto para CPython,  Next: PEP 688 Tornando o protocolo de buffer acessível no Python,  Prev: PEP 684 Uma GIL por interpretador,  Up: Novas funcionalidades<3>

1.2.2.4 PEP 669: Monitoramento de baixo impacto para CPython
............................................................

A PEP 669(1) define uma nova *note API: da. para perfis, depuradores e
outras ferramentas monitorarem eventos no CPython.  Ela abrange uma
ampla gama de eventos, incluindo chamadas, retornos, linhas, exceções,
saltos e mais.  Isso significa que você só paga pelo que usa, fornecendo
suporte para depuradores e ferramentas de cobertura com sobrecarga quase
zero.  Veja *note sys.monitoring: da. para mais detalhes.

(Contribuição de Mark Shannon em gh-103082(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0669/

   (2) https://github.com/python/cpython/issues/103082


File: python.info,  Node: PEP 688 Tornando o protocolo de buffer acessível no Python,  Next: PEP 709 Fazendo inline de compreensão,  Prev: PEP 669 Monitoramento de baixo impacto para CPython,  Up: Novas funcionalidades<3>

1.2.2.5 PEP 688: Tornando o protocolo de buffer acessível no Python
...................................................................

A PEP 688(1) apresenta uma maneira de usar o *note protocolo de buffer:
2e8. do código Python.  As classes que implementam o método *note
__buffer__(): 45f. agora podem ser usadas como tipos de buffer.

O novo *note collections.abc.Buffer: 2e9. ABC fornece uma maneira padrão
de representar objetos de buffer, por exemplo, em anotações de tipo.  A
nova enumeração *note inspect.BufferFlags: 460. representa os
sinalizadores que podem ser usados para personalizar a criação do
buffer.  (Contribuição de Jelle Zijlstra em gh-102500(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0688/

   (2) https://github.com/python/cpython/issues/102500


File: python.info,  Node: PEP 709 Fazendo inline de compreensão,  Next: Mensagens de erro melhoradas<2>,  Prev: PEP 688 Tornando o protocolo de buffer acessível no Python,  Up: Novas funcionalidades<3>

1.2.2.6 PEP 709: Fazendo inline de compreensão
..............................................

As compreensões de dicionário, lista e conjunto agora estão embutidas,
em vez de criar um novo objeto função de uso único para cada execução da
compreensão.  Isso acelera a execução de uma compreensão em até duas
vezes.  Veja PEP 709(1) para mais detalhes.

As variáveis de iteração de compreensão permanecem isoladas e não
sobrescrevem uma variável de mesmo nome no escopo externo, nem são
visíveis após a compreensão.  O uso de inlining resulta em algumas
mudanças visíveis de comportamento:

   * Não há mais um quadro separado para a compreensão em tracebacks
     (situação da pilha de execução), e o rastreamento/criação de perfil
     não mostra mais a compreensão como uma chamada de função.

   * O módulo *note symtable: d8. não produzirá mais tabelas de símbolos
     filhos para cada compreensão; em vez disso, os locais da
     compreensão serão incluídos na tabela de símbolos da função pai.

   * Chamar *note locals(): 141. dentro de uma compreensão agora inclui
     variáveis de fora da compreensão e não inclui mais a variável
     sintética ‘.0’ para o “argumento” de compreensão.

   * Uma compreensão que itera diretamente sobre ‘locals()’ (por
     exemplo, ‘[k for k in locals()]’) pode ver “RuntimeError:
     dictionary changed size during iteration” quando executada sob
     rastreamento (por exemplo, medição de cobertura de código).  Esse é
     o mesmo comportamento já observado, por exemplo, em ‘for k in
     locals():’.  Para evitar o erro, primeiro crie uma lista de chaves
     para iterar: ‘keys = list(locals()); [k for k in keys]’.

(Contribuição de Carl Meyer and Vladimir Matveev em PEP 709(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0709/

   (2) https://peps.python.org/pep-0709/


File: python.info,  Node: Mensagens de erro melhoradas<2>,  Prev: PEP 709 Fazendo inline de compreensão,  Up: Novas funcionalidades<3>

1.2.2.7 Mensagens de erro melhoradas
....................................

   * Os módulos da biblioteca padrão agora são potencialmente sugeridos
     como parte das mensagens de erro exibidas pelo interpretador quando
     uma exceção *note NameError: 43f. é levantada ao nível superior.
     (Contribuição de Pablo Galindo em gh-98254(1).)

          >>> sys.version_info
          Traceback (most recent call last):
            File "<stdin>", line 1, in <module>
          NameError: name 'sys' is not defined. Did you forget to import 'sys'?

   * Melhora a sugestão de erro para exceções *note NameError: 43f. para
     instâncias.  Agora, se uma exceção *note NameError: 43f. for
     levantada em um método e a instância tiver um atributo que é
     exatamente igual ao nome na exceção, a sugestão incluirá
     ‘self.<NOME>’ em vez da correspondência mais próxima no escopo do
     método.  (Contribuição de Pablo Galindo em gh-99139(2).)

          >>> class A:
          ...    def __init__(self):
          ...        self.blech = 1
          ...
          ...    def foo(self):
          ...        somethin = blech
          ...
          >>> A().foo()
          Traceback (most recent call last):
            File "<stdin>", line 1
              somethin = blech
                         ^^^^^
          NameError: name 'blech' is not defined. Did you mean: 'self.blech'?

   * Melhora a mensagem de erro de *note SyntaxError: 18d. quando o
     usuário digita ‘import x from y’ ao invés de ‘from y import x’.
     (Contribuição de Pablo Galindo em gh-98931(3).)

          >>> import a.y.z from b.y.z
          Traceback (most recent call last):
            File "<stdin>", line 1
              import a.y.z from b.y.z
              ^^^^^^^^^^^^^^^^^^^^^^^
          SyntaxError: Did you mean to use 'from ... import ...' instead?

   * Exceções *note ImportError: 419. levantadas a partir de instruções
     ‘from <módulo> import <nome>’ com falha agora incluem sugestões
     para o valor de ‘<nome>’ com base nos nomes disponíveis em
     ‘<módulo>’.  (Contribuição de Pablo Galindo em gh-91058(4).)

          >>> from collections import chainmap
          Traceback (most recent call last):
            File "<stdin>", line 1, in <module>
          ImportError: cannot import name 'chainmap' from 'collections'. Did you mean: 'ChainMap'?

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98254

   (2) https://github.com/python/cpython/issues/99139

   (3) https://github.com/python/cpython/issues/98931

   (4) https://github.com/python/cpython/issues/91058


File: python.info,  Node: Novos recursos relacionados a dicas de tipo,  Next: Outras mudanças na linguagem<2>,  Prev: Novas funcionalidades<3>,  Up: O que há de novo no Python 3 12

1.2.3 Novos recursos relacionados a dicas de tipo
-------------------------------------------------

Esta seção cobre as principais mudanças que afetam as dicas de tipo da
dicas de tipo(1) e o módulo *note typing: 104.

* Menu:

* PEP 692; Usando TypedDict para tipagem mais precisa de **kwargs: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs.
* PEP 698; Substitui decorador para tipagem estática: PEP 698 Substitui decorador para tipagem estática.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/


File: python.info,  Node: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs,  Next: PEP 698 Substitui decorador para tipagem estática,  Up: Novos recursos relacionados a dicas de tipo

1.2.3.1 PEP 692: Usando ‘TypedDict’ para tipagem mais precisa de ‘**kwargs’
...........................................................................

A tipagem de ‘**kwargs’ em uma assinatura de função conforme introduzido
por PEP 484(1) permitia anotações válidas apenas nos casos em que todos
os ‘**kwargs’ eram do mesmo tipo.

A PEP 692(2) especifica uma maneira mais precisa de definir tipos de
‘**kwargs’, contando com dicionários tipados:

     from typing import TypedDict, Unpack

     class Filme(TypedDict):
       nome: str
       ano: int

     def foo(**kwargs: Unpack[Filme]): ...

Veja PEP 692(3) para mais detalhes.

(Contribuição de Franek Magiera em gh-103629(4).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/

   (2) https://peps.python.org/pep-0692/

   (3) https://peps.python.org/pep-0692/

   (4) https://github.com/python/cpython/issues/103629


File: python.info,  Node: PEP 698 Substitui decorador para tipagem estática,  Prev: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs,  Up: Novos recursos relacionados a dicas de tipo

1.2.3.2 PEP 698: Substitui decorador para tipagem estática
..........................................................

Um novo decorador *note typing.override(): 44b. foi adicionado ao módulo
*note typing: 104.  Ele indica aos verificadores de tipo que o método se
destina a substituir um método em uma superclasse.  Isso permite que os
verificadores de tipo detectem erros onde um método destinado a
substituir algo em uma classe base não o faz de fato.

Exemplo:

     from typing import override

     class Base:
       def obtém_cor(self) -> str:
         return "azul"

     class FilhaBoa(Base):
       @override  # ok: substitui Base.obtém_cor
       def obtém_cor(self) -> str:
         return "amarelo"

     class FilhaRuim(Base):
       @override  # erro de verificador de tipo: não substitui Base.obtém_cor
       def obtém_cores(self) -> str:
         return "vermelho"

Consulte PEP 698(1) para obter mais detalhes.

(Contribuição de Steven Troxler em gh-101561(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0698/

   (2) https://github.com/python/cpython/issues/101561


File: python.info,  Node: Outras mudanças na linguagem<2>,  Next: Novos módulos<2>,  Prev: Novos recursos relacionados a dicas de tipo,  Up: O que há de novo no Python 3 12

1.2.4 Outras mudanças na linguagem
----------------------------------

   * O analisador sintático agora exibe *note SyntaxError: 18d. ao
     analisar o código-fonte que contém bytes nulos.  (Contribuição de
     Pablo Galindo em gh-96670(1).)

   * Um par de caracteres de barra invertida que não seja uma sequência
     de escape válida agora levanta uma exceção *note SyntaxWarning:
     466, em vez de *note DeprecationWarning: 1a5.  Por exemplo,
     ‘re.compile("\d+\.\d+")’ agora emite um *note SyntaxWarning: 466.
     (‘"\d"’ é uma sequência de escape inválida, use strings brutas para
     expressão regular: ‘re.compile(r"\d+\.\d+")’).  Em uma versão
     futura do Python, *note SyntaxError: 18d. acabará sendo levantada,
     em vez de *note SyntaxWarning: 466.  (Contribuição de Victor
     Stinner em gh-98401(2).)

   * Escapes octais com valor maior do que ‘0o377’ (ex: ‘"\477"’),
     descontinuados no Python 3.11, agora produzem um *note
     SyntaxWarning: 466, em vez de *note DeprecationWarning: 1a5.  Em
     uma versão futura do Python, eles serão eventualmente um *note
     SyntaxError: 18d.  (Contribuição de Victor Stinner em gh-98401(3).)

   * As variáveis usadas na parte de destino das compreensões que não
     são armazenadas agora podem ser usadas em expressões de atribuição
     (‘:=’).  Por exemplo, em ‘[(b := 1) for a, b.prop in some_iter]’, a
     atribuição a ‘b’ agora é permitida.  Observe que a atribuição a
     variáveis armazenadas em na parte de destino das compreensões (como
     ‘a’) ainda não é permitida, conforme PEP 572(4).  (Contribuição de
     Nikita Sobolev em gh-100581(5).)

   * As exceções levantadas em um método ‘__set_name__’ de uma classe ou
     um tipo não são mais envolvidas por um *note RuntimeError: 195.  As
     informações de contexto são adicionadas à exceção como uma nota PEP
     678(6).  (Contribuição de Irit Katriel em gh-77757(7).)

   * Quando uma construção ‘try-except*’ lida com toda a *note
     ExceptionGroup: 1b6. e levanta uma outra exceção, essa exceção não
     é mais envolvida em uma *note ExceptionGroup: 1b6.  Também alterada
     na versão 3.11.4.  (Contribuição de Irit Katriel em gh-103590(8).)

   * O coletor de lixo agora é executado somente no mecanismo de quebra
     de avaliação do laço de avaliação de bytecode do Python em vez de
     alocações de objetos.  O coletor de lixo também pode ser executado
     quando *note PyErr_CheckSignals(): 467. é chamado, de modo que as
     extensões C que precisam ser executadas por um longo período sem
     executar nenhum código Python também têm a chance de executar o
     coletor de lixo periodicamente.  (Contribuição de Pablo Galindo em
     gh-97922(9).)

   * Todos os chamáveis internos e de extensão que esperam parâmetros
     booleanos agora aceitam argumentos de qualquer tipo, em vez de
     apenas *note bool: 468. e *note int: 257.  (Contribuição de Serhiy
     Storchaka em gh-60203(10).)

   * *note memoryview: 2eb. agora oferece suporte ao tipo meio ponto
     flutuante (o código de formato “e”).  (Contribuição de Donghee Na e
     Antoine Pitrou em gh-90751(11).)

   * Objetos *note slice: 469. agora são hasheáveis, permitindo que
     sejam usados como chaves de dicionário e itens de conjunto.
     (Contribuição de Will Bradshaw, Furkan Onder e Raymond Hettinger em
     gh-101264(12).)

   * *note sum(): 46a. agora usa a soma de Neumaier para melhorar a
     precisão e comutatividade ao somar valores flutuantes ou misturas
     de ints e floats.  (Contribuição de Raymond Hettinger em
     gh-100425(13).)

   * *note ast.parse(): 1a8. agora exibe *note SyntaxError: 18d. em vez
     de *note ValueError: 202. ao analisar o código-fonte que contém
     bytes nulos.  (Contribuição de Pablo Galindo em gh-96670(14).)

   * Os métodos de extração em *note tarfile: de. e *note
     shutil.unpack_archive(): 46b. têm um novo argumento 'filter' que
     permite limitar os recursos do tar que podem ser surpreendentes ou
     perigosos, como a criação de arquivos fora do diretório de destino.
     Consulte *note arquivos de extração de de arquivos tar: 46c. para
     obter detalhes.  No Python 3.14, o padrão mudará para ‘'data'’.
     (Contribuição de Petr Viktorin em PEP 706(15).)

   * Instâncias de *note types.MappingProxyType: 46d. agora são
     hasheáveis se o mapeamento subjacente for hasheável (Contribuição
     de Serhiy Storchaka em gh-87995(16).)

   * Adiciona *note suporte ao perfilador perf: 18f. por meio da nova
     variável de ambiente *note PYTHONPERFSUPPORT: 46e. e da opção de
     linha de comando *note -X perf: 176, bem como das novas funções
     *note sys.activate_stack_trampoline(): 46f, *note
     sys.deactivate_stack_trampoline(): 470. e *note
     sys.is_stack_trampoline_active(): 471.  (Design de Pablo Galindo.
     Contribuição de Pablo Galindo e Christian Heimes com contribuições
     de Gregory P. Smith [Google] e Mark Shannon em gh-96123(17)).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/96670

   (2) https://github.com/python/cpython/issues/98401

   (3) https://github.com/python/cpython/issues/98401

   (4) https://peps.python.org/pep-0572/

   (5) https://github.com/python/cpython/issues/100581

   (6) https://peps.python.org/pep-0678/

   (7) https://github.com/python/cpython/issues/77757

   (8) https://github.com/python/cpython/issues/103590

   (9) https://github.com/python/cpython/issues/97922

   (10) https://github.com/python/cpython/issues/60203

   (11) https://github.com/python/cpython/issues/90751

   (12) https://github.com/python/cpython/issues/101264

   (13) https://github.com/python/cpython/issues/100425

   (14) https://github.com/python/cpython/issues/96670

   (15) https://peps.python.org/pep-0706/

   (16) https://github.com/python/cpython/issues/87995

   (17) https://github.com/python/cpython/issues/96123


File: python.info,  Node: Novos módulos<2>,  Next: Módulos melhorados<2>,  Prev: Outras mudanças na linguagem<2>,  Up: O que há de novo no Python 3 12

1.2.5 Novos módulos
-------------------

   * Nenhum.


File: python.info,  Node: Módulos melhorados<2>,  Next: Otimizações<2>,  Prev: Novos módulos<2>,  Up: O que há de novo no Python 3 12

1.2.6 Módulos melhorados
------------------------

* Menu:

* array: array<2>.
* asyncio: asyncio<2>.
* calendar::
* csv::
* dis: dis<2>.
* fractions: fractions<2>.
* importlib.resources: importlib resources.
* inspect::
* itertools: itertools<2>.
* math: math<2>.
* os: os<2>.
* os.path: os path<3>.
* pathlib: pathlib<3>.
* platform::
* pdb: pdb<2>.
* random: random<2>.
* shutil: shutil<2>.
* sqlite3: sqlite3<2>.
* statistics: statistics<2>.
* sys: sys<3>.
* tempfile: tempfile<2>.
* threading::
* tkinter: tkinter<2>.
* tokenize::
* types: types<2>.
* typing: typing<3>.
* unicodedata: unicodedata<2>.
* unittest: unittest<2>.
* uuid::


File: python.info,  Node: array<2>,  Next: asyncio<2>,  Up: Módulos melhorados<2>

1.2.6.1 array
.............

   * A classe *note array.array: 1a0. agora suporta subscrição,
     tornando-a um *note tipo genérico: 439.  (Contribuição de Jelle
     Zijlstra em gh-98658(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98658


File: python.info,  Node: asyncio<2>,  Next: calendar,  Prev: array<2>,  Up: Módulos melhorados<2>

1.2.6.2 asyncio
...............

   * O desempenho da gravação em soquetes no *note asyncio: a. foi
     significativamente aprimorado.  O ‘asyncio’ agora evita cópias
     desnecessárias ao gravar em soquetes e usa o *note sendmsg(): 476.
     se a plataforma o suportar.  (Contribuição de Kumar Aditya em
     gh-91166(1).)

   * Adiciona as funções *note asyncio.eager_task_factory(): 477. e
     *note asyncio.create_eager_task_factory(): 478. para permitir a
     opção de um laço de eventos na execução de tarefas ansiosas,
     tornando alguns casos de uso de 2x a 5x mais rápidos.
     (Contribuição de Jacob Bower e Itamar Oren em gh-102853(2),
     gh-104140(3) e gh-104138(4))

   * No Linux, *note asyncio: a. usa *note asyncio.PidfdChildWatcher:
     479. por padrão se *note os.pidfd_open(): 47a. estiver disponível e
     funcional em vez de *note asyncio.ThreadedChildWatcher: 47b.
     (Contribuição de Kumar Aditya em gh-98024(5).)

   * O laço de eventos agora usa o melhor observador filho disponível
     para cada plataforma (*note asyncio.PidfdChildWatcher: 479. se
     suportado e *note asyncio.ThreadedChildWatcher: 47b. caso
     contrário), portanto, configurar manualmente um observador filho
     não é recomendado.  (Contribuição de Kumar Aditya em gh-94597(6).)

   * Adiciona o parâmetro 'loop_factory' a *note asyncio.run(): 47c.
     para permitir a especificação de uma fábrica de laço de eventos
     personalizada.  (Contribuição de Kumar Aditya em gh-99388(7).)

   * Adiciona implementação C de *note asyncio.current_task(): 47d. para
     aceleração de 4x-6x.  (Contribuição de Itamar Oren e Pranav
     Thulasiram Bhat em gh-100344(8).)

   * *note asyncio.iscoroutine(): 47e. agora retorna ‘False’ para
     geradores, pois *note asyncio: a. não tem suporte a corrotinas
     legadas baseadas em geradores.  (Contribuição de Kumar Aditya em
     gh-102748(9).)

   * *note asyncio.wait(): 47f. e *note asyncio.as_completed(): 1aa.
     agora aceita geradores que produzem tarefas.  (Contribuição de
     Kumar Aditya em gh-78530(10).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/91166

   (2) https://github.com/python/cpython/issues/102853

   (3) https://github.com/python/cpython/issues/104140

   (4) https://github.com/python/cpython/issues/104138

   (5) https://github.com/python/cpython/issues/98024

   (6) https://github.com/python/cpython/issues/94597

   (7) https://github.com/python/cpython/issues/99388

   (8) https://github.com/python/cpython/issues/100344

   (9) https://github.com/python/cpython/issues/102748

   (10) https://github.com/python/cpython/issues/78530


File: python.info,  Node: calendar,  Next: csv,  Prev: asyncio<2>,  Up: Módulos melhorados<2>

1.2.6.3 calendar
................

   * Adiciona enums *note calendar.Month: 481. e *note calendar.Day:
     482. definindo meses do ano e dias da semana.  (Contribuição de
     Prince Roshan em gh-103636(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/103636


File: python.info,  Node: csv,  Next: dis<2>,  Prev: calendar,  Up: Módulos melhorados<2>

1.2.6.4 csv
...........

   * Adiciona os sinalizadores *note csv.QUOTE_NOTNULL: 484. e *note
     csv.QUOTE_STRINGS: 485. para fornecer um controle mais refinado de
     ‘None’ e strings vazias por objetos *note reader: 486. e *note
     writer: 487.


File: python.info,  Node: dis<2>,  Next: fractions<2>,  Prev: csv,  Up: Módulos melhorados<2>

1.2.6.5 dis
...........

   * Opcodes de pseudo-instruções (que são usados pelo compilador, mas
     não aparecem no bytecode executável) agora são expostos no módulo
     *note dis: 38.  *note HAVE_ARGUMENT: 489. ainda é relevante para
     opcodes reais, mas não é útil para pseudo-instruções.  Use a nova
     coleção *note dis.hasarg: 29e.  (Contribuição de Irit Katriel em
     gh-94216(1).)

   * Adiciona a coleção *note dis.hasexc: 48a. para indicar instruções
     que definem um manipulador de exceções.  (Contribuição de Irit
     Katriel em gh-94216(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/94216

   (2) https://github.com/python/cpython/issues/94216


File: python.info,  Node: fractions<2>,  Next: importlib resources,  Prev: dis<2>,  Up: Módulos melhorados<2>

1.2.6.6 fractions
.................

   * Objetos do tipo *note fractions.Fraction: 1e7. agora têm suporte a
     formatação estilo float.  (Contribuição de Mark Dickinson em
     gh-100161(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100161


File: python.info,  Node: importlib resources,  Next: inspect,  Prev: fractions<2>,  Up: Módulos melhorados<2>

1.2.6.7 importlib.resources
...........................

   * *note importlib.resources.as_file(): 48d. agora tem suporta a
     diretórios de recursos.  (Contribuição de Jason R. Coombs em
     gh-97930(1).)

   * Renomeia o primeiro parâmetro de *note importlib.resources.files():
     48e. para 'anchor'.  (Contribuição de Jason R. Coombs em
     gh-100598(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/97930

   (2) https://github.com/python/cpython/issues/100598


File: python.info,  Node: inspect,  Next: itertools<2>,  Prev: importlib resources,  Up: Módulos melhorados<2>

1.2.6.8 inspect
...............

   * Adiciona *note inspect.markcoroutinefunction(): 490. para marcar
     funções de sincronização que retornam uma *note corrotina: 491.
     para uso com *note inspect.iscoroutinefunction(): 2e4.
     (Contribuição de Carlton Gibson em gh-99247(1).)

   * Adiciona *note inspect.getasyncgenstate(): 492. e *note
     inspect.getasyncgenlocals(): 493. para determinar o estado atual
     dos geradores assíncronos.  (Contribuição de Thomas Krennwallner em
     gh-79940(2).)

   * O desempenho de *note inspect.getattr_static(): 494. foi
     consideravelmente melhorado.  A maioria das chamadas para a função
     deve ser pelo menos 2x mais rápida do que no Python 3.11.
     (Contribuição de Alex Waygood em gh-103193(3).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99247

   (2) https://github.com/python/cpython/issues/79940

   (3) https://github.com/python/cpython/issues/103193


File: python.info,  Node: itertools<2>,  Next: math<2>,  Prev: inspect,  Up: Módulos melhorados<2>

1.2.6.9 itertools
.................

   * Adiciona *note itertools.batched(): 201. para coletar tuplas de
     tamanhos iguais, onde o último lote pode ser menor que o resto.
     (Contribuição de Raymond Hettinger em gh-98363(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98363


File: python.info,  Node: math<2>,  Next: os<2>,  Prev: itertools<2>,  Up: Módulos melhorados<2>

1.2.6.10 math
.............

   * Adiciona *note math.sumprod(): 497. para calcular uma soma de
     produtos.  (Contribuição de Raymond Hettinger em gh-100485(1).)

   * Estende *note math.nextafter(): 498. para incluir um argumento
     'steps' para subir ou descer várias etapas ao mesmo tempo.
     (Contribuição de Matthias Goergens, Mark Dickinson e Raymond
     Hettinger em gh-94906(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100485

   (2) https://github.com/python/cpython/issues/94906


File: python.info,  Node: os<2>,  Next: os path<3>,  Prev: math<2>,  Up: Módulos melhorados<2>

1.2.6.11 os
...........

   * Adiciona *note os.PIDFD_NONBLOCK: 49a. para abrir um descritor de
     arquivo para um processo com *note os.pidfd_open(): 47a. em modo
     sem bloqueio.  (Contribuição de Kumar Aditya em gh-93312(1).)

   * *note os.DirEntry: 49b. agora inclui um método *note
     os.DirEntry.is_junction(): 49c. para verificar se a entrada é uma
     junção.  (Contribuição de Charles Machalow em gh-99547(2).)

   * Adiciona funções *note os.listdrives(): 49d, *note
     os.listvolumes(): 49e. e *note os.listmounts(): 49f. no Windows
     para enumerar unidades, volumes e pontos de montagem.
     (Contribuição de Steve Dower em gh-102519(3).)

   * *note os.stat(): 4a0. e *note os.lstat(): 4a1. agora são mais
     precisos no Windows.  O campo ‘st_birthtime’ agora será preenchido
     com a hora de criação do arquivo, e ‘st_ctime’ foi descontinuado,
     mas ainda contém a hora de criação (mas no futuro vai retornar a
     última alteração de metadados, para consistência com outras
     plataformas ).  ‘st_dev’ pode ter até 64 bits e ‘st_ino’ até 128
     bits dependendo do seu sistema de arquivos, e ‘st_rdev’ é sempre
     definido como zero em vez de valores incorretos.  Ambas as funções
     podem ser significativamente mais rápidas nas lançamentos mais
     recentes do Windows.  (Contribuição de Steve Dower em gh-99726(4).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/93312

   (2) https://github.com/python/cpython/issues/99547

   (3) https://github.com/python/cpython/issues/102519

   (4) https://github.com/python/cpython/issues/99726


File: python.info,  Node: os path<3>,  Next: pathlib<3>,  Prev: os<2>,  Up: Módulos melhorados<2>

1.2.6.12 os.path
................

   * Adiciona *note os.path.isjunction(): 4a3. para verificar se um
     determinado caminho é uma junção.  (Contribuição de Charles
     Machalow em gh-99547(1).)

   * Adiciona *note os.path.splitroot(): 4a4. para dividir um caminho em
     uma tríade ‘(drive, root, tail)’.  (Contribuição de Barney Gale em
     gh-101000(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99547

   (2) https://github.com/python/cpython/issues/101000


File: python.info,  Node: pathlib<3>,  Next: platform,  Prev: os path<3>,  Up: Módulos melhorados<2>

1.2.6.13 pathlib
................

   * Adiciona suporte para fazer subclasse de *note pathlib.PurePath:
     4a6. e *note pathlib.Path: 229, além de suas variantes específicas
     do Posix e do Windows.  As subclasses podem substituir o método
     *note pathlib.PurePath.with_segments(): 4a7. para passar
     informações entre instâncias de caminho.

   * Adiciona *note pathlib.Path.walk(): 4a8. para percorrer as árvores
     de diretórios e gerar todos os nomes de arquivos ou diretórios
     dentro delas, semelhante a *note os.walk(): 4a9.  (Contribuição de
     Stanislav Zmiev em gh-90385(1).)

   * Adiciona o parâmetro opcional 'walk_up' a *note
     pathlib.PurePath.relative_to(): 2ca. para permitir a inserção de
     entradas ‘..’ no resultado; este comportamento é mais consistente
     com *note os.path.relpath(): 4aa.  (Contribuição de Domenico Ragusa
     em gh-84538(2).)

   * Adiciona *note pathlib.Path.is_junction(): 4ab. como proxy para
     *note os.path.isjunction(): 4a3.  (Contribuição de Charles Machalow
     em gh-99547(3).)

   * Adiciona o parâmetro opcional 'case_sensitive' a *note
     pathlib.Path.glob(): 22d, *note pathlib.Path.rglob(): 22e. e *note
     pathlib.PurePath.match(): 4ac. para fazer correspondência com
     distinção entre maiúsculas e minúsculas do caminho, permitindo uma
     precisão mais precisa controle sobre o processo de correspondência.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/90385

   (2) https://github.com/python/cpython/issues/84538

   (3) https://github.com/python/cpython/issues/99547


File: python.info,  Node: platform,  Next: pdb<2>,  Prev: pathlib<3>,  Up: Módulos melhorados<2>

1.2.6.14 platform
.................

   * Adiciona suporte para detectar versões do Windows 11 e do Windows
     Server posteriores a 2012.  Anteriormente, pesquisas em plataformas
     Windows Server mais recentes que o Windows Server 2012 e no Windows
     11 retornariam ‘Windows-10’.  (Contribuição de Steve Dower em
     gh-89545(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/89545


File: python.info,  Node: pdb<2>,  Next: random<2>,  Prev: platform,  Up: Módulos melhorados<2>

1.2.6.15 pdb
............

   * Adiciona variáveis de conveniência para armazenar valores
     temporariamente para a sessão de depuração e fornece acesso rápido
     a valores como o quadro atual ou o valor de retorno.  (Contribuição
     de Tian Gao em gh-103693(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/103693


File: python.info,  Node: random<2>,  Next: shutil<2>,  Prev: pdb<2>,  Up: Módulos melhorados<2>

1.2.6.16 random
...............

   * Adiciona *note random.binomialvariate(): 4b0.  (Contribuição de
     Raymond Hettinger em gh-81620(1).)

   * Adiciona um padrão de ‘lambd=1.0’ a *note random.expovariate():
     4b1.  (Contribuição de Raymond Hettinger em gh-100234(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/81620

   (2) https://github.com/python/cpython/issues/100234


File: python.info,  Node: shutil<2>,  Next: sqlite3<2>,  Prev: random<2>,  Up: Módulos melhorados<2>

1.2.6.17 shutil
...............

   * *note shutil.make_archive(): 4b3. agora passa o argumento
     'root_dir' para arquivadores personalizados que o suportam.  Neste
     caso, ele não altera mais temporariamente o diretório de trabalho
     atual do processo para 'root_dir' para realizar o arquivamento.
     (Contribuição de Serhiy Storchaka em gh-74696(1).)

   * *note shutil.rmtree(): 301. agora aceita um novo argumento 'onexc'
     que é um tratador de erros como 'onerror' mas que espera uma
     instância de exceção em vez de um trio '(typ, val, tb)'.  'onerror'
     foi descontinuado.  (Contribuição de Irit Katriel em gh-102828(2).)

   * ‘shutil. which()’ agora consulta a variável de ambiente 'PATHEXT'
     para encontrar correspondências dentro de 'PATH' no Windows mesmo
     quando o 'cmd' fornecido inclui um componente de diretório.
     (Contribuição de Charles Machalow em gh-103179(3).)

     ‘shutil. which()’ chamará ‘NeedCurrentDirectoryForExePathW’ ao
     consultar executáveis no Windows para determinar se o diretório de
     trabalho atual deve ser anexado ao caminho de pesquisa.
     (Contribuição de Charles Machalow em gh-103179(4).)

     *note shutil.which(): 4b4. vai retornar um caminho que corresponde
     ao 'cmd' com um componente de ‘PATHEXT’ antes de uma
     correspondência direta em outro lugar no caminho de pesquisa no
     Windows.  (Contribuição de Charles Machalow em gh-103179(5).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/74696

   (2) https://github.com/python/cpython/issues/102828

   (3) https://github.com/python/cpython/issues/103179

   (4) https://github.com/python/cpython/issues/103179

   (5) https://github.com/python/cpython/issues/103179


File: python.info,  Node: sqlite3<2>,  Next: statistics<2>,  Prev: shutil<2>,  Up: Módulos melhorados<2>

1.2.6.18 sqlite3
................

   * Adiciona uma *note interface de linha de comando: 441.
     (Contribuição de Erlend E. Aasland em gh-77617(1).)

   * Adiciona o atributo *note sqlite3.Connection.autocommit: 4b6. a
     *note sqlite3.Connection: 245. e o parâmetro 'autocommit' a *note
     sqlite3.connect(): 2a8. para controlar a PEP 249(2) compatível com
     *note tratamento de transação: 4b7.  (Contribuição de Erlend E.
     Aasland em gh-83638(3).)

   * Adiciona o parâmetro somente-nomeado 'entrypoint' a *note
     sqlite3.Connection.load_extension(): 4b8, para substituir o ponto
     de entrada da extensão SQLite.  (Contribuição de Erlend E. Aasland
     em gh-103015(4).)

   * Adiciona *note sqlite3.Connection.getconfig(): 4b9. e *note
     sqlite3.Connection.setconfig(): 4ba. a *note sqlite3.Connection:
     245. para fazer alterações na configuração de uma conexão de banco
     de dados.  (Contribuição de Erlend E. Aasland em gh-103489(5).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/77617

   (2) https://peps.python.org/pep-0249/

   (3) https://github.com/python/cpython/issues/83638

   (4) https://github.com/python/cpython/issues/103015

   (5) https://github.com/python/cpython/issues/103489


File: python.info,  Node: statistics<2>,  Next: sys<3>,  Prev: sqlite3<2>,  Up: Módulos melhorados<2>

1.2.6.19 statistics
...................

   * Estende *note statistics.correlation(): 4bc. para incluir como um
     método ‘ranked’ para calcular a correlação de Spearman de dados
     classificados.  (Contribuição de Raymond Hettinger em gh-95861(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/95861


File: python.info,  Node: sys<3>,  Next: tempfile<2>,  Prev: statistics<2>,  Up: Módulos melhorados<2>

1.2.6.20 sys
............

   * Adiciona o espaço de nomes *note sys.monitoring: da. para expor a
     nova API de monitoramento *note PEP 669: 43d.  (Contribuição de
     Mark Shannon em gh-103082(1).)

   * Adiciona *note sys.activate_stack_trampoline(): 46f. e *note
     sys.deactivate_stack_trampoline(): 470. para ativar e desativar
     trampolins do perfilador de pilha e *note
     sys.is_stack_trampoline_active(): 471. para consultar se os
     trampolins do perfilador de pilha estão ativos.  (Contribuição de
     Pablo Galindo e Christian Heimes com contribuições de Gregory P.
     Smith [Google] e Mark Shannon em gh-96123(2).)

   * Adiciona *note sys.last_exc: 4be. que contém a última exceção não
     tratada que foi levantada (para casos de uso de depuração
     post-mortem).  Descontinuar os três campos que possuem as mesmas
     informações em seu formato legado: *note sys.last_type: 4bf, *note
     sys.last_value: 4c0. e *note sys.last_traceback: 4c1.
     (Contribuição de Irit Katriel em gh-102778(3).)

   * *note sys._current_exceptions(): 4c2. agora retorna um mapeamento
     de thread-id para uma instância de exceção, ao invés de uma tupla
     ‘(typ, exc, tb)’.  (Contribuição de Irit Katriel em gh-103176(4).)

   * *note sys.setrecursionlimit(): 4c3. e *note
     sys.getrecursionlimit(): 4c4.  O limite de recursão agora se aplica
     apenas ao código Python.  As funções integradas não usam o limite
     de recursão, mas são protegidas por um mecanismo diferente que
     evita que a recursão cause uma falha na máquina virtual.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/103082

   (2) https://github.com/python/cpython/issues/96123

   (3) https://github.com/python/cpython/issues/102778

   (4) https://github.com/python/cpython/issues/103176


File: python.info,  Node: tempfile<2>,  Next: threading,  Prev: sys<3>,  Up: Módulos melhorados<2>

1.2.6.21 tempfile
.................

   * A função *note tempfile.NamedTemporaryFile: 4c6. tem um novo
     parâmetro opcional 'delete_on_close' (Contribuição de Evgeny Zorin
     em gh-58451(1).)

   * *note tempfile.mkdtemp(): 21f. agora sempre retorna um caminho
     absoluto, mesmo se o argumento fornecido para o parâmetro 'dir' for
     um caminho relativo.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/58451


File: python.info,  Node: threading,  Next: tkinter<2>,  Prev: tempfile<2>,  Up: Módulos melhorados<2>

1.2.6.22 threading
..................

   * Adiciona *note threading.settrace_all_threads(): 4c8. e *note
     threading.setprofile_all_threads(): 4c9. que permitem definir
     funções de rastreamento e criação de perfil em todos os threads em
     execução além do que está chamando.  (Contribuição de Pablo Galindo
     em gh-93503(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/93503


File: python.info,  Node: tkinter<2>,  Next: tokenize,  Prev: threading,  Up: Módulos melhorados<2>

1.2.6.23 tkinter
................

   * ‘tkinter.Canvas.coords()’ agora nivela seus argumentos.  Agora ele
     aceita não apenas coordenadas como argumentos separados (‘x1, y1,
     x2, y2, ...’) e uma sequência de coordenadas (‘[x1, y1, x2, y2,
     ...]’) , mas também coordenadas agrupadas em pares (‘(x1, y1), (x2,
     y2), ...’ e ‘[(x1, y1), (x2, y2), ...]’) , como métodos
     ‘create_*()’.  (Contribuição de Serhiy Storchaka em gh-94473(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/94473


File: python.info,  Node: tokenize,  Next: types<2>,  Prev: tkinter<2>,  Up: Módulos melhorados<2>

1.2.6.24 tokenize
.................

   * O módulo *note tokenize: fb. inclui as mudanças introduzidas em PEP
     701(1).  (Contribuição de Marta Gómez Macías e Pablo Galindo em
     gh-102856(2).)  Veja *note Portando para Python 3.12: 4cc. para
     mais informações sobre as mudanças no módulo *note tokenize: fb.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0701/

   (2) https://github.com/python/cpython/issues/102856


File: python.info,  Node: types<2>,  Next: typing<3>,  Prev: tokenize,  Up: Módulos melhorados<2>

1.2.6.25 types
..............

   * Adiciona *note types.get_original_bases(): 4ce. para permitir uma
     introspecção adicional de *note Tipos genéricos definidos pelo
     usuário: 4cf. quando subclassificado.  (Contribuição de James
     Hilton-Balfe e Alex Waygood em gh-101827(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/101827


File: python.info,  Node: typing<3>,  Next: unicodedata<2>,  Prev: types<2>,  Up: Módulos melhorados<2>

1.2.6.26 typing
...............

   * As verificações de *note isinstance(): 442. com *note protocolos
     verificáveis em tempo de execução: 443. agora use *note
     inspect.getattr_static(): 494. em vez de *note hasattr(): 4d2. para
     verificar se existem atributos.  Isso significa que descritores e
     métodos *note __getattr__(): 4d3. não são mais avaliados
     inesperadamente durante verificações ‘isinstance()’ em protocolos
     verificáveis em tempo de execução.  No entanto, também pode
     significar que alguns objetos que costumavam ser considerados
     instâncias de um protocolo verificável em tempo de execução podem
     não ser mais considerados instâncias desse protocolo no Python
     3.12+ e vice-versa.  É improvável que a maioria dos usuários seja
     afetada por esta mudança.  (Contribuição de Alex Waygood em
     gh-102433(1).)

   * Os membros de um protocolo verificável em tempo de execução agora
     são considerados “congelados” em tempo de execução assim que a
     classe é criada.  Fazer alterações dinâmicas em atributos em tempo
     de execução em um protocolo verificável em tempo de execução ainda
     vai funcionário, mas não terá impacto nas verificações de *note
     isinstance(): 442. comparando objetos com o protocolo.  Por
     exemplo:

          >>> from typing import Protocol, runtime_checkable
          >>> @runtime_checkable
          ... class TemX(Protocol):
          ...     x = 1
          ...
          >>> class Foo: ...
          ...
          >>> f = Foo()
          >>> isinstance(f, TemX)
          False
          >>> f.x = 1
          >>> isinstance(f, TemX)
          True
          >>> HasX.y = 2
          >>> isinstance(f, TemX)  # inalterado, ainda que TemX agora tenha um atributo "y"
          True

     Esta mudança foi feita para acelerar as verificações de
     ‘isinstance()’ em protocolos verificáveis em tempo de execução.

   * O perfil de desempenho de verificações de *note isinstance(): 442.
     com *note protocolos verificáveis em tempo de execução: 443. mudou
     significativamente.  A maioria das verificações ‘isinstance()’ a
     esses protocolos com apenas alguns membros devem ser pelo menos 2x
     mais rápidas que na versão 3.11, e algumas podem ser 20x mais
     rápidas ou mais.  No entanto, as verificações de ‘isinstance()’ em
     protocolos com muito mais membros podem ser mais lentas do que no
     Python 3.11.  (Contribuição de Alex Waygood em gh-74690(2) e
     gh-103193(3).)

   * Todas as classes *note typing.TypedDict: 162. e *note
     typing.NamedTuple: 2b0. agora possuem o atributo ‘__orig_bases__’.
     (Contribuição de Adrian Garcia Badaracco em gh-103699(4).)

   * Adiciona o parâmetro ‘frozen_default’ a *note
     typing.dataclass_transform(): 4d4.  (Contribuição de Erik De Bonte
     em gh-99957(5).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102433

   (2) https://github.com/python/cpython/issues/74690

   (3) https://github.com/python/cpython/issues/103193

   (4) https://github.com/python/cpython/issues/103699

   (5) https://github.com/python/cpython/issues/99957


File: python.info,  Node: unicodedata<2>,  Next: unittest<2>,  Prev: typing<3>,  Up: Módulos melhorados<2>

1.2.6.27 unicodedata
....................

   * O banco de dados Unicode foi atualizado para a versão 15.0.0.
     (Contribuição de Benjamin Peterson em gh-96734(1)).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/96734


File: python.info,  Node: unittest<2>,  Next: uuid,  Prev: unicodedata<2>,  Up: Módulos melhorados<2>

1.2.6.28 unittest
.................

Adiciona uma opção de linha de comando ‘--durations’, mostrando os N
casos de teste mais lentos:

     python3 -m unittest --durations=3 lib.tests.test_threading
     .....
     Slowest test durations
     ----------------------------------------------------------------------
     1.210s     test_timeout (Lib.test.test_threading.BarrierTests)
     1.003s     test_default_timeout (Lib.test.test_threading.BarrierTests)
     0.518s     test_timeout (Lib.test.test_threading.EventTests)

     (0.000 durations hidden.  Use -v to show these durations.)
     ----------------------------------------------------------------------
     Ran 158 tests in 9.869s

     OK (skipped=3)

(Contribuição de Giampaolo Rodola em gh-48330(1))

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/48330


File: python.info,  Node: uuid,  Prev: unittest<2>,  Up: Módulos melhorados<2>

1.2.6.29 uuid
.............

   * Adiciona uma *note interface de linha de comando: 441.
     (Contribuição de Adam Chhina em gh-88597(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/88597


File: python.info,  Node: Otimizações<2>,  Next: Alterações de bytecode do CPython<2>,  Prev: Módulos melhorados<2>,  Up: O que há de novo no Python 3 12

1.2.7 Otimizações
-----------------

   * Remove os membros ‘wstr’ e ‘wstr_length’ dos objetos Unicode.
     Reduz o tamanho do objeto em 8 ou 16 bytes na plataforma de 64
     bits.  ( PEP 623(1)) (Contribuição de Inada Naoki em gh-92536(2).)

   * Adiciona suporte experimental para usar o otimizador binário BOLT
     no processo de construção, o que melhora o desempenho de 1 a 5%.
     (Contribuição de Kevin Modzelewski em gh-90536(3) e ajuste de
     Donghee Na em gh-101525(4))

   * Acelera a substituição de expressões regulares (funções *note
     re.sub(): 2a3. e *note re.subn(): 2a4. e métodos ‘re.Pattern’
     correspondentes) para strings de substituição contendo referências
     de grupo em 2 ou 3 vezes .  (Contribuição de Serhiy Storchaka em
     gh-91524(5).)

   * Acelera a criação de *note asyncio.Task: 1be. adiando a dispendiosa
     formatação de strings.  (Contribuição de Itamar Oren em
     gh-103793(6).)

   * As funções *note tokenize.tokenize(): 4d9. e *note
     tokenize.generate_tokens(): 4da. são até 64% mais rápidas como
     efeito colateral das mudanças necessárias para cobrir PEP 701(7) no
     módulo *note tokenize: fb. .  (Contribuição de Marta Gómez Macías e
     Pablo Galindo em gh-102856(8).)

   * Acelera chamadas de métodos *note super(): 4db. e carregamentos de
     atributos através da nova instrução *note LOAD_SUPER_ATTR: 4dc.
     (Contribuição de Carl Meyer e Vladimir Matveev em gh-103497(9).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0623/

   (2) https://github.com/python/cpython/issues/92536

   (3) https://github.com/python/cpython/issues/90536

   (4) https://github.com/python/cpython/issues/101525

   (5) https://github.com/python/cpython/issues/91524

   (6) https://github.com/python/cpython/issues/103793

   (7) https://peps.python.org/pep-0701/

   (8) https://github.com/python/cpython/issues/102856

   (9) https://github.com/python/cpython/issues/103497


File: python.info,  Node: Alterações de bytecode do CPython<2>,  Next: Ferramentas e daemons,  Prev: Otimizações<2>,  Up: O que há de novo no Python 3 12

1.2.8 Alterações de bytecode do CPython
---------------------------------------

   * Remove a instrução ‘LOAD_METHOD’.  Ela foi mesclada em *note
     LOAD_ATTR: 4de.  *note LOAD_ATTR: 4de. agora se comportará como a
     antiga instrução ‘LOAD_METHOD’ se o bit inferior de seu oparg
     estiver definido.  (Contribuição de Ken Jin em gh-93429(1).)

   * Remova as instruções ‘JUMP_IF_FALSE_OR_POP’ e
     ‘JUMP_IF_TRUE_OR_POP’.  (Contribuição de Irit Katriel em
     gh-102859(2).)

   * Remove a instrução ‘PRECALL’.  (Contribuição de Mark Shannon em
     gh-92925(3).)

   * Adiciona as instruções *note BINARY_SLICE: 4df. e *note
     STORE_SLICE: 4e0.  (Contribuição de Mark Shannon em gh-94163(4).)

   * Adiciona as instruções *note CALL_INTRINSIC_1: 4e1.  (Contribuição
     de Mark Shannon em gh-99005(5).)

   * Adiciona a instrução *note CALL_INTRINSIC_2: 4e2.  (Contribuição de
     Irit Katriel em gh-101799(6).)

   * Adiciona a instrução *note CLEANUP_THROW: 4e3.  (Contribuição de
     Brandt Bucher em gh-90997(7).)

   * Adiciona a instrução ‘END_SEND’.  (Contribuição de Mark Shannon em
     gh-103082(8).)

   * Adiciona a instrução *note LOAD_FAST_AND_CLEAR: 4e4. como parte da
     implementação de PEP 709(9).  (Contribuição de Carl Meyer em
     gh-101441(10).)

   * Adiciona a instrução *note LOAD_FAST_CHECK: 4e5.  (Contribuição de
     Dennis Sweeney em gh-93143(11).)

   * Adiciona os opcodes *note LOAD_FROM_DICT_OR_DEREF: 4e6, *note
     LOAD_FROM_DICT_OR_GLOBALS: 4e7. e *note LOAD_LOCALS: 4e8. como
     parte da implementação da PEP 695(12).  Remove o opcode
     ‘LOAD_CLASSDEREF’, que pode ser substituído por *note LOAD_LOCALS:
     4e8. mais *note LOAD_FROM_DICT_OR_DEREF: 4e6.  (Contribuição de
     Jelle Zijlstra em gh-103764(13).)

   * Adiciona a instrução *note LOAD_SUPER_ATTR: 4dc.  (Contribuição de
     Carl Meyer e Vladimir Matveev em gh-103497(14).)

   * Adiciona a instrução *note RETURN_CONST: 4e9.  (Contribuição de
     Wenyang Wang em gh-101632(15).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/93429

   (2) https://github.com/python/cpython/issues/102859

   (3) https://github.com/python/cpython/issues/92925

   (4) https://github.com/python/cpython/issues/94163

   (5) https://github.com/python/cpython/issues/99005

   (6) https://github.com/python/cpython/issues/101799

   (7) https://github.com/python/cpython/issues/90997

   (8) https://github.com/python/cpython/issues/103082

   (9) https://peps.python.org/pep-0709/

   (10) https://github.com/python/cpython/issues/101441

   (11) https://github.com/python/cpython/issues/93143

   (12) https://peps.python.org/pep-0695/

   (13) https://github.com/python/cpython/issues/103764

   (14) https://github.com/python/cpython/issues/103497

   (15) https://github.com/python/cpython/issues/101632


File: python.info,  Node: Ferramentas e daemons,  Next: Descontinuados,  Prev: Alterações de bytecode do CPython<2>,  Up: O que há de novo no Python 3 12

1.2.9 Ferramentas e daemons
---------------------------

   * Remove o diretório ‘Tools/demo/’ que continha scripts antigos de
     demonstração.  Uma cópia pode ser encontrada no projeto
     old-demos(1).  (Contribuição de Victor Stinner em gh-97681(2).)

   * Remove scripts de exemplo desatualizados do diretório
     ‘Tools/scripts/’.  Uma cópia pode ser encontrada no projeto
     old-demos(3).  (Contribuição de Victor Stinner em gh-97669(4).)

   ---------- Footnotes ----------

   (1) https://github.com/gvanrossum/old-demos

   (2) https://github.com/python/cpython/issues/97681

   (3) https://github.com/gvanrossum/old-demos

   (4) https://github.com/python/cpython/issues/97669


File: python.info,  Node: Descontinuados,  Next: Removidos,  Prev: Ferramentas e daemons,  Up: O que há de novo no Python 3 12

1.2.10 Descontinuados
---------------------

   * *note argparse: 6.: Os parâmetros 'type', 'choices' e 'metavar' de
     ‘argparse.BooleanOptionalAction’ foram descontinuados e serão
     removidos na versão 3.14.  (Contribuição de Nikita Sobolev em
     gh-92248(1).)

   * *note ast: 8.: Os seguintes recursos *note ast: 8. foram
     descontinuados na documentação desde Python 3.8, agora fazem com
     que um *note DeprecationWarning: 1a5. seja emitido em tempo de
     execução quando eles são acessados ou usados, e serão removidos no
     Python 3.14:

        * ‘ast.Num’

        * ‘ast.Str’

        * ‘ast.Bytes’

        * ‘ast.NameConstant’

        * ‘ast.Ellipsis’

     Em vez disso, use *note ast.Constant: 2b9.  (Contribuição de Serhiy
     Storchaka em gh-90953(2).)

   * *note asyncio: a.:

        * As classes filhas do observador *note
          asyncio.MultiLoopChildWatcher: 2ba, *note
          asyncio.FastChildWatcher: 2bb, *note
          asyncio.AbstractChildWatcher: 2bc. e *note
          asyncio.SafeChildWatcher: 2bd. foram descontinuadas e serão
          removidas no Python 3.14.  (Contribuição de Kumar Aditya em
          gh-94597(3).)

        * *note asyncio.set_child_watcher(): 2be, *note
          asyncio.get_child_watcher(): 2bf, *note
          asyncio.AbstractEventLoopPolicy.set_child_watcher(): 2c0. e
          *note asyncio.AbstractEventLoopPolicy.get_child_watcher():
          2c1. foram descontinuados e serão removidos no Python 3.14.
          (Contribuição de Kumar Aditya em gh-94597(4).)

        * O método *note get_event_loop(): 2c2. da política de laço de
          eventos padrão agora emite um *note DeprecationWarning: 1a5.
          se não houver nenhum laço de eventos atual definido e decidir
          criar um.  (Contribuição de Serhiy Storchaka e Guido van
          Rossum em gh-100160(5).)

   * *note calendar: 14.: as constantes ‘calendar.January’ e
     ‘calendar.February’ foram descontinuadas e substituídas por *note
     calendar.JANUARY: 2f9. e *note calendar.FEBRUARY: 2fa.
     (Contribuição de Prince Roshan em gh-103636(6).)

   * *note collections.abc: 1e.: Descontinuou *note
     collections.abc.ByteString: 2e7.

     Use ‘isinstance(obj, collections.abc.Buffer)’ para testar se ‘obj’
     implementa o *note protocolo de buffer: 2e8. em tempo de execução.
     Para uso em anotações de tipo, use *note Buffer: 2e9. ou uma união
     que especifique explicitamente os tipos suportados pelo seu código
     (por exemplo, ‘bytes | bytearray | memoryview’).

     ‘ByteString’ foi originalmente concebido para ser uma classe
     abstrata que serviria como um supertipo de *note bytes: 1c2. e
     *note bytearray: 2ea.  No entanto, como o ABC nunca teve métodos,
     saber que um objeto era uma instância de ‘ByteString’ nunca lhe
     dizia nada de útil sobre o objeto.  Outros tipos comuns de buffer,
     como *note memoryview: 2eb, também nunca foram entendidos como
     subtipos de ‘ByteString’ (seja em tempo de execução ou por
     verificadores de tipo estáticos).

     Veja PEP 688(7) para mais detalhes.  (Contribuição de Shantanu Jain
     em gh-91896(8).)

   * *note datetime: 30.: *note utcnow(): 2fc. e *note
     utcfromtimestamp(): 2fd. da classe *note datetime.datetime: 1cc.
     foram descontinuados e serão removidos em uma versão futura.  Em
     vez disso, use objetos conscientes do fuso horário para representar
     datas e horas em UTC: respectivamente, chame *note now(): 4ec. e
     *note fromtimestamp(): 4ed. com o parâmetro 'tz' definido como
     *note datetime.UTC: 4ee.  (Contribuição de Paul Ganssle em
     gh-103857(9).)

   * *note email: 3b.: Descontinua o parâmetro 'isdst' em *note
     email.utils.localtime(): 2c4.  (Contribuição de Alan Williams em
     gh-72346(10).)

   * *note importlib.abc: 78.: Foram descontinuadas as seguintes
     classes, programadas para remoção no Python 3.14:

        * ‘importlib.abc.ResourceReader’

        * ‘importlib.abc.Traversable’

        * ‘importlib.abc.TraversableResources’

     Em vez disso, use classes de *note importlib.resources.abc: 7c.:

        * *note importlib.resources.abc.Traversable: 1f3.

        * *note importlib.resources.abc.TraversableResources: 2c5.

     (Contribuição de Jason R. Coombs e Hugo van Kemenade em
     gh-93963(11).)

   * *note itertools: 81.: Descontinua o suporte para operações de
     cópia, deepcopy e pickle, que é não documentado, ineficiente,
     historicamente cheio de bugs e inconsistente.  Isso será removido
     na versão 3.14 para uma redução significativa no volume de código e
     na carga de manutenção.  (Contribuição de Raymond Hettinger em
     gh-101588(12).)

   * *note multiprocessing: 94.: No Python 3.14, o método de início
     padrão de *note multiprocessing: 94. será alterado para um mais
     seguro no Linux, BSDs e outras plataformas POSIX não-macOS onde
     ‘'fork'’ é atualmente o padrão (gh-84559(13)).  Adicionar um aviso
     em tempo de execução sobre isso foi considerado muito perturbador,
     pois não se espera que a maior parte do código se importe.  Use as
     APIs *note get_context(): 2c6. ou *note set_start_method(): 2c7.
     para especificar explicitamente quando seu código 'requer'
     ‘'fork'’.  Veja *note contextos e métodos de início: 2c8.

   * *note pkgutil: a9.: *note pkgutil.find_loader(): 2cb. e *note
     pkgutil.get_loader(): 2cc. foram descontinuados e serão removidos
     no Python 3.14; use *note importlib.util.find_spec(): 2cd. em vez
     disso.  (Contribuição de Nikita Sobolev em gh-97850(14).)

   * *note pty: b1.: O módulo tem duas funções ‘master_open()’ e
     ‘slave_open()’ não documentadas que foram descontinuados desde
     Python 2, mas só ganharam um *note DeprecationWarning: 1a5.
     adequado em 3.12.  Remova-os em 3.14.  (Contribuição de Soumendra
     Ganguly e Gregory P. Smith em gh-85984(15).)

   * *note os: a1.:

        * Os campos ‘st_ctime’ retornados por *note os.stat(): 4a0. e
          *note os.lstat(): 4a1. no Windows foram descontinuados.  Em um
          lançamento futuro, eles conterão o horário da última alteração
          de metadados, consistente com outras plataformas.  Por
          enquanto, eles ainda contêm o horário de criação, que também
          está disponível no novo campo ‘st_birthtime’.  (Contribuição
          de Steve Dower em gh-99726(16).)

        * Nas plataformas POSIX, *note os.fork(): 197. agora pode
          levantar uma exceção *note DeprecationWarning: 1a5. quando
          puder detectar a chamada de um processo multithread.  Sempre
          houve uma incompatibilidade fundamental com a plataforma POSIX
          ao fazer isso.  Mesmo que esse código 'pareça' funcionar.
          Adicionamos o aviso para aumentar a conscientização, pois os
          problemas encontrados pelo código ao fazer isso estão se
          tornando mais frequentes.  Veja a documentação *note
          os.fork(): 197. para mais detalhes junto com esta discussão
          sobre fork ser incompatível com threads(17) para 'por que'
          estamos agora trazendo à tona esse antigo problema de
          compatibilidade de plataforma para os desenvolvedores.

     Quando este aviso aparece devido ao uso de *note multiprocessing:
     94. ou *note concurrent.futures: 21, a correção é usar um método de
     início de *note multiprocessing: 94. diferente, como ‘"spawn"’ ou
     ‘"forkserver"’.

   * *note shutil: c5.: O argumento 'onerror' de *note shutil.rmtree():
     301. foi descontinuado; use 'onexc' em vez disso.  (Contribuição de
     Irit Katriel em gh-102828(18).)

   * *note sqlite3: cf.:

        * *note adaptadores e conversores padrão: 4ef. agora foram
          descontinuados.  Em vez disso, use *note Adapter and converter
          recipes: 4f0. e adapte-os às suas necessidades.  (Contribuição
          de Erlend E. Aasland em gh-90016(19).)

        * Em *note execute(): 2d1, *note DeprecationWarning: 1a5. agora
          é emitida quando *note espaços reservados nomeados: 2d3. são
          usados junto com parâmetros fornecidos como *note sequência:
          4f1. em vez de como *note dict: 256.  A partir do Python 3.14,
          usar espaços reservados nomeados com parâmetros fornecidos
          como uma sequência vai levantar uma *note ProgrammingError:
          4f2.  (Contribuição de Erlend E. Aasland em gh-101698(20).)

   * *note sys: d9.: Os campos *note sys.last_type: 4bf, *note
     sys.last_value: 4c0. e *note sys.last_traceback: 4c1. foram
     descontinuados.  Use *note sys.last_exc: 4be. em vez disso.
     (Contribuição de Irit Katriel em gh-102778(21).)

   * *note tarfile: de.: Extrair arquivos tar sem especificar 'filter'
     foi descontinuado até Python 3.14, quando o filtro ‘'data'’ se
     tornará o padrão.  Veja *note Filtros de extração: 46c. para
     detalhes.

   * *note typing: 104.:

        * *note typing.Hashable: 4f3. e *note typing.Sized: 4f4,
          apelidos forem *note collections.abc.Hashable: 4f5. e *note
          collections.abc.Sized: 4f6. respectivamente, foram
          descontinuados.  (gh-94309(22).)

        * *note typing.ByteString: 2ee, descontinuado desde Python 3.9,
          agora faz com que um *note DeprecationWarning: 1a5. seja
          emitida quando é usado.  (Contribuição de Alex Waygood em
          gh-91896(23).)

   * *note xml.etree.ElementTree: 125.: O módulo agora emite *note
     DeprecationWarning: 1a5. ao testar o valor verdade de um *note
     xml.etree.ElementTree.Element: 310.  Antes, a implementação Python
     emitia *note FutureWarning: 415, e a implementação C não emitia
     nada.  (Contribuição de Jacob Walls em gh-83122(24).)

   * As assinaturas de 3 argumentos (tipo, valor, traceback) de *note
     coroutine throw(): 4f7, *note generator throw(): 4f8. e *note async
     generator throw(): 4f9. foram descontinuados e podem ser removidos
     em uma versão futura do Python.  Use as versões de argumento único
     dessas funções.  (Contribuição de Ofey Chan em gh-89874(25).)

   * *note DeprecationWarning: 1a5. agora é levantada quando *note
     __package__: 2d7. em um módulo difere de *note __spec__.parent:
     2d8. (anteriormente era *note ImportWarning: 4fa.).  (Contribuição
     de Brett Cannon em gh-65961(26).)

   * Definir *note __package__: 2d7. ou *note __cached__: 2d5. em um
     módulo foi descontinuado e deixará de ser definido ou levado em
     consideração pelo sistema de importação no Python 3.14.
     (Contribuição de Brett Cannon em gh-65961(27).)

   * O operador de inversão bit a bit (‘~’) em bool foi descontinuado.
     Isso levantará um erro no Python 3.16.  Use ‘not’ para negação
     lógica de bools.  No raro caso em que você realmente precisa da
     inversão bit a bit do ‘int’ subjacente, converta para int
     explicitamente: ‘~int(x)’.  (Contribuição de Tim Hoffmann em
     gh-103487(28).)

   * Acessar *note co_lnotab: 2e0. em objetos de código foi
     descontinuado no Python 3.10 via PEP 626(29), mas só obteve um
     *note DeprecationWarning: 1a5. adequado em 3.12.  Pode ser removido
     em 3.15.  (Contribuição de Nikita Sobolev em gh-101866(30).)

* Menu:

* Remoção pendente no Python 3.13: Remoção pendente no Python 3 13.
* Remoção pendente no Python 3.14: Remoção pendente no Python 3 14<3>.
* Remoção pendente no Python 3.15: Remoção pendente no Python 3 15<3>.
* Remoção pendente no Python 3.16: Remoção pendente no Python 3 16<3>.
* Remoção pendente no Python 3.17: Remoção pendente no Python 3 17<2>.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<3>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/92248

   (2) https://github.com/python/cpython/issues/90953

   (3) https://github.com/python/cpython/issues/94597

   (4) https://github.com/python/cpython/issues/94597

   (5) https://github.com/python/cpython/issues/100160

   (6) https://github.com/python/cpython/issues/103636

   (7) https://peps.python.org/pep-0688/#current-options

   (8) https://github.com/python/cpython/issues/91896

   (9) https://github.com/python/cpython/issues/103857

   (10) https://github.com/python/cpython/issues/72346

   (11) https://github.com/python/cpython/issues/93963

   (12) https://github.com/python/cpython/issues/101588

   (13) https://github.com/python/cpython/issues/84559

   (14) https://github.com/python/cpython/issues/97850

   (15) https://github.com/python/cpython/issues/85984

   (16) https://github.com/python/cpython/issues/99726

   (17) 
https://discuss.python.org/t/concerns-regarding-deprecation-of-fork-with-alive-threads/33555

   (18) https://github.com/python/cpython/issues/102828

   (19) https://github.com/python/cpython/issues/90016

   (20) https://github.com/python/cpython/issues/101698

   (21) https://github.com/python/cpython/issues/102778

   (22) https://github.com/python/cpython/issues/94309

   (23) https://github.com/python/cpython/issues/91896

   (24) https://github.com/python/cpython/issues/83122

   (25) https://github.com/python/cpython/issues/89874

   (26) https://github.com/python/cpython/issues/65961

   (27) https://github.com/python/cpython/issues/65961

   (28) https://github.com/python/cpython/issues/103487

   (29) https://peps.python.org/pep-0626/

   (30) https://github.com/python/cpython/issues/101866


File: python.info,  Node: Remoção pendente no Python 3 13,  Next: Remoção pendente no Python 3 14<3>,  Up: Descontinuados

1.2.10.1 Remoção pendente no Python 3.13
........................................

Módulos (veja PEP 594(1)):

   * ‘aifc’

   * ‘audioop’

   * ‘cgi’

   * ‘cgitb’

   * ‘chunk’

   * ‘crypt’

   * ‘imghdr’

   * ‘mailcap’

   * ‘msilib’

   * ‘nis’

   * ‘nntplib’

   * ‘ossaudiodev’

   * ‘pipes’

   * ‘sndhdr’

   * ‘spwd’

   * ‘sunau’

   * ‘telnetlib’

   * ‘uu’

   * ‘xdrlib’

Outros módulos:

   * ‘lib2to3’ e o programa ‘2to3’ (gh-84540(2))

APIs:

   * ‘configparser.LegacyInterpolation’ (gh-90765(3))

   * ‘locale.resetlocale()’ (gh-90817(4))

   * ‘turtle.RawTurtle.settiltangle()’ (gh-50096(5))

   * ‘unittest.findTestCases()’ (gh-50096(6))

   * ‘unittest.getTestCaseNames()’ (gh-50096(7))

   * ‘unittest.makeSuite()’ (gh-50096(8))

   * ‘unittest.TestProgram.usageExit()’ (gh-67048(9))

   * ‘webbrowser.MacOSX’ (gh-86421(10))

   * Encadeamento do descritor de *note classmethod: 166. (gh-89519(11))

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://github.com/python/cpython/issues/84540

   (3) https://github.com/python/cpython/issues/90765

   (4) https://github.com/python/cpython/issues/90817

   (5) https://github.com/python/cpython/issues/50096

   (6) https://github.com/python/cpython/issues/50096

   (7) https://github.com/python/cpython/issues/50096

   (8) https://github.com/python/cpython/issues/50096

   (9) https://github.com/python/cpython/issues/67048

   (10) https://github.com/python/cpython/issues/86421

   (11) https://github.com/python/cpython/issues/89519


File: python.info,  Node: Remoção pendente no Python 3 14<3>,  Next: Remoção pendente no Python 3 15<3>,  Prev: Remoção pendente no Python 3 13,  Up: Descontinuados

1.2.10.2 Remoção pendente no Python 3.14
........................................

   * *note argparse: 6.: Os parâmetros 'type', 'choices' e 'metavar' de
     ‘argparse.BooleanOptionalAction’ foram descontinuados e serão
     removidos na versão 3.14.  (Contribuição de Nikita Sobolev em
     gh-92248(1).)

   * *note ast: 8.: os seguintes recursos foram descontinuados na
     documentação desde Python 3.8, agora fazem com que um *note
     DeprecationWarning: 1a5. seja emitido em tempo de execução quando
     eles são acessados ou usados, e serão removidos no Python 3.14:

        * ‘ast.Num’

        * ‘ast.Str’

        * ‘ast.Bytes’

        * ‘ast.NameConstant’

        * ‘ast.Ellipsis’

     Em vez disso, use *note ast.Constant: 2b9.  (Contribuição de Serhiy
     Storchaka em gh-90953(2).)

   * *note asyncio: a.:

        * As classes filhas do observador *note MultiLoopChildWatcher:
          2ba, *note FastChildWatcher: 2bb, *note AbstractChildWatcher:
          2bc. e *note SafeChildWatcher: 2bd. foram descontinuadas e
          serão removidas no Python 3.14.  (Contribuição de Kumar Aditya
          em gh-94597(3).)

        * *note asyncio.set_child_watcher(): 2be, *note
          asyncio.get_child_watcher(): 2bf, *note
          asyncio.AbstractEventLoopPolicy.set_child_watcher(): 2c0. e
          *note asyncio.AbstractEventLoopPolicy.get_child_watcher():
          2c1. foram descontinuados e serão removidos no Python 3.14.
          (Contribuição de Kumar Aditya em gh-94597(4).)

        * O método *note get_event_loop(): 2c2. da política de laço de
          eventos padrão agora emite um *note DeprecationWarning: 1a5.
          se não houver nenhum laço de eventos atual definido e decidir
          criar um.  (Contribuição de Serhiy Storchaka e Guido van
          Rossum em gh-100160(5).)

   * *note builtins: 12.: ‘bool(NotImplemented)’ now emits a *note
     DeprecationWarning: 1a5. and will raise a *note TypeError: 2c3. in
     Python 3.14.  (Contributed by Jelle Zijlstra in gh-118767(6).)

   * *note email: 3b.: Descontinua o parâmetro 'isdst' em *note
     email.utils.localtime(): 2c4.  (Contribuição de Alan Williams em
     gh-72346(7).)

   * *note importlib.abc: 78. descontinuou as classes:

        * ‘importlib.abc.ResourceReader’

        * ‘importlib.abc.Traversable’

        * ‘importlib.abc.TraversableResources’

     Em vez disso, use classes de *note importlib.resources.abc: 7c.:

        * *note importlib.resources.abc.Traversable: 1f3.

        * *note importlib.resources.abc.TraversableResources: 2c5.

     (Contribuição de Jason R. Coombs e Hugo van Kemenade em
     gh-93963(8).)

   * *note itertools: 81. tinha suporte não documentado, ineficiente,
     historicamente cheio de bugs e inconsistente para operações de
     cópia, cópia profunda e serialização com pickle.  Isso será
     removido na versão 3.14 para uma redução significativa no volume de
     código e na carga de manutenção.  (Contribuição de Raymond
     Hettinger em gh-101588(9).)

   * *note multiprocessing: 94.: o método de inicialização padrão será
     alterado para um mais seguro no Linux, BSDs e outras plataformas
     POSIX não-macOS onde ‘'fork'’ é atualmente o padrão (gh-84559(10)).
     Adicionar um aviso de tempo de execução sobre isso foi considerado
     muito perturbador, pois não se espera que a maior parte do código
     se importe.  Use as APIs *note get_context(): 2c6. ou *note
     set_start_method(): 2c7. para especificar explicitamente quando seu
     código 'requer' ‘'fork'’.  Veja *note Contextos e métodos de
     inicialização: 2c8.

   * *note pathlib: a4.: *note is_relative_to(): 2c9. e *note
     relative_to(): 2ca.: passar argumentos adicionais foi
     descontinuado.

   * *note pkgutil: a9.: *note find_loader(): 2cb. e *note get_loader():
     2cc. agora levantam *note DeprecationWarning: 1a5.; use *note
     importlib.util.find_spec(): 2cd. em vez disto.  (Contribuição de
     Nikita Sobolev em gh-97850(11).)

   * *note pty: b1.:

        * ‘master_open()’: use *note pty.openpty(): 2ce.

        * ‘slave_open()’: use *note pty.openpty(): 2ce.

   * *note sqlite3: cf.:

        * *note version: 2cf. e *note version_info: 2d0.

        * *note execute(): 2d1. e *note executemany(): 2d2. se *note
          espaços reservados nomeados: 2d3. forem usados e 'parameters'
          for uma sequência em vez de um *note dict: 256. .

   * *note urllib: 108.: ‘urllib.parse.Quoter’ está obsoleto: não foi
     planejado para ser uma API pública.  (Contribuição de Gregory P.
     Smith em gh-88168(12).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/92248

   (2) https://github.com/python/cpython/issues/90953

   (3) https://github.com/python/cpython/issues/94597

   (4) https://github.com/python/cpython/issues/94597

   (5) https://github.com/python/cpython/issues/100160

   (6) https://github.com/python/cpython/issues/118767

   (7) https://github.com/python/cpython/issues/72346

   (8) https://github.com/python/cpython/issues/93963

   (9) https://github.com/python/cpython/issues/101588

   (10) https://github.com/python/cpython/issues/84559

   (11) https://github.com/python/cpython/issues/97850

   (12) https://github.com/python/cpython/issues/88168


File: python.info,  Node: Remoção pendente no Python 3 15<3>,  Next: Remoção pendente no Python 3 16<3>,  Prev: Remoção pendente no Python 3 14<3>,  Up: Descontinuados

1.2.10.3 Remoção pendente no Python 3.15
........................................

   * O sistema de importação:

        * A definição de *note __cached__: 2d5. em um módulo enquanto
          falha na definição de *note __spec__.cached: 2d6. 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.  (gh-97879(1))

        * A definição de *note __package__: 2d7. em um módulo enquanto
          falha na definição de *note __spec__.parent: 2d8. está
          descontinuado.  No Python 3.15, ‘__package__’ deixará de ser
          definido ou levado em consideração pelo sistema de importação
          ou pela biblioteca padrão.  (gh-97879(2))

   * *note ctypes: 2a.:

        * A função não documentada ‘ctypes.SetPointerType()’ foi
          descontinuada desde o Python 3.13.

   * *note http.server: 72.:

        * A classe obsoleta e raramente usada *note
          CGIHTTPRequestHandler: 2a1. foi descontinuada desde o Python
          3.13.  Não existe substituição direta.  'Qualquer coisa' é
          melhor que CGI para fazer a interface de um servidor web com
          um manipulador de requisição.

        * O sinalizador ‘--cgi’ para a interface de linha de comando
          ‘python -m http.server’ foi descontinuado desde o Python 3.13.

   * *note importlib: 77.:

        * Método ‘load_module()’: use ‘exec_module()’.

   * *note locale: 86.:

        * A função *note getdefaultlocale(): 2d9. foi descontinuada
          desde o Python 3.11.  Sua remoção foi planejada originalmente
          para o Python 3.13 (gh-90817(3)), mas foi adiada para o Python
          3.15.  Em vez disso, use *note getlocale(): 2da, *note
          setlocale(): 2db. e *note getencoding(): 2dc.  (Contribuição
          de Hugo van Kemenade em gh-111187(4).)

   * *note pathlib: a4.:

        * *note PurePath.is_reserved(): 2a6. foi descontinuado desde o
          Python 3.13.  Use *note os.path.isreserved(): 223. para
          detectar caminhos reservados no Windows.

   * *note platform: aa.:

        * *note java_ver(): 2a7. foi descontinuada desde o Python 3.13.
          Esta função é útil apenas para suporte Jython, tem uma API
          confusa e é amplamente não testada.

   * *note sysconfig: db.:

        * O argumento 'check_home' de *note sysconfig.is_python_build():
          2dd. foi descontinuado desde o Python 3.12.

   * *note threading: ed.:

        * *note RLock(): 2de. não aceitará argumentos no Python 3.15.  A
          passagem quaisquer argumentos foi descontinuada desde o Python
          3.14, pois a versão Python não permite nenhum argumento, mas a
          versão C permite qualquer número de argumentos posicionais ou
          nomeados, ignorando todos os argumentos.

   * *note types: 103.:

        * *note types.CodeType: 2df.: o acesso a *note co_lnotab: 2e0.
          foi descontinuado na PEP 626(5) desde 3.10 e foi planejado
          para ser removido em 3.12, mas só recebeu uma *note
          DeprecationWarning: 1a5. adequada em 3.12.  Pode ser removido
          em 3.15.  (Contribuição de Nikita Sobolev em gh-101866(6).)

   * *note typing: 104.:

        * A sintaxe de argumento nomeado não documentada para criar
          classes *note NamedTuple: 2b0. (por exemplo, ‘Point =
          NamedTuple("Point", x=int, y=int)’) foi descontinuada desde o
          Python 3.13.  Use a sintaxe baseada em classe ou a sintaxe
          funcional em vez disso.

        * Ao usar a sintaxe funcional de *note TypedDict: 162.s, não
          passar um valor para o parâmetro 'fields' (‘TD =
          TypedDict("TD")’) ou passar ‘None’ (‘TD = TypedDict("TD",
          None)’) foi está descontinuado desde o Python 3.13.  Use
          ‘class TD(TypedDict): pass’ ou ‘TD = TypedDict("TD", {})’ para
          criar uma classe TypedDict com nenhum campo.

        * A função decoradora *note typing.no_type_check_decorator():
          2b1. foi descontinuada desde o Python 3.13.  Após oito anos no
          módulo *note typing: 104, ela ainda não foi suportada por
          nenhum verificador de tipo importante.

   * *note wave: 113.:

        * Os métodos *note getmark(): 2b4, ‘setmark()’ e *note
          getmarkers(): 2b5. das classes *note Wave_read: 2b6. e *note
          Wave_write: 2b7. foram descontinuados desde o Python 3.13.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/97879

   (2) https://github.com/python/cpython/issues/97879

   (3) https://github.com/python/cpython/issues/90817

   (4) https://github.com/python/cpython/issues/111187

   (5) https://peps.python.org/pep-0626/

   (6) https://github.com/python/cpython/issues/101866


File: python.info,  Node: Remoção pendente no Python 3 16<3>,  Next: Remoção pendente no Python 3 17<2>,  Prev: Remoção pendente no Python 3 15<3>,  Up: Descontinuados

1.2.10.4 Remoção pendente no Python 3.16
........................................

   * O sistema de importação:

        * A definição de *note __loader__: 2e2. em um módulo enquanto
          falha na definição de *note __spec__.loader: 2e3. está
          descontinuado.  No Python 3.16, ‘__loader__’ deixará de ser
          definido ou levado em consideração pelo sistema de importação
          ou pela biblioteca padrão.

   * *note array: 7.:

        * O código de formato ‘'u'’ (‘wchar_t’) foi descontinuado na
          documentação desde o Python 3.3 e do ambiente de execução
          desde o Python 3.13.  Em vez disso, use o código de formato
          ‘'w'’ (*note Py_UCS4: 29b.) para caracteres Unicode.

   * *note asyncio: a.:

        * ‘asyncio.iscoroutinefunction()’ foi descontinuado e será
          removido no Python 3.16, use *note
          inspect.iscoroutinefunction(): 2e4. em vez disso.
          (Contribuição de Jiahao Li e Kumar Aditya em gh-122875(1).)

   * *note builtins: 12.:

        * A inversão bit a bit em tipos booleanos, ‘~True’ ou ‘~False’
          foi descontinuada desde o Python 3.12, pois produz resultados
          surpreendentes e não intuitivos (‘-2’ e ‘-1’).  Em vez disso,
          use ‘not x’ para a negação lógica de um booleano.  No caso
          raro de você precisar da inversão bit a bit do inteiro
          subjacente, converta para ‘int’ explicitamente (‘~int(x)’).

   * *note shutil: c5.:

        * A exceção ‘ExecError’ foi descontinuada desde o Python 3.14.
          Ela não foi usada por nenhuma função em ‘shutil’ desde o
          Python 3.4, e agora é um alias de *note RuntimeError: 195.

   * *note symtable: d8.:

        * O método *note Class.get_methods: 2e5. foi descontinuado desde
          o Python 3.14.

   * *note sys: d9.:

        * A função *note _enablelegacywindowsfsencoding(): 2ae. foi
          descontinuada desde o Python 3.13.  Em vez disso, use a
          variável de ambiente *note PYTHONLEGACYWINDOWSFSENCODING: 2af.

   * *note tarfile: de.:

        * O atributo não documentado e não utilizado ‘TarFile.tarfile’
          foi descontinuado desde o Python 3.13.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/122875


File: python.info,  Node: Remoção pendente no Python 3 17<2>,  Next: Remoção pendente em versões futuras<3>,  Prev: Remoção pendente no Python 3 16<3>,  Up: Descontinuados

1.2.10.5 Remoção pendente no Python 3.17
........................................

   * *note collections.abc: 1e.:

        - *note collections.abc.ByteString: 2e7. está agendado para
          remoção no Python 3.17.

          Use ‘isinstance(obj, collections.abc.Buffer)’ para testar se
          ‘obj’ implementa o *note protocolo de buffer: 2e8. em tempo de
          execução.  Para uso em anotações de tipo, use *note Buffer:
          2e9. ou uma união que especifique explicitamente os tipos
          suportados pelo seu código (por exemplo, ‘bytes | bytearray |
          memoryview’).

          ‘ByteString’ foi originalmente concebido para ser uma classe
          abstrata que serviria como um supertipo de *note bytes: 1c2. e
          *note bytearray: 2ea.  No entanto, como o ABC nunca teve
          métodos, saber que um objeto era uma instância de ‘ByteString’
          nunca lhe dizia nada de útil sobre o objeto.  Outros tipos
          comuns de buffer, como *note memoryview: 2eb, também nunca
          foram entendidos como subtipos de ‘ByteString’ (seja em tempo
          de execução ou por verificadores de tipo estáticos).

          Veja PEP 688(1) para mais detalhes.  (Contribuição de Shantanu
          Jain em gh-91896(2).)

   * *note typing: 104.:

        - Antes do Python 3.14, as uniões antigas eram implementadas
          usando a classe privada ‘typing._UnionGenericAlias’.  Essa
          classe não é mais necessária para a implementação, mas foi
          mantida para compatibilidade com versões anteriores, com
          remoção prevista para o Python 3.17.  Os usuários devem usar
          auxiliares de introspecção documentados, como *note
          typing.get_origin(): 2ec. e *note typing.get_args(): 2ed, em
          vez de depender de detalhes de implementação privada.

        - *note typing.ByteString: 2ee, obsoleto desde o Python 3.9,
          está programado para ser removido no Python 3.17.

          Use ‘isinstance(obj, collections.abc.Buffer)’ para testar se
          ‘obj’ implementa o *note protocolo de buffer: 2e8. em tempo de
          execução.  Para uso em anotações de tipo, use *note Buffer:
          2e9. ou uma união que especifique explicitamente os tipos
          suportados pelo seu código (por exemplo, ‘bytes | bytearray |
          memoryview’).

          ‘ByteString’ foi originalmente concebido para ser uma classe
          abstrata que serviria como um supertipo de *note bytes: 1c2. e
          *note bytearray: 2ea.  No entanto, como o ABC nunca teve
          métodos, saber que um objeto era uma instância de ‘ByteString’
          nunca lhe dizia nada de útil sobre o objeto.  Outros tipos
          comuns de buffer, como *note memoryview: 2eb, também nunca
          foram entendidos como subtipos de ‘ByteString’ (seja em tempo
          de execução ou por verificadores de tipo estáticos).

          Veja PEP 688(3) para mais detalhes.  (Contribuição de Shantanu
          Jain em gh-91896(4).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0688/#current-options

   (2) https://github.com/python/cpython/issues/91896

   (3) https://peps.python.org/pep-0688/#current-options

   (4) https://github.com/python/cpython/issues/91896


File: python.info,  Node: Remoção pendente em versões futuras<3>,  Prev: Remoção pendente no Python 3 17<2>,  Up: Descontinuados

1.2.10.6 Remoção pendente em versões futuras
............................................

As APIs a seguir serão removidas no futuro, embora atualmente não haja
uma data agendada para sua remoção.

   * *note argparse: 6.: O aninhamento de grupos de argumentos e o
     aninhamento de grupos mutuamente exclusivos estão descontinuados.

   * *note builtins: 12.:

        * Geradores: a assinatura ‘throw(type, exc, tb)’ e ‘athrow(type,
          exc, tb)’ está descontinuada: use ‘throw(exc)’ e
          ‘athrow(exc)’, a assinatura do argumento único.

        * Atualmente Python aceita literais numéricos imediatamente
          seguidos por palavras reservadas como, por exemplo, ‘0in x’,
          ‘1or x’, ‘0if 1else 2’.  Ele permite expressões confusas e
          ambíguas como ‘[0x1for x in y]’ (que pode ser interpretada
          como ‘[0x1 for x in y]’ ou ‘[0x1f or x in y]’).  Um aviso de
          sintaxe é levantado se o literal numérico for imediatamente
          seguido por uma das palavras reservadas *note and: 2f1, *note
          else: 18c, *note for: 2f2, *note if: 2f3, *note in: 2f4. ,
          *note is: 2f5. e *note or: 2f6.  Em uma versão futura, será
          alterado para um erro de sintaxe.  (gh-87999(1))

        * Suporte para métodos ‘__index__()’ e ‘__int__()’ retornando
          tipo não-int: esses métodos serão necessários para retornar
          uma instância de uma subclasse estrita de *note int: 257.

        * Suporte para o método ‘__float__()’ retornando uma subclasse
          estrita de *note float: 2f7.: esses métodos serão necessários
          para retornar uma instância de *note float: 2f7.

        * Suporte para o método ‘__complex__()’ retornando uma subclasse
          estrita de *note complex: 2f8.: esses métodos serão
          necessários para retornar uma instância de *note complex: 2f8.

        * Delegação do método ‘int()’ para o ‘__trunc__()’.

        * Passar um número complexo como argumento 'real' ou 'imag' no
          construtor *note complex(): 2f8. agora está descontinuado;
          deve ser passado apenas como um único argumento posicional.
          (Contribuição de Serhiy Storchaka em gh-109218(2).)

   * *note calendar: 14.: as constantes ‘calendar.January’ e
     ‘calendar.February’ foram descontinuadas e substituídas por *note
     calendar.JANUARY: 2f9. e *note calendar.FEBRUARY: 2fa.
     (Contribuição de Prince Roshan em gh-103636(3).)

   * *note codeobject.co_lnotab: 2e0.: use o método *note
     codeobject.co_lines(): 2fb.

   * *note datetime: 30.:

        * *note utcnow(): 2fc.: use
          ‘datetime.datetime.now(tz=datetime.UTC)’.

        * *note utcfromtimestamp(): 2fd.: use
          ‘datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)’.

   * *note gettext: 63.: o valor de plural deve ser um número inteiro.

   * *note importlib: 77.:

        * O parâmetro 'debug_override' de *note cache_from_source():
          2fe. foi descontinuado: use o parâmetro 'optimization'.

   * *note importlib.metadata: 7a.:

        * Interface de tupla ‘EntryPoints’.

        * ‘None’ implícito nos valores de retorno.

   * *note logging: 87.: o método ‘warn()’ foi descontinuado desde o
     Python 3.3, use *note warning(): 2ff.

   * *note mailbox: 8b.: o uso da entrada StringIO e do modo de texto
     foi descontinuado; em vez disso, use BytesIO e o modo binário.

   * *note os: a1.: chame *note os.register_at_fork(): 300. em processo
     multithread.

   * ‘pydoc.ErrorDuringImport’: um valor de tupla para o parâmetro
     'exc_info' foi descontinuado, use uma instância de exceção.

   * *note re: b9.: regras mais rigorosas agora são aplicadas para
     referências numéricas de grupos e nomes de grupos em expressões
     regulares.  Apenas a sequência de dígitos ASCII agora é aceita como
     referência numérica.  O nome do grupo em padrões de bytes e strings
     de substituição agora pode conter apenas letras e dígitos ASCII e
     sublinhado.  (Contribuição de Serhiy Storchaka em gh-91760(4).)

   * Módulos ‘sre_compile’, ‘sre_constants’ e ‘sre_parse’.

   * *note shutil: c5.: o parâmetro 'onerror' de *note rmtree(): 301.
     foi descontinuado no Python 3.12; use o parâmetro 'onexc'.

   * Protocolos e opções de *note ssl: d0.

        * *note ssl.SSLContext: 294. sem argumento de protocolo foi
          descontinuado.

        * *note ssl.SSLContext: 294.: *note set_npn_protocols(): 302. e
          ‘selected_npn_protocol()’ foram descontinuados, use ALPN.

        * Opções de ‘ssl.OP_NO_SSL*’

        * Opções de ‘ssl.OP_NO_TLS*’

        * ‘ssl.PROTOCOL_SSLv3’

        * ‘ssl.PROTOCOL_TLS’

        * ‘ssl.PROTOCOL_TLSv1’

        * ‘ssl.PROTOCOL_TLSv1_1’

        * ‘ssl.PROTOCOL_TLSv1_2’

        * ‘ssl.TLSVersion.SSLv3’

        * ‘ssl.TLSVersion.TLSv1’

        * ‘ssl.TLSVersion.TLSv1_1’

   * Métodos de *note threading: ed.:

        * ‘threading.Condition.notifyAll()’: use *note notify_all():
          303.

        * ‘threading.Event.isSet()’: use *note is_set(): 304.

        * ‘threading.Thread.isDaemon()’, *note
          threading.Thread.setDaemon(): 305.: use o atributo *note
          threading.Thread.daemon: 306.

        * ‘threading.Thread.getName()’, *note
          threading.Thread.setName(): 307.: use o atributo *note
          threading.Thread.name: 308.

        * ‘threading.currentThread()’: use *note
          threading.current_thread(): 309.

        * ‘threading.activeCount()’: use *note threading.active_count():
          30a.

   * *note typing.Text: 30b. (gh-92332(5)).

   * *note unittest.IsolatedAsyncioTestCase: 30c.: foi descontinuado
     retornar um valor que não seja ‘None’ de um caso de teste.

   * Funções descontinuadas de *note urllib.parse: 10a.: use *note
     urlparse(): 30d.

        * ‘splitattr()’

        * ‘splithost()’

        * ‘splitnport()’

        * ‘splitpasswd()’

        * ‘splitport()’

        * ‘splitquery()’

        * ‘splittag()’

        * ‘splittype()’

        * ‘splituser()’

        * ‘splitvalue()’

        * ‘to_bytes()’

   * *note urllib.request: 10b.: O estilo de *note URLopener: 30e. e
     *note FancyURLopener: 30f. de invocar solicitações foi
     descontinuado.  Use as mais novas funções e métodos *note
     urlopen(): 293.

   * *note wsgiref: 118.: ‘SimpleHandler.stdout.write()’ não deve fazer
     gravações parciais.

   * *note xml.etree.ElementTree: 125.: testar o valor verdade de um
     *note Element: 310. está descontinuado.  Em um lançamento futuro
     isso sempre retornará ‘True’.  Em vez disso, prefira os testes
     explícitos ‘len(elem)’ ou ‘elem is not None’.

   * *note zipimport.zipimporter.load_module(): 311. foi descontinuado:
     use *note exec_module(): 312.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/87999

   (2) https://github.com/python/cpython/issues/109218

   (3) https://github.com/python/cpython/issues/103636

   (4) https://github.com/python/cpython/issues/91760

   (5) https://github.com/python/cpython/issues/92332


File: python.info,  Node: Removidos,  Next: Portando para Python 3 12,  Prev: Descontinuados,  Up: O que há de novo no Python 3 12

1.2.11 Removidos
----------------

* Menu:

* asynchat e asyncore::
* configparser: configparser<3>.
* distutils::
* ensurepip::
* enum: enum<2>.
* ftplib::
* gzip::
* hashlib::
* importlib: importlib<2>.
* imp::
* io: io<2>.
* locale: locale<2>.
* smtpd::
* sqlite3: sqlite3<3>.
* ssl: ssl<2>.
* unittest: unittest<3>.
* webbrowser: webbrowser<2>.
* xml.etree.ElementTree: xml etree ElementTree.
* zipimport: zipimport<2>.
* Outros::


File: python.info,  Node: asynchat e asyncore,  Next: configparser<3>,  Up: Removidos

1.2.11.1 asynchat e asyncore
............................

   * Esses dois módulos foram removidos de acordo com o cronograma em
     PEP 594(1), tendo sido descontinuados no Python 3.6.  Use *note
     asyncio: a. em vez disso.  (Contribuição de Nikita Sobolev em
     gh-96580(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://github.com/python/cpython/issues/96580


File: python.info,  Node: configparser<3>,  Next: distutils,  Prev: asynchat e asyncore,  Up: Removidos

1.2.11.2 configparser
.....................

   * Vários nomes descontinuados no *note configparser: 22. na versão
     3.2 foram removidos por gh-89336(1):

        * *note configparser.ParsingError: 505. não possui mais um
          argumento ou atributo ‘filename’.  Use o atributo e o
          argumento ‘source’.

        * *note configparser: 22. não possui mais uma classe
          ‘SafeConfigParser’.  Use o nome *note ConfigParser: 1c8. mais
          curto.

        * *note configparser.ConfigParser: 1c8. não possui mais um
          método ‘readfp’.  Use *note read_file(): 506. em vez disso.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/89336


File: python.info,  Node: distutils,  Next: ensurepip,  Prev: configparser<3>,  Up: Removidos

1.2.11.3 distutils
..................

   * Remove o pacote ‘distutils’.  Foi descontinuado no Python 3.10 por
     PEP 632(1) “Descontinuar o módulo distutils”.  Para projetos que
     ainda usam ‘distutils’ e não podem ser atualizados para outra
     coisa, o projeto ‘setuptools’ pode ser instalado: ele ainda fornece
     ‘distutils’.  (Contribuição de Victor Stinner em gh-92584(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0632/

   (2) https://github.com/python/cpython/issues/92584


File: python.info,  Node: ensurepip,  Next: enum<2>,  Prev: distutils,  Up: Removidos

1.2.11.4 ensurepip
..................

   * Remove o wheel de setuptools incluído em *note ensurepip: 55. e
     para de instalar setuptools em ambientes criados por *note venv:
     111.

     ‘pip (>= 22.1)’ não requer que setuptools sejam instalados no
     ambiente.  Pacotes baseados em ‘setuptools’ (e baseados em
     ‘distutils’) ainda podem ser usados com ‘pip install’, já que o pip
     fornecerá ‘setuptools’ no ambiente de construção que ele usa para
     construir um pacote.

     ‘easy_install’, ‘pkg_resources’, ‘setuptools’ e ‘distutils’ não são
     mais fornecidos por padrão em ambientes criados com ‘venv’ ou
     inicializados com ‘ensurepip’, já que eles são parte do pacote
     ‘setuptools’.  Para projetos que dependem destes em tempo de
     execução, o projeto ‘setuptools’ deve ser declarado como uma
     dependência e instalado separadamente (normalmente, usando pip).

     (Contribuição de Pradyun Gedam em gh-95299(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/95299


File: python.info,  Node: enum<2>,  Next: ftplib,  Prev: ensurepip,  Up: Removidos

1.2.11.5 enum
.............

   * Remove ‘EnumMeta.__getattr__’ de *note enum: 56, que não é mais
     necessário para acesso ao atributos do enum.  (Contribuição de
     Ethan Furman em gh-95083(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/95083


File: python.info,  Node: ftplib,  Next: gzip,  Prev: enum<2>,  Up: Removidos

1.2.11.6 ftplib
...............

   * Remove o atributo de classe ‘FTP_TLS.ssl_version’ do *note ftplib:
     5e.: use o parâmetro 'context' em seu lugar.  (Contribuição de
     Victor Stinner em gh-94172(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/94172


File: python.info,  Node: gzip,  Next: hashlib,  Prev: ftplib,  Up: Removidos

1.2.11.7 gzip
.............

   * Remove o atributo ‘filename’ do *note gzip.GzipFile: 41a. de *note
     gzip: 67, descontinuado desde Python 2.6, use o atributo *note
     name: 50d. em seu lugar.  No modo de gravação, o atributo
     ‘filename’ adicionou a extensão de arquivo ‘'.gz'’ se ela não
     estivesse presente.  (Contribuição de Victor Stinner em
     gh-94196(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/94196


File: python.info,  Node: hashlib,  Next: importlib<2>,  Prev: gzip,  Up: Removidos

1.2.11.8 hashlib
................

   * Remove a implementação Python pura de *note hashlib.pbkdf2_hmac():
     50f. de *note hashlib: 68, descontinuado em Python 3.10.  Python
     3.10 e mais recente requer OpenSSL 1.1.1 ( PEP 644(1)): esta versão
     do OpenSSL fornece uma implementação C de *note pbkdf2_hmac(): 50f.
     que é mais rápida.  (Contribuição de Victor Stinner em
     gh-94199(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0644/

   (2) https://github.com/python/cpython/issues/94199


File: python.info,  Node: importlib<2>,  Next: imp,  Prev: hashlib,  Up: Removidos

1.2.11.9 importlib
..................

   * Foi concluída a remoção de muitos alvos de *note importlib: 77. que
     haviam sido descontinuados anteriormente:

        * Referências e suporte a ‘module_repr()’ foram removidos.
          (Contribuição de Barry Warsaw em gh-97850(1).)

        * ‘importlib.util.set_package’, ‘importlib.util.set_loader’ e
          ‘importlib.util.module_for_loader’ foram todos removidos.
          (Contribuição de Brett Cannon e Nikita Sobolev em gh-65961(2)
          e gh-97850(3).)

        * O suporte para APIs ‘find_loader()’ e ‘find_module()’ foi
          removido.  (Contribuição de Barry Warsaw em gh-98040(4).)

        * ‘importlib.abc.Finder’, ‘pkgutil.ImpImporter’ e
          ‘pkgutil.ImpLoader’ foram removidos.  (Contribuição de Barry
          Warsaw em gh-98040(5).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/97850

   (2) https://github.com/python/cpython/issues/65961

   (3) https://github.com/python/cpython/issues/97850

   (4) https://github.com/python/cpython/issues/98040

   (5) https://github.com/python/cpython/issues/98040


File: python.info,  Node: imp,  Next: io<2>,  Prev: importlib<2>,  Up: Removidos

1.2.11.10 imp
.............

   * O módulo ‘imp’ foi removido.  (Contribuição de Barry Warsaw em
     gh-98040(1).)

     Para migrar consulte a seguinte tabela de correspondência:

          imp                                   importlib
                                                
          --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                                                
          ‘imp.NullImporter’                    Insere ‘None’ em ‘sys.path_importer_cache’
                                                
                                                
          ‘imp.cache_from_source()’             *note importlib.util.cache_from_source(): 2fe.
                                                
                                                
          ‘imp.find_module()’                   *note importlib.util.find_spec(): 2cd.
                                                
                                                
          ‘imp.get_magic()’                     *note importlib.util.MAGIC_NUMBER: 513.
                                                
                                                
          ‘imp.get_suffixes()’                  *note importlib.machinery.SOURCE_SUFFIXES: 514, *note importlib.machinery.EXTENSION_SUFFIXES: 515. e
                                                *note importlib.machinery.BYTECODE_SUFFIXES: 516.
                                                
                                                
          ‘imp.get_tag()’                       *note sys.implementation.cache_tag: 517.
                                                
                                                
          ‘imp.load_module()’                   *note importlib.import_module(): 518.
                                                
                                                
          ‘imp.new_module(name)’                ‘types.ModuleType(name)’
                                                
                                                
          ‘imp.reload()’                        *note importlib.reload(): 519.
                                                
                                                
          ‘imp.source_from_cache()’             *note importlib.util.source_from_cache(): 51a.
                                                
                                                
          ‘imp.load_source()’                   'Veja abaixo'
                                                

     Substitua ‘imp.load_source()’ com:

          import importlib.util
          import importlib.machinery

          def load_source(modname, filename):
              loader = importlib.machinery.SourceFileLoader(modname, filename)
              spec = importlib.util.spec_from_file_location(modname, filename, loader=loader)
              module = importlib.util.module_from_spec(spec)
              # O módulo é sempre executado e não colocado em cache em sys.modules.
              # Descomente a linha a seguir para colocar o módulo em cache.
              # sys.modules[module.__name__] = module
              loader.exec_module(module)
              return module

   * Remove funções e atributos do ‘imp’ sem substituições:

        * Funções não documentadas:

             * ‘imp.init_builtin()’

             * ‘imp.load_compiled()’

             * ‘imp.load_dynamic()’

             * ‘imp.load_package()’

        * ‘imp.lock_held()’, ‘imp.acquire_lock()’, ‘imp.release_lock()’:
          o esquema de trava foi alterado no Python 3.3 para travas por
          módulo.

        * Constantes de ‘imp.find_module()’: ‘SEARCH_ERROR’,
          ‘PY_SOURCE’, ‘PY_COMPILED’, ‘C_EXTENSION’, ‘PY_RESOURCE’,
          ‘PKG_DIRECTORY’, ‘C_BUILTIN’, ‘PY_FROZEN’, ‘PY_CODERESOURCE’,
          ‘IMP_HOOK’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98040


File: python.info,  Node: io<2>,  Next: locale<2>,  Prev: imp,  Up: Removidos

1.2.11.11 io
............

   * Remove ‘io.OpenWrapper’ e ‘_pyio.OpenWrapper’ de *note io: 7f,
     descontinuados em Python 3.10: basta usar *note open(): 51c. em seu
     lugar.  A função *note open(): 51c. (*note io.open(): 51d.) é uma
     função embutida.  Desde o Python 3.10, ‘_pyio.open()’ também é um
     método estático.  (Contribuição de Victor Stinner em gh-94169(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/94169


File: python.info,  Node: locale<2>,  Next: smtpd,  Prev: io<2>,  Up: Removidos

1.2.11.12 locale
................

   * Remove a função ‘locale.format()’ de *note locale: 86,
     descontinuada no Python 3.7: use *note locale.format_string(): 51f.
     em seu lugar.  (Contribuição de Victor Stinner em gh-94226(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/94226


File: python.info,  Node: smtpd,  Next: sqlite3<3>,  Prev: locale<2>,  Up: Removidos

1.2.11.13 smtpd
...............

   * O módulo ‘smtpd’ foi removido de acordo com o cronograma em PEP
     594(1), tendo sido descontinuado em Python 3.4.7 e 3.5.4.  Use o
     módulo PyPI aiosmtpd(2) ou qualquer outro servidor baseado em *note
     asyncio: a.  (Contribuição de Oleg Iarygin em gh-93243(3).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://pypi.org/project/aiosmtpd/

   (3) https://github.com/python/cpython/issues/93243


File: python.info,  Node: sqlite3<3>,  Next: ssl<2>,  Prev: smtpd,  Up: Removidos

1.2.11.14 sqlite3
.................

   * Os seguintes recursos não documentados do *note sqlite3: cf,
     descontinuados no Python 3.10, foram agora removidos:

        * ‘sqlite3.enable_shared_cache()’

        * ‘sqlite3.OptimizedUnicode’

     Se um cache compartilhado deve ser usado, abra o banco de dados no
     modo URI usando o parâmetro de consulta ‘cache=shared’.

     A fábrica de texto ‘sqlite3.OptimizedUnicode’ tem sido um apelido
     para *note str: 44c. desde Python 3.3.  O código que anteriormente
     definiu a fábrica de texto como ‘OptimizedUnicode’ pode usar ‘str’
     explicitamente ou confiar no valor padrão que também é ‘str’.

     (Contribuição de Erlend E. Aasland em gh-92548(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/92548


File: python.info,  Node: ssl<2>,  Next: unittest<3>,  Prev: sqlite3<3>,  Up: Removidos

1.2.11.15 ssl
.............

   * Remove a função ‘ssl.RAND_pseudo_bytes()’ do *note ssl: d0,
     descontinuada no Python 3.6: use *note os.urandom(): 523. ou *note
     ssl.RAND_bytes(): 524. em seu lugar.  (Contribuição de Victor
     Stinner em gh-94199(1).)

   * Remove a função ‘ssl.match_hostname()’.  Foi descontinuada no
     Python 3.7.  OpenSSL realiza correspondência de nome de host desde
     Python 3.7, Python não usa mais a função ‘ssl.match_hostname()’.
     (Contribuição de Victor Stinner em gh-94199(2).)

   * Remove a função ‘ssl.wrap_socket()’, descontinuada no Python 3.7:
     em vez desta, crie um objeto *note ssl.SSLContext: 294. e chame seu
     método *note ssl.SSLContext.wrap_socket: 525.  Qualquer pacote que
     ainda use ‘ssl.wrap_socket()’ está quebrado e é inseguro.  A função
     não envia uma extensão SNI TLS nem valida o nome do host do
     servidor.  O código está sujeito a CWE 295(3) (validação inadequada
     de certificado).  (Contribuição de Victor Stinner em gh-94199(4).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/94199

   (2) https://github.com/python/cpython/issues/94199

   (3) https://cwe.mitre.org/data/definitions/295.html

   (4) https://github.com/python/cpython/issues/94199


File: python.info,  Node: unittest<3>,  Next: webbrowser<2>,  Prev: ssl<2>,  Up: Removidos

1.2.11.16 unittest
..................

   * Remove recursos do *note unittest: 106. há muito tempo
     descontinuados:

        * Vários apelidos de método de *note TestCase: 44f.:

          Apelido descontinuado            Método                              Descontinuado em
                                                                               
          -----------------------------------------------------------------------------------------
                                                                               
          ‘failUnless’                     *note assertTrue(): 527.            3.1
                                                                               
                                                                               
          ‘failIf’                         *note assertFalse(): 528.           3.1
                                                                               
                                                                               
          ‘failUnlessEqual’                *note assertEqual(): 529.           3.1
                                                                               
                                                                               
          ‘failIfEqual’                    *note assertNotEqual(): 52a.        3.1
                                                                               
                                                                               
          ‘failUnlessAlmostEqual’          *note assertAlmostEqual(): 52b.     3.1
                                                                               
                                                                               
          ‘failIfAlmostEqual’              *note assertNotAlmostEqual(): 52c.  3.1
                                                                               
                                                                               
          ‘failUnlessRaises’               *note assertRaises(): 52d.          3.1
                                                                               
                                                                               
          ‘assert_’                        *note assertTrue(): 527.            3.2
                                                                               
                                                                               
          ‘assertEquals’                   *note assertEqual(): 529.           3.2
                                                                               
                                                                               
          ‘assertNotEquals’                *note assertNotEqual(): 52a.        3.2
                                                                               
                                                                               
          ‘assertAlmostEquals’             *note assertAlmostEqual(): 52b.     3.2
                                                                               
                                                                               
          ‘assertNotAlmostEquals’          *note assertNotAlmostEqual(): 52c.  3.2
                                                                               
                                                                               
          ‘assertRegexpMatches’            *note assertRegex(): 52e.           3.2
                                                                               
                                                                               
          ‘assertRaisesRegexp’             *note assertRaisesRegex(): 52f.     3.2
                                                                               
                                                                               
          ‘assertNotRegexpMatches’         *note assertNotRegex(): 530.        3.5
                                                                               

          Você pode usar ‘https://github.com/isidentical/teyit’ para
          modernizar automaticamente seus testes de unidade.

        * Método não documentado e quebrado ‘assertDictContainsSubset’
          de *note TestCase: 44f. (descontinuado no Python 3.2).

        * Parâmetro não documentado 'use_load_tests' de *note
          TestLoader.loadTestsFromModule: 28f. (descontinuado e ignorado
          desde Python 3.5).

        * Um apelido da classe *note TextTestResult: 531.:
          ‘_TextTestResult’ (descontinuado no Python 3.2).

     (Contribuição de Serhiy Storchaka em gh-89325(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/89325


File: python.info,  Node: webbrowser<2>,  Next: xml etree ElementTree,  Prev: unittest<3>,  Up: Removidos

1.2.11.17 webbrowser
....................

   * Remove o suporte para navegadores descontinuados de *note
     webbrowser: 115.  Os navegadores removidos incluem: Grail, Mosaic,
     Netscape, Galeon, Skipstone, Iceape, Firebird e Firefox versões 35
     e inferiores (gh-102871(1)).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102871


File: python.info,  Node: xml etree ElementTree,  Next: zipimport<2>,  Prev: webbrowser<2>,  Up: Removidos

1.2.11.18 xml.etree.ElementTree
...............................

   * Remove o método ‘ElementTree.Element.copy()’ da implementação
     Python pura, descontinuado no Python 3.10; use a função *note
     copy.copy(): 534. em seu lugar.  A implementação C de *note
     xml.etree.ElementTree: 125. não possui nenhum método ‘copy()’,
     apenas um método ‘__copy__()’.  (Contribuição de Victor Stinner em
     gh-94383(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/94383


File: python.info,  Node: zipimport<2>,  Next: Outros,  Prev: xml etree ElementTree,  Up: Removidos

1.2.11.19 zipimport
...................

   * Remove os métodos ‘find_loader()’ e ‘find_module()’ do *note
     zipimport: 132, descontinuados no Python 3.10: use o método
     ‘find_spec()’ em seu lugar.  Veja PEP 451(1) para o raciocínio.
     (Contribuição de Victor Stinner em gh-94379(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0451/

   (2) https://github.com/python/cpython/issues/94379


File: python.info,  Node: Outros,  Prev: zipimport<2>,  Up: Removidos

1.2.11.20 Outros
................

   * Remove a regra ‘suspicious’ do ‘Makefile’ da documentação e do
     ‘Doc/tools/rstlint.py’, ambas em favor do sphinx-lint(1).
     (Contribuição de Julien Palard em gh-98179(2).)

   * Remove os parâmetros 'keyfile' e 'certfile' dos módulos *note
     ftplib: 5e, *note imaplib: 74, *note poplib: ac. e *note smtplib:
     ca, e dos módulos 'key_file', 'cert_file' e 'check_hostname' do
     módulo *note http.client: 6f, todos descontinuados desde Python
     3.6.  Use o parâmetro 'context' ('ssl_context' em *note imaplib:
     74.).  (Contribuição de Victor Stinner em gh-94172(3).)

   * Remove hacks de compatibilidade ‘Jython’ de vários módulos e testes
     da stdlib.  (Contribuição de Nikita Sobolev em gh-99482(4).)

   * Remove o sinalizador ‘_use_broken_old_ctypes_structure_semantics_’
     do módulo *note ctypes: 2a.  (Contribuição de Nikita Sobolev em
     gh-99285(5).)

   ---------- Footnotes ----------

   (1) https://github.com/sphinx-contrib/sphinx-lint

   (2) https://github.com/python/cpython/issues/98179

   (3) https://github.com/python/cpython/issues/94172

   (4) https://github.com/python/cpython/issues/99482

   (5) https://github.com/python/cpython/issues/99285


File: python.info,  Node: Portando para Python 3 12,  Next: Mudanças na construção<2>,  Prev: Removidos,  Up: O que há de novo no Python 3 12

1.2.12 Portando para Python 3.12
--------------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções que podem exigir alterações no seu código.

* Menu:

* Alterações na API Python: Alterações na API Python<2>.


File: python.info,  Node: Alterações na API Python<2>,  Up: Portando para Python 3 12

1.2.12.1 Alterações na API Python
.................................

   * Regras mais rigorosas agora são aplicadas para referências
     numéricas de grupos e nomes de grupos em expressões regulares.
     Apenas a sequência de dígitos ASCII agora é aceita como referência
     numérica.  O nome do grupo em padrões de bytes e strings de
     substituição agora pode conter apenas letras e dígitos ASCII e
     sublinhado.  (Contribuição de Serhiy Storchaka em gh-91760(1).)

   * Remove a funcionalidade ‘randrange()’ descontinuada desde o Python
     3.10.  Anteriormente, ‘randrange(10.0)’ era convertido sem perdas
     para ‘randrange(10)’.  Agora, ele levanta um *note TypeError: 2c3.
     Além disso, a exceção levantada para valores não inteiros como
     ‘randrange(10.5)’ ou ‘randrange('10')’ foi alterada de *note
     ValueError: 202. para *note TypeError: 2c3.  Isso também evita bugs
     onde ‘randrange(1e25)’ selecionaria silenciosamente um intervalo
     maior que ‘randrange(10**25)’.  (Originalmente sugerido por Serhiy
     Storchaka gh-86388(2).)

   * *note argparse.ArgumentParser: 539. alterou a codificação e o
     tratador de erros para ler argumentos do arquivo (por exemplo,
     opção ‘fromfile_prefix_chars’) da codificação de texto padrão (por
     exemplo, *note locale.getpreferredencoding(False): 53a.) para *note
     tratador de erros e codificação do sistema de arquivos: 53b.  Os
     arquivos de argumento devem ser codificados em UTF-8 em vez de ANSI
     Codepage no Windows.

   * Remove o módulo ‘smtpd’ baseado em ‘asyncore’ descontinuado no
     Python 3.4.7 e 3.5.4.  Um substituto recomendado é o módulo PyPI
     baseado em *note asyncio: a. aiosmtpd(3).

   * *note shlex.split(): 53c.: Passar ‘None’ para o argumento 's' agora
     levanta uma exceção, ao invés de ler *note sys.stdin: 53d.  O
     recurso foi descontinuado no Python 3.9.  (Contribuição de Victor
     Stinner em gh-94352(4).)

   * O módulo *note os: a1. não aceita mais caminhos bytes ou similar,
     como os tipos *note bytearray: 2ea. e *note memoryview: 2eb.:
     apenas o tipo exato *note bytes: 1c2. é aceito para strings de
     bytes.  (Contribuição de Victor Stinner em gh-98393(5).)

   * *note syslog.openlog(): 53e. e *note syslog.closelog(): 53f. agora
     falham se usadas em subinterpretadores.  *note syslog.syslog():
     540. ainda pode ser usada em subinterpretadores, mas agora somente
     se *note syslog.openlog(): 53e. já tiver sido chamada no
     interpretador principal.  Estas novas restrições não se aplicam ao
     interpretador principal, então apenas um pequeno grupo de usuários
     poderá ser afetado.  Essa mudança ajuda no isolamento do
     interpretador.  Além disso, *note syslog: dc. é um wrapper em torno
     de recursos globais de processo, que são melhor gerenciados a
     partir do interpretador principal.  (Contribuição de Donghee Na em
     gh-99127(6).)

   * O comportamento não documentado de trava de *note
     cached_property(): 541. foi removido, porque travava todas as
     instâncias da classe, levando a uma alta contenção de trava.  Isso
     significa que uma função getter de propriedade em cache agora pode
     ser executada mais de uma vez para uma única instância, se duas
     threads competirem.  Para a maioria das propriedades simples em
     cache (por exemplo, aquelas que são idempotentes e simplesmente
     calculam um valor com base em outros atributos da instância), isso
     será suficiente.  Se a sincronização for necessária, implemente a
     trava na função getter de propriedade em cache ou em torno de
     pontos de acesso multithread.

   * *note sys._current_exceptions(): 4c2. agora retorna um mapeamento
     de thread-id para uma instância de exceção, ao invés de uma tupla
     ‘(typ, exc, tb)’.  (Contribuição de Irit Katriel em gh-103176(7).)

   * Ao extrair arquivos tar usando *note tarfile: de. ou *note
     shutil.unpack_archive(): 46b, passe o argumento 'filter' para
     limitar recursos que podem surpreender ou ser perigosos.  Veja
     *note Filtros de extração: 46c. para detalhes.

   * A saída das funções *note tokenize.tokenize(): 4d9. e *note
     tokenize.generate_tokens(): 4da. agora foi alterada devido às
     mudanças introduzidas na PEP 701(8).  Isso significa que os tokens
     ‘STRING’ não são mais emitidos para f-strings e os tokens descritos
     em PEP 701(9) agora são produzidos: ‘FSTRING_START’,
     ‘FSTRING_MIDDLE’ e ‘FSTRING_END’ agora são emitidos para partes
     “string” de f-strings, além dos tokens apropriados para a
     tokenização nos componentes da expressão.  Por exemplo, para a
     f-string ‘f"start {1+1} end"’ a versão antiga do tokenizer emitida:

          1,0-1,18:           STRING         'f"start {1+1} end"'

     enquanto a nova versão emite:

          1,0-1,2:            FSTRING_START  'f"'
          1,2-1,8:            FSTRING_MIDDLE 'start '
          1,8-1,9:            OP             '{'
          1,9-1,10:           NUMBER         '1'
          1,10-1,11:          OP             '+'
          1,11-1,12:          NUMBER         '1'
          1,12-1,13:          OP             '}'
          1,13-1,17:          FSTRING_MIDDLE ' end'
          1,17-1,18:          FSTRING_END    '"'

     Além disso, pode haver algumas pequenas alterações comportamentais
     como consequência das alterações necessárias para oferecer suporte
     à PEP 701(10).  Algumas dessas mudanças incluem:

        * O atributo ‘type’ dos tokens emitidos ao tokenizar alguns
          caracteres Python inválidos, como ‘!’, mudou de ‘ERRORTOKEN’
          para ‘OP’.

        * Strings incompletas de linha única agora também levantam *note
          tokenize.TokenError: 542. como fazem strings multilinhas
          incompletas.

        * Algum código Python incompleto ou inválido agora levanta *note
          tokenize.TokenError: 542. em vez de retornar tokens
          ‘ERRORTOKEN’ arbitrários ao tokenizá-lo.

        * Misturar tabulações e espaços como indentação no mesmo arquivo
          não é mais suportado e vai levantar uma *note TabError: 543.

   * O módulo *note threading: ed. agora espera que o módulo ‘_thread’
     tenha um atributo ‘_is_main_interpreter’.  É uma função sem
     argumentos que retorna ‘True’ se o interpretador atual for o
     interpretador principal.

     Qualquer biblioteca ou aplicação que forneça um módulo ‘_thread’
     personalizado deve fornecer ‘_is_main_interpreter()’.  (Veja
     gh-112826(11).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/91760

   (2) https://github.com/python/cpython/issues/86388

   (3) https://pypi.org/project/aiosmtpd/

   (4) https://github.com/python/cpython/issues/94352

   (5) https://github.com/python/cpython/issues/98393

   (6) https://github.com/python/cpython/issues/99127

   (7) https://github.com/python/cpython/issues/103176

   (8) https://peps.python.org/pep-0701/

   (9) https://peps.python.org/pep-0701/

   (10) https://peps.python.org/pep-0701/

   (11) https://github.com/python/cpython/issues/112826


File: python.info,  Node: Mudanças na construção<2>,  Next: Alterações na API C<4>,  Prev: Portando para Python 3 12,  Up: O que há de novo no Python 3 12

1.2.13 Mudanças na construção
-----------------------------

   * Python não usa mais ‘setup.py’ para construir módulos de extensão C
     compartilhados.  Parâmetros de construção como cabeçalhos e
     bibliotecas são detectados no script ‘configure’.  As extensões são
     construídas por ‘Makefile’.  A maioria das extensões usa
     ‘pkg-config’ e recorre à detecção manual.  (Contribuição de
     Christian Heimes em gh-93939(1).)

   * ‘va_start()’ com dois parâmetros, como ‘va_start(args, format)’,
     agora é necessário para construir Python.  ‘va_start()’ não é mais
     chamado com um único parâmetro.  (Contribuição de Kumar Aditya em
     gh-93207(2).)

   * CPython agora usa a opção ThinLTO como política de otimização de
     tempo de vincualção padrão se o compilador Clang aceitar o
     sinalizador.  (Contribuição de Donghee Na em gh-89536(3).)

   * Adiciona a variável ‘COMPILEALL_OPTS’ em ‘Makefile’ para substituir
     as opções *note compileall: 20. (padrão: ‘-j0’) em ‘make install’.
     Também fundiu os 3 comandos ‘compileall’ em um único comando para
     construir arquivos .pyc para todos os níveis de otimização (0, 1,
     2) de uma só vez.  (Contribuição de Victor Stinner em gh-99289(4).)

   * Adiciona trios de plataforma para LoongArch de 64 bits:

        * loongarch64-linux-gnusf

        * loongarch64-linux-gnuf32

        * loongarch64-linux-gnu

     (Contribuição de Zhang Na em gh-90656(5).)

   * ‘PYTHON_FOR_REGEN’ agora requer Python 3.10 ou mais novo.

   * Autoconf 2.71 e aclocal 1.16.4 agora são necessários para regerar
     ‘!configure’.  (Contribuição de Christian Heimes em gh-89886(6).)

   * Construções do Windows e instaladores do macOS em python.org agora
     usam OpenSSL 3.0.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/93939

   (2) https://github.com/python/cpython/issues/93207

   (3) https://github.com/python/cpython/issues/89536

   (4) https://github.com/python/cpython/issues/99289

   (5) https://github.com/python/cpython/issues/90656

   (6) https://github.com/python/cpython/issues/89886


File: python.info,  Node: Alterações na API C<4>,  Prev: Mudanças na construção<2>,  Up: O que há de novo no Python 3 12

1.2.14 Alterações na API C
--------------------------

* Menu:

* Novas funcionalidades: Novas funcionalidades<4>.
* Portando para Python 3.12: Portando para Python 3 12<2>.
* Descontinuados: Descontinuados<2>.
* Removidos: Removidos<2>.


File: python.info,  Node: Novas funcionalidades<4>,  Next: Portando para Python 3 12<2>,  Up: Alterações na API C<4>

1.2.14.1 Novas funcionalidades
..............................

   * PEP 697(1): Introduz o *note tier de API C Instável: 547, destinada
     a ferramentas de baixo nível como depuradores e compiladores JIT.
     Esta API pode mudar em cada versão secundária do CPython sem avisos
     de descontinuação.  Seu conteúdo é marcado pelo prefixo
     ‘PyUnstable_’ nos nomes.

     Construtores de objeto código:

        - ‘PyUnstable_Code_New()’ (renomeado de ‘PyCode_New’)

        - ‘PyUnstable_Code_NewWithPosOnlyArgs()’ (renomeado de
          ‘PyCode_NewWithPosOnlyArgs’)

     Armazenamento extra para objetos código ( PEP 523(2)):

        - ‘PyUnstable_Eval_RequestCodeExtraIndex()’ (renomeado de
          ‘_PyEval_RequestCodeExtraIndex’)

        - ‘PyUnstable_Code_GetExtra()’ (renomeado de ‘_PyCode_GetExtra’)

        - ‘PyUnstable_Code_SetExtra()’ (renomeado de ‘_PyCode_SetExtra’)

     Os nomes originais continuarão disponíveis até que a respectiva API
     seja alterada.

     (Contribuição de Petr Viktorin em gh-101101(3).)

   * PEP 697(4): Adiciona uma API para estender tipos cujo layout de
     memória de instância é opaco:

        - *note PyType_Spec.basicsize: 548. pode ser zero ou negativo
          para especificar a herança ou extensão do tamanho da classe
          base.

        - *note PyObject_GetTypeData(): 549. e *note
          PyType_GetTypeDataSize(): 54a. adicionadas para permitir
          acesso a dados de instância específicos da subclasse.

        - *note Py_TPFLAGS_ITEMS_AT_END: 54b. e *note
          PyObject_GetItemData(): 54c. adicionadas para permitir a
          extensão segura de certos tipos de tamanho variável, incluindo
          *note PyType_Type: 54d.

        - *note Py_RELATIVE_OFFSET: 54e. adicionada para permitir a
          definição de *note membros: 54f. em termos de uma estrutura
          específica da subclasse.

     (Contribuição de Petr Viktorin em gh-103509(5).)

   * Adiciona à *note API C limitada: 396. a nova função *note
     PyType_FromMetaclass(): 550, que generaliza a *note
     PyType_FromModuleAndSpec(): 551. existente usando um argumento de
     metaclasse adicional.  (Contribuição de Wenzel Jakob em
     gh-93012(6).)

   * API para criação de objetos que podem ser chamados usando *note o
     protocolo vectorcall: 552. foi adicionada à *note API Limitada:
     553.:

        * *note Py_TPFLAGS_HAVE_VECTORCALL: 554.

        * *note PyVectorcall_NARGS(): 555.

        * *note PyVectorcall_Call(): 556.

        * *note vectorcallfunc: 557.

     O sinalizador *note Py_TPFLAGS_HAVE_VECTORCALL: 554. agora é
     removido de uma classe quando o método *note __call__(): 558. da
     classe é reatribuído.  Isso torna vectorcall seguro para uso com
     tipos mutáveis (ou seja, tipos de heap sem o sinalizador imutável,
     *note Py_TPFLAGS_IMMUTABLETYPE: 3c2.).  Tipos mutáveis que não
     substituem *note tp_call: 559. agora herdam o sinalizador
     ‘Py_TPFLAGS_HAVE_VECTORCALL’.  (Contribuição de Petr Viktorin em
     gh-93274(7).)

     Os sinalizadores *note Py_TPFLAGS_MANAGED_DICT: 36b. e *note
     Py_TPFLAGS_MANAGED_WEAKREF: 55a. foram adicionados.  Isso permite
     que as classes de extensões ofereçam suporte a objetos *note
     __dict__: 55b. e weakrefs com menos trabalho, usando menos memória
     e com acesso mais rápido.

   * API para realizar chamadas usando *note o protocolo vectorcall:
     552. foi adicionada à *note API Limitada: 553.:

        * *note PyObject_Vectorcall(): 55c.

        * *note PyObject_VectorcallMethod(): 55d.

        * *note PY_VECTORCALL_ARGUMENTS_OFFSET: 55e.

     Isto significa que ambas as extremidades de entrada e saída do
     protocolo de chamada vetorial estão agora disponíveis na *note API
     Limitada: 553.  (Contribuição de Wenzel Jakob em gh-98586(8).)

   * Adiciona duas novas funções públicas, *note
     PyEval_SetProfileAllThreads(): 55f. e *note
     PyEval_SetTraceAllThreads(): 422, que permitem definir funções de
     rastreamento e perfilação em todos os threads em execução, além do
     de chamada.  (Contribuição de Pablo Galindo em gh-93503(9).)

   * Adiciona a nova função *note PyFunction_SetVectorcall(): 560. à API
     C que define o campo vectorcall de um determinado *note
     PyFunctionObject: 561.  (Contribuição de Andrew Frost em
     gh-92257(10).)

   * A API C agora permite registrar funções de retorno de chamada via
     *note PyDict_AddWatcher(): 562, *note PyDict_Watch(): 563. e APIs
     relacionadas a serem chamadas sempre que um dicionário é
     modificado.  Destina-se a ser usado para otimizar interpretadores,
     compiladores JIT ou depuradores.  (Contribuição de Carl Meyer em
     gh-91052(11).)

   * Adiciona a API *note PyType_AddWatcher(): 564. e *note
     PyType_Watch(): 565. para registrar retornos de chamada para
     receber notificações sobre alterações em um tipo.  (Contribuição de
     Carl Meyer em gh-91051(12).)

   * Adiciona APIs *note PyCode_AddWatcher(): 566. e *note
     PyCode_ClearWatcher(): 567. para registrar retornos de chamada para
     receber notificação sobre criação e destruição de objetos de
     código.  (Contribuição de Itamar Oren em gh-91054(13).)

   * Adiciona as funções *note PyFrame_GetVar(): 568. e *note
     PyFrame_GetVarString(): 569. para obter uma variável de quadro por
     seu nome.  (Contribuição de Victor Stinner em gh-91248(14).)

   * Adiciona *note PyErr_GetRaisedException(): 3f4. e *note
     PyErr_SetRaisedException(): 3f7. para salvar e restaurar a exceção
     atual.  Essas funções retornam e aceitam um único objeto de
     exceção, em vez dos argumentos triplos dos agora obsoletos *note
     PyErr_Fetch(): 3f3. e *note PyErr_Restore(): 3f6.  Isso é menos
     sujeito a erros e um pouco mais eficiente.  (Contribuição de Mark
     Shannon em gh-101578(15).)

   * Adiciona ‘_PyErr_ChainExceptions1’, que usa uma instância de
     exceção, para substituir a API legada ‘_PyErr_ChainExceptions’, que
     agora foi descontinuada.  (Contribuição de Mark Shannon em
     gh-101578(16).)

   * Adiciona *note PyException_GetArgs(): 56a. e *note
     PyException_SetArgs(): 56b. como funções de conveniência para
     recuperar e modificar o *note args: 56c. passado para o construtor
     da exceção.  (Contribuição de Mark Shannon em gh-101578(17).)

   * Adiciona *note PyErr_DisplayException(): 402, que usa uma instância
     de exceção, para substituir a API legada ‘PyErr_Display()’.
     (Contribuição de Irit Katriel em gh-102755(18)).

   * PEP 683(19): Introduz 'Objetos Imortais', que permite que objetos
     ignorem contagens de referências e alterações relacionadas à API C:

        - 
          ‘_Py_IMMORTAL_REFCNT’: A contagem de referências que define um objeto

               como imortal.

        - ‘_Py_IsImmortal’ Verifica se um objeto possui a contagem de
          referências imortal.

        - 
          ‘PyObject_HEAD_INIT’ Isso agora inicializará a contagem de referências para

               ‘_Py_IMMORTAL_REFCNT’ quando usado com ‘Py_BUILD_CORE’.

        - 
          ‘SSTATE_INTERNED_IMMORTAL’ Um identificador para objetos unicode internalizados

               que são imortais.

        - 
          ‘SSTATE_INTERNED_IMMORTAL_STATIC’ Um identificador para unicode internalizado

               objetos que são imortais e estáticos

        - 
          ‘sys.getunicodeinternedsize’ Isso retorna o número total de unicode

               objetos que foram internalizados.  Isso agora é
               necessário para ‘refleak.py’ rastrear corretamente
               contagens de referências e blocos alocados

     (Contribuição de Eddie Elizondo em gh-84436(20).)

   * PEP 684(21): Adiciona a nova função *note
     Py_NewInterpreterFromConfig(): 45c. e *note PyInterpreterConfig:
     56d, que podem ser usadas para criar subinterpretadores com suas
     próprias GILs.  (Veja *note PEP 684; Uma GIL por interpretador:
     43c. para mais informações.)  (Contribuição de Eric Snow em
     gh-104110(22).)

   * Na API C limitada versão 3.12, as funções *note Py_INCREF(): 56e. e
     *note Py_DECREF(): 56f. agora são implementadas como chamadas de
     função opacas para ocultar detalhes de implementação.
     (Contribuição de Victor Stinner em gh-105387(23).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0697/

   (2) https://peps.python.org/pep-0523/

   (3) https://github.com/python/cpython/issues/101101

   (4) https://peps.python.org/pep-0697/

   (5) https://github.com/python/cpython/issues/103509

   (6) https://github.com/python/cpython/issues/93012

   (7) https://github.com/python/cpython/issues/93274

   (8) https://github.com/python/cpython/issues/98586

   (9) https://github.com/python/cpython/issues/93503

   (10) https://github.com/python/cpython/issues/92257

   (11) https://github.com/python/cpython/issues/91052

   (12) https://github.com/python/cpython/issues/91051

   (13) https://github.com/python/cpython/issues/91054

   (14) https://github.com/python/cpython/issues/91248

   (15) https://github.com/python/cpython/issues/101578

   (16) https://github.com/python/cpython/issues/101578

   (17) https://github.com/python/cpython/issues/101578

   (18) https://github.com/python/cpython/issues/102755

   (19) https://peps.python.org/pep-0683/

   (20) https://github.com/python/cpython/issues/84436

   (21) https://peps.python.org/pep-0684/

   (22) https://github.com/python/cpython/issues/104110

   (23) https://github.com/python/cpython/issues/105387


File: python.info,  Node: Portando para Python 3 12<2>,  Next: Descontinuados<2>,  Prev: Novas funcionalidades<4>,  Up: Alterações na API C<4>

1.2.14.2 Portando para Python 3.12
..................................

   * APIs Unicode legadas baseadas na representação de ‘Py_UNICODE*’
     foram removidas.  Migre para APIs baseadas em UTF-8 ou ‘wchar_t*’.

   * Funções de análise de argumentos como *note PyArg_ParseTuple():
     571. não mais oferecem suporte a formato baseado em ‘Py_UNICODE*’
     (por exemplo, ‘u’, ‘Z’).  Migre para outros formatos para Unicode
     como ‘s’, ‘z’, ‘es’ e ‘U’.

   * ‘tp_weaklist’ para todos os tipos embutidos estáticos é sempre
     ‘NULL’.  Este é um campo somente interno em ‘PyTypeObject’, mas
     estamos apontando a mudança caso alguém acesse o campo diretamente
     de qualquer maneira.  Para evitar quebras, considere usar a API C
     pública existente ou, se necessário, a macro
     ‘_PyObject_GET_WEAKREFS_LISTPTR()’ (somente interna).

   * Este *note PyTypeObject.tp_subclasses: 572. somente interno pode
     agora não ser um ponteiro de objeto válido.  Seu tipo foi alterado
     para void* para refletir isso.  Mencionamos isso caso alguém esteja
     acessando diretamente o campo somente interno.

     Para obter uma lista de subclasses, chame o método Python *note
     __subclasses__(): 573. (usando *note PyObject_CallMethod(): 39f,
     por exemplo).

   * Adicionado suporte para mais opções de formatação (alinhamento à
     esquerda, octais, hexadecimais maiúsculos, ‘intmax_t’, ‘ptrdiff_t’,
     ‘wchar_t’ strings C, largura variável e precisão) em *note
     PyUnicode_FromFormat(): 38a. e *note PyUnicode_FromFormatV(): 574.
     (Contribuição de Serhiy Storchaka em gh-98836(1).)

   * Um caractere de formato não reconhecido em *note
     PyUnicode_FromFormat(): 38a. e *note PyUnicode_FromFormatV(): 574.
     agora define um *note SystemError: 575.  Nas versões anteriores,
     fazia com que todo o restante da string de formato fosse copiado
     como estava para a string de resultado e quaisquer argumentos
     extras descartados.  (Contribuição de Serhiy Storchaka em
     gh-95781(2).)

   * Corrige o posicionamento incorreto do sinal em *note
     PyUnicode_FromFormat(): 38a. e *note PyUnicode_FromFormatV(): 574.
     (Contribuição de Philip Georgi em gh-95504(3).)

   * Classes de extensão que desejam adicionar um *note __dict__: 55b.
     ou slot de referência fraca devem usar *note
     Py_TPFLAGS_MANAGED_DICT: 36b. e *note Py_TPFLAGS_MANAGED_WEAKREF:
     55a. em vez de ‘tp_dictoffset’ e ‘tp_weaklistoffset’,
     respectivamente.  O uso de ‘tp_dictoffset’ e ‘tp_weaklistoffset’
     ainda é aceitado, mas não oferece suporte totalmente a herança
     múltipla (gh-95589(4)), e o desempenho pode ser pior.  Classes que
     declaram *note Py_TPFLAGS_MANAGED_DICT: 36b. devem chamar
     ‘_PyObject_VisitManagedDict()’ e ‘_PyObject_ClearManagedDict()’
     para percorrer e limpar os dicionários de sua instância.  Para
     limpar weakrefs (referências fracas), chame *note
     PyObject_ClearWeakRefs(): 576, como antes.

   * A função *note PyUnicode_FSDecoder(): 577. não aceita mais caminhos
     bytes ou similar, como os tipos *note bytearray: 2ea. e *note
     memoryview: 2eb.: apenas o tipo exato *note bytes: 1c2. é aceito
     para strings de bytes.  (Contribuição de Victor Stinner em
     gh-98393(5).)

   * As macros *note Py_CLEAR: 578, *note Py_SETREF: 579. e *note
     Py_XSETREF: 57a. agora avaliam seus argumentos apenas uma vez.  Se
     um argumento tiver efeitos colaterais, esses efeitos colaterais não
     serão mais duplicados.  (Contribuição de Victor Stinner em
     gh-98724(6).)

   * O indicador de erro do interpretador agora está sempre normalizado.
     Isso significa que *note PyErr_SetObject(): 57b, *note
     PyErr_SetString(): 57c. e as outras funções que definem o indicador
     de erro agora normalizam a exceção antes de armazená-la.
     (Contribuição de Mark Shannon em gh-101578(7).)

   * ‘_Py_RefTotal’ não é mais oficial e é mantido apenas para
     compatibilidade com ABI. Observe que é um global interno e está
     disponível apenas em compilações de depuração.  Se acontecer de
     você usá-lo, você precisará começar a usar
     ‘_Py_GetGlobalRefTotal()’.

   * As seguintes funções agora selecionam uma metaclasse apropriada
     para o tipo recém-criado:

        * *note PyType_FromSpec(): 57d.

        * *note PyType_FromSpecWithBases(): 57e.

        * *note PyType_FromModuleAndSpec(): 551.

     A criação de classes cujas substituições de metaclasse *note
     tp_new: 57f. foi descontinuada e no Python 3.14+ não será
     permitida.  Observe que essas funções ignoram ‘tp_new’ da
     metaclasse, possivelmente permitindo uma inicialização incompleta.

     Observe que *note PyType_FromMetaclass(): 550. (adicionada em
     Python 3.12) já não permite a criação de classes cuja metaclasse
     substitui ‘tp_new’ (*note __new__(): 580. em Python).

     Como ‘tp_new’ substitui quase tudo que as funções ‘PyType_From*’
     fazem, os dois são incompatíveis entre si.  O comportamento
     existente – ignorar a metaclasse em vários passos de criação do
     tipo – é inseguro em geral, uma vez que as (meta)classes presumem
     que ‘tp_new’ foi chamado.  Não existe uma solução geral simples.
     Um dos seguintes pode funcionar para você:

        - Se você controla a metaclasse, evite usar ‘tp_new’ nela:

             - Se a inicialização puder ser ignorada, isso pode ser
               feito em *note tp_init: 581.

             - Se a metaclasse não precisa ser instanciada do Python,
               defina seu ‘tp_new’ como ‘NULL’ usando o sinalizador
               *note Py_TPFLAGS_DISALLOW_INSTANTIATION: 582.  Isso o
               torna aceitável para funções ‘PyType_From*’.

        - Evite funções ‘PyType_From*’: se você não precisa de recursos
          específicos do C (slots ou configuração do tamanho da
          instância), crie tipos *note chamando: 583. a metaclasse.

        - Se você 'sabe' que ‘tp_new’ pode ser ignorado com segurança,
          filtre o aviso de descontinuação usando *note
          warnings.catch_warnings(): 584. do Python.

   * *note PyOS_InputHook: 585. e *note PyOS_ReadlineFunctionPointer:
     586. não são mais chamados em *note subinterpretadores: 587.  Isso
     ocorre porque os clientes geralmente dependem do estado global de
     todo o processo (uma vez que esses retornos de chamada não têm como
     recuperar o estado do módulo de extensão).

     Isso também evita situações em que as extensões podem ser
     executadas em um subinterpretador que não oferecem suporte (ou no
     qual ainda não foram carregadas).  Veja gh-104668(8) para mais
     informações.

   * *note PyLongObject: 588. teve seus componentes internos alterados
     para melhor desempenho.  Embora os internos de *note PyLongObject:
     588. sejam privados, eles são usados por alguns módulos de
     extensão.  Os campos internos não devem mais ser acessados
     diretamente, em vez disso, as funções da API que começam com
     ‘PyLong_...’ devem ser usadas.  Duas novas funções de API
     'instáveis' são fornecidas para acesso eficiente ao valor de *note
     PyLongObject: 588.s que cabe em uma única palavra de máquina:

        * *note PyUnstable_Long_IsCompact(): 589.

        * *note PyUnstable_Long_CompactValue(): 58a.

   * Alocadores personalizados, definidos via *note
     PyMem_SetAllocator(): 58b, agora precisam ser seguros para thread,
     independentemente do domínio de memória.  Os alocadores que não
     possuem estado próprio, incluindo “ganchos”, não são afetados.  Se
     o seu alocador personalizado ainda não for seguro para thread e
     você precisar de orientação, crie um novo relatório de problema no
     GitHub e CC ‘@ericsnowcurrently’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98836

   (2) https://github.com/python/cpython/issues/95781

   (3) https://github.com/python/cpython/issues/95504

   (4) https://github.com/python/cpython/issues/95589

   (5) https://github.com/python/cpython/issues/98393

   (6) https://github.com/python/cpython/issues/98724

   (7) https://github.com/python/cpython/issues/101578

   (8) https://github.com/python/cpython/issues/104668


File: python.info,  Node: Descontinuados<2>,  Next: Removidos<2>,  Prev: Portando para Python 3 12<2>,  Up: Alterações na API C<4>

1.2.14.3 Descontinuados
.......................

   * Em conformidade com a PEP 699(1), o campo ‘ma_version_tag’ em *note
     PyDictObject: 3c1. foi descontinuado para módulos de extensão.
     Acessar este campo gerará um aviso do compilador em tempo de
     compilação.  Este campo será removido no Python 3.14.
     (Contribuição de Ramvikrams e Kumar Aditya em gh-101193(2).  PEP de
     Ken Jin.)

   * Variáveis de configuração global descontinuadas:

        * *note Py_DebugFlag: 3c6.: use *note PyConfig.parser_debug:
          3c7.

        * *note Py_VerboseFlag: 3c8.: use *note PyConfig.verbose: 3c9.

        * *note Py_QuietFlag: 3ca.: use *note PyConfig.quiet: 3cb.

        * *note Py_InteractiveFlag: 3cc.: use *note
          PyConfig.interactive: 3cd.

        * *note Py_InspectFlag: 3ce.: use *note PyConfig.inspect: 3cf.

        * *note Py_OptimizeFlag: 3d0.: use *note
          PyConfig.optimization_level: 3d1.

        * *note Py_NoSiteFlag: 3d2.: use *note PyConfig.site_import:
          3d3.

        * *note Py_BytesWarningFlag: 3d4.: use *note
          PyConfig.bytes_warning: 3d5.

        * *note Py_FrozenFlag: 3d6.: use *note
          PyConfig.pathconfig_warnings: 3d7.

        * *note Py_IgnoreEnvironmentFlag: 3d8.: use *note
          PyConfig.use_environment: 3d9.

        * *note Py_DontWriteBytecodeFlag: 3da.: use *note
          PyConfig.write_bytecode: 3db.

        * *note Py_NoUserSiteDirectory: 3dc.: use *note
          PyConfig.user_site_directory: 3dd.

        * *note Py_UnbufferedStdioFlag: 3de.: use *note
          PyConfig.buffered_stdio: 3df.

        * *note Py_HashRandomizationFlag: 3e0.: use *note
          PyConfig.use_hash_seed: 3e1. and *note PyConfig.hash_seed:
          3e2.

        * *note Py_IsolatedFlag: 3e3.: use *note PyConfig.isolated: 3e4.

        * *note Py_LegacyWindowsFSEncodingFlag: 3e5.: use *note
          PyPreConfig.legacy_windows_fs_encoding: 3e6.

        * *note Py_LegacyWindowsStdioFlag: 3e7.: use *note
          PyConfig.legacy_windows_stdio: 3a4.

        * ‘Py_FileSystemDefaultEncoding’: use *note
          PyConfig.filesystem_encoding: 3e8.

        * ‘Py_HasFileSystemDefaultEncoding’: use *note
          PyConfig.filesystem_encoding: 3e8.

        * ‘Py_FileSystemDefaultEncodeErrors’: use *note
          PyConfig.filesystem_errors: 3e9.

        * ‘Py_UTF8Mode’: use *note PyPreConfig.utf8_mode: 3ea. (see
          *note Py_PreInitialize(): 3eb.)

     A API *note Py_InitializeFromConfig(): 3c5. deve ser usada com
     *note PyConfig: 3a6.  (Contribuição de Victor Stinner em
     gh-77782(3).)

   * A criação de *note tipos imutáveis: 3c2. com bases mutáveis foi
     descontinuada e será desativada no Python 3.14.  (gh-95388(4))

   * O cabeçalho ‘structmember.h’ foi descontinuado, embora continue
     disponível e não haja planos para removê-lo.

     Seu conteúdo agora está disponível apenas incluindo ‘Python.h’, com
     um prefixo ‘Py’ adicionado se estiver faltando:

        - *note PyMemberDef: 54f, *note PyMember_GetOne(): 58d. e *note
          PyMember_SetOne(): 58e.

        - Macros de tipo como *note Py_T_INT: 58f, *note Py_T_DOUBLE:
          590, etc.  (anteriormente ‘T_INT’, ‘T_DOUBLE’, etc.)

        - Os sinalizadores *note Py_READONLY: 591. (anteriormente
          ‘READONLY’) e *note Py_AUDIT_READ: 592. (anteriormente todas
          em maiúsculas)

     Vários itens não são expostos em ‘Python.h’:

        - *note T_OBJECT: 593. (use *note Py_T_OBJECT_EX: 594.)

        - *note T_NONE: 595. (anteriormente não documentada e bastante
          estranha)

        - A macro ‘WRITE_RESTRICTED’ que não faz nada.

        - As macros ‘RESTRICTED’ e ‘READ_RESTRICTED’, equivalentes a
          *note Py_AUDIT_READ: 592.

        - Em algumas configurações, ‘<stddef.h>’ não está incluído em
          ‘Python.h’.  Deve ser incluído manualmente ao usar
          ‘offsetof()’.

     O cabeçalho descontinuado continua a fornecer seu conteúdo original
     com os nomes originais.  Seu código antigo pode permanecer
     inalterado, a menos que as macros extras e sem namespace o
     incomodem muito.

     (Contribuição em gh-47146(5) de Petr Viktorin, baseado em trabalhos
     anteriores de Alexander Belopolsky e Matthias Braun.)

   * *note PyErr_Fetch(): 3f3. e *note PyErr_Restore(): 3f6. foram
     descontinuado.  Use *note PyErr_GetRaisedException(): 3f4. e *note
     PyErr_SetRaisedException(): 3f7. em vez disso.  (Contribuição de
     Mark Shannon em gh-101578(6).)

   * ‘PyErr_Display()’ foi descontinuada.  Use *note
     PyErr_DisplayException(): 402. em vez disso.  (Contribuição de Irit
     Katriel em gh-102755(7)).

   * ‘_PyErr_ChainExceptions’ foi descontinuada.  Use
     ‘_PyErr_ChainExceptions1’ em vez disso.  (Contribuição de Irit
     Katriel em gh-102192(8).)

   * Usar *note PyType_FromSpec(): 57d, *note
     PyType_FromSpecWithBases(): 57e. ou *note
     PyType_FromModuleAndSpec(): 551. para criar uma classe cujas
     substituições de metaclasse *note tp_new: 57f. foi descontinuado.
     Chame a metaclasse.

* Menu:

* Remoção pendente no Python 3.14: Remoção pendente no Python 3 14<4>.
* Remoção pendente no Python 3.15: Remoção pendente no Python 3 15<4>.
* Remoção pendente no Python 3.16: Remoção pendente no Python 3 16<4>.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<4>.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0699/

   (2) https://github.com/python/cpython/issues/101193

   (3) https://github.com/python/cpython/issues/77782

   (4) https://github.com/python/cpython/issues/95388

   (5) https://github.com/python/cpython/issues/47146

   (6) https://github.com/python/cpython/issues/101578

   (7) https://github.com/python/cpython/issues/102755

   (8) https://github.com/python/cpython/issues/102192


File: python.info,  Node: Remoção pendente no Python 3 14<4>,  Next: Remoção pendente no Python 3 15<4>,  Up: Descontinuados<2>

1.2.14.4 Remoção pendente no Python 3.14
........................................

   * O campo ‘ma_version_tag’ em *note PyDictObject: 3c1. para módulos
     de extensão ( PEP 699(1); gh-101193(2)).

   * A criação de *note tipos imutáveis: 3c2. com bases mutáveis
     (gh-95388(3)).

   * Funções para configurar a inicialização do Python, descontinuadas
     no Python 3.11:

        * ‘PySys_SetArgvEx()’: defina *note PyConfig.argv: 3c3.

        * ‘PySys_SetArgv()’: defina *note PyConfig.argv: 3c3.

        * ‘Py_SetProgramName()’: defina *note PyConfig.program_name:
          3c4.

        * ‘Py_SetPythonHome()’: defina *note PyConfig.home: 3bb.

     Em vez disso, a API *note Py_InitializeFromConfig(): 3c5. deve ser
     usada com *note PyConfig: 3a6.

   * Variáveis de configuração globais

        * *note Py_DebugFlag: 3c6.: Use *note PyConfig.parser_debug:
          3c7.

        * *note Py_VerboseFlag: 3c8.: Use *note PyConfig.verbose: 3c9.

        * *note Py_QuietFlag: 3ca.: Use *note PyConfig.quiet: 3cb.

        * *note Py_InteractiveFlag: 3cc.: Use *note
          PyConfig.interactive: 3cd.

        * *note Py_InspectFlag: 3ce.: Use *note PyConfig.inspect: 3cf.

        * *note Py_OptimizeFlag: 3d0.: Use *note
          PyConfig.optimization_level: 3d1.

        * *note Py_NoSiteFlag: 3d2.: Use *note PyConfig.site_import:
          3d3.

        * *note Py_BytesWarningFlag: 3d4.: Use *note
          PyConfig.bytes_warning: 3d5.

        * *note Py_FrozenFlag: 3d6.: Use *note
          PyConfig.pathconfig_warnings: 3d7.

        * *note Py_IgnoreEnvironmentFlag: 3d8.: Use *note
          PyConfig.use_environment: 3d9.

        * *note Py_DontWriteBytecodeFlag: 3da.: Use *note
          PyConfig.write_bytecode: 3db.

        * *note Py_NoUserSiteDirectory: 3dc.: Use *note
          PyConfig.user_site_directory: 3dd.

        * *note Py_UnbufferedStdioFlag: 3de.: Use *note
          PyConfig.buffered_stdio: 3df.

        * *note Py_HashRandomizationFlag: 3e0.: Use *note
          PyConfig.use_hash_seed: 3e1. e *note PyConfig.hash_seed: 3e2.

        * *note Py_IsolatedFlag: 3e3.: Use *note PyConfig.isolated: 3e4.

        * *note Py_LegacyWindowsFSEncodingFlag: 3e5.: Use *note
          PyPreConfig.legacy_windows_fs_encoding: 3e6.

        * *note Py_LegacyWindowsStdioFlag: 3e7.: Use *note
          PyConfig.legacy_windows_stdio: 3a4.

        * ‘Py_FileSystemDefaultEncoding’: Use *note
          PyConfig.filesystem_encoding: 3e8.

        * ‘Py_HasFileSystemDefaultEncoding’: Use *note
          PyConfig.filesystem_encoding: 3e8.

        * ‘Py_FileSystemDefaultEncodeErrors’: Use *note
          PyConfig.filesystem_errors: 3e9.

        * ‘Py_UTF8Mode’: Use *note PyPreConfig.utf8_mode: 3ea.  (veja
          *note Py_PreInitialize(): 3eb.)

     Em vez disso, a API *note Py_InitializeFromConfig(): 3c5. deve ser
     usada com *note PyConfig: 3a6.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0699/

   (2) https://github.com/python/cpython/issues/101193

   (3) https://github.com/python/cpython/issues/95388


File: python.info,  Node: Remoção pendente no Python 3 15<4>,  Next: Remoção pendente no Python 3 16<4>,  Prev: Remoção pendente no Python 3 14<4>,  Up: Descontinuados<2>

1.2.14.5 Remoção pendente no Python 3.15
........................................

   * The *note PyImport_ImportModuleNoBlock(): 3bd.: use *note
     PyImport_ImportModule(): 3be.

   * *note PyWeakref_GetObject(): 379. e *note PyWeakref_GET_OBJECT():
     3bf.: Use *note PyWeakref_GetRef(): 378.

   * O tipo *note Py_UNICODE: 3ed. e a macro ‘Py_UNICODE_WIDE’: use
     ‘wchar_t’.

   * Funções de inicialização do Python

        * *note PySys_ResetWarnOptions(): 3af.: apague *note
          sys.warnoptions: 3b0. e ‘warnings.filters’.

        * *note Py_GetExecPrefix(): 3b1.: obtenha *note
          sys.base_exec_prefix: 3ee. e *note sys.exec_prefix: 3b2.

        * *note Py_GetPath(): 3b3.: leia *note sys.path: 3b4.

        * *note Py_GetPrefix(): 3b5.: obtenha *note sys.base_prefix:
          3ef. e *note sys.prefix: 3b6.

        * *note Py_GetProgramFullPath(): 3b7.: leia *note
          sys.executable: 3b8.

        * *note Py_GetProgramName(): 3b9.: leia *note sys.executable:
          3b8.

        * *note Py_GetPythonHome(): 3ba.: leia *note PyConfig.home: 3bb.
          ou a variável de ambiente *note PYTHONHOME: 3bc.


File: python.info,  Node: Remoção pendente no Python 3 16<4>,  Next: Remoção pendente em versões futuras<4>,  Prev: Remoção pendente no Python 3 15<4>,  Up: Descontinuados<2>

1.2.14.6 Remoção pendente no Python 3.16
........................................

   * A cópia empacotada do ‘libmpdec’.


File: python.info,  Node: Remoção pendente em versões futuras<4>,  Prev: Remoção pendente no Python 3 16<4>,  Up: Descontinuados<2>

1.2.14.7 Remoção pendente em versões futuras
............................................

As APIs a seguir foram descontinuadas e serão removidas, embora
atualmente não haja uma data agendada para sua remoção.

   * *note Py_TPFLAGS_HAVE_FINALIZE: 3f2.: desnecessária desde o Python
     3.8.

   * *note PyErr_Fetch(): 3f3.: use *note PyErr_GetRaisedException():
     3f4.

   * *note PyErr_NormalizeException(): 3f5.: use *note
     PyErr_GetRaisedException(): 3f4.

   * *note PyErr_Restore(): 3f6.: use *note PyErr_SetRaisedException():
     3f7.

   * *note PyModule_GetFilename(): 3f8.: use *note
     PyModule_GetFilenameObject(): 3f9.

   * *note PyOS_AfterFork(): 3fa.: use *note PyOS_AfterFork_Child():
     3fb.

   * *note PySlice_GetIndicesEx(): 3fc.: use *note PySlice_Unpack():
     3fd. e *note PySlice_AdjustIndices(): 3fe.

   * ‘PyUnicode_AsDecodedObject()’: use *note PyCodec_Decode(): 3ff.

   * ‘PyUnicode_AsDecodedUnicode()’: Use *note PyCodec_Decode(): 3ff.

   * ‘PyUnicode_AsEncodedObject()’: use *note PyCodec_Encode(): 400.

   * ‘PyUnicode_AsEncodedUnicode()’: Use *note PyCodec_Encode(): 400.

   * *note PyUnicode_READY(): 401.: desnecessário desde o Python 3.12

   * ‘PyErr_Display()’: use *note PyErr_DisplayException(): 402.

   * ‘_PyErr_ChainExceptions()’: use ‘_PyErr_ChainExceptions1()’.

   * O membro ‘PyBytesObject.ob_shash’: chame *note PyObject_Hash():
     403.

   * O membro ‘PyDictObject.ma_version_tag’.

   * API do Thread Local Storage (TLS):

        * *note PyThread_create_key(): 404.: use *note
          PyThread_tss_alloc(): 405.

        * *note PyThread_delete_key(): 406.: use *note
          PyThread_tss_free(): 407.

        * *note PyThread_set_key_value(): 408.: use *note
          PyThread_tss_set(): 409.

        * *note PyThread_get_key_value(): 40a.: use *note
          PyThread_tss_get(): 40b.

        * *note PyThread_delete_key_value(): 40c.: use *note
          PyThread_tss_delete(): 40d.

        * *note PyThread_ReInitTLS(): 40e.: desnecessário desde o Python
          3.7.


File: python.info,  Node: Removidos<2>,  Prev: Descontinuados<2>,  Up: Alterações na API C<4>

1.2.14.8 Removidos
..................

   * Remove o arquivo de cabeçalho ‘token.h’.  Nunca houve nenhuma API C
     de tokenizador público.  O arquivo de cabeçalho ‘token.h’ foi
     projetado apenas para ser usado por internos do Python.
     (Contribuição de Victor Stinner em gh-92651(1).)

   * As APIs Unicode legadas foram removidas.  Veja a PEP 623(2) para
     detalhes.

        * ‘PyUnicode_WCHAR_KIND’

        * ‘PyUnicode_AS_UNICODE()’

        * ‘PyUnicode_AsUnicode()’

        * ‘PyUnicode_AsUnicodeAndSize()’

        * ‘PyUnicode_AS_DATA()’

        * ‘PyUnicode_FromUnicode()’

        * ‘PyUnicode_GET_SIZE()’

        * ‘PyUnicode_GetSize()’

        * ‘PyUnicode_GET_DATA_SIZE()’

   * Remove a macro de função ‘PyUnicode_InternImmortal()’.
     (Contribuição de Victor Stinner em gh-85858(3).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/92651

   (2) https://peps.python.org/pep-0623/

   (3) https://github.com/python/cpython/issues/85858


File: python.info,  Node: O que há de novo no Python 3 11,  Next: O que há de novo no Python 3 10,  Prev: O que há de novo no Python 3 12,  Up: O que há de novo no Python

1.3 O que há de novo no Python 3.11
===================================


Editor: Pablo Galindo Salgado

Este artigo explica os novos recursos no Python 3.11, em comparação com
3.10.  Python 3.11 foi lançado em 24 de outubro de 2022.  Veja *note
changelog: 13c. para uma lista completa de mudanças.

* Menu:

* Resumo – Destaques da versão: Resumo – Destaques da versão<3>.
* Novas funcionalidades: Novas funcionalidades<5>.
* Novos recursos relacionados a dicas de tipo: Novos recursos relacionados a dicas de tipo<2>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<3>.
* Outras mudanças na implementação do CPython::
* Novos módulos: Novos módulos<3>.
* Módulos melhorados: Módulos melhorados<3>.
* Otimizações: Otimizações<3>.
* CPython mais rápido::
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<3>.
* Descontinuados: Descontinuados<3>.
* Pendente remoção no Python 3.12: Pendente remoção no Python 3 12.
* Removidos: Removidos<3>.
* Portando para Python 3.11: Portando para Python 3 11.
* Mudanças na construção: Mudanças na construção<3>.
* Alterações na API C: Alterações na API C<5>.
* Alterações notáveis no 3.11.4: Alterações notáveis no 3 11 4.
* Alterações notáveis no 3.11.5: Alterações notáveis no 3 11 5.


File: python.info,  Node: Resumo – Destaques da versão<3>,  Next: Novas funcionalidades<5>,  Up: O que há de novo no Python 3 11

1.3.1 Resumo – Destaques da versão
----------------------------------

   * O Python 3.11 é entre 10-60% mais rápido que o Python 3.10.  Em
     média, medimos uma aceleração de 1,25x no conjunto de benchmarks
     padrão.  Veja *note CPython mais rápido: 5a0. para detalhes.

Novos recursos de sintaxe:

   * *note PEP 654; Grupos de exceção e except*: 5a1.

Novos recursos embutidos:

   * *note PEP 678; Exceções podem ser enriquecidas com notas: 5a2.

Novos módulos da biblioteca padrão:

   * PEP 680(1): *note tomllib: fc. — Suporte para analisar TOML(2) na
     Biblioteca Padrão

Melhorias no interpretador:

   * *note PEP 657; Localizações de erros refinadas em tracebacks: 5a3.

   * Nova opção de linha de comando *note -P: 5a4. e variável de
     ambiente *note PYTHONSAFEPATH: 5a5. para *note desabilitar
     automaticamente a anteposição automática de caminhos potencialmente
     inseguros: 5a6. para *note sys.path: 3b4.

Novos recursos de tipagem:

   * *note PEP 646; Genéricos variádicos: 5a7.

   * *note PEP 655; Marcando itens TypedDict individuais como
     obrigatórios ou não obrigatórios: 5a8.

   * *note PEP 673; Tipo Self: 5a9.

   * *note PEP 675; Tipo de string literal arbitrário: 5aa.

   * *note PEP 681; Transformações de classe de dados: 5ab.

Descontinuações, remoções e restrições importantes:

   * PEP 594(3): *note Muitos módulos legados de biblioteca padrão foram
     descontinuados: 5ac. e serão removidos no Python 3.13

   * PEP 624(4): *note APIs do codificador Py_UNICODE foram removidas:
     5ad.

   * PEP 670(5): *note Macros convertidos em funções estáticas em linha:
     5ae.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0680/

   (2) https://toml.io/

   (3) https://peps.python.org/pep-0594/

   (4) https://peps.python.org/pep-0624/

   (5) https://peps.python.org/pep-0670/


File: python.info,  Node: Novas funcionalidades<5>,  Next: Novos recursos relacionados a dicas de tipo<2>,  Prev: Resumo – Destaques da versão<3>,  Up: O que há de novo no Python 3 11

1.3.2 Novas funcionalidades
---------------------------

* Menu:

* PEP 657; Localizações de erros refinadas em tracebacks: PEP 657 Localizações de erros refinadas em tracebacks.
* PEP 654; Grupos de exceção e except*: PEP 654 Grupos de exceção e except*.
* PEP 678; Exceções podem ser enriquecidas com notas: PEP 678 Exceções podem ser enriquecidas com notas.
* Melhorias no inicializador py.exe do Windows: Melhorias no inicializador py exe do Windows.


File: python.info,  Node: PEP 657 Localizações de erros refinadas em tracebacks,  Next: PEP 654 Grupos de exceção e except*,  Up: Novas funcionalidades<5>

1.3.2.1 PEP 657: Localizações de erros refinadas em tracebacks
..............................................................

Ao imprimir tracebacks (situação da pilha de execução), o interpretador
agora apontará para a expressão exata que causou o erro, em vez de
apenas a linha.  Por exemplo:

     Traceback (most recent call last):
       File "distância.py", line 11, in <module>
         print(distância_de_manhattan(p1, p2))
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
       File "distância.py", line 6, in distância_de_manhattan
         return abs(ponto_1.x - ponto_2.x) + abs(ponto_1.y - ponto_2.y)
                                ^^^^^^^^^
     AttributeError: 'NoneType' object has no attribute 'x'

Versões anteriores do interpretador apontavam apenas para a linha,
tornando ambíguo qual objeto era ‘None’.  Esses erros aprimorados também
podem ser úteis ao lidar com objetos *note dict: 256. profundamente
aninhados e várias chamadas de função:

     Traceback (most recent call last):
       File "consultar.py", line 37, in <module>
         mágica_aritmética('foo')
       File "consultar.py", line 18, in mágica_aritmética
         return adicionar_contagens(x) / 25
                ^^^^^^^^^^^^^
       File "consultar.py", line 24, in adicionar_contagens
         return 25 + consultar_usuário(usuário1) + consultar_usuário(usuário2)
                     ^^^^^^^^^^^^^^^^^
       File "consultar.consultar", line 32, in consultar_usuário
         return 1 + consultar_contagem(db, resposta['a']['b']['c']['user'], tentar_novamente=True)
                                           ~~~~~~~~~~~~~~~~~~^^^^^
     TypeError: 'NoneType' object is not subscriptable

Bem como expressões aritméticas complexas:

     Traceback (most recent call last):
       File "cálculo.py", line 54, in <module>
         resultado = (x / y / z) * (a / b / c)
                      ~~~~~~^~~
     ZeroDivisionError: division by zero

Além disso, as informações usadas pela funcionalidade de traceback
aprimorado são disponibilizadas por meio de uma API geral, que pode ser
usada para correlacionar *note instruções: 5b2. *note bytecode: 187. com
a localização do código-fonte.  Essas informações podem ser recuperadas
usando:

   - O método *note codeobject.co_positions(): 5b3. no Python.

   - A função *note PyCode_Addr2Location(): 5b4. na API C.

Veja PEP 657(1) para mais detalhes.  (Contribuição de Pablo Galindo,
Batuhan Taskaya e Ammar Askar em bpo-43950(2).)

     Nota: Esse recurso requer o armazenamento de posições de coluna em
     *note Objetos código: 5b5, o que pode resultar em um pequeno
     aumento no uso de memória do interpretador e no uso de disco para
     arquivos Python compilados.  Para evitar armazenar as informações
     extras e desativar a exibição das informações extras de
     rastreamento, use a opção de linha de comando *note -X
     no_debug_ranges: 176. ou a variável de ambiente *note
     PYTHONNODEBUGRANGES: 5b6.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0657/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43950


File: python.info,  Node: PEP 654 Grupos de exceção e except*,  Next: PEP 678 Exceções podem ser enriquecidas com notas,  Prev: PEP 657 Localizações de erros refinadas em tracebacks,  Up: Novas funcionalidades<5>

1.3.2.2 PEP 654: Grupos de exceção e ‘except*’
..............................................

PEP 654(1) introduz recursos de linguagem que permitem que um programa
levante e manipule várias exceções não relacionadas simultaneamente.  Os
tipos internos *note ExceptionGroup: 1b6. e *note BaseExceptionGroup:
25f. tornam possível agrupar exceções e criá-las juntas, e a nova
sintaxe *note except*: 5b8. generaliza *note except: 18b. para
corresponder a subgrupos de grupos de exceção.

Veja PEP 654(2) para mais detalhes.

(Contribuição de Irit Katriel em bpo-45292(3).  PEP escrita por Irit
Katriel, Yury Selivanov e Guido van Rossum.)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0654/

   (2) https://peps.python.org/pep-0654/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45292


File: python.info,  Node: PEP 678 Exceções podem ser enriquecidas com notas,  Next: Melhorias no inicializador py exe do Windows,  Prev: PEP 654 Grupos de exceção e except*,  Up: Novas funcionalidades<5>

1.3.2.3 PEP 678: Exceções podem ser enriquecidas com notas
..........................................................

O método *note add_note(): 5ba. é adicionado a *note BaseException: 5bb.
Ele pode ser usado para enriquecer exceções com informações de contexto
que não estão disponíveis no momento em que a exceção é gerada.  As
notas adicionadas aparecem no traceback padrão.

Veja PEP 678(1) para mais detalhes.

(Contribuição de Irit Katriel em bpo-45607(2).  PEP escrita por Zac
Hatfield-Dodds.)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0678/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45607


File: python.info,  Node: Melhorias no inicializador py exe do Windows,  Prev: PEP 678 Exceções podem ser enriquecidas com notas,  Up: Novas funcionalidades<5>

1.3.2.4 Melhorias no inicializador ‘py.exe’ do Windows
......................................................

A cópia do *note Inicializador Python para Windows: 5be. incluída no
Python 3.11 foi significativamente atualizada.  Ele agora oferece
suporte à sintaxe de company/tag conforme definido em PEP 514(1) usando
o argumento ‘-V:<COMPANY>/<TAG>’ em vez do limitado ‘-<MAJOR>.<MINOR>’.
Isso permite iniciar outras distribuições além de ‘PythonCore’, aquela
hospedada em python.org(2).

Ao usar seletores ‘-V:’, tanto company quanto tag podem ser omitidos,
mas todas as instalações serão pesquisadas.  Por exemplo,
‘-V:OtherPython/’ selecionará a “melhor” tag registrada para
‘OtherPython’, enquanto ‘-V:3.11’ ou ‘-V:/3.11’ selecionará o “best” com
a tag ‘3.11’.

Ao usar os argumentos legados ‘-<MAJOR>’, ‘-<MAJOR>.<MINOR>’,
‘-<MAJOR>-<BITNESS>’ ou ‘-<MAJOR>.<MINOR>-<BITNESS>’, todo o
comportamento existente deve ser preservado de versões anteriores e
somente lançamentos de ‘PythonCore’ será selecionado.  No entanto, o
sufixo ‘-64’ agora implica “não 32 bits” (não necessariamente x86-64),
pois existem várias plataformas de 64 bits suportadas.  Tempos de
execução de 32 bits são detectados verificando a tag do tempo de
execução para um sufixo ‘-32’.  Todas as versões do Python desde 3.5
incluíram isso em suas compilações de 32 bits.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0514/

   (2) https://www.python.org


File: python.info,  Node: Novos recursos relacionados a dicas de tipo<2>,  Next: Outras mudanças na linguagem<3>,  Prev: Novas funcionalidades<5>,  Up: O que há de novo no Python 3 11

1.3.3 Novos recursos relacionados a dicas de tipo
-------------------------------------------------

Esta seção cobre as principais mudanças que afetam as dicas de tipo da
PEP 484(1) e o módulo *note typing: 104.

* Menu:

* PEP 646; Genéricos variádicos: PEP 646 Genéricos variádicos.
* PEP 655; Marcando itens TypedDict individuais como obrigatórios ou não obrigatórios: PEP 655 Marcando itens TypedDict individuais como obrigatórios ou não obrigatórios.
* PEP 673; Tipo Self: PEP 673 Tipo Self.
* PEP 675; Tipo de string literal arbitrário: PEP 675 Tipo de string literal arbitrário.
* PEP 681; Transformações de classe de dados: PEP 681 Transformações de classe de dados.
* PEP 563 pode não ser o futuro::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/


File: python.info,  Node: PEP 646 Genéricos variádicos,  Next: PEP 655 Marcando itens TypedDict individuais como obrigatórios ou não obrigatórios,  Up: Novos recursos relacionados a dicas de tipo<2>

1.3.3.1 PEP 646: Genéricos variádicos
.....................................

PEP 484(1) introduzido anteriormente *note TypeVar: 15d, permitindo a
criação de genéricos parametrizados com um único tipo.  PEP 646(2)
adiciona *note TypeVarTuple: 15f, permitindo a parametrização com um
número 'arbitrário' de tipos.  Em outras palavras, uma *note
TypeVarTuple: 15f. é uma variável do tipo 'variádico', habilitando
genéricos 'variádicos'.

Isso permite uma ampla variedade de casos de uso.  Em particular, ele
permite que o tipo de estruturas do tipo array em bibliotecas de
computação numérica, como NumPy e TensorFlow, sejam parametrizadas com o
array 'shape'.  Os verificadores de tipo estáticos agora poderão
capturar bugs relacionados a formas no código que usa essas bibliotecas.

Veja PEP 646(3) para mais detalhes.

(Contribuição de Matthew Rahtz em bpo-43224(4), com contribuições de
Serhiy Storchaka e Jelle Zijlstra.  PEP escrita por Mark Mendoza,
Matthew Rahtz, Pradeep Kumar Srinivasan e Vincent Siles.)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/

   (2) https://peps.python.org/pep-0646/

   (3) https://peps.python.org/pep-0646/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43224


File: python.info,  Node: PEP 655 Marcando itens TypedDict individuais como obrigatórios ou não obrigatórios,  Next: PEP 673 Tipo Self,  Prev: PEP 646 Genéricos variádicos,  Up: Novos recursos relacionados a dicas de tipo<2>

1.3.3.2 PEP 655: Marcando itens ‘TypedDict’ individuais como obrigatórios ou não obrigatórios
.............................................................................................

*note Required: 5c4. e *note NotRequired: 5c5. fornecem uma maneira
direta de marcar se itens individuais em um *note TypedDict: 162. devem
estar presentes.  Anteriormente, isso só era possível usando herança.

Todos os campos ainda são obrigatórios por padrão, a menos que o
parâmetro 'total' seja definido como ‘False’, caso em que todos os
campos ainda não são obrigatórios por padrão.  Por exemplo, o seguinte
especifica um ‘TypedDict’ com uma chave obrigatória e uma chave não
obrigatória:

     class Filme(TypedDict):
        título: str
        ano: NotRequired[int]

     m1: Filme = {"título": "Pantera Negra", "ano": 2018}  # OK
     m2: Filme = {"título": "Star Wars"}  # OK (ano não é obrigatório)
     m3: Filme = {"ano": 2022}  # ERRO (falta título, um campo obrigatório)

A seguinte definição é equivalente:

     class File(TypedDict, total=False):
        título: Required[str]
        ano: int

Veja PEP 655(1) para mais detalhes.

(Contribuição de David Foster e Jelle Zijlstra em bpo-47087(2).  PEP
escrita por David Foster.)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0655/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=47087


File: python.info,  Node: PEP 673 Tipo Self,  Next: PEP 675 Tipo de string literal arbitrário,  Prev: PEP 655 Marcando itens TypedDict individuais como obrigatórios ou não obrigatórios,  Up: Novos recursos relacionados a dicas de tipo<2>

1.3.3.3 PEP 673: Tipo ‘Self’
............................

A nova anotação *note Self: 5c7. fornece uma maneira simples e intuitiva
de anotar métodos que retornam uma instância de sua classe.  Isso se
comporta da mesma forma que a abordagem baseada em *note TypeVar: 15d.
especificada na PEP 484(1), mas é mais concisa e fácil de seguir.

Casos de uso comuns incluem construtores alternativos fornecidos como
*note classmethod: 166.s e métodos *note __enter__(): 5c8. que retornam
‘self’:

     class MinhaTrava:
         def __enter__(self) -> Self:
             self.trava()
             return self

         ...

     class MeuInt:
         @classmethod
         def de_hex(cls, s: str) -> Self:
             return cls(int(s, 16))

         ...

*note Self: 5c7. também pode ser usado para anotar parâmetros de métodos
ou atributos do mesmo tipo que sua classe de inclusão.

Veja PEP 673(2) para mais detalhes.

(Contribuição de James Hilton-Balfe em bpo-46534(3).  PEP escrita por
Pradeep Kumar Srinivasan e James Hilton-Balfe.)

   ---------- Footnotes ----------

   (1) 
https://peps.python.org/pep-0484/#annotating-instance-and-class-methods

   (2) https://peps.python.org/pep-0673/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46534


File: python.info,  Node: PEP 675 Tipo de string literal arbitrário,  Next: PEP 681 Transformações de classe de dados,  Prev: PEP 673 Tipo Self,  Up: Novos recursos relacionados a dicas de tipo<2>

1.3.3.4 PEP 675: Tipo de string literal arbitrário
..................................................

A nova anotação *note LiteralString: 5ca. pode ser usada para indicar
que um parâmetro de função pode ser de qualquer tipo de string literal.
Isso permite que uma função aceite tipos de string literais arbitrários,
bem como strings criadas a partir de outras strings literais.  Os
verificadores de tipo podem então impor que funções confidenciais, como
aquelas que executam instruções SQL ou comandos de console, sejam
chamadas apenas com argumentos estáticos, fornecendo proteção contra
ataques de injeção.

Por exemplo, uma função de consulta SQL pode ser anotada da seguinte
forma:

     def faz_consulta(sql: LiteralString) -> ...
         ...

     def chamador(
         string_arbitrária: str,
         string_consulta: LiteralString,
         nome_tabela: LiteralString,
     ) -> None:
         faz_consulta("SELECT * FROM students")       # ok
         faz_consulta(string_consulta)                # ok
         faz_consulta("SELECT * FROM " + nome_tabela) # ok
         faz_consulta(string_arbitrária)              # erro no verificador de tipo
         faz_consulta(                                # erro no verificador de tipo
             f"SELECT * FROM students WHERE name = {string_arbitrária}"
         )

Veja PEP 675(1) para mais detalhes.

(Contribuição de Jelle Zijlstra em bpo-47088(2).  PEP escrita por
Pradeep Kumar Srinivasan e Graham Bleaney.)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0675/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=47088


File: python.info,  Node: PEP 681 Transformações de classe de dados,  Next: PEP 563 pode não ser o futuro,  Prev: PEP 675 Tipo de string literal arbitrário,  Up: Novos recursos relacionados a dicas de tipo<2>

1.3.3.5 PEP 681: Transformações de classe de dados
..................................................

*note dataclass_transform: 4d4. pode ser usado para decorar uma classe,
metaclasse ou uma função que é um decorador.  A presença de
‘@dataclass_transform()’ informa a um verificador de tipo estático que o
objeto decorado executa uma “mágica” de tempo de execução que transforma
uma classe, dando a ela comportamentos semelhantes a *note dataclass:
1cb.

Por exemplo:

     # O decorador cria_modelo está definido por uma biblioteca.
     @typing.dataclass_transform()
     def cria_modelo(cls: Type[T]) -> Type[T]:
         cls.__init__ = ...
         cls.__eq__ = ...
         cls.__ne__ = ...
         return cls

     # O decorador cria_modelo agora pode ser usado para criar novas classes de modelo:
     @cria_modelo
     class ModeloCliente:
         id: int
         nome: str

     c = ModeloCliente(id=327, nome="Eric Idle")

Veja PEP 681(1) para mais detalhes.

(Contribuição de Jelle Zijlstra em gh-91860(2).  PEP escrita por Erik De
Bonte e Eric Traut.)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0681/

   (2) https://github.com/python/cpython/issues/91860


File: python.info,  Node: PEP 563 pode não ser o futuro,  Prev: PEP 681 Transformações de classe de dados,  Up: Novos recursos relacionados a dicas de tipo<2>

1.3.3.6 PEP 563 pode não ser o futuro
.....................................

PEP 563(1) Avaliação adiada de anotações (a ‘from __future__ import
annotations’ *note instrução future: 189.) que foi originalmente
planejada para lançamento no Python 3.10 foi colocada em espera
indefinidamente.  Veja esta mensagem do Conselho Diretor(2) para mais
informações.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0563/

   (2) 
https://mail.python.org/archives/list/python-dev@python.org/message/VIZEBX5EYMSYIJNDBF6DMUMZOCWHARSO/


File: python.info,  Node: Outras mudanças na linguagem<3>,  Next: Outras mudanças na implementação do CPython,  Prev: Novos recursos relacionados a dicas de tipo<2>,  Up: O que há de novo no Python 3 11

1.3.4 Outras mudanças na linguagem
----------------------------------

   * Expressões de desempacotamento com asterisco agora podem ser usadas
     em instruções *note for: 2f2.  (Veja bpo-46725(1) para mais
     detalhes.)

   * *note Compreensões: 5d0. assíncronas agora são permitidas dentro de
     compreensões em *note funções assíncronas: 5d1.  As compreensões
     externas tornam-se implicitamente assíncronas neste caso.
     (Contribuição de Serhiy Storchaka em bpo-33346(2).)

   * Uma exceção *note TypeError: 2c3. agora é levantada em vez de uma
     *note AttributeError: 34b. em instruções *note with: 5d2. e *note
     contextlib.ExitStack.enter_context(): 5d3. para objetos que não
     oferecem suporte ao protocolo de *note gerenciador de contexto:
     5d4, e em instruções *note async with: 5d5. e *note
     contextlib.AsyncExitStack.enter_async_context(): 5d6. para objetos
     que não oferecem suporte ao protocolo de *note gerenciador de
     contexto assíncrono: 5d7.  (Contribuição de Serhiy Storchaka em
     bpo-12022(3) e bpo-44471(4).)

   * Adicionado *note object.__getstate__(): 5d8, que fornece a
     implementação padrão do método ‘__getstate__()’.  Fazer *note copy:
     25. e *note pickle: a6. de instâncias de subclasses de tipos
     embutidos *note bytearray: 2ea, *note set: 5d9, *note frozenset:
     5da, *note collections.OrderedDict: 5db, *note collections.deque:
     5dc, *note weakref.WeakSet: 5dd. e *note datetime.tzinfo: 5de.
     agora copia e serializa com pickle atributos de instância
     implementados como *note slots: 5df.  Essa mudança tem um efeito
     colateral não intencional: ela atrapalha uma pequena minoria de
     projetos Python existentes que não esperavam que *note
     object.__getstate__(): 5d8. existisse.  Consulte os comentários
     posteriores em gh-70766(5) para discussões sobre quais soluções
     alternativas esse código pode precisar.  (Contribuição de Serhiy
     Storchaka em bpo-26579(6).)

   * Adicionada uma opção de linha de comando *note -P: 5a4. e uma
     variável de ambiente *note PYTHONSAFEPATH: 5a5, que desativa o
     prefixo automático para *note sys.path: 3b4. do diretório do script
     ao executar um script ou o diretório atual ao usar *note -c: 5e0. e
     *note -m: 5e1.  Isso garante que apenas os módulos stdlib e
     instalados sejam escolhidos por *note import: 5e2, e evita
     sombreamento involuntário ou mal-intencionado de módulos com
     aqueles em um diretório local (e normalmente gravável pelo
     usuário).  (Contribuição de Victor Stinner em gh-57684(7).)

   * Uma opção ‘"z"’ foi adicionada ao *note Minilinguagem de
     especificação de formato: 1e8. que força zero negativo para
     positivo após o arredondamento para a precisão do formato.  Veja
     PEP 682(8) para mais detalhes.  (Contribuição de John Belmonte em
     gh-90153(9).)

   * Bytes não são mais aceitos em *note sys.path: 3b4.  O suporte
     quebrou em algum momento entre o Python 3.2 e o 3.6, sem que
     ninguém percebesse até o lançamento do Python 3.10.0.  Além disso,
     trazer de volta o suporte seria problemático devido às interações
     entre *note -b: 5e3. e *note sys.path_importer_cache: 5e4. quando
     há uma mistura de chaves *note str: 44c. e *note bytes: 1c2.
     (Contribuição de Thomas Grainger em gh-91181(10).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46725

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33346

   (3) https://bugs.python.org/issue?@action=redirect&bpo=12022

   (4) https://bugs.python.org/issue?@action=redirect&bpo=44471

   (5) https://github.com/python/cpython/issues/70766

   (6) https://bugs.python.org/issue?@action=redirect&bpo=26579

   (7) https://github.com/python/cpython/issues/57684

   (8) https://peps.python.org/pep-0682/

   (9) https://github.com/python/cpython/issues/90153

   (10) https://github.com/python/cpython/issues/91181


File: python.info,  Node: Outras mudanças na implementação do CPython,  Next: Novos módulos<3>,  Prev: Outras mudanças na linguagem<3>,  Up: O que há de novo no Python 3 11

1.3.5 Outras mudanças na implementação do CPython
-------------------------------------------------

   * Os métodos especiais *note __complex__(): 5e7. para *note complex:
     2f8. e *note __bytes__(): 5e8. para *note bytes: 1c2. são
     implementados para oferecer suporte aos protocolos *note
     typing.SupportsComplex: 5e9. e *note typing.SupportsBytes: 5ea.
     (Contribuição de Mark Dickinson e Donghee Na em bpo-24234(1).)

   * ‘siphash13’ foi adicionado como um novo algoritmo de hash interno.
     Ele tem propriedades de segurança semelhantes ao ‘siphash24’, mas é
     um pouco mais rápido para entradas longas.  *note str: 44c, *note
     bytes: 1c2. e alguns outros tipos agora o usam como o algoritmo
     padrão para *note hash(): 5eb.  *note Arquivos .pyc baseados em
     hash: 5ec. da PEP 552(2) agora usam ‘siphash13’ também.
     (Contribuição de Inada Naoki em bpo-29410(3).)

   * Quando uma exceção ativa é reativada por uma instrução *note raise:
     5ed. sem parâmetros, o traceback anexado a essa exceção agora é
     sempre ‘sys.exc_info()[1].__traceback__’.  Isso significa que as
     alterações feitas no traceback na cláusula *note except: 18b. atual
     são refletidas na exceção levantada novamente.  (Contribuição de
     Irit Katriel em bpo-45711(4).)

   * A representação do estado do interpretador de exceções tratadas
     (também conhecidas como ‘exc_info’ ou ‘_PyErr_StackItem’) agora tem
     apenas o campo ‘exc_value’; ‘exc_type’ e ‘exc_traceback’ foram
     removidos, pois podem ser derivados de ‘exc_value’.  (Contribuição
     de Irit Katriel em bpo-45711(5).)

   * Uma nova *note opção de linha de comando: 5ee, ‘AppendPath’, foi
     adicionada para o instalador do Windows.  Ela se comporta de
     maneira semelhante ao ‘PrependPath’, mas anexa os diretórios de
     instalação e scripts em vez de antecedê-los.  (Contribuição de
     Bastian Neuburger em bpo-44934(6).)

   * O campo *note PyConfig.module_search_paths_set: 5ef. agora deve ser
     definido como ‘1’ para a inicialização usar *note
     PyConfig.module_search_paths: 3a2. para inicializar *note sys.path:
     3b4.  Caso contrário, a inicialização irá recalcular o caminho e
     substituir quaisquer valores adicionados a ‘module_search_paths’.

   * A saída da opção *note -help: 5f0. agora cabe em 50 linhas/80
     colunas.  Informações sobre as *note variáveis de ambiente do
     Python: 5f1. e a opção *note -X: 176. agora estão disponíveis
     usando os respectivos sinalizadores *note -help-env: 5f2. e *note
     -help-xoptions: 5f3, e com o novo *note -help-all: 5f4.
     (Contribuição de Éric Araujo em bpo-46142(7).)

   * Converter entre *note int: 257. e *note str: 44c. em bases
     diferentes de 2 (binário), 4, 8 (octal), 16 (hexadecimal) ou 32
     como base 10 (decimal) agora levanta uma exceção *note ValueError:
     202. se o número de dígitos em forma de string estiver acima de um
     limite para evitar possíveis ataques de negação de serviço devido à
     complexidade algorítmica.  Esta é uma mitigação para CVE
     2020-10735(8).  Este limite pode ser configurado ou desabilitado
     por variável de ambiente, sinalizador de linha de comando ou APIs
     de *note sys: d9.  Veja a documentação de *note limitação de
     comprimento de conversão de string inteira: 5f5.  O limite padrão é
     de 4300 dígitos em forma de string.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24234

   (2) https://peps.python.org/pep-0552/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=29410

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45711

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45711

   (6) https://bugs.python.org/issue?@action=redirect&bpo=44934

   (7) https://bugs.python.org/issue?@action=redirect&bpo=46142

   (8) https://www.cve.org/CVERecord?id=CVE-2020-10735


File: python.info,  Node: Novos módulos<3>,  Next: Módulos melhorados<3>,  Prev: Outras mudanças na implementação do CPython,  Up: O que há de novo no Python 3 11

1.3.6 Novos módulos
-------------------

   * *note tomllib: fc.: Para analisar TOML(1). Veja PEP 680(2) para
     mais detalhes.  (Contribuição de Taneli Hukkinen em bpo-40059(3).)

   * *note wsgiref.types: 11c.: Tipos específicos de WSGI(4) para
     verificação de tipo estático.  (Contribuição de Sebastian Rittau em
     bpo-42012(5).)

   ---------- Footnotes ----------

   (1) https://toml.io/

   (2) https://peps.python.org/pep-0680/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40059

   (4) https://peps.python.org/pep-3333/

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42012


File: python.info,  Node: Módulos melhorados<3>,  Next: Otimizações<3>,  Prev: Novos módulos<3>,  Up: O que há de novo no Python 3 11

1.3.7 Módulos melhorados
------------------------

* Menu:

* asyncio: asyncio<3>.
* contextlib::
* dataclasses::
* datetime::
* enum: enum<3>.
* fcntl::
* fractions: fractions<3>.
* functools::
* gzip: gzip<2>.
* hashlib: hashlib<2>.
* IDLE e idlelib::
* inspect: inspect<2>.
* locale: locale<3>.
* logging::
* math: math<3>.
* operador::
* os: os<3>.
* pathlib: pathlib<4>.
* re: re<3>.
* shutil: shutil<3>.
* socket::
* sqlite3: sqlite3<4>.
* string::
* sys: sys<4>.
* sysconfig::
* tempfile: tempfile<3>.
* threading: threading<2>.
* time: time<2>.
* tkinter: tkinter<3>.
* traceback: traceback<2>.
* typing: typing<4>.
* unicodedata: unicodedata<3>.
* unittest: unittest<4>.
* venv: venv<2>.
* avisos: avisos<2>.
* zipfile::


File: python.info,  Node: asyncio<3>,  Next: contextlib,  Up: Módulos melhorados<3>

1.3.7.1 asyncio
...............

   * Adicionada a classe *note TaskGroup: 1b5, um *note assíncrono
     gerenciador de contexto: 5fc. contendo um grupo de tarefas que irá
     esperar por todas elas ao sair.  Para código novo, é recomendado
     usar *note create_task(): 1bf. e *note gather(): 5fd. diretamente.
     (Contribuição de Yury Selivanov e outros em gh-90908(1).)

   * Adicionado *note timeout(): 5fe, um gerenciador de contexto
     assíncrono para definir um tempo limite em operações assíncronas.
     Para código novo, é recomendado usar *note wait_for(): 5ff.
     diretamente.  (Contribuição de Andrew Svetlov em gh-90927(2).)

   * Adicionada a classe *note Runner: 600, que expõe o maquinário usado
     por *note run(): 47c.  (Contribuição de Andrew Svetlov em
     gh-91218(3).)

   * Adicionada a classe *note Barrier: 601. às primitivas de
     sincronização na biblioteca asyncio, e a exceção *note
     BrokenBarrierError: 602. relacionada.  (Contribuição de Yves Duprat
     e Andrew Svetlov em gh-87518(4).)

   * Adicionado o argumento nomeado 'all_errors' para *note
     asyncio.loop.create_connection(): 603. para que vários erros de
     conexão possam ser levantados como *note ExceptionGroup: 1b6.

   * Adicionado o método *note asyncio.StreamWriter.start_tls(): 604.
     para atualizar conexões baseadas em fluxo existentes para TLS.
     (Contribuição de Ian Good em bpo-34975(5).)

   * Adicionadas funções de soquete de datagrama 'raw' ao laço de
     eventos: *note sock_sendto(): 605, *note sock_recvfrom(): 606. e
     *note sock_recvfrom_into(): 607.  Eles têm implementações em *note
     SelectorEventLoop: 608. e *note ProactorEventLoop: 609.
     (Contribuição de Alex Grönholm em bpo-46805(6).)

   * Adicionados os métodos *note cancelling(): 1ba. e *note uncancel():
     1bb. a *note Task: 1be.  Estes são destinados principalmente para
     uso interno, notadamente por *note TaskGroup: 1b5.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/90908

   (2) https://github.com/python/cpython/issues/90927

   (3) https://github.com/python/cpython/issues/91218

   (4) https://github.com/python/cpython/issues/87518

   (5) https://bugs.python.org/issue?@action=redirect&bpo=34975

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46805


File: python.info,  Node: contextlib,  Next: dataclasses,  Prev: asyncio<3>,  Up: Módulos melhorados<3>

1.3.7.2 contextlib
..................

   * Adicionado gerenciador de contexto não paralelo seguro *note
     chdir(): 60c. para alterar o diretório de trabalho atual e depois
     restaurá-lo na saída.  Wrapper simples em torno de *note chdir():
     60d.  (Contribuição de Filipe Laíns em bpo-25625(1))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25625


File: python.info,  Node: dataclasses,  Next: datetime,  Prev: contextlib,  Up: Módulos melhorados<3>

1.3.7.3 dataclasses
...................

   * Alterar a verificação de mutabilidade padrão do campo, permitindo
     apenas padrões que são *note hasheáveis: 610. em vez de qualquer
     objeto que não seja uma instância de *note dict: 256, *note list:
     611. ou *note set: 5d9.  (Contribuição de Eric V. Smith em
     bpo-44674(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44674


File: python.info,  Node: datetime,  Next: enum<3>,  Prev: dataclasses,  Up: Módulos melhorados<3>

1.3.7.4 datetime
................

   * Adicione *note datetime.UTC: 4ee, um apelido de conveniência para
     *note datetime.timezone.utc: 614.  (Contribuição de Kabir Kwatra em
     gh-91973(1).)

   * *note datetime.date.fromisoformat(): 615, *note
     datetime.time.fromisoformat(): 616. e *note
     datetime.datetime.fromisoformat(): 617. agora podem ser usados para
     analisar a maioria dos formatos ISO 8601 (exceto aqueles que têm
     suporte a horas fracionárias e minutos).  (Contribuição de Paul
     Ganssle em gh-80010(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/91973

   (2) https://github.com/python/cpython/issues/80010


File: python.info,  Node: enum<3>,  Next: fcntl,  Prev: datetime,  Up: Módulos melhorados<3>

1.3.7.5 enum
............

   * Renomeado ‘EnumMeta’ para *note EnumType: 1e5. (‘EnumMeta’ mantido
     como um apelido).

   * Adicionada *note StrEnum: 61a, com membros que podem ser usados
     como (e devem ser) strings.

   * Adicionada *note ReprEnum: 61b, que apenas modifica o *note
     __repr__(): 61c. dos membros enquanto retorna seus valores literais
     (ao invés de nomes) para *note __str__(): 61d. e *note
     __format__(): 61e. (usado por *note str(): 44c, *note format():
     61f. e *note f-string: 436.s).

   * Alterado *note Enum.__format__(): 620. (o padrão para *note
     format(): 61f, *note str.format(): 621. e *note f-string: 436.s)
     para sempre produz o mesmo resultado que *note Enum.__str__():
     622.: para enums herdados de *note ReprEnum: 61b. será o valor do
     membro; para todos os outros enums, será o enum e o nome do membro
     (por exemplo, ‘Color.RED’).

   * Adicionado um novo parâmetro de classe 'boundary' para enums *note
     Flag: 623. e *note FlagBoundary: 624. com suas opções, para
     controlar como lidar com valores de sinalizadores fora do
     intervalo.

   * Adicionado o decorador de enum *note verify(): 625. e o enum *note
     EnumCheck: 626. com suas opções, para verificar classes de enum em
     relação a várias restrições específicas.

   * Adicionados os decoradores *note member(): 627. e *note
     nonmember(): 628, para garantir que o objeto decorado seja/não seja
     convertido em um membro enum.

   * Adicionado o decorador *note property(): 629, que funciona como
     *note property(): 194. exceto para enums.  Use isso em vez de *note
     types.DynamicClassAttribute(): 62a.

   * Adicionado o decorador enum *note global_enum(): 62b, que ajusta
     *note __repr__(): 61c. e *note __str__(): 61d. para mostrar valores
     como membros de seu módulo em vez da classe enum.  Por exemplo,
     ‘'re.ASCII'’ para o membro *note ASCII: 62c. de *note re.RegexFlag:
     62d. em vez de ‘'RegexFlag.ASCII'’.

   * Aprimorada *note Flag: 623. para ter suporte a *note len(): 62e,
     iteração e *note in: 2f4./*note not in: 62f. em seus membros.  Por
     exemplo, o seguinte agora funciona: ‘len(AFlag(3)) == 2 and
     list(AFlag(3)) == (AFlag.ONE, AFlag.TWO)’

   * Alterada *note Enum: 630. e *note Flag: 623. para que os membros
     sejam agora definidos antes de *note __init_subclass__(): 631. ser
     chamado; *note dir(): 632. agora inclui métodos, etc., de tipos de
     dados mistos.

   * Alterada *note Flag: 623. para considerar apenas valores primários
     (potência de dois) canônicos enquanto valores compostos (‘3’, ‘6’,
     ‘10’, etc.)  são considerados apelidos; bandeiras invertidas são
     coagidas ao seu equivalente positivo.


File: python.info,  Node: fcntl,  Next: fractions<3>,  Prev: enum<3>,  Up: Módulos melhorados<3>

1.3.7.6 fcntl
.............

   * No FreeBSD, os sinalizadores ‘F_DUP2FD’ e ‘F_DUP2FD_CLOEXEC’
     respectivamente são suportados, o primeiro é igual ao uso de ‘dup2’
     enquanto o último define o sinalizador ‘FD_CLOEXEC’ adicionalmente.


File: python.info,  Node: fractions<3>,  Next: functools,  Prev: fcntl,  Up: Módulos melhorados<3>

1.3.7.7 fractions
.................

   * Suporte à inicialização no estilo PEP 515(1) de *note Fraction:
     1e7. da string.  (Contribuição de Sergey B Kirpichev em
     bpo-44258(2).)

   * *note Fraction: 1e7. agora implementa um método ‘__int__’, para que
     uma verificação de ‘isinstance(some_fraction, typing.SupportsInt)’
     seja aprovada.  (Contribuição de Mark Dickinson em bpo-44547(3).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0515/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=44258

   (3) https://bugs.python.org/issue?@action=redirect&bpo=44547


File: python.info,  Node: functools,  Next: gzip<2>,  Prev: fractions<3>,  Up: Módulos melhorados<3>

1.3.7.8 functools
.................

   * *note functools.singledispatch(): 639. agora suporta *note
     types.UnionType: 63a. e *note typing.Union: 63b. como anotações
     para o argumento de dispatch.:

          >>> from functools import singledispatch
          >>> @singledispatch
          ... def fun(arg, verboso=False):
          ...     if verboso:
          ...         print("Deixe-me apenas dizer,", end=" ")
          ...     print(arg)
          ...
          >>> @fun.register
          ... def _(arg: int | float, verboso=False):
          ...     if verboso:
          ...         print("Força nos números, não é?", end=" ")
          ...     print(arg)
          ...
          >>> from typing import Union
          >>> @fun.register
          ... def _(arg: Union[list, set], verbose=False):
          ...     if verboso:
          ...         print("Enumere isso:")
          ...     for i, elem in enumerate(arg):
          ...         print(i, elem)
          ...

     (Contribuição de Yurii Karabas na bpo-46014(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46014


File: python.info,  Node: gzip<2>,  Next: hashlib<2>,  Prev: functools,  Up: Módulos melhorados<3>

1.3.7.9 gzip
............

   * A função *note gzip.compress(): 63e. agora é mais rápida quando
     usada com o argumento 'mtime=0', pois delega a compactação
     inteiramente para uma única operação *note zlib.compress(): 63f.
     Há um efeito colateral dessa mudança: o cabeçalho do arquivo gzip
     contém um byte de “OS” em seu cabeçalho.  Tradicionalmente, isso
     sempre foi definido com um valor de 255 representando
     “desconhecido” pelo módulo *note gzip: 67.  Agora, ao usar *note
     compress(): 63e. com 'mtime=0', ele pode ser definido com um valor
     diferente pela biblioteca zlib C subjacente à qual o Python estava
     vinculado.  (Veja gh-112346(1) para detalhes sobre o efeito
     colateral.)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/112346


File: python.info,  Node: hashlib<2>,  Next: IDLE e idlelib,  Prev: gzip<2>,  Up: Módulos melhorados<3>

1.3.7.10 hashlib
................

   * *note hashlib.blake2b(): 642. e *note hashlib.blake2s(): 643. agora
     preferem libb2(1) em vez da cópia do Python.  (Contribuição de
     Christian Heimes em bpo-47095(2).)

   * O módulo interno ‘_sha3’ com algoritmos SHA3 e SHAKE agora usa
     'tiny_sha3' em vez do 'Keccak Code Package' para reduzir o código e
     o tamanho binário.  O módulo *note hashlib: 68. prefere
     implementações otimizadas de SHA3 e SHAKE do OpenSSL. A alteração
     afeta apenas instalações sem suporte a OpenSSL. (Contribuição de
     Christian Heimes em bpo-47098(3).)

   * Adiciona *note hashlib.file_digest(): 644, uma função auxiliar para
     hash eficiente de objetos arquivo ou similar.  (Contribuição de
     Christian Heimes em gh-89313(4).)

   ---------- Footnotes ----------

   (1) https://www.blake2.net/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=47095

   (3) https://bugs.python.org/issue?@action=redirect&bpo=47098

   (4) https://github.com/python/cpython/issues/89313


File: python.info,  Node: IDLE e idlelib,  Next: inspect<2>,  Prev: hashlib<2>,  Up: Módulos melhorados<3>

1.3.7.11 IDLE e idlelib
.......................

   * Aplica realce de sintaxe em arquivos ‘.pyi’.  (Contribuição de Alex
     Waygood e Terry Jan Reedy em bpo-45447(1).)

   * Inclui prompts ao salvar o console com entradas e saídas.
     (Contribuição de Terry Jan Reedy em gh-95191(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45447

   (2) https://github.com/python/cpython/issues/95191


File: python.info,  Node: inspect<2>,  Next: locale<3>,  Prev: IDLE e idlelib,  Up: Módulos melhorados<3>

1.3.7.12 inspect
................

   * Adiciona *note getmembers_static(): 649. para retornar todos os
     membros sem acionar a pesquisa dinâmica por meio do protocolo
     descritor.  (Contribuição de Weipeng Hong em bpo-30533(1).)

   * Adiciona *note ismethodwrapper(): 64a. para verificar se o tipo de
     um objeto é um *note MethodWrapperType: 64b.  (Contribuição de
     Hakan Çelik em bpo-29418(2).)

   * Altera as funções relacionadas a quadros no módulo *note inspect:
     7e. para retornar novas instâncias de classe *note FrameInfo: 64c.
     e *note Traceback: 64d. (compatíveis com as anteriores interfaces
     do tipo *note tupla nomeada: 64e.) que inclui as informações de
     posição estendidas PEP 657(3) (número da linha final, coluna e
     coluna final).  As funções afetadas são:

        * *note inspect.getframeinfo(): 64f.

        * *note inspect.getouterframes(): 650.

        * *note inspect.getinnerframes(): 651,

        * *note inspect.stack(): 652.

        * *note inspect.trace(): 653.

     (Contribuição por Pablo Galindo em gh-88116(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30533

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29418

   (3) https://peps.python.org/pep-0657/

   (4) https://github.com/python/cpython/issues/88116


File: python.info,  Node: locale<3>,  Next: logging,  Prev: inspect<2>,  Up: Módulos melhorados<3>

1.3.7.13 locale
...............

   * Adiciona *note locale.getencoding(): 2dc. para obter a codificação
     local atual.  É semelhante a ‘locale.getpreferredencoding(False)’,
     mas ignora o *note Modo UTF-8 do Python: 656.


File: python.info,  Node: logging,  Next: math<3>,  Prev: locale<3>,  Up: Módulos melhorados<3>

1.3.7.14 logging
................

   * Adicionada *note getLevelNamesMapping(): 659. para retornar um
     mapeamento de nomes de nível de registro (por exemplo,
     ‘'CRITICAL'’) para os valores de seus *note Níveis de Logging: 65a.
     correspondentes (por exemplo, ‘50’, por padrão ).  (Contribuição de
     Andrei Kulakovin em gh-88024(1).)

   * Adicionado um método *note createSocket(): 65b. a *note
     SysLogHandler: 65c, para corresponder a *note
     SocketHandler.createSocket(): 65d. .  Ele é chamado automaticamente
     durante a inicialização do manipulador e ao emitir um evento, se
     não houver nenhum soquete ativo.  (Contribuição de Kirill Pinchuk
     em gh-88457(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/88024

   (2) https://github.com/python/cpython/issues/88457


File: python.info,  Node: math<3>,  Next: operador,  Prev: logging,  Up: Módulos melhorados<3>

1.3.7.15 math
.............

   * Adiciona *note math.exp2(): 660.: retorna 2 elevado à potência de
     x.  (Contribuição de Gideon Mitchell em bpo-45917(1).)

   * Adiciona *note math.cbrt(): 661.: retorna a raiz cúbica de x.
     (Contribuição de Ajith Ramachandran em bpo-44357(2).)

   * O comportamento de dois casos excepcionais *note math.pow(): 662.
     foi alterado, para consistência com a especificação IEEE 754.  As
     operações ‘math.pow(0.0, -math.inf)’ e ‘math.pow(-0.0, -math.inf)’
     agora retornam ‘inf’.  Anteriormente eles levantavam *note
     ValueError: 202.  (Contribuição de Mark Dickinson em bpo-44339(3).)

   * O valor *note math.nan: 663. agora está sempre disponível.
     (Contribuição de Victor Stinner em bpo-46917(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45917

   (2) https://bugs.python.org/issue?@action=redirect&bpo=44357

   (3) https://bugs.python.org/issue?@action=redirect&bpo=44339

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46917


File: python.info,  Node: operador,  Next: os<3>,  Prev: math<3>,  Up: Módulos melhorados<3>

1.3.7.16 operador
.................

   * Uma nova função ‘operator.call’ foi adicionada, tal que
     ‘operator.call(obj, *args, **kwargs) == obj(*args, **kwargs)’
     (Contribuição de Antony Lee em bpo-44019(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44019


File: python.info,  Node: os<3>,  Next: pathlib<4>,  Prev: operador,  Up: Módulos melhorados<3>

1.3.7.17 os
...........

   * No Windows, *note os.urandom(): 523. agora usa ‘BCryptGenRandom()’,
     em vez de ‘CryptGenRandom()’ que foi descontinuado.  (Contribuição
     de Dong-hee Na em bpo-44611(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44611


File: python.info,  Node: pathlib<4>,  Next: re<3>,  Prev: os<3>,  Up: Módulos melhorados<3>

1.3.7.18 pathlib
................

   * *note glob(): 22d. e *note rglob(): 22e. retornam apenas diretórios
     se 'pattern' terminar com um separador de componentes de nome de
     caminho: *note sep: 66a. ou *note altsep: 66b.  (Contribuição de
     Eisuke Kawasima em bpo-22276(1) e bpo-33392(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22276

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33392


File: python.info,  Node: re<3>,  Next: shutil<3>,  Prev: pathlib<4>,  Up: Módulos melhorados<3>

1.3.7.19 re
...........

   * Agrupamento atômico (‘(?>...)’) e quantificadores possessivos
     (‘*+’, ‘++’, ‘?+’, ‘{m,n}+’ ) agora são suportados em expressões
     regulares.  (Contribuição de Jeffrey C. Jacobs e Serhiy Storchaka
     em bpo-433030(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=433030


File: python.info,  Node: shutil<3>,  Next: socket,  Prev: re<3>,  Up: Módulos melhorados<3>

1.3.7.20 shutil
...............

   * Adicione o parâmetro opcional 'dir_fd' em *note shutil.rmtree():
     301.  (Contribuição de Serhiy Storchaka em bpo-46245(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46245


File: python.info,  Node: socket,  Next: sqlite3<4>,  Prev: shutil<3>,  Up: Módulos melhorados<3>

1.3.7.21 socket
...............

   * Adiciona suporte ao soquete CAN para NetBSD. (Contribuição de
     Thomas Klausner em bpo-30512(1).)

   * *note create_connection(): 672. tem a opção de levantar, em caso de
     falha na conexão, um *note ExceptionGroup: 1b6. contendo todos os
     erros ao invés de somente levantar o último erro.  (Contribuição de
     Irit Katriel em bpo-29980(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30512

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29980


File: python.info,  Node: sqlite3<4>,  Next: string,  Prev: socket,  Up: Módulos melhorados<3>

1.3.7.22 sqlite3
................

   * Agora você pode desabilitar o autorizador passando *note None: 675.
     para *note set_authorizer(): 2ab.  (Contribuição de Erlend E.
     Aasland em bpo-44491(1).)

   * O nome do agrupamento *note create_collation(): 676. agora pode
     conter qualquer caractere Unicode.  Nomes de agrupamento com
     caracteres inválidos agora levantar *note UnicodeEncodeError: 677.
     em vez de *note sqlite3.ProgrammingError: 4f2.  (Contribuição de
     Erlend E. Aasland em bpo-44688(2).)

   * As exceções *note sqlite3: cf. agora incluem o código de erro
     estendido SQLite como *note sqlite_errorcode: 678. e o nome do erro
     SQLite como *note sqlite_errorname: 679.  (Contribuição de Aviv
     Palivoda, Daniel Shahaf e Erlend E. Aasland em bpo-16379(3) e
     bpo-24139(4).)

   * Adiciona *note setlimit(): 67a. e *note getlimit(): 67b. a *note
     sqlite3.Connection: 245. para definir e obter limites SQLite por
     base de conexão.  (Contribuição de Erlend E. Aasland em
     bpo-45243(5).)

   * *note sqlite3: cf. agora define *note sqlite3.threadsafety: 67c.
     com base no modo de threading padrão com o qual a biblioteca SQLite
     subjacente foi compilada.  (Contribuição de Erlend E. Aasland em
     bpo-45613(6).)

   * O retorno de chamadas C *note sqlite3: cf. agora usam exceções que
     não podem ser levantadas se os rastreamentos de retorno de chamada
     estiverem habilitados.  Os usuários agora podem registrar um *note
     unraisable hook handler: 1f7. para melhorar sua experiência de
     depuração.  (Contribuição de Erlend E. Aasland em bpo-45828(7).)

   * A busca por rollback não levanta mais *note InterfaceError: 67d.
     Em vez disso, deixamos para a biblioteca SQLite lidar com esses
     casos.  (Contribuição de Erlend E. Aasland em bpo-44092(8).)

   * Adiciona *note serialize(): 67e. e *note deserialize(): 67f. a
     *note sqlite3.Connection: 245. para serializar e desserializar
     bancos de dados.  (Contribuição de Erlend E. Aasland em
     bpo-41930(9).)

   * Adiciona *note create_window_function(): 680. a *note
     sqlite3.Connection: 245. para criar funções de janela agregadas.
     (Contribuição de Erlend E. Aasland em bpo-34916(10).)

   * Adiciona *note blobopen(): 681. a *note sqlite3.Connection: 245.
     *note sqlite3.Blob: 682. permite operações de E/S incrementais em
     blobs.  (Contribuição de Aviv Palivoda e Erlend E. Aasland em
     bpo-24905(11).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44491

   (2) https://bugs.python.org/issue?@action=redirect&bpo=44688

   (3) https://bugs.python.org/issue?@action=redirect&bpo=16379

   (4) https://bugs.python.org/issue?@action=redirect&bpo=24139

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45243

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45613

   (7) https://bugs.python.org/issue?@action=redirect&bpo=45828

   (8) https://bugs.python.org/issue?@action=redirect&bpo=44092

   (9) https://bugs.python.org/issue?@action=redirect&bpo=41930

   (10) https://bugs.python.org/issue?@action=redirect&bpo=34916

   (11) https://bugs.python.org/issue?@action=redirect&bpo=24905


File: python.info,  Node: string,  Next: sys<4>,  Prev: sqlite3<4>,  Up: Módulos melhorados<3>

1.3.7.23 string
...............

   * Adiciona *note get_identifiers(): 685. e *note is_valid(): 686. a
     *note string.Template: 687, que respectivamente retornam todos os
     marcadores de posição válidos e se quaisquer marcadores de posição
     inválidos estão presentes.  (Contribuição de Ben Kehoe em
     gh-90465(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/90465


File: python.info,  Node: sys<4>,  Next: sysconfig,  Prev: string,  Up: Módulos melhorados<3>

1.3.7.24 sys
............

   * *note sys.exc_info(): 68a. agora deriva os campos ‘type’ e
     ‘traceback’ do ‘value’ (a instância de exceção) de forma que quanto
     uma exceção é modificada enquanto está sendo tratada, são
     refletidos nos resultados de chamadas subsequentes para
     ‘exc_info()’.  (Contribuição de Irit Katriel em bpo-45711(1).)

   * Adiciona *note sys.exception(): 68b. que retorna a instância de
     exceção ativa (equivalente a ‘sys.exc_info()[1]’).  (Contribuição
     de Irit Katriel em bpo-46328(2).)

   * Adiciona o sinalizador *note sys.flags.safe_path: 68c.
     (Contribuição de Victor Stinner em gh-57684(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45711

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46328

   (3) https://github.com/python/cpython/issues/57684


File: python.info,  Node: sysconfig,  Next: tempfile<3>,  Prev: sys<4>,  Up: Módulos melhorados<3>

1.3.7.25 sysconfig
..................

   * Três novos *note esquemas de instalação: 68f. ('posix_venv',
     'nt_venv' e 'venv') foram adicionados e são usados quando o Python
     cria novos ambientes virtuais ou quando está sendo executado a
     partir de um ambiente virtual.  Os dois primeiros esquemas
     ('posix_venv' e 'nt_venv') são específicos do SO para não Windows e
     Windows, o 'venv' é essencialmente um apelido para um deles de
     acordo com o SO em que o Python é executado.  Isso é útil para
     distribuidores downstream que modificam *note
     sysconfig.get_preferred_scheme(): 690.  O código de terceiros que
     cria novos ambientes virtuais deve usar o novo esquema de
     instalação 'venv' para determinar os caminhos, assim como *note
     venv: 111.  (Contribuição de Miro Hrončok em bpo-45413(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45413


File: python.info,  Node: tempfile<3>,  Next: threading<2>,  Prev: sysconfig,  Up: Módulos melhorados<3>

1.3.7.26 tempfile
.................

   * Objetos *note SpooledTemporaryFile: 693. agora implementam
     totalmente os métodos de *note io.BufferedIOBase: 694. ou *note
     io.TextIOBase: 695. (dependendo do modo de arquivo).  Isso permite
     que eles funcionem corretamente com APIs que esperam objetos
     arquivo ou similares, como módulos de compactação.  (Contribuição
     de Carey Metcalfe em gh-70363(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/70363


File: python.info,  Node: threading<2>,  Next: time<2>,  Prev: tempfile<3>,  Up: Módulos melhorados<3>

1.3.7.27 threading
..................

   * No Unix, se a função ‘sem_clockwait()’ estiver disponível na
     biblioteca C (glibc 2.30 e mais recente), o método *note
     threading.Lock.acquire(): 698. agora usa o relógio monotônico
     (*note time.CLOCK_MONOTONIC: 699.) para o tempo limite, em vez de
     usar o relógio do sistema (*note time.CLOCK_REALTIME: 69a.), para
     não ser afetado pelas alterações do relógio do sistema.
     (Contribuição de Victor Stinner em bpo-41710(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41710


File: python.info,  Node: time<2>,  Next: tkinter<3>,  Prev: threading<2>,  Up: Módulos melhorados<3>

1.3.7.28 time
.............

   * No Unix, *note time.sleep(): 69d. agora usa a função
     ‘clock_nanosleep()’ ou ‘nanosleep()’, se disponível, que tem uma
     resolução de 1 nanossegundo (10^-9 segundos), em vez de usar
     ‘select()’ que tem uma resolução de 1 microssegundo (10^-6
     segundos).  (Contribuição de Benjamin Szőke e Victor Stinner em
     bpo-21302(1).)

   * No Windows 8.1 e mais recente, *note time.sleep(): 69d. agora usa
     um temporizador aguardável baseado em temporizadores de alta
     resolução(2) que tem uma resolução de 100 nanossegundos (10^-7
     segundos).  Anteriormente, tinha uma resolução de 1 milissegundo
     (10^-3 segundos).  (Contribuição de Benjamin Szőke, Donghee Na,
     Eryk Sun e Victor Stinner em bpo-21302(3) e bpo-45429(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21302

   (2) 
https://docs.microsoft.com/en-us/windows-hardware/drivers/kernel/high-resolution-timers

   (3) https://bugs.python.org/issue?@action=redirect&bpo=21302

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45429


File: python.info,  Node: tkinter<3>,  Next: traceback<2>,  Prev: time<2>,  Up: Módulos melhorados<3>

1.3.7.29 tkinter
................

   * Adicionado o método ‘info_patchlevel()’ que retorna a versão exata
     da biblioteca Tcl como uma tupla nomeada semelhante a *note
     sys.version_info: 6a0.  (Contribuição de Serhiy Storchaka em
     gh-91827(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/91827


File: python.info,  Node: traceback<2>,  Next: typing<4>,  Prev: tkinter<3>,  Up: Módulos melhorados<3>

1.3.7.30 traceback
..................

   * Adiciona *note traceback.StackSummary.format_frame_summary(): 6a3.
     para permitir que os usuários substituam quais quadros aparecem no
     traceback e como eles são formatados.  (Contribuição de Ammar Askar
     em bpo-44569(1).)

   * Adiciona *note traceback.TracebackException.print(): 6a4, que
     imprime a instância formatada *note TracebackException: 25c. em um
     arquivo.  (Contribuição de Irit Katriel em bpo-33809(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44569

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33809


File: python.info,  Node: typing<4>,  Next: unicodedata<3>,  Prev: traceback<2>,  Up: Módulos melhorados<3>

1.3.7.31 typing
...............

Para alterações principais, veja *note Novos recursos relacionados a
dicas de tipo: 5bf.

   * Adiciona *note typing.assert_never(): 6a7. e *note typing.Never:
     6a8.  *note typing.assert_never(): 6a7. é útil para pedir a um
     verificador de tipo para confirmar que uma linha de código não está
     acessível.  Em tempo de execução, ele levanta uma exceção *note
     AssertionError: 6a9.  (Contribuição de Jelle Zijlstra em
     gh-90633(1).)

   * Adiciona *note typing.reveal_type(): 6aa.  Isso é útil para
     perguntar a um verificador de tipo qual tipo ele inferiu para uma
     determinada expressão.  Em tempo de execução imprime o tipo do
     valor recebido.  (Contribuição de Jelle Zijlstra em gh-90572(2).)

   * Adicione *note typing.assert_type(): 6ab.  Isso é útil para
     solicitar a um verificador de tipos que confirme se o tipo que ele
     inferiu para uma determinada expressão corresponde ao tipo
     fornecido.  Em tempo de execução ele simplesmente retorna o valor
     recebido.  (Contribuição de Jelle Zijlstra em gh-90638(3).)

   * Os tipos *note typing.TypedDict: 162. agora podem ser genéricos.
     (Contribuição de Samodya Abeysiriwardane em gh-89026(4).)

   * Os tipos *note NamedTuple: 2b0. agora podem ser genéricos.
     (Contribuição de Serhiy Storchaka em bpo-43923(5).)

   * Permite criar subclasse de *note typing.Any: 6ac.  Isso é útil para
     evitar erros de verificador de tipo relacionados a classes
     altamente dinâmicas, como mocks.  (Contribuição de Shantanu Jain em
     gh-91154(6).)

   * O decorador *note typing.final(): 6ad. agora define o ‘__final__’
     atribuído no objeto decorado.  (Contribuição de Jelle Zijlstra em
     gh-90500(7).)

   * A função *note typing.get_overloads(): 6ae. pode ser usada para
     introspecção das sobrecargas de uma função.  *note
     typing.clear_overloads(): 6af. pode ser usado para limpar todas as
     sobrecargas registradas de uma função.  (Contribuição de Jelle
     Zijlstra em gh-89263(8).)

   * O método *note __init__(): 6b0. das subclasses *note Protocol: 264.
     agora é preservado.  (Contribuição de Adrian Garcia Badarasco em
     gh-88970(9).)

   * A representação de tipos de tupla vazias (‘Tuple[()]’) está
     simplificada.  Isso afeta a introspecção, por exemplo.
     ‘get_args(Tuple[()])’ agora é avaliado como ‘()’ em vez de ‘((),)’.
     (Contribuição de Serhiy Storchaka em gh-91137(10).)

   * Afrouxa os requisitos de tempo de execução para anotações de tipo
     removendo a verificação chamável na função privada
     ‘typing._type_check’.  (Contribuição de Gregory Beauregard em
     gh-90802(11).)

   * *note typing.get_type_hints(): 6b1. agora tem suporte à avaliação
     de strings como referências diretas em *note apelidos genéricos da
     PEP 585: 6b2.  (Contribuição de Niklas Rosenstein em gh-85542(12).)

   * *note typing.get_type_hints(): 6b1. não adiciona mais *note
     Optional: 6b3. aos parâmetros com ‘None’ como padrão.
     (Contribuição de Nikita Sobolev em gh-90353(13).)

   * *note typing.get_type_hints(): 6b1. agora tem suporte à avaliação
     de anotações *note ClassVar: 266. de strings simples.
     (Contribuição de Gregory Beauregard em gh-90711(14).)

   * *note typing.no_type_check(): 6b4. não modifica mais classes e
     funções externas.  Agora também marca corretamente os métodos de
     classe para não serem verificados quanto ao tipo.  (Contribuição de
     Nikita Sobolev em gh-90729(15).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/90633

   (2) https://github.com/python/cpython/issues/90572

   (3) https://github.com/python/cpython/issues/90638

   (4) https://github.com/python/cpython/issues/89026

   (5) https://bugs.python.org/issue?@action=redirect&bpo=43923

   (6) https://github.com/python/cpython/issues/91154

   (7) https://github.com/python/cpython/issues/90500

   (8) https://github.com/python/cpython/issues/89263

   (9) https://github.com/python/cpython/issues/88970

   (10) https://github.com/python/cpython/issues/91137

   (11) https://github.com/python/cpython/issues/90802

   (12) https://github.com/python/cpython/issues/85542

   (13) https://github.com/python/cpython/issues/90353

   (14) https://github.com/python/cpython/issues/90711

   (15) https://github.com/python/cpython/issues/90729


File: python.info,  Node: unicodedata<3>,  Next: unittest<4>,  Prev: typing<4>,  Up: Módulos melhorados<3>

1.3.7.32 unicodedata
....................

   * O banco de dados Unicode foi atualizado para a versão 14.0.0.
     (Contribuição de Benjamin Peterson em bpo-45190(1)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45190


File: python.info,  Node: unittest<4>,  Next: venv<2>,  Prev: unicodedata<3>,  Up: Módulos melhorados<3>

1.3.7.33 unittest
.................

   * Adicionados os métodos *note enterContext(): 6b9. e *note
     enterClassContext(): 6ba. da classe *note TestCase: 44f, método
     *note enterAsyncContext(): 6bb. da classe *note
     IsolatedAsyncioTestCase: 30c. e a função *note
     unittest.enterModuleContext(): 6bc.  (Contribuição de Serhiy
     Storchaka em bpo-45046(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45046


File: python.info,  Node: venv<2>,  Next: avisos<2>,  Prev: unittest<4>,  Up: Módulos melhorados<3>

1.3.7.34 venv
.............

   * Quando novos ambientes virtuais Python são criados, o *note esquema
     de instalação do sysconfig: 68f. do 'venv' é usado para determinar
     os caminhos dentro do ambiente.  Quando o Python é executado em um
     ambiente virtual, o mesmo esquema de instalação é o padrão.  Isso
     significa que os distribuidores downstream podem alterar o esquema
     de instalação padrão do sysconfig sem alterar o comportamento dos
     ambientes virtuais.  O código de terceiros que também cria novos
     ambientes virtuais deve fazer o mesmo.  (Contribuição de Miro
     Hrončok em bpo-45413(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45413


File: python.info,  Node: avisos<2>,  Next: zipfile,  Prev: venv<2>,  Up: Módulos melhorados<3>

1.3.7.35 avisos
...............

   * *note warnings.catch_warnings(): 584. agora aceita argumentos para
     *note warnings.simplefilter(): 6c1, fornecendo uma maneira mais
     concisa de ignorar localmente avisos ou convertê-los em erros.
     (Contribuição de Zac Hatfield-Dodds em bpo-47074(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=47074


File: python.info,  Node: zipfile,  Prev: avisos<2>,  Up: Módulos melhorados<3>

1.3.7.36 zipfile
................

   * Adicionado suporte para especificar a codificação de nome de membro
     para leitura de metadados em um diretório *note ZipFile: 6c4. e
     cabeçalhos de arquivo.  (Contribuição de Stephen J. Turnbull e
     Serhiy Storchaka em bpo-28080(1).)

   * Adicionado *note ZipFile.mkdir(): 6c5. para criar novos diretórios
     dentro de arquivos ZIP. (Contribuição de Sam Ezeh em gh-49083(2).)

   * Adicionado *note stem: 6c6, *note suffix: 6c7. e *note suffixes:
     6c8. a *note zipfile.Path: 6c9.  (Contribuição de Miguel Brito em
     gh-88261(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28080

   (2) https://github.com/python/cpython/issues/49083

   (3) https://github.com/python/cpython/issues/88261


File: python.info,  Node: Otimizações<3>,  Next: CPython mais rápido,  Prev: Módulos melhorados<3>,  Up: O que há de novo no Python 3 11

1.3.8 Otimizações
-----------------

Esta seção cobre otimizações específicas independentes do projeto *note
CPython mais rápido: 5a0, que é abordado em sua própria seção.

   * O compilador agora otimiza a *note formatação simples de % no
     estilo printf: 6cc. em literais de string contendo apenas os
     códigos de formato ‘%s’, ‘%r’ e ‘%a’ e a torna tão rápida quanto
     uma expressão *note f-string: 436. correspondente.  (Contribuição
     de Serhiy Storchaka em bpo-28307(1).)

   * A divisão inteira (‘//’) é melhor ajustada para otimização por
     compiladores.  Agora é cerca de 20% mais rápido em x86-64 ao
     dividir um *note int: 257. por um valor menor que ‘2**30’.
     (Contribuição de Gregory P. Smith e Tim Peters em gh-90564(2).)

   * *note sum(): 46a. agora é quase 30% mais rápida para inteiros
     menores que ‘2**30’.  (Contribuição de Stefan Behnel em
     gh-68264(3).)

   * O redimensionamento de listas é simplificado para o caso comum,
     acelerando *note list.append(): 6cd. em ≈15% e *note compreensões
     de lista: 6ce. em até 20-30% (Contribuição de Dennis Sweeney em
     gh-91165(4).)

   * Dicionários não armazenam valores de hash quando todas as chaves
     são objetos Unicode, diminuindo o tamanho de *note dict: 256.  Por
     exemplo, ‘sys.getsizeof(dict.fromkeys("abcdefg"))’ foi reduzido de
     352 bytes para 272 bytes (23% menor) em plataformas de 64 bits.
     (Contribuição de Inada Naoki em bpo-46845(5).)

   * Usar *note asyncio.DatagramProtocol: 6cf. agora é muito mais rápido
     ao transferir arquivos grandes por UDP, com velocidades mais de 100
     vezes maiores para um arquivo de ≈60 MiB. (Contribuição de msoxzw
     em gh-91487(6).)

   * As funções *note comb(): 6d0. e *note perm(): 6d1. de *note math:
     8e. são agora ≈10 vezes mais rápidas para argumentos grandes (com
     uma aceleração maior para 'k' maiores).  (Contribuição de Serhiy
     Storchaka em bpo-37295(7).)

   * As funções *note mean(): 6d2, *note variance(): 6d3. e *note
     stdev(): 6d4. do *note statistics: d2. agora consomem iteradores em
     uma passagem em vez de convertê-los em uma *note list: 611.
     primeiro.  Isso é duas vezes mais rápido e pode economizar memória
     de forma substancial.  (Contribuição de Raymond Hettinger em
     gh-90415(8).)

   * *note unicodedata.normalize(): 6d5. agora normaliza strings de puro
     ASCII em tempo constante.  (Contribuição de Dong-hee Na em
     bpo-44987(9).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28307

   (2) https://github.com/python/cpython/issues/90564

   (3) https://github.com/python/cpython/issues/68264

   (4) https://github.com/python/cpython/issues/91165

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46845

   (6) https://github.com/python/cpython/issues/91487

   (7) https://bugs.python.org/issue?@action=redirect&bpo=37295

   (8) https://github.com/python/cpython/issues/90415

   (9) https://bugs.python.org/issue?@action=redirect&bpo=44987


File: python.info,  Node: CPython mais rápido,  Next: Alterações de bytecode do CPython<3>,  Prev: Otimizações<3>,  Up: O que há de novo no Python 3 11

1.3.9 CPython mais rápido
-------------------------

O CPython 3.11 é em média 25% mais rápido(1) que o CPython 3.10 medido
com o conjunto de ferramentas de benchmarks pyperformance(2), quando
compilado com GCC no Ubuntu Linux.  Dependendo da sua carga de trabalho,
a aceleração geral pode ser de 10 a 60%.

Este projeto se concentra em duas áreas principais em Python: *note
Inicialização mais rápida: 6d7. e *note Tempo de execução mais rápido:
6d8.  Otimizações que não são abordadas neste projeto estão listadas em
*note Otimizações: 6cb.

* Menu:

* Inicialização mais rápida::
* Tempo de execução mais rápido::
* Diversos::
* FAQ::
* Sobre::

   ---------- Footnotes ----------

   (1) https://github.com/faster-cpython/ideas#published-results

   (2) https://github.com/python/pyperformance


File: python.info,  Node: Inicialização mais rápida,  Next: Tempo de execução mais rápido,  Up: CPython mais rápido

1.3.9.1 Inicialização mais rápida
.................................

* Menu:

* Importações congeladas/objetos de código estático::


File: python.info,  Node: Importações congeladas/objetos de código estático,  Up: Inicialização mais rápida

1.3.9.2 Importações congeladas/objetos de código estático
.........................................................

O Python armazena o *note bytecode: 187. no diretório *note __pycache__:
6dc. para acelerar o carregamento do módulo.

Anteriormente na versão 3.10, a execução do módulo Python era assim:

     Read __pycache__ -> Unmarshal -> Heap allocated code object -> Evaluate

No Python 3.11, os principais módulos essenciais para a inicialização do
Python são “congelados”.  Isso significa que seus *note Objetos código:
5b5. (e bytecode) são alocados estaticamente pelo interpretador.  Isso
reduz as etapas no processo de execução do módulo para isso:

     Statically allocated code object -> Evaluate

A inicialização do interpretador agora é 10-15% mais rápida no Python
3.11.  Isso tem um grande impacto para programas de execução curta
usando Python.

(Contribuição de Eric Snow, Guido van Rossum e Kumar Aditya em vários
issues.)


File: python.info,  Node: Tempo de execução mais rápido,  Next: Diversos,  Prev: Inicialização mais rápida,  Up: CPython mais rápido

1.3.9.3 Tempo de execução mais rápido
.....................................

* Menu:

* Quadros Python menos custosos e mais preguiçosos::
* Chamadas de função Python em linha::
* PEP 659; Interpretador adaptativo especializado: PEP 659 Interpretador adaptativo especializado.


File: python.info,  Node: Quadros Python menos custosos e mais preguiçosos,  Next: Chamadas de função Python em linha,  Up: Tempo de execução mais rápido

1.3.9.4 Quadros Python menos custosos e mais preguiçosos
........................................................

Os quadros do Python, contendo informações de execução, são criados
sempre que o Python chama uma função do Python.  A seguir estão as novas
otimizações de quadro:

   - Simplificado o processo de criação do quadro.

   - Alocação de memória evitada reutilizando generosamente o espaço do
     quadro na pilha C.

   - Simplificada a estrutura interna do quadro para conter apenas as
     informações essenciais.  Os quadros anteriormente continham
     informações extras de depuração e gerenciamento de memória.

Os antigos *note objetos quadros: 6e0. agora são criados apenas quando
solicitados por depuradores ou por funções de introspecção do Python,
como *note sys._getframe(): 6e1. e *note inspect.currentframe(): 6e2.
Para a maioria dos códigos de usuário, nenhum objeto quadro é criado.
Como resultado, quase todas as chamadas de funções do Python aceleraram
significativamente.  Medimos uma aceleração de 3 a 7% no desempenho do
py.

(Contribuição de Mark Shannon em bpo-44590(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44590


File: python.info,  Node: Chamadas de função Python em linha,  Next: PEP 659 Interpretador adaptativo especializado,  Prev: Quadros Python menos custosos e mais preguiçosos,  Up: Tempo de execução mais rápido

1.3.9.5 Chamadas de função Python em linha
..........................................

Durante a chamada de uma função Python, o Python chamará uma função C de
avaliação para interpretar o código dessa função.  Isso efetivamente
limita a recursão Python pura ao que é seguro para a pilha C.

No 3.11, quando o CPython detecta o código Python chamando outra função
Python, ele configura um novo quadro e “pula” para o novo código dentro
do novo quadro.  Isso evita chamar a função de interpretação C
completamente.

A maioria das chamadas de função do Python agora não consome espaço de
pilha C, acelerando-as.  Em funções recursivas simples como fibonacci ou
fatorial, observamos um aumento de velocidade de 1,7x.  Isso também
significa que as funções recursivas podem recursar significativamente
mais profundamente (se o usuário aumentar o limite de recursão com *note
sys.setrecursionlimit(): 4c3.).  Medimos uma melhoria de 1 a 3% no
desempenho do py.

(Contribuição de Pablo Galindo e Mark Shannon em bpo-45256(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45256


File: python.info,  Node: PEP 659 Interpretador adaptativo especializado,  Prev: Chamadas de função Python em linha,  Up: Tempo de execução mais rápido

1.3.9.6 PEP 659: Interpretador adaptativo especializado
.......................................................

PEP 659(1) é uma das partes principais do projeto Faster CPython.  A
ideia geral é que, embora o Python seja uma linguagem dinâmica, a maior
parte do código possui regiões onde objetos e tipos raramente mudam.
Este conceito é conhecido como 'estabilidade de tipo'.

Em tempo de execução, o Python tentará procurar padrões comuns e
estabilidade de tipo no código em execução.  O Python substituirá a
operação atual por uma mais especializada.  Essa operação especializada
usa caminhos rápidos disponíveis apenas para esses casos/tipos de uso,
que geralmente superam suas contrapartes genéricas.  Isso também traz
outro conceito chamado 'cache inline', onde o Python armazena em cache
os resultados de operações caras diretamente no *note bytecode: 187.

O especializador também combinará certos pares de instruções comuns em
uma superinstrução, reduzindo a sobrecarga durante a execução.

O Python só se especializará quando vir um código “quente” (executado
várias vezes).  Isso evita que o Python perca tempo com código de
execução única.  O Python também pode se especializar quando o código é
muito dinâmico ou quando o uso muda.  A especialização é tentada
periodicamente e as tentativas de especialização não são muito caras,
permitindo que a especialização se adapte às novas circunstâncias.

(PEP escrita por Mark Shannon, com ideias inspiradas por Stefan
Brunthaler.  Veja PEP 659(2) para mais informações.  Implementação por
Mark Shannon e Brandt Bucher, com ajuda adicional de Irit Katriel e
Dennis Sweeney.)

Operação            Forma                    Especialização                                              Aceleração da           Contribuidor(es)
                                                                                                         operação                
                                                                                                         
---------------------------------------------------------------------------------------------------------------------------------------------------------
                                                                                                                                 
Operações           ‘x + x’                  Adicionar, multiplicar e subtrair binários para tipos       10%                     Mark Shannon, Donghee
binárias                                     comuns como *note int: 257, *note float: 2f7. e                                     Na, Brandt Bucher,
                    ‘x - x’                  *note str: 44c. usam caminhos rápidos personalizados para                           Dennis Sweeney
                                             seus tipos subjacentes.                                                             
                    ‘x * x’                  
                    
                                                                                                                                 
Subscrição          ‘a[i]’                   Subscrever tipos contêineres como *note list: 611,          10-25%                  Irit Katriel, Mark
                                             *note tuple: 370. e *note dict: 256. indexam diretamente                            Shannon
                                             as estruturas de dados subjacentes.                                                 
                                             
                                             Subscrever *note __getitem__(): 283. personalizado também
                                             é inserido em linha de forma similar a
                                             *note Chamadas de função Python em linha: 6e3.
                                             
                                                                                                                                 
Armazenar com       ‘a[i] = z’               Similar à especialização de subscrição acima.               10-25%                  Dennis Sweeney
subscrição                                                                                                                       

Chamadas            ‘f(arg)’                 Chamadas para funções e tipos (C) embutidos comuns como     20%                     Mark Shannon, Ken Jin
                                             *note len(): 62e. e *note str: 44c. chamam diretamente                              
                    ‘C(arg)’                 sua versão C subjacente.  Isso evita passar pela
                                             convenção de chamada interna.
                                             
                                                                                                                                 
Carregar variável   ‘print’                  O índice do objeto no espaço de nomes globais/embutidas é   (3)                     Mark Shannon
global                                       armazenado em cache.  Carregar globais e embutidas requer                           
                    ‘len’                    zero pesquisas de espaço de nomes.
                                             
                                                                                                                                 
Carregar atributo   ‘o.attr’                 Semelhante ao carregamento de variáveis globais.  O         (4)                     Mark Shannon
                                             índice do atributo dentro do espaço de nomes da                                     
                                             classe/objeto é armazenado em cache.  Na maioria dos
                                             casos, o carregamento de atributos exigirá zero pesquisas
                                             de espaço de nomes.
                                             
                                                                                                                                 
Carregar métodos    ‘o.meth()’               O endereço real do método é armazenado em cache.  O         10-20%                  Ken Jin, Mark Shannon
para chamada                                 carregamento de método agora não tem pesquisas de espaço                            
                                             de nomes – mesmo para classes com longas cadeias de
                                             herança.
                                             
                                                                                                                                 
Armazenar           ‘o.attr = z’             Semelhante à otimização de carregamento de atributos.       2% no pyperformance     Mark Shannon
atributo                                                                                                                         

Desempacotar        ‘*seq’                   Especializado para contêineres comuns como                  8%                      Brandt Bucher
sequência                                    *note list: 611. e *note tuple: 370.  Evita convenção de                            
                                             chamada interna.
                                             

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0659/

   (2) https://peps.python.org/pep-0659/

   (3) Uma otimização semelhante já existia desde o Python 3.8.  O 3.11
é especializado em mais formas e reduz algumas despesas gerais.

   (4) Uma otimização semelhante já existia desde o Python 3.10.  3.11 é
especializado em mais formas.  Além disso, todos os carregamentos de
atributos devem ser acelerados por bpo-45947
(https://bugs.python.org/issue?@action=redirect&bpo=45947).


File: python.info,  Node: Diversos,  Next: FAQ,  Prev: Tempo de execução mais rápido,  Up: CPython mais rápido

1.3.9.7 Diversos
................

   * Os objetos agora requerem menos memória devido aos espaços de nomes
     de objetos criados lentamente.  Seus dicionários de espaços de
     nomes agora também compartilham chaves mais livremente.
     (Contribuição de Mark Shannon em bpo-45340(1) e bpo-40116(2).)

   * Exceções de “custo zero” estão implementadas, eliminando o custo
     das instruções *note try: 6e9. quando nenhuma exceção é gerada.
     (Contribuição de Mark Shannon em bpo-40222(3).)

   * Uma representação mais concisa de exceções no interpretador reduziu
     o tempo necessário para capturar uma exceção em cerca de 10%.
     (Contribuição de Irit Katriel em bpo-45711(4).)

   * O mecanismo de correspondência de expressão regular do *note re:
     b9. foi parcialmente refatorado e agora usa 'gotos' computados (ou
     “código encadeado”) em plataformas suportadas.  Como resultado, o
     Python 3.11 executa os benchmarks de expressão regular do
     pyperformance(5) até 10% mais rápido que o Python 3.10.
     (Contribuição de Brandt Bucher em gh-91404(6).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45340

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40116

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40222

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45711

   (5) https://pyperformance.readthedocs.io/benchmarks.html#regex-dna

   (6) https://github.com/python/cpython/issues/91404


File: python.info,  Node: FAQ,  Next: Sobre,  Prev: Diversos,  Up: CPython mais rápido

1.3.9.8 FAQ
...........

* Menu:

* Como devo escrever meu código para utilizar esses aceleradores?::
* O CPython 3.11 usará mais memória?: O CPython 3 11 usará mais memória?.
* Não vejo nenhuma aceleração em minha carga de trabalho. Por que?: Não vejo nenhuma aceleração em minha carga de trabalho Por que?.
* Existe um compilador JIT?::


File: python.info,  Node: Como devo escrever meu código para utilizar esses aceleradores?,  Next: O CPython 3 11 usará mais memória?,  Up: FAQ

1.3.9.9 Como devo escrever meu código para utilizar esses aceleradores?
.......................................................................

Escrever código pythônico que segue as melhores práticas comuns; você
não precisa alterar seu código.  O projeto Faster CPython otimiza para
padrões de código comuns que observamos.


File: python.info,  Node: O CPython 3 11 usará mais memória?,  Next: Não vejo nenhuma aceleração em minha carga de trabalho Por que?,  Prev: Como devo escrever meu código para utilizar esses aceleradores?,  Up: FAQ

1.3.9.10 O CPython 3.11 usará mais memória?
...........................................

Talvez não; não esperamos que o uso de memória exceda 20% a mais que
3.10.  Isso é compensado por otimizações de memória para objetos quadro
e dicionários de objetos, conforme mencionado acima.


File: python.info,  Node: Não vejo nenhuma aceleração em minha carga de trabalho Por que?,  Next: Existe um compilador JIT?,  Prev: O CPython 3 11 usará mais memória?,  Up: FAQ

1.3.9.11 Não vejo nenhuma aceleração em minha carga de trabalho. Por que?
.........................................................................

Certos códigos não terão benefícios perceptíveis.  Se seu código passa a
maior parte do tempo em operações de E/S ou já faz a maior parte de sua
computação em uma biblioteca de extensão C como NumPy, não haverá
acelerações significativas.  Atualmente, esse projeto é o que mais
beneficia as cargas de trabalho Python puro.

Além disso, os valores de desempenho py são uma média geométrica.  Mesmo
dentro dos benchmarks de pyperformance, alguns benchmarks desaceleraram
um pouco, enquanto outros aceleraram quase 2x!


File: python.info,  Node: Existe um compilador JIT?,  Prev: Não vejo nenhuma aceleração em minha carga de trabalho Por que?,  Up: FAQ

1.3.9.12 Existe um compilador JIT?
..................................

Não.  Ainda estamos explorando outras otimizações.


File: python.info,  Node: Sobre,  Prev: FAQ,  Up: CPython mais rápido

1.3.9.13 Sobre
..............

O Faster CPython explora otimizações para o *note CPython: 6f6.  A
equipe principal é financiada pela Microsoft para trabalhar nisso em
tempo integral.  Pablo Galindo Salgado também é financiado pela
Bloomberg LP para trabalhar no projeto em tempo parcial.  Finalmente,
muitos colaboradores são voluntários da comunidade.


File: python.info,  Node: Alterações de bytecode do CPython<3>,  Next: Descontinuados<3>,  Prev: CPython mais rápido,  Up: O que há de novo no Python 3 11

1.3.10 Alterações de bytecode do CPython
----------------------------------------

O bytecode agora contém entradas de cache inline, que assumem a forma
das instruções recém-adicionadas *note CACHE: 6f9.  Muitos códigos de
operações, ou 'opcodes', esperam ser seguidos por um número exato de
caches e instruem o interpretador a ignorá-los em tempo de execução.  Os
caches preenchidos podem parecer instruções arbitrárias, portanto, muito
cuidado deve ser tomado ao ler ou modificar o bytecode adaptativo bruto
que contém dados acelerados.

* Menu:

* Novos opcodes::
* Opcodes substituídos::
* Opcodes alterados/removidos::


File: python.info,  Node: Novos opcodes,  Next: Opcodes substituídos,  Up: Alterações de bytecode do CPython<3>

1.3.10.1 Novos opcodes
......................

   * ‘ASYNC_GEN_WRAP’, *note RETURN_GENERATOR: 6fc. e *note SEND: 6fd,
     usados em geradores e corrotinas.

   * *note COPY_FREE_VARS: 6fe, que evita precisar de código especial no
     lado do chamado para fechamentos.

   * *note JUMP_BACKWARD_NO_INTERRUPT: 6ff, para usasr em certos loops
     nos quais o tratamento de interrupções é indesejável.

   * *note MAKE_CELL: 700, para criar *note Objeto célula: 701.

   * *note CHECK_EG_MATCH: 702. e ‘PREP_RERAISE_STAR’, para manipular
     *note novos grupos de exceção e except*: 5a1, adicionados na PEP
     654(1).

   * *note PUSH_EXC_INFO: 703, para uso em manipuladores de exceção.

   * *note RESUME: 315, um 'no-op', para rastreamento interno, depuração
     e verificações de otimização.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0654/


File: python.info,  Node: Opcodes substituídos,  Next: Opcodes alterados/removidos,  Prev: Novos opcodes,  Up: Alterações de bytecode do CPython<3>

1.3.10.2 Opcodes substituídos
.............................

Opcode(s) substituído(s)                 Novo(s) opcode(s)                        Notas
                                                                                  
--------------------------------------------------------------------------------------------------------------------------------
                                                                                  
     ‘BINARY_*’                          *note BINARY_OP: 706.                    Substituiu todos os opcodes numéricos
     ‘INPLACE_*’                                                                  binários/no local por um único opcode
                                                                                  
                                                                                  
     ‘CALL_FUNCTION’                          *note CALL: 707.                    Separa a mudança de argumento para métodos
     ‘CALL_FUNCTION_KW’                       ‘KW_NAMES’                          da manipulação de argumentos nomeados;
     ‘CALL_METHOD’                            ‘PRECALL’                           permite uma melhor especialização dos
                                              *note PUSH_NULL: 708.               atendimentos
                                                                                  
                                                                                  
     ‘DUP_TOP’                                *note COPY: 709.                    Instruções de manipulação de pilha
     ‘DUP_TOP_TWO’                            *note SWAP: 70a.                    
     ‘ROT_TWO’                           
     ‘ROT_THREE’
     ‘ROT_FOUR’
     ‘ROT_N’

     ‘JUMP_IF_NOT_EXC_MATCH’                  *note CHECK_EXC_MATCH: 70b.         Agora efetua verificações, mas não pula
                                                                                  
                                                                                  
     ‘JUMP_ABSOLUTE’                          *note JUMP_BACKWARD: 70c.           Veja (1).  Variantes ‘TRUE’, ‘FALSE’,
     ‘POP_JUMP_IF_FALSE’                      ‘POP_JUMP_BACKWARD_IF_*’            ‘NONE’ e ‘NOT_NONE’ para cada direção
     ‘POP_JUMP_IF_TRUE’                       ‘POP_JUMP_FORWARD_IF_*’             
                                         
                                                                                  
     ‘SETUP_WITH’                        *note BEFORE_WITH: 70d.                  Configuração de bloco *note with: 5d2.
     ‘SETUP_ASYNC_WITH’                                                           

   ---------- Footnotes ----------

   (1) Todos os opcodes de salto agora são relativos, incluindo os
existentes ‘JUMP_IF_TRUE_OR_POP’ e ‘JUMP_IF_FALSE_OR_POP’.  O argumento
agora é um deslocamento da instrução atual em vez de um local absoluto.


File: python.info,  Node: Opcodes alterados/removidos,  Prev: Opcodes substituídos,  Up: Alterações de bytecode do CPython<3>

1.3.10.3 Opcodes alterados/removidos
....................................

   * Alterados *note MATCH_CLASS: 712. e *note MATCH_KEYS: 713. para não
     enviar mais um valor booleano adicional para indicar sucesso/falha.
     Em vez disso, ‘None’ é enviado em caso de falha no lugar da tupla
     de valores extraídos.

   * Alterados opcodes que funcionam com exceções para refleti-los agora
     sendo representados como um item na pilha em vez de três (consulte
     gh-89874(1)).

   * Removidos ‘COPY_DICT_WITHOUT_KEYS’, ‘GEN_START’, ‘POP_BLOCK’,
     ‘SETUP_FINALLY’ e ‘YIELD_FROM’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/89874


File: python.info,  Node: Descontinuados<3>,  Next: Pendente remoção no Python 3 12,  Prev: Alterações de bytecode do CPython<3>,  Up: O que há de novo no Python 3 11

1.3.11 Descontinuados
---------------------

Esta seção lista as APIs do Python que foram descontinuadas no Python
3.11.

As APIs C descontinuadas são *note listadas separadamente: 717.
* Menu:

* Linguagem/Embutidos::
* Módulos::
* Biblioteca Padrão::


File: python.info,  Node: Linguagem/Embutidos,  Next: Módulos,  Up: Descontinuados<3>

1.3.11.1 Linguagem/Embutidos
............................

   * O encadeamento de descritores *note classmethod: 166. (introduzido
     em bpo-19072(1)) agora foi descontinuado.  Ele não pode mais ser
     usado para agrupar outros descritores como *note property: 194.  O
     design principal desse recurso era falho e causava vários problemas
     posteriores.  Para “passar” um *note classmethod: 166, considere
     usar o atributo ‘__wrapped__’ que foi adicionado no Python 3.10.
     (Contribuição de Raymond Hettinger em gh-89519(2).)

   * Escapes octais em strings e bytes literais com valores maiores que
     ‘0o377’ (255 em decimal) agora produzem um *note
     DeprecationWarning: 1a5.  Em uma versão futura do Python, eles
     levantarão um *note SyntaxWarning: 466. e eventualmente um *note
     SyntaxError: 18d.  (Contribuição de Serhiy Storchaka em
     gh-81548(3).)

   * A delegação de *note int(): 257. para *note __trunc__(): 71b. agora
     foi descontinuada.  Chamar ‘int(a)’ quando ‘type(a)’ implementa
     ‘__trunc__()’, mas não *note __int__(): 71c. ou *note __index__():
     71d, agora levanta uma exceção *note DeprecationWarning: 1a5.
     (Contribuição de Zackery Spytz em bpo-44977(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19072

   (2) https://github.com/python/cpython/issues/89519

   (3) https://github.com/python/cpython/issues/81548

   (4) https://bugs.python.org/issue?@action=redirect&bpo=44977


File: python.info,  Node: Módulos,  Next: Biblioteca Padrão,  Prev: Linguagem/Embutidos,  Up: Descontinuados<3>

1.3.11.2 Módulos
................

   * PEP 594(1) levou à descontinuação dos seguintes módulos programados
     para remoção no Python 3.13:

     ‘aifc’                    ‘chunk’                   ‘msilib’                  ‘pipes’                   ‘telnetlib’
                                                                                                             
                                                                                                             
     ‘audioop’                 ‘crypt’                   ‘nis’                     ‘sndhdr’                  ‘uu’
                                                                                                             
                                                                                                             
     ‘cgi’                     ‘imghdr’                  ‘nntplib’                 ‘spwd’                    ‘xdrlib’
                                                                                                             
                                                                                                             
     ‘cgitb’                   ‘mailcap’                 ‘ossaudiodev’             ‘sunau’
                                                                                   

     (Contribuição de Brett Cannon em bpo-47061(2) e Victor Stinner em
     gh-68966(3).)

   * Os módulos ‘asynchat’, ‘asyncore’ e ‘smtpd’ foram descontinuados
     desde pelo menos o Python 3.6.  A documentação e os avisos de
     descontinuação foram atualizados para observar que serão removidos
     no Python 3.12.  (Contribuição de Hugo van Kemenade em
     bpo-47022(4).)

   * O pacote ‘lib2to3’ e a ferramenta ‘2to3’ agora foram descontinuados
     e podem não ser capazes de analisar o Python 3.10 ou mais recente.
     Veja PEP 617(5), apresentando o novo analisador GASE, para
     detalhes.  (Contribuição de Victor Stinner em bpo-40360(6).)

   * Módulos não documentados ‘sre_compile’, ‘sre_constants’ e
     ‘sre_parse’ agora fora descontinuados.  (Contribuição de Serhiy
     Storchaka em bpo-47152(7).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=47061

   (3) https://github.com/python/cpython/issues/68966

   (4) https://bugs.python.org/issue?@action=redirect&bpo=47022

   (5) https://peps.python.org/pep-0617/

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40360

   (7) https://bugs.python.org/issue?@action=redirect&bpo=47152


File: python.info,  Node: Biblioteca Padrão,  Prev: Módulos,  Up: Descontinuados<3>

1.3.11.3 Biblioteca Padrão
..........................

   * Os itens a seguir foram descontinuados em *note configparser: 22.
     desde o Python 3.2.  Seus avisos de descontinuação agora foram
     atualizados para observar que serão removidos no Python 3.12:

        * a classe ‘configparser.SafeConfigParser’

        * a propriedade ‘configparser.ParsingError.filename’

        * o método ‘configparser.RawConfigParser.readfp()’

     (Contribuição de Hugo van Kemenade em bpo-45173(1).)

   * ‘configparser.LegacyInterpolation’ foi descontinuada na docstring
     desde o Python 3.2, e não está listada na documentação do *note
     configparser: 22.  Agora ela emite um *note DeprecationWarning:
     1a5. e será removida no Python 3.13.  Use *note
     configparser.BasicInterpolation: 722. ou *note
     configparser.ExtendedInterpolation: 723.  (Contribuição de Hugo van
     Kemenade em bpo-46607(2).)

   * O antigo conjunto de funções *note importlib.resources: 7b. foi
     descontinuado em favor das substituições adicionadas no Python 3.9
     e será removido em uma versão futura do Python, devido ao não
     suporte de recursos localizados nos subdiretórios do pacote:

        * ‘importlib.resources.contents()’

        * ‘importlib.resources.is_resource()’

        * ‘importlib.resources.open_binary()’

        * ‘importlib.resources.open_text()’

        * ‘importlib.resources.read_binary()’

        * ‘importlib.resources.read_text()’

        * ‘importlib.resources.path()’

   * A função *note locale.getdefaultlocale(): 2d9. foi descontinuada e
     será removida no Python 3.15.  Use as funções *note
     locale.setlocale(): 2db, *note locale.getpreferredencoding(False):
     53a. e *note locale.getlocale(): 2da.  (Contribuição de Victor
     Stinner em gh-90817(3).)

   * A função ‘locale.resetlocale()’ foi descontinuada e será removida
     no Python 3.13.  Use ‘locale.setlocale(locale.LC_ALL, "")’.
     (Contribuição de Victor Stinner em gh-90817(4).)

   * Regras mais rígidas agora serão aplicadas para referências
     numéricas de grupos e nomes de grupos em *note expressões
     regulares: 724.  Apenas sequências de dígitos ASCII serão aceitas
     como referência numérica, e o nome do grupo em padrões *note bytes:
     1c2. e strings de substituição podem conter apenas letras ASCII,
     dígitos e sublinhados.  Por enquanto, um aviso de descontinuação é
     levantado para a sintaxe que viola essas regras.  (Contribuição de
     Serhiy Storchaka em gh-91760(5).)

   * No módulo *note re: b9, a função ‘re.template()’ e os sinalizadores
     ‘re.TEMPLATE’ e ‘re.T’ correspondentes foram descontinuados, pois
     não foram documentados e careciam da um propósito óbvio.  Eles
     serão removidos no Python 3.13.  (Contribuição de Serhiy Storchaka
     e Miro Hrončok em gh-92728(6).)

   * ‘turtle.settiltangle()’ foi descontinuada desde o Python 3.1; ela
     agora emite um aviso de descontinuação e será removida no Python
     3.13.  Em vez dela, use *note turtle.tiltangle(): 725. (foi marcada
     anteriormente incorretamente como descontinuada e sua docstring
     agora está corrigida).  (Contribuição de Hugo van Kemenade em
     bpo-45837(7).)

   * *note typing.Text: 30b, que existe apenas para fornecer suporte de
     compatibilidade entre o código Python 2 e Python 3, foi
     descontinuada nesta versão.  Sua remoção não está planejada, mas os
     usuários são encorajados a usar *note str: 44c. sempre que
     possível.  (Contribuição de Alex Waygood em gh-92332(8).)

   * A sintaxe do argumento nomeado para a construção de tipos *note
     typing.TypedDict: 162. foi descontinuado neste versão.  O suporte
     será removido no Python 3.13.  (Contribuição de Jingchen Ye em
     gh-90224(9).)

   * ‘webbrowser.MacOSX’ foi descontinuada e será removida no Python
     3.13.  Ela não foi testada, não foi documentada e não é usada pelo
     próprio *note webbrowser: 115.  (Contribuição de Dong-hee Na em
     bpo-42255(10).)

   * O comportamento de retornar um valor de um dos métodos de teste de
     *note TestCase: 44f. e *note IsolatedAsyncioTestCase: 30c.
     (diferente do valor padrão ‘None’) foi descontinuado nesta versão.

   * Foram descontinuadas as seguintes funções *note unittest: 106. não
     formalmente documentadas, agendadas para remoção no Python 3.13:

        * ‘unittest.findTestCases()’

        * ‘unittest.makeSuite()’

        * ‘unittest.getTestCaseNames()’

     Em vez delas, use os métodos de *note TestLoader: 28e.:

        * *note unittest.TestLoader.loadTestsFromModule(): 28f.

        * *note unittest.TestLoader.loadTestsFromTestCase(): 290.

        * *note unittest.TestLoader.getTestCaseNames(): 291.

     (Contribuição de Erlend E. Aasland em bpo-5846(11).)

   * ‘unittest.TestProgram.usageExit()’ foi marcado como descontinuado,
     para ser removido em 3.13.  (Contribuição de Carlos Damázio em
     gh-67048(12).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45173

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46607

   (3) https://github.com/python/cpython/issues/90817

   (4) https://github.com/python/cpython/issues/90817

   (5) https://github.com/python/cpython/issues/91760

   (6) https://github.com/python/cpython/issues/92728

   (7) https://bugs.python.org/issue?@action=redirect&bpo=45837

   (8) https://github.com/python/cpython/issues/92332

   (9) https://github.com/python/cpython/issues/90224

   (10) https://bugs.python.org/issue?@action=redirect&bpo=42255

   (11) https://bugs.python.org/issue?@action=redirect&bpo=5846

   (12) https://github.com/python/cpython/issues/67048


File: python.info,  Node: Pendente remoção no Python 3 12,  Next: Removidos<3>,  Prev: Descontinuados<3>,  Up: O que há de novo no Python 3 11

1.3.12 Pendente remoção no Python 3.12
--------------------------------------

As seguintes APIs do Python foram descontinuadas em versões anteriores
do Python e serão removidas no Python 3.12.

As APIs C com remoção pendente são *note listadas separadamente: 729.

   * O módulo ‘asynchat’

   * O módulo ‘asyncore’

   * *note Todo o pacote distutils: 72a.

   * O módulo ‘imp’

   * O espaço de nomes *note typing.io: 72b.

   * O espaço de nomes *note typing.re: 72c.

   * ‘cgi.log()’

   * ‘importlib.find_loader()’

   * ‘importlib.abc.Loader.module_repr()’

   * ‘importlib.abc.MetaPathFinder.find_module()’

   * ‘importlib.abc.PathEntryFinder.find_loader()’

   * ‘importlib.abc.PathEntryFinder.find_module()’

   * ‘importlib.machinery.BuiltinImporter.find_module()’

   * ‘importlib.machinery.BuiltinLoader.module_repr()’

   * ‘importlib.machinery.FileFinder.find_loader()’

   * ‘importlib.machinery.FileFinder.find_module()’

   * ‘importlib.machinery.FrozenImporter.find_module()’

   * ‘importlib.machinery.FrozenLoader.module_repr()’

   * ‘importlib.machinery.PathFinder.find_module()’

   * ‘importlib.machinery.WindowsRegistryFinder.find_module()’

   * ‘importlib.util.module_for_loader()’

   * ‘importlib.util.set_loader_wrapper()’

   * ‘importlib.util.set_package_wrapper()’

   * ‘pkgutil.ImpImporter’

   * ‘pkgutil.ImpLoader’

   * ‘pathlib.Path.link_to()’

   * ‘sqlite3.enable_shared_cache()’

   * ‘sqlite3.OptimizedUnicode()’

   * Variável de ambiente ‘PYTHONTHREADDEBUG’

   * Os seguintes aliases foram descontinuados no *note unittest: 106.:

          Apelido descontinuado            Método                              Descontinuado em
                                                                               
          -----------------------------------------------------------------------------------------
                                                                               
          ‘failUnless’                     *note assertTrue(): 527.            3.1
                                                                               
                                                                               
          ‘failIf’                         *note assertFalse(): 528.           3.1
                                                                               
                                                                               
          ‘failUnlessEqual’                *note assertEqual(): 529.           3.1
                                                                               
                                                                               
          ‘failIfEqual’                    *note assertNotEqual(): 52a.        3.1
                                                                               
                                                                               
          ‘failUnlessAlmostEqual’          *note assertAlmostEqual(): 52b.     3.1
                                                                               
                                                                               
          ‘failIfAlmostEqual’              *note assertNotAlmostEqual(): 52c.  3.1
                                                                               
                                                                               
          ‘failUnlessRaises’               *note assertRaises(): 52d.          3.1
                                                                               
                                                                               
          ‘assert_’                        *note assertTrue(): 527.            3.2
                                                                               
                                                                               
          ‘assertEquals’                   *note assertEqual(): 529.           3.2
                                                                               
                                                                               
          ‘assertNotEquals’                *note assertNotEqual(): 52a.        3.2
                                                                               
                                                                               
          ‘assertAlmostEquals’             *note assertAlmostEqual(): 52b.     3.2
                                                                               
                                                                               
          ‘assertNotAlmostEquals’          *note assertNotAlmostEqual(): 52c.  3.2
                                                                               
                                                                               
          ‘assertRegexpMatches’            *note assertRegex(): 52e.           3.2
                                                                               
                                                                               
          ‘assertRaisesRegexp’             *note assertRaisesRegex(): 52f.     3.2
                                                                               
                                                                               
          ‘assertNotRegexpMatches’         *note assertNotRegex(): 530.        3.5
                                                                               


File: python.info,  Node: Removidos<3>,  Next: Portando para Python 3 11,  Prev: Pendente remoção no Python 3 12,  Up: O que há de novo no Python 3 11

1.3.13 Removidos
----------------

Esta seção lista as APIs do Python que foram removidas no Python 3.11.

As APIs C removidas são *note listadas separadamente: 730.

   * Removido o *note decorador: 731. ‘@asyncio.coroutine()’ permitindo
     que corrotinas baseadas em gerador legado sejam compatíveis com o
     código *note async: 732. / *note await: 1b9.  A função foi
     descontinuada desde o Python 3.8 e a remoção foi inicialmente
     agendada para o Python 3.10.  Use *note async def: 5d1. em vez
     disso.  (Contribuição de Illia Volochii em bpo-43216(1).)

   * Removida ‘asyncio.coroutines.CoroWrapper’, que era usada para
     encapsular objetos de corrotina baseados em gerador legado no modo
     de depuração.  (Contribuição de Illia Volochii em bpo-43216(2).)

   * Devido a preocupações significativas de segurança, o parâmetro
     'reuse_address' de *note asyncio.loop.create_datagram_endpoint():
     733, desabilitado no Python 3.9, agora foi totalmente removido.
     Isto é devido ao comportamento da opção de socket ‘SO_REUSEDDR’ no
     UDP. (Contribuição de Hugo van Kemenade em bpo-45129(3).)

   * Removido o módulo ‘binhex’, descontinuado no Python 3.9.  Também
     foram removidas as funções *note binascii: 10. relacionadas e
     igualmente descontinuadas:

        * ‘binascii.a2b_hqx()’

        * ‘binascii.b2a_hqx()’

        * ‘binascii.rlecode_hqx()’

        * ‘binascii.rldecode_hqx()’

     A função *note binascii.crc_hqx(): 734. continua disponível.

     (Contribuição de Victor Stinner em bpo-45085(4).)

   * Removido o comando ‘bdist_msi’ do ‘distutils’ que foi descontinuado
     no Python 3.9.  Em vez disso, use ‘bdist_wheel’ (pacotes wheel).
     (Contribuição de Hugo van Kemenade em bpo-45124(5).)

   * Removidos os métodos *note __getitem__(): 283. das classes *note
     xml.dom.pulldom.DOMEventStream: 735, *note
     wsgiref.util.FileWrapper: 736. e *note fileinput.FileInput: 737,
     descontinuados desde o Python 3.9 .  (Contribuição de Hugo van
     Kemenade em bpo-45132(6).)

   * Removidas as funções descontinuadas ‘lgettext()’, ‘ldgettext()’,
     ‘lngettext()’ e ‘ldngettext()’ de *note gettext: 63.  Também
     removidas a função ‘bind_textdomain_codeset()’, os métodos
     ‘NullTranslations.output_charset()’ e
     ‘NullTranslations.set_output_charset()’, e o parâmetro 'codeset' de
     ‘translation()’ e ‘install()’, já que eles são usados apenas para
     as funções ‘l*gettext()’.  (Contribuição de Dong-hee Na e Serhiy
     Storchaka em bpo-44235(7).)

   * Removido do módulo *note inspect: 7e.:

        * A função ‘getargspec()’, descontinuada desde o Python 3.0; use
          *note inspect.signature(): 738. ou *note
          inspect.getfullargspec(): 739.

        * A função ‘formatargspec()’, descontinuada desde o Python 3.5;
          use a função *note inspect.signature(): 738. ou o objeto *note
          inspect.Signature: 1cf. diretamente.

        * Os métodos não documentados ‘Signature.from_builtin()’ e
          ‘Signature.from_function()’, descontinuados desde o Python
          3.5; use o método *note Signature.from_callable(): 73a.

     (Contribuição de Hugo van Kemenade em bpo-45320(8).)

   * Removido o método *note __class_getitem__(): 73b. de *note
     pathlib.PurePath: 4a6, pois não era usado e foi adicionado por
     engano em versões anteriores.  (Contribuição de Nikita Sobolev em
     bpo-46483(9).)

   * Removida a classe ‘MailmanProxy’ do módulo ‘smtpd’, pois ela não
     pode ser usada sem o pacote ‘mailman’ externo.  (Contribuição de
     Dong-hee Na em bpo-35800(10).)

   * Removido o método descontinuado ‘split()’ de ‘_tkinter.TkappType’.
     (Contribuição de Erlend E. Aasland em bpo-38371(11).)

   * Removido o suporte a pacote de espaço de nomes da descoberta de
     *note unittest: 106.  Foi introduzido no Python 3.4, mas está
     quebrado desde o Python 3.7.  (Contribuição de Inada Naoki em
     bpo-23882(12).)

   * Removido o método privado não documentado ‘float.__set_format__()’,
     anteriormente conhecido como ‘float.__setformat__()’ no Python 3.7.
     Sua docstring dizia: “Você provavelmente não quer usar esta função.
     Ela existe principalmente para ser usada na conjunto de testes do
     Python.” (Contribuição de Victor Stinner em bpo-46852(13).)

   * O sinalizador de configuração
     ‘--experimental-isolated-subinterpreters’ e a macro
     ‘EXPERIMENTAL_ISOLATED_SUBINTERPRETERS’ correspondente foram
     removidos.

   * Pynche(14) – O Pythonically Natural Color and Hue Editor – foi
     removido de ‘Tools/scripts’ e está sendo desenvolvido
     independentemente(15) da árvore fonte do Python.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43216

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43216

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45129

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45085

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45124

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45132

   (7) https://bugs.python.org/issue?@action=redirect&bpo=44235

   (8) https://bugs.python.org/issue?@action=redirect&bpo=45320

   (9) https://bugs.python.org/issue?@action=redirect&bpo=46483

   (10) https://bugs.python.org/issue?@action=redirect&bpo=35800

   (11) https://bugs.python.org/issue?@action=redirect&bpo=38371

   (12) https://bugs.python.org/issue?@action=redirect&bpo=23882

   (13) https://bugs.python.org/issue?@action=redirect&bpo=46852

   (14) https://pypi.org/project/Pynche/

   (15) https://gitlab.com/warsaw/pynche/-/tree/main


File: python.info,  Node: Portando para Python 3 11,  Next: Mudanças na construção<3>,  Prev: Removidos<3>,  Up: O que há de novo no Python 3 11

1.3.14 Portando para Python 3.11
--------------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções de bugs na API do Python que podem exigir alterações em seu
código Python.

As notas de portabilidade para a API C são *note listadas separadamente:
73f.

   * *note open(): 51c, *note io.open(): 51d, *note codecs.open(): 740.
     e *note fileinput.FileInput: 737. não aceitam mais ‘'U'’ (“nova
     linha universal”) em o modo de arquivo.  No Python 3, o modo “nova
     linha universal” é usado por padrão sempre que um arquivo é aberto
     no modo de texto, e o sinalizador ‘'U'’ foi descontinuado desde o
     Python 3.3.  O *note parâmetro de nova linha: 741. para essas
     funções controla como as novas linhas universais funcionam.
     (Contribuição de Victor Stinner em bpo-37330(1).)

   * As posições do nó da *note ast.AST: 1a6. agora são validadas quando
     fornecidas para *note compile(): 192. e outras funções
     relacionadas.  Se posições inválidas forem detectadas, uma exceção
     *note ValueError: 202. será levantado.  (Contribuição de Pablo
     Galindo em gh-93351(2))

   * Proibido passar executores que não sejam *note
     concurrent.futures.ThreadPoolExecutor: 742. para *note
     asyncio.loop.set_default_executor(): 743. após uma descontinuação
     no Python 3.8.  (Contribuição de Illia Volochii em bpo-43234(3).)

   * *note calendar: 14.: As classes *note calendar.LocaleTextCalendar:
     744. e *note calendar.LocaleHTMLCalendar: 745. agora usam *note
     locale.getlocale(): 2da, em vez de usar *note
     locale.getdefaultlocale(): 2d9, se nenhuma localidade é
     especificada.  (Contribuição de Victor Stinner em bpo-46659(4).)

   * O módulo *note pdb: a5. agora lê o arquivo de configuração ‘.pdbrc’
     com a codificação ‘'UTF-8'’.  (Contribuição de Srinivas Reddy
     Thatiparty (శ్రీనివాస్ రెడ్డి తాటిపర్తి) em bpo-41137(5).)

   * O parâmetro 'population' de *note random.sample(): 746. deve ser
     uma sequência, e a conversão automática de *note set: 5d9.s para
     *note list: 611.s não é mais suportada.  Além disso, se o tamanho
     da amostra for maior que o tamanho da população, uma exceção *note
     ValueError: 202. é levantada.  (Contribuição de Raymond Hettinger
     em bpo-40465(6).)

   * O parâmetro opcional 'random' de *note random.shuffle(): 747. foi
     removido.  Anteriormente, era uma função aleatória arbitrária a ser
     usada para o shuffle; agora, *note random.random(): 748. (seu
     padrão anterior) sempre será usado.

   * Em *note Sintaxe de expressão regular: 724. do *note re: b9,
     sinalizadores globais inline (por exemplo, ‘(?i)’) agora só podem
     ser usados no início de expressões regulares.  Se uso em outro
     lugar foi descontinuado no Python 3.6.  (Contribuição de Serhiy
     Storchaka em bpo-47066(7).)

   * No módulo *note re: b9, vários bugs de longa data foram corrigidos
     que, em casos raros, poderiam fazer com que os grupos de captura
     obtivessem o resultado errado.  Portanto, isso pode alterar a saída
     capturada nesses casos.  (Contribuição de Ma Lin em bpo-35859(8).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37330

   (2) https://github.com/python/cpython/issues/93351

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43234

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46659

   (5) https://bugs.python.org/issue?@action=redirect&bpo=41137

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40465

   (7) https://bugs.python.org/issue?@action=redirect&bpo=47066

   (8) https://bugs.python.org/issue?@action=redirect&bpo=35859


File: python.info,  Node: Mudanças na construção<3>,  Next: Alterações na API C<5>,  Prev: Portando para Python 3 11,  Up: O que há de novo no Python 3 11

1.3.15 Mudanças na construção
-----------------------------

   * CPython agora tem suporte a Tier 3(1) da PEP 11(2) para compilação
     cruzada para as plataformas WebAssembly(3) Emscripten(4)
     (‘wasm32-unknown-emscripten’, ou seja, Python no navegador) e
     WebAssembly System Interface (WASI)(5) (‘wasm32-unknown-wasi’).  O
     esforço é inspirado em trabalhos anteriores como Pyodide(6).  Essas
     plataformas fornecem um subconjunto limitado de APIs POSIX; Os
     recursos e módulos das bibliotecas padrão do Python relacionados a
     redes, processos, encadeamento, sinais, mmap e usuários/grupos não
     estão disponíveis ou não funcionam.  (Emscripten contribuído por
     Christian Heimes e Ethan Smith em gh-84461(7) e WASI contribuído
     por Christian Heimes em gh-90473(8); plataformas promovidas em
     gh-95085(9))

   * A construção do CPython agora requer:

        * Um compilador C11(10).  Recursos C11 opcionais(11) não são
          necessários.  (Contribuição de Victor Stinner em
          bpo-46656(12), bpo-45440(13) e bpo-46640(14).)

        * Suporte para números de ponto flutuante IEEE 754(15).
          (Contribuição de Victor Stinner em bpo-46917(16).)

   * A macro ‘Py_NO_NAN’ foi removida.  Como o CPython agora requer
     pontos flutuantes de IEEE 754, os valores NaN estão sempre
     disponíveis.  (Contribuição de Victor Stinner em bpo-46656(17).)

   * O pacote *note tkinter: f0. agora requer Tcl/Tk(18) versão 8.5.12
     ou mais recente.  (Contribuição de Serhiy Storchaka em
     bpo-46996(19).)

   * Dependências de construção, sinalizadores de compilador e
     sinalizadores de vinculador para a maioria dos módulos de extensão
     stdlib agora são detectados pelo ‘configure’.  Os sinalizadores, ou
     'flags', de libffi, libnsl, libsqlite3, zlib, bzip2, liblzma,
     libcrypt, Tcl/Tk e uuid são detectados por pkg-config(20) (Quando
     disponível).  *note tkinter: f0. agora requer um comando pkg-config
     para detectar configurações de desenvolvimento para cabeçalhos e
     bibliotecas Tcl/Tk(21).  (Contribuição de Christian Heimes e Erlend
     Egeberg Aasland em bpo-45847(22), bpo-45747(23) e bpo-45763(24).)

   * libpython não está mais vinculado a libcrypt.  (Contribuição de
     Mike Gilbert em bpo-45433(25).)

   * O CPython agora pode ser construído com a opção ThinLTO(26)
     passando ‘thin’ para *note -with-lto: 74b, ou seja,
     ‘--with-lto=thin’.  (Contribuição de Donghee Na e Brett Holman em
     bpo-44340(27).)

   * Freelists para structs de objeto agora podem ser desabilitadas.
     Uma nova opção *note -without-freelists: 74c. do ‘configure’ pode
     ser usada para desabilitar todas as freelists, exceto a tupla
     singleton vazia.  (Contribuição de Christian Heimes em
     bpo-45522(28).)

   * ‘Modules/Setup’ e ‘Modules/makesetup’ foram melhorados e amarrados.
     Módulos de extensão agora podem ser construídos através do
     ‘makesetup’.  Todos, exceto alguns módulos de teste, podem ser
     vinculados estaticamente em um binário principal ou biblioteca.
     (Contribuição de Brett Cannon e Christian Heimes em bpo-45548(29),
     bpo-45570(30), bpo-45571(31) e bpo-43974(32).)

          Nota: Use as variáveis de ambiente ‘TCLTK_CFLAGS’ e
          ‘TCLTK_LIBS’ para especificar manualmente a localização dos
          cabeçalhos e bibliotecas Tcl/Tk.  As opções ‘configure’
          ‘--with-tcltk-includes’ e ‘--with-tcltk-libs’ foram removidas.

          No RHEL 7 e CentOS 7 os pacotes de desenvolvimento não
          fornecem ‘tcl.pc’ e ‘tk.pc’; use ‘TCLTK_LIBS="-ltk8.5
          -ltkstub8.5 -ltcl8.5"’.  O diretório ‘Misc/rhel7’ contém
          arquivos ‘.pc’ e instruções sobre como construir Python com
          RHEL 7’s e CentOS 7’s Tcl/Tk e OpenSSL.

   * O CPython agora usará dígitos de 30 bits por padrão para a
     implementação de *note int: 257. do Python.  Anteriormente, o
     padrão era usar dígitos de 30 bits em plataformas com
     ‘SIZEOF_VOID_P >= 8’ e, caso contrário, dígitos de 15 bits.  Ainda
     é possível solicitar explicitamente o uso de dígitos de 15 bits
     através da opção *note -enable-big-digits: 74d. para o script de
     configuração ou (para Windows) a variável ‘PYLONG_BITS_IN_DIGIT’ em
     ‘PC/pyconfig.h’, mas esta opção pode ser removida em algum momento
     no futuro.  (Contribuição de Mark Dickinson em bpo-45569(33).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0011/#tier-3

   (2) https://peps.python.org/pep-0011/

   (3) https://webassembly.org/

   (4) https://emscripten.org/

   (5) https://wasi.dev/

   (6) https://pyodide.org/

   (7) https://github.com/python/cpython/issues/84461

   (8) https://github.com/python/cpython/issues/90473

   (9) https://github.com/python/cpython/issues/95085

   (10) https://en.cppreference.com/w/c/11

   (11) 
https://en.wikipedia.org/wiki/C11_(C_standard_revision)#Optional_features

   (12) https://bugs.python.org/issue?@action=redirect&bpo=46656

   (13) https://bugs.python.org/issue?@action=redirect&bpo=45440

   (14) https://bugs.python.org/issue?@action=redirect&bpo=46640

   (15) https://en.wikipedia.org/wiki/IEEE_754

   (16) https://bugs.python.org/issue?@action=redirect&bpo=46917

   (17) https://bugs.python.org/issue?@action=redirect&bpo=46656

   (18) https://www.tcl.tk

   (19) https://bugs.python.org/issue?@action=redirect&bpo=46996

   (20) https://www.freedesktop.org/wiki/Software/pkg-config/

   (21) https://www.tcl.tk

   (22) https://bugs.python.org/issue?@action=redirect&bpo=45847

   (23) https://bugs.python.org/issue?@action=redirect&bpo=45747

   (24) https://bugs.python.org/issue?@action=redirect&bpo=45763

   (25) https://bugs.python.org/issue?@action=redirect&bpo=45433

   (26) https://clang.llvm.org/docs/ThinLTO.html

   (27) https://bugs.python.org/issue?@action=redirect&bpo=44340

   (28) https://bugs.python.org/issue?@action=redirect&bpo=45522

   (29) https://bugs.python.org/issue?@action=redirect&bpo=45548

   (30) https://bugs.python.org/issue?@action=redirect&bpo=45570

   (31) https://bugs.python.org/issue?@action=redirect&bpo=45571

   (32) https://bugs.python.org/issue?@action=redirect&bpo=43974

   (33) https://bugs.python.org/issue?@action=redirect&bpo=45569


File: python.info,  Node: Alterações na API C<5>,  Next: Alterações notáveis no 3 11 4,  Prev: Mudanças na construção<3>,  Up: O que há de novo no Python 3 11

1.3.16 Alterações na API C
--------------------------

* Menu:

* Novas funcionalidades: Novas funcionalidades<6>.
* Portando para Python 3.11: Portando para Python 3 11<2>.
* Descontinuados: Descontinuados<4>.
* Pendente remoção no Python 3.12: Pendente remoção no Python 3 12<2>.
* Removidos: Removidos<4>.


File: python.info,  Node: Novas funcionalidades<6>,  Next: Portando para Python 3 11<2>,  Up: Alterações na API C<5>

1.3.16.1 Novas funcionalidades
..............................

   * Adiciona uma nova função *note PyType_GetName(): 752. para obter o
     nome curto do tipo.  (Contribuição de Hai Shi em bpo-42035(1).)

   * Adiciona uma nova função *note PyType_GetQualName(): 753. para
     obter o nome qualificado do tipo.  (Contribuição de Hai Shi em
     bpo-42035(2).)

   * Adiciona novas funções *note PyThreadState_EnterTracing(): 754. e
     *note PyThreadState_LeaveTracing(): 755. à API C limitada para
     suspender e retomar rastreamento e criação de perfil.
     (Contribuição de Victor Stinner em bpo-43760(3).)

   * Adicionada a constante *note Py_Version: 756. que possui o mesmo
     valor que *note PY_VERSION_HEX: 757.  (Contribuição de Gabriele N.
     Tornetta em bpo-43931(4).)

   * *note Py_buffer: 758. e APIs agora fazem parte da API limitada e da
     ABI estável:

        * *note PyObject_CheckBuffer(): 398.

        * *note PyObject_GetBuffer(): 399.

        * *note PyBuffer_GetPointer(): 759.

        * *note PyBuffer_SizeFromFormat(): 75a.

        * *note PyBuffer_ToContiguous(): 75b.

        * *note PyBuffer_FromContiguous(): 75c.

        * *note PyObject_CopyData(): 75d.

        * *note PyBuffer_IsContiguous(): 75e.

        * *note PyBuffer_FillContiguousStrides(): 75f.

        * *note PyBuffer_FillInfo(): 760.

        * *note PyBuffer_Release(): 39a.

        * *note PyMemoryView_FromBuffer(): 761.

        * Slotes de tipo *note bf_getbuffer: 762. e *note
          bf_releasebuffer: 763.

     (Contribuição de Christian Heimes em bpo-45459(5).)

   * Adicionada a função *note PyType_GetModuleByDef(): 394, utilizada
     para obter o módulo no qual um método foi definido, nos casos em
     que esta informação não está disponível diretamente (via *note
     PyCMethod: 764.).  (Contribuição de Petr Viktorin em bpo-46613(6).)

   * Adiciona novas funções para compactar e desempacotar double C
     (serializar e desserializar): *note PyFloat_Pack2(): 765, *note
     PyFloat_Pack4(): 766, *note PyFloat_Pack8(): 767, *note
     PyFloat_Unpack2(): 768. , *note PyFloat_Unpack4(): 769. e *note
     PyFloat_Unpack8(): 76a.  (Contribuição de Victor Stinner em
     bpo-46906(7).)

   * Adiciona novas funções para obter atributos do objeto quadro: *note
     PyFrame_GetBuiltins(): 76b, *note PyFrame_GetGenerator(): 76c,
     *note PyFrame_GetGlobals(): 76d, *note PyFrame_GetLasti(): 76e.

   * Adicionadas duas novas funções para obter e definir a instância de
     exceção ativa: *note PyErr_GetHandledException(): 76f. e *note
     PyErr_SetHandledException(): 770.  Estas são alternativas para
     *note PyErr_SetExcInfo(): 771. e *note PyErr_GetExcInfo(): 772. que
     funcionam com a representação de tuplas de 3 elementos legadas de
     exceções.  (Contribuição de Irit Katriel em bpo-46343(8).)

   * Adicionada o membro *note PyConfig.safe_path: 773.  (Contribuição
     de Victor Stinner em gh-57684(9).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42035

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42035

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43760

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43931

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45459

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46613

   (7) https://bugs.python.org/issue?@action=redirect&bpo=46906

   (8) https://bugs.python.org/issue?@action=redirect&bpo=46343

   (9) https://github.com/python/cpython/issues/57684


File: python.info,  Node: Portando para Python 3 11<2>,  Next: Descontinuados<4>,  Prev: Novas funcionalidades<6>,  Up: Alterações na API C<5>

1.3.16.2 Portando para Python 3.11
..................................

   * Algumas macros foram convertidas em funções inline estáticas para
     evitar armadilhas de macro(1).  A alteração deve ser transparente
     para os usuários, pois as funções de substituição converterão seus
     argumentos para os tipos esperados para evitar avisos do compilador
     devido a verificações de tipo estático.  No entanto, quando a API C
     limitada é definida como >=3.11, essas conversões não são feitas e
     os chamadores precisarão converter argumentos para seus tipos
     esperados.  Veja PEP 670(2) para mais detalhes.  (Contribuição de
     Victor Stinner e Erlend E. Aasland em gh-89653(3).)

   * *note PyErr_SetExcInfo(): 771. não usa mais os argumentos ‘type’ e
     ‘traceback’, o interpretador agora deriva esses valores da
     instância de exceção (o argumento ‘value’).  A função ainda rouba
     referências de todos os três argumentos.  (Contribuição de Irit
     Katriel em bpo-45711(4).)

   * *note PyErr_GetExcInfo(): 772. agora deriva os campos ‘type’ e
     ‘traceback’ do resultado da instância de exceção (o campo ‘value’).
     (Contribuição de Irit Katriel em bpo-45711(5).)

   * *note _frozen: 775. tem um novo campo ‘is_package’ para indicar se
     o módulo frozen é ou não um pacote.  Anteriormente, um valor
     negativo no campo ‘size’ era o indicador.  Agora apenas valores não
     negativos serão usados para ‘size’.  (Contribuição de Kumar Aditya
     em bpo-46608(6).)

   * *note _PyFrameEvalFunction(): 776. agora usa ‘_PyInterpreterFrame*’
     como seu segundo parâmetro, em vez de ‘PyFrameObject*’.  Veja PEP
     523(7) para mais detalhes de como usar este tipo de ponteiro de
     função.

   * ‘PyCode_New()’ e ‘PyCode_NewWithPosOnlyArgs()’ agora recebem um
     argumento adicional ‘exception_table’.  O uso dessas funções deve
     ser evitado, se possível.  Para obter um objeto código
     personalizado: crie um objeto código usando o compilador e obtenha
     uma versão modificada com o método ‘replace’.

   * *note PyCodeObject: 777. não possui mais os campos ‘co_code’,
     ‘co_varnames’, ‘co_cellvars’ e ‘co_freevars’.  Em vez disso, use
     *note PyCode_GetCode(): 778, *note PyCode_GetVarnames(): 779, *note
     PyCode_GetCellvars(): 77a. e *note PyCode_GetFreevars(): 77b.
     respectivamente para acessá-los por meio da API C. (Contribuição de
     Brandt Bucher em bpo-46841(8) e Ken Jin em gh-92154(9) e
     gh-94936(10).)

   * As antigas macros trashcan
     (‘Py_TRASHCAN_SAFE_BEGIN’/‘Py_TRASHCAN_SAFE_END’) foram
     descontinuadas.  Elas devem ser substituídas pelas novas macros
     ‘Py_TRASHCAN_BEGIN’ e ‘Py_TRASHCAN_END’.

     Uma função tp_dealloc que possui as macros antigas, como:

          static void
          dealocador_de_meutipo(meutipo *p)
          {
              PyObject_GC_UnTrack(p);
              Py_TRASHCAN_SAFE_BEGIN(p);
              ...
              Py_TRASHCAN_SAFE_END
          }

     deve migrar para as novas macros da seguinte forma:

          static void
          dealocador_de_meutipo(meutipo *p)
          {
              PyObject_GC_UnTrack(p);
              Py_TRASHCAN_BEGIN(p, dealocador_de_meutipo);
              ...
              Py_TRASHCAN_END
          }

     Observe que ‘Py_TRASHCAN_BEGIN’ tem um segundo argumento que deve
     ser a função de desalocação em que está.

     Para oferecer suporte a versões mais antigas do Python na mesma
     base de código, você pode definir as seguintes macros e usá-las em
     todo o código (crédito: elas foram copiadas da base de código do
     ‘mypy’):

          #if PY_VERSION_HEX >= 0x03080000
          #  define CPy_TRASHCAN_BEGIN(op, dealloc) Py_TRASHCAN_BEGIN(op, dealloc)
          #  define CPy_TRASHCAN_END(op) Py_TRASHCAN_END
          #else
          #  define CPy_TRASHCAN_BEGIN(op, dealloc) Py_TRASHCAN_SAFE_BEGIN(op)
          #  define CPy_TRASHCAN_END(op) Py_TRASHCAN_SAFE_END(op)
          #endif

   * A função *note PyType_Ready(): 77c. agora levanta um erro se um
     tipo é definido com o sinalizador *note Py_TPFLAGS_HAVE_GC: 77d.
     definido, mas não tem função transversal (*note
     PyTypeObject.tp_traverse: 77e.).  (Contribuição de Victor Stinner
     em bpo-44263(11).)

   * Tipos de heap com o sinalizador *note Py_TPFLAGS_IMMUTABLETYPE:
     3c2. agora podem herdar o protocolo vectorcall da PEP 590(12).
     Anteriormente, isso só era possível para *note tipos estáticos:
     77f.  (Contribuição de Erlend E. Aasland em bpo-43908(13))

   * Uma vez que *note Py_TYPE(): 780. é alterada para uma função
     estática inline, ‘Py_TYPE(obj) = new_type’ deve ser substituído por
     ‘Py_SET_TYPE(obj, new_type)’: consulte a função *note
     Py_SET_TYPE(): 781. (disponível desde Python 3.9).  Para
     compatibilidade com versões anteriores, esta macro pode ser usada:

          #if PY_VERSION_HEX < 0x030900A4 && !defined(Py_SET_TYPE)
          static inline void _Py_SET_TYPE(PyObject *ob, PyTypeObject *type)
          { ob->ob_type = type; }
          #define Py_SET_TYPE(ob, type) _Py_SET_TYPE((PyObject*)(ob), type)
          #endif

     (Contribuição de Victor Stinner em bpo-39573(14).)

   * Uma vez que *note Py_SIZE(): 782. é alterada para uma função
     estática inline, ‘Py_SIZE(obj) = new_size’ deve ser substituído por
     ‘Py_SET_SIZE(obj, new_size)’: veja a função *note Py_SET_SIZE():
     783. (disponível desde Python 3.9).  Para compatibilidade com
     versões anteriores, esta macro pode ser usada:

          #if PY_VERSION_HEX < 0x030900A4 && !defined(Py_SET_SIZE)
          static inline void _Py_SET_SIZE(PyVarObject *ob, Py_ssize_t size)
          { ob->ob_size = size; }
          #define Py_SET_SIZE(ob, size) _Py_SET_SIZE((PyVarObject*)(ob), size)
          #endif

     (Contribuição de Victor Stinner em bpo-39573(15).)

   * ‘<Python.h>’ não inclui mais os arquivos de cabeçalho ‘<stdlib.h>’,
     ‘<stdio.h>’, ‘<errno.h>’ e ‘<string.h>’ quando a macro
     ‘Py_LIMITED_API’ é definida como ‘0x030b0000’ (Python 3.11) ou
     superior.  As extensões C devem incluir explicitamente os arquivos
     de cabeçalho após ‘#include <Python.h>’.  (Contribuição de Victor
     Stinner em bpo-45434(16).)

   * Os arquivos API não limitados ‘cellobject.h’, ‘classobject.h’,
     ‘code.h’, ‘context.h’, ‘funcobject.h’, ‘genobject.h’ e
     ‘longintrepr.h’ foram movidos para o diretório ‘Include/cpython’.
     Além disso, o arquivo de cabeçalho ‘eval.h’ foi removido.  Esses
     arquivos não devem ser incluídos diretamente, pois já estão
     incluídos aos *note arquivos de inclusão: 784. do ‘Python.h’.  Se
     eles foram incluídos diretamente, considere incluir ‘Python.h’ em
     seu lugar.  (Contribuição de Victor Stinner em bpo-35134(17).)

   * A macro ‘PyUnicode_CHECK_INTERNED()’ foi excluída da API C
     limitada.  Nunca foi utilizável lá, porque usava estruturas
     internas que não estão disponíveis na API C limitada.
     (Contribuição de Victor Stinner em bpo-46007(18).)

   * As seguintes funções e tipo de quadro agora estão disponíveis
     diretamente com ‘#include <Python.h>’, não é mais necessário
     adicionar ‘#include <frameobject.h>’:

        * *note PyFrame_Check(): 785.

        * *note PyFrame_GetBack(): 786.

        * *note PyFrame_GetBuiltins(): 76b.

        * *note PyFrame_GetGenerator(): 76c.

        * *note PyFrame_GetGlobals(): 76d.

        * *note PyFrame_GetLasti(): 76e.

        * *note PyFrame_GetLocals(): 41f.

        * *note PyFrame_Type: 787.

     (Contribuição de Victor Stinner em gh-93937(19).)

   * Os membros da estrutura *note PyFrameObject: 789. foram removidos
     da API C pública.

     Embora a documentação observe que os campos *note PyFrameObject:
     789. estão sujeitos a alterações a qualquer momento, eles
     permaneceram estáveis por um longo tempo e foram usados em várias
     extensões populares.

     No Python 3.11, a estrutura do quadro foi reorganizada para
     permitir otimizações de desempenho.  Alguns campos foram totalmente
     removidos, pois eram detalhes da antiga implementação.

     Campos do *note PyFrameObject: 789.:

        * ‘f_back’: use *note PyFrame_GetBack(): 786.

        * ‘f_blockstack’: removido.

        * ‘f_builtins’: use *note PyFrame_GetBuiltins(): 76b.

        * ‘f_code’: use *note PyFrame_GetCode(): 78a.

        * ‘f_gen’: use *note PyFrame_GetGenerator(): 76c.

        * ‘f_globals’: use *note PyFrame_GetGlobals(): 76d.

        * ‘f_iblock’: removido.

        * ‘f_lasti’: use *note PyFrame_GetLasti(): 76e.  Código usando
          ‘f_lasti’ com ‘PyCode_Addr2Line()’ deve usar *note
          PyFrame_GetLineNumber(): 78b, pois deve ser mais rápido.

        * ‘f_lineno’: use *note PyFrame_GetLineNumber(): 78b.

        * ‘f_locals’: use *note PyFrame_GetLocals(): 41f.

        * ‘f_stackdepth’: removido.

        * ‘f_state’: nenhuma API pública (renomeado para
          ‘f_frame.f_state’).

        * ‘f_trace’: nenhuma API pública.

        * ‘f_trace_lines’: use ‘PyObject_GetAttrString((PyObject*)frame,
          "f_trace_lines")’.

        * ‘f_trace_opcodes’: use
          ‘PyObject_GetAttrString((PyObject*)frame, "f_trace_opcodes")’.

        * ‘f_localsplus’: nenhuma API pública (renomeado para
          ‘f_frame.localsplus’).

        * ‘f_valuestack’: removido.

     O objeto quadro do Python agora é criado de forma “preguiçosa”
     ('lazy').  Um efeito colateral é que o membro *note f_back: 78c.
     não deve ser acessado diretamente, já que seu valor agora também é
     calculado de forma “preguiçosa”.  A função *note PyFrame_GetBack():
     786. deve ser chamada em seu lugar.

     Depuradores que acessam *note f_locals: 182. diretamente 'devem'
     chamar *note PyFrame_GetLocals(): 41f.  Eles não precisam mais
     chamar ‘PyFrame_FastToLocalsWithError()’ ou
     ‘PyFrame_LocalsToFast()’.  Na verdade, eles não devem chamar essas
     funções.  A atualização necessária do quadro agora é gerenciada
     pela máquina virtual.

     Código definindo ‘PyFrame_GetCode()’ no Python 3.8 e anteriores:

          #if PY_VERSION_HEX < 0x030900B1
          static inline PyCodeObject* PyFrame_GetCode(PyFrameObject *frame)
          {
              Py_INCREF(frame->f_code);
              return frame->f_code;
          }
          #endif

     Código definindo ‘PyFrame_GetBack()’ no Python 3.8 e anteriores:

          #if PY_VERSION_HEX < 0x030900B1
          static inline PyFrameObject* PyFrame_GetBack(PyFrameObject *frame)
          {
              Py_XINCREF(frame->f_back);
              return frame->f_back;
          }
          #endif

     Ou use o projeto pythoncapi_compat(20) para obter essas duas
     funções em versões mais antigas do Python.

   * Mudanças nos membros da estrutura *note PyThreadState: 78d.:

        * ‘frame’: removido, use *note PyThreadState_GetFrame(): 78e.
          (função adicionada ao Python 3.9 por bpo-40429(21)).  Aviso: a
          função retorna um *note referência forte: 33d, precisa chamar
          *note Py_XDECREF(): 78f.

        * ‘tracing’: alterado, use *note PyThreadState_EnterTracing():
          754. e *note PyThreadState_LeaveTracing(): 755. (funções
          adicionadas ao Python 3.11 por bpo-43760(22)).

        * ‘recursion_depth’: removido, use ‘(tstate->recursion_limit -
          tstate->recursion_remaining)’.

        * ‘stackcheck_counter’: removido.

     Código definindo ‘PyThreadState_GetFrame()’ no Python 3.8 e
     anteriores:

          #if PY_VERSION_HEX < 0x030900B1
          static inline PyFrameObject* PyThreadState_GetFrame(PyThreadState *tstate)
          {
              Py_XINCREF(tstate->frame);
              return tstate->frame;
          }
          #endif

     Código definindo ‘PyThreadState_EnterTracing()’ e
     ‘PyThreadState_LeaveTracing()’ no Python 3.10 e anteriores:

          #if PY_VERSION_HEX < 0x030B00A2
          static inline void PyThreadState_EnterTracing(PyThreadState *tstate)
          {
              tstate->tracing++;
          #if PY_VERSION_HEX >= 0x030A00A1
              tstate->cframe->use_tracing = 0;
          #else
              tstate->use_tracing = 0;
          #endif
          }

          static inline void PyThreadState_LeaveTracing(PyThreadState *tstate)
          {
              int use_tracing = (tstate->c_tracefunc != NULL || tstate->c_profilefunc != NULL);
              tstate->tracing--;
          #if PY_VERSION_HEX >= 0x030A00A1
              tstate->cframe->use_tracing = use_tracing;
          #else
              tstate->use_tracing = use_tracing;
          #endif
          }
          #endif

     Ou use o projeto pythoncapi-compat(23) para obter essas funções em
     funções antigas do Python.

   * Os distribuidores são encorajados a compilar o Python com a
     biblioteca Blake2 otimizada libb2(24).

   * O campo *note PyConfig.module_search_paths_set: 5ef. agora deve ser
     definido como 1 para inicialização para usar *note
     PyConfig.module_search_paths: 3a2. para inicializar *note sys.path:
     3b4.  Caso contrário, a inicialização recalculará o caminho e
     substituirá quaisquer valores adicionados a ‘module_search_paths’.

   * *note PyConfig_Read(): 790. não calcula mais o caminho de pesquisa
     inicial e não preencherá nenhum valor em *note
     PyConfig.module_search_paths: 3a2.  Para calcular caminhos padrão e
     modificá-los, termine a inicialização e use *note
     PySys_GetObject(): 389. para recuperar *note sys.path: 3b4. como um
     objeto lista do Python e modifique-o diretamente.

   ---------- Footnotes ----------

   (1) https://gcc.gnu.org/onlinedocs/cpp/Macro-Pitfalls.html

   (2) https://peps.python.org/pep-0670/

   (3) https://github.com/python/cpython/issues/89653

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45711

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45711

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46608

   (7) https://peps.python.org/pep-0523/

   (8) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (9) https://github.com/python/cpython/issues/92154

   (10) https://github.com/python/cpython/issues/94936

   (11) https://bugs.python.org/issue?@action=redirect&bpo=44263

   (12) https://peps.python.org/pep-0590/

   (13) https://bugs.python.org/issue?@action=redirect&bpo=43908

   (14) https://bugs.python.org/issue?@action=redirect&bpo=39573

   (15) https://bugs.python.org/issue?@action=redirect&bpo=39573

   (16) https://bugs.python.org/issue?@action=redirect&bpo=45434

   (17) https://bugs.python.org/issue?@action=redirect&bpo=35134

   (18) https://bugs.python.org/issue?@action=redirect&bpo=46007

   (19) https://github.com/python/cpython/issues/93937

   (20) https://github.com/python/pythoncapi-compat

   (21) https://bugs.python.org/issue?@action=redirect&bpo=40429

   (22) https://bugs.python.org/issue?@action=redirect&bpo=43760

   (23) https://github.com/python/pythoncapi-compat

   (24) https://www.blake2.net/


File: python.info,  Node: Descontinuados<4>,  Next: Pendente remoção no Python 3 12<2>,  Prev: Portando para Python 3 11<2>,  Up: Alterações na API C<5>

1.3.16.3 Descontinuados
.......................

   * Descontinua as seguintes funções para configurar a inicialização do
     Python:

        * ‘PySys_AddWarnOptionUnicode()’

        * ‘PySys_AddWarnOption()’

        * ‘PySys_AddXOption()’

        * ‘PySys_HasWarnOptions()’

        * ‘PySys_SetArgvEx()’

        * ‘PySys_SetArgv()’

        * ‘PySys_SetPath()’

        * ‘Py_SetPath()’

        * ‘Py_SetProgramName()’

        * ‘Py_SetPythonHome()’

        * ‘Py_SetStandardStreamEncoding()’

        * ‘_Py_SetProgramFullPath()’

     Em vez disso, use a nova API *note PyConfig: 3a6. da *note
     Configuração de Inicialização do Python: 3a7. ( PEP 587(1)).
     (Contribuição de Victor Stinner em gh-88279(2).)

   * Descontinua o membro ‘ob_shash’ do *note PyBytesObject: 792.  Use
     *note PyObject_Hash(): 403. em vez disso.  (Contribuição de Inada
     Naoki em bpo-46864(3).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0587/

   (2) https://github.com/python/cpython/issues/88279

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46864


File: python.info,  Node: Pendente remoção no Python 3 12<2>,  Next: Removidos<4>,  Prev: Descontinuados<4>,  Up: Alterações na API C<5>

1.3.16.4 Pendente remoção no Python 3.12
........................................

As seguintes APIs C foram descontinuadas em versões anteriores do Python
e serão removidas no Python 3.12.

   * ‘PyUnicode_AS_DATA()’

   * ‘PyUnicode_AS_UNICODE()’

   * ‘PyUnicode_AsUnicodeAndSize()’

   * ‘PyUnicode_AsUnicode()’

   * ‘PyUnicode_FromUnicode()’

   * ‘PyUnicode_GET_DATA_SIZE()’

   * ‘PyUnicode_GET_SIZE()’

   * ‘PyUnicode_GetSize()’

   * ‘PyUnicode_IS_COMPACT()’

   * ‘PyUnicode_IS_READY()’

   * *note PyUnicode_READY(): 401.

   * ‘PyUnicode_WSTR_LENGTH()’

   * ‘_PyUnicode_AsUnicode()’

   * ‘PyUnicode_WCHAR_KIND’

   * *note PyUnicodeObject: 794.

   * ‘PyUnicode_InternImmortal()’


File: python.info,  Node: Removidos<4>,  Prev: Pendente remoção no Python 3 12<2>,  Up: Alterações na API C<5>

1.3.16.5 Removidos
..................

   * ‘PyFrame_BlockSetup()’ e ‘PyFrame_BlockPop()’ foram removidas.
     (Contribuição de Mark Shannon em bpo-40222(1).)

   * Remove as seguintes macros matemáticas usando a variável ‘errno’:

        * ‘Py_ADJUST_ERANGE1()’

        * ‘Py_ADJUST_ERANGE2()’

        * ‘Py_OVERFLOWED()’

        * ‘Py_SET_ERANGE_IF_OVERFLOW()’

        * ‘Py_SET_ERRNO_ON_MATH_ERROR()’

     (Contribuição de Victor Stinner em bpo-45412(2).)

   * Remove as macros ‘Py_UNICODE_COPY()’ e ‘Py_UNICODE_FILL()’,
     descontinuadas desde o Python 3.3.  Use
     ‘PyUnicode_CopyCharacters()’ ou ‘memcpy()’ (string ‘wchar_t*’) e as
     funções ‘PyUnicode_Fill()’.  (Contribuição de Victor Stinner em
     bpo-41123(3).)

   * Remove o arquivo de cabeçalho ‘pystrhex.h’.  Ele contém apenas
     funções privadas.  As extensões C devem incluir apenas o arquivo
     principal ‘<Python.h>’.  (Contribuição de Victor Stinner em
     bpo-45434(4).)

   * Remove a macro ‘Py_FORCE_DOUBLE()’.  Era usada pela macro
     ‘Py_IS_INFINITY()’.  (Contribuição de Victor Stinner em
     bpo-45440(5).)

   * Os seguintes itens não estão mais disponíveis quando *note
     Py_LIMITED_API: 41e. é definida:

        * *note PyMarshal_WriteLongToFile(): 796.

        * *note PyMarshal_WriteObjectToFile(): 797.

        * *note PyMarshal_ReadObjectFromString(): 798.

        * *note PyMarshal_WriteObjectToString(): 799.

        * a macro ‘Py_MARSHAL_VERSION’

     Eles não fazem parte da *note API limitada: 79a.

     (Contribuição de Victor Stinner em bpo-45474(6).)

   * Exclui *note PyWeakref_GET_OBJECT(): 3bf. da API C limitada.  Nunca
     funcionou porque a estrutura ‘PyWeakReference’ é opaca na API C
     limitada.  (Contribuição de Victor Stinner em bpo-35134(7).)

   * Remove a macro ‘PyHeapType_GET_MEMBERS()’.  Estava exposta na API C
     pública por engano, deve ser usada apenas pelo Python internamente.
     Em vez disso, use o membro ‘PyTypeObject.tp_members’.
     (Contribuição de Victor Stinner em bpo-40170(8).)

   * Remove a macro ‘HAVE_PY_SET_53BIT_PRECISION’ (movida para a API C
     interna).  (Contribuição de Victor Stinner em bpo-45412(9).)

   * Remove as APIs de codificação *note Py_UNICODE: 3ed, pois foram
     descontinuadas desde o Python 3.3, são pouco usadas e ineficientes
     em relação às alternativas recomendadas.

     As funções removidas são:

        * ‘PyUnicode_Encode()’

        * ‘PyUnicode_EncodeASCII()’

        * ‘PyUnicode_EncodeLatin1()’

        * ‘PyUnicode_EncodeUTF7()’

        * ‘PyUnicode_EncodeUTF8()’

        * ‘PyUnicode_EncodeUTF16()’

        * ‘PyUnicode_EncodeUTF32()’

        * ‘PyUnicode_EncodeUnicodeEscape()’

        * ‘PyUnicode_EncodeRawUnicodeEscape()’

        * ‘PyUnicode_EncodeCharmap()’

        * ‘PyUnicode_TranslateCharmap()’

        * ‘PyUnicode_EncodeDecimal()’

        * ‘PyUnicode_TransformDecimalToASCII()’

     Veja a PEP 624(10) para detalhes e orientação sobre migração(11).
     (Contribuição de Inada Naoki em bpo-44029(12).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40222

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45412

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41123

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45434

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45440

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45474

   (7) https://bugs.python.org/issue?@action=redirect&bpo=35134

   (8) https://bugs.python.org/issue?@action=redirect&bpo=40170

   (9) https://bugs.python.org/issue?@action=redirect&bpo=45412

   (10) https://peps.python.org/pep-0624/

   (11) https://peps.python.org/pep-0624/#alternative-apis

   (12) https://bugs.python.org/issue?@action=redirect&bpo=44029


File: python.info,  Node: Alterações notáveis no 3 11 4,  Next: Alterações notáveis no 3 11 5,  Prev: Alterações na API C<5>,  Up: O que há de novo no Python 3 11

1.3.17 Alterações notáveis no 3.11.4
------------------------------------

* Menu:

* tarfile: tarfile<2>.


File: python.info,  Node: tarfile<2>,  Up: Alterações notáveis no 3 11 4

1.3.17.1 tarfile
................

   * Os métodos de extração em *note tarfile: de. e *note
     shutil.unpack_archive(): 46b, têm um novo argumento 'filter' que
     permite limitar recursos do tar que podem ser surpreendentes ou
     perigosos, como criar arquivos fora do diretório de destino.  Veja
     *note Filtros de extração: 46c. para detalhes.  No Python 3.12,
     usar sem o argumento 'filter' mostrará um *note DeprecationWarning:
     1a5.  No Python 3.14, o padrão mudará para ‘'data'’.  (Contribuição
     de Petr Viktorin em PEP 706(1).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0706/


File: python.info,  Node: Alterações notáveis no 3 11 5,  Prev: Alterações notáveis no 3 11 4,  Up: O que há de novo no Python 3 11

1.3.18 Alterações notáveis no 3.11.5
------------------------------------

* Menu:

* OpenSSL::


File: python.info,  Node: OpenSSL,  Up: Alterações notáveis no 3 11 5

1.3.18.1 OpenSSL
................

   * Construções do Windows e instaladores do macOS em python.org agora
     usam OpenSSL 3.0.


File: python.info,  Node: O que há de novo no Python 3 10,  Next: O que há de novo no Python 3 9,  Prev: O que há de novo no Python 3 11,  Up: O que há de novo no Python

1.4 O que há de novo no Python 3.10
===================================


Editor: Pablo Galindo Salgado

Este artigo explica os novos recursos no Python 3.10, em comparação com
3.9.  Python 3.10 foi lançado em 4 de outubro de 2021.  Veja *note
changelog: 13c. para uma lista completa de mudanças.

* Menu:

* Resumo – Destaques da versão: Resumo – Destaques da versão<4>.
* Novas funcionalidades: Novas funcionalidades<7>.
* Novos recursos relacionados a dicas de tipo: Novos recursos relacionados a dicas de tipo<3>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<4>.
* Novos módulos: Novos módulos<4>.
* Módulos melhorados: Módulos melhorados<4>.
* Otimizações: Otimizações<4>.
* Descontinuados: Descontinuados<5>.
* Removidos: Removidos<5>.
* Portando para Python 3.10: Portando para Python 3 10.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<4>.
* Mudanças na construção: Mudanças na construção<4>.
* Alterações na API C: Alterações na API C<7>.
* Recursos de segurança notáveis no 3.10.7: Recursos de segurança notáveis no 3 10 7.
* Recursos de segurança notáveis no 3.10.8: Recursos de segurança notáveis no 3 10 8.
* Alterações notáveis no 3.10.12: Alterações notáveis no 3 10 12.


File: python.info,  Node: Resumo – Destaques da versão<4>,  Next: Novas funcionalidades<7>,  Up: O que há de novo no Python 3 10

1.4.1 Resumo – Destaques da versão
----------------------------------

Novos recursos de sintaxe:

   * PEP 634(1), Correspondência de padrão estrutural: especificação

   * PEP 635(2), Correspondência de padrão estrutural: motivação e
     justificativa

   * PEP 636(3), Correspondência de padrão estrutural: Tutorial

   * bpo-12782(4), Gerenciadores de contexto entre parênteses agora são
     permitidos oficialmente.

Novos recursos na biblioteca padrão:

   * PEP 618(5), Adiciona verificação de comprimento opcional ao zip.

Melhorias no interpretador:

   * PEP 626(6), Números de linha precisos para depuração e outras
     ferramentas.

Novos recursos de tipagem:

   * PEP 604(7), Permite escrever tipos de união como X | Y

   * PEP 612(8), Variáveis de especificação de parâmetro

   * PEP 613(9), Apelidos de tipo explícitos

   * PEP 647(10), Guardas de Tipo Definidas Pelo Usuário

Descontinuações, remoções ou restrições importantes:

   * PEP 644(11), Exige OpenSSL 1.1.1 ou mais novo

   * PEP 632(12), Descontinua o módulo distutils.

   * PEP 623(13), Descontinua e prepara para a remoção do membro wstr em
     PyUnicodeObject.

   * PEP 624(14), Remove APIs codificadoras de Py_UNICODE

   * PEP 597(15), Adiciona EncodingWarning opcional

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0634/

   (2) https://peps.python.org/pep-0635/

   (3) https://peps.python.org/pep-0636/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=12782

   (5) https://peps.python.org/pep-0618/

   (6) https://peps.python.org/pep-0626/

   (7) https://peps.python.org/pep-0604/

   (8) https://peps.python.org/pep-0612/

   (9) https://peps.python.org/pep-0613/

   (10) https://peps.python.org/pep-0647/

   (11) https://peps.python.org/pep-0644/

   (12) https://peps.python.org/pep-0632/

   (13) https://peps.python.org/pep-0623/

   (14) https://peps.python.org/pep-0624/

   (15) https://peps.python.org/pep-0597/


File: python.info,  Node: Novas funcionalidades<7>,  Next: Novos recursos relacionados a dicas de tipo<3>,  Prev: Resumo – Destaques da versão<4>,  Up: O que há de novo no Python 3 10

1.4.2 Novas funcionalidades
---------------------------

* Menu:

* Gerenciadores de contexto entre parênteses::
* Melhores mensagens de erro::
* PEP 626; Números de linha precisos para depuração e outras ferramentas: PEP 626 Números de linha precisos para depuração e outras ferramentas.
* PEP 634; Correspondência de padrão estrutural: PEP 634 Correspondência de padrão estrutural.
* EncodingWarning opcional e opção encoding="locale"::


File: python.info,  Node: Gerenciadores de contexto entre parênteses,  Next: Melhores mensagens de erro,  Up: Novas funcionalidades<7>

1.4.2.1 Gerenciadores de contexto entre parênteses
..................................................

O uso de parênteses para continuação em várias linhas em gerenciadores
de contexto agora é suportado.  Isso permite a formatação de uma longa
coleção de gerenciadores de contexto em várias linhas de maneira
semelhante à que era possível anteriormente com instruções de
importação.  Por exemplo, todos esses exemplos agora são válidos:

     with (CtxManager() as exemplo):
         ...

     with (
         CtxManager1(),
         CtxManager2()
     ):
         ...

     with (CtxManager1() as exemplo,
           CtxManager2()):
         ...

     with (CtxManager1(),
           CtxManager2() as exemplo):
         ...

     with (
         CtxManager1() as exemplo1,
         CtxManager2() as exemplo2
     ):
         ...

também é possível usar uma vírgula no final do grupo fechado:

     with (
         CtxManager1() as exemplo1,
         CtxManager2() as exemplo2,
         CtxManager3() as exemplo3,
     ):
         ...

Esta nova sintaxe usa as capacidades não LL(1) do novo analisador
sintático.  Confira PEP 617(1) para mais detalhes.

(Contribuição de Guido van Rossum, Pablo Galindo e Lysandros Nikolaou em
bpo-12782(2) e bpo-40334(3).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0617/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=12782

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40334


File: python.info,  Node: Melhores mensagens de erro,  Next: PEP 626 Números de linha precisos para depuração e outras ferramentas,  Prev: Gerenciadores de contexto entre parênteses,  Up: Novas funcionalidades<7>

1.4.2.2 Melhores mensagens de erro
..................................

* Menu:

* SyntaxErrors::
* IndentationErrors::
* AttributeErrors::
* NameErrors::


File: python.info,  Node: SyntaxErrors,  Next: IndentationErrors,  Up: Melhores mensagens de erro

1.4.2.3 SyntaxErrors
....................

Ao analisar o código que contém parênteses ou chaves não fechados, o
interpretador agora inclui o local da chave não fechado de parênteses em
vez de exibir 'SyntaxError: unexpected EOF while parsing' ou apontando
para algum local incorreto.  Por exemplo, considere o seguinte código
(observe o “{” não fechado):

     esperado = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4,
                 38: 4, 39: 4, 45: 5, 46: 5, 47: 5, 48: 5, 49: 5, 54: 6,
     algum_outro_codigo = foo()

Versões anteriores do interpretador relatavam lugares confusos como
local do erro de sintaxe:

     File "exemplo.py", line 3
         algum_outro_codigo = foo()
                            ^
     SyntaxError: invalid syntax

mas no Python 3.10, um erro mais informativo é emitido:

     File "exemplo.py", line 1
         esperado = {9: 1, 18: 2, 19: 2, 27: 3, 28: 3, 29: 3, 36: 4, 37: 4,
                    ^
     SyntaxError: '{' was never closed

De maneira semelhante, erros envolvendo literais de string não fechadas
(entre aspas simples e triplas) agora apontam para o início da string em
vez de relatar EOF/EOL.

Essas melhorias são inspiradas em trabalhos anteriores no interpretador
PyPy.

(Contribuição de Pablo Galindo em bpo-42864(1) e Batuhan Taskaya em
bpo-40176(2).)

As exceções *note SyntaxError: 18d. levantadas pelo interpretador agora
destacam o intervalo total de erros da expressão que constitui o próprio
erro de sintaxe, em vez de apenas onde o problema foi detectado.  Desta
forma, em vez de exibir (antes do Python 3.10):

     >>> foo(x, z for z in range(10), t, w)
       File "<stdin>", line 1
         foo(x, z for z in range(10), t, w)
                ^
     SyntaxError: Generator expression must be parenthesized

agora o Python 3.10 vai exibir a exceção como:

     >>> foo(x, z for z in range(10), t, w)
       File "<stdin>", line 1
         foo(x, z for z in range(10), t, w)
                ^^^^^^^^^^^^^^^^^^^^
     SyntaxError: Generator expression must be parenthesized

Esta melhoria foi contribuída por Pablo Galindo em bpo-43914(3).

Uma quantidade considerável de novas mensagens especializadas para
exceções *note SyntaxError: 18d. foram incorporadas.  Alguns dos mais
notáveis são os seguintes:

   * Faltando ‘:’ antes de blocos:

          >>> if foguete.posicao > horizonte_evento
            File "<stdin>", line 1
              if foguete.posicao > horizonte_evento
                                                  ^
          SyntaxError: expected ':'

     (Contribuição de Pablo Galindo em bpo-42997(4).)

   * Tuplas sem parênteses em alvos de compreensão:

          >>> {x,y for x,y in zip('abcd', '1234')}
            File "<stdin>", line 1
              {x,y for x,y in zip('abcd', '1234')}
               ^
          SyntaxError: did you forget parentheses around the comprehension target?

     (Contribuição de Pablo Galindo em bpo-43017(5).)

   * Faltando vírgulas em literais de coleção e entre expressões:

          >>> items = {
          ... x: 1,
          ... y: 2
          ... z: 3,
            File "<stdin>", line 3
              y: 2
                 ^
          SyntaxError: invalid syntax. Perhaps you forgot a comma?

     (Contribuição de Pablo Galindo em bpo-43822(6).)

   * Vários tipos de exceção sem parênteses:

          >>> try:
          ...     construir_esfera_de_dyson()
          ... except NotEnoughScienceError, NotEnoughResourcesError:
            File "<stdin>", line 3
              except NotEnoughScienceError, NotEnoughResourcesError:
                     ^
          SyntaxError: multiple exception types must be parenthesized

     (Contribuição de Pablo Galindo em bpo-43149(7).)

   * Faltando ‘:’ em valores em literais de dicionário:

          >>> values = {
          ... x: 1,
          ... y: 2,
          ... z:
          ... }
            File "<stdin>", line 4
              z:
               ^
          SyntaxError: expression expected after dictionary key and ':'

          >>> values = {x:1, y:2, z w:3}
            File "<stdin>", line 1
              values = {x:1, y:2, z w:3}
                                  ^
          SyntaxError: ':' expected after dictionary key

     (Contribuição de Pablo Galindo em bpo-43823(8).)

   * Blocos ‘try’ sem blocos ‘except’ ou ‘finally’:

          >>> try:
          ...     x = 2
          ... algumacoisa = 3
            File "<stdin>", line 3
              algumacoisa = 3
              ^^^^^^^^^^^
          SyntaxError: expected 'except' or 'finally' block

     (Contribuição de Pablo Galindo em bpo-44305(9).)

   * Uso de ‘=’ em vez de ‘==’ nas comparações:

          >>> if foguete.posicao = horizonte_evento:
            File "<stdin>", line 1
              if foguete.posicao = horizonte_evento:
                                 ^
          SyntaxError: cannot assign to attribute here. Maybe you meant '==' instead of '='?

     (Contribuição de Pablo Galindo em bpo-43797(10).)

   * Uso de ‘*’ em f-strings:

          >>> f"Buracos negros {*all_black_holes} e revelações"
            File "<stdin>", line 1
              (*all_black_holes)
               ^
          SyntaxError: f-string: cannot use starred expression here

     (Contribuição de Pablo Galindo em bpo-41064(11).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42864

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40176

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43914

   (4) https://bugs.python.org/issue?@action=redirect&bpo=42997

   (5) https://bugs.python.org/issue?@action=redirect&bpo=43017

   (6) https://bugs.python.org/issue?@action=redirect&bpo=43822

   (7) https://bugs.python.org/issue?@action=redirect&bpo=43149

   (8) https://bugs.python.org/issue?@action=redirect&bpo=43823

   (9) https://bugs.python.org/issue?@action=redirect&bpo=44305

   (10) https://bugs.python.org/issue?@action=redirect&bpo=43797

   (11) https://bugs.python.org/issue?@action=redirect&bpo=41064


File: python.info,  Node: IndentationErrors,  Next: AttributeErrors,  Prev: SyntaxErrors,  Up: Melhores mensagens de erro

1.4.2.4 IndentationErrors
.........................

Muitas exceções *note IndentationError: 7a9. agora têm mais contexto
sobre que tipo de bloco estava esperando um indentação, incluindo a
localização da instrução:

     >>> def foo():
     ...    if lel:
     ...    x = 2
       File "<stdin>", line 3
         x = 2
         ^
     IndentationError: expected an indented block after 'if' statement in line 2


File: python.info,  Node: AttributeErrors,  Next: NameErrors,  Prev: IndentationErrors,  Up: Melhores mensagens de erro

1.4.2.5 AttributeErrors
.......................

Ao exibir *note AttributeError: 34b, ‘PyErr_Display()’ oferecerá
sugestões de nomes de atributos semelhantes no objeto a partir do qual a
exceção foi levantada:

     >>> collections.namedtoplo
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     AttributeError: module 'collections' has no attribute 'namedtoplo'. Did you mean: namedtuple?

(Contribuição de Pablo Galindo em bpo-38530(1).)

     Aviso: Observe que isso não funcionará se ‘PyErr_Display()’ não for
     chamado para exibir o erro que pode ocorrer se alguma outra função
     personalizada de exibição de erro for usada.  Este é um cenário
     comum em alguns REPLs, laços de leitura-avaliação-impressão, como o
     IPython.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38530


File: python.info,  Node: NameErrors,  Prev: AttributeErrors,  Up: Melhores mensagens de erro

1.4.2.6 NameErrors
..................

Ao exibir *note NameError: 43f. levantada pelo interpretador,
‘PyErr_Display()’ irá oferecer sugestões de nomes de variáveis
semelhantes na função de onde a exceção foi levantada:

     >>> buraco_negro_de_schwarzschild = None
     >>> buraco_negro_de_schwarschild
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     NameError: name 'buraco_negro_de_schwarschild' is not defined. Did you mean: buraco_negro_de_schwarzschild?

(Contribuição de Pablo Galindo em bpo-38530(1).)

     Aviso: Observe que isso não funcionará se ‘PyErr_Display()’ não for
     chamado para exibir o erro que pode ocorrer se alguma outra função
     personalizada de exibição de erro for usada.  Este é um cenário
     comum em alguns REPLs, laços de leitura-avaliação-impressão, como o
     IPython.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38530


File: python.info,  Node: PEP 626 Números de linha precisos para depuração e outras ferramentas,  Next: PEP 634 Correspondência de padrão estrutural,  Prev: Melhores mensagens de erro,  Up: Novas funcionalidades<7>

1.4.2.7 PEP 626: Números de linha precisos para depuração e outras ferramentas
..............................................................................

O PEP 626 traz números de linha mais precisos e confiáveis para
ferramentas de depuração, criação de perfil e cobertura.  Eventos de
rastreamento, com o número de linha correto, são gerados para todas as
linhas de código executadas e apenas para linhas de código que são
executadas.

O atributo *note f_lineno: 7ad. de objetos de quadro sempre conterá o
número de linha esperado.

O atributo *note co_lnotab: 2e0. *note code objects: 1d2. foi
descontinuado e será removido no 3.12.  O código que precisa ser
convertido do deslocamento para o número da linha deve usar o novo
método *note co_lines(): 2fb.


File: python.info,  Node: PEP 634 Correspondência de padrão estrutural,  Next: EncodingWarning opcional e opção encoding="locale",  Prev: PEP 626 Números de linha precisos para depuração e outras ferramentas,  Up: Novas funcionalidades<7>

1.4.2.8 PEP 634: Correspondência de padrão estrutural
.....................................................

A correspondência de padrão estrutural foi adicionada na forma de uma
'instrução de correspondência' e 'instruções de caso' de padrões com
ações associadas.  Os padrões consistem em sequências, mapeamentos,
tipos de dados primitivos, bem como instâncias de classe.  A
correspondência de padrão permite que os programas extraiam informações
de tipos de dados complexos, ramifiquem na estrutura de dados e apliquem
ações específicas com base em diferentes formas de dados.

* Menu:

* Sintaxe e operações::
* Abordagem declarativa::
* Padrão simples; corresponder a um literal: Padrão simples corresponder a um literal.
* Padrões com uma literal e variável::
* Padrões e classes::
* Padrões aninhados::
* Padrões complexos e o curinga::
* Guarda::
* Outros recursos-chave::


File: python.info,  Node: Sintaxe e operações,  Next: Abordagem declarativa,  Up: PEP 634 Correspondência de padrão estrutural

1.4.2.9 Sintaxe e operações
...........................

A sintaxe genérica da correspondência de padrão é:

     match sujeito:
         case <padrão_1>:
             <ação_1>
         case <padrão_2>:
             <ação_2>
         case <padrão_3>:
             <ação_3>
         case _:
             <ação_curinga>

Uma instrução de correspondência pega uma expressão e compara seu valor
com padrões sucessivos fornecidos como um ou mais blocos de caso.
Especificamente, a correspondência de padrões opera:

  1. usando dados com tipo e forma (o ‘sujeito’)

  2. avaliando o ‘sujeito’ na instrução ‘match’

  3. comparando o assunto com cada padrão em uma instrução ‘case’ de
     cima para baixo até que uma correspondência seja confirmada.

  4. executando a ação associada ao padrão da correspondência confirmada

  5. Se uma correspondência exata não for confirmada, no último caso, um
     curinga ‘_’, se fornecido, será usado como o caso de
     correspondência.  Se uma correspondência exata não for confirmada e
     não houver um caractere curinga, todo o bloco de correspondência
     será autônomo.


File: python.info,  Node: Abordagem declarativa,  Next: Padrão simples corresponder a um literal,  Prev: Sintaxe e operações,  Up: PEP 634 Correspondência de padrão estrutural

1.4.2.10 Abordagem declarativa
..............................

Os leitores podem estar cientes da correspondência de padrão por meio do
exemplo simples de correspondência de um assunto (objeto de dados) a um
literal (padrão) com a instrução switch encontrada em C, Java ou
JavaScript (e muitas outras linguagens).  Frequentemente, a instrução
switch é usada para comparação de um objeto/expressão com instruções
case contendo literais.

Exemplos mais poderosos de correspondência de padrão podem ser
encontrados em linguagens como Scala e Elixir.  Com a correspondência de
padrão estrutural, a abordagem é “declarativa” e declara explicitamente
as condições (os padrões) para que os dados correspondam.

Embora uma série “imperativa” de instruções usando instruções “if”
aninhadas possa ser usada para realizar algo semelhante à
correspondência de padrão estrutural, é menos clara do que a abordagem
“declarativa”.  Em vez disso, a abordagem “declarativa” estabelece as
condições a serem atendidas para uma correspondência e é mais legível
por meio de seus padrões explícitos.  Embora a correspondência de padrão
estrutural possa ser usada em sua forma mais simples comparando uma
variável a um literal em uma instrução case, seu verdadeiro valor para
Python reside em seu tratamento do tipo e forma do sujeito.


File: python.info,  Node: Padrão simples corresponder a um literal,  Next: Padrões com uma literal e variável,  Prev: Abordagem declarativa,  Up: PEP 634 Correspondência de padrão estrutural

1.4.2.11 Padrão simples: corresponder a um literal
..................................................

Vejamos este exemplo como correspondência de padrão em sua forma mais
simples: um valor, o assunto, sendo correspondido a vários literais, os
padrões.  No exemplo abaixo, ‘status’ é o assunto da instrução de
correspondência.  Os padrões são cada uma das instruções de caso, onde
literais representam códigos de status de solicitação.  A ação associada
ao caso é executada após uma partida:

     def http_error(status):
         match status:
             case 400:
                 return "Bad request"
             case 404:
                 return "Not found"
             case 418:
                 return "I'm a teapot"
             case _:
                 return "Something's wrong with the internet"

Se a função acima receber um ‘status’ de 418, “I’m a teapot” será
retornado.  Se a função acima receber um ‘status’ de 500, a instrução
case com ‘_’ irá corresponder a um curinga, e “Something’s wrong with
the Internet” é retornado.  Observe o último bloco: o nome da variável,
‘_’, atua como um 'curinga' e garante que o assunto sempre
corresponderá.  O uso de ‘_’ é opcional.

Você pode combinar vários literais em um único padrão usando ‘|’ (“ou”):

     case 401 | 403 | 404:
         return "Não permitido"

* Menu:

* Comportamento sem o curinga::


File: python.info,  Node: Comportamento sem o curinga,  Up: Padrão simples corresponder a um literal

1.4.2.12 Comportamento sem o curinga
....................................

Se modificarmos o exemplo acima removendo o último bloco case, o exemplo
se tornará:

     def http_error(status):
         match status:
             case 400:
                 return "Bad request"
             case 404:
                 return "Not found"
             case 418:
                 return "I'm a teapot"

Sem o uso de ‘_’ em uma instrução case, uma correspondência pode não
existir.  Se não houver correspondência, o comportamento é autônomo.
Por exemplo, se o ‘status’ de 500 for passado, ocorre um no-op.


File: python.info,  Node: Padrões com uma literal e variável,  Next: Padrões e classes,  Prev: Padrão simples corresponder a um literal,  Up: PEP 634 Correspondência de padrão estrutural

1.4.2.13 Padrões com uma literal e variável
...........................................

Os padrões podem parecer atribuições de desempacotamento e um padrão
pode ser usado para vincular variáveis.  Neste exemplo, um ponto de
dados pode ser desempacotado em sua coordenada x e coordenada y:

     # ponto é uma tupla (x, y)
     match ponto:
         case (0, 0):
             print("Origem")
         case (0, y):
             print(f"Y={y}")
         case (x, 0):
             print(f"X={x}")
         case (x, y):
             print(f"X={x}, Y={y}")
         case _:
             raise ValueError("Não é um ponto")

O primeiro padrão tem dois literais, ‘(0, 0)’, e pode ser considerado
uma extensão do padrão literal mostrado acima.  Os próximos dois padrões
combinam um literal e uma variável, e a variável 'vincula' um valor do
assunto (‘ponto’).  O quarto padrão captura dois valores, o que o torna
conceitualmente semelhante à atribuição de desempacotamento ‘(x, y) =
ponto’.


File: python.info,  Node: Padrões e classes,  Next: Padrões aninhados,  Prev: Padrões com uma literal e variável,  Up: PEP 634 Correspondência de padrão estrutural

1.4.2.14 Padrões e classes
..........................

Se estiver usando classes para estruturar seus dados, você pode usar
como padrão o nome da classe seguido por uma lista de argumentos
semelhante a um construtor.  Este padrão tem a capacidade de capturar
atributos da instância em variáveis:

     class Point:
         def __init__(self, x, y):
             self.x = x
             self.y = y

     def location(point):
         match point:
             case Point(x=0, y=0):
                print("O ponto está na origem.")
             case Point(x=0, y=y):
                print(f "Y={y} e o ponto está no eixo y.")
             case Point(x=x, y=0):
                print(f "X={x} e o ponto está no eixo x.")
             case Point():
                print("O ponto está localizado em outro lugar no plano.")
             case _:
                print("Não é um ponto")

* Menu:

* Padrões com parâmetros posicionais::


File: python.info,  Node: Padrões com parâmetros posicionais,  Up: Padrões e classes

1.4.2.15 Padrões com parâmetros posicionais
...........................................

Você pode usar parâmetros posicionais com algumas classes embutidas que
fornecem uma ordem para seus atributos (por exemplo, classes de dados).
Você também pode definir uma posição específica para atributos em
padrões configurando o atributo especial ‘__match_args__’ em suas
classes.  Se for definido como (“x”, “y”), os seguintes padrões são
todos equivalentes (e todos ligam o atributo ‘y’ à variável ‘var’):

     Ponto(1, var)
     Ponto(1, y=var)
     Ponto(x=1, y=var)
     Ponto(y=var, x=1)


File: python.info,  Node: Padrões aninhados,  Next: Padrões complexos e o curinga,  Prev: Padrões e classes,  Up: PEP 634 Correspondência de padrão estrutural

1.4.2.16 Padrões aninhados
..........................

Os padrões podem ser aninhados arbitrariamente.  Por exemplo, se nossos
dados forem uma pequena lista de pontos, eles podem ser correspondidos
assim:

     match points:
         case []:
             print("Nenhum ponto na lista.")
         case [Point(0, 0)]:
             print("A origem é o único ponto na lista.")
         case [Point(x, y)]:
             print(f"Um único ponto {x}, {y} está na lista.")
         case [Point(0, y1), Point(0, y2)]:
             print(f"Dois pontos no eixo Y em {y1}, {y2} estão na lista.")
         case _:
             print("Algo diferente foi encontrado na lista.")


File: python.info,  Node: Padrões complexos e o curinga,  Next: Guarda,  Prev: Padrões aninhados,  Up: PEP 634 Correspondência de padrão estrutural

1.4.2.17 Padrões complexos e o curinga
......................................

Até este ponto, os exemplos usaram ‘_’ sozinho na última instrução case.
Um curinga pode ser usado em padrões mais complexos, como ‘('error',
code, _)’.  Por exemplo:

     match test_variable:
         case ('warning', code, 40):
             print("Foi recebido um alerta.")
         case ('error', code, _):
             print(f"Ocorreu um erro {code}.")

No caso acima, ‘test_variable’ irá corresponder a (‘erro’, código, 100)
e (‘erro’, código, 800).


File: python.info,  Node: Guarda,  Next: Outros recursos-chave,  Prev: Padrões complexos e o curinga,  Up: PEP 634 Correspondência de padrão estrutural

1.4.2.18 Guarda
...............

Podemos adicionar uma cláusula ‘if’ a um padrão, conhecido como
“guarda”.  Se a guarda for falsa, ‘match’ tenta o próximo bloco de caso.
Observe que a captura de valor ocorre antes que a guarda seja avaliada:

     match point:
         case Point(x, y) if x == y:
             print(f"O ponto está localizado em uma diagonal Y=X at {x}.")
         case Point(x, y):
             print(f"Ponto não está na diagonal.")


File: python.info,  Node: Outros recursos-chave,  Prev: Guarda,  Up: PEP 634 Correspondência de padrão estrutural

1.4.2.19 Outros recursos-chave
..............................

Vários outros recursos-chave:

   - Assim como desempacotar atribuições, os padrões de tupla e lista
     têm exatamente o mesmo significado e realmente correspondem a
     sequências arbitrárias.  Tecnicamente, o sujeito deve ser uma
     sequência.  Portanto, uma exceção importante é que padrões não
     correspondem a iteradores.  Também evita um erro comum, sequência
     de padrões não correspondem a strings.

   - Os padrões de sequência têm suporte a curingas: ‘[x, y, *rest]’ e
     ‘(x, y, *rest)’ funcionam de forma semelhante a curingas em
     desempacotamentos de atribuições.  O nome depois de ‘*’ também pode
     ser ‘_’, então ‘(x, y, *_)’ corresponde a uma sequência de pelo
     menos dois itens sem ligar os itens restantes.

   - Padrões de mapeamento: ‘{"bandwidth": b, "latency": l}’ captura os
     valores ‘"bandwidth"’ e ‘"latency"’ de um dicionário.  Diferente
     dos padrões de sequência, chaves extra são ignoradas.  Um curinga
     ‘**rest’ também é permitido.  (Mas ‘**_’ seria redundante, então
     não é permitido.)

   - Subpadrões podem ser capturados usando a palavra reservada ‘as’

          case (Ponto(x1, y1), Ponto(x2, y2) as p2): ...

     Isso liga x1, y1, x2, y2 como você esperaria sem a cláusula ‘as’ e
     p2 a todo o segundo item do sujeito.

   - A maioria dos literais são comparados por igualdade.  No entanto,
     os singletons ‘True’, ‘False’ e ‘None’ são comparados por
     identidade.

   - Constantes nomeadas podem ser usadas em padrões.  Essas constantes
     nomeadas devem ser nomes pontilhados para evitar que a constante
     seja interpretada como uma variável de captura:

          from enum import Enum
          class Color(Enum):
              RED = 0
              GREEN = 1
              BLUE = 2

          color = Color.GREEN
          match color:
              case Color.RED:
                  print("Eu vejo vermelho!")
              case Color.GREEN:
                  print("A grama é verde")
              case Color.BLUE:
                  print("Eu azul de fome :(")

Para obter as especificações completas, consulte a PEP 634(1).  A
motivação e o raciocínio estão na PEP 635(2), e um tutorial mais longo
está na PEP 636(3).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0634/

   (2) https://peps.python.org/pep-0635/

   (3) https://peps.python.org/pep-0636/


File: python.info,  Node: EncodingWarning opcional e opção encoding="locale",  Prev: PEP 634 Correspondência de padrão estrutural,  Up: Novas funcionalidades<7>

1.4.2.20 ‘EncodingWarning’ opcional e opção ‘encoding="locale"’
...............................................................

A codificação padrão de *note TextIOWrapper: 7bc. e *note open(): 51c.
depende da plataforma e da localidade.  Como o UTF-8 é usado na maioria
das plataformas Unix, omitir a opção ‘encoding’ ao abrir arquivos UTF-8
(por exemplo, JSON, YAML, TOML, Markdown) é um bug muito comum.  Por
exemplo:

     # BUG: mode "rb" ou encoding="utf-8" deve ser usado.
     with open("data.json") as f:
         data = json.load(f)

Para encontrar este tipo de bug, uma ‘EncodingWarning’ opcional é
adicionada.  É emitido quando *note sys.flags.warn_default_encoding:
68c. é verdadeiro e a codificação padrão específica da localidade é
usada.

A opção ‘-X warn_default_encoding’ e *note PYTHONWARNDEFAULTENCODING:
7bd. são adicionadas para ativar o aviso.

Veja *note Codificação do texto: 7be. para mais informações.


File: python.info,  Node: Novos recursos relacionados a dicas de tipo<3>,  Next: Outras mudanças na linguagem<4>,  Prev: Novas funcionalidades<7>,  Up: O que há de novo no Python 3 10

1.4.3 Novos recursos relacionados a dicas de tipo
-------------------------------------------------

Esta seção cobre as principais mudanças que afetam as dicas de tipo da
PEP 484(1) e o módulo *note typing: 104.

* Menu:

* PEP 604; novo operador de união de tipo: PEP 604 novo operador de união de tipo.
* PEP 612; variáveis de especificação de parâmetros: PEP 612 variáveis de especificação de parâmetros.
* PEP 613; TypeAlias: PEP 613 TypeAlias.
* PEP 647; guardas de tipo definidas pelo usuário: PEP 647 guardas de tipo definidas pelo usuário.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/


File: python.info,  Node: PEP 604 novo operador de união de tipo,  Next: PEP 612 variáveis de especificação de parâmetros,  Up: Novos recursos relacionados a dicas de tipo<3>

1.4.3.1 PEP 604: novo operador de união de tipo
...............................................

Um novo operador de união de tipo foi introduzido, o que permite a
sintaxe ‘X | Y’.  Isso fornece uma maneira mais limpa de expressar
“tanto o tipo X quanto o tipo Y” ao invés de usar *note typing.Union:
63b, especialmente em dicas de tipo.

Nas versões anteriores do Python, para aplicar uma dica de tipo para
funções que aceitam argumentos de vários tipos, era usado *note
typing.Union: 63b.:

     def square(number: Union[int, float]) -> Union[int, float]:
         return number ** 2

As dicas de tipo agora podem ser escritas de uma maneira mais sucinta:

     def square(number: int | float) -> int | float:
         return number ** 2

Esta nova sintaxe também é aceita como o segundo argumento para *note
isinstance(): 442. e *note issubclass(): 7c2.:

     >>> isinstance(1, int | str)
     True

Veja *note Tipo União: 7c3. e PEP 604(1) para mais detalhes.

(Contribuição de Maggie Moss e Philippe Prados em bpo-41428(2), com
acréscimos por Yurii Karabas e Serhiy Storchaka em bpo-44490(3).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0604/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41428

   (3) https://bugs.python.org/issue?@action=redirect&bpo=44490


File: python.info,  Node: PEP 612 variáveis de especificação de parâmetros,  Next: PEP 613 TypeAlias,  Prev: PEP 604 novo operador de união de tipo,  Up: Novos recursos relacionados a dicas de tipo<3>

1.4.3.2 PEP 612: variáveis de especificação de parâmetros
.........................................................

Duas novas opções para melhorar as informações fornecidas para
verificadores de tipo estático para ‘Callable’ da PEP 484(1) foram
adicionadas ao módulo *note typing: 104.

A primeira é a variável de especificação de parâmetro.  Eles são usados
para encaminhar os tipos de parâmetro de um chamável para outro chamável
– um padrão comumente encontrado em funções de ordem superior e
decoradores.  Exemplos de uso podem ser encontrados em *note
typing.ParamSpec: 15e.  Anteriormente, não havia uma maneira fácil de
digitar a dependência de anotação de tipos de parâmetro de maneira tão
precisa.

A segunda opção é o novo operador ‘Concatenate’.  É usado em conjunto
com variáveis de especificação de parâmetro para digitar anotar um
chamável de ordem superior que adiciona ou remove parâmetros de outro
chamável.  Exemplos de uso podem ser encontrados em *note
typing.Concatenate: 7c5.

Veja *note typing.Callable: 7c6, *note typing.ParamSpec: 15e, *note
typing.Concatenate: 7c5, *note typing.ParamSpecArgs: 7c7, *note
typing.ParamSpecKwargs: 7c8. e PEP 612(2) para mais detalhes.

(Contribuição de Ken Jin em bpo-41559(3), com pequenas melhorias por
Jelle Zijlstra em bpo-43783(4).  PEP escrita por Mark Mendoza.)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/

   (2) https://peps.python.org/pep-0612/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41559

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43783


File: python.info,  Node: PEP 613 TypeAlias,  Next: PEP 647 guardas de tipo definidas pelo usuário,  Prev: PEP 612 variáveis de especificação de parâmetros,  Up: Novos recursos relacionados a dicas de tipo<3>

1.4.3.3 PEP 613: TypeAlias
..........................

PEP 484(1) introduziu o conceito de apelidos de tipo, exigindo apenas
que fossem atribuições não anotadas de nível superior.  Essa
simplicidade às vezes tornava difícil para os verificadores de tipo
distinguirem entre apelidos de tipo e atribuições comuns, especialmente
quando referências diretas ou tipos inválidos estavam envolvidos.
Compare:

     StrCache = 'Cache[str]'  # um apelido de tipo
     LOG_PREFIX = 'LOG[DEBUG]'  # uma constante do módulo

Agora o módulo *note typing: 104. tem um valor especial *note TypeAlias:
7ca. que permite declarar apelidos de tipo, mais explicitamente:

     StrCache: TypeAlias = 'Cache[str]'  # um apelido de tipo
     LOG_PREFIX = 'LOG[DEBUG]'  # uma constante do módulo

Veja PEP 613(2) para mais detalhes.

(Contribuição de Mikhail Golubev em bpo-41923(3).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/

   (2) https://peps.python.org/pep-0613/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41923


File: python.info,  Node: PEP 647 guardas de tipo definidas pelo usuário,  Prev: PEP 613 TypeAlias,  Up: Novos recursos relacionados a dicas de tipo<3>

1.4.3.4 PEP 647: guardas de tipo definidas pelo usuário
.......................................................

*note TypeGuard: 164. foi adicionado ao módulo *note typing: 104. para
anotar funções de guarda de tipo e melhorar informações fornecidas a
verificadores de tipo estático durante um estreitamento de tipo.  Para
mais informações, veja a documentação do *note TypeGuard: 164. e a PEP
647(1).

(Contribuição de Ken Jin e Guido van Rossum em bpo-43766(2).  PEP
escrita por Eric Traut.)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0647/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43766


File: python.info,  Node: Outras mudanças na linguagem<4>,  Next: Novos módulos<4>,  Prev: Novos recursos relacionados a dicas de tipo<3>,  Up: O que há de novo no Python 3 10

1.4.4 Outras mudanças na linguagem
----------------------------------

   * O tipo *note int: 257. tem um novo método *note int.bit_count():
     7cd, retornando o número de unidades na expansão binária de um dado
     inteiro, também conhecido como contagem da população.
     (Contribuição de Niklas Fiekas em bpo-29882(1).)

   * As visualizações retornadas por *note dict.keys(): 7ce, *note
     dict.values(): 7cf. e *note dict.items(): 7d0. agora têm um
     atributo ‘mapping’ que fornece um objeto *note
     types.MappingProxyType: 46d. que envolve o dicionário original.
     (Contribuição de Dennis Sweeney em bpo-40890(2).)

   * PEP 618(3): A função *note zip(): 7d1. agora tem um sinalizador
     opcional ‘strict’, usado para exigir que todos os iteráveis tenham
     um comprimento igual.

   * Funções embutidas e de extensão que recebem argumentos inteiros não
     aceitam mais *note Decimal: 29d, *note Fraction: 1e7. e outros
     objetos que podem ser convertidos em inteiros apenas com uma perda
     (por exemplo, tem o método *note __int__(): 71c, mas não tem o
     método *note __index__(): 71d.).  (Contribuição de Serhiy Storchaka
     em bpo-37999(4).)

   * Se *note object.__ipow__(): 7d2. retorna *note NotImplemented: 7d3,
     o operador vai corretamente recorrer ao *note object.__pow__():
     7d4. e *note object.__rpow__(): 7d5. como esperado.  (Contribuição
     de Alex Shkop em bpo-38302(5).)

   * Expressões de atribuição agora podem ser usadas sem parênteses
     dentro de literais de conjuntos e compreensões de conjuntos, bem
     como em índices de sequência (mas não em fatias).

   * As funções têm um novo atributo ‘__builtins__’ que é usado para
     procurar por símbolos embutidos quando uma função é executada, em
     vez de procurar em ‘__globals__['__builtins__']’.  O atributo é
     inicializado a partir de ‘__globals__["__builtins__"]’ se existir;
     do contrário, a partir dos embutidos atuais.  (Contribuição de Mark
     Shannon em bpo-42990(6).)

   * Duas novas funções embutidas – *note aiter(): 7d6. e *note anext():
     7d7. foram adicionadas para fornecer contrapartes assíncronas para
     *note iter(): 7d8. e *note next(): 7d9, respectivamente.
     (Contribuição de Joshua Bronson, Daniel Pope e Justin Wang em
     bpo-31861(7).)

   * Métodos estáticos (*note @staticmethod: 416.) e métodos de classe
     (*note @classmethod: 166.) agora herdam os atributos de método
     (‘__module__’, ‘__name__’, ‘__qualname__’, ‘__doc__’,
     ‘__annotations__’) e têm um novo atributo ‘__wrapped__’ .  Além
     disso, métodos estáticos são agora chamáveis como funções
     regulares.  (Contribuição de Victor Stinner em bpo-43682(8).)

   * Anotações para alvos complexos (tudo além de alvos de nome simples,
     ou ‘simple name’, definidos pela PEP 526(9)) não causam mais nenhum
     efeito de tempo de execução com ‘from __future__ import
     annotations’.  (Contribuição de Batuhan Taskaya em bpo-42737(10).)

   * Objetos classe e módulo agora criam preguiçosamente dados vazios de
     anotações sob demanda.  Os dicionários de anotações são armazenados
     em ‘__dict__’ do objeto para compatibilidade com versões
     anteriores.  Isso melhora as melhores práticas para trabalhar com
     ‘__annotations__’; para mais informações, veja *note Boas práticas
     para anotações: 7da.  (Contribuição de Larry Hastings em
     bpo-43901(11).)

   * Anotações consistindo em ‘yield’, ‘yield from’, ‘await’ ou
     expressões nomeadas agora são proibidas em ‘from __future__ import
     annotations’ por causa de seus efeitos colaterais.  (Contribuição
     de Batuhan Taskaya em bpo-42725(12).)

   * O uso de variáveis não ligadas, ‘super()’ e outras expressões que
     podem alterar o processamento da tabela de símbolos como anotações
     são agora processadas sem efeito sob ‘from __future__ import
     annotations’.  (Contribuição de Batuhan Taskaya em bpo-42725(13).)

   * Hashes de valores NaN de ambos os tipos *note float: 2f7. e *note
     decimal.Decimal: 29d. agora dependem da identidade do objeto.
     Anteriormente, eles sempre hash para ‘0’ mesmo que os valores NaN
     não sejam iguais uns aos outros.  Isso causou um comportamento de
     tempo de execução potencialmente quadrático devido a colisões de
     hash excessivas ao criar dicionários e conjuntos contendo vários
     NaNs.  (Contribuição de Raymond Hettinger em bpo-43475(14).)

   * Uma *note SyntaxError: 18d. (ao invés de uma *note NameError: 43f.)
     será levantada ao excluir a constante *note __debug__: 7db.
     (Contribuição de Donghee Na em bpo-45000(15).)

   * Exceções *note SyntaxError: 18d. agora possuem atributos
     ‘end_lineno’ e ‘end_offset’.  Eles serão ‘None’ se não forem
     determinados.  (Contribuição de Pablo Galindo em bpo-43914(16).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29882

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40890

   (3) https://peps.python.org/pep-0618/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=37999

   (5) https://bugs.python.org/issue?@action=redirect&bpo=38302

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42990

   (7) https://bugs.python.org/issue?@action=redirect&bpo=31861

   (8) https://bugs.python.org/issue?@action=redirect&bpo=43682

   (9) https://peps.python.org/pep-0526/

   (10) https://bugs.python.org/issue?@action=redirect&bpo=42737

   (11) https://bugs.python.org/issue?@action=redirect&bpo=43901

   (12) https://bugs.python.org/issue?@action=redirect&bpo=42725

   (13) https://bugs.python.org/issue?@action=redirect&bpo=42725

   (14) https://bugs.python.org/issue?@action=redirect&bpo=43475

   (15) https://bugs.python.org/issue?@action=redirect&bpo=45000

   (16) https://bugs.python.org/issue?@action=redirect&bpo=43914


File: python.info,  Node: Novos módulos<4>,  Next: Módulos melhorados<4>,  Prev: Outras mudanças na linguagem<4>,  Up: O que há de novo no Python 3 10

1.4.5 Novos módulos
-------------------

   * Nenhum.


File: python.info,  Node: Módulos melhorados<4>,  Next: Otimizações<4>,  Prev: Novos módulos<4>,  Up: O que há de novo no Python 3 10

1.4.6 Módulos melhorados
------------------------

* Menu:

* asyncio: asyncio<4>.
* argparse: argparse<2>.
* array: array<3>.
* asynchat, asyncore, smtpd: asynchat asyncore smtpd.
* base64: base64<2>.
* bdb::
* bisect::
* codecs::
* collections.abc: collections abc.
* contextlib: contextlib<2>.
* curses::
* dataclasses: dataclasses<2>.
* distutils: distutils<2>.
* doctest: doctest<2>.
* encodings::
* enum: enum<4>.
* fileinput::
* faulthandler::
* gc::
* glob: glob<2>.
* hashlib: hashlib<3>.
* hmac::
* IDLE e idlelib: IDLE e idlelib<2>.
* importlib.metadata: importlib metadata<2>.
* inspect: inspect<3>.
* itertools: itertools<3>.
* linecache::
* os: os<4>.
* os.path: os path<4>.
* pathlib: pathlib<5>.
* platform: platform<2>.
* pprint::
* py_compile::
* pyclbr::
* shelve::
* statistics: statistics<3>.
* site: site<2>.
* socket: socket<2>.
* ssl: ssl<3>.
* sqlite3: sqlite3<5>.
* sys: sys<5>.
* _thread::
* threading: threading<3>.
* traceback: traceback<3>.
* types: types<3>.
* typing: typing<5>.
* unittest: unittest<5>.
* urllib.parse: urllib parse.
* xml: xml<2>.
* zipimport: zipimport<3>.


File: python.info,  Node: asyncio<4>,  Next: argparse<2>,  Up: Módulos melhorados<4>

1.4.6.1 asyncio
...............

Adiciona o método *note connect_accepted_socket(): 7df. até então em
falta.  (Contribuição de Alex Grönholm em bpo-41332(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41332


File: python.info,  Node: argparse<2>,  Next: array<3>,  Prev: asyncio<4>,  Up: Módulos melhorados<4>

1.4.6.2 argparse
................

A frase enganosa “argumentos opcionais” foi substituída por “opções” na
ajuda do argparse.  Alguns testes podem exigir adaptação se eles
dependerem da correspondência de saída exata.  (Contribuição de Raymond
Hettinger em bpo-9694(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9694


File: python.info,  Node: array<3>,  Next: asynchat asyncore smtpd,  Prev: argparse<2>,  Up: Módulos melhorados<4>

1.4.6.3 array
.............

O método *note index(): 7e2. de *note array.array: 1a0. agora possui os
parâmetros 'start' e 'stop'.  (Contribuição de Anders Lorentsen e
Zackery Spytz em bpo-31956(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31956


File: python.info,  Node: asynchat asyncore smtpd,  Next: base64<2>,  Prev: array<3>,  Up: Módulos melhorados<4>

1.4.6.4 asynchat, asyncore, smtpd
.................................

Esses módulos foram marcados como descontinuados em sua documentação de
módulo desde o Python 3.6.  Uma exceção *note DeprecationWarning: 1a5.
em tempo de importação agora foi adicionada a todos esses três módulos.


File: python.info,  Node: base64<2>,  Next: bdb,  Prev: asynchat asyncore smtpd,  Up: Módulos melhorados<4>

1.4.6.5 base64
..............

Adiciona *note base64.b32hexencode(): 7e5. e *note
base64.b32hexdecode(): 7e6. para dar suporte a Codificação Base32 com
alfabeto hexa estendido.


File: python.info,  Node: bdb,  Next: bisect,  Prev: base64<2>,  Up: Módulos melhorados<4>

1.4.6.6 bdb
...........

Adiciona ‘clearBreakpoints()’ para redefinir todos os pontos de
interrupção definidos.  (Contribuição de Irit Katriel em bpo-24160(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24160


File: python.info,  Node: bisect,  Next: codecs,  Prev: bdb,  Up: Módulos melhorados<4>

1.4.6.7 bisect
..............

Adicionada a possibilidade de fornecer uma função 'key' para as APIs no
módulo *note bisect: 11.  (Contribuição de Raymond Hettinger em
bpo-4356(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=4356


File: python.info,  Node: codecs,  Next: collections abc,  Prev: bisect,  Up: Módulos melhorados<4>

1.4.6.8 codecs
..............

Adiciona uma função *note codecs.unregister(): 7ea. para cancelar um
registro de uma função de pesquisa de codecs.  (Contribuição de Hai Shi
em bpo-41842(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41842


File: python.info,  Node: collections abc,  Next: contextlib<2>,  Prev: codecs,  Up: Módulos melhorados<4>

1.4.6.9 collections.abc
.......................

Os ‘__args__’ do *note genérico parametrizado: 6b2. para *note
collections.abc.Callable: 7ec. agora são consistentes com *note
typing.Callable: 7c6.  A classe genérica *note collections.abc.Callable:
7ec. agora achata parâmetros de tipo, de forma semelhante ao que *note
typing.Callable: 7c6. atualmente faz.  Isso significa que
‘collections.abc.Callable[[int, str], str]’ terá ‘__args__’ de ‘(int,
str, str)’; anteriormente, isso era ‘([int, str], str)’.  Para permitir
esta alteração, agora é possível criar subclasse de *note
types.GenericAlias: 7ed. e uma subclasse será retornada ao fazer um
subscript do tipo *note collections.abc.Callable: 7ec.  Observe que uma
*note TypeError: 2c3. pode ser levantada para formas inválidas de
parametrizar *note collections.abc.Callable: 7ec. que podem ter passado
silenciosamente no Python 3.9.  (Contribuição de Ken Jin em
bpo-42195(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42195


File: python.info,  Node: contextlib<2>,  Next: curses,  Prev: collections abc,  Up: Módulos melhorados<4>

1.4.6.10 contextlib
...................

Adiciona um gerenciador de contexto *note contextlib.aclosing(): 7ef.
para fechar com segurança geradores assíncronos e objetos que
representam recursos liberados de forma assíncrona.  (Contribuição de
Joongi Kim e John Belmonte em bpo-41229(1).)

Adiciona suporte a gerenciador de contexto assíncrono a *note
contextlib.nullcontext(): 7f0.  (Contribuição de Tom Gringauz em
bpo-41543(2).)

Adiciona *note AsyncContextDecorator: 7f1, para dar suporte ao uso de
gerenciadores de contexto assíncronos como decoradores.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41229

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41543


File: python.info,  Node: curses,  Next: dataclasses<2>,  Prev: contextlib<2>,  Up: Módulos melhorados<4>

1.4.6.11 curses
...............

As funções de cores estendidas adicionadas no ncurses 6.1 serão usadas
transparentemente por *note curses.color_content(): 7f3, *note
curses.init_color(): 7f4, *note curses.init_pair(): 7f5. e *note
curses.pair_content(): 7f6.  Uma nova função, *note
curses.has_extended_color_support(): 7f7, indica se o suporte a cores
estendidas é fornecido pela biblioteca ncurses subjacente.
(Contribuição de Jeffrey Kintscher e Hans Petter Jansson em
bpo-36982(1).)

As constantes ‘BUTTON5_*’ agora são expostas no módulo *note curses: 2b.
se forem fornecidas pela biblioteca curses subjacente.  (Contribuição de
Zackery Spytz em bpo-39273(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36982

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39273


File: python.info,  Node: dataclasses<2>,  Next: distutils<2>,  Prev: curses,  Up: Módulos melhorados<4>

1.4.6.12 dataclasses
....................

* Menu:

* __slots__::
* Campos somente-nomeados::


File: python.info,  Node: __slots__,  Next: Campos somente-nomeados,  Up: dataclasses<2>

1.4.6.13 __slots__
..................

Adicionado o parâmetro ‘slots’ no decorador *note
dataclasses.dataclass(): 1cb.  (Contribuição de Yurii Karabas em
bpo-42269(1))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42269


File: python.info,  Node: Campos somente-nomeados,  Prev: __slots__,  Up: dataclasses<2>

1.4.6.14 Campos somente-nomeados
................................

dataclasses agora oferece suporte a campos que são somente-nomeados no
método __init__ gerado.  Há várias maneiras de especificar campos
somente-nomeados.

Você pode dizer que todos os campos são somente-nomeados:

     from dataclasses import dataclass

     @dataclass(kw_only=True)
     class Birthday:
         name: str
         birthday: datetime.date

Ambos ‘name’ e ‘birthday’ são parâmetros somente-nomeados para o método
__init__ gerado.

Você pode especificar somente-nomeado por campo:

     from dataclasses import dataclass, field

     @dataclass
     class Birthday:
         name: str
         birthday: datetime.date = field(kw_only=True)

Aqui apenas ‘birthday’ é somente-nomeado.  Se você definir ‘kw_only’ em
campos individuais, esteja ciente de que existem regras sobre a
reordenação de campos devido a campos somente-nomeados que precisam
seguir campos não somente-nomeados.  Consulte a documentação completa de
dataclasses para obter detalhes.

Você também pode especificar que todos os campos a partir de um marcador
KW_ONLY sejam somente-nomeados.  Este provavelmente será o uso mais
comum:

     from dataclasses import dataclass, KW_ONLY

     @dataclass
     class Point:
         x: float
         y: float
         _: KW_ONLY
         z: float = 0.0
         t: float = 0.0

Aqui, ‘z’ e ‘t’ são parâmetros somente-nomeados, enquanto ‘x’ e ‘y’ não
são.  (Contribuição de Eric V. Smith em bpo-43532(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43532


File: python.info,  Node: distutils<2>,  Next: doctest<2>,  Prev: dataclasses<2>,  Up: Módulos melhorados<4>

1.4.6.15 distutils
..................

Todo o pacote ‘distutils’ foi descontinuado, para ser removido no Python
3.12.  Sua funcionalidade para especificar compilações de pacote já foi
completamente substituída por pacotes de terceiros ‘setuptools’ e
‘packaging’, e a maioria das outras APIs comumente usadas estão
disponíveis em outro lugar na biblioteca padrão (como *note platform:
aa, *note shutil: c5, *note subprocess: d6. ou *note sysconfig: db.).
Não há planos para migrar qualquer outra funcionalidade de ‘distutils’,
e aplicativos que estão usando outras funções devem planejar fazer
cópias privadas do código.  Consulte PEP 632(1) para discussão.

O comando descontinuado ‘bdist_wininst’ no Python 3.8 foi removido.  O
comando ‘bdist_wheel’ agora é recomendado para distribuir pacotes
binários no Windows.  (Contribuição de Victor Stinner em bpo-42802(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0632/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42802


File: python.info,  Node: doctest<2>,  Next: encodings,  Prev: distutils<2>,  Up: Módulos melhorados<4>

1.4.6.16 doctest
................

Quando um módulo não define ‘__loader__’, recorre a ‘__spec__.loader’.
(Contribuição de Brett Cannon em bpo-42133(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42133


File: python.info,  Node: encodings,  Next: enum<4>,  Prev: doctest<2>,  Up: Módulos melhorados<4>

1.4.6.17 encodings
..................

*note encodings.normalize_encoding(): 7fe. agora ignora caracteres
não-ASCII. (Contribuição de Hai Shi em bpo-39337(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39337


File: python.info,  Node: enum<4>,  Next: fileinput,  Prev: encodings,  Up: Módulos melhorados<4>

1.4.6.18 enum
.............

*note __repr__(): 61c. do *note Enum: 630. agora retorna
‘enum_name.member_name’ e *note __str__(): 61d. agora retorna
‘member_name’.  Os enums da stdlib disponíveis como constantes de módulo
têm *note repr(): 800. de ‘module_name.member_name’.  (Contribuição de
Ethan Furman em bpo-40066(1).)

Adiciona *note enum.StrEnum: 61a. para enums onde todos os membros são
strings.  (Contribuição de Ethan Furman em bpo-41816(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40066

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41816


File: python.info,  Node: fileinput,  Next: faulthandler,  Prev: enum<4>,  Up: Módulos melhorados<4>

1.4.6.19 fileinput
..................

Adiciona os parâmetros 'encoding' e 'errors' a *note fileinput.input():
802. e *note fileinput.FileInput: 737.  (Contribuição de Inada Naoki em
bpo-43712(1).)

*note fileinput.hook_compressed(): 803. agora retorna um objeto *note
TextIOWrapper: 7bc. quando 'mode' é “r” e o arquivo está compactado,
como arquivos descompactados.  (Contribuição de Inada Naoki em
bpo-5758(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43712

   (2) https://bugs.python.org/issue?@action=redirect&bpo=5758


File: python.info,  Node: faulthandler,  Next: gc,  Prev: fileinput,  Up: Módulos melhorados<4>

1.4.6.20 faulthandler
.....................

O módulo *note faulthandler: 58. agora detecta se um erro fatal ocorre
durante a coleta do coletor de lixo.  (Contribuição de Victor Stinner em
bpo-44466(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44466


File: python.info,  Node: gc,  Next: glob<2>,  Prev: faulthandler,  Up: Módulos melhorados<4>

1.4.6.21 gc
...........

Adiciona ganchos de auditoria para *note gc.get_objects(): 806, *note
gc.get_referrers(): 807. e *note gc.get_referents(): 808.  (Contribuição
de Pablo Galindo em bpo-43439(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43439


File: python.info,  Node: glob<2>,  Next: hashlib<3>,  Prev: gc,  Up: Módulos melhorados<4>

1.4.6.22 glob
.............

Adiciona os parâmetros 'root_dir' e 'dir_fd' em *note glob(): 29f. e
*note iglob(): 80a, o que permite especificar o diretório raiz para a
pesquisa.  (Contribuição de Serhiy Storchaka em bpo-38144(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38144


File: python.info,  Node: hashlib<3>,  Next: hmac,  Prev: glob<2>,  Up: Módulos melhorados<4>

1.4.6.23 hashlib
................

O módulo hashlib requer OpenSSL 1.1.1 ou mais recente.  (Contribuição de
Christian Heimes em PEP 644(1) e bpo-43669(2).)

O módulo hashlib tem suporte preliminar a OpenSSL 3.0.0.  (Contribuição
de Christian Heimes em bpo-38820(3) e outras issues.)

A alternativa puramente Python de *note pbkdf2_hmac(): 50f. foi
descontinuada.  No futuro, o PBKDF2-HMAC só estará disponível quando o
Python for desenvolvido com suporte a OpenSSL. (Contribuição de
Christian Heimes em bpo-43880(4).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0644/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43669

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38820

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43880


File: python.info,  Node: hmac,  Next: IDLE e idlelib<2>,  Prev: hashlib<3>,  Up: Módulos melhorados<4>

1.4.6.24 hmac
.............

O módulo hmac agora usa a implementação HMAC do OpenSSL internamente.
(Contribuição de Christian Heimes em bpo-40645(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40645


File: python.info,  Node: IDLE e idlelib<2>,  Next: importlib metadata<2>,  Prev: hmac,  Up: Módulos melhorados<4>

1.4.6.25 IDLE e idlelib
.......................

Faz o IDLE invocar *note sys.excepthook(): 80e. (quando iniciado sem
‘-n’).  Ganchos de usuário eram ignorados anteriormente.  (Contribuição
de Ken Hilton em bpo-43008(1).)

Reorganiza a caixa de diálogo de configurações.  Divide a aba General
nas abas Windows e Shell/Ed.  Move as fontes de ajuda, que estendem o
menu Help, para a aba Extensions.  Abre espaço para novas opções e
encurta a caixa de diálogo.  O último faz com que o diálogo se ajuste
melhor a telas pequenas.  (Contribuição de Terry Jan Reedy em
bpo-40468(2).)  Move a configuração do espaço de recuo da aba Font para
a nova aba Windows.  (Contribuição de Mark Roseman e Terry Jan Reedy em
bpo-33962(3).)

As alterações acima foram portadas para uma versão de manutenção 3.9.

Adiciona uma barra lateral ao console.  Move o prompt principal (‘>>>’)
para a barra lateral.  Adiciona prompts secundários (’…’) à barra
lateral.  Clicar com o botão esquerdo e opcionalmente arrastar seleciona
uma ou mais linhas de texto, como na barra lateral do número da linha do
editor.  Clicar com o botão direito após selecionar as linhas de texto
exibe um menu de contexto com “copy with prompts”.  Isso compacta os
prompts da barra lateral com linhas do texto selecionado.  Esta opção
também aparece no menu de contexto para o texto.  (Contribuição de Tal
Einat em bpo-37903(4).)

Use espaços em vez de tabulações para indentar o código interativo.
Isso faz com que as entradas de código interativo “pareçam corretas”.
Tornar isso viável foi a principal motivação para adicionar a barra
lateral do console.  Contribuição de Terry Jan Reedy em bpo-37892(5).)

Realça as novas *note palavra reservada suave: 80f. *note match: 810,
*note case: 810. e *note _: 811. em instruções de correspondência de
padrões.  No entanto, este realce não é perfeito e estará incorreto em
alguns casos raros, incluindo alguns ‘_’ em padrões de ‘case’.
(Contribuição de Tal Einat em bpo-44010(6).)

Novo nas versões de manutenção 3.10.

Aplica realce de sintaxe em arquivos ‘.pyi’.  (Contribuição de Alex
Waygood e Terry Jan Reedy em bpo-45447(7).)

Inclui prompts ao salvar o console com entradas e saídas.  (Contribuição
de Terry Jan Reedy em gh-95191(8).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43008

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40468

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33962

   (4) https://bugs.python.org/issue?@action=redirect&bpo=37903

   (5) https://bugs.python.org/issue?@action=redirect&bpo=37892

   (6) https://bugs.python.org/issue?@action=redirect&bpo=44010

   (7) https://bugs.python.org/issue?@action=redirect&bpo=45447

   (8) https://github.com/python/cpython/issues/95191


File: python.info,  Node: importlib metadata<2>,  Next: inspect<3>,  Prev: IDLE e idlelib<2>,  Up: Módulos melhorados<4>

1.4.6.26 importlib.metadata
...........................

Paridade de recursos com ‘importlib_metadata’ 4.6 (histórico(1)).

*note Pontos de entrada importlib.metadata: 284. agora oferecem uma
experiência melhor para selecionar pontos de entrada por grupo e nome
através do novo *note importlib.metadata.EntryPoints: 284.  Consulte a
Nota de Compatibilidade nos documentos para obter mais informações sobre
a descontinuação e uso.

Adicionada *note importlib.metadata.packages_distributions(): 813. para
resolver módulos e pacotes Python de alto nível com suas *note
importlib.metadata.Distribution: 814.

   ---------- Footnotes ----------

   (1) https://importlib-metadata.readthedocs.io/en/latest/history.html


File: python.info,  Node: inspect<3>,  Next: itertools<3>,  Prev: importlib metadata<2>,  Up: Módulos melhorados<4>

1.4.6.27 inspect
................

Quando um módulo não define ‘__loader__’, recorre a ‘__spec__.loader’.
(Contribuição de Brett Cannon em bpo-42133(1).)

Adiciona *note inspect.get_annotations(): 816, que calcula com segurança
as anotações definidas em um objeto.  Ele contorna as peculiaridades de
acessar as anotações em vários tipos de objetos e faz poucas suposições
sobre o objeto que examina.  *note inspect.get_annotations(): 816.
também pode desfazer a string corretamente de anotações em string.
*note inspect.get_annotations(): 816. agora é considerada a melhor
prática para acessar o dict de anotações definido em qualquer objeto
Python; para mais informações sobre as melhores práticas para trabalhar
com anotações, consulte *note Boas práticas para anotações: 7da.  Da
mesma forma, *note inspect.signature(): 738, *note
inspect.Signature.from_callable(): 73a. e
‘inspect.Signature.from_function()’ agora chamam *note
inspect.get_annotations(): 816. para recuperar anotações.  Isso
significa que *note inspect.signature(): 738. e *note
inspect.Signature.from_callable(): 73a. agora também podem remover a
string de anotações em string.  (Contribuição de Larry Hastings em
bpo-43817(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42133

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43817


File: python.info,  Node: itertools<3>,  Next: linecache,  Prev: inspect<3>,  Up: Módulos melhorados<4>

1.4.6.28 itertools
..................

Adiciona *note itertools.pairwise(): 818.  (Contribuição de Raymond
Hettinger em bpo-38200(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38200


File: python.info,  Node: linecache,  Next: os<4>,  Prev: itertools<3>,  Up: Módulos melhorados<4>

1.4.6.29 linecache
..................

Quando um módulo não define ‘__loader__’, recorre a ‘__spec__.loader’.
(Contribuição de Brett Cannon em bpo-42133(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42133


File: python.info,  Node: os<4>,  Next: os path<4>,  Prev: linecache,  Up: Módulos melhorados<4>

1.4.6.30 os
...........

Adiciona suporte a *note os.cpu_count(): 1c5. para RTOS de VxWorks.
(Contribuição de Peixing Xin em bpo-41440(1).)

Adiciona uma nova função *note os.eventfd(): 81b. e auxiliares
relacionados para envolver a chamada de sistema ‘eventfd2’ no Linux.
(Contribuição de Christian Heimes em bpo-41001(2).)

Adiciona *note os.splice(): 81c. que permite mover dados entre dois
descritores de arquivo sem copiar entre o espaço de endereço do kernel e
o espaço de endereço do usuário, onde um dos descritores de arquivo deve
se referir a um encadeamento (pipe).  (Contribuição de Pablo Galindo em
bpo-41625(3).)

Adiciona *note O_EVTONLY: 81d, *note O_FSYNC: 81e, *note O_SYMLINK: 81f.
e *note O_NOFOLLOW_ANY: 820. para macOS. (Contribuição de Donghee Na em
bpo-43106(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41440

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41001

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41625

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43106


File: python.info,  Node: os path<4>,  Next: pathlib<5>,  Prev: os<4>,  Up: Módulos melhorados<4>

1.4.6.31 os.path
................

*note os.path.realpath(): 225. agora aceita um argumento somente-nomeado
'strict'.  Quando definido como ‘True’, a exceção *note OSError: 417. é
levantada se um caminho não existe ou um loop de link simbólico é
encontrado.  (Contribuição de Barney Gale em bpo-43757(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43757


File: python.info,  Node: pathlib<5>,  Next: platform<2>,  Prev: os path<4>,  Up: Módulos melhorados<4>

1.4.6.32 pathlib
................

Adiciona suporte a fatiamento a *note PurePath.parents: 823.
(Contribuição de Joshua Cannon em bpo-35498(1).)

Adiciona suporte a indexação negativa a *note PurePath.parents: 823.
(Contribuição de Yaroslav Pankovych em bpo-21041(2).)

Adiciona o método *note Path.hardlink_to: 824. que substitui
‘link_to()’.  O novo método tem a mesma ordem de argumentos que *note
symlink_to(): 825.  (Contribuição de Barney Gale em bpo-39950(3).)

*note pathlib.Path.stat(): 826. e *note chmod(): 827. agora aceita um
argumento somente-nomeado 'follow_symlinks' para consistência com as
funções correspondentes no módulo *note os: a1.  (Contribuição de Barney
Gale em bpo-39906(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35498

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21041

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39950

   (4) https://bugs.python.org/issue?@action=redirect&bpo=39906


File: python.info,  Node: platform<2>,  Next: pprint,  Prev: pathlib<5>,  Up: Módulos melhorados<4>

1.4.6.33 platform
.................

Adiciona *note platform.freedesktop_os_release(): 829. para obter a
identificação do sistema operacional a partir do arquivo padrão
os-release do freedesktop.org(1).  (Contribuição de Christian Heimes em
bpo-28468(2).)

   ---------- Footnotes ----------

   (1) https://www.freedesktop.org/software/systemd/man/os-release.html

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28468


File: python.info,  Node: pprint,  Next: py_compile,  Prev: platform<2>,  Up: Módulos melhorados<4>

1.4.6.34 pprint
...............

*note pprint.pprint(): 82b. agora aceita um novo argumento nomeado
‘underscore_numbers’.  (Contribuição de sblondon em bpo-42914(1).)

*note pprint: ae. agora pode fazer impressão bonita de instâncias de
*note dataclasses.dataclass: 1cb.  (Contribuição de Lewis Gaul em
bpo-43080(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42914

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43080


File: python.info,  Node: py_compile,  Next: pyclbr,  Prev: pprint,  Up: Módulos melhorados<4>

1.4.6.35 py_compile
...................

Adiciona a opção ‘--quiet’ à interface de linha de comando de *note
py_compile: b3.  (Contribuição de Gregory Schevchenko em bpo-38731(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38731


File: python.info,  Node: pyclbr,  Next: shelve,  Prev: py_compile,  Up: Módulos melhorados<4>

1.4.6.36 pyclbr
...............

Adiciona um atributo ‘end_lineno’ aos objetos ‘Function’ e ‘Class’ na
árvore retornada por *note pyclbr.readmodule(): 82e. e *note
pyclbr.readmodule_ex(): 82f.  Isso corresponde ao ‘lineno’ (início)
existente.  (Contribuição de Aviral Srivastava em bpo-38307(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38307


File: python.info,  Node: shelve,  Next: statistics<3>,  Prev: pyclbr,  Up: Módulos melhorados<4>

1.4.6.37 shelve
...............

O módulo *note shelve: c3. agora usa *note pickle.DEFAULT_PROTOCOL: 831.
por padrão em vez do protocolo ‘3’ do *note pickle: a6. ao criar
“shelves”.  (Contribuição de Zackery Spytz em bpo-34204(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34204


File: python.info,  Node: statistics<3>,  Next: site<2>,  Prev: shelve,  Up: Módulos melhorados<4>

1.4.6.38 statistics
...................

Adiciona *note covariance(): 833, *note correlation(): 4bc. do Pearson,
e funções simples *note linear_regression(): 834.  (Contribuição de
Tymoteusz Wołodźko em bpo-38490(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38490


File: python.info,  Node: site<2>,  Next: socket<2>,  Prev: statistics<3>,  Up: Módulos melhorados<4>

1.4.6.39 site
.............

Quando um módulo não define ‘__loader__’, recorre a ‘__spec__.loader’.
(Contribuição de Brett Cannon em bpo-42133(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42133


File: python.info,  Node: socket<2>,  Next: ssl<3>,  Prev: site<2>,  Up: Módulos melhorados<4>

1.4.6.40 socket
...............

A exceção *note socket.timeout: 837. é agora um apelido de *note
TimeoutError: 838.  (Contribuição de Christian Heimes em bpo-42413(1).)

Adiciona a opção de criar soquetes MPTCP com ‘IPPROTO_MPTCP’
(Contribuição de Rui Cunha em bpo-43571(2).)

Adiciona a opção ‘IP_RECVTOS’ para receber o tipo do serviço (ToS) ou
campos DSCP/ECN (Contribuição de Georg Sauthoff em bpo-44077(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42413

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43571

   (3) https://bugs.python.org/issue?@action=redirect&bpo=44077


File: python.info,  Node: ssl<3>,  Next: sqlite3<5>,  Prev: socket<2>,  Up: Módulos melhorados<4>

1.4.6.41 ssl
............

O módulo ssl requer OpenSSL 1.1.1 ou mais recente.  (Contribuição de
Christian Heimes em PEP 644(1) e bpo-43669(2).)

O módulo ssl tem um suporte preliminar para OpenSSL 3.0.0 e a nova opção
*note OP_IGNORE_UNEXPECTED_EOF: 83a.  (Contribuição de Christian Heimes
em bpo-38820(3), bpo-43794(4), bpo-43788(5), bpo-43791(6), bpo-43799(7),
bpo-43920(8), bpo-43789(9) e bpo-43811(10).)

Função descontinuada e o uso de constantes descontinuadas agora resultam
em uma *note DeprecationWarning: 1a5.  *note ssl.SSLContext.options:
83b. tem *note OP_NO_SSLv2: 83c. e *note OP_NO_SSLv3: 83d. definidos por
padrão e, portanto, não consegue avisar sobre a definição do sinalizador
novamente.  A *note seção de descontinuidade: 83e. tem uma lista de
recursos descontinuados.  (Contribuição de Christian Heimes em
bpo-43880(11).)

O módulo ssl agora tem configurações padrão mais seguras.  Cifras sem
'forward secrecy' ou SHA-1 MAC são desabilitadas por padrão.  O nível de
segurança 2 proíbe chaves fracas RSA, DH e ECC com menos de 112 bits de
segurança.  *note SSLContext: 294. assume como padrão a versão mínima do
protocolo TLS 1.2.  As configurações são baseadas na pesquisa de Hynek
Schlawack.  (Contribuição de Christian Heimes em bpo-43998(12).)

Os protocolos descontinuados SSL 3.0, TLS 1.0 e TLS 1.1 não são mais
oficialmente suportados.  Python não os bloqueia ativamente.  No
entanto, as opções de compilação do OpenSSL, configurações de distro,
patches de fornecedores e suítes de criptografia podem impedir um
handshake bem-sucedido.

Adiciona um parâmetro 'timeout' à função *note
ssl.get_server_certificate(): 83f.  (Contribuição de Zackery Spytz em
bpo-31870(13).)

O módulo ssl usa tipos de heap e inicialização multifásica.
(Contribuição de Christian Heimes em bpo-42333(14).)

Uma nova sinalização de verificação *note VERIFY_X509_PARTIAL_CHAIN:
156. foi adicionada.  (Contribuição de l0x em bpo-40849(15).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0644/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43669

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38820

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43794

   (5) https://bugs.python.org/issue?@action=redirect&bpo=43788

   (6) https://bugs.python.org/issue?@action=redirect&bpo=43791

   (7) https://bugs.python.org/issue?@action=redirect&bpo=43799

   (8) https://bugs.python.org/issue?@action=redirect&bpo=43920

   (9) https://bugs.python.org/issue?@action=redirect&bpo=43789

   (10) https://bugs.python.org/issue?@action=redirect&bpo=43811

   (11) https://bugs.python.org/issue?@action=redirect&bpo=43880

   (12) https://bugs.python.org/issue?@action=redirect&bpo=43998

   (13) https://bugs.python.org/issue?@action=redirect&bpo=31870

   (14) https://bugs.python.org/issue?@action=redirect&bpo=42333

   (15) https://bugs.python.org/issue?@action=redirect&bpo=40849


File: python.info,  Node: sqlite3<5>,  Next: sys<5>,  Prev: ssl<3>,  Up: Módulos melhorados<4>

1.4.6.42 sqlite3
................

Adiciona eventos de auditoria para *note connect(): 2a8, *note
enable_load_extension(): 841. e *note load_extension(): 4b8.
(Contribuição de Erlend E. Aasland em bpo-43762(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43762


File: python.info,  Node: sys<5>,  Next: _thread,  Prev: sqlite3<5>,  Up: Módulos melhorados<4>

1.4.6.43 sys
............

Adiciona o atributo *note sys.orig_argv: 843.: a lista de argumentos de
linha de comando originais passada para o executável Python.
(Contribuição de Victor Stinner em bpo-23427(1).)

Adiciona *note sys.stdlib_module_names: 844, contendo a lista de nomes
de módulos da biblioteca padrão.  (Contribuição de Victor Stinner em
bpo-42955(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23427

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42955


File: python.info,  Node: _thread,  Next: threading<3>,  Prev: sys<5>,  Up: Módulos melhorados<4>

1.4.6.44 _thread
................

*note _thread.interrupt_main(): 846. agora aceita um número de sinal
opcional para simular (o padrão ainda é *note signal.SIGINT: 847.).
(Contribuição de Antoine Pitrou em bpo-43356(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43356


File: python.info,  Node: threading<3>,  Next: traceback<3>,  Prev: _thread,  Up: Módulos melhorados<4>

1.4.6.45 threading
..................

Adiciona *note threading.gettrace(): 849. e *note
threading.getprofile(): 84a. para obter as funções definidas por *note
threading.settrace(): 84b. e *note threading.setprofile(): 84c,
respectivamente.  (Contribuição de Mario Corchero em bpo-42251(1).)

Adiciona *note threading.__excepthook__: 84d. para permitir obtenção do
valor original de *note threading.excepthook(): 84e. no caso dele estar
definido com um valor quebrado ou diferente.  (Contribuição de Mario
Corchero em bpo-42308(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42251

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42308


File: python.info,  Node: traceback<3>,  Next: types<3>,  Prev: threading<3>,  Up: Módulos melhorados<4>

1.4.6.46 traceback
..................

As funções *note format_exception(): 850, *note format_exception_only():
851. e *note print_exception(): 852. podem agora receber um objeto
exceção como um argumento somente-posicional.  (Contribuição de Zackery
Spytz e Matthias Bussonnier em bpo-26389(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26389


File: python.info,  Node: types<3>,  Next: typing<5>,  Prev: traceback<3>,  Up: Módulos melhorados<4>

1.4.6.47 types
..............

Reintroduz as classes *note types.EllipsisType: 854, *note
types.NoneType: 855. e *note types.NotImplementedType: 856, fornecendo
um novo conjunto de tipos prontamente interpretáveis pelos verificadores
de tipo.  (Contribuição de Bas van Beek em bpo-41810(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41810


File: python.info,  Node: typing<5>,  Next: unittest<5>,  Prev: types<3>,  Up: Módulos melhorados<4>

1.4.6.48 typing
...............

Para alterações principais, veja *note Novos recursos relacionados a
dicas de tipo: 7bf.

O comportamento de *note typing.Literal: 858. foi alterado para ficar em
conformidade com a PEP 586(1) e para corresponder ao comportamento de
verificadores de tipo estático especificados na PEP.

  1. ‘Literal’ agora elimina a duplicação de parâmetros.

  2. Comparações de igualdade entre objetos ‘Literal’ agora são
     independentes da ordem.

  3. Comparações de ‘Literal’ agora respeitam os tipos.  Por exemplo,
     ‘Literal[0] == Literal[False]’ avaliava anteriormente como ‘True’.
     Agora é ‘False’.  Para oferecer suporte a essa mudança, o cache de
     tipo usado internamente agora oferece suporte a tipos de
     diferenciação.

  4. Objetos ‘Literal’ agora irão levantar uma exceção *note TypeError:
     2c3. durante as comparações de igualdade se algum de seus
     parâmetros não for *note hasheáveis: 610.  Observe que declarar
     ‘Literal’ com parâmetros inalteráveis não acusará um erro:

          >>> from typing import Literal
          >>> Literal[{0}]
          >>> Literal[{0}] == Literal[{False}]
          Traceback (most recent call last):
            File "<stdin>", line 1, in <module>
          TypeError: unhashable type: 'set'

(Contribuição de Yurii Karabas em bpo-42345(2).)

Adiciona uma nova função *note typing.is_typeddict(): 859. para fazer
introspecção se uma anotação for uma *note typing.TypedDict: 162.
(Contribuição de Patrick Reader em bpo-41792(3).)

Subclasses de ‘typing.Protocol’ que apenas têm variáveis de dados
declaradas agora irão levantar um ‘TypeError’ quando verificadas com
‘isinstance’ a menos que sejam decoradas com *note runtime_checkable():
443.  Anteriormente, essas verificações eram aprovadas silenciosamente.
Os usuários devem decorar suas subclasses com o decorador
‘runtime_checkable()’ se quiserem protocolos de tempo de execução.
(Contribuição de Yurii Karabas em bpo-38908(4).)

A importação dos submódulos ‘typing.io’ e ‘typing.re’ agora emitirá
*note DeprecationWarning: 1a5.  Esses submódulos fora descontinuados
desde o Python 3.8 e serão removidos em uma versão futura do Python.
Qualquer coisa pertencente a esses submódulos deve ser importada
diretamente de *note typing: 104.  (Contribuição de Sebastian Rittau em
bpo-38291(5).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0586/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42345

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41792

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38908

   (5) https://bugs.python.org/issue?@action=redirect&bpo=38291


File: python.info,  Node: unittest<5>,  Next: urllib parse,  Prev: typing<5>,  Up: Módulos melhorados<4>

1.4.6.49 unittest
.................

Adiciona novo método new *note assertNoLogs(): 85b. para complementar o
existente *note assertLogs(): 85c.  (Contribuição de Kit Yan Choi em
bpo-39385(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39385


File: python.info,  Node: urllib parse,  Next: xml<2>,  Prev: unittest<5>,  Up: Módulos melhorados<4>

1.4.6.50 urllib.parse
.....................

Versões do Python anteriores ao Python 3.10 permitiam o uso de ‘;’ e ‘&’
como separadores de parâmetros de consulta em *note
urllib.parse.parse_qs(): 27a. e *note urllib.parse.parse_qsl(): 279.
Devido a questões de segurança e em conformidade com as recomendações
mais recentes do W3C, isso foi alterado para permitir apenas uma única
chave separadora, com ‘&’ como padrão.  Esta mudança também afeta
‘cgi.parse()’ e ‘cgi.parse_multipart()’ já que elas usam as funções
afetadas internamente.  Para obter mais detalhes, consulte a respectiva
documentação.  (Contribuição de Adam Goldschmidt, Senthil Kumaran e Ken
Jin em bpo-42967(1).)

A presença de caracteres de nova linha ou tab em partes de um URL
permite algumas formas de ataques.  Seguindo a especificação WHATWG que
atualiza RFC 3986(2), nova linha ASCII ‘\n’, ‘\r’ e os caracteres de
tabulação ‘\t’ são retirados da URL pelo analisador sintático em *note
urllib.parse: 10a. impedindo tais ataques.  Os caracteres de remoção são
controlados por uma nova variável de nível de módulo
‘urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE’.  (Veja gh-88048(3))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42967

   (2) https://datatracker.ietf.org/doc/html/rfc3986.html

   (3) https://github.com/python/cpython/issues/88048


File: python.info,  Node: xml<2>,  Next: zipimport<3>,  Prev: urllib parse,  Up: Módulos melhorados<4>

1.4.6.51 xml
............

Adiciona uma classe *note LexicalHandler: 85f. ao módulo *note
xml.sax.handler: 12a.  (Contribuição de Jonathan Gossage e Zackery Spytz
em bpo-35018(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35018


File: python.info,  Node: zipimport<3>,  Prev: xml<2>,  Up: Módulos melhorados<4>

1.4.6.52 zipimport
..................

Adiciona métodos relacionados à PEP 451(1): *note find_spec(): 861,
*note zipimport.zipimporter.create_module(): 862. e *note
zipimport.zipimporter.exec_module(): 312.  (Contribuição de Brett Cannon
em bpo-42131(2).)

Adiciona o método *note invalidate_caches(): 863.  (Contribuição de
Desmond Cheong em bpo-14678(3).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0451/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42131

   (3) https://bugs.python.org/issue?@action=redirect&bpo=14678


File: python.info,  Node: Otimizações<4>,  Next: Descontinuados<5>,  Prev: Módulos melhorados<4>,  Up: O que há de novo no Python 3 10

1.4.7 Otimizações
-----------------

   * Os construtores *note str(): 44c, *note bytes(): 1c2. e *note
     bytearray(): 2ea. estão agora mais rápido (cerca de 30–40% para
     objetos pequenos).  (Contribuição de Serhiy Storchaka em
     bpo-41334(1).)

   * O módulo *note runpy: be. agora importa menos módulos.  O tempo de
     inicialização do comando ‘python3 -m module-name’ é 1,4 vezes mais
     rápido em média.  No Linux, ‘python3 -I -m module-name’ importa 69
     módulos no Python 3.9, sendo que importa apenas 51 módulos (-18) no
     Python 3.10.  (Contribuição de Victor Stinner em bpo-41006(2) e
     bpo-41718(3).)

   * A instrução ‘LOAD_ATTR’ agora usa o novo mecanismo “cache por
     opcode”.  É cerca de 36% mais rápido agora para atributos regulares
     e 44% mais rápido para slots.  (Contribuição de Pablo Galindo e
     Yury Selivanov em bpo-42093(4) e Guido van Rossum em bpo-42927(5),
     com base em ideias implementadas originalmente em PyPy e
     MicroPython.)

   * Ao construir o Python com *note -enable-optimizations: 865. agora,
     ‘-fno-semantic-interposition’ é adicionado à linha de compilação e
     vinculação.  Isso acelera as compilações do interpretador Python
     criado com *note -enable-shared: 866. com ‘gcc’ em até 30%.
     Consulte este artigo(6) para mais detalhes.  (Contribuição de
     Victor Stinner e Pablo Galindo em bpo-38980(7).)

   * Usa um novo código de gerenciamento de buffer de saída para os
     módulos *note bz2: 13. / *note lzma: 8a. / *note zlib: 133. e
     adiciona a função ‘.readall()’ à classe
     ‘_compression.DecompressReader’.  A descompressão bz2 agora é 1,09x
     ~ 1.17x mais rápida, a descompressão lzma 1.20x ~ 1.32x mais
     rápida, ‘GzipFile.read(-1)’ 1,11x ~ 1.18x mais rápida.
     (Contribuição de Ma Lin, revisada por Gregory P. Smith, em
     bpo-41486(8))

   * Ao usar anotações em strings, dicts de anotações para funções não
     são mais criados quando a função é criada.  Em vez disso, eles são
     armazenados como uma tupla de strings, e o objeto função converte
     lentamente isso no dict de anotações sob demanda.  Essa otimização
     reduz pela metade o tempo de CPU necessário para definir uma função
     anotada.  (Contribuição de Yurii Karabas e Inada Naoki em
     bpo-42202(9).)

   * Funções de pesquisa de substring como ‘str1 in str2’ e
     ‘str2.find(str1)’ agora às vezes usam o algoritmo de pesquisa de
     string “Two-Way” de Crochemore & Perrin para evitar comportamento
     quadrático em strings longas.  (Contribuição de Dennis Sweeney em
     bpo-41972(10))

   * Adiciona micro-otimizações a ‘_PyType_Lookup()’ para melhorar o
     desempenho de pesquisa de cache de atributo de tipo no caso comum
     de acessos de cache.  Isso torna o interpretador 1,04 vezes mais
     rápido, em média.  (Contribuição de Dino Viehland em
     bpo-43452(11).)

   * As seguintes funções embutidas agora oferecem suporte a uma
     convenção de chamada de vectorcalls mais rápidos da PEP 590(12):
     *note map(): 867, *note filter(): 868, *note reversed(): 869, *note
     bool(): 468. e *note float(): 2f7.  (Contribuição de Donghee Na e
     Jeroen Demeyer em bpo-43575(13), bpo-43287(14), bpo-41922(15),
     bpo-41873(16) e bpo-41870(17).)

   * O desempenho de *note BZ2File: 86a. foi melhorado removendo o
     ‘RLock’ interno.  Isso torna ‘BZ2File’ inseguro para threads em
     face a vários leitores ou gravadores simultâneos, da mesma forma
     que suas classes equivalentes em *note gzip: 67. e *note lzma: 8a.
     têm sido.  (Contribuição de Inada Naoki em bpo-43785(18).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41334

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41006

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41718

   (4) https://bugs.python.org/issue?@action=redirect&bpo=42093

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42927

   (6) 
https://developers.redhat.com/blog/2020/06/25/red-hat-enterprise-linux-8-2-brings-faster-python-3-8-run-speeds/

   (7) https://bugs.python.org/issue?@action=redirect&bpo=38980

   (8) https://bugs.python.org/issue?@action=redirect&bpo=41486

   (9) https://bugs.python.org/issue?@action=redirect&bpo=42202

   (10) https://bugs.python.org/issue?@action=redirect&bpo=41972

   (11) https://bugs.python.org/issue?@action=redirect&bpo=43452

   (12) https://peps.python.org/pep-0590/

   (13) https://bugs.python.org/issue?@action=redirect&bpo=43575

   (14) https://bugs.python.org/issue?@action=redirect&bpo=43287

   (15) https://bugs.python.org/issue?@action=redirect&bpo=41922

   (16) https://bugs.python.org/issue?@action=redirect&bpo=41873

   (17) https://bugs.python.org/issue?@action=redirect&bpo=41870

   (18) https://bugs.python.org/issue?@action=redirect&bpo=43785


File: python.info,  Node: Descontinuados<5>,  Next: Removidos<5>,  Prev: Otimizações<4>,  Up: O que há de novo no Python 3 10

1.4.8 Descontinuados
--------------------

   * Atualmente Python aceita literais numéricos imediatamente seguidos
     por palavras-chave, por exemplo ‘0in x’, ‘1or x’, ‘0if 1else 2’.
     Permite expressões confusas e ambíguas como ‘[0x1for x in y]’ (que
     pode ser interpretada como ‘[0x1 for x in y]’ ou ‘[0x1f or x in
     y]’).  A partir desta versão, um aviso de descontinuidade é
     levantado se o literal numérico for seguido imediatamente por uma
     das palavras-chave *note and: 2f1, *note else: 18c, *note for: 2f2,
     *note if: 2f3, *note in: 2f4, *note is: 2f5. e *note or: 2f6.  Em
     versões futuras, ele será alterado para aviso de sintaxe e,
     finalmente, para erro de sintaxe.  (Contribuição de Serhiy
     Storchaka em bpo-43833(1).)

   * A partir desta versão, haverá um esforço concentrado para começar a
     limpar a semântica de importação antiga que foi mantida para
     compatibilidade com Python 2.7.  Especificamente,
     ‘find_loader()’/‘find_module()’ (substituídos por *note
     find_spec(): 86c.), *note load_module(): 86d. (substituído por
     *note exec_module(): 86e.), ‘module_repr()’ (que o sistema de
     importação cuida para você), o atributo ‘__package__’ (substituído
     por ‘__spec__.parent’), o atributo ‘__loader__’ (substituído por
     ‘__spec__.loader’), e o atributo ‘__cached__’ ( substituído por
     ‘__spec__.cached’) será removido lentamente (assim como outras
     classes e métodos em *note importlib: 77.).  *note ImportWarning:
     4fa. e/ou *note DeprecationWarning: 1a5. será levantada conforme
     apropriado para ajudar a identificar o código que precisa ser
     atualizado durante esta transição.

   * Todo o espaço de nomes de ‘distutils’ foi descontinuado, para ser
     removido no Python 3.12.  Consulte a seção de *note alterações do
     módulo: 72a. para mais informações.

   * Argumentos não inteiros para *note random.randrange(): 86f. foram
     descontinuados.  A exceção *note ValueError: 202. foi descontinuada
     em favor de uma exceção *note TypeError: 2c3.  (Contribuição de
     Serhiy Storchaka e Raymond Hettinger em bpo-37319(2).)

   * Os vários métodos de ‘load_module()’ de *note importlib: 77. foram
     documentados como descontinuados desde Python 3.6, mas agora também
     irão disparar um *note DeprecationWarning: 1a5.  Use *note
     exec_module(): 86e. em vez disso.  (Contribuição de Brett Cannon em
     bpo-26131(3).)

   * ‘zimport.zipimporter.load_module()’ foi descontinuado em
     preferência a *note exec_module(): 312.  (Contribuição de Brett
     Cannon em bpo-26131(4).)

   * O uso de *note load_module(): 86d. pelo sistema de importação agora
     dispara uma exceção *note ImportWarning: 4fa, pois *note
     exec_module(): 86e. é preferível.  (Contribuição de Brett Cannon em
     bpo-26131(5).)

   * O uso de ‘importlib.abc.MetaPathFinder.find_module()’ e
     ‘importlib.abc.PathEntryFinder.find_module()’ pelo sistema de
     importação agora dispara uma exceção *note ImportWarning: 4fa, pois
     *note importlib.abc.MetaPathFinder.find_spec(): 86c. e *note
     importlib.abc.PathEntryFinder.find_spec(): 870. são preferidos,
     respectivamente.  Você pode usar *note
     importlib.util.spec_from_loader(): 871. para ajudar no port.
     (Contribuição de Brett Cannon em bpo-42134(6).)

   * O uso de ‘importlib.abc.PathEntryFinder.find_loader()’ pelo sistema
     de importação agora dispara uma exceção *note ImportWarning: 4fa,
     pois *note importlib.abc.PathEntryFinder.find_spec(): 870. é
     preferido.  Você pode usar *note importlib.util.spec_from_loader():
     871. para ajudar no port.  (Contribuição de Brett Cannon em
     bpo-43672(7).)

   * As várias implementações de
     ‘importlib.abc.MetaPathFinder.find_module()’ (
     ‘importlib.machinery.BuiltinImporter.find_module()’,
     ‘importlib.machinery.FrozenImporter.find_module()’,
     ‘importlib.machinery.WindowsRegistryFinder.find_module()’,
     ‘importlib.machinery.PathFinder.find_module()’,
     ‘importlib.abc.MetaPathFinder.find_module()’ ),
     ‘importlib.abc.PathEntryFinder.find_module()’
     (‘importlib.machinery.FileFinder.find_module()’ ) e
     ‘importlib.abc.PathEntryFinder.find_loader()’ (
     ‘importlib.machinery.FileFinder.find_loader()’ ) agora levantam
     *note DeprecationWarning: 1a5. e estão programadas para remoção no
     Python 3.12 (anteriormente, eles foram documentados como
     descontinuados no Python 3.4).  (Contribuição de Brett Cannon em
     bpo-42135(8).)

   * ‘importlib.abc.Finder’ foi descontinuada (incluindo seu único
     método, ‘find_module()’).  *note importlib.abc.MetaPathFinder: 872.
     e *note importlib.abc.PathEntryFinder: 873. não mais herdam da
     classe.  Usuários devem herdar de uma dessas duas classes conforme
     apropriado.  (Contribuição de Brett Cannon em bpo-42135(9).)

   * As descontinuações de ‘imp’, ‘importlib.find_loader()’,
     ‘importlib.util.set_package_wrapper()’,
     ‘importlib.util.set_loader_wrapper()’,
     ‘importlib.util.module_for_loader()’, ‘pkgutil.ImpImporter’ e
     ‘pkgutil.ImpLoader’ foram todas atualizadas para listar Python 3.12
     como a versão programada para remoção (elas começaram a levantar
     *note DeprecationWarning: 1a5. em versões anteriores do Python).
     (Contribuição de Brett Cannon em bpo-43720(10).)

   * O sistema de importação agora usa o atributo ‘__spec__’ em módulos
     antes de recorrer a ‘module_repr()’ para um método ‘__repr__()’ do
     módulo.  A remoção do uso de ‘module_repr()’ está programado para
     Python 3.12.  (Contribuição de Brett Cannon em bpo-42137(11).)

   * ‘importlib.abc.Loader.module_repr()’,
     ‘importlib.machinery.FrozenLoader.module_repr()’ e
     ‘importlib.machinery.BuiltinLoader.module_repr()’ foram
     descontinuadas e programadas para remoção no Python 3.12.
     (Contribuição de Brett Cannon em bpo-42136(12).)

   * ‘sqlite3.OptimizedUnicode’ teve a documentação removida e foi
     descontinuado desde o Python 3.3, quando foi tornado um apelido
     para *note str: 44c.  Foi agora descontinuado, programado para
     remoção no Python 3.12.  (Contribuição de Erlend E. Aasland em
     bpo-42264(13).)

   * A função embutida não documentada ‘sqlite3.enable_shared_cache’ foi
     agora descontinuada, agendada para remoção no Python 3.12.  Seu uso
     é fortemente desencorajado pela documentação do SQLite3.  Veja a
     documentação do SQLite3(14) para mais detalhes.  Se um cache
     compartilhado deve ser usado, abra o banco de dados no modo URI
     usando o parâmetro de consulta ‘cache=shared’.  (Contribuição de
     Erlend E. Aasland em bpo-24464(15).)

   * Os seguintes métodos de ‘threading’ foram agora descontinuados:

        * ‘threading.currentThread’ => *note threading.current_thread():
          309.

        * ‘threading.activeCount’ => *note threading.active_count():
          30a.

        * ‘threading.Condition.notifyAll’ => *note
          threading.Condition.notify_all(): 303.

        * ‘threading.Event.isSet’ => *note threading.Event.is_set():
          304.

        * ‘threading.Thread.setName’ => *note threading.Thread.name:
          308.

        * ‘threading.thread.getName’ => *note threading.Thread.name:
          308.

        * ‘threading.Thread.isDaemon’ => *note threading.Thread.daemon:
          306.

        * ‘threading.Thread.setDaemon’ => *note threading.Thread.daemon:
          306.

     (Contribuição de Jelle Zijlstra em gh-87889(16).)

   * ‘pathlib.Path.link_to()’ foi descontinuado e programado para
     remoção no Python 3.12.  Use *note pathlib.Path.hardlink_to(): 824.
     em vez disso.  (Contribuição de Barney Gale em bpo-39950(17).)

   * ‘cgi.log()’ foi descontinuado e programado para remoção no Python
     3.12.  (Contribuição de Inada Naoki em bpo-41139(18).)

   * Os recurso a seguir do *note ssl: d0. foram descontinuados desde o
     Python 3.6, Python 3.7 ou OpenSSL 1.1.0, e serão removidos no 3.11:

        * ‘OP_NO_SSLv2’, ‘OP_NO_SSLv3’, ‘OP_NO_TLSv1’, ‘OP_NO_TLSv1_1’,
          ‘OP_NO_TLSv1_2’ e ‘OP_NO_TLSv1_3’ foram substituídos por *note
          minimum_version: 874. e *note maximum_version: 875.

        * ‘PROTOCOL_SSLv2’, ‘PROTOCOL_SSLv3’, ‘PROTOCOL_SSLv23’,
          ‘PROTOCOL_TLSv1’, ‘PROTOCOL_TLSv1_1’, ‘PROTOCOL_TLSv1_2’ e
          ‘PROTOCOL_TLS’ foram descontinuados em favor de *note
          PROTOCOL_TLS_CLIENT: 876. e *note PROTOCOL_TLS_SERVER: 877.

        * ‘wrap_socket()’ foi substituída por *note
          ssl.SSLContext.wrap_socket(): 525.

        * ‘match_hostname()’

        * ‘RAND_pseudo_bytes()’, ‘RAND_egd()’

        * Recurso de NPN como *note
          ssl.SSLSocket.selected_npn_protocol(): 878. e *note
          ssl.SSLContext.set_npn_protocols(): 302. foram substituídos
          por ALPN.

   * A depuração de threads (variável de ambiente ‘PYTHONTHREADDEBUG’)
     foi descontinuada no Python 3.10 e será removida no Python 3.12.
     Este recurso exige uma *note construção de depuração de Python:
     1f9.  (Contribuição de Victor Stinner em bpo-44584(19).)

   * A importação dos submódulos ‘typing.io’ e ‘typing.re’ agora emitirá
     *note DeprecationWarning: 1a5.  Esses submódulos serão removidos em
     uma versão futura do Python.  Qualquer coisa pertencente a esses
     submódulos deve ser importada diretamente de *note typing: 104.
     (Contribuição de Sebastian Rittau em bpo-38291(20).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43833

   (2) https://bugs.python.org/issue?@action=redirect&bpo=37319

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26131

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26131

   (5) https://bugs.python.org/issue?@action=redirect&bpo=26131

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42134

   (7) https://bugs.python.org/issue?@action=redirect&bpo=43672

   (8) https://bugs.python.org/issue?@action=redirect&bpo=42135

   (9) https://bugs.python.org/issue?@action=redirect&bpo=42135

   (10) https://bugs.python.org/issue?@action=redirect&bpo=43720

   (11) https://bugs.python.org/issue?@action=redirect&bpo=42137

   (12) https://bugs.python.org/issue?@action=redirect&bpo=42136

   (13) https://bugs.python.org/issue?@action=redirect&bpo=42264

   (14) https://sqlite.org/c3ref/enable_shared_cache.html

   (15) https://bugs.python.org/issue?@action=redirect&bpo=24464

   (16) https://github.com/python/cpython/issues/87889

   (17) https://bugs.python.org/issue?@action=redirect&bpo=39950

   (18) https://bugs.python.org/issue?@action=redirect&bpo=41139

   (19) https://bugs.python.org/issue?@action=redirect&bpo=44584

   (20) https://bugs.python.org/issue?@action=redirect&bpo=38291


File: python.info,  Node: Removidos<5>,  Next: Portando para Python 3 10,  Prev: Descontinuados<5>,  Up: O que há de novo no Python 3 10

1.4.9 Removidos
---------------

   * Removidos os métodos especiais ‘__int__’, ‘__float__’,
     ‘__floordiv__’, ‘__mod__’, ‘__divmod__’, ‘__rfloordiv__’,
     ‘__rmod__’ e ‘__rdivmod__’ da classe *note complex: 2f8.  Eles
     sempre levantavam uma exceção *note TypeError: 2c3.  (Contribuição
     de Serhiy Storchaka em bpo-41974(1).)

   * O método ‘ParserBase.error()’ do módulo privado e não documentado
     ‘_markupbase’ foi removido.  *note html.parser.HTMLParser: 87b. é a
     única subclasse de ‘ParserBase’ e sua implementação de ‘error()’ já
     tinha sido removida no Python 3.5.  (Contribuição de Berker Peksag
     em bpo-31844(2).)

   * Removido o atributo ‘unicodedata.ucnhash_CAPI’ que foi um objeto
     interno PyCapsule.  A estrutura privada relacionada
     ‘_PyUnicode_Name_CAPI’ foi movida para uma API C interna.
     (Contribuição de Victor Stinner em bpo-42157(3).)

   * Removido o módulo ‘parser’, que foi descontinuado em 3.9 em razão
     da mudança para o novo analisador sintático GASE, bem como todo os
     arquivos código-fonte e cabeçalhos C que estavam sendo usados pelo
     analisador sintático antigo, incluindo ‘node.h’, ‘parser.h’,
     ‘graminit.h’ e ‘grammar.h’.

   * Removidas as funções de API C pública
     ‘PyParser_SimpleParseStringFlags’,
     ‘PyParser_SimpleParseStringFlagsFilename’,
     ‘PyParser_SimpleParseFileFlags’ e ‘PyNode_Compile’ que foram
     descontinuadas no 3.9 em razão da mudança para o novo analisador
     sintático GASE.

   * Removido o módulo ‘formatter’, que foi descontinuado no Python 3.4.
     É um tanto obsoleto, pouco usado e não testado.  Ele foi
     originalmente programado para ser removido no Python 3.6, mas tais
     remoções foram adiadas até depois do fim de vida do Python 2.7.  Os
     usuários existentes devem copiar quaisquer classes que usam em seu
     código.  (Contribuição de Dong-hee Na e Terry J. Reedy em
     bpo-42299(4).)

   * Removida a função ‘PyModule_GetWarningsModule()’ que era inútil
     agora porque o módulo ‘_warnings’ foi convertido em um módulo
     embutido no 2.6.  (Contribuição de Hai Shi em bpo-42599(5).)

   * Remove apelidos descontinuados para *note Classes Base Abstratas de
     Coleções: 87c. do módulo *note collections: 1d.  (Contribuição de
     Victor Stinner em bpo-37324(6).)

   * O parâmetro ‘loop’ foi removido da maioria da *note API de alto
     nível: 87d. do *note asyncio: a. seguindo a descontinuidade no
     Python 3.8.  A motivação por trás desta alteração é multifacetada:

       1. Isso simplifica a API de alto nível.

       2. As funções na API de alto nível obtêm implicitamente o laço de
          eventos em execução do thread atual desde o Python 3.7.  Não
          há necessidade de passar o laço de eventos para a API na
          maioria dos casos de uso normais.

       3. A passagem de laço de eventos está sujeita a erros,
          especialmente ao lidar com laços em execução em diferentes
          threads.

     Observe que a API de baixo nível ainda aceitará ‘loop’.  Veja *note
     Alterações na API Python: 87e. para exemplos de como substituir o
     código existente.

     (Contribuição de Yurii Karabas, Andrew Svetlov, Yury Selivanov e
     Kyle Stanley em bpo-42392(7).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41974

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31844

   (3) https://bugs.python.org/issue?@action=redirect&bpo=42157

   (4) https://bugs.python.org/issue?@action=redirect&bpo=42299

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42599

   (6) https://bugs.python.org/issue?@action=redirect&bpo=37324

   (7) https://bugs.python.org/issue?@action=redirect&bpo=42392


File: python.info,  Node: Portando para Python 3 10,  Next: Alterações de bytecode do CPython<4>,  Prev: Removidos<5>,  Up: O que há de novo no Python 3 10

1.4.10 Portando para Python 3.10
--------------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções que podem exigir alterações no seu código.

* Menu:

* Alterações na sintaxe Python::
* Alterações na API Python: Alterações na API Python<3>.
* Alterações na API C: Alterações na API C<6>.


File: python.info,  Node: Alterações na sintaxe Python,  Next: Alterações na API Python<3>,  Up: Portando para Python 3 10

1.4.10.1 Alterações na sintaxe Python
.....................................

   * O aviso de descontinuação agora é emitido ao compilar a sintaxe
     anteriormente válida se o literal numérico for seguido
     imediatamente por uma palavra reservada (como em ‘0in x’).  Em
     versões futuras, ele será alterado para aviso de sintaxe e,
     finalmente, para um erro de sintaxe.  Para se livrar do aviso e
     tornar o código compatível com versões futuras, basta adicionar um
     espaço entre o literal numérico e a palavra reservada seguinte.
     (Contribuição de Serhiy Storchaka em bpo-43833(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43833


File: python.info,  Node: Alterações na API Python<3>,  Next: Alterações na API C<6>,  Prev: Alterações na sintaxe Python,  Up: Portando para Python 3 10

1.4.10.2 Alterações na API Python
.................................

   * Os parâmetros 'etype' das funções *note format_exception(): 850,
     *note format_exception_only(): 851. e *note print_exception(): 852.
     no módulo *note traceback: fe. foram renomeadas para 'exc'.
     (Contribuição de Zackery Spytz e Matthias Bussonnier em
     bpo-26389(1).)

   * *note atexit: c.: ao sair do Python, se uma função de retorno
     registrada com *note atexit.register(): 882. falhar, sua exceção
     agora é registrada nos logs.  Anteriormente, apenas algumas
     exceções eram registradas nos logs e a última exceção era sempre
     ignorada silenciosamente.  (Contribuição de Victor Stinner em
     bpo-42639(2).)

   * A classe genérica ‘Collections.abc.Callable’ agora nivela os
     parâmetros de tipo, similar ao que *note typing.Callable: 7c6. faz
     atualmente.  Isso significa que ‘collections.abc.Callable[[int,
     str], str]’ terá ‘__args__’ de ‘(int, str, str)’; anteriormente era
     ‘([int, str], str)’.  O código que acessa os argumentos via *note
     typing.get_args(): 2ed. ou ‘__args__’ precisa levar em conta esta
     mudança.  Além disso, *note TypeError: 2c3. pode ser levantada para
     formas inválidas de parametrização ‘Collections.abc.Callable’ que
     pode ter passada silenciosamente no Python 3.9.  (Contribuição de
     Ken Jin em bpo-42195(3).)

   * *note socket.htons(): 883. e *note socket.ntohs(): 884. agora
     levantam *note OverflowError: 885. em vez de *note
     DeprecationWarning: 1a5. se o parâmetro dado não couber em um
     inteiro sem sinal de 16 bits.  (Contribuição de Erlend E. Aasland
     em bpo-42393(4).)

   * O parâmetro ‘loop’ foi removido da maioria da *note API de alto
     nível: 87d. do *note asyncio: a. seguindo a descontinuidade no
     Python 3.8.

     A corrotina que atualmente se parece com isso:

          async def foo(loop):
              await asyncio.sleep(1, loop=loop)

     Deve ser substituída por isso:

          async def foo():
              await asyncio.sleep(1)

     Se ‘foo()’ for especificamente projetado para 'não' executar no
     laço de eventos em execução da thread atual (por exemplo, executar
     no laço de eventos de outra thread), considere usar *note
     asyncio.run_coroutine_threadsafe(): 886.

     (Contribuição de Yurii Karabas, Andrew Svetlov, Yury Selivanov e
     Kyle Stanley em bpo-42392(5).)

   * O construtor *note types.FunctionType: 887. agora herda os
     embutidos atuais se o dicionário 'globals' tiver nenhuma chave
     ‘"__builtins__"’, em vez de usar ‘{"None": None}’ como embutidos: o
     mesmo comportamento que as funções *note eval(): 180. e *note
     exec(): 17f.  Definir uma função com ‘def function(...): ...’ no
     Python não é afetado, globais não podem ser substituídos com esta
     sintaxe: também herda os embutidos atuais.  (Contribuição de Victor
     Stinner em bpo-42990(6).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26389

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42639

   (3) https://bugs.python.org/issue?@action=redirect&bpo=42195

   (4) https://bugs.python.org/issue?@action=redirect&bpo=42393

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42392

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42990


File: python.info,  Node: Alterações na API C<6>,  Prev: Alterações na API Python<3>,  Up: Portando para Python 3 10

1.4.10.3 Alterações na API C
............................

   * As funções de API C ‘PyParser_SimpleParseStringFlags’,
     ‘PyParser_SimpleParseStringFlagsFilename’,
     ‘PyParser_SimpleParseFileFlags’, ‘PyNode_Compile’ e o tipo usado
     por essas funções, ‘struct _node’, foram removidos em razão da
     mudança para o novo analisador sintático GASE.

     O código-fonte deve ser agora compilado diretamente para um objeto
     código usando, por exemplo, *note Py_CompileString(): 889.  O
     objeto código resultante pode ser então avaliado usando, por
     exemplo, *note PyEval_EvalCode(): 88a.

     Especificamente:

        * Uma chamada para ‘PyParser_SimpleParseStringFlags’ seguida por
          ‘PyNode_Compile’ pode ser substituída por *note
          Py_CompileString(): 889.

        * Não há substituição direta para
          ‘PyParser_SimpleParseFileFlags’.  Para compilar código de um
          argumento ‘FILE *’, você vai precisar ler o arquivo em C e
          passar o buffer resultante para *note Py_CompileString(): 889.

        * Para compilar um arquivo de um nome de arquivo ‘char *’ dado,
          abra explicitamente o arquivo, leia-o e compile o resultado.
          Uma forma de fazer isso é usando o módulo *note io: 7f. com
          *note PyImport_ImportModule(): 3be, *note
          PyObject_CallMethod(): 39f, *note PyBytes_AsString(): 88b. e
          *note Py_CompileString(): 889, como esboçado abaixo.
          (Declarações e tratamento de erro foram omitidos.)

               io_module = Import_ImportModule("io");
               fileobject = PyObject_CallMethod(io_module, "open", "ss", filename, "rb");
               source_bytes_object = PyObject_CallMethod(fileobject, "read", "");
               result = PyObject_CallMethod(fileobject, "close", "");
               source_buf = PyBytes_AsString(source_bytes_object);
               code = Py_CompileString(source_buf, filename, Py_file_input);

        * Para objetos ‘FrameObject’, o membro *note f_lasti: 88c. agora
          representa um deslocamento de código de palavra em vez de um
          deslocamento simples na string de bytecode.  Isso significa
          que esse número precisa ser multiplicado por 2 para ser usado
          com APIs que esperam um deslocamento de byte (como *note
          PyCode_Addr2Line(): 88d, por exemplo).  Observe também que o
          membro ‘f_lasti’ de objetos ‘FrameObject’ não é considerado
          estável: por favor, use *note PyFrame_GetLineNumber(): 78b. em
          vez disso.


File: python.info,  Node: Alterações de bytecode do CPython<4>,  Next: Mudanças na construção<4>,  Prev: Portando para Python 3 10,  Up: O que há de novo no Python 3 10

1.4.11 Alterações de bytecode do CPython
----------------------------------------

   * A instrução ‘MAKE_FUNCTION’ agora aceita um dicionário ou uma tupla
     de strings como as anotações da função.  (Contribuição de Yurii
     Karabas e Inada Naoki em bpo-42202(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42202


File: python.info,  Node: Mudanças na construção<4>,  Next: Alterações na API C<7>,  Prev: Alterações de bytecode do CPython<4>,  Up: O que há de novo no Python 3 10

1.4.12 Mudanças na construção
-----------------------------

   * PEP 644(1): Python agora exige OpenSSL 1.1.1 ou mais novo.  OpenSSL
     1.0.2 não é mais suportado.  (Contribuição de Christian Heimes em
     bpo-43669(2).)

   * As funções C99 ‘snprintf()’ e ‘vsnprintf()’ agora são exigidas para
     compilar o Python.  (Contribuição de Victor Stinner em
     bpo-36020(3).)

   * *note sqlite3: cf. exige SQLite 3.7.15 ou superior.  (Contribuição
     de Sergey Fedoseev e Erlend E. Aasland em bpo-40744(4) e
     bpo-40810(5).)

   * O módulo *note atexit: c. deve agora sempre ser construído como um
     módulo embutido.  (Contribuição de Victor Stinner em bpo-42639(6).)

   * Adiciona a opção *note -disable-test-modules: 890. ao script
     ‘configure’: não constrói nem instala módulos de teste.
     (Contribuição de Xavier de Gaye, Thomas Petazzoni e Peixing Xin em
     bpo-27640(7).)

   * Adiciona a *note option -with-wheel-pkg-dir=CAMINHO: 891. ao script
     ‘./configure’.  Se especificado, o módulo *note ensurepip: 55.
     procura por pacotes wheel de ‘setuptools’ e ‘pip’ neste diretório:
     se ambos estiverem presentes, esses pacotes wheel são usados em vez
     de pacotes wheel empacotados por ensurepip.

     Algumas distribuições Linux possuem políticas de empacotamento
     recomendando evitar o empacotamento de dependências.  Por exemplo,
     Fedora instala pacotes wheel no diretório
     ‘/usr/share/python-wheels/’ e não instala o pacote
     ‘ensurepip._bundled’.

     (Contribuição de Victor Stinner em bpo-42856(8).)

   * Adiciona uma nova *note opção -without-static-libpython de
     configure: 892. para não construir biblioteca estática
     ‘libpythonMAJOR.MINOR.a’ e não instala o arquivo objeto ‘python.o’.

     (Contribuição de Victor Stinner em bpo-43103(9).)

   * O script ‘configure’ agora usa o utilitário ‘pkg-config’, se
     disponível, para detectar a localização dos cabeçalhos Tcl/Tk e
     bibliotecas.  Como antes, esses locais podem ser explicitamente
     especificados com as opções de configuração ‘--with-tcltk-includes’
     e ‘--with-tcltk-libs’ .  (Contribuição de Manolis Stamatogiannakis
     em bpo-42603(10).)

   * Adiciona a opção *note -with-openssl-rpath: 893. ao script
     ‘configure’.  A opção simplifica a construção do Python com uma
     instalação OpenSSL personalizada, por exemplo, ‘./configure
     --with-openssl=/path/to/openssl --with-openssl-rpath=auto’.
     (Contribuição de Christian Heimes em bpo-43466(11).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0644/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43669

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36020

   (4) https://bugs.python.org/issue?@action=redirect&bpo=40744

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40810

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42639

   (7) https://bugs.python.org/issue?@action=redirect&bpo=27640

   (8) https://bugs.python.org/issue?@action=redirect&bpo=42856

   (9) https://bugs.python.org/issue?@action=redirect&bpo=43103

   (10) https://bugs.python.org/issue?@action=redirect&bpo=42603

   (11) https://bugs.python.org/issue?@action=redirect&bpo=43466


File: python.info,  Node: Alterações na API C<7>,  Next: Recursos de segurança notáveis no 3 10 7,  Prev: Mudanças na construção<4>,  Up: O que há de novo no Python 3 10

1.4.13 Alterações na API C
--------------------------

* Menu:

* PEP 652; Mantendo a ABI estável: PEP 652 Mantendo a ABI estável.
* Novas funcionalidades: Novas funcionalidades<8>.
* Portando para Python 3.10: Portando para Python 3 10<2>.
* Descontinuados: Descontinuados<6>.
* Removidos: Removidos<6>.


File: python.info,  Node: PEP 652 Mantendo a ABI estável,  Next: Novas funcionalidades<8>,  Up: Alterações na API C<7>

1.4.13.1 PEP 652: Mantendo a ABI estável
........................................

A ABI (interface binária de aplicação) Estável para módulos de extensão
ou Python embutido agora está explicitamente definido.  *note
Estabilidade da API C: 553. descreve as garantias de estabilidade da API
C e ABI junto com as melhores práticas para usar a ABI estável.

(Contribuição de Petr Viktorin em PEP 652(1) e bpo-43795(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0652/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43795


File: python.info,  Node: Novas funcionalidades<8>,  Next: Portando para Python 3 10<2>,  Prev: PEP 652 Mantendo a ABI estável,  Up: Alterações na API C<7>

1.4.13.2 Novas funcionalidades
..............................

   * O resultado de *note PyNumber_Index(): 897. agora sempre tem o tipo
     exato *note int: 257.  Anteriormente, o resultado poderia ser uma
     instância de uma subclasse de ‘int’.  (Contribuição de Serhiy
     Storchaka em bpo-40792(1).)

   * Adiciona um novo membro *note orig_argv: 898. à estrutura *note
     PyConfig: 3a6.: a lista dos argumentos originais da linha de
     comando passados para o executável Python.  (Contribuição de Victor
     Stinner em bpo-23427(2).)

   * As macros *note PyDateTime_DATE_GET_TZINFO(): 899. e *note
     PyDateTime_TIME_GET_TZINFO(): 89a. foram adicionadas para acessar
     os atributos ‘tzinfo’ dos objetos *note datetime.datetime: 1cc. e
     *note datetime.time: 1ce.  (Contribuição de Zackery Spytz em
     bpo-30155(3).)

   * Adiciona uma função *note PyCodec_Unregister(): 89b. para cancelar
     um registro de uma função de pesquisa de codecs.  (Contribuição de
     Hai Shi em bpo-41842(4).)

   * A função *note PyIter_Send(): 89c. foi adicionada para permitir o
     envio de valor para o iterador sem levantar a exceção
     ‘StopIteration’.  (Contribuição de Vladimir Matveev em
     bpo-41756(5).)

   * Adiciona *note PyUnicode_AsUTF8AndSize(): 89d. à API C limitada.
     (Contribuição de Alex Gaynor em bpo-41784(6).)

   * Adiciona a função *note PyModule_AddObjectRef(): 365.: semelhante a
     *note PyModule_AddObject(): 366, mas não roube uma referência ao
     valor em caso de sucesso.  (Contribuição de Victor Stinner em
     bpo-1635741(7).)

   * Adiciona as funções *note Py_NewRef(): 89e. e *note Py_XNewRef():
     89f. para incrementar a contagem de referências de um objeto e
     retornar o objeto.  (Contribuição de Victor Stinner em
     bpo-42262(8).)

   * As funções *note PyType_FromSpecWithBases(): 57e. e *note
     PyType_FromModuleAndSpec(): 551. agora aceitam uma única classe
     como o argumento 'bases'.  (Contribuição de Serhiy Storchaka em
     bpo-42423(9).)

   * A função *note PyType_FromModuleAndSpec(): 551. agora aceita o slot
     NULL ‘tp_doc’.  (Contribuição de Hai Shi em bpo-41832(10).)

   * A função *note PyType_GetSlot(): 8a0. pode aceitar *note tipos
     estáticos: 77f.  (Contribuição de Hai Shi e Petr Viktorin em
     bpo-41073(11).)

   * Adiciona uma nova função *note PySet_CheckExact(): 8a1. à C-API
     para verificar se um objeto é uma instância de *note set: 5d9, mas
     não uma instância de um subtipo.  (Contribuição de Pablo Galindo em
     bpo-43277(12).)

   * Adiciona *note PyErr_SetInterruptEx(): 8a2. que permite passar um
     número de sinal para simular.  (Contribuição de Antoine Pitrou em
     bpo-43356(13).)

   * A API C limitada agora é suportada se o *note Python for compilado
     no modo de depuração: 1f9. (se a macro ‘Py_DEBUG’ estiver
     definida).  Na API C limitada, as funções *note Py_INCREF(): 56e. e
     *note Py_DECREF(): 56f. agora são implementadas como chamadas de
     função opacas, em vez de acessar diretamente o membro *note
     PyObject.ob_refcnt: 8a3, se o Python for compilado no modo de
     depuração e a macro ‘Py_LIMITED_API’ tiver como alvo o Python 3.10
     ou mais recente.  Tornou-se possível suportar a API C limitada no
     modo de depuração porque a estrutura *note PyObject: 339. é a mesma
     no modo de lançamento e depuração desde o Python 3.8 (consulte
     bpo-36465(14)).

     A API C limitada ainda não é suportada na compilação especial *note
     -with-trace-refs: 395. (macro ‘Py_TRACE_REFS’).  (Contribuição de
     Victor Stinner em bpo-43688(15).)

   * Adiciona a função *note Py_Is(x, y): 8a4. para testar se o objeto
     'x' é o objeto 'y', o mesmo que ‘x is y’ em Python.  Adiciona
     também as funções *note Py_IsNone(): 8a5, *note Py_IsTrue(): 8a6,
     *note Py_IsFalse(): 8a7. para testar se um objeto é,
     respectivamente, o singleton ‘None’, o singleton ‘True’ ou o
     singleton ‘False’.  (Contribuição de Victor Stinner em
     bpo-43753(16).)

   * Adiciona novas funções para controlar o coletor de lixo do código
     C: *note PyGC_Enable(): 8a8, *note PyGC_Disable(): 8a9, *note
     PyGC_IsEnabled(): 8aa.  Estas funções permitem ativar, desativar e
     consultar o estado do coletor de lixo do código C sem precisar
     importar o módulo *note gc: 60.

   * Adiciona um novo sinalizador de tipo *note
     Py_TPFLAGS_DISALLOW_INSTANTIATION: 582. para impedir a criação de
     instâncias de tipo.  (Contribuição de Victor Stinner em
     bpo-43916(17).)

   * Adiciona um novo sinalizador de tipo *note
     Py_TPFLAGS_IMMUTABLETYPE: 3c2. para criar objetos de tipo imutável:
     atributos de tipo não podem ser definidos nem excluídos.
     (Contribuição de Victor Stinner e Erlend E. Aasland em
     bpo-43908(18).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40792

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23427

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30155

   (4) https://bugs.python.org/issue?@action=redirect&bpo=41842

   (5) https://bugs.python.org/issue?@action=redirect&bpo=41756

   (6) https://bugs.python.org/issue?@action=redirect&bpo=41784

   (7) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (8) https://bugs.python.org/issue?@action=redirect&bpo=42262

   (9) https://bugs.python.org/issue?@action=redirect&bpo=42423

   (10) https://bugs.python.org/issue?@action=redirect&bpo=41832

   (11) https://bugs.python.org/issue?@action=redirect&bpo=41073

   (12) https://bugs.python.org/issue?@action=redirect&bpo=43277

   (13) https://bugs.python.org/issue?@action=redirect&bpo=43356

   (14) https://bugs.python.org/issue?@action=redirect&bpo=36465

   (15) https://bugs.python.org/issue?@action=redirect&bpo=43688

   (16) https://bugs.python.org/issue?@action=redirect&bpo=43753

   (17) https://bugs.python.org/issue?@action=redirect&bpo=43916

   (18) https://bugs.python.org/issue?@action=redirect&bpo=43908


File: python.info,  Node: Portando para Python 3 10<2>,  Next: Descontinuados<6>,  Prev: Novas funcionalidades<8>,  Up: Alterações na API C<7>

1.4.13.3 Portando para Python 3.10
..................................

   * A macro ‘PY_SSIZE_T_CLEAN’ deve agora ser definida para usar os
     formatos *note PyArg_ParseTuple(): 571. e *note Py_BuildValue():
     8ac. que usam ‘#’: ‘es#’, ‘et#’, ‘s#’, ‘u#’, ‘y#’, ‘z#’, ‘U#’ e
     ‘Z#’.  Veja *note Análise de argumentos e construção de valores:
     8ad. e PEP 353(1).  (Contribuição de Victor Stinner em
     bpo-40943(2).)

   * Como *note Py_REFCNT(): 8ae. é alterado para a função estática em
     linha, ‘Py_REFCNT(obj) = new_refcnt’ deve ser substituído por
     ‘Py_SET_REFCNT(obj, new_refcnt)’: veja *note Py_SET_REFCNT(): 8af.
     (disponível desde o Python 3.9).  Para compatibilidade com versões
     anteriores, esta macro pode ser usada:

          #if PY_VERSION_HEX < 0x030900A4
          #  define Py_SET_REFCNT(obj, refcnt) ((Py_REFCNT(obj) = (refcnt)), (void)0)
          #endif

     (Contribuição de Victor Stinner em bpo-39573(3).)

   * A chamada de *note PyDict_GetItem(): 387. sem a *note GIL: 159.
     retida era permitido por razões históricas.  Isso não é mais
     permitido.  (Contribuição de Victor Stinner em bpo-40839(4).)

   * ‘PyUnicode_FromUnicode(NULL, size)’ e
     ‘PyUnicode_FromStringAndSize(NULL, size)’ levantam
     ‘DeprecationWarning’ agora.  Use *note PyUnicode_New(): 8b0. para
     alocar objeto Unicode sem dados iniciais.  (Contribuição de Inada
     Naoki em bpo-36346(5).)

   * A estrutura privada ‘_PyUnicode_Name_CAPI’ da API PyCapsule
     ‘unicodedata.ucnhash_CAPI’ foi movida para a API C interna.
     (Contribuição de Victor Stinner em bpo-42157(6).)

   * As funções *note Py_GetPath(): 3b3, *note Py_GetPrefix(): 3b5,
     *note Py_GetExecPrefix(): 3b1, *note Py_GetProgramFullPath(): 3b7,
     *note Py_GetPythonHome(): 3ba. e *note Py_GetProgramName(): 3b9.
     agora retornam ‘NULL’ se chamadas antes de *note Py_Initialize():
     8b1. (antes do Python ser inicializado).  Use a nova API de *note
     Configuração de inicialização do Python: 3a7. para obter a *note
     Python Path Configuration: 8b2.  (Contribuição de Victor Stinner em
     bpo-42260(7).)

   * As macros *note PyList_SET_ITEM(): 38e, *note PyTuple_SET_ITEM():
     38d. e *note PyCell_SET(): 8b3. não podem mais ser usadas como
     valor-l ou valor-r.  Por exemplo, ‘x = PyList_SET_ITEM(a, b, c)’ e
     ‘PyList_SET_ITEM(a, b, c) = x’ agora falham com um erro do
     compilador.  Isso previne bugs como o teste ‘if (PyList_SET_ITEM
     (a, b, c) < 0) ...’.  (Contribuição de Zackery Spytz e Victor
     Stinner em bpo-30459(8).)

   * Os arquivos de API não limitada ‘odictobject.h’,
     ‘parser_interface.h’, ‘piclebufobject.h’, ‘pyarena.h’, ‘pyctype.h’,
     ‘pydebug. h’, ‘pyfpe.h’ e ‘pytime.h’ foram movidos para o diretório
     ‘Include/cpython’.  Esses arquivos não devem ser incluídos
     diretamente, pois já estão incluídos em ‘Python.h’; veja *note
     Arquivos de inclusão: 784.  Se eles foram incluídos diretamente,
     considere incluir ‘Python.h’ em vez disso.  (Contribuição de
     Nicholas Sim em bpo-35134(9).)

   * Use o sinalizador de tipo *note Py_TPFLAGS_IMMUTABLETYPE: 3c2. para
     criar objetos de tipo imutável.  Não confie em *note
     Py_TPFLAGS_HEAPTYPE: 8b4. para decidir se um objeto de tipo é
     mutável ou não; verifique se *note Py_TPFLAGS_IMMUTABLETYPE: 3c2.
     está definido.  (Contribuição de Victor Stinner e Erlend E. Aasland
     em bpo-43908(10).)

   * A função não documentada ‘Py_FrozenMain’ foi removida da API
     limitada.  A função é útil principalmente para compilações
     personalizadas do Python.  (Contribuição de Petr Viktorin em
     bpo-26241(11).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0353/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40943

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39573

   (4) https://bugs.python.org/issue?@action=redirect&bpo=40839

   (5) https://bugs.python.org/issue?@action=redirect&bpo=36346

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42157

   (7) https://bugs.python.org/issue?@action=redirect&bpo=42260

   (8) https://bugs.python.org/issue?@action=redirect&bpo=30459

   (9) https://bugs.python.org/issue?@action=redirect&bpo=35134

   (10) https://bugs.python.org/issue?@action=redirect&bpo=43908

   (11) https://bugs.python.org/issue?@action=redirect&bpo=26241


File: python.info,  Node: Descontinuados<6>,  Next: Removidos<6>,  Prev: Portando para Python 3 10<2>,  Up: Alterações na API C<7>

1.4.13.4 Descontinuados
.......................

   * A função ‘PyUnicode_InternImmortal()’ agora foi descontinuada e
     será removida no Python 3.12: use *note PyUnicode_InternInPlace():
     8b6. em vez disso.  (Contribuição de Victor Stinner em
     bpo-41692(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41692


File: python.info,  Node: Removidos<6>,  Prev: Descontinuados<6>,  Up: Alterações na API C<7>

1.4.13.5 Removidos
..................

   * Removidas as funções ‘Py_UNICODE_str*’ que manipulam strings
     ‘Py_UNICODE*’.  (Contribuição de Inada Naoki em bpo-41123(1).)

        * ‘Py_UNICODE_strlen’: use *note PyUnicode_GetLength(): 8b8. ou
          *note PyUnicode_GET_LENGTH: 8b9.

        * ‘Py_UNICODE_strcat’: use *note PyUnicode_CopyCharacters():
          8ba. ou *note PyUnicode_FromFormat(): 38a.

        * ‘Py_UNICODE_strcpy’, ‘Py_UNICODE_strncpy’: use *note
          PyUnicode_CopyCharacters(): 8ba. ou *note
          PyUnicode_Substring(): 8bb.

        * ‘Py_UNICODE_strcmp’: use *note PyUnicode_Compare(): 8bc.

        * ‘Py_UNICODE_strncmp’: use *note PyUnicode_Tailmatch(): 8bd.

        * ‘Py_UNICODE_strchr’, ‘Py_UNICODE_strrchr’: use *note
          PyUnicode_FindChar(): 8be.

   * Removida ‘PyUnicode_GetMax()’.  Migre para as novas APIs ( PEP
     393(2)).  (Contribuição de Inada Naoki em bpo-41103(3).)

   * Removida ‘PyLong_FromUnicode()’.  Migre para *note
     PyLong_FromUnicodeObject(): 8bf.  (Contribuição de Inada Naoki em
     bpo-41103(4).)

   * Removida ‘PyUnicode_AsUnicodeCopy()’.  Use *note
     PyUnicode_AsUCS4Copy(): 8c0. ou *note PyUnicode_AsWideCharString():
     8c1. (Contribuição de Inada Naoki em bpo-41103(5).)

   * Removida a variável ‘_Py_CheckRecursionLimit’: foi substituída por
     ‘ceval.recursion_limit’ da estrutura *note PyInterpreterState: 8c2.
     (Contribuição de Victor Stinner em bpo-41834(6).)

   * Removidas as macros não documentadas ‘Py_ALLOW_RECURSION’ e
     ‘Py_END_ALLOW_RECURSION’ e o campo ‘recursion_critical’ da
     estrutura *note PyInterpreterState: 8c2.  (Contribuição de Serhiy
     Storchaka em bpo-41936(7).)

   * Removida a função ‘PyOS_InitInterrupts()’ não documentada.
     Inicializar o Python já instala implicitamente manipuladores de
     sinal: veja *note PyConfig.install_signal_handlers: 8c3.
     (Contribuição de Victor Stinner em bpo-41713(8).)

   * Remova a função ‘PyAST_Validate()’.  Não é mais possível construir
     um objeto AST (tipo ‘mod_ty’) com a API C pública.  A função já foi
     excluída da API C limitada ( PEP 384(9)).  (Contribuição de Victor
     Stinner em bpo-43244(10).)

   * Remove o arquivo de cabeçalho ‘symtable.h’ e as funções não
     documentadas:

        * ‘PyST_GetScope()’

        * ‘PySymtable_Build()’

        * ‘PySymtable_BuildObject()’

        * ‘PySymtable_Free()’

        * ‘Py_SymtableString()’

        * ‘Py_SymtableStringObject()’

     A função ‘Py_SymtableString()’ fazia parte da ABI estável por
     engano, mas não pôde ser usada, porque o arquivo de cabeçalho
     ‘symtable.h’ foi excluído da API C limitada.

     Use o módulo Python *note symtable: d8. em vez disso.
     (Contribuição de Victor Stinner em bpo-43244(11).)

   * Remove *note PyOS_ReadlineFunctionPointer(): 586. dos cabeçalhos
     limitados da API C e de ‘python3.dll’, a biblioteca que fornece a
     ABI estável no Windows.  Como a função recebe um argumento ‘FILE*’,
     sua estabilidade ABI não pode ser garantida.  (Contribuição de Petr
     Viktorin em bpo-43868(12).)

   * Remove os arquivos de cabeçalho ‘ast.h’, ‘asdl.h’ e ‘Python-ast.h’.
     Essas funções não estavam documentadas e excluídas da API C
     limitada.  A maioria dos nomes definidos por esses arquivos de
     cabeçalho não foram prefixados por ‘Py’ e, portanto, podem criar
     conflitos de nomes.  Por exemplo, ‘Python-ast.h’ definiu uma macro
     ‘Yield’ que estava em conflito com o nome ‘Yield’ usado pelo
     cabeçalho ‘<winbase.h>’ do Windows.  Use o módulo Python *note ast:
     8. em vez disso.  (Contribuição de Victor Stinner em
     bpo-43244(13).)

   * Remove as funções do compilador e do analisador usando o tipo
     ‘struct _mod’, porque a API AST C pública foi removida:

        * ‘PyAST_Compile()’

        * ‘PyAST_CompileEx()’

        * ‘PyAST_CompileObject()’

        * ‘PyFuture_FromAST()’

        * ‘PyFuture_FromASTObject()’

        * ‘PyParser_ASTFromFile()’

        * ‘PyParser_ASTFromFileObject()’

        * ‘PyParser_ASTFromFilename()’

        * ‘PyParser_ASTFromString()’

        * ‘PyParser_ASTFromStringObject()’

     Essas funções não estavam documentadas e excluídas da API C
     limitada.  (Contribuição de Victor Stinner em bpo-43244(14).)

   * Remove o arquivo de cabeçalho ‘pyarena.h’ com funções:

        * ‘PyArena_New()’

        * ‘PyArena_Free()’

        * ‘PyArena_Malloc()’

        * ‘PyArena_AddPyObject()’

     Essas funções não estavam documentadas, excluídas da API C limitada
     e eram usadas apenas internamente pelo compilador.  (Contribuição
     de Victor Stinner em bpo-43244(15).)

   * O membro ‘PyThreadState.use_tracing’ foi removido para otimizar o
     Python.  (Contribuição de Mark Shannon em bpo-43760(16).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41123

   (2) https://peps.python.org/pep-0393/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41103

   (4) https://bugs.python.org/issue?@action=redirect&bpo=41103

   (5) https://bugs.python.org/issue?@action=redirect&bpo=41103

   (6) https://bugs.python.org/issue?@action=redirect&bpo=41834

   (7) https://bugs.python.org/issue?@action=redirect&bpo=41936

   (8) https://bugs.python.org/issue?@action=redirect&bpo=41713

   (9) https://peps.python.org/pep-0384/

   (10) https://bugs.python.org/issue?@action=redirect&bpo=43244

   (11) https://bugs.python.org/issue?@action=redirect&bpo=43244

   (12) https://bugs.python.org/issue?@action=redirect&bpo=43868

   (13) https://bugs.python.org/issue?@action=redirect&bpo=43244

   (14) https://bugs.python.org/issue?@action=redirect&bpo=43244

   (15) https://bugs.python.org/issue?@action=redirect&bpo=43244

   (16) https://bugs.python.org/issue?@action=redirect&bpo=43760


File: python.info,  Node: Recursos de segurança notáveis no 3 10 7,  Next: Recursos de segurança notáveis no 3 10 8,  Prev: Alterações na API C<7>,  Up: O que há de novo no Python 3 10

1.4.14 Recursos de segurança notáveis no 3.10.7
-----------------------------------------------

Converter entre *note int: 257. e *note str: 44c. em bases diferentes de
2 (binário), 4, 8 (octal), 16 (hexadecimal) ou 32 como base 10 (decimal)
agora levanta uma exceção *note ValueError: 202. se o número de dígitos
em forma de string estiver acima de um limite para evitar possíveis
ataques de negação de serviço devido à complexidade algorítmica.  Esta é
uma mitigação para CVE 2020-10735(1).  Este limite pode ser configurado
ou desabilitado por variável de ambiente, sinalizador de linha de
comando ou APIs de *note sys: d9.  Veja a documentação de *note
limitação de comprimento de conversão de string inteira: 5f5.  O limite
padrão é de 4300 dígitos em forma de string.

   ---------- Footnotes ----------

   (1) https://www.cve.org/CVERecord?id=CVE-2020-10735


File: python.info,  Node: Recursos de segurança notáveis no 3 10 8,  Next: Alterações notáveis no 3 10 12,  Prev: Recursos de segurança notáveis no 3 10 7,  Up: O que há de novo no Python 3 10

1.4.15 Recursos de segurança notáveis no 3.10.8
-----------------------------------------------

O módulo descontinuado ‘mailcap’ agora se recusa a injetar texto não
seguro (nomes de arquivos, tipos MIME, parâmetros) em comandos shell.
Em vez de usar esse texto, ele avisará e agirá como se uma
correspondência não fosse encontrada (ou para comandos de teste, como se
o teste tivesse falhado).  (Contribuição de Petr Viktorin em
gh-98966(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98966


File: python.info,  Node: Alterações notáveis no 3 10 12,  Prev: Recursos de segurança notáveis no 3 10 8,  Up: O que há de novo no Python 3 10

1.4.16 Alterações notáveis no 3.10.12
-------------------------------------

* Menu:

* tarfile: tarfile<3>.


File: python.info,  Node: tarfile<3>,  Up: Alterações notáveis no 3 10 12

1.4.16.1 tarfile
................

   * Os métodos de extração em *note tarfile: de. e *note
     shutil.unpack_archive(): 46b, têm um novo argumento 'filter' que
     permite limitar recursos do tar que podem ser surpreendentes ou
     perigosos, como criar arquivos fora do diretório de destino.  Veja
     *note Filtros de extração: 46c. para detalhes.  No Python 3.12,
     usar sem o argumento 'filter' mostrará um *note DeprecationWarning:
     1a5.  No Python 3.14, o padrão mudará para ‘'data'’.  (Contribuição
     de Petr Viktorin em PEP 706(1).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0706/


File: python.info,  Node: O que há de novo no Python 3 9,  Next: O que há de novo no Python 3 8,  Prev: O que há de novo no Python 3 10,  Up: O que há de novo no Python

1.5 O que há de novo no Python 3.9
==================================


Editor: Łukasz Langa

Este artigo explica os novos recursos no Python 3.9, em comparação com
3.8.  Python 3.9 foi lançado em 15 de outubro de 2020.  Veja o *note
changelog: 13c.  para uma lista completa de mudanças.

Ver também
..........

PEP 596(1) - Python 3.9 Release Schedule

* Menu:

* Resumo – Destaques da versão: Resumo – Destaques da versão<5>.
* Você deve verificar DeprecationWarning no seu código::
* Novas funcionalidades: Novas funcionalidades<9>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<5>.
* Novos módulos: Novos módulos<5>.
* Módulos melhorados: Módulos melhorados<5>.
* Otimizações: Otimizações<5>.
* Descontinuados: Descontinuados<7>.
* Removidos: Removidos<7>.
* Portando para Python 3.9: Portando para Python 3 9.
* Mudanças na construção: Mudanças na construção<5>.
* Alterações na API C: Alterações na API C<9>.
* Alterações notáveis no Python 3.9.1: Alterações notáveis no Python 3 9 1.
* Alterações notáveis no Python 3.9.2: Alterações notáveis no Python 3 9 2.
* Alterações notáveis no Python 3.9.3: Alterações notáveis no Python 3 9 3.
* Alterações notáveis no Python 3.9.5: Alterações notáveis no Python 3 9 5.
* Recursos de segurança notáveis no 3.9.14: Recursos de segurança notáveis no 3 9 14.
* Alterações notáveis no 3.9.17: Alterações notáveis no 3 9 17.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0596/


File: python.info,  Node: Resumo – Destaques da versão<5>,  Next: Você deve verificar DeprecationWarning no seu código,  Up: O que há de novo no Python 3 9

1.5.1 Resumo – Destaques da versão
----------------------------------

Novos recursos de sintaxe:

   * PEP 584(1), operadores de união adicionados ao ‘dict’;

   * PEP 585(2), type hinting genéricos em coleções comuns;

   * PEP 614(3), restrições de gramática relaxadas em decoradores.

Novos recursos embutidos:

   * PEP 616(4), métodos de strings para remover prefixos e sufixos.

Novos recursos na biblioteca padrão:

   * PEP 593(5), anotações flexíveis de função e variável;

   * *note os.pidfd_open(): 47a. adicionada para permitidos
     gerenciamento de processo sem corridas e sinais.

Melhorias no interpretador:

   * PEP 573(6), acesso rápido ao estado do módulo a partir de métodos
     de tipos de extensão C;

   * PEP 617(7), CPython agora usa um novo analisador sintático com base
     em GASE;

   * vários tipos embutidos do Python (range, tuple, set, frozenset,
     list, dict) estão agora mais rápidos usando vectorcall da PEP
     590(8);

   * coleta de lixo não causa bloqueio em objetos ressuscitados;

   * vários módulos do Python (‘_abc’, ‘audioop’, ‘_bz2’, ‘_codecs’,
     ‘_contextvars’, ‘_crypt’, ‘_functools’, ‘_json’, ‘_locale’, *note
     math: 8e, *note operator: 9f, *note resource: bc, *note time: ee,
     ‘_weakref’) agora usam inicialização multifásica conforme definido
     pela PEP 489;

   * vários módulos da biblioteca padrão (‘audioop’, *note ast: 8, *note
     grp: 66, ‘_hashlib’, *note pwd: b2, ‘_posixsubprocess’, *note
     random: b8, *note select: c1, *note struct: d5, *note termios: e1,
     *note zlib: 133.) estão agora usando a ABI estável definida pela
     PEP 384.

Novos módulos de biblioteca:

   * PEP 615(9), o banco de dados de fusos horários da IANA é agora
     apresentado na biblioteca padrão no módulo *note zoneinfo: 134.;

   * uma implementação de um tipo topológico de um grafo agora é
     fornecida no novo módulo *note graphlib: 65.

Alterações no processo de lançamento:

   * PEP 602(10), CPython adota um ciclo de lançamento anual.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0584/

   (2) https://peps.python.org/pep-0585/

   (3) https://peps.python.org/pep-0614/

   (4) https://peps.python.org/pep-0616/

   (5) https://peps.python.org/pep-0593/

   (6) https://peps.python.org/pep-0573/

   (7) https://peps.python.org/pep-0617/

   (8) https://peps.python.org/pep-0590/

   (9) https://peps.python.org/pep-0615/

   (10) https://peps.python.org/pep-0602/


File: python.info,  Node: Você deve verificar DeprecationWarning no seu código,  Next: Novas funcionalidades<9>,  Prev: Resumo – Destaques da versão<5>,  Up: O que há de novo no Python 3 9

1.5.2 Você deve verificar DeprecationWarning no seu código
----------------------------------------------------------

Quando o Python 2.7 ainda tinha suporte, muitas funcionalidades do
Python 3 foram mantidas para compatibilidade com versões anteriores do
Python 2.7.  Com o fim do suporte ao Python 2, essas camadas de
compatibilidade com versões anteriores foram removidas ou serão
removidas em breve.  A maioria deles emitia um aviso de *note
DeprecationWarning: 1a5. por vários anos.  Por exemplo, usar
‘collections.Mapping’ em vez de ‘collections.abc.Mapping’ emite uma
*note DeprecationWarning: 1a5. desde Python 3.3, lançado em 2012.

Teste sua aplicação com a opção de linha de comando *note -W: 8cd.
‘default’ para ver *note DeprecationWarning: 1a5. e *note
PendingDeprecationWarning: 8ce, ou mesmo com *note -W: 8cd. ‘error’ para
tratá-los como erros.  *note Filtro de avisos: 8cf. pode ser usado para
ignorar avisos de código de terceiros.

Python 3.9 é a última versão que fornece essas camadas de
compatibilidade com versões anteriores do Python 2, para dar mais tempo
aos mantenedores de projetos Python para organizar a remoção do suporte
Python 2 e adicionar suporte para Python 3.9.

Aliases para *note classes bases abstratas: 87c. no módulo *note
collections: 1d, como o alias ‘collections.Mapping’ para *note
collections.abc.Mapping: 8d0, são mantidos para uma última versão para
compatibilidade reversa.  Eles serão removidos do Python 3.10.

De maneira mais geral, experimente executar seus testes no *note Modo de
Desenvolvimento do Python: 1f8, que ajuda a preparar seu código para
torná-lo compatível com a próxima versão do Python.

Observação: vários itens descontinuados pré-existentes também foram
removidos nesta versão do Python.  Consulte a seção *note Removidos:
8d1.


File: python.info,  Node: Novas funcionalidades<9>,  Next: Outras mudanças na linguagem<5>,  Prev: Você deve verificar DeprecationWarning no seu código,  Up: O que há de novo no Python 3 9

1.5.3 Novas funcionalidades
---------------------------

* Menu:

* Operadores de mesclagem & atualização de dicionário::
* Novos métodos de strings para remover prefixos e sufixos::
* Type hinting genéricos nas coleções padrão::
* Novo analisador sintático::


File: python.info,  Node: Operadores de mesclagem & atualização de dicionário,  Next: Novos métodos de strings para remover prefixos e sufixos,  Up: Novas funcionalidades<9>

1.5.3.1 Operadores de mesclagem & atualização de dicionário
...........................................................

Operadores de mesclagem (‘|’) e atualização (‘|=’) foram adicionados à
classe embutida *note dict: 256.  Eles complementam o métodos
‘dict.update’ e ‘{**d1, **d2}’ existentes de mesclagem de dicionários.

Exemplo:

     >>> x = {"chave1": "valor1 from x", "chave2": "valor2 from x"}
     >>> y = {"chave2": "valor2 from y", "chave3": "valor3 from y"}
     >>> x | y
     {'chave1': 'valor1 from x', 'chave2': 'valor2 from y', 'chave3': 'valor3 from y'}
     >>> y | x
     {'chave2': 'valor2 from x', 'chave3': 'valor3 from y', 'chave1': 'valor1 from x'}

Veja PEP 584(1) para uma descrição completa.  (Contribuição de Brandt
Bucher em bpo-36144(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0584/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36144


File: python.info,  Node: Novos métodos de strings para remover prefixos e sufixos,  Next: Type hinting genéricos nas coleções padrão,  Prev: Operadores de mesclagem & atualização de dicionário,  Up: Novas funcionalidades<9>

1.5.3.2 Novos métodos de strings para remover prefixos e sufixos
................................................................

*note str.removeprefix(prefix): 8d5. e *note str.removesuffix(suffix):
8d6. foram adicionados para remover facilmente um prefixo ou sufixo
desnecessário de uma string.  Os métodos correspondentes ‘bytes’,
‘bytearray’ e ‘collections.UserString’ também foram adicionados.  Veja
PEP 616(1) para uma descrição completa.  (Contribuição de Dennis Sweeney
em bpo-39939(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0616/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39939


File: python.info,  Node: Type hinting genéricos nas coleções padrão,  Next: Novo analisador sintático,  Prev: Novos métodos de strings para remover prefixos e sufixos,  Up: Novas funcionalidades<9>

1.5.3.3 Type hinting genéricos nas coleções padrão
..................................................

Agora, nas anotações de tipo, você pode usar tipos de coleção embutidos
como ‘list’ e ‘dict’ como tipos genéricos, em vez de importar os tipos
de letras maiúsculas correspondentes (por exemplo, ‘List’ ou ‘Dict’) de
‘typing’.  Agora, outros tipos na biblioteca padrão também são
genéricos, por exemplo, ‘queue.Queue’.

Exemplo:

     def cumprimentar_todos(nomes: list[str]) -> None:
         for nome in nomes:
             print("Olá", nome)

Consulte PEP 585(1) para mais detalhes.  (Contribuição de Guido van
Rossum, Ethan Smith e Batuhan Taşkaya em bpo-39481(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0585/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39481


File: python.info,  Node: Novo analisador sintático,  Prev: Type hinting genéricos nas coleções padrão,  Up: Novas funcionalidades<9>

1.5.3.4 Novo analisador sintático
.................................

O Python 3.9 usa um novo analisador sintático, baseado em GASE(1) em vez
de LL(1)(2).  O desempenho do novo analisador sintático é
aproximadamente comparável ao do analisador sintático antigo, mas o
formalismo do GASE é mais flexível que do LL(1) quando se trata de
projetar novos recursos de linguagem.  Começaremos a usar essa
flexibilidade no Python 3.10 e posterior.

O módulo *note ast: 8. usa o novo analisador e produz o mesmo AST que o
analisador antigo.

No Python 3.10, o analisador antigo será excluído e todas as
funcionalidades que dependem dele (principalmente o módulo ‘parser’, que
foi descontinuado a muito tempo).  No Python 3.9 'apenas', você pode
voltar ao analisador LL(1) usando uma opção de linha de comando (‘-X
oldparser’) ou uma variável de ambiente (‘PYTHONOLDPARSER=1’).

Consulte PEP 617(3) para mais detalhes.  (Contribuição de Guido van
Rossum, Pablo Galindo e Lysandros Nikolaou em bpo-40334(4).)

   ---------- Footnotes ----------

   (1) 
https://pt.wikipedia.org/wiki/Gramática_de_análise_sintática_de_expressão

   (2) https://pt.wikipedia.org/wiki/Analisador_sintático_LL

   (3) https://peps.python.org/pep-0617/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=40334


File: python.info,  Node: Outras mudanças na linguagem<5>,  Next: Novos módulos<5>,  Prev: Novas funcionalidades<9>,  Up: O que há de novo no Python 3 9

1.5.4 Outras mudanças na linguagem
----------------------------------

   * *note __import__(): 8da. agora levanta *note ImportError: 419. em
     vez de *note ValueError: 202, o que é usado para ocorrer quando uma
     importação relativa passou de seu um pacote de nível superior.
     (Contribuição de Ngalim Siregar em bpo-37444(1).)

   * Agora, o Python obtém o caminho absoluto do nome do arquivo do
     script especificado na linha de comando (p.ex., ‘python3
     script.py’): o atributo ‘__file__’ do módulo *note __main__: 1.
     tornou-se um caminho absoluto, não um caminho relativo.  Esses
     caminhos agora permanecem válidos depois que o diretório atual é
     alterado por *note os.chdir(): 60d.  Como efeito colateral, o
     traceback também exibe o caminho absoluto para quadros de módulos
     de *note __main__: 1. neste caso.  (Contribuição de Victor Stinner
     em bpo-20443(2).)

   * No *note Modo de Desenvolvimento do Python: 1f8. e na *note
     compilação de depuração: 1f9. , os argumentos 'encoding' e 'errors'
     agora são verificados quanto às operações de codificação e
     decodificação de strings.  Exemplos: *note open(): 51c, *note
     str.encode(): 8db. e *note bytes.decode(): 8dc.

     Por padrão, para obter o melhor desempenho, o argumento 'errors' é
     verificado apenas no primeiro erro de codificação/decodificação, e
     o argumento 'encoding' às vezes é ignorado para strings vazias.
     (Contribuição de Victor Stinner em bpo-37388(3).)

   * ‘"".replace("", s, n)’ agora retorna ‘s’ em vez de uma string vazia
     para todos ‘n’ não zero.  Isso é agora consistente com
     ‘"".replace("", s)’.  Há alterações similares para objetos *note
     bytes: 1c2. e *note bytearray: 2ea.  (Contribuição de Serhiy
     Storchaka em bpo-28029(4).)

   * Qualquer expressão válida agora pode ser usada como *note
     decorador: 731.  Anteriormente, a gramática era muito mais
     restritiva.  Veja PEP 614(5) para detalhes.  (Contribuição de
     Brandt Bucher em bpo-39702(6).)

   * Aprimorada a ajuda para o módulo ‘digitando’.  Agora, as linhas de
     documento são mostradas para todos os formulários especiais e
     aliases genéricos especiais (como ‘Union’ e ‘List’).  Usando *note
     help(): 8dd. com alias genérico como ‘List[int]’ mostrará a ajuda
     para o tipo concreto correspondente (neste caso, ‘list’).
     (Contribuição de Serhiy Storchaka em bpo-40257(7).)

   * A execução paralela de *note aclose(): 8de. / *note asend(): 8df. /
     *note athrow(): 4f9. é agora proibida e ‘ag_running’ agora reflete
     o status atual de execução do gerador async.  (Contribuição de Yury
     Selivanov em bpo-30773(8).)

   * Erros inesperados ao chamar o método ‘__iter__’ não são mais
     mascarados por ‘TypeError’ no operador *note in: 2f4. e nas funções
     *note contains(): 8e0, *note indexOf(): 8e1. e *note countOf():
     8e2. do módulo *note operator: 9f.  (Contribuição de Serhiy
     Storchaka em bpo-40824(9).)

   * Expressões lambda sem parênteses não podem mais ser a parte da
     expressão em uma cláusula ‘if’ em compreensões e expressões
     geradoras.  Veja bpo-41848(10) e bpo-43755(11) para detalhes.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37444

   (2) https://bugs.python.org/issue?@action=redirect&bpo=20443

   (3) https://bugs.python.org/issue?@action=redirect&bpo=37388

   (4) https://bugs.python.org/issue?@action=redirect&bpo=28029

   (5) https://peps.python.org/pep-0614/

   (6) https://bugs.python.org/issue?@action=redirect&bpo=39702

   (7) https://bugs.python.org/issue?@action=redirect&bpo=40257

   (8) https://bugs.python.org/issue?@action=redirect&bpo=30773

   (9) https://bugs.python.org/issue?@action=redirect&bpo=40824

   (10) https://bugs.python.org/issue?@action=redirect&bpo=41848

   (11) https://bugs.python.org/issue?@action=redirect&bpo=43755


File: python.info,  Node: Novos módulos<5>,  Next: Módulos melhorados<5>,  Prev: Outras mudanças na linguagem<5>,  Up: O que há de novo no Python 3 9

1.5.5 Novos módulos
-------------------

* Menu:

* zoneinfo::
* graphlib::


File: python.info,  Node: zoneinfo,  Next: graphlib,  Up: Novos módulos<5>

1.5.5.1 zoneinfo
................

O módulo *note zoneinfo: 134. oferece suporte ao banco de dados de fuso
horário da IANA para a biblioteca padrão.  Ele adiciona *note
zoneinfo.ZoneInfo: 8e5, uma implementação concreta *note
datetime.tzinfo: 5de, apoiada pelos dados do fuso horário do sistema.

Exemplo:

     >>> from zoneinfo import ZoneInfo
     >>> from datetime import datetime, timedelta

     >>> # Tempo em fuso horário com horário de verão
     >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
     >>> print(dt)
     2020-10-31 12:00:00-07:00
     >>> dt.tzname()
     'PDT'

     >>> # Tempo padrão
     >>> dt += timedelta(days=7)
     >>> print(dt)
     2020-11-07 12:00:00-08:00
     >>> print(dt.tzname())
     PST

Como fonte alternativa de dados para plataformas que não entregam o
banco de dados da IANA, o módulo tzdata(1) foi lançado como um pacote
inicial – distribuído via PyPI e mantido pela equipe principal do
CPython.

Ver também
..........

PEP 615(2) – Suporte ao banco de dados de fuso horário da IANA na biblioteca padrão

     PEP escrita e implementada por Paul Ganssle

   ---------- Footnotes ----------

   (1) https://pypi.org/project/tzdata/

   (2) https://peps.python.org/pep-0615/


File: python.info,  Node: graphlib,  Prev: zoneinfo,  Up: Novos módulos<5>

1.5.5.2 graphlib
................

Um novo módulo, *note graphlib: 65, foi adicionado contendo a classe
*note graphlib.TopologicalSorter: 8e7. para oferecer funcionalidade de
realizar classificação topológica de grafos.  (Contribuição de Pablo
Galindo, Tim Peters e Larry Hastings em bpo-17005(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17005


File: python.info,  Node: Módulos melhorados<5>,  Next: Otimizações<5>,  Prev: Novos módulos<5>,  Up: O que há de novo no Python 3 9

1.5.6 Módulos melhorados
------------------------

* Menu:

* ast: ast<2>.
* asyncio: asyncio<5>.
* compileall: compileall<2>.
* concurrent.futures: concurrent futures<2>.
* curses: curses<2>.
* datetime: datetime<2>.
* distutils: distutils<3>.
* fcntl: fcntl<2>.
* ftplib: ftplib<2>.
* gc: gc<2>.
* hashlib: hashlib<4>.
* http::
* IDLE e idlelib: IDLE e idlelib<3>.
* imaplib::
* importlib: importlib<3>.
* inspect: inspect<4>.
* ipaddress: ipaddress<2>.
* math: math<4>.
* multiprocessing: multiprocessing<2>.
* nntplib::
* os: os<5>.
* pathlib: pathlib<6>.
* pdb: pdb<3>.
* poplib::
* pprint: pprint<2>.
* pydoc::
* random: random<3>.
* signal::
* smtplib::
* socket: socket<3>.
* time: time<3>.
* sys: sys<6>.
* tracemalloc::
* typing: typing<6>.
* unicodedata: unicodedata<4>.
* venv: venv<3>.
* xml: xml<3>.


File: python.info,  Node: ast<2>,  Next: asyncio<5>,  Up: Módulos melhorados<5>

1.5.6.1 ast
...........

Adicionada a opção 'indent' a *note dump(): 8ea, que permite produzir
uma saída indentada com várias linhas.  (Contribuição de Serhiy
Storchaka em bpo-37995(1).)

Adicionada *note ast.unparse(): 8eb. como uma função no módulo *note
ast: 8. que pode ser usado para remover um objeto *note ast.AST: 1a6. e
produzir uma string com código que produziria um objeto *note ast.AST:
1a6. equivalente quando analisado.  (Contribuição de Pablo Galindo e
Batuhan Taskaya em bpo-38870(2).)

Adicionadas docstrings aos nós AST que contêm a assinatura ASDL usada
para construir esse nó.  (Contribuição de Batuhan Taskaya em
bpo-39638(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37995

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38870

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39638


File: python.info,  Node: asyncio<5>,  Next: compileall<2>,  Prev: ast<2>,  Up: Módulos melhorados<5>

1.5.6.2 asyncio
...............

Devido a significativas preocupações de segurança, o parâmetro
'reuse_address' de *note asyncio.loop.create_datagram_endpoint(): 733.
não é mais suportado.  Isso ocorre devido ao comportamento da opção de
soquete ‘SO_REUSEADDR’ no UDP. Para mais detalhes, consulte a
documentação de ‘loop.create_datagram_endpoint()’.  (Contribuição de
Kyle Stanley, Antoine Pitrou e Yury Selivanov em bpo-37228(1).)

Adicionada uma nova *note corrotina: 491. *note
shutdown_default_executor(): 8ed. que agenda um desligamento para o
executor padrão que espera na *note ThreadPoolExecutor: 742. para
concluir o fechamento.  Além disso, *note asyncio.run(): 47c. foi
atualizada para usar o novo *note corrotina: 491.  (Contribuição de Kyle
Stanley em bpo-34037(2).)

Adicionada *note asyncio.PidfdChildWatcher: 479, uma implementação de
monitorador de filhos específica do Linux que controla descritores de
arquivo de processo.  (bpo-38692(3))

Adicionada uma nova *note corrotina: 491. *note asyncio.to_thread():
8ee.  É usada principalmente para executar funções vinculadas à E/S em
uma thread separada para evitar o bloqueio do loop de eventos e funciona
essencialmente como uma versão de alto nível de *note run_in_executor():
8ef. que pode receber argumentos nomeados diretamente.  (Contribuição de
Kyle Stanley e Yury Selivanov em bpo-32309(4).)

Ao cancelar a tarefa devido a um tempo limite, *note asyncio.wait_for():
5ff. irá agora esperar até que o cancelamento seja concluído também no
caso quando 'timeout' é <= 0, como acontece com tempos limite positivos.
(Contribuição de Elvis Pranskevichus em bpo-32751(5).)

*note asyncio: a. agora levanta *note TypeError: 2c3. ao chamar métodos
incompatíveis com um soquete *note ssl.SSLSocket: 8f0.  (Contribuição de
Ido Michael em bpo-37404(6).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37228

   (2) https://bugs.python.org/issue?@action=redirect&bpo=34037

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38692

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32309

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32751

   (6) https://bugs.python.org/issue?@action=redirect&bpo=37404


File: python.info,  Node: compileall<2>,  Next: concurrent futures<2>,  Prev: asyncio<5>,  Up: Módulos melhorados<5>

1.5.6.3 compileall
..................

Adicionada nova possibilidade de usar hardlinks para arquivos ‘.pyc’
duplicados: parâmetro 'hardlink_dupes' e opção de linha de comando
–hardlink-dupes.  (Contribuição de Lumír ‘Frenzy’ Balhar em
bpo-40495(1).)

Adicionadas novas opções para manipulação de caminho nos arquivos ‘.pyc’
resultantes: parâmetros 'stripdir', 'prependdir', 'limit_sl_dest' e
opções de linha de comando -s, -p, -e.  Foi adicionada a possibilidade
de especificar a opção para um nível de otimização várias vezes.
(Contribuição de Lumír ‘Frenzy’ Balhar em bpo-38112(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40495

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38112


File: python.info,  Node: concurrent futures<2>,  Next: curses<2>,  Prev: compileall<2>,  Up: Módulos melhorados<5>

1.5.6.4 concurrent.futures
..........................

Adicionado um novo parâmetro 'cancel_futures' em *note
concurrent.futures.Executor.shutdown(): 8f3. que cancela todos os
futuros pendentes que ainda não começaram a ser executados, em vez de
esperar que eles sejam concluídos antes de desligar o executor.
(Contribuição de Kyle Stanley em bpo-39349(1).)

Removidos as threads do daemon de *note ThreadPoolExecutor: 742. e *note
ProcessPoolExecutor: 8f4.  Isso melhora a compatibilidade com
subinterpretadores e a previsibilidade em seus processos de
desligamento.  (Contribuição de Kyle Stanley em bpo-39812(2).)

Workers em *note ProcessPoolExecutor: 8f4. agora são gerados sob
demanda, apenas quando não há workers ociosos disponíveis para
reutilização.  Isso otimiza a sobrecarga da inicialização e reduz a
quantidade de tempo perdido da CPU para os workers ociosos.
(Contribuição de Kyle Stanley em bpo-39207(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39349

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39812

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39207


File: python.info,  Node: curses<2>,  Next: datetime<2>,  Prev: concurrent futures<2>,  Up: Módulos melhorados<5>

1.5.6.5 curses
..............

Adicionadas as funções *note curses.get_escdelay(): 8f6, *note
curses.set_escdelay(): 8f7, *note curses.get_tabsize(): 8f8. e *note
curses.set_tabsize(): 8f9.  (Contribuição de Anthony Sottile em
bpo-38312(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38312


File: python.info,  Node: datetime<2>,  Next: distutils<3>,  Prev: curses<2>,  Up: Módulos melhorados<5>

1.5.6.6 datetime
................

Os métodos *note isocalendar(): 8fb. de *note datetime.date: 1cd. e
*note isocalendar(): 8fc. de *note datetime.datetime: 1cc. agora
retornam uma *note namedtuple(): 1ca. em vez de uma *note tuple: 370.
(Contribuição de Donghee Na em bpo-24416(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24416


File: python.info,  Node: distutils<3>,  Next: fcntl<2>,  Prev: datetime<2>,  Up: Módulos melhorados<5>

1.5.6.7 distutils
.................

O comando ‘upload’ agora cria digests de hash SHA2-256 e Blake2b-256.
Ele pula o MD5 em plataformas que bloqueiam digest do MD5.
(Contribuição de Christian Heimes em bpo-40698(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40698


File: python.info,  Node: fcntl<2>,  Next: ftplib<2>,  Prev: distutils<3>,  Up: Módulos melhorados<5>

1.5.6.8 fcntl
.............

Adicionadas as constantes ‘fcntl.F_OFD_GETLK’, ‘fcntl.F_OFD_SETLK’ e
‘fcntl.F_OFD_SETLKW’.  (Contribuição de Donghee Na em bpo-38602(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38602


File: python.info,  Node: ftplib<2>,  Next: gc<2>,  Prev: fcntl<2>,  Up: Módulos melhorados<5>

1.5.6.9 ftplib
..............

*note FTP: 900. e *note FTP_TLS: 901. agora levantam a *note ValueError:
202. se o tempo limite especificado para o construtor for zero para
impedir a criação de um soquete não-bloqueante.  (Contribuição de
Donghee Na em bpo-39259(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39259


File: python.info,  Node: gc<2>,  Next: hashlib<4>,  Prev: ftplib<2>,  Up: Módulos melhorados<5>

1.5.6.10 gc
...........

Quando o coletor de lixo faz uma coleção na qual alguns objetos
ressuscitam (são alcançáveis fora dos ciclos isolados após a execução
dos finalizadores), não bloqueia a coleção de todos os objetos que ainda
estão inacessíveis.  (Contribuição de Pablo Galindo e Tim Peters em
bpo-38379(1).)

Adicionada uma nova função *note gc.is_finalized(): 903. para verificar
se um objeto foi finalizado pelo coletor de lixo.  (Contribuição de
Pablo Galindo em bpo-39322(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38379

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39322


File: python.info,  Node: hashlib<4>,  Next: http,  Prev: gc<2>,  Up: Módulos melhorados<5>

1.5.6.11 hashlib
................

O módulo *note hashlib: 68. pode agora usar hashes SHA3 e SHAKE XOF de
OpenSSL quando disponível.  (Contribuição de Christian Heimes em
bpo-37630(1).)

Os módulos hash integrados agora podem ser desativados com ‘./configure
--without-builtin-hashlib-hashes’ ou ativados seletivamente com por
exemplo ‘./configure --with-builtin-hashlib-hashes=sha3,blake2’ para
forçar o uso da implementação baseada em OpenSSL. (Contribuição de
Christian Heimes em bpo-40479(2))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37630

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40479


File: python.info,  Node: http,  Next: IDLE e idlelib<3>,  Prev: hashlib<4>,  Up: Módulos melhorados<5>

1.5.6.12 http
.............

Códigos de status HTTP ‘103 EARLY_HINTS’, ‘418 IM_A_TEAPOT’ e ‘425
TOO_EARLY’ foram adicionados a *note http.HTTPStatus: 906.
(Contribuição de Donghee Na em bpo-39509(1) e Ross Rhodes em
bpo-39507(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39509

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39507


File: python.info,  Node: IDLE e idlelib<3>,  Next: imaplib,  Prev: http,  Up: Módulos melhorados<5>

1.5.6.13 IDLE e idlelib
.......................

Adicionada a opção para ativar e desativar o piscar do cursor.
(Contribuição de Zackery Spytz na bpo-4603(1).)

A tecla Escape agora fecha as janelas de conclusão IDLE. (Contribuição
de Johnny Najera em bpo-38944(2).)

Adicionada argumentos nomeados à lista de completamento de nome de
módulo.  (Contribuição de Terry J. Reedy em bpo-37765(3).)

Novo nas versões de manutenção 3.9.

Faz o IDLE invocar *note sys.excepthook(): 80e. (quando iniciado sem
‘-n’).  Ganchos de usuário eram ignorados anteriormente.  (Contribuição
de Ken Hilton em bpo-43008(4).)

As alterações acima foram portadas para versões de manutenção do 3.8.

Reorganiza a caixa de diálogo de configurações.  Divide a aba General
nas abas Windows e Shell/Ed.  Move as fontes de ajuda, que estendem o
menu Help, para a aba Extensions.  Abre espaço para novas opções e
encurta a caixa de diálogo.  O último faz com que o diálogo se ajuste
melhor a telas pequenas.  (Contribuição de Terry Jan Reedy em
bpo-40468(5).)  Move a configuração do espaço de recuo da aba Font para
a nova aba Windows.  (Contribuição de Mark Roseman e Terry Jan Reedy em
bpo-33962(6).)

Aplica realce de sintaxe em arquivos ‘.pyi’.  (Contribuição de Alex
Waygood e Terry Jan Reedy em bpo-45447(7).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=4603

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38944

   (3) https://bugs.python.org/issue?@action=redirect&bpo=37765

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43008

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40468

   (6) https://bugs.python.org/issue?@action=redirect&bpo=33962

   (7) https://bugs.python.org/issue?@action=redirect&bpo=45447


File: python.info,  Node: imaplib,  Next: importlib<3>,  Prev: IDLE e idlelib<3>,  Up: Módulos melhorados<5>

1.5.6.14 imaplib
................

*note IMAP4: 909. e *note IMAP4_SSL: 90a. agora possuem o parâmetro
opcional 'timeout' para seus construtores.  Também, o método *note
open(): 90b. agora possui um parâmetro opcional 'timeout' com esta
alteração.  Os métodos substituídos de *note IMAP4_SSL: 90a. e *note
IMAP4_stream: 90c. foram aplicados nesta alteração.  (Contribuição de
Dong-hee Na em bpo-38615(1).)

*note imaplib.IMAP4.unselect(): 90d. foi adicionado.  *note
imaplib.IMAP4.unselect(): 90d. libera os recursos do servidor associados
à caixa de correio selecionada e retorna o servidor ao estado
autenticado.  Este comando executa as mesmas ações que *note
imaplib.IMAP4.close(): 90e, exceto que nenhuma mensagem é removida
permanentemente da caixa de correio selecionada no momento.
(Contribuição de Dong-hee Na em bpo-40375(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38615

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40375


File: python.info,  Node: importlib<3>,  Next: inspect<4>,  Prev: imaplib,  Up: Módulos melhorados<5>

1.5.6.15 importlib
..................

Para melhorar a consistência com as instruções de importação, *note
importlib.util.resolve_name(): 910. agora levanta *note ImportError:
419. em vez de *note ValueError: 202. para tentativas de importação
relativas inválidas.  (Contribuição de Ngalim Siregar em bpo-37444(1).)

Carregadores de importação que publicam objetos de módulo imutáveis
agora podem publicar pacotes imutáveis além de módulos individuais.
(Contribuição de Dino Viehland em bpo-39336(2).)

Adicionada a função *note importlib.resources.files(): 48e. com suporte
a subdiretórios nos dados do pacote, correspondendo ao backport na
versão 1.5 do ‘importlib_resources’.  (Contribuição de Jason R. Coombs
em bpo-39791(3).)

Renovado ‘importlib.metadata’ de ‘importlib_metadata’ versão 1.6.1.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37444

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39336

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39791


File: python.info,  Node: inspect<4>,  Next: ipaddress<2>,  Prev: importlib<3>,  Up: Módulos melhorados<5>

1.5.6.16 inspect
................

*note inspect.BoundArguments.arguments: 912. foi alterado de
‘OrderedDict’ para dict regular.  (Contribuição de Inada Naoki em
bpo-36350(1) e bpo-39775(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36350

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39775


File: python.info,  Node: ipaddress<2>,  Next: math<4>,  Prev: inspect<4>,  Up: Módulos melhorados<5>

1.5.6.17 ipaddress
..................

*note ipaddress: 80. agora suporta endereços IPv6 com escopo definido
(endereço IPv6 com sufixo ‘%<scope_id>’).

Os endereços IPv6 com escopo definido podem ser analisados usando *note
ipaddress.IPv6Address: 1fd.  Se presente, o ID da zona de escopo está
disponível através do atributo *note scope_id: 914.  (Contribuição de
Oleksandr Pavliuk em bpo-34788(1).)

A partir do Python 3.9.5, o módulo *note ipaddress: 80. não aceita mais
zeros à esquerda em strings de endereço IPv4.  (Contribuição de
Christian Heimes em bpo-36384(2)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34788

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36384


File: python.info,  Node: math<4>,  Next: multiprocessing<2>,  Prev: ipaddress<2>,  Up: Módulos melhorados<5>

1.5.6.18 math
.............

Expandida a função *note math.gcd(): 916. para manipular vários
argumentos.  Anteriormente, tinha suporte apenas a dois argumentos.
(Contribuição de Serhiy Storchaka em bpo-39648(1).)

Adicionada *note math.lcm(): 917.: retorna o menor múltiplo comum dos
argumentos especificados.  (Contribuição de Mark Dickinson,
Ananthakrishnan e Serhiy Storchaka em bpo-39479(2) e :issue:' 39648'.)

Adicionada *note math.nextafter(): 498.: retorna o próximo valor de
ponto flutuante após 'x' em direção a 'y'.  (Contribuição de Victor
Stinner em bpo-39288(3).)

Adicionada *note math.ulp(): 918.: retorna o valor do bit menos
significativo de um ponto flutuante.  (Contribuição de Victor Stinner em
bpo-39310(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39648

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39479

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39288

   (4) https://bugs.python.org/issue?@action=redirect&bpo=39310


File: python.info,  Node: multiprocessing<2>,  Next: nntplib,  Prev: math<4>,  Up: Módulos melhorados<5>

1.5.6.19 multiprocessing
........................

A classe *note multiprocessing.SimpleQueue: 91a. tem um novo método
*note close(): 91b. para fechar explicitamente a fila.  (Contribuição de
Victor Stinner em bpo-30966(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30966


File: python.info,  Node: nntplib,  Next: os<5>,  Prev: multiprocessing<2>,  Up: Módulos melhorados<5>

1.5.6.20 nntplib
................

‘NNTP’ e ‘NNTP_SSL’ agora levantam uma exceção *note ValueError: 202. se
o tempo limite fornecido ao construtor é zero, para prevenir a criação
de um socket não-bloqueante.  (Contribuição de Donghee Na em
bpo-39259(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39259


File: python.info,  Node: os<5>,  Next: pathlib<6>,  Prev: nntplib,  Up: Módulos melhorados<5>

1.5.6.21 os
...........

Adicionadas as constantes *note CLD_KILLED: 91e. e *note CLD_STOPPED:
91f. para ‘si_code’.  (Contribuição de Donghee Na em bpo-38493(1).)

Exposta *note os.pidfd_open(): 47a. específica do Linux (bpo-38692(2)) e
*note os.P_PIDFD: 920. (bpo-38713(3)) para gerenciamento de processos
com descritores de arquivo.

A função *note os.unsetenv(): 921. agora também está disponível no
Windows.  (Contribuição de Victor Stinner em bpo-39413(4).)

As funções *note os.putenv(): 922. e *note os.unsetenv(): 921. estão
agora sempre disponíveis.  (Contribuição de Victor Stinner em
bpo-39395(5).)

Adicionada a função *note os.waitstatus_to_exitcode(): 923.: converte um
status de espera em um código de saída.  (Contribuição de Victor Stinner
em bpo-40094(6).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38493

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38692

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38713

   (4) https://bugs.python.org/issue?@action=redirect&bpo=39413

   (5) https://bugs.python.org/issue?@action=redirect&bpo=39395

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40094


File: python.info,  Node: pathlib<6>,  Next: pdb<3>,  Prev: os<5>,  Up: Módulos melhorados<5>

1.5.6.22 pathlib
................

Adicionado *note pathlib.Path.readlink(): 925, que age de maneira
semelhante a *note os.readlink(): 926.  (Contribuição de Girts Folkmanis
em bpo-30618(1))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30618


File: python.info,  Node: pdb<3>,  Next: poplib,  Prev: pathlib<6>,  Up: Módulos melhorados<5>

1.5.6.23 pdb
............

No Windows, agora *note Pdb: 928. tem suporte a ‘~/.pdbrc’.
(Contribuição de Tim Hopper e Dan Lidral-Porter em bpo-20523(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20523


File: python.info,  Node: poplib,  Next: pprint<2>,  Prev: pdb<3>,  Up: Módulos melhorados<5>

1.5.6.24 poplib
...............

*note POP3: 92a. e *note POP3_SSL: 92b. agora levantam a *note
ValueError: 202. se o tempo limite especificado para o construtor for
zero para impedir a criação de um soquete sem bloqueio.  (Contribuição
de Donghee Na em bpo-39259(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39259


File: python.info,  Node: pprint<2>,  Next: pydoc,  Prev: poplib,  Up: Módulos melhorados<5>

1.5.6.25 pprint
...............

*note pprint: ae. agora pode imprimir *note types.SimpleNamespace: 1d1.
(Contribuição de Carl Bordum Hansen em bpo-37376(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37376


File: python.info,  Node: pydoc,  Next: random<3>,  Prev: pprint<2>,  Up: Módulos melhorados<5>

1.5.6.26 pydoc
..............

A string de documentação agora é mostrada não apenas para classe,
função, método etc, mas para qualquer objeto que tenha seu próprio
atributo *note __doc__: 92e.  (Contribuição de Serhiy Storchaka em
bpo-40257(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40257


File: python.info,  Node: random<3>,  Next: signal,  Prev: pydoc,  Up: Módulos melhorados<5>

1.5.6.27 random
...............

Adicionado um novo método *note random.Random.randbytes(): 930.: gera
bytes aleatórios.  (Contribuição de Victor Stinner em bpo-40286(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40286


File: python.info,  Node: signal,  Next: smtplib,  Prev: random<3>,  Up: Módulos melhorados<5>

1.5.6.28 signal
...............

Exposta a *note signal.pidfd_send_signal(): 932. específica do Linux
para enviar sinais a um processo usando um descritor de arquivo em vez
de um pid.  (bpo-38712(1))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38712


File: python.info,  Node: smtplib,  Next: socket<3>,  Prev: signal,  Up: Módulos melhorados<5>

1.5.6.29 smtplib
................

*note SMTP: 934. e *note SMTP_SSL: 935. agora levantam uma *note
ValueError: 202. se o tempo limite especificado para seu construtor for
zero para impedir a criação de um soquete sem bloqueio.  (Contribuição
de Dong-hee Na em bpo-39259(1).)

O construtor de *note LMTP: 936. agora tem um parâmetro opcional
'timeout'.  (Contribuição de Dong-hee Na em bpo-39329(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39259

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39329


File: python.info,  Node: socket<3>,  Next: time<3>,  Prev: smtplib,  Up: Módulos melhorados<5>

1.5.6.30 socket
...............

O módulo *note socket: cc. agora exporta a constante *note
CAN_RAW_JOIN_FILTERS: 938. no Linux 4.1 e superior.  (Contribuição de
Stefan Tatschner e Zackery Spytz em bpo-25780(1).)

O módulo socket agora suporta o protocolo *note CAN_J1939: 939. nas
plataformas que o suportam.  (Contribuição de Karl Ding em
bpo-40291(2).)

O módulo socket agora tem as funções *note socket.send_fds(): 93a. e
*note socket.recv_fds(): 93b.  (Contribuição de Joannah Nanjekye, Shinya
Okano e Victor Stinner em bpo-28724(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25780

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40291

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28724


File: python.info,  Node: time<3>,  Next: sys<6>,  Prev: socket<3>,  Up: Módulos melhorados<5>

1.5.6.31 time
.............

No AIX, *note thread_time(): 93d. agora é implementado com
‘thread_cputime()’ que possui resolução de nanossegundos, em vez de
‘clock_gettime(CLOCK_THREAD_CPUTIME_ID)’, que tem uma resolução de 10
milissegundos.  (Contribuição de Batuhan Taskaya em bpo-40192(1))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40192


File: python.info,  Node: sys<6>,  Next: tracemalloc,  Prev: time<3>,  Up: Módulos melhorados<5>

1.5.6.32 sys
............

Adicionado um novo atributo *note sys.platlibdir: 93f.: nome do
diretório da biblioteca específica da plataforma.  É usado para
construir o caminho da biblioteca padrão e os caminhos dos módulos de
extensão instalados.  É igual a ‘"lib"’ na maioria das plataformas.  No
Fedora e SuSE, é igual a ‘"lib64"’ nas plataformas de 64 bits.
(Contribuição de Jan Matějek, Matěj Cepl, Charalampos Stratakis e Victor
Stinner em bpo-1294959(1).)

Anteriormente, *note sys.stderr: 940. era armazenado em buffer quando
não interativo.  Agora, ‘stderr’ assume como padrão sempre o buffer de
linha.  (Contribuição de Jendrik Seipp em bpo-13601(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1294959

   (2) https://bugs.python.org/issue?@action=redirect&bpo=13601


File: python.info,  Node: tracemalloc,  Next: typing<6>,  Prev: sys<6>,  Up: Módulos melhorados<5>

1.5.6.33 tracemalloc
....................

Adicionada *note tracemalloc.reset_peak(): 942. para definir o tamanho
do pico dos blocos de memória rastreados para o tamanho atual, para
medir o pico de partes específicas do código.  (Contribuição de Huon
Wilson em bpo-40630(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40630


File: python.info,  Node: typing<6>,  Next: unicodedata<4>,  Prev: tracemalloc,  Up: Módulos melhorados<5>

1.5.6.34 typing
...............

PEP 593(1) introduziu um tipo *note typing.Annotated: 944. para decorar
tipos existentes com metadados específicos de contexto e o novo
parâmetro ‘include_extras’ para *note typing.get_type_hints(): 6b1. para
acessar os metadados em tempo de execução.  (Contribuição de Till
Varoquaux e Konstantin Kashin.)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0593/


File: python.info,  Node: unicodedata<4>,  Next: venv<3>,  Prev: typing<6>,  Up: Módulos melhorados<5>

1.5.6.35 unicodedata
....................

O banco de dados Unicode foi atualizado para a versão 13.0.0.
(bpo-39926(1)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39926


File: python.info,  Node: venv<3>,  Next: xml<3>,  Prev: unicodedata<4>,  Up: Módulos melhorados<5>

1.5.6.36 venv
.............

Os scripts de ativação fornecidos por *note venv: 111. agora especificam
sua personalização de prompt de forma consistente, sempre usando o valor
especificado por ‘__VENV_PROMPT__’.  Anteriormente, alguns scripts
usavam incondicionalmente ‘__VENV_PROMPT__’, outros apenas se fosse
definido (que era o caso padrão) e um usava ‘__VENV_NAME__’.
(Contribuição de Brett Cannon em bpo-37663(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37663


File: python.info,  Node: xml<3>,  Prev: venv<3>,  Up: Módulos melhorados<5>

1.5.6.37 xml
............

Os caracteres de espaço em branco nos atributos agora são preservados ao
serializar *note xml.etree.ElementTree: 125. para o arquivo XML. EOLNs
não são mais normalizados para “n”.  Este é o resultado da discussão
sobre como interpretar a seção 2.11 da especificação XML. (Contribuição
de Mefistotelis em bpo-39011(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39011


File: python.info,  Node: Otimizações<5>,  Next: Descontinuados<7>,  Prev: Módulos melhorados<5>,  Up: O que há de novo no Python 3 9

1.5.7 Otimizações
-----------------

   * Otimizado o idioma para atribuição de uma variável temporária nas
     compreensões.  Agora ‘for y in [expr]’ nas compreensões é tão
     rápido quanto uma atribuição simples ‘y = expr’.  Por exemplo:

          sums = [s for s in [0] for x in data for s in [s + x]]

     Ao contrário do operador ‘:=’, este idioma não vaza uma variável
     para o escopo externo.

     (Contribuição de Serhiy Storchaka em bpo-32856(1).)

   * Otimizada a manipulação de sinais em aplicações multithread.  Se
     uma thread diferente da thread principal obtiver um sinal, o loop
     de avaliação do bytecode não será mais interrompido a cada
     instrução de bytecode para verificar se há sinais pendentes que não
     podem ser manipulados.  Somente o segmento principal do
     interpretador principal pode manipular sinais.

     Anteriormente, o loop de avaliação do bytecode era interrompido em
     cada instrução até que a thread principal lidasse com os sinais.
     (Contribuição de Victor Stinner em bpo-40010(2).)

   * Otimizado o módulo *note subprocess: d6. no FreeBSD usando
     ‘closefrom()’.  (Contribuição de Ed Maste, Conrad Meyer, Kyle
     Evans, Kubilay Kocak e Victor Stinner em bpo-38061(3).)

   * *note PyLong_FromDouble(): 949. está agora até 1.87x mais rápido
     para valores que cabem em um long.  (Contribuição de Sergey
     Fedoseev em bpo-37986(4).)

   * Vários componentes embutidos do Python (*note range: 94a, *note
     tuple: 370, *note set: 5d9, *note frozenset: 5da, *note list: 611,
     *note dict: 256.) agora são acelerados usando o protocolo
     vectorcall da PEP 590(5).  (Contribuição de Donghee Na, Mark
     Shannon, Jeroen Demeyer e Petr Viktorin em bpo-37207(6).)

   * Otimizada a ‘set.difference_update()’ para o caso em que o outro
     conjunto é muito maior do que o conjunto base.  (Sugestão de Evgeny
     Kapun com contribuição de código de Michele Orrù em bpo-8425(7).)

   * O alocador de pequenos objetos do Python (‘obmalloc.c’) agora
     permite (não mais que) uma arena vazia para permanecer disponível
     para reutilização imediata, sem retorná-la ao sistema operacional.
     Isso evita o desperdiçar loops simples, onde uma arena pode ser
     criada e destruída novamente em cada iteração.  (Contribuição de
     Tim Peters em bpo-37257(8).)

   * *note divisão pelo piso: 94b. de operação flutuante agora tem um
     melhor desempenho.  Além disso, a mensagem de *note
     ZeroDivisionError: 94c. para esta operação foi atualizada.
     (Contribuição de Donghee Na em bpo-39434(9).)

   * A decodificação de strings curtas ASCII com codecs UTF-8 e ascii é
     agora cerca de 15% mais rápida.  (Contribuição de Inada Naoki em
     bpo-37348(10).)

Aqui está um resumo das melhorias de desempenho do Python 3.4 ao Python
3.9:

     Versão do Python                     3.4     3.5     3.6     3.7     3.8    3.9
     --------------                       ---     ---     ---     ---     ---    ---

     Acesso de leitura a variável e atributo:
         read_local                       7.1     7.1     5.4     5.1     3.9    3.9
         read_nonlocal                    7.1     8.1     5.8     5.4     4.4    4.5
         read_global                     15.5    19.0    14.3    13.6     7.6    7.8
         read_builtin                    21.1    21.6    18.5    19.0     7.5    7.8
         read_classvar_from_class        25.6    26.5    20.7    19.5    18.4   17.9
         read_classvar_from_instance     22.8    23.5    18.8    17.1    16.4   16.9
         read_instancevar                32.4    33.1    28.0    26.3    25.4   25.3
         read_instancevar_slots          27.8    31.3    20.8    20.8    20.2   20.5
         read_namedtuple                 73.8    57.5    45.0    46.8    18.4   18.7
         read_boundmethod                37.6    37.9    29.6    26.9    27.7   41.1

     Acesso de escrita a variável e atributo:
         write_local                      8.7     9.3     5.5     5.3     4.3    4.3
         write_nonlocal                  10.5    11.1     5.6     5.5     4.7    4.8
         write_global                    19.7    21.2    18.0    18.0    15.8   16.7
         write_classvar                  92.9    96.0   104.6   102.1    39.2   39.8
         write_instancevar               44.6    45.8    40.0    38.9    35.5   37.4
         write_instancevar_slots         35.6    36.1    27.3    26.6    25.7   25.8

     Acesso de leitura a estrutura de dados:
         read_list                       24.2    24.5    20.8    20.8    19.0   19.5
         read_deque                      24.7    25.5    20.2    20.6    19.8   20.2
         read_dict                       24.3    25.7    22.3    23.0    21.0   22.4
         read_strdict                    22.6    24.3    19.5    21.2    18.9   21.5

     Acesso de escrita a estrutura de dados:
         write_list                      27.1    28.5    22.5    21.6    20.0   20.0
         write_deque                     28.7    30.1    22.7    21.8    23.5   21.7
         write_dict                      31.4    33.3    29.3    29.2    24.7   25.4
         write_strdict                   28.4    29.9    27.5    25.2    23.1   24.5

     Operações em pilha (ou fila):
         list_append_pop                 93.4   112.7    75.4    74.2    50.8   50.6
         deque_append_pop                43.5    57.0    49.4    49.2    42.5   44.2
         deque_append_popleft            43.7    57.3    49.7    49.7    42.8   46.4

     Tempo de laços:
         loop_overhead                    0.5     0.6     0.4     0.3     0.3    0.3

Estes resultados foram gerados a partir do script de benchmark de acesso
variável em: ‘Tools/scripts/var_access_benchmark.py’.  O script de
benchmark exibe tempos em nanossegundos.  Os benchmarks foram medidos em
um processador Intel® Core ™ i7-4960HQ(11) executando as compilações do
macOS de 64 bits encontradas em python.org(12).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32856

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40010

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38061

   (4) https://bugs.python.org/issue?@action=redirect&bpo=37986

   (5) https://peps.python.org/pep-0590/

   (6) https://bugs.python.org/issue?@action=redirect&bpo=37207

   (7) https://bugs.python.org/issue?@action=redirect&bpo=8425

   (8) https://bugs.python.org/issue?@action=redirect&bpo=37257

   (9) https://bugs.python.org/issue?@action=redirect&bpo=39434

   (10) https://bugs.python.org/issue?@action=redirect&bpo=37348

   (11) 
https://ark.intel.com/content/www/us/en/ark/products/76088/intel-core-i7-4960hq-processor-6m-cache-up-to-3-80-ghz.html

   (12) https://www.python.org/downloads/macos/


File: python.info,  Node: Descontinuados<7>,  Next: Removidos<7>,  Prev: Otimizações<5>,  Up: O que há de novo no Python 3 9

1.5.8 Descontinuados
--------------------

   * O comando ‘bdist_msi’ do distutils está agora descontinuado, use
     ‘bdist_wheel’ (pacotes wheel).  (Contribuição de Hugo van Kemenade
     em bpo-39586(1).)

   * Atualmente *note math.factorial(): 94e. aceita instâncias da *note
     float: 2f7. com valores inteiros não negativos (como ‘5.0’).  Ela
     levanta uma *note ValueError: 202. para flutuadores não integrais e
     negativos.  Agora está descontinuado.  Nas versões futuras do
     Python, será levantada uma *note TypeError: 2c3. para todos os
     flutuadores.  (Contribuição de Serhiy Storchaka em bpo-37315(2).)

   * Os módulos ‘parser’ e ‘symbol’ foram descontinuados e serão
     removidos em versões futuras do Python.  Para a maioria dos casos
     de uso, os usuários podem aproveitar o estágio de geração e
     compilação da Árvore de Sintaxe Abstrata (AST), usando o módulo
     *note ast: 8.

   * As funções públicas de API C ‘PyParser_SimpleParseStringFlags()’,
     ‘PyParser_SimpleParseStringFlagsFilename()’,
     ‘PyParser_SimpleParseFileFlags()’ e ‘PyNode_Compile()’ foram
     descontinuados e serão removidos no Python 3.10 junto com o
     analisador sintático antigo.

   * O uso de *note NotImplemented: 7d3. em um contexto booleano foi
     descontinuado, pois é quase exclusivamente o resultado de
     implementações incorretas de comparadores avançados.  Isso será
     tornado em uma *note TypeError: 2c3. em uma versão futura do
     Python.  (Contribuição de Josh Rosenberg em bpo-35712(3).)

   * O módulo *note random: b8. atualmente aceita qualquer tipo
     hasheável como um possível valor inicial.  Infelizmente, alguns
     desses tipos não têm garantia de ter um valor de hash
     determinístico.  Após o Python 3.9, o módulo restringirá suas
     sementes a *note None: 675, *note int: 257, *note float: 2f7, *note
     str: 44c, *note bytes: 1c2. e *note bytearray: 2ea.

   * A abertura do arquivo *note GzipFile: 41a. para escrita sem
     especificar o argumento 'mode' foi descontinuado.  Nas versões
     futuras do Python, ele sempre será aberto para leitura por padrão.
     Especifique o argumento 'mode' para abri-lo para escrever e
     silenciar um aviso.  (Contribuição de Serhiy Storchaka em
     bpo-28286(4).)

   * Descontinuado o método ‘split()’ de ‘_tkinter.TkappType’ a favor do
     método ‘splitlist()’ que possui um comportamento mais consistente e
     previsível.  (Contribuição de Serhiy Storchaka em bpo-38371(5).)

   * A passagem explícita dos objetos da corrotina para *note
     asyncio.wait(): 47f. foi descontinuada e será removida na versão
     3.11.  (Contribuição de Yury Selivanov e Kyle Stanley em
     bpo-34790(6).)

   * Os padrões binhex4 e hexbin4 agora foram descontinuados.  O módulo
     ‘binhex’ e as seguintes funções *note binascii: 10. foram
     descontinuadas:

        * ‘b2a_hqx()’, ‘a2b_hqx()’

        * ‘rlecode_hqx()’, ‘rledecode_hqx()’

     (Contribuição de Victor Stinner em bpo-39353(7).)

   * As classes ‘slice’, ‘Index’ e ‘ExtSlice’ de *note ast: 8. são
     consideradas descontinuadas e serão removidas nas versões futuras
     do Python.  O próprio ‘value’ deve ser usado em vez de
     ‘Index(value)’.  ‘Tuple(slices, Load())’ deve ser usada em vez de
     ‘ExtSlice(slices)’.  (Contribuição de Serhiy Storchaka em
     bpo-34822(8).)

   * As classes ‘Suite’, ‘Param’, ‘AugLoad’ e ‘AugStore’ de *note ast:
     8. são consideradas descontinuadas e serão removidas nas versões
     futuras do Python.  Elas não foram geradas pelo analisador
     sintático e não foram aceitos pelo gerador de código no Python 3.
     (Contribuição de Batuhan Taskaya em bpo-39639(9) e bpo-39969(10) e
     Serhiy Storchaka em bpo-39988(11).)

   * As funções ‘PyEval_InitThreads()’ e ‘PyEval_ThreadsInitialized()’
     agora estão descontinuadas e serão removidas no Python 3.11.
     Chamar ‘PyEval_InitThreads()’ agora não faz nada.  A *note GIL:
     159. é inicializada por *note Py_Initialize(): 8b1. desde o Python
     3.7.  (Contribuição de Victor Stinner em bpo-39877(12).)

   * Passar ‘None’ como o primeiro argumento para a função *note
     shlex.split(): 53c. foi descontinuada.  (Contribuição de Zackery
     Spytz em bpo-33262(13).)

   * ‘smtpd.MailmanProxy()’ está agora descontinuado, pois está
     inutilizável sem um módulo externo, ‘mailman’.  (Contribuição de
     Samuel Colvin em bpo-35800(14).)

   * O módulo ‘lib2to3’ agora emite um *note PendingDeprecationWarning:
     8ce.  Python 3.9 mudou para um analisador sintático GASE (veja PEP
     617(15)) e Python 3.10 pode incluir uma nova sintaxe de linguagem
     que não é analisável pelo analisador sintático LL(1) de lib2to3.  O
     módulo ‘lib2to3’ pode ser removido da biblioteca padrão em uma
     versão futura do Python.  Considere alternativas de terceiros, como
     LibCST(16) ou parso(17).  (Contribuição de Carl Meyer em
     bpo-40360(18).)

   * Adicionado o parâmetro 'random' da *note random.shuffle(): 747. foi
     descontinuado.  (Contribuição de Raymond Hettinger em
     bpo-40465(19))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39586

   (2) https://bugs.python.org/issue?@action=redirect&bpo=37315

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35712

   (4) https://bugs.python.org/issue?@action=redirect&bpo=28286

   (5) https://bugs.python.org/issue?@action=redirect&bpo=38371

   (6) https://bugs.python.org/issue?@action=redirect&bpo=34790

   (7) https://bugs.python.org/issue?@action=redirect&bpo=39353

   (8) https://bugs.python.org/issue?@action=redirect&bpo=34822

   (9) https://bugs.python.org/issue?@action=redirect&bpo=39639

   (10) https://bugs.python.org/issue?@action=redirect&bpo=39969

   (11) https://bugs.python.org/issue?@action=redirect&bpo=39988

   (12) https://bugs.python.org/issue?@action=redirect&bpo=39877

   (13) https://bugs.python.org/issue?@action=redirect&bpo=33262

   (14) https://bugs.python.org/issue?@action=redirect&bpo=35800

   (15) https://peps.python.org/pep-0617/

   (16) https://libcst.readthedocs.io/

   (17) https://parso.readthedocs.io/

   (18) https://bugs.python.org/issue?@action=redirect&bpo=40360

   (19) https://bugs.python.org/issue?@action=redirect&bpo=40465


File: python.info,  Node: Removidos<7>,  Next: Portando para Python 3 9,  Prev: Descontinuados<7>,  Up: O que há de novo no Python 3 9

1.5.9 Removidos
---------------

   * A versão errônea em ‘unittest.mock.__version__’ foi removida.

   * ‘nntplib.NNTP’: os métodos ‘xpath()’ e ‘xgtitle()’ foram removidos.
     Esses métodos foram descontinuados desde Python 3.3.  Geralmente,
     essas extensões não são suportadas ou não são habilitadas pelos
     administradores do servidor NNTP. Para ‘xgtitle()’, use
     ‘nntplib.NNTP.descriptions()’ ou ‘nntplib.NNTP.description()’.
     (Contribuição de Donghee Na em bpo-39366(1).)

   * *note array.array: 1a0.: os métodos ‘tostring()’ e ‘fromstring()’
     foram removidos.  Eles eram aliases para ‘tobytes()’ e
     ‘frombytes()’, descontinuado desde Python 3.2.  (Contribuição de
     Victor Stinner em bpo-38916(2).)

   * A função ‘sys.callstats()’ não documentada foi removida.  Desde o
     Python 3.7, ela foi descontinuada e sempre retornou *note None:
     675.  É necessária uma opção de compilação especial ‘CALL_PROFILE’
     que já foi removida no Python 3.7.  (Contribuição de Victor Stinner
     em bpo-37414(3).)

   * As funções ‘sys.getcheckinterval()’ e ‘sys.setcheckinterval()’
     foram removidas.  Elas foram descontinuadas desde o Python 3.2.
     Use *note sys.getswitchinterval(): 950. e *note
     sys.setswitchinterval(): 951. em seu lugar.  (Contribuição de
     Victor Stinner em bpo-37392(4).)

   * A função C ‘PyImport_Cleanup()’ foi removida.  Foi documentada
     como: “Esvazia a tabela do módulo.  Apenas para uso interno.”
     (Contribuição de Victor Stinner em bpo-36710(5).)

   * Os módulos ‘_dummy_thread’ e ‘dummy_threading’ foram removidos.
     Esses módulos foram descontinuados desde o Python 3.7, que requer
     suporte a threading.  (Contribuição de Victor Stinner em
     bpo-37312(6).)

   * O apelido ‘aifc.openfp()’ para ‘aifc.open()’, o apelido
     ‘sunau.openfp()’ para ‘sunau.open()’ e o apelido ‘wave.openfp()’
     para *note wave.open(): 952. foram removidos.  Eles estavam
     descontinuados desde o Python 3.7.  (Contribuição de Victor Stinner
     em bpo-37320(7).)

   * O método ‘isAlive()’ de *note threading.Thread: 953. foi removido.
     Ele foi descontinuado desde o Python 3.8.  Use *note is_alive():
     954. ao invés.  (Contribuição de Donghee Na em bpo-37804(8).)

   * Os métodos ‘getchildren()’ e ‘getiterator()’ das classes *note
     ElementTree: 955. e *note Element: 310. no módulo *note
     ElementTree: 125. foram removidos.  Eles foram descontinuados no
     Python 3.2.  Use ‘iter(x)’ ou ‘list(x)’ em vez de ‘x.getchildren()’
     e ‘x.iter()’ ou ‘list(x.iter())’ em vez de ‘x.getiterator()’.
     (Contribuição Serhiy Storchaka no bpo-36543(9).)

   * A API antiga *note plistlib: ab. foi removida.  Ela tinha sido
     descontinuada desde o Python 3.4.  Use as funções *note load():
     956, *note loads(): 957, *note dump(): 958. e *note dumps(): 959.
     Além disso, o parâmetro 'use_builtin_types' foi removido, os
     objetos padrão *note bytes: 1c2. são sempre usados em seu lugar.
     (Contribuição de Jon Janzen em bpo-36409(10).)

   * A função C ‘PyGen_NeedsFinalizing’ foi removida.  Ela não foi
     documentada, testada ou usada em qualquer lugar dentro do CPython
     após a implementação de PEP 442(11).  Patch de Joannah Nanjekye.
     (Contribuição de Joannah Nanjekye em bpo-15088(12))

   * ‘base64.encodestring()’ e ‘base64.decodestring()’, aliases
     descontinuados desde Python 3.1, foram removidos: use *note
     base64.encodebytes(): 95a. e *note base64.decodebytes(): 95b.
     (Contribuição de Victor Stinner em bpo-39351(13).)

   * A função ‘fractions.gcd()’ foi removida, foi descontinuado desde
     Python 3.5 (bpo-22486(14)): use *note math.gcd(): 916. em seu
     lugar.  (Contribuição de Victor Stinner em bpo-39350(15).)

   * O parâmetro 'buffering' de *note bz2.BZ2File: 86a. foi removido.
     Desde Python 3.0, ele era ignorado e ao usá-lo emitia uma *note
     DeprecationWarning: 1a5.  Passe um objeto arquivo aberto para
     controlar como o arquivo é aberto.  (Contribuição de Victor Stinner
     em bpo-39357(16).)

   * O parâmetro 'encoding' de *note json.loads(): 95c. foi removido.  A
     partir do Python 3.1, ele foi descontinuado e ignorado; usá-lo
     emitia uma *note DeprecationWarning: 1a5. desde Python 3.8.
     (Contribuição de Inada Naoki em bpo-39377(17))

   * As instruções ‘with (await asyncio.lock):’ e ‘with (yield from
     asyncio.lock):’ não são mais suportadas, use ‘async with lock’.  O
     mesmo é se aplica para ‘asyncio.Condition’ e ‘asyncio.Semaphore’.
     (Contribuição de Andrew Svetlov em bpo-34793(18).)

   * A função ‘sys.getcounts()’, a opção de linha de comando ‘-X
     showalloccount’ e o campo ‘show_alloc_count’ da estrutura C *note
     PyConfig: 3a6. foram removidos.  Eles exigiam uma construção
     especial do Python definindo a macro ‘COUNT_ALLOCS’.  (Contribuição
     de Victor Stinner em bpo-39489(19).)

   * O atributo ‘_field_types’ da classe *note typing.NamedTuple: 2b0.
     foi removido.  Ele foi descontinuado desde o Python 3.8.  Use o
     atributo ‘__annotations__’.  (Contribuição de Serhiy Storchaka em
     bpo-40182(20).)

   * O método ‘symtable.SymbolTable.has_exec()’ foi removido.  Ele foi
     descontinuado desde 2006, e retornando apenas ‘False’ quando é
     chamado.  (Contribuição de Batuhan Taskaya em bpo-40208(21))

   * Os métodos ‘asyncio.Task.current_task()’ e
     ‘asyncio.Task.all_tasks()’ foram removidos.  Eles foram
     descontinuados desde o Python 3.7 e você pode usar *note
     asyncio.current_task(): 47d. e *note asyncio.all_tasks(): 95d. em
     seu lugar.  (Contribuição de Rémi Lapeyre em bpo-40967(22))

   * O método ‘unescape()’ na classe *note html.parser.HTMLParser: 87b.
     foi removido (foi descontinuado desde o Python 3.4).  *note
     html.unescape(): 95e. deve ser usada para converter referências de
     caracteres para os caracteres Unicode correspondentes.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39366

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38916

   (3) https://bugs.python.org/issue?@action=redirect&bpo=37414

   (4) https://bugs.python.org/issue?@action=redirect&bpo=37392

   (5) https://bugs.python.org/issue?@action=redirect&bpo=36710

   (6) https://bugs.python.org/issue?@action=redirect&bpo=37312

   (7) https://bugs.python.org/issue?@action=redirect&bpo=37320

   (8) https://bugs.python.org/issue?@action=redirect&bpo=37804

   (9) https://bugs.python.org/issue?@action=redirect&bpo=36543

   (10) https://bugs.python.org/issue?@action=redirect&bpo=36409

   (11) https://peps.python.org/pep-0442/

   (12) https://bugs.python.org/issue?@action=redirect&bpo=15088

   (13) https://bugs.python.org/issue?@action=redirect&bpo=39351

   (14) https://bugs.python.org/issue?@action=redirect&bpo=22486

   (15) https://bugs.python.org/issue?@action=redirect&bpo=39350

   (16) https://bugs.python.org/issue?@action=redirect&bpo=39357

   (17) https://bugs.python.org/issue?@action=redirect&bpo=39377

   (18) https://bugs.python.org/issue?@action=redirect&bpo=34793

   (19) https://bugs.python.org/issue?@action=redirect&bpo=39489

   (20) https://bugs.python.org/issue?@action=redirect&bpo=40182

   (21) https://bugs.python.org/issue?@action=redirect&bpo=40208

   (22) https://bugs.python.org/issue?@action=redirect&bpo=40967


File: python.info,  Node: Portando para Python 3 9,  Next: Mudanças na construção<5>,  Prev: Removidos<7>,  Up: O que há de novo no Python 3 9

1.5.10 Portando para Python 3.9
-------------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções que podem exigir alterações no seu código.

* Menu:

* Alterações na API Python: Alterações na API Python<4>.
* Alterações na API C: Alterações na API C<8>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<5>.


File: python.info,  Node: Alterações na API Python<4>,  Next: Alterações na API C<8>,  Up: Portando para Python 3 9

1.5.10.1 Alterações na API Python
.................................

   * *note __import__(): 8da. e *note importlib.util.resolve_name():
     910. agora levanta *note ImportError: 419. onde anteriormente
     levantava *note ValueError: 202.  Os chamadores capturando o tipo
     de exceção específico e suportando Python 3.9 e versões anteriores
     precisarão capturar ambas usando ‘except (ImportError,
     ValueError):’.

   * Os scripts de ativação *note venv: 111. não são mais casos
     especiais quando ‘__VENV_PROMPT__’ está definido como ‘""’.

   * O método *note select.epoll.unregister(): 961. não ignora mais o
     erro *note EBADF: 962.  (Contribuição de Victor Stinner em
     bpo-39239(1).)

   * O parâmetro 'compresslevel' de *note bz2.BZ2File: 86a. tornou-se
     uma parâmetro somente-nomeado, uma vez que o parâmetro 'buffering'
     foi removido.  (Contribuição de Victor Stinner em bpo-39357(2).)

   * AST simplificada para assinatura.  Índices simples serão
     representados por seus valores, fatias estendidas serão
     representadas como tuplas.  ‘Index(value)’ retornará um ‘value’ em
     si, ‘ExtSlice(slices)’ retornará ‘Tuple(slices, Load())’.
     (Contribuição de Serhiy Storchaka em bpo-34822(3).)

   * O módulo *note importlib: 77. agora ignora a variável de ambiente
     *note PYTHONCASEOK: 963. quando as opções de linha de comando *note
     -E: 964. ou *note -I: 965. estão sendo usadas.

   * O parâmetro 'encoding' foi adicionado às classes *note ftplib.FTP:
     900. e *note ftplib.FTP_TLS: 901. como um parâmetro
     somente-nomeado, e a codificação padrão foi alterada de Latin-1
     para UTF-8 para siga RFC 2640(4).

   * *note asyncio.loop.shutdown_default_executor(): 8ed. foi adicionado
     a *note AbstractEventLoop: 966, significando que laços de eventos
     alternativos que herdam dele devem ter este método definido.
     (Contribuição de Kyle Stanley em bpo-34037(5).)

   * Os valores constantes de futuras sinalizações no módulo *note
     __future__: 0. são atualizados para evitar colisão com sinalizações
     do compilador.  Anteriormente, ‘PyCF_ALLOW_TOP_LEVEL_AWAIT’ estava
     em conflito com ‘CO_FUTURE_DIVISION’.  (Contribuição de Batuhan
     Taskaya em bpo-39562(6))

   * ‘array('u')’ agora usa ‘wchar_t’ como tipo C em vez de
     ‘Py_UNICODE’.  Esta mudança não afeta seu comportamento porque
     ‘Py_UNICODE’ é um apelido de ‘wchar_t’ desde Python 3.3.
     (Contribuição de Inada Naoki em bpo-34538(7).)

   * A API de *note logging.getLogger(): 967. agora retorna o logger
     raiz quando passado o nome ‘'root'’, enquanto anteriormente
     retornava um logger não-raiz chamado ‘'root'’.  Isso pode afetar
     casos onde o código do usuário deseja explicitamente um logger
     não-root chamado ‘'root'’, ou instancia um logger usando
     ‘logging.getLogger(__name__)’ em algum módulo de nível superior
     chamado ‘'root.py'’.  (Contribuição de Vinay Sajip em
     bpo-37742(8).)

   * O tratamento de divisão de *note PurePath: 4a6. agora retorna *note
     NotImplemented: 7d3. ao invés de levantar um *note TypeError: 2c3.
     quando passado algo diferente de uma instância de ‘str’ ou *note
     PurePath: 4a6.  Isso permite a criação de classes compatíveis que
     não herdam desses tipos mencionados.  (Contribuição de Roger Aiudi
     em bpo-34775(9)).

   * A partir do Python 3.9.5, o módulo *note ipaddress: 80. não aceita
     mais zeros à esquerda em strings de endereço IPv4.  Os zeros à
     esquerda são ambíguos e interpretados como notação octal por
     algumas bibliotecas.  Por exemplo, a função legada *note
     socket.inet_aton(): 968. trata os zeros à esquerda como notação
     octal.  A implementação glibc de *note inet_pton(): 969. moderna
     não aceita nenhum zeros à esquerda.  (Contribuição de Christian
     Heimes em bpo-36384(10)).

   * *note codecs.lookup(): 96a. agora normaliza o nome da codificação
     da mesma forma que *note encodings.normalize_encoding(): 7fe,
     exceto que *note codecs.lookup(): 96a. também converte o nome para
     minúsculas.  Por exemplo, ‘"latex+latin1"’ nome de codificação
     agora está normalizado para ‘"latex_latin1"’.  (Contribuição de
     Jordon Xu em bpo-37751(11).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39239

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39357

   (3) https://bugs.python.org/issue?@action=redirect&bpo=34822

   (4) https://datatracker.ietf.org/doc/html/rfc2640.html

   (5) https://bugs.python.org/issue?@action=redirect&bpo=34037

   (6) https://bugs.python.org/issue?@action=redirect&bpo=39562

   (7) https://bugs.python.org/issue?@action=redirect&bpo=34538

   (8) https://bugs.python.org/issue?@action=redirect&bpo=37742

   (9) https://bugs.python.org/issue?@action=redirect&bpo=34775

   (10) https://bugs.python.org/issue?@action=redirect&bpo=36384

   (11) https://bugs.python.org/issue?@action=redirect&bpo=37751


File: python.info,  Node: Alterações na API C<8>,  Next: Alterações de bytecode do CPython<5>,  Prev: Alterações na API Python<4>,  Up: Portando para Python 3 9

1.5.10.2 Alterações na API C
............................

   * Instâncias de *note tipos alocados por heap: 96c. (como aquelas
     criadas com *note PyType_FromSpec(): 57d. e APIs semelhantes)
     mantêm uma referência para seu objeto de tipo desde o Python 3.8.
     Conforme indicado nas “Mudanças na API C” do Python 3.8, para a
     grande maioria dos casos, não deve haver nenhum efeito colateral,
     mas para os tipos que têm uma função personalizada *note
     tp_traverse: 77e, certifique-se de que todas as funções
     ‘tp_traverse’ personalizadas de tipos alocados por heap visitam o
     tipo do objeto.

          Exemplo:

               int
               travessia_foo(foo_struct *self, visitproc visit, void *arg) {
               // Resto da função de travessia
               #if PY_VERSION_HEX >= 0x03090000
                   // Isso não era necessário antes do Python 3.9 (problemas 35810 e 40217 do Python)
                   Py_VISIT(Py_TYPE(self));
               #endif
               }

     Se sua função transversal delega para ‘tp_traverse’ de sua classe
     base (ou outro tipo), certifique-se de que ‘Py_TYPE(self)’ seja
     visitado apenas uma vez.  Observe que apenas os *note tipos de
     heap: 96c. devem visitar o tipo em ‘tp_traverse’.

          Por exemplo, se sua função ‘tp_traverse’ inclui:

               base->tp_traverse(self, visit, arg)

          adicione:

               #if PY_VERSION_HEX >= 0x03090000
                   // Isso não era necessário antes do Python 3.9 (bpo-35810 e bpo-40217)
                   if (base->tp_flags & Py_TPFLAGS_HEAPTYPE) {
                       // tp_traverse de um tipo de heap já visitou Py_TYPE(self)
                   } else {
                       Py_VISIT(Py_TYPE(self));
                   }
               #else

     (Veja bpo-35810(1) e bpo-40217(2) para mais informações.)

   * As funções ‘PyEval_CallObject’, ‘PyEval_CallFunction’,
     ‘PyEval_CallMethod’ e ‘PyEval_CallObjectWithKeywords’ foram
     descontinuadas.  Use *note PyObject_Call(): 39c. e suas variantes.
     (Veja mais detalhes em bpo-29548(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35810

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40217

   (3) https://bugs.python.org/issue?@action=redirect&bpo=29548


File: python.info,  Node: Alterações de bytecode do CPython<5>,  Prev: Alterações na API C<8>,  Up: Portando para Python 3 9

1.5.10.3 Alterações de bytecode do CPython
..........................................

   * O opcode *note LOAD_ASSERTION_ERROR: 96e. foi adicionado para
     tratar a instrução *note assert: 96f.  Anteriormente, a instrução
     assert não funcionava corretamente se a exceção *note
     AssertionError: 6a9. estivesse sendo ocultada.  (Contribuição de
     Zackery Spytz em bpo-34880(1).)

   * O código de operação *note COMPARE_OP: 970. foi dividido em quatro
     instruções distintas:

        * ‘COMPARE_OP’ para comparações ricas

        * ‘IS_OP’ para testes “is” e “is not”

        * ‘CONTAINS_OP’ para testes “in” e “not in”

        * ‘JUMP_IF_NOT_EXC_MATCH’ para verificar exceções em instruções
          “try-except”.

     (Contribuição de Mark Shannon em bpo-39156(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34880

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39156


File: python.info,  Node: Mudanças na construção<5>,  Next: Alterações na API C<9>,  Prev: Portando para Python 3 9,  Up: O que há de novo no Python 3 9

1.5.11 Mudanças na construção
-----------------------------

   * Adicionada a opção ‘--with-platlibdir’ ao script ‘configure’: nome
     do diretório de biblioteca específico da plataforma, armazenado no
     novo atributo *note sys.platlibdir: 93f.  Veja o atributo *note
     sys.platlibdir: 93f. para mais informações.  (Contribuição de Jan
     Matějek, Matěj Cepl, Charalampos Stratakis e Victor Stinner em
     bpo-1294959(1).)

   * A macro especial de construção ‘COUNT_ALLOCS’ foi removida.
     (Contribuição de Victor Stinner em bpo-39489(2).)

   * Em plataformas não Windows, as funções ‘setenv()’ e ‘unsetenv()’
     agora são necessárias para construir o Python.  (Contribuição de
     Victor Stinner em bpo-39395(3).)

   * Em plataformas não-Windows, a criação de instaladores
     ‘bdist_wininst’ não possui mais suporte oficial.  (Veja
     bpo-10945(4) para mais detalhes.)

   * Ao compilar Python no macOS a partir do código-fonte, ‘_tkinter’
     agora se vincula a frameworks Tcl e Tk não pertencentes ao sistema
     se eles estiverem instalados em ‘/Library/Frameworks’, como era o
     caso em versões mais antigas do macOS. Se um macOS SDK for
     explicitamente configurado, usando *note -enable-universalsdk: 972.
     ou ‘-isysroot’, somente o SDK em si será procurado.  Esse
     comportamento padrão pode ser sobreposto com ‘--with-tcltk-include’
     e ‘--with-tcltk-libs’.  (Contribuição de Ned Deily em
     bpo-34956(5).)

   * Python pode agora ser construído para Windows 10 ARM64.
     (Contribuição de Steve Dower em bpo-33125(6).)

   * Alguns testes individuais agora são ignorados quando ‘--pgo’ é
     usada.  Os testes em questão aumentaram significativamente o tempo
     da tarefa de PGO e provavelmente não ajudaram a melhorar a
     otimização do executável final.  Isso acelera a tarefa por um fator
     de cerca de 15x.  A execução de todo o conjunto de testes de
     unidade é lenta.  Esta mudança pode resultar em uma construção um
     pouco menos otimizada, uma vez que nem tantos ramos de código serão
     executados.  Se você estiver disposto a esperar por uma construção
     muito mais lenta, o comportamento antigo pode ser restaurado usando
     ‘./configure [..] PROFILE_TASK="-m test --pgo-extended"’.  Não
     oferecemos garantia de qual conjunto de tarefas de PGO produz uma
     construção mais rápida.  Os usuários que se importam devem executar
     seus próprios benchmarks relevantes, pois os resultados podem
     depender do ambiente, da carga de trabalho e da cadeia de
     ferramentas do compilador.  (Veja bpo-36044(7) e bpo-37707(8) para
     mais detalhes.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1294959

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39489

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39395

   (4) https://bugs.python.org/issue?@action=redirect&bpo=10945

   (5) https://bugs.python.org/issue?@action=redirect&bpo=34956

   (6) https://bugs.python.org/issue?@action=redirect&bpo=33125

   (7) https://bugs.python.org/issue?@action=redirect&bpo=36044

   (8) https://bugs.python.org/issue?@action=redirect&bpo=37707


File: python.info,  Node: Alterações na API C<9>,  Next: Alterações notáveis no Python 3 9 1,  Prev: Mudanças na construção<5>,  Up: O que há de novo no Python 3 9

1.5.12 Alterações na API C
--------------------------

* Menu:

* Novas funcionalidades: Novas funcionalidades<10>.
* Portando para Python 3.9: Portando para Python 3 9<2>.
* Removidos: Removidos<8>.


File: python.info,  Node: Novas funcionalidades<10>,  Next: Portando para Python 3 9<2>,  Up: Alterações na API C<9>

1.5.12.1 Novas funcionalidades
..............................

   * PEP 573(1): Adicionada *note PyType_FromModuleAndSpec(): 551. para
     associar um módulo a uma classe; *note PyType_GetModule(): 975. e
     *note PyType_GetModuleState(): 976. para obter o módulo e seu
     estado; e *note PyCMethod: 764. e *note METH_METHOD: 977. para
     permitir que um método acesse a classe na qual ela foi definida.
     (Contribuição de Marcel Plch e Petr Viktorin em bpo-38787(2).)

   * Adicionada a função *note PyFrame_GetCode(): 78a.: obtém um código
     de quadro.  Adiciona a função *note PyFrame_GetBack(): 786.: obtém
     o próximo quadro externo.  (Contribuição de Victor Stinner em
     bpo-40421(3).)

   * Adicionada *note PyFrame_GetLineNumber(): 78b. à API C limitada.
     (Contribuição de Victor Stinner em bpo-40421(4).)

   * Adicionada as funções *note PyThreadState_GetInterpreter(): 978. e
     *note PyInterpreterState_Get(): 3ad. para obter o interpretador.
     Adiciona a função *note PyThreadState_GetFrame(): 78e. para obter o
     quadro atual de um estado de thread do Python.  Adiciona a função
     *note PyThreadState_GetID(): 979.: obtém o identificador único de
     um estado de thread do Python.  (Contribuição de Victor Stinner em
     bpo-39947(5).)

   * Adicionada uma nova função pública *note PyObject_CallNoArgs():
     39b. à API C, que chama um objeto chamável Python sem nenhum
     argumento.  É a maneira mais eficiente de chamar um objeto chamável
     Python sem nenhum argumento.  (Contribuição de Victor Stinner em
     bpo-37194(6).)

   * Alterações na API C limitada (se a macro ‘Py_LIMITED_API’ estiver
     definida):

        * Fornece *note Py_EnterRecursiveCall(): 97a. e *note
          Py_LeaveRecursiveCall(): 97b. como funções regulares para a
          API limitada.  Anteriormente, eram definidas como macros, mas
          essas macros não compilavam com a API C limitada, que não pode
          acessar o campo ‘PyThreadState.recursion_depth’ (a estrutura
          não é visível na API C limitada).

        * ‘PyObject_INIT()’ e ‘PyObject_INIT_VAR()’ se uma função
          regular não visível para ocultar os detalhes da implementação.

     (Contribuição de Victor Stinner em bpo-38644(7) e bpo-39542(8).)

   * A função *note PyModule_AddType(): 97c. é adicionado para ajudar a
     adicionar um tipo a um módulo.  (Contribuição de Donghee Na em
     bpo-40024(9).)

   * Adicionadas as funções *note PyObject_GC_IsTracked(): 97d. e *note
     PyObject_GC_IsFinalized(): 97e. para a API pública para permitir a
     consulta se os objetos Python estão sendo rastreados ou já foram
     finalizados pelo coletor de lixo, respectivamente.  (Contribuição
     de Pablo Galindo em bpo-40241(10).)

   * Adicionada a ‘_PyObject_FunctionStr()’ para obter uma representação
     amigável para o usuário de strings de um objeto função ou similar.
     (Patch por Jeroen Demeyer em bpo-37645(11).)

   * Adicionada *note PyObject_CallOneArg(): 97f. para chamar um objeto
     com um argumento posicional (Patch de Jeroen Demeyer em
     bpo-37483(12).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0573/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38787

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40421

   (4) https://bugs.python.org/issue?@action=redirect&bpo=40421

   (5) https://bugs.python.org/issue?@action=redirect&bpo=39947

   (6) https://bugs.python.org/issue?@action=redirect&bpo=37194

   (7) https://bugs.python.org/issue?@action=redirect&bpo=38644

   (8) https://bugs.python.org/issue?@action=redirect&bpo=39542

   (9) https://bugs.python.org/issue?@action=redirect&bpo=40024

   (10) https://bugs.python.org/issue?@action=redirect&bpo=40241

   (11) https://bugs.python.org/issue?@action=redirect&bpo=37645

   (12) https://bugs.python.org/issue?@action=redirect&bpo=37483


File: python.info,  Node: Portando para Python 3 9<2>,  Next: Removidos<8>,  Prev: Novas funcionalidades<10>,  Up: Alterações na API C<9>

1.5.12.2 Portando para Python 3.9
.................................

   * ‘PyInterpreterState.eval_frame’ ( PEP 523(1)) agora exige um novo
     parâmetro 'tstate' obrigatório (‘PyThreadState*’).  (Contribuição
     de Victor Stinner em bpo-38500(2).)

   * Módulos de extensão: As funções *note m_traverse: 981, *note
     m_clear: 982. e *note m_free: 983. de *note PyModuleDef: 984. não
     são mais chamados se o estado do módulo foi solicitado, mas ainda
     não está alocado.  Este é o caso imediatamente após o módulo ser
     criado e antes de o módulo ser executado (função *note Py_mod_exec:
     985.).  Mais precisamente, estas funções são são chamados se *note
     m_size: 986. for maior que 0 e o estado do módulo (como retornado
     por *note PyModule_GetState(): 987.) for ‘NULL’.

     Módulos de extensão sem um estado de módulo (‘m_size <= 0’) não são
     afetados.

   * Se *note Py_AddPendingCall(): 988. for chamada em um
     subinterpretador, a função agora está programada para ser chamada a
     partir do subinterpretador, em vez de ser chamada a partir do
     interpretador principal.  Cada subinterpretador agora tem sua
     própria lista de chamadas programadas.  (Contribuição de Victor
     Stinner em bpo-39984(3).)

   * O registro do Windows não é mais usado para inicializar *note
     sys.path: 3b4. quando a opção ‘-E’ é usada (se *note
     PyConfig.use_environment: 3d9. estiver definido como ‘0’).  Isso é
     significativo ao incorporar Python no Windows.  (Contribuição de
     Zackery Spytz na bpo-8901(4).)

   * A variável global *note PyStructSequence_UnnamedField: 989. agora é
     uma constante e se refere a uma string constante.  (Contribuição de
     Serhiy Storchaka em bpo-38650(5).)

   * A estrutura ‘PyGC_Head’ agora é opaca.  Ela só é definida na API C
     interna (‘pycore_gc.h’).  (Contribuição de Victor Stinner em
     bpo-40241(6).)

   * ‘Py_UNICODE_COPY’, ‘Py_UNICODE_FILL’, , ‘PyUnicode_WSTR_LENGTH’,
     ‘PyUnicode_FromUnicode()’, ‘PyUnicode_AsUnicode()’,
     ‘_PyUnicode_AsUnicode’ e ‘PyUnicode_AsUnicodeAndSize()’ estão
     marcadas como descontinuadas no C. Elas foram descontinuadas pela
     PEP 393(7) desde Python 3.3.  (Contribuição de Inada Naoki em
     bpo-36346(8).)

   * A função *note Py_FatalError(): 98a. é substituída por uma macro
     que registra automaticamente o nome da função atual, a menos que a
     macro ‘Py_LIMITED_API’ seja definida.  (Contribuição de Victor
     Stinner em bpo-39882(9).)

   * O protocolo vectorcall agora exige que o chamador passe apenas
     strings como nomes de argumentos.  (Veja bpo-37540(10) para mais
     informações.)

   * Os detalhes de implementação de uma série de macros e funções agora
     estão ocultos:

        * A macro *note PyObject_IS_GC(): 98b. foi convertida para uma
          função.

        * A macro ‘PyObject_NEW()’ se torna um apelido para a macro
          *note PyObject_New: 98c. e a macro ‘PyObject_NEW_VAR()’ se
          torna um apelido para a macro *note PyObject_NewVar: 98d.
          Elas não acessam mais diretamente o membro *note
          PyTypeObject.tp_basicsize: 98e.

        * A macro ‘PyObject_GET_WEAKREFS_LISTPTR()’ foi convertida para
          uma função: a macro acessava diretamente o membro *note
          PyTypeObject.tp_weaklistoffset: 98f.

        * A macro *note PyObject_CheckBuffer(): 398. foi convertida para
          uma função: a macro acessava diretamente o membro *note
          PyTypeObject.tp_as_buffer: 990.

        * *note PyIndex_Check(): 991. está agora declarada como uma
          função “opaca” para ocultar detalhes da implementação:
          removida a macro ‘PyIndex_Check()’.  A macro acessava
          diretamente o membro *note PyTypeObject.tp_as_number: 992.

     (Veja bpo-40170(11) para mais detalhes.)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0523/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38500

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39984

   (4) https://bugs.python.org/issue?@action=redirect&bpo=8901

   (5) https://bugs.python.org/issue?@action=redirect&bpo=38650

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40241

   (7) https://peps.python.org/pep-0393/

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36346

   (9) https://bugs.python.org/issue?@action=redirect&bpo=39882

   (10) https://bugs.python.org/issue?@action=redirect&bpo=37540

   (11) https://bugs.python.org/issue?@action=redirect&bpo=40170


File: python.info,  Node: Removidos<8>,  Prev: Portando para Python 3 9<2>,  Up: Alterações na API C<9>

1.5.12.3 Removidos
..................

   * Excluídas as macros ‘PyFPE_START_PROTECT()’ e ‘PyFPE_END_PROTECT()’
     de ‘pyfpe.h’ da API C limitada.  (Contribuição por Victor Stinner
     em bpo-38835(1).)

   * O slot ‘tp_print’ de *note PyTypeObject: 994. foi removido.  Ele
     era usado para imprimir objetos em arquivos no Python 2.7 e
     anteriores.  Desde Python 3.0, ele era ignorado e não utilizado.
     (Contribuição de Jeroen Demeyer em bpo-36974(2).)

   * Alterações na API C limitada (se a macro ‘Py_LIMITED_API’ estiver
     definida):

        * Excluídas as seguintes funções da API C limitada:

             * ‘PyThreadState_DeleteCurrent()’ (Contribuição de Joannah
               Nanjekye em bpo-37878(3).)

             * ‘_Py_CheckRecursionLimit’

             * ‘_Py_NewReference()’

             * ‘_Py_ForgetReference()’

             * ‘_PyTraceMalloc_NewReference()’

             * ‘_Py_GetRefTotal()’

             * O mecanismo trashcan que nunca funcionou na API C
               limitada.

             * ‘PyTrash_UNWIND_LEVEL’

             * ‘Py_TRASHCAN_BEGIN_CONDITION’

             * ‘Py_TRASHCAN_BEGIN’

             * ‘Py_TRASHCAN_END’

             * ‘Py_TRASHCAN_SAFE_BEGIN’

             * ‘Py_TRASHCAN_SAFE_END’

        * Movidas as seguintes funções e definições para a API C
          interna:

             * ‘_PyDebug_PrintTotalRefs()’

             * ‘_Py_PrintReferences()’

             * ‘_Py_PrintReferenceAddresses()’

             * ‘_Py_tracemalloc_config’

             * ‘_Py_AddToAllObjects()’ (específico para construção de
               ‘Py_TRACE_REFS’)

     (Contribuição de Victor Stinner em bpo-38644(4) e bpo-39542(5).)

   * Removido o gancho ‘_PyRuntime.getframe’ e removida a macro
     ‘_PyThreadState_GetFrame’ que era um alias para
     ‘_PyRuntime.getframe’.  Eles eram os únicos expostos pela API C
     interna.  Removido também o tipo ‘PyThreadFrameGetter’.
     (Contribuição de Victor Stinner em bpo-39946(6).)

   * Removidas as funções a seguir da API C. Chame *note PyGC_Collect():
     995. explicitamente para limpar todas as listas livres.
     (Contribuição de Inada Naoki e Victor Stinner em bpo-37340(7),
     bpo-38896(8) e bpo-40428(9).)

        * ‘PyAsyncGen_ClearFreeLists()’

        * ‘PyContext_ClearFreeList()’

        * ‘PyDict_ClearFreeList()’

        * ‘PyFloat_ClearFreeList()’

        * ‘PyFrame_ClearFreeList()’

        * ‘PyList_ClearFreeList()’

        * ‘PyMethod_ClearFreeList()’ e ‘PyCFunction_ClearFreeList()’: as
          listas livres de objetos de método vinculado foram removidas.

        * ‘PySet_ClearFreeList()’: a definição de lista livres foi
          removida no Python 3.4.

        * ‘PyTuple_ClearFreeList()’

        * ‘PyUnicode_ClearFreeList()’: a lista livre de Unicode foi
          removida no Python 3.3.

   * Removida a função ‘_PyUnicode_ClearStaticStrings()’.  (Contribuição
     de Victor Stinner em bpo-39465(10).)

   * Removido ‘Py_UNICODE_MATCH’.  Ele foi descontinuado por PEP 393(11)
     e quebrado desde o Python 3.3.  A função *note
     PyUnicode_Tailmatch(): 8bd. pode ser usada em seu lugar.
     (Contribuição de Inada Naoki em bpo-36346(12).)

   * Limpados os arquivos de cabeçalho de interfaces definidas, mas sem
     implementação.  Os símbolos públicos da API sendo removidos são:
     ‘_PyBytes_InsertThousandsGroupingLocale’,
     ‘_PyBytes_InsertThousandsGrouping’, ‘_Py_InitializeFromArgs’,
     ‘_Py_InitializeFromWideArgs’, ‘_PyFloat_Repr’, ‘_PyFloat_Digits’,
     ‘_PyFloat_DigitsInit’, ‘PyFrame_ExtendStack’,
     ‘_PyAIterWrapper_Type’, ‘PyNullImporter_Type’, ‘PyCmpWrapper_Type’,
     ‘PySortWrapper_Type’, ‘PyNoArgsFunction’.  (Contribuição de Pablo
     Galindo Salgado em bpo-39372(13).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38835

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36974

   (3) https://bugs.python.org/issue?@action=redirect&bpo=37878

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38644

   (5) https://bugs.python.org/issue?@action=redirect&bpo=39542

   (6) https://bugs.python.org/issue?@action=redirect&bpo=39946

   (7) https://bugs.python.org/issue?@action=redirect&bpo=37340

   (8) https://bugs.python.org/issue?@action=redirect&bpo=38896

   (9) https://bugs.python.org/issue?@action=redirect&bpo=40428

   (10) https://bugs.python.org/issue?@action=redirect&bpo=39465

   (11) https://peps.python.org/pep-0393/

   (12) https://bugs.python.org/issue?@action=redirect&bpo=36346

   (13) https://bugs.python.org/issue?@action=redirect&bpo=39372


File: python.info,  Node: Alterações notáveis no Python 3 9 1,  Next: Alterações notáveis no Python 3 9 2,  Prev: Alterações na API C<9>,  Up: O que há de novo no Python 3 9

1.5.13 Alterações notáveis no Python 3.9.1
------------------------------------------

* Menu:

* typing: typing<7>.
* Suporte a macOS 11.0 (Big Sur) e Apple Silicon Mac: Suporte a macOS 11 0 Big Sur e Apple Silicon Mac.


File: python.info,  Node: typing<7>,  Next: Suporte a macOS 11 0 Big Sur e Apple Silicon Mac,  Up: Alterações notáveis no Python 3 9 1

1.5.13.1 typing
...............

O comportamento de *note typing.Literal: 858. foi alterado para ficar em
conformidade com a PEP 586(1) e para corresponder ao comportamento de
verificadores de tipo estático especificados na PEP.

  1. ‘Literal’ agora elimina a duplicação de parâmetros.

  2. Comparações de igualdade entre objetos ‘Literal’ agora são
     independentes da ordem.

  3. Comparações de ‘Literal’ agora respeitam os tipos.  Por exemplo,
     ‘Literal[0] == Literal[False]’ avaliava anteriormente como ‘True’.
     Agora é ‘False’.  Para oferecer suporte a essa mudança, o cache de
     tipo usado internamente agora oferece suporte a tipos de
     diferenciação.

  4. Objetos ‘Literal’ agora irão levantar uma exceção *note TypeError:
     2c3. durante as comparações de igualdade se algum de seus
     parâmetros não for *note hasheável: 610.  Observe que declarar
     ‘Literal’ com parâmetros mutáveis não gerará um erro:

          >>> from typing import Literal
          >>> Literal[{0}]
          >>> Literal[{0}] == Literal[{False}]
          Traceback (most recent call last):
            File "<stdin>", line 1, in <module>
          TypeError: unhashable type: 'set'

(Contribuição de Yurii Karabas em bpo-42345(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0586/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42345


File: python.info,  Node: Suporte a macOS 11 0 Big Sur e Apple Silicon Mac,  Prev: typing<7>,  Up: Alterações notáveis no Python 3 9 1

1.5.13.2 Suporte a macOS 11.0 (Big Sur) e Apple Silicon Mac
...........................................................

A partir do 3.9.1, o Python agora oferece suporte total à construção e
execução no macOS 11.0 (Big Sur) e no Apple Silicon Macs (baseado na
arquitetura ‘ARM64’).  Uma nova variante de compilação universal,
‘universal2’, está agora disponível para suportar nativamente ambos
‘ARM64’ e ‘Intel 64’ em um conjunto de executáveis.  Os binários também
podem ser construídos em versões atuais do macOS para serem implantados
em uma variedade de versões mais antigas do macOS (testado para 10.9),
enquanto algumas funções e opções do sistema operacional mais recentes
estão disponíveis condicionalmente com base na versão do sistema
operacional em uso no tempo de execução (“ligação fraca”)

(Contribuição de Ronald Oussoren e Lawrence D’Anna em bpo-41100(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41100


File: python.info,  Node: Alterações notáveis no Python 3 9 2,  Next: Alterações notáveis no Python 3 9 3,  Prev: Alterações notáveis no Python 3 9 1,  Up: O que há de novo no Python 3 9

1.5.14 Alterações notáveis no Python 3.9.2
------------------------------------------

* Menu:

* collections.abc: collections abc<2>.
* urllib.parse: urllib parse<2>.


File: python.info,  Node: collections abc<2>,  Next: urllib parse<2>,  Up: Alterações notáveis no Python 3 9 2

1.5.14.1 collections.abc
........................

*note collections.abc.Callable: 7ec. genérica agora nivela os parâmetros
de tipo, semelhante ao que *note typing.Callable: 7c6. faz atualmente.
Isso significa que ‘collections.abc.Callable[[int, str], str]’ terá
‘__args__’ de ‘(int, str, str)’; anteriormente era ‘([int, str], str)’.
Para permitir esta mudança, *note types.GenericAlias: 7ed. agora pode
ter uma subclasse, e uma subclasse será retornada ao subscrever o tipo
‘Collections.abc.Callable’.  O código que acessa os argumentos via *note
typing.get_args(): 2ed. ou ‘__args__’ precisa levar em conta esta
mudança.  Um *note DeprecationWarning: 1a5. pode ser emitido para formas
inválidas de parametrização ‘Collections.abc.Callable’ que pode ter
passado silenciosamente no Python 3.9.1.  Esta *note DeprecationWarning:
1a5. se tornará uma *note TypeError: 2c3. no Python 3.10.  (Contribuição
de Ken Jin em bpo-42195(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42195


File: python.info,  Node: urllib parse<2>,  Prev: collections abc<2>,  Up: Alterações notáveis no Python 3 9 2

1.5.14.2 urllib.parse
.....................

Versões anteriores do Python permitiam o uso de ‘;’ e ‘&’ como
separadores de parâmetros de consulta nas funções *note
urllib.parse.parse_qs(): 27a. e *note urllib.parse.parse_qsl(): 279.
Devido a questões de segurança, e em conformidade com as recomendações
mais recentes do W3C, isso foi alterado para permitir apenas uma única
chave separadora, com ‘&’ como padrão.  Esta mudança também afeta as
funções ‘cgi.parse()’ e ‘cgi.parse_multipart()’ já que elas usam as
funções afetadas internamente.  Para obter mais detalhes, consulte sua
respectiva documentação.  (Contribuição de Adam Goldschmidt, Senthil
Kumaran e Ken Jin em bpo-42967(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42967


File: python.info,  Node: Alterações notáveis no Python 3 9 3,  Next: Alterações notáveis no Python 3 9 5,  Prev: Alterações notáveis no Python 3 9 2,  Up: O que há de novo no Python 3 9

1.5.15 Alterações notáveis no Python 3.9.3
------------------------------------------

Uma correção de segurança altera o comportamento *note ftplib.FTP: 900.
para não confiar no endereço IPv4 enviado do servidor remoto ao
configurar um canal de dados passivo.  Em vez disso, reutilizamos o
endereço IP do servidor ftp.  Para códigos incomuns que requerem o
comportamento antigo, defina um atributo
‘trust_server_pasv_ipv4_address’ em sua instância de FTP para ‘True’.
(Veja gh-87451(1))

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/87451


File: python.info,  Node: Alterações notáveis no Python 3 9 5,  Next: Recursos de segurança notáveis no 3 9 14,  Prev: Alterações notáveis no Python 3 9 3,  Up: O que há de novo no Python 3 9

1.5.16 Alterações notáveis no Python 3.9.5
------------------------------------------

* Menu:

* urllib.parse: urllib parse<3>.


File: python.info,  Node: urllib parse<3>,  Up: Alterações notáveis no Python 3 9 5

1.5.16.1 urllib.parse
.....................

A presença de caracteres de nova linha ou tab em partes de um URL
permite algumas formas de ataques.  Seguindo a especificação WHATWG que
atualiza RFC 3986(1), nova linha ASCII ‘\n’, ‘\r’ e os caracteres de
tabulação ‘\t’ são retirados da URL pelo analisador sintático em *note
urllib.parse: 10a. impedindo tais ataques.  Os caracteres de remoção são
controlados por uma nova variável de nível de módulo
‘urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE’.  (Veja gh-88048(2))

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc3986.html

   (2) https://github.com/python/cpython/issues/88048


File: python.info,  Node: Recursos de segurança notáveis no 3 9 14,  Next: Alterações notáveis no 3 9 17,  Prev: Alterações notáveis no Python 3 9 5,  Up: O que há de novo no Python 3 9

1.5.17 Recursos de segurança notáveis no 3.9.14
-----------------------------------------------

Converter entre *note int: 257. e *note str: 44c. em bases diferentes de
2 (binário), 4, 8 (octal), 16 (hexadecimal) ou 32 como base 10 (decimal)
agora levanta uma exceção *note ValueError: 202. se o número de dígitos
em forma de string estiver acima de um limite para evitar possíveis
ataques de negação de serviço devido à complexidade algorítmica.  Esta é
uma mitigação para CVE 2020-10735(1).  Este limite pode ser configurado
ou desabilitado por variável de ambiente, sinalizador de linha de
comando ou APIs de *note sys: d9.  Veja a documentação de *note
limitação de comprimento de conversão de string inteira: 5f5.  O limite
padrão é de 4300 dígitos em forma de string.

   ---------- Footnotes ----------

   (1) https://www.cve.org/CVERecord?id=CVE-2020-10735


File: python.info,  Node: Alterações notáveis no 3 9 17,  Prev: Recursos de segurança notáveis no 3 9 14,  Up: O que há de novo no Python 3 9

1.5.18 Alterações notáveis no 3.9.17
------------------------------------

* Menu:

* tarfile: tarfile<4>.


File: python.info,  Node: tarfile<4>,  Up: Alterações notáveis no 3 9 17

1.5.18.1 tarfile
................

   * Os métodos de extração em *note tarfile: de. e *note
     shutil.unpack_archive(): 46b, têm um novo argumento 'filter' que
     permite limitar recursos do tar que podem ser surpreendentes ou
     perigosos, como criar arquivos fora do diretório de destino.  Veja
     *note Filtros de extração: 46c. para detalhes.  No Python 3.12,
     usar sem o argumento 'filter' mostrará um *note DeprecationWarning:
     1a5.  No Python 3.14, o padrão mudará para ‘'data'’.  (Contribuição
     de Petr Viktorin em PEP 706(1).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0706/


File: python.info,  Node: O que há de novo no Python 3 8,  Next: O que há de novo no Python 3 7,  Prev: O que há de novo no Python 3 9,  Up: O que há de novo no Python

1.6 O que há de novo no Python 3.8
==================================


Editor: Raymond Hettinger

Este artigo explica os novos recursos no Python 3.8, em comparação com
3.7.  Python 3.8 foi lançado em 14 de outubro de 2019.  Veja *note
changelog: 13c. para uma lista completa de mudanças.

* Menu:

* Resumo – Destaques da versão: Resumo – Destaques da versão<6>.
* Novas funcionalidades: Novas funcionalidades<11>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<6>.
* Novos módulos: Novos módulos<6>.
* Módulos melhorados: Módulos melhorados<6>.
* Otimizações: Otimizações<6>.
* Mudanças a construções e API C::
* Descontinuados: Descontinuados<8>.
* Remoção de APIs e recursos::
* Portando para o Python 3.8: Portando para o Python 3 8.
* Alterações notáveis no Python 3.8.1: Alterações notáveis no Python 3 8 1.
* Alterações notáveis no Python 3.8.2: Alterações notáveis no Python 3 8 2.
* Alterações notáveis no Python 3.8.3: Alterações notáveis no Python 3 8 3.
* Alterações notáveis no Python 3.8.8: Alterações notáveis no Python 3 8 8.
* Alterações notáveis no Python 3.8.9: Alterações notáveis no Python 3 8 9.
* Alterações notáveis no Python 3.8.10: Alterações notáveis no Python 3 8 10.
* Alterações notáveis no Python 3.8.10: Alterações notáveis no Python 3 8 10<2>.
* Alterações notáveis no Python 3.8.12: Alterações notáveis no Python 3 8 12.
* Recursos de segurança notáveis no 3.8.14: Recursos de segurança notáveis no 3 8 14.
* Alterações notáveis no 3.8.17: Alterações notáveis no 3 8 17.


File: python.info,  Node: Resumo – Destaques da versão<6>,  Next: Novas funcionalidades<11>,  Up: O que há de novo no Python 3 8

1.6.1 Resumo – Destaques da versão
----------------------------------


File: python.info,  Node: Novas funcionalidades<11>,  Next: Outras mudanças na linguagem<6>,  Prev: Resumo – Destaques da versão<6>,  Up: O que há de novo no Python 3 8

1.6.2 Novas funcionalidades
---------------------------

* Menu:

* Expressões de atribuição::
* Parâmetros somente-posicionais::
* Cache do sistema de arquivos paralelo para arquivos de bytecode compilados::
* A compilação de depuração usa a mesma ABI da compilação de lançamento::
* O suporte a f-strings = para expressões de auto-documentação e depuração::
* PEP 578; Ganchos de auditoria em tempo de execução Python: PEP 578 Ganchos de auditoria em tempo de execução Python.
* PEP 587; Configuração de Inicialização do Python: PEP 587 Configuração de Inicialização do Python.
* PEP 590; Vectorcall; um protocolo de chamada rápida para CPython: PEP 590 Vectorcall um protocolo de chamada rápida para CPython.
* Protocolo de Pickle 5 com buffers de dados fora da banda::


File: python.info,  Node: Expressões de atribuição,  Next: Parâmetros somente-posicionais,  Up: Novas funcionalidades<11>

1.6.2.1 Expressões de atribuição
................................

Existe uma nova sintaxe ‘:=’ que atribui valores a variáveis como parte
de uma expressão maior.  É carinhosamente conhecido como “o operador
morsa” (“the walrus operator”, em inglês) devido à sua semelhança com os
olhos e presas de uma morsa(1)

Neste exemplo, a expressão de atribuição ajuda a evitar a chamada de
*note len(): 62e. duas vezes:

     if (n := len(a)) > 10:
         print(f"List is too long ({n} elements, expected <= 10)")

Um benefício semelhante surge durante a correspondência de expressões
regulares, onde os objetos de correspondência são necessários duas
vezes, uma vez para testar se ocorreu uma correspondência e outra para
extrair um subgrupo:

     discount = 0.0
     if (mo := re.search(r'(\d+)% discount', advertisement)):
         discount = float(mo.group(1)) / 100.0

O operador também é útil com loops while que calculam um valor para
testar a finalização do loop e, em seguida, precisam desse mesmo valor
novamente no corpo do loop:

     # Loop over fixed length blocks
     while (block := f.read(256)) != '':
         process(block)

Outro caso de uso motivador surge em compreensões de lista em que um
valor calculado em uma condição de filtragem também é necessário no
corpo da expressão:

     [clean_name.title() for name in names
      if (clean_name := normalize('NFC', name)) in allowed_names]

Tente limitar o uso do operador morsa para limpar os casos que reduzem a
complexidade e melhoram a legibilidade.

Consulte PEP 572(2) para uma descrição completa.

(Contribuição de Emily Morehouse em bpo-35224(3).)

   ---------- Footnotes ----------

   (1) 
https://en.wikipedia.org/wiki/Walrus#/media/File:Pacific_Walrus_-_Bull_(8247646168).jpg

   (2) https://peps.python.org/pep-0572/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35224


File: python.info,  Node: Parâmetros somente-posicionais,  Next: Cache do sistema de arquivos paralelo para arquivos de bytecode compilados,  Prev: Expressões de atribuição,  Up: Novas funcionalidades<11>

1.6.2.2 Parâmetros somente-posicionais
......................................

Existe uma nova sintaxe de parâmetro de função ‘/’ para indicar que
alguns parâmetros de função devem ser especificados posicionalmente e
não podem ser usados como argumentos nomeados.  Esta é a mesma notação
mostrada por ‘help()’ para funções C anotadas com a ferramenta Argument
Clinic(1) de Larry Hastings.

No exemplo a seguir, os parâmetros 'a' e 'b' são apenas posicionais,
enquanto 'c' ou 'd' podem ser posicionais ou nomeados e 'e' ou 'f' são
obrigatoriamente nomeados:

     def f(a, b, /, c, d, *, e, f):
         print(a, b, c, d, e, f)

A seguir, uma chamada válida:

     f(10, 20, 30, d=40, e=50, f=60)

Porém, essas chamadas são inválidas:

     f(10, b=20, c=30, d=40, e=50, f=60)   # b não pode ser um argumento nomeado
     f(10, 20, 30, 40, 50, f=60)           # e deve ser um argumento nomeado

Um caso de uso para essa notação é que ele permite que funções puras do
Python emulem completamente os comportamentos das funções codificadas em
C existentes.  Por exemplo, a função embutida *note divmod(): 9a9. não
aceita argumentos nomeados:

     def divmod(a, b, /):
         "Emula a função embutida divmod()"
         return (a // b, a % b)

Outro caso de uso é impedir argumentos nomeados quando o nome do
parâmetro não for útil.  Por exemplo, a função embutida *note len():
62e. possui a assinatura ‘len(obj, /)’.  Isso exclui chamadas estranhas,
como:

     len(obj='hello')  # O argumento nomeado "obj" prejudica a legibilidade

Um benefício adicional de marcar um parâmetro como somente posicional é
que ele permite que o nome do parâmetro seja alterado no futuro sem
risco de quebrar o código do cliente.  Por exemplo, no módulo *note
statistics: d2, o nome do parâmetro 'dist' pode ser alterado no futuro.
Isso foi possível com a seguinte especificação de função:

     def quantiles(dist, /, *, n=4, method='exclusive')
         ...

Como os parâmetros à esquerda de ‘/’ não são expostos como possíveis
palavras-chave, os nomes dos parâmetros permanecem disponíveis para uso
em ‘**kwargs’:

     >>> def f(a, b, /, **kwargs):
     ...     print(a, b, kwargs)
     ...
     >>> f(10, 20, a=1, b=2, c=3)         # a e b são usados de duas formas
     10 20 {'a': 1, 'b': 2, 'c': 3}

Isso simplifica bastante a implementação de funções e métodos que
precisam aceitar argumentos nomeados arbitrários.  Por exemplo, aqui
está um trecho do código no módulo *note collections: 1d.:

     class Counter(dict):

         def __init__(self, iterable=None, /, **kwds):
             # Observe que "iterable" é um possível argumento nomeado

Consulte a PEP 570(2) para uma descrição completa.

(Contribuição de Pablo Galindo em bpo-36540(3).)

   ---------- Footnotes ----------

   (1) https://devguide.python.org/development-tools/clinic/

   (2) https://peps.python.org/pep-0570/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36540


File: python.info,  Node: Cache do sistema de arquivos paralelo para arquivos de bytecode compilados,  Next: A compilação de depuração usa a mesma ABI da compilação de lançamento,  Prev: Parâmetros somente-posicionais,  Up: Novas funcionalidades<11>

1.6.2.3 Cache do sistema de arquivos paralelo para arquivos de bytecode compilados
..................................................................................

A nova configuração *note PYTHONPYCACHEPREFIX: 9ab. (também disponível
como *note -X: 176. ‘pycache_prefix’) configura o cache implícito de
bytecode para usar uma árvore paralela separada do sistema de arquivos,
em vez dos subdiretórios padrão ‘__pycache__’ dentro cada diretório
fonte.

O local do cache é relatado em *note sys.pycache_prefix: 9ac. (*note
None: 675. indica o local padrão nos subdiretórios ‘__pycache__’).

(Contribuição de Carl Meyer em bpo-33499(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33499


File: python.info,  Node: A compilação de depuração usa a mesma ABI da compilação de lançamento,  Next: O suporte a f-strings = para expressões de auto-documentação e depuração,  Prev: Cache do sistema de arquivos paralelo para arquivos de bytecode compilados,  Up: Novas funcionalidades<11>

1.6.2.4 A compilação de depuração usa a mesma ABI da compilação de lançamento
.............................................................................

Agora, o Python usa a mesma ABI, seja ele compilado no modo de
lançamento ou depuração.  No Unix, quando o Python é compilado no modo
de depuração, agora é possível carregar extensões C compiladas no modo
de lançamento e extensões C compiladas usando a ABI estável.

Compilações de lançamento e *note compilações de depuração: 1f9. agora
são compatíveis com ABI: definir a macro ‘Py_DEBUG’ não implica mais a
macro ‘Py_TRACE_REFS’, que introduz a única incompatibilidade ABI. A
macro ‘Py_TRACE_REFS’, que adiciona a função *note sys.getobjects():
427. e a variável de ambiente *note PYTHONDUMPREFS: 9ae, pode ser
configurada usando a nova opção de compilação *note ./configure
-with-trace-refs: 395.  (Contribuição de Victor Stinner em
bpo-36465(1).)

No Unix, as extensões C não estão mais vinculadas ao libpython, exceto
no Android e Cygwin.  Agora é possível que um Python vinculado
estaticamente carregue uma extensão C criada usando uma biblioteca
compartilhada Python.  (Contribuição de Victor Stinner em bpo-21536(2).)

No Unix, quando o Python é compilado no modo de depuração, a importação
agora também procura extensões C compiladas no modo de lançamento e
extensões C compiladas com a ABI estável.  (Contribuição de Victor
Stinner em bpo-36722(3).)

Para incorporar o Python em uma aplicação, uma nova opção ‘--embed’ deve
ser passada para ‘python3-config --libs --embed’ para obter o
‘-lpython3.8’ (vincula a aplicação ao libpython).  Para dar suporte a
3.8 e versões mais antigas, tente ‘python3-config --libs --embed’
primeiro e use como fallback para ‘python3-config --libs’ (sem
‘--embed’) se o comando anterior falhar.

Adicione um módulo pkg-config ‘python-3.8-embed’ para incorporar o
Python em uma aplicação: ‘pkg-config python-3.8-embed --libs’ inclui
‘-lpython3.8’.  Para suportar tanto o 3.8 quanto o anterior, tente
‘pkg-config python-X.Y-embed --libs’ primeiro e use como fallback
‘pkg-config python-X.Y --libs’ (sem ‘--embed’) se o comando anterior
falhar (substitua ‘X.Y’ pela versão do Python).

Por outro lado, ‘pkg-config python3.8 --libs’ não contém mais
‘-lpython3.8’.  As extensões C não devem estar vinculadas ao libpython
(exceto no Android e Cygwin, cujos casos são tratados pelo script); essa
alteração é retroativamente incompatível de propósito.  (Contribuição de
Victor Stinner em bpo-36721(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36465

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21536

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36722

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36721


File: python.info,  Node: O suporte a f-strings = para expressões de auto-documentação e depuração,  Next: PEP 578 Ganchos de auditoria em tempo de execução Python,  Prev: A compilação de depuração usa a mesma ABI da compilação de lançamento,  Up: Novas funcionalidades<11>

1.6.2.5 O suporte a f-strings ‘=’ para expressões de auto-documentação e depuração
..................................................................................

Adicionado um especificador ‘=’ para *note f-string: 436.s.  Uma
f-string como ‘f'{expr=}'’ será expandida para o texto da expressão, um
sinal de igual e, em seguida, a representação da expressão avaliada.
Por exemplo:

     >>> user = 'eric_idle'
     >>> member_since = date(1975, 7, 31)
     >>> f'{user=} {member_since=}'
     "user='eric_idle' member_since=datetime.date(1975, 7, 31)"

O habitual *note f-string especificadores de formato: 9b1. permite mais
controle sobre como o resultado da expressão é exibido:

     >>> delta = date.today() - member_since
     >>> f'{user=!s}  {delta.days=:,d}'
     'user=eric_idle  delta.days=16,075'

O especificador ‘=’ exibirá toda a expressão para que os cálculos possam
ser mostrados:

     >>> print(f'{theta=}  {cos(radians(theta))=:.3f}')
     theta=30  cos(radians(theta))=0.866

(Contribuição de Eric V. Smith e Larry Hastings em bpo-36817(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36817


File: python.info,  Node: PEP 578 Ganchos de auditoria em tempo de execução Python,  Next: PEP 587 Configuração de Inicialização do Python,  Prev: O suporte a f-strings = para expressões de auto-documentação e depuração,  Up: Novas funcionalidades<11>

1.6.2.6 PEP 578: Ganchos de auditoria em tempo de execução Python
.................................................................

O PEP adiciona um Gancho de Auditoria e um Gancho Aberto Verificado.
Ambos estão disponíveis no Python e no código nativo, permitindo que
aplicações e estruturas escritas em código Python puro aproveitem as
notificações extras, além de permitir que incorporadores ou
administradores de sistema implementem versões do Python onde a
auditoria está sempre ativada.

Veja PEP 578(1) para mais detalhes.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0578/


File: python.info,  Node: PEP 587 Configuração de Inicialização do Python,  Next: PEP 590 Vectorcall um protocolo de chamada rápida para CPython,  Prev: PEP 578 Ganchos de auditoria em tempo de execução Python,  Up: Novas funcionalidades<11>

1.6.2.7 PEP 587: Configuração de Inicialização do Python
........................................................

O PEP 587(1) adiciona uma nova API C para configurar a Inicialização do
Python, fornecendo um controle mais preciso de toda a configuração e
melhores relatórios de erros.

Novas estruturas:

   * *note PyConfig: 3a6.

   * *note PyPreConfig: 9b4.

   * *note PyStatus: 9b5.

   * *note PyWideStringList: 9b6.

Novas Funções:

   * *note PyConfig_Clear(): 9b7.

   * *note PyConfig_InitIsolatedConfig(): 9b8.

   * *note PyConfig_InitPythonConfig(): 9b9.

   * *note PyConfig_Read(): 790.

   * *note PyConfig_SetArgv(): 9ba.

   * *note PyConfig_SetBytesArgv(): 9bb.

   * *note PyConfig_SetBytesString(): 9bc.

   * *note PyConfig_SetString(): 9bd.

   * *note PyPreConfig_InitIsolatedConfig(): 9be.

   * *note PyPreConfig_InitPythonConfig(): 9bf.

   * *note PyStatus_Error(): 9c0.

   * *note PyStatus_Exception(): 9c1.

   * *note PyStatus_Exit(): 9c2.

   * *note PyStatus_IsError(): 9c3.

   * *note PyStatus_IsExit(): 9c4.

   * *note PyStatus_NoMemory(): 9c5.

   * *note PyStatus_Ok(): 9c6.

   * *note PyWideStringList_Append(): 9c7.

   * *note PyWideStringList_Insert(): 9c8.

   * *note Py_BytesMain(): 9c9.

   * *note Py_ExitStatusException(): 9ca.

   * *note Py_InitializeFromConfig(): 3c5.

   * *note Py_PreInitialize(): 3eb.

   * *note Py_PreInitializeFromArgs(): 9cb.

   * *note Py_PreInitializeFromBytesArgs(): 9cc.

   * *note Py_RunMain(): 9cd.

Esse PEP também adiciona os campos ‘_PyRuntimeState.preconfig’ (tipo
*note PyPreConfig: 9b4.) e ‘PyInterpreterState.config’ (tipo *note
PyConfig: 3a6.) campos a essas estruturas internas.
‘PyInterpreterState.config’ se torna a nova configuração de referência,
substituindo variáveis de configuração global e outras variáveis
privadas.

Veja *note Configuração de Inicialização do Python: 3a7. para a
documentação.

Consulte a PEP 587(2) para uma descrição completa.

(Contribuição de Victor Stinner em bpo-36763(3).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0587/

   (2) https://peps.python.org/pep-0587/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36763


File: python.info,  Node: PEP 590 Vectorcall um protocolo de chamada rápida para CPython,  Next: Protocolo de Pickle 5 com buffers de dados fora da banda,  Prev: PEP 587 Configuração de Inicialização do Python,  Up: Novas funcionalidades<11>

1.6.2.8 PEP 590: Vectorcall: um protocolo de chamada rápida para CPython
........................................................................

*note O protocolo vectorcall: 552. é adicionado à API Python/C. Ele visa
formalizar as otimizações existentes que já foram feitas para várias
classes.  Qualquer *note tipo estático: 77f. que implemente um chamável
pode usar esse protocolo.

Atualmente, isso é provisório.  O objetivo é torná-lo totalmente público
no Python 3.9.

Consulte a PEP 590(1) para uma descrição completa.

(Contribuição de Jeroen Demeyer, Mark Shannon e Petr Viktorin em
bpo-36974(2).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0590/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36974


File: python.info,  Node: Protocolo de Pickle 5 com buffers de dados fora da banda,  Prev: PEP 590 Vectorcall um protocolo de chamada rápida para CPython,  Up: Novas funcionalidades<11>

1.6.2.9 Protocolo de Pickle 5 com buffers de dados fora da banda
................................................................

Quando *note pickle: a6. é usado para transferir grande quantidade de
dados entre processos Python, a fim de tirar proveito do processamento
com vários núcleos ou com várias máquinas, é importante otimizar a
transferência reduzindo cópias de memória e, possivelmente, aplicando
técnicas personalizadas, como como compactação dependente de dados.

O protocolo *note pickle: a6. 5 introduz suporte para buffers fora de
banda, onde dados compatíveis com a PEP 3118(1) podem ser transmitidos
separadamente do fluxo de pickle principal, a critério da camada de
comunicação.

Consulte a PEP 574(2) para uma descrição completa.

(Contribuição de Antoine Pitrou em bpo-36785(3).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3118/

   (2) https://peps.python.org/pep-0574/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36785


File: python.info,  Node: Outras mudanças na linguagem<6>,  Next: Novos módulos<6>,  Prev: Novas funcionalidades<11>,  Up: O que há de novo no Python 3 8

1.6.3 Outras mudanças na linguagem
----------------------------------

   * A instrução *note continue: 9d1. era ilegal na cláusula *note
     finally: 9d2. devido a um problema com a implementação.  No Python
     3.8, essa restrição foi levantada.  (Contribuição de Serhiy
     Storchaka em bpo-32489(1).)

   * Os tipos *note bool: 468, *note int: 257. e *note
     fractions.Fraction: 1e7. agora têm o método *note
     as_integer_ratio(): 9d3. como o encontrado em *note float: 2f7. e
     *note decimal.Decimal: 29d.  Esta pequena extensão da API torna
     possível escrever ‘numerator, denominator = x.as_integer_ratio()’ e
     fazer com que funcione em vários tipos numéricos.  (Contribuição de
     Lisa Roach em bpo-33073(2) e Raymond Hettinger em bpo-37819(3).)

   * Os construtores de *note int: 257, *note float: 2f7. e *note
     complex: 2f8. agora usarão o método especial *note __index__():
     71d, se disponível, e o método correspondente *note __int__(): 71c,
     *note __float__(): 9d4. ou *note __complex__(): 5e7. não está
     disponível.  (Contribuição de Serhiy Storchaka em bpo-20092(4).)

   * Adicionado suporte a escapes ‘\N{NAME}’ em *note expressões
     regulares: b9.:

          >>> notice = 'Copyright © 2019'
          >>> copyright_year_pattern = re.compile(r'\N{copyright sign}\s*(\d{4})')
          >>> int(copyright_year_pattern.search(notice).group(1))
          2019

     (Contribuição de Jonathan Eunice e Serhiy Storchaka em
     bpo-30688(5).)

   * Dict e dictviews agora são iteráveis em ordem de inserção reversa
     usando *note reversed(): 869.  (Contribuição de Rémi Lapeyre em
     bpo-33462(6).)

   * A sintaxe permitida para nomes de palavras-chave em chamadas de
     função foi ainda mais restrita.  Em particular, ‘f((keyword)=arg)’
     não é mais permitido.  Ele nunca teve a intenção de permitir mais
     do que um nome simples no lado esquerdo de um termo de atribuição
     de argumento nomeado.  (Contribuição de Benjamin Peterson em
     bpo-34641(7).)

   * O desempacotamento de iterável generalizado das instruções *note
     yield: 9d5. e *note return: 9d6. não requer mais parênteses.  Isso
     traz a sintaxe 'yield' e 'return' uma melhor concordância com a
     sintaxe de atribuição normal:

          >>> def parse(family):
                  lastname, *members = family.split()
                  return lastname.upper(), *members

          >>> parse('simpsons homer marge bart lisa maggie')
          ('SIMPSONS', 'homer', 'marge', 'bart', 'lisa', 'maggie')

     (Contribuição de David Cuthbert e Jordan Chapman em bpo-32117(8).)

   * Quando uma vírgula está faltando em código como ‘[(10, 20) (30,
     40)]’, o compilador exibe um *note SyntaxWarning: 466. com uma
     sugestão útil.  Isso melhora apenas tendo um *note TypeError: 2c3.
     indicando que a primeira tupla não era chamável.  (Contribuição de
     Serhiy Storchaka em bpo-15248(9).)

   * As operações aritméticas entre as subclasses de *note
     datetime.date: 1cd. ou *note datetime.datetime: 1cc. e *note
     datetime.timedelta: 9d7. agora retornam uma instância da subclasse,
     em vez da classe base.  Isso também afeta o tipo de retorno de
     operações cuja implementação (direta ou indiretamente) utiliza
     aritmética de *note datetime.timedelta: 9d7, como *note
     astimezone(): 9d8.  (Contribuição de Paul Ganssle em
     bpo-32417(10).)

   * Quando o interpretador Python é interrompido por Ctrl-C (SIGINT) e
     a exceção resultante *note KeyboardInterrupt: 9d9. não é capturada,
     o processo Python agora sai por meio de um sinal SIGINT ou com o
     código de saída correto, para que o processo de chamada possa
     detectar que foi encerrado devido a um Ctrl-C. Os shells no POSIX e
     Windows usam isso para finalizar corretamente os scripts em sessões
     interativas.  (Contribuição do Google via Gregory P. Smith em
     bpo-1054041(11).)

   * Alguns estilos avançados de programação requerem a atualização do
     objeto *note types.CodeType: 2df. para uma função existente.  Como
     os objetos código são imutáveis, um novo objeto código precisa ser
     criado, modelado no objeto código existente.  Com 19 parâmetros,
     isso foi um pouco tedioso.  Agora, o novo método ‘replace()’ torna
     possível criar um clone com alguns parâmetros alterados.

     Aqui está um exemplo que altera a função ‘Statistics.mean()’ para
     impedir que o parâmetro 'data' seja usado como argumento nomeado:

          >>> from statistics import mean
          >>> mean(data=[10, 20, 90])
          40
          >>> mean.__code__ = mean.__code__.replace(co_posonlyargcount=1)
          >>> mean(data=[10, 20, 90])
          Traceback (most recent call last):
            ...
          TypeError: mean() got some positional-only arguments passed as keyword arguments: 'data'

     (Contribuição de Victor Stinner em bpo-37032(12).)

   * Para números inteiros, a forma de três argumentos da função *note
     pow(): 9da. agora permite que o expoente seja negativo no caso em
     que a base é relativamente primária ao módulo.  Em seguida, calcula
     um inverso modular para a base quando o expoente é ‘-1’ e uma
     potência adequada desse inverso para outros expoentes negativos.
     Por exemplo, para calcular o inverso multiplicativo modular(13) de
     38 módulo 137, escreva:

          >>> pow(38, -1, 137)
          119
          >>> 119 * 38 % 137
          1

     Inversos modulares surgem na solução de equações diofantinas
     lineares(14).  Por exemplo, para encontrar soluções inteiras para
     ‘4258𝑥 + 147𝑦 = 369’, primeiro reescreva como ‘4258𝑥 ≡ 369 (mod
     147)’ e depois resolva:

          >>> x = 369 * pow(4258, -1, 147) % 147
          >>> y = (4258 * x - 369) // -147
          >>> 4258 * x + 147 * y
          369

     (Contribuição de Mark Dickinson em bpo-36027(15).)

   * As compreensões de dict foram sincronizadas com literais de dict,
     para que a chave seja computada primeiro e o valor em segundo:

          >>> # Compreensão de dicionário
          >>> cast = {input('role? '): input('actor? ') for i in range(2)}
          role? King Arthur
          actor? Chapman
          role? Black Knight
          actor? Cleese

          >>> # Literal de dicionário
          >>> cast = {input('role? '): input('actor? ')}
          role? Sir Robin
          actor? Eric Idle

     A ordem de execução garantida é útil nas expressões de atribuição,
     porque as variáveis atribuídas na expressão de chave estarão
     disponíveis na expressão de valor:

          >>> names = ['Martin von Löwis', 'Łukasz Langa', 'Walter Dörwald']
          >>> {(n := normalize('NFC', name)).casefold() : n for name in names}
          {'martin von löwis': 'Martin von Löwis',
           'łukasz langa': 'Łukasz Langa',
           'walter dörwald': 'Walter Dörwald'}

     (Contribuição de Jörn Heissler em bpo-35224(16).)

   * O método *note object.__reduce__(): 9db. agora pode retornar uma
     tupla de dois a seis elementos.  Anteriormente, o limite era cinco.
     O novo sexto elemento opcional é um chamável com uma assinatura
     ‘(obj, state)’.  Isso permite o controle direto sobre o
     comportamento de atualização de estado de um objeto específico.  Se
     não for 'None', este chamável terá prioridade sobre o método *note
     __setstate__(): 9dc. do objeto.  (Contribuição de Pierre Glaser e
     Olivier Grisel em bpo-35900(17).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32489

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33073

   (3) https://bugs.python.org/issue?@action=redirect&bpo=37819

   (4) https://bugs.python.org/issue?@action=redirect&bpo=20092

   (5) https://bugs.python.org/issue?@action=redirect&bpo=30688

   (6) https://bugs.python.org/issue?@action=redirect&bpo=33462

   (7) https://bugs.python.org/issue?@action=redirect&bpo=34641

   (8) https://bugs.python.org/issue?@action=redirect&bpo=32117

   (9) https://bugs.python.org/issue?@action=redirect&bpo=15248

   (10) https://bugs.python.org/issue?@action=redirect&bpo=32417

   (11) https://bugs.python.org/issue?@action=redirect&bpo=1054041

   (12) https://bugs.python.org/issue?@action=redirect&bpo=37032

   (13) https://en.wikipedia.org/wiki/Modular_multiplicative_inverse

   (14) https://en.wikipedia.org/wiki/Diophantine_equation

   (15) https://bugs.python.org/issue?@action=redirect&bpo=36027

   (16) https://bugs.python.org/issue?@action=redirect&bpo=35224

   (17) https://bugs.python.org/issue?@action=redirect&bpo=35900


File: python.info,  Node: Novos módulos<6>,  Next: Módulos melhorados<6>,  Prev: Outras mudanças na linguagem<6>,  Up: O que há de novo no Python 3 8

1.6.4 Novos módulos
-------------------

   * O novo módulo *note importlib.metadata: 7a. fornece suporte
     (provisório) para a leitura de metadados de pacotes de terceiros.
     Por exemplo, ele pode extrair o número da versão de um pacote
     instalado, a lista de pontos de entrada e muito mais:

          >>> # Note o exemplo a seguir requer que o pacote popular
          >>> # "requests" tenha sido instalado.
          >>>
          >>> from importlib.metadata import version, requires, files
          >>> version('requests')
          '2.22.0'
          >>> list(requires('requests'))
          ['chardet (<3.1.0,>=3.0.2)']
          >>> list(files('requests'))[:5]
          [PackagePath('requests-2.22.0.dist-info/INSTALLER'),
           PackagePath('requests-2.22.0.dist-info/LICENSE'),
           PackagePath('requests-2.22.0.dist-info/METADATA'),
           PackagePath('requests-2.22.0.dist-info/RECORD'),
           PackagePath('requests-2.22.0.dist-info/WHEEL')]

     (Contribuição de Barry Warsaw e Jason R. Coombs em bpo-34632(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34632


File: python.info,  Node: Módulos melhorados<6>,  Next: Otimizações<6>,  Prev: Novos módulos<6>,  Up: O que há de novo no Python 3 8

1.6.5 Módulos melhorados
------------------------

* Menu:

* ast: ast<3>.
* asyncio: asyncio<6>.
* builtins: builtins<2>.
* collections::
* cProfile::
* csv: csv<2>.
* curses: curses<3>.
* ctypes: ctypes<2>.
* datetime: datetime<3>.
* functools: functools<2>.
* gc: gc<3>.
* gettext::
* gzip: gzip<3>.
* IDLE e idlelib: IDLE e idlelib<4>.
* inspect: inspect<5>.
* io: io<3>.
* itertools: itertools<4>.
* json.tool: json tool.
* logging: logging<2>.
* math: math<5>.
* mmap: mmap<2>.
* multiprocessing: multiprocessing<3>.
* os: os<6>.
* os.path: os path<5>.
* pathlib: pathlib<7>.
* pickle::
* plistlib::
* pprint: pprint<3>.
* py_compile: py_compile<2>.
* shlex::
* shutil: shutil<4>.
* socket: socket<4>.
* ssl: ssl<4>.
* statistics: statistics<4>.
* sys: sys<7>.
* tarfile: tarfile<5>.
* threading: threading<4>.
* tokenize: tokenize<2>.
* tkinter: tkinter<4>.
* time: time<4>.
* typing: typing<8>.
* unicodedata: unicodedata<5>.
* unittest: unittest<6>.
* venv: venv<4>.
* weakref::
* xml: xml<4>.
* xmlrpc::


File: python.info,  Node: ast<3>,  Next: asyncio<6>,  Up: Módulos melhorados<6>

1.6.5.1 ast
...........

Os nós de AST agora têm os atributos ‘end_lineno’ e ‘end_col_offset’,
que fornecem a localização precisa do final do nó.  (Isso se aplica
apenas aos nós que possuem os atributos ‘lineno’ e ‘col_offset’.)

Nova função *note ast.get_source_segment(): 9e0. retorna o código-fonte
para um nó AST específico.

(Contribuição de Ivan Levkivskyi em bpo-33416(1).)

A função *note ast.parse(): 1a8. possui alguns novos sinalizadores:

   * ‘type_comments=True’ faz com que retorne o texto dos comentários de
     tipos de PEP 484(2) e PEP 526(3) associados a determinados nós AST;

   * ‘mode='func_type'’ pode ser usado para analisar “comentários do
     tipo de assinatura” do PEP 484(4) (retornados para nós AST de
     definição de função);

   * ‘feature_version=(3, N)’ permite especificar uma versão anterior do
     Python 3.  Por exemplo, ‘feature_version=(3, 4)’ tratará *note
     async: 732. e *note await: 1b9. como palavras não reservadas.

(Contribuição de Guido van Rossum em bpo-35766(5).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33416

   (2) https://peps.python.org/pep-0484/

   (3) https://peps.python.org/pep-0526/

   (4) https://peps.python.org/pep-0484/

   (5) https://bugs.python.org/issue?@action=redirect&bpo=35766


File: python.info,  Node: asyncio<6>,  Next: builtins<2>,  Prev: ast<3>,  Up: Módulos melhorados<6>

1.6.5.2 asyncio
...............

*note asyncio.run(): 47c. passou da API provisória para a estável.  Esta
função pode ser usada para executar uma *note corrotina: 491. e retornar
o resultado enquanto gerencia automaticamente o loop de eventos.  Por
exemplo:

     import asyncio

     async def main():
         await asyncio.sleep(0)
         return 42

     asyncio.run(main())

Isso é 'aproximadamente' equivalente a:

     import asyncio

     async def main():
         await asyncio.sleep(0)
         return 42

     loop = asyncio.new_event_loop()
     asyncio.set_event_loop(loop)
     try:
         loop.run_until_complete(main())
     finally:
         asyncio.set_event_loop(None)
         loop.close()

A implementação real é significativamente mais complexa.  Assim, *note
asyncio.run(): 47c. deve ser a maneira preferida de executar programas
assíncronos.

(Contribuição de Yury Selivanov em bpo-32314(1).)

A execução de ‘python -m asyncio’ lança um REPL nativo assíncrono.  Isso
permite a experimentação rápida de código que possui um nível superior
*note await: 1b9.  Não é mais necessário chamar diretamente
‘asyncio.run()’, o que geraria um novo loop de evento a cada chamada:

     $ python -m asyncio
     asyncio REPL 3.8.0
     Use "await" directly instead of "asyncio.run()".
     Type "help", "copyright", "credits" or "license" for more information.
     >>> import asyncio
     >>> await asyncio.sleep(10, result='hello')
     hello

(Contribuição de Yury Selivanov em bpo-37028(2).)

A exceção *note asyncio.CancelledError: 1b8. agora herda de *note
BaseException: 5bb. em vez de *note Exception: 9e2. e não mais herda de
*note concurrent.futures.CancelledError: 9e3.  (Contribuição de Yury
Selivanov em bpo-32528(3).)

No Windows, o loop de eventos padrão é agora *note ProactorEventLoop:
609.  (Contribuição de Victor Stinner em bpo-34687(4).)

*note ProactorEventLoop: 609. agora também tem suporte a UDP.
(Contribuição de Adam Meily e Andrew Svetlov em bpo-29883(5).)

*note ProactorEventLoop: 609. pode agora ser interrompido por *note
KeyboardInterrupt: 9d9. (“CTRL+C”).  (Contribuição de Vladimir Matveev
em bpo-23057(6).)

Adicionado *note asyncio.Task.get_coro(): 9e4. para obter a corrotina de
dentro de um *note asyncio.Task: 1be.  (Contribuição de Alex Grönholm em
bpo-36999(7).)

As tarefas de asyncio agora podem ser nomeadas, passando o argumento
nomeado ‘name’ para *note asyncio.create_task(): 1bf. ou o método de
loop de evento *note create_task(): 1c0. ou chamando o método *note
set_name(): 9e5. no objeto de tarefa.  O nome da tarefa é visível na
saída de ‘repr()’ de *note asyncio.Task: 1be. e também pode ser
recuperado usando o método *note get_name(): 9e6.  (Contribuição de Alex
Grönholm em bpo-34270(8).)

Adicionado suporte a Happy Eyeballs(9) para *note
asyncio.loop.create_connection(): 603.  Para especificar o
comportamento, dois novos parâmetros foram adicionados:
'happy_eyeballs_delay' e 'interleave'.  O algoritmo Happy Eyeballs
melhora a capacidade de resposta em aplicativos compatíveis com IPv4 e
IPv6, tentando conectar-se simultaneamente usando os dois.
(Contribuição de twisteroid ambassador em bpo-33530(10).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32314

   (2) https://bugs.python.org/issue?@action=redirect&bpo=37028

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32528

   (4) https://bugs.python.org/issue?@action=redirect&bpo=34687

   (5) https://bugs.python.org/issue?@action=redirect&bpo=29883

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23057

   (7) https://bugs.python.org/issue?@action=redirect&bpo=36999

   (8) https://bugs.python.org/issue?@action=redirect&bpo=34270

   (9) https://en.wikipedia.org/wiki/Happy_Eyeballs

   (10) https://bugs.python.org/issue?@action=redirect&bpo=33530


File: python.info,  Node: builtins<2>,  Next: collections,  Prev: asyncio<6>,  Up: Módulos melhorados<6>

1.6.5.3 builtins
................

A função embutida *note compile(): 192. foi aprimorada para aceitar o
sinalizador ‘ast.PyCF_ALLOW_TOP_LEVEL_AWAIT’.  Com esse novo sinalizador
passado, *note compile(): 192. permitirá construções de nível superior
‘await’, ‘async for’ e ‘async with’ que geralmente são consideradas
sintaxe inválida.  O objeto de código assíncrono marcado com o
sinalizador ‘CO_COROUTINE’ pode ser retornado.  (Contribuição de
Matthias Bussonnier em bpo-34616(1))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34616


File: python.info,  Node: collections,  Next: cProfile,  Prev: builtins<2>,  Up: Módulos melhorados<6>

1.6.5.4 collections
...................

O método *note _asdict(): 9e9. para *note collections.namedtuple(): 1ca.
agora retorna a *note dict: 256. em vez de um *note
collections.OrderedDict: 5db.  Isso funciona porque os dict regulares
garantem pedidos desde o Python 3.7.  Se os recursos extras de
‘OrderedDict’ forem necessários, a solução sugerida é converter o
resultado no tipo desejado: ‘OrderedDict(nt._asdict())’.  (Contribuição
de Raymond Hettinger em bpo-35864(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35864


File: python.info,  Node: cProfile,  Next: csv<2>,  Prev: collections,  Up: Módulos melhorados<6>

1.6.5.5 cProfile
................

A classe *note cProfile.Profile: 9eb. agora pode ser usada como um
gerenciador de contexto.  Perfile um bloco de código executando:

     import cProfile

     with cProfile.Profile() as profiler:
           # código as ser analisada o desempenho
           ...

(Contribuição de Scott Sanderson em bpo-29235(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29235


File: python.info,  Node: csv<2>,  Next: curses<3>,  Prev: cProfile,  Up: Módulos melhorados<6>

1.6.5.6 csv
...........

O *note csv.DictReader: 9ed. agora retorna instâncias de *note dict:
256. em vez de um *note collections.OrderedDict: 5db.  Agora, a
ferramenta é mais rápida e utiliza menos memória enquanto preserva a
ordem dos campos.  (Contribuição de Michael Selik em bpo-34003(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34003


File: python.info,  Node: curses<3>,  Next: ctypes<2>,  Prev: csv<2>,  Up: Módulos melhorados<6>

1.6.5.7 curses
..............

Adicionada uma nova variável contendo informações de versão estruturada
para a biblioteca ncurses subjacente: *note ncurses_version: 9ef.
(Contribuição de Serhiy Storchaka em bpo-31680(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31680


File: python.info,  Node: ctypes<2>,  Next: datetime<3>,  Prev: curses<3>,  Up: Módulos melhorados<6>

1.6.5.8 ctypes
..............

No Windows, *note CDLL: 9f1. e subclasses agora aceitam um parâmetro
'winmode' para especificar sinalizadores para a chamada subjacente
‘LoadLibraryEx’.  Os sinalizadores padrão são definidos para carregar
apenas dependências da DLL em locais confiáveis, incluindo o caminho em
que a DLL está armazenada (se um caminho completo ou parcial for usado
para carregar a DLL inicial) e os caminhos adicionados por *note
add_dll_directory(): 9f2. .  (Contribuição de Steve Dower em
bpo-36085(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36085


File: python.info,  Node: datetime<3>,  Next: functools<2>,  Prev: ctypes<2>,  Up: Módulos melhorados<6>

1.6.5.9 datetime
................

Adicionados novos construtores alternativos *note
datetime.date.fromisocalendar(): 9f4. e *note
datetime.datetime.fromisocalendar(): 9f5, que constroem objetos de *note
date: 1cd. e *note datetime: 1cc. respectivamente do ano ISO, número da
semana e dia da semana; estes são o inverso do método ‘isocalendar’ de
cada classe.  (Contribuição de Paul Ganssle em bpo-36004(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36004


File: python.info,  Node: functools<2>,  Next: gc<3>,  Prev: datetime<3>,  Up: Módulos melhorados<6>

1.6.5.10 functools
..................

*note functools.lru_cache(): 9f7. agora pode ser usado como um decorador
direto, e não como uma função retornando um decorador.  Portanto, agora
ambos são suportados:

     @lru_cache
     def f(x):
         ...

     @lru_cache(maxsize=256)
     def f(x):
         ...

(Contribuição de Raymond Hettinger em bpo-36772(1).)

Adicionado um novo decorador *note functools.cached_property(): 541,
para propriedades computadas armazenadas em cache durante toda a vida
útil da instância.

     import functools
     import statistics

     class Dataset:
        def __init__(self, sequence_of_numbers):
           self.data = sequence_of_numbers

        @functools.cached_property
        def variance(self):
           return statistics.variance(self.data)

(Contribuição de Carl Meyer em bpo-21145(2))

Adicionado um novo decorador *note functools.singledispatchmethod():
9f8. que converte métodos em *note funções genéricas: 9f9. usando *note
despacho único: 9fa.:

     from functools import singledispatchmethod
     from contextlib import suppress

     class TaskManager:

         def __init__(self, tasks):
             self.tasks = list(tasks)

         @singledispatchmethod
         def discard(self, value):
             with suppress(ValueError):
                 self.tasks.remove(value)

         @discard.register(list)
         def _(self, tasks):
             targets = set(tasks)
             self.tasks = [x for x in self.tasks if x not in targets]

(Contribuição de Ethan Smith em bpo-32380(3))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36772

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21145

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32380


File: python.info,  Node: gc<3>,  Next: gettext,  Prev: functools<2>,  Up: Módulos melhorados<6>

1.6.5.11 gc
...........

*note get_objects(): 806. agora pode receber um parâmetro opcional
'generation' indicando uma geração da qual obter objetos.  (Contribuição
de Pablo Galindo em bpo-36016(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36016


File: python.info,  Node: gettext,  Next: gzip<3>,  Prev: gc<3>,  Up: Módulos melhorados<6>

1.6.5.12 gettext
................

Adicionado *note pgettext(): 9fd. e suas variantes.  (Contribuição de
Franz Glasner, Éric Araujo e Cheryl Sabella em bpo-2504(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=2504


File: python.info,  Node: gzip<3>,  Next: IDLE e idlelib<4>,  Prev: gettext,  Up: Módulos melhorados<6>

1.6.5.13 gzip
.............

Adicionado o parâmetro 'mtime' em *note gzip.compress(): 63e. para saída
reproduzível.  (Contribuição de Guo Ci Teo em bpo-34898(1).)

A exceção *note BadGzipFile: 9ff. agora é levantada em vez de *note
OSError: 417. para certos tipos de arquivos gzip inválidos ou
corrompidos.  (Contribuição de Filip Gruszczyński, Michele Orrù e
Zackery Spytz em bpo-6584(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34898

   (2) https://bugs.python.org/issue?@action=redirect&bpo=6584


File: python.info,  Node: IDLE e idlelib<4>,  Next: inspect<5>,  Prev: gzip<3>,  Up: Módulos melhorados<6>

1.6.5.14 IDLE e idlelib
.......................

A saída em N linhas (50 por padrão) é compactada até um limite inferior.
N pode ser alterado na seção PyShell da página General da caixa de
diálogo Settings.  Menos linhas, mas possivelmente extra longas, podem
ser espremidas clicando com o botão direito do mouse na saída.  A saída
compactada pode ser expandida no local clicando duas vezes no botão ou
na área de transferência ou em uma janela separada clicando com o botão
direito do mouse.  (Contribuição de Tal Einat em bpo-1529353(1).)

Adiciona “Run Customized” ao menu Executar para executar um módulo com
configurações personalizadas.  Quaisquer argumentos de linha de comando
inseridos são adicionados ao sys.argv.  Eles também reaparecem na caixa
para a próxima execução personalizada.  Pode-se também suprimir a
reinicialização normal do módulo principal do console.  (Contribuição de
Cheryl Sabella, Terry Jan Reedy e outros em bpo-5680(2) e bpo-37627(3).)

Adicionados números de linha opcionais para janelas do editor IDLE. O
Windows é aberto sem números de linha, a menos que definido de outra
forma na guia General da caixa de diálogo de configuração.  Os números
de linha de uma janela existente são mostrados e ocultos no menu Opções.
(Contribuição de Tal Einat e Saimadhav Heblikar em bpo-17535(4).)

A codificação nativa do sistema operacional agora é usada para converter
entre strings Python e objetos Tcl.  Isso permite que o IDLE trabalhe
com emoji e outros caracteres não BMP. Esses caracteres podem ser
exibidos ou copiados e colados na ou da área de transferência.  A
conversão de strings de Tcl para Python e de volta agora nunca falha.
(Muitas pessoas trabalharam nisso por oito anos, mas o problema foi
finalmente resolvido por Serhiy Storchaka em bpo-13153(5).)

Novo em 3.8.1:

Adiciona a opção para ativar e desativar o piscar do cursor.
(Contribuição de Zackery Spytz na bpo-4603(6).)

A tecla Escape agora fecha as janelas de conclusão IDLE. (Contribuição
de Johnny Najera em bpo-38944(7).)

As alterações acima foram suportadas para versões de manutenção 3.7.

Adiciona argumentos nomeados à lista de completamento de nome de módulo.
(Contribuição de Terry J. Reedy em bpo-37765(8).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1529353

   (2) https://bugs.python.org/issue?@action=redirect&bpo=5680

   (3) https://bugs.python.org/issue?@action=redirect&bpo=37627

   (4) https://bugs.python.org/issue?@action=redirect&bpo=17535

   (5) https://bugs.python.org/issue?@action=redirect&bpo=13153

   (6) https://bugs.python.org/issue?@action=redirect&bpo=4603

   (7) https://bugs.python.org/issue?@action=redirect&bpo=38944

   (8) https://bugs.python.org/issue?@action=redirect&bpo=37765


File: python.info,  Node: inspect<5>,  Next: io<3>,  Prev: IDLE e idlelib<4>,  Up: Módulos melhorados<6>

1.6.5.15 inspect
................

A função *note inspect.getdoc(): a02. agora pode encontrar docstrings
para ‘__slots__’ se esse atributo for *note dict: 256. onde os valores
são docstrings.  Isso fornece opções de documentação semelhantes às que
já temos para *note property(): 194, *note classmethod(): 166. e *note
staticmethod(): 416.:

     class AudioClip:
         __slots__ = {'bit_rate': 'expressed in kilohertz to one decimal place',
                      'duration': 'in seconds, rounded up to an integer'}
         def __init__(self, bit_rate, duration):
             self.bit_rate = round(bit_rate / 1000.0, 1)
             self.duration = ceil(duration)

(Contribuição de Raymond Hettinger em bpo-36326(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36326


File: python.info,  Node: io<3>,  Next: itertools<4>,  Prev: inspect<5>,  Up: Módulos melhorados<6>

1.6.5.16 io
...........

No modo de desenvolvimento (*note -X: 176. ‘env’) e na *note compilação
de depuração: 1f9, o finalizador *note io.IOBase: 1f5. agora registra a
exceção se o método ‘close()’ falhar.  A exceção é ignorada
silenciosamente por padrão na compilação de lançamento.  (Contribuição
de Victor Stinner em bpo-18748(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18748


File: python.info,  Node: itertools<4>,  Next: json tool,  Prev: io<3>,  Up: Módulos melhorados<6>

1.6.5.17 itertools
..................

A função *note itertools.accumulate(): a05. adicionou uma opção de
argumento nomeado 'initial' para especificar um valor inicial:

     >>> from itertools import accumulate
     >>> list(accumulate([10, 5, 30, 15], initial=1000))
     [1000, 1010, 1015, 1045, 1060]

(Contribuído por Lisa Roach em bpo-34659(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34659


File: python.info,  Node: json tool,  Next: logging<2>,  Prev: itertools<4>,  Up: Módulos melhorados<6>

1.6.5.18 json.tool
..................

Adiciona a opção ‘--json-lines’ para analisar cada linha de entrada como
um objeto JSON separado.  (Contribuição de Weipeng Hong em
bpo-31553(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31553


File: python.info,  Node: logging<2>,  Next: math<5>,  Prev: json tool,  Up: Módulos melhorados<6>

1.6.5.19 logging
................

Adicionado um argumento nomeado 'force' a *note logging.basicConfig():
a08.  Quando definido como true, qualquer manipulador existente anexado
ao logger raiz é removido e fechado antes de executar a configuração
especificada pelos outros argumentos.

Isso resolve um problema de longa data.  Depois que um logger ou
'basicConfig()' foi chamado, as chamadas subsequentes para
'basicConfig()' foram ignoradas silenciosamente.  Isso dificultava a
atualização, a experimentação ou o ensino das várias opções de
configuração de log usando o prompt interativo ou um bloco de notas de
Jupyter.

(Sugestão de Raymond Hettinger, implementação de Dong-hee Na e revisão
de Vinay Sajip em bpo-33897(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33897


File: python.info,  Node: math<5>,  Next: mmap<2>,  Prev: logging<2>,  Up: Módulos melhorados<6>

1.6.5.20 math
.............

Adicionada nova função *note math.dist(): a0a. para calcular a distância
euclidiana entre dois pontos.  (Contribuição de Raymond Hettinger em
bpo-33089(1).)

Expandida a função *note math.hypot(): a0b. para manipular várias
dimensões.  Anteriormente, suportava apenas o caso 2-D. (Contribuição de
Raymond Hettinger em bpo-33089(2).)

Adicionada nova função, *note math.prod(): a0c, como função análoga a
*note sum(): 46a. que retorna o produto de um valor ‘start’ (padrão: 1)
vezes uma iterável de números:

     >>> prior = 0.8
     >>> likelihoods = [0.625, 0.84, 0.30]
     >>> math.prod(likelihoods, start=prior)
     0.126

(Contribuição de Pablo Galindo em bpo-35606(3).)

Adicionadas duas novas funções combinatórias *note math.perm(): 6d1. e
*note math.comb(): 6d0.:

     >>> math.perm(10, 3)    # Permutações de 10 coisas, 3 por vez
     720
     >>> math.comb(10, 3)    # Combinações de 10 coisas, 3 por vez
     120

(Contribuição de Yash Aggarwal, Keller Fuchs, Serhiy Storchaka e Raymond
Hettinger em bpo-37128(4), bpo-37178(5) e bpo-35431(6).)

Adicionada uma nova função *note math.isqrt(): a0d. para calcular raízes
quadradas inteiras precisas sem conversão para ponto flutuante.  A nova
função suporta números inteiros arbitrariamente grandes.  É mais rápido
que ‘floor(sqrt(n))’, mas mais lento que *note math.sqrt(): a0e.:

     >>> r = 650320427
     >>> s = r ** 2
     >>> isqrt(s - 1)         # correto
     650320426
     >>> floor(sqrt(s - 1))   # incorreto
     650320427

(Contribuição de Mark Dickinson em bpo-36887(7).)

A função *note math.factorial(): 94e. não aceita mais argumentos que não
são parecidos com int.  (Contribuição de Pablo Galindo em bpo-33083(8).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33089

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33089

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35606

   (4) https://bugs.python.org/issue?@action=redirect&bpo=37128

   (5) https://bugs.python.org/issue?@action=redirect&bpo=37178

   (6) https://bugs.python.org/issue?@action=redirect&bpo=35431

   (7) https://bugs.python.org/issue?@action=redirect&bpo=36887

   (8) https://bugs.python.org/issue?@action=redirect&bpo=33083


File: python.info,  Node: mmap<2>,  Next: multiprocessing<3>,  Prev: math<5>,  Up: Módulos melhorados<6>

1.6.5.21 mmap
.............

A classe *note mmap.mmap: 20b. agora possui o método *note madvise():
a10. para acessar a chamada do sistema ‘madvise()’.  (Contribuição de
Zackery Spytz em bpo-32941(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32941


File: python.info,  Node: multiprocessing<3>,  Next: os<6>,  Prev: mmap<2>,  Up: Módulos melhorados<6>

1.6.5.22 multiprocessing
........................

Adicionado novo módulo *note multiprocessing.shared_memory: 99.
(Contribuição de Davin Potts em bpo-35813(1).)

No macOS, o método inicial 'spawn' agora é usado por padrão.
(Contribuição de Victor Stinner em bpo-33725(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35813

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33725


File: python.info,  Node: os<6>,  Next: os path<5>,  Prev: multiprocessing<3>,  Up: Módulos melhorados<6>

1.6.5.23 os
...........

Adicionada nova função *note add_dll_directory(): 9f2. no Windows para
fornecer caminhos de pesquisa adicionais para dependências nativas ao
importar módulos de extensão ou carregar DLLs usando *note ctypes: 2a.
(Contribuição de Steve Dower em bpo-36085(1).)

Uma nova função *note os.memfd_create(): a13. foi adicionada para
envolver a chamada de sistema ‘memfd_create()’.  (Contribuição de
Zackery Spytz e Christian Heimes em bpo-26836(2).)

No Windows, grande parte da lógica manual para lidar com pontos de nova
análise (incluindo links simbólicos e junções de diretórios) foi
delegada ao sistema operacional.  Especificamente, *note os.stat(): 4a0.
agora percorrerá qualquer objeto suportado pelo sistema operacional,
enquanto *note os.lstat(): 4a1. abrirá apenas pontos de nova análise que
se identifiquem como “substitutos de nome”, enquanto outros serão
abertos como para *note os.stat(): 4a0.  Em todos os casos, *note
os.stat_result.st_mode: a14. terá ‘S_IFLNK’ definido apenas para links
simbólicos e não para outros tipos de pontos de nova análise.  Para
identificar outros tipos de pontos de nova análise, verifique o novo
atributo *note os.stat_result.st_reparse_tag: a15.

No Windows, *note os.readlink(): 926. agora pode ler junções de
diretório.  Observe que *note islink(): a16. retornará ‘False’ para
junções de diretório e, portanto, o código que verifica primeiro
‘islink’ continuará tratando junções como diretórios, enquanto o código
que lida com erros de *note os.readlink(): 926. agora pode tratar
junções como links.

(Contribuição de Steve Dower em bpo-37834(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36085

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26836

   (3) https://bugs.python.org/issue?@action=redirect&bpo=37834


File: python.info,  Node: os path<5>,  Next: pathlib<7>,  Prev: os<6>,  Up: Módulos melhorados<6>

1.6.5.24 os.path
................

Funções de *note os.path: a2. que retornam um resultado booleano como
*note exists(): a18, *note lexists(): a19, *note isdir(): a1a, *note
isfile(): a1b, *note islink(): a16. e *note ismount(): a1c. agora
retornam ‘False’ em vez de levantar *note ValueError: 202. ou suas
subclasses *note UnicodeEncodeError: 677. e *note UnicodeDecodeError:
a1d. para caminhos que contêm caracteres ou bytes não representáveis no
nível do SO. (Contribuição de Serhiy Storchaka em bpo-33721(1).)

*note expanduser(): a1e. no Windows agora prefere a variável de ambiente
‘USERPROFILE’ e não usa ‘HOME’, que normalmente não é definido para
contas de usuário comuns.  (Contribuição de Anthony Sottile em
bpo-36264(2).)

*note isdir(): a1a. no Windows não retorna mais ‘True’ para um link para
um diretório inexistente.

*note realpath(): 225. no Windows agora resolve pontos de nova análise,
incluindo links simbólicos e junções de diretório.

(Contribuição de Steve Dower em bpo-37834(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33721

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36264

   (3) https://bugs.python.org/issue?@action=redirect&bpo=37834


File: python.info,  Node: pathlib<7>,  Next: pickle,  Prev: os path<5>,  Up: Módulos melhorados<6>

1.6.5.25 pathlib
................

Os métodos *note pathlib.Path: 229. que retornam um resultado booleano
como *note exists(): a20, *note is_dir(): 230, *note is_file(): 22f,
*note is_mount(): a21, *note is_symlink(): a22, *note is_block_device():
a23, *note is_char_device(): a24, *note is_fifo(): a25, *note
is_socket(): a26. agora retornam ‘False’ em vez de levantar *note
ValueError: 202. ou sua subclasse *note UnicodeEncodeError: 677. para
caminhos que contêm caracteres não representáveis no nível do sistema
operacional.  (Contribuição de Serhiy Storchaka em bpo-33721(1).)

Adicionado ‘pathlib.Path.link_to()’ que cria um link físico apontando
para um caminho.  (Contribuição de Joannah Nanjekye em bpo-26978(2))
Observe que ‘link_to’ foi descontinuado na versão 3.10 e removido na
versão 3.12 em favor de um método ‘hardlink_to’ adicionado na versão
3.10 que corresponde à semântica do método ‘symlink_to’ existente.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33721

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26978


File: python.info,  Node: pickle,  Next: plistlib,  Prev: pathlib<7>,  Up: Módulos melhorados<6>

1.6.5.26 pickle
...............

Extensões de *note pickle: a6, que atuem como subclasse da classe
otimizada para C *note Pickler: a28, agora podem substituir a lógica de
“pickling” de funções e classes definindo o método especial *note
reducer_override(): a29.  (Contribuição de Pierre Glaser e Olivier
Grisel em bpo-35900(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35900


File: python.info,  Node: plistlib,  Next: pprint<3>,  Prev: pickle,  Up: Módulos melhorados<6>

1.6.5.27 plistlib
.................

Adicionado novo *note plistlib.UID: a2b. e habilitado suporte para
leitura e escrita de plists binárias codificadas em NSKeyedArchiver.
(Contribuição de Jon Janzen em bpo-26707(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26707


File: python.info,  Node: pprint<3>,  Next: py_compile<2>,  Prev: plistlib,  Up: Módulos melhorados<6>

1.6.5.28 pprint
...............

O módulo *note pprint: ae. adicionou um parâmetro 'sort_dicts' a várias
funções.  Por padrão, essas funções continuam a classificar dicionários
antes da renderização ou impressão.  No entanto, se 'sort_dicts' estiver
definido como false, os dicionários manterão a ordem em que as chaves
foram inseridas.  Isso pode ser útil para comparação com entradas JSON
durante a depuração.

Além disso, existe uma nova função de conveniência, *note pprint.pp():
a2d, que é como *note pprint.pprint(): 82b, mas com 'sort_dicts'
padronizando como ‘False’:

     >>> from pprint import pprint, pp
     >>> d = dict(source='input.txt', operation='filter', destination='output.txt')
     >>> pp(d, width=40)                  # Ordem original
     {'source': 'input.txt',
      'operation': 'filter',
      'destination': 'output.txt'}
     >>> pprint(d, width=40)              # Chaves ordenadas alfabeticamente
     {'destination': 'output.txt',
      'operation': 'filter',
      'source': 'input.txt'}

(Contribuição de Rémi Lapeyre em bpo-30670(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30670


File: python.info,  Node: py_compile<2>,  Next: shlex,  Prev: pprint<3>,  Up: Módulos melhorados<6>

1.6.5.29 py_compile
...................

*note py_compile.compile(): a2f. agora possui suporte a um modo
silencioso.  (Contribuição de Joannah Nanjekye em bpo-22640(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22640


File: python.info,  Node: shlex,  Next: shutil<4>,  Prev: py_compile<2>,  Up: Módulos melhorados<6>

1.6.5.30 shlex
..............

A nova função *note shlex.join(): a31. atua como o inverso da *note
shlex.split(): 53c.  (Contribuição de Bo Bayles em bpo-32102(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32102


File: python.info,  Node: shutil<4>,  Next: socket<4>,  Prev: shlex,  Up: Módulos melhorados<6>

1.6.5.31 shutil
...............

*note shutil.copytree(): a33. agora aceita um novo argumento nomeado
‘dirs_exist_ok’.  (Contribuição de Josh Bronson em bpo-20849(1).)

*note shutil.make_archive(): 4b3. agora tem como padrão o formato pax
moderno (POSIX.1-2001) de novos arquivos para melhorar a portabilidade e
a conformidade com os padrões, herdados da alteração correspondente no
módulo *note tarfile: de.  (Contribuição de C.A.M. Gerlach em
bpo-30661(2).)

*note shutil.rmtree(): 301. no Windows agora remove junções de
diretórios sem remover recursivamente o conteúdo primeiro.
(Contribuição de Steve Dower em bpo-37834(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20849

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30661

   (3) https://bugs.python.org/issue?@action=redirect&bpo=37834


File: python.info,  Node: socket<4>,  Next: ssl<4>,  Prev: shutil<4>,  Up: Módulos melhorados<6>

1.6.5.32 socket
...............

Adicionadas as funções de conveniência *note create_server(): a35. e
*note has_dualstack_ipv6(): a36. para automatizar as tarefas necessárias
geralmente envolvidas na criação de um soquete de servidor, incluindo a
aceitação de conexões IPv4 e IPv6 no mesmo soquete.  (Contribuição de
Giampaolo Rodolà em bpo-17561(1).)

As funções *note socket.if_nameindex(): a37, *note
socket.if_nametoindex(): a38. e *note socket.if_indextoname(): a39.
foram agora implementadas no Windows.  (Contribuição de Zackery Spytz em
bpo-37007(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17561

   (2) https://bugs.python.org/issue?@action=redirect&bpo=37007


File: python.info,  Node: ssl<4>,  Next: statistics<4>,  Prev: socket<4>,  Up: Módulos melhorados<6>

1.6.5.33 ssl
............

Adicionado *note post_handshake_auth: a3b. para ativar e *note
verify_client_post_handshake(): a3c. para iniciar a autenticação
pós-handshake do TLS 1.3.  (Contribuição de Christian Heimes em
bpo-34670(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34670


File: python.info,  Node: statistics<4>,  Next: sys<7>,  Prev: ssl<4>,  Up: Módulos melhorados<6>

1.6.5.34 statistics
...................

Adicionada *note statistics.fmean(): a3e. como uma variante de ponto
flutuante mais rápida de *note statistics.mean(): 6d2.  (Contribuição de
Raymond Hettinger e Steven D’Aprano em bpo-35904(1).)

Adicionada *note statistics.geometric_mean(): a3f. (Contribuição de
Raymond Hettinger em bpo-27181(2).

Adicionada ‘Statistics.multimode()’ que retorna uma lista dos valores
mais comuns.  (Contribuição de Raymond Hettinger em bpo-35892(3).)

Adicionada *note statistics.quantiles(): a40. que divide dados ou uma
distribuição em intervalos equivalentes (por exemplo, quartis, decis ou
percentis).  (Contribuição de Raymond Hettinger em bpo-36546(4).)

Adicionada *note statistics.NormalDist: a41, uma ferramenta para criar e
manipular distribuições normais de uma variável aleatória.
(Contribuição de Raymond Hettinger em bpo-36018(5).)

     >>> temperature_feb = NormalDist.from_samples([4, 12, -3, 2, 7, 14])
     >>> temperature_feb.mean
     6.0
     >>> temperature_feb.stdev
     6.356099432828281

     >>> temperature_feb.cdf(3)            # Chance de ser manos de 3 graus
     0.3184678262814532
     >>> # Chance relativa de ser 7 graus contra 10 graus
     >>> temperature_feb.pdf(7) / temperature_feb.pdf(10)
     1.2039930378537762

     >>> el_niño = NormalDist(4, 2.5)
     >>> temperature_feb += el_niño        # Adiciona em um efeito do clima
     >>> temperature_feb
     NormalDist(mu=10.0, sigma=6.830080526611674)

     >>> temperature_feb * (9/5) + 32      # Converte para Fahrenheit
     NormalDist(mu=50.0, sigma=12.294144947901014)
     >>> temperature_feb.samples(3)        # Gera amostras aleatórias
     [7.672102882379219, 12.000027119750287, 4.647488369766392]

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35904

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27181

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35892

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36546

   (5) https://bugs.python.org/issue?@action=redirect&bpo=36018


File: python.info,  Node: sys<7>,  Next: tarfile<5>,  Prev: statistics<4>,  Up: Módulos melhorados<6>

1.6.5.35 sys
............

Adiciona uma nova função *note sys.unraisablehook(): 1f7, que pode ser
substituída para controlar como as “exceções não passíveis de
levantamento” são tratadas.  É chamada quando uma exceção ocorre, mas
não há como o Python manipulá-la.  Por exemplo, quando um destruidor
gera uma exceção ou durante a coleta de lixo (*note gc.collect(): a43.).
(Contribuição de Victor Stinner em bpo-36829(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36829


File: python.info,  Node: tarfile<5>,  Next: threading<4>,  Prev: sys<7>,  Up: Módulos melhorados<6>

1.6.5.36 tarfile
................

O módulo *note tarfile: de. agora tem como padrão o formato pax moderno
(POSIX.1-2001) para novos arquivos, em vez do anterior específico do
GNU.  Isso melhora a portabilidade de plataforma cruzada com uma
codificação consistente (UTF-8) em um formato padronizado e extensível e
oferece vários outros benefícios.  (Contribuição de C.A.M. Gerlach em
bpo-36268(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36268


File: python.info,  Node: threading<4>,  Next: tokenize<2>,  Prev: tarfile<5>,  Up: Módulos melhorados<6>

1.6.5.37 threading
..................

Adiciona uma nova função *note threading.excepthook(): 84e. que manipula
a exceção não capturada *note threading.Thread.run(): a46.  Pode ser
substituída para controlar como exceções não capturadas *note
threading.Thread.run(): a46. são manipuladas.  (Contribuição de Victor
Stinner em bpo-1230540(1).)

Adiciona uma nova função *note threading.get_native_id(): a47. e um
atributo *note native_id: a48. à classe *note threading.Thread: 953.
Eles retornam o Thread ID integral nativo do thread atual atribuído pelo
kernel.  Este recurso está disponível apenas em determinadas
plataformas, consulte *note get_native_id: a47. para mais informações.
(Contribuição de Jake Tesler em bpo-36084(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1230540

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36084


File: python.info,  Node: tokenize<2>,  Next: tkinter<4>,  Prev: threading<4>,  Up: Módulos melhorados<6>

1.6.5.38 tokenize
.................

O módulo *note tokenize: fb. agora emite implicitamente um token
‘NEWLINE’ quando fornecido com entrada que não possui uma nova linha à
direita.  Esse comportamento agora corresponde ao que o tokenizador do C
faz internamente.  (Contribuição de Ammar Askar em bpo-33899(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33899


File: python.info,  Node: tkinter<4>,  Next: time<4>,  Prev: tokenize<2>,  Up: Módulos melhorados<6>

1.6.5.39 tkinter
................

Adicionados os métodos ‘selection_from()’, ‘selection_present()’,
‘selection_range()’ e ‘selection_to()’ na classe ‘tkinter.Spinbox’.
(Contribuição de Juliette Monsel em bpo-34829(1).)

Adicionado o método ‘moveto()’ na classe ‘tkinter.Canvas’.
(Contribuição de Juliette Monsel em bpo-23831(2).)

A classe ‘tkinter.PhotoImage’ agora possui os métodos
‘transparency_get()’ e ‘transparency_set()’.  (Contribuição de Zackery
Spytz em bpo-25451(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34829

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23831

   (3) https://bugs.python.org/issue?@action=redirect&bpo=25451


File: python.info,  Node: time<4>,  Next: typing<8>,  Prev: tkinter<4>,  Up: Módulos melhorados<6>

1.6.5.40 time
.............

Adiciona o novo relógio *note CLOCK_UPTIME_RAW: a4c. ao macOS 10.12.
(Contribuição de Joannah Nanjekye em bpo-35702(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35702


File: python.info,  Node: typing<8>,  Next: unicodedata<5>,  Prev: time<4>,  Up: Módulos melhorados<6>

1.6.5.41 typing
...............

O módulo *note typing: 104. incorpora vários novos recursos:

   * Um tipo de dicionário com tipos por chave.  Veja PEP 589(1) e *note
     typing.TypedDict: 162.  TypedDict usa apenas chaves de strings.
     Por padrão, é necessário que todas as chaves estejam presentes.
     Especifique “total=False” para permitir que as chaves sejam
     opcionais:

          class Location(TypedDict, total=False):
              lat_long: tuple
              grid_square: str
              xy_coordinate: tuple

   * Tipos literais.  Veja PEP 586(2) e *note typing.Literal: 858.
     Tipos literais indicam que um parâmetro ou valor de retorno está
     restrito a um ou mais valores literais específicos:

          def get_status(port: int) -> Literal['connected', 'disconnected']:
              ...

   * Variáveis, funções, métodos e classes “finais”.  Veja PEP 591(3),
     *note typing.Final: 267. e *note typing.final(): 6ad.  O
     qualificador final instrui um verificador de tipo estático a
     restringir criação de subclasse, substituição ou reatribuição:

          pi: Final[float] = 3.1415926536

   * Definições de protocolo.  Veja PEP 544(4), *note typing.Protocol:
     264. e *note typing.runtime_checkable(): 443.  ABCs simples como
     *note typing.SupportsInt: a4e. agora são subclasses de ‘Protocol’.

   * Nova classe de protocolo *note typing.SupportsIndex: a4f.

   * Novas funções *note typing.get_origin(): 2ec. e *note
     typing.get_args(): 2ed.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0589/

   (2) https://peps.python.org/pep-0586/

   (3) https://peps.python.org/pep-0591/

   (4) https://peps.python.org/pep-0544/


File: python.info,  Node: unicodedata<5>,  Next: unittest<6>,  Prev: typing<8>,  Up: Módulos melhorados<6>

1.6.5.42 unicodedata
....................

O módulo *note unicodedata: 105. agora foi atualizado para usar o
Unicode 12.1.0(1).

A nova função *note is_normalized(): a51. pode ser usada para verificar
se uma string está em uma forma normal específica, geralmente muito mais
rápida do que normalizar a string.  (Contribuição de Max Belanger, David
Euresti e Greg Price em bpo-32285(2) e bpo-37966(3)).

   ---------- Footnotes ----------

   (1) https://blog.unicode.org/2019/05/unicode-12-1-en.html

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32285

   (3) https://bugs.python.org/issue?@action=redirect&bpo=37966


File: python.info,  Node: unittest<6>,  Next: venv<4>,  Prev: unicodedata<5>,  Up: Módulos melhorados<6>

1.6.5.43 unittest
.................

Adicionada *note AsyncMock: a53. para dar suporte a uma versão
assíncrona de *note Mock: a54.  Também foram adicionadas novas funções
apropriadas para teste.  (Contribuição de Lisa Roach em bpo-26467(1)).

Adicionados *note addModuleCleanup(): a55. e *note addClassCleanup():
a56. a unittest para dar suporte a limpezas para *note setUpModule():
a57. e *note setUpClass(): a58.  (Contribuição de Lisa Roach em
bpo-24412(2).)

Várias funções de declaração de mock agora também exibem uma lista de
chamadas reais em caso de falha.  (Contribuição de Petter Strandmark em
bpo-35047(3).)

O módulo *note unittest: 106. ganhou suporte a corrotinas a serem usadas
como casos de teste com *note unittest.IsolatedAsyncioTestCase: 30c.
(Contribuição de Andrew Svetlov em bpo-32972(4).)

Exemplo:

     import unittest


     class TestRequest(unittest.IsolatedAsyncioTestCase):

         async def asyncSetUp(self):
             self.connection = await AsyncConnection()

         async def test_get(self):
             response = await self.connection.get("https://example.com")
             self.assertEqual(response.status_code, 200)

         async def asyncTearDown(self):
             await self.connection.close()


     if __name__ == "__main__":
         unittest.main()

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26467

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24412

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35047

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32972


File: python.info,  Node: venv<4>,  Next: weakref,  Prev: unittest<6>,  Up: Módulos melhorados<6>

1.6.5.44 venv
.............

*note venv: 111. agora inclui um script ‘Activate.ps1’ em todas as
plataformas para ativar ambientes virtuais no PowerShell Core 6.1.
(Contribuição de Brett Cannon em bpo-32718(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32718


File: python.info,  Node: weakref,  Next: xml<4>,  Prev: venv<4>,  Up: Módulos melhorados<6>

1.6.5.45 weakref
................

Os objetos proxy retornados por *note weakref.proxy(): a5b. agora
possuem suporte aos operadores de multiplicação de matrizes ‘@’ e ‘@=’
além dos outros operadores numéricos.  (Contribuição de Mark Dickinson
em bpo-36669(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36669


File: python.info,  Node: xml<4>,  Next: xmlrpc,  Prev: weakref,  Up: Módulos melhorados<6>

1.6.5.46 xml
............

Como atenuação a DTD e recuperação de entidade externa, os módulos *note
xml.dom.minidom: 122. e *note xml.sax: 129. não processam mais entidades
externas por padrão.  (Contribuição de Christian Heimes em
bpo-17239(1).)

Os métodos ‘.find*()’ no módulo *note xml.etree.ElementTree: 125.
possuem suporte a pesquisas curinga como ‘{*}tag’, que ignora o espaço
para nome e ‘{namespace}*’, que retorna todas as tags no espaço para
nome especificado.  (Contribuição de Stefan Behnel em bpo-28238(2).)

O módulo *note xml.etree.ElementTree: 125. fornece uma nova função *note
canonicalize(): a5d. que implementa C14N 2.0.  (Contribuição de Stefan
Behnel em bpo-13611(3).)

O objeto de destino de *note xml.etree.ElementTree.XMLParser: a5e. pode
receber eventos de declaração de espaço de nomes através dos novos
métodos de retorno de chamada ‘start_ns()’ e ‘end_ns ()’.  Além disso, o
destino *note xml.etree.ElementTree.TreeBuilder: a5f. pode ser
configurado para processar eventos sobre comentários e instruções de
processamento para incluí-los na árvore gerada.  (Contribuição de Stefan
Behnel em bpo-36676(4) e bpo-36673(5).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17239

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28238

   (3) https://bugs.python.org/issue?@action=redirect&bpo=13611

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36676

   (5) https://bugs.python.org/issue?@action=redirect&bpo=36673


File: python.info,  Node: xmlrpc,  Prev: xml<4>,  Up: Módulos melhorados<6>

1.6.5.47 xmlrpc
...............

*note xmlrpc.client.ServerProxy: a61. agora possui suporte a um
argumento nomeado 'headers' opcional para que uma sequência de
cabeçalhos HTTP seja enviada a cada solicitação.  Entre outras coisas,
isso possibilita a atualização da autenticação básica padrão para uma
autenticação de sessão mais rápida.  (Contribuição de Cédric Krier em
bpo-35153(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35153


File: python.info,  Node: Otimizações<6>,  Next: Mudanças a construções e API C,  Prev: Módulos melhorados<6>,  Up: O que há de novo no Python 3 8

1.6.6 Otimizações
-----------------

   * O módulo *note subprocess: d6. agora pode usar a função *note
     os.posix_spawn(): 220. em alguns casos para obter melhor
     desempenho.  Atualmente, ele é usado apenas no macOS e Linux
     (usando glibc 2.24 ou mais recente) se todas essas condições forem
     atendidas:

        * 'close_fds' ser false;

        * os parâmetros 'preexec_fn', 'pass_fds', 'cwd' and
          'start_new_session' não estarem definidos;

        * o caminho 'executable' conter um diretório.

     (Contribuição de Joannah Nanjekye e Victor Stinner em
     bpo-35537(1).)

   * *note shutil.copyfile(): a63, *note shutil.copy(): a64, *note
     shutil.copy2(): a65, *note shutil.copytree(): a33. e *note
     shutil.copytree(): a33. usam chamadas de sistema “fast-copy”
     específicas da plataforma no Linux e no macOS para copiar o arquivo
     com mais eficiência.  “fast-copy” significa que a operação de cópia
     ocorre dentro do kernel, evitando o uso de buffers de espaço do
     usuário no Python como em “‘outfd.write(infd.read())’”.  No
     Windows, *note shutil.copyfile(): a63. usa um buffer padrão com
     tamanho maior (1 MiB em vez de 16 KiB) e é usada uma variante de
     *note shutil.copyfileobj(): a66. baseada em *note memoryview():
     2eb.  A velocidade de cópia de um arquivo 512 MiB na mesma partição
     é de aproximadamente +26% no Linux, +50% no macOS e +40% no
     Windows.  Além disso, muito menos ciclos de CPU são consumidos.
     Veja a seção *note Operações de cópia eficientes dependentes da
     plataforma: a67.  (Contribuição de Giampaolo Rodolà em
     bpo-33671(2).)

   * *note shutil.copytree(): a33. usa a função *note os.scandir(): a68.
     e todas as funções de cópia que dependem dela usam valores em cache
     de *note os.stat(): 4a0.  A velocidade para copiar um diretório com
     8000 arquivos é de cerca de +9% no Linux, +20% no Windows e +30% em
     um compartilhamento SMB do Windows.  Além disso, o número de
     chamadas de sistema *note os.stat(): 4a0. é reduzido em 38%,
     tornando *note shutil.copytree(): a33. especialmente mais rápida em
     sistemas de arquivos em rede.  (Contribuição de Giampaolo Rodolà em
     bpo-33695(3).)

   * O protocolo padrão no módulo *note pickle: a6. agora é o Protocolo
     4, introduzido pela primeira vez no Python 3.4.  Ele oferece melhor
     desempenho e tamanho menor em comparação com o Protocolo 3
     disponível desde o Python 3.0.

   * Removido um membro *note Py_ssize_t: a69. de ‘PyGC_Head’.  O
     tamanho de todos os objetos rastreados pelo coletor de lixo (por
     exemplo, tupla, lista, ditado) é reduzido em 4 ou 8 bytes.
     (Contribuição de Inada Naoki em bpo-33597(4).)

   * *note uuid.UUID: a6a. agora usa ‘__slots__’ para reduzir seu uso de
     espaço de memória.  (Contribuição de Wouter Bolsterlee e Tal Einat
     em bpo-30977(5))

   * Melhor desempenho de *note operator.itemgetter(): a6b. em 33%.
     Manipulação de argumento otimizada e incluído um caminho rápido
     para o caso comum de um único índice inteiro não negativo em uma
     tupla (que é o caso de uso típico na biblioteca padrão).
     (Contribuição de Raymond Hettinger em bpo-35664(6).)

   * Pesquisas de campo aceleradas em *note collections.namedtuple():
     1ca.  Agora elas são duas vezes mais rápidas, tornando-as a forma
     mais rápida de pesquisa de variáveis de instância no Python.
     (Contribuição de Raymond Hettinger, Pablo Galindo e Joe Jevnik,
     Serhiy Storchaka em bpo-32492(7).)

   * O construtor *note list: 611. não atribui globalmente o buffer
     interno do item se a entrada iterável tiver um comprimento
     conhecido (a entrada implementa ‘__len__’).  Isso torna a lista
     criada 12% menor em média.  (Contribuição de Raymond Hettinger e
     Pablo Galindo em bpo-33234(8).)

   * Duplicada a velocidade de gravação de variável de classe.  Quando
     um atributo não-dunder era atualizado, havia uma chamada
     desnecessária para atualizar os slots.  (Contribuição de Stefan
     Behnel, Pablo Galindo Salgado, Raymond Hettinger, Neil Schemenauer
     e Serhiy Storchaka em bpo-36012(9).)

   * Reduzida a sobrecarga dos argumentos de conversão passados para
     muitas funções e métodos internos.  Isso acelerou chamando algumas
     funções e métodos internos simples de 20–50%.  (Contribuição de
     Serhiy Storchaka em bpo-23867(10), bpo-35582(11) e bpo-36127(12).)

   * A instrução ‘LOAD_GLOBAL’ agora usa o novo mecanismo “por cache de
     código de operação”.  É cerca de 40% mais rápido agora.
     (Contribuição de Yury Selivanov e Inada Naoki em :issue: ‘26219’.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35537

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33671

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33695

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33597

   (5) https://bugs.python.org/issue?@action=redirect&bpo=30977

   (6) https://bugs.python.org/issue?@action=redirect&bpo=35664

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32492

   (8) https://bugs.python.org/issue?@action=redirect&bpo=33234

   (9) https://bugs.python.org/issue?@action=redirect&bpo=36012

   (10) https://bugs.python.org/issue?@action=redirect&bpo=23867

   (11) https://bugs.python.org/issue?@action=redirect&bpo=35582

   (12) https://bugs.python.org/issue?@action=redirect&bpo=36127


File: python.info,  Node: Mudanças a construções e API C,  Next: Descontinuados<8>,  Prev: Otimizações<6>,  Up: O que há de novo no Python 3 8

1.6.7 Mudanças a construções e API C
------------------------------------

   * O *note sys.abiflags: a6d. padrão se tornou uma string vazia: o
     sinalizador ‘m’ para pymalloc se tornou inútil (compilações com e
     sem pymalloc são compatíveis com ABI) e, portanto, foi removido.
     (Contribuição de Victor Stinner em bpo-36707(1).)

     Exemplos de alterações:

        * Somente o programa ‘python3.8’ é instalado, o programa
          ‘python3.8m’ se foi.

        * Somente o script ‘python3.8-config’ é instalado, o programa
          ‘python3.8m-config’ se foi.

        * O sinalizador ‘m’ foi removido do sufixo dos nomes de arquivos
          da biblioteca dinâmica: módulos de extensão na biblioteca
          padrão, bem como daqueles produzidos e instalados por pacotes
          de terceiros, como os baixados do PyPI. No Linux, por exemplo,
          o sufixo de ‘.cpython-37m-x86_64-linux-gnu.so’ do Python 3.7
          se tornou ‘.cpython-38-x86_64-linux-gnu.so’ no Python 3.8.

   * Os arquivos de cabeçalho foram reorganizados para separar melhor os
     diferentes tipos de APIs:

        * ‘Include/*.h’ deve ser a API C pública estável e portátil.

        * ‘Include/cpython/*.h’ deve ser a API C instável específica do
          CPython; API pública, com alguma API privada prefixada por
          ‘_Py’ ou ‘_PY’.

        * ‘Include/internal/*.h’ é a API C interna privada muito
          específica do CPython.  Essa API é fornecida sem garantia de
          compatibilidade com versões anteriores e não deve ser usada
          fora do CPython.  Ele é exposto apenas a necessidades muito
          específicas, como depuradores e perfis, que precisam acessar
          os componentes internos do CPython sem chamar funções.  Esta
          API agora está instalada por ‘make install’.

     (Contribuição de Victor Stinner em bpo-35134(2) e bpo-35081(3),
     trabalho iniciado por Eric Snow em Python 3.7.)

   * Algumas macros foram convertidas em funções in-line estáticas: os
     tipos de parâmetros e o tipo de retorno são bem definidos, eles não
     têm problemas específicos para as macros, as variáveis têm escopos
     locais.  Exemplos:

        * *note Py_INCREF(): 56e, *note Py_DECREF(): 56f.

        * *note Py_XINCREF(): a6e, *note Py_XDECREF(): 78f.

        * ‘PyObject_INIT’, ‘PyObject_INIT_VAR’

        * Funções privadas: ‘_PyObject_GC_TRACK()’,
          ‘_PyObject_GC_UNTRACK()’, ‘_Py_Dealloc()’

     (Contribuição de Victor Stinner em bpo-35059(4).)

   * As funções ‘PyByteArray_Init()’ e ‘PyByteArray_Fini()’ foram
     removidas.  Elas não faziam nada desde o Python 2.7.4 e o Python
     3.2.0, foram excluídas da API limitada (ABI estável) e não foram
     documentados.  (Contribuição de Victor Stinner em bpo-35713(5).)

   * O resultado de *note PyExceptionClass_Name(): a6f. agora é do tipo
     ‘const char *’ em vez de ‘char *’.  (Contribuição de Serhiy
     Storchaka em bpo-33818(6).)

   * A dualidade de ‘Modules/Setup.dist’ e ‘Modules/Setup’ foi removida.
     Anteriormente, ao atualizar a árvore de fontes do CPython, era
     necessário copiar manualmente ‘Modules/Setup.dist’ (dentro da
     árvore de fontes) para ‘Modules/Setup’ (dentro da árvore de
     compilação), a fim de refletir todas as alterações upstream.  Isso
     foi um pequeno benefício para os empacotadores, à custa de um
     aborrecimento frequente para os desenvolvedores após o
     desenvolvimento do CPython, pois esquecer de copiar o arquivo pode
     causar falhas na compilação.

     Agora, o sistema de compilação sempre lê ‘Modules/Setup’ dentro da
     árvore de fontes.  As pessoas que desejam personalizar esse arquivo
     são incentivadas a manter suas alterações em um fork do git do
     CPython ou como arquivos de patch, como faria em qualquer outra
     alteração na árvore de fontes.

     (Contribuição de Antoine Pitrou em bpo-32430(7).)

   * Funções que convertem um número Python em número inteiro C, como
     *note PyLong_AsLong(): 360, e funções de análise de argumentos,
     como *note PyArg_ParseTuple(): 571, com unidades de formato de
     conversão de números inteiros, como ‘'i'’, agora usarão o método
     especial *note __index__(): 71d. em vez de *note __int__(): 71c, se
     disponível.  O aviso de descontinuação será emitido para objetos
     com o método ‘__int__()’, mas sem o método ‘__index__()’ (como
     *note Decimal: 29d. e *note Fraction: 1e7. ).  *note
     PyNumber_Check(): a70. agora retornará ‘1’ para objetos
     implementando ‘__index__()’.  *note PyNumber_Long(): a71, *note
     PyNumber_Float(): a72. e *note PyFloat_AsDouble(): a73. agora
     também usam o método ‘__index__()’, se disponível.  (Contribuição
     de Serhiy Storchaka em bpo-36048(8) e bpo-20092(9).)

   * Objetos de tipo alocado a heap agora aumentarão sua contagem de
     referências em *note PyObject_Init(): a74. (e sua macro paralela
     ‘PyObject_INIT’) em vez de em *note PyType_GenericAlloc(): a75.  Os
     tipos que modificam a alocação ou desalocação de instância podem
     precisar ser ajustados.  (Contribuição de Eddie Elizondo em
     bpo-35810(10).)

   * A nova função ‘PyCode_NewWithPosOnlyArgs()’ permite criar objetos
     de código como ‘PyCode_New()’, mas com um parâmetro extra
     'posonlyargcount' para indicar o número de argumentos somente
     posicionais.  (Contribuição de Pablo Galindo em bpo-37221(11).)

   * ‘Py_SetPath()’ agora define *note sys.executable: 3b8. para o
     caminho completo do programa (*note Py_GetProgramFullPath(): 3b7.)
     em vez do nome do programa (*note Py_GetProgramName(): 3b9.).
     (Contribuição de Victor Stinner em bpo-38234(12).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36707

   (2) https://bugs.python.org/issue?@action=redirect&bpo=35134

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35081

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35059

   (5) https://bugs.python.org/issue?@action=redirect&bpo=35713

   (6) https://bugs.python.org/issue?@action=redirect&bpo=33818

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32430

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36048

   (9) https://bugs.python.org/issue?@action=redirect&bpo=20092

   (10) https://bugs.python.org/issue?@action=redirect&bpo=35810

   (11) https://bugs.python.org/issue?@action=redirect&bpo=37221

   (12) https://bugs.python.org/issue?@action=redirect&bpo=38234


File: python.info,  Node: Descontinuados<8>,  Next: Remoção de APIs e recursos,  Prev: Mudanças a construções e API C,  Up: O que há de novo no Python 3 8

1.6.8 Descontinuados
--------------------

   * O comando distutils ‘bdist_wininst’ agora está descontinuado; use
     ‘bdist_wheel’ (pacotes wheel).  (Contribuição de Victor Stinner em
     bpo-37481(1).)

   * Os métodos descontinuados ‘getchildren()’ e ‘getiterator()’ no
     módulo *note ElementTree: 125. agora emitem um *note
     DeprecationWarning: 1a5. em vez de *note PendingDeprecationWarning:
     8ce.  Eles serão removidos no Python 3.9.  (Contribuição de Serhiy
     Storchaka em bpo-29209(2).)

   * Passar um objeto que não é uma instância de *note
     concurrent.futures.ThreadPoolExecutor: 742. para *note
     loop.set_default_executor(): 743. foi descontinuado e será proibido
     no Python 3.9.  (Contribuição de Elvis Pranskevichus em
     bpo-34075(3).)

   * Os métodos *note __getitem__(): 283. de *note
     xml.dom.pulldom.DOMEventStream: 735, *note
     wsgiref.util.FileWrapper: 736. e *note fileinput.FileInput: 737.
     foram descontinuados.

     As implementações desses métodos têm ignorado seu parâmetro 'index'
     e retornado o próximo item.  (Contribuição de Berker Peksag em
     bpo-9372(4).)

   * A classe *note typing.NamedTuple: 2b0. descontinuou o atributo
     ‘_field_types’ em favor do atributo ‘__annotations__’ que possui as
     mesmas informações.  (Contribuição de Raymond Hettinger em
     bpo-36320(5).)

   * As classes ‘Num’, ‘Str’, ‘Bytes’, ‘NameConstant’ e ‘Ellipsis’ do
     módulo *note ast: 8. são consideradas descontinuadas e serão
     removidos em versões futuras do Python.  A *note Constant: 2b9.
     deve ser usado.  (Contribuição de Serhiy Storchaka em
     bpo-32892(6).)

   * Os métodos ‘visit_Num()’, ‘visit_Str()’, ‘visit_Bytes()’,
     ‘visit_NameConstant()’ e ‘visit_Ellipsis()’ da classe *note
     ast.NodeVisitor: a77. estão agora descontinuados e não serão
     chamados nas versões futuras do Python.  Adicione o método *note
     visit_Constant(): a78. para manipular todos os nós constantes.
     (Contribuição de Serhiy Storchaka em bpo-36917(7).)

   * O *note decorador: 731. ‘@asyncio.coroutine’ está descontinuado e
     será removido na versão 3.10.  Em vez de ‘@asyncio.coroutine’, use
     *note async def: 5d1.  (Contribuição de Andrew Svetlov em
     bpo-36921(8).)

   * Em *note asyncio: a, a passagem explícita de um argumento 'loop'
     foi descontinuado e será removido na versão 3.10 para os seguintes:
     *note asyncio.sleep(): a79, *note asyncio.gather(): 5fd, *note
     asyncio.shield(): a7a, *note asyncio.wait_for(): 5ff, *note
     asyncio.wait(): 47f, *note asyncio.as_completed(): 1aa, *note
     asyncio.Task: 1be, *note asyncio.Lock: a7b, *note asyncio.Event:
     a7c, *note asyncio.Condition: a7d, *note asyncio.Semaphore: a7e,
     *note asyncio.BoundedSemaphore: a7f, *note asyncio.Queue: a80,
     *note asyncio.create_subprocess_exec(): a81. e *note
     asyncio.create_subprocess_shell(): a82.

   * A passagem explícita dos objetos da corrotina para *note
     asyncio.wait(): 47f. foi descontinuada e será removida na versão
     3.11.  (Contribuição de Yury Selivanov em bpo-34790(9).)

   * As seguintes funções e métodos estão descontinuados no módulo *note
     gettext: 63.: ‘lgettext()’, ‘ldgettext()’, ‘lngettext()’ e
     ‘ldngettext()’.  Eles retornam bytes codificados, e é possível que
     você receba exceções inesperadas relacionadas ao Unicode se houver
     problemas de codificação com as strings traduzidas.  É muito melhor
     usar alternativas que retornam strings Unicode no Python 3.  Essas
     funções estão desativadas há muito tempo.

     A função ‘bind_textdomain_codeset()’, os métodos
     ‘NullTranslations.output_charset()’ e
     ‘NullTranslations.set_output_charset()’ e o parâmetro 'codeset' das
     funções *note translation(): a83. e *note install(): a84. também
     estão descontinuados, pois são usados apenas para as funções
     ‘l*gettext()’.  (Contribuição de Serhiy Storchaka em
     bpo-33710(10).)

   * O método ‘isAlive()’ de *note threading.Thread: 953. foi
     descontinuado.  (Contribuição de Donghee Na em bpo-35283(11).)

   * Muitas funções internas e de extensão que recebem argumentos
     inteiros agora emitem um aviso de descontinuidade para objetos de
     *note Decimal: 29d, de *note Fraction: 1e7. e quaisquer outros
     objetos que possam ser convertidos apenas em números inteiros com
     perda (por exemplo, que possuem o método *note __int__(): 71c, mas
     não têm o método *note __index__(): 71d.).  Em uma versão futura,
     haverá erros.  (Contribuição de Serhiy Storchaka em bpo-36048(12).)

   * Descontinuada a passagem dos seguintes argumentos como argumentos
     nomeados:

        - 'func' em *note functools.partialmethod(): a85, *note
          weakref.finalize(): a86, *note profile.Profile.runcall(): a87,
          ‘cProfile.Profile.runcall()’, *note bdb.Bdb.runcall(): a88,
          *note trace.Trace.runfunc(): a89. e *note curses.wrapper():
          a8a.

        - 'function' em *note unittest.TestCase.addCleanup(): a8b.

        - 'fn' no método *note submit(): a8c. de *note
          concurrent.futures.ThreadPoolExecutor: 742. e *note
          concurrent.futures.ProcessPoolExecutor: 8f4.

        - 'callback' em *note contextlib.ExitStack.callback(): a8d,
          ‘contextlib.AsyncExitStack.callback()’ e *note
          contextlib.AsyncExitStack.push_async_callback(): a8e.

        - 'c' e 'typeid' no metódo ‘create()’ de
          ‘multiprocessing.managers.Server’ e
          ‘multiprocessing.managers.SharedMemoryServer’.

        - 'obj' em *note weakref.finalize(): a86.

     Em versões futuras do Python, elas serão *note somente-posicionais:
     a8f.  (Contribuição de Serhiy Storchaka em bpo-36492(13).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37481

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29209

   (3) https://bugs.python.org/issue?@action=redirect&bpo=34075

   (4) https://bugs.python.org/issue?@action=redirect&bpo=9372

   (5) https://bugs.python.org/issue?@action=redirect&bpo=36320

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32892

   (7) https://bugs.python.org/issue?@action=redirect&bpo=36917

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36921

   (9) https://bugs.python.org/issue?@action=redirect&bpo=34790

   (10) https://bugs.python.org/issue?@action=redirect&bpo=33710

   (11) https://bugs.python.org/issue?@action=redirect&bpo=35283

   (12) https://bugs.python.org/issue?@action=redirect&bpo=36048

   (13) https://bugs.python.org/issue?@action=redirect&bpo=36492


File: python.info,  Node: Remoção de APIs e recursos,  Next: Portando para o Python 3 8,  Prev: Descontinuados<8>,  Up: O que há de novo no Python 3 8

1.6.9 Remoção de APIs e recursos
--------------------------------

Os seguintes recursos e APIs foram removidos do Python 3.8:

   * A partir do Python 3.3, a importação de ABCs de *note collections:
     1d. foi descontinuada e a importação deve ser feita de *note
     collections.abc: 1e.  A possibilidade de importar de coleções foi
     marcada para remoção em 3.8, mas foi adiada para 3.9.  (Veja
     gh-81134(1).)

   * O módulo ‘macpath’, descontinuado no Python 3.7, foi removido.
     (Contribuição de Victor Stinner em bpo-35471(2).)

   * A função ‘platform.popen()’ foi removida, após ter sido
     descontinuada desde o Python 3.3: em vez disso, use *note
     os.popen(): a91.  (Contribuição de Victor Stinner em bpo-35345(3).)

   * A função ‘time.clock()’ foi removida, após ter sido descontinuada
     desde o Python 3.3: use *note time.perf_counter(): a92. ou *note
     time.process_time(): a93, dependendo de suas necessidades, para ter
     um comportamento bem definido.  (Contribuição de Matthias
     Bussonnier em bpo-36895(4).)

   * O script ‘pyvenv’ foi removido em favor do ‘python3.8 -m venv’ para
     ajudar a eliminar a confusão sobre a qual interpretador Python o
     script ‘pyvenv’ está associado.  (Contribuição de Brett Cannon em
     bpo-25427(5).)

   * ‘parse_qs’, ‘parse_qsl’ e ‘escape’ foram removidos do módulo ‘cgi’.
     Eles foram descontinuados no Python 3.2 ou mais antigo.  Eles devem
     ser importados dos módulos ‘urllib.parse’ e ‘html’.

   * A função ‘filemode’ foi removida do módulo *note tarfile: de.  Não
     é documentada e foi descontinuada desde o Python 3.3.

   * O construtor *note XMLParser: a5e. não aceita mais o argumento
     'html'.  Isso nunca teve efeito e foi descontinuado no Python 3.4.
     Todos os outros parâmetros agora são *note somente-nomeados: 2a5.
     (Contribuição de Serhiy Storchaka em bpo-29209(6).)

   * Removido o método ‘doctype()’ de *note XMLParser: a5e.
     (Contribuição de Serhiy Storchaka em bpo-29209(7).)

   * O codec “unicode_internal” foi removido.  (Contribuição de Inada
     Naoki em bpo-36297(8).)

   * Os objetos ‘Cache’ e ‘Statement’ do módulo *note sqlite3: cf. não
     expostos para o usuário.  (Contribuição de Aviv Palivoda em
     bpo-30262(9).)

   * O argumento nomeado ‘bufsize’ de *note fileinput.input(): 802. e
     *note fileinput.FileInput(): 737, que era ignorado e estava
     descontinuado desde o Python 3.6, foi removido.  bpo-36952(10)
     (Contribuição de Matthias Bussonnier.)

   * As funções ‘sys.set_coroutine_wrapper()’ e
     ‘sys.get_coroutine_wrapper()’ descontinuadas no Python 3.7 foram
     removidas; bpo-36933(11) (Contribuição de Matthias Bussonnier.)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/81134

   (2) https://bugs.python.org/issue?@action=redirect&bpo=35471

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35345

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36895

   (5) https://bugs.python.org/issue?@action=redirect&bpo=25427

   (6) https://bugs.python.org/issue?@action=redirect&bpo=29209

   (7) https://bugs.python.org/issue?@action=redirect&bpo=29209

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36297

   (9) https://bugs.python.org/issue?@action=redirect&bpo=30262

   (10) https://bugs.python.org/issue?@action=redirect&bpo=36952

   (11) https://bugs.python.org/issue?@action=redirect&bpo=36933


File: python.info,  Node: Portando para o Python 3 8,  Next: Alterações notáveis no Python 3 8 1,  Prev: Remoção de APIs e recursos,  Up: O que há de novo no Python 3 8

1.6.10 Portando para o Python 3.8
---------------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções que podem exigir alterações no seu código.

* Menu:

* Alterações no comportamento do Python::
* Alterações na API Python: Alterações na API Python<5>.
* Alterações na API C: Alterações na API C<10>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<6>.
* Ferramentas e daemons: Ferramentas e daemons<2>.


File: python.info,  Node: Alterações no comportamento do Python,  Next: Alterações na API Python<5>,  Up: Portando para o Python 3 8

1.6.10.1 Alterações no comportamento do Python
..............................................

   * Expressões 'yield' (ambas as cláusulas ‘yield’ e ‘yield from’)
     agora não são permitidas nas compreensões e expressões geradoras
     (além da expressão iterável na cláusula mais à esquerda ‘for’).
     (Contribuição de Serhiy Storchaka em bpo-10544(1).)

   * Agora, o compilador produz um *note SyntaxWarning: 466. quando
     verificações de identidade (‘is’ e ‘is not’) são usadas com certos
     tipos de literais (por exemplo, strings, números).  Geralmente,
     eles podem funcionar acidentalmente no CPython, mas não são
     garantidos pelas especificações da linguagem.  O aviso aconselha os
     usuários a usar testes de igualdade (‘==’ e ‘!=’).  (Contribuição
     de Serhiy Storchaka em bpo-34850(2).)

   * O interpretador do CPython pode engolir exceções em algumas
     circunstâncias.  No Python 3.8, isso acontece em menos casos.  Em
     particular, as exceções levantadas ao obter o atributo do
     dicionário de tipos não são mais ignoradas.  (Contribuição de
     Serhiy Storchaka em bpo-35459(3).)

   * Removidas as implementações ‘__str__’ dos tipos embutidos *note
     bool: 468, *note int: 257, *note float: 2f7, *note complex: 2f8. e
     poucas classes da biblioteca padrão.  Agora eles herdam ‘__str__()’
     de *note object: a96.  Como resultado, definir o método
     ‘__repr__()’ na subclasse dessas classes afetará sua representação
     de string.  (Contribuição de Serhiy Storchaka em bpo-36793(4).)

   * No AIX, *note sys.platform: a97. não contém mais a versão
     principal.  É sempre ‘'aix'’, em vez de ‘'aix3'’ ..  ‘'aix7'’.
     Como as versões mais antigas do Python incluem o número da versão,
     é recomendável usar sempre ‘sys.platform.startswith('aix')’.
     (Contribuição de M. Felt em bpo-36588(5).)

   * ‘PyEval_AcquireLock()’ e ‘PyEval_AcquireThread()’ agora encerram a
     thread atual se chamado enquanto o interpretador está finalizando,
     tornando-os consistentes com *note PyEval_RestoreThread(): 3a9,
     *note Py_END_ALLOW_THREADS(): a98. e *note PyGILState_Ensure():
     3ab.  Se esse comportamento não for desejado, proteja a chamada
     verificando ‘_Py_IsFinalizing()’ ou *note sys.is_finalizing(): a99.
     (Contribuição de Joannah Nanjekye em bpo-36475(6).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10544

   (2) https://bugs.python.org/issue?@action=redirect&bpo=34850

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35459

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36793

   (5) https://bugs.python.org/issue?@action=redirect&bpo=36588

   (6) https://bugs.python.org/issue?@action=redirect&bpo=36475


File: python.info,  Node: Alterações na API Python<5>,  Next: Alterações na API C<10>,  Prev: Alterações no comportamento do Python,  Up: Portando para o Python 3 8

1.6.10.2 Alterações na API Python
.................................

   * A função *note os.getcwdb(): a9b. agora usa a codificação UTF-8 no
     Windows, em vez da página de códigos ANSI: veja PEP 529(1) para a
     justificativa.  A função não é mais descontinuada no Windows.
     (Contribuição de Victor Stinner em bpo-37412(2).)

   * *note subprocess.Popen: 199. agora pode usar *note
     os.posix_spawn(): 220. em alguns casos para melhor desempenho.  No
     Subsistema Windows para Linux e na Emulação de Usuário QEMU, o
     construtor *note Popen: 199. usando *note os.posix_spawn(): 220.
     não levanta mais uma exceção em erros como “missing program”
     (programa ausente).  Em vez disso, o processo filho falha com um
     *note returncode: a9c. diferente de zero.  (Contribuição de Joannah
     Nanjekye e Victor Stinner em bpo-35537(3).)

   * O argumento 'preexec_fn' de * *note subprocess.Popen: 199. não é
     mais compatível com subinterpretadores.  O uso do parâmetro em um
     subinterpretador agora levanta *note RuntimeError: 195.
     (Contribuição de Eric Snow em bpo-34651(4), modificado por
     Christian Heimes em bpo-37951(5).)

   * O método *note imaplib.IMAP4.logout(): a9d. não ignora mais
     silenciosamente exceções arbitrárias.  (Contribuição de Victor
     Stinner em bpo-36348(6).)

   * A função ‘platform.popen()’ foi removida, após ter sido
     descontinuada desde o Python 3.3: em vez disso, use *note
     os.popen(): a91.  (Contribuição de Victor Stinner em bpo-35345(7).)

   * A função ‘Statistics.mode()’ não levanta mais uma exceção quando
     dados multimodais são fornecidos.  Em vez disso, ela retorna o
     primeiro modo encontrado nos dados de entrada.  (Contribuição de
     Raymond Hettinger em bpo-35892(8).)

   * O método *note selection(): a9e. da classe *note
     tkinter.ttk.Treeview: a9f. não recebe mais argumentos.  Seu uso com
     argumentos para alterar a seleção foi descontinuado no Python 3.6.
     Use métodos especializados como *note selection_set(): aa0. para
     alterar a seleção.  (Contribuição de Serhiy Storchaka em
     bpo-31508(9).)

   * Os métodos *note writexml(): aa1, *note toxml(): aa2. e *note
     toprettyxml(): aa3. de *note xml.dom.minidom: 122. e o método *note
     write(): aa4. de *note xml.etree.ElementTree: 125. agora preservam
     a ordem dos atributos especificada pelo usuário.  (Contribuição de
     Diego Rojas e Raymond Hettinger em bpo-34160(10).)

   * Um banco de dados *note dbm.dumb: 32. aberto com sinalizadores
     ‘'r'’ agora é somente leitura.  *note dbm.dumb.open(): aa5. com os
     sinalizadores ‘'r'’ e ‘'w'’ não cria mais um banco de dados se ele
     não existir.  (Contribuição de Serhiy Storchaka em bpo-32749(11).)

   * O método ‘doctype()’ definido em uma subclasse de *note XMLParser:
     a5e. não será mais chamado e emitirá um *note RuntimeWarning: 1bd.
     em vez de um *note DeprecationWarning: 1a5.  Defina o método *note
     doctype(): aa6. em um alvo para manipular uma declaração doctype
     XML. (Contribuição de Serhiy Storchaka em bpo-29209(12).)

   * Uma *note RuntimeError: 195. agora é levantada quando a metaclasse
     personalizada não fornece a entrada ‘__classcell__’ no espaço de
     nomes passado para ‘type.__new__’.  Uma *note DeprecationWarning:
     1a5. era emitida no Python 3.6-3.7.  (Contribuição de Serhiy
     Storchaka em bpo-23722(13).)

   * A classe *note cProfile.Profile: 9eb. agora pode ser usada como um
     gerenciador de contexto.  (Contribuição de Scott Sanderson em
     bpo-29235(14).)

   * *note shutil.copyfile(): a63, *note shutil.copy(): a64, *note
     shutil.copy2(): a65, *note shutil.copytree(): a33. e *note
     shutil.copytree(): a33. usam chamadas de sistema de “cópia rápido”
     específica da plataforma (veja a seção *note Operações de cópia
     eficientes dependentes da plataforma: a67.).

   * O tamanho padrão do buffer de *note shutil.copyfile(): a63. no
     Windows foi alterado de 16 KiB para 1 MiB.

   * A estrutura de ‘PyGC_Head’ mudou completamente.  Todo o código que
     tocava no membro struct deve ser reescrito.  (Veja bpo-33597(15).)

   * A estrutura de *note PyInterpreterState: 8c2. foi movida para os
     arquivos de cabeçalho “internal” (especificamente
     Include/internal/pycore_pystate.h).  Um ‘PyInterpreterState’ opaco
     ainda está disponível como parte da API pública (e ABI estável).
     Os documentos indicam que nenhum dos campos da estrutura é público,
     por isso esperamos que ninguém os tenha usado.  No entanto, se você
     confia em um ou mais desses campos em particular e não tiver
     alternativa, abra um relatório de erro no BPO. Vamos trabalhar para
     ajudá-lo a ajustar (possivelmente incluindo a adição de funções de
     acessador à API pública).  (Veja bpo-35886(16).)

   * O método *note mmap.flush(): aa7. agora retorna ‘None’ com êxito e
     levanta uma exceção no erro em todas as plataformas.
     Anteriormente, seu comportamento dependia da plataforma: um valor
     diferente de zero era retornado com êxito; zero era retornado com
     erro no Windows.  Um valor zero era retornado com sucesso; uma
     exceção era levanta no caso de erro no Unix.  (Contribuição de
     Berker Peksag em bpo-2122(17).)

   * Os módulos *note xml.dom.minidom: 122. e *note xml.sax: 129. não
     mais processam entidades externas por padrão.  (Contribuição de
     Christian Heimes em bpo-17239(18).)

   * Excluir uma chave de um banco de dados *note dbm: 31. somente
     leitura (*note dbm.dumb: 32, *note dbm.gnu: 33. ou *note dbm.ndbm:
     34.) levanta ‘error’ (*note dbm.dumb.error: aa8, *note
     dbm.gnu.error: aa9. ou *note dbm.ndbm.error: aaa.) em vez de *note
     KeyError: 344.  (Contribuição de Xiang Zhang em bpo-33106(19).)

   * AST foi simplificado para literais.  Todas as constantes serão
     representadas como instâncias de *note ast.Constant: 2b9.
     Instanciar classes antigas ‘Num’, ‘Str’, ‘Bytes’, ‘NameConstant’ e
     ‘Ellipsis’ retornará uma instância de ‘Constant’.  (Contribuição de
     Serhiy Storchaka em bpo-32892(20).)

   * *note expanduser(): a1e. no Windows agora prefere a variável de
     ambiente ‘USERPROFILE’ e não usa ‘HOME’, que normalmente não é
     definido para contas de usuário comuns.  (Contribuição de Anthony
     Sottile em bpo-36264(21).)

   * A exceção *note asyncio.CancelledError: 1b8. agora herda de *note
     BaseException: 5bb. em vez de *note Exception: 9e2. e não mais
     herda de *note concurrent.futures.CancelledError: 9e3.
     (Contribuição de Yury Selivanov em bpo-32528(22).)

   * A função *note asyncio.wait_for(): 5ff. agora aguarda corretamente
     o cancelamento ao usar uma instância de *note asyncio.Task: 1be.
     Anteriormente, ao atingir tempo limite, ele era cancelado e
     devolvido imediatamente.  (Contribuição de Elvis Pranskevichus em
     bpo-32751(23).)

   * A função *note asyncio.BaseTransport.get_extra_info(): aab. agora
     retorna um objeto soquete seguro de usar quando ‘socket’ é passado
     para o parâmetro 'name'.  (Contribuição de Yury Selivanov em
     bpo-37027(24).)

   * *note asyncio.BufferedProtocol: aac. foi promovida a API estável.

   * As dependências de DLL para módulos de extensão e DLLs carregadas
     com *note ctypes: 2a. no Windows agora são resolvidas com mais
     segurança.  Somente os caminhos do sistema, o diretório que contém
     o arquivo DLL ou PYD e os diretórios adicionados com *note
     add_dll_directory(): 9f2. são pesquisados por dependências de tempo
     de carregamento.  Especificamente, ‘PATH’ e o diretório de trabalho
     atual não são mais usados, e as modificações nelas não terão mais
     efeito na resolução normal da DLL. Se seu aplicativo conta com
     esses mecanismos, você deve verificar *note add_dll_directory():
     9f2. e, se existir, use-o para adicionar seu diretório DLLs ao
     carregar sua biblioteca.  Observe que os usuários do Windows 7
     precisarão garantir que o Windows Update KB2533623 esteja instalado
     (isso também é verificado pelo instalador).  (Contribuição de Steve
     Dower em bpo-36085(25).)

   * Os arquivos de cabeçalho e as funções relacionadas ao pgen foram
     removidos após sua substituição por uma implementação pura do
     Python.  (Contribuição de Pablo Galindo em bpo-36623(26).)

   * *note types.CodeType: 2df. possui um novo parâmetro na segunda
     posição do construtor ('posonlyargcount *) para suportar argumentos
     apenas de posição definidos em :pep:'570'.  O primeiro argumento
     (*argcount') agora representa o número total de argumentos
     posicionais (incluindo argumentos somente posicionais).  O novo
     método ‘replace()’ de *note types.CodeType: 2df. pode ser usado
     para tornar o código à prova de futuro.

   * O parâmetro ‘digestmod’ para *note hmac.new(): aae. não usa mais o
     resumo MD5 por padrão.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0529/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=37412

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35537

   (4) https://bugs.python.org/issue?@action=redirect&bpo=34651

   (5) https://bugs.python.org/issue?@action=redirect&bpo=37951

   (6) https://bugs.python.org/issue?@action=redirect&bpo=36348

   (7) https://bugs.python.org/issue?@action=redirect&bpo=35345

   (8) https://bugs.python.org/issue?@action=redirect&bpo=35892

   (9) https://bugs.python.org/issue?@action=redirect&bpo=31508

   (10) https://bugs.python.org/issue?@action=redirect&bpo=34160

   (11) https://bugs.python.org/issue?@action=redirect&bpo=32749

   (12) https://bugs.python.org/issue?@action=redirect&bpo=29209

   (13) https://bugs.python.org/issue?@action=redirect&bpo=23722

   (14) https://bugs.python.org/issue?@action=redirect&bpo=29235

   (15) https://bugs.python.org/issue?@action=redirect&bpo=33597

   (16) https://bugs.python.org/issue?@action=redirect&bpo=35886

   (17) https://bugs.python.org/issue?@action=redirect&bpo=2122

   (18) https://bugs.python.org/issue?@action=redirect&bpo=17239

   (19) https://bugs.python.org/issue?@action=redirect&bpo=33106

   (20) https://bugs.python.org/issue?@action=redirect&bpo=32892

   (21) https://bugs.python.org/issue?@action=redirect&bpo=36264

   (22) https://bugs.python.org/issue?@action=redirect&bpo=32528

   (23) https://bugs.python.org/issue?@action=redirect&bpo=32751

   (24) https://bugs.python.org/issue?@action=redirect&bpo=37027

   (25) https://bugs.python.org/issue?@action=redirect&bpo=36085

   (26) https://bugs.python.org/issue?@action=redirect&bpo=36623


File: python.info,  Node: Alterações na API C<10>,  Next: Alterações de bytecode do CPython<6>,  Prev: Alterações na API Python<5>,  Up: Portando para o Python 3 8

1.6.10.3 Alterações na API C
............................

   * A estrutura *note PyCompilerFlags: ab0. recebeu um novo campo
     'cf_feature_version'.  Ele deve ser inicializado para
     ‘PY_MINOR_VERSION’.  O campo é ignorado por padrão e é usado se e
     somente se o sinalizador ‘PyCF_ONLY_AST’ estiver definido em
     'cf_flags'.  (Contribuição de Guido van Rossum em bpo-35766(1).)

   * A função ‘PyEval_ReInitThreads()’ foi removida da API C. Não deve
     ser chamada explicitamente: use *note PyOS_AfterFork_Child(): 3fb.
     (Contribuição de Victor Stinner em bpo-36728(2).)

   * No Unix, as extensões C não estão mais vinculadas ao libpython,
     exceto no Android e Cygwin.  Quando o Python é incorporado,
     ‘libpython’ não deve ser carregado com ‘RTLD_LOCAL’, mas
     ‘RTLD_GLOBAL’.  Anteriormente, usando ‘RTLD_LOCAL’, já não era
     possível carregar extensões C que não estavam vinculadas a
     ‘libpython’, como extensões C da biblioteca padrão criada pela
     seção ‘*shared*’ de ‘Modules/Setup’.  (Contribuição de Victor
     Stinner em bpo-21536(3).)

   * O uso de variantes ‘#’ de formatos na análise ou construção de
     valor (por exemplo, *note PyArg_ParseTuple(): 571, *note
     Py_BuildValue(): 8ac, *note PyObject_CallFunction(): 39e, etc.)
     sem ‘PY_SSIZE_T_CLEAN’ definido agora levanta ‘DeprecationWarning’.
     Será removido em 3.10 ou 4.0.  Leia *note Análise de argumentos e
     construção de valores: 8ad. para detalhes.  (Contribuição de Inada
     Naoki em bpo-36381(4).)

   * Instâncias de tipos alocados em heap (como aquelas criadas com
     *note PyType_FromSpec(): 57d.) mantêm uma referência ao seu objeto
     de tipo.  O aumento da contagem de referências desses objetos de
     tipo foi movido de *note PyType_GenericAlloc(): a75. para as
     funções de nível mais baixo, *note PyObject_Init(): a74. e
     ‘PyObject_INIT’.  Isso faz com que os tipos criados por meio de
     *note PyType_FromSpec(): 57d. se comportem como outras classes em
     código gerenciado.

     *note Tipos alocados estaticamente: 77f. não são afetados.

     Para a grande maioria dos casos, não deve haver efeito colateral.
     No entanto, tipos que aumentam manualmente a contagem de referência
     após alocar uma instância (talvez para solucionar o bug) agora
     podem se tornar imortais.  Para evitar isso, essas classes precisam
     chamar Py_DECREF no objeto de tipo durante a desalocação da
     instância.

     Para portar corretamente esses tipos para o 3.8, aplique as
     seguintes alterações:

        * Remove *note Py_INCREF: 56e. do objeto de tipo após alocar uma
          instância, se houver.  Isso pode ocorrer após chamar *note
          PyObject_New: 98c, *note PyObject_NewVar: 98d, *note
          PyObject_GC_New(): ab1, *note PyObject_GC_NewVar(): ab2. ou
          qualquer outro alocador personalizado que use *note
          PyObject_Init(): a74. ou ‘PyObject_INIT’.

          Exemplo:

               static foo_struct *
               foo_new(PyObject *type) {
                   foo_struct *foo = PyObject_GC_New(foo_struct, (PyTypeObject *) type);
                   if (foo == NULL)
                       return NULL;
               #if PY_VERSION_HEX < 0x03080000
                   // Solução de contorno para o issue 35810 do Python; não mais necessário no Python 3.8
                   PY_INCREF(type)
               #endif
                   return foo;
               }

        * Certifica-se de que todas as funções ‘tp_dealloc’
          personalizadas de tipos alocados em heap diminuam a contagem
          de referências do tipo.

          Exemplo:

               static void
               foo_dealloc(foo_struct *instance) {
                   PyObject *type = Py_TYPE(instance);
                   PyObject_GC_Del(instance);
               #if PY_VERSION_HEX >= 0x03080000
                   // Isso não era necessário antes do Python 3.8 (issue 35810 do Python)
                   Py_DECREF(type);
               #endif
               }

     (Contribuição de Eddie Elizondo em bpo-35810(5).)

   * A macro *note Py_DEPRECATED(): ab3. foi implementada para MSVC. A
     macro agora deve ser colocada antes do nome do símbolo.

     Exemplo:

          Py_DEPRECATED(3.8) PyAPI_FUNC(int) Py_OldFunction(void);

     (Contribuição de Zackery Spytz em bpo-33407(6).)

   * O interpretador não pretende mais dar suporte à compatibilidade
     binária de tipos de extensão nas liberações de recursos.  O *note
     PyTypeObject: ab4. exportado por um módulo de extensão de terceiros
     deve ter todos os slots esperados na versão atual do Python,
     incluindo *note tp_finalize: ab5. (*note Py_TPFLAGS_HAVE_FINALIZE:
     3f2. não é mais verificado antes de ler *note tp_finalize: ab5.).

     (Contribuição de Antoine Pitrou em bpo-32388(7).)

   * As funções ‘PyNode_AddChild()’ e ‘PyParser_AddToken()’ agora
     aceitam dois argumentos adicionais ‘int’ 'end_lineno' e
     'end_col_offset'.

   * O arquivo ‘libpython38.a’ para permitir que as ferramentas do MinGW
     se vinculem diretamente a ‘python38.dll’ não está mais incluído na
     distribuição regular do Windows.  Se você precisar deste arquivo,
     ele poderá ser gerado com as ferramentas ‘gendef’ e ‘dlltool’, que
     fazem parte do pacote binutils do MinGW:

          gendef - python38.dll > tmp.def
          dlltool --dllname python38.dll --def tmp.def --output-lib libpython38.a

     A localização de um arquivo ‘pythonXY.dll’ dependerá das opções de
     instalação e da versão e idioma do Windows.  Consulte *note
     Utilizando Python no Windows: ab6. para mais informações.  A
     biblioteca resultante deve ser colocada no mesmo diretório que
     ‘pythonXY.lib’, que geralmente é o diretório ‘libs’ na sua
     instalação do Python.

     (Contribuição de Steve Dower em bpo-37351(8).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35766

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36728

   (3) https://bugs.python.org/issue?@action=redirect&bpo=21536

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36381

   (5) https://bugs.python.org/issue?@action=redirect&bpo=35810

   (6) https://bugs.python.org/issue?@action=redirect&bpo=33407

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32388

   (8) https://bugs.python.org/issue?@action=redirect&bpo=37351


File: python.info,  Node: Alterações de bytecode do CPython<6>,  Next: Ferramentas e daemons<2>,  Prev: Alterações na API C<10>,  Up: Portando para o Python 3 8

1.6.10.4 Alterações de bytecode do CPython
..........................................

   * O loop do interpretador foi simplificado movendo a lógica de
     desenrolar a pilha de blocos no compilador.  O compilador agora
     emite instruções explícitas para ajustar a pilha de valores e
     chamar o código de limpeza para *note break: ab8, *note continue:
     9d1. e *note return: 9d6.

     Removidos os códigos de operação ‘BREAK_LOOP’, ‘CONTINUE_LOOP’,
     ‘SETUP_LOOP’ e ‘SETUP_EXCEPT’.  Adicionados novos códigos de opção
     ‘ROT_FOUR’, ‘BEGIN_FINALLY’, ‘CALL_FINALLY’ e ‘POP_FINALLY’.
     Alterado o comportamento de ‘END_FINALLY’ e ‘WITH_CLEANUP_START’.

     (Contribuição de Mark Shannon, Antoine Pitrou e Serhiy Storchaka em
     bpo-17611(1).)

   * Adicionado novo código de operação *note END_ASYNC_FOR: ab9. para
     lidar com exceções geradas ao aguardar um próximo item em um loop
     *note async for: aba.  (Contribuição de Serhiy Storchaka em
     bpo-33041(2).)

   * O *note MAP_ADD: abb. agora espera o valor como o primeiro elemento
     na pilha e a chave como o segundo elemento.  Essa alteração foi
     feita para que a chave seja sempre avaliada antes do valor na
     compreensão do dicionário, conforme proposto em PEP 572(3).
     (Contribuição de Jörn Heissler em bpo-35224(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17611

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33041

   (3) https://peps.python.org/pep-0572/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35224


File: python.info,  Node: Ferramentas e daemons<2>,  Prev: Alterações de bytecode do CPython<6>,  Up: Portando para o Python 3 8

1.6.10.5 Ferramentas e daemons
..............................

Adicionado um script de benchmark para cronometrar várias maneiras de
acessar variáveis: ‘Tools/scripts/var_access_benchmark.py’.
(Contribuição de Raymond Hettinger em bpo-35884(1).)

Aqui está um resumo das melhorias de desempenho desde Python 3.3:

     Python version                       3.3     3.4     3.5     3.6     3.7     3.8
     --------------                       ---     ---     ---     ---     ---     ---

     Variable and attribute read access:
         read_local                       4.0     7.1     7.1     5.4     5.1     3.9
         read_nonlocal                    5.3     7.1     8.1     5.8     5.4     4.4
         read_global                     13.3    15.5    19.0    14.3    13.6     7.6
         read_builtin                    20.0    21.1    21.6    18.5    19.0     7.5
         read_classvar_from_class        20.5    25.6    26.5    20.7    19.5    18.4
         read_classvar_from_instance     18.5    22.8    23.5    18.8    17.1    16.4
         read_instancevar                26.8    32.4    33.1    28.0    26.3    25.4
         read_instancevar_slots          23.7    27.8    31.3    20.8    20.8    20.2
         read_namedtuple                 68.5    73.8    57.5    45.0    46.8    18.4
         read_boundmethod                29.8    37.6    37.9    29.6    26.9    27.7

     Variable and attribute write access:
         write_local                      4.6     8.7     9.3     5.5     5.3     4.3
         write_nonlocal                   7.3    10.5    11.1     5.6     5.5     4.7
         write_global                    15.9    19.7    21.2    18.0    18.0    15.8
         write_classvar                  81.9    92.9    96.0   104.6   102.1    39.2
         write_instancevar               36.4    44.6    45.8    40.0    38.9    35.5
         write_instancevar_slots         28.7    35.6    36.1    27.3    26.6    25.7

     Data structure read access:
         read_list                       19.2    24.2    24.5    20.8    20.8    19.0
         read_deque                      19.9    24.7    25.5    20.2    20.6    19.8
         read_dict                       19.7    24.3    25.7    22.3    23.0    21.0
         read_strdict                    17.9    22.6    24.3    19.5    21.2    18.9

     Data structure write access:
         write_list                      21.2    27.1    28.5    22.5    21.6    20.0
         write_deque                     23.8    28.7    30.1    22.7    21.8    23.5
         write_dict                      25.9    31.4    33.3    29.3    29.2    24.7
         write_strdict                   22.9    28.4    29.9    27.5    25.2    23.1

     Stack (or queue) operations:
         list_append_pop                144.2    93.4   112.7    75.4    74.2    50.8
         deque_append_pop                30.4    43.5    57.0    49.4    49.2    42.5
         deque_append_popleft            30.8    43.7    57.3    49.7    49.7    42.8

     Timing loop:
         loop_overhead                    0.3     0.5     0.6     0.4     0.3     0.3

Os benchmarks foram medidos em um processador Intel® Core™ i7-4960HQ(2)
nos sistemas macOS 64-bit encontrados em python.org(3).  O script de
benchmark exibe tempos em nanossegundos.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35884

   (2) 
https://ark.intel.com/content/www/us/en/ark/products/76088/intel-core-i7-4960hq-processor-6m-cache-up-to-3-80-ghz.html

   (3) https://www.python.org/downloads/macos/


File: python.info,  Node: Alterações notáveis no Python 3 8 1,  Next: Alterações notáveis no Python 3 8 2,  Prev: Portando para o Python 3 8,  Up: O que há de novo no Python 3 8

1.6.11 Alterações notáveis no Python 3.8.1
------------------------------------------

Devido a significativas preocupações de segurança, o parâmetro
'reuse_address' de *note asyncio.loop.create_datagram_endpoint(): 733.
não é mais suportado.  Isso ocorre devido ao comportamento da opção de
soquete ‘SO_REUSEADDR’ no UDP. Para mais detalhes, consulte a
documentação de ‘loop.create_datagram_endpoint()’.  (Contribuição de
Kyle Stanley, Antoine Pitrou e Yury Selivanov em bpo-37228(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37228


File: python.info,  Node: Alterações notáveis no Python 3 8 2,  Next: Alterações notáveis no Python 3 8 3,  Prev: Alterações notáveis no Python 3 8 1,  Up: O que há de novo no Python 3 8

1.6.12 Alterações notáveis no Python 3.8.2
------------------------------------------

Corrigida uma regressão com o retorno de chamada ‘ignore’ de *note
shutil.copytree(): a33.  Os tipos de argumento agora são str e List[str]
novamente.  (Contribuição de Manuel Barkhau e Giampaolo Rodola em
gh-83571(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/83571


File: python.info,  Node: Alterações notáveis no Python 3 8 3,  Next: Alterações notáveis no Python 3 8 8,  Prev: Alterações notáveis no Python 3 8 2,  Up: O que há de novo no Python 3 8

1.6.13 Alterações notáveis no Python 3.8.3
------------------------------------------

Os valores constantes dos futuros sinalizadores no módulo *note
__future__: 0. fpram atualizados para evitar colisão com os
sinalizadores do compilador.  Anteriormente,
‘PyCF_ALLOW_TOP_LEVEL_AWAIT’ estava colidindo com ‘CO_FUTURE_DIVISION’.
(Contribuição de Batuhan Taskaya em gh-83743(1))

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/83743


File: python.info,  Node: Alterações notáveis no Python 3 8 8,  Next: Alterações notáveis no Python 3 8 9,  Prev: Alterações notáveis no Python 3 8 3,  Up: O que há de novo no Python 3 8

1.6.14 Alterações notáveis no Python 3.8.8
------------------------------------------

Versões anteriores do Python permitiam o uso de ‘;’ e ‘&’ como
separadores de parâmetros de consulta nas funções *note
urllib.parse.parse_qs(): 27a. e *note urllib.parse.parse_qsl(): 279.
Devido a questões de segurança, e em conformidade com as recomendações
mais recentes do W3C, isso foi alterado para permitir apenas uma única
chave separadora, com ‘&’ como padrão.  Esta mudança também afeta as
funções ‘cgi.parse()’ e ‘cgi.parse_multipart()’ já que elas usam as
funções afetadas internamente.  Para obter mais detalhes, consulte sua
respectiva documentação.  (Contribuição de Adam Goldschmidt, Senthil
Kumaran e Ken Jin em bpo-42967(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42967


File: python.info,  Node: Alterações notáveis no Python 3 8 9,  Next: Alterações notáveis no Python 3 8 10,  Prev: Alterações notáveis no Python 3 8 8,  Up: O que há de novo no Python 3 8

1.6.15 Alterações notáveis no Python 3.8.9
------------------------------------------

Uma correção de segurança altera o comportamento *note ftplib.FTP: 900.
para não confiar no endereço IPv4 enviado do servidor remoto ao
configurar um canal de dados passivo.  Em vez disso, reutilizamos o
endereço IP do servidor ftp.  Para códigos incomuns que requerem o
comportamento antigo, defina um atributo
‘trust_server_pasv_ipv4_address’ em sua instância de FTP para ‘True’.
(Veja gh-87451(1))

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/87451


File: python.info,  Node: Alterações notáveis no Python 3 8 10,  Next: Alterações notáveis no Python 3 8 10<2>,  Prev: Alterações notáveis no Python 3 8 9,  Up: O que há de novo no Python 3 8

1.6.16 Alterações notáveis no Python 3.8.10
-------------------------------------------

* Menu:

* Suporte a macOS 11.0 (Big Sur) e Apple Silicon Mac: Suporte a macOS 11 0 Big Sur e Apple Silicon Mac<2>.


File: python.info,  Node: Suporte a macOS 11 0 Big Sur e Apple Silicon Mac<2>,  Up: Alterações notáveis no Python 3 8 10

1.6.16.1 Suporte a macOS 11.0 (Big Sur) e Apple Silicon Mac
...........................................................

A partir do 3.8.10, Python oferece suporte total à construção e execução
no macOS 11 (Big Sur) e no Apple Silicon Macs (baseado na arquitetura
‘ARM64’).  Uma nova variante de compilação universal, ‘universal2’, está
agora disponível com suporte nativo para ‘ARM64’ e ‘Intel 64’ em um
conjunto de executáveis.  Observe que suporte para “ligação fraca”,
criar binários direcionados para versões mais recentes do macOS que
também serão executados corretamente em versões mais antigas através da
verificação em tempo de execução por recursos ausentes, não está mais
incluída de forma retroativa do Python 3.9; para oferece suporte a uma
gama de versões do macOS, continue a visar e a desenvolver para a versão
mais antiga do intervalo.

(Contribuição original de Ronald Oussoren e Lawrence D’Anna em
gh-85272(1), com correções de FX Coudert e Eli Rykoff, e portado para a
versão 3.8 por Maxime Bélanger e Ned Deily)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/85272


File: python.info,  Node: Alterações notáveis no Python 3 8 10<2>,  Next: Alterações notáveis no Python 3 8 12,  Prev: Alterações notáveis no Python 3 8 10,  Up: O que há de novo no Python 3 8

1.6.17 Alterações notáveis no Python 3.8.10
-------------------------------------------

* Menu:

* urllib.parse: urllib parse<4>.


File: python.info,  Node: urllib parse<4>,  Up: Alterações notáveis no Python 3 8 10<2>

1.6.17.1 urllib.parse
.....................

A presença de caracteres de nova linha ou tab em partes de um URL
permite algumas formas de ataques.  Seguindo a especificação WHATWG que
atualiza RFC 3986(1), nova linha ASCII ‘\n’, ‘\r’ e os caracteres de
tabulação ‘\t’ são retirados da URL pelo analisador sintático em *note
urllib.parse: 10a. impedindo tais ataques.  Os caracteres de remoção são
controlados por uma nova variável de nível de módulo
‘urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE’.  (Veja bpo-43882(2))

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc3986.html

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43882


File: python.info,  Node: Alterações notáveis no Python 3 8 12,  Next: Recursos de segurança notáveis no 3 8 14,  Prev: Alterações notáveis no Python 3 8 10<2>,  Up: O que há de novo no Python 3 8

1.6.18 Alterações notáveis no Python 3.8.12
-------------------------------------------

* Menu:

* Alterações na API Python: Alterações na API Python<6>.


File: python.info,  Node: Alterações na API Python<6>,  Up: Alterações notáveis no Python 3 8 12

1.6.18.1 Alterações na API Python
.................................

A partir do Python 3.8.12, o módulo *note ipaddress: 80. não aceita mais
zeros à esquerda em strings de endereço IPv4.  Os zeros à esquerda são
ambíguos e interpretados como notação octal por algumas bibliotecas.
Por exemplo, a função legada *note socket.inet_aton(): 968. trata os
zeros à esquerda como notação octal.  A implementação glibc de *note
inet_pton(): 969. moderna não aceita nenhum zeros à esquerda.

(Originalmente contribuição de Christian Heimes em bpo-36384(1) e
backport para 3.8 por Achraf Merzouki.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36384


File: python.info,  Node: Recursos de segurança notáveis no 3 8 14,  Next: Alterações notáveis no 3 8 17,  Prev: Alterações notáveis no Python 3 8 12,  Up: O que há de novo no Python 3 8

1.6.19 Recursos de segurança notáveis no 3.8.14
-----------------------------------------------

Converter entre *note int: 257. e *note str: 44c. em bases diferentes de
2 (binário), 4, 8 (octal), 16 (hexadecimal) ou 32 como base 10 (decimal)
agora levanta uma exceção *note ValueError: 202. se o número de dígitos
em forma de string estiver acima de um limite para evitar possíveis
ataques de negação de serviço devido à complexidade algorítmica.  Esta é
uma mitigação para CVE 2020-10735(1).  Este limite pode ser configurado
ou desabilitado por variável de ambiente, sinalizador de linha de
comando ou APIs de *note sys: d9.  Veja a documentação de *note
limitação de comprimento de conversão de string inteira: 5f5.  O limite
padrão é de 4300 dígitos em forma de string.

   ---------- Footnotes ----------

   (1) https://www.cve.org/CVERecord?id=CVE-2020-10735


File: python.info,  Node: Alterações notáveis no 3 8 17,  Prev: Recursos de segurança notáveis no 3 8 14,  Up: O que há de novo no Python 3 8

1.6.20 Alterações notáveis no 3.8.17
------------------------------------

* Menu:

* tarfile: tarfile<6>.


File: python.info,  Node: tarfile<6>,  Up: Alterações notáveis no 3 8 17

1.6.20.1 tarfile
................

   * Os métodos de extração em *note tarfile: de. e *note
     shutil.unpack_archive(): 46b, têm um novo argumento 'filter' que
     permite limitar recursos do tar que podem ser surpreendentes ou
     perigosos, como criar arquivos fora do diretório de destino.  Veja
     *note Filtros de extração: 46c. para detalhes.  No Python 3.12,
     usar sem o argumento 'filter' mostrará um *note DeprecationWarning:
     1a5.  No Python 3.14, o padrão mudará para ‘'data'’.  (Contribuição
     de Petr Viktorin em PEP 706(1).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0706/


File: python.info,  Node: O que há de novo no Python 3 7,  Next: What’s New In Python 3 6,  Prev: O que há de novo no Python 3 8,  Up: O que há de novo no Python

1.7 O que há de novo no Python 3.7
==================================


Editor: Elvis Pranskevichus <<elvis@magic.io>>

Este artigo explica os novos recursos no Python 3.7, em comparação com
3.6.  Python 3.7 foi lançado em 27 de Junho de 2018.  Veja *note
changelog: 13c. para uma lista completa de mudanças.

* Menu:

* Resumo – Destaques da versão: Resumo – Destaques da versão<7>.
* Novas funcionalidades: Novas funcionalidades<12>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<7>.
* Novos módulos: Novos módulos<7>.
* Módulos melhorados: Módulos melhorados<7>.
* Alterações na API C: Alterações na API C<11>.
* Mudanças na construção: Mudanças na construção<6>.
* Otimizações: Otimizações<7>.
* Outras mudanças na implementação do CPython: Outras mudanças na implementação do CPython<2>.
* Comportamento do Python descontinuado::
* Deprecated Python modules, functions and methods: Deprecated Python modules functions and methods.
* Deprecated functions and types of the C API::
* Platform Support Removals::
* Remoção de APIs e recursos: Remoção de APIs e recursos<2>.
* Module Removals::
* Windows-only Changes::
* Porting to Python 3.7: Porting to Python 3 7.
* Notable changes in Python 3.7.1: Notable changes in Python 3 7 1.
* Notable changes in Python 3.7.2: Notable changes in Python 3 7 2.
* Notable changes in Python 3.7.6: Notable changes in Python 3 7 6.
* Notable changes in Python 3.7.10: Notable changes in Python 3 7 10.
* Notable changes in Python 3.7.11: Notable changes in Python 3 7 11.
* Notable security feature in 3.7.14: Notable security feature in 3 7 14.


File: python.info,  Node: Resumo – Destaques da versão<7>,  Next: Novas funcionalidades<12>,  Up: O que há de novo no Python 3 7

1.7.1 Resumo – Destaques da versão
----------------------------------

Novos recursos de sintaxe:

   * *note PEP 563: acf, avaliação postergada de anotações de tipos.

Alterações de sintaxe incompatíveis com versões anteriores:

   * *note async: 732. e *note await: 1b9. são agora palavras chave
     reservadas.

Novos módulos de biblioteca:

   * *note contextvars: 24.: *note PEP 567 – Variáveis de Contexto: ad0.

   * *note dataclasses: 2f.: *note PEP 557 – Classes de Dados: ad1.

   * *note importlib.resources: ad2.

Novos recursos embutidos:

   * *note PEP 553: ad3, a nova função *note breakpoint(): 234.;

Melhorias no modelo de dados Python:

   * *note PEP 562: ad4, personalização de acesso aos atributos do
     módulo.

   * *note PEP 560: ad5, suporte principal para o módulo typing e tipos
     genéricos.

   * a natureza de preservação da ordem de inserção de objetos *note
     dict: ad6. foi declarada(1) como uma parte oficial da especificação
     da linguagem Python.

Melhorias significativas na biblioteca padrão:

   * O módulo *note asyncio: a. recebeu novos recursos, significativo à
     *note melhorias de usabilidade e desempenho: ad7.

   * O módulo *note time: ee. ganhou suporte para *note funções com
     resolução de nanossegundos: ad8.

Melhorias na implementação do CPython:

   * Evitando o uso de ASCII como a codificação de texto padrão:

        * *note PEP 538: ad9, coerção de localidade C legada

        * *note PEP 540: ada, modo de tempo de execução UTF-8 forçado.

   * *note PEP 552: adb, .pycs determinísticos

   * *note Novo Modo de Desenvolvimento do Python: adc.

   * *note PEP 565: add, aprimorada o tratamento de *note
     DeprecationWarning: 1a5.

Melhorias na API C:

   * *note PEP 539: ade, nova API C para armazenamento local de thread

Melhorias na documentação:

   * *note PEP 545: adf, Traduções da documentação do Python

   * Novas traduções da documentação: japonês(2), francês(3) e
     coreano(4).

Esta versão apresenta melhorias de desempenho notáveis em muitas áreas.
A seção *note Otimizações: ae0. os lista em detalhes.

Para uma lista de mudanças que podem afetar a compatibilidade com
versões anteriores do Python, consulte a seção *note Porting to Python
3.7: ae1.

   ---------- Footnotes ----------

   (1) 
https://mail.python.org/pipermail/python-dev/2017-December/151283.html

   (2) https://docs.python.org/ja/

   (3) https://docs.python.org/fr/

   (4) https://docs.python.org/ko/


File: python.info,  Node: Novas funcionalidades<12>,  Next: Outras mudanças na linguagem<7>,  Prev: Resumo – Destaques da versão<7>,  Up: O que há de novo no Python 3 7

1.7.2 Novas funcionalidades
---------------------------

* Menu:

* PEP 563; Avaliação Postergada de Anotações: PEP 563 Avaliação Postergada de Anotações.
* PEP 538; Coerção de localidade C legada: PEP 538 Coerção de localidade C legada.
* PEP 540; Modo de tempo de execução UTF-8 forçado: PEP 540 Modo de tempo de execução UTF-8 forçado.
* PEP 553; breakpoint() embutida: PEP 553 breakpoint embutida.
* PEP 539; Nova API C para armazenamento local de thread: PEP 539 Nova API C para armazenamento local de thread.
* PEP 562; Personalização de acesso aos atributos do módulo: PEP 562 Personalização de acesso aos atributos do módulo.
* PEP 564; Novas funções de tempo com resolução de nanossegundos: PEP 564 Novas funções de tempo com resolução de nanossegundos.
* PEP 565; Mostra DeprecationWarning em __main__: PEP 565 Mostra DeprecationWarning em __main__.
* PEP 560; Suporte básico para módulo typing e tipos genéricos: PEP 560 Suporte básico para módulo typing e tipos genéricos.
* PEP 552; Arquivos .pyc baseados em hash: PEP 552 Arquivos pyc baseados em hash.
* PEP 545; Traduções da documentação do Python: PEP 545 Traduções da documentação do Python.
* Modo de Desenvolvimento do Python (-X dev): Modo de Desenvolvimento do Python -X dev.


File: python.info,  Node: PEP 563 Avaliação Postergada de Anotações,  Next: PEP 538 Coerção de localidade C legada,  Up: Novas funcionalidades<12>

1.7.2.1 PEP 563: Avaliação Postergada de Anotações
..................................................

O advento das dicas de tipo no Python revelou dois problemas de
usabilidade gritantes com a funcionalidade das anotações adicionadas em
PEP 3107(1) e refinadas ainda mais em PEP 526(2):

   * as anotações só podiam usar nomes que já estavam disponíveis no
     escopo atual, ou seja, não suportavam referências de encaminhamento
     de nenhum tipo; e

   * anotar o código-fonte teve efeitos adversos no tempo de
     inicialização dos programas Python.

Ambos os problemas são corrigidos com o adiamento da avaliação das
anotações.  Em vez de compilar o código que executa expressões em
anotações em seu tempo de definição, o compilador armazena a anotação em
um formato de string equivalente ao AST da expressão em questão.  Se
necessário, as anotações podem ser resolvidas em tempo de execução
usando ‘digitando.get_type_hints()’.  No caso comum em que isso não é
necessário, as anotações são mais baratas de armazenar (uma vez que
strings curtas são internadas pelo interpretador) e tornam o tempo de
inicialização mais rápido.

Em termos de usabilidade, as anotações agora suportam referências
futuras, tornando a seguinte sintaxe válida:

     class C:
         @classmethod
         def from_string(cls, source: str) -> C:
             ...

         def validate_b(self, obj: B) -> bool:
             ...

     class B:
         ...

Como essa mudança quebra a compatibilidade, o novo comportamento precisa
ser habilitado por módulo no Python 3.7 usando uma importação de *note
__future__: 0.

     from __future__ import annotations

Ele se tornará o padrão no Python 3.10.

Ver também
..........

PEP 563(3) – avaliação postergada de anotações de tipos

     PEP escrita e implementada por Łukasz Langa.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3107/

   (2) https://peps.python.org/pep-0526/

   (3) https://peps.python.org/pep-0563/


File: python.info,  Node: PEP 538 Coerção de localidade C legada,  Next: PEP 540 Modo de tempo de execução UTF-8 forçado,  Prev: PEP 563 Avaliação Postergada de Anotações,  Up: Novas funcionalidades<12>

1.7.2.2 PEP 538: Coerção de localidade C legada
...............................................

Um desafio contínuo dentro da série Python 3 tem sido determinar uma
estratégia padrão sensata para lidar com a suposição de codificação de
texto “ASCII de 7 bits” atualmente implícita pelo uso da localidade C ou
POSIX padrão em plataformas não Windows.

A PEP 538(1) atualiza a interface de linha de comando do interpretador
padrão para forçar automaticamente essa localidade para uma localidade
baseada em UTF-8 disponível conforme descrito na documentação da nova
variável de ambiente *note PYTHONCOERCECLOCALE: ae5.  Configurar
automaticamente ‘LC_CTYPE’ desta forma significa que tanto o
interpretador central quanto as extensões C com reconhecimento da
localidade (como *note readline: ba.) irão presumir o uso de UTF-8 como
a codificação de texto padrão, ao invés de ASCII.

A definição de suporte de plataforma na PEP 11(2) também foi atualizada
para limitar o suporte de manipulação de texto completo para localidades
não baseadas em ASCII adequadamente configuradas.

Como parte dessa mudança, o tratador de erros padrão para *note stdin:
53d. e *note stdout: ae6. agora é ‘surrogateescape’ (em vez de ‘strict’)
ao usar qualquer uma das localidades de destino de coerção definidas
(atualmente ‘C.UTF-8’, ‘C.utf8’ e ‘UTF-8’).  O tratador de erros padrão
para *note stderr: 940. continua a ser ‘backslashreplace’, independente
da localidade.

A coerção de localidade é silenciosa por padrão, mas para ajudar na
depuração de problemas de integração potencialmente relacionados à
localidade, avisos explícitos (emitidos diretamente em *note stderr:
940.) podem ser solicitados configurando ‘PYTHONCOERCECLOCALE=warn’.
Essa configuração também fará com que o tempo de execução do Python
emita um aviso se a localidade C legada permanecer ativa quando o
interpretador principal for inicializado.

Embora a coerção de localidade PEP 538(3) tenha o benefício de também
afetar os módulos de extensão (como GNU ‘readline’), bem como processos
filhos (incluindo aqueles que executam aplicativos não Python e versões
mais antigas do Python), tem a desvantagem de exigir que uma localidade
de destino adequado esteja presente no sistema em execução.  Para
tratador melhor o caso em que nenhuma localidade de destino adequado
está disponível (como ocorre no RHEL/CentOS 7, por exemplo), o Python
3.7 também implementa *note PEP 540; Modo de tempo de execução UTF-8
forçado: ada.

Ver também
..........

PEP 538(4) – Forçando a localidade C legada para uma localidade baseada em UTF-8

     PEP escrita e implementada por Nick Coghlan.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0538/

   (2) https://peps.python.org/pep-0011/

   (3) https://peps.python.org/pep-0538/

   (4) https://peps.python.org/pep-0538/


File: python.info,  Node: PEP 540 Modo de tempo de execução UTF-8 forçado,  Next: PEP 553 breakpoint embutida,  Prev: PEP 538 Coerção de localidade C legada,  Up: Novas funcionalidades<12>

1.7.2.3 PEP 540: Modo de tempo de execução UTF-8 forçado
........................................................

A nova opção de linha de comando *note -X: 176. ‘utf8’ e a variável de
ambiente *note PYTHONUTF8: ae8. podem ser usadas para habilitar o *note
modo UTF-8 do Python: 656.

Quando no modo UTF-8, o CPython ignora as configurações de localidade e
usa a codificação UTF-8 por padrão.  Os tratador de erros para fluxos
*note sys.stdin: 53d. e *note sys.stdout: ae6. são configurados para
‘surrogateescape’.

O modo UTF-8 forçado pode ser usado para alterar o comportamento de
manipulação de texto em um interpretador Python embutido sem alterar as
configurações de localidade de uma aplicação embutida.

Embora o modo UTF-8 da PEP 540(1) tenha a vantagem de funcionar
independentemente de quais localidades estão disponíveis no sistema em
execução, ele tem a desvantagem de não ter efeito sobre os módulos de
extensão (como GNU ‘readline’) , processos filho executando aplicativos
não-Python e processos filho executando versões anteriores do Python.
Para reduzir o risco de corromper dados de texto ao se comunicar com
tais componentes, o Python 3.7 também implementa *note PEP 540; Modo de
tempo de execução UTF-8 forçado: ada.).

O modo UTF-8 é habilitado por padrão quando a localidade é ‘C’ ou
‘POSIX’, e o recurso de coerção de localidade PEP 538(2) falha em
mudá-la para uma alternativa baseada em UTF-8 (seja falha é devido a
‘PYTHONCOERCECLOCALE=0’ sendo definido, ‘LC_ALL’ sendo definido, ou a
falta de uma localidade de destino adequada).

Ver também
..........

PEP 540(3) – Adiciona um novo modo UTF-8

     PEP escrito e implementado por Victor Stinner

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0540/

   (2) https://peps.python.org/pep-0538/

   (3) https://peps.python.org/pep-0540/


File: python.info,  Node: PEP 553 breakpoint embutida,  Next: PEP 539 Nova API C para armazenamento local de thread,  Prev: PEP 540 Modo de tempo de execução UTF-8 forçado,  Up: Novas funcionalidades<12>

1.7.2.4 PEP 553: ‘breakpoint()’ embutida
........................................

Python 3.7 inclui a nova função embutida *note breakpoint(): 234. como
uma maneira fácil e consistente de entrar no depurador Python.

‘breakpoint()’ embutida chama *note sys.breakpointhook(): aea.  Por
padrão, o último importa *note pdb: a5. e então chama ‘pdb.set_trace()’,
mas ao ligar ‘sys.breakpointhook()’ à função de sua escolha,
‘breakpoint()’ pode entrar em qualquer depurador.  Além disso, a
variável de ambiente *note PYTHONBREAKPOINT: aeb. pode ser configurada
para o chamável de seu depurador de escolha.  Defina
‘PYTHONBREAKPOINT=0’ para desabilitar completamente o ‘breakpoint()’
embutida.

Ver também
..........

PEP 553(1) – breakpoint() embutida

     PEP escrita e implementada por Barry Warsaw

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0553/


File: python.info,  Node: PEP 539 Nova API C para armazenamento local de thread,  Next: PEP 562 Personalização de acesso aos atributos do módulo,  Prev: PEP 553 breakpoint embutida,  Up: Novas funcionalidades<12>

1.7.2.5 PEP 539: Nova API C para armazenamento local de thread
..............................................................

Enquanto Python fornece uma API C para suporte de armazenamento local de
thread; a existente *note API da armazenamento local de thread (TLS):
aed. usou int para representar as chaves TLS em todas as plataformas.
Isso geralmente não tem sido um problema para plataformas oficialmente
suportadas, mas isso não é compatível com POSIX, nem portátil em
qualquer sentido prático.

A PEP 539(1) muda isso fornecendo uma nova *note API de armazenamento
específico de thread (TSS): aee. para CPython que substitui o uso da API
de TLS existente dentro do interpretador CPython, enquanto descontinua a
API existente.  A API de TSS usa um novo tipo *note Py_tss_t: aef. em
vez de int para representar as chaves de TSS – um tipo não visível cuja
definição pode depender da implementação TLS subjacente.  Portanto, isso
permitirá construir CPython em plataformas onde a chave nativa de TLS é
definida de uma forma que não pode ser convertida com segurança para
int.

Observe que em plataformas onde a chave TLS nativa é definida de uma
forma que não pode ser convertida com segurança para int, todas as
funções da API TLS existente serão no-op e retornarão falha
imediatamente.  Isso indica claramente que a API antiga não é suportada
em plataformas onde não pode ser usada de forma confiável e que nenhum
esforço será feito para adicionar tal suporte.

Ver também
..........

PEP 539(2) – Uma nova API C para armazenamento local de thread no CPython

     PEP escrita por Erik M. Bray; implementação por Masayuki Yamamoto.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0539/

   (2) https://peps.python.org/pep-0539/


File: python.info,  Node: PEP 562 Personalização de acesso aos atributos do módulo,  Next: PEP 564 Novas funções de tempo com resolução de nanossegundos,  Prev: PEP 539 Nova API C para armazenamento local de thread,  Up: Novas funcionalidades<12>

1.7.2.6 PEP 562: Personalização de acesso aos atributos do módulo
.................................................................

Python 3.7 allows defining *note __getattr__(): af1. on modules and will
call it whenever a module attribute is otherwise not found.  Defining
*note __dir__(): af2. on modules is now also allowed.

Um exemplo típico de onde isso pode ser útil é a descontinuação do
atributo do módulo e o carregamento preguiçoso ou 'lazy'.

Ver também
..........

PEP 562(1) – Módulo ‘__getattr__’ e ‘__dir__’

     PEP escrita e implementada por Ivan Levkivskyi

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0562/


File: python.info,  Node: PEP 564 Novas funções de tempo com resolução de nanossegundos,  Next: PEP 565 Mostra DeprecationWarning em __main__,  Prev: PEP 562 Personalização de acesso aos atributos do módulo,  Up: Novas funcionalidades<12>

1.7.2.7 PEP 564: Novas funções de tempo com resolução de nanossegundos
......................................................................

A resolução dos relógios em sistemas modernos pode exceder a precisão
limitada de um número de ponto flutuante retornado pela função *note
time.time(): 254. e suas variantes.  Para evitar perda de precisão, PEP
564(1) adiciona seis novas variantes em “nanossegundos” das funções de
temporizador existentes ao módulo *note time: ee.:

   * *note time.clock_gettime_ns(): af4.

   * *note time.clock_settime_ns(): af5.

   * *note time.monotonic_ns(): af6.

   * *note time.perf_counter_ns(): af7.

   * *note time.process_time_ns(): af8.

   * *note time.time_ns(): af9.

As novas funções retornam o número de nanossegundos como um valor
inteiro.

Medições(2) mostram que no Linux e no Windows a resolução de *note
time.time_ns(): af9. é aproximadamente 3 vezes melhor do que *note
time.time(): 254.

Ver também
..........

PEP 564(3) – Adiciona novas funções de tempo com resolução de nanossegundos

     PEP escrito e implementado por Victor Stinner

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0564/

   (2) 
https://peps.python.org/pep-0564/#annex-clocks-resolution-in-python

   (3) https://peps.python.org/pep-0564/


File: python.info,  Node: PEP 565 Mostra DeprecationWarning em __main__,  Next: PEP 560 Suporte básico para módulo typing e tipos genéricos,  Prev: PEP 564 Novas funções de tempo com resolução de nanossegundos,  Up: Novas funcionalidades<12>

1.7.2.8 PEP 565: Mostra DeprecationWarning em ‘__main__’
........................................................

O tratamento padrão de *note DeprecationWarning: 1a5. foi alterado de
forma que esses avisos sejam mais uma vez mostrados por padrão, mas
apenas quando o código que os aciona está sendo executado diretamente no
módulo *note __main__: 1.  Como resultado, os desenvolvedores de scripts
de arquivo único e aqueles que usam Python interativamente devem mais
uma vez começar a ver avisos de descontinuação para as APIs que usam,
mas os avisos de descontinuação acionados por aplicações importadas,
biblioteca e módulos de estrutura continuarão ocultos por padrão.

Como resultado dessa mudança, a biblioteca padrão agora permite que os
desenvolvedores escolham entre três comportamentos diferentes de aviso
de descontinuação:

   * *note FutureWarning: 415.: sempre exibida por padrão, recomendado
     para avisos que devem ser vistos pelos usuários finais da aplicação
     (por exemplo, para definições de configuração de aplicações
     descontinuadas).

   * *note DeprecationWarning: 1a5.: exibida por padrão apenas em *note
     __main__: 1. e ao executar testes, recomendado para avisos que
     devem ser vistos por outros desenvolvedores Python onde uma
     atualização de versão pode resultar em mudança de comportamento ou
     um erro.

   * *note PendingDeprecationWarning: 8ce.: exibida por padrão apenas ao
     executar testes, destinados a casos em que uma atualização de
     versão futura mudará a categoria de aviso para *note
     DeprecationWarning: 1a5. ou *note FutureWarning: 415.

Anteriormente, ambas *note DeprecationWarning: 1a5. e *note
PendingDeprecationWarning: 8ce. eram visíveis apenas durante a execução
de testes, o que significava que os desenvolvedores principalmente
escrevendo scripts de arquivo único ou usando Python interativamente
poderiam ser surpreendidos por alterações nas APIs que usavam.

Ver também
..........

PEP 565(1) – Show DeprecationWarning in ‘__main__’

     PEP escrita e implementada por Nick Coghlan

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0565/


File: python.info,  Node: PEP 560 Suporte básico para módulo typing e tipos genéricos,  Next: PEP 552 Arquivos pyc baseados em hash,  Prev: PEP 565 Mostra DeprecationWarning em __main__,  Up: Novas funcionalidades<12>

1.7.2.9 PEP 560: Suporte básico para módulo ‘typing’ e tipos genéricos
......................................................................

Initially PEP 484(1) was designed in such way that it would not
introduce 'any' changes to the core CPython interpreter.  Now type hints
and the *note typing: 104. module are extensively used by the community,
so this restriction is removed.  The PEP introduces two special methods
*note __class_getitem__(): 73b. and *note __mro_entries__(): afc, these
methods are now used by most classes and special constructs in *note
typing: 104.  As a result, the speed of various operations with types
increased up to 7 times, the generic types can be used without metaclass
conflicts, and several long standing bugs in *note typing: 104. module
are fixed.

Ver também
..........

PEP 560(2) – Suporte básico para módulo typing e tipos genéricos

     PEP escrita e implementada por Ivan Levkivskyi

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/

   (2) https://peps.python.org/pep-0560/


File: python.info,  Node: PEP 552 Arquivos pyc baseados em hash,  Next: PEP 545 Traduções da documentação do Python,  Prev: PEP 560 Suporte básico para módulo typing e tipos genéricos,  Up: Novas funcionalidades<12>

1.7.2.10 PEP 552: Arquivos .pyc baseados em hash
................................................

O Python tradicionalmente verifica a atualização dos arquivos de cache
em bytecode (ou seja, arquivos ‘.pyc’) comparando os metadados da fonte
(registro de data e hora e tamanho da última modificação) com os
metadados da fonte salvos no cabeçalho do arquivo de cache quando foi
gerado.  Embora eficaz, esse método de invalidação tem suas
desvantagens.  Quando os registros de data e hora do sistema de arquivos
são muito grosseiros, o Python pode perder as atualizações de origem,
levando à confusão do usuário.  Além disso, ter um registro de data e
hora no arquivo de cache é problemático para reprodutibilidade de
compilação(1) e sistemas de compilação baseados em conteúdo.

PEP 552(2) estende o formato pyc para permitir que o hash do arquivo de
origem seja usado para invalidação em vez do registro de data e hora da
fonte.  Esses arquivos ‘.pyc’ são chamados de “baseados em hash”.  Por
padrão, Python ainda usa invalidação baseada em registro de data e hora
e não gera arquivos ‘.pyc’ baseados em hash em tempo de execução.
Arquivos ‘.pyc’ baseados em hash podem ser gerados com *note py_compile:
b3. ou *note compileall: 20.

Arquivos ‘.pyc’ baseados em hash vêm em duas variantes: verificados e
não verificados.  Python valida arquivos ‘.pyc’ baseados em hash
verificados em relação aos arquivos fonte correspondentes em tempo de
execução, mas não o faz para pycs baseados em hash não verificados.
Arquivos ‘.pyc’ baseados em hash não verificados são uma otimização de
desempenho útil para ambientes onde um sistema externo ao Python (por
exemplo, o sistema de construção) é responsável por manter os arquivos
‘.pyc’ atualizados.

Veja a função *note Invalidação de bytecode em cache: 5ec. para mais
informações.

Ver também
..........

PEP 552(3) – pycs determinísticos

     PEP escrita e implementada por Benjamin Peterson

   ---------- Footnotes ----------

   (1) https://reproducible-builds.org/

   (2) https://peps.python.org/pep-0552/

   (3) https://peps.python.org/pep-0552/


File: python.info,  Node: PEP 545 Traduções da documentação do Python,  Next: Modo de Desenvolvimento do Python -X dev,  Prev: PEP 552 Arquivos pyc baseados em hash,  Up: Novas funcionalidades<12>

1.7.2.11 PEP 545: Traduções da documentação do Python
.....................................................

PEP 545(1) descreve o processo de criação a manutenção das traduções da
documentação do Python.

Três novas traduções foram adicionadas:

   - Japonês: ‘https://docs.python.org/ja/’

   - Francês: ‘https://docs.python.org/fr/’

   - Coreano: ‘https://docs.python.org/ko/’

Ver também
..........

PEP 545(2) – Traduções da documentação do Python

     PEP escrita e implementada por Julien Palard, Inada Naoki e Victor
     Stinner.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0545/

   (2) https://peps.python.org/pep-0545/


File: python.info,  Node: Modo de Desenvolvimento do Python -X dev,  Prev: PEP 545 Traduções da documentação do Python,  Up: Novas funcionalidades<12>

1.7.2.12 Modo de Desenvolvimento do Python (-X dev)
...................................................

A nova opção de linha de comando *note -X: 176. ‘dev’ ou a nova variável
de ambiente *note PYTHONDEVMODE: b00. pode ser usada para habilitar
*note Modo de Desenvolvimento do Python: 1f8.  Quando está no modo de
desenvolvimento, o Python executa verificações adicionais em tempo de
execução que são muito caras para serem habilitadas por padrão.  Veja a
documentação *note Modo de Desenvolvimento do Python: 1f8. para a
descrição completa.


File: python.info,  Node: Outras mudanças na linguagem<7>,  Next: Novos módulos<7>,  Prev: Novas funcionalidades<12>,  Up: O que há de novo no Python 3 7

1.7.3 Outras mudanças na linguagem
----------------------------------

   * Uma expressão *note await: 1b9. e compreensões contendo uma
     cláusula *note async for: aba. eram ilegais nas expressões em *note
     literais de strings formatadas: 9b1. devido a um problema com a
     implementação.  No Python 3.7, esta restrição foi retirada.

   * Mais de 255 argumentos agora podem ser passados para uma função, e
     uma função agora pode ter mais de 255 parâmetros.  (Contribuição de
     Serhiy Storchaka em bpo-12844(1) e bpo-18896(2).)

   * *note bytes.fromhex(): b02. e *note bytearray.fromhex(): b03. agora
     ignoram todos os espaços em branco ASCII, não apenas espaços.
     (Contribuição de Robert Xiao em bpo-28927(3).)

   * *note str: 44c, *note bytes: 1c2. e *note bytearray: 2ea. ganharam
     suporte para o novo método *note isascii(): b04, que pode ser usado
     para testar se uma string ou bytes contêm apenas os caracteres
     ASCII. (Contribuição de INADA Naoki em bpo-32677(4).)

   * *note ImportError: 419. agora exibe o nome do módulo e o caminho do
     módulo ‘__file__’ quando ‘from ... import ...’ falha.
     (Contribuição de Matthias Bussonnier em bpo-29546(5).)

   * Importações circulares envolvendo importações absolutas com ligação
     de um submódulo a um nome agora são suportadas.  (Contribuição de
     Serhiy Storchaka em bpo-30024(6).)

   * ‘object.__format__(x, '')’ agora é equivalente a ‘str(x)’ em vez de
     ‘format(str(self), '')’.  (Contribuição de Serhiy Storchaka em
     bpo-28974(7).)

   * Para melhor prover suporte à criação dinâmica de rastreamentos de
     pilha, *note types.TracebackType: b05. agora pode ser instanciado a
     partir do código Python, e o atributo *note tb_next: b06. em *note
     tracebacks: b07. agora é gravável.  (Contribuição de Nathaniel J.
     Smith em bpo-30579(8).)

   * Ao usar a opção *note -m: 5e1, ‘sys.path[0]’ agora é expandido para
     o caminho completo do diretório inicial, em vez de ser deixado como
     o diretório vazio (o que permite importações do 'atual' diretório
     de trabalho no momento em que ocorre uma importação) (Contribuição
     de Nick Coghlan em bpo-33053(9).)

   * A nova opção *note -X: 176. ‘importtime’ ou a variável de ambiente
     *note PYTHONPROFILEIMPORTTIME: b08. pode ser usada para mostrar o
     tempo de cada importação de módulo.  (Contribuição de Inada Naoki
     em bpo-31415(10).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=12844

   (2) https://bugs.python.org/issue?@action=redirect&bpo=18896

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28927

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32677

   (5) https://bugs.python.org/issue?@action=redirect&bpo=29546

   (6) https://bugs.python.org/issue?@action=redirect&bpo=30024

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28974

   (8) https://bugs.python.org/issue?@action=redirect&bpo=30579

   (9) https://bugs.python.org/issue?@action=redirect&bpo=33053

   (10) https://bugs.python.org/issue?@action=redirect&bpo=31415


File: python.info,  Node: Novos módulos<7>,  Next: Módulos melhorados<7>,  Prev: Outras mudanças na linguagem<7>,  Up: O que há de novo no Python 3 7

1.7.4 Novos módulos
-------------------

* Menu:

* contextvars::
* dataclasses: dataclasses<3>.
* importlib.resources: importlib resources<2>.


File: python.info,  Node: contextvars,  Next: dataclasses<3>,  Up: Novos módulos<7>

1.7.4.1 contextvars
...................

O novo módulo *note contextvars: 24. e um conjunto de *note novas APIs
C: b0b. introduzem suporte para 'variáveis de contexto'.  Variáveis de
contexto são conceitualmente semelhantes às variáveis locais de thread.
Ao contrário do TLS, as variáveis de contexto oferecem suporte a código
assíncrono corretamente.

Os módulos *note asyncio: a. e *note decimal: 36. foram atualizados para
usar e prover suporte a variáveis de contexto prontas para uso.
Particularmente o contexto decimal ativo agora é armazenado em uma
variável de contexto, o que permite que operações decimais funcionem com
o contexto correto em código assíncrono.

Ver também
..........

PEP 567(1) – Variáveis de contexto

     PEP escrita e implementada por Yury Selivanov

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0567/


File: python.info,  Node: dataclasses<3>,  Next: importlib resources<2>,  Prev: contextvars,  Up: Novos módulos<7>

1.7.4.2 dataclasses
...................

O novo decorador *note dataclass(): 1cb. fornece uma maneira de declarar
'classes de dados'.  Uma classe de dados descreve seus atributos usando
anotações de variáveis de classe.  Seu construtor e outros métodos
mágicos, como *note __repr__(): 61c, *note __eq__(): b0d. e *note
__hash__(): b0e. são gerados automaticamente.

Exemplo:

     @dataclass
     class Point:
         x: float
         y: float
         z: float = 0.0

     p = Point(1.5, 2.5)
     print(p)   # produces "Point(x=1.5, y=2.5, z=0.0)"

Ver também
..........

PEP 557(1) – Classes de dados

     PEP escrita e implementada por Eric V. Smith

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0557/


File: python.info,  Node: importlib resources<2>,  Prev: dataclasses<3>,  Up: Novos módulos<7>

1.7.4.3 importlib.resources
...........................

The new *note importlib.resources: 7b. module provides several new APIs
and one new ABC for access to, opening, and reading 'resources' inside
packages.  Resources are roughly similar to files inside packages, but
they needn’t be actual files on the physical file system.  Module
loaders can provide a ‘get_resource_reader()’ function which returns a
*note importlib.abc.ResourceReader: b10. instance to support this new
API. Built-in file path loaders and zip file loaders both support this.

(Contribuição de Barry Warsaw e Brett Cannon em bpo-32248(1).)

Ver também
..........

importlib_resources(2) – um backport do PyPI para versões anteriores do
Python.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32248

   (2) https://importlib-resources.readthedocs.io/en/latest/


File: python.info,  Node: Módulos melhorados<7>,  Next: Alterações na API C<11>,  Prev: Novos módulos<7>,  Up: O que há de novo no Python 3 7

1.7.5 Módulos melhorados
------------------------

* Menu:

* argparse: argparse<3>.
* asyncio: asyncio<7>.
* binascii::
* calendar: calendar<2>.
* collections: collections<2>.
* compileall: compileall<3>.
* concurrent.futures: concurrent futures<3>.
* contextlib: contextlib<3>.
* cProfile: cProfile<2>.
* crypt::
* datetime: datetime<4>.
* dbm: dbm<2>.
* decimal::
* dis: dis<3>.
* distutils: distutils<4>.
* enum: enum<5>.
* functools: functools<3>.
* gc: gc<4>.
* hmac: hmac<2>.
* http.client: http client.
* http.server: http server.
* idlelib e IDLE::
* importlib: importlib<4>.
* io: io<4>.
* ipaddress: ipaddress<3>.
* itertools: itertools<5>.
* locale: locale<4>.
* logging: logging<3>.
* math: math<6>.
* mimetypes: mimetypes<2>.
* msilib::
* multiprocessing: multiprocessing<4>.
* os: os<7>.
* pathlib: pathlib<8>.
* pdb: pdb<4>.
* py_compile: py_compile<3>.
* pydoc: pydoc<2>.
* queue: queue<2>.
* re: re<4>.
* signal: signal<2>.
* socket: socket<5>.
* socketserver::
* sqlite3: sqlite3<6>.
* ssl: ssl<5>.
* string: string<2>.
* subprocess: subprocess<2>.
* sys: sys<8>.
* time: time<5>.
* tkinter: tkinter<5>.
* tracemalloc: tracemalloc<2>.
* types: types<4>.
* unicodedata: unicodedata<6>.
* unittest: unittest<7>.
* unittest.mock: unittest mock.
* urllib.parse: urllib parse<5>.
* uu::
* uuid: uuid<2>.
* avisos: avisos<3>.
* xml: xml<5>.
* xml.etree: xml etree.
* xmlrpc.server: xmlrpc server.
* zipapp::
* zipfile: zipfile<2>.


File: python.info,  Node: argparse<3>,  Next: asyncio<7>,  Up: Módulos melhorados<7>

1.7.5.1 argparse
................

O novo método *note ArgumentParser.parse_intermixed_args(): b13. permite
misturar opções e argumentos posicionais.  (Contribuição de paul.j3 em
bpo-14191(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14191


File: python.info,  Node: asyncio<7>,  Next: binascii,  Prev: argparse<3>,  Up: Módulos melhorados<7>

1.7.5.2 asyncio
...............

O módulo *note asyncio: a. recebeu muitos novos recursos, usabilidade e
*note melhorias de desempenho: b15.  Mudanças notáveis incluem:

   * A nova função *note provisória: b16. *note asyncio.run(): 47c. pode
     ser usada para executar uma corrotina a partir de código síncrono
     criando e destruindo automaticamente o laço de eventos.
     (Contribuição de Yury Selivanov em bpo-32314(1).)

   * asyncio ganhou suporte para *note contextvars: 24.  *note
     loop.call_soon(): b17, *note loop.call_soon_threadsafe(): b18,
     ‘loop.call_later()’, *note loop.call_at(): b19. e *note
     Future.add_done_callback(): b1a. têm um novo parâmetro
     somente-nomeado opcional 'context'.  *note Tasks: 1be. agora
     rastreia seu contexto automaticamente.  Veja PEP 567(2) para mais
     detalhes.  (Contribuição de Yury Selivanov em bpo-32436(3).)

   * A nova função *note asyncio.create_task(): 1bf. foi adicionada como
     um atalho para ‘asyncio.get_event_loop().create_task()’.
     (Contribuição de Andrew Svetlov em bpo-32311(4).)

   * O novo método *note loop.start_tls(): b1b. pode ser usado para
     atualizar uma conexão existente para TLS. (Contribuição de Yury
     Selivanov em bpo-23749(5).)

   * O novo método *note loop.sock_recv_into(): b1c. permite a leitura
     de dados de um soquete diretamente em um buffer fornecido, tornando
     possível reduzir as cópias de dados.  (Contribuição de Antoine
     Pitrou em bpo-31819(6).)

   * A nova função *note asyncio.current_task(): 47d. retorna a
     instância *note Task: 1be. atualmente em execução, e a nova função
     *note asyncio.all_tasks(): 95d. retorna um conjunto de todas as
     instâncias ‘Task’ existentes em um determinado laço.  Os métodos
     ‘Task.current_task()’ e ‘Task.all_tasks()’ foram descontinuados.
     (Contribuição de Andrew Svetlov em bpo-32250(7).)

   * A nova classe 'provisória' *note BufferedProtocol: aac. permite
     implementar protocolos de streaming com controle manual sobre o
     buffer de recebimento.  (Contribuição de Yury Selivanov em
     bpo-32251(8).)

   * A nova função *note asyncio.get_running_loop(): b1d. retorna o laço
     atualmente em execução e levanta uma exceção *note RuntimeError:
     195. se nenhum laço estiver em execução.  Isto contrasta com *note
     asyncio.get_event_loop(): 2c2, que irá 'criar' um novo laço de
     eventos se nenhum estiver em execução.  (Contribuição de Yury
     Selivanov em bpo-32269(9).)

   * O novo método de corrotina *note StreamWriter.wait_closed(): b1e.
     permite esperar até que o gravador de fluxo seja fechado.  O novo
     método *note StreamWriter.is_closing(): b1f. pode ser usado para
     determinar se o gravador está fechando.  (Contribuição de Andrew
     Svetlov em bpo-32391(10).)

   * O novo método de corrotina *note loop.sock_sendfile(): b20. permite
     enviar arquivos usando *note os.sendfile: b21. quando possível.
     (Contribuição de Andrew Svetlov em bpo-32410(11).)

   * Os novos métodos *note Future.get_loop(): b22. e ‘Task.get_loop()’
     retornam a instância do laço no qual uma tarefa ou um future foi
     criado.  *note Server.get_loop(): b23. permite fazer o mesmo para
     objetos *note asyncio.Server: b24.  (Contribuição de Yury Selivanov
     em bpo-32415(12) e Srinivas Reddy Thatiparthy em bpo-32418(13).)

   * Agora é possível controlar como as instâncias de *note
     asyncio.Server: b24. começam a servir.  Anteriormente, o servidor
     começaria a servir imediatamente após ser criado.  O novo argumento
     nomeado 'start_serving' para *note loop.create_server(): b25. e
     *note loop.create_unix_server(): 1ae, bem como *note
     Server.start_serving(): b26. e *note Server.serve_forever(): b27.
     podem ser usados para dissociar a instanciação e o serviço do
     servidor.  O novo método *note Server.is_serving(): b28. retorna
     ‘True’ se o servidor estiver servindo.  Os objetos *note Server:
     b24. agora são gerenciadores de contexto assíncronos:

          srv = await loop.create_server(...)

          async with srv:
              # algum código

          # Neste ponto, srv é fechado e não mais aceita novas conexões.

     (Contribuição de Yury Selivanov em bpo-32662(14).)

   * Objetos de retorno de chamada retornados por *note
     loop.call_later(): b29. ganharam o novo método *note when(): b2a.
     que retorna um registro de data e hora de retorno de chamada
     agendado absoluto.  (Contribuição de Andrew Svetlov em
     bpo-32741(15).)

   * O método *note loop.create_datagram_endpoint(): 733. ganhou suporte
     para soquetes Unix.  (Contribuição de Quentin Dawans em
     bpo-31245(16).)

   * As funções *note asyncio.open_connection(): b2b, *note
     asyncio.start_server(): b2c, os métodos *note
     loop.create_connection(): 603, *note loop.create_server(): b25,
     *note loop.create_accepted_socket(): 7df. e suas variantes de
     soquete UNIX correspondentes agora aceitam o argumento nomeado
     'ssl_handshake_timeout'.  (Contribuição de Neil Aspinall em
     bpo-29970(17).)

   * O novo método *note Handle.cancelled(): b2d. retorna ‘True’ se o
     retorno de chamada foi cancelado.  (Contribuição de Marat
     Sharafutdinov em bpo-31943(18).)

   * A fonte de asyncio foi convertida para usar a sintaxe *note async:
     732./*note await: 1b9.  (Contribuição de Andrew Svetlov em
     bpo-32193(19).)

   * O novo método *note ReadTransport.is_reading(): b2e. pode ser usado
     para determinar o estado de leitura do transporte.  Além disso,
     chamadas para *note ReadTransport.resume_reading(): b2f. e *note
     ReadTransport.pause_reading(): b30. agora são idempotentes.
     (Contribuição de Yury Selivanov em bpo-32356(20).)

   * Loop methods which accept socket paths now support passing *note
     path-like objects: 2a0.  (Contributed by Yury Selivanov in
     bpo-32066(21).)

   * In *note asyncio: a. TCP sockets on Linux are now created with
     ‘TCP_NODELAY’ flag set by default.  (Contributed by Yury Selivanov
     and Victor Stinner in bpo-27456(22).)

   * Exceptions occurring in cancelled tasks are no longer logged.
     (Contributed by Yury Selivanov in bpo-30508(23).)

   * New ‘WindowsSelectorEventLoopPolicy’ and
     ‘WindowsProactorEventLoopPolicy’ classes.  (Contributed by Yury
     Selivanov in bpo-33792(24).)

Several ‘asyncio’ APIs have been *note deprecated: b31.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32314

   (2) https://peps.python.org/pep-0567/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32436

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32311

   (5) https://bugs.python.org/issue?@action=redirect&bpo=23749

   (6) https://bugs.python.org/issue?@action=redirect&bpo=31819

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32250

   (8) https://bugs.python.org/issue?@action=redirect&bpo=32251

   (9) https://bugs.python.org/issue?@action=redirect&bpo=32269

   (10) https://bugs.python.org/issue?@action=redirect&bpo=32391

   (11) https://bugs.python.org/issue?@action=redirect&bpo=32410

   (12) https://bugs.python.org/issue?@action=redirect&bpo=32415

   (13) https://bugs.python.org/issue?@action=redirect&bpo=32418

   (14) https://bugs.python.org/issue?@action=redirect&bpo=32662

   (15) https://bugs.python.org/issue?@action=redirect&bpo=32741

   (16) https://bugs.python.org/issue?@action=redirect&bpo=31245

   (17) https://bugs.python.org/issue?@action=redirect&bpo=29970

   (18) https://bugs.python.org/issue?@action=redirect&bpo=31943

   (19) https://bugs.python.org/issue?@action=redirect&bpo=32193

   (20) https://bugs.python.org/issue?@action=redirect&bpo=32356

   (21) https://bugs.python.org/issue?@action=redirect&bpo=32066

   (22) https://bugs.python.org/issue?@action=redirect&bpo=27456

   (23) https://bugs.python.org/issue?@action=redirect&bpo=30508

   (24) https://bugs.python.org/issue?@action=redirect&bpo=33792


File: python.info,  Node: binascii,  Next: calendar<2>,  Prev: asyncio<7>,  Up: Módulos melhorados<7>

1.7.5.3 binascii
................

The *note b2a_uu(): b33. function now accepts an optional 'backtick'
keyword argument.  When it’s true, zeros are represented by ‘'`'’
instead of spaces.  (Contributed by Xiang Zhang in bpo-30103(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30103


File: python.info,  Node: calendar<2>,  Next: collections<2>,  Prev: binascii,  Up: Módulos melhorados<7>

1.7.5.4 calendar
................

The *note HTMLCalendar: b35. class has new class attributes which ease
the customization of CSS classes in the produced HTML calendar.
(Contributed by Oz Tiram in bpo-30095(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30095


File: python.info,  Node: collections<2>,  Next: compileall<3>,  Prev: calendar<2>,  Up: Módulos melhorados<7>

1.7.5.5 collections
...................

‘collections.namedtuple()’ now supports default values.  (Contributed by
Raymond Hettinger in bpo-32320(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32320


File: python.info,  Node: compileall<3>,  Next: concurrent futures<3>,  Prev: collections<2>,  Up: Módulos melhorados<7>

1.7.5.6 compileall
..................

*note compileall.compile_dir(): b38. learned the new 'invalidation_mode'
parameter, which can be used to enable *note hash-based .pyc
invalidation: adb.  The invalidation mode can also be specified on the
command line using the new ‘--invalidation-mode’ argument.  (Contributed
by Benjamin Peterson in bpo-31650(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31650


File: python.info,  Node: concurrent futures<3>,  Next: contextlib<3>,  Prev: compileall<3>,  Up: Módulos melhorados<7>

1.7.5.7 concurrent.futures
..........................

*note ProcessPoolExecutor: 8f4. and *note ThreadPoolExecutor: 742. now
support the new 'initializer' and 'initargs' constructor arguments.
(Contributed by Antoine Pitrou in bpo-21423(1).)

The *note ProcessPoolExecutor: 8f4. can now take the multiprocessing
context via the new 'mp_context' argument.  (Contributed by Thomas
Moreau in bpo-31540(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21423

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31540


File: python.info,  Node: contextlib<3>,  Next: cProfile<2>,  Prev: concurrent futures<3>,  Up: Módulos melhorados<7>

1.7.5.8 contextlib
..................

The new *note nullcontext(): 7f0. is a simpler and faster no-op context
manager than *note ExitStack: b3b.  (Contributed by Jesse-Bakker in
bpo-10049(1).)

The new *note asynccontextmanager(): b3c, *note
AbstractAsyncContextManager: b3d, and *note AsyncExitStack: b3e. have
been added to complement their synchronous counterparts.  (Contributed
by Jelle Zijlstra in bpo-29679(2) and bpo-30241(3), and by Alexander
Mohr and Ilya Kulakov in bpo-29302(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10049

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29679

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30241

   (4) https://bugs.python.org/issue?@action=redirect&bpo=29302


File: python.info,  Node: cProfile<2>,  Next: crypt,  Prev: contextlib<3>,  Up: Módulos melhorados<7>

1.7.5.9 cProfile
................

The *note cProfile: 27. command line now accepts ‘-m module_name’ as an
alternative to script path.  (Contributed by Sanyam Khurana in
bpo-21862(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21862


File: python.info,  Node: crypt,  Next: datetime<4>,  Prev: cProfile<2>,  Up: Módulos melhorados<7>

1.7.5.10 crypt
..............

The ‘crypt’ module now supports the Blowfish hashing method.
(Contributed by Serhiy Storchaka in bpo-31664(1).)

The ‘mksalt()’ function now allows specifying the number of rounds for
hashing.  (Contributed by Serhiy Storchaka in bpo-31702(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31664

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31702


File: python.info,  Node: datetime<4>,  Next: dbm<2>,  Prev: crypt,  Up: Módulos melhorados<7>

1.7.5.11 datetime
.................

The new *note datetime.fromisoformat(): 617. method constructs a *note
datetime: 1cc. object from a string in one of the formats output by
*note datetime.isoformat(): b42.  (Contributed by Paul Ganssle in
bpo-15873(1).)

The *note tzinfo: 5de. class now supports sub-minute offsets.
(Contributed by Alexander Belopolsky in bpo-5288(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15873

   (2) https://bugs.python.org/issue?@action=redirect&bpo=5288


File: python.info,  Node: dbm<2>,  Next: decimal,  Prev: datetime<4>,  Up: Módulos melhorados<7>

1.7.5.12 dbm
............

*note dbm.dumb: 32. now supports reading read-only files and no longer
writes the index file when it is not changed.


File: python.info,  Node: decimal,  Next: dis<3>,  Prev: dbm<2>,  Up: Módulos melhorados<7>

1.7.5.13 decimal
................

The *note decimal: 36. module now uses *note context variables: ad0. to
store the decimal context.  (Contributed by Yury Selivanov in
bpo-32630(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32630


File: python.info,  Node: dis<3>,  Next: distutils<4>,  Prev: decimal,  Up: Módulos melhorados<7>

1.7.5.14 dis
............

The *note dis(): b46. function is now able to disassemble nested code
objects (the code of comprehensions, generator expressions and nested
functions, and the code used for building nested classes).  The maximum
depth of disassembly recursion is controlled by the new 'depth'
parameter.  (Contributed by Serhiy Storchaka in bpo-11822(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=11822


File: python.info,  Node: distutils<4>,  Next: enum<5>,  Prev: dis<3>,  Up: Módulos melhorados<7>

1.7.5.15 distutils
..................

‘README.rst’ is now included in the list of distutils standard READMEs
and therefore included in source distributions.  (Contributed by Ryan
Gonzalez in bpo-11913(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=11913


File: python.info,  Node: enum<5>,  Next: functools<3>,  Prev: distutils<4>,  Up: Módulos melhorados<7>

1.7.5.16 enum
.............

The *note Enum: 630. learned the new ‘_ignore_’ class property, which
allows listing the names of properties which should not become enum
members.  (Contributed by Ethan Furman in bpo-31801(1).)

In Python 3.8, attempting to check for non-Enum objects in *note Enum:
630. classes will raise a *note TypeError: 2c3. (e.g.  ‘1 in Color’);
similarly, attempting to check for non-Flag objects in a *note Flag:
623. member will raise *note TypeError: 2c3. (e.g.  ‘1 in Perm.RW’);
currently, both operations return *note False: b49. instead and are
deprecated.  (Contributed by Ethan Furman in bpo-33217(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31801

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33217


File: python.info,  Node: functools<3>,  Next: gc<4>,  Prev: enum<5>,  Up: Módulos melhorados<7>

1.7.5.17 functools
..................

*note functools.singledispatch(): 639. now supports registering
implementations using type annotations.  (Contributed by Łukasz Langa in
bpo-32227(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32227


File: python.info,  Node: gc<4>,  Next: hmac<2>,  Prev: functools<3>,  Up: Módulos melhorados<7>

1.7.5.18 gc
...........

The new *note gc.freeze(): b4c. function allows freezing all objects
tracked by the garbage collector and excluding them from future
collections.  This can be used before a POSIX ‘fork()’ call to make the
GC copy-on-write friendly or to speed up collection.  The new *note
gc.unfreeze(): b4d. functions reverses this operation.  Additionally,
*note gc.get_freeze_count(): b4e. can be used to obtain the number of
frozen objects.  (Contributed by Li Zekun in bpo-31558(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31558


File: python.info,  Node: hmac<2>,  Next: http client,  Prev: gc<4>,  Up: Módulos melhorados<7>

1.7.5.19 hmac
.............

The *note hmac: 6a. module now has an optimized one-shot *note digest():
b50. function, which is up to three times faster than *note HMAC(): b51.
(Contributed by Christian Heimes in bpo-32433(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32433


File: python.info,  Node: http client,  Next: http server,  Prev: hmac<2>,  Up: Módulos melhorados<7>

1.7.5.20 http.client
....................

*note HTTPConnection: b53. and *note HTTPSConnection: b54. now support
the new 'blocksize' argument for improved upload throughput.
(Contributed by Nir Soffer in bpo-31945(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31945


File: python.info,  Node: http server,  Next: idlelib e IDLE,  Prev: http client,  Up: Módulos melhorados<7>

1.7.5.21 http.server
....................

*note SimpleHTTPRequestHandler: b56. now supports the HTTP
‘If-Modified-Since’ header.  The server returns the 304 response status
if the target file was not modified after the time specified in the
header.  (Contributed by Pierre Quentel in bpo-29654(1).)

*note SimpleHTTPRequestHandler: b56. accepts the new 'directory'
argument, in addition to the new ‘--directory’ command line argument.
With this parameter, the server serves the specified directory, by
default it uses the current working directory.  (Contributed by Stéphane
Wirtel and Julien Palard in bpo-28707(2).)

The new *note ThreadingHTTPServer: b57. class uses threads to handle
requests using *note ThreadingMixIn: b58.  It is used when ‘http.server’
is run with ‘-m’.  (Contributed by Julien Palard in bpo-31639(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29654

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28707

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31639


File: python.info,  Node: idlelib e IDLE,  Next: importlib<4>,  Prev: http server,  Up: Módulos melhorados<7>

1.7.5.22 idlelib e IDLE
.......................

Multiple fixes for autocompletion.  (Contributed by Louie Lu in
bpo-15786(1).)

Module Browser (on the File menu, formerly called Class Browser), now
displays nested functions and classes in addition to top-level functions
and classes.  (Contributed by Guilherme Polo, Cheryl Sabella, and Terry
Jan Reedy in bpo-1612262(2).)

The Settings dialog (Options, Configure IDLE) has been partly rewritten
to improve both appearance and function.  (Contributed by Cheryl Sabella
and Terry Jan Reedy in multiple issues.)

The font sample now includes a selection of non-Latin characters so that
users can better see the effect of selecting a particular font.
(Contributed by Terry Jan Reedy in bpo-13802(3).)  The sample can be
edited to include other characters.  (Contributed by Serhiy Storchaka in
bpo-31860(4).)

The IDLE features formerly implemented as extensions have been
reimplemented as normal features.  Their settings have been moved from
the Extensions tab to other dialog tabs.  (Contributed by Charles
Wohlganger and Terry Jan Reedy in bpo-27099(5).)

Editor code context option revised.  Box displays all context lines up
to maxlines.  Clicking on a context line jumps the editor to that line.
Context colors for custom themes is added to Highlights tab of Settings
dialog.  (Contributed by Cheryl Sabella and Terry Jan Reedy in
bpo-33642(6), bpo-33768(7), and bpo-33679(8).)

On Windows, a new API call tells Windows that tk scales for DPI. On
Windows 8.1+ or 10, with DPI compatibility properties of the Python
binary unchanged, and a monitor resolution greater than 96 DPI, this
should make text and lines sharper.  It should otherwise have no effect.
(Contributed by Terry Jan Reedy in bpo-33656(9).)

New in 3.7.1:

A saída em N linhas (50 por padrão) é compactada até um limite inferior.
N pode ser alterado na seção PyShell da página General da caixa de
diálogo Settings.  Menos linhas, mas possivelmente extra longas, podem
ser espremidas clicando com o botão direito do mouse na saída.  A saída
compactada pode ser expandida no local clicando duas vezes no botão ou
na área de transferência ou em uma janela separada clicando com o botão
direito do mouse.  (Contribuição de Tal Einat em bpo-1529353(10).)

The changes above have been backported to 3.6 maintenance releases.

NEW in 3.7.4:

Add “Run Customized” to the Run menu to run a module with customized
settings.  Any command line arguments entered are added to sys.argv.
They re-appear in the box for the next customized run.  One can also
suppress the normal Shell main module restart.  (Contributed by Cheryl
Sabella, Terry Jan Reedy, and others in bpo-5680(11) and bpo-37627(12).)

New in 3.7.5:

Add optional line numbers for IDLE editor windows.  Windows open without
line numbers unless set otherwise in the General tab of the
configuration dialog.  Line numbers for an existing window are shown and
hidden in the Options menu.  (Contributed by Tal Einat and Saimadhav
Heblikar in bpo-17535(13).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15786

   (2) https://bugs.python.org/issue?@action=redirect&bpo=1612262

   (3) https://bugs.python.org/issue?@action=redirect&bpo=13802

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31860

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27099

   (6) https://bugs.python.org/issue?@action=redirect&bpo=33642

   (7) https://bugs.python.org/issue?@action=redirect&bpo=33768

   (8) https://bugs.python.org/issue?@action=redirect&bpo=33679

   (9) https://bugs.python.org/issue?@action=redirect&bpo=33656

   (10) https://bugs.python.org/issue?@action=redirect&bpo=1529353

   (11) https://bugs.python.org/issue?@action=redirect&bpo=5680

   (12) https://bugs.python.org/issue?@action=redirect&bpo=37627

   (13) https://bugs.python.org/issue?@action=redirect&bpo=17535


File: python.info,  Node: importlib<4>,  Next: io<4>,  Prev: idlelib e IDLE,  Up: Módulos melhorados<7>

1.7.5.23 importlib
..................

The *note importlib.abc.ResourceReader: b10. ABC was introduced to
support the loading of resources from packages.  See also *note
importlib.resources: ad2.  (Contributed by Barry Warsaw, Brett Cannon in
bpo-32248(1).)

*note importlib.reload(): 519. now raises *note ModuleNotFoundError:
b5b. if the module lacks a spec.  (Contributed by Garvit Khatri in
bpo-29851(2).)

*note importlib.util.find_spec(): 2cd. now raises *note
ModuleNotFoundError: b5b. instead of *note AttributeError: 34b. if the
specified parent module is not a package (i.e.  lacks a ‘__path__’
attribute).  (Contributed by Milan Oberkirch in bpo-30436(3).)

The new *note importlib.util.source_hash(): b5c. can be used to compute
the hash of the passed source.  A *note hash-based .pyc file: adb.
embeds the value returned by this function.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32248

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29851

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30436


File: python.info,  Node: io<4>,  Next: ipaddress<3>,  Prev: importlib<4>,  Up: Módulos melhorados<7>

1.7.5.24 io
...........

The new *note TextIOWrapper.reconfigure(): b5e. method can be used to
reconfigure the text stream with the new settings.  (Contributed by
Antoine Pitrou in bpo-30526(1) and INADA Naoki in bpo-15216(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30526

   (2) https://bugs.python.org/issue?@action=redirect&bpo=15216


File: python.info,  Node: ipaddress<3>,  Next: itertools<5>,  Prev: io<4>,  Up: Módulos melhorados<7>

1.7.5.25 ipaddress
..................

The new ‘subnet_of()’ and ‘supernet_of()’ methods of *note
ipaddress.IPv6Network: 1ff. and *note ipaddress.IPv4Network: 1fe. can be
used for network containment tests.  (Contributed by Michel Albert and
Cheryl Sabella in bpo-20825(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20825


File: python.info,  Node: itertools<5>,  Next: locale<4>,  Prev: ipaddress<3>,  Up: Módulos melhorados<7>

1.7.5.26 itertools
..................

*note itertools.islice(): b61. now accepts *note integer-like objects:
71d. as start, stop, and slice arguments.  (Contributed by Will Roberts
in bpo-30537(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30537


File: python.info,  Node: locale<4>,  Next: logging<3>,  Prev: itertools<5>,  Up: Módulos melhorados<7>

1.7.5.27 locale
...............

The new 'monetary' argument to *note locale.format_string(): 51f. can be
used to make the conversion use monetary thousands separators and
grouping strings.  (Contributed by Garvit in bpo-10379(1).)

The *note locale.getpreferredencoding(): 53a. function now always
returns ‘'UTF-8'’ on Android or when in the *note forced UTF-8 mode:
ada.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10379


File: python.info,  Node: logging<3>,  Next: math<6>,  Prev: locale<4>,  Up: Módulos melhorados<7>

1.7.5.28 logging
................

*note Logger: b64. instances can now be pickled.  (Contributed by Vinay
Sajip in bpo-30520(1).)

The new *note StreamHandler.setStream(): b65. method can be used to
replace the logger stream after handler creation.  (Contributed by Vinay
Sajip in bpo-30522(2).)

It is now possible to specify keyword arguments to handler constructors
in configuration passed to *note logging.config.fileConfig(): b66.
(Contributed by Preston Landers in bpo-31080(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30520

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30522

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31080


File: python.info,  Node: math<6>,  Next: mimetypes<2>,  Prev: logging<3>,  Up: Módulos melhorados<7>

1.7.5.29 math
.............

The new *note math.remainder(): b68. function implements the IEEE
754-style remainder operation.  (Contributed by Mark Dickinson in
bpo-29962(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29962


File: python.info,  Node: mimetypes<2>,  Next: msilib,  Prev: math<6>,  Up: Módulos melhorados<7>

1.7.5.30 mimetypes
..................

The MIME type of .bmp has been changed from ‘'image/x-ms-bmp'’ to
‘'image/bmp'’.  (Contributed by Nitish Chandra in bpo-22589(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22589


File: python.info,  Node: msilib,  Next: multiprocessing<4>,  Prev: mimetypes<2>,  Up: Módulos melhorados<7>

1.7.5.31 msilib
...............

The new ‘Database.Close()’ method can be used to close the MSI database.
(Contributed by Berker Peksag in bpo-20486(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20486


File: python.info,  Node: multiprocessing<4>,  Next: os<7>,  Prev: msilib,  Up: Módulos melhorados<7>

1.7.5.32 multiprocessing
........................

The new *note Process.close(): b6c. method explicitly closes the process
object and releases all resources associated with it.  *note ValueError:
202. is raised if the underlying process is still running.  (Contributed
by Antoine Pitrou in bpo-30596(1).)

The new *note Process.kill(): b6d. method can be used to terminate the
process using the *note SIGKILL: b6e. signal on Unix.  (Contributed by
Vitor Pereira in bpo-30794(2).)

Non-daemonic threads created by *note Process: b6f. are now joined on
process exit.  (Contributed by Antoine Pitrou in bpo-18966(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30596

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30794

   (3) https://bugs.python.org/issue?@action=redirect&bpo=18966


File: python.info,  Node: os<7>,  Next: pathlib<8>,  Prev: multiprocessing<4>,  Up: Módulos melhorados<7>

1.7.5.33 os
...........

*note os.fwalk(): b71. now accepts the 'path' argument as *note bytes:
1c2.  (Contributed by Serhiy Storchaka in bpo-28682(1).)

*note os.scandir(): a68. gained support for *note file descriptors: b72.
(Contributed by Serhiy Storchaka in bpo-25996(2).)

The new *note register_at_fork(): 300. function allows registering
Python callbacks to be executed at process fork.  (Contributed by
Antoine Pitrou in bpo-16500(3).)

Added *note os.preadv(): b73. (combine the functionality of *note
os.readv(): b74. and *note os.pread(): b75.) and *note os.pwritev():
b76. functions (combine the functionality of *note os.writev(): b77. and
*note os.pwrite(): b78.).  (Contributed by Pablo Galindo in
bpo-31368(4).)

The mode argument of *note os.makedirs(): 21e. no longer affects the
file permission bits of newly created intermediate-level directories.
(Contributed by Serhiy Storchaka in bpo-19930(5).)

*note os.dup2(): b79. now returns the new file descriptor.  Previously,
‘None’ was always returned.  (Contributed by Benjamin Peterson in
bpo-32441(6).)

The structure returned by *note os.stat(): 4a0. now contains the *note
st_fstype: b7a. attribute on Solaris and its derivatives.  (Contributed
by Jesús Cea Avión in bpo-32659(7).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28682

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25996

   (3) https://bugs.python.org/issue?@action=redirect&bpo=16500

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31368

   (5) https://bugs.python.org/issue?@action=redirect&bpo=19930

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32441

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32659


File: python.info,  Node: pathlib<8>,  Next: pdb<4>,  Prev: os<7>,  Up: Módulos melhorados<7>

1.7.5.34 pathlib
................

The new *note Path.is_mount(): a21. method is now available on POSIX
systems and can be used to determine whether a path is a mount point.
(Contributed by Cooper Ry Lees in bpo-30897(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30897


File: python.info,  Node: pdb<4>,  Next: py_compile<3>,  Prev: pathlib<8>,  Up: Módulos melhorados<7>

1.7.5.35 pdb
............

*note pdb.set_trace(): 235. now takes an optional 'header' keyword-only
argument.  If given, it is printed to the console just before debugging
begins.  (Contributed by Barry Warsaw in bpo-31389(1).)

*note pdb: a5. command line now accepts ‘-m module_name’ as an
alternative to script file.  (Contributed by Mario Corchero in
bpo-32206(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31389

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32206


File: python.info,  Node: py_compile<3>,  Next: pydoc<2>,  Prev: pdb<4>,  Up: Módulos melhorados<7>

1.7.5.36 py_compile
...................

*note py_compile.compile(): a2f. – and by extension, *note compileall:
20. – now respects the ‘SOURCE_DATE_EPOCH’ environment variable by
unconditionally creating ‘.pyc’ files for hash-based validation.  This
allows for guaranteeing reproducible builds(1) of ‘.pyc’ files when they
are created eagerly.  (Contributed by Bernhard M. Wiedemann in
bpo-29708(2).)

   ---------- Footnotes ----------

   (1) https://reproducible-builds.org/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29708


File: python.info,  Node: pydoc<2>,  Next: queue<2>,  Prev: py_compile<3>,  Up: Módulos melhorados<7>

1.7.5.37 pydoc
..............

The pydoc server can now bind to an arbitrary hostname specified by the
new ‘-n’ command-line argument.  (Contributed by Feanil Patel in
bpo-31128(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31128


File: python.info,  Node: queue<2>,  Next: re<4>,  Prev: pydoc<2>,  Up: Módulos melhorados<7>

1.7.5.38 queue
..............

The new *note SimpleQueue: b80. class is an unbounded FIFO queue.
(Contributed by Antoine Pitrou in bpo-14976(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14976


File: python.info,  Node: re<4>,  Next: signal<2>,  Prev: queue<2>,  Up: Módulos melhorados<7>

1.7.5.39 re
...........

The flags *note re.ASCII: 62c, *note re.LOCALE: b82. and *note
re.UNICODE: b83. can be set within the scope of a group.  (Contributed
by Serhiy Storchaka in bpo-31690(1).)

*note re.split(): 2a2. now supports splitting on a pattern like ‘r'\b'’,
‘'^$'’ or ‘(?=-)’ that matches an empty string.  (Contributed by Serhiy
Storchaka in bpo-25054(2).)

Regular expressions compiled with the *note re.LOCALE: b82. flag no
longer depend on the locale at compile time.  Locale settings are
applied only when the compiled regular expression is used.  (Contributed
by Serhiy Storchaka in bpo-30215(3).)

*note FutureWarning: 415. is now emitted if a regular expression
contains character set constructs that will change semantically in the
future, such as nested sets and set operations.  (Contributed by Serhiy
Storchaka in bpo-30349(4).)

Compiled regular expression and match objects can now be copied using
*note copy.copy(): 534. and *note copy.deepcopy(): b84.  (Contributed by
Serhiy Storchaka in bpo-10076(5).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31690

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25054

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30215

   (4) https://bugs.python.org/issue?@action=redirect&bpo=30349

   (5) https://bugs.python.org/issue?@action=redirect&bpo=10076


File: python.info,  Node: signal<2>,  Next: socket<5>,  Prev: re<4>,  Up: Módulos melhorados<7>

1.7.5.40 signal
...............

The new 'warn_on_full_buffer' argument to the *note
signal.set_wakeup_fd(): b86. function makes it possible to specify
whether Python prints a warning on stderr when the wakeup buffer
overflows.  (Contributed by Nathaniel J. Smith in bpo-30050(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30050


File: python.info,  Node: socket<5>,  Next: socketserver,  Prev: signal<2>,  Up: Módulos melhorados<7>

1.7.5.41 socket
...............

The new *note socket.getblocking(): b88. method returns ‘True’ if the
socket is in blocking mode and ‘False’ otherwise.  (Contributed by Yury
Selivanov in bpo-32373(1).)

The new *note socket.close(): b89. function closes the passed socket
file descriptor.  This function should be used instead of *note
os.close(): b8a. for better compatibility across platforms.
(Contributed by Christian Heimes in bpo-32454(2).)

The *note socket: cc. module now exposes the *note
socket.TCP_CONGESTION: b8b. (Linux 2.6.13), *note
socket.TCP_USER_TIMEOUT: b8b. (Linux 2.6.37), and *note
socket.TCP_NOTSENT_LOWAT: b8b. (Linux 3.12) constants.  (Contributed by
Omar Sandoval in bpo-26273(3) and Nathaniel J. Smith in bpo-29728(4).)

Support for *note socket.AF_VSOCK: b8c. sockets has been added to allow
communication between virtual machines and their hosts.  (Contributed by
Cathy Avery in bpo-27584(5).)

Sockets now auto-detect family, type and protocol from file descriptor
by default.  (Contributed by Christian Heimes in bpo-28134(6).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32373

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32454

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26273

   (4) https://bugs.python.org/issue?@action=redirect&bpo=29728

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27584

   (6) https://bugs.python.org/issue?@action=redirect&bpo=28134


File: python.info,  Node: socketserver,  Next: sqlite3<6>,  Prev: socket<5>,  Up: Módulos melhorados<7>

1.7.5.42 socketserver
.....................

*note socketserver.ThreadingMixIn.server_close: b8e. now waits until all
non-daemon threads complete.  *note
socketserver.ForkingMixIn.server_close: b8e. now waits until all child
processes complete.

Add a new *note socketserver.ForkingMixIn.block_on_close: b8f. class
attribute to *note socketserver.ForkingMixIn: b90. and *note
socketserver.ThreadingMixIn: b58. classes.  Set the class attribute to
‘False’ to get the pre-3.7 behaviour.


File: python.info,  Node: sqlite3<6>,  Next: ssl<5>,  Prev: socketserver,  Up: Módulos melhorados<7>

1.7.5.43 sqlite3
................

*note sqlite3.Connection: 245. now exposes the *note backup(): b92.
method when the underlying SQLite library is at version 3.6.11 or
higher.  (Contributed by Lele Gaifax in bpo-27645(1).)

The 'database' argument of *note sqlite3.connect(): 2a8. now accepts any
*note path-like object: 2a0, instead of just a string.  (Contributed by
Anders Lorentsen in bpo-31843(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27645

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31843


File: python.info,  Node: ssl<5>,  Next: string<2>,  Prev: sqlite3<6>,  Up: Módulos melhorados<7>

1.7.5.44 ssl
............

The *note ssl: d0. module now uses OpenSSL’s builtin API instead of
‘match_hostname()’ to check a host name or an IP address.  Values are
validated during TLS handshake.  Any certificate validation error
including failing the host name check now raises *note
SSLCertVerificationError: b94. and aborts the handshake with a proper
TLS Alert message.  The new exception contains additional information.
Host name validation can be customized with *note
SSLContext.hostname_checks_common_name: b95.  (Contributed by Christian
Heimes in bpo-31399(1).)

     Nota: The improved host name check requires a 'libssl'
     implementation compatible with OpenSSL 1.0.2 or 1.1.  Consequently,
     OpenSSL 0.9.8 and 1.0.1 are no longer supported (see *note Platform
     Support Removals: b96. for more details).  The ssl module is mostly
     compatible with LibreSSL 2.7.2 and newer.

The ‘ssl’ module no longer sends IP addresses in SNI TLS extension.
(Contributed by Christian Heimes in bpo-32185(2).)

‘match_hostname()’ no longer supports partial wildcards like
‘www*.example.org’.  (Contributed by Mandeep Singh in bpo-23033(3) and
Christian Heimes in bpo-31399(4).)

The default cipher suite selection of the ‘ssl’ module now uses a
blacklist approach rather than a hard-coded whitelist.  Python no longer
re-enables ciphers that have been blocked by OpenSSL security updates.
Default cipher suite selection can be configured at compile time.
(Contributed by Christian Heimes in bpo-31429(5).)

Validation of server certificates containing internationalized domain
names (IDNs) is now supported.  As part of this change, the *note
SSLSocket.server_hostname: b97. attribute now stores the expected
hostname in A-label form (‘"xn--pythn-mua.org"’), rather than the
U-label form (‘"pythön.org"’).  (Contributed by Nathaniel J. Smith and
Christian Heimes in bpo-28414(6).)

The ‘ssl’ module has preliminary and experimental support for TLS 1.3
and OpenSSL 1.1.1.  At the time of Python 3.7.0 release, OpenSSL 1.1.1
is still under development and TLS 1.3 hasn’t been finalized yet.  The
TLS 1.3 handshake and protocol behaves slightly differently than TLS 1.2
and earlier, see *note TLS 1.3: b98.  (Contributed by Christian Heimes
in bpo-32947(7), bpo-20995(8), bpo-29136(9), bpo-30622(10) and
bpo-33618(11))

*note SSLSocket: 8f0. and *note SSLObject: b99. no longer have a public
constructor.  Direct instantiation was never a documented and supported
feature.  Instances must be created with *note SSLContext: 294. methods
*note wrap_socket(): 525. and *note wrap_bio(): b9a.  (Contributed by
Christian Heimes in bpo-32951(12))

OpenSSL 1.1 APIs for setting the minimum and maximum TLS protocol
version are available as *note SSLContext.minimum_version: 874. and
*note SSLContext.maximum_version: 875.  Supported protocols are
indicated by several new flags, such as *note HAS_TLSv1_1: b9b.
(Contributed by Christian Heimes in bpo-32609(13).)

Added *note ssl.SSLContext.post_handshake_auth: a3b. to enable and *note
ssl.SSLSocket.verify_client_post_handshake(): a3c. to initiate TLS 1.3
post-handshake authentication.  (Contributed by Christian Heimes in
gh-78851(14).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31399

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32185

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23033

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31399

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31429

   (6) https://bugs.python.org/issue?@action=redirect&bpo=28414

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32947

   (8) https://bugs.python.org/issue?@action=redirect&bpo=20995

   (9) https://bugs.python.org/issue?@action=redirect&bpo=29136

   (10) https://bugs.python.org/issue?@action=redirect&bpo=30622

   (11) https://bugs.python.org/issue?@action=redirect&bpo=33618

   (12) https://bugs.python.org/issue?@action=redirect&bpo=32951

   (13) https://bugs.python.org/issue?@action=redirect&bpo=32609

   (14) https://github.com/python/cpython/issues/78851


File: python.info,  Node: string<2>,  Next: subprocess<2>,  Prev: ssl<5>,  Up: Módulos melhorados<7>

1.7.5.45 string
...............

*note string.Template: 687. now lets you to optionally modify the
regular expression pattern for braced placeholders and non-braced
placeholders separately.  (Contributed by Barry Warsaw in
bpo-1198569(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1198569


File: python.info,  Node: subprocess<2>,  Next: sys<8>,  Prev: string<2>,  Up: Módulos melhorados<7>

1.7.5.46 subprocess
...................

The *note subprocess.run(): b9e. function accepts the new
'capture_output' keyword argument.  When true, stdout and stderr will be
captured.  This is equivalent to passing *note subprocess.PIPE: b9f. as
'stdout' and 'stderr' arguments.  (Contributed by Bo Bayles in
bpo-32102(1).)

The ‘subprocess.run’ function and the *note subprocess.Popen: 199.
constructor now accept the 'text' keyword argument as an alias to
'universal_newlines'.  (Contributed by Andrew Clegg in bpo-31756(2).)

On Windows the default for 'close_fds' was changed from ‘False’ to
‘True’ when redirecting the standard handles.  It’s now possible to set
'close_fds' to true when redirecting the standard handles.  See *note
subprocess.Popen: 199.  This means that 'close_fds' now defaults to
‘True’ on all supported platforms.  (Contributed by Segev Finer in
bpo-19764(3).)

The subprocess module is now more graceful when handling *note
KeyboardInterrupt: 9d9. during *note subprocess.call(): ba0, *note
subprocess.run(): b9e, or in a *note Popen: 199. context manager.  It
now waits a short amount of time for the child to exit, before
continuing the handling of the ‘KeyboardInterrupt’ exception.
(Contributed by Gregory P. Smith in bpo-25942(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32102

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31756

   (3) https://bugs.python.org/issue?@action=redirect&bpo=19764

   (4) https://bugs.python.org/issue?@action=redirect&bpo=25942


File: python.info,  Node: sys<8>,  Next: time<5>,  Prev: subprocess<2>,  Up: Módulos melhorados<7>

1.7.5.47 sys
............

The new *note sys.breakpointhook(): aea. hook function is called by the
built-in *note breakpoint(): 234.  (Contributed by Barry Warsaw in
bpo-31353(1).)

On Android, the new *note sys.getandroidapilevel(): ba2. returns the
build-time Android API version.  (Contributed by Victor Stinner in
bpo-28740(2).)

The new *note sys.get_coroutine_origin_tracking_depth(): ba3. function
returns the current coroutine origin tracking depth, as set by the new
*note sys.set_coroutine_origin_tracking_depth(): ba4.  *note asyncio: a.
has been converted to use this new API instead of the deprecated
‘sys.set_coroutine_wrapper()’.  (Contributed by Nathaniel J. Smith in
bpo-32591(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31353

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28740

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32591


File: python.info,  Node: time<5>,  Next: tkinter<5>,  Prev: sys<8>,  Up: Módulos melhorados<7>

1.7.5.48 time
.............

PEP 564(1) adds six new functions with nanosecond resolution to the
*note time: ee. module:

   * *note time.clock_gettime_ns(): af4.

   * *note time.clock_settime_ns(): af5.

   * *note time.monotonic_ns(): af6.

   * *note time.perf_counter_ns(): af7.

   * *note time.process_time_ns(): af8.

   * *note time.time_ns(): af9.

New clock identifiers have been added:

   * *note time.CLOCK_BOOTTIME: ba6. (Linux): Identical to *note
     time.CLOCK_MONOTONIC: 699, except it also includes any time that
     the system is suspended.

   * *note time.CLOCK_PROF: ba7. (FreeBSD, NetBSD and OpenBSD):
     High-resolution per-process CPU timer.

   * *note time.CLOCK_UPTIME: ba8. (FreeBSD, OpenBSD): Time whose
     absolute value is the time the system has been running and not
     suspended, providing accurate uptime measurement.

The new *note time.thread_time(): 93d. and *note time.thread_time_ns():
ba9. functions can be used to get per-thread CPU time measurements.
(Contributed by Antoine Pitrou in bpo-32025(2).)

The new *note time.pthread_getcpuclockid(): baa. function returns the
clock ID of the thread-specific CPU-time clock.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0564/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32025


File: python.info,  Node: tkinter<5>,  Next: tracemalloc<2>,  Prev: time<5>,  Up: Módulos melhorados<7>

1.7.5.49 tkinter
................

The new *note tkinter.ttk.Spinbox: bac. class is now available.
(Contributed by Alan Moore in bpo-32585(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32585


File: python.info,  Node: tracemalloc<2>,  Next: types<4>,  Prev: tkinter<5>,  Up: Módulos melhorados<7>

1.7.5.50 tracemalloc
....................

*note tracemalloc.Traceback: bae. behaves more like regular tracebacks,
sorting the frames from oldest to most recent.  *note
Traceback.format(): baf. now accepts negative 'limit', truncating the
result to the ‘abs(limit)’ oldest frames.  To get the old behaviour, use
the new 'most_recent_first' argument to ‘Traceback.format()’.
(Contributed by Jesse Bakker in bpo-32121(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32121


File: python.info,  Node: types<4>,  Next: unicodedata<6>,  Prev: tracemalloc<2>,  Up: Módulos melhorados<7>

1.7.5.51 types
..............

The new *note WrapperDescriptorType: bb1, *note MethodWrapperType: 64b,
*note MethodDescriptorType: bb2, and *note ClassMethodDescriptorType:
bb3. classes are now available.  (Contributed by Manuel Krebber and
Guido van Rossum in bpo-29377(1), and Serhiy Storchaka in bpo-32265(2).)

The new *note types.resolve_bases(): bb4. function resolves MRO entries
dynamically as specified by PEP 560(3).  (Contributed by Ivan Levkivskyi
in bpo-32717(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29377

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32265

   (3) https://peps.python.org/pep-0560/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32717


File: python.info,  Node: unicodedata<6>,  Next: unittest<7>,  Prev: types<4>,  Up: Módulos melhorados<7>

1.7.5.52 unicodedata
....................

The internal *note unicodedata: 105. database has been upgraded to use
Unicode 11(1).  (Contributed by Benjamin Peterson.)

   ---------- Footnotes ----------

   (1) https://www.unicode.org/versions/Unicode11.0.0/


File: python.info,  Node: unittest<7>,  Next: unittest mock,  Prev: unicodedata<6>,  Up: Módulos melhorados<7>

1.7.5.53 unittest
.................

The new ‘-k’ command-line option allows filtering tests by a name
substring or a Unix shell-like pattern.  For example, ‘python -m
unittest -k foo’ runs ‘foo_tests.SomeTest.test_something’,
‘bar_tests.SomeTest.test_foo’, but not
‘bar_tests.FooTest.test_something’.  (Contributed by Jonas Haag in
bpo-32071(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32071


File: python.info,  Node: unittest mock,  Next: urllib parse<5>,  Prev: unittest<7>,  Up: Módulos melhorados<7>

1.7.5.54 unittest.mock
......................

The *note sentinel: bb8. attributes now preserve their identity when
they are *note copied: 25. or *note pickled: a6.  (Contributed by Serhiy
Storchaka in bpo-20804(1).)

The new *note seal(): bb9. function allows sealing *note Mock: a54.
instances, which will disallow further creation of attribute mocks.  The
seal is applied recursively to all attributes that are themselves mocks.
(Contributed by Mario Corchero in bpo-30541(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20804

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30541


File: python.info,  Node: urllib parse<5>,  Next: uu,  Prev: unittest mock,  Up: Módulos melhorados<7>

1.7.5.55 urllib.parse
.....................

*note urllib.parse.quote(): bbb. has been updated from RFC 2396(1) to
RFC 3986(2), adding ‘~’ to the set of characters that are never quoted
by default.  (Contributed by Christian Theune and Ratnadeep Debnath in
bpo-16285(3).)

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2396.html

   (2) https://datatracker.ietf.org/doc/html/rfc3986.html

   (3) https://bugs.python.org/issue?@action=redirect&bpo=16285


File: python.info,  Node: uu,  Next: uuid<2>,  Prev: urllib parse<5>,  Up: Módulos melhorados<7>

1.7.5.56 uu
...........

The ‘uu.encode()’ function now accepts an optional 'backtick' keyword
argument.  When it’s true, zeros are represented by ‘'`'’ instead of
spaces.  (Contributed by Xiang Zhang in bpo-30103(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30103


File: python.info,  Node: uuid<2>,  Next: avisos<3>,  Prev: uu,  Up: Módulos melhorados<7>

1.7.5.57 uuid
.............

The new *note UUID.is_safe: bbe. attribute relays information from the
platform about whether generated UUIDs are generated with a
multiprocessing-safe method.  (Contributed by Barry Warsaw in
bpo-22807(1).)

*note uuid.getnode(): bbf. now prefers universally administered MAC
addresses over locally administered MAC addresses.  This makes a better
guarantee for global uniqueness of UUIDs returned from *note
uuid.uuid1(): bc0.  If only locally administered MAC addresses are
available, the first such one found is returned.  (Contributed by Barry
Warsaw in bpo-32107(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22807

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32107


File: python.info,  Node: avisos<3>,  Next: xml<5>,  Prev: uuid<2>,  Up: Módulos melhorados<7>

1.7.5.58 avisos
...............

The initialization of the default warnings filters has changed as
follows:

   * warnings enabled via command line options (including those for
     *note -b: 5e3. and the new CPython-specific *note -X: 176. ‘dev’
     option) are always passed to the warnings machinery via the *note
     sys.warnoptions: 3b0. attribute.

   * warnings filters enabled via the command line or the environment
     now have the following order of precedence:

        * the ‘BytesWarning’ filter for *note -b: 5e3. (or ‘-bb’)

        * any filters specified with the *note -W: 8cd. option

        * any filters specified with the *note PYTHONWARNINGS: bc2.
          environment variable

        * any other CPython specific filters (e.g.  the ‘default’ filter
          added for the new ‘-X dev’ mode)

        * any implicit filters defined directly by the warnings
          machinery

   * in *note CPython debug builds: 1f9, all warnings are now displayed
     by default (the implicit filter list is empty)

(Contributed by Nick Coghlan and Victor Stinner in bpo-20361(1),
bpo-32043(2), and bpo-32230(3).)

Deprecation warnings are once again shown by default in single-file
scripts and at the interactive prompt.  See *note PEP 565; Mostra
DeprecationWarning em __main__: add. for details.  (Contributed by Nick
Coghlan in bpo-31975(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20361

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32043

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32230

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31975


File: python.info,  Node: xml<5>,  Next: xml etree,  Prev: avisos<3>,  Up: Módulos melhorados<7>

1.7.5.59 xml
............

As mitigation against DTD and external entity retrieval, the *note
xml.dom.minidom: 122. and *note xml.sax: 129. modules no longer process
external entities by default.  (Contributed by Christian Heimes in
gh-61441(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/61441


File: python.info,  Node: xml etree,  Next: xmlrpc server,  Prev: xml<5>,  Up: Módulos melhorados<7>

1.7.5.60 xml.etree
..................

*note ElementPath: bc5. predicates in the ‘find()’ methods can now
compare text of the current node with ‘[. = "text"]’, not only text in
children.  Predicates also allow adding spaces for better readability.
(Contributed by Stefan Behnel in bpo-31648(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31648


File: python.info,  Node: xmlrpc server,  Next: zipapp,  Prev: xml etree,  Up: Módulos melhorados<7>

1.7.5.61 xmlrpc.server
......................

‘SimpleXMLRPCDispatcher.register_function()’ can now be used as a
decorator.  (Contributed by Xiang Zhang in bpo-7769(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=7769


File: python.info,  Node: zipapp,  Next: zipfile<2>,  Prev: xmlrpc server,  Up: Módulos melhorados<7>

1.7.5.62 zipapp
...............

Function *note create_archive(): bc8. now accepts an optional 'filter'
argument to allow the user to select which files should be included in
the archive.  (Contributed by Irmen de Jong in bpo-31072(1).)

Function *note create_archive(): bc8. now accepts an optional
'compressed' argument to generate a compressed archive.  A command line
option ‘--compress’ has also been added to support compression.
(Contributed by Zhiming Wang in bpo-31638(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31072

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31638


File: python.info,  Node: zipfile<2>,  Prev: zipapp,  Up: Módulos melhorados<7>

1.7.5.63 zipfile
................

*note ZipFile: 6c4. now accepts the new 'compresslevel' parameter to
control the compression level.  (Contributed by Bo Bayles in
bpo-21417(1).)

Subdirectories in archives created by ‘ZipFile’ are now stored in
alphabetical order.  (Contributed by Bernhard M. Wiedemann in
bpo-30693(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21417

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30693


File: python.info,  Node: Alterações na API C<11>,  Next: Mudanças na construção<6>,  Prev: Módulos melhorados<7>,  Up: O que há de novo no Python 3 7

1.7.6 Alterações na API C
-------------------------

A new API for thread-local storage has been implemented.  See *note PEP
539; Nova API C para armazenamento local de thread: ade. for an overview
and *note Thread Specific Storage (TSS) API: aee. for a complete
reference.  (Contributed by Masayuki Yamamoto in bpo-25658(1).)

The new *note context variables: ad0. functionality exposes a number of
*note new C APIs: b0b.

The new *note PyImport_GetModule(): bcb. function returns the previously
imported module with the given name.  (Contributed by Eric Snow in
bpo-28411(2).)

The new *note Py_RETURN_RICHCOMPARE: bcc. macro eases writing rich
comparison functions.  (Contributed by Petr Victorin in bpo-23699(3).)

The new *note Py_UNREACHABLE: bcd. macro can be used to mark unreachable
code paths.  (Contributed by Barry Warsaw in bpo-31338(4).)

The *note tracemalloc: ff. now exposes a C API through the new *note
PyTraceMalloc_Track(): bce. and *note PyTraceMalloc_Untrack(): bcf.
functions.  (Contributed by Victor Stinner in bpo-30054(5).)

The new *note import__find__load__start: bd0. and *note
import__find__load__done: bd0. static markers can be used to trace
module imports.  (Contributed by Christian Heimes in bpo-31574(6).)

The fields ‘name’ and ‘doc’ of structures *note PyMemberDef: 54f, *note
PyGetSetDef: bd1, *note PyStructSequence_Field: bd2, *note
PyStructSequence_Desc: bd3, and ‘wrapperbase’ are now of type ‘const
char *’ rather of ‘char *’.  (Contributed by Serhiy Storchaka in
bpo-28761(7).)

The result of *note PyUnicode_AsUTF8AndSize(): 89d. and *note
PyUnicode_AsUTF8(): bd4. is now of type ‘const char *’ rather of ‘char
*’.  (Contributed by Serhiy Storchaka in bpo-28769(8).)

The result of *note PyMapping_Keys(): bd5, *note PyMapping_Values():
bd6. and *note PyMapping_Items(): bd7. is now always a list, rather than
a list or a tuple.  (Contributed by Oren Milman in bpo-28280(9).)

Added functions *note PySlice_Unpack(): 3fd. and *note
PySlice_AdjustIndices(): 3fe.  (Contributed by Serhiy Storchaka in
bpo-27867(10).)

*note PyOS_AfterFork(): 3fa. is deprecated in favour of the new
functions *note PyOS_BeforeFork(): bd8, *note PyOS_AfterFork_Parent():
bd9. and *note PyOS_AfterFork_Child(): 3fb.  (Contributed by Antoine
Pitrou in bpo-16500(11).)

The ‘PyExc_RecursionErrorInst’ singleton that was part of the public API
has been removed as its members being never cleared may cause a segfault
during finalization of the interpreter.  Contributed by Xavier de Gaye
in bpo-22898(12) and bpo-30697(13).

Added C API support for timezones with timezone constructors *note
PyTimeZone_FromOffset(): bda. and *note PyTimeZone_FromOffsetAndName():
bdb, and access to the UTC singleton with *note PyDateTime_TimeZone_UTC:
bdc.  Contributed by Paul Ganssle in bpo-10381(14).

The type of results of ‘PyThread_start_new_thread()’ and
‘PyThread_get_thread_ident()’, and the 'id' parameter of *note
PyThreadState_SetAsyncExc(): bdd. changed from long to unsigned long.
(Contributed by Serhiy Storchaka in bpo-6532(15).)

*note PyUnicode_AsWideCharString(): 8c1. now raises a *note ValueError:
202. if the second argument is ‘NULL’ and the wchar_t* string contains
null characters.  (Contributed by Serhiy Storchaka in bpo-30708(16).)

Changes to the startup sequence and the management of dynamic memory
allocators mean that the long documented requirement to call *note
Py_Initialize(): 8b1. before calling most C API functions is now relied
on more heavily, and failing to abide by it may lead to segfaults in
embedding applications.  See the *note Porting to Python 3.7: ae1.
section in this document and the *note Antes da inicialização do Python:
bde. section in the C API documentation for more details.

The new *note PyInterpreterState_GetID(): bdf. returns the unique ID for
a given interpreter.  (Contributed by Eric Snow in bpo-29102(17).)

*note Py_DecodeLocale(): be0, *note Py_EncodeLocale(): be1. now use the
UTF-8 encoding when the *note UTF-8 mode: ada. is enabled.  (Contributed
by Victor Stinner in bpo-29240(18).)

*note PyUnicode_DecodeLocaleAndSize(): be2. and *note
PyUnicode_EncodeLocale(): be3. now use the current locale encoding for
‘surrogateescape’ error handler.  (Contributed by Victor Stinner in
bpo-29240(19).)

The 'start' and 'end' parameters of *note PyUnicode_FindChar(): 8be. are
now adjusted to behave like string slices.  (Contributed by Xiang Zhang
in bpo-28822(20).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25658

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28411

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23699

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31338

   (5) https://bugs.python.org/issue?@action=redirect&bpo=30054

   (6) https://bugs.python.org/issue?@action=redirect&bpo=31574

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28761

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28769

   (9) https://bugs.python.org/issue?@action=redirect&bpo=28280

   (10) https://bugs.python.org/issue?@action=redirect&bpo=27867

   (11) https://bugs.python.org/issue?@action=redirect&bpo=16500

   (12) https://bugs.python.org/issue?@action=redirect&bpo=22898

   (13) https://bugs.python.org/issue?@action=redirect&bpo=30697

   (14) https://bugs.python.org/issue?@action=redirect&bpo=10381

   (15) https://bugs.python.org/issue?@action=redirect&bpo=6532

   (16) https://bugs.python.org/issue?@action=redirect&bpo=30708

   (17) https://bugs.python.org/issue?@action=redirect&bpo=29102

   (18) https://bugs.python.org/issue?@action=redirect&bpo=29240

   (19) https://bugs.python.org/issue?@action=redirect&bpo=29240

   (20) https://bugs.python.org/issue?@action=redirect&bpo=28822


File: python.info,  Node: Mudanças na construção<6>,  Next: Otimizações<7>,  Prev: Alterações na API C<11>,  Up: O que há de novo no Python 3 7

1.7.7 Mudanças na construção
----------------------------

Support for building ‘--without-threads’ has been removed.  The *note
threading: ed. module is now always available.  (Contributed by Antoine
Pitrou in bpo-31370(1).).

A full copy of libffi is no longer bundled for use when building the
*note _ctypes: 2a. module on non-OSX UNIX platforms.  An installed copy
of libffi is now required when building ‘_ctypes’ on such platforms.
(Contributed by Zachary Ware in bpo-27979(2).)

The Windows build process no longer depends on Subversion to pull in
external sources, a Python script is used to download zipfiles from
GitHub instead.  If Python 3.6 is not found on the system (via ‘py
-3.6’), NuGet is used to download a copy of 32-bit Python for this
purpose.  (Contributed by Zachary Ware in bpo-30450(3).)

The *note ssl: d0. module requires OpenSSL 1.0.2 or 1.1 compatible
libssl.  OpenSSL 1.0.1 has reached end of lifetime on 2016-12-31 and is
no longer supported.  LibreSSL is temporarily not supported as well.
LibreSSL releases up to version 2.6.4 are missing required OpenSSL 1.0.2
APIs.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31370

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27979

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30450


File: python.info,  Node: Otimizações<7>,  Next: Outras mudanças na implementação do CPython<2>,  Prev: Mudanças na construção<6>,  Up: O que há de novo no Python 3 7

1.7.8 Otimizações
-----------------

The overhead of calling many methods of various standard library classes
implemented in C has been significantly reduced by porting more code to
use the ‘METH_FASTCALL’ convention.  (Contributed by Victor Stinner in
bpo-29300(1), bpo-29507(2), bpo-29452(3), and bpo-29286(4).)

Various optimizations have reduced Python startup time by 10% on Linux
and up to 30% on macOS. (Contributed by Victor Stinner, INADA Naoki in
bpo-29585(5), and Ivan Levkivskyi in bpo-31333(6).)

Method calls are now up to 20% faster due to the bytecode changes which
avoid creating bound method instances.  (Contributed by Yury Selivanov
and INADA Naoki in bpo-26110(7).)  The *note asyncio: a. module received
a number of notable optimizations for commonly used functions:

   * The *note asyncio.get_event_loop(): 2c2. function has been
     reimplemented in C to make it up to 15 times faster.  (Contributed
     by Yury Selivanov in bpo-32296(8).)

   * *note asyncio.Future: be6. callback management has been optimized.
     (Contributed by Yury Selivanov in bpo-32348(9).)

   * *note asyncio.gather(): 5fd. is now up to 15% faster.  (Contributed
     by Yury Selivanov in bpo-32355(10).)

   * *note asyncio.sleep(): a79. is now up to 2 times faster when the
     'delay' argument is zero or negative.  (Contributed by Andrew
     Svetlov in bpo-32351(11).)

   * The performance overhead of asyncio debug mode has been reduced.
     (Contributed by Antoine Pitrou in bpo-31970(12).)

As a result of *note PEP 560 work: ad5, the import time of *note typing:
104. has been reduced by a factor of 7, and many typing operations are
now faster.  (Contributed by Ivan Levkivskyi in bpo-32226(13).)

*note sorted(): be7. and *note list.sort(): be8. have been optimized for
common cases to be up to 40-75% faster.  (Contributed by Elliot
Gorokhovsky in bpo-28685(14).)

*note dict.copy(): be9. is now up to 5.5 times faster.  (Contributed by
Yury Selivanov in bpo-31179(15).)

*note hasattr(): 4d2. and *note getattr(): bea. are now about 4 times
faster when 'name' is not found and 'obj' does not override *note
object.__getattr__(): 4d3. or *note object.__getattribute__(): beb.
(Contributed by INADA Naoki in bpo-32544(16).)

Searching for certain Unicode characters (like Ukrainian capital “Є”) in
a string was up to 25 times slower than searching for other characters.
It is now only 3 times slower in the worst case.  (Contributed by Serhiy
Storchaka in bpo-24821(17).)

The *note collections.namedtuple(): 1ca. factory has been reimplemented
to make the creation of named tuples 4 to 6 times faster.  (Contributed
by Jelle Zijlstra with further improvements by INADA Naoki, Serhiy
Storchaka, and Raymond Hettinger in bpo-28638(18).)

*note datetime.date.fromordinal(): bec. and *note
datetime.date.fromtimestamp(): bed. are now up to 30% faster in the
common case.  (Contributed by Paul Ganssle in bpo-32403(19).)

The *note os.fwalk(): b71. function is now up to 2 times faster thanks
to the use of *note os.scandir(): a68.  (Contributed by Serhiy Storchaka
in bpo-25996(20).)

The speed of the *note shutil.rmtree(): 301. function has been improved
by 20–40% thanks to the use of the *note os.scandir(): a68. function.
(Contributed by Serhiy Storchaka in bpo-28564(21).)

Optimized case-insensitive matching and searching of *note regular
expressions: b9.  Searching some patterns can now be up to 20 times
faster.  (Contributed by Serhiy Storchaka in bpo-30285(22).)

*note re.compile(): bee. now converts ‘flags’ parameter to int object if
it is ‘RegexFlag’.  It is now as fast as Python 3.5, and faster than
Python 3.6 by about 10% depending on the pattern.  (Contributed by INADA
Naoki in bpo-31671(23).)

The *note modify(): bef. methods of classes *note
selectors.EpollSelector: bf0, *note selectors.PollSelector: bf1. and
*note selectors.DevpollSelector: bf2. may be around 10% faster under
heavy loads.  (Contributed by Giampaolo Rodola’ in bpo-30014(24))

Constant folding has been moved from the peephole optimizer to the new
AST optimizer, which is able perform optimizations more consistently.
(Contributed by Eugene Toder and INADA Naoki in bpo-29469(25) and
bpo-11549(26).)

Most functions and methods in *note abc: 4. have been rewritten in C.
This makes creation of abstract base classes, and calling *note
isinstance(): 442. and *note issubclass(): 7c2. on them 1.5x faster.
This also reduces Python start-up time by up to 10%.  (Contributed by
Ivan Levkivskyi and INADA Naoki in bpo-31333(27))

Significant speed improvements to alternate constructors for *note
datetime.date: 1cd. and *note datetime.datetime: 1cc. by using fast-path
constructors when not constructing subclasses.  (Contributed by Paul
Ganssle in bpo-32403(28))

The speed of comparison of *note array.array: 1a0. instances has been
improved considerably in certain cases.  It is now from 10x to 70x
faster when comparing arrays holding values of the same integer type.
(Contributed by Adrian Wielgosik in bpo-24700(29).)

The *note math.erf(): bf3. and *note math.erfc(): bf4. functions now use
the (faster) C library implementation on most platforms.  (Contributed
by Serhiy Storchaka in bpo-26121(30).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29300

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29507

   (3) https://bugs.python.org/issue?@action=redirect&bpo=29452

   (4) https://bugs.python.org/issue?@action=redirect&bpo=29286

   (5) https://bugs.python.org/issue?@action=redirect&bpo=29585

   (6) https://bugs.python.org/issue?@action=redirect&bpo=31333

   (7) https://bugs.python.org/issue?@action=redirect&bpo=26110

   (8) https://bugs.python.org/issue?@action=redirect&bpo=32296

   (9) https://bugs.python.org/issue?@action=redirect&bpo=32348

   (10) https://bugs.python.org/issue?@action=redirect&bpo=32355

   (11) https://bugs.python.org/issue?@action=redirect&bpo=32351

   (12) https://bugs.python.org/issue?@action=redirect&bpo=31970

   (13) https://bugs.python.org/issue?@action=redirect&bpo=32226

   (14) https://bugs.python.org/issue?@action=redirect&bpo=28685

   (15) https://bugs.python.org/issue?@action=redirect&bpo=31179

   (16) https://bugs.python.org/issue?@action=redirect&bpo=32544

   (17) https://bugs.python.org/issue?@action=redirect&bpo=24821

   (18) https://bugs.python.org/issue?@action=redirect&bpo=28638

   (19) https://bugs.python.org/issue?@action=redirect&bpo=32403

   (20) https://bugs.python.org/issue?@action=redirect&bpo=25996

   (21) https://bugs.python.org/issue?@action=redirect&bpo=28564

   (22) https://bugs.python.org/issue?@action=redirect&bpo=30285

   (23) https://bugs.python.org/issue?@action=redirect&bpo=31671

   (24) https://bugs.python.org/issue?@action=redirect&bpo=30014

   (25) https://bugs.python.org/issue?@action=redirect&bpo=29469

   (26) https://bugs.python.org/issue?@action=redirect&bpo=11549

   (27) https://bugs.python.org/issue?@action=redirect&bpo=31333

   (28) https://bugs.python.org/issue?@action=redirect&bpo=32403

   (29) https://bugs.python.org/issue?@action=redirect&bpo=24700

   (30) https://bugs.python.org/issue?@action=redirect&bpo=26121


File: python.info,  Node: Outras mudanças na implementação do CPython<2>,  Next: Comportamento do Python descontinuado,  Prev: Otimizações<7>,  Up: O que há de novo no Python 3 7

1.7.9 Outras mudanças na implementação do CPython
-------------------------------------------------

   * Trace hooks may now opt out of receiving the ‘line’ and opt into
     receiving the ‘opcode’ events from the interpreter by setting the
     corresponding new *note f_trace_lines: bf6. and *note
     f_trace_opcodes: bf7. attributes on the frame being traced.
     (Contributed by Nick Coghlan in bpo-31344(1).)

   * Fixed some consistency problems with namespace package module
     attributes.  Namespace module objects now have an ‘__file__’ that
     is set to ‘None’ (previously unset), and their ‘__spec__.origin’ is
     also set to ‘None’ (previously the string ‘"namespace"’).  See
     bpo-32305(2).  Also, the namespace module object’s
     ‘__spec__.loader’ is set to the same value as ‘__loader__’
     (previously, the former was set to ‘None’).  See bpo-32303(3).

   * The *note locals(): 141. dictionary now displays in the lexical
     order that variables were defined.  Previously, the order was
     undefined.  (Contributed by Raymond Hettinger in bpo-32690(4).)

   * The ‘distutils’ ‘upload’ command no longer tries to change CR
     end-of-line characters to CRLF. This fixes a corruption issue with
     sdists that ended with a byte equivalent to CR. (Contributed by Bo
     Bayles in bpo-32304(5).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31344

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32305

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32303

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32690

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32304


File: python.info,  Node: Comportamento do Python descontinuado,  Next: Deprecated Python modules functions and methods,  Prev: Outras mudanças na implementação do CPython<2>,  Up: O que há de novo no Python 3 7

1.7.10 Comportamento do Python descontinuado
--------------------------------------------

Yield expressions (both ‘yield’ and ‘yield from’ clauses) are now
deprecated in comprehensions and generator expressions (aside from the
iterable expression in the leftmost ‘for’ clause).  This ensures that
comprehensions always immediately return a container of the appropriate
type (rather than potentially returning a *note generator iterator: bf9.
object), while generator expressions won’t attempt to interleave their
implicit output with the output from any explicit yield expressions.  In
Python 3.7, such expressions emit *note DeprecationWarning: 1a5. when
compiled, in Python 3.8 this will be a *note SyntaxError: 18d.
(Contributed by Serhiy Storchaka in bpo-10544(1).)

Returning a subclass of *note complex: 2f8. from *note
object.__complex__(): 5e7. is deprecated and will be an error in future
Python versions.  This makes ‘__complex__()’ consistent with *note
object.__int__(): 71c. and *note object.__float__(): 9d4.  (Contributed
by Serhiy Storchaka in bpo-28894(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10544

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28894


File: python.info,  Node: Deprecated Python modules functions and methods,  Next: Deprecated functions and types of the C API,  Prev: Comportamento do Python descontinuado,  Up: O que há de novo no Python 3 7

1.7.11 Deprecated Python modules, functions and methods
-------------------------------------------------------

* Menu:

* aifc::
* asyncio: asyncio<8>.
* collections: collections<3>.
* dbm: dbm<3>.
* enum: enum<6>.
* gettext: gettext<2>.
* importlib: importlib<5>.
* locale: locale<5>.
* macpath::
* threading: threading<5>.
* socket: socket<6>.
* ssl: ssl<6>.
* sunau::
* sys: sys<9>.
* wave::


File: python.info,  Node: aifc,  Next: asyncio<8>,  Up: Deprecated Python modules functions and methods

1.7.11.1 aifc
.............

‘aifc.openfp()’ has been deprecated and will be removed in Python 3.9.
Use ‘aifc.open()’ instead.  (Contributed by Brian Curtin in
bpo-31985(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31985


File: python.info,  Node: asyncio<8>,  Next: collections<3>,  Prev: aifc,  Up: Deprecated Python modules functions and methods

1.7.11.2 asyncio
................

Support for directly ‘await’-ing instances of *note asyncio.Lock: a7b.
and other asyncio synchronization primitives has been deprecated.  An
asynchronous context manager must be used in order to acquire and
release the synchronization resource.  (Contributed by Andrew Svetlov in
bpo-32253(1).)

The ‘asyncio.Task.current_task()’ and ‘asyncio.Task.all_tasks()’ methods
have been deprecated.  (Contributed by Andrew Svetlov in bpo-32250(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32253

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32250


File: python.info,  Node: collections<3>,  Next: dbm<3>,  Prev: asyncio<8>,  Up: Deprecated Python modules functions and methods

1.7.11.3 collections
....................

In Python 3.8, the abstract base classes in *note collections.abc: 1e.
will no longer be exposed in the regular *note collections: 1d. module.
This will help create a clearer distinction between the concrete classes
and the abstract base classes.  (Contributed by Serhiy Storchaka in
bpo-25988(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25988


File: python.info,  Node: dbm<3>,  Next: enum<6>,  Prev: collections<3>,  Up: Deprecated Python modules functions and methods

1.7.11.4 dbm
............

*note dbm.dumb: 32. now supports reading read-only files and no longer
writes the index file when it is not changed.  A deprecation warning is
now emitted if the index file is missing and recreated in the ‘'r'’ and
‘'w'’ modes (this will be an error in future Python releases).
(Contributed by Serhiy Storchaka in bpo-28847(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28847


File: python.info,  Node: enum<6>,  Next: gettext<2>,  Prev: dbm<3>,  Up: Deprecated Python modules functions and methods

1.7.11.5 enum
.............

In Python 3.8, attempting to check for non-Enum objects in *note Enum:
630. classes will raise a *note TypeError: 2c3. (e.g.  ‘1 in Color’);
similarly, attempting to check for non-Flag objects in a *note Flag:
623. member will raise *note TypeError: 2c3. (e.g.  ‘1 in Perm.RW’);
currently, both operations return *note False: b49. instead.
(Contributed by Ethan Furman in bpo-33217(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33217


File: python.info,  Node: gettext<2>,  Next: importlib<5>,  Prev: enum<6>,  Up: Deprecated Python modules functions and methods

1.7.11.6 gettext
................

Using non-integer value for selecting a plural form in *note gettext:
63. is now deprecated.  It never correctly worked.  (Contributed by
Serhiy Storchaka in bpo-28692(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28692


File: python.info,  Node: importlib<5>,  Next: locale<5>,  Prev: gettext<2>,  Up: Deprecated Python modules functions and methods

1.7.11.7 importlib
..................

Methods ‘MetaPathFinder.find_module()’ (replaced by *note
MetaPathFinder.find_spec(): 86c.) and ‘PathEntryFinder.find_loader()’
(replaced by *note PathEntryFinder.find_spec(): 870.) both deprecated in
Python 3.4 now emit *note DeprecationWarning: 1a5.  (Contributed by
Matthias Bussonnier in bpo-29576(1).)

The *note importlib.abc.ResourceLoader: c02. ABC has been deprecated in
favour of *note importlib.abc.ResourceReader: b10.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29576


File: python.info,  Node: locale<5>,  Next: macpath,  Prev: importlib<5>,  Up: Deprecated Python modules functions and methods

1.7.11.8 locale
...............

‘locale.format()’ has been deprecated, use *note locale.format_string():
51f. instead.  (Contributed by Garvit in bpo-10379(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10379


File: python.info,  Node: macpath,  Next: threading<5>,  Prev: locale<5>,  Up: Deprecated Python modules functions and methods

1.7.11.9 macpath
................

The ‘macpath’ is now deprecated and will be removed in Python 3.8.
(Contributed by Chi Hsuan Yen in bpo-9850(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9850


File: python.info,  Node: threading<5>,  Next: socket<6>,  Prev: macpath,  Up: Deprecated Python modules functions and methods

1.7.11.10 threading
...................

‘dummy_threading’ and ‘_dummy_thread’ have been deprecated.  It is no
longer possible to build Python with threading disabled.  Use *note
threading: ed. instead.  (Contributed by Antoine Pitrou in
bpo-31370(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31370


File: python.info,  Node: socket<6>,  Next: ssl<6>,  Prev: threading<5>,  Up: Deprecated Python modules functions and methods

1.7.11.11 socket
................

The silent argument value truncation in *note socket.htons(): 883. and
*note socket.ntohs(): 884. has been deprecated.  In future versions of
Python, if the passed argument is larger than 16 bits, an exception will
be raised.  (Contributed by Oren Milman in bpo-28332(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28332


File: python.info,  Node: ssl<6>,  Next: sunau,  Prev: socket<6>,  Up: Deprecated Python modules functions and methods

1.7.11.12 ssl
.............

‘ssl.wrap_socket()’ is deprecated.  Use *note
ssl.SSLContext.wrap_socket(): 525. instead.  (Contributed by Christian
Heimes in bpo-28124(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28124


File: python.info,  Node: sunau,  Next: sys<9>,  Prev: ssl<6>,  Up: Deprecated Python modules functions and methods

1.7.11.13 sunau
...............

‘sunau.openfp()’ has been deprecated and will be removed in Python 3.9.
Use ‘sunau.open()’ instead.  (Contributed by Brian Curtin in
bpo-31985(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31985


File: python.info,  Node: sys<9>,  Next: wave,  Prev: sunau,  Up: Deprecated Python modules functions and methods

1.7.11.14 sys
.............

Deprecated ‘sys.set_coroutine_wrapper()’ and
‘sys.get_coroutine_wrapper()’.

The undocumented ‘sys.callstats()’ function has been deprecated and will
be removed in a future Python version.  (Contributed by Victor Stinner
in bpo-28799(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28799


File: python.info,  Node: wave,  Prev: sys<9>,  Up: Deprecated Python modules functions and methods

1.7.11.15 wave
..............

‘wave.openfp()’ has been deprecated and will be removed in Python 3.9.
Use *note wave.open(): 952. instead.  (Contributed by Brian Curtin in
bpo-31985(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31985


File: python.info,  Node: Deprecated functions and types of the C API,  Next: Platform Support Removals,  Prev: Deprecated Python modules functions and methods,  Up: O que há de novo no Python 3 7

1.7.12 Deprecated functions and types of the C API
--------------------------------------------------

Function *note PySlice_GetIndicesEx(): 3fc. is deprecated and replaced
with a macro if ‘Py_LIMITED_API’ is not set or set to a value in the
range between ‘0x03050400’ and ‘0x03060000’ (not inclusive), or is
‘0x03060100’ or higher.  (Contributed by Serhiy Storchaka in
bpo-27867(1).)

*note PyOS_AfterFork(): 3fa. has been deprecated.  Use *note
PyOS_BeforeFork(): bd8, *note PyOS_AfterFork_Parent(): bd9. or *note
PyOS_AfterFork_Child(): 3fb. instead.  (Contributed by Antoine Pitrou in
bpo-16500(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27867

   (2) https://bugs.python.org/issue?@action=redirect&bpo=16500


File: python.info,  Node: Platform Support Removals,  Next: Remoção de APIs e recursos<2>,  Prev: Deprecated functions and types of the C API,  Up: O que há de novo no Python 3 7

1.7.13 Platform Support Removals
--------------------------------

   * FreeBSD 9 and older are no longer officially supported.

   * For full Unicode support, including within extension modules, *nix
     platforms are now expected to provide at least one of ‘C.UTF-8’
     (full locale), ‘C.utf8’ (full locale) or ‘UTF-8’ (‘LC_CTYPE’-only
     locale) as an alternative to the legacy ‘ASCII’-based ‘C’ locale.

   * OpenSSL 0.9.8 and 1.0.1 are no longer supported, which means
     building CPython 3.7 with SSL/TLS support on older platforms still
     using these versions requires custom build options that link to a
     more recent version of OpenSSL.

     Notably, this issue affects the Debian 8 (aka “jessie”) and Ubuntu
     14.04 (aka “Trusty”) LTS Linux distributions, as they still use
     OpenSSL 1.0.1 by default.

     Debian 9 (“stretch”) and Ubuntu 16.04 (“xenial”), as well as recent
     releases of other LTS Linux releases (e.g.  RHEL/CentOS 7.5, SLES
     12-SP3), use OpenSSL 1.0.2 or later, and remain supported in the
     default build configuration.

     CPython’s own CI configuration file(1) provides an example of using
     the SSL compatibility testing infrastructure(2) in CPython’s test
     suite to build and link against OpenSSL 1.1.0 rather than an
     outdated system provided OpenSSL.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/blob/v3.7.13/.travis.yml

   (2) 
https://github.com/python/cpython/tree/3.13/Tools/ssl/multissltests.py


File: python.info,  Node: Remoção de APIs e recursos<2>,  Next: Module Removals,  Prev: Platform Support Removals,  Up: O que há de novo no Python 3 7

1.7.14 Remoção de APIs e recursos
---------------------------------

The following features and APIs have been removed from Python 3.7:

   * The ‘os.stat_float_times()’ function has been removed.  It was
     introduced in Python 2.3 for backward compatibility with Python
     2.2, and was deprecated since Python 3.1.

   * Unknown escapes consisting of ‘'\'’ and an ASCII letter in
     replacement templates for *note re.sub(): 2a3. were deprecated in
     Python 3.5, and will now cause an error.

   * Removed support of the 'exclude' argument in *note
     tarfile.TarFile.add(): c0e.  It was deprecated in Python 2.7 and
     3.2.  Use the 'filter' argument instead.

   * The ‘ntpath.splitunc()’ function was deprecated in Python 3.1, and
     has now been removed.  Use *note splitdrive(): c0f. instead.

   * *note collections.namedtuple(): 1ca. no longer supports the
     'verbose' parameter or ‘_source’ attribute which showed the
     generated source code for the named tuple class.  This was part of
     an optimization designed to speed-up class creation.  (Contributed
     by Jelle Zijlstra with further improvements by INADA Naoki, Serhiy
     Storchaka, and Raymond Hettinger in bpo-28638(1).)

   * Functions *note bool(): 468, *note float(): 2f7, *note list(): 611.
     and *note tuple(): 370. no longer take keyword arguments.  The
     first argument of *note int(): 257. can now be passed only as
     positional argument.

   * Removed previously deprecated in Python 2.4 classes ‘Plist’, ‘Dict’
     and ‘_InternalDict’ in the *note plistlib: ab. module.  Dict values
     in the result of functions ‘readPlist()’ and ‘readPlistFromBytes()’
     are now normal dicts.  You no longer can use attribute access to
     access items of these dictionaries.

   * The ‘asyncio.windows_utils.socketpair()’ function has been removed.
     Use the *note socket.socketpair(): c10. function instead, it is
     available on all platforms since Python 3.5.
     ‘asyncio.windows_utils.socketpair’ was just an alias to
     ‘socket.socketpair’ on Python 3.5 and newer.

   * *note asyncio: a. no longer exports the *note selectors: c2. and
     ‘_overlapped’ modules as ‘asyncio.selectors’ and
     ‘asyncio._overlapped’.  Replace ‘from asyncio import selectors’
     with ‘import selectors’.

   * Direct instantiation of *note ssl.SSLSocket: 8f0. and *note
     ssl.SSLObject: b99. objects is now prohibited.  The constructors
     were never documented, tested, or designed as public constructors.
     Users were supposed to use ‘ssl.wrap_socket()’ or *note
     ssl.SSLContext: 294.  (Contributed by Christian Heimes in
     bpo-32951(2).)

   * The unused ‘distutils’ ‘install_misc’ command has been removed.
     (Contributed by Eric N. Vander Weele in bpo-29218(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28638

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32951

   (3) https://bugs.python.org/issue?@action=redirect&bpo=29218


File: python.info,  Node: Module Removals,  Next: Windows-only Changes,  Prev: Remoção de APIs e recursos<2>,  Up: O que há de novo no Python 3 7

1.7.15 Module Removals
----------------------

The ‘fpectl’ module has been removed.  It was never enabled by default,
never worked correctly on x86-64, and it changed the Python ABI in ways
that caused unexpected breakage of C extensions.  (Contributed by
Nathaniel J. Smith in bpo-29137(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29137


File: python.info,  Node: Windows-only Changes,  Next: Porting to Python 3 7,  Prev: Module Removals,  Up: O que há de novo no Python 3 7

1.7.16 Windows-only Changes
---------------------------

The python launcher, (py.exe), can accept 32 & 64 bit specifiers
'without' having to specify a minor version as well.  So ‘py -3-32’ and
‘py -3-64’ become valid as well as ‘py -3.7-32’, also the -'m'-64 and
-'m.n'-64 forms are now accepted to force 64 bit python even if 32 bit
would have otherwise been used.  If the specified version is not
available py.exe will error exit.  (Contributed by Steve Barnes in
bpo-30291(1).)

The launcher can be run as ‘py -0’ to produce a list of the installed
pythons, 'with default marked with an asterisk'.  Running ‘py -0p’ will
include the paths.  If py is run with a version specifier that cannot be
matched it will also print the 'short form' list of available
specifiers.  (Contributed by Steve Barnes in bpo-30362(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30291

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30362


File: python.info,  Node: Porting to Python 3 7,  Next: Notable changes in Python 3 7 1,  Prev: Windows-only Changes,  Up: O que há de novo no Python 3 7

1.7.17 Porting to Python 3.7
----------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções que podem exigir alterações no seu código.

* Menu:

* Changes in Python Behavior::
* Alterações na API Python: Alterações na API Python<7>.
* Alterações na API C: Alterações na API C<12>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<7>.
* Windows-only Changes: Windows-only Changes<2>.
* Other CPython implementation changes::


File: python.info,  Node: Changes in Python Behavior,  Next: Alterações na API Python<7>,  Up: Porting to Python 3 7

1.7.17.1 Changes in Python Behavior
...................................

   * *note async: 732. and *note await: 1b9. names are now reserved
     keywords.  Code using these names as identifiers will now raise a
     *note SyntaxError: 18d.  (Contributed by Jelle Zijlstra in
     bpo-30406(1).)

   * PEP 479(2) is enabled for all code in Python 3.7, meaning that
     *note StopIteration: c15. exceptions raised directly or indirectly
     in coroutines and generators are transformed into *note
     RuntimeError: 195. exceptions.  (Contributed by Yury Selivanov in
     bpo-32670(3).)

   * *note object.__aiter__(): c16. methods can no longer be declared as
     asynchronous.  (Contributed by Yury Selivanov in bpo-31709(4).)

   * Due to an oversight, earlier Python versions erroneously accepted
     the following syntax:

          f(1 for x in [1],)

          class C(1 for x in [1]):
              pass

     Python 3.7 now correctly raises a *note SyntaxError: 18d, as a
     generator expression always needs to be directly inside a set of
     parentheses and cannot have a comma on either side, and the
     duplication of the parentheses can be omitted only on calls.
     (Contributed by Serhiy Storchaka in bpo-32012(5) and bpo-32023(6).)

   * When using the *note -m: 5e1. switch, the initial working directory
     is now added to *note sys.path: 3b4, rather than an empty string
     (which dynamically denoted the current working directory at the
     time of each import).  Any programs that are checking for the empty
     string, or otherwise relying on the previous behaviour, will need
     to be updated accordingly (e.g.  by also checking for ‘os.getcwd()’
     or ‘os.path.dirname(__main__.__file__)’, depending on why the code
     was checking for the empty string in the first place).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30406

   (2) https://peps.python.org/pep-0479/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32670

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31709

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32012

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32023


File: python.info,  Node: Alterações na API Python<7>,  Next: Alterações na API C<12>,  Prev: Changes in Python Behavior,  Up: Porting to Python 3 7

1.7.17.2 Alterações na API Python
.................................

   * *note socketserver.ThreadingMixIn.server_close: b8e. now waits
     until all non-daemon threads complete.  Set the new *note
     socketserver.ThreadingMixIn.block_on_close: b8f. class attribute to
     ‘False’ to get the pre-3.7 behaviour.  (Contributed by Victor
     Stinner in bpo-31233(1) and bpo-33540(2).)

   * *note socketserver.ForkingMixIn.server_close: b8e. now waits until
     all child processes complete.  Set the new *note
     socketserver.ForkingMixIn.block_on_close: b8f. class attribute to
     ‘False’ to get the pre-3.7 behaviour.  (Contributed by Victor
     Stinner in bpo-31151(3) and bpo-33540(4).)

   * The *note locale.localeconv(): c18. function now temporarily sets
     the ‘LC_CTYPE’ locale to the value of ‘LC_NUMERIC’ in some cases.
     (Contributed by Victor Stinner in bpo-31900(5).)

   * *note pkgutil.walk_packages(): c19. now raises a *note ValueError:
     202. if 'path' is a string.  Previously an empty list was returned.
     (Contributed by Sanyam Khurana in bpo-24744(6).)

   * A format string argument for *note string.Formatter.format(): c1a.
     is now *note positional-only: a8f.  Passing it as a keyword
     argument was deprecated in Python 3.5.  (Contributed by Serhiy
     Storchaka in bpo-29193(7).)

   * Attributes *note key: c1b, *note value: c1c. and *note coded_value:
     c1d. of class *note http.cookies.Morsel: c1e. are now read-only.
     Assigning to them was deprecated in Python 3.5.  Use the *note
     set(): c1f. method for setting them.  (Contributed by Serhiy
     Storchaka in bpo-29192(8).)

   * The 'mode' argument of *note os.makedirs(): 21e. no longer affects
     the file permission bits of newly created intermediate-level
     directories.  To set their file permission bits you can set the
     umask before invoking ‘makedirs()’.  (Contributed by Serhiy
     Storchaka in bpo-19930(9).)

   * The *note struct.Struct.format: c20. type is now *note str: 44c.
     instead of *note bytes: 1c2.  (Contributed by Victor Stinner in
     bpo-21071(10).)

   * ‘cgi.parse_multipart()’ now accepts the 'encoding' and 'errors'
     arguments and returns the same results as ‘FieldStorage’: for
     non-file fields, the value associated to a key is a list of
     strings, not bytes.  (Contributed by Pierre Quentel in
     bpo-29979(11).)

   * Due to internal changes in *note socket: cc, calling *note
     socket.fromshare(): c21. on a socket created by *note socket.share:
     c22. in older Python versions is not supported.

   * ‘repr’ for *note BaseException: 5bb. has changed to not include the
     trailing comma.  Most exceptions are affected by this change.
     (Contributed by Serhiy Storchaka in bpo-30399(12).)

   * ‘repr’ for *note datetime.timedelta: 9d7. has changed to include
     the keyword arguments in the output.  (Contributed by Utkarsh
     Upadhyay in bpo-30302(13).)

   * Because *note shutil.rmtree(): 301. is now implemented using the
     *note os.scandir(): a68. function, the user specified handler
     'onerror' is now called with the first argument ‘os.scandir’
     instead of ‘os.listdir’ when listing the directory is failed.

   * Support for nested sets and set operations in regular expressions
     as in Unicode Technical Standard #18(14) might be added in the
     future.  This would change the syntax.  To facilitate this future
     change a *note FutureWarning: 415. will be raised in ambiguous
     cases for the time being.  That include sets starting with a
     literal ‘'['’ or containing literal character sequences ‘'--'’,
     ‘'&&'’, ‘'~~'’, and ‘'||'’.  To avoid a warning, escape them with a
     backslash.  (Contributed by Serhiy Storchaka in bpo-30349(15).)

   * The result of splitting a string on a *note regular expression: b9.
     that could match an empty string has been changed.  For example
     splitting on ‘r'\s*'’ will now split not only on whitespaces as it
     did previously, but also on empty strings before all non-whitespace
     characters and just before the end of the string.  The previous
     behavior can be restored by changing the pattern to ‘r'\s+'’.  A
     *note FutureWarning: 415. was emitted for such patterns since
     Python 3.5.

     For patterns that match both empty and non-empty strings, the
     result of searching for all matches may also be changed in other
     cases.  For example in the string ‘'a\n\n'’, the pattern
     ‘r'(?m)^\s*?$'’ will not only match empty strings at positions 2
     and 3, but also the string ‘'\n'’ at positions 2–3.  To match only
     blank lines, the pattern should be rewritten as
     ‘r'(?m)^[^\S\n]*$'’.

     *note re.sub(): 2a3. now replaces empty matches adjacent to a
     previous non-empty match.  For example ‘re.sub('x*', '-', 'abxd')’
     returns now ‘'-a-b--d-'’ instead of ‘'-a-b-d-'’ (the first minus
     between ‘b’ and ‘d’ replaces ‘x’, and the second minus replaces an
     empty string between ‘x’ and ‘d’).

     (Contributed by Serhiy Storchaka in bpo-25054(16) and
     bpo-32308(17).)

   * Change *note re.escape(): c23. to only escape regex special
     characters instead of escaping all characters other than ASCII
     letters, numbers, and ‘'_'’.  (Contributed by Serhiy Storchaka in
     bpo-29995(18).)

   * *note tracemalloc.Traceback: bae. frames are now sorted from oldest
     to most recent to be more consistent with *note traceback: fe.
     (Contributed by Jesse Bakker in bpo-32121(19).)

   * On OSes that support *note socket.SOCK_NONBLOCK: c24. or *note
     socket.SOCK_CLOEXEC: c25. bit flags, the *note socket.type: c26. no
     longer has them applied.  Therefore, checks like ‘if sock.type ==
     socket.SOCK_STREAM’ work as expected on all platforms.
     (Contributed by Yury Selivanov in bpo-32331(20).)

   * On Windows the default for the 'close_fds' argument of *note
     subprocess.Popen: 199. was changed from *note False: b49. to *note
     True: c27. when redirecting the standard handles.  If you
     previously depended on handles being inherited when using *note
     subprocess.Popen: 199. with standard io redirection, you will have
     to pass ‘close_fds=False’ to preserve the previous behaviour, or
     use *note STARTUPINFO.lpAttributeList: c28.

   * *note importlib.machinery.PathFinder.invalidate_caches(): c29. –
     which implicitly affects *note importlib.invalidate_caches(): c2a.
     – now deletes entries in *note sys.path_importer_cache: 5e4. which
     are set to ‘None’.  (Contributed by Brett Cannon in bpo-33169(21).)

   * In *note asyncio: a, *note loop.sock_recv(): c2b, *note
     loop.sock_sendall(): c2c, *note loop.sock_accept(): c2d, *note
     loop.getaddrinfo(): c2e, *note loop.getnameinfo(): c2f. have been
     changed to be proper coroutine methods to match their
     documentation.  Previously, these methods returned *note
     asyncio.Future: be6. instances.  (Contributed by Yury Selivanov in
     bpo-32327(22).)

   * *note asyncio.Server.sockets: c30. now returns a copy of the
     internal list of server sockets, instead of returning it directly.
     (Contributed by Yury Selivanov in bpo-32662(23).)

   * *note Struct.format: c20. is now a *note str: 44c. instance instead
     of a *note bytes: 1c2. instance.  (Contributed by Victor Stinner in
     bpo-21071(24).)

   * *note argparse: 6. subparsers can now be made mandatory by passing
     ‘required=True’ to *note ArgumentParser.add_subparsers(): c31.
     (Contributed by Anthony Sottile in bpo-26510(25).)

   * *note ast.literal_eval(): c32. is now stricter.  Addition and
     subtraction of arbitrary numbers are no longer allowed.
     (Contributed by Serhiy Storchaka in bpo-31778(26).)

   * *note Calendar.itermonthdates: c33. will now consistently raise an
     exception when a date falls outside of the ‘0001-01-01’ through
     ‘9999-12-31’ range.  To support applications that cannot tolerate
     such exceptions, the new *note Calendar.itermonthdays3: c34. and
     *note Calendar.itermonthdays4: c35. can be used.  The new methods
     return tuples and are not restricted by the range supported by
     *note datetime.date: 1cd.  (Contributed by Alexander Belopolsky in
     bpo-28292(27).)

   * *note collections.ChainMap: c36. now preserves the order of the
     underlying mappings.  (Contributed by Raymond Hettinger in
     bpo-32792(28).)

   * The ‘submit()’ method of *note
     concurrent.futures.ThreadPoolExecutor: 742. and *note
     concurrent.futures.ProcessPoolExecutor: 8f4. now raises a *note
     RuntimeError: 195. if called during interpreter shutdown.
     (Contributed by Mark Nemec in bpo-33097(29).)

   * The *note configparser.ConfigParser: 1c8. constructor now uses
     ‘read_dict()’ to process the default values, making its behavior
     consistent with the rest of the parser.  Non-string keys and values
     in the defaults dictionary are now being implicitly converted to
     strings.  (Contributed by James Tocknell in bpo-23835(30).)

   * Several undocumented internal imports were removed.  One example is
     that ‘os.errno’ is no longer available; use ‘import errno’ directly
     instead.  Note that such undocumented internal imports may be
     removed any time without notice, even in micro version releases.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31233

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33540

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31151

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33540

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31900

   (6) https://bugs.python.org/issue?@action=redirect&bpo=24744

   (7) https://bugs.python.org/issue?@action=redirect&bpo=29193

   (8) https://bugs.python.org/issue?@action=redirect&bpo=29192

   (9) https://bugs.python.org/issue?@action=redirect&bpo=19930

   (10) https://bugs.python.org/issue?@action=redirect&bpo=21071

   (11) https://bugs.python.org/issue?@action=redirect&bpo=29979

   (12) https://bugs.python.org/issue?@action=redirect&bpo=30399

   (13) https://bugs.python.org/issue?@action=redirect&bpo=30302

   (14) https://unicode.org/reports/tr18/

   (15) https://bugs.python.org/issue?@action=redirect&bpo=30349

   (16) https://bugs.python.org/issue?@action=redirect&bpo=25054

   (17) https://bugs.python.org/issue?@action=redirect&bpo=32308

   (18) https://bugs.python.org/issue?@action=redirect&bpo=29995

   (19) https://bugs.python.org/issue?@action=redirect&bpo=32121

   (20) https://bugs.python.org/issue?@action=redirect&bpo=32331

   (21) https://bugs.python.org/issue?@action=redirect&bpo=33169

   (22) https://bugs.python.org/issue?@action=redirect&bpo=32327

   (23) https://bugs.python.org/issue?@action=redirect&bpo=32662

   (24) https://bugs.python.org/issue?@action=redirect&bpo=21071

   (25) https://bugs.python.org/issue?@action=redirect&bpo=26510

   (26) https://bugs.python.org/issue?@action=redirect&bpo=31778

   (27) https://bugs.python.org/issue?@action=redirect&bpo=28292

   (28) https://bugs.python.org/issue?@action=redirect&bpo=32792

   (29) https://bugs.python.org/issue?@action=redirect&bpo=33097

   (30) https://bugs.python.org/issue?@action=redirect&bpo=23835


File: python.info,  Node: Alterações na API C<12>,  Next: Alterações de bytecode do CPython<7>,  Prev: Alterações na API Python<7>,  Up: Porting to Python 3 7

1.7.17.3 Alterações na API C
............................

The function *note PySlice_GetIndicesEx(): 3fc. is considered unsafe for
resizable sequences.  If the slice indices are not instances of *note
int: 257, but objects that implement the ‘__index__()’ method, the
sequence can be resized after passing its length to
‘PySlice_GetIndicesEx()’.  This can lead to returning indices out of the
length of the sequence.  For avoiding possible problems use new
functions *note PySlice_Unpack(): 3fd. and *note
PySlice_AdjustIndices(): 3fe.  (Contributed by Serhiy Storchaka in
bpo-27867(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27867


File: python.info,  Node: Alterações de bytecode do CPython<7>,  Next: Windows-only Changes<2>,  Prev: Alterações na API C<12>,  Up: Porting to Python 3 7

1.7.17.4 Alterações de bytecode do CPython
..........................................

There are two new opcodes: *note LOAD_METHOD: c39. and ‘CALL_METHOD’.
(Contributed by Yury Selivanov and INADA Naoki in bpo-26110(1).)

The ‘STORE_ANNOTATION’ opcode has been removed.  (Contributed by Mark
Shannon in bpo-32550(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26110

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32550


File: python.info,  Node: Windows-only Changes<2>,  Next: Other CPython implementation changes,  Prev: Alterações de bytecode do CPython<7>,  Up: Porting to Python 3 7

1.7.17.5 Windows-only Changes
.............................

The file used to override *note sys.path: 3b4. is now called
‘<python-executable>._pth’ instead of ‘'sys.path'’.  See *note
Encontrando módulos: c3b. for more information.  (Contributed by Steve
Dower in bpo-28137(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28137


File: python.info,  Node: Other CPython implementation changes,  Prev: Windows-only Changes<2>,  Up: Porting to Python 3 7

1.7.17.6 Other CPython implementation changes
.............................................

In preparation for potential future changes to the public CPython
runtime initialization API (see PEP 432(1) for an initial, but somewhat
outdated, draft), CPython’s internal startup and configuration
management logic has been significantly refactored.  While these updates
are intended to be entirely transparent to both embedding applications
and users of the regular CPython CLI, they’re being mentioned here as
the refactoring changes the internal order of various operations during
interpreter startup, and hence may uncover previously latent defects,
either in embedding applications, or in CPython itself.  (Initially
contributed by Nick Coghlan and Eric Snow as part of bpo-22257(2), and
further updated by Nick, Eric, and Victor Stinner in a number of other
issues).  Some known details affected:

   * ‘PySys_AddWarnOptionUnicode()’ is not currently usable by embedding
     applications due to the requirement to create a Unicode object
     prior to calling ‘Py_Initialize’.  Use ‘PySys_AddWarnOption()’
     instead.

   * warnings filters added by an embedding application with
     ‘PySys_AddWarnOption()’ should now more consistently take
     precedence over the default filters set by the interpreter

Due to changes in the way the default warnings filters are configured,
setting *note Py_BytesWarningFlag: 3d4. to a value greater than one is
no longer sufficient to both emit *note BytesWarning: c3d. messages and
have them converted to exceptions.  Instead, the flag must be set (to
cause the warnings to be emitted in the first place), and an explicit
‘error::BytesWarning’ warnings filter added to convert them to
exceptions.

Due to a change in the way docstrings are handled by the compiler, the
implicit ‘return None’ in a function body consisting solely of a
docstring is now marked as occurring on the same line as the docstring,
not on the function’s header line.

The current exception state has been moved from the frame object to the
co-routine.  This simplified the interpreter and fixed a couple of
obscure bugs caused by having swap exception state when entering or
exiting a generator.  (Contributed by Mark Shannon in bpo-25612(3).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0432/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=22257

   (3) https://bugs.python.org/issue?@action=redirect&bpo=25612


File: python.info,  Node: Notable changes in Python 3 7 1,  Next: Notable changes in Python 3 7 2,  Prev: Porting to Python 3 7,  Up: O que há de novo no Python 3 7

1.7.18 Notable changes in Python 3.7.1
--------------------------------------

Starting in 3.7.1, *note Py_Initialize(): 8b1. now consistently reads
and respects all of the same environment settings as *note Py_Main():
c3f. (in earlier Python versions, it respected an ill-defined subset of
those environment variables, while in Python 3.7.0 it didn’t read any of
them due to bpo-34247(1)).  If this behavior is unwanted, set *note
Py_IgnoreEnvironmentFlag: 3d8. to 1 before calling *note
Py_Initialize(): 8b1.

In 3.7.1 the C API for Context Variables *note was updated: c40. to use
*note PyObject: 339. pointers.  See also bpo-34762(2).

In 3.7.1 the *note tokenize: fb. module now implicitly emits a ‘NEWLINE’
token when provided with input that does not have a trailing new line.
This behavior now matches what the C tokenizer does internally.
(Contributed by Ammar Askar in bpo-33899(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34247

   (2) https://bugs.python.org/issue?@action=redirect&bpo=34762

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33899


File: python.info,  Node: Notable changes in Python 3 7 2,  Next: Notable changes in Python 3 7 6,  Prev: Notable changes in Python 3 7 1,  Up: O que há de novo no Python 3 7

1.7.19 Notable changes in Python 3.7.2
--------------------------------------

In 3.7.2, *note venv: 111. on Windows no longer copies the original
binaries, but creates redirector scripts named ‘python.exe’ and
‘pythonw.exe’ instead.  This resolves a long standing issue where all
virtual environments would have to be upgraded or recreated with each
Python update.  However, note that this release will still require
recreation of virtual environments in order to get the new scripts.


File: python.info,  Node: Notable changes in Python 3 7 6,  Next: Notable changes in Python 3 7 10,  Prev: Notable changes in Python 3 7 2,  Up: O que há de novo no Python 3 7

1.7.20 Notable changes in Python 3.7.6
--------------------------------------

Devido a significativas preocupações de segurança, o parâmetro
'reuse_address' de *note asyncio.loop.create_datagram_endpoint(): 733.
não é mais suportado.  Isso ocorre devido ao comportamento da opção de
soquete ‘SO_REUSEADDR’ no UDP. Para mais detalhes, consulte a
documentação de ‘loop.create_datagram_endpoint()’.  (Contribuição de
Kyle Stanley, Antoine Pitrou e Yury Selivanov em bpo-37228(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37228


File: python.info,  Node: Notable changes in Python 3 7 10,  Next: Notable changes in Python 3 7 11,  Prev: Notable changes in Python 3 7 6,  Up: O que há de novo no Python 3 7

1.7.21 Notable changes in Python 3.7.10
---------------------------------------

Versões anteriores do Python permitiam o uso de ‘;’ e ‘&’ como
separadores de parâmetros de consulta nas funções *note
urllib.parse.parse_qs(): 27a. e *note urllib.parse.parse_qsl(): 279.
Devido a questões de segurança, e em conformidade com as recomendações
mais recentes do W3C, isso foi alterado para permitir apenas uma única
chave separadora, com ‘&’ como padrão.  Esta mudança também afeta as
funções ‘cgi.parse()’ e ‘cgi.parse_multipart()’ já que elas usam as
funções afetadas internamente.  Para obter mais detalhes, consulte sua
respectiva documentação.  (Contribuição de Adam Goldschmidt, Senthil
Kumaran e Ken Jin em bpo-42967(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42967


File: python.info,  Node: Notable changes in Python 3 7 11,  Next: Notable security feature in 3 7 14,  Prev: Notable changes in Python 3 7 10,  Up: O que há de novo no Python 3 7

1.7.22 Notable changes in Python 3.7.11
---------------------------------------

Uma correção de segurança altera o comportamento *note ftplib.FTP: 900.
para não confiar no endereço IPv4 enviado do servidor remoto ao
configurar um canal de dados passivo.  Em vez disso, reutilizamos o
endereço IP do servidor ftp.  Para códigos incomuns que requerem o
comportamento antigo, defina um atributo
‘trust_server_pasv_ipv4_address’ em sua instância de FTP para ‘True’.
(Veja gh-87451(1))

The presence of newline or tab characters in parts of a URL allows for
some forms of attacks.  Following the WHATWG specification that updates
RFC 3986, ASCII newline ‘\n’, ‘\r’ and tab ‘\t’ characters are stripped
from the URL by the parser *note urllib.parse(): 10a. preventing such
attacks.  The removal characters are controlled by a new module level
variable ‘urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE’.  (See gh-88048(2))

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/87451

   (2) https://github.com/python/cpython/issues/88048


File: python.info,  Node: Notable security feature in 3 7 14,  Prev: Notable changes in Python 3 7 11,  Up: O que há de novo no Python 3 7

1.7.23 Notable security feature in 3.7.14
-----------------------------------------

Converter entre *note int: 257. e *note str: 44c. em bases diferentes de
2 (binário), 4, 8 (octal), 16 (hexadecimal) ou 32 como base 10 (decimal)
agora levanta uma exceção *note ValueError: 202. se o número de dígitos
em forma de string estiver acima de um limite para evitar possíveis
ataques de negação de serviço devido à complexidade algorítmica.  Esta é
uma mitigação para CVE 2020-10735(1).  Este limite pode ser configurado
ou desabilitado por variável de ambiente, sinalizador de linha de
comando ou APIs de *note sys: d9.  Veja a documentação de *note
limitação de comprimento de conversão de string inteira: 5f5.  O limite
padrão é de 4300 dígitos em forma de string.

   ---------- Footnotes ----------

   (1) https://www.cve.org/CVERecord?id=CVE-2020-10735


File: python.info,  Node: What’s New In Python 3 6,  Next: O que há de novo no Python 3 5,  Prev: O que há de novo no Python 3 7,  Up: O que há de novo no Python

1.8 What’s New In Python 3.6
============================


Editores: Elvis Pranskevichus <<elvis@magic.io>>, Yury Selivanov
<<yury@magic.io>>

This article explains the new features in Python 3.6, compared to 3.5.
Python 3.6 was released on December 23, 2016.   See the changelog(1) for
a full list of changes.

Ver também
..........

PEP 494(2) - Python 3.6 Release Schedule

* Menu:

* Resumo – Destaques da versão: Resumo – Destaques da versão<8>.
* Novas funcionalidades: Novas funcionalidades<13>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<8>.
* Novos módulos: Novos módulos<8>.
* Módulos melhorados: Módulos melhorados<8>.
* Otimizações: Otimizações<8>.
* Mudanças a construções e API C: Mudanças a construções e API C<2>.
* Other Improvements::
* Descontinuados: Descontinuados<9>.
* Removidos: Removidos<9>.
* Porting to Python 3.6: Porting to Python 3 6.
* Notable changes in Python 3.6.2: Notable changes in Python 3 6 2.
* Notable changes in Python 3.6.4: Notable changes in Python 3 6 4.
* Notable changes in Python 3.6.5: Notable changes in Python 3 6 5.
* Notable changes in Python 3.6.7: Notable changes in Python 3 6 7.
* Notable changes in Python 3.6.10: Notable changes in Python 3 6 10.
* Notable changes in Python 3.6.13: Notable changes in Python 3 6 13.
* Notable changes in Python 3.6.14: Notable changes in Python 3 6 14.

   ---------- Footnotes ----------

   (1) https://docs.python.org/3.6/whatsnew/changelog.html

   (2) https://peps.python.org/pep-0494/


File: python.info,  Node: Resumo – Destaques da versão<8>,  Next: Novas funcionalidades<13>,  Up: What’s New In Python 3 6

1.8.1 Resumo – Destaques da versão
----------------------------------

Novos recursos de sintaxe:

   * *note PEP 498: c4a, formatted string literals.

   * *note PEP 515: c4b, underscores in numeric literals.

   * *note PEP 526: c4c, syntax for variable annotations.

   * *note PEP 525: c4d, asynchronous generators.

   * *note PEP 530: c4e.: asynchronous comprehensions.

Novos módulos de biblioteca:

   * *note secrets: c0.: *note PEP 506 – Adding A Secrets Module To The
     Standard Library: c4f.

Melhorias na implementação do CPython:

   * The *note dict: ad6. type has been reimplemented to use a *note
     more compact representation: c50. based on a proposal by Raymond
     Hettinger(1) and similar to the PyPy dict implementation(2).  This
     resulted in dictionaries using 20% to 25% less memory when compared
     to Python 3.5.

   * Customization of class creation has been simplified with the *note
     new protocol: c51.

   * The class attribute definition order is *note now preserved: c52.

   * The order of elements in ‘**kwargs’ now *note corresponds to the
     order: c53. in which keyword arguments were passed to the function.

   * DTrace and SystemTap *note probing support: c54. has been added.

   * The new *note PYTHONMALLOC: c55. environment variable can now be
     used to debug the interpreter memory allocation and access errors.

Melhorias significativas na biblioteca padrão:

   * The *note asyncio: a. module has received new features, significant
     usability and performance improvements, and a fair amount of bug
     fixes.  Starting with Python 3.6 the ‘asyncio’ module is no longer
     provisional and its API is considered stable.

   * A new *note file system path protocol: c56. has been implemented to
     support *note path-like objects: 2a0.  All standard library
     functions operating on paths have been updated to work with the new
     protocol.

   * The *note datetime: 30. module has gained support for *note Local
     Time Disambiguation: c57.

   * The *note typing: 104. module received a number of *note
     improvements: c58.

   * The *note tracemalloc: ff. module has been significantly reworked
     and is now used to provide better output for *note ResourceWarning:
     244. as well as provide better diagnostics for memory allocation
     errors.  See the *note PYTHONMALLOC section: c55. for more
     information.

Melhorias de Segurança:

   * The new *note secrets: c0. module has been added to simplify the
     generation of cryptographically strong pseudo-random numbers
     suitable for managing secrets such as account authentication,
     tokens, and similar.

   * On Linux, *note os.urandom(): 523. now blocks until the system
     urandom entropy pool is initialized to increase the security.  See
     the PEP 524(3) for the rationale.

   * The *note hashlib: 68. and *note ssl: d0. modules now support
     OpenSSL 1.1.0.

   * The default settings and feature set of the *note ssl: d0. module
     have been improved.

   * The *note hashlib: 68. module received support for the BLAKE2,
     SHA-3 and SHAKE hash algorithms and the *note scrypt(): c59. key
     derivation function.

Melhorias do Windows:

   * *note PEP 528: c5a. and *note PEP 529: c5b, Windows filesystem and
     console encoding changed to UTF-8.

   * The ‘py.exe’ launcher, when used interactively, no longer prefers
     Python 2 over Python 3 when the user doesn’t specify a version (via
     command line arguments or a config file).  Handling of shebang
     lines remains unchanged - “python” refers to Python 2 in that case.

   * ‘python.exe’ and ‘pythonw.exe’ have been marked as long-path aware,
     which means that the 260 character path limit may no longer apply.
     See *note removing the MAX_PATH limitation: c5c. for details.

   * A ‘._pth’ file can be added to force isolated mode and fully
     specify all search paths to avoid registry and environment lookup.
     See *note the documentation: c3b. for more information.

   * A ‘python36.zip’ file now works as a landmark to infer *note
     PYTHONHOME: 3bc.  See *note the documentation: c3b. for more
     information.

   ---------- Footnotes ----------

   (1) 
https://mail.python.org/pipermail/python-dev/2012-December/123028.html

   (2) 
https://morepypy.blogspot.com/2015/01/faster-more-memory-efficient-and-more.html

   (3) https://peps.python.org/pep-0524/


File: python.info,  Node: Novas funcionalidades<13>,  Next: Outras mudanças na linguagem<8>,  Prev: Resumo – Destaques da versão<8>,  Up: What’s New In Python 3 6

1.8.2 Novas funcionalidades
---------------------------

* Menu:

* PEP 498; Formatted string literals: PEP 498 Formatted string literals.
* PEP 526; Syntax for variable annotations: PEP 526 Syntax for variable annotations.
* PEP 515; Underscores in Numeric Literals: PEP 515 Underscores in Numeric Literals.
* PEP 525; Asynchronous Generators: PEP 525 Asynchronous Generators.
* PEP 530; Asynchronous Comprehensions: PEP 530 Asynchronous Comprehensions.
* PEP 487; Simpler customization of class creation: PEP 487 Simpler customization of class creation.
* PEP 487; Descriptor Protocol Enhancements: PEP 487 Descriptor Protocol Enhancements.
* PEP 519; Adding a file system path protocol: PEP 519 Adding a file system path protocol.
* PEP 495; Local Time Disambiguation: PEP 495 Local Time Disambiguation.
* PEP 529; Change Windows filesystem encoding to UTF-8: PEP 529 Change Windows filesystem encoding to UTF-8.
* PEP 528; Change Windows console encoding to UTF-8: PEP 528 Change Windows console encoding to UTF-8.
* PEP 520; Preserving Class Attribute Definition Order: PEP 520 Preserving Class Attribute Definition Order.
* PEP 468; Preserving Keyword Argument Order: PEP 468 Preserving Keyword Argument Order.
* New dict implementation::
* PEP 523; Adding a frame evaluation API to CPython: PEP 523 Adding a frame evaluation API to CPython.
* PYTHONMALLOC environment variable::
* DTrace and SystemTap probing support::


File: python.info,  Node: PEP 498 Formatted string literals,  Next: PEP 526 Syntax for variable annotations,  Up: Novas funcionalidades<13>

1.8.2.1 PEP 498: Formatted string literals
..........................................

PEP 498(1) introduces a new kind of string literals: 'f-strings', or
*note formatted string literals: 9b1.

Formatted string literals are prefixed with ‘'f'’ and are similar to the
format strings accepted by *note str.format(): 621.  They contain
replacement fields surrounded by curly braces.  The replacement fields
are expressions, which are evaluated at run time, and then formatted
using the *note format(): 61f. protocol:

     >>> name = "Fred"
     >>> f"He said his name is {name}."
     'He said his name is Fred.'
     >>> width = 10
     >>> precision = 4
     >>> value = decimal.Decimal("12.34567")
     >>> f"result: {value:{width}.{precision}}"  # nested fields
     'result:      12.35'

Ver também
..........

PEP 498(2) – Literal String Interpolation.

     PEP written and implemented by Eric V. Smith.

*note Feature documentation: 9b1.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0498/

   (2) https://peps.python.org/pep-0498/


File: python.info,  Node: PEP 526 Syntax for variable annotations,  Next: PEP 515 Underscores in Numeric Literals,  Prev: PEP 498 Formatted string literals,  Up: Novas funcionalidades<13>

1.8.2.2 PEP 526: Syntax for variable annotations
................................................

PEP 484(1) introduced the standard for type annotations of function
parameters, a.k.a.  type hints.  This PEP adds syntax to Python for
annotating the types of variables including class variables and instance
variables:

     primes: List[int] = []

     captain: str  # Note: no initial value!

     class Starship:
         stats: Dict[str, int] = {}

Just as for function annotations, the Python interpreter does not attach
any particular meaning to variable annotations and only stores them in
the ‘__annotations__’ attribute of a class or module.

In contrast to variable declarations in statically typed languages, the
goal of annotation syntax is to provide an easy way to specify
structured type metadata for third party tools and libraries via the
abstract syntax tree and the ‘__annotations__’ attribute.

Ver também
..........

PEP 526(2) – Syntax for variable annotations.

     PEP written by Ryan Gonzalez, Philip House, Ivan Levkivskyi, Lisa
     Roach, and Guido van Rossum.  Implemented by Ivan Levkivskyi.

Tools that use or will use the new syntax: mypy(3), pytype(4), PyCharm,
etc.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/

   (2) https://peps.python.org/pep-0526/

   (3) https://www.mypy-lang.org/

   (4) https://github.com/google/pytype


File: python.info,  Node: PEP 515 Underscores in Numeric Literals,  Next: PEP 525 Asynchronous Generators,  Prev: PEP 526 Syntax for variable annotations,  Up: Novas funcionalidades<13>

1.8.2.3 PEP 515: Underscores in Numeric Literals
................................................

PEP 515(1) adds the ability to use underscores in numeric literals for
improved readability.  For example:

     >>> 1_000_000_000_000_000
     1000000000000000
     >>> 0x_FF_FF_FF_FF
     4294967295

Single underscores are allowed between digits and after any base
specifier.  Leading, trailing, or multiple underscores in a row are not
allowed.

The *note string formatting: 1e8. language also now has support for the
‘'_'’ option to signal the use of an underscore for a thousands
separator for floating-point presentation types and for integer
presentation type ‘'d'’.  For integer presentation types ‘'b'’, ‘'o'’,
‘'x'’, and ‘'X'’, underscores will be inserted every 4 digits:

     >>> '{:_}'.format(1000000)
     '1_000_000'
     >>> '{:_x}'.format(0xFFFFFFFF)
     'ffff_ffff'

Ver também
..........

PEP 515(2) – Underscores in Numeric Literals

     PEP written by Georg Brandl and Serhiy Storchaka.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0515/

   (2) https://peps.python.org/pep-0515/


File: python.info,  Node: PEP 525 Asynchronous Generators,  Next: PEP 530 Asynchronous Comprehensions,  Prev: PEP 515 Underscores in Numeric Literals,  Up: Novas funcionalidades<13>

1.8.2.4 PEP 525: Asynchronous Generators
........................................

PEP 492(1) introduced support for native coroutines and ‘async’ /
‘await’ syntax to Python 3.5.  A notable limitation of the Python 3.5
implementation is that it was not possible to use ‘await’ and ‘yield’ in
the same function body.  In Python 3.6 this restriction has been lifted,
making it possible to define 'asynchronous generators':

     async def ticker(delay, to):
         """Yield numbers from 0 to *to* every *delay* seconds."""
         for i in range(to):
             yield i
             await asyncio.sleep(delay)

The new syntax allows for faster and more concise code.

Ver também
..........

PEP 525(2) – Asynchronous Generators

     PEP written and implemented by Yury Selivanov.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0492/

   (2) https://peps.python.org/pep-0525/


File: python.info,  Node: PEP 530 Asynchronous Comprehensions,  Next: PEP 487 Simpler customization of class creation,  Prev: PEP 525 Asynchronous Generators,  Up: Novas funcionalidades<13>

1.8.2.5 PEP 530: Asynchronous Comprehensions
............................................

PEP 530(1) adds support for using ‘async for’ in list, set, dict
comprehensions and generator expressions:

     result = [i async for i in aiter() if i % 2]

Additionally, ‘await’ expressions are supported in all kinds of
comprehensions:

     result = [await fun() for fun in funcs if await condition()]

Ver também
..........

PEP 530(2) – Asynchronous Comprehensions

     PEP written and implemented by Yury Selivanov.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0530/

   (2) https://peps.python.org/pep-0530/


File: python.info,  Node: PEP 487 Simpler customization of class creation,  Next: PEP 487 Descriptor Protocol Enhancements,  Prev: PEP 530 Asynchronous Comprehensions,  Up: Novas funcionalidades<13>

1.8.2.6 PEP 487: Simpler customization of class creation
........................................................

It is now possible to customize subclass creation without using a
metaclass.  The new ‘__init_subclass__’ classmethod will be called on
the base class whenever a new subclass is created:

     class PluginBase:
         subclasses = []

         def __init_subclass__(cls, **kwargs):
             super().__init_subclass__(**kwargs)
             cls.subclasses.append(cls)

     class Plugin1(PluginBase):
         pass

     class Plugin2(PluginBase):
         pass

In order to allow zero-argument *note super(): 4db. calls to work
correctly from *note __init_subclass__(): 631. implementations, custom
metaclasses must ensure that the new ‘__classcell__’ namespace entry is
propagated to ‘type.__new__’ (as described in *note Criando o objeto
classe: c65.).

Ver também
..........

PEP 487(1) – Simpler customization of class creation

     PEP written and implemented by Martin Teichmann.

*note Feature documentation: c66.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0487/


File: python.info,  Node: PEP 487 Descriptor Protocol Enhancements,  Next: PEP 519 Adding a file system path protocol,  Prev: PEP 487 Simpler customization of class creation,  Up: Novas funcionalidades<13>

1.8.2.7 PEP 487: Descriptor Protocol Enhancements
.................................................

PEP 487(1) extends the descriptor protocol to include the new optional
*note __set_name__(): c69. method.  Whenever a new class is defined, the
new method will be called on all descriptors included in the definition,
providing them with a reference to the class being defined and the name
given to the descriptor within the class namespace.  In other words,
instances of descriptors can now know the attribute name of the
descriptor in the owner class:

     class IntField:
         def __get__(self, instance, owner):
             return instance.__dict__[self.name]

         def __set__(self, instance, value):
             if not isinstance(value, int):
                 raise ValueError(f'expecting integer in {self.name}')
             instance.__dict__[self.name] = value

         # this is the new initializer:
         def __set_name__(self, owner, name):
             self.name = name

     class Model:
         int_field = IntField()

Ver também
..........

PEP 487(2) – Simpler customization of class creation

     PEP written and implemented by Martin Teichmann.

*note Feature documentation: c6a.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0487/

   (2) https://peps.python.org/pep-0487/


File: python.info,  Node: PEP 519 Adding a file system path protocol,  Next: PEP 495 Local Time Disambiguation,  Prev: PEP 487 Descriptor Protocol Enhancements,  Up: Novas funcionalidades<13>

1.8.2.8 PEP 519: Adding a file system path protocol
...................................................

File system paths have historically been represented as *note str: 44c.
or *note bytes: 1c2. objects.  This has led to people who write code
which operate on file system paths to assume that such objects are only
one of those two types (an *note int: 257. representing a file
descriptor does not count as that is not a file path).  Unfortunately
that assumption prevents alternative object representations of file
system paths like *note pathlib: a4. from working with pre-existing
code, including Python’s standard library.

To fix this situation, a new interface represented by *note os.PathLike:
c6c. has been defined.  By implementing the *note __fspath__(): c6d.
method, an object signals that it represents a path.  An object can then
provide a low-level representation of a file system path as a *note str:
44c. or *note bytes: 1c2. object.  This means an object is considered
*note path-like: 2a0. if it implements *note os.PathLike: c6c. or is a
*note str: 44c. or *note bytes: 1c2. object which represents a file
system path.  Code can use *note os.fspath(): c6e, *note os.fsdecode():
c6f, or *note os.fsencode(): c70. to explicitly get a *note str: 44c.
and/or *note bytes: 1c2. representation of a path-like object.

The built-in *note open(): 51c. function has been updated to accept
*note os.PathLike: c6c. objects, as have all relevant functions in the
*note os: a1. and *note os.path: a2. modules, and most other functions
and classes in the standard library.  The *note os.DirEntry: 49b. class
and relevant classes in *note pathlib: a4. have also been updated to
implement *note os.PathLike: c6c.

The hope is that updating the fundamental functions for operating on
file system paths will lead to third-party code to implicitly support
all *note path-like objects: 2a0. without any code changes, or at least
very minimal ones (e.g.  calling *note os.fspath(): c6e. at the
beginning of code before operating on a path-like object).

Here are some examples of how the new interface allows for *note
pathlib.Path: 229. to be used more easily and transparently with
pre-existing code:

     >>> import pathlib
     >>> with open(pathlib.Path("README")) as f:
     ...     contents = f.read()
     ...
     >>> import os.path
     >>> os.path.splitext(pathlib.Path("some_file.txt"))
     ('some_file', '.txt')
     >>> os.path.join("/a/b", pathlib.Path("c"))
     '/a/b/c'
     >>> import os
     >>> os.fspath(pathlib.Path("some_file.txt"))
     'some_file.txt'

(Implemented by Brett Cannon, Ethan Furman, Dusty Phillips, and Jelle
Zijlstra.)

Ver também
..........

PEP 519(1) – Adding a file system path protocol

     PEP written by Brett Cannon and Koos Zevenhoven.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0519/


File: python.info,  Node: PEP 495 Local Time Disambiguation,  Next: PEP 529 Change Windows filesystem encoding to UTF-8,  Prev: PEP 519 Adding a file system path protocol,  Up: Novas funcionalidades<13>

1.8.2.9 PEP 495: Local Time Disambiguation
..........................................

In most world locations, there have been and will be times when local
clocks are moved back.  In those times, intervals are introduced in
which local clocks show the same time twice in the same day.  In these
situations, the information displayed on a local clock (or stored in a
Python datetime instance) is insufficient to identify a particular
moment in time.

PEP 495(1) adds the new 'fold' attribute to instances of *note
datetime.datetime: 1cc. and *note datetime.time: 1ce. classes to
differentiate between two moments in time for which local times are the
same:

     >>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
     >>> for i in range(4):
     ...     u = u0 + i*HOUR
     ...     t = u.astimezone(Eastern)
     ...     print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
     ...
     04:00:00 UTC = 00:00:00 EDT 0
     05:00:00 UTC = 01:00:00 EDT 0
     06:00:00 UTC = 01:00:00 EST 1
     07:00:00 UTC = 02:00:00 EST 0

The values of the *note fold: c72. attribute have the value ‘0’ for all
instances except those that represent the second (chronologically)
moment in time in an ambiguous case.

Ver também
..........

PEP 495(2) – Local Time Disambiguation

     PEP written by Alexander Belopolsky and Tim Peters, implementation
     by Alexander Belopolsky.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0495/

   (2) https://peps.python.org/pep-0495/


File: python.info,  Node: PEP 529 Change Windows filesystem encoding to UTF-8,  Next: PEP 528 Change Windows console encoding to UTF-8,  Prev: PEP 495 Local Time Disambiguation,  Up: Novas funcionalidades<13>

1.8.2.10 PEP 529: Change Windows filesystem encoding to UTF-8
.............................................................

Representing filesystem paths is best performed with str (Unicode)
rather than bytes.  However, there are some situations where using bytes
is sufficient and correct.

Prior to Python 3.6, data loss could result when using bytes paths on
Windows.  With this change, using bytes to represent paths is now
supported on Windows, provided those bytes are encoded with the encoding
returned by *note sys.getfilesystemencoding(): c74, which now defaults
to ‘'utf-8'’.

Applications that do not use str to represent paths should use *note
os.fsencode(): c70. and *note os.fsdecode(): c6f. to ensure their bytes
are correctly encoded.  To revert to the previous behaviour, set *note
PYTHONLEGACYWINDOWSFSENCODING: 2af. or call *note
sys._enablelegacywindowsfsencoding(): 2ae.

See PEP 529(1) for more information and discussion of code modifications
that may be required.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0529/


File: python.info,  Node: PEP 528 Change Windows console encoding to UTF-8,  Next: PEP 520 Preserving Class Attribute Definition Order,  Prev: PEP 529 Change Windows filesystem encoding to UTF-8,  Up: Novas funcionalidades<13>

1.8.2.11 PEP 528: Change Windows console encoding to UTF-8
..........................................................

The default console on Windows will now accept all Unicode characters
and provide correctly read str objects to Python code.  ‘sys.stdin’,
‘sys.stdout’ and ‘sys.stderr’ now default to utf-8 encoding.

This change only applies when using an interactive console, and not when
redirecting files or pipes.  To revert to the previous behaviour for
interactive console use, set *note PYTHONLEGACYWINDOWSSTDIO: c76.

Ver também
..........

PEP 528(1) – Change Windows console encoding to UTF-8

     PEP written and implemented by Steve Dower.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0528/


File: python.info,  Node: PEP 520 Preserving Class Attribute Definition Order,  Next: PEP 468 Preserving Keyword Argument Order,  Prev: PEP 528 Change Windows console encoding to UTF-8,  Up: Novas funcionalidades<13>

1.8.2.12 PEP 520: Preserving Class Attribute Definition Order
.............................................................

Attributes in a class definition body have a natural ordering: the same
order in which the names appear in the source.  This order is now
preserved in the new class’s *note __dict__: c78. attribute.

Also, the effective default class 'execution' namespace (returned from
*note type.__prepare__(): c79.) is now an insertion-order-preserving
mapping.

Ver também
..........

PEP 520(1) – Preserving Class Attribute Definition Order

     PEP written and implemented by Eric Snow.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0520/


File: python.info,  Node: PEP 468 Preserving Keyword Argument Order,  Next: New dict implementation,  Prev: PEP 520 Preserving Class Attribute Definition Order,  Up: Novas funcionalidades<13>

1.8.2.13 PEP 468: Preserving Keyword Argument Order
...................................................

‘**kwargs’ in a function signature is now guaranteed to be an
insertion-order-preserving mapping.

Ver também
..........

PEP 468(1) – Preserving Keyword Argument Order

     PEP written and implemented by Eric Snow.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0468/


File: python.info,  Node: New dict implementation,  Next: PEP 523 Adding a frame evaluation API to CPython,  Prev: PEP 468 Preserving Keyword Argument Order,  Up: Novas funcionalidades<13>

1.8.2.14 New dict implementation
................................

The *note dict: ad6. type now uses a “compact” representation based on a
proposal by Raymond Hettinger(1) which was first implemented by PyPy(2).
The memory usage of the new *note dict(): 256. is between 20% and 25%
smaller compared to Python 3.5.

The order-preserving aspect of this new implementation is considered an
implementation detail and should not be relied upon (this may change in
the future, but it is desired to have this new dict implementation in
the language for a few releases before changing the language spec to
mandate order-preserving semantics for all current and future Python
implementations; this also helps preserve backwards-compatibility with
older versions of the language where random iteration order is still in
effect, e.g.  Python 3.5).

(Contributed by INADA Naoki in bpo-27350(3).  Idea originally suggested
by Raymond Hettinger(4).)

   ---------- Footnotes ----------

   (1) 
https://mail.python.org/pipermail/python-dev/2012-December/123028.html

   (2) 
https://morepypy.blogspot.com/2015/01/faster-more-memory-efficient-and-more.html

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27350

   (4) 
https://mail.python.org/pipermail/python-dev/2012-December/123028.html


File: python.info,  Node: PEP 523 Adding a frame evaluation API to CPython,  Next: PYTHONMALLOC environment variable,  Prev: New dict implementation,  Up: Novas funcionalidades<13>

1.8.2.15 PEP 523: Adding a frame evaluation API to CPython
..........................................................

While Python provides extensive support to customize how code executes,
one place it has not done so is in the evaluation of frame objects.  If
you wanted some way to intercept frame evaluation in Python there really
wasn’t any way without directly manipulating function pointers for
defined functions.

PEP 523(1) changes this by providing an API to make frame evaluation
pluggable at the C level.  This will allow for tools such as debuggers
and JITs to intercept frame evaluation before the execution of Python
code begins.  This enables the use of alternative evaluation
implementations for Python code, tracking frame evaluation, etc.

This API is not part of the limited C API and is marked as private to
signal that usage of this API is expected to be limited and only
applicable to very select, low-level use-cases.  Semantics of the API
will change with Python as necessary.

Ver também
..........

PEP 523(2) – Adding a frame evaluation API to CPython

     PEP written by Brett Cannon and Dino Viehland.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0523/

   (2) https://peps.python.org/pep-0523/


File: python.info,  Node: PYTHONMALLOC environment variable,  Next: DTrace and SystemTap probing support,  Prev: PEP 523 Adding a frame evaluation API to CPython,  Up: Novas funcionalidades<13>

1.8.2.16 PYTHONMALLOC environment variable
..........................................

The new *note PYTHONMALLOC: c7f. environment variable allows setting the
Python memory allocators and installing debug hooks.

It is now possible to install debug hooks on Python memory allocators on
Python compiled in release mode using ‘PYTHONMALLOC=debug’.  Effects of
debug hooks:

   * Newly allocated memory is filled with the byte ‘0xCB’

   * Freed memory is filled with the byte ‘0xDB’

   * Detect violations of the Python memory allocator API. For example,
     *note PyObject_Free(): c80. called on a memory block allocated by
     *note PyMem_Malloc(): c81.

   * Detect writes before the start of a buffer (buffer underflows)

   * Detect writes after the end of a buffer (buffer overflows)

   * Check that the *note GIL: 148. is held when allocator functions of
     *note PYMEM_DOMAIN_OBJ: c82. (ex: *note PyObject_Malloc(): c83.)
     and *note PYMEM_DOMAIN_MEM: c84. (ex: *note PyMem_Malloc(): c81.)
     domains are called.

Checking if the GIL is held is also a new feature of Python 3.6.

See the *note PyMem_SetupDebugHooks(): c85. function for debug hooks on
Python memory allocators.

It is now also possible to force the usage of the ‘malloc()’ allocator
of the C library for all Python memory allocations using
‘PYTHONMALLOC=malloc’.  This is helpful when using external memory
debuggers like Valgrind on a Python compiled in release mode.

On error, the debug hooks on Python memory allocators now use the *note
tracemalloc: ff. module to get the traceback where a memory block was
allocated.

Example of fatal error on buffer overflow using ‘python3.6 -X
tracemalloc=5’ (store 5 frames in traces):

     Debug memory block at address p=0x7fbcd41666f8: API 'o'
         4 bytes originally requested
         The 7 pad bytes at p-7 are FORBIDDENBYTE, as expected.
         The 8 pad bytes at tail=0x7fbcd41666fc are not all FORBIDDENBYTE (0xfb):
             at tail+0: 0x02 *** OUCH
             at tail+1: 0xfb
             at tail+2: 0xfb
             at tail+3: 0xfb
             at tail+4: 0xfb
             at tail+5: 0xfb
             at tail+6: 0xfb
             at tail+7: 0xfb
         The block was made by call #1233329 to debug malloc/realloc.
         Data at p: 1a 2b 30 00

     Memory block allocated at (most recent call first):
       File "test/test_bytes.py", line 323
       File "unittest/case.py", line 600
       File "unittest/case.py", line 648
       File "unittest/suite.py", line 122
       File "unittest/suite.py", line 84

     Fatal Python error: bad trailing pad byte

     Current thread 0x00007fbcdbd32700 (most recent call first):
       File "test/test_bytes.py", line 323 in test_hex
       File "unittest/case.py", line 600 in run
       File "unittest/case.py", line 648 in __call__
       File "unittest/suite.py", line 122 in run
       File "unittest/suite.py", line 84 in __call__
       File "unittest/suite.py", line 122 in run
       File "unittest/suite.py", line 84 in __call__
       ...

(Contributed by Victor Stinner in bpo-26516(1) and bpo-26564(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26516

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26564


File: python.info,  Node: DTrace and SystemTap probing support,  Prev: PYTHONMALLOC environment variable,  Up: Novas funcionalidades<13>

1.8.2.17 DTrace and SystemTap probing support
.............................................

Python can now be built ‘--with-dtrace’ which enables static markers for
the following events in the interpreter:

   * function call/return

   * garbage collection started/finished

   * line of code executed.

This can be used to instrument running interpreters in production,
without the need to recompile specific *note debug builds: 1f9. or
providing application-specific profiling/debugging code.

More details in *note Instrumentando o CPython com DTrace e SystemTap:
c87.

The current implementation is tested on Linux and macOS. Additional
markers may be added in the future.

(Contributed by Łukasz Langa in bpo-21590(1), based on patches by Jesús
Cea Avión, David Malcolm, and Nikhil Benesch.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21590


File: python.info,  Node: Outras mudanças na linguagem<8>,  Next: Novos módulos<8>,  Prev: Novas funcionalidades<13>,  Up: What’s New In Python 3 6

1.8.3 Outras mudanças na linguagem
----------------------------------

Algumas das mudanças menores feitas no núcleo da linguagem Python são:

   * A ‘global’ or ‘nonlocal’ statement must now textually appear before
     the first use of the affected name in the same scope.  Previously
     this was a *note SyntaxWarning: 466.

   * It is now possible to set a *note special method: c89. to ‘None’ to
     indicate that the corresponding operation is not available.  For
     example, if a class sets *note __iter__(): c8a. to ‘None’, the
     class is not iterable.  (Contributed by Andrew Barnert and Ivan
     Levkivskyi in bpo-25958(1).)

   * Long sequences of repeated traceback lines are now abbreviated as
     ‘"[Previous line repeated {count} more times]"’ (see *note
     traceback: c8b. for an example).  (Contributed by Emanuel Barry in
     bpo-26823(2).)

   * Import now raises the new exception *note ModuleNotFoundError: b5b.
     (subclass of *note ImportError: 419.) when it cannot find a module.
     Code that currently checks for ImportError (in try-except) will
     still work.  (Contributed by Eric Snow in bpo-15767(3).)

   * Class methods relying on zero-argument ‘super()’ will now work
     correctly when called from metaclass methods during class creation.
     (Contributed by Martin Teichmann in bpo-23722(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25958

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26823

   (3) https://bugs.python.org/issue?@action=redirect&bpo=15767

   (4) https://bugs.python.org/issue?@action=redirect&bpo=23722


File: python.info,  Node: Novos módulos<8>,  Next: Módulos melhorados<8>,  Prev: Outras mudanças na linguagem<8>,  Up: What’s New In Python 3 6

1.8.4 Novos módulos
-------------------

* Menu:

* segredos::


File: python.info,  Node: segredos,  Up: Novos módulos<8>

1.8.4.1 segredos
................

The main purpose of the new *note secrets: c0. module is to provide an
obvious way to reliably generate cryptographically strong pseudo-random
values suitable for managing secrets, such as account authentication,
tokens, and similar.

     Aviso: Note that the pseudo-random generators in the *note random:
     b8. module should 'NOT' be used for security purposes.  Use *note
     secrets: c0. on Python 3.6+ and *note os.urandom(): 523. on Python
     3.5 and earlier.

Ver também
..........

PEP 506(1) – Adding A Secrets Module To The Standard Library

     PEP written and implemented by Steven D’Aprano.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0506/


File: python.info,  Node: Módulos melhorados<8>,  Next: Otimizações<8>,  Prev: Novos módulos<8>,  Up: What’s New In Python 3 6

1.8.5 Módulos melhorados
------------------------

* Menu:

* array: array<4>.
* ast: ast<4>.
* asyncio: asyncio<9>.
* binascii: binascii<2>.
* cmath::
* collections: collections<4>.
* concurrent.futures: concurrent futures<4>.
* contextlib: contextlib<4>.
* datetime: datetime<5>.
* decimal: decimal<2>.
* distutils: distutils<5>.
* email: email<2>.
* encodings: encodings<2>.
* enum: enum<7>.
* faulthandler: faulthandler<2>.
* fileinput: fileinput<2>.
* hashlib: hashlib<5>.
* http.client: http client<2>.
* idlelib e IDLE: idlelib e IDLE<2>.
* importlib: importlib<6>.
* inspect: inspect<6>.
* json::
* logging: logging<4>.
* math: math<7>.
* multiprocessing: multiprocessing<5>.
* os: os<8>.
* pathlib: pathlib<9>.
* pdb: pdb<5>.
* pickle: pickle<2>.
* pickletools::
* pydoc: pydoc<3>.
* random: random<4>.
* re: re<5>.
* readline::
* rlcompleter::
* shlex: shlex<2>.
* site: site<3>.
* sqlite3: sqlite3<7>.
* socket: socket<7>.
* socketserver: socketserver<2>.
* ssl: ssl<7>.
* statistics: statistics<5>.
* struct::
* subprocess: subprocess<3>.
* sys: sys<10>.
* telnetlib::
* time: time<6>.
* timeit::
* tkinter: tkinter<6>.
* traceback: traceback<4>.
* tracemalloc: tracemalloc<3>.
* typing: typing<9>.
* unicodedata: unicodedata<7>.
* unittest.mock: unittest mock<2>.
* urllib.request: urllib request.
* urllib.robotparser: urllib robotparser.
* venv: venv<5>.
* avisos: avisos<4>.
* winreg::
* winsound::
* xmlrpc.client: xmlrpc client.
* zipfile: zipfile<3>.
* zlib::


File: python.info,  Node: array<4>,  Next: ast<4>,  Up: Módulos melhorados<8>

1.8.5.1 array
.............

Exhausted iterators of *note array.array: 1a0. will now stay exhausted
even if the iterated array is extended.  This is consistent with the
behavior of other mutable sequences.

Contributed by Serhiy Storchaka in bpo-26492(1).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26492


File: python.info,  Node: ast<4>,  Next: asyncio<9>,  Prev: array<4>,  Up: Módulos melhorados<8>

1.8.5.2 ast
...........

The new *note ast.Constant: 2b9. AST node has been added.  It can be
used by external AST optimizers for the purposes of constant folding.

Contributed by Victor Stinner in bpo-26146(1).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26146


File: python.info,  Node: asyncio<9>,  Next: binascii<2>,  Prev: ast<4>,  Up: Módulos melhorados<8>

1.8.5.3 asyncio
...............

Starting with Python 3.6 the ‘asyncio’ module is no longer provisional
and its API is considered stable.

Notable changes in the *note asyncio: a. module since Python 3.5.0 (all
backported to 3.5.x due to the provisional status):

   * The *note get_event_loop(): 2c2. function has been changed to
     always return the currently running loop when called from
     coroutines and callbacks.  (Contributed by Yury Selivanov in
     bpo-28613(1).)

   * The *note ensure_future(): c92. function and all functions that use
     it, such as *note loop.run_until_complete(): c93, now accept all
     kinds of *note awaitable objects: 1ad.  (Contributed by Yury
     Selivanov.)

   * New *note run_coroutine_threadsafe(): 886. function to submit
     coroutines to event loops from other threads.  (Contributed by
     Vincent Michel.)

   * New *note Transport.is_closing(): c94. method to check if the
     transport is closing or closed.  (Contributed by Yury Selivanov.)

   * The *note loop.create_server(): b25. method can now accept a list
     of hosts.  (Contributed by Yann Sionneau.)

   * New *note loop.create_future(): c95. method to create Future
     objects.  This allows alternative event loop implementations, such
     as uvloop(2), to provide a faster *note asyncio.Future: be6.
     implementation.  (Contributed by Yury Selivanov in bpo-27041(3).)

   * New *note loop.get_exception_handler(): c96. method to get the
     current exception handler.  (Contributed by Yury Selivanov in
     bpo-27040(4).)

   * New *note StreamReader.readuntil(): 1b4. method to read data from
     the stream until a separator bytes sequence appears.  (Contributed
     by Mark Korenberg.)

   * The performance of *note StreamReader.readexactly(): c97. has been
     improved.  (Contributed by Mark Korenberg in bpo-28370(5).)

   * The *note loop.getaddrinfo(): c2e. method is optimized to avoid
     calling the system ‘getaddrinfo’ function if the address is already
     resolved.  (Contributed by A. Jesse Jiryu Davis.)

   * The *note loop.stop(): c98. method has been changed to stop the
     loop immediately after the current iteration.  Any new callbacks
     scheduled as a result of the last iteration will be discarded.
     (Contributed by Guido van Rossum in bpo-25593(6).)

   * *note Future.set_exception: c99. will now raise *note TypeError:
     2c3. when passed an instance of the *note StopIteration: c15.
     exception.  (Contributed by Chris Angelico in bpo-26221(7).)

   * New *note loop.connect_accepted_socket(): 7df. method to be used by
     servers that accept connections outside of asyncio, but that use
     asyncio to handle them.  (Contributed by Jim Fulton in
     bpo-27392(8).)

   * ‘TCP_NODELAY’ flag is now set for all TCP transports by default.
     (Contributed by Yury Selivanov in bpo-27456(9).)

   * New *note loop.shutdown_asyncgens(): c9a. to properly close pending
     asynchronous generators before closing the loop.  (Contributed by
     Yury Selivanov in bpo-28003(10).)

   * *note Future: be6. and *note Task: 1be. classes now have an
     optimized C implementation which makes asyncio code up to 30%
     faster.  (Contributed by Yury Selivanov and INADA Naoki in
     bpo-26081(11) and bpo-28544(12).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28613

   (2) https://github.com/MagicStack/uvloop

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27041

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27040

   (5) https://bugs.python.org/issue?@action=redirect&bpo=28370

   (6) https://bugs.python.org/issue?@action=redirect&bpo=25593

   (7) https://bugs.python.org/issue?@action=redirect&bpo=26221

   (8) https://bugs.python.org/issue?@action=redirect&bpo=27392

   (9) https://bugs.python.org/issue?@action=redirect&bpo=27456

   (10) https://bugs.python.org/issue?@action=redirect&bpo=28003

   (11) https://bugs.python.org/issue?@action=redirect&bpo=26081

   (12) https://bugs.python.org/issue?@action=redirect&bpo=28544


File: python.info,  Node: binascii<2>,  Next: cmath,  Prev: asyncio<9>,  Up: Módulos melhorados<8>

1.8.5.4 binascii
................

The *note b2a_base64(): c9c. function now accepts an optional 'newline'
keyword argument to control whether the newline character is appended to
the return value.  (Contributed by Victor Stinner in bpo-25357(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25357


File: python.info,  Node: cmath,  Next: collections<4>,  Prev: binascii<2>,  Up: Módulos melhorados<8>

1.8.5.5 cmath
.............

The new *note cmath.tau: c9e. ('τ') constant has been added.
(Contributed by Lisa Roach in bpo-12345(1), see PEP 628(2) for details.)

New constants: *note cmath.inf: c9f. and *note cmath.nan: ca0. to match
*note math.inf: ca1. and *note math.nan: 663, and also *note cmath.infj:
ca2. and *note cmath.nanj: ca3. to match the format used by complex
repr.  (Contributed by Mark Dickinson in bpo-23229(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=12345

   (2) https://peps.python.org/pep-0628/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23229


File: python.info,  Node: collections<4>,  Next: concurrent futures<4>,  Prev: cmath,  Up: Módulos melhorados<8>

1.8.5.6 collections
...................

The new *note Collection: ca5. abstract base class has been added to
represent sized iterable container classes.  (Contributed by Ivan
Levkivskyi, docs by Neil Girdhar in bpo-27598(1).)

The new *note Reversible: ca6. abstract base class represents iterable
classes that also provide the *note __reversed__(): ca7. method.
(Contributed by Ivan Levkivskyi in bpo-25987(2).)

The new *note AsyncGenerator: ca8. abstract base class represents
asynchronous generators.  (Contributed by Yury Selivanov in
bpo-28720(3).)

The *note namedtuple(): 1ca. function now accepts an optional keyword
argument 'module', which, when specified, is used for the *note
__module__: 374. attribute of the returned named tuple class.
(Contributed by Raymond Hettinger in bpo-17941(4).)

The 'verbose' and 'rename' arguments for *note namedtuple(): 1ca. are
now keyword-only.  (Contributed by Raymond Hettinger in bpo-25628(5).)

Recursive *note collections.deque: 5dc. instances can now be pickled.
(Contributed by Serhiy Storchaka in bpo-26482(6).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27598

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25987

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28720

   (4) https://bugs.python.org/issue?@action=redirect&bpo=17941

   (5) https://bugs.python.org/issue?@action=redirect&bpo=25628

   (6) https://bugs.python.org/issue?@action=redirect&bpo=26482


File: python.info,  Node: concurrent futures<4>,  Next: contextlib<4>,  Prev: collections<4>,  Up: Módulos melhorados<8>

1.8.5.7 concurrent.futures
..........................

The *note ThreadPoolExecutor: 742. class constructor now accepts an
optional 'thread_name_prefix' argument to make it possible to customize
the names of the threads created by the pool.  (Contributed by Gregory
P.  Smith in bpo-27664(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27664


File: python.info,  Node: contextlib<4>,  Next: datetime<5>,  Prev: concurrent futures<4>,  Up: Módulos melhorados<8>

1.8.5.8 contextlib
..................

The *note contextlib.AbstractContextManager: cab. class has been added
to provide an abstract base class for context managers.  It provides a
sensible default implementation for ‘__enter__()’ which returns ‘self’
and leaves ‘__exit__()’ an abstract method.  A matching class has been
added to the *note typing: 104. module as *note typing.ContextManager:
cac.  (Contributed by Brett Cannon in bpo-25609(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25609


File: python.info,  Node: datetime<5>,  Next: decimal<2>,  Prev: contextlib<4>,  Up: Módulos melhorados<8>

1.8.5.9 datetime
................

The *note datetime: 1cc. and *note time: 1ce. classes have the new *note
fold: cae. attribute used to disambiguate local time when necessary.
Many functions in the *note datetime: 30. have been updated to support
local time disambiguation.  See *note Local Time Disambiguation: c57.
section for more information.  (Contributed by Alexander Belopolsky in
bpo-24773(1).)

The *note datetime.strftime(): caf. and *note date.strftime(): cb0.
methods now support ISO 8601 date directives ‘%G’, ‘%u’ and ‘%V’.
(Contributed by Ashley Anderson in bpo-12006(2).)

The *note datetime.isoformat(): b42. function now accepts an optional
'timespec' argument that specifies the number of additional components
of the time value to include.  (Contributed by Alessandro Cucci and
Alexander Belopolsky in bpo-19475(3).)

The *note datetime.combine(): cb1. now accepts an optional 'tzinfo'
argument.  (Contributed by Alexander Belopolsky in bpo-27661(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24773

   (2) https://bugs.python.org/issue?@action=redirect&bpo=12006

   (3) https://bugs.python.org/issue?@action=redirect&bpo=19475

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27661


File: python.info,  Node: decimal<2>,  Next: distutils<5>,  Prev: datetime<5>,  Up: Módulos melhorados<8>

1.8.5.10 decimal
................

New *note Decimal.as_integer_ratio(): cb3. method that returns a pair
‘(n, d)’ of integers that represent the given *note Decimal: 29d.
instance as a fraction, in lowest terms and with a positive denominator:

     >>> Decimal('-3.14').as_integer_ratio()
     (-157, 50)

(Contributed by Stefan Krah amd Mark Dickinson in bpo-25928(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25928


File: python.info,  Node: distutils<5>,  Next: email<2>,  Prev: decimal<2>,  Up: Módulos melhorados<8>

1.8.5.11 distutils
..................

The ‘default_format’ attribute has been removed from
‘distutils.command.sdist.sdist’ and the ‘formats’ attribute defaults to
‘['gztar']’.  Although not anticipated, any code relying on the presence
of ‘default_format’ may need to be adapted.  See bpo-27819(1) for more
details.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27819


File: python.info,  Node: email<2>,  Next: encodings<2>,  Prev: distutils<5>,  Up: Módulos melhorados<8>

1.8.5.12 email
..............

The new email API, enabled via the 'policy' keyword to various
constructors, is no longer provisional.  The *note email: 3b.
documentation has been reorganized and rewritten to focus on the new
API, while retaining the old documentation for the legacy API.
(Contributed by R. David Murray in bpo-24277(1).)

The *note email.mime: 45. classes now all accept an optional 'policy'
keyword.  (Contributed by Berker Peksag in bpo-27331(2).)

The *note DecodedGenerator: cb6. now supports the 'policy' keyword.

There is a new *note policy: 4f. attribute, *note message_factory: cb7,
that controls what class is used by default when the parser creates new
message objects.  For the *note email.policy.compat32: cb8. policy this
is *note Message: 27c, for the new policies it is *note EmailMessage:
27b.  (Contributed by R. David Murray in bpo-20476(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24277

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27331

   (3) https://bugs.python.org/issue?@action=redirect&bpo=20476


File: python.info,  Node: encodings<2>,  Next: enum<7>,  Prev: email<2>,  Up: Módulos melhorados<8>

1.8.5.13 encodings
..................

On Windows, added the ‘'oem'’ encoding to use ‘CP_OEMCP’, and the
‘'ansi'’ alias for the existing ‘'mbcs'’ encoding, which uses the
‘CP_ACP’ code page.  (Contributed by Steve Dower in bpo-27959(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27959


File: python.info,  Node: enum<7>,  Next: faulthandler<2>,  Prev: encodings<2>,  Up: Módulos melhorados<8>

1.8.5.14 enum
.............

Two new enumeration base classes have been added to the *note enum: 56.
module: *note Flag: 623. and *note IntFlag: cbb.  Both are used to
define constants that can be combined using the bitwise operators.
(Contributed by Ethan Furman in bpo-23591(1).)

Many standard library modules have been updated to use the *note
IntFlag: cbb. class for their constants.

The new *note enum.auto: cbc. value can be used to assign values to enum
members automatically:

     >>> from enum import Enum, auto
     >>> class Color(Enum):
     ...     red = auto()
     ...     blue = auto()
     ...     green = auto()
     ...
     >>> list(Color)
     [<Color.red: 1>, <Color.blue: 2>, <Color.green: 3>]

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23591


File: python.info,  Node: faulthandler<2>,  Next: fileinput<2>,  Prev: enum<7>,  Up: Módulos melhorados<8>

1.8.5.15 faulthandler
.....................

On Windows, the *note faulthandler: 58. module now installs a handler
for Windows exceptions: see *note faulthandler.enable(): cbe.
(Contributed by Victor Stinner in bpo-23848(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23848


File: python.info,  Node: fileinput<2>,  Next: hashlib<5>,  Prev: faulthandler<2>,  Up: Módulos melhorados<8>

1.8.5.16 fileinput
..................

*note hook_encoded(): cc0. now supports the 'errors' argument.
(Contributed by Joseph Hackman in bpo-25788(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25788


File: python.info,  Node: hashlib<5>,  Next: http client<2>,  Prev: fileinput<2>,  Up: Módulos melhorados<8>

1.8.5.17 hashlib
................

*note hashlib: 68. supports OpenSSL 1.1.0.  The minimum recommend
version is 1.0.2.  (Contributed by Christian Heimes in bpo-26470(1).)

BLAKE2 hash functions were added to the module.  *note blake2b(): 642.
and *note blake2s(): 643. are always available and support the full
feature set of BLAKE2.  (Contributed by Christian Heimes in bpo-26798(2)
based on code by Dmitry Chestnykh and Samuel Neves.  Documentation
written by Dmitry Chestnykh.)

The SHA-3 hash functions *note sha3_224(): cc2, *note sha3_256(): cc3,
*note sha3_384(): cc4, *note sha3_512(): cc5, and SHAKE hash functions
*note shake_128(): cc6. and *note shake_256(): cc7. were added.
(Contributed by Christian Heimes in bpo-16113(3).  Keccak Code Package
by Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche, and
Ronny Van Keer.)

The password-based key derivation function *note scrypt(): c59. is now
available with OpenSSL 1.1.0 and newer.  (Contributed by Christian
Heimes in bpo-27928(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26470

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26798

   (3) https://bugs.python.org/issue?@action=redirect&bpo=16113

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27928


File: python.info,  Node: http client<2>,  Next: idlelib e IDLE<2>,  Prev: hashlib<5>,  Up: Módulos melhorados<8>

1.8.5.18 http.client
....................

*note HTTPConnection.request(): cc9. and *note endheaders(): cca. both
now support chunked encoding request bodies.  (Contributed by Demian
Brecht and Rolf Krahl in bpo-12319(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=12319


File: python.info,  Node: idlelib e IDLE<2>,  Next: importlib<6>,  Prev: http client<2>,  Up: Módulos melhorados<8>

1.8.5.19 idlelib e IDLE
.......................

The idlelib package is being modernized and refactored to make IDLE look
and work better and to make the code easier to understand, test, and
improve.  Part of making IDLE look better, especially on Linux and Mac,
is using ttk widgets, mostly in the dialogs.  As a result, IDLE no
longer runs with tcl/tk 8.4.  It now requires tcl/tk 8.5 or 8.6.  We
recommend running the latest release of either.

‘Modernizing’ includes renaming and consolidation of idlelib modules.
The renaming of files with partial uppercase names is similar to the
renaming of, for instance, Tkinter and TkFont to tkinter and
tkinter.font in 3.0.  As a result, imports of idlelib files that worked
in 3.5 will usually not work in 3.6.  At least a module name change will
be needed (see idlelib/README.txt), sometimes more.  (Name changes
contributed by Al Swiegart and Terry Reedy in bpo-24225(1).  Most
idlelib patches since have been and will be part of the process.)

In compensation, the eventual result with be that some idlelib classes
will be easier to use, with better APIs and docstrings explaining them.
Additional useful information will be added to idlelib when available.

New in 3.6.2:

Multiple fixes for autocompletion.  (Contributed by Louie Lu in
bpo-15786(2).)

New in 3.6.3:

Module Browser (on the File menu, formerly called Class Browser), now
displays nested functions and classes in addition to top-level functions
and classes.  (Contributed by Guilherme Polo, Cheryl Sabella, and Terry
Jan Reedy in bpo-1612262(3).)

The IDLE features formerly implemented as extensions have been
reimplemented as normal features.  Their settings have been moved from
the Extensions tab to other dialog tabs.  (Contributed by Charles
Wohlganger and Terry Jan Reedy in bpo-27099(4).)

The Settings dialog (Options, Configure IDLE) has been partly rewritten
to improve both appearance and function.  (Contributed by Cheryl Sabella
and Terry Jan Reedy in multiple issues.)

New in 3.6.4:

The font sample now includes a selection of non-Latin characters so that
users can better see the effect of selecting a particular font.
(Contributed by Terry Jan Reedy in bpo-13802(5).)  The sample can be
edited to include other characters.  (Contributed by Serhiy Storchaka in
bpo-31860(6).)

New in 3.6.6:

Editor code context option revised.  Box displays all context lines up
to maxlines.  Clicking on a context line jumps the editor to that line.
Context colors for custom themes is added to Highlights tab of Settings
dialog.  (Contributed by Cheryl Sabella and Terry Jan Reedy in
bpo-33642(7), bpo-33768(8), and bpo-33679(9).)

On Windows, a new API call tells Windows that tk scales for DPI. On
Windows 8.1+ or 10, with DPI compatibility properties of the Python
binary unchanged, and a monitor resolution greater than 96 DPI, this
should make text and lines sharper.  It should otherwise have no effect.
(Contributed by Terry Jan Reedy in bpo-33656(10).)

New in 3.6.7:

A saída em N linhas (50 por padrão) é compactada até um limite inferior.
N pode ser alterado na seção PyShell da página General da caixa de
diálogo Settings.  Menos linhas, mas possivelmente extra longas, podem
ser espremidas clicando com o botão direito do mouse na saída.  A saída
compactada pode ser expandida no local clicando duas vezes no botão ou
na área de transferência ou em uma janela separada clicando com o botão
direito do mouse.  (Contribuição de Tal Einat em bpo-1529353(11).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24225

   (2) https://bugs.python.org/issue?@action=redirect&bpo=15786

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1612262

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27099

   (5) https://bugs.python.org/issue?@action=redirect&bpo=13802

   (6) https://bugs.python.org/issue?@action=redirect&bpo=31860

   (7) https://bugs.python.org/issue?@action=redirect&bpo=33642

   (8) https://bugs.python.org/issue?@action=redirect&bpo=33768

   (9) https://bugs.python.org/issue?@action=redirect&bpo=33679

   (10) https://bugs.python.org/issue?@action=redirect&bpo=33656

   (11) https://bugs.python.org/issue?@action=redirect&bpo=1529353


File: python.info,  Node: importlib<6>,  Next: inspect<6>,  Prev: idlelib e IDLE<2>,  Up: Módulos melhorados<8>

1.8.5.20 importlib
..................

Import now raises the new exception *note ModuleNotFoundError: b5b.
(subclass of *note ImportError: 419.) when it cannot find a module.
Code that current checks for ‘ImportError’ (in try-except) will still
work.  (Contributed by Eric Snow in bpo-15767(1).)

*note importlib.util.LazyLoader: ccd. now calls *note create_module():
cce. on the wrapped loader, removing the restriction that *note
importlib.machinery.BuiltinImporter: ccf. and *note
importlib.machinery.ExtensionFileLoader: cd0. couldn’t be used with
*note importlib.util.LazyLoader: ccd.

*note importlib.util.cache_from_source(): 2fe, *note
importlib.util.source_from_cache(): 51a, and *note
importlib.util.spec_from_file_location(): cd1. now accept a *note
path-like object: 2a0.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15767


File: python.info,  Node: inspect<6>,  Next: json,  Prev: importlib<6>,  Up: Módulos melhorados<8>

1.8.5.21 inspect
................

The *note inspect.signature(): 738. function now reports the implicit
‘.0’ parameters generated by the compiler for comprehension and
generator expression scopes as if they were positional-only parameters
called ‘implicit0’.  (Contributed by Jelle Zijlstra in bpo-19611(1).)

To reduce code churn when upgrading from Python 2.7 and the legacy
‘inspect.getargspec()’ API, the previously documented deprecation of
*note inspect.getfullargspec(): 739. has been reversed.  While this
function is convenient for single/source Python 2/3 code bases, the
richer *note inspect.signature(): 738. interface remains the recommended
approach for new code.  (Contributed by Nick Coghlan in bpo-27172(2))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19611

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27172


File: python.info,  Node: json,  Next: logging<4>,  Prev: inspect<6>,  Up: Módulos melhorados<8>

1.8.5.22 json
.............

*note json.load(): cd4. and *note json.loads(): 95c. now support binary
input.  Encoded JSON should be represented using either UTF-8, UTF-16,
or UTF-32.  (Contributed by Serhiy Storchaka in bpo-17909(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17909


File: python.info,  Node: logging<4>,  Next: math<7>,  Prev: json,  Up: Módulos melhorados<8>

1.8.5.23 logging
................

The new *note WatchedFileHandler.reopenIfNeeded(): cd6. method has been
added to add the ability to check if the log file needs to be reopened.
(Contributed by Marian Horban in bpo-24884(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24884


File: python.info,  Node: math<7>,  Next: multiprocessing<5>,  Prev: logging<4>,  Up: Módulos melhorados<8>

1.8.5.24 math
.............

The tau ('τ') constant has been added to the *note math: 8e. and *note
cmath: 18. modules.  (Contributed by Lisa Roach in bpo-12345(1), see PEP
628(2) for details.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=12345

   (2) https://peps.python.org/pep-0628/


File: python.info,  Node: multiprocessing<5>,  Next: os<8>,  Prev: math<7>,  Up: Módulos melhorados<8>

1.8.5.25 multiprocessing
........................

*note Proxy Objects: cd9. returned by *note multiprocessing.Manager():
cda. can now be nested.  (Contributed by Davin Potts in bpo-6766(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=6766


File: python.info,  Node: os<8>,  Next: pathlib<9>,  Prev: multiprocessing<5>,  Up: Módulos melhorados<8>

1.8.5.26 os
...........

See the summary of *note PEP 519: c56. for details on how the *note os:
a1. and *note os.path: a2. modules now support *note path-like objects:
2a0.

*note scandir(): a68. now supports *note bytes: 1c2. paths on Windows.

A new *note close(): cdc. method allows explicitly closing a *note
scandir(): a68. iterator.  The *note scandir(): a68. iterator now
supports the *note context manager: 5d4. protocol.  If a ‘scandir()’
iterator is neither exhausted nor explicitly closed a *note
ResourceWarning: 244. will be emitted in its destructor.  (Contributed
by Serhiy Storchaka in bpo-25994(1).)

On Linux, *note os.urandom(): 523. now blocks until the system urandom
entropy pool is initialized to increase the security.  See the PEP
524(2) for the rationale.

The Linux ‘getrandom()’ syscall (get random bytes) is now exposed as the
new *note os.getrandom(): cdd. function.  (Contributed by Victor
Stinner, part of the PEP 524(3))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25994

   (2) https://peps.python.org/pep-0524/

   (3) https://peps.python.org/pep-0524/


File: python.info,  Node: pathlib<9>,  Next: pdb<5>,  Prev: os<8>,  Up: Módulos melhorados<8>

1.8.5.27 pathlib
................

*note pathlib: a4. now supports *note path-like objects: 2a0.
(Contributed by Brett Cannon in bpo-27186(1).)

See the summary of *note PEP 519: c56. for details.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27186


File: python.info,  Node: pdb<5>,  Next: pickle<2>,  Prev: pathlib<9>,  Up: Módulos melhorados<8>

1.8.5.28 pdb
............

The *note Pdb: 928. class constructor has a new optional 'readrc'
argument to control whether ‘.pdbrc’ files should be read.


File: python.info,  Node: pickle<2>,  Next: pickletools,  Prev: pdb<5>,  Up: Módulos melhorados<8>

1.8.5.29 pickle
...............

Objects that need ‘__new__’ called with keyword arguments can now be
pickled using *note pickle protocols: ce1. older than protocol version
4.  Protocol version 4 already supports this case.  (Contributed by
Serhiy Storchaka in bpo-24164(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24164


File: python.info,  Node: pickletools,  Next: pydoc<3>,  Prev: pickle<2>,  Up: Módulos melhorados<8>

1.8.5.30 pickletools
....................

*note pickletools.dis(): ce3. now outputs the implicit memo index for
the ‘MEMOIZE’ opcode.  (Contributed by Serhiy Storchaka in
bpo-25382(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25382


File: python.info,  Node: pydoc<3>,  Next: random<4>,  Prev: pickletools,  Up: Módulos melhorados<8>

1.8.5.31 pydoc
..............

The *note pydoc: b5. module has learned to respect the ‘MANPAGER’
environment variable.  (Contributed by Matthias Klose in bpo-8637(1).)

*note help(): 8dd. and *note pydoc: b5. can now list named tuple fields
in the order they were defined rather than alphabetically.  (Contributed
by Raymond Hettinger in bpo-24879(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=8637

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24879


File: python.info,  Node: random<4>,  Next: re<5>,  Prev: pydoc<3>,  Up: Módulos melhorados<8>

1.8.5.32 random
...............

The new *note choices(): ce6. function returns a list of elements of
specified size from the given population with optional weights.
(Contributed by Raymond Hettinger in bpo-18844(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18844


File: python.info,  Node: re<5>,  Next: readline,  Prev: random<4>,  Up: Módulos melhorados<8>

1.8.5.33 re
...........

Added support of modifier spans in regular expressions.  Examples:
‘'(?i:p)ython'’ matches ‘'python'’ and ‘'Python'’, but not ‘'PYTHON'’;
‘'(?i)g(?-i:v)r'’ matches ‘'GvR'’ and ‘'gvr'’, but not ‘'GVR'’.
(Contributed by Serhiy Storchaka in bpo-433028(1).)

Match object groups can be accessed by ‘__getitem__’, which is
equivalent to ‘group()’.  So ‘mo['name']’ is now equivalent to
‘mo.group('name')’.  (Contributed by Eric Smith in bpo-24454(2).)

*note Match: ce8. objects now support *note index-like objects: 71d. as
group indices.  (Contributed by Jeroen Demeyer and Xiang Zhang in
bpo-27177(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=433028

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24454

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27177


File: python.info,  Node: readline,  Next: rlcompleter,  Prev: re<5>,  Up: Módulos melhorados<8>

1.8.5.34 readline
.................

Added *note set_auto_history(): cea. to enable or disable automatic
addition of input to the history list.  (Contributed by Tyler Crompton
in bpo-26870(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26870


File: python.info,  Node: rlcompleter,  Next: shlex<2>,  Prev: readline,  Up: Módulos melhorados<8>

1.8.5.35 rlcompleter
....................

Private and special attribute names now are omitted unless the prefix
starts with underscores.  A space or a colon is added after some
completed keywords.  (Contributed by Serhiy Storchaka in bpo-25011(1)
and bpo-25209(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25011

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25209


File: python.info,  Node: shlex<2>,  Next: site<3>,  Prev: rlcompleter,  Up: Módulos melhorados<8>

1.8.5.36 shlex
..............

The *note shlex: ced. has much *note improved shell compatibility: cee.
through the new 'punctuation_chars' argument to control which characters
are treated as punctuation.  (Contributed by Vinay Sajip in
bpo-1521950(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1521950


File: python.info,  Node: site<3>,  Next: sqlite3<7>,  Prev: shlex<2>,  Up: Módulos melhorados<8>

1.8.5.37 site
.............

When specifying paths to add to *note sys.path: 3b4. in a ‘.pth’ file,
you may now specify file paths on top of directories (e.g.  zip files).
(Contributed by Wolfgang Langner in bpo-26587(1)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26587


File: python.info,  Node: sqlite3<7>,  Next: socket<7>,  Prev: site<3>,  Up: Módulos melhorados<8>

1.8.5.38 sqlite3
................

*note sqlite3.Cursor.lastrowid: cf1. now supports the ‘REPLACE’
statement.  (Contributed by Alex LordThorsen in bpo-16864(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16864


File: python.info,  Node: socket<7>,  Next: socketserver<2>,  Prev: sqlite3<7>,  Up: Módulos melhorados<8>

1.8.5.39 socket
...............

The *note ioctl(): cf3. function now supports the *note
SIO_LOOPBACK_FAST_PATH: cf4. control code.  (Contributed by Daniel
Stokes in bpo-26536(1).)

The *note getsockopt(): cf5. constants ‘SO_DOMAIN’, ‘SO_PROTOCOL’,
‘SO_PEERSEC’, and ‘SO_PASSSEC’ are now supported.  (Contributed by
Christian Heimes in bpo-26907(2).)

The *note setsockopt(): cf6. now supports the ‘setsockopt(level,
optname, None, optlen: int)’ form.  (Contributed by Christian Heimes in
bpo-27744(3).)

The socket module now supports the address family *note AF_ALG: cf7. to
interface with Linux Kernel crypto API. ‘ALG_*’, ‘SOL_ALG’ and *note
sendmsg_afalg(): cf8. were added.  (Contributed by Christian Heimes in
bpo-27744(4) with support from Victor Stinner.)

New Linux constants ‘TCP_USER_TIMEOUT’ and ‘TCP_CONGESTION’ were added.
(Contributed by Omar Sandoval, bpo-26273(5)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26536

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26907

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27744

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27744

   (5) https://bugs.python.org/issue?@action=redirect&bpo=26273


File: python.info,  Node: socketserver<2>,  Next: ssl<7>,  Prev: socket<7>,  Up: Módulos melhorados<8>

1.8.5.40 socketserver
.....................

Servers based on the *note socketserver: cd. module, including those
defined in *note http.server: 72, *note xmlrpc.server: 12f. and *note
wsgiref.simple_server: 11b, now support the *note context manager: 5d4.
protocol.  (Contributed by Aviv Palivoda in bpo-26404(1).)

The *note wfile: cfa. attribute of *note StreamRequestHandler: cfb.
classes now implements the *note io.BufferedIOBase: 694. writable
interface.  In particular, calling *note write(): cfc. is now guaranteed
to send the data in full.  (Contributed by Martin Panter in
bpo-26721(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26404

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26721


File: python.info,  Node: ssl<7>,  Next: statistics<5>,  Prev: socketserver<2>,  Up: Módulos melhorados<8>

1.8.5.41 ssl
............

*note ssl: d0. supports OpenSSL 1.1.0.  The minimum recommend version is
1.0.2.  (Contributed by Christian Heimes in bpo-26470(1).)

3DES has been removed from the default cipher suites and ChaCha20
Poly1305 cipher suites have been added.  (Contributed by Christian
Heimes in bpo-27850(2) and bpo-27766(3).)

*note SSLContext: 294. has better default configuration for options and
ciphers.  (Contributed by Christian Heimes in bpo-28043(4).)

SSL session can be copied from one client-side connection to another
with the new *note SSLSession: cfe. class.  TLS session resumption can
speed up the initial handshake, reduce latency and improve performance
(Contributed by Christian Heimes in bpo-19500(5) based on a draft by
Alex Warhawk.)

The new *note get_ciphers(): cff. method can be used to get a list of
enabled ciphers in order of cipher priority.

All constants and flags have been converted to *note IntEnum: d00. and
*note IntFlag: cbb.  (Contributed by Christian Heimes in bpo-28025(6).)

Server and client-side specific TLS protocols for *note SSLContext: 294.
were added.  (Contributed by Christian Heimes in bpo-28085(7).)

Added *note ssl.SSLContext.post_handshake_auth: a3b. to enable and *note
ssl.SSLSocket.verify_client_post_handshake(): a3c. to initiate TLS 1.3
post-handshake authentication.  (Contributed by Christian Heimes in
gh-78851(8).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26470

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27850

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27766

   (4) https://bugs.python.org/issue?@action=redirect&bpo=28043

   (5) https://bugs.python.org/issue?@action=redirect&bpo=19500

   (6) https://bugs.python.org/issue?@action=redirect&bpo=28025

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28085

   (8) https://github.com/python/cpython/issues/78851


File: python.info,  Node: statistics<5>,  Next: struct,  Prev: ssl<7>,  Up: Módulos melhorados<8>

1.8.5.42 statistics
...................

A new *note harmonic_mean(): d02. function has been added.  (Contributed
by Steven D’Aprano in bpo-27181(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27181


File: python.info,  Node: struct,  Next: subprocess<3>,  Prev: statistics<5>,  Up: Módulos melhorados<8>

1.8.5.43 struct
...............

*note struct: d5. now supports IEEE 754 half-precision floats via the
‘'e'’ format specifier.  (Contributed by Eli Stevens, Mark Dickinson in
bpo-11734(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=11734


File: python.info,  Node: subprocess<3>,  Next: sys<10>,  Prev: struct,  Up: Módulos melhorados<8>

1.8.5.44 subprocess
...................

*note subprocess.Popen: 199. destructor now emits a *note
ResourceWarning: 244. warning if the child process is still running.
Use the context manager protocol (‘with proc: ...’) or explicitly call
the *note wait(): d05. method to read the exit status of the child
process.  (Contributed by Victor Stinner in bpo-26741(1).)

The *note subprocess.Popen: 199. constructor and all functions that pass
arguments through to it now accept 'encoding' and 'errors' arguments.
Specifying either of these will enable text mode for the 'stdin',
'stdout' and 'stderr' streams.  (Contributed by Steve Dower in
bpo-6135(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26741

   (2) https://bugs.python.org/issue?@action=redirect&bpo=6135


File: python.info,  Node: sys<10>,  Next: telnetlib,  Prev: subprocess<3>,  Up: Módulos melhorados<8>

1.8.5.45 sys
............

The new *note getfilesystemencodeerrors(): d07. function returns the
name of the error mode used to convert between Unicode filenames and
bytes filenames.  (Contributed by Steve Dower in bpo-27781(1).)

On Windows the return value of the *note getwindowsversion(): d08.
function now includes the 'platform_version' field which contains the
accurate major version, minor version and build number of the current
operating system, rather than the version that is being emulated for the
process (Contributed by Steve Dower in bpo-27932(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27781

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27932


File: python.info,  Node: telnetlib,  Next: time<6>,  Prev: sys<10>,  Up: Módulos melhorados<8>

1.8.5.46 telnetlib
..................

‘telnetlib.Telnet’ is now a context manager (contributed by Stéphane
Wirtel in bpo-25485(1)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25485


File: python.info,  Node: time<6>,  Next: timeit,  Prev: telnetlib,  Up: Módulos melhorados<8>

1.8.5.47 time
.............

The *note struct_time: d0b. attributes ‘tm_gmtoff’ and ‘tm_zone’ are now
available on all platforms.


File: python.info,  Node: timeit,  Next: tkinter<6>,  Prev: time<6>,  Up: Módulos melhorados<8>

1.8.5.48 timeit
...............

The new *note Timer.autorange(): d0d. convenience method has been added
to call *note Timer.timeit(): d0e. repeatedly so that the total run time
is greater or equal to 200 milliseconds.  (Contributed by Steven
D’Aprano in bpo-6422(1).)

*note timeit: ef. now warns when there is substantial (4x) variance
between best and worst times.  (Contributed by Serhiy Storchaka in
bpo-23552(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=6422

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23552


File: python.info,  Node: tkinter<6>,  Next: traceback<4>,  Prev: timeit,  Up: Módulos melhorados<8>

1.8.5.49 tkinter
................

Added methods ‘Variable.trace_add()’, ‘Variable.trace_remove()’ and
‘trace_info()’ in the ‘tkinter.Variable’ class.  They replace old
methods ‘trace_variable()’, ‘trace()’, ‘trace_vdelete()’ and
‘trace_vinfo()’ that use obsolete Tcl commands and might not work in
future versions of Tcl.  (Contributed by Serhiy Storchaka in
bpo-22115(1)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22115


File: python.info,  Node: traceback<4>,  Next: tracemalloc<3>,  Prev: tkinter<6>,  Up: Módulos melhorados<8>

1.8.5.50 traceback
..................

Both the traceback module and the interpreter’s builtin exception
display now abbreviate long sequences of repeated lines in tracebacks as
shown in the following example:

     >>> def f(): f()
     ...
     >>> f()
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
       File "<stdin>", line 1, in f
       File "<stdin>", line 1, in f
       File "<stdin>", line 1, in f
       [Previous line repeated 995 more times]
     RecursionError: maximum recursion depth exceeded

(Contributed by Emanuel Barry in bpo-26823(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26823


File: python.info,  Node: tracemalloc<3>,  Next: typing<9>,  Prev: traceback<4>,  Up: Módulos melhorados<8>

1.8.5.51 tracemalloc
....................

The *note tracemalloc: ff. module now supports tracing memory
allocations in multiple different address spaces.

The new *note DomainFilter: d12. filter class has been added to filter
block traces by their address space (domain).

(Contributed by Victor Stinner in bpo-26588(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26588


File: python.info,  Node: typing<9>,  Next: unicodedata<7>,  Prev: tracemalloc<3>,  Up: Módulos melhorados<8>

1.8.5.52 typing
...............

Since the *note typing: 104. module is *note provisional: b16, all
changes introduced in Python 3.6 have also been backported to Python
3.5.x.

The *note typing: 104. module has a much improved support for generic
type aliases.  For example ‘Dict[str, Tuple[S, T]]’ is now a valid type
annotation.  (Contributed by Guido van Rossum in Github #195(1).)

The *note typing.ContextManager: cac. class has been added for
representing *note contextlib.AbstractContextManager: cab.  (Contributed
by Brett Cannon in bpo-25609(2).)

The *note typing.Collection: d14. class has been added for representing
*note collections.abc.Collection: ca5.  (Contributed by Ivan Levkivskyi
in bpo-27598(3).)

The *note typing.ClassVar: 266. type construct has been added to mark
class variables.  As introduced in PEP 526(4), a variable annotation
wrapped in ClassVar indicates that a given attribute is intended to be
used as a class variable and should not be set on instances of that
class.  (Contributed by Ivan Levkivskyi in Github #280(5).)

A new *note TYPE_CHECKING: d15. constant that is assumed to be ‘True’ by
the static type checkers, but is ‘False’ at runtime.  (Contributed by
Guido van Rossum in Github #230(6).)

A new *note NewType(): d16. helper function has been added to create
lightweight distinct types for annotations:

     from typing import NewType

     UserId = NewType('UserId', int)
     some_id = UserId(524313)

The static type checker will treat the new type as if it were a subclass
of the original type.  (Contributed by Ivan Levkivskyi in Github
#189(7).)

   ---------- Footnotes ----------

   (1) https://github.com/python/typing/pull/195

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25609

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27598

   (4) https://peps.python.org/pep-0526/

   (5) https://github.com/python/typing/pull/280

   (6) https://github.com/python/typing/issues/230

   (7) https://github.com/python/typing/issues/189


File: python.info,  Node: unicodedata<7>,  Next: unittest mock<2>,  Prev: typing<9>,  Up: Módulos melhorados<8>

1.8.5.53 unicodedata
....................

The *note unicodedata: 105. module now uses data from Unicode 9.0.0(1).
(Contributed by Benjamin Peterson.)

   ---------- Footnotes ----------

   (1) https://unicode.org/versions/Unicode9.0.0/


File: python.info,  Node: unittest mock<2>,  Next: urllib request,  Prev: unicodedata<7>,  Up: Módulos melhorados<8>

1.8.5.54 unittest.mock
......................

The *note Mock: a54. class has the following improvements:

   * Two new methods, *note Mock.assert_called(): d19. and *note
     Mock.assert_called_once(): d1a. to check if the mock object was
     called.  (Contributed by Amit Saha in bpo-26323(1).)

   * The *note Mock.reset_mock(): d1b. method now has two optional
     keyword only arguments: 'return_value' and 'side_effect'.
     (Contributed by Kushal Das in bpo-21271(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26323

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21271


File: python.info,  Node: urllib request,  Next: urllib robotparser,  Prev: unittest mock<2>,  Up: Módulos melhorados<8>

1.8.5.55 urllib.request
.......................

If a HTTP request has a file or iterable body (other than a bytes
object) but no ‘Content-Length’ header, rather than throwing an error,
*note AbstractHTTPHandler: d1d. now falls back to use chunked transfer
encoding.  (Contributed by Demian Brecht and Rolf Krahl in
bpo-12319(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=12319


File: python.info,  Node: urllib robotparser,  Next: venv<5>,  Prev: urllib request,  Up: Módulos melhorados<8>

1.8.5.56 urllib.robotparser
...........................

*note RobotFileParser: d1f. now supports the ‘Crawl-delay’ and
‘Request-rate’ extensions.  (Contributed by Nikolay Bogoychev in
bpo-16099(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16099


File: python.info,  Node: venv<5>,  Next: avisos<4>,  Prev: urllib robotparser,  Up: Módulos melhorados<8>

1.8.5.57 venv
.............

*note venv: 111. accepts a new parameter ‘--prompt’.  This parameter
provides an alternative prefix for the virtual environment.  (Proposed
by Łukasz Balcerzak and ported to 3.6 by Stéphane Wirtel in
bpo-22829(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22829


File: python.info,  Node: avisos<4>,  Next: winreg,  Prev: venv<5>,  Up: Módulos melhorados<8>

1.8.5.58 avisos
...............

A new optional 'source' parameter has been added to the *note
warnings.warn_explicit(): d22. function: the destroyed object which
emitted a *note ResourceWarning: 244.  A 'source' attribute has also
been added to ‘warnings.WarningMessage’ (contributed by Victor Stinner
in bpo-26568(1) and bpo-26567(2)).

When a *note ResourceWarning: 244. warning is logged, the *note
tracemalloc: ff. module is now used to try to retrieve the traceback
where the destroyed object was allocated.

Example with the script ‘example.py’:

     import warnings

     def func():
         return open(__file__)

     f = func()
     f = None

Output of the command ‘python3.6 -Wd -X tracemalloc=5 example.py’:

     example.py:7: ResourceWarning: unclosed file <_io.TextIOWrapper name='example.py' mode='r' encoding='UTF-8'>
       f = None
     Object allocated at (most recent call first):
       File "example.py", lineno 4
         return open(__file__)
       File "example.py", lineno 6
         f = func()

The “Object allocated at” traceback is new and is only displayed if
*note tracemalloc: ff. is tracing Python memory allocations and if the
*note warnings: 112. module was already imported.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26568

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26567


File: python.info,  Node: winreg,  Next: winsound,  Prev: avisos<4>,  Up: Módulos melhorados<8>

1.8.5.59 winreg
...............

Added the 64-bit integer type *note REG_QWORD: d24.  (Contributed by
Clement Rouault in bpo-23026(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23026


File: python.info,  Node: winsound,  Next: xmlrpc client,  Prev: winreg,  Up: Módulos melhorados<8>

1.8.5.60 winsound
.................

Allowed keyword arguments to be passed to *note Beep: d26, *note
MessageBeep: d27, and *note PlaySound: d28. (bpo-27982(1)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27982


File: python.info,  Node: xmlrpc client,  Next: zipfile<3>,  Prev: winsound,  Up: Módulos melhorados<8>

1.8.5.61 xmlrpc.client
......................

The *note xmlrpc.client: 12e. module now supports unmarshalling
additional data types used by the Apache XML-RPC implementation for
numerics and ‘None’.  (Contributed by Serhiy Storchaka in bpo-26885(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26885


File: python.info,  Node: zipfile<3>,  Next: zlib,  Prev: xmlrpc client,  Up: Módulos melhorados<8>

1.8.5.62 zipfile
................

A new *note ZipInfo.from_file(): d2b. class method allows making a *note
ZipInfo: d2c. instance from a filesystem file.  A new *note
ZipInfo.is_dir(): d2d. method can be used to check if the *note ZipInfo:
d2c. instance represents a directory.  (Contributed by Thomas Kluyver in
bpo-26039(1).)

The *note ZipFile.open(): 41b. method can now be used to write data into
a ZIP file, as well as for extracting data.  (Contributed by Thomas
Kluyver in bpo-26039(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26039

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26039


File: python.info,  Node: zlib,  Prev: zipfile<3>,  Up: Módulos melhorados<8>

1.8.5.63 zlib
.............

The *note compress(): 63f. and *note decompress(): d2f. functions now
accept keyword arguments.  (Contributed by Aviv Palivoda in bpo-26243(1)
and Xiang Zhang in bpo-16764(2) respectively.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26243

   (2) https://bugs.python.org/issue?@action=redirect&bpo=16764


File: python.info,  Node: Otimizações<8>,  Next: Mudanças a construções e API C<2>,  Prev: Módulos melhorados<8>,  Up: What’s New In Python 3 6

1.8.6 Otimizações
-----------------

   * The Python interpreter now uses a 16-bit wordcode instead of
     bytecode which made a number of opcode optimizations possible.
     (Contributed by Demur Rumed with input and reviews from Serhiy
     Storchaka and Victor Stinner in bpo-26647(1) and bpo-28050(2).)

   * The *note asyncio.Future: be6. class now has an optimized C
     implementation.  (Contributed by Yury Selivanov and INADA Naoki in
     bpo-26081(3).)

   * The *note asyncio.Task: 1be. class now has an optimized C
     implementation.  (Contributed by Yury Selivanov in bpo-28544(4).)

   * Various implementation improvements in the *note typing: 104.
     module (such as caching of generic types) allow up to 30 times
     performance improvements and reduced memory footprint.

   * The ASCII decoder is now up to 60 times as fast for error handlers
     ‘surrogateescape’, ‘ignore’ and ‘replace’ (Contributed by Victor
     Stinner in bpo-24870(5)).

   * The ASCII and the Latin1 encoders are now up to 3 times as fast for
     the error handler ‘surrogateescape’ (Contributed by Victor Stinner
     in bpo-25227(6)).

   * The UTF-8 encoder is now up to 75 times as fast for error handlers
     ‘ignore’, ‘replace’, ‘surrogateescape’, ‘surrogatepass’
     (Contributed by Victor Stinner in bpo-25267(7)).

   * The UTF-8 decoder is now up to 15 times as fast for error handlers
     ‘ignore’, ‘replace’ and ‘surrogateescape’ (Contributed by Victor
     Stinner in bpo-25301(8)).

   * ‘bytes % args’ is now up to 2 times faster.  (Contributed by Victor
     Stinner in bpo-25349(9)).

   * ‘bytearray % args’ is now between 2.5 and 5 times faster.
     (Contributed by Victor Stinner in bpo-25399(10)).

   * Optimize *note bytes.fromhex(): b02. and *note bytearray.fromhex():
     b03.: they are now between 2x and 3.5x faster.  (Contributed by
     Victor Stinner in bpo-25401(11)).

   * Optimize ‘bytes.replace(b'', b'.')’ and ‘bytearray.replace(b'',
     b'.')’: up to 80% faster.  (Contributed by Josh Snider in
     bpo-26574(12)).

   * Allocator functions of the *note PyMem_Malloc(): c81. domain (*note
     PYMEM_DOMAIN_MEM: c84.) now use the *note pymalloc memory
     allocator: d31. instead of ‘malloc()’ function of the C library.
     The pymalloc allocator is optimized for objects smaller or equal to
     512 bytes with a short lifetime, and use ‘malloc()’ for larger
     memory blocks.  (Contributed by Victor Stinner in bpo-26249(13)).

   * *note pickle.load(): d32. and *note pickle.loads(): d33. are now up
     to 10% faster when deserializing many small objects (Contributed by
     Victor Stinner in bpo-27056(14)).

   * Passing *note keyword arguments: d34. to a function has an overhead
     in comparison with passing *note positional arguments: d35.  Now in
     extension functions implemented with using Argument Clinic this
     overhead is significantly decreased.  (Contributed by Serhiy
     Storchaka in bpo-27574(15)).

   * Optimized *note glob(): 29f. and *note iglob(): 80a. functions in
     the *note glob: 64. module; they are now about 3–6 times faster.
     (Contributed by Serhiy Storchaka in bpo-25596(16)).

   * Optimized globbing in *note pathlib: a4. by using *note
     os.scandir(): a68.; it is now about 1.5–4 times faster.
     (Contributed by Serhiy Storchaka in bpo-26032(17)).

   * *note xml.etree.ElementTree: 125. parsing, iteration and deepcopy
     performance has been significantly improved.  (Contributed by
     Serhiy Storchaka in bpo-25638(18), bpo-25873(19), and
     bpo-25869(20).)

   * Creation of *note fractions.Fraction: 1e7. instances from floats
     and decimals is now 2 to 3 times faster.  (Contributed by Serhiy
     Storchaka in bpo-25971(21).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26647

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28050

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26081

   (4) https://bugs.python.org/issue?@action=redirect&bpo=28544

   (5) https://bugs.python.org/issue?@action=redirect&bpo=24870

   (6) https://bugs.python.org/issue?@action=redirect&bpo=25227

   (7) https://bugs.python.org/issue?@action=redirect&bpo=25267

   (8) https://bugs.python.org/issue?@action=redirect&bpo=25301

   (9) https://bugs.python.org/issue?@action=redirect&bpo=25349

   (10) https://bugs.python.org/issue?@action=redirect&bpo=25399

   (11) https://bugs.python.org/issue?@action=redirect&bpo=25401

   (12) https://bugs.python.org/issue?@action=redirect&bpo=26574

   (13) https://bugs.python.org/issue?@action=redirect&bpo=26249

   (14) https://bugs.python.org/issue?@action=redirect&bpo=27056

   (15) https://bugs.python.org/issue?@action=redirect&bpo=27574

   (16) https://bugs.python.org/issue?@action=redirect&bpo=25596

   (17) https://bugs.python.org/issue?@action=redirect&bpo=26032

   (18) https://bugs.python.org/issue?@action=redirect&bpo=25638

   (19) https://bugs.python.org/issue?@action=redirect&bpo=25873

   (20) https://bugs.python.org/issue?@action=redirect&bpo=25869

   (21) https://bugs.python.org/issue?@action=redirect&bpo=25971


File: python.info,  Node: Mudanças a construções e API C<2>,  Next: Other Improvements,  Prev: Otimizações<8>,  Up: What’s New In Python 3 6

1.8.7 Mudanças a construções e API C
------------------------------------

   * Python now requires some C99 support in the toolchain to build.
     Most notably, Python now uses standard integer types and macros in
     place of custom macros like ‘PY_LONG_LONG’.  For more information,
     see PEP 7(1) and bpo-17884(2).

   * Cross-compiling CPython with the Android NDK and the Android API
     level set to 21 (Android 5.0 Lollipop) or greater runs
     successfully.  While Android is not yet a supported platform, the
     Python test suite runs on the Android emulator with only about 16
     tests failures.  See the Android meta-issue bpo-26865(3).

   * The ‘--enable-optimizations’ configure flag has been added.
     Turning it on will activate expensive optimizations like PGO.
     (Original patch by Alecsandru Patrascu of Intel in bpo-26359(4).)

   * The *note GIL: 148. must now be held when allocator functions of
     *note PYMEM_DOMAIN_OBJ: c82. (ex: *note PyObject_Malloc(): c83.)
     and *note PYMEM_DOMAIN_MEM: c84. (ex: *note PyMem_Malloc(): c81.)
     domains are called.

   * New *note Py_FinalizeEx(): d37. API which indicates if flushing
     buffered data failed.  (Contributed by Martin Panter in
     bpo-5319(5).)

   * *note PyArg_ParseTupleAndKeywords(): 383. now supports *note
     positional-only parameters: a8f.  Positional-only parameters are
     defined by empty names.  (Contributed by Serhiy Storchaka in
     bpo-26282(6)).

   * ‘PyTraceback_Print’ method now abbreviates long sequences of
     repeated lines as ‘"[Previous line repeated {count} more times]"’.
     (Contributed by Emanuel Barry in bpo-26823(7).)

   * The new *note PyErr_SetImportErrorSubclass(): d38. function allows
     for specifying a subclass of *note ImportError: 419. to raise.
     (Contributed by Eric Snow in bpo-15767(8).)

   * The new *note PyErr_ResourceWarning(): d39. function can be used to
     generate a *note ResourceWarning: 244. providing the source of the
     resource allocation.  (Contributed by Victor Stinner in
     bpo-26567(9).)

   * The new *note PyOS_FSPath(): d3a. function returns the file system
     representation of a *note path-like object: 2a0.  (Contributed by
     Brett Cannon in bpo-27186(10).)

   * The *note PyUnicode_FSConverter(): d3b. and *note
     PyUnicode_FSDecoder(): 577. functions will now accept *note
     path-like objects: 2a0.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0007/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17884

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26865

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26359

   (5) https://bugs.python.org/issue?@action=redirect&bpo=5319

   (6) https://bugs.python.org/issue?@action=redirect&bpo=26282

   (7) https://bugs.python.org/issue?@action=redirect&bpo=26823

   (8) https://bugs.python.org/issue?@action=redirect&bpo=15767

   (9) https://bugs.python.org/issue?@action=redirect&bpo=26567

   (10) https://bugs.python.org/issue?@action=redirect&bpo=27186


File: python.info,  Node: Other Improvements,  Next: Descontinuados<9>,  Prev: Mudanças a construções e API C<2>,  Up: What’s New In Python 3 6

1.8.8 Other Improvements
------------------------

   * When *note -version: d3d. (short form: *note -V: 177.) is supplied
     twice, Python prints *note sys.version: 178. for detailed
     information.

          $ ./python -VV
          Python 3.6.0b4+ (3.6:223967b49e49+, Nov 21 2016, 20:55:04)
          [GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)]


File: python.info,  Node: Descontinuados<9>,  Next: Removidos<9>,  Prev: Other Improvements,  Up: What’s New In Python 3 6

1.8.9 Descontinuados
--------------------

* Menu:

* New Keywords::
* Deprecated Python behavior::
* Deprecated Python modules, functions and methods: Deprecated Python modules functions and methods<2>.
* xml: xml<6>.
* Deprecated functions and types of the C API: Deprecated functions and types of the C API<2>.
* Deprecated Build Options::


File: python.info,  Node: New Keywords,  Next: Deprecated Python behavior,  Up: Descontinuados<9>

1.8.9.1 New Keywords
....................

‘async’ and ‘await’ are not recommended to be used as variable, class,
function or module names.  Introduced by PEP 492(1) in Python 3.5, they
will become proper keywords in Python 3.7.  Starting in Python 3.6, the
use of ‘async’ or ‘await’ as names will generate a *note
DeprecationWarning: 1a5.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0492/


File: python.info,  Node: Deprecated Python behavior,  Next: Deprecated Python modules functions and methods<2>,  Prev: New Keywords,  Up: Descontinuados<9>

1.8.9.2 Deprecated Python behavior
..................................

Raising the *note StopIteration: c15. exception inside a generator will
now generate a *note DeprecationWarning: 1a5, and will trigger a *note
RuntimeError: 195. in Python 3.7.  See *note PEP 479; Change
StopIteration handling inside generators: d41. for details.

The *note __aiter__(): c16. method is now expected to return an
asynchronous iterator directly instead of returning an awaitable as
previously.  Doing the former will trigger a *note DeprecationWarning:
1a5.  Backward compatibility will be removed in Python 3.7.
(Contributed by Yury Selivanov in bpo-27243(1).)

A backslash-character pair that is not a valid escape sequence now
generates a *note DeprecationWarning: 1a5.  Although this will
eventually become a *note SyntaxError: 18d, that will not be for several
Python releases.  (Contributed by Emanuel Barry in bpo-27364(2).)

When performing a relative import, falling back on ‘__name__’ and
‘__path__’ from the calling module when ‘__spec__’ or ‘__package__’ are
not defined now raises an *note ImportWarning: 4fa.  (Contributed by
Rose Ames in bpo-25791(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27243

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27364

   (3) https://bugs.python.org/issue?@action=redirect&bpo=25791


File: python.info,  Node: Deprecated Python modules functions and methods<2>,  Next: xml<6>,  Prev: Deprecated Python behavior,  Up: Descontinuados<9>

1.8.9.3 Deprecated Python modules, functions and methods
........................................................

* Menu:

* asynchat::
* asyncore::
* dbm: dbm<4>.
* distutils: distutils<6>.
* grp::
* importlib: importlib<7>.
* os: os<9>.
* re: re<6>.
* ssl: ssl<8>.
* tkinter: tkinter<7>.
* venv: venv<6>.


File: python.info,  Node: asynchat,  Next: asyncore,  Up: Deprecated Python modules functions and methods<2>

1.8.9.4 asynchat
................

The ‘asynchat’ has been deprecated in favor of *note asyncio: a.
(Contributed by Mariatta in bpo-25002(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25002


File: python.info,  Node: asyncore,  Next: dbm<4>,  Prev: asynchat,  Up: Deprecated Python modules functions and methods<2>

1.8.9.5 asyncore
................

The ‘asyncore’ has been deprecated in favor of *note asyncio: a.
(Contributed by Mariatta in bpo-25002(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25002


File: python.info,  Node: dbm<4>,  Next: distutils<6>,  Prev: asyncore,  Up: Deprecated Python modules functions and methods<2>

1.8.9.6 dbm
...........

Unlike other *note dbm: 31. implementations, the *note dbm.dumb: 32.
module creates databases with the ‘'rw'’ mode and allows modifying the
database opened with the ‘'r'’ mode.  This behavior is now deprecated
and will be removed in 3.8.  (Contributed by Serhiy Storchaka in
bpo-21708(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21708


File: python.info,  Node: distutils<6>,  Next: grp,  Prev: dbm<4>,  Up: Deprecated Python modules functions and methods<2>

1.8.9.7 distutils
.................

The undocumented ‘extra_path’ argument to the ‘distutils.Distribution’
constructor is now considered deprecated and will raise a warning if
set.  Support for this parameter will be removed in a future Python
release.  See bpo-27919(1) for details.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27919


File: python.info,  Node: grp,  Next: importlib<7>,  Prev: distutils<6>,  Up: Deprecated Python modules functions and methods<2>

1.8.9.8 grp
...........

The support of non-integer arguments in *note getgrgid(): d48. has been
deprecated.  (Contributed by Serhiy Storchaka in bpo-26129(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26129


File: python.info,  Node: importlib<7>,  Next: os<9>,  Prev: grp,  Up: Deprecated Python modules functions and methods<2>

1.8.9.9 importlib
.................

The *note importlib.machinery.SourceFileLoader.load_module(): d4a. and
*note importlib.machinery.SourcelessFileLoader.load_module(): d4b.
methods are now deprecated.  They were the only remaining
implementations of *note importlib.abc.Loader.load_module(): 86d. in
*note importlib: 77. that had not been deprecated in previous versions
of Python in favour of *note importlib.abc.Loader.exec_module(): 86e.

The *note importlib.machinery.WindowsRegistryFinder: d4c. class is now
deprecated.  As of 3.6.0, it is still added to *note sys.meta_path: d4d.
by default (on Windows), but this may change in future releases.


File: python.info,  Node: os<9>,  Next: re<6>,  Prev: importlib<7>,  Up: Deprecated Python modules functions and methods<2>

1.8.9.10 os
...........

Undocumented support of general *note bytes-like objects: d4f. as paths
in *note os: a1. functions, *note compile(): 192. and similar functions
is now deprecated.  (Contributed by Serhiy Storchaka in bpo-25791(1) and
bpo-26754(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25791

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26754


File: python.info,  Node: re<6>,  Next: ssl<8>,  Prev: os<9>,  Up: Deprecated Python modules functions and methods<2>

1.8.9.11 re
...........

Support for inline flags ‘(?letters)’ in the middle of the regular
expression has been deprecated and will be removed in a future Python
version.  Flags at the start of a regular expression are still allowed.
(Contributed by Serhiy Storchaka in bpo-22493(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22493


File: python.info,  Node: ssl<8>,  Next: tkinter<7>,  Prev: re<6>,  Up: Deprecated Python modules functions and methods<2>

1.8.9.12 ssl
............

OpenSSL 0.9.8, 1.0.0 and 1.0.1 are deprecated and no longer supported.
In the future the *note ssl: d0. module will require at least OpenSSL
1.0.2 or 1.1.0.

SSL-related arguments like ‘certfile’, ‘keyfile’ and ‘check_hostname’ in
*note ftplib: 5e, *note http.client: 6f, *note imaplib: 74, *note
poplib: ac, and *note smtplib: ca. have been deprecated in favor of
‘context’.  (Contributed by Christian Heimes in bpo-28022(1).)

A couple of protocols and functions of the *note ssl: d0. module are now
deprecated.  Some features will no longer be available in future
versions of OpenSSL. Other features are deprecated in favor of a
different API. (Contributed by Christian Heimes in bpo-28022(2) and
bpo-26470(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28022

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28022

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26470


File: python.info,  Node: tkinter<7>,  Next: venv<6>,  Prev: ssl<8>,  Up: Deprecated Python modules functions and methods<2>

1.8.9.13 tkinter
................

The ‘tkinter.tix’ module is now deprecated.  *note tkinter: f0. users
should use *note tkinter.ttk: f9. instead.


File: python.info,  Node: venv<6>,  Prev: tkinter<7>,  Up: Deprecated Python modules functions and methods<2>

1.8.9.14 venv
.............

The ‘pyvenv’ script has been deprecated in favour of ‘python3 -m venv’.
This prevents confusion as to what Python interpreter ‘pyvenv’ is
connected to and thus what Python interpreter will be used by the
virtual environment.  (Contributed by Brett Cannon in bpo-25154(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25154


File: python.info,  Node: xml<6>,  Next: Deprecated functions and types of the C API<2>,  Prev: Deprecated Python modules functions and methods<2>,  Up: Descontinuados<9>

1.8.9.15 xml
............

   * As mitigation against DTD and external entity retrieval, the *note
     xml.dom.minidom: 122. and *note xml.sax: 129. modules no longer
     process external entities by default.  (Contributed by Christian
     Heimes in gh-61441(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/61441


File: python.info,  Node: Deprecated functions and types of the C API<2>,  Next: Deprecated Build Options,  Prev: xml<6>,  Up: Descontinuados<9>

1.8.9.16 Deprecated functions and types of the C API
....................................................

Undocumented functions ‘PyUnicode_AsEncodedObject()’,
‘PyUnicode_AsDecodedObject()’, ‘PyUnicode_AsEncodedUnicode()’ and
‘PyUnicode_AsDecodedUnicode()’ are deprecated now.  Use the *note
generic codec based API: d57. instead.


File: python.info,  Node: Deprecated Build Options,  Prev: Deprecated functions and types of the C API<2>,  Up: Descontinuados<9>

1.8.9.17 Deprecated Build Options
.................................

The ‘--with-system-ffi’ configure flag is now on by default on non-macOS
UNIX platforms.  It may be disabled by using ‘--without-system-ffi’, but
using the flag is deprecated and will not be accepted in Python 3.7.
macOS is unaffected by this change.  Note that many OS distributors
already use the ‘--with-system-ffi’ flag when building their system
Python.


File: python.info,  Node: Removidos<9>,  Next: Porting to Python 3 6,  Prev: Descontinuados<9>,  Up: What’s New In Python 3 6

1.8.10 Removidos
----------------

* Menu:

* Remoção de APIs e recursos: Remoção de APIs e recursos<3>.


File: python.info,  Node: Remoção de APIs e recursos<3>,  Up: Removidos<9>

1.8.10.1 Remoção de APIs e recursos
...................................

   * Unknown escapes consisting of ‘'\'’ and an ASCII letter in regular
     expressions will now cause an error.  In replacement templates for
     *note re.sub(): 2a3. they are still allowed, but deprecated.  The
     *note re.LOCALE: b82. flag can now only be used with binary
     patterns.

   * ‘inspect.getmoduleinfo()’ was removed (was deprecated since CPython
     3.3).  *note inspect.getmodulename(): d5b. should be used for
     obtaining the module name for a given path.  (Contributed by Yury
     Selivanov in bpo-13248(1).)

   * ‘traceback.Ignore’ class and ‘traceback.usage’,
     ‘traceback.modname’, ‘traceback.fullmodname’,
     ‘traceback.find_lines_from_code’, ‘traceback.find_lines’,
     ‘traceback.find_strings’, ‘traceback.find_executable_lines’ methods
     were removed from the *note traceback: fe. module.  They were
     undocumented methods deprecated since Python 3.2 and equivalent
     functionality is available from private methods.

   * The ‘tk_menuBar()’ and ‘tk_bindForTraversal()’ dummy methods in
     *note tkinter: f0. widget classes were removed (corresponding Tk
     commands were obsolete since Tk 4.0).

   * The *note open(): 41b. method of the *note zipfile.ZipFile: 6c4.
     class no longer supports the ‘'U'’ mode (was deprecated since
     Python 3.4).  Use *note io.TextIOWrapper: 7bc. for reading
     compressed text files in *note universal newlines: d5c. mode.

   * The undocumented ‘IN’, ‘CDROM’, ‘DLFCN’, ‘TYPES’, ‘CDIO’, and
     ‘STROPTS’ modules have been removed.  They had been available in
     the platform specific ‘Lib/plat-*/’ directories, but were
     chronically out of date, inconsistently available across platforms,
     and unmaintained.  The script that created these modules is still
     available in the source distribution at Tools/scripts/h2py.py(2).

   * The deprecated ‘asynchat.fifo’ class has been removed.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13248

   (2) 
https://github.com/python/cpython/blob/v3.6.15/Tools/scripts/h2py.py


File: python.info,  Node: Porting to Python 3 6,  Next: Notable changes in Python 3 6 2,  Prev: Removidos<9>,  Up: What’s New In Python 3 6

1.8.11 Porting to Python 3.6
----------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções que podem exigir alterações no seu código.

* Menu:

* Changes in ‘python’ Command Behavior::
* Alterações na API Python: Alterações na API Python<8>.
* Alterações na API C: Alterações na API C<13>.
* Alterações de bytecode do CPython: Alterações de bytecode do CPython<8>.


File: python.info,  Node: Changes in ‘python’ Command Behavior,  Next: Alterações na API Python<8>,  Up: Porting to Python 3 6

1.8.11.1 Changes in ‘python’ Command Behavior
.............................................

   * The output of a special Python build with defined ‘COUNT_ALLOCS’,
     ‘SHOW_ALLOC_COUNT’ or ‘SHOW_TRACK_COUNT’ macros is now off by
     default.  It can be re-enabled using the ‘-X showalloccount’
     option.  It now outputs to ‘stderr’ instead of ‘stdout’.
     (Contributed by Serhiy Storchaka in bpo-23034(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23034


File: python.info,  Node: Alterações na API Python<8>,  Next: Alterações na API C<13>,  Prev: Changes in ‘python’ Command Behavior,  Up: Porting to Python 3 6

1.8.11.2 Alterações na API Python
.................................

   * *note open(): 51c. will no longer allow combining the ‘'U'’ mode
     flag with ‘'+'’.  (Contributed by Jeff Balogh and John O’Connor in
     bpo-2091(1).)

   * *note sqlite3: cf. no longer implicitly commits an open transaction
     before DDL statements.

   * On Linux, *note os.urandom(): 523. now blocks until the system
     urandom entropy pool is initialized to increase the security.

   * When *note importlib.abc.Loader.exec_module(): 86e. is defined,
     *note importlib.abc.Loader.create_module(): cce. must also be
     defined.

   * *note PyErr_SetImportError(): d60. now sets *note TypeError: 2c3.
     when its 'msg' argument is not set.  Previously only ‘NULL’ was
     returned.

   * The format of the *note co_lnotab: 2e0. attribute of code objects
     changed to support a negative line number delta.  By default,
     Python does not emit bytecode with a negative line number delta.
     Functions using *note frame.f_lineno: 7ad,
     ‘PyFrame_GetLineNumber()’ or ‘PyCode_Addr2Line()’ are not affected.
     Functions directly decoding ‘co_lnotab’ should be updated to use a
     signed 8-bit integer type for the line number delta, but this is
     only required to support applications using a negative line number
     delta.  See ‘Objects/lnotab_notes.txt’ for the ‘co_lnotab’ format
     and how to decode it, and see the PEP 511(2) for the rationale.

   * The functions in the *note compileall: 20. module now return
     booleans instead of ‘1’ or ‘0’ to represent success or failure,
     respectively.  Thanks to booleans being a subclass of integers,
     this should only be an issue if you were doing identity checks for
     ‘1’ or ‘0’.  See bpo-25768(3).

   * Reading the ‘port’ attribute of *note urllib.parse.urlsplit(): d61.
     and *note urlparse(): 30d. results now raises *note ValueError:
     202. for out-of-range values, rather than returning *note None:
     675.  See bpo-20059(4).

   * The ‘imp’ module now raises a *note DeprecationWarning: 1a5.
     instead of *note PendingDeprecationWarning: 8ce.

   * The following modules have had missing APIs added to their *note
     __all__: d62. attributes to match the documented APIs: *note
     calendar: 14, ‘cgi’, *note csv: 29, *note ElementTree: 125, *note
     enum: 56, *note fileinput: 5b, *note ftplib: 5e, *note logging: 87,
     *note mailbox: 8b, *note mimetypes: 8f, *note optparse: a0, *note
     plistlib: ab, ‘smtpd’, *note subprocess: d6, *note tarfile: de,
     *note threading: ed. and *note wave: 113.  This means they will
     export new symbols when ‘import *’ is used.  (Contributed by Joel
     Taddei and Jacek Kołodziej in bpo-23883(5).)

   * When performing a relative import, if ‘__package__’ does not
     compare equal to ‘__spec__.parent’ then *note ImportWarning: 4fa.
     is raised.  (Contributed by Brett Cannon in bpo-25791(6).)

   * When a relative import is performed and no parent package is known,
     then *note ImportError: 419. will be raised.  Previously, *note
     SystemError: 575. could be raised.  (Contributed by Brett Cannon in
     bpo-18018(7).)

   * Servers based on the *note socketserver: cd. module, including
     those defined in *note http.server: 72, *note xmlrpc.server: 12f.
     and *note wsgiref.simple_server: 11b, now only catch exceptions
     derived from *note Exception: 9e2.  Therefore if a request handler
     raises an exception like *note SystemExit: d63. or *note
     KeyboardInterrupt: 9d9, *note handle_error(): d64. is no longer
     called, and the exception will stop a single-threaded server.
     (Contributed by Martin Panter in bpo-23430(8).)

   * ‘spwd.getspnam()’ now raises a *note PermissionError: d65. instead
     of *note KeyError: 344. if the user doesn’t have privileges.

   * The *note socket.socket.close(): d66. method now raises an
     exception if an error (e.g.  ‘EBADF’) was reported by the
     underlying system call.  (Contributed by Martin Panter in
     bpo-26685(9).)

   * The 'decode_data' argument for the ‘smtpd.SMTPChannel’ and
     ‘smtpd.SMTPServer’ constructors is now ‘False’ by default.  This
     means that the argument passed to ‘process_message()’ is now a
     bytes object by default, and ‘process_message()’ will be passed
     keyword arguments.  Code that has already been updated in
     accordance with the deprecation warning generated by 3.5 will not
     be affected.

   * All optional arguments of the *note dump(): d67, *note dumps():
     d68, *note load(): cd4. and *note loads(): 95c. functions and *note
     JSONEncoder: d69. and *note JSONDecoder: d6a. class constructors in
     the *note json: 82. module are now *note keyword-only: 2a5.
     (Contributed by Serhiy Storchaka in bpo-18726(10).)

   * Subclasses de *note type: d6b. que não substituem ‘type.__new__’
     não podem mais usar a forma com apenas um argumento para obter o
     tipo de um objeto.

   * As part of PEP 487(11), the handling of keyword arguments passed to
     *note type: d6b. (other than the metaclass hint, ‘metaclass’) is
     now consistently delegated to *note object.__init_subclass__():
     631.  This means that *note type.__new__: 580. and *note
     type.__init__: 6b0. both now accept arbitrary keyword arguments,
     but *note object.__init_subclass__(): 631. (which is called from
     *note type.__new__: 580.) will reject them by default.  Custom
     metaclasses accepting additional keyword arguments will need to
     adjust their calls to *note type.__new__: 580. (whether direct or
     via *note super: 4db.) accordingly.

   * In ‘distutils.command.sdist.sdist’, the ‘default_format’ attribute
     has been removed and is no longer honored.  Instead, the gzipped
     tarfile format is the default on all platforms and no
     platform-specific selection is made.  In environments where
     distributions are built on Windows and zip distributions are
     required, configure the project with a ‘setup.cfg’ file containing
     the following:

          [sdist]
          formats=zip

     This behavior has also been backported to earlier Python versions
     by Setuptools 26.0.0.

   * In the *note urllib.request: 10b. module and the *note
     http.client.HTTPConnection.request(): cc9. method, if no
     Content-Length header field has been specified and the request body
     is a file object, it is now sent with HTTP 1.1 chunked encoding.
     If a file object has to be sent to a HTTP 1.0 server, the
     Content-Length value now has to be specified by the caller.
     (Contributed by Demian Brecht and Rolf Krahl with tweaks from
     Martin Panter in bpo-12319(12).)

   * The *note DictReader: 9ed. now returns rows of type *note
     OrderedDict: 5db.  (Contributed by Steve Holden in bpo-27842(13).)

   * The ‘crypt.METHOD_CRYPT’ will no longer be added to ‘crypt.methods’
     if unsupported by the platform.  (Contributed by Victor Stinner in
     bpo-25287(14).)

   * The 'verbose' and 'rename' arguments for *note namedtuple(): 1ca.
     are now keyword-only.  (Contributed by Raymond Hettinger in
     bpo-25628(15).)

   * On Linux, *note ctypes.util.find_library(): d6c. now looks in
     ‘LD_LIBRARY_PATH’ for shared libraries.  (Contributed by Vinay
     Sajip in bpo-9998(16).)

   * The *note imaplib.IMAP4: 909. class now handles flags containing
     the ‘']'’ character in messages sent from the server to improve
     real-world compatibility.  (Contributed by Lita Cho in
     bpo-21815(17).)

   * The *note mmap.mmap.write(): d6d. function now returns the number
     of bytes written like other write methods.  (Contributed by Jakub
     Stasiak in bpo-26335(18).)

   * The *note pkgutil.iter_modules(): d6e. and *note
     pkgutil.walk_packages(): c19. functions now return *note
     ModuleInfo: d6f. named tuples.  (Contributed by Ramchandra Apte in
     bpo-17211(19).)

   * *note re.sub(): 2a3. now raises an error for invalid numerical
     group references in replacement templates even if the pattern is
     not found in the string.  The error message for invalid group
     references now includes the group index and the position of the
     reference.  (Contributed by SilentGhost, Serhiy Storchaka in
     bpo-25953(20).)

   * *note zipfile.ZipFile: 6c4. will now raise *note
     NotImplementedError: 228. for unrecognized compression values.
     Previously a plain *note RuntimeError: 195. was raised.
     Additionally, calling *note ZipFile: 6c4. methods on a closed
     ZipFile or calling the *note write(): d70. method on a ZipFile
     created with mode ‘'r'’ will raise a *note ValueError: 202.
     Previously, a *note RuntimeError: 195. was raised in those
     scenarios.

   * when custom metaclasses are combined with zero-argument *note
     super(): 4db. or direct references from methods to the implicit
     ‘__class__’ closure variable, the implicit ‘__classcell__’
     namespace entry must now be passed up to ‘type.__new__’ for
     initialisation.  Failing to do so will result in a *note
     DeprecationWarning: 1a5. in Python 3.6 and a *note RuntimeError:
     195. in Python 3.8.

   * With the introduction of *note ModuleNotFoundError: b5b, import
     system consumers may start expecting import system replacements to
     raise that more specific exception when appropriate, rather than
     the less-specific *note ImportError: 419.  To provide future
     compatibility with such consumers, implementers of alternative
     import systems that completely replace *note __import__(): 8da.
     will need to update their implementations to raise the new subclass
     when a module can’t be found at all.  Implementers of compliant
     plugins to the default import system shouldn’t need to make any
     changes, as the default import system will raise the new subclass
     when appropriate.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=2091

   (2) https://peps.python.org/pep-0511/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=25768

   (4) https://bugs.python.org/issue?@action=redirect&bpo=20059

   (5) https://bugs.python.org/issue?@action=redirect&bpo=23883

   (6) https://bugs.python.org/issue?@action=redirect&bpo=25791

   (7) https://bugs.python.org/issue?@action=redirect&bpo=18018

   (8) https://bugs.python.org/issue?@action=redirect&bpo=23430

   (9) https://bugs.python.org/issue?@action=redirect&bpo=26685

   (10) https://bugs.python.org/issue?@action=redirect&bpo=18726

   (11) https://peps.python.org/pep-0487/

   (12) https://bugs.python.org/issue?@action=redirect&bpo=12319

   (13) https://bugs.python.org/issue?@action=redirect&bpo=27842

   (14) https://bugs.python.org/issue?@action=redirect&bpo=25287

   (15) https://bugs.python.org/issue?@action=redirect&bpo=25628

   (16) https://bugs.python.org/issue?@action=redirect&bpo=9998

   (17) https://bugs.python.org/issue?@action=redirect&bpo=21815

   (18) https://bugs.python.org/issue?@action=redirect&bpo=26335

   (19) https://bugs.python.org/issue?@action=redirect&bpo=17211

   (20) https://bugs.python.org/issue?@action=redirect&bpo=25953


File: python.info,  Node: Alterações na API C<13>,  Next: Alterações de bytecode do CPython<8>,  Prev: Alterações na API Python<8>,  Up: Porting to Python 3 6

1.8.11.3 Alterações na API C
............................

   * The *note PyMem_Malloc(): c81. allocator family now uses the *note
     pymalloc allocator: d31. rather than the system ‘malloc()’.
     Applications calling *note PyMem_Malloc(): c81. without holding the
     GIL can now crash.  Set the *note PYTHONMALLOC: c7f. environment
     variable to ‘debug’ to validate the usage of memory allocators in
     your application.  See bpo-26249(1).

   * *note Py_Exit(): d72. (and the main interpreter) now override the
     exit status with 120 if flushing buffered data failed.  See
     bpo-5319(2).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26249

   (2) https://bugs.python.org/issue?@action=redirect&bpo=5319


File: python.info,  Node: Alterações de bytecode do CPython<8>,  Prev: Alterações na API C<13>,  Up: Porting to Python 3 6

1.8.11.4 Alterações de bytecode do CPython
..........................................

There have been several major changes to the *note bytecode: 187. in
Python 3.6.

   * The Python interpreter now uses a 16-bit wordcode instead of
     bytecode.  (Contributed by Demur Rumed with input and reviews from
     Serhiy Storchaka and Victor Stinner in bpo-26647(1) and
     bpo-28050(2).)

   * The new ‘FORMAT_VALUE’ and *note BUILD_STRING: d74. opcodes as part
     of the *note formatted string literal: c4a. implementation.
     (Contributed by Eric Smith in bpo-25483(3) and Serhiy Storchaka in
     bpo-27078(4).)

   * The new *note BUILD_CONST_KEY_MAP: d75. opcode to optimize the
     creation of dictionaries with constant keys.  (Contributed by
     Serhiy Storchaka in bpo-27140(5).)

   * The function call opcodes have been heavily reworked for better
     performance and simpler implementation.  The *note MAKE_FUNCTION:
     d76, ‘CALL_FUNCTION’, ‘CALL_FUNCTION_KW’ and
     ‘BUILD_MAP_UNPACK_WITH_CALL’ opcodes have been modified, the new
     *note CALL_FUNCTION_EX: d77. and ‘BUILD_TUPLE_UNPACK_WITH_CALL’
     have been added, and ‘CALL_FUNCTION_VAR’, ‘CALL_FUNCTION_VAR_KW’
     and ‘MAKE_CLOSURE’ opcodes have been removed.  (Contributed by
     Demur Rumed in bpo-27095(6), and Serhiy Storchaka in bpo-27213(7),
     bpo-28257(8).)

   * The new *note SETUP_ANNOTATIONS: d78. and ‘STORE_ANNOTATION’
     opcodes have been added to support the new *note variable
     annotation: d79. syntax.  (Contributed by Ivan Levkivskyi in
     bpo-27985(9).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26647

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28050

   (3) https://bugs.python.org/issue?@action=redirect&bpo=25483

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27078

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27140

   (6) https://bugs.python.org/issue?@action=redirect&bpo=27095

   (7) https://bugs.python.org/issue?@action=redirect&bpo=27213

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28257

   (9) https://bugs.python.org/issue?@action=redirect&bpo=27985


File: python.info,  Node: Notable changes in Python 3 6 2,  Next: Notable changes in Python 3 6 4,  Prev: Porting to Python 3 6,  Up: What’s New In Python 3 6

1.8.12 Notable changes in Python 3.6.2
--------------------------------------

* Menu:

* Novo alvo de construção make regen-all::
* Remoção do alvo de construção make touch::


File: python.info,  Node: Novo alvo de construção make regen-all,  Next: Remoção do alvo de construção make touch,  Up: Notable changes in Python 3 6 2

1.8.12.1 Novo alvo de construção ‘make regen-all’
.................................................

Para simplificar a compilação cruzada e garantir que o CPython possa ser
compilado de forma confiável sem exigir que uma versão existente do
Python já esteja disponível, o sistema de construção baseado em
autotools não tenta mais recompilar implicitamente os arquivos gerados
com base nos tempos de modificação dos arquivos.

Em vez disso, um novo comando ‘make regen-all’ foi adicionado para
forçar a regeneração desses arquivos quando desejado (por exemplo, após
uma versão inicial do Python já ter sido construída com base nas versões
pré-geradas).

Alvos de regeneração mais seletivos também são definidos – veja
Makefile.pre.in(1) para detalhes.

(Contribuição de Victor Stinner em bpo-23404(2).)

Adicionado na versão 3.6.2.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Makefile.pre.in

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23404


File: python.info,  Node: Remoção do alvo de construção make touch,  Prev: Novo alvo de construção make regen-all,  Up: Notable changes in Python 3 6 2

1.8.12.2 Remoção do alvo de construção ‘make touch’
...................................................

O alvo de construção ‘make touch’ usado anteriormente para solicitar
regeneração implícita de arquivos gerados atualizando seus tempos de
modificação foi removido.

Ele foi substituído pelo novo alvo ‘make regen-all’.

(Contribuição de Victor Stinner em bpo-23404(1).)

Alterado na versão 3.6.2.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23404


File: python.info,  Node: Notable changes in Python 3 6 4,  Next: Notable changes in Python 3 6 5,  Prev: Notable changes in Python 3 6 2,  Up: What’s New In Python 3 6

1.8.13 Notable changes in Python 3.6.4
--------------------------------------

The ‘PyExc_RecursionErrorInst’ singleton that was part of the public API
has been removed as its members being never cleared may cause a segfault
during finalization of the interpreter.  (Contributed by Xavier de Gaye
in bpo-22898(1) and bpo-30697(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22898

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30697


File: python.info,  Node: Notable changes in Python 3 6 5,  Next: Notable changes in Python 3 6 7,  Prev: Notable changes in Python 3 6 4,  Up: What’s New In Python 3 6

1.8.14 Notable changes in Python 3.6.5
--------------------------------------

The *note locale.localeconv(): c18. function now sets temporarily the
‘LC_CTYPE’ locale to the ‘LC_NUMERIC’ locale in some cases.
(Contributed by Victor Stinner in bpo-31900(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31900


File: python.info,  Node: Notable changes in Python 3 6 7,  Next: Notable changes in Python 3 6 10,  Prev: Notable changes in Python 3 6 5,  Up: What’s New In Python 3 6

1.8.15 Notable changes in Python 3.6.7
--------------------------------------

*note xml.dom.minidom: 122. and *note xml.sax: 129. modules no longer
process external entities by default.  See also gh-61441(1).

In 3.6.7 the *note tokenize: fb. module now implicitly emits a ‘NEWLINE’
token when provided with input that does not have a trailing new line.
This behavior now matches what the C tokenizer does internally.
(Contributed by Ammar Askar in bpo-33899(2).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/61441

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33899


File: python.info,  Node: Notable changes in Python 3 6 10,  Next: Notable changes in Python 3 6 13,  Prev: Notable changes in Python 3 6 7,  Up: What’s New In Python 3 6

1.8.16 Notable changes in Python 3.6.10
---------------------------------------

Devido a significativas preocupações de segurança, o parâmetro
'reuse_address' de *note asyncio.loop.create_datagram_endpoint(): 733.
não é mais suportado.  Isso ocorre devido ao comportamento da opção de
soquete ‘SO_REUSEADDR’ no UDP. Para mais detalhes, consulte a
documentação de ‘loop.create_datagram_endpoint()’.  (Contribuição de
Kyle Stanley, Antoine Pitrou e Yury Selivanov em bpo-37228(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37228


File: python.info,  Node: Notable changes in Python 3 6 13,  Next: Notable changes in Python 3 6 14,  Prev: Notable changes in Python 3 6 10,  Up: What’s New In Python 3 6

1.8.17 Notable changes in Python 3.6.13
---------------------------------------

Versões anteriores do Python permitiam o uso de ‘;’ e ‘&’ como
separadores de parâmetros de consulta nas funções *note
urllib.parse.parse_qs(): 27a. e *note urllib.parse.parse_qsl(): 279.
Devido a questões de segurança, e em conformidade com as recomendações
mais recentes do W3C, isso foi alterado para permitir apenas uma única
chave separadora, com ‘&’ como padrão.  Esta mudança também afeta as
funções ‘cgi.parse()’ e ‘cgi.parse_multipart()’ já que elas usam as
funções afetadas internamente.  Para obter mais detalhes, consulte sua
respectiva documentação.  (Contribuição de Adam Goldschmidt, Senthil
Kumaran e Ken Jin em bpo-42967(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42967


File: python.info,  Node: Notable changes in Python 3 6 14,  Prev: Notable changes in Python 3 6 13,  Up: What’s New In Python 3 6

1.8.18 Notable changes in Python 3.6.14
---------------------------------------

Uma correção de segurança altera o comportamento *note ftplib.FTP: 900.
para não confiar no endereço IPv4 enviado do servidor remoto ao
configurar um canal de dados passivo.  Em vez disso, reutilizamos o
endereço IP do servidor ftp.  Para códigos incomuns que requerem o
comportamento antigo, defina um atributo
‘trust_server_pasv_ipv4_address’ em sua instância de FTP para ‘True’.
(Veja gh-87451(1))

The presence of newline or tab characters in parts of a URL allows for
some forms of attacks.  Following the WHATWG specification that updates
RFC 3986, ASCII newline ‘\n’, ‘\r’ and tab ‘\t’ characters are stripped
from the URL by the parser *note urllib.parse(): 10a. preventing such
attacks.  The removal characters are controlled by a new module level
variable ‘urllib.parse._UNSAFE_URL_BYTES_TO_REMOVE’.  (See gh-88048(2))

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/87451

   (2) https://github.com/python/cpython/issues/88048


File: python.info,  Node: O que há de novo no Python 3 5,  Next: O que há de novo no Python 3 4,  Prev: What’s New In Python 3 6,  Up: O que há de novo no Python

1.9 O que há de novo no Python 3.5
==================================


Editores: Elvis Pranskevichus <<elvis@magic.io>>, Yury Selivanov
<<yury@magic.io>>

This article explains the new features in Python 3.5, compared to 3.4.
Python 3.5 was released on September 13, 2015.   See the changelog(1)
for a full list of changes.

Ver também
..........

PEP 478(2) - Python 3.5 Release Schedule

* Menu:

* Resumo – Destaques da versão: Resumo – Destaques da versão<9>.
* Novas funcionalidades: Novas funcionalidades<14>.
* Outras mudanças na linguagem: Outras mudanças na linguagem<9>.
* Novos módulos: Novos módulos<9>.
* Módulos melhorados: Módulos melhorados<9>.
* Other module-level changes::
* Otimizações: Otimizações<9>.
* Mudanças a construções e API C: Mudanças a construções e API C<3>.
* Descontinuados: Descontinuados<10>.
* Removidos: Removidos<10>.
* Porting to Python 3.5: Porting to Python 3 5.
* Notable changes in Python 3.5.4: Notable changes in Python 3 5 4.

   ---------- Footnotes ----------

   (1) https://docs.python.org/3.5/whatsnew/changelog.html

   (2) https://peps.python.org/pep-0478/


File: python.info,  Node: Resumo – Destaques da versão<9>,  Next: Novas funcionalidades<14>,  Up: O que há de novo no Python 3 5

1.9.1 Resumo – Destaques da versão
----------------------------------

Novos recursos de sintaxe:

   * *note PEP 492: d87, coroutines with async and await syntax.

   * *note PEP 465: d88, a new matrix multiplication operator: ‘a @ b’.

   * *note PEP 448: d89, additional unpacking generalizations.

Novos módulos de biblioteca:

   * *note typing: 104.: *note PEP 484 – Type Hints: d8a.

   * *note zipapp: 130.: *note PEP 441 Improving Python ZIP Application
     Support: d8b.

Novos recursos embutidos:

   * ‘bytes % args’, ‘bytearray % args’: *note PEP 461: d8c. – Adding
     ‘%’ formatting to bytes and bytearray.

   * New *note bytes.hex(): d8d, *note bytearray.hex(): d8e. and *note
     memoryview.hex(): d8f. methods.  (Contributed by Arnon Yaari in
     bpo-9951(1).)

   * *note memoryview: 2eb. now supports tuple indexing (including
     multi-dimensional).  (Contributed by Antoine Pitrou in
     bpo-23632(2).)

   * Generators have a new ‘gi_yieldfrom’ attribute, which returns the
     object being iterated by ‘yield from’ expressions.  (Contributed by
     Benno Leslie and Yury Selivanov in bpo-24450(3).)

   * A new *note RecursionError: d90. exception is now raised when
     maximum recursion depth is reached.  (Contributed by Georg Brandl
     in bpo-19235(4).)

Melhorias na implementação do CPython:

   * When the ‘LC_TYPE’ locale is the POSIX locale (‘C’ locale), *note
     sys.stdin: 53d. and *note sys.stdout: ae6. now use the
     ‘surrogateescape’ error handler, instead of the ‘strict’ error
     handler.  (Contributed by Victor Stinner in bpo-19977(5).)

   * ‘.pyo’ files are no longer used and have been replaced by a more
     flexible scheme that includes the optimization level explicitly in
     ‘.pyc’ name.  (See *note PEP 488 overview: d91.)

   * Builtin and extension modules are now initialized in a multi-phase
     process, which is similar to how Python modules are loaded.  (See
     *note PEP 489 overview: d92.)

Melhorias significativas na biblioteca padrão:

   * *note collections.OrderedDict: 5db. is now *note implemented in C:
     d93, which makes it 4 to 100 times faster.

   * The *note ssl: d0. module gained *note support for Memory BIO: d94,
     which decouples SSL protocol handling from network IO.

   * The new *note os.scandir(): a68. function provides a *note better
     and significantly faster way: d95. of directory traversal.

   * *note functools.lru_cache(): 9f7. has been mostly *note
     reimplemented in C: d96, yielding much better performance.

   * The new *note subprocess.run(): b9e. function provides a *note
     streamlined way to run subprocesses: d97.

   * The *note traceback: fe. module has been significantly *note
     enhanced: d98. for improved performance and developer convenience.

Melhorias de Segurança:

   * SSLv3 is now disabled throughout the standard library.  It can
     still be enabled by instantiating a *note ssl.SSLContext: 294.
     manually.  (See bpo-22638(6) for more details; this change was
     backported to CPython 3.4 and 2.7.)

   * HTTP cookie parsing is now stricter, in order to protect against
     potential injection attacks.  (Contributed by Antoine Pitrou in
     bpo-22796(7).)

Melhorias do Windows:

   * A new installer for Windows has replaced the old MSI. See *note
     Utilizando Python no Windows: ab6. for more information.

   * Windows builds now use Microsoft Visual C++ 14.0, and extension
     modules should use the same.

Please read on for a comprehensive list of user-facing changes,
including many other smaller improvements, CPython optimizations,
deprecations, and potential porting issues.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9951

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23632

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24450

   (4) https://bugs.python.org/issue?@action=redirect&bpo=19235

   (5) https://bugs.python.org/issue?@action=redirect&bpo=19977

   (6) https://bugs.python.org/issue?@action=redirect&bpo=22638

   (7) https://bugs.python.org/issue?@action=redirect&bpo=22796


File: python.info,  Node: Novas funcionalidades<14>,  Next: Outras mudanças na linguagem<9>,  Prev: Resumo – Destaques da versão<9>,  Up: O que há de novo no Python 3 5

1.9.2 Novas funcionalidades
---------------------------

* Menu:

* PEP 492 - Coroutines with async and await syntax::
* PEP 465 - A dedicated infix operator for matrix multiplication::
* PEP 448 - Additional Unpacking Generalizations::
* PEP 461 - percent formatting support for bytes and bytearray::
* PEP 484 - Type Hints::
* PEP 471 - os.scandir() function – a better and faster directory iterator: PEP 471 - os scandir function – a better and faster directory iterator.
* PEP 475; Retry system calls failing with EINTR: PEP 475 Retry system calls failing with EINTR.
* PEP 479; Change StopIteration handling inside generators: PEP 479 Change StopIteration handling inside generators.
* PEP 485; A function for testing approximate equality: PEP 485 A function for testing approximate equality.
* PEP 486; Make the Python Launcher aware of virtual environments: PEP 486 Make the Python Launcher aware of virtual environments.
* PEP 488; Elimination of PYO files: PEP 488 Elimination of PYO files.
* PEP 489; Multi-phase extension module initialization: PEP 489 Multi-phase extension module initialization.


File: python.info,  Node: PEP 492 - Coroutines with async and await syntax,  Next: PEP 465 - A dedicated infix operator for matrix multiplication,  Up: Novas funcionalidades<14>

1.9.2.1 PEP 492 - Coroutines with async and await syntax
........................................................

PEP 492(1) greatly improves support for asynchronous programming in
Python by adding *note awaitable objects: 1ad, *note coroutine
functions: d9b, *note asynchronous iteration: d9c, and *note
asynchronous context managers: 5d7.

Coroutine functions are declared using the new *note async def: 5d1.
syntax:

     >>> async def coro():
     ...     return 'spam'

Inside a coroutine function, the new *note await: 1b9. expression can be
used to suspend coroutine execution until the result is available.  Any
object can be 'awaited', as long as it implements the *note awaitable:
1ad. protocol by defining the *note __await__(): d9d. method.

PEP 492 also adds *note async for: aba. statement for convenient
iteration over asynchronous iterables.

An example of a rudimentary HTTP client written using the new syntax:

     import asyncio

     async def http_get(domain):
         reader, writer = await asyncio.open_connection(domain, 80)

         writer.write(b'\r\n'.join([
             b'GET / HTTP/1.1',
             b'Host: %b' % domain.encode('latin-1'),
             b'Connection: close',
             b'', b''
         ]))

         async for line in reader:
             print('>>>', line)

         writer.close()

     loop = asyncio.get_event_loop()
     try:
         loop.run_until_complete(http_get('example.com'))
     finally:
         loop.close()

Similarly to asynchronous iteration, there is a new syntax for
asynchronous context managers.  The following script:

     import asyncio

     async def coro(name, lock):
         print('coro {}: waiting for lock'.format(name))
         async with lock:
             print('coro {}: holding the lock'.format(name))
             await asyncio.sleep(1)
             print('coro {}: releasing the lock'.format(name))

     loop = asyncio.get_event_loop()
     lock = asyncio.Lock()
     coros = asyncio.gather(coro(1, lock), coro(2, lock))
     try:
         loop.run_until_complete(coros)
     finally:
         loop.close()

will output:

     coro 2: waiting for lock
     coro 2: holding the lock
     coro 1: waiting for lock
     coro 2: releasing the lock
     coro 1: holding the lock
     coro 1: releasing the lock

Note that both *note async for: aba. and *note async with: 5d5. can only
be used inside a coroutine function declared with *note async def: 5d1.

Coroutine functions are intended to be run inside a compatible event
loop, such as the *note asyncio loop: d9e.

     Nota: 
     Alterado na versão 3.5.2: Starting with CPython 3.5.2, ‘__aiter__’
     can directly return *note asynchronous iterators: 1ab.  Returning
     an *note awaitable: 1ad. object will result in a *note
     PendingDeprecationWarning: 8ce.

     See more details in the *note Iteradores assíncronos: d9f.
     documentation section.

Ver também
..........

PEP 492(2) – Coroutines with async and await syntax

     PEP written and implemented by Yury Selivanov.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0492/

   (2) https://peps.python.org/pep-0492/


File: python.info,  Node: PEP 465 - A dedicated infix operator for matrix multiplication,  Next: PEP 448 - Additional Unpacking Generalizations,  Prev: PEP 492 - Coroutines with async and await syntax,  Up: Novas funcionalidades<14>

1.9.2.2 PEP 465 - A dedicated infix operator for matrix multiplication
......................................................................

PEP 465(1) adds the ‘@’ infix operator for matrix multiplication.
Currently, no builtin Python types implement the new operator, however,
it can be implemented by defining *note __matmul__(): da1, *note
__rmatmul__(): da2, and *note __imatmul__(): da3. for regular,
reflected, and in-place matrix multiplication.  The semantics of these
methods is similar to that of methods defining other infix arithmetic
operators.

Matrix multiplication is a notably common operation in many fields of
mathematics, science, engineering, and the addition of ‘@’ allows
writing cleaner code:

     S = (H @ beta - r).T @ inv(H @ V @ H.T) @ (H @ beta - r)

instead of:

     S = dot((dot(H, beta) - r).T,
             dot(inv(dot(dot(H, V), H.T)), dot(H, beta) - r))

NumPy 1.10 has support for the new operator:

     >>> import numpy

     >>> x = numpy.ones(3)
     >>> x
     array([ 1., 1., 1.])

     >>> m = numpy.eye(3)
     >>> m
     array([[ 1., 0., 0.],
            [ 0., 1., 0.],
            [ 0., 0., 1.]])

     >>> x @ m
     array([ 1., 1., 1.])

Ver também
..........

PEP 465(2) – A dedicated infix operator for matrix multiplication

     PEP written by Nathaniel J. Smith; implemented by Benjamin
     Peterson.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0465/

   (2) https://peps.python.org/pep-0465/


File: python.info,  Node: PEP 448 - Additional Unpacking Generalizations,  Next: PEP 461 - percent formatting support for bytes and bytearray,  Prev: PEP 465 - A dedicated infix operator for matrix multiplication,  Up: Novas funcionalidades<14>

1.9.2.3 PEP 448 - Additional Unpacking Generalizations
......................................................

PEP 448(1) extends the allowed uses of the ‘*’ iterable unpacking
operator and ‘**’ dictionary unpacking operator.  It is now possible to
use an arbitrary number of unpackings in *note function calls: da5.:

     >>> print(*[1], *[2], 3, *[4, 5])
     1 2 3 4 5

     >>> def fn(a, b, c, d):
     ...     print(a, b, c, d)
     ...

     >>> fn(**{'a': 1, 'c': 3}, **{'b': 2, 'd': 4})
     1 2 3 4

Similarly, tuple, list, set, and dictionary displays allow multiple
unpackings (see *note Listas de expressões: da6. and *note Sintaxes de
criação de dicionário: da7.):

     >>> *range(4), 4
     (0, 1, 2, 3, 4)

     >>> [*range(4), 4]
     [0, 1, 2, 3, 4]

     >>> {*range(4), 4, *(5, 6, 7)}
     {0, 1, 2, 3, 4, 5, 6, 7}

     >>> {'x': 1, **{'y': 2}}
     {'x': 1, 'y': 2}

Ver também
..........

PEP 448(2) – Additional Unpacking Generalizations

     PEP written by Joshua Landau; implemented by Neil Girdhar, Thomas
     Wouters, and Joshua Landau.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0448/

   (2) https://peps.python.org/pep-0448/


File: python.info,  Node: PEP 461 - percent formatting support for bytes and bytearray,  Next: PEP 484 - Type Hints,  Prev: PEP 448 - Additional Unpacking Generalizations,  Up: Novas funcionalidades<14>

1.9.2.4 PEP 461 - percent formatting support for bytes and bytearray
....................................................................

PEP 461(1) adds support for the ‘%’ *note interpolation operator: da9.
to *note bytes: 1c2. and *note bytearray: 2ea.

While interpolation is usually thought of as a string operation, there
are cases where interpolation on ‘bytes’ or ‘bytearrays’ makes sense,
and the work needed to make up for this missing functionality detracts
from the overall readability of the code.  This issue is particularly
important when dealing with wire format protocols, which are often a
mixture of binary and ASCII compatible text.

Exemplos:

     >>> b'Hello %b!' % b'World'
     b'Hello World!'

     >>> b'x=%i y=%f' % (1, 2.5)
     b'x=1 y=2.500000'

Unicode is not allowed for ‘%b’, but it is accepted by ‘%a’ (equivalent
of ‘repr(obj).encode('ascii', 'backslashreplace')’):

     >>> b'Hello %b!' % 'World'
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: %b requires bytes, or an object that implements __bytes__, not 'str'

     >>> b'price: %a' % '10€'
     b"price: '10\\u20ac'"

Note that ‘%s’ and ‘%r’ conversion types, although supported, should
only be used in codebases that need compatibility with Python 2.

Ver também
..........

PEP 461(2) – Adding % formatting to bytes and bytearray

     PEP written by Ethan Furman; implemented by Neil Schemenauer and
     Ethan Furman.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0461/

   (2) https://peps.python.org/pep-0461/


File: python.info,  Node: PEP 484 - Type Hints,  Next: PEP 471 - os scandir function – a better and faster directory iterator,  Prev: PEP 461 - percent formatting support for bytes and bytearray,  Up: Novas funcionalidades<14>

1.9.2.5 PEP 484 - Type Hints
............................

Function annotation syntax has been a Python feature since version 3.0 (
PEP 3107(1)), however the semantics of annotations has been left
undefined.

Experience has shown that the majority of function annotation uses were
to provide type hints to function parameters and return values.  It
became evident that it would be beneficial for Python users, if the
standard library included the base definitions and tools for type
annotations.

PEP 484(2) introduces a *note provisional module: b16. to provide these
standard definitions and tools, along with some conventions for
situations where annotations are not available.

For example, here is a simple function whose argument and return type
are declared in the annotations:

     def greeting(name: str) -> str:
         return 'Hello ' + name

While these annotations are available at runtime through the usual
‘__annotations__’ attribute, 'no automatic type checking happens at
runtime'.  Instead, it is assumed that a separate off-line type checker
(e.g.  mypy(3)) will be used for on-demand source code analysis.

The type system supports unions, generic types, and a special type named
*note Any: 6ac. which is consistent with (i.e.  assignable to and from)
all types.

Ver também
..........

   * *note typing: 104. documentação do módulo

   * 
     PEP 484(4) – Type Hints

          PEP written by Guido van Rossum, Jukka Lehtosalo, and Łukasz
          Langa; implemented by Guido van Rossum.

   * 
     PEP 483(5) – The Theory of Type Hints

          PEP escrito por Guido van Rossum

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3107/

   (2) https://peps.python.org/pep-0484/

   (3) https://mypy-lang.org

   (4) https://peps.python.org/pep-0484/

   (5) https://peps.python.org/pep-0483/


File: python.info,  Node: PEP 471 - os scandir function – a better and faster directory iterator,  Next: PEP 475 Retry system calls failing with EINTR,  Prev: PEP 484 - Type Hints,  Up: Novas funcionalidades<14>

1.9.2.6 PEP 471 - os.scandir() function – a better and faster directory iterator
................................................................................

PEP 471(1) adds a new directory iteration function, *note os.scandir():
a68, to the standard library.  Additionally, *note os.walk(): 4a9. is
now implemented using ‘scandir’, which makes it 3 to 5 times faster on
POSIX systems and 7 to 20 times faster on Windows systems.  This is
largely achieved by greatly reducing the number of calls to *note
os.stat(): 4a0. required to walk a directory tree.

Additionally, ‘scandir’ returns an iterator, as opposed to returning a
list of file names, which improves memory efficiency when iterating over
very large directories.

The following example shows a simple use of *note os.scandir(): a68. to
display all the files (excluding directories) in the given 'path' that
don’t start with ‘'.'’.  The *note entry.is_file(): dac. call will
generally not make an additional system call:

     for entry in os.scandir(path):
         if not entry.name.startswith('.') and entry.is_file():
             print(entry.name)

Ver também
..........

PEP 471(2) – os.scandir() function – a better and faster directory iterator

     PEP written and implemented by Ben Hoyt with the help of Victor
     Stinner.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0471/

   (2) https://peps.python.org/pep-0471/


File: python.info,  Node: PEP 475 Retry system calls failing with EINTR,  Next: PEP 479 Change StopIteration handling inside generators,  Prev: PEP 471 - os scandir function – a better and faster directory iterator,  Up: Novas funcionalidades<14>

1.9.2.7 PEP 475: Retry system calls failing with EINTR
......................................................

An *note errno.EINTR: daf. error code is returned whenever a system
call, that is waiting for I/O, is interrupted by a signal.  Previously,
Python would raise *note InterruptedError: db0. in such cases.  This
meant that, when writing a Python application, the developer had two
choices:

  1. Ignore the ‘InterruptedError’.

  2. Handle the ‘InterruptedError’ and attempt to restart the
     interrupted system call at every call site.

The first option makes an application fail intermittently.  The second
option adds a large amount of boilerplate that makes the code nearly
unreadable.  Compare:

     print("Hello World")

e:

     while True:
         try:
             print("Hello World")
             break
         except InterruptedError:
             continue

PEP 475(1) implements automatic retry of system calls on ‘EINTR’.  This
removes the burden of dealing with ‘EINTR’ or *note InterruptedError:
db0. in user code in most situations and makes Python programs,
including the standard library, more robust.  Note that the system call
is only retried if the signal handler does not raise an exception.

Below is a list of functions which are now retried when interrupted by a
signal:

   * *note open(): 51c. and *note io.open(): 51d.;

   * functions of the *note faulthandler: 58. module;

   * *note os: a1. functions: *note fchdir(): db1, *note fchmod(): 21c,
     *note fchown(): db2, *note fdatasync(): db3, *note fstat(): db4,
     *note fstatvfs(): db5, *note fsync(): db6, *note ftruncate(): db7,
     *note mkfifo(): db8, *note mknod(): db9, *note open(): dba, *note
     posix_fadvise(): dbb, *note posix_fallocate(): dbc, *note pread():
     b75, *note pwrite(): b78, *note read(): dbd, *note readv(): b74,
     *note sendfile(): b21, *note wait3(): dbe, *note wait4(): dbf,
     *note wait(): dc0, *note waitid(): dc1, *note waitpid(): dc2, *note
     write(): dc3, *note writev(): b77.;

   * special cases: *note os.close(): b8a. and *note os.dup2(): b79. now
     ignore *note EINTR: daf. errors; the syscall is not retried (see
     the PEP for the rationale);

   * *note select: c1. functions: *note devpoll.poll(): dc4, *note
     epoll.poll(): dc5, *note kqueue.control(): dc6, *note poll.poll():
     dc7, *note select(): dc8.;

   * methods of the *note socket: dc9. class: *note accept(): dca, *note
     connect(): dcb. (except for non-blocking sockets), *note recv():
     dcc, *note recvfrom(): dcd, *note recvmsg(): dce, *note send():
     dcf, *note sendall(): dd0, *note sendmsg(): 476, *note sendto():
     dd1.;

   * *note signal.sigtimedwait(): dd2. and *note signal.sigwaitinfo():
     dd3.;

   * *note time.sleep(): 69d.

Ver também
..........

PEP 475(2) – Retry system calls failing with EINTR

     PEP and implementation written by Charles-François Natali and
     Victor Stinner, with the help of Antoine Pitrou (the French
     connection).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0475/

   (2) https://peps.python.org/pep-0475/


File: python.info,  Node: PEP 479 Change StopIteration handling inside generators,  Next: PEP 485 A function for testing approximate equality,  Prev: PEP 475 Retry system calls failing with EINTR,  Up: Novas funcionalidades<14>

1.9.2.8 PEP 479: Change StopIteration handling inside generators
................................................................

The interaction of generators and *note StopIteration: c15. in Python
3.4 and earlier was sometimes surprising, and could conceal obscure
bugs.  Previously, ‘StopIteration’ raised accidentally inside a
generator function was interpreted as the end of the iteration by the
loop construct driving the generator.

PEP 479(1) changes the behavior of generators: when a ‘StopIteration’
exception is raised inside a generator, it is replaced with a *note
RuntimeError: 195. before it exits the generator frame.  The main goal
of this change is to ease debugging in the situation where an unguarded
*note next(): 7d9. call raises ‘StopIteration’ and causes the iteration
controlled by the generator to terminate silently.  This is particularly
pernicious in combination with the ‘yield from’ construct.

This is a backwards incompatible change, so to enable the new behavior,
a *note __future__: dd5. import is necessary:

     >>> from __future__ import generator_stop

     >>> def gen():
     ...     next(iter([]))
     ...     yield
     ...
     >>> next(gen())
     Traceback (most recent call last):
       File "<stdin>", line 2, in gen
     StopIteration

     The above exception was the direct cause of the following exception:

     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     RuntimeError: generator raised StopIteration

Without a ‘__future__’ import, a *note PendingDeprecationWarning: 8ce.
will be raised whenever a *note StopIteration: c15. exception is raised
inside a generator.

Ver também
..........

PEP 479(2) – Change StopIteration handling inside generators

     PEP written by Chris Angelico and Guido van Rossum.  Implemented by
     Chris Angelico, Yury Selivanov and Nick Coghlan.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0479/

   (2) https://peps.python.org/pep-0479/


File: python.info,  Node: PEP 485 A function for testing approximate equality,  Next: PEP 486 Make the Python Launcher aware of virtual environments,  Prev: PEP 479 Change StopIteration handling inside generators,  Up: Novas funcionalidades<14>

1.9.2.9 PEP 485: A function for testing approximate equality
............................................................

PEP 485(1) adds the *note math.isclose(): dd8. and *note
cmath.isclose(): dd9. functions which tell whether two values are
approximately equal or “close” to each other.  Whether or not two values
are considered close is determined according to given absolute and
relative tolerances.  Relative tolerance is the maximum allowed
difference between ‘isclose’ arguments, relative to the larger absolute
value:

     >>> import math
     >>> a = 5.0
     >>> b = 4.99998
     >>> math.isclose(a, b, rel_tol=1e-5)
     True
     >>> math.isclose(a, b, rel_tol=1e-6)
     False

It is also possible to compare two values using absolute tolerance,
which must be a non-negative value:

     >>> import math
     >>> a = 5.0
     >>> b = 4.99998
     >>> math.isclose(a, b, abs_tol=0.00003)
     True
     >>> math.isclose(a, b, abs_tol=0.00001)
     False

Ver também
..........

PEP 485(2) – Uma função para testar igualdade aproximada

     PEP written by Christopher Barker; implemented by Chris Barker and
     Tal Einat.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0485/

   (2) https://peps.python.org/pep-0485/


File: python.info,  Node: PEP 486 Make the Python Launcher aware of virtual environments,  Next: PEP 488 Elimination of PYO files,  Prev: PEP 485 A function for testing approximate equality,  Up: Novas funcionalidades<14>

1.9.2.10 PEP 486: Make the Python Launcher aware of virtual environments
........................................................................

PEP 486(1) makes the Windows launcher (see PEP 397(2)) aware of an
active virtual environment.  When the default interpreter would be used
and the ‘VIRTUAL_ENV’ environment variable is set, the interpreter in
the virtual environment will be used.

Ver também
..........

PEP 486(3) – Make the Python Launcher aware of virtual environments

     PEP written and implemented by Paul Moore.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0486/

   (2) https://peps.python.org/pep-0397/

   (3) https://peps.python.org/pep-0486/


File: python.info,  Node: PEP 488 Elimination of PYO files,  Next: PEP 489 Multi-phase extension module initialization,  Prev: PEP 486 Make the Python Launcher aware of virtual environments,  Up: Novas funcionalidades<14>

1.9.2.11 PEP 488: Elimination of PYO files
..........................................

PEP 488(1) does away with the concept of ‘.pyo’ files.  This means that
‘.pyc’ files represent both unoptimized and optimized bytecode.  To
prevent the need to constantly regenerate bytecode files, ‘.pyc’ files
now have an optional ‘opt-’ tag in their name when the bytecode is
optimized.  This has the side-effect of no more bytecode file name
clashes when running under either *note -O: ddd. or *note -OO: dde.
Consequently, bytecode files generated from *note -O: ddd, and *note
-OO: dde. may now exist simultaneously.  *note
importlib.util.cache_from_source(): 2fe. has an updated API to help with
this change.

Ver também
..........

PEP 488(2) – Elimination of PYO files

     PEP written and implemented by Brett Cannon.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0488/

   (2) https://peps.python.org/pep-0488/


File: python.info,  Node: PEP 489 Multi-phase extension module initialization,  Prev: PEP 488 Elimination of PYO files,  Up: Novas funcionalidades<14>

1.9.2.12 PEP 489: Multi-phase extension module initialization
.............................................................

PEP 489(1) updates extension module initialization to take advantage of
the two step module loading mechanism introduced by PEP 451(2) in Python
3.4.

This change brings the import semantics of extension modules that opt-in
to using the new mechanism much closer to those of Python source and
bytecode modules, including the ability to use any valid identifier as a
module name, rather than being restricted to ASCII.

Ver também
..........

PEP 489(3) – Inicialização de módulo extensão multifase

     PEP written by Petr Viktorin, Stefan Behnel, and Nick Coghlan;
     implemented by Petr Viktorin.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0489/

   (2) https://peps.python.org/pep-0451/

   (3) https://peps.python.org/pep-0489/


File: python.info,  Node: Outras mudanças na linguagem<9>,  Next: Novos módulos<9>,  Prev: Novas funcionalidades<14>,  Up: O que há de novo no Python 3 5

1.9.3 Outras mudanças na linguagem
----------------------------------

Algumas das mudanças menores feitas no núcleo da linguagem Python são:

   * Added the ‘"namereplace"’ error handlers.  The ‘"backslashreplace"’
     error handlers now work with decoding and translating.
     (Contributed by Serhiy Storchaka in bpo-19676(1) and bpo-22286(2).)

   * The *note -b: 5e3. option now affects comparisons of *note bytes:
     1c2. with *note int: 257.  (Contributed by Serhiy Storchaka in
     bpo-23681(3).)

   * New Kazakh ‘kz1048’ and Tajik ‘koi8_t’ *note codecs: de1.
     (Contributed by Serhiy Storchaka in bpo-22682(4) and bpo-22681(5).)

   * Property docstrings are now writable.  This is especially useful
     for *note collections.namedtuple(): 1ca. docstrings.  (Contributed
     by Berker Peksag in bpo-24064(6).)

   * Circular imports involving relative imports are now supported.
     (Contributed by Brett Cannon and Antoine Pitrou in bpo-17636(7).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19676

   (2) https://bugs.python.org/issue?@action=redirect&bpo=22286

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23681

   (4) https://bugs.python.org/issue?@action=redirect&bpo=22682

   (5) https://bugs.python.org/issue?@action=redirect&bpo=22681

   (6) https://bugs.python.org/issue?@action=redirect&bpo=24064

   (7) https://bugs.python.org/issue?@action=redirect&bpo=17636


File: python.info,  Node: Novos módulos<9>,  Next: Módulos melhorados<9>,  Prev: Outras mudanças na linguagem<9>,  Up: O que há de novo no Python 3 5

1.9.4 Novos módulos
-------------------

* Menu:

* typing: typing<10>.
* zipapp: zipapp<2>.


File: python.info,  Node: typing<10>,  Next: zipapp<2>,  Up: Novos módulos<9>

1.9.4.1 typing
..............

The new *note typing: 104. *note provisional: b16. module provides
standard definitions and tools for function type annotations.  See *note
Type Hints: d8a. for more information.


File: python.info,  Node: zipapp<2>,  Prev: typing<10>,  Up: Novos módulos<9>

1.9.4.2 zipapp
..............

The new *note zipapp: 130. module (specified in PEP 441(1)) provides an
API and command line tool for creating executable Python Zip
Applications, which were introduced in Python 2.6 in bpo-1739468(2), but
which were not well publicized, either at the time or since.

With the new module, bundling your application is as simple as putting
all the files, including a ‘__main__.py’ file, into a directory ‘myapp’
and running:

     $ python -m zipapp myapp
     $ python myapp.pyz

The module implementation has been contributed by Paul Moore in
bpo-23491(3).

Ver também
..........

PEP 441(4) – Improving Python ZIP Application Support

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0441/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=1739468

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23491

   (4) https://peps.python.org/pep-0441/


File: python.info,  Node: Módulos melhorados<9>,  Next: Other module-level changes,  Prev: Novos módulos<9>,  Up: O que há de novo no Python 3 5

1.9.5 Módulos melhorados
------------------------

* Menu:

* argparse: argparse<4>.
* asyncio: asyncio<10>.
* bz2::
* cgi::
* cmath: cmath<2>.
* código::
* collections: collections<5>.
* collections.abc: collections abc<3>.
* compileall: compileall<4>.
* concurrent.futures: concurrent futures<5>.
* configparser: configparser<4>.
* contextlib: contextlib<5>.
* csv: csv<3>.
* curses: curses<4>.
* dbm: dbm<5>.
* difflib::
* distutils: distutils<7>.
* doctest: doctest<3>.
* email: email<3>.
* enum: enum<8>.
* faulthandler: faulthandler<3>.
* functools: functools<4>.
* glob: glob<3>.
* gzip: gzip<4>.
* heapq::
* http: http<2>.
* http.client: http client<3>.
* idlelib e IDLE: idlelib e IDLE<3>.
* imaplib: imaplib<2>.
* imghdr::
* importlib: importlib<8>.
* inspect: inspect<7>.
* io: io<5>.
* ipaddress: ipaddress<4>.
* json: json<2>.
* linecache: linecache<2>.
* locale: locale<6>.
* logging: logging<5>.
* lzma::
* math: math<8>.
* multiprocessing: multiprocessing<6>.
* operador: operador<2>.
* os: os<10>.
* pathlib: pathlib<10>.
* pickle: pickle<3>.
* poplib: poplib<2>.
* re: re<7>.
* readline: readline<2>.
* selectors::
* shutil: shutil<5>.
* signal: signal<3>.
* smtpd: smtpd<2>.
* smtplib: smtplib<2>.
* sndhdr::
* socket: socket<8>.
* ssl: ssl<9>.
* sqlite3: sqlite3<8>.
* subprocess: subprocess<4>.
* sys: sys<11>.
* sysconfig: sysconfig<2>.
* tarfile: tarfile<7>.
* threading: threading<6>.
* time: time<7>.
* timeit: timeit<2>.
* tkinter: tkinter<8>.
* traceback: traceback<5>.
* types: types<5>.
* unicodedata: unicodedata<8>.
* unittest: unittest<8>.
* unittest.mock: unittest mock<3>.
* urllib: urllib<2>.
* wsgiref::
* xmlrpc: xmlrpc<2>.
* xml.sax: xml sax.
* zipfile: zipfile<4>.


File: python.info,  Node: argparse<4>,  Next: asyncio<10>,  Up: Módulos melhorados<9>

1.9.5.1 argparse
................

The *note ArgumentParser: 539. class now allows disabling *note
abbreviated usage: de7. of long options by setting *note allow_abbrev:
de8. to ‘False’.  (Contributed by Jonathan Paugh, Steven Bethard, paul
j3 and Daniel Eriksson in bpo-14910(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14910


File: python.info,  Node: asyncio<10>,  Next: bz2,  Prev: argparse<4>,  Up: Módulos melhorados<9>

1.9.5.2 asyncio
...............

Since the *note asyncio: a. module is *note provisional: b16, all
changes introduced in Python 3.5 have also been backported to Python
3.4.x.

Notable changes in the *note asyncio: a. module since Python 3.4.0:

   * New debugging APIs: *note loop.set_debug(): dea. and *note
     loop.get_debug(): deb. methods.  (Contributed by Victor Stinner.)

   * The proactor event loop now supports SSL. (Contributed by Antoine
     Pitrou and Victor Stinner in bpo-22560(1).)

   * A new *note loop.is_closed(): dec. method to check if the event
     loop is closed.  (Contributed by Victor Stinner in bpo-21326(2).)

   * A new *note loop.create_task(): 1c0. to conveniently create and
     schedule a new *note Task: 1be. for a coroutine.  The ‘create_task’
     method is also used by all asyncio functions that wrap coroutines
     into tasks, such as *note asyncio.wait(): 47f, *note
     asyncio.gather(): 5fd, etc.  (Contributed by Victor Stinner.)

   * A new *note transport.get_write_buffer_limits(): ded. method to
     inquire for 'high-' and 'low-' water limits of the flow control.
     (Contributed by Victor Stinner.)

   * The ‘async()’ function is deprecated in favor of *note
     ensure_future(): c92.  (Contributed by Yury Selivanov.)

   * New *note loop.set_task_factory(): dee. and *note
     loop.get_task_factory(): def. methods to customize the task factory
     that *note loop.create_task(): 1c0. method uses.  (Contributed by
     Yury Selivanov.)

   * New *note Queue.join(): df0. and *note Queue.task_done(): df1.
     queue methods.  (Contributed by Victor Stinner.)

   * The ‘JoinableQueue’ class was removed, in favor of the *note
     asyncio.Queue: a80. class.  (Contributed by Victor Stinner.)

Updates in 3.5.1:

   * The *note ensure_future(): c92. function and all functions that use
     it, such as *note loop.run_until_complete(): c93, now accept all
     kinds of *note awaitable objects: 1ad.  (Contributed by Yury
     Selivanov.)

   * New *note run_coroutine_threadsafe(): 886. function to submit
     coroutines to event loops from other threads.  (Contributed by
     Vincent Michel.)

   * New *note Transport.is_closing(): c94. method to check if the
     transport is closing or closed.  (Contributed by Yury Selivanov.)

   * The *note loop.create_server(): b25. method can now accept a list
     of hosts.  (Contributed by Yann Sionneau.)

Updates in 3.5.2:

   * New *note loop.create_future(): c95. method to create Future
     objects.  This allows alternative event loop implementations, such
     as uvloop(3), to provide a faster *note asyncio.Future: be6.
     implementation.  (Contributed by Yury Selivanov.)

   * New *note loop.get_exception_handler(): c96. method to get the
     current exception handler.  (Contributed by Yury Selivanov.)

   * New *note StreamReader.readuntil(): 1b4. method to read data from
     the stream until a separator bytes sequence appears.  (Contributed
     by Mark Korenberg.)

   * The *note loop.create_connection(): 603. and *note
     loop.create_server(): b25. methods are optimized to avoid calling
     the system ‘getaddrinfo’ function if the address is already
     resolved.  (Contributed by A. Jesse Jiryu Davis.)

   * The *note loop.sock_connect(sock, address): df2. no longer requires
     the 'address' to be resolved prior to the call.  (Contributed by A.
     Jesse Jiryu Davis.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22560

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21326

   (3) https://github.com/MagicStack/uvloop


File: python.info,  Node: bz2,  Next: cgi,  Prev: asyncio<10>,  Up: Módulos melhorados<9>

1.9.5.3 bz2
...........

The *note BZ2Decompressor.decompress: df4. method now accepts an
optional 'max_length' argument to limit the maximum size of decompressed
data.  (Contributed by Nikolaus Rath in bpo-15955(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15955


File: python.info,  Node: cgi,  Next: cmath<2>,  Prev: bz2,  Up: Módulos melhorados<9>

1.9.5.4 cgi
...........

The ‘FieldStorage’ class now supports the *note context manager: 5d4.
protocol.  (Contributed by Berker Peksag in bpo-20289(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20289


File: python.info,  Node: cmath<2>,  Next: código,  Prev: cgi,  Up: Módulos melhorados<9>

1.9.5.5 cmath
.............

A new function *note isclose(): dd9. provides a way to test for
approximate equality.  (Contributed by Chris Barker and Tal Einat in
bpo-24270(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24270


File: python.info,  Node: código,  Next: collections<5>,  Prev: cmath<2>,  Up: Módulos melhorados<9>

1.9.5.6 código
..............

The *note InteractiveInterpreter.showtraceback(): df8. method now prints
the full chained traceback, just like the interactive interpreter.
(Contributed by Claudiu Popa in bpo-17442(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17442


File: python.info,  Node: collections<5>,  Next: collections abc<3>,  Prev: código,  Up: Módulos melhorados<9>

1.9.5.7 collections
...................

The *note OrderedDict: 5db. class is now implemented in C, which makes
it 4 to 100 times faster.  (Contributed by Eric Snow in bpo-16991(1).)

‘OrderedDict.items()’, ‘OrderedDict.keys()’, and ‘OrderedDict.values()’
views now support *note reversed(): 869. iteration.  (Contributed by
Serhiy Storchaka in bpo-19505(2).)

The *note deque: 5dc. class now defines *note index(): dfa, *note
insert(): dfb, and *note copy(): dfc, and supports the ‘+’ and ‘*’
operators.  This allows deques to be recognized as a *note
MutableSequence: 1a1. and improves their substitutability for lists.
(Contributed by Raymond Hettinger in bpo-23704(3).)

Docstrings produced by *note namedtuple(): 1ca. can now be updated:

     Point = namedtuple('Point', ['x', 'y'])
     Point.__doc__ += ': Cartesian coordinate'
     Point.x.__doc__ = 'abscissa'
     Point.y.__doc__ = 'ordinate'

(Contributed by Berker Peksag in bpo-24064(4).)

The *note UserString: dfd. class now implements the *note
__getnewargs__(): dfe, *note __rmod__(): dff, *note casefold(): e00,
*note format_map(): e01, *note isprintable(): e02, and *note
maketrans(): e03. methods to match the corresponding methods of *note
str: 44c.  (Contributed by Joe Jevnik in bpo-22189(5).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16991

   (2) https://bugs.python.org/issue?@action=redirect&bpo=19505

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23704

   (4) https://bugs.python.org/issue?@action=redirect&bpo=24064

   (5) https://bugs.python.org/issue?@action=redirect&bpo=22189


File: python.info,  Node: collections abc<3>,  Next: compileall<4>,  Prev: collections<5>,  Up: Módulos melhorados<9>

1.9.5.8 collections.abc
.......................

The ‘Sequence.index()’ method now accepts 'start' and 'stop' arguments
to match the corresponding methods of *note tuple: 370, *note list: 611,
etc.  (Contributed by Devin Jeanpierre in bpo-23086(1).)

A new *note Generator: e05. abstract base class.  (Contributed by Stefan
Behnel in bpo-24018(2).)

New *note Awaitable: e06, *note Coroutine: e07, *note AsyncIterator:
e08, and *note AsyncIterable: e09. abstract base classes.  (Contributed
by Yury Selivanov in bpo-24184(3).)

For earlier Python versions, a backport of the new ABCs is available in
an external PyPI package(4).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23086

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24018

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24184

   (4) https://pypi.org/project/backports_abc/


File: python.info,  Node: compileall<4>,  Next: concurrent futures<5>,  Prev: collections abc<3>,  Up: Módulos melhorados<9>

1.9.5.9 compileall
..................

A new *note compileall: 20. option, ‘-j N’, allows running 'N' workers
simultaneously to perform parallel bytecode compilation.  The *note
compile_dir(): b38. function has a corresponding ‘workers’ parameter.
(Contributed by Claudiu Popa in bpo-16104(1).)

Another new option, ‘-r’, allows controlling the maximum recursion level
for subdirectories.  (Contributed by Claudiu Popa in bpo-19628(2).)

The ‘-q’ command line option can now be specified more than once, in
which case all output, including errors, will be suppressed.  The
corresponding ‘quiet’ parameter in *note compile_dir(): b38, *note
compile_file(): e0b, and *note compile_path(): e0c. can now accept an
integer value indicating the level of output suppression.  (Contributed
by Thomas Kluyver in bpo-21338(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16104

   (2) https://bugs.python.org/issue?@action=redirect&bpo=19628

   (3) https://bugs.python.org/issue?@action=redirect&bpo=21338


File: python.info,  Node: concurrent futures<5>,  Next: configparser<4>,  Prev: compileall<4>,  Up: Módulos melhorados<9>

1.9.5.10 concurrent.futures
...........................

The *note Executor.map(): e0e. method now accepts a 'chunksize' argument
to allow batching of tasks to improve performance when *note
ProcessPoolExecutor(): 8f4. is used.  (Contributed by Dan O’Reilly in
bpo-11271(1).)

The number of workers in the *note ThreadPoolExecutor: 742. constructor
is optional now.  The default value is 5 times the number of CPUs.
(Contributed by Claudiu Popa in bpo-21527(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=11271

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21527


File: python.info,  Node: configparser<4>,  Next: contextlib<5>,  Prev: concurrent futures<5>,  Up: Módulos melhorados<9>

1.9.5.11 configparser
.....................

*note configparser: 22. now provides a way to customize the conversion
of values by specifying a dictionary of converters in the *note
ConfigParser: 1c8. constructor, or by defining them as methods in
‘ConfigParser’ subclasses.  Converters defined in a parser instance are
inherited by its section proxies.

Exemplo:

     >>> import configparser
     >>> conv = {}
     >>> conv['list'] = lambda v: [e.strip() for e in v.split() if e.strip()]
     >>> cfg = configparser.ConfigParser(converters=conv)
     >>> cfg.read_string("""
     ... [s]
     ... list = a b c d e f g
     ... """)
     >>> cfg.get('s', 'list')
     'a b c d e f g'
     >>> cfg.getlist('s', 'list')
     ['a', 'b', 'c', 'd', 'e', 'f', 'g']
     >>> section = cfg['s']
     >>> section.getlist('list')
     ['a', 'b', 'c', 'd', 'e', 'f', 'g']

(Contributed by Łukasz Langa in bpo-18159(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18159


File: python.info,  Node: contextlib<5>,  Next: csv<3>,  Prev: configparser<4>,  Up: Módulos melhorados<9>

1.9.5.12 contextlib
...................

The new *note redirect_stderr(): e11. *note context manager: 5d4.
(similar to *note redirect_stdout(): e12.) makes it easier for utility
scripts to handle inflexible APIs that write their output to *note
sys.stderr: 940. and don’t provide any options to redirect it:

     >>> import contextlib, io, logging
     >>> f = io.StringIO()
     >>> with contextlib.redirect_stderr(f):
     ...     logging.warning('warning')
     ...
     >>> f.getvalue()
     'WARNING:root:warning\n'

(Contributed by Berker Peksag in bpo-22389(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22389


File: python.info,  Node: csv<3>,  Next: curses<4>,  Prev: contextlib<5>,  Up: Módulos melhorados<9>

1.9.5.13 csv
............

The *note writerow(): e14. method now supports arbitrary iterables, not
just sequences.  (Contributed by Serhiy Storchaka in bpo-23171(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23171


File: python.info,  Node: curses<4>,  Next: dbm<5>,  Prev: csv<3>,  Up: Módulos melhorados<9>

1.9.5.14 curses
...............

The new *note update_lines_cols(): e16. function updates the *note
LINES: e17. and *note COLS: e18. module variables.  This is useful for
detecting manual screen resizing.  (Contributed by Arnon Yaari in
bpo-4254(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=4254


File: python.info,  Node: dbm<5>,  Next: difflib,  Prev: curses<4>,  Up: Módulos melhorados<9>

1.9.5.15 dbm
............

*note dumb.open: aa5. always creates a new database when the flag has
the value ‘"n"’.  (Contributed by Claudiu Popa in bpo-18039(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18039


File: python.info,  Node: difflib,  Next: distutils<7>,  Prev: dbm<5>,  Up: Módulos melhorados<9>

1.9.5.16 difflib
................

The charset of HTML documents generated by *note HtmlDiff.make_file():
e1b. can now be customized by using a new 'charset' keyword-only
argument.  The default charset of HTML document changed from
‘"ISO-8859-1"’ to ‘"utf-8"’.  (Contributed by Berker Peksag in
bpo-2052(1).)

The *note diff_bytes(): e1c. function can now compare lists of byte
strings.  This fixes a regression from Python 2.  (Contributed by Terry
J. Reedy and Greg Ward in bpo-17445(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=2052

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17445


File: python.info,  Node: distutils<7>,  Next: doctest<3>,  Prev: difflib,  Up: Módulos melhorados<9>

1.9.5.17 distutils
..................

Both the ‘build’ and ‘build_ext’ commands now accept a ‘-j’ option to
enable parallel building of extension modules.  (Contributed by Antoine
Pitrou in bpo-5309(1).)

The ‘distutils’ module now supports ‘xz’ compression, and can be enabled
by passing ‘xztar’ as an argument to ‘bdist --format’.  (Contributed by
Serhiy Storchaka in bpo-16314(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5309

   (2) https://bugs.python.org/issue?@action=redirect&bpo=16314


File: python.info,  Node: doctest<3>,  Next: email<3>,  Prev: distutils<7>,  Up: Módulos melhorados<9>

1.9.5.18 doctest
................

The *note DocTestSuite(): e1f. function returns an empty *note
unittest.TestSuite: e20. if 'module' contains no docstrings, instead of
raising *note ValueError: 202.  (Contributed by Glenn Jones in
bpo-15916(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15916


File: python.info,  Node: email<3>,  Next: enum<8>,  Prev: doctest<3>,  Up: Módulos melhorados<9>

1.9.5.19 email
..............

A new policy option *note Policy.mangle_from_: e22. controls whether or
not lines that start with ‘"From "’ in email bodies are prefixed with a
‘">"’ character by generators.  The default is ‘True’ for *note
compat32: cb8. and ‘False’ for all other policies.  (Contributed by
Milan Oberkirch in bpo-20098(1).)

A new *note Message.get_content_disposition(): e23. method provides easy
access to a canonical value for the ‘Content-Disposition’ header.
(Contributed by Abhilash Raj in bpo-21083(2).)

A new policy option *note EmailPolicy.utf8: e24. can be set to ‘True’ to
encode email headers using the UTF-8 charset instead of using encoded
words.  This allows ‘Messages’ to be formatted according to RFC 6532(3)
and used with an SMTP server that supports the RFC 6531(4) ‘SMTPUTF8’
extension.  (Contributed by R. David Murray in bpo-24211(5).)

The *note mime.text.MIMEText: e25. constructor now accepts a *note
charset.Charset: e26. instance.  (Contributed by Claude Paroz and Berker
Peksag in bpo-16324(6).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20098

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21083

   (3) https://datatracker.ietf.org/doc/html/rfc6532.html

   (4) https://datatracker.ietf.org/doc/html/rfc6531.html

   (5) https://bugs.python.org/issue?@action=redirect&bpo=24211

   (6) https://bugs.python.org/issue?@action=redirect&bpo=16324


File: python.info,  Node: enum<8>,  Next: faulthandler<3>,  Prev: email<3>,  Up: Módulos melhorados<9>

1.9.5.20 enum
.............

The *note Enum: 630. callable has a new parameter 'start' to specify the
initial number of enum values if only 'names' are provided:

     >>> Animal = enum.Enum('Animal', 'cat dog', start=10)
     >>> Animal.cat
     <Animal.cat: 10>
     >>> Animal.dog
     <Animal.dog: 11>

(Contributed by Ethan Furman in bpo-21706(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21706


File: python.info,  Node: faulthandler<3>,  Next: functools<4>,  Prev: enum<8>,  Up: Módulos melhorados<9>

1.9.5.21 faulthandler
.....................

The *note enable(): cbe, *note register(): e29, *note dump_traceback():
e2a. and *note dump_traceback_later(): e2b. functions now accept file
descriptors in addition to file-like objects.  (Contributed by Wei Wu in
bpo-23566(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23566


File: python.info,  Node: functools<4>,  Next: glob<3>,  Prev: faulthandler<3>,  Up: Módulos melhorados<9>

1.9.5.22 functools
..................

Most of the *note lru_cache(): 9f7. machinery is now implemented in C,
making it significantly faster.  (Contributed by Matt Joiner, Alexey
Kachayev, and Serhiy Storchaka in bpo-14373(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14373


File: python.info,  Node: glob<3>,  Next: gzip<4>,  Prev: functools<4>,  Up: Módulos melhorados<9>

1.9.5.23 glob
.............

The *note iglob(): 80a. and *note glob(): 29f. functions now support
recursive search in subdirectories, using the ‘"**"’ pattern.
(Contributed by Serhiy Storchaka in bpo-13968(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13968


File: python.info,  Node: gzip<4>,  Next: heapq,  Prev: glob<3>,  Up: Módulos melhorados<9>

1.9.5.24 gzip
.............

The 'mode' argument of the *note GzipFile: 41a. constructor now accepts
‘"x"’ to request exclusive creation.  (Contributed by Tim Heaney in
bpo-19222(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19222


File: python.info,  Node: heapq,  Next: http<2>,  Prev: gzip<4>,  Up: Módulos melhorados<9>

1.9.5.25 heapq
..............

Element comparison in *note merge(): e30. can now be customized by
passing a *note key function: e31. in a new optional 'key' keyword
argument, and a new optional 'reverse' keyword argument can be used to
reverse element comparison:

     >>> import heapq
     >>> a = ['9', '777', '55555']
     >>> b = ['88', '6666']
     >>> list(heapq.merge(a, b, key=len))
     ['9', '88', '777', '6666', '55555']
     >>> list(heapq.merge(reversed(a), reversed(b), key=len, reverse=True))
     ['55555', '6666', '777', '88', '9']

(Contributed by Raymond Hettinger in bpo-13742(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13742


File: python.info,  Node: http<2>,  Next: http client<3>,  Prev: heapq,  Up: Módulos melhorados<9>

1.9.5.26 http
.............

A new *note HTTPStatus: 906. enum that defines a set of HTTP status
codes, reason phrases and long descriptions written in English.
(Contributed by Demian Brecht in bpo-21793(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21793


File: python.info,  Node: http client<3>,  Next: idlelib e IDLE<3>,  Prev: http<2>,  Up: Módulos melhorados<9>

1.9.5.27 http.client
....................

*note HTTPConnection.getresponse(): e34. now raises a *note
RemoteDisconnected: e35. exception when a remote server connection is
closed unexpectedly.  Additionally, if a *note ConnectionError: e36. (of
which ‘RemoteDisconnected’ is a subclass) is raised, the client socket
is now closed automatically, and will reconnect on the next request:

     import http.client
     conn = http.client.HTTPConnection('www.python.org')
     for retries in range(3):
         try:
             conn.request('GET', '/')
             resp = conn.getresponse()
         except http.client.RemoteDisconnected:
             pass

(Contributed by Martin Panter in bpo-3566(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=3566


File: python.info,  Node: idlelib e IDLE<3>,  Next: imaplib<2>,  Prev: http client<3>,  Up: Módulos melhorados<9>

1.9.5.28 idlelib e IDLE
.......................

Since idlelib implements the IDLE shell and editor and is not intended
for import by other programs, it gets improvements with every release.
See ‘Lib/idlelib/NEWS.txt’ for a cumulative list of changes since 3.4.0,
as well as changes made in future 3.5.x releases.  This file is also
available from the IDLE Help ‣ About IDLE dialog.


File: python.info,  Node: imaplib<2>,  Next: imghdr,  Prev: idlelib e IDLE<3>,  Up: Módulos melhorados<9>

1.9.5.29 imaplib
................

The *note IMAP4: 909. class now supports the *note context manager: 5d4.
protocol.  When used in a *note with: 5d2. statement, the IMAP4 ‘LOGOUT’
command will be called automatically at the end of the block.
(Contributed by Tarek Ziadé and Serhiy Storchaka in bpo-4972(1).)

The *note imaplib: 74. module now supports RFC 5161(2) (ENABLE
Extension) and RFC 6855(3) (UTF-8 Support) via the *note IMAP4.enable():
e39. method.  A new *note IMAP4.utf8_enabled: e3a. attribute tracks
whether or not RFC 6855(4) support is enabled.  (Contributed by Milan
Oberkirch, R. David Murray, and Maciej Szulik in bpo-21800(5).)

The *note imaplib: 74. module now automatically encodes non-ASCII string
usernames and passwords using UTF-8, as recommended by the RFCs.
(Contributed by Milan Oberkirch in bpo-21800(6).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=4972

   (2) https://datatracker.ietf.org/doc/html/rfc5161.html

   (3) https://datatracker.ietf.org/doc/html/rfc6855.html

   (4) https://datatracker.ietf.org/doc/html/rfc6855.html

   (5) https://bugs.python.org/issue?@action=redirect&bpo=21800

   (6) https://bugs.python.org/issue?@action=redirect&bpo=21800


File: python.info,  Node: imghdr,  Next: importlib<8>,  Prev: imaplib<2>,  Up: Módulos melhorados<9>

1.9.5.30 imghdr
...............

The ‘what()’ function now recognizes the OpenEXR(1) format (contributed
by Martin Vignali and Claudiu Popa in bpo-20295(2)), and the WebP(3)
format (contributed by Fabrice Aneche and Claudiu Popa in bpo-20197(4).)

   ---------- Footnotes ----------

   (1) https://www.openexr.com

   (2) https://bugs.python.org/issue?@action=redirect&bpo=20295

   (3) https://en.wikipedia.org/wiki/WebP

   (4) https://bugs.python.org/issue?@action=redirect&bpo=20197


File: python.info,  Node: importlib<8>,  Next: inspect<7>,  Prev: imghdr,  Up: Módulos melhorados<9>

1.9.5.31 importlib
..................

The *note util.LazyLoader: ccd. class allows for lazy loading of modules
in applications where startup time is important.  (Contributed by Brett
Cannon in bpo-17621(1).)

The *note abc.InspectLoader.source_to_code(): e3d. method is now a
static method.  This makes it easier to initialize a module object with
code compiled from a string by running ‘exec(code, module.__dict__)’.
(Contributed by Brett Cannon in bpo-21156(2).)

The new *note util.module_from_spec(): e3e. function is now the
preferred way to create a new module.  As opposed to creating a *note
types.ModuleType: e3f. instance directly, this new function will set the
various import-controlled attributes based on the passed-in spec object.
(Contributed by Brett Cannon in bpo-20383(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17621

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21156

   (3) https://bugs.python.org/issue?@action=redirect&bpo=20383


File: python.info,  Node: inspect<7>,  Next: io<5>,  Prev: importlib<8>,  Up: Módulos melhorados<9>

1.9.5.32 inspect
................

Both the *note Signature: 1cf. and *note Parameter: 1d0. classes are now
picklable and hashable.  (Contributed by Yury Selivanov in bpo-20726(1)
and bpo-20334(2).)

A new *note BoundArguments.apply_defaults(): e41. method provides a way
to set default values for missing arguments:

     >>> def foo(a, b='ham', *args): pass
     >>> ba = inspect.signature(foo).bind('spam')
     >>> ba.apply_defaults()
     >>> ba.arguments
     OrderedDict([('a', 'spam'), ('b', 'ham'), ('args', ())])

(Contributed by Yury Selivanov in bpo-24190(3).)

A new class method *note Signature.from_callable(): 73a. makes
subclassing of *note Signature: 1cf. easier.  (Contributed by Yury
Selivanov and Eric Snow in bpo-17373(4).)

The *note signature(): 738. function now accepts a 'follow_wrapped'
optional keyword argument, which, when set to ‘False’, disables
automatic following of ‘__wrapped__’ links.  (Contributed by Yury
Selivanov in bpo-20691(5).)

A set of new functions to inspect *note coroutine functions: d9b. and
*note coroutine objects: 491. has been added: *note iscoroutine(): e42,
*note iscoroutinefunction(): 2e4, *note isawaitable(): e43, *note
getcoroutinelocals(): e44, and *note getcoroutinestate(): e45.
(Contributed by Yury Selivanov in bpo-24017(6) and bpo-24400(7).)

The *note stack(): 652, *note trace(): 653, *note getouterframes(): 650,
and *note getinnerframes(): 651. functions now return a list of named
tuples.  (Contributed by Daniel Shahaf in bpo-16808(8).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20726

   (2) https://bugs.python.org/issue?@action=redirect&bpo=20334

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24190

   (4) https://bugs.python.org/issue?@action=redirect&bpo=17373

   (5) https://bugs.python.org/issue?@action=redirect&bpo=20691

   (6) https://bugs.python.org/issue?@action=redirect&bpo=24017

   (7) https://bugs.python.org/issue?@action=redirect&bpo=24400

   (8) https://bugs.python.org/issue?@action=redirect&bpo=16808


File: python.info,  Node: io<5>,  Next: ipaddress<4>,  Prev: inspect<7>,  Up: Módulos melhorados<9>

1.9.5.33 io
...........

A new *note BufferedIOBase.readinto1(): e47. method, that uses at most
one call to the underlying raw stream’s *note RawIOBase.read(): e48. or
*note RawIOBase.readinto(): e49. methods.  (Contributed by Nikolaus Rath
in bpo-20578(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20578


File: python.info,  Node: ipaddress<4>,  Next: json<2>,  Prev: io<5>,  Up: Módulos melhorados<9>

1.9.5.34 ipaddress
..................

Both the *note IPv4Network: 1fe. and *note IPv6Network: 1ff. classes now
accept an ‘(address, netmask)’ tuple argument, so as to easily construct
network objects from existing addresses:

     >>> import ipaddress
     >>> ipaddress.IPv4Network(('127.0.0.0', 8))
     IPv4Network('127.0.0.0/8')
     >>> ipaddress.IPv4Network(('127.0.0.0', '255.0.0.0'))
     IPv4Network('127.0.0.0/8')

(Contributed by Peter Moody and Antoine Pitrou in bpo-16531(1).)

A new *note reverse_pointer: e4b. attribute for the *note IPv4Address:
1fc. and *note IPv6Address: 1fd. classes returns the name of the reverse
DNS PTR record:

     >>> import ipaddress
     >>> addr = ipaddress.IPv4Address('127.0.0.1')
     >>> addr.reverse_pointer
     '1.0.0.127.in-addr.arpa'
     >>> addr6 = ipaddress.IPv6Address('::1')
     >>> addr6.reverse_pointer
     '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa'

(Contributed by Leon Weber in bpo-20480(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16531

   (2) https://bugs.python.org/issue?@action=redirect&bpo=20480


File: python.info,  Node: json<2>,  Next: linecache<2>,  Prev: ipaddress<4>,  Up: Módulos melhorados<9>

1.9.5.35 json
.............

The *note json.tool: 83. command line interface now preserves the order
of keys in JSON objects passed in input.  The new ‘--sort-keys’ option
can be used to sort the keys alphabetically.  (Contributed by Berker
Peksag in bpo-21650(1).)

JSON decoder now raises *note JSONDecodeError: e4d. instead of *note
ValueError: 202. to provide better context information about the error.
(Contributed by Serhiy Storchaka in bpo-19361(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21650

   (2) https://bugs.python.org/issue?@action=redirect&bpo=19361


File: python.info,  Node: linecache<2>,  Next: locale<6>,  Prev: json<2>,  Up: Módulos melhorados<9>

1.9.5.36 linecache
..................

A new *note lazycache(): e4f. function can be used to capture
information about a non-file-based module to permit getting its lines
later via *note getline(): e50.  This avoids doing I/O until a line is
actually needed, without having to carry the module globals around
indefinitely.  (Contributed by Robert Collins in bpo-17911(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17911


File: python.info,  Node: locale<6>,  Next: logging<5>,  Prev: linecache<2>,  Up: Módulos melhorados<9>

1.9.5.37 locale
...............

A new *note delocalize(): e52. function can be used to convert a string
into a normalized number string, taking the ‘LC_NUMERIC’ settings into
account:

     >>> import locale
     >>> locale.setlocale(locale.LC_NUMERIC, 'de_DE.UTF-8')
     'de_DE.UTF-8'
     >>> locale.delocalize('1.234,56')
     '1234.56'
     >>> locale.setlocale(locale.LC_NUMERIC, 'en_US.UTF-8')
     'en_US.UTF-8'
     >>> locale.delocalize('1,234.56')
     '1234.56'

(Contributed by Cédric Krier in bpo-13918(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13918


File: python.info,  Node: logging<5>,  Next: lzma,  Prev: locale<6>,  Up: Módulos melhorados<9>

1.9.5.38 logging
................

All logging methods (*note Logger: b64. *note log(): e54, *note
exception(): e55, *note critical(): e56, *note debug(): e57, etc.), now
accept exception instances as an 'exc_info' argument, in addition to
boolean values and exception tuples:

     >>> import logging
     >>> try:
     ...     1/0
     ... except ZeroDivisionError as ex:
     ...     logging.error('exception', exc_info=ex)
     ERROR:root:exception

(Contributed by Yury Selivanov in bpo-20537(1).)

The *note handlers.HTTPHandler: e58. class now accepts an optional *note
ssl.SSLContext: 294. instance to configure SSL settings used in an HTTP
connection.  (Contributed by Alex Gaynor in bpo-22788(2).)

The *note handlers.QueueListener: e59. class now takes a
'respect_handler_level' keyword argument which, if set to ‘True’, will
pass messages to handlers taking handler levels into account.
(Contributed by Vinay Sajip.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20537

   (2) https://bugs.python.org/issue?@action=redirect&bpo=22788


File: python.info,  Node: lzma,  Next: math<8>,  Prev: logging<5>,  Up: Módulos melhorados<9>

1.9.5.39 lzma
.............

The *note LZMADecompressor.decompress(): e5b. method now accepts an
optional 'max_length' argument to limit the maximum size of decompressed
data.  (Contributed by Martin Panter in bpo-15955(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15955


File: python.info,  Node: math<8>,  Next: multiprocessing<6>,  Prev: lzma,  Up: Módulos melhorados<9>

1.9.5.40 math
.............

Two new constants have been added to the *note math: 8e. module: *note
inf: ca1. and *note nan: 663.  (Contributed by Mark Dickinson in
bpo-23185(1).)

A new function *note isclose(): dd8. provides a way to test for
approximate equality.  (Contributed by Chris Barker and Tal Einat in
bpo-24270(2).)

A new *note gcd(): 916. function has been added.  The ‘fractions.gcd()’
function is now deprecated.  (Contributed by Mark Dickinson and Serhiy
Storchaka in bpo-22486(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23185

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24270

   (3) https://bugs.python.org/issue?@action=redirect&bpo=22486


File: python.info,  Node: multiprocessing<6>,  Next: operador<2>,  Prev: math<8>,  Up: Módulos melhorados<9>

1.9.5.41 multiprocessing
........................

*note sharedctypes.synchronized(): e5e. objects now support the *note
context manager: 5d4. protocol.  (Contributed by Charles-François Natali
in bpo-21565(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21565


File: python.info,  Node: operador<2>,  Next: os<10>,  Prev: multiprocessing<6>,  Up: Módulos melhorados<9>

1.9.5.42 operador
.................

*note attrgetter(): e60, *note itemgetter(): a6b, and *note
methodcaller(): e61. objects now support pickling.  (Contributed by Josh
Rosenberg and Serhiy Storchaka in bpo-22955(1).)

New *note matmul(): e62. and *note imatmul(): e63. functions to perform
matrix multiplication.  (Contributed by Benjamin Peterson in
bpo-21176(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22955

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21176


File: python.info,  Node: os<10>,  Next: pathlib<10>,  Prev: operador<2>,  Up: Módulos melhorados<9>

1.9.5.43 os
...........

The new *note scandir(): a68. function returning an iterator of *note
DirEntry: 49b. objects has been added.  If possible, *note scandir():
a68. extracts file attributes while scanning a directory, removing the
need to perform subsequent system calls to determine file type or
attributes, which may significantly improve performance.  (Contributed
by Ben Hoyt with the help of Victor Stinner in bpo-22524(1).)

On Windows, a new *note stat_result.st_file_attributes: e65. attribute
is now available.  It corresponds to the ‘dwFileAttributes’ member of
the ‘BY_HANDLE_FILE_INFORMATION’ structure returned by
‘GetFileInformationByHandle()’.  (Contributed by Ben Hoyt in
bpo-21719(2).)

The *note urandom(): 523. function now uses the ‘getrandom()’ syscall on
Linux 3.17 or newer, and ‘getentropy()’ on OpenBSD 5.6 and newer,
removing the need to use ‘/dev/urandom’ and avoiding failures due to
potential file descriptor exhaustion.  (Contributed by Victor Stinner in
bpo-22181(3).)

New *note get_blocking(): e66. and *note set_blocking(): e67. functions
allow getting and setting a file descriptor’s blocking mode (*note
O_NONBLOCK: e68.)  (Contributed by Victor Stinner in bpo-22054(4).)

The *note truncate(): e69. and *note ftruncate(): db7. functions are now
supported on Windows.  (Contributed by Steve Dower in bpo-23668(5).)

There is a new *note os.path.commonpath(): e6a. function returning the
longest common sub-path of each passed pathname.  Unlike the *note
os.path.commonprefix(): e6b. function, it always returns a valid path:

     >>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])
     '/usr/l'

     >>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])
     '/usr'

(Contributed by Rafik Draoui and Serhiy Storchaka in bpo-10395(6).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22524

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21719

   (3) https://bugs.python.org/issue?@action=redirect&bpo=22181

   (4) https://bugs.python.org/issue?@action=redirect&bpo=22054

   (5) https://bugs.python.org/issue?@action=redirect&bpo=23668

   (6) https://bugs.python.org/issue?@action=redirect&bpo=10395


File: python.info,  Node: pathlib<10>,  Next: pickle<3>,  Prev: os<10>,  Up: Módulos melhorados<9>

1.9.5.44 pathlib
................

The new *note Path.samefile(): e6d. method can be used to check whether
the path points to the same file as another path, which can be either
another *note Path: 229. object, or a string:

     >>> import pathlib
     >>> p1 = pathlib.Path('/etc/hosts')
     >>> p2 = pathlib.Path('/etc/../etc/hosts')
     >>> p1.samefile(p2)
     True

(Contributed by Vajrasky Kok and Antoine Pitrou in bpo-19775(1).)

The *note Path.mkdir(): e6e. method now accepts a new optional
'exist_ok' argument to match ‘mkdir -p’ and *note os.makedirs(): 21e.
functionality.  (Contributed by Berker Peksag in bpo-21539(2).)

There is a new *note Path.expanduser(): e6f. method to expand ‘~’ and
‘~user’ prefixes.  (Contributed by Serhiy Storchaka and Claudiu Popa in
bpo-19776(3).)

A new *note Path.home(): e70. class method can be used to get a *note
Path: 229. instance representing the user’s home directory.
(Contributed by Victor Salgado and Mayank Tripathi in bpo-19777(4).)

New *note Path.write_text(): e71, *note Path.read_text(): e72, *note
Path.write_bytes(): e73, *note Path.read_bytes(): e74. methods to
simplify read/write operations on files.

The following code snippet will create or rewrite existing file
‘~/spam42’:

     >>> import pathlib
     >>> p = pathlib.Path('~/spam42')
     >>> p.expanduser().write_text('ham')
     3

(Contributed by Christopher Welborn in bpo-20218(5).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19775

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21539

   (3) https://bugs.python.org/issue?@action=redirect&bpo=19776

   (4) https://bugs.python.org/issue?@action=redirect&bpo=19777

   (5) https://bugs.python.org/issue?@action=redirect&bpo=20218


File: python.info,  Node: pickle<3>,  Next: poplib<2>,  Prev: pathlib<10>,  Up: Módulos melhorados<9>

1.9.5.45 pickle
...............

Nested objects, such as unbound methods or nested classes, can now be
pickled using *note pickle protocols: ce1. older than protocol version
4.  Protocol version 4 already supports these cases.  (Contributed by
Serhiy Storchaka in bpo-23611(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23611


File: python.info,  Node: poplib<2>,  Next: re<7>,  Prev: pickle<3>,  Up: Módulos melhorados<9>

1.9.5.46 poplib
...............

A new *note POP3.utf8(): e77. command enables RFC 6856(1)
(Internationalized Email) support, if a POP server supports it.
(Contributed by Milan OberKirch in bpo-21804(2).)

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc6856.html

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21804


File: python.info,  Node: re<7>,  Next: readline<2>,  Prev: poplib<2>,  Up: Módulos melhorados<9>

1.9.5.47 re
...........

References and conditional references to groups with fixed length are
now allowed in lookbehind assertions:

     >>> import re
     >>> pat = re.compile(r'(a|b).(?<=\1)c')
     >>> pat.match('aac')
     <_sre.SRE_Match object; span=(0, 3), match='aac'>
     >>> pat.match('bbc')
     <_sre.SRE_Match object; span=(0, 3), match='bbc'>

(Contributed by Serhiy Storchaka in bpo-9179(1).)

The number of capturing groups in regular expressions is no longer
limited to 100.  (Contributed by Serhiy Storchaka in bpo-22437(2).)

The *note sub(): 2a3. and *note subn(): 2a4. functions now replace
unmatched groups with empty strings instead of raising an exception.
(Contributed by Serhiy Storchaka in bpo-1519638(3).)

The *note re.error: 23e. exceptions have new attributes, *note msg: e79,
*note pattern: e7a, *note pos: e7b, *note lineno: e7c, and *note colno:
e7d, that provide better context information about the error:

     >>> re.compile("""
     ...     (?x)
     ...     .++
     ... """)
     Traceback (most recent call last):
        ...
     sre_constants.error: multiple repeat at position 16 (line 3, column 7)

(Contributed by Serhiy Storchaka in bpo-22578(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9179

   (2) https://bugs.python.org/issue?@action=redirect&bpo=22437

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1519638

   (4) https://bugs.python.org/issue?@action=redirect&bpo=22578


File: python.info,  Node: readline<2>,  Next: selectors,  Prev: re<7>,  Up: Módulos melhorados<9>

1.9.5.48 readline
.................

A new *note append_history_file(): e7f. function can be used to append
the specified number of trailing elements in history to the given file.
(Contributed by Bruno Cauet in bpo-22940(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22940


File: python.info,  Node: selectors,  Next: shutil<5>,  Prev: readline<2>,  Up: Módulos melhorados<9>

1.9.5.49 selectors
..................

The new *note DevpollSelector: bf2. supports efficient ‘/dev/poll’
polling on Solaris.  (Contributed by Giampaolo Rodola’ in bpo-18931(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18931


File: python.info,  Node: shutil<5>,  Next: signal<3>,  Prev: selectors,  Up: Módulos melhorados<9>

1.9.5.50 shutil
...............

The *note move(): e82. function now accepts a 'copy_function' argument,
allowing, for example, the *note copy(): a64. function to be used
instead of the default *note copy2(): a65. if there is a need to ignore
file metadata when moving.  (Contributed by Claudiu Popa in
bpo-19840(1).)

The *note make_archive(): 4b3. function now supports the 'xztar' format.
(Contributed by Serhiy Storchaka in bpo-5411(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19840

   (2) https://bugs.python.org/issue?@action=redirect&bpo=5411


File: python.info,  Node: signal<3>,  Next: smtpd<2>,  Prev: shutil<5>,  Up: Módulos melhorados<9>

1.9.5.51 signal
...............

On Windows, the *note set_wakeup_fd(): b86. function now also supports
socket handles.  (Contributed by Victor Stinner in bpo-22018(1).)

Various ‘SIG*’ constants in the *note signal: c6. module have been
converted into *note Enums: 56.  This allows meaningful names to be
printed during debugging, instead of integer “magic numbers”.
(Contributed by Giampaolo Rodola’ in bpo-21076(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22018

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21076


File: python.info,  Node: smtpd<2>,  Next: smtplib<2>,  Prev: signal<3>,  Up: Módulos melhorados<9>

1.9.5.52 smtpd
..............

Both the ‘SMTPServer’ and ‘SMTPChannel’ classes now accept a
'decode_data' keyword argument to determine if the ‘DATA’ portion of the
SMTP transaction is decoded using the ‘"utf-8"’ codec or is instead
provided to the ‘SMTPServer.process_message()’ method as a byte string.
The default is ‘True’ for backward compatibility reasons, but will
change to ‘False’ in Python 3.6.  If 'decode_data' is set to ‘False’,
the ‘process_message’ method must be prepared to accept keyword
arguments.  (Contributed by Maciej Szulik in bpo-19662(1).)

The ‘SMTPServer’ class now advertises the ‘8BITMIME’ extension ( RFC
6152(2)) if 'decode_data' has been set ‘True’.  If the client specifies
‘BODY=8BITMIME’ on the ‘MAIL’ command, it is passed to
‘SMTPServer.process_message()’ via the 'mail_options' keyword.
(Contributed by Milan Oberkirch and R. David Murray in bpo-21795(3).)

The ‘SMTPServer’ class now also supports the ‘SMTPUTF8’ extension ( RFC
6531(4): Internationalized Email).  If the client specified ‘SMTPUTF8
BODY=8BITMIME’ on the ‘MAIL’ command, they are passed to
‘SMTPServer.process_message()’ via the 'mail_options' keyword.  It is
the responsibility of the ‘process_message’ method to correctly handle
the ‘SMTPUTF8’ data.  (Contributed by Milan Oberkirch in bpo-21725(5).)

It is now possible to provide, directly or via name resolution, IPv6
addresses in the ‘SMTPServer’ constructor, and have it successfully
connect.  (Contributed by Milan Oberkirch in bpo-14758(6).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19662

   (2) https://datatracker.ietf.org/doc/html/rfc6152.html

   (3) https://bugs.python.org/issue?@action=redirect&bpo=21795

   (4) https://datatracker.ietf.org/doc/html/rfc6531.html

   (5) https://bugs.python.org/issue?@action=redirect&bpo=21725

   (6) https://bugs.python.org/issue?@action=redirect&bpo=14758


File: python.info,  Node: smtplib<2>,  Next: sndhdr,  Prev: smtpd<2>,  Up: Módulos melhorados<9>

1.9.5.53 smtplib
................

A new *note SMTP.auth(): e86. method provides a convenient way to
implement custom authentication mechanisms.  (Contributed by Milan
Oberkirch in bpo-15014(1).)

The *note SMTP.set_debuglevel(): e87. method now accepts an additional
debuglevel (2), which enables timestamps in debug messages.
(Contributed by Gavin Chappell and Maciej Szulik in bpo-16914(2).)

Both the *note SMTP.sendmail(): e88. and *note SMTP.send_message(): e89.
methods now support RFC 6531(3) (SMTPUTF8).  (Contributed by Milan
Oberkirch and R. David Murray in bpo-22027(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15014

   (2) https://bugs.python.org/issue?@action=redirect&bpo=16914

   (3) https://datatracker.ietf.org/doc/html/rfc6531.html

   (4) https://bugs.python.org/issue?@action=redirect&bpo=22027


File: python.info,  Node: sndhdr,  Next: socket<8>,  Prev: smtplib<2>,  Up: Módulos melhorados<9>

1.9.5.54 sndhdr
...............

The ‘what()’ and ‘whathdr()’ functions now return a *note namedtuple():
1ca.  (Contributed by Claudiu Popa in bpo-18615(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18615


File: python.info,  Node: socket<8>,  Next: ssl<9>,  Prev: sndhdr,  Up: Módulos melhorados<9>

1.9.5.55 socket
...............

Functions with timeouts now use a monotonic clock, instead of a system
clock.  (Contributed by Victor Stinner in bpo-22043(1).)

A new *note socket.sendfile(): e8c. method allows sending a file over a
socket by using the high-performance *note os.sendfile(): b21. function
on UNIX, resulting in uploads being from 2 to 3 times faster than when
using plain *note socket.send(): dcf.  (Contributed by Giampaolo Rodola’
in bpo-17552(2).)

The *note socket.sendall(): dd0. method no longer resets the socket
timeout every time bytes are received or sent.  The socket timeout is
now the maximum total duration to send all data.  (Contributed by Victor
Stinner in bpo-23853(3).)

The 'backlog' argument of the *note socket.listen(): e8d. method is now
optional.  By default it is set to *note SOMAXCONN: e8e. or to ‘128’,
whichever is less.  (Contributed by Charles-François Natali in
bpo-21455(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22043

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17552

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23853

   (4) https://bugs.python.org/issue?@action=redirect&bpo=21455


File: python.info,  Node: ssl<9>,  Next: sqlite3<8>,  Prev: socket<8>,  Up: Módulos melhorados<9>

1.9.5.56 ssl
............

* Menu:

* Підтримка BIO пам’яті::
* Application-Layer Protocol Negotiation Support::
* Other Changes::


File: python.info,  Node: Підтримка BIO пам’яті,  Next: Application-Layer Protocol Negotiation Support,  Up: ssl<9>

1.9.5.57 Підтримка BIO пам’яті
..............................

(Contributed by Geert Jansen in bpo-21965(1).)

The new *note SSLObject: b99. class has been added to provide SSL
protocol support for cases when the network I/O capabilities of *note
SSLSocket: 8f0. are not necessary or are suboptimal.  ‘SSLObject’
represents an SSL protocol instance, but does not implement any network
I/O methods, and instead provides a memory buffer interface.  The new
*note MemoryBIO: e91. class can be used to pass data between Python and
an SSL protocol instance.

The memory BIO SSL support is primarily intended to be used in
frameworks implementing asynchronous I/O for which *note SSLSocket:
8f0.’s readiness model (“select/poll”) is inefficient.

A new *note SSLContext.wrap_bio(): b9a. method can be used to create a
new ‘SSLObject’ instance.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21965


File: python.info,  Node: Application-Layer Protocol Negotiation Support,  Next: Other Changes,  Prev: Підтримка BIO пам’яті,  Up: ssl<9>

1.9.5.58 Application-Layer Protocol Negotiation Support
.......................................................

(Contributed by Benjamin Peterson in bpo-20188(1).)

Where OpenSSL support is present, the *note ssl: d0. module now
implements the 'Application-Layer Protocol Negotiation' TLS extension as
described in RFC 7301(2).

The new *note SSLContext.set_alpn_protocols(): e93. can be used to
specify which protocols a socket should advertise during the TLS
handshake.

The new *note SSLSocket.selected_alpn_protocol(): e94. returns the
protocol that was selected during the TLS handshake.  The *note
HAS_ALPN: e95. flag indicates whether ALPN support is present.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20188

   (2) https://datatracker.ietf.org/doc/html/rfc7301.html


File: python.info,  Node: Other Changes,  Prev: Application-Layer Protocol Negotiation Support,  Up: ssl<9>

1.9.5.59 Other Changes
......................

There is a new *note SSLSocket.version(): e97. method to query the
actual protocol version in use.  (Contributed by Antoine Pitrou in
bpo-20421(1).)

The *note SSLSocket: 8f0. class now implements a ‘SSLSocket.sendfile()’
method.  (Contributed by Giampaolo Rodola’ in bpo-17552(2).)

The ‘SSLSocket.send()’ method now raises either the *note
ssl.SSLWantReadError: e98. or *note ssl.SSLWantWriteError: e99.
exception on a non-blocking socket if the operation would block.
Previously, it would return ‘0’.  (Contributed by Nikolaus Rath in
bpo-20951(3).)

The *note cert_time_to_seconds(): e9a. function now interprets the input
time as UTC and not as local time, per RFC 5280(4).  Additionally, the
return value is always an *note int: 257.  (Contributed by Akira Li in
bpo-19940(5).)

New ‘SSLObject.shared_ciphers()’ and *note SSLSocket.shared_ciphers():
e9b. methods return the list of ciphers sent by the client during the
handshake.  (Contributed by Benjamin Peterson in bpo-23186(6).)

The *note SSLSocket.do_handshake(): e9c, *note SSLSocket.read(): e9d,
‘SSLSocket.shutdown()’, and *note SSLSocket.write(): e9e. methods of the
*note SSLSocket: 8f0. class no longer reset the socket timeout every
time bytes are received or sent.  The socket timeout is now the maximum
total duration of the method.  (Contributed by Victor Stinner in
bpo-23853(7).)

The ‘match_hostname()’ function now supports matching of IP addresses.
(Contributed by Antoine Pitrou in bpo-23239(8).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20421

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17552

   (3) https://bugs.python.org/issue?@action=redirect&bpo=20951

   (4) https://datatracker.ietf.org/doc/html/rfc5280.html

   (5) https://bugs.python.org/issue?@action=redirect&bpo=19940

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23186

   (7) https://bugs.python.org/issue?@action=redirect&bpo=23853

   (8) https://bugs.python.org/issue?@action=redirect&bpo=23239


File: python.info,  Node: sqlite3<8>,  Next: subprocess<4>,  Prev: ssl<9>,  Up: Módulos melhorados<9>

1.9.5.60 sqlite3
................

The *note Row: ea0. class now fully supports the sequence protocol, in
particular *note reversed(): 869. iteration and slice indexing.
(Contributed by Claudiu Popa in bpo-10203(1); by Lucas Sinclair, Jessica
McKellar, and Serhiy Storchaka in bpo-13583(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10203

   (2) https://bugs.python.org/issue?@action=redirect&bpo=13583


File: python.info,  Node: subprocess<4>,  Next: sys<11>,  Prev: sqlite3<8>,  Up: Módulos melhorados<9>

1.9.5.61 subprocess
...................

The new *note run(): b9e. function has been added.  It runs the
specified command and returns a *note CompletedProcess: ea2. object,
which describes a finished process.  The new API is more consistent and
is the recommended approach to invoking subprocesses in Python code that
does not need to maintain compatibility with earlier Python versions.
(Contributed by Thomas Kluyver in bpo-23342(1).)

Exemplos:

     >>> subprocess.run(["ls", "-l"])  # doesn't capture output
     CompletedProcess(args=['ls', '-l'], returncode=0)

     >>> subprocess.run("exit 1", shell=True, check=True)
     Traceback (most recent call last):
       ...
     subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1

     >>> subprocess.run(["ls", "-l", "/dev/null"], stdout=subprocess.PIPE)
     CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0,
     stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n')

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23342


File: python.info,  Node: sys<11>,  Next: sysconfig<2>,  Prev: subprocess<4>,  Up: Módulos melhorados<9>

1.9.5.62 sys
............

A new ‘set_coroutine_wrapper()’ function allows setting a global hook
that will be called whenever a *note coroutine object: 491. is created
by an *note async def: 5d1. function.  A corresponding
‘get_coroutine_wrapper()’ can be used to obtain a currently set wrapper.
Both functions are *note provisional: b16, and are intended for
debugging purposes only.  (Contributed by Yury Selivanov in
bpo-24017(1).)

A new *note is_finalizing(): a99. function can be used to check if the
Python interpreter is *note shutting down: 14e.  (Contributed by Antoine
Pitrou in bpo-22696(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24017

   (2) https://bugs.python.org/issue?@action=redirect&bpo=22696


File: python.info,  Node: sysconfig<2>,  Next: tarfile<7>,  Prev: sys<11>,  Up: Módulos melhorados<9>

1.9.5.63 sysconfig
..................

The name of the user scripts directory on Windows now includes the first
two components of the Python version.  (Contributed by Paul Moore in
bpo-23437(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23437


File: python.info,  Node: tarfile<7>,  Next: threading<6>,  Prev: sysconfig<2>,  Up: Módulos melhorados<9>

1.9.5.64 tarfile
................

The 'mode' argument of the *note open(): ea6. function now accepts ‘"x"’
to request exclusive creation.  (Contributed by Berker Peksag in
bpo-21717(1).)

The *note TarFile.extractall(): 42e. and *note TarFile.extract(): 42f.
methods now take a keyword argument 'numeric_owner'.  If set to ‘True’,
the extracted files and directories will be owned by the numeric ‘uid’
and ‘gid’ from the tarfile.  If set to ‘False’ (the default, and the
behavior in versions prior to 3.5), they will be owned by the named user
and group in the tarfile.  (Contributed by Michael Vogt and Eric Smith
in bpo-23193(2).)

The *note TarFile.list(): ea7. now accepts an optional 'members' keyword
argument that can be set to a subset of the list returned by *note
TarFile.getmembers(): ea8.  (Contributed by Serhiy Storchaka in
bpo-21549(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21717

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23193

   (3) https://bugs.python.org/issue?@action=redirect&bpo=21549


File: python.info,  Node: threading<6>,  Next: time<7>,  Prev: tarfile<7>,  Up: Módulos melhorados<9>

1.9.5.65 threading
..................

Both the *note Lock.acquire(): 698. and *note RLock.acquire(): eaa.
methods now use a monotonic clock for timeout management.  (Contributed
by Victor Stinner in bpo-22043(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22043


File: python.info,  Node: time<7>,  Next: timeit<2>,  Prev: threading<6>,  Up: Módulos melhorados<9>

1.9.5.66 time
.............

The *note monotonic(): 253. function is now always available.
(Contributed by Victor Stinner in bpo-22043(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22043


File: python.info,  Node: timeit<2>,  Next: tkinter<8>,  Prev: time<7>,  Up: Módulos melhorados<9>

1.9.5.67 timeit
...............

A new command line option ‘-u’ or ‘--unit=U’ can be used to specify the
time unit for the timer output.  Supported options are ‘usec’, ‘msec’,
or ‘sec’.  (Contributed by Julian Gindi in bpo-18983(1).)

The *note timeit(): ead. function has a new 'globals' parameter for
specifying the namespace in which the code will be running.
(Contributed by Ben Roberts in bpo-2527(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18983

   (2) https://bugs.python.org/issue?@action=redirect&bpo=2527


File: python.info,  Node: tkinter<8>,  Next: traceback<5>,  Prev: timeit<2>,  Up: Módulos melhorados<9>

1.9.5.68 tkinter
................

The ‘tkinter._fix’ module used for setting up the Tcl/Tk environment on
Windows has been replaced by a private function in the ‘_tkinter’ module
which makes no permanent changes to environment variables.  (Contributed
by Zachary Ware in bpo-20035(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20035


File: python.info,  Node: traceback<5>,  Next: types<5>,  Prev: tkinter<8>,  Up: Módulos melhorados<9>

1.9.5.69 traceback
..................

New *note walk_stack(): eb0. and *note walk_tb(): eb1. functions to
conveniently traverse frame and *note traceback objects: b07.
(Contributed by Robert Collins in bpo-17911(1).)

New lightweight classes: *note TracebackException: 25c, *note
StackSummary: eb2, and *note FrameSummary: eb3.  (Contributed by Robert
Collins in bpo-17911(2).)

Both the *note print_tb(): eb4. and *note print_stack(): eb5. functions
now support negative values for the 'limit' argument.  (Contributed by
Dmitry Kazakov in bpo-22619(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17911

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17911

   (3) https://bugs.python.org/issue?@action=redirect&bpo=22619


File: python.info,  Node: types<5>,  Next: unicodedata<8>,  Prev: traceback<5>,  Up: Módulos melhorados<9>

1.9.5.70 types
..............

A new *note coroutine(): eb7. function to transform *note generator:
bf9. and *note generator-like: e05. objects into *note awaitables: 1ad.
(Contributed by Yury Selivanov in bpo-24017(1).)

A new type called *note CoroutineType: eb8, which is used for *note
coroutine: 491. objects created by *note async def: 5d1. functions.
(Contributed by Yury Selivanov in bpo-24400(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24017

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24400


File: python.info,  Node: unicodedata<8>,  Next: unittest<8>,  Prev: types<5>,  Up: Módulos melhorados<9>

1.9.5.71 unicodedata
....................

The *note unicodedata: 105. module now uses data from Unicode 8.0.0(1).

   ---------- Footnotes ----------

   (1) https://unicode.org/versions/Unicode8.0.0/


File: python.info,  Node: unittest<8>,  Next: unittest mock<3>,  Prev: unicodedata<8>,  Up: Módulos melhorados<9>

1.9.5.72 unittest
.................

The *note TestLoader.loadTestsFromModule(): 28f. method now accepts a
keyword-only argument 'pattern' which is passed to ‘load_tests’ as the
third argument.  Found packages are now checked for ‘load_tests’
regardless of whether their path matches 'pattern', because it is
impossible for a package name to match the default pattern.
(Contributed by Robert Collins and Barry A. Warsaw in bpo-16662(1).)

Unittest discovery errors now are exposed in the *note
TestLoader.errors: ebb. attribute of the *note TestLoader: 28e.
instance.  (Contributed by Robert Collins in bpo-19746(2).)

A new command line option ‘--locals’ to show local variables in
tracebacks.  (Contributed by Robert Collins in bpo-22936(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16662

   (2) https://bugs.python.org/issue?@action=redirect&bpo=19746

   (3) https://bugs.python.org/issue?@action=redirect&bpo=22936


File: python.info,  Node: unittest mock<3>,  Next: urllib<2>,  Prev: unittest<8>,  Up: Módulos melhorados<9>

1.9.5.73 unittest.mock
......................

The *note Mock: a54. class has the following improvements:

   * The class constructor has a new 'unsafe' parameter, which causes
     mock objects to raise *note AttributeError: 34b. on attribute names
     starting with ‘"assert"’.  (Contributed by Kushal Das in
     bpo-21238(1).)

   * A new *note Mock.assert_not_called(): ebd. method to check if the
     mock object was called.  (Contributed by Kushal Das in
     bpo-21262(2).)

The *note MagicMock: ebe. class now supports *note __truediv__(): ebf,
*note __divmod__(): ec0. and *note __matmul__(): da1. operators.
(Contributed by Johannes Baiter in bpo-20968(3), and Håkan Lövdahl in
bpo-23581(4) and bpo-23568(5).)

It is no longer necessary to explicitly pass ‘create=True’ to the *note
patch(): ec1. function when patching builtin names.  (Contributed by
Kushal Das in bpo-17660(6).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21238

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21262

   (3) https://bugs.python.org/issue?@action=redirect&bpo=20968

   (4) https://bugs.python.org/issue?@action=redirect&bpo=23581

   (5) https://bugs.python.org/issue?@action=redirect&bpo=23568

   (6) https://bugs.python.org/issue?@action=redirect&bpo=17660


File: python.info,  Node: urllib<2>,  Next: wsgiref,  Prev: unittest mock<3>,  Up: Módulos melhorados<9>

1.9.5.74 urllib
...............

A new *note request.HTTPPasswordMgrWithPriorAuth: ec3. class allows HTTP
Basic Authentication credentials to be managed so as to eliminate
unnecessary ‘401’ response handling, or to unconditionally send
credentials on the first request in order to communicate with servers
that return a ‘404’ response instead of a ‘401’ if the ‘Authorization’
header is not sent.  (Contributed by Matej Cepl in bpo-19494(1) and
Akshit Khurana in bpo-7159(2).)

A new 'quote_via' argument for the *note parse.urlencode(): ec4.
function provides a way to control the encoding of query parts if
needed.  (Contributed by Samwyse and Arnon Yaari in bpo-13866(3).)

The *note request.urlopen(): 293. function accepts an *note
ssl.SSLContext: 294. object as a 'context' argument, which will be used
for the HTTPS connection.  (Contributed by Alex Gaynor in bpo-22366(4).)

The *note parse.urljoin(): ec5. was updated to use the RFC 3986(5)
semantics for the resolution of relative URLs, rather than RFC 1808(6)
and RFC 2396(7).  (Contributed by Demian Brecht and Senthil Kumaran in
bpo-22118(8).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19494

   (2) https://bugs.python.org/issue?@action=redirect&bpo=7159

   (3) https://bugs.python.org/issue?@action=redirect&bpo=13866

   (4) https://bugs.python.org/issue?@action=redirect&bpo=22366

   (5) https://datatracker.ietf.org/doc/html/rfc3986.html

   (6) https://datatracker.ietf.org/doc/html/rfc1808.html

   (7) https://datatracker.ietf.org/doc/html/rfc2396.html

   (8) https://bugs.python.org/issue?@action=redirect&bpo=22118


File: python.info,  Node: wsgiref,  Next: xmlrpc<2>,  Prev: urllib<2>,  Up: Módulos melhorados<9>

1.9.5.75 wsgiref
................

The 'headers' argument of the *note headers.Headers: ec7. class
constructor is now optional.  (Contributed by Pablo Torres Navarrete and
SilentGhost in bpo-5800(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5800


File: python.info,  Node: xmlrpc<2>,  Next: xml sax,  Prev: wsgiref,  Up: Módulos melhorados<9>

1.9.5.76 xmlrpc
...............

The *note client.ServerProxy: a61. class now supports the *note context
manager: 5d4. protocol.  (Contributed by Claudiu Popa in bpo-20627(1).)

The *note client.ServerProxy: a61. constructor now accepts an optional
*note ssl.SSLContext: 294. instance.  (Contributed by Alex Gaynor in
bpo-22960(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20627

   (2) https://bugs.python.org/issue?@action=redirect&bpo=22960


File: python.info,  Node: xml sax,  Next: zipfile<4>,  Prev: xmlrpc<2>,  Up: Módulos melhorados<9>

1.9.5.77 xml.sax
................

SAX parsers now support a character stream of the *note
xmlreader.InputSource: eca. object.  (Contributed by Serhiy Storchaka in
bpo-2175(1).)

*note parseString(): ecb. now accepts a *note str: 44c. instance.
(Contributed by Serhiy Storchaka in bpo-10590(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=2175

   (2) https://bugs.python.org/issue?@action=redirect&bpo=10590


File: python.info,  Node: zipfile<4>,  Prev: xml sax,  Up: Módulos melhorados<9>

1.9.5.78 zipfile
................

ZIP output can now be written to unseekable streams.  (Contributed by
Serhiy Storchaka in bpo-23252(1).)

The 'mode' argument of *note ZipFile.open(): 41b. method now accepts
‘"x"’ to request exclusive creation.  (Contributed by Serhiy Storchaka
in bpo-21717(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23252

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21717


File: python.info,  Node: Other module-level changes,  Next: Otimizações<9>,  Prev: Módulos melhorados<9>,  Up: O que há de novo no Python 3 5

1.9.6 Other module-level changes
--------------------------------

Many functions in the *note mmap: 90, ‘ossaudiodev’, *note socket: cc,
*note ssl: d0, and *note codecs: 1b. modules now accept writable *note
bytes-like objects: d4f.  (Contributed by Serhiy Storchaka in
bpo-23001(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23001


File: python.info,  Node: Otimizações<9>,  Next: Mudanças a construções e API C<3>,  Prev: Other module-level changes,  Up: O que há de novo no Python 3 5

1.9.7 Otimizações
-----------------

The *note os.walk(): 4a9. function has been sped up by 3 to 5 times on
POSIX systems, and by 7 to 20 times on Windows.  This was done using the
new *note os.scandir(): a68. function, which exposes file information
from the underlying ‘readdir’ or ‘FindFirstFile’/‘FindNextFile’ system
calls.  (Contributed by Ben Hoyt with help from Victor Stinner in
bpo-23605(1).)

Construction of ‘bytes(int)’ (filled by zero bytes) is faster and uses
less memory for large objects.  ‘calloc()’ is used instead of ‘malloc()’
to allocate memory for these objects.  (Contributed by Victor Stinner in
bpo-21233(2).)

Some operations on *note ipaddress: 80. *note IPv4Network: 1fe. and
*note IPv6Network: 1ff. have been massively sped up, such as *note
subnets(): ecf, *note supernet(): ed0, *note summarize_address_range():
ed1, *note collapse_addresses(): ed2.  The speed up can range from 3 to
15 times.  (Contributed by Antoine Pitrou, Michel Albert, and Markus in
bpo-21486(3), bpo-21487(4), bpo-20826(5), bpo-23266(6).)

Pickling of *note ipaddress: 80. objects was optimized to produce
significantly smaller output.  (Contributed by Serhiy Storchaka in
bpo-23133(7).)

Many operations on *note io.BytesIO: ed3. are now 50% to 100% faster.
(Contributed by Serhiy Storchaka in bpo-15381(8) and David Wilson in
bpo-22003(9).)

The *note marshal.dumps(): ed4. function is now faster: 65–85% with
versions 3 and 4, 20–25% with versions 0 to 2 on typical data, and up to
5 times in best cases.  (Contributed by Serhiy Storchaka in
bpo-20416(10) and bpo-23344(11).)

The UTF-32 encoder is now 3 to 7 times faster.  (Contributed by Serhiy
Storchaka in bpo-15027(12).)

Regular expressions are now parsed up to 10% faster.  (Contributed by
Serhiy Storchaka in bpo-19380(13).)

The *note json.dumps(): d68. function was optimized to run with
‘ensure_ascii=False’ as fast as with ‘ensure_ascii=True’.  (Contributed
by Naoki Inada in bpo-23206(14).)

The *note PyObject_IsInstance(): ed5. and *note PyObject_IsSubclass():
ed6. functions have been sped up in the common case that the second
argument has *note type: d6b. as its metaclass.  (Contributed Georg
Brandl by in bpo-22540(15).)

Method caching was slightly improved, yielding up to 5% performance
improvement in some benchmarks.  (Contributed by Antoine Pitrou in
bpo-22847(16).)

Objects from the *note random: b8. module now use 50% less memory on
64-bit builds.  (Contributed by Serhiy Storchaka in bpo-23488(17).)

The *note property(): 194. getter calls are up to 25% faster.
(Contributed by Joe Jevnik in bpo-23910(18).)

Instantiation of *note fractions.Fraction: 1e7. is now up to 30% faster.
(Contributed by Stefan Behnel in bpo-22464(19).)

String methods *note find(): ed7, *note rfind(): ed8, *note split():
ed9, *note partition(): eda. and the *note in: 2f4. string operator are
now significantly faster for searching 1-character substrings.
(Contributed by Serhiy Storchaka in bpo-23573(20).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23605

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21233

   (3) https://bugs.python.org/issue?@action=redirect&bpo=21486

   (4) https://bugs.python.org/issue?@action=redirect&bpo=21487

   (5) https://bugs.python.org/issue?@action=redirect&bpo=20826

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23266

   (7) https://bugs.python.org/issue?@action=redirect&bpo=23133

   (8) https://bugs.python.org/issue?@action=redirect&bpo=15381

   (9) https://bugs.python.org/issue?@action=redirect&bpo=22003

   (10) https://bugs.python.org/issue?@action=redirect&bpo=20416

   (11) https://bugs.python.org/issue?@action=redirect&bpo=23344

   (12) https://bugs.python.org/issue?@action=redirect&bpo=15027

   (13) https://bugs.python.org/issue?@action=redirect&bpo=19380

   (14) https://bugs.python.org/issue?@action=redirect&bpo=23206

   (15) https://bugs.python.org/issue?@action=redirect&bpo=22540

   (16) https://bugs.python.org/issue?@action=redirect&bpo=22847

   (17) https://bugs.python.org/issue?@action=redirect&bpo=23488

   (18) https://bugs.python.org/issue?@action=redirect&bpo=23910

   (19) https://bugs.python.org/issue?@action=redirect&bpo=22464

   (20) https://bugs.python.org/issue?@action=redirect&bpo=23573


File: python.info,  Node: Mudanças a construções e API C<3>,  Next: Descontinuados<10>,  Prev: Otimizações<9>,  Up: O que há de novo no Python 3 5

1.9.8 Mudanças a construções e API C
------------------------------------

New ‘calloc’ functions were added:

   * *note PyMem_RawCalloc(): 391,

   * *note PyMem_Calloc(): edc,

   * *note PyObject_Calloc(): edd.

(Contribuição de Victor Stinner em bpo-21233(1).)

New encoding/decoding helper functions:

   * *note Py_DecodeLocale(): be0. (replaced ‘_Py_char2wchar()’),

   * *note Py_EncodeLocale(): be1. (replaced ‘_Py_wchar2char()’).

(Contribuição de Victor Stinner em bpo-18395(2).)

A new *note PyCodec_NameReplaceErrors(): ede. function to replace the
unicode encode error with ‘\N{...}’ escapes.  (Contributed by Serhiy
Storchaka in bpo-19676(3).)

A new *note PyErr_FormatV(): edf. function similar to *note
PyErr_Format(): ee0, but accepts a ‘va_list’ argument.  (Contributed by
Antoine Pitrou in bpo-18711(4).)

A new *note PyExc_RecursionError: ee1. exception.  (Contributed by Georg
Brandl in bpo-19235(5).)

New *note PyModule_FromDefAndSpec(): ee2, *note
PyModule_FromDefAndSpec2(): ee3, and *note PyModule_ExecDef(): ee4.
functions introduced by PEP 489(6) – multi-phase extension module
initialization.  (Contributed by Petr Viktorin in bpo-24268(7).)

New *note PyNumber_MatrixMultiply(): ee5. and *note
PyNumber_InPlaceMatrixMultiply(): ee6. functions to perform matrix
multiplication.  (Contributed by Benjamin Peterson in bpo-21176(8).  See
also PEP 465(9) for details.)

The *note PyTypeObject.tp_finalize: ab5. slot is now part of the stable
ABI.

Windows builds now require Microsoft Visual C++ 14.0, which is available
as part of Visual Studio 2015(10).

Extension modules now include a platform information tag in their
filename on some platforms (the tag is optional, and CPython will import
extensions without it, although if the tag is present and mismatched,
the extension won’t be loaded):

   * On Linux, extension module filenames end with
     ‘.cpython-<major><minor>m-<architecture>-<os>.pyd’:

        * ‘<major>’ is the major number of the Python version; for
          Python 3.5 this is ‘3’.

        * ‘<minor>’ is the minor number of the Python version; for
          Python 3.5 this is ‘5’.

        * ‘<architecture>’ is the hardware architecture the extension
          module was built to run on.  It’s most commonly either ‘i386’
          for 32-bit Intel platforms or ‘x86_64’ for 64-bit Intel (and
          AMD) platforms.

        * ‘<os>’ is always ‘linux-gnu’, except for extensions built to
          talk to the 32-bit ABI on 64-bit platforms, in which case it
          is ‘linux-gnu32’ (and ‘<architecture>’ will be ‘x86_64’).

   * On Windows, extension module filenames end with
     ‘<debug>.cp<major><minor>-<platform>.pyd’:

        * ‘<major>’ is the major number of the Python version; for
          Python 3.5 this is ‘3’.

        * ‘<minor>’ is the minor number of the Python version; for
          Python 3.5 this is ‘5’.

        * ‘<platform>’ is the platform the extension module was built
          for, either ‘win32’ for Win32, ‘win_amd64’ for Win64,
          ‘win_ia64’ for Windows Itanium 64, and ‘win_arm’ for Windows
          on ARM.

        * If built in debug mode, ‘<debug>’ will be ‘_d’, otherwise it
          will be blank.

   * On OS X platforms, extension module filenames now end with
     ‘-darwin.so’.

   * On all other platforms, extension module filenames are the same as
     they were with Python 3.4.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21233

   (2) https://bugs.python.org/issue?@action=redirect&bpo=18395

   (3) https://bugs.python.org/issue?@action=redirect&bpo=19676

   (4) https://bugs.python.org/issue?@action=redirect&bpo=18711

   (5) https://bugs.python.org/issue?@action=redirect&bpo=19235

   (6) https://peps.python.org/pep-0489/

   (7) https://bugs.python.org/issue?@action=redirect&bpo=24268

   (8) https://bugs.python.org/issue?@action=redirect&bpo=21176

   (9) https://peps.python.org/pep-0465/

   (10) 
https://visualstudio.microsoft.com/en/vs/older-downloads/#visual-studio-2015-and-other-products


File: python.info,  Node: Descontinuados<10>,  Next: Removidos<10>,  Prev: Mudanças a construções e API C<3>,  Up: O que há de novo no Python 3 5

1.9.9 Descontinuados
--------------------

* Menu:

* New Keywords: New Keywords<2>.
* Comportamento do Python descontinuado: Comportamento do Python descontinuado<2>.
* Unsupported Operating Systems::
* Deprecated Python modules, functions and methods: Deprecated Python modules functions and methods<3>.


File: python.info,  Node: New Keywords<2>,  Next: Comportamento do Python descontinuado<2>,  Up: Descontinuados<10>

1.9.9.1 New Keywords
....................

‘async’ and ‘await’ are not recommended to be used as variable, class,
function or module names.  Introduced by PEP 492(1) in Python 3.5, they
will become proper keywords in Python 3.7.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0492/


File: python.info,  Node: Comportamento do Python descontinuado<2>,  Next: Unsupported Operating Systems,  Prev: New Keywords<2>,  Up: Descontinuados<10>

1.9.9.2 Comportamento do Python descontinuado
.............................................

Raising the *note StopIteration: c15. exception inside a generator will
now generate a silent *note PendingDeprecationWarning: 8ce, which will
become a non-silent deprecation warning in Python 3.6 and will trigger a
*note RuntimeError: 195. in Python 3.7.  See *note PEP 479; Change
StopIteration handling inside generators: d41. for details.


File: python.info,  Node: Unsupported Operating Systems,  Next: Deprecated Python modules functions and methods<3>,  Prev: Comportamento do Python descontinuado<2>,  Up: Descontinuados<10>

1.9.9.3 Unsupported Operating Systems
.....................................

Windows XP is no longer supported by Microsoft, thus, per PEP 11(1),
CPython 3.5 is no longer officially supported on this OS.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0011/


File: python.info,  Node: Deprecated Python modules functions and methods<3>,  Prev: Unsupported Operating Systems,  Up: Descontinuados<10>

1.9.9.4 Deprecated Python modules, functions and methods
........................................................

The ‘formatter’ module has now graduated to full deprecation and is
still slated for removal in Python 3.6.

The ‘asyncio.async()’ function is deprecated in favor of *note
ensure_future(): c92.

The ‘smtpd’ module has in the past always decoded the DATA portion of
email messages using the ‘utf-8’ codec.  This can now be controlled by
the new 'decode_data' keyword to ‘SMTPServer’.  The default value is
‘True’, but this default is deprecated.  Specify the 'decode_data'
keyword with an appropriate value to avoid the deprecation warning.

Directly assigning values to the *note key: c1b, *note value: c1c. and
*note coded_value: c1d. of *note http.cookies.Morsel: c1e. objects is
deprecated.  Use the *note set(): c1f. method instead.  In addition, the
undocumented 'LegalChars' parameter of *note set(): c1f. is deprecated,
and is now ignored.

Passing a format string as keyword argument 'format_string' to the *note
format(): c1a. method of the *note string.Formatter: eec. class has been
deprecated.  (Contributed by Serhiy Storchaka in bpo-23671(1).)

The ‘platform.dist()’ and ‘platform.linux_distribution()’ functions are
now deprecated.  Linux distributions use too many different ways of
describing themselves, so the functionality is left to a package.
(Contributed by Vajrasky Kok and Berker Peksag in bpo-1322(2).)

The previously undocumented ‘from_function’ and ‘from_builtin’ methods
of *note inspect.Signature: 1cf. are deprecated.  Use the new *note
Signature.from_callable(): 73a. method instead.  (Contributed by Yury
Selivanov in bpo-24248(3).)

The ‘inspect.getargspec()’ function is deprecated and scheduled to be
removed in Python 3.6.  (See bpo-20438(4) for details.)

The *note inspect: 7e. *note getfullargspec(): 739, *note getcallargs():
eed, and ‘formatargspec()’ functions are deprecated in favor of the
*note inspect.signature(): 738. API. (Contributed by Yury Selivanov in
bpo-20438(5).)

*note getargvalues(): eee. and *note formatargvalues(): eef. functions
were inadvertently marked as deprecated with the release of Python
3.5.0.

Use of *note re.LOCALE: b82. flag with str patterns or *note re.ASCII:
62c. is now deprecated.  (Contributed by Serhiy Storchaka in
bpo-22407(6).)

Use of unrecognized special sequences consisting of ‘'\'’ and an ASCII
letter in regular expression patterns and replacement patterns now
raises a deprecation warning and will be forbidden in Python 3.6.
(Contributed by Serhiy Storchaka in bpo-23622(7).)

The undocumented and unofficial 'use_load_tests' default argument of the
*note unittest.TestLoader.loadTestsFromModule(): 28f. method now is
deprecated and ignored.  (Contributed by Robert Collins and Barry A.
Warsaw in bpo-16662(8).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23671

   (2) https://bugs.python.org/issue?@action=redirect&bpo=1322

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24248

   (4) https://bugs.python.org/issue?@action=redirect&bpo=20438

   (5) https://bugs.python.org/issue?@action=redirect&bpo=20438

   (6) https://bugs.python.org/issue?@action=redirect&bpo=22407

   (7) https://bugs.python.org/issue?@action=redirect&bpo=23622

   (8) https://bugs.python.org/issue?@action=redirect&bpo=16662


File: python.info,  Node: Removidos<10>,  Next: Porting to Python 3 5,  Prev: Descontinuados<10>,  Up: O que há de novo no Python 3 5

1.9.10 Removidos
----------------

* Menu:

* Remoção de APIs e recursos: Remoção de APIs e recursos<4>.


File: python.info,  Node: Remoção de APIs e recursos<4>,  Up: Removidos<10>

1.9.10.1 Remoção de APIs e recursos
...................................

The following obsolete and previously deprecated APIs and features have
been removed:

   * The ‘__version__’ attribute has been dropped from the email
     package.  The email code hasn’t been shipped separately from the
     stdlib for a long time, and the ‘__version__’ string was not
     updated in the last few releases.

   * The internal ‘Netrc’ class in the *note ftplib: 5e. module was
     deprecated in 3.4, and has now been removed.  (Contributed by Matt
     Chaput in bpo-6623(1).)

   * The concept of ‘.pyo’ files has been removed.

   * The JoinableQueue class in the provisional *note asyncio: a. module
     was deprecated in 3.4.4 and is now removed.  (Contributed by A.
     Jesse Jiryu Davis in bpo-23464(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=6623

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23464


File: python.info,  Node: Porting to Python 3 5,  Next: Notable changes in Python 3 5 4,  Prev: Removidos<10>,  Up: O que há de novo no Python 3 5

1.9.11 Porting to Python 3.5
----------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções que podem exigir alterações no seu código.

* Menu:

* Alterações no comportamento do Python: Alterações no comportamento do Python<2>.
* Alterações na API Python: Alterações na API Python<9>.
* Alterações na API C: Alterações na API C<14>.


File: python.info,  Node: Alterações no comportamento do Python<2>,  Next: Alterações na API Python<9>,  Up: Porting to Python 3 5

1.9.11.1 Alterações no comportamento do Python
..............................................

   * Due to an oversight, earlier Python versions erroneously accepted
     the following syntax:

          f(1 for x in [1], *args)
          f(1 for x in [1], **kwargs)

     Python 3.5 now correctly raises a *note SyntaxError: 18d, as
     generator expressions must be put in parentheses if not a sole
     argument to a function.


File: python.info,  Node: Alterações na API Python<9>,  Next: Alterações na API C<14>,  Prev: Alterações no comportamento do Python<2>,  Up: Porting to Python 3 5

1.9.11.2 Alterações na API Python
.................................

   * PEP 475(1): System calls are now retried when interrupted by a
     signal instead of raising *note InterruptedError: db0. if the
     Python signal handler does not raise an exception.

   * Before Python 3.5, a *note datetime.time: 1ce. object was
     considered to be false if it represented midnight in UTC. This
     behavior was considered obscure and error-prone and has been
     removed in Python 3.5.  See bpo-13936(2) for full details.

   * The ‘ssl.SSLSocket.send()’ method now raises either *note
     ssl.SSLWantReadError: e98. or *note ssl.SSLWantWriteError: e99. on
     a non-blocking socket if the operation would block.  Previously, it
     would return ‘0’.  (Contributed by Nikolaus Rath in bpo-20951(3).)

   * The ‘__name__’ attribute of generators is now set from the function
     name, instead of being set from the code name.  Use
     ‘gen.gi_code.co_name’ to retrieve the code name.  Generators also
     have a new ‘__qualname__’ attribute, the qualified name, which is
     now used for the representation of a generator (‘repr(gen)’).
     (Contributed by Victor Stinner in bpo-21205(4).)

   * The deprecated “strict” mode and argument of *note HTMLParser: 87b,
     ‘HTMLParser.error()’, and the ‘HTMLParserError’ exception have been
     removed.  (Contributed by Ezio Melotti in bpo-15114(5).)  The
     'convert_charrefs' argument of *note HTMLParser: 87b. is now ‘True’
     by default.  (Contributed by Berker Peksag in bpo-21047(6).)

   * Although it is not formally part of the API, it is worth noting for
     porting purposes (ie: fixing tests) that error messages that were
     previously of the form “‘sometype’ does not support the buffer
     protocol” are now of the form “a *note bytes-like object: d4f. is
     required, not ‘sometype’”.  (Contributed by Ezio Melotti in
     bpo-16518(7).)

   * If the current directory is set to a directory that no longer
     exists then *note FileNotFoundError: 42b. will no longer be raised
     and instead *note find_spec(): ef5. will return ‘None’ 'without'
     caching ‘None’ in *note sys.path_importer_cache: 5e4, which is
     different than the typical case (bpo-22834(8)).

   * HTTP status code and messages from *note http.client: 6f. and *note
     http.server: 72. were refactored into a common *note HTTPStatus:
     906. enum.  The values in *note http.client: 6f. and *note
     http.server: 72. remain available for backwards compatibility.
     (Contributed by Demian Brecht in bpo-21793(9).)

   * When an import loader defines *note exec_module(): 86e. it is now
     expected to also define *note create_module(): cce. (raises a *note
     DeprecationWarning: 1a5. now, will be an error in Python 3.6).  If
     the loader inherits from *note importlib.abc.Loader: ef6. then
     there is nothing to do, else simply define *note create_module():
     cce. to return ‘None’.  (Contributed by Brett Cannon in
     bpo-23014(10).)

   * The *note re.split(): 2a2. function always ignored empty pattern
     matches, so the ‘"x*"’ pattern worked the same as ‘"x+"’, and the
     ‘"\b"’ pattern never worked.  Now *note re.split(): 2a2. raises a
     warning if the pattern could match an empty string.  For
     compatibility, use patterns that never match an empty string (e.g.
     ‘"x+"’ instead of ‘"x*"’).  Patterns that could only match an empty
     string (such as ‘"\b"’) now raise an error.  (Contributed by Serhiy
     Storchaka in bpo-22818(11).)

   * The *note http.cookies.Morsel: c1e. dict-like interface has been
     made self consistent: morsel comparison now takes the *note key:
     c1b. and *note value: c1c. into account, *note copy(): ef7. now
     results in a *note Morsel: c1e. instance rather than a *note dict:
     256, and *note update(): ef8. will now raise an exception if any of
     the keys in the update dictionary are invalid.  In addition, the
     undocumented 'LegalChars' parameter of *note set(): c1f. is
     deprecated and is now ignored.  (Contributed by Demian Brecht in
     bpo-2211(12).)

   * PEP 488(13) has removed ‘.pyo’ files from Python and introduced the
     optional ‘opt-’ tag in ‘.pyc’ file names.  The *note
     importlib.util.cache_from_source(): 2fe. has gained an
     'optimization' parameter to help control the ‘opt-’ tag.  Because
     of this, the 'debug_override' parameter of the function is now
     deprecated.  ‘.pyo’ files are also no longer supported as a file
     argument to the Python interpreter and thus serve no purpose when
     distributed on their own (i.e.  sourceless code distribution).  Due
     to the fact that the magic number for bytecode has changed in
     Python 3.5, all old ‘.pyo’ files from previous versions of Python
     are invalid regardless of this PEP.

   * The *note socket: cc. module now exports the *note
     CAN_RAW_FD_FRAMES: ef9. constant on linux 3.6 and greater.

   * The *note ssl.cert_time_to_seconds(): e9a. function now interprets
     the input time as UTC and not as local time, per RFC 5280(14).
     Additionally, the return value is always an *note int: 257.
     (Contributed by Akira Li in bpo-19940(15).)

   * The ‘pygettext.py’ Tool now uses the standard +NNNN format for
     timezones in the POT-Creation-Date header.

   * The *note smtplib: ca. module now uses *note sys.stderr: 940.
     instead of the previous module-level ‘stderr’ variable for debug
     output.  If your (test) program depends on patching the
     module-level variable to capture the debug output, you will need to
     update it to capture sys.stderr instead.

   * The *note str.startswith(): efa. and *note str.endswith(): efb.
     methods no longer return ‘True’ when finding the empty string and
     the indexes are completely out of range.  (Contributed by Serhiy
     Storchaka in bpo-24284(16).)

   * The *note inspect.getdoc(): a02. function now returns documentation
     strings inherited from base classes.  Documentation strings no
     longer need to be duplicated if the inherited documentation is
     appropriate.  To suppress an inherited string, an empty string must
     be specified (or the documentation may be filled in).  This change
     affects the output of the *note pydoc: b5. module and the *note
     help(): 8dd. function.  (Contributed by Serhiy Storchaka in
     bpo-15582(17).)

   * Nested *note functools.partial(): 414. calls are now flattened.  If
     you were relying on the previous behavior, you can now either add
     an attribute to a *note functools.partial(): 414. object or you can
     create a subclass of *note functools.partial(): 414.  (Contributed
     by Alexander Belopolsky in bpo-7830(18).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0475/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=13936

   (3) https://bugs.python.org/issue?@action=redirect&bpo=20951

   (4) https://bugs.python.org/issue?@action=redirect&bpo=21205

   (5) https://bugs.python.org/issue?@action=redirect&bpo=15114

   (6) https://bugs.python.org/issue?@action=redirect&bpo=21047

   (7) https://bugs.python.org/issue?@action=redirect&bpo=16518

   (8) https://bugs.python.org/issue?@action=redirect&bpo=22834

   (9) https://bugs.python.org/issue?@action=redirect&bpo=21793

   (10) https://bugs.python.org/issue?@action=redirect&bpo=23014

   (11) https://bugs.python.org/issue?@action=redirect&bpo=22818

   (12) https://bugs.python.org/issue?@action=redirect&bpo=2211

   (13) https://peps.python.org/pep-0488/

   (14) https://datatracker.ietf.org/doc/html/rfc5280.html

   (15) https://bugs.python.org/issue?@action=redirect&bpo=19940

   (16) https://bugs.python.org/issue?@action=redirect&bpo=24284

   (17) https://bugs.python.org/issue?@action=redirect&bpo=15582

   (18) https://bugs.python.org/issue?@action=redirect&bpo=7830


File: python.info,  Node: Alterações na API C<14>,  Prev: Alterações na API Python<9>,  Up: Porting to Python 3 5

1.9.11.3 Alterações na API C
............................

   * The undocumented ‘format’ member of the (non-public)
     ‘PyMemoryViewObject’ structure has been removed.  All extensions
     relying on the relevant parts in ‘memoryobject.h’ must be rebuilt.

   * The ‘PyMemAllocator’ structure was renamed to *note
     PyMemAllocatorEx: efd. and a new ‘calloc’ field was added.

   * Removed non-documented macro ‘PyObject_REPR()’ which leaked
     references.  Use format character ‘%R’ in *note
     PyUnicode_FromFormat(): 38a.-like functions to format the *note
     repr(): 800. of the object.  (Contributed by Serhiy Storchaka in
     bpo-22453(1).)

   * Because the lack of the *note __module__: 374. attribute breaks
     pickling and introspection, a deprecation warning is now raised for
     builtin types without the *note __module__: 374. attribute.  This
     will be an *note AttributeError: 34b. in the future.  (Contributed
     by Serhiy Storchaka in bpo-20204(2).)

   * As part of the PEP 492(3) implementation, the ‘tp_reserved’ slot of
     *note PyTypeObject: ab4. was replaced with a *note tp_as_async:
     efe. slot.  Refer to *note Objetos corrotina: eff. for new types,
     structures and functions.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22453

   (2) https://bugs.python.org/issue?@action=redirect&bpo=20204

   (3) https://peps.python.org/pep-0492/


File: python.info,  Node: Notable changes in Python 3 5 4,  Prev: Porting to Python 3 5,  Up: O que há de novo no Python 3 5

1.9.12 Notable changes in Python 3.5.4
--------------------------------------

* Menu:

* Novo alvo de construção make regen-all: Novo alvo de construção make regen-all<2>.
* Remoção do alvo de construção make touch: Remoção do alvo de construção make touch<2>.


File: python.info,  Node: Novo alvo de construção make regen-all<2>,  Next: Remoção do alvo de construção make touch<2>,  Up: Notable changes in Python 3 5 4

1.9.12.1 Novo alvo de construção ‘make regen-all’
.................................................

Para simplificar a compilação cruzada e garantir que o CPython possa ser
compilado de forma confiável sem exigir que uma versão existente do
Python já esteja disponível, o sistema de construção baseado em
autotools não tenta mais recompilar implicitamente os arquivos gerados
com base nos tempos de modificação dos arquivos.

Em vez disso, um novo comando ‘make regen-all’ foi adicionado para
forçar a regeneração desses arquivos quando desejado (por exemplo, após
uma versão inicial do Python já ter sido construída com base nas versões
pré-geradas).

Alvos de regeneração mais seletivos também são definidos – veja
Makefile.pre.in(1) para detalhes.

(Contribuição de Victor Stinner em bpo-23404(2).)

Adicionado na versão 3.5.4.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Makefile.pre.in

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23404


File: python.info,  Node: Remoção do alvo de construção make touch<2>,  Prev: Novo alvo de construção make regen-all<2>,  Up: Notable changes in Python 3 5 4

1.9.12.2 Remoção do alvo de construção ‘make touch’
...................................................

O alvo de construção ‘make touch’ usado anteriormente para solicitar
regeneração implícita de arquivos gerados atualizando seus tempos de
modificação foi removido.

Ele foi substituído pelo novo alvo ‘make regen-all’.

(Contribuição de Victor Stinner em bpo-23404(1).)

Alterado na versão 3.5.4.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23404


File: python.info,  Node: O que há de novo no Python 3 4,  Next: O que há de novo no Python 3 3,  Prev: O que há de novo no Python 3 5,  Up: O que há de novo no Python

1.10 O que há de novo no Python 3.4
===================================


Autor: R. David Murray <<rdmurray@bitdance.com>> (Editor)

This article explains the new features in Python 3.4, compared to 3.3.
Python 3.4 was released on March 16, 2014.  For full details, see the
changelog(1).

Ver também
..........

PEP 429(2) – Python 3.4 Release Schedule

* Menu:

* Resumo – Destaques da versão: Resumo – Destaques da versão<10>.
* Novas funcionalidades: Novas funcionalidades<15>.
* Novos módulos: Novos módulos<10>.
* Módulos melhorados: Módulos melhorados<10>.
* CPython Implementation Changes::
* Descontinuados: Descontinuados<11>.
* Removidos: Removidos<11>.
* Porting to Python 3.4: Porting to Python 3 4.
* Alterado em 3.4.3: Alterado em 3 4 3.

   ---------- Footnotes ----------

   (1) https://docs.python.org/3.4/whatsnew/changelog.html

   (2) https://peps.python.org/pep-0429/


File: python.info,  Node: Resumo – Destaques da versão<10>,  Next: Novas funcionalidades<15>,  Up: O que há de novo no Python 3 4

1.10.1 Resumo – Destaques da versão
-----------------------------------

Novos recursos de sintaxe:

   * Não foram adicionados novos recursos de sintaxe no Python 3.4.

Outras novas funcionalidades:

   * *note pip should always be available: f07. ( PEP 453(1)).

   * *note Newly created file descriptors are non-inheritable: f08. (
     PEP 446(2)).

   * command line option for *note isolated mode: f09. (bpo-16499(3)).

   * *note improvements in the handling of codecs: f0a. that are not
     text encodings (multiple issues).

   * *note A ModuleSpec Type: f0b. for the Import System ( PEP 451(4)).
     (Affects importer authors.)

   * The *note marshal: 8d. format has been made *note more compact and
     efficient: f0c. (bpo-16475(5)).

Novos módulos de biblioteca:

   * *note asyncio: a.: *note New provisional API for asynchronous IO:
     f0d. ( PEP 3156(6)).

   * *note ensurepip: 55.: *note Bootstrapping the pip installer: f0e. (
     PEP 453(7)).

   * *note enum: 56.: *note Support for enumeration types: f0f. ( PEP
     435(8)).

   * *note pathlib: a4.: *note Object-oriented filesystem paths: f10. (
     PEP 428(9)).

   * *note selectors: c2.: *note High-level and efficient I/O
     multiplexing: f11, built upon the *note select: c1. module
     primitives (part of PEP 3156(10)).

   * *note statistics: d2.: A basic *note numerically stable statistics
     library: f12. ( PEP 450(11)).

   * *note tracemalloc: ff.: *note Trace Python memory allocations: f13.
     ( PEP 454(12)).

Módulos de biblioteca significativamente melhorados:

   * *note Single-dispatch generic functions: f14. in *note functools:
     5f. ( PEP 443(13)).

   * New *note pickle: a6. *note protocol 4: f15. ( PEP 3154(14)).

   * *note multiprocessing: 94. now has *note an option to avoid using
     os.fork on Unix: f16. (bpo-8713(15)).

   * *note email: 3b. has a new submodule, *note contentmanager: 3d, and
     a new *note Message: 27c. subclass (*note EmailMessage: 27b.) that
     *note simplify MIME handling: f17. (bpo-18891(16)).

   * The *note inspect: 7e. and *note pydoc: b5. modules are now capable
     of correct introspection of a much wider variety of callable
     objects, which improves the output of the Python *note help(): 8dd.
     system.

   * The *note ipaddress: 80. module API has been declared stable

Melhorias de Segurança:

   * *note Secure and interchangeable hash algorithm: f18. ( PEP
     456(17)).

   * *note Make newly created file descriptors non-inheritable: f08. (
     PEP 446(18)) to avoid leaking file descriptors to child processes.

   * New command line option for *note isolated mode: f09,
     (bpo-16499(19)).

   * *note multiprocessing: 94. now has *note an option to avoid using
     os.fork on Unix: f16.  'spawn' and 'forkserver' are more secure
     because they avoid sharing data with child processes.

   * *note multiprocessing: 94. child processes on Windows no longer
     inherit all of the parent’s inheritable handles, only the necessary
     ones.

   * A new *note hashlib.pbkdf2_hmac(): 50f. function provides the
     PKCS#5 password-based key derivation function 2(20).

   * *note TLSv1.1 and TLSv1.2 support: f19. for *note ssl: d0.

   * *note Retrieving certificates from the Windows system cert store
     support: f1a. for *note ssl: d0.

   * *note Server-side SNI (Server Name Indication) support: f1b. for
     *note ssl: d0.

   * The *note ssl.SSLContext: 294. class has a *note lot of
     improvements: f1c.

   * All modules in the standard library that support SSL now support
     server certificate verification, including hostname matching
     (‘ssl.match_hostname()’) and CRLs (Certificate Revocation lists,
     see *note ssl.SSLContext.load_verify_locations(): f1d.).

Melhorias na implementação do CPython:

   * *note Safe object finalization: f1e. ( PEP 442(21)).

   * Leveraging PEP 442(22), in most cases *note module globals are no
     longer set to None during finalization: f1e. (bpo-18214(23)).

   * *note Configurable memory allocators: f1f. ( PEP 445(24)).

   * *note Argument Clinic: f20. ( PEP 436(25)).

Please read on for a comprehensive list of user-facing changes,
including many other smaller improvements, CPython optimizations,
deprecations, and potential porting issues.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0453/

   (2) https://peps.python.org/pep-0446/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=16499

   (4) https://peps.python.org/pep-0451/

   (5) https://bugs.python.org/issue?@action=redirect&bpo=16475

   (6) https://peps.python.org/pep-3156/

   (7) https://peps.python.org/pep-0453/

   (8) https://peps.python.org/pep-0435/

   (9) https://peps.python.org/pep-0428/

   (10) https://peps.python.org/pep-3156/

   (11) https://peps.python.org/pep-0450/

   (12) https://peps.python.org/pep-0454/

   (13) https://peps.python.org/pep-0443/

   (14) https://peps.python.org/pep-3154/

   (15) https://bugs.python.org/issue?@action=redirect&bpo=8713

   (16) https://bugs.python.org/issue?@action=redirect&bpo=18891

   (17) https://peps.python.org/pep-0456/

   (18) https://peps.python.org/pep-0446/

   (19) https://bugs.python.org/issue?@action=redirect&bpo=16499

   (20) https://en.wikipedia.org/wiki/PBKDF2

   (21) https://peps.python.org/pep-0442/

   (22) https://peps.python.org/pep-0442/

   (23) https://bugs.python.org/issue?@action=redirect&bpo=18214

   (24) https://peps.python.org/pep-0445/

   (25) https://peps.python.org/pep-0436/


File: python.info,  Node: Novas funcionalidades<15>,  Next: Novos módulos<10>,  Prev: Resumo – Destaques da versão<10>,  Up: O que há de novo no Python 3 4

1.10.2 Novas funcionalidades
----------------------------

* Menu:

* PEP 453; Explicit Bootstrapping of PIP in Python Installations: PEP 453 Explicit Bootstrapping of PIP in Python Installations.
* PEP 446; Newly Created File Descriptors Are Non-Inheritable: PEP 446 Newly Created File Descriptors Are Non-Inheritable.
* Melhorias no manuseio de Codecs::
* PEP 451; A ModuleSpec Type for the Import System: PEP 451 A ModuleSpec Type for the Import System.
* Outras mudanças na linguagem: Outras mudanças na linguagem<10>.


File: python.info,  Node: PEP 453 Explicit Bootstrapping of PIP in Python Installations,  Next: PEP 446 Newly Created File Descriptors Are Non-Inheritable,  Up: Novas funcionalidades<15>

1.10.2.1 PEP 453: Explicit Bootstrapping of PIP in Python Installations
.......................................................................

* Menu:

* Bootstrapping pip By Default::
* Mudanças na documentação::


File: python.info,  Node: Bootstrapping pip By Default,  Next: Mudanças na documentação,  Up: PEP 453 Explicit Bootstrapping of PIP in Python Installations

1.10.2.2 Bootstrapping pip By Default
.....................................

The new *note ensurepip: 55. module (defined in PEP 453(1)) provides a
standard cross-platform mechanism to bootstrap the pip installer into
Python installations and virtual environments.  The version of ‘pip’
included with Python 3.4.0 is ‘pip’ 1.5.4, and future 3.4.x maintenance
releases will update the bundled version to the latest version of ‘pip’
that is available at the time of creating the release candidate.

By default, the commands ‘pipX’ and ‘pipX.Y’ will be installed on all
platforms (where X.Y stands for the version of the Python installation),
along with the ‘pip’ Python package and its dependencies.  On Windows
and in virtual environments on all platforms, the unversioned ‘pip’
command will also be installed.  On other platforms, the system wide
unversioned ‘pip’ command typically refers to the separately installed
Python 2 version.

The ‘pyvenv’ command line utility and the *note venv: 111. module make
use of the *note ensurepip: 55. module to make ‘pip’ readily available
in virtual environments.  When using the command line utility, ‘pip’ is
installed by default, while when using the *note venv: 111. module *note
API: f24. installation of ‘pip’ must be requested explicitly.

For CPython *note source builds on POSIX systems: f25, the ‘make
install’ and ‘make altinstall’ commands bootstrap ‘pip’ by default.
This behaviour can be controlled through configure options, and
overridden through Makefile options.

On Windows and Mac OS X, the CPython installers now default to
installing ‘pip’ along with CPython itself (users may opt out of
installing it during the installation process).  Window users will need
to opt in to the automatic ‘PATH’ modifications to have ‘pip’ available
from the command line by default, otherwise it can still be accessed
through the Python launcher for Windows as ‘py -m pip’.

As discussed in the PEP(2) platform packagers may choose not to install
these commands by default, as long as, when invoked, they provide clear
and simple directions on how to install them on that platform (usually
using the system package manager).

     Nota: To avoid conflicts between parallel Python 2 and Python 3
     installations, only the versioned ‘pip3’ and ‘pip3.4’ commands are
     bootstrapped by default when ‘ensurepip’ is invoked directly - the
     ‘--default-pip’ option is needed to also request the unversioned
     ‘pip’ command.  ‘pyvenv’ and the Windows installer ensure that the
     unqualified ‘pip’ command is made available in those environments,
     and ‘pip’ can always be invoked via the ‘-m’ switch rather than
     directly to avoid ambiguity on systems with multiple Python
     installations.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0453/

   (2) 
https://peps.python.org/pep-0453/#recommendations-for-downstream-distributors


File: python.info,  Node: Mudanças na documentação,  Prev: Bootstrapping pip By Default,  Up: PEP 453 Explicit Bootstrapping of PIP in Python Installations

1.10.2.3 Mudanças na documentação
.................................

As part of this change, the *note Instalando módulos Python: f27. and
distributing-index sections of the documentation have been completely
redesigned as short getting started and FAQ documents.  Most packaging
documentation has now been moved out to the Python Packaging Authority
maintained Python Packaging User Guide(1) and the documentation of the
individual projects.

No entanto, como esta migração ainda está incompleta, as versões legadas
desses guias permanecem disponíveis como *note Construindo extensões C e
C ++ com setuptools: f28. e *note Construindo extensões C e C ++ com
setuptools: f29.

Ver também
..........

PEP 453(2) – Explicit bootstrapping of pip in Python installations

     PEP written by Donald Stufft and Nick Coghlan, implemented by
     Donald Stufft, Nick Coghlan, Martin von Löwis and Ned Deily.

   ---------- Footnotes ----------

   (1) https://packaging.python.org

   (2) https://peps.python.org/pep-0453/


File: python.info,  Node: PEP 446 Newly Created File Descriptors Are Non-Inheritable,  Next: Melhorias no manuseio de Codecs,  Prev: PEP 453 Explicit Bootstrapping of PIP in Python Installations,  Up: Novas funcionalidades<15>

1.10.2.4 PEP 446: Newly Created File Descriptors Are Non-Inheritable
....................................................................

PEP 446(1) makes newly created file descriptors *note non-inheritable:
f2b.  In general, this is the behavior an application will want: when
launching a new process, having currently open files also open in the
new process can lead to all sorts of hard to find bugs, and potentially
to security issues.

However, there are occasions when inheritance is desired.  To support
these cases, the following new functions and methods are available:

   * *note os.get_inheritable(): f2c, *note os.set_inheritable(): f2d.

   * *note os.get_handle_inheritable(): f2e, *note
     os.set_handle_inheritable(): f2f.

   * *note socket.socket.get_inheritable(): f30, *note
     socket.socket.set_inheritable(): f31.

Ver também
..........

PEP 446(2) – Make newly created file descriptors non-inheritable

     PEP escrito e implementado por Victor Stinner.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0446/

   (2) https://peps.python.org/pep-0446/


File: python.info,  Node: Melhorias no manuseio de Codecs,  Next: PEP 451 A ModuleSpec Type for the Import System,  Prev: PEP 446 Newly Created File Descriptors Are Non-Inheritable,  Up: Novas funcionalidades<15>

1.10.2.5 Melhorias no manuseio de Codecs
........................................

Since it was first introduced, the *note codecs: 1b. module has always
been intended to operate as a type-neutral dynamic encoding and decoding
system.  However, its close coupling with the Python text model,
especially the type restricted convenience methods on the builtin *note
str: 44c, *note bytes: 1c2. and *note bytearray: 2ea. types, has
historically obscured that fact.

As a key step in clarifying the situation, the *note codecs.encode():
f33. and *note codecs.decode(): f34. convenience functions are now
properly documented in Python 2.7, 3.3 and 3.4.  These functions have
existed in the *note codecs: 1b. module (and have been covered by the
regression test suite) since Python 2.4, but were previously only
discoverable through runtime introspection.

Unlike the convenience methods on *note str: 44c, *note bytes: 1c2. and
*note bytearray: 2ea, the *note codecs: 1b. convenience functions
support arbitrary codecs in both Python 2 and Python 3, rather than
being limited to Unicode text encodings (in Python 3) or ‘basestring’
<-> ‘basestring’ conversions (in Python 2).

In Python 3.4, the interpreter is able to identify the known non-text
encodings provided in the standard library and direct users towards
these general purpose convenience functions when appropriate:

     >>> b"abcdef".decode("hex")
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     LookupError: 'hex' is not a text encoding; use codecs.decode() to handle arbitrary codecs

     >>> "hello".encode("rot13")
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     LookupError: 'rot13' is not a text encoding; use codecs.encode() to handle arbitrary codecs

     >>> open("foo.txt", encoding="hex")
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     LookupError: 'hex' is not a text encoding; use codecs.open() to handle arbitrary codecs

In a related change, whenever it is feasible without breaking backwards
compatibility, exceptions raised during encoding and decoding operations
are wrapped in a chained exception of the same type that mentions the
name of the codec responsible for producing the error:

     >>> import codecs

     >>> codecs.decode(b"abcdefgh", "hex")
     Traceback (most recent call last):
       File "/usr/lib/python3.4/encodings/hex_codec.py", line 20, in hex_decode
         return (binascii.a2b_hex(input), len(input))
     binascii.Error: Non-hexadecimal digit found

     The above exception was the direct cause of the following exception:

     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     binascii.Error: decoding with 'hex' codec failed (Error: Non-hexadecimal digit found)

     >>> codecs.encode("hello", "bz2")
     Traceback (most recent call last):
       File "/usr/lib/python3.4/encodings/bz2_codec.py", line 17, in bz2_encode
         return (bz2.compress(input), len(input))
       File "/usr/lib/python3.4/bz2.py", line 498, in compress
         return comp.compress(data) + comp.flush()
     TypeError: 'str' does not support the buffer interface

     The above exception was the direct cause of the following exception:

     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: encoding with 'bz2' codec failed (TypeError: 'str' does not support the buffer interface)

Finally, as the examples above show, these improvements have permitted
the restoration of the convenience aliases for the non-Unicode codecs
that were themselves restored in Python 3.2.  This means that encoding
binary data to and from its hexadecimal representation (for example) can
now be written as:

     >>> from codecs import encode, decode
     >>> encode(b"hello", "hex")
     b'68656c6c6f'
     >>> decode(b"68656c6c6f", "hex")
     b'hello'

The binary and text transforms provided in the standard library are
detailed in *note Binary Transforms: f35. and *note Text Transforms:
f36.

(Contributed by Nick Coghlan in bpo-7475(1), bpo-17827(2), bpo-17828(3)
and bpo-19619(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=7475

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17827

   (3) https://bugs.python.org/issue?@action=redirect&bpo=17828

   (4) https://bugs.python.org/issue?@action=redirect&bpo=19619


File: python.info,  Node: PEP 451 A ModuleSpec Type for the Import System,  Next: Outras mudanças na linguagem<10>,  Prev: Melhorias no manuseio de Codecs,  Up: Novas funcionalidades<15>

1.10.2.6 PEP 451: A ModuleSpec Type for the Import System
.........................................................

PEP 451(1) provides an encapsulation of the information about a module
that the import machinery will use to load it (that is, a module
specification).  This helps simplify both the import implementation and
several import-related APIs.  The change is also a stepping stone for
several future import-related improvements(2).

The public-facing changes from the PEP are entirely backward-compatible.
Furthermore, they should be transparent to everyone but importer
authors.  Key finder and loader methods have been deprecated, but they
will continue working.  New importers should use the new methods
described in the PEP. Existing importers should be updated to implement
the new methods.  See the *note Descontinuados: f38. section for a list
of methods that should be replaced and their replacements.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0451/

   (2) 
https://mail.python.org/pipermail/python-dev/2013-November/130111.html


File: python.info,  Node: Outras mudanças na linguagem<10>,  Prev: PEP 451 A ModuleSpec Type for the Import System,  Up: Novas funcionalidades<15>

1.10.2.7 Outras mudanças na linguagem
.....................................

Algumas das mudanças menores feitas no núcleo da linguagem Python são:

   * Unicode database updated to UCD version 6.3.

   * *note min(): f3a. and *note max(): f3b. now accept a 'default'
     keyword-only argument that can be used to specify the value they
     return if the iterable they are evaluating has no elements.
     (Contributed by Julian Berman in bpo-18111(1).)

   * Objetos módulo são agora *note fracamente referenciáveis: f3c.

   * Module ‘__file__’ attributes (and related values) should now always
     contain absolute paths by default, with the sole exception of
     ‘__main__.__file__’ when a script has been executed directly using
     a relative path.  (Contributed by Brett Cannon in bpo-18416(2).)

   * All the UTF-* codecs (except UTF-7) now reject surrogates during
     both encoding and decoding unless the ‘surrogatepass’ error handler
     is used, with the exception of the UTF-16 decoder (which accepts
     valid surrogate pairs) and the UTF-16 encoder (which produces them
     while encoding non-BMP characters).  (Contributed by Victor
     Stinner, Kang-Hao (Kenny) Lu and Serhiy Storchaka in bpo-12892(3).)

   * New German EBCDIC *note codec: de1. ‘cp273’.  (Contributed by
     Michael Bierenfeld and Andrew Kuchling in bpo-1097797(4).)

   * New Ukrainian *note codec: de1. ‘cp1125’.  (Contributed by Serhiy
     Storchaka in bpo-19668(5).)

   * *note bytes: 1c2.join() and *note bytearray: 2ea.join() now accept
     arbitrary buffer objects as arguments.  (Contributed by Antoine
     Pitrou in bpo-15958(6).)

   * The *note int: 257. constructor now accepts any object that has an
     ‘__index__’ method for its 'base' argument.  (Contributed by Mark
     Dickinson in bpo-16772(7).)

   * Frame objects now have a *note clear(): 280. method that clears all
     references to local variables from the frame.  (Contributed by
     Antoine Pitrou in bpo-17934(8).)

   * *note memoryview: 2eb. is now registered as a *note Sequence: 1e,
     and supports the *note reversed(): 869. builtin.  (Contributed by
     Nick Coghlan and Claudiu Popa in bpo-18690(9) and bpo-19078(10).)

   * Signatures reported by *note help(): 8dd. have been modified and
     improved in several cases as a result of the introduction of
     Argument Clinic and other changes to the *note inspect: 7e. and
     *note pydoc: b5. modules.

   * *note __length_hint__(): f3d. is now part of the formal language
     specification (see PEP 424(11)).  (Contributed by Armin Ronacher in
     bpo-16148(12).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18111

   (2) https://bugs.python.org/issue?@action=redirect&bpo=18416

   (3) https://bugs.python.org/issue?@action=redirect&bpo=12892

   (4) https://bugs.python.org/issue?@action=redirect&bpo=1097797

   (5) https://bugs.python.org/issue?@action=redirect&bpo=19668

   (6) https://bugs.python.org/issue?@action=redirect&bpo=15958

   (7) https://bugs.python.org/issue?@action=redirect&bpo=16772

   (8) https://bugs.python.org/issue?@action=redirect&bpo=17934

   (9) https://bugs.python.org/issue?@action=redirect&bpo=18690

   (10) https://bugs.python.org/issue?@action=redirect&bpo=19078

   (11) https://peps.python.org/pep-0424/

   (12) https://bugs.python.org/issue?@action=redirect&bpo=16148


File: python.info,  Node: Novos módulos<10>,  Next: Módulos melhorados<10>,  Prev: Novas funcionalidades<15>,  Up: O que há de novo no Python 3 4

1.10.3 Novos módulos
--------------------

* Menu:

* asyncio: asyncio<11>.
* ensurepip: ensurepip<2>.
* enum: enum<9>.
* pathlib: pathlib<11>.
* selectors: selectors<2>.
* statistics: statistics<6>.
* tracemalloc: tracemalloc<4>.


File: python.info,  Node: asyncio<11>,  Next: ensurepip<2>,  Up: Novos módulos<10>

1.10.3.1 asyncio
................

The new *note asyncio: a. module (defined in PEP 3156(1)) provides a
standard pluggable event loop model for Python, providing solid
asynchronous IO support in the standard library, and making it easier
for other event loop implementations to interoperate with the standard
library and each other.

For Python 3.4, this module is considered a *note provisional API: b16.

Ver também
..........

PEP 3156(2) – Asynchronous IO Support Rebooted: the “asyncio” Module

     PEP written and implementation led by Guido van Rossum.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3156/

   (2) https://peps.python.org/pep-3156/


File: python.info,  Node: ensurepip<2>,  Next: enum<9>,  Prev: asyncio<11>,  Up: Novos módulos<10>

1.10.3.2 ensurepip
..................

The new *note ensurepip: 55. module is the primary infrastructure for
the PEP 453(1) implementation.  In the normal course of events end users
will not need to interact with this module, but it can be used to
manually bootstrap ‘pip’ if the automated bootstrapping into an
installation or virtual environment was declined.

*note ensurepip: 55. includes a bundled copy of ‘pip’, up-to-date as of
the first release candidate of the release of CPython with which it
ships (this applies to both maintenance releases and feature releases).
‘ensurepip’ does not access the internet.  If the installation has
Internet access, after ‘ensurepip’ is run the bundled ‘pip’ can be used
to upgrade ‘pip’ to a more recent release than the bundled one.  (Note
that such an upgraded version of ‘pip’ is considered to be a separately
installed package and will not be removed if Python is uninstalled.)

The module is named 'ensure'pip because if called when ‘pip’ is already
installed, it does nothing.  It also has an ‘--upgrade’ option that will
cause it to install the bundled copy of ‘pip’ if the existing installed
version of ‘pip’ is older than the bundled copy.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0453/


File: python.info,  Node: enum<9>,  Next: pathlib<11>,  Prev: ensurepip<2>,  Up: Novos módulos<10>

1.10.3.3 enum
.............

The new *note enum: 56. module (defined in PEP 435(1)) provides a
standard implementation of enumeration types, allowing other modules
(such as *note socket: cc.) to provide more informative error messages
and better debugging support by replacing opaque integer constants with
backwards compatible enumeration values.

Ver também
..........

PEP 435(2) – Adding an Enum type to the Python standard library

     PEP written by Barry Warsaw, Eli Bendersky and Ethan Furman,
     implemented by Ethan Furman.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0435/

   (2) https://peps.python.org/pep-0435/


File: python.info,  Node: pathlib<11>,  Next: selectors<2>,  Prev: enum<9>,  Up: Novos módulos<10>

1.10.3.4 pathlib
................

The new *note pathlib: a4. module offers classes representing filesystem
paths with semantics appropriate for different operating systems.  Path
classes are divided between 'pure paths', which provide purely
computational operations without I/O, and 'concrete paths', which
inherit from pure paths but also provide I/O operations.

For Python 3.4, this module is considered a *note provisional API: b16.

Ver também
..........

PEP 428(1) – The pathlib module – object-oriented filesystem paths

     PEP escrita e implementada por Antoine Pitrou.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0428/


File: python.info,  Node: selectors<2>,  Next: statistics<6>,  Prev: pathlib<11>,  Up: Novos módulos<10>

1.10.3.5 selectors
..................

The new *note selectors: c2. module (created as part of implementing PEP
3156(1)) allows high-level and efficient I/O multiplexing, built upon
the *note select: c1. module primitives.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3156/


File: python.info,  Node: statistics<6>,  Next: tracemalloc<4>,  Prev: selectors<2>,  Up: Novos módulos<10>

1.10.3.6 statistics
...................

The new *note statistics: d2. module (defined in PEP 450(1)) offers some
core statistics functionality directly in the standard library.  This
module supports calculation of the mean, median, mode, variance and
standard deviation of a data series.

Ver também
..........

PEP 450(2) – Adding A Statistics Module To The Standard Library

     PEP written and implemented by Steven D’Aprano

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0450/

   (2) https://peps.python.org/pep-0450/


File: python.info,  Node: tracemalloc<4>,  Prev: statistics<6>,  Up: Novos módulos<10>

1.10.3.7 tracemalloc
....................

The new *note tracemalloc: ff. module (defined in PEP 454(1)) is a debug
tool to trace memory blocks allocated by Python.  It provides the
following information:

   * Trace where an object was allocated

   * Statistics on allocated memory blocks per filename and per line
     number: total size, number and average size of allocated memory
     blocks

   * Compute the differences between two snapshots to detect memory
     leaks

Ver também
..........

PEP 454(2) – Add a new tracemalloc module to trace Python memory allocations

     PEP escrito e implementado por Victor Stinner

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0454/

   (2) https://peps.python.org/pep-0454/


File: python.info,  Node: Módulos melhorados<10>,  Next: CPython Implementation Changes,  Prev: Novos módulos<10>,  Up: O que há de novo no Python 3 4

1.10.4 Módulos melhorados
-------------------------

* Menu:

* abc::
* aifc: aifc<2>.
* argparse: argparse<5>.
* audioop::
* base64: base64<3>.
* collections: collections<6>.
* colorsys::
* contextlib: contextlib<6>.
* dbm: dbm<6>.
* dis: dis<4>.
* doctest: doctest<4>.
* email: email<4>.
* filecmp::
* functools: functools<5>.
* gc: gc<5>.
* glob: glob<4>.
* hashlib: hashlib<6>.
* hmac: hmac<3>.
* html::
* http: http<3>.
* idlelib e IDLE: idlelib e IDLE<4>.
* importlib: importlib<9>.
* inspect: inspect<8>.
* ipaddress: ipaddress<5>.
* logging: logging<6>.
* marshal: marshal<2>.
* mmap: mmap<3>.
* multiprocessing: multiprocessing<7>.
* operador: operador<3>.
* os: os<11>.
* pdb: pdb<6>.
* pickle: pickle<4>.
* plistlib: plistlib<2>.
* poplib: poplib<3>.
* pprint: pprint<4>.
* pty::
* pydoc: pydoc<4>.
* re: re<8>.
* resource::
* select::
* shelve: shelve<2>.
* shutil: shutil<6>.
* smtpd: smtpd<3>.
* smtplib: smtplib<3>.
* socket: socket<9>.
* sqlite3: sqlite3<9>.
* ssl: ssl<10>.
* stat::
* struct: struct<2>.
* subprocess: subprocess<5>.
* sunau: sunau<2>.
* sys: sys<12>.
* tarfile: tarfile<8>.
* textwrap::
* threading: threading<7>.
* traceback: traceback<6>.
* types: types<6>.
* urllib: urllib<3>.
* unittest: unittest<9>.
* venv: venv<7>.
* wave: wave<2>.
* weakref: weakref<2>.
* xml.etree: xml etree<2>.
* zipfile: zipfile<5>.


File: python.info,  Node: abc,  Next: aifc<2>,  Up: Módulos melhorados<10>

1.10.4.1 abc
............

New function *note abc.get_cache_token(): f48. can be used to know when
to invalidate caches that are affected by changes in the object graph.
(Contributed by Łukasz Langa in bpo-16832(1).)

New class *note ABC: f49. has *note ABCMeta: f4a. as its meta class.
Using ‘ABC’ as a base class has essentially the same effect as
specifying ‘metaclass=abc.ABCMeta’, but is simpler to type and easier to
read.  (Contributed by Bruno Dupuis in bpo-16049(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16832

   (2) https://bugs.python.org/issue?@action=redirect&bpo=16049


File: python.info,  Node: aifc<2>,  Next: argparse<5>,  Prev: abc,  Up: Módulos melhorados<10>

1.10.4.2 aifc
.............

The ‘getparams()’ method now returns a namedtuple rather than a plain
tuple.  (Contributed by Claudiu Popa in bpo-17818(1).)

‘aifc.open()’ now supports the context management protocol: when used in
a *note with: 5d2. block, the ‘close()’ method of the returned object
will be called automatically at the end of the block.  (Contributed by
Serhiy Storchacha in bpo-16486(2).)

The ‘writeframesraw()’ and ‘writeframes()’ methods now accept any *note
bytes-like object: d4f.  (Contributed by Serhiy Storchaka in
bpo-8311(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17818

   (2) https://bugs.python.org/issue?@action=redirect&bpo=16486

   (3) https://bugs.python.org/issue?@action=redirect&bpo=8311


File: python.info,  Node: argparse<5>,  Next: audioop,  Prev: aifc<2>,  Up: Módulos melhorados<10>

1.10.4.3 argparse
.................

The *note FileType: f4d. class now accepts 'encoding' and 'errors'
arguments, which are passed through to *note open(): 51c.  (Contributed
by Lucas Maystre in bpo-11175(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=11175


File: python.info,  Node: audioop,  Next: base64<3>,  Prev: argparse<5>,  Up: Módulos melhorados<10>

1.10.4.4 audioop
................

‘audioop’ now supports 24-bit samples.  (Contributed by Serhiy Storchaka
in bpo-12866(1).)

New ‘byteswap()’ function converts big-endian samples to little-endian
and vice versa.  (Contributed by Serhiy Storchaka in bpo-19641(2).)

All ‘audioop’ functions now accept any *note bytes-like object: d4f.
Strings are not accepted: they didn’t work before, now they raise an
error right away.  (Contributed by Serhiy Storchaka in bpo-16685(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=12866

   (2) https://bugs.python.org/issue?@action=redirect&bpo=19641

   (3) https://bugs.python.org/issue?@action=redirect&bpo=16685


File: python.info,  Node: base64<3>,  Next: collections<6>,  Prev: audioop,  Up: Módulos melhorados<10>

1.10.4.5 base64
...............

The encoding and decoding functions in *note base64: e. now accept any
*note bytes-like object: d4f. in cases where it previously required a
*note bytes: 1c2. or *note bytearray: 2ea. instance.  (Contributed by
Nick Coghlan in bpo-17839(1).)

New functions *note a85encode(): f50, *note a85decode(): f51, *note
b85encode(): f52, and *note b85decode(): f53. provide the ability to
encode and decode binary data from and to ‘Ascii85’ and the
git/mercurial ‘Base85’ formats, respectively.  The ‘a85’ functions have
options that can be used to make them compatible with the variants of
the ‘Ascii85’ encoding, including the Adobe variant.  (Contributed by
Martin Morrison, the Mercurial project, Serhiy Storchaka, and Antoine
Pitrou in bpo-17618(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17839

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17618


File: python.info,  Node: collections<6>,  Next: colorsys,  Prev: base64<3>,  Up: Módulos melhorados<10>

1.10.4.6 collections
....................

The *note ChainMap.new_child(): f55. method now accepts an 'm' argument
specifying the child map to add to the chain.  This allows an existing
mapping and/or a custom mapping type to be used for the child.
(Contributed by Vinay Sajip in bpo-16613(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16613


File: python.info,  Node: colorsys,  Next: contextlib<6>,  Prev: collections<6>,  Up: Módulos melhorados<10>

1.10.4.7 colorsys
.................

The number of digits in the coefficients for the RGB — YIQ conversions
have been expanded so that they match the FCC NTSC versions.  The change
in results should be less than 1% and may better match results found
elsewhere.  (Contributed by Brian Landers and Serhiy Storchaka in
bpo-14323(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14323


File: python.info,  Node: contextlib<6>,  Next: dbm<6>,  Prev: colorsys,  Up: Módulos melhorados<10>

1.10.4.8 contextlib
...................

The new *note contextlib.suppress: f58. context manager helps to clarify
the intent of code that deliberately suppresses exceptions from a single
statement.  (Contributed by Raymond Hettinger in bpo-15806(1) and Zero
Piraeus in bpo-19266(2).)

The new *note contextlib.redirect_stdout(): e12. context manager makes
it easier for utility scripts to handle inflexible APIs that write their
output to *note sys.stdout: ae6. and don’t provide any options to
redirect it.  Using the context manager, the *note sys.stdout: ae6.
output can be redirected to any other stream or, in conjunction with
*note io.StringIO: f59, to a string.  The latter can be especially
useful, for example, to capture output from a function that was written
to implement a command line interface.  It is recommended only for
utility scripts because it affects the global state of *note sys.stdout:
ae6.  (Contributed by Raymond Hettinger in bpo-15805(3).)

The *note contextlib: 23. documentation has also been updated to include
a *note discussion: f5a. of the differences between single use, reusable
and reentrant context managers.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15806

   (2) https://bugs.python.org/issue?@action=redirect&bpo=19266

   (3) https://bugs.python.org/issue?@action=redirect&bpo=15805


File: python.info,  Node: dbm<6>,  Next: dis<4>,  Prev: contextlib<6>,  Up: Módulos melhorados<10>

1.10.4.9 dbm
............

*note dbm.open(): f5c. objects now support the context management
protocol.  When used in a *note with: 5d2. statement, the ‘close’ method
of the database object will be called automatically at the end of the
block.  (Contributed by Claudiu Popa and Nick Coghlan in bpo-19282(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19282


File: python.info,  Node: dis<4>,  Next: doctest<4>,  Prev: dbm<6>,  Up: Módulos melhorados<10>

1.10.4.10 dis
.............

Functions *note show_code(): f5e, *note dis(): b46, *note distb(): f5f,
and *note disassemble(): f60. now accept a keyword-only 'file' argument
that controls where they write their output.

The *note dis: 38. module is now built around an *note Instruction: 1da.
class that provides object oriented access to the details of each
individual bytecode operation.

A new method, *note get_instructions(): 1d9, provides an iterator that
emits the Instruction stream for a given piece of Python code.  Thus it
is now possible to write a program that inspects and manipulates a
bytecode object in ways different from those provided by the *note dis:
38. module itself.  For example:

     >>> import dis
     >>> for instr in dis.get_instructions(lambda x: x + 1):
     ...     print(instr.opname)
     LOAD_FAST
     LOAD_CONST
     BINARY_ADD
     RETURN_VALUE

The various display tools in the *note dis: 38. module have been
rewritten to use these new components.

In addition, a new application-friendly class *note Bytecode: f61.
provides an object-oriented API for inspecting bytecode in both in
human-readable form and for iterating over instructions.  The *note
Bytecode: f61. constructor takes the same arguments that *note
get_instructions(): 1d9. does (plus an optional 'current_offset'), and
the resulting object can be iterated to produce *note Instruction: 1da.
objects.  But it also has a *note dis: f62. method, equivalent to
calling *note dis: b46. on the constructor argument, but returned as a
multi-line string:

     >>> bytecode = dis.Bytecode(lambda x: x + 1, current_offset=3)
     >>> for instr in bytecode:
     ...     print('{} ({})'.format(instr.opname, instr.opcode))
     LOAD_FAST (124)
     LOAD_CONST (100)
     BINARY_ADD (23)
     RETURN_VALUE (83)
     >>> bytecode.dis().splitlines()
     ['  1           0 LOAD_FAST                0 (x)',
      '      -->     3 LOAD_CONST               1 (1)',
      '              6 BINARY_ADD',
      '              7 RETURN_VALUE']

*note Bytecode: f61. also has a class method, *note from_traceback():
f63, that provides the ability to manipulate a traceback (that is,
‘print(Bytecode.from_traceback(tb).dis())’ is equivalent to
‘distb(tb)’).

(Contributed by Nick Coghlan, Ryan Kelly and Thomas Kluyver in
bpo-11816(1) and Claudiu Popa in bpo-17916(2).)

New function *note stack_effect(): f64. computes the effect on the
Python stack of a given opcode and argument, information that is not
otherwise available.  (Contributed by Larry Hastings in bpo-19722(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=11816

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17916

   (3) https://bugs.python.org/issue?@action=redirect&bpo=19722


File: python.info,  Node: doctest<4>,  Next: email<4>,  Prev: dis<4>,  Up: Módulos melhorados<10>

1.10.4.11 doctest
.................

A new *note option flag: f66, *note FAIL_FAST: f67, halts test running
as soon as the first failure is detected.  (Contributed by R. David
Murray and Daniel Urban in bpo-16522(1).)

The *note doctest: 3a. command line interface now uses *note argparse:
6, and has two new options, ‘-o’ and ‘-f’.  ‘-o’ allows *note doctest
options: f66. to be specified on the command line, and ‘-f’ is a
shorthand for ‘-o FAIL_FAST’ (to parallel the similar option supported
by the *note unittest: 106. CLI). (Contributed by R. David Murray in
bpo-11390(2).)

*note doctest: 3a. will now find doctests in extension module ‘__doc__’
strings.  (Contributed by Zachary Ware in bpo-3158(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16522

   (2) https://bugs.python.org/issue?@action=redirect&bpo=11390

   (3) https://bugs.python.org/issue?@action=redirect&bpo=3158


File: python.info,  Node: email<4>,  Next: filecmp,  Prev: doctest<4>,  Up: Módulos melhorados<10>

1.10.4.12 email
...............

*note as_string(): f69. now accepts a 'policy' argument to override the
default policy of the message when generating a string representation of
it.  This means that ‘as_string’ can now be used in more circumstances,
instead of having to create and use a *note generator: 40. in order to
pass formatting parameters to its ‘flatten’ method.  (Contributed by R.
David Murray in bpo-18600(1).)

New method *note as_bytes(): f6a. added to produce a bytes
representation of the message in a fashion similar to how ‘as_string’
produces a string representation.  It does not accept the 'maxheaderlen'
argument, but does accept the 'unixfrom' and 'policy' arguments.  The
*note Message: 27c. *note __bytes__(): f6b. method calls it, meaning
that ‘bytes(mymsg)’ will now produce the intuitive result: a bytes
object containing the fully formatted message.  (Contributed by R. David
Murray in bpo-18600(2).)

The *note Message.set_param(): f6c. message now accepts a 'replace'
keyword argument.  When specified, the associated header will be updated
without changing its location in the list of headers.  For backward
compatibility, the default is ‘False’.  (Contributed by R. David Murray
in bpo-18891(3).)  A pair of new subclasses of *note Message: 27c. have
been added (*note EmailMessage: 27b. and *note MIMEPart: f6d.), along
with a new sub-module, *note contentmanager: 3d. and a new *note policy:
4f. attribute *note content_manager: f6e.  All documentation is
currently in the new module, which is being added as part of email’s new
*note provisional API: b16.  These classes provide a number of new
methods that make extracting content from and inserting content into
email messages much easier.  For details, see the *note contentmanager:
3d. documentation and the *note email; Exemplos: f6f.  These API
additions complete the bulk of the work that was planned as part of the
email6 project.  The currently provisional API is scheduled to become
final in Python 3.5 (possibly with a few minor additions in the area of
error handling).  (Contributed by R. David Murray in bpo-18891(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18600

   (2) https://bugs.python.org/issue?@action=redirect&bpo=18600

   (3) https://bugs.python.org/issue?@action=redirect&bpo=18891

   (4) https://bugs.python.org/issue?@action=redirect&bpo=18891


File: python.info,  Node: filecmp,  Next: functools<5>,  Prev: email<4>,  Up: Módulos melhorados<10>

1.10.4.13 filecmp
.................

A new *note clear_cache(): f71. function provides the ability to clear
the *note filecmp: 5a. comparison cache, which uses *note os.stat():
4a0. information to determine if the file has changed since the last
compare.  This can be used, for example, if the file might have been
changed and re-checked in less time than the resolution of a particular
filesystem’s file modification time field.  (Contributed by Mark Levitt
in bpo-18149(1).)

New module attribute *note DEFAULT_IGNORES: f72. provides the list of
directories that are used as the default value for the 'ignore'
parameter of the *note dircmp(): f73. function.  (Contributed by Eli
Bendersky in bpo-15442(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18149

   (2) https://bugs.python.org/issue?@action=redirect&bpo=15442


File: python.info,  Node: functools<5>,  Next: gc<5>,  Prev: filecmp,  Up: Módulos melhorados<10>

1.10.4.14 functools
...................

The new *note partialmethod(): a85. descriptor brings partial argument
application to descriptors, just as *note partial(): 414. provides for
normal callables.  The new descriptor also makes it easier to get
arbitrary callables (including *note partial(): 414. instances) to
behave like normal instance methods when included in a class definition.
(Contributed by Alon Horev and Nick Coghlan in bpo-4331(1).)  The new
*note singledispatch(): 639. decorator brings support for
single-dispatch generic functions to the Python standard library.  Where
object oriented programming focuses on grouping multiple operations on a
common set of data into a class, a generic function focuses on grouping
multiple implementations of an operation that allows it to work with
'different' kinds of data.

Ver também
..........

PEP 443(2) – Single-dispatch generic functions

     PEP escrita e implementada por Łukasz Langa.

*note total_ordering(): f75. now supports a return value of *note
NotImplemented: 7d3. from the underlying comparison function.
(Contributed by Katie Miller in bpo-10042(3).)

A pure-python version of the *note partial(): 414. function is now in
the stdlib; in CPython it is overridden by the C accelerated version,
but it is available for other implementations to use.  (Contributed by
Brian Thorne in bpo-12428(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=4331

   (2) https://peps.python.org/pep-0443/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=10042

   (4) https://bugs.python.org/issue?@action=redirect&bpo=12428


File: python.info,  Node: gc<5>,  Next: glob<4>,  Prev: functools<5>,  Up: Módulos melhorados<10>

1.10.4.15 gc
............

New function *note get_stats(): f77. returns a list of three
per-generation dictionaries containing the collections statistics since
interpreter startup.  (Contributed by Antoine Pitrou in bpo-16351(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16351


File: python.info,  Node: glob<4>,  Next: hashlib<6>,  Prev: gc<5>,  Up: Módulos melhorados<10>

1.10.4.16 glob
..............

A new function *note escape(): f79. provides a way to escape special
characters in a filename so that they do not become part of the globbing
expansion but are instead matched literally.  (Contributed by Serhiy
Storchaka in bpo-8402(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=8402


File: python.info,  Node: hashlib<6>,  Next: hmac<3>,  Prev: glob<4>,  Up: Módulos melhorados<10>

1.10.4.17 hashlib
.................

A new *note hashlib.pbkdf2_hmac(): 50f. function provides the PKCS#5
password-based key derivation function 2(1).  (Contributed by Christian
Heimes in bpo-18582(2).)

The *note name: f7b. attribute of *note hashlib: 68. hash objects is now
a formally supported interface.  It has always existed in CPython’s
*note hashlib: 68. (although it did not return lower case names for all
supported hashes), but it was not a public interface and so some other
Python implementations have not previously supported it.  (Contributed
by Jason R. Coombs in bpo-18532(3).)

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/PBKDF2

   (2) https://bugs.python.org/issue?@action=redirect&bpo=18582

   (3) https://bugs.python.org/issue?@action=redirect&bpo=18532


File: python.info,  Node: hmac<3>,  Next: html,  Prev: hashlib<6>,  Up: Módulos melhorados<10>

1.10.4.18 hmac
..............

*note hmac: 6a. now accepts ‘bytearray’ as well as ‘bytes’ for the 'key'
argument to the *note new(): aae. function, and the 'msg' parameter to
both the *note new(): aae. function and the *note update(): f7d. method
now accepts any type supported by the *note hashlib: 68. module.
(Contributed by Jonas Borgström in bpo-18240(1).)

The 'digestmod' argument to the *note hmac.new(): aae. function may now
be any hash digest name recognized by *note hashlib: 68.  In addition,
the current behavior in which the value of 'digestmod' defaults to ‘MD5’
is deprecated: in a future version of Python there will be no default
value.  (Contributed by Christian Heimes in bpo-17276(2).)

With the addition of *note block_size: f7e. and *note name: f7f.
attributes (and the formal documentation of the *note digest_size: f80.
attribute), the *note hmac: 6a. module now conforms fully to the PEP
247(3) API. (Contributed by Christian Heimes in bpo-18775(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18240

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17276

   (3) https://peps.python.org/pep-0247/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=18775


File: python.info,  Node: html,  Next: http<3>,  Prev: hmac<3>,  Up: Módulos melhorados<10>

1.10.4.19 html
..............

New function *note unescape(): 95e. function converts HTML5 character
references to the corresponding Unicode characters.  (Contributed by
Ezio Melotti in bpo-2927(1).)

*note HTMLParser: 87b. accepts a new keyword argument 'convert_charrefs'
that, when ‘True’, automatically converts all character references.  For
backward-compatibility, its value defaults to ‘False’, but it will
change to ‘True’ in a future version of Python, so you are invited to
set it explicitly and update your code to use this new feature.
(Contributed by Ezio Melotti in bpo-13633(2).)

The 'strict' argument of *note HTMLParser: 87b. is now deprecated.
(Contributed by Ezio Melotti in bpo-15114(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=2927

   (2) https://bugs.python.org/issue?@action=redirect&bpo=13633

   (3) https://bugs.python.org/issue?@action=redirect&bpo=15114


File: python.info,  Node: http<3>,  Next: idlelib e IDLE<4>,  Prev: html,  Up: Módulos melhorados<10>

1.10.4.20 http
..............

*note send_error(): f83. now accepts an optional additional 'explain'
parameter which can be used to provide an extended error description,
overriding the hardcoded default if there is one.  This extended error
description will be formatted using the *note error_message_format: f84.
attribute and sent as the body of the error response.  (Contributed by
Karl Cow in bpo-12921(1).)

The *note http.server: 72. *note command line interface: f85. now has a
‘-b/--bind’ option that causes the server to listen on a specific
address.  (Contributed by Malte Swart in bpo-17764(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=12921

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17764


File: python.info,  Node: idlelib e IDLE<4>,  Next: importlib<9>,  Prev: http<3>,  Up: Módulos melhorados<10>

1.10.4.21 idlelib e IDLE
........................

Since idlelib implements the IDLE shell and editor and is not intended
for import by other programs, it gets improvements with every release.
See ‘Lib/idlelib/NEWS.txt’ for a cumulative list of changes since 3.3.0,
as well as changes made in future 3.4.x releases.  This file is also
available from the IDLE Help ‣ About IDLE dialog.


File: python.info,  Node: importlib<9>,  Next: inspect<8>,  Prev: idlelib e IDLE<4>,  Up: Módulos melhorados<10>

1.10.4.22 importlib
...................

The *note InspectLoader: f88. ABC defines a new method, *note
source_to_code(): e3d. that accepts source data and a path and returns a
code object.  The default implementation is equivalent to ‘compile(data,
path, 'exec', dont_inherit=True)’.  (Contributed by Eric Snow and Brett
Cannon in bpo-15627(1).)

*note InspectLoader: f88. also now has a default implementation for the
*note get_code(): f89. method.  However, it will normally be desirable
to override the default implementation for performance reasons.
(Contributed by Brett Cannon in bpo-18072(2).)

The *note reload(): 519. function has been moved from ‘imp’ to *note
importlib: 77. as part of the ‘imp’ module deprecation.  (Contributed by
Berker Peksag in bpo-18193(3).)

*note importlib.util: 7d. now has a *note MAGIC_NUMBER: 513. attribute
providing access to the bytecode version number.  This replaces the
‘get_magic()’ function in the deprecated ‘imp’ module.  (Contributed by
Brett Cannon in bpo-18192(4).)

New *note importlib.util: 7d. functions *note cache_from_source(): 2fe.
and *note source_from_cache(): 51a. replace the same-named functions in
the deprecated ‘imp’ module.  (Contributed by Brett Cannon in
bpo-18194(5).)

The *note importlib: 77. bootstrap *note NamespaceLoader: f8a. now
conforms to the *note InspectLoader: f88. ABC, which means that ‘runpy’
and ‘python -m’ can now be used with namespace packages.  (Contributed
by Brett Cannon in bpo-18058(6).)

*note importlib.util: 7d. has a new function *note decode_source(): f8b.
that decodes source from bytes using universal newline processing.  This
is useful for implementing *note InspectLoader.get_source(): f8c.
methods.

*note importlib.machinery.ExtensionFileLoader: cd0. now has a *note
get_filename(): f8d. method.  This was inadvertently omitted in the
original implementation.  (Contributed by Eric Snow in bpo-19152(7).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15627

   (2) https://bugs.python.org/issue?@action=redirect&bpo=18072

   (3) https://bugs.python.org/issue?@action=redirect&bpo=18193

   (4) https://bugs.python.org/issue?@action=redirect&bpo=18192

   (5) https://bugs.python.org/issue?@action=redirect&bpo=18194

   (6) https://bugs.python.org/issue?@action=redirect&bpo=18058

   (7) https://bugs.python.org/issue?@action=redirect&bpo=19152


File: python.info,  Node: inspect<8>,  Next: ipaddress<5>,  Prev: importlib<9>,  Up: Módulos melhorados<10>

1.10.4.23 inspect
.................

The *note inspect: 7e. module now offers a basic *note command line
interface: f8f. to quickly display source code and other information for
modules, classes and functions.  (Contributed by Claudiu Popa and Nick
Coghlan in bpo-18626(1).)

*note unwrap(): f90. makes it easy to unravel wrapper function chains
created by *note functools.wraps(): f91. (and any other API that sets
the ‘__wrapped__’ attribute on a wrapper function).  (Contributed by
Daniel Urban, Aaron Iles and Nick Coghlan in bpo-13266(2).)

As part of the implementation of the new *note enum: 56. module, the
*note inspect: 7e. module now has substantially better support for
custom ‘__dir__’ methods and dynamic class attributes provided through
metaclasses.  (Contributed by Ethan Furman in bpo-18929(3) and
bpo-19030(4).)

*note getfullargspec(): 739. and ‘getargspec()’ now use the *note
signature(): 738. API. This allows them to support a much broader range
of callables, including those with ‘__signature__’ attributes, those
with metadata provided by argument clinic, *note functools.partial():
414. objects and more.  Note that, unlike *note signature(): 738, these
functions still ignore ‘__wrapped__’ attributes, and report the already
bound first argument for bound methods, so it is still necessary to
update your code to use *note signature(): 738. directly if those
features are desired.  (Contributed by Yury Selivanov in bpo-17481(5).)

*note signature(): 738. now supports duck types of CPython functions,
which adds support for functions compiled with Cython.  (Contributed by
Stefan Behnel and Yury Selivanov in bpo-17159(6).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18626

   (2) https://bugs.python.org/issue?@action=redirect&bpo=13266

   (3) https://bugs.python.org/issue?@action=redirect&bpo=18929

   (4) https://bugs.python.org/issue?@action=redirect&bpo=19030

   (5) https://bugs.python.org/issue?@action=redirect&bpo=17481

   (6) https://bugs.python.org/issue?@action=redirect&bpo=17159


File: python.info,  Node: ipaddress<5>,  Next: logging<6>,  Prev: inspect<8>,  Up: Módulos melhorados<10>

1.10.4.24 ipaddress
...................

*note ipaddress: 80. was added to the standard library in Python 3.3 as
a *note provisional API: b16.  With the release of Python 3.4, this
qualification has been removed: *note ipaddress: 80. is now considered a
stable API, covered by the normal standard library requirements to
maintain backwards compatibility.

A new *note is_global: f93. property is ‘True’ if an address is globally
routeable.  (Contributed by Peter Moody in bpo-17400(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17400


File: python.info,  Node: logging<6>,  Next: marshal<2>,  Prev: ipaddress<5>,  Up: Módulos melhorados<10>

1.10.4.25 logging
.................

The *note TimedRotatingFileHandler: f95. has a new 'atTime' parameter
that can be used to specify the time of day when rollover should happen.
(Contributed by Ronald Oussoren in bpo-9556(1).)

*note SocketHandler: f96. and *note DatagramHandler: f97. now support
Unix domain sockets (by setting 'port' to ‘None’).  (Contributed by
Vinay Sajip in commit ce46195b56a9.)

*note fileConfig(): b66. now accepts a *note
configparser.RawConfigParser: f98. subclass instance for the 'fname'
parameter.  This facilitates using a configuration file when logging
configuration is just a part of the overall application configuration,
or where the application modifies the configuration before passing it to
*note fileConfig(): b66.  (Contributed by Vinay Sajip in bpo-16110(2).)

Logging configuration data received from a socket via the *note
logging.config.listen(): f99. function can now be validated before being
processed by supplying a verification function as the argument to the
new 'verify' keyword argument.  (Contributed by Vinay Sajip in
bpo-15452(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9556

   (2) https://bugs.python.org/issue?@action=redirect&bpo=16110

   (3) https://bugs.python.org/issue?@action=redirect&bpo=15452


File: python.info,  Node: marshal<2>,  Next: mmap<3>,  Prev: logging<6>,  Up: Módulos melhorados<10>

1.10.4.26 marshal
.................

The default *note marshal: 8d. version has been bumped to 3.  The code
implementing the new version restores the Python2 behavior of recording
only one copy of interned strings and preserving the interning on
deserialization, and extends this “one copy” ability to any object type
(including handling recursive references).  This reduces both the size
of ‘.pyc’ files and the amount of memory a module occupies in memory
when it is loaded from a ‘.pyc’ (or ‘.pyo’) file.  (Contributed by
Kristján Valur Jónsson in bpo-16475(1), with additional speedups by
Antoine Pitrou in bpo-19219(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16475

   (2) https://bugs.python.org/issue?@action=redirect&bpo=19219


File: python.info,  Node: mmap<3>,  Next: multiprocessing<7>,  Prev: marshal<2>,  Up: Módulos melhorados<10>

1.10.4.27 mmap
..............

mmap objects are now *note weakly referenceable: f3c.  (Contributed by
Valerie Lambert in bpo-4885(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=4885


File: python.info,  Node: multiprocessing<7>,  Next: operador<3>,  Prev: mmap<3>,  Up: Módulos melhorados<10>

1.10.4.28 multiprocessing
.........................

On Unix two new *note start methods: 2c8, ‘spawn’ and ‘forkserver’, have
been added for starting processes using *note multiprocessing: 94.
These make the mixing of processes with threads more robust, and the
‘spawn’ method matches the semantics that multiprocessing has always
used on Windows.  New function *note get_all_start_methods(): f9d.
reports all start methods available on the platform, *note
get_start_method(): f9e. reports the current start method, and *note
set_start_method(): 2c7. sets the start method.  (Contributed by Richard
Oudkerk in bpo-8713(1).)

*note multiprocessing: 94. also now has the concept of a ‘context’,
which determines how child processes are created.  New function *note
get_context(): 2c6. returns a context that uses a specified start
method.  It has the same API as the *note multiprocessing: 94. module
itself, so you can use it to create *note Pool: f9f.s and other objects
that will operate within that context.  This allows a framework and an
application or different parts of the same application to use
multiprocessing without interfering with each other.  (Contributed by
Richard Oudkerk in bpo-18999(2).)

Except when using the old 'fork' start method, child processes no longer
inherit unneeded handles/file descriptors from their parents (part of
bpo-8713(3)).

*note multiprocessing: 94. now relies on *note runpy: be. (which
implements the ‘-m’ switch) to initialise ‘__main__’ appropriately in
child processes when using the ‘spawn’ or ‘forkserver’ start methods.
This resolves some edge cases where combining multiprocessing, the ‘-m’
command line switch, and explicit relative imports could cause obscure
failures in child processes.  (Contributed by Nick Coghlan in
bpo-19946(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=8713

   (2) https://bugs.python.org/issue?@action=redirect&bpo=18999

   (3) https://bugs.python.org/issue?@action=redirect&bpo=8713

   (4) https://bugs.python.org/issue?@action=redirect&bpo=19946


File: python.info,  Node: operador<3>,  Next: os<11>,  Prev: multiprocessing<7>,  Up: Módulos melhorados<10>

1.10.4.29 operador
..................

New function *note length_hint(): fa1. provides an implementation of the
specification for how the *note __length_hint__(): f3d. special method
should be used, as part of the PEP 424(1) formal specification of this
language feature.  (Contributed by Armin Ronacher in bpo-16148(2).)

There is now a pure-python version of the *note operator: 9f. module
available for reference and for use by alternate implementations of
Python.  (Contributed by Zachary Ware in bpo-16694(3).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0424/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=16148

   (3) https://bugs.python.org/issue?@action=redirect&bpo=16694


File: python.info,  Node: os<11>,  Next: pdb<6>,  Prev: operador<3>,  Up: Módulos melhorados<10>

1.10.4.30 os
............

There are new functions to get and set the *note inheritable flag: f2b.
of a file descriptor (*note os.get_inheritable(): f2c, *note
os.set_inheritable(): f2d.) or a Windows handle (*note
os.get_handle_inheritable(): f2e, *note os.set_handle_inheritable():
f2f.).

New function *note cpu_count(): 1c5. reports the number of CPUs
available on the platform on which Python is running (or ‘None’ if the
count can’t be determined).  The *note multiprocessing.cpu_count(): fa3.
function is now implemented in terms of this function).  (Contributed by
Trent Nelson, Yogesh Chaudhari, Victor Stinner, and Charles-François
Natali in bpo-17914(1).)

*note os.path.samestat(): fa4. is now available on the Windows platform
(and the *note os.path.samefile(): fa5. implementation is now shared
between Unix and Windows).  (Contributed by Brian Curtin in
bpo-11939(2).)

*note os.path.ismount(): a1c. now recognizes volumes mounted below a
drive root on Windows.  (Contributed by Tim Golden in bpo-9035(3).)

*note os.open(): dba. supports two new flags on platforms that provide
them, *note O_PATH: fa6. (un-opened file descriptor), and *note
O_TMPFILE: fa7. (unnamed temporary file; as of 3.4.0 release available
only on Linux systems with a kernel version of 3.11 or newer that have
uapi headers).  (Contributed by Christian Heimes in bpo-18673(4) and
Benjamin Peterson, respectively.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17914

   (2) https://bugs.python.org/issue?@action=redirect&bpo=11939

   (3) https://bugs.python.org/issue?@action=redirect&bpo=9035

   (4) https://bugs.python.org/issue?@action=redirect&bpo=18673


File: python.info,  Node: pdb<6>,  Next: pickle<4>,  Prev: os<11>,  Up: Módulos melhorados<10>

1.10.4.31 pdb
.............

*note pdb: a5. has been enhanced to handle generators, *note yield: 9d5,
and ‘yield from’ in a more useful fashion.  This is especially helpful
when debugging *note asyncio: a. based programs.  (Contributed by Andrew
Svetlov and Xavier de Gaye in bpo-16596(1).)

The ‘print’ command has been removed from *note pdb: a5, restoring
access to the Python *note print(): fa9. function from the pdb command
line.  Python2’s ‘pdb’ did not have a ‘print’ command; instead, entering
‘print’ executed the ‘print’ statement.  In Python3 ‘print’ was
mistakenly made an alias for the pdb *note p: faa. command.  ‘p’,
however, prints the ‘repr’ of its argument, not the ‘str’ like the
Python2 ‘print’ command did.  Worse, the Python3 ‘pdb print’ command
shadowed the Python3 ‘print’ function, making it inaccessible at the
‘pdb’ prompt.  (Contributed by Connor Osborn in bpo-18764(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16596

   (2) https://bugs.python.org/issue?@action=redirect&bpo=18764


File: python.info,  Node: pickle<4>,  Next: plistlib<2>,  Prev: pdb<6>,  Up: Módulos melhorados<10>

1.10.4.32 pickle
................

*note pickle: a6. now supports (but does not use by default) a new
pickle protocol, protocol 4.  This new protocol addresses a number of
issues that were present in previous protocols, such as the
serialization of nested classes, very large strings and containers, and
classes whose *note __new__(): 580. method takes keyword-only arguments.
It also provides some efficiency improvements.

Ver também
..........

PEP 3154(1) – Pickle protocol 4

     PEP written by Antoine Pitrou and implemented by Alexandre
     Vassalotti.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3154/


File: python.info,  Node: plistlib<2>,  Next: poplib<3>,  Prev: pickle<4>,  Up: Módulos melhorados<10>

1.10.4.33 plistlib
..................

*note plistlib: ab. now has an API that is similar to the standard
pattern for stdlib serialization protocols, with new *note load(): 956,
*note dump(): 958, *note loads(): 957, and *note dumps(): 959.
functions.  (The older API is now deprecated.)  In addition to the
already supported XML plist format (*note FMT_XML: fad.), it also now
supports the binary plist format (*note FMT_BINARY: fae.).  (Contributed
by Ronald Oussoren and others in bpo-14455(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14455


File: python.info,  Node: poplib<3>,  Next: pprint<4>,  Prev: plistlib<2>,  Up: Módulos melhorados<10>

1.10.4.34 poplib
................

Two new methods have been added to *note poplib: ac.: *note capa(): fb0,
which returns the list of capabilities advertised by the POP server, and
*note stls(): fb1, which switches a clear-text POP3 session into an
encrypted POP3 session if the POP server supports it.  (Contributed by
Lorenzo Catucci in bpo-4473(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=4473


File: python.info,  Node: pprint<4>,  Next: pty,  Prev: poplib<3>,  Up: Módulos melhorados<10>

1.10.4.35 pprint
................

The *note pprint: ae. module’s *note PrettyPrinter: fb3. class and its
*note pformat(): fb4, and *note pprint(): 82b. functions have a new
option, 'compact', that controls how the output is formatted.  Currently
setting 'compact' to ‘True’ means that sequences will be printed with as
many sequence elements as will fit within 'width' on each (indented)
line.  (Contributed by Serhiy Storchaka in bpo-19132(1).)

Long strings are now wrapped using Python’s normal line continuation
syntax.  (Contributed by Antoine Pitrou in bpo-17150(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19132

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17150


File: python.info,  Node: pty,  Next: pydoc<4>,  Prev: pprint<4>,  Up: Módulos melhorados<10>

1.10.4.36 pty
.............

*note pty.spawn(): fb6. now returns the status value from *note
os.waitpid(): dc2. on the child process, instead of ‘None’.
(Contributed by Gregory P. Smith.)


File: python.info,  Node: pydoc<4>,  Next: re<8>,  Prev: pty,  Up: Módulos melhorados<10>

1.10.4.37 pydoc
...............

The *note pydoc: b5. module is now based directly on the *note
inspect.signature(): 738. introspection API, allowing it to provide
signature information for a wider variety of callable objects.  This
change also means that ‘__wrapped__’ attributes are now taken into
account when displaying help information.  (Contributed by Larry
Hastings in bpo-19674(1).)

The *note pydoc: b5. module no longer displays the ‘self’ parameter for
already bound methods.  Instead, it aims to always display the exact
current signature of the supplied callable.  (Contributed by Larry
Hastings in bpo-20710(2).)

In addition to the changes that have been made to *note pydoc: b5.
directly, its handling of custom ‘__dir__’ methods and various
descriptor behaviours has also been improved substantially by the
underlying changes in the *note inspect: 7e. module.

As the *note help(): 8dd. builtin is based on *note pydoc: b5, the above
changes also affect the behaviour of *note help(): 8dd.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19674

   (2) https://bugs.python.org/issue?@action=redirect&bpo=20710


File: python.info,  Node: re<8>,  Next: resource,  Prev: pydoc<4>,  Up: Módulos melhorados<10>

1.10.4.38 re
............

New *note fullmatch(): fb9. function and *note Pattern.fullmatch(): fba.
method anchor the pattern at both ends of the string to match.  This
provides a way to be explicit about the goal of the match, which avoids
a class of subtle bugs where ‘$’ characters get lost during code changes
or the addition of alternatives to an existing regular expression.
(Contributed by Matthew Barnett in bpo-16203(1).)

The repr of *note regex objects: fbb. now includes the pattern and the
flags; the repr of *note match objects: fbc. now includes the start,
end, and the part of the string that matched.  (Contributed by Hugo
Lopes Tavares and Serhiy Storchaka in bpo-13592(2) and bpo-17087(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16203

   (2) https://bugs.python.org/issue?@action=redirect&bpo=13592

   (3) https://bugs.python.org/issue?@action=redirect&bpo=17087


File: python.info,  Node: resource,  Next: select,  Prev: re<8>,  Up: Módulos melhorados<10>

1.10.4.39 resource
..................

New *note prlimit(): fbe. function, available on Linux platforms with a
kernel version of 2.6.36 or later and glibc of 2.13 or later, provides
the ability to query or set the resource limits for processes other than
the one making the call.  (Contributed by Christian Heimes in
bpo-16595(1).)

On Linux kernel version 2.6.36 or later, there are also some new Linux
specific constants: *note RLIMIT_MSGQUEUE: fbf, *note RLIMIT_NICE: fc0,
*note RLIMIT_RTPRIO: fc1, *note RLIMIT_RTTIME: fc2, and *note
RLIMIT_SIGPENDING: fc3.  (Contributed by Christian Heimes in
bpo-19324(2).)

On FreeBSD version 9 and later, there some new FreeBSD specific
constants: *note RLIMIT_SBSIZE: fc4, *note RLIMIT_SWAP: fc5, and *note
RLIMIT_NPTS: fc6.  (Contributed by Claudiu Popa in bpo-19343(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16595

   (2) https://bugs.python.org/issue?@action=redirect&bpo=19324

   (3) https://bugs.python.org/issue?@action=redirect&bpo=19343


File: python.info,  Node: select,  Next: shelve<2>,  Prev: resource,  Up: Módulos melhorados<10>

1.10.4.40 select
................

*note epoll: fc8. objects now support the context management protocol.
When used in a *note with: 5d2. statement, the *note close(): fc9.
method will be called automatically at the end of the block.
(Contributed by Serhiy Storchaka in bpo-16488(1).)

*note devpoll: fca. objects now have *note fileno(): fcb. and *note
close(): fcc. methods, as well as a new attribute *note closed: fcd.
(Contributed by Victor Stinner in bpo-18794(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16488

   (2) https://bugs.python.org/issue?@action=redirect&bpo=18794


File: python.info,  Node: shelve<2>,  Next: shutil<6>,  Prev: select,  Up: Módulos melhorados<10>

1.10.4.41 shelve
................

*note Shelf: fcf. instances may now be used in *note with: 5d2.
statements, and will be automatically closed at the end of the ‘with’
block.  (Contributed by Filip Gruszczyński in bpo-13896(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13896


File: python.info,  Node: shutil<6>,  Next: smtpd<3>,  Prev: shelve<2>,  Up: Módulos melhorados<10>

1.10.4.42 shutil
................

*note copyfile(): a63. now raises a specific *note Error: fd1. subclass,
*note SameFileError: fd2, when the source and destination are the same
file, which allows an application to take appropriate action on this
specific error.  (Contributed by Atsuo Ishimoto and Hynek Schlawack in
bpo-1492704(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1492704


File: python.info,  Node: smtpd<3>,  Next: smtplib<3>,  Prev: shutil<6>,  Up: Módulos melhorados<10>

1.10.4.43 smtpd
...............

The ‘SMTPServer’ and ‘SMTPChannel’ classes now accept a 'map' keyword
argument which, if specified, is passed in to ‘asynchat.async_chat’ as
its 'map' argument.  This allows an application to avoid affecting the
global socket map.  (Contributed by Vinay Sajip in bpo-11959(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=11959


File: python.info,  Node: smtplib<3>,  Next: socket<9>,  Prev: smtpd<3>,  Up: Módulos melhorados<10>

1.10.4.44 smtplib
.................

*note SMTPException: fd5. is now a subclass of *note OSError: 417, which
allows both socket level errors and SMTP protocol level errors to be
caught in one try/except statement by code that only cares whether or
not an error occurred.  (Contributed by Ned Jackson Lovely in
bpo-2118(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=2118


File: python.info,  Node: socket<9>,  Next: sqlite3<9>,  Prev: smtplib<3>,  Up: Módulos melhorados<10>

1.10.4.45 socket
................

The socket module now supports the *note CAN_BCM: fd7. protocol on
platforms that support it.  (Contributed by Brian Thorne in
bpo-15359(1).)

Socket objects have new methods to get or set their *note inheritable
flag: f2b, *note get_inheritable(): f30. and *note set_inheritable():
f31.

The ‘socket.AF_*’ and ‘socket.SOCK_*’ constants are now enumeration
values using the new *note enum: 56. module.  This allows meaningful
names to be printed during debugging, instead of integer “magic
numbers”.

The *note AF_LINK: fd8. constant is now available on BSD and OSX.

*note inet_pton(): 969. and *note inet_ntop(): fd9. are now supported on
Windows.  (Contributed by Atsuo Ishimoto in bpo-7171(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15359

   (2) https://bugs.python.org/issue?@action=redirect&bpo=7171


File: python.info,  Node: sqlite3<9>,  Next: ssl<10>,  Prev: socket<9>,  Up: Módulos melhorados<10>

1.10.4.46 sqlite3
.................

A new boolean parameter to the *note connect(): 2a8. function, 'uri',
can be used to indicate that the 'database' parameter is a ‘uri’ (see
the SQLite URI documentation(1)).  (Contributed by poq in bpo-13773(2).)

   ---------- Footnotes ----------

   (1) https://www.sqlite.org/uri.html

   (2) https://bugs.python.org/issue?@action=redirect&bpo=13773


File: python.info,  Node: ssl<10>,  Next: stat,  Prev: sqlite3<9>,  Up: Módulos melhorados<10>

1.10.4.47 ssl
.............

*note PROTOCOL_TLSv1_1: fdc. and *note PROTOCOL_TLSv1_2: fdd. (TLSv1.1
and TLSv1.2 support) have been added; support for these protocols is
only available if Python is linked with OpenSSL 1.0.1 or later.
(Contributed by Michele Orrù and Antoine Pitrou in bpo-16692(1).)  New
function *note create_default_context(): 155. provides a standard way to
obtain an *note SSLContext: 294. whose settings are intended to be a
reasonable balance between compatibility and security.  These settings
are more stringent than the defaults provided by the *note SSLContext:
294. constructor, and may be adjusted in the future, without prior
deprecation, if best-practice security requirements change.  The new
recommended best practice for using stdlib libraries that support SSL is
to use *note create_default_context(): 155. to obtain an *note
SSLContext: 294. object, modify it if needed, and then pass it as the
'context' argument of the appropriate stdlib API. (Contributed by
Christian Heimes in bpo-19689(2).)

*note SSLContext: 294. method *note load_verify_locations(): f1d.
accepts a new optional argument 'cadata', which can be used to provide
PEM or DER encoded certificates directly via strings or bytes,
respectively.  (Contributed by Christian Heimes in bpo-18138(3).)

New function *note get_default_verify_paths(): fde. returns a named
tuple of the paths and environment variables that the *note
set_default_verify_paths(): fdf. method uses to set OpenSSL’s default
‘cafile’ and ‘capath’.  This can be an aid in debugging default
verification issues.  (Contributed by Christian Heimes in bpo-18143(4).)

*note SSLContext: 294. has a new method, *note cert_store_stats(): fe0,
that reports the number of loaded ‘X.509’ certs, ‘X.509 CA’ certs, and
certificate revocation lists (‘crl’s), as well as a *note
get_ca_certs(): fe1. method that returns a list of the loaded ‘CA’
certificates.  (Contributed by Christian Heimes in bpo-18147(5).)

If OpenSSL 0.9.8 or later is available, *note SSLContext: 294. has a new
attribute *note verify_flags: fe2. that can be used to control the
certificate verification process by setting it to some combination of
the new constants *note VERIFY_DEFAULT: fe3, *note
VERIFY_CRL_CHECK_LEAF: fe4, *note VERIFY_CRL_CHECK_CHAIN: fe5, or *note
VERIFY_X509_STRICT: 157.  OpenSSL does not do any CRL verification by
default.  (Contributed by Christien Heimes in bpo-8813(6).)

New *note SSLContext: 294. method *note load_default_certs(): fe6. loads
a set of default “certificate authority” (CA) certificates from default
locations, which vary according to the platform.  It can be used to load
both TLS web server authentication certificates (‘purpose=’*note
SERVER_AUTH: fe7.) for a client to use to verify a server, and
certificates for a server to use in verifying client certificates
(‘purpose=’*note CLIENT_AUTH: fe8.).  (Contributed by Christian Heimes
in bpo-19292(7).)  Two new windows-only functions, *note
enum_certificates(): fe9. and *note enum_crls(): fea. provide the
ability to retrieve certificates, certificate information, and CRLs from
the Windows cert store.  (Contributed by Christian Heimes in
bpo-17134(8).)  Support for server-side SNI (Server Name Indication)
using the new *note ssl.SSLContext.set_servername_callback(): feb.
method.  (Contributed by Daniel Black in bpo-8109(9).)

The dictionary returned by *note SSLSocket.getpeercert(): fec. contains
additional ‘X509v3’ extension items: ‘crlDistributionPoints’,
‘calIssuers’, and ‘OCSP’ URIs.  (Contributed by Christian Heimes in
bpo-18379(10).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16692

   (2) https://bugs.python.org/issue?@action=redirect&bpo=19689

   (3) https://bugs.python.org/issue?@action=redirect&bpo=18138

   (4) https://bugs.python.org/issue?@action=redirect&bpo=18143

   (5) https://bugs.python.org/issue?@action=redirect&bpo=18147

   (6) https://bugs.python.org/issue?@action=redirect&bpo=8813

   (7) https://bugs.python.org/issue?@action=redirect&bpo=19292

   (8) https://bugs.python.org/issue?@action=redirect&bpo=17134

   (9) https://bugs.python.org/issue?@action=redirect&bpo=8109

   (10) https://bugs.python.org/issue?@action=redirect&bpo=18379


File: python.info,  Node: stat,  Next: struct<2>,  Prev: ssl<10>,  Up: Módulos melhorados<10>

1.10.4.48 stat
..............

The *note stat: d1. module is now backed by a C implementation in
‘_stat’.  A C implementation is required as most of the values aren’t
standardized and are platform-dependent.  (Contributed by Christian
Heimes in bpo-11016(1).)

The module supports new *note ST_MODE: fee. flags, *note S_IFDOOR: fef,
*note S_IFPORT: ff0, and *note S_IFWHT: ff1.  (Contributed by Christian
Hiemes in bpo-11016(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=11016

   (2) https://bugs.python.org/issue?@action=redirect&bpo=11016


File: python.info,  Node: struct<2>,  Next: subprocess<5>,  Prev: stat,  Up: Módulos melhorados<10>

1.10.4.49 struct
................

New function *note iter_unpack: ff3. and a new *note
struct.Struct.iter_unpack(): ff4. method on compiled formats provide
streamed unpacking of a buffer containing repeated instances of a given
format of data.  (Contributed by Antoine Pitrou in bpo-17804(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17804


File: python.info,  Node: subprocess<5>,  Next: sunau<2>,  Prev: struct<2>,  Up: Módulos melhorados<10>

1.10.4.50 subprocess
....................

*note check_output(): ff6. now accepts an 'input' argument that can be
used to provide the contents of ‘stdin’ for the command that is run.
(Contributed by Zack Weinberg in bpo-16624(1).)

*note getoutput(): ff7. and *note getstatusoutput(): ff8. now work on
Windows.  This change was actually inadvertently made in 3.3.4.
(Contributed by Tim Golden in bpo-10197(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16624

   (2) https://bugs.python.org/issue?@action=redirect&bpo=10197


File: python.info,  Node: sunau<2>,  Next: sys<12>,  Prev: subprocess<5>,  Up: Módulos melhorados<10>

1.10.4.51 sunau
...............

The ‘getparams()’ method now returns a namedtuple rather than a plain
tuple.  (Contributed by Claudiu Popa in bpo-18901(1).)

‘sunau.open()’ now supports the context management protocol: when used
in a *note with: 5d2. block, the ‘close’ method of the returned object
will be called automatically at the end of the block.  (Contributed by
Serhiy Storchaka in bpo-18878(2).)

‘AU_write.setsampwidth()’ now supports 24 bit samples, thus adding
support for writing 24 sample using the module.  (Contributed by Serhiy
Storchaka in bpo-19261(3).)

The ‘writeframesraw()’ and ‘writeframes()’ methods now accept any *note
bytes-like object: d4f.  (Contributed by Serhiy Storchaka in
bpo-8311(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18901

   (2) https://bugs.python.org/issue?@action=redirect&bpo=18878

   (3) https://bugs.python.org/issue?@action=redirect&bpo=19261

   (4) https://bugs.python.org/issue?@action=redirect&bpo=8311


File: python.info,  Node: sys<12>,  Next: tarfile<8>,  Prev: sunau<2>,  Up: Módulos melhorados<10>

1.10.4.52 sys
.............

New function *note sys.getallocatedblocks(): ffb. returns the current
number of blocks allocated by the interpreter.  (In CPython with the
default ‘--with-pymalloc’ setting, this is allocations made through the
*note PyObject_Malloc(): c83. API.) This can be useful for tracking
memory leaks, especially if automated via a test suite.  (Contributed by
Antoine Pitrou in bpo-13390(1).)

When the Python interpreter starts in *note interactive mode: ffc, it
checks for an *note __interactivehook__: ffd. attribute on the *note
sys: d9. module.  If the attribute exists, its value is called with no
arguments just before interactive mode is started.  The check is made
after the *note PYTHONSTARTUP: ffe. file is read, so it can be set
there.  The *note site: c7. module *note sets it: fff. to a function
that enables tab completion and history saving (in ‘~/.python-history’)
if the platform supports *note readline: ba.  If you do not want this
(new) behavior, you can override it in *note PYTHONSTARTUP: ffe, *note
sitecustomize: c8, or *note usercustomize: 10e. by deleting this
attribute from *note sys: d9. (or setting it to some other callable).
(Contributed by Éric Araujo and Antoine Pitrou in bpo-5845(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13390

   (2) https://bugs.python.org/issue?@action=redirect&bpo=5845


File: python.info,  Node: tarfile<8>,  Next: textwrap,  Prev: sys<12>,  Up: Módulos melhorados<10>

1.10.4.53 tarfile
.................

The *note tarfile: de. module now supports a simple *note Interface de
linha de comando: 1001. when called as a script directly or via ‘-m’.
This can be used to create and extract tarfile archives.  (Contributed
by Berker Peksag in bpo-13477(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13477


File: python.info,  Node: textwrap,  Next: threading<7>,  Prev: tarfile<8>,  Up: Módulos melhorados<10>

1.10.4.54 textwrap
..................

The *note TextWrapper: 1003. class has two new attributes/constructor
arguments: *note max_lines: 1004, which limits the number of lines in
the output, and *note placeholder: 1005, which is a string that will
appear at the end of the output if it has been truncated because of
'max_lines'.  Building on these capabilities, a new convenience function
*note shorten(): 1006. collapses all of the whitespace in the input to
single spaces and produces a single line of a given 'width' that ends
with the 'placeholder' (by default, ‘[...]’).  (Contributed by Antoine
Pitrou and Serhiy Storchaka in bpo-18585(1) and bpo-18725(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18585

   (2) https://bugs.python.org/issue?@action=redirect&bpo=18725


File: python.info,  Node: threading<7>,  Next: traceback<6>,  Prev: textwrap,  Up: Módulos melhorados<10>

1.10.4.55 threading
...................

The *note Thread: 953. object representing the main thread can be
obtained from the new *note main_thread(): 1008. function.  In normal
conditions this will be the thread from which the Python interpreter was
started.  (Contributed by Andrew Svetlov in bpo-18882(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18882


File: python.info,  Node: traceback<6>,  Next: types<6>,  Prev: threading<7>,  Up: Módulos melhorados<10>

1.10.4.56 traceback
...................

A new *note traceback.clear_frames(): 100a. function takes a traceback
object and clears the local variables in all of the frames it
references, reducing the amount of memory consumed.  (Contributed by
Andrew Kuchling in bpo-1565525(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1565525


File: python.info,  Node: types<6>,  Next: urllib<3>,  Prev: traceback<6>,  Up: Módulos melhorados<10>

1.10.4.57 types
...............

A new *note DynamicClassAttribute(): 62a. descriptor provides a way to
define an attribute that acts normally when looked up through an
instance object, but which is routed to the 'class' ‘__getattr__’ when
looked up through the class.  This allows one to have properties active
on a class, and have virtual attributes on the class with the same name
(see *note enum: 56. for an example).  (Contributed by Ethan Furman in
bpo-19030(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19030


File: python.info,  Node: urllib<3>,  Next: unittest<9>,  Prev: types<6>,  Up: Módulos melhorados<10>

1.10.4.58 urllib
................

*note urllib.request: 10b. now supports ‘data:’ URLs via the *note
DataHandler: 100d. class.  (Contributed by Mathias Panzenböck in
bpo-16423(1).)

The http method that will be used by a *note Request: 100e. class can
now be specified by setting a *note method: 100f. class attribute on the
subclass.  (Contributed by Jason R Coombs in bpo-18978(2).)

*note Request: 100e. objects are now reusable: if the *note full_url:
1010. or *note data: 1011. attributes are modified, all relevant
internal properties are updated.  This means, for example, that it is
now possible to use the same *note Request: 100e. object in more than
one *note OpenerDirector.open(): 1012. call with different 'data'
arguments, or to modify a *note Request: 100e.‘s ‘url’ rather than
recomputing it from scratch.  There is also a new *note remove_header():
1013. method that can be used to remove headers from a *note Request:
100e.  (Contributed by Alexey Kachayev in bpo-16464(3), Daniel Wozniak
in bpo-17485(4), and Damien Brecht and Senthil Kumaran in bpo-17272(5).)

*note HTTPError: 1014. objects now have a *note headers: 1015. attribute
that provides access to the HTTP response headers associated with the
error.  (Contributed by Berker Peksag in bpo-15701(6).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16423

   (2) https://bugs.python.org/issue?@action=redirect&bpo=18978

   (3) https://bugs.python.org/issue?@action=redirect&bpo=16464

   (4) https://bugs.python.org/issue?@action=redirect&bpo=17485

   (5) https://bugs.python.org/issue?@action=redirect&bpo=17272

   (6) https://bugs.python.org/issue?@action=redirect&bpo=15701


File: python.info,  Node: unittest<9>,  Next: venv<7>,  Prev: urllib<3>,  Up: Módulos melhorados<10>

1.10.4.59 unittest
..................

The *note TestCase: 44f. class has a new method, *note subTest(): 1017,
that produces a context manager whose *note with: 5d2. block becomes a
“sub-test”.  This context manager allows a test method to dynamically
generate subtests by, say, calling the ‘subTest’ context manager inside
a loop.  A single test method can thereby produce an indefinite number
of separately identified and separately counted tests, all of which will
run even if one or more of them fail.  For example:

     class NumbersTest(unittest.TestCase):
         def test_even(self):
             for i in range(6):
                 with self.subTest(i=i):
                     self.assertEqual(i % 2, 0)

will result in six subtests, each identified in the unittest verbose
output with a label consisting of the variable name ‘i’ and a particular
value for that variable (‘i=0’, ‘i=1’, etc).  See *note Distinguindo
iterações de teste utilizando subtestes: 1018. for the full version of
this example.  (Contributed by Antoine Pitrou in bpo-16997(1).)

*note unittest.main(): 1019. now accepts an iterable of test names for
'defaultTest', where previously it only accepted a single test name as a
string.  (Contributed by Jyrki Pulliainen in bpo-15132(2).)

If *note SkipTest: 101a. is raised during test discovery (that is, at
the module level in the test file), it is now reported as a skip instead
of an error.  (Contributed by Zach Ware in bpo-16935(3).)

*note discover(): 101b. now sorts the discovered files to provide
consistent test ordering.  (Contributed by Martin Melin and Jeff Ramnani
in bpo-16709(4).)

*note TestSuite: e20. now drops references to tests as soon as the test
has been run, if the test is successful.  On Python interpreters that do
garbage collection, this allows the tests to be garbage collected if
nothing else is holding a reference to the test.  It is possible to
override this behavior by creating a *note TestSuite: e20. subclass that
defines a custom ‘_removeTestAtIndex’ method.  (Contributed by Tom
Wardill, Matt McClure, and Andrew Svetlov in bpo-11798(5).)

A new test assertion context-manager, *note assertLogs(): 85c, will
ensure that a given block of code emits a log message using the *note
logging: 87. module.  By default the message can come from any logger
and have a priority of ‘INFO’ or higher, but both the logger name and an
alternative minimum logging level may be specified.  The object returned
by the context manager can be queried for the *note LogRecord: 101c.s
and/or formatted messages that were logged.  (Contributed by Antoine
Pitrou in bpo-18937(6).)

Test discovery now works with namespace packages (Contributed by Claudiu
Popa in bpo-17457(7).)

*note unittest.mock: 107. objects now inspect their specification
signatures when matching calls, which means an argument can now be
matched by either position or name, instead of only by position.
(Contributed by Antoine Pitrou in bpo-17015(8).)

*note mock_open(): 101d. objects now have ‘readline’ and ‘readlines’
methods.  (Contributed by Toshio Kuratomi in bpo-17467(9).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16997

   (2) https://bugs.python.org/issue?@action=redirect&bpo=15132

   (3) https://bugs.python.org/issue?@action=redirect&bpo=16935

   (4) https://bugs.python.org/issue?@action=redirect&bpo=16709

   (5) https://bugs.python.org/issue?@action=redirect&bpo=11798

   (6) https://bugs.python.org/issue?@action=redirect&bpo=18937

   (7) https://bugs.python.org/issue?@action=redirect&bpo=17457

   (8) https://bugs.python.org/issue?@action=redirect&bpo=17015

   (9) https://bugs.python.org/issue?@action=redirect&bpo=17467


File: python.info,  Node: venv<7>,  Next: wave<2>,  Prev: unittest<9>,  Up: Módulos melhorados<10>

1.10.4.60 venv
..............

*note venv: 111. now includes activation scripts for the ‘csh’ and
‘fish’ shells.  (Contributed by Andrew Svetlov in bpo-15417(1).)

*note EnvBuilder: 26a. and the *note create(): 26b. convenience function
take a new keyword argument 'with_pip', which defaults to ‘False’, that
controls whether or not *note EnvBuilder: 26a. ensures that ‘pip’ is
installed in the virtual environment.  (Contributed by Nick Coghlan in
bpo-19552(2) as part of the PEP 453(3) implementation.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15417

   (2) https://bugs.python.org/issue?@action=redirect&bpo=19552

   (3) https://peps.python.org/pep-0453/


File: python.info,  Node: wave<2>,  Next: weakref<2>,  Prev: venv<7>,  Up: Módulos melhorados<10>

1.10.4.61 wave
..............

The *note getparams(): 1020. method now returns a namedtuple rather than
a plain tuple.  (Contributed by Claudiu Popa in bpo-17487(1).)

*note wave.open(): 952. now supports the context management protocol.
(Contributed by Claudiu Popa in bpo-17616(2).)

*note wave: 113. can now *note write output to unseekable files: 1021.
(Contributed by David Jones, Guilherme Polo, and Serhiy Storchaka in
bpo-5202(3).)

The *note writeframesraw(): 1022. and *note writeframes(): 1023. methods
now accept any *note bytes-like object: d4f.  (Contributed by Serhiy
Storchaka in bpo-8311(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17487

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17616

   (3) https://bugs.python.org/issue?@action=redirect&bpo=5202

   (4) https://bugs.python.org/issue?@action=redirect&bpo=8311


File: python.info,  Node: weakref<2>,  Next: xml etree<2>,  Prev: wave<2>,  Up: Módulos melhorados<10>

1.10.4.62 weakref
.................

New *note WeakMethod: 1025. class simulates weak references to bound
methods.  (Contributed by Antoine Pitrou in bpo-14631(1).)

New *note finalize: a86. class makes it possible to register a callback
to be invoked when an object is garbage collected, without needing to
carefully manage the lifecycle of the weak reference itself.
(Contributed by Richard Oudkerk in bpo-15528(2).)

The callback, if any, associated with a *note ref: 1026. is now exposed
via the *note __callback__: 1027. attribute.  (Contributed by Mark
Dickinson in bpo-17643(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14631

   (2) https://bugs.python.org/issue?@action=redirect&bpo=15528

   (3) https://bugs.python.org/issue?@action=redirect&bpo=17643


File: python.info,  Node: xml etree<2>,  Next: zipfile<5>,  Prev: weakref<2>,  Up: Módulos melhorados<10>

1.10.4.63 xml.etree
...................

A new parser, *note XMLPullParser: 1029, allows a non-blocking
applications to parse XML documents.  An example can be seen at *note A
API de pull para análise sem bloqueio: 102a.  (Contributed by Antoine
Pitrou in bpo-17741(1).)

The *note xml.etree.ElementTree: 125. *note tostring(): 102b. and *note
tostringlist(): 102c. functions, and the *note ElementTree: 955. *note
write(): aa4. method, now have a 'short_empty_elements' *note
keyword-only parameter: 2a5. providing control over whether elements
with no content are written in abbreviated (‘<tag />’) or expanded
(‘<tag></tag>’) form.  (Contributed by Ariel Poliak and Serhiy Storchaka
in bpo-14377(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17741

   (2) https://bugs.python.org/issue?@action=redirect&bpo=14377


File: python.info,  Node: zipfile<5>,  Prev: xml etree<2>,  Up: Módulos melhorados<10>

1.10.4.64 zipfile
.................

The *note writepy(): 102e. method of the *note PyZipFile: 102f. class
has a new 'filterfunc' option that can be used to control which
directories and files are added to the archive.  For example, this could
be used to exclude test files from the archive.  (Contributed by
Christian Tismer in bpo-19274(1).)

The 'allowZip64' parameter to *note ZipFile: 6c4. and *note PyZipFile:
102f. is now ‘True’ by default.  (Contributed by William Mallard in
bpo-17201(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19274

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17201


File: python.info,  Node: CPython Implementation Changes,  Next: Descontinuados<11>,  Prev: Módulos melhorados<10>,  Up: O que há de novo no Python 3 4

1.10.5 CPython Implementation Changes
-------------------------------------

* Menu:

* PEP 445; Customization of CPython Memory Allocators: PEP 445 Customization of CPython Memory Allocators.
* PEP 442; Safe Object Finalization: PEP 442 Safe Object Finalization.
* PEP 456; Secure and Interchangeable Hash Algorithm: PEP 456 Secure and Interchangeable Hash Algorithm.
* PEP 436; Argument Clinic: PEP 436 Argument Clinic.
* Other Alterações a compilações e API C::
* Other Improvements: Other Improvements<2>.
* Otimizações Relevantes::


File: python.info,  Node: PEP 445 Customization of CPython Memory Allocators,  Next: PEP 442 Safe Object Finalization,  Up: CPython Implementation Changes

1.10.5.1 PEP 445: Customization of CPython Memory Allocators
............................................................

PEP 445(1) adds new C level interfaces to customize memory allocation in
the CPython interpreter.

Ver também
..........

PEP 445(2) – Add new APIs to customize Python memory allocators

     PEP escrito e implementado por Victor Stinner.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0445/

   (2) https://peps.python.org/pep-0445/


File: python.info,  Node: PEP 442 Safe Object Finalization,  Next: PEP 456 Secure and Interchangeable Hash Algorithm,  Prev: PEP 445 Customization of CPython Memory Allocators,  Up: CPython Implementation Changes

1.10.5.2 PEP 442: Safe Object Finalization
..........................................

PEP 442(1) removes the current limitations and quirks of object
finalization in CPython.  With it, objects with *note __del__(): 1033.
methods, as well as generators with *note finally: 9d2. clauses, can be
finalized when they are part of a reference cycle.

As part of this change, module globals are no longer forcibly set to
*note None: 675. during interpreter shutdown in most cases, instead
relying on the normal operation of the cyclic garbage collector.  This
avoids a whole class of interpreter-shutdown-time errors, usually
involving ‘__del__’ methods, that have plagued Python since the cyclic
GC was first introduced.

Ver também
..........

PEP 442(2) – Safe object finalization

     PEP escrita e implementada por Antoine Pitrou.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0442/

   (2) https://peps.python.org/pep-0442/


File: python.info,  Node: PEP 456 Secure and Interchangeable Hash Algorithm,  Next: PEP 436 Argument Clinic,  Prev: PEP 442 Safe Object Finalization,  Up: CPython Implementation Changes

1.10.5.3 PEP 456: Secure and Interchangeable Hash Algorithm
...........................................................

PEP 456(1) follows up on earlier security fix work done on Python’s hash
algorithm to address certain DOS attacks to which public facing APIs
backed by dictionary lookups may be subject.  (See bpo-14621(2) for the
start of the current round of improvements.)  The PEP unifies CPython’s
hash code to make it easier for a packager to substitute a different
hash algorithm, and switches Python’s default implementation to a
SipHash implementation on platforms that have a 64 bit data type.  Any
performance differences in comparison with the older FNV algorithm are
trivial.

The PEP adds additional fields to the *note sys.hash_info: 1035. named
tuple to describe the hash algorithm in use by the currently executing
binary.  Otherwise, the PEP does not alter any existing CPython APIs.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0456/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=14621


File: python.info,  Node: PEP 436 Argument Clinic,  Next: Other Alterações a compilações e API C,  Prev: PEP 456 Secure and Interchangeable Hash Algorithm,  Up: CPython Implementation Changes

1.10.5.4 PEP 436: Argument Clinic
.................................

“Argument Clinic” ( PEP 436(1)) is now part of the CPython build process
and can be used to simplify the process of defining and maintaining
accurate signatures for builtins and standard library extension modules
implemented in C.

Some standard library extension modules have been converted to use
Argument Clinic in Python 3.4, and *note pydoc: b5. and *note inspect:
7e. have been updated accordingly.

It is expected that signature metadata for programmatic introspection
will be added to additional callables implemented in C as part of Python
3.4 maintenance releases.

     Nota: The Argument Clinic PEP is not fully up to date with the
     state of the implementation.  This has been deemed acceptable by
     the release manager and core development team in this case, as
     Argument Clinic will not be made available as a public API for
     third party use in Python 3.4.

Ver também
..........

PEP 436(2) – The Argument Clinic DSL

     PEP written and implemented by Larry Hastings.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0436/

   (2) https://peps.python.org/pep-0436/


File: python.info,  Node: Other Alterações a compilações e API C,  Next: Other Improvements<2>,  Prev: PEP 436 Argument Clinic,  Up: CPython Implementation Changes

1.10.5.5 Other Alterações a compilações e API C
...............................................

   * The new *note PyType_GetSlot(): 8a0. function has been added to the
     stable ABI, allowing retrieval of function pointers from named type
     slots when using the limited API. (Contributed by Martin von Löwis
     in bpo-17162(1).)

   * The new ‘Py_SetStandardStreamEncoding()’ pre-initialization API
     allows applications embedding the CPython interpreter to reliably
     force a particular encoding and error handler for the standard
     streams.  (Contributed by Bastien Montagne and Nick Coghlan in
     bpo-16129(2).)

   * Most Python C APIs that don’t mutate string arguments are now
     correctly marked as accepting ‘const char *’ rather than ‘char *’.
     (Contributed by Serhiy Storchaka in bpo-1772673(3).)

   * A new shell version of ‘python-config’ can be used even when a
     python interpreter is not available (for example, in cross
     compilation scenarios).

   * *note PyUnicode_FromFormat(): 38a. now supports width and precision
     specifications for ‘%s’, ‘%A’, ‘%U’, ‘%V’, ‘%S’, and ‘%R’.
     (Contributed by Ysj Ray and Victor Stinner in bpo-7330(4).)

   * New function *note PyStructSequence_InitType2(): 1038. supplements
     the existing *note PyStructSequence_InitType(): 1039. function.
     The difference is that it returns ‘0’ on success and ‘-1’ on
     failure.

   * The CPython source can now be compiled using the address sanity
     checking features of recent versions of GCC and clang: the false
     alarms in the small object allocator have been silenced.
     (Contributed by Dhiru Kholia in bpo-18596(5).)

   * The Windows build now uses Address Space Layout Randomization(6)
     and Data Execution Prevention(7).  (Contributed by Christian Heimes
     in bpo-16632(8).)

   * New function *note PyObject_LengthHint(): 103a. is the C API
     equivalent of *note operator.length_hint(): fa1.  (Contributed by
     Armin Ronacher in bpo-16148(9).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17162

   (2) https://bugs.python.org/issue?@action=redirect&bpo=16129

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1772673

   (4) https://bugs.python.org/issue?@action=redirect&bpo=7330

   (5) https://bugs.python.org/issue?@action=redirect&bpo=18596

   (6) https://en.wikipedia.org/wiki/Address_space_layout_randomization

   (7) https://en.wikipedia.org/wiki/Data_Execution_Prevention

   (8) https://bugs.python.org/issue?@action=redirect&bpo=16632

   (9) https://bugs.python.org/issue?@action=redirect&bpo=16148


File: python.info,  Node: Other Improvements<2>,  Next: Otimizações Relevantes,  Prev: Other Alterações a compilações e API C,  Up: CPython Implementation Changes

1.10.5.6 Other Improvements
...........................

   * The *note python: 103d. command has a new *note option: 103e, ‘-I’,
     which causes it to run in “isolated mode”, which means that *note
     sys.path: 3b4. contains neither the script’s directory nor the
     user’s ‘site-packages’ directory, and all ‘PYTHON*’ environment
     variables are ignored (it implies both ‘-s’ and ‘-E’).  Other
     restrictions may also be applied in the future, with the goal being
     to isolate the execution of a script from the user’s environment.
     This is appropriate, for example, when Python is used to run a
     system script.  On most POSIX systems it can and should be used in
     the ‘#!’ line of system scripts.  (Contributed by Christian Heimes
     in bpo-16499(1).)

   * Tab-completion is now enabled by default in the interactive
     interpreter on systems that support *note readline: ba.  History is
     also enabled by default, and is written to (and read from) the file
     ‘~/.python-history’.  (Contributed by Antoine Pitrou and Éric
     Araujo in bpo-5845(2).)

   * Invoking the Python interpreter with ‘--version’ now outputs the
     version to standard output instead of standard error
     (bpo-18338(3)).  Similar changes were made to *note argparse: 6.
     (bpo-18920(4)) and other modules that have script-like invocation
     capabilities (bpo-18922(5)).

   * The CPython Windows installer now adds ‘.py’ to the ‘PATHEXT’
     variable when extensions are registered, allowing users to run a
     python script at the windows command prompt by just typing its name
     without the ‘.py’ extension.  (Contributed by Paul Moore in
     bpo-18569(6).)

   * A new ‘make’ target coverage-report(7) will build python, run the
     test suite, and generate an HTML coverage report for the C codebase
     using ‘gcov’ and lcov(8).

   * The ‘-R’ option to the *note python regression test suite: 103f.
     now also checks for memory allocation leaks, using *note
     sys.getallocatedblocks(): ffb.  (Contributed by Antoine Pitrou in
     bpo-13390(9).)

   * ‘python -m’ now works with namespace packages.

   * The *note stat: d1. module is now implemented in C, which means it
     gets the values for its constants from the C header files, instead
     of having the values hard-coded in the python module as was
     previously the case.

   * Loading multiple python modules from a single OS module (‘.so’,
     ‘.dll’) now works correctly (previously it silently returned the
     first python module in the file).  (Contributed by Václav Šmilauer
     in bpo-16421(10).)

   * A new opcode, ‘LOAD_CLASSDEREF’, has been added to fix a bug in the
     loading of free variables in class bodies that could be triggered
     by certain uses of *note __prepare__: c79.  (Contributed by
     Benjamin Peterson in bpo-17853(11).)

   * A number of MemoryError-related crashes were identified and fixed
     by Victor Stinner using his PEP 445(12)-based ‘pyfailmalloc’ tool
     (bpo-18408(13), bpo-18520(14)).

   * The ‘pyvenv’ command now accepts a ‘--copies’ option to use copies
     rather than symlinks even on systems where symlinks are the
     default.  (Contributed by Vinay Sajip in bpo-18807(15).)

   * The ‘pyvenv’ command also accepts a ‘--without-pip’ option to
     suppress the otherwise-automatic bootstrapping of pip into the
     virtual environment.  (Contributed by Nick Coghlan in bpo-19552(16)
     as part of the PEP 453(17) implementation.)

   * The encoding name is now optional in the value set for the *note
     PYTHONIOENCODING: 1040. environment variable.  This makes it
     possible to set just the error handler, without changing the
     default encoding.  (Contributed by Serhiy Storchaka in
     bpo-18818(18).)

   * The *note bz2: 13, *note lzma: 8a, and *note gzip: 67. module
     ‘open’ functions now support ‘x’ (exclusive creation) mode.
     (Contributed by Tim Heaney and Vajrasky Kok in bpo-19201(19),
     bpo-19222(20), and bpo-19223(21).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16499

   (2) https://bugs.python.org/issue?@action=redirect&bpo=5845

   (3) https://bugs.python.org/issue?@action=redirect&bpo=18338

   (4) https://bugs.python.org/issue?@action=redirect&bpo=18920

   (5) https://bugs.python.org/issue?@action=redirect&bpo=18922

   (6) https://bugs.python.org/issue?@action=redirect&bpo=18569

   (7) 
https://devguide.python.org/coverage/#measuring-coverage-of-c-code-with-gcov-and-lcov

   (8) https://github.com/linux-test-project/lcov

   (9) https://bugs.python.org/issue?@action=redirect&bpo=13390

   (10) https://bugs.python.org/issue?@action=redirect&bpo=16421

   (11) https://bugs.python.org/issue?@action=redirect&bpo=17853

   (12) https://peps.python.org/pep-0445/

   (13) https://bugs.python.org/issue?@action=redirect&bpo=18408

   (14) https://bugs.python.org/issue?@action=redirect&bpo=18520

   (15) https://bugs.python.org/issue?@action=redirect&bpo=18807

   (16) https://bugs.python.org/issue?@action=redirect&bpo=19552

   (17) https://peps.python.org/pep-0453/

   (18) https://bugs.python.org/issue?@action=redirect&bpo=18818

   (19) https://bugs.python.org/issue?@action=redirect&bpo=19201

   (20) https://bugs.python.org/issue?@action=redirect&bpo=19222

   (21) https://bugs.python.org/issue?@action=redirect&bpo=19223


File: python.info,  Node: Otimizações Relevantes,  Prev: Other Improvements<2>,  Up: CPython Implementation Changes

1.10.5.7 Otimizações Relevantes
...............................

   * The UTF-32 decoder is now 3x to 4x faster.  (Contributed by Serhiy
     Storchaka in bpo-14625(1).)

   * The cost of hash collisions for sets is now reduced.  Each hash
     table probe now checks a series of consecutive, adjacent key/hash
     pairs before continuing to make random probes through the hash
     table.  This exploits cache locality to make collision resolution
     less expensive.  The collision resolution scheme can be described
     as a hybrid of linear probing and open addressing.  The number of
     additional linear probes defaults to nine.  This can be changed at
     compile-time by defining LINEAR_PROBES to be any value.  Set
     LINEAR_PROBES=0 to turn-off linear probing entirely.  (Contributed
     by Raymond Hettinger in bpo-18771(2).)

   * The interpreter starts about 30% faster.  A couple of measures lead
     to the speedup.  The interpreter loads fewer modules on startup,
     e.g.  the *note re: b9, *note collections: 1d. and *note locale:
     86. modules and their dependencies are no longer imported by
     default.  The marshal module has been improved to load compiled
     Python code faster.  (Contributed by Antoine Pitrou, Christian
     Heimes and Victor Stinner in bpo-19219(3), bpo-19218(4),
     bpo-19209(5), bpo-19205(6) and bpo-9548(7).)

   * *note bz2.BZ2File: 86a. is now as fast or faster than the Python2
     version for most cases.  *note lzma.LZMAFile: 1042. has also been
     optimized.  (Contributed by Serhiy Storchaka and Nadeem Vawda in
     bpo-16034(8).)

   * *note random.getrandbits(): 1043. is 20%-40% faster for small
     integers (the most common use case).  (Contributed by Serhiy
     Storchaka in bpo-16674(9).)

   * By taking advantage of the new storage format for strings, pickling
     of strings is now significantly faster.  (Contributed by Victor
     Stinner and Antoine Pitrou in bpo-15596(10).)

   * A performance issue in ‘io.FileIO.readall()’ has been solved.  This
     particularly affects Windows, and significantly speeds up the case
     of piping significant amounts of data through *note subprocess: d6.
     (Contributed by Richard Oudkerk in bpo-15758(11).)

   * *note html.escape(): 1044. is now 10x faster.  (Contributed by Matt
     Bryant in bpo-18020(12).)

   * On Windows, the native ‘VirtualAlloc’ is now used instead of the
     CRT ‘malloc’ in ‘obmalloc’.  Artificial benchmarks show about a 3%
     memory savings.

   * *note os.urandom(): 523. now uses a lazily opened persistent file
     descriptor so as to avoid using many file descriptors when run in
     parallel from multiple threads.  (Contributed by Antoine Pitrou in
     bpo-18756(13).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14625

   (2) https://bugs.python.org/issue?@action=redirect&bpo=18771

   (3) https://bugs.python.org/issue?@action=redirect&bpo=19219

   (4) https://bugs.python.org/issue?@action=redirect&bpo=19218

   (5) https://bugs.python.org/issue?@action=redirect&bpo=19209

   (6) https://bugs.python.org/issue?@action=redirect&bpo=19205

   (7) https://bugs.python.org/issue?@action=redirect&bpo=9548

   (8) https://bugs.python.org/issue?@action=redirect&bpo=16034

   (9) https://bugs.python.org/issue?@action=redirect&bpo=16674

   (10) https://bugs.python.org/issue?@action=redirect&bpo=15596

   (11) https://bugs.python.org/issue?@action=redirect&bpo=15758

   (12) https://bugs.python.org/issue?@action=redirect&bpo=18020

   (13) https://bugs.python.org/issue?@action=redirect&bpo=18756


File: python.info,  Node: Descontinuados<11>,  Next: Removidos<11>,  Prev: CPython Implementation Changes,  Up: O que há de novo no Python 3 4

1.10.6 Descontinuados
---------------------

This section covers various APIs and other features that have been
deprecated in Python 3.4, and will be removed in Python 3.5 or later.
In most (but not all) cases, using the deprecated APIs will produce a
*note DeprecationWarning: 1a5. when the interpreter is run with
deprecation warnings enabled (for example, by using ‘-Wd’).

* Menu:

* Deprecations in the Python API::
* Deprecated Features::


File: python.info,  Node: Deprecations in the Python API,  Next: Deprecated Features,  Up: Descontinuados<11>

1.10.6.1 Deprecations in the Python API
.......................................

   * As mentioned in *note PEP 451; A ModuleSpec Type for the Import
     System: f0b, a number of *note importlib: 77. methods and functions
     are deprecated: ‘importlib.find_loader()’ is replaced by *note
     importlib.util.find_spec(): 2cd.;
     ‘importlib.machinery.PathFinder.find_module()’ is replaced by *note
     importlib.machinery.PathFinder.find_spec(): 1047.;
     ‘importlib.abc.MetaPathFinder.find_module()’ is replaced by *note
     importlib.abc.MetaPathFinder.find_spec(): 86c.;
     ‘importlib.abc.PathEntryFinder.find_loader()’ and ‘find_module()’
     are replaced by *note importlib.abc.PathEntryFinder.find_spec():
     870.; all of the ‘XXXLoader’ ABC ‘load_module’ methods
     (‘importlib.abc.Loader.load_module()’,
     ‘importlib.abc.InspectLoader.load_module()’,
     ‘importlib.abc.FileLoader.load_module()’,
     ‘importlib.abc.SourceLoader.load_module()’) should no longer be
     implemented, instead loaders should implement an ‘exec_module’
     method (*note importlib.abc.Loader.exec_module(): 86e, *note
     importlib.abc.InspectLoader.exec_module(): 1048. *note
     importlib.abc.SourceLoader.exec_module(): 1049.) and let the import
     system take care of the rest; and
     ‘importlib.abc.Loader.module_repr()’,
     ‘importlib.util.module_for_loader()’,
     ‘importlib.util.set_loader()’, and ‘importlib.util.set_package()’
     are no longer needed because their functions are now handled
     automatically by the import system.

   * The ‘imp’ module is pending deprecation.  To keep compatibility
     with Python 2/3 code bases, the module’s removal is currently not
     scheduled.

   * The ‘formatter’ module is pending deprecation and is slated for
     removal in Python 3.6.

   * ‘MD5’ as the default 'digestmod' for the *note hmac.new(): aae.
     function is deprecated.  Python 3.6 will require an explicit digest
     name or constructor as 'digestmod' argument.

   * The internal ‘Netrc’ class in the *note ftplib: 5e. module has been
     documented as deprecated in its docstring for quite some time.  It
     now emits a *note DeprecationWarning: 1a5. and will be removed
     completely in Python 3.5.

   * The undocumented 'endtime' argument to *note
     subprocess.Popen.wait(): d05. should not have been exposed and is
     hopefully not in use; it is deprecated and will mostly likely be
     removed in Python 3.5.

   * The 'strict' argument of *note HTMLParser: 87b. is deprecated.

   * The *note plistlib: ab. ‘readPlist()’, ‘writePlist()’,
     ‘readPlistFromBytes()’, and ‘writePlistToBytes()’ functions are
     deprecated in favor of the corresponding new functions *note
     load(): 956, *note dump(): 958, *note loads(): 957, and *note
     dumps(): 959.  ‘Data()’ is deprecated in favor of just using the
     *note bytes: 1c2. constructor.

   * The *note sysconfig: db. key ‘SO’ is deprecated, it has been
     replaced by ‘EXT_SUFFIX’.

   * The ‘U’ mode accepted by various ‘open’ functions is deprecated.
     In Python3 it does not do anything useful, and should be replaced
     by appropriate uses of *note io.TextIOWrapper: 7bc. (if needed) and
     its 'newline' argument.

   * The 'parser' argument of *note xml.etree.ElementTree.iterparse():
     273. has been deprecated, as has the 'html' argument of *note
     XMLParser(): a5e.  To prepare for the removal of the latter, all
     arguments to ‘XMLParser’ should be passed by keyword.


File: python.info,  Node: Deprecated Features,  Prev: Deprecations in the Python API,  Up: Descontinuados<11>

1.10.6.2 Deprecated Features
............................

   * Running *note IDLE — editor e console Python: 104b. with the ‘-n’
     flag (no subprocess) is deprecated.  However, the feature will not
     be removed until bpo-18823(1) is resolved.

   * The site module adding a “site-python” directory to sys.path, if it
     exists, is deprecated (bpo-19375(2)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18823

   (2) https://bugs.python.org/issue?@action=redirect&bpo=19375


File: python.info,  Node: Removidos<11>,  Next: Porting to Python 3 4,  Prev: Descontinuados<11>,  Up: O que há de novo no Python 3 4

1.10.7 Removidos
----------------

* Menu:

* Operating Systems No Longer Supported::
* Remoção de APIs e recursos: Remoção de APIs e recursos<5>.
* Code Cleanups::


File: python.info,  Node: Operating Systems No Longer Supported,  Next: Remoção de APIs e recursos<5>,  Up: Removidos<11>

1.10.7.1 Operating Systems No Longer Supported
..............................................

Support for the following operating systems has been removed from the
source and build tools:

   * OS/2 (bpo-16135(1)).

   * Windows 2000 (changeset e52df05b496a).

   * Windows systems where ‘COMSPEC’ points to ‘command.com’
     (bpo-14470(2)).

   * VMS (bpo-16136(3)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16135

   (2) https://bugs.python.org/issue?@action=redirect&bpo=14470

   (3) https://bugs.python.org/issue?@action=redirect&bpo=16136


File: python.info,  Node: Remoção de APIs e recursos<5>,  Next: Code Cleanups,  Prev: Operating Systems No Longer Supported,  Up: Removidos<11>

1.10.7.2 Remoção de APIs e recursos
...................................

The following obsolete and previously deprecated APIs and features have
been removed:

   * The unmaintained ‘Misc/TextMate’ and ‘Misc/vim’ directories have
     been removed (see the devguide(1) for suggestions on what to use
     instead).

   * The ‘SO’ makefile macro is removed (it was replaced by the
     ‘SHLIB_SUFFIX’ and ‘EXT_SUFFIX’ macros) (bpo-16754(2)).

   * The ‘PyThreadState.tick_counter’ field has been removed; its value
     has been meaningless since Python 3.2, when the “new GIL” was
     introduced (bpo-19199(3)).

   * ‘PyLoader’ and ‘PyPycLoader’ have been removed from *note
     importlib: 77.  (Contributed by Taras Lyapun in bpo-15641(4).)

   * The 'strict' argument to *note HTTPConnection: b53. and *note
     HTTPSConnection: b54. has been removed.  HTTP 0.9-style “Simple
     Responses” are no longer supported.

   * The deprecated *note urllib.request.Request: 100e. getter and
     setter methods ‘add_data’, ‘has_data’, ‘get_data’, ‘get_type’,
     ‘get_host’, ‘get_selector’, ‘set_proxy’, ‘get_origin_req_host’, and
     ‘is_unverifiable’ have been removed (use direct attribute access
     instead).

   * Support for loading the deprecated ‘TYPE_INT64’ has been removed
     from *note marshal: 8d.  (Contributed by Dan Riti in bpo-15480(5).)

   * *note inspect.Signature: 1cf.: positional-only parameters are now
     required to have a valid name.

   * *note object.__format__(): 61e. no longer accepts non-empty format
     strings, it now raises a *note TypeError: 2c3. instead.  Using a
     non-empty string has been deprecated since Python 3.2.  This change
     has been made to prevent a situation where previously working (but
     incorrect) code would start failing if an object gained a
     __format__ method, which means that your code may now raise a *note
     TypeError: 2c3. if you are using an ‘'s'’ format code with objects
     that do not have a __format__ method that handles it.  See
     bpo-7994(6) for background.

   * ‘difflib.SequenceMatcher.isbjunk()’ and
     ‘difflib.SequenceMatcher.isbpopular()’ were deprecated in 3.2, and
     have now been removed: use ‘x in sm.bjunk’ and ‘x in sm.bpopular’,
     where 'sm' is a *note SequenceMatcher: 104f. object (bpo-13248(7)).

   ---------- Footnotes ----------

   (1) https://devguide.python.org

   (2) https://bugs.python.org/issue?@action=redirect&bpo=16754

   (3) https://bugs.python.org/issue?@action=redirect&bpo=19199

   (4) https://bugs.python.org/issue?@action=redirect&bpo=15641

   (5) https://bugs.python.org/issue?@action=redirect&bpo=15480

   (6) https://bugs.python.org/issue?@action=redirect&bpo=7994

   (7) https://bugs.python.org/issue?@action=redirect&bpo=13248


File: python.info,  Node: Code Cleanups,  Prev: Remoção de APIs e recursos<5>,  Up: Removidos<11>

1.10.7.3 Code Cleanups
......................

   * The unused and undocumented internal ‘Scanner’ class has been
     removed from the *note pydoc: b5. module.

   * The private and effectively unused ‘_gestalt’ module has been
     removed, along with the private *note platform: aa. functions
     ‘_mac_ver_lookup’, ‘_mac_ver_gstalt’, and ‘_bcd2str’, which would
     only have ever been called on badly broken OSX systems (see
     bpo-18393(1)).

   * The hardcoded copies of certain *note stat: d1. constants that were
     included in the *note tarfile: de. module namespace have been
     removed.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18393


File: python.info,  Node: Porting to Python 3 4,  Next: Alterado em 3 4 3,  Prev: Removidos<11>,  Up: O que há de novo no Python 3 4

1.10.8 Porting to Python 3.4
----------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções que podem exigir alterações no seu código.

* Menu:

* Changes in ‘python’ Command Behavior: Changes in ‘python’ Command Behavior<2>.
* Alterações na API Python: Alterações na API Python<10>.
* Alterações na API C: Alterações na API C<15>.


File: python.info,  Node: Changes in ‘python’ Command Behavior<2>,  Next: Alterações na API Python<10>,  Up: Porting to Python 3 4

1.10.8.1 Changes in ‘python’ Command Behavior
.............................................

   * In a posix shell, setting the ‘PATH’ environment variable to an
     empty value is equivalent to not setting it at all.  However,
     setting *note PYTHONPATH: 1053. to an empty value was 'not'
     equivalent to not setting it at all: setting *note PYTHONPATH:
     1053. to an empty value was equivalent to setting it to ‘.’, which
     leads to confusion when reasoning by analogy to how ‘PATH’ works.
     The behavior now conforms to the posix convention for ‘PATH’.

   * The [X refs, Y blocks] output of a debug (‘--with-pydebug’) build
     of the CPython interpreter is now off by default.  It can be
     re-enabled using the ‘-X showrefcount’ option.  (Contributed by
     Ezio Melotti in bpo-17323(1).)

   * The python command and most stdlib scripts (as well as *note
     argparse: 6.) now output ‘--version’ information to ‘stdout’
     instead of ‘stderr’ (for issue list see *note Other Improvements:
     103c. above).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17323


File: python.info,  Node: Alterações na API Python<10>,  Next: Alterações na API C<15>,  Prev: Changes in ‘python’ Command Behavior<2>,  Up: Porting to Python 3 4

1.10.8.2 Alterações na API Python
.................................

   * The ABCs defined in *note importlib.abc: 78. now either raise the
     appropriate exception or return a default value instead of raising
     *note NotImplementedError: 228. blindly.  This will only affect
     code calling *note super(): 4db. and falling through all the way to
     the ABCs.  For compatibility, catch both *note NotImplementedError:
     228. or the appropriate exception as needed.

   * The module type now initializes the *note __package__: 2d7. and
     *note __loader__: 2e2. attributes to ‘None’ by default.  To
     determine if these attributes were set in a backwards-compatible
     fashion, use e.g.  ‘getattr(module, '__loader__', None) is not
     None’.  (bpo-17115(1).)

   * ‘importlib.util.module_for_loader()’ now sets ‘__loader__’ and
     ‘__package__’ unconditionally to properly support reloading.  If
     this is not desired then you will need to set these attributes
     manually.  You can use ‘importlib.util.module_to_load()’ for module
     management.

   * Import now resets relevant attributes (e.g.  ‘__name__’,
     ‘__loader__’, ‘__package__’, ‘__file__’, ‘__cached__’)
     unconditionally when reloading.  Note that this restores a pre-3.3
     behavior in that it means a module is re-found when re-loaded
     (bpo-19413(2)).

   * Frozen packages no longer set ‘__path__’ to a list containing the
     package name, they now set it to an empty list.  The previous
     behavior could cause the import system to do the wrong thing on
     submodule imports if there was also a directory with the same name
     as the frozen package.  The correct way to determine if a module is
     a package or not is to use ‘hasattr(module, '__path__')’
     (bpo-18065(3)).

   * Frozen modules no longer define a ‘__file__’ attribute.  It’s
     semantically incorrect for frozen modules to set the attribute as
     they are not loaded from any explicit location.  If you must know
     that a module comes from frozen code then you can see if the
     module’s ‘__spec__.location’ is set to ‘'frozen'’, check if the
     loader is a subclass of *note importlib.machinery.FrozenImporter:
     1055, or if Python 2 compatibility is necessary you can use
     ‘imp.is_frozen()’.

   * *note py_compile.compile(): a2f. now raises *note FileExistsError:
     1056. if the file path it would write to is a symlink or a
     non-regular file.  This is to act as a warning that import will
     overwrite those files with a regular file regardless of what type
     of file path they were originally.

   * *note importlib.abc.SourceLoader.get_source(): 1057. no longer
     raises *note ImportError: 419. when the source code being loaded
     triggers a *note SyntaxError: 18d. or *note UnicodeDecodeError:
     a1d.  As *note ImportError: 419. is meant to be raised only when
     source code cannot be found but it should, it was felt to be
     over-reaching/overloading of that meaning when the source code is
     found but improperly structured.  If you were catching ImportError
     before and wish to continue to ignore syntax or decoding issues,
     catch all three exceptions now.

   * *note functools.update_wrapper(): 1058. e *note functools.wraps():
     f91. agora definem corretamente o atributo ‘__wrapped__’ para a
     função que está sendo empacotada, mesmo que essa função também
     tenha seu atributo ‘__wrapped__’ definido.  Isso significa que os
     atributos ‘__wrapped__’ agora vinculam corretamente uma pilha de
     funções decoradas em vez de cada atributo ‘__wrapped__’ na cadeia
     referente à função mais interna.  Bibliotecas de introspecção que
     presumiam que o comportamento anterior foi intencional podem usar
     *note inspect.unwrap(): f90. para acessar a primeira função na
     cadeia que não possui nenhum atributo ‘__wrapped__’.

   * *note inspect.getfullargspec(): 739. foi reimplementada em cima de
     *note inspect.signature(): 738. e, portanto, lida com uma variedade
     muito maior de objetos que podem ser chamados do que no passado.
     Espera-se que chamáveis adicionais de módulos embutidos e de
     extensão ganhem metadados de assinatura ao longo da série Python
     3.4.  O código que presume que *note inspect.getfullargspec(): 739.
     falhará em chamáveis não-Python pode precisar ser ajustado de
     acordo.

   * *note importlib.machinery.PathFinder: 1059. now passes on the
     current working directory to objects in *note sys.path_hooks: 105a.
     for the empty string.  This results in *note
     sys.path_importer_cache: 5e4. never containing ‘''’, thus iterating
     through *note sys.path_importer_cache: 5e4. based on *note
     sys.path: 3b4. will not find all keys.  A module’s ‘__file__’ when
     imported in the current working directory will also now have an
     absolute path, including when using ‘-m’ with the interpreter
     (except for ‘__main__.__file__’ when a script has been executed
     directly using a relative path) (Contributed by Brett Cannon in
     bpo-18416(4)).  is specified on the command-line) (bpo-18416(5)).

   * The removal of the 'strict' argument to *note HTTPConnection: b53.
     and *note HTTPSConnection: b54. changes the meaning of the
     remaining arguments if you are specifying them positionally rather
     than by keyword.  If you’ve been paying attention to deprecation
     warnings your code should already be specifying any additional
     arguments via keywords.

   * Strings between ‘from __future__ import ...’ statements now
     'always' raise a *note SyntaxError: 18d.  Previously if there was
     no leading docstring, an interstitial string would sometimes be
     ignored.  This brings CPython into compliance with the language
     spec; Jython and PyPy already were.  (bpo-17434(6)).

   * *note ssl.SSLSocket.getpeercert(): fec. and *note
     ssl.SSLSocket.do_handshake(): e9c. now raise an *note OSError: 417.
     with ‘ENOTCONN’ when the ‘SSLSocket’ is not connected, instead of
     the previous behavior of raising an *note AttributeError: 34b.  In
     addition, *note getpeercert(): fec. will raise a *note ValueError:
     202. if the handshake has not yet been done.

   * *note base64.b32decode(): 105b. now raises a *note binascii.Error:
     105c. when the input string contains non-b32-alphabet characters,
     instead of a *note TypeError: 2c3.  This particular *note
     TypeError: 2c3. was missed when the other *note TypeError: 2c3.s
     were converted.  (Contributed by Serhiy Storchaka in bpo-18011(7).)
     Note: this change was also inadvertently applied in Python 3.3.3.

   * The ‘file’ attribute is now automatically closed when the creating
     ‘cgi.FieldStorage’ instance is garbage collected.  If you were
     pulling the file object out separately from the ‘cgi.FieldStorage’
     instance and not keeping the instance alive, then you should either
     store the entire ‘cgi.FieldStorage’ instance or read the contents
     of the file before the ‘cgi.FieldStorage’ instance is garbage
     collected.

   * Calling ‘read’ or ‘write’ on a closed SSL socket now raises an
     informative *note ValueError: 202. rather than the previous more
     mysterious *note AttributeError: 34b. (bpo-9177(8)).

   * *note slice.indices(): 105d. no longer produces an *note
     OverflowError: 885. for huge values.  As a consequence of this fix,
     *note slice.indices(): 105d. now raises a *note ValueError: 202. if
     given a negative length; previously it returned nonsense values
     (bpo-14794(9)).

   * The *note complex: 2f8. constructor, unlike the *note cmath: 18.
     functions, was incorrectly accepting *note float: 2f7. values if an
     object’s ‘__complex__’ special method returned one.  This now
     raises a *note TypeError: 2c3.  (bpo-16290(10).)

   * The *note int: 257. constructor in 3.2 and 3.3 erroneously accepts
     *note float: 2f7. values for the 'base' parameter.  It is unlikely
     anyone was doing this, but if so, it will now raise a *note
     TypeError: 2c3. (bpo-16772(11)).

   * Defaults for keyword-only arguments are now evaluated 'after'
     defaults for regular keyword arguments, instead of before.
     Hopefully no one wrote any code that depends on the previous buggy
     behavior (bpo-16967(12)).

   * Stale thread states are now cleared after *note fork(): 197.  This
     may cause some system resources to be released that previously were
     incorrectly kept perpetually alive (for example, database
     connections kept in thread-local storage).  (bpo-17094(13).)

   * Parameter names in ‘__annotations__’ dicts are now mangled
     properly, similarly to *note __kwdefaults__: 105e.  (Contributed by
     Yury Selivanov in bpo-20625(14).)

   * *note hashlib.hash.name: f7b. now always returns the identifier in
     lower case.  Previously some builtin hashes had uppercase names,
     but now that it is a formal public interface the naming has been
     made consistent (bpo-18532(15)).

   * Because *note unittest.TestSuite: e20. now drops references to
     tests after they are run, test harnesses that reuse a *note
     TestSuite: e20. to re-run a set of tests may fail.  Test suites
     should not be re-used in this fashion since it means state is
     retained between test runs, breaking the test isolation that *note
     unittest: 106. is designed to provide.  However, if the lack of
     isolation is considered acceptable, the old behavior can be
     restored by creating a *note TestSuite: e20. subclass that defines
     a ‘_removeTestAtIndex’ method that does nothing (see *note
     TestSuite.__iter__(): 105f.) (bpo-11798(16)).

   * *note unittest: 106. now uses *note argparse: 6. for command line
     parsing.  There are certain invalid command forms that used to work
     that are no longer allowed; in theory this should not cause
     backward compatibility issues since the disallowed command forms
     didn’t make any sense and are unlikely to be in use.

   * The *note re.split(): 2a2, *note re.findall(): 1060, and *note
     re.sub(): 2a3. functions, and the *note group(): 1061. and *note
     groups(): 1062. methods of ‘match’ objects now always return a
     'bytes' object when the string to be matched is a *note bytes-like
     object: d4f.  Previously the return type matched the input type, so
     if your code was depending on the return value being, say, a
     ‘bytearray’, you will need to change your code.

   * ‘audioop’ functions now raise an error immediately if passed string
     input, instead of failing randomly later on (bpo-16685(17)).

   * The new 'convert_charrefs' argument to *note HTMLParser: 87b.
     currently defaults to ‘False’ for backward compatibility, but will
     eventually be changed to default to ‘True’.  It is recommended that
     you add this keyword, with the appropriate value, to any *note
     HTMLParser: 87b. calls in your code (bpo-13633(18)).

   * Since the 'digestmod' argument to the *note hmac.new(): aae.
     function will in the future have no default, all calls to *note
     hmac.new(): aae. should be changed to explicitly specify a
     'digestmod' (bpo-17276(19)).

   * Calling *note sysconfig.get_config_var(): 1063. with the ‘SO’ key,
     or looking ‘SO’ up in the results of a call to *note
     sysconfig.get_config_vars(): 1064. is deprecated.  This key should
     be replaced by ‘EXT_SUFFIX’ or ‘SHLIB_SUFFIX’, depending on the
     context (bpo-19555(20)).

   * Any calls to ‘open’ functions that specify ‘U’ should be modified.
     ‘U’ is ineffective in Python3 and will eventually raise an error if
     used.  Depending on the function, the equivalent of its old Python2
     behavior can be achieved using either a 'newline' argument, or if
     necessary by wrapping the stream in *note TextIOWrapper: 7bc. to
     use its 'newline' argument (bpo-15204(21)).

   * If you use ‘pyvenv’ in a script and desire that pip 'not' be
     installed, you must add ‘--without-pip’ to your command invocation.

   * The default behavior of *note json.dump(): d67. and *note
     json.dumps(): d68. when an indent is specified has changed: it no
     longer produces trailing spaces after the item separating commas at
     the ends of lines.  This will matter only if you have tests that
     are doing white-space-sensitive comparisons of such output
     (bpo-16333(22)).

   * *note doctest: 3a. now looks for doctests in extension module
     ‘__doc__’ strings, so if your doctest test discovery includes
     extension modules that have things that look like doctests in them
     you may see test failures you’ve never seen before when running
     your tests (bpo-3158(23)).

   * The *note collections.abc: 1e. module has been slightly refactored
     as part of the Python startup improvements.  As a consequence of
     this, it is no longer the case that importing *note collections:
     1d. automatically imports *note collections.abc: 1e.  If your
     program depended on the (undocumented) implicit import, you will
     need to add an explicit ‘import collections.abc’ (bpo-20784(24)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17115

   (2) https://bugs.python.org/issue?@action=redirect&bpo=19413

   (3) https://bugs.python.org/issue?@action=redirect&bpo=18065

   (4) https://bugs.python.org/issue?@action=redirect&bpo=18416

   (5) https://bugs.python.org/issue?@action=redirect&bpo=18416

   (6) https://bugs.python.org/issue?@action=redirect&bpo=17434

   (7) https://bugs.python.org/issue?@action=redirect&bpo=18011

   (8) https://bugs.python.org/issue?@action=redirect&bpo=9177

   (9) https://bugs.python.org/issue?@action=redirect&bpo=14794

   (10) https://bugs.python.org/issue?@action=redirect&bpo=16290

   (11) https://bugs.python.org/issue?@action=redirect&bpo=16772

   (12) https://bugs.python.org/issue?@action=redirect&bpo=16967

   (13) https://bugs.python.org/issue?@action=redirect&bpo=17094

   (14) https://bugs.python.org/issue?@action=redirect&bpo=20625

   (15) https://bugs.python.org/issue?@action=redirect&bpo=18532

   (16) https://bugs.python.org/issue?@action=redirect&bpo=11798

   (17) https://bugs.python.org/issue?@action=redirect&bpo=16685

   (18) https://bugs.python.org/issue?@action=redirect&bpo=13633

   (19) https://bugs.python.org/issue?@action=redirect&bpo=17276

   (20) https://bugs.python.org/issue?@action=redirect&bpo=19555

   (21) https://bugs.python.org/issue?@action=redirect&bpo=15204

   (22) https://bugs.python.org/issue?@action=redirect&bpo=16333

   (23) https://bugs.python.org/issue?@action=redirect&bpo=3158

   (24) https://bugs.python.org/issue?@action=redirect&bpo=20784


File: python.info,  Node: Alterações na API C<15>,  Prev: Alterações na API Python<10>,  Up: Porting to Python 3 4

1.10.8.3 Alterações na API C
............................

   * *note PyEval_EvalFrameEx(): 1066, *note PyObject_Repr(): 1067, and
     *note PyObject_Str(): 1068, along with some other internal C APIs,
     now include a debugging assertion that ensures they are not used in
     situations where they may silently discard a currently active
     exception.  In cases where discarding the active exception is
     expected and desired (for example, because it has already been
     saved locally with *note PyErr_Fetch(): 3f3. or is being
     deliberately replaced with a different exception), an explicit
     *note PyErr_Clear(): 1069. call will be needed to avoid triggering
     the assertion when invoking these operations (directly or
     indirectly) and running against a version of Python that is
     compiled with assertions enabled.

   * *note PyErr_SetImportError(): d60. now sets *note TypeError: 2c3.
     when its 'msg' argument is not set.  Previously only ‘NULL’ was
     returned with no exception set.

   * The result of the *note PyOS_ReadlineFunctionPointer: 586. callback
     must now be a string allocated by *note PyMem_RawMalloc(): 390. or
     *note PyMem_RawRealloc(): 392, or ‘NULL’ if an error occurred,
     instead of a string allocated by *note PyMem_Malloc(): c81. or
     *note PyMem_Realloc(): 106a. (bpo-16742(1))

   * *note PyThread_set_key_value(): 408. now always set the value.  In
     Python 3.3, the function did nothing if the key already exists (if
     the current value is a non-‘NULL’ pointer).

   * The ‘f_tstate’ (thread state) field of the *note PyFrameObject:
     789. structure has been removed to fix a bug: see bpo-14432(2) for
     the rationale.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16742

   (2) https://bugs.python.org/issue?@action=redirect&bpo=14432


File: python.info,  Node: Alterado em 3 4 3,  Prev: Porting to Python 3 4,  Up: O que há de novo no Python 3 4

1.10.9 Alterado em 3.4.3
------------------------

* Menu:

* PEP 476; Habilitando verificação de certificado por padrão para clientes http stdlib: PEP 476 Habilitando verificação de certificado por padrão para clientes http stdlib.


File: python.info,  Node: PEP 476 Habilitando verificação de certificado por padrão para clientes http stdlib,  Up: Alterado em 3 4 3

1.10.9.1 PEP 476: Habilitando verificação de certificado por padrão para clientes http stdlib
.............................................................................................

*note http.client: 6f. and modules which use it, such as *note
urllib.request: 10b. and *note xmlrpc.client: 12e, will now verify that
the server presents a certificate which is signed by a CA in the
platform trust store and whose hostname matches the hostname being
requested by default, significantly improving security for many
applications.

Para aplicações que exigem o antigo comportamento anterior, elas podem
passar um contexto alternativo:

     import urllib.request
     import ssl

     # This disables all verification
     context = ssl._create_unverified_context()

     # This allows using a specific certificate for the host, which doesn't need
     # to be in the trust store
     context = ssl.create_default_context(cafile="/path/to/file.crt")

     urllib.request.urlopen("https://invalid-cert", context=context)


File: python.info,  Node: O que há de novo no Python 3 3,  Next: O que há de novo no Python 3 2,  Prev: O que há de novo no Python 3 4,  Up: O que há de novo no Python

1.11 O que há de novo no Python 3.3
===================================

This article explains the new features in Python 3.3, compared to 3.2.
Python 3.3 was released on September 29, 2012.  For full details, see
the changelog(1).

Ver também
..........

PEP 398(2) - Python 3.3 Release Schedule

* Menu:

* Resumo – Destaques da versão: Resumo – Destaques da versão<11>.
* PEP 405; Ambientes Virtuais: PEP 405 Ambientes Virtuais.
* PEP 420; Implicit Namespace Packages: PEP 420 Implicit Namespace Packages.
* PEP 3118; New memoryview implementation and buffer protocol documentation: PEP 3118 New memoryview implementation and buffer protocol documentation.
* PEP 393; Flexible String Representation: PEP 393 Flexible String Representation.
* PEP 397; Python Launcher for Windows: PEP 397 Python Launcher for Windows.
* PEP 3151; Reworking the OS and IO exception hierarchy: PEP 3151 Reworking the OS and IO exception hierarchy.
* PEP 380; Syntax for Delegating to a Subgenerator: PEP 380 Syntax for Delegating to a Subgenerator.
* PEP 409; Suppressing exception context: PEP 409 Suppressing exception context.
* PEP 414; Explicit Unicode literals: PEP 414 Explicit Unicode literals.
* PEP 3155; Qualified name for classes and functions: PEP 3155 Qualified name for classes and functions.
* PEP 412; Key-Sharing Dictionary: PEP 412 Key-Sharing Dictionary.
* PEP 362; Function Signature Object: PEP 362 Function Signature Object.
* PEP 421; Adding sys.implementation: PEP 421 Adding sys implementation.
* Using importlib as the Implementation of Import::
* Outras mudanças na linguagem: Outras mudanças na linguagem<11>.
* A Finer-Grained Import Lock::
* Builtin functions and types::
* Novos módulos: Novos módulos<11>.
* Módulos melhorados: Módulos melhorados<11>.
* Otimizações: Otimizações<10>.
* Mudanças a construções e API C: Mudanças a construções e API C<4>.
* Descontinuados: Descontinuados<12>.
* Porting to Python 3.3: Porting to Python 3 3.

   ---------- Footnotes ----------

   (1) https://docs.python.org/3.3/whatsnew/changelog.html

   (2) https://peps.python.org/pep-0398/


File: python.info,  Node: Resumo – Destaques da versão<11>,  Next: PEP 405 Ambientes Virtuais,  Up: O que há de novo no Python 3 3

1.11.1 Resumo – Destaques da versão
-----------------------------------

Novos recursos de sintaxe:

   * New ‘yield from’ expression for *note generator delegation: 1072.

   * A sintaxe ‘u'unicode'’ é aceita novamente para objetos tipo *note
     str: 44c.

Novos módulos de biblioteca:

   * *note faulthandler: 58. (helps debugging low-level crashes)

   * *note ipaddress: 80. (high-level objects representing IP addresses
     and masks)

   * *note lzma: 8a. (compressão de dados usando o algoritmo XZ / LZMA)

   * *note unittest.mock: 107. (replace parts of your system under test
     with mock objects)

   * *note venv: 111. (Python *note virtual environments: 1073, as in
     the popular ‘virtualenv’ package)

Novos recursos embutidos:

   * Reworked *note I/O exception hierarchy: 1074.

Melhorias na implementação:

   * Rewritten *note import machinery: 1075. based on *note importlib:
     77.

   * More compact *note unicode strings: 1076.

   * More compact *note attribute dictionaries: 1077.

Significantly Improved Library Modules:

   * C Accelerator for the *note decimal: 1078. module.

   * Better unicode handling in the *note email: 1079. module (*note
     provisional: 107a.).

Melhorias de Segurança:

   * Hash randomization is switched on by default.

Please read on for a comprehensive list of user-facing changes.


File: python.info,  Node: PEP 405 Ambientes Virtuais,  Next: PEP 420 Implicit Namespace Packages,  Prev: Resumo – Destaques da versão<11>,  Up: O que há de novo no Python 3 3

1.11.2 PEP 405: Ambientes Virtuais
----------------------------------

Virtual environments help create separate Python setups while sharing a
system-wide base install, for ease of maintenance.  Virtual environments
have their own set of private site packages (i.e.  locally installed
libraries), and are optionally segregated from the system-wide site
packages.  Their concept and implementation are inspired by the popular
‘virtualenv’ third-party package, but benefit from tighter integration
with the interpreter core.

This PEP adds the *note venv: 111. module for programmatic access, and
the ‘pyvenv’ script for command-line access and administration.  The
Python interpreter checks for a ‘pyvenv.cfg’, file whose existence
signals the base of a virtual environment’s directory tree.

Ver também
..........

PEP 405(1) - Ambientes Virtuais Python

     PEP written by Carl Meyer; implementation by Carl Meyer and Vinay
     Sajip

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0405/


File: python.info,  Node: PEP 420 Implicit Namespace Packages,  Next: PEP 3118 New memoryview implementation and buffer protocol documentation,  Prev: PEP 405 Ambientes Virtuais,  Up: O que há de novo no Python 3 3

1.11.3 PEP 420: Implicit Namespace Packages
-------------------------------------------

Native support for package directories that don’t require ‘__init__.py’
marker files and can automatically span multiple path segments (inspired
by various third party approaches to namespace packages, as described in
PEP 420(1))

Ver também
..........

PEP 420(2) - Implicit Namespace Packages

     PEP written by Eric V. Smith; implementation by Eric V. Smith and
     Barry Warsaw

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0420/

   (2) https://peps.python.org/pep-0420/


File: python.info,  Node: PEP 3118 New memoryview implementation and buffer protocol documentation,  Next: PEP 393 Flexible String Representation,  Prev: PEP 420 Implicit Namespace Packages,  Up: O que há de novo no Python 3 3

1.11.4 PEP 3118: New memoryview implementation and buffer protocol documentation
--------------------------------------------------------------------------------

A implementação de PEP 3118(1) foi significativamente melhorada.

The new memoryview implementation comprehensively fixes all ownership
and lifetime issues of dynamically allocated fields in the Py_buffer
struct that led to multiple crash reports.  Additionally, several
functions that crashed or returned incorrect results for non-contiguous
or multi-dimensional input have been fixed.

The memoryview object now has a PEP-3118 compliant getbufferproc() that
checks the consumer’s request type.  Many new features have been added,
most of them work in full generality for non-contiguous arrays and
arrays with suboffsets.

The documentation has been updated, clearly spelling out
responsibilities for both exporters and consumers.  Buffer request flags
are grouped into basic and compound flags.  The memory layout of
non-contiguous and multi-dimensional NumPy-style arrays is explained.

* Menu:

* Recursos::
* Mudanças na API::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3118/


File: python.info,  Node: Recursos,  Next: Mudanças na API,  Up: PEP 3118 New memoryview implementation and buffer protocol documentation

1.11.4.1 Recursos
.................

   * All native single character format specifiers in struct module
     syntax (optionally prefixed with ‘@’) are now supported.

   * With some restrictions, the cast() method allows changing of format
     and shape of C-contiguous arrays.

   * Multi-dimensional list representations are supported for any array
     type.

   * Multi-dimensional comparisons are supported for any array type.

   * One-dimensional memoryviews of hashable (read-only) types with
     formats B, b or c are now hashable.  (Contributed by Antoine Pitrou
     in bpo-13411(1).)

   * Arbitrary slicing of any 1-D arrays type is supported.  For
     example, it is now possible to reverse a memoryview in 'O'(1) by
     using a negative step.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13411


File: python.info,  Node: Mudanças na API,  Prev: Recursos,  Up: PEP 3118 New memoryview implementation and buffer protocol documentation

1.11.4.2 Mudanças na API
........................

   * The maximum number of dimensions is officially limited to 64.

   * The representation of empty shape, strides and suboffsets is now an
     empty tuple instead of ‘None’.

   * Accessing a memoryview element with format ‘B’ (unsigned bytes) now
     returns an integer (in accordance with the struct module syntax).
     For returning a bytes object the view must be cast to ‘c’ first.

   * memoryview comparisons now use the logical structure of the
     operands and compare all array elements by value.  All format
     strings in struct module syntax are supported.  Views with
     unrecognised format strings are still permitted, but will always
     compare as unequal, regardless of view contents.

   * For further changes see *note Build and C API Changes: 1081. and
     *note Porting C code: 1082.

(Contributed by Stefan Krah in bpo-10181(1).)

Ver também
..........

PEP 3118(2) - Revising the Buffer Protocol

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10181

   (2) https://peps.python.org/pep-3118/


File: python.info,  Node: PEP 393 Flexible String Representation,  Next: PEP 397 Python Launcher for Windows,  Prev: PEP 3118 New memoryview implementation and buffer protocol documentation,  Up: O que há de novo no Python 3 3

1.11.5 PEP 393: Flexible String Representation
----------------------------------------------

The Unicode string type is changed to support multiple internal
representations, depending on the character with the largest Unicode
ordinal (1, 2, or 4 bytes) in the represented string.  This allows a
space-efficient representation in common cases, but gives access to full
UCS-4 on all systems.  For compatibility with existing APIs, several
representations may exist in parallel; over time, this compatibility
should be phased out.

On the Python side, there should be no downside to this change.

On the C API side, PEP 393(1) is fully backward compatible.  The legacy
API should remain available at least five years.  Applications using the
legacy API will not fully benefit of the memory reduction, or - worse -
may use a bit more memory, because Python may have to maintain two
versions of each string (in the legacy format and in the new efficient
storage).

* Menu:

* Funcionalidade::
* Desempenho e utilização de recursos::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0393/


File: python.info,  Node: Funcionalidade,  Next: Desempenho e utilização de recursos,  Up: PEP 393 Flexible String Representation

1.11.5.1 Funcionalidade
.......................

Changes introduced by PEP 393(1) are the following:

   * Python now always supports the full range of Unicode code points,
     including non-BMP ones (i.e.  from ‘U+0000’ to ‘U+10FFFF’).  The
     distinction between narrow and wide builds no longer exists and
     Python now behaves like a wide build, even under Windows.

   * With the death of narrow builds, the problems specific to narrow
     builds have also been fixed, for example:

        * *note len(): 62e. now always returns 1 for non-BMP characters,
          so ‘len('\U0010FFFF') == 1’;

        * surrogate pairs are not recombined in string literals, so
          ‘'\uDBFF\uDFFF' != '\U0010FFFF'’;

        * indexing or slicing non-BMP characters returns the expected
          value, so ‘'\U0010FFFF'[0]’ now returns ‘'\U0010FFFF'’ and not
          ‘'\uDBFF'’;

        * all other functions in the standard library now correctly
          handle non-BMP code points.

   * The value of *note sys.maxunicode: 1085. is now always ‘1114111’
     (‘0x10FFFF’ in hexadecimal).  The ‘PyUnicode_GetMax()’ function
     still returns either ‘0xFFFF’ or ‘0x10FFFF’ for backward
     compatibility, and it should not be used with the new Unicode API
     (see bpo-13054(2)).

   * The ‘./configure’ flag ‘--with-wide-unicode’ has been removed.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0393/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=13054


File: python.info,  Node: Desempenho e utilização de recursos,  Prev: Funcionalidade,  Up: PEP 393 Flexible String Representation

1.11.5.2 Desempenho e utilização de recursos
............................................

The storage of Unicode strings now depends on the highest code point in
the string:

   * pure ASCII and Latin1 strings (‘U+0000-U+00FF’) use 1 byte per code
     point;

   * BMP strings (‘U+0000-U+FFFF’) use 2 bytes per code point;

   * non-BMP strings (‘U+10000-U+10FFFF’) use 4 bytes per code point.

The net effect is that for most applications, memory usage of string
storage should decrease significantly - especially compared to former
wide unicode builds - as, in many cases, strings will be pure ASCII even
in international contexts (because many strings store non-human language
data, such as XML fragments, HTTP headers, JSON-encoded data, etc.).  We
also hope that it will, for the same reasons, increase CPU cache
efficiency on non-trivial applications.  The memory usage of Python 3.3
is two to three times smaller than Python 3.2, and a little bit better
than Python 2.7, on a Django benchmark (see the PEP for details).

Ver também
..........

PEP 393(1) - Flexible String Representation

     PEP written by Martin von Löwis; implementation by Torsten Becker
     and Martin von Löwis.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0393/


File: python.info,  Node: PEP 397 Python Launcher for Windows,  Next: PEP 3151 Reworking the OS and IO exception hierarchy,  Prev: PEP 393 Flexible String Representation,  Up: O que há de novo no Python 3 3

1.11.6 PEP 397: Python Launcher for Windows
-------------------------------------------

The Python 3.3 Windows installer now includes a ‘py’ launcher
application that can be used to launch Python applications in a version
independent fashion.

This launcher is invoked implicitly when double-clicking ‘*.py’ files.
If only a single Python version is installed on the system, that version
will be used to run the file.  If multiple versions are installed, the
most recent version is used by default, but this can be overridden by
including a Unix-style “shebang line” in the Python script.

The launcher can also be used explicitly from the command line as the
‘py’ application.  Running ‘py’ follows the same version selection rules
as implicitly launching scripts, but a more specific version can be
selected by passing appropriate arguments (such as ‘-3’ to request
Python 3 when Python 2 is also installed, or ‘-2.6’ to specifically
request an earlier Python version when a more recent version is
installed).

In addition to the launcher, the Windows installer now includes an
option to add the newly installed Python to the system PATH.
(Contributed by Brian Curtin in bpo-3561(1).)

Ver também
..........

PEP 397(2) - Python Launcher for Windows

     PEP written by Mark Hammond and Martin v.  Löwis; implementation by
     Vinay Sajip.

Launcher documentation: *note Inicializador Python para Windows: 5be.

Installer PATH modification: *note Encontrando o executável do Python:
1089.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=3561

   (2) https://peps.python.org/pep-0397/


File: python.info,  Node: PEP 3151 Reworking the OS and IO exception hierarchy,  Next: PEP 380 Syntax for Delegating to a Subgenerator,  Prev: PEP 397 Python Launcher for Windows,  Up: O que há de novo no Python 3 3

1.11.7 PEP 3151: Reworking the OS and IO exception hierarchy
------------------------------------------------------------

The hierarchy of exceptions raised by operating system errors is now
both simplified and finer-grained.

You don’t have to worry anymore about choosing the appropriate exception
type between *note OSError: 417, *note IOError: 108b, *note
EnvironmentError: 108c, *note WindowsError: 108d, ‘mmap.error’, *note
socket.error: 108e. or *note select.error: 108f.  All these exception
types are now only one: *note OSError: 417.  The other names are kept as
aliases for compatibility reasons.

Also, it is now easier to catch a specific error condition.  Instead of
inspecting the ‘errno’ attribute (or ‘args[0]’) for a particular
constant from the *note errno: 57. module, you can catch the adequate
*note OSError: 417. subclass.  The available subclasses are the
following:

   * *note BlockingIOError: 1090.

   * *note ChildProcessError: 1091.

   * *note ConnectionError: e36.

   * *note FileExistsError: 1056.

   * *note FileNotFoundError: 42b.

   * *note InterruptedError: db0.

   * *note IsADirectoryError: 1092.

   * *note NotADirectoryError: 1093.

   * *note PermissionError: d65.

   * *note ProcessLookupError: 1094.

   * *note TimeoutError: 838.

And the *note ConnectionError: e36. itself has finer-grained subclasses:

   * *note BrokenPipeError: 1095.

   * *note ConnectionAbortedError: 1096.

   * *note ConnectionRefusedError: 1097.

   * *note ConnectionResetError: 1098.

Thanks to the new exceptions, common usages of the *note errno: 57. can
now be avoided.  For example, the following code written for Python 3.2:

     from errno import ENOENT, EACCES, EPERM

     try:
         with open("document.txt") as f:
             content = f.read()
     except IOError as err:
         if err.errno == ENOENT:
             print("document.txt file is missing")
         elif err.errno in (EACCES, EPERM):
             print("You are not allowed to read document.txt")
         else:
             raise

can now be written without the *note errno: 57. import and without
manual inspection of exception attributes:

     try:
         with open("document.txt") as f:
             content = f.read()
     except FileNotFoundError:
         print("document.txt file is missing")
     except PermissionError:
         print("You are not allowed to read document.txt")

Ver também
..........

PEP 3151(1) - Reworking the OS and IO Exception Hierarchy

     PEP escrita e implmentada por Antoine Pitrou

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3151/


File: python.info,  Node: PEP 380 Syntax for Delegating to a Subgenerator,  Next: PEP 409 Suppressing exception context,  Prev: PEP 3151 Reworking the OS and IO exception hierarchy,  Up: O que há de novo no Python 3 3

1.11.8 PEP 380: Syntax for Delegating to a Subgenerator
-------------------------------------------------------

PEP 380 adds the ‘yield from’ expression, allowing a *note generator:
109a. to delegate part of its operations to another generator.  This
allows a section of code containing *note yield: 9d5. to be factored out
and placed in another generator.  Additionally, the subgenerator is
allowed to return with a value, and the value is made available to the
delegating generator.

While designed primarily for use in delegating to a subgenerator, the
‘yield from’ expression actually allows delegation to arbitrary
subiterators.

For simple iterators, ‘yield from iterable’ is essentially just a
shortened form of ‘for item in iterable: yield item’:

     >>> def g(x):
     ...     yield from range(x, 0, -1)
     ...     yield from range(x)
     ...
     >>> list(g(5))
     [5, 4, 3, 2, 1, 0, 1, 2, 3, 4]

However, unlike an ordinary loop, ‘yield from’ allows subgenerators to
receive sent and thrown values directly from the calling scope, and
return a final value to the outer generator:

     >>> def accumulate():
     ...     tally = 0
     ...     while 1:
     ...         next = yield
     ...         if next is None:
     ...             return tally
     ...         tally += next
     ...
     >>> def gather_tallies(tallies):
     ...     while 1:
     ...         tally = yield from accumulate()
     ...         tallies.append(tally)
     ...
     >>> tallies = []
     >>> acc = gather_tallies(tallies)
     >>> next(acc)  # Ensure the accumulator is ready to accept values
     >>> for i in range(4):
     ...     acc.send(i)
     ...
     >>> acc.send(None)  # Finish the first tally
     >>> for i in range(5):
     ...     acc.send(i)
     ...
     >>> acc.send(None)  # Finish the second tally
     >>> tallies
     [6, 10]

The main principle driving this change is to allow even generators that
are designed to be used with the ‘send’ and ‘throw’ methods to be split
into multiple subgenerators as easily as a single large function can be
split into multiple subfunctions.

Ver também
..........

PEP 380(1) - Sintaxe para Delegar a um Subgerador

     PEP written by Greg Ewing; implementation by Greg Ewing, integrated
     into 3.3 by Renaud Blanch, Ryan Kelly and Nick Coghlan;
     documentation by Zbigniew Jędrzejewski-Szmek and Nick Coghlan

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0380/


File: python.info,  Node: PEP 409 Suppressing exception context,  Next: PEP 414 Explicit Unicode literals,  Prev: PEP 380 Syntax for Delegating to a Subgenerator,  Up: O que há de novo no Python 3 3

1.11.9 PEP 409: Suppressing exception context
---------------------------------------------

PEP 409 introduces new syntax that allows the display of the chained
exception context to be disabled.  This allows cleaner error messages in
applications that convert between exception types:

     >>> class D:
     ...     def __init__(self, extra):
     ...         self._extra_attributes = extra
     ...     def __getattr__(self, attr):
     ...         try:
     ...             return self._extra_attributes[attr]
     ...         except KeyError:
     ...             raise AttributeError(attr) from None
     ...
     >>> D({}).x
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
       File "<stdin>", line 8, in __getattr__
     AttributeError: x

Without the ‘from None’ suffix to suppress the cause, the original
exception would be displayed by default:

     >>> class C:
     ...     def __init__(self, extra):
     ...         self._extra_attributes = extra
     ...     def __getattr__(self, attr):
     ...         try:
     ...             return self._extra_attributes[attr]
     ...         except KeyError:
     ...             raise AttributeError(attr)
     ...
     >>> C({}).x
     Traceback (most recent call last):
       File "<stdin>", line 6, in __getattr__
     KeyError: 'x'

     During handling of the above exception, another exception occurred:

     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
       File "<stdin>", line 8, in __getattr__
     AttributeError: x

No debugging capability is lost, as the original exception context
remains available if needed (for example, if an intervening library has
incorrectly suppressed valuable underlying details):

     >>> try:
     ...     D({}).x
     ... except AttributeError as exc:
     ...     print(repr(exc.__context__))
     ...
     KeyError('x',)

Ver também
..........

PEP 409(1) - Suppressing exception context

     PEP written by Ethan Furman; implemented by Ethan Furman and Nick
     Coghlan.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0409/


File: python.info,  Node: PEP 414 Explicit Unicode literals,  Next: PEP 3155 Qualified name for classes and functions,  Prev: PEP 409 Suppressing exception context,  Up: O que há de novo no Python 3 3

1.11.10 PEP 414: Explicit Unicode literals
------------------------------------------

To ease the transition from Python 2 for Unicode aware Python
applications that make heavy use of Unicode literals, Python 3.3 once
again supports the “‘u’” prefix for string literals.  This prefix has no
semantic significance in Python 3, it is provided solely to reduce the
number of purely mechanical changes in migrating to Python 3, making it
easier for developers to focus on the more significant semantic changes
(such as the stricter default separation of binary and text data).

Ver também
..........

PEP 414(1) - Explicit Unicode literals

     PEP written by Armin Ronacher.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0414/


File: python.info,  Node: PEP 3155 Qualified name for classes and functions,  Next: PEP 412 Key-Sharing Dictionary,  Prev: PEP 414 Explicit Unicode literals,  Up: O que há de novo no Python 3 3

1.11.11 PEP 3155: Qualified name for classes and functions
----------------------------------------------------------

Functions and class objects have a new *note __qualname__: 109e.
attribute representing the “path” from the module top-level to their
definition.  For global functions and classes, this is the same as *note
__name__: 109f.  For other functions and classes, it provides better
information about where they were actually defined, and how they might
be accessible from the global scope.

Example with (non-bound) methods:

     >>> class C:
     ...     def meth(self):
     ...         pass
     ...
     >>> C.meth.__name__
     'meth'
     >>> C.meth.__qualname__
     'C.meth'

Example with nested classes:

     >>> class C:
     ...     class D:
     ...         def meth(self):
     ...             pass
     ...
     >>> C.D.__name__
     'D'
     >>> C.D.__qualname__
     'C.D'
     >>> C.D.meth.__name__
     'meth'
     >>> C.D.meth.__qualname__
     'C.D.meth'

Example with nested functions:

     >>> def outer():
     ...     def inner():
     ...         pass
     ...     return inner
     ...
     >>> outer().__name__
     'inner'
     >>> outer().__qualname__
     'outer.<locals>.inner'

The string representation of those objects is also changed to include
the new, more precise information:

     >>> str(C.D)
     "<class '__main__.C.D'>"
     >>> str(C.D.meth)
     '<function C.D.meth at 0x7f46b9fe31e0>'

Ver também
..........

PEP 3155(1) - Qualified name for classes and functions

     PEP escrita e implementada por Antoine Pitrou.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3155/


File: python.info,  Node: PEP 412 Key-Sharing Dictionary,  Next: PEP 362 Function Signature Object,  Prev: PEP 3155 Qualified name for classes and functions,  Up: O que há de novo no Python 3 3

1.11.12 PEP 412: Key-Sharing Dictionary
---------------------------------------

Dictionaries used for the storage of objects’ attributes are now able to
share part of their internal storage between each other (namely, the
part which stores the keys and their respective hashes).  This reduces
the memory consumption of programs creating many instances of
non-builtin types.

Ver também
..........

PEP 412(1) - Key-Sharing Dictionary

     PEP written and implemented by Mark Shannon.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0412/


File: python.info,  Node: PEP 362 Function Signature Object,  Next: PEP 421 Adding sys implementation,  Prev: PEP 412 Key-Sharing Dictionary,  Up: O que há de novo no Python 3 3

1.11.13 PEP 362: Function Signature Object
------------------------------------------

A new function *note inspect.signature(): 738. makes introspection of
python callables easy and straightforward.  A broad range of callables
is supported: python functions, decorated or not, classes, and *note
functools.partial(): 414. objects.  New classes *note inspect.Signature:
1cf, *note inspect.Parameter: 1d0. and *note inspect.BoundArguments:
10a2. hold information about the call signatures, such as, annotations,
default values, parameters kinds, and bound arguments, which
considerably simplifies writing decorators and any code that validates
or amends calling signatures or arguments.

Ver também
..........

PEP 362(1): - Function Signature Object

     PEP written by Brett Cannon, Yury Selivanov, Larry Hastings, Jiwon
     Seo; implemented by Yury Selivanov.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0362/


File: python.info,  Node: PEP 421 Adding sys implementation,  Next: Using importlib as the Implementation of Import,  Prev: PEP 362 Function Signature Object,  Up: O que há de novo no Python 3 3

1.11.14 PEP 421: Adding sys.implementation
------------------------------------------

A new attribute on the *note sys: d9. module exposes details specific to
the implementation of the currently running interpreter.  The initial
set of attributes on *note sys.implementation: 517. are ‘name’,
‘version’, ‘hexversion’, and ‘cache_tag’.

The intention of ‘sys.implementation’ is to consolidate into one
namespace the implementation-specific data used by the standard library.
This allows different Python implementations to share a single standard
library code base much more easily.  In its initial state,
‘sys.implementation’ holds only a small portion of the
implementation-specific data.  Over time that ratio will shift in order
to make the standard library more portable.

One example of improved standard library portability is ‘cache_tag’.  As
of Python 3.3, ‘sys.implementation.cache_tag’ is used by *note
importlib: 77. to support PEP 3147(1) compliance.  Any Python
implementation that uses ‘importlib’ for its built-in import system may
use ‘cache_tag’ to control the caching behavior for modules.

* Menu:

* SimpleNamespace::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3147/


File: python.info,  Node: SimpleNamespace,  Up: PEP 421 Adding sys implementation

1.11.14.1 SimpleNamespace
.........................

The implementation of ‘sys.implementation’ also introduces a new type to
Python: *note types.SimpleNamespace: 1d1.  In contrast to a
mapping-based namespace, like *note dict: 256, ‘SimpleNamespace’ is
attribute-based, like *note object: a96.  However, unlike ‘object’,
‘SimpleNamespace’ instances are writable.  This means that you can add,
remove, and modify the namespace through normal attribute access.

Ver também
..........

PEP 421(1) - Adding sys.implementation

     PEP written and implemented by Eric Snow.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0421/


File: python.info,  Node: Using importlib as the Implementation of Import,  Next: Outras mudanças na linguagem<11>,  Prev: PEP 421 Adding sys implementation,  Up: O que há de novo no Python 3 3

1.11.15 Using importlib as the Implementation of Import
-------------------------------------------------------

bpo-2377(1) - Replace __import__ w/ importlib.__import__ bpo-13959(2) -
Re-implement parts of ‘imp’ in pure Python bpo-14605(3) - Make import
machinery explicit bpo-14646(4) - Require loaders set __loader__ and
__package__

The *note __import__(): 8da. function is now powered by *note
importlib.__import__(): 10a6.  This work leads to the completion of
“phase 2” of PEP 302(5).  There are multiple benefits to this change.
First, it has allowed for more of the machinery powering import to be
exposed instead of being implicit and hidden within the C code.  It also
provides a single implementation for all Python VMs supporting Python
3.3 to use, helping to end any VM-specific deviations in import
semantics.  And finally it eases the maintenance of import, allowing for
future growth to occur.

For the common user, there should be no visible change in semantics.
For those whose code currently manipulates import or calls import
programmatically, the code changes that might possibly be required are
covered in the *note Porting Python code: 10a7. section of this
document.

* Menu:

* New APIs::
* Visible Changes::

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=2377

   (2) https://bugs.python.org/issue?@action=redirect&bpo=13959

   (3) https://bugs.python.org/issue?@action=redirect&bpo=14605

   (4) https://bugs.python.org/issue?@action=redirect&bpo=14646

   (5) https://peps.python.org/pep-0302/


File: python.info,  Node: New APIs,  Next: Visible Changes,  Up: Using importlib as the Implementation of Import

1.11.15.1 New APIs
..................

One of the large benefits of this work is the exposure of what goes into
making the import statement work.  That means the various importers that
were once implicit are now fully exposed as part of the *note importlib:
77. package.

The abstract base classes defined in *note importlib.abc: 78. have been
expanded to properly delineate between *note meta path finders: 10a9.
and *note path entry finders: 10aa. by introducing *note
importlib.abc.MetaPathFinder: 872. and *note
importlib.abc.PathEntryFinder: 873, respectively.  The old ABC of
‘importlib.abc.Finder’ is now only provided for backwards-compatibility
and does not enforce any method requirements.

In terms of finders, *note importlib.machinery.FileFinder: 10ab. exposes
the mechanism used to search for source and bytecode files of a module.
Previously this class was an implicit member of *note sys.path_hooks:
105a.

For loaders, the new abstract base class *note importlib.abc.FileLoader:
10ac. helps write a loader that uses the file system as the storage
mechanism for a module’s code.  The loader for source files (*note
importlib.machinery.SourceFileLoader: 10ad.), sourceless bytecode files
(*note importlib.machinery.SourcelessFileLoader: 10ae.), and extension
modules (*note importlib.machinery.ExtensionFileLoader: cd0.) are now
available for direct use.

*note ImportError: 419. now has ‘name’ and ‘path’ attributes which are
set when there is relevant data to provide.  The message for failed
imports will also provide the full name of the module now instead of
just the tail end of the module’s name.

The *note importlib.invalidate_caches(): c2a. function will now call the
method with the same name on all finders cached in *note
sys.path_importer_cache: 5e4. to help clean up any stored state as
necessary.


File: python.info,  Node: Visible Changes,  Prev: New APIs,  Up: Using importlib as the Implementation of Import

1.11.15.2 Visible Changes
.........................

For potential required changes to code, see the *note Porting Python
code: 10a7. section.

Beyond the expanse of what *note importlib: 77. now exposes, there are
other visible changes to import.  The biggest is that *note
sys.meta_path: d4d. and *note sys.path_hooks: 105a. now store all of the
meta path finders and path entry hooks used by import.  Previously the
finders were implicit and hidden within the C code of import instead of
being directly exposed.  This means that one can now easily remove or
change the order of the various finders to fit one’s needs.

Another change is that all modules have a ‘__loader__’ attribute,
storing the loader used to create the module.  PEP 302(1) has been
updated to make this attribute mandatory for loaders to implement, so in
the future once 3rd-party loaders have been updated people will be able
to rely on the existence of the attribute.  Until such time, though,
import is setting the module post-load.

Loaders are also now expected to set the ‘__package__’ attribute from
PEP 366(2).  Once again, import itself is already setting this on all
loaders from *note importlib: 77. and import itself is setting the
attribute post-load.

‘None’ is now inserted into *note sys.path_importer_cache: 5e4. when no
finder can be found on *note sys.path_hooks: 105a.  Since
‘imp.NullImporter’ is not directly exposed on *note sys.path_hooks:
105a. it could no longer be relied upon to always be available to use as
a value representing no finder found.

All other changes relate to semantic changes which should be taken into
consideration when updating code for Python 3.3, and thus should be read
about in the *note Porting Python code: 10a7. section of this document.

(Implementation by Brett Cannon)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0302/

   (2) https://peps.python.org/pep-0366/


File: python.info,  Node: Outras mudanças na linguagem<11>,  Next: A Finer-Grained Import Lock,  Prev: Using importlib as the Implementation of Import,  Up: O que há de novo no Python 3 3

1.11.16 Outras mudanças na linguagem
------------------------------------

Algumas das mudanças menores feitas no núcleo da linguagem Python são:

   * Added support for Unicode name aliases and named sequences.  Both
     *note unicodedata.lookup(): 10b1. and ‘'\N{...}'’ now resolve name
     aliases, and *note unicodedata.lookup(): 10b1. resolves named
     sequences too.

     (Contributed by Ezio Melotti in bpo-12753(1).)

   * Unicode database updated to UCD version 6.1.0

   * Equality comparisons on *note range(): 94a. objects now return a
     result reflecting the equality of the underlying sequences
     generated by those range objects.  (bpo-13201(2))

   * The ‘count()’, ‘find()’, ‘rfind()’, ‘index()’ and ‘rindex()’
     methods of *note bytes: 1c2. and *note bytearray: 2ea. objects now
     accept an integer between 0 and 255 as their first argument.

     (Contributed by Petri Lehtinen in bpo-12170(3).)

   * The ‘rjust()’, ‘ljust()’, and ‘center()’ methods of *note bytes:
     1c2. and *note bytearray: 2ea. now accept a *note bytearray: 2ea.
     for the ‘fill’ argument.  (Contributed by Petri Lehtinen in
     bpo-12380(4).)

   * New methods have been added to *note list: 611. and *note
     bytearray: 2ea.: ‘copy()’ and ‘clear()’ (bpo-10516(5)).
     Consequently, *note MutableSequence: 1a1. now also defines a
     ‘clear()’ method (bpo-11388(6)).

   * Raw bytes literals can now be written ‘rb"..."’ as well as
     ‘br"..."’.

     (Contributed by Antoine Pitrou in bpo-13748(7).)

   * *note dict.setdefault(): 10b2. now does only one lookup for the
     given key, making it atomic when used with built-in types.

     (Contributed by Filip Gruszczyński in bpo-13521(8).)

   * The error messages produced when a function call does not match the
     function signature have been significantly improved.

     (Contributed by Benjamin Peterson.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=12753

   (2) https://bugs.python.org/issue?@action=redirect&bpo=13201

   (3) https://bugs.python.org/issue?@action=redirect&bpo=12170

   (4) https://bugs.python.org/issue?@action=redirect&bpo=12380

   (5) https://bugs.python.org/issue?@action=redirect&bpo=10516

   (6) https://bugs.python.org/issue?@action=redirect&bpo=11388

   (7) https://bugs.python.org/issue?@action=redirect&bpo=13748

   (8) https://bugs.python.org/issue?@action=redirect&bpo=13521


File: python.info,  Node: A Finer-Grained Import Lock,  Next: Builtin functions and types,  Prev: Outras mudanças na linguagem<11>,  Up: O que há de novo no Python 3 3

1.11.17 A Finer-Grained Import Lock
-----------------------------------

Previous versions of CPython have always relied on a global import lock.
This led to unexpected annoyances, such as deadlocks when importing a
module would trigger code execution in a different thread as a
side-effect.  Clumsy workarounds were sometimes employed, such as the
*note PyImport_ImportModuleNoBlock(): 3bd. C API function.

In Python 3.3, importing a module takes a per-module lock.  This
correctly serializes importation of a given module from multiple threads
(preventing the exposure of incompletely initialized modules), while
eliminating the aforementioned annoyances.

(Contributed by Antoine Pitrou in bpo-9260(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9260


File: python.info,  Node: Builtin functions and types,  Next: Novos módulos<11>,  Prev: A Finer-Grained Import Lock,  Up: O que há de novo no Python 3 3

1.11.18 Builtin functions and types
-----------------------------------

   * *note open(): 51c. gets a new 'opener' parameter: the underlying
     file descriptor for the file object is then obtained by calling
     'opener' with ('file', 'flags').  It can be used to use custom
     flags like *note os.O_CLOEXEC: 10b5. for example.  The ‘'x'’ mode
     was added: open for exclusive creation, failing if the file already
     exists.

   * *note print(): fa9.: added the 'flush' keyword argument.  If the
     'flush' keyword argument is true, the stream is forcibly flushed.

   * *note hash(): 5eb.: hash randomization is enabled by default, see
     *note object.__hash__(): b0e. and *note PYTHONHASHSEED: 10b6.

   * The *note str: 44c. type gets a new *note casefold(): e00. method:
     return a casefolded copy of the string, casefolded strings may be
     used for caseless matching.  For example, ‘'ß'.casefold()’ returns
     ‘'ss'’.

   * The sequence documentation has been substantially rewritten to
     better explain the binary/text sequence distinction and to provide
     specific documentation sections for the individual builtin sequence
     types (bpo-4966(1)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=4966


File: python.info,  Node: Novos módulos<11>,  Next: Módulos melhorados<11>,  Prev: Builtin functions and types,  Up: O que há de novo no Python 3 3

1.11.19 Novos módulos
---------------------

* Menu:

* faulthandler: faulthandler<4>.
* ipaddress: ipaddress<6>.
* lzma: lzma<2>.


File: python.info,  Node: faulthandler<4>,  Next: ipaddress<6>,  Up: Novos módulos<11>

1.11.19.1 faulthandler
......................

This new debug module *note faulthandler: 58. contains functions to dump
Python tracebacks explicitly, on a fault (a crash like a segmentation
fault), after a timeout, or on a user signal.  Call *note
faulthandler.enable(): cbe. to install fault handlers for the *note
SIGSEGV: 10b9, *note SIGFPE: 10ba, *note SIGABRT: 10bb, *note SIGBUS:
10bc, and *note SIGILL: 10bd. signals.  You can also enable them at
startup by setting the *note PYTHONFAULTHANDLER: 10be. environment
variable or by using *note -X: 176. ‘faulthandler’ command line option.

Example of a segmentation fault on Linux:

     $ python -q -X faulthandler
     >>> import ctypes
     >>> ctypes.string_at(0)
     Fatal Python error: Segmentation fault

     Current thread 0x00007fb899f39700:
       File "/home/python/cpython/Lib/ctypes/__init__.py", line 486 in string_at
       File "<stdin>", line 1 in <module>
     Segmentation fault


File: python.info,  Node: ipaddress<6>,  Next: lzma<2>,  Prev: faulthandler<4>,  Up: Novos módulos<11>

1.11.19.2 ipaddress
...................

The new *note ipaddress: 80. module provides tools for creating and
manipulating objects representing IPv4 and IPv6 addresses, networks and
interfaces (i.e.  an IP address associated with a specific IP subnet).

(Contributed by Google and Peter Moody in PEP 3144(1).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3144/


File: python.info,  Node: lzma<2>,  Prev: ipaddress<6>,  Up: Novos módulos<11>

1.11.19.3 lzma
..............

The newly added *note lzma: 8a. module provides data compression and
decompression using the LZMA algorithm, including support for the ‘.xz’
and ‘.lzma’ file formats.

(Contributed by Nadeem Vawda and Per Øyvind Karlsen in bpo-6715(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=6715


File: python.info,  Node: Módulos melhorados<11>,  Next: Otimizações<10>,  Prev: Novos módulos<11>,  Up: O que há de novo no Python 3 3

1.11.20 Módulos melhorados
--------------------------

* Menu:

* abc: abc<2>.
* array: array<5>.
* base64: base64<4>.
* binascii: binascii<3>.
* bz2: bz2<2>.
* codecs: codecs<2>.
* collections: collections<7>.
* contextlib: contextlib<7>.
* crypt: crypt<2>.
* curses: curses<5>.
* datetime: datetime<6>.
* decimal: decimal<3>.
* email: email<5>.
* ftplib: ftplib<3>.
* functools: functools<6>.
* gc: gc<6>.
* hmac: hmac<4>.
* http: http<4>.
* html: html<2>.
* imaplib: imaplib<3>.
* inspect: inspect<9>.
* io: io<6>.
* itertools: itertools<6>.
* logging: logging<7>.
* math: math<9>.
* mmap: mmap<4>.
* multiprocessing: multiprocessing<8>.
* nntplib: nntplib<2>.
* os: os<12>.
* pdb: pdb<7>.
* pickle: pickle<5>.
* pydoc: pydoc<5>.
* re: re<9>.
* sched::
* select: select<2>.
* shlex: shlex<3>.
* shutil: shutil<7>.
* signal: signal<4>.
* smtpd: smtpd<4>.
* smtplib: smtplib<4>.
* socket: socket<10>.
* socketserver: socketserver<3>.
* sqlite3: sqlite3<10>.
* ssl: ssl<11>.
* stat: stat<2>.
* struct: struct<3>.
* subprocess: subprocess<6>.
* sys: sys<13>.
* tarfile: tarfile<9>.
* tempfile: tempfile<4>.
* textwrap: textwrap<2>.
* threading: threading<8>.
* time: time<8>.
* types: types<7>.
* unittest: unittest<10>.
* urllib: urllib<4>.
* webbrowser: webbrowser<3>.
* xml.etree.ElementTree: xml etree ElementTree<2>.
* zlib: zlib<2>.


File: python.info,  Node: abc<2>,  Next: array<5>,  Up: Módulos melhorados<11>

1.11.20.1 abc
.............

Improved support for abstract base classes containing descriptors
composed with abstract methods.  The recommended approach to declaring
abstract descriptors is now to provide ‘__isabstractmethod__’ as a
dynamically updated property.  The built-in descriptors have been
updated accordingly.

   * *note abc.abstractproperty: 10c3. has been deprecated, use *note
     property: 194. with *note abc.abstractmethod(): 10c4. instead.

   * *note abc.abstractclassmethod: 10c5. has been deprecated, use *note
     classmethod: 166. with *note abc.abstractmethod(): 10c4. instead.

   * *note abc.abstractstaticmethod: 10c6. has been deprecated, use
     *note staticmethod: 416. with *note abc.abstractmethod(): 10c4.
     instead.

(Contributed by Darren Dale in bpo-11610(1).)

*note abc.ABCMeta.register(): 10c7. now returns the registered subclass,
which means it can now be used as a class decorator (bpo-10868(2)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=11610

   (2) https://bugs.python.org/issue?@action=redirect&bpo=10868


File: python.info,  Node: array<5>,  Next: base64<4>,  Prev: abc<2>,  Up: Módulos melhorados<11>

1.11.20.2 array
...............

The *note array: 7. module supports the long long type using ‘q’ and ‘Q’
type codes.

(Contributed by Oren Tirosh and Hirokazu Yamamoto in bpo-1172711(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1172711


File: python.info,  Node: base64<4>,  Next: binascii<3>,  Prev: array<5>,  Up: Módulos melhorados<11>

1.11.20.3 base64
................

ASCII-only Unicode strings are now accepted by the decoding functions of
the *note base64: e. modern interface.  For example,
‘base64.b64decode('YWJj')’ returns ‘b'abc'’.  (Contributed by Catalin
Iacob in bpo-13641(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13641


File: python.info,  Node: binascii<3>,  Next: bz2<2>,  Prev: base64<4>,  Up: Módulos melhorados<11>

1.11.20.4 binascii
..................

In addition to the binary objects they normally accept, the ‘a2b_’
functions now all also accept ASCII-only strings as input.  (Contributed
by Antoine Pitrou in bpo-13637(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13637


File: python.info,  Node: bz2<2>,  Next: codecs<2>,  Prev: binascii<3>,  Up: Módulos melhorados<11>

1.11.20.5 bz2
.............

The *note bz2: 13. module has been rewritten from scratch.  In the
process, several new features have been added:

   * New *note bz2.open(): 10cc. function: open a bzip2-compressed file
     in binary or text mode.

   * *note bz2.BZ2File: 86a. can now read from and write to arbitrary
     file-like objects, by means of its constructor’s 'fileobj'
     argument.

     (Contributed by Nadeem Vawda in bpo-5863(1).)

   * *note bz2.BZ2File: 86a. and *note bz2.decompress(): 10cd. can now
     decompress multi-stream inputs (such as those produced by the
     ‘pbzip2’ tool).  *note bz2.BZ2File: 86a. can now also be used to
     create this type of file, using the ‘'a'’ (append) mode.

     (Contributed by Nir Aides in bpo-1625(2).)

   * *note bz2.BZ2File: 86a. now implements all of the *note
     io.BufferedIOBase: 694. API, except for the ‘detach()’ and
     ‘truncate()’ methods.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5863

   (2) https://bugs.python.org/issue?@action=redirect&bpo=1625


File: python.info,  Node: codecs<2>,  Next: collections<7>,  Prev: bz2<2>,  Up: Módulos melhorados<11>

1.11.20.6 codecs
................

The *note mbcs: 53. codec has been rewritten to handle correctly
‘replace’ and ‘ignore’ error handlers on all Windows versions.  The
*note mbcs: 53. codec now supports all error handlers, instead of only
‘replace’ to encode and ‘ignore’ to decode.

A new Windows-only codec has been added: ‘cp65001’ (bpo-13216(1)).  It
is the Windows code page 65001 (Windows UTF-8, ‘CP_UTF8’).  For example,
it is used by ‘sys.stdout’ if the console output code page is set to
cp65001 (e.g., using ‘chcp 65001’ command).

Multibyte CJK decoders now resynchronize faster.  They only ignore the
first byte of an invalid byte sequence.  For example,
‘b'\xff\n'.decode('gb2312', 'replace')’ now returns a ‘\n’ after the
replacement character.

(bpo-12016(2))

Incremental CJK codec encoders are no longer reset at each call to their
encode() methods.  For example:

     >>> import codecs
     >>> encoder = codecs.getincrementalencoder('hz')('strict')
     >>> b''.join(encoder.encode(x) for x in '\u52ff\u65bd\u65bc\u4eba\u3002 Bye.')
     b'~{NpJ)l6HK!#~} Bye.'

This example gives ‘b'~{Np~}~{J)~}~{l6~}~{HK~}~{!#~} Bye.'’ with older
Python versions.

(bpo-12100(3))

The ‘unicode_internal’ codec has been deprecated.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13216

   (2) https://bugs.python.org/issue?@action=redirect&bpo=12016

   (3) https://bugs.python.org/issue?@action=redirect&bpo=12100


File: python.info,  Node: collections<7>,  Next: contextlib<7>,  Prev: codecs<2>,  Up: Módulos melhorados<11>

1.11.20.7 collections
.....................

Addition of a new *note ChainMap: c36. class to allow treating a number
of mappings as a single unit.  (Written by Raymond Hettinger for
bpo-11089(1), made public in bpo-11297(2).)

The abstract base classes have been moved in a new *note
collections.abc: 1e. module, to better differentiate between the
abstract and the concrete collections classes.  Aliases for ABCs are
still present in the *note collections: 1d. module to preserve existing
imports.  (bpo-11085(3))

The *note Counter: 10d0. class now supports the unary ‘+’ and ‘-’
operators, as well as the in-place operators ‘+=’, ‘-=’, ‘|=’, and ‘&=’.
(Contributed by Raymond Hettinger in bpo-13121(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=11089

   (2) https://bugs.python.org/issue?@action=redirect&bpo=11297

   (3) https://bugs.python.org/issue?@action=redirect&bpo=11085

   (4) https://bugs.python.org/issue?@action=redirect&bpo=13121


File: python.info,  Node: contextlib<7>,  Next: crypt<2>,  Prev: collections<7>,  Up: Módulos melhorados<11>

1.11.20.8 contextlib
....................

*note ExitStack: b3b. now provides a solid foundation for programmatic
manipulation of context managers and similar cleanup functionality.
Unlike the previous ‘contextlib.nested’ API (which was deprecated and
removed), the new API is designed to work correctly regardless of
whether context managers acquire their resources in their ‘__init__’
method (for example, file objects) or in their ‘__enter__’ method (for
example, synchronisation objects from the *note threading: ed. module).

(bpo-13585(1))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13585


File: python.info,  Node: crypt<2>,  Next: curses<5>,  Prev: contextlib<7>,  Up: Módulos melhorados<11>

1.11.20.9 crypt
...............

Addition of salt and modular crypt format (hashing method) and the
‘mksalt()’ function to the ‘crypt’ module.

(bpo-10924(1))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10924


File: python.info,  Node: curses<5>,  Next: datetime<6>,  Prev: crypt<2>,  Up: Módulos melhorados<11>

1.11.20.10 curses
.................

   * If the *note curses: 2b. module is linked to the ncursesw library,
     use Unicode functions when Unicode strings or characters are passed
     (e.g.  ‘waddwstr()’), and bytes functions otherwise (e.g.
     ‘waddstr()’).

   * Use the locale encoding instead of ‘utf-8’ to encode Unicode
     strings.

   * *note curses.window: 10d4. has a new *note curses.window.encoding:
     10d5. attribute.

   * The *note curses.window: 10d4. class has a new *note get_wch():
     10d6. method to get a wide character

   * The *note curses: 2b. module has a new *note unget_wch(): 10d7.
     function to push a wide character so the next *note get_wch():
     10d6. will return it

(Contributed by Iñigo Serna in bpo-6755(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=6755


File: python.info,  Node: datetime<6>,  Next: decimal<3>,  Prev: curses<5>,  Up: Módulos melhorados<11>

1.11.20.11 datetime
...................

   * Equality comparisons between naive and aware *note datetime: 1cc.
     instances now return *note False: b49. instead of raising *note
     TypeError: 2c3. (bpo-15006(1)).

   * New *note datetime.datetime.timestamp(): 10d9. method: Return POSIX
     timestamp corresponding to the *note datetime: 1cc. instance.

   * The *note datetime.datetime.strftime(): caf. method supports
     formatting years older than 1000.

   * The *note datetime.datetime.astimezone(): 9d8. method can now be
     called without arguments to convert datetime instance to the system
     timezone.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15006


File: python.info,  Node: decimal<3>,  Next: email<5>,  Prev: datetime<6>,  Up: Módulos melhorados<11>

1.11.20.12 decimal
..................

bpo-7652(1) - integrate fast native decimal arithmetic.

     C-module and libmpdec written by Stefan Krah.

The new C version of the decimal module integrates the high speed
libmpdec library for arbitrary precision correctly rounded decimal
floating-point arithmetic.  libmpdec conforms to IBM’s General Decimal
Arithmetic Specification.

Performance gains range from 10x for database applications to 100x for
numerically intensive applications.  These numbers are expected gains
for standard precisions used in decimal floating-point arithmetic.
Since the precision is user configurable, the exact figures may vary.
For example, in integer bignum arithmetic the differences can be
significantly higher.

The following table is meant as an illustration.  Benchmarks are
available at ‘https://www.bytereef.org/mpdecimal/quickstart.html’.

                   decimal.py        _decimal           speedup
                                                        
     ---------------------------------------------------------------------
                                                        
     pi            42.02s            0.345s             120x
                                                        
                                                        
     telco         172.19s           5.68s              30x
                                                        
                                                        
     psycopg       3.57s             0.29s              12x
                                                        

* Menu:

* Recursos: Recursos<2>.
* Mudanças na API: Mudanças na API<2>.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=7652


File: python.info,  Node: Recursos<2>,  Next: Mudanças na API<2>,  Up: decimal<3>

1.11.20.13 Recursos
...................

   * The *note FloatOperation: 10dc. signal optionally enables stricter
     semantics for mixing floats and Decimals.

   * If Python is compiled without threads, the C version automatically
     disables the expensive thread local context machinery.  In this
     case, the variable *note HAVE_THREADS: 10dd. is set to ‘False’.


File: python.info,  Node: Mudanças na API<2>,  Prev: Recursos<2>,  Up: decimal<3>

1.11.20.14 Mudanças na API
..........................

   * The C module has the following context limits, depending on the
     machine architecture:

                                           32 bits              64 bits
                                                                
          ------------------------------------------------------------------------------------
                                                                
          *note MAX_PREC: 10df.            ‘425000000’          ‘999999999999999999’
                                                                
                                                                
          *note MAX_EMAX: 10e0.            ‘425000000’          ‘999999999999999999’
                                                                
                                                                
          *note MIN_EMIN: 10e1.            ‘-425000000’         ‘-999999999999999999’
                                                                

   * In the context templates (*note DefaultContext: 10e2, *note
     BasicContext: 10e3. and *note ExtendedContext: 10e4.) the magnitude
     of *note Emax: 10e5. and *note Emin: 10e6. has changed to ‘999999’.

   * The *note Decimal: 29d. constructor in decimal.py does not observe
     the context limits and converts values with arbitrary exponents or
     precision exactly.  Since the C version has internal limits, the
     following scheme is used: If possible, values are converted
     exactly, otherwise *note InvalidOperation: 10e7. is raised and the
     result is NaN. In the latter case it is always possible to use
     *note create_decimal(): 10e8. in order to obtain a rounded or
     inexact value.

   * The power function in decimal.py is always correctly rounded.  In
     the C version, it is defined in terms of the correctly rounded
     *note exp(): 10e9. and *note ln(): 10ea. functions, but the final
     result is only “almost always correctly rounded”.

   * In the C version, the context dictionary containing the signals is
     a *note MutableMapping: 10eb.  For speed reasons, *note flags:
     10ec. and *note traps: 10ed. always refer to the same *note
     MutableMapping: 10eb. that the context was initialized with.  If a
     new signal dictionary is assigned, *note flags: 10ec. and *note
     traps: 10ed. are updated with the new values, but they do not
     reference the RHS dictionary.

   * Pickling a *note Context: 10ee. produces a different output in
     order to have a common interchange format for the Python and C
     versions.

   * The order of arguments in the *note Context: 10ee. constructor has
     been changed to match the order displayed by *note repr(): 800.

   * The ‘watchexp’ parameter in the *note quantize(): 10ef. method is
     deprecated.


File: python.info,  Node: email<5>,  Next: ftplib<3>,  Prev: decimal<3>,  Up: Módulos melhorados<11>

1.11.20.15 email
................

* Menu:

* Policy Framework::
* Provisional Policy with New Header API::
* Other API Changes::


File: python.info,  Node: Policy Framework,  Next: Provisional Policy with New Header API,  Up: email<5>

1.11.20.16 Policy Framework
...........................

The email package now has a *note policy: 4f. framework.  A *note
Policy: 10f2. is an object with several methods and properties that
control how the email package behaves.  The primary policy for Python
3.3 is the *note Compat32: 10f3. policy, which provides backward
compatibility with the email package in Python 3.2.  A ‘policy’ can be
specified when an email message is parsed by a *note parser: 4e, or when
a *note Message: 27c. object is created, or when an email is serialized
using a *note generator: 40.  Unless overridden, a policy passed to a
‘parser’ is inherited by all the ‘Message’ object and sub-objects
created by the ‘parser’.  By default a ‘generator’ will use the policy
of the ‘Message’ object it is serializing.  The default policy is *note
compat32: cb8.

The minimum set of controls implemented by all ‘policy’ objects are:

max_line_length     The maximum length, excluding the linesep character(s),
                    individual lines may have when a ‘Message’ is serialized.
                    Defaults to 78.
                    
                    
linesep             The character used to separate individual lines when a
                    ‘Message’ is serialized.  Defaults to ‘\n’.
                    
                    
cte_type            ‘7bit’ or ‘8bit’.  ‘8bit’ applies only to a ‘Bytes’
                    ‘generator’, and means that non-ASCII may be used where
                    allowed by the protocol (or where it exists in the
                    original input).
                    
                    
raise_on_defect     Causes a ‘parser’ to raise error when defects are
                    encountered instead of adding them to the ‘Message’
                    object’s ‘defects’ list.
                    

A new policy instance, with new settings, is created using the *note
clone(): 10f4. method of policy objects.  ‘clone’ takes any of the above
controls as keyword arguments.  Any control not specified in the call
retains its default value.  Thus you can create a policy that uses
‘\r\n’ linesep characters like this:

     mypolicy = compat32.clone(linesep='\r\n')

Policies can be used to make the generation of messages in the format
needed by your application simpler.  Instead of having to remember to
specify ‘linesep='\r\n'’ in all the places you call a ‘generator’, you
can specify it once, when you set the policy used by the ‘parser’ or the
‘Message’, whichever your program uses to create ‘Message’ objects.  On
the other hand, if you need to generate messages in multiple forms, you
can still specify the parameters in the appropriate ‘generator’ call.
Or you can have custom policy instances for your different cases, and
pass those in when you create the ‘generator’.


File: python.info,  Node: Provisional Policy with New Header API,  Next: Other API Changes,  Prev: Policy Framework,  Up: email<5>

1.11.20.17 Provisional Policy with New Header API
.................................................

While the policy framework is worthwhile all by itself, the main
motivation for introducing it is to allow the creation of new policies
that implement new features for the email package in a way that
maintains backward compatibility for those who do not use the new
policies.  Because the new policies introduce a new API, we are
releasing them in Python 3.3 as a *note provisional policy: 107a.
Backwards incompatible changes (up to and including removal of the code)
may occur if deemed necessary by the core developers.

The new policies are instances of *note EmailPolicy: 10f6, and add the
following additional controls:

refold_source       Controls whether or not headers parsed by a
                    *note parser: 4e. are refolded by the
                    *note generator: 40.  It can be ‘none’, ‘long’, or ‘all’.
                    The default is ‘long’, which means that source headers
                    with a line longer than ‘max_line_length’ get refolded.
                    ‘none’ means no line get refolded, and ‘all’ means that
                    all lines get refolded.
                    
                    
header_factory      A callable that take a ‘name’ and ‘value’ and produces a
                    custom header object.
                    

The ‘header_factory’ is the key to the new features provided by the new
policies.  When one of the new policies is used, any header retrieved
from a ‘Message’ object is an object produced by the ‘header_factory’,
and any time you set a header on a ‘Message’ it becomes an object
produced by ‘header_factory’.  All such header objects have a ‘name’
attribute equal to the header name.  Address and Date headers have
additional attributes that give you access to the parsed data of the
header.  This means you can now do things like this:

     >>> m = Message(policy=SMTP)
     >>> m['To'] = 'Éric <foo@example.com>'
     >>> m['to']
     'Éric <foo@example.com>'
     >>> m['to'].addresses
     (Address(display_name='Éric', username='foo', domain='example.com'),)
     >>> m['to'].addresses[0].username
     'foo'
     >>> m['to'].addresses[0].display_name
     'Éric'
     >>> m['Date'] = email.utils.localtime()
     >>> m['Date'].datetime
     datetime.datetime(2012, 5, 25, 21, 39, 24, 465484, tzinfo=datetime.timezone(datetime.timedelta(-1, 72000), 'EDT'))
     >>> m['Date']
     'Fri, 25 May 2012 21:44:27 -0400'
     >>> print(m)
     To: =?utf-8?q?=C3=89ric?= <foo@example.com>
     Date: Fri, 25 May 2012 21:44:27 -0400

You will note that the unicode display name is automatically encoded as
‘utf-8’ when the message is serialized, but that when the header is
accessed directly, you get the unicode version.  This eliminates any
need to deal with the *note email.header: 41. *note decode_header():
10f7. or *note make_header(): 10f8. functions.

You can also create addresses from parts:

     >>> m['cc'] = [Group('pals', [Address('Bob', 'bob', 'example.com'),
     ...                           Address('Sally', 'sally', 'example.com')]),
     ...            Address('Bonzo', addr_spec='bonz@laugh.com')]
     >>> print(m)
     To: =?utf-8?q?=C3=89ric?= <foo@example.com>
     Date: Fri, 25 May 2012 21:44:27 -0400
     cc: pals: Bob <bob@example.com>, Sally <sally@example.com>;, Bonzo <bonz@laugh.com>

Decoding to unicode is done automatically:

     >>> m2 = message_from_string(str(m))
     >>> m2['to']
     'Éric <foo@example.com>'

When you parse a message, you can use the ‘addresses’ and ‘groups’
attributes of the header objects to access the groups and individual
addresses:

     >>> m2['cc'].addresses
     (Address(display_name='Bob', username='bob', domain='example.com'), Address(display_name='Sally', username='sally', domain='example.com'), Address(display_name='Bonzo', username='bonz', domain='laugh.com'))
     >>> m2['cc'].groups
     (Group(display_name='pals', addresses=(Address(display_name='Bob', username='bob', domain='example.com'), Address(display_name='Sally', username='sally', domain='example.com')), Group(display_name=None, addresses=(Address(display_name='Bonzo', username='bonz', domain='laugh.com'),))

In summary, if you use one of the new policies, header manipulation
works the way it ought to: your application works with unicode strings,
and the email package transparently encodes and decodes the unicode to
and from the RFC standard Content Transfer Encodings.


File: python.info,  Node: Other API Changes,  Prev: Provisional Policy with New Header API,  Up: email<5>

1.11.20.18 Other API Changes
............................

New *note BytesHeaderParser: 10fa, added to the *note parser: 4e. module
to complement *note HeaderParser: 10fb. and complete the Bytes API.

New utility functions:

   * *note format_datetime(): 10fc.: given a *note datetime: 1cc,
     produce a string formatted for use in an email header.

   * *note parsedate_to_datetime(): 10fd.: given a date string from an
     email header, convert it into an aware *note datetime: 1cc, or a
     naive *note datetime: 1cc. if the offset is ‘-0000’.

   * *note localtime(): 2c4.: With no argument, returns the current
     local time as an aware *note datetime: 1cc. using the local *note
     timezone: 10fe.  Given an aware *note datetime: 1cc, converts it
     into an aware *note datetime: 1cc. using the local *note timezone:
     10fe.


File: python.info,  Node: ftplib<3>,  Next: functools<6>,  Prev: email<5>,  Up: Módulos melhorados<11>

1.11.20.19 ftplib
.................

   * *note ftplib.FTP: 900. now accepts a ‘source_address’ keyword
     argument to specify the ‘(host, port)’ to use as the source address
     in the bind call when creating the outgoing socket.  (Contributed
     by Giampaolo Rodolà in bpo-8594(1).)

   * The *note FTP_TLS: 901. class now provides a new *note ccc(): 1100.
     function to revert control channel back to plaintext.  This can be
     useful to take advantage of firewalls that know how to handle NAT
     with non-secure FTP without opening fixed ports.  (Contributed by
     Giampaolo Rodolà in bpo-12139(2).)

   * Added *note ftplib.FTP.mlsd(): 1101. method which provides a
     parsable directory listing format and deprecates *note
     ftplib.FTP.nlst(): 1102. and *note ftplib.FTP.dir(): 1103.
     (Contributed by Giampaolo Rodolà in bpo-11072(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=8594

   (2) https://bugs.python.org/issue?@action=redirect&bpo=12139

   (3) https://bugs.python.org/issue?@action=redirect&bpo=11072


File: python.info,  Node: functools<6>,  Next: gc<6>,  Prev: ftplib<3>,  Up: Módulos melhorados<11>

1.11.20.20 functools
....................

The *note functools.lru_cache(): 9f7. decorator now accepts a ‘typed’
keyword argument (that defaults to ‘False’ to ensure that it caches
values of different types that compare equal in separate cache slots.
(Contributed by Raymond Hettinger in bpo-13227(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13227


File: python.info,  Node: gc<6>,  Next: hmac<4>,  Prev: functools<6>,  Up: Módulos melhorados<11>

1.11.20.21 gc
.............

It is now possible to register callbacks invoked by the garbage
collector before and after collection using the new *note callbacks:
1106. list.


File: python.info,  Node: hmac<4>,  Next: http<4>,  Prev: gc<6>,  Up: Módulos melhorados<11>

1.11.20.22 hmac
...............

A new *note compare_digest(): 1108. function has been added to prevent
side channel attacks on digests through timing analysis.  (Contributed
by Nick Coghlan and Christian Heimes in bpo-15061(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15061


File: python.info,  Node: http<4>,  Next: html<2>,  Prev: hmac<4>,  Up: Módulos melhorados<11>

1.11.20.23 http
...............

*note http.server.BaseHTTPRequestHandler: 110a. now buffers the headers
and writes them all at once when *note end_headers(): 110b. is called.
A new method *note flush_headers(): 110c. can be used to directly manage
when the accumulated headers are sent.  (Contributed by Andrew Schaaf in
bpo-3709(1).)

*note http.server: 72. now produces valid ‘HTML 4.01 strict’ output.
(Contributed by Ezio Melotti in bpo-13295(2).)

*note http.client.HTTPResponse: 110d. now has a *note readinto(): 110e.
method, which means it can be used as an *note io.RawIOBase: 110f.
class.  (Contributed by John Kuhn in bpo-13464(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=3709

   (2) https://bugs.python.org/issue?@action=redirect&bpo=13295

   (3) https://bugs.python.org/issue?@action=redirect&bpo=13464


File: python.info,  Node: html<2>,  Next: imaplib<3>,  Prev: http<4>,  Up: Módulos melhorados<11>

1.11.20.24 html
...............

*note html.parser.HTMLParser: 87b. is now able to parse broken markup
without raising errors, therefore the 'strict' argument of the
constructor and the ‘HTMLParseError’ exception are now deprecated.  The
ability to parse broken markup is the result of a number of bug fixes
that are also available on the latest bug fix releases of Python
2.7/3.2.  (Contributed by Ezio Melotti in bpo-15114(1), and
bpo-14538(2), bpo-13993(3), bpo-13960(4), bpo-13358(5), bpo-1745761(6),
bpo-755670(7), bpo-13357(8), bpo-12629(9), bpo-1200313(10),
bpo-670664(11), bpo-13273(12), bpo-12888(13), bpo-7311(14).)

A new *note html5: 1111. dictionary that maps HTML5 named character
references to the equivalent Unicode character(s) (e.g.  ‘html5['gt;']
== '>'’) has been added to the *note html.entities: 6c. module.  The
dictionary is now also used by *note HTMLParser: 87b.  (Contributed by
Ezio Melotti in bpo-11113(15) and bpo-15156(16).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15114

   (2) https://bugs.python.org/issue?@action=redirect&bpo=14538

   (3) https://bugs.python.org/issue?@action=redirect&bpo=13993

   (4) https://bugs.python.org/issue?@action=redirect&bpo=13960

   (5) https://bugs.python.org/issue?@action=redirect&bpo=13358

   (6) https://bugs.python.org/issue?@action=redirect&bpo=1745761

   (7) https://bugs.python.org/issue?@action=redirect&bpo=755670

   (8) https://bugs.python.org/issue?@action=redirect&bpo=13357

   (9) https://bugs.python.org/issue?@action=redirect&bpo=12629

   (10) https://bugs.python.org/issue?@action=redirect&bpo=1200313

   (11) https://bugs.python.org/issue?@action=redirect&bpo=670664

   (12) https://bugs.python.org/issue?@action=redirect&bpo=13273

   (13) https://bugs.python.org/issue?@action=redirect&bpo=12888

   (14) https://bugs.python.org/issue?@action=redirect&bpo=7311

   (15) https://bugs.python.org/issue?@action=redirect&bpo=11113

   (16) https://bugs.python.org/issue?@action=redirect&bpo=15156


File: python.info,  Node: imaplib<3>,  Next: inspect<9>,  Prev: html<2>,  Up: Módulos melhorados<11>

1.11.20.25 imaplib
..................

The *note IMAP4_SSL: 90a. constructor now accepts an SSLContext
parameter to control parameters of the secure channel.

(Contributed by Sijin Joseph in bpo-8808(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=8808


File: python.info,  Node: inspect<9>,  Next: io<6>,  Prev: imaplib<3>,  Up: Módulos melhorados<11>

1.11.20.26 inspect
..................

A new *note getclosurevars(): 1114. function has been added.  This
function reports the current binding of all names referenced from the
function body and where those names were resolved, making it easier to
verify correct internal state when testing code that relies on stateful
closures.

(Contributed by Meador Inge and Nick Coghlan in bpo-13062(1).)

A new *note getgeneratorlocals(): 1115. function has been added.  This
function reports the current binding of local variables in the
generator’s stack frame, making it easier to verify correct internal
state when testing generators.

(Contributed by Meador Inge in bpo-15153(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13062

   (2) https://bugs.python.org/issue?@action=redirect&bpo=15153


File: python.info,  Node: io<6>,  Next: itertools<6>,  Prev: inspect<9>,  Up: Módulos melhorados<11>

1.11.20.27 io
.............

The *note open(): 51d. function has a new ‘'x'’ mode that can be used to
exclusively create a new file, and raise a *note FileExistsError: 1056.
if the file already exists.  It is based on the C11 ‘x’ mode to fopen().

(Contributed by David Townshend in bpo-12760(1).)

The constructor of the *note TextIOWrapper: 7bc. class has a new
'write_through' optional argument.  If 'write_through' is ‘True’, calls
to ‘write()’ are guaranteed not to be buffered: any data written on the
*note TextIOWrapper: 7bc. object is immediately handled to its
underlying binary buffer.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=12760


File: python.info,  Node: itertools<6>,  Next: logging<7>,  Prev: io<6>,  Up: Módulos melhorados<11>

1.11.20.28 itertools
....................

*note accumulate(): a05. now takes an optional ‘func’ argument for
providing a user-supplied binary function.


File: python.info,  Node: logging<7>,  Next: math<9>,  Prev: itertools<6>,  Up: Módulos melhorados<11>

1.11.20.29 logging
..................

The *note basicConfig(): a08. function now supports an optional
‘handlers’ argument taking an iterable of handlers to be added to the
root logger.

A class level attribute ‘append_nul’ has been added to *note
SysLogHandler: 65c. to allow control of the appending of the ‘NUL’
(‘\000’) byte to syslog records, since for some daemons it is required
while for others it is passed through to the log.


File: python.info,  Node: math<9>,  Next: mmap<4>,  Prev: logging<7>,  Up: Módulos melhorados<11>

1.11.20.30 math
...............

The *note math: 8e. module has a new function, *note log2(): 111a, which
returns the base-2 logarithm of 'x'.

(Written by Mark Dickinson in bpo-11888(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=11888


File: python.info,  Node: mmap<4>,  Next: multiprocessing<8>,  Prev: math<9>,  Up: Módulos melhorados<11>

1.11.20.31 mmap
...............

The *note read(): 111c. method is now more compatible with other
file-like objects: if the argument is omitted or specified as ‘None’, it
returns the bytes from the current file position to the end of the
mapping.  (Contributed by Petri Lehtinen in bpo-12021(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=12021


File: python.info,  Node: multiprocessing<8>,  Next: nntplib<2>,  Prev: mmap<4>,  Up: Módulos melhorados<11>

1.11.20.32 multiprocessing
..........................

The new *note multiprocessing.connection.wait(): 111e. function allows
polling multiple objects (such as connections, sockets and pipes) with a
timeout.  (Contributed by Richard Oudkerk in bpo-12328(1).)

*note multiprocessing.connection.Connection: 111f. objects can now be
transferred over multiprocessing connections.  (Contributed by Richard
Oudkerk in bpo-4892(2).)

*note multiprocessing.Process: b6f. now accepts a ‘daemon’ keyword
argument to override the default behavior of inheriting the ‘daemon’
flag from the parent process (bpo-6064(3)).

New attribute *note multiprocessing.Process.sentinel: 1120. allows a
program to wait on multiple *note Process: b6f. objects at one time
using the appropriate OS primitives (for example, *note select: c1. on
posix systems).

New methods *note multiprocessing.pool.Pool.starmap(): 1121. and *note
starmap_async(): 1122. provide *note itertools.starmap(): 1123.
equivalents to the existing *note multiprocessing.pool.Pool.map(): 1124.
and *note map_async(): 1125. functions.  (Contributed by Hynek Schlawack
in bpo-12708(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=12328

   (2) https://bugs.python.org/issue?@action=redirect&bpo=4892

   (3) https://bugs.python.org/issue?@action=redirect&bpo=6064

   (4) https://bugs.python.org/issue?@action=redirect&bpo=12708


File: python.info,  Node: nntplib<2>,  Next: os<12>,  Prev: multiprocessing<8>,  Up: Módulos melhorados<11>

1.11.20.33 nntplib
..................

The ‘nntplib.NNTP’ class now supports the context management protocol to
unconditionally consume *note socket.error: 108e. exceptions and to
close the NNTP connection when done:

     >>> from nntplib import NNTP
     >>> with NNTP('news.gmane.org') as n:
     ...     n.group('gmane.comp.python.committers')
     ...
     ('211 1755 1 1755 gmane.comp.python.committers', 1755, 1, 1755, 'gmane.comp.python.committers')
     >>>

(Contributed by Giampaolo Rodolà in bpo-9795(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9795


File: python.info,  Node: os<12>,  Next: pdb<7>,  Prev: nntplib<2>,  Up: Módulos melhorados<11>

1.11.20.34 os
.............

   * The *note os: a1. module has a new *note pipe2(): 1128. function
     that makes it possible to create a pipe with *note O_CLOEXEC: 10b5.
     or *note O_NONBLOCK: e68. flags set atomically.  This is especially
     useful to avoid race conditions in multi-threaded programs.

   * The *note os: a1. module has a new *note sendfile(): b21. function
     which provides an efficient “zero-copy” way for copying data from
     one file (or socket) descriptor to another.  The phrase “zero-copy”
     refers to the fact that all of the copying of data between the two
     descriptors is done entirely by the kernel, with no copying of data
     into userspace buffers.  *note sendfile(): b21. can be used to
     efficiently copy data from a file on disk to a network socket, e.g.
     for downloading a file.

     (Patch submitted by Ross Lagerwall and Giampaolo Rodolà in
     bpo-10882(1).)

   * To avoid race conditions like symlink attacks and issues with
     temporary files and directories, it is more reliable (and also
     faster) to manipulate file descriptors instead of file names.
     Python 3.3 enhances existing functions and introduces new functions
     to work on file descriptors (bpo-4761(2), bpo-10755(3) and
     bpo-14626(4)).

        - The *note os: a1. module has a new *note fwalk(): b71.
          function similar to *note walk(): 4a9. except that it also
          yields file descriptors referring to the directories visited.
          This is especially useful to avoid symlink races.

        - The following functions get new optional 'dir_fd' (*note paths
          relative to directory descriptors: 1129.) and/or
          'follow_symlinks' (*note not following symlinks: 112a.): *note
          access(): 112b, *note chflags(): 112c, *note chmod(): 21b,
          *note chown(): 112d, *note link(): 112e, *note lstat(): 4a1,
          *note mkdir(): 21d, *note mkfifo(): db8, *note mknod(): db9,
          *note open(): dba, *note readlink(): 926, *note remove():
          112f, *note rename(): 1130, *note replace(): 1131, *note
          rmdir(): 1132, *note stat(): 4a0, *note symlink(): 1133, *note
          unlink(): 1134, *note utime(): 1135.  Platform support for
          using these parameters can be checked via the sets *note
          os.supports_dir_fd: 1136. and *note
          os.supports_follow_symlinks: 1137.

        - The following functions now support a file descriptor for
          their path argument: *note chdir(): 60d, *note chmod(): 21b,
          *note chown(): 112d, *note execve(): 1138, *note listdir():
          1139, *note pathconf(): 113a, *note exists(): a18, *note
          stat(): 4a0, *note statvfs(): 113b, *note utime(): 1135.
          Platform support for this can be checked via the *note
          os.supports_fd: 113c. set.

   * *note access(): 112b. accepts an ‘effective_ids’ keyword argument
     to turn on using the effective uid/gid rather than the real uid/gid
     in the access check.  Platform support for this can be checked via
     the *note supports_effective_ids: 113d. set.

   * The *note os: a1. module has two new functions: *note
     getpriority(): 113e. and *note setpriority(): 113f.  They can be
     used to get or set process niceness/priority in a fashion similar
     to *note os.nice(): 1140. but extended to all processes instead of
     just the current one.

     (Patch submitted by Giampaolo Rodolà in bpo-10784(5).)

   * The new *note os.replace(): 1131. function allows cross-platform
     renaming of a file with overwriting the destination.  With *note
     os.rename(): 1130, an existing destination file is overwritten
     under POSIX, but raises an error under Windows.  (Contributed by
     Antoine Pitrou in bpo-8828(6).)

   * The stat family of functions (*note stat(): 4a0, *note fstat():
     db4, and *note lstat(): 4a1.) now support reading a file’s
     timestamps with nanosecond precision.  Symmetrically, *note
     utime(): 1135. can now write file timestamps with nanosecond
     precision.  (Contributed by Larry Hastings in bpo-14127(7).)

   * The new *note os.get_terminal_size(): 1141. function queries the
     size of the terminal attached to a file descriptor.  See also *note
     shutil.get_terminal_size(): 1142.  (Contributed by Zbigniew
     Jędrzejewski-Szmek in bpo-13609(8).)

   * New functions to support Linux extended attributes (bpo-12720(9)):
     *note getxattr(): 1143, *note listxattr(): 1144, *note
     removexattr(): 1145, *note setxattr(): 1146.

   * New interface to the scheduler.  These functions control how a
     process is allocated CPU time by the operating system.  New
     functions: *note sched_get_priority_max(): 1147, *note
     sched_get_priority_min(): 1148, *note sched_getaffinity(): 1149,
     *note sched_getparam(): 114a, *note sched_getscheduler(): 114b,
     *note sched_rr_get_interval(): 114c, *note sched_setaffinity():
     114d, *note sched_setparam(): 114e, *note sched_setscheduler():
     114f, *note sched_yield(): 1150,

   * New functions to control the file system:

        * *note posix_fadvise(): dbb.: Announces an intention to access
          data in a specific pattern thus allowing the kernel to make
          optimizations.

        * *note posix_fallocate(): dbc.: Ensures that enough disk space
          is allocated for a file.

        * *note sync(): 1151.: Force write of everything to disk.

   * Additional new posix functions:

        * *note lockf(): 1152.: Apply, test or remove a POSIX lock on an
          open file descriptor.

        * *note pread(): b75.: Read from a file descriptor at an offset,
          the file offset remains unchanged.

        * *note pwrite(): b78.: Write to a file descriptor from an
          offset, leaving the file offset unchanged.

        * *note readv(): b74.: Read from a file descriptor into a number
          of writable buffers.

        * *note truncate(): e69.: Truncate the file corresponding to
          'path', so that it is at most 'length' bytes in size.

        * *note waitid(): dc1.: Wait for the completion of one or more
          child processes.

        * *note writev(): b77.: Write the contents of 'buffers' to a
          file descriptor, where 'buffers' is an arbitrary sequence of
          buffers.

        * *note getgrouplist(): 1153. (bpo-9344(10)): Return list of
          group ids that specified user belongs to.

   * *note times(): 1154. and *note uname(): 1155.: Return type changed
     from a tuple to a tuple-like object with named attributes.

   * Some platforms now support additional constants for the *note
     lseek(): 1156. function, such as ‘os.SEEK_HOLE’ and ‘os.SEEK_DATA’.

   * New constants *note RTLD_LAZY: 1157, *note RTLD_NOW: 1158, *note
     RTLD_GLOBAL: 1159, *note RTLD_LOCAL: 115a, *note RTLD_NODELETE:
     115b, *note RTLD_NOLOAD: 115c, and *note RTLD_DEEPBIND: 115d. are
     available on platforms that support them.  These are for use with
     the *note sys.setdlopenflags(): 115e. function, and supersede the
     similar constants defined in *note ctypes: 2a. and ‘DLFCN’.
     (Contributed by Victor Stinner in bpo-13226(11).)

   * *note os.symlink(): 1133. now accepts (and ignores) the
     ‘target_is_directory’ keyword argument on non-Windows platforms, to
     ease cross-platform support.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10882

   (2) https://bugs.python.org/issue?@action=redirect&bpo=4761

   (3) https://bugs.python.org/issue?@action=redirect&bpo=10755

   (4) https://bugs.python.org/issue?@action=redirect&bpo=14626

   (5) https://bugs.python.org/issue?@action=redirect&bpo=10784

   (6) https://bugs.python.org/issue?@action=redirect&bpo=8828

   (7) https://bugs.python.org/issue?@action=redirect&bpo=14127

   (8) https://bugs.python.org/issue?@action=redirect&bpo=13609

   (9) https://bugs.python.org/issue?@action=redirect&bpo=12720

   (10) https://bugs.python.org/issue?@action=redirect&bpo=9344

   (11) https://bugs.python.org/issue?@action=redirect&bpo=13226


File: python.info,  Node: pdb<7>,  Next: pickle<5>,  Prev: os<12>,  Up: Módulos melhorados<11>

1.11.20.35 pdb
..............

Tab-completion is now available not only for command names, but also
their arguments.  For example, for the ‘break’ command, function and
file names are completed.

(Contributed by Georg Brandl in bpo-14210(1))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14210


File: python.info,  Node: pickle<5>,  Next: pydoc<5>,  Prev: pdb<7>,  Up: Módulos melhorados<11>

1.11.20.36 pickle
.................

*note pickle.Pickler: a28. objects now have an optional *note
dispatch_table: 1161. attribute allowing per-pickler reduction functions
to be set.

(Contributed by Richard Oudkerk in bpo-14166(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14166


File: python.info,  Node: pydoc<5>,  Next: re<9>,  Prev: pickle<5>,  Up: Módulos melhorados<11>

1.11.20.37 pydoc
................

The Tk GUI and the ‘serve()’ function have been removed from the *note
pydoc: b5. module: ‘pydoc -g’ and ‘serve()’ have been deprecated in
Python 3.2.


File: python.info,  Node: re<9>,  Next: sched,  Prev: pydoc<5>,  Up: Módulos melhorados<11>

1.11.20.38 re
.............

*note str: 44c. regular expressions now support ‘\u’ and ‘\U’ escapes.

(Contributed by Serhiy Storchaka in bpo-3665(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=3665


File: python.info,  Node: sched,  Next: select<2>,  Prev: re<9>,  Up: Módulos melhorados<11>

1.11.20.39 sched
................

   * *note run(): 1165. now accepts a 'blocking' parameter which when
     set to false makes the method execute the scheduled events due to
     expire soonest (if any) and then return immediately.  This is
     useful in case you want to use the *note scheduler: 1166. in
     non-blocking applications.  (Contributed by Giampaolo Rodolà in
     bpo-13449(1).)

   * *note scheduler: 1166. class can now be safely used in
     multi-threaded environments.  (Contributed by Josiah Carlson and
     Giampaolo Rodolà in bpo-8684(2).)

   * 'timefunc' and 'delayfunct' parameters of *note scheduler: 1166.
     class constructor are now optional and defaults to *note
     time.time(): 254. and *note time.sleep(): 69d. respectively.
     (Contributed by Chris Clark in bpo-13245(3).)

   * *note enter(): 1167. and *note enterabs(): 1168. 'argument'
     parameter is now optional.  (Contributed by Chris Clark in
     bpo-13245(4).)

   * *note enter(): 1167. and *note enterabs(): 1168. now accept a
     'kwargs' parameter.  (Contributed by Chris Clark in bpo-13245(5).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13449

   (2) https://bugs.python.org/issue?@action=redirect&bpo=8684

   (3) https://bugs.python.org/issue?@action=redirect&bpo=13245

   (4) https://bugs.python.org/issue?@action=redirect&bpo=13245

   (5) https://bugs.python.org/issue?@action=redirect&bpo=13245


File: python.info,  Node: select<2>,  Next: shlex<3>,  Prev: sched,  Up: Módulos melhorados<11>

1.11.20.40 select
.................

Solaris and derivative platforms have a new class *note select.devpoll:
fca. for high performance asynchronous sockets via ‘/dev/poll’.
(Contributed by Jesús Cea Avión in bpo-6397(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=6397


File: python.info,  Node: shlex<3>,  Next: shutil<7>,  Prev: select<2>,  Up: Módulos melhorados<11>

1.11.20.41 shlex
................

The previously undocumented helper function ‘quote’ from the ‘pipes’
modules has been moved to the *note shlex: c4. module and documented.
*note quote(): 27d. properly escapes all characters in a string that
might be otherwise given special meaning by the shell.


File: python.info,  Node: shutil<7>,  Next: signal<4>,  Prev: shlex<3>,  Up: Módulos melhorados<11>

1.11.20.42 shutil
.................

   * Novas Funções:

        * *note disk_usage(): 116c.: provides total, used and free disk
          space statistics.  (Contributed by Giampaolo Rodolà in
          bpo-12442(1).)

        * *note chown(): 240.: allows one to change user and/or group of
          the given path also specifying the user/group names and not
          only their numeric ids.  (Contributed by Sandro Tosi in
          bpo-12191(2).)

        * *note shutil.get_terminal_size(): 1142.: returns the size of
          the terminal window to which the interpreter is attached.
          (Contributed by Zbigniew Jędrzejewski-Szmek in bpo-13609(3).)

   * *note copy2(): a65. and *note copystat(): 116d. now preserve file
     timestamps with nanosecond precision on platforms that support it.
     They also preserve file “extended attributes” on Linux.
     (Contributed by Larry Hastings in bpo-14127(4) and bpo-15238(5).)

   * Several functions now take an optional ‘symlinks’ argument: when
     that parameter is true, symlinks aren’t dereferenced and the
     operation instead acts on the symlink itself (or creates one, if
     relevant).  (Contributed by Hynek Schlawack in bpo-12715(6).)

   * When copying files to a different file system, *note move(): e82.
     now handles symlinks the way the posix ‘mv’ command does,
     recreating the symlink rather than copying the target file
     contents.  (Contributed by Jonathan Niehof in bpo-9993(7).)  *note
     move(): e82. now also returns the ‘dst’ argument as its result.

   * *note rmtree(): 301. is now resistant to symlink attacks on
     platforms which support the new ‘dir_fd’ parameter in *note
     os.open(): dba. and *note os.unlink(): 1134.  (Contributed by
     Martin von Löwis and Hynek Schlawack in bpo-4489(8).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=12442

   (2) https://bugs.python.org/issue?@action=redirect&bpo=12191

   (3) https://bugs.python.org/issue?@action=redirect&bpo=13609

   (4) https://bugs.python.org/issue?@action=redirect&bpo=14127

   (5) https://bugs.python.org/issue?@action=redirect&bpo=15238

   (6) https://bugs.python.org/issue?@action=redirect&bpo=12715

   (7) https://bugs.python.org/issue?@action=redirect&bpo=9993

   (8) https://bugs.python.org/issue?@action=redirect&bpo=4489


File: python.info,  Node: signal<4>,  Next: smtpd<4>,  Prev: shutil<7>,  Up: Módulos melhorados<11>

1.11.20.43 signal
.................

   * The *note signal: c6. module has new functions:

        * *note pthread_sigmask(): 116f.: fetch and/or change the signal
          mask of the calling thread (Contributed by Jean-Paul Calderone
          in bpo-8407(1));

        * *note pthread_kill(): 1170.: send a signal to a thread;

        * *note sigpending(): 1171.: examine pending functions;

        * *note sigwait(): 1172.: wait a signal;

        * *note sigwaitinfo(): dd3.: wait for a signal, returning
          detailed information about it;

        * *note sigtimedwait(): dd2.: like *note sigwaitinfo(): dd3. but
          with a timeout.

   * The signal handler writes the signal number as a single byte
     instead of a nul byte into the wakeup file descriptor.  So it is
     possible to wait more than one signal and know which signals were
     raised.

   * *note signal.signal(): 1173. and *note signal.siginterrupt(): 1174.
     raise an OSError, instead of a RuntimeError: OSError has an errno
     attribute.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=8407


File: python.info,  Node: smtpd<4>,  Next: smtplib<4>,  Prev: signal<4>,  Up: Módulos melhorados<11>

1.11.20.44 smtpd
................

The ‘smtpd’ module now supports RFC 5321(1) (extended SMTP) and RFC
1870(2) (size extension).  Per the standard, these extensions are
enabled if and only if the client initiates the session with an ‘EHLO’
command.

(Initial ‘ELHO’ support by Alberto Trevino.  Size extension by Juhana
Jauhiainen.  Substantial additional work on the patch contributed by
Michele Orrù and Dan Boswell.  bpo-8739(3))

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc5321.html

   (2) https://datatracker.ietf.org/doc/html/rfc1870.html

   (3) https://bugs.python.org/issue?@action=redirect&bpo=8739


File: python.info,  Node: smtplib<4>,  Next: socket<10>,  Prev: smtpd<4>,  Up: Módulos melhorados<11>

1.11.20.45 smtplib
..................

The *note SMTP: 934, *note SMTP_SSL: 935, and *note LMTP: 936. classes
now accept a ‘source_address’ keyword argument to specify the ‘(host,
port)’ to use as the source address in the bind call when creating the
outgoing socket.  (Contributed by Paulo Scardine in bpo-11281(1).)

*note SMTP: 934. now supports the context management protocol, allowing
an ‘SMTP’ instance to be used in a ‘with’ statement.  (Contributed by
Giampaolo Rodolà in bpo-11289(2).)

The *note SMTP_SSL: 935. constructor and the *note starttls(): 1177.
method now accept an SSLContext parameter to control parameters of the
secure channel.  (Contributed by Kasun Herath in bpo-8809(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=11281

   (2) https://bugs.python.org/issue?@action=redirect&bpo=11289

   (3) https://bugs.python.org/issue?@action=redirect&bpo=8809


File: python.info,  Node: socket<10>,  Next: socketserver<3>,  Prev: smtplib<4>,  Up: Módulos melhorados<11>

1.11.20.46 socket
.................

   * The *note socket: dc9. class now exposes additional methods to
     process ancillary data when supported by the underlying platform:

        * *note sendmsg(): 476.

        * *note recvmsg(): dce.

        * *note recvmsg_into(): 1179.

     (Contributed by David Watson in bpo-6560(1), based on an earlier
     patch by Heiko Wundram)

   * The *note socket: dc9. class now supports the PF_CAN protocol
     family (‘https://en.wikipedia.org/wiki/Socketcan’), on Linux
     (‘https://lwn.net/Articles/253425’).

     (Contributed by Matthias Fuchs, updated by Tiago Gonçalves in
     bpo-10141(2).)

   * The *note socket: dc9. class now supports the PF_RDS protocol
     family (‘https://en.wikipedia.org/wiki/Reliable_Datagram_Sockets’
     and https://oss.oracle.com/projects/rds(3)).

   * The *note socket: dc9. class now supports the ‘PF_SYSTEM’ protocol
     family on OS X. (Contributed by Michael Goderbauer in
     bpo-13777(4).)

   * New function *note sethostname(): 117a. allows the hostname to be
     set on Unix systems if the calling process has sufficient
     privileges.  (Contributed by Ross Lagerwall in bpo-10866(5).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=6560

   (2) https://bugs.python.org/issue?@action=redirect&bpo=10141

   (3) 
https://web.archive.org/web/20130115155505/https://oss.oracle.com/projects/rds/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=13777

   (5) https://bugs.python.org/issue?@action=redirect&bpo=10866


File: python.info,  Node: socketserver<3>,  Next: sqlite3<10>,  Prev: socket<10>,  Up: Módulos melhorados<11>

1.11.20.47 socketserver
.......................

*note BaseServer: 117c. now has an overridable method *note
service_actions(): 117d. that is called by the *note serve_forever():
117e. method in the service loop.  *note ForkingMixIn: b90. now uses
this to clean up zombie child processes.  (Contributed by Justin
Warkentin in bpo-11109(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=11109


File: python.info,  Node: sqlite3<10>,  Next: ssl<11>,  Prev: socketserver<3>,  Up: Módulos melhorados<11>

1.11.20.48 sqlite3
..................

New *note sqlite3.Connection: 245. method *note set_trace_callback():
2ad. can be used to capture a trace of all sql commands processed by
sqlite.  (Contributed by Torsten Landschoff in bpo-11688(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=11688


File: python.info,  Node: ssl<11>,  Next: stat<2>,  Prev: sqlite3<10>,  Up: Módulos melhorados<11>

1.11.20.49 ssl
..............

   * The *note ssl: d0. module has two new random generation functions:

        * *note RAND_bytes(): 524.: generate cryptographically strong
          pseudo-random bytes.

        * ‘RAND_pseudo_bytes()’: generate pseudo-random bytes.

     (Contributed by Victor Stinner in bpo-12049(1).)

   * The *note ssl: d0. module now exposes a finer-grained exception
     hierarchy in order to make it easier to inspect the various kinds
     of errors.  (Contributed by Antoine Pitrou in bpo-11183(2).)

   * *note load_cert_chain(): 295. now accepts a 'password' argument to
     be used if the private key is encrypted.  (Contributed by Adam
     Simpkins in bpo-12803(3).)

   * Diffie-Hellman key exchange, both regular and Elliptic Curve-based,
     is now supported through the *note load_dh_params(): 1181. and
     *note set_ecdh_curve(): 1182. methods.  (Contributed by Antoine
     Pitrou in bpo-13626(4) and bpo-13627(5).)

   * SSL sockets have a new *note get_channel_binding(): 1183. method
     allowing the implementation of certain authentication mechanisms
     such as SCRAM-SHA-1-PLUS. (Contributed by Jacek Konieczny in
     bpo-12551(6).)

   * You can query the SSL compression algorithm used by an SSL socket,
     thanks to its new *note compression(): 1184. method.  The new
     attribute *note OP_NO_COMPRESSION: 1185. can be used to disable
     compression.  (Contributed by Antoine Pitrou in bpo-13634(7).)

   * Support has been added for the Next Protocol Negotiation extension
     using the *note ssl.SSLContext.set_npn_protocols(): 302. method.
     (Contributed by Colin Marc in bpo-14204(8).)

   * SSL errors can now be introspected more easily thanks to *note
     library: 1186. and *note reason: 1187. attributes.  (Contributed by
     Antoine Pitrou in bpo-14837(9).)

   * The *note get_server_certificate(): 83f. function now supports
     IPv6.  (Contributed by Charles-François Natali in bpo-11811(10).)

   * New attribute *note OP_CIPHER_SERVER_PREFERENCE: 1188. allows
     setting SSLv3 server sockets to use the server’s cipher ordering
     preference rather than the client’s (bpo-13635(11)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=12049

   (2) https://bugs.python.org/issue?@action=redirect&bpo=11183

   (3) https://bugs.python.org/issue?@action=redirect&bpo=12803

   (4) https://bugs.python.org/issue?@action=redirect&bpo=13626

   (5) https://bugs.python.org/issue?@action=redirect&bpo=13627

   (6) https://bugs.python.org/issue?@action=redirect&bpo=12551

   (7) https://bugs.python.org/issue?@action=redirect&bpo=13634

   (8) https://bugs.python.org/issue?@action=redirect&bpo=14204

   (9) https://bugs.python.org/issue?@action=redirect&bpo=14837

   (10) https://bugs.python.org/issue?@action=redirect&bpo=11811

   (11) https://bugs.python.org/issue?@action=redirect&bpo=13635


File: python.info,  Node: stat<2>,  Next: struct<3>,  Prev: ssl<11>,  Up: Módulos melhorados<11>

1.11.20.50 stat
...............

The undocumented tarfile.filemode function has been moved to *note
stat.filemode(): 118a.  It can be used to convert a file’s mode to a
string of the form ‘-rwxrwxrwx’.

(Contributed by Giampaolo Rodolà in bpo-14807(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14807


File: python.info,  Node: struct<3>,  Next: subprocess<6>,  Prev: stat<2>,  Up: Módulos melhorados<11>

1.11.20.51 struct
.................

The *note struct: d5. module now supports ‘ssize_t’ and ‘size_t’ via the
new codes ‘n’ and ‘N’, respectively.  (Contributed by Antoine Pitrou in
bpo-3163(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=3163


File: python.info,  Node: subprocess<6>,  Next: sys<13>,  Prev: struct<3>,  Up: Módulos melhorados<11>

1.11.20.52 subprocess
.....................

Command strings can now be bytes objects on posix platforms.
(Contributed by Victor Stinner in bpo-8513(1).)

A new constant *note DEVNULL: 118d. allows suppressing output in a
platform-independent fashion.  (Contributed by Ross Lagerwall in
bpo-5870(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=8513

   (2) https://bugs.python.org/issue?@action=redirect&bpo=5870


File: python.info,  Node: sys<13>,  Next: tarfile<9>,  Prev: subprocess<6>,  Up: Módulos melhorados<11>

1.11.20.53 sys
..............

The *note sys: d9. module has a new *note thread_info: 118f. *note named
tuple: 64e. holding information about the thread implementation
(bpo-11223(1)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=11223


File: python.info,  Node: tarfile<9>,  Next: tempfile<4>,  Prev: sys<13>,  Up: Módulos melhorados<11>

1.11.20.54 tarfile
..................

*note tarfile: de. now supports ‘lzma’ encoding via the *note lzma: 8a.
module.  (Contributed by Lars Gustäbel in bpo-5689(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5689


File: python.info,  Node: tempfile<4>,  Next: textwrap<2>,  Prev: tarfile<9>,  Up: Módulos melhorados<11>

1.11.20.55 tempfile
...................

*note tempfile.SpooledTemporaryFile: 693.'s ‘truncate()’ method now
accepts a ‘size’ parameter.  (Contributed by Ryan Kelly in bpo-9957(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9957


File: python.info,  Node: textwrap<2>,  Next: threading<8>,  Prev: tempfile<4>,  Up: Módulos melhorados<11>

1.11.20.56 textwrap
...................

The *note textwrap: ec. module has a new *note indent(): 276. that makes
it straightforward to add a common prefix to selected lines in a block
of text (bpo-13857(1)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13857


File: python.info,  Node: threading<8>,  Next: time<8>,  Prev: textwrap<2>,  Up: Módulos melhorados<11>

1.11.20.57 threading
....................

*note threading.Condition: 1194, *note threading.Semaphore: 1195, *note
threading.BoundedSemaphore: 1196, *note threading.Event: 1197, and *note
threading.Timer: 1198, all of which used to be factory functions
returning a class instance, are now classes and may be subclassed.
(Contributed by Éric Araujo in bpo-10968(1).)

The *note threading.Thread: 953. constructor now accepts a ‘daemon’
keyword argument to override the default behavior of inheriting the
‘daemon’ flag value from the parent thread (bpo-6064(2)).

The formerly private function ‘_thread.get_ident’ is now available as
the public function *note threading.get_ident(): 1199.  This eliminates
several cases of direct access to the ‘_thread’ module in the stdlib.
Third party code that used ‘_thread.get_ident’ should likewise be
changed to use the new public interface.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10968

   (2) https://bugs.python.org/issue?@action=redirect&bpo=6064


File: python.info,  Node: time<8>,  Next: types<7>,  Prev: threading<8>,  Up: Módulos melhorados<11>

1.11.20.58 time
...............

The PEP 418(1) added new functions to the *note time: ee. module:

   * *note get_clock_info(): 119b.: Get information on a clock.

   * *note monotonic(): 253.: Monotonic clock (cannot go backward), not
     affected by system clock updates.

   * *note perf_counter(): a92.: Performance counter with the highest
     available resolution to measure a short duration.

   * *note process_time(): a93.: Sum of the system and user CPU time of
     the current process.

Other new functions:

   * *note clock_getres(): 119c, *note clock_gettime(): 119d. and *note
     clock_settime(): 119e. functions with ‘CLOCK_XXX’ constants.
     (Contributed by Victor Stinner in bpo-10278(2).)

To improve cross platform consistency, *note sleep(): 69d. now raises a
*note ValueError: 202. when passed a negative sleep value.  Previously
this was an error on posix, but produced an infinite sleep on Windows.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0418/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=10278


File: python.info,  Node: types<7>,  Next: unittest<10>,  Prev: time<8>,  Up: Módulos melhorados<11>

1.11.20.59 types
................

Add a new *note types.MappingProxyType: 46d. class: Read-only proxy of a
mapping.  (bpo-14386(1))

The new functions *note types.new_class(): 11a0. and *note
types.prepare_class(): 11a1. provide support for PEP 3115(2) compliant
dynamic type creation.  (bpo-14588(3))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14386

   (2) https://peps.python.org/pep-3115/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=14588


File: python.info,  Node: unittest<10>,  Next: urllib<4>,  Prev: types<7>,  Up: Módulos melhorados<11>

1.11.20.60 unittest
...................

*note assertRaises(): 52d, *note assertRaisesRegex(): 52f, *note
assertWarns(): 11a3, and *note assertWarnsRegex(): 11a4. now accept a
keyword argument 'msg' when used as context managers.  (Contributed by
Ezio Melotti and Winston Ewert in bpo-10775(1).)

*note unittest.TestCase.run(): 11a5. now returns the *note TestResult:
11a6. object.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10775


File: python.info,  Node: urllib<4>,  Next: webbrowser<3>,  Prev: unittest<10>,  Up: Módulos melhorados<11>

1.11.20.61 urllib
.................

The *note Request: 100e. class, now accepts a 'method' argument used by
*note get_method(): 11a8. to determine what HTTP method should be used.
For example, this will send a ‘'HEAD'’ request:

     >>> urlopen(Request('https://www.python.org', method='HEAD'))

(bpo-1673007(1))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1673007


File: python.info,  Node: webbrowser<3>,  Next: xml etree ElementTree<2>,  Prev: urllib<4>,  Up: Módulos melhorados<11>

1.11.20.62 webbrowser
.....................

The *note webbrowser: 115. module supports more “browsers”: Google
Chrome (named ‘chrome’, ‘chromium’, ‘chrome-browser’ or
‘chromium-browser’ depending on the version and operating system), and
the generic launchers ‘xdg-open’, from the FreeDesktop.org project, and
‘gvfs-open’, which is the default URI handler for GNOME 3.  (The former
contributed by Arnaud Calmettes in bpo-13620(1), the latter by Matthias
Klose in bpo-14493(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13620

   (2) https://bugs.python.org/issue?@action=redirect&bpo=14493


File: python.info,  Node: xml etree ElementTree<2>,  Next: zlib<2>,  Prev: webbrowser<3>,  Up: Módulos melhorados<11>

1.11.20.63 xml.etree.ElementTree
................................

The *note xml.etree.ElementTree: 125. module now imports its C
accelerator by default; there is no longer a need to explicitly import
‘xml.etree.cElementTree’ (this module stays for backwards compatibility,
but is now deprecated).  In addition, the ‘iter’ family of methods of
*note Element: 310. has been optimized (rewritten in C). The module’s
documentation has also been greatly improved with added examples and a
more detailed reference.


File: python.info,  Node: zlib<2>,  Prev: xml etree ElementTree<2>,  Up: Módulos melhorados<11>

1.11.20.64 zlib
...............

New attribute *note zlib.Decompress.eof: 11ac. makes it possible to
distinguish between a properly formed compressed stream and an
incomplete or truncated one.  (Contributed by Nadeem Vawda in
bpo-12646(1).)

New attribute *note zlib.ZLIB_RUNTIME_VERSION: 11ad. reports the version
string of the underlying ‘zlib’ library that is loaded at runtime.
(Contributed by Torsten Landschoff in bpo-12306(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=12646

   (2) https://bugs.python.org/issue?@action=redirect&bpo=12306


File: python.info,  Node: Otimizações<10>,  Next: Mudanças a construções e API C<4>,  Prev: Módulos melhorados<11>,  Up: O que há de novo no Python 3 3

1.11.21 Otimizações
-------------------

Major performance enhancements have been added:

   * Thanks to PEP 393(1), some operations on Unicode strings have been
     optimized:

        * the memory footprint is divided by 2 to 4 depending on the
          text

        * encode an ASCII string to UTF-8 doesn’t need to encode
          characters anymore, the UTF-8 representation is shared with
          the ASCII representation

        * the UTF-8 encoder has been optimized

        * repeating a single ASCII letter and getting a substring of an
          ASCII string is 4 times faster

   * UTF-8 is now 2x to 4x faster.  UTF-16 encoding is now up to 10x
     faster.

     (Contributed by Serhiy Storchaka, bpo-14624(2), bpo-14738(3) and
     bpo-15026(4).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0393/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=14624

   (3) https://bugs.python.org/issue?@action=redirect&bpo=14738

   (4) https://bugs.python.org/issue?@action=redirect&bpo=15026


File: python.info,  Node: Mudanças a construções e API C<4>,  Next: Descontinuados<12>,  Prev: Otimizações<10>,  Up: O que há de novo no Python 3 3

1.11.22 Mudanças a construções e API C
--------------------------------------

As alterações no processo de construção do Python e na API C incluem:

   * New PEP 3118(1) related function:

        * *note PyMemoryView_FromMemory(): 11af.

   * PEP 393(2) added new Unicode types, macros and functions:

        * High-level API:

             * *note PyUnicode_CopyCharacters(): 8ba.

             * *note PyUnicode_FindChar(): 8be.

             * *note PyUnicode_GetLength(): 8b8, *note
               PyUnicode_GET_LENGTH: 8b9.

             * *note PyUnicode_New(): 8b0.

             * *note PyUnicode_Substring(): 8bb.

             * *note PyUnicode_ReadChar(): 11b0, *note
               PyUnicode_WriteChar(): 11b1.

        * Low-level API:

             * *note Py_UCS1: 11b2, *note Py_UCS2: 11b3, *note Py_UCS4:
               29b. types

             * *note PyASCIIObject: 11b4. and *note
               PyCompactUnicodeObject: 11b5. structures

             * *note PyUnicode_READY: 401.

             * *note PyUnicode_FromKindAndData(): 11b6.

             * *note PyUnicode_AsUCS4(): 11b7, *note
               PyUnicode_AsUCS4Copy(): 8c0.

             * *note PyUnicode_DATA: 11b8, *note PyUnicode_1BYTE_DATA:
               11b9, *note PyUnicode_2BYTE_DATA: 11ba, *note
               PyUnicode_4BYTE_DATA: 11bb.

             * *note PyUnicode_KIND: 11bc. with ‘PyUnicode_Kind’ enum:
               ‘PyUnicode_WCHAR_KIND’, *note PyUnicode_1BYTE_KIND: 11bd,
               *note PyUnicode_2BYTE_KIND: 11be, *note
               PyUnicode_4BYTE_KIND: 11bf.

             * *note PyUnicode_READ: 11c0, *note PyUnicode_READ_CHAR:
               11c1, *note PyUnicode_WRITE: 11c2.

             * *note PyUnicode_MAX_CHAR_VALUE: 11c3.

   * *note PyArg_ParseTuple: 571. now accepts a *note bytearray: 2ea.
     for the ‘c’ format (bpo-12380(3)).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3118/

   (2) https://peps.python.org/pep-0393/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=12380


File: python.info,  Node: Descontinuados<12>,  Next: Porting to Python 3 3,  Prev: Mudanças a construções e API C<4>,  Up: O que há de novo no Python 3 3

1.11.23 Descontinuados
----------------------

* Menu:

* Unsupported Operating Systems: Unsupported Operating Systems<2>.
* Deprecated Python modules, functions and methods: Deprecated Python modules functions and methods<4>.
* Deprecated functions and types of the C API: Deprecated functions and types of the C API<3>.
* Deprecated features::


File: python.info,  Node: Unsupported Operating Systems<2>,  Next: Deprecated Python modules functions and methods<4>,  Up: Descontinuados<12>

1.11.23.1 Unsupported Operating Systems
.......................................

OS/2 and VMS are no longer supported due to the lack of a maintainer.

Windows 2000 and Windows platforms which set ‘COMSPEC’ to ‘command.com’
are no longer supported due to maintenance burden.

OSF support, which was deprecated in 3.2, has been completely removed.


File: python.info,  Node: Deprecated Python modules functions and methods<4>,  Next: Deprecated functions and types of the C API<3>,  Prev: Unsupported Operating Systems<2>,  Up: Descontinuados<12>

1.11.23.2 Deprecated Python modules, functions and methods
..........................................................

   * Passing a non-empty string to ‘object.__format__()’ is deprecated,
     and will produce a *note TypeError: 2c3. in Python 3.4
     (bpo-9856(1)).

   * The ‘unicode_internal’ codec has been deprecated because of the PEP
     393(2), use UTF-8, UTF-16 (‘utf-16-le’ or ‘utf-16-be’), or UTF-32
     (‘utf-32-le’ or ‘utf-32-be’)

   * *note ftplib.FTP.nlst(): 1102. and *note ftplib.FTP.dir(): 1103.:
     use *note ftplib.FTP.mlsd(): 1101.

   * ‘platform.popen()’: use the *note subprocess: d6. module.  Check
     especially the *note Replacing Older Functions with the subprocess
     Module: 11c7. section (bpo-11377(3)).

   * bpo-13374(4): The Windows bytes API has been deprecated in the
     *note os: a1. module.  Use Unicode filenames, instead of bytes
     filenames, to not depend on the ANSI code page anymore and to
     support any filename.

   * bpo-13988(5): The ‘xml.etree.cElementTree’ module is deprecated.
     The accelerator is used automatically whenever available.

   * The behaviour of ‘time.clock()’ depends on the platform: use the
     new *note time.perf_counter(): a92. or *note time.process_time():
     a93. function instead, depending on your requirements, to have a
     well defined behaviour.

   * The ‘os.stat_float_times()’ function is deprecated.

   * *note abc: 4. module:

        * *note abc.abstractproperty: 10c3. has been deprecated, use
          *note property: 194. with *note abc.abstractmethod(): 10c4.
          instead.

        * *note abc.abstractclassmethod: 10c5. has been deprecated, use
          *note classmethod: 166. with *note abc.abstractmethod(): 10c4.
          instead.

        * *note abc.abstractstaticmethod: 10c6. has been deprecated, use
          *note staticmethod: 416. with *note abc.abstractmethod():
          10c4. instead.

   * *note importlib: 77. package:

        * *note importlib.abc.SourceLoader.path_mtime(): 11c8. is now
          deprecated in favour of *note
          importlib.abc.SourceLoader.path_stats(): 11c9. as bytecode
          files now store both the modification time and size of the
          source file the bytecode file was compiled from.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9856

   (2) https://peps.python.org/pep-0393/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=11377

   (4) https://bugs.python.org/issue?@action=redirect&bpo=13374

   (5) https://bugs.python.org/issue?@action=redirect&bpo=13988


File: python.info,  Node: Deprecated functions and types of the C API<3>,  Next: Deprecated features,  Prev: Deprecated Python modules functions and methods<4>,  Up: Descontinuados<12>

1.11.23.3 Deprecated functions and types of the C API
.....................................................

The *note Py_UNICODE: 3ed. has been deprecated by PEP 393(1) and will be
removed in Python 4.  All functions using this type are deprecated:

Unicode functions and methods using *note Py_UNICODE: 3ed. and *note
Py_UNICODE: 3ed.* types:

   * ‘PyUnicode_FromUnicode’: use *note PyUnicode_FromWideChar(): 11cb.
     or *note PyUnicode_FromKindAndData(): 11b6.

   * ‘PyUnicode_AS_UNICODE’, ‘PyUnicode_AsUnicode()’,
     ‘PyUnicode_AsUnicodeAndSize()’: use *note
     PyUnicode_AsWideCharString(): 8c1.

   * ‘PyUnicode_AS_DATA’: use *note PyUnicode_DATA: 11b8. with *note
     PyUnicode_READ: 11c0. and *note PyUnicode_WRITE: 11c2.

   * ‘PyUnicode_GET_SIZE’, ‘PyUnicode_GetSize()’: use *note
     PyUnicode_GET_LENGTH: 8b9. or *note PyUnicode_GetLength(): 8b8.

   * ‘PyUnicode_GET_DATA_SIZE’: use ‘PyUnicode_GET_LENGTH(str) *
     PyUnicode_KIND(str)’ (only work on ready strings)

   * ‘PyUnicode_AsUnicodeCopy()’: use *note PyUnicode_AsUCS4Copy(): 8c0.
     or *note PyUnicode_AsWideCharString(): 8c1.

   * ‘PyUnicode_GetMax()’

Functions and macros manipulating Py_UNICODE* strings:

   * ‘Py_UNICODE_strlen()’: use *note PyUnicode_GetLength(): 8b8. or
     *note PyUnicode_GET_LENGTH: 8b9.

   * ‘Py_UNICODE_strcat()’: use *note PyUnicode_CopyCharacters(): 8ba.
     or *note PyUnicode_FromFormat(): 38a.

   * ‘Py_UNICODE_strcpy()’, ‘Py_UNICODE_strncpy()’, ‘Py_UNICODE_COPY()’:
     use *note PyUnicode_CopyCharacters(): 8ba. or *note
     PyUnicode_Substring(): 8bb.

   * ‘Py_UNICODE_strcmp()’: use *note PyUnicode_Compare(): 8bc.

   * ‘Py_UNICODE_strncmp()’: use *note PyUnicode_Tailmatch(): 8bd.

   * ‘Py_UNICODE_strchr()’, ‘Py_UNICODE_strrchr()’: use *note
     PyUnicode_FindChar(): 8be.

   * ‘Py_UNICODE_FILL()’: use *note PyUnicode_Fill(): 11cc.

   * ‘Py_UNICODE_MATCH’

Encoders:

   * ‘PyUnicode_Encode()’: use ‘PyUnicode_AsEncodedObject()’

   * ‘PyUnicode_EncodeUTF7()’

   * ‘PyUnicode_EncodeUTF8()’: use *note PyUnicode_AsUTF8(): bd4. or
     *note PyUnicode_AsUTF8String(): 11cd.

   * ‘PyUnicode_EncodeUTF32()’

   * ‘PyUnicode_EncodeUTF16()’

   * ‘PyUnicode_EncodeUnicodeEscape()’ use *note
     PyUnicode_AsUnicodeEscapeString(): 11ce.

   * ‘PyUnicode_EncodeRawUnicodeEscape()’ use *note
     PyUnicode_AsRawUnicodeEscapeString(): 11cf.

   * ‘PyUnicode_EncodeLatin1()’: use *note PyUnicode_AsLatin1String():
     11d0.

   * ‘PyUnicode_EncodeASCII()’: use *note PyUnicode_AsASCIIString():
     11d1.

   * ‘PyUnicode_EncodeCharmap()’

   * ‘PyUnicode_TranslateCharmap()’

   * ‘PyUnicode_EncodeMBCS()’: use *note PyUnicode_AsMBCSString(): 11d2.
     or *note PyUnicode_EncodeCodePage(): 11d3. (with ‘CP_ACP’
     code_page)

   * ‘PyUnicode_EncodeDecimal()’, ‘PyUnicode_TransformDecimalToASCII()’

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0393/


File: python.info,  Node: Deprecated features,  Prev: Deprecated functions and types of the C API<3>,  Up: Descontinuados<12>

1.11.23.4 Deprecated features
.............................

The *note array: 7. module’s ‘'u'’ format code is now deprecated and
will be removed in Python 4 together with the rest of the (*note
Py_UNICODE: 3ed.) API.


File: python.info,  Node: Porting to Python 3 3,  Prev: Descontinuados<12>,  Up: O que há de novo no Python 3 3

1.11.24 Porting to Python 3.3
-----------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções que podem exigir alterações no seu código.

* Menu:

* Porting Python code::
* Porting C code::
* Building C extensions::
* Command Line Switch Changes::


File: python.info,  Node: Porting Python code,  Next: Porting C code,  Up: Porting to Python 3 3

1.11.24.1 Porting Python code
.............................

   * Hash randomization is enabled by default.  Set the *note
     PYTHONHASHSEED: 10b6. environment variable to ‘0’ to disable hash
     randomization.  See also the *note object.__hash__(): b0e. method.

   * bpo-12326(1): On Linux, sys.platform doesn’t contain the major
     version anymore.  It is now always ‘linux’, instead of ‘linux2’ or
     ‘linux3’ depending on the Linux version used to build Python.
     Replace sys.platform == ‘linux2’ with
     sys.platform.startswith(‘linux’), or directly sys.platform ==
     ‘linux’ if you don’t need to support older Python versions.

   * bpo-13847(2), bpo-14180(3): *note time: ee. and *note datetime:
     30.: *note OverflowError: 885. is now raised instead of *note
     ValueError: 202. if a timestamp is out of range.  *note OSError:
     417. is now raised if C functions ‘gmtime()’ or ‘localtime()’
     failed.

   * The default finders used by import now utilize a cache of what is
     contained within a specific directory.  If you create a Python
     source file or sourceless bytecode file, make sure to call *note
     importlib.invalidate_caches(): c2a. to clear out the cache for the
     finders to notice the new file.

   * *note ImportError: 419. now uses the full name of the module that
     was attempted to be imported.  Doctests that check ImportErrors’
     message will need to be updated to use the full name of the module
     instead of just the tail of the name.

   * The 'index' argument to *note __import__(): 8da. now defaults to 0
     instead of -1 and no longer support negative values.  It was an
     oversight when PEP 328(4) was implemented that the default value
     remained -1.  If you need to continue to perform a relative import
     followed by an absolute import, then perform the relative import
     using an index of 1, followed by another import using an index of
     0.  It is preferred, though, that you use *note
     importlib.import_module(): 518. rather than call *note
     __import__(): 8da. directly.

   * *note __import__(): 8da. no longer allows one to use an index value
     other than 0 for top-level modules.  E.g.  ‘__import__('sys',
     level=1)’ is now an error.

   * Because *note sys.meta_path: d4d. and *note sys.path_hooks: 105a.
     now have finders on them by default, you will most likely want to
     use *note list.insert(): 11d7. instead of *note list.append(): 6cd.
     to add to those lists.

   * Because ‘None’ is now inserted into *note sys.path_importer_cache:
     5e4, if you are clearing out entries in the dictionary of paths
     that do not have a finder, you will need to remove keys paired with
     values of ‘None’ 'and' ‘imp.NullImporter’ to be
     backwards-compatible.  This will lead to extra overhead on older
     versions of Python that re-insert ‘None’ into *note
     sys.path_importer_cache: 5e4. where it represents the use of
     implicit finders, but semantically it should not change anything.

   * ‘importlib.abc.Finder’ no longer specifies a ‘find_module()’
     abstract method that must be implemented.  If you were relying on
     subclasses to implement that method, make sure to check for the
     method’s existence first.  You will probably want to check for
     ‘find_loader()’ first, though, in the case of working with *note
     path entry finders: 10aa.

   * *note pkgutil: a9. has been converted to use *note importlib: 77.
     internally.  This eliminates many edge cases where the old
     behaviour of the PEP 302(5) import emulation failed to match the
     behaviour of the real import system.  The import emulation itself
     is still present, but is now deprecated.  The *note
     pkgutil.iter_importers(): 11d8. and *note pkgutil.walk_packages():
     c19. functions special case the standard import hooks so they are
     still supported even though they do not provide the non-standard
     ‘iter_modules()’ method.

   * A longstanding RFC-compliance bug (bpo-1079(6)) in the parsing done
     by *note email.header.decode_header(): 10f7. has been fixed.  Code
     that uses the standard idiom to convert encoded headers into
     unicode (‘str(make_header(decode_header(h))’) will see no change,
     but code that looks at the individual tuples returned by
     decode_header will see that whitespace that precedes or follows
     ‘ASCII’ sections is now included in the ‘ASCII’ section.  Code that
     builds headers using ‘make_header’ should also continue to work
     without change, since ‘make_header’ continues to add whitespace
     between ‘ASCII’ and non-‘ASCII’ sections if it is not already
     present in the input strings.

   * *note email.utils.formataddr(): 11d9. now does the correct content
     transfer encoding when passed non-‘ASCII’ display names.  Any code
     that depended on the previous buggy behavior that preserved the
     non-‘ASCII’ unicode in the formatted output string will need to be
     changed (bpo-1690608(7)).

   * *note poplib.POP3.quit(): 11da. may now raise protocol errors like
     all other ‘poplib’ methods.  Code that assumes ‘quit’ does not
     raise *note poplib.error_proto: 11db. errors may need to be changed
     if errors on ‘quit’ are encountered by a particular application
     (bpo-11291(8)).

   * The ‘strict’ argument to *note email.parser.Parser: 11dc,
     deprecated since Python 2.4, has finally been removed.

   * The deprecated method ‘unittest.TestCase.assertSameElements’ has
     been removed.

   * The deprecated variable ‘time.accept2dyear’ has been removed.

   * The deprecated ‘Context._clamp’ attribute has been removed from the
     *note decimal: 36. module.  It was previously replaced by the
     public attribute *note clamp: 11dd.  (See bpo-8540(9).)

   * The undocumented internal helper class ‘SSLFakeFile’ has been
     removed from *note smtplib: ca, since its functionality has long
     been provided directly by *note socket.socket.makefile(): 11de.

   * Passing a negative value to *note time.sleep(): 69d. on Windows now
     raises an error instead of sleeping forever.  It has always raised
     an error on posix.

   * The ‘ast.__version__’ constant has been removed.  If you need to
     make decisions affected by the AST version, use *note
     sys.version_info: 6a0. to make the decision.

   * Code that used to work around the fact that the *note threading:
     ed. module used factory functions by subclassing the private
     classes will need to change to subclass the now-public classes.

   * The undocumented debugging machinery in the threading module has
     been removed, simplifying the code.  This should have no effect on
     production code, but is mentioned here in case any application
     debug frameworks were interacting with it (bpo-13550(10)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=12326

   (2) https://bugs.python.org/issue?@action=redirect&bpo=13847

   (3) https://bugs.python.org/issue?@action=redirect&bpo=14180

   (4) https://peps.python.org/pep-0328/

   (5) https://peps.python.org/pep-0302/

   (6) https://bugs.python.org/issue?@action=redirect&bpo=1079

   (7) https://bugs.python.org/issue?@action=redirect&bpo=1690608

   (8) https://bugs.python.org/issue?@action=redirect&bpo=11291

   (9) https://bugs.python.org/issue?@action=redirect&bpo=8540

   (10) https://bugs.python.org/issue?@action=redirect&bpo=13550


File: python.info,  Node: Porting C code,  Next: Building C extensions,  Prev: Porting Python code,  Up: Porting to Python 3 3

1.11.24.2 Porting C code
........................

   * In the course of changes to the buffer API the undocumented
     ‘smalltable’ member of the *note Py_buffer: 758. structure has been
     removed and the layout of the ‘PyMemoryViewObject’ has changed.

     All extensions relying on the relevant parts in ‘memoryobject.h’ or
     ‘object.h’ must be rebuilt.

   * Due to *note PEP 393: 1076, the *note Py_UNICODE: 3ed. type and all
     functions using this type are deprecated (but will stay available
     for at least five years).  If you were using low-level Unicode APIs
     to construct and access unicode objects and you want to benefit of
     the memory footprint reduction provided by PEP 393(1), you have to
     convert your code to the new *note Unicode API: 11df.

     However, if you only have been using high-level functions such as
     *note PyUnicode_Concat(): 11e0, *note PyUnicode_Join(): 11e1. or
     *note PyUnicode_FromFormat(): 38a, your code will automatically
     take advantage of the new unicode representations.

   * *note PyImport_GetMagicNumber(): 11e2. now returns ‘-1’ upon
     failure.

   * As a negative value for the 'level' argument to *note __import__():
     8da. is no longer valid, the same now holds for *note
     PyImport_ImportModuleLevel(): 11e3.  This also means that the value
     of 'level' used by *note PyImport_ImportModuleEx(): 11e4. is now
     ‘0’ instead of ‘-1’.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0393/


File: python.info,  Node: Building C extensions,  Next: Command Line Switch Changes,  Prev: Porting C code,  Up: Porting to Python 3 3

1.11.24.3 Building C extensions
...............................

   * The range of possible file names for C extensions has been
     narrowed.  Very rarely used spellings have been suppressed: under
     POSIX, files named ‘xxxmodule.so’, ‘xxxmodule.abi3.so’ and
     ‘xxxmodule.cpython-*.so’ are no longer recognized as implementing
     the ‘xxx’ module.  If you had been generating such files, you have
     to switch to the other spellings (i.e., remove the ‘module’ string
     from the file names).

     (implemented in bpo-14040(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14040


File: python.info,  Node: Command Line Switch Changes,  Prev: Building C extensions,  Up: Porting to Python 3 3

1.11.24.4 Command Line Switch Changes
.....................................

   * The -Q command-line flag and related artifacts have been removed.
     Code checking sys.flags.division_warning will need updating.

     (bpo-10998(1), contributed by Éric Araujo.)

   * When ‘python’ is started with *note -S: 11e7, ‘import site’ will no
     longer add site-specific paths to the module search paths.  In
     previous versions, it did.

     (bpo-11591(2), contributed by Carl Meyer with editions by Éric
     Araujo.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10998

   (2) https://bugs.python.org/issue?@action=redirect&bpo=11591


File: python.info,  Node: O que há de novo no Python 3 2,  Next: O que há de novo no Python 3 1,  Prev: O que há de novo no Python 3 3,  Up: O que há de novo no Python

1.12 O que há de novo no Python 3.2
===================================


Autor: Raymond Hettinger

This article explains the new features in Python 3.2 as compared to 3.1.
Python 3.2 was released on February 20, 2011.  It focuses on a few
highlights and gives a few examples.  For full details, see the
Misc/NEWS(1) file.

Ver também
..........

PEP 392(2) - Python 3.2 Release Schedule

* Menu:

* PEP 384; Defining a Stable ABI: PEP 384 Defining a Stable ABI.
* PEP 389; Argparse Command Line Parsing Module: PEP 389 Argparse Command Line Parsing Module.
* PEP 391; Dictionary Based Configuration for Logging: PEP 391 Dictionary Based Configuration for Logging.
* PEP 3148; The concurrent.futures module: PEP 3148 The concurrent futures module.
* PEP 3147; PYC Repository Directories: PEP 3147 PYC Repository Directories.
* PEP 3149; ABI Version Tagged .so Files: PEP 3149 ABI Version Tagged so Files.
* PEP 3333; Python Web Server Gateway Interface v1.0.1: PEP 3333 Python Web Server Gateway Interface v1 0 1.
* Outras mudanças na linguagem: Outras mudanças na linguagem<12>.
* New, Improved, and Deprecated Modules: New Improved and Deprecated Modules.
* Multi-threading::
* Otimizações: Otimizações<11>.
* Unicode::
* Codecs::
* Documentação::
* IDLE::
* Code Repository::
* Mudanças a construções e API C: Mudanças a construções e API C<5>.
* Porting to Python 3.2: Porting to Python 3 2.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/blob/076ca6c3c8df3030307e548d9be792ce3c1c6eea/Misc/NEWS

   (2) https://peps.python.org/pep-0392/


File: python.info,  Node: PEP 384 Defining a Stable ABI,  Next: PEP 389 Argparse Command Line Parsing Module,  Up: O que há de novo no Python 3 2

1.12.1 PEP 384: Defining a Stable ABI
-------------------------------------

In the past, extension modules built for one Python version were often
not usable with other Python versions.  Particularly on Windows, every
feature release of Python required rebuilding all extension modules that
one wanted to use.  This requirement was the result of the free access
to Python interpreter internals that extension modules could use.

With Python 3.2, an alternative approach becomes available: extension
modules which restrict themselves to a limited API (by defining
Py_LIMITED_API) cannot use many of the internals, but are constrained to
a set of API functions that are promised to be stable for several
releases.  As a consequence, extension modules built for 3.2 in that
mode will also work with 3.3, 3.4, and so on.  Extension modules that
make use of details of memory structures can still be built, but will
need to be recompiled for every feature release.

Ver também
..........

PEP 384(1) - Defining a Stable ABI

     PEP written by Martin von Löwis.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0384/


File: python.info,  Node: PEP 389 Argparse Command Line Parsing Module,  Next: PEP 391 Dictionary Based Configuration for Logging,  Prev: PEP 384 Defining a Stable ABI,  Up: O que há de novo no Python 3 2

1.12.2 PEP 389: Argparse Command Line Parsing Module
----------------------------------------------------

A new module for command line parsing, *note argparse: 6, was introduced
to overcome the limitations of *note optparse: a0. which did not provide
support for positional arguments (not just options), subcommands,
required options and other common patterns of specifying and validating
options.

This module has already had widespread success in the community as a
third-party module.  Being more fully featured than its predecessor, the
*note argparse: 6. module is now the preferred module for command-line
processing.  The older module is still being kept available because of
the substantial amount of legacy code that depends on it.

Here’s an annotated example parser showing features like limiting
results to a set of choices, specifying a 'metavar' in the help screen,
validating that one or more positional arguments is present, and making
a required option:

     import argparse
     parser = argparse.ArgumentParser(
                 description = 'Manage servers',         # main description for help
                 epilog = 'Tested on Solaris and Linux') # displayed after help
     parser.add_argument('action',                       # argument name
                 choices = ['deploy', 'start', 'stop'],  # three allowed values
                 help = 'action on each target')         # help msg
     parser.add_argument('targets',
                 metavar = 'HOSTNAME',                   # var name used in help msg
                 nargs = '+',                            # require one or more targets
                 help = 'url for target machines')       # help msg explanation
     parser.add_argument('-u', '--user',                 # -u or --user option
                 required = True,                        # make it a required argument
                 help = 'login as user')

Example of calling the parser on a command string:

     >>> cmd = 'deploy sneezy.example.com sleepy.example.com -u skycaptain'
     >>> result = parser.parse_args(cmd.split())
     >>> result.action
     'deploy'
     >>> result.targets
     ['sneezy.example.com', 'sleepy.example.com']
     >>> result.user
     'skycaptain'

Example of the parser’s automatically generated help:

     >>> parser.parse_args('-h'.split())

     usage: manage_cloud.py [-h] -u USER
                            {deploy,start,stop} HOSTNAME [HOSTNAME ...]

     Manage servers

     positional arguments:
       {deploy,start,stop}   action on each target
       HOSTNAME              url for target machines

     optional arguments:
       -h, --help            show this help message and exit
       -u USER, --user USER  login as user

     Tested on Solaris and Linux

An especially nice *note argparse: 6. feature is the ability to define
subparsers, each with their own argument patterns and help displays:

     import argparse
     parser = argparse.ArgumentParser(prog='HELM')
     subparsers = parser.add_subparsers()

     parser_l = subparsers.add_parser('launch', help='Launch Control')   # first subgroup
     parser_l.add_argument('-m', '--missiles', action='store_true')
     parser_l.add_argument('-t', '--torpedos', action='store_true')

     parser_m = subparsers.add_parser('move', help='Move Vessel',        # second subgroup
                                      aliases=('steer', 'turn'))         # equivalent names
     parser_m.add_argument('-c', '--course', type=int, required=True)
     parser_m.add_argument('-s', '--speed', type=int, default=0)

     $ ./helm.py --help                         # top level help (launch and move)
     $ ./helm.py launch --help                  # help for launch options
     $ ./helm.py launch --missiles              # set missiles=True and torpedos=False
     $ ./helm.py steer --course 180 --speed 5   # set movement parameters

Ver também
..........

PEP 389(1) - New Command Line Parsing Module

     PEP written by Steven Bethard.

*note Migrando código optparse para argparse: 11ed. for details on the
differences from *note optparse: a0.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0389/


File: python.info,  Node: PEP 391 Dictionary Based Configuration for Logging,  Next: PEP 3148 The concurrent futures module,  Prev: PEP 389 Argparse Command Line Parsing Module,  Up: O que há de novo no Python 3 2

1.12.3 PEP 391: Dictionary Based Configuration for Logging
----------------------------------------------------------

The *note logging: 87. module provided two kinds of configuration, one
style with function calls for each option or another style driven by an
external file saved in a *note configparser: 22. format.  Those options
did not provide the flexibility to create configurations from JSON or
YAML files, nor did they support incremental configuration, which is
needed for specifying logger options from a command line.

To support a more flexible style, the module now offers *note
logging.config.dictConfig(): 11ef. for specifying logging configuration
with plain Python dictionaries.  The configuration options include
formatters, handlers, filters, and loggers.  Here’s a working example of
a configuration dictionary:

     {"version": 1,
      "formatters": {"brief": {"format": "%(levelname)-8s: %(name)-15s: %(message)s"},
                     "full": {"format": "%(asctime)s %(name)-15s %(levelname)-8s %(message)s"}
                     },
      "handlers": {"console": {
                        "class": "logging.StreamHandler",
                        "formatter": "brief",
                        "level": "INFO",
                        "stream": "ext://sys.stdout"},
                   "console_priority": {
                        "class": "logging.StreamHandler",
                        "formatter": "full",
                        "level": "ERROR",
                        "stream": "ext://sys.stderr"}
                   },
      "root": {"level": "DEBUG", "handlers": ["console", "console_priority"]}}

If that dictionary is stored in a file called ‘conf.json’, it can be
loaded and called with code like this:

     >>> import json, logging.config
     >>> with open('conf.json') as f:
     ...     conf = json.load(f)
     ...
     >>> logging.config.dictConfig(conf)
     >>> logging.info("Transaction completed normally")
     INFO    : root           : Transaction completed normally
     >>> logging.critical("Abnormal termination")
     2011-02-17 11:14:36,694 root            CRITICAL Abnormal termination

Ver também
..........

PEP 391(1) - Dictionary Based Configuration for Logging

     PEP written by Vinay Sajip.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0391/


File: python.info,  Node: PEP 3148 The concurrent futures module,  Next: PEP 3147 PYC Repository Directories,  Prev: PEP 391 Dictionary Based Configuration for Logging,  Up: O que há de novo no Python 3 2

1.12.4 PEP 3148: The ‘concurrent.futures’ module
------------------------------------------------

Code for creating and managing concurrency is being collected in a new
top-level namespace, 'concurrent'.  Its first member is a 'futures'
package which provides a uniform high-level interface for managing
threads and processes.

The design for *note concurrent.futures: 21. was inspired by the
'java.util.concurrent' package.  In that model, a running call and its
result are represented by a *note Future: 11f1. object that abstracts
features common to threads, processes, and remote procedure calls.  That
object supports status checks (running or done), timeouts,
cancellations, adding callbacks, and access to results or exceptions.

The primary offering of the new module is a pair of executor classes for
launching and managing calls.  The goal of the executors is to make it
easier to use existing tools for making parallel calls.  They save the
effort needed to setup a pool of resources, launch the calls, create a
results queue, add time-out handling, and limit the total number of
threads, processes, or remote procedure calls.

Ideally, each application should share a single executor across multiple
components so that process and thread limits can be centrally managed.
This solves the design challenge that arises when each component has its
own competing strategy for resource management.

Both classes share a common interface with three methods: *note
submit(): a8c. for scheduling a callable and returning a *note Future:
11f1. object; *note map(): e0e. for scheduling many asynchronous calls
at a time, and *note shutdown(): 8f3. for freeing resources.  The class
is a *note context manager: 5d4. and can be used in a *note with: 5d2.
statement to assure that resources are automatically released when
currently pending futures are done executing.

A simple of example of *note ThreadPoolExecutor: 742. is a launch of
four parallel threads for copying files:

     import concurrent.futures, shutil
     with concurrent.futures.ThreadPoolExecutor(max_workers=4) as e:
         e.submit(shutil.copy, 'src1.txt', 'dest1.txt')
         e.submit(shutil.copy, 'src2.txt', 'dest2.txt')
         e.submit(shutil.copy, 'src3.txt', 'dest3.txt')
         e.submit(shutil.copy, 'src3.txt', 'dest4.txt')

Ver também
..........

PEP 3148(1) - Futures – Execute Computations Asynchronously

     PEP written by Brian Quinlan.

*note Code for Threaded Parallel URL reads: 11f2, an example using
threads to fetch multiple web pages in parallel.

*note Code for computing prime numbers in parallel: 11f3, an example
demonstrating *note ProcessPoolExecutor: 8f4.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3148/


File: python.info,  Node: PEP 3147 PYC Repository Directories,  Next: PEP 3149 ABI Version Tagged so Files,  Prev: PEP 3148 The concurrent futures module,  Up: O que há de novo no Python 3 2

1.12.5 PEP 3147: PYC Repository Directories
-------------------------------------------

Python’s scheme for caching bytecode in '.pyc' files did not work well
in environments with multiple Python interpreters.  If one interpreter
encountered a cached file created by another interpreter, it would
recompile the source and overwrite the cached file, thus losing the
benefits of caching.

The issue of “pyc fights” has become more pronounced as it has become
commonplace for Linux distributions to ship with multiple versions of
Python.  These conflicts also arise with CPython alternatives such as
Unladen Swallow.

To solve this problem, Python’s import machinery has been extended to
use distinct filenames for each interpreter.  Instead of Python 3.2 and
Python 3.3 and Unladen Swallow each competing for a file called
“mymodule.pyc”, they will now look for “mymodule.cpython-32.pyc”,
“mymodule.cpython-33.pyc”, and “mymodule.unladen10.pyc”.  And to prevent
all of these new files from cluttering source directories, the 'pyc'
files are now collected in a “__pycache__” directory stored under the
package directory.

Aside from the filenames and target directories, the new scheme has a
few aspects that are visible to the programmer:

   * Imported modules now have a *note __cached__: 2d5. attribute which
     stores the name of the actual file that was imported:

          >>> import collections
          >>> collections.__cached__
          'c:/py32/lib/__pycache__/collections.cpython-32.pyc'

   * The tag that is unique to each interpreter is accessible from the
     ‘imp’ module:

          >>> import imp
          >>> imp.get_tag()
          'cpython-32'

   * Scripts that try to deduce source filename from the imported file
     now need to be smarter.  It is no longer sufficient to simply strip
     the “c” from a “.pyc” filename.  Instead, use the new functions in
     the ‘imp’ module:

          >>> imp.source_from_cache('c:/py32/lib/__pycache__/collections.cpython-32.pyc')
          'c:/py32/lib/collections.py'
          >>> imp.cache_from_source('c:/py32/lib/collections.py')
          'c:/py32/lib/__pycache__/collections.cpython-32.pyc'

   * The *note py_compile: b3. and *note compileall: 20. modules have
     been updated to reflect the new naming convention and target
     directory.  The command-line invocation of 'compileall' has new
     options: ‘-i’ for specifying a list of files and directories to
     compile and ‘-b’ which causes bytecode files to be written to their
     legacy location rather than '__pycache__'.

   * The *note importlib.abc: 78. module has been updated with new *note
     abstract base classes: 11f5. for loading bytecode files.  The
     obsolete ABCs, ‘PyLoader’ and ‘PyPycLoader’, have been deprecated
     (instructions on how to stay Python 3.1 compatible are included
     with the documentation).

Ver também
..........

PEP 3147(1) - PYC Repository Directories

     PEP written by Barry Warsaw.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3147/


File: python.info,  Node: PEP 3149 ABI Version Tagged so Files,  Next: PEP 3333 Python Web Server Gateway Interface v1 0 1,  Prev: PEP 3147 PYC Repository Directories,  Up: O que há de novo no Python 3 2

1.12.6 PEP 3149: ABI Version Tagged .so Files
---------------------------------------------

The PYC repository directory allows multiple bytecode cache files to be
co-located.  This PEP implements a similar mechanism for shared object
files by giving them a common directory and distinct names for each
version.

The common directory is “pyshared” and the file names are made distinct
by identifying the Python implementation (such as CPython, PyPy, Jython,
etc.), the major and minor version numbers, and optional build flags
(such as “d” for debug, “m” for pymalloc, “u” for wide-unicode).  For an
arbitrary package “foo”, you may see these files when the distribution
package is installed:

     /usr/share/pyshared/foo.cpython-32m.so
     /usr/share/pyshared/foo.cpython-33md.so

In Python itself, the tags are accessible from functions in the *note
sysconfig: db. module:

     >>> import sysconfig
     >>> sysconfig.get_config_var('SOABI')       # find the version tag
     'cpython-32mu'
     >>> sysconfig.get_config_var('EXT_SUFFIX')  # find the full filename extension
     '.cpython-32mu.so'

Ver também
..........

PEP 3149(1) - ABI Version Tagged .so Files

     PEP written by Barry Warsaw.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3149/


File: python.info,  Node: PEP 3333 Python Web Server Gateway Interface v1 0 1,  Next: Outras mudanças na linguagem<12>,  Prev: PEP 3149 ABI Version Tagged so Files,  Up: O que há de novo no Python 3 2

1.12.7 PEP 3333: Python Web Server Gateway Interface v1.0.1
-----------------------------------------------------------

This informational PEP clarifies how bytes/text issues are to be handled
by the WSGI protocol.  The challenge is that string handling in Python 3
is most conveniently handled with the *note str: 44c. type even though
the HTTP protocol is itself bytes oriented.

The PEP differentiates so-called 'native strings' that are used for
request/response headers and metadata versus 'byte strings' which are
used for the bodies of requests and responses.

The 'native strings' are always of type *note str: 44c. but are
restricted to code points between 'U+0000' through 'U+00FF' which are
translatable to bytes using 'Latin-1' encoding.  These strings are used
for the keys and values in the environment dictionary and for response
headers and statuses in the ‘start_response()’ function.  They must
follow RFC 2616(1) with respect to encoding.  That is, they must either
be 'ISO-8859-1' characters or use RFC 2047(2) MIME encoding.

For developers porting WSGI applications from Python 2, here are the
salient points:

   * If the app already used strings for headers in Python 2, no change
     is needed.

   * If instead, the app encoded output headers or decoded input
     headers, then the headers will need to be re-encoded to Latin-1.
     For example, an output header encoded in utf-8 was using
     ‘h.encode('utf-8')’ now needs to convert from bytes to native
     strings using ‘h.encode('utf-8').decode('latin-1')’.

   * Values yielded by an application or sent using the ‘write()’ method
     must be byte strings.  The ‘start_response()’ function and environ
     must use native strings.  The two cannot be mixed.

For server implementers writing CGI-to-WSGI pathways or other CGI-style
protocols, the users must to be able access the environment using native
strings even though the underlying platform may have a different
convention.  To bridge this gap, the *note wsgiref: 118. module has a
new function, *note wsgiref.handlers.read_environ(): 11f8. for
transcoding CGI variables from *note os.environ: 11f9. into native
strings and returning a new dictionary.

Ver também
..........

PEP 3333(3) - Python Web Server Gateway Interface v1.0.1

     PEP written by Phillip Eby.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2616.html

   (2) https://datatracker.ietf.org/doc/html/rfc2047.html

   (3) https://peps.python.org/pep-3333/


File: python.info,  Node: Outras mudanças na linguagem<12>,  Next: New Improved and Deprecated Modules,  Prev: PEP 3333 Python Web Server Gateway Interface v1 0 1,  Up: O que há de novo no Python 3 2

1.12.8 Outras mudanças na linguagem
-----------------------------------

Algumas das mudanças menores feitas no núcleo da linguagem Python são:

   * String formatting for *note format(): 61f. and *note str.format():
     621. gained new capabilities for the format character '#'.
     Previously, for integers in binary, octal, or hexadecimal, it
     caused the output to be prefixed with ‘0b’, ‘0o’, or ‘0x’
     respectively.  Now it can also handle floats, complex, and Decimal,
     causing the output to always have a decimal point even when no
     digits follow it.

          >>> format(20, '#o')
          '0o24'
          >>> format(12.34, '#5.0f')
          '  12.'

     (Suggested by Mark Dickinson and implemented by Eric Smith in
     bpo-7094(1).)

   * There is also a new *note str.format_map(): e01. method that
     extends the capabilities of the existing *note str.format(): 621.
     method by accepting arbitrary *note mapping: 11fb. objects.  This
     new method makes it possible to use string formatting with any of
     Python’s many dictionary-like objects such as *note defaultdict:
     11fc, *note Shelf: fcf, *note ConfigParser: 1c8, or *note dbm: 31.
     It is also useful with custom *note dict: 256. subclasses that
     normalize keys before look-up or that supply a *note __missing__():
     11fd. method for unknown keys:

          >>> import shelve
          >>> d = shelve.open('tmp.shl')
          >>> 'The {project_name} status is {status} as of {date}'.format_map(d)
          'The testing project status is green as of February 15, 2011'

          >>> class LowerCasedDict(dict):
          ...     def __getitem__(self, key):
          ...         return dict.__getitem__(self, key.lower())
          ...
          >>> lcd = LowerCasedDict(part='widgets', quantity=10)
          >>> 'There are {QUANTITY} {Part} in stock'.format_map(lcd)
          'There are 10 widgets in stock'

          >>> class PlaceholderDict(dict):
          ...     def __missing__(self, key):
          ...         return '<{}>'.format(key)
          ...
          >>> 'Hello {name}, welcome to {location}'.format_map(PlaceholderDict())
          'Hello <name>, welcome to <location>'

     (Suggested by Raymond Hettinger and implemented by Eric Smith in
     bpo-6081(2).)

   * The interpreter can now be started with a quiet option, ‘-q’, to
     prevent the copyright and version information from being displayed
     in the interactive mode.  The option can be introspected using the
     *note sys.flags: 68c. attribute:

          $ python -q
          >>> sys.flags
          sys.flags(debug=0, division_warning=0, inspect=0, interactive=0,
          optimize=0, dont_write_bytecode=0, no_user_site=0, no_site=0,
          ignore_environment=0, verbose=0, bytes_warning=0, quiet=1)

     (Contributed by Marcin Wojdyr in bpo-1772833(3)).

   * The *note hasattr(): 4d2. function works by calling *note
     getattr(): bea. and detecting whether an exception is raised.  This
     technique allows it to detect methods created dynamically by *note
     __getattr__(): 4d3. or *note __getattribute__(): beb. which would
     otherwise be absent from the class dictionary.  Formerly, 'hasattr'
     would catch any exception, possibly masking genuine errors.  Now,
     'hasattr' has been tightened to only catch *note AttributeError:
     34b. and let other exceptions pass through:

          >>> class A:
          ...     @property
          ...     def f(self):
          ...         return 1 // 0
          ...
          >>> a = A()
          >>> hasattr(a, 'f')
          Traceback (most recent call last):
            ...
          ZeroDivisionError: integer division or modulo by zero

     (Discovered by Yury Selivanov and fixed by Benjamin Peterson;
     bpo-9666(4).)

   * The *note str(): 44c. of a float or complex number is now the same
     as its *note repr(): 800.  Previously, the *note str(): 44c. form
     was shorter but that just caused confusion and is no longer needed
     now that the shortest possible *note repr(): 800. is displayed by
     default:

          >>> import math
          >>> repr(math.pi)
          '3.141592653589793'
          >>> str(math.pi)
          '3.141592653589793'

     (Proposed and implemented by Mark Dickinson; bpo-9337(5).)

   * *note memoryview: 2eb. objects now have a *note release(): 11fe.
     method and they also now support the context management protocol.
     This allows timely release of any resources that were acquired when
     requesting a buffer from the original object.

          >>> with memoryview(b'abcdefgh') as v:
          ...     print(v.tolist())
          [97, 98, 99, 100, 101, 102, 103, 104]

     (Added by Antoine Pitrou; bpo-9757(6).)

   * Previously it was illegal to delete a name from the local namespace
     if it occurs as a free variable in a nested block:

          def outer(x):
              def inner():
                  return x
              inner()
              del x

     This is now allowed.  Remember that the target of an *note except:
     18b. clause is cleared, so this code which used to work with Python
     2.6, raised a *note SyntaxError: 18d. with Python 3.1 and now works
     again:

          def f():
              def print_error():
                  print(e)
              try:
                  something
              except Exception as e:
                  print_error()
                  # implicit "del e" here

     (See bpo-4617(7).)

   * *note Struct sequence types: 11ff. are now subclasses of tuple.
     This means that C structures like those returned by *note
     os.stat(): 4a0, *note time.gmtime(): 1200, and *note
     sys.version_info: 6a0. now work like a *note named tuple: 64e. and
     now work with functions and methods that expect a tuple as an
     argument.  This is a big step forward in making the C structures as
     flexible as their pure Python counterparts:

          >>> import sys
          >>> isinstance(sys.version_info, tuple)
          True
          >>> 'Version %d.%d.%d %s(%d)' % sys.version_info
          'Version 3.2.0 final(0)'

     (Suggested by Arfrever Frehtes Taifersar Arahesis and implemented
     by Benjamin Peterson in bpo-8413(8).)

   * Warnings are now easier to control using the *note PYTHONWARNINGS:
     bc2. environment variable as an alternative to using ‘-W’ at the
     command line:

          $ export PYTHONWARNINGS='ignore::RuntimeWarning::,once::UnicodeWarning::'

     (Suggested by Barry Warsaw and implemented by Philip Jenvey in
     bpo-7301(9).)

   * A new warning category, *note ResourceWarning: 244, has been added.
     It is emitted when potential issues with resource consumption or
     cleanup are detected.  It is silenced by default in normal release
     builds but can be enabled through the means provided by the *note
     warnings: 112. module, or on the command line.

     A *note ResourceWarning: 244. is issued at interpreter shutdown if
     the *note gc.garbage: 1201. list isn’t empty, and if *note
     gc.DEBUG_UNCOLLECTABLE: 1202. is set, all uncollectable objects are
     printed.  This is meant to make the programmer aware that their
     code contains object finalization issues.

     A *note ResourceWarning: 244. is also issued when a *note file
     object: 1203. is destroyed without having been explicitly closed.
     While the deallocator for such object ensures it closes the
     underlying operating system resource (usually, a file descriptor),
     the delay in deallocating the object could produce various issues,
     especially under Windows.  Here is an example of enabling the
     warning from the command line:

          $ python -q -Wdefault
          >>> f = open("foo", "wb")
          >>> del f
          __main__:1: ResourceWarning: unclosed file <_io.BufferedWriter name='foo'>

     (Added by Antoine Pitrou and Georg Brandl in bpo-10093(10) and
     bpo-477863(11).)

   * *note range: 94a. objects now support 'index' and 'count' methods.
     This is part of an effort to make more objects fully implement the
     *note collections.Sequence: 1204. *note abstract base class: 11f5.
     As a result, the language will have a more uniform API. In
     addition, *note range: 94a. objects now support slicing and
     negative indices, even with values larger than *note sys.maxsize:
     1205.  This makes 'range' more interoperable with lists:

          >>> range(0, 100, 2).count(10)
          1
          >>> range(0, 100, 2).index(10)
          5
          >>> range(0, 100, 2)[5]
          10
          >>> range(0, 100, 2)[0:5]
          range(0, 10, 2)

     (Contributed by Daniel Stutzbach in bpo-9213(12), by Alexander
     Belopolsky in bpo-2690(13), and by Nick Coghlan in bpo-10889(14).)

   * The *note callable(): 1206. builtin function from Py2.x was
     resurrected.  It provides a concise, readable alternative to using
     an *note abstract base class: 11f5. in an expression like
     ‘isinstance(x, collections.Callable)’:

          >>> callable(max)
          True
          >>> callable(20)
          False

     (See bpo-10518(15).)

   * Python’s import mechanism can now load modules installed in
     directories with non-ASCII characters in the path name.  This
     solved an aggravating problem with home directories for users with
     non-ASCII characters in their usernames.

     (Required extensive work by Victor Stinner in bpo-9425(16).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=7094

   (2) https://bugs.python.org/issue?@action=redirect&bpo=6081

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1772833

   (4) https://bugs.python.org/issue?@action=redirect&bpo=9666

   (5) https://bugs.python.org/issue?@action=redirect&bpo=9337

   (6) https://bugs.python.org/issue?@action=redirect&bpo=9757

   (7) https://bugs.python.org/issue?@action=redirect&bpo=4617

   (8) https://bugs.python.org/issue?@action=redirect&bpo=8413

   (9) https://bugs.python.org/issue?@action=redirect&bpo=7301

   (10) https://bugs.python.org/issue?@action=redirect&bpo=10093

   (11) https://bugs.python.org/issue?@action=redirect&bpo=477863

   (12) https://bugs.python.org/issue?@action=redirect&bpo=9213

   (13) https://bugs.python.org/issue?@action=redirect&bpo=2690

   (14) https://bugs.python.org/issue?@action=redirect&bpo=10889

   (15) https://bugs.python.org/issue?@action=redirect&bpo=10518

   (16) https://bugs.python.org/issue?@action=redirect&bpo=9425


File: python.info,  Node: New Improved and Deprecated Modules,  Next: Multi-threading,  Prev: Outras mudanças na linguagem<12>,  Up: O que há de novo no Python 3 2

1.12.9 New, Improved, and Deprecated Modules
--------------------------------------------

Python’s standard library has undergone significant maintenance efforts
and quality improvements.

The biggest news for Python 3.2 is that the *note email: 3b. package,
*note mailbox: 8b. module, and ‘nntplib’ modules now work correctly with
the bytes/text model in Python 3.  For the first time, there is correct
handling of messages with mixed encodings.

Throughout the standard library, there has been more careful attention
to encodings and text versus bytes issues.  In particular, interactions
with the operating system are now better able to exchange non-ASCII data
using the Windows MBCS encoding, locale-aware encodings, or UTF-8.

Another significant win is the addition of substantially better support
for 'SSL' connections and security certificates.

In addition, more classes now implement a *note context manager: 5d4. to
support convenient and reliable resource clean-up using a *note with:
5d2. statement.

* Menu:

* email: email<6>.
* elementtree::
* functools: functools<7>.
* itertools: itertools<7>.
* collections: collections<8>.
* threading: threading<9>.
* datetime and time::
* math: math<10>.
* abc: abc<3>.
* io: io<7>.
* reprlib::
* logging: logging<8>.
* csv: csv<4>.
* contextlib: contextlib<8>.
* decimal and fractions::
* ftp::
* popen::
* select: select<3>.
* gzip and zipfile::
* tarfile: tarfile<10>.
* hashlib: hashlib<7>.
* ast: ast<5>.
* os: os<13>.
* shutil: shutil<8>.
* sqlite3: sqlite3<11>.
* html: html<3>.
* socket: socket<11>.
* ssl: ssl<12>.
* nntp::
* сертифікати::
* imaplib: imaplib<4>.
* http.client: http client<4>.
* unittest: unittest<11>.
* random: random<5>.
* poplib: poplib<4>.
* asyncore: asyncore<2>.
* tempfile: tempfile<5>.
* inspect: inspect<10>.
* pydoc: pydoc<6>.
* dis: dis<5>.
* dbm: dbm<7>.
* ctypes: ctypes<3>.
* site: site<4>.
* sysconfig: sysconfig<3>.
* pdb: pdb<8>.
* configparser: configparser<5>.
* urllib.parse: urllib parse<6>.
* mailbox::
* turtledemo::


File: python.info,  Node: email<6>,  Next: elementtree,  Up: New Improved and Deprecated Modules

1.12.9.1 email
..............

The usability of the *note email: 3b. package in Python 3 has been
mostly fixed by the extensive efforts of R. David Murray.  The problem
was that emails are typically read and stored in the form of *note
bytes: 1c2. rather than *note str: 44c. text, and they may contain
multiple encodings within a single email.  So, the email package had to
be extended to parse and generate email messages in bytes format.

   * New functions *note message_from_bytes(): 1209. and *note
     message_from_binary_file(): 120a, and new classes *note
     BytesFeedParser: 120b. and *note BytesParser: 120c. allow binary
     message data to be parsed into model objects.

   * Given bytes input to the model, *note get_payload(): 120d. will by
     default decode a message body that has a
     ‘Content-Transfer-Encoding’ of '8bit' using the charset specified
     in the MIME headers and return the resulting string.

   * Given bytes input to the model, *note Generator: 120e. will convert
     message bodies that have a ‘Content-Transfer-Encoding’ of '8bit' to
     instead have a '7bit' ‘Content-Transfer-Encoding’.

     Headers with unencoded non-ASCII bytes are deemed to be RFC
     2047(1)-encoded using the 'unknown-8bit' character set.

   * A new class *note BytesGenerator: 120f. produces bytes as output,
     preserving any unchanged non-ASCII data that was present in the
     input used to build the model, including message bodies with a
     ‘Content-Transfer-Encoding’ of '8bit'.

   * The *note smtplib: ca. *note SMTP: 934. class now accepts a byte
     string for the 'msg' argument to the *note sendmail(): e88. method,
     and a new method, *note send_message(): e89. accepts a *note
     Message: 27c. object and can optionally obtain the 'from_addr' and
     'to_addrs' addresses directly from the object.

(Proposed and implemented by R. David Murray, bpo-4661(2) and
bpo-10321(3).)

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2047.html

   (2) https://bugs.python.org/issue?@action=redirect&bpo=4661

   (3) https://bugs.python.org/issue?@action=redirect&bpo=10321


File: python.info,  Node: elementtree,  Next: functools<7>,  Prev: email<6>,  Up: New Improved and Deprecated Modules

1.12.9.2 elementtree
....................

The *note xml.etree.ElementTree: 125. package and its
‘xml.etree.cElementTree’ counterpart have been updated to version 1.3.

Several new and useful functions and methods have been added:

   * *note xml.etree.ElementTree.fromstringlist(): 1211. which builds an
     XML document from a sequence of fragments

   * *note xml.etree.ElementTree.register_namespace(): 1212. for
     registering a global namespace prefix

   * *note xml.etree.ElementTree.tostringlist(): 102c. for string
     representation including all sublists

   * *note xml.etree.ElementTree.Element.extend(): 1213. for appending a
     sequence of zero or more elements

   * *note xml.etree.ElementTree.Element.iterfind(): 1214. searches an
     element and subelements

   * *note xml.etree.ElementTree.Element.itertext(): 1215. creates a
     text iterator over an element and its subelements

   * *note xml.etree.ElementTree.TreeBuilder.end(): 1216. closes the
     current element

   * *note xml.etree.ElementTree.TreeBuilder.doctype(): aa6. handles a
     doctype declaration

Two methods have been deprecated:

   * ‘xml.etree.ElementTree.getchildren()’ use ‘list(elem)’ instead.

   * ‘xml.etree.ElementTree.getiterator()’ use ‘Element.iter’ instead.

For details of the update, see Introducing ElementTree(1) on Fredrik
Lundh’s website.

(Contributed by Florent Xicluna and Fredrik Lundh, bpo-6472(2).)

   ---------- Footnotes ----------

   (1) 
https://web.archive.org/web/20200703234532/http://effbot.org/zone/elementtree-13-intro.htm

   (2) https://bugs.python.org/issue?@action=redirect&bpo=6472


File: python.info,  Node: functools<7>,  Next: itertools<7>,  Prev: elementtree,  Up: New Improved and Deprecated Modules

1.12.9.3 functools
..................

   * The *note functools: 5f. module includes a new decorator for
     caching function calls.  *note functools.lru_cache(): 9f7. can save
     repeated queries to an external resource whenever the results are
     expected to be the same.

     For example, adding a caching decorator to a database query
     function can save database accesses for popular searches:

          >>> import functools
          >>> @functools.lru_cache(maxsize=300)
          ... def get_phone_number(name):
          ...     c = conn.cursor()
          ...     c.execute('SELECT phonenumber FROM phonelist WHERE name=?', (name,))
          ...     return c.fetchone()[0]

          >>> for name in user_requests:
          ...     get_phone_number(name)        # cached lookup

     To help with choosing an effective cache size, the wrapped function
     is instrumented for tracking cache statistics:

          >>> get_phone_number.cache_info()
          CacheInfo(hits=4805, misses=980, maxsize=300, currsize=300)

     If the phonelist table gets updated, the outdated contents of the
     cache can be cleared with:

          >>> get_phone_number.cache_clear()

     (Contributed by Raymond Hettinger and incorporating design ideas
     from Jim Baker, Miki Tebeka, and Nick Coghlan; see recipe
     498245(1), recipe 577479(2), bpo-10586(3), and bpo-10593(4).)

   * The *note functools.wraps(): f91. decorator now adds a
     ‘__wrapped__’ attribute pointing to the original callable function.
     This allows wrapped functions to be introspected.  It also copies
     *note __annotations__: 1218. if defined.  And now it also
     gracefully skips over missing attributes such as *note __doc__:
     1219. which might not be defined for the wrapped callable.

     In the above example, the cache can be removed by recovering the
     original function:

          >>> get_phone_number = get_phone_number.__wrapped__    # uncached function

     (By Nick Coghlan and Terrence Cole; bpo-9567(5), bpo-3445(6), and
     bpo-8814(7).)

   * To help write classes with rich comparison methods, a new decorator
     *note functools.total_ordering(): f75. will use existing equality
     and inequality methods to fill in the remaining methods.

     For example, supplying '__eq__' and '__lt__' will enable *note
     total_ordering(): f75. to fill-in '__le__', '__gt__' and '__ge__':

          @total_ordering
          class Student:
              def __eq__(self, other):
                  return ((self.lastname.lower(), self.firstname.lower()) ==
                          (other.lastname.lower(), other.firstname.lower()))

              def __lt__(self, other):
                  return ((self.lastname.lower(), self.firstname.lower()) <
                          (other.lastname.lower(), other.firstname.lower()))

     With the 'total_ordering' decorator, the remaining comparison
     methods are filled in automatically.

     (Contributed by Raymond Hettinger.)

   * To aid in porting programs from Python 2, the *note
     functools.cmp_to_key(): 121a. function converts an old-style
     comparison function to modern *note key function: e31.:

          >>> # locale-aware sort order
          >>> sorted(iterable, key=cmp_to_key(locale.strcoll))

     For sorting examples and a brief sorting tutorial, see the Sorting
     HowTo(8) tutorial.

     (Contributed by Raymond Hettinger.)

   ---------- Footnotes ----------

   (1) 
https://code.activestate.com/recipes/498245-lru-and-lfu-cache-decorators/

   (2) 
https://code.activestate.com/recipes/577479-simple-caching-decorator/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=10586

   (4) https://bugs.python.org/issue?@action=redirect&bpo=10593

   (5) https://bugs.python.org/issue?@action=redirect&bpo=9567

   (6) https://bugs.python.org/issue?@action=redirect&bpo=3445

   (7) https://bugs.python.org/issue?@action=redirect&bpo=8814

   (8) https://wiki.python.org/moin/HowTo/Sorting/


File: python.info,  Node: itertools<7>,  Next: collections<8>,  Prev: functools<7>,  Up: New Improved and Deprecated Modules

1.12.9.4 itertools
..................

   * The *note itertools: 81. module has a new *note accumulate(): a05.
     function modeled on APL’s 'scan' operator and Numpy’s 'accumulate'
     function:

          >>> from itertools import accumulate
          >>> list(accumulate([8, 2, 50]))
          [8, 10, 60]

          >>> prob_dist = [0.1, 0.4, 0.2, 0.3]
          >>> list(accumulate(prob_dist))      # cumulative probability distribution
          [0.1, 0.5, 0.7, 1.0]

     For an example using *note accumulate(): a05, see the *note
     examples for the random module: 121c.

     (Contributed by Raymond Hettinger and incorporating design
     suggestions from Mark Dickinson.)


File: python.info,  Node: collections<8>,  Next: threading<9>,  Prev: itertools<7>,  Up: New Improved and Deprecated Modules

1.12.9.5 collections
....................

   * The *note collections.Counter: 10d0. class now has two forms of
     in-place subtraction, the existing '-=' operator for saturating
     subtraction(1) and the new *note subtract(): 121e. method for
     regular subtraction.  The former is suitable for multisets(2) which
     only have positive counts, and the latter is more suitable for use
     cases that allow negative counts:

          >>> from collections import Counter
          >>> tally = Counter(dogs=5, cats=3)
          >>> tally -= Counter(dogs=2, cats=8)    # saturating subtraction
          >>> tally
          Counter({'dogs': 3})

          >>> tally = Counter(dogs=5, cats=3)
          >>> tally.subtract(dogs=2, cats=8)      # regular subtraction
          >>> tally
          Counter({'dogs': 3, 'cats': -5})

     (Contributed by Raymond Hettinger.)

   * The *note collections.OrderedDict: 5db. class has a new method
     *note move_to_end(): 121f. which takes an existing key and moves it
     to either the first or last position in the ordered sequence.

     The default is to move an item to the last position.  This is
     equivalent of renewing an entry with ‘od[k] = od.pop(k)’.

     A fast move-to-end operation is useful for resequencing entries.
     For example, an ordered dictionary can be used to track order of
     access by aging entries from the oldest to the most recently
     accessed.

          >>> from collections import OrderedDict
          >>> d = OrderedDict.fromkeys(['a', 'b', 'X', 'd', 'e'])
          >>> list(d)
          ['a', 'b', 'X', 'd', 'e']
          >>> d.move_to_end('X')
          >>> list(d)
          ['a', 'b', 'd', 'e', 'X']

     (Contributed by Raymond Hettinger.)

   * The *note collections.deque: 5dc. class grew two new methods *note
     count(): 1220. and *note reverse(): 1221. that make them more
     substitutable for *note list: 611. objects:

          >>> from collections import deque
          >>> d = deque('simsalabim')
          >>> d.count('s')
          2
          >>> d.reverse()
          >>> d
          deque(['m', 'i', 'b', 'a', 'l', 'a', 's', 'm', 'i', 's'])

     (Contributed by Raymond Hettinger.)

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Saturation_arithmetic

   (2) https://en.wikipedia.org/wiki/Multiset


File: python.info,  Node: threading<9>,  Next: datetime and time,  Prev: collections<8>,  Up: New Improved and Deprecated Modules

1.12.9.6 threading
..................

The *note threading: ed. module has a new *note Barrier: 1223.
synchronization class for making multiple threads wait until all of them
have reached a common barrier point.  Barriers are useful for making
sure that a task with multiple preconditions does not run until all of
the predecessor tasks are complete.

Barriers can work with an arbitrary number of threads.  This is a
generalization of a Rendezvous(1) which is defined for only two threads.

Implemented as a two-phase cyclic barrier, *note Barrier: 1223. objects
are suitable for use in loops.  The separate 'filling' and 'draining'
phases assure that all threads get released (drained) before any one of
them can loop back and re-enter the barrier.  The barrier fully resets
after each cycle.

Example of using barriers:

     from threading import Barrier, Thread

     def get_votes(site):
         ballots = conduct_election(site)
         all_polls_closed.wait()        # do not count until all polls are closed
         totals = summarize(ballots)
         publish(site, totals)

     all_polls_closed = Barrier(len(sites))
     for site in sites:
         Thread(target=get_votes, args=(site,)).start()

In this example, the barrier enforces a rule that votes cannot be
counted at any polling site until all polls are closed.  Notice how a
solution with a barrier is similar to one with *note
threading.Thread.join(): 1224, but the threads stay alive and continue
to do work (summarizing ballots) after the barrier point is crossed.

If any of the predecessor tasks can hang or be delayed, a barrier can be
created with an optional 'timeout' parameter.  Then if the timeout
period elapses before all the predecessor tasks reach the barrier point,
all waiting threads are released and a *note BrokenBarrierError: 1225.
exception is raised:

     def get_votes(site):
         ballots = conduct_election(site)
         try:
             all_polls_closed.wait(timeout=midnight - time.now())
         except BrokenBarrierError:
             lockbox = seal_ballots(ballots)
             queue.put(lockbox)
         else:
             totals = summarize(ballots)
             publish(site, totals)

In this example, the barrier enforces a more robust rule.  If some
election sites do not finish before midnight, the barrier times-out and
the ballots are sealed and deposited in a queue for later handling.

See Barrier Synchronization Patterns(2) for more examples of how
barriers can be used in parallel computing.  Also, there is a simple but
thorough explanation of barriers in The Little Book of Semaphores(3),
'section 3.6'.

(Contributed by Kristján Valur Jónsson with an API review by Jeffrey
Yasskin in bpo-8777(4).)

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Synchronous_rendezvous

   (2) 
https://osl.cs.illinois.edu/media/papers/karmani-2009-barrier_synchronization_pattern.pdf

   (3) https://greenteapress.com/semaphores/LittleBookOfSemaphores.pdf

   (4) https://bugs.python.org/issue?@action=redirect&bpo=8777


File: python.info,  Node: datetime and time,  Next: math<10>,  Prev: threading<9>,  Up: New Improved and Deprecated Modules

1.12.9.7 datetime and time
..........................

   * The *note datetime: 30. module has a new type *note timezone: 10fe.
     that implements the *note tzinfo: 5de. interface by returning a
     fixed UTC offset and timezone name.  This makes it easier to create
     timezone-aware datetime objects:

          >>> from datetime import datetime, timezone

          >>> datetime.now(timezone.utc)
          datetime.datetime(2010, 12, 8, 21, 4, 2, 923754, tzinfo=datetime.timezone.utc)

          >>> datetime.strptime("01/01/2000 12:00 +0000", "%m/%d/%Y %H:%M %z")
          datetime.datetime(2000, 1, 1, 12, 0, tzinfo=datetime.timezone.utc)

   * Also, *note timedelta: 9d7. objects can now be multiplied by *note
     float: 2f7. and divided by *note float: 2f7. and *note int: 257.
     objects.  And *note timedelta: 9d7. objects can now divide one
     another.

   * The *note datetime.date.strftime(): cb0. method is no longer
     restricted to years after 1900.  The new supported year range is
     from 1000 to 9999 inclusive.

   * Whenever a two-digit year is used in a time tuple, the
     interpretation has been governed by ‘time.accept2dyear’.  The
     default is ‘True’ which means that for a two-digit year, the
     century is guessed according to the POSIX rules governing the ‘%y’
     strptime format.

     Starting with Py3.2, use of the century guessing heuristic will
     emit a *note DeprecationWarning: 1a5.  Instead, it is recommended
     that ‘time.accept2dyear’ be set to ‘False’ so that large date
     ranges can be used without guesswork:

          >>> import time, warnings
          >>> warnings.resetwarnings()      # remove the default warning filters

          >>> time.accept2dyear = True      # guess whether 11 means 11 or 2011
          >>> time.asctime((11, 1, 1, 12, 34, 56, 4, 1, 0))
          Warning (from warnings module):
            ...
          DeprecationWarning: Century info guessed for a 2-digit year.
          'Fri Jan  1 12:34:56 2011'

          >>> time.accept2dyear = False     # use the full range of allowable dates
          >>> time.asctime((11, 1, 1, 12, 34, 56, 4, 1, 0))
          'Fri Jan  1 12:34:56 11'

     Several functions now have significantly expanded date ranges.
     When ‘time.accept2dyear’ is false, the *note time.asctime(): 1227.
     function will accept any year that fits in a C int, while the *note
     time.mktime(): 1228. and *note time.strftime(): 1229. functions
     will accept the full range supported by the corresponding operating
     system functions.

(Contributed by Alexander Belopolsky and Victor Stinner in
bpo-1289118(1), bpo-5094(2), bpo-6641(3), bpo-2706(4), bpo-1777412(5),
bpo-8013(6), and bpo-10827(7).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1289118

   (2) https://bugs.python.org/issue?@action=redirect&bpo=5094

   (3) https://bugs.python.org/issue?@action=redirect&bpo=6641

   (4) https://bugs.python.org/issue?@action=redirect&bpo=2706

   (5) https://bugs.python.org/issue?@action=redirect&bpo=1777412

   (6) https://bugs.python.org/issue?@action=redirect&bpo=8013

   (7) https://bugs.python.org/issue?@action=redirect&bpo=10827


File: python.info,  Node: math<10>,  Next: abc<3>,  Prev: datetime and time,  Up: New Improved and Deprecated Modules

1.12.9.8 math
.............

The *note math: 8e. module has been updated with six new functions
inspired by the C99 standard.

The *note isfinite(): 122b. function provides a reliable and fast way to
detect special values.  It returns ‘True’ for regular numbers and
‘False’ for 'Nan' or 'Infinity':

     >>> from math import isfinite
     >>> [isfinite(x) for x in (123, 4.56, float('Nan'), float('Inf'))]
     [True, True, False, False]

The *note expm1(): 122c. function computes ‘e**x-1’ for small values of
'x' without incurring the loss of precision that usually accompanies the
subtraction of nearly equal quantities:

     >>> from math import expm1
     >>> expm1(0.013671875)   # more accurate way to compute e**x-1 for a small x
     0.013765762467652909

The *note erf(): bf3. function computes a probability integral or
Gaussian error function(1).  The complementary error function, *note
erfc(): bf4, is ‘1 - erf(x)’:

     >>> from math import erf, erfc, sqrt
     >>> erf(1.0/sqrt(2.0))   # portion of normal distribution within 1 standard deviation
     0.682689492137086
     >>> erfc(1.0/sqrt(2.0))  # portion of normal distribution outside 1 standard deviation
     0.31731050786291404
     >>> erf(1.0/sqrt(2.0)) + erfc(1.0/sqrt(2.0))
     1.0

The *note gamma(): 122d. function is a continuous extension of the
factorial function.  See ‘https://en.wikipedia.org/wiki/Gamma_function’
for details.  Because the function is related to factorials, it grows
large even for small values of 'x', so there is also a *note lgamma():
122e. function for computing the natural logarithm of the gamma
function:

     >>> from math import gamma, lgamma
     >>> gamma(7.0)           # six factorial
     720.0
     >>> lgamma(801.0)        # log(800 factorial)
     4551.950730698041

(Contributed by Mark Dickinson.)

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Error_function


File: python.info,  Node: abc<3>,  Next: io<7>,  Prev: math<10>,  Up: New Improved and Deprecated Modules

1.12.9.9 abc
............

The *note abc: 4. module now supports *note abstractclassmethod(): 10c5.
and *note abstractstaticmethod(): 10c6.

These tools make it possible to define an *note abstract base class:
11f5. that requires a particular *note classmethod(): 166. or *note
staticmethod(): 416. to be implemented:

     class Temperature(metaclass=abc.ABCMeta):
         @abc.abstractclassmethod
         def from_fahrenheit(cls, t):
             ...
         @abc.abstractclassmethod
         def from_celsius(cls, t):
             ...

(Patch submitted by Daniel Urban; bpo-5867(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5867


File: python.info,  Node: io<7>,  Next: reprlib,  Prev: abc<3>,  Up: New Improved and Deprecated Modules

1.12.9.10 io
............

The *note io.BytesIO: ed3. has a new method, *note getbuffer(): 1231,
which provides functionality similar to *note memoryview(): 2eb.  It
creates an editable view of the data without making a copy.  The
buffer’s random access and support for slice notation are well-suited to
in-place editing:

     >>> REC_LEN, LOC_START, LOC_LEN = 34, 7, 11

     >>> def change_location(buffer, record_number, location):
     ...     start = record_number * REC_LEN + LOC_START
     ...     buffer[start: start+LOC_LEN] = location

     >>> import io

     >>> byte_stream = io.BytesIO(
     ...     b'G3805  storeroom  Main chassis    '
     ...     b'X7899  shipping   Reserve cog     '
     ...     b'L6988  receiving  Primary sprocket'
     ... )
     >>> buffer = byte_stream.getbuffer()
     >>> change_location(buffer, 1, b'warehouse  ')
     >>> change_location(buffer, 0, b'showroom   ')
     >>> print(byte_stream.getvalue())
     b'G3805  showroom   Main chassis    '
     b'X7899  warehouse  Reserve cog     '
     b'L6988  receiving  Primary sprocket'

(Contributed by Antoine Pitrou in bpo-5506(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5506


File: python.info,  Node: reprlib,  Next: logging<8>,  Prev: io<7>,  Up: New Improved and Deprecated Modules

1.12.9.11 reprlib
.................

When writing a *note __repr__(): 61c. method for a custom container, it
is easy to forget to handle the case where a member refers back to the
container itself.  Python’s builtin objects such as *note list: 611. and
*note set: 5d9. handle self-reference by displaying “…” in the recursive
part of the representation string.

To help write such *note __repr__(): 61c. methods, the *note reprlib:
bb. module has a new decorator, *note recursive_repr(): 1233, for
detecting recursive calls to ‘__repr__()’ and substituting a placeholder
string instead:

     >>> class MyList(list):
     ...     @recursive_repr()
     ...     def __repr__(self):
     ...         return '<' + '|'.join(map(repr, self)) + '>'
     ...
     >>> m = MyList('abc')
     >>> m.append(m)
     >>> m.append('x')
     >>> print(m)
     <'a'|'b'|'c'|...|'x'>

(Contributed by Raymond Hettinger in bpo-9826(1) and bpo-9840(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9826

   (2) https://bugs.python.org/issue?@action=redirect&bpo=9840


File: python.info,  Node: logging<8>,  Next: csv<4>,  Prev: reprlib,  Up: New Improved and Deprecated Modules

1.12.9.12 logging
.................

In addition to dictionary-based configuration described above, the *note
logging: 87. package has many other improvements.

The logging documentation has been augmented by a *note basic tutorial:
1235, an *note advanced tutorial: 1236, and a *note cookbook: 1237. of
logging recipes.  These documents are the fastest way to learn about
logging.

The *note logging.basicConfig(): a08. set-up function gained a 'style'
argument to support three different types of string formatting.  It
defaults to “%” for traditional %-formatting, can be set to “{” for the
new *note str.format(): 621. style, or can be set to “$” for the
shell-style formatting provided by *note string.Template: 687.  The
following three configurations are equivalent:

     >>> from logging import basicConfig
     >>> basicConfig(style='%', format="%(name)s -> %(levelname)s: %(message)s")
     >>> basicConfig(style='{', format="{name} -> {levelname} {message}")
     >>> basicConfig(style='$', format="$name -> $levelname: $message")

If no configuration is set-up before a logging event occurs, there is
now a default configuration using a *note StreamHandler: 1238. directed
to *note sys.stderr: 940. for events of ‘WARNING’ level or higher.
Formerly, an event occurring before a configuration was set-up would
either raise an exception or silently drop the event depending on the
value of *note logging.raiseExceptions: 1239.  The new default handler
is stored in *note logging.lastResort: 123a.

The use of filters has been simplified.  Instead of creating a *note
Filter: 123b. object, the predicate can be any Python callable that
returns ‘True’ or ‘False’.

There were a number of other improvements that add flexibility and
simplify configuration.  See the module documentation for a full listing
of changes in Python 3.2.


File: python.info,  Node: csv<4>,  Next: contextlib<8>,  Prev: logging<8>,  Up: New Improved and Deprecated Modules

1.12.9.13 csv
.............

The *note csv: 29. module now supports a new dialect, *note
unix_dialect: 123d, which applies quoting for all fields and a
traditional Unix style with ‘'\n'’ as the line terminator.  The
registered dialect name is ‘unix’.

The *note csv.DictWriter: 123e. has a new method, *note writeheader():
123f. for writing-out an initial row to document the field names:

     >>> import csv, sys
     >>> w = csv.DictWriter(sys.stdout, ['name', 'dept'], dialect='unix')
     >>> w.writeheader()
     "name","dept"
     >>> w.writerows([
     ...     {'name': 'tom', 'dept': 'accounting'},
     ...     {'name': 'susan', 'dept': 'Salesl'}])
     "tom","accounting"
     "susan","sales"

(New dialect suggested by Jay Talbot in bpo-5975(1), and the new method
suggested by Ed Abraham in bpo-1537721(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5975

   (2) https://bugs.python.org/issue?@action=redirect&bpo=1537721


File: python.info,  Node: contextlib<8>,  Next: decimal and fractions,  Prev: csv<4>,  Up: New Improved and Deprecated Modules

1.12.9.14 contextlib
....................

There is a new and slightly mind-blowing tool *note ContextDecorator:
1241. that is helpful for creating a *note context manager: 5d4. that
does double duty as a function decorator.

As a convenience, this new functionality is used by *note
contextmanager(): 1242. so that no extra effort is needed to support
both roles.

The basic idea is that both context managers and function decorators can
be used for pre-action and post-action wrappers.  Context managers wrap
a group of statements using a *note with: 5d2. statement, and function
decorators wrap a group of statements enclosed in a function.  So,
occasionally there is a need to write a pre-action or post-action
wrapper that can be used in either role.

For example, it is sometimes useful to wrap functions or groups of
statements with a logger that can track the time of entry and time of
exit.  Rather than writing both a function decorator and a context
manager for the task, the *note contextmanager(): 1242. provides both
capabilities in a single definition:

     from contextlib import contextmanager
     import logging

     logging.basicConfig(level=logging.INFO)

     @contextmanager
     def track_entry_and_exit(name):
         logging.info('Entering: %s', name)
         yield
         logging.info('Exiting: %s', name)

Formerly, this would have only been usable as a context manager:

     with track_entry_and_exit('widget loader'):
         print('Some time consuming activity goes here')
         load_widget()

Now, it can be used as a decorator as well:

     @track_entry_and_exit('widget loader')
     def activity():
         print('Some time consuming activity goes here')
         load_widget()

Trying to fulfill two roles at once places some limitations on the
technique.  Context managers normally have the flexibility to return an
argument usable by a *note with: 5d2. statement, but there is no
parallel for function decorators.

In the above example, there is not a clean way for the
'track_entry_and_exit' context manager to return a logging instance for
use in the body of enclosed statements.

(Contributed by Michael Foord in bpo-9110(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9110


File: python.info,  Node: decimal and fractions,  Next: ftp,  Prev: contextlib<8>,  Up: New Improved and Deprecated Modules

1.12.9.15 decimal and fractions
...............................

Mark Dickinson crafted an elegant and efficient scheme for assuring that
different numeric datatypes will have the same hash value whenever their
actual values are equal (bpo-8188(1)):

     assert hash(Fraction(3, 2)) == hash(1.5) == \
            hash(Decimal("1.5")) == hash(complex(1.5, 0))

Some of the hashing details are exposed through a new attribute, *note
sys.hash_info: 1035, which describes the bit width of the hash value,
the prime modulus, the hash values for 'infinity' and 'nan', and the
multiplier used for the imaginary part of a number:

     >>> sys.hash_info
     sys.hash_info(width=64, modulus=2305843009213693951, inf=314159, nan=0, imag=1000003)

An early decision to limit the interoperability of various numeric types
has been relaxed.  It is still unsupported (and ill-advised) to have
implicit mixing in arithmetic expressions such as ‘Decimal('1.1') +
float('1.1')’ because the latter loses information in the process of
constructing the binary float.  However, since existing floating-point
value can be converted losslessly to either a decimal or rational
representation, it makes sense to add them to the constructor and to
support mixed-type comparisons.

   * The *note decimal.Decimal: 29d. constructor now accepts *note
     float: 2f7. objects directly so there in no longer a need to use
     the *note from_float(): 1244. method (bpo-8257(2)).

   * Mixed type comparisons are now fully supported so that *note
     Decimal: 29d. objects can be directly compared with *note float:
     2f7. and *note fractions.Fraction: 1e7. (bpo-2531(3) and
     bpo-8188(4)).

Similar changes were made to *note fractions.Fraction: 1e7. so that the
*note from_float(): 1245. and *note from_decimal(): 1246. methods are no
longer needed (bpo-8294(5)):

     >>> from decimal import Decimal
     >>> from fractions import Fraction
     >>> Decimal(1.1)
     Decimal('1.100000000000000088817841970012523233890533447265625')
     >>> Fraction(1.1)
     Fraction(2476979795053773, 2251799813685248)

Another useful change for the *note decimal: 36. module is that the
*note Context.clamp: 11dd. attribute is now public.  This is useful in
creating contexts that correspond to the decimal interchange formats
specified in IEEE 754 (see bpo-8540(6)).

(Contributed by Mark Dickinson and Raymond Hettinger.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=8188

   (2) https://bugs.python.org/issue?@action=redirect&bpo=8257

   (3) https://bugs.python.org/issue?@action=redirect&bpo=2531

   (4) https://bugs.python.org/issue?@action=redirect&bpo=8188

   (5) https://bugs.python.org/issue?@action=redirect&bpo=8294

   (6) https://bugs.python.org/issue?@action=redirect&bpo=8540


File: python.info,  Node: ftp,  Next: popen,  Prev: decimal and fractions,  Up: New Improved and Deprecated Modules

1.12.9.16 ftp
.............

The *note ftplib.FTP: 900. class now supports the context management
protocol to unconditionally consume *note socket.error: 108e. exceptions
and to close the FTP connection when done:

     >>> from ftplib import FTP
     >>> with FTP("ftp1.at.proftpd.org") as ftp:
             ftp.login()
             ftp.dir()

     '230 Anonymous login ok, restrictions apply.'
     dr-xr-xr-x   9 ftp      ftp           154 May  6 10:43 .
     dr-xr-xr-x   9 ftp      ftp           154 May  6 10:43 ..
     dr-xr-xr-x   5 ftp      ftp          4096 May  6 10:43 CentOS
     dr-xr-xr-x   3 ftp      ftp            18 Jul 10  2008 Fedora

Other file-like objects such as *note mmap.mmap: 20b. and *note
fileinput.input(): 802. also grew auto-closing context managers:

     with fileinput.input(files=('log1.txt', 'log2.txt')) as f:
         for line in f:
             process(line)

(Contributed by Tarek Ziadé and Giampaolo Rodolà in bpo-4972(1), and by
Georg Brandl in bpo-8046(2) and bpo-1286(3).)

The *note FTP_TLS: 901. class now accepts a 'context' parameter, which
is a *note ssl.SSLContext: 294. object allowing bundling SSL
configuration options, certificates and private keys into a single
(potentially long-lived) structure.

(Contributed by Giampaolo Rodolà; bpo-8806(4).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=4972

   (2) https://bugs.python.org/issue?@action=redirect&bpo=8046

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1286

   (4) https://bugs.python.org/issue?@action=redirect&bpo=8806


File: python.info,  Node: popen,  Next: select<3>,  Prev: ftp,  Up: New Improved and Deprecated Modules

1.12.9.17 popen
...............

The *note os.popen(): a91. and *note subprocess.Popen(): 199. functions
now support *note with: 5d2. statements for auto-closing of the file
descriptors.

(Contributed by Antoine Pitrou and Brian Curtin in bpo-7461(1) and
bpo-10554(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=7461

   (2) https://bugs.python.org/issue?@action=redirect&bpo=10554


File: python.info,  Node: select<3>,  Next: gzip and zipfile,  Prev: popen,  Up: New Improved and Deprecated Modules

1.12.9.18 select
................

The *note select: c1. module now exposes a new, constant attribute,
*note PIPE_BUF: 124a, which gives the minimum number of bytes which are
guaranteed not to block when *note select.select(): dc8. says a pipe is
ready for writing.

     >>> import select
     >>> select.PIPE_BUF
     512

(Available on Unix systems.  Patch by Sébastien Sablé in bpo-9862(1))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9862


File: python.info,  Node: gzip and zipfile,  Next: tarfile<10>,  Prev: select<3>,  Up: New Improved and Deprecated Modules

1.12.9.19 gzip and zipfile
..........................

*note gzip.GzipFile: 41a. now implements the *note io.BufferedIOBase:
694. *note abstract base class: 11f5. (except for ‘truncate()’).  It
also has a *note peek(): 124c. method and supports unseekable as well as
zero-padded file objects.

The *note gzip: 67. module also gains the *note compress(): 63e. and
*note decompress(): 124d. functions for easier in-memory compression and
decompression.  Keep in mind that text needs to be encoded as *note
bytes: 1c2. before compressing and decompressing:

     >>> import gzip
     >>> s = 'Three shall be the number thou shalt count, '
     >>> s += 'and the number of the counting shall be three'
     >>> b = s.encode()                        # convert to utf-8
     >>> len(b)
     89
     >>> c = gzip.compress(b)
     >>> len(c)
     77
     >>> gzip.decompress(c).decode()[:42]      # decompress and convert to text
     'Three shall be the number thou shalt count'

(Contributed by Anand B. Pillai in bpo-3488(1); and by Antoine Pitrou,
Nir Aides and Brian Curtin in bpo-9962(2), bpo-1675951(3), bpo-7471(4)
and bpo-2846(5).)

Also, the *note zipfile.ZipExtFile: 41b. class was reworked internally
to represent files stored inside an archive.  The new implementation is
significantly faster and can be wrapped in an *note io.BufferedReader:
124e. object for more speedups.  It also solves an issue where
interleaved calls to 'read' and 'readline' gave the wrong results.

(Patch submitted by Nir Aides in bpo-7610(6).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=3488

   (2) https://bugs.python.org/issue?@action=redirect&bpo=9962

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1675951

   (4) https://bugs.python.org/issue?@action=redirect&bpo=7471

   (5) https://bugs.python.org/issue?@action=redirect&bpo=2846

   (6) https://bugs.python.org/issue?@action=redirect&bpo=7610


File: python.info,  Node: tarfile<10>,  Next: hashlib<7>,  Prev: gzip and zipfile,  Up: New Improved and Deprecated Modules

1.12.9.20 tarfile
.................

The *note TarFile: 1250. class can now be used as a context manager.  In
addition, its *note add(): c0e. method has a new option, 'filter', that
controls which files are added to the archive and allows the file
metadata to be edited.

The new 'filter' option replaces the older, less flexible 'exclude'
parameter which is now deprecated.  If specified, the optional 'filter'
parameter needs to be a *note keyword argument: d34.  The user-supplied
filter function accepts a *note TarInfo: 1251. object and returns an
updated *note TarInfo: 1251. object, or if it wants the file to be
excluded, the function can return ‘None’:

     >>> import tarfile, glob

     >>> def myfilter(tarinfo):
     ...     if tarinfo.isfile():             # only save real files
     ...         tarinfo.uname = 'monty'      # redact the user name
     ...         return tarinfo

     >>> with tarfile.open(name='myarchive.tar.gz', mode='w:gz') as tf:
     ...     for filename in glob.glob('*.txt'):
     ...         tf.add(filename, filter=myfilter)
     ...     tf.list()
     -rw-r--r-- monty/501        902 2011-01-26 17:59:11 annotations.txt
     -rw-r--r-- monty/501        123 2011-01-26 17:59:11 general_questions.txt
     -rw-r--r-- monty/501       3514 2011-01-26 17:59:11 prion.txt
     -rw-r--r-- monty/501        124 2011-01-26 17:59:11 py_todo.txt
     -rw-r--r-- monty/501       1399 2011-01-26 17:59:11 semaphore_notes.txt

(Proposed by Tarek Ziadé and implemented by Lars Gustäbel in
bpo-6856(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=6856


File: python.info,  Node: hashlib<7>,  Next: ast<5>,  Prev: tarfile<10>,  Up: New Improved and Deprecated Modules

1.12.9.21 hashlib
.................

The *note hashlib: 68. module has two new constant attributes listing
the hashing algorithms guaranteed to be present in all implementations
and those available on the current implementation:

     >>> import hashlib

     >>> hashlib.algorithms_guaranteed
     {'sha1', 'sha224', 'sha384', 'sha256', 'sha512', 'md5'}

     >>> hashlib.algorithms_available
     {'md2', 'SHA256', 'SHA512', 'dsaWithSHA', 'mdc2', 'SHA224', 'MD4', 'sha256',
     'sha512', 'ripemd160', 'SHA1', 'MDC2', 'SHA', 'SHA384', 'MD2',
     'ecdsa-with-SHA1','md4', 'md5', 'sha1', 'DSA-SHA', 'sha224',
     'dsaEncryption', 'DSA', 'RIPEMD160', 'sha', 'MD5', 'sha384'}

(Suggested by Carl Chenet in bpo-7418(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=7418


File: python.info,  Node: ast<5>,  Next: os<13>,  Prev: hashlib<7>,  Up: New Improved and Deprecated Modules

1.12.9.22 ast
.............

The *note ast: 8. module has a wonderful a general-purpose tool for
safely evaluating expression strings using the Python literal syntax.
The *note ast.literal_eval(): c32. function serves as a secure
alternative to the builtin *note eval(): 180. function which is easily
abused.  Python 3.2 adds *note bytes: 1c2. and *note set: 5d9. literals
to the list of supported types: strings, bytes, numbers, tuples, lists,
dicts, sets, booleans, and ‘None’.

     >>> from ast import literal_eval

     >>> request = "{'req': 3, 'func': 'pow', 'args': (2, 0.5)}"
     >>> literal_eval(request)
     {'args': (2, 0.5), 'req': 3, 'func': 'pow'}

     >>> request = "os.system('do something harmful')"
     >>> literal_eval(request)
     Traceback (most recent call last):
       ...
     ValueError: malformed node or string: <_ast.Call object at 0x101739a10>

(Implemented by Benjamin Peterson and Georg Brandl.)


File: python.info,  Node: os<13>,  Next: shutil<8>,  Prev: ast<5>,  Up: New Improved and Deprecated Modules

1.12.9.23 os
............

Different operating systems use various encodings for filenames and
environment variables.  The *note os: a1. module provides two new
functions, *note fsencode(): c70. and *note fsdecode(): c6f, for
encoding and decoding filenames:

     >>> import os
     >>> filename = 'Sehenswürdigkeiten'
     >>> os.fsencode(filename)
     b'Sehensw\xc3\xbcrdigkeiten'

Some operating systems allow direct access to encoded bytes in the
environment.  If so, the *note os.supports_bytes_environ: 1255. constant
will be true.

For direct access to encoded environment variables (if available), use
the new *note os.getenvb(): 1256. function or use *note os.environb:
1257. which is a bytes version of *note os.environ: 11f9.

(Contributed by Victor Stinner.)


File: python.info,  Node: shutil<8>,  Next: sqlite3<11>,  Prev: os<13>,  Up: New Improved and Deprecated Modules

1.12.9.24 shutil
................

The *note shutil.copytree(): a33. function has two new options:

   * 'ignore_dangling_symlinks': when ‘symlinks=False’ so that the
     function copies a file pointed to by a symlink, not the symlink
     itself.  This option will silence the error raised if the file
     doesn’t exist.

   * 'copy_function': is a callable that will be used to copy files.
     *note shutil.copy2(): a65. is used by default.

(Contributed by Tarek Ziadé.)

In addition, the *note shutil: c5. module now supports *note archiving
operations: 1259. for zipfiles, uncompressed tarfiles, gzipped tarfiles,
and bzipped tarfiles.  And there are functions for registering
additional archiving file formats (such as xz compressed tarfiles or
custom formats).

The principal functions are *note make_archive(): 4b3. and *note
unpack_archive(): 46b.  By default, both operate on the current
directory (which can be set by *note os.chdir(): 60d.) and on any
sub-directories.  The archive filename needs to be specified with a full
pathname.  The archiving step is non-destructive (the original files are
left unchanged).

     >>> import shutil, pprint

     >>> os.chdir('mydata')  # change to the source directory
     >>> f = shutil.make_archive('/var/backup/mydata',
     ...                         'zip')      # archive the current directory
     >>> f                                   # show the name of archive
     '/var/backup/mydata.zip'
     >>> os.chdir('tmp')                     # change to an unpacking
     >>> shutil.unpack_archive('/var/backup/mydata.zip')  # recover the data

     >>> pprint.pprint(shutil.get_archive_formats())  # display known formats
     [('bztar', "bzip2'ed tar-file"),
      ('gztar', "gzip'ed tar-file"),
      ('tar', 'uncompressed tar file'),
      ('zip', 'ZIP file')]

     >>> shutil.register_archive_format(     # register a new archive format
     ...     name='xz',
     ...     function=xz.compress,           # callable archiving function
     ...     extra_args=[('level', 8)],      # arguments to the function
     ...     description='xz compression'
     ... )

(Contributed by Tarek Ziadé.)


File: python.info,  Node: sqlite3<11>,  Next: html<3>,  Prev: shutil<8>,  Up: New Improved and Deprecated Modules

1.12.9.25 sqlite3
.................

The *note sqlite3: cf. module was updated to pysqlite version 2.6.0.  It
has two new capabilities.

   * The ‘sqlite3.Connection.in_transit’ attribute is true if there is
     an active transaction for uncommitted changes.

   * The *note sqlite3.Connection.enable_load_extension(): 841. and
     *note sqlite3.Connection.load_extension(): 4b8. methods allows you
     to load SQLite extensions from “.so” files.  One well-known
     extension is the fulltext-search extension distributed with SQLite.

(Contributed by R. David Murray and Shashwat Anand; bpo-8845(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=8845


File: python.info,  Node: html<3>,  Next: socket<11>,  Prev: sqlite3<11>,  Up: New Improved and Deprecated Modules

1.12.9.26 html
..............

A new *note html: 6b. module was introduced with only a single function,
*note escape(): 1044, which is used for escaping reserved characters
from HTML markup:

     >>> import html
     >>> html.escape('x > 2 && x < 7')
     'x &gt; 2 &amp;&amp; x &lt; 7'


File: python.info,  Node: socket<11>,  Next: ssl<12>,  Prev: html<3>,  Up: New Improved and Deprecated Modules

1.12.9.27 socket
................

The *note socket: cc. module has two new improvements.

   * Socket objects now have a *note detach(): 125d. method which puts
     the socket into closed state without actually closing the
     underlying file descriptor.  The latter can then be reused for
     other purposes.  (Added by Antoine Pitrou; bpo-8524(1).)

   * *note socket.create_connection(): 672. now supports the context
     management protocol to unconditionally consume *note socket.error:
     108e. exceptions and to close the socket when done.  (Contributed
     by Giampaolo Rodolà; bpo-9794(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=8524

   (2) https://bugs.python.org/issue?@action=redirect&bpo=9794


File: python.info,  Node: ssl<12>,  Next: nntp,  Prev: socket<11>,  Up: New Improved and Deprecated Modules

1.12.9.28 ssl
.............

The *note ssl: d0. module added a number of features to satisfy common
requirements for secure (encrypted, authenticated) internet connections:

   * A new class, *note SSLContext: 294, serves as a container for
     persistent SSL data, such as protocol settings, certificates,
     private keys, and various other options.  It includes a *note
     wrap_socket(): 525. for creating an SSL socket from an SSL context.

   * A new function, ‘ssl.match_hostname()’, supports server identity
     verification for higher-level protocols by implementing the rules
     of HTTPS (from RFC 2818(1)) which are also suitable for other
     protocols.

   * The *note ssl.wrap_socket(): 525. constructor function now takes a
     'ciphers' argument.  The 'ciphers' string lists the allowed
     encryption algorithms using the format described in the OpenSSL
     documentation(2).

   * When linked against recent versions of OpenSSL, the *note ssl: d0.
     module now supports the Server Name Indication extension to the TLS
     protocol, allowing multiple “virtual hosts” using different
     certificates on a single IP port.  This extension is only supported
     in client mode, and is activated by passing the 'server_hostname'
     argument to *note ssl.SSLContext.wrap_socket(): 525.

   * Various options have been added to the *note ssl: d0. module, such
     as *note OP_NO_SSLv2: 83c. which disables the insecure and obsolete
     SSLv2 protocol.

   * The extension now loads all the OpenSSL ciphers and digest
     algorithms.  If some SSL certificates cannot be verified, they are
     reported as an “unknown algorithm” error.

   * The version of OpenSSL being used is now accessible using the
     module attributes *note ssl.OPENSSL_VERSION: 125f. (a string),
     *note ssl.OPENSSL_VERSION_INFO: 1260. (a 5-tuple), and *note
     ssl.OPENSSL_VERSION_NUMBER: 1261. (an integer).

(Contributed by Antoine Pitrou in bpo-8850(3), bpo-1589(4), bpo-8322(5),
bpo-5639(6), bpo-4870(7), bpo-8484(8), and bpo-8321(9).)

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2818.html

   (2) https://docs.openssl.org/1.0.2/man1/ciphers/#cipher-list-format

   (3) https://bugs.python.org/issue?@action=redirect&bpo=8850

   (4) https://bugs.python.org/issue?@action=redirect&bpo=1589

   (5) https://bugs.python.org/issue?@action=redirect&bpo=8322

   (6) https://bugs.python.org/issue?@action=redirect&bpo=5639

   (7) https://bugs.python.org/issue?@action=redirect&bpo=4870

   (8) https://bugs.python.org/issue?@action=redirect&bpo=8484

   (9) https://bugs.python.org/issue?@action=redirect&bpo=8321


File: python.info,  Node: nntp,  Next: сертифікати,  Prev: ssl<12>,  Up: New Improved and Deprecated Modules

1.12.9.29 nntp
..............

The ‘nntplib’ module has a revamped implementation with better bytes and
text semantics as well as more practical APIs.  These improvements break
compatibility with the nntplib version in Python 3.1, which was partly
dysfunctional in itself.

Support for secure connections through both implicit (using
‘nntplib.NNTP_SSL’) and explicit (using ‘nntplib.NNTP.starttls()’) TLS
has also been added.

(Contributed by Antoine Pitrou in bpo-9360(1) and Andrew Vant in
bpo-1926(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9360

   (2) https://bugs.python.org/issue?@action=redirect&bpo=1926


File: python.info,  Node: сертифікати,  Next: imaplib<4>,  Prev: nntp,  Up: New Improved and Deprecated Modules

1.12.9.30 сертифікати
.....................

*note http.client.HTTPSConnection: b54, *note
urllib.request.HTTPSHandler: 1264. and *note urllib.request.urlopen():
293. now take optional arguments to allow for server certificate
checking against a set of Certificate Authorities, as recommended in
public uses of HTTPS.

(Added by Antoine Pitrou, bpo-9003(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9003


File: python.info,  Node: imaplib<4>,  Next: http client<4>,  Prev: сертифікати,  Up: New Improved and Deprecated Modules

1.12.9.31 imaplib
.................

Support for explicit TLS on standard IMAP4 connections has been added
through the new *note imaplib.IMAP4.starttls: 1266. method.

(Contributed by Lorenzo M. Catucci and Antoine Pitrou, bpo-4471(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=4471


File: python.info,  Node: http client<4>,  Next: unittest<11>,  Prev: imaplib<4>,  Up: New Improved and Deprecated Modules

1.12.9.32 http.client
.....................

There were a number of small API improvements in the *note http.client:
6f. module.  The old-style HTTP 0.9 simple responses are no longer
supported and the 'strict' parameter is deprecated in all classes.

The *note HTTPConnection: b53. and *note HTTPSConnection: b54. classes
now have a 'source_address' parameter for a (host, port) tuple
indicating where the HTTP connection is made from.

Support for certificate checking and HTTPS virtual hosts were added to
*note HTTPSConnection: b54.

The *note request(): cc9. method on connection objects allowed an
optional 'body' argument so that a *note file object: 1203. could be
used to supply the content of the request.  Conveniently, the 'body'
argument now also accepts an *note iterable: 1268. object so long as it
includes an explicit ‘Content-Length’ header.  This extended interface
is much more flexible than before.

To establish an HTTPS connection through a proxy server, there is a new
*note set_tunnel(): 1269. method that sets the host and port for HTTP
Connect tunneling.

To match the behavior of *note http.server: 72, the HTTP client library
now also encodes headers with ISO-8859-1 (Latin-1) encoding.  It was
already doing that for incoming headers, so now the behavior is
consistent for both incoming and outgoing traffic.  (See work by Armin
Ronacher in bpo-10980(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10980


File: python.info,  Node: unittest<11>,  Next: random<5>,  Prev: http client<4>,  Up: New Improved and Deprecated Modules

1.12.9.33 unittest
..................

The unittest module has a number of improvements supporting test
discovery for packages, easier experimentation at the interactive
prompt, new testcase methods, improved diagnostic messages for test
failures, and better method names.

   * The command-line call ‘python -m unittest’ can now accept file
     paths instead of module names for running specific tests
     (bpo-10620(1)).  The new test discovery can find tests within
     packages, locating any test importable from the top-level
     directory.  The top-level directory can be specified with the ‘-t’
     option, a pattern for matching files with ‘-p’, and a directory to
     start discovery with ‘-s’:

          $ python -m unittest discover -s my_proj_dir -p _test.py

     (Contributed by Michael Foord.)

   * Experimentation at the interactive prompt is now easier because the
     *note unittest.TestCase: 44f. class can now be instantiated without
     arguments:

          >>> from unittest import TestCase
          >>> TestCase().assertEqual(pow(2, 3), 8)

     (Contributed by Michael Foord.)

   * The *note unittest: 106. module has two new methods, *note
     assertWarns(): 11a3. and *note assertWarnsRegex(): 11a4. to verify
     that a given warning type is triggered by the code under test:

          with self.assertWarns(DeprecationWarning):
              legacy_function('XYZ')

     (Contributed by Antoine Pitrou, bpo-9754(2).)

     Another new method, *note assertCountEqual(): 126b. is used to
     compare two iterables to determine if their element counts are
     equal (whether the same elements are present with the same number
     of occurrences regardless of order):

          def test_anagram(self):
              self.assertCountEqual('algorithm', 'logarithm')

     (Contributed by Raymond Hettinger.)

   * A principal feature of the unittest module is an effort to produce
     meaningful diagnostics when a test fails.  When possible, the
     failure is recorded along with a diff of the output.  This is
     especially helpful for analyzing log files of failed test runs.
     However, since diffs can sometime be voluminous, there is a new
     *note maxDiff: 126c. attribute that sets maximum length of diffs
     displayed.

   * In addition, the method names in the module have undergone a number
     of clean-ups.

     For example, *note assertRegex(): 52e. is the new name for
     ‘assertRegexpMatches()’ which was misnamed because the test uses
     *note re.search(): 126d, not *note re.match(): 126e.  Other methods
     using regular expressions are now named using short form “Regex” in
     preference to “Regexp” – this matches the names used in other
     unittest implementations, matches Python’s old name for the *note
     re: b9. module, and it has unambiguous camel-casing.

     (Contributed by Raymond Hettinger and implemented by Ezio Melotti.)

   * To improve consistency, some long-standing method aliases are being
     deprecated in favor of the preferred names:

          Old Name                            Preferred Name
                                              
          -----------------------------------------------------------------------
                                              
          ‘assert_()’                         *note assertTrue(): 527.
                                              
                                              
          ‘assertEquals()’                    *note assertEqual(): 529.
                                              
                                              
          ‘assertNotEquals()’                 *note assertNotEqual(): 52a.
                                              
                                              
          ‘assertAlmostEquals()’              *note assertAlmostEqual(): 52b.
                                              
                                              
          ‘assertNotAlmostEquals()’           *note assertNotAlmostEqual(): 52c.
                                              

     Likewise, the ‘TestCase.fail*’ methods deprecated in Python 3.1 are
     expected to be removed in Python 3.3.

     (Contributed by Ezio Melotti; bpo-9424(3).)

   * The ‘assertDictContainsSubset()’ method was deprecated because it
     was misimplemented with the arguments in the wrong order.  This
     created hard-to-debug optical illusions where tests like
     ‘TestCase().assertDictContainsSubset({'a':1, 'b':2}, {'a':1})’
     would fail.

     (Contributed by Raymond Hettinger.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10620

   (2) https://bugs.python.org/issue?@action=redirect&bpo=9754

   (3) https://bugs.python.org/issue?@action=redirect&bpo=9424


File: python.info,  Node: random<5>,  Next: poplib<4>,  Prev: unittest<11>,  Up: New Improved and Deprecated Modules

1.12.9.34 random
................

The integer methods in the *note random: b8. module now do a better job
of producing uniform distributions.  Previously, they computed
selections with ‘int(n*random())’ which had a slight bias whenever 'n'
was not a power of two.  Now, multiple selections are made from a range
up to the next power of two and a selection is kept only when it falls
within the range ‘0 <= x < n’.  The functions and methods affected are
*note randrange(): 86f, *note randint(): 1270, *note choice(): 1271,
*note shuffle(): 747. and *note sample(): 746.

(Contributed by Raymond Hettinger; bpo-9025(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9025


File: python.info,  Node: poplib<4>,  Next: asyncore<2>,  Prev: random<5>,  Up: New Improved and Deprecated Modules

1.12.9.35 poplib
................

*note POP3_SSL: 92b. class now accepts a 'context' parameter, which is a
*note ssl.SSLContext: 294. object allowing bundling SSL configuration
options, certificates and private keys into a single (potentially
long-lived) structure.

(Contributed by Giampaolo Rodolà; bpo-8807(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=8807


File: python.info,  Node: asyncore<2>,  Next: tempfile<5>,  Prev: poplib<4>,  Up: New Improved and Deprecated Modules

1.12.9.36 asyncore
..................

‘asyncore.dispatcher’ now provides a ‘handle_accepted()’ method
returning a ‘(sock, addr)’ pair which is called when a connection has
actually been established with a new remote endpoint.  This is supposed
to be used as a replacement for old ‘handle_accept()’ and avoids the
user to call ‘accept()’ directly.

(Contributed by Giampaolo Rodolà; bpo-6706(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=6706


File: python.info,  Node: tempfile<5>,  Next: inspect<10>,  Prev: asyncore<2>,  Up: New Improved and Deprecated Modules

1.12.9.37 tempfile
..................

The *note tempfile: e0. module has a new context manager, *note
TemporaryDirectory: 1275. which provides easy deterministic cleanup of
temporary directories:

     with tempfile.TemporaryDirectory() as tmpdirname:
         print('created temporary dir:', tmpdirname)

(Contributed by Neil Schemenauer and Nick Coghlan; bpo-5178(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5178


File: python.info,  Node: inspect<10>,  Next: pydoc<6>,  Prev: tempfile<5>,  Up: New Improved and Deprecated Modules

1.12.9.38 inspect
.................

   * The *note inspect: 7e. module has a new function *note
     getgeneratorstate(): 1277. to easily identify the current state of
     a generator-iterator:

          >>> from inspect import getgeneratorstate
          >>> def gen():
          ...     yield 'demo'
          ...
          >>> g = gen()
          >>> getgeneratorstate(g)
          'GEN_CREATED'
          >>> next(g)
          'demo'
          >>> getgeneratorstate(g)
          'GEN_SUSPENDED'
          >>> next(g, None)
          >>> getgeneratorstate(g)
          'GEN_CLOSED'

     (Contributed by Rodolpho Eckhardt and Nick Coghlan, bpo-10220(1).)

   * To support lookups without the possibility of activating a dynamic
     attribute, the *note inspect: 7e. module has a new function, *note
     getattr_static(): 494.  Unlike *note hasattr(): 4d2, this is a true
     read-only search, guaranteed not to change state while it is
     searching:

          >>> class A:
          ...     @property
          ...     def f(self):
          ...         print('Running')
          ...         return 10
          ...
          >>> a = A()
          >>> getattr(a, 'f')
          Running
          10
          >>> inspect.getattr_static(a, 'f')
          <property object at 0x1022bd788>

     (Contributed by Michael Foord.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10220


File: python.info,  Node: pydoc<6>,  Next: dis<5>,  Prev: inspect<10>,  Up: New Improved and Deprecated Modules

1.12.9.39 pydoc
...............

The *note pydoc: b5. module now provides a much-improved web server
interface, as well as a new command-line option ‘-b’ to automatically
open a browser window to display that server:

     $ pydoc3.2 -b

(Contributed by Ron Adam; bpo-2001(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=2001


File: python.info,  Node: dis<5>,  Next: dbm<7>,  Prev: pydoc<6>,  Up: New Improved and Deprecated Modules

1.12.9.40 dis
.............

The *note dis: 38. module gained two new functions for inspecting code,
*note code_info(): 127a. and *note show_code(): f5e.  Both provide
detailed code object information for the supplied function, method,
source code string or code object.  The former returns a string and the
latter prints it:

     >>> import dis, random
     >>> dis.show_code(random.choice)
     Name:              choice
     Filename:          /Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/random.py
     Argument count:    2
     Kw-only arguments: 0
     Number of locals:  3
     Stack size:        11
     Flags:             OPTIMIZED, NEWLOCALS, NOFREE
     Constants:
        0: 'Choose a random element from a non-empty sequence.'
        1: 'Cannot choose from an empty sequence'
     Names:
        0: _randbelow
        1: len
        2: ValueError
        3: IndexError
     Variable names:
        0: self
        1: seq
        2: i

In addition, the *note dis(): b46. function now accepts string arguments
so that the common idiom ‘dis(compile(s, '', 'eval'))’ can be shortened
to ‘dis(s)’:

     >>> dis('3*x+1 if x%2==1 else x//2')
       1           0 LOAD_NAME                0 (x)
                   3 LOAD_CONST               0 (2)
                   6 BINARY_MODULO
                   7 LOAD_CONST               1 (1)
                  10 COMPARE_OP               2 (==)
                  13 POP_JUMP_IF_FALSE       28
                  16 LOAD_CONST               2 (3)
                  19 LOAD_NAME                0 (x)
                  22 BINARY_MULTIPLY
                  23 LOAD_CONST               1 (1)
                  26 BINARY_ADD
                  27 RETURN_VALUE
             >>   28 LOAD_NAME                0 (x)
                  31 LOAD_CONST               0 (2)
                  34 BINARY_FLOOR_DIVIDE
                  35 RETURN_VALUE

Taken together, these improvements make it easier to explore how CPython
is implemented and to see for yourself what the language syntax does
under-the-hood.

(Contributed by Nick Coghlan in bpo-9147(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9147


File: python.info,  Node: dbm<7>,  Next: ctypes<3>,  Prev: dis<5>,  Up: New Improved and Deprecated Modules

1.12.9.41 dbm
.............

All database modules now support the ‘get()’ and ‘setdefault()’ methods.

(Suggested by Ray Allen in bpo-9523(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9523


File: python.info,  Node: ctypes<3>,  Next: site<4>,  Prev: dbm<7>,  Up: New Improved and Deprecated Modules

1.12.9.42 ctypes
................

A new type, *note ctypes.c_ssize_t: 127d. represents the C ‘ssize_t’
datatype.


File: python.info,  Node: site<4>,  Next: sysconfig<3>,  Prev: ctypes<3>,  Up: New Improved and Deprecated Modules

1.12.9.43 site
..............

The *note site: c7. module has three new functions useful for reporting
on the details of a given Python installation.

   * *note getsitepackages(): 127f. lists all global site-packages
     directories.

   * *note getuserbase(): 1280. reports on the user’s base directory
     where data can be stored.

   * *note getusersitepackages(): 1281. reveals the user-specific
     site-packages directory path.

     >>> import site
     >>> site.getsitepackages()
     ['/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/site-packages',
      '/Library/Frameworks/Python.framework/Versions/3.2/lib/site-python',
      '/Library/Python/3.2/site-packages']
     >>> site.getuserbase()
     '/Users/raymondhettinger/Library/Python/3.2'
     >>> site.getusersitepackages()
     '/Users/raymondhettinger/Library/Python/3.2/lib/python/site-packages'

Conveniently, some of site’s functionality is accessible directly from
the command-line:

     $ python -m site --user-base
     /Users/raymondhettinger/.local
     $ python -m site --user-site
     /Users/raymondhettinger/.local/lib/python3.2/site-packages

(Contributed by Tarek Ziadé in bpo-6693(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=6693


File: python.info,  Node: sysconfig<3>,  Next: pdb<8>,  Prev: site<4>,  Up: New Improved and Deprecated Modules

1.12.9.44 sysconfig
...................

The new *note sysconfig: db. module makes it straightforward to discover
installation paths and configuration variables that vary across
platforms and installations.

The module offers access simple access functions for platform and
version information:

   * *note get_platform(): 1283. returning values like 'linux-i586' or
     'macosx-10.6-ppc'.

   * *note get_python_version(): 1284. returns a Python version string
     such as “3.2”.

It also provides access to the paths and variables corresponding to one
of seven named schemes used by ‘distutils’.  Those include
'posix_prefix', 'posix_home', 'posix_user', 'nt', 'nt_user', 'os2',
'os2_home':

   * *note get_paths(): 1285. makes a dictionary containing installation
     paths for the current installation scheme.

   * *note get_config_vars(): 1064. returns a dictionary of platform
     specific variables.

There is also a convenient command-line interface:

     C:\Python32>python -m sysconfig
     Platform: "win32"
     Python version: "3.2"
     Current installation scheme: "nt"

     Paths:
             data = "C:\Python32"
             include = "C:\Python32\Include"
             platinclude = "C:\Python32\Include"
             platlib = "C:\Python32\Lib\site-packages"
             platstdlib = "C:\Python32\Lib"
             purelib = "C:\Python32\Lib\site-packages"
             scripts = "C:\Python32\Scripts"
             stdlib = "C:\Python32\Lib"

     Variables:
             BINDIR = "C:\Python32"
             BINLIBDEST = "C:\Python32\Lib"
             EXE = ".exe"
             INCLUDEPY = "C:\Python32\Include"
             LIBDEST = "C:\Python32\Lib"
             SO = ".pyd"
             VERSION = "32"
             abiflags = ""
             base = "C:\Python32"
             exec_prefix = "C:\Python32"
             platbase = "C:\Python32"
             prefix = "C:\Python32"
             projectbase = "C:\Python32"
             py_version = "3.2"
             py_version_nodot = "32"
             py_version_short = "3.2"
             srcdir = "C:\Python32"
             userbase = "C:\Documents and Settings\Raymond\Application Data\Python"

(Moved out of Distutils by Tarek Ziadé.)


File: python.info,  Node: pdb<8>,  Next: configparser<5>,  Prev: sysconfig<3>,  Up: New Improved and Deprecated Modules

1.12.9.45 pdb
.............

The *note pdb: a5. debugger module gained a number of usability
improvements:

   * ‘pdb.py’ now has a ‘-c’ option that executes commands as given in a
     ‘.pdbrc’ script file.

   * A ‘.pdbrc’ script file can contain ‘continue’ and ‘next’ commands
     that continue debugging.

   * The *note Pdb: 928. class constructor now accepts a 'nosigint'
     argument.

   * New commands: ‘l(list)’, ‘ll(long list)’ and ‘source’ for listing
     source code.

   * New commands: ‘display’ and ‘undisplay’ for showing or hiding the
     value of an expression if it has changed.

   * New command: ‘interact’ for starting an interactive interpreter
     containing the global and local names found in the current scope.

   * Breakpoints can be cleared by breakpoint number.

(Contributed by Georg Brandl, Antonio Cuni and Ilya Sandler.)


File: python.info,  Node: configparser<5>,  Next: urllib parse<6>,  Prev: pdb<8>,  Up: New Improved and Deprecated Modules

1.12.9.46 configparser
......................

The *note configparser: 22. module was modified to improve usability and
predictability of the default parser and its supported INI syntax.  The
old ‘ConfigParser’ class was removed in favor of ‘SafeConfigParser’
which has in turn been renamed to *note ConfigParser: 1c8.  Support for
inline comments is now turned off by default and section or option
duplicates are not allowed in a single configuration source.

Config parsers gained a new API based on the mapping protocol:

     >>> parser = ConfigParser()
     >>> parser.read_string("""
     ... [DEFAULT]
     ... location = upper left
     ... visible = yes
     ... editable = no
     ... color = blue
     ...
     ... [main]
     ... title = Main Menu
     ... color = green
     ...
     ... [options]
     ... title = Options
     ... """)
     >>> parser['main']['color']
     'green'
     >>> parser['main']['editable']
     'no'
     >>> section = parser['options']
     >>> section['title']
     'Options'
     >>> section['title'] = 'Options (editable: %(editable)s)'
     >>> section['title']
     'Options (editable: no)'

The new API is implemented on top of the classical API, so custom parser
subclasses should be able to use it without modifications.

The INI file structure accepted by config parsers can now be customized.
Users can specify alternative option/value delimiters and comment
prefixes, change the name of the 'DEFAULT' section or switch the
interpolation syntax.

There is support for pluggable interpolation including an additional
interpolation handler *note ExtendedInterpolation: 723.:

     >>> parser = ConfigParser(interpolation=ExtendedInterpolation())
     >>> parser.read_dict({'buildout': {'directory': '/home/ambv/zope9'},
     ...                   'custom': {'prefix': '/usr/local'}})
     >>> parser.read_string("""
     ... [buildout]
     ... parts =
     ...   zope9
     ...   instance
     ... find-links =
     ...   ${buildout:directory}/downloads/dist
     ...
     ... [zope9]
     ... recipe = plone.recipe.zope9install
     ... location = /opt/zope
     ...
     ... [instance]
     ... recipe = plone.recipe.zope9instance
     ... zope9-location = ${zope9:location}
     ... zope-conf = ${custom:prefix}/etc/zope.conf
     ... """)
     >>> parser['buildout']['find-links']
     '\n/home/ambv/zope9/downloads/dist'
     >>> parser['instance']['zope-conf']
     '/usr/local/etc/zope.conf'
     >>> instance = parser['instance']
     >>> instance['zope-conf']
     '/usr/local/etc/zope.conf'
     >>> instance['zope9-location']
     '/opt/zope'

A number of smaller features were also introduced, like support for
specifying encoding in read operations, specifying fallback values for
get-functions, or reading directly from dictionaries and strings.

(All changes contributed by Łukasz Langa.)


File: python.info,  Node: urllib parse<6>,  Next: mailbox,  Prev: configparser<5>,  Up: New Improved and Deprecated Modules

1.12.9.47 urllib.parse
......................

A number of usability improvements were made for the *note urllib.parse:
10a. module.

The *note urlparse(): 30d. function now supports IPv6(1) addresses as
described in RFC 2732(2):

     >>> import urllib.parse
     >>> urllib.parse.urlparse('http://[dead:beef:cafe:5417:affe:8FA3:deaf:feed]/foo/')
     ParseResult(scheme='http',
                 netloc='[dead:beef:cafe:5417:affe:8FA3:deaf:feed]',
                 path='/foo/',
                 params='',
                 query='',
                 fragment='')

The *note urldefrag(): 1289. function now returns a *note named tuple:
64e.:

     >>> r = urllib.parse.urldefrag('http://python.org/about/#target')
     >>> r
     DefragResult(url='http://python.org/about/', fragment='target')
     >>> r[0]
     'http://python.org/about/'
     >>> r.fragment
     'target'

And, the *note urlencode(): ec4. function is now much more flexible,
accepting either a string or bytes type for the 'query' argument.  If it
is a string, then the 'safe', 'encoding', and 'error' parameters are
sent to *note quote_plus(): 128a. for encoding:

     >>> urllib.parse.urlencode([
     ...      ('type', 'telenovela'),
     ...      ('name', '¿Dónde Está Elisa?')],
     ...      encoding='latin-1')
     'type=telenovela&name=%BFD%F3nde+Est%E1+Elisa%3F'

As detailed in *note Analisando bytes codificados em ASCII: 128b, all
the *note urllib.parse: 10a. functions now accept ASCII-encoded byte
strings as input, so long as they are not mixed with regular strings.
If ASCII-encoded byte strings are given as parameters, the return types
will also be an ASCII-encoded byte strings:

     >>> urllib.parse.urlparse(b'http://www.python.org:80/about/')
     ParseResultBytes(scheme=b'http', netloc=b'www.python.org:80',
                      path=b'/about/', params=b'', query=b'', fragment=b'')

(Work by Nick Coghlan, Dan Mahn, and Senthil Kumaran in bpo-2987(3),
bpo-5468(4), and bpo-9873(5).)

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/IPv6

   (2) https://datatracker.ietf.org/doc/html/rfc2732.html

   (3) https://bugs.python.org/issue?@action=redirect&bpo=2987

   (4) https://bugs.python.org/issue?@action=redirect&bpo=5468

   (5) https://bugs.python.org/issue?@action=redirect&bpo=9873


File: python.info,  Node: mailbox,  Next: turtledemo,  Prev: urllib parse<6>,  Up: New Improved and Deprecated Modules

1.12.9.48 mailbox
.................

Thanks to a concerted effort by R. David Murray, the *note mailbox: 8b.
module has been fixed for Python 3.2.  The challenge was that mailbox
had been originally designed with a text interface, but email messages
are best represented with *note bytes: 1c2. because various parts of a
message may have different encodings.

The solution harnessed the *note email: 3b. package’s binary support for
parsing arbitrary email messages.  In addition, the solution required a
number of API changes.

As expected, the *note add(): 128d. method for *note mailbox.Mailbox:
128e. objects now accepts binary input.

*note StringIO: f59. and text file input are deprecated.  Also, string
input will fail early if non-ASCII characters are used.  Previously it
would fail when the email was processed in a later step.

There is also support for binary output.  The *note get_file(): 128f.
method now returns a file in the binary mode (where it used to
incorrectly set the file to text-mode).  There is also a new *note
get_bytes(): 1290. method that returns a *note bytes: 1c2.
representation of a message corresponding to a given 'key'.

It is still possible to get non-binary output using the old API’s *note
get_string(): 1291. method, but that approach is not very useful.
Instead, it is best to extract messages from a *note Message: 1292.
object or to load them from binary input.

(Contributed by R. David Murray, with efforts from Steffen Daode
Nurpmeso and an initial patch by Victor Stinner in bpo-9124(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=9124


File: python.info,  Node: turtledemo,  Prev: mailbox,  Up: New Improved and Deprecated Modules

1.12.9.49 turtledemo
....................

The demonstration code for the *note turtle: 101. module was moved from
the 'Demo' directory to main library.  It includes over a dozen sample
scripts with lively displays.  Being on *note sys.path: 3b4, it can now
be run directly from the command-line:

     $ python -m turtledemo

(Moved from the Demo directory by Alexander Belopolsky in bpo-10199(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10199


File: python.info,  Node: Multi-threading,  Next: Otimizações<11>,  Prev: New Improved and Deprecated Modules,  Up: O que há de novo no Python 3 2

1.12.10 Multi-threading
-----------------------

   * The mechanism for serializing execution of concurrently running
     Python threads (generally known as the *note GIL: 159. or Global
     Interpreter Lock) has been rewritten.  Among the objectives were
     more predictable switching intervals and reduced overhead due to
     lock contention and the number of ensuing system calls.  The notion
     of a “check interval” to allow thread switches has been abandoned
     and replaced by an absolute duration expressed in seconds.  This
     parameter is tunable through *note sys.setswitchinterval(): 951.
     It currently defaults to 5 milliseconds.

     Additional details about the implementation can be read from a
     python-dev mailing-list message(1) (however, “priority requests” as
     exposed in this message have not been kept for inclusion).

     (Contribuição de Antoine Pitrou.)

   * Regular and recursive locks now accept an optional 'timeout'
     argument to their *note acquire(): 698. method.  (Contributed by
     Antoine Pitrou; bpo-7316(2).)

   * Similarly, *note threading.Semaphore.acquire(): 1295. also gained a
     'timeout' argument.  (Contributed by Torsten Landschoff;
     bpo-850728(3).)

   * Regular and recursive lock acquisitions can now be interrupted by
     signals on platforms using Pthreads.  This means that Python
     programs that deadlock while acquiring locks can be successfully
     killed by repeatedly sending SIGINT to the process (by pressing
     ‘Ctrl’+‘C’ in most shells).  (Contributed by Reid Kleckner;
     bpo-8844(4).)

   ---------- Footnotes ----------

   (1) 
https://mail.python.org/pipermail/python-dev/2009-October/093321.html

   (2) https://bugs.python.org/issue?@action=redirect&bpo=7316

   (3) https://bugs.python.org/issue?@action=redirect&bpo=850728

   (4) https://bugs.python.org/issue?@action=redirect&bpo=8844


File: python.info,  Node: Otimizações<11>,  Next: Unicode,  Prev: Multi-threading,  Up: O que há de novo no Python 3 2

1.12.11 Otimizações
-------------------

A number of small performance enhancements have been added:

   * Python’s peephole optimizer now recognizes patterns such ‘x in {1,
     2, 3}’ as being a test for membership in a set of constants.  The
     optimizer recasts the *note set: 5d9. as a *note frozenset: 5da.
     and stores the pre-built constant.

     Now that the speed penalty is gone, it is practical to start
     writing membership tests using set-notation.  This style is both
     semantically clear and operationally fast:

          extension = name.rpartition('.')[2]
          if extension in {'xml', 'html', 'xhtml', 'css'}:
              handle(name)

     (Patch and additional tests contributed by Dave Malcolm;
     bpo-6690(1)).

   * Serializing and unserializing data using the *note pickle: a6.
     module is now several times faster.

     (Contributed by Alexandre Vassalotti, Antoine Pitrou and the
     Unladen Swallow team in bpo-9410(2) and bpo-3873(3).)

   * The Timsort algorithm(4) used in *note list.sort(): be8. and *note
     sorted(): be7. now runs faster and uses less memory when called
     with a *note key function: e31.  Previously, every element of a
     list was wrapped with a temporary object that remembered the key
     value associated with each element.  Now, two arrays of keys and
     values are sorted in parallel.  This saves the memory consumed by
     the sort wrappers, and it saves time lost to delegating
     comparisons.

     (Patch by Daniel Stutzbach in bpo-9915(5).)

   * JSON decoding performance is improved and memory consumption is
     reduced whenever the same string is repeated for multiple keys.
     Also, JSON encoding now uses the C speedups when the ‘sort_keys’
     argument is true.

     (Contributed by Antoine Pitrou in bpo-7451(6) and by Raymond
     Hettinger and Antoine Pitrou in bpo-10314(7).)

   * Recursive locks (created with the *note threading.RLock(): 2de.
     API) now benefit from a C implementation which makes them as fast
     as regular locks, and between 10x and 15x faster than their
     previous pure Python implementation.

     (Contributed by Antoine Pitrou; bpo-3001(8).)

   * The fast-search algorithm in stringlib is now used by the *note
     split(): ed9, *note rsplit(): 1297, *note splitlines(): 1298. and
     *note replace(): 19a. methods on *note bytes: 1c2, *note bytearray:
     2ea. and *note str: 44c. objects.  Likewise, the algorithm is also
     used by *note rfind(): ed8, *note rindex(): 1299, *note rsplit():
     1297. and *note rpartition(): 129a.

     (Patch by Florent Xicluna in bpo-7622(9) and bpo-7462(10).)

   * Integer to string conversions now work two “digits” at a time,
     reducing the number of division and modulo operations.

     (bpo-6713(11) by Gawain Bolton, Mark Dickinson, and Victor
     Stinner.)

There were several other minor optimizations.  Set differencing now runs
faster when one operand is much larger than the other (patch by Andress
Bennetts in bpo-8685(12)).  The ‘array.repeat()’ method has a faster
implementation (bpo-1569291(13) by Alexander Belopolsky).  The *note
BaseHTTPRequestHandler: 110a. has more efficient buffering (bpo-3709(14)
by Andrew Schaaf).  The *note operator.attrgetter(): e60. function has
been sped-up (bpo-10160(15) by Christos Georgiou).  And *note
ConfigParser: 1c8. loads multi-line arguments a bit faster (bpo-7113(16)
by Łukasz Langa).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=6690

   (2) https://bugs.python.org/issue?@action=redirect&bpo=9410

   (3) https://bugs.python.org/issue?@action=redirect&bpo=3873

   (4) https://en.wikipedia.org/wiki/Timsort

   (5) https://bugs.python.org/issue?@action=redirect&bpo=9915

   (6) https://bugs.python.org/issue?@action=redirect&bpo=7451

   (7) https://bugs.python.org/issue?@action=redirect&bpo=10314

   (8) https://bugs.python.org/issue?@action=redirect&bpo=3001

   (9) https://bugs.python.org/issue?@action=redirect&bpo=7622

   (10) https://bugs.python.org/issue?@action=redirect&bpo=7462

   (11) https://bugs.python.org/issue?@action=redirect&bpo=6713

   (12) https://bugs.python.org/issue?@action=redirect&bpo=8685

   (13) https://bugs.python.org/issue?@action=redirect&bpo=1569291

   (14) https://bugs.python.org/issue?@action=redirect&bpo=3709

   (15) https://bugs.python.org/issue?@action=redirect&bpo=10160

   (16) https://bugs.python.org/issue?@action=redirect&bpo=7113


File: python.info,  Node: Unicode,  Next: Codecs,  Prev: Otimizações<11>,  Up: O que há de novo no Python 3 2

1.12.12 Unicode
---------------

Python has been updated to Unicode 6.0.0(1).  The update to the standard
adds over 2,000 new characters including emoji(2) symbols which are
important for mobile phones.

In addition, the updated standard has altered the character properties
for two Kannada characters (U+0CF1, U+0CF2) and one New Tai Lue numeric
character (U+19DA), making the former eligible for use in identifiers
while disqualifying the latter.  For more information, see Unicode
Character Database Changes(3).

   ---------- Footnotes ----------

   (1) https://unicode.org/versions/Unicode6.0.0/

   (2) https://en.wikipedia.org/wiki/Emoji

   (3) https://www.unicode.org/versions/Unicode6.0.0/#Database_Changes


File: python.info,  Node: Codecs,  Next: Documentação,  Prev: Unicode,  Up: O que há de novo no Python 3 2

1.12.13 Codecs
--------------

Support was added for 'cp720' Arabic DOS encoding (bpo-1616979(1)).

MBCS encoding no longer ignores the error handler argument.  In the
default strict mode, it raises an *note UnicodeDecodeError: a1d. when it
encounters an undecodable byte sequence and an *note UnicodeEncodeError:
677. for an unencodable character.

The MBCS codec supports ‘'strict'’ and ‘'ignore'’ error handlers for
decoding, and ‘'strict'’ and ‘'replace'’ for encoding.

To emulate Python3.1 MBCS encoding, select the ‘'ignore'’ handler for
decoding and the ‘'replace'’ handler for encoding.

On Mac OS X, Python decodes command line arguments with ‘'utf-8'’ rather
than the locale encoding.

By default, *note tarfile: de. uses ‘'utf-8'’ encoding on Windows
(instead of ‘'mbcs'’) and the ‘'surrogateescape'’ error handler on all
operating systems.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1616979


File: python.info,  Node: Documentação,  Next: IDLE,  Prev: Codecs,  Up: O que há de novo no Python 3 2

1.12.14 Documentação
--------------------

The documentation continues to be improved.

   * A table of quick links has been added to the top of lengthy
     sections such as *note Funções embutidas: 129e.  In the case of
     *note itertools: 81, the links are accompanied by tables of
     cheatsheet-style summaries to provide an overview and memory jog
     without having to read all of the docs.

   * In some cases, the pure Python source code can be a helpful adjunct
     to the documentation, so now many modules now feature quick links
     to the latest version of the source code.  For example, the *note
     functools: 5f. module documentation has a quick link at the top
     labeled:

          'Source code' Lib/functools.py(1).

     (Contributed by Raymond Hettinger; see rationale(2).)

   * The docs now contain more examples and recipes.  In particular,
     *note re: b9. module has an extensive section, *note Exemplos de
     expressão regular: 129f.  Likewise, the *note itertools: 81. module
     continues to be updated with new *note Receitas com itertools:
     12a0.

   * The *note datetime: 30. module now has an auxiliary implementation
     in pure Python.  No functionality was changed.  This just provides
     an easier-to-read alternate implementation.

     (Contributed by Alexander Belopolsky in bpo-9528(3).)

   * The unmaintained ‘Demo’ directory has been removed.  Some demos
     were integrated into the documentation, some were moved to the
     ‘Tools/demo’ directory, and others were removed altogether.

     (Contributed by Georg Brandl in bpo-7962(4).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/functools.py

   (2) 
https://rhettinger.wordpress.com/2011/01/28/open-your-source-more/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=9528

   (4) https://bugs.python.org/issue?@action=redirect&bpo=7962


File: python.info,  Node: IDLE,  Next: Code Repository,  Prev: Documentação,  Up: O que há de novo no Python 3 2

1.12.15 IDLE
------------

   * The format menu now has an option to clean source files by
     stripping trailing whitespace.

     (Contributed by Raymond Hettinger; bpo-5150(1).)

   * IDLE on Mac OS X now works with both Carbon AquaTk and Cocoa
     AquaTk.

     (Contributed by Kevin Walzer, Ned Deily, and Ronald Oussoren;
     bpo-6075(2).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5150

   (2) https://bugs.python.org/issue?@action=redirect&bpo=6075


File: python.info,  Node: Code Repository,  Next: Mudanças a construções e API C<5>,  Prev: IDLE,  Up: O que há de novo no Python 3 2

1.12.16 Code Repository
-----------------------

In addition to the existing Subversion code repository at
‘https://svn.python.org’ there is now a Mercurial(1) repository at
‘https://hg.python.org/’.

After the 3.2 release, there are plans to switch to Mercurial as the
primary repository.  This distributed version control system should make
it easier for members of the community to create and share external
changesets.  See PEP 385(2) for details.

To learn to use the new version control system, see the Quick Start(3)
or the Guide to Mercurial Workflows(4).

   ---------- Footnotes ----------

   (1) https://www.mercurial-scm.org/

   (2) https://peps.python.org/pep-0385/

   (3) https://www.mercurial-scm.org/wiki/QuickStart

   (4) https://www.mercurial-scm.org/guide


File: python.info,  Node: Mudanças a construções e API C<5>,  Next: Porting to Python 3 2,  Prev: Code Repository,  Up: O que há de novo no Python 3 2

1.12.17 Mudanças a construções e API C
--------------------------------------

As alterações no processo de construção do Python e na API C incluem:

   * The 'idle', 'pydoc' and '2to3' scripts are now installed with a
     version-specific suffix on ‘make altinstall’ (bpo-10679(1)).

   * The C functions that access the Unicode Database now accept and
     return characters from the full Unicode range, even on narrow
     unicode builds (Py_UNICODE_TOLOWER, Py_UNICODE_ISDECIMAL, and
     others).  A visible difference in Python is that *note
     unicodedata.numeric(): 12a4. now returns the correct value for
     large code points, and *note repr(): 800. may consider more
     characters as printable.

     (Reported by Bupjoe Lee and fixed by Amaury Forgeot D’Arc;
     bpo-5127(2).)

   * Computed gotos are now enabled by default on supported compilers
     (which are detected by the configure script).  They can still be
     disabled selectively by specifying ‘--without-computed-gotos’.

     (Contributed by Antoine Pitrou; bpo-9203(3).)

   * The option ‘--with-wctype-functions’ was removed.  The built-in
     unicode database is now used for all functions.

     (Contributed by Amaury Forgeot D’Arc; bpo-9210(4).)

   * Hash values are now values of a new type, *note Py_hash_t: 12a5,
     which is defined to be the same size as a pointer.  Previously they
     were of type long, which on some 64-bit operating systems is still
     only 32 bits long.  As a result of this fix, *note set: 5d9. and
     *note dict: 256. can now hold more than ‘2**32’ entries on builds
     with 64-bit pointers (previously, they could grow to that size but
     their performance degraded catastrophically).

     (Suggested by Raymond Hettinger and implemented by Benjamin
     Peterson; bpo-9778(5).)

   * A new macro ‘Py_VA_COPY’ copies the state of the variable argument
     list.  It is equivalent to C99 'va_copy' but available on all
     Python platforms (bpo-2443(6)).

   * A new C API function ‘PySys_SetArgvEx()’ allows an embedded
     interpreter to set *note sys.argv: 12a6. without also modifying
     *note sys.path: 3b4. (bpo-5753(7)).

   * ‘PyEval_CallObject()’ is now only available in macro form.  The
     function declaration, which was kept for backwards compatibility
     reasons, is now removed – the macro was introduced in 1997
     (bpo-8276(8)).

   * There is a new function *note PyLong_AsLongLongAndOverflow(): 12a7.
     which is analogous to *note PyLong_AsLongAndOverflow(): 12a8.  They
     both serve to convert Python *note int: 257. into a native
     fixed-width type while providing detection of cases where the
     conversion won’t fit (bpo-7767(9)).

   * The *note PyUnicode_CompareWithASCIIString(): 12a9. function now
     returns 'not equal' if the Python string is 'NUL' terminated.

   * There is a new function *note PyErr_NewExceptionWithDoc(): 12aa.
     that is like *note PyErr_NewException(): 12ab. but allows a
     docstring to be specified.  This lets C exceptions have the same
     self-documenting capabilities as their pure Python counterparts
     (bpo-7033(10)).

   * When compiled with the ‘--with-valgrind’ option, the pymalloc
     allocator will be automatically disabled when running under
     Valgrind.  This gives improved memory leak detection when running
     under Valgrind, while taking advantage of pymalloc at other times
     (bpo-2422(11)).

   * Removed the ‘O?’ format from the 'PyArg_Parse' functions.  The
     format is no longer used and it had never been documented
     (bpo-8837(12)).

There were a number of other small changes to the C-API. See the
Misc/NEWS(13) file for a complete list.

Also, there were a number of updates to the Mac OS X build, see
Mac/BuildScript/README.txt(14) for details.  For users running a
32/64-bit build, there is a known problem with the default Tcl/Tk on Mac
OS X 10.6.  Accordingly, we recommend installing an updated alternative
such as ActiveState Tcl/Tk 8.5.9(15).  See
‘https://www.python.org/download/mac/tcltk/’ for additional details.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10679

   (2) https://bugs.python.org/issue?@action=redirect&bpo=5127

   (3) https://bugs.python.org/issue?@action=redirect&bpo=9203

   (4) https://bugs.python.org/issue?@action=redirect&bpo=9210

   (5) https://bugs.python.org/issue?@action=redirect&bpo=9778

   (6) https://bugs.python.org/issue?@action=redirect&bpo=2443

   (7) https://bugs.python.org/issue?@action=redirect&bpo=5753

   (8) https://bugs.python.org/issue?@action=redirect&bpo=8276

   (9) https://bugs.python.org/issue?@action=redirect&bpo=7767

   (10) https://bugs.python.org/issue?@action=redirect&bpo=7033

   (11) https://bugs.python.org/issue?@action=redirect&bpo=2422

   (12) https://bugs.python.org/issue?@action=redirect&bpo=8837

   (13) https://github.com/python/cpython/blob/v3.2.6/Misc/NEWS

   (14) 
https://github.com/python/cpython/blob/v3.2.6/Mac/BuildScript/README.txt

   (15) 
https://web.archive.org/web/20101208191259/https://www.activestate.com/activetcl/downloads


File: python.info,  Node: Porting to Python 3 2,  Prev: Mudanças a construções e API C<5>,  Up: O que há de novo no Python 3 2

1.12.18 Porting to Python 3.2
-----------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções que podem exigir alterações no seu código.

   * The *note configparser: 22. module has a number of clean-ups.  The
     major change is to replace the old ‘ConfigParser’ class with
     long-standing preferred alternative ‘SafeConfigParser’.  In
     addition there are a number of smaller incompatibilities:

        * The interpolation syntax is now validated on *note get():
          12ad. and *note set(): 12ae. operations.  In the default
          interpolation scheme, only two tokens with percent signs are
          valid: ‘%(name)s’ and ‘%%’, the latter being an escaped
          percent sign.

        * The *note set(): 12ae. and *note add_section(): 12af. methods
          now verify that values are actual strings.  Formerly,
          unsupported types could be introduced unintentionally.

        * Duplicate sections or options from a single source now raise
          either *note DuplicateSectionError: 12b0. or *note
          DuplicateOptionError: 12b1.  Formerly, duplicates would
          silently overwrite a previous entry.

        * Inline comments are now disabled by default so now the ';'
          character can be safely used in values.

        * Comments now can be indented.  Consequently, for ';' or '#' to
          appear at the start of a line in multiline values, it has to
          be interpolated.  This keeps comment prefix characters in
          values from being mistaken as comments.

        * ‘""’ is now a valid value and is no longer automatically
          converted to an empty string.  For empty strings, use ‘"option
          ="’ in a line.

   * The ‘nntplib’ module was reworked extensively, meaning that its
     APIs are often incompatible with the 3.1 APIs.

   * *note bytearray: 2ea. objects can no longer be used as filenames;
     instead, they should be converted to *note bytes: 1c2.

   * The ‘array.tostring()’ and ‘array.fromstring()’ have been renamed
     to *note array.tobytes(): 12b2. and *note array.frombytes(): 12b3.
     for clarity.  The old names have been deprecated.  (See
     bpo-8990(1).)

   * ‘PyArg_Parse*()’ functions:

        * “t#” format has been removed: use “s#” or “s*” instead

        * “w” and “w#” formats has been removed: use “w*” instead

   * The ‘PyCObject’ type, deprecated in 3.1, has been removed.  To wrap
     opaque C pointers in Python objects, the *note PyCapsule: 12b4. API
     should be used instead; the new type has a well-defined interface
     for passing typing safety information and a less complicated
     signature for calling a destructor.

   * The ‘sys.setfilesystemencoding()’ function was removed because it
     had a flawed design.

   * The *note random.seed(): 12b5. function and method now salt string
     seeds with an sha512 hash function.  To access the previous version
     of 'seed' in order to reproduce Python 3.1 sequences, set the
     'version' argument to '1', ‘random.seed(s, version=1)’.

   * The previously deprecated ‘string.maketrans()’ function has been
     removed in favor of the static methods *note bytes.maketrans():
     12b6. and *note bytearray.maketrans(): 12b7.  This change solves
     the confusion around which types were supported by the *note
     string: d3. module.  Now, *note str: 44c, *note bytes: 1c2, and
     *note bytearray: 2ea. each have their own 'maketrans' and
     'translate' methods with intermediate translation tables of the
     appropriate type.

     (Contributed by Georg Brandl; bpo-5675(2).)

   * The previously deprecated ‘contextlib.nested()’ function has been
     removed in favor of a plain *note with: 5d2. statement which can
     accept multiple context managers.  The latter technique is faster
     (because it is built-in), and it does a better job finalizing
     multiple context managers when one of them raises an exception:

          with open('mylog.txt') as infile, open('a.out', 'w') as outfile:
              for line in infile:
                  if '<critical>' in line:
                      outfile.write(line)

     (Contributed by Georg Brandl and Mattias Brändström; appspot issue
     53094(3).)

   * *note struct.pack(): 12b8. now only allows bytes for the ‘s’ string
     pack code.  Formerly, it would accept text arguments and implicitly
     encode them to bytes using UTF-8.  This was problematic because it
     made assumptions about the correct encoding and because a
     variable-length encoding can fail when writing to fixed length
     segment of a structure.

     Code such as ‘struct.pack('<6sHHBBB', 'GIF87a', x, y)’ should be
     rewritten with to use bytes instead of text,
     ‘struct.pack('<6sHHBBB', b'GIF87a', x, y)’.

     (Discovered by David Beazley and fixed by Victor Stinner;
     bpo-10783(4).)

   * The *note xml.etree.ElementTree: 125. class now raises an *note
     xml.etree.ElementTree.ParseError: 12b9. when a parse fails.
     Previously it raised an *note xml.parsers.expat.ExpatError: 12ba.

   * The new, longer *note str(): 44c. value on floats may break
     doctests which rely on the old output format.

   * In *note subprocess.Popen: 199, the default value for 'close_fds'
     is now ‘True’ under Unix; under Windows, it is ‘True’ if the three
     standard streams are set to ‘None’, ‘False’ otherwise.  Previously,
     'close_fds' was always ‘False’ by default, which produced difficult
     to solve bugs or race conditions when open file descriptors would
     leak into the child process.

   * Support for legacy HTTP 0.9 has been removed from *note
     urllib.request: 10b. and *note http.client: 6f.  Such support is
     still present on the server side (in *note http.server: 72.).

     (Contributed by Antoine Pitrou, bpo-10711(5).)

   * SSL sockets in timeout mode now raise *note socket.timeout: 837.
     when a timeout occurs, rather than a generic *note SSLError: 12bb.

     (Contributed by Antoine Pitrou, bpo-10272(6).)

   * The misleading functions ‘PyEval_AcquireLock()’ and
     ‘PyEval_ReleaseLock()’ have been officially deprecated.  The
     thread-state aware APIs (such as *note PyEval_SaveThread(): 3a8.
     and *note PyEval_RestoreThread(): 3a9.) should be used instead.

   * Due to security risks, ‘asyncore.handle_accept()’ has been
     deprecated, and a new function, ‘asyncore.handle_accepted()’, was
     added to replace it.

     (Contributed by Giampaolo Rodola in bpo-6706(7).)

   * Due to the new *note GIL: 159. implementation,
     ‘PyEval_InitThreads()’ cannot be called before *note
     Py_Initialize(): 8b1. anymore.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=8990

   (2) https://bugs.python.org/issue?@action=redirect&bpo=5675

   (3) https://codereview.appspot.com/53094

   (4) https://bugs.python.org/issue?@action=redirect&bpo=10783

   (5) https://bugs.python.org/issue?@action=redirect&bpo=10711

   (6) https://bugs.python.org/issue?@action=redirect&bpo=10272

   (7) https://bugs.python.org/issue?@action=redirect&bpo=6706


File: python.info,  Node: O que há de novo no Python 3 1,  Next: O que há de novo no Python 3 0,  Prev: O que há de novo no Python 3 2,  Up: O que há de novo no Python

1.13 O que há de novo no Python 3.1
===================================


Autor: Raymond Hettinger

Esse artigo explica os novos recursos em Python 3.1, comparado ao 3.0.
Python 3.1 foi lançado em 27 de junho de 2009.

* Menu:

* PEP 372; Dicionários ordenados: PEP 372 Dicionários ordenados.
* PEP 378; Especificador de formato para separador de milhares: PEP 378 Especificador de formato para separador de milhares.
* Outras mudanças na linguagem: Outras mudanças na linguagem<13>.
* New, Improved, and Deprecated Modules: New Improved and Deprecated Modules<2>.
* Otimizações: Otimizações<12>.
* IDLE: IDLE<2>.
* Mudanças a construções e API C: Mudanças a construções e API C<6>.
* Porting to Python 3.1: Porting to Python 3 1.


File: python.info,  Node: PEP 372 Dicionários ordenados,  Next: PEP 378 Especificador de formato para separador de milhares,  Up: O que há de novo no Python 3 1

1.13.1 PEP 372: Dicionários ordenados
-------------------------------------

Regular Python dictionaries iterate over key/value pairs in arbitrary
order.  Over the years, a number of authors have written alternative
implementations that remember the order that the keys were originally
inserted.  Based on the experiences from those implementations, a new
*note collections.OrderedDict: 5db. class has been introduced.

The OrderedDict API is substantially the same as regular dictionaries
but will iterate over keys and values in a guaranteed order depending on
when a key was first inserted.  If a new entry overwrites an existing
entry, the original insertion position is left unchanged.  Deleting an
entry and reinserting it will move it to the end.

A biblioteca padrão agora possui suporte para dicionários ordenados em
vários módulos.  O módulo *note configparser: 22. usa-os por padrão.
Isso permite que os arquivos de configuração sejam lidos, modificados e
depois gravados de volta na ordem original.  O método '_asdict()' para
*note collections.namedtuple(): 1ca. agora retorna um dicionário
ordenado com os valores aparecendo na mesma ordem que os índices de
tupla subjacentes.  O módulo *note json: 82. está sendo construído com
um 'object_pairs_hook' para permitir que OrderedDicts sejam construídos
pelo decodificador.  Também foi adicionado suporte para ferramentas de
terceiros como PyYAML(1).

Ver também
..........

PEP 372(2) - Dicionários ordenados

     PEP written by Armin Ronacher and Raymond Hettinger.
     Implementation written by Raymond Hettinger.

Uma vez que dicionários ordenados lembram sua ordem de inserção, isso
pode ser usada em conjunto com classificação para criar um dicionário
classificado:

     >>> # regular unsorted dictionary
     >>> d = {'banana': 3, 'apple':4, 'pear': 1, 'orange': 2}

     >>> # dictionary sorted by key
     >>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
     OrderedDict([('apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])

     >>> # dictionary sorted by value
     >>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
     OrderedDict([('pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

     >>> # dictionary sorted by length of the key string
     >>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
     OrderedDict([('pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])

Os novos dicionários classificados mantem suas ordem de classificação
quando entradas são removidas.  Mas quando novas chaves são adicionadas,
as chaves são adicionados ao fim e a classificação não é mantida.

   ---------- Footnotes ----------

   (1) https://pyyaml.org/

   (2) https://peps.python.org/pep-0372/


File: python.info,  Node: PEP 378 Especificador de formato para separador de milhares,  Next: Outras mudanças na linguagem<13>,  Prev: PEP 372 Dicionários ordenados,  Up: O que há de novo no Python 3 1

1.13.2 PEP 378: Especificador de formato para separador de milhares
-------------------------------------------------------------------

The built-in *note format(): 61f. function and the *note str.format():
621. method use a mini-language that now includes a simple, non-locale
aware way to format a number with a thousands separator.  That provides
a way to humanize a program’s output, improving its professional
appearance and readability:

     >>> format(1234567, ',d')
     '1,234,567'
     >>> format(1234567.89, ',.2f')
     '1,234,567.89'
     >>> format(12345.6 + 8901234.12j, ',f')
     '12,345.600000+8,901,234.120000j'
     >>> format(Decimal('1234567.89'), ',f')
     '1,234,567.89'

The supported types are *note int: 257, *note float: 2f7, *note complex:
2f8. and *note decimal.Decimal: 29d.

Discussions are underway about how to specify alternative separators
like dots, spaces, apostrophes, or underscores.  Locale-aware
applications should use the existing 'n' format specifier which already
has some support for thousands separators.

Ver também
..........

PEP 378(1) - Especificador de formato para separador de milhares

     PEP escrita por Raymond Hettinger e implementada por Eric Smith e
     Mark Dickinson.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0378/


File: python.info,  Node: Outras mudanças na linguagem<13>,  Next: New Improved and Deprecated Modules<2>,  Prev: PEP 378 Especificador de formato para separador de milhares,  Up: O que há de novo no Python 3 1

1.13.3 Outras mudanças na linguagem
-----------------------------------

Algumas das mudanças menores feitas no núcleo da linguagem Python são:

   * Directories and zip archives containing a ‘__main__.py’ file can
     now be executed directly by passing their name to the interpreter.
     The directory/zipfile is automatically inserted as the first entry
     in sys.path.  (Suggestion and initial patch by Andy Chu; revised
     patch by Phillip J. Eby and Nick Coghlan; bpo-1739468(1).)

   * The *note int(): 257. type gained a ‘bit_length’ method that
     returns the number of bits necessary to represent its argument in
     binary:

          >>> n = 37
          >>> bin(37)
          '0b100101'
          >>> n.bit_length()
          6
          >>> n = 2**123-1
          >>> n.bit_length()
          123
          >>> (n+1).bit_length()
          124

     (Contributed by Fredrik Johansson, Victor Stinner, Raymond
     Hettinger, and Mark Dickinson; bpo-3439(2).)

   * The fields in *note format(): 61f. strings can now be automatically
     numbered:

          >>> 'Sir {} of {}'.format('Gallahad', 'Camelot')
          'Sir Gallahad of Camelot'

     Formerly, the string would have required numbered fields such as:
     ‘'Sir {0} of {1}'’.

     (Contributed by Eric Smith; bpo-5237(3).)

   * The ‘string.maketrans()’ function is deprecated and is replaced by
     new static methods, *note bytes.maketrans(): 12b6. and *note
     bytearray.maketrans(): 12b7.  This change solves the confusion
     around which types were supported by the *note string: d3. module.
     Now, *note str: 44c, *note bytes: 1c2, and *note bytearray: 2ea.
     each have their own 'maketrans' and 'translate' methods with
     intermediate translation tables of the appropriate type.

     (Contributed by Georg Brandl; bpo-5675(4).)

   * The syntax of the *note with: 5d2. statement now allows multiple
     context managers in a single statement:

          >>> with open('mylog.txt') as infile, open('a.out', 'w') as outfile:
          ...     for line in infile:
          ...         if '<critical>' in line:
          ...             outfile.write(line)

     With the new syntax, the ‘contextlib.nested()’ function is no
     longer needed and is now deprecated.

     (Contributed by Georg Brandl and Mattias Brändström; appspot issue
     53094(5).)

   * ‘round(x, n)’ now returns an integer if 'x' is an integer.
     Previously it returned a float:

          >>> round(1123, -2)
          1100

     (Contributed by Mark Dickinson; bpo-4707(6).)

   * Python now uses David Gay’s algorithm for finding the shortest
     floating-point representation that doesn’t change its value.  This
     should help mitigate some of the confusion surrounding binary
     floating-point numbers.

     The significance is easily seen with a number like ‘1.1’ which does
     not have an exact equivalent in binary floating point.  Since there
     is no exact equivalent, an expression like ‘float('1.1')’ evaluates
     to the nearest representable value which is ‘0x1.199999999999ap+0’
     in hex or ‘1.100000000000000088817841970012523233890533447265625’
     in decimal.  That nearest value was and still is used in subsequent
     floating-point calculations.

     What is new is how the number gets displayed.  Formerly, Python
     used a simple approach.  The value of ‘repr(1.1)’ was computed as
     ‘format(1.1, '.17g')’ which evaluated to ‘'1.1000000000000001'’.
     The advantage of using 17 digits was that it relied on IEEE-754
     guarantees to assure that ‘eval(repr(1.1))’ would round-trip
     exactly to its original value.  The disadvantage is that many
     people found the output to be confusing (mistaking intrinsic
     limitations of binary floating-point representation as being a
     problem with Python itself).

     The new algorithm for ‘repr(1.1)’ is smarter and returns ‘'1.1'’.
     Effectively, it searches all equivalent string representations
     (ones that get stored with the same underlying float value) and
     returns the shortest representation.

     The new algorithm tends to emit cleaner representations when
     possible, but it does not change the underlying values.  So, it is
     still the case that ‘1.1 + 2.2 != 3.3’ even though the
     representations may suggest otherwise.

     The new algorithm depends on certain features in the underlying
     floating-point implementation.  If the required features are not
     found, the old algorithm will continue to be used.  Also, the text
     pickle protocols assure cross-platform portability by using the old
     algorithm.

     (Contributed by Eric Smith and Mark Dickinson; bpo-1580(7))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1739468

   (2) https://bugs.python.org/issue?@action=redirect&bpo=3439

   (3) https://bugs.python.org/issue?@action=redirect&bpo=5237

   (4) https://bugs.python.org/issue?@action=redirect&bpo=5675

   (5) https://codereview.appspot.com/53094

   (6) https://bugs.python.org/issue?@action=redirect&bpo=4707

   (7) https://bugs.python.org/issue?@action=redirect&bpo=1580


File: python.info,  Node: New Improved and Deprecated Modules<2>,  Next: Otimizações<12>,  Prev: Outras mudanças na linguagem<13>,  Up: O que há de novo no Python 3 1

1.13.4 New, Improved, and Deprecated Modules
--------------------------------------------

   * Added a *note collections.Counter: 10d0. class to support
     convenient counting of unique items in a sequence or iterable:

          >>> Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
          Counter({'blue': 3, 'red': 2, 'green': 1})

     (Contributed by Raymond Hettinger; bpo-1696199(1).)

   * Added a new module, *note tkinter.ttk: f9. for access to the Tk
     themed widget set.  The basic idea of ttk is to separate, to the
     extent possible, the code implementing a widget’s behavior from the
     code implementing its appearance.

     (Contributed by Guilherme Polo; bpo-2983(2).)

   * The *note gzip.GzipFile: 41a. and *note bz2.BZ2File: 86a. classes
     now support the context management protocol:

          >>> # Automatically close file after writing
          >>> with gzip.GzipFile(filename, "wb") as f:
          ...     f.write(b"xxx")

     (Contribuição de Antoine Pitrou.)

   * The *note decimal: 36. module now supports methods for creating a
     decimal object from a binary *note float: 2f7.  The conversion is
     exact but can sometimes be surprising:

          >>> Decimal.from_float(1.1)
          Decimal('1.100000000000000088817841970012523233890533447265625')

     The long decimal result shows the actual binary fraction being
     stored for '1.1'.  The fraction has many digits because '1.1'
     cannot be exactly represented in binary.

     (Contributed by Raymond Hettinger and Mark Dickinson.)

   * The *note itertools: 81. module grew two new functions.  The *note
     itertools.combinations_with_replacement(): 12c3. function is one of
     four for generating combinatorics including permutations and
     Cartesian products.  The *note itertools.compress(): 12c4. function
     mimics its namesake from APL. Also, the existing *note
     itertools.count(): 12c5. function now has an optional 'step'
     argument and can accept any type of counting sequence including
     *note fractions.Fraction: 1e7. and *note decimal.Decimal: 29d.:

          >>> [p+q for p,q in combinations_with_replacement('LOVE', 2)]
          ['LL', 'LO', 'LV', 'LE', 'OO', 'OV', 'OE', 'VV', 'VE', 'EE']

          >>> list(compress(data=range(10), selectors=[0,0,1,1,0,1,0,1,0,0]))
          [2, 3, 5, 7]

          >>> c = count(start=Fraction(1,2), step=Fraction(1,6))
          >>> [next(c), next(c), next(c), next(c)]
          [Fraction(1, 2), Fraction(2, 3), Fraction(5, 6), Fraction(1, 1)]

     (Contributed by Raymond Hettinger.)

   * *note collections.namedtuple(): 1ca. now supports a keyword
     argument 'rename' which lets invalid fieldnames be automatically
     converted to positional names in the form _0, _1, etc.  This is
     useful when the field names are being created by an external source
     such as a CSV header, SQL field list, or user input:

          >>> query = input()
          SELECT region, dept, count(*) FROM main GROUPBY region, dept

          >>> cursor.execute(query)
          >>> query_fields = [desc[0] for desc in cursor.description]
          >>> UserQuery = namedtuple('UserQuery', query_fields, rename=True)
          >>> pprint.pprint([UserQuery(*row) for row in cursor])
          [UserQuery(region='South', dept='Shipping', _2=185),
           UserQuery(region='North', dept='Accounting', _2=37),
           UserQuery(region='West', dept='Sales', _2=419)]

     (Contributed by Raymond Hettinger; bpo-1818(3).)

   * The *note re.sub(): 2a3, *note re.subn(): 2a4. and *note
     re.split(): 2a2. functions now accept a flags parameter.

     (Contributed by Gregory Smith.)

   * The *note logging: 87. module now implements a simple *note
     logging.NullHandler: 12c6. class for applications that are not
     using logging but are calling library code that does.  Setting-up a
     null handler will suppress spurious warnings such as “No handlers
     could be found for logger foo”:

          >>> h = logging.NullHandler()
          >>> logging.getLogger("foo").addHandler(h)

     (Contributed by Vinay Sajip; bpo-4384(4)).

   * The *note runpy: be. module which supports the ‘-m’ command line
     switch now supports the execution of packages by looking for and
     executing a ‘__main__’ submodule when a package name is supplied.

     (Contributed by Andi Vajda; bpo-4195(5).)

   * The *note pdb: a5. module can now access and display source code
     loaded via *note zipimport: 132. (or any other conformant PEP
     302(6) loader).

     (Contributed by Alexander Belopolsky; bpo-4201(7).)

   * *note functools.partial: 414. objects can now be pickled.

     (Suggested by Antoine Pitrou and Jesse Noller.  Implemented by Jack
     Diederich; bpo-5228(8).)

   * Add *note pydoc: b5. help topics for symbols so that ‘help('@')’
     works as expected in the interactive environment.

     (Contributed by David Laban; bpo-4739(9).)

   * The *note unittest: 106. module now supports skipping individual
     tests or classes of tests.  And it supports marking a test as an
     expected failure, a test that is known to be broken, but shouldn’t
     be counted as a failure on a TestResult:

          class TestGizmo(unittest.TestCase):

              @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")
              def test_gizmo_on_windows(self):
                  ...

              @unittest.expectedFailure
              def test_gimzo_without_required_library(self):
                  ...

     Also, tests for exceptions have been builtout to work with context
     managers using the *note with: 5d2. statement:

          def test_division_by_zero(self):
              with self.assertRaises(ZeroDivisionError):
                  x / 0

     In addition, several new assertion methods were added including
     *note assertSetEqual(): 12c7, *note assertDictEqual(): 12c8,
     ‘assertDictContainsSubset()’, *note assertListEqual(): 12c9, *note
     assertTupleEqual(): 12ca, *note assertSequenceEqual(): 12cb, *note
     assertRaisesRegexp(): 52f, *note assertIsNone(): 12cc, and *note
     assertIsNotNone(): 12cd.

     (Contributed by Benjamin Peterson and Antoine Pitrou.)

   * The *note io: 7f. module has three new constants for the *note
     seek(): 12ce. method: *note SEEK_SET: 12cf, *note SEEK_CUR: 12d0,
     and *note SEEK_END: 12d1.

   * The *note sys.version_info: 6a0. tuple is now a named tuple:

          >>> sys.version_info
          sys.version_info(major=3, minor=1, micro=0, releaselevel='alpha', serial=2)

     (Contributed by Ross Light; bpo-4285(10).)

   * The ‘nntplib’ and *note imaplib: 74. modules now support IPv6.

     (Contributed by Derek Morr; bpo-1655(11) and bpo-1664(12).)

   * The *note pickle: a6. module has been adapted for better
     interoperability with Python 2.x when used with protocol 2 or
     lower.  The reorganization of the standard library changed the
     formal reference for many objects.  For example, ‘__builtin__.set’
     in Python 2 is called ‘builtins.set’ in Python 3.  This change
     confounded efforts to share data between different versions of
     Python.  But now when protocol 2 or lower is selected, the pickler
     will automatically use the old Python 2 names for both loading and
     dumping.  This remapping is turned-on by default but can be
     disabled with the 'fix_imports' option:

          >>> s = {1, 2, 3}
          >>> pickle.dumps(s, protocol=0)
          b'c__builtin__\nset\np0\n((lp1\nL1L\naL2L\naL3L\natp2\nRp3\n.'
          >>> pickle.dumps(s, protocol=0, fix_imports=False)
          b'cbuiltins\nset\np0\n((lp1\nL1L\naL2L\naL3L\natp2\nRp3\n.'

     An unfortunate but unavoidable side-effect of this change is that
     protocol 2 pickles produced by Python 3.1 won’t be readable with
     Python 3.0.  The latest pickle protocol, protocol 3, should be used
     when migrating data between Python 3.x implementations, as it
     doesn’t attempt to remain compatible with Python 2.x.

     (Contributed by Alexandre Vassalotti and Antoine Pitrou,
     bpo-6137(13).)

   * A new module, *note importlib: 77. was added.  It provides a
     complete, portable, pure Python reference implementation of the
     *note import: 5e2. statement and its counterpart, the *note
     __import__(): 8da. function.  It represents a substantial step
     forward in documenting and defining the actions that take place
     during imports.

     (Contributed by Brett Cannon.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1696199

   (2) https://bugs.python.org/issue?@action=redirect&bpo=2983

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1818

   (4) https://bugs.python.org/issue?@action=redirect&bpo=4384

   (5) https://bugs.python.org/issue?@action=redirect&bpo=4195

   (6) https://peps.python.org/pep-0302/

   (7) https://bugs.python.org/issue?@action=redirect&bpo=4201

   (8) https://bugs.python.org/issue?@action=redirect&bpo=5228

   (9) https://bugs.python.org/issue?@action=redirect&bpo=4739

   (10) https://bugs.python.org/issue?@action=redirect&bpo=4285

   (11) https://bugs.python.org/issue?@action=redirect&bpo=1655

   (12) https://bugs.python.org/issue?@action=redirect&bpo=1664

   (13) https://bugs.python.org/issue?@action=redirect&bpo=6137


File: python.info,  Node: Otimizações<12>,  Next: IDLE<2>,  Prev: New Improved and Deprecated Modules<2>,  Up: O que há de novo no Python 3 1

1.13.5 Otimizações
------------------

Major performance enhancements have been added:

   * The new I/O library (as defined in PEP 3116(1)) was mostly written
     in Python and quickly proved to be a problematic bottleneck in
     Python 3.0.  In Python 3.1, the I/O library has been entirely
     rewritten in C and is 2 to 20 times faster depending on the task at
     hand.  The pure Python version is still available for
     experimentation purposes through the ‘_pyio’ module.

     (Contributed by Amaury Forgeot d’Arc and Antoine Pitrou.)

   * Added a heuristic so that tuples and dicts containing only
     untrackable objects are not tracked by the garbage collector.  This
     can reduce the size of collections and therefore the garbage
     collection overhead on long-running programs, depending on their
     particular use of datatypes.

     (Contributed by Antoine Pitrou, bpo-4688(2).)

   * Enabling a configure option named ‘--with-computed-gotos’ on
     compilers that support it (notably: gcc, SunPro, icc), the bytecode
     evaluation loop is compiled with a new dispatch mechanism which
     gives speedups of up to 20%, depending on the system, the compiler,
     and the benchmark.

     (Contributed by Antoine Pitrou along with a number of other
     participants, bpo-4753(3)).

   * The decoding of UTF-8, UTF-16 and LATIN-1 is now two to four times
     faster.

     (Contributed by Antoine Pitrou and Amaury Forgeot d’Arc,
     bpo-4868(4).)

   * The *note json: 82. module now has a C extension to substantially
     improve its performance.  In addition, the API was modified so that
     json works only with *note str: 44c, not with *note bytes: 1c2.
     That change makes the module closely match the JSON
     specification(5) which is defined in terms of Unicode.

     (Contributed by Bob Ippolito and converted to Py3.1 by Antoine
     Pitrou and Benjamin Peterson; bpo-4136(6).)

   * Unpickling now interns the attribute names of pickled objects.
     This saves memory and allows pickles to be smaller.

     (Contributed by Jake McGuire and Antoine Pitrou; bpo-5084(7).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3116/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=4688

   (3) https://bugs.python.org/issue?@action=redirect&bpo=4753

   (4) https://bugs.python.org/issue?@action=redirect&bpo=4868

   (5) https://json.org/

   (6) https://bugs.python.org/issue?@action=redirect&bpo=4136

   (7) https://bugs.python.org/issue?@action=redirect&bpo=5084


File: python.info,  Node: IDLE<2>,  Next: Mudanças a construções e API C<6>,  Prev: Otimizações<12>,  Up: O que há de novo no Python 3 1

1.13.6 IDLE
-----------

   * IDLE’s format menu now provides an option to strip trailing
     whitespace from a source file.

     (Contributed by Roger D. Serwy; bpo-5150(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5150


File: python.info,  Node: Mudanças a construções e API C<6>,  Next: Porting to Python 3 1,  Prev: IDLE<2>,  Up: O que há de novo no Python 3 1

1.13.7 Mudanças a construções e API C
-------------------------------------

As alterações no processo de construção do Python e na API C incluem:

   * Os inteiros agora são armazenados internamente na base ‘2**15’ ou
     na base ‘2**30’, the base being determined at build time.
     Previously, they were sempre armazenado na base ‘2**15’.  Usando a
     base ‘2**30’ dá significativa performance de desempenho em máquinas
     de 64 bits, mas resultados de referência em 32 bits máquinas foram
     misturadas.  Portanto, o padrão é usar a base ‘2**30’ em máquinas
     de 64 bits e base ‘2**15’ em máquinas de 32 bits; no Unix, há uma
     nova opção de configuração ‘--enable-big-digits’ que pode ser usada
     para substituir este padrão.

     Além das melhorias de desempenho, essa alteração deve ser invisível
     para os usuários finais, com uma exceção: para fins de teste e
     depuração, há um novo structseq *note sys.int_info: 12d5. que
     fornece informações sobre o formato interno, fornecendo o número de
     bits por dígito e o tamanho em bytes do tipo C usado para armazenar
     cada dígito:

          >>> import sys
          >>> sys.int_info
          sys.int_info(bits_per_digit=30, sizeof_digit=4)

     (Contributed by Mark Dickinson; bpo-4258(1).)

   * The *note PyLong_AsUnsignedLongLong(): 12d6. function now handles a
     negative 'pylong' by raising *note OverflowError: 885. instead of
     *note TypeError: 2c3.

     (Contributed by Mark Dickinson and Lisandro Dalcrin; bpo-5175(2).)

   * Deprecated ‘PyNumber_Int()’.  Use *note PyNumber_Long(): a71.
     instead.

     (Contributed by Mark Dickinson; bpo-4910(3).)

   * Added a new *note PyOS_string_to_double(): 12d7. function to
     replace the deprecated functions ‘PyOS_ascii_strtod()’ and
     ‘PyOS_ascii_atof()’.

     (Contributed by Mark Dickinson; bpo-5914(4).)

   * Added *note PyCapsule: 12b4. as a replacement for the ‘PyCObject’
     API. The principal difference is that the new type has a well
     defined interface for passing typing safety information and a less
     complicated signature for calling a destructor.  The old type had a
     problematic API and is now deprecated.

     (Contributed by Larry Hastings; bpo-5630(5).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=4258

   (2) https://bugs.python.org/issue?@action=redirect&bpo=5175

   (3) https://bugs.python.org/issue?@action=redirect&bpo=4910

   (4) https://bugs.python.org/issue?@action=redirect&bpo=5914

   (5) https://bugs.python.org/issue?@action=redirect&bpo=5630


File: python.info,  Node: Porting to Python 3 1,  Prev: Mudanças a construções e API C<6>,  Up: O que há de novo no Python 3 1

1.13.8 Porting to Python 3.1
----------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções que podem exigir alterações no seu código.

   * The new floating-point string representations can break existing
     doctests.  For example:

          def e():
              '''Compute the base of natural logarithms.

              >>> e()
              2.7182818284590451

              '''
              return sum(1/math.factorial(x) for x in reversed(range(30)))

          doctest.testmod()

          **********************************************************************
          Failed example:
              e()
          Expected:
              2.7182818284590451
          Got:
              2.718281828459045
          **********************************************************************

   * The automatic name remapping in the pickle module for protocol 2 or
     lower can make Python 3.1 pickles unreadable in Python 3.0.  One
     solution is to use protocol 3.  Another solution is to set the
     'fix_imports' option to ‘False’.  See the discussion above for more
     details.


File: python.info,  Node: O que há de novo no Python 3 0,  Next: O que há de novo no Python 2 7,  Prev: O que há de novo no Python 3 1,  Up: O que há de novo no Python

1.14 O que há de novo no Python 3.0
===================================


Autor: Guido van Rossum

Este artigo explica os novos recursos do Python 3.0, em comparação com o
2.6.  O Python 3.0, também conhecido como “Python 3000” ou “Py3K”, é o
primeiro lançamento do Python 'intencionalmente incompatível com versões
anteriores'.  O Python 3.0 foi lançado em 3 de dezembro de 2008.  Há
mais mudanças do que em um lançamento típico, e mais que são importantes
para todos os usuários do Python.  No entanto, depois de digerir as
mudanças, você verá que o Python realmente não mudou tanto assim – em
geral, estamos principalmente corrigindo aborrecimentos bem conhecidos,
e removendo muita sujeira antiga.

Este artigo não tenta fornecer uma especificação completa de todos os
novos recursos, mas tenta dar uma visão geral conveniente.  Para
detalhes completos, você deve consultar a documentação do Python 3.0
e/ou as muitas PEPs referenciadas no texto.  Se você quiser entender a
implementação completa e a lógica de design para um recurso específico,
as PEPs geralmente têm mais detalhes do que a documentação regular; mas
observe que as PEPs geralmente não são mantidas atualizadas depois que
um recurso foi totalmente implementado.

Devido a restrições de tempo, este documento não está tão completo
quanto deveria ser.  Como sempre para um novo lançamento, o arquivo
‘Misc/NEWS’ na distribuição fonte contém uma riqueza de informações
detalhadas sobre cada pequena coisa que foi alterada.

* Menu:

* Obstáculos comuns::
* Visão geral das alterações da sintaxe::
* Mudanças já presentes no Python 2.6: Mudanças já presentes no Python 2 6.
* Mudanças na biblioteca::
* PEP 3101; Uma nova abordagem para formatação de strings: PEP 3101 Uma nova abordagem para formatação de strings.
* Mudanças para exceções::
* Outras mudanças diversas::
* Mudanças a construções e API C: Mudanças a construções e API C<7>.
* Desempenho::
* Portando para o Python 3.0: Portando para o Python 3 0.


File: python.info,  Node: Obstáculos comuns,  Next: Visão geral das alterações da sintaxe,  Up: O que há de novo no Python 3 0

1.14.1 Obstáculos comuns
------------------------

Esta seção lista as poucas mudanças que provavelmente irão lhe
atrapalhar se você estiver acostumado com o Python 2.5.

* Menu:

* print é uma função::
* Visualizações e iteradores em vez de listas::
* Comparações de ordenação::
* Inteiros::
* Texto vs. Dados em vez de Unicode vs. 8 bits: Texto vs Dados em vez de Unicode vs 8 bits.


File: python.info,  Node: print é uma função,  Next: Visualizações e iteradores em vez de listas,  Up: Obstáculos comuns

1.14.1.1 print é uma função
...........................

A instrução ‘print’ foi substituída por uma função *note print(): fa9,
com argumentos nomeados para substituir a maior parte da sintaxe
especial da antiga instrução ‘print’ ( PEP 3105(1)).  Exemplos:

     Antigo: print "The answer is", 2*2
     Novo: print("The answer is", 2*2)

     Antigo: print x,           # Vírgula no final suprime nova linha
     Novo: print(x, end=" ")  # Anexa um espaço em vez de uma nova linha

     Antigo: print              # Exibe uma nova linha
     Novo: print()            # Você precisa chamar a função!

     Antigo: print >>sys.stderr, "fatal error"
     Novo: print("fatal error", file=sys.stderr)

     Antigo: print (x, y)       # Exibe repr((x, y))
     Novo: print((x, y))      # Não é o mesmo que print(x, y)!

Você também pode personalizar o separador entre itens, por exemplo:

     print("Há <", 2**32, "> possibilidades!", sep="")

que produz:

     Há <4294967296> possibilidades!

Nota:

   * A função *note print(): fa9. não tem suporte ao recurso “softspace”
     da antiga instrução ‘print’.  Por exemplo, no Python 2.x, ‘print
     "A\n", "B"’ escreveria ‘"A\nB\n"’; mas no Python 3.0, ‘print("A\n",
     "B")’ escreve ‘"A\n B\n"’.

   * Inicialmente, você vai se pegar digitando o antigo ‘print x’
     bastante no modo interativo.  É hora de treinar seus dedos para
     digitar ‘print(x)’ em vez disso!

   * Ao usar a ferramenta de conversão de fonte para fonte ‘2to3’, todas
     as instruções ‘print’ são automaticamente convertidas em chamadas
     de função *note print(): fa9, então isso geralmente não é um
     problema para projetos maiores.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3105/


File: python.info,  Node: Visualizações e iteradores em vez de listas,  Next: Comparações de ordenação,  Prev: print é uma função,  Up: Obstáculos comuns

1.14.1.2 Visualizações e iteradores em vez de listas
....................................................

Algumas APIs conhecidas não retornam mais listas:

   * Os métodos *note dict.keys(): 7ce, *note dict.items(): 7d0. e *note
     dict.values(): 7cf. de *note dict: 256. retornam visualizações, ou
     “views”, em vez de listas.  Por exemplo, isso não funciona mais: ‘k
     = d.keys(); k.sort()’.  Use ‘k = sorted(d)’ em vez disso (isso
     funciona no Python 2.5 também e é igualmente eficiente).

   * Além disso, os métodos ‘dict.iterkeys()’, ‘dict.iteritems()’ e
     ‘dict.itervalues()’ não são mais suportados.

   * *note map(): 867. e *note filter(): 868. retornam iteradores.  Se
     você realmente precisa de uma lista e as sequências de entrada são
     todas de comprimento igual, uma solução rápida é envolver *note
     map(): 867. em *note list(): 611, por exemplo, ‘list(map(...))’,
     mas uma solução melhor é frequentemente usar uma compreensão de
     lista (especialmente quando o código original usa *note lambda:
     12df.), ou reescrever o código para que ele não precise de uma
     lista.  Particularmente complicado é *note map(): 867. invocado
     para os efeitos colaterais da função; a transformação correta é
     usar um laço *note for: 2f2. regular (já que criar uma lista seria
     apenas desperdício).

     Se as sequências de entrada não tiverem o mesmo comprimento, *note
     map(): 867. irá parar no término da mais curta das sequências.
     Para compatibilidade total com *note map(): 867. do Python 2.x,
     também envolva as sequências em *note itertools.zip_longest():
     12e0, por exemplo, ‘map(func, *sequences)’ se torna ‘list(map(func,
     itertools.zip_longest(*sequences)))’.

   * *note range(): 94a. agora se comporta como ‘xrange()’ costumava se
     comportar, exceto que funciona com valores de tamanho arbitrário.
     Este último não existe mais.

   * *note zip(): 7d1. agora retorna um iterador.


File: python.info,  Node: Comparações de ordenação,  Next: Inteiros,  Prev: Visualizações e iteradores em vez de listas,  Up: Obstáculos comuns

1.14.1.3 Comparações de ordenação
.................................

O Python 3.0 simplificou as regras para ordenar comparações:

   * Os operadores de comparação de ordenação (‘<’, ‘<=’, ‘>=’, ‘>’)
     levantam uma exceção TypeError quando os operandos não têm uma
     ordenação natural significativa.  Assim, expressões como ‘1 < ''’,
     ‘0 > None’ ou ‘len <= len’ não são mais válidas e, por exemplo,
     ‘None < None’ levanta *note TypeError: 2c3. em vez de retornar
     ‘False’.  Um corolário é que classificar uma lista heterogênea não
     faz mais sentido – todos os elementos devem ser comparáveis entre
     si.  Observe que isso não se aplica aos operadores ‘==’ e ‘!=’:
     objetos de diferentes tipos incomparáveis sempre são comparados de
     forma diferente entre si.

   * *note sorted(): be7. e *note list.sort(): be8. não aceitam mais o
     argumento 'cmp' fornecendo uma função de comparação.  Use o
     argumento 'key' em vez disso.  N.B. os argumentos 'key' e 'reverse'
     agora são “somente-nomeados”.

   * A função ‘cmp()’ deve ser tratada como extinta, e o método especial
     ‘__cmp__()’ não é mais suportado.  Use *note __lt__(): 12e2. para
     classificação, *note __eq__(): b0d. com *note __hash__(): b0e. e
     outras comparações avançadas conforme necessário.  (Se você
     realmente precisa da funcionalidade ‘cmp()’, pode usar a expressão
     ‘(a > b) - (a < b)’ como o equivalente para ‘cmp(a, b)’.)


File: python.info,  Node: Inteiros,  Next: Texto vs Dados em vez de Unicode vs 8 bits,  Prev: Comparações de ordenação,  Up: Obstáculos comuns

1.14.1.4 Inteiros
.................

   * PEP 237(1): Essencialmente, ‘long’ foi renomeado para *note int:
     257.  Ou seja, há apenas um tipo integral embutido, chamado *note
     int: 257.; mas ele se comporta principalmente como o antigo tipo
     ‘long’.

   * PEP 238(2): Uma expressão como ‘1/2’ retorna um float.  Use ‘1//2’
     para obter o comportamento de truncamento.  (A última sintaxe
     existe há anos, pelo menos desde o Python 2.2.)

   * A constante ‘sys.maxint’ foi removida, pois não há mais um limite
     para o valor de inteiros.  No entanto, *note sys.maxsize: 1205.
     pode ser usado como um inteiro maior do que qualquer lista prática
     ou índice de string.  Ele está em conformidade com o tamanho
     inteiro “natural” da implementação e é tipicamente o mesmo que
     ‘sys.maxint’ em versões anteriores na mesma plataforma (assumindo
     as mesmas opções de construção).

   * O *note repr(): 800. de um inteiro longo não inclui mais o ‘L’
     final, então o código que remove esse caractere incondicionalmente
     cortará o último dígito.  (Use *note str(): 44c. em vez disso.)

   * Literais octais não estão mais no formato ‘0720’; em vez disso, use
     ‘0o720’.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0237/

   (2) https://peps.python.org/pep-0238/


File: python.info,  Node: Texto vs Dados em vez de Unicode vs 8 bits,  Prev: Inteiros,  Up: Obstáculos comuns

1.14.1.5 Texto vs. Dados em vez de Unicode vs. 8 bits
.....................................................

Tudo o que você achava que sabia sobre dados binários e Unicode mudou.

   * O Python 3.0 usa os conceitos de 'texto' e 'dados' (binários) em
     vez de strings Unicode e strings de 8 bits.  Todo texto é Unicode;
     no entanto, o Unicode 'codificado' é representado como dados
     binários.  O tipo usado para armazenar texto é *note str: 44c, o
     tipo usado para armazenar dados é *note bytes: 1c2.  A maior
     diferença com a situação 2.x é que qualquer tentativa de misturar
     texto e dados no Python 3.0 levanta *note TypeError: 2c3, enquanto
     que se você misturasse strings Unicode e de 8 bits no Python 2.x,
     funcionaria se a string de 8 bits contivesse apenas bytes de 7 bits
     (ASCII), mas você obteria *note UnicodeDecodeError: a1d. se
     contivesse valores não ASCII. Esse comportamento específico de
     valor causou inúmeras caras tristes ao longo dos anos.

   * Como consequência dessa mudança na filosofia, praticamente todo
     código que usa Unicode, codificações ou dados binários
     provavelmente terá que mudar.  A mudança é para melhor, pois no
     mundo 2.x havia vários bugs relacionados à mistura de texto
     codificado e não codificado.  Para estar preparado no Python 2.x,
     comece a usar ‘unicode’ para todo texto não codificado e *note str:
     44c. apenas para dados binários ou codificados.  Então a ferramenta
     ‘2to3’ fará a maior parte do trabalho para você.

   * Você não pode mais usar literais ‘u"..."’ para texto Unicode.  No
     entanto, você deve usar literais ‘b"..."’ para dados binários.

   * Como os tipos *note str: 44c. e *note bytes: 1c2. não podem ser
     misturados, você deve sempre converter explicitamente entre eles.
     Use *note str.encode(): 8db. para ir de *note str: 44c. para *note
     bytes: 1c2, e *note bytes.decode(): 8dc. para ir de *note bytes:
     1c2. para *note str: 44c.  Você também pode usar ‘bytes(s,
     encoding=...)’ e ‘str(b, encoding=...)’, respectivamente.

   * Assim como *note str: 44c, o tipo *note bytes: 1c2. é imutável.  Há
     um tipo 'mutável' separado para armazenar dados binários em buffer,
     *note bytearray: 2ea.  Quase todas as APIs que aceitam *note bytes:
     1c2. também aceitam *note bytearray: 2ea.  A API mutável é baseada
     em *note collections.MutableSequence: 1a1.

   * Todas as contrabarras em literais de strings brutas são
     interpretadas literalmente.  Isso significa que os escapes ‘'\U'’ e
     ‘'\u'’ em strings brutas não são tratados de forma especial.  Por
     exemplo, ‘r'\u20ac'’ é uma string de 6 caracteres no Python 3.0,
     enquanto no 2.6, ‘ur'\u20ac'’ era o único caractere “euro”.  (É
     claro que essa mudança afeta apenas literais de strings brutas; o
     caractere euro é ‘'\u20ac'’ no Python 3.0.)

   * O tipo abstrato embutido ‘basestring’ foi removido.  Use *note str:
     44c. em vez disso.  Os tipos *note str: 44c. e *note bytes: 1c2.
     não têm funcionalidade suficiente em comum para garantir uma classe
     base compartilhada.  A ferramenta ‘2to3’ (veja abaixo) substitui
     cada ocorrência de ‘basestring’ por *note str: 44c.

   * Arquivos abertos como arquivos texto (ainda o modo padrão para
     *note open(): 51c.) sempre usam uma codificação para mapear entre
     strings (na memória) e bytes (no disco).  Arquivos binários
     (abertos com um ‘b’ no argumento mode) sempre usam bytes na
     memória.  Isso significa que se um arquivo for aberto usando um
     modo ou codificação incorretos, a E/S provavelmente falhará
     ruidosamente, em vez de produzir dados incorretos silenciosamente.
     Isso também significa que até mesmo usuários Unix terão que
     especificar o modo correto (texto ou binário) ao abrir um arquivo.
     Há uma codificação padrão dependente da plataforma, que em
     plataformas Unixy pode ser definida com a variável de ambiente
     ‘LANG’ (e às vezes também com algumas outras variáveis de ambiente
     relacionadas à localidade específicas da plataforma).  Em muitos
     casos, mas não em todos, o padrão do sistema é UTF-8; você nunca
     deve contar com esse padrão.  Qualquer aplicação que leia ou
     escreva mais do que texto ASCII puro provavelmente deve ter uma
     maneira de substituir a codificação.  Não há mais necessidade de
     usar os fluxos com reconhecimento de codificação no módulo *note
     codecs: 1b.

   * Os valores iniciais de *note sys.stdin: 53d, *note sys.stdout: ae6.
     e *note sys.stderr: 940. agora são arquivos texto somente unicode
     (ou seja, são instâncias de *note io.TextIOBase: 695.).  Para ler e
     gravar dados de bytes com esses fluxos, você precisa usar o
     atributo *note io.TextIOBase.buffer: 12e5. deles.

   * Nomes de arquivo são passados e retornados de APIs como strings
     (Unicode).  Isso pode apresentar problemas específicos de
     plataforma porque em algumas plataformas nomes de arquivo são
     strings de bytes arbitrárias.  (Por outro lado, no Windows nomes de
     arquivo são armazenados nativamente como Unicode.)  Como solução
     alternativa, a maioria das APIs (por exemplo, *note open(): 51c. e
     muitas funções no módulo *note os: a1.) que aceitam nomes de
     arquivo aceitam objetos *note bytes: 1c2. assim como strings, e
     algumas APIs têm uma maneira de pedir um valor de retorno *note
     bytes: 1c2.  Assim, *note os.listdir(): 1139. retorna uma lista de
     instâncias *note bytes: 1c2. se o argumento for uma instância *note
     bytes: 1c2, e *note os.getcwdb(): a9b. retorna o diretório de
     trabalho atual como uma instância *note bytes: 1c2.  Observe que
     quando *note os.listdir(): 1139. retorna uma lista de strings, os
     nomes de arquivos que não podem ser decodificados corretamente são
     omitidos em vez de levantar *note UnicodeError: 12e6.

   * Algumas APIs de sistema como *note os.environ: 11f9. e *note
     sys.argv: 12a6. também podem apresentar problemas quando os bytes
     disponibilizados pelo sistema não são interpretáveis usando a
     codificação padrão.  Definir a variável ‘LANG’ e executar o
     programa novamente é provavelmente a melhor abordagem.

   * PEP 3138(1): A *note repr(): 800. de uma string não escapa mais
     caracteres não-ASCII. No entanto, ele ainda escapa caracteres de
     controle e pontos de código com status não imprimível no padrão
     Unicode.

   * PEP 3120(2): A codificação de fontes padrão agora é UTF-8.

   * PEP 3131(3): Letras não ASCII agora são permitidas em
     identificadores.  (No entanto, a biblioteca padrão permanece
     somente ASCII, com exceção dos nomes dos colaboradores nos
     comentários.)

   * Os módulos ‘StringIO’ e ‘cStringIO’ se foram.  Em vez disso,
     importe o módulo *note io: 7f. e use *note io.StringIO: f59. ou
     *note io.BytesIO: ed3. para texto e dados, respectivamente.

   * Veja também o guia *note Unicode: 12e7, que foi atualizado para o
     Python 3.0.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3138/

   (2) https://peps.python.org/pep-3120/

   (3) https://peps.python.org/pep-3131/


File: python.info,  Node: Visão geral das alterações da sintaxe,  Next: Mudanças já presentes no Python 2 6,  Prev: Obstáculos comuns,  Up: O que há de novo no Python 3 0

1.14.2 Visão geral das alterações da sintaxe
--------------------------------------------

Esta seção fornece uma breve visão geral de cada mudança 'sintática' no
Python 3.0.

* Menu:

* Nova sintaxe::
* Sintaxe alterada::
* Sintaxe removida::


File: python.info,  Node: Nova sintaxe,  Next: Sintaxe alterada,  Up: Visão geral das alterações da sintaxe

1.14.2.1 Nova sintaxe
.....................

   * PEP 3107(1): Anotações de argumento de função e valor de retorno.
     Isso fornece uma maneira padronizada de anotar os parâmetros e o
     valor de retorno de uma função.  Não há semântica anexada a essas
     anotações, exceto que elas podem ser introspectadas em tempo de
     execução usando o atributo ‘__annotations__’.  A intenção é
     encorajar a experimentação por meio de metaclasses, decoradores ou
     frameworks.

   * PEP 3102(2): Argumentos somente-nomeados.  Parâmetros nomeados que
     ocorrem após ‘*args’ na lista de parâmetros 'devem' ser
     especificados usando a sintaxe dos nomes na chamada.  Você também
     pode usar um ‘*’ simples na lista de parâmetros para indicar que
     não aceita uma lista de argumentos de comprimento variável, mas tem
     argumentos somente-nomeados.

   * Argumentos nomeados são permitidos após a lista de classes base em
     uma definição de classe.  Isso é usado pela nova convenção para
     especificar uma metaclasse (veja a próxima seção), mas pode ser
     usado para outros propósitos também, desde que a metaclasse dê
     suporte.

   * PEP 3104(3): instrução *note nonlocal: 12ea.  Usando ‘nonlocal x’,
     agora você pode atribuir diretamente a uma variável em um escopo
     externo (mas não global).  ‘nonlocal’ é uma nova palavra reservada.

   * PEP 3132(4): Desempacotamento iterável estendido.  Agora você pode
     escrever coisas como ‘a, b, *rest = some_sequence’.  E até mesmo
     ‘*rest, a = stuff’.  O objeto ‘rest’ é sempre uma lista
     (possivelmente vazia); o lado direito pode ser qualquer iterável.
     Exemplo:

          (a, *rest, b) = range(5)

     Isso define 'a' como ‘0’, 'b' como ‘4’ e 'rest' como ‘[1, 2, 3]’.

   * Compreensões de dicionário: ‘{k: v for k, v in stuff}’ significa a
     mesma coisa que ‘dict(stuff)’, mas é mais flexível.  (Isto é PEP
     274(5) justificada.  :-)

   * Definir literais, por exemplo, ‘{1, 2}’.  Note que ‘{}’ é um
     dicionário vazio; use ‘set()’ para um conjunto vazio.  Compreensões
     de conjuntos também são suportadas; por exemplo, ‘{x for x in
     stuff}’ significa a mesma coisa que ‘set(stuff)’, mas é mais
     flexível.

   * Novos literais octais, por exemplo, ‘0o720’ (já em 2.6).  Os
     antigos literais octais (‘0720’) se foram.

   * Novos literais binários, por exemplo, ‘0b1010’ (já em 2.6), e há
     uma nova função embutida correspondente, *note bin(): 12eb.

   * Literais de bytes são introduzidos com um ‘b’ ou ‘B’ no início, e
     há uma nova função embutida correspondente, *note bytes(): 1c2.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3107/

   (2) https://peps.python.org/pep-3102/

   (3) https://peps.python.org/pep-3104/

   (4) https://peps.python.org/pep-3132/

   (5) https://peps.python.org/pep-0274/


File: python.info,  Node: Sintaxe alterada,  Next: Sintaxe removida,  Prev: Nova sintaxe,  Up: Visão geral das alterações da sintaxe

1.14.2.2 Sintaxe alterada
.........................

   * PEP 3109(1) e PEP 3134(2): nova sintaxe da instrução *note raise:
     5ed.: ‘raise [EXPR [from EXPR]]’.  Veja abaixo.

   * ‘as’ e *note with: 5d2. agora são palavras reservadas.  (Desde a
     versão 2.6, na verdade.)

   * ‘True’, ‘False’ e ‘None’ são palavras reservadas.  (A versão 2.6 já
     aplicava parcialmente as restrições em ‘None’.)

   * Alteração de *note except: 18b. 'exc', 'var' para ‘except’ 'exc'
     ‘as’ 'var'.  Veja a PEP 3110(3).

   * PEP 3115(4): Nova sintaxe de metaclasse.  Em vez de:

          class C:
              __metaclass__ = M
              ...

     agora você deve usar:

          class C(metaclass=M):
              ...

     A variável global do módulo ‘__metaclass__’ não é mais suportada.
     (Era uma ajuda para facilitar a mudança do padrão para classes de
     novo estilo sem derivar cada classe de *note object: a96.)

   * As compreensões de lista não têm mais suporte a mais a forma
     sintática ‘[... for VAR in ITEM1, ITEM2, ...]’.  Use ‘[... for VAR
     in (ITEM1, ITEM2, ...)]’ em vez disso.  Observe também que as
     compreensões de lista têm semântica diferente: elas estão mais
     próximas do açúcar sintático para uma expressão geradora dentro de
     um construtor *note list(): 611. e, em particular, as variáveis de
     controle de laço não são mais vazadas para o escopo circundante.

   * As 'reticências' (‘...’) podem ser usadas como uma expressão
     atômica em qualquer lugar.  (Anteriormente, eram permitidas apenas
     em fatias.)  Além disso, agora 'devem' ser escritas como ‘...’.
     (Anteriormente, também poderiam ser escritas como ‘. . .’, por um
     mero acidente da gramática.)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3109/

   (2) https://peps.python.org/pep-3134/

   (3) https://peps.python.org/pep-3110/

   (4) https://peps.python.org/pep-3115/


File: python.info,  Node: Sintaxe removida,  Prev: Sintaxe alterada,  Up: Visão geral das alterações da sintaxe

1.14.2.3 Sintaxe removida
.........................

   * PEP 3113(1): Desempacotamento de parâmetro de tupla removido.  Você
     não pode mais escrever ‘def foo(a, (b, c)): ...’.  Em vez disso,
     use ‘def foo(a, b_c): b, c = b_c’.

   * Removidos backticks (use *note repr(): 800.).

   * Removido ‘<>’ (use ‘!=’).

   * Removida palavra reservada: *note exec(): 17f. não é mais uma
     palavra reservada; ela permanece como uma função.  (Felizmente a
     sintaxe da função também era aceita nas versões 2.x.)  Observe
     também que *note exec(): 17f. não aceita mais um argumento de
     fluxo; em vez de ‘exec(f)’ você pode usar ‘exec(f.read())’.

   * Literais de inteiro não mais têm suporte a um ‘l’ ou ‘L’ final.

   * Literais de string não mais têm suporte a um ‘u’ ou ‘U’ no início.

   * A sintaxe *note from: 12ee. 'módulo' *note import: 5e2. ‘*’ é
     permitida somente no nível do módulo, não mais dentro de funções.

   * A única sintaxe aceitável para importações relativas é ‘from
     .[MODULE] import NAME’.  Todos as formas de *note import: 5e2. que
     não começam com ‘.’ são interpretadas como importações absolutas.
     ( PEP 328(2))

   * As classes clássicas se foram.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3113/

   (2) https://peps.python.org/pep-0328/


File: python.info,  Node: Mudanças já presentes no Python 2 6,  Next: Mudanças na biblioteca,  Prev: Visão geral das alterações da sintaxe,  Up: O que há de novo no Python 3 0

1.14.3 Mudanças já presentes no Python 2.6
------------------------------------------

Como muitos usuários provavelmente fazem o salto direto do Python 2.5
para o Python 3.0, esta seção lembra o leitor dos novos recursos que
foram originalmente projetados para o Python 3.0, mas que foram portados
de volta para o Python 2.6.  As seções correspondentes em *note O que há
de novo no Python 2.6: 12f0. devem ser consultadas para descrições mais
longas.

   * *note PEP 343; The ‘with’ statement: 12f1.  A instrução *note with:
     5d2. agora é um recurso padrão e não precisa mais ser importada de
     *note __future__: 0.  Confira também *note Writing Context
     Managers: 12f2. e *note The contextlib module: 12f3.

   * *note PEP 366; Explicit Relative Imports From a Main Module: 12f4.
     Isso aumenta a utilidade da opção *note -m: 5e1. quando o módulo
     referenciado reside em um pacote.

   * *note PEP 370; Per-user site-packages Directory: 12f5.

   * *note PEP 371; The multiprocessing Package: 12f6.

   * *note PEP 3101; Advanced String Formatting: 12f7.  Nota: a
     descrição da versão 2.6 menciona o método *note format(): 61f. para
     strings de 8 bits e Unicode.  No 3.0, apenas o tipo *note str: 44c.
     (strings de texto com suporte a Unicode) tem suporte a esse método;
     o tipo *note bytes: 1c2. não.  O plano é eventualmente tornar esta
     a única API para formatação de strings e começar a descontinuar o
     operador ‘%’ no Python 3.1.

   * *note PEP 3105; print As a Function: 12f8.  Este é agora um recurso
     padrão e não precisa mais ser importado de *note __future__: 0.
     Mais detalhes foram fornecidos acima.

   * *note PEP 3110; Exception-Handling Changes: 12f9.  A sintaxe *note
     except: 18b. 'exc' ‘as’ 'var' agora é padrão e ‘except’ 'exc',
     'var' não é mais suportado.  (Claro, a parte ‘as’ 'var' ainda é
     opcional.)

   * *note PEP 3112; Byte Literals: 12fa.  A notação de literal de
     string ‘b"..."’ (e suas variantes como ‘b'...'’, ‘b"""..."""’ e
     ‘br"..."’) agora produz um literal do tipo *note bytes: 1c2.

   * *note PEP 3116; New I/O Library: 12fb.  O módulo *note io: 7f.
     agora é a maneira padrão de fazer E/S de arquivo.  A função
     embutida *note open(): 51c. agora é um apelido para *note
     io.open(): 51d. e tem argumentos nomeados adicionais 'encoding',
     'errors', 'newline' e 'closefd'.  Observe também que um argumento
     'mode' inválido agora levanta *note ValueError: 202, não *note
     IOError: 108b.  O objeto arquivo binário subjacente a um objeto
     arquivo texto pode ser acessado como ‘f.buffer’ (mas tome cuidado,
     pois o objeto texto mantém um buffer de si mesmo para acelerar as
     operações de codificação e decodificação).

   * *note PEP 3118; Revised Buffer Protocol: 12fc.  A antiga função
     embutida ‘buffer()’ agora realmente se foi; a nova função embutida
     *note memoryview(): 2eb. fornece funcionalidade (principalmente)
     semelhante.

   * *note PEP 3119; Abstract Base Classes: 12fd.  O módulo *note abc:
     4. e as ABCs definidas no módulo *note collections: 1d. desempenham
     um papel um pouco mais proeminente na linguagem agora, e tipos
     embutidos de coleção como *note dict: 256. e *note list: 611. estão
     em conformidade com as ABCs *note collections.MutableMapping: 10eb.
     e *note collections.MutableSequence: 1a1, respectivamente.

   * *note PEP 3127; Integer Literal Support and Syntax: 12fe.  Conforme
     mencionado acima, a nova notação de literal octal é a única
     suportada, e literais binários foram adicionados.

   * *note PEP 3129; Class Decorators: 12ff.

   * *note PEP 3141; A Type Hierarchy for Numbers: 1300.  O módulo *note
     numbers: 9e. é outro novo uso de ABCs, definindo a “torre numérica”
     do Python.  Observe também o novo módulo *note fractions: 5d. que
     implementa *note numbers.Rational: 1301.


File: python.info,  Node: Mudanças na biblioteca,  Next: PEP 3101 Uma nova abordagem para formatação de strings,  Prev: Mudanças já presentes no Python 2 6,  Up: O que há de novo no Python 3 0

1.14.4 Mudanças na biblioteca
-----------------------------

Devido a restrições de tempo, este documento não cobre exaustivamente as
mudanças muito extensas na biblioteca padrão.  PEP 3108(1) é a
referência para as principais mudanças na biblioteca.  Aqui está uma
revisão resumida:

   * Muitos módulos antigos foram removidos.  Alguns, como ‘gopherlib’
     (não mais usado) e ‘md5’ (substituído por *note hashlib: 68.), já
     tinham sido descontinuados pela PEP 4(2).  Outros foram removidos
     como resultado da remoção do suporte para várias plataformas, como
     Irix, BeOS e Mac OS 9 (veja PEP 11(3)).  Alguns módulos também
     foram selecionados para remoção no Python 3.0 devido à falta de uso
     ou porque existe uma substituição melhor.  Veja PEP 3108(4) para
     uma lista exaustiva.

   * O pacote ‘bsddb3’ foi removido porque sua presença na biblioteca
     padrão principal provou ao longo do tempo ser um fardo particular
     para os desenvolvedores principais devido à instabilidade dos
     testes e ao cronograma de lançamento do Berkeley DB. No entanto, o
     pacote está vivo e bem, mantido externamente em
     ‘https://www.jcea.es/programacion/pybsddb.htm’.

   * Alguns módulos foram renomeados porque seu nome antigo desobedecia
     a PEP 8(5), ou por vários outros motivos.  Aqui está a lista:

     Old Name                    Novo nome
                                 
     --------------------------------------------------------
                                 
     _winreg                     winreg
                                 
                                 
     ConfigParser                configparser
                                 
                                 
     copy_reg                    copyreg
                                 
                                 
     Queue                       queue
                                 
                                 
     SocketServer                socketserver
                                 
                                 
     markupbase                  _markupbase
                                 
                                 
     repr                        reprlib
                                 
                                 
     test.test_support           test.support
                                 

   * Um padrão comum no Python 2.x é ter uma versão de um módulo
     implementada em Python puro, com uma versão acelerada opcional
     implementada como uma extensão C; por exemplo, *note pickle: a6. e
     ‘cPickle’.  Isso coloca o fardo de importar a versão acelerada e
     recorrer à versão Python pura em cada usuário desses módulos.  No
     Python 3.0, as versões aceleradas são consideradas detalhes de
     implementação das versões Python puras.  Os usuários devem sempre
     importar a versão padrão, que tenta importar a versão acelerada e
     recorrer à versão Python pura.  O par *note pickle: a6. / ‘cPickle’
     recebeu esse tratamento.  O módulo *note profile: af. está na lista
     para 3.1.  O módulo ‘StringIO’ foi transformado em uma classe no
     módulo *note io: 7f.

   * Alguns módulos relacionados foram agrupados em pacotes e,
     geralmente, os nomes dos submódulos foram simplificados.  Os novos
     pacotes resultantes são:

        * *note dbm: 31. (‘anydbm’, ‘dbhash’, ‘dbm’, ‘dumbdbm’, ‘gdbm’,
          ‘whichdb’).

        * *note html: 6b. (‘HTMLParser’, ‘htmlentitydefs’).

        * *note http: 6e. (‘httplib’, ‘BaseHTTPServer’, ‘CGIHTTPServer’,
          ‘SimpleHTTPServer’, ‘Cookie’, ‘cookielib’).

        * *note tkinter: f0. (todos os módulos relacionados a ‘Tkinter’,
          exceto *note turtle: 101.).  O público-alvo de *note turtle:
          101. não se importa muito com *note tkinter: f0.  Observe
          também que, a partir do Python 2.6, a funcionalidade de *note
          turtle: 101. foi bastante aprimorada.

        * *note urllib: 108. (‘urllib’, ‘urllib2’, ‘urlparse’,
          ‘robotparse’).

        * *note xmlrpc: 12d. (‘xmlrpclib’, ‘DocXMLRPCServer’,
          ‘SimpleXMLRPCServer’).

Algumas outras mudanças nos módulos da biblioteca padrão, não cobertas
pela PEP 3108(6):

   * ‘sets’ eliminado.  Use a classe embutida *note set(): 5d9.

   * Limpeza do módulo *note sys: d9.: removidos ‘sys.exitfunc()’,
     ‘sys.exc_clear()’, ‘sys.exc_type’, ‘sys.exc_value’,
     ‘sys.exc_traceback’.  (Observe que *note sys.last_type: 4bf. etc.
     permanecem.)

   * Limpeza do tipo *note array.array: 1a0.: os métodos ‘read()’ e
     ‘write()’ foram removidos; use *note fromfile(): 1303. e *note
     tofile(): 1304. em vez disso.  Além disso, o typecode ‘'c'’ para
     vetor foi removido – use ‘'b'’ para bytes ou ‘'u'’ para caracteres
     Unicode.

   * Cleanup of the *note operator: 9f. module: removed
     ‘sequenceIncludes()’ and ‘isCallable()’.

   * Limpeza do módulo ‘thread’: ‘acquire_lock()’ e ‘release_lock()’
     foram removidos; use *note acquire(): 698. e *note release(): 1305.
     em vez disso.

   * Cleanup of the *note random: b8. module: removed the ‘jumpahead()’
     API.

   * O módulo ‘new’ foi removido.

   * The functions ‘os.tmpnam()’, ‘os.tempnam()’ and ‘os.tmpfile()’ have
     been removed in favor of the *note tempfile: e0. module.

   * O módulo *note tokenize: fb. foi alterado para funcionar com bytes.
     O ponto de entrada principal agora é *note tokenize.tokenize():
     4d9, em vez de generate_tokens.

   * ‘string.letters’ and its friends (‘string.lowercase’ and
     ‘string.uppercase’) are gone.  Use *note string.ascii_letters:
     1306. etc.  instead.  (The reason for the removal is that
     ‘string.letters’ and friends had locale-specific behavior, which is
     a bad idea for such attractively named global “constants”.)

   * Renamed module ‘__builtin__’ to *note builtins: 12. (removing the
     underscores, adding an ‘s’).  The ‘__builtins__’ variable found in
     most global namespaces is unchanged.  To modify a builtin, you
     should use *note builtins: 12, not ‘__builtins__’!

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3108/

   (2) https://peps.python.org/pep-0004/

   (3) https://peps.python.org/pep-0011/

   (4) https://peps.python.org/pep-3108/

   (5) https://peps.python.org/pep-0008/

   (6) https://peps.python.org/pep-3108/


File: python.info,  Node: PEP 3101 Uma nova abordagem para formatação de strings,  Next: Mudanças para exceções,  Prev: Mudanças na biblioteca,  Up: O que há de novo no Python 3 0

'PEP 3101': Uma nova abordagem para formatação de strings

   * Um novo sistema para operações de formatação de strings embutidas
     substitui o operador de formatação de strings ‘%’.  (No entanto, o
     operador ‘%’ ainda é suportado; ele será descontinuado no Python
     3.1 e removido da linguagem em algum momento posterior.)  Leia a
     PEP 3101(1) para obter informações completas.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3101/


File: python.info,  Node: Mudanças para exceções,  Next: Outras mudanças diversas,  Prev: PEP 3101 Uma nova abordagem para formatação de strings,  Up: O que há de novo no Python 3 0

1.14.6 Mudanças para exceções
-----------------------------

As APIs para levantar e capturar exceções foram limpas e novos recursos
poderosos foram adicionados:

   * PEP 352(1): Todas as exceções devem ser derivadas (direta ou
     indiretamente) de *note BaseException: 5bb.  Esta é a raiz da
     hierarquia de exceções.  Isso não é novo como recomendação, mas o
     'requisito' para herdar de *note BaseException: 5bb. é novo.  (O
     Python 2.6 ainda permitia que classes clássicas fossem levantadas e
     não colocava nenhuma restrição sobre o que você pode capturar.)
     Como consequência, exceções de string estão finalmente verdadeira e
     completamente mortas.

   * Quase todas as exceções devem derivar de *note Exception: 9e2.;
     *note BaseException: 5bb. deve ser usado apenas como uma classe
     base para exceções que devem ser manipuladas apenas no nível
     superior, como *note SystemExit: d63. ou *note KeyboardInterrupt:
     9d9.  O idioma recomendado para manipular todas as exceções, exceto
     para esta última categoria, é usar *note except: 18b. *note
     Exception: 9e2.

   * ‘StandardError’ was removed.

   * Exceptions no longer behave as sequences.  Use the *note args: 56c.
     attribute instead.

   * PEP 3109(2): levantando exceções.  Agora você deve usar ‘raise
     EXCEPTION(ARGS)’ em vez de ‘raise EXCEPTION, ARGS’.  Além disso,
     você não pode mais especificar explicitamente um traceback
     (situação da pilha de execução); em vez disso, se você 'precisar'
     fazer isso, você pode atribuir diretamente ao atributo *note
     __traceback__: 1309. (veja abaixo).

   * PEP 3110(3): Capturando exceções.  Agora você deve usar ‘except
     SOMEEXCEPTION as VARIABLE’ em vez de ‘except SOMEEXCEPTION,
     VARIABLE’.  Além disso, a variável 'variable' é explicitamente
     excluída quando o bloco *note except: 18b. é deixado.

   * PEP 3134(4): Encadeamento de exceções.  Existem dois casos:
     encadeamento implícito e encadeamento explícito.  O encadeamento
     implícito acontece quando uma exceção é levantada em um bloco
     manipulador *note except: 18b. ou *note finally: 9d2.  Isso
     geralmente acontece devido a um bug no bloco do manipulador;
     chamamos isso de exceção 'secundária'.  Nesse caso, a exceção
     original (que estava sendo manipulada) é salva como o atributo
     *note __context__: 130a. da exceção secundária.  O encadeamento
     explícito é invocado com esta sintaxe:

          raise SecondaryException() from primary_exception

     (onde 'primary_exception' é qualquer expressão que produz um objeto
     de exceção, provavelmente uma exceção que foi capturada
     anteriormente).  Neste caso, a exceção primária é armazenada no
     atributo *note __cause__: 130b. da exceção secundária.  O traceback
     impresso quando uma exceção não tratada ocorre percorre a cadeia de
     atributos ‘__cause__’ e *note __context__: 130a. e imprime um
     traceback separado para cada componente da cadeia, com a exceção
     primária no topo.  (Usuários Java podem reconhecer este
     comportamento.)

   * PEP 3134(5): Objetos exceção agora armazenam seu traceback como o
     atributo *note __traceback__: 1309.  Isso significa que um objeto
     de exceção agora contém todas as informações pertencentes a uma
     exceção, e há menos motivos para usar *note sys.exc_info(): 68a.
     (embora o último não seja removido).

   * Algumas mensagens de exceção estão melhores quando o Windows falha
     ao carregar um módulo de extensão.  Por exemplo, ‘error code 193’
     agora é ‘%1 is not a valid Win32 application’.  As strings agora
     lidam com localidades que não sejam em inglês.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0352/

   (2) https://peps.python.org/pep-3109/

   (3) https://peps.python.org/pep-3110/

   (4) https://peps.python.org/pep-3134/

   (5) https://peps.python.org/pep-3134/


File: python.info,  Node: Outras mudanças diversas,  Next: Mudanças a construções e API C<7>,  Prev: Mudanças para exceções,  Up: O que há de novo no Python 3 0

1.14.7 Outras mudanças diversas
-------------------------------

* Menu:

* Operadores e métodos especiais::
* Funções embutidas::


File: python.info,  Node: Operadores e métodos especiais,  Next: Funções embutidas,  Up: Outras mudanças diversas

1.14.7.1 Operadores e métodos especiais
.......................................

   * ‘!=’ agora retorna o oposto de ‘==’, a menos que ‘==’ retorne *note
     NotImplemented: 7d3.

   * O conceito de “métodos não vinculados” foi removido da linguagem.
     Ao referenciar um método como um atributo de classe, agora você
     obtém um objeto função simples.

   * ‘__getslice__()’, ‘__setslice__()’ and ‘__delslice__()’ were
     killed.  The syntax ‘a[i:j]’ now translates to
     ‘a.__getitem__(slice(i, j))’ (or *note __setitem__(): 130e. or
     *note __delitem__(): 130f, when used as an assignment or deletion
     target, respectively).

   * PEP 3114(1): o método padrão *note next(): 7d9. foi renomeado para
     *note __next__(): 1310.

   * The ‘__oct__()’ and ‘__hex__()’ special methods are removed – *note
     oct(): 1311. and *note hex(): 1312. use *note __index__(): 71d. now
     to convert the argument to an integer.

   * Removed support for ‘__members__’ and ‘__methods__’.

   * Os atributos de função chamados ‘func_X’ foram renomeados para usar
     o formato ‘__X__’, liberando esses nomes no espaço de nomes de
     atributos de função para atributos definidos pelo usuário.  A
     saber, ‘func_closure’, ‘func_code’, ‘func_defaults’, ‘func_dict’,
     ‘func_doc’, ‘func_globals’, ‘func_name’ foram renomeados para *note
     __closure__: 1313, *note __code__: 29a, *note __defaults__: 1314,
     *note __dict__: 1315, *note __doc__: 1219, *note __globals__: 1316,
     *note __name__: 1317, respectivamente.

   * ‘__nonzero__()’ agora é *note __bool__(): 1318.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3114/


File: python.info,  Node: Funções embutidas,  Prev: Operadores e métodos especiais,  Up: Outras mudanças diversas

1.14.7.2 Funções embutidas
..........................

   * PEP 3135(1): Nova função *note super(): 4db.  Agora você pode
     invocar *note super(): 4db. sem argumentos e (presumindo que isso
     esteja em um método de instância regular definido dentro de uma
     instrução *note class: 131a.) a classe e instância corretas serão
     automaticamente escolhidas.  Com argumentos, o comportamento de
     *note super(): 4db. não é alterado.

   * PEP 3111(2): ‘raw_input()’ was renamed to *note input(): 131b.
     That is, the new *note input(): 131b. function reads a line from
     *note sys.stdin: 53d. and returns it with the trailing newline
     stripped.  It raises *note EOFError: 131c. if the input is
     terminated prematurely.  To get the old behavior of *note input():
     131b, use ‘eval(input())’.

   * Uma nova função embutido *note next(): 7d9. foi adicionada para
     chamar o método *note __next__(): 1310. em um objeto.

   * A estratégia de arredondamento da função *note round(): 131d. e o
     tipo de retorno foram alterados.  Casos exatos de meio caminho
     agora são arredondados para o resultado par mais próximo em vez de
     para longe de zero.  (Por exemplo, ‘round(2.5)’ agora retorna ‘2’
     em vez de ‘3’.)  ‘round(x[, n])’ agora delega para
     ‘x.__round__([n])’ em vez de sempre retornar um float.  Geralmente
     retorna um inteiro quando chamado com um único argumento e um valor
     do mesmo tipo que ‘x’ quando chamado com dois argumentos.

   * Moved ‘intern()’ to *note sys.intern(): 131e.

   * Removed: ‘apply()’.  Instead of ‘apply(f, args)’ use ‘f(*args)’.

   * Removed *note callable(): 1206.  Instead of ‘callable(f)’ you can
     use ‘isinstance(f, collections.Callable)’.  The
     ‘operator.isCallable()’ function is also gone.

   * Removed ‘coerce()’.  This function no longer serves a purpose now
     that classic classes are gone.

   * Removed ‘execfile()’.  Instead of ‘execfile(fn)’ use
     ‘exec(open(fn).read())’.

   * Removed the ‘file’ type.  Use *note open(): 51c.  There are now
     several different kinds of streams that open can return in the
     *note io: 7f. module.

   * Removed ‘reduce()’.  Use *note functools.reduce(): 131f. if you
     really need it; however, 99 percent of the time an explicit *note
     for: 2f2. loop is more readable.

   * Removed ‘reload()’.  Use ‘imp.reload()’.

   * Removed.  ‘dict.has_key()’ – use the *note in: 2f4. operator
     instead.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3135/

   (2) https://peps.python.org/pep-3111/


File: python.info,  Node: Mudanças a construções e API C<7>,  Next: Desempenho,  Prev: Outras mudanças diversas,  Up: O que há de novo no Python 3 0

1.14.8 Mudanças a construções e API C
-------------------------------------

Devido a restrições de tempo, aqui está uma lista 'muito' incompleta de
alterações na API C.

   * O suporte para várias plataformas foi descartado, incluindo, mas
     não se limitando a Mac OS 9, BeOS, RISCOS, Irix e Tru64.

   * PEP 3118(1): Nova API de Buffer.

   * PEP 3121(2): Inicialização e finalização do módulo de extensão.

   * PEP 3123(3): Tornando *note PyObject_HEAD: 1321. conforme o padrão
     C.

   * Não há mais suporte à API C para execução restrita.

   * As APIs C ‘PyNumber_Coerce()’, ‘PyNumber_CoerceEx()’,
     ‘PyMember_Get()’ e ‘PyMember_Set()’ foram removidas.

   * Nova API C *note PyImport_ImportModuleNoBlock(): 3bd, funciona como
     *note PyImport_ImportModule(): 3be, mas não bloqueia na trava de
     importação (retornando um erro).

   * Renomeado o slot e o método de nível C de conversão booleana:
     ‘nb_nonzero’ agora é ‘nb_bool’.

   * Removidas ‘METH_OLDARGS’ e ‘WITH_CYCLE_GC’ da API C.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3118/

   (2) https://peps.python.org/pep-3121/

   (3) https://peps.python.org/pep-3123/


File: python.info,  Node: Desempenho,  Next: Portando para o Python 3 0,  Prev: Mudanças a construções e API C<7>,  Up: O que há de novo no Python 3 0

1.14.9 Desempenho
-----------------

O resultado líquido das generalizações do 3.0 é que o Python 3.0 executa
o benchmark pystone cerca de 10% mais lento que o Python 2.5.
Provavelmente a maior causa é a remoção do uso de maiúsculas e
minúsculas especiais para números inteiros pequenos.  Há espaço para
melhorias, mas isso acontecerá após o lançamento do 3.0!


File: python.info,  Node: Portando para o Python 3 0,  Prev: Desempenho,  Up: O que há de novo no Python 3 0

1.14.10 Portando para o Python 3.0
----------------------------------

Para portar o código-fonte existente do Python 2.5 ou 2.6 para o Python
3.0, a melhor estratégia é a seguinte:

  0. (Pré-requisito:) Comece com uma excelente cobertura de teste.

  1. Portar para o Python 2.6.  Isso não deve dar mais trabalho do que o
     port médio do Python 2.x para o Python 2.(x+1).  Certifique-se de
     que todos os seus testes passem.

  2. (Ainda usando 2.6:) Ative a opção de linha de comando ‘-3’.  Isso
     habilita avisos sobre recursos que serão removidos (ou alterados)
     no 3.0.  Execute seu conjunto de testes novamente e corrija o
     código sobre o qual você recebe avisos até que não haja mais avisos
     e todos os seus testes ainda passem.

  3. Execute o tradutor de fonte para fonte ‘2to3’ em sua árvore de
     código-fonte.  Execute o resultado da tradução no Python 3.0.
     Corrija manualmente quaisquer problemas restantes, corrigindo
     problemas até que todos os testes passem novamente.

Não é recomendado tentar escrever código-fonte que seja executado
inalterado no Python 2.6 e 3.0; você teria que usar um estilo de
codificação muito distorcido, por exemplo, evitando instruções ‘print’,
metaclasses e muito mais.  Se você estiver mantendo uma biblioteca que
precisa ter suporte ao Python 2.6 e Python 3.0, a melhor abordagem é
modificar a etapa 3 acima editando a versão 2.6 do código-fonte e
executando o tradutor ‘2to3’ novamente, em vez de editar a versão 3.0 do
código-fonte.

Para portar extensões C para Python 3.0, consulte *note Portando módulos
de extensão para o Python 3: 1324.


File: python.info,  Node: O que há de novo no Python 2 7,  Next: O que há de novo no Python 2 6,  Prev: O que há de novo no Python 3 0,  Up: O que há de novo no Python

1.15 O que há de novo no Python 2.7
===================================


Autor: A.M. Kuchling (amk at amk.ca)

Este artigo explica os novos recursos do Python 2.7.  O Python 2.7 foi
lançado em 3 de julho de 2010.

A manipulação numérica foi aprimorada de várias maneiras, tanto para
números de ponto flutuante quanto para a classe *note Decimal: 29d.
Existem algumas adições úteis à biblioteca padrão, como um módulo *note
unittest: 106. bastante aprimorado, o módulo *note argparse: 6. para
analisar as opções da linha de comando, classes convenientes *note
OrderedDict: 5db. e *note Counter: 10d0. no módulo *note collections:
1d. e muitas outras melhorias.

O Python 2.7 está planejado para ser o último dos lançamentos 2.x, por
isso trabalhamos para torná-lo um bom lançamento a longo prazo.  Para
ajudar na migração para o Python 3, vários novos recursos da série
Python 3.x foram incluídos no 2.7.

Este artigo não tenta fornecer uma especificação completa dos novos
recursos, mas fornece uma visão geral conveniente.  Para detalhes
completos, você deve consultar a documentação do Python 2.7 em
‘https://docs.python.org’.  Se você deseja entender a lógica do design e
implementação, consulte a PEP para obter um novo recurso específico ou o
problema em ‘https://bugs.python.org’ no qual uma alteração foi
discutida.  Sempre que possível, o “O que há de novo no Python” é
vinculado ao item de bug/patch de cada alteração.

* Menu:

* O futuro para o Python 2.x: O futuro para o Python 2 x.
* Mudanças no tratamento de avisos de descontinuação::
* Recursos do Python 3.1: Recursos do Python 3 1.
* PEP 372; Adicionando um dicionário ordenado a coleções: PEP 372 Adicionando um dicionário ordenado a coleções.
* PEP 378; Especificador de formato para separador de milhares: PEP 378 Especificador de formato para separador de milhares<2>.
* PEP 389; O módulo argparse para analisar linhas de comando: PEP 389 O módulo argparse para analisar linhas de comando.
* PEP 391; Configuração baseada em dicionário para logging: PEP 391 Configuração baseada em dicionário para logging.
* PEP 3106; Views de dicionário: PEP 3106 Views de dicionário.
* PEP 3137; O objeto memoryview: PEP 3137 O objeto memoryview.
* Outras mudanças na linguagem: Outras mudanças na linguagem<14>.
* Módulos Novos ou Aprimorados::
* Mudanças a construções e API C: Mudanças a construções e API C<8>.
* Outras alterações e correções::
* Portando para Python 2.7: Portando para Python 2 7.
* Novos recursos adicionados às versões de manutenção do Python 2.7: Novos recursos adicionados às versões de manutenção do Python 2 7.
* Reconhecimentos::


File: python.info,  Node: O futuro para o Python 2 x,  Next: Mudanças no tratamento de avisos de descontinuação,  Up: O que há de novo no Python 2 7

1.15.1 O futuro para o Python 2.x
---------------------------------

Python 2.7 é o último grande lançamento da série 2.x, já que os
mantenedores do Python mudaram o foco de seus esforços de
desenvolvimento de novos recursos para a série Python 3.x.  Isso
significa que, embora o Python 2 continue recebendo correções de bugs e
seja atualizado para construir corretamente em novo hardware e versões
de sistemas operados com suporte, não haverá novos lançamentos de
recursos completos para a linguagem ou biblioteca padrão.

No entanto, embora haja um grande subconjunto comum entre Python 2.7 e
Python 3, e muitas das mudanças envolvidas na migração para esse
subconjunto comum, ou diretamente para Python 3, podem ser automatizadas
com segurança, algumas outras mudanças (principalmente aquelas
associadas ao tratamento Unicode) pode exigir uma consideração cuidadosa
e, de preferência, conjuntos de testes de regressão automatizados
robustos, para migrar com eficácia.

Isso significa que o Python 2.7 permanecerá em vigor por um longo tempo,
fornecendo uma plataforma base estável e com suporte para sistemas de
produção que ainda não foram portados para Python 3.  O ciclo de vida
completo esperado da série Python 2.7 é detalhado na PEP 373(1).

Algumas consequências principais da significância de longo prazo de 2.7
são:

   * Conforme observado acima, a versão 2.7 tem um período de manutenção
     muito mais longo em comparação com as versões 2.x anteriores.
     Atualmente, espera-se que o Python 2.7 continue com o suporte da
     equipe de desenvolvimento central (recebendo atualizações de
     segurança e outras correções de bugs) até pelo menos 2020 (10 anos
     após seu lançamento inicial, em comparação com o período de suporte
     mais típico de 18-24 meses).

   * Conforme a biblioteca padrão do Python 2.7 envelhece, fazer uso
     efetivo do Python Package Index (diretamente ou por meio de um
     redistribuidor) torna-se mais importante para os usuários do Python
     2.  Além de uma grande variedade de pacotes de terceiros para
     várias tarefas, os pacotes disponíveis incluem backports de novos
     módulos e recursos da biblioteca padrão do Python 3 que são
     compatíveis com o Python 2, bem como várias ferramentas e
     bibliotecas que podem tornar mais fácil migre para Python 3.  O
     Guia de Usuário para Empacotamento de Python(2) fornece orientação
     sobre como baixar e instalar software do Python Package Index.

   * Embora a abordagem preferida para aprimorar o Python 2 agora seja a
     publicação de novos pacotes no Python Package Index, essa abordagem
     não funciona necessariamente em todos os casos, especialmente
     aqueles relacionados à segurança de rede.  Em casos excepcionais
     que não podem ser tratados adequadamente com a publicação de
     pacotes novos ou atualizados no PyPI, o processo de Proposta de
     Melhoria do Python, ou PEP, pode ser usado para justificar a adição
     de novos recursos diretamente à biblioteca padrão do Python 2.
     Quaisquer adições, e as versões de manutenção onde foram
     adicionadas, serão observadas na seção *note Novos recursos
     adicionados às versões de manutenção do Python 2.7: 132a. abaixo.

Para projetos que desejam migrar de Python 2 para Python 3, ou para
desenvolvedores de bibliotecas e frameworks que desejam oferecer suporte
a usuários em Python 2 e Python 3, há uma variedade de ferramentas e
guias disponíveis para ajudar a decidir sobre uma abordagem adequada e
gerenciar alguns dos os detalhes técnicos envolvidos.  O ponto de
partida recomendado é o guia pyporting-howto.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0373/

   (2) https://packaging.python.org


File: python.info,  Node: Mudanças no tratamento de avisos de descontinuação,  Next: Recursos do Python 3 1,  Prev: O futuro para o Python 2 x,  Up: O que há de novo no Python 2 7

1.15.2 Mudanças no tratamento de avisos de descontinuação
---------------------------------------------------------

Para Python 2.7, uma decisão política foi feita para silenciar avisos
apenas de interesse para desenvolvedores por padrão.  *note
DeprecationWarning: 1a5. e seus descendentes agora são ignorados a menos
que solicitado de outra forma, evitando que os usuários vejam avisos
acionados por uma aplicação.  Essa mudança também foi feita no branch
que se tornou o Python 3.2.  (Discutido em stdlib-sig e realizado em
bpo-7319(1).)

Em versões anteriores, as mensagens *note DeprecationWarning: 1a5. eram
habilitadas por padrão, fornecendo aos desenvolvedores de Python uma
indicação clara de onde seu código pode quebrar em uma versão principal
futura do Python.

No entanto, há cada vez mais usuários de aplicações baseadas em Python
que não estão diretamente envolvidos no desenvolvimento dessas
aplicações.  Mensagens de *note DeprecationWarning: 1a5. são
irrelevantes para tais usuários, fazendo-os se preocupar com uma
aplicação que está realmente funcionando corretamente e sobrecarregando
os desenvolvedores de aplicações com a resposta a essas preocupações.

Você pode reativar a exibição de mensagens *note DeprecationWarning:
1a5. executando Python com a opção *note -Wdefault: 8cd. (forma curta:
*note -Wd: 8cd.) ou definindo a variável de ambiente *note
PYTHONWARNINGS: bc2. para ‘"default"’ (ou ‘"d"’) antes de executar o
Python.  O código Python também pode reativá-los chamando
‘warnings.simplefilter('default')’.

O módulo ‘unittest’ também reativa automaticamente os avisos de
depreciação ao executar testes.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=7319


File: python.info,  Node: Recursos do Python 3 1,  Next: PEP 372 Adicionando um dicionário ordenado a coleções,  Prev: Mudanças no tratamento de avisos de descontinuação,  Up: O que há de novo no Python 2 7

1.15.3 Recursos do Python 3.1
-----------------------------

Assim como o Python 2.6 incorporou recursos do Python 3.0, a versão 2.7
incorpora alguns dos novos recursos do Python 3.1.  A série 2.x continua
a fornecer ferramentas para migração para a série 3.x.

Uma lista parcial de recursos do 3.1 que foram transferidos para o 2.7:

   * A sintaxe para conjuntos de literais (‘{1,2,3}’ é um conjunto
     mutável).

   * Compreensões de dicionário e conjunto (‘{i: i*2 for i in
     range(3)}’).

   * Vários gerenciadores de contexto em uma única instrução *note with:
     5d2.

   * Uma nova versão da biblioteca *note io: 7f, reescrita em C para
     melhor desempenho.

   * O tipo de dicionário ordenado descrito na *note PEP 372;
     Adicionando um dicionário ordenado a coleções: 132d.

   * O novo especificador de formato ‘","’ descrito na *note PEP 378;
     Especificador de formato para separador de milhares: 132e.

   * O objeto *note memoryview: 2eb.

   * Um pequeno subconjunto do módulo *note importlib: 77, *note
     descrito sob: 132f.

   * O *note repr(): 800. de um ponto flutuante ‘x’ é mais curto em
     muitos casos: agora é baseado na string decimal mais curta que é
     garantida para arredondar de volta para ‘x’.  Como nas versões
     anteriores do Python, é garantido que ‘float(repr(x))’ recupera
     ‘x’.

   * As conversões de ponto flutuante para string e string para ponto
     flutuante são arredondadas corretamente.  A função *note round():
     131d. também está agora corretamente arredondada.

   * O tipo *note PyCapsule: 12b4, usado para fornecer uma API C para
     módulos de extensão.

   * A função de API C *note PyLong_AsLongAndOverflow(): 12a8.

Outros novos avisos do modo Python3 incluem:

   * ‘operator.isCallable()’ e ‘operator.sequenceIncludes()’, que não
     são suportados no 3.x, agora disparam avisos.

   * A opção ‘-3’ agora habilita automaticamente a opção ‘-Qwarn’ que
     causa avisos sobre o uso de divisão clássica com inteiros e
     inteiros longos.


File: python.info,  Node: PEP 372 Adicionando um dicionário ordenado a coleções,  Next: PEP 378 Especificador de formato para separador de milhares<2>,  Prev: Recursos do Python 3 1,  Up: O que há de novo no Python 2 7

1.15.4 PEP 372: Adicionando um dicionário ordenado a coleções
-------------------------------------------------------------

Dicionários regulares no Python iteram sobre pares de chave/valor em
ordem arbitrária.  Ao longo dos anos, vários autores escreveram
implementações alternativas que lembram a ordem em que as chaves foram
inseridas originalmente.  Com base nas experiências dessas
implementações, 2.7 introduz uma nova classe *note OrderedDict: 5db. no
módulo *note collections: 1d.

A API *note OrderedDict: 5db. fornece a mesma interface que os
dicionários regulares, mas itera sobre chaves e valores em uma ordem
garantida dependendo de quando uma chave foi inserida pela primeira vez:

     >>> from collections import OrderedDict
     >>> d = OrderedDict([('first', 1),
     ...                  ('second', 2),
     ...                  ('third', 3)])
     >>> d.items()
     [('first', 1), ('second', 2), ('third', 3)]

Se uma nova entrada substituir uma entrada existente, a posição de
inserção original permanece inalterada:

     >>> d['second'] = 4
     >>> d.items()
     [('first', 1), ('second', 4), ('third', 3)]

Excluir uma entrada e reinseri-la irá movê-la para o final:

     >>> del d['second']
     >>> d['second'] = 5
     >>> d.items()
     [('first', 1), ('third', 3), ('second', 5)]

O método *note popitem(): 1331. tem um argumento opcional 'last' cujo
valor padrão é ‘True’.  Se 'last' for true, a chave adicionada mais
recentemente é retornada e removida; se for falso, a chave mais antiga é
selecionada:

     >>> od = OrderedDict([(x,0) for x in range(20)])
     >>> od.popitem()
     (19, 0)
     >>> od.popitem()
     (18, 0)
     >>> od.popitem(last=False)
     (0, 0)
     >>> od.popitem(last=False)
     (1, 0)

A comparação de dois dicionários ordenados verifica as chaves e os
valores e exige que o pedido de inserção seja o mesmo:

     >>> od1 = OrderedDict([('first', 1),
     ...                    ('second', 2),
     ...                    ('third', 3)])
     >>> od2 = OrderedDict([('third', 3),
     ...                    ('first', 1),
     ...                    ('second', 2)])
     >>> od1 == od2
     False
     >>> # Move a chave 'third' para o fim
     >>> del od2['third']; od2['third'] = 3
     >>> od1 == od2
     True

Comparar um *note OrderedDict: 5db. com um dicionário regular ignora a
ordem de inserção e apenas compara as chaves e valores.

Como funciona a *note OrderedDict: 5db.?  Ela mantém uma lista
duplamente vinculada de chaves, acrescentando novas chaves à lista à
medida que são inseridas.  Um dicionário secundário mapeia as chaves
para seu nó de lista correspondente, portanto, a exclusão não precisa
percorrer toda a lista vinculada e, portanto, permanece 'O'(1).

A biblioteca padrão agora oferece suporte ao uso de dicionários
ordenados em vários módulos.

   * O módulo *note ConfigParser: 22. os usa por padrão, o que significa
     que os arquivos de configuração agora podem ser lidos, modificados
     e então escritos de volta em sua ordem original.

   * O método *note _asdict(): 9e9. para *note collections.namedtuple():
     1ca. agora retorna um dicionário ordenado com os valores aparecendo
     na mesma ordem que os índices de tupla subjacentes.

   * O construtor de classe *note JSONDecoder: d6a. do módulo *note
     json: 82. foi estendido com um parâmetro 'object_pairs_hook' para
     permitir que instâncias ‘OrderedDict’ sejam construídas pelo
     decodificador.  O suporte também foi adicionado para ferramentas de
     terceiros como PyYAML(1).

Ver também
..........

PEP 372(2) - Adicionando um dicionário ordenado às coleções

     PEP escrita por Armin Ronacher e Raymond Hettinger; implementada
     por Raymond Hettinger.

   ---------- Footnotes ----------

   (1) https://pyyaml.org/

   (2) https://peps.python.org/pep-0372/


File: python.info,  Node: PEP 378 Especificador de formato para separador de milhares<2>,  Next: PEP 389 O módulo argparse para analisar linhas de comando,  Prev: PEP 372 Adicionando um dicionário ordenado a coleções,  Up: O que há de novo no Python 2 7

1.15.5 PEP 378: Especificador de formato para separador de milhares
-------------------------------------------------------------------

Para tornar a saída do programa mais legível, pode ser útil adicionar
separadores a números grandes, renderizando-os como
18,446,744.073,709,551,616 em vez de 18446744073709551616.

A solução totalmente geral para fazer isso é o módulo *note locale: 86,
que pode usar diferentes separadores (“,” na América do Norte, “.” na
Europa) e diferentes tamanhos de agrupamento, mas *note locale: 86. é
complicado para usar e inadequado para aplicativos multithread onde
diferentes threads estão produzindo saída para diferentes localidades.

Portanto, um mecanismo simples de agrupamento de vírgulas foi adicionado
à minilinguagem usada pelo método *note str.format(): 621.  Ao formatar
um número de ponto flutuante, basta incluir uma vírgula entre a largura
e a precisão:

     >>> '{:20,.2f}'.format(18446744073709551616.0)
     '18,446,744,073,709,551,616.00'

Ao formatar um número inteiro, inclua a vírgula após a largura:

     >>> '{:20,d}'.format(18446744073709551616)
     '18,446,744,073,709,551,616'

Este mecanismo não é adaptável de forma alguma; vírgulas são sempre
usadas como separadores e o agrupamento é sempre em grupos de três
dígitos.  O mecanismo de formatação de vírgula não é tão geral quanto o
módulo *note locale: 86, mas é mais fácil de usar.

Ver também
..........

PEP 378(1) - Especificador de formato para separador de milhares

     PEP escrita por Raymond Hettinger; implementada por Eric Smith.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0378/


File: python.info,  Node: PEP 389 O módulo argparse para analisar linhas de comando,  Next: PEP 391 Configuração baseada em dicionário para logging,  Prev: PEP 378 Especificador de formato para separador de milhares<2>,  Up: O que há de novo no Python 2 7

1.15.6 PEP 389: O módulo argparse para analisar linhas de comando
-----------------------------------------------------------------

O módulo *note argparse: 6. para analisar argumentos de linha de comando
foi adicionado como um substituto mais poderoso para o módulo *note
optparse: a0.

Isso significa que Python agora oferece suporte a três módulos
diferentes para analisar argumentos de linha de comando: *note getopt:
61, *note optparse: a0. e *note argparse: 6.  O módulo *note getopt: 61.
se assemelha muito à função ‘getopt()’ da biblioteca C, portanto
continua útil se você estiver escrevendo um protótipo Python que
eventualmente será reescrito em C. *note optparse: a0. torna-se
redundante, mas não há planos para removê-lo porque muitos scripts ainda
o utilizam e não há uma maneira automatizada de atualizar esses scripts.
(Tornar a API *note argparse: 6. consistente com a interface de *note
optparse: a0. foi discutido, mas rejeitado por ser muito confuso e
difícil.)

Resumindo, se você está escrevendo um novo script e não precisa se
preocupar com a compatibilidade com versões anteriores do Python, use
*note argparse: 6. ao invés de *note optparse: a0.

Aqui está um exemplo:

     import argparse

     parser = argparse.ArgumentParser(description='Command-line example.')

     # Adiciona alterações opcionais
     parser.add_argument('-v', action='store_true', dest='is_verbose',
                         help='produce verbose output')
     parser.add_argument('-o', action='store', dest='output',
                         metavar='FILE',
                         help='direct output to FILE instead of stdout')
     parser.add_argument('-C', action='store', type=int, dest='context',
                         metavar='NUM', default=0,
                         help='display NUM lines of added context')

     # Permite qualquer número de argumentos adicionais.
     parser.add_argument(nargs='*', action='store', dest='inputs',
                         help='input filenames (default is stdin)')

     args = parser.parse_args()
     print args.__dict__

A menos que você o substitua, as opções ‘-h’ e ‘--help’ são adicionadas
automaticamente e produzem uma saída formatada de maneira organizada:

     -> ./python.exe argparse-example.py --help
     usage: argparse-example.py [-h] [-v] [-o FILE] [-C NUM] [inputs [inputs ...]]

     Command-line example.

     positional arguments:
       inputs      input filenames (default is stdin)

     optional arguments:
       -h, --help  show this help message and exit
       -v          produce verbose output
       -o FILE     direct output to FILE instead of stdout
       -C NUM      display NUM lines of added context

Como em *note optparse: a0, as opções e argumentos da linha de comando
são retornados como um objeto com atributos nomeados pelos parâmetros
'dest':

     -> ./python.exe argparse-example.py -v
     {'output': None,
      'is_verbose': True,
      'context': 0,
      'inputs': []}

     -> ./python.exe argparse-example.py -v -o /tmp/output -C 4 file1 file2
     {'output': '/tmp/output',
      'is_verbose': True,
      'context': 4,
      'inputs': ['file1', 'file2']}

*note argparse: 6. tem uma validação muito mais sofisticada que *note
optparse: a0.; você pode especificar um número exato de argumentos como
um inteiro, 0 ou mais argumentos passando ‘'*'’, 1 ou mais passando
‘'+'’, ou um argumento opcional com ‘'?'’.  Um analisador de nível
superior pode conter sub-analisadores para definir subcomandos que
possuem diferentes conjuntos de opções, como em ‘svn commit’, ‘svn
checkout’, etc.  Você pode especificar o tipo de um argumento como *note
FileType: f4d, que abrirá arquivos automaticamente para você e entende
que ‘'-'’ significa entrada ou saída padrão.

Ver também
..........

Documentação do *note argparse: 6.

     A página de documentação do módulo argparse.

*note Migrando código optparse para argparse: 11ed.

     Parte da documentação do Python, descrevendo como converter o
     código que usa *note optparse: a0.

PEP 389(1) - argparse - Novo módulo de análise sintática de linha de comando

     PEP escrita e implementada por Steven Bethard.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0389/


File: python.info,  Node: PEP 391 Configuração baseada em dicionário para logging,  Next: PEP 3106 Views de dicionário,  Prev: PEP 389 O módulo argparse para analisar linhas de comando,  Up: O que há de novo no Python 2 7

1.15.7 PEP 391: Configuração baseada em dicionário para logging
---------------------------------------------------------------

O módulo *note logging: 87. é muito flexível; os aplicativos podem
definir uma árvore de subsistemas de log e cada logger nessa árvore pode
filtrar determinadas mensagens, formatá-las de maneira diferente e
direcionar mensagens para um número variável de manipuladores.

Toda essa flexibilidade pode exigir muita configuração.  Você pode
escrever instruções Python para criar objetos e definir suas
propriedades, mas uma configuração complexa requer um código detalhado,
mas enfadonho.  *note logging: 87. também suporta uma função *note
fileConfig(): b66. que analisa um arquivo, mas o formato do arquivo não
oferece suporte à configuração de filtros, e é mais confuso gerar
programaticamente.

O Python 2.7 adiciona uma função *note dictConfig(): 11ef. que usa um
dicionário para configurar o log.  Existem muitas maneiras de produzir
um dicionário a partir de diferentes fontes: construir um com código;
analisar um arquivo contendo JSON; ou use uma biblioteca de análise de
YAML se houver uma instalada.  Para mais informações veja *note Funções
de configuração: 1335.

O exemplo a seguir configura dois loggers, o logger raiz e um logger
denominado “network”.  As mensagens enviadas para o registrador raiz
serão enviadas para o log do sistema usando o protocolo syslog, e as
mensagens para o logger “network” serão gravadas em um arquivo
‘network.log’ que será rotacionado assim que o log atingir 1 MB.

     import logging
     import logging.config

     configdict = {
      'version': 1,    # Configuration schema in use; must be 1 for now
      'formatters': {
          'standard': {
              'format': ('%(asctime)s %(name)-15s '
                         '%(levelname)-8s %(message)s')}},

      'handlers': {'netlog': {'backupCount': 10,
                          'class': 'logging.handlers.RotatingFileHandler',
                          'filename': '/logs/network.log',
                          'formatter': 'standard',
                          'level': 'INFO',
                          'maxBytes': 1000000},
                   'syslog': {'class': 'logging.handlers.SysLogHandler',
                              'formatter': 'standard',
                              'level': 'ERROR'}},

      # Especifica todos os loggers subordinados
      'loggers': {
                  'network': {
                              'handlers': ['netlog']
                  }
      },
      # Especifica propriedades do logger raiz
      'root': {
               'handlers': ['syslog']
      },
     }

     # Prepara as configurações
     logging.config.dictConfig(configdict)

     # Como um exemplo, registra duas mensagens de erro
     logger = logging.getLogger('/')
     logger.error('Database not found')

     netlogger = logging.getLogger('network')
     netlogger.error('Connection failed')

Três melhorias menores no módulo *note logging: 87, todas implementadas
por Vinay Sajip, são:

   * A classe *note SysLogHandler: 65c. agora tem suporte a syslogging
     sobre TCP. O construtor tem um parâmetro 'socktype' que fornece o
     tipo de soquete a ser usado, *note socket.SOCK_DGRAM: 1336. para
     UDP ou *note socket.SOCK_STREAM: 1337. para TCP. O protocolo padrão
     permanece UDP.

   * As instâncias *note Logger: b64. ganharam um método *note
     getChild(): 1338. que recupera um logger descendente usando um
     caminho relativo.  Por exemplo, depois de recuperar um logger
     fazendo ‘log = getLogger('app')’, chamar
     ‘log.getChild('network.listen')’ é equivalente a
     ‘getLogger('app.network.listen')’.

   * A classe *note LoggerAdapter: 1339. ganhou um método *note
     isEnabledFor(): 133a. que pega um 'level' e retorna se o logger
     subjacente processaria uma mensagem desse nível de importância.

Ver também
..........

PEP 391(1) - Configuração baseada em dicionário para logging

     PEP escrita e implementada por Vinay Sajip.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0391/


File: python.info,  Node: PEP 3106 Views de dicionário,  Next: PEP 3137 O objeto memoryview,  Prev: PEP 391 Configuração baseada em dicionário para logging,  Up: O que há de novo no Python 2 7

1.15.8 PEP 3106: Views de dicionário
------------------------------------

Os métodos de dicionário *note keys(): 7ce, *note values(): 7cf. e *note
items(): 7d0. são diferentes no Python 3.x.  Eles retornam um objeto
chamado 'view' em vez de uma lista totalmente materializada.

Não é possível alterar os valores de retorno de *note keys(): 7ce, *note
values(): 7cf. e *note items(): 7d0. no Python 2.7 porque muito código
seria interrompido.  Em vez disso, as versões 3.x foram adicionadas com
os novos nomes ‘viewkeys()’, ‘viewvalues()’ e ‘viewitems()’.

     >>> d = dict((i*10, chr(65+i)) for i in range(26))
     >>> d
     {0: 'A', 130: 'N', 10: 'B', 140: 'O', 20: ..., 250: 'Z'}
     >>> d.viewkeys()
     dict_keys([0, 130, 10, 140, 20, 150, 30, ..., 250])

As views podem ser iteradas, mas as exibições de chave e item também se
comportam como conjuntos.  O operador ‘&’ realiza a interseção, e o ‘|’
realiza uma união:

     >>> d1 = dict((i*10, chr(65+i)) for i in range(26))
     >>> d2 = dict((i**.5, i) for i in range(1000))
     >>> d1.viewkeys() & d2.viewkeys()
     set([0.0, 10.0, 20.0, 30.0])
     >>> d1.viewkeys() | range(0, 30)
     set([0, 1, 130, 3, 4, 5, 6, ..., 120, 250])

A view acompanha o dicionário e seu conteúdo muda à medida que o
dicionário é modificado:

     >>> vk = d.viewkeys()
     >>> vk
     dict_keys([0, 130, 10, ..., 250])
     >>> d[260] = '&'
     >>> vk
     dict_keys([0, 130, 260, 10, ..., 250])

No entanto, observe que você não pode adicionar ou remover chaves
enquanto estiver iterando na view:

     >>> for k in vk:
     ...     d[k*2] = k
     ...
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     RuntimeError: dictionary changed size during iteration

Você pode usar os métodos de exibição no código Python 2.x, e o
conversor 2to3 irá alterá-los para os métodos padrão *note keys(): 7ce,
*note values(): 7cf. e *note items(): 7d0.

Ver também
..........

PEP 3106(1) - Repaginação de dict.keys(), .values() e .items()

     PEP escrita por Guido van Rossum.  Backported para 2.7 por
     Alexandre Vassalotti; bpo-1967(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3106/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=1967


File: python.info,  Node: PEP 3137 O objeto memoryview,  Next: Outras mudanças na linguagem<14>,  Prev: PEP 3106 Views de dicionário,  Up: O que há de novo no Python 2 7

1.15.9 PEP 3137: O objeto memoryview
------------------------------------

O objeto *note memoryview: 2eb. fornece uma visão do conteúdo da memória
de outro objeto que corresponde à interface do tipo *note bytes: 1c2.

     >>> import string
     >>> m = memoryview(string.letters)
     >>> m
     <memory at 0x37f850>
     >>> len(m)           # Retorna o comprimento de objeto subjacente
     52
     >>> m[0], m[25], m[26]   # Indexação retorna um byte
     ('a', 'z', 'A')
     >>> m2 = m[0:26]         # Fatiamento retorna outra memoryview
     >>> m2
     <memory at 0x37f080>

O conteúdo da viewq pode ser convertido em uma string de bytes ou uma
lista de inteiros:

     >>> m2.tobytes()
     'abcdefghijklmnopqrstuvwxyz'
     >>> m2.tolist()
     [97, 98, 99, 100, 101, 102, 103, ... 121, 122]
     >>>

Objetos *note memoryview: 2eb. permitem modificar o objeto subjacente se
for um objeto mutável.

     >>> m2[0] = 75
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: cannot modify read-only memory
     >>> b = bytearray(string.letters)  # Criando um objeto mutável
     >>> b
     bytearray(b'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')
     >>> mb = memoryview(b)
     >>> mb[0] = '*'         # Atribui para visão, alterando o bytearray.
     >>> b[0:5]              # O bytearray foi alterado.
     bytearray(b'*bcde')
     >>>

Ver também
..........

PEP 3137(1) - Bytes imutáveis e buffer mutável

     PEP escrita por Guido van Rossum.  Implementada por Travis
     Oliphant, Antoine Pitrou e outros.  Portado para 2.7 por Antoine
     Pitrou; bpo-2396(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3137/

   (2) https://bugs.python.org/issue?@action=redirect&bpo=2396


File: python.info,  Node: Outras mudanças na linguagem<14>,  Next: Módulos Novos ou Aprimorados,  Prev: PEP 3137 O objeto memoryview,  Up: O que há de novo no Python 2 7

1.15.10 Outras mudanças na linguagem
------------------------------------

Algumas das mudanças menores feitas no núcleo da linguagem Python são:

   * A sintaxe para set literais foi portada do Python 3.x.  Os
     colchetes são usados para cercar o conteúdo do conjunto mutável
     resultante; os literais definidos são diferenciados dos dicionários
     por não conterem caracteres de dois pontos e valores.  ‘{}’
     continua a representar um dicionário vazio; use ‘set()’ para um
     conjunto vazio.

          >>> {1, 2, 3, 4, 5}
          set([1, 2, 3, 4, 5])
          >>> set() # conjunto vazio
          set([])
          >>> {}    # dicionário vazio
          {}

     Portado por Alexandre Vassalotti; bpo-2335(1).

   * As compreensões de dicionário e conjunto são outro recurso
     importado do 3.x, generalizando as compreensões de lista/gerador
     para usar a sintaxe literal para conjuntos e dicionários.

          >>> {x: x*x for x in range(6)}
          {0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
          >>> {('a'*x) for x in range(6)}
          set(['', 'a', 'aa', 'aaa', 'aaaa', 'aaaaa'])

     Portado por Alexandre Vassalotti; bpo-2333(2).

   * A instrução *note with: 5d2. agora pode usar vários gerenciadores
     de contexto em uma instrução.  Os gerenciadores de contexto são
     processados da esquerda para a direita e cada um é tratado como o
     início de uma nova instrução ‘with’.  Isso significa que:

          with A() as a, B() as b:
              ... conjunto de instruções ...

     é equivalente a:

          with A() as a:
              with B() as b:
                  ... conjunto de instruções ...

     A função ‘contextlib.nested()’ fornece uma função muito similar,
     então não é mais necessária e foi descontinuada.

     (Proposta em ‘https://codereview.appspot.com/53094’; implementada
     por Georg Brandl.)

   * As conversões entre números de ponto flutuante, ou float.  e
     strings agora são arredondadas corretamente na maioria das
     plataformas.  Estas conversões ocorrem em muitos lugares
     diferentes: *note str(): 44c. em floats e números complexos; os
     construtores *note float: 2f7. e *note complex: 2f8.; formatação
     numérica; serializar e desserializar floats e números complexos
     usando os módulos *note marshal: 8d, *note pickle: a6. e *note
     json: 82.; análise de float e literais imaginários no código
     Python; e a conversão *note Decimal: 29d.-para-float.

     Relacionado a isso, o *note repr(): 800. de um número de ponto
     flutuante 'x' agora retorna um resultado baseado na string decimal
     mais curta que é garantida para arredondar de volta para 'x' sob o
     arredondamento correto (com o modo de arredondamento
     round-half-to-even).  Anteriormente, fornecia uma string baseada no
     arredondamento x para 17 dígitos decimais.

     A biblioteca de arredondamento responsável por essa melhoria
     funciona no Windows e em plataformas Unix usando os compiladores
     gcc, icc ou suncc.  Pode haver um pequeno número de plataformas
     onde a operação correta deste código não pode ser garantida, então
     o código não é usado em tais sistemas.  Você pode descobrir qual
     código está sendo usado verificando *note sys.float_repr_style:
     133e, que será ‘short’ se o novo código estiver em uso e ‘legacy’
     se não estiver.

     Implementada por Eric Smith and Mark Dickinson, usando a biblioteca
     ‘dtoa.c’ de David Gay; bpo-7117(3).

   * As conversões de inteiros longos e inteiros regulares para ponto
     flutuante agora arredondam de maneira diferente, retornando o
     número de ponto flutuante mais próximo ao número.  Isso não importa
     para pequenos inteiros que podem ser convertidos exatamente, mas
     para grandes números que inevitavelmente perderão a precisão, o
     Python 2.7 agora se aproxima mais.  Por exemplo, o Python 2.6
     computou o seguinte:

          >>> n = 295147905179352891391
          >>> float(n)
          2.9514790517935283e+20
          >>> n - long(float(n))
          65535L

     O resultado de ponto flutuante do Python 2.7 é maior, mas muito
     mais próximo do valor verdadeiro:

          >>> n = 295147905179352891391
          >>> float(n)
          2.9514790517935289e+20
          >>> n - long(float(n))
          -1L

     (Implementada por Mark Dickinson; bpo-3166(4).)

     A divisão inteira também é mais precisa em seus comportamentos de
     arredondamento.  (Também implementada por Mark Dickinson;
     bpo-1811(5).)

   * A coerção implícita para números complexos foi removida; o
     interpretador nunca mais tentará chamar um método ‘__coerce__()’ em
     objetos complexos.  (Removido por Meador Inge e Mark Dickinson;
     bpo-5211(6).)

   * O método *note str.format(): 621. agora tem suporte à numeração
     automática dos campos de substituição.  Isso torna o uso de *note
     str.format(): 621. mais parecido com o uso da formatação ‘%s’:

          >>> '{}:{}:{}'.format(2009, 04, 'Sunday')
          '2009:4:Sunday'
          >>> '{}:{}:{day}'.format(2009, 4, day='Sunday')
          '2009:4:Sunday'

     A numeração automática leva os campos da esquerda para a direita,
     então o primeiro especificador ‘{...}’ usará o primeiro argumento
     para *note str.format(): 621, o próximo especificador usará o
     próximo argumento e breve.  Você não pode misturar a numeração
     automática e a numeração explícita – numerar todos os seus campos
     especificadores ou nenhum deles – mas você pode misturar a
     numeração automática e os campos nomeados, como no segundo exemplo
     acima.  (Contribuição de Eric Smith; bpo-5237(7).)

     Números complexos agora suportam corretamente o uso com *note
     format(): 61f, e o padrão é alinhamento à direita.  A especificação
     de uma precisão ou separação por vírgula aplica-se às partes reais
     e imaginárias do número, mas uma largura de campo e alinhamento
     especificados são aplicados a toda a saída ‘1.5+3j’ resultante.
     (Contribuição de Eric Smith; bpo-1588(8) e bpo-7988(9).)

     O código de formato ‘F’ agora sempre formata sua saída usando
     caracteres maiúsculos, então agora produzirá ‘INF’ e ‘NAN’.
     (Contribuição de Eric Smith; bpo-3382(10).)

     Uma alteração de baixo nível: o método *note object.__format__():
     61e. agora aciona um *note PendingDeprecationWarning: 8ce. se for
     passado uma string de formato, porque o método ‘__format__()’ para
     *note object: a96. converte o objeto para uma representação de
     string e formata isso.  Anteriormente, o método aplicava
     silenciosamente a string de formato à representação da string, mas
     isso poderia ocultar erros no código Python.  Se você estiver
     fornecendo informações de formatação, como alinhamento ou precisão,
     presumivelmente espera que a formatação seja aplicada de alguma
     maneira específica do objeto.  (Correção de Eric Smith;
     bpo-7994(11).)

   * Os tipos *note int(): 257. e ‘long()’ ganharam um método
     ‘bit_length’ que retorna o número de bits necessários para
     representar seu argumento em binário:

          >>> n = 37
          >>> bin(n)
          '0b100101'
          >>> n.bit_length()
          6
          >>> n = 2**123-1
          >>> n.bit_length()
          123
          >>> (n+1).bit_length()
          124

     (Contribuição de Fredrik Johansson e Victor Stinner; bpo-3439(12).)

   * A instrução *note import: 5e2. não tentará mais uma importação
     absoluta se uma importação relativa (por exemplo, ‘from .os import
     sep’) falhar.  Isso corrige um bug, mas pode possivelmente quebrar
     certas instruções ‘import’ que estavam funcionando apenas por
     acidente.  (Correção de Meador Inge; bpo-7902(13).)

   * Agora é possível para uma subclasse do tipo embutido ‘unicode’
     substituir o método ‘__unicode__()’.  (Implementado por Victor
     Stinner; bpo-1583863(14).)

   * O método *note translate(): 133f. do tipo *note bytearray: 2ea.
     agora aceita ‘None’ como seu primeiro argumento.  (Correção de
     Georg Brandl; bpo-4759(15).)

   * Ao usar *note @classmethod: 166. e *note @staticmethod: 416. para
     agrupar métodos como classe ou métodos estáticos, o objeto
     envólucro agora expõe a função agrupada como seu atributo *note
     __func__: 1340.  (Contribuição de Amaury Forgeot d’Arc, após
     sugestão de George Sakkis; bpo-5982(16).)

   * Quando um conjunto restrito de atributos foi definido usando
     ‘__slots__’, excluir um atributo não definido não levantaria *note
     AttributeError: 34b. como seria de esperar.  Correção de Benjamin
     Peterson; bpo-7604(17).)

   * Duas novas codificações agora são suportadas: “cp720”, usado
     principalmente para texto em árabe; e “cp858”, uma variante do CP
     850 que adiciona o símbolo do euro.  (CP720 foi contribuição de
     Alexander Belchenko e Amaury Forgeot d’Arc em bpo-1616979(18);
     CP858 foi contribuição de Tim Hatch em bpo-8016(19).)

   * O objeto ‘file’ agora definirá o atributo ‘filename’ na exceção
     *note IOError: 108b. ao tentar abrir um diretório em plataformas
     POSIX (observado por Jan Kaliszewski; bpo-4764(20)) , e agora
     verifica explicitamente e proíbe a gravação em objetos arquivo
     somente leitura em vez de confiar na biblioteca C para detectar e
     relatar o erro (correção de Stefan Krah; bpo-5677(21)).

   * O tokenizador do Python agora traduz as próprias terminações de
     linha, então a função embutida *note compile(): 192. agora aceita
     código usando qualquer convenção de terminação de linha.  Além
     disso, não requer mais que o código termine em uma nova linha.

   * Parênteses extras em definições de função são ilegais no Python
     3.x, o que significa que você obtém um erro de sintaxe de ‘def
     f((x)): pass’.  No modo de aviso do Python3, o Python 2.7 agora
     avisará sobre esse uso estranho.  (Notado por James Lingard;
     bpo-7362(22).)

   * Agora é possível criar referências fracas para objetos de classe de
     estilo antigo.  As classes de novo estilo sempre tiveram
     referências fracas.  (Correção de Antoine Pitrou; bpo-8268(23).)

   * Quando um objeto de módulo é coletado como lixo, o dicionário do
     módulo agora só é limpo se ninguém mais estiver mantendo uma
     referência ao dicionário (bpo-7140(24)).

* Menu:

* Alterações no interpretador::
* Otimizações: Otimizações<13>.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=2335

   (2) https://bugs.python.org/issue?@action=redirect&bpo=2333

   (3) https://bugs.python.org/issue?@action=redirect&bpo=7117

   (4) https://bugs.python.org/issue?@action=redirect&bpo=3166

   (5) https://bugs.python.org/issue?@action=redirect&bpo=1811

   (6) https://bugs.python.org/issue?@action=redirect&bpo=5211

   (7) https://bugs.python.org/issue?@action=redirect&bpo=5237

   (8) https://bugs.python.org/issue?@action=redirect&bpo=1588

   (9) https://bugs.python.org/issue?@action=redirect&bpo=7988

   (10) https://bugs.python.org/issue?@action=redirect&bpo=3382

   (11) https://bugs.python.org/issue?@action=redirect&bpo=7994

   (12) https://bugs.python.org/issue?@action=redirect&bpo=3439

   (13) https://bugs.python.org/issue?@action=redirect&bpo=7902

   (14) https://bugs.python.org/issue?@action=redirect&bpo=1583863

   (15) https://bugs.python.org/issue?@action=redirect&bpo=4759

   (16) https://bugs.python.org/issue?@action=redirect&bpo=5982

   (17) https://bugs.python.org/issue?@action=redirect&bpo=7604

   (18) https://bugs.python.org/issue?@action=redirect&bpo=1616979

   (19) https://bugs.python.org/issue?@action=redirect&bpo=8016

   (20) https://bugs.python.org/issue?@action=redirect&bpo=4764

   (21) https://bugs.python.org/issue?@action=redirect&bpo=5677

   (22) https://bugs.python.org/issue?@action=redirect&bpo=7362

   (23) https://bugs.python.org/issue?@action=redirect&bpo=8268

   (24) https://bugs.python.org/issue?@action=redirect&bpo=7140


File: python.info,  Node: Alterações no interpretador,  Next: Otimizações<13>,  Up: Outras mudanças na linguagem<14>

1.15.10.1 Alterações no interpretador
.....................................

Uma nova variável de ambiente, *note PYTHONWARNINGS: bc2, permite
controlar os avisos.  Deve ser definido como uma string contendo
configurações de aviso, equivalentes àquelas usadas com a opção *note
-W: 8cd, separadas por vírgulas.  (Contribuição de Brian Curtin;
bpo-7301(1).)

Por exemplo, a configuração a seguir imprimirá avisos toda vez que
ocorrerem, mas transformará os avisos do módulo *note Cookie: 71. em um
erro.  (A sintaxe exata para definir uma variável de ambiente varia
entre sistemas operacionais e shells.)

     export PYTHONWARNINGS=all,error:::Cookie:0

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=7301


File: python.info,  Node: Otimizações<13>,  Prev: Alterações no interpretador,  Up: Outras mudanças na linguagem<14>

1.15.10.2 Otimizações
.....................

Vários aprimoramentos de desempenho foram adicionados:

   * Um novo opcode foi adicionado para executar a configuração inicial
     das instruções *note with: 5d2, procurando os métodos *note
     __enter__(): 5c8. e *note __exit__(): 1344.  (Contribuição de
     Benjamin Peterson.)

   * O coletor de lixo agora funciona melhor para um padrão de uso
     comum: quando muitos objetos estão sendo alocados sem desalocar
     nenhum deles.  Anteriormente, isso levaria um tempo quadrático para
     coleta de lixo, mas agora o número de coletas de lixo completas é
     reduzido à medida que o número de objetos no heap aumenta.  A nova
     lógica só executa uma passagem completa de coleta de lixo quando a
     geração intermediária tiver sido coletada 10 vezes e quando o
     número de objetos sobreviventes da geração intermediária exceder
     10% do número de objetos da geração mais antiga.  (Sugerido por
     Martin von Löwis e implementado por Antoine Pitrou; bpo-4074(1).)

   * O coletor de lixo tenta evitar o rastreamento de contêineres
     simples que não podem fazer parte de um ciclo.  No Python 2.7, isso
     agora é verdade para tuplas e dicts contendo tipos atômicos (como
     ints, strings, etc.).  Transitivamente, um dict contendo tuplas de
     tipos atômicos também não será rastreado.  Isso ajuda a reduzir o
     custo de cada coleta de lixo diminuindo o número de objetos a serem
     considerados e percorridos pelo coletor.  (Contribuição de Antoine
     Pitrou; bpo-4688(2).)

   * Inteiros longos agora são armazenados internamente na base ‘2**15’
     ou na base ‘2**30’, sendo a base determinada no momento da
     compilação.  Anteriormente, eles eram sempre armazenados na base
     ‘2**15’.  O uso de base ‘2**30’ oferece melhorias significativas de
     desempenho em máquinas de 64 bits, mas os resultados de benchmark
     em máquinas de 32 bits foram mistos.  Portanto, o padrão é usar
     base ‘2**30’ em máquinas de 64 bits e base ‘2**15’ em máquinas de
     32 bits; no Unix, há uma nova opção de configuração
     ‘--enable-big-digits’ que pode ser usada para substituir esse
     padrão.

     Além das melhorias de desempenho, essa alteração deve ser invisível
     para os usuários finais, com uma exceção: para fins de teste e
     depuração, há um novo structseq ‘sys.long_info’ que fornece
     informações sobre o formato interno, fornecendo o número de bits
     por dígito e o tamanho em bytes do tipo C usado para armazenar cada
     dígito:

          >>> import sys
          >>> sys.long_info
          sys.long_info(bits_per_digit=30, sizeof_digit=4)

     (Contributed by Mark Dickinson; bpo-4258(3).)

     Outro conjunto de alterações tornou os objetos longos alguns bytes
     menores: 2 bytes menores em sistemas de 32 bits e 6 bytes em
     sistemas de 64 bits.  (Contribuição de Mark Dickinson;
     bpo-5260(4).)

   * O algoritmo de divisão para números inteiros longos ficou mais
     rápido apertando o laço interno, fazendo deslocamentos em vez de
     multiplicações e corrigindo uma iteração extra desnecessária.
     Vários benchmarks mostram acelerações entre 50% e 150% para
     divisões inteiras longas e operações de módulo.  (Contribuição de
     Mark Dickinson; bpo-5512(5).)  Operações bit a bit também são
     significativamente mais rápidas (patch inicial de Gregory Smith;
     bpo-1087418(6)).

   * A implementação de ‘%’ verifica se o operando do lado esquerdo é
     uma string Python e usa casos especiais; isso resulta em um aumento
     de desempenho de 1 a 3% para aplicativos que usam frequentemente
     ‘%’ com strings, como templates em bibliotecas.  (Implementação de
     Collin Winter; bpo-5176(7).)

   * Compreensões de lista com uma condição ‘if’ são compiladas em
     bytecode mais rápido.  (Patch de Antoine Pitrou, retroportado para
     2.7 por Jeffrey Yasskin; bpo-4715(8).)

   * A conversão de um inteiro ou inteiro longo em uma string decimal
     ficou mais rápida com o uso de maiúsculas e minúsculas especiais na
     base 10, em vez de usar uma função de conversão generalizada que
     oferece suporte a bases arbitrárias.  (Patch por Gawain Bolton;
     bpo-6713(9).)

   * Os métodos ‘split()’, ‘replace()’, ‘rindex()’, ‘rpartition()’ e
     ‘rsplit()’ de tipos semelhantes a strings (strings, Strings Unicode
     e objetos *note bytearray: 2ea.) agora usam um algoritmo de
     pesquisa reversa rápida em vez de uma varredura caractere por
     caractere.  Às vezes, isso é mais rápido por um fator de 10.
     (Adicionado por Florent Xicluna; bpo-7462(10) e bpo-7622(11).)

   * Os módulos *note pickle: a6. e ‘cPickle’ agora internalizam
     automaticamente as strings usadas para nomes de atributos,
     reduzindo o uso de memória dos objetos resultantes da
     desserialização com pickle.  (Contribuição de Jake McGuire;
     bpo-5084(12).)

   * O módulo ‘cPickle’ agora usa dicionários de casos especiais,
     reduzindo quase pela metade o tempo necessário para serializá-los
     com pickle.  (Contribuição de Collin Winter; bpo-5670(13).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=4074

   (2) https://bugs.python.org/issue?@action=redirect&bpo=4688

   (3) https://bugs.python.org/issue?@action=redirect&bpo=4258

   (4) https://bugs.python.org/issue?@action=redirect&bpo=5260

   (5) https://bugs.python.org/issue?@action=redirect&bpo=5512

   (6) https://bugs.python.org/issue?@action=redirect&bpo=1087418

   (7) https://bugs.python.org/issue?@action=redirect&bpo=5176

   (8) https://bugs.python.org/issue?@action=redirect&bpo=4715

   (9) https://bugs.python.org/issue?@action=redirect&bpo=6713

   (10) https://bugs.python.org/issue?@action=redirect&bpo=7462

   (11) https://bugs.python.org/issue?@action=redirect&bpo=7622

   (12) https://bugs.python.org/issue?@action=redirect&bpo=5084

   (13) https://bugs.python.org/issue?@action=redirect&bpo=5670


File: python.info,  Node: Módulos Novos ou Aprimorados,  Next: Mudanças a construções e API C<8>,  Prev: Outras mudanças na linguagem<14>,  Up: O que há de novo no Python 2 7

1.15.11 Módulos Novos ou Aprimorados
------------------------------------

Como em todas os lançamentos, a biblioteca padrão do Python recebeu
diversas melhorias e correções de bugs.  Aqui está uma lista parcial das
mudanças mais notáveis, classificadas em ordem alfabética por nome do
módulo.  Consulte o arquivo ‘Misc/NEWS’ na árvore de código-fonte para
uma lista mais completa de alterações, ou procure nos logs do Subversion
para todos os detalhes.

   * A classe de depuração base do módulo *note bdb: f. *note Bdb: 1346.
     ganhou um recurso para pular módulos.  O construtor agora usa um
     iterável contendo padrões estilo glob como ‘django.*’; o depurador
     não entrará nos quadros de pilha de um módulo que corresponda a um
     desses padrões.  (Contribuição de Maru Newby após sugestão de
     Senthil Kumaran; bpo-5142(1).)

   * O módulo *note binascii: 10. agora oferece suporte à API de buffer,
     então ele pode ser usado com instâncias *note memoryview: 2eb. e
     outros objetos buffer similares.  (Backport de 3.x por Florent
     Xicluna; bpo-7703(2).)

   * Módulo atualizado: o módulo ‘bsddb’ foi atualizado de 4.7.2devel9
     para a versão 4.8.4 do pacote pybsddb(3).  A nova versão apresenta
     melhor compatibilidade com Python 3.x, várias correções de bugs e
     adiciona vários novos sinalizadores e métodos BerkeleyDB.
     (Atualizado por Jesús Cea Avión; bpo-8156(4).  O changelog do
     pybsddb pode ser lido em
     ‘https://hg.jcea.es/pybsddb/file/tip/ChangeLog’.)

   * O *note BZ2File: 86a. do módulo *note bz2: 13. agora oferece
     suporte ao protocolo de gerenciamento de contexto, então você pode
     escrever ‘with bz2.BZ2File(...) as f:’.  (Contribuição de Hagen
     Fürstenau; bpo-3860(5).)

   * Nova classe: a classe *note Counter: 10d0. no módulo *note
     collections: 1d. é útil para contabilizar dados.  As instâncias
     *note Counter: 10d0. se comportam principalmente como dicionários,
     mas retornam zero para chaves ausentes em vez de levantar uma
     exceção *note KeyError: 344.:

          >>> from collections import Counter
          >>> c = Counter()
          >>> for letter in 'here is a sample of english text':
          ...   c[letter] += 1
          ...
          >>> c
          Counter({' ': 6, 'e': 5, 's': 3, 'a': 2, 'i': 2, 'h': 2,
          'l': 2, 't': 2, 'g': 1, 'f': 1, 'm': 1, 'o': 1, 'n': 1,
          'p': 1, 'r': 1, 'x': 1})
          >>> c['e']
          5
          >>> c['z']
          0

     Existem três métodos *note Counter: 10d0. adicionais.  *note
     most_common(): 1347. retorna os N elementos mais comuns e suas
     contagens.  *note elements(): 1348. retorna um iterador sobre os
     elementos contidos, repetindo cada elemento tantas vezes quanto sua
     contagem.  *note subtract(): 121e. pega um iterável e subtrai um
     para cada elemento em vez de adicionar; se o argumento for um
     dicionário ou outro ‘Counter’, as contagens são subtraídas.

          >>> c.most_common(5)
          [(' ', 6), ('e', 5), ('s', 3), ('a', 2), ('i', 2)]
          >>> c.elements() ->
             'a', 'a', ' ', ' ', ' ', ' ', ' ', ' ',
             'e', 'e', 'e', 'e', 'e', 'g', 'f', 'i', 'i',
             'h', 'h', 'm', 'l', 'l', 'o', 'n', 'p', 's',
             's', 's', 'r', 't', 't', 'x'
          >>> c['e']
          5
          >>> c.subtract('very heavy on the letter e')
          >>> c['e']    # Count is now lower
          -1

     Contribuição de Raymond Hettinger; bpo-1696199(6).

     Nova classe: *note OrderedDict: 5db. é descrita na seção anterior
     *note PEP 372; Adicionando um dicionário ordenado a coleções: 132d.

     Novo método: O tipo de dados *note deque: 5dc. agora tem um método
     *note count(): 1220. que retorna o número de elementos contidos
     igual ao argumento fornecido 'x', e um *note reverse(): 1221.
     método que inverte os elementos do deque no local.  *note deque:
     5dc. também expõe seu comprimento máximo como o atributo somente
     leitura *note maxlen: 1349.  (Ambos os recursos adicionados por
     Raymond Hettinger.)

     A classe *note namedtuple: 1ca. agora possui um parâmetro opcional
     'rename'.  Se 'rename' for verdadeiro, os nomes de campos inválidos
     porque foram repetidos ou não são identificadores Python legais
     serão renomeados para nomes legais derivados da posição do campo na
     lista de campos:

          >>> from collections import namedtuple
          >>> T = namedtuple('T', ['field1', '$illegal', 'for', 'field2'], rename=True)
          >>> T._fields
          ('field1', '_1', '_2', 'field2')

     (Adição de Raymond Hettinger; bpo-1818(7).)

     Finalmente, a classe base abstrata *note Mapping: 8d0. agora
     retorna *note NotImplemented: 7d3. se um mapeamento for comparado a
     outro tipo que não seja um ‘Mapping’.  (Correção de Daniel
     Stutzbach; bpo-8729(8).)

   * Construtores para as classes de análise no módulo *note
     ConfigParser: 22. agora recebem um parâmetro 'allow_no_value', cujo
     padrão é false; se verdadeiro, opções sem valores serão permitidas.
     Por exemplo:

          >>> import ConfigParser, StringIO
          >>> sample_config = """
          ... [mysqld]
          ... user = mysql
          ... pid-file = /var/run/mysqld/mysqld.pid
          ... skip-bdb
          ... """
          >>> config = ConfigParser.RawConfigParser(allow_no_value=True)
          >>> config.readfp(StringIO.StringIO(sample_config))
          >>> config.get('mysqld', 'user')
          'mysql'
          >>> print config.get('mysqld', 'skip-bdb')
          None
          >>> print config.get('mysqld', 'unknown')
          Traceback (most recent call last):
            ...
          NoOptionError: No option 'unknown' in section: 'mysqld'

     (Contribuição de Mats Kindahl; bpo-7005(9).)

   * Função descontinuada: ‘contextlib.nested()’, que permite lidar com
     mais de um gerenciador de contexto com uma única instrução *note
     with: 5d2, foi descontinuada porque a instrução ‘with’ agora
     oferece suporte a múltiplos contextos gerentes.

   * O módulo *note cookielib: 70. agora ignora cookies que possuem um
     campo de versão inválido, que não contém um valor inteiro.
     (Correção de John J. Lee; bpo-3924(10).)

   * A função *note deepcopy(): b84. do módulo *note copy: 25. agora
     copiará corretamente os métodos de instância vinculados.
     (Implementado por Robert Collins; bpo-1515(11).)

   * O módulo *note ctypes: 2a. agora sempre converte ‘None’ em um
     ponteiro C ‘NULL’ para argumentos declarados como ponteiros.
     (Alterado por Thomas Heller; bpo-4606(12).)  A biblioteca
     libffi(13) subjacente foi atualizada para a versão 3.0.9, contendo
     várias correções para diferentes plataformas.  (Atualizado por
     Matthias Klose; bpo-8142(14).)

   * Novo método: a classe *note timedelta: 9d7. do módulo *note
     datetime: 30. ganhou um método *note total_seconds(): 134a. que
     retorna o número de segundos na duração.  (Contribuição de Brian
     Quinlan; bpo-5788(15).)

   * Novo método: a classe *note Decimal: 29d. ganhou um método de
     classe *note from_float(): 1244. que realiza uma conversão exata de
     um número de ponto flutuante para um ‘Decimal’.  Essa conversão
     exata busca a maior aproximação decimal do valor da representação
     de ponto flutuante; o valor decimal resultante ainda incluirá a
     imprecisão, se houver.  Por exemplo, ‘Decimal.from_float(0.1)’
     retorna
     ‘Decimal('0.1000000000000000055511151231257827021181583404541015625')’.
     (Implementado por Raymond Hettinger; bpo-4796(16).)

     Comparar instâncias de *note Decimal: 29d. com números de ponto
     flutuante agora produz resultados sensatos com base nos valores
     numéricos dos operandos.  Anteriormente, essas comparações
     recorreriam às regras padrão do Python para comparar objetos, que
     produziam resultados arbitrários com base em seu tipo.  Observe que
     você ainda não pode combinar ‘Decimal’ e ponto flutuante em outras
     operações, como adição, já que você deve escolher explicitamente
     como converter entre float e ‘Decimal’.  (Corrigido por Mark
     Dickinson; bpo-2531(17).)

     O construtor para *note Decimal: 29d. agora aceita números de ponto
     flutuante (adicionados por Raymond Hettinger; bpo-8257(18)) e
     caracteres Unicode não europeus, como dígitos árabe-índicos
     (contribuição de Mark Dickinson; bpo-6595(19)).

     A maioria dos métodos da classe *note Context: 10ee. agora aceitam
     números inteiros, bem como instâncias *note Decimal: 29d.; as
     únicas exceções são os métodos *note canonical(): 134b. e *note
     is_canonical(): 134c.  (Patch de Juan José Conti; bpo-7633(20).)

     Ao usar instâncias *note Decimal: 29d. com o método *note format():
     621. de uma string, o alinhamento padrão era anteriormente o
     alinhamento à esquerda.  Isso foi alterado para alinhamento à
     direita, que é mais sensato para tipos numéricos.  (Alteração de
     Mark Dickinson; bpo-6857(21).)

     Comparações envolvendo um valor NaN de sinalização (ou ‘sNAN’)
     agora sinalizam *note InvalidOperation: 10e7. em vez de retornar
     silenciosamente um valor verdadeiro ou falso dependendo do operador
     de comparação.  Valores silenciosos de NaN (ou ‘NaN’) agora são
     hasheáveis.  (Corrigido por Mark Dickinson; bpo-7279(22).)

   * O módulo *note difflib: 37. agora produz uma saída que é mais
     compatível com as ferramentas ‘diff’/‘patch’ modernas através de
     uma pequena mudança, usando um caractere de tabulação em vez de
     espaços como separador no cabeçalho, fornecendo o nome do arquivo.
     (Correção de Anatoly Techtonik; bpo-7585(23).)

   * O comando Distutils ‘sdist’ agora sempre regenera o arquivo
     ‘MANIFEST’, pois mesmo que os arquivos ‘MANIFEST.in’ ou ‘setup.py’
     não tenham sido modificados, o usuário pode ter criado alguns novos
     arquivos que deveriam ser incluídos.  (Correção de Tarek Ziadé;
     bpo-8688(24).)

   * O sinalizador *note IGNORE_EXCEPTION_DETAIL: 134d. do módulo *note
     doctest: 3a. irá agora ignorar o nome do módulo que contém a
     exceção que está sendo testada.  (Patch de Lennart Regebro;
     bpo-7490(25).)

   * A classe *note Message: 27c. do módulo *note email: 3b. agora
     aceitará uma carga útil com valor Unicode, convertendo
     automaticamente a carga útil para a codificação especificada por
     ‘output_charset’.  (Adição de R. David Murray; bpo-1368247(26).)

   * A classe *note Fraction: 1e7. agora aceita uma única instância
     float ou *note Decimal: 29d, ou dois números racionais, como
     argumentos para seu construtor.  (Implementação de Mark Dickinson;
     racionais adicionados em bpo-5812(27) e float/decimal em
     bpo-8294(28).)

     Ordenar comparações (‘<’, ‘<=’, ‘>’, ‘>=’) entre frações e números
     complexos agora levanta um *note TypeError: 2c3.  Isso corrige um
     descuido, fazendo com que *note Fraction: 1e7. corresponda aos
     outros tipos numéricos.

   * Nova classe: *note FTP_TLS: 901. no módulo *note ftplib: 5e.
     fornece conexões FTP seguras usando encapsulamento TLS de
     autenticação, bem como controle subsequente e transferências de
     dados.  (Contribuição de Giampaolo Rodola; bpo-2054(29).)

     O método *note storbinary(): 134e. para envios de binários agora
     pode reiniciar envios graças a um parâmetro 'rest' adicionado
     (patch de Pablo Mouzo; bpo-6845(30).)

   * Novo decorador de classe: *note total_ordering(): f75. no módulo
     *note functools: 5f. pega uma classe que define um método *note
     __eq__(): b0d. e um de *note __lt__(): 12e2. , *note __le__():
     134f, *note __gt__(): 1350. ou *note __ge__(): 1351. e gera os
     métodos de comparação ausentes.  Como o método ‘__cmp__()’ está
     sendo descontinuado no Python 3.x, esse decorador facilita a
     definição de classes ordenadas.  (Adicionado por Raymond Hettinger;
     bpo-5479(31).)

     Nova função: *note cmp_to_key(): 121a. usará uma função de
     comparação de estilo antigo que espera dois argumentos e retornará
     um novo chamável que pode ser usado como parâmetro 'key' para
     funções como *note sorted(): be7, *note min(): f3a. e *note max():
     f3b, etc.  O principal uso pretendido é ajudar a tornar o código
     compatível com Python 3.x.  (Adição de Raymond Hettinger.)

   * Nova função: o *note is_tracked(): 1352. do módulo *note gc: 60.
     retorna verdadeiro se uma determinada instância for rastreada pelo
     coletor de lixo, falso caso contrário.  (Contribuição de Antoine
     Pitrou; bpo-4688(32))

   * O *note GzipFile: 41a. do módulo *note gzip: 67. agora oferece
     suporte ao protocolo de gerenciamento de contexto, então você pode
     escrever ‘with gzip.GzipFile(...) as f:’ (contribuição de Hagen
     Fürstenau; bpo-3860(33)), e agora implementa o *note
     io.BufferedIOBase: 694. ABC, então você pode envolvê-lo com *note
     io.BufferedReader: 124e. para processamento mais rápido
     (contribuição de Nir Aides; bpo-7471(34)).  Agora também é possível
     substituir o horário de modificação registrado em um arquivo
     compactado, fornecendo um registro de data e hora opcional ao
     construtor.  (Contribuição de Jacques Frechet; bpo-4272(35).)

     Arquivos no formato gzip podem ser preenchidos com zero bytes à
     direita; o módulo *note gzip: 67. agora consumirá esses bytes
     finais.  (Correção de Tadek Pietraszek e Brian Curtin;
     bpo-2846(36).)

   * Novo atributo: o módulo *note hashlib: 68. agora possui um atributo
     ‘algorithms’ contendo uma tupla nomeando os algoritmos suportados.
     No Python 2.7, ‘hashlib.algorithms’ contém ‘('md5', 'sha1',
     'sha224', 'sha256', 'sha384', 'sha512')’.  (Contribuição de Carl
     Chenet; bpo-7418(37).)

   * A classe padrão *note HTTPResponse: 110d. usada pelo módulo *note
     httplib: 6e. agora oferece suporte a buffering, resultando em uma
     leitura muito mais rápida de respostas HTTP. (Contribuição de
     Kristján Valur Jónsson; bpo-4879(38).)

     As classes *note HTTPConnection: b53. e *note HTTPSConnection: b54.
     agora oferecem suporte a um parâmetro 'source_address', uma tupla
     de 2 elementos ‘(host, port)’ fornecendo o endereço de origem que
     será usado para a conexão.  (Contribuição de Eldon Ziegler;
     bpo-3972(39).)

   * O módulo ‘ihooks’ agora oferece suporte a importações relativas.
     Observe que ‘ihooks’ é um módulo mais antigo para personalizar
     importações, substituído pelo módulo ‘imputil’ adicionado no Python
     2.0.  (Suporte relativo à importação adicionado por Neil
     Schemenauer.)

   * O módulo *note imaplib: 74. agora oferece suporte a endereços IPv6.
     (Contribuição de Derek Morr; bpo-1655(40).)

   * Nova função: *note getcallargs(): eed. do módulo *note inspect: 7e.
     pega um chamável e seus argumentos nomeados e posicionais, e
     descobre quais dos parâmetros do chamável receberão cada argumento,
     retornando um dicionário mapeando nomes de argumentos para seus
     valores.  Por exemplo:

          >>> from inspect import getcallargs
          >>> def f(a, b=1, *pos, **named):
          ...     pass
          ...
          >>> getcallargs(f, 1, 2, 3)
          {'a': 1, 'b': 2, 'pos': (3,), 'named': {}}
          >>> getcallargs(f, a=2, x=4)
          {'a': 2, 'b': 1, 'pos': (), 'named': {'x': 4}}
          >>> getcallargs(f)
          Traceback (most recent call last):
          ...
          TypeError: f() takes at least 1 argument (0 given)

     Contribuição de George Sakkis; bpo-3135(41).

   * Módulo atualizado: A biblioteca *note io: 7f. foi atualizada para a
     versão fornecida com Python 3.1.  Para 3.1, a biblioteca de E/S foi
     totalmente reescrita em C e é de 2 a 20 vezes mais rápida
     dependendo da tarefa que está sendo executada.  A versão original
     do Python foi renomeada para o módulo ‘_pyio’.

     Uma pequena mudança resultante: a classe *note io.TextIOBase: 695.
     agora tem um atributo *note errors: 1353. fornecendo a configuração
     de erro usada para erros de codificação e decodificação (um dos
     ‘'strict'’ , ‘'replace'’, ‘'ignore'’).

     A classe *note io.FileIO: 1354. agora levanta uma exceção *note
     OSError: 417. quando passa um descritor de arquivo inválido.
     (Implementado por Benjamin Peterson; bpo-4991(42).)  O método *note
     truncate(): 1355. agora preserva a posição do arquivo;
     anteriormente, mudaria a posição do arquivo para o final do novo
     arquivo.  (Correção de Pascal Chambon; bpo-6939(43).)

   * Nova função: ‘itertools.compress(data, selectors)’ aceita dois
     iteradores.  Elementos de 'data' serão retornados se o valor
     correspondente em 'selectors' for verdadeiro:

          itertools.compress('ABCDEF', [1,0,1,0,1,1]) =>
            A, C, E, F

     Nova função: ‘itertools.combinations_with_replacement(iter, r)’
     retorna todas as combinações possíveis de elementos de comprimento
     'r' do 'iter' iterável.  Ao contrário de *note combinations():
     1356, elementos individuais podem ser repetidos nas combinações
     geradas:

          itertools.combinations_with_replacement('abc', 2) =>
            ('a', 'a'), ('a', 'b'), ('a', 'c'),
            ('b', 'b'), ('b', 'c'), ('c', 'c')

     Observe que os elementos são tratados como únicos dependendo de sua
     posição na entrada, não de seus valores reais.

     A função *note itertools.count(): 12c5. agora tem um argumento
     'step' que permite incrementar por valores diferentes de 1.  *note
     count(): 12c5. agora também permite argumentos nomeados e o uso de
     valores não inteiros, como floats ou *note Decimal: 29d.
     instâncias.  (Implementação de Raymond Hettinger; bpo-5032(44).)

     *note itertools.combinations(): 1356. e *note itertools.product():
     1357. anteriormente levantavam *note ValueError: 202. para valores
     de 'r' maiores que o iterável de entrada.  Isto foi considerado um
     erro de especificação, então agora elas retornam um iterador vazio.
     (Corrigido por Raymond Hettinger; bpo-4816(45).)

   * Módulo atualizado: O módulo *note json: 82. foi atualizado para a
     versão 2.0.9 do pacote simplejson, que inclui uma extensão C que
     torna a codificação e decodificação mais rápidas.  (Contribuição de
     Bob Ippolito; bpo-4136(46).)

     Para oferecer suporte ao novo tipo *note collections.OrderedDict:
     5db, *note json.load(): cd4. agora tem um parâmetro opcional
     'object_pairs_hook' que será chamado com qualquer literal de objeto
     que decodifica para uma lista de pares.  (Contribuição de Raymond
     Hettinger; bpo-5381(47).)

   * A classe *note Maildir: 41c. do módulo *note mailbox: 8b. agora
     registra o registro de data e hora nos diretórios que lê, e apenas
     os relê se o horário de modificação for alterado posteriormente.
     Isso melhora o desempenho, evitando varreduras de diretório
     desnecessárias.  (Corrigido por AM Kuchling e Antoine Pitrou;
     bpo-1607951(48), bpo-6896(49).)

   * Novas funções: o módulo *note math: 8e. ganhou *note erf(): bf3. e
     *note erfc(): bf4. para a função de erro e a função de erro
     complementar, *note expm1(): 122c. que calcula ‘e**x - 1’ com mais
     precisão do que usar *note exp(): 1358. e subtrair 1, *note
     gamma(): 122d. para a função Gamma, e *note lgamma(): 122e. para o
     log natural da função Gamma.  (Contribuição de Mark Dickinson e
     nirinA raseliarison; bpo-3366(50).)

   * As classes ‘Manager*’ do módulo *note multiprocessing: 94. agora
     podem receber um chamável que será chamado sempre que um
     subprocesso for iniciado, junto com um conjunto de argumentos que
     serão passados para o chamável.  (Contribuição de lekma;
     bpo-5585(51).)

     A classe *note Pool: f9f, que controla um conjunto de processos de
     trabalho, agora possui um parâmetro opcional 'maxtasksperchild'.
     Os processos de trabalho executarão o número especificado de
     tarefas e então sairão, fazendo com que ‘Pool’ inicie um novo
     trabalhador.  Isso é útil se as tarefas puderem vazar memória ou
     outros recursos, ou se algumas tarefas fizerem com que o trabalho
     fique muito grande.  (Contribuição de Charles Cazabon;
     bpo-6963(52).)

   * O módulo ‘nntplib’ agora oferece suporte para endereços IPv6.
     (Contribuição de Derek Morr; bpo-1664(53).)

   * Novas funções: o módulo *note os: a1. envolve as seguintes chamadas
     de sistema POSIX: *note getresgid(): 1359. e *note getresuid():
     135a, que retornam os GIDs e UIDs reais, efetivos e salvos ; *note
     setresgid(): 135b. e *note setresuid(): 135c, que definem GIDs e
     UIDs reais, efetivos e salvos para novos valores; *note
     initgroups(): 135d, que inicializa a lista de acesso do grupo para
     o processo atual.  (Funções GID/UID foram contribuição de Travis
     H.; bpo-6508(54).  Suporte para initgroups adicionado por Jean-Paul
     Calderone; bpo-7333(55).)

     A função *note os.fork(): 197. agora reinicializa a trava de
     importação no processo filho; isso corrige problemas no Solaris
     quando *note fork(): 197. é chamado de um thread.  (Correção de
     Zsolt Cserna; bpo-7242(56).)

   * No módulo *note os.path: a2, as funções *note normpath(): 135e. e
     *note abspath(): 135f. agora preservam o Unicode; se o caminho de
     entrada for uma string Unicode, o valor de retorno também será uma
     string Unicode.  (*note normpath(): 135e. corrigido por Matt Giuca
     em bpo-5827(57); *note abspath(): 135f. corrigido por Ezio Melotti
     em bpo-3426(58).)

   * O módulo *note pydoc: b5. agora tem ajuda para os vários símbolos
     que o Python usa.  Agora você pode fazer ‘help('<<')’ ou
     ‘help('@')’, por exemplo.  (Contribuição de David Laban;
     bpo-4739(59).)

   * Os módulos *note re: b9. *note split(): 2a2, *note sub(): 2a3. e
     *note subn(): 2a4. agora aceitam um argumento opcional 'flags',
     para consistência com as outras funções do módulo.  (Adição de
     Gregory P. Smith.)

   * Nova função: *note run_path(): 181. no módulo *note runpy: be.
     executará o código em um argumento 'path' fornecido.  'path' pode
     ser o caminho de um arquivo fonte Python (‘example.py’), um arquivo
     de bytecode compilado (‘example.pyc’), um diretório (‘./package/’)
     ou um arquivo zip (‘example.zip’).  Se um diretório ou zip path for
     fornecido, ele será adicionado na frente de ‘sys.path’ e o módulo
     *note __main__: 1. será importado.  É esperado que o diretório ou
     zip contenha um ‘__main__.py’; caso contrário, algum outro
     ‘__main__.py’ poderá ser importado de um local posteriormente em
     ‘sys.path’.  Isso torna mais o maquinário de *note runpy: be.
     disponível para scripts que desejam imitar a maneira como a linha
     de comando do Python processa um nome de caminho explícito.
     (Adição de Nick Coghlan; bpo-6816(60).)

   * Nova função: no módulo *note shutil: c5, *note make_archive(): 4b3.
     pega um nome de arquivo, tipo de arquivo (formato zip ou tar) e um
     caminho de diretório, e cria um arquivo contendo o conteúdo do
     diretório.  (Adição de Tarek Ziadé.)

     As funções *note copyfile(): a63. e *note copytree(): a33. de *note
     shutil: c5. agora levantam uma exceção *note SpecialFileError:
     1360. quando solicitado a copiar um encadeamento nomeado.
     Anteriormente, o código trataria pipes nomeados como um arquivo
     normal, abrindo-os para leitura, e isso seria bloqueado
     indefinidamente.  (Correção de Antoine Pitrou; bpo-3002(61).)

   * O módulo *note signal: c6. não reinstala mais o manipulador de
     sinal a menos que isso seja realmente necessário, o que corrige um
     bug que poderia tornar impossível capturar o sinal EINTR de forma
     robusta.  (Correção de Charles-François Natali; bpo-8354(62).)

   * Novas funções: no módulo *note site: c7, três novas funções
     retornam vários caminhos específicos do site e do usuário.  *note
     getsitepackages(): 127f. retorna uma lista contendo todos os
     diretórios globais de pacotes de sites, *note
     getusersitepackages(): 1281. retorna o caminho do diretório de
     pacotes de sites do usuário e *note getuserbase(): 1280. retorna o
     valor da variável de ambiente *note USER_BASE: 1361, fornecendo o
     caminho para um diretório que pode ser usado para armazenar dados.
     (Contribuição de Tarek Ziadé; bpo-6693(63).)

     O módulo *note site: c7. agora reporta exceções que ocorrem quando
     o módulo *note sitecustomize: c8. é importado, e não irá mais
     capturar e engolir a exceção *note KeyboardInterrupt: 9d9.
     (Correção de Victor Stinner; bpo-3137(64).)

   * A função *note create_connection(): 672. ganhou um parâmetro
     'source_address', uma tupla de 2 elementos ‘(host, port)’
     fornecendo o endereço de origem que será usado para a conexão.
     (Contribuição de Eldon Ziegler; bpo-3972(65).)

     Os métodos *note recv_into(): 1362. e *note recvfrom_into(): 1363.
     agora escreverão em objetos que oferecem suporte à API de buffer,
     mais utilmente objetos *note bytearray: 2ea. e *note memoryview:
     2eb.  (Implementação de Antoine Pitrou; bpo-8104(66).)

   * A classe *note TCPServer: 1364. do módulo *note SocketServer: cd.
     agora oferece suporte a limite de tempo de soquete e desativação do
     algoritmo Nagle.  O atributo de classe ‘disable_nagle_algorithm’ é
     padronizado como ‘False’; se substituído como verdadeiro, novas
     conexões de solicitação terão a opção TCP_NODELAY definida para
     evitar o armazenamento em buffer de muitos envios pequenos em um
     único pacote TCP. O atributo de classe *note timeout: 1365. pode
     conter um tempo limite em segundos que será aplicado ao soquete de
     solicitação; se nenhuma solicitação for recebida dentro desse
     tempo, *note handle_timeout(): 1366. será chamado e *note
     handle_request(): 1367. retornará.  (Contribuição de Kristján Valur
     Jónsson; bpo-6192(67) e bpo-6267(68).)

   * Módulo atualizado: o módulo *note sqlite3: cf. foi atualizado para
     a versão 2.6.0 do pacote pysqlite(69).  A versão 2.6.0 inclui uma
     série de correções de bugs e adiciona a capacidade de carregar
     extensões SQLite de bibliotecas compartilhadas.  Chame o método
     ‘enable_load_extension(True)’ para habilitar extensões, e então
     chame *note load_extension(): 4b8. para carregar uma biblioteca
     compartilhada específica.  (Atualização de Gerhard Häring.)

   * Os objetos *note SSLSocket: 8f0. do módulo *note ssl: d0. agora
     oferecem suporte à API de buffer, que corrigiu uma falha no
     conjunto de testes (correção por Antoine Pitrou; bpo-7133(70)) e
     definiu automaticamente o ‘SSL_MODE_AUTO_RETRY’ do OpenSSL, o que
     impedirá que um código de erro seja retornado de operações ‘recv()’
     que acionam uma renegociação SSL (correção por Antoine Pitrou;
     bpo-8222(71)).

     A função construtora *note wrap_socket(): 525. agora recebe um
     argumento 'ciphers' que é uma string listando os algoritmos de
     criptografia a serem permitidos; o formato da string é descrito na
     documentação do OpenSSL(72). (Adição de Antoine Pitrou;
     bpo-8322(73).)

     Outra mudança faz com que a extensão carregue todas as cifras e
     algoritmos de resumo do OpenSSL para que estejam todos disponíveis.
     Não foi possível verificar alguns certificados SSL, reportando um
     erro de “algoritmo desconhecido”.  (Relato de Beda Kosata e
     correção de Antoine Pitrou; bpo-8484(74).)

     A versão do OpenSSL usada agora está disponível como os atributos
     do módulo *note ssl.OPENSSL_VERSION: 125f. (uma string), *note
     ssl.OPENSSL_VERSION_INFO: 1260. (uma tupla de 5) e *note
     ssl.OPENSSL_VERSION_NUMBER: 1261. (um número inteiro).  (Adição de
     Antoine Pitrou; bpo-8321(75).)

   * O módulo *note struct: d5. não irá mais ignorar silenciosamente
     erros de overflow quando um valor for muito grande para um código
     de formato inteiro específico (um de ‘bBhHiIlLqQ’); agora sempre
     levanta uma exceção *note struct.error: 1368.  (Alteração de Mark
     Dickinson; bpo-1523(76).)  A função *note pack(): 12b8. também
     tentará usar *note __index__(): 71d. para converter e empacotar
     números não inteiros antes de tentar o método *note __int__(): 71c.
     ou relatar um erro.  (Alteração de Mark Dickinson; bpo-8300(77).)

   * Nova função: o *note check_output(): ff6. do módulo *note
     subprocess: d6. executa um comando com um conjunto especificado de
     argumentos e retorna a saída do comando como uma string quando o
     comando é executado sem erros, ou levanta uma exceção *note
     CalledProcessError: 1369. caso contrário.

          >>> subprocess.check_output(['df', '-h', '.'])
          'Filesystem     Size   Used  Avail Capacity  Mounted on\n
          /dev/disk0s2    52G    49G   3.0G    94%    /\n'

          >>> subprocess.check_output(['df', '-h', '/bogus'])
            ...
          subprocess.CalledProcessError: Command '['df', '-h', '/bogus']' returned non-zero exit status 1

     (Contribuição de Gregory P. Smith.)

     O módulo *note subprocess: d6. agora tentará novamente suas
     chamadas internas do sistema ao receber um sinal *note EINTR: daf.
     (Relato por várias pessoas; patch final por Gregory P. Smith em
     bpo-1068268(78).)

   * Nova função: *note is_declared_global(): 136a. no módulo *note
     symtable: d8. retorna verdadeiro para variáveis que são
     explicitamente declaradas como globais, falso para aquelas que são
     implicitamente globais.  (Contribuição de Jeremy Hylton.)

   * O módulo *note syslog: dc. agora usará o valor de ‘sys.argv[0]’
     como identificador em vez do valor padrão anterior de ‘'python'’.
     (Alteração de Sean Reifschneider; bpo-8451(79).)

   * O valor *note sys.version_info: 6a0. agora é uma tupla nomeada, com
     atributos chamados ‘major’, ‘minor’, ‘micro’, ‘releaselevel’ e
     ‘serial’.  (Contribuição de Ross Light; bpo-4285(80).)

     *note sys.getwindowsversion(): d08. também retorna uma tupla
     nomeada, com atributos chamados ‘major’, ‘minor’, ‘build’,
     ‘platform’, ‘service_pack’, ‘service_pack_major’,
     ‘service_pack_minor’, ‘suite_mask’ e ‘product_type’.  (Contribuição
     de Brian Curtin; bpo-7766(81).)

   * O tratamento de erros padrão do módulo *note tarfile: de. foi
     alterado, para não mais suprimir erros fatais.  O nível de erro
     padrão era anteriormente 0, o que significava que os erros
     resultariam apenas na gravação de uma mensagem no log de depuração,
     mas como o log de depuração não está ativado por padrão, esses
     erros passam despercebidos.  O nível de erro padrão agora é 1, o
     que levanta uma exceção se houver um erro.  (Alteração de Lars
     Gustäbel; bpo-7357(82).)

     *note tarfile: de. agora oferece suporte à filtragem de objetos
     *note TarInfo: 1251. sendo adicionados a um arquivo tar.  Quando
     você chama *note add(): c0e, você pode fornecer um argumento
     'filter' opcional que é chamável.  O chamável 'filter' receberá o
     *note TarInfo: 1251. para cada arquivo sendo adicionado, e pode
     modificá-lo e retorná-lo.  Se o chamável retornar ‘None’, o arquivo
     será excluído do arquivo resultante.  Isto é mais poderoso do que o
     argumento 'exclude' existente, que foi, portanto, descontinuado.
     (Adição de Lars Gustäbel; bpo-6856(83).)  A classe *note TarFile:
     1250. agora também oferece suporte ao protocolo de gerenciamento de
     contexto.  (Adição de Lars Gustäbel; bpo-7232(84).)

   * O método *note wait(): 136b. da classe *note threading.Event: 1197.
     agora retorna o sinalizador interno na saída.  Isso significa que o
     método geralmente retornará verdadeiro porque *note wait(): 136b.
     deve ser bloqueado até que o sinalizador interno se torne
     verdadeiro.  O valor de retorno só será falso se um tempo limite
     tiver sido fornecido e a operação tiver expirado.  (Contribuição de
     Tim Lesher; bpo-1674032(85).)

   * O banco de dados Unicode fornecido pelo módulo *note unicodedata:
     105. agora é usado internamente para determinar quais caracteres
     são numéricos, espaços em branco ou representam quebras de linha.
     O banco de dados também inclui informações do arquivo de dados
     ‘Unihan.txt’ (patch de Anders Chrigström e Amaury Forgeot d’Arc;
     bpo-1571184(86)) e foi atualizado para a versão 5.2.0 (atualização
     de Florent Xicluna; bpo-8024(87)).

   * A função *note urlsplit(): d61. do módulo *note urlparse: 10a.
     agora lida com esquemas de URL desconhecidos de uma forma
     compatível com RFC 3986(88): se a URL estiver no formato
     ‘"<alguma_coisa>://..."’, o texto antes de ‘://’ é tratado como o
     esquema, mesmo que seja um esquema inventado que o módulo não
     conhece.  Essa alteração pode quebrar o código que contornava o
     comportamento antigo.  Por exemplo, Python 2.6.4 ou 2.5 retornará o
     seguinte:

          >>> import urlparse
          >>> urlparse.urlsplit('invented://host/filename?query')
          ('invented', '', '//host/filename?query', '', '')

     Python 2.7 (e Python 2.6.5) vai retornar:

          >>> import urlparse
          >>> urlparse.urlsplit('invented://host/filename?query')
          ('invented', 'host', '/filename?query', '', '')

     (Na verdade, o Python 2.7 produz uma saída ligeiramente diferente,
     pois retorna uma tupla nomeada em vez de uma tupla padrão.)

     O módulo *note urlparse: 10a. também oferece suporte a endereços
     IPv6 literais conforme definido pelo RFC 2732(89) (contribuição de
     Senthil Kumaran; bpo-2987(90)).

          >>> urlparse.urlparse('http://[1080::8:800:200C:417A]/foo')
          ParseResult(scheme='http', netloc='[1080::8:800:200C:417A]',
                      path='/foo', params='', query='', fragment='')

   * Nova classe: a classe *note WeakSet: 5dd. no módulo *note weakref:
     114. é um conjunto que contém apenas referências fracas aos seus
     elementos; os elementos serão removidos quando não houver
     referências apontando para eles.  (Originalmente implementado em
     Python 3.x por Raymond Hettinger e portado para 2.7 por Michael
     Foord.)

   * A biblioteca *note xml.etree.ElementTree: 125. não escapa mais
     caracteres de E comercial e de sinal de maior e de menor ao gerar
     uma instrução de processamento XML (que se parece com
     ‘<?xml-stylesheet href="#style1"?>’) ou comentário (que se parece
     com ‘<!-- comentário -->’).  (Patch de Neil Muller; bpo-2746(91).)

   * O cliente e servidor de XML-RPC, fornecidos pelos módulos *note
     xmlrpclib: 12e. e *note SimpleXMLRPCServer: 12f, melhoraram o
     desempenho ao prover suporte a kep-alive do HTTP/1.1 e,
     opcionalmente, usando a codificação gzip para compactar o XML que
     está sendo trocado.  A compactação gzip é controlada pelo atributo
     ‘encode_threshold’ de *note SimpleXMLRPCRequestHandler: 136c, que
     contém um tamanho em bytes; respostas maiores que isso serão
     compactadas.  (Contribuição de Kristján Valur Jónsson;
     bpo-6267(92).)

   * A classe *note ZipFile: 6c4. do módulo *note zipfile: 131. agora
     oferece suporte ao protocolo de gerenciamento de contexto, então
     você pode escrever ‘with zipfile.ZipFile(...) as f:’.
     (Contribuição de Brian Curtin; bpo-5511(93).)

     *note zipfile: 131. agora também oferece suporte ao arquivamento de
     diretórios vazios e os extrai corretamente.  (Correção de Kuba
     Wieczorek; bpo-4710(94).)  Ler arquivos de um arquivo é mais rápido
     e intercalar *note read(): 136d. e ‘readline()’ agora funciona
     corretamente.  (Contribuição de Nir Aides; bpo-7610(95).)

     A função *note is_zipfile(): 136e. agora aceita um objeto arquivo,
     além dos nomes de caminho aceitos em versões anteriores.
     (Contribuição de Gabriel Genellina; bpo-4756(96).)

     O método *note writestr(): 136f. agora tem um parâmetro
     'compress_type' opcional que permite substituir o método de
     compactação padrão especificado no construtor de *note ZipFile:
     6c4.  (Contribuição de Ronald Oussoren; bpo-6003(97).)

* Menu:

* Novo módulo; importlib: Novo módulo importlib.
* Novo módulo; sysconfig: Novo módulo sysconfig.
* ttk; Widgets temáticos para Tk: ttk Widgets temáticos para Tk.
* Módulo atualizado; unittest: Módulo atualizado unittest.
* Módulo atualizado; ElementTree 1.3: Módulo atualizado ElementTree 1 3.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5142

   (2) https://bugs.python.org/issue?@action=redirect&bpo=7703

   (3) https://www.jcea.es/programacion/pybsddb.htm

   (4) https://bugs.python.org/issue?@action=redirect&bpo=8156

   (5) https://bugs.python.org/issue?@action=redirect&bpo=3860

   (6) https://bugs.python.org/issue?@action=redirect&bpo=1696199

   (7) https://bugs.python.org/issue?@action=redirect&bpo=1818

   (8) https://bugs.python.org/issue?@action=redirect&bpo=8729

   (9) https://bugs.python.org/issue?@action=redirect&bpo=7005

   (10) https://bugs.python.org/issue?@action=redirect&bpo=3924

   (11) https://bugs.python.org/issue?@action=redirect&bpo=1515

   (12) https://bugs.python.org/issue?@action=redirect&bpo=4606

   (13) https://sourceware.org/libffi/

   (14) https://bugs.python.org/issue?@action=redirect&bpo=8142

   (15) https://bugs.python.org/issue?@action=redirect&bpo=5788

   (16) https://bugs.python.org/issue?@action=redirect&bpo=4796

   (17) https://bugs.python.org/issue?@action=redirect&bpo=2531

   (18) https://bugs.python.org/issue?@action=redirect&bpo=8257

   (19) https://bugs.python.org/issue?@action=redirect&bpo=6595

   (20) https://bugs.python.org/issue?@action=redirect&bpo=7633

   (21) https://bugs.python.org/issue?@action=redirect&bpo=6857

   (22) https://bugs.python.org/issue?@action=redirect&bpo=7279

   (23) https://bugs.python.org/issue?@action=redirect&bpo=7585

   (24) https://bugs.python.org/issue?@action=redirect&bpo=8688

   (25) https://bugs.python.org/issue?@action=redirect&bpo=7490

   (26) https://bugs.python.org/issue?@action=redirect&bpo=1368247

   (27) https://bugs.python.org/issue?@action=redirect&bpo=5812

   (28) https://bugs.python.org/issue?@action=redirect&bpo=8294

   (29) https://bugs.python.org/issue?@action=redirect&bpo=2054

   (30) https://bugs.python.org/issue?@action=redirect&bpo=6845

   (31) https://bugs.python.org/issue?@action=redirect&bpo=5479

   (32) https://bugs.python.org/issue?@action=redirect&bpo=4688

   (33) https://bugs.python.org/issue?@action=redirect&bpo=3860

   (34) https://bugs.python.org/issue?@action=redirect&bpo=7471

   (35) https://bugs.python.org/issue?@action=redirect&bpo=4272

   (36) https://bugs.python.org/issue?@action=redirect&bpo=2846

   (37) https://bugs.python.org/issue?@action=redirect&bpo=7418

   (38) https://bugs.python.org/issue?@action=redirect&bpo=4879

   (39) https://bugs.python.org/issue?@action=redirect&bpo=3972

   (40) https://bugs.python.org/issue?@action=redirect&bpo=1655

   (41) https://bugs.python.org/issue?@action=redirect&bpo=3135

   (42) https://bugs.python.org/issue?@action=redirect&bpo=4991

   (43) https://bugs.python.org/issue?@action=redirect&bpo=6939

   (44) https://bugs.python.org/issue?@action=redirect&bpo=5032

   (45) https://bugs.python.org/issue?@action=redirect&bpo=4816

   (46) https://bugs.python.org/issue?@action=redirect&bpo=4136

   (47) https://bugs.python.org/issue?@action=redirect&bpo=5381

   (48) https://bugs.python.org/issue?@action=redirect&bpo=1607951

   (49) https://bugs.python.org/issue?@action=redirect&bpo=6896

   (50) https://bugs.python.org/issue?@action=redirect&bpo=3366

   (51) https://bugs.python.org/issue?@action=redirect&bpo=5585

   (52) https://bugs.python.org/issue?@action=redirect&bpo=6963

   (53) https://bugs.python.org/issue?@action=redirect&bpo=1664

   (54) https://bugs.python.org/issue?@action=redirect&bpo=6508

   (55) https://bugs.python.org/issue?@action=redirect&bpo=7333

   (56) https://bugs.python.org/issue?@action=redirect&bpo=7242

   (57) https://bugs.python.org/issue?@action=redirect&bpo=5827

   (58) https://bugs.python.org/issue?@action=redirect&bpo=3426

   (59) https://bugs.python.org/issue?@action=redirect&bpo=4739

   (60) https://bugs.python.org/issue?@action=redirect&bpo=6816

   (61) https://bugs.python.org/issue?@action=redirect&bpo=3002

   (62) https://bugs.python.org/issue?@action=redirect&bpo=8354

   (63) https://bugs.python.org/issue?@action=redirect&bpo=6693

   (64) https://bugs.python.org/issue?@action=redirect&bpo=3137

   (65) https://bugs.python.org/issue?@action=redirect&bpo=3972

   (66) https://bugs.python.org/issue?@action=redirect&bpo=8104

   (67) https://bugs.python.org/issue?@action=redirect&bpo=6192

   (68) https://bugs.python.org/issue?@action=redirect&bpo=6267

   (69) https://github.com/ghaering/pysqlite

   (70) https://bugs.python.org/issue?@action=redirect&bpo=7133

   (71) https://bugs.python.org/issue?@action=redirect&bpo=8222

   (72) https://docs.openssl.org/1.0.2/man1/ciphers/

   (73) https://bugs.python.org/issue?@action=redirect&bpo=8322

   (74) https://bugs.python.org/issue?@action=redirect&bpo=8484

   (75) https://bugs.python.org/issue?@action=redirect&bpo=8321

   (76) https://bugs.python.org/issue?@action=redirect&bpo=1523

   (77) https://bugs.python.org/issue?@action=redirect&bpo=8300

   (78) https://bugs.python.org/issue?@action=redirect&bpo=1068268

   (79) https://bugs.python.org/issue?@action=redirect&bpo=8451

   (80) https://bugs.python.org/issue?@action=redirect&bpo=4285

   (81) https://bugs.python.org/issue?@action=redirect&bpo=7766

   (82) https://bugs.python.org/issue?@action=redirect&bpo=7357

   (83) https://bugs.python.org/issue?@action=redirect&bpo=6856

   (84) https://bugs.python.org/issue?@action=redirect&bpo=7232

   (85) https://bugs.python.org/issue?@action=redirect&bpo=1674032

   (86) https://bugs.python.org/issue?@action=redirect&bpo=1571184

   (87) https://bugs.python.org/issue?@action=redirect&bpo=8024

   (88) https://datatracker.ietf.org/doc/html/rfc3986.html

   (89) https://datatracker.ietf.org/doc/html/rfc2732.html

   (90) https://bugs.python.org/issue?@action=redirect&bpo=2987

   (91) https://bugs.python.org/issue?@action=redirect&bpo=2746

   (92) https://bugs.python.org/issue?@action=redirect&bpo=6267

   (93) https://bugs.python.org/issue?@action=redirect&bpo=5511

   (94) https://bugs.python.org/issue?@action=redirect&bpo=4710

   (95) https://bugs.python.org/issue?@action=redirect&bpo=7610

   (96) https://bugs.python.org/issue?@action=redirect&bpo=4756

   (97) https://bugs.python.org/issue?@action=redirect&bpo=6003


File: python.info,  Node: Novo módulo importlib,  Next: Novo módulo sysconfig,  Up: Módulos Novos ou Aprimorados

1.15.11.1 Novo módulo: importlib
................................

Python 3.1 inclui o pacote *note importlib: 77, uma reimplementação da
lógica subjacente à instrução *note import: 5e2. do Python.  *note
importlib: 77. é útil para implementadores de interpretadores Python e
para usuários que desejam escrever novos importadores que possam
participar do processo de importação.  Python 2.7 não contém o pacote
*note importlib: 77. completo, mas em vez disso possui um pequeno
subconjunto que contém uma única função, *note import_module(): 518.

‘import_module(name, package=None)’ importa um módulo.  'name' é uma
string contendo o nome do módulo ou pacote.  É possível fazer
importações relativas fornecendo uma string que começa com um caractere
‘.’, como ‘..utils.errors’.  Para importações relativas, o argumento
'package' deve ser fornecido e é o nome do pacote que será usado como
âncora para a importação relativa.  *note import_module(): 518. insere o
módulo importado em ‘sys.modules’ e retorna o objeto do módulo.

Veja alguns exemplos:

     >>> from importlib import import_module
     >>> anydbm = import_module('anydbm')  # Importação absoluta padrão
     >>> anydbm
     <module 'anydbm' from '/p/python/Lib/anydbm.py'>
     >>> # Importação relativa
     >>> file_util = import_module('..file_util', 'distutils.command')
     >>> file_util
     <module 'distutils.file_util' from '/python/Lib/distutils/file_util.pyc'>

*note importlib: 77. foi implementado por Brett Cannon e introduzido no
Python 3.1.


File: python.info,  Node: Novo módulo sysconfig,  Next: ttk Widgets temáticos para Tk,  Prev: Novo módulo importlib,  Up: Módulos Novos ou Aprimorados

1.15.11.2 Novo módulo: sysconfig
................................

O módulo *note sysconfig: db. foi retirado do pacote Distutils,
tornando-se um novo módulo de nível independente.  *note sysconfig: db.
fornece funções para obter informações sobre o processo de construção do
Python: opções do compilador, caminhos de instalação, o nome da
plataforma e se o Python está sendo executado a partir de seu diretório
de código-fonte.

Algumas das funções do módulo são:

   * *note get_config_var(): 1063. retorna variáveis do Makefile do
     Python e do arquivo ‘pyconfig.h’.

   * *note get_config_vars(): 1064. retorna um dicionário contendo todas
     as variáveis de configuração.

   * *note get_path(): 1372. retorna o caminho configurado para um tipo
     específico de módulo: a biblioteca padrão, módulos específicos do
     site, módulos específicos da plataforma, etc.

   * *note is_python_build(): 2dd. retorna verdadeiro se você estiver
     executando um binário de uma árvore de código-fonte em Python, e
     falso caso contrário.

Consulte a documentação do *note sysconfig: db. para mais detalhes e
para uma lista completa de funções.

O pacote Distutils e *note sysconfig: db. agora são mantidos por Tarek
Ziadé, que também iniciou um pacote Distutils2 (repositório fonte em
‘https://hg.python.org/distutils2/’) para desenvolver uma versão de
próxima geração do Distutils.


File: python.info,  Node: ttk Widgets temáticos para Tk,  Next: Módulo atualizado unittest,  Prev: Novo módulo sysconfig,  Up: Módulos Novos ou Aprimorados

1.15.11.3 ttk: Widgets temáticos para Tk
........................................

O Tcl/Tk 8.5 inclui um conjunto de widgets temáticos que reimplementam
widgets Tk básicos, mas têm uma aparência mais personalizável e podem,
portanto, se assemelhar mais aos widgets da plataforma nativa.  Este
conjunto de widgets foi originalmente chamado de Tile, mas foi renomeado
para Ttk (para “Tk temático”) ao ser adicionado ao Tcl/Tck versão 8.5.

Para saber mais, leia a documentação do módulo *note ttk: f9.  Você
também pode ler a página de manual do Tcl/Tk que descreve o mecanismo do
tema Ttk, disponível em
‘https://www.tcl.tk/man/tcl8.5/TkCmd/ttk_intro.html’.  Algumas capturas
de tela do código Python/Ttk em uso estão em
‘https://code.google.com/archive/p/python-ttk/wikis/Screenshots.wiki’.

O módulo *note tkinter.ttk: f9. foi escrito por Guilherme Polo e
adicionado em bpo-2983(1).  Uma versão alternativa chamada ‘Tile.py’,
escrita por Martin Franklin e mantida por Kevin Walzer, foi proposta
para inclusão em bpo-2618(2), mas os autores argumentaram que o trabalho
de Guilherme Polo era mais abrangente.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=2983

   (2) https://bugs.python.org/issue?@action=redirect&bpo=2618


File: python.info,  Node: Módulo atualizado unittest,  Next: Módulo atualizado ElementTree 1 3,  Prev: ttk Widgets temáticos para Tk,  Up: Módulos Novos ou Aprimorados

1.15.11.4 Módulo atualizado: unittest
.....................................

O módulo *note unittest: 106. foi bastante aprimorado; muitos novos
recursos foram adicionados.  A maioria desses recursos foi implementada
por Michael Foord, salvo indicação em contrário.  A versão aprimorada do
módulo pode ser baixada separadamente para uso com as versões 2.4 a 2.6
do Python, empacotadas como o pacote ‘unittest2’, de unittest2(1).

Quando usado na linha de comando, o módulo pode descobrir testes
automaticamente.  Não é tão sofisticado quanto py.test(2) ou nose(3),
mas fornece uma maneira simples de executar testes mantidos dentro de um
conjunto de diretórios de pacotes.  Por exemplo, o comando a seguir irá
pesquisar no subdiretório ‘test/’ por quaisquer arquivos de teste
importáveis chamados ‘test*.py’:

     python -m unittest discover -s test

Consulte a documentação do módulo *note unittest: 106. para mais
detalhes.  (Desenvolvido em bpo-6001(4).)

A função *note main(): 1019. oferece suporte a algumas outras novas
opções:

   * *note -b: 1376. ou ‘--buffer’ armazenará em buffer a saída padrão e
     os fluxos de erro padrão durante cada teste.  Se o teste for
     aprovado, qualquer saída resultante será descartada; em caso de
     falha, a saída em buffer será exibida.

   * *note -c: 1377. ou ‘--catch’ fará com que a interrupção control-C
     seja tratada com mais elegância.  Em vez de interromper
     imediatamente o processo de teste, o teste em execução será
     concluído e então os resultados parciais até a interrupção serão
     relatados.  Se você estiver impaciente, um segundo toque no
     controle C causará uma interrupção imediata.

     Este manipulador de control-C tenta evitar causar problemas quando
     o código que está sendo testado ou os testes em execução definiram
     um manipulador de sinal próprio, percebendo que um manipulador de
     sinal já estava definido e chamando-o.  Se isso não funcionar para
     você, existe um decorador *note removeHandler(): 1378. que pode ser
     usado para marcar testes que devem ter o manuseio de control-C
     desabilitado.

   * *note -f: 1379. ou ‘--failfast’ faz com que a execução do teste
     pare imediatamente quando um teste falha, em vez de continuar a
     executar testes adicionais.  (Sugerido por Cliff Dyer e
     implementado por Michael Foord; bpo-8074(5).)

As mensagens de progresso agora mostram ‘x’ para falhas esperadas e ‘u’
para sucessos inesperados quando executadas em modo detalhado.
(Contribuição de Benjamin Peterson.)

Os casos de teste podem levantar a exceção *note SkipTest: 101a. para
pular um teste (bpo-1034053(6)).

As mensagens de erro para falhas *note assertEqual(): 529, *note
assertTrue(): 527. e *note assertFalse(): 528. agora fornecem mais
informações.  Se você definir o atributo *note longMessage: 137a. de
suas classes *note TestCase: 44f. como true, tanto a mensagem de erro
padrão quanto qualquer mensagem adicional que você fornecer serão
impressas para falhas.  (Adição de Michael Foord; bpo-5663(7).)

O método *note assertRaises(): 52d. agora retorna um manipulador de
contexto quando chamado sem fornecer um objeto chamável para ser
executado.  Por exemplo, você pode escrever isto:

     with self.assertRaises(KeyError):
         {}['foo']

(implementação de Antoine Pitrou; bpo-4444(8).)

Correções de desmontagem e configuração em nível de módulo e classe
agora são suportados.  Os módulos podem conter funções *note
setUpModule(): a57. e *note tearDownModule(): 137b.  As classes podem
ter métodos *note setUpClass(): a58. e *note tearDownClass(): 137c. que
devem ser definidos como métodos de classe (usando ‘@classmethod’ ou
equivalente).  Essas funções e métodos são invocados quando o executor
de teste alterna para um caso de teste em um módulo ou classe diferente.

Os métodos *note addCleanup(): a8b. e *note doCleanups(): 137d. foram
adicionados.  *note addCleanup(): a8b. permite adicionar funções de
limpeza que serão chamadas incondicionalmente (após *note setUp(): 137e.
se *note setUp(): 137e. falhar, caso contrário, após *note tearDown():
137f.).  Isso permite uma alocação e desalocação de recursos muito mais
simples durante os testes (bpo-5679(9)).

Foram adicionados vários novos métodos que fornecem testes mais
especializados.  Muitos desses métodos foram escritos por engenheiros do
Google para uso em seus conjuntos de testes; Gregory P. Smith, Michael
Foord e GvR trabalharam na fusão deles na versão Python de *note
unittest: 106.

   * *note assertIsNone(): 12cc. e *note assertIsNotNone(): 12cd. pegam
     uma expressão e verificam se o resultado é ou não ‘None’.

   * *note assertIs(): 1380. e *note assertIsNot(): 1381. pegam dois
     valores e verificam se os dois valores são avaliados como o mesmo
     objeto ou não.  (Adicionado por Michael Foord; bpo-2578(10).)

   * *note assertIsInstance(): 1382. e *note assertNotIsInstance():
     1383. verificam se o objeto resultante é uma instância de uma
     classe específica ou de uma tupla de classes.  (Adicionado por
     Georg Brandl; bpo-7031(11).)

   * *note assertGreater(): 1384, *note assertGreaterEqual(): 1385,
     *note assertLess(): 1386, e *note assertLessEqual(): 1387. comparam
     duas quantidades.

   * *note assertMultiLineEqual(): 1388. compara duas strings e, se não
     forem iguais, exibe uma comparação útil que destaca as diferenças
     nas duas strings.  Esta comparação agora é usada por padrão quando
     strings Unicode são comparadas com *note assertEqual(): 529.

   * *note assertRegexpMatches(): 52e. e *note assertNotRegexpMatches():
     530. verificam se o primeiro argumento é uma string que corresponde
     ou não à expressão regular fornecida como o segundo argumento
     (bpo-8038(12)).

   * *note assertRaisesRegexp(): 52f. verifica se uma exceção específica
     foi levantada e também verifica se a representação da string da
     exceção corresponde à expressão regular fornecida.

   * *note assertIn(): 1389. e *note assertNotIn(): 138a. testa se
     'primeiro' está ou não em 'segundo'.

   * *note assertItemsEqual(): 126b. testa se duas sequências fornecidas
     contêm os mesmos elementos.

   * *note assertSetEqual(): 12c7. compara se dois conjuntos são iguais
     e apenas relata as diferenças entre os conjuntos em caso de erro.

   * Da mesma forma, *note assertListEqual(): 12c9. e *note
     assertTupleEqual(): 12ca. comparam os tipos especificados e
     explicam quaisquer diferenças sem necessariamente imprimir seus
     valores completos; esses métodos agora são usados por padrão ao
     comparar listas e tuplas usando *note assertEqual(): 529.  De forma
     mais geral, *note assertSequenceEqual(): 12cb. compara duas
     sequências e pode opcionalmente verificar se ambas as sequências
     são de um tipo específico.

   * *note assertDictEqual(): 12c8. compara dois dicionários e relata as
     diferenças; agora é usado por padrão quando você compara dois
     dicionários usando *note assertEqual(): 529.
     ‘assertDictContainsSubset()’ verifica se todos os pares chave/valor
     em 'first' são encontrados em 'second'.

   * *note assertAlmostEqual(): 52b. e *note assertNotAlmostEqual():
     52c. testam se 'first' e 'second' são aproximadamente iguais.  Este
     método pode arredondar a diferença para um número opcionalmente
     especificado de 'places' (o padrão é 7) e compará-lo com zero, ou
     exigir que a diferença seja menor que um valor 'delta' fornecido.

   * *note loadTestsFromName(): 138b. respeita corretamente o atributo
     *note suiteClass: 138c. do *note TestLoader: 28e.  (Correção de
     Mark Roddy; bpo-6866(13).)

   * Um novo gancho permite estender o método *note assertEqual(): 529.
     para lidar com novos tipos de dados.  O método *note
     addTypeEqualityFunc(): 138d. leva um objeto de tipo e uma função.
     A função será usada quando ambos os objetos comparados forem do
     tipo especificado.  Esta função deve comparar os dois objetos e
     gerar uma exceção se eles não corresponderem; é uma boa ideia que a
     função forneça informações adicionais sobre por que os dois objetos
     não correspondem, assim como fazem os novos métodos de comparação
     de sequências.

*note unittest.main(): 1019. agora recebe um argumento ‘exit’ opcional.
Se for falso, *note main(): 1019. não chama *note sys.exit(): 138e,
permitindo que *note main(): 1019. seja usado a partir do interpretador
interativo.  (Contribuição de J. Pablo Fernández; bpo-3379(14).)

*note TestResult: 11a6. tem novos métodos *note startTestRun(): 138f. e
*note stopTestRun(): 1390. que são chamados imediatamente antes e depois
de uma execução de teste.  (Contribuição de Robert Collins;
bpo-5728(15).)

Com todas essas mudanças, o ‘unittest.py’ estava ficando estranhamente
grande, então o módulo foi transformado em um pacote e o código dividido
em vários arquivos (por Benjamin Peterson).  Isso não afeta como o
módulo é importado ou usado.

Ver também
..........

‘https://web.archive.org/web/20210619163128/http://www.voidspace.org.uk/python/articles/unittest2.shtml’

     Descreve os novos recursos, como usá-los e a justificativa para
     diversas decisões de design.  (Por Michael Foord.)

   ---------- Footnotes ----------

   (1) https://pypi.org/project/unittest2/

   (2) https://pytest.org

   (3) https://nose.readthedocs.io/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=6001

   (5) https://bugs.python.org/issue?@action=redirect&bpo=8074

   (6) https://bugs.python.org/issue?@action=redirect&bpo=1034053

   (7) https://bugs.python.org/issue?@action=redirect&bpo=5663

   (8) https://bugs.python.org/issue?@action=redirect&bpo=4444

   (9) https://bugs.python.org/issue?@action=redirect&bpo=5679

   (10) https://bugs.python.org/issue?@action=redirect&bpo=2578

   (11) https://bugs.python.org/issue?@action=redirect&bpo=7031

   (12) https://bugs.python.org/issue?@action=redirect&bpo=8038

   (13) https://bugs.python.org/issue?@action=redirect&bpo=6866

   (14) https://bugs.python.org/issue?@action=redirect&bpo=3379

   (15) https://bugs.python.org/issue?@action=redirect&bpo=5728


File: python.info,  Node: Módulo atualizado ElementTree 1 3,  Prev: Módulo atualizado unittest,  Up: Módulos Novos ou Aprimorados

1.15.11.5 Módulo atualizado: ElementTree 1.3
............................................

A versão da biblioteca ElementTree incluída no Python foi atualizada
para a versão 1.3.  Alguns dos novos recursos são:

   * As várias funções de análise agora recebem um argumento nomeado
     'parser' fornecendo uma instância *note XMLParser: a5e. que será
     usada.  Isso torna possível substituir a codificação interna do
     arquivo:

          p = ET.XMLParser(encoding='utf-8')
          t = ET.XML("""<root/>""", parser=p)

     Erros na análise de XML agora levantam uma exceção *note
     ParseError: 12b9, cujas instâncias possuem um atributo ‘position’
     contendo uma tupla ('linha', 'coluna') fornecendo a localização do
     problema.

   * O código do ElementTree para converter árvores em strings foi
     significativamente reformulado, tornando-o quase duas vezes mais
     rápido em muitos casos.  Os métodos *note ElementTree.write(): aa4.
     e ‘Element.write()’ agora têm um parâmetro 'method' que pode ser
     “xml” (o padrão), “html” ou “text”.  O modo HTML exibirá elementos
     vazios como ‘<empty></empty>’ em vez de ‘<empty/>’, e o modo texto
     ignorará os elementos e exibirá apenas os blocos de texto.  Se você
     definir o atributo *note tag: 1393. de um elemento como ‘None’, mas
     deixar seus filhos no lugar, o elemento será omitido quando a
     árvore for gravada, portanto, não será necessário fazer uma
     reorganização mais extensa para remover um único elemento.

     O tratamento de espaços de nomes também foi aprimorado.  Todas as
     declarações ‘xmlns:<alguma-coisa>’ agora são geradas no elemento
     raiz, e não espalhadas pelo XML resultante.  Você pode definir o
     espaço de nomes padrão para uma árvore definindo o atributo
     ‘default_namespace’ e registrar novos prefixos com *note
     register_namespace(): 1212.  No modo XML, você pode usar o
     parâmetro true/false 'xml_declaration' para suprimir a declaração
     XML.

   * Novo método *note Element: 310.: *note extend(): 1213. anexa os
     itens de uma sequência aos filhos do elemento.  Os próprios
     elementos se comportam como sequências, por isso é fácil mover os
     filhos de um elemento para outro:

          from xml.etree import ElementTree as ET

          t = ET.XML("""<list>
            <item>1</item> <item>2</item>  <item>3</item>
          </list>""")
          new = ET.XML('<root/>')
          new.extend(t)

          # Outputs <root><item>1</item>...</root>
          print ET.tostring(new)

   * Novo método *note Element: 310.: *note iter(): 1394. produz os
     filhos do elemento como um gerador.  Também é possível escrever
     ‘for child in elem:’ para percorrer os filhos de um elemento.  O
     método existente ‘getiterator()’ agora está descontinuado, assim
     como ‘getchildren()’ que constrói e retorna uma lista de filhos.

   * Novo método *note Element: 310.: *note itertext(): 1215. produz
     todos os pedaços de texto que são descendentes do elemento.  Por
     exemplo:

          t = ET.XML("""<list>
            <item>1</item> <item>2</item>  <item>3</item>
          </list>""")

          # Outputs ['\n  ', '1', ' ', '2', '  ', '3', '\n']
          print list(t.itertext())

   * Descontinuado: usar um elemento como booleano (ou seja, ‘if elem:’)
     retornaria verdadeiro se o elemento tivesse algum filho, ou falso
     se não houvesse nenhum filho.  Este comportamento é confuso –
     ‘None’ é falso, mas um elemento sem filhos também o é?  – então
     agora irá acionar um *note FutureWarning: 415.  Em seu código, você
     deve ser explícito: escreva ‘len(elem) != 0’ se estiver interessado
     no número de filhos, ou ‘elem is not None’.

Fredrik Lundh desenvolve ElementTree e produziu a versão 1.3; você pode
ler o artigo dele descrevendo 1.3 em
‘https://web.archive.org/web/20200703234532/http://effbot.org/zone/elementtree-13-intro.htm’.
Florent Xicluna atualizou a versão incluída no Python, após discussões
em python-dev e em bpo-6472(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=6472


File: python.info,  Node: Mudanças a construções e API C<8>,  Next: Outras alterações e correções,  Prev: Módulos Novos ou Aprimorados,  Up: O que há de novo no Python 2 7

1.15.12 Mudanças a construções e API C
--------------------------------------

As alterações no processo de construção do Python e na API C incluem:

   * O uso da versão mais recente do GNU Debugger, GDB 7, pode ser
     programado usando Python(1).  Quando você começa a depurar um
     programa executável P, o GDB irá procurar por um arquivo chamado
     ‘P-gdb.py’ e lê-lo automaticamente.  Dave Malcolm contribuiu com um
     ‘python-gdb.py’ que adiciona vários comandos úteis ao depurar o
     próprio Python.  Por exemplo, ‘py-up’ e ‘py-down’ sobem ou descem
     um quadro de pilha Python, que geralmente corresponde a vários
     quadros de pilha C. ‘py-print’ imprime o valor de uma variável
     Python e ‘py-bt’ imprime o stack trace do Python.  (Adicionado como
     resultado de bpo-8032(2).)

   * Se você usar o arquivo ‘.gdbinit’ fornecido com Python, a macro
     “pyo” na versão 2.7 agora funciona corretamente quando o thread que
     está sendo depurado não contém a GIL; a macro agora a adquire antes
     de imprimir.  (Contribuição de Victor Stinner; bpo-3632(3).)

   * *note Py_AddPendingCall(): 988. agora é segura para thread,
     permitindo que qualquer thread de trabalho envie notificações para
     o thread principal do Python.  Isto é particularmente útil para
     operações de E/S assíncronas.  (Contribuição de Kristján Valur
     Jónsson; bpo-4293(4).)

   * Nova função: *note PyCode_NewEmpty(): 1396. cria um objeto código
     vazio; apenas o nome do arquivo, o nome da função e o número da
     primeira linha são necessários.  Isto é útil para módulos de
     extensão que estão tentando construir uma pilha de traceback mais
     útil.  Anteriormente, essas extensões precisavam chamar
     ‘PyCode_New()’, que tinha muito mais argumentos.  (Adição de
     Jeffrey Yasskin.)

   * Nova função: *note PyErr_NewExceptionWithDoc(): 12aa. cria uma nova
     classe de exceção, assim como a *note PyErr_NewException(): 12ab.
     existente faz, mas recebe um argumento ‘char *’ extra contendo a
     docstring para a nova classe de exceção .  (Adição de ‘lekma’ no
     rastreador de bugs do Python; bpo-7033(5).)

   * Nova função: *note PyFrame_GetLineNumber(): 78b. pega um objeto
     quadro e retorna o número da linha que o frame está executando
     atualmente.  Anteriormente, o código precisaria obter o índice da
     instrução de bytecode atualmente em execução e, em seguida,
     procurar o número da linha correspondente a esse endereço.  (Adição
     de Jeffrey Yasskin.)

   * Novas funções: *note PyLong_AsLongAndOverflow(): 12a8. e *note
     PyLong_AsLongLongAndOverflow(): 12a7. aproxima um inteiro longo do
     Python como um long ou long long do C. Se o número for muito grande
     para caber no tipo de saída, um sinalizador 'overflow' será
     definido e retornado ao chamador.  (Contribuição de Case Van
     Horsen; bpo-7528(6) e bpo-7767(7).)

   * Nova função: decorrente da reescrita da conversão
     string-para-float, uma nova função *note PyOS_string_to_double():
     12d7. foi adicionada.  As antigas funções ‘PyOS_ascii_strtod()’ e
     ‘PyOS_ascii_atof()’ agora foram descontinuadas.

   * Nova função: ‘PySys_SetArgvEx()’ define o valor de ‘sys.argv’ e
     pode opcionalmente atualizar ‘sys.path’ para incluir o diretório
     que contém o script nomeado por ‘sys.argv[0]’ dependendo do valor
     de um parâmetro 'updatepath'.

     Esta função foi adicionada para fechar uma falha de segurança em
     aplicativos que incorporam Python.  A função antiga,
     ‘PySys_SetArgv()’, sempre atualizava ‘sys.path’, e às vezes
     adicionava o diretório atual.  Isso significava que, se você
     executasse uma aplicação incorporando Python em um diretório
     controlado por outra pessoa, os invasores poderiam colocar um
     módulo cavalo de Troia no diretório (digamos, um arquivo chamado
     ‘os.py’) que sua aplicação então usaria.  importar e executar.

     Se você mantém uma aplicação C/C++ que incorpora Python, verifique
     se está chamando ‘PySys_SetArgv()’ e considere cuidadosamente se a
     aplicação deve usar ‘PySys_SetArgvEx()’ com 'updatepath' definido
     como false.

     Problema de segurança relatado como CVE 2008-5983(8); discutido em
     bpo-5753(9), e corrigido por Antoine Pitrou.

   * Novas macros: os arquivos de cabeçalho do Python agora definem as
     seguintes macros: *note Py_ISALNUM: 1397, *note Py_ISALPHA: 1398,
     *note Py_ISDIGIT: 1399, *note Py_ISLOWER: 139a, *note Py_ISSPACE:
     139b, *note Py_ISUPPER: 139c, *note Py_ISXDIGIT: 139d, *note
     Py_TOLOWER: 139e. e *note Py_TOUPPER: 139f.  Todas essas funções
     são análogas às macros padrão C para classificação de caracteres,
     mas ignoram a configuração de localidade atual, porque em vários
     lugares o Python precisa analisar caracteres de maneira
     independente de localidade.  (Adição de Eric Smith; bpo-5793(10).)

   * Função removida: ‘PyEval_CallObject()’ agora está disponível apenas
     como uma macro.  Uma versão de função estava sendo mantida para
     preservar a compatibilidade de links ABI, mas isso foi em 1997;
     certamente pode ser excluído agora.  (Remoção de Antoine Pitrou;
     bpo-8276(11).)

   * Novos códigos de formato: as funções ‘PyString_FromFormat()’,
     ‘PyString_FromFormatV()’ e *note PyErr_Format(): ee0. agora aceitam
     ‘%lld’ e ‘%llu’ códigos de formato para exibir os tipos long long
     de C. (Contribuição de Mark Dickinson; bpo-7228(12).)

   * A complicada interação entre threads e forks de processos foi
     alterada.  Anteriormente, o processo filho criado por *note
     os.fork(): 197. pode falhar porque o filho é criado com apenas um
     único thread em execução, a thread executando *note os.fork(): 197.
     Se outros threads estivessem mantendo uma trava, como a trava de
     importação do Python, quando o fork fosse executado, a trava ainda
     seria marcada como “retida” no novo processo.  Mas no processo
     filho nada liberaria a trava, pois os outros threads não foram
     replicados e o processo filho não seria mais capaz de realizar
     importações.

     Python 2.7 adquire a trava de importação antes de executar um *note
     os.fork(): 197, e também limpará quaisquer travas criadas usando o
     módulo *note threading: ed.  Módulos de extensão C que possuem
     travas internas, ou que chamam ‘fork()’ eles próprios, não se
     beneficiarão desta limpeza.

     (Correção de Thomas Wouters; bpo-1590864(13).)

   * A função *note Py_Finalize(): 13a0. agora chama a função interna
     ‘threading._shutdown()’; isso evita que algumas exceções sejam
     levantadas quando um interpretador é encerrado.  (Patch de Adam
     Olsen; bpo-1722344(14).)

   * Ao usar a estrutura *note PyMemberDef: 54f. para definir atributos
     de um tipo, o Python não permitirá mais que você tente excluir ou
     definir um atributo ‘T_STRING_INPLACE’.

   * Símbolos globais definidos pelo módulo *note ctypes: 2a. agora são
     prefixados com ‘Py’, ou com ‘_ctypes’.  (Implementado por Thomas
     Heller; bpo-3102(15).)

   * Nova opção de configuração: a opção ‘--with-system-expat’ permite
     construir o módulo *note pyexpat: 126. para usar a biblioteca Expat
     do sistema.  (Contribuição de Arfrever Frehtes Taifersar Arahesis;
     bpo-7609(16).)

   * Nova opção de configuração: a opção ‘--with-valgrind’ agora
     desativará o alocador pymalloc, o que é difícil para o detector de
     erros de memória Valgrind analisar corretamente.  Valgrind será,
     portanto, melhor na detecção de vazamentos e sobrecargas de
     memória.  (Contribuição de James Henstridge; bpo-2422(17).)

   * Nova opção de configuração: agora você pode fornecer uma string
     vazia para ‘--with-dbmliborder=’ para desabilitar todos os vários
     módulos DBM. (Adição de Arfrever Frehtes Taifersar Arahesis;
     bpo-6491(18).)

   * O script ‘configure’ agora verifica bugs de arredondamento de ponto
     flutuante em determinados chips Intel de 32 bits e define uma
     definição de pré-processador ‘X87_DOUBLE_ROUNDING’.  Nenhum código
     usa essa definição no momento, mas ela está disponível para quem
     quiser.  (Adicionado por Mark Dickinson; bpo-2937(19).)

     ‘configure’ agora também define uma variável Makefile ‘LDCXXSHARED’
     para oferecer suporte à ligação C++.  (Contribuição de Arfrever
     Frehtes Taifersar Arahesis; bpo-1222585(20).)

   * O processo de construção agora cria os arquivos necessários para
     suporte ao pkg-config.  (Contribuição de Clinton Roy;
     bpo-3585(21).)

   * O processo de construção agora prover suporte ao Subversion 1.7.
     (Contribuição de Arfrever Frehtes Taifersar Arahesis;
     bpo-6094(22).)

* Menu:

* Capsules::
* Alterações específicas da porta; Windows: Alterações específicas da porta Windows.
* Alterações específicas da porta; Mac OS X: Alterações específicas da porta Mac OS X.
* Alterações específicas da porta; FreeBSD: Alterações específicas da porta FreeBSD.

   ---------- Footnotes ----------

   (1) 
https://web.archive.org/web/20110715084810/http://sourceware.org/gdb/current/onlinedocs/gdb/Python.html

   (2) https://bugs.python.org/issue?@action=redirect&bpo=8032

   (3) https://bugs.python.org/issue?@action=redirect&bpo=3632

   (4) https://bugs.python.org/issue?@action=redirect&bpo=4293

   (5) https://bugs.python.org/issue?@action=redirect&bpo=7033

   (6) https://bugs.python.org/issue?@action=redirect&bpo=7528

   (7) https://bugs.python.org/issue?@action=redirect&bpo=7767

   (8) https://www.cve.org/CVERecord?id=CVE-2008-5983

   (9) https://bugs.python.org/issue?@action=redirect&bpo=5753

   (10) https://bugs.python.org/issue?@action=redirect&bpo=5793

   (11) https://bugs.python.org/issue?@action=redirect&bpo=8276

   (12) https://bugs.python.org/issue?@action=redirect&bpo=7228

   (13) https://bugs.python.org/issue?@action=redirect&bpo=1590864

   (14) https://bugs.python.org/issue?@action=redirect&bpo=1722344

   (15) https://bugs.python.org/issue?@action=redirect&bpo=3102

   (16) https://bugs.python.org/issue?@action=redirect&bpo=7609

   (17) https://bugs.python.org/issue?@action=redirect&bpo=2422

   (18) https://bugs.python.org/issue?@action=redirect&bpo=6491

   (19) https://bugs.python.org/issue?@action=redirect&bpo=2937

   (20) https://bugs.python.org/issue?@action=redirect&bpo=1222585

   (21) https://bugs.python.org/issue?@action=redirect&bpo=3585

   (22) https://bugs.python.org/issue?@action=redirect&bpo=6094


File: python.info,  Node: Capsules,  Next: Alterações específicas da porta Windows,  Up: Mudanças a construções e API C<8>

1.15.12.1 Capsules
..................

Python 3.1 adiciona um novo tipo de dados C, *note PyCapsule: 12b4, para
fornecer uma API C para um módulo de extensão.  Uma cápsula é
essencialmente o detentor de um ponteiro C ‘void *’ e é disponibilizada
como um atributo de módulo; por exemplo, a API do módulo *note socket:
cc. é exposta como ‘socket.CAPI’, e *note unicodedata: 105. expõe
‘ucnhash_CAPI’.  Outras extensões podem importar o módulo, acessar seu
dicionário para obter o objeto cápsula e então obter o ponteiro ‘void
*’, que normalmente apontará para uma matriz de ponteiros para as
diversas funções da API do módulo.

Já existe um tipo de dados usado para isso, ‘PyCObject’, mas ele não
fornece segurança de tipo.  Código maligno escrito em Python puro pode
causar uma falha de segmentação pegando um ‘PyCObject’ do módulo A e de
alguma forma substituindo-o por ‘PyCObject’ no módulo B. As cápsulas
sabem seu próprio nome , e para obter o ponteiro é necessário fornecer o
nome:

     void *vtable;

     if (!PyCapsule_IsValid(capsule, "mymodule.CAPI") {
             PyErr_SetString(PyExc_ValueError, "argument type invalid");
             return NULL;
     }

     vtable = PyCapsule_GetPointer(capsule, "mymodule.CAPI");

Você tem certeza de que ‘vtable’ aponta para o que você espera.  Se uma
cápsula diferente fosse passada, *note PyCapsule_IsValid(): 13a3.
detectaria o nome incompatível e retornaria falso.  Consulte *note
Fornecendo uma API C para um módulo de extensão: 13a4. para mais
informações sobre como usar esses objetos.

Python 2.7 agora usa cápsulas internamente para fornecer várias APIs de
módulo de extensão, mas o ‘PyCObject_AsVoidPtr()’ foi modificado para
lidar com cápsulas, preservando a compatibilidade em tempo de compilação
com a interface ‘PyCObject’.  O uso de ‘PyCObject_AsVoidPtr()’
sinalizará uma exceção *note PendingDeprecationWarning: 8ce, que é
silencioso por padrão.

Implementado em Python 3.1 e portado para 2.7 por Larry Hastings;
discutido em bpo-5630(1).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5630


File: python.info,  Node: Alterações específicas da porta Windows,  Next: Alterações específicas da porta Mac OS X,  Prev: Capsules,  Up: Mudanças a construções e API C<8>

1.15.12.2 Alterações específicas da porta: Windows
..................................................

   * O módulo *note msvcrt: 93. agora contém algumas constantes do
     arquivo de cabeçalho ‘crtassem.h’: *note CRT_ASSEMBLY_VERSION:
     13a6, *note VC_ASSEMBLY_PUBLICKEYTOKEN: 13a7. e *note
     LIBRARIES_ASSEMBLY_NAME_PREFIX: 13a8.  (Contribuição de David
     Cournapeau; bpo-4365(1).)

   * O módulo *note _winreg: 116. para acessar o registro agora
     implementa as funções *note CreateKeyEx(): 13a9. e *note
     DeleteKeyEx(): 13aa, versões estendidas de funções suportadas
     anteriormente que recebem vários argumentos extras.  Os *note
     DisableReflectionKey(): 13ab, *note EnableReflectionKey(): 13ac. e
     *note QueryReflectionKey(): 13ad. também foram testados e
     documentados.  (Implementação de Brian Curtin: bpo-7347(2).)

   * A nova API ‘_beginthreadex()’ é usada para iniciar threads, e as
     funções nativas de armazenamento local de thread agora são usadas.
     (Contribuição de Kristján Valur Jónsson; bpo-3582(3).)

   * A função *note os.kill(): 13ae. agora funciona no Windows.  O valor
     do sinal pode ser as constantes *note CTRL_C_EVENT: 13af, *note
     CTRL_BREAK_EVENT: 13b0. ou qualquer número inteiro.  As duas
     primeiras constantes enviarão eventos de pressionamento de tecla
     ‘Control’-‘C’ e ‘Control’-‘Break’ para subprocessos; qualquer outro
     valor usará a API ‘TerminateProcess()’.  (Contribuição de Miki
     Tebeka; bpo-1220212(4).)

   * A função *note os.listdir(): 1139. agora falha corretamente para um
     caminho vazio.  (Correção de Hirokazu Yamamoto; bpo-5913(5).)

   * O módulo *note mimetypes: 8f. agora irá ler o banco de dados MIME
     do registro do Windows ao inicializar.  (Patch de Gabriel
     Genellina; bpo-4969(6).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=4365

   (2) https://bugs.python.org/issue?@action=redirect&bpo=7347

   (3) https://bugs.python.org/issue?@action=redirect&bpo=3582

   (4) https://bugs.python.org/issue?@action=redirect&bpo=1220212

   (5) https://bugs.python.org/issue?@action=redirect&bpo=5913

   (6) https://bugs.python.org/issue?@action=redirect&bpo=4969


File: python.info,  Node: Alterações específicas da porta Mac OS X,  Next: Alterações específicas da porta FreeBSD,  Prev: Alterações específicas da porta Windows,  Up: Mudanças a construções e API C<8>

1.15.12.3 Alterações específicas da porta: Mac OS X
...................................................

   * O caminho ‘/Library/Python/2.7/site-packages’ agora é anexado a
     ‘sys.path’, para compartilhar pacotes adicionados entre a
     instalação do sistema e uma cópia da mesma versão instalada pelo
     usuário.  (Alteração de Ronald Oussoren; bpo-4865(1).)

     Alterado na versão 2.7.13: A partir da versão 2.7.13, esta
     alteração foi removida.  ‘/Library/Python/2.7/site-packages’, o
     diretório site-packages usado pelo sistema Python 2.7 fornecido
     pela Apple não é mais anexado a ‘sys.path’ para Pythons instalados
     pelo usuário, como do Instaladores do python.org.  A partir do
     macOS 10.12, a Apple mudou a forma como o diretório site-packages
     do sistema é configurado, o que pode causar falha na instalação de
     componentes pip, como setuptools.  Os pacotes instalados para o
     sistema Python não serão mais compartilhados com Pythons instalados
     pelo usuário.  ( bpo-28440(2))

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=4865

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28440


File: python.info,  Node: Alterações específicas da porta FreeBSD,  Prev: Alterações específicas da porta Mac OS X,  Up: Mudanças a construções e API C<8>

1.15.12.4 Alterações específicas da porta: FreeBSD
..................................................

   * Constante ‘SO_SETFIB’ do FreeBSD 7.1, usada com os métodos *note
     getsockopt(): cf5. e *note setsockopt(): cf6. do *note socket():
     dc9. para selecionar uma tabela de roteamento alternativa, agora
     está disponível no módulo *note socket: cc.  (Adição de Kyle
     VanderBeek; bpo-8235(1).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=8235


File: python.info,  Node: Outras alterações e correções,  Next: Portando para Python 2 7,  Prev: Mudanças a construções e API C<8>,  Up: O que há de novo no Python 2 7

1.15.13 Outras alterações e correções
-------------------------------------

   * Dois scripts de benchmark, ‘iobench’ e ‘ccbench’, foram adicionados
     ao diretório ‘Tools’.  ‘iobench’ mede a velocidade dos objetos
     embutidos de E/S de arquivo retornados por *note open(): 51c.
     durante a execução de várias operações, e ‘ccbench’ é um benchmark
     de simultaneidade que tenta medir o rendimento da computação,
     latência de comutação de threads e largura de banda de
     processamento de E/S ao executar diversas tarefas usando um número
     variável de threads.

   * O script ‘Tools/i18n/msgfmt.py’ agora entende formas plurais em
     arquivos ‘.po’.  (Correção de Martin von Löwis; bpo-5464(1).)

   * Ao importar um módulo de um arquivo ‘.pyc’ ou ‘.pyo’ com uma
     contraparte ‘.py’ existente, os atributos *note co_filename: 13b4.
     dos objetos código resultantes são substituídos quando o nome do
     arquivo original fica obsoleto.  Isso pode acontecer se o arquivo
     tiver sido renomeado, movido ou acessado por caminhos diferentes.
     (Patch de Ziga Seilnacht e Jean-Paul Calderone; bpo-1180193(2).)

   * O script ‘regrtest.py’ agora usa uma opção ‘--randseed=’ que recebe
     um número inteiro que será usado como semente aleatória para a
     opção ‘-r’ que executa testes em ordem aleatória.  A opção ‘-r’
     também informa a semente que foi usada (Adição de Collin Winter.)

   * Outra opção ‘regrtest.py’ é ‘-j’, que recebe um número inteiro
     especificando quantos testes são executados em paralelo.  Isto
     permite reduzir o tempo total de execução em máquinas com vários
     núcleos.  Esta opção é compatível com várias outras opções,
     incluindo a opção ‘-R’ que é conhecida por produzir longos tempos
     de execução.  (Adicionado por Antoine Pitrou, bpo-6152(3).)  Isso
     também pode ser usado com uma nova opção ‘-F’ que executa testes
     selecionados em um loop até que eles falhem.  (Adição de Antoine
     Pitrou; bpo-7312(4).)

   * Quando executado como um script, o módulo ‘py_compile.py’ agora
     aceita ‘'-'’ como argumento, que lerá a entrada padrão para a lista
     de nomes de arquivos a serem compilados.  (Contribuição de Piotr
     Ożarowski; bpo-8233(5).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5464

   (2) https://bugs.python.org/issue?@action=redirect&bpo=1180193

   (3) https://bugs.python.org/issue?@action=redirect&bpo=6152

   (4) https://bugs.python.org/issue?@action=redirect&bpo=7312

   (5) https://bugs.python.org/issue?@action=redirect&bpo=8233


File: python.info,  Node: Portando para Python 2 7,  Next: Novos recursos adicionados às versões de manutenção do Python 2 7,  Prev: Outras alterações e correções,  Up: O que há de novo no Python 2 7

1.15.14 Portando para Python 2.7
--------------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções que podem exigir alterações no seu código.

   * A função *note range(): 94a. processa seus argumentos de forma mais
     consistente; agora ele chamará *note __int__(): 71c. em argumentos
     que não são ponto flutuantes nem inteiros que são fornecidos a ele.
     (Correção de Alexander Belopolsky; bpo-1533(1).)

   * O método string *note format(): 61f. alterou a precisão padrão
     usada para números de ponto flutuante e complexos de 6 casas
     decimais para 12, o que corresponde à precisão usada por *note
     str(): 44c.  (Alteração de Eric Smith; bpo-5920(2).)

   * Por causa de uma otimização para a instrução *note with: 5d2, os
     métodos especiais *note __enter__(): 5c8. e *note __exit__(): 1344.
     devem pertencer ao tipo do objeto e não podem ser diretamente
     anexados ao instância do objeto.  Isto afeta classes de novo estilo
     (derivadas de *note object: a96.) e tipos de extensão C.
     (bpo-6101(3).)

   * Devido a um bug no Python 2.6, o parâmetro 'exc_value' para os
     métodos *note __exit__(): 1344. era frequentemente a representação
     de string da exceção, não uma instância.  Isso foi corrigido na
     versão 2.7, então 'exc_value' será uma instância conforme esperado.
     (Correção de Florent Xicluna; bpo-7853(4).)

   * Quando um conjunto restrito de atributos foi definido usando
     ‘__slots__’, excluir um atributo não definido não levantaria *note
     AttributeError: 34b. como seria de esperar.  Correção de Benjamin
     Peterson; bpo-7604(5).)

Na biblioteca padrão:

   * Operações com instâncias *note datetime: 1cc. que resultaram em um
     ano fora do intervalo suportado nem sempre levantam *note
     OverflowError: 885.  Esses erros agora são verificados com mais
     cuidado e irão levantar a exceção.  (Relato de Mark Leander, patch
     de Anand B. Pillai e Alexander Belopolsky; bpo-7150(6).)

   * Ao usar instâncias *note Decimal: 29d. com o método *note format():
     61f. de uma string, o alinhamento padrão era anteriormente o
     alinhamento à esquerda.  Isso foi alterado para alinhamento à
     direita, o que pode alterar a saída dos seus programas.  (Alteração
     de Mark Dickinson; bpo-6857(7).)

     Comparações envolvendo um valor NaN de sinalização (ou ‘sNAN’)
     agora sinalizam *note InvalidOperation: 10e7. em vez de retornar
     silenciosamente um valor verdadeiro ou falso dependendo do operador
     de comparação.  Valores silenciosos de NaN (ou ‘NaN’) agora são
     hasheáveis.  (Corrigido por Mark Dickinson; bpo-7279(8).)

   * A biblioteca *note xml.etree.ElementTree: 125. não escapa mais os
     caracteres de e-comercial e colchetes angulares ao gerar uma
     instrução de processamento XML (que se parece com ‘<?xml-stylesheet
     href="#style1"?>’) ou comentário ( que se parece com ‘<!-- comment
     -->’).  (Patch de Neil Muller; bpo-2746(9).)

   * O método ‘readline()’ dos objetos *note StringIO: f59. agora não
     faz nada quando um comprimento negativo é solicitado, como fazem
     outros objetos arquivo ou similares.  (bpo-7348(10)).

   * O módulo *note syslog: dc. agora usará o valor de ‘sys.argv[0]’
     como identificador em vez do valor padrão anterior de ‘'python'’.
     (Alteração de Sean Reifschneider; bpo-8451(11).)

   * O tratamento de erros padrão do módulo *note tarfile: de. foi
     alterado, para não mais suprimir erros fatais.  O nível de erro
     padrão era anteriormente 0, o que significava que os erros
     resultariam apenas na gravação de uma mensagem no log de depuração,
     mas como o log de depuração não está ativado por padrão, esses
     erros passam despercebidos.  O nível de erro padrão agora é 1, o
     que levanta uma exceção se houver um erro.  (Alteração de Lars
     Gustäbel; bpo-7357(12).)

   * A função *note urlsplit(): d61. do módulo *note urlparse: 10a.
     agora lida com esquemas de URL desconhecidos de uma forma
     compatível com RFC 3986(13): se a URL estiver no formato
     ‘"<alguma_coisa>://..."’, o texto antes de ‘://’ é tratado como o
     esquema, mesmo que seja um esquema inventado que o módulo não
     conhece.  Essa alteração pode quebrar o código que contornava o
     comportamento antigo.  Por exemplo, Python 2.6.4 ou 2.5 retornará o
     seguinte:

          >>> import urlparse
          >>> urlparse.urlsplit('invented://host/filename?query')
          ('invented', '', '//host/filename?query', '', '')

     Python 2.7 (e Python 2.6.5) vai retornar:

          >>> import urlparse
          >>> urlparse.urlsplit('invented://host/filename?query')
          ('invented', 'host', '/filename?query', '', '')

     (Na verdade, o Python 2.7 produz uma saída ligeiramente diferente,
     pois retorna uma tupla nomeada em vez de uma tupla padrão.)

Para extensões C:

   * Extensões C que usam códigos de formato inteiro com a família de
     funções ‘PyArg_Parse*’ agora levantarão uma exceção *note
     TypeError: 2c3. em vez de disparar uma *note DeprecationWarning:
     1a5. (bpo-5080(14)).

   * Use a nova função *note PyOS_string_to_double(): 12d7. em vez das
     antigas funções ‘PyOS_ascii_strtod()’ e ‘PyOS_ascii_atof()’, que
     agora estão descontinuadas.

Para aplicações que incorporam Python:

   * A função ‘PySys_SetArgvEx()’ foi adicionada, permitindo que
     aplicativos fechem uma falha de segurança quando a função
     ‘PySys_SetArgv()’ existente for usada.  Verifique se você está
     chamando ‘PySys_SetArgv()’ e considere cuidadosamente se a
     aplicação deve usar ‘PySys_SetArgvEx()’ com 'updatepath' definido
     como falso.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1533

   (2) https://bugs.python.org/issue?@action=redirect&bpo=5920

   (3) https://bugs.python.org/issue?@action=redirect&bpo=6101

   (4) https://bugs.python.org/issue?@action=redirect&bpo=7853

   (5) https://bugs.python.org/issue?@action=redirect&bpo=7604

   (6) https://bugs.python.org/issue?@action=redirect&bpo=7150

   (7) https://bugs.python.org/issue?@action=redirect&bpo=6857

   (8) https://bugs.python.org/issue?@action=redirect&bpo=7279

   (9) https://bugs.python.org/issue?@action=redirect&bpo=2746

   (10) https://bugs.python.org/issue?@action=redirect&bpo=7348

   (11) https://bugs.python.org/issue?@action=redirect&bpo=8451

   (12) https://bugs.python.org/issue?@action=redirect&bpo=7357

   (13) https://datatracker.ietf.org/doc/html/rfc3986.html

   (14) https://bugs.python.org/issue?@action=redirect&bpo=5080


File: python.info,  Node: Novos recursos adicionados às versões de manutenção do Python 2 7,  Next: Reconhecimentos,  Prev: Portando para Python 2 7,  Up: O que há de novo no Python 2 7

1.15.15 Novos recursos adicionados às versões de manutenção do Python 2.7
-------------------------------------------------------------------------

Novos recursos podem ser adicionados às versões de manutenção do Python
2.7 quando a situação realmente exigir.  Quaisquer adições devem passar
pelo processo de proposta de melhoria do Python, ou em inglês Python
Enhancement Proposal – PEP, e apresentar um argumento convincente sobre
por que não podem ser abordadas adequadamente adicionando o novo recurso
apenas ao Python 3 ou publicando-o no Python Package Index.

Além das propostas específicas listadas abaixo, há uma isenção geral que
permite que novos avisos ‘-3’ sejam adicionados em qualquer versão de
manutenção do Python 2.7.

* Menu:

* Duas novas variáveis de ambiente para modo de depuração::
* PEP 434; Exceção de aprimoramento do IDLE para todos os branches: PEP 434 Exceção de aprimoramento do IDLE para todos os branches.
* PEP 466; Aprimoramentos de segurança de rede do Python 2.7: PEP 466 Aprimoramentos de segurança de rede do Python 2 7.
* PEP 477; Backport do ensurepip (PEP 453) para o Python 2.7: PEP 477 Backport do ensurepip PEP 453 para o Python 2 7.
* PEP 476; Habilitando verificação de certificado por padrão para clientes http stdlib: PEP 476 Habilitando verificação de certificado por padrão para clientes http stdlib<2>.
* PEP 493; Ferramentas de migração de verificação HTTPS para Python 2.7: PEP 493 Ferramentas de migração de verificação HTTPS para Python 2 7.
* Novo alvo de construção make regen-all: Novo alvo de construção make regen-all<3>.
* Remoção do alvo de construção make touch: Remoção do alvo de construção make touch<3>.


File: python.info,  Node: Duas novas variáveis de ambiente para modo de depuração,  Next: PEP 434 Exceção de aprimoramento do IDLE para todos os branches,  Up: Novos recursos adicionados às versões de manutenção do Python 2 7

1.15.15.1 Duas novas variáveis de ambiente para modo de depuração
.................................................................

No modo de depuração, a estatística ‘[xxx refs]’ não é escrita por
padrão, a variável de ambiente ‘PYTHONSHOWREFCOUNT’ agora também deve
ser definida.  (Contribuição de Victor Stinner; bpo-31733(1).)

Quando Python é compilado com ‘COUNT_ALLOC’ definido, as contagens de
alocação não são mais despejadas por padrão: a variável de ambiente
‘PYTHONSHOWALLOCCOUNT’ agora também deve ser definida.  Além disso, as
contagens de alocação agora são despejadas no stderr, em vez do stdout.
(Contribuição de Victor Stinner; bpo-31692(2).)

Adicionado na versão 2.7.15.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31733

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31692


File: python.info,  Node: PEP 434 Exceção de aprimoramento do IDLE para todos os branches,  Next: PEP 466 Aprimoramentos de segurança de rede do Python 2 7,  Prev: Duas novas variáveis de ambiente para modo de depuração,  Up: Novos recursos adicionados às versões de manutenção do Python 2 7

1.15.15.2 PEP 434: Exceção de aprimoramento do IDLE para todos os branches
..........................................................................

PEP 434(1) descreve uma isenção geral para alterações feitas no ambiente
de desenvolvimento IDLE enviado junto com o Python.  Esta isenção
permite que os desenvolvedores de IDLE forneçam uma experiência de
usuário mais consistente em todas as versões suportadas do Python 2 e 3.

Para obter detalhes sobre quaisquer alterações do IDLE, consulte o
arquivo NEWS da versão específica.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0434/


File: python.info,  Node: PEP 466 Aprimoramentos de segurança de rede do Python 2 7,  Next: PEP 477 Backport do ensurepip PEP 453 para o Python 2 7,  Prev: PEP 434 Exceção de aprimoramento do IDLE para todos os branches,  Up: Novos recursos adicionados às versões de manutenção do Python 2 7

1.15.15.3 PEP 466: Aprimoramentos de segurança de rede do Python 2.7
....................................................................

PEP 466(1) descreve uma série de propostas de melhoria de segurança de
rede que foram aprovadas para inclusão nas versões de manutenção do
Python 2.7, com a primeira dessas mudanças aparecendo na versão Python
2.7.7.

Recursos relacionados a PEP 466(2) adicionados no Python 2.7.7:

   * *note hmac.compare_digest(): 1108. foi portado do Python 3 para
     disponibilizar uma operação de comparação resistente a ataques de
     tempo para aplicações em Python 2.  (Contribuição de Alex Gaynor;
     bpo-21306(3).)

   * OpenSSL 1.0.1g foi atualizado nos instaladores oficiais do Windows
     publicados em python.org.  (Contribuição de Zachary Ware;
     bpo-21462(4).)

Recursos relacionados a PEP 466(5) adicionados no Python 2.7.8:

   * *note hashlib.pbkdf2_hmac(): 50f. foi portado do Python 3 para
     tornar um algoritmo de hash adequado para armazenamento seguro de
     senhas amplamente disponível para aplicações Python 2.
     (Contribuição de Alex Gaynor; bpo-21304(6).)

   * OpenSSL 1.0.1h foi atualizado para os instaladores oficiais do
     Windows publicados em python.org.  (Contribuição de Zachary Ware em
     bpo-21671(7) para CVE 2014-0224(8).)

Recursos relacionados a PEP 466(9) adicionados no Python 2.7.9:

   * A maior parte do módulo *note ssl: d0. do Python 3.4 foi portada.
     Isso significa que *note ssl: d0. agora provê suporte a indicar de
     nome de servidor, configurações TLS1.x, acesso ao armazenamento de
     certificados da plataforma, a classe *note SSLContext: 294. e
     outros recursos.  (Contribuição de Alex Gaynor e David Reid;
     bpo-21308(10).)

     Consulte as notas “Versão adicionada: 2.7.9” na documentação do
     módulo para obter detalhes específicos.

   * *note os.urandom(): 523. foi alterado para armazenar em cache um
     descritor de arquivo para ‘/dev/urandom’ em vez de reabrir
     ‘/dev/urandom’ em cada chamada.  (Contribuição de Alex Gaynor;
     bpo-21305(11).)

   * *note hashlib.algorithms_guaranteed: 13ba. e *note
     hashlib.algorithms_available: 13bb. foram portados do Python 3 para
     tornar mais fácil para os aplicações Python 2 selecionarem o
     algoritmo de hash mais forte disponível.  (Contribuição de Alex
     Gaynor em bpo-21307(12))

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0466/

   (2) https://peps.python.org/pep-0466/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=21306

   (4) https://bugs.python.org/issue?@action=redirect&bpo=21462

   (5) https://peps.python.org/pep-0466/

   (6) https://bugs.python.org/issue?@action=redirect&bpo=21304

   (7) https://bugs.python.org/issue?@action=redirect&bpo=21671

   (8) https://www.cve.org/CVERecord?id=CVE-2014-0224

   (9) https://peps.python.org/pep-0466/

   (10) https://bugs.python.org/issue?@action=redirect&bpo=21308

   (11) https://bugs.python.org/issue?@action=redirect&bpo=21305

   (12) https://bugs.python.org/issue?@action=redirect&bpo=21307


File: python.info,  Node: PEP 477 Backport do ensurepip PEP 453 para o Python 2 7,  Next: PEP 476 Habilitando verificação de certificado por padrão para clientes http stdlib<2>,  Prev: PEP 466 Aprimoramentos de segurança de rede do Python 2 7,  Up: Novos recursos adicionados às versões de manutenção do Python 2 7

1.15.15.4 PEP 477: Backport do ensurepip (PEP 453) para o Python 2.7
....................................................................

A PEP 477(1) aprova a inclusão do módulo ensurepip do PEP 453(2) e da
documentação aprimorada que foi habilitada por ele nas versões de
manutenção do Python 2.7, aparecendo primeiro na versão Python 2.7.9.

* Menu:

* Bootstrapping pip By Default: Bootstrapping pip By Default<2>.
* Mudanças na documentação: Mudanças na documentação<2>.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0477/

   (2) https://peps.python.org/pep-0453/


File: python.info,  Node: Bootstrapping pip By Default<2>,  Next: Mudanças na documentação<2>,  Up: PEP 477 Backport do ensurepip PEP 453 para o Python 2 7

1.15.15.5 Bootstrapping pip By Default
......................................

O novo módulo *note ensurepip: 55. (definido em PEP 453(1)) fornece um
mecanismo padrão de plataforma cruzada para inicializar o instalador pip
em instalações Python.  A versão do ‘pip’ incluída no Python 2.7.9 é
‘pip’ 1.5.6, e futuras versões de manutenção 2.7.x atualizarão a versão
empacotada para a versão mais recente do ‘pip’ que está disponível em o
momento da criação do candidato a lançamento.

Por padrão, os comandos ‘pip’, ‘pipX’ e ‘pipX.Y’ serão instalados em
todas as plataformas (onde X.Y representa a versão da instalação do
Python), junto com o pacote Python via ‘pip’ e suas dependências.

Para *note construções de fontes do CPython em sistemas POSIX: f25, os
comandos ‘make install’ e ‘make altinstall’ não inicializam ‘pip’ por
padrão.  Este comportamento pode ser controlado através de opções de
configuração e substituído através de opções do Makefile.

On Windows and Mac OS X, the CPython installers now default to
installing ‘pip’ along with CPython itself (users may opt out of
installing it during the installation process).  Window users will need
to opt in to the automatic ‘PATH’ modifications to have ‘pip’ available
from the command line by default, otherwise it can still be accessed
through the Python launcher for Windows as ‘py -m pip’.

Como discutido na PEP(2), os empacotadores de plataforma podem optar por
não instalar estes comandos por padrão, desde que, quando invocados,
forneçam instruções claras e simples sobre como instalá-los naquela
plataforma (geralmente usando o gerenciador de pacotes do sistema).  .

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0453/

   (2) 
https://peps.python.org/pep-0477/#disabling-ensurepip-by-downstream-distributors


File: python.info,  Node: Mudanças na documentação<2>,  Prev: Bootstrapping pip By Default<2>,  Up: PEP 477 Backport do ensurepip PEP 453 para o Python 2 7

1.15.15.6 Mudanças na documentação
..................................

As part of this change, the *note Instalando módulos Python: f27. and
distributing-index sections of the documentation have been completely
redesigned as short getting started and FAQ documents.  Most packaging
documentation has now been moved out to the Python Packaging Authority
maintained Python Packaging User Guide(1) and the documentation of the
individual projects.

No entanto, como esta migração ainda está incompleta, as versões legadas
desses guias permanecem disponíveis como *note Construindo extensões C e
C ++ com setuptools: f28. e *note Construindo extensões C e C ++ com
setuptools: f29.

Ver também
..........

PEP 453(2) – Explicit bootstrapping of pip in Python installations

     PEP written by Donald Stufft and Nick Coghlan, implemented by
     Donald Stufft, Nick Coghlan, Martin von Löwis and Ned Deily.

   ---------- Footnotes ----------

   (1) https://packaging.python.org

   (2) https://peps.python.org/pep-0453/


File: python.info,  Node: PEP 476 Habilitando verificação de certificado por padrão para clientes http stdlib<2>,  Next: PEP 493 Ferramentas de migração de verificação HTTPS para Python 2 7,  Prev: PEP 477 Backport do ensurepip PEP 453 para o Python 2 7,  Up: Novos recursos adicionados às versões de manutenção do Python 2 7

1.15.15.7 PEP 476: Habilitando verificação de certificado por padrão para clientes http stdlib
..............................................................................................

PEP 476(1) atualizou *note httplib: 6e. e módulos que o utilizam, como
*note urllib2: 10b. e *note xmlrpclib: 12e, para agora verificar se o
servidor apresenta um certificado que é assinado por uma Autoridade
Certificadora no armazenamento confiável da plataforma e cujo nome de
host corresponde ao nome de host solicitado por padrão, melhorando
significativamente a segurança para muitas aplicações.  Essa alteração
foi feita na versão 2.7.9 do Python.

Para aplicações que exigem o antigo comportamento anterior, elas podem
passar um contexto alternativo:

     import urllib2
     import ssl

     # Isso desabilita toda verificação
     context = ssl._create_unverified_context()

     # Isso permite usar um certificado específico para o host,
     # o que não precisa ser no armazenamento de confiança
     context = ssl.create_default_context(cafile="/path/to/file.crt")

     urllib2.urlopen("https://invalid-cert", context=context)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0476/


File: python.info,  Node: PEP 493 Ferramentas de migração de verificação HTTPS para Python 2 7,  Next: Novo alvo de construção make regen-all<3>,  Prev: PEP 476 Habilitando verificação de certificado por padrão para clientes http stdlib<2>,  Up: Novos recursos adicionados às versões de manutenção do Python 2 7

1.15.15.8 PEP 493: Ferramentas de migração de verificação HTTPS para Python 2.7
...............................................................................

PEP 493(1) fornece ferramentas de migração adicionais para provê um
processo de atualização de infraestrutura mais incremental para
ambientes contendo aplicações e serviços que dependem do processamento
historicamente permissivo de certificados de servidor ao estabelecer
conexões HTTPS de clientes.  Essas adições foram feitas na versão 2.7.12
do Python.

Estas ferramentas destinam-se a ser utilizadas em casos em que as
aplicações e serviços afetados não podem ser modificados para passar
explicitamente um contexto SSL mais permissivo ao estabelecer a ligação.

Para aplicações e serviços que não podem ser modificados, a nova
variável de ambiente ‘PYTHONHTTPSVERIFY’ pode ser definida como ‘0’ para
reverter todo um processo Python de volta ao comportamento permissivo
padrão do Python 2.7.8 e anteriores.

Para casos em que o código de estabelecimento da conexão não pode ser
modificado, mas a aplicação geral pode, a nova função
‘ssl._https_verify_certificates()’ pode ser usada para ajustar o
comportamento padrão em tempo de execução.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0493/


File: python.info,  Node: Novo alvo de construção make regen-all<3>,  Next: Remoção do alvo de construção make touch<3>,  Prev: PEP 493 Ferramentas de migração de verificação HTTPS para Python 2 7,  Up: Novos recursos adicionados às versões de manutenção do Python 2 7

1.15.15.9 Novo alvo de construção ‘make regen-all’
..................................................

Para simplificar a compilação cruzada e garantir que o CPython possa ser
compilado de forma confiável sem exigir que uma versão existente do
Python já esteja disponível, o sistema de construção baseado em
autotools não tenta mais recompilar implicitamente os arquivos gerados
com base nos tempos de modificação dos arquivos.

Em vez disso, um novo comando ‘make regen-all’ foi adicionado para
forçar a regeneração desses arquivos quando desejado (por exemplo, após
uma versão inicial do Python já ter sido construída com base nas versões
pré-geradas).

Alvos de regeneração mais seletivos também são definidos – veja
Makefile.pre.in(1) para detalhes.

(Contribuição de Victor Stinner em bpo-23404(2).)

Adicionado na versão 2.7.14.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Makefile.pre.in

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23404


File: python.info,  Node: Remoção do alvo de construção make touch<3>,  Prev: Novo alvo de construção make regen-all<3>,  Up: Novos recursos adicionados às versões de manutenção do Python 2 7

1.15.15.10 Remoção do alvo de construção ‘make touch’
.....................................................

O alvo de construção ‘make touch’ usado anteriormente para solicitar
regeneração implícita de arquivos gerados atualizando seus tempos de
modificação foi removido.

Ele foi substituído pelo novo alvo ‘make regen-all’.

(Contribuição de Victor Stinner em bpo-23404(1).)

Alterado na versão 2.7.14.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23404


File: python.info,  Node: Reconhecimentos,  Prev: Novos recursos adicionados às versões de manutenção do Python 2 7,  Up: O que há de novo no Python 2 7

1.15.16 Reconhecimentos
-----------------------

O autor gostaria de agradecer às seguintes pessoas por oferecerem
sugestões, correções e assistência com vários rascunhos deste artigo:
Nick Coghlan, Philip Jenvey, Ryan Lovett, R. David Murray, Hugh
Secker-Walker.


File: python.info,  Node: O que há de novo no Python 2 6,  Next: What’s New in Python 2 5,  Prev: O que há de novo no Python 2 7,  Up: O que há de novo no Python

1.16 O que há de novo no Python 2.6
===================================


Autor: A.M. Kuchling (amk at amk.ca)

This article explains the new features in Python 2.6, released on
October 1, 2008.  The release schedule is described in PEP 361(1).

The major theme of Python 2.6 is preparing the migration path to Python
3.0, a major redesign of the language.  Whenever possible, Python 2.6
incorporates new features and syntax from 3.0 while remaining compatible
with existing code by not removing older features or syntax.  When it’s
not possible to do that, Python 2.6 tries to do what it can, adding
compatibility functions in a ‘future_builtins’ module and a ‘-3’ switch
to warn about usages that will become unsupported in 3.0.

Some significant new packages have been added to the standard library,
such as the *note multiprocessing: 94. and *note json: 82. modules, but
there aren’t many new features that aren’t related to Python 3.0 in some
way.

Python 2.6 also sees a number of improvements and bugfixes throughout
the source.  A search through the change logs finds there were 259
patches applied and 612 bugs fixed between Python 2.5 and 2.6.  Both
figures are likely to be underestimates.

This article doesn’t attempt to provide a complete specification of the
new features, but instead provides a convenient overview.  For full
details, you should refer to the documentation for Python 2.6.  If you
want to understand the rationale for the design and implementation,
refer to the PEP for a particular new feature.  Whenever possible,
“What’s New in Python” links to the bug/patch item for each change.

* Menu:

* Python 3.0: Python 3 0.
* Changes to the Development Process::
* PEP 343; The ‘with’ statement: PEP 343 The ‘with’ statement.
* PEP 366; Explicit Relative Imports From a Main Module: PEP 366 Explicit Relative Imports From a Main Module.
* PEP 370; Per-user site-packages Directory: PEP 370 Per-user site-packages Directory.
* PEP 371; The multiprocessing Package: PEP 371 The multiprocessing Package.
* PEP 3101; Advanced String Formatting: PEP 3101 Advanced String Formatting.
* PEP 3105; print As a Function: PEP 3105 print As a Function.
* PEP 3110; Exception-Handling Changes: PEP 3110 Exception-Handling Changes.
* PEP 3112; Byte Literals: PEP 3112 Byte Literals.
* PEP 3116; New I/O Library: PEP 3116 New I/O Library.
* PEP 3118; Revised Buffer Protocol: PEP 3118 Revised Buffer Protocol.
* PEP 3119; Abstract Base Classes: PEP 3119 Abstract Base Classes.
* PEP 3127; Integer Literal Support and Syntax: PEP 3127 Integer Literal Support and Syntax.
* PEP 3129; Class Decorators: PEP 3129 Class Decorators.
* PEP 3141; A Type Hierarchy for Numbers: PEP 3141 A Type Hierarchy for Numbers.
* Outras mudanças na linguagem: Outras mudanças na linguagem<15>.
* Módulos Novos ou Aprimorados: Módulos Novos ou Aprimorados<2>.
* Deprecations and Removals::
* Mudanças a construções e API C: Mudanças a construções e API C<9>.
* Porting to Python 2.6: Porting to Python 2 6.
* Reconhecimentos: Reconhecimentos<2>.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0361/


File: python.info,  Node: Python 3 0,  Next: Changes to the Development Process,  Up: O que há de novo no Python 2 6

1.16.1 Python 3.0
-----------------

The development cycle for Python versions 2.6 and 3.0 was synchronized,
with the alpha and beta releases for both versions being made on the
same days.  The development of 3.0 has influenced many features in 2.6.

Python 3.0 is a far-ranging redesign of Python that breaks compatibility
with the 2.x series.  This means that existing Python code will need
some conversion in order to run on Python 3.0.  However, not all the
changes in 3.0 necessarily break compatibility.  In cases where new
features won’t cause existing code to break, they’ve been backported to
2.6 and are described in this document in the appropriate place.  Some
of the 3.0-derived features are:

   * A ‘__complex__()’ method for converting objects to a complex
     number.

   * Alternate syntax for catching exceptions: ‘except TypeError as
     exc’.

   * The addition of *note functools.reduce(): 131f. as a synonym for
     the built-in ‘reduce()’ function.

Python 3.0 adds several new built-in functions and changes the semantics
of some existing builtins.  Functions that are new in 3.0 such as *note
bin(): 12eb. have simply been added to Python 2.6, but existing builtins
haven’t been changed; instead, the ‘future_builtins’ module has versions
with the new 3.0 semantics.  Code written to be compatible with 3.0 can
do ‘from future_builtins import hex, map’ as necessary.

A new command-line switch, ‘-3’, enables warnings about features that
will be removed in Python 3.0.  You can run code with this switch to see
how much work will be necessary to port code to 3.0.  The value of this
switch is available to Python code as the boolean variable
‘sys.py3kwarning’, and to C extension code as ‘Py_Py3kWarningFlag’.

Ver também
..........

The 3'xxx' series of PEPs, which contains proposals for Python 3.0.  PEP
3000(1) describes the development process for Python 3.0.  Start with
PEP 3100(2) that describes the general goals for Python 3.0, and then
explore the higher-numbered PEPs that propose specific features.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3000/

   (2) https://peps.python.org/pep-3100/


File: python.info,  Node: Changes to the Development Process,  Next: PEP 343 The ‘with’ statement,  Prev: Python 3 0,  Up: O que há de novo no Python 2 6

1.16.2 Changes to the Development Process
-----------------------------------------

While 2.6 was being developed, the Python development process underwent
two significant changes: we switched from SourceForge’s issue tracker to
a customized Roundup installation, and the documentation was converted
from LaTeX to reStructuredText.

* Menu:

* New Issue Tracker; Roundup: New Issue Tracker Roundup.
* New Documentation Format; reStructuredText Using Sphinx: New Documentation Format reStructuredText Using Sphinx.


File: python.info,  Node: New Issue Tracker Roundup,  Next: New Documentation Format reStructuredText Using Sphinx,  Up: Changes to the Development Process

1.16.2.1 New Issue Tracker: Roundup
...................................

For a long time, the Python developers had been growing increasingly
annoyed by SourceForge’s bug tracker.  SourceForge’s hosted solution
doesn’t permit much customization; for example, it wasn’t possible to
customize the life cycle of issues.

The infrastructure committee of the Python Software Foundation therefore
posted a call for issue trackers, asking volunteers to set up different
products and import some of the bugs and patches from SourceForge.  Four
different trackers were examined: Jira(1), Launchpad(2), Roundup(3), and
Trac(4).  The committee eventually settled on Jira and Roundup as the
two candidates.  Jira is a commercial product that offers no-cost hosted
instances to free-software projects; Roundup is an open-source project
that requires volunteers to administer it and a server to host it.

After posting a call for volunteers, a new Roundup installation was set
up at ‘https://bugs.python.org’.  One installation of Roundup can host
multiple trackers, and this server now also hosts issue trackers for
Jython and for the Python web site.  It will surely find other uses in
the future.  Where possible, this edition of “What’s New in Python”
links to the bug/patch item for each change.

Hosting of the Python bug tracker is kindly provided by Upfront
Systems(5) of Stellenbosch, South Africa.  Martin von Löwis put a lot of
effort into importing existing bugs and patches from SourceForge; his
scripts for this import operation are at
‘https://svn.python.org/view/tracker/importer/’ and may be useful to
other projects wishing to move from SourceForge to Roundup.

Ver também
..........

‘https://bugs.python.org’

     The Python bug tracker.

‘https://bugs.jython.org’:

     The Jython bug tracker.

‘https://roundup.sourceforge.io/’

     Roundup downloads and documentation.

‘https://svn.python.org/view/tracker/importer/’

     Martin von Löwis’s conversion scripts.

   ---------- Footnotes ----------

   (1) https://www.atlassian.com/software/jira/

   (2) https://launchpad.net/

   (3) https://roundup.sourceforge.io/

   (4) https://trac.edgewall.org/

   (5) https://upfrontsoftware.co.za


File: python.info,  Node: New Documentation Format reStructuredText Using Sphinx,  Prev: New Issue Tracker Roundup,  Up: Changes to the Development Process

1.16.2.2 New Documentation Format: reStructuredText Using Sphinx
................................................................

The Python documentation was written using LaTeX since the project
started around 1989.  In the 1980s and early 1990s, most documentation
was printed out for later study, not viewed online.  LaTeX was widely
used because it provided attractive printed output while remaining
straightforward to write once the basic rules of the markup were
learned.

Today LaTeX is still used for writing publications destined for
printing, but the landscape for programming tools has shifted.  We no
longer print out reams of documentation; instead, we browse through it
online and HTML has become the most important format to support.
Unfortunately, converting LaTeX to HTML is fairly complicated and Fred
L.  Drake Jr., the long-time Python documentation editor, spent a lot of
time maintaining the conversion process.  Occasionally people would
suggest converting the documentation into SGML and later XML, but
performing a good conversion is a major task and no one ever committed
the time required to finish the job.

During the 2.6 development cycle, Georg Brandl put a lot of effort into
building a new toolchain for processing the documentation.  The
resulting package is called Sphinx, and is available from
‘https://www.sphinx-doc.org/’.

Sphinx concentrates on HTML output, producing attractively styled and
modern HTML; printed output is still supported through conversion to
LaTeX. The input format is reStructuredText, a markup syntax supporting
custom extensions and directives that is commonly used in the Python
community.

Sphinx is a standalone package that can be used for writing, and almost
two dozen other projects (listed on the Sphinx web site(1)) have adopted
Sphinx as their documentation tool.

Ver também
..........

Documenting Python(2)

     Describes how to write for Python’s documentation.

Sphinx(3)

     Documentation and code for the Sphinx toolchain.

Docutils(4)

     The underlying reStructuredText parser and toolset.

   ---------- Footnotes ----------

   (1) https://www.sphinx-doc.org/en/master/examples.html

   (2) https://devguide.python.org/documenting/

   (3) https://www.sphinx-doc.org/

   (4) https://docutils.sourceforge.io


File: python.info,  Node: PEP 343 The ‘with’ statement,  Next: PEP 366 Explicit Relative Imports From a Main Module,  Prev: Changes to the Development Process,  Up: O que há de novo no Python 2 6

1.16.3 PEP 343: The ‘with’ statement
------------------------------------

The previous version, Python 2.5, added the ‘*note with: 5d2.’ statement
as an optional feature, to be enabled by a ‘from __future__ import
with_statement’ directive.  In 2.6 the statement no longer needs to be
specially enabled; this means that ‘with’ is now always a keyword.  The
rest of this section is a copy of the corresponding section from the
“What’s New in Python 2.5” document; if you’re familiar with the
‘‘with’’ statement from Python 2.5, you can skip this section.

The ‘*note with: 5d2.’ statement clarifies code that previously would
use ‘try...finally’ blocks to ensure that clean-up code is executed.  In
this section, I’ll discuss the statement as it will commonly be used.
In the next section, I’ll examine the implementation details and show
how to write objects for use with this statement.

The ‘*note with: 5d2.’ statement is a control-flow structure whose basic
structure is:

     with expression [as variable]:
         with-block

The expression is evaluated, and it should result in an object that
supports the context management protocol (that is, has *note
__enter__(): 5c8. and *note __exit__(): 1344. methods).

The object’s *note __enter__(): 5c8. is called before 'with-block' is
executed and therefore can run set-up code.  It also may return a value
that is bound to the name 'variable', if given.  (Note carefully that
'variable' is 'not' assigned the result of 'expression'.)

After execution of the 'with-block' is finished, the object’s *note
__exit__(): 1344. method is called, even if the block raised an
exception, and can therefore run clean-up code.

Some standard Python objects now support the context management protocol
and can be used with the ‘*note with: 5d2.’ statement.  File objects are
one example:

     with open('/etc/passwd', 'r') as f:
         for line in f:
             print line
             ... more processing code ...

After this statement has executed, the file object in 'f' will have been
automatically closed, even if the *note for: 2f2. loop raised an
exception part-way through the block.

     Nota: In this case, 'f' is the same object created by *note open():
     51c, because *note __enter__(): 5c8. returns 'self'.

The *note threading: ed. module’s locks and condition variables also
support the ‘*note with: 5d2.’ statement:

     lock = threading.Lock()
     with lock:
         # Critical section of code
         ...

The lock is acquired before the block is executed and always released
once the block is complete.

The *note localcontext(): 13cd. function in the *note decimal: 36.
module makes it easy to save and restore the current decimal context,
which encapsulates the desired precision and rounding characteristics
for computations:

     from decimal import Decimal, Context, localcontext

     # Displays with default precision of 28 digits
     v = Decimal('578')
     print v.sqrt()

     with localcontext(Context(prec=16)):
         # All code in this block uses a precision of 16 digits.
         # The original context is restored on exiting the block.
         print v.sqrt()

* Menu:

* Writing Context Managers::
* The contextlib module::


File: python.info,  Node: Writing Context Managers,  Next: The contextlib module,  Up: PEP 343 The ‘with’ statement

1.16.3.1 Writing Context Managers
.................................

Under the hood, the ‘*note with: 5d2.’ statement is fairly complicated.
Most people will only use ‘‘with’’ in company with existing objects and
don’t need to know these details, so you can skip the rest of this
section if you like.  Authors of new objects will need to understand the
details of the underlying implementation and should keep reading.

A high-level explanation of the context management protocol is:

   * The expression is evaluated and should result in an object called a
     “context manager”.  The context manager must have *note
     __enter__(): 5c8. and *note __exit__(): 1344. methods.

   * The context manager’s *note __enter__(): 5c8. method is called.
     The value returned is assigned to 'VAR'. If no ‘as VAR’ clause is
     present, the value is simply discarded.

   * The code in 'BLOCK' is executed.

   * If 'BLOCK' raises an exception, the context manager’s *note
     __exit__(): 1344. method is called with three arguments, the
     exception details (‘type, value, traceback’, the same values
     returned by *note sys.exc_info(): 68a, which can also be ‘None’ if
     no exception occurred).  The method’s return value controls whether
     an exception is re-raised: any false value re-raises the exception,
     and ‘True’ will result in suppressing it.  You’ll only rarely want
     to suppress the exception, because if you do the author of the code
     containing the ‘*note with: 5d2.’ statement will never realize
     anything went wrong.

   * If 'BLOCK' didn’t raise an exception, the *note __exit__(): 1344.
     method is still called, but 'type', 'value', and 'traceback' are
     all ‘None’.

Let’s think through an example.  I won’t present detailed code but will
only sketch the methods necessary for a database that supports
transactions.

(For people unfamiliar with database terminology: a set of changes to
the database are grouped into a transaction.  Transactions can be either
committed, meaning that all the changes are written into the database,
or rolled back, meaning that the changes are all discarded and the
database is unchanged.  See any database textbook for more information.)

Vamos supor que exista um objeto representando uma conexão com o banco
de dados.  Nosso objetivo será permitir que o usuário escreva código
como este:

     db_connection = DatabaseConnection()
     with db_connection as cursor:
         cursor.execute('insert into ...')
         cursor.execute('delete from ...')
         # ... more operations ...

The transaction should be committed if the code in the block runs
flawlessly or rolled back if there’s an exception.  Here’s the basic
interface for ‘DatabaseConnection’ that I’ll assume:

     class DatabaseConnection:
         # Database interface
         def cursor(self):
             "Returns a cursor object and starts a new transaction"
         def commit(self):
             "Commits current transaction"
         def rollback(self):
             "Rolls back current transaction"

The *note __enter__(): 5c8. method is pretty easy, having only to start
a new transaction.  For this application the resulting cursor object
would be a useful result, so the method will return it.  The user can
then add ‘as cursor’ to their ‘*note with: 5d2.’ statement to bind the
cursor to a variable name.

     class DatabaseConnection:
         ...
         def __enter__(self):
             # Code to start a new transaction
             cursor = self.cursor()
             return cursor

The *note __exit__(): 1344. method is the most complicated because it’s
where most of the work has to be done.  The method has to check if an
exception occurred.  If there was no exception, the transaction is
committed.  The transaction is rolled back if there was an exception.

In the code below, execution will just fall off the end of the function,
returning the default value of ‘None’.  ‘None’ is false, so the
exception will be re-raised automatically.  If you wished, you could be
more explicit and add a *note return: 9d6. statement at the marked
location.

     class DatabaseConnection:
         ...
         def __exit__(self, type, value, tb):
             if tb is None:
                 # No exception, so commit
                 self.commit()
             else:
                 # Exception occurred, so rollback.
                 self.rollback()
                 # return False


File: python.info,  Node: The contextlib module,  Prev: Writing Context Managers,  Up: PEP 343 The ‘with’ statement

1.16.3.2 The contextlib module
..............................

The *note contextlib: 23. module provides some functions and a decorator
that are useful when writing objects for use with the ‘*note with: 5d2.’
statement.

The decorator is called *note contextmanager(): 1242, and lets you write
a single generator function instead of defining a new class.  The
generator should yield exactly one value.  The code up to the *note
yield: 9d5. will be executed as the *note __enter__(): 5c8. method, and
the value yielded will be the method’s return value that will get bound
to the variable in the ‘*note with: 5d2.’ statement’s ‘as’ clause, if
any.  The code after the ‘yield’ will be executed in the *note
__exit__(): 1344. method.  Any exception raised in the block will be
raised by the ‘yield’ statement.

Using this decorator, our database example from the previous section
could be written as:

     from contextlib import contextmanager

     @contextmanager
     def db_transaction(connection):
         cursor = connection.cursor()
         try:
             yield cursor
         except:
             connection.rollback()
             raise
         else:
             connection.commit()

     db = DatabaseConnection()
     with db_transaction(db) as cursor:
         ...

The *note contextlib: 23. module also has a ‘nested(mgr1, mgr2, ...)’
function that combines a number of context managers so you don’t need to
write nested ‘*note with: 5d2.’ statements.  In this example, the single
‘‘with’’ statement both starts a database transaction and acquires a
thread lock:

     lock = threading.Lock()
     with nested (db_transaction(db), lock) as (cursor, locked):
         ...

Finally, the *note closing(): 13d0. function returns its argument so
that it can be bound to a variable, and calls the argument’s ‘.close()’
method at the end of the block.

     import urllib, sys
     from contextlib import closing

     with closing(urllib.urlopen('http://www.yahoo.com')) as f:
         for line in f:
             sys.stdout.write(line)

Ver também
..........

PEP 343(1) - A instrução “with”

     PEP written by Guido van Rossum and Nick Coghlan; implemented by
     Mike Bland, Guido van Rossum, and Neal Norwitz.  The PEP shows the
     code generated for a ‘*note with: 5d2.’ statement, which can be
     helpful in learning how the statement works.

The documentation for the *note contextlib: 23. module.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0343/


File: python.info,  Node: PEP 366 Explicit Relative Imports From a Main Module,  Next: PEP 370 Per-user site-packages Directory,  Prev: PEP 343 The ‘with’ statement,  Up: O que há de novo no Python 2 6

1.16.4 PEP 366: Explicit Relative Imports From a Main Module
------------------------------------------------------------

Python’s *note -m: 5e1. switch allows running a module as a script.
When you ran a module that was located inside a package, relative
imports didn’t work correctly.

The fix for Python 2.6 adds a *note module.__package__: 2d7. attribute.
When this attribute is present, relative imports will be relative to the
value of this attribute instead of the *note __name__: 13d2. attribute.

PEP 302-style importers can then set *note __package__: 2d7. as
necessary.  The *note runpy: be. module that implements the *note -m:
5e1. switch now does this, so relative imports will now work correctly
in scripts running from inside a package.


File: python.info,  Node: PEP 370 Per-user site-packages Directory,  Next: PEP 371 The multiprocessing Package,  Prev: PEP 366 Explicit Relative Imports From a Main Module,  Up: O que há de novo no Python 2 6

1.16.5 PEP 370: Per-user ‘site-packages’ Directory
--------------------------------------------------

When you run Python, the module search path ‘sys.path’ usually includes
a directory whose path ends in ‘"site-packages"’.  This directory is
intended to hold locally installed packages available to all users using
a machine or a particular site installation.

Python 2.6 introduces a convention for user-specific site directories.
The directory varies depending on the platform:

   * Unix and Mac OS X: ‘~/.local/’

   * Windows: ‘%APPDATA%/Python’

Within this directory, there will be version-specific subdirectories,
such as ‘lib/python2.6/site-packages’ on Unix/Mac OS and
‘Python26/site-packages’ on Windows.

If you don’t like the default directory, it can be overridden by an
environment variable.  *note PYTHONUSERBASE: 13d4. sets the root
directory used for all Python versions supporting this feature.  On
Windows, the directory for application-specific data can be changed by
setting the ‘APPDATA’ environment variable.  You can also modify the
‘site.py’ file for your Python installation.

The feature can be disabled entirely by running Python with the *note
-s: 13d5. option or setting the *note PYTHONNOUSERSITE: 13d6.
environment variable.

Ver também
..........

PEP 370(1) - Per-user ‘site-packages’ Directory

     PEP written and implemented by Christian Heimes.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0370/


File: python.info,  Node: PEP 371 The multiprocessing Package,  Next: PEP 3101 Advanced String Formatting,  Prev: PEP 370 Per-user site-packages Directory,  Up: O que há de novo no Python 2 6

1.16.6 PEP 371: The ‘multiprocessing’ Package
---------------------------------------------

The new *note multiprocessing: 94. package lets Python programs create
new processes that will perform a computation and return a result to the
parent.  The parent and child processes can communicate using queues and
pipes, synchronize their operations using locks and semaphores, and can
share simple arrays of data.

The *note multiprocessing: 94. module started out as an exact emulation
of the *note threading: ed. module using processes instead of threads.
That goal was discarded along the path to Python 2.6, but the general
approach of the module is still similar.  The fundamental class is the
*note Process: b6f, which is passed a callable object and a collection
of arguments.  The *note start(): 13d8. method sets the callable running
in a subprocess, after which you can call the *note is_alive(): 13d9.
method to check whether the subprocess is still running and the *note
join(): 13da. method to wait for the process to exit.

Here’s a simple example where the subprocess will calculate a factorial.
The function doing the calculation is written strangely so that it takes
significantly longer when the input argument is a multiple of 4.

     import time
     from multiprocessing import Process, Queue


     def factorial(queue, N):
         "Compute a factorial."
         # If N is a multiple of 4, this function will take much longer.
         if (N % 4) == 0:
             time.sleep(.05 * N/4)

         # Calculate the result
         fact = 1L
         for i in range(1, N+1):
             fact = fact * i

         # Put the result on the queue
         queue.put(fact)

     if __name__ == '__main__':
         queue = Queue()

         N = 5

         p = Process(target=factorial, args=(queue, N))
         p.start()
         p.join()

         result = queue.get()
         print 'Factorial', N, '=', result

A *note Queue: 13db. is used to communicate the result of the factorial.
The *note Queue: 13db. object is stored in a global variable.  The child
process will use the value of the variable when the child was created;
because it’s a *note Queue: 13db, parent and child can use the object to
communicate.  (If the parent were to change the value of the global
variable, the child’s value would be unaffected, and vice versa.)

Two other classes, *note Pool: f9f. and *note Manager: cda, provide
higher-level interfaces.  *note Pool: f9f. will create a fixed number of
worker processes, and requests can then be distributed to the workers by
calling *note apply(): 13dc. or *note apply_async(): 13dd. to add a
single request, and *note map(): 1124. or *note map_async(): 1125. to
add a number of requests.  The following code uses a *note Pool: f9f. to
spread requests across 5 worker processes and retrieve a list of
results:

     from multiprocessing import Pool

     def factorial(N, dictionary):
         "Compute a factorial."
         ...
     p = Pool(5)
     result = p.map(factorial, range(1, 1000, 10))
     for v in result:
         print v

This produces the following output:

     1
     39916800
     51090942171709440000
     8222838654177922817725562880000000
     33452526613163807108170062053440751665152000000000
     ...

The other high-level interface, the *note Manager: cda. class, creates a
separate server process that can hold master copies of Python data
structures.  Other processes can then access and modify these data
structures using proxy objects.  The following example creates a shared
dictionary by calling the *note dict(): 256. method; the worker
processes then insert values into the dictionary.  (Locking is not done
for you automatically, which doesn’t matter in this example.  *note
Manager: cda.’s methods also include *note Lock(): 13de, *note RLock():
13df, and *note Semaphore(): 13e0. to create shared locks.)

     import time
     from multiprocessing import Pool, Manager

     def factorial(N, dictionary):
         "Compute a factorial."
         # Calculate the result
         fact = 1L
         for i in range(1, N+1):
             fact = fact * i

         # Store result in dictionary
         dictionary[N] = fact

     if __name__ == '__main__':
         p = Pool(5)
         mgr = Manager()
         d = mgr.dict()         # Create shared dictionary

         # Run tasks using the pool
         for N in range(1, 1000, 10):
             p.apply_async(factorial, (N, d))

         # Mark pool as closed -- no more tasks can be added.
         p.close()

         # Wait for tasks to exit
         p.join()

         # Output results
         for k, v in sorted(d.items()):
             print k, v

This will produce the output:

     1 1
     11 39916800
     21 51090942171709440000
     31 8222838654177922817725562880000000
     41 33452526613163807108170062053440751665152000000000
     51 15511187532873822802242430164693032110632597200169861120000...

Ver também
..........

The documentation for the *note multiprocessing: 94. module.

PEP 371(1) - Addition of the multiprocessing package

     PEP written by Jesse Noller and Richard Oudkerk; implemented by
     Richard Oudkerk and Jesse Noller.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0371/


File: python.info,  Node: PEP 3101 Advanced String Formatting,  Next: PEP 3105 print As a Function,  Prev: PEP 371 The multiprocessing Package,  Up: O que há de novo no Python 2 6

1.16.7 PEP 3101: Advanced String Formatting
-------------------------------------------

In Python 3.0, the ‘%’ operator is supplemented by a more powerful
string formatting method, *note format(): 61f.  Support for the *note
str.format(): 621. method has been backported to Python 2.6.

In 2.6, both 8-bit and Unicode strings have a ‘.format()’ method that
treats the string as a template and takes the arguments to be formatted.
The formatting template uses curly brackets (‘{’, ‘}’) as special
characters:

     >>> # Substitute positional argument 0 into the string.
     >>> "User ID: {0}".format("root")
     'User ID: root'
     >>> # Use the named keyword arguments
     >>> "User ID: {uid}   Last seen: {last_login}".format(
     ...    uid="root",
     ...    last_login = "5 Mar 2008 07:20")
     'User ID: root   Last seen: 5 Mar 2008 07:20'

Curly brackets can be escaped by doubling them:

     >>> "Empty dict: {{}}".format()
     "Empty dict: {}"

Field names can be integers indicating positional arguments, such as
‘{0}’, ‘{1}’, etc.  or names of keyword arguments.  You can also supply
compound field names that read attributes or access dictionary keys:

     >>> import sys
     >>> print 'Platform: {0.platform}\nPython version: {0.version}'.format(sys)
     Platform: darwin
     Python version: 2.6a1+ (trunk:61261M, Mar  5 2008, 20:29:41)
     [GCC 4.0.1 (Apple Computer, Inc. build 5367)]'

     >>> import mimetypes
     >>> 'Content-type: {0[.mp4]}'.format(mimetypes.types_map)
     'Content-type: video/mp4'

Note that when using dictionary-style notation such as ‘[.mp4]’, you
don’t need to put any quotation marks around the string; it will look up
the value using ‘.mp4’ as the key.  Strings beginning with a number will
be converted to an integer.  You can’t write more complicated
expressions inside a format string.

So far we’ve shown how to specify which field to substitute into the
resulting string.  The precise formatting used is also controllable by
adding a colon followed by a format specifier.  For example:

     >>> # Field 0: left justify, pad to 15 characters
     >>> # Field 1: right justify, pad to 6 characters
     >>> fmt = '{0:15} ${1:>6}'
     >>> fmt.format('Registration', 35)
     'Registration    $    35'
     >>> fmt.format('Tutorial', 50)
     'Tutorial        $    50'
     >>> fmt.format('Banquet', 125)
     'Banquet         $   125'

Format specifiers can reference other fields through nesting:

     >>> fmt = '{0:{1}}'
     >>> width = 15
     >>> fmt.format('Invoice #1234', width)
     'Invoice #1234  '
     >>> width = 35
     >>> fmt.format('Invoice #1234', width)
     'Invoice #1234                      '

The alignment of a field within the desired width can be specified:

Caractere            Effect
                     
----------------------------------------------------------------------
                     
< (default)          Left-align
                     
                     
>                    Right-align
                     
                     
^                    Center
                     
                     
=                    (For numeric types only) Pad after the sign.
                     

Format specifiers can also include a presentation type, which controls
how the value is formatted.  For example, floating-point numbers can be
formatted as a general number or in exponential notation:

     >>> '{0:g}'.format(3.75)
     '3.75'
     >>> '{0:e}'.format(3.75)
     '3.750000e+00'

A variety of presentation types are available.  Consult the 2.6
documentation for a *note complete list: 13e2.; here’s a sample:

‘b’       Binary.  Outputs the number in base 2.
          
          
‘c’       Character.  Converts the integer to the corresponding Unicode character
          before printing.
          
          
‘d’       Inteiro decimal.  Exibe o número na base 10.
          
          
‘o’       Formato octal.  Exibe o número na base 8.
          
          
‘x’       Formato hexadecimal.  Produz o número na base 16, usando letras minúsculas
          para os dígitos acima de 9.
          
          
‘e’       Exponent notation.  Prints the number in scientific notation using the
          letter ‘e’ to indicate the exponent.
          
          
‘g’       General format.  This prints the number as a fixed-point number, unless
          the number is too large, in which case it switches to ‘e’ exponent
          notation.
          
          
‘n’       Number.  This is the same as ‘g’ (for floats) or ‘d’ (for integers),
          except that it uses the current locale setting to insert the appropriate
          number separator characters.
          
          
‘%’       Percentage.  Multiplies the number by 100 and displays in fixed (‘f’)
          format, followed by a percent sign.
          

Classes and types can define a *note __format__(): 61e. method to
control how they’re formatted.  It receives a single argument, the
format specifier:

     def __format__(self, format_spec):
         if isinstance(format_spec, unicode):
             return unicode(str(self))
         else:
             return str(self)

There’s also a *note format(): 61f. builtin that will format a single
value.  It calls the type’s *note __format__(): 61e. method with the
provided specifier:

     >>> format(75.6564, '.2f')
     '75.66'

Ver também
..........

*note Sintaxe das strings de formato: 13e2.

     The reference documentation for format fields.

PEP 3101(1) - Advanced String Formatting

     PEP written by Talin.  Implemented by Eric Smith.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3101/


File: python.info,  Node: PEP 3105 print As a Function,  Next: PEP 3110 Exception-Handling Changes,  Prev: PEP 3101 Advanced String Formatting,  Up: O que há de novo no Python 2 6

1.16.8 PEP 3105: ‘print’ As a Function
--------------------------------------

The ‘print’ statement becomes the *note print(): fa9. function in Python
3.0.  Making *note print(): fa9. a function makes it possible to replace
the function by doing ‘def print(...)’ or importing a new function from
somewhere else.

Python 2.6 has a ‘__future__’ import that removes ‘print’ as language
syntax, letting you use the functional form instead.  For example:

     >>> from __future__ import print_function
     >>> print('# of entries', len(dictionary), file=sys.stderr)

The signature of the new function is:

     def print(*args, sep=' ', end='\n', file=None)

The parameters are:

   * 'args': positional arguments whose values will be printed out.

   * 'sep': the separator, which will be printed between arguments.

   * 'end': the ending text, which will be printed after all of the
     arguments have been output.

   * 'file': the file object to which the output will be sent.

Ver também
..........

PEP 3105(1) - Make print a function

     PEP written by Georg Brandl.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3105/


File: python.info,  Node: PEP 3110 Exception-Handling Changes,  Next: PEP 3112 Byte Literals,  Prev: PEP 3105 print As a Function,  Up: O que há de novo no Python 2 6

1.16.9 PEP 3110: Exception-Handling Changes
-------------------------------------------

One error that Python programmers occasionally make is writing the
following code:

     try:
         ...
     except TypeError, ValueError:  # Wrong!
         ...

The author is probably trying to catch both *note TypeError: 2c3. and
*note ValueError: 202. exceptions, but this code actually does something
different: it will catch *note TypeError: 2c3. and bind the resulting
exception object to the local name ‘"ValueError"’.  The *note
ValueError: 202. exception will not be caught at all.  The correct code
specifies a tuple of exceptions:

     try:
         ...
     except (TypeError, ValueError):
         ...

This error happens because the use of the comma here is ambiguous: does
it indicate two different nodes in the parse tree, or a single node
that’s a tuple?

Python 3.0 makes this unambiguous by replacing the comma with the word
“as”.  To catch an exception and store the exception object in the
variable ‘exc’, you must write:

     try:
         ...
     except TypeError as exc:
         ...

Python 3.0 will only support the use of “as”, and therefore interprets
the first example as catching two different exceptions.  Python 2.6
supports both the comma and “as”, so existing code will continue to
work.  We therefore suggest using “as” when writing new Python code that
will only be executed with 2.6.

Ver também
..........

PEP 3110(1) - Catching Exceptions in Python 3000

     PEP written and implemented by Collin Winter.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3110/


File: python.info,  Node: PEP 3112 Byte Literals,  Next: PEP 3116 New I/O Library,  Prev: PEP 3110 Exception-Handling Changes,  Up: O que há de novo no Python 2 6

1.16.10 PEP 3112: Byte Literals
-------------------------------

Python 3.0 adopts Unicode as the language’s fundamental string type and
denotes 8-bit literals differently, either as ‘b'string'’ or using a
*note bytes: 1c2. constructor.  For future compatibility, Python 2.6
adds *note bytes: 1c2. as a synonym for the *note str: 44c. type, and it
also supports the ‘b''’ notation.

The 2.6 *note str: 44c. differs from 3.0’s *note bytes: 1c2. type in
various ways; most notably, the constructor is completely different.  In
3.0, ‘bytes([65, 66, 67])’ is 3 elements long, containing the bytes
representing ‘ABC’; in 2.6, ‘bytes([65, 66, 67])’ returns the 12-byte
string representing the *note str(): 44c. of the list.

The primary use of *note bytes: 1c2. in 2.6 will be to write tests of
object type such as ‘isinstance(x, bytes)’.  This will help the 2to3
converter, which can’t tell whether 2.x code intends strings to contain
either characters or 8-bit bytes; you can now use either *note bytes:
1c2. or *note str: 44c. to represent your intention exactly, and the
resulting code will also be correct in Python 3.0.

There’s also a ‘__future__’ import that causes all string literals to
become Unicode strings.  This means that ‘\u’ escape sequences can be
used to include Unicode characters:

     from __future__ import unicode_literals

     s = ('\u751f\u3080\u304e\u3000\u751f\u3054'
          '\u3081\u3000\u751f\u305f\u307e\u3054')

     print len(s)               # 12 Unicode characters

At the C level, Python 3.0 will rename the existing 8-bit string type,
called ‘PyStringObject’ in Python 2.x, to *note PyBytesObject: 792.
Python 2.6 uses ‘#define’ to support using the names *note
PyBytesObject(): 792, *note PyBytes_Check(): 13e6, *note
PyBytes_FromStringAndSize(): 13e7, and all the other functions and
macros used with strings.

Instances of the *note bytes: 1c2. type are immutable just as strings
are.  A new *note bytearray: 2ea. type stores a mutable sequence of
bytes:

     >>> bytearray([65, 66, 67])
     bytearray(b'ABC')
     >>> b = bytearray(u'\u21ef\u3244', 'utf-8')
     >>> b
     bytearray(b'\xe2\x87\xaf\xe3\x89\x84')
     >>> b[0] = '\xe3'
     >>> b
     bytearray(b'\xe3\x87\xaf\xe3\x89\x84')
     >>> unicode(str(b), 'utf-8')
     u'\u31ef \u3244'

Byte arrays support most of the methods of string types, such as *note
startswith(): 13e8./*note endswith(): 13e9, *note find(): 13ea./*note
rfind(): 13eb, and some of the methods of lists, such as *note append():
13ec, *note pop(): 13ed, and *note reverse(): 13ee.

     >>> b = bytearray('ABC')
     >>> b.append('d')
     >>> b.append(ord('e'))
     >>> b
     bytearray(b'ABCde')

There’s also a corresponding C API, with *note PyByteArray_FromObject():
13ef, *note PyByteArray_FromStringAndSize(): 13f0, and various other
functions.

Ver também
..........

PEP 3112(1) - Bytes literals in Python 3000

     PEP written by Jason Orendorff; backported to 2.6 by Christian
     Heimes.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3112/


File: python.info,  Node: PEP 3116 New I/O Library,  Next: PEP 3118 Revised Buffer Protocol,  Prev: PEP 3112 Byte Literals,  Up: O que há de novo no Python 2 6

1.16.11 PEP 3116: New I/O Library
---------------------------------

Python’s built-in file objects support a number of methods, but
file-like objects don’t necessarily support all of them.  Objects that
imitate files usually support ‘read()’ and ‘write()’, but they may not
support ‘readline()’, for example.  Python 3.0 introduces a layered I/O
library in the *note io: 7f. module that separates buffering and
text-handling features from the fundamental read and write operations.

There are three levels of abstract base classes provided by the *note
io: 7f. module:

   * *note RawIOBase: 110f. defines raw I/O operations: *note read():
     e48, *note readinto(): e49, *note write(): 13f2, *note seek():
     12ce, *note tell(): 13f3, *note truncate(): 1355, and *note
     close(): 1f6.  Most of the methods of this class will often map to
     a single system call.  There are also *note readable(): 13f4, *note
     writable(): 13f5, and *note seekable(): 13f6. methods for
     determining what operations a given object will allow.

     Python 3.0 has concrete implementations of this class for files and
     sockets, but Python 2.6 hasn’t restructured its file and socket
     objects in this way.

   * *note BufferedIOBase: 694. is an abstract base class that buffers
     data in memory to reduce the number of system calls used, making
     I/O processing more efficient.  It supports all of the methods of
     *note RawIOBase: 110f, and adds a *note raw: 13f7. attribute
     holding the underlying raw object.

     There are five concrete classes implementing this ABC. *note
     BufferedWriter: 13f8. and *note BufferedReader: 124e. are for
     objects that support write-only or read-only usage that have a
     *note seek(): 12ce. method for random access.  *note
     BufferedRandom: 13f9. objects support read and write access upon
     the same underlying stream, and *note BufferedRWPair: 13fa. is for
     objects such as TTYs that have both read and write operations
     acting upon unconnected streams of data.  The *note BytesIO: ed3.
     class supports reading, writing, and seeking over an in-memory
     buffer.

   * *note TextIOBase: 695.: Provides functions for reading and writing
     strings (remember, strings will be Unicode in Python 3.0), and
     supporting *note universal newlines: d5c.  *note TextIOBase: 695.
     defines the *note readline(): ba. method and supports iteration
     upon objects.

     There are two concrete implementations.  *note TextIOWrapper: 7bc.
     wraps a buffered I/O object, supporting all of the methods for text
     I/O and adding a *note buffer: 12e5. attribute for access to the
     underlying object.  *note StringIO: f59. simply buffers everything
     in memory without ever writing anything to disk.

     (In Python 2.6, *note io.StringIO: f59. is implemented in pure
     Python, so it’s pretty slow.  You should therefore stick with the
     existing ‘StringIO’ module or ‘cStringIO’ for now.  At some point
     Python 3.0’s *note io: 7f. module will be rewritten into C for
     speed, and perhaps the C implementation will be backported to the
     2.x releases.)

In Python 2.6, the underlying implementations haven’t been restructured
to build on top of the *note io: 7f. module’s classes.  The module is
being provided to make it easier to write code that’s forward-compatible
with 3.0, and to save developers the effort of writing their own
implementations of buffering and text I/O.

Ver também
..........

PEP 3116(1) - New I/O

     PEP written by Daniel Stutzbach, Mike Verdone, and Guido van
     Rossum.  Code by Guido van Rossum, Georg Brandl, Walter Doerwald,
     Jeremy Hylton, Martin von Löwis, Tony Lownds, and others.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3116/


File: python.info,  Node: PEP 3118 Revised Buffer Protocol,  Next: PEP 3119 Abstract Base Classes,  Prev: PEP 3116 New I/O Library,  Up: O que há de novo no Python 2 6

1.16.12 PEP 3118: Revised Buffer Protocol
-----------------------------------------

The buffer protocol is a C-level API that lets Python types exchange
pointers into their internal representations.  A memory-mapped file can
be viewed as a buffer of characters, for example, and this lets another
module such as *note re: b9. treat memory-mapped files as a string of
characters to be searched.

The primary users of the buffer protocol are numeric-processing packages
such as NumPy, which expose the internal representation of arrays so
that callers can write data directly into an array instead of going
through a slower API. This PEP updates the buffer protocol in light of
experience from NumPy development, adding a number of new features such
as indicating the shape of an array or locking a memory region.

The most important new C API function is ‘PyObject_GetBuffer(PyObject
*obj, Py_buffer *view, int flags)’, which takes an object and a set of
flags, and fills in the ‘Py_buffer’ structure with information about the
object’s memory representation.  Objects can use this operation to lock
memory in place while an external caller could be modifying the
contents, so there’s a corresponding ‘PyBuffer_Release(Py_buffer *view)’
to indicate that the external caller is done.

The 'flags' argument to *note PyObject_GetBuffer(): 399. specifies
constraints upon the memory returned.  Some examples are:

   * *note PyBUF_WRITABLE: 13fc. indicates that the memory must be
     writable.

   * ‘PyBUF_LOCK’ requests a read-only or exclusive lock on the memory.

   * *note PyBUF_C_CONTIGUOUS: 13fd. and *note PyBUF_F_CONTIGUOUS: 13fe.
     requests a C-contiguous (last dimension varies the fastest) or
     Fortran-contiguous (first dimension varies the fastest) array
     layout.

Two new argument codes for *note PyArg_ParseTuple(): 571, ‘s*’ and ‘z*’,
return locked buffer objects for a parameter.

Ver também
..........

PEP 3118(1) - Revising the buffer protocol

     PEP written by Travis Oliphant and Carl Banks; implemented by
     Travis Oliphant.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3118/


File: python.info,  Node: PEP 3119 Abstract Base Classes,  Next: PEP 3127 Integer Literal Support and Syntax,  Prev: PEP 3118 Revised Buffer Protocol,  Up: O que há de novo no Python 2 6

1.16.13 PEP 3119: Abstract Base Classes
---------------------------------------

Some object-oriented languages such as Java support interfaces,
declaring that a class has a given set of methods or supports a given
access protocol.  Abstract Base Classes (or ABCs) are an equivalent
feature for Python.  The ABC support consists of an *note abc: 4. module
containing a metaclass called *note ABCMeta: f4a, special handling of
this metaclass by the *note isinstance(): 442. and *note issubclass():
7c2. builtins, and a collection of basic ABCs that the Python developers
think will be widely useful.  Future versions of Python will probably
add more ABCs.

Let’s say you have a particular class and wish to know whether it
supports dictionary-style access.  The phrase “dictionary-style” is
vague, however.  It probably means that accessing items with ‘obj[1]’
works.  Does it imply that setting items with ‘obj[2] = value’ works?
Or that the object will have ‘keys()’, ‘values()’, and ‘items()’
methods?  What about the iterative variants such as ‘iterkeys()’?
‘copy`and :meth:()’!update'?  Iterating over the object with ‘iter()’?

The Python 2.6 *note collections: 1d. module includes a number of
different ABCs that represent these distinctions.  ‘Iterable’ indicates
that a class defines *note __iter__(): c8a, and ‘Container’ means the
class defines a *note __contains__(): 1400. method and therefore
supports ‘x in y’ expressions.  The basic dictionary interface of
getting items, setting items, and ‘keys()’, ‘values()’, and ‘items()’,
is defined by the ‘MutableMapping’ ABC.

You can derive your own classes from a particular ABC to indicate they
support that ABC’s interface:

     import collections

     class Storage(collections.MutableMapping):
         ...

Alternatively, you could write the class without deriving from the
desired ABC and instead register the class by calling the ABC’s *note
register(): 10c7. method:

     import collections

     class Storage:
         ...

     collections.MutableMapping.register(Storage)

For classes that you write, deriving from the ABC is probably clearer.
The *note register(): 10c7. method is useful when you’ve written a new
ABC that can describe an existing type or class, or if you want to
declare that some third-party class implements an ABC. For example, if
you defined a ‘PrintableType’ ABC, it’s legal to do:

     # Register Python's types
     PrintableType.register(int)
     PrintableType.register(float)
     PrintableType.register(str)

Classes should obey the semantics specified by an ABC, but Python can’t
check this; it’s up to the class author to understand the ABC’s
requirements and to implement the code accordingly.

To check whether an object supports a particular interface, you can now
write:

     def func(d):
         if not isinstance(d, collections.MutableMapping):
             raise ValueError("Mapping object expected, not %r" % d)

Don’t feel that you must now begin writing lots of checks as in the
above example.  Python has a strong tradition of duck-typing, where
explicit type-checking is never done and code simply calls methods on an
object, trusting that those methods will be there and raising an
exception if they aren’t.  Be judicious in checking for ABCs and only do
it where it’s absolutely necessary.

You can write your own ABCs by using ‘abc.ABCMeta’ as the metaclass in a
class definition:

     from abc import ABCMeta, abstractmethod

     class Drawable():
         __metaclass__ = ABCMeta

         @abstractmethod
         def draw(self, x, y, scale=1.0):
             pass

         def draw_doubled(self, x, y):
             self.draw(x, y, scale=2.0)


     class Square(Drawable):
         def draw(self, x, y, scale):
             ...

In the ‘Drawable’ ABC above, the ‘draw_doubled()’ method renders the
object at twice its size and can be implemented in terms of other
methods described in ‘Drawable’.  Classes implementing this ABC
therefore don’t need to provide their own implementation of
‘draw_doubled()’, though they can do so.  An implementation of ‘draw()’
is necessary, though; the ABC can’t provide a useful generic
implementation.

You can apply the *note @~abc.abstractmethod: 10c4. decorator to methods
such as ‘draw()’ that must be implemented; Python will then raise an
exception for classes that don’t define the method.  Note that the
exception is only raised when you actually try to create an instance of
a subclass lacking the method:

     >>> class Circle(Drawable):
     ...     pass
     ...
     >>> c = Circle()
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: Can't instantiate abstract class Circle with abstract methods draw
     >>>

Abstract data attributes can be declared using the ‘@abstractproperty’
decorator:

     from abc import abstractproperty
     ...

     @abstractproperty
     def readonly(self):
        return self._x

Subclasses must then define a ‘readonly’ property.

Ver também
..........

PEP 3119(1) - Introduzindo classes base abstratas

     PEP written by Guido van Rossum and Talin.  Implemented by Guido
     van Rossum.  Backported to 2.6 by Benjamin Aranguren, with Alex
     Martelli.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3119/


File: python.info,  Node: PEP 3127 Integer Literal Support and Syntax,  Next: PEP 3129 Class Decorators,  Prev: PEP 3119 Abstract Base Classes,  Up: O que há de novo no Python 2 6

1.16.14 PEP 3127: Integer Literal Support and Syntax
----------------------------------------------------

Python 3.0 changes the syntax for octal (base-8) integer literals,
prefixing them with “0o” or “0O” instead of a leading zero, and adds
support for binary (base-2) integer literals, signalled by a “0b” or
“0B” prefix.

Python 2.6 doesn’t drop support for a leading 0 signalling an octal
number, but it does add support for “0o” and “0b”:

     >>> 0o21, 2*8 + 1
     (17, 17)
     >>> 0b101111
     47

The *note oct(): 1311. builtin still returns numbers prefixed with a
leading zero, and a new *note bin(): 12eb. builtin returns the binary
representation for a number:

     >>> oct(42)
     '052'
     >>> future_builtins.oct(42)
     '0o52'
     >>> bin(173)
     '0b10101101'

The *note int(): 257. and ‘long()’ builtins will now accept the “0o” and
“0b” prefixes when base-8 or base-2 are requested, or when the 'base'
argument is zero (signalling that the base used should be determined
from the string):

     >>> int ('0o52', 0)
     42
     >>> int('1101', 2)
     13
     >>> int('0b1101', 2)
     13
     >>> int('0b1101', 0)
     13

Ver também
..........

PEP 3127(1) - Integer Literal Support and Syntax

     PEP written by Patrick Maupin; backported to 2.6 by Eric Smith.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3127/


File: python.info,  Node: PEP 3129 Class Decorators,  Next: PEP 3141 A Type Hierarchy for Numbers,  Prev: PEP 3127 Integer Literal Support and Syntax,  Up: O que há de novo no Python 2 6

1.16.15 PEP 3129: Class Decorators
----------------------------------

Decorators have been extended from functions to classes.  It’s now legal
to write:

     @foo
     @bar
     class A:
       pass

Isso equivale a:

     class A:
       pass

     A = foo(bar(A))

Ver também
..........

PEP 3129(1) - Class Decorators

     PEP written by Collin Winter.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3129/


File: python.info,  Node: PEP 3141 A Type Hierarchy for Numbers,  Next: Outras mudanças na linguagem<15>,  Prev: PEP 3129 Class Decorators,  Up: O que há de novo no Python 2 6

1.16.16 PEP 3141: A Type Hierarchy for Numbers
----------------------------------------------

Python 3.0 adds several abstract base classes for numeric types inspired
by Scheme’s numeric tower.  These classes were backported to 2.6 as the
*note numbers: 9e. module.

The most general ABC is ‘Number’.  It defines no operations at all, and
only exists to allow checking if an object is a number by doing
‘isinstance(obj, Number)’.

‘Complex’ is a subclass of ‘Number’.  Complex numbers can undergo the
basic operations of addition, subtraction, multiplication, division, and
exponentiation, and you can retrieve the real and imaginary parts and
obtain a number’s conjugate.  Python’s built-in complex type is an
implementation of ‘Complex’.

‘Real’ further derives from ‘Complex’, and adds operations that only
work on real numbers: ‘floor()’, ‘trunc()’, rounding, taking the
remainder mod N, floor division, and comparisons.

‘Rational’ numbers derive from ‘Real’, have ‘numerator’ and
‘denominator’ properties, and can be converted to floats.  Python 2.6
adds a simple rational-number class, ‘Fraction’, in the *note fractions:
5d. module.  (It’s called ‘Fraction’ instead of ‘Rational’ to avoid a
name clash with *note numbers.Rational: 1301.)

‘Integral’ numbers derive from ‘Rational’, and can be shifted left and
right with ‘<<’ and ‘>>’, combined using bitwise operations such as ‘&’
and ‘|’, and can be used as array indexes and slice boundaries.

In Python 3.0, the PEP slightly redefines the existing builtins *note
round(): 131d, *note math.floor(): 1404, *note math.ceil(): 1405, and
adds a new one, *note math.trunc(): 1406, that’s been backported to
Python 2.6.  *note math.trunc(): 1406. rounds toward zero, returning the
closest ‘Integral’ that’s between the function’s argument and zero.

Ver também
..........

PEP 3141(1) - A Type Hierarchy for Numbers

     PEP written by Jeffrey Yasskin.

Scheme's numerical tower(2), from the Guile manual.

Scheme's number datatypes(3) from the R5RS Scheme specification.

* Menu:

* The fractions Module::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3141/

   (2) 
https://www.gnu.org/software/guile/manual/html_node/Numerical-Tower.html#Numerical-Tower

   (3) 
https://conservatory.scheme.org/schemers/Documents/Standards/R5RS/HTML/r5rs-Z-H-9.html#%_sec_6.2


File: python.info,  Node: The fractions Module,  Up: PEP 3141 A Type Hierarchy for Numbers

1.16.16.1 The ‘fractions’ Module
................................

To fill out the hierarchy of numeric types, the *note fractions: 5d.
module provides a rational-number class.  Rational numbers store their
values as a numerator and denominator forming a fraction, and can
exactly represent numbers such as ‘2/3’ that floating-point numbers can
only approximate.

The ‘Fraction’ constructor takes two ‘Integral’ values that will be the
numerator and denominator of the resulting fraction.

     >>> from fractions import Fraction
     >>> a = Fraction(2, 3)
     >>> b = Fraction(2, 5)
     >>> float(a), float(b)
     (0.66666666666666663, 0.40000000000000002)
     >>> a+b
     Fraction(16, 15)
     >>> a/b
     Fraction(5, 3)

For converting floating-point numbers to rationals, the float type now
has an ‘as_integer_ratio()’ method that returns the numerator and
denominator for a fraction that evaluates to the same floating-point
value:

     >>> (2.5) .as_integer_ratio()
     (5, 2)
     >>> (3.1415) .as_integer_ratio()
     (7074029114692207L, 2251799813685248L)
     >>> (1./3) .as_integer_ratio()
     (6004799503160661L, 18014398509481984L)

Note that values that can only be approximated by floating-point
numbers, such as 1./3, are not simplified to the number being
approximated; the fraction attempts to match the floating-point value
'exactly'.

The *note fractions: 5d. module is based upon an implementation by
Sjoerd Mullender that was in Python’s ‘Demo/classes/’ directory for a
long time.  This implementation was significantly updated by Jeffrey
Yasskin.


File: python.info,  Node: Outras mudanças na linguagem<15>,  Next: Módulos Novos ou Aprimorados<2>,  Prev: PEP 3141 A Type Hierarchy for Numbers,  Up: O que há de novo no Python 2 6

1.16.17 Outras mudanças na linguagem
------------------------------------

Algumas das mudanças menores feitas no núcleo da linguagem Python são:

   * Directories and zip archives containing a ‘__main__.py’ file can
     now be executed directly by passing their name to the interpreter.
     The directory or zip archive is automatically inserted as the first
     entry in sys.path.  (Suggestion and initial patch by Andy Chu,
     subsequently revised by Phillip J. Eby and Nick Coghlan;
     bpo-1739468(1).)

   * A função *note hasattr(): 4d2. estava capturando e ignorando todos
     os erros, sob a suposição de que eles significavam que um método
     ‘__getattr__()’ estava falhando de alguma forma e o valor de
     retorno de *note hasattr(): 4d2. seria, portanto, ‘False’.  Esta
     lógica não deve ser aplicada a *note KeyboardInterrupt: 9d9. e
     *note SystemExit: d63, entretanto; O Python 2.6 não descartará mais
     tais exceções quando *note hasattr(): 4d2. as encontrar.  (Correção
     de Benjamin Peterson; bpo-2196(2).)

   * When calling a function using the ‘**’ syntax to provide keyword
     arguments, you are no longer required to use a Python dictionary;
     any mapping will now work:

          >>> def f(**kw):
          ...    print sorted(kw)
          ...
          >>> ud=UserDict.UserDict()
          >>> ud['a'] = 1
          >>> ud['b'] = 'string'
          >>> f(**ud)
          ['a', 'b']

     (Contributed by Alexander Belopolsky; bpo-1686487(3).)

     It’s also become legal to provide keyword arguments after a ‘*args’
     argument to a function call.

          >>> def f(*args, **kw):
          ...     print args, kw
          ...
          >>> f(1,2,3, *(4,5,6), keyword=13)
          (1, 2, 3, 4, 5, 6) {'keyword': 13}

     Previously this would have been a syntax error.  (Contributed by
     Amaury Forgeot d’Arc; bpo-3473(4).)

   * A new builtin, ‘next(iterator, [default])’ returns the next item
     from the specified iterator.  If the 'default' argument is
     supplied, it will be returned if 'iterator' has been exhausted;
     otherwise, the *note StopIteration: c15. exception will be raised.
     (Backported in bpo-2719(5).)

   * Tuples now have *note index(): 1409. and *note count(): 140a.
     methods matching the list type’s *note index(): 140b. and *note
     count(): 140c. methods:

          >>> t = (0,1,2,3,4,0,1,2)
          >>> t.index(3)
          3
          >>> t.count(0)
          2

     (Contributed by Raymond Hettinger)

   * The built-in types now have improved support for extended slicing
     syntax, accepting various combinations of ‘(start, stop, step)’.
     Previously, the support was partial and certain corner cases
     wouldn’t work.  (Implemented by Thomas Wouters.)

   * Properties now have three attributes, ‘getter’, ‘setter’ and
     ‘deleter’, that are decorators providing useful shortcuts for
     adding a getter, setter or deleter function to an existing
     property.  You would use them like this:

          class C(object):
              @property
              def x(self):
                  return self._x

              @x.setter
              def x(self, value):
                  self._x = value

              @x.deleter
              def x(self):
                  del self._x

          class D(C):
              @C.x.getter
              def x(self):
                  return self._x * 2

              @x.setter
              def x(self, value):
                  self._x = value / 2

   * Several methods of the built-in set types now accept multiple
     iterables: ‘intersection()’, ‘intersection_update()’, ‘union()’,
     ‘update()’, ‘difference()’ and ‘difference_update()’.

          >>> s=set('1234567890')
          >>> s.intersection('abc123', 'cdf246')  # Intersection between all inputs
          set(['2'])
          >>> s.difference('246', '789')
          set(['1', '0', '3', '5'])

     (Contributed by Raymond Hettinger.)

   * Many floating-point features were added.  The *note float(): 2f7.
     function will now turn the string ‘nan’ into an IEEE 754 Not A
     Number value, and ‘+inf’ and ‘-inf’ into positive or negative
     infinity.  This works on any platform with IEEE 754 semantics.
     (Contributed by Christian Heimes; bpo-1635(6).)

     Other functions in the *note math: 8e. module, ‘isinf()’ and
     ‘isnan()’, return true if their floating-point argument is infinite
     or Not A Number.  (bpo-1640(7))

     Conversion functions were added to convert floating-point numbers
     into hexadecimal strings (bpo-3008(8)).  These functions convert
     floats to and from a string representation without introducing
     rounding errors from the conversion between decimal and binary.
     Floats have a *note hex(): 1312. method that returns a string
     representation, and the ‘float.fromhex()’ method converts a string
     back into a number:

          >>> a = 3.75
          >>> a.hex()
          '0x1.e000000000000p+1'
          >>> float.fromhex('0x1.e000000000000p+1')
          3.75
          >>> b=1./3
          >>> b.hex()
          '0x1.5555555555555p-2'

   * A numerical nicety: when creating a complex number from two floats
     on systems that support signed zeros (-0 and +0), the *note
     complex(): 2f8. constructor will now preserve the sign of the zero.
     (Fixed by Mark T. Dickinson; bpo-1507(9).)

   * Classes that inherit a ‘__hash__()’ method from a parent class can
     set ‘__hash__ = None’ to indicate that the class isn’t hashable.
     This will make ‘hash(obj)’ raise a *note TypeError: 2c3. and the
     class will not be indicated as implementing the ‘Hashable’ ABC.

     You should do this when you’ve defined a ‘__cmp__()’ or ‘__eq__()’
     method that compares objects by their value rather than by
     identity.  All objects have a default hash method that uses
     ‘id(obj)’ as the hash value.  There’s no tidy way to remove the
     ‘__hash__()’ method inherited from a parent class, so assigning
     ‘None’ was implemented as an override.  At the C level, extensions
     can set ‘tp_hash’ to *note PyObject_HashNotImplemented(): 140d.
     (Fixed by Nick Coghlan and Amaury Forgeot d’Arc; bpo-2235(10).)

   * The *note GeneratorExit: 140e. exception now subclasses *note
     BaseException: 5bb. instead of *note Exception: 9e2.  This means
     that an exception handler that does ‘except Exception:’ will not
     inadvertently catch *note GeneratorExit: 140e.  (Contributed by
     Chad Austin; bpo-1537(11).)

   * Generator objects now have a ‘gi_code’ attribute that refers to the
     original code object backing the generator.  (Contributed by Collin
     Winter; bpo-1473257(12).)

   * The *note compile(): 192. built-in function now accepts keyword
     arguments as well as positional parameters.  (Contributed by Thomas
     Wouters; bpo-1444529(13).)

   * The *note complex(): 2f8. constructor now accepts strings
     containing parenthesized complex numbers, meaning that
     ‘complex(repr(cplx))’ will now round-trip values.  For example,
     ‘complex('(3+4j)')’ now returns the value (3+4j).
     (bpo-1491866(14))

   * The string ‘translate()’ method now accepts ‘None’ as the
     translation table parameter, which is treated as the identity
     transformation.  This makes it easier to carry out operations that
     only delete characters.  (Contributed by Bengt Richter and
     implemented by Raymond Hettinger; bpo-1193128(15).)

   * The built-in *note dir(): 632. function now checks for a
     ‘__dir__()’ method on the objects it receives.  This method must
     return a list of strings containing the names of valid attributes
     for the object, and lets the object control the value that *note
     dir(): 632. produces.  Objects that have ‘__getattr__()’ or
     ‘__getattribute__()’ methods can use this to advertise
     pseudo-attributes they will honor.  (bpo-1591665(16))

   * Instance method objects have new attributes for the object and
     function comprising the method; the new synonym for ‘im_self’ is
     *note __self__: 140f, and ‘im_func’ is also available as *note
     __func__: 1340.  The old names are still supported in Python 2.6,
     but are gone in 3.0.

   * An obscure change: when you use the *note locals(): 141. function
     inside a *note class: 131a. statement, the resulting dictionary no
     longer returns free variables.  (Free variables, in this case, are
     variables referenced in the ‘class’ statement that aren’t
     attributes of the class.)

* Menu:

* Otimizações: Otimizações<14>.
* Alterações no interpretador: Alterações no interpretador<2>.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1739468

   (2) https://bugs.python.org/issue?@action=redirect&bpo=2196

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1686487

   (4) https://bugs.python.org/issue?@action=redirect&bpo=3473

   (5) https://bugs.python.org/issue?@action=redirect&bpo=2719

   (6) https://bugs.python.org/issue?@action=redirect&bpo=1635

   (7) https://bugs.python.org/issue?@action=redirect&bpo=1640

   (8) https://bugs.python.org/issue?@action=redirect&bpo=3008

   (9) https://bugs.python.org/issue?@action=redirect&bpo=1507

   (10) https://bugs.python.org/issue?@action=redirect&bpo=2235

   (11) https://bugs.python.org/issue?@action=redirect&bpo=1537

   (12) https://bugs.python.org/issue?@action=redirect&bpo=1473257

   (13) https://bugs.python.org/issue?@action=redirect&bpo=1444529

   (14) https://bugs.python.org/issue?@action=redirect&bpo=1491866

   (15) https://bugs.python.org/issue?@action=redirect&bpo=1193128

   (16) https://bugs.python.org/issue?@action=redirect&bpo=1591665


File: python.info,  Node: Otimizações<14>,  Next: Alterações no interpretador<2>,  Up: Outras mudanças na linguagem<15>

1.16.17.1 Otimizações
.....................

   * The *note warnings: 112. module has been rewritten in C. This makes
     it possible to invoke warnings from the parser, and may also make
     the interpreter’s startup faster.  (Contributed by Neal Norwitz and
     Brett Cannon; bpo-1631171(1).)

   * Type objects now have a cache of methods that can reduce the work
     required to find the correct method implementation for a particular
     class; once cached, the interpreter doesn’t need to traverse base
     classes to figure out the right method to call.  The cache is
     cleared if a base class or the class itself is modified, so the
     cache should remain correct even in the face of Python’s dynamic
     nature.  (Original optimization implemented by Armin Rigo, updated
     for Python 2.6 by Kevin Jacobs; bpo-1700288(2).)

     By default, this change is only applied to types that are included
     with the Python core.  Extension modules may not necessarily be
     compatible with this cache, so they must explicitly add
     ‘Py_TPFLAGS_HAVE_VERSION_TAG’ to the module’s ‘tp_flags’ field to
     enable the method cache.  (To be compatible with the method cache,
     the extension module’s code must not directly access and modify the
     ‘tp_dict’ member of any of the types it implements.  Most modules
     don’t do this, but it’s impossible for the Python interpreter to
     determine that.  See bpo-1878(3) for some discussion.)

   * Function calls that use keyword arguments are significantly faster
     by doing a quick pointer comparison, usually saving the time of a
     full string comparison.  (Contributed by Raymond Hettinger, after
     an initial implementation by Antoine Pitrou; bpo-1819(4).)

   * All of the functions in the *note struct: d5. module have been
     rewritten in C, thanks to work at the Need For Speed sprint.
     (Contributed by Raymond Hettinger.)

   * Some of the standard built-in types now set a bit in their type
     objects.  This speeds up checking whether an object is a subclass
     of one of these types.  (Contributed by Neal Norwitz.)

   * Unicode strings now use faster code for detecting whitespace and
     line breaks; this speeds up the ‘split()’ method by about 25% and
     ‘splitlines()’ by 35%.  (Contributed by Antoine Pitrou.)  Memory
     usage is reduced by using pymalloc for the Unicode string’s data.

   * The ‘with’ statement now stores the *note __exit__(): 1344. method
     on the stack, producing a small speedup.  (Implemented by Jeffrey
     Yasskin.)

   * To reduce memory usage, the garbage collector will now clear
     internal free lists when garbage-collecting the highest generation
     of objects.  This may return memory to the operating system sooner.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1631171

   (2) https://bugs.python.org/issue?@action=redirect&bpo=1700288

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1878

   (4) https://bugs.python.org/issue?@action=redirect&bpo=1819


File: python.info,  Node: Alterações no interpretador<2>,  Prev: Otimizações<14>,  Up: Outras mudanças na linguagem<15>

1.16.17.2 Alterações no interpretador
.....................................

Two command-line options have been reserved for use by other Python
implementations.  The *note -J: 1413. switch has been reserved for use
by Jython for Jython-specific options, such as switches that are passed
to the underlying JVM. *note -X: 176. has been reserved for options
specific to a particular implementation of Python such as CPython,
Jython, or IronPython.  If either option is used with Python 2.6, the
interpreter will report that the option isn’t currently used.

Python can now be prevented from writing ‘.pyc’ or ‘.pyo’ files by
supplying the *note -B: 1414. switch to the Python interpreter, or by
setting the *note PYTHONDONTWRITEBYTECODE: 1415. environment variable
before running the interpreter.  This setting is available to Python
programs as the ‘sys.dont_write_bytecode’ variable, and Python code can
change the value to modify the interpreter’s behaviour.  (Contributed by
Neal Norwitz and Georg Brandl.)

The encoding used for standard input, output, and standard error can be
specified by setting the *note PYTHONIOENCODING: 1040. environment
variable before running the interpreter.  The value should be a string
in the form ‘<encoding>’ or ‘<encoding>:<errorhandler>’.  The 'encoding'
part specifies the encoding’s name, e.g.  ‘utf-8’ or ‘latin-1’; the
optional 'errorhandler' part specifies what to do with characters that
can’t be handled by the encoding, and should be one of “error”,
“ignore”, or “replace”.  (Contributed by Martin von Löwis.)


File: python.info,  Node: Módulos Novos ou Aprimorados<2>,  Next: Deprecations and Removals,  Prev: Outras mudanças na linguagem<15>,  Up: O que há de novo no Python 2 6

1.16.18 Módulos Novos ou Aprimorados
------------------------------------

Como em todas os lançamentos, a biblioteca padrão do Python recebeu
diversas melhorias e correções de bugs.  Aqui está uma lista parcial das
mudanças mais notáveis, classificadas em ordem alfabética por nome do
módulo.  Consulte o arquivo ‘Misc/NEWS’ na árvore de código-fonte para
uma lista mais completa de alterações, ou procure nos logs do Subversion
para todos os detalhes.

   * Os módulos ‘asyncore’ e ‘asynchat’ estão sendo mantidos ativamente
     novamente e várias correções e correções foram aplicadas.  (Mantido
     por Josiah Carlson; veja bpo-1736190(1) para um patch.)

   * The ‘bsddb’ module also has a new maintainer, Jesús Cea Avión, and
     the package is now available as a standalone package.  The web page
     for the package is www.jcea.es/programacion/pybsddb.htm(2).  The
     plan is to remove the package from the standard library in Python
     3.0, because its pace of releases is much more frequent than
     Python’s.

     The ‘bsddb.dbshelve’ module now uses the highest pickling protocol
     available, instead of restricting itself to protocol 1.
     (Contributed by W. Barnes.)

   * The ‘cgi’ module will now read variables from the query string of
     an HTTP POST request.  This makes it possible to use form actions
     with URLs that include query strings such as
     “/cgi-bin/add.py?category=1”.  (Contributed by Alexandre Fiori and
     Nubis; bpo-1817(3).)

     The ‘parse_qs()’ and ‘parse_qsl()’ functions have been relocated
     from the ‘cgi’ module to the *note urlparse: 10a. module.  The
     versions still available in the ‘cgi’ module will trigger *note
     PendingDeprecationWarning: 8ce. messages in 2.6 (bpo-600362(4)).

   * The *note cmath: 18. module underwent extensive revision,
     contributed by Mark Dickinson and Christian Heimes.  Five new
     functions were added:

        * ‘polar()’ converts a complex number to polar form, returning
          the modulus and argument of the complex number.

        * ‘rect()’ does the opposite, turning a modulus, argument pair
          back into the corresponding complex number.

        * ‘phase()’ returns the argument (also called the angle) of a
          complex number.

        * ‘isnan()’ returns True if either the real or imaginary part of
          its argument is a NaN.

        * ‘isinf()’ returns True if either the real or imaginary part of
          its argument is infinite.

     The revisions also improved the numerical soundness of the *note
     cmath: 18. module.  For all functions, the real and imaginary parts
     of the results are accurate to within a few units of least
     precision (ulps) whenever possible.  See bpo-1381(5) for the
     details.  The branch cuts for ‘asinh()’, ‘atanh()’: and ‘atan()’
     have also been corrected.

     The tests for the module have been greatly expanded; nearly 2000
     new test cases exercise the algebraic functions.

     On IEEE 754 platforms, the *note cmath: 18. module now handles IEEE
     754 special values and floating-point exceptions in a manner
     consistent with Annex ‘G’ of the C99 standard.

   * A new data type in the *note collections: 1d. module:
     ‘namedtuple(typename, fieldnames)’ is a factory function that
     creates subclasses of the standard tuple whose fields are
     accessible by name as well as index.  For example:

          >>> var_type = collections.namedtuple('variable',
          ...             'id name type size')
          >>> # Names are separated by spaces or commas.
          >>> # 'id, name, type, size' would also work.
          >>> var_type._fields
          ('id', 'name', 'type', 'size')

          >>> var = var_type(1, 'frequency', 'int', 4)
          >>> print var[0], var.id    # Equivalent
          1 1
          >>> print var[2], var.type  # Equivalent
          int int
          >>> var._asdict()
          {'size': 4, 'type': 'int', 'id': 1, 'name': 'frequency'}
          >>> v2 = var._replace(name='amplitude')
          >>> v2
          variable(id=1, name='amplitude', type='int', size=4)

     Several places in the standard library that returned tuples have
     been modified to return ‘namedtuple()’ instances.  For example, the
     ‘Decimal.as_tuple()’ method now returns a named tuple with ‘sign’,
     ‘digits’, and ‘exponent’ fields.

     (Contributed by Raymond Hettinger.)

   * Another change to the *note collections: 1d. module is that the
     ‘deque’ type now supports an optional 'maxlen' parameter; if
     supplied, the deque’s size will be restricted to no more than
     'maxlen' items.  Adding more items to a full deque causes old items
     to be discarded.

          >>> from collections import deque
          >>> dq=deque(maxlen=3)
          >>> dq
          deque([], maxlen=3)
          >>> dq.append(1); dq.append(2); dq.append(3)
          >>> dq
          deque([1, 2, 3], maxlen=3)
          >>> dq.append(4)
          >>> dq
          deque([2, 3, 4], maxlen=3)

     (Contributed by Raymond Hettinger.)

   * The *note Cookie: 71. module’s *note Morsel: c1e. objects now
     support an *note httponly: 1417. attribute.  In some browsers.
     cookies with this attribute set cannot be accessed or manipulated
     by JavaScript code.  (Contributed by Arvin Schnell;
     bpo-1638033(6).)

   * A new window method in the *note curses: 2b. module, ‘chgat()’,
     changes the display attributes for a certain number of characters
     on a single line.  (Contributed by Fabian Kreutz.)

          # Boldface text starting at y=0,x=21
          # and affecting the rest of the line.
          stdscr.chgat(0, 21, curses.A_BOLD)

     The ‘Textbox’ class in the *note curses.textpad: 2e. module now
     supports editing in insert mode as well as overwrite mode.  Insert
     mode is enabled by supplying a true value for the 'insert_mode'
     parameter when creating the ‘Textbox’ instance.

   * The *note datetime: 30. module’s ‘strftime()’ methods now support a
     ‘%f’ format code that expands to the number of microseconds in the
     object, zero-padded on the left to six places.  (Contributed by
     Skip Montanaro; bpo-1158(7).)

   * The *note decimal: 36. module was updated to version 1.66 of the
     General Decimal Specification(8).  New features include some
     methods for some basic mathematical functions such as ‘exp()’ and
     ‘log10()’:

          >>> Decimal(1).exp()
          Decimal("2.718281828459045235360287471")
          >>> Decimal("2.7182818").ln()
          Decimal("0.9999999895305022877376682436")
          >>> Decimal(1000).log10()
          Decimal("3")

     The ‘as_tuple()’ method of ‘Decimal’ objects now returns a named
     tuple with ‘sign’, ‘digits’, and ‘exponent’ fields.

     (Implemented by Facundo Batista and Mark Dickinson.  Named tuple
     support added by Raymond Hettinger.)

   * The *note difflib: 37. module’s ‘SequenceMatcher’ class now returns
     named tuples representing matches, with ‘a’, ‘b’, and ‘size’
     attributes.  (Contributed by Raymond Hettinger.)

   * An optional ‘timeout’ parameter, specifying a timeout measured in
     seconds, was added to the *note ftplib.FTP: 900. class constructor
     as well as the ‘connect()’ method.  (Added by Facundo Batista.)
     Also, the ‘FTP’ class’s ‘storbinary()’ and ‘storlines()’ now take
     an optional 'callback' parameter that will be called with each
     block of data after the data has been sent.  (Contributed by Phil
     Schwartz; bpo-1221598(9).)

   * The ‘reduce()’ built-in function is also available in the *note
     functools: 5f. module.  In Python 3.0, the builtin has been dropped
     and ‘reduce()’ is only available from *note functools: 5f.;
     currently there are no plans to drop the builtin in the 2.x series.
     (Patched by Christian Heimes; bpo-1739906(10).)

   * When possible, the *note getpass: 62. module will now use
     ‘/dev/tty’ to print a prompt message and read the password, falling
     back to standard error and standard input.  If the password may be
     echoed to the terminal, a warning is printed before the prompt is
     displayed.  (Contributed by Gregory P. Smith.)

   * The *note glob.glob(): 29f. function can now return Unicode
     filenames if a Unicode path was used and Unicode filenames are
     matched within the directory.  (bpo-1001604(11))

   * A new function in the *note heapq: 69. module, ‘merge(iter1, iter2,
     ...)’, takes any number of iterables returning data in sorted
     order, and returns a new generator that returns the contents of all
     the iterators, also in sorted order.  For example:

          >>> list(heapq.merge([1, 3, 5, 9], [2, 8, 16]))
          [1, 2, 3, 5, 8, 9, 16]

     Another new function, ‘heappushpop(heap, item)’, pushes 'item' onto
     'heap', then pops off and returns the smallest item.  This is more
     efficient than making a call to ‘heappush()’ and then ‘heappop()’.

     *note heapq: 69. is now implemented to only use less-than
     comparison, instead of the less-than-or-equal comparison it
     previously used.  This makes *note heapq: 69.’s usage of a type
     match the *note list.sort(): be8. method.  (Contributed by Raymond
     Hettinger.)

   * An optional ‘timeout’ parameter, specifying a timeout measured in
     seconds, was added to the *note httplib.HTTPConnection: b53. and
     *note HTTPSConnection: b54. class constructors.  (Added by Facundo
     Batista.)

   * Most of the *note inspect: 7e. module’s functions, such as
     ‘getmoduleinfo()’ and ‘getargs()’, now return named tuples.  In
     addition to behaving like tuples, the elements of the return value
     can also be accessed as attributes.  (Contributed by Raymond
     Hettinger.)

     Some new functions in the module include ‘isgenerator()’,
     ‘isgeneratorfunction()’, and ‘isabstract()’.

   * The *note itertools: 81. module gained several new functions.

     ‘izip_longest(iter1, iter2, ...[, fillvalue])’ makes tuples from
     each of the elements; if some of the iterables are shorter than
     others, the missing values are set to 'fillvalue'.  For example:

          >>> tuple(itertools.izip_longest([1,2,3], [1,2,3,4,5]))
          ((1, 1), (2, 2), (3, 3), (None, 4), (None, 5))

     ‘product(iter1, iter2, ..., [repeat=N])’ returns the Cartesian
     product of the supplied iterables, a set of tuples containing every
     possible combination of the elements returned from each iterable.

          >>> list(itertools.product([1,2,3], [4,5,6]))
          [(1, 4), (1, 5), (1, 6),
           (2, 4), (2, 5), (2, 6),
           (3, 4), (3, 5), (3, 6)]

     The optional 'repeat' keyword argument is used for taking the
     product of an iterable or a set of iterables with themselves,
     repeated 'N' times.  With a single iterable argument, 'N'-tuples
     are returned:

          >>> list(itertools.product([1,2], repeat=3))
          [(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2),
           (2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2)]

     With two iterables, '2N'-tuples are returned.

          >>> list(itertools.product([1,2], [3,4], repeat=2))
          [(1, 3, 1, 3), (1, 3, 1, 4), (1, 3, 2, 3), (1, 3, 2, 4),
           (1, 4, 1, 3), (1, 4, 1, 4), (1, 4, 2, 3), (1, 4, 2, 4),
           (2, 3, 1, 3), (2, 3, 1, 4), (2, 3, 2, 3), (2, 3, 2, 4),
           (2, 4, 1, 3), (2, 4, 1, 4), (2, 4, 2, 3), (2, 4, 2, 4)]

     ‘combinations(iterable, r)’ returns sub-sequences of length 'r'
     from the elements of 'iterable'.

          >>> list(itertools.combinations('123', 2))
          [('1', '2'), ('1', '3'), ('2', '3')]
          >>> list(itertools.combinations('123', 3))
          [('1', '2', '3')]
          >>> list(itertools.combinations('1234', 3))
          [('1', '2', '3'), ('1', '2', '4'),
           ('1', '3', '4'), ('2', '3', '4')]

     ‘permutations(iter[, r])’ returns all the permutations of length
     'r' of the iterable’s elements.  If 'r' is not specified, it will
     default to the number of elements produced by the iterable.

          >>> list(itertools.permutations([1,2,3,4], 2))
          [(1, 2), (1, 3), (1, 4),
           (2, 1), (2, 3), (2, 4),
           (3, 1), (3, 2), (3, 4),
           (4, 1), (4, 2), (4, 3)]

     ‘itertools.chain(*iterables)’ is an existing function in *note
     itertools: 81. that gained a new constructor in Python 2.6.
     ‘itertools.chain.from_iterable(iterable)’ takes a single iterable
     that should return other iterables.  ‘chain()’ will then return all
     the elements of the first iterable, then all the elements of the
     second, and so on.

          >>> list(itertools.chain.from_iterable([[1,2,3], [4,5,6]]))
          [1, 2, 3, 4, 5, 6]

     (All contributed by Raymond Hettinger.)

   * The *note logging: 87. module’s ‘FileHandler’ class and its
     subclasses ‘WatchedFileHandler’, ‘RotatingFileHandler’, and
     ‘TimedRotatingFileHandler’ now have an optional 'delay' parameter
     to their constructors.  If 'delay' is true, opening of the log file
     is deferred until the first ‘emit()’ call is made.  (Contributed by
     Vinay Sajip.)

     ‘TimedRotatingFileHandler’ also has a 'utc' constructor parameter.
     If the argument is true, UTC time will be used in determining when
     midnight occurs and in generating filenames; otherwise local time
     will be used.

   * Several new functions were added to the *note math: 8e. module:

        * *note isinf(): 1418. and *note isnan(): 1419. determine
          whether a given float is a (positive or negative) infinity or
          a NaN (Not a Number), respectively.

        * *note copysign(): 141a. copies the sign bit of an IEEE 754
          number, returning the absolute value of 'x' combined with the
          sign bit of 'y'.  For example, ‘math.copysign(1, -0.0)’
          returns -1.0.  (Contributed by Christian Heimes.)

        * *note factorial(): 94e. computes the factorial of a number.
          (Contributed by Raymond Hettinger; bpo-2138(12).)

        * *note fsum(): 141b. adds up the stream of numbers from an
          iterable, and is careful to avoid loss of precision through
          using partial sums.  (Contributed by Jean Brouwers, Raymond
          Hettinger, and Mark Dickinson; bpo-2819(13).)

        * *note acosh(): 141c, *note asinh(): 141d. and *note atanh():
          141e. compute the inverse hyperbolic functions.

        * *note log1p(): 141f. returns the natural logarithm of '1+x'
          (base 'e').

        * ‘trunc()’ rounds a number toward zero, returning the closest
          ‘Integral’ that’s between the function’s argument and zero.
          Added as part of the backport of *note PEP 3141's type
          hierarchy for numbers: 1300.

   * The *note math: 8e. module has been improved to give more
     consistent behaviour across platforms, especially with respect to
     handling of floating-point exceptions and IEEE 754 special values.

     Whenever possible, the module follows the recommendations of the
     C99 standard about 754’s special values.  For example, ‘sqrt(-1.)’
     should now give a *note ValueError: 202. across almost all
     platforms, while ‘sqrt(float('NaN'))’ should return a NaN on all
     IEEE 754 platforms.  Where Annex ‘F’ of the C99 standard recommends
     signaling ‘divide-by-zero’ or ‘invalid’, Python will raise *note
     ValueError: 202.  Where Annex ‘F’ of the C99 standard recommends
     signaling ‘overflow’, Python will raise *note OverflowError: 885.
     (See bpo-711019(14) and bpo-1640(15).)

     (Contributed by Christian Heimes and Mark Dickinson.)

   * *note mmap: 20b. objects now have a ‘rfind()’ method that searches
     for a substring beginning at the end of the string and searching
     backwards.  The ‘find()’ method also gained an 'end' parameter
     giving an index at which to stop searching.  (Contributed by John
     Lenton.)

   * The *note operator: 9f. module gained a ‘methodcaller()’ function
     that takes a name and an optional set of arguments, returning a
     callable that will call the named function on any arguments passed
     to it.  For example:

          >>> # Equivalent to lambda s: s.replace('old', 'new')
          >>> replacer = operator.methodcaller('replace', 'old', 'new')
          >>> replacer('old wine in old bottles')
          'new wine in new bottles'

     (Contributed by Georg Brandl, after a suggestion by Gregory
     Petrosyan.)

     The ‘attrgetter()’ function now accepts dotted names and performs
     the corresponding attribute lookups:

          >>> inst_name = operator.attrgetter(
          ...        '__class__.__name__')
          >>> inst_name('')
          'str'
          >>> inst_name(help)
          '_Helper'

     (Contributed by Georg Brandl, after a suggestion by Barry Warsaw.)

   * The *note os: a1. module now wraps several new system calls.
     ‘fchmod(fd, mode)’ and ‘fchown(fd, uid, gid)’ change the mode and
     ownership of an opened file, and ‘lchmod(path, mode)’ changes the
     mode of a symlink.  (Contributed by Georg Brandl and Christian
     Heimes.)

     ‘chflags()’ and ‘lchflags()’ are wrappers for the corresponding
     system calls (where they’re available), changing the flags set on a
     file.  Constants for the flag values are defined in the *note stat:
     d1. module; some possible values include ‘UF_IMMUTABLE’ to signal
     the file may not be changed and ‘UF_APPEND’ to indicate that data
     can only be appended to the file.  (Contributed by M. Levinson.)

     ‘os.closerange(low, high)’ efficiently closes all file descriptors
     from 'low' to 'high', ignoring any errors and not including 'high'
     itself.  This function is now used by the *note subprocess: d6.
     module to make starting processes faster.  (Contributed by Georg
     Brandl; bpo-1663329(16).)

   * The ‘os.environ’ object’s ‘clear()’ method will now unset the
     environment variables using *note os.unsetenv(): 921. in addition
     to clearing the object’s keys.  (Contributed by Martin Horcicka;
     bpo-1181(17).)

   * The *note os.walk(): 4a9. function now has a ‘followlinks’
     parameter.  If set to True, it will follow symlinks pointing to
     directories and visit the directory’s contents.  For backward
     compatibility, the parameter’s default value is false.  Note that
     the function can fall into an infinite recursion if there’s a
     symlink that points to a parent directory.  (bpo-1273829(18))

   * In the *note os.path: a2. module, the ‘splitext()’ function has
     been changed to not split on leading period characters.  This
     produces better results when operating on Unix’s dot-files.  For
     example, ‘os.path.splitext('.ipython')’ now returns ‘('.ipython',
     '')’ instead of ‘('', '.ipython')’.  (bpo-1115886(19))

     A new function, ‘os.path.relpath(path, start='.')’, returns a
     relative path from the ‘start’ path, if it’s supplied, or from the
     current working directory to the destination ‘path’.  (Contributed
     by Richard Barran; bpo-1339796(20).)

     On Windows, *note os.path.expandvars(): 1420. will now expand
     environment variables given in the form “%var%”, and “~user” will
     be expanded into the user’s home directory path.  (Contributed by
     Josiah Carlson; bpo-957650(21).)

   * The Python debugger provided by the *note pdb: a5. module gained a
     new command: “run” restarts the Python program being debugged and
     can optionally take new command-line arguments for the program.
     (Contributed by Rocky Bernstein; bpo-1393667(22).)

   * The *note pdb.post_mortem(): 1421. function, used to begin
     debugging a traceback, will now use the traceback returned by *note
     sys.exc_info(): 68a. if no traceback is supplied.  (Contributed by
     Facundo Batista; bpo-1106316(23).)

   * The *note pickletools: a7. module now has an ‘optimize()’ function
     that takes a string containing a pickle and removes some unused
     opcodes, returning a shorter pickle that contains the same data
     structure.  (Contributed by Raymond Hettinger.)

   * A ‘get_data()’ function was added to the *note pkgutil: a9. module
     that returns the contents of resource files included with an
     installed Python package.  For example:

          >>> import pkgutil
          >>> print pkgutil.get_data('test', 'exception_hierarchy.txt')
          BaseException
           +-- SystemExit
           +-- KeyboardInterrupt
           +-- GeneratorExit
           +-- Exception
                +-- StopIteration
                +-- StandardError
           ...

     (Contributed by Paul Moore; bpo-2439(24).)

   * The ‘pyexpat’ module’s ‘Parser’ objects now allow setting their
     ‘buffer_size’ attribute to change the size of the buffer used to
     hold character data.  (Contributed by Achim Gaedke; bpo-1137(25).)

   * The ‘Queue’ module now provides queue variants that retrieve
     entries in different orders.  The ‘PriorityQueue’ class stores
     queued items in a heap and retrieves them in priority order, and
     ‘LifoQueue’ retrieves the most recently added entries first,
     meaning that it behaves like a stack.  (Contributed by Raymond
     Hettinger.)

   * The *note random: b8. module’s ‘Random’ objects can now be pickled
     on a 32-bit system and unpickled on a 64-bit system, and vice
     versa.  Unfortunately, this change also means that Python 2.6’s
     ‘Random’ objects can’t be unpickled correctly on earlier versions
     of Python.  (Contributed by Shawn Ligocki; bpo-1727780(26).)

     The new ‘triangular(low, high, mode)’ function returns random
     numbers following a triangular distribution.  The returned values
     are between 'low' and 'high', not including 'high' itself, and with
     'mode' as the most frequently occurring value in the distribution.
     (Contributed by Wladmir van der Laan and Raymond Hettinger;
     bpo-1681432(27).)

   * Long regular expression searches carried out by the *note re: b9.
     module will check for signals being delivered, so time-consuming
     searches can now be interrupted.  (Contributed by Josh Hoyt and
     Ralf Schmitt; bpo-846388(28).)

     The regular expression module is implemented by compiling bytecodes
     for a tiny regex-specific virtual machine.  Untrusted code could
     create malicious strings of bytecode directly and cause crashes, so
     Python 2.6 includes a verifier for the regex bytecode.
     (Contributed by Guido van Rossum from work for Google App Engine;
     bpo-3487(29).)

   * The *note rlcompleter: bd. module’s ‘Completer.complete()’ method
     will now ignore exceptions triggered while evaluating a name.
     (Fixed by Lorenz Quack; bpo-2250(30).)

   * The *note sched: bf. module’s ‘scheduler’ instances now have a
     read-only *note queue: b6. attribute that returns the contents of
     the scheduler’s queue, represented as a list of named tuples with
     the fields ‘(time, priority, action, argument)’.  (Contributed by
     Raymond Hettinger; bpo-1861(31).)

   * The *note select: c1. module now has wrapper functions for the
     Linux ‘epoll()’ and BSD ‘kqueue()’ system calls.  ‘modify()’ method
     was added to the existing ‘poll’ objects; ‘pollobj.modify(fd,
     eventmask)’ takes a file descriptor or file object and an event
     mask, modifying the recorded event mask for that file.
     (Contributed by Christian Heimes; bpo-1657(32).)

   * The *note shutil.copytree(): a33. function now has an optional
     'ignore' argument that takes a callable object.  This callable will
     receive each directory path and a list of the directory’s contents,
     and returns a list of names that will be ignored, not copied.

     The *note shutil: c5. module also provides an ‘ignore_patterns()’
     function for use with this new parameter.  ‘ignore_patterns()’
     takes an arbitrary number of glob-style patterns and returns a
     callable that will ignore any files and directories that match any
     of these patterns.  The following example copies a directory tree,
     but skips both ‘.svn’ directories and Emacs backup files, which
     have names ending with ‘~’:

          shutil.copytree('Doc/library', '/tmp/library',
                          ignore=shutil.ignore_patterns('*~', '.svn'))

     (Contributed by Tarek Ziadé; bpo-2663(33).)

   * Integrating signal handling with GUI handling event loops like
     those used by Tkinter or GTk+ has long been a problem; most
     software ends up polling, waking up every fraction of a second to
     check if any GUI events have occurred.  The *note signal: c6.
     module can now make this more efficient.  Calling
     ‘signal.set_wakeup_fd(fd)’ sets a file descriptor to be used; when
     a signal is received, a byte is written to that file descriptor.
     There’s also a C-level function, *note PySignal_SetWakeupFd():
     1422, for setting the descriptor.

     Event loops will use this by opening a pipe to create two
     descriptors, one for reading and one for writing.  The writable
     descriptor will be passed to ‘set_wakeup_fd()’, and the readable
     descriptor will be added to the list of descriptors monitored by
     the event loop via ‘select()’ or ‘poll()’.  On receiving a signal,
     a byte will be written and the main event loop will be woken up,
     avoiding the need to poll.

     (Contributed by Adam Olsen; bpo-1583(34).)

     The ‘siginterrupt()’ function is now available from Python code,
     and allows changing whether signals can interrupt system calls or
     not.  (Contributed by Ralf Schmitt.)

     The ‘setitimer()’ and ‘getitimer()’ functions have also been added
     (where they’re available).  ‘setitimer()’ allows setting interval
     timers that will cause a signal to be delivered to the process
     after a specified time, measured in wall-clock time, consumed
     process time, or combined process+system time.  (Contributed by
     Guilherme Polo; bpo-2240(35).)

   * The *note smtplib: ca. module now supports SMTP over SSL thanks to
     the addition of the ‘SMTP_SSL’ class.  This class supports an
     interface identical to the existing ‘SMTP’ class.  (Contributed by
     Monty Taylor.)  Both class constructors also have an optional
     ‘timeout’ parameter that specifies a timeout for the initial
     connection attempt, measured in seconds.  (Contributed by Facundo
     Batista.)

     An implementation of the LMTP protocol ( RFC 2033(36)) was also
     added to the module.  LMTP is used in place of SMTP when
     transferring e-mail between agents that don’t manage a mail queue.
     (LMTP implemented by Leif Hedstrom; bpo-957003(37).)

     ‘SMTP.starttls()’ now complies with RFC 3207(38) and forgets any
     knowledge obtained from the server not obtained from the TLS
     negotiation itself.  (Patch contributed by Bill Fenner;
     bpo-829951(39).)

   * The *note socket: cc. module now supports TIPC
     (‘https://tipc.sourceforge.net/’), a high-performance non-IP-based
     protocol designed for use in clustered environments.  TIPC
     addresses are 4- or 5-tuples.  (Contributed by Alberto Bertogli;
     bpo-1646(40).)

     A new function, ‘create_connection()’, takes an address and
     connects to it using an optional timeout value, returning the
     connected socket object.  This function also looks up the address’s
     type and connects to it using IPv4 or IPv6 as appropriate.
     Changing your code to use ‘create_connection()’ instead of
     ‘socket(socket.AF_INET, ...)’ may be all that’s required to make
     your code work with IPv6.

   * The base classes in the *note SocketServer: cd. module now support
     calling a *note handle_timeout(): 1366. method after a span of
     inactivity specified by the server’s *note timeout: 1365.
     attribute.  (Contributed by Michael Pomraning.)  The *note
     serve_forever(): 117e. method now takes an optional poll interval
     measured in seconds, controlling how often the server will check
     for a shutdown request.  (Contributed by Pedro Werneck and Jeffrey
     Yasskin; bpo-742598(41), bpo-1193577(42).)

   * The *note sqlite3: cf. module, maintained by Gerhard Häring, has
     been updated from version 2.3.2 in Python 2.5 to version 2.4.1.

   * The *note struct: d5. module now supports the C99 _Bool type, using
     the format character ‘'?'’.  (Contributed by David Remahl.)

   * The *note Popen: 199. objects provided by the *note subprocess: d6.
     module now have *note terminate(): 1423, *note kill(): 1424, and
     *note send_signal(): 1425. methods.  On Windows, ‘send_signal()’
     only supports the *note SIGTERM: 1426. signal, and all these
     methods are aliases for the Win32 API function
     ‘TerminateProcess()’.  (Contributed by Christian Heimes.)

   * A new variable in the *note sys: d9. module, ‘float_info’, is an
     object containing information derived from the ‘float.h’ file about
     the platform’s floating-point support.  Attributes of this object
     include ‘mant_dig’ (number of digits in the mantissa), ‘epsilon’
     (smallest difference between 1.0 and the next largest value
     representable), and several others.  (Contributed by Christian
     Heimes; bpo-1534(43).)

     Another new variable, ‘dont_write_bytecode’, controls whether
     Python writes any ‘.pyc’ or ‘.pyo’ files on importing a module.  If
     this variable is true, the compiled files are not written.  The
     variable is initially set on start-up by supplying the *note -B:
     1414. switch to the Python interpreter, or by setting the *note
     PYTHONDONTWRITEBYTECODE: 1415. environment variable before running
     the interpreter.  Python code can subsequently change the value of
     this variable to control whether bytecode files are written or not.
     (Contributed by Neal Norwitz and Georg Brandl.)

     Information about the command-line arguments supplied to the Python
     interpreter is available by reading attributes of a named tuple
     available as ‘sys.flags’.  For example, the ‘verbose’ attribute is
     true if Python was executed in verbose mode, ‘debug’ is true in
     debugging mode, etc.  These attributes are all read-only.
     (Contributed by Christian Heimes.)

     A new function, ‘getsizeof()’, takes a Python object and returns
     the amount of memory used by the object, measured in bytes.
     Built-in objects return correct results; third-party extensions may
     not, but can define a ‘__sizeof__()’ method to return the object’s
     size.  (Contributed by Robert Schuppenies; bpo-2898(44).)

     It’s now possible to determine the current profiler and tracer
     functions by calling *note sys.getprofile(): 1427. and *note
     sys.gettrace(): 1428.  (Contributed by Georg Brandl; bpo-1648(45).)

   * The *note tarfile: de. module now supports POSIX.1-2001 (pax)
     tarfiles in addition to the POSIX.1-1988 (ustar) and GNU tar
     formats that were already supported.  The default format is GNU
     tar; specify the ‘format’ parameter to open a file using a
     different format:

          tar = tarfile.open("output.tar", "w",
                             format=tarfile.PAX_FORMAT)

     The new ‘encoding’ and ‘errors’ parameters specify an encoding and
     an error handling scheme for character conversions.  ‘'strict'’,
     ‘'ignore'’, and ‘'replace'’ are the three standard ways Python can
     handle errors,; ‘'utf-8'’ is a special value that replaces bad
     characters with their UTF-8 representation.  (Character conversions
     occur because the PAX format supports Unicode filenames, defaulting
     to UTF-8 encoding.)

     The ‘TarFile.add()’ method now accepts an ‘exclude’ argument that’s
     a function that can be used to exclude certain filenames from an
     archive.  The function must take a filename and return true if the
     file should be excluded or false if it should be archived.  The
     function is applied to both the name initially passed to ‘add()’
     and to the names of files in recursively added directories.

     (All changes contributed by Lars Gustäbel).

   * An optional ‘timeout’ parameter was added to the ‘telnetlib.Telnet’
     class constructor, specifying a timeout measured in seconds.
     (Added by Facundo Batista.)

   * The *note tempfile.NamedTemporaryFile: 4c6. class usually deletes
     the temporary file it created when the file is closed.  This
     behaviour can now be changed by passing ‘delete=False’ to the
     constructor.  (Contributed by Damien Miller; bpo-1537850(46).)

     A new class, ‘SpooledTemporaryFile’, behaves like a temporary file
     but stores its data in memory until a maximum size is exceeded.  On
     reaching that limit, the contents will be written to an on-disk
     temporary file.  (Contributed by Dustin J. Mitchell.)

     The ‘NamedTemporaryFile’ and ‘SpooledTemporaryFile’ classes both
     work as context managers, so you can write ‘with
     tempfile.NamedTemporaryFile() as tmp: ...’.  (Contributed by
     Alexander Belopolsky; bpo-2021(47).)

   * The *note test.test_support: e4. module gained a number of context
     managers useful for writing tests.  *note EnvironmentVarGuard():
     1429. is a context manager that temporarily changes environment
     variables and automatically restores them to their old values.

     Another context manager, ‘TransientResource’, can surround calls to
     resources that may or may not be available; it will catch and
     ignore a specified list of exceptions.  For example, a network test
     may ignore certain failures when connecting to an external web
     site:

          with test_support.TransientResource(IOError,
                                          errno=errno.ETIMEDOUT):
              f = urllib.urlopen('https://sf.net')
              ...

     Finally, ‘check_warnings()’ resets the ‘warning’ module’s warning
     filters and returns an object that will record all warning messages
     triggered (bpo-3781(48)):

          with test_support.check_warnings() as wrec:
              warnings.simplefilter("always")
              # ... code that triggers a warning ...
              assert str(wrec.message) == "function is outdated"
              assert len(wrec.warnings) == 1, "Multiple warnings raised"

     (Contributed by Brett Cannon.)

   * The *note textwrap: ec. module can now preserve existing whitespace
     at the beginnings and ends of the newly created lines by specifying
     ‘drop_whitespace=False’ as an argument:

          >>> S = """This  sentence  has a bunch   of
          ...   extra   whitespace."""
          >>> print textwrap.fill(S, width=15)
          This  sentence
          has a bunch
          of    extra
          whitespace.
          >>> print textwrap.fill(S, drop_whitespace=False, width=15)
          This  sentence
            has a bunch
             of    extra
             whitespace.
          >>>

     (Contributed by Dwayne Bailey; bpo-1581073(49).)

   * The *note threading: ed. module API is being changed to use
     properties such as ‘daemon’ instead of ‘setDaemon()’ and
     ‘isDaemon()’ methods, and some methods have been renamed to use
     underscores instead of camel-case; for example, the ‘activeCount()’
     method is renamed to ‘active_count()’.  Both the 2.6 and 3.0
     versions of the module support the same properties and renamed
     methods, but don’t remove the old methods.  No date has been set
     for the deprecation of the old APIs in Python 3.x; the old APIs
     won’t be removed in any 2.x version.  (Carried out by several
     people, most notably Benjamin Peterson.)

     The *note threading: ed. module’s ‘Thread’ objects gained an
     ‘ident’ property that returns the thread’s identifier, a nonzero
     integer.  (Contributed by Gregory P. Smith; bpo-2871(50).)

   * The *note timeit: ef. module now accepts callables as well as
     strings for the statement being timed and for the setup code.  Two
     convenience functions were added for creating ‘Timer’ instances:
     ‘repeat(stmt, setup, time, repeat, number)’ and ‘timeit(stmt,
     setup, time, number)’ create an instance and call the corresponding
     method.  (Contributed by Erik Demaine; bpo-1533909(51).)

   * The ‘Tkinter’ module now accepts lists and tuples for options,
     separating the elements by spaces before passing the resulting
     value to Tcl/Tk.  (Contributed by Guilherme Polo; bpo-2906(52).)

   * The *note turtle: 101. module for turtle graphics was greatly
     enhanced by Gregor Lingl.  New features in the module include:

        * Better animation of turtle movement and rotation.

        * Control over turtle movement using the new ‘delay()’,
          ‘tracer()’, and ‘speed()’ methods.

        * The ability to set new shapes for the turtle, and to define a
          new coordinate system.

        * Turtles now have an ‘undo()’ method that can roll back
          actions.

        * Simple support for reacting to input events such as mouse and
          keyboard activity, making it possible to write simple games.

        * A ‘turtle.cfg’ file can be used to customize the starting
          appearance of the turtle’s screen.

        * The module’s docstrings can be replaced by new docstrings that
          have been translated into another language.

     (bpo-1513695(53))

   * An optional ‘timeout’ parameter was added to the *note
     urllib.urlopen: 293. function and the ‘urllib.ftpwrapper’ class
     constructor, as well as the *note urllib2.urlopen: 293. function.
     The parameter specifies a timeout measured in seconds.  For
     example:

          >>> u = urllib2.urlopen("http://slow.example.com",
                                  timeout=3)
          Traceback (most recent call last):
            ...
          urllib2.URLError: <urlopen error timed out>
          >>>

     (Added by Facundo Batista.)

   * The Unicode database provided by the *note unicodedata: 105. module
     has been updated to version 5.1.0.  (Updated by Martin von Löwis;
     bpo-3811(54).)

   * The *note warnings: 112. module’s ‘formatwarning()’ and
     ‘showwarning()’ gained an optional 'line' argument that can be used
     to supply the line of source code.  (Added as part of
     bpo-1631171(55), which re-implemented part of the *note warnings:
     112. module in C code.)

     A new function, ‘catch_warnings()’, is a context manager intended
     for testing purposes that lets you temporarily modify the warning
     filters and then restore their original values (bpo-3781(56)).

   * The XML-RPC *note SimpleXMLRPCServer: 12f. and *note
     DocXMLRPCServer: 12f. classes can now be prevented from immediately
     opening and binding to their socket by passing ‘False’ as the
     'bind_and_activate' constructor parameter.  This can be used to
     modify the instance’s ‘allow_reuse_address’ attribute before
     calling the ‘server_bind()’ and ‘server_activate()’ methods to open
     the socket and begin listening for connections.  (Contributed by
     Peter Parente; bpo-1599845(57).)

     ‘SimpleXMLRPCServer’ also has a ‘_send_traceback_header’ attribute;
     if true, the exception and formatted traceback are returned as HTTP
     headers “X-Exception” and “X-Traceback”.  This feature is for
     debugging purposes only and should not be used on production
     servers because the tracebacks might reveal passwords or other
     sensitive information.  (Contributed by Alan McIntyre as part of
     his project for Google’s Summer of Code 2007.)

   * The *note xmlrpclib: 12e. module no longer automatically converts
     *note datetime.date: 1cd. and *note datetime.time: 1ce. to the
     *note xmlrpclib.DateTime: 142a. type; the conversion semantics were
     not necessarily correct for all applications.  Code using
     ‘xmlrpclib’ should convert ‘date’ and *note time: 1ce. instances.
     (bpo-1330538(58)) The code can also handle dates before 1900
     (contributed by Ralf Schmitt; bpo-2014(59)) and 64-bit integers
     represented by using ‘<i8>’ in XML-RPC responses (contributed by
     Riku Lindblad; bpo-2985(60)).

   * The *note zipfile: 131. module’s ‘ZipFile’ class now has
     ‘extract()’ and ‘extractall()’ methods that will unpack a single
     file or all the files in the archive to the current directory, or
     to a specified directory:

          z = zipfile.ZipFile('python-251.zip')

          # Unpack a single file, writing it relative
          # to the /tmp directory.
          z.extract('Python/sysmodule.c', '/tmp')

          # Unpack all the files in the archive.
          z.extractall()

     (Contributed by Alan McIntyre; bpo-467924(61).)

     The *note open(): 51c, ‘read()’ and ‘extract()’ methods can now
     take either a filename or a ‘ZipInfo’ object.  This is useful when
     an archive accidentally contains a duplicated filename.
     (Contributed by Graham Horler; bpo-1775025(62).)

     Finally, *note zipfile: 131. now supports using Unicode filenames
     for archived files.  (Contributed by Alexey Borzenkov;
     bpo-1734346(63).)

* Menu:

* The ast module::
* The future_builtins module::
* The json module; JavaScript Object Notation: The json module JavaScript Object Notation.
* The plistlib module; A Property-List Parser: The plistlib module A Property-List Parser.
* ctypes Enhancements::
* Improved SSL Support::

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1736190

   (2) https://www.jcea.es/programacion/pybsddb.htm

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1817

   (4) https://bugs.python.org/issue?@action=redirect&bpo=600362

   (5) https://bugs.python.org/issue?@action=redirect&bpo=1381

   (6) https://bugs.python.org/issue?@action=redirect&bpo=1638033

   (7) https://bugs.python.org/issue?@action=redirect&bpo=1158

   (8) https://speleotrove.com/decimal/decarith.html

   (9) https://bugs.python.org/issue?@action=redirect&bpo=1221598

   (10) https://bugs.python.org/issue?@action=redirect&bpo=1739906

   (11) https://bugs.python.org/issue?@action=redirect&bpo=1001604

   (12) https://bugs.python.org/issue?@action=redirect&bpo=2138

   (13) https://bugs.python.org/issue?@action=redirect&bpo=2819

   (14) https://bugs.python.org/issue?@action=redirect&bpo=711019

   (15) https://bugs.python.org/issue?@action=redirect&bpo=1640

   (16) https://bugs.python.org/issue?@action=redirect&bpo=1663329

   (17) https://bugs.python.org/issue?@action=redirect&bpo=1181

   (18) https://bugs.python.org/issue?@action=redirect&bpo=1273829

   (19) https://bugs.python.org/issue?@action=redirect&bpo=1115886

   (20) https://bugs.python.org/issue?@action=redirect&bpo=1339796

   (21) https://bugs.python.org/issue?@action=redirect&bpo=957650

   (22) https://bugs.python.org/issue?@action=redirect&bpo=1393667

   (23) https://bugs.python.org/issue?@action=redirect&bpo=1106316

   (24) https://bugs.python.org/issue?@action=redirect&bpo=2439

   (25) https://bugs.python.org/issue?@action=redirect&bpo=1137

   (26) https://bugs.python.org/issue?@action=redirect&bpo=1727780

   (27) https://bugs.python.org/issue?@action=redirect&bpo=1681432

   (28) https://bugs.python.org/issue?@action=redirect&bpo=846388

   (29) https://bugs.python.org/issue?@action=redirect&bpo=3487

   (30) https://bugs.python.org/issue?@action=redirect&bpo=2250

   (31) https://bugs.python.org/issue?@action=redirect&bpo=1861

   (32) https://bugs.python.org/issue?@action=redirect&bpo=1657

   (33) https://bugs.python.org/issue?@action=redirect&bpo=2663

   (34) https://bugs.python.org/issue?@action=redirect&bpo=1583

   (35) https://bugs.python.org/issue?@action=redirect&bpo=2240

   (36) https://datatracker.ietf.org/doc/html/rfc2033.html

   (37) https://bugs.python.org/issue?@action=redirect&bpo=957003

   (38) https://datatracker.ietf.org/doc/html/rfc3207.html

   (39) https://bugs.python.org/issue?@action=redirect&bpo=829951

   (40) https://bugs.python.org/issue?@action=redirect&bpo=1646

   (41) https://bugs.python.org/issue?@action=redirect&bpo=742598

   (42) https://bugs.python.org/issue?@action=redirect&bpo=1193577

   (43) https://bugs.python.org/issue?@action=redirect&bpo=1534

   (44) https://bugs.python.org/issue?@action=redirect&bpo=2898

   (45) https://bugs.python.org/issue?@action=redirect&bpo=1648

   (46) https://bugs.python.org/issue?@action=redirect&bpo=1537850

   (47) https://bugs.python.org/issue?@action=redirect&bpo=2021

   (48) https://bugs.python.org/issue?@action=redirect&bpo=3781

   (49) https://bugs.python.org/issue?@action=redirect&bpo=1581073

   (50) https://bugs.python.org/issue?@action=redirect&bpo=2871

   (51) https://bugs.python.org/issue?@action=redirect&bpo=1533909

   (52) https://bugs.python.org/issue?@action=redirect&bpo=2906

   (53) https://bugs.python.org/issue?@action=redirect&bpo=1513695

   (54) https://bugs.python.org/issue?@action=redirect&bpo=3811

   (55) https://bugs.python.org/issue?@action=redirect&bpo=1631171

   (56) https://bugs.python.org/issue?@action=redirect&bpo=3781

   (57) https://bugs.python.org/issue?@action=redirect&bpo=1599845

   (58) https://bugs.python.org/issue?@action=redirect&bpo=1330538

   (59) https://bugs.python.org/issue?@action=redirect&bpo=2014

   (60) https://bugs.python.org/issue?@action=redirect&bpo=2985

   (61) https://bugs.python.org/issue?@action=redirect&bpo=467924

   (62) https://bugs.python.org/issue?@action=redirect&bpo=1775025

   (63) https://bugs.python.org/issue?@action=redirect&bpo=1734346


File: python.info,  Node: The ast module,  Next: The future_builtins module,  Up: Módulos Novos ou Aprimorados<2>

1.16.18.1 The ‘ast’ module
..........................

The *note ast: 8. module provides an Abstract Syntax Tree representation
of Python code, and Armin Ronacher contributed a set of helper functions
that perform a variety of common tasks.  These will be useful for HTML
templating packages, code analyzers, and similar tools that process
Python code.

The ‘parse()’ function takes an expression and returns an AST. The
‘dump()’ function outputs a representation of a tree, suitable for
debugging:

     import ast

     t = ast.parse("""
     d = {}
     for i in 'abcdefghijklm':
         d[i + i] = ord(i) - ord('a') + 1
     print d
     """)
     print ast.dump(t)

This outputs a deeply nested tree:

     Module(body=[
       Assign(targets=[
         Name(id='d', ctx=Store())
        ], value=Dict(keys=[], values=[]))
       For(target=Name(id='i', ctx=Store()),
           iter=Str(s='abcdefghijklm'), body=[
         Assign(targets=[
           Subscript(value=
             Name(id='d', ctx=Load()),
               slice=
               Index(value=
                 BinOp(left=Name(id='i', ctx=Load()), op=Add(),
                  right=Name(id='i', ctx=Load()))), ctx=Store())
          ], value=
          BinOp(left=
           BinOp(left=
            Call(func=
             Name(id='ord', ctx=Load()), args=[
               Name(id='i', ctx=Load())
              ], keywords=[], starargs=None, kwargs=None),
            op=Sub(), right=Call(func=
             Name(id='ord', ctx=Load()), args=[
               Str(s='a')
              ], keywords=[], starargs=None, kwargs=None)),
            op=Add(), right=Num(n=1)))
         ], orelse=[])
        Print(dest=None, values=[
          Name(id='d', ctx=Load())
        ], nl=True)
      ])

The ‘literal_eval()’ method takes a string or an AST representing a
literal expression, parses and evaluates it, and returns the resulting
value.  A literal expression is a Python expression containing only
strings, numbers, dictionaries, etc.  but no statements or function
calls.  If you need to evaluate an expression but cannot accept the
security risk of using an *note eval(): 180. call, ‘literal_eval()’ will
handle it safely:

     >>> literal = '("a", "b", {2:4, 3:8, 1:2})'
     >>> print ast.literal_eval(literal)
     ('a', 'b', {1: 2, 2: 4, 3: 8})
     >>> print ast.literal_eval('"a" + "b"')
     Traceback (most recent call last):
       ...
     ValueError: malformed string

The module also includes ‘NodeVisitor’ and ‘NodeTransformer’ classes for
traversing and modifying an AST, and functions for common
transformations such as changing line numbers.


File: python.info,  Node: The future_builtins module,  Next: The json module JavaScript Object Notation,  Prev: The ast module,  Up: Módulos Novos ou Aprimorados<2>

1.16.18.2 The ‘future_builtins’ module
......................................

Python 3.0 makes many changes to the repertoire of built-in functions,
and most of the changes can’t be introduced in the Python 2.x series
because they would break compatibility.  The ‘future_builtins’ module
provides versions of these built-in functions that can be imported when
writing 3.0-compatible code.

The functions in this module currently include:

   * ‘ascii(obj)’: equivalent to *note repr(): 800.  In Python 3.0,
     *note repr(): 800. will return a Unicode string, while *note
     ascii(): 142d. will return a pure ASCII bytestring.

   * ‘filter(predicate, iterable)’, ‘map(func, iterable1, ...)’: the 3.0
     versions return iterators, unlike the 2.x builtins which return
     lists.

   * ‘hex(value)’, ‘oct(value)’: instead of calling the ‘__hex__()’ or
     ‘__oct__()’ methods, these versions will call the ‘__index__()’
     method and convert the result to hexadecimal or octal.  *note
     oct(): 1311. will use the new ‘0o’ notation for its result.


File: python.info,  Node: The json module JavaScript Object Notation,  Next: The plistlib module A Property-List Parser,  Prev: The future_builtins module,  Up: Módulos Novos ou Aprimorados<2>

1.16.18.3 The ‘json’ module: JavaScript Object Notation
.......................................................

The new *note json: 82. module supports the encoding and decoding of
Python types in JSON (Javascript Object Notation).  JSON is a
lightweight interchange format often used in web applications.  For more
information about JSON, see ‘http://www.json.org’.

*note json: 82. comes with support for decoding and encoding most
built-in Python types.  The following example encodes and decodes a
dictionary:

     >>> import json
     >>> data = {"spam": "foo", "parrot": 42}
     >>> in_json = json.dumps(data) # Encode the data
     >>> in_json
     '{"parrot": 42, "spam": "foo"}'
     >>> json.loads(in_json) # Decode into a Python object
     {"spam": "foo", "parrot": 42}

It’s also possible to write your own decoders and encoders to support
more types.  Pretty-printing of the JSON strings is also supported.

*note json: 82. (originally called simplejson) was written by Bob
Ippolito.


File: python.info,  Node: The plistlib module A Property-List Parser,  Next: ctypes Enhancements,  Prev: The json module JavaScript Object Notation,  Up: Módulos Novos ou Aprimorados<2>

1.16.18.4 The ‘plistlib’ module: A Property-List Parser
.......................................................

The ‘.plist’ format is commonly used on Mac OS X to store basic data
types (numbers, strings, lists, and dictionaries) by serializing them
into an XML-based format.  It resembles the XML-RPC serialization of
data types.

Despite being primarily used on Mac OS X, the format has nothing
Mac-specific about it and the Python implementation works on any
platform that Python supports, so the *note plistlib: ab. module has
been promoted to the standard library.

Using the module is simple:

     import sys
     import plistlib
     import datetime

     # Create data structure
     data_struct = dict(lastAccessed=datetime.datetime.now(),
                        version=1,
                        categories=('Personal','Shared','Private'))

     # Create string containing XML.
     plist_str = plistlib.writePlistToString(data_struct)
     new_struct = plistlib.readPlistFromString(plist_str)
     print data_struct
     print new_struct

     # Write data structure to a file and read it back.
     plistlib.writePlist(data_struct, '/tmp/customizations.plist')
     new_struct = plistlib.readPlist('/tmp/customizations.plist')

     # read/writePlist accepts file-like objects as well as paths.
     plistlib.writePlist(data_struct, sys.stdout)


File: python.info,  Node: ctypes Enhancements,  Next: Improved SSL Support,  Prev: The plistlib module A Property-List Parser,  Up: Módulos Novos ou Aprimorados<2>

1.16.18.5 ctypes Enhancements
.............................

Thomas Heller continued to maintain and enhance the *note ctypes: 2a.
module.

*note ctypes: 2a. now supports a ‘c_bool’ datatype that represents the
C99 ‘bool’ type.  (Contributed by David Remahl; bpo-1649190(1).)

The *note ctypes: 2a. string, buffer and array types have improved
support for extended slicing syntax, where various combinations of
‘(start, stop, step)’ are supplied.  (Implemented by Thomas Wouters.)

All *note ctypes: 2a. data types now support ‘from_buffer()’ and
‘from_buffer_copy()’ methods that create a ctypes instance based on a
provided buffer object.  ‘from_buffer_copy()’ copies the contents of the
object, while ‘from_buffer()’ will share the same memory area.

A new calling convention tells *note ctypes: 2a. to clear the ‘errno’ or
Win32 LastError variables at the outset of each wrapped call.
(Implemented by Thomas Heller; bpo-1798(2).)

You can now retrieve the Unix ‘errno’ variable after a function call.
When creating a wrapped function, you can supply ‘use_errno=True’ as a
keyword parameter to the ‘DLL()’ function and then call the module-level
methods ‘set_errno()’ and ‘get_errno()’ to set and retrieve the error
value.

The Win32 LastError variable is similarly supported by the ‘DLL()’,
‘OleDLL()’, and ‘WinDLL()’ functions.  You supply ‘use_last_error=True’
as a keyword parameter and then call the module-level methods
‘set_last_error()’ and ‘get_last_error()’.

The ‘byref()’ function, used to retrieve a pointer to a ctypes instance,
now has an optional 'offset' parameter that is a byte count that will be
added to the returned pointer.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1649190

   (2) https://bugs.python.org/issue?@action=redirect&bpo=1798


File: python.info,  Node: Improved SSL Support,  Prev: ctypes Enhancements,  Up: Módulos Novos ou Aprimorados<2>

1.16.18.6 Improved SSL Support
..............................

Bill Janssen made extensive improvements to Python 2.6’s support for the
Secure Sockets Layer by adding a new module, *note ssl: d0, that’s built
atop the OpenSSL(1) library.  This new module provides more control over
the protocol negotiated, the X.509 certificates used, and has better
support for writing SSL servers (as opposed to clients) in Python.  The
existing SSL support in the *note socket: cc. module hasn’t been removed
and continues to work, though it will be removed in Python 3.0.

To use the new module, you must first create a TCP connection in the
usual way and then pass it to the ‘ssl.wrap_socket()’ function.  It’s
possible to specify whether a certificate is required, and to obtain
certificate info by calling the ‘getpeercert()’ method.

Ver também
..........

The documentation for the *note ssl: d0. module.

   ---------- Footnotes ----------

   (1) https://www.openssl.org/


File: python.info,  Node: Deprecations and Removals,  Next: Mudanças a construções e API C<9>,  Prev: Módulos Novos ou Aprimorados<2>,  Up: O que há de novo no Python 2 6

1.16.19 Deprecations and Removals
---------------------------------

   * String exceptions have been removed.  Attempting to use them raises
     a *note TypeError: 2c3.

   * Changes to the *note Exception: 9e2. interface as dictated by PEP
     352(1) continue to be made.  For 2.6, the ‘message’ attribute is
     being deprecated in favor of the *note args: 56c. attribute.

   * (3.0-warning mode) Python 3.0 will feature a reorganized standard
     library that will drop many outdated modules and rename others.
     Python 2.6 running in 3.0-warning mode will warn about these
     modules when they are imported.

     The list of deprecated modules is: ‘audiodev’, ‘bgenlocations’,
     ‘buildtools’, ‘bundlebuilder’, ‘Canvas’, ‘compiler’, ‘dircache’,
     ‘dl’, ‘fpformat’, ‘gensuitemodule’, ‘ihooks’, ‘imageop’, ‘imgfile’,
     ‘linuxaudiodev’, ‘mhlib’, ‘mimetools’, ‘multifile’, ‘new’, ‘pure’,
     ‘statvfs’, ‘sunaudiodev’, ‘test.testall’, and ‘toaiff’.

   * The ‘gopherlib’ module has been removed.

   * The ‘MimeWriter’ module and ‘mimify’ module have been deprecated;
     use the *note email: 3b. package instead.

   * The ‘md5’ module has been deprecated; use the *note hashlib: 68.
     module instead.

   * The ‘posixfile’ module has been deprecated; *note fcntl.lockf():
     1433. provides better locking.

   * The ‘popen2’ module has been deprecated; use the *note subprocess:
     d6. module.

   * The ‘rgbimg’ module has been removed.

   * The ‘sets’ module has been deprecated; it’s better to use the
     built-in *note set: 5d9. and *note frozenset: 5da. types.

   * The ‘sha’ module has been deprecated; use the *note hashlib: 68.
     module instead.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0352/


File: python.info,  Node: Mudanças a construções e API C<9>,  Next: Porting to Python 2 6,  Prev: Deprecations and Removals,  Up: O que há de novo no Python 2 6

1.16.20 Mudanças a construções e API C
--------------------------------------

As alterações no processo de construção do Python e na API C incluem:

   * Python now must be compiled with C89 compilers (after 19 years!).
     This means that the Python source tree has dropped its own
     implementations of ‘memmove()’ and ‘strerror()’, which are in the
     C89 standard library.

   * Python 2.6 can be built with Microsoft Visual Studio 2008 (version
     9.0), and this is the new default compiler.  See the ‘PCbuild’
     directory for the build files.  (Implemented by Christian Heimes.)

   * On Mac OS X, Python 2.6 can be compiled as a 4-way universal build.
     The ‘configure’ script can take a
     ‘--with-universal-archs=[32-bit|64-bit|all]’ switch, controlling
     whether the binaries are built for 32-bit architectures (x86,
     PowerPC), 64-bit (x86-64 and PPC-64), or both.  (Contributed by
     Ronald Oussoren.)

   * A new function added in Python 2.6.6, ‘PySys_SetArgvEx()’, sets the
     value of ‘sys.argv’ and can optionally update ‘sys.path’ to include
     the directory containing the script named by ‘sys.argv[0]’
     depending on the value of an 'updatepath' parameter.

     Esta função foi adicionada para fechar uma falha de segurança em
     aplicativos que incorporam Python.  A função antiga,
     ‘PySys_SetArgv()’, sempre atualizava ‘sys.path’, e às vezes
     adicionava o diretório atual.  Isso significava que, se você
     executasse uma aplicação incorporando Python em um diretório
     controlado por outra pessoa, os invasores poderiam colocar um
     módulo cavalo de Troia no diretório (digamos, um arquivo chamado
     ‘os.py’) que sua aplicação então usaria.  importar e executar.

     If you maintain a C/C++ application that embeds Python, check
     whether you’re calling ‘PySys_SetArgv()’ and carefully consider
     whether the application should be using ‘PySys_SetArgvEx()’ with
     'updatepath' set to false.  Note that using this function will
     break compatibility with Python versions 2.6.5 and earlier; if you
     have to continue working with earlier versions, you can leave the
     call to ‘PySys_SetArgv()’ alone and call
     ‘PyRun_SimpleString("sys.path.pop(0)\n")’ afterwards to discard the
     first ‘sys.path’ component.

     Security issue reported as CVE 2008-5983(1); discussed in
     gh-50003(2), and fixed by Antoine Pitrou.

   * The BerkeleyDB module now has a C API object, available as
     ‘bsddb.db.api’.  This object can be used by other C extensions that
     wish to use the ‘bsddb’ module for their own purposes.
     (Contributed by Duncan Grisby.)

   * The new buffer interface, previously described in *note the PEP
     3118 section: 13fb, adds *note PyObject_GetBuffer(): 399. and *note
     PyBuffer_Release(): 39a, as well as a few other functions.

   * Python’s use of the C stdio library is now thread-safe, or at least
     as thread-safe as the underlying library is.  A long-standing
     potential bug occurred if one thread closed a file object while
     another thread was reading from or writing to the object.  In 2.6
     file objects have a reference count, manipulated by the
     ‘PyFile_IncUseCount()’ and ‘PyFile_DecUseCount()’ functions.  File
     objects can’t be closed unless the reference count is zero.
     ‘PyFile_IncUseCount()’ should be called while the GIL is still
     held, before carrying out an I/O operation using the ‘FILE *’
     pointer, and ‘PyFile_DecUseCount()’ should be called immediately
     after the GIL is re-acquired.  (Contributed by Antoine Pitrou and
     Gregory P. Smith.)

   * Importing modules simultaneously in two different threads no longer
     deadlocks; it will now raise an *note ImportError: 419.  A new API
     function, *note PyImport_ImportModuleNoBlock(): 3bd, will look for
     a module in ‘sys.modules’ first, then try to import it after
     acquiring an import lock.  If the import lock is held by another
     thread, an *note ImportError: 419. is raised.  (Contributed by
     Christian Heimes.)

   * Several functions return information about the platform’s
     floating-point support.  *note PyFloat_GetMax(): 1435. returns the
     maximum representable floating-point value, and *note
     PyFloat_GetMin(): 1436. returns the minimum positive value.  *note
     PyFloat_GetInfo(): 1437. returns an object containing more
     information from the ‘float.h’ file, such as ‘"mant_dig"’ (number
     of digits in the mantissa), ‘"epsilon"’ (smallest difference
     between 1.0 and the next largest value representable), and several
     others.  (Contributed by Christian Heimes; bpo-1534(3).)

   * C functions and methods that use *note PyComplex_AsCComplex():
     1438. will now accept arguments that have a ‘__complex__()’ method.
     In particular, the functions in the *note cmath: 18. module will
     now accept objects with this method.  This is a backport of a
     Python 3.0 change.  (Contributed by Mark Dickinson;
     bpo-1675423(4).)

   * Python’s C API now includes two functions for case-insensitive
     string comparisons, ‘PyOS_stricmp(char*, char*)’ and
     ‘PyOS_strnicmp(char*, char*, Py_ssize_t)’.  (Contributed by
     Christian Heimes; bpo-1635(5).)

   * Many C extensions define their own little macro for adding integers
     and strings to the module’s dictionary in the ‘init*’ function.
     Python 2.6 finally defines standard macros for adding values to a
     module, *note PyModule_AddStringMacro: 1439. and *note
     PyModule_AddIntMacro(): 143a.  (Contributed by Christian Heimes.)

   * Some macros were renamed in both 3.0 and 2.6 to make it clearer
     that they are macros, not functions.  ‘Py_Size()’ became *note
     Py_SIZE(): 782, ‘Py_Type()’ became *note Py_TYPE(): 780, and
     ‘Py_Refcnt()’ became *note Py_REFCNT(): 8ae.  The mixed-case macros
     are still available in Python 2.6 for backward compatibility.
     (bpo-1629(6))

   * Distutils now places C extensions it builds in a different
     directory when running on a debug version of Python.  (Contributed
     by Collin Winter; bpo-1530959(7).)

   * Several basic data types, such as integers and strings, maintain
     internal free lists of objects that can be re-used.  The data
     structures for these free lists now follow a naming convention: the
     variable is always named ‘free_list’, the counter is always named
     ‘numfree’, and a macro ‘Py<typename>_MAXFREELIST’ is always
     defined.

   * A new Makefile target, “make patchcheck”, prepares the Python
     source tree for making a patch: it fixes trailing whitespace in all
     modified ‘.py’ files, checks whether the documentation has been
     changed, and reports whether the ‘Misc/ACKS’ and ‘Misc/NEWS’ files
     have been updated.  (Contributed by Brett Cannon.)

     Another new target, “make profile-opt”, compiles a Python binary
     using GCC’s profile-guided optimization.  It compiles Python with
     profiling enabled, runs the test suite to obtain a set of profiling
     results, and then compiles using these results for optimization.
     (Contributed by Gregory P. Smith.)

* Menu:

* Alterações específicas da porta; Windows: Alterações específicas da porta Windows<2>.
* Alterações específicas da porta; Mac OS X: Alterações específicas da porta Mac OS X<2>.
* Port-Specific Changes; IRIX: Port-Specific Changes IRIX.

   ---------- Footnotes ----------

   (1) https://www.cve.org/CVERecord?id=CVE-2008-5983

   (2) https://github.com/python/cpython/issues/50003

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1534

   (4) https://bugs.python.org/issue?@action=redirect&bpo=1675423

   (5) https://bugs.python.org/issue?@action=redirect&bpo=1635

   (6) https://bugs.python.org/issue?@action=redirect&bpo=1629

   (7) https://bugs.python.org/issue?@action=redirect&bpo=1530959


File: python.info,  Node: Alterações específicas da porta Windows<2>,  Next: Alterações específicas da porta Mac OS X<2>,  Up: Mudanças a construções e API C<9>

1.16.20.1 Alterações específicas da porta: Windows
..................................................

   * The support for Windows 95, 98, ME and NT4 has been dropped.
     Python 2.6 requires at least Windows 2000 SP4.

   * The new default compiler on Windows is Visual Studio 2008 (version
     9.0).  The build directories for Visual Studio 2003 (version 7.1)
     and 2005 (version 8.0) were moved into the PC/ directory.  The new
     ‘PCbuild’ directory supports cross compilation for X64, debug
     builds and Profile Guided Optimization (PGO). PGO builds are
     roughly 10% faster than normal builds.  (Contributed by Christian
     Heimes with help from Amaury Forgeot d’Arc and Martin von Löwis.)

   * The *note msvcrt: 93. module now supports both the normal and wide
     char variants of the console I/O API. The *note getwch(): 143c.
     function reads a keypress and returns a Unicode value, as does the
     *note getwche(): 143d. function.  The *note putwch(): 143e.
     function takes a Unicode character and writes it to the console.
     (Contributed by Christian Heimes.)

   * *note os.path.expandvars(): 1420. will now expand environment
     variables in the form “%var%”, and “~user” will be expanded into
     the user’s home directory path.  (Contributed by Josiah Carlson;
     bpo-957650(1).)

   * The *note socket: cc. module’s socket objects now have an *note
     ioctl(): cf3. method that provides a limited interface to the
     ‘WSAIoctl()’ system interface.

   * The *note _winreg: 116. module now has a function, *note
     ExpandEnvironmentStrings(): 143f, that expands environment variable
     references such as ‘%NAME%’ in an input string.  The handle objects
     provided by this module now support the context protocol, so they
     can be used in *note with: 5d2. statements.  (Contributed by
     Christian Heimes.)

     *note _winreg: 116. also has better support for x64 systems,
     exposing the *note DisableReflectionKey(): 13ab, *note
     EnableReflectionKey(): 13ac, and *note QueryReflectionKey(): 13ad.
     functions, which enable and disable registry reflection for 32-bit
     processes running on 64-bit systems.  (bpo-1753245(2))

   * The ‘msilib’ module’s ‘Record’ object gained ‘GetInteger()’ and
     ‘GetString()’ methods that return field values as an integer or a
     string.  (Contributed by Floris Bruynooghe; bpo-2125(3).)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=957650

   (2) https://bugs.python.org/issue?@action=redirect&bpo=1753245

   (3) https://bugs.python.org/issue?@action=redirect&bpo=2125


File: python.info,  Node: Alterações específicas da porta Mac OS X<2>,  Next: Port-Specific Changes IRIX,  Prev: Alterações específicas da porta Windows<2>,  Up: Mudanças a construções e API C<9>

1.16.20.2 Alterações específicas da porta: Mac OS X
...................................................

   * When compiling a framework build of Python, you can now specify the
     framework name to be used by providing the ‘--with-framework-name=’
     option to the ‘configure’ script.

   * The ‘macfs’ module has been removed.  This in turn required the
     ‘macostools.touched()’ function to be removed because it depended
     on the ‘macfs’ module.  (bpo-1490190(1))

   * Many other Mac OS modules have been deprecated and will be removed
     in Python 3.0: ‘_builtinSuites’, ‘aepack’, ‘aetools’, ‘aetypes’,
     ‘applesingle’, ‘appletrawmain’, ‘appletrunner’, ‘argvemulator’,
     ‘Audio_mac’, ‘autoGIL’, ‘Carbon’, ‘cfmfile’, ‘CodeWarrior’,
     ‘ColorPicker’, ‘EasyDialogs’, ‘Explorer’, ‘Finder’, ‘FrameWork’,
     ‘findertools’, ‘ic’, ‘icglue’, ‘icopen’, ‘macerrors’, ‘MacOS’,
     ‘macfs’, ‘macostools’, ‘macresource’, ‘MiniAEFrame’, ‘Nav’,
     ‘Netscape’, ‘OSATerminology’, ‘pimp’, ‘PixMapWrapper’, ‘StdSuites’,
     ‘SystemEvents’, ‘Terminal’, and ‘terminalcommand’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1490190


File: python.info,  Node: Port-Specific Changes IRIX,  Prev: Alterações específicas da porta Mac OS X<2>,  Up: Mudanças a construções e API C<9>

1.16.20.3 Port-Specific Changes: IRIX
.....................................

A number of old IRIX-specific modules were deprecated and will be
removed in Python 3.0: ‘al’ and ‘AL’, ‘cd’, ‘cddb’, ‘cdplayer’, ‘CL’ and
‘cl’, ‘DEVICE’, ‘ERRNO’, ‘FILE’, ‘FL’ and ‘fl’, ‘flp’, ‘fm’, ‘GET’,
‘GLWS’, ‘GL’ and ‘gl’, ‘IN’, ‘IOCTL’, ‘jpeg’, ‘panelparser’, ‘readcd’,
‘SV’ and ‘sv’, ‘torgb’, ‘videoreader’, and ‘WAIT’.


File: python.info,  Node: Porting to Python 2 6,  Next: Reconhecimentos<2>,  Prev: Mudanças a construções e API C<9>,  Up: O que há de novo no Python 2 6

1.16.21 Porting to Python 2.6
-----------------------------

Esta seção lista as alterações descritas anteriormente e outras
correções que podem exigir alterações no seu código.

   * Classes that aren’t supposed to be hashable should set ‘__hash__ =
     None’ in their definitions to indicate the fact.

   * String exceptions have been removed.  Attempting to use them raises
     a *note TypeError: 2c3.

   * The ‘__init__()’ method of *note collections.deque: 5dc. now clears
     any existing contents of the deque before adding elements from the
     iterable.  This change makes the behavior match ‘list.__init__()’.

   * *note object.__init__(): 6b0. previously accepted arbitrary
     arguments and keyword arguments, ignoring them.  In Python 2.6,
     this is no longer allowed and will result in a *note TypeError:
     2c3.  This will affect ‘__init__()’ methods that end up calling the
     corresponding method on *note object: a96. (perhaps through using
     *note super(): 4db.).  See bpo-1683368(1) for discussion.

   * The ‘Decimal’ constructor now accepts leading and trailing
     whitespace when passed a string.  Previously it would raise an
     ‘InvalidOperation’ exception.  On the other hand, the
     ‘create_decimal()’ method of ‘Context’ objects now explicitly
     disallows extra whitespace, raising a ‘ConversionSyntax’ exception.

   * Due to an implementation accident, if you passed a file path to the
     built-in *note __import__(): 8da. function, it would actually
     import the specified file.  This was never intended to work,
     however, and the implementation now explicitly checks for this case
     and raises an *note ImportError: 419.

   * C API: the *note PyImport_Import(): 1443. and *note
     PyImport_ImportModule(): 3be. functions now default to absolute
     imports, not relative imports.  This will affect C extensions that
     import other modules.

   * C API: extension data types that shouldn’t be hashable should
     define their ‘tp_hash’ slot to *note PyObject_HashNotImplemented():
     140d.

   * The *note socket: cc. module exception *note socket.error: 108e.
     now inherits from *note IOError: 108b.  Previously it wasn’t a
     subclass of ‘StandardError’ but now it is, through *note IOError:
     108b.  (Implemented by Gregory P. Smith; bpo-1706815(2).)

   * The *note xmlrpclib: 12e. module no longer automatically converts
     *note datetime.date: 1cd. and *note datetime.time: 1ce. to the
     *note xmlrpclib.DateTime: 142a. type; the conversion semantics were
     not necessarily correct for all applications.  Code using
     ‘xmlrpclib’ should convert ‘date’ and *note time: 1ce. instances.
     (bpo-1330538(3))

   * (3.0-warning mode) The *note Exception: 9e2. class now warns when
     accessed using slicing or index access; having *note Exception:
     9e2. behave like a tuple is being phased out.

   * (3.0-warning mode) inequality comparisons between two dictionaries
     or two objects that don’t implement comparison methods are reported
     as warnings.  ‘dict1 == dict2’ still works, but ‘dict1 < dict2’ is
     being phased out.

     Comparisons between cells, which are an implementation detail of
     Python’s scoping rules, also cause warnings because such
     comparisons are forbidden entirely in 3.0.

Para aplicações que incorporam Python:

   * The ‘PySys_SetArgvEx()’ function was added in Python 2.6.6, letting
     applications close a security hole when the existing
     ‘PySys_SetArgv()’ function was used.  Check whether you’re calling
     ‘PySys_SetArgv()’ and carefully consider whether the application
     should be using ‘PySys_SetArgvEx()’ with 'updatepath' set to false.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1683368

   (2) https://bugs.python.org/issue?@action=redirect&bpo=1706815

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1330538


File: python.info,  Node: Reconhecimentos<2>,  Prev: Porting to Python 2 6,  Up: O que há de novo no Python 2 6

1.16.22 Reconhecimentos
-----------------------

The author would like to thank the following people for offering
suggestions, corrections and assistance with various drafts of this
article: Georg Brandl, Steve Brown, Nick Coghlan, Ralph Corderoy, Jim
Jewett, Kent Johnson, Chris Lambacher, Martin Michlmayr, Antoine Pitrou,
Brian Warner.


File: python.info,  Node: What’s New in Python 2 5,  Next: What’s New in Python 2 4,  Prev: O que há de novo no Python 2 6,  Up: O que há de novo no Python

1.17 What’s New in Python 2.5
=============================


Autor: A.M. Kuchling

This article explains the new features in Python 2.5.  The final release
of Python 2.5 is scheduled for August 2006; PEP 356(1) describes the
planned release schedule.  Python 2.5 was released on September 19,
2006.

The changes in Python 2.5 are an interesting mix of language and library
improvements.  The library enhancements will be more important to
Python’s user community, I think, because several widely useful packages
were added.  New modules include ElementTree for XML processing
(‘xml.etree’), the SQLite database module (‘sqlite’), and the *note
ctypes: 2a. module for calling C functions.

The language changes are of middling significance.  Some pleasant new
features were added, but most of them aren’t features that you’ll use
every day.  Conditional expressions were finally added to the language
using a novel syntax; see section *note PEP 308; Conditional
Expressions: 1449.  The new ‘*note with: 5d2.’ statement will make
writing cleanup code easier (section *note PEP 343; The ‘with’
statement: 144a.).  Values can now be passed into generators (section
*note PEP 342; New Generator Features: 144b.).  Imports are now visible
as either absolute or relative (section *note PEP 328; Absolute and
Relative Imports: 144c.).  Some corner cases of exception handling are
handled better (section *note PEP 341; Unified try/except/finally:
144d.).  All these improvements are worthwhile, but they’re improvements
to one specific language feature or another; none of them are broad
modifications to Python’s semantics.

As well as the language and library additions, other improvements and
bugfixes were made throughout the source tree.  A search through the SVN
change logs finds there were 353 patches applied and 458 bugs fixed
between Python 2.4 and 2.5.  (Both figures are likely to be
underestimates.)

This article doesn’t try to be a complete specification of the new
features; instead changes are briefly introduced using helpful examples.
For full details, you should always refer to the documentation for
Python 2.5 at ‘https://docs.python.org’.  If you want to understand the
complete implementation and design rationale, refer to the PEP for a
particular new feature.

Comments, suggestions, and error reports for this document are welcome;
please e-mail them to the author or open a bug in the Python bug
tracker.

* Menu:

* PEP 308; Conditional Expressions: PEP 308 Conditional Expressions.
* PEP 309; Partial Function Application: PEP 309 Partial Function Application.
* PEP 314; Metadata for Python Software Packages v1.1: PEP 314 Metadata for Python Software Packages v1 1.
* PEP 328; Absolute and Relative Imports: PEP 328 Absolute and Relative Imports.
* PEP 338; Executing Modules as Scripts: PEP 338 Executing Modules as Scripts.
* PEP 341; Unified try/except/finally: PEP 341 Unified try/except/finally.
* PEP 342; New Generator Features: PEP 342 New Generator Features.
* PEP 343; The ‘with’ statement: PEP 343 The ‘with’ statement<2>.
* PEP 352; Exceptions as New-Style Classes: PEP 352 Exceptions as New-Style Classes.
* PEP 353; Using ssize_t as the index type: PEP 353 Using ssize_t as the index type.
* PEP 357; The ‘__index__’ method: PEP 357 The ‘__index__’ method.
* Outras mudanças na linguagem: Outras mudanças na linguagem<16>.
* New, Improved, and Removed Modules: New Improved and Removed Modules.
* Mudanças a construções e API C: Mudanças a construções e API C<10>.
* Porting to Python 2.5: Porting to Python 2 5.
* Reconhecimentos: Reconhecimentos<3>.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0356/


File: python.info,  Node: PEP 308 Conditional Expressions,  Next: PEP 309 Partial Function Application,  Up: What’s New in Python 2 5

1.17.1 PEP 308: Conditional Expressions
---------------------------------------

For a long time, people have been requesting a way to write conditional
expressions, which are expressions that return value A or value B
depending on whether a Boolean value is true or false.  A conditional
expression lets you write a single assignment statement that has the
same effect as the following:

     if condition:
         x = true_value
     else:
         x = false_value

There have been endless tedious discussions of syntax on both python-dev
and comp.lang.python.  A vote was even held that found the majority of
voters wanted conditional expressions in some form, but there was no
syntax that was preferred by a clear majority.  Candidates included C’s
‘cond ? true_v : false_v’, ‘if cond then true_v else false_v’, and 16
other variations.

Guido van Rossum eventually chose a surprising syntax:

     x = true_value if condition else false_value

Evaluation is still lazy as in existing Boolean expressions, so the
order of evaluation jumps around a bit.  The 'condition' expression in
the middle is evaluated first, and the 'true_value' expression is
evaluated only if the condition was true.  Similarly, the 'false_value'
expression is only evaluated when the condition is false.

This syntax may seem strange and backwards; why does the condition go in
the 'middle' of the expression, and not in the front as in C’s ‘c ? x :
y’?  The decision was checked by applying the new syntax to the modules
in the standard library and seeing how the resulting code read.  In many
cases where a conditional expression is used, one value seems to be the
‘common case’ and one value is an ‘exceptional case’, used only on rarer
occasions when the condition isn’t met.  The conditional syntax makes
this pattern a bit more obvious:

     contents = ((doc + '\n') if doc else '')

I read the above statement as meaning “here 'contents' is usually
assigned a value of ‘doc+'\n'’; sometimes 'doc' is empty, in which
special case an empty string is returned.” I doubt I will use
conditional expressions very often where there isn’t a clear common and
uncommon case.

There was some discussion of whether the language should require
surrounding conditional expressions with parentheses.  The decision was
made to 'not' require parentheses in the Python language’s grammar, but
as a matter of style I think you should always use them.  Consider these
two statements:

     # First version -- no parens
     level = 1 if logging else 0

     # Second version -- with parens
     level = (1 if logging else 0)

In the first version, I think a reader’s eye might group the statement
into ‘level = 1’, ‘if logging’, ‘else 0’, and think that the condition
decides whether the assignment to 'level' is performed.  The second
version reads better, in my opinion, because it makes it clear that the
assignment is always performed and the choice is being made between two
values.

Another reason for including the brackets: a few odd combinations of
list comprehensions and lambdas could look like incorrect conditional
expressions.  See PEP 308(1) for some examples.  If you put parentheses
around your conditional expressions, you won’t run into this case.

Ver também
..........

PEP 308(2) - Conditional Expressions

     PEP written by Guido van Rossum and Raymond D. Hettinger;
     implemented by Thomas Wouters.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0308/

   (2) https://peps.python.org/pep-0308/


File: python.info,  Node: PEP 309 Partial Function Application,  Next: PEP 314 Metadata for Python Software Packages v1 1,  Prev: PEP 308 Conditional Expressions,  Up: What’s New in Python 2 5

1.17.2 PEP 309: Partial Function Application
--------------------------------------------

The *note functools: 5f. module is intended to contain tools for
functional-style programming.

One useful tool in this module is the ‘partial()’ function.  For
programs written in a functional style, you’ll sometimes want to
construct variants of existing functions that have some of the
parameters filled in.  Consider a Python function ‘f(a, b, c)’; you
could create a new function ‘g(b, c)’ that was equivalent to ‘f(1, b,
c)’.  This is called “partial function application”.

‘partial()’ takes the arguments ‘(function, arg1, arg2, ...
kwarg1=value1, kwarg2=value2)’.  The resulting object is callable, so
you can just call it to invoke 'function' with the filled-in arguments.

Aqui está um pequeno mas bem realístico exemplo:

     import functools

     def log (message, subsystem):
         "Write the contents of 'message' to the specified subsystem."
         print '%s: %s' % (subsystem, message)
         ...

     server_log = functools.partial(log, subsystem='server')
     server_log('Unable to open socket')

Here’s another example, from a program that uses PyGTK. Here a
context-sensitive pop-up menu is being constructed dynamically.  The
callback provided for the menu option is a partially applied version of
the ‘open_item()’ method, where the first argument has been provided.

     ...
     class Application:
         def open_item(self, path):
            ...
         def init (self):
             open_func = functools.partial(self.open_item, item_path)
             popup_menu.append( ("Open", open_func, 1) )

Another function in the *note functools: 5f. module is the
‘update_wrapper(wrapper, wrapped)’ function that helps you write
well-behaved decorators.  ‘update_wrapper()’ copies the name, module,
and docstring attribute to a wrapper function so that tracebacks inside
the wrapped function are easier to understand.  For example, you might
write:

     def my_decorator(f):
         def wrapper(*args, **kwds):
             print 'Calling decorated function'
             return f(*args, **kwds)
         functools.update_wrapper(wrapper, f)
         return wrapper

‘wraps()’ is a decorator that can be used inside your own decorators to
copy the wrapped function’s information.  An alternate version of the
previous example would be:

     def my_decorator(f):
         @functools.wraps(f)
         def wrapper(*args, **kwds):
             print 'Calling decorated function'
             return f(*args, **kwds)
         return wrapper

Ver também
..........

PEP 309(1) - Partial Function Application

     PEP proposed and written by Peter Harris; implemented by Hye-Shik
     Chang and Nick Coghlan, with adaptations by Raymond Hettinger.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0309/


File: python.info,  Node: PEP 314 Metadata for Python Software Packages v1 1,  Next: PEP 328 Absolute and Relative Imports,  Prev: PEP 309 Partial Function Application,  Up: What’s New in Python 2 5

1.17.3 PEP 314: Metadata for Python Software Packages v1.1
----------------------------------------------------------

Some simple dependency support was added to Distutils.  The ‘setup()’
function now has ‘requires’, ‘provides’, and ‘obsoletes’ keyword
parameters.  When you build a source distribution using the ‘sdist’
command, the dependency information will be recorded in the ‘PKG-INFO’
file.

Another new keyword parameter is ‘download_url’, which should be set to
a URL for the package’s source code.  This means it’s now possible to
look up an entry in the package index, determine the dependencies for a
package, and download the required packages.

     VERSION = '1.0'
     setup(name='PyPackage',
           version=VERSION,
           requires=['numarray', 'zlib (>=1.1.4)'],
           obsoletes=['OldPackage']
           download_url=('http://www.example.com/pypackage/dist/pkg-%s.tar.gz'
                         % VERSION),
          )

Another new enhancement to the Python package index at
‘https://pypi.org’ is storing source and binary archives for a package.
The new ‘upload’ Distutils command will upload a package to the
repository.

Before a package can be uploaded, you must be able to build a
distribution using the ‘sdist’ Distutils command.  Once that works, you
can run ‘python setup.py upload’ to add your package to the PyPI
archive.  Optionally you can GPG-sign the package by supplying the
‘--sign’ and ‘--identity’ options.

Package uploading was implemented by Martin von Löwis and Richard Jones.

Ver também
..........

PEP 314(1) - Metadata for Python Software Packages v1.1

     PEP proposed and written by A.M. Kuchling, Richard Jones, and Fred
     Drake; implemented by Richard Jones and Fred Drake.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0314/


File: python.info,  Node: PEP 328 Absolute and Relative Imports,  Next: PEP 338 Executing Modules as Scripts,  Prev: PEP 314 Metadata for Python Software Packages v1 1,  Up: What’s New in Python 2 5

1.17.4 PEP 328: Absolute and Relative Imports
---------------------------------------------

The simpler part of PEP 328(1) was implemented in Python 2.4:
parentheses could now be used to enclose the names imported from a
module using the ‘from ... import ...’ statement, making it easier to
import many different names.

The more complicated part has been implemented in Python 2.5: importing
a module can be specified to use absolute or package-relative imports.
The plan is to move toward making absolute imports the default in future
versions of Python.

Let’s say you have a package directory like this:

     pkg/
     pkg/__init__.py
     pkg/main.py
     pkg/string.py

This defines a package named ‘pkg’ containing the ‘pkg.main’ and
‘pkg.string’ submodules.

Consider the code in the ‘main.py’ module.  What happens if it executes
the statement ‘import string’?  In Python 2.4 and earlier, it will first
look in the package’s directory to perform a relative import, finds
‘pkg/string.py’, imports the contents of that file as the ‘pkg.string’
module, and that module is bound to the name ‘string’ in the ‘pkg.main’
module’s namespace.

That’s fine if ‘pkg.string’ was what you wanted.  But what if you wanted
Python’s standard *note string: d3. module?  There’s no clean way to
ignore ‘pkg.string’ and look for the standard module; generally you had
to look at the contents of ‘sys.modules’, which is slightly unclean.
Holger Krekel’s ‘py.std’ package provides a tidier way to perform
imports from the standard library, ‘import py; py.std.string.join()’,
but that package isn’t available on all Python installations.

Reading code which relies on relative imports is also less clear,
because a reader may be confused about which module, *note string: d3.
or ‘pkg.string’, is intended to be used.  Python users soon learned not
to duplicate the names of standard library modules in the names of their
packages’ submodules, but you can’t protect against having your
submodule’s name being used for a new module added in a future version
of Python.

In Python 2.5, you can switch *note import: 5e2.’s behaviour to absolute
imports using a ‘from __future__ import absolute_import’ directive.
This absolute-import behaviour will become the default in a future
version (probably Python 2.7).  Once absolute imports are the default,
‘import string’ will always find the standard library’s version.  It’s
suggested that users should begin using absolute imports as much as
possible, so it’s preferable to begin writing ‘from pkg import string’
in your code.

Relative imports are still possible by adding a leading period to the
module name when using the ‘from ... import’ form:

     # Import names from pkg.string
     from .string import name1, name2
     # Import pkg.string
     from . import string

This imports the *note string: d3. module relative to the current
package, so in ‘pkg.main’ this will import 'name1' and 'name2' from
‘pkg.string’.  Additional leading periods perform the relative import
starting from the parent of the current package.  For example, code in
the ‘A.B.C’ module can do:

     from . import D                 # Imports A.B.D
     from .. import E                # Imports A.E
     from ..F import G               # Imports A.F.G

Leading periods cannot be used with the ‘import modname’ form of the
import statement, only the ‘from ... import’ form.

Ver também
..........

PEP 328(2) - Importações: Multilinha e absoluta/relativa

     PEP written by Aahz; implemented by Thomas Wouters.

‘https://pylib.readthedocs.io/’

     The py library by Holger Krekel, which contains the ‘py.std’
     package.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0328/

   (2) https://peps.python.org/pep-0328/


File: python.info,  Node: PEP 338 Executing Modules as Scripts,  Next: PEP 341 Unified try/except/finally,  Prev: PEP 328 Absolute and Relative Imports,  Up: What’s New in Python 2 5

1.17.5 PEP 338: Executing Modules as Scripts
--------------------------------------------

The *note -m: 5e1. switch added in Python 2.4 to execute a module as a
script gained a few more abilities.  Instead of being implemented in C
code inside the Python interpreter, the switch now uses an
implementation in a new module, *note runpy: be.

The *note runpy: be. module implements a more sophisticated import
mechanism so that it’s now possible to run modules in a package such as
‘pychecker.checker’.  The module also supports alternative import
mechanisms such as the *note zipimport: 132. module.  This means you can
add a .zip archive’s path to ‘sys.path’ and then use the *note -m: 5e1.
switch to execute code from the archive.

Ver também
..........

PEP 338(1) - Executing modules as scripts

     PEP written and implemented by Nick Coghlan.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0338/


File: python.info,  Node: PEP 341 Unified try/except/finally,  Next: PEP 342 New Generator Features,  Prev: PEP 338 Executing Modules as Scripts,  Up: What’s New in Python 2 5

1.17.6 PEP 341: Unified try/except/finally
------------------------------------------

Until Python 2.5, the *note try: 6e9. statement came in two flavours.
You could use a *note finally: 9d2. block to ensure that code is always
executed, or one or more *note except: 18b. blocks to catch specific
exceptions.  You couldn’t combine both ‘except’ blocks and a ‘finally’
block, because generating the right bytecode for the combined version
was complicated and it wasn’t clear what the semantics of the combined
statement should be.

Guido van Rossum spent some time working with Java, which does support
the equivalent of combining *note except: 18b. blocks and a *note
finally: 9d2. block, and this clarified what the statement should mean.
In Python 2.5, you can now write:

     try:
         block-1 ...
     except Exception1:
         handler-1 ...
     except Exception2:
         handler-2 ...
     else:
         else-block
     finally:
         final-block

The code in 'block-1' is executed.  If the code raises an exception, the
various *note except: 18b. blocks are tested: if the exception is of
class ‘Exception1’, 'handler-1' is executed; otherwise if it’s of class
‘Exception2’, 'handler-2' is executed, and so forth.  If no exception is
raised, the 'else-block' is executed.

No matter what happened previously, the 'final-block' is executed once
the code block is complete and any raised exceptions handled.  Even if
there’s an error in an exception handler or the 'else-block' and a new
exception is raised, the code in the 'final-block' is still run.

Ver também
..........

PEP 341(1) - Unifying try-except and try-finally

     PEP written by Georg Brandl; implementation by Thomas Lee.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0341/


File: python.info,  Node: PEP 342 New Generator Features,  Next: PEP 343 The ‘with’ statement<2>,  Prev: PEP 341 Unified try/except/finally,  Up: What’s New in Python 2 5

1.17.7 PEP 342: New Generator Features
--------------------------------------

Python 2.5 adds a simple way to pass values 'into' a generator.  As
introduced in Python 2.3, generators only produce output; once a
generator’s code was invoked to create an iterator, there was no way to
pass any new information into the function when its execution is
resumed.  Sometimes the ability to pass in some information would be
useful.  Hackish solutions to this include making the generator’s code
look at a global variable and then changing the global variable’s value,
or passing in some mutable object that callers then modify.

To refresh your memory of basic generators, here’s a simple example:

     def counter (maximum):
         i = 0
         while i < maximum:
             yield i
             i += 1

When you call ‘counter(10)’, the result is an iterator that returns the
values from 0 up to 9.  On encountering the *note yield: 9d5. statement,
the iterator returns the provided value and suspends the function’s
execution, preserving the local variables.  Execution resumes on the
following call to the iterator’s *note next(): 7d9. method, picking up
after the ‘yield’ statement.

In Python 2.3, *note yield: 9d5. was a statement; it didn’t return any
value.  In 2.5, ‘yield’ is now an expression, returning a value that can
be assigned to a variable or otherwise operated on:

     val = (yield i)

I recommend that you always put parentheses around a *note yield: 9d5.
expression when you’re doing something with the returned value, as in
the above example.  The parentheses aren’t always necessary, but it’s
easier to always add them instead of having to remember when they’re
needed.

( PEP 342(1) explains the exact rules, which are that a *note yield:
9d5.-expression must always be parenthesized except when it occurs at
the top-level expression on the right-hand side of an assignment.  This
means you can write ‘val = yield i’ but have to use parentheses when
there’s an operation, as in ‘val = (yield i) + 12’.)

Values are sent into a generator by calling its ‘send(value)’ method.
The generator’s code is then resumed and the *note yield: 9d5.
expression returns the specified 'value'.  If the regular *note next():
7d9. method is called, the ‘yield’ returns *note None: 675.

Here’s the previous example, modified to allow changing the value of the
internal counter.

     def counter (maximum):
         i = 0
         while i < maximum:
             val = (yield i)
             # If value provided, change counter
             if val is not None:
                 i = val
             else:
                 i += 1

And here’s an example of changing the counter:

     >>> it = counter(10)
     >>> print it.next()
     0
     >>> print it.next()
     1
     >>> print it.send(8)
     8
     >>> print it.next()
     9
     >>> print it.next()
     Traceback (most recent call last):
       File "t.py", line 15, in ?
         print it.next()
     StopIteration

*note yield: 9d5. will usually return *note None: 675, so you should
always check for this case.  Don’t just use its value in expressions
unless you’re sure that the ‘send()’ method will be the only method used
to resume your generator function.

In addition to ‘send()’, there are two other new methods on generators:

   * ‘throw(type, value=None, traceback=None)’ is used to raise an
     exception inside the generator; the exception is raised by the
     *note yield: 9d5. expression where the generator’s execution is
     paused.

   * ‘close()’ raises a new *note GeneratorExit: 140e. exception inside
     the generator to terminate the iteration.  On receiving this
     exception, the generator’s code must either raise *note
     GeneratorExit: 140e. or *note StopIteration: c15.  Catching the
     *note GeneratorExit: 140e. exception and returning a value is
     illegal and will trigger a *note RuntimeError: 195.; if the
     function raises some other exception, that exception is propagated
     to the caller.  ‘close()’ will also be called by Python’s garbage
     collector when the generator is garbage-collected.

     If you need to run cleanup code when a *note GeneratorExit: 140e.
     occurs, I suggest using a ‘try: ... finally:’ suite instead of
     catching *note GeneratorExit: 140e.

The cumulative effect of these changes is to turn generators from
one-way producers of information into both producers and consumers.

Generators also become 'coroutines', a more generalized form of
subroutines.  Subroutines are entered at one point and exited at another
point (the top of the function, and a *note return: 9d6. statement), but
coroutines can be entered, exited, and resumed at many different points
(the *note yield: 9d5. statements).  We’ll have to figure out patterns
for using coroutines effectively in Python.

The addition of the ‘close()’ method has one side effect that isn’t
obvious.  ‘close()’ is called when a generator is garbage-collected, so
this means the generator’s code gets one last chance to run before the
generator is destroyed.  This last chance means that ‘try...finally’
statements in generators can now be guaranteed to work; the *note
finally: 9d2. clause will now always get a chance to run.  The syntactic
restriction that you couldn’t mix *note yield: 9d5. statements with a
‘try...finally’ suite has therefore been removed.  This seems like a
minor bit of language trivia, but using generators and ‘try...finally’
is actually necessary in order to implement the *note with: 5d2.
statement described by PEP 343(2).  I’ll look at this new statement in
the following section.

Another even more esoteric effect of this change: previously, the
‘gi_frame’ attribute of a generator was always a frame object.  It’s now
possible for ‘gi_frame’ to be ‘None’ once the generator has been
exhausted.

Ver também
..........

PEP 342(3) - Corrotinas via Geradores Aprimorados

     PEP written by Guido van Rossum and Phillip J. Eby; implemented by
     Phillip J. Eby.  Includes examples of some fancier uses of
     generators as coroutines.

     Earlier versions of these features were proposed in PEP 288(4) by
     Raymond Hettinger and PEP 325(5) by Samuele Pedroni.

‘https://en.wikipedia.org/wiki/Coroutine’

     The Wikipedia entry for coroutines.

‘https://web.archive.org/web/20160321211320/http://www.sidhe.org/~dan/blog/archives/000178.html’

     An explanation of coroutines from a Perl point of view, written by
     Dan Sugalski.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0342/

   (2) https://peps.python.org/pep-0343/

   (3) https://peps.python.org/pep-0342/

   (4) https://peps.python.org/pep-0288/

   (5) https://peps.python.org/pep-0325/


File: python.info,  Node: PEP 343 The ‘with’ statement<2>,  Next: PEP 352 Exceptions as New-Style Classes,  Prev: PEP 342 New Generator Features,  Up: What’s New in Python 2 5

1.17.8 PEP 343: The ‘with’ statement
------------------------------------

The ‘*note with: 5d2.’ statement clarifies code that previously would
use ‘try...finally’ blocks to ensure that clean-up code is executed.  In
this section, I’ll discuss the statement as it will commonly be used.
In the next section, I’ll examine the implementation details and show
how to write objects for use with this statement.

The ‘*note with: 5d2.’ statement is a new control-flow structure whose
basic structure is:

     with expression [as variable]:
         with-block

The expression is evaluated, and it should result in an object that
supports the context management protocol (that is, has *note
__enter__(): 5c8. and *note __exit__(): 1344. methods.

The object’s *note __enter__(): 5c8. is called before 'with-block' is
executed and therefore can run set-up code.  It also may return a value
that is bound to the name 'variable', if given.  (Note carefully that
'variable' is 'not' assigned the result of 'expression'.)

After execution of the 'with-block' is finished, the object’s *note
__exit__(): 1344. method is called, even if the block raised an
exception, and can therefore run clean-up code.

To enable the statement in Python 2.5, you need to add the following
directive to your module:

     from __future__ import with_statement

The statement will always be enabled in Python 2.6.

Some standard Python objects now support the context management protocol
and can be used with the ‘*note with: 5d2.’ statement.  File objects are
one example:

     with open('/etc/passwd', 'r') as f:
         for line in f:
             print line
             ... more processing code ...

After this statement has executed, the file object in 'f' will have been
automatically closed, even if the *note for: 2f2. loop raised an
exception part-way through the block.

     Nota: In this case, 'f' is the same object created by *note open():
     51c, because *note __enter__(): 5c8. returns 'self'.

The *note threading: ed. module’s locks and condition variables also
support the ‘*note with: 5d2.’ statement:

     lock = threading.Lock()
     with lock:
         # Critical section of code
         ...

The lock is acquired before the block is executed and always released
once the block is complete.

The new ‘localcontext()’ function in the *note decimal: 36. module makes
it easy to save and restore the current decimal context, which
encapsulates the desired precision and rounding characteristics for
computations:

     from decimal import Decimal, Context, localcontext

     # Displays with default precision of 28 digits
     v = Decimal('578')
     print v.sqrt()

     with localcontext(Context(prec=16)):
         # All code in this block uses a precision of 16 digits.
         # The original context is restored on exiting the block.
         print v.sqrt()

* Menu:

* Writing Context Managers: Writing Context Managers<2>.
* The contextlib module: The contextlib module<2>.


File: python.info,  Node: Writing Context Managers<2>,  Next: The contextlib module<2>,  Up: PEP 343 The ‘with’ statement<2>

1.17.8.1 Writing Context Managers
.................................

Under the hood, the ‘*note with: 5d2.’ statement is fairly complicated.
Most people will only use ‘‘with’’ in company with existing objects and
don’t need to know these details, so you can skip the rest of this
section if you like.  Authors of new objects will need to understand the
details of the underlying implementation and should keep reading.

A high-level explanation of the context management protocol is:

   * The expression is evaluated and should result in an object called a
     “context manager”.  The context manager must have *note
     __enter__(): 5c8. and *note __exit__(): 1344. methods.

   * The context manager’s *note __enter__(): 5c8. method is called.
     The value returned is assigned to 'VAR'. If no ‘'as VAR'’ clause is
     present, the value is simply discarded.

   * The code in 'BLOCK' is executed.

   * If 'BLOCK' raises an exception, the ‘__exit__(type, value,
     traceback)’ is called with the exception details, the same values
     returned by *note sys.exc_info(): 68a.  The method’s return value
     controls whether the exception is re-raised: any false value
     re-raises the exception, and ‘True’ will result in suppressing it.
     You’ll only rarely want to suppress the exception, because if you
     do the author of the code containing the ‘*note with: 5d2.’
     statement will never realize anything went wrong.

   * If 'BLOCK' didn’t raise an exception, the *note __exit__(): 1344.
     method is still called, but 'type', 'value', and 'traceback' are
     all ‘None’.

Let’s think through an example.  I won’t present detailed code but will
only sketch the methods necessary for a database that supports
transactions.

(For people unfamiliar with database terminology: a set of changes to
the database are grouped into a transaction.  Transactions can be either
committed, meaning that all the changes are written into the database,
or rolled back, meaning that the changes are all discarded and the
database is unchanged.  See any database textbook for more information.)

Vamos supor que exista um objeto representando uma conexão com o banco
de dados.  Nosso objetivo será permitir que o usuário escreva código
como este:

     db_connection = DatabaseConnection()
     with db_connection as cursor:
         cursor.execute('insert into ...')
         cursor.execute('delete from ...')
         # ... more operations ...

A transação deverá ser confirmada se o código no bloco funcionar
perfeitamente ou revertida se houver uma exceção.  Aqui está a interface
básica para ‘DatabaseConnection’ que presumirei:

     class DatabaseConnection:
         # Database interface
         def cursor (self):
             "Returns a cursor object and starts a new transaction"
         def commit (self):
             "Commits current transaction"
         def rollback (self):
             "Rolls back current transaction"

The *note __enter__(): 5c8. method is pretty easy, having only to start
a new transaction.  For this application the resulting cursor object
would be a useful result, so the method will return it.  The user can
then add ‘as cursor’ to their ‘*note with: 5d2.’ statement to bind the
cursor to a variable name.

     class DatabaseConnection:
         ...
         def __enter__ (self):
             # Code to start a new transaction
             cursor = self.cursor()
             return cursor

The *note __exit__(): 1344. method is the most complicated because it’s
where most of the work has to be done.  The method has to check if an
exception occurred.  If there was no exception, the transaction is
committed.  The transaction is rolled back if there was an exception.

In the code below, execution will just fall off the end of the function,
returning the default value of ‘None’.  ‘None’ is false, so the
exception will be re-raised automatically.  If you wished, you could be
more explicit and add a *note return: 9d6. statement at the marked
location.

     class DatabaseConnection:
         ...
         def __exit__ (self, type, value, tb):
             if tb is None:
                 # No exception, so commit
                 self.commit()
             else:
                 # Exception occurred, so rollback.
                 self.rollback()
                 # return False


File: python.info,  Node: The contextlib module<2>,  Prev: Writing Context Managers<2>,  Up: PEP 343 The ‘with’ statement<2>

1.17.8.2 The contextlib module
..............................

The new *note contextlib: 23. module provides some functions and a
decorator that are useful for writing objects for use with the ‘*note
with: 5d2.’ statement.

The decorator is called ‘contextmanager()’, and lets you write a single
generator function instead of defining a new class.  The generator
should yield exactly one value.  The code up to the *note yield: 9d5.
will be executed as the *note __enter__(): 5c8. method, and the value
yielded will be the method’s return value that will get bound to the
variable in the ‘*note with: 5d2.’ statement’s ‘as’ clause, if any.  The
code after the *note yield: 9d5. will be executed in the *note
__exit__(): 1344. method.  Any exception raised in the block will be
raised by the ‘yield’ statement.

Our database example from the previous section could be written using
this decorator as:

     from contextlib import contextmanager

     @contextmanager
     def db_transaction (connection):
         cursor = connection.cursor()
         try:
             yield cursor
         except:
             connection.rollback()
             raise
         else:
             connection.commit()

     db = DatabaseConnection()
     with db_transaction(db) as cursor:
         ...

The *note contextlib: 23. module also has a ‘nested(mgr1, mgr2, ...)’
function that combines a number of context managers so you don’t need to
write nested ‘*note with: 5d2.’ statements.  In this example, the single
‘‘with’’ statement both starts a database transaction and acquires a
thread lock:

     lock = threading.Lock()
     with nested (db_transaction(db), lock) as (cursor, locked):
         ...

Finally, the ‘closing(object)’ function returns 'object' so that it can
be bound to a variable, and calls ‘object.close’ at the end of the
block.

     import urllib, sys
     from contextlib import closing

     with closing(urllib.urlopen('http://www.yahoo.com')) as f:
         for line in f:
             sys.stdout.write(line)

Ver também
..........

PEP 343(1) - A instrução “with”

     PEP written by Guido van Rossum and Nick Coghlan; implemented by
     Mike Bland, Guido van Rossum, and Neal Norwitz.  The PEP shows the
     code generated for a ‘*note with: 5d2.’ statement, which can be
     helpful in learning how the statement works.

The documentation for the *note contextlib: 23. module.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0343/


File: python.info,  Node: PEP 352 Exceptions as New-Style Classes,  Next: PEP 353 Using ssize_t as the index type,  Prev: PEP 343 The ‘with’ statement<2>,  Up: What’s New in Python 2 5

1.17.9 PEP 352: Exceptions as New-Style Classes
-----------------------------------------------

Exception classes can now be new-style classes, not just classic
classes, and the built-in *note Exception: 9e2. class and all the
standard built-in exceptions (*note NameError: 43f, *note ValueError:
202, etc.)  are now new-style classes.

The inheritance hierarchy for exceptions has been rearranged a bit.  In
2.5, the inheritance relationships are:

     BaseException       # New in Python 2.5
     |- KeyboardInterrupt
     |- SystemExit
     |- Exception
        |- (all other current built-in exceptions)

This rearrangement was done because people often want to catch all
exceptions that indicate program errors.  *note KeyboardInterrupt: 9d9.
and *note SystemExit: d63. aren’t errors, though, and usually represent
an explicit action such as the user hitting ‘Control’-‘C’ or code
calling *note sys.exit(): 138e.  A bare ‘except:’ will catch all
exceptions, so you commonly need to list *note KeyboardInterrupt: 9d9.
and *note SystemExit: d63. in order to re-raise them.  The usual pattern
is:

     try:
         ...
     except (KeyboardInterrupt, SystemExit):
         raise
     except:
         # Log error...
         # Continue running program...

In Python 2.5, you can now write ‘except Exception’ to achieve the same
result, catching all the exceptions that usually indicate errors but
leaving *note KeyboardInterrupt: 9d9. and *note SystemExit: d63. alone.
As in previous versions, a bare ‘except:’ still catches all exceptions.

The goal for Python 3.0 is to require any class raised as an exception
to derive from *note BaseException: 5bb. or some descendant of *note
BaseException: 5bb, and future releases in the Python 2.x series may
begin to enforce this constraint.  Therefore, I suggest you begin making
all your exception classes derive from *note Exception: 9e2. now.  It’s
been suggested that the bare ‘except:’ form should be removed in Python
3.0, but Guido van Rossum hasn’t decided whether to do this or not.

Raising of strings as exceptions, as in the statement ‘raise "Error
occurred"’, is deprecated in Python 2.5 and will trigger a warning.  The
aim is to be able to remove the string-exception feature in a few
releases.

Ver também
..........

PEP 352(1) - Required Superclass for Exceptions

     PEP written by Brett Cannon and Guido van Rossum; implemented by
     Brett Cannon.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0352/


File: python.info,  Node: PEP 353 Using ssize_t as the index type,  Next: PEP 357 The ‘__index__’ method,  Prev: PEP 352 Exceptions as New-Style Classes,  Up: What’s New in Python 2 5

1.17.10 PEP 353: Using ssize_t as the index type
------------------------------------------------

A wide-ranging change to Python’s C API, using a new *note Py_ssize_t:
a69. type definition instead of int, will permit the interpreter to
handle more data on 64-bit platforms.  This change doesn’t affect
Python’s capacity on 32-bit platforms.

Various pieces of the Python interpreter used C’s int type to store
sizes or counts; for example, the number of items in a list or tuple
were stored in an int.  The C compilers for most 64-bit platforms still
define int as a 32-bit type, so that meant that lists could only hold up
to ‘2**31 - 1’ = 2147483647 items.  (There are actually a few different
programming models that 64-bit C compilers can use – see
‘https://unix.org/version2/whatsnew/lp64_wp.html’ for a discussion – but
the most commonly available model leaves int as 32 bits.)

A limit of 2147483647 items doesn’t really matter on a 32-bit platform
because you’ll run out of memory before hitting the length limit.  Each
list item requires space for a pointer, which is 4 bytes, plus space for
a *note PyObject: 339. representing the item.  2147483647*4 is already
more bytes than a 32-bit address space can contain.

It’s possible to address that much memory on a 64-bit platform, however.
The pointers for a list that size would only require 16 GiB of space, so
it’s not unreasonable that Python programmers might construct lists that
large.  Therefore, the Python interpreter had to be changed to use some
type other than int, and this will be a 64-bit type on 64-bit platforms.
The change will cause incompatibilities on 64-bit machines, so it was
deemed worth making the transition now, while the number of 64-bit users
is still relatively small.  (In 5 or 10 years, we may 'all' be on 64-bit
machines, and the transition would be more painful then.)

This change most strongly affects authors of C extension modules.
Python strings and container types such as lists and tuples now use
*note Py_ssize_t: a69. to store their size.  Functions such as *note
PyList_Size(): 1461. now return *note Py_ssize_t: a69.  Code in
extension modules may therefore need to have some variables changed to
*note Py_ssize_t: a69.

The *note PyArg_ParseTuple(): 571. and *note Py_BuildValue(): 8ac.
functions have a new conversion code, ‘n’, for *note Py_ssize_t: a69.
*note PyArg_ParseTuple(): 571.’s ‘s#’ and ‘t#’ still output int by
default, but you can define the macro ‘PY_SSIZE_T_CLEAN’ before
including ‘Python.h’ to make them return *note Py_ssize_t: a69.

PEP 353(1) has a section on conversion guidelines that extension authors
should read to learn about supporting 64-bit platforms.

Ver também
..........

PEP 353(2) - Using ssize_t as the index type

     PEP written and implemented by Martin von Löwis.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0353/

   (2) https://peps.python.org/pep-0353/


File: python.info,  Node: PEP 357 The ‘__index__’ method,  Next: Outras mudanças na linguagem<16>,  Prev: PEP 353 Using ssize_t as the index type,  Up: What’s New in Python 2 5

1.17.11 PEP 357: The ‘__index__’ method
---------------------------------------

The NumPy developers had a problem that could only be solved by adding a
new special method, ‘__index__()’.  When using slice notation, as in
‘[start:stop:step]’, the values of the 'start', 'stop', and 'step'
indexes must all be either integers or long integers.  NumPy defines a
variety of specialized integer types corresponding to unsigned and
signed integers of 8, 16, 32, and 64 bits, but there was no way to
signal that these types could be used as slice indexes.

Slicing can’t just use the existing ‘__int__()’ method because that
method is also used to implement coercion to integers.  If slicing used
‘__int__()’, floating-point numbers would also become legal slice
indexes and that’s clearly an undesirable behaviour.

Instead, a new special method called ‘__index__()’ was added.  It takes
no arguments and returns an integer giving the slice index to use.  For
example:

     class C:
         def __index__ (self):
             return self.value

The return value must be either a Python integer or long integer.  The
interpreter will check that the type returned is correct, and raises a
*note TypeError: 2c3. if this requirement isn’t met.

A corresponding *note nb_index: 1464. slot was added to the C-level
*note PyNumberMethods: 1465. structure to let C extensions implement
this protocol.  ‘PyNumber_Index(obj)’ can be used in extension code to
call the ‘__index__()’ function and retrieve its result.

Ver também
..........

PEP 357(1) - Allowing Any Object to be Used for Slicing

     PEP written and implemented by Travis Oliphant.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0357/


File: python.info,  Node: Outras mudanças na linguagem<16>,  Next: New Improved and Removed Modules,  Prev: PEP 357 The ‘__index__’ method,  Up: What’s New in Python 2 5

1.17.12 Outras mudanças na linguagem
------------------------------------

Here are all of the changes that Python 2.5 makes to the core Python
language.

   * The *note dict: 256. type has a new hook for letting subclasses
     provide a default value when a key isn’t contained in the
     dictionary.  When a key isn’t found, the dictionary’s
     ‘__missing__(key)’ method will be called.  This hook is used to
     implement the new ‘defaultdict’ class in the *note collections: 1d.
     module.  The following example defines a dictionary that returns
     zero for any missing key:

          class zerodict (dict):
              def __missing__ (self, key):
                  return 0

          d = zerodict({1:1, 2:2})
          print d[1], d[2]   # Prints 1, 2
          print d[3], d[4]   # Prints 0, 0

   * Both 8-bit and Unicode strings have new ‘partition(sep)’ and
     ‘rpartition(sep)’ methods that simplify a common use case.

     The ‘find(S)’ method is often used to get an index which is then
     used to slice the string and obtain the pieces that are before and
     after the separator.  ‘partition(sep)’ condenses this pattern into
     a single method call that returns a 3-tuple containing the
     substring before the separator, the separator itself, and the
     substring after the separator.  If the separator isn’t found, the
     first element of the tuple is the entire string and the other two
     elements are empty.  ‘rpartition(sep)’ also returns a 3-tuple but
     starts searching from the end of the string; the ‘r’ stands for
     ‘reverse’.

     Alguns exemplos:

          >>> ('http://www.python.org').partition('://')
          ('http', '://', 'www.python.org')
          >>> ('file:/usr/share/doc/index.html').partition('://')
          ('file:/usr/share/doc/index.html', '', '')
          >>> (u'Subject: a quick question').partition(':')
          (u'Subject', u':', u' a quick question')
          >>> 'www.python.org'.rpartition('.')
          ('www.python', '.', 'org')
          >>> 'www.python.org'.rpartition(':')
          ('', '', 'www.python.org')

     (Implemented by Fredrik Lundh following a suggestion by Raymond
     Hettinger.)

   * The ‘startswith()’ and ‘endswith()’ methods of string types now
     accept tuples of strings to check for.

          def is_image_file (filename):
              return filename.endswith(('.gif', '.jpg', '.tiff'))

     (Implemented by Georg Brandl following a suggestion by Tom Lynn.)

   * The *note min(): f3a. and *note max(): f3b. built-in functions
     gained a ‘key’ keyword parameter analogous to the ‘key’ argument
     for ‘sort()’.  This parameter supplies a function that takes a
     single argument and is called for every value in the list; *note
     min(): f3a./*note max(): f3b. will return the element with the
     smallest/largest return value from this function.  For example, to
     find the longest string in a list, you can do:

          L = ['medium', 'longest', 'short']
          # Prints 'longest'
          print max(L, key=len)
          # Prints 'short', because lexicographically 'short' has the largest value
          print max(L)

     (Contributed by Steven Bethard and Raymond Hettinger.)

   * Two new built-in functions, *note any(): 1468. and *note all():
     1469, evaluate whether an iterator contains any true or false
     values.  *note any(): 1468. returns *note True: c27. if any value
     returned by the iterator is true; otherwise it will return *note
     False: b49.  *note all(): 1469. returns *note True: c27. only if
     all of the values returned by the iterator evaluate as true.
     (Suggested by Guido van Rossum, and implemented by Raymond
     Hettinger.)

   * The result of a class’s ‘__hash__()’ method can now be either a
     long integer or a regular integer.  If a long integer is returned,
     the hash of that value is taken.  In earlier versions the hash
     value was required to be a regular integer, but in 2.5 the *note
     id(): 146a. built-in was changed to always return non-negative
     numbers, and users often seem to use ‘id(self)’ in ‘__hash__()’
     methods (though this is discouraged).

   * ASCII is now the default encoding for modules.  It’s now a syntax
     error if a module contains string literals with 8-bit characters
     but doesn’t have an encoding declaration.  In Python 2.4 this
     triggered a warning, not a syntax error.  See PEP 263(1) for how to
     declare a module’s encoding; for example, you might add a line like
     this near the top of the source file:

          # -*- coding: latin1 -*-

   * A new warning, *note UnicodeWarning: 146b, is triggered when you
     attempt to compare a Unicode string and an 8-bit string that can’t
     be converted to Unicode using the default ASCII encoding.  The
     result of the comparison is false:

          >>> chr(128) == unichr(128)   # Can't convert chr(128) to Unicode
          __main__:1: UnicodeWarning: Unicode equal comparison failed
            to convert both arguments to Unicode - interpreting them
            as being unequal
          False
          >>> chr(127) == unichr(127)   # chr(127) can be converted
          True

     Previously this would raise a *note UnicodeDecodeError: a1d.
     exception, but in 2.5 this could result in puzzling problems when
     accessing a dictionary.  If you looked up ‘unichr(128)’ and
     ‘chr(128)’ was being used as a key, you’d get a *note
     UnicodeDecodeError: a1d. exception.  Other changes in 2.5 resulted
     in this exception being raised instead of suppressed by the code in
     ‘dictobject.c’ that implements dictionaries.

     Raising an exception for such a comparison is strictly correct, but
     the change might have broken code, so instead *note UnicodeWarning:
     146b. was introduced.

     (Implemented by Marc-André Lemburg.)

   * One error that Python programmers sometimes make is forgetting to
     include an ‘__init__.py’ module in a package directory.  Debugging
     this mistake can be confusing, and usually requires running Python
     with the *note -v: 146c. switch to log all the paths searched.  In
     Python 2.5, a new *note ImportWarning: 4fa. warning is triggered
     when an import would have picked up a directory as a package but no
     ‘__init__.py’ was found.  This warning is silently ignored by
     default; provide the *note -Wd: 8cd. option when running the Python
     executable to display the warning message.  (Implemented by Thomas
     Wouters.)

   * The list of base classes in a class definition can now be empty.
     As an example, this is now legal:

          class C():
              pass

     (Implemented by Brett Cannon.)

* Menu:

* Interactive Interpreter Changes::
* Otimizações: Otimizações<15>.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0263/


File: python.info,  Node: Interactive Interpreter Changes,  Next: Otimizações<15>,  Up: Outras mudanças na linguagem<16>

1.17.12.1 Interactive Interpreter Changes
.........................................

In the interactive interpreter, ‘quit’ and ‘exit’ have long been strings
so that new users get a somewhat helpful message when they try to quit:

     >>> quit
     'Use Ctrl-D (i.e. EOF) to exit.'

In Python 2.5, ‘quit’ and ‘exit’ are now objects that still produce
string representations of themselves, but are also callable.  Newbies
who try ‘quit()’ or ‘exit()’ will now exit the interpreter as they
expect.  (Implemented by Georg Brandl.)

The Python executable now accepts the standard long options *note -help:
5f0. and *note -version: d3d.; on Windows, it also accepts the *note /?:
146f. option for displaying a help message.  (Implemented by Georg
Brandl.)


File: python.info,  Node: Otimizações<15>,  Prev: Interactive Interpreter Changes,  Up: Outras mudanças na linguagem<16>

1.17.12.2 Otimizações
.....................

Several of the optimizations were developed at the NeedForSpeed sprint,
an event held in Reykjavik, Iceland, from May 21–28 2006.  The sprint
focused on speed enhancements to the CPython implementation and was
funded by EWT LLC with local support from CCP Games.  Those
optimizations added at this sprint are specially marked in the following
list.

   * When they were introduced in Python 2.4, the built-in *note set:
     5d9. and *note frozenset: 5da. types were built on top of Python’s
     dictionary type.  In 2.5 the internal data structure has been
     customized for implementing sets, and as a result sets will use a
     third less memory and are somewhat faster.  (Implemented by Raymond
     Hettinger.)

   * The speed of some Unicode operations, such as finding substrings,
     string splitting, and character map encoding and decoding, has been
     improved.  (Substring search and splitting improvements were added
     by Fredrik Lundh and Andrew Dalke at the NeedForSpeed sprint.
     Character maps were improved by Walter Dörwald and Martin von
     Löwis.)

   * The ‘long(str, base)’ function is now faster on long digit strings
     because fewer intermediate results are calculated.  The peak is for
     strings of around 800–1000 digits where the function is 6 times
     faster.  (Contributed by Alan McIntyre and committed at the
     NeedForSpeed sprint.)

   * It’s now illegal to mix iterating over a file with ‘for line in
     file’ and calling the file object’s ‘read()’/*note readline():
     ba./‘readlines()’ methods.  Iteration uses an internal buffer and
     the ‘read*()’ methods don’t use that buffer.  Instead they would
     return the data following the buffer, causing the data to appear
     out of order.  Mixing iteration and these methods will now trigger
     a *note ValueError: 202. from the ‘read*()’ method.  (Implemented
     by Thomas Wouters.)

   * The *note struct: d5. module now compiles structure format strings
     into an internal representation and caches this representation,
     yielding a 20% speedup.  (Contributed by Bob Ippolito at the
     NeedForSpeed sprint.)

   * The *note re: b9. module got a 1 or 2% speedup by switching to
     Python’s allocator functions instead of the system’s ‘malloc()’ and
     ‘free()’.  (Contributed by Jack Diederich at the NeedForSpeed
     sprint.)

   * The code generator’s peephole optimizer now performs simple
     constant folding in expressions.  If you write something like ‘a =
     2+3’, the code generator will do the arithmetic and produce code
     corresponding to ‘a = 5’.  (Proposed and implemented by Raymond
     Hettinger.)

   * Function calls are now faster because code objects now keep the
     most recently finished frame (a “zombie frame”) in an internal
     field of the code object, reusing it the next time the code object
     is invoked.  (Original patch by Michael Hudson, modified by Armin
     Rigo and Richard Jones; committed at the NeedForSpeed sprint.)
     Frame objects are also slightly smaller, which may improve cache
     locality and reduce memory usage a bit.  (Contributed by Neal
     Norwitz.)

   * Python’s built-in exceptions are now new-style classes, a change
     that speeds up instantiation considerably.  Exception handling in
     Python 2.5 is therefore about 30% faster than in 2.4.  (Contributed
     by Richard Jones, Georg Brandl and Sean Reifschneider at the
     NeedForSpeed sprint.)

   * Importing now caches the paths tried, recording whether they exist
     or not so that the interpreter makes fewer ‘open()’ and ‘stat()’
     calls on startup.  (Contributed by Martin von Löwis and Georg
     Brandl.)


File: python.info,  Node: New Improved and Removed Modules,  Next: Mudanças a construções e API C<10>,  Prev: Outras mudanças na linguagem<16>,  Up: What’s New in Python 2 5

1.17.13 New, Improved, and Removed Modules
------------------------------------------

The standard library received many enhancements and bug fixes in Python
2.5.  Here’s a partial list of the most notable changes, sorted
alphabetically by module name.  Consult the ‘Misc/NEWS’ file in the
source tree for a more complete list of changes, or look through the SVN
logs for all the details.

   * The ‘audioop’ module now supports the a-LAW encoding, and the code
     for u-LAW encoding has been improved.  (Contributed by Lars
     Immisch.)

   * The *note codecs: 1b. module gained support for incremental codecs.
     The ‘codec.lookup()’ function now returns a ‘CodecInfo’ instance
     instead of a tuple.  ‘CodecInfo’ instances behave like a 4-tuple to
     preserve backward compatibility but also have the attributes
     ‘encode’, ‘decode’, ‘incrementalencoder’, ‘incrementaldecoder’,
     ‘streamwriter’, and ‘streamreader’.  Incremental codecs can receive
     input and produce output in multiple chunks; the output is the same
     as if the entire input was fed to the non-incremental codec.  See
     the *note codecs: 1b. module documentation for details.  (Designed
     and implemented by Walter Dörwald.)

   * The *note collections: 1d. module gained a new type, ‘defaultdict’,
     that subclasses the standard *note dict: 256. type.  The new type
     mostly behaves like a dictionary but constructs a default value
     when a key isn’t present, automatically adding it to the dictionary
     for the requested key value.

     The first argument to ‘defaultdict’’s constructor is a factory
     function that gets called whenever a key is requested but not
     found.  This factory function receives no arguments, so you can use
     built-in type constructors such as *note list(): 611. or *note
     int(): 257.  For example, you can make an index of words based on
     their initial letter like this:

          words = """Nel mezzo del cammin di nostra vita
          mi ritrovai per una selva oscura
          che la diritta via era smarrita""".lower().split()

          index = defaultdict(list)

          for w in words:
              init_letter = w[0]
              index[init_letter].append(w)

     Printing ‘index’ results in the following output:

          defaultdict(<type 'list'>, {'c': ['cammin', 'che'], 'e': ['era'],
                  'd': ['del', 'di', 'diritta'], 'm': ['mezzo', 'mi'],
                  'l': ['la'], 'o': ['oscura'], 'n': ['nel', 'nostra'],
                  'p': ['per'], 's': ['selva', 'smarrita'],
                  'r': ['ritrovai'], 'u': ['una'], 'v': ['vita', 'via']}

     (Contributed by Guido van Rossum.)

   * The ‘deque’ double-ended queue type supplied by the *note
     collections: 1d. module now has a ‘remove(value)’ method that
     removes the first occurrence of 'value' in the queue, raising *note
     ValueError: 202. if the value isn’t found.  (Contributed by Raymond
     Hettinger.)

   * New module: The *note contextlib: 23. module contains helper
     functions for use with the new ‘*note with: 5d2.’ statement.  See
     section *note The contextlib module: 145b. for more about this
     module.

   * New module: The *note cProfile: 27. module is a C implementation of
     the existing *note profile: af. module that has much lower
     overhead.  The module’s interface is the same as *note profile:
     af.: you run ‘cProfile.run('main()')’ to profile a function, can
     save profile data to a file, etc.  It’s not yet known if the
     Hotshot profiler, which is also written in C but doesn’t match the
     *note profile: af. module’s interface, will continue to be
     maintained in future versions of Python.  (Contributed by Armin
     Rigo.)

     Also, the *note pstats: b0. module for analyzing the data measured
     by the profiler now supports directing the output to any file
     object by supplying a 'stream' argument to the ‘Stats’ constructor.
     (Contributed by Skip Montanaro.)

   * The *note csv: 29. module, which parses files in comma-separated
     value format, received several enhancements and a number of
     bugfixes.  You can now set the maximum size in bytes of a field by
     calling the ‘csv.field_size_limit(new_limit)’ function; omitting
     the 'new_limit' argument will return the currently set limit.  The
     ‘reader’ class now has a ‘line_num’ attribute that counts the
     number of physical lines read from the source; records can span
     multiple physical lines, so ‘line_num’ is not the same as the
     number of records read.

     The CSV parser is now stricter about multi-line quoted fields.
     Previously, if a line ended within a quoted field without a
     terminating newline character, a newline would be inserted into the
     returned field.  This behavior caused problems when reading files
     that contained carriage return characters within fields, so the
     code was changed to return the field without inserting newlines.
     As a consequence, if newlines embedded within fields are important,
     the input should be split into lines in a manner that preserves the
     newline characters.

     (Contributed by Skip Montanaro and Andrew McNamara.)

   * The *note datetime: 1cc. class in the *note datetime: 30. module
     now has a ‘strptime(string, format)’ method for parsing date
     strings, contributed by Josh Spoerri.  It uses the same format
     characters as *note time.strptime(): 1474. and *note
     time.strftime(): 1229.:

          from datetime import datetime

          ts = datetime.strptime('10:13:15 2006-03-07',
                                 '%H:%M:%S %Y-%m-%d')

   * The ‘SequenceMatcher.get_matching_blocks()’ method in the *note
     difflib: 37. module now guarantees to return a minimal list of
     blocks describing matching subsequences.  Previously, the algorithm
     would occasionally break a block of matching elements into two list
     entries.  (Enhancement by Tim Peters.)

   * The *note doctest: 3a. module gained a ‘SKIP’ option that keeps an
     example from being executed at all.  This is intended for code
     snippets that are usage examples intended for the reader and aren’t
     actually test cases.

     An 'encoding' parameter was added to the ‘testfile()’ function and
     the ‘DocFileSuite’ class to specify the file’s encoding.  This
     makes it easier to use non-ASCII characters in tests contained
     within a docstring.  (Contributed by Bjorn Tillenius.)

   * The *note email: 3b. package has been updated to version 4.0.
     (Contributed by Barry Warsaw.)

   * The *note fileinput: 5b. module was made more flexible.  Unicode
     filenames are now supported, and a 'mode' parameter that defaults
     to ‘"r"’ was added to the *note input(): 131b. function to allow
     opening files in binary or *note universal newlines: d5c. mode.
     Another new parameter, 'openhook', lets you use a function other
     than *note open(): 51c. to open the input files.  Once you’re
     iterating over the set of files, the ‘FileInput’ object’s new *note
     fileno(): 1475. returns the file descriptor for the currently
     opened file.  (Contributed by Georg Brandl.)

   * In the *note gc: 60. module, the new ‘get_count()’ function returns
     a 3-tuple containing the current collection counts for the three GC
     generations.  This is accounting information for the garbage
     collector; when these counts reach a specified threshold, a garbage
     collection sweep will be made.  The existing *note gc.collect():
     a43. function now takes an optional 'generation' argument of 0, 1,
     or 2 to specify which generation to collect.  (Contributed by Barry
     Warsaw.)

   * The ‘nsmallest()’ and ‘nlargest()’ functions in the *note heapq:
     69. module now support a ‘key’ keyword parameter similar to the one
     provided by the *note min(): f3a./*note max(): f3b. functions and
     the ‘sort()’ methods.  For example:

          >>> import heapq
          >>> L = ["short", 'medium', 'longest', 'longer still']
          >>> heapq.nsmallest(2, L)  # Return two lowest elements, lexicographically
          ['longer still', 'longest']
          >>> heapq.nsmallest(2, L, key=len)   # Return two shortest elements
          ['short', 'medium']

     (Contributed by Raymond Hettinger.)

   * The *note itertools.islice(): b61. function now accepts ‘None’ for
     the start and step arguments.  This makes it more compatible with
     the attributes of slice objects, so that you can now write the
     following:

          s = slice(5)     # Create slice object
          itertools.islice(iterable, s.start, s.stop, s.step)

     (Contributed by Raymond Hettinger.)

   * The *note format(): 61f. function in the *note locale: 86. module
     has been modified and two new functions were added,
     ‘format_string()’ and ‘currency()’.

     The *note format(): 61f. function’s 'val' parameter could
     previously be a string as long as no more than one %char specifier
     appeared; now the parameter must be exactly one %char specifier
     with no surrounding text.  An optional 'monetary' parameter was
     also added which, if ‘True’, will use the locale’s rules for
     formatting currency in placing a separator between groups of three
     digits.

     To format strings with multiple %char specifiers, use the new
     ‘format_string()’ function that works like *note format(): 61f. but
     also supports mixing %char specifiers with arbitrary text.

     A new ‘currency()’ function was also added that formats a number
     according to the current locale’s settings.

     (Contributed by Georg Brandl.)

   * The *note mailbox: 8b. module underwent a massive rewrite to add
     the capability to modify mailboxes in addition to reading them.  A
     new set of classes that include ‘mbox’, ‘MH’, and ‘Maildir’ are
     used to read mailboxes, and have an ‘add(message)’ method to add
     messages, ‘remove(key)’ to remove messages, and ‘lock()’/‘unlock()’
     to lock/unlock the mailbox.  The following example converts a
     maildir-format mailbox into an mbox-format one:

          import mailbox

          # 'factory=None' uses email.Message.Message as the class representing
          # individual messages.
          src = mailbox.Maildir('maildir', factory=None)
          dest = mailbox.mbox('/tmp/mbox')

          for msg in src:
              dest.add(msg)

     (Contributed by Gregory K. Johnson.  Funding was provided by
     Google’s 2005 Summer of Code.)

   * New module: the ‘msilib’ module allows creating Microsoft Installer
     ‘.msi’ files and CAB files.  Some support for reading the ‘.msi’
     database is also included.  (Contributed by Martin von Löwis.)

   * The ‘nis’ module now supports accessing domains other than the
     system default domain by supplying a 'domain' argument to the
     ‘nis.match()’ and ‘nis.maps()’ functions.  (Contributed by Ben
     Bell.)

   * The *note operator: 9f. module’s ‘itemgetter()’ and ‘attrgetter()’
     functions now support multiple fields.  A call such as
     ‘operator.attrgetter('a', 'b')’ will return a function that
     retrieves the ‘a’ and ‘b’ attributes.  Combining this new feature
     with the ‘sort()’ method’s ‘key’ parameter lets you easily sort
     lists using multiple fields.  (Contributed by Raymond Hettinger.)

   * The *note optparse: a0. module was updated to version 1.5.1 of the
     Optik library.  The ‘OptionParser’ class gained an ‘epilog’
     attribute, a string that will be printed after the help message,
     and a ‘destroy()’ method to break reference cycles created by the
     object.  (Contributed by Greg Ward.)

   * The *note os: a1. module underwent several changes.  The
     ‘stat_float_times’ variable now defaults to true, meaning that
     *note os.stat(): 4a0. will now return time values as floats.  (This
     doesn’t necessarily mean that *note os.stat(): 4a0. will return
     times that are precise to fractions of a second; not all systems
     support such precision.)

     Constants named *note os.SEEK_SET: 12cf, *note os.SEEK_CUR: 12d0,
     and *note os.SEEK_END: 12d1. have been added; these are the
     parameters to the *note os.lseek(): 1156. function.  Two new
     constants for locking are *note os.O_SHLOCK: 1476. and *note
     os.O_EXLOCK: 1477.

     Two new functions, ‘wait3()’ and ‘wait4()’, were added.  They’re
     similar the ‘waitpid()’ function which waits for a child process to
     exit and returns a tuple of the process ID and its exit status, but
     ‘wait3()’ and ‘wait4()’ return additional information.  ‘wait3()’
     doesn’t take a process ID as input, so it waits for any child
     process to exit and returns a 3-tuple of 'process-id',
     'exit-status', 'resource-usage' as returned from the *note
     resource.getrusage(): 1478. function.  ‘wait4(pid)’ does take a
     process ID. (Contributed by Chad J. Schroeder.)

     On FreeBSD, the *note os.stat(): 4a0. function now returns times
     with nanosecond resolution, and the returned object now has
     ‘st_gen’ and ‘st_birthtime’.  The ‘st_flags’ attribute is also
     available, if the platform supports it.  (Contributed by Antti
     Louko and Diego Pettenò.)

   * The Python debugger provided by the *note pdb: a5. module can now
     store lists of commands to execute when a breakpoint is reached and
     execution stops.  Once breakpoint #1 has been created, enter
     ‘commands 1’ and enter a series of commands to be executed,
     finishing the list with ‘end’.  The command list can include
     commands that resume execution, such as ‘continue’ or ‘next’.
     (Contributed by Grégoire Dooms.)

   * The *note pickle: a6. and ‘cPickle’ modules no longer accept a
     return value of ‘None’ from the *note __reduce__(): 9db. method;
     the method must return a tuple of arguments instead.  The ability
     to return ‘None’ was deprecated in Python 2.4, so this completes
     the removal of the feature.

   * The *note pkgutil: a9. module, containing various utility functions
     for finding packages, was enhanced to support PEP 302(1)’s import
     hooks and now also works for packages stored in ZIP-format
     archives.  (Contributed by Phillip J. Eby.)

   * The pybench benchmark suite by Marc-André Lemburg is now included
     in the ‘Tools/pybench’ directory.  The pybench suite is an
     improvement on the commonly used ‘pystone.py’ program because
     pybench provides a more detailed measurement of the interpreter’s
     speed.  It times particular operations such as function calls,
     tuple slicing, method lookups, and numeric operations, instead of
     performing many different operations and reducing the result to a
     single number as ‘pystone.py’ does.

   * The ‘pyexpat’ module now uses version 2.0 of the Expat parser.
     (Contributed by Trent Mick.)

   * The *note Queue: 13db. class provided by the ‘Queue’ module gained
     two new methods.  ‘join()’ blocks until all items in the queue have
     been retrieved and all processing work on the items have been
     completed.  Worker threads call the other new method,
     ‘task_done()’, to signal that processing for an item has been
     completed.  (Contributed by Raymond Hettinger.)

   * The old ‘regex’ and ‘regsub’ modules, which have been deprecated
     ever since Python 2.0, have finally been deleted.  Other deleted
     modules: ‘statcache’, ‘tzparse’, ‘whrandom’.

   * Also deleted: the ‘lib-old’ directory, which includes ancient
     modules such as ‘dircmp’ and ‘ni’, was removed.  ‘lib-old’ wasn’t
     on the default ‘sys.path’, so unless your programs explicitly added
     the directory to ‘sys.path’, this removal shouldn’t affect your
     code.

   * The *note rlcompleter: bd. module is no longer dependent on
     importing the *note readline: ba. module and therefore now works on
     non-Unix platforms.  (Patch from Robert Kiendl.)

   * The *note SimpleXMLRPCServer: 12f. and *note DocXMLRPCServer: 12f.
     classes now have a ‘rpc_paths’ attribute that constrains XML-RPC
     operations to a limited set of URL paths; the default is to allow
     only ‘'/'’ and ‘'/RPC2'’.  Setting ‘rpc_paths’ to ‘None’ or an
     empty tuple disables this path checking.

   * The *note socket: cc. module now supports ‘AF_NETLINK’ sockets on
     Linux, thanks to a patch from Philippe Biondi.  Netlink sockets are
     a Linux-specific mechanism for communications between a user-space
     process and kernel code; an introductory article about them is at
     ‘https://www.linuxjournal.com/article/7356’.  In Python code,
     netlink addresses are represented as a tuple of 2 integers, ‘(pid,
     group_mask)’.

     Two new methods on socket objects, ‘recv_into(buffer)’ and
     ‘recvfrom_into(buffer)’, store the received data in an object that
     supports the buffer protocol instead of returning the data as a
     string.  This means you can put the data directly into an array or
     a memory-mapped file.

     Socket objects also gained ‘getfamily()’, ‘gettype()’, and
     ‘getproto()’ accessor methods to retrieve the family, type, and
     protocol values for the socket.

   * New module: the ‘spwd’ module provides functions for accessing the
     shadow password database on systems that support shadow passwords.

   * The *note struct: d5. is now faster because it compiles format
     strings into ‘Struct’ objects with ‘pack()’ and ‘unpack()’ methods.
     This is similar to how the *note re: b9. module lets you create
     compiled regular expression objects.  You can still use the
     module-level ‘pack()’ and ‘unpack()’ functions; they’ll create
     ‘Struct’ objects and cache them.  Or you can use ‘Struct’ instances
     directly:

          s = struct.Struct('ih3s')

          data = s.pack(1972, 187, 'abc')
          year, number, name = s.unpack(data)

     You can also pack and unpack data to and from buffer objects
     directly using the ‘pack_into(buffer, offset, v1, v2, ...)’ and
     ‘unpack_from(buffer, offset)’ methods.  This lets you store data
     directly into an array or a memory-mapped file.

     (‘Struct’ objects were implemented by Bob Ippolito at the
     NeedForSpeed sprint.  Support for buffer objects was added by
     Martin Blais, also at the NeedForSpeed sprint.)

   * The Python developers switched from CVS to Subversion during the
     2.5 development process.  Information about the exact build version
     is available as the ‘sys.subversion’ variable, a 3-tuple of
     ‘(interpreter-name, branch-name, revision-range)’.  For example, at
     the time of writing my copy of 2.5 was reporting ‘('CPython',
     'trunk', '45313:45315')’.

     This information is also available to C extensions via the *note
     Py_GetBuildInfo(): 1479. function that returns a string of build
     information like this: ‘"trunk:45355:45356M, Apr 13 2006,
     07:42:19"’.  (Contributed by Barry Warsaw.)

   * Another new function, *note sys._current_frames(): 147a, returns
     the current stack frames for all running threads as a dictionary
     mapping thread identifiers to the topmost stack frame currently
     active in that thread at the time the function is called.
     (Contributed by Tim Peters.)

   * The ‘TarFile’ class in the *note tarfile: de. module now has an
     ‘extractall()’ method that extracts all members from the archive
     into the current working directory.  It’s also possible to set a
     different directory as the extraction target, and to unpack only a
     subset of the archive’s members.

     The compression used for a tarfile opened in stream mode can now be
     autodetected using the mode ‘'r|*'’.  (Contributed by Lars
     Gustäbel.)

   * The *note threading: ed. module now lets you set the stack size
     used when new threads are created.  The ‘stack_size([*size*])’
     function returns the currently configured stack size, and supplying
     the optional 'size' parameter sets a new value.  Not all platforms
     support changing the stack size, but Windows, POSIX threading, and
     OS/2 all do.  (Contributed by Andrew MacIntyre.)

   * The *note unicodedata: 105. module has been updated to use version
     4.1.0 of the Unicode character database.  Version 3.2.0 is required
     by some specifications, so it’s still available as *note
     unicodedata.ucd_3_2_0: 147b.

   * New module: the *note uuid: 110. module generates universally
     unique identifiers (UUIDs) according to RFC 4122(2).  The RFC
     defines several different UUID versions that are generated from a
     starting string, from system properties, or purely randomly.  This
     module contains a ‘UUID’ class and functions named ‘uuid1()’,
     ‘uuid3()’, ‘uuid4()’, and ‘uuid5()’ to generate different versions
     of UUID. (Version 2 UUIDs are not specified in RFC 4122(3) and are
     not supported by this module.)

          >>> import uuid
          >>> # make a UUID based on the host ID and current time
          >>> uuid.uuid1()
          UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')

          >>> # make a UUID using an MD5 hash of a namespace UUID and a name
          >>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
          UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')

          >>> # make a random UUID
          >>> uuid.uuid4()
          UUID('16fd2706-8baf-433b-82eb-8c7fada847da')

          >>> # make a UUID using a SHA-1 hash of a namespace UUID and a name
          >>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org')
          UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')

     (Contributed by Ka-Ping Yee.)

   * The *note weakref: 114. module’s ‘WeakKeyDictionary’ and
     ‘WeakValueDictionary’ types gained new methods for iterating over
     the weak references contained in the dictionary.  ‘iterkeyrefs()’
     and ‘keyrefs()’ methods were added to ‘WeakKeyDictionary’, and
     ‘itervaluerefs()’ and ‘valuerefs()’ were added to
     ‘WeakValueDictionary’.  (Contributed by Fred L. Drake, Jr.)

   * The *note webbrowser: 115. module received a number of
     enhancements.  It’s now usable as a script with ‘python -m
     webbrowser’, taking a URL as the argument; there are a number of
     switches to control the behaviour (‘-n’ for a new browser window,
     ‘-t’ for a new tab).  New module-level functions, ‘open_new()’ and
     ‘open_new_tab()’, were added to support this.  The module’s *note
     open(): 51c. function supports an additional feature, an
     'autoraise' parameter that signals whether to raise the open window
     when possible.  A number of additional browsers were added to the
     supported list such as Firefox, Opera, Konqueror, and elinks.
     (Contributed by Oleg Broytmann and Georg Brandl.)

   * The *note xmlrpclib: 12e. module now supports returning *note
     datetime: 1cc. objects for the XML-RPC date type.  Supply
     ‘use_datetime=True’ to the *note loads(): 147c. function or the
     ‘Unmarshaller’ class to enable this feature.  (Contributed by Skip
     Montanaro.)

   * The *note zipfile: 131. module now supports the ZIP64 version of
     the format, meaning that a .zip archive can now be larger than 4
     GiB and can contain individual files larger than 4 GiB.
     (Contributed by Ronald Oussoren.)

   * The *note zlib: 133. module’s ‘Compress’ and ‘Decompress’ objects
     now support a *note copy(): 25. method that makes a copy of the
     object’s internal state and returns a new ‘Compress’ or
     ‘Decompress’ object.  (Contributed by Chris AtLee.)

* Menu:

* The ctypes package::
* The ElementTree package::
* The hashlib package::
* The sqlite3 package::
* The wsgiref package::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0302/

   (2) https://datatracker.ietf.org/doc/html/rfc4122.html

   (3) https://datatracker.ietf.org/doc/html/rfc4122.html


File: python.info,  Node: The ctypes package,  Next: The ElementTree package,  Up: New Improved and Removed Modules

1.17.13.1 The ctypes package
............................

The *note ctypes: 2a. package, written by Thomas Heller, has been added
to the standard library.  *note ctypes: 2a. lets you call arbitrary
functions in shared libraries or DLLs.  Long-time users may remember the
‘dl’ module, which provides functions for loading shared libraries and
calling functions in them.  The *note ctypes: 2a. package is much
fancier.

To load a shared library or DLL, you must create an instance of the
‘CDLL’ class and provide the name or path of the shared library or DLL.
Once that’s done, you can call arbitrary functions by accessing them as
attributes of the ‘CDLL’ object.

     import ctypes

     libc = ctypes.CDLL('libc.so.6')
     result = libc.printf("Line of output\n")

Type constructors for the various C types are provided: ‘c_int()’,
‘c_float()’, ‘c_double()’, ‘c_char_p()’ (equivalent to char*), and so
forth.  Unlike Python’s types, the C versions are all mutable; you can
assign to their ‘value’ attribute to change the wrapped value.  Python
integers and strings will be automatically converted to the
corresponding C types, but for other types you must call the correct
type constructor.  (And I mean 'must'; getting it wrong will often
result in the interpreter crashing with a segmentation fault.)

You shouldn’t use ‘c_char_p()’ with a Python string when the C function
will be modifying the memory area, because Python strings are supposed
to be immutable; breaking this rule will cause puzzling bugs.  When you
need a modifiable memory area, use ‘create_string_buffer()’:

     s = "this is a string"
     buf = ctypes.create_string_buffer(s)
     libc.strfry(buf)

C functions are assumed to return integers, but you can set the
‘restype’ attribute of the function object to change this:

     >>> libc.atof('2.71828')
     -1783957616
     >>> libc.atof.restype = ctypes.c_double
     >>> libc.atof('2.71828')
     2.71828

*note ctypes: 2a. also provides a wrapper for Python’s C API as the
‘ctypes.pythonapi’ object.  This object does 'not' release the global
interpreter lock before calling a function, because the lock must be
held when calling into the interpreter’s code.  There’s a *note
py_object: 147f. type constructor that will create a *note PyObject:
339.* pointer.  A simple usage:

     import ctypes

     d = {}
     ctypes.pythonapi.PyObject_SetItem(ctypes.py_object(d),
               ctypes.py_object("abc"),  ctypes.py_object(1))
     # d is now {'abc', 1}.

Don’t forget to use *note py_object(): 147f.; if it’s omitted you end up
with a segmentation fault.

*note ctypes: 2a. has been around for a while, but people still write
and distribution hand-coded extension modules because you can’t rely on
*note ctypes: 2a. being present.  Perhaps developers will begin to write
Python wrappers atop a library accessed through *note ctypes: 2a.
instead of extension modules, now that *note ctypes: 2a. is included
with core Python.

Ver também
..........

‘https://web.archive.org/web/20180410025338/http://starship.python.net/crew/theller/ctypes/’

     The pre-stdlib ctypes web page, with a tutorial, reference, and
     FAQ.

The documentation for the *note ctypes: 2a. module.


File: python.info,  Node: The ElementTree package,  Next: The hashlib package,  Prev: The ctypes package,  Up: New Improved and Removed Modules

1.17.13.2 The ElementTree package
.................................

A subset of Fredrik Lundh’s ElementTree library for processing XML has
been added to the standard library as ‘xml.etree’.  The available
modules are ‘ElementTree’, ‘ElementPath’, and ‘ElementInclude’ from
ElementTree 1.2.6.  The ‘cElementTree’ accelerator module is also
included.

The rest of this section will provide a brief overview of using
ElementTree.  Full documentation for ElementTree is available at
‘https://web.archive.org/web/20201124024954/http://effbot.org/zone/element-index.htm’.

ElementTree represents an XML document as a tree of element nodes.  The
text content of the document is stored as the ‘text’ and ‘tail’
attributes of (This is one of the major differences between ElementTree
and the Document Object Model; in the DOM there are many different types
of node, including ‘TextNode’.)

The most commonly used parsing function is ‘parse()’, that takes either
a string (assumed to contain a filename) or a file-like object and
returns an ‘ElementTree’ instance:

     from xml.etree import ElementTree as ET

     tree = ET.parse('ex-1.xml')

     feed = urllib.urlopen(
               'http://planet.python.org/rss10.xml')
     tree = ET.parse(feed)

Once you have an ‘ElementTree’ instance, you can call its ‘getroot()’
method to get the root ‘Element’ node.

There’s also an ‘XML()’ function that takes a string literal and returns
an ‘Element’ node (not an ‘ElementTree’).  This function provides a tidy
way to incorporate XML fragments, approaching the convenience of an XML
literal:

     svg = ET.XML("""<svg width="10px" version="1.0">
                  </svg>""")
     svg.set('height', '320px')
     svg.append(elem1)

Each XML element supports some dictionary-like and some list-like access
methods.  Dictionary-like operations are used to access attribute
values, and list-like operations are used to access child nodes.

Operação                            Resultado
                                    
-------------------------------------------------------------------------------------
                                    
‘elem[n]’                           Returns n’th child element.
                                    
                                    
‘elem[m:n]’                         Returns list of m’th through n’th child
                                    elements.
                                    
                                    
‘len(elem)’                         Returns number of child elements.
                                    
                                    
‘list(elem)’                        Returns list of child elements.
                                    
                                    
‘elem.append(elem2)’                Adds 'elem2' as a child.
                                    
                                    
‘elem.insert(index, elem2)’         Inserts 'elem2' at the specified location.
                                    
                                    
‘del elem[n]’                       Deletes n’th child element.
                                    
                                    
‘elem.keys()’                       Returns list of attribute names.
                                    
                                    
‘elem.get(name)’                    Returns value of attribute 'name'.
                                    
                                    
‘elem.set(name, value)’             Sets new value for attribute 'name'.
                                    
                                    
‘elem.attrib’                       Retrieves the dictionary containing
                                    attributes.
                                    
                                    
‘del elem.attrib[name]’             Deletes attribute 'name'.
                                    

Comments and processing instructions are also represented as ‘Element’
nodes.  To check if a node is a comment or processing instructions:

     if elem.tag is ET.Comment:
         ...
     elif elem.tag is ET.ProcessingInstruction:
         ...

To generate XML output, you should call the ‘ElementTree.write()’
method.  Like ‘parse()’, it can take either a string or a file-like
object:

     # Encoding is US-ASCII
     tree.write('output.xml')

     # Encoding is UTF-8
     f = open('output.xml', 'w')
     tree.write(f, encoding='utf-8')

(Caution: the default encoding used for output is ASCII. For general XML
work, where an element’s name may contain arbitrary Unicode characters,
ASCII isn’t a very useful encoding because it will raise an exception if
an element’s name contains any characters with values greater than 127.
Therefore, it’s best to specify a different encoding such as UTF-8 that
can handle any Unicode character.)

This section is only a partial description of the ElementTree
interfaces.  Please read the package’s official documentation for more
details.

Ver também
..........

‘https://web.archive.org/web/20201124024954/http://effbot.org/zone/element-index.htm’

     Official documentation for ElementTree.


File: python.info,  Node: The hashlib package,  Next: The sqlite3 package,  Prev: The ElementTree package,  Up: New Improved and Removed Modules

1.17.13.3 The hashlib package
.............................

A new *note hashlib: 68. module, written by Gregory P. Smith, has been
added to replace the ‘md5’ and ‘sha’ modules.  *note hashlib: 68. adds
support for additional secure hashes (SHA-224, SHA-256, SHA-384, and
SHA-512).  When available, the module uses OpenSSL for fast platform
optimized implementations of algorithms.

The old ‘md5’ and ‘sha’ modules still exist as wrappers around hashlib
to preserve backwards compatibility.  The new module’s interface is very
close to that of the old modules, but not identical.  The most
significant difference is that the constructor functions for creating
new hashing objects are named differently.

     # Old versions
     h = md5.md5()
     h = md5.new()

     # New version
     h = hashlib.md5()

     # Old versions
     h = sha.sha()
     h = sha.new()

     # New version
     h = hashlib.sha1()

     # Hash that weren't previously available
     h = hashlib.sha224()
     h = hashlib.sha256()
     h = hashlib.sha384()
     h = hashlib.sha512()

     # Alternative form
     h = hashlib.new('md5')          # Provide algorithm as a string

Once a hash object has been created, its methods are the same as before:
‘update(string)’ hashes the specified string into the current digest
state, ‘digest()’ and ‘hexdigest()’ return the digest value as a binary
string or a string of hex digits, and *note copy(): 25. returns a new
hashing object with the same digest state.

Ver também
..........

The documentation for the *note hashlib: 68. module.


File: python.info,  Node: The sqlite3 package,  Next: The wsgiref package,  Prev: The hashlib package,  Up: New Improved and Removed Modules

1.17.13.4 The sqlite3 package
.............................

The pysqlite module (‘https://www.pysqlite.org’), a wrapper for the
SQLite embedded database, has been added to the standard library under
the package name *note sqlite3: cf.

SQLite é uma biblioteca C que fornece um banco de dados leve baseado em
disco que não requer um processo de servidor separado e permite acessar
o banco de dados usando uma variante não padrão da linguagem de consulta
SQL. Algumas aplicações podem usar SQLite para armazenamento interno de
dados.  Também é possível prototipar um aplicativo usando SQLite e, em
seguida, portar o código para um banco de dados maior, como PostgreSQL
ou Oracle.

pysqlite was written by Gerhard Häring and provides a SQL interface
compliant with the DB-API 2.0 specification described by PEP 249(1).

If you’re compiling the Python source yourself, note that the source
tree doesn’t include the SQLite code, only the wrapper module.  You’ll
need to have the SQLite libraries and headers installed before compiling
Python, and the build process will compile the module when the necessary
headers are available.

To use the module, you must first create a ‘Connection’ object that
represents the database.  Here the data will be stored in the
‘/tmp/example’ file:

     conn = sqlite3.connect('/tmp/example')

You can also supply the special name ‘:memory:’ to create a database in
RAM.

Once you have a ‘Connection’, you can create a ‘Cursor’ object and call
its ‘execute()’ method to perform SQL commands:

     c = conn.cursor()

     # Create table
     c.execute('''create table stocks
     (date text, trans text, symbol text,
      qty real, price real)''')

     # Insert a row of data
     c.execute("""insert into stocks
               values ('2006-01-05','BUY','RHAT',100,35.14)""")

Usually your SQL operations will need to use values from Python
variables.  You shouldn’t assemble your query using Python’s string
operations because doing so is insecure; it makes your program
vulnerable to an SQL injection attack.

Instead, use the DB-API’s parameter substitution.  Put ‘?’ as a
placeholder wherever you want to use a value, and then provide a tuple
of values as the second argument to the cursor’s ‘execute()’ method.
(Other database modules may use a different placeholder, such as ‘%s’ or
‘:1’.)  For example:

     # Never do this -- insecure!
     symbol = 'IBM'
     c.execute("... where symbol = '%s'" % symbol)

     # Do this instead
     t = (symbol,)
     c.execute('select * from stocks where symbol=?', t)

     # Larger example
     for t in (('2006-03-28', 'BUY', 'IBM', 1000, 45.00),
               ('2006-04-05', 'BUY', 'MSOFT', 1000, 72.00),
               ('2006-04-06', 'SELL', 'IBM', 500, 53.00),
              ):
         c.execute('insert into stocks values (?,?,?,?,?)', t)

To retrieve data after executing a SELECT statement, you can either
treat the cursor as an iterator, call the cursor’s ‘fetchone()’ method
to retrieve a single matching row, or call ‘fetchall()’ to get a list of
the matching rows.

This example uses the iterator form:

     >>> c = conn.cursor()
     >>> c.execute('select * from stocks order by price')
     >>> for row in c:
     ...    print row
     ...
     (u'2006-01-05', u'BUY', u'RHAT', 100, 35.140000000000001)
     (u'2006-03-28', u'BUY', u'IBM', 1000, 45.0)
     (u'2006-04-06', u'SELL', u'IBM', 500, 53.0)
     (u'2006-04-05', u'BUY', u'MSOFT', 1000, 72.0)
     >>>

For more information about the SQL dialect supported by SQLite, see
‘https://www.sqlite.org’.

Ver também
..........

‘https://www.pysqlite.org’

     The pysqlite web page.

‘https://www.sqlite.org’

     A página web do SQLite; a documentação descreve a sintaxe e os
     tipos de dados disponíveis para o dialeto SQL suportado.

The documentation for the *note sqlite3: cf. module.

PEP 249(2) - Especificação 2.0 da API de banco de dados

     PEP escrita por Marc-André Lemburg.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0249/

   (2) https://peps.python.org/pep-0249/


File: python.info,  Node: The wsgiref package,  Prev: The sqlite3 package,  Up: New Improved and Removed Modules

1.17.13.5 The wsgiref package
.............................

The Web Server Gateway Interface (WSGI) v1.0 defines a standard
interface between web servers and Python web applications and is
described in PEP 333(1).  The *note wsgiref: 118. package is a reference
implementation of the WSGI specification.

The package includes a basic HTTP server that will run a WSGI
application; this server is useful for debugging but isn’t intended for
production use.  Setting up a server takes only a few lines of code:

     from wsgiref import simple_server

     wsgi_app = ...

     host = ''
     port = 8000
     httpd = simple_server.make_server(host, port, wsgi_app)
     httpd.serve_forever()

Ver também
..........

‘https://web.archive.org/web/20160331090247/http://wsgi.readthedocs.org/en/latest/’

     A central web site for WSGI-related resources.

PEP 333(2) - Python Web Server Gateway Interface v1.0

     PEP written by Phillip J. Eby.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0333/

   (2) https://peps.python.org/pep-0333/


File: python.info,  Node: Mudanças a construções e API C<10>,  Next: Porting to Python 2 5,  Prev: New Improved and Removed Modules,  Up: What’s New in Python 2 5

1.17.14 Mudanças a construções e API C
--------------------------------------

As alterações no processo de construção do Python e na API C incluem:

   * The Python source tree was converted from CVS to Subversion, in a
     complex migration procedure that was supervised and flawlessly
     carried out by Martin von Löwis.  The procedure was developed as
     PEP 347(1).

   * Coverity, a company that markets a source code analysis tool called
     Prevent, provided the results of their examination of the Python
     source code.  The analysis found about 60 bugs that were quickly
     fixed.  Many of the bugs were refcounting problems, often occurring
     in error-handling code.  See ‘https://scan.coverity.com’ for the
     statistics.

   * The largest change to the C API came from PEP 353(2), which
     modifies the interpreter to use a *note Py_ssize_t: a69. type
     definition instead of int.  See the earlier section *note PEP 353;
     Using ssize_t as the index type: 145f. for a discussion of this
     change.

   * The design of the bytecode compiler has changed a great deal, no
     longer generating bytecode by traversing the parse tree.  Instead
     the parse tree is converted to an abstract syntax tree (or AST),
     and it is the abstract syntax tree that’s traversed to produce the
     bytecode.

     It’s possible for Python code to obtain AST objects by using the
     *note compile(): 192. built-in and specifying ‘_ast.PyCF_ONLY_AST’
     as the value of the 'flags' parameter:

          from _ast import PyCF_ONLY_AST
          ast = compile("""a=0
          for i in range(10):
              a += i
          """, "<string>", 'exec', PyCF_ONLY_AST)

          assignment = ast.body[0]
          for_loop = ast.body[1]

     No official documentation has been written for the AST code yet,
     but PEP 339(3) discusses the design.  To start learning about the
     code, read the definition of the various AST nodes in
     ‘Parser/Python.asdl’.  A Python script reads this file and
     generates a set of C structure definitions in
     ‘Include/Python-ast.h’.  The ‘PyParser_ASTFromString()’ and
     ‘PyParser_ASTFromFile()’, defined in ‘Include/pythonrun.h’, take
     Python source as input and return the root of an AST representing
     the contents.  This AST can then be turned into a code object by
     ‘PyAST_Compile()’.  For more information, read the source code, and
     then ask questions on python-dev.

     The AST code was developed under Jeremy Hylton’s management, and
     implemented by (in alphabetical order) Brett Cannon, Nick Coghlan,
     Grant Edwards, John Ehresman, Kurt Kaiser, Neal Norwitz, Tim
     Peters, Armin Rigo, and Neil Schemenauer, plus the participants in
     a number of AST sprints at conferences such as PyCon.

   * Evan Jones’s patch to obmalloc, first described in a talk at PyCon
     DC 2005, was applied.  Python 2.4 allocated small objects in
     256K-sized arenas, but never freed arenas.  With this patch, Python
     will free arenas when they’re empty.  The net effect is that on
     some platforms, when you allocate many objects, Python’s memory
     usage may actually drop when you delete them and the memory may be
     returned to the operating system.  (Implemented by Evan Jones, and
     reworked by Tim Peters.)

     Note that this change means extension modules must be more careful
     when allocating memory.  Python’s API has many different functions
     for allocating memory that are grouped into families.  For example,
     *note PyMem_Malloc(): c81, *note PyMem_Realloc(): 106a, and *note
     PyMem_Free(): 148a. are one family that allocates raw memory, while
     *note PyObject_Malloc(): c83, *note PyObject_Realloc(): 148b, and
     *note PyObject_Free(): c80. are another family that’s supposed to
     be used for creating Python objects.

     Previously these different families all reduced to the platform’s
     ‘malloc()’ and ‘free()’ functions.  This meant it didn’t matter if
     you got things wrong and allocated memory with the ‘PyMem’ function
     but freed it with the ‘PyObject’ function.  With 2.5’s changes to
     obmalloc, these families now do different things and mismatches
     will probably result in a segfault.  You should carefully test your
     C extension modules with Python 2.5.

   * The built-in set types now have an official C API. Call *note
     PySet_New(): 148c. and *note PyFrozenSet_New(): 148d. to create a
     new set, *note PySet_Add(): 148e. and *note PySet_Discard(): 148f.
     to add and remove elements, and *note PySet_Contains(): 1490. and
     *note PySet_Size(): 1491. to examine the set’s state.  (Contributed
     by Raymond Hettinger.)

   * C code can now obtain information about the exact revision of the
     Python interpreter by calling the *note Py_GetBuildInfo(): 1479.
     function that returns a string of build information like this:
     ‘"trunk:45355:45356M, Apr 13 2006, 07:42:19"’.  (Contributed by
     Barry Warsaw.)

   * Two new macros can be used to indicate C functions that are local
     to the current file so that a faster calling convention can be
     used.  *note Py_LOCAL: 1492. declares the function as returning a
     value of the specified 'type' and uses a fast-calling qualifier.
     *note Py_LOCAL_INLINE: 1493. does the same thing and also requests
     the function be inlined.  If macro ‘PY_LOCAL_AGGRESSIVE’ is defined
     before ‘python.h’ is included, a set of more aggressive
     optimizations are enabled for the module; you should benchmark the
     results to find out if these optimizations actually make the code
     faster.  (Contributed by Fredrik Lundh at the NeedForSpeed sprint.)

   * ‘PyErr_NewException(name, base, dict)’ can now accept a tuple of
     base classes as its 'base' argument.  (Contributed by Georg
     Brandl.)

   * The ‘PyErr_Warn()’ function for issuing warnings is now deprecated
     in favour of ‘PyErr_WarnEx(category, message, stacklevel)’ which
     lets you specify the number of stack frames separating this
     function and the caller.  A 'stacklevel' of 1 is the function
     calling *note PyErr_WarnEx(): 1494, 2 is the function above that,
     and so forth.  (Added by Neal Norwitz.)

   * The CPython interpreter is still written in C, but the code can now
     be compiled with a C++ compiler without errors.  (Implemented by
     Anthony Baxter, Martin von Löwis, Skip Montanaro.)

   * The ‘PyRange_New()’ function was removed.  It was never documented,
     never used in the core code, and had dangerously lax error
     checking.  In the unlikely case that your extensions were using it,
     you can replace it by something like the following:

          range = PyObject_CallFunction((PyObject*) &PyRange_Type, "lll",
                                        start, stop, step);

* Menu:

* Port-Specific Changes::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0347/

   (2) https://peps.python.org/pep-0353/

   (3) https://peps.python.org/pep-0339/


File: python.info,  Node: Port-Specific Changes,  Up: Mudanças a construções e API C<10>

1.17.14.1 Port-Specific Changes
...............................

   * MacOS X (10.3 and higher): dynamic loading of modules now uses the
     ‘dlopen()’ function instead of MacOS-specific functions.

   * MacOS X: an ‘--enable-universalsdk’ switch was added to the
     ‘configure’ script that compiles the interpreter as a universal
     binary able to run on both PowerPC and Intel processors.
     (Contributed by Ronald Oussoren; bpo-2573(1).)

   * Windows: ‘.dll’ is no longer supported as a filename extension for
     extension modules.  ‘.pyd’ is now the only filename extension that
     will be searched for.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=2573


File: python.info,  Node: Porting to Python 2 5,  Next: Reconhecimentos<3>,  Prev: Mudanças a construções e API C<10>,  Up: What’s New in Python 2 5

1.17.15 Porting to Python 2.5
-----------------------------

This section lists previously described changes that may require changes
to your code:

   * ASCII is now the default encoding for modules.  It’s now a syntax
     error if a module contains string literals with 8-bit characters
     but doesn’t have an encoding declaration.  In Python 2.4 this
     triggered a warning, not a syntax error.

   * Previously, the ‘gi_frame’ attribute of a generator was always a
     frame object.  Because of the PEP 342(1) changes described in
     section *note PEP 342; New Generator Features: 144b, it’s now
     possible for ‘gi_frame’ to be ‘None’.

   * A new warning, *note UnicodeWarning: 146b, is triggered when you
     attempt to compare a Unicode string and an 8-bit string that can’t
     be converted to Unicode using the default ASCII encoding.
     Previously such comparisons would raise a *note UnicodeDecodeError:
     a1d. exception.

   * Library: the *note csv: 29. module is now stricter about multi-line
     quoted fields.  If your files contain newlines embedded within
     fields, the input should be split into lines in a manner which
     preserves the newline characters.

   * Library: the *note locale: 86. module’s *note format(): 61f.
     function’s would previously accept any string as long as no more
     than one %char specifier appeared.  In Python 2.5, the argument
     must be exactly one %char specifier with no surrounding text.

   * Library: The *note pickle: a6. and ‘cPickle’ modules no longer
     accept a return value of ‘None’ from the *note __reduce__(): 9db.
     method; the method must return a tuple of arguments instead.  The
     modules also no longer accept the deprecated 'bin' keyword
     parameter.

   * Library: The *note SimpleXMLRPCServer: 12f. and *note
     DocXMLRPCServer: 12f. classes now have a ‘rpc_paths’ attribute that
     constrains XML-RPC operations to a limited set of URL paths; the
     default is to allow only ‘'/'’ and ‘'/RPC2'’.  Setting ‘rpc_paths’
     to ‘None’ or an empty tuple disables this path checking.

   * C API: Many functions now use *note Py_ssize_t: a69. instead of int
     to allow processing more data on 64-bit machines.  Extension code
     may need to make the same change to avoid warnings and to support
     64-bit machines.  See the earlier section *note PEP 353; Using
     ssize_t as the index type: 145f. for a discussion of this change.

   * C API: The obmalloc changes mean that you must be careful to not
     mix usage of the ‘PyMem_*’ and ‘PyObject_*’ families of functions.
     Memory allocated with one family’s ‘*_Malloc’ must be freed with
     the corresponding family’s ‘*_Free’ function.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0342/


File: python.info,  Node: Reconhecimentos<3>,  Prev: Porting to Python 2 5,  Up: What’s New in Python 2 5

1.17.16 Reconhecimentos
-----------------------

The author would like to thank the following people for offering
suggestions, corrections and assistance with various drafts of this
article: Georg Brandl, Nick Coghlan, Phillip J. Eby, Lars Gustäbel,
Raymond Hettinger, Ralf W. Grosse-Kunstleve, Kent Johnson, Iain Lowe,
Martin von Löwis, Fredrik Lundh, Andrew McNamara, Skip Montanaro,
Gustavo Niemeyer, Paul Prescod, James Pryor, Mike Rovner, Scott Weikart,
Barry Warsaw, Thomas Wouters.


File: python.info,  Node: What’s New in Python 2 4,  Next: What’s New in Python 2 3,  Prev: What’s New in Python 2 5,  Up: O que há de novo no Python

1.18 What’s New in Python 2.4
=============================


Autor: A.M. Kuchling

This article explains the new features in Python 2.4.1, released on
March 30, 2005.

Python 2.4 is a medium-sized release.  It doesn’t introduce as many
changes as the radical Python 2.2, but introduces more features than the
conservative 2.3 release.  The most significant new language features
are function decorators and generator expressions; most other changes
are to the standard library.

According to the CVS change logs, there were 481 patches applied and 502
bugs fixed between Python 2.3 and 2.4.  Both figures are likely to be
underestimates.

This article doesn’t attempt to provide a complete specification of
every single new feature, but instead provides a brief introduction to
each feature.  For full details, you should refer to the documentation
for Python 2.4, such as the Python Library Reference and the Python
Reference Manual.  Often you will be referred to the PEP for a
particular new feature for explanations of the implementation and design
rationale.

* Menu:

* PEP 218; Built-In Set Objects: PEP 218 Built-In Set Objects.
* PEP 237; Unifying Long Integers and Integers: PEP 237 Unifying Long Integers and Integers.
* PEP 289; Generator Expressions: PEP 289 Generator Expressions.
* PEP 292; Simpler String Substitutions: PEP 292 Simpler String Substitutions.
* PEP 318; Decorators for Functions and Methods: PEP 318 Decorators for Functions and Methods.
* PEP 322; Reverse Iteration: PEP 322 Reverse Iteration.
* PEP 324; New subprocess Module: PEP 324 New subprocess Module.
* PEP 327; Decimal Data Type: PEP 327 Decimal Data Type.
* PEP 328; Multi-line Imports: PEP 328 Multi-line Imports.
* PEP 331; Locale-Independent Float/String Conversions: PEP 331 Locale-Independent Float/String Conversions.
* Outras mudanças na linguagem: Outras mudanças na linguagem<17>.
* New, Improved, and Deprecated Modules: New Improved and Deprecated Modules<3>.
* Mudanças a construções e API C: Mudanças a construções e API C<11>.
* Porting to Python 2.4: Porting to Python 2 4.
* Reconhecimentos: Reconhecimentos<4>.


File: python.info,  Node: PEP 218 Built-In Set Objects,  Next: PEP 237 Unifying Long Integers and Integers,  Up: What’s New in Python 2 4

1.18.1 PEP 218: Built-In Set Objects
------------------------------------

Python 2.3 introduced the ‘sets’ module.  C implementations of set data
types have now been added to the Python core as two new built-in types,
‘set(iterable)’ and ‘frozenset(iterable)’.  They provide high speed
operations for membership testing, for eliminating duplicates from
sequences, and for mathematical operations like unions, intersections,
differences, and symmetric differences.

     >>> a = set('abracadabra')              # form a set from a string
     >>> 'z' in a                            # fast membership testing
     False
     >>> a                                   # unique letters in a
     set(['a', 'r', 'b', 'c', 'd'])
     >>> ''.join(a)                          # convert back into a string
     'arbcd'

     >>> b = set('alacazam')                 # form a second set
     >>> a - b                               # letters in a but not in b
     set(['r', 'd', 'b'])
     >>> a | b                               # letters in either a or b
     set(['a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'])
     >>> a & b                               # letters in both a and b
     set(['a', 'c'])
     >>> a ^ b                               # letters in a or b but not both
     set(['r', 'd', 'b', 'm', 'z', 'l'])

     >>> a.add('z')                          # add a new element
     >>> a.update('wxy')                     # add multiple new elements
     >>> a
     set(['a', 'c', 'b', 'd', 'r', 'w', 'y', 'x', 'z'])
     >>> a.remove('x')                       # take one element out
     >>> a
     set(['a', 'c', 'b', 'd', 'r', 'w', 'y', 'z'])

The *note frozenset(): 5da. type is an immutable version of *note set():
5d9.  Since it is immutable and hashable, it may be used as a dictionary
key or as a member of another set.

The ‘sets’ module remains in the standard library, and may be useful if
you wish to subclass the ‘Set’ or ‘ImmutableSet’ classes.  There are
currently no plans to deprecate the module.

Ver também
..........

PEP 218(1) - Adding a Built-In Set Object Type

     Originally proposed by Greg Wilson and ultimately implemented by
     Raymond Hettinger.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0218/


File: python.info,  Node: PEP 237 Unifying Long Integers and Integers,  Next: PEP 289 Generator Expressions,  Prev: PEP 218 Built-In Set Objects,  Up: What’s New in Python 2 4

1.18.2 PEP 237: Unifying Long Integers and Integers
---------------------------------------------------

The lengthy transition process for this PEP, begun in Python 2.2, takes
another step forward in Python 2.4.  In 2.3, certain integer operations
that would behave differently after int/long unification triggered *note
FutureWarning: 415. warnings and returned values limited to 32 or 64
bits (depending on your platform).  In 2.4, these expressions no longer
produce a warning and instead produce a different result that’s usually
a long integer.

The problematic expressions are primarily left shifts and lengthy
hexadecimal and octal constants.  For example, ‘2 << 32’ results in a
warning in 2.3, evaluating to 0 on 32-bit platforms.  In Python 2.4,
this expression now returns the correct answer, 8589934592.

Ver também
..........

PEP 237(1) - Unifying Long Integers and Integers

     Original PEP written by Moshe Zadka and GvR. The changes for 2.4
     were implemented by Kalle Svensson.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0237/


File: python.info,  Node: PEP 289 Generator Expressions,  Next: PEP 292 Simpler String Substitutions,  Prev: PEP 237 Unifying Long Integers and Integers,  Up: What’s New in Python 2 4

1.18.3 PEP 289: Generator Expressions
-------------------------------------

The iterator feature introduced in Python 2.2 and the *note itertools:
81. module make it easier to write programs that loop through large data
sets without having the entire data set in memory at one time.  List
comprehensions don’t fit into this picture very well because they
produce a Python list object containing all of the items.  This
unavoidably pulls all of the objects into memory, which can be a problem
if your data set is very large.  When trying to write a functionally
styled program, it would be natural to write something like:

     links = [link for link in get_all_links() if not link.followed]
     for link in links:
         ...

instead of

     for link in get_all_links():
         if link.followed:
             continue
         ...

The first form is more concise and perhaps more readable, but if you’re
dealing with a large number of link objects you’d have to write the
second form to avoid having all link objects in memory at the same time.

Generator expressions work similarly to list comprehensions but don’t
materialize the entire list; instead they create a generator that will
return elements one by one.  The above example could be written as:

     links = (link for link in get_all_links() if not link.followed)
     for link in links:
         ...

Generator expressions always have to be written inside parentheses, as
in the above example.  The parentheses signalling a function call also
count, so if you want to create an iterator that will be immediately
passed to a function you could write:

     print sum(obj.count for obj in list_all_objects())

Generator expressions differ from list comprehensions in various small
ways.  Most notably, the loop variable ('obj' in the above example) is
not accessible outside of the generator expression.  List comprehensions
leave the variable assigned to its last value; future versions of Python
will change this, making list comprehensions match generator expressions
in this respect.

Ver também
..........

PEP 289(1) - Generator Expressions

     Proposed by Raymond Hettinger and implemented by Jiwon Seo with
     early efforts steered by Hye-Shik Chang.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0289/


File: python.info,  Node: PEP 292 Simpler String Substitutions,  Next: PEP 318 Decorators for Functions and Methods,  Prev: PEP 289 Generator Expressions,  Up: What’s New in Python 2 4

1.18.4 PEP 292: Simpler String Substitutions
--------------------------------------------

Some new classes in the standard library provide an alternative
mechanism for substituting variables into strings; this style of
substitution may be better for applications where untrained users need
to edit templates.

The usual way of substituting variables by name is the ‘%’ operator:

     >>> '%(page)i: %(title)s' % {'page':2, 'title': 'The Best of Times'}
     '2: The Best of Times'

When writing the template string, it can be easy to forget the ‘i’ or
‘s’ after the closing parenthesis.  This isn’t a big problem if the
template is in a Python module, because you run the code, get an
“Unsupported format character” *note ValueError: 202, and fix the
problem.  However, consider an application such as Mailman where
template strings or translations are being edited by users who aren’t
aware of the Python language.  The format string’s syntax is complicated
to explain to such users, and if they make a mistake, it’s difficult to
provide helpful feedback to them.

PEP 292 adds a ‘Template’ class to the *note string: d3. module that
uses ‘$’ to indicate a substitution:

     >>> import string
     >>> t = string.Template('$page: $title')
     >>> t.substitute({'page':2, 'title': 'The Best of Times'})
     '2: The Best of Times'

If a key is missing from the dictionary, the ‘substitute()’ method will
raise a *note KeyError: 344.  There’s also a ‘safe_substitute()’ method
that ignores missing keys:

     >>> t = string.Template('$page: $title')
     >>> t.safe_substitute({'page':3})
     '3: $title'

Ver também
..........

PEP 292(1) - Simpler String Substitutions

     Written and implemented by Barry Warsaw.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0292/


File: python.info,  Node: PEP 318 Decorators for Functions and Methods,  Next: PEP 322 Reverse Iteration,  Prev: PEP 292 Simpler String Substitutions,  Up: What’s New in Python 2 4

1.18.5 PEP 318: Decorators for Functions and Methods
----------------------------------------------------

Python 2.2 extended Python’s object model by adding static methods and
class methods, but it didn’t extend Python’s syntax to provide any new
way of defining static or class methods.  Instead, you had to write a
*note def: 14a2. statement in the usual way, and pass the resulting
method to a *note staticmethod(): 416. or *note classmethod(): 166.
function that would wrap up the function as a method of the new type.
Your code would look like this:

     class C:
        def meth (cls):
            ...

        meth = classmethod(meth)   # Rebind name to wrapped-up class method

If the method was very long, it would be easy to miss or forget the
*note classmethod(): 166. invocation after the function body.

The intention was always to add some syntax to make such definitions
more readable, but at the time of 2.2’s release a good syntax was not
obvious.  Today a good syntax 'still' isn’t obvious but users are asking
for easier access to the feature; a new syntactic feature has been added
to meet this need.

The new feature is called “function decorators”.  The name comes from
the idea that *note classmethod(): 166, *note staticmethod(): 416, and
friends are storing additional information on a function object; they’re
'decorating' functions with more details.

The notation borrows from Java and uses the ‘'@'’ character as an
indicator.  Using the new syntax, the example above would be written:

     class C:

        @classmethod
        def meth (cls):
            ...

The ‘@classmethod’ is shorthand for the ‘meth=classmethod(meth)’
assignment.  More generally, if you have the following:

     @A
     @B
     @C
     def f ():
         ...

It’s equivalent to the following pre-decorator code:

     def f(): ...
     f = A(B(C(f)))

Decorators must come on the line before a function definition, one
decorator per line, and can’t be on the same line as the def statement,
meaning that ‘@A def f(): ...’ is illegal.  You can only decorate
function definitions, either at the module level or inside a class; you
can’t decorate class definitions.

A decorator is just a function that takes the function to be decorated
as an argument and returns either the same function or some new object.
The return value of the decorator need not be callable (though it
typically is), unless further decorators will be applied to the result.
It’s easy to write your own decorators.  The following simple example
just sets an attribute on the function object:

     >>> def deco(func):
     ...    func.attr = 'decorated'
     ...    return func
     ...
     >>> @deco
     ... def f(): pass
     ...
     >>> f
     <function f at 0x402ef0d4>
     >>> f.attr
     'decorated'
     >>>

As a slightly more realistic example, the following decorator checks
that the supplied argument is an integer:

     def require_int (func):
         def wrapper (arg):
             assert isinstance(arg, int)
             return func(arg)

         return wrapper

     @require_int
     def p1 (arg):
         print arg

     @require_int
     def p2(arg):
         print arg*2

An example in PEP 318(1) contains a fancier version of this idea that
lets you both specify the required type and check the returned type.

Decorator functions can take arguments.  If arguments are supplied, your
decorator function is called with only those arguments and must return a
new decorator function; this function must take a single function and
return a function, as previously described.  In other words, ‘@A @B
@C(args)’ becomes:

     def f(): ...
     _deco = C(args)
     f = A(B(_deco(f)))

Getting this right can be slightly brain-bending, but it’s not too
difficult.

A small related change makes the *note func_name: 1317. attribute of
functions writable.  This attribute is used to display function names in
tracebacks, so decorators should change the name of any new function
that’s constructed and returned.

Ver também
..........

PEP 318(2) - Decorators for Functions, Methods and Classes

     Written by Kevin D. Smith, Jim Jewett, and Skip Montanaro.  Several
     people wrote patches implementing function decorators, but the one
     that was actually checked in was patch #979728, written by Mark
     Russell.

‘https://wiki.python.org/moin/PythonDecoratorLibrary’

     This Wiki page contains several examples of decorators.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0318/

   (2) https://peps.python.org/pep-0318/


File: python.info,  Node: PEP 322 Reverse Iteration,  Next: PEP 324 New subprocess Module,  Prev: PEP 318 Decorators for Functions and Methods,  Up: What’s New in Python 2 4

1.18.6 PEP 322: Reverse Iteration
---------------------------------

A new built-in function, ‘reversed(seq)’, takes a sequence and returns
an iterator that loops over the elements of the sequence in reverse
order.

     >>> for i in reversed(xrange(1,4)):
     ...    print i
     ...
     3
     2
     1

Compared to extended slicing, such as ‘range(1,4)[::-1]’, *note
reversed(): 869. is easier to read, runs faster, and uses substantially
less memory.

Note that *note reversed(): 869. only accepts sequences, not arbitrary
iterators.  If you want to reverse an iterator, first convert it to a
list with *note list(): 611.

     >>> input = open('/etc/passwd', 'r')
     >>> for line in reversed(list(input)):
     ...   print line
     ...
     root:*:0:0:System Administrator:/var/root:/bin/tcsh
       ...

Ver também
..........

PEP 322(1) - Reverse Iteration

     Written and implemented by Raymond Hettinger.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0322/


File: python.info,  Node: PEP 324 New subprocess Module,  Next: PEP 327 Decimal Data Type,  Prev: PEP 322 Reverse Iteration,  Up: What’s New in Python 2 4

1.18.7 PEP 324: New subprocess Module
-------------------------------------

The standard library provides a number of ways to execute a subprocess,
offering different features and different levels of complexity.
‘os.system(command)’ is easy to use, but slow (it runs a shell process
which executes the command) and dangerous (you have to be careful about
escaping the shell’s metacharacters).  The ‘popen2’ module offers
classes that can capture standard output and standard error from the
subprocess, but the naming is confusing.  The *note subprocess: d6.
module cleans this up, providing a unified interface that offers all the
features you might need.

Instead of ‘popen2’’s collection of classes, *note subprocess: d6.
contains a single class called *note subprocess.Popen: 199. whose
constructor supports a number of different keyword arguments.

     class Popen(args, bufsize=0, executable=None,
                 stdin=None, stdout=None, stderr=None,
                 preexec_fn=None, close_fds=False, shell=False,
                 cwd=None, env=None, universal_newlines=False,
                 startupinfo=None, creationflags=0):

'args' is commonly a sequence of strings that will be the arguments to
the program executed as the subprocess.  (If the 'shell' argument is
true, 'args' can be a string which will then be passed on to the shell
for interpretation, just as *note os.system(): 14a5. does.)

'stdin', 'stdout', and 'stderr' specify what the subprocess’s input,
output, and error streams will be.  You can provide a file object or a
file descriptor, or you can use the constant ‘subprocess.PIPE’ to create
a pipe between the subprocess and the parent.

The constructor has a number of handy options:

   * 'close_fds' requests that all file descriptors be closed before
     running the subprocess.

   * 'cwd' specifies the working directory in which the subprocess will
     be executed (defaulting to whatever the parent’s working directory
     is).

   * 'env' is a dictionary specifying environment variables.

   * 'preexec_fn' is a function that gets called before the child is
     started.

   * 'universal_newlines' opens the child’s input and output using
     Python’s *note universal newlines: d5c. feature.

Once you’ve created the ‘Popen’ instance, you can call its ‘wait()’
method to pause until the subprocess has exited, ‘poll()’ to check if
it’s exited without pausing, or ‘communicate(data)’ to send the string
'data' to the subprocess’s standard input.  ‘communicate(data)’ then
reads any data that the subprocess has sent to its standard output or
standard error, returning a tuple ‘(stdout_data, stderr_data)’.

‘call()’ is a shortcut that passes its arguments along to the ‘Popen’
constructor, waits for the command to complete, and returns the status
code of the subprocess.  It can serve as a safer analog to *note
os.system(): 14a5.:

     sts = subprocess.call(['dpkg', '-i', '/tmp/new-package.deb'])
     if sts == 0:
         # Success
         ...
     else:
         # dpkg returned an error
         ...

The command is invoked without use of the shell.  If you really do want
to use the shell, you can add ‘shell=True’ as a keyword argument and
provide a string instead of a sequence:

     sts = subprocess.call('dpkg -i /tmp/new-package.deb', shell=True)

The PEP takes various examples of shell and Python code and shows how
they’d be translated into Python code that uses *note subprocess: d6.
Reading this section of the PEP is highly recommended.

Ver também
..........

PEP 324(1) - subprocess - New process module

     Written and implemented by Peter Åstrand, with assistance from
     Fredrik Lundh and others.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0324/


File: python.info,  Node: PEP 327 Decimal Data Type,  Next: PEP 328 Multi-line Imports,  Prev: PEP 324 New subprocess Module,  Up: What’s New in Python 2 4

1.18.8 PEP 327: Decimal Data Type
---------------------------------

Python has always supported floating-point (FP) numbers, based on the
underlying C double type, as a data type.  However, while most
programming languages provide a floating-point type, many people (even
programmers) are unaware that floating-point numbers don’t represent
certain decimal fractions accurately.  The new ‘Decimal’ type can
represent these fractions accurately, up to a user-specified precision
limit.

* Menu:

* Why is Decimal needed?::
* The Decimal type::
* The Context type::


File: python.info,  Node: Why is Decimal needed?,  Next: The Decimal type,  Up: PEP 327 Decimal Data Type

1.18.8.1 Why is Decimal needed?
...............................

The limitations arise from the representation used for floating-point
numbers.  FP numbers are made up of three components:

   * The sign, which is positive or negative.

   * The mantissa, which is a single-digit binary number followed by a
     fractional part.  For example, ‘1.01’ in base-2 notation is ‘1 +
     0/2 + 1/4’, or 1.25 in decimal notation.

   * The exponent, which tells where the decimal point is located in the
     number represented.

For example, the number 1.25 has positive sign, a mantissa value of 1.01
(in binary), and an exponent of 0 (the decimal point doesn’t need to be
shifted).  The number 5 has the same sign and mantissa, but the exponent
is 2 because the mantissa is multiplied by 4 (2 to the power of the
exponent 2); 1.25 * 4 equals 5.

Modern systems usually provide floating-point support that conforms to a
standard called IEEE 754.  C’s double type is usually implemented as a
64-bit IEEE 754 number, which uses 52 bits of space for the mantissa.
This means that numbers can only be specified to 52 bits of precision.
If you’re trying to represent numbers whose expansion repeats endlessly,
the expansion is cut off after 52 bits.  Unfortunately, most software
needs to produce output in base 10, and common fractions in base 10 are
often repeating decimals in binary.  For example, 1.1 decimal is binary
‘1.0001100110011 ...’; .1 = 1/16 + 1/32 + 1/256 plus an infinite number
of additional terms.  IEEE 754 has to chop off that infinitely repeated
decimal after 52 digits, so the representation is slightly inaccurate.

Sometimes you can see this inaccuracy when the number is printed:

     >>> 1.1
     1.1000000000000001

The inaccuracy isn’t always visible when you print the number because
the FP-to-decimal-string conversion is provided by the C library, and
most C libraries try to produce sensible output.  Even if it’s not
displayed, however, the inaccuracy is still there and subsequent
operations can magnify the error.

For many applications this doesn’t matter.  If I’m plotting points and
displaying them on my monitor, the difference between 1.1 and
1.1000000000000001 is too small to be visible.  Reports often limit
output to a certain number of decimal places, and if you round the
number to two or three or even eight decimal places, the error is never
apparent.  However, for applications where it does matter, it’s a lot of
work to implement your own custom arithmetic routines.

Hence, the ‘Decimal’ type was created.


File: python.info,  Node: The Decimal type,  Next: The Context type,  Prev: Why is Decimal needed?,  Up: PEP 327 Decimal Data Type

1.18.8.2 The ‘Decimal’ type
...........................

A new module, *note decimal: 36, was added to Python’s standard library.
It contains two classes, ‘Decimal’ and ‘Context’.  ‘Decimal’ instances
represent numbers, and ‘Context’ instances are used to wrap up various
settings such as the precision and default rounding mode.

‘Decimal’ instances are immutable, like regular Python integers and FP
numbers; once it’s been created, you can’t change the value an instance
represents.  ‘Decimal’ instances can be created from integers or
strings:

     >>> import decimal
     >>> decimal.Decimal(1972)
     Decimal("1972")
     >>> decimal.Decimal("1.1")
     Decimal("1.1")

You can also provide tuples containing the sign, the mantissa
represented as a tuple of decimal digits, and the exponent:

     >>> decimal.Decimal((1, (1, 4, 7, 5), -2))
     Decimal("-14.75")

Cautionary note: the sign bit is a Boolean value, so 0 is positive and 1
is negative.

Converting from floating-point numbers poses a bit of a problem: should
the FP number representing 1.1 turn into the decimal number for exactly
1.1, or for 1.1 plus whatever inaccuracies are introduced?  The decision
was to dodge the issue and leave such a conversion out of the API.
Instead, you should convert the floating-point number into a string
using the desired precision and pass the string to the ‘Decimal’
constructor:

     >>> f = 1.1
     >>> decimal.Decimal(str(f))
     Decimal("1.1")
     >>> decimal.Decimal('%.12f' % f)
     Decimal("1.100000000000")

Once you have ‘Decimal’ instances, you can perform the usual
mathematical operations on them.  One limitation: exponentiation
requires an integer exponent:

     >>> a = decimal.Decimal('35.72')
     >>> b = decimal.Decimal('1.73')
     >>> a+b
     Decimal("37.45")
     >>> a-b
     Decimal("33.99")
     >>> a*b
     Decimal("61.7956")
     >>> a/b
     Decimal("20.64739884393063583815028902")
     >>> a ** 2
     Decimal("1275.9184")
     >>> a**b
     Traceback (most recent call last):
       ...
     decimal.InvalidOperation: x ** (non-integer)

You can combine ‘Decimal’ instances with integers, but not with
floating-point numbers:

     >>> a + 4
     Decimal("39.72")
     >>> a + 4.5
     Traceback (most recent call last):
       ...
     TypeError: You can interact Decimal only with int, long or Decimal data types.
     >>>

‘Decimal’ numbers can be used with the *note math: 8e. and *note cmath:
18. modules, but note that they’ll be immediately converted to
floating-point numbers before the operation is performed, resulting in a
possible loss of precision and accuracy.  You’ll also get back a regular
floating-point number and not a ‘Decimal’.

     >>> import math, cmath
     >>> d = decimal.Decimal('123456789012.345')
     >>> math.sqrt(d)
     351364.18288201344
     >>> cmath.sqrt(-d)
     351364.18288201344j

‘Decimal’ instances have a ‘sqrt()’ method that returns a ‘Decimal’, but
if you need other things such as trigonometric functions you’ll have to
implement them.

     >>> d.sqrt()
     Decimal("351364.1828820134592177245001")


File: python.info,  Node: The Context type,  Prev: The Decimal type,  Up: PEP 327 Decimal Data Type

1.18.8.3 The ‘Context’ type
...........................

Instances of the ‘Context’ class encapsulate several settings for
decimal operations:

   * ‘prec’ is the precision, the number of decimal places.

   * ‘rounding’ specifies the rounding mode.  The *note decimal: 36.
     module has constants for the various possibilities: ‘ROUND_DOWN’,
     ‘ROUND_CEILING’, ‘ROUND_HALF_EVEN’, and various others.

   * ‘traps’ is a dictionary specifying what happens on encountering
     certain error conditions: either an exception is raised or a value
     is returned.  Some examples of error conditions are division by
     zero, loss of precision, and overflow.

There’s a thread-local default context available by calling
‘getcontext()’; you can change the properties of this context to alter
the default precision, rounding, or trap handling.  The following
example shows the effect of changing the precision of the default
context:

     >>> decimal.getcontext().prec
     28
     >>> decimal.Decimal(1) / decimal.Decimal(7)
     Decimal("0.1428571428571428571428571429")
     >>> decimal.getcontext().prec = 9
     >>> decimal.Decimal(1) / decimal.Decimal(7)
     Decimal("0.142857143")

The default action for error conditions is selectable; the module can
either return a special value such as infinity or not-a-number, or
exceptions can be raised:

     >>> decimal.Decimal(1) / decimal.Decimal(0)
     Traceback (most recent call last):
       ...
     decimal.DivisionByZero: x / 0
     >>> decimal.getcontext().traps[decimal.DivisionByZero] = False
     >>> decimal.Decimal(1) / decimal.Decimal(0)
     Decimal("Infinity")
     >>>

The ‘Context’ instance also has various methods for formatting numbers
such as ‘to_eng_string()’ and ‘to_sci_string()’.

For more information, see the documentation for the *note decimal: 36.
module, which includes a quick-start tutorial and a reference.

Ver também
..........

PEP 327(1) - Decimal Data Type

     Written by Facundo Batista and implemented by Facundo Batista, Eric
     Price, Raymond Hettinger, Aahz, and Tim Peters.

http://www.lahey.com/float.htm(2)

     The article uses Fortran code to illustrate many of the problems
     that floating-point inaccuracy can cause.

‘https://speleotrove.com/decimal/’

     A description of a decimal-based representation.  This
     representation is being proposed as a standard, and underlies the
     new Python decimal type.  Much of this material was written by Mike
     Cowlishaw, designer of the Rexx language.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0327/

   (2) 
https://web.archive.org/web/20230604072523/http://www.lahey.com/float.htm


File: python.info,  Node: PEP 328 Multi-line Imports,  Next: PEP 331 Locale-Independent Float/String Conversions,  Prev: PEP 327 Decimal Data Type,  Up: What’s New in Python 2 4

1.18.9 PEP 328: Multi-line Imports
----------------------------------

One language change is a small syntactic tweak aimed at making it easier
to import many names from a module.  In a ‘from module import names’
statement, 'names' is a sequence of names separated by commas.  If the
sequence is very long, you can either write multiple imports from the
same module, or you can use backslashes to escape the line endings like
this:

     from SimpleXMLRPCServer import SimpleXMLRPCServer,\
                 SimpleXMLRPCRequestHandler,\
                 CGIXMLRPCRequestHandler,\
                 resolve_dotted_attribute

The syntactic change in Python 2.4 simply allows putting the names
within parentheses.  Python ignores newlines within a parenthesized
expression, so the backslashes are no longer needed:

     from SimpleXMLRPCServer import (SimpleXMLRPCServer,
                                     SimpleXMLRPCRequestHandler,
                                     CGIXMLRPCRequestHandler,
                                     resolve_dotted_attribute)

The PEP also proposes that all *note import: 5e2. statements be absolute
imports, with a leading ‘.’ character to indicate a relative import.
This part of the PEP was not implemented for Python 2.4, but was
completed for Python 2.5.

Ver também
..........

PEP 328(1) - Importações: Multilinha e absoluta/relativa

     Written by Aahz.  Multi-line imports were implemented by Dima
     Dorfman.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0328/


File: python.info,  Node: PEP 331 Locale-Independent Float/String Conversions,  Next: Outras mudanças na linguagem<17>,  Prev: PEP 328 Multi-line Imports,  Up: What’s New in Python 2 4

1.18.10 PEP 331: Locale-Independent Float/String Conversions
------------------------------------------------------------

The *note locale: 86. modules lets Python software select various
conversions and display conventions that are localized to a particular
country or language.  However, the module was careful to not change the
numeric locale because various functions in Python’s implementation
required that the numeric locale remain set to the ‘'C'’ locale.  Often
this was because the code was using the C library’s ‘atof()’ function.

Not setting the numeric locale caused trouble for extensions that used
third-party C libraries, however, because they wouldn’t have the correct
locale set.  The motivating example was GTK+, whose user interface
widgets weren’t displaying numbers in the current locale.

The solution described in the PEP is to add three new functions to the
Python API that perform ASCII-only conversions, ignoring the locale
setting:

   * ‘PyOS_ascii_strtod(str, ptr)’ and ‘PyOS_ascii_atof(str, ptr)’ both
     convert a string to a C double.

   * ‘PyOS_ascii_formatd(buffer, buf_len, format, d)’ converts a double
     to an ASCII string.

The code for these functions came from the GLib library
(https://developer-old.gnome.org/glib/2.26/(1)), whose developers kindly
relicensed the relevant functions and donated them to the Python
Software Foundation.  The *note locale: 86. module can now change the
numeric locale, letting extensions such as GTK+ produce the correct
results.

Ver também
..........

PEP 331(2) - Locale-Independent Float/String Conversions

     Written by Christian R. Reis, and implemented by Gustavo Carneiro.

   ---------- Footnotes ----------

   (1) 
http://web.archive.org/web/20210306104320/https://developer.gnome.org/glib/2.26/

   (2) https://peps.python.org/pep-0331/


File: python.info,  Node: Outras mudanças na linguagem<17>,  Next: New Improved and Deprecated Modules<3>,  Prev: PEP 331 Locale-Independent Float/String Conversions,  Up: What’s New in Python 2 4

1.18.11 Outras mudanças na linguagem
------------------------------------

Here are all of the changes that Python 2.4 makes to the core Python
language.

   * Decorators for functions and methods were added ( PEP 318(1)).

   * Built-in *note set(): 5d9. and *note frozenset(): 5da. types were
     added ( PEP 218(2)).  Other new built-ins include the
     ‘reversed(seq)’ function ( PEP 322(3)).

   * Generator expressions were added ( PEP 289(4)).

   * Certain numeric expressions no longer return values restricted to
     32 or 64 bits ( PEP 237(5)).

   * You can now put parentheses around the list of names in a ‘from
     module import names’ statement ( PEP 328(6)).

   * The *note dict.update(): 14ad. method now accepts the same argument
     forms as the *note dict: 256. constructor.  This includes any
     mapping, any iterable of key/value pairs, and keyword arguments.
     (Contributed by Raymond Hettinger.)

   * The string methods ‘ljust()’, ‘rjust()’, and ‘center()’ now take an
     optional argument for specifying a fill character other than a
     space.  (Contributed by Raymond Hettinger.)

   * Strings also gained an ‘rsplit()’ method that works like the
     ‘split()’ method but splits from the end of the string.
     (Contributed by Sean Reifschneider.)

          >>> 'www.python.org'.split('.', 1)
          ['www', 'python.org']
          'www.python.org'.rsplit('.', 1)
          ['www.python', 'org']

   * Three keyword parameters, 'cmp', 'key', and 'reverse', were added
     to the ‘sort()’ method of lists.  These parameters make some common
     usages of ‘sort()’ simpler.  All of these parameters are optional.

     For the 'cmp' parameter, the value should be a comparison function
     that takes two parameters and returns -1, 0, or +1 depending on how
     the parameters compare.  This function will then be used to sort
     the list.  Previously this was the only parameter that could be
     provided to ‘sort()’.

     'key' should be a single-parameter function that takes a list
     element and returns a comparison key for the element.  The list is
     then sorted using the comparison keys.  The following example sorts
     a list case-insensitively:

          >>> L = ['A', 'b', 'c', 'D']
          >>> L.sort()                 # Case-sensitive sort
          >>> L
          ['A', 'D', 'b', 'c']
          >>> # Using 'key' parameter to sort list
          >>> L.sort(key=lambda x: x.lower())
          >>> L
          ['A', 'b', 'c', 'D']
          >>> # Old-fashioned way
          >>> L.sort(cmp=lambda x,y: cmp(x.lower(), y.lower()))
          >>> L
          ['A', 'b', 'c', 'D']

     The last example, which uses the 'cmp' parameter, is the old way to
     perform a case-insensitive sort.  It works but is slower than using
     a 'key' parameter.  Using 'key' calls ‘lower()’ method once for
     each element in the list while using 'cmp' will call it twice for
     each comparison, so using 'key' saves on invocations of the
     ‘lower()’ method.

     For simple key functions and comparison functions, it is often
     possible to avoid a *note lambda: 12df. expression by using an
     unbound method instead.  For example, the above case-insensitive
     sort is best written as:

          >>> L.sort(key=str.lower)
          >>> L
          ['A', 'b', 'c', 'D']

     Finally, the 'reverse' parameter takes a Boolean value.  If the
     value is true, the list will be sorted into reverse order.  Instead
     of ‘L.sort(); L.reverse()’, you can now write
     ‘L.sort(reverse=True)’.

     The results of sorting are now guaranteed to be stable.  This means
     that two entries with equal keys will be returned in the same order
     as they were input.  For example, you can sort a list of people by
     name, and then sort the list by age, resulting in a list sorted by
     age where people with the same age are in name-sorted order.

     (All changes to ‘sort()’ contributed by Raymond Hettinger.)

   * There is a new built-in function ‘sorted(iterable)’ that works like
     the in-place *note list.sort(): be8. method but can be used in
     expressions.  The differences are:

   * the input may be any iterable;

   * a newly formed copy is sorted, leaving the original intact; and

   * the expression returns the new sorted copy

          >>> L = [9,7,8,3,2,4,1,6,5]
          >>> [10+i for i in sorted(L)]       # usable in a list comprehension
          [11, 12, 13, 14, 15, 16, 17, 18, 19]
          >>> L                               # original is left unchanged
          [9,7,8,3,2,4,1,6,5]
          >>> sorted('Monty Python')          # any iterable may be an input
          [' ', 'M', 'P', 'h', 'n', 'n', 'o', 'o', 't', 't', 'y', 'y']

          >>> # List the contents of a dict sorted by key values
          >>> colormap = dict(red=1, blue=2, green=3, black=4, yellow=5)
          >>> for k, v in sorted(colormap.iteritems()):
          ...     print k, v
          ...
          black 4
          blue 2
          green 3
          red 1
          yellow 5

     (Contributed by Raymond Hettinger.)

   * Integer operations will no longer trigger an ‘OverflowWarning’.
     The ‘OverflowWarning’ warning will disappear in Python 2.5.

   * The interpreter gained a new switch, *note -m: 5e1, that takes a
     name, searches for the corresponding module on ‘sys.path’, and runs
     the module as a script.  For example, you can now run the Python
     profiler with ‘python -m profile’.  (Contributed by Nick Coghlan.)

   * The ‘eval(expr, globals, locals)’ and ‘execfile(filename, globals,
     locals)’ functions and the ‘exec’ statement now accept any mapping
     type for the 'locals' parameter.  Previously this had to be a
     regular Python dictionary.  (Contributed by Raymond Hettinger.)

   * The *note zip(): 7d1. built-in function and ‘itertools.izip()’ now
     return an empty list if called with no arguments.  Previously they
     raised a *note TypeError: 2c3. exception.  This makes them more
     suitable for use with variable length argument lists:

          >>> def transpose(array):
          ...    return zip(*array)
          ...
          >>> transpose([(1,2,3), (4,5,6)])
          [(1, 4), (2, 5), (3, 6)]
          >>> transpose([])
          []

     (Contributed by Raymond Hettinger.)

   * Encountering a failure while importing a module no longer leaves a
     partially initialized module object in ‘sys.modules’.  The
     incomplete module object left behind would fool further imports of
     the same module into succeeding, leading to confusing errors.
     (Fixed by Tim Peters.)

   * *note None: 675. is now a constant; code that binds a new value to
     the name ‘None’ is now a syntax error.  (Contributed by Raymond
     Hettinger.)

* Menu:

* Otimizações: Otimizações<16>.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0318/

   (2) https://peps.python.org/pep-0218/

   (3) https://peps.python.org/pep-0322/

   (4) https://peps.python.org/pep-0289/

   (5) https://peps.python.org/pep-0237/

   (6) https://peps.python.org/pep-0328/


File: python.info,  Node: Otimizações<16>,  Up: Outras mudanças na linguagem<17>

1.18.11.1 Otimizações
.....................

   * The inner loops for list and tuple slicing were optimized and now
     run about one-third faster.  The inner loops for dictionaries were
     also optimized, resulting in performance boosts for ‘keys()’,
     ‘values()’, ‘items()’, ‘iterkeys()’, ‘itervalues()’, and
     ‘iteritems()’.  (Contributed by Raymond Hettinger.)

   * The machinery for growing and shrinking lists was optimized for
     speed and for space efficiency.  Appending and popping from lists
     now runs faster due to more efficient code paths and less frequent
     use of the underlying system ‘realloc()’.  List comprehensions also
     benefit.  *note list.extend(): 35d. was also optimized and no
     longer converts its argument into a temporary list before extending
     the base list.  (Contributed by Raymond Hettinger.)

   * *note list(): 611, *note tuple(): 370, *note map(): 867, *note
     filter(): 868, and *note zip(): 7d1. now run several times faster
     with non-sequence arguments that supply a ‘__len__()’ method.
     (Contributed by Raymond Hettinger.)

   * The methods ‘list.__getitem__()’, ‘dict.__getitem__()’, and
     ‘dict.__contains__()’ are now implemented as ‘method_descriptor’
     objects rather than ‘wrapper_descriptor’ objects.  This form of
     access doubles their performance and makes them more suitable for
     use as arguments to functionals: ‘map(mydict.__getitem__,
     keylist)’.  (Contributed by Raymond Hettinger.)

   * Added a new opcode, ‘LIST_APPEND’, that simplifies the generated
     bytecode for list comprehensions and speeds them up by about a
     third.  (Contributed by Raymond Hettinger.)

   * The peephole bytecode optimizer has been improved to produce
     shorter, faster bytecode; remarkably, the resulting bytecode is
     more readable.  (Enhanced by Raymond Hettinger.)

   * String concatenations in statements of the form ‘s = s + "abc"’ and
     ‘s += "abc"’ are now performed more efficiently in certain
     circumstances.  This optimization won’t be present in other Python
     implementations such as Jython, so you shouldn’t rely on it; using
     the ‘join()’ method of strings is still recommended when you want
     to efficiently glue a large number of strings together.
     (Contributed by Armin Rigo.)

The net result of the 2.4 optimizations is that Python 2.4 runs the
pystone benchmark around 5% faster than Python 2.3 and 35% faster than
Python 2.2.  (pystone is not a particularly good benchmark, but it’s the
most commonly used measurement of Python’s performance.  Your own
applications may show greater or smaller benefits from Python 2.4.)


File: python.info,  Node: New Improved and Deprecated Modules<3>,  Next: Mudanças a construções e API C<11>,  Prev: Outras mudanças na linguagem<17>,  Up: What’s New in Python 2 4

1.18.12 New, Improved, and Deprecated Modules
---------------------------------------------

As usual, Python’s standard library received a number of enhancements
and bug fixes.  Here’s a partial list of the most notable changes,
sorted alphabetically by module name.  Consult the ‘Misc/NEWS’ file in
the source tree for a more complete list of changes, or look through the
CVS logs for all the details.

   * The ‘asyncore’ module’s ‘loop()’ function now has a 'count'
     parameter that lets you perform a limited number of passes through
     the polling loop.  The default is still to loop forever.

   * The *note base64: e. module now has more complete RFC 3548(1)
     support for Base64, Base32, and Base16 encoding and decoding,
     including optional case folding and optional alternative alphabets.
     (Contributed by Barry Warsaw.)

   * The *note bisect: 11. module now has an underlying C implementation
     for improved performance.  (Contributed by Dmitry Vasiliev.)

   * The CJKCodecs collections of East Asian codecs, maintained by
     Hye-Shik Chang, was integrated into 2.4.  The new encodings are:

   * Chinese (PRC): gb2312, gbk, gb18030, big5hkscs, hz

   * Chinese (ROC): big5, cp950

   * 
     Japanese: cp932, euc-jis-2004, euc-jp, euc-jisx0213, iso-2022-jp,

          iso-2022-jp-1, iso-2022-jp-2, iso-2022-jp-3, iso-2022-jp-ext,
          iso-2022-jp-2004, shift-jis, shift-jisx0213, shift-jis-2004

   * Korean: cp949, euc-kr, johab, iso-2022-kr

   * Some other new encodings were added: HP Roman8, ISO_8859-11,
     ISO_8859-16, PCTP-154, and TIS-620.

   * The UTF-8 and UTF-16 codecs now cope better with receiving partial
     input.  Previously the ‘StreamReader’ class would try to read more
     data, making it impossible to resume decoding from the stream.  The
     ‘read()’ method will now return as much data as it can and future
     calls will resume decoding where previous ones left off.
     (Implemented by Walter Dörwald.)

   * There is a new *note collections: 1d. module for various
     specialized collection datatypes.  Currently it contains just one
     type, ‘deque’, a double-ended queue that supports efficiently
     adding and removing elements from either end:

          >>> from collections import deque
          >>> d = deque('ghi')        # make a new deque with three items
          >>> d.append('j')           # add a new entry to the right side
          >>> d.appendleft('f')       # add a new entry to the left side
          >>> d                       # show the representation of the deque
          deque(['f', 'g', 'h', 'i', 'j'])
          >>> d.pop()                 # return and remove the rightmost item
          'j'
          >>> d.popleft()             # return and remove the leftmost item
          'f'
          >>> list(d)                 # list the contents of the deque
          ['g', 'h', 'i']
          >>> 'h' in d                # search the deque
          True

     Several modules, such as the ‘Queue’ and *note threading: ed.
     modules, now take advantage of *note collections.deque: 5dc. for
     improved performance.  (Contributed by Raymond Hettinger.)

   * The *note ConfigParser: 22. classes have been enhanced slightly.
     The *note read(): 14b0. method now returns a list of the files that
     were successfully parsed, and the *note set(): 12ae. method raises
     *note TypeError: 2c3. if passed a 'value' argument that isn’t a
     string.  (Contributed by John Belmonte and David Goodger.)

   * The *note curses: 2b. module now supports the ncurses extension
     ‘use_default_colors()’.  On platforms where the terminal supports
     transparency, this makes it possible to use a transparent
     background.  (Contributed by Jörg Lehmann.)

   * The *note difflib: 37. module now includes an ‘HtmlDiff’ class that
     creates an HTML table showing a side by side comparison of two
     versions of a text.  (Contributed by Dan Gass.)

   * The *note email: 3b. package was updated to version 3.0, which
     dropped various deprecated APIs and removes support for Python
     versions earlier than 2.3.  The 3.0 version of the package uses a
     new incremental parser for MIME messages, available in the
     ‘email.FeedParser’ module.  The new parser doesn’t require reading
     the entire message into memory, and doesn’t raise exceptions if a
     message is malformed; instead it records any problems in the
     ‘defect’ attribute of the message.  (Developed by Anthony Baxter,
     Barry Warsaw, Thomas Wouters, and others.)

   * The *note heapq: 69. module has been converted to C. The resulting
     tenfold improvement in speed makes the module suitable for handling
     high volumes of data.  In addition, the module has two new
     functions ‘nlargest()’ and ‘nsmallest()’ that use heaps to find the
     N largest or smallest values in a dataset without the expense of a
     full sort.  (Contributed by Raymond Hettinger.)

   * The *note httplib: 6e. module now contains constants for HTTP
     status codes defined in various HTTP-related RFC documents.
     Constants have names such as ‘OK’, ‘CREATED’, ‘CONTINUE’, and
     ‘MOVED_PERMANENTLY’; use pydoc to get a full list.  (Contributed by
     Andrew Eland.)

   * The *note imaplib: 74. module now supports IMAP’s THREAD command
     (contributed by Yves Dionne) and new ‘deleteacl()’ and ‘myrights()’
     methods (contributed by Arnaud Mazin).

   * The *note itertools: 81. module gained a ‘groupby(iterable[,
     *func*])’ function.  'iterable' is something that can be iterated
     over to return a stream of elements, and the optional 'func'
     parameter is a function that takes an element and returns a key
     value; if omitted, the key is simply the element itself.
     ‘groupby()’ then groups the elements into subsequences which have
     matching values of the key, and returns a series of 2-tuples
     containing the key value and an iterator over the subsequence.

     Here’s an example to make this clearer.  The 'key' function simply
     returns whether a number is even or odd, so the result of
     ‘groupby()’ is to return consecutive runs of odd or even numbers.

          >>> import itertools
          >>> L = [2, 4, 6, 7, 8, 9, 11, 12, 14]
          >>> for key_val, it in itertools.groupby(L, lambda x: x % 2):
          ...    print key_val, list(it)
          ...
          0 [2, 4, 6]
          1 [7]
          0 [8]
          1 [9, 11]
          0 [12, 14]
          >>>

     ‘groupby()’ is typically used with sorted input.  The logic for
     ‘groupby()’ is similar to the Unix ‘uniq’ filter which makes it
     handy for eliminating, counting, or identifying duplicate elements:

          >>> word = 'abracadabra'
          >>> letters = sorted(word)   # Turn string into a sorted list of letters
          >>> letters
          ['a', 'a', 'a', 'a', 'a', 'b', 'b', 'c', 'd', 'r', 'r']
          >>> for k, g in itertools.groupby(letters):
          ...    print k, list(g)
          ...
          a ['a', 'a', 'a', 'a', 'a']
          b ['b', 'b']
          c ['c']
          d ['d']
          r ['r', 'r']
          >>> # List unique letters
          >>> [k for k, g in groupby(letters)]
          ['a', 'b', 'c', 'd', 'r']
          >>> # Count letter occurrences
          >>> [(k, len(list(g))) for k, g in groupby(letters)]
          [('a', 5), ('b', 2), ('c', 1), ('d', 1), ('r', 2)]

     (Contributed by Hye-Shik Chang.)

   * *note itertools: 81. also gained a function named ‘tee(iterator,
     N)’ that returns 'N' independent iterators that replicate
     'iterator'.  If 'N' is omitted, the default is 2.

          >>> L = [1,2,3]
          >>> i1, i2 = itertools.tee(L)
          >>> i1,i2
          (<itertools.tee object at 0x402c2080>, <itertools.tee object at 0x402c2090>)
          >>> list(i1)               # Run the first iterator to exhaustion
          [1, 2, 3]
          >>> list(i2)               # Run the second iterator to exhaustion
          [1, 2, 3]

     Note that ‘tee()’ has to keep copies of the values returned by the
     iterator; in the worst case, it may need to keep all of them.  This
     should therefore be used carefully if the leading iterator can run
     far ahead of the trailing iterator in a long stream of inputs.  If
     the separation is large, then you might as well use *note list():
     611. instead.  When the iterators track closely with one another,
     ‘tee()’ is ideal.  Possible applications include bookmarking,
     windowing, or lookahead iterators.  (Contributed by Raymond
     Hettinger.)

   * A number of functions were added to the *note locale: 86. module,
     such as ‘bind_textdomain_codeset()’ to specify a particular
     encoding and a family of ‘l*gettext()’ functions that return
     messages in the chosen encoding.  (Contributed by Gustavo
     Niemeyer.)

   * Some keyword arguments were added to the *note logging: 87.
     package’s ‘basicConfig()’ function to simplify log configuration.
     The default behavior is to log messages to standard error, but
     various keyword arguments can be specified to log to a particular
     file, change the logging format, or set the logging level.  For
     example:

          import logging
          logging.basicConfig(filename='/var/log/application.log',
              level=0,  # Log all messages
              format='%(levelname):%(process):%(thread):%(message)')

     Other additions to the *note logging: 87. package include a
     ‘log(level, msg)’ convenience method, as well as a
     ‘TimedRotatingFileHandler’ class that rotates its log files at a
     timed interval.  The module already had ‘RotatingFileHandler’,
     which rotated logs once the file exceeded a certain size.  Both
     classes derive from a new ‘BaseRotatingHandler’ class that can be
     used to implement other rotating handlers.

     (Changes implemented by Vinay Sajip.)

   * The *note marshal: 8d. module now shares interned strings on
     unpacking a data structure.  This may shrink the size of certain
     pickle strings, but the primary effect is to make ‘.pyc’ files
     significantly smaller.  (Contributed by Martin von Löwis.)

   * The ‘nntplib’ module’s ‘NNTP’ class gained ‘description()’ and
     ‘descriptions()’ methods to retrieve newsgroup descriptions for a
     single group or for a range of groups.  (Contributed by Jürgen A.
     Erhard.)

   * Two new functions were added to the *note operator: 9f. module,
     ‘attrgetter(attr)’ and ‘itemgetter(index)’.  Both functions return
     callables that take a single argument and return the corresponding
     attribute or item; these callables make excellent data extractors
     when used with *note map(): 867. or *note sorted(): be7.  For
     example:

          >>> L = [('c', 2), ('d', 1), ('a', 4), ('b', 3)]
          >>> map(operator.itemgetter(0), L)
          ['c', 'd', 'a', 'b']
          >>> map(operator.itemgetter(1), L)
          [2, 1, 4, 3]
          >>> sorted(L, key=operator.itemgetter(1)) # Sort list by second tuple item
          [('d', 1), ('c', 2), ('b', 3), ('a', 4)]

     (Contributed by Raymond Hettinger.)

   * The *note optparse: a0. module was updated in various ways.  The
     module now passes its messages through *note gettext.gettext():
     14b1, making it possible to internationalize Optik’s help and error
     messages.  Help messages for options can now include the string
     ‘'%default'’, which will be replaced by the option’s default value.
     (Contributed by Greg Ward.)

   * The long-term plan is to deprecate the ‘rfc822’ module in some
     future Python release in favor of the *note email: 3b. package.  To
     this end, the *note email.Utils.formatdate: 14b2. function has been
     changed to make it usable as a replacement for
     ‘rfc822.formatdate()’.  You may want to write new e-mail processing
     code with this in mind.  (Change implemented by Anthony Baxter.)

   * A new ‘urandom(n)’ function was added to the *note os: a1. module,
     returning a string containing 'n' bytes of random data.  This
     function provides access to platform-specific sources of randomness
     such as ‘/dev/urandom’ on Linux or the Windows CryptoAPI.
     (Contributed by Trevor Perrin.)

   * Another new function: ‘os.path.lexists(path)’ returns true if the
     file specified by 'path' exists, whether or not it’s a symbolic
     link.  This differs from the existing ‘os.path.exists(path)’
     function, which returns false if 'path' is a symlink that points to
     a destination that doesn’t exist.  (Contributed by Beni
     Cherniavsky.)

   * A new ‘getsid()’ function was added to the *note posix: ad. module
     that underlies the *note os: a1. module.  (Contributed by J.
     Raynor.)

   * The *note poplib: ac. module now supports POP over SSL.
     (Contributed by Hector Urtubia.)

   * The *note profile: af. module can now profile C extension
     functions.  (Contributed by Nick Bastin.)

   * The *note random: b8. module has a new method called
     ‘getrandbits(N)’ that returns a long integer 'N' bits in length.
     The existing ‘randrange()’ method now uses ‘getrandbits()’ where
     appropriate, making generation of arbitrarily large random numbers
     more efficient.  (Contributed by Raymond Hettinger.)

   * The regular expression language accepted by the *note re: b9.
     module was extended with simple conditional expressions, written as
     ‘(?(group)A|B)’.  'group' is either a numeric group ID or a group
     name defined with ‘(?P<group>...)’ earlier in the expression.  If
     the specified group matched, the regular expression pattern 'A'
     will be tested against the string; if the group didn’t match, the
     pattern 'B' will be used instead.  (Contributed by Gustavo
     Niemeyer.)

   * The *note re: b9. module is also no longer recursive, thanks to a
     massive amount of work by Gustavo Niemeyer.  In a recursive regular
     expression engine, certain patterns result in a large amount of C
     stack space being consumed, and it was possible to overflow the
     stack.  For example, if you matched a 30000-byte string of ‘a’
     characters against the expression ‘(a|b)+’, one stack frame was
     consumed per character.  Python 2.3 tried to check for stack
     overflow and raise a *note RuntimeError: 195. exception, but
     certain patterns could sidestep the checking and if you were
     unlucky Python could segfault.  Python 2.4’s regular expression
     engine can match this pattern without problems.

   * The *note signal: c6. module now performs tighter error-checking on
     the parameters to the *note signal.signal(): 1173. function.  For
     example, you can’t set a handler on the ‘SIGKILL’ signal; previous
     versions of Python would quietly accept this, but 2.4 will raise a
     *note RuntimeError: 195. exception.

   * Two new functions were added to the *note socket: cc. module.
     ‘socketpair()’ returns a pair of connected sockets and
     ‘getservbyport(port)’ looks up the service name for a given port
     number.  (Contributed by Dave Cole and Barry Warsaw.)

   * The ‘sys.exitfunc()’ function has been deprecated.  Code should be
     using the existing *note atexit: c. module, which correctly handles
     calling multiple exit functions.  Eventually ‘sys.exitfunc()’ will
     become a purely internal interface, accessed only by *note atexit:
     c.

   * The *note tarfile: de. module now generates GNU-format tar files by
     default.  (Contributed by Lars Gustäbel.)

   * The *note threading: ed. module now has an elegantly simple way to
     support thread-local data.  The module contains a ‘local’ class
     whose attribute values are local to different threads.

          import threading

          data = threading.local()
          data.number = 42
          data.url = ('www.python.org', 80)

     Other threads can assign and retrieve their own values for the
     ‘number’ and ‘url’ attributes.  You can subclass ‘local’ to
     initialize attributes or to add methods.  (Contributed by Jim
     Fulton.)

   * The *note timeit: ef. module now automatically disables periodic
     garbage collection during the timing loop.  This change makes
     consecutive timings more comparable.  (Contributed by Raymond
     Hettinger.)

   * The *note weakref: 114. module now supports a wider variety of
     objects including Python functions, class instances, sets,
     frozensets, deques, arrays, files, sockets, and regular expression
     pattern objects.  (Contributed by Raymond Hettinger.)

   * The *note xmlrpclib: 12e. module now supports a multi-call
     extension for transmitting multiple XML-RPC calls in a single HTTP
     operation.  (Contributed by Brian Quinlan.)

   * The ‘mpz’, ‘rotor’, and ‘xreadlines’ modules have been removed.

* Menu:

* cookielib::
* doctest: doctest<5>.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc3548.html


File: python.info,  Node: cookielib,  Next: doctest<5>,  Up: New Improved and Deprecated Modules<3>

1.18.12.1 cookielib
...................

The *note cookielib: 70. library supports client-side handling for HTTP
cookies, mirroring the *note Cookie: 71. module’s server-side cookie
support.  Cookies are stored in cookie jars; the library transparently
stores cookies offered by the web server in the cookie jar, and fetches
the cookie from the jar when connecting to the server.  As in web
browsers, policy objects control whether cookies are accepted or not.

In order to store cookies across sessions, two implementations of cookie
jars are provided: one that stores cookies in the Netscape format so
applications can use the Mozilla or Lynx cookie files, and one that
stores cookies in the same format as the Perl libwww library.

*note urllib2: 10b. has been changed to interact with *note cookielib:
70.: ‘HTTPCookieProcessor’ manages a cookie jar that is used when
accessing URLs.

This module was contributed by John J. Lee.


File: python.info,  Node: doctest<5>,  Prev: cookielib,  Up: New Improved and Deprecated Modules<3>

1.18.12.2 doctest
.................

The *note doctest: 3a. module underwent considerable refactoring thanks
to Edward Loper and Tim Peters.  Testing can still be as simple as
running *note doctest.testmod(): 14b5, but the refactorings allow
customizing the module’s operation in various ways

The new ‘DocTestFinder’ class extracts the tests from a given object’s
docstrings:

     def f (x, y):
         """>>> f(2,2)
     4
     >>> f(3,2)
     6
         """
         return x*y

     finder = doctest.DocTestFinder()

     # Get list of DocTest instances
     tests = finder.find(f)

The new ‘DocTestRunner’ class then runs individual tests and can produce
a summary of the results:

     runner = doctest.DocTestRunner()
     for t in tests:
         tried, failed = runner.run(t)

     runner.summarize(verbose=1)

The above example produces the following output:

     1 items passed all tests:
        2 tests in f
     2 tests in 1 items.
     2 passed and 0 failed.
     Test passed.

‘DocTestRunner’ uses an instance of the ‘OutputChecker’ class to compare
the expected output with the actual output.  This class takes a number
of different flags that customize its behaviour; ambitious users can
also write a completely new subclass of ‘OutputChecker’.

The default output checker provides a number of handy features.  For
example, with the *note doctest.ELLIPSIS: 14b6. option flag, an ellipsis
(‘...’) in the expected output matches any substring, making it easier
to accommodate outputs that vary in minor ways:

     def o (n):
         """>>> o(1)
     <__main__.C instance at 0x...>
     >>>
     """

Another special string, ‘<BLANKLINE>’, matches a blank line:

     def p (n):
         """>>> p(1)
     <BLANKLINE>
     >>>
     """

Another new capability is producing a diff-style display of the output
by specifying the *note doctest.REPORT_UDIFF: 14b7. (unified diffs),
*note doctest.REPORT_CDIFF: 14b8. (context diffs), or *note
doctest.REPORT_NDIFF: 14b9. (delta-style) option flags.  For example:

     def g (n):
         """>>> g(4)
     here
     is
     a
     lengthy
     >>>"""
         L = 'here is a rather lengthy list of words'.split()
         for word in L[:n]:
             print word

Running the above function’s tests with *note doctest.REPORT_UDIFF:
14b7. specified, you get the following output:

     **********************************************************************
     File "t.py", line 15, in g
     Failed example:
         g(4)
     Differences (unified diff with -expected +actual):
         @@ -2,3 +2,3 @@
          is
          a
         -lengthy
         +rather
     **********************************************************************


File: python.info,  Node: Mudanças a construções e API C<11>,  Next: Porting to Python 2 4,  Prev: New Improved and Deprecated Modules<3>,  Up: What’s New in Python 2 4

1.18.13 Mudanças a construções e API C
--------------------------------------

Some of the changes to Python’s build process and to the C API are:

   * Three new convenience macros were added for common return values
     from extension functions: *note Py_RETURN_NONE: 14bb, *note
     Py_RETURN_TRUE: 14bc, and *note Py_RETURN_FALSE: 14bd.
     (Contributed by Brett Cannon.)

   * Another new macro, *note Py_CLEAR: 578, decreases the reference
     count of 'obj' and sets 'obj' to the null pointer.  (Contributed by
     Jim Fulton.)

   * A new function, ‘PyTuple_Pack(N, obj1, obj2, ..., objN)’,
     constructs tuples from a variable length argument list of Python
     objects.  (Contributed by Raymond Hettinger.)

   * A new function, ‘PyDict_Contains(d, k)’, implements fast dictionary
     lookups without masking exceptions raised during the look-up
     process.  (Contributed by Raymond Hettinger.)

   * The *note Py_IS_NAN: 14be.(X) macro returns 1 if its float or
     double argument 'X' is a NaN. (Contributed by Tim Peters.)

   * C code can avoid unnecessary locking by using the new
     ‘PyEval_ThreadsInitialized()’ function to tell if any thread
     operations have been performed.  If this function returns false, no
     lock operations are needed.  (Contributed by Nick Coghlan.)

   * A new function, *note PyArg_VaParseTupleAndKeywords(): 384, is the
     same as *note PyArg_ParseTupleAndKeywords(): 383. but takes a
     ‘va_list’ instead of a number of arguments.  (Contributed by Greg
     Chapman.)

   * A new method flag, *note METH_COEXIST: 14bf, allows a function
     defined in slots to co-exist with a *note PyCFunction: 14c0. having
     the same name.  This can halve the access time for a method such as
     ‘set.__contains__()’.  (Contributed by Raymond Hettinger.)

   * Python can now be built with additional profiling for the
     interpreter itself, intended as an aid to people developing the
     Python core.  Providing ‘--enable-profiling’ to the ‘configure’
     script will let you profile the interpreter with ‘gprof’, and
     providing the ‘--with-tsc’ switch enables profiling using the
     Pentium’s Time-Stamp-Counter register.  Note that the ‘--with-tsc’
     switch is slightly misnamed, because the profiling feature also
     works on the PowerPC platform, though that processor architecture
     doesn’t call that register “the TSC register”.  (Contributed by
     Jeremy Hylton.)

   * The ‘tracebackobject’ type has been renamed to ‘PyTracebackObject’.

* Menu:

* Port-Specific Changes: Port-Specific Changes<2>.


File: python.info,  Node: Port-Specific Changes<2>,  Up: Mudanças a construções e API C<11>

1.18.13.1 Port-Specific Changes
...............................

   * The Windows port now builds under MSVC++ 7.1 as well as version 6.
     (Contributed by Martin von Löwis.)


File: python.info,  Node: Porting to Python 2 4,  Next: Reconhecimentos<4>,  Prev: Mudanças a construções e API C<11>,  Up: What’s New in Python 2 4

1.18.14 Porting to Python 2.4
-----------------------------

This section lists previously described changes that may require changes
to your code:

   * Left shifts and hexadecimal/octal constants that are too large no
     longer trigger a *note FutureWarning: 415. and return a value
     limited to 32 or 64 bits; instead they return a long integer.

   * Integer operations will no longer trigger an ‘OverflowWarning’.
     The ‘OverflowWarning’ warning will disappear in Python 2.5.

   * The *note zip(): 7d1. built-in function and ‘itertools.izip()’ now
     return an empty list instead of raising a *note TypeError: 2c3.
     exception if called with no arguments.

   * You can no longer compare the ‘date’ and *note datetime: 1cc.
     instances provided by the *note datetime: 30. module.  Two
     instances of different classes will now always be unequal, and
     relative comparisons (‘<’, ‘>’) will raise a *note TypeError: 2c3.

   * ‘dircache.listdir()’ now passes exceptions to the caller instead of
     returning empty lists.

   * ‘LexicalHandler.startDTD()’ used to receive the public and system
     IDs in the wrong order.  This has been corrected; applications
     relying on the wrong order need to be fixed.

   * *note fcntl.ioctl(): 14c3. now warns if the 'mutate' argument is
     omitted and relevant.

   * The *note tarfile: de. module now generates GNU-format tar files by
     default.

   * Encountering a failure while importing a module no longer leaves a
     partially initialized module object in ‘sys.modules’.

   * *note None: 675. is now a constant; code that binds a new value to
     the name ‘None’ is now a syntax error.

   * The ‘signals.signal()’ function now raises a *note RuntimeError:
     195. exception for certain illegal values; previously these errors
     would pass silently.  For example, you can no longer set a handler
     on the ‘SIGKILL’ signal.


File: python.info,  Node: Reconhecimentos<4>,  Prev: Porting to Python 2 4,  Up: What’s New in Python 2 4

1.18.15 Reconhecimentos
-----------------------

The author would like to thank the following people for offering
suggestions, corrections and assistance with various drafts of this
article: Koray Can, Hye-Shik Chang, Michael Dyck, Raymond Hettinger,
Brian Hurt, Hamish Lawson, Fredrik Lundh, Sean Reifschneider, Sadruddin
Rejeb.


File: python.info,  Node: What’s New in Python 2 3,  Next: What’s New in Python 2 2,  Prev: What’s New in Python 2 4,  Up: O que há de novo no Python

1.19 What’s New in Python 2.3
=============================


Autor: A.M. Kuchling

This article explains the new features in Python 2.3.  Python 2.3 was
released on July 29, 2003.

The main themes for Python 2.3 are polishing some of the features added
in 2.2, adding various small but useful enhancements to the core
language, and expanding the standard library.  The new object model
introduced in the previous version has benefited from 18 months of
bugfixes and from optimization efforts that have improved the
performance of new-style classes.  A few new built-in functions have
been added such as *note sum(): 46a. and *note enumerate(): 14c9.  The
*note in: 2f4. operator can now be used for substring searches (e.g.
‘"ab" in "abc"’ returns *note True: c27.).

Some of the many new library features include Boolean, set, heap, and
date/time data types, the ability to import modules from ZIP-format
archives, metadata support for the long-awaited Python catalog, an
updated version of IDLE, and modules for logging messages, wrapping
text, parsing CSV files, processing command-line options, using
BerkeleyDB databases… the list of new and enhanced modules is lengthy.

This article doesn’t attempt to provide a complete specification of the
new features, but instead provides a convenient overview.  For full
details, you should refer to the documentation for Python 2.3, such as
the Python Library Reference and the Python Reference Manual.  If you
want to understand the complete implementation and design rationale,
refer to the PEP for a particular new feature.

* Menu:

* PEP 218; A Standard Set Datatype: PEP 218 A Standard Set Datatype.
* PEP 255; Simple Generators: PEP 255 Simple Generators.
* PEP 263; Source Code Encodings: PEP 263 Source Code Encodings.
* PEP 273; Importing Modules from ZIP Archives: PEP 273 Importing Modules from ZIP Archives.
* PEP 277; Unicode file name support for Windows NT: PEP 277 Unicode file name support for Windows NT.
* PEP 278; Universal Newline Support: PEP 278 Universal Newline Support.
* PEP 279; enumerate(): PEP 279 enumerate.
* PEP 282; The logging Package: PEP 282 The logging Package.
* PEP 285; A Boolean Type: PEP 285 A Boolean Type.
* PEP 293; Codec Error Handling Callbacks: PEP 293 Codec Error Handling Callbacks.
* PEP 301; Package Index and Metadata for Distutils: PEP 301 Package Index and Metadata for Distutils.
* PEP 302; New Import Hooks: PEP 302 New Import Hooks.
* PEP 305; Comma-separated Files: PEP 305 Comma-separated Files.
* PEP 307; Pickle Enhancements: PEP 307 Pickle Enhancements.
* Extended Slices::
* Outras mudanças na linguagem: Outras mudanças na linguagem<18>.
* New, Improved, and Deprecated Modules: New Improved and Deprecated Modules<4>.
* Pymalloc; A Specialized Object Allocator: Pymalloc A Specialized Object Allocator.
* Mudanças a construções e API C: Mudanças a construções e API C<12>.
* Outras alterações e correções: Outras alterações e correções<2>.
* Porting to Python 2.3: Porting to Python 2 3.
* Reconhecimentos: Reconhecimentos<5>.


File: python.info,  Node: PEP 218 A Standard Set Datatype,  Next: PEP 255 Simple Generators,  Up: What’s New in Python 2 3

1.19.1 PEP 218: A Standard Set Datatype
---------------------------------------

The new ‘sets’ module contains an implementation of a set datatype.  The
‘Set’ class is for mutable sets, sets that can have members added and
removed.  The ‘ImmutableSet’ class is for sets that can’t be modified,
and instances of ‘ImmutableSet’ can therefore be used as dictionary
keys.  Sets are built on top of dictionaries, so the elements within a
set must be hashable.

Here’s a simple example:

     >>> import sets
     >>> S = sets.Set([1,2,3])
     >>> S
     Set([1, 2, 3])
     >>> 1 in S
     True
     >>> 0 in S
     False
     >>> S.add(5)
     >>> S.remove(3)
     >>> S
     Set([1, 2, 5])
     >>>

The union and intersection of sets can be computed with the *note
union(): 14cb. and *note intersection(): 14cc. methods; an alternative
notation uses the bitwise operators ‘&’ and ‘|’.  Mutable sets also have
in-place versions of these methods, ‘union_update()’ and *note
intersection_update(): 14cd.

     >>> S1 = sets.Set([1,2,3])
     >>> S2 = sets.Set([4,5,6])
     >>> S1.union(S2)
     Set([1, 2, 3, 4, 5, 6])
     >>> S1 | S2                  # Alternative notation
     Set([1, 2, 3, 4, 5, 6])
     >>> S1.intersection(S2)
     Set([])
     >>> S1 & S2                  # Alternative notation
     Set([])
     >>> S1.union_update(S2)
     >>> S1
     Set([1, 2, 3, 4, 5, 6])
     >>>

It’s also possible to take the symmetric difference of two sets.  This
is the set of all elements in the union that aren’t in the intersection.
Another way of putting it is that the symmetric difference contains all
elements that are in exactly one set.  Again, there’s an alternative
notation (‘^’), and an in-place version with the ungainly name *note
symmetric_difference_update(): 14ce.

     >>> S1 = sets.Set([1,2,3,4])
     >>> S2 = sets.Set([3,4,5,6])
     >>> S1.symmetric_difference(S2)
     Set([1, 2, 5, 6])
     >>> S1 ^ S2
     Set([1, 2, 5, 6])
     >>>

There are also ‘issubset()’ and ‘issuperset()’ methods for checking
whether one set is a subset or superset of another:

     >>> S1 = sets.Set([1,2,3])
     >>> S2 = sets.Set([2,3])
     >>> S2.issubset(S1)
     True
     >>> S1.issubset(S2)
     False
     >>> S1.issuperset(S2)
     True
     >>>

Ver também
..........

PEP 218(1) - Adding a Built-In Set Object Type

     PEP written by Greg V. Wilson.  Implemented by Greg V. Wilson, Alex
     Martelli, and GvR.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0218/


File: python.info,  Node: PEP 255 Simple Generators,  Next: PEP 263 Source Code Encodings,  Prev: PEP 218 A Standard Set Datatype,  Up: What’s New in Python 2 3

1.19.2 PEP 255: Simple Generators
---------------------------------

In Python 2.2, generators were added as an optional feature, to be
enabled by a ‘from __future__ import generators’ directive.  In 2.3
generators no longer need to be specially enabled, and are now always
present; this means that *note yield: 9d5. is now always a keyword.  The
rest of this section is a copy of the description of generators from the
“What’s New in Python 2.2” document; if you read it back when Python 2.2
came out, you can skip the rest of this section.

You’re doubtless familiar with how function calls work in Python or C.
When you call a function, it gets a private namespace where its local
variables are created.  When the function reaches a *note return: 9d6.
statement, the local variables are destroyed and the resulting value is
returned to the caller.  A later call to the same function will get a
fresh new set of local variables.  But, what if the local variables
weren’t thrown away on exiting a function?  What if you could later
resume the function where it left off?  This is what generators provide;
they can be thought of as resumable functions.

Here’s the simplest example of a generator function:

     def generate_ints(N):
         for i in range(N):
             yield i

A new keyword, *note yield: 9d5, was introduced for generators.  Any
function containing a ‘yield’ statement is a generator function; this is
detected by Python’s bytecode compiler which compiles the function
specially as a result.

When you call a generator function, it doesn’t return a single value;
instead it returns a generator object that supports the iterator
protocol.  On executing the *note yield: 9d5. statement, the generator
outputs the value of ‘i’, similar to a *note return: 9d6. statement.
The big difference between ‘yield’ and a ‘return’ statement is that on
reaching a ‘yield’ the generator’s state of execution is suspended and
local variables are preserved.  On the next call to the generator’s
‘.next()’ method, the function will resume executing immediately after
the ‘yield’ statement.  (For complicated reasons, the ‘yield’ statement
isn’t allowed inside the *note try: 6e9. block of a ‘try’…‘finally’
statement; read PEP 255(1) for a full explanation of the interaction
between ‘yield’ and exceptions.)

Here’s a sample usage of the ‘generate_ints()’ generator:

     >>> gen = generate_ints(3)
     >>> gen
     <generator object at 0x8117f90>
     >>> gen.next()
     0
     >>> gen.next()
     1
     >>> gen.next()
     2
     >>> gen.next()
     Traceback (most recent call last):
       File "stdin", line 1, in ?
       File "stdin", line 2, in generate_ints
     StopIteration

You could equally write ‘for i in generate_ints(5)’, or ‘a,b,c =
generate_ints(3)’.

Inside a generator function, the *note return: 9d6. statement can only
be used without a value, and signals the end of the procession of
values; afterwards the generator cannot return any further values.
‘return’ with a value, such as ‘return 5’, is a syntax error inside a
generator function.  The end of the generator’s results can also be
indicated by raising *note StopIteration: c15. manually, or by just
letting the flow of execution fall off the bottom of the function.

You could achieve the effect of generators manually by writing your own
class and storing all the local variables of the generator as instance
variables.  For example, returning a list of integers could be done by
setting ‘self.count’ to 0, and having the *note next(): 7d9. method
increment ‘self.count’ and return it.  However, for a moderately
complicated generator, writing a corresponding class would be much
messier.  ‘Lib/test/test_generators.py’ contains a number of more
interesting examples.  The simplest one implements an in-order traversal
of a tree using generators recursively.

     # A recursive generator that generates Tree leaves in in-order.
     def inorder(t):
         if t:
             for x in inorder(t.left):
                 yield x
             yield t.label
             for x in inorder(t.right):
                 yield x

Two other examples in ‘Lib/test/test_generators.py’ produce solutions
for the N-Queens problem (placing $N$ queens on an $NxN$ chess board so
that no queen threatens another) and the Knight’s Tour (a route that
takes a knight to every square of an $NxN$ chessboard without visiting
any square twice).

The idea of generators comes from other programming languages,
especially Icon (‘https://www2.cs.arizona.edu/icon/’), where the idea of
generators is central.  In Icon, every expression and function call
behaves like a generator.  One example from “An Overview of the Icon
Programming Language” at
‘https://www2.cs.arizona.edu/icon/docs/ipd266.htm’ gives an idea of what
this looks like:

     sentence := "Store it in the neighboring harbor"
     if (i := find("or", sentence)) > 5 then write(i)

In Icon the ‘find()’ function returns the indexes at which the substring
“or” is found: 3, 23, 33.  In the *note if: 2f3. statement, ‘i’ is first
assigned a value of 3, but 3 is less than 5, so the comparison fails,
and Icon retries it with the second value of 23.  23 is greater than 5,
so the comparison now succeeds, and the code prints the value 23 to the
screen.

Python doesn’t go nearly as far as Icon in adopting generators as a
central concept.  Generators are considered part of the core Python
language, but learning or using them isn’t compulsory; if they don’t
solve any problems that you have, feel free to ignore them.  One novel
feature of Python’s interface as compared to Icon’s is that a
generator’s state is represented as a concrete object (the iterator)
that can be passed around to other functions or stored in a data
structure.

Ver também
..........

PEP 255(2) - Simple Generators

     Written by Neil Schemenauer, Tim Peters, Magnus Lie Hetland.
     Implemented mostly by Neil Schemenauer and Tim Peters, with other
     fixes from the Python Labs crew.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0255/

   (2) https://peps.python.org/pep-0255/


File: python.info,  Node: PEP 263 Source Code Encodings,  Next: PEP 273 Importing Modules from ZIP Archives,  Prev: PEP 255 Simple Generators,  Up: What’s New in Python 2 3

1.19.3 PEP 263: Source Code Encodings
-------------------------------------

Python source files can now be declared as being in different character
set encodings.  Encodings are declared by including a specially
formatted comment in the first or second line of the source file.  For
example, a UTF-8 file can be declared with:

     #!/usr/bin/env python
     # -*- coding: UTF-8 -*-

Without such an encoding declaration, the default encoding used is 7-bit
ASCII. Executing or importing modules that contain string literals with
8-bit characters and have no encoding declaration will result in a *note
DeprecationWarning: 1a5. being signalled by Python 2.3; in 2.4 this will
be a syntax error.

The encoding declaration only affects Unicode string literals, which
will be converted to Unicode using the specified encoding.  Note that
Python identifiers are still restricted to ASCII characters, so you
can’t have variable names that use characters outside of the usual
alphanumerics.

Ver também
..........

PEP 263(1) - Defining Python Source Code Encodings

     Written by Marc-André Lemburg and Martin von Löwis; implemented by
     Suzuki Hisao and Martin von Löwis.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0263/


File: python.info,  Node: PEP 273 Importing Modules from ZIP Archives,  Next: PEP 277 Unicode file name support for Windows NT,  Prev: PEP 263 Source Code Encodings,  Up: What’s New in Python 2 3

1.19.4 PEP 273: Importing Modules from ZIP Archives
---------------------------------------------------

The new *note zipimport: 132. module adds support for importing modules
from a ZIP-format archive.  You don’t need to import the module
explicitly; it will be automatically imported if a ZIP archive’s
filename is added to ‘sys.path’.  For example:

     amk@nyman:~/src/python$ unzip -l /tmp/example.zip
     Archive:  /tmp/example.zip
       Length     Date   Time    Name
      --------    ----   ----    ----
          8467  11-26-02 22:30   jwzthreading.py
      --------                   -------
          8467                   1 file
     amk@nyman:~/src/python$ ./python
     Python 2.3 (#1, Aug 1 2003, 19:54:32)
     >>> import sys
     >>> sys.path.insert(0, '/tmp/example.zip')  # Add .zip file to front of path
     >>> import jwzthreading
     >>> jwzthreading.__file__
     '/tmp/example.zip/jwzthreading.py'
     >>>

An entry in ‘sys.path’ can now be the filename of a ZIP archive.  The
ZIP archive can contain any kind of files, but only files named ‘*.py’,
‘*.pyc’, or ‘*.pyo’ can be imported.  If an archive only contains ‘*.py’
files, Python will not attempt to modify the archive by adding the
corresponding ‘*.pyc’ file, meaning that if a ZIP archive doesn’t
contain ‘*.pyc’ files, importing may be rather slow.

A path within the archive can also be specified to only import from a
subdirectory; for example, the path ‘/tmp/example.zip/lib/’ would only
import from the ‘lib/’ subdirectory within the archive.

Ver também
..........

PEP 273(1) - Import Modules from Zip Archives

     Written by James C. Ahlstrom, who also provided an implementation.
     Python 2.3 follows the specification in PEP 273(2), but uses an
     implementation written by Just van Rossum that uses the import
     hooks described in PEP 302(3).  See section *note PEP 302; New
     Import Hooks: 14d4. for a description of the new import hooks.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0273/

   (2) https://peps.python.org/pep-0273/

   (3) https://peps.python.org/pep-0302/


File: python.info,  Node: PEP 277 Unicode file name support for Windows NT,  Next: PEP 278 Universal Newline Support,  Prev: PEP 273 Importing Modules from ZIP Archives,  Up: What’s New in Python 2 3

1.19.5 PEP 277: Unicode file name support for Windows NT
--------------------------------------------------------

On Windows NT, 2000, and XP, the system stores file names as Unicode
strings.  Traditionally, Python has represented file names as byte
strings, which is inadequate because it renders some file names
inaccessible.

Python now allows using arbitrary Unicode strings (within the
limitations of the file system) for all functions that expect file
names, most notably the *note open(): 51c. built-in function.  If a
Unicode string is passed to *note os.listdir(): 1139, Python now returns
a list of Unicode strings.  A new function, ‘os.getcwdu()’, returns the
current directory as a Unicode string.

Byte strings still work as file names, and on Windows Python will
transparently convert them to Unicode using the ‘mbcs’ encoding.

Other systems also allow Unicode strings as file names but convert them
to byte strings before passing them to the system, which can cause a
*note UnicodeError: 12e6. to be raised.  Applications can test whether
arbitrary Unicode strings are supported as file names by checking *note
os.path.supports_unicode_filenames: 14d6, a Boolean value.

Under MacOS, *note os.listdir(): 1139. may now return Unicode filenames.

Ver também
..........

PEP 277(1) - Unicode file name support for Windows NT

     Written by Neil Hodgson; implemented by Neil Hodgson, Martin von
     Löwis, and Mark Hammond.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0277/


File: python.info,  Node: PEP 278 Universal Newline Support,  Next: PEP 279 enumerate,  Prev: PEP 277 Unicode file name support for Windows NT,  Up: What’s New in Python 2 3

1.19.6 PEP 278: Universal Newline Support
-----------------------------------------

The three major operating systems used today are Microsoft Windows,
Apple’s Macintosh OS, and the various Unix derivatives.  A minor
irritation of cross-platform work is that these three platforms all use
different characters to mark the ends of lines in text files.  Unix uses
the linefeed (ASCII character 10), MacOS uses the carriage return (ASCII
character 13), and Windows uses a two-character sequence of a carriage
return plus a newline.

Python’s file objects can now support end of line conventions other than
the one followed by the platform on which Python is running.  Opening a
file with the mode ‘'U'’ or ‘'rU'’ will open a file for reading in *note
universal newlines: d5c. mode.  All three line ending conventions will
be translated to a ‘'\n'’ in the strings returned by the various file
methods such as ‘read()’ and ‘readline()’.

Universal newline support is also used when importing modules and when
executing a file with the ‘execfile()’ function.  This means that Python
modules can be shared between all three operating systems without
needing to convert the line-endings.

This feature can be disabled when compiling Python by specifying the
‘--without-universal-newlines’ switch when running Python’s ‘configure’
script.

Ver também
..........

PEP 278(1) - Universal Newline Support

     Written and implemented by Jack Jansen.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0278/


File: python.info,  Node: PEP 279 enumerate,  Next: PEP 282 The logging Package,  Prev: PEP 278 Universal Newline Support,  Up: What’s New in Python 2 3

1.19.7 PEP 279: enumerate()
---------------------------

A new built-in function, *note enumerate(): 14c9, will make certain
loops a bit clearer.  ‘enumerate(thing)’, where 'thing' is either an
iterator or a sequence, returns an iterator that will return ‘(0,
thing[0])’, ‘(1, thing[1])’, ‘(2, thing[2])’, and so forth.

A common idiom to change every element of a list looks like this:

     for i in range(len(L)):
         item = L[i]
         # ... compute some result based on item ...
         L[i] = result

This can be rewritten using *note enumerate(): 14c9. as:

     for i, item in enumerate(L):
         # ... compute some result based on item ...
         L[i] = result

Ver também
..........

PEP 279(1) - The enumerate() built-in function

     Written and implemented by Raymond D. Hettinger.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0279/


File: python.info,  Node: PEP 282 The logging Package,  Next: PEP 285 A Boolean Type,  Prev: PEP 279 enumerate,  Up: What’s New in Python 2 3

1.19.8 PEP 282: The logging Package
-----------------------------------

A standard package for writing logs, *note logging: 87, has been added
to Python 2.3.  It provides a powerful and flexible mechanism for
generating logging output which can then be filtered and processed in
various ways.  A configuration file written in a standard format can be
used to control the logging behavior of a program.  Python includes
handlers that will write log records to standard error or to a file or
socket, send them to the system log, or even e-mail them to a particular
address; of course, it’s also possible to write your own handler
classes.

The *note Logger: b64. class is the primary class.  Most application
code will deal with one or more *note Logger: b64. objects, each one
used by a particular subsystem of the application.  Each *note Logger:
b64. is identified by a name, and names are organized into a hierarchy
using ‘.’ as the component separator.  For example, you might have *note
Logger: b64. instances named ‘server’, ‘server.auth’ and
‘server.network’.  The latter two instances are below ‘server’ in the
hierarchy.  This means that if you turn up the verbosity for ‘server’ or
direct ‘server’ messages to a different handler, the changes will also
apply to records logged to ‘server.auth’ and ‘server.network’.  There’s
also a root *note Logger: b64. that’s the parent of all other loggers.

For simple uses, the *note logging: 87. package contains some
convenience functions that always use the root log:

     import logging

     logging.debug('Debugging information')
     logging.info('Informational message')
     logging.warning('Warning:config file %s not found', 'server.conf')
     logging.error('Error occurred')
     logging.critical('Critical error -- shutting down')

This produces the following output:

     WARNING:root:Alerta:arquivo de configuração server.conf não encontrado
     ERROR:root:Ocorreu um erro
     CRITICAL:root:Erro crítico -- shutting down

In the default configuration, informational and debugging messages are
suppressed and the output is sent to standard error.  You can enable the
display of informational and debugging messages by calling the *note
setLevel(): 14db. method on the root logger.

Notice the *note warning(): 2ff. call’s use of string formatting
operators; all of the functions for logging messages take the arguments
‘(msg, arg1, arg2, ...)’ and log the string resulting from ‘msg % (arg1,
arg2, ...)’.

There’s also an *note exception(): 14dc. function that records the most
recent traceback.  Any of the other functions will also record the
traceback if you specify a true value for the keyword argument
'exc_info'.

     def f():
         try:    1/0
         except: logging.exception('Problem recorded')

     f()

This produces the following output:

     ERROR:root:Problem recorded
     Traceback (most recent call last):
       File "t.py", line 6, in f
         1/0
     ZeroDivisionError: integer division or modulo by zero

Slightly more advanced programs will use a logger other than the root
logger.  The ‘getLogger(name)’ function is used to get a particular log,
creating it if it doesn’t exist yet.  ‘getLogger(None)’ returns the root
logger.

     log = logging.getLogger('server')
      ...
     log.info('Listening on port %i', port)
      ...
     log.critical('Disk full')
      ...

Log records are usually propagated up the hierarchy, so a message logged
to ‘server.auth’ is also seen by ‘server’ and ‘root’, but a *note
Logger: b64. can prevent this by setting its *note propagate: 14dd.
attribute to *note False: b49.

There are more classes provided by the *note logging: 87. package that
can be customized.  When a *note Logger: b64. instance is told to log a
message, it creates a *note LogRecord: 101c. instance that is sent to
any number of different *note Handler: 14de. instances.  Loggers and
handlers can also have an attached list of filters, and each filter can
cause the *note LogRecord: 101c. to be ignored or can modify the record
before passing it along.  When they’re finally output, *note LogRecord:
101c. instances are converted to text by a *note Formatter: 14df. class.
All of these classes can be replaced by your own specially written
classes.

With all of these features the *note logging: 87. package should provide
enough flexibility for even the most complicated applications.  This is
only an incomplete overview of its features, so please see the package’s
reference documentation for all of the details.  Reading PEP 282(1) will
also be helpful.

Ver também
..........

PEP 282(2) - A Logging System

     Written by Vinay Sajip and Trent Mick; implemented by Vinay Sajip.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0282/

   (2) https://peps.python.org/pep-0282/


File: python.info,  Node: PEP 285 A Boolean Type,  Next: PEP 293 Codec Error Handling Callbacks,  Prev: PEP 282 The logging Package,  Up: What’s New in Python 2 3

1.19.9 PEP 285: A Boolean Type
------------------------------

A Boolean type was added to Python 2.3.  Two new constants were added to
the ‘__builtin__’ module, *note True: c27. and *note False: b49.  (*note
True: c27. and *note False: b49. constants were added to the built-ins
in Python 2.2.1, but the 2.2.1 versions are simply set to integer values
of 1 and 0 and aren’t a different type.)

The type object for this new type is named *note bool: 468.; the
constructor for it takes any Python value and converts it to *note True:
c27. or *note False: b49.

     >>> bool(1)
     True
     >>> bool(0)
     False
     >>> bool([])
     False
     >>> bool( (1,) )
     True

Most of the standard library modules and built-in functions have been
changed to return Booleans.

     >>> obj = []
     >>> hasattr(obj, 'append')
     True
     >>> isinstance(obj, list)
     True
     >>> isinstance(obj, tuple)
     False

Python’s Booleans were added with the primary goal of making code
clearer.  For example, if you’re reading a function and encounter the
statement ‘return 1’, you might wonder whether the ‘1’ represents a
Boolean truth value, an index, or a coefficient that multiplies some
other quantity.  If the statement is ‘return True’, however, the meaning
of the return value is quite clear.

Python’s Booleans were 'not' added for the sake of strict type-checking.
A very strict language such as Pascal would also prevent you performing
arithmetic with Booleans, and would require that the expression in an
*note if: 2f3. statement always evaluate to a Boolean result.  Python is
not this strict and never will be, as PEP 285(1) explicitly says.  This
means you can still use any expression in an ‘if’ statement, even ones
that evaluate to a list or tuple or some random object.  The Boolean
type is a subclass of the *note int: 257. class so that arithmetic using
a Boolean still works.

     >>> True + 1
     2
     >>> False + 1
     1
     >>> False * 75
     0
     >>> True * 75
     75

To sum up *note True: c27. and *note False: b49. in a sentence: they’re
alternative ways to spell the integer values 1 and 0, with the single
difference that *note str(): 44c. and *note repr(): 800. return the
strings ‘'True'’ and ‘'False'’ instead of ‘'1'’ and ‘'0'’.

Ver também
..........

PEP 285(2) - Adding a bool type

     Written and implemented by GvR.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0285/

   (2) https://peps.python.org/pep-0285/


File: python.info,  Node: PEP 293 Codec Error Handling Callbacks,  Next: PEP 301 Package Index and Metadata for Distutils,  Prev: PEP 285 A Boolean Type,  Up: What’s New in Python 2 3

1.19.10 PEP 293: Codec Error Handling Callbacks
-----------------------------------------------

When encoding a Unicode string into a byte string, unencodable
characters may be encountered.  So far, Python has allowed specifying
the error processing as either “strict” (raising *note UnicodeError:
12e6.), “ignore” (skipping the character), or “replace” (using a
question mark in the output string), with “strict” being the default
behavior.  It may be desirable to specify alternative processing of such
errors, such as inserting an XML character reference or HTML entity
reference into the converted string.

Python now has a flexible framework to add different processing
strategies.  New error handlers can be added with *note
codecs.register_error(): 14e3, and codecs then can access the error
handler with *note codecs.lookup_error(): 14e4.  An equivalent C API has
been added for codecs written in C. The error handler gets the necessary
state information such as the string being converted, the position in
the string where the error was detected, and the target encoding.  The
handler can then either raise an exception or return a replacement
string.

Two additional error handlers have been implemented using this
framework: “backslashreplace” uses Python backslash quoting to represent
unencodable characters and “xmlcharrefreplace” emits XML character
references.

Ver também
..........

PEP 293(1) - Codec Error Handling Callbacks

     Written and implemented by Walter Dörwald.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0293/


File: python.info,  Node: PEP 301 Package Index and Metadata for Distutils,  Next: PEP 302 New Import Hooks,  Prev: PEP 293 Codec Error Handling Callbacks,  Up: What’s New in Python 2 3

1.19.11 PEP 301: Package Index and Metadata for Distutils
---------------------------------------------------------

Support for the long-requested Python catalog makes its first appearance
in 2.3.

The heart of the catalog is the new Distutils ‘register’ command.
Running ‘python setup.py register’ will collect the metadata describing
a package, such as its name, version, maintainer, description, &c., and
send it to a central catalog server.  The resulting catalog is available
from ‘https://pypi.org’.

To make the catalog a bit more useful, a new optional 'classifiers'
keyword argument has been added to the Distutils ‘setup()’ function.  A
list of Trove(1)-style strings can be supplied to help classify the
software.

Here’s an example ‘setup.py’ with classifiers, written to be compatible
with older versions of the Distutils:

     from distutils import core
     kw = {'name': "Quixote",
           'version': "0.5.1",
           'description': "A highly Pythonic Web application framework",
           # ...
           }

     if (hasattr(core, 'setup_keywords') and
         'classifiers' in core.setup_keywords):
         kw['classifiers'] = \
             ['Topic :: Internet :: WWW/HTTP :: Dynamic Content',
              'Environment :: No Input/Output (Daemon)',
              'Intended Audience :: Developers'],

     core.setup(**kw)

The full list of classifiers can be obtained by running ‘python setup.py
register --list-classifiers’.

Ver também
..........

PEP 301(2) - Package Index and Metadata for Distutils

     Written and implemented by Richard Jones.

   ---------- Footnotes ----------

   (1) http://catb.org/~esr/trove/

   (2) https://peps.python.org/pep-0301/


File: python.info,  Node: PEP 302 New Import Hooks,  Next: PEP 305 Comma-separated Files,  Prev: PEP 301 Package Index and Metadata for Distutils,  Up: What’s New in Python 2 3

1.19.12 PEP 302: New Import Hooks
---------------------------------

While it’s been possible to write custom import hooks ever since the
‘ihooks’ module was introduced in Python 1.3, no one has ever been
really happy with it because writing new import hooks is difficult and
messy.  There have been various proposed alternatives such as the
‘imputil’ and ‘iu’ modules, but none of them has ever gained much
acceptance, and none of them were easily usable from C code.

PEP 302(1) borrows ideas from its predecessors, especially from Gordon
McMillan’s ‘iu’ module.  Three new items are added to the *note sys: d9.
module:

   * ‘sys.path_hooks’ is a list of callable objects; most often they’ll
     be classes.  Each callable takes a string containing a path and
     either returns an importer object that will handle imports from
     this path or raises an *note ImportError: 419. exception if it
     can’t handle this path.

   * ‘sys.path_importer_cache’ caches importer objects for each path, so
     ‘sys.path_hooks’ will only need to be traversed once for each path.

   * ‘sys.meta_path’ is a list of importer objects that will be
     traversed before ‘sys.path’ is checked.  This list is initially
     empty, but user code can add objects to it.  Additional built-in
     and frozen modules can be imported by an object added to this list.

Importer objects must have a single method, ‘find_module(fullname,
path=None)’.  'fullname' will be a module or package name, e.g.
‘string’ or ‘distutils.core’.  ‘find_module()’ must return a loader
object that has a single method, ‘load_module(fullname)’, that creates
and returns the corresponding module object.

Pseudo-code for Python’s new import logic, therefore, looks something
like this (simplified a bit; see PEP 302(2) for the full details):

     for mp in sys.meta_path:
         loader = mp(fullname)
         if loader is not None:
             <module> = loader.load_module(fullname)

     for path in sys.path:
         for hook in sys.path_hooks:
             try:
                 importer = hook(path)
             except ImportError:
                 # ImportError, so try the other path hooks
                 pass
             else:
                 loader = importer.find_module(fullname)
                 <module> = loader.load_module(fullname)

     # Not found!
     raise ImportError

Ver também
..........

PEP 302(3) - New Import Hooks

     Written by Just van Rossum and Paul Moore.  Implemented by Just van
     Rossum.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0302/

   (2) https://peps.python.org/pep-0302/

   (3) https://peps.python.org/pep-0302/


File: python.info,  Node: PEP 305 Comma-separated Files,  Next: PEP 307 Pickle Enhancements,  Prev: PEP 302 New Import Hooks,  Up: What’s New in Python 2 3

1.19.13 PEP 305: Comma-separated Files
--------------------------------------

Comma-separated files are a format frequently used for exporting data
from databases and spreadsheets.  Python 2.3 adds a parser for
comma-separated files.

Comma-separated format is deceptively simple at first glance:

     Costs,150,200,3.95

Read a line and call ‘line.split(',')’: what could be simpler?  But toss
in string data that can contain commas, and things get more complicated:

     "Costs",150,200,3.95,"Includes taxes, shipping, and sundry items"

A big ugly regular expression can parse this, but using the new *note
csv: 29. package is much simpler:

     import csv

     input = open('datafile', 'rb')
     reader = csv.reader(input)
     for line in reader:
         print line

The *note reader(): 486. function takes a number of different options.
The field separator isn’t limited to the comma and can be changed to any
character, and so can the quoting and line-ending characters.

Different dialects of comma-separated files can be defined and
registered; currently there are two dialects, both used by Microsoft
Excel.  A separate *note csv.writer: 487. class will generate
comma-separated files from a succession of tuples or lists, quoting
strings that contain the delimiter.

Ver também
..........

PEP 305(1) - CSV File API

     Written and implemented by Kevin Altis, Dave Cole, Andrew McNamara,
     Skip Montanaro, Cliff Wells.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0305/


File: python.info,  Node: PEP 307 Pickle Enhancements,  Next: Extended Slices,  Prev: PEP 305 Comma-separated Files,  Up: What’s New in Python 2 3

1.19.14 PEP 307: Pickle Enhancements
------------------------------------

The *note pickle: a6. and ‘cPickle’ modules received some attention
during the 2.3 development cycle.  In 2.2, new-style classes could be
pickled without difficulty, but they weren’t pickled very compactly; PEP
307(1) quotes a trivial example where a new-style class results in a
pickled string three times longer than that for a classic class.

The solution was to invent a new pickle protocol.  The *note
pickle.dumps(): 14ec. function has supported a text-or-binary flag for a
long time.  In 2.3, this flag is redefined from a Boolean to an integer:
0 is the old text-mode pickle format, 1 is the old binary format, and
now 2 is a new 2.3-specific format.  A new constant, *note
pickle.HIGHEST_PROTOCOL: 14ed, can be used to select the fanciest
protocol available.

Unpickling is no longer considered a safe operation.  2.2’s *note
pickle: a6. provided hooks for trying to prevent unsafe classes from
being unpickled (specifically, a ‘__safe_for_unpickling__’ attribute),
but none of this code was ever audited and therefore it’s all been
ripped out in 2.3.  You should not unpickle untrusted data in any
version of Python.

To reduce the pickling overhead for new-style classes, a new interface
for customizing pickling was added using three special methods: *note
__getstate__(): 5d8, *note __setstate__(): 9dc, and *note
__getnewargs__(): dfe.  Consult PEP 307(2) for the full semantics of
these methods.

As a way to compress pickles yet further, it’s now possible to use
integer codes instead of long strings to identify pickled classes.  The
Python Software Foundation will maintain a list of standardized codes;
there’s also a range of codes for private use.  Currently no codes have
been specified.

Ver também
..........

PEP 307(3) - Extensions to the pickle protocol

     Written and implemented by Guido van Rossum and Tim Peters.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0307/

   (2) https://peps.python.org/pep-0307/

   (3) https://peps.python.org/pep-0307/


File: python.info,  Node: Extended Slices,  Next: Outras mudanças na linguagem<18>,  Prev: PEP 307 Pickle Enhancements,  Up: What’s New in Python 2 3

1.19.15 Extended Slices
-----------------------

Ever since Python 1.4, the slicing syntax has supported an optional
third “step” or “stride” argument.  For example, these are all legal
Python syntax: ‘L[1:10:2]’, ‘L[:-1:1]’, ‘L[::-1]’.  This was added to
Python at the request of the developers of Numerical Python, which uses
the third argument extensively.  However, Python’s built-in list, tuple,
and string sequence types have never supported this feature, raising a
*note TypeError: 2c3. if you tried it.  Michael Hudson contributed a
patch to fix this shortcoming.

For example, you can now easily extract the elements of a list that have
even indexes:

     >>> L = range(10)
     >>> L[::2]
     [0, 2, 4, 6, 8]

Negative values also work to make a copy of the same list in reverse
order:

     >>> L[::-1]
     [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

This also works for tuples, arrays, and strings:

     >>> s='abcd'
     >>> s[::2]
     'ac'
     >>> s[::-1]
     'dcba'

If you have a mutable sequence such as a list or an array you can assign
to or delete an extended slice, but there are some differences between
assignment to extended and regular slices.  Assignment to a regular
slice can be used to change the length of the sequence:

     >>> a = range(3)
     >>> a
     [0, 1, 2]
     >>> a[1:3] = [4, 5, 6]
     >>> a
     [0, 4, 5, 6]

Extended slices aren’t this flexible.  When assigning to an extended
slice, the list on the right hand side of the statement must contain the
same number of items as the slice it is replacing:

     >>> a = range(4)
     >>> a
     [0, 1, 2, 3]
     >>> a[::2]
     [0, 2]
     >>> a[::2] = [0, -1]
     >>> a
     [0, 1, -1, 3]
     >>> a[::2] = [0,1,2]
     Traceback (most recent call last):
       File "<stdin>", line 1, in ?
     ValueError: attempt to assign sequence of size 3 to extended slice of size 2

Deletion is more straightforward:

     >>> a = range(4)
     >>> a
     [0, 1, 2, 3]
     >>> a[::2]
     [0, 2]
     >>> del a[::2]
     >>> a
     [1, 3]

One can also now pass slice objects to the *note __getitem__(): 283.
methods of the built-in sequences:

     >>> range(10).__getitem__(slice(0, 5, 2))
     [0, 2, 4]

Or use slice objects directly in subscripts:

     >>> range(10)[slice(0, 5, 2)]
     [0, 2, 4]

To simplify implementing sequences that support extended slicing, slice
objects now have a method ‘indices(length)’ which, given the length of a
sequence, returns a ‘(start, stop, step)’ tuple that can be passed
directly to *note range(): 94a.  ‘indices()’ handles omitted and
out-of-bounds indices in a manner consistent with regular slices (and
this innocuous phrase hides a welter of confusing details!).  The method
is intended to be used like this:

     class FakeSeq:
         ...
         def calc_item(self, i):
             ...
         def __getitem__(self, item):
             if isinstance(item, slice):
                 indices = item.indices(len(self))
                 return FakeSeq([self.calc_item(i) for i in range(*indices)])
             else:
                 return self.calc_item(i)

From this example you can also see that the built-in *note slice: 469.
object is now the type object for the slice type, and is no longer a
function.  This is consistent with Python 2.2, where *note int: 257,
*note str: 44c, etc., underwent the same change.


File: python.info,  Node: Outras mudanças na linguagem<18>,  Next: New Improved and Deprecated Modules<4>,  Prev: Extended Slices,  Up: What’s New in Python 2 3

1.19.16 Outras mudanças na linguagem
------------------------------------

Here are all of the changes that Python 2.3 makes to the core Python
language.

   * The *note yield: 9d5. statement is now always a keyword, as
     described in section *note PEP 255; Simple Generators: 14d0. of
     this document.

   * A new built-in function *note enumerate(): 14c9. was added, as
     described in section *note PEP 279; enumerate(): 14d9. of this
     document.

   * Two new constants, *note True: c27. and *note False: b49. were
     added along with the built-in *note bool: 468. type, as described
     in section *note PEP 285; A Boolean Type: 14e1. of this document.

   * The *note int(): 257. type constructor will now return a long
     integer instead of raising an *note OverflowError: 885. when a
     string or floating-point number is too large to fit into an
     integer.  This can lead to the paradoxical result that
     ‘isinstance(int(expression), int)’ is false, but that seems
     unlikely to cause problems in practice.

   * Built-in types now support the extended slicing syntax, as
     described in section *note Extended Slices: 14ef. of this document.

   * A new built-in function, ‘sum(iterable, start=0)’, adds up the
     numeric items in the iterable object and returns their sum.  *note
     sum(): 46a. only accepts numbers, meaning that you can’t use it to
     concatenate a bunch of strings.  (Contributed by Alex Martelli.)

   * ‘list.insert(pos, value)’ used to insert 'value' at the front of
     the list when 'pos' was negative.  The behaviour has now been
     changed to be consistent with slice indexing, so when 'pos' is -1
     the value will be inserted before the last element, and so forth.

   * ‘list.index(value)’, which searches for 'value' within the list and
     returns its index, now takes optional 'start' and 'stop' arguments
     to limit the search to only part of the list.

   * Dictionaries have a new method, ‘pop(key[, *default*])’, that
     returns the value corresponding to 'key' and removes that key/value
     pair from the dictionary.  If the requested key isn’t present in
     the dictionary, 'default' is returned if it’s specified and *note
     KeyError: 344. raised if it isn’t.

          >>> d = {1:2}
          >>> d
          {1: 2}
          >>> d.pop(4)
          Traceback (most recent call last):
            File "stdin", line 1, in ?
          KeyError: 4
          >>> d.pop(1)
          2
          >>> d.pop(1)
          Traceback (most recent call last):
            File "stdin", line 1, in ?
          KeyError: 'pop(): dictionary is empty'
          >>> d
          {}
          >>>

     There’s also a new class method, ‘dict.fromkeys(iterable, value)’,
     that creates a dictionary with keys taken from the supplied
     iterator 'iterable' and all values set to 'value', defaulting to
     ‘None’.

     (Patches contributed by Raymond Hettinger.)

     Also, the *note dict(): 256. constructor now accepts keyword
     arguments to simplify creating small dictionaries:

          >>> dict(red=1, blue=2, green=3, black=4)
          {'blue': 2, 'black': 4, 'green': 3, 'red': 1}

     (Contributed by Just van Rossum.)

   * The *note assert: 96f. statement no longer checks the ‘__debug__’
     flag, so you can no longer disable assertions by assigning to
     ‘__debug__’.  Running Python with the *note -O: ddd. switch will
     still generate code that doesn’t execute any assertions.

   * Most type objects are now callable, so you can use them to create
     new objects such as functions, classes, and modules.  (This means
     that the ‘new’ module can be deprecated in a future Python version,
     because you can now use the type objects available in the *note
     types: 103. module.)  For example, you can create a new module
     object with the following code:

          >>> import types
          >>> m = types.ModuleType('abc','docstring')
          >>> m
          <module 'abc' (built-in)>
          >>> m.__doc__
          'docstring'

   * A new warning, *note PendingDeprecationWarning: 8ce. was added to
     indicate features which are in the process of being deprecated.
     The warning will 'not' be printed by default.  To check for use of
     features that will be deprecated in the future, supply *note
     -Walways;;PendingDeprecationWarning;;: 8cd. on the command line or
     use *note warnings.filterwarnings(): 14f1.

   * The process of deprecating string-based exceptions, as in ‘raise
     "Error occurred"’, has begun.  Raising a string will now trigger
     *note PendingDeprecationWarning: 8ce.

   * Using ‘None’ as a variable name will now result in a *note
     SyntaxWarning: 466. warning.  In a future version of Python, ‘None’
     may finally become a keyword.

   * The ‘xreadlines()’ method of file objects, introduced in Python
     2.1, is no longer necessary because files now behave as their own
     iterator.  ‘xreadlines()’ was originally introduced as a faster way
     to loop over all the lines in a file, but now you can simply write
     ‘for line in file_obj’.  File objects also have a new read-only
     ‘encoding’ attribute that gives the encoding used by the file;
     Unicode strings written to the file will be automatically converted
     to bytes using the given encoding.

   * The method resolution order used by new-style classes has changed,
     though you’ll only notice the difference if you have a really
     complicated inheritance hierarchy.  Classic classes are unaffected
     by this change.  Python 2.2 originally used a topological sort of a
     class’s ancestors, but 2.3 now uses the C3 algorithm as described
     in the paper "A Monotonic Superclass Linearization for Dylan"(1).
     To understand the motivation for this change, read Michele
     Simionato’s article *note A Ordem de Resolução de Métodos do Python
     2.3: 14f2, or read the thread on python-dev starting with the
     message at
     ‘https://mail.python.org/pipermail/python-dev/2002-October/029035.html’.
     Samuele Pedroni first pointed out the problem and also implemented
     the fix by coding the C3 algorithm.

   * Python runs multithreaded programs by switching between threads
     after executing N bytecodes.  The default value for N has been
     increased from 10 to 100 bytecodes, speeding up single-threaded
     applications by reducing the switching overhead.  Some
     multithreaded applications may suffer slower response time, but
     that’s easily fixed by setting the limit back to a lower number
     using ‘sys.setcheckinterval(N)’.  The limit can be retrieved with
     the new ‘sys.getcheckinterval()’ function.

   * One minor but far-reaching change is that the names of extension
     types defined by the modules included with Python now contain the
     module and a ‘'.'’ in front of the type name.  For example, in
     Python 2.2, if you created a socket and printed its ‘__class__’,
     you’d get this output:

          >>> s = socket.socket()
          >>> s.__class__
          <type 'socket'>

     In 2.3, you get this:

          >>> s.__class__
          <type '_socket.socket'>

   * One of the noted incompatibilities between old- and new-style
     classes has been removed: you can now assign to the *note __name__:
     14f3. and *note __bases__: 14f4. attributes of new-style classes.
     There are some restrictions on what can be assigned to ‘__bases__’
     along the lines of those relating to assigning to an instance’s
     *note __class__: 14f5. attribute.

* Menu:

* String Changes::
* Otimizações: Otimizações<17>.

   ---------- Footnotes ----------

   (1) https://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.19.3910


File: python.info,  Node: String Changes,  Next: Otimizações<17>,  Up: Outras mudanças na linguagem<18>

1.19.16.1 String Changes
........................

   * The *note in: 2f4. operator now works differently for strings.
     Previously, when evaluating ‘X in Y’ where 'X' and 'Y' are strings,
     'X' could only be a single character.  That’s now changed; 'X' can
     be a string of any length, and ‘X in Y’ will return *note True:
     c27. if 'X' is a substring of 'Y'. If 'X' is the empty string, the
     result is always *note True: c27.

          >>> 'ab' in 'abcd'
          True
          >>> 'ad' in 'abcd'
          False
          >>> '' in 'abcd'
          True

     Note that this doesn’t tell you where the substring starts; if you
     need that information, use the *note find(): ed7. string method.

   * The *note strip(): 14f7, *note lstrip(): 14f8, and *note rstrip():
     14f9. string methods now have an optional argument for specifying
     the characters to strip.  The default is still to remove all
     whitespace characters:

          >>> '   abc '.strip()
          'abc'
          >>> '><><abc<><><>'.strip('<>')
          'abc'
          >>> '><><abc<><><>\n'.strip('<>')
          'abc<><><>\n'
          >>> u'\u4000\u4001abc\u4000'.strip(u'\u4000')
          u'\u4001abc'
          >>>

     (Suggested by Simon Brunning and implemented by Walter Dörwald.)

   * The *note startswith(): efa. and *note endswith(): efb. string
     methods now accept negative numbers for the 'start' and 'end'
     parameters.

   * Another new string method is *note zfill(): 14fa, originally a
     function in the *note string: d3. module.  *note zfill(): 14fa.
     pads a numeric string with zeros on the left until it’s the
     specified width.  Note that the ‘%’ operator is still more flexible
     and powerful than *note zfill(): 14fa.

          >>> '45'.zfill(4)
          '0045'
          >>> '12345'.zfill(4)
          '12345'
          >>> 'goofy'.zfill(6)
          '0goofy'

     (Contributed by Walter Dörwald.)

   * A new type object, ‘basestring’, has been added.  Both 8-bit
     strings and Unicode strings inherit from this type, so
     ‘isinstance(obj, basestring)’ will return *note True: c27. for
     either kind of string.  It’s a completely abstract type, so you
     can’t create ‘basestring’ instances.

   * Interned strings are no longer immortal and will now be
     garbage-collected in the usual way when the only reference to them
     is from the internal dictionary of interned strings.  (Implemented
     by Oren Tirosh.)


File: python.info,  Node: Otimizações<17>,  Prev: String Changes,  Up: Outras mudanças na linguagem<18>

1.19.16.2 Otimizações
.....................

   * The creation of new-style class instances has been made much
     faster; they’re now faster than classic classes!

   * The *note sort(): be8. method of list objects has been extensively
     rewritten by Tim Peters, and the implementation is significantly
     faster.

   * Multiplication of large long integers is now much faster thanks to
     an implementation of Karatsuba multiplication, an algorithm that
     scales better than the 'O'('n'^2) required for the grade-school
     multiplication algorithm.  (Original patch by Christopher A. Craig,
     and significantly reworked by Tim Peters.)

   * The ‘SET_LINENO’ opcode is now gone.  This may provide a small
     speed increase, depending on your compiler’s idiosyncrasies.  See
     section *note Outras alterações e correções: 14fc. for a longer
     explanation.  (Removed by Michael Hudson.)

   * ‘xrange()’ objects now have their own iterator, making ‘for i in
     xrange(n)’ slightly faster than ‘for i in range(n)’.  (Patch by
     Raymond Hettinger.)

   * A number of small rearrangements have been made in various hotspots
     to improve performance, such as inlining a function or removing
     some code.  (Implemented mostly by GvR, but lots of people have
     contributed single changes.)

The net result of the 2.3 optimizations is that Python 2.3 runs the
pystone benchmark around 25% faster than Python 2.2.


File: python.info,  Node: New Improved and Deprecated Modules<4>,  Next: Pymalloc A Specialized Object Allocator,  Prev: Outras mudanças na linguagem<18>,  Up: What’s New in Python 2 3

1.19.17 New, Improved, and Deprecated Modules
---------------------------------------------

As usual, Python’s standard library received a number of enhancements
and bug fixes.  Here’s a partial list of the most notable changes,
sorted alphabetically by module name.  Consult the ‘Misc/NEWS’ file in
the source tree for a more complete list of changes, or look through the
CVS logs for all the details.

   * The *note array: 7. module now supports arrays of Unicode
     characters using the ‘'u'’ format character.  Arrays also now
     support using the ‘+=’ assignment operator to add another array’s
     contents, and the ‘*=’ assignment operator to repeat an array.
     (Contributed by Jason Orendorff.)

   * The ‘bsddb’ module has been replaced by version 4.1.6 of the
     PyBSDDB(1) package, providing a more complete interface to the
     transactional features of the BerkeleyDB library.

     The old version of the module has been renamed to ‘bsddb185’ and is
     no longer built automatically; you’ll have to edit ‘Modules/Setup’
     to enable it.  Note that the new ‘bsddb’ package is intended to be
     compatible with the old module, so be sure to file bugs if you
     discover any incompatibilities.  When upgrading to Python 2.3, if
     the new interpreter is compiled with a new version of the
     underlying BerkeleyDB library, you will almost certainly have to
     convert your database files to the new version.  You can do this
     fairly easily with the new scripts ‘db2pickle.py’ and
     ‘pickle2db.py’ which you will find in the distribution’s
     ‘Tools/scripts’ directory.  If you’ve already been using the
     PyBSDDB package and importing it as ‘bsddb3’, you will have to
     change your ‘import’ statements to import it as ‘bsddb’.

   * The new *note bz2: 13. module is an interface to the bz2 data
     compression library.  bz2-compressed data is usually smaller than
     corresponding *note zlib: 133.-compressed data.  (Contributed by
     Gustavo Niemeyer.)

   * A set of standard date/time types has been added in the new *note
     datetime: 30. module.  See the following section for more details.

   * The Distutils ‘Extension’ class now supports an extra constructor
     argument named 'depends' for listing additional source files that
     an extension depends on.  This lets Distutils recompile the module
     if any of the dependency files are modified.  For example, if
     ‘sampmodule.c’ includes the header file ‘sample.h’, you would
     create the ‘Extension’ object like this:

          ext = Extension("samp",
                          sources=["sampmodule.c"],
                          depends=["sample.h"])

     Modifying ‘sample.h’ would then cause the module to be recompiled.
     (Contributed by Jeremy Hylton.)

   * Other minor changes to Distutils: it now checks for the *note CC:
     14fe, *note CFLAGS: 14ff, ‘CPP’, *note LDFLAGS: 1500, and *note
     CPPFLAGS: 1501. environment variables, using them to override the
     settings in Python’s configuration (contributed by Robert Weber).

   * Previously the *note doctest: 3a. module would only search the
     docstrings of public methods and functions for test cases, but it
     now also examines private ones as well.  The *note DocTestSuite():
     e1f. function creates a *note unittest.TestSuite: e20. object from
     a set of *note doctest: 3a. tests.

   * The new ‘gc.get_referents(object)’ function returns a list of all
     the objects referenced by 'object'.

   * The *note getopt: 61. module gained a new function, *note
     gnu_getopt(): 1502, that supports the same arguments as the
     existing *note getopt(): 1503. function but uses GNU-style scanning
     mode.  The existing *note getopt(): 1503. stops processing options
     as soon as a non-option argument is encountered, but in GNU-style
     mode processing continues, meaning that options and arguments can
     be mixed.  For example:

          >>> getopt.getopt(['-f', 'filename', 'output', '-v'], 'f:v')
          ([('-f', 'filename')], ['output', '-v'])
          >>> getopt.gnu_getopt(['-f', 'filename', 'output', '-v'], 'f:v')
          ([('-f', 'filename'), ('-v', '')], ['output'])

     (Contributed by Peter Åstrand.)

   * The *note grp: 66, *note pwd: b2, and *note resource: bc. modules
     now return enhanced tuples:

          >>> import grp
          >>> g = grp.getgrnam('amk')
          >>> g.gr_name, g.gr_gid
          ('amk', 500)

   * The *note gzip: 67. module can now handle files exceeding 2 GiB.

   * The new *note heapq: 69. module contains an implementation of a
     heap queue algorithm.  A heap is an array-like data structure that
     keeps items in a partially sorted order such that, for every index
     'k', ‘heap[k] <= heap[2*k+1]’ and ‘heap[k] <= heap[2*k+2]’.  This
     makes it quick to remove the smallest item, and inserting a new
     item while maintaining the heap property is 'O'(log 'n').  (See
     ‘https://xlinux.nist.gov/dads//HTML/priorityque.html’ for more
     information about the priority queue data structure.)

     The *note heapq: 69. module provides *note heappush(): 1504. and
     *note heappop(): 1505. functions for adding and removing items
     while maintaining the heap property on top of some other mutable
     Python sequence type.  Here’s an example that uses a Python list:

          >>> import heapq
          >>> heap = []
          >>> for item in [3, 7, 5, 11, 1]:
          ...    heapq.heappush(heap, item)
          ...
          >>> heap
          [1, 3, 5, 11, 7]
          >>> heapq.heappop(heap)
          1
          >>> heapq.heappop(heap)
          3
          >>> heap
          [5, 7, 11]

     (Contributed by Kevin O’Connor.)

   * The IDLE integrated development environment has been updated using
     the code from the IDLEfork project
     (‘https://idlefork.sourceforge.net’).  The most notable feature is
     that the code being developed is now executed in a subprocess,
     meaning that there’s no longer any need for manual ‘reload()’
     operations.  IDLE’s core code has been incorporated into the
     standard library as the *note idlelib: 73. package.

   * The *note imaplib: 74. module now supports IMAP over SSL.
     (Contributed by Piers Lauder and Tino Lange.)

   * The *note itertools: 81. contains a number of useful functions for
     use with iterators, inspired by various functions provided by the
     ML and Haskell languages.  For example,
     ‘itertools.ifilter(predicate, iterator)’ returns all elements in
     the iterator for which the function ‘predicate()’ returns *note
     True: c27, and ‘itertools.repeat(obj, N)’ returns ‘obj’ 'N' times.
     There are a number of other functions in the module; see the
     package’s reference documentation for details.  (Contributed by
     Raymond Hettinger.)

   * Two new functions in the *note math: 8e. module, ‘degrees(rads)’
     and ‘radians(degs)’, convert between radians and degrees.  Other
     functions in the *note math: 8e. module such as *note math.sin():
     1506. and *note math.cos(): 1507. have always required input values
     measured in radians.  Also, an optional 'base' argument was added
     to *note math.log(): 1508. to make it easier to compute logarithms
     for bases other than ‘e’ and ‘10’.  (Contributed by Raymond
     Hettinger.)

   * Several new POSIX functions (‘getpgid()’, ‘killpg()’, ‘lchown()’,
     ‘loadavg()’, ‘major()’, ‘makedev()’, ‘minor()’, and ‘mknod()’) were
     added to the *note posix: ad. module that underlies the *note os:
     a1. module.  (Contributed by Gustavo Niemeyer, Geert Jansen, and
     Denis S. Otkidach.)

   * In the *note os: a1. module, the ‘*stat()’ family of functions can
     now report fractions of a second in a timestamp.  Such time stamps
     are represented as floats, similar to the value returned by *note
     time.time(): 254.

     During testing, it was found that some applications will break if
     time stamps are floats.  For compatibility, when using the tuple
     interface of the *note stat_result: 1509. time stamps will be
     represented as integers.  When using named fields (a feature first
     introduced in Python 2.2), time stamps are still represented as
     integers, unless ‘os.stat_float_times()’ is invoked to enable float
     return values:

          >>> os.stat("/tmp").st_mtime
          1034791200
          >>> os.stat_float_times(True)
          >>> os.stat("/tmp").st_mtime
          1034791200.6335014

     In Python 2.4, the default will change to always returning floats.

     Application developers should enable this feature only if all their
     libraries work properly when confronted with floating-point time
     stamps, or if they use the tuple API. If used, the feature should
     be activated on an application level instead of trying to enable it
     on a per-use basis.

   * The *note optparse: a0. module contains a new parser for
     command-line arguments that can convert option values to a
     particular Python type and will automatically generate a usage
     message.  See the following section for more details.

   * The old and never-documented ‘linuxaudiodev’ module has been
     deprecated, and a new version named ‘ossaudiodev’ has been added.
     The module was renamed because the OSS sound drivers can be used on
     platforms other than Linux, and the interface has also been tidied
     and brought up to date in various ways.  (Contributed by Greg Ward
     and Nicholas FitzRoy-Dale.)

   * The new *note platform: aa. module contains a number of functions
     that try to determine various properties of the platform you’re
     running on.  There are functions for getting the architecture, CPU
     type, the Windows OS version, and even the Linux distribution
     version.  (Contributed by Marc-André Lemburg.)

   * The parser objects provided by the *note pyexpat: 126. module can
     now optionally buffer character data, resulting in fewer calls to
     your character data handler and therefore faster performance.
     Setting the parser object’s *note buffer_text: 150a. attribute to
     *note True: c27. will enable buffering.

   * The ‘sample(population, k)’ function was added to the *note random:
     b8. module.  'population' is a sequence or ‘xrange’ object
     containing the elements of a population, and *note sample(): 746.
     chooses 'k' elements from the population without replacing chosen
     elements.  'k' can be any value up to ‘len(population)’.  For
     example:

          >>> days = ['Mo', 'Tu', 'We', 'Th', 'Fr', 'St', 'Sn']
          >>> random.sample(days, 3)      # Choose 3 elements
          ['St', 'Sn', 'Th']
          >>> random.sample(days, 7)      # Choose 7 elements
          ['Tu', 'Th', 'Mo', 'We', 'St', 'Fr', 'Sn']
          >>> random.sample(days, 7)      # Choose 7 again
          ['We', 'Mo', 'Sn', 'Fr', 'Tu', 'St', 'Th']
          >>> random.sample(days, 8)      # Can't choose eight
          Traceback (most recent call last):
            File "<stdin>", line 1, in ?
            File "random.py", line 414, in sample
                raise ValueError, "sample larger than population"
          ValueError: sample larger than population
          >>> random.sample(xrange(1,10000,2), 10)   # Choose ten odd nos. under 10000
          [3407, 3805, 1505, 7023, 2401, 2267, 9733, 3151, 8083, 9195]

     The *note random: b8. module now uses a new algorithm, the Mersenne
     Twister, implemented in C. It’s faster and more extensively studied
     than the previous algorithm.

     (All changes contributed by Raymond Hettinger.)

   * The *note readline: ba. module also gained a number of new
     functions: *note get_history_item(): 150b, *note
     get_current_history_length(): 150c, and *note redisplay(): 150d.

   * The ‘rexec’ and ‘Bastion’ modules have been declared dead, and
     attempts to import them will fail with a *note RuntimeError: 195.
     New-style classes provide new ways to break out of the restricted
     execution environment provided by ‘rexec’, and no one has interest
     in fixing them or time to do so.  If you have applications using
     ‘rexec’, rewrite them to use something else.

     (Sticking with Python 2.2 or 2.1 will not make your applications
     any safer because there are known bugs in the ‘rexec’ module in
     those versions.  To repeat: if you’re using ‘rexec’, stop using it
     immediately.)

   * The ‘rotor’ module has been deprecated because the algorithm it
     uses for encryption is not believed to be secure.  If you need
     encryption, use one of the several AES Python modules that are
     available separately.

   * The *note shutil: c5. module gained a ‘move(src, dest)’ function
     that recursively moves a file or directory to a new location.

   * Support for more advanced POSIX signal handling was added to the
     *note signal: c6. but then removed again as it proved impossible to
     make it work reliably across platforms.

   * The *note socket: cc. module now supports timeouts.  You can call
     the ‘settimeout(t)’ method on a socket object to set a timeout of
     't' seconds.  Subsequent socket operations that take longer than
     't' seconds to complete will abort and raise a *note
     socket.timeout: 837. exception.

     The original timeout implementation was by Tim O’Malley.  Michael
     Gilfix integrated it into the Python *note socket: cc. module and
     shepherded it through a lengthy review.  After the code was checked
     in, Guido van Rossum rewrote parts of it.  (This is a good example
     of a collaborative development process in action.)

   * On Windows, the *note socket: cc. module now ships with Secure
     Sockets Layer (SSL) support.

   * The value of the C ‘PYTHON_API_VERSION’ macro is now exposed at the
     Python level as ‘sys.api_version’.  The current exception can be
     cleared by calling the new ‘sys.exc_clear()’ function.

   * The new *note tarfile: de. module allows reading from and writing
     to ‘tar’-format archive files.  (Contributed by Lars Gustäbel.)

   * The new *note textwrap: ec. module contains functions for wrapping
     strings containing paragraphs of text.  The ‘wrap(text, width)’
     function takes a string and returns a list containing the text
     split into lines of no more than the chosen width.  The ‘fill(text,
     width)’ function returns a single string, reformatted to fit into
     lines no longer than the chosen width.  (As you can guess, *note
     fill(): 150e. is built on top of *note wrap(): 150f.  For example:

          >>> import textwrap
          >>> paragraph = "Not a whit, we defy augury: ... more text ..."
          >>> textwrap.wrap(paragraph, 60)
          ["Not a whit, we defy augury: there's a special providence in",
           "the fall of a sparrow. If it be now, 'tis not to come; if it",
           ...]
          >>> print textwrap.fill(paragraph, 35)
          Not a whit, we defy augury: there's
          a special providence in the fall of
          a sparrow. If it be now, 'tis not
          to come; if it be not to come, it
          will be now; if it be not now, yet
          it will come: the readiness is all.
          >>>

     The module also contains a *note TextWrapper: 1003. class that
     actually implements the text wrapping strategy.  Both the *note
     TextWrapper: 1003. class and the *note wrap(): 150f. and *note
     fill(): 150e. functions support a number of additional keyword
     arguments for fine-tuning the formatting; consult the module’s
     documentation for details.  (Contributed by Greg Ward.)

   * The ‘thread’ and *note threading: ed. modules now have companion
     modules, ‘dummy_thread’ and ‘dummy_threading’, that provide a
     do-nothing implementation of the ‘thread’ module’s interface for
     platforms where threads are not supported.  The intention is to
     simplify thread-aware modules (ones that 'don’t' rely on threads to
     run) by putting the following code at the top:

          try:
              import threading as _threading
          except ImportError:
              import dummy_threading as _threading

     In this example, ‘_threading’ is used as the module name to make it
     clear that the module being used is not necessarily the actual
     *note threading: ed. module.  Code can call functions and use
     classes in ‘_threading’ whether or not threads are supported,
     avoiding an *note if: 2f3. statement and making the code slightly
     clearer.  This module will not magically make multithreaded code
     run without threads; code that waits for another thread to return
     or to do something will simply hang forever.

   * The *note time: ee. module’s *note strptime(): 1474. function has
     long been an annoyance because it uses the platform C library’s
     *note strptime(): 1474. implementation, and different platforms
     sometimes have odd bugs.  Brett Cannon contributed a portable
     implementation that’s written in pure Python and should behave
     identically on all platforms.

   * The new *note timeit: ef. module helps measure how long snippets of
     Python code take to execute.  The ‘timeit.py’ file can be run
     directly from the command line, or the module’s *note Timer: 1510.
     class can be imported and used directly.  Here’s a short example
     that figures out whether it’s faster to convert an 8-bit string to
     Unicode by appending an empty Unicode string to it or by using the
     ‘unicode()’ function:

          import timeit

          timer1 = timeit.Timer('unicode("abc")')
          timer2 = timeit.Timer('"abc" + u""')

          # Run three trials
          print timer1.repeat(repeat=3, number=100000)
          print timer2.repeat(repeat=3, number=100000)

          # On my laptop this outputs:
          # [0.36831796169281006, 0.37441694736480713, 0.35304892063140869]
          # [0.17574405670166016, 0.18193507194519043, 0.17565798759460449]

   * The ‘Tix’ module has received various bug fixes and updates for the
     current version of the Tix package.

   * The ‘Tkinter’ module now works with a thread-enabled version of
     Tcl.  Tcl’s threading model requires that widgets only be accessed
     from the thread in which they’re created; accesses from another
     thread can cause Tcl to panic.  For certain Tcl interfaces,
     ‘Tkinter’ will now automatically avoid this when a widget is
     accessed from a different thread by marshalling a command, passing
     it to the correct thread, and waiting for the results.  Other
     interfaces can’t be handled automatically but ‘Tkinter’ will now
     raise an exception on such an access so that you can at least find
     out about the problem.  See
     ‘https://mail.python.org/pipermail/python-dev/2002-December/031107.html’
     for a more detailed explanation of this change.  (Implemented by
     Martin von Löwis.)

   * Calling Tcl methods through ‘_tkinter’ no longer returns only
     strings.  Instead, if Tcl returns other objects those objects are
     converted to their Python equivalent, if one exists, or wrapped
     with a ‘_tkinter.Tcl_Obj’ object if no Python equivalent exists.
     This behavior can be controlled through the ‘wantobjects()’ method
     of ‘tkapp’ objects.

     When using ‘_tkinter’ through the ‘Tkinter’ module (as most Tkinter
     applications will), this feature is always activated.  It should
     not cause compatibility problems, since Tkinter would always
     convert string results to Python types where possible.

     If any incompatibilities are found, the old behavior can be
     restored by setting the ‘wantobjects’ variable in the ‘Tkinter’
     module to false before creating the first ‘tkapp’ object.

          import Tkinter
          Tkinter.wantobjects = 0

     Any breakage caused by this change should be reported as a bug.

   * The ‘UserDict’ module has a new ‘DictMixin’ class which defines all
     dictionary methods for classes that already have a minimum mapping
     interface.  This greatly simplifies writing classes that need to be
     substitutable for dictionaries, such as the classes in the *note
     shelve: c3. module.

     Adding the mix-in as a superclass provides the full dictionary
     interface whenever the class defines *note __getitem__(): 283,
     *note __setitem__(): 130e, *note __delitem__(): 130f, and ‘keys()’.
     For example:

          >>> import UserDict
          >>> class SeqDict(UserDict.DictMixin):
          ...     """Dictionary lookalike implemented with lists."""
          ...     def __init__(self):
          ...         self.keylist = []
          ...         self.valuelist = []
          ...     def __getitem__(self, key):
          ...         try:
          ...             i = self.keylist.index(key)
          ...         except ValueError:
          ...             raise KeyError
          ...         return self.valuelist[i]
          ...     def __setitem__(self, key, value):
          ...         try:
          ...             i = self.keylist.index(key)
          ...             self.valuelist[i] = value
          ...         except ValueError:
          ...             self.keylist.append(key)
          ...             self.valuelist.append(value)
          ...     def __delitem__(self, key):
          ...         try:
          ...             i = self.keylist.index(key)
          ...         except ValueError:
          ...             raise KeyError
          ...         self.keylist.pop(i)
          ...         self.valuelist.pop(i)
          ...     def keys(self):
          ...         return list(self.keylist)
          ...
          >>> s = SeqDict()
          >>> dir(s)      # See that other dictionary methods are implemented
          ['__cmp__', '__contains__', '__delitem__', '__doc__', '__getitem__',
           '__init__', '__iter__', '__len__', '__module__', '__repr__',
           '__setitem__', 'clear', 'get', 'has_key', 'items', 'iteritems',
           'iterkeys', 'itervalues', 'keylist', 'keys', 'pop', 'popitem',
           'setdefault', 'update', 'valuelist', 'values']

     (Contributed by Raymond Hettinger.)

   * The DOM implementation in *note xml.dom.minidom: 122. can now
     generate XML output in a particular encoding by providing an
     optional encoding argument to the *note toxml(): aa2. and *note
     toprettyxml(): aa3. methods of DOM nodes.

   * The ‘xmlrpclib’ module now supports an XML-RPC extension for
     handling nil data values such as Python’s ‘None’.  Nil values are
     always supported on unmarshalling an XML-RPC response.  To generate
     requests containing ‘None’, you must supply a true value for the
     'allow_none' parameter when creating a ‘Marshaller’ instance.

   * The new ‘DocXMLRPCServer’ module allows writing self-documenting
     XML-RPC servers.  Run it in demo mode (as a program) to see it in
     action.  Pointing the web browser to the RPC server produces
     pydoc-style documentation; pointing xmlrpclib to the server allows
     invoking the actual methods.  (Contributed by Brian Quinlan.)

   * Support for internationalized domain names (RFCs 3454, 3490, 3491,
     and 3492) has been added.  The “idna” encoding can be used to
     convert between a Unicode domain name and the ASCII-compatible
     encoding (ACE) of that name.

          >{}>{}> u"www.Alliancefrançaise.nu".encode("idna")
          'www.xn--alliancefranaise-npb.nu'

     The *note socket: cc. module has also been extended to
     transparently convert Unicode hostnames to the ACE version before
     passing them to the C library.  Modules that deal with hostnames
     such as ‘httplib’ and *note ftplib: 5e.) also support Unicode host
     names; ‘httplib’ also sends HTTP ‘Host’ headers using the ACE
     version of the domain name.  *note urllib: 108. supports Unicode
     URLs with non-ASCII host names as long as the ‘path’ part of the
     URL is ASCII only.

     To implement this change, the *note stringprep: d4. module, the
     ‘mkstringprep’ tool and the ‘punycode’ encoding have been added.

* Menu:

* Date/Time Type::
* The optparse Module::

   ---------- Footnotes ----------

   (1) https://pybsddb.sourceforge.net


File: python.info,  Node: Date/Time Type,  Next: The optparse Module,  Up: New Improved and Deprecated Modules<4>

1.19.17.1 Date/Time Type
........................

Date and time types suitable for expressing timestamps were added as the
*note datetime: 30. module.  The types don’t support different calendars
or many fancy features, and just stick to the basics of representing
time.

The three primary types are: *note date: 1cd, representing a day, month,
and year; *note time: 1ce, consisting of hour, minute, and second; and
*note datetime: 1cc, which contains all the attributes of both *note
date: 1cd. and *note time: 1ce.  There’s also a *note timedelta: 9d7.
class representing differences between two points in time, and time zone
logic is implemented by classes inheriting from the abstract *note
tzinfo: 5de. class.

You can create instances of *note date: 1cd. and *note time: 1ce. by
either supplying keyword arguments to the appropriate constructor, e.g.
‘datetime.date(year=1972, month=10, day=15)’, or by using one of a
number of class methods.  For example, the *note today(): 1512. class
method returns the current local date.

Once created, instances of the date/time classes are all immutable.
There are a number of methods for producing formatted strings from
objects:

     >>> import datetime
     >>> now = datetime.datetime.now()
     >>> now.isoformat()
     '2002-12-30T21:27:03.994956'
     >>> now.ctime()  # Only available on date, datetime
     'Mon Dec 30 21:27:03 2002'
     >>> now.strftime('%Y %d %b')
     '2002 30 Dec'

The *note replace(): 1513. method allows modifying one or more fields of
a *note date: 1cd. or *note datetime: 1cc. instance, returning a new
instance:

     >>> d = datetime.datetime.now()
     >>> d
     datetime.datetime(2002, 12, 30, 22, 15, 38, 827738)
     >>> d.replace(year=2001, hour = 12)
     datetime.datetime(2001, 12, 30, 12, 15, 38, 827738)
     >>>

Instances can be compared, hashed, and converted to strings (the result
is the same as that of *note isoformat(): b42.).  *note date: 1cd. and
*note datetime: 1cc. instances can be subtracted from each other, and
added to *note timedelta: 9d7. instances.  The largest missing feature
is that there’s no standard library support for parsing strings and
getting back a *note date: 1cd. or *note datetime: 1cc.

For more information, refer to the module’s reference documentation.
(Contributed by Tim Peters.)


File: python.info,  Node: The optparse Module,  Prev: Date/Time Type,  Up: New Improved and Deprecated Modules<4>

1.19.17.2 The optparse Module
.............................

The *note getopt: 61. module provides simple parsing of command-line
arguments.  The new *note optparse: a0. module (originally named Optik)
provides more elaborate command-line parsing that follows the Unix
conventions, automatically creates the output for ‘--help’, and can
perform different actions for different options.

You start by creating an instance of *note OptionParser: 1515. and
telling it what your program’s options are.

     import sys
     from optparse import OptionParser

     op = OptionParser()
     op.add_option('-i', '--input',
                   action='store', type='string', dest='input',
                   help='set input filename')
     op.add_option('-l', '--length',
                   action='store', type='int', dest='length',
                   help='set maximum length of output')

Parsing a command line is then done by calling the *note parse_args():
1516. method.

     options, args = op.parse_args(sys.argv[1:])
     print options
     print args

This returns an object containing all of the option values, and a list
of strings containing the remaining arguments.

Invoking the script with the various arguments now works as you’d expect
it to.  Note that the length argument is automatically converted to an
integer.

     $ ./python opt.py -i data arg1
     <Values at 0x400cad4c: {'input': 'data', 'length': None}>
     ['arg1']
     $ ./python opt.py --input=data --length=4
     <Values at 0x400cad2c: {'input': 'data', 'length': 4}>
     []
     $

The help message is automatically generated for you:

     $ ./python opt.py --help
     usage: opt.py [options]

     options:
       -h, --help            show this help message and exit
       -iINPUT, --input=INPUT
                             set input filename
       -lLENGTH, --length=LENGTH
                             set maximum length of output
     $

See the module’s documentation for more details.

Optik was written by Greg Ward, with suggestions from the readers of the
Getopt SIG.


File: python.info,  Node: Pymalloc A Specialized Object Allocator,  Next: Mudanças a construções e API C<12>,  Prev: New Improved and Deprecated Modules<4>,  Up: What’s New in Python 2 3

1.19.18 Pymalloc: A Specialized Object Allocator
------------------------------------------------

Pymalloc, a specialized object allocator written by Vladimir Marangozov,
was a feature added to Python 2.1.  Pymalloc is intended to be faster
than the system ‘malloc()’ and to have less memory overhead for
allocation patterns typical of Python programs.  The allocator uses C’s
‘malloc()’ function to get large pools of memory and then fulfills
smaller memory requests from these pools.

In 2.1 and 2.2, pymalloc was an experimental feature and wasn’t enabled
by default; you had to explicitly enable it when compiling Python by
providing the ‘--with-pymalloc’ option to the ‘configure’ script.  In
2.3, pymalloc has had further enhancements and is now enabled by
default; you’ll have to supply ‘--without-pymalloc’ to disable it.

This change is transparent to code written in Python; however, pymalloc
may expose bugs in C extensions.  Authors of C extension modules should
test their code with pymalloc enabled, because some incorrect code may
cause core dumps at runtime.

There’s one particularly common error that causes problems.  There are a
number of memory allocation functions in Python’s C API that have
previously just been aliases for the C library’s ‘malloc()’ and
‘free()’, meaning that if you accidentally called mismatched functions
the error wouldn’t be noticeable.  When the object allocator is enabled,
these functions aren’t aliases of ‘malloc()’ and ‘free()’ any more, and
calling the wrong function to free memory may get you a core dump.  For
example, if memory was allocated using *note PyObject_Malloc(): c83, it
has to be freed using *note PyObject_Free(): c80, not ‘free()’.  A few
modules included with Python fell afoul of this and had to be fixed;
doubtless there are more third-party modules that will have the same
problem.

As part of this change, the confusing multiple interfaces for allocating
memory have been consolidated down into two API families.  Memory
allocated with one family must not be manipulated with functions from
the other family.  There is one family for allocating chunks of memory
and another family of functions specifically for allocating Python
objects.

   * To allocate and free an undistinguished chunk of memory use the
     “raw memory” family: *note PyMem_Malloc(): c81, *note
     PyMem_Realloc(): 106a, and *note PyMem_Free(): 148a.

   * The “object memory” family is the interface to the pymalloc
     facility described above and is biased towards a large number of
     “small” allocations: *note PyObject_Malloc(): c83, *note
     PyObject_Realloc(): 148b, and *note PyObject_Free(): c80.

   * To allocate and free Python objects, use the “object” family *note
     PyObject_New: 98c, *note PyObject_NewVar: 98d, and *note
     PyObject_Del(): 1519.

Thanks to lots of work by Tim Peters, pymalloc in 2.3 also provides
debugging features to catch memory overwrites and doubled frees in both
extension modules and in the interpreter itself.  To enable this
support, compile a debugging version of the Python interpreter by
running ‘configure’ with ‘--with-pydebug’.

To aid extension writers, a header file ‘Misc/pymemcompat.h’ is
distributed with the source to Python 2.3 that allows Python extensions
to use the 2.3 interfaces to memory allocation while compiling against
any version of Python since 1.5.2.  You would copy the file from
Python’s source distribution and bundle it with the source of your
extension.

Ver também
..........

‘https://hg.python.org/cpython/file/default/Objects/obmalloc.c’

     For the full details of the pymalloc implementation, see the
     comments at the top of the file ‘Objects/obmalloc.c’ in the Python
     source code.  The above link points to the file within the
     python.org SVN browser.


File: python.info,  Node: Mudanças a construções e API C<12>,  Next: Outras alterações e correções<2>,  Prev: Pymalloc A Specialized Object Allocator,  Up: What’s New in Python 2 3

1.19.19 Mudanças a construções e API C
--------------------------------------

As alterações no processo de construção do Python e na API C incluem:

   * The cycle detection implementation used by the garbage collection
     has proven to be stable, so it’s now been made mandatory.  You can
     no longer compile Python without it, and the ‘--with-cycle-gc’
     switch to ‘configure’ has been removed.

   * Python can now optionally be built as a shared library
     (‘libpython2.3.so’) by supplying ‘--enable-shared’ when running
     Python’s ‘configure’ script.  (Contributed by Ondrej Palkovsky.)

   * The ‘DL_EXPORT’ and ‘DL_IMPORT’ macros are now deprecated.
     Initialization functions for Python extension modules should now be
     declared using the new macro *note PyMODINIT_FUNC: 151b, while the
     Python core will generally use the ‘PyAPI_FUNC’ and ‘PyAPI_DATA’
     macros.

   * The interpreter can be compiled without any docstrings for the
     built-in functions and modules by supplying ‘--without-doc-strings’
     to the ‘configure’ script.  This makes the Python executable about
     10% smaller, but will also mean that you can’t get help for
     Python’s built-ins.  (Contributed by Gustavo Niemeyer.)

   * The ‘PyArg_NoArgs()’ macro is now deprecated, and code that uses it
     should be changed.  For Python 2.2 and later, the method definition
     table can specify the *note METH_NOARGS: 151c. flag, signalling
     that there are no arguments, and the argument checking can then be
     removed.  If compatibility with pre-2.2 versions of Python is
     important, the code could use ‘PyArg_ParseTuple(args, "")’ instead,
     but this will be slower than using *note METH_NOARGS: 151c.

   * *note PyArg_ParseTuple(): 571. accepts new format characters for
     various sizes of unsigned integers: ‘B’ for unsigned char, ‘H’ for
     unsigned short int, ‘I’ for unsigned int, and ‘K’ for unsigned long
     long.

   * A new function, ‘PyObject_DelItemString(mapping, char *key)’ was
     added as shorthand for ‘PyObject_DelItem(mapping,
     PyString_New(key))’.

   * File objects now manage their internal string buffer differently,
     increasing it exponentially when needed.  This results in the
     benchmark tests in ‘Lib/test/test_bufio.py’ speeding up
     considerably (from 57 seconds to 1.7 seconds, according to one
     measurement).

   * It’s now possible to define class and static methods for a C
     extension type by setting either the *note METH_CLASS: 151d. or
     *note METH_STATIC: 151e. flags in a method’s *note PyMethodDef:
     151f. structure.

   * Python now includes a copy of the Expat XML parser’s source code,
     removing any dependence on a system version or local installation
     of Expat.

   * If you dynamically allocate type objects in your extension, you
     should be aware of a change in the rules relating to the *note
     __module__: 374. and *note __name__: 14f3. attributes.  In summary,
     you will want to ensure the type’s dictionary contains a
     ‘'__module__'’ key; making the module name the part of the type
     name leading up to the final period will no longer have the desired
     effect.  For more detail, read the API reference documentation or
     the source.

* Menu:

* Port-Specific Changes: Port-Specific Changes<3>.


File: python.info,  Node: Port-Specific Changes<3>,  Up: Mudanças a construções e API C<12>

1.19.19.1 Port-Specific Changes
...............................

Support for a port to IBM’s OS/2 using the EMX runtime environment was
merged into the main Python source tree.  EMX is a POSIX emulation layer
over the OS/2 system APIs.  The Python port for EMX tries to support all
the POSIX-like capability exposed by the EMX runtime, and mostly
succeeds; ‘fork()’ and *note fcntl(): 59. are restricted by the
limitations of the underlying emulation layer.  The standard OS/2 port,
which uses IBM’s Visual Age compiler, also gained support for
case-sensitive import semantics as part of the integration of the EMX
port into CVS. (Contributed by Andrew MacIntyre.)

On MacOS, most toolbox modules have been weaklinked to improve backward
compatibility.  This means that modules will no longer fail to load if a
single routine is missing on the current OS version.  Instead calling
the missing routine will raise an exception.  (Contributed by Jack
Jansen.)

The RPM spec files, found in the ‘Misc/RPM/’ directory in the Python
source distribution, were updated for 2.3.  (Contributed by Sean
Reifschneider.)

Other new platforms now supported by Python include AtheOS
(‘http://www.atheos.cx/’), GNU/Hurd, and OpenVMS.


File: python.info,  Node: Outras alterações e correções<2>,  Next: Porting to Python 2 3,  Prev: Mudanças a construções e API C<12>,  Up: What’s New in Python 2 3

1.19.20 Outras alterações e correções
-------------------------------------

As usual, there were a bunch of other improvements and bugfixes
scattered throughout the source tree.  A search through the CVS change
logs finds there were 523 patches applied and 514 bugs fixed between
Python 2.2 and 2.3.  Both figures are likely to be underestimates.

Some of the more notable changes are:

   * If the *note PYTHONINSPECT: 1522. environment variable is set, the
     Python interpreter will enter the interactive prompt after running
     a Python program, as if Python had been invoked with the *note -i:
     1523. option.  The environment variable can be set before running
     the Python interpreter, or it can be set by the Python program as
     part of its execution.

   * The ‘regrtest.py’ script now provides a way to allow “all resources
     except 'foo'.” A resource name passed to the ‘-u’ option can now be
     prefixed with a hyphen (‘'-'’) to mean “remove this resource.” For
     example, the option ‘‘-uall,-bsddb’’ could be used to enable the
     use of all resources except ‘bsddb’.

   * The tools used to build the documentation now work under Cygwin as
     well as Unix.

   * The ‘SET_LINENO’ opcode has been removed.  Back in the mists of
     time, this opcode was needed to produce line numbers in tracebacks
     and support trace functions (for, e.g., *note pdb: a5.).  Since
     Python 1.5, the line numbers in tracebacks have been computed using
     a different mechanism that works with “python -O”.  For Python 2.3
     Michael Hudson implemented a similar scheme to determine when to
     call the trace function, removing the need for ‘SET_LINENO’
     entirely.

     It would be difficult to detect any resulting difference from
     Python code, apart from a slight speed up when Python is run
     without *note -O: ddd.

     C extensions that access the *note f_lineno: 7ad. field of frame
     objects should instead call ‘PyCode_Addr2Line(f->f_code,
     f->f_lasti)’.  This will have the added effect of making the code
     work as desired under “python -O” in earlier versions of Python.

     A nifty new feature is that trace functions can now assign to the
     *note f_lineno: 7ad. attribute of frame objects, changing the line
     that will be executed next.  A ‘jump’ command has been added to the
     *note pdb: a5. debugger taking advantage of this new feature.
     (Implemented by Richie Hindle.)


File: python.info,  Node: Porting to Python 2 3,  Next: Reconhecimentos<5>,  Prev: Outras alterações e correções<2>,  Up: What’s New in Python 2 3

1.19.21 Porting to Python 2.3
-----------------------------

This section lists previously described changes that may require changes
to your code:

   * *note yield: 9d5. is now always a keyword; if it’s used as a
     variable name in your code, a different name must be chosen.

   * For strings 'X' and 'Y', ‘X in Y’ now works if 'X' is more than one
     character long.

   * The *note int(): 257. type constructor will now return a long
     integer instead of raising an *note OverflowError: 885. when a
     string or floating-point number is too large to fit into an
     integer.

   * If you have Unicode strings that contain 8-bit characters, you must
     declare the file’s encoding (UTF-8, Latin-1, or whatever) by adding
     a comment to the top of the file.  See section *note PEP 263;
     Source Code Encodings: 14d2. for more information.

   * Calling Tcl methods through ‘_tkinter’ no longer returns only
     strings.  Instead, if Tcl returns other objects those objects are
     converted to their Python equivalent, if one exists, or wrapped
     with a ‘_tkinter.Tcl_Obj’ object if no Python equivalent exists.

   * Large octal and hex literals such as ‘0xffffffff’ now trigger a
     *note FutureWarning: 415.  Currently they’re stored as 32-bit
     numbers and result in a negative value, but in Python 2.4 they’ll
     become positive long integers.

     There are a few ways to fix this warning.  If you really need a
     positive number, just add an ‘L’ to the end of the literal.  If
     you’re trying to get a 32-bit integer with low bits set and have
     previously used an expression such as ‘~(1 << 31)’, it’s probably
     clearest to start with all bits set and clear the desired upper
     bits.  For example, to clear just the top bit (bit 31), you could
     write ‘0xffffffffL &~(1L<<31)’.

   * You can no longer disable assertions by assigning to ‘__debug__’.

   * The Distutils ‘setup()’ function has gained various new keyword
     arguments such as 'depends'.  Old versions of the Distutils will
     abort if passed unknown keywords.  A solution is to check for the
     presence of the new ‘get_distutil_options()’ function in your
     ‘setup.py’ and only uses the new keywords with a version of the
     Distutils that supports them:

          from distutils import core

          kw = {'sources': 'foo.c', ...}
          if hasattr(core, 'get_distutil_options'):
              kw['depends'] = ['foo.h']
          ext = Extension(**kw)

   * Using ‘None’ as a variable name will now result in a *note
     SyntaxWarning: 466. warning.

   * Names of extension types defined by the modules included with
     Python now contain the module and a ‘'.'’ in front of the type
     name.


File: python.info,  Node: Reconhecimentos<5>,  Prev: Porting to Python 2 3,  Up: What’s New in Python 2 3

1.19.22 Reconhecimentos
-----------------------

The author would like to thank the following people for offering
suggestions, corrections and assistance with various drafts of this
article: Jeff Bauer, Simon Brunning, Brett Cannon, Michael Chermside,
Andrew Dalke, Scott David Daniels, Fred L. Drake, Jr., David Fraser,
Kelly Gerber, Raymond Hettinger, Michael Hudson, Chris Lambert, Detlef
Lannert, Martin von Löwis, Andrew MacIntyre, Lalo Martins, Chad Netzer,
Gustavo Niemeyer, Neal Norwitz, Hans Nowak, Chris Reedy, Francesco
Ricciardi, Vinay Sajip, Neil Schemenauer, Roman Suzi, Jason Tishler,
Just van Rossum.


File: python.info,  Node: What’s New in Python 2 2,  Next: What’s New in Python 2 1,  Prev: What’s New in Python 2 3,  Up: O que há de novo no Python

1.20 What’s New in Python 2.2
=============================


Autor: A.M. Kuchling

* Menu:

* Introdução::
* PEPs 252 and 253; Type and Class Changes: PEPs 252 and 253 Type and Class Changes.
* PEP 234; Iterators: PEP 234 Iterators.
* PEP 255; Simple Generators: PEP 255 Simple Generators<2>.
* PEP 237; Unifying Long Integers and Integers: PEP 237 Unifying Long Integers and Integers<2>.
* PEP 238; Changing the Division Operator: PEP 238 Changing the Division Operator.
* Unicode Changes::
* PEP 227; Nested Scopes: PEP 227 Nested Scopes.
* Módulos Novos ou Aprimorados: Módulos Novos ou Aprimorados<3>.
* Interpreter Changes and Fixes::
* Outras alterações e correções: Outras alterações e correções<3>.
* Reconhecimentos: Reconhecimentos<6>.


File: python.info,  Node: Introdução,  Next: PEPs 252 and 253 Type and Class Changes,  Up: What’s New in Python 2 2

1.20.1 Introdução
-----------------

This article explains the new features in Python 2.2.2, released on
October 14, 2002.  Python 2.2.2 is a bugfix release of Python 2.2,
originally released on December 21, 2001.

Python 2.2 can be thought of as the “cleanup release”.  There are some
features such as generators and iterators that are completely new, but
most of the changes, significant and far-reaching though they may be,
are aimed at cleaning up irregularities and dark corners of the language
design.

This article doesn’t attempt to provide a complete specification of the
new features, but instead provides a convenient overview.  For full
details, you should refer to the documentation for Python 2.2, such as
the Python Library Reference(1) and the Python Reference Manual(2).  If
you want to understand the complete implementation and design rationale
for a change, refer to the PEP for a particular new feature.

   ---------- Footnotes ----------

   (1) https://docs.python.org/2.2/lib/lib.html

   (2) https://docs.python.org/2.2/ref/ref.html


File: python.info,  Node: PEPs 252 and 253 Type and Class Changes,  Next: PEP 234 Iterators,  Prev: Introdução,  Up: What’s New in Python 2 2

1.20.2 PEPs 252 and 253: Type and Class Changes
-----------------------------------------------

The largest and most far-reaching changes in Python 2.2 are to Python’s
model of objects and classes.  The changes should be backward
compatible, so it’s likely that your code will continue to run
unchanged, but the changes provide some amazing new capabilities.
Before beginning this, the longest and most complicated section of this
article, I’ll provide an overview of the changes and offer some
comments.

A long time ago I wrote a web page listing flaws in Python’s design.
One of the most significant flaws was that it’s impossible to subclass
Python types implemented in C. In particular, it’s not possible to
subclass built-in types, so you can’t just subclass, say, lists in order
to add a single useful method to them.  The ‘UserList’ module provides a
class that supports all of the methods of lists and that can be
subclassed further, but there’s lots of C code that expects a regular
Python list and won’t accept a *note UserList: 152c. instance.

Python 2.2 fixes this, and in the process adds some exciting new
capabilities.  A brief summary:

   * You can subclass built-in types such as lists and even integers,
     and your subclasses should work in every place that requires the
     original type.

   * It’s now possible to define static and class methods, in addition
     to the instance methods available in previous versions of Python.

   * It’s also possible to automatically call methods on accessing or
     setting an instance attribute by using a new mechanism called
     'properties'.  Many uses of *note __getattr__(): 4d3. can be
     rewritten to use properties instead, making the resulting code
     simpler and faster.  As a small side benefit, attributes can now
     have docstrings, too.

   * The list of legal attributes for an instance can be limited to a
     particular set using 'slots', making it possible to safeguard
     against typos and perhaps make more optimizations possible in
     future versions of Python.

Some users have voiced concern about all these changes.  Sure, they say,
the new features are neat and lend themselves to all sorts of tricks
that weren’t possible in previous versions of Python, but they also make
the language more complicated.  Some people have said that they’ve
always recommended Python for its simplicity, and feel that its
simplicity is being lost.

Personally, I think there’s no need to worry.  Many of the new features
are quite esoteric, and you can write a lot of Python code without ever
needed to be aware of them.  Writing a simple class is no more difficult
than it ever was, so you don’t need to bother learning or teaching them
unless they’re actually needed.  Some very complicated tasks that were
previously only possible from C will now be possible in pure Python, and
to my mind that’s all for the better.

I’m not going to attempt to cover every single corner case and small
change that were required to make the new features work.  Instead this
section will paint only the broad strokes.  See section *note Related
Links: 152d, “Related Links”, for further sources of information about
Python 2.2’s new object model.

* Menu:

* Old and New Classes::
* Descriptors::
* Multiple Inheritance; The Diamond Rule: Multiple Inheritance The Diamond Rule.
* Attribute Access::
* Related Links::


File: python.info,  Node: Old and New Classes,  Next: Descriptors,  Up: PEPs 252 and 253 Type and Class Changes

1.20.2.1 Old and New Classes
............................

First, you should know that Python 2.2 really has two kinds of classes:
classic or old-style classes, and new-style classes.  The old-style
class model is exactly the same as the class model in earlier versions
of Python.  All the new features described in this section apply only to
new-style classes.  This divergence isn’t intended to last forever;
eventually old-style classes will be dropped, possibly in Python 3.0.

So how do you define a new-style class?  You do it by subclassing an
existing new-style class.  Most of Python’s built-in types, such as
integers, lists, dictionaries, and even files, are new-style classes
now.  A new-style class named *note object: a96, the base class for all
built-in types, has also been added so if no built-in type is suitable,
you can just subclass *note object: a96.:

     class C(object):
         def __init__ (self):
             ...
         ...

This means that *note class: 131a. statements that don’t have any base
classes are always classic classes in Python 2.2.  (Actually you can
also change this by setting a module-level variable named
‘__metaclass__’ — see PEP 253(1) for the details — but it’s easier to
just subclass *note object: a96.)

The type objects for the built-in types are available as built-ins,
named using a clever trick.  Python has always had built-in functions
named *note int(): 257, *note float(): 2f7, and *note str(): 44c.  In
2.2, they aren’t functions any more, but type objects that behave as
factories when called.

     >>> int
     <type 'int'>
     >>> int('123')
     123

To make the set of types complete, new type objects such as *note
dict(): 256. and ‘file()’ have been added.  Here’s a more interesting
example, adding a ‘lock()’ method to file objects:

     class LockableFile(file):
         def lock (self, operation, length=0, start=0, whence=0):
             import fcntl
             return fcntl.lockf(self.fileno(), operation,
                                length, start, whence)

The now-obsolete ‘posixfile’ module contained a class that emulated all
of a file object’s methods and also added a ‘lock()’ method, but this
class couldn’t be passed to internal functions that expected a built-in
file, something which is possible with our new ‘LockableFile’.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0253/


File: python.info,  Node: Descriptors,  Next: Multiple Inheritance The Diamond Rule,  Prev: Old and New Classes,  Up: PEPs 252 and 253 Type and Class Changes

1.20.2.2 Descriptors
....................

In previous versions of Python, there was no consistent way to discover
what attributes and methods were supported by an object.  There were
some informal conventions, such as defining ‘__members__’ and
‘__methods__’ attributes that were lists of names, but often the author
of an extension type or a class wouldn’t bother to define them.  You
could fall back on inspecting the *note __dict__: 55b. of an object, but
when class inheritance or an arbitrary ‘__getattr__()’ hook were in use
this could still be inaccurate.

The one big idea underlying the new class model is that an API for
describing the attributes of an object using 'descriptors' has been
formalized.  Descriptors specify the value of an attribute, stating
whether it’s a method or a field.  With the descriptor API, static
methods and class methods become possible, as well as more exotic
constructs.

Attribute descriptors are objects that live inside class objects, and
have a few attributes of their own:

   * *note __name__: 109f. is the attribute’s name.

   * *note __doc__: 92e. is the attribute’s docstring.

   * ‘__get__(object)’ is a method that retrieves the attribute value
     from 'object'.

   * ‘__set__(object, value)’ sets the attribute on 'object' to 'value'.

   * ‘__delete__(object, value)’ deletes the 'value' attribute of
     'object'.

For example, when you write ‘obj.x’, the steps that Python actually
performs are:

     descriptor = obj.__class__.x
     descriptor.__get__(obj)

For methods, *note descriptor.__get__: 1530. returns a temporary object
that’s callable, and wraps up the instance and the method to be called
on it.  This is also why static methods and class methods are now
possible; they have descriptors that wrap up just the method, or the
method and the class.  As a brief explanation of these new kinds of
methods, static methods aren’t passed the instance, and therefore
resemble regular functions.  Class methods are passed the class of the
object, but not the object itself.  Static and class methods are defined
like this:

     class C(object):
         def f(arg1, arg2):
             ...
         f = staticmethod(f)

         def g(cls, arg1, arg2):
             ...
         g = classmethod(g)

The *note staticmethod(): 416. function takes the function ‘f()’, and
returns it wrapped up in a descriptor so it can be stored in the class
object.  You might expect there to be special syntax for creating such
methods (‘def static f’, ‘defstatic f()’, or something like that) but no
such syntax has been defined yet; that’s been left for future versions
of Python.

More new features, such as slots and properties, are also implemented as
new kinds of descriptors, and it’s not difficult to write a descriptor
class that does something novel.  For example, it would be possible to
write a descriptor class that made it possible to write Eiffel-style
preconditions and postconditions for a method.  A class that used this
feature might be defined like this:

     from eiffel import eiffelmethod

     class C(object):
         def f(self, arg1, arg2):
             # The actual function
             ...
         def pre_f(self):
             # Check preconditions
             ...
         def post_f(self):
             # Check postconditions
             ...

         f = eiffelmethod(f, pre_f, post_f)

Note that a person using the new ‘eiffelmethod()’ doesn’t have to
understand anything about descriptors.  This is why I think the new
features don’t increase the basic complexity of the language.  There
will be a few wizards who need to know about it in order to write
‘eiffelmethod()’ or the ZODB or whatever, but most users will just write
code on top of the resulting libraries and ignore the implementation
details.


File: python.info,  Node: Multiple Inheritance The Diamond Rule,  Next: Attribute Access,  Prev: Descriptors,  Up: PEPs 252 and 253 Type and Class Changes

1.20.2.3 Multiple Inheritance: The Diamond Rule
...............................................

Multiple inheritance has also been made more useful through changing the
rules under which names are resolved.  Consider this set of classes
(diagram taken from PEP 253(1) by Guido van Rossum):

           class A:
             ^ ^  def save(self): ...
            /   \
           /     \
          /       \
         /         \
     class B     class C:
         ^         ^  def save(self): ...
          \       /
           \     /
            \   /
             \ /
           class D

The lookup rule for classic classes is simple but not very smart; the
base classes are searched depth-first, going from left to right.  A
reference to ‘D.save()’ will search the classes ‘D’, ‘B’, and then ‘A’,
where ‘save()’ would be found and returned.  ‘C.save()’ would never be
found at all.  This is bad, because if ‘C’’s ‘save()’ method is saving
some internal state specific to ‘C’, not calling it will result in that
state never getting saved.

New-style classes follow a different algorithm that’s a bit more
complicated to explain, but does the right thing in this situation.
(Note that Python 2.3 changes this algorithm to one that produces the
same results in most cases, but produces more useful results for really
complicated inheritance graphs.)

  1. List all the base classes, following the classic lookup rule and
     include a class multiple times if it’s visited repeatedly.  In the
     above example, the list of visited classes is [‘D’, ‘B’, ‘A’, ‘C’,
     ‘A’].

  2. Scan the list for duplicated classes.  If any are found, remove all
     but one occurrence, leaving the 'last' one in the list.  In the
     above example, the list becomes [‘D’, ‘B’, ‘C’, ‘A’] after dropping
     duplicates.

Following this rule, referring to ‘D.save()’ will return ‘C.save()’,
which is the behaviour we’re after.  This lookup rule is the same as the
one followed by Common Lisp.  A new built-in function, *note super():
4db, provides a way to get at a class’s superclasses without having to
reimplement Python’s algorithm.  The most commonly used form will be
‘super(class, obj)’, which returns a bound superclass object (not the
actual class object).  This form will be used in methods to call a
method in the superclass; for example, ‘D’’s ‘save()’ method would look
like this:

     class D (B,C):
         def save (self):
             # Call superclass .save()
             super(D, self).save()
             # Save D's private information here
             ...

*note super(): 4db. can also return unbound superclass objects when
called as ‘super(class)’ or ‘super(class1, class2)’, but this probably
won’t often be useful.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0253/


File: python.info,  Node: Attribute Access,  Next: Related Links,  Prev: Multiple Inheritance The Diamond Rule,  Up: PEPs 252 and 253 Type and Class Changes

1.20.2.4 Attribute Access
.........................

A fair number of sophisticated Python classes define hooks for attribute
access using *note __getattr__(): 4d3.; most commonly this is done for
convenience, to make code more readable by automatically mapping an
attribute access such as ‘obj.parent’ into a method call such as
‘obj.get_parent’.  Python 2.2 adds some new ways of controlling
attribute access.

First, ‘__getattr__(attr_name)’ is still supported by new-style classes,
and nothing about it has changed.  As before, it will be called when an
attempt is made to access ‘obj.foo’ and no attribute named ‘foo’ is
found in the instance’s dictionary.

New-style classes also support a new method,
‘__getattribute__(attr_name)’.  The difference between the two methods
is that *note __getattribute__(): beb. is 'always' called whenever any
attribute is accessed, while the old *note __getattr__(): 4d3. is only
called if ‘foo’ isn’t found in the instance’s dictionary.

However, Python 2.2’s support for 'properties' will often be a simpler
way to trap attribute references.  Writing a ‘__getattr__()’ method is
complicated because to avoid recursion you can’t use regular attribute
accesses inside them, and instead have to mess around with the contents
of *note __dict__: 55b.  *note __getattr__(): 4d3. methods also end up
being called by Python when it checks for other methods such as *note
__repr__(): 61c. or ‘__coerce__()’, and so have to be written with this
in mind.  Finally, calling a function on every attribute access results
in a sizable performance loss.

*note property: 194. is a new built-in type that packages up three
functions that get, set, or delete an attribute, and a docstring.  For
example, if you want to define a ‘size’ attribute that’s computed, but
also settable, you could write:

     class C(object):
         def get_size (self):
             result = ... computation ...
             return result
         def set_size (self, size):
             ... compute something based on the size
             and set internal state appropriately ...

         # Define a property.  The 'delete this attribute'
         # method is defined as None, so the attribute
         # can't be deleted.
         size = property(get_size, set_size,
                         None,
                         "Storage size of this instance")

That is certainly clearer and easier to write than a pair of
‘__getattr__()’/‘__setattr__()’ methods that check for the ‘size’
attribute and handle it specially while retrieving all other attributes
from the instance’s *note __dict__: 55b.  Accesses to ‘size’ are also
the only ones which have to perform the work of calling a function, so
references to other attributes run at their usual speed.

Finally, it’s possible to constrain the list of attributes that can be
referenced on an object using the new *note __slots__: 1533. class
attribute.  Python objects are usually very dynamic; at any time it’s
possible to define a new attribute on an instance by just doing
‘obj.new_attr=1’.  A new-style class can define a class attribute named
*note __slots__: 1533. to limit the legal attributes to a particular set
of names.  An example will make this clear:

     >>> class C(object):
     ...     __slots__ = ('template', 'name')
     ...
     >>> obj = C()
     >>> print obj.template
     None
     >>> obj.template = 'Test'
     >>> print obj.template
     Test
     >>> obj.newattr = None
     Traceback (most recent call last):
       File "<stdin>", line 1, in ?
     AttributeError: 'C' object has no attribute 'newattr'

Note how you get an *note AttributeError: 34b. on the attempt to assign
to an attribute not listed in *note __slots__: 1533.


File: python.info,  Node: Related Links,  Prev: Attribute Access,  Up: PEPs 252 and 253 Type and Class Changes

1.20.2.5 Related Links
......................

This section has just been a quick overview of the new features, giving
enough of an explanation to start you programming, but many details have
been simplified or ignored.  Where should you go to get a more complete
picture?

The *note Guia de descritores: 1535. is a lengthy tutorial introduction
to the descriptor features, written by Guido van Rossum.  If my
description has whetted your appetite, go read this tutorial next,
because it goes into much more detail about the new features while still
remaining quite easy to read.

Next, there are two relevant PEPs, PEP 252(1) and PEP 253(2).  PEP
252(3) is titled “Making Types Look More Like Classes”, and covers the
descriptor API. PEP 253(4) is titled “Subtyping Built-in Types”, and
describes the changes to type objects that make it possible to subtype
built-in objects.  PEP 253(5) is the more complicated PEP of the two,
and at a few points the necessary explanations of types and meta-types
may cause your head to explode.  Both PEPs were written and implemented
by Guido van Rossum, with substantial assistance from the rest of the
Zope Corp.  team.

Finally, there’s the ultimate authority: the source code.  Most of the
machinery for the type handling is in ‘Objects/typeobject.c’, but you
should only resort to it after all other avenues have been exhausted,
including posting a question to python-list or python-dev.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0252/

   (2) https://peps.python.org/pep-0253/

   (3) https://peps.python.org/pep-0252/

   (4) https://peps.python.org/pep-0253/

   (5) https://peps.python.org/pep-0253/


File: python.info,  Node: PEP 234 Iterators,  Next: PEP 255 Simple Generators<2>,  Prev: PEPs 252 and 253 Type and Class Changes,  Up: What’s New in Python 2 2

1.20.3 PEP 234: Iterators
-------------------------

Another significant addition to 2.2 is an iteration interface at both
the C and Python levels.  Objects can define how they can be looped over
by callers.

In Python versions up to 2.1, the usual way to make ‘for item in obj’
work is to define a *note __getitem__(): 283. method that looks
something like this:

     def __getitem__(self, index):
         return <next item>

*note __getitem__(): 283. is more properly used to define an indexing
operation on an object so that you can write ‘obj[5]’ to retrieve the
sixth element.  It’s a bit misleading when you’re using this only to
support *note for: 2f2. loops.  Consider some file-like object that
wants to be looped over; the 'index' parameter is essentially
meaningless, as the class probably assumes that a series of *note
__getitem__(): 283. calls will be made with 'index' incrementing by one
each time.  In other words, the presence of the *note __getitem__():
283. method doesn’t mean that using ‘file[5]’ to randomly access the
sixth element will work, though it really should.

In Python 2.2, iteration can be implemented separately, and *note
__getitem__(): 283. methods can be limited to classes that really do
support random access.  The basic idea of iterators is simple.  A new
built-in function, ‘iter(obj)’ or ‘iter(C, sentinel)’, is used to get an
iterator.  ‘iter(obj)’ returns an iterator for the object 'obj', while
‘iter(C, sentinel)’ returns an iterator that will invoke the callable
object 'C' until it returns 'sentinel' to signal that the iterator is
done.

Python classes can define an ‘__iter__()’ method, which should create
and return a new iterator for the object; if the object is its own
iterator, this method can just return ‘self’.  In particular, iterators
will usually be their own iterators.  Extension types implemented in C
can implement a *note tp_iter: 1537. function in order to return an
iterator, and extension types that want to behave as iterators can
define a *note tp_iternext: 1538. function.

So, after all this, what do iterators actually do?  They have one
required method, *note next(): 7d9, which takes no arguments and returns
the next value.  When there are no more values to be returned, calling
*note next(): 7d9. should raise the *note StopIteration: c15. exception.

     >>> L = [1,2,3]
     >>> i = iter(L)
     >>> print i
     <iterator object at 0x8116870>
     >>> i.next()
     1
     >>> i.next()
     2
     >>> i.next()
     3
     >>> i.next()
     Traceback (most recent call last):
       File "<stdin>", line 1, in ?
     StopIteration
     >>>

In 2.2, Python’s *note for: 2f2. statement no longer expects a sequence;
it expects something for which *note iter(): 7d8. will return an
iterator.  For backward compatibility and convenience, an iterator is
automatically constructed for sequences that don’t implement
‘__iter__()’ or a *note tp_iter: 1537. slot, so ‘for i in [1,2,3]’ will
still work.  Wherever the Python interpreter loops over a sequence, it’s
been changed to use the iterator protocol.  This means you can do things
like this:

     >>> L = [1,2,3]
     >>> i = iter(L)
     >>> a,b,c = i
     >>> a,b,c
     (1, 2, 3)

Iterator support has been added to some of Python’s basic types.
Calling *note iter(): 7d8. on a dictionary will return an iterator which
loops over its keys:

     >>> m = {'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6,
     ...      'Jul': 7, 'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12}
     >>> for key in m: print key, m[key]
     ...
     Mar 3
     Feb 2
     Aug 8
     Sep 9
     May 5
     Jun 6
     Jul 7
     Jan 1
     Apr 4
     Nov 11
     Dec 12
     Oct 10

That’s just the default behaviour.  If you want to iterate over keys,
values, or key/value pairs, you can explicitly call the ‘iterkeys()’,
‘itervalues()’, or ‘iteritems()’ methods to get an appropriate iterator.
In a minor related change, the *note in: 2f4. operator now works on
dictionaries, so ‘key in dict’ is now equivalent to ‘dict.has_key(key)’.

Files also provide an iterator, which calls the *note readline(): ba.
method until there are no more lines in the file.  This means you can
now read each line of a file using code like this:

     for line in file:
         # do something for each line
         ...

Note that you can only go forward in an iterator; there’s no way to get
the previous element, reset the iterator, or make a copy of it.  An
iterator object could provide such additional capabilities, but the
iterator protocol only requires a *note next(): 7d9. method.

Ver também
..........

PEP 234(1) - Iterators

     Written by Ka-Ping Yee and GvR; implemented by the Python Labs
     crew, mostly by GvR and Tim Peters.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0234/


File: python.info,  Node: PEP 255 Simple Generators<2>,  Next: PEP 237 Unifying Long Integers and Integers<2>,  Prev: PEP 234 Iterators,  Up: What’s New in Python 2 2

1.20.4 PEP 255: Simple Generators
---------------------------------

Generators are another new feature, one that interacts with the
introduction of iterators.

You’re doubtless familiar with how function calls work in Python or C.
When you call a function, it gets a private namespace where its local
variables are created.  When the function reaches a *note return: 9d6.
statement, the local variables are destroyed and the resulting value is
returned to the caller.  A later call to the same function will get a
fresh new set of local variables.  But, what if the local variables
weren’t thrown away on exiting a function?  What if you could later
resume the function where it left off?  This is what generators provide;
they can be thought of as resumable functions.

Here’s the simplest example of a generator function:

     def generate_ints(N):
         for i in range(N):
             yield i

A new keyword, *note yield: 9d5, was introduced for generators.  Any
function containing a ‘yield’ statement is a generator function; this is
detected by Python’s bytecode compiler which compiles the function
specially as a result.  Because a new keyword was introduced, generators
must be explicitly enabled in a module by including a ‘from __future__
import generators’ statement near the top of the module’s source code.
In Python 2.3 this statement will become unnecessary.

When you call a generator function, it doesn’t return a single value;
instead it returns a generator object that supports the iterator
protocol.  On executing the *note yield: 9d5. statement, the generator
outputs the value of ‘i’, similar to a *note return: 9d6. statement.
The big difference between ‘yield’ and a ‘return’ statement is that on
reaching a ‘yield’ the generator’s state of execution is suspended and
local variables are preserved.  On the next call to the generator’s
‘next()’ method, the function will resume executing immediately after
the ‘yield’ statement.  (For complicated reasons, the ‘yield’ statement
isn’t allowed inside the ‘try’ block of a *note try: 6e9.…*note finally:
9d2. statement; read PEP 255(1) for a full explanation of the
interaction between ‘yield’ and exceptions.)

Here’s a sample usage of the ‘generate_ints()’ generator:

     >>> gen = generate_ints(3)
     >>> gen
     <generator object at 0x8117f90>
     >>> gen.next()
     0
     >>> gen.next()
     1
     >>> gen.next()
     2
     >>> gen.next()
     Traceback (most recent call last):
       File "<stdin>", line 1, in ?
       File "<stdin>", line 2, in generate_ints
     StopIteration

You could equally write ‘for i in generate_ints(5)’, or ‘a,b,c =
generate_ints(3)’.

Inside a generator function, the *note return: 9d6. statement can only
be used without a value, and signals the end of the procession of
values; afterwards the generator cannot return any further values.
‘return’ with a value, such as ‘return 5’, is a syntax error inside a
generator function.  The end of the generator’s results can also be
indicated by raising *note StopIteration: c15. manually, or by just
letting the flow of execution fall off the bottom of the function.

You could achieve the effect of generators manually by writing your own
class and storing all the local variables of the generator as instance
variables.  For example, returning a list of integers could be done by
setting ‘self.count’ to 0, and having the *note next(): 7d9. method
increment ‘self.count’ and return it.  However, for a moderately
complicated generator, writing a corresponding class would be much
messier.  ‘Lib/test/test_generators.py’ contains a number of more
interesting examples.  The simplest one implements an in-order traversal
of a tree using generators recursively.

     # A recursive generator that generates Tree leaves in in-order.
     def inorder(t):
         if t:
             for x in inorder(t.left):
                 yield x
             yield t.label
             for x in inorder(t.right):
                 yield x

Two other examples in ‘Lib/test/test_generators.py’ produce solutions
for the N-Queens problem (placing $N$ queens on an $NxN$ chess board so
that no queen threatens another) and the Knight’s Tour (a route that
takes a knight to every square of an $NxN$ chessboard without visiting
any square twice).

The idea of generators comes from other programming languages,
especially Icon (‘https://www2.cs.arizona.edu/icon/’), where the idea of
generators is central.  In Icon, every expression and function call
behaves like a generator.  One example from “An Overview of the Icon
Programming Language” at
‘https://www2.cs.arizona.edu/icon/docs/ipd266.htm’ gives an idea of what
this looks like:

     sentence := "Store it in the neighboring harbor"
     if (i := find("or", sentence)) > 5 then write(i)

In Icon the ‘find()’ function returns the indexes at which the substring
“or” is found: 3, 23, 33.  In the *note if: 2f3. statement, ‘i’ is first
assigned a value of 3, but 3 is less than 5, so the comparison fails,
and Icon retries it with the second value of 23.  23 is greater than 5,
so the comparison now succeeds, and the code prints the value 23 to the
screen.

Python doesn’t go nearly as far as Icon in adopting generators as a
central concept.  Generators are considered a new part of the core
Python language, but learning or using them isn’t compulsory; if they
don’t solve any problems that you have, feel free to ignore them.  One
novel feature of Python’s interface as compared to Icon’s is that a
generator’s state is represented as a concrete object (the iterator)
that can be passed around to other functions or stored in a data
structure.

Ver também
..........

PEP 255(2) - Simple Generators

     Written by Neil Schemenauer, Tim Peters, Magnus Lie Hetland.
     Implemented mostly by Neil Schemenauer and Tim Peters, with other
     fixes from the Python Labs crew.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0255/

   (2) https://peps.python.org/pep-0255/


File: python.info,  Node: PEP 237 Unifying Long Integers and Integers<2>,  Next: PEP 238 Changing the Division Operator,  Prev: PEP 255 Simple Generators<2>,  Up: What’s New in Python 2 2

1.20.5 PEP 237: Unifying Long Integers and Integers
---------------------------------------------------

In recent versions, the distinction between regular integers, which are
32-bit values on most machines, and long integers, which can be of
arbitrary size, was becoming an annoyance.  For example, on platforms
that support files larger than ‘2**32’ bytes, the ‘tell()’ method of
file objects has to return a long integer.  However, there were various
bits of Python that expected plain integers and would raise an error if
a long integer was provided instead.  For example, in Python 1.5, only
regular integers could be used as a slice index, and ‘'abc'[1L:]’ would
raise a *note TypeError: 2c3. exception with the message ‘slice index
must be int’.

Python 2.2 will shift values from short to long integers as required.
The ‘L’ suffix is no longer needed to indicate a long integer literal,
as now the compiler will choose the appropriate type.  (Using the ‘L’
suffix will be discouraged in future 2.x versions of Python, triggering
a warning in Python 2.4, and probably dropped in Python 3.0.)  Many
operations that used to raise an *note OverflowError: 885. will now
return a long integer as their result.  For example:

     >>> 1234567890123
     1234567890123L
     >>> 2 ** 64
     18446744073709551616L

In most cases, integers and long integers will now be treated
identically.  You can still distinguish them with the *note type(): d6b.
built-in function, but that’s rarely needed.

Ver também
..........

PEP 237(1) - Unifying Long Integers and Integers

     Written by Moshe Zadka and Guido van Rossum.  Implemented mostly by
     Guido van Rossum.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0237/


File: python.info,  Node: PEP 238 Changing the Division Operator,  Next: Unicode Changes,  Prev: PEP 237 Unifying Long Integers and Integers<2>,  Up: What’s New in Python 2 2

1.20.6 PEP 238: Changing the Division Operator
----------------------------------------------

The most controversial change in Python 2.2 heralds the start of an
effort to fix an old design flaw that’s been in Python from the
beginning.  Currently Python’s division operator, ‘/’, behaves like C’s
division operator when presented with two integer arguments: it returns
an integer result that’s truncated down when there would be a fractional
part.  For example, ‘3/2’ is 1, not 1.5, and ‘(-1)/2’ is -1, not -0.5.
This means that the results of division can vary unexpectedly depending
on the type of the two operands and because Python is dynamically typed,
it can be difficult to determine the possible types of the operands.

(The controversy is over whether this is 'really' a design flaw, and
whether it’s worth breaking existing code to fix this.  It’s caused
endless discussions on python-dev, and in July 2001 erupted into a storm
of acidly sarcastic postings on ‘comp.lang.python’.  I won’t argue for
either side here and will stick to describing what’s implemented in 2.2.
Read PEP 238(1) for a summary of arguments and counter-arguments.)

Because this change might break code, it’s being introduced very
gradually.  Python 2.2 begins the transition, but the switch won’t be
complete until Python 3.0.

First, I’ll borrow some terminology from PEP 238(2).  “True division” is
the division that most non-programmers are familiar with: 3/2 is 1.5,
1/4 is 0.25, and so forth.  “Floor division” is what Python’s ‘/’
operator currently does when given integer operands; the result is the
floor of the value returned by true division.  “Classic division” is the
current mixed behaviour of ‘/’; it returns the result of floor division
when the operands are integers, and returns the result of true division
when one of the operands is a floating-point number.

Here are the changes 2.2 introduces:

   * A new operator, ‘//’, is the floor division operator.  (Yes, we
     know it looks like C++’s comment symbol.)  ‘//’ 'always' performs
     floor division no matter what the types of its operands are, so ‘1
     // 2’ is 0 and ‘1.0 // 2.0’ is also 0.0.

     ‘//’ is always available in Python 2.2; you don’t need to enable it
     using a ‘__future__’ statement.

   * By including a ‘from __future__ import division’ in a module, the
     ‘/’ operator will be changed to return the result of true division,
     so ‘1/2’ is 0.5.  Without the ‘__future__’ statement, ‘/’ still
     means classic division.  The default meaning of ‘/’ will not change
     until Python 3.0.

   * Classes can define methods called *note __truediv__(): ebf. and
     *note __floordiv__(): 153c. to overload the two division operators.
     At the C level, there are also slots in the *note PyNumberMethods:
     1465. structure so extension types can define the two operators.

   * Python 2.2 supports some command-line arguments for testing whether
     code will work with the changed division semantics.  Running python
     with ‘-Q warn’ will cause a warning to be issued whenever division
     is applied to two integers.  You can use this to find code that’s
     affected by the change and fix it.  By default, Python 2.2 will
     simply perform classic division without a warning; the warning will
     be turned on by default in Python 2.3.

Ver também
..........

PEP 238(3) - Changing the Division Operator

     Written by Moshe Zadka and Guido van Rossum.  Implemented by Guido
     van Rossum..

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0238/

   (2) https://peps.python.org/pep-0238/

   (3) https://peps.python.org/pep-0238/


File: python.info,  Node: Unicode Changes,  Next: PEP 227 Nested Scopes,  Prev: PEP 238 Changing the Division Operator,  Up: What’s New in Python 2 2

1.20.7 Unicode Changes
----------------------

Python’s Unicode support has been enhanced a bit in 2.2.  Unicode
strings are usually stored as UCS-2, as 16-bit unsigned integers.
Python 2.2 can also be compiled to use UCS-4, 32-bit unsigned integers,
as its internal encoding by supplying ‘--enable-unicode=ucs4’ to the
configure script.  (It’s also possible to specify ‘--disable-unicode’ to
completely disable Unicode support.)

When built to use UCS-4 (a “wide Python”), the interpreter can natively
handle Unicode characters from U+000000 to U+110000, so the range of
legal values for the ‘unichr()’ function is expanded accordingly.  Using
an interpreter compiled to use UCS-2 (a “narrow Python”), values greater
than 65535 will still cause ‘unichr()’ to raise a *note ValueError: 202.
exception.  This is all described in PEP 261(1), “Support for ‘wide’
Unicode characters”; consult it for further details.

Another change is simpler to explain.  Since their introduction, Unicode
strings have supported an ‘encode()’ method to convert the string to a
selected encoding such as UTF-8 or Latin-1.  A symmetric
‘decode([*encoding*])’ method has been added to 8-bit strings (though
not to Unicode strings) in 2.2.  ‘decode()’ assumes that the string is
in the specified encoding and decodes it, returning whatever is returned
by the codec.

Using this new feature, codecs have been added for tasks not directly
related to Unicode.  For example, codecs have been added for
uu-encoding, MIME’s base64 encoding, and compression with the *note
zlib: 133. module:

     >>> s = """Here is a lengthy piece of redundant, overly verbose,
     ... and repetitive text.
     ... """
     >>> data = s.encode('zlib')
     >>> data
     'x\x9c\r\xc9\xc1\r\x80 \x10\x04\xc0?Ul...'
     >>> data.decode('zlib')
     'Here is a lengthy piece of redundant, overly verbose,\nand repetitive text.\n'
     >>> print s.encode('uu')
     begin 666 <data>
     M2&5R92!I<R!A(&QE;F=T:'D@<&EE8V4@;V8@<F5D=6YD86YT+"!O=F5R;'D@
     >=F5R8F]S92P*86YD(')E<&5T:71I=F4@=&5X="X*

     end
     >>> "sheesh".encode('rot-13')
     'furrfu'

To convert a class instance to Unicode, a ‘__unicode__()’ method can be
defined by a class, analogous to ‘__str__()’.

‘encode()’, ‘decode()’, and ‘__unicode__()’ were implemented by
Marc-André Lemburg.  The changes to support using UCS-4 internally were
implemented by Fredrik Lundh and Martin von Löwis.

Ver também
..........

PEP 261(2) - Support for ‘wide’ Unicode characters

     Written by Paul Prescod.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0261/

   (2) https://peps.python.org/pep-0261/


File: python.info,  Node: PEP 227 Nested Scopes,  Next: Módulos Novos ou Aprimorados<3>,  Prev: Unicode Changes,  Up: What’s New in Python 2 2

1.20.8 PEP 227: Nested Scopes
-----------------------------

In Python 2.1, statically nested scopes were added as an optional
feature, to be enabled by a ‘from __future__ import nested_scopes’
directive.  In 2.2 nested scopes no longer need to be specially enabled,
and are now always present.  The rest of this section is a copy of the
description of nested scopes from my “What’s New in Python 2.1”
document; if you read it when 2.1 came out, you can skip the rest of
this section.

The largest change introduced in Python 2.1, and made complete in 2.2,
is to Python’s scoping rules.  In Python 2.0, at any given time there
are at most three namespaces used to look up variable names: local,
module-level, and the built-in namespace.  This often surprised people
because it didn’t match their intuitive expectations.  For example, a
nested recursive function definition doesn’t work:

     def f():
         ...
         def g(value):
             ...
             return g(value-1) + 1
         ...

The function ‘g()’ will always raise a *note NameError: 43f. exception,
because the binding of the name ‘g’ isn’t in either its local namespace
or in the module-level namespace.  This isn’t much of a problem in
practice (how often do you recursively define interior functions like
this?), but this also made using the *note lambda: 12df. expression
clumsier, and this was a problem in practice.  In code which uses
‘lambda’ you can often find local variables being copied by passing them
as the default values of arguments.

     def find(self, name):
         "Return list of any entries equal to 'name'"
         L = filter(lambda x, name=name: x == name,
                    self.list_attribute)
         return L

The readability of Python code written in a strongly functional style
suffers greatly as a result.

The most significant change to Python 2.2 is that static scoping has
been added to the language to fix this problem.  As a first effect, the
‘name=name’ default argument is now unnecessary in the above example.
Put simply, when a given variable name is not assigned a value within a
function (by an assignment, or the *note def: 14a2, *note class: 131a,
or *note import: 5e2. statements), references to the variable will be
looked up in the local namespace of the enclosing scope.  A more
detailed explanation of the rules, and a dissection of the
implementation, can be found in the PEP.

This change may cause some compatibility problems for code where the
same variable name is used both at the module level and as a local
variable within a function that contains further function definitions.
This seems rather unlikely though, since such code would have been
pretty confusing to read in the first place.

One side effect of the change is that the ‘from module import *’ and
‘exec’ statements have been made illegal inside a function scope under
certain conditions.  The Python reference manual has said all along that
‘from module import *’ is only legal at the top level of a module, but
the CPython interpreter has never enforced this before.  As part of the
implementation of nested scopes, the compiler which turns Python source
into bytecodes has to generate different code to access variables in a
containing scope.  ‘from module import *’ and ‘exec’ make it impossible
for the compiler to figure this out, because they add names to the local
namespace that are unknowable at compile time.  Therefore, if a function
contains function definitions or *note lambda: 12df. expressions with
free variables, the compiler will flag this by raising a *note
SyntaxError: 18d. exception.

To make the preceding explanation a bit clearer, here’s an example:

     x = 1
     def f():
         # The next line is a syntax error
         exec 'x=2'
         def g():
             return x

Line 4 containing the ‘exec’ statement is a syntax error, since ‘exec’
would define a new local variable named ‘x’ whose value should be
accessed by ‘g()’.

This shouldn’t be much of a limitation, since ‘exec’ is rarely used in
most Python code (and when it is used, it’s often a sign of a poor
design anyway).

Ver também
..........

PEP 227(1) - Statically Nested Scopes

     Written and implemented by Jeremy Hylton.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0227/


File: python.info,  Node: Módulos Novos ou Aprimorados<3>,  Next: Interpreter Changes and Fixes,  Prev: PEP 227 Nested Scopes,  Up: What’s New in Python 2 2

1.20.9 Módulos Novos ou Aprimorados
-----------------------------------

   * The *note xmlrpclib: 12e. module was contributed to the standard
     library by Fredrik Lundh, providing support for writing XML-RPC
     clients.  XML-RPC is a simple remote procedure call protocol built
     on top of HTTP and XML. For example, the following snippet
     retrieves a list of RSS channels from the O’Reilly Network, and
     then lists the recent headlines for one channel:

          import xmlrpclib
          s = xmlrpclib.Server(
                'http://www.oreillynet.com/meerkat/xml-rpc/server.php')
          channels = s.meerkat.getChannels()
          # channels is a list of dictionaries, like this:
          # [{'id': 4, 'title': 'Freshmeat Daily News'}
          #  {'id': 190, 'title': '32Bits Online'},
          #  {'id': 4549, 'title': '3DGamers'}, ... ]

          # Get the items for one channel
          items = s.meerkat.getItems( {'channel': 4} )

          # 'items' is another list of dictionaries, like this:
          # [{'link': 'http://freshmeat.net/releases/52719/',
          #   'description': 'A utility which converts HTML to XSL FO.',
          #   'title': 'html2fo 0.3 (Default)'}, ... ]

     The *note SimpleXMLRPCServer: 12f. module makes it easy to create
     straightforward XML-RPC servers.  See
     ‘http://xmlrpc.scripting.com/’ for more information about XML-RPC.

   * The new *note hmac: 6a. module implements the HMAC algorithm
     described by RFC 2104(1).  (Contributed by Gerhard Häring.)

   * Several functions that originally returned lengthy tuples now
     return pseudo-sequences that still behave like tuples but also have
     mnemonic attributes such as ‘memberst_mtime’ or *note tm_year:
     1540.  The enhanced functions include *note stat(): 4a0, *note
     fstat(): db4, *note statvfs(): 113b, and *note fstatvfs(): db5. in
     the *note os: a1. module, and *note localtime(): 1541, *note
     gmtime(): 1200, and *note strptime(): 1474. in the *note time: ee.
     module.

     For example, to obtain a file’s size using the old tuples, you’d
     end up writing something like ‘file_size =
     os.stat(filename)[stat.ST_SIZE]’, but now this can be written more
     clearly as ‘file_size = os.stat(filename).st_size’.

     The original patch for this feature was contributed by Nick
     Mathewson.

   * The Python profiler has been extensively reworked and various
     errors in its output have been corrected.  (Contributed by Fred L.
     Drake, Jr.  and Tim Peters.)

   * The *note socket: cc. module can be compiled to support IPv6;
     specify the ‘--enable-ipv6’ option to Python’s configure script.
     (Contributed by Jun-ichiro “itojun” Hagino.)

   * Two new format characters were added to the *note struct: d5.
     module for 64-bit integers on platforms that support the C long
     long type.  ‘q’ is for a signed 64-bit integer, and ‘Q’ is for an
     unsigned one.  The value is returned in Python’s long integer type.
     (Contributed by Tim Peters.)

   * In the interpreter’s interactive mode, there’s a new built-in
     function *note help(): 8dd. that uses the *note pydoc: b5. module
     introduced in Python 2.1 to provide interactive help.
     ‘help(object)’ displays any available help text about 'object'.
     *note help(): 8dd. with no argument puts you in an online help
     utility, where you can enter the names of functions, classes, or
     modules to read their help text.  (Contributed by Guido van Rossum,
     using Ka-Ping Yee’s *note pydoc: b5. module.)

   * Various bugfixes and performance improvements have been made to the
     SRE engine underlying the *note re: b9. module.  For example, the
     *note re.sub(): 2a3. and *note re.split(): 2a2. functions have been
     rewritten in C. Another contributed patch speeds up certain Unicode
     character ranges by a factor of two, and a new *note finditer():
     1542. method that returns an iterator over all the non-overlapping
     matches in a given string.  (SRE is maintained by Fredrik Lundh.
     The BIGCHARSET patch was contributed by Martin von Löwis.)

   * The *note smtplib: ca. module now supports RFC 2487(2), “Secure
     SMTP over TLS”, so it’s now possible to encrypt the SMTP traffic
     between a Python program and the mail transport agent being handed
     a message.  *note smtplib: ca. also supports SMTP authentication.
     (Contributed by Gerhard Häring.)

   * The *note imaplib: 74. module, maintained by Piers Lauder, has
     support for several new extensions: the NAMESPACE extension defined
     in RFC 2342(3), SORT, GETACL and SETACL. (Contributed by Anthony
     Baxter and Michel Pelletier.)

   * The ‘rfc822’ module’s parsing of email addresses is now compliant
     with RFC 2822(4), an update to RFC 822(5).  (The module’s name is
     'not' going to be changed to ‘rfc2822’.)  A new package, *note
     email: 3b, has also been added for parsing and generating e-mail
     messages.  (Contributed by Barry Warsaw, and arising out of his
     work on Mailman.)

   * The *note difflib: 37. module now contains a new ‘Differ’ class for
     producing human-readable lists of changes (a “delta”) between two
     sequences of lines of text.  There are also two generator
     functions, ‘ndiff()’ and ‘restore()’, which respectively return a
     delta from two sequences, or one of the original sequences from a
     delta.  (Grunt work contributed by David Goodger, from ndiff.py
     code by Tim Peters who then did the generatorization.)

   * New constants ‘ascii_letters’, ‘ascii_lowercase’, and
     ‘ascii_uppercase’ were added to the *note string: d3. module.
     There were several modules in the standard library that used
     ‘string.letters’ to mean the ranges A-Za-z, but that assumption is
     incorrect when locales are in use, because ‘string.letters’ varies
     depending on the set of legal characters defined by the current
     locale.  The buggy modules have all been fixed to use
     ‘ascii_letters’ instead.  (Reported by an unknown person; fixed by
     Fred L. Drake, Jr.)

   * The *note mimetypes: 8f. module now makes it easier to use
     alternative MIME-type databases by the addition of a *note
     MimeTypes: 1543. class, which takes a list of filenames to be
     parsed.  (Contributed by Fred L. Drake, Jr.)

   * A *note Timer: 1198. class was added to the *note threading: ed.
     module that allows scheduling an activity to happen at some future
     time.  (Contributed by Itamar Shtull-Trauring.)

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2104.html

   (2) https://datatracker.ietf.org/doc/html/rfc2487.html

   (3) https://datatracker.ietf.org/doc/html/rfc2342.html

   (4) https://datatracker.ietf.org/doc/html/rfc2822.html

   (5) https://datatracker.ietf.org/doc/html/rfc822.html


File: python.info,  Node: Interpreter Changes and Fixes,  Next: Outras alterações e correções<3>,  Prev: Módulos Novos ou Aprimorados<3>,  Up: What’s New in Python 2 2

1.20.10 Interpreter Changes and Fixes
-------------------------------------

Some of the changes only affect people who deal with the Python
interpreter at the C level because they’re writing Python extension
modules, embedding the interpreter, or just hacking on the interpreter
itself.  If you only write Python code, none of the changes described
here will affect you very much.

   * Profiling and tracing functions can now be implemented in C, which
     can operate at much higher speeds than Python-based functions and
     should reduce the overhead of profiling and tracing.  This will be
     of interest to authors of development environments for Python.  Two
     new C functions were added to Python’s API, *note
     PyEval_SetProfile(): 1545. and *note PyEval_SetTrace(): 421.  The
     existing *note sys.setprofile(): 1546. and *note sys.settrace():
     1547. functions still exist, and have simply been changed to use
     the new C-level interface.  (Contributed by Fred L. Drake, Jr.)

   * Another low-level API, primarily of interest to implementers of
     Python debuggers and development tools, was added.  *note
     PyInterpreterState_Head(): 1548. and *note
     PyInterpreterState_Next(): 1549. let a caller walk through all the
     existing interpreter objects; *note
     PyInterpreterState_ThreadHead(): 154a. and *note
     PyThreadState_Next(): 154b. allow looping over all the thread
     states for a given interpreter.  (Contributed by David Beazley.)

   * The C-level interface to the garbage collector has been changed to
     make it easier to write extension types that support garbage
     collection and to debug misuses of the functions.  Various
     functions have slightly different semantics, so a bunch of
     functions had to be renamed.  Extensions that use the old API will
     still compile but will 'not' participate in garbage collection, so
     updating them for 2.2 should be considered fairly high priority.

     To upgrade an extension module to the new API, perform the
     following steps:

   * Rename ‘Py_TPFLAGS_GC’ to *note Py_TPFLAGS_HAVE_GC: 77d.

   * 
     Use *note PyObject_GC_New(): ab1. or *note PyObject_GC_NewVar(): ab2. to allocate

          objects, and *note PyObject_GC_Del(): 154c. to deallocate
          them.

   * Rename ‘PyObject_GC_Init()’ to *note PyObject_GC_Track(): 154d. and
     ‘PyObject_GC_Fini()’ to *note PyObject_GC_UnTrack(): 154e.

   * Remove ‘PyGC_HEAD_SIZE’ from object size calculations.

   * Remove calls to ‘PyObject_AS_GC()’ and ‘PyObject_FROM_GC()’.

   * A new ‘et’ format sequence was added to *note PyArg_ParseTuple():
     571.; ‘et’ takes both a parameter and an encoding name, and
     converts the parameter to the given encoding if the parameter turns
     out to be a Unicode string, or leaves it alone if it’s an 8-bit
     string, assuming it to already be in the desired encoding.  This
     differs from the ‘es’ format character, which assumes that 8-bit
     strings are in Python’s default ASCII encoding and converts them to
     the specified new encoding.  (Contributed by M.-A. Lemburg, and
     used for the MBCS support on Windows described in the following
     section.)

   * A different argument parsing function, *note PyArg_UnpackTuple():
     154f, has been added that’s simpler and presumably faster.  Instead
     of specifying a format string, the caller simply gives the minimum
     and maximum number of arguments expected, and a set of pointers to
     *note PyObject: 339.* variables that will be filled in with
     argument values.

   * Two new flags *note METH_NOARGS: 151c. and *note METH_O: 1550. are
     available in method definition tables to simplify implementation of
     methods with no arguments or a single untyped argument.  Calling
     such methods is more efficient than calling a corresponding method
     that uses *note METH_VARARGS: 1551.  Also, the old ‘METH_OLDARGS’
     style of writing C methods is now officially deprecated.

   * Two new wrapper functions, *note PyOS_snprintf(): 1552. and *note
     PyOS_vsnprintf(): 1553. were added to provide cross-platform
     implementations for the relatively new ‘snprintf()’ and
     ‘vsnprintf()’ C lib APIs.  In contrast to the standard ‘sprintf()’
     and ‘vsprintf()’ functions, the Python versions check the bounds of
     the buffer used to protect against buffer overruns.  (Contributed
     by M.-A. Lemburg.)

   * The *note _PyTuple_Resize(): 1554. function has lost an unused
     parameter, so now it takes 2 parameters instead of 3.  The third
     argument was never used, and can simply be discarded when porting
     code from earlier versions to Python 2.2.


File: python.info,  Node: Outras alterações e correções<3>,  Next: Reconhecimentos<6>,  Prev: Interpreter Changes and Fixes,  Up: What’s New in Python 2 2

1.20.11 Outras alterações e correções
-------------------------------------

As usual there were a bunch of other improvements and bugfixes scattered
throughout the source tree.  A search through the CVS change logs finds
there were 527 patches applied and 683 bugs fixed between Python 2.1 and
2.2; 2.2.1 applied 139 patches and fixed 143 bugs; 2.2.2 applied 106
patches and fixed 82 bugs.  These figures are likely to be
underestimates.

Some of the more notable changes are:

   * The code for the MacOS port for Python, maintained by Jack Jansen,
     is now kept in the main Python CVS tree, and many changes have been
     made to support MacOS X.

     The most significant change is the ability to build Python as a
     framework, enabled by supplying the ‘--enable-framework’ option to
     the configure script when compiling Python.  According to Jack
     Jansen, “This installs a self-contained Python installation plus
     the OS X framework “glue” into
     ‘/Library/Frameworks/Python.framework’ (or another location of
     choice).  For now there is little immediate added benefit to this
     (actually, there is the disadvantage that you have to change your
     PATH to be able to find Python), but it is the basis for creating a
     full-blown Python application, porting the MacPython IDE, possibly
     using Python as a standard OSA scripting language and much more.”

     Most of the MacPython toolbox modules, which interface to MacOS
     APIs such as windowing, QuickTime, scripting, etc.  have been
     ported to OS X, but they’ve been left commented out in ‘setup.py’.
     People who want to experiment with these modules can uncomment them
     manually.

   * Keyword arguments passed to built-in functions that don’t take them
     now cause a *note TypeError: 2c3. exception to be raised, with the
     message “'function' takes no keyword arguments”.

   * Weak references, added in Python 2.1 as an extension module, are
     now part of the core because they’re used in the implementation of
     new-style classes.  The *note ReferenceError: 1556. exception has
     therefore moved from the *note weakref: 114. module to become a
     built-in exception.

   * A new script, ‘Tools/scripts/cleanfuture.py’ by Tim Peters,
     automatically removes obsolete ‘__future__’ statements from Python
     source code.

   * An additional 'flags' argument has been added to the built-in
     function *note compile(): 192, so the behaviour of ‘__future__’
     statements can now be correctly observed in simulated shells, such
     as those presented by IDLE and other development environments.
     This is described in PEP 264(1).  (Contributed by Michael Hudson.)

   * The new license introduced with Python 1.6 wasn’t GPL-compatible.
     This is fixed by some minor textual changes to the 2.2 license, so
     it’s now legal to embed Python inside a GPLed program again.  Note
     that Python itself is not GPLed, but instead is under a license
     that’s essentially equivalent to the BSD license, same as it always
     was.  The license changes were also applied to the Python 2.0.1 and
     2.1.1 releases.

   * When presented with a Unicode filename on Windows, Python will now
     convert it to an MBCS encoded string, as used by the Microsoft file
     APIs.  As MBCS is explicitly used by the file APIs, Python’s choice
     of ASCII as the default encoding turns out to be an annoyance.  On
     Unix, the locale’s character set is used if
     ‘locale.nl_langinfo(CODESET)’ is available.  (Windows support was
     contributed by Mark Hammond with assistance from Marc-André
     Lemburg.  Unix support was added by Martin von Löwis.)

   * Large file support is now enabled on Windows.  (Contributed by Tim
     Peters.)

   * The ‘Tools/scripts/ftpmirror.py’ script now parses a ‘.netrc’ file,
     if you have one.  (Contributed by Mike Romberg.)

   * Some features of the object returned by the ‘xrange()’ function are
     now deprecated, and trigger warnings when they’re accessed; they’ll
     disappear in Python 2.3.  ‘xrange’ objects tried to pretend they
     were full sequence types by supporting slicing, sequence
     multiplication, and the *note in: 2f4. operator, but these features
     were rarely used and therefore buggy.  The ‘tolist()’ method and
     the ‘start’, ‘stop’, and ‘step’ attributes are also being
     deprecated.  At the C level, the fourth argument to the
     ‘PyRange_New()’ function, ‘repeat’, has also been deprecated.

   * There were a bunch of patches to the dictionary implementation,
     mostly to fix potential core dumps if a dictionary contains objects
     that sneakily changed their hash value, or mutated the dictionary
     they were contained in.  For a while python-dev fell into a gentle
     rhythm of Michael Hudson finding a case that dumped core, Tim
     Peters fixing the bug, Michael finding another case, and round and
     round it went.

   * On Windows, Python can now be compiled with Borland C thanks to a
     number of patches contributed by Stephen Hansen, though the result
     isn’t fully functional yet.  (But this 'is' progress…)

   * Another Windows enhancement: Wise Solutions generously offered
     PythonLabs use of their InstallerMaster 8.1 system.  Earlier
     PythonLabs Windows installers used Wise 5.0a, which was beginning
     to show its age.  (Packaged up by Tim Peters.)

   * Files ending in ‘.pyw’ can now be imported on Windows.  ‘.pyw’ is a
     Windows-only thing, used to indicate that a script needs to be run
     using PYTHONW.EXE instead of PYTHON.EXE in order to prevent a DOS
     console from popping up to display the output.  This patch makes it
     possible to import such scripts, in case they’re also usable as
     modules.  (Implemented by David Bolen.)

   * On platforms where Python uses the C ‘dlopen()’ function to load
     extension modules, it’s now possible to set the flags used by
     ‘dlopen()’ using the *note sys.getdlopenflags(): 1557. and *note
     sys.setdlopenflags(): 115e. functions.  (Contributed by Bram
     Stolk.)

   * The *note pow(): 9da. built-in function no longer supports 3
     arguments when floating-point numbers are supplied.  ‘pow(x, y, z)’
     returns ‘(x**y) % z’, but this is never useful for floating-point
     numbers, and the final result varies unpredictably depending on the
     platform.  A call such as ‘pow(2.0, 8.0, 7.0)’ will now raise a
     *note TypeError: 2c3. exception.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0264/


File: python.info,  Node: Reconhecimentos<6>,  Prev: Outras alterações e correções<3>,  Up: What’s New in Python 2 2

1.20.12 Reconhecimentos
-----------------------

The author would like to thank the following people for offering
suggestions, corrections and assistance with various drafts of this
article: Fred Bremmer, Keith Briggs, Andrew Dalke, Fred L. Drake, Jr.,
Carel Fellinger, David Goodger, Mark Hammond, Stephen Hansen, Michael
Hudson, Jack Jansen, Marc-André Lemburg, Martin von Löwis, Fredrik
Lundh, Michael McLay, Nick Mathewson, Paul Moore, Gustavo Niemeyer, Don
O’Donnell, Joonas Paalasma, Tim Peters, Jens Quade, Tom Reinhardt, Neil
Schemenauer, Guido van Rossum, Greg Ward, Edward Welbourne.


File: python.info,  Node: What’s New in Python 2 1,  Next: What’s New in Python 2 0,  Prev: What’s New in Python 2 2,  Up: O que há de novo no Python

1.21 What’s New in Python 2.1
=============================


Autor: A.M. Kuchling

* Menu:

* Introdução: Introdução<2>.
* PEP 227; Nested Scopes: PEP 227 Nested Scopes<2>.
* PEP 236; __future__ Directives: PEP 236 __future__ Directives.
* PEP 207; Rich Comparisons: PEP 207 Rich Comparisons.
* PEP 230; Warning Framework: PEP 230 Warning Framework.
* PEP 229; New Build System: PEP 229 New Build System.
* PEP 205; Weak References: PEP 205 Weak References.
* PEP 232; Function Attributes: PEP 232 Function Attributes.
* PEP 235; Importing Modules on Case-Insensitive Platforms: PEP 235 Importing Modules on Case-Insensitive Platforms.
* PEP 217; Interactive Display Hook: PEP 217 Interactive Display Hook.
* PEP 208; New Coercion Model: PEP 208 New Coercion Model.
* PEP 241; Metadata in Python Packages: PEP 241 Metadata in Python Packages.
* Módulos Novos ou Aprimorados: Módulos Novos ou Aprimorados<4>.
* Outras alterações e correções: Outras alterações e correções<4>.
* Reconhecimentos: Reconhecimentos<7>.


File: python.info,  Node: Introdução<2>,  Next: PEP 227 Nested Scopes<2>,  Up: What’s New in Python 2 1

1.21.1 Introdução
-----------------

This article explains the new features in Python 2.1.  While there
aren’t as many changes in 2.1 as there were in Python 2.0, there are
still some pleasant surprises in store.  2.1 is the first release to be
steered through the use of Python Enhancement Proposals, or PEPs, so
most of the sizable changes have accompanying PEPs that provide more
complete documentation and a design rationale for the change.  This
article doesn’t attempt to document the new features completely, but
simply provides an overview of the new features for Python programmers.
Refer to the Python 2.1 documentation, or to the specific PEP, for more
details about any new feature that particularly interests you.

One recent goal of the Python development team has been to accelerate
the pace of new releases, with a new release coming every 6 to 9 months.
2.1 is the first release to come out at this faster pace, with the first
alpha appearing in January, 3 months after the final version of 2.0 was
released.

The final release of Python 2.1 was made on April 17, 2001.


File: python.info,  Node: PEP 227 Nested Scopes<2>,  Next: PEP 236 __future__ Directives,  Prev: Introdução<2>,  Up: What’s New in Python 2 1

1.21.2 PEP 227: Nested Scopes
-----------------------------

The largest change in Python 2.1 is to Python’s scoping rules.  In
Python 2.0, at any given time there are at most three namespaces used to
look up variable names: local, module-level, and the built-in namespace.
This often surprised people because it didn’t match their intuitive
expectations.  For example, a nested recursive function definition
doesn’t work:

     def f():
         ...
         def g(value):
             ...
             return g(value-1) + 1
         ...

The function ‘g()’ will always raise a *note NameError: 43f. exception,
because the binding of the name ‘g’ isn’t in either its local namespace
or in the module-level namespace.  This isn’t much of a problem in
practice (how often do you recursively define interior functions like
this?), but this also made using the *note lambda: 12df. expression
clumsier, and this was a problem in practice.  In code which uses *note
lambda: 12df. you can often find local variables being copied by passing
them as the default values of arguments.

     def find(self, name):
         "Return list of any entries equal to 'name'"
         L = filter(lambda x, name=name: x == name,
                    self.list_attribute)
         return L

The readability of Python code written in a strongly functional style
suffers greatly as a result.

The most significant change to Python 2.1 is that static scoping has
been added to the language to fix this problem.  As a first effect, the
‘name=name’ default argument is now unnecessary in the above example.
Put simply, when a given variable name is not assigned a value within a
function (by an assignment, or the *note def: 14a2, *note class: 131a,
or *note import: 5e2. statements), references to the variable will be
looked up in the local namespace of the enclosing scope.  A more
detailed explanation of the rules, and a dissection of the
implementation, can be found in the PEP.

This change may cause some compatibility problems for code where the
same variable name is used both at the module level and as a local
variable within a function that contains further function definitions.
This seems rather unlikely though, since such code would have been
pretty confusing to read in the first place.

One side effect of the change is that the ‘from module import *’ and
‘exec’ statements have been made illegal inside a function scope under
certain conditions.  The Python reference manual has said all along that
‘from module import *’ is only legal at the top level of a module, but
the CPython interpreter has never enforced this before.  As part of the
implementation of nested scopes, the compiler which turns Python source
into bytecodes has to generate different code to access variables in a
containing scope.  ‘from module import *’ and ‘exec’ make it impossible
for the compiler to figure this out, because they add names to the local
namespace that are unknowable at compile time.  Therefore, if a function
contains function definitions or *note lambda: 12df. expressions with
free variables, the compiler will flag this by raising a *note
SyntaxError: 18d. exception.

To make the preceding explanation a bit clearer, here’s an example:

     x = 1
     def f():
         # The next line is a syntax error
         exec 'x=2'
         def g():
             return x

Line 4 containing the ‘exec’ statement is a syntax error, since ‘exec’
would define a new local variable named ‘x’ whose value should be
accessed by ‘g()’.

This shouldn’t be much of a limitation, since ‘exec’ is rarely used in
most Python code (and when it is used, it’s often a sign of a poor
design anyway).

Compatibility concerns have led to nested scopes being introduced
gradually; in Python 2.1, they aren’t enabled by default, but can be
turned on within a module by using a future statement as described in
PEP 236(1).  (See the following section for further discussion of PEP
236(2).)  In Python 2.2, nested scopes will become the default and there
will be no way to turn them off, but users will have had all of 2.1’s
lifetime to fix any breakage resulting from their introduction.

Ver também
..........

PEP 227(3) - Statically Nested Scopes

     Written and implemented by Jeremy Hylton.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0236/

   (2) https://peps.python.org/pep-0236/

   (3) https://peps.python.org/pep-0227/


File: python.info,  Node: PEP 236 __future__ Directives,  Next: PEP 207 Rich Comparisons,  Prev: PEP 227 Nested Scopes<2>,  Up: What’s New in Python 2 1

1.21.3 PEP 236: __future__ Directives
-------------------------------------

The reaction to nested scopes was widespread concern about the dangers
of breaking code with the 2.1 release, and it was strong enough to make
the Pythoneers take a more conservative approach.  This approach
consists of introducing a convention for enabling optional functionality
in release N that will become compulsory in release N+1.

The syntax uses a ‘from...import’ statement using the reserved module
name *note __future__: 0.  Nested scopes can be enabled by the following
statement:

     from __future__ import nested_scopes

While it looks like a normal *note import: 5e2. statement, it’s not;
there are strict rules on where such a future statement can be put.
They can only be at the top of a module, and must precede any Python
code or regular ‘import’ statements.  This is because such statements
can affect how the Python bytecode compiler parses code and generates
bytecode, so they must precede any statement that will result in
bytecodes being produced.

Ver também
..........

PEP 236(1) - Back to the *note __future__: 0.

     Written by Tim Peters, and primarily implemented by Jeremy Hylton.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0236/


File: python.info,  Node: PEP 207 Rich Comparisons,  Next: PEP 230 Warning Framework,  Prev: PEP 236 __future__ Directives,  Up: What’s New in Python 2 1

1.21.4 PEP 207: Rich Comparisons
--------------------------------

In earlier versions, Python’s support for implementing comparisons on
user-defined classes and extension types was quite simple.  Classes
could implement a ‘__cmp__()’ method that was given two instances of a
class, and could only return 0 if they were equal or +1 or -1 if they
weren’t; the method couldn’t raise an exception or return anything other
than a Boolean value.  Users of Numeric Python often found this model
too weak and restrictive, because in the number-crunching programs that
numeric Python is used for, it would be more useful to be able to
perform elementwise comparisons of two matrices, returning a matrix
containing the results of a given comparison for each element.  If the
two matrices are of different sizes, then the compare has to be able to
raise an exception to signal the error.

In Python 2.1, rich comparisons were added in order to support this
need.  Python classes can now individually overload each of the ‘<’,
‘<=’, ‘>’, ‘>=’, ‘==’, and ‘!=’ operations.  The new magic method names
are:

Operação        Nome do método
                
---------------------------------------------
                
‘<’             *note __lt__(): 12e2.
                
                
‘<=’            *note __le__(): 134f.
                
                
‘>’             *note __gt__(): 1350.
                
                
‘>=’            *note __ge__(): 1351.
                
                
‘==’            *note __eq__(): b0d.
                
                
‘!=’            *note __ne__(): 1560.
                

(The magic methods are named after the corresponding Fortran operators
‘.LT.’.  ‘.LE.’, &c.  Numeric programmers are almost certainly quite
familiar with these names and will find them easy to remember.)

Each of these magic methods is of the form ‘method(self, other)’, where
‘self’ will be the object on the left-hand side of the operator, while
‘other’ will be the object on the right-hand side.  For example, the
expression ‘A < B’ will cause ‘A.__lt__(B)’ to be called.

Each of these magic methods can return anything at all: a Boolean, a
matrix, a list, or any other Python object.  Alternatively they can
raise an exception if the comparison is impossible, inconsistent, or
otherwise meaningless.

The built-in ‘cmp(A,B)’ function can use the rich comparison machinery,
and now accepts an optional argument specifying which comparison
operation to use; this is given as one of the strings ‘"<"’, ‘"<="’,
‘">"’, ‘">="’, ‘"=="’, or ‘"!="’.  If called without the optional third
argument, ‘cmp()’ will only return -1, 0, or +1 as in previous versions
of Python; otherwise it will call the appropriate method and can return
any Python object.

There are also corresponding changes of interest to C programmers;
there’s a new slot ‘tp_richcmp’ in type objects and an API for
performing a given rich comparison.  I won’t cover the C API here, but
will refer you to PEP 207(1), or to 2.1’s C API documentation, for the
full list of related functions.

Ver também
..........

PEP 207(2) - Rich Comparisons

     Written by Guido van Rossum, heavily based on earlier work by David
     Ascher, and implemented by Guido van Rossum.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0207/

   (2) https://peps.python.org/pep-0207/


File: python.info,  Node: PEP 230 Warning Framework,  Next: PEP 229 New Build System,  Prev: PEP 207 Rich Comparisons,  Up: What’s New in Python 2 1

1.21.5 PEP 230: Warning Framework
---------------------------------

Over its 10 years of existence, Python has accumulated a certain number
of obsolete modules and features along the way.  It’s difficult to know
when a feature is safe to remove, since there’s no way of knowing how
much code uses it — perhaps no programs depend on the feature, or
perhaps many do.  To enable removing old features in a more structured
way, a warning framework was added.  When the Python developers want to
get rid of a feature, it will first trigger a warning in the next
version of Python.  The following Python version can then drop the
feature, and users will have had a full release cycle to remove uses of
the old feature.

Python 2.1 adds the warning framework to be used in this scheme.  It
adds a *note warnings: 112. module that provide functions to issue
warnings, and to filter out warnings that you don’t want to be
displayed.  Third-party modules can also use this framework to deprecate
old features that they no longer wish to support.

For example, in Python 2.1 the ‘regex’ module is deprecated, so
importing it causes a warning to be printed:

     >>> import regex
     __main__:1: DeprecationWarning: the regex module
              is deprecated; please use the re module
     >>>

Warnings can be issued by calling the *note warnings.warn(): 1562.
function:

     warnings.warn("feature X no longer supported")

The first parameter is the warning message; an additional optional
parameters can be used to specify a particular warning category.

Filters can be added to disable certain warnings; a regular expression
pattern can be applied to the message or to the module name in order to
suppress a warning.  For example, you may have a program that uses the
‘regex’ module and not want to spare the time to convert it to use the
*note re: b9. module right now.  The warning can be suppressed by
calling

     import warnings
     warnings.filterwarnings(action = 'ignore',
                             message='.*regex module is deprecated',
                             category=DeprecationWarning,
                             module = '__main__')

This adds a filter that will apply only to warnings of the class *note
DeprecationWarning: 1a5. triggered in the *note __main__: 1. module, and
applies a regular expression to only match the message about the ‘regex’
module being deprecated, and will cause such warnings to be ignored.
Warnings can also be printed only once, printed every time the offending
code is executed, or turned into exceptions that will cause the program
to stop (unless the exceptions are caught in the usual way, of course).

Functions were also added to Python’s C API for issuing warnings; refer
to PEP 230 or to Python’s API documentation for the details.

Ver também
..........

PEP 5(1) - Guidelines for Language Evolution

     Written by Paul Prescod, to specify procedures to be followed when
     removing old features from Python.  The policy described in this
     PEP hasn’t been officially adopted, but the eventual policy
     probably won’t be too different from Prescod’s proposal.

PEP 230(2) - Warning Framework

     Written and implemented by Guido van Rossum.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0005/

   (2) https://peps.python.org/pep-0230/


File: python.info,  Node: PEP 229 New Build System,  Next: PEP 205 Weak References,  Prev: PEP 230 Warning Framework,  Up: What’s New in Python 2 1

1.21.6 PEP 229: New Build System
--------------------------------

When compiling Python, the user had to go in and edit the
‘Modules/Setup’ file in order to enable various additional modules; the
default set is relatively small and limited to modules that compile on
most Unix platforms.  This means that on Unix platforms with many more
features, most notably Linux, Python installations often don’t contain
all useful modules they could.

Python 2.0 added the Distutils, a set of modules for distributing and
installing extensions.  In Python 2.1, the Distutils are used to compile
much of the standard library of extension modules, autodetecting which
ones are supported on the current machine.  It’s hoped that this will
make Python installations easier and more featureful.

Instead of having to edit the ‘Modules/Setup’ file in order to enable
modules, a ‘setup.py’ script in the top directory of the Python source
distribution is run at build time, and attempts to discover which
modules can be enabled by examining the modules and header files on the
system.  If a module is configured in ‘Modules/Setup’, the ‘setup.py’
script won’t attempt to compile that module and will defer to the
‘Modules/Setup’ file’s contents.  This provides a way to specific any
strange command-line flags or libraries that are required for a specific
platform.

In another far-reaching change to the build mechanism, Neil Schemenauer
restructured things so Python now uses a single makefile that isn’t
recursive, instead of makefiles in the top directory and in each of the
‘Python/’, ‘Parser/’, ‘Objects/’, and ‘Modules/’ subdirectories.  This
makes building Python faster and also makes hacking the Makefiles
clearer and simpler.

Ver também
..........

PEP 229(1) - Using Distutils to Build Python

     Written and implemented by A.M. Kuchling.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0229/


File: python.info,  Node: PEP 205 Weak References,  Next: PEP 232 Function Attributes,  Prev: PEP 229 New Build System,  Up: What’s New in Python 2 1

1.21.7 PEP 205: Weak References
-------------------------------

Weak references, available through the *note weakref: 114. module, are a
minor but useful new data type in the Python programmer’s toolbox.

Storing a reference to an object (say, in a dictionary or a list) has
the side effect of keeping that object alive forever.  There are a few
specific cases where this behaviour is undesirable, object caches being
the most common one, and another being circular references in data
structures such as trees.

For example, consider a memoizing function that caches the results of
another function ‘f(x)’ by storing the function’s argument and its
result in a dictionary:

     _cache = {}
     def memoize(x):
         if _cache.has_key(x):
             return _cache[x]

         retval = f(x)

         # Cache the returned object
         _cache[x] = retval

         return retval

This version works for simple things such as integers, but it has a side
effect; the ‘_cache’ dictionary holds a reference to the return values,
so they’ll never be deallocated until the Python process exits and
cleans up.  This isn’t very noticeable for integers, but if ‘f()’
returns an object, or a data structure that takes up a lot of memory,
this can be a problem.

Weak references provide a way to implement a cache that won’t keep
objects alive beyond their time.  If an object is only accessible
through weak references, the object will be deallocated and the weak
references will now indicate that the object it referred to no longer
exists.  A weak reference to an object 'obj' is created by calling ‘wr =
weakref.ref(obj)’.  The object being referred to is returned by calling
the weak reference as if it were a function: ‘wr()’.  It will return the
referenced object, or ‘None’ if the object no longer exists.

This makes it possible to write a ‘memoize()’ function whose cache
doesn’t keep objects alive, by storing weak references in the cache.

     _cache = {}
     def memoize(x):
         if _cache.has_key(x):
             obj = _cache[x]()
             # If weak reference object still exists,
             # return it
             if obj is not None: return obj

         retval = f(x)

         # Cache a weak reference
         _cache[x] = weakref.ref(retval)

         return retval

The *note weakref: 114. module also allows creating proxy objects which
behave like weak references — an object referenced only by proxy objects
is deallocated – but instead of requiring an explicit call to retrieve
the object, the proxy transparently forwards all operations to the
object as long as the object still exists.  If the object is
deallocated, attempting to use a proxy will cause a
‘weakref.ReferenceError’ exception to be raised.

     proxy = weakref.proxy(obj)
     proxy.attr   # Equivalent to obj.attr
     proxy.meth() # Equivalent to obj.meth()
     del obj
     proxy.attr   # raises weakref.ReferenceError

Ver também
..........

PEP 205(1) - Weak References

     Written and implemented by Fred L. Drake, Jr.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0205/


File: python.info,  Node: PEP 232 Function Attributes,  Next: PEP 235 Importing Modules on Case-Insensitive Platforms,  Prev: PEP 205 Weak References,  Up: What’s New in Python 2 1

1.21.8 PEP 232: Function Attributes
-----------------------------------

In Python 2.1, functions can now have arbitrary information attached to
them.  People were often using docstrings to hold information about
functions and methods, because the *note __doc__: 1219. attribute was
the only way of attaching any information to a function.  For example,
in the Zope web application server, functions are marked as safe for
public access by having a docstring, and in John Aycock’s SPARK parsing
framework, docstrings hold parts of the BNF grammar to be parsed.  This
overloading is unfortunate, since docstrings are really intended to hold
a function’s documentation; for example, it means you can’t properly
document functions intended for private use in Zope.

Arbitrary attributes can now be set and retrieved on functions using the
regular Python syntax:

     def f(): pass

     f.publish = 1
     f.secure = 1
     f.grammar = "A ::= B (C D)*"

The dictionary containing attributes can be accessed as the function’s
*note __dict__: 1315.  Unlike the *note __dict__: c78. attribute of
class instances, in functions you can actually assign a new dictionary
to *note __dict__: 1315, though the new value is restricted to a regular
Python dictionary; you 'can’t' be tricky and set it to a ‘UserDict’
instance, or any other random object that behaves like a mapping.

Ver também
..........

PEP 232(1) - Function Attributes

     Written and implemented by Barry Warsaw.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0232/


File: python.info,  Node: PEP 235 Importing Modules on Case-Insensitive Platforms,  Next: PEP 217 Interactive Display Hook,  Prev: PEP 232 Function Attributes,  Up: What’s New in Python 2 1

1.21.9 PEP 235: Importing Modules on Case-Insensitive Platforms
---------------------------------------------------------------

Some operating systems have filesystems that are case-insensitive, MacOS
and Windows being the primary examples; on these systems, it’s
impossible to distinguish the filenames ‘FILE.PY’ and ‘file.py’, even
though they do store the file’s name in its original case (they’re
case-preserving, too).

In Python 2.1, the *note import: 5e2. statement will work to simulate
case-sensitivity on case-insensitive platforms.  Python will now search
for the first case-sensitive match by default, raising an *note
ImportError: 419. if no such file is found, so ‘import file’ will not
import a module named ‘FILE.PY’.  Case-insensitive matching can be
requested by setting the *note PYTHONCASEOK: 963. environment variable
before starting the Python interpreter.


File: python.info,  Node: PEP 217 Interactive Display Hook,  Next: PEP 208 New Coercion Model,  Prev: PEP 235 Importing Modules on Case-Insensitive Platforms,  Up: What’s New in Python 2 1

1.21.10 PEP 217: Interactive Display Hook
-----------------------------------------

When using the Python interpreter interactively, the output of commands
is displayed using the built-in *note repr(): 800. function.  In Python
2.1, the variable *note sys.displayhook(): 1568. can be set to a
callable object which will be called instead of *note repr(): 800.  For
example, you can set it to a special pretty-printing function:

     >>> # Create a recursive data structure
     ... L = [1,2,3]
     >>> L.append(L)
     >>> L # Show Python's default output
     [1, 2, 3, [...]]
     >>> # Use pprint.pprint() as the display function
     ... import sys, pprint
     >>> sys.displayhook = pprint.pprint
     >>> L
     [1, 2, 3,  <Recursion on list with id=135143996>]
     >>>

Ver também
..........

PEP 217(1) - Display Hook for Interactive Use

     Written and implemented by Moshe Zadka.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0217/


File: python.info,  Node: PEP 208 New Coercion Model,  Next: PEP 241 Metadata in Python Packages,  Prev: PEP 217 Interactive Display Hook,  Up: What’s New in Python 2 1

1.21.11 PEP 208: New Coercion Model
-----------------------------------

How numeric coercion is done at the C level was significantly modified.
This will only affect the authors of C extensions to Python, allowing
them more flexibility in writing extension types that support numeric
operations.

Extension types can now set the type flag ‘Py_TPFLAGS_CHECKTYPES’ in
their ‘PyTypeObject’ structure to indicate that they support the new
coercion model.  In such extension types, the numeric slot functions can
no longer assume that they’ll be passed two arguments of the same type;
instead they may be passed two arguments of differing types, and can
then perform their own internal coercion.  If the slot function is
passed a type it can’t handle, it can indicate the failure by returning
a reference to the ‘Py_NotImplemented’ singleton value.  The numeric
functions of the other type will then be tried, and perhaps they can
handle the operation; if the other type also returns
‘Py_NotImplemented’, then a *note TypeError: 2c3. will be raised.
Numeric methods written in Python can also return ‘Py_NotImplemented’,
causing the interpreter to act as if the method did not exist (perhaps
raising a *note TypeError: 2c3, perhaps trying another object’s numeric
methods).

Ver também
..........

PEP 208(1) - Reworking the Coercion Model

     Written and implemented by Neil Schemenauer, heavily based upon
     earlier work by Marc-André Lemburg.  Read this to understand the
     fine points of how numeric operations will now be processed at the
     C level.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0208/


File: python.info,  Node: PEP 241 Metadata in Python Packages,  Next: Módulos Novos ou Aprimorados<4>,  Prev: PEP 208 New Coercion Model,  Up: What’s New in Python 2 1

1.21.12 PEP 241: Metadata in Python Packages
--------------------------------------------

A common complaint from Python users is that there’s no single catalog
of all the Python modules in existence.  T. Middleton’s Vaults of
Parnassus at ‘www.vex.net/parnassus/’ (retired in February 2009,
available in the Internet Archive Wayback Machine(1)) was the largest
catalog of Python modules, but registering software at the Vaults is
optional, and many people did not bother.

As a first small step toward fixing the problem, Python software
packaged using the Distutils ‘sdist’ command will include a file named
‘PKG-INFO’ containing information about the package such as its name,
version, and author (metadata, in cataloguing terminology).  PEP 241(2)
contains the full list of fields that can be present in the ‘PKG-INFO’
file.  As people began to package their software using Python 2.1, more
and more packages will include metadata, making it possible to build
automated cataloguing systems and experiment with them.  With the result
experience, perhaps it’ll be possible to design a really good catalog
and then build support for it into Python 2.2.  For example, the
Distutils ‘sdist’ and ‘bdist_*’ commands could support an ‘upload’
option that would automatically upload your package to a catalog server.

You can start creating packages containing ‘PKG-INFO’ even if you’re not
using Python 2.1, since a new release of the Distutils will be made for
users of earlier Python versions.  Version 1.0.2 of the Distutils
includes the changes described in PEP 241(3), as well as various
bugfixes and enhancements.  It will be available from the Distutils SIG
at ‘https://www.python.org/community/sigs/current/distutils-sig/’.

Ver também
..........

PEP 241(4) - Metadata for Python Software Packages

     Written and implemented by A.M. Kuchling.

PEP 243(5) - Module Repository Upload Mechanism

     Written by Sean Reifschneider, this draft PEP describes a proposed
     mechanism for uploading Python packages to a central server.

   ---------- Footnotes ----------

   (1) 
https://web.archive.org/web/20090130140102/http://www.vex.net/parnassus/

   (2) https://peps.python.org/pep-0241/

   (3) https://peps.python.org/pep-0241/

   (4) https://peps.python.org/pep-0241/

   (5) https://peps.python.org/pep-0243/


File: python.info,  Node: Módulos Novos ou Aprimorados<4>,  Next: Outras alterações e correções<4>,  Prev: PEP 241 Metadata in Python Packages,  Up: What’s New in Python 2 1

1.21.13 Módulos Novos ou Aprimorados
------------------------------------

   * Ka-Ping Yee contributed two new modules: ‘inspect.py’, a module for
     getting information about live Python code, and ‘pydoc.py’, a
     module for interactively converting docstrings to HTML or text.  As
     a bonus, ‘Tools/scripts/pydoc’, which is now automatically
     installed, uses ‘pydoc.py’ to display documentation given a Python
     module, package, or class name.  For example, ‘pydoc xml.dom’
     displays the following:

          Python Library Documentation: package xml.dom in xml

          NAME
              xml.dom - W3C Document Object Model implementation for Python.

          FILE
              /usr/local/lib/python2.1/xml/dom/__init__.pyc

          DESCRIPTION
              The Python mapping of the Document Object Model is documented in the
              Python Library Reference in the section on the xml.dom package.

              This package contains the following modules:
                ...

     ‘pydoc’ also includes a Tk-based interactive help browser.  ‘pydoc’
     quickly becomes addictive; try it out!

   * Two different modules for unit testing were added to the standard
     library.  The *note doctest: 3a. module, contributed by Tim Peters,
     provides a testing framework based on running embedded examples in
     docstrings and comparing the results against the expected output.
     PyUnit, contributed by Steve Purcell, is a unit testing framework
     inspired by JUnit, which was in turn an adaptation of Kent Beck’s
     Smalltalk testing framework.  See ‘https://pyunit.sourceforge.net/’
     for more information about PyUnit.

   * The *note difflib: 37. module contains a class, *note
     SequenceMatcher: 104f, which compares two sequences and computes
     the changes required to transform one sequence into the other.  For
     example, this module can be used to write a tool similar to the
     Unix ‘diff’ program, and in fact the sample program
     ‘Tools/scripts/ndiff.py’ demonstrates how to write such a script.

   * *note curses.panel: 2d, a wrapper for the panel library, part of
     ncurses and of SYSV curses, was contributed by Thomas Gellekum.
     The panel library provides windows with the additional feature of
     depth.  Windows can be moved higher or lower in the depth ordering,
     and the panel library figures out where panels overlap and which
     sections are visible.

   * The PyXML package has gone through a few releases since Python 2.0,
     and Python 2.1 includes an updated version of the *note xml: 120.
     package.  Some of the noteworthy changes include support for Expat
     1.2 and later versions, the ability for Expat parsers to handle
     files in any encoding supported by Python, and various bugfixes for
     SAX, DOM, and the ‘minidom’ module.

   * Ping also contributed another hook for handling uncaught
     exceptions.  *note sys.excepthook(): 80e. can be set to a callable
     object.  When an exception isn’t caught by any *note try:
     6e9.…*note except: 18b. blocks, the exception will be passed to
     *note sys.excepthook(): 80e, which can then do whatever it likes.
     At the Ninth Python Conference, Ping demonstrated an application
     for this hook: printing an extended traceback that not only lists
     the stack frames, but also lists the function arguments and the
     local variables for each frame.

   * Various functions in the *note time: ee. module, such as *note
     asctime(): 1227. and *note localtime(): 1541, require a
     floating-point argument containing the time in seconds since the
     epoch.  The most common use of these functions is to work with the
     current time, so the floating-point argument has been made
     optional; when a value isn’t provided, the current time will be
     used.  For example, log file entries usually need a string
     containing the current time; in Python 2.1, ‘time.asctime()’ can be
     used, instead of the lengthier
     ‘time.asctime(time.localtime(time.time()))’ that was previously
     required.

     This change was proposed and implemented by Thomas Wouters.

   * The *note ftplib: 5e. module now defaults to retrieving files in
     passive mode, because passive mode is more likely to work from
     behind a firewall.  This request came from the Debian bug tracking
     system, since other Debian packages use *note ftplib: 5e. to
     retrieve files and then don’t work from behind a firewall.  It’s
     deemed unlikely that this will cause problems for anyone, because
     Netscape defaults to passive mode and few people complain, but if
     passive mode is unsuitable for your application or network setup,
     call ‘set_pasv(0)’ on FTP objects to disable passive mode.

   * Support for raw socket access has been added to the *note socket:
     cc. module, contributed by Grant Edwards.

   * The *note pstats: b0. module now contains a simple interactive
     statistics browser for displaying timing profiles for Python
     programs, invoked when the module is run as a script.  Contributed
     by Eric S. Raymond.

   * A new implementation-dependent function, ‘sys._getframe([depth])’,
     has been added to return a given frame object from the current call
     stack.  *note sys._getframe(): 6e1. returns the frame at the top of
     the call stack; if the optional integer argument 'depth' is
     supplied, the function returns the frame that is 'depth' calls
     below the top of the stack.  For example, ‘sys._getframe(1)’
     returns the caller’s frame object.

     This function is only present in CPython, not in Jython or the .NET
     implementation.  Use it for debugging, and resist the temptation to
     put it into production code.


File: python.info,  Node: Outras alterações e correções<4>,  Next: Reconhecimentos<7>,  Prev: Módulos Novos ou Aprimorados<4>,  Up: What’s New in Python 2 1

1.21.14 Outras alterações e correções
-------------------------------------

There were relatively few smaller changes made in Python 2.1 due to the
shorter release cycle.  A search through the CVS change logs turns up
117 patches applied, and 136 bugs fixed; both figures are likely to be
underestimates.  Some of the more notable changes are:

   * A specialized object allocator is now optionally available, that
     should be faster than the system ‘malloc()’ and have less memory
     overhead.  The allocator uses C’s ‘malloc()’ function to get large
     pools of memory, and then fulfills smaller memory requests from
     these pools.  It can be enabled by providing the ‘--with-pymalloc’
     option to the ‘configure’ script; see ‘Objects/obmalloc.c’ for the
     implementation details.

     Authors of C extension modules should test their code with the
     object allocator enabled, because some incorrect code may break,
     causing core dumps at runtime.  There are a bunch of memory
     allocation functions in Python’s C API that have previously been
     just aliases for the C library’s ‘malloc()’ and ‘free()’, meaning
     that if you accidentally called mismatched functions, the error
     wouldn’t be noticeable.  When the object allocator is enabled,
     these functions aren’t aliases of ‘malloc()’ and ‘free()’ any more,
     and calling the wrong function to free memory will get you a core
     dump.  For example, if memory was allocated using *note PyMem_New:
     156d, it has to be freed using *note PyMem_Del(): 156e, not
     ‘free()’.  A few modules included with Python fell afoul of this
     and had to be fixed; doubtless there are more third-party modules
     that will have the same problem.

     The object allocator was contributed by Vladimir Marangozov.

   * The speed of line-oriented file I/O has been improved because
     people often complain about its lack of speed, and because it’s
     often been used as a naïve benchmark.  The *note readline(): ba.
     method of file objects has therefore been rewritten to be much
     faster.  The exact amount of the speedup will vary from platform to
     platform depending on how slow the C library’s ‘getc()’ was, but is
     around 66%, and potentially much faster on some particular
     operating systems.  Tim Peters did much of the benchmarking and
     coding for this change, motivated by a discussion in
     comp.lang.python.

     A new module and method for file objects was also added,
     contributed by Jeff Epler.  The new method, ‘xreadlines()’, is
     similar to the existing ‘xrange()’ built-in.  ‘xreadlines()’
     returns an opaque sequence object that only supports being iterated
     over, reading a line on every iteration but not reading the entire
     file into memory as the existing ‘readlines()’ method does.  You’d
     use it like this:

          for line in sys.stdin.xreadlines():
              # ... do something for each line ...
              ...

     For a fuller discussion of the line I/O changes, see the python-dev
     summary for January 1–15, 2001 at
     ‘https://mail.python.org/pipermail/python-dev/2001-January/’.

   * A new method, *note popitem(): 156f, was added to dictionaries to
     enable destructively iterating through the contents of a
     dictionary; this can be faster for large dictionaries because
     there’s no need to construct a list containing all the keys or
     values.  ‘D.popitem()’ removes a random ‘(key, value)’ pair from
     the dictionary ‘D’ and returns it as a 2-tuple.  This was
     implemented mostly by Tim Peters and Guido van Rossum, after a
     suggestion and preliminary patch by Moshe Zadka.

   * Modules can now control which names are imported when ‘from module
     import *’ is used, by defining an ‘__all__’ attribute containing a
     list of names that will be imported.  One common complaint is that
     if the module imports other modules such as *note sys: d9. or *note
     string: d3, ‘from module import *’ will add them to the importing
     module’s namespace.  To fix this, simply list the public names in
     ‘__all__’:

          # List public names
          __all__ = ['Database', 'open']

     A stricter version of this patch was first suggested and
     implemented by Ben Wolfson, but after some python-dev discussion, a
     weaker final version was checked in.

   * Applying *note repr(): 800. to strings previously used octal
     escapes for non-printable characters; for example, a newline was
     ‘'\012'’.  This was a vestigial trace of Python’s C ancestry, but
     today octal is of very little practical use.  Ka-Ping Yee suggested
     using hex escapes instead of octal ones, and using the ‘\n’, ‘\t’,
     ‘\r’ escapes for the appropriate characters, and implemented this
     new formatting.

   * Syntax errors detected at compile-time can now raise exceptions
     containing the filename and line number of the error, a pleasant
     side effect of the compiler reorganization done by Jeremy Hylton.

   * C extensions which import other modules have been changed to use
     *note PyImport_ImportModule(): 3be, which means that they will use
     any import hooks that have been installed.  This is also encouraged
     for third-party extensions that need to import some other module
     from C code.

   * The size of the Unicode character database was shrunk by another
     340K thanks to Fredrik Lundh.

   * Some new ports were contributed: MacOS X (by Steven Majewski),
     Cygwin (by Jason Tishler); RISCOS (by Dietmar Schwertberger);
     Unixware 7 (by Billy G. Allie).

And there’s the usual list of minor bugfixes, minor memory leaks,
docstring edits, and other tweaks, too lengthy to be worth itemizing;
see the CVS logs for the full details if you want them.


File: python.info,  Node: Reconhecimentos<7>,  Prev: Outras alterações e correções<4>,  Up: What’s New in Python 2 1

1.21.15 Reconhecimentos
-----------------------

The author would like to thank the following people for offering
suggestions on various drafts of this article: Graeme Cross, David
Goodger, Jay Graves, Michael Hudson, Marc-André Lemburg, Fredrik Lundh,
Neil Schemenauer, Thomas Wouters.


File: python.info,  Node: What’s New in Python 2 0,  Next: Changelog,  Prev: What’s New in Python 2 1,  Up: O que há de novo no Python

1.22 What’s New in Python 2.0
=============================


Autor: A.M. Kuchling and Moshe Zadka

* Menu:

* Introdução: Introdução<3>.
* What About Python 1.6?: What About Python 1 6?.
* New Development Process::
* Unicode: Unicode<2>.
* Compreensões de lista::
* Augmented Assignment::
* String Methods::
* Garbage Collection of Cycles::
* Other Core Changes::
* Porting to 2.0: Porting to 2 0.
* Extending/Embedding Changes::
* Distutils; Making Modules Easy to Install: Distutils Making Modules Easy to Install.
* XML Modules::
* Module changes::
* Novos módulos: Novos módulos<12>.
* IDLE Improvements::
* Deleted and Deprecated Modules::
* Reconhecimentos: Reconhecimentos<8>.


File: python.info,  Node: Introdução<3>,  Next: What About Python 1 6?,  Up: What’s New in Python 2 0

1.22.1 Introdução
-----------------

A new release of Python, version 2.0, was released on October 16, 2000.
This article covers the exciting new features in 2.0, highlights some
other useful changes, and points out a few incompatible changes that may
require rewriting code.

Python’s development never completely stops between releases, and a
steady flow of bug fixes and improvements are always being submitted.  A
host of minor fixes, a few optimizations, additional docstrings, and
better error messages went into 2.0; to list them all would be
impossible, but they’re certainly significant.  Consult the publicly
available CVS logs if you want to see the full list.  This progress is
due to the five developers working for PythonLabs are now getting paid
to spend their days fixing bugs, and also due to the improved
communication resulting from moving to SourceForge.


File: python.info,  Node: What About Python 1 6?,  Next: New Development Process,  Prev: Introdução<3>,  Up: What’s New in Python 2 0

1.22.2 What About Python 1.6?
-----------------------------

Python 1.6 can be thought of as the Contractual Obligations Python
release.  After the core development team left CNRI in May 2000, CNRI
requested that a 1.6 release be created, containing all the work on
Python that had been performed at CNRI. Python 1.6 therefore represents
the state of the CVS tree as of May 2000, with the most significant new
feature being Unicode support.  Development continued after May, of
course, so the 1.6 tree received a few fixes to ensure that it’s
forward-compatible with Python 2.0.  1.6 is therefore part of Python’s
evolution, and not a side branch.

So, should you take much interest in Python 1.6?  Probably not.  The
1.6final and 2.0beta1 releases were made on the same day (September 5,
2000), the plan being to finalize Python 2.0 within a month or so.  If
you have applications to maintain, there seems little point in breaking
things by moving to 1.6, fixing them, and then having another round of
breakage within a month by moving to 2.0; you’re better off just going
straight to 2.0.  Most of the really interesting features described in
this document are only in 2.0, because a lot of work was done between
May and September.


File: python.info,  Node: New Development Process,  Next: Unicode<2>,  Prev: What About Python 1 6?,  Up: What’s New in Python 2 0

1.22.3 New Development Process
------------------------------

The most important change in Python 2.0 may not be to the code at all,
but to how Python is developed: in May 2000 the Python developers began
using the tools made available by SourceForge for storing source code,
tracking bug reports, and managing the queue of patch submissions.  To
report bugs or submit patches for Python 2.0, use the bug tracking and
patch manager tools available from Python’s project page, located at
‘https://sourceforge.net/projects/python/’.

The most important of the services now hosted at SourceForge is the
Python CVS tree, the version-controlled repository containing the source
code for Python.  Previously, there were roughly 7 or so people who had
write access to the CVS tree, and all patches had to be inspected and
checked in by one of the people on this short list.  Obviously, this
wasn’t very scalable.  By moving the CVS tree to SourceForge, it became
possible to grant write access to more people; as of September 2000
there were 27 people able to check in changes, a fourfold increase.
This makes possible large-scale changes that wouldn’t be attempted if
they’d have to be filtered through the small group of core developers.
For example, one day Peter Schneider-Kamp took it into his head to drop
K&R C compatibility and convert the C source for Python to ANSI C. After
getting approval on the python-dev mailing list, he launched into a
flurry of checkins that lasted about a week, other developers joined in
to help, and the job was done.  If there were only 5 people with write
access, probably that task would have been viewed as “nice, but not
worth the time and effort needed” and it would never have gotten done.

The shift to using SourceForge’s services has resulted in a remarkable
increase in the speed of development.  Patches now get submitted,
commented on, revised by people other than the original submitter, and
bounced back and forth between people until the patch is deemed worth
checking in.  Bugs are tracked in one central location and can be
assigned to a specific person for fixing, and we can count the number of
open bugs to measure progress.  This didn’t come without a cost:
developers now have more e-mail to deal with, more mailing lists to
follow, and special tools had to be written for the new environment.
For example, SourceForge sends default patch and bug notification e-mail
messages that are completely unhelpful, so Ka-Ping Yee wrote an HTML
screen-scraper that sends more useful messages.

The ease of adding code caused a few initial growing pains, such as code
was checked in before it was ready or without getting clear agreement
from the developer group.  The approval process that has emerged is
somewhat similar to that used by the Apache group.  Developers can vote
+1, +0, -0, or -1 on a patch; +1 and -1 denote acceptance or rejection,
while +0 and -0 mean the developer is mostly indifferent to the change,
though with a slight positive or negative slant.  The most significant
change from the Apache model is that the voting is essentially advisory,
letting Guido van Rossum, who has Benevolent Dictator For Life status,
know what the general opinion is.  He can still ignore the result of a
vote, and approve or reject a change even if the community disagrees
with him.

Producing an actual patch is the last step in adding a new feature, and
is usually easy compared to the earlier task of coming up with a good
design.  Discussions of new features can often explode into lengthy
mailing list threads, making the discussion hard to follow, and no one
can read every posting to python-dev.  Therefore, a relatively formal
process has been set up to write Python Enhancement Proposals (PEPs),
modelled on the internet RFC process.  PEPs are draft documents that
describe a proposed new feature, and are continually revised until the
community reaches a consensus, either accepting or rejecting the
proposal.  Quoting from the introduction to PEP 1(1), “PEP Purpose and
Guidelines”:

     PEP stands for Python Enhancement Proposal.  A PEP is a design
     document providing information to the Python community, or
     describing a new feature for Python.  The PEP should provide a
     concise technical specification of the feature and a rationale for
     the feature.

     We intend PEPs to be the primary mechanisms for proposing new
     features, for collecting community input on an issue, and for
     documenting the design decisions that have gone into Python.  The
     PEP author is responsible for building consensus within the
     community and documenting dissenting opinions.

Read the rest of PEP 1(2) for the details of the PEP editorial process,
style, and format.  PEPs are kept in the Python CVS tree on SourceForge,
though they’re not part of the Python 2.0 distribution, and are also
available in HTML form from ‘https://peps.python.org/’.  As of September
2000, there are 25 PEPs, ranging from PEP 201(3), “Lockstep Iteration”,
to PEP 225, “Elementwise/Objectwise Operators”.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0001/

   (2) https://peps.python.org/pep-0001/

   (3) https://peps.python.org/pep-0201/


File: python.info,  Node: Unicode<2>,  Next: Compreensões de lista,  Prev: New Development Process,  Up: What’s New in Python 2 0

1.22.4 Unicode
--------------

The largest new feature in Python 2.0 is a new fundamental data type:
Unicode strings.  Unicode uses 16-bit numbers to represent characters
instead of the 8-bit number used by ASCII, meaning that 65,536 distinct
characters can be supported.

The final interface for Unicode support was arrived at through countless
often-stormy discussions on the python-dev mailing list, and mostly
implemented by Marc-André Lemburg, based on a Unicode string type
implementation by Fredrik Lundh.  A detailed explanation of the
interface was written up as PEP 100(1), “Python Unicode Integration”.
This article will simply cover the most significant points about the
Unicode interfaces.

In Python source code, Unicode strings are written as ‘u"string"’.
Arbitrary Unicode characters can be written using a new escape sequence,
‘\uHHHH’, where 'HHHH' is a 4-digit hexadecimal number from 0000 to
FFFF.  The existing ‘\xHH’ escape sequence can also be used, and octal
escapes can be used for characters up to U+01FF, which is represented by
‘\777’.

Unicode strings, just like regular strings, are an immutable sequence
type.  They can be indexed and sliced, but not modified in place.
Unicode strings have an ‘encode( [encoding] )’ method that returns an
8-bit string in the desired encoding.  Encodings are named by strings,
such as ‘'ascii'’, ‘'utf-8'’, ‘'iso-8859-1'’, or whatever.  A codec API
is defined for implementing and registering new encodings that are then
available throughout a Python program.  If an encoding isn’t specified,
the default encoding is usually 7-bit ASCII, though it can be changed
for your Python installation by calling the
‘sys.setdefaultencoding(encoding)’ function in a customized version of
‘site.py’.

Combining 8-bit and Unicode strings always coerces to Unicode, using the
default ASCII encoding; the result of ‘'a' + u'bc'’ is ‘u'abc'’.

New built-in functions have been added, and existing built-ins modified
to support Unicode:

   * ‘unichr(ch)’ returns a Unicode string 1 character long, containing
     the character 'ch'.

   * ‘ord(u)’, where 'u' is a 1-character regular or Unicode string,
     returns the number of the character as an integer.

   * ‘unicode(string [, encoding] [, errors] )’ creates a Unicode string
     from an 8-bit string.  ‘encoding’ is a string naming the encoding
     to use.  The ‘errors’ parameter specifies the treatment of
     characters that are invalid for the current encoding; passing
     ‘'strict'’ as the value causes an exception to be raised on any
     encoding error, while ‘'ignore'’ causes errors to be silently
     ignored and ‘'replace'’ uses U+FFFD, the official replacement
     character, in case of any problems.

   * The ‘exec’ statement, and various built-ins such as ‘eval()’,
     ‘getattr()’, and ‘setattr()’ will also accept Unicode strings as
     well as regular strings.  (It’s possible that the process of fixing
     this missed some built-ins; if you find a built-in function that
     accepts strings but doesn’t accept Unicode strings at all, please
     report it as a bug.)

A new module, *note unicodedata: 105, provides an interface to Unicode
character properties.  For example, ‘unicodedata.category(u'A')’ returns
the 2-character string ‘Lu’, the ‘L’ denoting it’s a letter, and ‘u’
meaning that it’s uppercase.  ‘unicodedata.bidirectional(u'\u0660')’
returns ‘AN’, meaning that U+0660 is an Arabic number.

The *note codecs: 1b. module contains functions to look up existing
encodings and register new ones.  Unless you want to implement a new
encoding, you’ll most often use the ‘codecs.lookup(encoding)’ function,
which returns a 4-element tuple: ‘(encode_func, decode_func,
stream_reader, stream_writer)’.

   * 'encode_func' is a function that takes a Unicode string, and
     returns a 2-tuple ‘(string, length)’.  'string' is an 8-bit string
     containing a portion (perhaps all) of the Unicode string converted
     into the given encoding, and 'length' tells you how much of the
     Unicode string was converted.

   * 'decode_func' is the opposite of 'encode_func', taking an 8-bit
     string and returning a 2-tuple ‘(ustring, length)’, consisting of
     the resulting Unicode string 'ustring' and the integer 'length'
     telling how much of the 8-bit string was consumed.

   * 'stream_reader' is a class that supports decoding input from a
     stream.  'stream_reader(file_obj)' returns an object that supports
     the ‘read()’, ‘readline()’, and ‘readlines()’ methods.  These
     methods will all translate from the given encoding and return
     Unicode strings.

   * 'stream_writer', similarly, is a class that supports encoding
     output to a stream.  'stream_writer(file_obj)' returns an object
     that supports the ‘write()’ and ‘writelines()’ methods.  These
     methods expect Unicode strings, translating them to the given
     encoding on output.

For example, the following code writes a Unicode string into a file,
encoding it as UTF-8:

     import codecs

     unistr = u'\u0660\u2000ab ...'

     (UTF8_encode, UTF8_decode,
      UTF8_streamreader, UTF8_streamwriter) = codecs.lookup('UTF-8')

     output = UTF8_streamwriter( open( '/tmp/output', 'wb') )
     output.write( unistr )
     output.close()

The following code would then read UTF-8 input from the file:

     input = UTF8_streamreader( open( '/tmp/output', 'rb') )
     print repr(input.read())
     input.close()

Unicode-aware regular expressions are available through the *note re:
b9. module, which has a new underlying implementation called SRE written
by Fredrik Lundh of Secret Labs AB.

A ‘-U’ command line option was added which causes the Python compiler to
interpret all string literals as Unicode string literals.  This is
intended to be used in testing and future-proofing your Python code,
since some future version of Python may drop support for 8-bit strings
and provide only Unicode strings.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0100/


File: python.info,  Node: Compreensões de lista,  Next: Augmented Assignment,  Prev: Unicode<2>,  Up: What’s New in Python 2 0

1.22.5 Compreensões de lista
----------------------------

Lists are a workhorse data type in Python, and many programs manipulate
a list at some point.  Two common operations on lists are to loop over
them, and either pick out the elements that meet a certain criterion, or
apply some function to each element.  For example, given a list of
strings, you might want to pull out all the strings containing a given
substring, or strip off trailing whitespace from each line.

The existing *note map(): 867. and *note filter(): 868. functions can be
used for this purpose, but they require a function as one of their
arguments.  This is fine if there’s an existing built-in function that
can be passed directly, but if there isn’t, you have to create a little
function to do the required work, and Python’s scoping rules make the
result ugly if the little function needs additional information.  Take
the first example in the previous paragraph, finding all the strings in
the list containing a given substring.  You could write the following to
do it:

     # Given the list L, make a list of all strings
     # containing the substring S.
     sublist = filter( lambda s, substring=S:
                          string.find(s, substring) != -1,
                       L)

Because of Python’s scoping rules, a default argument is used so that
the anonymous function created by the *note lambda: 12df. expression
knows what substring is being searched for.  List comprehensions make
this cleaner:

     sublist = [ s for s in L if string.find(s, S) != -1 ]

List comprehensions have the form:

     [ expression for expr in sequence1
                  for expr2 in sequence2 ...
                  for exprN in sequenceN
                  if condition ]

The ‘for’…‘in’ clauses contain the sequences to be iterated over.  The
sequences do not have to be the same length, because they are 'not'
iterated over in parallel, but from left to right; this is explained
more clearly in the following paragraphs.  The elements of the generated
list will be the successive values of 'expression'.  The final ‘if’
clause is optional; if present, 'expression' is only evaluated and added
to the result if 'condition' is true.

To make the semantics very clear, a list comprehension is equivalent to
the following Python code:

     for expr1 in sequence1:
         for expr2 in sequence2:
         ...
             for exprN in sequenceN:
                  if (condition):
                       # Append the value of
                       # the expression to the
                       # resulting list.

This means that when there are multiple ‘for’…‘in’ clauses, the
resulting list will be equal to the product of the lengths of all the
sequences.  If you have two lists of length 3, the output list is 9
elements long:

     seq1 = 'abc'
     seq2 = (1,2,3)
     >>> [ (x,y) for x in seq1 for y in seq2]
     [('a', 1), ('a', 2), ('a', 3), ('b', 1), ('b', 2), ('b', 3), ('c', 1),
     ('c', 2), ('c', 3)]

To avoid introducing an ambiguity into Python’s grammar, if 'expression'
is creating a tuple, it must be surrounded with parentheses.  The first
list comprehension below is a syntax error, while the second one is
correct:

     # Syntax error
     [ x,y for x in seq1 for y in seq2]
     # Correct
     [ (x,y) for x in seq1 for y in seq2]

The idea of list comprehensions originally comes from the functional
programming language Haskell (‘https://www.haskell.org’).  Greg Ewing
argued most effectively for adding them to Python and wrote the initial
list comprehension patch, which was then discussed for a seemingly
endless time on the python-dev mailing list and kept up-to-date by Skip
Montanaro.


File: python.info,  Node: Augmented Assignment,  Next: String Methods,  Prev: Compreensões de lista,  Up: What’s New in Python 2 0

1.22.6 Augmented Assignment
---------------------------

Augmented assignment operators, another long-requested feature, have
been added to Python 2.0.  Augmented assignment operators include ‘+=’,
‘-=’, ‘*=’, and so forth.  For example, the statement ‘a += 2’
increments the value of the variable ‘a’ by 2, equivalent to the
slightly lengthier ‘a = a + 2’.

The full list of supported assignment operators is ‘+=’, ‘-=’, ‘*=’,
‘/=’, ‘%=’, ‘**=’, ‘&=’, ‘|=’, ‘^=’, ‘>>=’, and ‘<<=’.  Python classes
can override the augmented assignment operators by defining methods
named ‘__iadd__()’, ‘__isub__()’, etc.  For example, the following
‘Number’ class stores a number and supports using += to create a new
instance with an incremented value.

     class Number:
         def __init__(self, value):
             self.value = value
         def __iadd__(self, increment):
             return Number( self.value + increment)

     n = Number(5)
     n += 3
     print n.value

The ‘__iadd__()’ special method is called with the value of the
increment, and should return a new instance with an appropriately
modified value; this return value is bound as the new value of the
variable on the left-hand side.

Augmented assignment operators were first introduced in the C
programming language, and most C-derived languages, such as ‘awk’, C++,
Java, Perl, and PHP also support them.  The augmented assignment patch
was implemented by Thomas Wouters.


File: python.info,  Node: String Methods,  Next: Garbage Collection of Cycles,  Prev: Augmented Assignment,  Up: What’s New in Python 2 0

1.22.7 String Methods
---------------------

Until now string-manipulation functionality was in the *note string: d3.
module, which was usually a front-end for the ‘strop’ module written in
C. The addition of Unicode posed a difficulty for the ‘strop’ module,
because the functions would all need to be rewritten in order to accept
either 8-bit or Unicode strings.  For functions such as
‘string.replace()’, which takes 3 string arguments, that means eight
possible permutations, and correspondingly complicated code.

Instead, Python 2.0 pushes the problem onto the string type, making
string manipulation functionality available through methods on both
8-bit strings and Unicode strings.

     >>> 'andrew'.capitalize()
     'Andrew'
     >>> 'hostname'.replace('os', 'linux')
     'hlinuxtname'
     >>> 'moshe'.find('sh')
     2

One thing that hasn’t changed, a noteworthy April Fools’ joke
notwithstanding, is that Python strings are immutable.  Thus, the string
methods return new strings, and do not modify the string on which they
operate.

The old *note string: d3. module is still around for backwards
compatibility, but it mostly acts as a front-end to the new string
methods.

Two methods which have no parallel in pre-2.0 versions, although they
did exist in JPython for quite some time, are ‘startswith()’ and
‘endswith()’.  ‘s.startswith(t)’ is equivalent to ‘s[:len(t)] == t’,
while ‘s.endswith(t)’ is equivalent to ‘s[-len(t):] == t’.

One other method which deserves special mention is ‘join()’.  The
‘join()’ method of a string receives one parameter, a sequence of
strings, and is equivalent to the ‘string.join()’ function from the old
*note string: d3. module, with the arguments reversed.  In other words,
‘s.join(seq)’ is equivalent to the old ‘string.join(seq, s)’.


File: python.info,  Node: Garbage Collection of Cycles,  Next: Other Core Changes,  Prev: String Methods,  Up: What’s New in Python 2 0

1.22.8 Garbage Collection of Cycles
-----------------------------------

The C implementation of Python uses reference counting to implement
garbage collection.  Every Python object maintains a count of the number
of references pointing to itself, and adjusts the count as references
are created or destroyed.  Once the reference count reaches zero, the
object is no longer accessible, since you need to have a reference to an
object to access it, and if the count is zero, no references exist any
longer.

Reference counting has some pleasant properties: it’s easy to understand
and implement, and the resulting implementation is portable, fairly
fast, and reacts well with other libraries that implement their own
memory handling schemes.  The major problem with reference counting is
that it sometimes doesn’t realise that objects are no longer accessible,
resulting in a memory leak.  This happens when there are cycles of
references.

Consider the simplest possible cycle, a class instance which has a
reference to itself:

     instance = SomeClass()
     instance.myself = instance

After the above two lines of code have been executed, the reference
count of ‘instance’ is 2; one reference is from the variable named
‘'instance'’, and the other is from the ‘myself’ attribute of the
instance.

If the next line of code is ‘del instance’, what happens?  The reference
count of ‘instance’ is decreased by 1, so it has a reference count of 1;
the reference in the ‘myself’ attribute still exists.  Yet the instance
is no longer accessible through Python code, and it could be deleted.
Several objects can participate in a cycle if they have references to
each other, causing all of the objects to be leaked.

Python 2.0 fixes this problem by periodically executing a cycle
detection algorithm which looks for inaccessible cycles and deletes the
objects involved.  A new *note gc: 60. module provides functions to
perform a garbage collection, obtain debugging statistics, and tuning
the collector’s parameters.

Running the cycle detection algorithm takes some time, and therefore
will result in some additional overhead.  It is hoped that after we’ve
gotten experience with the cycle collection from using 2.0, Python 2.1
will be able to minimize the overhead with careful tuning.  It’s not yet
obvious how much performance is lost, because benchmarking this is
tricky and depends crucially on how often the program creates and
destroys objects.  The detection of cycles can be disabled when Python
is compiled, if you can’t afford even a tiny speed penalty or suspect
that the cycle collection is buggy, by specifying the
‘--without-cycle-gc’ switch when running the ‘configure’ script.

Several people tackled this problem and contributed to a solution.  An
early implementation of the cycle detection approach was written by Toby
Kelsey.  The current algorithm was suggested by Eric Tiedemann during a
visit to CNRI, and Guido van Rossum and Neil Schemenauer wrote two
different implementations, which were later integrated by Neil.  Lots of
other people offered suggestions along the way; the March 2000 archives
of the python-dev mailing list contain most of the relevant discussion,
especially in the threads titled “Reference cycle collection for Python”
and “Finalization again”.


File: python.info,  Node: Other Core Changes,  Next: Porting to 2 0,  Prev: Garbage Collection of Cycles,  Up: What’s New in Python 2 0

1.22.9 Other Core Changes
-------------------------

Various minor changes have been made to Python’s syntax and built-in
functions.  None of the changes are very far-reaching, but they’re handy
conveniences.

* Menu:

* Minor Language Changes::
* Changes to Built-in Functions::


File: python.info,  Node: Minor Language Changes,  Next: Changes to Built-in Functions,  Up: Other Core Changes

1.22.9.1 Minor Language Changes
...............................

A new syntax makes it more convenient to call a given function with a
tuple of arguments and/or a dictionary of keyword arguments.  In Python
1.5 and earlier, you’d use the ‘apply()’ built-in function: ‘apply(f,
args, kw)’ calls the function ‘f()’ with the argument tuple 'args' and
the keyword arguments in the dictionary 'kw'.  ‘apply()’ is the same in
2.0, but thanks to a patch from Greg Ewing, ‘f(*args, **kw)’ is a
shorter and clearer way to achieve the same effect.  This syntax is
symmetrical with the syntax for defining functions:

     def f(*args, **kw):
         # args is a tuple of positional args,
         # kw is a dictionary of keyword args
         ...

The ‘print’ statement can now have its output directed to a file-like
object by following the ‘print’ with ‘>> file’, similar to the
redirection operator in Unix shells.  Previously you’d either have to
use the ‘write()’ method of the file-like object, which lacks the
convenience and simplicity of ‘print’, or you could assign a new value
to ‘sys.stdout’ and then restore the old value.  For sending output to
standard error, it’s much easier to write this:

     print >> sys.stderr, "Warning: action field not supplied"

Modules can now be renamed on importing them, using the syntax ‘import
module as name’ or ‘from module import name as othername’.  The patch
was submitted by Thomas Wouters.

A new format style is available when using the ‘%’ operator; ‘%r’ will
insert the *note repr(): 800. of its argument.  This was also added from
symmetry considerations, this time for symmetry with the existing ‘%s’
format style, which inserts the *note str(): 44c. of its argument.  For
example, ‘'%r %s' % ('abc', 'abc')’ returns a string containing ‘'abc'
abc’.

Previously there was no way to implement a class that overrode Python’s
built-in *note in: 2f4. operator and implemented a custom version.  ‘obj
in seq’ returns true if 'obj' is present in the sequence 'seq'; Python
computes this by simply trying every index of the sequence until either
'obj' is found or an *note IndexError: 157e. is encountered.  Moshe
Zadka contributed a patch which adds a ‘__contains__()’ magic method for
providing a custom implementation for ‘in’.  Additionally, new built-in
objects written in C can define what ‘in’ means for them via a new slot
in the sequence protocol.

Earlier versions of Python used a recursive algorithm for deleting
objects.  Deeply nested data structures could cause the interpreter to
fill up the C stack and crash; Christian Tismer rewrote the deletion
logic to fix this problem.  On a related note, comparing recursive
objects recursed infinitely and crashed; Jeremy Hylton rewrote the code
to no longer crash, producing a useful result instead.  For example,
after this code:

     a = []
     b = []
     a.append(a)
     b.append(b)

The comparison ‘a==b’ returns true, because the two recursive data
structures are isomorphic.  See the thread “trashcan and PR#7” in the
April 2000 archives of the python-dev mailing list for the discussion
leading up to this implementation, and some useful relevant links.  Note
that comparisons can now also raise exceptions.  In earlier versions of
Python, a comparison operation such as ‘cmp(a,b)’ would always produce
an answer, even if a user-defined ‘__cmp__()’ method encountered an
error, since the resulting exception would simply be silently swallowed.

Work has been done on porting Python to 64-bit Windows on the Itanium
processor, mostly by Trent Mick of ActiveState.  (Confusingly,
‘sys.platform’ is still ‘'win32'’ on Win64 because it seems that for
ease of porting, MS Visual C++ treats code as 32 bit on Itanium.)
PythonWin also supports Windows CE; see the Python CE page at
‘https://pythonce.sourceforge.net/’ for more information.

Another new platform is Darwin/MacOS X; initial support for it is in
Python 2.0.  Dynamic loading works, if you specify “configure –with-dyld
–with-suffix=.x”.  Consult the README in the Python source distribution
for more instructions.

An attempt has been made to alleviate one of Python’s warts, the
often-confusing *note NameError: 43f. exception when code refers to a
local variable before the variable has been assigned a value.  For
example, the following code raises an exception on the ‘print’ statement
in both 1.5.2 and 2.0; in 1.5.2 a *note NameError: 43f. exception is
raised, while 2.0 raises a new *note UnboundLocalError: 157f. exception.
*note UnboundLocalError: 157f. is a subclass of *note NameError: 43f, so
any existing code that expects *note NameError: 43f. to be raised should
still work.

     def f():
         print "i=",i
         i = i + 1
     f()

Two new exceptions, *note TabError: 543. and *note IndentationError:
7a9, have been introduced.  They’re both subclasses of *note
SyntaxError: 18d, and are raised when Python code is found to be
improperly indented.


File: python.info,  Node: Changes to Built-in Functions,  Prev: Minor Language Changes,  Up: Other Core Changes

1.22.9.2 Changes to Built-in Functions
......................................

A new built-in, ‘zip(seq1, seq2, ...)’, has been added.  *note zip():
7d1. returns a list of tuples where each tuple contains the i-th element
from each of the argument sequences.  The difference between *note
zip(): 7d1. and ‘map(None, seq1, seq2)’ is that *note map(): 867. pads
the sequences with ‘None’ if the sequences aren’t all of the same
length, while *note zip(): 7d1. truncates the returned list to the
length of the shortest argument sequence.

The *note int(): 257. and ‘long()’ functions now accept an optional
“base” parameter when the first argument is a string.  ‘int('123', 10)’
returns 123, while ‘int('123', 16)’ returns 291.  ‘int(123, 16)’ raises
a *note TypeError: 2c3. exception with the message “can’t convert
non-string with explicit base”.

A new variable holding more detailed version information has been added
to the *note sys: d9. module.  ‘sys.version_info’ is a tuple ‘(major,
minor, micro, level, serial)’ For example, in a hypothetical 2.0.1beta1,
‘sys.version_info’ would be ‘(2, 0, 1, 'beta', 1)’.  'level' is a string
such as ‘"alpha"’, ‘"beta"’, or ‘"final"’ for a final release.

Dictionaries have an odd new method, ‘setdefault(key, default)’, which
behaves similarly to the existing ‘get()’ method.  However, if the key
is missing, ‘setdefault()’ both returns the value of 'default' as
‘get()’ would do, and also inserts it into the dictionary as the value
for 'key'.  Thus, the following lines of code:

     if dict.has_key( key ): return dict[key]
     else:
         dict[key] = []
         return dict[key]

can be reduced to a single ‘return dict.setdefault(key, [])’ statement.

The interpreter sets a maximum recursion depth in order to catch runaway
recursion before filling the C stack and causing a core dump or GPF..
Previously this limit was fixed when you compiled Python, but in 2.0 the
maximum recursion depth can be read and modified using *note
sys.getrecursionlimit(): 4c4. and *note sys.setrecursionlimit(): 4c3.
The default value is 1000, and a rough maximum value for a given
platform can be found by running a new script,
‘Misc/find_recursionlimit.py’.


File: python.info,  Node: Porting to 2 0,  Next: Extending/Embedding Changes,  Prev: Other Core Changes,  Up: What’s New in Python 2 0

1.22.10 Porting to 2.0
----------------------

New Python releases try hard to be compatible with previous releases,
and the record has been pretty good.  However, some changes are
considered useful enough, usually because they fix initial design
decisions that turned out to be actively mistaken, that breaking
backward compatibility can’t always be avoided.  This section lists the
changes in Python 2.0 that may cause old Python code to break.

The change which will probably break the most code is tightening up the
arguments accepted by some methods.  Some methods would take multiple
arguments and treat them as a tuple, particularly various list methods
such as *note append(): 6cd. and *note insert(): 11d7.  In earlier
versions of Python, if ‘L’ is a list, ‘L.append( 1,2 )’ appends the
tuple ‘(1,2)’ to the list.  In Python 2.0 this causes a *note TypeError:
2c3. exception to be raised, with the message: ‘append requires exactly
1 argument; 2 given’.  The fix is to simply add an extra set of
parentheses to pass both values as a tuple: ‘L.append( (1,2) )’.

The earlier versions of these methods were more forgiving because they
used an old function in Python’s C interface to parse their arguments;
2.0 modernizes them to use *note PyArg_ParseTuple(): 571, the current
argument parsing function, which provides more helpful error messages
and treats multi-argument calls as errors.  If you absolutely must use
2.0 but can’t fix your code, you can edit ‘Objects/listobject.c’ and
define the preprocessor symbol ‘NO_STRICT_LIST_APPEND’ to preserve the
old behaviour; this isn’t recommended.

Some of the functions in the *note socket: cc. module are still
forgiving in this way.  For example, ‘socket.connect( ('hostname', 25)
)’ is the correct form, passing a tuple representing an IP address, but
‘socket.connect('hostname', 25)’ also works.  *note socket.connect_ex:
1582. and *note socket.bind: 1583. are similarly easy-going.  2.0alpha1
tightened these functions up, but because the documentation actually
used the erroneous multiple argument form, many people wrote code which
would break with the stricter checking.  GvR backed out the changes in
the face of public reaction, so for the *note socket: cc. module, the
documentation was fixed and the multiple argument form is simply marked
as deprecated; it 'will' be tightened up again in a future Python
version.

The ‘\x’ escape in string literals now takes exactly 2 hex digits.
Previously it would consume all the hex digits following the ‘x’ and
take the lowest 8 bits of the result, so ‘\x123456’ was equivalent to
‘\x56’.

The *note AttributeError: 34b. and *note NameError: 43f. exceptions have
a more friendly error message, whose text will be something like ‘'Spam'
instance has no attribute 'eggs'’ or ‘name 'eggs' is not defined’.
Previously the error message was just the missing attribute name ‘eggs’,
and code written to take advantage of this fact will break in 2.0.

Some work has been done to make integers and long integers a bit more
interchangeable.  In 1.5.2, large-file support was added for Solaris, to
allow reading files larger than 2 GiB; this made the ‘tell()’ method of
file objects return a long integer instead of a regular integer.  Some
code would subtract two file offsets and attempt to use the result to
multiply a sequence or slice a string, but this raised a *note
TypeError: 2c3.  In 2.0, long integers can be used to multiply or slice
a sequence, and it’ll behave as you’d intuitively expect it to; ‘3L *
'abc'’ produces ‘abcabcabc’, and ‘(0,1,2,3)[2L:4L]’ produces (2,3).
Long integers can also be used in various contexts where previously only
integers were accepted, such as in the ‘seek()’ method of file objects,
and in the formats supported by the ‘%’ operator (‘%d’, ‘%i’, ‘%x’,
etc.).  For example, ‘"%d" % 2L**64’ will produce the string
‘18446744073709551616’.

The subtlest long integer change of all is that the *note str(): 44c. of
a long integer no longer has a trailing ‘L’ character, though *note
repr(): 800. still includes it.  The ‘L’ annoyed many people who wanted
to print long integers that looked just like regular integers, since
they had to go out of their way to chop off the character.  This is no
longer a problem in 2.0, but code which does ‘str(longval)[:-1]’ and
assumes the ‘L’ is there, will now lose the final digit.

Taking the *note repr(): 800. of a float now uses a different formatting
precision than *note str(): 44c.  *note repr(): 800. uses ‘%.17g’ format
string for C’s ‘sprintf()’, while *note str(): 44c. uses ‘%.12g’ as
before.  The effect is that *note repr(): 800. may occasionally show
more decimal places than *note str(): 44c, for certain numbers.  For
example, the number 8.1 can’t be represented exactly in binary, so
‘repr(8.1)’ is ‘'8.0999999999999996'’, while str(8.1) is ‘'8.1'’.

The ‘-X’ command-line option, which turned all standard exceptions into
strings instead of classes, has been removed; the standard exceptions
will now always be classes.  The ‘exceptions’ module containing the
standard exceptions was translated from Python to a built-in C module,
written by Barry Warsaw and Fredrik Lundh.


File: python.info,  Node: Extending/Embedding Changes,  Next: Distutils Making Modules Easy to Install,  Prev: Porting to 2 0,  Up: What’s New in Python 2 0

1.22.11 Extending/Embedding Changes
-----------------------------------

Some of the changes are under the covers, and will only be apparent to
people writing C extension modules or embedding a Python interpreter in
a larger application.  If you aren’t dealing with Python’s C API, you
can safely skip this section.

The version number of the Python C API was incremented, so C extensions
compiled for 1.5.2 must be recompiled in order to work with 2.0.  On
Windows, it’s not possible for Python 2.0 to import a third party
extension built for Python 1.5.x due to how Windows DLLs work, so Python
will raise an exception and the import will fail.

Users of Jim Fulton’s ExtensionClass module will be pleased to find out
that hooks have been added so that ExtensionClasses are now supported by
*note isinstance(): 442. and *note issubclass(): 7c2.  This means you no
longer have to remember to write code such as ‘if type(obj) ==
myExtensionClass’, but can use the more natural ‘if isinstance(obj,
myExtensionClass)’.

The ‘Python/importdl.c’ file, which was a mass of #ifdefs to support
dynamic loading on many different platforms, was cleaned up and
reorganised by Greg Stein.  ‘importdl.c’ is now quite small, and
platform-specific code has been moved into a bunch of
‘Python/dynload_*.c’ files.  Another cleanup: there were also a number
of ‘my*.h’ files in the Include/ directory that held various portability
hacks; they’ve been merged into a single file, ‘Include/pyport.h’.

Vladimir Marangozov’s long-awaited malloc restructuring was completed,
to make it easy to have the Python interpreter use a custom allocator
instead of C’s standard ‘malloc()’.  For documentation, read the
comments in ‘Include/pymem.h’ and ‘Include/objimpl.h’.  For the lengthy
discussions during which the interface was hammered out, see the web
archives of the ‘patches’ and ‘python-dev’ lists at python.org.

Recent versions of the GUSI development environment for MacOS support
POSIX threads.  Therefore, Python’s POSIX threading support now works on
the Macintosh.  Threading support using the user-space GNU ‘pth’ library
was also contributed.

Threading support on Windows was enhanced, too.  Windows supports thread
locks that use kernel objects only in case of contention; in the common
case when there’s no contention, they use simpler functions which are an
order of magnitude faster.  A threaded version of Python 1.5.2 on NT is
twice as slow as an unthreaded version; with the 2.0 changes, the
difference is only 10%.  These improvements were contributed by Yakov
Markovitch.

Python 2.0’s source now uses only ANSI C prototypes, so compiling Python
now requires an ANSI C compiler, and can no longer be done using a
compiler that only supports K&R C.

Previously the Python virtual machine used 16-bit numbers in its
bytecode, limiting the size of source files.  In particular, this
affected the maximum size of literal lists and dictionaries in Python
source; occasionally people who are generating Python code would run
into this limit.  A patch by Charles G. Waldman raises the limit from
‘2**16’ to ‘2**32’.

Three new convenience functions intended for adding constants to a
module’s dictionary at module initialization time were added: *note
PyModule_AddObject(): 366, *note PyModule_AddIntConstant(): 1585, and
*note PyModule_AddStringConstant(): 1586.  Each of these functions takes
a module object, a null-terminated C string containing the name to be
added, and a third argument for the value to be assigned to the name.
This third argument is, respectively, a Python object, a C long, or a C
string.

A wrapper API was added for Unix-style signal handlers.  *note
PyOS_getsig(): 1587. gets a signal handler and *note PyOS_setsig():
1588. will set a new handler.


File: python.info,  Node: Distutils Making Modules Easy to Install,  Next: XML Modules,  Prev: Extending/Embedding Changes,  Up: What’s New in Python 2 0

1.22.12 Distutils: Making Modules Easy to Install
-------------------------------------------------

Before Python 2.0, installing modules was a tedious affair – there was
no way to figure out automatically where Python is installed, or what
compiler options to use for extension modules.  Software authors had to
go through an arduous ritual of editing Makefiles and configuration
files, which only really work on Unix and leave Windows and MacOS
unsupported.  Python users faced wildly differing installation
instructions which varied between different extension packages, which
made administering a Python installation something of a chore.

The SIG for distribution utilities, shepherded by Greg Ward, has created
the Distutils, a system to make package installation much easier.  They
form the ‘distutils’ package, a new part of Python’s standard library.
In the best case, installing a Python module from source will require
the same steps: first you simply mean unpack the tarball or zip archive,
and the run “‘python setup.py install’”.  The platform will be
automatically detected, the compiler will be recognized, C extension
modules will be compiled, and the distribution installed into the proper
directory.  Optional command-line arguments provide more control over
the installation process, the distutils package offers many places to
override defaults – separating the build from the install, building or
installing in non-default directories, and more.

In order to use the Distutils, you need to write a ‘setup.py’ script.
For the simple case, when the software contains only .py files, a
minimal ‘setup.py’ can be just a few lines long:

     from distutils.core import setup
     setup (name = "foo", version = "1.0",
            py_modules = ["module1", "module2"])

The ‘setup.py’ file isn’t much more complicated if the software consists
of a few packages:

     from distutils.core import setup
     setup (name = "foo", version = "1.0",
            packages = ["package", "package.subpackage"])

A C extension can be the most complicated case; here’s an example taken
from the PyXML package:

     from distutils.core import setup, Extension

     expat_extension = Extension('xml.parsers.pyexpat',
          define_macros = [('XML_NS', None)],
          include_dirs = [ 'extensions/expat/xmltok',
                           'extensions/expat/xmlparse' ],
          sources = [ 'extensions/pyexpat.c',
                      'extensions/expat/xmltok/xmltok.c',
                      'extensions/expat/xmltok/xmlrole.c', ]
            )
     setup (name = "PyXML", version = "0.5.4",
            ext_modules =[ expat_extension ] )

The Distutils can also take care of creating source and binary
distributions.  The “sdist” command, run by “‘python setup.py sdist’’,
builds a source distribution such as ‘foo-1.0.tar.gz’.  Adding new
commands isn’t difficult, “bdist_rpm” and “bdist_wininst” commands have
already been contributed to create an RPM distribution and a Windows
installer for the software, respectively.  Commands to create other
distribution formats such as Debian packages and Solaris ‘.pkg’ files
are in various stages of development.

All this is documented in a new manual, 'Distributing Python Modules',
that joins the basic set of Python documentation.


File: python.info,  Node: XML Modules,  Next: Module changes,  Prev: Distutils Making Modules Easy to Install,  Up: What’s New in Python 2 0

1.22.13 XML Modules
-------------------

Python 1.5.2 included a simple XML parser in the form of the ‘xmllib’
module, contributed by Sjoerd Mullender.  Since 1.5.2’s release, two
different interfaces for processing XML have become common: SAX2
(version 2 of the Simple API for XML) provides an event-driven interface
with some similarities to ‘xmllib’, and the DOM (Document Object Model)
provides a tree-based interface, transforming an XML document into a
tree of nodes that can be traversed and modified.  Python 2.0 includes a
SAX2 interface and a stripped-down DOM interface as part of the *note
xml: 120. package.  Here we will give a brief overview of these new
interfaces; consult the Python documentation or the source code for
complete details.  The Python XML SIG is also working on improved
documentation.

* Menu:

* SAX2 Support::
* DOM Support::
* Relationship to PyXML::


File: python.info,  Node: SAX2 Support,  Next: DOM Support,  Up: XML Modules

1.22.13.1 SAX2 Support
......................

SAX defines an event-driven interface for parsing XML. To use SAX, you
must write a SAX handler class.  Handler classes inherit from various
classes provided by SAX, and override various methods that will then be
called by the XML parser.  For example, the *note startElement(): 158c.
and *note endElement(): 158d. methods are called for every starting and
end tag encountered by the parser, the *note characters(): 158e. method
is called for every chunk of character data, and so forth.

The advantage of the event-driven approach is that the whole document
doesn’t have to be resident in memory at any one time, which matters if
you are processing really huge documents.  However, writing the SAX
handler class can get very complicated if you’re trying to modify the
document structure in some elaborate way.

For example, this little example program defines a handler that prints a
message for every starting and ending tag, and then parses the file
‘hamlet.xml’ using it:

     from xml import sax

     class SimpleHandler(sax.ContentHandler):
         def startElement(self, name, attrs):
             print 'Start of element:', name, attrs.keys()

         def endElement(self, name):
             print 'End of element:', name

     # Create a parser object
     parser = sax.make_parser()

     # Tell it what handler to use
     handler = SimpleHandler()
     parser.setContentHandler( handler )

     # Parse a file!
     parser.parse( 'hamlet.xml' )

For more information, consult the Python documentation, or the XML HOWTO
at ‘https://pyxml.sourceforge.net/topics/howto/xml-howto.html’.


File: python.info,  Node: DOM Support,  Next: Relationship to PyXML,  Prev: SAX2 Support,  Up: XML Modules

1.22.13.2 DOM Support
.....................

The Document Object Model is a tree-based representation for an XML
document.  A top-level ‘Document’ instance is the root of the tree, and
has a single child which is the top-level ‘Element’ instance.  This
‘Element’ has children nodes representing character data and any
sub-elements, which may have further children of their own, and so
forth.  Using the DOM you can traverse the resulting tree any way you
like, access element and attribute values, insert and delete nodes, and
convert the tree back into XML.

The DOM is useful for modifying XML documents, because you can create a
DOM tree, modify it by adding new nodes or rearranging subtrees, and
then produce a new XML document as output.  You can also construct a DOM
tree manually and convert it to XML, which can be a more flexible way of
producing XML output than simply writing ‘<tag1>’…‘</tag1>’ to a file.

The DOM implementation included with Python lives in the *note
xml.dom.minidom: 122. module.  It’s a lightweight implementation of the
Level 1 DOM with support for XML namespaces.  The ‘parse()’ and
‘parseString()’ convenience functions are provided for generating a DOM
tree:

     from xml.dom import minidom
     doc = minidom.parse('hamlet.xml')

‘doc’ is a ‘Document’ instance.  ‘Document’, like all the other DOM
classes such as ‘Element’ and ‘Text’, is a subclass of the ‘Node’ base
class.  All the nodes in a DOM tree therefore support certain common
methods, such as ‘toxml()’ which returns a string containing the XML
representation of the node and its children.  Each class also has
special methods of its own; for example, ‘Element’ and ‘Document’
instances have a method to find all child elements with a given tag
name.  Continuing from the previous 2-line example:

     perslist = doc.getElementsByTagName( 'PERSONA' )
     print perslist[0].toxml()
     print perslist[1].toxml()

For the 'Hamlet' XML file, the above few lines output:

     <PERSONA>CLAUDIUS, king of Denmark. </PERSONA>
     <PERSONA>HAMLET, son to the late, and nephew to the present king.</PERSONA>

The root element of the document is available as ‘doc.documentElement’,
and its children can be easily modified by deleting, adding, or removing
nodes:

     root = doc.documentElement

     # Remove the first child
     root.removeChild( root.childNodes[0] )

     # Move the new first child to the end
     root.appendChild( root.childNodes[0] )

     # Insert the new first child (originally,
     # the third child) before the 20th child.
     root.insertBefore( root.childNodes[0], root.childNodes[20] )

Again, I will refer you to the Python documentation for a complete
listing of the different ‘Node’ classes and their various methods.


File: python.info,  Node: Relationship to PyXML,  Prev: DOM Support,  Up: XML Modules

1.22.13.3 Relationship to PyXML
...............................

The XML Special Interest Group has been working on XML-related Python
code for a while.  Its code distribution, called PyXML, is available
from the SIG’s web pages at
‘https://www.python.org/community/sigs/current/xml-sig’.  The PyXML
distribution also used the package name ‘xml’.  If you’ve written
programs that used PyXML, you’re probably wondering about its
compatibility with the 2.0 *note xml: 120. package.

The answer is that Python 2.0’s *note xml: 120. package isn’t compatible
with PyXML, but can be made compatible by installing a recent version
PyXML. Many applications can get by with the XML support that is
included with Python 2.0, but more complicated applications will require
that the full PyXML package will be installed.  When installed, PyXML
versions 0.6.0 or greater will replace the *note xml: 120. package
shipped with Python, and will be a strict superset of the standard
package, adding a bunch of additional features.  Some of the additional
features in PyXML include:

   * 4DOM, a full DOM implementation from FourThought, Inc.

   * The xmlproc validating parser, written by Lars Marius Garshol.

   * The ‘sgmlop’ parser accelerator module, written by Fredrik Lundh.


File: python.info,  Node: Module changes,  Next: Novos módulos<12>,  Prev: XML Modules,  Up: What’s New in Python 2 0

1.22.14 Module changes
----------------------

Lots of improvements and bugfixes were made to Python’s extensive
standard library; some of the affected modules include *note readline:
ba, *note ConfigParser: 22, ‘cgi’, *note calendar: 14, *note posix: ad,
*note readline: ba, ‘xmllib’, ‘aifc’, ‘chunk’, *note wave: 113, *note
random: b8, *note shelve: c3, and ‘nntplib’.  Consult the CVS logs for
the exact patch-by-patch details.

Brian Gallew contributed OpenSSL support for the *note socket: cc.
module.  OpenSSL is an implementation of the Secure Socket Layer, which
encrypts the data being sent over a socket.  When compiling Python, you
can edit ‘Modules/Setup’ to include SSL support, which adds an
additional function to the *note socket: cc. module: ‘socket.ssl(socket,
keyfile, certfile)’, which takes a socket object and returns an SSL
socket.  The *note httplib: 6e. and *note urllib: 108. modules were also
changed to support ‘https://’ URLs, though no one has implemented FTP or
SMTP over SSL.

The *note httplib: 6e. module has been rewritten by Greg Stein to
support HTTP/1.1.

Backward compatibility with the 1.5 version of ‘httplib’ is provided,
though using HTTP/1.1 features such as pipelining will require rewriting
code to use a different set of interfaces.

The ‘Tkinter’ module now supports Tcl/Tk version 8.1, 8.2, or 8.3, and
support for the older 7.x versions has been dropped.  The Tkinter module
now supports displaying Unicode strings in Tk widgets.  Also, Fredrik
Lundh contributed an optimization which makes operations like
‘create_line’ and ‘create_polygon’ much faster, especially when using
lots of coordinates.

The *note curses: 2b. module has been greatly extended, starting from
Oliver Andrich’s enhanced version, to provide many additional functions
from ncurses and SYSV curses, such as colour, alternative character set
support, pads, and mouse support.  This means the module is no longer
compatible with operating systems that only have BSD curses, but there
don’t seem to be any currently maintained OSes that fall into this
category.

As mentioned in the earlier discussion of 2.0’s Unicode support, the
underlying implementation of the regular expressions provided by the
*note re: b9. module has been changed.  SRE, a new regular expression
engine written by Fredrik Lundh and partially funded by Hewlett Packard,
supports matching against both 8-bit strings and Unicode strings.


File: python.info,  Node: Novos módulos<12>,  Next: IDLE Improvements,  Prev: Module changes,  Up: What’s New in Python 2 0

1.22.15 Novos módulos
---------------------

A number of new modules were added.  We’ll simply list them with brief
descriptions; consult the 2.0 documentation for the details of a
particular module.

   * *note atexit: c.: For registering functions to be called before the
     Python interpreter exits.  Code that currently sets ‘sys.exitfunc’
     directly should be changed to use the *note atexit: c. module
     instead, importing *note atexit: c. and calling *note
     atexit.register(): 882. with the function to be called on exit.
     (Contributed by Skip Montanaro.)

   * *note codecs: 1b, ‘encodings’, *note unicodedata: 105.: Added as
     part of the new Unicode support.

   * *note filecmp: 5a.: Supersedes the old ‘cmp’, ‘cmpcache’ and
     ‘dircmp’ modules, which have now become deprecated.  (Contributed
     by Gordon MacMillan and Moshe Zadka.)

   * *note gettext: 63.: This module provides internationalization
     (I18N) and localization (L10N) support for Python programs by
     providing an interface to the GNU gettext message catalog library.
     (Integrated by Barry Warsaw, from separate contributions by Martin
     von Löwis, Peter Funk, and James Henstridge.)

   * ‘linuxaudiodev’: Support for the ‘/dev/audio’ device on Linux, a
     twin to the existing ‘sunaudiodev’ module.  (Contributed by Peter
     Bosch, with fixes by Jeremy Hylton.)

   * *note mmap: 90.: An interface to memory-mapped files on both
     Windows and Unix.  A file’s contents can be mapped directly into
     memory, at which point it behaves like a mutable string, so its
     contents can be read and modified.  They can even be passed to
     functions that expect ordinary strings, such as the *note re: b9.
     module.  (Contributed by Sam Rushing, with some extensions by A.M.
     Kuchling.)

   * ‘pyexpat’: An interface to the Expat XML parser.  (Contributed by
     Paul Prescod.)

   * *note robotparser: 10d.: Parse a ‘robots.txt’ file, which is used
     for writing web spiders that politely avoid certain areas of a web
     site.  The parser accepts the contents of a ‘robots.txt’ file,
     builds a set of rules from it, and can then answer questions about
     the fetchability of a given URL. (Contributed by Skip Montanaro.)

   * *note tabnanny: dd.: A module/script to check Python source code
     for ambiguous indentation.  (Contributed by Tim Peters.)

   * ‘UserString’: A base class useful for deriving objects that behave
     like strings.

   * *note webbrowser: 115.: A module that provides a platform
     independent way to launch a web browser on a specific URL. For each
     platform, various browsers are tried in a specific order.  The user
     can alter which browser is launched by setting the 'BROWSER'
     environment variable.  (Originally inspired by Eric S. Raymond’s
     patch to *note urllib: 108. which added similar functionality, but
     the final module comes from code originally implemented by Fred
     Drake as ‘Tools/idle/BrowserControl.py’, and adapted for the
     standard library by Fred.)

   * *note _winreg: 116.: An interface to the Windows registry.
     ‘_winreg’ is an adaptation of functions that have been part of
     PythonWin since 1995, but has now been added to the core
     distribution, and enhanced to support Unicode.  ‘_winreg’ was
     written by Bill Tutt and Mark Hammond.

   * *note zipfile: 131.: A module for reading and writing ZIP-format
     archives.  These are archives produced by ‘PKZIP’ on DOS/Windows or
     ‘zip’ on Unix, not to be confused with ‘gzip’-format files (which
     are supported by the *note gzip: 67. module) (Contributed by James
     C. Ahlstrom.)

   * ‘imputil’: A module that provides a simpler way for writing
     customized import hooks, in comparison to the existing ‘ihooks’
     module.  (Implemented by Greg Stein, with much discussion on
     python-dev along the way.)


File: python.info,  Node: IDLE Improvements,  Next: Deleted and Deprecated Modules,  Prev: Novos módulos<12>,  Up: What’s New in Python 2 0

1.22.16 IDLE Improvements
-------------------------

IDLE is the official Python cross-platform IDE, written using Tkinter.
Python 2.0 includes IDLE 0.6, which adds a number of new features and
improvements.  A partial list:

   * UI improvements and optimizations, especially in the area of syntax
     highlighting and auto-indentation.

   * The class browser now shows more information, such as the top level
     functions in a module.

   * Tab width is now a user settable option.  When opening an existing
     Python file, IDLE automatically detects the indentation
     conventions, and adapts.

   * There is now support for calling browsers on various platforms,
     used to open the Python documentation in a browser.

   * IDLE now has a command line, which is largely similar to the
     vanilla Python interpreter.

   * Call tips were added in many places.

   * IDLE can now be installed as a package.

   * In the editor window, there is now a line/column bar at the bottom.

   * Three new keystroke commands: Check module (‘Alt’-‘F5’), Import
     module (‘F5’) and Run script (‘Ctrl’-‘F5’).


File: python.info,  Node: Deleted and Deprecated Modules,  Next: Reconhecimentos<8>,  Prev: IDLE Improvements,  Up: What’s New in Python 2 0

1.22.17 Deleted and Deprecated Modules
--------------------------------------

A few modules have been dropped because they’re obsolete, or because
there are now better ways to do the same thing.  The ‘stdwin’ module is
gone; it was for a platform-independent windowing toolkit that’s no
longer developed.

A number of modules have been moved to the ‘lib-old’ subdirectory:
‘cmp’, ‘cmpcache’, ‘dircmp’, ‘dump’, ‘find’, ‘grep’, ‘packmail’, ‘poly’,
‘util’, ‘whatsound’, ‘zmod’.  If you have code which relies on a module
that’s been moved to ‘lib-old’, you can simply add that directory to
‘sys.path’ to get them back, but you’re encouraged to update any code
that uses these modules.


File: python.info,  Node: Reconhecimentos<8>,  Prev: Deleted and Deprecated Modules,  Up: What’s New in Python 2 0

1.22.18 Reconhecimentos
-----------------------

The authors would like to thank the following people for offering
suggestions on various drafts of this article: David Bolen, Mark
Hammond, Gregg Hauser, Jeremy Hylton, Fredrik Lundh, Detlef Lannert,
Aahz Maruch, Skip Montanaro, Vladimir Marangozov, Tobias Polzin, Guido
van Rossum, Neil Schemenauer, and Russ Schmidt.

O “Changelog” é uma versão HTML do arquivo construído(1) do conteúdo da
árvore de diretórios Misc/NEWS.d(2), que contém 'todas' as mudanças não
triviais do Python para a versão atual.

   ---------- Footnotes ----------

   (1) https://pypi.org/project/blurb/

   (2) https://github.com/python/cpython/tree/3.13/Misc/NEWS.d


File: python.info,  Node: Changelog,  Prev: What’s New in Python 2 0,  Up: O que há de novo no Python

1.23 Changelog
==============

* Menu:

* Python seguinte::
* Python 3.13.11 final: Python 3 13 11 final.
* Python 3.13.10 final: Python 3 13 10 final.
* Python 3.13.9 final: Python 3 13 9 final.
* Python 3.13.8 final: Python 3 13 8 final.
* Python 3.13.7 final: Python 3 13 7 final.
* Python 3.13.6 final: Python 3 13 6 final.
* Python 3.13.5 final: Python 3 13 5 final.
* Python 3.13.4 final: Python 3 13 4 final.
* Python 3.13.3 final: Python 3 13 3 final.
* Python 3.13.2 final: Python 3 13 2 final.
* Python 3.13.1 final: Python 3 13 1 final.
* Python 3.13.0 final: Python 3 13 0 final.
* Python 3.13.0 release candidate 3: Python 3 13 0 release candidate 3.
* Python 3.13.0 release candidate 2: Python 3 13 0 release candidate 2.
* Python 3.13.0 release candidate 1: Python 3 13 0 release candidate 1.
* Python 3.13.0 beta 4: Python 3 13 0 beta 4.
* Python 3.13.0 beta 3: Python 3 13 0 beta 3.
* Python 3.13.0 beta 2: Python 3 13 0 beta 2.
* Python 3.13.0 beta 1: Python 3 13 0 beta 1.
* Python 3.13.0 alpha 6: Python 3 13 0 alpha 6.
* Python 3.13.0 alpha 5: Python 3 13 0 alpha 5.
* Python 3.13.0 alpha 4: Python 3 13 0 alpha 4.
* Python 3.13.0 alpha 3: Python 3 13 0 alpha 3.
* Python 3.13.0 alpha 2: Python 3 13 0 alpha 2.
* Python 3.13.0 alpha 1: Python 3 13 0 alpha 1.
* Python 3.12.0 beta 1: Python 3 12 0 beta 1.
* Python 3.12.0 alpha 7: Python 3 12 0 alpha 7.
* Python 3.12.0 alpha 6: Python 3 12 0 alpha 6.
* Python 3.12.0 alpha 5: Python 3 12 0 alpha 5.
* Python 3.12.0 alpha 4: Python 3 12 0 alpha 4.
* Python 3.12.0 alpha 3: Python 3 12 0 alpha 3.
* Python 3.12.0 alpha 2: Python 3 12 0 alpha 2.
* Python 3.12.0 alpha 1: Python 3 12 0 alpha 1.
* Python 3.11.0 beta 1: Python 3 11 0 beta 1.
* Python 3.11.0 alpha 7: Python 3 11 0 alpha 7.
* Python 3.11.0 alpha 6: Python 3 11 0 alpha 6.
* Python 3.11.0 alpha 5: Python 3 11 0 alpha 5.
* Python 3.11.0 alpha 4: Python 3 11 0 alpha 4.
* Python 3.11.0 alpha 3: Python 3 11 0 alpha 3.
* Python 3.11.0 alpha 2: Python 3 11 0 alpha 2.
* Python 3.11.0 alpha 1: Python 3 11 0 alpha 1.
* Python 3.10.0 beta 1: Python 3 10 0 beta 1.
* Python 3.10.0 alpha 7: Python 3 10 0 alpha 7.
* Python 3.10.0 alpha 6: Python 3 10 0 alpha 6.
* Python 3.10.0 alpha 5: Python 3 10 0 alpha 5.
* Python 3.10.0 alpha 4: Python 3 10 0 alpha 4.
* Python 3.10.0 alpha 3: Python 3 10 0 alpha 3.
* Python 3.10.0 alpha 2: Python 3 10 0 alpha 2.
* Python 3.10.0 alpha 1: Python 3 10 0 alpha 1.
* Python 3.9.0 beta 1: Python 3 9 0 beta 1.
* Python 3.9.0 alpha 6: Python 3 9 0 alpha 6.
* Python 3.9.0 alpha 5: Python 3 9 0 alpha 5.
* Python 3.9.0 alpha 4: Python 3 9 0 alpha 4.
* Python 3.9.0 alpha 3: Python 3 9 0 alpha 3.
* Python 3.9.0 alpha 2: Python 3 9 0 alpha 2.
* Python 3.9.0 alpha 1: Python 3 9 0 alpha 1.
* Python 3.8.0 beta 1: Python 3 8 0 beta 1.
* Python 3.8.0 alpha 4: Python 3 8 0 alpha 4.
* Python 3.8.0 alpha 3: Python 3 8 0 alpha 3.
* Python 3.8.0 alpha 2: Python 3 8 0 alpha 2.
* Python 3.8.0 alpha 1: Python 3 8 0 alpha 1.
* Python 3.7.0 final: Python 3 7 0 final.
* Python 3.7.0 release candidate 1: Python 3 7 0 release candidate 1.
* Python 3.7.0 beta 5: Python 3 7 0 beta 5.
* Python 3.7.0 beta 4: Python 3 7 0 beta 4.
* Python 3.7.0 beta 3: Python 3 7 0 beta 3.
* Python 3.7.0 beta 2: Python 3 7 0 beta 2.
* Python 3.7.0 beta 1: Python 3 7 0 beta 1.
* Python 3.7.0 alpha 4: Python 3 7 0 alpha 4.
* Python 3.7.0 alpha 3: Python 3 7 0 alpha 3.
* Python 3.7.0 alpha 2: Python 3 7 0 alpha 2.
* Python 3.7.0 alpha 1: Python 3 7 0 alpha 1.
* Python 3.6.6 final: Python 3 6 6 final.
* Python 3.6.6 release candidate 1: Python 3 6 6 release candidate 1.
* Python 3.6.5 final: Python 3 6 5 final.
* Python 3.6.5 release candidate 1: Python 3 6 5 release candidate 1.
* Python 3.6.4 final: Python 3 6 4 final.
* Python 3.6.4 release candidate 1: Python 3 6 4 release candidate 1.
* Python 3.6.3 final: Python 3 6 3 final.
* Python 3.6.3 release candidate 1: Python 3 6 3 release candidate 1.
* Python 3.6.2 final: Python 3 6 2 final.
* Python 3.6.2 release candidate 2: Python 3 6 2 release candidate 2.
* Python 3.6.2 release candidate 1: Python 3 6 2 release candidate 1.
* Python 3.6.1 final: Python 3 6 1 final.
* Python 3.6.1 release candidate 1: Python 3 6 1 release candidate 1.
* Python 3.6.0 final: Python 3 6 0 final.
* Python 3.6.0 release candidate 2: Python 3 6 0 release candidate 2.
* Python 3.6.0 release candidate 1: Python 3 6 0 release candidate 1.
* Python 3.6.0 beta 4: Python 3 6 0 beta 4.
* Python 3.6.0 beta 3: Python 3 6 0 beta 3.
* Python 3.6.0 beta 2: Python 3 6 0 beta 2.
* Python 3.6.0 beta 1: Python 3 6 0 beta 1.
* Python 3.6.0 alpha 4: Python 3 6 0 alpha 4.
* Python 3.6.0 alpha 3: Python 3 6 0 alpha 3.
* Python 3.6.0 alpha 2: Python 3 6 0 alpha 2.
* Python 3.6.0 alpha 1: Python 3 6 0 alpha 1.
* Python 3.5.5 final: Python 3 5 5 final.
* Python 3.5.5 release candidate 1: Python 3 5 5 release candidate 1.
* Python 3.5.4 final: Python 3 5 4 final.
* Python 3.5.4 release candidate 1: Python 3 5 4 release candidate 1.
* Python 3.5.3 final: Python 3 5 3 final.
* Python 3.5.3 release candidate 1: Python 3 5 3 release candidate 1.
* Python 3.5.2 final: Python 3 5 2 final.
* Python 3.5.2 release candidate 1: Python 3 5 2 release candidate 1.
* Python 3.5.1 final: Python 3 5 1 final.
* Python 3.5.1 release candidate 1: Python 3 5 1 release candidate 1.
* Python 3.5.0 final: Python 3 5 0 final.
* Python 3.5.0 release candidate 4: Python 3 5 0 release candidate 4.
* Python 3.5.0 release candidate 3: Python 3 5 0 release candidate 3.
* Python 3.5.0 release candidate 2: Python 3 5 0 release candidate 2.
* Python 3.5.0 release candidate 1: Python 3 5 0 release candidate 1.
* Python 3.5.0 beta 4: Python 3 5 0 beta 4.
* Python 3.5.0 beta 3: Python 3 5 0 beta 3.
* Python 3.5.0 beta 2: Python 3 5 0 beta 2.
* Python 3.5.0 beta 1: Python 3 5 0 beta 1.
* Python 3.5.0 alpha 4: Python 3 5 0 alpha 4.
* Python 3.5.0 alpha 3: Python 3 5 0 alpha 3.
* Python 3.5.0 alpha 2: Python 3 5 0 alpha 2.
* Python 3.5.0 alpha 1: Python 3 5 0 alpha 1.


File: python.info,  Node: Python seguinte,  Next: Python 3 13 11 final,  Up: Changelog

1.23.1 Python seguinte
----------------------

'Data de lançamento: XXXX-XX-XX'

* Menu:

* Windows::
* Ferramentas/Demos::
* Testes::
* Segurança::
* Biblioteca::
* IDLE: IDLE<3>.
* Núcleo e embutidos::
* API C::
* Construção::


File: python.info,  Node: Windows,  Next: Ferramentas/Demos,  Up: Python seguinte

1.23.1.1 Windows
................

   - gh-128067(1): Fix a bug in PyREPL on Windows where output without a
     trailing newline was overwritten by the next prompt.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/128067


File: python.info,  Node: Ferramentas/Demos,  Next: Testes,  Prev: Windows,  Up: Python seguinte

1.23.1.2 Ferramentas/Demos
..........................

   - gh-142095(1): Make gdb ‘py-bt’ command use frame from thread local
     state when available.  Patch by Sam Gross and Victor Stinner.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/142095


File: python.info,  Node: Testes,  Next: Segurança,  Prev: Ferramentas/Demos,  Up: Python seguinte

1.23.1.3 Testes
...............

   - gh-65784(1): Add support for parametrized resource ‘wantobjects’ in
     regrtests, which allows to run Tkinter tests with the specified
     value of ‘tkinter.wantobjects’, for example ‘-u wantobjects=0’.

   - gh-143553(2): Add support for parametrized resources, such as ‘-u
     xpickle=2.7’.

   - gh-142836(3): Accommodated Solaris in
     ‘test_pdb.test_script_target_anonymous_pipe’.

   - bpo-31391(4): Forward-port test_xpickle from Python 2 to Python 3
     and add the resource back to test’s command line.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/65784

   (2) https://github.com/python/cpython/issues/143553

   (3) https://github.com/python/cpython/issues/142836

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31391


File: python.info,  Node: Segurança,  Next: Biblioteca,  Prev: Testes,  Up: Python seguinte

1.23.1.4 Segurança
..................

   - gh-144125(1): *note BytesGenerator: 120f. will now refuse to
     serialize (write) headers that are unsafely folded or delimited;
     see *note verify_generated_headers: 1e0.  (Contributed by Bas
     Bloemsaat and Petr Viktorin in gh-121650(2)).

   - gh-143935(3): Fixed a bug in the folding of comments when
     flattening an email message using a modern email policy.  Comments
     consisting of a very long sequence of non-foldable characters could
     trigger a forced line wrap that omitted the required leading space
     on the continuation line, causing the remainder of the comment to
     be interpreted as a new header field.  This enabled header
     injection with carefully crafted inputs.

   - gh-143925(4): Reject control characters in ‘data:’ URL media types.

   - gh-143919(5): Reject control characters in *note
     http.cookies.Morsel: c1e. fields and values.

   - gh-143916(6): Reject C0 control characters within
     wsgiref.headers.Headers fields, values, and parameters.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/144125

   (2) https://github.com/python/cpython/issues/121650

   (3) https://github.com/python/cpython/issues/143935

   (4) https://github.com/python/cpython/issues/143925

   (5) https://github.com/python/cpython/issues/143919

   (6) https://github.com/python/cpython/issues/143916


File: python.info,  Node: Biblioteca,  Next: IDLE<3>,  Prev: Segurança,  Up: Python seguinte

1.23.1.5 Biblioteca
...................

   - gh-144169(1): Fix three crashes when non-string keyword arguments
     are supplied to objects in the *note ast: 8. module.

   - gh-144100(2): Fixed a crash in ctypes when using a deprecated
     ‘POINTER(str)’ type in ‘argtypes’.  Instead of aborting, ctypes now
     raises a proper Python exception when the pointer target type is
     unresolved.

   - gh-144050(3): Fix *note stat.filemode(): 118a. in the pure-Python
     implementation to avoid misclassifying invalid mode values as block
     devices.

   - gh-144023(4): Fixed validation of file descriptor 0 in posix
     functions when used with follow_symlinks parameter.

   - gh-143999(5): Fix an issue where *note inspect.getgeneratorstate():
     1277. and *note inspect.getcoroutinestate(): e45. could fail for
     generators wrapped by *note types.coroutine(): eb7. in the
     suspended state.

   - gh-143706(6): Fix *note multiprocessing: 94. forkserver so that
     *note sys.argv: 12a6. is correctly set before ‘__main__’ is
     preloaded.  Previously, *note sys.argv: 12a6. was empty during main
     module import in forkserver child processes.  This fixes a
     regression introduced in 3.13.8 and 3.14.1.  Root caused by Aaron
     Wieczorek, test provided by Thomas Watson, thanks!

   - gh-143638(7): Forbid reentrant calls of the *note pickle.Pickler:
     a28. and *note pickle.Unpickler: 159f. methods for the C
     implementation.  Previously, this could cause crash or data
     corruption, now concurrent calls of methods of the same object
     raise *note RuntimeError: 195.

   - gh-78724(8): Raise *note RuntimeError: 195.’s when user attempts to
     call methods on half-initialized *note Struct: 15a0. objects, For
     example, created by ‘Struct.__new__(Struct)’.  Patch by Sergey B
     Kirpichev.

   - gh-143602(9): Fix a inconsistency issue in *note write(): 13f2.
     that leads to unexpected buffer overwrite by deduplicating the
     buffer exports.

   - gh-143547(10): Fix *note sys.unraisablehook(): 1f7. when the hook
     raises an exception and changes *note sys.unraisablehook(): 1f7.:
     hold a strong reference to the old hook.  Patch by Victor Stinner.

   - gh-143378(11): Fix use-after-free crashes when a *note BytesIO:
     ed3. object is concurrently mutated during *note write(): 13f2. or
     *note writelines(): 15a1.

   - gh-143346(12): Fix incorrect wrapping of the Base64 data in
     ‘plistlib._PlistWriter’ when the indent contains a mix of tabs and
     spaces.

   - gh-143310(13): *note tkinter: f0.: fix a crash when a Python *note
     list: 611. is mutated during the conversion to a Tcl object (e.g.,
     when setting a Tcl variable).  Patch by Bénédikt Tran.

   - gh-143309(14): Fix a crash in *note os.execve(): 1138. on
     non-Windows platforms when given a custom environment mapping which
     is then mutated during parsing.  Patch by Bénédikt Tran.

   - gh-143308(15): *note pickle: a6.: fix use-after-free crashes when a
     *note PickleBuffer: 15a2. is concurrently mutated by a custom
     buffer callback during pickling.  Patch by Bénédikt Tran and Aaron
     Wieczorek.

   - gh-143237(16): Fix support of named pipes in the rotating *note
     logging: 87. handlers.

   - gh-143249(17): Fix possible buffer leaks in Windows overlapped I/O
     on error handling.

   - gh-143241(18): *note zoneinfo: 134.: fix infinite loop in *note
     ZoneInfo.from_file: 15a3. when parsing a malformed TZif file.
     Patch by Fatih Celik.

   - gh-142830(19): *note sqlite3: cf.: fix use-after-free crashes when
     the connection’s callbacks are mutated during a callback execution.
     Patch by Bénédikt Tran.

   - gh-143200(20): *note xml.etree.ElementTree: 125.: fix
     use-after-free crashes in *note __getitem__(): 283. and *note
     __setitem__(): 130e. methods of *note Element: 310. when the
     element is concurrently mutated.  Patch by Bénédikt Tran.

   - gh-142195(21): Updated timeout evaluation logic in *note
     subprocess: d6. to be compatible with deterministic environments
     like Shadow where time moves exactly as requested.

   - gh-143145(22): Fixed a possible reference leak in ctypes when
     constructing results with multiple output parameters on error.

   - gh-122431(23): Corrected the error message in *note
     readline.append_history_file(): e7f. to state that ‘nelements’ must
     be non-negative instead of positive.

   - gh-143004(24): Fix a potential use-after-free in *note
     collections.Counter.update(): 15a4. when user code mutates the
     Counter during an update.

   - gh-143046(25): The *note asyncio: a. REPL no longer prints
     copyright and version messages in the quiet mode (*note -q: 15a5.).
     Patch by Bartosz Sławecki.

   - gh-140648(26): The *note asyncio: a. REPL now respects the *note
     -I: 965. flag (isolated mode).  Previously, it would load and
     execute *note PYTHONSTARTUP: ffe. even if the flag was set.
     Contributed by Bartosz Sławecki.

   - gh-142991(27): Fixed socket operations such as recvfrom() and
     sendto() for FreeBSD divert(4) socket.

   - gh-143010(28): Fixed a bug in *note mailbox: 8b. where the precise
     timing of an external event could result in the library opening an
     existing file instead of a file it expected to create.

   - gh-142881(29): Fix concurrent and reentrant call of *note
     atexit.unregister(): 15a6.

   - gh-112127(30): Fix possible use-after-free in *note
     atexit.unregister(): 15a6. when the callback is unregistered during
     comparison.

   - gh-142783(31): Fix zoneinfo use-after-free with descriptor
     _weak_cache.  a descriptor as _weak_cache could cause crashes
     during object creation.  The fix ensures proper reference counting
     for descriptor-provided objects.

   - gh-142754(32): Add the 'ownerDocument' attribute to *note
     xml.dom.minidom: 122. elements and attributes created by directly
     instantiating the ‘Element’ or ‘Attr’ class.  Note that this way of
     creating nodes is not supported; creator functions like *note
     xml.dom.Document.documentElement(): 15a7. should be used instead.

   - gh-142784(33): The *note asyncio: a. REPL now properly closes the
     loop upon the end of interactive session.  Previously, it could
     cause surprising warnings.  Contributed by Bartosz Sławecki.

   - gh-142594(34): Fix crash in ‘TextIOWrapper.close()’ when the
     underlying buffer’s ‘closed’ property calls *note detach(): 15a8.

   - gh-142451(35): *note hmac: 6a.: Ensure that the *note
     HMAC.block_size: f7e. attribute is correctly copied by *note
     HMAC.copy: 15a9.  Patch by Bénédikt Tran.

   - gh-142495(36): *note collections.defaultdict: 11fc. now prioritizes
     *note __setitem__(): 130e. when inserting default values from
     ‘default_factory’.  This prevents race conditions where a default
     value would overwrite a value set before ‘default_factory’ returns.

   - gh-142651(37): *note unittest.mock: 107.: fix a thread safety issue
     where *note Mock.call_count: 15aa. may return inaccurate values
     when the mock is called concurrently from multiple threads.

   - gh-142595(38): Added type check during initialization of the *note
     decimal: 36. module to prevent a crash in case of broken stdlib.
     Patch by Sergey B Kirpichev.

   - gh-142517(39): The non-‘compat32’ *note email: 3b. policies now
     correctly handle refolding encoded words that contain bytes that
     can not be decoded in their specified character set.  Previously
     this resulted in an encoding exception during folding.

   - gh-112527(40): The help text for required options in *note
     argparse: 6. no longer extended with “ (default: None)”.

   - gh-142315(41): Pdb can now run scripts from anonymous pipes used in
     process substitution.  Patch by Bartosz Sławecki.

   - gh-142282(42): Fix *note winreg.QueryValueEx(): 15ab. to not
     accidentally read garbage buffer under race condition.

   - gh-75949(43): Corrige o *note argparse: 6. para preservar os
     separadores ‘|’ em grupos mutuamente exclusivos quando a linha de
     uso quebra devido ao comprimento.

   - gh-68552(44): Os defeitos ‘MisplacedEnvelopeHeaderDefect’ e
     ‘Missing header name’ agora são passados corretamente para o método
     ‘handle_defect’ de ‘policy’ em *note FeedParser: 15ac.

   - gh-142006(45): Corrige um bug no algoritmo de recolhimento do mod
     *note email.policy.default: 15ad. que resultava incorretamente em
     uma quebra de linha duplicada quando uma linha que terminava
     exatamente em max_line_length era seguida por um token que podia
     ser desdobrado.

   - gh-105836(46): Fix *note asyncio.run_coroutine_threadsafe(): 886.
     leaving underlying cancelled asyncio task running.

   - gh-139971(47): *note pydoc: b5.: Ensure that the link to the online
     documentation of a *note stdlib: 15ae. module is correct.

   - gh-139262(48): Some keystrokes can be swallowed in the new ‘PyREPL’
     on Windows, especially when used together with the ALT key.  Fix by
     Chris Eibl.

   - gh-138897(49): Improved *note license: 15af./*note copyright:
     15b0./*note credits: 15b1. display in the *note REPL: 16a.: now
     uses a pager.

   - gh-79986(50): Add parsing for ‘References’ and ‘In-Reply-To’
     headers to the *note email: 3b. library that parses the header
     content as lists of message id tokens.  This prevents them from
     being folded incorrectly.

   - gh-109263(51): Starting a process from spawn context in *note
     multiprocessing: 94. no longer sets the start method globally.

   - gh-90871(52): Corrigido um erro de um erro referente ao parâmetro
     backlog em *note create_unix_server(): 1ae.  Contribuição de
     Christian Harries.

   - gh-133253(53): Fix thread-safety issues in *note linecache: 85.

   - gh-132715(54): Skip writing objects during marshalling once a
     failure has occurred.

   - gh-127529(55): Corrige o comportamento de
     ‘asyncio.selector_events.BaseSelectorEventLoop._accept_connection()’
     ao lidar com *note ConnectionAbortedError: 1096. em um laço.  Isso
     melhora o desempenho no OpenBSD.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/144169

   (2) https://github.com/python/cpython/issues/144100

   (3) https://github.com/python/cpython/issues/144050

   (4) https://github.com/python/cpython/issues/144023

   (5) https://github.com/python/cpython/issues/143999

   (6) https://github.com/python/cpython/issues/143706

   (7) https://github.com/python/cpython/issues/143638

   (8) https://github.com/python/cpython/issues/78724

   (9) https://github.com/python/cpython/issues/143602

   (10) https://github.com/python/cpython/issues/143547

   (11) https://github.com/python/cpython/issues/143378

   (12) https://github.com/python/cpython/issues/143346

   (13) https://github.com/python/cpython/issues/143310

   (14) https://github.com/python/cpython/issues/143309

   (15) https://github.com/python/cpython/issues/143308

   (16) https://github.com/python/cpython/issues/143237

   (17) https://github.com/python/cpython/issues/143249

   (18) https://github.com/python/cpython/issues/143241

   (19) https://github.com/python/cpython/issues/142830

   (20) https://github.com/python/cpython/issues/143200

   (21) https://github.com/python/cpython/issues/142195

   (22) https://github.com/python/cpython/issues/143145

   (23) https://github.com/python/cpython/issues/122431

   (24) https://github.com/python/cpython/issues/143004

   (25) https://github.com/python/cpython/issues/143046

   (26) https://github.com/python/cpython/issues/140648

   (27) https://github.com/python/cpython/issues/142991

   (28) https://github.com/python/cpython/issues/143010

   (29) https://github.com/python/cpython/issues/142881

   (30) https://github.com/python/cpython/issues/112127

   (31) https://github.com/python/cpython/issues/142783

   (32) https://github.com/python/cpython/issues/142754

   (33) https://github.com/python/cpython/issues/142784

   (34) https://github.com/python/cpython/issues/142594

   (35) https://github.com/python/cpython/issues/142451

   (36) https://github.com/python/cpython/issues/142495

   (37) https://github.com/python/cpython/issues/142651

   (38) https://github.com/python/cpython/issues/142595

   (39) https://github.com/python/cpython/issues/142517

   (40) https://github.com/python/cpython/issues/112527

   (41) https://github.com/python/cpython/issues/142315

   (42) https://github.com/python/cpython/issues/142282

   (43) https://github.com/python/cpython/issues/75949

   (44) https://github.com/python/cpython/issues/68552

   (45) https://github.com/python/cpython/issues/142006

   (46) https://github.com/python/cpython/issues/105836

   (47) https://github.com/python/cpython/issues/139971

   (48) https://github.com/python/cpython/issues/139262

   (49) https://github.com/python/cpython/issues/138897

   (50) https://github.com/python/cpython/issues/79986

   (51) https://github.com/python/cpython/issues/109263

   (52) https://github.com/python/cpython/issues/90871

   (53) https://github.com/python/cpython/issues/133253

   (54) https://github.com/python/cpython/issues/132715

   (55) https://github.com/python/cpython/issues/127529


File: python.info,  Node: IDLE<3>,  Next: Núcleo e embutidos,  Prev: Biblioteca,  Up: Python seguinte

1.23.1.6 IDLE
.............

   - gh-143774(1): Better explain the operation of Format / Format
     Paragraph.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/143774


File: python.info,  Node: Núcleo e embutidos,  Next: API C,  Prev: IDLE<3>,  Up: Python seguinte

1.23.1.7 Núcleo e embutidos
...........................

   - gh-144307(1): Prevent a reference leak in module teardown at
     interpreter finalization.

   - gh-144194(2): Fix error handling in perf jitdump initialization on
     memory allocation failure.

   - gh-141805(3): Fix crash in *note set: 5d9. when objects with the
     same hash are concurrently added to the set after removing an
     element with the same hash while the set still contains elements
     with the same hash.

   - gh-143670(4): Fixes a crash in ‘ga_repr_items_list’ function.

   - gh-143377(5): Fix a crash in ‘_interpreters.capture_exception()’
     when the exception is incorrectly formatted.  Patch by Bénédikt
     Tran.

   - gh-143189(6): Fix crash when inserting a non-*note str: 44c. key
     into a split table dictionary when the key matches an existing key
     in the split table but has no corresponding value in the dict.

   - gh-143228(7): Fix use-after-free in perf trampoline when toggling
     profiling while threads are running or during interpreter
     finalization with daemon threads active.  The fix uses reference
     counting to ensure trampolines are not freed while any code object
     could still reference them.  Pach by Pablo Galindo

   - gh-142664(8): Fix a use-after-free crash in *note
     memoryview.__hash__: b0e. when the ‘__hash__’ method of the
     referenced object mutates that object or the view.  Patch by
     Bénédikt Tran.

   - gh-142557(9): Fix a use-after-free crash in *note
     bytearray.__mod__: da9. when the ‘bytearray’ is mutated while
     formatting the ‘%’-style arguments.  Patch by Bénédikt Tran.

   - gh-143195(10): Fix use-after-free crashes in *note bytearray.hex():
     d8e. and *note memoryview.hex(): d8f. when the separator’s *note
     __len__(): 15b4. mutates the original object.  Patch by Bénédikt
     Tran.

   - gh-143135(11): Set *note sys.flags.inspect: 15b5. to ‘1’ when *note
     PYTHONINSPECT: 1522. is ‘0’.  Previously, it was set to ‘0’ in this
     case.

   - gh-143003(12): Fix an overflow of the shared empty buffer in *note
     bytearray.extend(): 15b6. when ‘__length_hint__()’ returns 0 for
     non-empty iterator.

   - gh-143006(13): Fix a possible assertion error when comparing
     negative non-integer ‘float’ and ‘int’ with the same number of bits
     in the integer part.

   - gh-142776(14): Fix a file descriptor leak in import.c

   - gh-142829(15): Fix a use-after-free crash in *note
     contextvars.Context: 15b7. comparison when a custom ‘__eq__’ method
     modifies the context via *note set(): 15b8.

   - gh-142766(16): Clear the frame of a generator when *note
     generator.close(): 15b9. is called.

   - gh-142737(17): Tracebacks will be displayed in fallback mode even
     if *note io.open(): 51d. is lost.  Previously, this would crash the
     interpreter.  Patch by Bartosz Sławecki.

   - gh-142554(18): Fix a crash in *note divmod(): 9a9. when
     ‘_pylong.int_divmod()’ does not return a tuple of length two
     exactly.  Patch by Bénédikt Tran.

   - gh-142560(19): Fix use-after-free in *note bytearray: 2ea.
     search-like methods (*note find(): 13ea, *note count(): 15ba, *note
     index(): 15bb, *note rindex(): 15bc, and *note rfind(): 13eb.) by
     marking the storage as exported which causes reallocation attempts
     to raise *note BufferError: 15bd.  For *note contains(): 8e0, *note
     split(): 15be, and *note rsplit(): 15bf. the *note buffer protocol:
     2e8. is used for this.

   - gh-142343(20): Fix SIGILL crash on m68k due to incorrect assembly
     constraint.

   - gh-141732(21): Ensure the *note __repr__(): 61c. for *note
     ExceptionGroup: 1b6. and *note BaseExceptionGroup: 25f. does not
     change when the exception sequence that was original passed in to
     its constructor is subsequently mutated.

   - gh-100964(22): Fix reference cycle in exhausted generator frames.
     Patch by Savannah Ostrowski.

   - gh-140373(23): Correctly emit ‘PY_UNWIND’ event when generator
     object is closed.  Patch by Mikhail Efimov.

   - gh-138568(24): Adjusted the built-in *note help(): 8dd. function so
     that empty inputs are ignored in interactive mode.

   - gh-127773(25): Não usa o cache de atributos de tipo para tipos com
     uma *note MRO: 15c0. incompatível.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/144307

   (2) https://github.com/python/cpython/issues/144194

   (3) https://github.com/python/cpython/issues/141805

   (4) https://github.com/python/cpython/issues/143670

   (5) https://github.com/python/cpython/issues/143377

   (6) https://github.com/python/cpython/issues/143189

   (7) https://github.com/python/cpython/issues/143228

   (8) https://github.com/python/cpython/issues/142664

   (9) https://github.com/python/cpython/issues/142557

   (10) https://github.com/python/cpython/issues/143195

   (11) https://github.com/python/cpython/issues/143135

   (12) https://github.com/python/cpython/issues/143003

   (13) https://github.com/python/cpython/issues/143006

   (14) https://github.com/python/cpython/issues/142776

   (15) https://github.com/python/cpython/issues/142829

   (16) https://github.com/python/cpython/issues/142766

   (17) https://github.com/python/cpython/issues/142737

   (18) https://github.com/python/cpython/issues/142554

   (19) https://github.com/python/cpython/issues/142560

   (20) https://github.com/python/cpython/issues/142343

   (21) https://github.com/python/cpython/issues/141732

   (22) https://github.com/python/cpython/issues/100964

   (23) https://github.com/python/cpython/issues/140373

   (24) https://github.com/python/cpython/issues/138568

   (25) https://github.com/python/cpython/issues/127773


File: python.info,  Node: API C,  Next: Construção,  Prev: Núcleo e embutidos,  Up: Python seguinte

1.23.1.8 API C
..............

   - gh-142571(1): ‘PyUnstable_CopyPerfMapFile()’ now checks that
     opening the file succeeded before flushing.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/142571


File: python.info,  Node: Construção,  Prev: API C,  Up: Python seguinte

1.23.1.9 Construção
...................

   - gh-142454(1): When calculating the digest of the JIT stencils
     input, sort the hashed files by filenames before adding their
     content to the hasher.  This ensures deterministic hash input and
     hence deterministic hash, independent on filesystem order.

   - gh-141808(2): When running ‘make clean-retain-profile’, keep the
     generated JIT stencils.  That way, the stencils are not generated
     twice when Profile-guided optimization (PGO) is used.  It also
     allows distributors to supply their own pre-built JIT stencils.

   - gh-138061(3): Ensure reproducible builds by making JIT stencil
     header generation deterministic.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/142454

   (2) https://github.com/python/cpython/issues/141808

   (3) https://github.com/python/cpython/issues/138061


File: python.info,  Node: Python 3 13 11 final,  Next: Python 3 13 10 final,  Prev: Python seguinte,  Up: Changelog

1.23.2 Python 3.13.11 final
---------------------------

'Release date: 2025-12-05'

* Menu:

* Segurança: Segurança<2>.
* Biblioteca: Biblioteca<2>.
* Núcleo e embutidos: Núcleo e embutidos<2>.


File: python.info,  Node: Segurança<2>,  Next: Biblioteca<2>,  Up: Python 3 13 11 final

1.23.2.1 Segurança
..................

   - gh-142145(1): Remove quadratic behavior in ‘xml.minidom’ node ID
     cache clearing.

   - gh-119451(2): Fix a potential memory denial of service in the *note
     http.client: 6f. module.  When connecting to a malicious server, it
     could cause an arbitrary amount of memory to be allocated.  This
     could have led to symptoms including a *note MemoryError: 15c5,
     swapping, out of memory (OOM) killed processes or containers, or
     even system crashes.

   - gh-119452(3): Fix a potential memory denial of service in the *note
     http.server: 72. module.  When a malicious user is connected to the
     CGI server on Windows, it could cause an arbitrary amount of memory
     to be allocated.  This could have led to symptoms including a *note
     MemoryError: 15c5, swapping, out of memory (OOM) killed processes
     or containers, or even system crashes.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/142145

   (2) https://github.com/python/cpython/issues/119451

   (3) https://github.com/python/cpython/issues/119452


File: python.info,  Node: Biblioteca<2>,  Next: Núcleo e embutidos<2>,  Prev: Segurança<2>,  Up: Python 3 13 11 final

1.23.2.2 Biblioteca
...................

   - gh-140797(1): Revert changes to the undocumented ‘re.Scanner’
     class.  Capturing groups are still allowed for backward
     compatibility, although using them can lead to incorrect result.
     They will be forbidden in future Python versions.

   - gh-142206(2): The resource tracker in the *note multiprocessing:
     94. module now uses the original communication protocol, as in
     Python 3.14.0 and below, by default.  This avoids issues with
     upgrading Python while it is running.  (Note that such ‘in-place’
     upgrades are not tested.)  The tracker remains compatible with
     subprocesses that use new protocol (that is, subprocesses using
     Python 3.13.10, 3.14.1 and 3.15).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/140797

   (2) https://github.com/python/cpython/issues/142206


File: python.info,  Node: Núcleo e embutidos<2>,  Prev: Biblioteca<2>,  Up: Python 3 13 11 final

1.23.2.3 Núcleo e embutidos
...........................

   - gh-142218(1): Fix crash when inserting into a split table
     dictionary with a non *note str: 44c. key that matches an existing
     key.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/142218


File: python.info,  Node: Python 3 13 10 final,  Next: Python 3 13 9 final,  Prev: Python 3 13 11 final,  Up: Changelog

1.23.3 Python 3.13.10 final
---------------------------

'Release date: 2025-12-02'

* Menu:

* Ferramentas/Demos: Ferramentas/Demos<2>.
* Testes: Testes<2>.
* Segurança: Segurança<3>.
* Biblioteca: Biblioteca<3>.
* IDLE: IDLE<4>.
* Documentação: Documentação<2>.
* Núcleo e embutidos: Núcleo e embutidos<3>.
* API C: API C<2>.


File: python.info,  Node: Ferramentas/Demos<2>,  Next: Testes<2>,  Up: Python 3 13 10 final

1.23.3.1 Ferramentas/Demos
..........................

   - gh-141442(1): O ambiente de testes do iOS agora lida corretamente
     com argumentos de teste que contêm espaços.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/141442


File: python.info,  Node: Testes<2>,  Next: Segurança<3>,  Prev: Ferramentas/Demos<2>,  Up: Python 3 13 10 final

1.23.3.2 Testes
...............

   - gh-140482(1): Preserva e restaura o estado de ‘stty echo’ como
     parte do ambiente de teste.

   - gh-140082(2): Atualiza o comando ‘python -m test’ para definir
     ‘FORCE_COLOR=1’ quando executado com cores ativadas, para que o
     *note unittest: 106, executado por ele com saída redirecionada,
     seja exibido em cores.

   - gh-136442(3): Usa o código de saída ‘1’ em vez de ‘5’ se a *note
     unittest.TestCase.setUpClass(): a58. levantar uma exceção.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/140482

   (2) https://github.com/python/cpython/issues/140082

   (3) https://github.com/python/cpython/issues/136442


File: python.info,  Node: Segurança<3>,  Next: Biblioteca<3>,  Prev: Testes<2>,  Up: Python 3 13 10 final

1.23.3.3 Segurança
..................

   - gh-139700(1): Verifica a consistência do registro zip64 no final do
     diretório central.  Suporte a registros com “dados extensíveis
     zip64” se não houver bytes anexados ao arquivo ZIP.

   - gh-137836(2): Adiciona suporte ao elemento “plaintext”, elementos
     RAWTEXT “xmp”, “iframe”, “noembed e “noframes”, e elementos RAWTEXT
     “noscript” opicionais em *note html.parser.HTMLParser: 87b.

   - gh-136063(3): *note email.message: 44.: ensure linear complexity
     for legacy HTTP parameters parsing.  Patch by Bénédikt Tran.

   - gh-136065(4): Corrige complexidade quadrática em *note
     os.path.expandvars(): 1420.

   - gh-119342(5): Fix a potential memory denial of service in the *note
     plistlib: ab. module.  When reading a Plist file received from
     untrusted source, it could cause an arbitrary amount of memory to
     be allocated.  This could have led to symptoms including a *note
     MemoryError: 15c5, swapping, out of memory (OOM) killed processes
     or containers, or even system crashes.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/139700

   (2) https://github.com/python/cpython/issues/137836

   (3) https://github.com/python/cpython/issues/136063

   (4) https://github.com/python/cpython/issues/136065

   (5) https://github.com/python/cpython/issues/119342


File: python.info,  Node: Biblioteca<3>,  Next: IDLE<4>,  Prev: Segurança<3>,  Up: Python 3 13 10 final

1.23.3.4 Biblioteca
...................

   - gh-74389(1): Quando a entrada padrão (stdin) usada por uma
     instância de *note subprocess.Popen: 199. é fechada, isso agora é
     ignorado em *note subprocess.Popen.communicate(): 15cd, em vez de
     deixar a classe em um estado inconsistente.

   - gh-87512(2): Corrige o tratamento do limite de tempo de *note
     subprocess.Popen.communicate(): 15cd. no Windows ao escrever
     entradas grandes.  Anteriormente, o timeout era ignorado durante a
     escrita na entrada padrão (stdin), fazendo com que o método
     bloqueasse indefinidamente se o processo filho não consumisse a
     entrada rapidamente.  Agora, a escrita na entrada padrão é
     realizada em uma thread em segundo plano, permitindo que o tempo
     limite seja aplicado corretamente.

   - gh-141473(3): Quando o método *note subprocess.Popen.communicate():
     15cd. é chamado com um valor de entrada e um tempo limite definido,
     e é chamado uma segunda vez após uma exceção *note TimeoutExpired:
     15ce. antes que o processo seja encerrado, ele não deve mais
     travar.

   - gh-59000(4): Fix *note pdb: a5. breakpoint resolution for class
     methods when the module defining the class is not imported.

   - gh-141570(5): Suporte para *note objeto arquivo ou similar: 15cf.
     que levanta *note OSError: 417. de *note fileno(): 15d0. na
     detecção de cores (‘_colorize.can_colorize()’).  Isso pode ocorrer
     quando ‘sys.stdout’ é redirecionado.

   - gh-141659(6): Corrige erros de descritor de arquivo inválido
     provenientes do processo ‘_posixsubprocess’ no AIX.

   - gh-141497(7): *note ipaddress: 80.: garante que os métodos *note
     IPv4Network.hosts(): 15d1. e *note IPv6Network.hosts(): 15d2.
     sempre retornem um iterador.

   - gh-140938(8): As funções *note statistics.stdev(): 6d4. e *note
     statistics.pstdev(): 15d3. agora levantam *note ValueError: 202.
     quando a entrada contém um infinito ou um NaN.

   - gh-124111(9): Atualizada a configuração de threads do Tcl em *note
     _tkinter: 3. para presumir que threads estão sempre disponíveis no
     Tcl 9 e versões posteriores.

   - gh-137109(10): O *note os.fork: 197. e as APIs de fork relacionadas
     não emitirão mais avisos no caso comum em que as APIs da plataforma
     Linux ou macOS retornam o número de threads em um processo e
     encontram a resposta como 1, mesmo quando um função de retorno
     *note os.register_at_fork(): 300. ‘after_in_parent=’ (re)inicia uma
     thread.

   - gh-141314(11): Corrigido o erro de asserção em *note
     io.TextIOWrapper.tell(): 15d4. ao ler arquivos com quebras de linha
     de retorno de carro isoladas (‘\r’).

   - gh-141311(12): Corrigido o erro de asserção em
     ‘io.BytesIO.readinto()’ e o comportamento indefinido que ocorria
     quando a posição de leitura estava acima da capacidade em *note
     io.BytesIO: ed3.

   - gh-141141(13): Corrige um problema de segurança de threads com
     *note base64.b85decode(): f53.  Contribuição de Benel Tayar.

   - gh-140911(14): *note collections: 1d.: Garante que os métodos
     ‘UserString.rindex()’ e ‘UserString.index()’ aceitem instâncias de
     *note collections.UserString: dfd. como sub-argumento.

   - gh-140797(15): A classe não documentada ‘re.Scanner’ agora proíbe
     expressões regulares que contenham grupos de captura em seus
     padrões de léxico.  Padrões que utilizavam grupos de captura podiam
     anteriormente causar falhas de segmentação.  Em vez disso, utilize
     grupos sem captura (?:…).

   - gh-140815(16): *note faulthandler: 58. agora detecta se um quadro
     ou um objeto código é inválido ou foi liberado.  Patch por Victor
     Stinner.

   - gh-100218(17): Define corretamente *note errno: 15d5. quando as
     *note socket.if_nametoindex(): a38. ou *note
     socket.if_indextoname(): a39. levantam *note OSError: 417.  Patch
     por Bénédikt Tran.

   - gh-140875(18): Corrigido o tratamento de referências de caracteres
     não fechadas (nomeadas e numéricas) seguidas pelo fim do arquivo em
     *note html.parser.HTMLParser: 87b. com ‘convert_charrefs=False’.

   - gh-140734(19): *note multiprocessing: 94.: Corrige erro de
     diferença de um bit ao verificar o comprimento do caminho de um
     arquivo de socket temporário.  Patch por Bénédikt Tran.

   - gh-140874(20): Bump the version of pip bundled in *note ensurepip:
     55. to version 25.3

   - gh-140691(21): Em *note urllib.request: 10b, quando a abertura de
     um URL FTP falha porque não é possível estabelecer uma conexão de
     dados, o socket da conexão de controle é agora fechado para evitar
     um *note ResourceWarning: 244.

   - gh-103847(22): Corrigido o travamento que ocorria ao cancelar um
     processo criado por *note asyncio.create_subprocess_exec(): a81. ou
     *note asyncio.create_subprocess_shell(): a82.  Patch por Kumar
     Aditya.

   - gh-140590(23): Correção na verificação de argumentos para o método
     ‘functools.partial.__setstate__()’, que pode levar à corrupção do
     estado interno e ao travamento do sistema.  Patch por Sergey
     Miryanov.

   - gh-140634(24): Corrige um bug de contagem de referências em
     ‘os.sched_param.__reduce__()’.

   - gh-140633(25): Ignora *note AttributeError: 34b. ao definir o
     atributo ‘__file__’ de um módulo ao carregar um módulo de extensão
     empacotado como Apple Framework.

   - gh-140593(26): *note xml.parsers.expat: 126.: Corrige um vazamento
     de memória que poderia afetar usuários com *note
     ElementDeclHandler(): 15d6. definido como um manipulador de
     declaração de elemento personalizado.  Patch por Sebastian Pipping.

   - gh-140607(27): Dentro de *note io.RawIOBase.read(): e48, verifica
     se a contagem de bytes retornada por *note io.RawIOBase.readinto():
     e49. é válida (dentro do buffer fornecido).

   - gh-138162(28): Corrige *note logging.LoggerAdapter: 1339. com
     ‘merge_extra=True’ e sem o argumento 'extra'.

   - gh-140474(29): Corrige vazamento de memória em *note array.array:
     1a0. ao criar vetores a partir de um objeto *note str: 44c. vazio e
     do código do tipo ‘u’.

   - gh-140272(30): Corrige vazamento de memória no método ‘clear()’ do
     banco de dados *note dbm.gnu: 33.

   - gh-140041(31): Corrige importação de *note ctypes: 2a. no Android e
     Cygwin quando sinalizadores ABI estiverem presentes.

   - gh-139905(32): Adiciona sugestão à mensagem de erro para subclasses
     *note typing.Generic: 15d7. quando ‘cls.__parameters__’ estiver
     ausente devido a uma classe pai falhar ao chamar *note
     super().__init_subclass__(): 631. em sua ‘__init_subclass__’.

   - gh-139845(33): Correção para não exibir KeyboardInterrupt duas
     vezes no REPL padrão de asyncio.

   - gh-139783(34): Corrige *note inspect.getsourcelines(): 15d8. para o
     caso em que um decorador é seguido por um comentário ou uma linha
     vazia.

   - gh-70765(35): *note http.server: 72.: corrige o tratamento padrão
     de requisições HTTP/0.9 em *note BaseHTTPRequestHandler: 110a.
     Anteriormente, ‘BaseHTTPRequestHandler.parse_request()’ aguardava
     incorretamente por cabeçalhos na requisição, embora estes não sejam
     suportados em HTTP/0.9.  Patch por Bénédikt Tran.

   - gh-139391(36): Corrige um problema em que, em plataformas não
     Windows, não era possível sair normalmente de um processo ‘python
     -m asyncio’ suspenso por Ctrl+Z e posteriormente retomado por
     ‘fg(37)’, exceto com ‘kill(38)’.

   - gh-101828(39): Corrige os codecs ‘'shift_jisx0213'’,
     ‘'shift_jis_2004'’, ‘'euc_jisx0213'’ e ‘'euc_jis_2004'’ que
     truncavam caracteres nulos, pois eram tratados como parte de
     sequências de múltiplos caracteres.

   - gh-139246(40): correção: colar texto com largura zero na largura
     padrão do REPL está incorreto.

   - gh-90949(41): Adiciona os métodos *note
     SetAllocTrackerActivationThreshold(): 15d9. e *note
     SetAllocTrackerMaximumAmplification(): 15da. aos objetos *note
     xmlparser: 15db. para evitar o uso de quantidades desproporcionais
     de memória dinâmica dentro de um analisador sintático Expat.  Patch
     por Bénédikt Tran.

   - gh-139065(42): Corrige espaço final antes de uma palavra longa
     encapsulada se o comprimento da linha for exatamente 'width' em
     *note textwrap: ec.

   - gh-138993(43): Reduz indentação do texto de *note credits: 15b1.

   - gh-138859(44): Corrige a parametrização de tipo genérico levantando
     *note TypeError: 2c3. ao omitir uma ‘ParamSpec’ que tem um padrão
     que não é uma lista de tipos.

   - gh-138775(45): O uso de ‘python -m’ com *note base64: e. foi
     corrigido para detectar a entrada de um terminal, de forma que
     reconheça corretamente o EOF (fim de arquivo).

   - gh-98896(46): Corrige um erro em resource_tracker do módulo
     multiprocessing quando os nomes de SharedMemory contêm dois pontos.
     Patch por Rani Pinchuk.

   - gh-75989(47): *note tarfile.TarFile.extractall(): 42e. e *note
     tarfile.TarFile.extract(): 42f. agora substituem links simbólicos
     ao extrair links físicos.  (Contribuição de Alexander Enrique
     Urieles Nieto em gh-75989(48).)

   - gh-83424(49): Permite criar um *note ctypes.CDLL: 9f1. sem nome ao
     passar um identificador como argumento.

   - gh-136234(50): Corrige *note asyncio.WriteTransport.writelines():
     15dc. para ser robusto a falhas de conexão, usando o mesmo
     comportamento de *note write(): 15dd.

   - gh-136057(51): Corrigido o bug em *note pdb: a5. e *note bdb: f.
     onde ‘next’ e ‘step’ não conseguiam ultrapassar a linha se
     existisse um laço na linha.

   - gh-135307(52): *note email: 3b.: Corrige a exceção em
     ‘set_content()’ ao codificar texto quando max_line_length está
     definido como ‘0’ ou ‘None’ (ilimitado).

   - gh-134453(53): Corrigido o tratamento de ‘input=’ da função *note
     subprocess.Popen.communicate(): 15cd. por instâncias de *note
     memoryview: 2eb. que não tinham formato de bytes em plataformas
     POSIX. Agora, essas instâncias são convertidas corretamente para
     uma visualização em formato de byte, em vez de truncar a entrada.
     Plataformas Windows não apresentavam esse bug.

   - gh-102431(54): Esclarece restrições para argumentos “lógicos” em
     métodos de *note decimal.Context: 10ee.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/74389

   (2) https://github.com/python/cpython/issues/87512

   (3) https://github.com/python/cpython/issues/141473

   (4) https://github.com/python/cpython/issues/59000

   (5) https://github.com/python/cpython/issues/141570

   (6) https://github.com/python/cpython/issues/141659

   (7) https://github.com/python/cpython/issues/141497

   (8) https://github.com/python/cpython/issues/140938

   (9) https://github.com/python/cpython/issues/124111

   (10) https://github.com/python/cpython/issues/137109

   (11) https://github.com/python/cpython/issues/141314

   (12) https://github.com/python/cpython/issues/141311

   (13) https://github.com/python/cpython/issues/141141

   (14) https://github.com/python/cpython/issues/140911

   (15) https://github.com/python/cpython/issues/140797

   (16) https://github.com/python/cpython/issues/140815

   (17) https://github.com/python/cpython/issues/100218

   (18) https://github.com/python/cpython/issues/140875

   (19) https://github.com/python/cpython/issues/140734

   (20) https://github.com/python/cpython/issues/140874

   (21) https://github.com/python/cpython/issues/140691

   (22) https://github.com/python/cpython/issues/103847

   (23) https://github.com/python/cpython/issues/140590

   (24) https://github.com/python/cpython/issues/140634

   (25) https://github.com/python/cpython/issues/140633

   (26) https://github.com/python/cpython/issues/140593

   (27) https://github.com/python/cpython/issues/140607

   (28) https://github.com/python/cpython/issues/138162

   (29) https://github.com/python/cpython/issues/140474

   (30) https://github.com/python/cpython/issues/140272

   (31) https://github.com/python/cpython/issues/140041

   (32) https://github.com/python/cpython/issues/139905

   (33) https://github.com/python/cpython/issues/139845

   (34) https://github.com/python/cpython/issues/139783

   (35) https://github.com/python/cpython/issues/70765

   (36) https://github.com/python/cpython/issues/139391

   (37) https://manpages.debian.org/fg

   (38) https://manpages.debian.org/kill

   (39) https://github.com/python/cpython/issues/101828

   (40) https://github.com/python/cpython/issues/139246

   (41) https://github.com/python/cpython/issues/90949

   (42) https://github.com/python/cpython/issues/139065

   (43) https://github.com/python/cpython/issues/138993

   (44) https://github.com/python/cpython/issues/138859

   (45) https://github.com/python/cpython/issues/138775

   (46) https://github.com/python/cpython/issues/98896

   (47) https://github.com/python/cpython/issues/75989

   (48) https://github.com/python/cpython/issues/75989

   (49) https://github.com/python/cpython/issues/83424

   (50) https://github.com/python/cpython/issues/136234

   (51) https://github.com/python/cpython/issues/136057

   (52) https://github.com/python/cpython/issues/135307

   (53) https://github.com/python/cpython/issues/134453

   (54) https://github.com/python/cpython/issues/102431


File: python.info,  Node: IDLE<4>,  Next: Documentação<2>,  Prev: Biblioteca<3>,  Up: Python 3 13 10 final

1.23.3.5 IDLE
.............

   - gh-96491(1): Desduplica o número da versão na barra de título do
     shell do IDLE após salvar em um arquivo.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/96491


File: python.info,  Node: Documentação<2>,  Next: Núcleo e embutidos<3>,  Prev: IDLE<4>,  Up: Python 3 13 10 final

1.23.3.6 Documentação
.....................

   - gh-141994(1): *note xml.sax.handler: 12a.: Faz a documentação de
     *note xml.sax.handler.feature_external_ges: 15e0. alertar sobre a
     vulnerabilidade a ataques de entidades externas(2).  Patch por
     Sebastian Pipping.

   - gh-140578(3): Remove a frase desatualizada na documentação de *note
     multiprocessing: 94, que dava a entender que *note
     concurrent.futures.ThreadPoolExecutor: 742. não existia.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/141994

   (2) https://en.wikipedia.org/wiki/XML_external_entity_attack

   (3) https://github.com/python/cpython/issues/140578


File: python.info,  Node: Núcleo e embutidos<3>,  Next: API C<2>,  Prev: Documentação<2>,  Up: Python 3 13 10 final

1.23.3.7 Núcleo e embutidos
...........................

   - gh-142048(1): Fix quadratically increasing garbage collection
     delays in free-threaded build.

   - gh-141930(2): When importing a module, use Python’s regular file
     object to ensure that writes to ‘.pyc’ files are complete or an
     appropriate error is raised.

   - gh-120158(3): Corrige estado inconsistente ao habilitar e
     desabilitar eventos de monitoramento muitas vezes.

   - gh-141579(4): Corrigido o problema na função *note
     sys.activate_stack_trampoline(): 46f. para que ela ofereça suporte
     correto ao backend ‘perf_jit’.  Patch por Pablo Galindo.

   - gh-141312(5): Corrige a falha de asserção no método ‘__setstate__’
     do iterador de intervalo quando um argumento não inteiro é passado.
     Patch por Sergey Miryanov.

   - gh-140939(6): Corrige vazamento de memória quando *note bytearray:
     2ea. ou *note bytes: 1c2. é formatado com o formato ‘%*b’ com uma
     largura grande que resulta em uma *note MemoryError: 15c5.

   - gh-140530(7): Corrige um vazamento de referência que ocorria quando
     ‘raise exc from cause’ falhava.  Patch por Bénédikt Tran.

   - gh-140576(8): Corrigido o erro que causava o fechamento inesperado
     do código em *note tokenize.generate_tokens(): 4da. em caso de
     entrada incorreta específica.  Patch por Mikhail Efimov.

   - gh-140551(9): Corrigido o problema que causava o fechamento
     inesperado do arquivo *note dict: 256. se o método *note
     dict.clear(): 15e2. fosse chamado na fase de busca.  Patch por
     Mikhail Efimov e Inada Naoki.

   - gh-140471(10): Corrige possível estouro de buffer na inicialização
     do nó *note ast.AST: 1a6. ao encontrar *note _fields: 15e3.
     malformados contendo não-*note str: 44c.

   - gh-140406(11): Corrige vazamento de memória quando o método *note
     __hash__(): b0e. de um objeto retorna um objeto que não é um *note
     int: 257.

   - gh-140306(12): Corrige vazamentos de memória em operações de canal
     entre interpretadores e manipulação de espaço de nomes
     compartilhado.

   - gh-140301(13): Corrige vazamento de memória de ‘PyConfig’ em
     subinterpretadores.

   - gh-140000(14): Corrige possível vazamento de memória quando há um
     ciclo de referência entre uma instância de *note
     typing.TypeAliasType: 455, *note typing.TypeVar: 15d, *note
     typing.ParamSpec: 15e. ou *note typing.TypeVarTuple: 15f. e seu
     atributo ‘__name__’.  Patch por Mikhail Efimov.

   - gh-139748(15): Corrige vazamentos de referência em ramificações de
     erro de funções que aceitam strings de caminho ou bytes, como *note
     compile(): 192. e *note os.system(): 14a5.  Patch por Bénédikt
     Tran.

   - gh-139516(16): Corrigir erro no formato de início de especificação
     de dois pontos lambda na f-string no tokenizador.

   - gh-139640(17): Corrige a ingestão de alguns avisos de sintaxe em
     módulos diferentes caso eles acidentalmente tenham a mesma mensagem
     e sejam emitidos na mesma linha.  Corrige avisos duplicados no
     bloco ‘finally’.

   - gh-137400(18): Corrige uma falha na construção com *note threads
     livres: 15e4. ao desabilitar a criação de perfil ou o rastreamento
     em todos os threads com *note PyEval_SetProfileAllThreads(): 55f.
     ou *note PyEval_SetTraceAllThreads(): 422. ou seus equivalentes em
     Python *note threading.settrace_all_threads(): 4c8. e *note
     threading.setprofile_all_threads(): 4c9.

   - gh-133400(19): Comportamento corrigido do Ctrl+D (^D) no módulo
     _pyrepl para corresponder ao comportamento antigo do REPL pré-3.13.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/142048

   (2) https://github.com/python/cpython/issues/141930

   (3) https://github.com/python/cpython/issues/120158

   (4) https://github.com/python/cpython/issues/141579

   (5) https://github.com/python/cpython/issues/141312

   (6) https://github.com/python/cpython/issues/140939

   (7) https://github.com/python/cpython/issues/140530

   (8) https://github.com/python/cpython/issues/140576

   (9) https://github.com/python/cpython/issues/140551

   (10) https://github.com/python/cpython/issues/140471

   (11) https://github.com/python/cpython/issues/140406

   (12) https://github.com/python/cpython/issues/140306

   (13) https://github.com/python/cpython/issues/140301

   (14) https://github.com/python/cpython/issues/140000

   (15) https://github.com/python/cpython/issues/139748

   (16) https://github.com/python/cpython/issues/139516

   (17) https://github.com/python/cpython/issues/139640

   (18) https://github.com/python/cpython/issues/137400

   (19) https://github.com/python/cpython/issues/133400


File: python.info,  Node: API C<2>,  Prev: Núcleo e embutidos<3>,  Up: Python 3 13 10 final

1.23.3.8 API C
..............

   - gh-140042(1): Removed the sqlite3_shutdown call that could cause
     closing connections for sqlite when used with multiple sub
     interpreters.

   - gh-140487(2): Corrige *note Py_RETURN_NOTIMPLEMENTED: 15e6. na API
     C limitada 3.11 e anteriores: não trata ‘Py_NotImplemented’ como
     imortal.  Patch por Victor Stinner.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/140042

   (2) https://github.com/python/cpython/issues/140487


File: python.info,  Node: Python 3 13 9 final,  Next: Python 3 13 8 final,  Prev: Python 3 13 10 final,  Up: Changelog

1.23.4 Python 3.13.9 final
--------------------------

'Release date: 2025-10-14'

* Menu:

* Biblioteca: Biblioteca<4>.


File: python.info,  Node: Biblioteca<4>,  Up: Python 3 13 9 final

1.23.4.1 Biblioteca
...................

   - gh-139783(1): Corrige *note inspect.getsourcelines(): 15d8. para o
     caso em que um decorador é seguido por um comentário ou uma linha
     vazia.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/139783


File: python.info,  Node: Python 3 13 8 final,  Next: Python 3 13 7 final,  Prev: Python 3 13 9 final,  Up: Changelog

1.23.5 Python 3.13.8 final
--------------------------

'Data de lançamento: 2025-10-07'

* Menu:

* macOS::
* Windows: Windows<2>.
* Ferramentas/Demos: Ferramentas/Demos<3>.
* Testes: Testes<3>.
* Segurança: Segurança<4>.
* Biblioteca: Biblioteca<5>.
* Núcleo e embutidos: Núcleo e embutidos<4>.
* API C: API C<3>.
* Construção: Construção<2>.


File: python.info,  Node: macOS,  Next: Windows<2>,  Up: Python 3 13 8 final

1.23.5.1 macOS
..............

   - gh-124111(1): Atualiza o instalador do macOS para usar o Tcl/Tk
     8.6.17.

   - gh-139573(2): Atualizada a versão empacotada do OpenSSL para
     3.0.18.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124111

   (2) https://github.com/python/cpython/issues/139573


File: python.info,  Node: Windows<2>,  Next: Ferramentas/Demos<3>,  Prev: macOS,  Up: Python 3 13 8 final

1.23.5.2 Windows
................

   - gh-139573(1): Atualizada a versão empacotada do OpenSSL para
     3.0.18.

   - gh-138896(2): Corrige erro ao instalar o runtime do C em máquinas
     Windows não atualizadas

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/139573

   (2) https://github.com/python/cpython/issues/138896


File: python.info,  Node: Ferramentas/Demos<3>,  Next: Testes<3>,  Prev: Windows<2>,  Up: Python 3 13 8 final

1.23.5.3 Ferramentas/Demos
..........................

   - gh-139330(1): A ferramenta de geração de SBOM não verificava os
     valores de versão e checksum em relação ao script
     ‘Modules/expat/refresh.sh’, o que levava a que os valores ficassem
     desatualizados durante atualizações de rotina.

   - gh-137873(2): O executor de testes iOS foi simplificado, resolvendo
     alguns problemas que foram observados ao usar o executor nos
     ambientes de teste do GitHub Actions e do Azure Pipelines.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/139330

   (2) https://github.com/python/cpython/issues/137873


File: python.info,  Node: Testes<3>,  Next: Segurança<4>,  Prev: Ferramentas/Demos<3>,  Up: Python 3 13 8 final

1.23.5.4 Testes
...............

   - gh-139208(1): Corrige o regrtest ‘--fast-ci --verbose’: não ignora
     mais a opção ‘--verbose’.  Patch por Victor Stinner.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/139208


File: python.info,  Node: Segurança<4>,  Next: Biblioteca<5>,  Prev: Testes<3>,  Up: Python 3 13 8 final

1.23.5.5 Segurança
..................

   - gh-139400(1): *note xml.parsers.expat: 126.: Garante que os
     analisadores Expat pais sejam coletados como lixo somente quando
     não forem mais referenciados por subanalisadores criados por *note
     ExternalEntityParserCreate(): 15ef.  Patch por Sebastian Pipping.

   - gh-139283(2): *note sqlite3: cf.: manipula corretamente o número
     máximo de linhas a serem buscadas em *note Cursor.fetchmany: 15f0.
     e rejeita valores negativos para *note Cursor.arraysize: 15f1.
     Patch por Bénédikt Tran.

   - gh-135661(3): Corrige a análise da seção CDATA em *note
     html.parser.HTMLParser: 87b. de acordo com o padrão HTML5: ‘] ]>’ e
     ‘]] >’ não encerram mais a seção CDATA. Adiciona o método privado
     ‘_set_support_cdata()’, que pode ser usado para especificar como
     analisar ‘<[CDATA[’ — como uma seção CDATA em conteúdo externo (SVG
     ou MathML) ou como um comentário falso no espaço de nomes HTML.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/139400

   (2) https://github.com/python/cpython/issues/139283

   (3) https://github.com/python/cpython/issues/135661


File: python.info,  Node: Biblioteca<5>,  Next: Núcleo e embutidos<4>,  Prev: Segurança<4>,  Up: Python 3 13 8 final

1.23.5.6 Biblioteca
...................

   - gh-139312(1): Atualiza libexpat empacotado para 2.7.3

   - gh-139289(2): Faz uma importação preguiçosa real em *note
     rlcompleter: bd. em *note pdb: a5. e restaura o completer existente
     após importar *note rlcompleter: bd.

   - gh-139210(3): Corrige o problema de uso após liberação ao relatar
     um evento desconhecido em *note xml.etree.ElementTree.iterparse():
     273.  Patch por Ken Jin.

   - gh-138860(4): Importação preguiçosa de *note rlcompleter: bd. em
     *note pdb: a5. para evitar impasse no subprocesso.

   - gh-112729(5): Corrige falha ao chamar ‘_interpreters.create’ quando
     o processo está sem memória.

   - gh-139076(6): Corrige um bug no módulo *note pydoc: b5. que estava
     escondendo funções em um módulo Python se elas fossem implementadas
     em um módulo de extensão e o módulo não tivesse ‘__all__’.

   - gh-138998(7): Atualiza libexpat empacotado para 2.7.2

   - gh-130567(8): Corrige possível falha em *note locale.strxfrm():
     15f3. devido a um bug de plataforma no macOS.

   - gh-138779(9): Suporte a números de dispositivos maiores que
     ‘2**63-1’ para o campo *note st_rdev: 15f4. da estrutura *note
     os.stat_result: 1509.

   - gh-128636(10): Corrige falha no PyREPL quando os.environ é
     substituído por um valor inválido para Mac

   - gh-88375(11): Corrige a normalização das regras e URLs ‘robots.txt’
     no módulo *note urllib.robotparser: 10d.  Não ignora mais o ‘?’
     final.  Distingue os caracteres especiais brutos ‘?’, ‘=’ e ‘&’ dos
     codificados em porcentagem.

   - gh-138515(12): *note email: 3b. é adicionado à construção
     Emscripten.

   - gh-111788(13): Corrige erros de análise no módulo *note
     urllib.robotparser: 10d.  Não falhe ao tentar analisar caminhos
     estranhos.  Não falha ao tentar decodificar arquivos ‘robots.txt’
     não UTF-8.

   - gh-138432(14): *note zoneinfo.reset_tzpath(): 15f5. agora
     converterá quaisquer objetos *note os.PathLike: c6c. recebidos em
     strings antes de adicioná-los a ‘TZPATH’.  Ele levantará
     ‘TypeError’ se algo diferente de uma string for encontrado após
     essa conversão.  Se for fornecido um objeto *note os.PathLike: c6c.
     que represente um caminho relativo, ele levantará ‘ValueError’ em
     vez de ‘TypeError’ e apresentará uma mensagem de erro mais
     informativa.

   - gh-138008(15): Corrige falhas de segmentação no módulo *note
     ctypes: 2a. devido a *note argtypes: 15f6. inválido.  Patch por
     Dung Nguyen.

   - gh-60462(16): Corrige *note locale.strxfrm(): 15f3. no Solaris (e
     possivelmente em outras plataformas).

   - gh-138204(17): Proibe expansão de *note mapas de memória: 90.
     anônimos compartilhados no Linux, o que causou um erro de
     barramento.

   - gh-138010(18): Fix an issue where defining a class with a *note
     @warnings.deprecated: 160.-decorated base class may not invoke the
     correct *note __init_subclass__(): 631. method in cases involving
     multiple inheritance.  Patch by Brian Schubert.

   - gh-138133(19): Evita laço infinito de traceback ao enviar CTRL^C
     para Python através de ‘strace’.

   - gh-134869(20): Correção de um problema em que pressionar Ctrl+C
     durante o preenchimento de guias no site REPL deixava o menu de
     preenchimento automático em um estado corrompido.

   - gh-137317(21): *note inspect.signature(): 738. agora trata
     corretamente classes que usam um descritor em um método encapsulado
     ‘__init__()’ ou ‘__new__()’.  Contribuição de Yongyu Yan.

   - gh-137754(22): Corrige a importação do módulo *note zoneinfo: 134.
     se a implementação C do módulo *note datetime: 30. não estiver
     disponível.

   - gh-137490(23): Manipula *note ECANCELED: 15f7. da mesma forma que
     *note EINTR: daf. em *note signal.sigwaitinfo(): dd3. no NetBSD.

   - gh-137477(24): Corrige ‘inspect.getblock()’, *note
     inspect.getsourcelines(): 15d8. e *note inspect.getsource(): 15f8.
     para expressões geradoras.

   - gh-137017(25): Corrige *note threading.Thread.is_alive: 954. para
     permanecer ‘True’ até que a thread do SO subjacente seja
     completamente limpa.  Isso evita falsos negativos em casos extremos
     envolvendo monitoramento de threads ou chamadas prematuras de *note
     threading.Thread.is_alive: 954.

   - gh-136134(26): ‘SMTP.auth_cram_md5()’ agora levanta uma *note
     SMTPException: fd5. em vez de uma *note ValueError: 202. se o
     Python tiver sido construído sem suporte a MD5.  Em particular,
     clientes *note SMTP: 934. não tentarão usar este método, mesmo que
     se presuma que o servidor remoto o suporte.  Patch por Bénédikt
     Tran.

   - gh-136134(27): *note IMAP4.login_cram_md5: 15f9. agora levanta
     *note IMAP4.error: 15fa. se a autenticação CRAM-MD5 não for
     suportada.  Patch por Bénédikt Tran.

   - gh-135386(28): Corrige a abertura de um banco de dados *note
     dbm.sqlite3: 35. para leitura de um arquivo ou diretório somente
     leitura.

   - gh-126631(29): Corrige bug no ‘forkserver’ do *note
     multiprocessing: 94. que impedia ‘__main__’ de ser pré-carregado.

   - gh-123085(30): In a bare call to *note importlib.resources.files():
     48e, ensure the caller’s frame is properly detected when
     ‘importlib.resources’ is itself available as a compiled module only
     (no source).

   - gh-118981(31): Corrige possível travamento em
     ‘multiprocessing.popen_spawn_posix’ que pode ocorrer quando o
     processo filho morre prematuramente, fechando os descritores de
     arquivo filhos imediatamente.

   - gh-78319(32): O suporte UTF8 para o comando IMAP APPEND foi tornado
     compatível com RFC.

   - bpo-38735(33): Corrige falha ao importar um módulo do diretório
     raiz em plataformas do tipo Unix com sys.pycache_prefix definido.

   - bpo-41839(34): Permite valores de prioridade negativos das funções
     *note os.sched_get_priority_min(): 1148. e *note
     os.sched_get_priority_max(): 1147.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/139312

   (2) https://github.com/python/cpython/issues/139289

   (3) https://github.com/python/cpython/issues/139210

   (4) https://github.com/python/cpython/issues/138860

   (5) https://github.com/python/cpython/issues/112729

   (6) https://github.com/python/cpython/issues/139076

   (7) https://github.com/python/cpython/issues/138998

   (8) https://github.com/python/cpython/issues/130567

   (9) https://github.com/python/cpython/issues/138779

   (10) https://github.com/python/cpython/issues/128636

   (11) https://github.com/python/cpython/issues/88375

   (12) https://github.com/python/cpython/issues/138515

   (13) https://github.com/python/cpython/issues/111788

   (14) https://github.com/python/cpython/issues/138432

   (15) https://github.com/python/cpython/issues/138008

   (16) https://github.com/python/cpython/issues/60462

   (17) https://github.com/python/cpython/issues/138204

   (18) https://github.com/python/cpython/issues/138010

   (19) https://github.com/python/cpython/issues/138133

   (20) https://github.com/python/cpython/issues/134869

   (21) https://github.com/python/cpython/issues/137317

   (22) https://github.com/python/cpython/issues/137754

   (23) https://github.com/python/cpython/issues/137490

   (24) https://github.com/python/cpython/issues/137477

   (25) https://github.com/python/cpython/issues/137017

   (26) https://github.com/python/cpython/issues/136134

   (27) https://github.com/python/cpython/issues/136134

   (28) https://github.com/python/cpython/issues/135386

   (29) https://github.com/python/cpython/issues/126631

   (30) https://github.com/python/cpython/issues/123085

   (31) https://github.com/python/cpython/issues/118981

   (32) https://github.com/python/cpython/issues/78319

   (33) https://bugs.python.org/issue?@action=redirect&bpo=38735

   (34) https://bugs.python.org/issue?@action=redirect&bpo=41839


File: python.info,  Node: Núcleo e embutidos<4>,  Next: API C<3>,  Prev: Biblioteca<5>,  Up: Python 3 13 8 final

1.23.5.7 Núcleo e embutidos
...........................

   - gh-134466(1): Não executa o PyREPL em um ambiente degradado onde a
     definição de atributos termios não é permitida.

   - gh-71810(2): Levanta *note OverflowError: 885. para
     ‘(-1).to_bytes()’ para conversões com sinal quando a contagem de
     bytes for zero.  Patch por Sergey B Kirpichev.

   - gh-105487(3): Remove *note __copy__(): 15fc, *note __deepcopy__():
     15fd. e *note __bases__: 14f4. inexistentes das entradas *note
     __dir__(): 15fe. de *note types.GenericAlias: 7ed.

   - gh-134163(4): Fix a hang when the process is out of memory inside
     an exception handler.

   - gh-138479(5): Corrige uma falha quando ‘__typing_subst__’ de um
     objeto genérico retorna um objeto que não é uma *note tuple: 370.

   - gh-137576(6): Correção para código-fonte incorreto exibido em
     tracebacks do REPL básico quando *note PYTHONSTARTUP: ffe. é
     fornecido.  Patch por Adam Hartz.

   - gh-132744(7): Certas chamadas agora verificam a recursão
     descontrolada e respeitam o limite de recursão do sistema.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/134466

   (2) https://github.com/python/cpython/issues/71810

   (3) https://github.com/python/cpython/issues/105487

   (4) https://github.com/python/cpython/issues/134163

   (5) https://github.com/python/cpython/issues/138479

   (6) https://github.com/python/cpython/issues/137576

   (7) https://github.com/python/cpython/issues/132744


File: python.info,  Node: API C<3>,  Next: Construção<2>,  Prev: Núcleo e embutidos<4>,  Up: Python 3 13 8 final

1.23.5.8 API C
..............

   - gh-87135(1): Attempting to acquire the GIL after runtime
     finalization has begun in a different thread now causes the thread
     to hang rather than terminate, which avoids potential crashes or
     memory corruption caused by attempting to terminate a thread that
     is running code not specifically designed to support termination.
     In most cases this hanging is harmless since the process will soon
     exit anyway.

     While not officially marked deprecated until 3.14,
     ‘PyThread_exit_thread’ is no longer called internally and remains
     solely for interface compatibility.  Its behavior is inconsistent
     across platforms, and it can only be used safely in the unlikely
     case that every function in the entire call stack has been designed
     to support the platform-dependent termination mechanism.  It is
     recommended that users of this function change their design to not
     require thread termination.  In the unlikely case that thread
     termination is needed and can be done safely, users may migrate to
     calling platform-specific APIs such as ‘pthread_exit’ (POSIX) or
     ‘_endthreadex’ (Windows) directly.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/87135


File: python.info,  Node: Construção<2>,  Prev: API C<3>,  Up: Python 3 13 8 final

1.23.5.9 Construção
...................

   - gh-135734(1): Python can correctly be configured and built with
     ‘./configure --enable-optimizations --disable-test-modules’.
     Previously, the profile data generation step failed due to PGO
     tests where immortalization couldn’t be properly suppressed.  Patch
     by Bénédikt Tran.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135734


File: python.info,  Node: Python 3 13 7 final,  Next: Python 3 13 6 final,  Prev: Python 3 13 8 final,  Up: Changelog

1.23.6 Python 3.13.7 final
--------------------------

'Data de lançamento: 14-08-2025'

* Menu:

* Biblioteca: Biblioteca<6>.
* Documentação: Documentação<3>.
* Núcleo e embutidos: Núcleo e embutidos<5>.


File: python.info,  Node: Biblioteca<6>,  Next: Documentação<3>,  Up: Python 3 13 7 final

1.23.6.1 Biblioteca
...................

   - gh-137583(1): Fix a deadlock introduced in 3.13.6 when a call to
     *note ssl.SSLSocket.recv: dcc. was blocked in one thread, and then
     another method on the object (such as *note ssl.SSLSocket.send:
     dcf.) was subsequently called in another thread.

   - gh-137044(2): Retorna valores de limite grandes como inteiros
     positivos em vez de inteiros negativos em *note
     resource.getrlimit(): 1603.  Aceita valores grandes e rejeita
     valores negativos (exceto *note RLIM_INFINITY: 1604.) para limites
     em *note resource.setrlimit(): 1605.

   - gh-136914(3): Corrige recuperação de *note doctest.DocTest.lineno:
     1606. para objetos decorados com *note functools.cache(): 1607. ou
     *note functools.cached_property: 541.

   - gh-131788(4): Torna ‘ResourceTracker.send’ de *note
     multiprocessing: 94. reentrante seguro

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/137583

   (2) https://github.com/python/cpython/issues/137044

   (3) https://github.com/python/cpython/issues/136914

   (4) https://github.com/python/cpython/issues/131788


File: python.info,  Node: Documentação<3>,  Next: Núcleo e embutidos<5>,  Prev: Biblioteca<6>,  Up: Python 3 13 7 final

1.23.6.2 Documentação
.....................

   - gh-136155(1): Agora estamos verificando erros fatais em construções
     de EPUB no CI.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/136155


File: python.info,  Node: Núcleo e embutidos<5>,  Prev: Documentação<3>,  Up: Python 3 13 7 final

1.23.6.3 Núcleo e embutidos
...........................

   - gh-137400(1): Corrige uma falha na construção com *note threads
     livres: 15e4. ao desabilitar a criação de perfil ou o rastreamento
     em todos os threads com *note PyEval_SetProfileAllThreads(): 55f.
     ou *note PyEval_SetTraceAllThreads(): 422. ou seus equivalentes em
     Python *note threading.settrace_all_threads(): 4c8. e *note
     threading.setprofile_all_threads(): 4c9.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/137400


File: python.info,  Node: Python 3 13 6 final,  Next: Python 3 13 5 final,  Prev: Python 3 13 7 final,  Up: Changelog

1.23.7 Python 3.13.6 final
--------------------------

'Data de lançamento: 06-08-2025'

* Menu:

* macOS: macOS<2>.
* Windows: Windows<3>.
* Ferramentas/Demos: Ferramentas/Demos<4>.
* Testes: Testes<4>.
* Segurança: Segurança<5>.
* Biblioteca: Biblioteca<7>.
* Documentação: Documentação<4>.
* Núcleo e embutidos: Núcleo e embutidos<6>.
* Construção: Construção<3>.


File: python.info,  Node: macOS<2>,  Next: Windows<3>,  Up: Python 3 13 6 final

1.23.7.1 macOS
..............

   - gh-137450(1): macOS instalador console melhorias no gerenciamento
     de caminhos: separe o script pós-instalação do instalador ‘console
     profile updater’ do ‘Update console Profile.comando’ para permitir
     um manuseio mais robusto do erro.

   - gh-137134(2): Atualização do instalador do macOS para ser fornecido
     com o SQLite versão 3.50.4.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/137450

   (2) https://github.com/python/cpython/issues/137134


File: python.info,  Node: Windows<3>,  Next: Ferramentas/Demos<4>,  Prev: macOS<2>,  Up: Python 3 13 6 final

1.23.7.2 Windows
................

   - gh-137134(1): Atualizar o instalador do Windows para que seja
     fornecido com o SQLite 3.50.4.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/137134


File: python.info,  Node: Ferramentas/Demos<4>,  Next: Testes<4>,  Prev: Windows<3>,  Up: Python 3 13 6 final

1.23.7.3 Ferramentas/Demos
..........................

   - gh-135968(1): Os stubs para ‘strip’ agora são fornecidos como parte
     de uma instalação do iOS.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135968


File: python.info,  Node: Testes<4>,  Next: Segurança<5>,  Prev: Ferramentas/Demos<4>,  Up: Python 3 13 6 final

1.23.7.4 Testes
...............

   - gh-135966(1): O ambiente de teste do iOS agora manipula a pasta
     ‘app_packages’ como um diretório de site.

   - gh-135494(2): Corrige o regrtest para suportar a exclusão de testes
     de ‘--pgo’.  Patch por Victor Stinner.

   - gh-135489(3): Exibe saída detalhada para testes com falha durante a
     etapa de criação de perfil do PGO com –enable-optimizations.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135966

   (2) https://github.com/python/cpython/issues/135494

   (3) https://github.com/python/cpython/issues/135489


File: python.info,  Node: Segurança<5>,  Next: Biblioteca<7>,  Prev: Testes<4>,  Up: Python 3 13 6 final

1.23.7.5 Segurança
..................

   - gh-135661(1): Corrige a análise das tags de início e fim em *note
     html.parser.HTMLParser: 87b. de acordo com o padrão HTML5.

        * Espaços em branco não são mais aceitos entre ‘</’ e o nome da
          tag.  Por exemplo, ‘</ script>’ não encerra a seção de script.

        * Tabulação vertical (‘\v’) e espaços em branco não ASCII não
          são mais reconhecidos como espaços em branco.  Os únicos
          espaços em branco são ‘\t\n\r\f’ e espaço.

        * O caractere nulo (U+0000) não termina mais o nome da tag.

        * Atributos e barras após o nome da tag em tags finais agora são
          ignorados, em vez de terminar após o primeiro ‘>’ no valor do
          atributo entre aspas.  Por exemplo, ‘</script/foo=">"/>’.

        * Barras múltiplas e espaços em branco entre o último atributo e
          o ‘>’ de fechamento agora são ignorados nas tags de início e
          fim.  Por exemplo, ‘<a foo=bar/ //>’.

        * Múltiplos ‘=’ entre o nome do atributo e o valor não são mais
          recolhidos.  Por exemplo, ‘<a foo==bar>’ produz o atributo
          “foo” com o valor “=bar”.

   - gh-102555(2): Corrige a análise de comentários em *note
     html.parser.HTMLParser: 87b. de acordo com o padrão HTML5.  ‘--!>’
     agora encerra o comentário.  ‘-- >’ não encerra mais o comentário.
     Suporte a comentários vazios ‘<-->’ e ‘<--->’ que encerravam
     anormalmente.

   - gh-135462(3): Corrigida a complexidade quadrática no processamento
     de entradas especialmente criadas em *note html.parser.HTMLParser:
     87b.  Erros de fim de arquivo agora são tratados de acordo com as
     especificações do HTML5 – comentários e declarações são fechados
     automaticamente, tags são ignoradas.

   - gh-118350(4): Corrige suporte ao modo de texto bruto escapável
     (elementos “textarea” e “title”) em *note html.parser.HTMLParser:
     87b.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135661

   (2) https://github.com/python/cpython/issues/102555

   (3) https://github.com/python/cpython/issues/135462

   (4) https://github.com/python/cpython/issues/118350


File: python.info,  Node: Biblioteca<7>,  Next: Documentação<4>,  Prev: Segurança<5>,  Up: Python 3 13 6 final

1.23.7.6 Biblioteca
...................

   - gh-132710(1): Se possível, garante que *note uuid.getnode(): bbf.
     retorne o mesmo resultado mesmo em processos diferentes.
     Anteriormente, o resultado era constante apenas dentro do mesmo
     processo.  Patch por Bénédikt Tran.

   - gh-137273(2): Corrige falha de asserção de depuração em *note
     locale.setlocale(): 2db. no Windows.

   - gh-137257(3): Sobe a versão do pip empacotado em ensurepip para a
     versão 25.2.

   - gh-81325(4): *note tarfile.TarFile: 1250. agora aceita um *note
     caminho ou similar: 2a0. ao trabalhar em um arquivo tar.
     (Contribuição de Alexander Enrique Urieles Nieto em gh-81325(5).)

   - gh-130522(6): Corrige *note TypeError: 2c3. não levantável
     levantada durante *note desligamento do interpretador: 14e. no
     módulo *note threading: ed.

   - gh-130577(7): *note tarfile: de. agora valida arquivos para
     garantir que os deslocamentos dos membros não sejam negativos.
     (Contribuição de Alexander Enrique Urieles Nieto em gh-130577(8).)

   - gh-136549(9): Corrige assinatura de *note threading.excepthook():
     84e.

   - gh-136523(10): Corrige *note wave.Wave_write: 2b7. emitindo uma
     exceção não levantável quando open a levanta.

   - gh-52876(11): Adiciona o parâmetro ‘keepends’ ausente (padrão
     ‘True’) para ‘codecs.StreamReaderWriter.readline()’ e
     ‘codecs.StreamReaderWriter.readlines()’.

   - gh-85702(12): Se ‘zoneinfo._common.load_tzdata’ receber um pacote
     sem um recurso, um *note zoneinfo.ZoneInfoNotFoundError: 1611. será
     levantada em vez de uma *note PermissionError: d65.  Patch por
     Victor Stinner.

   - gh-134759(13): Corrige *note UnboundLocalError: 157f. em *note
     email.message.Message.get_payload(): 120d. quando o payload a ser
     decodificado for um objeto *note bytes: 1c2.  Patch por Kliment
     Lamonov.

   - gh-136028(14): Corrige a análise de nomes de meses contendo “İ”
     (U+0130, LETRA I MAIÚSCULA COM PONTO EM CIMA) em *note
     time.strptime(): 1474.  Isso afeta as localidades az_AZ, ber_DZ,
     ber_MA e crh_UA.

   - gh-135995(15): Na codificação palmos, faz o byte ‘0x9b’ ser
     decodificado para ‘›’ (U+203A - ASPAS ÚNICAS DE ÂNGULO À DIREITA).

   - gh-53203(16): Corrige *note time.strptime(): 1474. para os formatos
     ‘%c’ e ‘%x’ nos locais byn_ER, wal_ET e lzh_TW, e para o formato
     ‘%X’ nos locais ar_SA, bg_BG e lzh_TW.

   - gh-91555(17): An earlier change, which was introduced in 3.13.4,
     has been reverted.  It disabled logging for a logger during
     handling of log messages for that logger.  Since the reversion, the
     behaviour should be as it was before 3.13.4.

   - gh-135878(18): Corrige uma falha de *note types.SimpleNamespace:
     1d1. em construções com *note threads livres: 15e4, quando várias
     threads estavam chamando seu método *note __repr__(): 61c. ao mesmo
     tempo.

   - gh-135836(19): Corrige *note IndexError: 157e. em *note
     asyncio.loop.create_connection(): 603. que poderia ocorrer quando
     uma exceção não-*note OSError: 417. fosse levantada durante a
     conexão e o ‘close()’ do soquete levantasse ‘OSError’.

   - gh-135836(20): Corrige *note IndexError: 157e. em *note
     asyncio.loop.create_connection(): 603. que poderia ocorrer quando o
     algoritmo Happy Eyeballs resultava em uma lista de exceções vazia
     durante tentativas de conexão.

   - gh-135855(21): Levanta *note TypeError: 2c3. em vez de *note
     SystemError: 575. quando ‘_interpreters.set___main___attrs()’
     recebe um objeto não dict.  Patch por Brian Schubert.

   - gh-135815(22): *note netrc: 9b.: Ignora as verificações de
     segurança se *note os.getuid(): 1612. estiver ausente.  Patch por
     Bénédikt Tran.

   - gh-135640(23): Corrigido um bug que permitia chamar *note
     xml.etree.ElementTree.ElementTree.write(): aa4. em um objeto
     ElementTree com um elemento raiz inválido.  Esse comportamento
     apagava o arquivo passado para ‘write’ caso ele já existisse.

   - gh-135444(24): Corrige *note asyncio.DatagramTransport.sendto():
     1af. para levar em conta o tamanho do cabeçalho do datagrama quando
     os dados não podem ser enviados.

   - gh-135497(25): Corrige falha em *note os.getlogin(): 1613. para
     nomes de usuários mais longos em plataformas baseadas em BSD.

   - gh-135487(26): Corrige ‘reprlib.Repr.repr_int()’ quando são
     fornecidos inteiros com mais de *note sys.get_int_max_str_digits():
     1614. dígitos.  Patch por Bénédikt Tran.

   - gh-135335(27): *note multiprocessing: 94.: Limpa ‘stdout’ e
     ‘stderr’ após pré-carregar módulos no ‘forkserver’.

   - gh-135244(28): *note uuid: 110.: when the MAC address cannot be
     determined, the 48-bit node ID is now generated with a
     cryptographically-secure pseudo-random number generator (CSPRNG) as
     per RFC 9562, §6.10.3(29).  This affects *note uuid1(): bc0.

   - gh-135069(30): Corrige a exceção “Invalid error handling” em
     ‘encodings.idna.IncrementalDecoder’ para substituir corretamente o
     parâmetro ‘errors’.

   - gh-134698(31): Corrige uma falha ao chamar métodos de *note
     ssl.SSLContext: 294. ou *note ssl.SSLSocket: 8f0. em várias
     threads.

   - gh-132124(32): On POSIX-compliant systems,
     ‘multiprocessing.util.get_temp_dir()’ now ignores ‘TMPDIR’ (and
     similar environment variables) if the path length of ‘AF_UNIX’
     socket files exceeds the platform-specific maximum length when
     using the 'forkserver' start method.  Patch by Bénédikt Tran.

   - gh-133439(33): Corrige comandos ponto com espaços à direita são
     confundidos com instruções SQL multilinha na interface de linha de
     comando sqlite3.

   - gh-132969(34): Impede que a thread executora *note
     ProcessPoolExecutor: 8f4, que permanece em execução quando *note
     shutdown(wait=False): 8f3, tente ajustar os processos de trabalho
     do pool após o estado do objeto já ter sido redefinido durante o
     desligamento.  Uma combinação de condições, incluindo um processo
     de trabalho encerrado de forma anormal, resultou em uma exceção e
     um possível travamento quando a thread executora ainda em execução
     tentou substituir os processos de trabalho inativos no pool.

   - gh-130664(35): Suporte ao separador de dígitos ‘'_'’ na formatação
     da parte integral de *note Decimal: 29d.’s.  Patch por Sergey B
     Kirpichev.

   - gh-85702(36): Se ‘zoneinfo._common.load_tzdata’ receber um pacote
     sem um recurso, uma ‘ZoneInfoNotFoundError’ será levantada em vez
     de uma *note IsADirectoryError: 1092.

   - gh-130664(37): Lida com maiúsculas e minúsculas para a formatação
     de *note Fraction: 1e7.: tratar o preenchimento com zeros
     (precedendo o campo de largura por um caractere zero (‘'0'’)) como
     um equivalente a um caractere de preenchimento de ‘'0'’ com um tipo
     de alinhamento de ‘'='’, assim como no caso de *note float: 2f7.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/132710

   (2) https://github.com/python/cpython/issues/137273

   (3) https://github.com/python/cpython/issues/137257

   (4) https://github.com/python/cpython/issues/81325

   (5) https://github.com/python/cpython/issues/81325

   (6) https://github.com/python/cpython/issues/130522

   (7) https://github.com/python/cpython/issues/130577

   (8) https://github.com/python/cpython/issues/130577

   (9) https://github.com/python/cpython/issues/136549

   (10) https://github.com/python/cpython/issues/136523

   (11) https://github.com/python/cpython/issues/52876

   (12) https://github.com/python/cpython/issues/85702

   (13) https://github.com/python/cpython/issues/134759

   (14) https://github.com/python/cpython/issues/136028

   (15) https://github.com/python/cpython/issues/135995

   (16) https://github.com/python/cpython/issues/53203

   (17) https://github.com/python/cpython/issues/91555

   (18) https://github.com/python/cpython/issues/135878

   (19) https://github.com/python/cpython/issues/135836

   (20) https://github.com/python/cpython/issues/135836

   (21) https://github.com/python/cpython/issues/135855

   (22) https://github.com/python/cpython/issues/135815

   (23) https://github.com/python/cpython/issues/135640

   (24) https://github.com/python/cpython/issues/135444

   (25) https://github.com/python/cpython/issues/135497

   (26) https://github.com/python/cpython/issues/135487

   (27) https://github.com/python/cpython/issues/135335

   (28) https://github.com/python/cpython/issues/135244

   (29) 
https://datatracker.ietf.org/doc/html/rfc9562.html#section-6.10-3

   (30) https://github.com/python/cpython/issues/135069

   (31) https://github.com/python/cpython/issues/134698

   (32) https://github.com/python/cpython/issues/132124

   (33) https://github.com/python/cpython/issues/133439

   (34) https://github.com/python/cpython/issues/132969

   (35) https://github.com/python/cpython/issues/130664

   (36) https://github.com/python/cpython/issues/85702

   (37) https://github.com/python/cpython/issues/130664


File: python.info,  Node: Documentação<4>,  Next: Núcleo e embutidos<6>,  Prev: Biblioteca<7>,  Up: Python 3 13 6 final

1.23.7.7 Documentação
.....................

   - gh-135171(1): Documenta que o *note iterador: 1ac. para a cláusula
     ‘for’ mais à esquerda na expressão geradora é criado imediatamente.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135171


File: python.info,  Node: Núcleo e embutidos<6>,  Next: Construção<3>,  Prev: Documentação<4>,  Up: Python 3 13 6 final

1.23.7.8 Núcleo e embutidos
...........................

   - gh-58124(1): Corrige erros de codificação Python em Unicode do
     codec da página de código: usar “cp65000” e “cp65001” em vez de
     “CP_UTF7” e “CP_UTF8”, que não são nomes de código Python válidos.
     Patch por Victor Stinner.

   - gh-137314(2): Corrigida uma regressão em que f-strings brutas
     interpretavam incorretamente sequências de escape em especificações
     de formato.  As f-strings brutas agora preservam corretamente as
     contrabarras literais nas especificações de formato, correspondendo
     ao comportamento do Python 3.11.  Por exemplo, ‘rf"{obj:\xFF}"’
     agora produz corretamente ‘'\\xFF'’ em vez de ‘'ÿ'’.  Patch por
     Pablo Galindo.

   - gh-136541(3): Corrigimos alguns problemas com os trampolins do Perf
     em x86-64 e aarch64.  Os trampolins não estavam sendo gerados
     corretamente em alguns casos, o que poderia fazer com que a
     integração do Perf não funcionasse corretamente.  Patch por Pablo
     Galindo.

   - gh-109700(4): Corrige tratamento de erro de memória em *note
     PyDict_SetDefault(): 340.

   - gh-78465(5): Corrige mensagem de erro para ‘cls.__new__(cls, ...)’
     onde ‘cls’ não é um tipo de extensão ou embutido instanciável (com
     ‘tp_new’ definido como ‘NULL’).

   - gh-135871(6): Tentativas de trava de mutex não bloqueantes agora
     retornam imediatamente quando a trava está ocupado, em vez de girar
     brevemente na construção com *note threads livres: 15e4.

   - gh-135607(7): Corrige possíveis corridas *note weakref: 114. no
     destrutor de um objeto na construção com *note threads livres:
     15e4.

   - gh-135496(8): Corrige erro de digitação no tipo de conversão de
     f-strings (“exclamanation” -> “exclamation”).

   - gh-130077(9): Gera corretamente erros de sintaxe personalizados
     quando for encontrada uma sintaxe incorreta contendo nomes que são
     prefixos de palavras reservadas contextuais.  Patch por Pablo
     Galindo.

   - gh-135148(10): Corrigido um bug em que expressões de depuração de
     strings f (usando =) removiam incorretamente partes de strings
     contendo aspas de escape e caracteres #.  Patch por Pablo Galindo.

   - gh-133136(11): Limita o uso excessivo de memória na construção com
     *note threads livres: 15e4. quando um dicionário ou lista grande é
     redimensionado e acessado por várias threads.

   - gh-132617(12): Corrige verificação de modificação *note
     dict.update(): 14ad. que poderia levantar incorretamente um erro
     “dict mutated during update” quando um dicionário diferente era
     modificado e compartilhava o mesmo objeto de chaves subjacente.

   - gh-91153(13): Corrige uma falha quando um *note bytearray: 2ea. é
     mutado simultaneamente durante a atribuição de item.

   - gh-127971(14): Corrige leituras fora de um ponto além do final de
     uma string na pesquisa de string.

   - gh-125723(15): Corrige falha com ‘gi_frame.f_locals’ quando os
     frames do gerador duram mais que o gerador.  Patch por Mikhail
     Efimov.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/58124

   (2) https://github.com/python/cpython/issues/137314

   (3) https://github.com/python/cpython/issues/136541

   (4) https://github.com/python/cpython/issues/109700

   (5) https://github.com/python/cpython/issues/78465

   (6) https://github.com/python/cpython/issues/135871

   (7) https://github.com/python/cpython/issues/135607

   (8) https://github.com/python/cpython/issues/135496

   (9) https://github.com/python/cpython/issues/130077

   (10) https://github.com/python/cpython/issues/135148

   (11) https://github.com/python/cpython/issues/133136

   (12) https://github.com/python/cpython/issues/132617

   (13) https://github.com/python/cpython/issues/91153

   (14) https://github.com/python/cpython/issues/127971

   (15) https://github.com/python/cpython/issues/125723


File: python.info,  Node: Construção<3>,  Prev: Núcleo e embutidos<6>,  Up: Python 3 13 6 final

1.23.7.9 Construção
...................

   - gh-135497(1): Corrige a detecção de ‘MAXLOGNAME’ no script
     ‘configure.ac’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135497


File: python.info,  Node: Python 3 13 5 final,  Next: Python 3 13 4 final,  Prev: Python 3 13 6 final,  Up: Changelog

1.23.8 Python 3.13.5 final
--------------------------

'Release date: 2025-06-11'

* Menu:

* Windows: Windows<4>.
* Testes: Testes<5>.
* Biblioteca: Biblioteca<8>.
* Núcleo e embutidos: Núcleo e embutidos<7>.
* API C: API C<4>.


File: python.info,  Node: Windows<4>,  Next: Testes<5>,  Up: Python 3 13 5 final

1.23.8.1 Windows
................

   - gh-135151(1): Avoid distributing modified ‘pyconfig.h’ in the
     traditional installer.  Extension module builds must always specify
     ‘Py_GIL_DISABLED’ when targeting the free-threaded runtime.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135151


File: python.info,  Node: Testes<5>,  Next: Biblioteca<8>,  Prev: Windows<4>,  Up: Python 3 13 5 final

1.23.8.2 Testes
...............

   - gh-135120(1): Adiciona ‘test.support.subTests()’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135120


File: python.info,  Node: Biblioteca<8>,  Next: Núcleo e embutidos<7>,  Prev: Testes<5>,  Up: Python 3 13 5 final

1.23.8.3 Biblioteca
...................

   - gh-133967(1): Não normaliza o nome *note locale: 86. ‘C.UTF-8’ para
     ‘en_US.UTF-8’.

   - gh-135326(2): Restore support of integer-like objects with
     ‘__index__()’ in *note random.getrandbits(): 1043.

   - gh-135321(3): Levanta uma exceção correta para valores maiores que
     0x7fffffff para o opcode ‘BINSTRING’ na implementação C de *note
     pickle: a6.

   - gh-135276(4): Correções de bugs retroportadas em zipfile.Path do
     zipp 3.23.  Corrigidas ‘.name’, ‘.stem’ e outras propriedades
     baseadas em basename no Windows ao trabalhar com um arquivo zip em
     disco.

   - gh-134151(5): *note email: 3b.: Corrige *note TypeError: 2c3. em
     *note email.utils.decode_params(): 161c. ao classificar
     continuações RFC 2231(6) que contêm uma seção não numerada.

   - gh-134152(7): *note email: 3b.: Corrige análise de ID de mensagem
     de e-mail com domínio inválido.

   - gh-127081(8): Corrige problemas de segurança do thread libc com
     *note os: a1. substituindo ‘getlogin’ pela versão reentrante
     ‘getlogin_r’.

   - gh-131884(9): Corrige problemas de formatação em *note json.dump():
     d67. quando 'indent' e 'skipkeys' são usados.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/133967

   (2) https://github.com/python/cpython/issues/135326

   (3) https://github.com/python/cpython/issues/135321

   (4) https://github.com/python/cpython/issues/135276

   (5) https://github.com/python/cpython/issues/134151

   (6) https://datatracker.ietf.org/doc/html/rfc2231.html

   (7) https://github.com/python/cpython/issues/134152

   (8) https://github.com/python/cpython/issues/127081

   (9) https://github.com/python/cpython/issues/131884


File: python.info,  Node: Núcleo e embutidos<7>,  Next: API C<4>,  Prev: Biblioteca<8>,  Up: Python 3 13 5 final

1.23.8.4 Núcleo e embutidos
...........................

   - gh-135171(1): Roll back changes to generator and list
     comprehensions that went into 3.13.4 to fix gh-127682(2), but which
     involved semantic and bytecode changes not appropriate for a bugfix
     release.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135171

   (2) https://github.com/python/cpython/issues/127682


File: python.info,  Node: API C<4>,  Prev: Núcleo e embutidos<7>,  Up: Python 3 13 5 final

1.23.8.5 API C
..............

   - gh-134989(1): Corrige as macros ‘Py_RETURN_NONE’, ‘Py_RETURN_TRUE’
     e ‘Py_RETURN_FALSE’ na API C limitada 3.11 e anteriores: não trata
     ‘Py_None’, ‘Py_True’ e ‘Py_False’ como imortais.  Patch por Victor
     Stinner.

   - gh-134989(2): Implementa *note PyObject_DelAttr(): 161f. e *note
     PyObject_DelAttrString(): 1620. como macros na API C limitada 3.12
     e anteriores.  Patch por Victor Stinner.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/134989

   (2) https://github.com/python/cpython/issues/134989


File: python.info,  Node: Python 3 13 4 final,  Next: Python 3 13 3 final,  Prev: Python 3 13 5 final,  Up: Changelog

1.23.9 Python 3.13.4 final
--------------------------

'Release date: 2025-06-03'

* Menu:

* Windows: Windows<5>.
* Testes: Testes<6>.
* Segurança: Segurança<6>.
* Biblioteca: Biblioteca<9>.
* IDLE: IDLE<5>.
* Documentação: Documentação<5>.
* Biblioteca: Biblioteca<10>.
* Núcleo e embutidos: Núcleo e embutidos<8>.
* Biblioteca: Biblioteca<11>.
* Núcleo e embutidos: Núcleo e embutidos<9>.
* API C: API C<5>.
* Construção: Construção<4>.


File: python.info,  Node: Windows<5>,  Next: Testes<6>,  Up: Python 3 13 4 final

1.23.9.1 Windows
................

   - gh-130727(1): Corrige uma corrida em chamadas internas para o WMI
     que pode resultar em uma exceção de “identificador inválido” sob
     carga alta.  Patch por Chris Eibl.

   - gh-76023(2): Faz com que *note os.path.realpath(): 225. ignore o
     erro 1005 do Windows quando estiver no modo não estrito.

   - gh-133626(3): Garante que os pacotes não sejam acidentalmente
     agrupados no instalador tradicional.

   - gh-133512(4): Add warnings to *note Inicializador Python para
     Windows: 5be. about use of subcommands belonging to the Python
     install manager.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/130727

   (2) https://github.com/python/cpython/issues/76023

   (3) https://github.com/python/cpython/issues/133626

   (4) https://github.com/python/cpython/issues/133512


File: python.info,  Node: Testes<6>,  Next: Segurança<6>,  Prev: Windows<5>,  Up: Python 3 13 4 final

1.23.9.2 Testes
...............

   - gh-133744(1): Corrigido o teste de interrupção de
     multiprocessamento.  Adicionado um evento para sincronizar o
     processo pai com o processo filho: aguardar até que o processo
     filho comece a hibernar.  Patch por Victor Stinner.

   - gh-133639(2): Corrige
     ‘TestPyReplAutoindent.test_auto_indent_default()’ não executar
     ‘input_code’.

   - gh-133131(3): O ambiente de testes do iOS agora selecionará o
     dispositivo “classe SE” lançado mais recentemente para testes, caso
     um dispositivo não seja especificado explicitamente.

   - gh-109981(4): O auxiliar de teste que conta a lista de descritores
     de arquivo abertos agora usa a abordagem otimizada ‘/dev/fd’ em
     todas as plataformas Apple, não apenas no macOS. Isso evita
     travamentos causados por descritores de arquivo protegidos.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/133744

   (2) https://github.com/python/cpython/issues/133639

   (3) https://github.com/python/cpython/issues/133131

   (4) https://github.com/python/cpython/issues/109981


File: python.info,  Node: Segurança<6>,  Next: Biblioteca<9>,  Prev: Testes<6>,  Up: Python 3 13 4 final

1.23.9.3 Segurança
..................

   - gh-135034(1): Corrige vários problemas que permitiam que os filtros
     de extração ‘tarfile’ (‘filter="data"’ e ‘filter="tar"’) fossem
     ignorados usando links simbólicos e links físicos criados.

     Endereços CVE 2024-12718(2), CVE 2025-4138(3), CVE 2025-4330(4) e
     CVE 2025-4517(5).

   - gh-133767(6): Corrige uso após liberação no decodificador
     “unicode-escape” com um tratador de erros não “estrito”.

   - gh-128840(7): Faz um curto-circuito no processamento de endereços
     IPv6 longos no início de *note ipaddress: 80. para evitar consumo
     excessivo de memória e uma pequena negação de serviço.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/135034

   (2) https://www.cve.org/CVERecord?id=CVE-2024-12718

   (3) https://www.cve.org/CVERecord?id=CVE-2025-4138

   (4) https://www.cve.org/CVERecord?id=CVE-2025-4330

   (5) https://www.cve.org/CVERecord?id=CVE-2025-4517

   (6) https://github.com/python/cpython/issues/133767

   (7) https://github.com/python/cpython/issues/128840


File: python.info,  Node: Biblioteca<9>,  Next: IDLE<5>,  Prev: Segurança<6>,  Up: Python 3 13 4 final

1.23.9.4 Biblioteca
...................

   - gh-134718(1): *note ast.dump(): 8ea. agora só omite os valores
     ‘None’ e ‘[]’ se forem valores padrão.

   - gh-128840(2): Corrige a análise de endereços IPv6 longos com
     endereço IPv4 incorporado.

   - gh-134696(3): Implementações HACL* e OpenSSL embutidas de
     construtores de funções hash agora aceitam corretamente os mesmos
     argumentos nomeados 'documentados'.  Por exemplo, *note md5():
     1626. podia ser invocado anteriormente como ‘md5(data=data)’ ou
     ‘md5(string=string)’ dependendo da implementação subjacente, mas
     essas chamadas não eram compatíveis.  Patch por Bénédikt Tran.

   - gh-134210(4): *note curses.window.getch(): 1627. agora manipula
     sinais corretamente.  Patch por Bénédikt Tran.

   - gh-80334(5): *note multiprocessing.freeze_support(): 1628. agora
     verifica o trabalho em qualquer plataforma de método de
     inicialização “spawn”, em vez de apenas no Windows.

   - gh-114177(6): Corrige *note asyncio: a. para não fechar
     encadeamentos de subprocesso, o que de outra forma geraria erro
     quando o laço de eventos já estivesse fechado.

   - gh-134152(7): Corrigida *note UnboundLocalError: 157f. que poderia
     ocorrer durante a análise do cabeçalho *note email: 3b. se um
     delimitador final esperado estivesse faltando em alguns contextos.

   - gh-62184(8): Remove a importação da implementação C de *note
     io.FileIO: 1354. da implementação Python que tem sua própria
     implementação

   - gh-133982(9): Emite *note RuntimeWarning: 1bd. na implementação
     Python de *note io: 7f. quando o *note objeto arquivo ou similar:
     1203. não for fechado explicitamente na presença de múltiplas
     camadas de E/S.

   - gh-133890(10): O módulo *note tarfile: de. agora manipula *note
     UnicodeEncodeError: 677. da mesma forma que *note OSError: 417.
     quando não é possível extrair um membro.

   - gh-134097(11): Corrige interação da *note REPL: 16a. e a nova opção
     de linha de comando *note -X showrefcount: 176.

   - gh-133889(12): A página de listagem de diretório gerada em *note
     http.server.SimpleHTTPRequestHandler: b56. agora mostra apenas o
     componente do caminho decodificado da URL solicitada, e não a
     consulta e o fragmento.

   - gh-134098(13): Corrige caminhos de manipulação que terminam com uma
     barra codificada em porcentagem (‘%2f’ ou ‘%2F’) em *note
     http.server.SimpleHTTPRequestHandler: b56.

   - gh-134062(14): *note ipaddress: 80.: corrige colisões em *note
     __hash__(): b0e. para objetos *note IPv4Network: 1fe. e *note
     IPv6Network: 1ff.

   - gh-133745(15): In 3.13.3 we accidentally changed the signature of
     the asyncio ‘create_task()’ family of methods and how it calls a
     custom task factory in a backwards incompatible way.  Since some
     3rd party libraries have already made changes to work around the
     issue that might break if we simply reverted the changes, we’re
     instead changing things to be backwards compatible with 3.13.2
     while still supporting those workarounds for 3.13.3.  In
     particular, the special-casing of ‘name’ and ‘context’ is back
     (until 3.14) and consequently eager tasks may still find that their
     name hasn’t been set before they execute their first yielding
     await.

   - gh-71253(16): Levanta *note ValueError: 202. em *note open(): 51c.
     se 'opener' retornar um descritor de arquivo negativo na
     implementação Python de *note io: 7f. para corresponder à
     implementação C.

   - gh-77057(17): Corrige o tratamento de declarações de marcação
     inválidas em *note html.parser.HTMLParser: 87b.

   - gh-133489(18): *note random.getrandbits(): 1043. agora pode gerar
     mais de 2^31 bits.  *note random.randbytes(): 1629. agora pode
     gerar mais de 256 MiB.

   - gh-133290(19): Corrige problema de armazenamento em cache de
     atributo ao definir *note ctypes._Pointer._type_: 162a. na função
     não documentada e descontinuada ‘ctypes.SetPointerType()’ e no
     método não documentado ‘set_type()’.

   - gh-132876(20): ‘ldexp()’ no Windows não arredonda resultados abaixo
     do normal antes do Windows 11, mas deveria.  O invólucro de *note
     math.ldexp(): 162b. do Python agora os arredonda, então os
     resultados podem mudar um pouco, em casos raros de resultados muito
     pequenos, em versões do Windows anteriores à 11.

   - gh-133089(21): Usa o valor de tempo limite original para *note
     subprocess.TimeoutExpired: 15ce. quando a função *note
     subprocess.run(): b9e. for chamada com um tempo limite em vez de,
     às vezes, um valor de tempo limite parcial restante confuso usado
     internamente no ‘wait()’ final.

   - gh-133009(22): *note xml.etree.ElementTree: 125.: Corrige uma falha
     em *note Element.__deepcopy__: 15fd. quando o elemento sofre
     mutação simultânea.  Patch por Bénédikt Tran.

   - gh-132995(23): Aumenta a versão do pip incluído no EnsurePip para a
     versão 25.1.1

   - gh-132017(24): Corrige erro quando ‘pyrepl’ é suspenso e depois
     retomado e encerrado.

   - gh-132673(25): Corrige uma falha ao usar ‘_align_ = 0’ e ‘_fields_
     = []’ em uma *note ctypes.Structure: 1d4.

   - gh-132527(26): Inclui o typecode válido ‘w’ na mensagem de erro
     quando um typecode inválido for passado para *note array.array:
     1a0.

   - gh-132439(27): Corrigido ‘PyREPL’ no Windows: caracteres inseridos
     via AltGr são engolidos.  Patch por Chris Eibl.

   - gh-132429(28): Corrige o suporte de soquetes Bluetooth no NetBSD e
     no DragonFly BSD.

   - gh-132106(29): *note QueueListener.start: 162c. agora levanta uma
     *note RuntimeError: 195. se o listener já estiver iniciado.

   - gh-132417(30): Corrige uma desreferência de ponteiro ‘NULL’ quando
     uma função C chamada usando *note ctypes: 2a. com ‘restype’ *note
     py_object: 147f. retorna ‘NULL’.

   - gh-132385(31): Corrige sugestões de erro de instância que acionam
     possíveis exceções em *note object.__getattr__(): 4d3. em *note
     traceback: fe.

   - gh-132308(32): Uma exceção *note traceback.TracebackException: 25c.
     agora renderiza corretamente os atributos ‘__context__’ e
     ‘__cause__’ da *note Exception: 9e2. *note falsa: 162d, e o
     atributo ‘exceptions’ de falsey *note ExceptionGroup: 1b6.

   - gh-132250(33): Corrigida a *note SystemError: 575. em *note
     cProfile: 27. quando localizar a função C real de um método levanta
     uma exceção.

   - gh-132063(34): Evita que exceções avaliadas como falsas (ou seja,
     quando o método ‘__bool__’ retorna ‘False’ ou o método ‘__len__’
     retorna 0) sejam ignoradas por *note
     concurrent.futures.ProcessPoolExecutor: 8f4. e *note
     concurrent.futures.ThreadPoolExecutor: 742.

   - gh-119605(35): Respeita ‘follow_wrapped’ para os métodos
     ‘__init__()’ e ‘__new__()’ ao obter a assinatura de classe para uma
     classe com *note inspect.signature(): 738.  Preserva a assinatura
     de classe após o encapsulamento com *note warnings.deprecated():
     160.  Patch por Xuehai Pan.

   - gh-91555(36): Ignora mensagens de log geradas durante o tratamento
     de mensagens de log para evitar impasse ou recursão infinita.
     [NOTA: Eta alteração foi revertida posteriormente.]

   - gh-131434(37): Melhora o relatório de erros para formato incorreto
     em *note time.strptime(): 1474.

   - gh-131127(38): Sistemas que usam LibreSSL agora são construídos com
     sucesso.

   - gh-130999(39): Evita sair do novo REPL e oferece sugestões mesmo se
     houver candidatos que não sejam strings quando ocorrerem erros.

   - gh-130941(40): Corrige *note configparser.ConfigParser: 1c8.
     analisando interpolação vazia com ‘allow_no_value’ definido como
     ‘True’.

   - gh-129098(41): Corrige o relatório de traceback do REPL ao usar
     *note compile(): 192. com um arquivo inexistente.  Patch por
     Bénédikt Tran.

   - gh-130631(42): ‘http.cookiejar.join_header_words()’ agora é mais
     semelhante à versão original do Perl.  Agora, ele coloca aspas o
     mesmo conjunto de caracteres e sempre coloca aspas em valores que
     terminam com ‘"\n"’.

   - gh-129719(43): Corrige a constante ‘socket.CAN_RAW_ERR_FILTER’
     ausente no módulo socket em sistemas Linux.  Ela estava ausente
     desde o Python 3.11.

   - gh-124096(44): Ativa o modo de terminal virtual e habilita a
     colagem entre colchetes no REPL no console do Windows.  (Se o
     terminal não oferecer suporte à colagem entre colchetes,
     habilitá-la não fará nada.)

   - gh-122559(45): Remove os métodos ‘__reduce__()’ e ‘__reduce_ex__()’
     que sempre levantam *note TypeError: 2c3. na implementação em C de
     *note io.FileIO: 1354, *note io.BufferedReader: 124e, *note
     io.BufferedWriter: 13f8. e *note io.BufferedRandom: 13f9. e
     substitua-os pelos métodos padrão ‘__getstate__()’ que levantam
     ‘TypeError’.  Isso restaura detalhes precisos do comportamento do
     Python 3.11 e versões anteriores.

   - gh-122179(46): *note hashlib.file_digest(): 644. agora levanta
     *note BlockingIOError: 1090. quando não há dados disponíveis
     durante E/S não bloqueantes.  Antes, ele adicionava bytes nulos
     espúrios ao resumo.

   - gh-86155(47): *note html.parser.HTMLParser.close(): 162e. não perde
     mais dados quando a tag ‘<script>’ não está fechada.  Patch por
     Waylan Limberg.

   - gh-69426(48): Corrige *note html.parser.HTMLParser: 87b. para não
     desfazer o escape de entidades de caracteres em valores de
     atributos se eles forem seguidos por um alfanumérico ASCII ou um
     sinal de igual.

   - bpo-44172(49): Mantém uma referência às janelas originais *note
     curses: 2b. nas subjanelas para que a janela original não seja
     excluída antes das subjanelas.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/134718

   (2) https://github.com/python/cpython/issues/128840

   (3) https://github.com/python/cpython/issues/134696

   (4) https://github.com/python/cpython/issues/134210

   (5) https://github.com/python/cpython/issues/80334

   (6) https://github.com/python/cpython/issues/114177

   (7) https://github.com/python/cpython/issues/134152

   (8) https://github.com/python/cpython/issues/62184

   (9) https://github.com/python/cpython/issues/133982

   (10) https://github.com/python/cpython/issues/133890

   (11) https://github.com/python/cpython/issues/134097

   (12) https://github.com/python/cpython/issues/133889

   (13) https://github.com/python/cpython/issues/134098

   (14) https://github.com/python/cpython/issues/134062

   (15) https://github.com/python/cpython/issues/133745

   (16) https://github.com/python/cpython/issues/71253

   (17) https://github.com/python/cpython/issues/77057

   (18) https://github.com/python/cpython/issues/133489

   (19) https://github.com/python/cpython/issues/133290

   (20) https://github.com/python/cpython/issues/132876

   (21) https://github.com/python/cpython/issues/133089

   (22) https://github.com/python/cpython/issues/133009

   (23) https://github.com/python/cpython/issues/132995

   (24) https://github.com/python/cpython/issues/132017

   (25) https://github.com/python/cpython/issues/132673

   (26) https://github.com/python/cpython/issues/132527

   (27) https://github.com/python/cpython/issues/132439

   (28) https://github.com/python/cpython/issues/132429

   (29) https://github.com/python/cpython/issues/132106

   (30) https://github.com/python/cpython/issues/132417

   (31) https://github.com/python/cpython/issues/132385

   (32) https://github.com/python/cpython/issues/132308

   (33) https://github.com/python/cpython/issues/132250

   (34) https://github.com/python/cpython/issues/132063

   (35) https://github.com/python/cpython/issues/119605

   (36) https://github.com/python/cpython/issues/91555

   (37) https://github.com/python/cpython/issues/131434

   (38) https://github.com/python/cpython/issues/131127

   (39) https://github.com/python/cpython/issues/130999

   (40) https://github.com/python/cpython/issues/130941

   (41) https://github.com/python/cpython/issues/129098

   (42) https://github.com/python/cpython/issues/130631

   (43) https://github.com/python/cpython/issues/129719

   (44) https://github.com/python/cpython/issues/124096

   (45) https://github.com/python/cpython/issues/122559

   (46) https://github.com/python/cpython/issues/122179

   (47) https://github.com/python/cpython/issues/86155

   (48) https://github.com/python/cpython/issues/69426

   (49) https://bugs.python.org/issue?@action=redirect&bpo=44172


File: python.info,  Node: IDLE<5>,  Next: Documentação<5>,  Prev: Biblioteca<9>,  Up: Python 3 13 4 final

1.23.9.5 IDLE
.............

   - gh-112936(1): corrige IDLE: nenhum item de menu Shell no modo de
     processo único.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/112936


File: python.info,  Node: Documentação<5>,  Next: Biblioteca<10>,  Prev: IDLE<5>,  Up: Python 3 13 4 final

1.23.9.6 Documentação
.....................

   - gh-107006(1): Move a documentação e o código de exemplo para *note
     threading.local: 1631. da docstring para a documentação oficial.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/107006


File: python.info,  Node: Biblioteca<10>,  Next: Núcleo e embutidos<8>,  Prev: Documentação<5>,  Up: Python 3 13 4 final

1.23.9.7 Biblioteca
...................

   - gh-134908(1): Corrige falha ao iterar sobre linhas em um arquivo
     texto na construção com *note threads livres: 15e4.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/134908


File: python.info,  Node: Núcleo e embutidos<8>,  Next: Biblioteca<11>,  Prev: Biblioteca<10>,  Up: Python 3 13 4 final

1.23.9.8 Núcleo e embutidos
...........................

   - gh-127682(1): Não chama mais ‘__iter__’ duas vezes em compreensões
     de lista.  Isso alinha o comportamento das compreensões de lista
     com outras formas de iteração.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/127682


File: python.info,  Node: Biblioteca<11>,  Next: Núcleo e embutidos<9>,  Prev: Núcleo e embutidos<8>,  Up: Python 3 13 4 final

1.23.9.9 Biblioteca
...................

   - gh-134381(1): Corrige *note RuntimeError: 195. ao usar um *note
     threading.Thread: 953. não iniciado após chamar *note os.fork():
     197.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/134381


File: python.info,  Node: Núcleo e embutidos<9>,  Next: API C<5>,  Prev: Biblioteca<11>,  Up: Python 3 13 4 final

1.23.9.10 Núcleo e embutidos
............................

   - gh-128066(1): Corrige um caso extremo em que o PyREPL levantava um
     erro incorretamente quando o Python era invocado em um sistema de
     arquivos somente leitura ao tentar gravar entradas no arquivo de
     histórico.

   - gh-134100(2): Corrige um bug de uso após liberação que ocorre
     quando um módulo importado não está em *note sys.modules: 1636.
     após sua importação inicial.  Patch por Nico-Posada.

   - gh-133703(3): Corrige que a tabela de hash no dicionário pode ser
     maior do que o pretendido em algumas situações.

   - gh-132869(4): Fix crash in the *note free threading: 15e4. build
     when accessing an object attribute that may be concurrently
     inserted or deleted.

   - gh-132762(5): *note fromkeys(): 1637. não entra mais em laço
     infinito ao adicionar um pequeno conjunto de chaves a um dicionário
     base grande.  Patch por Angela Liss.

   - gh-133543(6): Fix a possible memory leak that could occur when
     directly accessing instance dictionaries (‘__dict__’) that later
     become part of a reference cycle.

   - gh-133516(7): Levanta *note ValueError: 202. quando as constantes
     ‘True’, ‘False’ ou ‘None’ forem usadas como um identificador após a
     normalização NFKC.

   - gh-133441(8): Fix crash upon setting an attribute with a *note
     dict: 256. subclass.  Patch by Victor Stinner.

   - gh-132942(9): Corrige duas corridas no cache de pesquisa de tipos.
     Isso afetava a construção com threads livres e podia causar
     travamentos (aparentemente bastante difíceis de acionar).

   - gh-132713(10): Corrige a condição de corrida ‘repr(list)’: mantém
     uma referência forte ao item ao chamar ‘repr(item)’.  Patch por
     Victor Stinner.

   - gh-132747(11): Corrige uma falha ao chamar *note __get__(): 1530.
     de um *note method: 1638. com um segundo argumento *note None: 675.

   - gh-132542(12): Atualiza *note Thread.native_id: a48. após
     ‘fork(2)(13)’ para garantir a precisão.  Patch por Noam Cohen.

   - gh-124476(14): Corrige decodificação da codificação local no local
     C.UTF-8.

   - gh-131927(15): Avisos do compilador originados do mesmo módulo e
     número de linha agora são emitidos apenas uma vez, correspondendo
     ao comportamento dos avisos emitidos pelo código do usuário.  Isso
     também pode ser configurado com filtros *note warnings: 112.

   - gh-127682(16): Não é mais necessário chamar ‘__iter__’ duas vezes
     ao criar e executar uma expressão geradora.  A criação de uma
     expressão geradora a partir de uma expressão não iterável só será
     levantada quando a expressão geradora for executada.  Isso alinha o
     comportamento das expressões geradoras com outros geradores.

   - gh-131878(17): Trata exceções não capturadas no laço de entrada
     principal para o novo REPL.

   - gh-131878(18): Corrige suporte a caracteres Unicode com dois ou
     mais pontos de código no Windows no novo REPL.

   - gh-130804(19): Corrige suporte a caracteres Unicode no Windows no
     novo REPL.

   - gh-130070(20): Corrigido um erro de asserção para *note exec():
     17f. passando uma string ‘source’ e uma ‘closure’ não ‘None’.
     Patch por Bartosz Sławecki.

   - gh-129958(21): Corrige um bug que permitia quebras de linha
     inconsistentes em especificadores de formato para f-strings entre
     aspas simples.  Patch por Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/128066

   (2) https://github.com/python/cpython/issues/134100

   (3) https://github.com/python/cpython/issues/133703

   (4) https://github.com/python/cpython/issues/132869

   (5) https://github.com/python/cpython/issues/132762

   (6) https://github.com/python/cpython/issues/133543

   (7) https://github.com/python/cpython/issues/133516

   (8) https://github.com/python/cpython/issues/133441

   (9) https://github.com/python/cpython/issues/132942

   (10) https://github.com/python/cpython/issues/132713

   (11) https://github.com/python/cpython/issues/132747

   (12) https://github.com/python/cpython/issues/132542

   (13) https://manpages.debian.org/fork(2)

   (14) https://github.com/python/cpython/issues/124476

   (15) https://github.com/python/cpython/issues/131927

   (16) https://github.com/python/cpython/issues/127682

   (17) https://github.com/python/cpython/issues/131878

   (18) https://github.com/python/cpython/issues/131878

   (19) https://github.com/python/cpython/issues/130804

   (20) https://github.com/python/cpython/issues/130070

   (21) https://github.com/python/cpython/issues/129958


File: python.info,  Node: API C<5>,  Next: Construção<4>,  Prev: Núcleo e embutidos<9>,  Up: Python 3 13 4 final

1.23.9.11 API C
...............

   - gh-132909(1): Corrige um estouro ao manipular o formato *note K:
     163a. em *note Py_BuildValue(): 8ac.  Patch por Bénédikt Tran.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/132909


File: python.info,  Node: Construção<4>,  Prev: API C<5>,  Up: Python 3 13 4 final

1.23.9.12 Construção
....................

   - gh-134923(1): As construções do Windows com otimização guiada por
     perfil habilitada agora usam ‘/GENPROFILE’ e ‘/USEPROFILE’ em vez
     das opções descontinuadas ‘/LTCG:’.

   - gh-133183(2): Os shims do compilador iOS agora incluem
     ‘IPHONEOS_DEPLOYMENT_TARGET’ em triplos de destino, garantindo que
     os mínimos da versão do SDK sejam respeitados.

   - gh-133167(3): Corrige o processo de compilação com
     ‘--enable-optimizations’ e ‘--without-docstrings’.

   - gh-132649(4): O script ‘PClayout’ agora permite passar
     ‘--include-tcltk’ no Windows ARM64.

   - gh-117088(5): O ligador AIX não oferece suporte à opção -h,
     portanto, evita-a por meio da verificação da plataforma

   - gh-132026(6): Corrige o uso de identificadores indefinidos na
     detecção de tripletos de plataforma em plataformas MIPS Linux.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/134923

   (2) https://github.com/python/cpython/issues/133183

   (3) https://github.com/python/cpython/issues/133167

   (4) https://github.com/python/cpython/issues/132649

   (5) https://github.com/python/cpython/issues/117088

   (6) https://github.com/python/cpython/issues/132026


File: python.info,  Node: Python 3 13 3 final,  Next: Python 3 13 2 final,  Prev: Python 3 13 4 final,  Up: Changelog

1.23.10 Python 3.13.3 final
---------------------------

'Data de lançamento: 2025-04-08'

* Menu:

* macOS: macOS<3>.
* Windows: Windows<6>.
* Ferramentas/Demos: Ferramentas/Demos<5>.
* Testes: Testes<7>.
* Segurança: Segurança<7>.
* Biblioteca: Biblioteca<12>.
* IDLE: IDLE<6>.
* Documentação: Documentação<6>.
* Núcleo e embutidos: Núcleo e embutidos<10>.
* Biblioteca: Biblioteca<13>.
* Núcleo e embutidos: Núcleo e embutidos<11>.
* API C: API C<6>.
* Construção: Construção<5>.


File: python.info,  Node: macOS<3>,  Next: Windows<6>,  Up: Python 3 13 3 final

1.23.10.1 macOS
...............

   - gh-124111(1): Atualiza o instalador do macOS para usar o Tcl/Tk
     8.6.16.

   - gh-131423(2): Atualiza o instalador do macOS para usar o OpenSSL
     3.0.16.  Patch por Bénédikt Tran.

   - gh-131025(3): Atualiza o instalador do macOS para ser fornecido com
     o SQLite 3.49.1.

   - gh-91132(4): Atualiza o instalador do macOS para usar o ncurses
     6.5.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124111

   (2) https://github.com/python/cpython/issues/131423

   (3) https://github.com/python/cpython/issues/131025

   (4) https://github.com/python/cpython/issues/91132


File: python.info,  Node: Windows<6>,  Next: Ferramentas/Demos<5>,  Prev: macOS<3>,  Up: Python 3 13 3 final

1.23.10.2 Windows
.................

   - gh-131423(1): Atualiza a versão empacotada do OpenSSL para 3.0.16.
     A nova construção também desabilita o suporte a uplink, o que pode
     ser relevante para incorporadores, mas não tem impacto no uso
     normal.

   - gh-131025(2): Atualiza o instalador do Windows para ser fornecido
     com o SQLite 3.49.1.

   - gh-131020(3): pylauncher(4) detecta corretamente um BOM ao procurar
     pelo shebang.  Correção por Chris Eibl.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131423

   (2) https://github.com/python/cpython/issues/131025

   (3) https://github.com/python/cpython/issues/131020

   (4) https://github.com/python/cpython/tree/3.13/PC/launcher2.c


File: python.info,  Node: Ferramentas/Demos<5>,  Next: Testes<7>,  Prev: Windows<6>,  Up: Python 3 13 3 final

1.23.10.3 Ferramentas/Demos
...........................

   - gh-131852(1): ‘msgfmt’ não adiciona mais ‘POT-Creation-Date’ aos
     arquivos ‘.mo’ gerados para consistência com GNU ‘msgfmt’.

   - gh-85012(2): Redefine corretamente ‘msgctxt’ ao compilar mensagens
     em ‘msgfmt’.

   - gh-130025(3): O ambiente de teste do iOS agora manipula
     corretamente links simbólicos usados como referências de framework
     Python.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131852

   (2) https://github.com/python/cpython/issues/85012

   (3) https://github.com/python/cpython/issues/130025


File: python.info,  Node: Testes<7>,  Next: Segurança<7>,  Prev: Ferramentas/Demos<5>,  Up: Python 3 13 3 final

1.23.10.4 Testes
................

   - gh-131050(1): ‘test_ssl.test_dh_params’ é ignorado se a biblioteca
     TLS subjacente não oferecer suporte a Diffie-Hellman efêmero de
     campo finito.

   - gh-129200(2): Agora, vários executores do ambiente de testes do iOS
     podem ser iniciados ao mesmo tempo sem gerar ambiguidade sobre a
     propriedade do simulador.

   - gh-130292(3): O banco de testes do iOS agora será executado com
     sucesso em uma máquina que não executou testes do Xcode
     anteriormente (como configurações de CI).

   - gh-130293(4): Os testes de colorização terminal não são mais
     sensíveis ao valor da variável ‘TERM’ no ambiente de teste.

   - gh-126332(5): Adiciona testes de unidade para pyrepl.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131050

   (2) https://github.com/python/cpython/issues/129200

   (3) https://github.com/python/cpython/issues/130292

   (4) https://github.com/python/cpython/issues/130293

   (5) https://github.com/python/cpython/issues/126332


File: python.info,  Node: Segurança<7>,  Next: Biblioteca<12>,  Prev: Testes<7>,  Up: Python 3 13 3 final

1.23.10.5 Segurança
...................

   - gh-131809(1): Atualiza libexpat empacotado para 2.7.1

   - gh-131261(2): Atualiza para libexpat 2.7.0

   - gh-127371(3): Evita buffering ilimitado para
     ‘tempfile.SpooledTemporaryFile.writelines()’.  Anteriormente, o
     spillover de disco era verificado somente após o iterador de linhas
     ter sido esgotado.  Agora, isso é feito após cada linha ser
     escrita.

   - gh-121284(4): Corrige bug na dobragem ('folding') de palavras
     codificadas do rfc2047 ao achatar uma mensagem de e-mail usando uma
     política de e-mail moderna.  Anteriormente, quando uma palavra
     codificada era muito longa para uma linha, ela era decodificada,
     dividida em linhas e recodificada.  Mas vírgulas e outros
     caracteres especiais no texto original podiam ser deixados sem
     codificação e sem aspas.  Isso poderia teoricamente ser usado para
     falsificar linhas de cabeçalho usando uma palavra codificada
     cuidadosamente construída se o e-mail renderizado resultante fosse
     transmitido ou reanalisado.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131809

   (2) https://github.com/python/cpython/issues/131261

   (3) https://github.com/python/cpython/issues/127371

   (4) https://github.com/python/cpython/issues/121284


File: python.info,  Node: Biblioteca<12>,  Next: IDLE<6>,  Prev: Segurança<7>,  Up: Python 3 13 3 final

1.23.10.6 Biblioteca
....................

   - gh-132174(1): Corrige o nome da função na mensagem de erro
     ‘_interpreters.run_string’.

   - gh-132171(2): Corrige falha de ‘_interpreters.run_string’ em
     subclasses de string.

   - gh-129204(3): Introduz o novo botão de variável de ambiente
     ‘_PYTHON_SUBPROCESS_USE_POSIX_SPAWN’ em *note subprocess: d6. para
     controlar o uso de *note os.posix_spawn(): 220.

   - gh-132159(4): Não oculta argumentos de usuário em ‘__new__()’
     gerado pelo decorador *note warnings.deprecated: 160.  Patch por
     Xuehai Pan.

   - gh-132075(5): Corrige possível uso de estruturas de endereço *note
     socket: cc. com membros não inicializados.  Agora, todos os membros
     da estrutura são inicializados com zeros por padrão.

   - gh-132002(6): Corrige falha ao desalocar *note
     contextvars.ContextVar: 1643. com nomes de strings estranhos e não
     hasheáveis.

   - gh-131668(7): *note socket: cc.: Corrige código que analisa
     endereços de soquete AF_BLUETOOTH.

   - gh-131492(8): Corrige um vazamento de recursos quando a construção
     de um *note gzip.GzipFile: 41a. com um nome de arquivo falha, por
     exemplo, ao passar um ‘compresslevel’ inválido.

   - gh-131325(9): Corrige implementação de fallback do sendfile para
     drenar dados após gravar no transporte em *note asyncio: a.

   - gh-129843(10): Corrige passagem de argumento incorreta em *note
     warnings.warn_explicit(): d22.

   - gh-131204(11): Usa a fonte monoespaçada do System Font Stack para
     suporte multiplataforma em *note difflib.HtmlDiff: 1644.

   - gh-130940(12): O atributo ‘PyConfig.use_system_logger’, introduzido
     no Python 3.13.2, foi removido.  A introdução desse atributo
     introduziu inadvertidamente uma quebra de ABI no macOS e iOS. O uso
     do registrador do sistema agora é habilitado por padrão no iOS e
     desabilitado por padrão no macOS.

   - gh-131045(13): Corrige problema com ‘__contains__’, valores e
     pseudomembros para *note enum.Flag: 623.

   - gh-130959(14): Corrige implementação puro Python de *note
     datetime.time.fromisoformat(): 616. para rejeitar horários com
     espaços na parte fracionária (por exemplo, ‘12:34:56.400 +02:00’),
     correspondendo à implementação C. Patch por Michał Gorny.

   - gh-130637(15): Adiciona validação para dados de resposta numérica
     no método poplib.POP3.stat()

   - gh-130461(16): Remova as diretivas ‘.. index::’ da documentação do
     módulo *note uuid: 110.  Essas diretivas criaram entradas
     anteriormente no índice geral para *note getnode(): bbf, bem como
     as funções construtoras *note uuid1(): bc0, *note uuid3(): 1645,
     *note uuid4(): 1646. e *note uuid5(): 1647.

   - gh-130379(17): O módulo zipapp agora calcula a lista de arquivos a
     serem adicionados ao arquivo antes de criá-lo.  Isso evita incluir
     acidentalmente o alvo quando ele está sendo criado no diretório de
     origem.

   - gh-130285(18): Corrige casos extremos para *note random.sample():
     746. permitindo que o parâmetro 'counts' especifique uma população
     vazia.  Então agora, ‘sample([], 0, counts=[])’ e ‘sample('abc',
     k=0, counts=[0, 0, 0])’ ambos dão o mesmo resultado que ‘sample([],
     0)’.

   - gh-130250(19): Corrige uma regressão em ‘traceback.print_last()’.

   - gh-130230(20): Corrige falha em *note pow(): 9da. com apenas *note
     Decimal: 29d. terceiro argumento.

   - gh-118761(21): Reverte uma alteração na versão anterior, tentando
     tornar preguiçosas algumas importações stdlib usadas no módulo
     *note subprocess: d6, pois isso estava causando erros durante os
     finalizadores ‘__del__’ que chamavam métodos como ‘terminate’,
     ‘kill’ ou ‘send_signal’.

   - gh-130164(22): Corrigia uma falha ao levantar *note TypeError: 2c3.
     em *note inspect.Signature.bind(): 1648. para argumentos somente
     posicionais fornecidos como nomeados quando um argumento nomeado
     variável (por exemplo, ‘**kwargs’) está presente.

   - gh-130151(23): Corrigir vazamentos de referência em
     ‘_hashlib.hmac_new()’ e ‘_hashlib.hmac_digest()’.  Patch por
     Bénédikt Tran.

   - gh-130145(24): Corrige ‘asyncio.AbstractEventloop.run_forever()’
     quando outro laço já estiver em execução.

   - gh-129726(25): Corrige *note gzip.GzipFile: 41a. levantando uma
     exceção não levantável durante a coleta de lixo ao fazer referência
     a um objeto temporário, interrompendo o laço de referências com
     *note weakref: 114.

   - gh-127750(26): Remove armazenamento em cache quebrado de *note
     functools.singledispatchmethod(): 9f8. introduzido em gh-85160(27).

   - gh-129583(28): Atualiza pip empacotado para 25.0.1

   - gh-97850(29): Atualiza o aviso de descontinuação de *note
     importlib.abc.Loader.load_module(): 86d.

   - gh-129646(30): Atualiza o mapeamento de apelido de localidade no
     módulo *note locale: 86. para corresponder ao mapeamento de apelido
     de localidade mais recente do X Org e oferecer suporte a novas
     localidades no Glibc 2.41.

   - gh-129603(31): Corrige bugs onde objetos *note sqlite3.Row: ea0.
     poderiam sofrer segfault se seu *note description: 1649. herdado
     fosse definido como ‘None’.  Patch por Erlend Aasland.

   - gh-128231(32): A execução de múltiplas instruções no novo REPL
     agora para imediatamente após a primeira exceção encontrada.  Patch
     por Bartosz Sławecki.

   - gh-117779(33): Corrigida a leitura de entradas duplicadas em *note
     zipfile: 131. por nome.  A leitura de entradas duplicadas (exceto a
     última) por ‘ZipInfo’ agora emite um aviso em vez de levantar uma
     exceção.

   - gh-128772(34): Corrige *note pydoc: b5. para métodos com o atributo
     ‘__module__’ igual a ‘None’.

   - gh-92897(35): Foi agendada a descontinuação do argumento
     ‘check_home’ de *note sysconfig.is_python_build(): 2dd. para o
     Python 3.15.

   - gh-128657(36): Corrige possível referência extra ao usar objetos
     retornados por *note hashlib.sha256(): 164a. em *note threads
     livres: 15e4.

   - gh-128703(37): Corrige *note mimetypes.guess_type(): 208. para usar
     o mapeamento padrão para ‘Content-Type’ vazio no registro.

   - gh-128308(38): Adiciona suporte ao argumento nomeado 'name' para
     tarefas ansiosas em *note asyncio.loop.create_task(): 1c0, *note
     asyncio.create_task(): 1bf. e *note
     asyncio.TaskGroup.create_task(): 1bc, passando todos os 'kwargs'
     para a fábrica de tarefas definida por *note
     asyncio.loop.set_task_factory(): dee.

   - gh-128388(39): Corrige ‘PyREPL’ no Windows para oferecer suporte a
     mais atalhos de teclado, como os atalhos de teclado para pular
     palavras ‘Control’-‘←’ e ‘Control’-‘→’ e aqueles com meta (isto é,
     ‘Alt’), por exemplo, ‘Alt’-‘d’ para ‘kill-word’ ou
     ‘Alt’-‘Backspace’ para ‘backward-kill-word’.

   - gh-126037(40): *note xml.etree.ElementTree: 125.: Corrige uma falha
     em *note Element.find: 164b, *note Element.findtext: 164c. e *note
     Element.findall: 164d. quando a tag a ser encontrada implementa um
     método *note __eq__(): b0d. que altera o elemento que está sendo
     consultado.  Patch por Bénédikt Tran.

   - gh-127712(41): Corrige o tratamento do argumento ‘secure’ de *note
     logging.handlers.SMTPHandler: 164e.

   - gh-126033(42): *note xml.etree.ElementTree: 125.: Corrige uma falha
     em *note Element.remove: 164f. quando o elemento é mutado
     simultaneamente.  Patch por Bénédikt Tran.

   - gh-118201(43): Falhas intermitentes corrigidas de *note os.confstr:
     1650, *note os.pathconf: 113a. e *note os.sysconf: 1651. no iOS e
     no Android.

   - gh-124927(44): Caracteres não imprimíveis agora são manipulados
     corretamente no novo REPL.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/132174

   (2) https://github.com/python/cpython/issues/132171

   (3) https://github.com/python/cpython/issues/129204

   (4) https://github.com/python/cpython/issues/132159

   (5) https://github.com/python/cpython/issues/132075

   (6) https://github.com/python/cpython/issues/132002

   (7) https://github.com/python/cpython/issues/131668

   (8) https://github.com/python/cpython/issues/131492

   (9) https://github.com/python/cpython/issues/131325

   (10) https://github.com/python/cpython/issues/129843

   (11) https://github.com/python/cpython/issues/131204

   (12) https://github.com/python/cpython/issues/130940

   (13) https://github.com/python/cpython/issues/131045

   (14) https://github.com/python/cpython/issues/130959

   (15) https://github.com/python/cpython/issues/130637

   (16) https://github.com/python/cpython/issues/130461

   (17) https://github.com/python/cpython/issues/130379

   (18) https://github.com/python/cpython/issues/130285

   (19) https://github.com/python/cpython/issues/130250

   (20) https://github.com/python/cpython/issues/130230

   (21) https://github.com/python/cpython/issues/118761

   (22) https://github.com/python/cpython/issues/130164

   (23) https://github.com/python/cpython/issues/130151

   (24) https://github.com/python/cpython/issues/130145

   (25) https://github.com/python/cpython/issues/129726

   (26) https://github.com/python/cpython/issues/127750

   (27) https://github.com/python/cpython/issues/85160

   (28) https://github.com/python/cpython/issues/129583

   (29) https://github.com/python/cpython/issues/97850

   (30) https://github.com/python/cpython/issues/129646

   (31) https://github.com/python/cpython/issues/129603

   (32) https://github.com/python/cpython/issues/128231

   (33) https://github.com/python/cpython/issues/117779

   (34) https://github.com/python/cpython/issues/128772

   (35) https://github.com/python/cpython/issues/92897

   (36) https://github.com/python/cpython/issues/128657

   (37) https://github.com/python/cpython/issues/128703

   (38) https://github.com/python/cpython/issues/128308

   (39) https://github.com/python/cpython/issues/128388

   (40) https://github.com/python/cpython/issues/126037

   (41) https://github.com/python/cpython/issues/127712

   (42) https://github.com/python/cpython/issues/126033

   (43) https://github.com/python/cpython/issues/118201

   (44) https://github.com/python/cpython/issues/124927


File: python.info,  Node: IDLE<6>,  Next: Documentação<6>,  Prev: Biblioteca<12>,  Up: Python 3 13 3 final

1.23.10.7 IDLE
..............

   - gh-129873(1): Simplifica a exibição da documentação do IDLE
     copiando apenas a seção de texto de idle.html para
     idlelib/help.html.  Patch por Stan Ulbrych.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129873


File: python.info,  Node: Documentação<6>,  Next: Núcleo e embutidos<10>,  Prev: IDLE<6>,  Up: Python 3 13 3 final

1.23.10.8 Documentação
......................

   - gh-131417(1): Menciona *note asyncio.Future: be6. e *note
     asyncio.Task: 1be. na lista de classes genéricas.

   - gh-125722(2): Requer Sphinx 8.2.0 ou posterior para construir a
     documentação do Python.  Patch por Adam Turner.

   - gh-129712(3): As tags de wheels suportadas por cada opção do macOS
     Universal SDK agora estão documentadas.

   - gh-46236(4): API C: Documenta *note PyUnicode_RSplit(): 1654, *note
     PyUnicode_Partition(): 1655. e *note PyUnicode_RPartition(): 1656.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131417

   (2) https://github.com/python/cpython/issues/125722

   (3) https://github.com/python/cpython/issues/129712

   (4) https://github.com/python/cpython/issues/46236


File: python.info,  Node: Núcleo e embutidos<10>,  Next: Biblioteca<13>,  Prev: Documentação<6>,  Up: Python 3 13 3 final

1.23.10.9 Núcleo e embutidos
............................

   - gh-132011(1): Corrige falha ao chamar ‘list.append()’ como um
     método não vinculado.

   - gh-131998(2): Corrige uma falha ao usar um objeto de método não
     vinculado *note descritor: 1658. em uma função onde um descritor de
     método vinculado foi usado.

   - gh-131988(3): Corrige uma regressão de desempenho que causava
     gargalos de dimensionamento na construção de threads livres nas
     versões 3.13.1 e 3.13.2.

   - gh-131719(4): Corrige a falta de verificação de NULL em
     ‘_PyMem_FreeDelayed’ na construção com *note threads livres: 15e4.

   - gh-131670(5): Corrige falha em *note anext(): 7d7. na sincronização
     *note __anext__(): 1659. levantando uma exceção.

   - gh-131141(6): Corrige disputa de dados na instrumentação *note
     sys.monitoring: da. ao registrar retorno de chamada.

   - gh-130932(7): Corrige tratamento de exceção incorreto em
     ‘_PyModule_IsPossiblyShadowing’

   - gh-130851(8): Corrige uma falha na construção com *note threads
     livres: 15e4. ao construir um objeto *note code: 1a. com *note
     co_consts: 165a. que contém instâncias de tipos que não são gerados
     pelo compilador de bytecode.

   - gh-130794(9): Corrige vazamento de memória na construção com *note
     threads livres: 15e4. ao redimensionar uma lista ou dicionário
     compartilhado de vários threads de curta duração.

   - gh-130775(10): Não falha em ‘column’ negativo e ‘end_column’ em
     locais *note ast: 8.

   - gh-130382(11): Corrige ‘PyRefTracer_DESTROY’ não sendo enviado de
     ‘Py_DECREF()’ de ‘Python/ceval.c’

   - gh-130618(12): Corrige um bug que estava causando o levantamento de
     ‘UnicodeDecodeError’ ou ‘SystemError’ ao usar f-strings com
     expressões ‘lambda’ com caracteres não-ASCII. Patch por Pablo
     Galindo

   - gh-130163(13): Corrige possíveis travamentos relacionados à
     alteração simultânea e ao uso dos atributos do módulo *note sys:
     d9.

   - gh-88887(14): Corrigindo vazamento do processo de
     multiprocessamento Resource Tracker, geralmente observado ao
     executar Python como PID 1.

   - gh-130115(15): Corrige um problema com identificadores de thread
     sendo estendidos por sinal em algumas plataformas.

   - gh-128396(16): Corrige uma falha que ocorre ao chamar *note
     locals(): 141. dentro de uma compreensão em linha que usa a mesma
     variável local que o escopo do quadro externo, onde a variável é
     uma variável livre ou de célula.

   - gh-116042(17): Corrige local para SyntaxErrors de escapes inválidos
     no tokenizador.  Patch por Pablo Galindo

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/132011

   (2) https://github.com/python/cpython/issues/131998

   (3) https://github.com/python/cpython/issues/131988

   (4) https://github.com/python/cpython/issues/131719

   (5) https://github.com/python/cpython/issues/131670

   (6) https://github.com/python/cpython/issues/131141

   (7) https://github.com/python/cpython/issues/130932

   (8) https://github.com/python/cpython/issues/130851

   (9) https://github.com/python/cpython/issues/130794

   (10) https://github.com/python/cpython/issues/130775

   (11) https://github.com/python/cpython/issues/130382

   (12) https://github.com/python/cpython/issues/130618

   (13) https://github.com/python/cpython/issues/130163

   (14) https://github.com/python/cpython/issues/88887

   (15) https://github.com/python/cpython/issues/130115

   (16) https://github.com/python/cpython/issues/128396

   (17) https://github.com/python/cpython/issues/116042


File: python.info,  Node: Biblioteca<13>,  Next: Núcleo e embutidos<11>,  Prev: Núcleo e embutidos<10>,  Up: Python 3 13 3 final

1.23.10.10 Biblioteca
.....................

   - gh-129983(1): Corrige corrida de dados em compile_template em
     ‘sre.c’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129983


File: python.info,  Node: Núcleo e embutidos<11>,  Next: API C<6>,  Prev: Biblioteca<13>,  Up: Python 3 13 3 final

1.23.10.11 Núcleo e embutidos
.............................

   - gh-129967(1): Corrige uma condição de corrida na construção com
     *note threads livres: 15e4. quando ‘repr(set)’ é chamado
     simultaneamente com ‘set.clear()’.

   - gh-129900(2): Corrige códigos de retorno dentro de *note
     SystemExit: d63. que não estão sendo retornados pelo REPL.

   - gh-129732(3): Corrigida uma corrida em ‘_Py_qsbr_reserve’ na
     construção com threads livres.

   - gh-129643(4): Corrige a segurança de thread de *note
     PyList_Insert(): 165d. em construções com threads livres.

   - gh-129668(5): Corrige condição de corrida ao levantar *note
     MemoryError: 15c5. na construção com threads livres.

   - gh-129643(6): Corrige a segurança de thread de *note
     PyList_SetItem(): 165e. em construções com threads livres.  Patch
     por Kumar Aditya.

   - gh-128714(7): Corrige as possíveis corridas nos métodos especiais
     get/set ‘__annotations__’, ‘__annotate__’ e ‘__type_params__’ para
     o objeto função e adiciona testes relacionados.

   - gh-128632(8): Não mais permite ‘__classdict__’ como nome de um
     parâmetro de tipo.  Usar esse nome anteriormente travava o
     interpretador em algumas circunstâncias.

   - gh-127953(9): O tempo para manipular um evento ‘LINE’ em
     sys.monitoring (e sys.settrace) agora é independente do número de
     linhas no objeto de código.

   - gh-125331(10): ‘from __future__ import barry_as_FLUFL’ agora
     funciona em mais contextos, incluindo quando é usado em arquivos,
     com o sinalizador ‘-c’ e no REPL quando há várias instruções na
     mesma linha.  Anteriormente, funcionava apenas em linhas
     subsequentes no REPL e quando os sinalizadores apropriados eram
     passados diretamente para *note compile(): 192.  Patch por Pablo
     Galindo.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129967

   (2) https://github.com/python/cpython/issues/129900

   (3) https://github.com/python/cpython/issues/129732

   (4) https://github.com/python/cpython/issues/129643

   (5) https://github.com/python/cpython/issues/129668

   (6) https://github.com/python/cpython/issues/129643

   (7) https://github.com/python/cpython/issues/128714

   (8) https://github.com/python/cpython/issues/128632

   (9) https://github.com/python/cpython/issues/127953

   (10) https://github.com/python/cpython/issues/125331


File: python.info,  Node: API C<6>,  Next: Construção<5>,  Prev: Núcleo e embutidos<11>,  Up: Python 3 13 3 final

1.23.10.12 API C
................

   - gh-131740(1): Atualiza PyUnstable_GC_VisitObjects para percorrer a
     geração permanente.

   - gh-129533(2): Atualiza *note PyGC_Enable(): 8a8, *note
     PyGC_Disable(): 8a9, *note PyGC_IsEnabled(): 8aa. para usar
     operação atômica para segurança de thread em construção com threads
     livres.  Patch por Donghee Na.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131740

   (2) https://github.com/python/cpython/issues/129533


File: python.info,  Node: Construção<5>,  Prev: API C<6>,  Up: Python 3 13 3 final

1.23.10.13 Construção
.....................

   - gh-131865(1): A construção do DTrace agora passa corretamente as
     variáveis ‘CC’ e ‘CFLAGS’ para o comando ‘dtrace’ ao utilizar o
     SystemTap no Linux.

   - gh-131675(2): Corrige construções da biblioteca mimalloc para alvos
     ARM de 32 bits.

   - gh-130673(3): Corrige possível erro ‘KeyError’ ao manipular seções
     de objetos durante o processo de construção JIT.

   - gh-130740(4): Certifica-se de que ‘Python.h’ esteja incluído antes
     de ‘stdbool.h’, a menos que ‘pyconfig.h’ esteja incluído antes ou
     em alguns contextos específicos da plataforma.

   - gh-129838(5): Não redefine ‘_Py_NO_SANITIZE_UNDEFINED’ ao compilar
     com uma versão recente do GCC e um sanitizador indefinido
     habilitado.

   - gh-129660(6): Remove ‘test_embed’ do treinamento de PGO, cuja
     contribuição em versões recentes é considerada ignorável.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/131865

   (2) https://github.com/python/cpython/issues/131675

   (3) https://github.com/python/cpython/issues/130673

   (4) https://github.com/python/cpython/issues/130740

   (5) https://github.com/python/cpython/issues/129838

   (6) https://github.com/python/cpython/issues/129660


File: python.info,  Node: Python 3 13 2 final,  Next: Python 3 13 1 final,  Prev: Python 3 13 3 final,  Up: Changelog

1.23.11 Python 3.13.2 final
---------------------------

'Data de lançamento: 2025-02-04'

* Menu:

* macOS: macOS<4>.
* Windows: Windows<7>.
* Ferramentas/Demos: Ferramentas/Demos<6>.
* Testes: Testes<8>.
* Segurança: Segurança<8>.
* Biblioteca: Biblioteca<14>.
* Documentação: Documentação<7>.
* Biblioteca: Biblioteca<15>.
* Núcleo e embutidos: Núcleo e embutidos<12>.
* API C: API C<7>.
* Construção: Construção<6>.


File: python.info,  Node: macOS<4>,  Next: Windows<7>,  Up: Python 3 13 2 final

1.23.11.1 macOS
...............

   - gh-127592(1): O uso das APIs unificadas do Apple System Log foi
     desabilitado quando a versão mínima do macOS era anterior à 10.12.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/127592


File: python.info,  Node: Windows<7>,  Next: Ferramentas/Demos<6>,  Prev: macOS<4>,  Up: Python 3 13 2 final

1.23.11.2 Windows
.................

   - gh-127353(1): Permite forçar a saída de cores no Windows usando
     variáveis de ambiente.  Patch por Andrey Efremov.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/127353


File: python.info,  Node: Ferramentas/Demos<6>,  Next: Testes<8>,  Prev: Windows<7>,  Up: Python 3 13 2 final

1.23.11.3 Ferramentas/Demos
...........................

   - gh-129248(1): O executor de testes do iOS agora remove o prefixo de
     log de cada linha de saída do conjunto de testes.

   - gh-128152(2): Corrige um bug em que o analisador de pré-processador
     C da Argument Clinic tentava analisar diretivas de pré-processador
     dentro de comentários C. Patch por Erlend Aasland.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129248

   (2) https://github.com/python/cpython/issues/128152


File: python.info,  Node: Testes<8>,  Next: Segurança<8>,  Prev: Ferramentas/Demos<6>,  Up: Python 3 13 2 final

1.23.11.4 Testes
................

   - gh-127906(1): Testa a API C limitada em test_cppext.  Patch por
     Victor Stinner.

   - gh-127637(2): Adiciona testes para a interface de linha de comando
     *note dis: 38.  Patch por Bénédikt Tran.

   - gh-126925(3): Os resultados dos testes do iOS agora são
     transmitidos durante a execução do teste, e o xcresulttool
     descontinuado não é mais usado.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/127906

   (2) https://github.com/python/cpython/issues/127637

   (3) https://github.com/python/cpython/issues/126925


File: python.info,  Node: Segurança<8>,  Next: Biblioteca<14>,  Prev: Testes<8>,  Up: Python 3 13 2 final

1.23.11.5 Segurança
...................

   - gh-105704(1): Ao usar *note urllib.parse.urlsplit(): d61. e *note
     urllib.parse.urlparse(): 30d, a análise de host não rejeitaria
     nomes de domínio contendo colchetes (‘[’ e ‘]’).  Os colchetes são
     válidos somente para hosts IPv6 e IPvFuture de acordo com RFC 3986
     Seção 3.2.2(2).

   - gh-127655(3): Corrigido o transporte de
     ‘asyncio.selector_events._SelectorSocketTransport’ não pausando
     escritas para o protocolo quando o buffer atinge a marca d’água
     alta ao usar *note asyncio.WriteTransport.writelines(): 15dc.

   - gh-126108(4): Corrige uma possível desreferência de ponteiro ‘NULL’
     em ‘PySys_AddWarnOptionUnicode()’.

   - gh-80222(5): Corrige bug na dobragem '(folding)' de strings entre
     aspas ao achatar uma mensagem de e-mail usando uma política de
     e-mail moderna.  Anteriormente, quando uma string entre aspas era
     dobrada para abranger mais de uma linha, as aspas circundantes e
     escapes internos eram omitidos.  Isso poderia, teoricamente, ser
     usado para fazer 'spoof' das linhas de cabeçalho usando uma string
     entre aspas cuidadosamente construída se o e-mail renderizado
     resultante fosse transmitido ou reanalisado.

   - gh-119511(6): Corrige uma potencial negação de serviço no módulo
     *note imaplib: 74.  Ao conectar-se a um servidor malicioso, isso
     poderia fazer com que uma quantidade arbitrária de memória fosse
     alocada.  Em muitos sistemas, isso é inofensivo, pois a memória
     virtual não utilizada é apenas um mapeamento, mas se isso atingir
     um limite de tamanho de endereço virtual, pode levar a um *note
     MemoryError: 15c5. ou outra falha de processo.  Em sistemas ou
     construções incomuns, onde toda a memória alocada é tocada e
     apoiada por RAM ou armazenamento real, isso pode ter consumido
     recursos ao fazer isso até travar de forma semelhante.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/105704

   (2) https://www.rfc-editor.org/rfc/rfc3986#section-3.2.2

   (3) https://github.com/python/cpython/issues/127655

   (4) https://github.com/python/cpython/issues/126108

   (5) https://github.com/python/cpython/issues/80222

   (6) https://github.com/python/cpython/issues/119511


File: python.info,  Node: Biblioteca<14>,  Next: Documentação<7>,  Prev: Segurança<8>,  Up: Python 3 13 2 final

1.23.11.6 Biblioteca
....................

   - gh-129502(1): Erros improváveis na preparação de argumentos para o
     retorno de chamada *note ctypes: 2a. agora são tratados da mesma
     forma que erros levantados no retorno de chamada ou na conversão do
     resultado do retorno de chamada — usando *note
     sys.unraisablehook(): 1f7. em vez de *note sys.excepthook(): 80e. e
     não definindo *note sys.last_exc: 4be. e outras variáveis.

   - gh-129403(2): Corrigida a mensagem de *note ValueError: 202. para
     *note asyncio.Barrier: 601. e *note threading.Barrier: 1223.

   - gh-129409(3): Corrige um estouro de inteiro no módulo *note csv:
     29. ao gravar um campo de dados maior que 2 GB.

   - gh-118761(4): Melhora o tempo de importação de *note subprocess:
     d6. importando ‘locale’ e ‘signal’ de forma preguiçosa.  Patch por
     Taneli Hukkinen.

   - gh-129346(5): Em *note sqlite3: cf, manipula a falta de memória ao
     criar funções SQL definidas pelo usuário.

   - gh-129061(6): Corrige FORCE_COLOR e NO_COLOR quando strings vazias.
     Patch por Hugo van Kemenade.

   - gh-128550(7): Foi removida uma otimização incorreta relacionada a
     tarefas ansiosas em *note asyncio.TaskGroup: 1b5. que resultava em
     cancelamentos perdidos.

   - gh-128991(8): Libera a referência do quadro de entrada dentro do
     retorno de chamada *note bdb: f.

   - gh-128978(9): Corrige uma exceção *note NameError: 43f. em
     ‘sysconfig.expand_makefile_vars()’.  Patch por Bénédikt Tran.

   - gh-128961(10): Corrige uma falha ao definir o estado em um iterador
     *note array.array: 1a0. esgotado.

   - gh-128894(11): Corrige
     ‘traceback.TracebackException._format_syntax_error’ para não falhar
     em exceções com metadados personalizados.

   - gh-128916(12): Não tenta definir ‘SO_REUSEPORT’ em soquetes de
     famílias de endereços diferentes de ‘AF_INET’ e ‘AF_INET6’, pois
     isso não faz sentido com essas famílias de endereços, e a chamada
     falhará com o kernel Linux 6.12.9 e mais recentes.

   - gh-128679(13): Corrige condição de corrida de *note
     tracemalloc.stop(): 1668.  Corrige *note tracemalloc: ff. para
     oferece suporte à chamada de *note tracemalloc.stop(): 1668. em uma
     thread, enquanto outra thread está rastreando alocações de memória.
     Patch por Victor Stinner.

   - gh-128636(14): Corrige falha do PyREPL quando *note os.environ:
     11f9. é substituído por um valor inválido.

   - gh-128562(15): Corrige possíveis conflitos nos nomes dos widgets
     *note tkinter: f0. gerados se o nome da classe do widget terminar
     com um dígito.

   - gh-128498(16): Padrão para stdout isatty para detecção de cor em
     vez de stderr.  Patch por Hugo van Kemenade.

   - gh-128552(17): Corrige lixo cíclico introduzido por *note
     asyncio.loop.create_task(): 1c0. e *note
     asyncio.TaskGroup.create_task(): 1bc. mantendo uma referência à
     tarefa criada se ela estiver ansiosa.

   - gh-128479(18): Corrige ‘asyncio.staggered.staggered_race()’ vazando
     tarefas e emitindo uma exceção não tratada.

   - gh-128400(19): Corrige falha ao usar *note
     faulthandler.dump_traceback(): e2a. enquanto outras threads
     estiverem ativas na construção com *note threads livres: 15e4.

   - gh-88834(20): Unifica a verificação de instância para *note
     typing.Union: 63b. e *note types.UnionType: 63a.: ‘Union’ agora usa
     as verificações de instância em relação aos seus parâmetros em vez
     das verificações de subclasse.

   - gh-128302(21): Corrige
     ‘xml.dom.xmlbuilder.DOMEntityResolver.resolveEntity()’, que foi
     quebrado pela transição do Python 3.0.

   - gh-128302(22): Permite que ‘xml.dom.xmlbuilder.DOMParser.parse()’
     manipule corretamente instâncias
     ‘xml.dom.xmlbuilder.DOMInputSource’ que tenham apenas um atributo
     ‘systemId’ definido.

   - gh-112064(23): Corrige tratamento incorreto de tamanhos de leitura
     negativos em *note HTTPResponse.read: 1669.  Patch por Yury
     Manushkin.

   - gh-58956(24): Corrigido um vazamento de referência de quadro em
     *note bdb: f.

   - gh-128131(25): Suporte completo ao acesso aleatório de arquivos zip
     somente leitura, não criptografados e descompactados obtidos por
     *note ZipFile.open: 41b.

   - gh-112328(26): *note enum.EnumDict: 1e4. agora pode ser usada sem
     recorrer à API privada.

   - gh-127975(27): Evita reutilizar tipos de aspas em *note
     ast.unparse(): 8eb. se não for necessário.

   - gh-128062(28): Reverte a fonte da barra de menu do *note
     turtledemo: 102. para seu valor padrão e exibe as teclas de atalho
     na posição correta.

   - gh-128014(29): Corrige a redefinição do ícone da janela padrão
     passando ‘default=''’ para o método ‘wm_iconbitmap()’ do *note
     tkinter: f0.

   - gh-115514(30): Corrige exceções e escritas incompletas após
     ‘asyncio._SelectorTransport’ ser fechado antes das gravações serem
     concluídas.

   - gh-41872(31): Corrige extração rápida de docstrings de módulo de um
     arquivo em *note pydoc: b5.  Agora ele oferece suporte a docstrings
     com aspas simples, sequências de escape, literais de strings brutas
     e outras sintaxes Python.

   - gh-127060(32): Define a variável de ambiente TERM como “dumb” para
     desabilitar cores de traceback no IDLE, já que o IDLE não entende
     sequências de escape ANSI. Patch por Victor Stinner.

   - gh-126742(33): Corrige o suporte de mensagens de erro localizadas
     relatadas por ‘dlerror(3)(34)’ e ‘gdbm_strerror(35)’ nas funções
     *note ctypes: 2a. e *note dbm.gnu: 33. respectivamente.  Patch por
     Bénédikt Tran.

   - gh-127873(36): Quando ‘-E’ estiver definido, ignora apenas
     ‘PYTHON_COLORS’ e não ‘FORCE_COLOR’/‘NO_COLOR’/‘TERM’ ao colorir a
     saída.  Patch por Hugo van Kemenade.

   - gh-127870(37): Detecta chamadas recursivas no tratamento de ctypes
     ‘_as_parameter_’.  Patch por Victor Stinner.

   - gh-127847(38): Corrige a posição ao fazer buscas e leituras
     intercaladas em arquivos zip não compactados e não criptografados
     retornados por *note zipfile.ZipFile.open(): 41b.

   - gh-127732(39): O módulo *note platform: aa. agora detecta
     corretamente o Windows Server 2025.

   - gh-126821(40): As aplicações de macOS e iOS agora podem escolher
     redirecionar stdout e stderr para o log do sistema durante a
     configuração do interpretador.

   - gh-93312(41): Inclui ‘<sys/pidfd.h>’ para obter a constante
     ‘os.PIDFD_NONBLOCK’.  Patch por Victor Stinner.

   - gh-83662(42): Adiciona o método ‘__class_getitem__’ ausente à
     implementação Python de *note functools.partial(): 414, para
     torná-lo compatível com a versão C. Isso é relevante principalmente
     para implementações Python alternativas como PyPy e GraalPy, porque
     o CPython geralmente usará a implementação C dessa função.

   - gh-127586(43): *note multiprocessing.pool.Pool: f9f. agora restaura
     corretamente os manipuladores de sinais bloqueados da thread mãe ao
     criar processos via 'spawn' ou 'forkserver'.

   - gh-98188(44): Corrige um problema em *note
     email.message.Message.get_payload(): 120d. onde os dados não podem
     ser decodificados se o mecanismo de Codificação de Transferência de
     Conteúdo contiver espaços em branco à direita ou texto lixo
     adicional.  Patch por Hui Liu.

   - gh-127257(45): Em *note ssl: d0, falhas de chamada de sistema que o
     OpenSSL relata usando ‘ERR_LIB_SYS’ agora são levantadas como *note
     OSError: 417.

   - gh-127096(46): Não recria a seção sem nome em cada leitura em *note
     configparser.ConfigParser: 1c8.  Patch por Andrey Efremov.

   - gh-127196(47): Corrige falha quando um dicionário com chaves em
     codificação inválida era passado para diversas funções no módulo
     ‘_interpreters’.

   - gh-126775(48): Torna *note linecache.checkcache(): 166a. seguro
     para thread e seguro para reentrada do GC.

   - gh-126332(49): Corrige falha do _pyrepl ao dar dois CTRL-Z em uma
     linha que transborda.

   - gh-126225(50): *note getopt: 61. e *note optparse: a0. não estão
     mais marcados como descontinuados.  Há razões legítimas para usar
     um desses módulos em preferência a *note argparse: 6, e nenhum
     desses módulos corre o risco de ser removido da biblioteca padrão.
     Dos três, ‘argparse’ continua sendo a escolha padrão recomendada,
     'a menos que' uma das preocupações observadas no topo da
     documentação do módulo ‘optparse’ se aplique.

   - gh-125553(51): Corrige invariância de ida e volta para continuações
     de contrabarra em *note tokenize.untokenize(): 166b.

   - gh-123987(52): Corrigido problema no NamespaceReader em que um item
     não-caminho em um caminho de espaço de nomes, como um sinalizador
     adicionado por um instalador editável, interrompia o carregamento
     de recursos.

   - gh-123401(53): O módulo *note http.cookies: 71. agora suporta
     análise de formatos de data obsoletos de RFC 850(54), de acordo com
     os requisitos do RFC 9110(55).  Patch por Nano Zheng.

   - gh-122431(56): *note readline.append_history_file(): e7f. agora
     levanta *note ValueError: 202. quando recebe um valor negativo.

   - gh-119257(57): Exibe o menu de autopreenchimento com tecla tab
     abaixo da linha atual, o que resulta em um comportamento menos
     instável e corrige um bug de movimento do cursor.  Patch por Daniel
     Hollas

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129502

   (2) https://github.com/python/cpython/issues/129403

   (3) https://github.com/python/cpython/issues/129409

   (4) https://github.com/python/cpython/issues/118761

   (5) https://github.com/python/cpython/issues/129346

   (6) https://github.com/python/cpython/issues/129061

   (7) https://github.com/python/cpython/issues/128550

   (8) https://github.com/python/cpython/issues/128991

   (9) https://github.com/python/cpython/issues/128978

   (10) https://github.com/python/cpython/issues/128961

   (11) https://github.com/python/cpython/issues/128894

   (12) https://github.com/python/cpython/issues/128916

   (13) https://github.com/python/cpython/issues/128679

   (14) https://github.com/python/cpython/issues/128636

   (15) https://github.com/python/cpython/issues/128562

   (16) https://github.com/python/cpython/issues/128498

   (17) https://github.com/python/cpython/issues/128552

   (18) https://github.com/python/cpython/issues/128479

   (19) https://github.com/python/cpython/issues/128400

   (20) https://github.com/python/cpython/issues/88834

   (21) https://github.com/python/cpython/issues/128302

   (22) https://github.com/python/cpython/issues/128302

   (23) https://github.com/python/cpython/issues/112064

   (24) https://github.com/python/cpython/issues/58956

   (25) https://github.com/python/cpython/issues/128131

   (26) https://github.com/python/cpython/issues/112328

   (27) https://github.com/python/cpython/issues/127975

   (28) https://github.com/python/cpython/issues/128062

   (29) https://github.com/python/cpython/issues/128014

   (30) https://github.com/python/cpython/issues/115514

   (31) https://github.com/python/cpython/issues/41872

   (32) https://github.com/python/cpython/issues/127060

   (33) https://github.com/python/cpython/issues/126742

   (34) https://manpages.debian.org/dlerror(3)

   (35) https://manpages.debian.org/gdbm(3)

   (36) https://github.com/python/cpython/issues/127873

   (37) https://github.com/python/cpython/issues/127870

   (38) https://github.com/python/cpython/issues/127847

   (39) https://github.com/python/cpython/issues/127732

   (40) https://github.com/python/cpython/issues/126821

   (41) https://github.com/python/cpython/issues/93312

   (42) https://github.com/python/cpython/issues/83662

   (43) https://github.com/python/cpython/issues/127586

   (44) https://github.com/python/cpython/issues/98188

   (45) https://github.com/python/cpython/issues/127257

   (46) https://github.com/python/cpython/issues/127096

   (47) https://github.com/python/cpython/issues/127196

   (48) https://github.com/python/cpython/issues/126775

   (49) https://github.com/python/cpython/issues/126332

   (50) https://github.com/python/cpython/issues/126225

   (51) https://github.com/python/cpython/issues/125553

   (52) https://github.com/python/cpython/issues/123987

   (53) https://github.com/python/cpython/issues/123401

   (54) https://datatracker.ietf.org/doc/html/rfc850.html

   (55) https://datatracker.ietf.org/doc/html/rfc9110.html

   (56) https://github.com/python/cpython/issues/122431

   (57) https://github.com/python/cpython/issues/119257


File: python.info,  Node: Documentação<7>,  Next: Biblioteca<15>,  Prev: Biblioteca<14>,  Up: Python 3 13 2 final

1.23.11.7 Documentação
......................

   - gh-125722(1): Requer Sphinx 8.1.3 ou posterior para construir a
     documentação do Python.  Patch por Adam Turner.

   - gh-67206(2): Documenta que *note string.printable: 166d. não é
     imprimível no sentido POSIX. Em particular, *note
     string.printable.isprintable(): e02. retorna *note False: b49.
     Patch por Bénédikt Tran.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/125722

   (2) https://github.com/python/cpython/issues/67206


File: python.info,  Node: Biblioteca<15>,  Next: Núcleo e embutidos<12>,  Prev: Documentação<7>,  Up: Python 3 13 2 final

1.23.11.8 Biblioteca
....................

   - gh-129345(1): Corrige desreferência de ponteiro nulo em *note
     syslog.openlog(): 53e. quando um gancho de auditoria levanta uma
     exceção.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129345


File: python.info,  Node: Núcleo e embutidos<12>,  Next: API C<7>,  Prev: Biblioteca<15>,  Up: Python 3 13 2 final

1.23.11.9 Núcleo e embutidos
............................

   - gh-129093(1): Corrige f-strings como ‘f'{expr=}'’ que às vezes não
     exibem a expressão completa quando a expressão contém ‘!=’.

   - gh-124363(2): Trata expressões de depuração em f-string como
     strings brutas.  Patch por Pablo Galindo

   - gh-128799(3): Adiciona o quadro ‘except*’ ao traceback quando ele
     encapsula uma exceção simples.

   - gh-128078(4): Corrige um *note SystemError: 575. ao usar *note
     anext(): 7d7. com um valor de tupla padrão.  Patch por Bénédikt
     Tran.

   - gh-128717(5): Corrige uma falha ao definir o limite de recursão
     enquanto outros threads estão ativos na construção com *note
     threads livres: 15e4.

   - gh-128330(6): Restaura caracteres de controle do terminal na saída
     do REPL.

   - gh-128079(7): Corrige um bug em que *note except*: 5b8. não
     verifica corretamente o valor de retorno de uma função *note
     split(): 1670. de *note ExceptionGroup: 1b6, levando a uma falha em
     alguns casos.  Agora, quando *note split(): 1670. retorna um objeto
     inválido, *note except*: 5b8. levanta *note TypeError: 2c3. com o
     objeto *note ExceptionGroup: 1b6. levantado originalmente encadeado
     a ele.

   - gh-128030(8): Evita erro ao chamar ‘PyModule_GetFilenameObject’ em
     um objeto que não é módulo ao importar um símbolo inexistente de um
     objeto que não é módulo.

   - gh-127903(9): ‘Objects/unicodeobject.c’: corrige uma falha em
     compilações de depuração em ‘_copy_characters’ quando não há nada
     para copiar.

   - gh-127599(10): Corrige estatísticas para incrementos de contagens
     de referências de objetos (em particular, quando uma contagem de
     referências foi aumentada em mais de 1 em uma única operação).

   - gh-127651(11): Ao levantar *note ImportError: 419. para símbolos
     ausentes em importações ‘from’, use ‘__file__’ na mensagem de erro
     se ‘__spec__.origin’ não for um local

   - gh-127582(12): Corrige ressurreição de objeto não seguro para
     thread ao chamar finalizadores e retornos de chamada do observador
     na construção com threads livres.

   - gh-127434(13): Os shims do compilador iOS agora podem aceitar
     argumentos com espaços.

   - gh-127536(14): Adiciona travas faltando em torno de algumas
     operações de atribuição de lista na construção com threads livres.

   - gh-126862(15): Corrige um possível estouro quando uma classe herda
     de um número absurdo de superclasses.  Reportado por Valery
     Fedorenko.  Patch por Bénédikt Tran.

   - gh-127349(16): Corrigido o erro ao redimensionar o terminal no
     Python REPL. Patch por Semyon Moroz.

   - gh-126076(17): Objetos realocados, como objetos ‘tuple’, ‘bytes’ e
     ‘str’ são rastreados corretamente por *note tracemalloc: ff. e seus
     ganchos associados.  Patch por Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129093

   (2) https://github.com/python/cpython/issues/124363

   (3) https://github.com/python/cpython/issues/128799

   (4) https://github.com/python/cpython/issues/128078

   (5) https://github.com/python/cpython/issues/128717

   (6) https://github.com/python/cpython/issues/128330

   (7) https://github.com/python/cpython/issues/128079

   (8) https://github.com/python/cpython/issues/128030

   (9) https://github.com/python/cpython/issues/127903

   (10) https://github.com/python/cpython/issues/127599

   (11) https://github.com/python/cpython/issues/127651

   (12) https://github.com/python/cpython/issues/127582

   (13) https://github.com/python/cpython/issues/127434

   (14) https://github.com/python/cpython/issues/127536

   (15) https://github.com/python/cpython/issues/126862

   (16) https://github.com/python/cpython/issues/127349

   (17) https://github.com/python/cpython/issues/126076


File: python.info,  Node: API C<7>,  Next: Construção<6>,  Prev: Núcleo e embutidos<12>,  Up: Python 3 13 2 final

1.23.11.10 API C
................

   - gh-127791(1): Corrige perda de retornos de chamada após mais de uma
     chamada para *note PyUnstable_AtExit(): 1672.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/127791


File: python.info,  Node: Construção<6>,  Prev: API C<7>,  Up: Python 3 13 2 final

1.23.11.11 Construção
.....................

   - gh-129539(1): Não redefine ‘EX_OK’ quando o sistema tiver o
     cabeçalho ‘sysexits.h’.

   - gh-128472(2): Ignora a otimização BOLT de funções usando gotos
     computados, corrigindo erros na compilação com LLVM 19.

   - gh-123925(3): Corrige a construção do módulo *note curses: 2b. em
     plataformas com libncurses, mas sem libncursesw.

   - gh-128321(4): Define ‘LIBS’ em vez de ‘LDFLAGS’ ao verificar se as
     funções de biblioteca *note sqlite3: cf. estão disponíveis.  Isso
     corrige a ordenação de bibliotecas vinculadas durante as
     verificações, que era incorreta ao usar uma ‘libsqlite3’ vinculada
     estaticamente.

   - gh-127865(5): Corrige falha de construção em sistemas sem suporte a
     thread-locals.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/129539

   (2) https://github.com/python/cpython/issues/128472

   (3) https://github.com/python/cpython/issues/123925

   (4) https://github.com/python/cpython/issues/128321

   (5) https://github.com/python/cpython/issues/127865


File: python.info,  Node: Python 3 13 1 final,  Next: Python 3 13 0 final,  Prev: Python 3 13 2 final,  Up: Changelog

1.23.12 Python 3.13.1 final
---------------------------

'Data de lançamento: 2024-12-03'

* Menu:

* macOS: macOS<5>.
* Windows: Windows<8>.
* Ferramentas/Demos: Ferramentas/Demos<7>.
* Testes: Testes<9>.
* Segurança: Segurança<9>.
* Biblioteca: Biblioteca<16>.
* IDLE: IDLE<7>.
* Documentação: Documentação<8>.
* Núcleo e embutidos: Núcleo e embutidos<13>.
* Biblioteca: Biblioteca<17>.
* Núcleo e embutidos: Núcleo e embutidos<14>.
* Biblioteca: Biblioteca<18>.
* Núcleo e embutidos: Núcleo e embutidos<15>.
* API C: API C<8>.
* Construção: Construção<7>.


File: python.info,  Node: macOS<5>,  Next: Windows<8>,  Up: Python 3 13 1 final

1.23.12.1 macOS
...............

   - gh-124448(1): Atualiza o Tcl/Tk empacotado no instalador do macOS
     para 8.6.15.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124448


File: python.info,  Node: Windows<8>,  Next: Ferramentas/Demos<7>,  Prev: macOS<5>,  Up: Python 3 13 1 final

1.23.12.2 Windows
.................

   - gh-126911(1): Atualiza a saída do comando credits.

   - gh-118973(2): Garante que a instalação experimental de threads
     livres inclua o módulo ‘_tkinter’.  O componente Tcl/Tk opcional
     também deve ser instalado para que o módulo funcione.

   - gh-126497(3): Corrige a falha do venv devido à ausência de
     executáveis do redirecionador em instalações experimentais de
     threads livres.

   - gh-126074(4): Remoção de DLLs desnecessárias do pacote incorporável
     do Windows

   - gh-125315(5): Evita travamentos em *note platform: aa. devido a
     chamadas WMI lentas em algumas máquinas Windows.

   - gh-126084(6): Corrige o venvwlauncher para iniciar o pythonw em vez
     do python para que nenhuma janela de console extra seja criada.

   - gh-125842(7): Corrige uma *note SystemError: 575. quando *note
     sys.exit(): 138e. é chamado com ‘0xffffffff’ no Windows.

   - gh-125550(8): Habilita o *note Inicializador Python para Windows:
     5be. para detectar instalações do Python 3.14 da Windows Store.

   - gh-124448(9): Tcl/Tk empacotado atualizado para 8.6.15.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126911

   (2) https://github.com/python/cpython/issues/118973

   (3) https://github.com/python/cpython/issues/126497

   (4) https://github.com/python/cpython/issues/126074

   (5) https://github.com/python/cpython/issues/125315

   (6) https://github.com/python/cpython/issues/126084

   (7) https://github.com/python/cpython/issues/125842

   (8) https://github.com/python/cpython/issues/125550

   (9) https://github.com/python/cpython/issues/124448


File: python.info,  Node: Ferramentas/Demos<7>,  Next: Testes<9>,  Prev: Windows<8>,  Up: Python 3 13 1 final

1.23.12.3 Ferramentas/Demos
...........................

   - gh-126807(1): Corrige avisos de extração em ‘pygettext.py’ causados
     por definições de função equivocadas para chamadas de função.

   - gh-126167(2): O conjunto de textos do iOS foi modificado para que
     possa ser usado por projetos de terceiros para fins de teste.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126807

   (2) https://github.com/python/cpython/issues/126167


File: python.info,  Node: Testes<9>,  Next: Segurança<9>,  Prev: Ferramentas/Demos<7>,  Up: Python 3 13 1 final

1.23.12.4 Testes
................

   - gh-126909(1): Corrige testes de atributo estendido test_os para
     funcionar em sistemas de arquivos com limite de tamanho xattr de 1
     KiB.

   - gh-125041(2): Reativa testes ignorados para *note zlib: 133. na
     arquitetura s390x: ignora apenas verificações dos bytes
     compactados, que podem ser diferentes entre a implementação de
     software do zlib e a implementação acelerada por hardware.

   - gh-124295(3): Adiciona testes de tradução ao módulo *note argparse:
     6.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126909

   (2) https://github.com/python/cpython/issues/125041

   (3) https://github.com/python/cpython/issues/124295


File: python.info,  Node: Segurança<9>,  Next: Biblioteca<16>,  Prev: Testes<9>,  Up: Python 3 13 1 final

1.23.12.5 Segurança
...................

   - gh-126623(1): Atualiza libexpat para 2.6.4

   - gh-125140(2): Remove o diretório atual de ‘sys.path’ ao usar
     PyREPL.

   - gh-122792(3): Alterado ‘ipaddress.IPv6Address’ mapeado para IPv4
     para usar consistentemente o valor do endereço IPv4 mapeado para
     decidir propriedades.  Propriedades que têm seu comportamento
     corrigido são ‘is_multicast’, ‘is_reserved’, ‘is_link_local’,
     ‘is_global’ e ‘is_unspecified’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126623

   (2) https://github.com/python/cpython/issues/125140

   (3) https://github.com/python/cpython/issues/122792


File: python.info,  Node: Biblioteca<16>,  Next: IDLE<7>,  Prev: Segurança<9>,  Up: Python 3 13 1 final

1.23.12.6 Biblioteca
....................

   - gh-127321(1): *note pdb.set_trace(): 235. não parará em um opcode
     que não tenha mais um número de linha associado.

   - gh-127303(2): Expõe publicamente *note EXACT_TOKEN_TYPES: 167b. em
     ‘token.__all__’.

   - gh-123967(3): Corrige o manipulador de falhas para quadros de
     trampolim.  Se o quadro mais alto for um quadro de trampolim,
     pule-o.  Patch por Victor Stinner.

   - gh-127182(4): Corrige o travamento de ‘io.StringIO.__setstate__()’,
     quando *note None: 675. foi passado como o primeiro valor.

   - gh-127217(5): Corrige *note urllib.request.pathname2url(): 167c.
     para caminhos começando com várias barras no Posix.

   - gh-127035(6): Corrige *note shutil.which: 4b4. no Windows.  Agora
     ele analisa a correspondência direta se e somente se o comando
     termina com uma extensão PATHEXT ou X_OK não está no modo.  Suporta
     arquivos sem extensão se “.” estiver em PATHEXT. Suporta extensões
     PATHEXT que terminam com um ponto.

   - gh-122273(7): Suporte ao histórico de PyREPL no Windows.  Patch por
     devdanzin e Victor Stinner.

   - gh-127078(8): Corrige o problema em que *note
     urllib.request.url2pathname(): 167d. falhava ao descartar uma barra
     extra antes de uma unidade UNC no caminho da URL no Windows.

   - gh-126766(9): Corrige o problema em que *note
     urllib.request.url2pathname(): 167d. falhava ao descartar qualquer
     autoridade ‘localhost’ presente na URL.

   - gh-127065(10): Corrige o travamento ao chamar uma instância *note
     operator.methodcaller(): e61. de vários threads na construção com
     threads livres.

   - gh-126997(11): Corrige o suporte de opcodes STRING e GLOBAL com
     argumentos não ASCII em *note pickletools: a7.  *note
     pickletools.dis(): ce3. agora emite bytes não ASCII em argumentos
     STRING, BINSTRING e SHORT_BINSTRING como escape (‘\\xXX’).

   - gh-126316(12): *note grp: 66.: Torna *note grp.getgrall(): 167e.
     seguro para thread adicionando um mutex.  Patch por Victor Stinner.

   - gh-126618(13): Corrige a representação de objetos *note
     itertools.count: 12c5. quando o valor da contagem é *note
     sys.maxsize: 1205.

   - gh-85168(14): Corrige problema em que *note
     urllib.request.url2pathname(): 167d. e *note pathname2url(): 167c.
     sempre usavam UTF-8 ao citar e descitar URIs de arquivo.  Agora
     eles usam *note tratador de erros e codificação do sistema de
     arquivos: 53b.

   - gh-67877(15): Corrige vazamentos de memória quando a
     correspondência de *note expressão regular: b9. termina
     abruptamente, seja por causa de um sinal ou porque a alocação de
     memória falha.

   - gh-126789(16): Corrigidos os valores de *note
     sysconfig.get_config_vars(): 1064, *note sysconfig.get_paths():
     1285. e seus irmãos quando a inicialização de *note site: c7.
     acontece após *note sysconfig: db. ter construído um cache para
     *note sysconfig.get_config_vars(): 1064.

   - gh-126188(17): Atualiza pip empacotado para 24.3.1

   - gh-126780(18): Corrige *note os.path.normpath(): 135e. para
     caminhos relativos à unidade no Windows.

   - gh-126766(19): Corrige problema em que *note
     urllib.request.url2pathname(): 167d. falhava ao descartar duas
     barras iniciais introduzindo uma seção de autoridade vazia.

   - gh-126727(20): ‘locale.nl_langinfo(locale.ERA)’ agora retorna
     vários segmentos de descrição de era separados por ponto e vírgula.
     Anteriormente, ele retornava apenas o primeiro segmento em
     plataformas com Glibc.

   - gh-126699(21): Permite que *note collections.abc.AsyncIterator:
     e08. seja uma base para Protocols.

   - gh-126654(22): Corrige falha quando um objeto não dicionário era
     passado para várias funções no módulo ‘_interpreters’.

   - gh-104745(23): Limita o início de um patcher (de *note
     unittest.mock.patch(): ec1. ou *note unittest.mock.patch.object():
     167f.) mais de uma vez sem pará-lo

   - gh-126595(24): Corrige falha ao instanciar *note itertools.count:
     12c5. com uma contagem inicial de *note sys.maxsize: 1205. em
     construções de depuração.  Patch por Bénédikt Tran.

   - gh-120423(25): Corrige problema em que *note
     urllib.request.pathname2url(): 167c. manipulava incorretamente
     caminhos do Windows com barras inseridas.

   - gh-126565(26): Melhora o desempenho de *note zipfile.Path.open():
     1680. para modos que não sejam de leitura.

   - gh-126505(27): Corrige bugs na compilação de *note expressões
     regulares: b9. sem distinção entre maiúsculas e minúsculas com
     classes de caracteres que contenham caracteres não BMP: o caractere
     maiúsculo não BMP foi ignorado e o sinalizador ASCII foi ignorado
     ao corresponder a um intervalo de caracteres cujo limite superior
     está além da região BMP.

   - gh-117378(28): Corrigido o processo de forkserver do método de
     início *note multiprocessing: 94. ‘"forkserver"’ para herdar
     corretamente o *note sys.path: 3b4. do pai durante a importação de
     módulos *note multiprocessing.set_forkserver_preload(): 1681. da
     mesma maneira que *note sys.path: 3b4. é configurado em workers
     antes de executar itens de trabalho.

     Este bug fez com que alguns módulos do forkserver pré-carregados
     falhassem silenciosamente no pré-carregamento.  Isso se manifestou
     como uma degradação de desempenho em processos filhos quando o
     ‘sys.path’ era necessário devido ao trabalho repetido adicional em
     cada worker.

     Também poderia ter um efeito colateral de ‘""’ permanecer em *note
     sys.path: 3b4. durante importações de pré-carregamento do
     forkserver em vez do caminho absoluto de *note os.getcwd(): 1682.
     no momento da importação de multiprocessamento usado no worker
     ‘sys.path’.

     As diferenças de ‘sys.path’ entre as fases no processo filho
     poderiam ter causado o pré-carregamento para importar coisas
     incorretas do local errado.  Não temos conhecimento de que isso
     realmente tenha acontecido na prática.

   - gh-125679(29): Os valores de *note multiprocessing.Lock: 1683. e
     *note multiprocessing.RLock: 1684. ‘repr’ não dizem mais “unknown”
     no macOS.

   - gh-126476(30): Levanta *note calendar.IllegalMonthError: 1685.
     (agora uma subclasse de *note IndexError: 157e.) para *note
     calendar.month(): 1686. quando o mês de entrada não está correto.

   - gh-126489(31): A implementação Python de *note pickle: a6. não
     chama mais *note pickle.Pickler.persistent_id(): 1687. para o
     resultado de ‘persistent_id()’.

   - gh-126313(32): Corrige um problema em *note curses.napms(): 1688.
     quando *note curses.initscr(): 1689. ainda não foi chamado.  Patch
     por Bénédikt Tran.

   - gh-126303(33): Corrige serializar com pickle e cópia de objetos
     *note os.sched_param: 168a.

   - gh-126138(34): Corrige uma falha de uso após liberação em objetos
     *note asyncio.Task: 1be. cuja corrotina subjacente produz um objeto
     que implementa um *note __getattribute__(): beb. maligno.  Patch
     por Nico Posada.

   - gh-126220(35): Corrige falha em ‘cProfile.Profile’ e
     ‘_lsprof.Profiler’ quando seus retornos de chamada eram chamados
     diretamente com 0 argumentos.

   - gh-126212(36): Corrige problema em que *note
     urllib.request.pathname2url(): 167c. e *note url2pathname(): 167d.
     removiam barras de caminhos de unidade DOS do Windows e URLs.

   - gh-126223(37): Levanta *note UnicodeEncodeError: 677. em vez de um
     *note SystemError: 575. ao chamar ‘_interpreters.create()’ com um
     caractere Unicode inválido.

   - gh-126205(38): Corrige o problema em que *note
     urllib.request.pathname2url(): 167c. gerava URLs começando com
     quatro barras (em vez de duas) quando recebia um caminho UNC do
     Windows.

   - gh-126105(39): Corrige uma falha em *note ast: 8. quando o atributo
     *note ast.AST._fields: 15e3. é excluído.

   - gh-126106(40): Corrige uma possível desreferência de ponteiro
     ‘NULL’ em *note ssl: d0.

   - gh-126080(41): Corrige uma falha de uso após liberação em objetos
     *note asyncio.Task: 1be. para os quais o loop de eventos subjacente
     implementa um *note __getattribute__(): beb. maligno.  Relatado por
     Nico-Posada.  Patch por Bénédikt Tran.

   - gh-126083(42): Corrige um vazamento de referência em objetos *note
     asyncio.Task: 1be. ao reinicializar o mesmo objeto com um contexto
     não ‘None’.  Patch por Nico Posada.

   - gh-125984(43): Corrige falhas de uso após liberação em objetos
     *note asyncio.Future: be6. para os quais o laço de eventos
     subjacente implementa um *note __getattribute__(): beb. maligno.
     Relatado por Nico-Posada.  Patch por Bénédikt Tran.

   - gh-125969(44): Corrige uma falha fora dos limites quando um *note
     asyncio.loop.call_soon(): b17. maligno altera o comprimento da
     lista de retornos de chamada internos.  Patch por Bénédikt Tran.

   - gh-125966(45): Corrige uma falha de uso após liberação em *note
     asyncio.Future.remove_done_callback(): 168b.  Patch por Bénédikt
     Tran.

   - gh-125789(46): Corrige possível falha ao alterar a lista de
     retornos de chamada retornados por ‘asyncio.Future._callbacks’.
     Agora ele sempre retorna uma nova cópia na implementação C
     ‘_asyncio’.  Patch por Kumar Aditya.

   - gh-124452(47): Corrige um problema em *note
     email.policy.EmailPolicy.header_source_parse(): 168c. e *note
     email.policy.Compat32.header_source_parse(): 168d. que introduziam
     espaços em branco iniciais espúrios em valores de cabeçalho quando
     o cabeçalho incluía um caractere de nova linha após o delimitador
     de nome do cabeçalho (‘:’) e antes do valor.

   - gh-125884(48): Corrige o bug para *note pdb: a5. onde ele não pode
     definir pontos de interrupção em funções com certas anotações.

   - gh-125355(49): Corrige vários bugs em *note
     argparse.ArgumentParser.parse_intermixed_args(): b13.

        * O analisador não muda mais temporariamente durante a análise.

        * Os valores padrão não são processados duas vezes.

        * Os grupos mutuamente exclusivos obrigatórios contendo
          argumentos posicionais agora são suportados.

        * O relatório de argumentos ausentes agora inclui os nomes de
          todos os argumentos posicionais e opcionais necessários.

        * Opções desconhecidas podem ser misturadas com argumentos
          posicionais em parse_known_intermixed_args().

   - gh-125666(50): Evita a saída do interpretador se um byte nulo for
     fornecido como entrada no novo REPL.

   - gh-125710(51): [Enum] corrige comparações hasheável<->não-hasheável
     para valores de membros

   - gh-125631(52): Restaura a capacidade de definir atributos *note
     persistent_id: 1687. e *note persistent_load: 168e. de instâncias
     das classes ‘Pickler’ e ‘Unpickler’ no módulo *note pickle: a6.

   - gh-125378(53): Corrige o bug em *note pdb: a5. onde após um comando
     multilinha, uma linha vazia repete a primeira linha do comando
     multilinha, em vez do comando completo.

   - gh-125682(54): Rejeita dígitos não ASCII na implementação Python de
     *note json.loads(): 95c. em conformidade com a especificação JSON.

   - gh-125660(55): Rejeita escapes unicode inválidos para implementação
     Python de *note json.loads(): 95c.

   - gh-125259(56): Corrige a lógica de remoção de notas para erros
     lançados na inicialização de enumeração.

   - gh-125590(57): Permite que ‘FrameLocalsProxy’ exclua e remova se a
     chave não for uma variável rápida.

   - gh-125519(58): Melhora o traceback se *note importlib.reload():
     519. for chamado com um objeto que não seja um módulo.  Patch por
     Alex Waygood.

   - gh-125451(59): Corrige um impasse quando *note
     concurrent.futures.ProcessPoolExecutor: 8f4. desliga
     simultaneamente com um erro ao alimentar um trabalho para um
     processo de trabalho.

   - gh-125422(60): Corrige o bug onde *note pdb: a5. e *note bdb: f.
     podem entrar no quadro do chamador inferior.

   - gh-100141(61): Corrige o bug onde *note pdb: a5. ficará preso em um
     laço infinito ao depurar um arquivo vazio.

   - gh-125115(62): Corrige um bug em *note pdb: a5. onde argumentos
     começando com ‘-’ não podem ser passados para o script depurado.

   - gh-53203(63): Corrige *note time.strptime(): 1474. para os formatos
     ‘%c’, ‘%x’ e ‘%X’ em muitos locais que usam dígitos não ASCII, como
     persa, birmanês, odia e shan.

   - gh-125398(64): Corrige a conversão do caminho ‘VIRTUAL_ENV’ no
     script activate em *note venv: 111. ao executar no Git Bash para
     Windows.

   - gh-125316(65): Corrige o uso de *note functools.partial(): 414.
     como membro *note enum.Enum: 630.  Um FutureWarning com sugestão
     para usar *note enum.member(): 627. agora é emitido quando a
     instância ‘partial’ é usada como um membro enum.

   - gh-125245(66): Corrige condição de corrida ao importar *note
     collections.abc: 1e, que poderia retornar incorretamente um módulo
     vazio.

   - gh-125243(67): Corrige corrida de dados ao criar objetos *note
     zoneinfo.ZoneInfo: 8e5. na construção com threads livres.

   - gh-125254(68): Corrige um bug em que ArgumentError inclui a opção
     ambígua incorreta em *note argparse: 6.

   - gh-125235(69): Mantém os caminhos TCL *note tkinter: f0. em venv
     apontando para a instalação base no Windows.

   - gh-61011(70): Corrige herança de grupos mutuamente exclusivos
     aninhados do analisador pai em *note argparse.ArgumentParser: 539.
     Anteriormente, todos os grupos mutuamente exclusivos aninhados
     perdiam sua conexão com o grupo que os continha e eram exibidos
     como pertencentes diretamente ao analisador.

   - gh-52551(71): Corrige problemas de codificação em *note
     time.strftime(): 1229, o método *note strftime(): caf. das classes
     *note datetime: 30. *note datetime: 1cc, *note date: 1cd. e *note
     time: 1ce. e a formatação dessas classes.  Caracteres não
     codificáveis no localidade atual agora são aceitáveis na string de
     formato.  Pares substitutos e sequência de bytes codificados por
     surrogatescape não são mais recombinados.  O caractere nulo
     incorporado não termina mais a string de formato.

   - gh-125118(72): Não copia valores arbitrários para _Bool no módulo
     *note struct: d5.

   - gh-125069(73): Corrige um problema em que fornecer um objeto *note
     pathlib.PurePath: 4a6. como um argumento inicializador para um
     segundo objeto *note PurePath: 4a6. com um *note parser: 22c.
     diferente resultava em argumentos para o inicializador do objeto
     anterior sendo unidos pelo analisador do objeto posterior.

   - gh-125096(74): Se a variável de ambiente *note PYTHON_BASIC_REPL:
     16e. estiver definida, o módulo *note site: c7. não importa mais o
     módulo ‘_pyrepl’.  Além disso, o módulo *note site: c7. agora
     respeita as opções de linha de comando *note -E: 964. e *note -I:
     965.: ignore *note PYTHON_BASIC_REPL: 16e. neste caso.  Patch por
     Victor Stinner.

   - gh-124969(75): Corrige ‘locale.nl_langinfo(locale.ALT_DIGITS)’ em
     plataformas com glibc.  Agora ele retorna uma string consistindo de
     até 100 símbolos separados por ponto e vírgula (uma string vazia na
     maioria dos locais) em todas as plataformas Posix.  Anteriormente,
     ele retornava apenas o primeiro símbolo ou uma string vazia.

   - gh-124960(76): Corrige suporte para o sinalizador future
     ‘barry_as_FLUFL’ no novo REPL.

   - gh-124984(77): Corrige segurança de thread em *note ssl: d0. na
     construção com threads livres.  As operações OpenSSL agora são
     protegidas por uma trava por objeto.

   - gh-124958(78): Corrige refcycles em exceções levantadas de *note
     asyncio.TaskGroup: 1b5. e a implementação python de *note
     asyncio.Future: be6.

   - gh-53203(79): Corrige *note time.strptime(): 1474. para os formatos
     ‘%c’ e ‘%x’ em muitos idiomas: árabe, bislama, bretão, bodo,
     cassubiano, chuvache, estoniano, francês, irlandês, ge’ez,
     gurajati, gaélico manx, hebraico, hindi, chhattisgarhi, crioulo
     haitiano, japonês, canarês, coreano, marata, malaio, norueguês,
     nynorsk, punjabi, rajasthani, tok pisin, iorubá, chinês yue, yau
     nungon e chinês.

   - gh-124917(80): Permite chamar *note os.path.exists(): a18. e *note
     os.path.lexists(): a19. com argumentos de palavra-chave no Windows.
     Corrige uma regressão em 3.13.0.

   - gh-124653(81): Corrige a detecção da API de fila mínima necessária
     pelo módulo *note logging: 87.  Patch por Bénédikt Tran.

   - gh-124858(82): Corrige ciclos de referência deixados em tracebacks
     em *note asyncio.open_connection(): b2b. quando usado com
     ‘happy_eyeballs_delay’

   - gh-124390(83): Corrigidas *note AssertionError: 6a9. ao usar
     ‘asyncio.staggered.staggered_race()’ com *note
     asyncio.eager_task_factory: 477.

   - gh-124651(84): Coloca corretamente entre aspas as strings template
     em scripts de ativação *note venv: 111.

   - gh-116850(85): Corrige *note argparse: 6. para espaços de nomes com
     dict não diretamente gravável (por exemplo, classes).

   - gh-58573(86): Corrige conflitos entre opções longas abreviadas no
     analisador pai e subanalisadores em *note argparse: 6.

   - gh-124594(87): Todos os prompts REPL *note asyncio: a. são
     executados no mesmo *note context: 15b7.  Contribuição de Bartosz
     Sławecki.

   - gh-61181(88): Corrige suporte de *note choices: 168f. com valor de
     string em *note argparse: 6.  Substrings da string especificada não
     são mais considerados valores válidos.

   - gh-80259(89): Corrige suporte de *note argparse: 6. de argumentos
     posicionais com ‘nargs='?'’, ‘default=argparse.SUPPRESS’ e ‘type’
     especificado.

   - gh-120378(90): Corrige uma falha relacionada a um estouro de
     inteiro em *note curses.resizeterm(): 1690. e *note
     curses.resize_term(): 1691.

   - gh-123884(91): Corrige bug no tratamento de itertools.tee() de
     outras entradas tee (um tee em um tee).  A saída agora tem os
     prometidos 'n' novos iteradores independentes.  Anteriormente, o
     primeiro iterador era idêntico (não independente) ao iterador de
     entrada.  Isso às vezes dava resultados surpreendentes.

   - gh-58956(92): Corrigido um bug em *note pdb: a5. onde às vezes o
     ponto de interrupção não disparava se ele fosse definido em uma
     função que já está na pilha de chamadas.

   - gh-124345(93): vim *note argparse: 6. suporta opções longas de
     traço simples abreviadas separadas por ‘=’ de seu valor.

   - gh-104860(94): Corrigido a falta de permissão de abreviação de
     opções longas de traço simples em *note argparse: 6. com
     ‘allow_abbrev=False’.

   - gh-63143(95): Corrigida a análise de argumentos mutuamente
     exclusivos em *note argparse: 6.  Argumentos com o valor idêntico
     ao valor padrão (por exemplo, booleanos, inteiros pequenos, strings
     vazias ou de 1 caractere) não são mais considerados “não
     presentes”.

   - gh-72795(96): Argumentos posicionais com *note nargs: 1692. igual a
     ‘'*'’ ou ‘argparse.REMAINDER’ não são mais necessários.  Isso
     permite usar argumento posicional com ‘nargs='*'’ e sem ‘default’
     em grupo mutuamente exclusivo e melhora a mensagem de erro sobre
     argumentos necessários.

   - gh-59317(97): Corrige análise de argumento posicional com *note
     nargs: 1692. igual a ‘'?'’ ou ‘'*'’ se for precedido por uma opção
     e outro argumento posicional.

   - gh-53780(98): *note argparse: 6. agora ignora o primeiro ‘"--"’
     (traço duplo) entre uma opção e um comando.

   - gh-124217(99): Adicionar bloco IPv6 reservado do RFC 9637
     ‘3fff::/20’ no módulo *note ipaddress: 80.

   - gh-81691(100): Corrige manipulação de múltiplos ‘"--"’ (traços
     duplos) em *note argparse: 6.  Apenas o primeiro foi removido,
     todos os subsequentes agora são tomados literalmente.

   - gh-123978(101): Remove *note time.thread_time(): 93d. e *note
     time.thread_time_ns(): ba9. quebrados no NetBSD.

   - gh-124008(102): Corrige possível travamento (na construção de
     depuração), saída incorreta ou retorno de valor incorreto do
     binário bruto ‘write()’ ao gravar no console no Windows.

   - gh-123935(103): Corrige detecção de slots pai para dataclasses que
     herdam de classes com ‘__dictoffset__’.

   - gh-122765(104): Corrige erros de aspas desbalanceadas que ocorrem
     quando activate.csh em *note venv: 111. era carregado com um prompt
     personalizado contendo aspas desemparelhadas ou novas linhas.

   - gh-123370(105): Corrige a tela que não limpa após executar o
     relógio turtledemo.

   - gh-116810(106): Resolve um vazamento de memória introduzido no
     *note ssl: d0. do CPython 3.10 quando a propriedade *note
     ssl.SSLSocket.session: 1693. era acessada.  Acelera o acesso de
     leitura e gravação à referida propriedade ao não clonar mais
     objetos de sessão desnecessariamente por meio de serialização.

   - gh-120754(107): Atualiza chamadas ‘read’ ilimitadas em *note
     zipfile: 131. para especificar um ‘size’ explícito, colocando um
     limite na quantidade de dados que eles podem ler.  Isso também
     atualiza o tratamento em torno do tamanho máximo de comentário do
     ZIP para corresponder ao padrão em vez de ler comentários que são
     um byte muito longos.

   - gh-70764(108): Corrigido um problema em que *note
     inspect.getclosurevars(): 1114. classificaria incorretamente um
     nome de atributo como uma variável global quando o nome existe
     tanto como um nome de atributo quanto como uma variável global.

   - gh-118289(109): ‘posixpath.realpath()’ agora levanta *note
     NotADirectoryError: 1093. quando o modo 'strict' está habilitado e
     um caminho sem diretório com uma barra final é fornecido.

   - gh-119826(110): Sempre retorna um caminho absoluto para *note
     os.path.abspath(): 135f. no Windows.

   - gh-117766(111): Sempre usa *note str(): 44c. para exibir ‘choices’
     em *note argparse: 6.

   - gh-101955(112): Corrige SystemError ao corresponder ao padrão de
     expressão regular contendo alguma combinação de quantificador
     possessivo, alternativo e grupo de captura.

   - gh-88110(113): Corrigido *note multiprocessing.Process: b6f.
     relatando um ‘.exitcode’ de 1 mesmo em caso de sucesso ao usar o
     método de início ‘"fork"’ ao usar um *note
     concurrent.futures.ThreadPoolExecutor: 742.

   - gh-71936(114): Corrigir uma condição de corrida em *note
     multiprocessing.pool.Pool: f9f.

   - bpo-46128(115): Remove quadros de pilha *note
     unittest.IsolatedAsyncioTestCase: 30c. de stacktraces relatados.

   - bpo-14074(116): Corrige o processamento de metavariável de *note
     argparse: 6. para permitir que argumentos posicionais tenham uma
     metavar de tupla.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/127321

   (2) https://github.com/python/cpython/issues/127303

   (3) https://github.com/python/cpython/issues/123967

   (4) https://github.com/python/cpython/issues/127182

   (5) https://github.com/python/cpython/issues/127217

   (6) https://github.com/python/cpython/issues/127035

   (7) https://github.com/python/cpython/issues/122273

   (8) https://github.com/python/cpython/issues/127078

   (9) https://github.com/python/cpython/issues/126766

   (10) https://github.com/python/cpython/issues/127065

   (11) https://github.com/python/cpython/issues/126997

   (12) https://github.com/python/cpython/issues/126316

   (13) https://github.com/python/cpython/issues/126618

   (14) https://github.com/python/cpython/issues/85168

   (15) https://github.com/python/cpython/issues/67877

   (16) https://github.com/python/cpython/issues/126789

   (17) https://github.com/python/cpython/issues/126188

   (18) https://github.com/python/cpython/issues/126780

   (19) https://github.com/python/cpython/issues/126766

   (20) https://github.com/python/cpython/issues/126727

   (21) https://github.com/python/cpython/issues/126699

   (22) https://github.com/python/cpython/issues/126654

   (23) https://github.com/python/cpython/issues/104745

   (24) https://github.com/python/cpython/issues/126595

   (25) https://github.com/python/cpython/issues/120423

   (26) https://github.com/python/cpython/issues/126565

   (27) https://github.com/python/cpython/issues/126505

   (28) https://github.com/python/cpython/issues/117378

   (29) https://github.com/python/cpython/issues/125679

   (30) https://github.com/python/cpython/issues/126476

   (31) https://github.com/python/cpython/issues/126489

   (32) https://github.com/python/cpython/issues/126313

   (33) https://github.com/python/cpython/issues/126303

   (34) https://github.com/python/cpython/issues/126138

   (35) https://github.com/python/cpython/issues/126220

   (36) https://github.com/python/cpython/issues/126212

   (37) https://github.com/python/cpython/issues/126223

   (38) https://github.com/python/cpython/issues/126205

   (39) https://github.com/python/cpython/issues/126105

   (40) https://github.com/python/cpython/issues/126106

   (41) https://github.com/python/cpython/issues/126080

   (42) https://github.com/python/cpython/issues/126083

   (43) https://github.com/python/cpython/issues/125984

   (44) https://github.com/python/cpython/issues/125969

   (45) https://github.com/python/cpython/issues/125966

   (46) https://github.com/python/cpython/issues/125789

   (47) https://github.com/python/cpython/issues/124452

   (48) https://github.com/python/cpython/issues/125884

   (49) https://github.com/python/cpython/issues/125355

   (50) https://github.com/python/cpython/issues/125666

   (51) https://github.com/python/cpython/issues/125710

   (52) https://github.com/python/cpython/issues/125631

   (53) https://github.com/python/cpython/issues/125378

   (54) https://github.com/python/cpython/issues/125682

   (55) https://github.com/python/cpython/issues/125660

   (56) https://github.com/python/cpython/issues/125259

   (57) https://github.com/python/cpython/issues/125590

   (58) https://github.com/python/cpython/issues/125519

   (59) https://github.com/python/cpython/issues/125451

   (60) https://github.com/python/cpython/issues/125422

   (61) https://github.com/python/cpython/issues/100141

   (62) https://github.com/python/cpython/issues/125115

   (63) https://github.com/python/cpython/issues/53203

   (64) https://github.com/python/cpython/issues/125398

   (65) https://github.com/python/cpython/issues/125316

   (66) https://github.com/python/cpython/issues/125245

   (67) https://github.com/python/cpython/issues/125243

   (68) https://github.com/python/cpython/issues/125254

   (69) https://github.com/python/cpython/issues/125235

   (70) https://github.com/python/cpython/issues/61011

   (71) https://github.com/python/cpython/issues/52551

   (72) https://github.com/python/cpython/issues/125118

   (73) https://github.com/python/cpython/issues/125069

   (74) https://github.com/python/cpython/issues/125096

   (75) https://github.com/python/cpython/issues/124969

   (76) https://github.com/python/cpython/issues/124960

   (77) https://github.com/python/cpython/issues/124984

   (78) https://github.com/python/cpython/issues/124958

   (79) https://github.com/python/cpython/issues/53203

   (80) https://github.com/python/cpython/issues/124917

   (81) https://github.com/python/cpython/issues/124653

   (82) https://github.com/python/cpython/issues/124858

   (83) https://github.com/python/cpython/issues/124390

   (84) https://github.com/python/cpython/issues/124651

   (85) https://github.com/python/cpython/issues/116850

   (86) https://github.com/python/cpython/issues/58573

   (87) https://github.com/python/cpython/issues/124594

   (88) https://github.com/python/cpython/issues/61181

   (89) https://github.com/python/cpython/issues/80259

   (90) https://github.com/python/cpython/issues/120378

   (91) https://github.com/python/cpython/issues/123884

   (92) https://github.com/python/cpython/issues/58956

   (93) https://github.com/python/cpython/issues/124345

   (94) https://github.com/python/cpython/issues/104860

   (95) https://github.com/python/cpython/issues/63143

   (96) https://github.com/python/cpython/issues/72795

   (97) https://github.com/python/cpython/issues/59317

   (98) https://github.com/python/cpython/issues/53780

   (99) https://github.com/python/cpython/issues/124217

   (100) https://github.com/python/cpython/issues/81691

   (101) https://github.com/python/cpython/issues/123978

   (102) https://github.com/python/cpython/issues/124008

   (103) https://github.com/python/cpython/issues/123935

   (104) https://github.com/python/cpython/issues/122765

   (105) https://github.com/python/cpython/issues/123370

   (106) https://github.com/python/cpython/issues/116810

   (107) https://github.com/python/cpython/issues/120754

   (108) https://github.com/python/cpython/issues/70764

   (109) https://github.com/python/cpython/issues/118289

   (110) https://github.com/python/cpython/issues/119826

   (111) https://github.com/python/cpython/issues/117766

   (112) https://github.com/python/cpython/issues/101955

   (113) https://github.com/python/cpython/issues/88110

   (114) https://github.com/python/cpython/issues/71936

   (115) https://bugs.python.org/issue?@action=redirect&bpo=46128

   (116) https://bugs.python.org/issue?@action=redirect&bpo=14074


File: python.info,  Node: IDLE<7>,  Next: Documentação<8>,  Prev: Biblioteca<16>,  Up: Python 3 13 1 final

1.23.12.7 IDLE
..............

   - gh-122392(1): Aumenta o espaçamento vertical atualmente inadequado
     para os navegadores IDLE (caminho, módulo e pilha) em monitores de
     alta resolução.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/122392


File: python.info,  Node: Documentação<8>,  Next: Núcleo e embutidos<13>,  Prev: IDLE<7>,  Up: Python 3 13 1 final

1.23.12.8 Documentação
......................

   - gh-126622(1): Adicionadas páginas de rascunho para módulos
     removidos explicando sua remoção, onde encontrar substituições e
     links para a última versão do Python que os suportava.
     Contribuição de Ned Batchelder.

   - gh-125277(2): Exige Sphinx 7.2.6 ou posterior para construir a
     documentação do Python.  Patch por Adam Turner.

   - gh-124872(3): Adicionadas as definições para *note contexto: 1696,
     *note contexto atual: 1697. e *note protocolo de gerenciamento de
     contexto: 1698, atualizadas definições relacionadas para serem
     consistentes e expandida a documentação para *note
     contextvars.Context: 15b7.

   - gh-125018(4): A documentação *note importlib.metadata: 7a. agora
     inclui alvos de referência cruzada semântica para as APIs
     documentadas significativas.  Isso significa que referências
     intersphinx como *note importlib.metadata.version(): 1699. agora
     funcionarão conforme o esperado.

   - gh-70870(5): Esclarecido o uso duplo do termo “variável livre”
     (tanto o significado formal de qualquer referência a nomes
     definidos fora do escopo local, quanto o significado pragmático
     mais restrito de variáveis não locais nomeadas em ‘co_freevars’).

   - gh-121277(6): Os escritores da documentação do CPython agora podem
     usar ‘next’ como a versão para as diretivas ‘versionchanged’,
     ‘versionadded’, ‘deprecated’.

   - gh-60712(7): Inclui o tipo *note object: a96. nas listas de tipos
     documentados.  Alteração por Furkan Onder e Martin Panter.

   - bpo-34008(8): A documentação *note Py_Main(): c3f. foi movida da
     seção “API de nível muito alto” para a seção “Inicialização e
     finalização”.

     Também explicita que esperamos que ‘Py_Main’ seja chamado
     tipicamente em vez de ‘Py_Initialize’ em vez de depois dele (já que
     ‘Py_Main’ faz sua própria chamada para ‘Py_Initialize’).  Documente
     que chamar ambos é suportado, mas depende da versão de quais
     configurações serão aplicadas corretamente.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126622

   (2) https://github.com/python/cpython/issues/125277

   (3) https://github.com/python/cpython/issues/124872

   (4) https://github.com/python/cpython/issues/125018

   (5) https://github.com/python/cpython/issues/70870

   (6) https://github.com/python/cpython/issues/121277

   (7) https://github.com/python/cpython/issues/60712

   (8) https://bugs.python.org/issue?@action=redirect&bpo=34008


File: python.info,  Node: Núcleo e embutidos<13>,  Next: Biblioteca<17>,  Prev: Documentação<8>,  Up: Python 3 13 1 final

1.23.12.9 Núcleo e embutidos
............................

   - gh-113841(1): Corrige possível comportamento indefinido de divisão
     por zero em *note complex: 2f8.’s *note _Py_c_pow(): 169b.

   - gh-127020(2): Corrige uma falha na construção com threads livres
     quando *note PyCode_GetCode(): 778, *note PyCode_GetVarnames():
     779, *note PyCode_GetCellvars(): 77a. ou *note
     PyCode_GetFreevars(): 77b. eram chamados de várias threads ao mesmo
     tempo.

   - gh-126980(3): Corrige *note __buffer__(): 45f. de *note bytearray:
     2ea. travando quando *note READ: 169c. ou *note WRITE: 169d. são
     passados como sinalizadores.

   - gh-126881(4): Corrige falha na finalização do estado dtoa.  Patch
     por Kumar Aditya.

   - gh-126341(5): Agora *note ValueError: 202. é levantada em vez de
     *note SystemError: 575. ao tentar iterar sobre um objeto *note
     memoryview: 2eb. liberado.

   - gh-126688(6): Corrige uma falha ao chamar *note os.fork(): 197. em
     alguns sistemas operacionais, incluindo SerenityOS.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/113841

   (2) https://github.com/python/cpython/issues/127020

   (3) https://github.com/python/cpython/issues/126980

   (4) https://github.com/python/cpython/issues/126881

   (5) https://github.com/python/cpython/issues/126341

   (6) https://github.com/python/cpython/issues/126688


File: python.info,  Node: Biblioteca<17>,  Next: Núcleo e embutidos<14>,  Prev: Núcleo e embutidos<13>,  Up: Python 3 13 1 final

1.23.12.10 Biblioteca
.....................

   - gh-126066(1): Corrige *note importlib: 77. para não gravar arquivos
     .pyc incompletos quando um ulimit ou algum outro mecanismo do
     sistema operacional estiver impedindo que a gravação seja feita
     completamente.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126066


File: python.info,  Node: Núcleo e embutidos<14>,  Next: Biblioteca<18>,  Prev: Biblioteca<17>,  Up: Python 3 13 1 final

1.23.12.11 Núcleo e embutidos
.............................

   - gh-126312(1): Corrige travamento durante a coleta de lixo em um
     objeto congelado por *note gc.freeze(): b4c. na construção com
     threads livres.

   - gh-126139(2): Fornece melhor localização de erro ao tentar usar uma
     *note instrução future: dd5. com um recurso futuro desconhecido.

   - gh-126018(3): Corrige travamento em *note sys.audit(): 16a0. ao
     passar uma não string como primeiro argumento e o Python foi
     compilado no modo de depuração.

   - gh-125942(4): No Android, a configuração ‘errors’ de *note
     sys.stdout: ae6. foi alterada de ‘surrogateescape’ para
     ‘backslashreplace’.

   - gh-125859(5): Corrige uma falha na construção com threads livres
     quando *note gc.get_objects(): 806. ou *note gc.get_referrers():
     807. é chamado durante uma coleta de lixo em andamento.

   - gh-125703(6): Honra corretamente os ganchos *note tracemalloc: ff.
     em caminhos ‘Py_DECREF’ especializados.  Patch por Pablo Galindo

   - gh-125593(7): Usa cores para destacar locais de erro no traceback
     do grupo de exceções

   - gh-125444(8): Corrige instruções ilegais para arquiteturas Arm mais
     antigas.  Patch por Diego Russo, testes de Ross Burton.

   - gh-124375(9): Corrige uma falha na construção com threads livres
     quando o GC é executado simultaneamente com uma nova thread
     iniciando.

   - gh-125221(10): Corrige possível condição de corrida ao chamar *note
     __reduce_ex__(): 16a1. pela primeira vez na construção com threads
     livres.

   - gh-125038(11): Corrige falha ao iterar sobre uma expressão geradora
     após alterações diretas em ‘gi_frame.f_locals’.  Patch por Mikhail
     Efimov.

   - gh-123378(12): Corrige uma falha no método *note __str__(): 61d. de
     objetos *note UnicodeError: 12e6. quando os valores *note
     UnicodeError.start: 16a2. e *note UnicodeError.end: 16a3. são
     inválidos ou estão fora do intervalo.  Patch por Bénédikt Tran.

   - gh-116510(13): Corrige uma falha causada por strings internas
     imortais sendo compartilhadas entre subinterpretadores que usam
     inicialização básica de fase única.  Nesse caso, a string pode ser
     usada por um interpretador que sobrevive ao interpretador que a
     criou e a internou.  Para interpretadores que compartilham o estado
     obmalloc, compartilhe também o dict interno com o interpretador
     principal.

   - gh-122878(14): Usa o binário ‘pager’, se disponível (por exemplo,
     no Debian e derivados), para exibir REPL ‘help()’.

   - gh-124188(15): Corrige a leitura e decodificação de uma linha do
     arquivo de origem com codificação não UTF-8 para erros de sintaxe
     levantados no compilador.

   - gh-123930(16): Melhora a mensagem de erro quando um script que faz
     “shadowing” de um módulo da biblioteca padrão faz com que *note
     ImportError: 419. seja levantada durante uma importação “from”.  Da
     mesma forma, melhore a mensagem de erro quando um script que faz
     shadowing de um módulo de terceiros tenta importar um atributo
     desse módulo de terceiros enquanto ainda está inicializando.

   - gh-122907(17): A construção com ‘HAVE_DYNAMIC_LOADING’ agora
     funciona tão bem quanto no 3.12.  As deficiências existentes serão
     abordadas separadamente.  (Consulte
     ‘https://github.com/python/cpython/issues/122950’.)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126312

   (2) https://github.com/python/cpython/issues/126139

   (3) https://github.com/python/cpython/issues/126018

   (4) https://github.com/python/cpython/issues/125942

   (5) https://github.com/python/cpython/issues/125859

   (6) https://github.com/python/cpython/issues/125703

   (7) https://github.com/python/cpython/issues/125593

   (8) https://github.com/python/cpython/issues/125444

   (9) https://github.com/python/cpython/issues/124375

   (10) https://github.com/python/cpython/issues/125221

   (11) https://github.com/python/cpython/issues/125038

   (12) https://github.com/python/cpython/issues/123378

   (13) https://github.com/python/cpython/issues/116510

   (14) https://github.com/python/cpython/issues/122878

   (15) https://github.com/python/cpython/issues/124188

   (16) https://github.com/python/cpython/issues/123930

   (17) https://github.com/python/cpython/issues/122907


File: python.info,  Node: Biblioteca<18>,  Next: Núcleo e embutidos<15>,  Prev: Núcleo e embutidos<14>,  Up: Python 3 13 1 final

1.23.12.12 Biblioteca
.....................

   - gh-118950(1): Corrige o bug em que SSLProtocol.connection_lost não
     estava sendo chamado quando OSError era lançada na gravação no
     soquete.

   - gh-113570(2): Corrige um bug em ‘reprlib.repr’ em que ele chamava
     incorretamente o método repr em tipos embutidos Python com
     shadowing.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118950

   (2) https://github.com/python/cpython/issues/113570


File: python.info,  Node: Núcleo e embutidos<15>,  Next: API C<8>,  Prev: Biblioteca<18>,  Up: Python 3 13 1 final

1.23.12.13 Núcleo e embutidos
.............................

   - gh-109746(1): Se ‘_thread.start_new_thread()’ falhar ao iniciar uma
     nova thread, ele exclui seu estado do interpretador e, portanto,
     evita sua limpeza repetida na finalização.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109746


File: python.info,  Node: API C<8>,  Next: Construção<7>,  Prev: Núcleo e embutidos<15>,  Up: Python 3 13 1 final

1.23.12.14 API C
................

   - gh-126554(1): Corrige o tratamento de erros em objetos *note
     ctypes.CDLL: 9f1. que podem resultar em uma falha em situações
     raras.

   - gh-125608(2): Corrige um bug em que os observadores de dicionário
     (por exemplo, *note PyDict_Watch(): 563.) no dicionário de
     atributos de um objeto (*note __dict__: 55b.) não eram acionados
     quando os atributos do objeto eram modificados.

   - bpo-34008(3): Adiciona ‘Py_IsInitialized’ à lista de APIs que são
     seguras para chamar antes que o interpretador seja inicializado e
     atualiza os testes de incorporação para cobri-lo.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/126554

   (2) https://github.com/python/cpython/issues/125608

   (3) https://bugs.python.org/issue?@action=redirect&bpo=34008


File: python.info,  Node: Construção<7>,  Prev: API C<8>,  Up: Python 3 13 1 final

1.23.12.15 Construção
.....................

   - gh-123877(1): Define ‘wasm32-wasip1’ como o alvo WASI. O antigo
     alvo ‘wasm32-wasi’ está descontinuado para que possa ser usado para
     um eventual WASI 1.0.

   - gh-89640(2): Codifica a ordem de palavras float como little endian
     no WASM.

   - gh-125940(3): A construção no Android agora oferece suporte a
     tamanhos de página de 16 KB(4).

   - gh-89640(5): Melhora a detecção da ordem de palavras flutuantes no
     Linux quando as otimizações de tempo de link estiverem habilitadas.

   - gh-125269(6): Corrige a detecção de se ‘-latomic’ é necessário ao
     fazer compilação cruzada do CPython usando o script configure.

   - gh-121634(7): Permite especificar o triplo de compilação de destino
     para WASI.

   - gh-122578(8): Usa WASI SDK 24 para testes.

   - gh-115382(9): Corrige falhas de compilação cruzada quando o host e
     o SOABIs de destino correspondem.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/123877

   (2) https://github.com/python/cpython/issues/89640

   (3) https://github.com/python/cpython/issues/125940

   (4) https://developer.android.com/guide/practices/page-sizes

   (5) https://github.com/python/cpython/issues/89640

   (6) https://github.com/python/cpython/issues/125269

   (7) https://github.com/python/cpython/issues/121634

   (8) https://github.com/python/cpython/issues/122578

   (9) https://github.com/python/cpython/issues/115382


File: python.info,  Node: Python 3 13 0 final,  Next: Python 3 13 0 release candidate 3,  Prev: Python 3 13 1 final,  Up: Changelog

1.23.13 Python 3.13.0 final
---------------------------

'Data de lançamento: 2024-10-07'

* Menu:

* Biblioteca: Biblioteca<19>.
* Núcleo e embutidos: Núcleo e embutidos<16>.


File: python.info,  Node: Biblioteca<19>,  Next: Núcleo e embutidos<16>,  Up: Python 3 13 0 final

1.23.13.1 Biblioteca
....................

   - gh-125008(1): Corrige *note tokenize.untokenize(): 166b. produzindo
     sintaxe inválida para chaves duplas precedidas por certos
     caracteres de escape.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/125008


File: python.info,  Node: Núcleo e embutidos<16>,  Prev: Biblioteca<19>,  Up: Python 3 13 0 final

1.23.13.2 Núcleo e embutidos
............................

   - gh-124871(1): Corrige bug do compilador (em algumas versões do
     3.13) onde uma asserção falha durante a análise de acessibilidade.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124871


File: python.info,  Node: Python 3 13 0 release candidate 3,  Next: Python 3 13 0 release candidate 2,  Prev: Python 3 13 0 final,  Up: Changelog

1.23.14 Python 3.13.0 release candidate 3
-----------------------------------------

'Data de lançamento: 2024-10-01'

* Menu:

* macOS: macOS<6>.
* Windows: Windows<9>.
* Testes: Testes<10>.
* Biblioteca: Biblioteca<20>.
* IDLE: IDLE<8>.
* Documentação: Documentação<9>.
* Núcleo e embutidos: Núcleo e embutidos<17>.
* API C: API C<9>.
* Construção: Construção<8>.


File: python.info,  Node: macOS<6>,  Next: Windows<9>,  Up: Python 3 13 0 release candidate 3

1.23.14.1 macOS
...............

   - gh-123797(1): Verifica a disponibilidade do tempo de execução da
     função ‘ptsname_r’ no macOS.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/123797


File: python.info,  Node: Windows<9>,  Next: Testes<10>,  Prev: macOS<6>,  Up: Python 3 13 0 release candidate 3

1.23.14.2 Windows
.................

   - gh-124609(1): Corrige ‘_Py_ThreadId’ para construções do Windows
     usando MinGW. Patch por Tony Roberts.

   - gh-124254(2): Garante que binários experimentais de threads livres
     permaneçam instalados durante a atualização.

   - gh-123915(3): Garante que ‘Tools\\msi\\buildrelease.bat’ use
     diretórios diferentes para compilações AMD64 e ARM64.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124609

   (2) https://github.com/python/cpython/issues/124254

   (3) https://github.com/python/cpython/issues/123915


File: python.info,  Node: Testes<10>,  Next: Biblioteca<20>,  Prev: Windows<9>,  Up: Python 3 13 0 release candidate 3

1.23.14.3 Testes
................

   - gh-124378(1): Atualizado ‘test_ttk’ para passar com Tcl/Tk 8.6.15.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124378


File: python.info,  Node: Biblioteca<20>,  Next: IDLE<8>,  Prev: Testes<10>,  Up: Python 3 13 0 release candidate 3

1.23.14.4 Biblioteca
....................

   - gh-124538(1): Corrige falha ao usar *note gc.get_referents(): 808.
     em um objeto cápsula.

   - gh-124498(2): Corrige *note typing.TypeAliasType: 455. para não ser
     genérico, quando ‘type_params’ é uma tupla vazia.

   - gh-123017(3): Devido a resultados não confiáveis em alguns
     dispositivos, *note time.strftime(): 1229. não aceita mais anos
     negativos no Android.

   - gh-123014(4): *note os.pidfd_open(): 47a. e *note
     signal.pidfd_send_signal(): 932. agora estão indisponíveis ao
     construir em níveis de API do Android mais antigos que 31, pois as
     chamadas de sistema subjacentes podem causar uma falha.

   - gh-124248(5): Corrige possível falha ao usar *note struct: d5. para
     processar campos ‘Pascal string’ de largura zero (‘0p’).

   - gh-87041(6): Corrige um bug em *note argparse: 6. onde a ajuda de
     argumento de sub-analisador longa é indentada incorretamente.

   - gh-124212(7): Corrige variável inválida em *note venv: 111.
     manipulação de link simbólico com falha no Windows

   - gh-124171(8): Adiciona solução alternativa para implementações
     quebradas de ‘fmod()’ no Windows, que perdem o sinal de zero (por
     exemplo, ‘fmod(-10, 1)’ retorna ‘0.0’).  Patch por Sergey B
     Kirpichev.

   - gh-123934(9): Corrige *note unittest.mock.MagicMock: ebe.
     redefinindo valores de retorno de métodos mágicos após
     ‘.reset_mock(return_value=True)’ ser chamado.

   - gh-123968(10): Corrige a interface de linha de comando para o
     módulo *note random: b8. para selecionar floats entre 0 e N, não 1
     e N.

   - gh-123892(11): Adicionar ‘"_wmi"’ a *note sys.stdlib_module_names:
     844.  Patch por Victor Stinner.

   - gh-123339(12): Corrige *note inspect.getsource(): 15f8. para
     classes nos módulos *note collections.abc: 1e. e *note decimal: 36.
     (para implementação Python pura).  *note inspect.getcomments():
     16b0. agora levanta OSError em vez de IndexError se o valor
     ‘__firstlineno__’ para uma classe estiver fora dos limites.

   - gh-121735(13): Ao trabalhar com arquivos zip, importlib.resources
     agora honra corretamente referências adjacentes ao módulo (por
     exemplo, ‘files(pkg.mod)’ e não apenas ‘files(pkg)’).

   - gh-122145(14): Corrige um problema ao relatar tracebacks
     correspondentes ao código Python emitindo um corpo AST vazio.
     Patch de Nikita Sobolev e Bénédikt Tran.

   - gh-119004(15): Corrige uma falha em *note OrderedDict.__eq__: 16b1.
     quando operandos são mutados durante a verificação.  Patch por
     Bénédikt Tran.

   - bpo-44864(16): Não traduz strings fornecidas pelo usuário em *note
     argparse.ArgumentParser: 539.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124538

   (2) https://github.com/python/cpython/issues/124498

   (3) https://github.com/python/cpython/issues/123017

   (4) https://github.com/python/cpython/issues/123014

   (5) https://github.com/python/cpython/issues/124248

   (6) https://github.com/python/cpython/issues/87041

   (7) https://github.com/python/cpython/issues/124212

   (8) https://github.com/python/cpython/issues/124171

   (9) https://github.com/python/cpython/issues/123934

   (10) https://github.com/python/cpython/issues/123968

   (11) https://github.com/python/cpython/issues/123892

   (12) https://github.com/python/cpython/issues/123339

   (13) https://github.com/python/cpython/issues/121735

   (14) https://github.com/python/cpython/issues/122145

   (15) https://github.com/python/cpython/issues/119004

   (16) https://bugs.python.org/issue?@action=redirect&bpo=44864


File: python.info,  Node: IDLE<8>,  Next: Documentação<9>,  Prev: Biblioteca<20>,  Up: Python 3 13 0 release candidate 3

1.23.14.5 IDLE
..............

   - gh-112938(1): Corrige travamento ininterrupto quando o console
     obtém saída rápida e contínua.

   - gh-120104(2): Corrige preenchimento em janelas de diálogo de
     configuração e pesquisa no IDLE.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/112938

   (2) https://github.com/python/cpython/issues/120104


File: python.info,  Node: Documentação<9>,  Next: Núcleo e embutidos<17>,  Prev: IDLE<8>,  Up: Python 3 13 0 release candidate 3

1.23.14.6 Documentação
......................

   - gh-124720(1): Atualiza a seção “Usando Python em um Mac” do
     documento “Configuração e uso do Python” e incluir informações
     sobre a instalação do suporte a threads livres.

   - gh-116622(2): Adiciona um guia de plataforma Android e sinaliza
     módulos não disponíveis no Android.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124720

   (2) https://github.com/python/cpython/issues/116622


File: python.info,  Node: Núcleo e embutidos<17>,  Next: API C<9>,  Prev: Documentação<9>,  Up: Python 3 13 0 release candidate 3

1.23.14.7 Núcleo e embutidos
............................

   - gh-124567(1): Reverte o GC incremental (em 3.13), pois não está
     claro se os benefícios superam os custos neste momento.

   - gh-124642(2): Corrigido problema de escalabilidade em construções
     com threads livres para leituras sem travas de dicionários em
     cenários de multithread

   - gh-116510(3): Corrige um bug que pode causar uma falha quando
     subinterpretadores usam módulos “básicos” de extensão de fase
     única.  Objetos compartilhados podem se referir a nós PyGC_Head que
     foram liberados como parte da limpeza do interpretador.

   - gh-124547(4): Ao desalocar um objeto com valores inline cujo
     ‘__dict__’ ainda está ativo: se a alocação de memória para os
     valores inline falhar, limpe o dicionário.  Evita uma falha do
     interpretador.

   - gh-124513(5): Corrige uma falha no construtor FrameLocalsProxy:
     verifica o número de argumentos.  Patch por Victor Stinner.

   - gh-124442(6): Corrige não determinismo na compilação classificando
     o valor de *note __static_attributes__: 14b.  Patch por kp2pml30.

   - gh-123856(7): Corrige falha do PyREPL quando uma interrupção de
     teclado é acionada após usar uma pesquisa de histórico

   - gh-65961(8): Documenta a descontinuação da configuração e uso de
     ‘__package__’ e ‘__cached__’.

   - gh-124027(9): Suporte às chaves ‘<page up>’, ‘<page down>’ e
     ‘<delete>’ no Python REPL quando ‘$TERM’ estiver definido como
     ‘vt100’.

   - gh-77894(10): Corrige possível travamento no coletor de lixo quando
     ele tenta quebrar um laço de referência contendo um objeto *note
     memoryview: 2eb.  Agora, um objeto ‘memoryview’ só pode ser limpo
     se não houver buffers que o referenciem.

   - gh-123339(11): Define o atributo ‘__module__’ para uma classe agora
     remove o item ‘__firstlineno__’ do dict do tipo, então eles não
     serão mais inconsistentes.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124567

   (2) https://github.com/python/cpython/issues/124642

   (3) https://github.com/python/cpython/issues/116510

   (4) https://github.com/python/cpython/issues/124547

   (5) https://github.com/python/cpython/issues/124513

   (6) https://github.com/python/cpython/issues/124442

   (7) https://github.com/python/cpython/issues/123856

   (8) https://github.com/python/cpython/issues/65961

   (9) https://github.com/python/cpython/issues/124027

   (10) https://github.com/python/cpython/issues/77894

   (11) https://github.com/python/cpython/issues/123339


File: python.info,  Node: API C<9>,  Next: Construção<8>,  Prev: Núcleo e embutidos<17>,  Up: Python 3 13 0 release candidate 3

1.23.14.8 API C
...............

   - gh-124160(1): Corrige travamento ao importar módulos contendo
     inicialização de estado e fase única em um subinterpretador.

   - gh-123880(2): Corrige um bug que impedia importações circulares de
     módulos de extensão que usam inicialização de fase única.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124160

   (2) https://github.com/python/cpython/issues/123880


File: python.info,  Node: Construção<8>,  Prev: API C<9>,  Up: Python 3 13 0 release candidate 3

1.23.14.9 Construção
....................

   - gh-124487(1): As construções do Windows agora usam o Windows 8.1
     como sua linha de base de API (a instalação já exigia o Windows
     8.1).

   - gh-124043(2): Construir usando *note -with-trace-refs: 395. é
     (temporariamente) proibido quando a GIL está desabilitado.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/124487

   (2) https://github.com/python/cpython/issues/124043


File: python.info,  Node: Python 3 13 0 release candidate 2,  Next: Python 3 13 0 release candidate 1,  Prev: Python 3 13 0 release candidate 3,  Up: Changelog

1.23.15 Python 3.13.0 release candidate 2
-----------------------------------------

'Data de lançamento: 2024-09-06'

* Menu:

* macOS: macOS<7>.
* Windows: Windows<10>.
* Ferramentas/Demos: Ferramentas/Demos<8>.
* Testes: Testes<11>.
* Segurança: Segurança<10>.
* Biblioteca: Biblioteca<21>.
* IDLE: IDLE<9>.
* Biblioteca: Biblioteca<22>.
* Núcleo e embutidos: Núcleo e embutidos<18>.
* API C: API C<10>.
* Construção: Construção<9>.


File: python.info,  Node: macOS<7>,  Next: Windows<10>,  Up: Python 3 13 0 release candidate 2

1.23.15.1 macOS
...............

   - gh-123418(1): Construção do instalador do macOS atualizada para
     usar o OpenSSL 3.0.15.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/123418


File: python.info,  Node: Windows<10>,  Next: Ferramentas/Demos<8>,  Prev: macOS<7>,  Up: Python 3 13 0 release candidate 2

1.23.15.2 Windows
.................

   - gh-123418(1): Construção do Windows atualizada para usar o OpenSSL
     3.0.15.

   - gh-122573(2): A construção do Windows do CPython agora requer 3.10
     ou mais recente.

   - gh-100256(3): *note mimetypes: 8f. não falha mais quando encontra
     uma chave de registro inacessível.

   - gh-79846(4): Faz com que ‘ssl.create_default_context()’ ignore
     certificados inválidos no armazenamento de certificados do Windows

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/123418

   (2) https://github.com/python/cpython/issues/122573

   (3) https://github.com/python/cpython/issues/100256

   (4) https://github.com/python/cpython/issues/79846


File: python.info,  Node: Ferramentas/Demos<8>,  Next: Testes<11>,  Prev: Windows<10>,  Up: Python 3 13 0 release candidate 2

1.23.15.3 Ferramentas/Demos
...........................

   - gh-123418(1): Atualiza os fluxos de trabalho do GitHub CI para usar
     o OpenSSL 3.0.15 e multissltests para usar 3.0.15, 3.1.7 e 3.2.3.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/123418


File: python.info,  Node: Testes<11>,  Next: Segurança<10>,  Prev: Ferramentas/Demos<8>,  Up: Python 3 13 0 release candidate 2

1.23.15.4 Testes
................

   - gh-119727(1): Adiciona a opção de linha de comando
     ‘--single-process’ ao executor de testes Python (regrtest).  Patch
     por Victor Stinner.

   - gh-101525(2): Ignora ‘test_gdb’ se o binário for realocado pelo
     BOLT. Patch por Donghee Na.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/119727

   (2) https://github.com/python/cpython/issues/101525


File: python.info,  Node: Segurança<10>,  Next: Biblioteca<21>,  Prev: Testes<11>,  Up: Python 3 13 0 release candidate 2

1.23.15.5 Segurança
...................

   - gh-123678(1): Atualiza o libexpat para 2.6.3

   - gh-121285(2): Remove o backtracking da análise de cabeçalho do
     arquivo tar para ‘hdrcharset’, PAX e cabeçalhos esparsos GNU.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/123678

   (2) https://github.com/python/cpython/issues/121285


File: python.info,  Node: Biblioteca<21>,  Next: IDLE<9>,  Prev: Segurança<10>,  Up: Python 3 13 0 release candidate 2

1.23.15.6 Biblioteca
....................

   - gh-123657(1): Corrige o travamento e o vazamento de memória em
     *note decimal.getcontext(): 16be.  Ele travava ao usar um contexto
     local de thread por ‘--with-decimal-contextvar=no’.

   - gh-123448(2): Corrigido vazamento de memória de *note
     typing.NoDefault: 262. movendo-o para o vetor de tipos estáticos.

   - gh-123409(3): Corrige a saída de *note
     ipaddress.IPv6Address.reverse_pointer: 16bf. de acordo com RFC
     3596, §2.5(4).  Patch por Bénédikt Tran.

   - gh-123270(5): Aplicada uma correção mais cirúrgica para payloads
     malformados em *note zipfile.Path: 6c9. causando loops infinitos
     (gh-122905(6)) sem quebrar o conteúdo usando caracteres legítimos.

   - gh-123228(7): Corrige tipo de retorno para
     ‘_pyrepl.readline._ReadlineWrapper.get_line_buffer()’ para ser
     *note str(): 44c.  Patch por Sergey B Kirpichev.

   - gh-123240(8): Levanta eventos de auditoria para *note input():
     131b. no novo REPL.

   - gh-123243(9): Corrige vazamento de memória em ‘_decimal’.

   - gh-122546(10): Usar consistentemente o mesmo nome de arquivo para
     diferentes exceções no novo repl.  Patch por Sergey B Kirpichev.

   - gh-123213(11): A atribuição *note
     xml.etree.ElementTree.Element.extend(): 1213. e *note Element: 310.
     não oculta mais a exceção interna se um gerador errôneo for
     passado.  Patch por Bar Harel.

   - gh-85110(12): Preserva caminho relativo em URL sem netloc em *note
     urllib.parse.urlunsplit(): 16c0. e *note urllib.parse.urlunparse():
     16c1.

   - gh-123067(13): Corrige complexidade quadrática na análise de
     valores de cookies entre aspas ‘"’ com contrabarras por *note
     http.cookies: 71.

   - gh-122981(14): Corrige *note inspect.getsource(): 15f8. para
     classes geradas com classes base Python (por exemplo, enums).

   - gh-122903(15): ‘zipfile.Path.glob’ agora corresponde corretamente
     aos diretórios em vez de omiti-los silenciosamente.

   - gh-122905(16): Objetos *note zipfile.Path: 6c9. agora sanitizam
     nomes do arquivo zip.

   - gh-122695(17): Corrige liberação dupla ao usar *note
     gc.get_referents(): 808. com um iterador *note asyncio.Future: be6.
     liberado.

   - gh-116263(18): *note logging.handlers.RotatingFileHandler: 16c2.
     não substitui mais arquivos de log vazios.

   - gh-105376(19): Restaura o método descontinuado ‘warn()’ do *note
     logging: 87.  Ele foi removido no Python 3.13 alpha 1.  Mantém o
     método descontinuado ‘warn()’ no Python 3.13.  Patch por Victor
     Stinner.

   - gh-122744(20): Sobe a versão do pip empacotado em ensurepip para a
     versão 24.2.

   - gh-118814(21): Corrige o construtor *note typing.TypeVar: 15d.
     quando o nome for passado como argumento nomeado.

   - gh-122478(22): Remove quadros internos de tracebacks mostrados em
     *note code.InteractiveInterpreter: 16c3. com *note
     sys.excepthook(): 80e. não padrão.  Salve os tracebacks corretos em
     *note sys.last_traceback: 4c1. e atualize o atributo
     ‘__traceback__’ de *note sys.last_value: 4c0. e *note sys.last_exc:
     4be.

   - gh-116622(23): No Android, as constantes ‘FICLONE’ e ‘FICLONERANGE’
     não são mais expostas por *note fcntl: 59, pois esses ioctls são
     bloqueados pelo SELinux.

   - gh-82378(24): Garante que o novo *note REPL: 16a. interprete *note
     sys.tracebacklimit: 16c4. da mesma forma que o REPL clássico.

   - gh-122334(25): Corrige o travamento ao importar *note ssl: d0. após
     a reinicialização do interpretador principal.

   - gh-87320(26): Em *note code.InteractiveInterpreter: 16c3, trata
     exceções causadas pela chamada de um *note sys.excepthook(): 80e.
     não padrão.  Antes, a exceção era apresentada para o chamador,
     encerrando o *note REPL: 16a.

   - gh-121650(27): Cabeçalhos *note email: 3b. com quebras de linha
     incorporadas agora são citados na saída.  O *note generator: 40.
     agora se recusará a serializar (escrever) cabeçalhos que são
     dobrados ou delimitados de forma insegura; consulte *note
     verify_generated_headers: 1e0.  (Contribuição de Bas Bloemsaat e
     Petr Viktorin em gh-121650(28).)

   - gh-121723(29): Faz *note logging.config.dictConfig(): 11ef. aceitar
     qualquer objeto que implemente a API pública Queue.  Veja a seção
     *note configuração de fila: 16c5. para detalhes.  Patch por
     Bénédikt Tran.

   - gh-122081(30): Corrige uma falha na função opcional
     ‘decimal.IEEEContext()’ disponível por meio do sinalizador de
     configuração ‘EXTRA_FUNCTIONALITY’.

   - gh-121804(31): Mostra corretamente os locais de erro quando *note
     SyntaxError: 18d. é levantada em um novo repl.  Patch por Sergey B
     Kirpichev.

   - gh-121151(32): Corrige o encapsulamento de texto de uso longo de
     argumentos dentro de um grupo mutuamente exclusivo em *note
     argparse: 6.

   - gh-108172(33): ‘webbrowser’ honra o navegador preferido do sistema
     no Linux quando a entrada desktop de nome contém o texto de um nome
     de navegador conhecido.

   - gh-109109(34): Agora você pode obter as cadeias de certificados TLS
     brutas de conexões TLS por meio dos métodos *note
     ssl.SSLSocket.get_verified_chain(): 16c6. e *note
     ssl.SSLSocket.get_unverified_chain(): 16c7.

     Contribuição de Mateusz Nowak.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/123657

   (2) https://github.com/python/cpython/issues/123448

   (3) https://github.com/python/cpython/issues/123409

   (4) https://datatracker.ietf.org/doc/html/rfc3596.html#section-2.5

   (5) https://github.com/python/cpython/issues/123270

   (6) https://github.com/python/cpython/issues/122905

   (7) https://github.com/python/cpython/issues/123228

   (8) https://github.com/python/cpython/issues/123240

   (9) https://github.com/python/cpython/issues/123243

   (10) https://github.com/python/cpython/issues/122546

   (11) https://github.com/python/cpython/issues/123213

   (12) https://github.com/python/cpython/issues/85110

   (13) https://github.com/python/cpython/issues/123067

   (14) https://github.com/python/cpython/issues/122981

   (15) https://github.com/python/cpython/issues/122903

   (16) https://github.com/python/cpython/issues/122905

   (17) https://github.com/python/cpython/issues/122695

   (18) https://github.com/python/cpython/issues/116263

   (19) https://github.com/python/cpython/issues/105376

   (20) https://github.com/python/cpython/issues/122744

   (21) https://github.com/python/cpython/issues/118814

   (22) https://github.com/python/cpython/issues/122478

   (23) https://github.com/python/cpython/issues/116622

   (24) https://github.com/python/cpython/issues/82378

   (25) https://github.com/python/cpython/issues/122334

   (26) https://github.com/python/cpython/issues/87320

   (27) https://github.com/python/cpython/issues/121650

   (28) https://github.com/python/cpython/issues/121650

   (29) https://github.com/python/cpython/issues/121723

   (30) https://github.com/python/cpython/issues/122081

   (31) https://github.com/python/cpython/issues/121804

   (32) https://github.com/python/cpython/issues/121151

   (33) https://github.com/python/cpython/issues/108172

   (34) https://github.com/python/cpython/issues/109109


File: python.info,  Node: IDLE<9>,  Next: Biblioteca<22>,  Prev: Biblioteca<21>,  Up: Python 3 13 0 release candidate 2

1.23.15.7 IDLE
..............

   - gh-120083(1): Adiciona a cor preta explícita como primeiro plano de
     dicas flutuantes (hovertips) do IDLE, necessário para macOS
     recentes.  Corrige o Sonoma mostrando branco ilegível em amarelo
     claro.  Patch por John Riggles.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/120083


File: python.info,  Node: Biblioteca<22>,  Next: Núcleo e embutidos<18>,  Prev: IDLE<9>,  Up: Python 3 13 0 release candidate 2

1.23.15.8 Biblioteca
....................

   - gh-120221(1): o REPL do asyncio agora está reconhecendo
     corretamente KeyboardInterrupts.  A exibição de exceções levantadas
     em threads secundárias foi corrigida.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/120221


File: python.info,  Node: Núcleo e embutidos<18>,  Next: API C<10>,  Prev: Biblioteca<22>,  Up: Python 3 13 0 release candidate 2

1.23.15.9 Núcleo e embutidos
............................

   - gh-119310(1): Permite que o novo console interativo leia arquivos
     de histórico escritos com a biblioteca editline que usam entradas
     com escape unicode.  Patch por aorcajo e Łukasz Langa.

   - gh-123572(2): Corrige mapeamentos de teclas para várias teclas F no
     Windows para o novo REPL. Patch por devdanzin

   - gh-119034(3): Altera as teclas ‘<page up>’ e ‘<page down>’ do REPL
     do Python para pesquisa de histórico para frente/para trás.  Patch
     por Victor Stinner.

   - gh-123545(4): Corrige um decref duplo em casos raros em construções
     JIT experimentais.

   - gh-123484(5): Corrige ‘_Py_DebugOffsets’ para objetos longos para
     serem relativos ao início do objeto em vez do início de um
     subobjeto.

   - gh-123344(6): Adiciona otimizações AST para padrões de parâmetros
     de tipo.

   - gh-123321(7): Impede que a condição de corrida Parser/myreadline
     apresente falhas de segmentação no uso multithread.  Patch por Bar
     Harel e Amit Wienner.

   - gh-123177(8): Corrige um bug que causava o aparecimento de prompts
     perdidos no meio de linhas quebradas no novo REPL.

   - gh-122982(9): Estende o período de descontinuação para inversão de
     bool (‘~’) em dois anos.

   - gh-123275(10): Suporte a *note -X gil=1: 176. e a *note
     PYTHON_GIL=1: 175. em construções sem threads livres.

   - gh-123177(11): Desativa quebra de linha no Apple Terminal por meio
     de um código de escape ANSI. Patch por Pablo Galindo

   - gh-123229(12): Corrige o aviso valgrind inicializando os buffers
     f-string para 0 no tokenizador.  Patch por Pablo Galindo

   - gh-122298(13): Restaura a impressão das estatísticas do GC quando
     ‘gc.set_debug(gc.DEBUG_STATS)’ é chamado.  Este recurso foi
     removido acidentalmente ao implementar o GC incremental.

   - gh-121804(14): Mostra corretamente os locais de erro quando uma
     *note SyntaxError: 18d. é levanta no REPL básico.  Patch por Sergey
     B Kirpichev.

   - gh-123142(15): Corrige o local de origem muito amplo em tracebacks
     de exceção provenientes de iteráveis quebrados em compreensões.

   - gh-123048(16): Corrige um bug em que o código de correspondência de
     padrões poderia emitir um *note JUMP_FORWARD: 16cb. sem local de
     origem.

   - gh-123123(17): Corrige a exibição de exceções *note SyntaxError:
     18d. cobrindo várias linhas.  Patch por Pablo Galindo

   - gh-123083(18): Corrige um possível uso após liberação em
     ‘STORE_ATTR_WITH_HINT’.

   - gh-123022(19): Corrige falha em construção com threads livres ao
     chamar *note Py_Initialize(): 8b1. de uma thread não principal.

   - gh-122888(20): Corrige falha em certas chamadas para ‘str()’ com
     argumentos posicionais do tipo errado.  Patch por Jelle Zijlstra.

   - gh-116622(21): Corrige mensagens stdout e stderr do Android sendo
     truncadas ou perdidas.

   - gh-122527(22): Corrige uma falha que ocorria quando um
     ‘PyStructSequence’ era desalocado após o dicionário do seu tipo ser
     limpo pelo GC. O *note tp_basicsize: 98e. do tipo agora considera
     campos não sequenciais que não estão incluídos no *note Py_SIZE:
     782. da sequência.

   - gh-122445(23): Adiciona somente campos que são modificados via
     self.* para *note __static_attributes__: 14b.

   - gh-98442(24): Corrige localizações de origem muito amplas das
     instruções de limpeza de uma declaração with.

   - gh-93691(25): Corrige localizações de origem de instruções geradas
     para declarações with.

   - gh-120097(26): ‘FrameLocalsProxy’ agora é uma subclasse de
     ‘collections.abc.Mapping’ e pode ser correspondido como um
     mapeamento em instruções ‘match’

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/119310

   (2) https://github.com/python/cpython/issues/123572

   (3) https://github.com/python/cpython/issues/119034

   (4) https://github.com/python/cpython/issues/123545

   (5) https://github.com/python/cpython/issues/123484

   (6) https://github.com/python/cpython/issues/123344

   (7) https://github.com/python/cpython/issues/123321

   (8) https://github.com/python/cpython/issues/123177

   (9) https://github.com/python/cpython/issues/122982

   (10) https://github.com/python/cpython/issues/123275

   (11) https://github.com/python/cpython/issues/123177

   (12) https://github.com/python/cpython/issues/123229

   (13) https://github.com/python/cpython/issues/122298

   (14) https://github.com/python/cpython/issues/121804

   (15) https://github.com/python/cpython/issues/123142

   (16) https://github.com/python/cpython/issues/123048

   (17) https://github.com/python/cpython/issues/123123

   (18) https://github.com/python/cpython/issues/123083

   (19) https://github.com/python/cpython/issues/123022

   (20) https://github.com/python/cpython/issues/122888

   (21) https://github.com/python/cpython/issues/116622

   (22) https://github.com/python/cpython/issues/122527

   (23) https://github.com/python/cpython/issues/122445

   (24) https://github.com/python/cpython/issues/98442

   (25) https://github.com/python/cpython/issues/93691

   (26) https://github.com/python/cpython/issues/120097


File: python.info,  Node: API C<10>,  Next: Construção<9>,  Prev: Núcleo e embutidos<18>,  Up: Python 3 13 0 release candidate 2

1.23.15.10 API C
................

   - gh-122728(1): Corrige *note PyEval_GetLocals(): 353. para evitar
     *note SystemError: 575. (“argumento ruim para função interna”).
     Patch por Victor Stinner.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/122728


File: python.info,  Node: Construção<9>,  Prev: API C<10>,  Up: Python 3 13 0 release candidate 2

1.23.15.11 Construção
.....................

   - gh-123418(1): Atualizada construção do Android para usar OpenSSL
     3.0.15.

   - gh-123297(2): Propaga o valor de ‘LDFLAGS’ para ‘LDCXXSHARED’ em
     *note sysconfig: db.  Patch por Pablo Galindo

   - gh-116622(3): Renomeia variável de construção ‘MODULE_LDFLAGS’ de
     volta para ‘LIBPYTHON’, como é usada por sistemas de construção de
     pacotes (por exemplo, Meson).

   - gh-118943(4): Corrige um problema em que o JIT experimental poderia
     ser construído várias vezes pelo alvo ‘make regen-all’, levando a
     possíveis condições de corrida em construções fortemente
     paralelizadas.

   - gh-118943(5): Corrige uma possível condição de corrida afetando
     construções paralelas configuradas com ‘--enable-experimental-jit’,
     em que *note FileNotFoundError: 42b. poderia ser causado por outro
     processo que já estava movendo ‘jit_stencils.h.new’ para
     ‘jit_stencils.h’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/123418

   (2) https://github.com/python/cpython/issues/123297

   (3) https://github.com/python/cpython/issues/116622

   (4) https://github.com/python/cpython/issues/118943

   (5) https://github.com/python/cpython/issues/118943


File: python.info,  Node: Python 3 13 0 release candidate 1,  Next: Python 3 13 0 beta 4,  Prev: Python 3 13 0 release candidate 2,  Up: Changelog

1.23.16 Python 3.13.0 release candidate 1
-----------------------------------------

'Data de lançamento: 2024-07-31'

* Menu:

* Testes: Testes<12>.
* Segurança: Segurança<11>.
* Biblioteca: Biblioteca<23>.
* IDLE: IDLE<10>.
* Núcleo e embutidos: Núcleo e embutidos<19>.
* API C: API C<11>.
* Construção: Construção<10>.


File: python.info,  Node: Testes<12>,  Next: Segurança<11>,  Up: Python 3 13 0 release candidate 1

1.23.16.1 Testes
................

   - gh-59022(1): Adiciona testes para *note pkgutil.extend_path():
     16d0.  Patch por Andreas Stocker.

   - gh-99242(2): *note os.getloadavg(): 16d1. pode levantar *note
     OSError: 417. ao executar testes de regressão sob certas condições
     (por exemplo, chroot).  Este erro agora é capturado e ignorado,
     pois o relatório da média de carga é opcional.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/59022

   (2) https://github.com/python/cpython/issues/99242


File: python.info,  Node: Segurança<11>,  Next: Biblioteca<23>,  Prev: Testes<12>,  Up: Python 3 13 0 release candidate 1

1.23.16.2 Segurança
...................

   - gh-122133(1): Autentica a conexão de soquete para o fallback
     ‘socket.socketpair()’ em plataformas onde ‘AF_UNIX’ não está
     disponível, como o Windows.

     Patch por Gregory P. Smith <<greg@krypto.org>> e Seth Larson
     <<seth@python.org>>.  Reportado por Ellie <<el@horse64.org>>

   - gh-121957(2): Corrigidos eventos de auditoria ausentes no uso
     interativo do Python, agora também sendo acionados corretamente
     para ‘python -i’, bem como para ‘python -m asyncio’.  Os eventos em
     questão são ‘cpython.run_stdin’ e ‘cpython.run_startup’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/122133

   (2) https://github.com/python/cpython/issues/121957


File: python.info,  Node: Biblioteca<23>,  Next: IDLE<10>,  Prev: Segurança<11>,  Up: Python 3 13 0 release candidate 1

1.23.16.3 Biblioteca
....................

   - gh-122400(1): Lida com *note ValueError: 202.s levantados por *note
     os.stat(): 4a0. em *note filecmp.dircmp: f73. e *note
     filecmp.cmpfiles(): 16d4.  Patch por Bénédikt Tran.

   - gh-122311(2): Corrige algumas mensagens de erro em *note pickle:
     a6.

   - gh-122332(3): Corrigido segfault com *note asyncio.Task.get_coro():
     9e4. ao usar uma fábrica de tarefas ansiosa.

   - gh-105733(4): a função *note ctypes.ARRAY(): 29c. agora está *note
     suavemente descontinuada: 209.: ela não emite mais avisos de
     descontinuação e não está programada para remoção.

   - gh-122087(5): Restaura *note inspect.ismethoddescriptor(): 16d5. e
     *note inspect.isroutine(): 16d6. retornando ‘False’ para objetos
     *note functools.partial: 414.

   - gh-122170(6): Lida com *note ValueError: 202.s levantadas por *note
     os.stat(): 4a0. em *note linecache: 85.  Patch por Bénédikt Tran.

   - gh-82951(7): Serializa objetos com ‘__qualname__’ complexo (como
     métodos não vinculados e classes aninhadas) por nome não envolve
     mais serializar objetos pais por valor em protocolos pickle < 4.

   - gh-113785(8): *note csv: 29. agora analisa corretamente campos
     numéricos (quando usados com *note csv.QUOTE_NONNUMERIC: 16d7. ou
     *note csv.QUOTE_STRINGS: 485.) que começam com um caractere de
     escape.

   - gh-122088(9): *note @warnings.deprecated: 160. agora copia o status
     da corrotina de funções e métodos para que *note
     inspect.iscoroutinefunction(): 2e4. retorne o resultado correto.

   - gh-120930(10): Corrigido um bug introduzido por gh-92081(11) que
     adicionava um espaço extra incorreto para palavras codificadas
     ocorrendo em cabeçalhos encapsulados.

   - gh-121474(12): Corrigida a verificação de sanidade ausente para o
     argumento ‘parties’ no construtor *note threading.Barrier: 1223.
     Patch por Clinton Christian (pygeek).

   - gh-120289(13): Corrigido o problema de uso após liberação em *note
     cProfile: 27. ao desabilitar ‘disable()’ e ‘clear()’ em
     temporizadores externos.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/122400

   (2) https://github.com/python/cpython/issues/122311

   (3) https://github.com/python/cpython/issues/122332

   (4) https://github.com/python/cpython/issues/105733

   (5) https://github.com/python/cpython/issues/122087

   (6) https://github.com/python/cpython/issues/122170

   (7) https://github.com/python/cpython/issues/82951

   (8) https://github.com/python/cpython/issues/113785

   (9) https://github.com/python/cpython/issues/122088

   (10) https://github.com/python/cpython/issues/120930

   (11) https://github.com/python/cpython/issues/92081

   (12) https://github.com/python/cpython/issues/121474

   (13) https://github.com/python/cpython/issues/120289


File: python.info,  Node: IDLE<10>,  Next: Núcleo e embutidos<19>,  Prev: Biblioteca<23>,  Up: Python 3 13 0 release candidate 1

1.23.16.4 IDLE
..............

   - gh-122482(1): Alterado o Sobre do IDLE para direcionar os usuários
     para discuss.python.org em vez do e-mail e lista de discussão
     idle-dev, agora não utilizados.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/122482


File: python.info,  Node: Núcleo e embutidos<19>,  Next: API C<11>,  Prev: IDLE<10>,  Up: Python 3 13 0 release candidate 1

1.23.16.5 Núcleo e embutidos
............................

   - gh-116090(1): Corrige um problema em construções JIT que impediam
     alguns loops *note for: 2f2. de disparar corretamente eventos de
     monitoramento *note RAISE: 16da.

   - gh-122208(2): Os monitoradores de dicionário agora só entregam o
     evento PyDict_EVENT_ADDED quando a inserção está em um estado
     conhecido como bom para ser bem-sucedida.

   - gh-122300(3): Preserva nós AST para f-string com especificadores de
     formato de elemento único.  Patch por Pablo Galindo

   - gh-120906(4): *note frame.f_locals: 182. agora oferece suporte a
     objetos hash arbitrários como chaves.

   - gh-122029(5): Emite eventos ‘c_call’ em *note sys.setprofile():
     1546. quando um ‘PyMethodObject’ apontando para um ‘PyCFunction’ é
     chamado.

   - gh-122026(6): Corrige um bug que fazia com que o tokenizador não
     identificasse corretamente parênteses incompatíveis dentro de
     f-strings em algumas situações.  Patch por Pablo Galindo

   - gh-118934(7): Faz ‘PyEval_GetLocals’ retornar referência emprestada

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/116090

   (2) https://github.com/python/cpython/issues/122208

   (3) https://github.com/python/cpython/issues/122300

   (4) https://github.com/python/cpython/issues/120906

   (5) https://github.com/python/cpython/issues/122029

   (6) https://github.com/python/cpython/issues/122026

   (7) https://github.com/python/cpython/issues/118934


File: python.info,  Node: API C<11>,  Next: Construção<10>,  Prev: Núcleo e embutidos<19>,  Up: Python 3 13 0 release candidate 1

1.23.16.6 API C
...............

   - gh-116622(1): Faz *note PyObject_Print: 16dc. contornar um bug no
     Android e OpenBSD que o impedia de levantar uma exceção ao tentar
     gravar em um fluxo somente leitura.

   - gh-121489(2): Exporta ‘_PyBytes_Join()’ privada novamente.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/116622

   (2) https://github.com/python/cpython/issues/121489


File: python.info,  Node: Construção<10>,  Prev: API C<11>,  Up: Python 3 13 0 release candidate 1

1.23.16.7 Construção
....................

   - gh-120522(1): Adicionada uma opção *note
     -with-app-store-compliance: 16de. para corrigir problemas
     conhecidos com processos de revisão da App Store do macOS/iOS.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/120522


File: python.info,  Node: Python 3 13 0 beta 4,  Next: Python 3 13 0 beta 3,  Prev: Python 3 13 0 release candidate 1,  Up: Changelog

1.23.17 Python 3.13.0 beta 4
----------------------------

'Data de lançamento: 2024-07-18'

* Menu:

* Testes: Testes<13>.
* Biblioteca: Biblioteca<24>.
* IDLE: IDLE<11>.
* Documentação: Documentação<10>.
* Núcleo e embutidos: Núcleo e embutidos<20>.
* API C: API C<12>.
* Construção: Construção<11>.


File: python.info,  Node: Testes<13>,  Next: Biblioteca<24>,  Up: Python 3 13 0 beta 4

1.23.17.1 Testes
................

   - gh-121084(1): Corrige vazamentos aleatórios de test_typing.  Limpa
     caches ABC de tipagem ao executar testes para refleaks (opção
     ‘-R’): chama ‘_abc_caches_clear()’ em classes abstratas de tipagem
     e suas subclasses.  Patch por Victor Stinner.

   - gh-121160(2): Adiciona um teste para *note
     readline.set_history_length(): 16e1.  Observe que este teste pode
     falhar em bibliotecas readline.

   - gh-121200(3): Corrige ‘test_expanduser_pwd2()’ de ‘test_posixpath’.
     Chama ‘getpwnam()’ para obter ‘pw_dir’, pois pode ser diferente de
     ‘getpwall()’ ‘pw_dir’.  Patch por Victor Stinner.

   - gh-121188(4): Ao criar o arquivo XML JUnit, o regrtest agora escapa
     caracteres inválidos em XML, como o caractere de controle chr(27)
     usado em sequências de escape ANSI. Patch por Victor Stinner.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/121084

   (2) https://github.com/python/cpython/issues/121160

   (3) https://github.com/python/cpython/issues/121200

   (4) https://github.com/python/cpython/issues/121188


File: python.info,  Node: Biblioteca<24>,  Next: IDLE<11>,  Prev: Testes<13>,  Up: Python 3 13 0 beta 4

1.23.17.2 Biblioteca
....................

   - gh-57141(1): O argumento 'shallow' para *note filecmp.dircmp: f73.
     (novo no Python 3.13) agora é somente-nomeado.

   - gh-121245(2): Simplifica o tratamento do arquivo de histórico no
     auxiliar ‘site.register_readline()’.  A variável ‘CAN_USE_PYREPL’
     agora será inicializada quando importada.  Patch por Sergey B
     Kirpichev.

   - gh-121332(3): Corrige o construtor de nós *note ast: 8. com
     ‘_attributes’ personalizados.  Anteriormente, passar atributos
     personalizados levantaria *note DeprecationWarning: 1a5.  Passar
     argumentos para o construtor que não estão em ‘_fields’ ou
     ‘_attributes’ continua descontinuado.  Patch por Jelle Zijlstra.

   - gh-121279(4): Evita *note NameError: 43f. para o módulo *note
     warnings: 112. ao acessar os atributos descontinuados do módulo
     *note importlib.abc: 78.

   - gh-121245(5): Corrige um bug no tratamento do histórico de comandos
     do novo *note REPL: 16a. que fazia com que o arquivo de histórico
     fosse apagado na saída do REPL.

   - gh-87744(6): Corrige a corrida waitpid ao chamar *note
     send_signal(): 16e3. em asyncio.  Patch por Kumar Aditya.

   - gh-121018(7): Corrigidos outros problemas em que *note
     argparse.ArgumentParser: 539. não honrava ‘exit_on_error=False’.

   - gh-120678(8): Corrigida a regressão no novo REPL que significava
     que globais de arquivos passados usando o argumento ‘-i’ não seriam
     incluídos no namespace global do REPL. Patch por Alex Waygood.

   - gh-120782(9): Corrigidas referências erradas dos tipos *note
     datetime: 30. após recarregar o módulo.

   - gh-120713(10): *note datetime.datetime.strftime(): caf. agora
     preenche com 0 anos com menos de quatro dígitos para os
     especificadores de formato ‘%Y’ e ‘%G’ no Linux.  Patch por Ben
     Hsing

   - gh-117983(11): Adia a importação de ‘threading’ em ‘importlib.util’
     até que o carregamento preguiçoso seja usado.

   - gh-119189(12): Ao usar o operador ‘**’ ou *note pow(): 9da. com
     *note Fraction: 1e7. como base e um expoente que não seja racional,
     um float ou um complexo, a fração não é mais convertida em um
     float.

   - gh-118714(13): Permite ‘restart’ na depuração post-mortem de *note
     pdb: a5.  Removida a mensagem de reinicialização quando o usuário
     sai do pdb do modo post-mortem.

   - gh-105623(14): Corrige degradação de desempenho em *note
     logging.handlers.RotatingFileHandler: 16c2.  Patch por Craig
     Robson.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/57141

   (2) https://github.com/python/cpython/issues/121245

   (3) https://github.com/python/cpython/issues/121332

   (4) https://github.com/python/cpython/issues/121279

   (5) https://github.com/python/cpython/issues/121245

   (6) https://github.com/python/cpython/issues/87744

   (7) https://github.com/python/cpython/issues/121018

   (8) https://github.com/python/cpython/issues/120678

   (9) https://github.com/python/cpython/issues/120782

   (10) https://github.com/python/cpython/issues/120713

   (11) https://github.com/python/cpython/issues/117983

   (12) https://github.com/python/cpython/issues/119189

   (13) https://github.com/python/cpython/issues/118714

   (14) https://github.com/python/cpython/issues/105623


File: python.info,  Node: IDLE<11>,  Next: Documentação<10>,  Prev: Biblioteca<24>,  Up: Python 3 13 0 beta 4

1.23.17.3 IDLE
..............

   - gh-78889(1): Para o congelamentos do Shell bloqueando o acesso do
     usuário a atributos sys.stdout.shell que não são métodos, que são
     todos privados.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/78889


File: python.info,  Node: Documentação<10>,  Next: Núcleo e embutidos<20>,  Prev: IDLE<11>,  Up: Python 3 13 0 beta 4

1.23.17.4 Documentação
......................

   - gh-121749(1): Corrige documentação para *note
     PyModule_AddObjectRef(): 365.

   - gh-120012(2): Esclarece os comportamentos de *note
     multiprocessing.Queue.empty(): 16e6. e *note
     multiprocessing.SimpleQueue.empty(): 16e7. em filas fechadas.
     Patch por Bénédikt Tran.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/121749

   (2) https://github.com/python/cpython/issues/120012


File: python.info,  Node: Núcleo e embutidos<20>,  Next: API C<12>,  Prev: Documentação<10>,  Up: Python 3 13 0 beta 4

1.23.17.5 Núcleo e embutidos
............................

   - gh-121860(1): Corrige travamento ao rematerializar um dicionário
     gerenciado após ele ter sido excluído.

   - gh-121814(2): Corrigido o SegFault quando *note PyEval_SetTrace():
     421. é usado sem nenhum quadro Python na pilha.

   - gh-121295(3): Corrigido o console PyREPL entrando em um estado
     bloqueado após interromper uma colagem longa

   - gh-121794(4): Corrigido o bug no Python de threads livres onde um
     objeto ressuscitado poderia levar a uma falha de asserção de
     contagem de referência negativa.

   - gh-121657(5): Melhorada a mensagem de *note SyntaxError: 18d. se o
     usuário tentar usar *note yield from: 9d5. fora de uma função.

   - gh-121609(6): Corrigido o ato de colar caracteres contendo unicode
     character joiners no novo REPL. Patch por Marta Gomez Macias

   - gh-117482(7): Invólucros de slot inesperados não são mais criados
     para tipos estáticos embutidos em subinterpretadores.

   - gh-121499(8): Corrige um bug que afetava como o histórico
     multilinha estava sendo renderizado no novo REPL após interagir com
     o novo cache de tela.  Patch por Pablo Galindo

   - gh-121497(9): Corrige um bug que impedia o REPL de respeitar
     corretamente o histórico quando um gancho de entrada era definido.
     Patch por Pablo Galindo

   - gh-121012(10): A execução do nível 2 agora garante que os
     iteradores de lista permaneçam esgotados, uma vez que se esgotem.

   - gh-121439(11): Permite que tuplas de comprimento 20 na lista de
     liberação sejam reutilizadas.

   - gh-121368(12): Corrige a condição de corrida em ‘_PyType_Lookup’ na
     construção com threads livres devido a uma cerca de memória
     ausente.  Isso pode levar ‘_PyType_Lookup’ a retornar resultados
     incorretos no arm64.

   - gh-121130(13): Corrige f-strings com expressões de depuração em
     especificadores de formato.  Patch por Pablo Galindo

   - gh-121115(14): *note PyLong_AsNativeBytes(): 361. não usa mais
     métodos *note __index__(): 71d. por padrão.  O sinalizador
     ‘Py_ASNATIVEBYTES_ALLOW_INDEX’ foi adicionado para permitir isso.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/121860

   (2) https://github.com/python/cpython/issues/121814

   (3) https://github.com/python/cpython/issues/121295

   (4) https://github.com/python/cpython/issues/121794

   (5) https://github.com/python/cpython/issues/121657

   (6) https://github.com/python/cpython/issues/121609

   (7) https://github.com/python/cpython/issues/117482

   (8) https://github.com/python/cpython/issues/121499

   (9) https://github.com/python/cpython/issues/121497

   (10) https://github.com/python/cpython/issues/121012

   (11) https://github.com/python/cpython/issues/121439

   (12) https://github.com/python/cpython/issues/121368

   (13) https://github.com/python/cpython/issues/121130

   (14) https://github.com/python/cpython/issues/121115


File: python.info,  Node: API C<12>,  Next: Construção<11>,  Prev: Núcleo e embutidos<20>,  Up: Python 3 13 0 beta 4

1.23.17.6 API C
...............

   - gh-89364(1): Exporta a função *note PySignal_SetWakeupFd(): 1422.
     Anteriormente, a função era documentada, mas não podia ser usada em
     código de terceiros.  Patch por Victor Stinner.

   - gh-113993(2): *note PyUnicode_InternInPlace(): 8b6. não impede mais
     que seu argumento seja coletado como lixo.

     Várias funções que usam ‘char *’ agora são documentadas como
     possivelmente impedindo que objetos de string sejam coletados como
     lixo; consulte a documentação para obter detalhes: *note
     PyUnicode_InternFromString(): 16ea, *note PyDict_SetItemString():
     16eb, *note PyObject_SetAttrString(): 16ec, *note
     PyObject_DelAttrString(): 1620, *note PyUnicode_InternFromString():
     16ea. e funções de conveniência ‘PyModule_Add*’.

   - gh-113601(3): Removidas asserções de construção de depuração
     relacionadas a strings internas, que eram falsamente acionadas por
     extensões ABI estáveis.

   - gh-112136(4): Restaura a estrutura privada ‘_PyArg_Parser’ e a
     função privada ‘_PyArg_ParseTupleAndKeywordsFast()’, removidas
     anteriormente no Python 3.13 alpha 1.  Patch por Victor Stinner.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/89364

   (2) https://github.com/python/cpython/issues/113993

   (3) https://github.com/python/cpython/issues/113601

   (4) https://github.com/python/cpython/issues/112136


File: python.info,  Node: Construção<11>,  Prev: API C<12>,  Up: Python 3 13 0 beta 4

1.23.17.7 Construção
....................

   - gh-120371(1): Suporta WASI SDK 22 ignorando explicitamente funções
     que são apenas stubs em wasi-libc.

   - gh-121731(2): Corrige erro de construção mimalloc no GNU/Hurd

   - gh-121487(3): Corrige aviso de descontinuação para ATOMIC_VAR_INIT
     em mimalloc.

   - gh-121467(4): Corrige um bug do Makefile que impedia a instalação
     de arquivos de cabeçalho mimalloc.

   - gh-121103(5): Em sistemas POSIX, excluindo instalações do framework
     macOS, o diretório lib para a construção com threads livres agora
     inclui um sufixo “t” para evitar conflitos com uma instalação de
     construção padrão co-localizada.

   - gh-120831(6): A versão mínima padrão do iOS foi aumentada para
     13.0.

   - gh-113565(7): Melhora as verificações de dependência *note curses:
     2b. e *note curses.panel: 2d. em ‘configure’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/120371

   (2) https://github.com/python/cpython/issues/121731

   (3) https://github.com/python/cpython/issues/121487

   (4) https://github.com/python/cpython/issues/121467

   (5) https://github.com/python/cpython/issues/121103

   (6) https://github.com/python/cpython/issues/120831

   (7) https://github.com/python/cpython/issues/113565


File: python.info,  Node: Python 3 13 0 beta 3,  Next: Python 3 13 0 beta 2,  Prev: Python 3 13 0 beta 4,  Up: Changelog

1.23.18 Python 3.13.0 beta 3
----------------------------

'Data de lançamento: 2024-06-27'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<21>.
* Biblioteca: Biblioteca<25>.
* Núcleo e embutidos: Núcleo e embutidos<22>.
* Biblioteca: Biblioteca<26>.
* Construção: Construção<12>.
* API C: API C<13>.


File: python.info,  Node: Núcleo e embutidos<21>,  Next: Biblioteca<25>,  Up: Python 3 13 0 beta 3

1.23.18.1 Núcleo e embutidos
............................

   - gh-120838(1): *note Py_Finalize(): 13a0. e *note Py_FinalizeEx():
     d37. agora sempre são executados com o interpretador principal
     ativo.

   - gh-113433(2): Subinterpretadores agora são limpos automaticamente
     durante a finalização do tempo de execução.

   - gh-119462(3): Garante que invariantes de versionamento de tipo
     sejam mantidos: * Superclasses sempre têm seu número de versão
     atribuído antes das subclasses * A tag version é sempre zero se a
     tag não for válida.  * A tag version é sempre diferente de zero se
     a tag for válida.

   - gh-120437(4): Corrige problemas de otimização ‘_CHECK_STACK_SPACE’
     introduzidos em gh-118322(5).

   - gh-120722(6): Define corretamente a posição do bytecode em
     instruções de retorno dentro de lambdas.  Patch por Jelle Zijlstra.

   - gh-120367(7): Corrige bug onde o compilador cria um salto
     redundante durante a substituição de pseudo-op.  Só pode acontecer
     com um AST sintético que tenha uma tentativa na mesma linha que a
     instrução após o manipulador de exceção.

   - gh-113993(8): Strings internalizadas com *note sys.intern(): 131e.
     são novamente coletadas como lixo quando não são mais usadas,
     conforme a documentação.  Strings internadas com a função C *note
     PyUnicode_InternInPlace(): 8b6. ainda são imortais.  Os internos do
     mecanismo de internação de strings foram alterados.  Isso pode
     afetar o desempenho e as identidades dos objetos *note str: 44c.

   - gh-120384(9): Corrige uma falha de vetor fora dos limites em
     ‘list_ass_subscript’, que poderia ser invocada por meio de alguma
     entrada especificamente adaptada: incluindo modificação simultânea
     de um objeto de lista, onde um thread atribui uma fatia e outro a
     limpa.

   - gh-120367(10): Corrige falha no compilador em código com NOPs e
     JUMPs redundantes que aparecem depois que os manipuladores de
     exceção são movidos para o final do código.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/120838

   (2) https://github.com/python/cpython/issues/113433

   (3) https://github.com/python/cpython/issues/119462

   (4) https://github.com/python/cpython/issues/120437

   (5) https://github.com/python/cpython/issues/118322

   (6) https://github.com/python/cpython/issues/120722

   (7) https://github.com/python/cpython/issues/120367

   (8) https://github.com/python/cpython/issues/113993

   (9) https://github.com/python/cpython/issues/120384

   (10) https://github.com/python/cpython/issues/120367


File: python.info,  Node: Biblioteca<25>,  Next: Núcleo e embutidos<22>,  Prev: Núcleo e embutidos<21>,  Up: Python 3 13 0 beta 3

1.23.18.2 Biblioteca
....................

   - gh-120380(1): Corrige implementação Python de *note pickle.Pickler:
     a28. para objetos *note bytes: 1c2. e *note bytearray: 2ea. ao usar
     o protocolo versão 5.  Patch por Bénédikt Tran.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/120380


File: python.info,  Node: Núcleo e embutidos<22>,  Next: Biblioteca<26>,  Prev: Biblioteca<25>,  Up: Python 3 13 0 beta 3

1.23.18.3 Núcleo e embutidos
............................

   - gh-120400(1): Suporte ao perfilador de desempenho Linux para ver
     chamadas Python na arquitetura RISC-V.

   - gh-120221(2): Entrega sinais reais em Ctrl-C e Ctrl-Z no novo REPL.
     Patch por Pablo Galindo

   - gh-120346(3): Respeita *note PYTHON_BASIC_REPL: 16e. ao executar no
     modo de inspeção interativa (‘python -i’).  Patch de Pablo Galindo

   - gh-93691(4): Corrige os locais de origem das instruções geradas
     para o iterador de uma instrução for.

   - gh-120198(5): Corrige uma falha quando vários threads leem e
     escrevem na mesma ‘__class__’ de um objeto simultaneamente.

   - gh-120298(6): Corrige o uso após a liberação em
     ‘list_richcompare_impl’ que pode ser invocado por meio de alguma
     entrada maligna especificamente adaptada.

   - gh-119666(7): Corrige uma falha do compilador no caso em que duas
     compreensões no escopo da classe referenciam ‘__class__’.

   - gh-120225(8): Corrige a falha no compilador em bloco vazio no final
     do manipulador de exceção.

   - gh-119933(9): Melhora as mensagens *note SyntaxError: 18d. para
     expressões inválidas em um limite de parâmetros de tipo, uma tupla
     de restrição de parâmetro de tipo ou um parâmetro de tipo padrão.
     Patch por Bénédikt Tran.

   - bpo-24766(10): Corrige manipulação do argumento ‘doc’ para
     subclasses de ‘property’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/120400

   (2) https://github.com/python/cpython/issues/120221

   (3) https://github.com/python/cpython/issues/120346

   (4) https://github.com/python/cpython/issues/93691

   (5) https://github.com/python/cpython/issues/120198

   (6) https://github.com/python/cpython/issues/120298

   (7) https://github.com/python/cpython/issues/119666

   (8) https://github.com/python/cpython/issues/120225

   (9) https://github.com/python/cpython/issues/119933

   (10) https://bugs.python.org/issue?@action=redirect&bpo=24766


File: python.info,  Node: Biblioteca<26>,  Next: Construção<12>,  Prev: Núcleo e embutidos<22>,  Up: Python 3 13 0 beta 3

1.23.18.4 Biblioteca
....................

   - gh-121027(1): Adiciona um aviso futuro em
     ‘functools.partial.__get__()’.  Em versões futuras do Python, *note
     functools.partial: 414. será um descritor de método.

   - gh-121025(2): Melhora o *note __repr__(): 61c. de *note
     functools.partialmethod: a85.  Patch por Bénédikt Tran.

   - gh-121018(3): Corrige um problema em que
     ‘argparse.ArgumentParser.parses_args()’ não honrava
     ‘exit_on_error=False’ quando recebia argumentos não reconhecidos.
     Patch por Ben Hsing.

   - gh-119614(4): Corrige truncamento de strings com caracteres nulos
     incorporados em algumas operações internas em *note tkinter: f0.

   - gh-120910(5): Ao ler arquivos instalados de um egg, usa
     ‘relative_to(walk_up=True)’ para honrar arquivos instalados fora da
     raiz da instalação.

   - gh-120888(6): Atualiza pip wheel empacotado com ensurepip (pip
     24.1.1)

   - gh-101830(7): Acessar a representação de string do objeto *note
     tkinter: f0. não converte mais o objeto Tcl subjacente em uma
     string no Windows.

   - gh-120811(8): Corrige possível vazamento de memória em *note
     contextvars.Context.run(): 16f3.

   - gh-120769(9): Faz com que uma linha vazia em *note pdb: a5. repita
     o último comando mesmo quando o comando é de ‘cmdqueue’.

   - gh-120732(10): Corrige ‘name’ passando para o objeto *note
     unittest.mock.Mock: a54. ao usar *note
     unittest.mock.create_autospec(): 16f4.

   - gh-120683(11): Corrige um erro em *note logging.LogRecord: 101c,
     quando a parte inteira do registro de data e hora é arredondada
     para cima, enquanto o cálculo de milissegundos trunca, fazendo com
     que o registro de data e hora do log esteja errado em até 999 ms
     (afetou aproximadamente 1 em 8 milhões de registros de data e
     hora).

   - gh-120633(12): Move a barra de rolagem e remova os menus
     destacáveis no turtledemo.

   - gh-120541(13): Melhora o prompt no pager “less” quando *note
     help(): 8dd. é chamado com argumento não-string.

   - gh-120495(14): Corrige o tratamento de exceção incorreto no Tab
     Nanny.  Patch por Wulian233.

   - gh-120381(15): Corrige *note inspect.ismethoddescriptor(): 16d5.
     para verificar também a falta de *note __delete__(): 16f5.  Patch
     por Jan Kaliszewski.

   - gh-90425(16): O byte do SO em cabeçalhos gzip agora é sempre
     definido como 255 ao usar *note gzip.compress(): 63e.

   - gh-120343(17): Corrige o relatório de deslocamento de coluna para
     tokens que vêm depois de f-strings multilinhas no módulo *note
     tokenize: fb.

   - gh-119600(18): Corrige *note unittest.mock.patch(): ec1. para não
     ler atributos do alvo quando ‘new_callable’ estiver definido.
     Patch por Robert Collins.

   - gh-114053(19): Corrige bug de caso extremo em que *note
     typing.get_type_hints(): 6b1. produziria resultados incorretos se
     parâmetros de tipo em um escopo de classe fossem substituídos por
     atribuições em um escopo de classe e a semântica ‘from __future__
     import annotations’ estivesse habilitada.  Patch por Alex Waygood.

   - gh-114053(20): Corrige *note NameError: 43f. errôneo ao chamar
     *note inspect.get_annotations(): 816. com ‘eval_str=True`’ em uma
     classe que fazia uso de parâmetros do tipo PEP 695(21) em um módulo
     que tinha ‘from __future__ import annotations’ no topo do arquivo.
     Patch por Alex Waygood.

   - gh-120268(22): Proíbe passar ‘None’ para *note
     datetime.date.fromtimestamp(): bed. Python puro para obter
     consistência com a implementação da extensão C.

   - gh-120244(23): Corrige vazamento de memória em *note re.sub(): 2a3.
     quando a string de substituição contém referências anteriores.

   - gh-120211(24): Corrige *note tkinter.ttk: f9. com Tcl/Tk 9.0.

   - gh-71587(25): Corrige travamento na versão C de *note
     datetime.datetime.strptime(): 16f6. quando chamado novamente no
     interpretador reiniciado.

   - gh-120161(26): *note datetime: 30. não trava mais em certas
     situações complexas de ciclo de referência.

   - gh-119698(27): Corrige *note symtable.Class.get_methods(): 2e5. e
     documenta seu comportamento.  Patch por Bénédikt Tran.

   - gh-120121(28): Adiciona *note concurrent.futures.InvalidStateError:
     16f7. ao módulo ‘__all__’.

   - gh-119933(29): Adiciona a enumeração *note
     symtable.SymbolTableType: 16f8. para representar as possíveis
     saídas do método *note symtable.SymbolTable.get_type: 16f9.  Patch
     por Bénédikt Tran.

   - gh-120108(30): Corrige chamada de *note copy.deepcopy(): b84. em
     árvores *note ast: 8. que foram modificadas para ter referências a
     nós pais.  Patch por Jelle Zijlstra.

   - gh-112672(31): Suporte para construção de *note tkinter: f0. com
     Tcl 9.0.

   - gh-65454(32): *note unittest.mock.Mock.attach_mock(): 16fa. não
     dispara mais uma chamada para um ‘PropertyMock’ sendo anexado.

   - gh-81936(33): Os métodos ‘help()’ e ‘showtopic()’ agora respeitam
     um argumento 'output' configurado para ‘pydoc.Helper’ e não usam o
     pager em tais casos.  Patch por Enrico Tröger.

   - gh-119577(34): O *note DeprecationWarning: 1a5. emitido ao testar o
     valor verdade de um *note xml.etree.ElementTree.Element: 310. agora
     descreve o retorno incondicional de ‘True’ em uma versão futura em
     vez de gerar uma exceção no Python 3.14.

   - gh-118908(35): Limita os globais expostos de importações e
     definições internas na inicialização do novo REPL. Patch por Eugene
     Triguba e Pablo Galindo.

   - gh-119506(36): Corrige o método ‘io.TextIOWrapper.write()’ que
     quebra o buffer interno quando o método é chamado novamente durante
     a descarga do buffer interno.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/121027

   (2) https://github.com/python/cpython/issues/121025

   (3) https://github.com/python/cpython/issues/121018

   (4) https://github.com/python/cpython/issues/119614

   (5) https://github.com/python/cpython/issues/120910

   (6) https://github.com/python/cpython/issues/120888

   (7) https://github.com/python/cpython/issues/101830

   (8) https://github.com/python/cpython/issues/120811

   (9) https://github.com/python/cpython/issues/120769

   (10) https://github.com/python/cpython/issues/120732

   (11) https://github.com/python/cpython/issues/120683

   (12) https://github.com/python/cpython/issues/120633

   (13) https://github.com/python/cpython/issues/120541

   (14) https://github.com/python/cpython/issues/120495

   (15) https://github.com/python/cpython/issues/120381

   (16) https://github.com/python/cpython/issues/90425

   (17) https://github.com/python/cpython/issues/120343

   (18) https://github.com/python/cpython/issues/119600

   (19) https://github.com/python/cpython/issues/114053

   (20) https://github.com/python/cpython/issues/114053

   (21) https://peps.python.org/pep-0695/

   (22) https://github.com/python/cpython/issues/120268

   (23) https://github.com/python/cpython/issues/120244

   (24) https://github.com/python/cpython/issues/120211

   (25) https://github.com/python/cpython/issues/71587

   (26) https://github.com/python/cpython/issues/120161

   (27) https://github.com/python/cpython/issues/119698

   (28) https://github.com/python/cpython/issues/120121

   (29) https://github.com/python/cpython/issues/119933

   (30) https://github.com/python/cpython/issues/120108

   (31) https://github.com/python/cpython/issues/112672

   (32) https://github.com/python/cpython/issues/65454

   (33) https://github.com/python/cpython/issues/81936

   (34) https://github.com/python/cpython/issues/119577

   (35) https://github.com/python/cpython/issues/118908

   (36) https://github.com/python/cpython/issues/119506


File: python.info,  Node: Construção<12>,  Next: API C<13>,  Prev: Biblioteca<26>,  Up: Python 3 13 0 beta 3

1.23.18.5 Construção
....................

   - gh-120671(1): Corrige testes de configuração com falha devido a um
     espaço ausente ao anexar a CFLAGS.

   - gh-120602(2): Manipula corretamente instalações LLVM com
     ‘LLVM_VERSION_SUFFIX’ ao construir com ‘--enable-experimental-jit’.

   - gh-120326(3): No Windows, corrige o erro de construção quando as
     opções ‘--disable-gil’ e ‘--experimental-jit’ são combinadas.

   - gh-120291(4): Torna o script de shell ‘python-config’ compatível
     com shells além do bash.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/120671

   (2) https://github.com/python/cpython/issues/120602

   (3) https://github.com/python/cpython/issues/120326

   (4) https://github.com/python/cpython/issues/120291


File: python.info,  Node: API C<13>,  Prev: Construção<12>,  Up: Python 3 13 0 beta 3

1.23.18.6 API C
...............

   - gh-120642(1): Remova o tipo privado ‘_Py_CODEUNIT’ da API C
     pública.  O cabeçalho interno ‘pycore_code.h’ agora deve ser usado
     para obter esse tipo interno.  Patch por Victor Stinner.

   - gh-120858(2): *note PyDict_Next(): 16fd. não trava mais o
     dicionário na construção com threads livres.  O bloqueio precisa
     ser feito pelo chamador em todo o laço de iteração.

   - gh-120642(3): Remove as seguintes funções instáveis:

        * ‘PyUnstable_Replace_Executor()’

        * ‘PyUnstable_SetOptimizer()’

        * ‘PyUnstable_GetOptimizer()’

        * ‘PyUnstable_GetExecutor()’

        * ‘PyUnstable_Optimizer_NewCounter()’

        * ‘PyUnstable_Optimizer_NewUOpOptimizer()’

     Patch por Victor Stinner.

   - gh-119344(4): A API da seção crítica agora é pública como parte da
     API C não limitada.

   - gh-118789(5): Adiciona *note
     PyUnstable_Object_ClearWeakRefsNoCallbacks(): 16fe, que limpa
     weakrefs sem chamar seus callbacks.

   - gh-117511(6): Torna o *note PyMutex: 15b. público na API C não
     limitada.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/120642

   (2) https://github.com/python/cpython/issues/120858

   (3) https://github.com/python/cpython/issues/120642

   (4) https://github.com/python/cpython/issues/119344

   (5) https://github.com/python/cpython/issues/118789

   (6) https://github.com/python/cpython/issues/117511


File: python.info,  Node: Python 3 13 0 beta 2,  Next: Python 3 13 0 beta 1,  Prev: Python 3 13 0 beta 3,  Up: Changelog

1.23.19 Python 3.13.0 beta 2
----------------------------

'Data de lançamento: 2024-06-05'

* Menu:

* Segurança: Segurança<12>.
* Núcleo e embutidos: Núcleo e embutidos<23>.
* Biblioteca: Biblioteca<27>.
* Testes: Testes<14>.
* Construção: Construção<13>.
* Windows: Windows<11>.
* API C: API C<14>.


File: python.info,  Node: Segurança<12>,  Next: Núcleo e embutidos<23>,  Up: Python 3 13 0 beta 2

1.23.19.1 Segurança
...................

   - gh-118773(1): Corrige a criação de ACLs em *note os.mkdir(): 21d.
     no Windows para funcionar corretamente em máquinas que não falam
     inglês.

   - gh-118486(2): *note os.mkdir(): 21d. no Windows agora aceita o
     'modo' de ‘0o700’ para restringir o novo diretório ao usuário
     atual.  Isso corrige CVE 2024-4030(3) afetando *note
     tempfile.mkdtemp(): 21f. em cenários onde o diretório temporário
     base é mais permissivo do que o padrão.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118773

   (2) https://github.com/python/cpython/issues/118486

   (3) https://www.cve.org/CVERecord?id=CVE-2024-4030


File: python.info,  Node: Núcleo e embutidos<23>,  Next: Biblioteca<27>,  Prev: Segurança<12>,  Up: Python 3 13 0 beta 2

1.23.19.2 Núcleo e embutidos
............................

   - gh-119724(1): Revertidas as melhorias para mensagens de erro para
     instruções ‘elif’/‘else’ que não correspondem a nenhuma instrução
     válida, o que torna difícil localizar os erros de sintaxe dentro
     desses blocos ‘elif’/‘else’.

   - gh-119842(2): Honra *note PyOS_InputHook(): 585. no novo REPL.
     Patch por Pablo Galindo

   - gh-119821(3): Corrige a execução de *note escopos de anotação: 188.
     dentro de classes quando ‘globals’ estiver definido como um
     não-dict.  Patch por Jelle Zijlstra.

   - gh-119548(4): Adiciona um comando ‘clear’ ao REPL. Patch por Pablo
     Galindo

   - gh-111999(5): Corrige a assinatura de *note str.format_map(): e01.

   - gh-119560(6): Uma asserção inválida no beta 1 foi removida.  A
     asserção falharia se ‘PyState_FindModule()’ fosse usada na função
     init de um módulo de extensão antes que o módulo def tivesse sido
     inicializado.

   - gh-119369(7): Corrige um impasse (deadlock) durante a exclusão de
     thread em construção com threads livres, que poderia ocorrer quando
     a GIL foi habilitada em tempo de execução.

   - gh-119525(8): Corrige o impasse envolvendo o cache
     ‘_PyType_Lookup()’ na construção com threads livres quando a GIL é
     habilitada dinamicamente em tempo de execução.

   - gh-119311(9): Corrige bug onde nomes são inesperadamente cortados
     nas bases de classes genéricas.

   - gh-119395(10): Corrige bug onde nomes aparecendo após uma classe
     genérica são cortados como se estivessem na classe genérica.

   - gh-119213(11): Módulos não embutidos construídos com a clínica de
     argumentos estavam travando se usados em um subinterpretador antes
     do interpretador principal.  Os objetos que estavam causando o
     problema por vazamento entre os interpretadores descuidadamente
     foram corrigidos.

   - gh-119011(12): Corrige ‘type.__type_params__’ para retornar uma
     tupla vazia em vez de um descritor.

   - gh-118692(13): Evita criar instâncias *note StopIteration: c15.
     desnecessárias para monitoramento.

   - gh-119049(14): Corrige a exibição da linha de origem para avisos
     criados pela API C se o módulo *note warnings: 112. ainda não tiver
     sido importado.

   - gh-118844(15): Corrige falhas de construção ao configurar com
     ‘--disable-gil’ e ‘--enable-experimental-jit’.

   - gh-118921(16): Adiciona o método ‘copy()’ para ‘FrameLocalsProxy’
     que retorna um ‘dict’ para variáveis locais.

   - gh-117657(17): Corrige corridas de dados no campo que armazena um
     ponteiro para a thread principal do interpretador que ocorrem em
     construções com threads livres.

   - gh-118561(18): Corrige condição de corrida em construções com
     threads livres onde ‘list.extend()’ poderia expor memória não
     inicializada para leitores simultâneos.

   - gh-117195(19): Evita falha de asserção para construções de
     depuração ao chamar ‘object.__sizeof__(1)’

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/119724

   (2) https://github.com/python/cpython/issues/119842

   (3) https://github.com/python/cpython/issues/119821

   (4) https://github.com/python/cpython/issues/119548

   (5) https://github.com/python/cpython/issues/111999

   (6) https://github.com/python/cpython/issues/119560

   (7) https://github.com/python/cpython/issues/119369

   (8) https://github.com/python/cpython/issues/119525

   (9) https://github.com/python/cpython/issues/119311

   (10) https://github.com/python/cpython/issues/119395

   (11) https://github.com/python/cpython/issues/119213

   (12) https://github.com/python/cpython/issues/119011

   (13) https://github.com/python/cpython/issues/118692

   (14) https://github.com/python/cpython/issues/119049

   (15) https://github.com/python/cpython/issues/118844

   (16) https://github.com/python/cpython/issues/118921

   (17) https://github.com/python/cpython/issues/117657

   (18) https://github.com/python/cpython/issues/118561

   (19) https://github.com/python/cpython/issues/117195


File: python.info,  Node: Biblioteca<27>,  Next: Testes<14>,  Prev: Núcleo e embutidos<23>,  Up: Python 3 13 0 beta 2

1.23.19.3 Biblioteca
....................

   - gh-119819(1): Corrige regressão para permitir configuração de
     registro com tipos de fila de multiprocessamento.

   - gh-117142(2): O módulo *note ctypes: 2a. agora pode ser importado
     em todos os subinterpretadores, incluindo aqueles que têm sua
     própria GIL.

   - gh-118835(3): Corrige falha do _pyrepl ao usar prompt personalizado
     com códigos de escape ANSI.

   - gh-117398(4): O módulo ‘_datetime’ (implementação C para *note
     datetime: 30.) agora oferece suporte a importação em múltiplos
     interpretadores.

   - gh-89727(5): Corrige problema com *note shutil.rmtree(): 301. onde
     uma *note RecursionError: d90. é levantada em árvores de diretório
     profundas.

   - gh-89727(6): Corrige parcialmente o problema com *note
     shutil.rmtree(): 301. onde uma *note RecursionError: d90. é
     levantada em árvores de diretório profundas.  Um erro de recursão
     não é mais levantado quando ‘rmtree.avoids_symlink_attacks’ é
     falso.

   - gh-119118(7): Corrige regressão de desempenho no módulo *note
     tokenize: fb. armazenando em cache o atributo de token ‘line’ e
     calculando o deslocamento da coluna de forma mais eficiente.

   - gh-89727(8): Corrige problema com *note os.fwalk(): b71. onde uma
     *note RecursionError: d90. era levantada em árvores de diretório
     profundas ajustando a implementação para ser iterativa em vez de
     recursiva.

   - gh-119588(9): ‘zipfile.Path.is_symlink’ agora avalia se o caminho
     fornecido é um link simbólico.

   - gh-119555(10): Captura *note SyntaxError: 18d. de *note compile():
     192. no método runsource() do InteractiveColoredConsole.  Patch por
     Sergey B Kirpichev.

   - gh-113892(11): Agora, o método ‘sock_connect’ de *note
     asyncio.ProactorEventLoop: 609. levanta um *note ValueError: 202.
     se o soquete fornecido não estiver no modo não bloqueante, bem como
     em outras implementações de laço.

   - gh-119443(12): O REPL interativo não é mais executado com ‘from
     __future__ import annotations’ habilitado.  Patch por Jelle
     Zijlstra.

   - gh-117398(13): Os objetos na C-API datetime agora são alocados
     estaticamente, o que significa melhor segurança de memória,
     especialmente quando o módulo é recarregado.  Isso deve ser
     transparente para os usuários.

   - gh-118894(14): *note asyncio: a. O REPL agora tem os mesmos
     recursos do PyREPL.

   - gh-118911(15): No PyREPL, a lógica do ‘maybe-accept’ foi atualizada
     para que, se o usuário pressionar ‘Enter’ duas vezes, ele possa
     encerrar o bloco mesmo se houver um espaço em branco à direita.
     Além disso, agora, quando o usuário pressiona a seta para cima, o
     cursor fica na última linha da função.  Isso corresponde ao
     comportamento do IPython.  Patch por Aya Elsayed.

   - gh-111201(16): Remove dependência para *note readline: ba. do novo
     REPL do Python.

   - gh-119174(17): Corrige DPI alto que causa janelas borradas no
     turtledemo (exemplos do turtle-graphics) Patch por Wulian233 e
     Terry Jan Reedy

   - gh-119121(18): Corrige um NameError acontecendo em
     ‘asyncio.staggered.staggered_race’.  Esta função agora está
     testada.

   - gh-119113(19): Corrige problema em que *note
     pathlib.PurePath.with_suffix(): 1703. não levantava *note
     TypeError: 2c3. quando dado ‘None’ como sufixo.

   - gh-118643(20): Corrige um AttributeError no módulo *note email: 3b.
     ao redobrar uma longa lista de endereços.  Também corrige mais
     casos de codificação incorreta do separador de endereços na lista
     de endereços.

   - gh-58933(21): Faz *note pdb: a5. retornar ao quadro do chamador
     corretamente quando ‘f_trace’ do quadro do chamador não estiver
     definido

   - gh-118895(22): Define atributos em *note typing.NoDefault: 262.
     agora levanta *note AttributeError: 34b. em vez de *note TypeError:
     2c3.

   - gh-118868(23): Corrigido o problema em que kwargs não eram mais
     passados para o manipulador de registro QueueHandler

   - gh-118851(24): Argumentos ‘ctx’ para os construtores de classes de
     nó *note ast: 8. agora são padronizados para *note ast.Load(): 1a4.
     Patch por Jelle Zijlstra.

   - gh-118760(25): Restaura o valor padrão de ‘tkiter.wantobjects’ para
     ‘1’.

   - gh-118760(26): Corrige erros ao chamar ligações Tkinter no Windows.

   - gh-118507(27): Corrige *note os.path.isfile(): a1b. no Windows para
     pipes.  Acelera *note os.path.isjunction(): 4a3. e *note
     os.path.lexists(): a19. no Windows com uma implementação nativa.

   - gh-118772(28): Permite que instâncias *note typing.TypeVar: 15d.
     sem um padrão sigam instâncias sem um padrão em alguns casos.
     Patch por Jelle Zijlstra.

   - gh-110863(29): *note os.path.realpath(): 225. agora suprime
     qualquer *note OSError: 417. de *note os.readlink(): 926. quando o
     modo 'strict' está desabilitado (o padrão).

   - gh-118263(30): Acelera *note os.path.splitroot(): 4a4. e *note
     os.path.normpath(): 135e. com uma chamada C direta.

   - gh-118033(31): Corrige *note dataclasses.dataclass(): 1cb. não
     criando um slot ‘__weakref__’ ao subclassificar *note
     typing.Generic: 15d7.

   - gh-106531(32): Em *note importlib.resources: 7b, sincronizar com
     importlib_resources 6.3.2(33), incluindo: ‘MultiplexedPath’ agora
     espera caminhos ‘Traversable’, descontinuando argumentos de string
     para ‘MultiplexedPath’; Suporte habilitado para recursos em pacotes
     de espaço de nomes em arquivos zip; Corrigido ‘NotADirectoryError’
     ao chamar arquivos em um subdiretório de um pacote de espaço de
     nomes.

   - gh-113978(34): Ignora avisos sobre conclusão de texto dentro do
     REPL.

   - gh-103956(35): Corrige a falta de caracteres de nova linha na saída
     do módulo *note trace: fd. quando o rastreamento de linha está
     habilitado, mas a linha de código-fonte para o quadro atual não
     está disponível.

   - gh-92081(36): Corrige espaços ausentes em cabeçalhos de e-mail
     quando os espaços são misturados com caracteres codificados de 8
     bits.

   - gh-103194(37): Prepara o Tkinter para alterações na API C no Tcl
     8.7/9.0 para evitar que ‘_tkinter.Tcl_Obj’ seja retornado
     inesperadamente em vez de *note bool: 468, *note str: 44c, *note
     bytearray: 2ea. ou *note int: 257.

   - gh-87106(38): Corrigida a manipulação em *note
     inspect.Signature.bind(): 1648. de argumentos nomeados com o mesmo
     nome que argumentos somente-posicionais quando um argumento nomeado
     variádico (por exemplo, ‘**kwargs’) estiver presente.

   - bpo-45767(39): Corrige conversão de inteiros em *note os.major():
     1704, *note os.minor(): 1705. e *note os.makedev(): 1706.  Suporte
     a números de dispositivos maiores que ‘2**63-1’.  Suporte a número
     de dispositivos inexistente (‘NODEV’).

   - gh-67693(40): Corrige *note urllib.parse.urlunparse(): 16c1. e
     *note urllib.parse.urlunsplit(): 16c0. para URIs com caminho
     começando com várias barras e sem autoridade.  Baseado no patch de
     Ashwin Ramaswami.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/119819

   (2) https://github.com/python/cpython/issues/117142

   (3) https://github.com/python/cpython/issues/118835

   (4) https://github.com/python/cpython/issues/117398

   (5) https://github.com/python/cpython/issues/89727

   (6) https://github.com/python/cpython/issues/89727

   (7) https://github.com/python/cpython/issues/119118

   (8) https://github.com/python/cpython/issues/89727

   (9) https://github.com/python/cpython/issues/119588

   (10) https://github.com/python/cpython/issues/119555

   (11) https://github.com/python/cpython/issues/113892

   (12) https://github.com/python/cpython/issues/119443

   (13) https://github.com/python/cpython/issues/117398

   (14) https://github.com/python/cpython/issues/118894

   (15) https://github.com/python/cpython/issues/118911

   (16) https://github.com/python/cpython/issues/111201

   (17) https://github.com/python/cpython/issues/119174

   (18) https://github.com/python/cpython/issues/119121

   (19) https://github.com/python/cpython/issues/119113

   (20) https://github.com/python/cpython/issues/118643

   (21) https://github.com/python/cpython/issues/58933

   (22) https://github.com/python/cpython/issues/118895

   (23) https://github.com/python/cpython/issues/118868

   (24) https://github.com/python/cpython/issues/118851

   (25) https://github.com/python/cpython/issues/118760

   (26) https://github.com/python/cpython/issues/118760

   (27) https://github.com/python/cpython/issues/118507

   (28) https://github.com/python/cpython/issues/118772

   (29) https://github.com/python/cpython/issues/110863

   (30) https://github.com/python/cpython/issues/118263

   (31) https://github.com/python/cpython/issues/118033

   (32) https://github.com/python/cpython/issues/106531

   (33) 
https://importlib-resources.readthedocs.io/en/latest/history.html#v6-3-2

   (34) https://github.com/python/cpython/issues/113978

   (35) https://github.com/python/cpython/issues/103956

   (36) https://github.com/python/cpython/issues/92081

   (37) https://github.com/python/cpython/issues/103194

   (38) https://github.com/python/cpython/issues/87106

   (39) https://bugs.python.org/issue?@action=redirect&bpo=45767

   (40) https://github.com/python/cpython/issues/67693


File: python.info,  Node: Testes<14>,  Next: Construção<13>,  Prev: Biblioteca<27>,  Up: Python 3 13 0 beta 2

1.23.19.4 Testes
................

   - gh-119050(1): Executor de teste regrtest: Adiciona suporte XML ao
     verificador de reflexos (opção -R). Patch de Victor Stinner.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/119050


File: python.info,  Node: Construção<13>,  Next: Windows<11>,  Prev: Testes<14>,  Up: Python 3 13 0 beta 2

1.23.19.5 Construção
....................

   - gh-119729(1): Em sistemas POSIX, os nomes de arquivo pkg-config
     (‘.pc’) agora incluem os sinalizadores ABI, que podem incluir debug
     ("d") e free-threaded ("t").  Por exemplo: * ‘python-3.14.pc’
     (padrão, construção não-debug) * ‘python-3.14d.pc’ (padrão,
     construção debug) * ‘python-3.14t.pc’ (construção com threads
     livres)

   - gh-115119(2): Retorna ao libmpdec empacotado se uma versão do
     sistema não puder ser encontrada.

   - gh-119132(3): Atualiza *note sys.version: 178. para identificar se
     a construção é a construção padrão ou a construção com threads
     livres.  Patch por Donghee Na.

   - gh-118836(4): Corrige um ‘AssertionError’ ao construir com
     ‘--enable-experimental-jit’ e o compilador emite uma seção
     ‘SHT_NOTE’.

   - gh-118943(5): Corrige uma possível condição de corrida que afeta
     construções paralelas configuradas com ‘--enable-experimental-jit’,
     nas quais erros de construção podem ser causados por um arquivo de
     cabeçalho gerado de forma incompleta.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/119729

   (2) https://github.com/python/cpython/issues/115119

   (3) https://github.com/python/cpython/issues/119132

   (4) https://github.com/python/cpython/issues/118836

   (5) https://github.com/python/cpython/issues/118943


File: python.info,  Node: Windows<11>,  Next: API C<14>,  Prev: Construção<13>,  Up: Python 3 13 0 beta 2

1.23.19.6 Windows
.................

   - gh-119679(1): Garante que bibliotecas de importação corretas sejam
     incluídas nas instalações do Windows.

   - gh-119690(2): Adiciona suporte a Unicode e corrige eventos de
     auditoria para ‘_winapi.CreateNamedPipe’.

   - gh-111201(3): Adiciona suporte para o novo pyrepl no Windows

   - gh-119070(4): Corrige o tratamento de ‘py.exe’ de shebangs como
     ‘/usr/bin/env python3.12’, que eram interpretados anteriormente
     como ‘python3.exe’ em vez de ‘python3.12.exe’.

   - gh-117505(5): Corrige um problema com o instalador do Windows não
     executando ensurepip em um ambiente totalmente isolado.  Isso pode
     causar interações inesperadas com os pacotes do site do usuário.

   - gh-118209(6): Evita travamentos em *note mmap: 90. no Windows
     quando a memória mapeada estiver inacessível devido a erros do
     sistema de arquivos ou violações de acesso.

   - gh-116145(7): Tcl/Tk empacotado atualizado para 8.6.14.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/119679

   (2) https://github.com/python/cpython/issues/119690

   (3) https://github.com/python/cpython/issues/111201

   (4) https://github.com/python/cpython/issues/119070

   (5) https://github.com/python/cpython/issues/117505

   (6) https://github.com/python/cpython/issues/118209

   (7) https://github.com/python/cpython/issues/116145


File: python.info,  Node: API C<14>,  Prev: Windows<11>,  Up: Python 3 13 0 beta 2

1.23.19.7 API C
...............

   - gh-119585(1): Corrige travamento quando um estado de thread que foi
     criado por *note PyGILState_Ensure(): 3ab. chama um destruidor que
     durante *note PyThreadState_Clear(): 170b. chama de volta para
     *note PyGILState_Ensure(): 3ab. e *note PyGILState_Release(): 3ac.
     Isso pode ocorrer quando na construção com threads livres ou ao
     usar variáveis de thread local cujos destruidores chamam *note
     PyGILState_Ensure(): 3ab.

   - gh-119336(2): Restaura a função ‘_PyLong_NumBits()’ removida.  Ela
     é usada pelo projeto pywin32.  Patch por Ethan Smith

   - gh-119247(3): Adicionadas as macros
     ‘Py_BEGIN_CRITICAL_SECTION_SEQUENCE_FAST’ e
     ‘Py_END_CRITICAL_SECTION_SEQUENCE_FAST’ para tornar possível usar
     as APIs PySequence_Fast com segurança quando de threads livres, e
     atualizar str.join para funcionar sem que a GIL as use.

   - gh-111389(4): Adicionar constante *note PyHASH_MULTIPLIER: 170c.:
     multiplicador primo usado em string e vários outros hashes.  Patch
     por Victor Stinner.

   - gh-116984(5): Faz mimalloc incluir relativo ao arquivo atual para
     evitar que incorporadores ou extensões precisem incluir
     ‘Internal/mimalloc’ se eles já estiverem incluindo cabeçalhos
     CPython internos.

   - gh-118789(6): Restaura ‘_PyWeakref_ClearRef’ que foi removido
     anteriormente no Python 3.13 alpha 1.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/119585

   (2) https://github.com/python/cpython/issues/119336

   (3) https://github.com/python/cpython/issues/119247

   (4) https://github.com/python/cpython/issues/111389

   (5) https://github.com/python/cpython/issues/116984

   (6) https://github.com/python/cpython/issues/118789


File: python.info,  Node: Python 3 13 0 beta 1,  Next: Python 3 13 0 alpha 6,  Prev: Python 3 13 0 beta 2,  Up: Changelog

1.23.20 Python 3.13.0 beta 1
----------------------------

'Data de lançamento: 2024-05-08'

* Menu:

* Segurança: Segurança<13>.
* Núcleo e embutidos: Núcleo e embutidos<24>.
* Biblioteca: Biblioteca<28>.
* Núcleo e embutidos: Núcleo e embutidos<25>.
* Biblioteca: Biblioteca<29>.
* Documentação: Documentação<11>.
* Construção: Construção<14>.
* Windows: Windows<12>.
* macOS: macOS<8>.
* IDLE: IDLE<12>.
* API C: API C<15>.


File: python.info,  Node: Segurança<13>,  Next: Núcleo e embutidos<24>,  Up: Python 3 13 0 beta 1

1.23.20.1 Segurança
...................

   - gh-116741(1): Atualiza libexpat empacotado para 2.6.2

   - gh-117233(2): Detecta suporte a BLAKE2, SHA3, Shake e SHA512
     truncado na biblioteca libcrypto do OpenSSL no momento da
     construção.  Isso permite que *note hashlib: 68. seja usado com
     bibliotecas que não suportam todos os algoritmos que o OpenSSL
     upstream suporta.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/116741

   (2) https://github.com/python/cpython/issues/117233


File: python.info,  Node: Núcleo e embutidos<24>,  Next: Biblioteca<28>,  Prev: Segurança<13>,  Up: Python 3 13 0 beta 1

1.23.20.2 Núcleo e embutidos
............................

   - gh-118414(1): Adiciona opcodes instrumentados à asserção
     YIELD_VALUE para rastrear casos.

   - gh-117953(2): Quando um módulo embutido ou de extensão é importado
     pela primeira vez, enquanto um subinterpretador está ativo, a
     função init do módulo agora é executada pelo interpretador
     principal antes que a importação continue no subinterpretador.
     Consequentemente, os módulos init de fase única agora falham em um
     subinterpretador isolado sem a função init em execução sob esse
     interpretador, enquanto antes ele seria executado sob o
     subinterpretador 'antes' de falhar, potencialmente deixando para
     trás o estado global e os retornos de chamada e, de outra forma,
     deixando o módulo em um estado inconsistente.

   - gh-117549(3): Não usa a sintaxe do inicializador designado em
     funções inline em cabeçalhos internos.  Eles causam problemas para
     usuários de C++ ou MSVC que ainda não estão usando o padrão C++
     mais recente (C++20).  Enquanto interno, pycore_backoff.h, é
     incluído (indiretamente, via pycore_code.h) por algum software de
     terceiros importante que faz isso para velocidade.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118414

   (2) https://github.com/python/cpython/issues/117953

   (3) https://github.com/python/cpython/issues/117549


File: python.info,  Node: Biblioteca<28>,  Next: Núcleo e embutidos<25>,  Prev: Núcleo e embutidos<24>,  Up: Python 3 13 0 beta 1

1.23.20.3 Biblioteca
....................

   - gh-95382(1): Melhora o desempenho de *note json.dumps(): d68. e
     *note json.dump(): d67. ao usar o argumento 'indent'.  Dependendo
     dos dados, a codificação usando *note json.dumps(): d68. com
     'indent' pode ser de 2 a 3 vezes mais rápida.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/95382


File: python.info,  Node: Núcleo e embutidos<25>,  Next: Biblioteca<29>,  Prev: Biblioteca<28>,  Up: Python 3 13 0 beta 1

1.23.20.4 Núcleo e embutidos
............................

   - gh-116322(1): Em construções com ‘--disable-gil’, a GIL será
     habilitada durante o carregamento de módulos de extensão C. Se o
     módulo indicar que suporta execução sem a GIL, a GIL será
     desabilitada quando o carregamento for concluído.  Caso contrário,
     a GIL permanecerá habilitada pelo restante da vida útil do
     interpretador.  Esse comportamento não se aplica se a GIL tiver
     sido explicitamente habilitada ou desabilitada com ‘PYTHON_GIL’ ou
     ‘-Xgil’.

   - gh-118513(2): Corrige *note UnboundLocalError: 157f. incorreta
     quando duas compreensões na mesma função referenciam o mesmo nome
     e, em uma compreensão, o nome é vinculado, enquanto na outra é um
     global implícito.

   - gh-118518(3): Permite que o suporte Linux perf funcione sem
     ponteiros de quadro usando o suporte JIT avançado do perf.  O
     recurso é ativado ao usar a variável de ambiente
     ‘PYTHON_PERF_JIT_SUPPORT’ ou ao executar Python com ‘-Xperf_jit’.
     Patch por Pablo Galindo.

   - gh-117514(4): Adiciona a função ‘sys._is_gil_enabled()’ que retorna
     se a GIL está habilitada no momento.  Na construção padrão, ela
     sempre retorna ‘True’ porque a GIL está sempre habilitada.  Na
     construção com threads livres, ela pode retornar ‘True’ ou ‘False’.

   - gh-118164(5): Interrompe um laço entre a implementação Python do
     módulo *note decimal: 36. e o código Python para conversão de
     inteiro para string.  Também otimize a conversão de inteiro para
     string para valores no intervalo de 9_000 a 135_000 dígitos
     decimais.

   - gh-118473(6): Corrige *note sys.set_asyncgen_hooks(): 1712. para
     não ser parcialmente definido ao levantar *note TypeError: 2c3.

   - gh-118465(7): O compilador preenche o novo campo ‘__firstlineno__’
     em uma classe com o número da linha da primeira linha da definição
     da classe.

   - gh-118492(8): Corrige um problema em que o cache de tipos pode
     expor um atributo acessado anteriormente quando um finalizador é
     executado.

   - gh-117714(9): atualiza ‘async_generator.athrow().close()’ e
     ‘async_generator.asend().close()’ para fechar sua seção do gerador
     assíncrono subjacente

   - gh-111201(10): O interpretador *note interativo: 169. agora é
     implementado em Python, o que permite uma série de novos recursos
     como cores, entrada multilinha, visualização de histórico e modo de
     colagem.  Contribuído por Pablo Galindo, Łukasz Langa e Lysandros
     Nikolaou com base no código do projeto PyPy.

   - gh-74929(11): Implementa PEP 667: convertido *note
     FrameType.f_locals: 182. e *note PyFrame_GetLocals(): 41f. para
     retornar um objeto proxy de gravação quando o quadro se refere a
     uma função ou compreensão.

   - gh-116767(12): Corrige travamento no compilador em ‘async with’ que
     tem muitos gerenciadores de contexto.

   - gh-118335(13): Altera como usar o interpretador de nível 2.  Em vez
     de executar Python com ‘-X uops’ ou definir a variável de ambiente
     ‘PYTHON_UOPS=1’, essa escolha agora é feita em tempo de construção
     configurando com ‘--enable-experimental-jit=interpreter’.

     'Cuidado!'  Isso altera a variável de ambiente para habilitar ou
     desabilitar micro-ops para ‘PYTHON_JIT’.  O antigo ‘PYTHON_UOPS’
     não é mais usado.

   - gh-118306(14): Atualiza a compilação JIT para usar LLVM 18

   - gh-118160(15): *note Escopos de anotação: 188. dentro de classes
     agora podem conter compreensões.  No entanto, tais compreensões não
     são incorporadas em seu escopo pai em tempo de execução.  Patch por
     Jelle Zijlstra.

   - gh-118272(16): Corrige bug onde ‘generator.close’ não libera os
     locais do quadro do gerador.

   - gh-118216(17): Não considera importações *note __future__: 0. com
     pontos antes do nome do módulo.

   - gh-118074(18): Garante que os objetos Executor no array COLD_EXITS
     não sejam considerados GC-able (o que acessaria bytes fora do
     objeto).

   - gh-107674(19): Usa carregamento preguiçoso do número da linha do
     quadro para melhorar o desempenho do rastreamento

   - gh-118082(20): Melhora a mensagem *note SyntaxError: 18d. para
     importações sem nomes, como nos casos ‘from x import’ e ‘import’.
     Agora, ele indica aos usuários que *note import: 5e2. espera pelo
     menos um nome depois dele.

   - gh-118090(21): Melhora a mensagem *note SyntaxError: 18d. para
     colchetes de parâmetros de tipo vazios.

   - gh-117958(22): Adicionado um método ‘get_jit_code()’ para acessar o
     código de máquina compilado JIT do UOp Executor quando o JIT
     experimental estiver habilitado.  Patch por Anthony Shaw.

   - gh-117901(23): Adiciona uma opção para o codegen do compilador para
     salvar sequências de instruções aninhadas para introspecção.

   - gh-116622(24): Redireciona stdout e stderr para o log do sistema
     quando incorporado em um aplicativo Android.

   - gh-109118(25): *note o escopo de anotação: 188. dentro de escopos
     de classe agora pode conter lambdas.

   - gh-117894(26): Impede que objetos ‘agen.aclose()’ sejam
     reutilizados após ‘.throw()’.

   - gh-117881(27): impede acesso simultâneo a um gerador assíncrono via
     athrow().throw() ou asend().throw()

   - gh-117536(28): Corrige um *note RuntimeWarning: 1bd. ao chamar
     ‘agen.aclose().throw(Exception)’.

   - gh-117755(29): Corrige alocador mimalloc para alocação de memória
     enorme (em torno de 8.589.934.592 GiB) no s390x.  Patch por Victor
     Stinner.

   - gh-117750(30): Corrige problema em que o dict de um objeto ficava
     fora de sincronia com os valores internos do objeto ao ser limpo.
     ‘obj.__dict__.clear()’ agora limpa os valores internos, mas deixa o
     dict anexado ao objeto.

   - gh-117431(31): Melhora o desempenho dos seguintes métodos *note
     bytes: 1c2. e *note bytearray: 2ea. adaptando-os à convenção de
     chamada *note METH_FASTCALL: 1713.:

        * ‘count()’

        * ‘find()’

        * ‘index()’

        * ‘rfind()’

        * ‘rindex()’

   - gh-117709(32): Acelera as chamadas para *note str(): 44c. com
     argumento somente posicional, usando a convenção de chamada PEP
     590(33) ‘vectorcall’.  Patch por Erlend Aasland.

   - gh-117680(34): Dá a ‘_PyInstructionSequence’ uma interface Python e
     use-a em testes.

   - gh-115776(35): Objetos alocados estaticamente são, por definição,
     imortais, portanto, devem ser marcados como tal, independentemente
     de estarem em módulos de extensão ou não.

   - gh-117385(36): Remove eventos ‘PY_MONITORING_EVENT_BRANCH’ e
     ‘PY_MONITORING_EVENT_EXCEPTION_HANDLED’ não manipulados de *note
     sys.settrace(): 1547.

   - gh-116322(37): Módulos de extensão podem indicar ao tempo de
     execução que podem ser executados sem a GIL. Módulos init
     multifásicos fazem isso chamando o fornecimento de
     ‘Py_MOD_GIL_NOT_USED’ para o slot ‘Py_mod_gil’, enquanto módulos
     init monofásicos chamam ‘PyUnstable_Module_SetGIL(mod,
     Py_MOD_GIL_NOT_USED)’ de sua função init.

   - gh-116129(38): Implementa PEP 696(39), adicionando suporte para
     padrões em parâmetros de tipo.  Patch por Jelle Zijlstra.

   - gh-93502(40): Adiciona duas novas funções à API C, *note
     PyRefTracer_SetTracer(): 36c. e *note PyRefTracer_GetTracer(): 36d,
     que permite rastrear a criação e destruição de objetos da mesma
     forma que o módulo *note tracemalloc: ff. faz.  Patch por Pablo
     Galindo

   - gh-107674(41): Melhora significativamente o desempenho de *note
     sys.settrace(): 1547.

   - gh-95754(42): Melhora a mensagem de erro quando um script que faz
     shadowing de um módulo da biblioteca padrão faz com que *note
     AttributeError: 34b. seja levantada.  Da mesma forma, melhorar a
     mensagem de erro quando um script que faz shadowing de um módulo de
     terceiros tenta acessar um atributo desse módulo de terceiros
     enquanto ainda está inicializando.

   - gh-99180(43): Elimina indicadores de traceback não informativos em
     instruções ‘return’ e ‘assignment’ simples.  Patch por Pablo
     Galindo.

   - gh-105879(44): Permite que os argumentos 'globals' e 'locals' para
     *note exec(): 17f. e *note eval(): 180. sejam passados como
     nomeados.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/116322

   (2) https://github.com/python/cpython/issues/118513

   (3) https://github.com/python/cpython/issues/118518

   (4) https://github.com/python/cpython/issues/117514

   (5) https://github.com/python/cpython/issues/118164

   (6) https://github.com/python/cpython/issues/118473

   (7) https://github.com/python/cpython/issues/118465

   (8) https://github.com/python/cpython/issues/118492

   (9) https://github.com/python/cpython/issues/117714

   (10) https://github.com/python/cpython/issues/111201

   (11) https://github.com/python/cpython/issues/74929

   (12) https://github.com/python/cpython/issues/116767

   (13) https://github.com/python/cpython/issues/118335

   (14) https://github.com/python/cpython/issues/118306

   (15) https://github.com/python/cpython/issues/118160

   (16) https://github.com/python/cpython/issues/118272

   (17) https://github.com/python/cpython/issues/118216

   (18) https://github.com/python/cpython/issues/118074

   (19) https://github.com/python/cpython/issues/107674

   (20) https://github.com/python/cpython/issues/118082

   (21) https://github.com/python/cpython/issues/118090

   (22) https://github.com/python/cpython/issues/117958

   (23) https://github.com/python/cpython/issues/117901

   (24) https://github.com/python/cpython/issues/116622

   (25) https://github.com/python/cpython/issues/109118

   (26) https://github.com/python/cpython/issues/117894

   (27) https://github.com/python/cpython/issues/117881

   (28) https://github.com/python/cpython/issues/117536

   (29) https://github.com/python/cpython/issues/117755

   (30) https://github.com/python/cpython/issues/117750

   (31) https://github.com/python/cpython/issues/117431

   (32) https://github.com/python/cpython/issues/117709

   (33) https://peps.python.org/pep-0590/

   (34) https://github.com/python/cpython/issues/117680

   (35) https://github.com/python/cpython/issues/115776

   (36) https://github.com/python/cpython/issues/117385

   (37) https://github.com/python/cpython/issues/116322

   (38) https://github.com/python/cpython/issues/116129

   (39) https://peps.python.org/pep-0696/

   (40) https://github.com/python/cpython/issues/93502

   (41) https://github.com/python/cpython/issues/107674

   (42) https://github.com/python/cpython/issues/95754

   (43) https://github.com/python/cpython/issues/99180

   (44) https://github.com/python/cpython/issues/105879


File: python.info,  Node: Biblioteca<29>,  Next: Documentação<11>,  Prev: Núcleo e embutidos<25>,  Up: Python 3 13 0 beta 1

1.23.20.5 Biblioteca
....................

   - gh-118418(1): Uma *note DeprecationWarning: 1a5. agora é emitida se
     você não passar um valor para o novo parâmetro 'type_params' de
     ‘typing._eval_type()’ ou ‘typing.ForwardRef._evaluate()’.  (Usar
     qualquer uma dessas funções privadas e não documentadas é
     desencorajado para começar, mas deixar de passar um valor para o
     parâmetro ‘type_params’ pode levar a um comportamento incorreto no
     Python 3.12 ou mais recente.)

   - gh-118660(2): Adiciona um segundo parâmetro de tipo opcional para
     *note typing.ContextManager: cac. e *note
     typing.AsyncContextManager: 1715, representando os tipos de retorno
     de *note __exit__(): 1344. e *note __aexit__(): 1716.
     respectivamente.  Este parâmetro tem como padrão ‘bool | None’.

   - gh-118650(3): O módulo ‘enum’ permite que o método chamado
     ‘_repr_*’ seja definido em tipos ‘Enum’.

   - gh-118648(4): Adiciona padrões de parâmetros de tipo para *note
     typing.Generator: 1717. e *note typing.AsyncGenerator: 1718.

   - gh-101137(5): O tipo MIME ‘text/x-rst’ agora é suportado por *note
     mimetypes: 8f.

   - gh-118164(6): A implementação Python do módulo ‘decimal’ poderia
     parecer travar em casos de potência relativamente pequena (como
     ‘2**117’) se a precisão do contexto fosse definida como um valor
     muito alto.  Um método diferente para verificar resultados
     exatamente representáveis é usado agora que não depende da
     computação de ‘10**precision’ (que poderia ser efetivamente muito
     grande para ser computada).

   - gh-111744(7): ‘breakpoint()’ e ‘pdb.set_trace()’ agora entram no
     depurador imediatamente após a chamada, em vez de antes da próxima
     linha ser executada.

   - gh-118500(8): Adiciona suporte *note pdb: a5. para zipapps

   - gh-118406(9): Adiciona assinatura para objetos *note
     sqlite3.Connection: 245.

   - gh-101732(10): Usa uma função de tempo openssl compatível com Y2038
     quando disponível.

   - gh-118404(11): Corrige *note inspect.signature(): 738. para
     chamáveis não comparáveis.

   - gh-118402(12): Corrige *note inspect.signature(): 738. para o
     resultado da chamada *note functools.cmp_to_key(): 121a.

   - gh-116622(13): No Android, *note sysconfig.get_platform: 1283.
     agora retorna o formato especificado por PEP 738(14).

   - gh-118285(15): Permite especificar a assinatura de instâncias
     personalizadas do tipo de extensão pelo atributo
     ‘__text_signature__’.  Especifica assinaturas de instâncias *note
     operator.attrgetter: e60, *note operator.itemgetter: a6b. e *note
     operator.methodcaller: e61.

   - gh-118314(16): Corrige um caso extremo no modo estrito *note
     binascii.a2b_base64(): 1719, onde o preenchimento excessivo não é
     detectado quando nenhum preenchimento é necessário.

   - gh-118271(17): Adiciona os métodos ‘PhotoImage’ ‘read()’ para ler
     uma imagem de um arquivo e ‘data()’ para obter os dados da imagem.
     Adiciona os parâmetros 'background' e 'grayscale' ao método
     ‘write()’ de ‘PhotoImage’.

   - gh-118225(18): Adiciona o método ‘PhotoImage’ ‘copy_replace()’ para
     copiar uma região de uma imagem para outra, possivelmente com zoom
     de pixel e/ou subamostragem.  Adicione o parâmetro 'from_coords'
     aos métodos ‘copy()’, ‘zoom()’ e ‘subsample()’ da ‘PhotoImage’.
     Adiciona os parâmetros 'zoom' e 'subsample' ao método ‘copy()’ de
     ‘PhotoImage’.

   - gh-118221(19): Corrige um bug em que *note
     sqlite3.Connection.iterdump(): 247. poderia falhar se um *note row
     factory: 171a. personalizado fosse usado.  Patch por Erlend
     Aasland.

   - gh-118013(20): Corrige regressão introduzida em gh-103193(21) que
     significava que chamar *note inspect.getattr_static(): 494. em uma
     instância faria com que uma referência forte à classe dessa
     instância persistisse em um cache interno no módulo *note inspect:
     7e.  Isso causava consumo inesperado de memória se a classe fosse
     criada dinamicamente, a classe mantivesse referências fortes a
     outros objetos que ocupassem uma quantidade significativa de
     memória e o cache contivesse a única referência forte à classe.  A
     correção para a regressão leva a uma lentidão em
     ‘getattr_static()’, mas a função ainda deve ser significativamente
     mais rápida do que era no Python 3.11.  Patch por Alex Waygood.

   - gh-118218(22): Acelera *note itertools.pairwise(): 818. no caso
     comum em até 1,8x.

   - gh-117486(23): Melhora o comportamento das subclasses definidas
     pelo usuário de *note ast.AST: 1a6.  Essas classes agora não
     exigirão alterações no caso usual para estar em conformidade com as
     alterações de comportamento do módulo *note ast: 8. no Python 3.13.
     Patch por Jelle Zijlstra.

   - gh-90848(24): Corrigida *note unittest.mock.create_autospec():
     16f4. para configurar o mock pai com argumentos nomeados.

   - gh-118168(25): Corrige a substituição incorreta de argumentos
     quando *note typing.Unpack: 171b. é usado com a *note tuple: 370.
     embutido.  ‘typing.Unpack’ agora levanta *note TypeError: 2c3.
     quando usado com certos tipos inválidos.  Patch por Jelle Zijlstra.

   - gh-118131(26): Adiciona a interface de linha de comando para o
     módulo *note random: b8.  Patch por Hugo van Kemenade.

   - gh-118107(27): Corrige *note zipimport: 132. leitura de arquivos
     ZIP64 com entradas de arquivo muito grandes ou muito deslocadas.

   - gh-102511(28): Corrige *note os.path.normpath(): 135e. para
     caminhos UNC no Windows.  Acelera *note os.path.splitroot(): 4a4.
     com uma implementação nativa.

   - gh-117535(29): Altera o nome de arquivo desconhecido de *note
     warnings: 112. de ‘sys’ para ‘<sys>’ para esclarecer que não é um
     nome de arquivo real.

   - gh-114053(30): Corrige *note NameError: 43f. errôneo ao chamar
     *note typing.get_type_hints(): 6b1. em uma classe que fazia uso de
     parâmetros de tipo PEP 695(31) em um módulo que tinha ‘from
     __future__ import annotations’ no topo do arquivo.  Patch por Alex
     Waygood.

   - gh-116931(32): Adiciona verificação do parâmetro 'fileobj' para
     *note tarfile.TarFile.addfile(): 171c.

   - gh-117995(33): Não levanta *note DeprecationWarning: 1a5. quando
     uma *note sequência: 4f1. de parâmetros for usada para vincular
     marcadores de posição indexados e sem nome.  Veja também
     gh-100668(34).

   - gh-80361(35): Corrige TypeError em *note
     email.message.Message.get_payload(): 120d. quando o charset é
     codificado em RFC 2231(36).

   - gh-86650(37): Corrige IndexError ao analisar alguns e-mails com
     Message-ID inválido (incluindo endereços únicos gerados pelo
     Microsoft Outlook).

   - gh-117691(38): Melhora as mensagens de erro emitidas pelos avisos
     de descontinuação de *note tarfile: de. relacionados ao PEP 706.
     Se um argumento ‘filter’ não for fornecido para ‘extract()’ ou
     ‘extractall’, o aviso de descontinuação agora aponta para a linha
     no código do usuário onde a função relevante foi chamada.  Patch
     por Alex Waygood.

   - gh-115874(39): Corrige um possível segfault durante a coleta de
     lixo de objetos ‘_asyncio.FutureIter’.  Patch por Savannah
     Ostrowski.

   - gh-115060(40): Acelera *note pathlib.Path.glob(): 22d. omitindo uma
     chamada inicial *note is_dir(): 230.  Como resultado dessa
     alteração, *note glob(): 22d. não pode mais levantar *note OSError:
     417.

   - gh-77102(41): O módulo *note site: c7. agora analisa o arquivo
     ‘.pth’ com UTF-8 primeiro, e *note codificação da localidade: 242.
     se ‘UnicodeDecodeError’ acontecer.  Ele suportava apenas
     codificação da localidade antes.

   - gh-76785(42): Nós expusemos o módulo de baixo nível ‘_interpreters’
     para o bem da implementação PyPI de PEP 734(43).  Às vezes, ele
     estava disponível como o módulo ‘_xxsubinterpreters’ e era usado
     anteriormente apenas para testes.  Na maior parte, ele deve ser
     considerado um módulo interno, como ‘_thread’ e ‘_imp’.  Veja
     ‘https://discuss.python.org/t/pep-734-multiple-interpreters-in-the-stdlib/41147/26’.

   - gh-115060(44): Acelera *note pathlib.Path.glob(): 22d. não
     escaneando diretórios para segmentos de padrões não curinga.

   - gh-117727(45): Acelera *note pathlib.Path.iterdir(): 171d. usando
     *note os.scandir(): a68. internamente.

   - gh-117586(46): Acelera *note pathlib.Path.walk(): 4a8. trabalhando
     com strings internamente.

   - gh-117722(47): Altera o novo suporte a múltiplos separadores em
     *note asyncio.StreamReader.readuntil(): 1b4. para aceitar apenas
     tuplas de separadores em vez de iteráveis arbitrários.

   - gh-117692(48): Corrige um bug quando *note doctest.DocTestFinder:
     171e. estava falhando em ‘builtin_function_or_method’ encapsulado.

   - gh-117348(49): Desempenho de tempo de importação amplamente
     restaurado do configparser evitando dataclasses.

   - gh-117641(50): Aceleração de *note os.path.commonpath(): e6a. no
     Unix.

   - gh-117663(51): Corrige ‘_simple_enum’ para detectar apelidos quando
     vários argumentos estão presentes, mas apenas um é o valor do
     membro.

   - gh-117636(52): Aceleração de *note os.path.join(): 171f.

   - gh-117618(53): Suporte a ‘package.module’ como ‘filename’ para o
     comando ‘break’ de *note pdb: a5.

   - gh-102247(54): os códigos de status enum com constantes em
     http.HTTPStatus são atualizados para incluir os nomes do RFC9110.
     Este RFC inclui alguns status HTTP usados anteriormente apenas para
     WEBDAV e atribui nomes mais genéricos a eles.

     As constantes antigas são preservadas para retrocompatibilidade.

   - gh-117607(55): Aceleração de *note os.path.relpath(): 4aa.

   - gh-117586(56): Aceleração de *note pathlib.Path.glob(): 22d.
     trabalhando com strings internamente.

   - gh-117225(57): Adiciona cor à saída do doctest.  Patch por Hugo van
     Kemenade.

   - gh-117566(58): *note ipaddress.IPv6Address.is_loopback(): 1720.
     agora retornará ‘True’ para endereços de loopback mapeados em IPv4,
     ou seja, endereços no espaço de endereço ‘::ffff:127.0.0.0/104’.

   - gh-117546(59): Corrige o problema em que *note os.path.realpath():
     225. parou de resolver links simbólicos após encontrar um loop de
     links simbólicos no POSIX.

   - gh-116720(60): Comportamento aprimorado de *note asyncio.TaskGroup:
     1b5. quando um cancelamento externo colide com um cancelamento
     interno.  Por exemplo, quando dois grupos de tarefas são aninhados
     e ambos experimentam uma exceção em uma tarefa filha
     simultaneamente, era possível que o grupo de tarefas externo se
     comportasse mal, porque seu cancelamento interno foi engolido pelo
     grupo de tarefas interno.

     No caso em que um grupo de tarefas é cancelado externamente e
     também deve levantar uma *note ExceptionGroup: 1b6, ele agora
     chamará o método *note cancel(): 1b7. da tarefa pai.  Isso garante
     que uma *note asyncio.CancelledError: 1b8. será levantada no
     próximo *note await: 1b9, para que o cancelamento não seja perdido.

     Um benefício adicional dessas mudanças é que os grupos de tarefas
     agora preservam a contagem de cancelamentos (*note
     asyncio.Task.cancelling(): 1ba.).

     Para lidar com alguns casos extremos, *note
     asyncio.Task.uncancel(): 1bb. agora pode redefinir o sinalizador
     não documentado ‘_must_cancel’ quando a contagem de cancelamentos
     chegar a zero.

   - gh-117516(61): Adiciona *note typing.TypeIs: 163, implementando PEP
     742(62).  Patch por Jelle Zijlstra.

   - gh-117503(63): Corrige suporte de nomes de usuários não-ASCII em
     caminhos de bytes em *note os.path.expanduser(): a1e. no Posix.

   - gh-117394(64): *note os.path.ismount(): a1c. agora é 2-3 vezes mais
     rápido se o usuário tiver permissões.

   - gh-117313(65): Trata apenas ‘'\\n'’, ‘'\\r'’ e ‘'\\r\\n'’ como
     separadores de linha ao redobrar as mensagens *note email: 3b.
     Preserva os caracteres de controle ‘'\\v'’, ‘'\\f'’, ‘'\\x1c'’,
     ‘'\\x1d'’ e ‘'\\x1e'’ e os separadores de linha Unicode ‘'\\x85'’,
     ‘'\\u2028'’ e ‘'\\u2029'’ como estão.

   - gh-117142(66): Converte ‘_ctypes’ para inicialização multifásica (
     PEP 489(67)).

   - gh-66543(68): Adiciona a função *note mimetypes.guess_file_type():
     207. que funciona com o caminho do arquivo.  Passar o caminho do
     arquivo em vez da URL em *note guess_type(): 208. está *note
     suavemente descontinuado: 209.

   - gh-68583(69): CLI de webbrowser: substitui getopt por argparse,
     adiciona opções longas.  Patch de Hugo van Kemenade.

   - gh-116871(70): Sugestões de nome para *note AttributeError: 34b. e
     *note ImportError: 419. agora incluem apenas nomes sublinhados se o
     nome original estiver sublinhado.

   - gh-116023(71): Não mostra campos vazios (valor ‘None’ ou ‘[]’) em
     *note ast.dump(): 8ea. por padrão.  Adiciona o parâmetro
     ‘show_empty=False’ para mostrá-los opcionalmente.

   - gh-115961(72): Adicionados atributos ‘name’ e ‘mode’ para objetos
     arquivo ou similares compactados e arquivados nos módulos *note
     bz2: 13, *note lzma: 8a, *note tarfile: de. e *note zipfile: 131.
     O valor do atributo ‘mode’ de *note gzip.GzipFile: 41a. foi
     alterado de inteiro (‘1’ ou ‘2’) para string (‘'rb'’ ou ‘'wb'’).  O
     valor do atributo ‘mode’ do objeto arquivo ou similar legível
     retornado por *note zipfile.ZipFile.open(): 41b. foi alterado de
     ‘'r'’ para ‘'rb'’.

   - gh-82062(73): Corrige *note inspect.signature(): 738. para
     manipular corretamente os padrões de parâmetros em métodos em
     módulos de extensão que usam nomes definidos no espaço de nomes do
     módulo.

   - gh-83856(74): Honra *note atexit: c. para todos os métodos de
     inicialização *note multiprocessing: 94.

   - gh-113081(75): Imprime exceção colorida assim como o traceback
     embutido em *note pdb: a5.

   - gh-112855(76): Acelera a serialização com pickle de objetos *note
     pathlib.PurePath: 4a6.  Patch por Barney Gale.

   - gh-111744(77): Suporte a eventos de opcode em *note bdb: f.

   - gh-109617(78): ‘ncurses’: corrigiu uma falha que poderia ocorrer no
     macOS 13 ou anterior quando o Python era criado com o SDK do Apple
     Xcode 15.

   - gh-83151(79): Ativadas declarações e avaliações arbitrárias no
     shell *note pdb: a5. para acessar as variáveis locais do quadro
     atual, o que tornou possível que códigos multiescopo, como
     geradores ou funções aninhadas, funcionassem.

   - gh-110209(80): Adicionado *note __class_getitem__(): 73b. a *note
     types.GeneratorType: 1721. e *note types.CoroutineType: eb8. para
     fins de dicas de tipo.  Patch por James Hilton-Balfe.

   - gh-108191(81): O *note types.SimpleNamespace: 1d1. agora aceita um
     argumento posicional opcional que especifica valores iniciais de
     atributos como um dict ou um iterável de pares de chave-valor.

   - gh-62090(82): Corrige erros de asserção causados por espaços em
     branco em metavars ou grupos suprimidos com ‘SUPPRESS’ em *note
     argparse: 6. simplificando a formatação de uso.  Patch por Ali
     Hamdan.

   - gh-102402(83): Ajusta ‘logging.LogRecord’ para usar
     ‘time.time_ns()’ e corrige um pequeno bug relacionado à matemática
     de ponto flutuante.

   - gh-100242(84): Traz a implementação Python pura
     ‘functools.partial.__new__’ mais alinhada com a implementação C ao
     não apenas verificar sempre a presença do atributo ‘'func'’ no
     primeiro argumento de ‘partial’.  Em vez disso, tanto a versão
     Python quanto a versão C realizam uma verificação ‘isinstance(func,
     partial)’ no primeiro argumento de ‘partial’.

   - gh-99730(85): Solicitações HEAD não são mais atualizadas para
     solicitações GET durante redirecionamentos em urllib.

   - gh-66410(86): Define o módulo global ‘wantobjects’ ‘tkinter’ como
     ‘2’ antes de criar o objeto *note Tk: 1722. ou chamar o método
     ‘wantobjects()’ do objeto ‘Tk’ com o argumento ‘2’ agora faz com
     que argumentos para retornos de chamada registrados no módulo *note
     tkinter: f0. sejam passados como vários objetos Python (‘int’,
     ‘float’, ‘bytes’, ‘tuple’), dependendo de sua representação interna
     em Tcl, em vez de sempre ‘str’.  ‘tkinter.wantobjects’ agora está
     definido como ‘2’ por padrão.

   - bpo-40943(87): Corrige vários IndexError ao analisar e-mails com
     Message-ID, endereço, rotas, etc.  truncados, por exemplo,
     ‘example@’.

   - bpo-39324(88): Adiciona mapeamento de tipo mime para .md <->
     text/markdown

   - bpo-18108(89): *note shutil.chown(): 240. agora suporta argumentos
     nomeados 'dir_fd' e 'follow_symlinks'.

   - bpo-30988(90): Corrige análise de e-mails com cabeçalhos de
     endereço inválidos com um ponto inicial ou final.  Patch por
     tsufeki.

   - bpo-32839(91): Adiciona o método ‘after_info()’ para widgets
     Tkinter.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118418

   (2) https://github.com/python/cpython/issues/118660

   (3) https://github.com/python/cpython/issues/118650

   (4) https://github.com/python/cpython/issues/118648

   (5) https://github.com/python/cpython/issues/101137

   (6) https://github.com/python/cpython/issues/118164

   (7) https://github.com/python/cpython/issues/111744

   (8) https://github.com/python/cpython/issues/118500

   (9) https://github.com/python/cpython/issues/118406

   (10) https://github.com/python/cpython/issues/101732

   (11) https://github.com/python/cpython/issues/118404

   (12) https://github.com/python/cpython/issues/118402

   (13) https://github.com/python/cpython/issues/116622

   (14) https://peps.python.org/pep-0738/

   (15) https://github.com/python/cpython/issues/118285

   (16) https://github.com/python/cpython/issues/118314

   (17) https://github.com/python/cpython/issues/118271

   (18) https://github.com/python/cpython/issues/118225

   (19) https://github.com/python/cpython/issues/118221

   (20) https://github.com/python/cpython/issues/118013

   (21) https://github.com/python/cpython/issues/103193

   (22) https://github.com/python/cpython/issues/118218

   (23) https://github.com/python/cpython/issues/117486

   (24) https://github.com/python/cpython/issues/90848

   (25) https://github.com/python/cpython/issues/118168

   (26) https://github.com/python/cpython/issues/118131

   (27) https://github.com/python/cpython/issues/118107

   (28) https://github.com/python/cpython/issues/102511

   (29) https://github.com/python/cpython/issues/117535

   (30) https://github.com/python/cpython/issues/114053

   (31) https://peps.python.org/pep-0695/

   (32) https://github.com/python/cpython/issues/116931

   (33) https://github.com/python/cpython/issues/117995

   (34) https://github.com/python/cpython/issues/100668

   (35) https://github.com/python/cpython/issues/80361

   (36) https://datatracker.ietf.org/doc/html/rfc2231.html

   (37) https://github.com/python/cpython/issues/86650

   (38) https://github.com/python/cpython/issues/117691

   (39) https://github.com/python/cpython/issues/115874

   (40) https://github.com/python/cpython/issues/115060

   (41) https://github.com/python/cpython/issues/77102

   (42) https://github.com/python/cpython/issues/76785

   (43) https://peps.python.org/pep-0734/

   (44) https://github.com/python/cpython/issues/115060

   (45) https://github.com/python/cpython/issues/117727

   (46) https://github.com/python/cpython/issues/117586

   (47) https://github.com/python/cpython/issues/117722

   (48) https://github.com/python/cpython/issues/117692

   (49) https://github.com/python/cpython/issues/117348

   (50) https://github.com/python/cpython/issues/117641

   (51) https://github.com/python/cpython/issues/117663

   (52) https://github.com/python/cpython/issues/117636

   (53) https://github.com/python/cpython/issues/117618

   (54) https://github.com/python/cpython/issues/102247

   (55) https://github.com/python/cpython/issues/117607

   (56) https://github.com/python/cpython/issues/117586

   (57) https://github.com/python/cpython/issues/117225

   (58) https://github.com/python/cpython/issues/117566

   (59) https://github.com/python/cpython/issues/117546

   (60) https://github.com/python/cpython/issues/116720

   (61) https://github.com/python/cpython/issues/117516

   (62) https://peps.python.org/pep-0742/

   (63) https://github.com/python/cpython/issues/117503

   (64) https://github.com/python/cpython/issues/117394

   (65) https://github.com/python/cpython/issues/117313

   (66) https://github.com/python/cpython/issues/117142

   (67) https://peps.python.org/pep-0489/

   (68) https://github.com/python/cpython/issues/66543

   (69) https://github.com/python/cpython/issues/68583

   (70) https://github.com/python/cpython/issues/116871

   (71) https://github.com/python/cpython/issues/116023

   (72) https://github.com/python/cpython/issues/115961

   (73) https://github.com/python/cpython/issues/82062

   (74) https://github.com/python/cpython/issues/83856

   (75) https://github.com/python/cpython/issues/113081

   (76) https://github.com/python/cpython/issues/112855

   (77) https://github.com/python/cpython/issues/111744

   (78) https://github.com/python/cpython/issues/109617

   (79) https://github.com/python/cpython/issues/83151

   (80) https://github.com/python/cpython/issues/110209

   (81) https://github.com/python/cpython/issues/108191

   (82) https://github.com/python/cpython/issues/62090

   (83) https://github.com/python/cpython/issues/102402

   (84) https://github.com/python/cpython/issues/100242

   (85) https://github.com/python/cpython/issues/99730

   (86) https://github.com/python/cpython/issues/66410

   (87) https://bugs.python.org/issue?@action=redirect&bpo=40943

   (88) https://bugs.python.org/issue?@action=redirect&bpo=39324

   (89) https://bugs.python.org/issue?@action=redirect&bpo=18108

   (90) https://bugs.python.org/issue?@action=redirect&bpo=30988

   (91) https://bugs.python.org/issue?@action=redirect&bpo=32839


File: python.info,  Node: Documentação<11>,  Next: Construção<14>,  Prev: Biblioteca<29>,  Up: Python 3 13 0 beta 1

1.23.20.6 Documentação
......................

   - gh-117928(1): A versão mínima do Sphinx necessária para a
     documentação agora é 6.2.1.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/117928


File: python.info,  Node: Construção<14>,  Next: Windows<12>,  Prev: Documentação<11>,  Up: Python 3 13 0 beta 1

1.23.20.7 Construção
....................

   - gh-118734(1): Corrige a construção do Windows quando invocada
     diretamente (não por meio do script ‘build.bat’) sem especificar um
     valor para ‘UseTIER2’.

   - gh-115119(2): A opção ‘configure’ *note -with-system-libmpdec: 412.
     agora tem como padrão ‘yes’.  A cópia empacotada de ‘libmpdecimal’
     será removida no Python 3.15.

   - gh-117845(3): Corrige a construção em versões recentes do libedit
     detectando assinaturas de hook readline em ‘configure’.

   - gh-116622(4): Um projeto de testbed foi adicionado para executar o
     conjunto de testes no Android.

   - gh-117645(5): Aumenta o tamanho da pilha WASI de 512 KiB para 8 MiB
     e a memória inicial de 10 MiB para 20 MiB. Patch por Victor
     Stinner.

   - gh-115119(6): ‘configure’ agora usa ‘pkg-config’ para detectar
     dependências *note decimal: 36. se a opção *note
     -with-system-libmpdec: 412. for fornecida.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118734

   (2) https://github.com/python/cpython/issues/115119

   (3) https://github.com/python/cpython/issues/117845

   (4) https://github.com/python/cpython/issues/116622

   (5) https://github.com/python/cpython/issues/117645

   (6) https://github.com/python/cpython/issues/115119


File: python.info,  Node: Windows<12>,  Next: macOS<8>,  Prev: Construção<14>,  Up: Python 3 13 0 beta 1

1.23.20.8 Windows
.................

   - gh-115119(1): Atualiza o instalador do Windows para usar
     libmpdecimal 4.0.0.

   - gh-118486(2): *note os.mkdir(): 21d. agora aceita 'modo' de ‘0o700’
     para restringir o novo diretório ao usuário atual.

   - gh-118347(3): Corrige atualizações do iniciador que não sendo
     instaladas.

   - gh-118293(4): O módulo ‘multiprocessing’ agora passa o sinalizador
     ‘STARTF_FORCEOFFFEEDBACK’ ao gerar processos para informar ao
     Windows para não alterar o cursor do mouse.

   - gh-115009(5): Atualiza o instalador do Windows para usar o SQLite
     3.45.3.

   - gh-90329(6): Suprime o aviso exibido na criação do ambiente virtual
     quando os caminhos solicitados e criados diferem apenas por um nome
     curto (estilo 8.3).  Os avisos continuarão a ser exibidos se uma
     junção ou link simbólico no caminho fez com que o venv fosse criado
     em um local diferente do solicitado originalmente.

   - gh-117786(7): Corrige ambientes virtuais que não iniciam
     corretamente quando criados a partir de uma instalação da Store.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115119

   (2) https://github.com/python/cpython/issues/118486

   (3) https://github.com/python/cpython/issues/118347

   (4) https://github.com/python/cpython/issues/118293

   (5) https://github.com/python/cpython/issues/115009

   (6) https://github.com/python/cpython/issues/90329

   (7) https://github.com/python/cpython/issues/117786


File: python.info,  Node: macOS<8>,  Next: IDLE<12>,  Prev: Windows<12>,  Up: Python 3 13 0 beta 1

1.23.20.9 macOS
...............

   - gh-115119(1): Atualiza o instalador do macOS para usar libmpdecimal
     4.0.0.

   - gh-114099(2): O uso do símbolo do pré-processador iOS foi tornado
     compatível com SDKs macOS mais antigos.

   - gh-115009(3): Atualiza o instalador macOS para usar o SQLite
     3.45.3.

   - gh-91629(4): Use as configurações ‘~/.config/fish/conf.d’ e
     ‘fish_add_path’ para definir ‘PATH’ ao instalar para o shell Fish.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115119

   (2) https://github.com/python/cpython/issues/114099

   (3) https://github.com/python/cpython/issues/115009

   (4) https://github.com/python/cpython/issues/91629


File: python.info,  Node: IDLE<12>,  Next: API C<15>,  Prev: macOS<8>,  Up: Python 3 13 0 beta 1

1.23.20.10 IDLE
...............

   - bpo-34774(1): Use o tema de cores selecionado pelo usuário para
     Help => IDLE Doc.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34774


File: python.info,  Node: API C<15>,  Prev: IDLE<12>,  Up: Python 3 13 0 beta 1

1.23.20.11 API C
................

   - gh-118124(1): Corrige *note Py_BUILD_ASSERT: 1729. e *note
     Py_BUILD_ASSERT_EXPR: 172a. para expressões não constantes: use
     ‘static_assert()’ no C11 e mais recentes.  Patch por Victor
     Stinner.

   - gh-110850(2): Adiciona variante “Raw” das funções PyTime

        * *note PyTime_MonotonicRaw(): 332.

        * *note PyTime_PerfCounterRaw(): 334.

        * *note PyTime_TimeRaw(): 336.

     Patch por Victor Stinner.

   - gh-117987(3): Restaura funções removidas no Python 3.13 alpha 1:

        * *note Py_SetPythonHome(): 172b.

        * *note Py_SetProgramName(): 172c.

        * *note PySys_SetArgvEx(): 172d.

        * *note PySys_SetArgv(): 172e.

     Patch por Victor Stinner.

   - gh-117929(4): Restaura função removida *note PyEval_InitThreads():
     172f.  Patch por Victor Stinner.

   - gh-117534(5): Melhora a lógica de validação na implementação C de
     *note datetime.datetime.fromisoformat(): 617. para lidar melhor com
     anos inválidos.  Patch por Vlad Efanov.

   - gh-68114(6): Corrigido o tratamento de skipitem() dos antigos
     formatadores ‘w’ e ‘w#’.  Eles não são mais suportados e agora
     levantam uma exceção se usados.

   - gh-111997(7): Adiciona uma API C para disparar eventos de
     monitoramento.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/118124

   (2) https://github.com/python/cpython/issues/110850

   (3) https://github.com/python/cpython/issues/117987

   (4) https://github.com/python/cpython/issues/117929

   (5) https://github.com/python/cpython/issues/117534

   (6) https://github.com/python/cpython/issues/68114

   (7) https://github.com/python/cpython/issues/111997


File: python.info,  Node: Python 3 13 0 alpha 6,  Next: Python 3 13 0 alpha 5,  Prev: Python 3 13 0 beta 1,  Up: Changelog

1.23.21 Python 3.13.0 alpha 6
-----------------------------

'Data de lançamento: 2024-04-09'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<26>.
* Biblioteca: Biblioteca<30>.
* Núcleo e embutidos: Núcleo e embutidos<27>.
* Biblioteca: Biblioteca<31>.
* Documentação: Documentação<12>.
* Testes: Testes<15>.
* Construção: Construção<15>.
* Windows: Windows<13>.
* API C: API C<16>.


File: python.info,  Node: Núcleo e embutidos<26>,  Next: Biblioteca<30>,  Up: Python 3 13 0 alpha 6

1.23.21.1 Núcleo e embutidos
............................

   - gh-117494(1): Refatorada a estrutura de dados da sequência de
     instruções de compile.c para instruction_sequence.c.

   - gh-116968(2): Introduzido um tipo de contador de backoff unificado
     de 16 bits (‘_Py_BackoffCounter’), compartilhado entre o
     especializador adaptativo de Nível 1 e o otimizador de Nível 2.  A
     API usada para contadores de especialização adaptável é alterada,
     mas o comportamento é (supostamente) idêntico.

     O comportamento dos contadores de Nível 2 é alterado:

        * Não há mais limites dinâmicos (nunca os variamos).

        * Todos os contadores agora usam o mesmo backoff exponencial.

        * O contador para ‘JUMP_BACKWARD’ começa a contagem regressiva a
          partir de 16.

        * A ‘temperature’ nas saídas laterais começa a contagem
          regressiva a partir de 64.

   - gh-117431(3): Melhora o desempenho dos seguintes métodos *note
     bytes: 1c2. e *note bytearray: 2ea. adaptando-os à convenção de
     chamada *note METH_FASTCALL: 1713.:

        * ‘endswith()’

        * ‘startswith()’

   - gh-117431(4): Melhora o desempenho dos seguintes métodos *note str:
     44c. adaptando-os à convenção de chamada *note METH_FASTCALL:
     1713.:

        * *note count(): 1732.

        * *note endswith(): efb.

        * *note find(): ed7.

        * *note index(): 1733.

        * *note rfind(): ed8.

        * *note rindex(): 1299.

        * *note startswith(): efa.

   - gh-117411(5): Move ‘PyFutureFeatures’ para um cabeçalho interno e
     torna-o privado.

   - gh-109120(6): Adicionado identificador de expressões de estrela
     incorretas, por exemplo ‘f(3, *)’.  Patch por Grigoryev Semyon

   - gh-117266(7): Corrige travamentos para certas subclasses criadas
     pelo usuário de *note ast.AST: 1a6.  Essas classes agora devem
     definir o atributo ‘_field_types’.

   - gh-99108(8): Atualizado o código C do projeto HACL*(9) do *note
     hashlib: 68. embutido a partir do upstream que usamos para muitas
     implementações quando elas não estão presentes via OpenSSL em uma
     determinada construção.  Isso também evita o raro potencial de um
     problema de vinculação de regra de definição de nome de símbolo C.

   - gh-117108(10): Altera o antigo bit de espaço de objetos na geração
     jovem de 0 para gcstate->visited, para que quaisquer objetos
     criados durante o GC tenham o antigo bit definido corretamente se
     forem movidos para a geração antiga.

   - gh-117108(11): O GC do ciclo agora escolhe o tamanho dos
     incrementos com base no tamanho total do heap, em vez da taxa de
     criação de objetos.  Isso garante que ele possa acompanhar o
     crescimento dos heaps.

   - gh-116735(12): Para ‘INSTRUMENTED_CALL_FUNCTION_EX’, define ‘arg0’
     como ‘sys.monitoring.MISSING’ em vez de ‘None’ para o evento *note
     CALL: 1734.

   - gh-113964(13): Iniciar novas threads e a criação de processos por
     meio de *note os.fork(): 197. agora são impedidos somente quando
     todas as threads não daemon são encerradas.

   - gh-116626(14): Garante que ‘INSTRUMENTED_CALL_FUNCTION_EX’ sempre
     emita *note CALL: 1734.

   - gh-116554(15): ‘list.sort()’ agora explora mais casos de ordenação
     parcial, particularmente aqueles com longas execuções descendentes
     com subexecuções de valores iguais.  Elas são reconhecidas como
     execuções únicas agora (anteriormente, cada bloco de valores
     repetidos fazia com que uma nova execução fosse criada).

   - gh-114099(16): Adicionado um carregador que pode descobrir módulos
     de extensão em uma pasta Frameworks no estilo iOS.

   - gh-115775(17): O compilador preenche o novo campo
     ‘__static_attributes__’ em uma classe com os nomes dos atributos
     desta classe que são acessados por meio de self.X de qualquer
     função em seu corpo.

   - gh-115776(18): A array de valores, a estrutura ‘PyDictValues’ agora
     é incorporada ao objeto durante a alocação.  Isso fornece melhor
     desempenho no caso comum e não degrada tanto quando o ‘__dict__’ do
     objeto é materializado.

   - gh-108362(19): Implementa um coletor de lixo cíclico incremental.
     Ao coletar a geração antiga em incrementos, não há necessidade de
     uma varredura completa do heap.  Isso pode reduzir enormemente o
     tempo máximo de pausa para programas com grandes heaps.

     Reduz o número de gerações de três para duas.  A geração antiga é
     dividida em dois espaços, “visitado” e “pendente”.

     A coleta acontece em duas etapas:: * Um incremento é formado a
     partir da geração jovem e uma pequena parte do espaço pendente.  *
     Este incremento é escaneado e os sobreviventes são movidos para o
     final do espaço visitado.

     Quando o espaço de coleta fica vazio, os dois espaços são trocados.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/117494

   (2) https://github.com/python/cpython/issues/116968

   (3) https://github.com/python/cpython/issues/117431

   (4) https://github.com/python/cpython/issues/117431

   (5) https://github.com/python/cpython/issues/117411

   (6) https://github.com/python/cpython/issues/109120

   (7) https://github.com/python/cpython/issues/117266

   (8) https://github.com/python/cpython/issues/99108

   (9) https://github.com/hacl-star/hacl-star

   (10) https://github.com/python/cpython/issues/117108

   (11) https://github.com/python/cpython/issues/117108

   (12) https://github.com/python/cpython/issues/116735

   (13) https://github.com/python/cpython/issues/113964

   (14) https://github.com/python/cpython/issues/116626

   (15) https://github.com/python/cpython/issues/116554

   (16) https://github.com/python/cpython/issues/114099

   (17) https://github.com/python/cpython/issues/115775

   (18) https://github.com/python/cpython/issues/115776

   (19) https://github.com/python/cpython/issues/108362


File: python.info,  Node: Biblioteca<30>,  Next: Núcleo e embutidos<27>,  Prev: Núcleo e embutidos<26>,  Up: Python 3 13 0 alpha 6

1.23.21.2 Biblioteca
....................

   - gh-109870(1): Dataclasses agora chamam *note exec(): 17f. uma vez
     por dataclass, em vez de uma vez por método adicionado.  Isso pode
     acelerar a criação de dataclass em até 20%.

   - gh-97901(2): O tipo MIME ‘text/rtf’ agora é suportado por *note
     mimetypes: 8f.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109870

   (2) https://github.com/python/cpython/issues/97901


File: python.info,  Node: Núcleo e embutidos<27>,  Next: Biblioteca<31>,  Prev: Biblioteca<30>,  Up: Python 3 13 0 alpha 6

1.23.21.3 Núcleo e embutidos
............................

   - bpo-24612(1): Melhora o *note SyntaxError: 18d. que acontece quando
     ‘not’ aparece após um operador.  Patch por Pablo Galindo

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24612


File: python.info,  Node: Biblioteca<31>,  Next: Documentação<12>,  Prev: Núcleo e embutidos<27>,  Up: Python 3 13 0 alpha 6

1.23.21.4 Biblioteca
....................

   - gh-117648(1): Melhora o desempenho de *note os.path.join(): 171f. e
     *note os.path.expanduser(): a1e.

   - gh-117584(2): Raise *note TypeError: 2c3. for non-paths in *note
     posixpath.relpath: 4aa.

   - gh-117467(3): Preserve mailbox ownership when rewriting in *note
     mailbox.mbox.flush: 1738.  Patch by Tony Mountifield.

   - gh-114848(4): Levanta *note FileNotFoundError: 42b. quando
     ‘getcwd()’ retornar ‘(unreachable)’, o que pode acontecer no Linux
     >= 2.6.36 com glibc < 2.27.

   - gh-117459(5): ‘asyncio.asyncio.run_coroutine_threadsafe()’ agora
     mantém o traceback de ‘CancelledError’, *note TimeoutError: 838. e
     ‘InvalidStateError’ que são levantados na corrotina.

   - gh-117381(6): Corrige mensagem de erro para ‘ntpath.commonpath()’.

   - gh-117337(7): Descontinua funções não documentadas ‘glob.glob0()’ e
     ‘glob.glob1()’.  Use *note glob.glob(): 29f. e passe um diretório
     para seu argumento 'root_dir'.

   - gh-117349(8): Otimiza várias funções em *note os.path: a2.

   - gh-117348(9): Refatorado ‘configparser.RawConfigParser._read()’
     para reduzir a complexidade ciclométrica e melhorar a compreensão.

   - gh-117335(10): Levanta TypeError para não sequências para
     ‘ntpath.commonpath()’.

   - gh-66449(11): *note configparser.ConfigParser: 1c8. agora aceita
     seções sem nome antes das nomeadas, se configurado para isso.

   - gh-88014(12): Na documentação de *note gzip.GzipFile: 41a. no
     módulo gzip, explique o tipo de dados do argumento construtor
     opcional 'mtime' e recomende ‘mtime = 0’ para gerar fluxos
     determinísticos.

   - gh-117310(13): Corrigida uma falha improvável inicial e extra
     ‘Py_DECREF’ em *note ssl: d0. ao criar um novo ‘_ssl._SSLContext’
     se o CPython foi construído de forma implausível, de modo que a
     lista de cifras padrão está vazia 'ou' a biblioteca SSL à qual foi
     vinculado relata uma falha de sua API C
     ‘SSL_CTX_set_cipher_list()’.

   - gh-117294(14): Um ‘DocTestCase’ agora relata como ignorado se todos
     os exemplos no doctest forem ignorados.

   - gh-98966(15): Em *note subprocess: d6, levanta uma mensagem mais
     informativa quando ‘stdout=STDOUT’.

   - gh-117225(16): doctest: imprime apenas “e X failed” quando não for
     zero, não pluraliza “1 items”.  Patch de Hugo van Kemenade.

   - gh-117205(17): Acelera *note compileall.compile_dir(): b38. em 20%
     ao usar multiprocessamento aumentando ‘chunksize’.

   - gh-117178(18): Corrige a regressão no carregamento lento de módulos
     autorreferenciais, introduzida em gh-114781(19).

   - gh-112383(20): Corrige o tratamento do módulo *note dis: 38. de
     instruções ‘ENTER_EXECUTOR’.

   - gh-117182(21): O carregamento preguiçoso de módulos que modificam
     seu próprio ‘__class__’ não reverte mais o ‘__class__’ para *note
     types.ModuleType: e3f.

   - gh-117084(22): Corrige a extração de *note zipfile: 131. para
     entradas de diretório com o nome contendo barras invertidas no
     Windows.

   - gh-117114(23): Torna *note os.path.isdevdrive(): 1739. disponível
     em todas as plataformas.  Para aqueles que não oferecem Dev Drives,
     ele sempre retornará ‘False’.

   - gh-117110(24): Corrige um bug que impede que subclasses de *note
     typing.Any: 6ac. sejam instanciadas com argumentos.  Patch por
     Chris Fu.

   - gh-109653(25): Adiadas as importações de seleção em
     importlib.metadata e importlib.resources para uma aceleração de
     14%.

   - gh-70647(26): Inicia o período de descontinuação para o
     comportamento atual de *note datetime.datetime.strptime(): 16f6. e
     *note time.strptime(): 1474. que sempre falha ao analisar uma
     sequência de datas com um *note ValueError: 202. envolvendo um dia
     do mês, como ‘strptime("02-29", "%m-%d")’ quando um ano 'não' é
     especificado e a data acontece de ser 29 de fevereiro.  Isso deve
     ajudar a evitar que os usuários encontrem novos bugs a cada quatro
     anos devido a uma suposição natural equivocada sobre a API ao
     analisar valores de data parciais.

   - gh-116987(27): Corrigida ‘inspect.findsource()’ para objetos de
     código de classe.

   - gh-114099(28): Modifica a biblioteca padrão para permitir
     diferenças de plataforma iOS.

   - gh-90872(29): No Windows, *note subprocess.Popen.wait(): d05. não
     chama mais ‘WaitForSingleObject()’ com um tempo limite negativo:
     passe ‘0’ ms se o tempo limite for negativo.  Patch por Victor
     Stinner.

   - gh-116957(30): configparser: Não deixa os valores ConfigParser em
     um estado inválido (armazenados como uma lista em vez de uma str)
     após uma leitura anterior gerar DuplicateSectionError ou
     DuplicateOptionError.

   - gh-115538(31): ‘_io.WindowsConsoleIO’ agora emite um aviso se um
     valor booleano for passado como um argumento filedescriptor.

   - gh-90095(32): Ignora linhas vazias e comentários em ‘.pdbrc’

   - gh-106531(33): Atualizado zipfile._path de zipp 3.18(34),
     fornecendo melhor compatibilidade para PyPy, melhor desempenho glob
     para arquivos zip profundamente aninhados e fornecendo acesso
     interno a ‘CompleteDirs.inject’ para uso em outros testes (como
     importlib.resources).

   - gh-63207(35): No Windows, *note time.time(): 254. agora usa o
     relógio ‘GetSystemTimePreciseAsFileTime()’ para ter uma resolução
     melhor que 1 us, em vez do relógio ‘GetSystemTimeAsFileTime()’ que
     tem uma resolução de 15,6 ms.  Patch por Victor Stinner.

   - gh-116764(36): Restaura o suporte de ‘None’ e outros valores falsos
     nas funções *note urllib.parse: 10a. *note parse_qs(): 27a. e *note
     parse_qsl(): 279.  Além disso, agora eles levantam um TypeError
     para inteiros diferentes de zero e sequências não vazias.

   - gh-116811(37): Em ‘PathFinder.invalidate_caches’, delega para
     ‘MetadataPathFinder.invalidate_caches’.

   - gh-116647(38): Corrige filho recursivo em dataclasses

   - gh-113171(39): Corrige vários falsos positivos e falsos negativos
     em

        * *note ipaddress.IPv4Address.is_private: 173a. (veja estas
          documentações para detalhes)

        * *note ipaddress.IPv4Address.is_global: f93.

        * *note ipaddress.IPv6Address.is_private: 173b.

        * *note ipaddress.IPv6Address.is_global: 173c.

     Também nos atributos correspondentes *note ipaddress.IPv4Network:
     1fe. e *note ipaddress.IPv6Network: 1ff.

   - gh-63283(40): Em *note encodings.idna: 52, qualquer capitalização
     do prefixo ACE (‘xn--’) agora é aceitável.  Patch por Pepijn de Vos
     e Zackery Spytz.

   - gh-71042(41): Adiciona *note platform.android_ver(): 173d, que
     fornece informações sobre o dispositivo e o sistema operacional no
     Android.

   - gh-73468(42): Adicionada a nova função *note math.fma(): 205,
     envolvendo a operação ‘fma()’ do C99: função de
     multiplicação-adição fundida.  Patch por Mark Dickinson e Victor
     Stinner.

   - gh-116608(43): As funções *note importlib.resources: 7b. *note
     is_resource(): 1ec, *note open_binary(): 1ed, *note open_text():
     1ee, *note path(): 1ef, *note read_binary(): 1f0. e *note
     read_text(): 1f1. não estão mais descontinuadas e oferecem suporte
     a subdiretórios por meio de vários argumentos posicionais.  A
     função *note contents(): 1f2. também permite subdiretórios, mas
     continua descontinuada.

   - gh-116484(44): Altera os nomes de widgets ‘tkinter.Checkbutton’
     gerados automaticamente para evitar colisões com nomes de widgets
     ‘tkinter.ttk.Checkbutton’ gerados automaticamente dentro do mesmo
     widget pai.

   - gh-114314(45): Em *note ctypes: 2a, os dados de ctype agora são
     armazenados em objetos type diretamente em vez de em uma subclasse
     dict.  Esta é uma alteração interna que não deve afetar o uso.

   - gh-116401(46): Corrige o bloqueio de *note os.fwalk(): b71. e *note
     shutil.rmtree(): 301. ao abrir o encadeamento nomeado.

   - gh-71052(47): Implementa *note ctypes.util.find_library(): d6c. no
     Android.

   - gh-90535(48): Corrige suporte de valores de 'interval' > 1 em
     ‘logging.TimedRotatingFileHandler’ para ‘when='MIDNIGHT'’ e
     ‘when='Wx'’.

   - gh-113308(49): Remove algumas partes internas protegidas de *note
     uuid: 110.: ‘_has_uuid_generate_time_safe’, ‘_netbios_getnode’,
     ‘_ipconfig_getnode’ e ‘_load_system_functions’.  Elas não eram
     usadas.

   - gh-115627(50): Corrige o tratamento de erro do módulo *note ssl:
     d0. de término de conexão por peer.  Agora ele lança um OSError com
     o código de erro apropriado em vez de um EOFError.

   - gh-114847(51): Acelera *note os.path.realpath(): 225. em
     plataformas não Windows.

   - gh-114271(52): Corrige uma corrida em ‘threading.Thread.join()’.

     ‘threading._MainThread’ agora sempre representa o thread principal
     do interpretador principal.

     ‘PyThreadState.on_delete’ e ‘PyThreadState.on_delete_data’ foram
     removidos.

   - gh-113538(53): Adiciona os métodos *note
     asyncio.Server.close_clients(): 1b2. e *note
     asyncio.Server.abort_clients(): 1b3. que permitem fechar um
     servidor asyncio de forma mais forçada.

   - gh-85287(54): Altera os codecs Unicode para retornar
     UnicodeEncodeError ou UnicodeDecodeError, em vez de apenas
     UnicodeError.

   - gh-113548(55): *note pdb: a5. agora permite argumentos CLI para
     ‘pdb -m’.

   - gh-112948(56): Torna a conclusão de *note pdb: a5. semelhante ao
     Python REPL

   - gh-105866(57): Corrigido o bug ‘_get_slots’ que causava erro ao
     definir dataclasses com slots e um weakref_slot.

   - gh-96471(58): Adiciona a terminação *note asyncio.Queue: a80. com o
     método *note shutdown(): 1b0.

   - gh-89739(59): O módulo *note zipimport: 132. agora pode ler
     arquivos ZIP64.

   - bpo-33533(60): *note asyncio.as_completed(): 1aa. agora retorna um
     objeto que é um iterador assíncrono e um iterador simples.  O novo
     padrão de iteração assíncrona permite uma correlação mais fácil
     entre tarefas anteriores e seus resultados concluídos.  Esta é uma
     correspondência mais próxima ao padrão de iteração de *note
     concurrent.futures.as_completed(): 173e.  Patch por Justin Arthur.

   - bpo-27578(61): *note inspect.getsource(): 15f8. (e funções
     relacionadas) funcionam com arquivos de módulo vazios, retornando
     ‘'\\n'’ (ou equivalente razoável) em vez de gerar ‘OSError’.  Patch
     por Kernc.

   - bpo-37141(62): Aceita um iterável de separadores em *note
     asyncio.StreamReader.readuntil(): 1b4, parando quando um deles for
     encontrado.

   - gh-66543(63): Faz *note mimetypes.guess_type(): 208. analisar
     corretamente URLs com apenas um nome de host, URLs contendo
     fragmento ou consulta e nomes de arquivo com apenas um sharepoint
     UNC no Windows.  Baseado no patch por Dong-hee Na.

   - bpo-15010(64): *note unittest.TestLoader.discover(): 101b. agora
     salva o valor original de ‘unittest.TestLoader._top_level_dir’ e o
     restaura no final da chamada.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/117648

   (2) https://github.com/python/cpython/issues/117584

   (3) https://github.com/python/cpython/issues/117467

   (4) https://github.com/python/cpython/issues/114848

   (5) https://github.com/python/cpython/issues/117459

   (6) https://github.com/python/cpython/issues/117381

   (7) https://github.com/python/cpython/issues/117337

   (8) https://github.com/python/cpython/issues/117349

   (9) https://github.com/python/cpython/issues/117348

   (10) https://github.com/python/cpython/issues/117335

   (11) https://github.com/python/cpython/issues/66449

   (12) https://github.com/python/cpython/issues/88014

   (13) https://github.com/python/cpython/issues/117310

   (14) https://github.com/python/cpython/issues/117294

   (15) https://github.com/python/cpython/issues/98966

   (16) https://github.com/python/cpython/issues/117225

   (17) https://github.com/python/cpython/issues/117205

   (18) https://github.com/python/cpython/issues/117178

   (19) https://github.com/python/cpython/issues/114781

   (20) https://github.com/python/cpython/issues/112383

   (21) https://github.com/python/cpython/issues/117182

   (22) https://github.com/python/cpython/issues/117084

   (23) https://github.com/python/cpython/issues/117114

   (24) https://github.com/python/cpython/issues/117110

   (25) https://github.com/python/cpython/issues/109653

   (26) https://github.com/python/cpython/issues/70647

   (27) https://github.com/python/cpython/issues/116987

   (28) https://github.com/python/cpython/issues/114099

   (29) https://github.com/python/cpython/issues/90872

   (30) https://github.com/python/cpython/issues/116957

   (31) https://github.com/python/cpython/issues/115538

   (32) https://github.com/python/cpython/issues/90095

   (33) https://github.com/python/cpython/issues/106531

   (34) https://zipp.readthedocs.io/en/latest/history.html#v3-18-0

   (35) https://github.com/python/cpython/issues/63207

   (36) https://github.com/python/cpython/issues/116764

   (37) https://github.com/python/cpython/issues/116811

   (38) https://github.com/python/cpython/issues/116647

   (39) https://github.com/python/cpython/issues/113171

   (40) https://github.com/python/cpython/issues/63283

   (41) https://github.com/python/cpython/issues/71042

   (42) https://github.com/python/cpython/issues/73468

   (43) https://github.com/python/cpython/issues/116608

   (44) https://github.com/python/cpython/issues/116484

   (45) https://github.com/python/cpython/issues/114314

   (46) https://github.com/python/cpython/issues/116401

   (47) https://github.com/python/cpython/issues/71052

   (48) https://github.com/python/cpython/issues/90535

   (49) https://github.com/python/cpython/issues/113308

   (50) https://github.com/python/cpython/issues/115627

   (51) https://github.com/python/cpython/issues/114847

   (52) https://github.com/python/cpython/issues/114271

   (53) https://github.com/python/cpython/issues/113538

   (54) https://github.com/python/cpython/issues/85287

   (55) https://github.com/python/cpython/issues/113548

   (56) https://github.com/python/cpython/issues/112948

   (57) https://github.com/python/cpython/issues/105866

   (58) https://github.com/python/cpython/issues/96471

   (59) https://github.com/python/cpython/issues/89739

   (60) https://bugs.python.org/issue?@action=redirect&bpo=33533

   (61) https://bugs.python.org/issue?@action=redirect&bpo=27578

   (62) https://bugs.python.org/issue?@action=redirect&bpo=37141

   (63) https://github.com/python/cpython/issues/66543

   (64) https://bugs.python.org/issue?@action=redirect&bpo=15010


File: python.info,  Node: Documentação<12>,  Next: Testes<15>,  Prev: Biblioteca<31>,  Up: Python 3 13 0 alpha 6

1.23.21.5 Documentação
......................

   - gh-115977(1): Remove referências de compatibilidade para
     Emscripten.

   - gh-114099(2): Adiciona um guia de plataforma iOS e sinaliza módulos
     não disponíveis no iOS.

   - gh-91565(3): Alterações nos arquivos de documentação e saídas de
     configuração para refletir o novo local para relatar bugs - ou
     seja, GitHub em vez de bugs.python.org.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115977

   (2) https://github.com/python/cpython/issues/114099

   (3) https://github.com/python/cpython/issues/91565


File: python.info,  Node: Testes<15>,  Next: Construção<15>,  Prev: Documentação<12>,  Up: Python 3 13 0 alpha 6

1.23.21.6 Testes
................

   - gh-83434(1): Desativa a saída XML do JUnit (opção de linha de
     comando ‘--junit-xml=FILE’) no regrtest ao procurar vazamentos de
     referência (opção ‘-R’).  Patch por Victor Stinner.

   - gh-117187(2): Corrige testes XML para vanilla Expat <2.6.0.

   - gh-116333(3): Testes de coisas relacionadas a TLS (códigos de erro,
     etc.)  foram atualizados para serem mais tolerantes sobre strings e
     comportamentos de mensagens de erro específicos, como visto nos
     forks BoringSSL e AWS-LC do OpenSSL.

   - gh-117089(4): Testes consolidados para importlib.metadata em seu
     próprio pacote ‘metadata’.

   - gh-115979(5): Atualiza test_importlib para que passe no WASI SDK
     21.

   - gh-112536(6): Adiciona –tsan ao test.regrtest para executar testes
     TSAN em tempos de execução razoáveis.  Patch por Donghee Na.

   - gh-116307(7): Adicionado o auxiliar de importação
     ‘isolated_modules’, pois ‘CleanImport’ não remove módulos
     importados durante o contexto.  Use-o em testes importlib.resources
     para evitar deixar ‘mod’ por aí para impedir testes
     importlib.metadata.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/83434

   (2) https://github.com/python/cpython/issues/117187

   (3) https://github.com/python/cpython/issues/116333

   (4) https://github.com/python/cpython/issues/117089

   (5) https://github.com/python/cpython/issues/115979

   (6) https://github.com/python/cpython/issues/112536

   (7) https://github.com/python/cpython/issues/116307


File: python.info,  Node: Construção<15>,  Next: Windows<13>,  Prev: Testes<15>,  Up: Python 3 13 0 alpha 6

1.23.21.7 Construção
....................

   - gh-114736(1): Faz construções WASI usar WASI SDK 21.

   - gh-115983(2): Pula a construção de módulos de teste que devem ser
     construídos como compartilhados sob WASI.

   - gh-71052(3): Adiciona script de construção e instruções do Android.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/114736

   (2) https://github.com/python/cpython/issues/115983

   (3) https://github.com/python/cpython/issues/71052


File: python.info,  Node: Windows<13>,  Next: API C<16>,  Prev: Construção<15>,  Up: Python 3 13 0 alpha 6

1.23.21.8 Windows
.................

   - gh-117267(1): Garante que ‘DirEntry.stat().st_ctime’ se comporte
     consistentemente com *note os.stat(): 4a0. durante o período de
     descontinuação de ‘st_ctime’ contendo o mesmo valor que
     ‘st_birthtime’.  Após o período de descontinuação, ‘st_ctime’ será
     o tempo de alteração de metadados (ou indisponível por meio de
     ‘DirEntry’), e apenas ‘st_birthtime’ conterá o tempo de criação.

   - gh-116195(2): Melhora o desempenho de *note os.getppid(): 1743.
     usando uma API de sistema alternativa quando disponível.
     Contribuição de vxiiduu.

   - gh-88494(3): No Windows, *note time.monotonic(): 253. agora usa o
     relógio ‘QueryPerformanceCounter()’ para ter uma resolução melhor
     que 1 us, em vez do relógio ‘GetTickCount64()’ que tem uma
     resolução de 15,6 ms.  Patch por Victor Stinner.

   - gh-116773(4): Corrige instâncias de ‘<_overlapped.Overlapped object
     at 0xXXX> still has pending operation at deallocation, the process
     may crash’.

   - gh-91227(5): Corrige a implementação asyncio ProactorEventLoop para
     que o envio de um datagrama para um endereço que não esteja
     escutando não impeça o recebimento de mais datagramas.

   - gh-115119(6): Trocado do código ‘libmpdecimal’ fornecido para um
     pacote externo hospedado separadamente no repositório
     ‘cpython-source-deps’ ao construir o módulo ‘_decimal’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/117267

   (2) https://github.com/python/cpython/issues/116195

   (3) https://github.com/python/cpython/issues/88494

   (4) https://github.com/python/cpython/issues/116773

   (5) https://github.com/python/cpython/issues/91227

   (6) https://github.com/python/cpython/issues/115119


File: python.info,  Node: API C<16>,  Prev: Windows<13>,  Up: Python 3 13 0 alpha 6

1.23.21.9 API C
...............

   - gh-117642(1): Corrige a implementação de PEP 737(2) para ‘%#T’ e
     ‘%#N’.

   - gh-87193(3): *note _PyBytes_Resize(): 1745. agora pode ser chamada
     para objetos bytes com contagem de referências > 1, incluindo
     objetos bytes de 1 byte.  Ele cria um novo objeto bytes e destrói o
     antigo se ele tiver contagem de referências > 1.

   - gh-117021(4): Corrige estouro de inteiro em *note PyLong_AsPid():
     1746. em plataformas de 64 bits que não sejam Windows.

   - gh-115756(5): ‘PyCode_GetFirstFree()’ é uma API utilizável agora e
     foi renomeada para *note PyUnstable_Code_GetFirstFree(): 386.
     (Contribuição de Bogdan Romanyuk em gh-115781(6))

   - gh-116869(7): Adiciona o teste ‘test_cext’: cria uma extensão C
     para verificar se a API Python C emite avisos do compilador C.
     Patch por Victor Stinner.

   - gh-116869(8): Torna a API C compatível com o sinalizador do
     compilador ‘-Werror=declaration-after-statement’ novamente.  Patch
     por Victor Stinner.

   - gh-116936(9): Adiciona *note PyType_GetModuleByDef(): 394. à API C
     limitada.  Patch por Victor Stinner.

   - gh-116809(10): Restaura a função privada
     ‘_PyErr_ChainExceptions1()’ removida.  Patch por Victor Stinner.

   - gh-115754(11): Na versão limitada 3.13 da API C, obter Singletons
     ‘Py_None’, ‘Py_False’, ‘Py_True’, ‘Py_Ellipsis’ e
     ‘Py_NotImplemented’ agora é implementado como chamadas de função no
     nível ABI estável para ocultar detalhes de implementação.  Obter
     essas constantes ainda retorna referências emprestadas.  Patch por
     Victor Stinner.

   - gh-115754(12): Adiciona as funções *note Py_GetConstant(): 354. e
     *note Py_GetConstantBorrowed(): 355. para obter constantes.  Por
     exemplo, ‘Py_GetConstant(Py_CONSTANT_ZERO)’ retorna uma *note
     referência forte: 33d. para a constante zero.  Patch por Victor
     Stinner.

   - gh-111696(13): Adiciona suporte para os formatos ‘%T’, ‘%T#’, ‘%N’
     e ‘%N#’ para *note PyUnicode_FromFormat(): 38a.: formata o nome
     totalmente qualificado de um tipo de objeto e de um tipo: chama
     *note PyType_GetModuleName(): 375.  Veja PEP 737(14) para mais
     informações.  Patch por Victor Stinner.

   - gh-111696(15): Adiciona a função *note PyType_GetModuleName(): 375.
     para obter o nome do módulo do tipo.  Equivalente a obter o
     atributo ‘type.__module__’.  Patch por Eric Snow e Victor Stinner.

   - gh-111696(16): Adiciona a função *note
     PyType_GetFullyQualifiedName(): 373. para obter o nome totalmente
     qualificado do tipo.  Equivalente a
     ‘f"{type.__module__}.{type.__qualname__}"’, ou ‘type.__qualname__’
     se ‘type.__module__’ não for uma string ou for igual a
     ‘"builtins"’.  Patch por Victor Stinner.

   - gh-85283(17): As extensões C ‘fcntl’, ‘grp’, ‘pwd’, ‘termios’,
     ‘_statistics’ e ‘_testconsole’ agora são construídas com a *note
     API C limitada: 396.  Patch por Victor Stinner.

   - gh-111140(18): Adiciona sinalizadores adicionais a *note
     PyLong_AsNativeBytes(): 361. e *note PyLong_FromNativeBytes(): 362.
     para permitir que o chamador determine como lidar com casos
     extremos em torno de valores que preenchem o buffer inteiro.

   - gh-113024(19): Adiciona a função *note PyObject_GenericHash(): 367.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/117642

   (2) https://peps.python.org/pep-0737/

   (3) https://github.com/python/cpython/issues/87193

   (4) https://github.com/python/cpython/issues/117021

   (5) https://github.com/python/cpython/issues/115756

   (6) https://github.com/python/cpython/issues/115781

   (7) https://github.com/python/cpython/issues/116869

   (8) https://github.com/python/cpython/issues/116869

   (9) https://github.com/python/cpython/issues/116936

   (10) https://github.com/python/cpython/issues/116809

   (11) https://github.com/python/cpython/issues/115754

   (12) https://github.com/python/cpython/issues/115754

   (13) https://github.com/python/cpython/issues/111696

   (14) https://peps.python.org/pep-0737/

   (15) https://github.com/python/cpython/issues/111696

   (16) https://github.com/python/cpython/issues/111696

   (17) https://github.com/python/cpython/issues/85283

   (18) https://github.com/python/cpython/issues/111140

   (19) https://github.com/python/cpython/issues/113024


File: python.info,  Node: Python 3 13 0 alpha 5,  Next: Python 3 13 0 alpha 4,  Prev: Python 3 13 0 alpha 6,  Up: Changelog

1.23.22 Python 3.13.0 alpha 5
-----------------------------

'Data de lançamento: 2024-03-12'

* Menu:

* Segurança: Segurança<14>.
* Núcleo e embutidos: Núcleo e embutidos<28>.
* Biblioteca: Biblioteca<32>.
* Núcleo e embutidos: Núcleo e embutidos<29>.
* Biblioteca: Biblioteca<33>.
* Núcleo e embutidos: Núcleo e embutidos<30>.
* Biblioteca: Biblioteca<34>.
* Documentação: Documentação<13>.
* Testes: Testes<16>.
* Construção: Construção<16>.
* Windows: Windows<14>.
* macOS: macOS<9>.
* IDLE: IDLE<13>.
* Ferramentas/Demos: Ferramentas/Demos<9>.
* API C: API C<17>.


File: python.info,  Node: Segurança<14>,  Next: Núcleo e embutidos<28>,  Up: Python 3 13 0 alpha 5

1.23.22.1 Segurança
...................

   - gh-115398(1): Permite controlar o adiamento da nova análise Expat
     >=2.6.0 ( CVE 2023-52425(2)) adicionando cinco novos métodos:

        * *note xml.etree.ElementTree.XMLParser.flush(): 26f.

        * *note xml.etree.ElementTree.XMLPullParser.flush(): 270.

        * *note xml.parsers.expat.xmlparser.GetReparseDeferralEnabled():
          271.

        * *note xml.parsers.expat.xmlparser.SetReparseDeferralEnabled():
          272.

        * ‘xml.sax.expatreader.ExpatParser.flush()’

   - gh-114572(3): *note ssl.SSLContext.cert_store_stats(): fe0. e *note
     ssl.SSLContext.get_ca_certs(): fe1. agora travam corretamente o
     acesso ao armazenamento de certificados, quando o *note
     ssl.SSLContext: 294. é compartilhado entre várias threads.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115398

   (2) https://www.cve.org/CVERecord?id=CVE-2023-52425

   (3) https://github.com/python/cpython/issues/114572


File: python.info,  Node: Núcleo e embutidos<28>,  Next: Biblioteca<32>,  Prev: Segurança<14>,  Up: Python 3 13 0 alpha 5

1.23.22.2 Núcleo e embutidos
............................

   - gh-116604(1): Respeita o status do coletor de lixo quando chamadas
     indiretas são feitas via *note PyErr_CheckSignals(): 467. e o
     disjuntor de avaliação.  Patch por Pablo Galindo

   - gh-112087(2): *note list: 611. agora é compatível com a
     implementação da PEP 703(3).

   - gh-116381(4): Adiciona especialização para ‘CONTAINS_OP’.

   - gh-116296(5): Corrige possível vazamento de referência no
     tratamento de erros internos de ‘object.__reduce__()’.

   - gh-115823(6): Calcula corretamente intervalos de erro no analisador
     ao levantar exceções *note SyntaxError: 18d. causadas por
     sequências de bytes inválidas.  Patch por Pablo Galindo

   - gh-115778(7): Adiciona anotação ‘tierN’ para definição de instrução
     no interpretador DSL.

   - gh-115733(8): Corrige travamento ao chamar ‘next()’ em iteradores
     de lista esgotados.

   - gh-115700(9): O estágio de construção de regen-cases agora funciona
     no Windows.

   - gh-115347(10): Corrige um bug em que docstring era substituído por
     um NOP redundante quando Python é executado com ‘-OO’.

   - gh-115323(11): Torna a mensagem de erro mais significativa para
     quando *note bytearray.extend(): 15b6. é chamado com um objeto
     *note str: 44c.

   - gh-112175(12): Cada ‘PyThreadState’ agora tem seu próprio
     ‘eval_breaker’, permitindo que threads específicos sejam
     interrompidos.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/116604

   (2) https://github.com/python/cpython/issues/112087

   (3) https://peps.python.org/pep-0703/

   (4) https://github.com/python/cpython/issues/116381

   (5) https://github.com/python/cpython/issues/116296

   (6) https://github.com/python/cpython/issues/115823

   (7) https://github.com/python/cpython/issues/115778

   (8) https://github.com/python/cpython/issues/115733

   (9) https://github.com/python/cpython/issues/115700

   (10) https://github.com/python/cpython/issues/115347

   (11) https://github.com/python/cpython/issues/115323

   (12) https://github.com/python/cpython/issues/112175


File: python.info,  Node: Biblioteca<32>,  Next: Núcleo e embutidos<29>,  Prev: Núcleo e embutidos<28>,  Up: Python 3 13 0 alpha 5

1.23.22.3 Biblioteca
....................

   - gh-115154(1): Corrige um bug que estava fazendo com que a função
     *note tokenize.untokenize(): 166b. manipulasse literais nomeados
     unicode incorretamente.  Patch por Pablo Galindo

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115154


File: python.info,  Node: Núcleo e embutidos<29>,  Next: Biblioteca<33>,  Prev: Biblioteca<32>,  Up: Python 3 13 0 alpha 5

1.23.22.4 Núcleo e embutidos
............................

   - gh-115154(1): Corrige um bug que estava fazendo com que a função
     *note tokenize.untokenize(): 166b. manipulasse literais nomeados
     unicode incorretamente.  Patch por Pablo Galindo

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115154


File: python.info,  Node: Biblioteca<33>,  Next: Núcleo e embutidos<30>,  Prev: Núcleo e embutidos<29>,  Up: Python 3 13 0 alpha 5

1.23.22.5 Biblioteca
....................

   - gh-104090(1): O rastreador de recursos de multiprocessamento agora
     sai com código de status diferente de zero se um vazamento de
     recurso for detectado.  Ele ainda sai com código de status 0 caso
     contrário.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/104090


File: python.info,  Node: Núcleo e embutidos<30>,  Next: Biblioteca<34>,  Prev: Biblioteca<33>,  Up: Python 3 13 0 alpha 5

1.23.22.6 Núcleo e embutidos
............................

   - gh-105858(1): Melhora os construtores para nós *note ast: 8.  Os
     argumentos de tipos de lista agora assumem como padrão uma lista
     vazia se omitidos, e os campos opcionais assumem como padrão
     ‘None’.  Os nós AST agora têm um atributo ‘__annotations__’ com os
     tipos esperados de seus atributos.  Passar argumentos extras não
     reconhecidos para nós AST está descontinuado e se tornará um erro
     no Python 3.15.  Omitir um argumento obrigatório para um nó AST
     está descontinuado e se tornará um erro no Python 3.15.  Patch por
     Jelle Zijlstra.

   - gh-101860(2): Expor atributo ‘__name__’ na propriedade.

   - gh-96497(3): Corrige resolução incorreta de variáveis de classe
     mutiladas usadas em expressões de atribuição em compreensões.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/105858

   (2) https://github.com/python/cpython/issues/101860

   (3) https://github.com/python/cpython/issues/96497


File: python.info,  Node: Biblioteca<34>,  Next: Documentação<13>,  Prev: Núcleo e embutidos<30>,  Up: Python 3 13 0 alpha 5

1.23.22.7 Biblioteca
....................

   - gh-116600(1): Corrige *note repr(): 800. para membros globais *note
     Flag: 623.

   - gh-116349(2): *note platform.java_ver(): 2a7. está descontinuado e
     será removido na versão 3.15.  Ele não foi testado em grande parte,
     tinha uma API confusa e era útil apenas para suporte a Jython.

   - gh-116143(3): Corrige uma corrida no pydoc ‘_start_server’,
     eliminando uma janela na qual ‘_start_server’ pode retornar um
     thread que está “servindo”, mas sem um conjunto ‘docserver’.

   - gh-116127(4): *note typing: 104.: implementa PEP 705(5) que
     adiciona suporte a *note typing.ReadOnly: 161. para *note
     typing.TypedDict: 162.

   - gh-116325(6): *note typing: 104.: levanta *note SyntaxError: 18d.
     em vez de *note AttributeError: 34b. em referências de
     encaminhamento como strings vazias.

   - gh-115957(7): Quando ‘asyncio.TaskGroup.create_task’ é chamado em
     um ‘asyncio.TaskGroup’ inativo, a corrotina fornecida será fechada
     (o que impede um ‘RuntimeWarning’).

   - gh-115978(8): Desabilita preadv(), readv(), pwritev() e writev() em
     WASI.

     No wasmtime para WASI 0.2, essas funções não passam no test_posix
     (‘https://github.com/bytecodealliance/wasmtime/issues/7830’).

   - gh-88352(9): Corrige o cálculo do próximo tempo de rollover no
     manipulador ‘logging.TimedRotatingFileHandler’.
     ‘computeRollover()’ agora sempre retorna um registro de data e hora
     maior que o tempo especificado e funciona corretamente durante a
     mudança de horário de verão.  ‘doRollover()’ não substitui mais o
     arquivo já rolado, evitando perda de dados quando executado à
     meia-noite ou durante tempo repetido na mudança de horário de
     verão.

   - gh-87115(10): Define ‘__main__.__spec__’ como ‘None’ ao executar um
     script com *note pdb: a5.

   - gh-76511(11): Corrige UnicodeEncodeError em
     ‘email.Message.as_string()’ que resulta quando uma mensagem que
     afirma estar no conjunto de caracteres ASCII na verdade tem
     caracteres não ASCII. Caracteres não ASCII agora são substituídos
     pelo caractere de substituição U+FFFD, como no manipulador de erros
     ‘replace’.

   - gh-89547(12): Adiciona suporte para formulários especiais de
     digitação aninhada como Final[ClassVar[int]].

   - gh-65824(13): Melhora o prompt ‘less’ em *note pydoc: b5.

   - gh-116040(14): [Enum] corrige chamadas por valor quando o segundo
     valor for falso; por exemplo.  Cardinal(1, 0)

   - gh-115821(15): [Enum] Melhora a mensagem de erro ao chamar
     super().__new__() em __new__ personalizado.

   - gh-85644(16): Usa a variável de ambiente ‘XDG_CURRENT_DESKTOP’ em
     *note webbrowser: 115. para verificar a área de trabalho.
     Prefira-a ao descontinuado ‘GNOME_DESKTOP_SESSION_ID’ para detecção
     do GNOME.

   - gh-75988(17): Corrigida *note unittest.mock.create_autospec():
     16f4. para passar a chamada para o objeto encapsulado para retornar
     o resultado real.

   - gh-115881(18): Corrige problema em que *note ast.parse(): 1a8.
     sinalizaria incorretamente gerenciadores de contexto condicional
     (como ‘with (x() if y else z()): ...’) como sintaxe inválida se
     ‘feature_version=(3, 8)’ fosse passado.  Isso reverte as alterações
     na gramática feitas como parte de gh-94949(19).

   - gh-115886(20): Corrige truncamento silencioso do nome com um
     caractere nulo incorporado em *note
     multiprocessing.shared_memory.SharedMemory: 174f.

   - gh-115532(21): Adiciona estimativa de densidade do kernel ao módulo
     de estatísticas.

   - gh-115714(22): No WASI, o módulo *note time: ee. não obtém mais o
     tempo de processo usando ‘times()’ ou ‘CLOCK_PROCESS_CPUTIME_ID’, a
     API do sistema não é confiável e provavelmente será removida do
     WASI. As funções de relógio afetadas retornam para chamar
     ‘clock()’.

   - gh-115809(23): Melhora o algoritmo para calcular quais arquivos de
     log revertidos devem ser excluídos em
     ‘logging.TimedRotatingFileHandler’.  Agora é confiável para
     manipuladores sem ‘namer’ e com ‘namer’ determinístico arbitrário
     que deixa a parte de data e hora no nome do arquivo inalterada.

   - gh-74668(24): As funções *note urllib.parse: 10a. *note parse_qs():
     27a. e *note parse_qsl(): 279. agora suportam argumentos de bytes
     contendo dados não ASCII brutos e codificados em porcentagem.

   - gh-67044(25): *note csv.writer(): 487. agora sempre coloca aspas ou
     escapa ‘'\r'’ e ‘'\n'’, independentemente do valor
     'lineterminator'.

   - gh-115712(26): Restaura o suporte do delimitador de espaço com
     ‘skipinitialspace=True’ em *note csv: 29.  *note csv.writer(): 487.
     agora coloca aspas em campos vazios se o delimitador for um espaço
     e skipinitialspace for true e levanta uma exceção se aspas não
     forem possíveis.

   - gh-112364(27): Corrigido *note ast.unparse(): 8eb. para manipular
     format_spec com ‘"’, ‘'’ ou ‘\\’.  Corrigido por Frank Hoffmann.

   - gh-112997(28): Para de registrar argumentos de retorno de chamada
     potencialmente sensíveis em *note asyncio: a. a menos que o modo de
     depuração esteja ativo.

   - gh-114914(29): Corrige um problema em que um ‘StreamWriter’
     abandonado não seria coletado como lixo.

   - gh-111358(30): Corrige um bug em
     ‘asyncio.BaseEventLoop.shutdown_default_executor()’ para garantir
     que o tempo limite passado para a corrotina se comporte conforme o
     esperado.

   - gh-115618(31): Corrige a diminuição inadequada da contagem de
     referência para o argumento ‘None’ em métodos *note property: 194.
     *note getter(): 1750, *note setter(): 1751. e *note deleter():
     1752.

   - gh-112720(32): Refatora ‘dis.ArgResolver’ para tornar possível
     fazer subclasse e alterar a maneira como argumentos de salto são
     interpretados.

   - gh-112006(33): Corrige *note inspect.unwrap(): f90. para tipos com
     o descritor de dados ‘__wrapper__’.  Corrige *note
     inspect.Signature.from_callable(): 73a. para embutido *note
     classmethod(): 166. e *note staticmethod(): 416.

   - gh-101293(34): Adiciona suporte a chamáveis com o método
     ‘__call__()’ e tipos com métodos ‘__new__()’ e ‘__init__()’
     definidos como métodos de classe, métodos estáticos, métodos
     vinculados, funções parciais e outros tipos de métodos e
     descritores em *note inspect.Signature.from_callable(): 73a.

   - gh-103092(35): Isola ‘_lsprof’ (aplica a PEP 687(36)).

   - gh-113942(37): *note pydoc: b5. não ignora mais funções globais
     implementadas como métodos embutidos, como ‘MethodDescriptorType’ e
     ‘WrapperDescriptorType’.

   - gh-115256(38): Adicionado DeprecationWarning ao acessar o atributo
     tarfile de objetos TarInfo.  O atributo nunca é usado internamente
     e só é anexado ao TarInfos quando o tarfile é aberto no modo de
     gravação, não no modo de leitura.  O atributo cria um ciclo de
     referência desnecessário que pode causar corrupção ao não fechar o
     identificador após gravar um tarfile.

   - gh-115197(39): ‘urllib.request’ não resolve mais o nome do host
     antes de verificá-lo em relação à lista de bypass de proxy do
     sistema no macOS e Windows.

   - gh-113812(40): ‘DatagramTransport.sendto()’ agora enviará
     datagramas de comprimento zero se for chamado com um objeto de
     bytes vazio.  O controle de fluxo de transporte agora também
     considera o cabeçalho do datagrama ao calcular o tamanho do buffer.

   - gh-114763(41): Protege os módulos carregados com *note
     importlib.util.LazyLoader: ccd. de condições de corrida quando
     vários threads tentam acessar atributos antes que o carregamento
     seja concluído.

   - gh-114709(42): ‘posixpath.commonpath()’ agora levanta uma exceção
     *note ValueError: 202. quando passado um iterável vazio.
     Anteriormente, *note IndexError: 157e. era levantada.

     ‘posixpath.commonpath()’ agora levanta uma exceção *note TypeError:
     2c3. quando passado ‘None’.  Anteriormente, *note ValueError: 202.
     era levantada.

   - gh-114610(43): Corrige bug onde *note pathlib.PurePath.with_stem():
     1753. convertia um sufixo de caminho não vazio em um radical quando
     recebia um argumento 'stem' vazio.  Agora levanta *note ValueError:
     202, assim como *note pathlib.PurePath.with_suffix(): 1703. faz
     quando chamado em um caminho com um radical vazio, dado um
     argumento 'suffix' não vazio.

   - gh-107361(44): Adiciona *note ssl.VERIFY_X509_PARTIAL_CHAIN: 156. e
     ‘VERIFY_X509_STRICT’ ao contexto SSL padrão criado com *note
     ssl.create_default_context(): 155.

   - gh-112281(45): Permite a criação de *note união de tipos: 7c3. para
     *note typing.Annotated: 944. com metadados não-estruturáveis.

   - gh-111775(46): Corrige
     ‘importlib.resources.simple.ResourceHandle.open()’ para modo texto,
     adicionado argumento ‘stream’ ausente.

   - gh-90095(47): Faz .pdbrc e -c funcionarem com quaisquer comandos
     pdb válidos.

   - gh-107625(48): Levanta *note configparser.ParsingError: 505. dos
     métodos *note read(): 14b0. e *note read_file(): 506. de *note
     configparser.ConfigParser: 1c8. se uma chave sem um valor
     correspondente for continuada (isto é, seguida por uma linha
     indentada).

   - gh-107155(49): Corrige saída incorreta de ‘help(x)’ onde ‘x’ é uma
     função *note lambda: 12df, que tem um atributo de dicionário
     ‘__annotations__’ com uma chave ‘"return"’.

   - gh-57141(50): Adiciona opção para comparações 'não rasas' para
     *note filecmp.dircmp: f73. como *note filecmp.cmp(): 1754.  Patch
     original por Steven Ward.  Aprimorado por Tobias Rautenkranz

   - gh-69990(51): ‘Profile.print_stats()’ foi melhorado para aceitar
     vários argumentos de classificação.  Correção por Chiu-Hsiang Hsu e
     Furkan Onder.

   - gh-104061(52): Adiciona constante ‘socket.SO_BINDTOIFINDEX’.

   - gh-60346(53): Corrige ArgumentParser inconsistente com
     parse_known_args.

   - gh-102389(54): Adiciona ‘windows_31j’ aos apelidos para o codec
     ‘cp932’

   - gh-72249(55): Always include the *note module: 1755. name in the
     *note repr(): 800. of *note functools.partial(): 414. objects.
     Patch by Furkan Onder and Anilyka Barry.

   - gh-100985(56): Atualiza HTTPSConnection para encapsular
     consistentemente endereços IPv6 ao usar um proxy.

   - gh-100884(57): email: corrige dobramento incorreto de vírgula em
     listas de endereços em várias linhas em combinação com codificação
     unicode.

   - gh-95782(58): Corrige ‘io.BufferedReader.tell()’,
     ‘io.BufferedReader.seek()’, ‘_pyio.BufferedReader.tell()’,
     ‘io.BufferedRandom.tell()’, ‘io.BufferedRandom.seek()’ e
     ‘_pyio.BufferedRandom.tell()’ sendo capazes de retornar
     deslocamentos negativos.

   - gh-96310(59): Corrige um traceback em *note argparse: 6. quando
     todas as opções em um grupo mutuamente exclusivo são suprimidas.

   - gh-93205(60): Corrige um bug em *note
     logging.handlers.TimedRotatingFileHandler: f95. onde várias
     instâncias de manipulador rotativo apontando para arquivos com o
     mesmo nome, mas extensões diferentes, entrariam em conflito e não
     excluiriam os arquivos corretos.

   - bpo-31116(61): Adiciona codificação Z85 a ‘base64’.

   - bpo-44865(62): Adiciona chamada ausente para função de localização
     em *note argparse: 6.

   - bpo-43952(63): Corrige *note
     multiprocessing.connection.Listener.accept(): 1756. para aceitar
     bytes vazios como authkey.  Não aceitar bytes vazios como chave faz
     com que ele trave indefinidamente.

   - bpo-42125(64): linecache: obtém nome do módulo de ‘__spec__’ se
     disponível.  Isso permite obter código-fonte para o módulo
     ‘__main__’ quando um carregador personalizado é usado.

   - bpo-41122(65): Não passar argumentos corretamente para *note
     functools.singledispatchmethod(): 9f8. agora levanta um TypeError
     em vez de atingir um índice fora dos limites internamente.

   - bpo-40818(66): O asyncio REPL agora executa *note
     sys.__interactivehook__: ffd. na inicialização.  A implementação
     padrão de *note sys.__interactivehook__: ffd. fornece preenchimento
     automático para o asyncio REPL. O patch é uma contribuição por Rémi
     Lapeyre.

   - bpo-33775(67): Adiciona o texto de ajuda ‘default’ e ‘version’ para
     localização no argparse.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/116600

   (2) https://github.com/python/cpython/issues/116349

   (3) https://github.com/python/cpython/issues/116143

   (4) https://github.com/python/cpython/issues/116127

   (5) https://peps.python.org/pep-0705/

   (6) https://github.com/python/cpython/issues/116325

   (7) https://github.com/python/cpython/issues/115957

   (8) https://github.com/python/cpython/issues/115978

   (9) https://github.com/python/cpython/issues/88352

   (10) https://github.com/python/cpython/issues/87115

   (11) https://github.com/python/cpython/issues/76511

   (12) https://github.com/python/cpython/issues/89547

   (13) https://github.com/python/cpython/issues/65824

   (14) https://github.com/python/cpython/issues/116040

   (15) https://github.com/python/cpython/issues/115821

   (16) https://github.com/python/cpython/issues/85644

   (17) https://github.com/python/cpython/issues/75988

   (18) https://github.com/python/cpython/issues/115881

   (19) https://github.com/python/cpython/issues/94949

   (20) https://github.com/python/cpython/issues/115886

   (21) https://github.com/python/cpython/issues/115532

   (22) https://github.com/python/cpython/issues/115714

   (23) https://github.com/python/cpython/issues/115809

   (24) https://github.com/python/cpython/issues/74668

   (25) https://github.com/python/cpython/issues/67044

   (26) https://github.com/python/cpython/issues/115712

   (27) https://github.com/python/cpython/issues/112364

   (28) https://github.com/python/cpython/issues/112997

   (29) https://github.com/python/cpython/issues/114914

   (30) https://github.com/python/cpython/issues/111358

   (31) https://github.com/python/cpython/issues/115618

   (32) https://github.com/python/cpython/issues/112720

   (33) https://github.com/python/cpython/issues/112006

   (34) https://github.com/python/cpython/issues/101293

   (35) https://github.com/python/cpython/issues/103092

   (36) https://peps.python.org/pep-0687/

   (37) https://github.com/python/cpython/issues/113942

   (38) https://github.com/python/cpython/issues/115256

   (39) https://github.com/python/cpython/issues/115197

   (40) https://github.com/python/cpython/issues/113812

   (41) https://github.com/python/cpython/issues/114763

   (42) https://github.com/python/cpython/issues/114709

   (43) https://github.com/python/cpython/issues/114610

   (44) https://github.com/python/cpython/issues/107361

   (45) https://github.com/python/cpython/issues/112281

   (46) https://github.com/python/cpython/issues/111775

   (47) https://github.com/python/cpython/issues/90095

   (48) https://github.com/python/cpython/issues/107625

   (49) https://github.com/python/cpython/issues/107155

   (50) https://github.com/python/cpython/issues/57141

   (51) https://github.com/python/cpython/issues/69990

   (52) https://github.com/python/cpython/issues/104061

   (53) https://github.com/python/cpython/issues/60346

   (54) https://github.com/python/cpython/issues/102389

   (55) https://github.com/python/cpython/issues/72249

   (56) https://github.com/python/cpython/issues/100985

   (57) https://github.com/python/cpython/issues/100884

   (58) https://github.com/python/cpython/issues/95782

   (59) https://github.com/python/cpython/issues/96310

   (60) https://github.com/python/cpython/issues/93205

   (61) https://bugs.python.org/issue?@action=redirect&bpo=31116

   (62) https://bugs.python.org/issue?@action=redirect&bpo=44865

   (63) https://bugs.python.org/issue?@action=redirect&bpo=43952

   (64) https://bugs.python.org/issue?@action=redirect&bpo=42125

   (65) https://bugs.python.org/issue?@action=redirect&bpo=41122

   (66) https://bugs.python.org/issue?@action=redirect&bpo=40818

   (67) https://bugs.python.org/issue?@action=redirect&bpo=33775


File: python.info,  Node: Documentação<13>,  Next: Testes<16>,  Prev: Biblioteca<34>,  Up: Python 3 13 0 alpha 5

1.23.22.8 Documentação
......................

   - gh-115399(1): Documenta CVE 2023-52425(2) do Expat <2.6.0 em
     “Vulnerabilidades em XML”.

   - gh-109653(3): Melhora o tempo de importação de *note uuid: 110. no
     Linux.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115399

   (2) https://www.cve.org/CVERecord?id=CVE-2023-52425

   (3) https://github.com/python/cpython/issues/109653


File: python.info,  Node: Testes<16>,  Next: Construção<16>,  Prev: Documentação<13>,  Up: Python 3 13 0 alpha 5

1.23.22.9 Testes
................

   - gh-71052(1): Adiciona exclusões de teste para dar suporte à
     execução do conjunto de testes no Android.

   - gh-71052(2): Habilita ‘test_concurrent_futures’ em plataformas que
     oferecem suporte a threads, mas não multiprocessamento.

   - gh-115796(3): Faz com que ‘_testinternalcapi.assemble_code_object’
     construa a tabela de exceções para o objeto de código.

   - gh-115720(4): Testes de vazamento (‘-R’, ‘--huntrleaks’) agora
     mostram um resumo do número de vazamentos encontrados em cada
     iteração.

   - gh-115122(5): Adiciona a opção ‘--bisect’ ao executor de teste
     regrtest: execute testes com falha com ‘test.bisect_cmd’ para
     identificar testes com falha.  Patch por Victor Stinner.

   - gh-115596(6): Corrige ‘ProgramPriorityTests’ em ‘test_os’ alterando
     permanentemente a prioridade do processo.

   - gh-115556(7): No Windows, vírgulas passadas em argumentos para
     ‘Tools\buildbot\test.bat’ e ‘PCbuild\\rt.bat’ agora são manipuladas
     corretamente.

   - gh-115420(8): Corrige tradução de alvos de manipuladores de exceção
     por ‘_testinternalcapi.optimize_cfg’.

   - gh-115376(9): Corrige falha de segmentação em
     ‘_testinternalcapi.compiler_codegen’ em entrada incorreta.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/71052

   (2) https://github.com/python/cpython/issues/71052

   (3) https://github.com/python/cpython/issues/115796

   (4) https://github.com/python/cpython/issues/115720

   (5) https://github.com/python/cpython/issues/115122

   (6) https://github.com/python/cpython/issues/115596

   (7) https://github.com/python/cpython/issues/115556

   (8) https://github.com/python/cpython/issues/115420

   (9) https://github.com/python/cpython/issues/115376


File: python.info,  Node: Construção<16>,  Next: Windows<14>,  Prev: Testes<16>,  Up: Python 3 13 0 alpha 5

1.23.22.10 Construção
.....................

   - gh-116313(1): Faz com que construções WASI funcionem no wasmtime 18
     com primitivos WASI 0.2/preview2.

   - gh-71052(2): Altera *note sys.platform: a97. do Android de
     ‘"linux"’ para ‘"android"’.

   - gh-116117(3): Faz backport da PR #42 da ‘libb2’ para corrigir a
     compilação do CPython no Windows de 32 bits com ‘clang-cl’.

   - gh-71052(4): Corrige vários problemas de construção do Android

   - gh-114099(5): Um projeto de testbed foi adicionado para executar o
     conjunto de testes no iOS.

   - gh-115350(6): Corrige o módulo de construção ctypes com
     -DWIN32_LEAN_AND_MEAN definido

   - gh-111225(7): Vincula módulos de extensão ao libpython no Android.

   - gh-115737(8): O nome de instalação do libPython agora está definido
     corretamente para compilações macOS sem framework.

   - gh-114099(9): Os alvos do Makefile foram adicionados para oferecer
     suporte à compilação de uma construção de framework compatível com
     iOS.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/116313

   (2) https://github.com/python/cpython/issues/71052

   (3) https://github.com/python/cpython/issues/116117

   (4) https://github.com/python/cpython/issues/71052

   (5) https://github.com/python/cpython/issues/114099

   (6) https://github.com/python/cpython/issues/115350

   (7) https://github.com/python/cpython/issues/111225

   (8) https://github.com/python/cpython/issues/115737

   (9) https://github.com/python/cpython/issues/114099


File: python.info,  Node: Windows<14>,  Next: macOS<9>,  Prev: Construção<16>,  Up: Python 3 13 0 alpha 5

1.23.22.11 Windows
..................

   - gh-116012(1): Garante que o valor de ‘GetLastError()’ seja
     preservado em todas as operações com a GIL.

   - gh-115582(2): Construir extensões destinadas a construções com
     threads livres do CPython agora exigem a compilação manual com
     ‘/DPy_GIL_DISABLED’ ao usar uma instalação regular.  Espera-se que
     isso mude em versões futuras.

   - gh-115554(3): O instalador agora tem regras mais rígidas sobre a
     atualização do *note Inicializador Python para Windows: 5be.  Em
     geral, a maioria dos usuários tem apenas um único iniciador
     instalado e não verá nenhuma diferença.  Quando vários iniciadores
     foram instalados, a opção de instalar o iniciador é desabilitada
     até que todos, exceto um, tenham sido removidos.  O downgrade do
     iniciador (que nunca foi permitido) agora é mais obviamente
     bloqueado.

   - gh-115543(4): *note Inicializador Python para Windows: 5be. agora
     pode detectar o Python 3.13 quando instalado da Microsoft Store e
     instalará o Python 3.12 por padrão quando
     ‘PYLAUNCHER_ALLOW_INSTALL’ estiver definido.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/116012

   (2) https://github.com/python/cpython/issues/115582

   (3) https://github.com/python/cpython/issues/115554

   (4) https://github.com/python/cpython/issues/115543


File: python.info,  Node: macOS<9>,  Next: IDLE<13>,  Prev: Windows<14>,  Up: Python 3 13 0 alpha 5

1.23.22.12 macOS
................

   - gh-116145(1): Atualiza instalador do macOS para Tcl/Tk 8.6.14.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/116145


File: python.info,  Node: IDLE<13>,  Next: Ferramentas/Demos<9>,  Prev: macOS<9>,  Up: Python 3 13 0 alpha 5

1.23.22.13 IDLE
...............

   - gh-88516(1): No macOS, mostra um ícone de proxy na barra de título
     das janelas do editor para corresponder ao comportamento da
     plataforma.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/88516


File: python.info,  Node: Ferramentas/Demos<9>,  Next: API C<17>,  Prev: IDLE<13>,  Up: Python 3 13 0 alpha 5

1.23.22.14 Ferramentas/Demos
............................

   - gh-100176(1): Remove Tools/{io,cc,string}bench desatualizado

   - bpo-45101(2): Adiciona consistência na mensagem de uso de E/S entre
     2 versões do python-config.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100176

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45101


File: python.info,  Node: API C<17>,  Prev: Ferramentas/Demos<9>,  Up: Python 3 13 0 alpha 5

1.23.22.15 API C
................

   - gh-114626(1): Adiciona novamente o nome
     ‘_PyCFunctionFastWithKeywords’, removido no Python 3.13 alpha 4 por
     engano.  Manter o antigo nome privado
     ‘_PyCFunctionFastWithKeywords’ (Python 3.7) como um apelido para o
     novo nome público ‘PyCFunctionFastWithKeywords’ (Python 3.13a4).
     Patch por Victor Stinner.

   - gh-111418(2): Adiciona as macros C *note PyHASH_MODULUS: 175f,
     *note PyHASH_BITS: 1760, *note PyHASH_INF: 1761. e *note
     PyHASH_IMAG: 1762.  Patch por Sergey B Kirpichev.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/114626

   (2) https://github.com/python/cpython/issues/111418


File: python.info,  Node: Python 3 13 0 alpha 4,  Next: Python 3 13 0 alpha 3,  Prev: Python 3 13 0 alpha 5,  Up: Changelog

1.23.23 Python 3.13.0 alpha 4
-----------------------------

'Data de lançamento: 2024-02-15'

* Menu:

* Segurança: Segurança<15>.
* Núcleo e embutidos: Núcleo e embutidos<31>.
* Biblioteca: Biblioteca<35>.
* Documentação: Documentação<14>.
* Testes: Testes<17>.
* Construção: Construção<17>.
* Windows: Windows<15>.
* macOS: macOS<10>.
* IDLE: IDLE<14>.
* Ferramentas/Demos: Ferramentas/Demos<10>.
* API C: API C<18>.


File: python.info,  Node: Segurança<15>,  Next: Núcleo e embutidos<31>,  Up: Python 3 13 0 alpha 4

1.23.23.1 Segurança
...................

   - gh-115399(1): Atualiza libexpat empacotado para 2.6.0

   - gh-115243(2): Corrige possíveis travamentos em *note
     collections.deque.index(): dfa. quando o deque é modificado
     simultaneamente.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115399

   (2) https://github.com/python/cpython/issues/115243


File: python.info,  Node: Núcleo e embutidos<31>,  Next: Biblioteca<35>,  Prev: Segurança<15>,  Up: Python 3 13 0 alpha 4

1.23.23.2 Núcleo e embutidos
............................

   - gh-112087(1): Para um iterador reverso vazio for, lista será
     reduzida para *note reversed(): 869.  Patch por Donghee Na

   - gh-114570(2): Adiciona exceção *note PythonFinalizationError: 14d.
     Esta exceção derivada de *note RuntimeError: 195. é levantada
     quando uma operação é bloqueada durante a *note finalização do
     Python: 14e.  Patch por Victor Stinner.

   - gh-114695(3): Adiciona *note sys._clear_internal_caches(): 1766,
     que limpa todos os caches internos relacionados ao desempenho (e
     descontinua a função menos geral *note sys._clear_type_cache():
     1767.).

   - gh-114828(4): Corrige travamentos de compilação em exemplos de
     código incomuns usando *note super(): 4db. dentro de uma
     compreensão em um corpo de classe.

   - gh-112069(5): Adapta os métodos *note set: 5d9. e *note frozenset:
     5da. para Argument Clinic.

   - gh-115011(6): Setters para membros com um tipo inteiro sem sinal
     agora oferecem suporte ao mesmo intervalo de valores válidos para
     objetos que têm um método *note __index__(): 71d. como para *note
     int: 257.

   - gh-114887(7): Alterada a validação do tipo de soquete em *note
     create_datagram_endpoint(): 733. para aceitar todos os soquetes
     não-stream.  Isso corrige uma regressão na compatibilidade com
     soquetes brutos.

   - gh-114944(8): Corrige uma corrida entre ‘PyParkingLot_Park’ e
     ‘_PyParkingLot_UnparkAll’.

   - gh-113462(9): Limita o número de versões que uma única classe pode
     usar.  Impede que algumas classes rebeldes usem todos os números de
     versão.

   - gh-76763(10): A função embutido *note chr(): 1768. agora sempre
     levanta *note ValueError: 202. para valores fora do intervalo
     válido.  Anteriormente, levantava *note OverflowError: 885. para
     valores muito grandes ou pequenos.

   - gh-114806(11): Não especializa mais chamadas para classes, se essas
     classes tiverem metaclasses.  Corrige bug onde o método ‘__call__’
     da metaclasse não estava sendo chamado.

   - gh-107944(12): Melhora mensagem de erro para chamadas de função com
     argumentos nomeados inválidos via getargs

   - gh-112529(13): A construção com threads livres não aloca mais
     espaço para a estrutura ‘PyGC_Head’ em objetos que oferecem suporte
     a coleta de lixo cíclica.  Vários outros campos e estruturas de
     dados são usados como substituições, incluindo ‘ob_gc_bits’,
     ‘ob_tid’ e estruturas de dados internas mimalloc.

   - gh-114456(14): Reduz o limite de recursão em uma construção de
     depuração do WASI.

   - gh-114083(15): O compilador aplica o dobramento de LOAD_CONST com a
     instrução a seguir em uma passagem separada antes de outras
     otimizações.  Isso permite o jump threading em certas
     circunstâncias.

   - gh-114388(16): Corrige um *note RuntimeWarning: 1bd. emitido ao
     atribuir um valor inteiro que não é uma instância de *note int:
     257. a um atributo que corresponde a um membro struct C de *note
     type: 1769. T_UINT e T_ULONG. Corrige um *note RuntimeWarning: 1bd.
     duplo emitido ao atribuir um valor inteiro negativo a um atributo
     que corresponde a um membro struct C do tipo T_UINT.

   - gh-114265(17): O compilador propaga números de linha antes da
     otimização, levando a mais oportunidades de otimização e removendo
     a necessidade do hack ‘guarantee_lineno_for_exits’.

   - gh-112529(18): A construção com threads livres agora tem sua
     própria implementação de GC segura para thread que usa mimalloc
     para encontrar objetos rastreados por GC. Não é geracional,
     diferente da implementação GC existente.

   - gh-114050(19): Corrige falha de segmentação causada por uma string
     de formato incorreta na exceção ‘TypeError’ quando mais de dois
     argumentos são passados para ‘int’.

   - gh-112354(20): A instrução ‘END_FOR’ agora exibe apenas um valor.
     Isso é para oferecer melhor suporte a saídas laterais em laços.

   - gh-113884(21): Torna *note queue.SimpleQueue: b80. segura para
     thread quando a GIL estiver desabilitada.

   - gh-114058(22): Implementa as bases do eliminador de redundância de
     Nível 2.

   - gh-113939(23): frame.clear(): Limpa frame.f_locals também, e não
     apenas os locals rápidos.  Isso é relevante quando frame.f_locals
     foi acessado, o que também conteria referências a todos os locais.

   - gh-112050(24): Converte *note collections.deque: 5dc. para usar
     Argument Clinic.

   - gh-112050(25): Torna os métodos em *note collections.deque: 5dc.
     seguros para thread quando a GIL estiver desabilitada.

   - gh-113464(26): Adiciona uma opção (‘--enable-experimental-jit’ para
     construções baseadas em ‘configure’ ou ‘--experimental-jit’ para
     construções baseadas em ‘PCbuild’) para construir um compilador
     'experimental' just-in-time, baseado em copy-and-patch(27)

   - gh-113055(28): Torna interp->obmalloc um ponteiro.  Para
     interpretadores que compartilham estado com o interpretador
     principal, isso aponta para a mesma estrutura de memória estática.
     Para interpretadores com seu próprio estado obmalloc, ele é alocado
     em heap.  Adiciona free_obmalloc_arenas() que liberará as arenas
     obmalloc e as estruturas de árvore radix para interpretadores com
     seu próprio estado obmalloc.

   - gh-55664(29): Adiciona um aviso ao criar *note type: d6b. usando um
     dicionário de espaço de nomes com chaves não string.  Patch por
     Daniel Urban e Furkan Onder.

   - gh-104530(30): Usa variáveis de condição nativas do Win32.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/112087

   (2) https://github.com/python/cpython/issues/114570

   (3) https://github.com/python/cpython/issues/114695

   (4) https://github.com/python/cpython/issues/114828

   (5) https://github.com/python/cpython/issues/112069

   (6) https://github.com/python/cpython/issues/115011

   (7) https://github.com/python/cpython/issues/114887

   (8) https://github.com/python/cpython/issues/114944

   (9) https://github.com/python/cpython/issues/113462

   (10) https://github.com/python/cpython/issues/76763

   (11) https://github.com/python/cpython/issues/114806

   (12) https://github.com/python/cpython/issues/107944

   (13) https://github.com/python/cpython/issues/112529

   (14) https://github.com/python/cpython/issues/114456

   (15) https://github.com/python/cpython/issues/114083

   (16) https://github.com/python/cpython/issues/114388

   (17) https://github.com/python/cpython/issues/114265

   (18) https://github.com/python/cpython/issues/112529

   (19) https://github.com/python/cpython/issues/114050

   (20) https://github.com/python/cpython/issues/112354

   (21) https://github.com/python/cpython/issues/113884

   (22) https://github.com/python/cpython/issues/114058

   (23) https://github.com/python/cpython/issues/113939

   (24) https://github.com/python/cpython/issues/112050

   (25) https://github.com/python/cpython/issues/112050

   (26) https://github.com/python/cpython/issues/113464

   (27) https://fredrikbk.com/publications/copy-and-patch.pdf

   (28) https://github.com/python/cpython/issues/113055

   (29) https://github.com/python/cpython/issues/55664

   (30) https://github.com/python/cpython/issues/104530


File: python.info,  Node: Biblioteca<35>,  Next: Documentação<14>,  Prev: Núcleo e embutidos<31>,  Up: Python 3 13 0 alpha 4

1.23.23.3 Biblioteca
....................

   - gh-115392(1): Corrige um bug em *note doctest: 3a. onde números de
     linha incorretos seriam relatados para funções decoradas.

   - gh-114563(2): Corrige vários bugs de *note format(): 61f. ao usar a
     implementação C de *note Decimal: 29d.: * vazamento de memória em
     alguns casos raros ao usar a opção de formato ‘z’ (coagir negativo
     0) * saída incorreta ao aplicar a opção de formato ‘z’ ao tipo ‘F’
     (ponto fixo com ‘NAN’ maiúsculo / ‘INF’) * saída incorreta ao
     aplicar a opção de formato ‘#’ (formato alternativo)

   - gh-102840(3): Corrige traceback confuso quando as operações
     floordiv, mod ou divmod acontecem entre instâncias de *note
     fractions.Fraction: 1e7. e *note complex: 2f8.

   - gh-115165(4): A maioria das exceções agora são ignoradas ao tentar
     definir o atributo ‘__orig_class__’ em objetos retornados ao chamar
     apelidos genéricos *note typing: 104. (incluindo aliases genéricos
     criados usando *note typing.Annotated: 944.).  Anteriormente,
     apenas *note AttributeError: 34b. era ignorada.  Patch por Dave
     Shawley.

   - gh-112903(5): Corrige erros de “issubclass() arg 1 must be a class”
     em certos casos de herança múltipla com aliases genéricos
     (regressão nas primeiras versões alfa 3.13).

   - gh-115133(6): Corrige testes para *note XMLPullParser: 1029. com
     Expat 2.6.0.

   - gh-115059(7): ‘io.BufferedRandom.read1()’ agora limpa o buffer de
     gravação subjacente.

   - gh-79382(8): ‘**’ no final não permite mais corresponder arquivos e
     caminhos não existentes em *note glob(): 29f. recursivo.

   - gh-67837(9): Evita condições de corrida na criação de diretórios
     durante a extração simultânea em *note tarfile: de. e *note
     zipfile: 131.

   - gh-115060(10): Acelera *note pathlib.Path.glob(): 22d. removendo a
     correspondência de regex redundante.

   - gh-97928(11): Reverte parcialmente o comportamento de
     ‘tkinter.Text.count()’.  Por padrão, ele preserva o comportamento
     de versões mais antigas do Python, exceto que definir ‘wantobjects’
     como 0 não tem mais efeito.  Adiciona um novo parâmetro
     'return_ints': especificar ‘return_ints=True’ faz com que
     ‘Text.count()’ sempre retorna a contagem única como um inteiro em
     vez de uma tupla de 1 elemento ou ‘None’.

   - gh-114628(12): Quando csv.Error é levantada ao manipular TypeError,
     não exibir o traceback de TypeError.

   - gh-85984(13): Adicionado ‘_POSIX_VDISABLE’ de ‘<unistd.h>’ de C
     para *note termios: e1.

   - gh-114965(14): Atualiza pip empacotado para 24.0

   - gh-114959(15): *note tarfile: de. não ignora mais erros ao tentar
     extrair um diretório em cima de um arquivo.

   - gh-114894(16): Adiciona *note array.array.clear(): 1a2.

   - gh-114071(17): Suporte a subclasses de tupla usando auto() para
     valor de membro enum.

   - gh-109475(18): Corrige suporte ao valor de opção explícito “–” em
     *note argparse: 6. (por exemplo, ‘--option=--’).

   - gh-49766(19): Corrige comparação *note date: 1cd.-*note datetime:
     1cc.  Agora, os métodos de comparação especiais como ‘__eq__’ e
     ‘__lt__’ retornam *note NotImplemented: 7d3. se um dos comparandos
     for ‘date’ e o outro for ‘datetime’ em vez de ignorar a parte do
     tempo e o fuso horário ou retornar forçadamente “não igual” ou
     levantar *note TypeError: 2c3.  Ele torna a comparação das
     subclasses ‘date’ e ‘datetime’ mais simétrica e permite alterar o
     comportamento padrão substituindo os métodos de comparação
     especiais em subclasses.

   - gh-110190(20): Corrige estruturas ctypes com vetor na plataforma
     Windows ARM64 definindo ‘MAX_STRUCT_SIZE’ como 32 em stgdict.
     Patch por Diego Russo

   - gh-114678(21): Garante que o aviso de descontinuação para o
     especificador ‘N’ no formato *note Decimal: 29d. não seja levantada
     para casos em que ‘N’ aparece em outros lugares no especificador de
     formato.  Baseado no patch por Stefan Krah.

   - gh-70303(22): Retorna arquivos e diretórios de *note
     pathlib.Path.glob(): 22d. se um padrão termina com “‘**’”.
     Anteriormente, apenas diretórios eram retornados.

   - gh-109653(23): Melhora o tempo de importação de *note
     importlib.metadata: 7a. e *note email.utils: 50.

   - gh-113280(24): Corrige um vazamento de soquete aberto em casos
     raros quando ocorria um erro na criação de *note ssl.SSLSocket:
     8f0.

   - gh-77749(25): *note email.policy.EmailPolicy.fold(): 176b. agora
     sempre codifica caracteres não ASCII em cabeçalhos se *note utf8:
     e24. for falso.

   - gh-83383(26): A sincronização do banco de dados *note dbm.dumb: 32.
     agora é no-op se não houver modificação desde a abertura ou última
     sincronização.  O arquivo de diretório para um banco de dados *note
     dbm.dumb: 32. vazio recém-criado agora é criado imediatamente após
     a abertura, em vez de adiar isso até a sincronização ou o
     fechamento.

   - gh-91602(27): Adiciona o parâmetro somente-nomeado 'filter' a *note
     sqlite3.Connection.iterdump(): 247. para filtrar objetos de banco
     de dados para despejar.  Patch por Mariusz Felisiak.

   - gh-112451(28): Proíbe criar subclasse de Python puro *note
     datetime.timezone: 10fe.  Isso é consistente com a implementação da
     extensão C. Patch por Mariusz Felisiak.

   - gh-69893(29): Adiciona o método ‘close()’ para o iterador retornado
     por *note xml.etree.ElementTree.iterparse(): 273.

   - gh-109653(30): Reduz o tempo de importação do módulo *note
     threading: ed. em ~50%.  Patch por Daniel Hollas.

   - gh-114492(31): Torna o resultado de *note termios.tcgetattr():
     176c. reproduzível no Alpine Linux.  Anteriormente, ele poderia
     deixar um lixo aleatório em alguns campos.

   - gh-114315(32): Torna *note threading.Lock: 176d. uma classe real,
     não uma função de fábrica.  Adiciona ‘__new__’ ao tipo
     ‘_thread.lock’.

   - gh-100414(33): Adiciona *note dbm.sqlite3: 35. como um backend para
     *note dbm: 31, e torna-o o novo backend padrão ‘dbm’.  Patch por
     Raymond Hettinger e Erlend E. Aasland.

   - gh-113267(34): Reverte alterações em gh-106584(35) que tornavam as
     chamadas dos métodos ‘TestResult’ ‘startTest()’ e ‘stopTest()’
     desbalanceadas.

   - gh-75128(36): Ignora uma *note OSError: 417. em
     ‘asyncio.BaseEventLoop.create_server()’ quando o IPv6 estiver
     disponível, mas a interface não puder realmente suportá-lo.

   - gh-114423(37): As entradas ‘_DummyThread’ em ‘threading._active’
     agora são removidas automaticamente quando o thread relacionado
     morre.

   - gh-114257(38): Descarta o erro ‘FileNotFound’ em *note
     ctypes.util.find_library(): d6c. e retorna apenas ‘None’ no Linux.

   - gh-114321(39): Expõe mais constantes específicas da plataforma no
     módulo *note fcntl: 59. no Linux, macOS, FreeBSD e NetBSD.

   - gh-114328(40): A *note tty.setcbreak(): 176e. e a nova *note
     tty.cfmakecbreak(): 176f. não limpam mais o sinalizador ICRLF de
     entrada do terminal.  Isso corrige uma regressão introduzida na
     3.12 que não correspondia mais a como os sistemas operacionais
     definem o modo cbreak em suas páginas de manual ‘stty(1)’.

   - gh-114281(41): Remove dicas de tipo de ‘Lib/asyncio/staggered.py’.
     As anotações no projeto typeshed(42) devem ser usadas em vez disso.

   - gh-101438(43): Evite o ciclo de referência em
     ElementTree.iterparse.  O iterador retornado por
     ‘ElementTree.iterparse’ pode manter um descritor de arquivo.  O
     ciclo de referência impedia a limpeza rápida do descritor de
     arquivo se o iterador retornado não estivesse esgotado.

   - gh-114198(44): A assinatura para o método ‘__replace__’ em *note
     dataclasses: 2f. agora tem o primeiro argumento chamado ‘self’, em
     vez de ‘obj’.

   - gh-104522(45): *note OSError: 417. levantada ao executar um
     subprocesso agora tem apenas o atributo 'filename' definido como
     'cwd' se o erro foi causado por uma tentativa malsucedida de
     alterar o diretório atual.

   - gh-114149(46): Enum: manipula corretamente subclasses de tuplas em
     ‘__new__’ personalizado.

   - gh-83648(47): Suporta descontinuação de opções, argumentos
     posicionais e subcomandos em *note argparse: 6.

   - gh-114087(48): Acelera ‘dataclasses.asdict’ em até 1,35x.

   - gh-109534(49): Corrige um vazamento de referência em
     ‘asyncio.selector_events.BaseSelectorEventLoop’ quando negociações
     SSL falham.  Patch foi contribuição de Jamie Phan.

   - gh-79634(50): Aceita *note objetos caminho ou similares: 2a0. como
     padrões em *note pathlib.Path.glob(): 22d. e *note rglob(): 22e.

   - gh-112202(51): Garante que uma chamada *note
     asyncio.Condition.notify(): 1770. não seja perdida se a ‘Task’
     despertada for cancelada simultaneamente ou encontrar qualquer
     outro erro.

   - gh-113951(52): Corrige o comportamento dos métodos ‘tag_unbind()’
     das classes ‘tkinter.Text’ e ‘tkinter.Canvas’ com três argumentos.
     Anteriormente, ‘widget.tag_unbind(tag, sequence, funcid)’ destruía
     a vinculação atual para 'sequence', deixando 'sequence'
     desvinculado, e excluía o comando 'funcid'.  Agora, ele remove
     apenas 'funcid' da vinculação para 'sequence', mantendo outros
     comandos, e exclui o comando 'funcid'.  Ele deixa 'sequence'
     desvinculado somente se 'funcid' foi o último comando vinculado.

   - gh-97959(53): Corrige métodos de classe de renderização, métodos
     vinculados, métodos e apelidos de função em *note pydoc: b5.
     Métodos de classe não têm mais a nota “método de instância
     builtins.type”.  Notas correspondentes agora são adicionadas para
     métodos de classe e não vinculados.  Apelidos de método e função
     agora têm referências ao módulo ou à classe onde a origem foi
     definida se for diferente da atual.  Métodos vinculados agora são
     listados na seção de métodos estáticos.  Métodos de classes
     internas agora são suportados, bem como métodos de classes Python.

   - gh-113796(54): Adiciona mais verificações de validação no
     construtor *note csv.Dialect: 1771.  *note ValueError: 202. agora é
     levantada se o mesmo caractere for usado em funções diferentes.

   - gh-113732(55): Corrige suporte de *note QUOTE_NOTNULL: 484. e *note
     QUOTE_STRINGS: 485. em *note csv.reader(): 486.

   - gh-113225(56): Acelera *note pathlib.Path.walk(): 4a8. usando *note
     os.DirEntry.path: 1772. onde possível.

   - gh-89039(57): Quando o método replace() é chamado em uma subclasse
     de datetime, date ou time, chamar corretamente o construtor
     derivado.  Anteriormente, apenas o construtor da classe base era
     chamado.

     Além disso, certifica-se de passar valores de fold diferentes de
     zero ao criar subclasses em vários métodos.  Anteriormente, fold
     era ignorado silenciosamente.

   - gh-112919(58): Aceleração de *note datetime.datetime.replace():
     1513, *note datetime.date.replace(): 1773. e *note
     datetime.time.replace(): 1774.

   - gh-59013(59): Define o ponto de interrupção na primeira linha
     executável da função, em vez da linha de definição da função quando
     o usuário faz ‘break func’ usando *note pdb: a5.

   - gh-112343(60): Melhora o tratamento de variáveis de conveniência
     pdb para evitar a substituição de conteúdo de string.

   - gh-112240(61): Adiciona opção à CLI do módulo de calendar para
     especificar o dia da semana para começar cada semana.  Patch por
     Steven Ward.

   - gh-111741(62): Reconhece ‘image/webp’ como um formato padrão no
     módulo *note mimetypes: 8f.

   - gh-43457(63): Corrige o método do widget *note tkinter: f0.
     ‘wm_attributes()’.  Agora ele aceita o nome do atributo sem o
     prefixo menos para obter atributos de janela e permite especificar
     atributos e valores para ser definido como argumentos nomeados.
     Adiciona um novo argumento nomeado opcional 'return_python_dict':
     chamar ‘w.wm_attributes(return_python_dict=True)’ retorna os
     atributos como um dict em vez de uma tupla.  Chamar
     ‘w.wm_attributes()’ agora retorna uma tupla em vez de uma string se
     'wantobjects' foi definido como 0.

   - gh-82626(64): Muitas funções agora emitem um aviso se um valor
     booleano for passado como um argumento de descritor de arquivo.

   - gh-111051(65): Adicionada verificação para modificação de arquivo
     durante a depuração com *note pdb: a5.

   - gh-110345(66): Mostra o patchlevel Tcl/Tk (em vez da versão) em
     ‘tkinter._test()’.

   - gh-38807(67): Corrige a condição de corrida em *note trace: fd.  Em
     vez de verificar se um diretório existe e criá-lo, chame
     diretamente *note os.makedirs(): 21e. com o kwarg ‘exist_ok=True’.

   - gh-75705(68): Define o envelope unixfrom em *note mailbox.mbox:
     1775. e *note mailbox.MMDF: 1776.

   - gh-106233(69): Corrige o stacklevel em ‘InvalidTZPathWarning’
     durante a importação do módulo *note zoneinfo: 134.

   - gh-105102(70): Permita que *note ctypes.Union: 1777. seja aninhado
     em *note ctypes.Structure: 1d4. quando o endianness do sistema for
     o oposto das classes.

   - gh-104282(71): Corrige a desreferência de ponteiro nulo em
     ‘lzma._decode_filter_properties()’ devido ao tratamento impróprio
     de filtros BCJ com propriedades de comprimento zero.  Patch por
     Radislav Chugunov.

   - gh-96471(72): Adiciona terminação *note queue.Queue: 13db. com
     *note shutdown(): 23a.

   - gh-101599(73): Altera a formatação de opções de sinalizador
     argparse para remover redundância.

   - gh-85984(74): Adiciona funções pseudoterminais POSIX *note
     os.posix_openpt(): 1778, *note os.grantpt(): 1779, *note
     os.unlockpt(): 177a. e *note os.ptsname(): 177b.

   - gh-102512(75): Quando *note os.fork(): 197. é chamado de um thread
     estrangeiro (também conhecido como ‘_DummyThread’), o tipo do
     thread em um processo filho é alterado para ‘_MainThread’.  Também
     alterou seu nome e status como daemon, agora pode ser unido.

   - gh-88569(76): Adiciona *note os.path.isreserved(): 223, que
     identifica nomes de caminho reservados como “NUL”, “AUX” e “CON”.
     Esta função está disponível somente no Windows.

     Descontinua *note pathlib.PurePath.is_reserved(): 2a6.

   - bpo-38364(77): As funções ‘inspect’ ‘isgeneratorfunction’,
     ‘iscoroutinefunction’, ‘isasyncgenfunction’ agora oferecem suporte
     a funções encapsuladas ‘functools.partialmethod’ da mesma forma que
     oferecem suporte a ‘functools.partial’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115392

   (2) https://github.com/python/cpython/issues/114563

   (3) https://github.com/python/cpython/issues/102840

   (4) https://github.com/python/cpython/issues/115165

   (5) https://github.com/python/cpython/issues/112903

   (6) https://github.com/python/cpython/issues/115133

   (7) https://github.com/python/cpython/issues/115059

   (8) https://github.com/python/cpython/issues/79382

   (9) https://github.com/python/cpython/issues/67837

   (10) https://github.com/python/cpython/issues/115060

   (11) https://github.com/python/cpython/issues/97928

   (12) https://github.com/python/cpython/issues/114628

   (13) https://github.com/python/cpython/issues/85984

   (14) https://github.com/python/cpython/issues/114965

   (15) https://github.com/python/cpython/issues/114959

   (16) https://github.com/python/cpython/issues/114894

   (17) https://github.com/python/cpython/issues/114071

   (18) https://github.com/python/cpython/issues/109475

   (19) https://github.com/python/cpython/issues/49766

   (20) https://github.com/python/cpython/issues/110190

   (21) https://github.com/python/cpython/issues/114678

   (22) https://github.com/python/cpython/issues/70303

   (23) https://github.com/python/cpython/issues/109653

   (24) https://github.com/python/cpython/issues/113280

   (25) https://github.com/python/cpython/issues/77749

   (26) https://github.com/python/cpython/issues/83383

   (27) https://github.com/python/cpython/issues/91602

   (28) https://github.com/python/cpython/issues/112451

   (29) https://github.com/python/cpython/issues/69893

   (30) https://github.com/python/cpython/issues/109653

   (31) https://github.com/python/cpython/issues/114492

   (32) https://github.com/python/cpython/issues/114315

   (33) https://github.com/python/cpython/issues/100414

   (34) https://github.com/python/cpython/issues/113267

   (35) https://github.com/python/cpython/issues/106584

   (36) https://github.com/python/cpython/issues/75128

   (37) https://github.com/python/cpython/issues/114423

   (38) https://github.com/python/cpython/issues/114257

   (39) https://github.com/python/cpython/issues/114321

   (40) https://github.com/python/cpython/issues/114328

   (41) https://github.com/python/cpython/issues/114281

   (42) https://github.com/python/typeshed

   (43) https://github.com/python/cpython/issues/101438

   (44) https://github.com/python/cpython/issues/114198

   (45) https://github.com/python/cpython/issues/104522

   (46) https://github.com/python/cpython/issues/114149

   (47) https://github.com/python/cpython/issues/83648

   (48) https://github.com/python/cpython/issues/114087

   (49) https://github.com/python/cpython/issues/109534

   (50) https://github.com/python/cpython/issues/79634

   (51) https://github.com/python/cpython/issues/112202

   (52) https://github.com/python/cpython/issues/113951

   (53) https://github.com/python/cpython/issues/97959

   (54) https://github.com/python/cpython/issues/113796

   (55) https://github.com/python/cpython/issues/113732

   (56) https://github.com/python/cpython/issues/113225

   (57) https://github.com/python/cpython/issues/89039

   (58) https://github.com/python/cpython/issues/112919

   (59) https://github.com/python/cpython/issues/59013

   (60) https://github.com/python/cpython/issues/112343

   (61) https://github.com/python/cpython/issues/112240

   (62) https://github.com/python/cpython/issues/111741

   (63) https://github.com/python/cpython/issues/43457

   (64) https://github.com/python/cpython/issues/82626

   (65) https://github.com/python/cpython/issues/111051

   (66) https://github.com/python/cpython/issues/110345

   (67) https://github.com/python/cpython/issues/38807

   (68) https://github.com/python/cpython/issues/75705

   (69) https://github.com/python/cpython/issues/106233

   (70) https://github.com/python/cpython/issues/105102

   (71) https://github.com/python/cpython/issues/104282

   (72) https://github.com/python/cpython/issues/96471

   (73) https://github.com/python/cpython/issues/101599

   (74) https://github.com/python/cpython/issues/85984

   (75) https://github.com/python/cpython/issues/102512

   (76) https://github.com/python/cpython/issues/88569

   (77) https://bugs.python.org/issue?@action=redirect&bpo=38364


File: python.info,  Node: Documentação<14>,  Next: Testes<17>,  Prev: Biblioteca<35>,  Up: Python 3 13 0 alpha 4

1.23.23.4 Documentação
......................

   - gh-115233(1): Corrige um exemplo para *note LoggerAdapter: 1339. no
     Logging Cookbook.

   - gh-114123(2): Move a docstring do módulo *note csv: 29. para o
     módulo ‘csv’ em vez de reexportá-la do módulo interno ‘_csv’ e
     remove ‘__doc__’ de ‘csv.__all__’.

     Move ‘csv.__version__’ para o módulo ‘csv’ em vez de reexportá-lo
     do módulo interno ‘_csv’ e remove ‘__version__’ de ‘csv.__all__’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115233

   (2) https://github.com/python/cpython/issues/114123


File: python.info,  Node: Testes<17>,  Next: Construção<17>,  Prev: Documentação<14>,  Up: Python 3 13 0 alpha 4

1.23.23.5 Testes
................

   - gh-114099(1): Adicionadas exclusões de teste necessárias para
     executar o conjunto de testes no iOS.

   - gh-105089(2): Corrige o teste
     ‘test.test_zipfile.test_core.TestWithDirectory.test_create_directory_with_write’
     no AIX fazendo um AND bit a bit de 0xFFFF no modo , para que ele
     fique sincronizado com ‘zinfo.external_attr’

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/114099

   (2) https://github.com/python/cpython/issues/105089


File: python.info,  Node: Construção<17>,  Next: Windows<15>,  Prev: Testes<17>,  Up: Python 3 13 0 alpha 4

1.23.23.6 Construção
....................

   - gh-115167(1): Evita incluir ‘vcruntime140_threads.dll’ ao Python ao
     construir com o Visual Studio 2022 versão 17.8.

   - gh-113632(2): Promove o WASI para uma plataforma de nível 2 e
     remove o Emscripten do nível 3 em configure.ac.

   - gh-114099(3): configure e Makefile foram refatorados para acomodar
     construções de framework em plataformas Apple diferentes do macOS.

   - gh-114875(4): Adiciona ‘getgrent()’ como um pré-requisito para
     construir o módulo *note grp: 66.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115167

   (2) https://github.com/python/cpython/issues/113632

   (3) https://github.com/python/cpython/issues/114099

   (4) https://github.com/python/cpython/issues/114875


File: python.info,  Node: Windows<15>,  Next: macOS<10>,  Prev: Construção<17>,  Up: Python 3 13 0 alpha 4

1.23.23.7 Windows
.................

   - gh-115049(1): Corrige a falha do iniciador ‘py.exe’ quando
     executado como usuários sem perfis de usuário.

   - gh-115009(2): Atualize o instalador do Windows para usar o SQLite
     3.45.1.

   - gh-109991(3): Atualize a construção do Windows para usar o OpenSSL
     3.0.13.

   - gh-111239(4): Atualiza as construções do Windows para usar o zlib
     v1.3.1.

   - gh-100107(5): O iniciador ‘py.exe’ não tentará mais executar o
     redirecionador da Microsoft Store ao iniciar um script contendo um
     shebang ‘/usr/bin/env’

   - gh-112984(6): Adiciona binários de threads livres ao instalador do
     Windows como um componente opcional.

   - gh-89240(7): Permite que *note multiprocessing: 94. crie pools com
     mais de 62 processos.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115049

   (2) https://github.com/python/cpython/issues/115009

   (3) https://github.com/python/cpython/issues/109991

   (4) https://github.com/python/cpython/issues/111239

   (5) https://github.com/python/cpython/issues/100107

   (6) https://github.com/python/cpython/issues/112984

   (7) https://github.com/python/cpython/issues/89240


File: python.info,  Node: macOS<10>,  Next: IDLE<14>,  Prev: Windows<15>,  Up: Python 3 13 0 alpha 4

1.23.23.8 macOS
...............

   - gh-115009(1): Atualiza o instalador do macOS para usar o SQLite
     3.45.1.

   - gh-109991(2): Atualiza o instalador do macOS para usar o OpenSSL
     3.0.13.

   - gh-114490(3): Adiciona suporte de ligação Mach-O para *note
     platform.architecture(): 1781.

   - gh-87804(4): No macOS, o resultado de ‘os.statvfs’ e ‘os.fstatvfs’
     agora relata corretamente o tamanho de discos muito grandes, em
     versões anteriores o número relatado de blocos estava errado para
     discos com pelo menos 2**32 blocos.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115009

   (2) https://github.com/python/cpython/issues/109991

   (3) https://github.com/python/cpython/issues/114490

   (4) https://github.com/python/cpython/issues/87804


File: python.info,  Node: IDLE<14>,  Next: Ferramentas/Demos<10>,  Prev: macOS<10>,  Up: Python 3 13 0 alpha 4

1.23.23.9 IDLE
..............

   - gh-96905(1): No código de idlelib, para de redefinir os tipos
     embutidos ‘dict’ e ‘object’.

   - gh-103820(2): Revisa as ligações do IDLE para que os eventos do
     botão do mouse 4/5 em sistemas de janelas não X11 (por exemplo,
     Win32 e Aqua) não sejam confundidos com rolagem.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/96905

   (2) https://github.com/python/cpython/issues/103820


File: python.info,  Node: Ferramentas/Demos<10>,  Next: API C<18>,  Prev: IDLE<14>,  Up: Python 3 13 0 alpha 4

1.23.23.10 Ferramentas/Demos
............................

   - gh-113516(1): Não define ‘LDSHARED’ ao construir para WASI.

   - gh-109991(2): Atualiza fluxos de trabalho do GitHub CI para usar
     OpenSSL 3.0.13 e multissltests para usar 1.1.1w, 3.0.13, 3.1.5 e
     3.2.1.

   - gh-115015(3): Corrige um bug no Argument Clinic que gerava código
     incorreto para métodos sem parâmetros que usam a convenção de
     chamada *note METH_METHOD | METH_FASTCALL | METH_KEYWORDS: 1784.
     Apenas a contagem de parâmetros posicionais foi verificada;
     qualquer argumento nomeado passado seria aceito silenciosamente.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/113516

   (2) https://github.com/python/cpython/issues/109991

   (3) https://github.com/python/cpython/issues/115015


File: python.info,  Node: API C<18>,  Prev: Ferramentas/Demos<10>,  Up: Python 3 13 0 alpha 4

1.23.23.11 API C
................

   - gh-111140(1): Adiciona as funções *note PyLong_AsNativeBytes():
     361, *note PyLong_FromNativeBytes(): 362. e *note
     PyLong_FromUnsignedNativeBytes(): 363.

   - gh-114685(2): *note PyBuffer_FillInfo(): 760. agora levanta uma
     *note SystemError: 575. se chamada com *note PyBUF_READ: 1786. ou
     *note PyBUF_WRITE: 1787. como sinalizadores.  Esses sinalizadores
     devem ser usados apenas com a API C ‘PyMemoryView_*’.

   - gh-114685(3): *note PyObject_GetBuffer(): 399. agora levanta uma
     *note SystemError: 575. se chamado com *note PyBUF_READ: 1786. ou
     *note PyBUF_WRITE: 1787. como sinalizadores.  Esses sinalizadores
     devem ser usados somente com a API C ‘PyMemoryView_*’.

   - gh-114626(4): Adiciona os typedefs ‘PyCFunctionFast’ e
     ‘PyCFunctionFastWithKeywords’ (idênticos aos typedefs
     ‘_PyCFunctionFast’ e ‘_PyCFunctionFastWithKeywords’ existentes,
     apenas sem um prefixo ‘_’ inicial).

   - gh-114329(5): Adiciona *note PyList_GetItemRef(): 359, que é
     semelhante a *note PyList_GetItem(): 35a, mas retorna uma *note
     referência forte: 33d. em vez de uma *note referência emprestada:
     33e.

   - gh-110850(6): Adiciona a API C de PyTime:

        * Tipo *note PyTime_t: 32d.

        * Constantes *note PyTime_MIN: 32e. e *note PyTime_MAX: 32f.

        * Funções *note PyTime_AsSecondsDouble(): 330, *note
          PyTime_Monotonic(): 331, *note PyTime_PerfCounter(): 333. e
          *note PyTime_Time(): 335.

     Patch por Victor Stinner.

   - gh-112066(7): Adiciona *note PyDict_SetDefaultRef(): 33f.: insere
     uma chave e um valor em um dicionário se a chave ainda não estiver
     presente.  Isto é similar a *note dict.setdefault(): 10b2, mas
     retorna um valor inteiro indicando se a chave já estava presente.
     Também é similar a *note PyDict_SetDefault(): 340, mas retorna uma
     referência forte em vez de uma referência emprestada.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/111140

   (2) https://github.com/python/cpython/issues/114685

   (3) https://github.com/python/cpython/issues/114685

   (4) https://github.com/python/cpython/issues/114626

   (5) https://github.com/python/cpython/issues/114329

   (6) https://github.com/python/cpython/issues/110850

   (7) https://github.com/python/cpython/issues/112066


File: python.info,  Node: Python 3 13 0 alpha 3,  Next: Python 3 13 0 alpha 2,  Prev: Python 3 13 0 alpha 4,  Up: Changelog

1.23.24 Python 3.13.0 alpha 3
-----------------------------

'Data de lançamento: 2024-01-17'

* Menu:

* Segurança: Segurança<16>.
* Núcleo e embutidos: Núcleo e embutidos<32>.
* Biblioteca: Biblioteca<36>.
* Documentação: Documentação<15>.
* Testes: Testes<18>.
* Construção: Construção<18>.
* Windows: Windows<16>.
* macOS: macOS<11>.
* IDLE: IDLE<15>.
* API C: API C<19>.


File: python.info,  Node: Segurança<16>,  Next: Núcleo e embutidos<32>,  Up: Python 3 13 0 alpha 3

1.23.24.1 Segurança
...................

   - gh-113659(1): Pula arquivos ‘.pth’ com nomes começando com um ponto
     ou atributo de arquivo oculto.

   - gh-112302(2): Criado um documento de lista de materiais de software
     e ferramentas para rastrear dependências.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/113659

   (2) https://github.com/python/cpython/issues/112302


File: python.info,  Node: Núcleo e embutidos<32>,  Next: Biblioteca<36>,  Prev: Segurança<16>,  Up: Python 3 13 0 alpha 3

1.23.24.2 Núcleo e embutidos
............................

   - gh-107901(1): O compilador duplica blocos básicos que têm uma
     verificação de quebra de avaliação, nenhum número de linha e vários
     predecessores.

   - gh-107901(2): Um salto que deixa um manipulador de exceção de volta
     ao código normal não verifica mais o quebra de avaliação.

   - gh-113655(3): Define o limite de recursão C para 4000 no Windows e
     10000 no Linux/OSX. Isso parece estar perto do ponto ideal para
     manter a segurança, mas não comprometer a retrocompatibilidade.

   - gh-113710(4): Adiciona efeitos de pilha digitados ao DSL do
     interpretador, junto com várias anotações de instruções.

   - gh-77046(5): No Windows, os descritores de arquivo que envolvem
     identificadores do Windows agora são criados não herdáveis por
     padrão ( PEP 446(6)).  Patch por Zackery Spytz e Victor Stinner.

   - gh-113853(7): Garante que todos os executores progridam.  Isso
     garante que a execução de nível 2 sempre progrida.

   - gh-113753(8): Corrige um problema em que o finalizador de objetos
     ‘PyAsyncGenASend’ pode não ser chamado se eles forem alocados de
     uma lista livre.

   - gh-107901(9): Compilador alterado para que saltos sintéticos que
     não estejam no final do laço não verifiquem mais o disjuntor de
     avaliação.

   - gh-113703(10): Corrige uma regressão no módulo *note codeop: 1c.
     que estava fazendo com que ele identificasse incorretamente
     f-strings incompletas.  Patch por Pablo Galindo

   - gh-89811(11): Verifica se há uma ‘tp_version_tag’ válida antes de
     executar especializações de bytecode que dependem desse valor ser
     utilizável.

   - gh-111488(12): Mensagem de erro alterada em caso de nenhuma palavra
     reservada ‘in’ após ‘for’ em compreensões de lista

   - gh-113657(13): Corrige um problema que fazia com que atualizações
     importantes de ponteiros de instruções fossem otimizadas fora dos
     rastreamentos de nível dois.

   - gh-113603(14): Corrige um bug em que um NOP redundante não é
     removido, causando falha em uma asserção no compilador no modo de
     depuração.

   - gh-113602(15): Corrige um erro que fazia com que o analisador
     sintático tentasse sobrescrever erros existentes e travasse no
     processo.  Patch por Pablo Galindo

   - gh-113486(16): Não emite mais eventos ‘PY_UNWIND’ espúrios para
     chamadas otimizadas para classes.

   - gh-113297(17): Corrige falha de segmentação no compilador na
     instrução with com 19 gerenciadores de contexto.

   - gh-113212(18): Melhora as mensagens de erro de *note super: 4db.

   - gh-111375(19): Usa somente ‘NULL’ na pilha de exceções para indicar
     que uma exceção foi tratada.  Patch por Carey Metcalfe.

   - gh-112215(20): Aumenta o limite de recursão C por um fator de 3
     para compilações não depuradas, exceto para plataformas webassembly
     e s390 que não foram alteradas.  Isso atenua algumas regressões no
     3.12 com recursão profunda misturando código interno (C) e Python.

   - gh-113054(21): Corrigido bug onde um NOP redundante não é removido,
     causando falha em uma asserção no compilador no modo de depuração.

   - gh-106905(22): Usa o estado por analisador sintático AST em vez do
     estado global para rastrear a profundidade da recursão dentro do
     analisador sintático AST para evitar uma possível condição de
     corrida devido à análise simultânea.

     O problema apareceu principalmente na versão 3.11 por usuários
     multithread de *note ast.parse(): 1a8.  Na versão 3.12, uma
     alteração em quando a coleta de lixo pode ser acionada impediu que
     a condição de corrida ocorresse.

   - gh-108866(23): Altera a API e o contrato de ‘_PyExecutorObject’
     para retornar o ponteiro next_instr, em vez do quadro, e para
     sempre executar pelo menos uma instrução.

   - gh-90350(24): Otimiza as funções embutidas *note min(): f3a. e
     *note max(): f3b.

   - gh-112943(25): Calcula corretamente os deslocamentos de coluna
     final para tokens multilinha no módulo *note tokenize: fb.  Patch
     por Pablo Galindo

   - gh-112125(26): Corrige ‘None.__ne__(None)’ retornando
     ‘NotImplemented’ em vez de ‘False’.

   - gh-74616(27): *note input(): 131b. agora levanta uma ValueError
     quando emitido no terminal se o prompt contiver caracteres nulos
     incorporados em vez de truncá-lo silenciosamente.

   - gh-112716(28): Corrige SystemError na instrução ‘import’ e nos
     métodos ‘__reduce__()’ de tipos embutidos quando ‘__builtins__’ não
     é um dict.

   - gh-112730(29): Usa cor para destacar locais de erro em tracebacks.
     Patch por Pablo Galindo

   - gh-112625(30): Corrige um bug em que um objeto bytearray poderia
     ser limpo durante a iteração sobre um argumento no método
     ‘bytearray.join()’ que poderia resultar na leitura de memória após
     ser liberado.

   - gh-112660(31): Não limpa erros inesperados durante mensagens de
     erro de formatação para ImportError e AttributeError para módulos.

   - gh-105967(32): Solução alternativa para um bug na biblioteca zlib
     da plataforma macOS da Apple, em que *note zlib.crc32(): 178b. e
     *note binascii.crc32(): 178c. poderiam produzir resultados
     incorretos em entradas de vários gigabytes.  Incluindo ao usar
     *note zipfile: 131. em zips contendo dados grandes.

   - gh-95754(33): Fornece uma mensagem de erro melhor ao acessar
     atributos inválidos em módulos parcialmente inicializados.  A
     origem do módulo que está sendo acessado agora está incluída na
     mensagem para ajudar com o problema comum de sombreamento de outros
     módulos.

   - gh-112217(34): Adiciona verificação para o tipo de ‘__cause__’
     retornado da chamada do tipo ‘T’ em ‘raise from T’.

   - gh-111058(35): Altera coro.cr_frame/gen.gi_frame para retornar
     ‘None’ após a corrotina/gerador ter sido fechado.  Isso corrige um
     bug em que *note getcoroutinestate(): e45. e *note
     getgeneratorstate(): 1277. retornam o estado errado para uma
     corrotina/gerador fechado.

   - gh-112388(36): Corrige um erro que estava fazendo o analisador
     tentar sobrescrever erros do tokenizador.  Patch por pablo Galindo

   - gh-112387(37): Corrige posições de erro para strings decodificadas
     com erros de análise léxica reversa.  Patch por Pablo Galindo

   - gh-99606(38): Torna o código gerado para uma f-string vazia
     idêntico ao código de uma string normal vazia.

   - gh-112367(39): Evita comportamento indefinido ao usar os trampolins
     do perf não liberando as arenas de código até o desligamento.
     Patch por Pablo Galindo

   - gh-112320(40): O tradutor de nível 2 agora rastreia o nível de
     confiança para permanecer “no rastreamento” (ou seja, não sair de
     volta para o interpretador de nível 1) para instruções de
     ramificação com base no número de bits definidos no “contador” de
     ramificação.  A tradução de rastreamento termina quando a confiança
     cai abaixo de 1/3.

   - gh-109598(41): *note PyComplex_RealAsDouble(): 178d./*note
     PyComplex_ImagAsDouble(): 178e. agora tenta converter um objeto
     para uma instância *note complex: 2f8. usando seu método
     ‘__complex__()’ antes de retornar ao método ‘__float__()’.  Patch
     por Sergey B Kirpichev.

   - gh-94606(42): Corrige UnicodeEncodeError quando
     ‘email.message.get_payload()’ lê uma mensagem com um caractere
     substituto Unicode e o conteúdo da mensagem não está bem formado
     para codificação de escape substituto.  Patch por Sidney Markowitz.

   - bpo-21861(43): Usa o nome de classe real do objeto em
     ‘_io.FileIO.__repr__()’, ‘_io._WindowsConsoleIO()’ e
     ‘_io.TextIOWrapper.__repr__()’, para tornar esses métodos amigáveis
     à subclasse.

   - bpo-45369(44): Remove soluções alternativas do LibreSSL conforme a
     PEP 644(45).

   - bpo-34392(46): Adicionada *note sys._is_interned(): 250.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/107901

   (2) https://github.com/python/cpython/issues/107901

   (3) https://github.com/python/cpython/issues/113655

   (4) https://github.com/python/cpython/issues/113710

   (5) https://github.com/python/cpython/issues/77046

   (6) https://peps.python.org/pep-0446/

   (7) https://github.com/python/cpython/issues/113853

   (8) https://github.com/python/cpython/issues/113753

   (9) https://github.com/python/cpython/issues/107901

   (10) https://github.com/python/cpython/issues/113703

   (11) https://github.com/python/cpython/issues/89811

   (12) https://github.com/python/cpython/issues/111488

   (13) https://github.com/python/cpython/issues/113657

   (14) https://github.com/python/cpython/issues/113603

   (15) https://github.com/python/cpython/issues/113602

   (16) https://github.com/python/cpython/issues/113486

   (17) https://github.com/python/cpython/issues/113297

   (18) https://github.com/python/cpython/issues/113212

   (19) https://github.com/python/cpython/issues/111375

   (20) https://github.com/python/cpython/issues/112215

   (21) https://github.com/python/cpython/issues/113054

   (22) https://github.com/python/cpython/issues/106905

   (23) https://github.com/python/cpython/issues/108866

   (24) https://github.com/python/cpython/issues/90350

   (25) https://github.com/python/cpython/issues/112943

   (26) https://github.com/python/cpython/issues/112125

   (27) https://github.com/python/cpython/issues/74616

   (28) https://github.com/python/cpython/issues/112716

   (29) https://github.com/python/cpython/issues/112730

   (30) https://github.com/python/cpython/issues/112625

   (31) https://github.com/python/cpython/issues/112660

   (32) https://github.com/python/cpython/issues/105967

   (33) https://github.com/python/cpython/issues/95754

   (34) https://github.com/python/cpython/issues/112217

   (35) https://github.com/python/cpython/issues/111058

   (36) https://github.com/python/cpython/issues/112388

   (37) https://github.com/python/cpython/issues/112387

   (38) https://github.com/python/cpython/issues/99606

   (39) https://github.com/python/cpython/issues/112367

   (40) https://github.com/python/cpython/issues/112320

   (41) https://github.com/python/cpython/issues/109598

   (42) https://github.com/python/cpython/issues/94606

   (43) https://bugs.python.org/issue?@action=redirect&bpo=21861

   (44) https://bugs.python.org/issue?@action=redirect&bpo=45369

   (45) https://peps.python.org/pep-0644/

   (46) https://bugs.python.org/issue?@action=redirect&bpo=34392


File: python.info,  Node: Biblioteca<36>,  Next: Documentação<15>,  Prev: Núcleo e embutidos<32>,  Up: Python 3 13 0 alpha 3

1.23.24.3 Biblioteca
....................

   - gh-114077(1): Corrige possível *note OverflowError: 885. em *note
     socket.socket.sendfile(): e8c. ao passar 'count' maior que 2 GiB em
     plataforma de 32 bits.

   - gh-111803(2): *note plistlib: ab. agora oferece suporte ao
     carregamento de listas aninhadas mais profundamente em formato
     binário.

   - gh-114014(3): Corrige um bug em *note fractions.Fraction: 1e7. onde
     uma string inválida usando ‘d’ na parte decimais cria um erro
     diferente comparado a outras letras/caracteres inválidos.  Patch
     por Jeremiah Gabriel Pascual.

   - gh-108364(4): *note sqlite3.Connection.iterdump(): 247. agora
     garante que o suporte a chave estrangeira seja desabilitado antes
     de despejar o esquema do banco de dados, se houver qualquer
     violação de chave estrangeira.  Patch por Erlend E. Aasland e
     Mariusz Felisiak.

   - gh-113971(5): O atributo ‘._compresslevel’ protegido anteriormente
     por *note zipfile.ZipInfo: d2c. foi tornado público como
     ‘.compress_level’ com o antigo nome ‘_compresslevel’ permanecendo
     disponível como uma propriedade para manter a compatibilidade.

   - gh-113877(6): Corrige o método ‘winfo_pathname()’ do *note tkinter:
     f0. no Windows de 64 bits.

   - gh-113868(7): Adicionados *note mmap.MAP_NORESERVE: 1790, *note
     mmap.MAP_NOEXTEND: 1791, *note mmap.MAP_HASSEMAPHORE: 1792, *note
     mmap.MAP_NOCACHE: 1793, *note mmap.MAP_JIT: 1794, *note
     mmap.MAP_RESILIENT_CODESIGN: 1795, *note mmap.MAP_RESILIENT_MEDIA:
     1796, *note mmap.MAP_32BIT: 1797, *note
     mmap.MAP_TRANSLATED_ALLOW_EXECUTE: 1798, *note mmap.MAP_UNIX03:
     1799. e *note mmap.MAP_TPRO: 179a.  Todos eles são sinalizadores
     ‘mmap(2)’ no macOS.

   - gh-113848(8): Os gerenciadores de contexto *note
     asyncio.TaskGroup(): 1b5. e *note asyncio.timeout(): 5fe. agora
     manipulam as subclasses *note CancelledError: 1b8, bem como
     ‘CancelledError’ exato.

   - gh-113661(9): unittest runner: Não sai com 5 se os testes foram
     ignorados.  A intenção de sair com 5 era detectar problemas em que
     o conjunto de testes não foi descoberto.  Se pulamos os testes, ele
     foi descoberto corretamente.

   - gh-96037(10): Insere *note TimeoutError: 838. no contexto da
     exceção que foi levantada durante a saída de um bloco *note
     asyncio.timeout(): 5fe. expirado.

   - gh-113781(11): Silencia AttributeError não levantável quando avisos
     são emitidos durante a finalização do Python.

   - gh-113238(12): Adiciona ‘Anchor’ a ‘importlib.resources’ (para que
     o código esteja em conformidade com a documentação)

   - gh-111693(13): *note asyncio.Condition.wait(): 179b. agora levanta
     novamente a mesma instância ‘CancelledError’ que pode ter causado
     sua interrupção.  Corrigida a condição de corrida em *note
     asyncio.Semaphore.acquire(): 179c. quando interrompido com uma
     ‘CancelledError’.

   - gh-113791(14): Adiciona ‘CLOCK_MONOTONIC_RAW_APPROX’ e
     ‘CLOCK_UPTIME_RAW_APPROX’ a *note time: ee. no macOS. Esses são
     relógios disponíveis no macOS 10.12 ou posterior.

   - gh-112932(15): Restaura a capacidade de *note zipfile: 131. de
     ‘extractall’ de arquivos zip com uma entrada de diretório “/”
     neles, como é comumente adicionado a zips por alguns exportadores
     de dados de wiki ou rastreadores de bugs.

   - gh-113568(16): Levanta avisos de descontinuação de *note
     pathlib.PurePath: 4a6. e não de sua classe base privada
     ‘PurePathBase’.

   - gh-113594(17): Corrige *note UnicodeEncodeError: 677. em *note
     email: 3b. ao redobrar linhas que contêm parte codificada de 8 bits
     desconhecida seguida por parte codificada de 8 bits não
     desconhecida.

   - gh-113538(18): Em ‘asyncio.StreamReaderProtocol.connection_made()’,
     há um retorno de chamada que registra um erro se a tarefa que
     envolve o “retorno de chamada de conectado” falhar.  Este retorno
     de chamada falharia se a tarefa fosse cancelada.  Evite isso
     verificando se a tarefa foi cancelada primeiro.  Se sim, feche o
     transporte, mas não registre um erro.

   - gh-113626(19): Adiciona suporte para o argumento 'allow_code' no
     módulo *note marshal: 8d.  Passar ‘allow_code=False’ previne a
     serialização e desserialização de objetos de código, o que é
     incompatível entre versões do Python.

   - gh-85567(20): Corrige avisos de recursos para arquivos não fechados
     nas interfaces de linha de comando *note pickle: a6. e *note
     pickletools: a7.

   - gh-113537(21): Suporte a cargas de ‘str’ em *note plistlib.loads():
     957.

   - gh-89850(22): Adiciona implementações padrão dos métodos *note
     pickle.Pickler.persistent_id(): 1687. e *note
     pickle.Unpickler.persistent_load(): 168e. na implementação C.
     Chamar ‘super().persistent_id()’ e ‘super().persistent_load()’ em
     subclasses da implementação C das classes *note pickle.Pickler:
     a28. e *note pickle.Unpickler: 159f. não causa mais recursão
     infinita.

   - gh-113569(23): Indica se não houve chamadas reais na falha do
     unittest *note assert_has_calls(): 179d.

   - gh-101225(24): Aumenta o backlog para objetos *note
     multiprocessing.connection.Listener: 179e. criados por
     ‘multiprocessing.manager’ e ‘multiprocessing.resource_sharer’ para
     reduzir significativamente o risco de obter um erro de conexão
     recusada ao criar um *note multiprocessing.connection.Connection:
     111f. para eles.

   - gh-113568(25): Levanta eventos de auditoria de *note pathlib.Path:
     229. e não de sua classe base privada ‘PathBase’.

   - gh-113543(26): Garante que ‘webbrowser.MacOSXOSAScript’ envie o
     evento de auditoria ‘webbrowser.open’.

   - gh-113028(27): Quando uma segunda referência a uma string aparece
     na entrada para *note pickle: a6, e a implementação Python está em
     uso, temos a garantia de que uma única cópia é decapada e um único
     objeto é compartilhado quando recarregado.  Anteriormente, no
     protocolo 0, quando uma string continha certos caracteres (por
     exemplo, nova linha), isso resultava em objetos duplicados.

   - gh-113421(28): Corrige o logger de multiprocessamento para
     ‘%(filename)s’.

   - gh-111784(29): Corrige falhas de segmentação no módulo
     ‘_elementtree’.  Corrige a primeira falha de segmentação durante a
     desalocação de instâncias ‘_elementtree.XMLParser’ mantendo uma
     referência forte ao módulo ‘pyexpat’ no estado do módulo para o
     tempo de vida da cápsula.  Corrige a segunda falha de segmentação
     que acontece no mesmo processo de desalocação mantendo uma
     referência forte ao módulo ‘_elementtree’ na estrutura ‘XMLParser’
     para o tempo de vida do módulo ‘_elementtree’.

   - gh-113407(30): Corrige a importação de *note unittest.mock: 107.
     quando o CPython é construído sem docstrings.

   - gh-113320(31): Corrige uma regressão no Python 3.12 onde classes
     *note Protocol: 264. que não foram marcadas como *note
     runtime-checkable: 443. seriam introspectadas desnecessariamente,
     potencialmente causando exceções se o protocolo tivesse membros
     problemáticos.  Patch por Alex Waygood.

   - gh-53502(32): Adiciona uma nova opção ‘aware_datetime’ em *note
     plistlib: ab. para carregar ou despejar datetime consciente.

   - gh-113358(33): Corrige renderização de tracebacks com exceções com
     um __getattr__ quebrado

   - gh-113214(34): Corrige um ‘AttributeError’ durante término do
     protocolo SSL asyncio em cenários SSL sobre SSL.

   - gh-113246(35): Atualiza o pip empacotado para 23.3.2.

   - gh-87264(36): Corrigido o método list() do tarfile para mostrar o
     tipo de arquivo.

   - gh-112182(37): ‘asyncio.futures.Future.set_exception()’ agora
     transforma *note StopIteration: c15. em *note RuntimeError: 195. em
     vez de travar ou apresentar outro comportamento incorreto.
     Contribuição de patch de Jamie Phan.

   - gh-113225(38): Acelera *note pathlib.Path.glob(): 22d. usando *note
     os.DirEntry.path: 1772. sempre que possível.

   - gh-113149(39): Melhora a mensagem de erro quando um vetor JSON ou
     objeto contém uma vírgula final.  Patch por Carson Radtke.

   - gh-113117(40): O módulo *note subprocess: d6. agora pode usar a
     função *note os.posix_spawn(): 220. com ‘close_fds=True’ em
     plataformas onde ‘posix_spawn_file_actions_addclosefrom_np’ está
     disponível.  Patch por Jakub Kulik.

   - gh-113199(41): Faz ‘http.client.HTTPResponse.read1’ e
     ‘http.client.HTTPResponse.readline’ fecharem E/S após ler todos os
     dados quando o comprimento do conteúdo for conhecido.  Patch por
     Illia Volochii.

   - gh-113191(42): Adiciona suporte a *note os.fchmod(): 21c. e um
     descritor de arquivo em *note os.chmod(): 21b. no Windows.

   - gh-113188(43): Corrige *note shutil.copymode(): 179f. e *note
     shutil.copystat(): 116d. no Windows.  Anteriormente, eles
     funcionavam de forma diferente se 'dst' fosse um link simbólico:
     eles modificavam os bits de permissão do próprio 'dst' em vez do
     arquivo para o qual ele aponta se 'follow_symlinks' fosse true ou
     'src' não fosse um link simbólico, e não modificavam os bits de
     permissão se 'follow_symlinks' fosse false e 'src' fosse um link
     simbólico.

   - gh-113119(44): *note os.posix_spawn(): 220. agora aceita
     ‘env=None’, o que faz com que o processo recém-gerado use o
     ambiente de processo atual.  Patch por Jakub Kulik.

   - gh-113202(45): Adiciona uma opção ‘strict’ para ‘batched()’ no
     módulo ‘itertools’.

   - gh-61648(46): Detecta números de linha de propriedades em doctests.

   - gh-113175(47): Sincroniza com importlib_metadata 7.0, incluindo
     anotações de tipo aprimoradas, problema corrigido com pacotes com
     links simbólicos em ‘package_distributions’, adicionado
     ‘EntryPoints.__repr__’, introduzido o script ‘diagnose’, adicionada
     a propriedade ‘Distribution.origin’ e removido o acesso
     ‘EntryPoint’ descontinuado por índice numérico (comportamento de
     tupla).

   - gh-59616(48): Adiciona suporte para *note os.lchmod(): 21a. e o
     argumento 'follow_symlinks' em *note os.chmod(): 21b. no Windows.
     Observe que o valor padrão de 'follow_symlinks' em ‘os.lchmod()’ é
     ‘False’ no Windows.

   - gh-112559(49): *note signal.signal(): 1173. e *note
     signal.getsignal(): 17a0. não chamam mais ‘repr’ em manipuladores
     chamáveis.  *note asyncio.run(): 47c. e *note asyncio.Runner.run():
     17a1. não chamam mais ‘repr’ nos resultados da tarefa.  Patch por
     Yilei Yang.

   - gh-112962(50): As funções do módulo *note dis: 38. adicionam
     informações de cache à instância *note Instruction: 1da. em vez de
     criar instâncias falsas *note Instruction: 1da. para representar as
     entradas de cache.

   - gh-112989(51): Reduz a sobrecarga para conectar soquetes com
     SelectorEventLoop do *note asyncio: a.

   - gh-112970(52): Usa ‘closefrom()’ no Linux onde disponível (por
     exemplo, glibc-2.34), em vez de apenas FreeBSD.

   - gh-110190(53): Corrige estruturas ctypes com array na plataforma
     PPC64LE definindo ‘MAX_STRUCT_SIZE’ como 64 em stgdict.  Patch por
     Diego Russo.

   - gh-112540(54): A função statistics.geometric_mean() agora retorna
     zero para conjuntos de dados contendo um zero.  Anteriormente, isso
     levantaria uma exceção.

   - gh-87286(55): Adicionados ‘LOG_FTP’, ‘LOG_NETINFO’,
     ‘LOG_REMOTEAUTH’, ‘LOG_INSTALL’, ‘LOG_RAS’ e ‘LOG_LAUNCHD’ ao
     módulo *note syslog: dc, todos eles constantes usados no macOS.

   - gh-112800(56): Corrige *note asyncio: a.
     ‘SubprocessTransport.close()’ para não lançar ‘PermissionError’
     quando usado com executáveis setuid.

   - gh-51944(57): Adiciona as seguintes constantes ao módulo *note
     termios: e1.  Esses valores estão presentes nos cabeçalhos do
     sistema macOS: ‘ALTWERASE’, ‘B14400’, ‘B28800’, ‘B7200’, ‘B76800’,
     ‘CCAR_OFLOW’, ‘CCTS_OFLOW’, ‘CDSR_OFLOW’, ‘CDTR_IFLOW’, ‘CIGNORE’,
     ‘CRTS_IFLOW’, ‘EXTPROC’, ‘IUTF8’, ‘MDMBUF’, ‘NL2’, ‘NL3’,
     ‘NOKERNINFO’, ‘ONOEOT’, ‘OXTABS’, ‘VDSUSP’, ‘VSTATUS’.

   - gh-79325(58): Corrige um erro de recursão infinita na limpeza de
     *note tempfile.TemporaryDirectory(): 1275. no Windows.

   - gh-94692(59): *note shutil.rmtree(): 301. agora captura apenas
     exceções OSError.  Anteriormente, uma versão resistente a ataques
     de symlink de ‘shutil.rmtree()’ podia ignorar ou passar para o
     manipulador de erros uma exceção arbitrária quando argumentos
     inválidos eram fornecidos.

   - gh-112736(60): O uso de símbolos del-safe em ‘subprocess’ foi
     refatorado para permitir o uso em ambientes de construção
     multiplataforma.

   - gh-112727(61): Acelera *note pathlib.Path.absolute(): 17a2.  Patch
     por Barney Gale.

   - gh-74690(62): Aceleração de verificações de *note issubclass():
     7c2. em relação a *note protocolos runtime-checkable: 443. simples
     em cerca de 6%.  Patch por Alex Waygood.

   - gh-74690(63): Aceleração de verificações de *note isinstance():
     442. em cerca de 20% para *note protocolos verificáveis em tempo de
     execução: 443. que têm apenas um membro chamável.  Aceleração de
     verificações de *note issubclass(): 7c2. para esses protocolos em
     cerca de 10%.  Patch por Alex Waygood.

   - gh-112645(64): Remoção de erro de descontinuação ao passar
     ‘onerror’ para *note shutil.rmtree(): 301.

   - gh-112640(65): Adiciona o parâmetro ‘kwdefaults’ a *note
     types.FunctionType: 887. para definir valores padrão de argumento
     nomeado.

   - gh-112622(66): Garante que o parâmetro ‘name’ seja passado para o
     laço de eventos em *note asyncio.create_task(): 1bf.

   - gh-112618(67): Corrige um bug de armazenamento em cache relacionado
     a *note typing.Annotated: 944.  ‘Annotated[str, True]’ não é mais
     idêntico a ‘Annotated[str, 1]’.

   - gh-112334(68): Corrige uma regressão de desempenho no *note
     subprocess: d6. do 3.12 no Linux, onde ele não usaria mais a
     chamada de sistema de caminho rápido ‘vfork()’ quando poderia
     devido a um bug lógico, em vez disso, voltando para o seguro, mas
     mais lento ‘fork()’.

     Também foi corrigido um segundo bug de segurança potencial do
     3.12.0.  Se um valor de ‘extra_groups=[]’ fosse passado para *note
     subprocess.Popen: 199. ou APIs relacionadas, a chamada de sistema
     ‘setgroups(0, NULL)’ subjacente para limpar a lista de grupos não
     seria feita no processo filho antes de ‘exec()’.

     Isso foi identificado por meio de inspeção de código no processo de
     correção do primeiro bug.

   - gh-110190(69): Corrige estruturas ctypes com array na plataforma
     Arm definindo ‘MAX_STRUCT_SIZE’ como 32 em stgdict.  Patch por
     Diego Russo.

   - gh-81194(70): Corrige uma falha em *note socket.if_indextoname():
     a39. com valor específico (UINT_MAX). Corrigir um estouro de
     inteiro em *note socket.if_indextoname(): a39. em plataformas não
     Windows de 64 bits.

   - gh-112578(71): Corrige uma *note RuntimeWarning: 1bd. espúrio ao
     executar o módulo *note zipfile: 131.

   - gh-112516(72): Atualiza a cópia empacotada do pip para a versão
     23.3.1.

   - gh-112510(73): Adiciona *note readline.backend: 17a3. para os usos
     do backend readline (‘editline’ ou ‘readline’)

   - gh-112328(74): [Enum] Torna ‘EnumDict’, ‘EnumDict.member_names’,
     ‘EnumType._add_alias_’ e ‘EnumType._add_value_alias_’ públicos.

   - gh-112509(75): Corrige casos extremos que poderiam fazer com que
     uma chave estivesse presente nos atributos ‘__required_keys__’ e
     ‘__optional_keys__’ de um *note typing.TypedDict: 162.  Patch por
     Jelle Zijlstra.

   - gh-101336(76): Adiciona o parâmetro nomeado ‘keep_alive’ para
     ‘AbstractEventLoop.create_server()’ e
     ‘BaseEventLoop.create_server()’.

   - gh-63284(77): Adicionado suporte para modo TLS-PSK (chave
     pré-compartilhada) para :mod: módulo *note ssl: d0.

   - gh-112414(78): Corrige regressão no Python 3.12 onde chamar *note
     repr(): 800. em um módulo que foi importado usando um *note loader:
     17a4. personalizado poderia falhar com *note AttributeError: 34b.
     Patch por Alex Waygood.

   - gh-112358(79): Reverte alteração na inicialização *note
     struct.Struct: 15a0. que quebrou alguns casos de extensão de
     classes.

   - gh-112405(80): Otimiza *note pathlib.PurePath.relative_to(): 2ca.
     Patch por Alex Waygood.

   - gh-94722(81): Corrige bug onde a comparação entre instâncias de
     *note DocTest: 17a5. falha se uma delas tiver ‘None’ como seu
     lineno.

   - gh-112361(82): Acelera um pequeno punhado de métodos *note pathlib:
     a4. removendo alguns objetos temporários.

   - gh-112345(83): Melhora a mensagem de erro ao tentar chamar *note
     issubclass(): 7c2. contra um *note typing.Protocol: 264. que tem
     membros não-método.  Patch por Randolf Scholz.

   - gh-112137(84): Altera a saída *note dis: 38. para exibir no-lineno
     como “–” em vez de “None”.

   - gh-112332(85): Descontinua o campo ‘exc_type’ de *note
     traceback.TracebackException: 25c.  Adiciona ‘exc_type_str’ para
     substituí-lo.

   - gh-81620(86): Adiciona testes extras para *note
     random.binomialvariate(): 4b0.

   - gh-112292(87): Corrige uma falha em *note readline: ba. quando
     importado de um subinterpretador.  Patch por Anthony Shaw

   - gh-77621(88): Melhora ligeiramente o tempo de importação do módulo
     *note pathlib: a4. adiando algumas importações.  Patch por Barney
     Gale.

   - gh-112137(89): Altera a saída *note dis: 38. para exibir rótulos
     lógicos para alvos de salto em vez de deslocamentos.

   - gh-112139(90): Adiciona ‘Signature.format()’ para formatar
     assinaturas para string com opções extras.  E usá-lo em *note
     pydoc: b5. para renderizar assinaturas mais legíveis que tenham
     novas linhas entre parâmetros.

   - gh-112105(91): Faz *note readline.set_completer_delims(): 17a6.
     funcionar com libedit

   - gh-106922(92): Exibe várias linhas com ‘traceback’ quando os erros
     abrangerem várias linhas.

   - gh-111874(93): Ao criar uma classe *note typing.NamedTuple: 2b0,
     garante que *note __set_name__(): c69. seja chamado em todos os
     objetos que definem ‘__set_name__’ e existam nos valores do
     dicionário de classes da classe ‘NamedTuple’.  Patch por Alex
     Waygood.

   - gh-68166(94): Adiciona suporte ao tipo de elemento “vsapi” em *note
     tkinter.ttk.Style.element_create(): 258.

   - gh-110275(95): Os métodos ‘_replace()’ e ‘__replace__()’ da tupla
     nomeada agora levantam TypeError em vez de ValueError para
     argumentos nomeados inválidos.

   - gh-99367(96): Não desorganiza ‘sys.path[0]’ em *note pdb: a5. se
     safe_path estiver definido

   - gh-111615(97): Corrige uma regressão causada por uma correção em
     gh-93162(98), na qual você não conseguia configurar uma
     ‘QueueHandler’ sem especificar manipuladores.

   - gh-75666(99): Corrige o comportamento do método ‘unbind()’ do
     widget *note tkinter: f0. com dois argumentos.  Anteriormente,
     ‘widget.unbind(sequence, funcid)’ destruía a vinculação atual para
     'sequence', deixando 'sequence' desvinculado, e excluía o comando
     'funcid'.  Agora ele remove apenas 'funcid' da vinculação para
     'sequence', mantendo outros comandos, e exclui o comando 'funcid'.
     Ele deixa 'sequence' desvinculado somente se 'funcid' foi o último
     comando vinculado.

   - gh-67790(100): Implementa suporte básico de formatação (largura
     mínima, alinhamento, preenchimento) para *note fractions.Fraction:
     1e7.

   - gh-111049(101): Corrige travamento durante coleta de lixo do objeto
     buffer *note io.BytesIO: ed3.

   - gh-102980(102): Redireciona a saída do comando ‘interact’ de *note
     pdb: a5. para o mesmo canal do depurador.  Adiciona testes e
     melhore a documentação.

   - gh-102988(103): *note email.utils.getaddresses(): 1e1. e *note
     email.utils.parseaddr(): 1e2. agora retornam tuplas de dois
     elementos ‘('', '')’ em mais situações onde endereços de e-mail
     inválidos são encontrados em vez de potencialmente imprecisos
     valores.  Adiciona o parâmetro 'strict' opcional a estas duas
     funções: use ‘strict=False’ para obter o comportamento antigo,
     aceitar entradas malformadas.  ‘getattr(email.utils,
     'supports_strict_parsing', False)’ pode usar para verificar se o
     parâmetro 'strict' está disponível.  Patch por Thomas Dwyer e
     Victor Stinner para melhorar a correção CVE 2023-27043(104).

   - gh-52161(105): *note cmd.Cmd.do_help(): 17a7. agora limpa
     docstrings com *note inspect.cleandoc(): 17a8. antes de
     escrevê-las.  Patch por Filip Łapkiewicz.

   - gh-82300(106): Adiciona o parâmetro ‘track’ a *note
     multiprocessing.shared_memory.SharedMemory: 174f. que permite usar
     blocos de memória compartilhada sem precisar registrar com o
     rastreador de recursos POSIX que os libera automaticamente na saída
     do processo.

   - gh-110109(107): Adiciona a classe privada ‘pathlib._PurePathBase’:
     uma classe base para *note pathlib.PurePath: 4a6. que omite certos
     métodos mágicos.  Pode ser tornado público (junto com ‘_PathBase’)
     no futuro.

   - gh-109858(108): Protege *note zipfile: 131. de zipbomb
     “quoted-overlap”.  Agora ele levanta BadZipFile ao tentar ler uma
     entrada que se sobrepõe a outra entrada ou diretório central.

   - gh-109786(109): Corrige possíveis vazamentos de referência e
     travamento ao reinserir o método ‘__next__()’ de *note
     itertools.pairwise: 818.

   - gh-91539(110): Melhoria de desempenho pequena (10 - 20%) e trivial
     de ‘urllib.request.getproxies_environment()’, normalmente útil
     quando há muitas variáveis de ambiente para analisar.

   - gh-103363(111): Adiciona o argumento somente-nomeado
     'follow_symlinks' a *note pathlib.Path.owner(): 231. e *note
     group(): 232, com o padrão ‘True’.

   - gh-102130(112): Suporte para conclusão de tabulação em *note cmd:
     19. para ‘editline’.

   - gh-99437(113): *note runpy.run_path(): 181. agora decodifica
     objetos caminho ou similares, garantindo que __file__ e sys.argv[0]
     do módulo que está sendo executado sejam sempre strings.

   - gh-104003(114): Adiciona *note warnings.deprecated(): 160, um
     decorador para marcar funções descontinuadas para verificadores de
     tipo estático e para avisar sobre o uso de classes e funções
     obsoletas.  Veja PEP 702(115).  Patch por Jelle Zijlstra.

   - gh-103708(116): Torna o nome python codificado, um parâmetro
     configurável para que diferentes implementações do python possam
     substituí-lo em vez de fazer grandes diferenças em sysconfig.py

   - gh-66515(117): *note mailbox.MH: 17a9. agora oferece suporte a
     pastas que não contêm um arquivo ‘.mh_sequences’ (por exemplo,
     pastas de cache IMAP do Claws Mail).  Patch por Serhiy Storchaka.

   - gh-83162(118): Renomeado ‘re.error’ para ‘PatternError’ para maior
     clareza, e mantido ‘re.error’ para compatibilidade com versões
     anteriores.  Patch por Matthias Bussonnier e Adam Chhina.

   - gh-91133(119): Corrige um bug na limpeza de *note
     tempfile.TemporaryDirectory: 1275, que agora não desreferencia mais
     links simbólicos ao contornar erros de permissão do sistema de
     arquivos.

   - bpo-43153(120): No Windows, ‘tempfile.TemporaryDirectory’ mascarava
     anteriormente um ‘PermissionError’ com ‘NotADirectoryError’ durante
     a limpeza de diretório.  Agora ele levanta corretamente
     ‘PermissionError’ se os erros não forem ignorados.  Patch por
     Andrei Kulakov e Ken Jin.

   - bpo-32731(121): *note getpass.getuser(): 418. agora levanta *note
     OSError: 417. para todas as falhas em vez de *note ImportError:
     419. em sistemas sem o módulo *note pwd: b2. ou *note KeyError:
     344. se o banco de dados de senhas estiver vazio.

   - bpo-34321(122): *note mmap.mmap: 20b. agora tem um parâmetro
     'trackfd' no Unix; se for ‘False’, o descritor de arquivo
     especificado por 'fileno' não será duplicado.

   - bpo-35332(123): A função *note shutil.rmtree(): 301. agora ignora
     erros ao chamar *note os.close(): b8a. quando 'ignore_errors' é
     ‘True’, e *note os.close(): b8a. não é mais tentado novamente após
     erro.

   - bpo-35928(124): *note io.TextIOWrapper: 7bc. agora manipula
     corretamente o buffer de decodificação após ‘read()’ e ‘write()’.

   - bpo-26791(125): *note shutil.move(): e82. agora move um link
     simbólico para um diretório quando esse diretório é o alvo do link
     simbólico.  Isso fornece o mesmo comportamento do comando mv shell.
     O comportamento anterior gerou uma exceção.  Patch por Jeffrey
     Kintscher.

   - bpo-41422(126): Corrigidos vazamentos de memória de *note
     pickle.Pickler: a28. e *note pickle.Unpickler: 159f. envolvendo
     referências cíclicas por meio do mapeamento de memorando interno.

   - bpo-19821(127): A função ‘pydoc.ispackage()’ foi descontinuada.

   - bpo-40262(128): O método ‘ssl.SSLSocket.recv_into()’ não requer
     mais o argumento 'buffer' para implementar ‘__len__’ e suporta
     buffers com tamanho de item arbitrário.

   - bpo-39912(129): *note warnings.filterwarnings(): 14f1. e *note
     warnings.simplefilter(): 6c1. agora levantam exceções apropriadas
     em vez de ‘AssertionError’.  Patch foi contribuição de Rémi
     Lapeyre.

   - bpo-37260(130): Corrigida uma condição de corrida em *note
     shutil.rmtree(): 301. na qual entradas de diretório removidas por
     outro processo ou thread enquanto ‘shutil.rmtree()’ está em
     execução podem fazer com que ele levante FileNotFoundError.  Patch
     por Jeffrey Kintscher.

   - bpo-36959(131): Corrigidas algumas mensagens de erro para
     combinações de strings de formato ISO inválidas em ‘strptime()’ que
     se referiam a diretivas não contidas na string de formato.  Patch
     por Gordon P. Hemsley.

   - bpo-18060(132): Corrigido um problema de herança de classe que pode
     causar falhas de segmentação ao derivar dois ou mais níveis de
     subclasses de uma classe base de Structure ou Union.

   - bpo-29779(133): Adicionada uma nova variável de ambiente *note
     PYTHON_HISTORY: 191. para definir o local de um arquivo
     ‘.python_history’.

   - bpo-21360(134): *note mailbox.Maildir: 41c. agora ignora arquivos
     com um ponto inicial.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/114077

   (2) https://github.com/python/cpython/issues/111803

   (3) https://github.com/python/cpython/issues/114014

   (4) https://github.com/python/cpython/issues/108364

   (5) https://github.com/python/cpython/issues/113971

   (6) https://github.com/python/cpython/issues/113877

   (7) https://github.com/python/cpython/issues/113868

   (8) https://github.com/python/cpython/issues/113848

   (9) https://github.com/python/cpython/issues/113661

   (10) https://github.com/python/cpython/issues/96037

   (11) https://github.com/python/cpython/issues/113781

   (12) https://github.com/python/cpython/issues/113238

   (13) https://github.com/python/cpython/issues/111693

   (14) https://github.com/python/cpython/issues/113791

   (15) https://github.com/python/cpython/issues/112932

   (16) https://github.com/python/cpython/issues/113568

   (17) https://github.com/python/cpython/issues/113594

   (18) https://github.com/python/cpython/issues/113538

   (19) https://github.com/python/cpython/issues/113626

   (20) https://github.com/python/cpython/issues/85567

   (21) https://github.com/python/cpython/issues/113537

   (22) https://github.com/python/cpython/issues/89850

   (23) https://github.com/python/cpython/issues/113569

   (24) https://github.com/python/cpython/issues/101225

   (25) https://github.com/python/cpython/issues/113568

   (26) https://github.com/python/cpython/issues/113543

   (27) https://github.com/python/cpython/issues/113028

   (28) https://github.com/python/cpython/issues/113421

   (29) https://github.com/python/cpython/issues/111784

   (30) https://github.com/python/cpython/issues/113407

   (31) https://github.com/python/cpython/issues/113320

   (32) https://github.com/python/cpython/issues/53502

   (33) https://github.com/python/cpython/issues/113358

   (34) https://github.com/python/cpython/issues/113214

   (35) https://github.com/python/cpython/issues/113246

   (36) https://github.com/python/cpython/issues/87264

   (37) https://github.com/python/cpython/issues/112182

   (38) https://github.com/python/cpython/issues/113225

   (39) https://github.com/python/cpython/issues/113149

   (40) https://github.com/python/cpython/issues/113117

   (41) https://github.com/python/cpython/issues/113199

   (42) https://github.com/python/cpython/issues/113191

   (43) https://github.com/python/cpython/issues/113188

   (44) https://github.com/python/cpython/issues/113119

   (45) https://github.com/python/cpython/issues/113202

   (46) https://github.com/python/cpython/issues/61648

   (47) https://github.com/python/cpython/issues/113175

   (48) https://github.com/python/cpython/issues/59616

   (49) https://github.com/python/cpython/issues/112559

   (50) https://github.com/python/cpython/issues/112962

   (51) https://github.com/python/cpython/issues/112989

   (52) https://github.com/python/cpython/issues/112970

   (53) https://github.com/python/cpython/issues/110190

   (54) https://github.com/python/cpython/issues/112540

   (55) https://github.com/python/cpython/issues/87286

   (56) https://github.com/python/cpython/issues/112800

   (57) https://github.com/python/cpython/issues/51944

   (58) https://github.com/python/cpython/issues/79325

   (59) https://github.com/python/cpython/issues/94692

   (60) https://github.com/python/cpython/issues/112736

   (61) https://github.com/python/cpython/issues/112727

   (62) https://github.com/python/cpython/issues/74690

   (63) https://github.com/python/cpython/issues/74690

   (64) https://github.com/python/cpython/issues/112645

   (65) https://github.com/python/cpython/issues/112640

   (66) https://github.com/python/cpython/issues/112622

   (67) https://github.com/python/cpython/issues/112618

   (68) https://github.com/python/cpython/issues/112334

   (69) https://github.com/python/cpython/issues/110190

   (70) https://github.com/python/cpython/issues/81194

   (71) https://github.com/python/cpython/issues/112578

   (72) https://github.com/python/cpython/issues/112516

   (73) https://github.com/python/cpython/issues/112510

   (74) https://github.com/python/cpython/issues/112328

   (75) https://github.com/python/cpython/issues/112509

   (76) https://github.com/python/cpython/issues/101336

   (77) https://github.com/python/cpython/issues/63284

   (78) https://github.com/python/cpython/issues/112414

   (79) https://github.com/python/cpython/issues/112358

   (80) https://github.com/python/cpython/issues/112405

   (81) https://github.com/python/cpython/issues/94722

   (82) https://github.com/python/cpython/issues/112361

   (83) https://github.com/python/cpython/issues/112345

   (84) https://github.com/python/cpython/issues/112137

   (85) https://github.com/python/cpython/issues/112332

   (86) https://github.com/python/cpython/issues/81620

   (87) https://github.com/python/cpython/issues/112292

   (88) https://github.com/python/cpython/issues/77621

   (89) https://github.com/python/cpython/issues/112137

   (90) https://github.com/python/cpython/issues/112139

   (91) https://github.com/python/cpython/issues/112105

   (92) https://github.com/python/cpython/issues/106922

   (93) https://github.com/python/cpython/issues/111874

   (94) https://github.com/python/cpython/issues/68166

   (95) https://github.com/python/cpython/issues/110275

   (96) https://github.com/python/cpython/issues/99367

   (97) https://github.com/python/cpython/issues/111615

   (98) https://github.com/python/cpython/issues/93162

   (99) https://github.com/python/cpython/issues/75666

   (100) https://github.com/python/cpython/issues/67790

   (101) https://github.com/python/cpython/issues/111049

   (102) https://github.com/python/cpython/issues/102980

   (103) https://github.com/python/cpython/issues/102988

   (104) https://www.cve.org/CVERecord?id=CVE-2023-27043

   (105) https://github.com/python/cpython/issues/52161

   (106) https://github.com/python/cpython/issues/82300

   (107) https://github.com/python/cpython/issues/110109

   (108) https://github.com/python/cpython/issues/109858

   (109) https://github.com/python/cpython/issues/109786

   (110) https://github.com/python/cpython/issues/91539

   (111) https://github.com/python/cpython/issues/103363

   (112) https://github.com/python/cpython/issues/102130

   (113) https://github.com/python/cpython/issues/99437

   (114) https://github.com/python/cpython/issues/104003

   (115) https://peps.python.org/pep-0702/

   (116) https://github.com/python/cpython/issues/103708

   (117) https://github.com/python/cpython/issues/66515

   (118) https://github.com/python/cpython/issues/83162

   (119) https://github.com/python/cpython/issues/91133

   (120) https://bugs.python.org/issue?@action=redirect&bpo=43153

   (121) https://bugs.python.org/issue?@action=redirect&bpo=32731

   (122) https://bugs.python.org/issue?@action=redirect&bpo=34321

   (123) https://bugs.python.org/issue?@action=redirect&bpo=35332

   (124) https://bugs.python.org/issue?@action=redirect&bpo=35928

   (125) https://bugs.python.org/issue?@action=redirect&bpo=26791

   (126) https://bugs.python.org/issue?@action=redirect&bpo=41422

   (127) https://bugs.python.org/issue?@action=redirect&bpo=19821

   (128) https://bugs.python.org/issue?@action=redirect&bpo=40262

   (129) https://bugs.python.org/issue?@action=redirect&bpo=39912

   (130) https://bugs.python.org/issue?@action=redirect&bpo=37260

   (131) https://bugs.python.org/issue?@action=redirect&bpo=36959

   (132) https://bugs.python.org/issue?@action=redirect&bpo=18060

   (133) https://bugs.python.org/issue?@action=redirect&bpo=29779

   (134) https://bugs.python.org/issue?@action=redirect&bpo=21360


File: python.info,  Node: Documentação<15>,  Next: Testes<18>,  Prev: Biblioteca<36>,  Up: Python 3 13 0 alpha 3

1.23.24.4 Documentação
......................

   - gh-111699(1): Realoca o aviso de descontinuação de ‘smtpd’ para sua
     própria seção em vez de em ‘locale’ no documento O que há de novo
     no Python 3.12

   - gh-110746(2): Marcação aprimorada para opções/valores válidos para
     os métodos ttk.treeview.column e ttk.treeview.heading, e para
     Layouts.

   - gh-95649(3): Document que o módulo *note asyncio: a. contém código
     retirado de v0.16.0 do projeto uvloop(4), bem como as informações
     de licenciamento do MIT necessárias.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/111699

   (2) https://github.com/python/cpython/issues/110746

   (3) https://github.com/python/cpython/issues/95649

   (4) https://github.com/MagicStack/uvloop/tree/v0.16.0


File: python.info,  Node: Testes<18>,  Next: Construção<18>,  Prev: Documentação<15>,  Up: Python 3 13 0 alpha 3

1.23.24.5 Testes
................

   - gh-111798(1): Desabilita ‘test_super_deep()’ de ‘test_call’ em
     construções pydebug em WASI; a profundidade da pilha é muito
     pequena para tornar o teste útil.

   - gh-111801(2): Reduz o limite de recursão em ‘test_isinstance’ para
     ‘test_infinitely_many_bases()’.  Isso evita um estouro de pilha em
     uma construção pydebug de WASI.

   - gh-111802(3): Especifica uma profundidade de recursão baixa para
     ‘test_bad_getattr()’ em ‘test.pickletester’ para evitar esgotar a
     pilha em uma construção pydebug para WASI.

   - gh-44626(4): Corrige *note os.path.isabs(): 224. retornando
     incorretamente ‘True’ quando recebe um caminho que começa com
     exatamente uma barra (invertida) no Windows.

     Corrige ‘pathlib.PureWindowsPath.is_absolute()’ retornando
     incorretamente ‘False’ para alguns caminhos que começam com duas
     barras (invertidas).

   - gh-113633(5): Use estado do módulo para o módulo de extensão
     _testcapi.

   - gh-109980(6): Corrige ‘test_tarfile_vs_tar’ em ‘test_shutil’ para
     macOS, onde o tar do sistema pode incluir mais informações no
     arquivo do que *note shutil.make_archive: 4b3.

   - gh-112769(7): Os testes agora comparam corretamente a versão zlib
     quando *note zlib.ZLIB_RUNTIME_VERSION: 11ad. contém sufixos não
     inteiros.  Por exemplo, zlib-ng define a versão como
     ‘1.3.0.zlib-ng’.

   - gh-112334(8): Adiciona um teste de regressão para verificar se
     ‘vfork()’ é usado quando esperado por *note subprocess: d6. em
     sistemas POSIX habilitados para vfork (Linux).

   - gh-108927(9): Corrigida a dependência de ordem na execução de
     testes no mesmo processo quando um teste que tem submódulos (por
     exemplo, test_importlib) segue um teste que importa seu submódulo
     (por exemplo, test_importlib.util) e precede um teste (por exemplo,
     test_unittest ou test_compileall) que usa esse submódulo.

   - bpo-40648(10): Modos de teste que o arquivo pode obter com chmod()
     no Windows.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/111798

   (2) https://github.com/python/cpython/issues/111801

   (3) https://github.com/python/cpython/issues/111802

   (4) https://github.com/python/cpython/issues/44626

   (5) https://github.com/python/cpython/issues/113633

   (6) https://github.com/python/cpython/issues/109980

   (7) https://github.com/python/cpython/issues/112769

   (8) https://github.com/python/cpython/issues/112334

   (9) https://github.com/python/cpython/issues/108927

   (10) https://bugs.python.org/issue?@action=redirect&bpo=40648


File: python.info,  Node: Construção<18>,  Next: Windows<16>,  Prev: Testes<18>,  Up: Python 3 13 0 alpha 3

1.23.24.6 Construção
....................

   - gh-114013(1): Corrige ‘Tools/wasm/wasi.py’ para não incluir o
     caminho para ‘python.wasm’ como parte de ‘HOSTRUNNER’.  A variável
     de ambiente tem como objetivo especificar como executar apenas o
     host WASI, tendo ‘python.wasm’ e sinalizadores relevantes anexados
     ao ‘HOSTRUNNER’.  Isso corrige o funcionamento de ‘make test’.

   - gh-113258(2): Alterada a construção do Windows para gravar módulos
     congelados gerados na árvore de construção em vez da árvore de
     fontes.

   - gh-112305(3): Corrigida a etapa ‘check-clean-src’ realizada em
     construções fora da árvore para detectar arquivos
     ‘$(srcdir)/Python/frozen_modules/*.h’ errantes e recomendou etapas
     de limpeza apropriadas da árvore de fontes para obter uma
     construção funcional novamente.

   - gh-112536(4): Adiciona suporte para sanitizador de thread (TSAN)

   - gh-112867(5): Corrige a construção para o caso em que
     WITH_PYMALLOC_RADIX_TREE=0 definido.

   - gh-103065(6): Apresenta ‘Tools/wasm/wasi.py’ para simplificar a
     execução de uma construção WASI.

   - bpo-11102(7): As funções *note os.major(): 1704, *note
     os.makedev(): 1706. e *note os.minor(): 1705. agora estão
     disponíveis no HP-UX v3.

   - bpo-36351(8): Não defina ipv6type ao fazer compilação cruzada.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/114013

   (2) https://github.com/python/cpython/issues/113258

   (3) https://github.com/python/cpython/issues/112305

   (4) https://github.com/python/cpython/issues/112536

   (5) https://github.com/python/cpython/issues/112867

   (6) https://github.com/python/cpython/issues/103065

   (7) https://bugs.python.org/issue?@action=redirect&bpo=11102

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36351


File: python.info,  Node: Windows<16>,  Next: macOS<11>,  Prev: Construção<18>,  Up: Python 3 13 0 alpha 3

1.23.24.7 Windows
.................

   - gh-114096(1): Os privilégios de processo que são ativados para
     criar junções de diretório agora são restaurados posteriormente,
     evitando alterações de comportamento em outras partes do programa.

   - gh-111877(2): As chamadas *note os.stat(): 4a0. estavam retornando
     valores de tempo incorretos para arquivos que não podiam ser
     acessados diretamente.

   - gh-111973(3): Atualiza o instalador do Windows para usar o SQLite
     3.44.2.

   - gh-113009(4): *note multiprocessing: 94.: No Windows, corrige uma
     condição de corrida em ‘Process.terminate()’: não define mais o
     atributo ‘returncode’ para sempre chamar ‘WaitForSingleObject()’ em
     ‘Process.wait()’.  Anteriormente, às vezes o processo ainda estava
     em execução após ‘TerminateProcess()’ mesmo se
     ‘GetExitCodeProcess()’ não fosse ‘STILL_ACTIVE’.  Patch por Victor
     Stinner.

   - gh-86179(5): Corrige cálculos de caminho ao iniciar o Python no
     Windows por meio de um link simbólico.

   - gh-71383(6): Atualiza Tcl/Tk no instalador do Windows para 8.6.13
     com um patch para suprimir avisos incorretos de ThemeChanged.

   - gh-111650(7): Garante que a variável do pré-processador
     ‘Py_GIL_DISABLED’ seja definida em ‘pyconfig.h’ para que módulos de
     extensão escritos em C possam usá-la.

   - gh-112278(8): Reduz o custo de tempo para algumas funções em *note
     platform: aa. no Windows se o usuário atual não tiver permissão
     para o WMI.

   - gh-73427(9): Descontinua *note
     sys._enablelegacywindowsfsencoding(): 2ae.  Use *note
     PYTHONLEGACYWINDOWSFSENCODING: 2af. em vez disso.  Patch por Inada
     Naoki.

   - gh-87868(10): Classifica e remove corretamente variáveis de
     ambiente duplicadas em ‘_winapi.CreateProcess()’.

   - bpo-37308(11): Corrige mojibake em *note mmap.mmap: 20b. ao usar um
     argumento 'tagname' não ASCII no Windows.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/114096

   (2) https://github.com/python/cpython/issues/111877

   (3) https://github.com/python/cpython/issues/111973

   (4) https://github.com/python/cpython/issues/113009

   (5) https://github.com/python/cpython/issues/86179

   (6) https://github.com/python/cpython/issues/71383

   (7) https://github.com/python/cpython/issues/111650

   (8) https://github.com/python/cpython/issues/112278

   (9) https://github.com/python/cpython/issues/73427

   (10) https://github.com/python/cpython/issues/87868

   (11) https://bugs.python.org/issue?@action=redirect&bpo=37308


File: python.info,  Node: macOS<11>,  Next: IDLE<15>,  Prev: Windows<16>,  Up: Python 3 13 0 alpha 3

1.23.24.8 macOS
...............

   - gh-113666(1): Adiciona as seguintes constantes ao módulo *note
     stat: d1.: ‘UF_SETTABLE’, ‘UF_TRACKED’, ‘UF_DATAVAULT’,
     ‘SF_SUPPORTED’, ‘SF_SETTABLE’, ‘SF_SYNTHETIC’, ‘SF_RESTRICTED’,
     ‘SF_FIRMLINK’ e ‘SF_DATALESS’.  Os valores ‘UF_SETTABLE’,
     ‘SF_SUPPORTED’, ‘SF_SETTABLE’ e ‘SF_SYNTHETIC’ estão disponíveis
     apenas no macOS.

   - gh-113536(2): *note os.waitid(): dc1. agora está disponível no
     macOS

   - gh-110459(3): Executar ‘configure ... --with-openssl-rpath=X/Y/Z’
     não falha mais em detectar OpenSSL no macOS.

   - gh-74573(4): Documenta que *note dbm.ndbm: 34. pode corromper
     silenciosamente arquivos DBM em atualizações ao exceder limites de
     plataforma não documentados e pode travar (falha de segmentação) ao
     ler um arquivo corrompido.  (FB8919203)

   - gh-65701(5): A ferramenta ‘freeze’ não funciona com construções de
     framework do Python.  Documente isso e faça sair mais cedo ao
     executar a ferramenta com tal construção.

   - gh-87277(6): webbrowser: Não procura navegadores X11 no macOS.
     Geralmente, eles não são usados e procurá-los pode resultar na
     inicialização do XQuartz, mesmo que ele não seja usado de outra
     forma.

   - gh-111973(7): Atualiza o instalador do macOS para usar o SQLite
     3.44.2.

   - gh-108269(8): Define ‘CFBundleAllowMixedLocalizations’ como true no
     Info.plist para o framework, Python.app incorporado e IDLE.app com
     instalações do framework no macOS. Isso permite que as aplicações
     selecionem o local preferido do usuário quando for diferente do
     inglês.

   - gh-102362(9): Garante que o resultado de ‘sysconfig.get_plaform()’
     inclua pelo menos uma versão principal e secundária, mesmo que
     ‘MACOSX_DEPLOYMENT_TARGET’ esteja definido como apenas uma versão
     principal durante a construção para corresponder ao formato
     esperado pelo pip.

   - gh-110017(10): Desabilita um teste de estresse de tratamento de
     sinal no macOS devido a um bug no macOS (FB13453490).

   - gh-110820(11): Garante que as definições do pré-processador para
     ‘ALIGNOF_MAX_ALIGN_T’, ‘SIZEOF_LONG_DOUBLE’ e
     ‘HAVE_GCC_ASM_FOR_X64’ estejam corretas para construções Universal
     2 no macOS.

   - gh-109981(12): Usa ‘/dev/fd’ no macOS para determinar o número de
     arquivos abertos em ‘test.support.os_helper.fd_count’ para evitar
     uma falha com descritores de arquivo “guarded” ao sondar arquivos
     abertos.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/113666

   (2) https://github.com/python/cpython/issues/113536

   (3) https://github.com/python/cpython/issues/110459

   (4) https://github.com/python/cpython/issues/74573

   (5) https://github.com/python/cpython/issues/65701

   (6) https://github.com/python/cpython/issues/87277

   (7) https://github.com/python/cpython/issues/111973

   (8) https://github.com/python/cpython/issues/108269

   (9) https://github.com/python/cpython/issues/102362

   (10) https://github.com/python/cpython/issues/110017

   (11) https://github.com/python/cpython/issues/110820

   (12) https://github.com/python/cpython/issues/109981


File: python.info,  Node: IDLE<15>,  Next: API C<19>,  Prev: macOS<11>,  Up: Python 3 13 0 alpha 3

1.23.24.9 IDLE
..............

   - gh-72284(1): Melhora as listas de recursos, atalhos de teclado do
     editor e atalhos de teclado do shell no documento do IDLE.

   - gh-113903(2): Corrige a falha rara de test.test_idle, em
     test_configdialog.

   - gh-113729(3): Corrige o bug do menu “Help -> IDLE Doc” em 3.11.7 e
     3.12.1.

   - gh-113269(4): Corrige o travamento do test_editor no macOS
     Catalina.

   - gh-112898(5): Corrige o processamento de arquivos não salvos ao
     sair do IDLE no macOS.

   - bpo-13586(6): Insere o texto selecionado ao abrir a caixa de
     diálogo “Replace”.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/72284

   (2) https://github.com/python/cpython/issues/113903

   (3) https://github.com/python/cpython/issues/113729

   (4) https://github.com/python/cpython/issues/113269

   (5) https://github.com/python/cpython/issues/112898

   (6) https://bugs.python.org/issue?@action=redirect&bpo=13586


File: python.info,  Node: API C<19>,  Prev: IDLE<15>,  Up: Python 3 13 0 alpha 3

1.23.24.10 API C
................

   - gh-106560(1): Corrige declarações redundantes na API C pública.
     Declare PyBool_Type, PyLong_Type e PySys_Audit() apenas uma vez.
     Patch por Victor Stinner.

   - gh-112438(2): Corrige o suporte de unidades de formato “es”, “et”,
     “es#” e “et#” em tuplas aninhadas em funções do tipo *note
     PyArg_ParseTuple(): 571.

   - gh-111545(3): Adiciona a função *note Py_HashPointer(): 368. para
     fazer hash de um ponteiro.  Patch por Victor Stinner.

   - gh-65210(4): Altera a declaração do parâmetro 'keywords' de *note
     PyArg_ParseTupleAndKeywords(): 383. e *note
     PyArg_VaParseTupleAndKeywords(): 384. para melhor compatibilidade
     com C++.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/106560

   (2) https://github.com/python/cpython/issues/112438

   (3) https://github.com/python/cpython/issues/111545

   (4) https://github.com/python/cpython/issues/65210


File: python.info,  Node: Python 3 13 0 alpha 2,  Next: Python 3 13 0 alpha 1,  Prev: Python 3 13 0 alpha 3,  Up: Changelog

1.23.25 Python 3.13.0 alpha 2
-----------------------------

'Data de lançamento: 2023-11-22'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<33>.
* Biblioteca: Biblioteca<37>.
* Testes: Testes<19>.
* Construção: Construção<19>.
* Windows: Windows<17>.
* macOS: macOS<12>.
* IDLE: IDLE<16>.
* Ferramentas/Demos: Ferramentas/Demos<11>.
* API C: API C<20>.


File: python.info,  Node: Núcleo e embutidos<33>,  Next: Biblioteca<37>,  Up: Python 3 13 0 alpha 2

1.23.25.1 Núcleo e embutidos
............................

   - gh-112243(1): Não inclua comentários nas expressões do depurador
     com f-string.  Patch por Pablo Galindo

   - gh-112287(2): Otimiza ligeiramente o interpretador nível 2 (uop)
     carregando apenas ‘oparg’ e ‘operand’ quando necessário.  Também
     dobra o limite de tamanho de rastreamento novamente, para 512 desta
     vez.

   - gh-112266(3): Altera as docstrings de *note __dict__: 55b. e
     ‘__weakref__’.

   - gh-111807(4): Reduz a profundidade máxima da pilha do analisador
     para 1000 em construções de depuração WASI.

   - gh-111798(5): Quando o Python é construído no modo de depuração,
     define o limite de recursão C para 500 em vez de 1500.  Uma
     construção de depuração provavelmente é construída com baixo nível
     de otimização, o que implica maior uso de memória de pilha do que
     uma construção de lançamento.  Patch por Victor Stinner.

   - gh-106529(6): Habilita a tradução de ‘FOR_ITER’ não especializado
     para o Nível 2.

   - gh-111916(7): Torna os módulos relacionados ao hashlib seguros para
     thread sem a GIL

   - gh-81137(8): Descontinua a atribuição ao campo ‘__code__’ de uma
     função quando o novo objeto de código for de um tipo incompatível
     (por exemplo, de um gerador para uma função simples).

   - gh-79932(9): Levanta uma exceção se *note frame.clear(): 280. for
     chamado em um quadro suspenso.

   - gh-81925(10): Implementa IDs de thread nativas para GNU KFreeBSD.

   - gh-111843(11): Usa o backoff exponencial para reduzir o número de
     tentativas de otimização de nível 2 com falha em mais de 99%.

   - gh-110829(12): Unir uma thread agora garante que a thread do
     sistema operacional subjacente tenha saído.  Isso é necessário para
     fork() mais seguro em processos multithread.

   - gh-109369(13): Certifica-se de que os rastreamentos de nível 2
     sejam desotimizados se o código for instrumentado

   - gh-111772(14): Especializa cargas e armazenamentos de slot para
     _Py_T_OBJECT, bem como Py_T_OBJECT_EX

   - gh-111666(15): Acelera *note BaseExceptionGroup.derive(): 17b3,
     *note BaseExceptionGroup.subgroup(): 17b4. e *note
     BaseExceptionGroup.split(): 1670. alterando como eles analisam os
     argumentos passados.

   - gh-111654(16): Corrige o travamento do tempo de execução quando
     algum erro acontece no opcode ‘LOAD_FROM_DICT_OR_DEREF’.

   - gh-111623(17): Adiciona suporte para compartilhar tuplas entre
     interpretadores usando a API de interpretador cruzado.  Patch por
     Anthony Shaw.

   - gh-111354(18): O oparg de *note YIELD_VALUE: 314. agora é ‘1’ se a
     instrução for parte de um yield-from ou await, e ‘0’ caso
     contrário.

     O estado do quadro SUSPENDED agora é dividido em ‘SUSPENDED’ e
     ‘SUSPENDED_YIELD_FROM’.  Isso simplifica o código em ‘_PyGen_yf’.

   - gh-111520(19): Mescla os interpretadores nível 1 (bytecode) e nível
     2 (micro-ops), movendo o laço do interpretador nível 2 e alterne
     para ‘_PyEval_EvalFrameDefault()’ em ‘Python/ceval.c’.  O arquivo
     ‘Python/executor.c’ desapareceu.  Além disso, as macros ‘TIER_ONE’
     e ‘TIER_TWO’ agora são manipuladas pelo gerador de código.

     'Cuidado!'  Isso altera as variáveis de ambiente para habilitar
     micro-ops e sua depuração para ‘PYTHON_UOPS’ e ‘PYTHON_LLTRACE’.

   - gh-109181(20): Acelera a criação do objeto ‘Traceback’ calculando
     preguiçosamente o número da linha.  Patch por Pablo Galindo

   - gh-111420(21): Permite comentários de tipo em instruções ‘with’
     entre parênteses

   - gh-111438(22): Adicione suporte para compartilhar floats entre
     interpretadores usando a API de interpretador cruzado.  Patch por
     Anthony Shaw.

   - gh-111435(23): Adiciona suporte para compartilhar ‘True’ e ‘False’
     entre interpretadores usando a API de interpretador cruzado.  Patch
     por Anthony Shaw.

   - gh-102388(24): Corrige um bug em que os codecs ‘iso2022_jp_3’ e
     ‘iso2022_jp_2004’ liam fora dos limites

   - gh-111366(25): Corrige um problema no *note codeop: 1c. que estava
     fazendo com que exceções *note SyntaxError: 18d. geradas na
     presença de sintaxe inválida não contivessem mensagens de erro
     precisas.  Patch por Pablo Galindo

   - gh-111380(26): Corrige um bug que estava fazendo com que *note
     SyntaxWarning: 466. aparecesse duas vezes ao analisar se uma
     sintaxe inválida fosse encontrada posteriormente.  Patch por Pablo
     Galindo

   - gh-111374(27): Adicionada uma nova variável de ambiente *note
     PYTHON_FROZEN_MODULES: 18e.  Determina se os módulos congelados são
     ou não ignorados pelo mecanismo de importação, equivalente à opção
     de linha de comando *note -X frozen_modules: 176.

   - gh-111354(28): Remove ‘oparg’ de *note YIELD_VALUE: 314.  Altera
     ‘oparg’ de *note RESUME: 315. para incluir informações sobre o
     except-depth.  Essas alterações possibilitam simplificar o código
     no fechamento do gerador.

   - gh-94438(29): Corrige uma regressão que impedia o salto entre ‘is
     None’ e ‘is not None’ durante a depuração.  Patch por Savannah
     Ostrowski.

   - gh-67224(30): Mostra linhas de origem em tracebacks ao usar a opção
     ‘-c’ ao executar Python.  Patch por Pablo Galindo

   - gh-111123(31): Corrige um bug em que uma declaração *note global:
     18a. em um bloco *note except: 18b. é rejeitada quando o global é
     usado no bloco *note else: 18c.

   - gh-110938(32): Corrige mensagens de erro para blocos indentados com
     funções e classes com parâmetros de tipo genérico.  Patch por Pablo
     Galindo

   - gh-109214(33): Remove atualizações desnecessárias de ponteiros de
     instruções antes de retornar de quadros.

   - gh-110912(34): Exibe corretamente o traceback para exceções *note
     MemoryError: 15c5. usando o módulo *note traceback: fe.  Patch por
     Pablo Galindo

   - gh-109894(35): Corrige falha devido a *note MemoryError: 15c5.
     estático inicializado incorretamente no subinterpretador.

   - gh-110892(36): Retorna ‘NULL’ para eventos ‘PyTrace_RETURN’
     causados por uma exceção

   - gh-110864(37): Corrige análise de argumento por
     ‘_PyArg_UnpackKeywordsWithVararg’ para funções que definem
     parâmetros posicionais-ou-nomeados, argumentos variáveis e
     somente-nomeados.

   - gh-109094(38): Substitui ‘prev_instr’ no quadro do interpretador
     por ‘instr_ptr’ que aponta para o início da instrução que está
     sendo executada no momento (ou será executada quando o quadro for
     retomado).

   - gh-110805(39): Permite que o repl mostre o código-fonte e
     tracebacks completos.  Patch por Pablo Galindo

   - gh-110722(40): Adiciona ‘PYTHON_PRESITE=package.module’ para
     importar um módulo no início do ciclo de vida do interpretador
     antes de ‘site.py’ ser executado.  O Python precisa ser *note
     construído no modo de depuração: 1f9. para que esta opção exista.

   - gh-110481(41): Implementa a contagem de referências tendenciosa em
     construções ‘--disable-gil’.

   - gh-110543(42): Corrige regressão no Python 3.12 onde
     ‘types.CodeType.replace()’ produziria um objeto de código quebrado
     se chamado em um objeto código de módulo ou classe que contém uma
     compreensão.  Patch por Jelle Zijlstra.

   - gh-89519(43): Removidos os descritores encadeados de *note
     classmethod: 166. (introduzidos em bpo-19072(44)).  Isso não pode
     mais ser usado para encapsular outros descritores como *note
     property: 194.  O design principal desse recurso era falho e
     causava uma série de problemas posteriores.  Para “passar” um *note
     classmethod: 166, considere usar o atributo ‘__wrapped__’ que foi
     adicionado no Python 3.10.

   - gh-103615(45): Usa eventos locais para rastreamento de opcode

   - bpo-46657(46): Adiciona suporte ao alocador de memória mimalloc.

   - gh-106718(47): Quando PyConfig.stdlib_dir é definido
     explicitamente, ele agora é respeitado e não será substituído por
     PyConfig.home.

   - gh-106905(48): Corrige o SystemError incorreto sobre a
     incompatibilidade de profundidade de recursão do construtor AST.

   - gh-100445(49): Melhora a mensagem de erro para strings não
     terminadas com escapes.

   - bpo-45759(50): Melhoradas as mensagens de erro para instruções
     ‘elif’/‘else’ que não correspondem a nenhuma instrução válida.
     Patch por Jeremiah Vivian.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/112243

   (2) https://github.com/python/cpython/issues/112287

   (3) https://github.com/python/cpython/issues/112266

   (4) https://github.com/python/cpython/issues/111807

   (5) https://github.com/python/cpython/issues/111798

   (6) https://github.com/python/cpython/issues/106529

   (7) https://github.com/python/cpython/issues/111916

   (8) https://github.com/python/cpython/issues/81137

   (9) https://github.com/python/cpython/issues/79932

   (10) https://github.com/python/cpython/issues/81925

   (11) https://github.com/python/cpython/issues/111843

   (12) https://github.com/python/cpython/issues/110829

   (13) https://github.com/python/cpython/issues/109369

   (14) https://github.com/python/cpython/issues/111772

   (15) https://github.com/python/cpython/issues/111666

   (16) https://github.com/python/cpython/issues/111654

   (17) https://github.com/python/cpython/issues/111623

   (18) https://github.com/python/cpython/issues/111354

   (19) https://github.com/python/cpython/issues/111520

   (20) https://github.com/python/cpython/issues/109181

   (21) https://github.com/python/cpython/issues/111420

   (22) https://github.com/python/cpython/issues/111438

   (23) https://github.com/python/cpython/issues/111435

   (24) https://github.com/python/cpython/issues/102388

   (25) https://github.com/python/cpython/issues/111366

   (26) https://github.com/python/cpython/issues/111380

   (27) https://github.com/python/cpython/issues/111374

   (28) https://github.com/python/cpython/issues/111354

   (29) https://github.com/python/cpython/issues/94438

   (30) https://github.com/python/cpython/issues/67224

   (31) https://github.com/python/cpython/issues/111123

   (32) https://github.com/python/cpython/issues/110938

   (33) https://github.com/python/cpython/issues/109214

   (34) https://github.com/python/cpython/issues/110912

   (35) https://github.com/python/cpython/issues/109894

   (36) https://github.com/python/cpython/issues/110892

   (37) https://github.com/python/cpython/issues/110864

   (38) https://github.com/python/cpython/issues/109094

   (39) https://github.com/python/cpython/issues/110805

   (40) https://github.com/python/cpython/issues/110722

   (41) https://github.com/python/cpython/issues/110481

   (42) https://github.com/python/cpython/issues/110543

   (43) https://github.com/python/cpython/issues/89519

   (44) https://bugs.python.org/issue?@action=redirect&bpo=19072

   (45) https://github.com/python/cpython/issues/103615

   (46) https://bugs.python.org/issue?@action=redirect&bpo=46657

   (47) https://github.com/python/cpython/issues/106718

   (48) https://github.com/python/cpython/issues/106905

   (49) https://github.com/python/cpython/issues/100445

   (50) https://bugs.python.org/issue?@action=redirect&bpo=45759


File: python.info,  Node: Biblioteca<37>,  Next: Testes<19>,  Prev: Núcleo e embutidos<33>,  Up: Python 3 13 0 alpha 2

1.23.25.2 Biblioteca
....................

   - gh-111942(1): Corrige o SystemError no construtor TextIOWrapper com
     o argumento “errors” não codificável no modo não de depuração.

   - gh-111995(2): Adicionada a constante ‘NI_IDN’ ao módulo *note
     socket: cc. quando presente em C no momento da compilação para uso
     com *note socket.getnameinfo(): 17b6.

   - gh-109538(3): Emite mensagem de aviso em vez de exibir *note
     RuntimeError: 195. quando o laço de eventos já foi fechado em
     ‘StreamWriter.__del__()’.

   - gh-111942(4): Corrige travamentos em *note
     io.TextIOWrapper.reconfigure(): b5e. ao passar argumentos
     inválidos, por exemplo, codificação não string.

   - gh-111460(5): *note curses: 2b.: restaura o suporte a caracteres
     amplos (incluindo *note curses.unget_wch(): 10d7. e *note
     get_wch(): 10d6.) no macOS, que estava indisponível devido a uma
     regressão no Python 3.12.

   - gh-103791(6): *note contextlib.suppress: f58. agora oferece suporte
     à supressão de exceções levantadas como parte de um *note
     BaseExceptionGroup: 25f, além do suporte recente para *note
     ExceptionGroup: 1b6.

   - gh-111835(7): A classe *note mmap.mmap: 20b. agora tem um método
     *note seekable(): 20c. que pode ser usado quando um objeto arquivo
     ou similar pesquisável é necessário.  O método *note seek(): 20d.
     agora retorna a nova posição absoluta.  Patch por Donghee Na.

   - gh-111804(8): Remove posix.fallocate() em WASI, pois o
     posix_fallocate() subjacente não está disponível na visualização
     WASI2.

   - gh-111841(9): Corrige argumentos truncados em um caractere nulo
     incorporado em *note os.putenv(): 922. e *note os.unsetenv(): 921.
     no Windows.

   - gh-111768(10): *note wsgiref.util.is_hop_by_hop(): 17b7. agora é
     exposto corretamente em ‘__all__’.

   - gh-80731(11): Evita executar a função padrão em *note cmd.Cmd:
     17b8. em um bloco except

   - gh-111541(12): Corrige *note doctest: 3a. para subclasses não
     embutidas de *note SyntaxError: 18d.

   - gh-111719(13): Adiciona validação de argumento extra para o comando
     ‘alias’ em *note pdb: a5.

   - gh-111482(14): *note time: ee.: Torna as funções *note
     time.clock_gettime(): 119d. e *note time.clock_gettime_ns(): af4.
     até 2x mais rápidas por convenção de chamada mais rápida.  Patch
     por Victor Stinner.

   - gh-110894(15): Chama manipulador de exceção de laço para exceções
     em ‘client_connected_cb’ de *note asyncio.start_server(): b2c. para
     que as aplicações possam lidar com isso.  Patch por Kumar Aditya.

   - gh-111531(16): Corrige vazamentos de referência nos métodos
     ‘bind_class()’ e ‘bind_all()’ dos widgets *note tkinter: f0.

   - gh-111246(17): *note asyncio.loop.create_unix_server(): 1ae. agora
     removerá automaticamente o soquete Unix quando o servidor for
     fechado.

   - gh-111356(18): Adicionados *note io.text_encoding(): 17b9, *note
     io.DEFAULT_BUFFER_SIZE: 17ba. e *note io.IncrementalNewlineDecoder:
     17bb. para ‘io.__all__’.

   - gh-66425(19): Remove o código para definir o cabeçalho REMOTE_HOST
     do módulo wsgiref, pois ele é inacessível.  Este cabeçalho é usado
     por motivos de desempenho, o que não é necessário no módulo
     wsgiref.

   - gh-111429(20): Acelera *note pathlib.PurePath.relative_to(): 2ca. e
     *note is_relative_to(): 2c9.

   - gh-111342(21): Corrigido erro de digitação em *note math.sumprod():
     497.

   - gh-68166(22): Remove menção de tipo de elemento “vsapi” não
     suportado em *note tkinter.ttk.Style.element_create(): 258.
     Adiciona testes para ‘element_create()’ e outros métodos
     ‘ttk.Style’.  Adiciona exemplos para ‘element_create()’ na
     documentação.

   - gh-111388(23): Adiciona parâmetro ‘show_group’ para *note
     traceback.format_exception_only(): 851, que permite formatar
     instâncias *note ExceptionGroup: 1b6.

   - gh-79033(24): Outra tentativa de corrigir *note
     asyncio.Server.wait_closed(): 17bc.  Agora ela bloqueia até que
     ambas as condições sejam verdadeiras: o servidor é fechado, 'e' não
     há mais conexões ativas.  (Isso significa que em alguns casos onde
     na versão 3.12.0 essa função retornaria 'incorretamente'
     imediatamente, agora ela bloqueará; em particular, quando não há
     conexões ativas, mas o servidor ainda não foi fechado.)

   - gh-111259(25): Otimiza curingas recursivos em *note pathlib: a4.

   - gh-111295(26): Corrige *note time: ee. não verificando erros ao
     inicializar.

   - gh-111253(27): Adiciona verificação de erros durante a
     inicialização do módulo ‘_socket’.

   - gh-111251(28): Corrige ‘_blake2’ não verificando erros ao
     inicializar.

   - gh-111233(29): Corrige *note select: c1. não verificando erros ao
     inicializar.

   - gh-111230(30): Corrige *note ssl: d0. não verificando erros ao
     inicializar.

   - gh-111174(31): Corrige travamento em *note io.BytesIO.getbuffer():
     1231. chamado repetidamente para BytesIO vazio.

   - gh-111187(32): Adia versão de remoção para
     locale.getdefaultlocale() para Python 3.15.

   - gh-111159(33): Corrige comparação de saída *note doctest: 3a. para
     exceções com notas.

   - gh-110910(34): Corrige manipulação de estado inválido em *note
     asyncio.TaskGroup: 1b5. e *note asyncio.Timeout: 17bd.  Eles agora
     geram RuntimeError adequado se forem usados incorretamente e são
     deixados em estado consistente depois disso.

   - gh-111092(35): Faz turtledemo ser executado sem root padrão
     habilitado.

   - gh-110944(36): Adiciona suporte a apelido e variáveis de
     conveniência para completamento automático de *note pdb: a5.

   - gh-110745(37): Adicionado o parâmetro 'newline' para *note
     pathlib.Path.read_text(): e72.  Patch por Junya Okabe.

   - gh-84583(38): Faz *note pdb: a5. entrar no modo post-mortem mesmo
     para *note SyntaxError: 18d.

   - gh-80675(39): Define ‘f_trace_lines = True’ em todos os quadros em
     *note pdb.set_trace(): 235.

   - gh-110771(40): Expõe as partes de configuração e limpeza de
     ‘asyncio.run_forever()’ como os métodos autônomos
     ‘asyncio.run_forever_setup()’ e ‘asyncio.run_forever_cleanup()’.
     Isso permite uma integração mais estreita com laços de eventos da
     GUI.

   - gh-110774(41): Suporte para definir o kwarg loop_factory *note
     asyncio.Runner: 600. em *note unittest.IsolatedAsyncioTestCase:
     30c.

   - gh-110392(42): Corrige *note tty.setraw(): 17be. e *note
     tty.setcbreak(): 176e.: anteriormente eles retornavam uma lista
     parcialmente modificada dos atributos tty originais.  *note
     tty.cfmakeraw(): 17bf. e *note tty.cfmakecbreak(): 176f. agora
     fazem uma cópia da lista de caracteres especiais antes de
     modificá-la.

   - gh-59013(43): Torna o número de linhas do ponto de interrupção da
     função mais preciso em *note pdb: a5.

   - gh-88434(44): Emite aviso de descontinuação para números não
     inteiros em funções e métodos *note gettext: 63. que consideram
     formas plurais, mesmo que a tradução não tenha sido encontrada.

   - gh-110395(45): Garante que os objetos *note select.kqueue(): 17c0.
     apareçam corretamente como fechados em filhos bifurcados, para
     evitar operações em um descritor de arquivo inválido.

   - gh-110196(46): Adiciona o método ‘__reduce__’ a ‘IPv6Address’ para
     manter ‘scope_id’

   - gh-109747(47): Melhora os erros para padrões 'look-behind' não
     suportados.  Agora re.error é levantada em vez de OverflowError ou
     RuntimeError para largura muito grande do padrão 'look-behind.'

   - gh-109466(48): Adiciona a propriedade *note
     ipaddress.IPv4Address.ipv6_mapped: 1fb, que retorna o endereço IPv6
     mapeado para IPv4.

   - gh-85098(49): Implementa a CLI do módulo *note symtable: d8. e
     melhorar o repr de *note Symbol: 17c1.

   - gh-108791(50): Tratamento de erros aprimorado na interface de linha
     de comando *note pdb: a5, fazendo com que ela produza mensagens de
     erro mais concisas.

   - gh-105931(51): Altera *note compileall: 20. para remover apenas o
     prefixo stripdir do caminho completo registrado no arquivo ‘.pyc’
     compilado, quando o prefixo corresponder ao início do caminho
     completo em sua totalidade.  Quando o prefixo não corresponder,
     nenhuma remoção será realizada e um aviso para esse efeito será
     exibido.

     Anteriormente, todos os componentes de caminho do prefixo stripdir
     que correspondiam ao caminho completo eram removidos, enquanto
     aqueles que não correspondiam eram deixados sozinhos (incluindo
     aqueles intercalados entre componentes correspondentes).

   - gh-107431(52): Cria os tipos ‘DictProxy’ e ‘ListProxy’ em *note
     tipos Generic Alias: 6b2. de *note multiprocessing.managers: 97.
     para uso ‘[]’ em contextos de tipagem.

   - gh-72904(53): Adiciona *note glob.translate(): 1ea.  Esta função
     converte um nome de caminho com curingas de estilo shell em uma
     expressão regular.

   - gh-90026(54): Define ‘USE_XATTRS’ no Cygwin para que as funções
     relacionadas a XATTR no módulo *note os: a1. fiquem disponíveis.

   - gh-90890(55): Novos métodos *note mailbox.Maildir.get_info(): 17c2,
     *note mailbox.Maildir.set_info(): 17c3, *note
     mailbox.Maildir.get_flags(): 17c4, *note
     mailbox.Maildir.set_flags(): 17c5, *note
     mailbox.Maildir.add_flag(): 17c6, *note
     mailbox.Maildir.remove_flag(): 17c7.  Esses métodos aceleram o
     acesso às informações e/ou sinalizadores de uma mensagem e são
     úteis quando não é necessário acessar o conteúdo da mensagem, como
     ao iterar sobre um Maildir para encontrar mensagens com
     sinalizadores específicos.

   - gh-102956(56): Corrige o retorno de strings de bytes vazias após
     uma busca no módulo zipfile

   - gh-102895(57): Adicionado um parâmetro ‘local_exit’ para *note
     code.interact(): 17c8. para evitar que ‘exit()’ e ‘quit’ fechem
     ‘sys.stdin’ e levantem ‘SystemExit’.

   - gh-97928(58): Altera o comportamento de ‘tkinter.Text.count()’.
     Agora ele sempre retorna um inteiro se uma ou menos opções de
     contagem forem especificadas.  Anteriormente, ele podia retornar
     uma única contagem como uma tupla de 1 elemento, um inteiro
     (somente se a opção ‘"update"’ fosse especificada) ou ‘None’ se
     nenhum item fosse encontrado.  O resultado agora é o mesmo se
     ‘wantobjects’ for definido como ‘0’.

   - gh-96954(59): Troca o armazenamento dos nomes de pontos de código
     unicode para usar uma estrutura de dados diferente, um grafo de
     palavras acíclicas direcionadas(60).  Isso torna a biblioteca
     compartilhada unicodedata cerca de 440 KiB menor.  Contribuição de
     Carl Friedrich Bolz-Tereick usando código do projeto PyPy.

   - gh-73561(61): Omite o escopo da interface de um endereço IPv6
     quando usado como cabeçalho de host por *note http.client: 6f.

   - gh-86826(62): ‘zipinfo’ agora oferece suporte ao intervalo completo
     de valores na string TZ determinado pelo RFC 8536 e detecta todos
     os formatos inválidos.  Ambas as implementações Python e C agora
     levantam exceções do mesmo tipo em dados inválidos.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/111942

   (2) https://github.com/python/cpython/issues/111995

   (3) https://github.com/python/cpython/issues/109538

   (4) https://github.com/python/cpython/issues/111942

   (5) https://github.com/python/cpython/issues/111460

   (6) https://github.com/python/cpython/issues/103791

   (7) https://github.com/python/cpython/issues/111835

   (8) https://github.com/python/cpython/issues/111804

   (9) https://github.com/python/cpython/issues/111841

   (10) https://github.com/python/cpython/issues/111768

   (11) https://github.com/python/cpython/issues/80731

   (12) https://github.com/python/cpython/issues/111541

   (13) https://github.com/python/cpython/issues/111719

   (14) https://github.com/python/cpython/issues/111482

   (15) https://github.com/python/cpython/issues/110894

   (16) https://github.com/python/cpython/issues/111531

   (17) https://github.com/python/cpython/issues/111246

   (18) https://github.com/python/cpython/issues/111356

   (19) https://github.com/python/cpython/issues/66425

   (20) https://github.com/python/cpython/issues/111429

   (21) https://github.com/python/cpython/issues/111342

   (22) https://github.com/python/cpython/issues/68166

   (23) https://github.com/python/cpython/issues/111388

   (24) https://github.com/python/cpython/issues/79033

   (25) https://github.com/python/cpython/issues/111259

   (26) https://github.com/python/cpython/issues/111295

   (27) https://github.com/python/cpython/issues/111253

   (28) https://github.com/python/cpython/issues/111251

   (29) https://github.com/python/cpython/issues/111233

   (30) https://github.com/python/cpython/issues/111230

   (31) https://github.com/python/cpython/issues/111174

   (32) https://github.com/python/cpython/issues/111187

   (33) https://github.com/python/cpython/issues/111159

   (34) https://github.com/python/cpython/issues/110910

   (35) https://github.com/python/cpython/issues/111092

   (36) https://github.com/python/cpython/issues/110944

   (37) https://github.com/python/cpython/issues/110745

   (38) https://github.com/python/cpython/issues/84583

   (39) https://github.com/python/cpython/issues/80675

   (40) https://github.com/python/cpython/issues/110771

   (41) https://github.com/python/cpython/issues/110774

   (42) https://github.com/python/cpython/issues/110392

   (43) https://github.com/python/cpython/issues/59013

   (44) https://github.com/python/cpython/issues/88434

   (45) https://github.com/python/cpython/issues/110395

   (46) https://github.com/python/cpython/issues/110196

   (47) https://github.com/python/cpython/issues/109747

   (48) https://github.com/python/cpython/issues/109466

   (49) https://github.com/python/cpython/issues/85098

   (50) https://github.com/python/cpython/issues/108791

   (51) https://github.com/python/cpython/issues/105931

   (52) https://github.com/python/cpython/issues/107431

   (53) https://github.com/python/cpython/issues/72904

   (54) https://github.com/python/cpython/issues/90026

   (55) https://github.com/python/cpython/issues/90890

   (56) https://github.com/python/cpython/issues/102956

   (57) https://github.com/python/cpython/issues/102895

   (58) https://github.com/python/cpython/issues/97928

   (59) https://github.com/python/cpython/issues/96954

   (60) 
https://pt.wikipedia.org/wiki/Aut%C3%B4mato_finito_determinístico_acíclico

   (61) https://github.com/python/cpython/issues/73561

   (62) https://github.com/python/cpython/issues/86826


File: python.info,  Node: Testes<19>,  Next: Construção<19>,  Prev: Biblioteca<37>,  Up: Python 3 13 0 alpha 2

1.23.25.3 Testes
................

   - gh-111808(1): Faz o valor padrão de
     ‘test.support.infinite_recursion()’ ser condicional com base em se
     otimizações foram usadas ao compilar o interpretador.  Isso ajuda
     com plataformas como WASI cujo tamanho de pilha é muito restrito em
     construções de depuração.

   - gh-110722(2): A coleta de cobertura de linha de bibliotecas padrão
     dentro do conjunto de testes de regressão agora é precisa, bem como
     muito mais rápida.  Patch por Łukasz Langa.

   - gh-110367(3): Torna a opção regrtest ‘--verbose3’ compatível com as
     opções ‘--huntrleaks -jN’.  O comando ‘./python -m test -j1 -R 3:3
     --verbose3’ agora funciona como esperado.  Patch por Victor
     Stinner.

   - gh-111165(4): Remove as funções não mais utilizadas
     ‘run_unittest()’ e ‘run_doctest()’ do módulo *note test.support:
     e4.

   - gh-110932(5): Corrige regrtest se a variável de ambiente
     ‘SOURCE_DATE_EPOCH’ estiver definida: usar o valor da variável como
     a semente aleatória.  Patch por Victor Stinner.

   - gh-110995(6): test_gdb: Corrige a detecção de gdb construído sem
     suporte a scripts Python.  Patch por Victor Stinner.

   - gh-110918(7): Os padrões de correspondência de casos de teste
     especificados pelas opções ‘--match’, ‘--ignore’, ‘--matchfile’ e
     ‘--ignorefile’ agora são testados na ordem de especificação, e a
     última correspondência determina se o caso de teste deve ser
     executado ou ignorado.

   - gh-108747(8): Adiciona o teste de unidade para os ganchos
     ‘usercustomize’ e ‘sitecustomize’ de *note site: c7.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/111808

   (2) https://github.com/python/cpython/issues/110722

   (3) https://github.com/python/cpython/issues/110367

   (4) https://github.com/python/cpython/issues/111165

   (5) https://github.com/python/cpython/issues/110932

   (6) https://github.com/python/cpython/issues/110995

   (7) https://github.com/python/cpython/issues/110918

   (8) https://github.com/python/cpython/issues/108747


File: python.info,  Node: Construção<19>,  Next: Windows<17>,  Prev: Testes<19>,  Up: Python 3 13 0 alpha 2

1.23.25.4 Construção
....................

   - gh-96954(1): Faz ‘make regen-unicodedata’ funcionar para
     construções fora da árvore do CPython.

   - gh-112088(2): Adiciona o script ‘Tools/build/regen-configure.sh’
     para regenerar o ‘configure’ com uma imagem de contêiner do Ubuntu.
     A imagem do contêiner ‘quay.io/tiran/cpython_autoconf:271’
     (tiran/cpython_autoconf(3)) não é mais usada.  Patch por Victor
     Stinner.

   - gh-111046(4): Para wasi-threads, a memória agora é exportada para
     corrigir problemas de compatibilidade com alguns tempos de execução
     wasm.

   - gh-110828(5): AIX 32 bits precisa de ‘-latomic’ para construir o
     módulo de extensão ‘_testcapi’.

   - gh-85283(6): As extensões C ‘errno’, ‘md5’, ‘resource’, ‘winsound’,
     ‘_ctypes_test’, ‘_multiprocessing.posixshmem’, ‘_scproxy’, ‘_stat’,
     ‘_testimportmultiple’ e ‘_uuid’ agora são criadas com a *note API C
     limitada: 396.  Patch por Victor Stinner.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/96954

   (2) https://github.com/python/cpython/issues/112088

   (3) https://github.com/tiran/cpython_autoconf

   (4) https://github.com/python/cpython/issues/111046

   (5) https://github.com/python/cpython/issues/110828

   (6) https://github.com/python/cpython/issues/85283


File: python.info,  Node: Windows<17>,  Next: macOS<12>,  Prev: Construção<19>,  Up: Python 3 13 0 alpha 2

1.23.25.5 Windows
.................

   - gh-111856(1): Corrige *note fstat(): db4. em sistemas de arquivos
     que não oferecem suporte a solicitações de ID de arquivo.  Isso
     inclui FAT32 e exFAT.

   - gh-111293(2): Corrige *note os.DirEntry.inode: 17cc. eliminando 64
     bits mais altos de uma ID de arquivo em alguns sistemas de arquivos
     no Windows.

   - gh-110913(3): O WindowsConsoleIO agora divide corretamente buffers
     grandes sem dividir sequências UTF-8.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/111856

   (2) https://github.com/python/cpython/issues/111293

   (3) https://github.com/python/cpython/issues/110913


File: python.info,  Node: macOS<12>,  Next: IDLE<16>,  Prev: Windows<17>,  Up: Python 3 13 0 alpha 2

1.23.25.6 macOS
...............

   - gh-59703(1): Para construções de framework macOS, em ‘getpath.c’
     use a função ‘dladdr’ do sistema para encontrar o caminho para a
     biblioteca compartilhada em vez de depender de APIs macOS
     descontinuadas.

   - gh-110950(2): Atualiza o instalador macOS para incluir uma correção
     Tcl/Tk upstream para o aviso ‘Secure coding is not enabled for
     restorable state!’ encontrado no Tkinter no macOS 14 Sonoma.

   - gh-111015(3): Garante que IDLE.app e Python Launcher.app sejam
     instalados com as permissões apropriadas em construções macOS.

   - gh-71383(4): Atualiza o instalador do macOS para incluir uma
     correção Tcl/Tk upstream para o erro ‘ttk::ThemeChanged’ encontrado
     no Tkinter.

   - gh-92603(5): Atualiza o instalador do macOS para incluir uma
     correção aceita pelo Tcl/Tk upstream para uma falha encontrada após
     a destruição da primeira instância *note tkinter.Tk(): 1722.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/59703

   (2) https://github.com/python/cpython/issues/110950

   (3) https://github.com/python/cpython/issues/111015

   (4) https://github.com/python/cpython/issues/71383

   (5) https://github.com/python/cpython/issues/92603


File: python.info,  Node: IDLE<16>,  Next: Ferramentas/Demos<11>,  Prev: macOS<12>,  Up: Python 3 13 0 alpha 2

1.23.25.7 IDLE
..............

   - bpo-35668(1): Adiciona docstrings ao módulo depurador IDLE.
     Corrigir dois bugs: inicializar ‘Idb.botframe’ (deve estar em Bdb);
     em ‘Idb.in_rpc_code’, verificar se ‘prev_frame’ é ‘None’ antes de
     tentar usá-lo.  Expandir bastante o test_debugger.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35668


File: python.info,  Node: Ferramentas/Demos<11>,  Next: API C<20>,  Prev: IDLE<16>,  Up: Python 3 13 0 alpha 2

1.23.25.8 Ferramentas/Demos
...........................

   - gh-111903(1): Clínica de Argumentos agora oferece suporte à
     diretiva ‘@critical_section’ que instrui a Clínica de Argumentos a
     gerar uma seção crítica em torno da chamada de função, que trava o
     objeto ‘self’ em construções ‘--disable-gil’.  Patch por Sam Gross.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/111903


File: python.info,  Node: API C<20>,  Prev: Ferramentas/Demos<11>,  Up: Python 3 13 0 alpha 2

1.23.25.9 API C
...............

   - gh-112026(1): Adiciona novamente a função privada
     ‘_PyThreadState_UncheckedGet()’ como um apelido para a nova função
     pública *note PyThreadState_GetUnchecked(): 371.  Patch por Victor
     Stinner.

   - gh-112026(2): Restaure a função ‘_PyDict_GetItemStringWithError()’
     removida.  Ela é usada pelo numpy.  Patch por Victor Stinner.

   - gh-112026(3): Restaure as funções privadas, macros e estruturas da
     API C removidas que não têm substituição simples por enquanto:

        * _PyDict_GetItem_KnownHash()

        * _PyDict_NewPresized()

        * _PyHASH_BITS

        * _PyHASH_IMAG

        * _PyHASH_INF

        * _PyHASH_MODULUS

        * _PyHASH_MULTIPLIER

        * _PyLong_Copy()

        * _PyLong_FromDigits()

        * _PyLong_New()

        * _PyLong_Sign()

        * _PyObject_CallMethodId()

        * _PyObject_CallMethodNoArgs()

        * _PyObject_CallMethodOneArg()

        * _PyObject_CallOneArg()

        * _PyObject_EXTRA_INIT

        * _PyObject_FastCallDict()

        * _PyObject_GetAttrId()

        * _PyObject_Vectorcall()

        * _PyObject_VectorcallMethod()

        * _PyStack_AsDict()

        * _PyThread_CurrentFrames()

        * _PyUnicodeWriter structure

        * _PyUnicodeWriter_Dealloc()

        * _PyUnicodeWriter_Finish()

        * _PyUnicodeWriter_Init()

        * _PyUnicodeWriter_Prepare()

        * _PyUnicodeWriter_PrepareKind()

        * _PyUnicodeWriter_WriteASCIIString()

        * _PyUnicodeWriter_WriteChar()

        * _PyUnicodeWriter_WriteLatin1String()

        * _PyUnicodeWriter_WriteStr()

        * _PyUnicodeWriter_WriteSubstring()

        * _PyUnicode_AsString()

        * _PyUnicode_FromId()

        * _PyVectorcall_Function()

        * _Py_IDENTIFIER()

        * _Py_c_abs()

        * _Py_c_diff()

        * _Py_c_neg()

        * _Py_c_pow()

        * _Py_c_prod()

        * _Py_c_quot()

        * _Py_c_sum()

        * _Py_static_string()

        * _Py_static_string_init()

     Patch por Victor Stinner.

   - gh-112026(4): Adiciona novamente os includes ‘<ctype.h>’ e
     ‘<unistd.h>’ em ‘Python.h’, mas não os inclui na versão limitada da
     API C 3.13 e mais recentes.  Patch por Victor Stinner.

   - gh-111956(5): Adiciona API de inicialização única interna:
     ‘_PyOnceFlag’ e ‘_PyOnceFlag_CallOnce’.

   - gh-111262(6): Adiciona funções *note PyDict_Pop(): 341. e *note
     PyDict_PopString(): 342.: remover uma chave de um dicionário e,
     opcionalmente, retornar o valor removido.  Isso é semelhante a
     *note dict.pop(): 343, mas sem o valor padrão e não levantando
     *note KeyError: 344. se a chave estiver faltando.  Patch por Stefan
     Behnel e Victor Stinner.

   - gh-111863(7): Renomeia ‘Py_NOGIL’ para ‘Py_GIL_DISABLED’.  Patch
     por Hugo van Kemenade.

   - gh-111138(8): Adiciona as funções *note PyList_Extend(): 35b. e
     *note PyList_Clear(): 35c.: semelhantes aos métodos Python
     ‘list.extend()’ e ‘list.clear()’.  Patch por Victor Stinner.

   - gh-108765(9): No Windows, ‘Python.h’ não inclui mais o arquivo de
     cabeçalho padrão ‘<stddef.h>’.  Se necessário, ele deve ser
     incluído explicitamente.  Patch por Victor Stinner.

   - gh-111569(10): Implementa “Python Critical Sections” de PEP
     703(11).  Essas são macros para ajudar a substituir a GIL por
     travas por objeto na construção com ‘--disable-gil’ do CPython.  As
     macros são no-ops na construção padrão.

   - gh-111506(12): Na versão limitada 3.13 da API C, a função *note
     Py_SET_REFCNT(): 8af. agora é implementada como uma chamada de
     função opaca.  Patch por Victor Stinner.

   - gh-108082(13): Adiciona a função *note PyErr_FormatUnraisable():
     34c.

   - gh-110964(14): Move as funções privadas não documentadas _PyArg e a
     estrutura _PyArg_Parser para a API C interna
     (‘pycore_modsupport.h’).  Patch por Victor Stinner.

   - gh-110815(15): Suporte a nomes de palavras reservadas não ASCII em
     *note PyArg_ParseTupleAndKeywords(): 383.

   - gh-109587(16): Introduzida
     ‘PyUnstable_PerfTrampoline_CompileCode()’,
     ‘PyUnstable_PerfTrampoline_SetPersistAfterFork()’ e
     ‘PyUnstable_CopyPerfMapFile()’.  Essas funções permitem que módulos
     de extensão inicializem trampolins avidamente, depois que o
     aplicativo é “aquecido”.  Isso torna possível ter perf-trampolines
     em execução de forma sempre habilitada.

   - gh-85283(17): Adiciona a função *note PySys_Audit(): 36f. à API C
     limitada.  Patch por Victor Stinner.

   - gh-85283(18): Adiciona *note PyMem_RawMalloc(): 390, *note
     PyMem_RawCalloc(): 391, *note PyMem_RawRealloc(): 392. e *note
     PyMem_RawFree(): 393. à API C limitada.  Patch por Victor Stinner.

   - gh-106672(19): Funções *note PyDict_GetItem(): 387, *note
     PyDict_GetItemString(): 388, *note PyMapping_HasKey(): 37f, *note
     PyMapping_HasKeyString(): 381, *note PyObject_HasAttr(): 37b, *note
     PyObject_HasAttrString(): 37d. e *note PySys_GetObject(): 389, que
     limpam todos os erros ocorridos durante a chamada da função, agora
     os relatam usando *note sys.unraisablehook(): 1f7.

   - gh-67565(20): Remove a verificação redundante de contiguidade C em
     ‘getargs.c’, *note binascii: 10, *note ssl: d0. e Clínica de
     Argumentos.  Remendado por Stefan Krah e Furkan Onder

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/112026

   (2) https://github.com/python/cpython/issues/112026

   (3) https://github.com/python/cpython/issues/112026

   (4) https://github.com/python/cpython/issues/112026

   (5) https://github.com/python/cpython/issues/111956

   (6) https://github.com/python/cpython/issues/111262

   (7) https://github.com/python/cpython/issues/111863

   (8) https://github.com/python/cpython/issues/111138

   (9) https://github.com/python/cpython/issues/108765

   (10) https://github.com/python/cpython/issues/111569

   (11) https://peps.python.org/pep-0703/

   (12) https://github.com/python/cpython/issues/111506

   (13) https://github.com/python/cpython/issues/108082

   (14) https://github.com/python/cpython/issues/110964

   (15) https://github.com/python/cpython/issues/110815

   (16) https://github.com/python/cpython/issues/109587

   (17) https://github.com/python/cpython/issues/85283

   (18) https://github.com/python/cpython/issues/85283

   (19) https://github.com/python/cpython/issues/106672

   (20) https://github.com/python/cpython/issues/67565


File: python.info,  Node: Python 3 13 0 alpha 1,  Next: Python 3 12 0 beta 1,  Prev: Python 3 13 0 alpha 2,  Up: Changelog

1.23.26 Python 3.13.0 alpha 1
-----------------------------

'Data de lançamento: 2023-10-13'

* Menu:

* Segurança: Segurança<17>.
* Núcleo e embutidos: Núcleo e embutidos<34>.
* Biblioteca: Biblioteca<38>.
* Documentação: Documentação<16>.
* Testes: Testes<20>.
* Construção: Construção<20>.
* Windows: Windows<18>.
* macOS: macOS<13>.
* IDLE: IDLE<17>.
* Ferramentas/Demos: Ferramentas/Demos<12>.
* API C: API C<21>.


File: python.info,  Node: Segurança<17>,  Next: Núcleo e embutidos<34>,  Up: Python 3 13 0 alpha 1

1.23.26.1 Segurança
...................

   - gh-108310(1): Corrigido um problema em que instâncias de *note
     ssl.SSLSocket: 8f0. eram vulneráveis a um desvio do handshake TLS e
     incluíam proteções (como verificação de certificado) e tratavam
     dados não criptografados enviados como se fossem dados
     criptografados TLS pós-handshake.  Problema de segurança relatado
     como CVE 2023-40217(2) por Aapo Oksman.  Patch por Gregory P.
     Smith.

   - gh-107774(3): PEP 669 especifica que
     ‘sys.monitoring.register_callback’ gerará um evento de auditoria.
     Pré-lançamentos do Python 3.12 não geravam o evento de auditoria.
     Isso agora foi corrigido.

   - gh-102988(4): Revertida a alteração de melhoria de segurança *note
     email.utils: 50. lançada na 3.12beta4 que involuntariamente fez com
     que *note email.utils.getaddresses: 1e1. falhasse ao analisar
     endereços de e-mail com uma vírgula no campo de nome entre aspas.
     Veja gh-106669(5).

   - gh-99108(6): Atualiza nosso novo código HACL* embutido *note
     hashlib: 68. do upstream.  O SHA2 embutido deve ser mais rápido e
     um problema com SHA3 em plataformas de 32 bits foi corrigido.

   - gh-102509(7): Começa a inicializar ‘ob_digit’ durante a criação de
     objetos *note PyLongObject: 588.  Patch por Illia Volochii.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/108310

   (2) https://www.cve.org/CVERecord?id=CVE-2023-40217

   (3) https://github.com/python/cpython/issues/107774

   (4) https://github.com/python/cpython/issues/102988

   (5) https://github.com/python/cpython/issues/106669

   (6) https://github.com/python/cpython/issues/99108

   (7) https://github.com/python/cpython/issues/102509


File: python.info,  Node: Núcleo e embutidos<34>,  Next: Biblioteca<38>,  Prev: Segurança<17>,  Up: Python 3 13 0 alpha 1

1.23.26.2 Núcleo e embutidos
............................

   - gh-110782(1): Corrige o travamento quando *note typing.TypeVar:
     15d. é construído com um argumento nomeado.  Patch por Jelle
     Zijlstra.

   - gh-110752(2): Redefine ‘ceval.eval_breaker’ em
     ‘interpreter_clear()’

   - gh-110721(3): Usa a implementação de *note traceback: fe. para a
     funcionalidade padrão ‘PyErr_Display()’.  Patch por Pablo Galindo

   - gh-110696(4): Corrige mensagem de erro incorreta para
     descompactação de argumento inválido.  Patch por Pablo Galindo

   - gh-104169(5): Divide o tokenizador em dois diretórios separados: -
     Uma parte inclui a lógica de produção do lexema real e fica em
     ‘Parser/lexer’.  - A segunda parte encapsula o lexer de acordo com
     os diferentes modos de tokenização que temos (string, utf-8, file,
     interactive, readline) e fica em ‘Parser/tokenizer’.

   - gh-110688(6): Remove o método não documentado ‘test_c_api’ de *note
     set: 5d9, que foi definido apenas para fins de teste em ‘Py_DEBUG’.
     Agora temos testes CAPI adequados.

   - gh-104584(7): Corrige um vazamento de referência ao executar com
     ‘PYTHONUOPS’ ou *note -X uops 1: 176. habilitado.

   - gh-110514(8): Adiciona ‘PY_THROW’ para eventos *note
     sys.setprofile(): 1546.

   - gh-110489(9): Otimiza *note math.ceil(): 1405. quando a entrada for
     exatamente um float, resultando em uma melhoria de cerca de 10%.

   - gh-110455(10): Guarda ‘assert(tstate->thread_id > 0)’ com ‘#ifndef
     HAVE_PTHREAD_STUBS’.  Isso permite que construções do pydebug
     funcionem sob WASI, o qual (atualmente) não tem suporte a threads.

   - gh-110309(11): Remove nós constantes vazios desnecessários no final
     das especificações da f-strings.

   - gh-110259(12): Identifica corretamente a especificação de formato
     em f-strings (com aspas simples ou triplas) que tenham várias
     linhas na parte da expressão e incluam uma especificação de
     formatação.  Patch por Pablo Galindo

   - gh-110237(13): Corrige verificações de erro ausentes para chamadas
     para ‘PyList_Append’ em ‘_PyEval_MatchClass’.

   - gh-110164(14): regrtest: Se a variável de ambiente
     ‘SOURCE_DATE_EPOCH’ for definida, o regrtest agora desabilita a
     aleatorização de testes.  Patch por Victor Stinner.

   - gh-109889(15): Corrige o algoritmo de detecção de NOP redundante do
     compilador para ignorar NOPs sem número de linha ao procurar o
     número de linha da próxima instrução.

   - gh-109853(16): ‘sys.path[0]’ agora está definido corretamente para
     subinterpretadores.

   - gh-109923(17): Define o número da linha no ‘POP_TOP’ que segue um
     ‘RETURN_GENERATOR’.

   - gh-105716(18): Subinterpretadores agora lidam corretamente com o
     caso em que eles têm threads em execução em segundo plano.  Antes,
     tais threads interferiam na limpeza e destruição delas, assim como
     impediam a execução de outro script.

   - gh-109369(19): O eval_breaker interno e os sinalizadores de
     suporte, além da versão de monitoramento, foram mesclados em um
     único inteiro atômico para acelerar as verificações.

   - gh-109823(20): Corrige bug em que o compilador não ajusta rótulos
     ao remover um bloco básico vazio que é um alvo de salto.

   - gh-109793(21): O thread principal não sai mais prematuramente
     quando um subinterpretador é limpo durante a finalização do tempo
     de execução.  O bug era um problema particularmente porque, quando
     acionado, o processo Python sempre retornava com um exitcode 0,
     mesmo se falhasse.

   - gh-109719(22): Corrige rótulos de alvos de salto ausentes quando o
     compilador reordena blocos frios/quentes.

   - gh-109595(23): Adiciona a opção de linha de comando *note -X
     cpu_count: 176. para substituir os resultados de retorno de *note
     os.cpu_count(): 1c5. e *note os.process_cpu_count(): 1c4.  Esta
     opção é útil para usuários que precisam limitar os recursos da CPU
     de um sistema de contêiner sem ter que modificar o contêiner
     (código da aplicação).  Patch por Donghee Na.

   - gh-109627(24): Corrige bug em que o compilador não atribui um novo
     rótulo de alvo de salto a um pequeno bloco de saída duplicado.

   - gh-109596(25): Corrige alguns tokens na gramática que estavam
     marcados incorretamente como palavras-chave suaves.  Corrigir
     também alguns nomes de regras repetidos e garantir que regras
     repetidas não sejam permitidas.  Patch por Pablo Galindo.

   - gh-109496(26): Em um Python construído em modo de depuração, *note
     Py_DECREF(): 56f. agora chama ‘_Py_NegativeRefcount()’ se o objeto
     for um ponteiro pendente para memória desalocada: memória
     preenchida com ‘0xDD’ “byte morto” pelo gancho de depuração nos
     alocadores de memória.  A correção consiste em verificar a contagem
     de referências 'antes' de verificar ‘_Py_IsImmortal()’.  Patch por
     Victor Stinner.

   - gh-107265(27): Faz deopt de opcodes ocultos pelo executor quando o
     opcode base é necessário

   - gh-109371(28): Feito deopt corretamente nas instruções para
     inicialização de ferramenta e modificada a asserção incorreta na
     instrumentação, quando uma ferramenta anterior já define eventos
     INSTRUCTION

   - gh-105658(29): Corrige bug em que o rastreamento de linha de um
     bloco except terminando com uma condicional inclui um evento em
     excesso com a linha da expressão condicional.

   - gh-109219(30): Corrige escopos de parâmetros de tipo de compilação
     que usam um nome que também é livre em um escopo interno.

   - gh-109351(31): Corrige falha ao compilar um AST inválido envolvendo
     uma expressão nomeada (morsa).

   - gh-109341(32): Corrige falha ao compilar um AST inválido envolvendo
     um *note ast.TypeAlias: 17d4.

   - gh-109195(33): Corrige o local de origem para a instrução ‘LOAD_*’
     que precede um ‘LOAD_SUPER_ATTR’ para carregar a variável global
     ‘super’ (ou variável de sombreamento) para que ela abranja apenas o
     nome ‘super’ e não os parênteses seguintes.

   - gh-109256(34): Os IDs de opcode para opcodes especializados são
     alocados em seu próprio intervalo para melhorar a estabilidade dos
     IDs para os opcodes ‘reais’.

   - gh-109216(35): Corrige possível vazamento de memória em *note
     BUILD_MAP: 17d5.

   - gh-109207(36): Corrige um SystemError em ‘__repr__’ do objeto de
     entrada da tabela de símbolos.

   - gh-109179(37): Corrige bug em que a exibição do traceback C
     descarta notas de *note SyntaxError: 18d.

   - gh-109118(38): Não permitir escopos aninhados (lambdas, expressões
     geradoras e compreensões) dentro de escopos de anotação PEP 695 que
     estejam aninhados dentro de classes.

   - gh-109156(39): Adiciona testes para instruções de
     desinstrumentação, mantendo a instrumentação para linhas

   - gh-109114(40): Relaxa a detecção da mensagem de erro para lambdas
     inválidas dentro de f-strings para não procurar campos de
     substituição arbitrários e evitar falsos positivos.  Patch por
     Pablo Galindo

   - gh-105848(41): Adiciona um novo opcode *note CALL_KW: 17d6, usado
     para chamadas que contêm argumentos nomeados.  Além disso, corrige
     uma possível falha ao pular chamadas de método em um depurador.

   - gh-109052(42): Use o opcode base ao comparar objetos de código para
     evitar interferência da instrumentação

   - gh-109118(43): Corrige falha do interpretador quando uma exceção
     NameError é levantada dentro dos parâmetros de tipo de uma classe
     genérica.

   - gh-88943(44): Melhora o erro de sintaxe para caracteres não ASCII
     que seguem um literal numérico.  Agora, ele aponta para o caractere
     não ASCII inválido, não para o literal numérico válido.

   - gh-108976(45): Corrige falha que ocorre após desinstrumentar um
     objeto código em uma função de retorno de monitoramento.

   - gh-108732(46): Torna as variáveis de iteração de compreensões de
     escopo de módulo e classe visíveis para pdb e outras ferramentas
     que usam ‘frame.f_locals’ novamente.

   - gh-108959(47): Corrigir o posicionamento do cursor para locais de
     erro em operações binárias e de subscrito que envolvem parênteses e
     espaços não semânticos.  Patch por Pablo Galindo.

   - gh-104584(48): Corrige uma falha ao executar com ‘PYTHONUOPS’ ou
     *note -X uops: 176. habilitado e ocorre um erro durante a
     otimização.

   - gh-108727(49): Define ‘tp_dealloc’ para ‘CounterOptimizer_Type’.
     Isso corrige uma falha de segmentação na desalocação.

   - gh-108520(50): Corrige
     ‘multiprocessing.synchronize.SemLock.__setstate__()’ para
     inicializar corretamente
     ‘multiprocessing.synchronize.SemLock._is_fork_ctx’.  Isso corrige
     uma regressão ao passar um SemLock entre processos aninhados.

     Renomeia ‘multiprocessing.synchronize.SemLock.is_fork_ctx’ para
     ‘multiprocessing.synchronize.SemLock._is_fork_ctx’ para evitar
     expô-lo como API pública.

   - gh-108654(51): Restaura os locais sombreados por uma compreensão
     embutida se a compreensão levantar uma exceção.

   - gh-108488(52): Altera a inicialização das entradas de cache em
     linha para que a entrada de cache para ‘JUMP_BACKWARD’ seja
     inicializada com zero, em vez do valor ‘adaptive_counter_warmup()’
     usado para todas as outras instruções.  Este contador, único entre
     as instruções, conta a partir de zero.

   - gh-108716(53): Desativa o congelamento profundo de objetos código.
     Os módulos permanecem congelados, de modo que não é necessária uma
     pesquisa no sistema de arquivos para módulos comuns.

   - gh-108614(54): Adiciona a instrução RESUME_CHECK para evitar ter
     que manipular instrumentação, sinais e alternância de contextos no
     mecanismo de execução de nível 2.

   - gh-108487(55): Move um assert que causaria uma falha espúria em um
     caso tortuoso que deveria apenas acionar a desotimização.

   - gh-106176(56): Usa um ‘WeakValueDictionary’ para rastrear as listas
     que contêm os módulos que cada thread está importando no momento.
     Isso ajuda a evitar um vazamento de referência, que mantém a lista
     ativa por mais tempo do que o necessário.  Referências fracas são
     usadas, pois o GC não pode interromper a limpeza.

   - gh-105481(57): O estágio de construção regen-opcode foi removido e
     seu trabalho agora é feito em regen-cases.

   - gh-107901(58): Corrige número de linha ausente em *note
     JUMP_BACKWARD: 70c. no final de um laço for.

   - gh-108113(59): A função embutida *note compile(): 192. agora pode
     aceitar um novo sinalizador, ‘ast.PyCF_OPTIMIZED_AST’, que é
     semelhante a ‘ast.PyCF_ONLY_AST’ exceto que o ‘AST’ retornado é
     otimizado de acordo com o valor do argumento ‘optimize’.

     *note ast.parse(): 1a8. agora aceita um argumento opcional
     ‘optimize’ que é passado para o *note compile(): 192. embutido.
     Isto torna possível obter um ‘AST’ otimizado.

   - gh-107971(60): Os IDs de opcode são gerados a partir de bytecodes.c
     em vez de serem codificados em opcode.py.

   - gh-107944(61): Melhora a mensagem de erro para chamadas de função
     com argumentos nomeados inválidos.  Patch por Pablo Galindo.

   - gh-108390(62): Levanta uma exceção ao definir um evento não local
     (‘RAISE’, ‘EXCEPTION_HANDLED’, etc.)  em
     ‘sys.monitoring.set_local_events’.

     Corrige travamento ao rastrear chamadas recursivas para classes
     Python.

   - gh-108035(63): Remove a estrutura ‘_PyCFrame’, movendo o ponteiro
     para o quadro do interpretador atual de volta ao estado da thread,
     como era na versão 3.10 e anteriores.  O ‘_PyCFrame’ existia como
     uma otimização de desempenho para rastreamento.  Desde que a PEP
     669 foi implementada, essa otimização não se aplica mais.

   - gh-91051(64): Corrige abort/segfault ao usar todos os oito slots do
     observador de tipo, em plataformas onde ‘char’ tem sinal por
     padrão.

   - gh-106581(65): Corrige possíveis falhas de asserção e eventos de
     instrumentação ausentes quando ‘PYTHONUOPS’ ou *note -X uops: 176.
     estiver habilitado.

   - gh-107526(66): Reverte a conversão de ‘vars’, ‘dir’, ‘next’,
     ‘getattr’ e ‘iter’ para clínica de argumentos.

   - gh-84805(67): Gera assinatura automaticamente para funções de
     extensão *note METH_NOARGS: 151c. e *note METH_O: 1550.

   - gh-107758(68): Torna a rotina ‘dump_stack()’ usada pelo recurso
     ‘lltrace’ (depuração de interpretador de baixo nível) robusta
     contra recursão, garantindo que ela nunca chame um método
     ‘__repr__’ implementado em Python.  Além disso, faça com que a
     saída semelhante para UOPs de Nível 2 apareça em ‘stdout’ (em vez
     de ‘stderr’), para corresponder ao código ‘lltrace’ em ceval.c.

   - gh-107659(69): Adiciona docstrings para *note ctypes.pointer():
     17d7. e *note ctypes.POINTER(): 17d8.

   - gh-105848(70): Modifica o bytecode para que o chamável real para um
     *note CALL: 707. esteja em uma posição consistente na pilha
     (independentemente de as otimizações de chamada de método vinculado
     estarem ativas ou não).

   - gh-107674(71): Regressão de desempenho corrigida em ‘sys.settrace’.

   - gh-107724(72): Nas versões de pré-lançamento da 3.12, até a rc1, a
     função de retorno de chamada sys.monitoring para o evento
     ‘PY_THROW’ não continha o terceiro argumento, exception.  Isso já
     foi corrigido.

   - gh-84436(73): Ignora modificações na contagem de referências para
     muitos objetos imortais conhecidos.

   - gh-107596(74): Especializa a subscrição de objetos *note str: 44c.
     por índices *note int: 257.

   - gh-107080(75): As construções de referências de rastreamento
     (‘--with-trace-refs’) estavam travando quando usadas com
     subinterpretadores isolados.  O estado global problemático foi
     isolado para cada interpretador.  Além de corrigir as falhas, essa
     alteração não afeta os usuários.

   - gh-107557(76): Gera os casos necessários para o interpretador
     abstrato barebones de nível 2 para passagens de otimização em
     CPython.

   - gh-106608(77): Torna ‘_PyUOpExecutorObject’ de comprimento
     variável.

   - gh-100964(78): Limpa o estado de exceção dos geradores após
     ‘return’ para interromper os ciclos de referência.

   - gh-107455(79): Melhora as mensagens de erro ao converter um tipo
     incompatível para *note ctypes.c_char_p: 17d9, *note
     ctypes.c_wchar_p: 17da. e *note ctypes.c_void_p: 17db.

   - gh-107263(80): Aumenta o limite de recursão em C para funções que
     não sejam o interpretador principal de 800 para 1500.  Isso deve
     permitir que funções como ‘list.__repr__’ e ‘json.dumps’ manipulem
     todas as entradas possíveis antes da versão 3.12.

   - gh-104584(81): Corrige um problema que causava a leitura incorreta
     de caches inline ao executar com ‘PYTHONUOPS’ ou *note -X uops:
     176. habilitados.

   - gh-104432(82): Corrige possível acesso desalinhado à memória em
     APIs C envolvendo sequências retornadas de ponteiros ‘char *’
     dentro dos módulos *note grp: 66. e *note socket: cc.  Isso foi
     revelado usando uma compilação ‘-fsaniziter=alignment’ no macOS
     ARM.  Patch por Christopher Chavez.

   - gh-106078(83): Isola ‘_decimal’ (aplicar PEP 687(84)).  Patch por
     Charlie Zhao.

   - gh-106898(85): Adiciona a exceção como terceiro argumento às
     funções de retorno ‘PY_UNIND’ em ‘sys.monitoring’.  Isso torna o
     callback ‘PY_UNWIND’ consistente com as outras funções de retorno
     de tratamento de exceções.

   - gh-106895(86): Levanta um ‘ValueError’ quando uma função de
     callback de monitoramento retornar ‘DISABLE’ para eventos que não
     podem ser desabilitados localmente.

   - gh-106897(87): Adiciona um evento ‘RERAISE’ a ‘sys.monitoring’, que
     ocorre quando uma exceção é reativada, seja explicitamente por uma
     instrução ‘raise’ simples ou implicitamente em um bloco ‘except’ ou
     ‘finally’.

   - gh-77377(88): Garante que objetos de sincronização
     multiprocessamento criados em um contexto de fork não sejam
     enviados para um processo diferente criado em um contexto de
     geração.  Isso transforma um erro de segmentação em um erro de
     tempo de execução acionável no processo pai.

   - gh-106931(89): Objetos string alocados estaticamente agora são
     internados globalmente em vez de por interpretador.  Isso corrige
     uma situação em que tal string só seria internada em um único
     interpretador.  Objetos string normais não são afetados.

   - gh-104621(90): Módulos não suportados agora sempre falham na
     importação.

   - gh-107122(91): Adicionado ‘dbm.ndbm.ndbm.clear()’ a *note dbm.ndbm:
     34.  Patch por Donghee Na.

   - gh-107122(92): Adiciona ‘dbm.gnu.gdbm.clear()’ a *note dbm.gnu: 33.
     Patch por Donghee Na.

   - gh-107015(93): Os tokens ASYNC e AWAIT foram removidos da
     gramática, o que elimina a possibilidade de criar as palavras
     reservadas contextuais ‘async’ e ‘await’ ao usar
     ‘feature_version<7’ em *note ast.parse(): 1a8.

   - gh-106917(94): Corrige chamadas ao método *note super(): 4db. no
     estilo classmethod (ou seja, onde o segundo argumento para *note
     super(): 4db, ou o segundo argumento implícito extraído de
     ‘self/cls’ no caso de super com argumento zero, é um tipo) quando o
     alvo da chamada não é um classmethod.

   - gh-105699(95): O Python não trava mais devido a uma corrida pouco
     frequente ao inicializar strings internas por interpretador.  A
     falha se manifestava quando o interpretador era finalizado.

   - gh-105699(96): O Python não trava mais devido a uma corrida pouco
     frequente na configuração de ‘Py_FileSystemDefaultEncoding’ e
     ‘Py_FileSystemDefaultEncodeErrors’ (ambos descontinuados), ao
     inicializar simultaneamente dois subinterpretadores isolados.
     Agora, eles são definidos apenas durante a inicialização em tempo
     de execução.

   - gh-106908(97): Corrige vários travamentos, vazamentos de
     referência, falhas de teste e bugs de rastreamento/introspecção ao
     executar com ‘PYTHONUOPS’ ou *note -X uops: 176. habilitado.

   - gh-106092(98): Corrige uma falha de segmentação causada por um bug
     de uso após liberação em ‘frame_dealloc’ quando a lixeira atrasa a
     desalocação de um ‘PyFrameObject’.

   - gh-106485(99): Reduz o número de dicionários de instâncias
     materializadas, desmaterializando-os quando possível.

   - gh-106719(100): Não suprime mais erros arbitrários nos getters e
     setters ‘__annotations__’ nos tipos type e module.

   - gh-106723(101): Propaga ‘frozen_modules’ para interpretadores de
     processos gerados por multiprocessamento.

   - gh-104909(102): Divide ‘LOAD_ATTR_INSTANCE_VALUE’ em micro-ops.

   - gh-104909(103): Divide as especializações *note LOAD_GLOBAL: 17dc.
     em micro-ops.

   - gh-106597(104): Uma nova estrutura de depuração de offsets foi
     adicionada ao ‘_PyRuntimeState’ que ajudará depuradores e profilers
     fora do processo a obter as posições para estruturas relevantes do
     interpretador de uma forma independente de como o Python foi
     compilado e que não exija a cópia dos cabeçalhos.  Patch por Pablo
     Galindo

   - gh-106487(105): Permite que o argumento 'count' de *note
     str.replace(): 19a. seja nomeado.  Patch por Hugo van Kemenade.

   - gh-96844(106): Melhora a mensagem de erro de *note list.remove():
     17dd.  Patch por Donghee Na.

   - gh-81283(107): O compilador agora remove recuos de docstrings.
     Reduz o tamanho do arquivo ‘pyc’ em 5% quando o módulo é amplamente
     documentado.  Essa alteração afeta ‘__doc__’, portanto, ferramentas
     como doctest serão afetadas.

   - gh-106396(108): Quando a especificação de formato de uma expressão
     de f-string está vazia, o analisador agora gera um nó *note
     ast.JoinedStr: 17de. vazio para ela, em vez de um nó *note
     ast.JoinedStr: 17de. de um elemento com uma string vazia *note
     ast.Constant: 2b9.

   - gh-100288(109): Especializa *note LOAD_ATTR: 4de. para não
     descritores na classe.  Adiciona
     ‘LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES’ e
     ‘LOAD_ATTR_NONDESCRIPTOR_NO_DICT’.

   - gh-106008(110): Corrige possíveis vazamentos de referência ao não
     otimizar comparações com *note None: 675. no compilador de
     bytecode.

   - gh-106145(111): Torna ‘end_lineno’ e ‘end_col_offset’ obrigatórios
     em nós AST ‘type_param’.

   - gh-106213(112): Alterada a forma como os trampolins de chamada do
     Emscripten funcionam para compatibilidade com a integração Wasm/JS
     Promise.

   - gh-106182(113): *note sys.getfilesystemencoding(): c74. e *note
     sys.getfilesystemencodeerrors: d07. agora retornam objetos Unicode
     internalizados.

   - gh-106210(114): Removido o trampolim de importação do Emscripten,
     pois não era mais necessário para o Pyodide.

   - gh-104584(115): Adicionado um novo otimizador e interpretador de
     rastreamento experimental (também conhecido como “nível 2”).
     Atualmente, isso é pessimista, então não use ainda — esta é uma
     infraestrutura para que possamos experimentar com passes de
     otimização.  Para habilitá-lo, passe ‘-Xuops’ ou defina
     ‘PYTHONUOPS=1’.  Para obter a saída de depuração, defina
     ‘PYTHONUOPSDEBUG=N’, onde ‘N’ é um nível de depuração (0-4, onde 0
     indica ausência de saída de depuração e 4 indica excesso de
     verbosidade).

   - gh-105775(116): *note LOAD_CLOSURE: 17df. agora é uma pseudo-op.

   - gh-105730(117): Permite qualquer chamada que não seja de objetos de
     tipo como predicado de condição em *note
     BaseExceptionGroup.split(): 1670. e *note
     BaseExceptionGroup.subgroup(): 17b4.

   - gh-105979(118): Corrige falha em ‘_imp.get_frozen_object()’ devido
     a tratamento incorreto de exceções.

   - gh-106003(119): Adiciona uma nova instrução *note TO_BOOL: 17e0,
     que realiza conversões booleanas para *note POP_JUMP_IF_TRUE: 17e1,
     *note POP_JUMP_IF_FALSE: 17e2. e *note UNARY_NOT: 17e3. (que agora
     esperam valores *note bool: 468. exatos).  Além disso, modifique o
     oparg de *note COMPARE_OP: 970. para incluir um sinalizador
     opcional de “conversão booleana”.

   - gh-98931(120): Garante que mensagens de erro personalizadas *note
     SyntaxError: 18d. sejam levantadas para importações inválidas com
     múltiplos destinos.  Patch por Pablo Galindo

   - gh-105724(121): Melhora as mensagens de erro ‘assert’ fornecendo o
     intervalo exato de erro.

   - gh-105908(122): Corrige o bug em que gh-99111(123) quebrava a
     importação futura ‘barry_as_FLUFL’ no REPL do Python.

   - gh-105840(124): Corrige possíveis travamentos ao especializar
     chamadas de função com muitos ‘__defaults__’.

   - gh-105831(125): Corrige um bug em uma f-string, onde o uso de uma
     expressão de depuração (o sinal ‘=’) que aparece na última linha de
     um arquivo resulta no buffer de depuração que contém o texto da
     expressão sendo um caractere a menos.

   - gh-105800(126): Emite corretamente *note SyntaxWarning: 466. em
     f-strings se sequências inválidas forem usadas.  Patch por Pablo
     Galindo

   - gh-105340(127): Inclui a variável de iteração de compreensão em
     ‘locals()’ dentro de uma compreensão de escopo de módulo ou classe.

   - gh-105331(128): Levanta *note ValueError: 202. se o argumento
     ‘delay’ para *note asyncio.sleep(): a79. for um NaN (correspondente
     a *note time.sleep(): 69d.).

   - gh-105587(129): O tempo de execução não pode garantir que objetos
     imortais não serão mutados por extensões.  Portanto, isso modifica
     _PyStaticObject_CheckRefcnt para avisar em vez de declarar.

   - gh-105564(130): Não inclui quebras de linha artificiais no atributo
     ‘line’ de tokens nas APIs do módulo *note tokenize: fb.  Patch por
     Pablo Galindo

   - gh-105549(131): Tokeniza separadamente os tokens ‘NUMBER’ e ‘NAME’
     que não sejam ambíguos.  Patch por Pablo Galindo.

   - gh-105588(132): Corrige um problema que poderia resultar em
     travamentos ao compilar nós *note ast: 8. malformados.

   - gh-100987(133): Permite objetos que não são objetos código como o
     “executável” em quadros internos.  A longo prazo, isso pode ajudar
     ferramentas como Cython e PySpy a interagirem de forma mais
     eficiente.  A curto prazo, nos permite realizar algumas otimizações
     de forma mais simples.

   - gh-105375(134): Corrige bugs no módulo *note builtins: 12, onde
     exceções poderiam ser sobrescritas.

   - gh-105375(135): Corrige bug no compilador, onde uma exceção poderia
     ser sobrescrita.

   - gh-105375(136): Melhora o tratamento de erros em *note
     PyUnicode_BuildEncodingMap(): 17e4, onde uma exceção poderia ser
     sobrescrita.

   - gh-105486(137): Altera a representação da lista de argumentos
     ‘ParamSpec’ em ‘types.GenericAlias’.

   - gh-105678(138): Divide a instrução ‘MAKE_FUNCTION’ em duas partes:
     ‘MAKE_FUNCTION’, que cria a função, e ‘SET_FUNCTION_ATTRIBUTE’, que
     define os atributos da função.  Isso torna o efeito de pilha de
     ‘MAKE_FUNCTION’ regular para facilitar a otimização e a geração de
     código.

   - gh-105435(139): Corrige o caractere de quebra de linha falso se o
     arquivo terminar em um comentário sem quebra de linha.  Patch por
     Pablo Galindo

   - gh-105390(140): Levanta corretamente as exceções *note
     tokenize.TokenError: 542. em vez de *note SyntaxError: 18d. para
     erros de tokenização, como entrada incompleta.  Patch por Pablo
     Galindo

   - gh-105259(141): Não inclui o caractere de quebra de linha para
     tokens ‘NEWLINE’ finais emitidos no módulo *note tokenize: fb.
     Patch por Pablo Galindo

   - gh-104635(142): Elimina instruções redundantes *note STORE_FAST:
     17e5. no compilador.  Patch por Donghee Na e Carl Meyer.

   - gh-105324(143): Corrige a função principal do módulo *note
     tokenize: fb. ao ler de ‘sys.stdin’.  Patch por Pablo Galindo

   - gh-33092(144): Simplifica e acelera o interpretador para f-strings.
     Remove o opcode ‘FORMAT_VALUE’.  Adiciona opcodes ‘CONVERT_VALUE’,
     ‘FORMAT_SIMPLE’ e ‘FORMAT_WITH_SPEC’.  O compilador emite uma
     sequência mais eficiente para cada expressão de formato.

   - gh-105229(145): Remove as superinstruções restantes de duas
     unidades de código.  Todas as superinstruções restantes usam apenas
     uma unidade de código, simplificando a instrumentação e agilizando
     o processamento.

   - gh-105235(146): Impede o acesso à memória fora dos limites durante
     chamadas ‘mmap.find()’.

   - gh-98963(147): Restaura a capacidade de uma subclasse de *note
     property: 194. definir ‘__slots__’ ou, de outra forma, ser livre de
     dicionários, ignorando falhas na definição de uma docstring em tal
     classe.  Esse comportamento havia regredido na versão 3.12beta1.
     Um *note AttributeError: 34b. onde não havia um anteriormente era
     prejudicial ao código existente.

   - gh-104812(148): O mecanismo de “chamada pendente” agora funciona
     para todos os interpretadores, não apenas para o interpretador
     principal, e é executado em todas as threads, não apenas na thread
     principal.  Algumas chamadas ainda são feitas apenas na thread
     principal, ou seja, no interpretador principal.  Esta alteração não
     afeta o tratamento de sinais nem a C-API pública existente
     (‘Py_AddPendingCall()’), que ainda têm como alvo apenas a thread
     principal.  A nova funcionalidade destina-se estritamente ao uso
     interno por enquanto, uma vez que as consequências de seu uso ainda
     não são bem compreendidas, exceto em alguns casos muito restritos.
     Esta alteração alinha a capacidade com a intenção quando o estado
     foi definido por interpretador há vários anos.

   - gh-105194(149): Não escapa com barras invertidas os especificadores
     de formato de f-string.  Patch por Pablo Galindo

   - gh-105229(150): Substitui algumas superinstruções dinâmicas por
     equivalentes de instrução única.

   - gh-105162(151): Corrigido bug em generator.close()/throw(), onde um
     iterador interno era ignorado quando o iterador externo era
     instrumentado.

   - gh-105164(152): Garante que as anotações sejam configuradas
     corretamente se a única anotação em um bloco estiver dentro de um
     bloco *note match: 810.  Patch por Jelle Zijlstra.

   - gh-105148(153): Torna ‘_PyASTOptimizeState’ interno a ast_opt.c.
     Torna ‘_PyAST_Optimize’ com dois inteiros em vez de um ponteiro
     para esta estrutura.  Isso evita a necessidade de incluir
     pycore_compile.h em ast_opt.c.

   - gh-104799(154): Atributos de nós *note ast: 8. que são listas agora
     assumem como padrão a lista vazia se omitidos.  Isso significa que
     alguns códigos que anteriormente geravam *note TypeError: 2c3.
     quando o nó AST era usado agora prosseguirão com a lista vazia.
     Patch por Jelle Zijlstra.

   - gh-105111(155): Remove as antigas macros da lixeira
     ‘Py_TRASHCAN_SAFE_BEGIN’ e ‘Py_TRASHCAN_SAFE_END’.  Elas devem ser
     substituídas pelas novas macros ‘Py_TRASHCAN_BEGIN’ e
     ‘Py_TRASHCAN_END’.

   - gh-105035(156): Corrige chamadas de *note super(): 4db. em tipos
     com implementação personalizada de *note tp_getattro: 17e6. (por
     exemplo, metatipos).

   - gh-105017(157): Exibe linhas CRLF no atributo de string tokenize em
     tokens NL e NEWLINE. Patch por Marta Gómez.

   - gh-105013(158): Corrige o tratamento de lambdas entre parênteses de
     várias linhas em *note inspect.getsource(): 15f8.  Patch por Pablo
     Galindo

   - gh-105017(159): Não inclui um token final ‘NL’ adicional ao
     analisar arquivos com linhas CRLF. Patch por Marta Gómez.

   - gh-104976(160): Garante que os objetos ‘tokenize.TokenInfo’
     ‘DEDENT’ finais emitidos pelo módulo *note tokenize: fb. sejam
     reportados como no Python 3.11.  Patch por Pablo Galindo.

   - gh-104972(161): Garante que o atributo ‘line’ em objetos
     ‘tokenize.TokenInfo’ no módulo *note tokenize: fb. estejam sempre
     corretos.  Patch por Pablo Galindo

   - gh-104955(162): Corrige a assinatura para o novo slot de *note
     __release_buffer__(): 17e7.  Patch por Jelle Zijlstra.

   - gh-104690(163): Iniciar novas threads e criar processos através de
     *note os.fork(): 197. durante o desligamento do interpretador (como
     a partir de manipuladores *note atexit: c.) não é mais suportado.
     Isso pode levar a uma condição de corrida entre a thread principal
     do tempo de execução do Python, liberando estados de threads
     enquanto rotinas internas de *note threading: ed. tentam alocar e
     usar o estado de threads recém-criadas.  Ou filhos do fork tentando
     usar o tempo de execução e o estado da thread no meio do
     desligamento no processo filho.

   - gh-104879(164): Corrige a falha ao acessar o atributo ‘__module__’
     de apelidos de tipo definidos fora de um módulo.  Patch por Jelle
     Zijlstra.

   - gh-104825(165): Tokens emitidos pelo módulo *note tokenize: fb. não
     incluem mais um caractere ‘\\n’ implícito no atributo ‘line’.
     Patch por Pablo Galindo

   - gh-104770(166): Se um gerador retornar um valor ao ser fechado, o
     valor agora é retornado por *note generator.close(): 15b9.

   - gh-89091(167): Levanta *note RuntimeWarning: 1bd. para métodos de
     gerador assíncronos não aguardados, como *note asend(): 8df, *note
     athrow(): 4f9. e *note aclose(): 8de.  Patch por Kumar Aditya.

   - gh-96663(168): Adiciona uma mensagem de erro melhor e mais
     introspectiva ao definir atributos em classes sem um ‘__dict__’ e
     sem membro de slot para o atributo.

   - gh-93627(169): Atualiza a implementação do módulo pickle em Python
     para corresponder à implementação em C do módulo pickle.  Para
     objetos que definem métodos de redução como *note __reduce_ex__():
     16a1. ou *note __reduce__(): 9db. como ‘None’, a operação de pickle
     resultará em um *note TypeError: 2c3.

   - gh-101006(170): Melhora o tratamento de erros ao ler dados *note
     marshal: 8d.

   - gh-91095(171): Especializa chamadas para a maioria das classes
     Python.  Especificamente, qualquer classe que herde de ‘object’ ou
     de outra classe Python e não sobrescreva ‘__new__’.

     A instrução especializada faz o seguinte:

       1. Cria o objeto (chamando ‘object.__new__’)

       2. Envia um quadro de correção para a pilha de quadros (para
          limpeza após ‘__init__’)

       3. Envia o quadro de ‘__init__’ para a pilha de quadros

     Acelera a instanciação da maioria das classes Python.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/110782

   (2) https://github.com/python/cpython/issues/110752

   (3) https://github.com/python/cpython/issues/110721

   (4) https://github.com/python/cpython/issues/110696

   (5) https://github.com/python/cpython/issues/104169

   (6) https://github.com/python/cpython/issues/110688

   (7) https://github.com/python/cpython/issues/104584

   (8) https://github.com/python/cpython/issues/110514

   (9) https://github.com/python/cpython/issues/110489

   (10) https://github.com/python/cpython/issues/110455

   (11) https://github.com/python/cpython/issues/110309

   (12) https://github.com/python/cpython/issues/110259

   (13) https://github.com/python/cpython/issues/110237

   (14) https://github.com/python/cpython/issues/110164

   (15) https://github.com/python/cpython/issues/109889

   (16) https://github.com/python/cpython/issues/109853

   (17) https://github.com/python/cpython/issues/109923

   (18) https://github.com/python/cpython/issues/105716

   (19) https://github.com/python/cpython/issues/109369

   (20) https://github.com/python/cpython/issues/109823

   (21) https://github.com/python/cpython/issues/109793

   (22) https://github.com/python/cpython/issues/109719

   (23) https://github.com/python/cpython/issues/109595

   (24) https://github.com/python/cpython/issues/109627

   (25) https://github.com/python/cpython/issues/109596

   (26) https://github.com/python/cpython/issues/109496

   (27) https://github.com/python/cpython/issues/107265

   (28) https://github.com/python/cpython/issues/109371

   (29) https://github.com/python/cpython/issues/105658

   (30) https://github.com/python/cpython/issues/109219

   (31) https://github.com/python/cpython/issues/109351

   (32) https://github.com/python/cpython/issues/109341

   (33) https://github.com/python/cpython/issues/109195

   (34) https://github.com/python/cpython/issues/109256

   (35) https://github.com/python/cpython/issues/109216

   (36) https://github.com/python/cpython/issues/109207

   (37) https://github.com/python/cpython/issues/109179

   (38) https://github.com/python/cpython/issues/109118

   (39) https://github.com/python/cpython/issues/109156

   (40) https://github.com/python/cpython/issues/109114

   (41) https://github.com/python/cpython/issues/105848

   (42) https://github.com/python/cpython/issues/109052

   (43) https://github.com/python/cpython/issues/109118

   (44) https://github.com/python/cpython/issues/88943

   (45) https://github.com/python/cpython/issues/108976

   (46) https://github.com/python/cpython/issues/108732

   (47) https://github.com/python/cpython/issues/108959

   (48) https://github.com/python/cpython/issues/104584

   (49) https://github.com/python/cpython/issues/108727

   (50) https://github.com/python/cpython/issues/108520

   (51) https://github.com/python/cpython/issues/108654

   (52) https://github.com/python/cpython/issues/108488

   (53) https://github.com/python/cpython/issues/108716

   (54) https://github.com/python/cpython/issues/108614

   (55) https://github.com/python/cpython/issues/108487

   (56) https://github.com/python/cpython/issues/106176

   (57) https://github.com/python/cpython/issues/105481

   (58) https://github.com/python/cpython/issues/107901

   (59) https://github.com/python/cpython/issues/108113

   (60) https://github.com/python/cpython/issues/107971

   (61) https://github.com/python/cpython/issues/107944

   (62) https://github.com/python/cpython/issues/108390

   (63) https://github.com/python/cpython/issues/108035

   (64) https://github.com/python/cpython/issues/91051

   (65) https://github.com/python/cpython/issues/106581

   (66) https://github.com/python/cpython/issues/107526

   (67) https://github.com/python/cpython/issues/84805

   (68) https://github.com/python/cpython/issues/107758

   (69) https://github.com/python/cpython/issues/107659

   (70) https://github.com/python/cpython/issues/105848

   (71) https://github.com/python/cpython/issues/107674

   (72) https://github.com/python/cpython/issues/107724

   (73) https://github.com/python/cpython/issues/84436

   (74) https://github.com/python/cpython/issues/107596

   (75) https://github.com/python/cpython/issues/107080

   (76) https://github.com/python/cpython/issues/107557

   (77) https://github.com/python/cpython/issues/106608

   (78) https://github.com/python/cpython/issues/100964

   (79) https://github.com/python/cpython/issues/107455

   (80) https://github.com/python/cpython/issues/107263

   (81) https://github.com/python/cpython/issues/104584

   (82) https://github.com/python/cpython/issues/104432

   (83) https://github.com/python/cpython/issues/106078

   (84) https://peps.python.org/pep-0687/

   (85) https://github.com/python/cpython/issues/106898

   (86) https://github.com/python/cpython/issues/106895

   (87) https://github.com/python/cpython/issues/106897

   (88) https://github.com/python/cpython/issues/77377

   (89) https://github.com/python/cpython/issues/106931

   (90) https://github.com/python/cpython/issues/104621

   (91) https://github.com/python/cpython/issues/107122

   (92) https://github.com/python/cpython/issues/107122

   (93) https://github.com/python/cpython/issues/107015

   (94) https://github.com/python/cpython/issues/106917

   (95) https://github.com/python/cpython/issues/105699

   (96) https://github.com/python/cpython/issues/105699

   (97) https://github.com/python/cpython/issues/106908

   (98) https://github.com/python/cpython/issues/106092

   (99) https://github.com/python/cpython/issues/106485

   (100) https://github.com/python/cpython/issues/106719

   (101) https://github.com/python/cpython/issues/106723

   (102) https://github.com/python/cpython/issues/104909

   (103) https://github.com/python/cpython/issues/104909

   (104) https://github.com/python/cpython/issues/106597

   (105) https://github.com/python/cpython/issues/106487

   (106) https://github.com/python/cpython/issues/96844

   (107) https://github.com/python/cpython/issues/81283

   (108) https://github.com/python/cpython/issues/106396

   (109) https://github.com/python/cpython/issues/100288

   (110) https://github.com/python/cpython/issues/106008

   (111) https://github.com/python/cpython/issues/106145

   (112) https://github.com/python/cpython/issues/106213

   (113) https://github.com/python/cpython/issues/106182

   (114) https://github.com/python/cpython/issues/106210

   (115) https://github.com/python/cpython/issues/104584

   (116) https://github.com/python/cpython/issues/105775

   (117) https://github.com/python/cpython/issues/105730

   (118) https://github.com/python/cpython/issues/105979

   (119) https://github.com/python/cpython/issues/106003

   (120) https://github.com/python/cpython/issues/98931

   (121) https://github.com/python/cpython/issues/105724

   (122) https://github.com/python/cpython/issues/105908

   (123) https://github.com/python/cpython/issues/99111

   (124) https://github.com/python/cpython/issues/105840

   (125) https://github.com/python/cpython/issues/105831

   (126) https://github.com/python/cpython/issues/105800

   (127) https://github.com/python/cpython/issues/105340

   (128) https://github.com/python/cpython/issues/105331

   (129) https://github.com/python/cpython/issues/105587

   (130) https://github.com/python/cpython/issues/105564

   (131) https://github.com/python/cpython/issues/105549

   (132) https://github.com/python/cpython/issues/105588

   (133) https://github.com/python/cpython/issues/100987

   (134) https://github.com/python/cpython/issues/105375

   (135) https://github.com/python/cpython/issues/105375

   (136) https://github.com/python/cpython/issues/105375

   (137) https://github.com/python/cpython/issues/105486

   (138) https://github.com/python/cpython/issues/105678

   (139) https://github.com/python/cpython/issues/105435

   (140) https://github.com/python/cpython/issues/105390

   (141) https://github.com/python/cpython/issues/105259

   (142) https://github.com/python/cpython/issues/104635

   (143) https://github.com/python/cpython/issues/105324

   (144) https://github.com/python/cpython/issues/33092

   (145) https://github.com/python/cpython/issues/105229

   (146) https://github.com/python/cpython/issues/105235

   (147) https://github.com/python/cpython/issues/98963

   (148) https://github.com/python/cpython/issues/104812

   (149) https://github.com/python/cpython/issues/105194

   (150) https://github.com/python/cpython/issues/105229

   (151) https://github.com/python/cpython/issues/105162

   (152) https://github.com/python/cpython/issues/105164

   (153) https://github.com/python/cpython/issues/105148

   (154) https://github.com/python/cpython/issues/104799

   (155) https://github.com/python/cpython/issues/105111

   (156) https://github.com/python/cpython/issues/105035

   (157) https://github.com/python/cpython/issues/105017

   (158) https://github.com/python/cpython/issues/105013

   (159) https://github.com/python/cpython/issues/105017

   (160) https://github.com/python/cpython/issues/104976

   (161) https://github.com/python/cpython/issues/104972

   (162) https://github.com/python/cpython/issues/104955

   (163) https://github.com/python/cpython/issues/104690

   (164) https://github.com/python/cpython/issues/104879

   (165) https://github.com/python/cpython/issues/104825

   (166) https://github.com/python/cpython/issues/104770

   (167) https://github.com/python/cpython/issues/89091

   (168) https://github.com/python/cpython/issues/96663

   (169) https://github.com/python/cpython/issues/93627

   (170) https://github.com/python/cpython/issues/101006

   (171) https://github.com/python/cpython/issues/91095


File: python.info,  Node: Biblioteca<38>,  Next: Documentação<16>,  Prev: Núcleo e embutidos<34>,  Up: Python 3 13 0 alpha 1

1.23.26.3 Biblioteca
....................

   - gh-110786(1): A CLI de *note sysconfig: db. agora ignora *note
     BrokenPipeError: 1095, fazendo com que ele saia normalmente se sua
     saída estiver sendo canalizada e o canal for fechado.

   - gh-103480(2): O módulo *note sysconfig: db. agora é um pacote, em
     vez de um módulo de arquivo único.

   - gh-110733(3): Microotimização: Evite chamar ‘min()’, ‘max()’ em
     ‘BaseEventLoop._run_once()’.

   - gh-94597(4): Adicionado *note asyncio.EventLoop: 17e9. para uso com
     o kwarg *note asyncio.run(): 47c. 'loop_factory' para evitar chamar
     o sistema de políticas asyncio.

   - gh-110682(5): *note protocolos runtime-checkable: 443. usados para
     considerar ‘__match_args__’ um membro do protocolo em
     ‘__instancecheck__’ se estivesse presente no protocolo.  Agora,
     este atributo é ignorado se estiver presente.

   - gh-110488(6): Corrige alguns problemas em *note
     pathlib.PurePath.with_name(): 17ea.: um único ponto era considerado
     incorretamente um nome válido e, em ‘PureWindowsPath’, um nome com
     um fluxo de dados NTFS alternativo, como ‘a:b’, era considerado
     incorretamente inválido.

   - gh-110590(7): Corrige um bug em ‘_sre.compile()’, onde *note
     TypeError: 2c3. era substituído por *note OverflowError: 885.
     quando o argumento 'code' era uma lista de não-ints.

   - gh-65052(8): Impede que *note pdb: a5. trave ao tentar exibir
     objetos não exibíveis

   - gh-110519(9): Aviso de descontinuação sobre números não inteiros em
     *note gettext: 63. agora sempre se refere à linha no código do
     usuário onde a função ou método gettext é usado.  Anteriormente,
     ele podia se referir a uma linha no código ‘gettext’.

   - gh-89902(10): Descontinua o especificador de formato não padrão “N”
     para *note decimal.Decimal: 29d.  Ele não foi documentado e
     suportado apenas na implementação em C.

   - gh-110378(11): Os gerenciadores de contexto *note contextmanager():
     1242. e *note asynccontextmanager(): b3c. agora fecham um objeto
     gerador subjacente inválido que produz mais de um valor.

   - gh-106670(12): Em *note pdb: a5, defina a variável de conveniência
     ‘$_exception’ para depuração post mortem.

   - gh-110365(13): Corrige o bug em *note termios.tcsetattr(): 17eb.
     que estava sobrescrevendo erros existentes durante a análise de
     inteiros da lista ‘term’.

   - gh-109653(14): Melhora ligeiramente o tempo de importação de vários
     módulos da biblioteca padrão, adiando as importações de *note
     warnings: 112. dentro desses módulos.  Patch por Alex Waygood.

   - gh-110273(15): *note dataclasses.replace(): 17ec. agora levanta
     TypeError em vez de ValueError se especificar o argumento de
     palavra-chave para um campo declarado com init=False ou se o
     argumento nomeado não for especificado para o campo InitVar
     obrigatório.

   - gh-110249(16): Adiciona o sinalizador ‘--inline-caches’ à linha de
     comando ‘dis’.

   - gh-109653(17): Corrige uma regressão do Python 3.12 no tempo de
     importação de *note random: b8.  Patch por Alex Waygood.

   - gh-110222(18): Adiciona suporte a objetos sequência struct em *note
     copy.replace(): 151.  Patch por Xuehai Pan.

   - gh-109649(19): *note multiprocessing: 94, *note concurrent.futures:
     21, *note compileall: 20.: Substitui *note os.cpu_count(): 1c5. por
     *note os.process_cpu_count(): 1c4. para selecionar o número padrão
     de threads e processos de trabalho.  Obter a afinidade da CPU, se
     compatível.  Patch por Victor Stinner.

   - gh-110150(20): Corrige o tratamento de caso base em
     statistics.quantiles.  Agora permite um único ponto de dados.

   - gh-110036(21): No Windows, o multiprocessamento ‘Popen.terminate()’
     agora captura *note PermissionError: d65. e obtém o código de saída
     do processo.  Se o processo ainda estiver em execução, lança
     novamente o *note PermissionError: d65.  Caso contrário, o processo
     é encerrado conforme o esperado: armazena seu código de saída.
     Patch por Victor Stinner.

   - gh-110038(22): Corrige um problema que fazia com que
     ‘KqueueSelector.select()’ não retornasse todos os eventos de
     prontidão em alguns casos quando um descritor de arquivo é
     registrado para leitura e escrita.

   - gh-110045(23): Atualiza o módulo *note symtable: d8. para suportar
     os novos escopos introduzidos por PEP 695(24).

   - gh-88402(25): Adiciona novas variáveis a *note
     sysconfig.get_config_vars(): 1064. no Windows: ‘LIBRARY’,
     ‘LDLIBRARY’, ‘LIBDIR’, ‘SOABI’ e ‘Py_NOGIL’.

   - gh-109631(26): Funções do *note re: b9. como *note re.findall():
     1060, *note re.split(): 2a2, *note re.search(): 126d. e *note
     re.sub(): 2a3, que realizam correspondências curtas e repetidas,
     agora podem ser interrompidas pelo usuário.

   - gh-109653(27): Reduz o tempo de importação de *note email.utils:
     50. em cerca de 43%.  Isso resulta em uma redução de cerca de 18%
     no tempo de importação de *note email.message: 44, o que, por sua
     vez, reduz o tempo de importação de *note importlib.metadata: 7a.
     em cerca de 6%.  Patch por Alex Waygood.

   - gh-109818(28): Corrige *note reprlib.recursive_repr(): 1233. que
     não copiava ‘__type_params__’ da função decorada.

   - gh-109047(29): *note concurrent.futures: 21.: A 'thread do
     gerenciador de executores' agora captura exceções ao adicionar um
     item à 'fila de chamadas'.  Durante a finalização do Python, a
     criação de uma nova thread agora pode gerar *note RuntimeError:
     195.  Captura a chamada à exceção ‘terminate_broken()’ neste caso.
     Patch por Victor Stinner.

   - gh-109782(30): Garante que a assinatura de *note os.path.isdir():
     a1a. seja idêntica em todas as plataformas.  Patch por Amin Alaee.

   - gh-109653(31): Melhora o tempo de importação de *note functools:
     5f. em cerca de 13%.  Patch por Alex Waygood.

   - gh-109590(32): *note shutil.which(): 4b4. dará preferência a
     arquivos com a extensão ‘PATHEXT’ se o modo fornecido incluir
     ‘os.X_OK’ no Win32.  Se nenhuma correspondência com ‘PATHEXT’ for
     encontrada, um arquivo sem a extensão ‘PATHEXT’ poderá ser
     retornado.  Esta alteração fará com que *note shutil.which(): 4b4.
     aja de forma mais semelhante ao comportamento anterior no Python
     3.11.

   - gh-109653(33): Reduz o tempo de importação de *note enum: 56. em
     mais de 50%.  Patch por Alex Waygood.

   - gh-109593(34): Evita impasses em uma chamada reentrante para o
     rastreador de recursos de multiprocessamento.  Tal chamada
     reentrante, embora improvável, pode ocorrer se uma passagem de GC
     invocar o finalizador para um objeto de multiprocessamento, como
     SemLock.

   - gh-109653(35): Reduz o tempo de importação de *note typing: 104. em
     cerca de um terço.  Patch por Alex Waygood.

   - gh-109649(36): Adiciona a função *note os.process_cpu_count(): 1c4.
     para obter o número de CPUs lógicas utilizáveis pela thread de
     chamada do processo atual.  Patch por Victor Stinner.

   - gh-74481(37): Adiciona constantes relacionadas a ‘set_error_mode’
     no módulo ‘msvcrt’ na construção de depuração do Python.

   - gh-109613(38): Corrige *note os.stat(): 4a0. e *note
     os.DirEntry.stat(): 17ed.: verificar exceções.  Anteriormente, no
     Python construído em modo de depuração, essas funções podiam
     disparar um erro fatal do Python (e abortar o processo) quando uma
     função era bem-sucedida com uma exceção definida.  Patch por Victor
     Stinner.

   - gh-109599(39): Expõe o tipo de objetos PyCapsule como
     ‘types.CapsuleType’.

   - gh-109109(40): Agora você pode obter as cadeias de certificados TLS
     brutas de conexões TLS por meio dos métodos *note
     ssl.SSLSocket.get_verified_chain(): 16c6. e *note
     ssl.SSLSocket.get_unverified_chain(): 16c7.

     Contribuição de Mateusz Nowak.

   - gh-109559(41): Atualiza o banco de dados *note unicodedata: 105.
     para Unicode 15.1.0.

   - gh-109543(42): Remove a verificação desnecessária de *note
     hasattr(): 4d2. durante a criação de *note typing.TypedDict: 162.

   - gh-109495(43): Remove ‘__slots__’ extras desnecessários na
     implementação em Python puro de *note datetime: 1cc. para reduzir o
     tamanho da memória, pois são definidos na superclasse.  Patch por
     James Hilton-Balfe

   - gh-109461(44): *note logging: 87.: Usa um gerenciador de contexto
     para aquisição de travas.

   - gh-109096(45): *note http.server.CGIHTTPRequestHandler: 2a1. foi
     descontinuado para remoção na versão 3.15.  Seu design é antigo e o
     mundo da web já ultrapassou o CGI há muito tempo.

   - gh-109409(46): Corrige o erro que permitia herdar uma classe de
     dados congelada de vários pais, alguns dos quais possivelmente não
     estavam congelados.

   - gh-109375(47): O comando *note pdb: a5. ‘alias’ agora impede o
     registro de apelidos sem argumentos.

   - gh-109319(48): Descontinua o campo ‘dis.HAVE_ARGUMENT’ em favor de
     ‘dis.hasarg’.

   - gh-107219(49): Uma condição de corrida foi corrigida em
     ‘concurrent.futures’.  Quando um processo no pool de processos era
     encerrado abruptamente (enquanto o future estava em execução ou
     pendente), a conexão era encerrada.  Se a fila de chamadas estiver
     bloqueada no envio de bytes para um processo de trabalho, o
     encerramento da conexão de escrita interrompe o envio, permitindo o
     fechamento da fila.  Patch por Victor Stinner.

   - gh-66143(50): O objeto *note codecs.CodecInfo: 17ee. agora é
     copiável e pode ser selecionado.  Patch por Robert Lehmann e Furkan
     Onder.

   - gh-109187(51): *note pathlib.Path.resolve(): 17ef. agora trata
     laços de links simbólicos como outros erros: no modo estrito, *note
     OSError: 417. é levantada, e no modo não estrito, nenhuma exceção é
     levantada.

   - gh-50644(52): Tenta serializar com pickle ou criar uma cópia rasa
     ou profunda de fluxos *note codecs: 1b. agora levantam um
     TypeError.  Anteriormente, a cópia falhava com um RecursionError,
     enquanto o pickle produzia resultados incorretos que eventualmente
     causavam a falha ao desserializar com pickle com um RecursionError.

   - gh-109174(53): Adicionado suporte a *note types.SimpleNamespace:
     1d1. em *note copy.replace(): 151.

   - gh-109164(54): *note pdb: a5.: Substitui *note getopt: 61. por
     *note argparse: 6. para analisar argumentos de linha de comando.

   - gh-109151(55): Habilita os recursos de edição ‘readline’ na
     interface de linha de comando *note sqlite3: 441. (‘python -m
     sqlite3’).

   - gh-108987(56): Corrige a condição de corrida *note
     _thread.start_new_thread(): 196.  Se uma thread for criada durante
     a finalização do Python, a thread recém-gerada agora sai
     imediatamente em vez de tentar acessar a memória liberada e causar
     um travamento.  Patch por Victor Stinner.

   - gh-108682(57): Enum: requer ‘names=()’ ou ‘type=...’ para criar uma
     enumeração vazia usando a sintaxe funcional.

   - gh-109033(58): Exceções levantadas pela função embutida os.utime
     agora incluem o nome do arquivo relacionado.

   - gh-108843(59): Corrige um problema em *note ast.unparse(): 8eb. ao
     desfazer a análise de f-strings contendo muitos tipos de aspas.

   - gh-108469(60): *note ast.unparse(): 8eb. agora oferece suporte à
     nova sintaxe *note f-string: 436. introduzida no Python 3.12.
     Observe que as aspas *note f-string: 436. foram selecionadas
     novamente para simplificar a nova sintaxe.  (Patch por Steven Sun)

   - gh-108751(61): Adiciona a função *note copy.replace(): 151, que
     permite criar uma cópia modificada de um objeto.  Ela oferece
     suporte às tuplas nomeadas, classes de dados e muitos outros
     objetos.

   - gh-108682(62): Enum: Levanta *note TypeError: 2c3. se
     ‘super().__new__()’ for chamado de um ‘__new__’ personalizado.

   - gh-108278(63): Descontinua a passagem do retorno de chamada por
     argumento nomeado para as seguintes APIs *note sqlite3.Connection:
     245.:

        * *note set_authorizer(): 2ab.

        * *note set_progress_handler(): 2ac.

        * *note set_trace_callback(): 2ad.

     Os parâmetros afetados se tornarão somente-posicionais no Python
     3.15.

     Patch por Erlend E. Aasland.

   - gh-105829(64): Corrige impasse (deadlock) em
     concurrent.futures.ProcessPoolExecutor

   - gh-108295(65): Corrige travamentos relacionados ao uso de
     referências fracas em *note typing.TypeVar: 15d.

   - gh-108463(66): Faz com que expressões/instruções funcionem conforme
     o esperado no pdb

   - gh-108277(67): Adiciona *note os.timerfd_create(): 211, *note
     os.timerfd_settime(): 212, *note os.timerfd_gettime(): 214, *note
     os.timerfd_settime_ns(): 213. e *note os.timerfd_gettime_ns(): 215.
     para fornecer uma interface de baixo nível para o descritor de
     arquivo de notificação de timer do Linux.

   - gh-107811(68): *note tarfile: de.: a extração de membros com UID ou
     GID muito grande (por exemplo, em um sistema operacional com ‘id_t’
     de 32 bits) agora falha da mesma forma que a falha na definição do
     ID.

   - gh-64662(69): Corrige o suporte para tabelas virtuais em *note
     sqlite3.Connection.iterdump(): 247.  Patch por Aviv Palivoda.

   - gh-108111(70): Corrige uma regressão introduzida em gh-101251(71)
     para a versão 3.12, resultando em um cálculo de deslocamento
     incorreto em ‘gzip.GzipFile.seek()’.

   - gh-108294(72): *note time.sleep(): 69d. agora levanta um evento de
     auditoria.

   - gh-108278(73): Descontinua a passagem de nome, número de argumentos
     e o chamável como argumentos nomeados para as seguintes APIs de
     *note sqlite3.Connection: 245.:

        * *note create_function(): 2a9.

        * *note create_aggregate(): 2aa.

     Os parâmetros afetados se tornarão somente-posicionais no Python
     3.15.

     Patch por Erlend E. Aasland.

   - gh-108322(74): Aceleração de NormalDist.samples() usando o método
     CDF inverso em vez de chamar random.gauss().

   - gh-83417(75): Adiciona a capacidade do venv de criar um arquivo
     ‘.gitignore’, que faz com que o ambiente criado seja ignorado pelo
     Git.  Essa configuração é ativada por padrão quando o venv é
     chamado por meio de sua CLI.

   - gh-105736(76): Harmonização da versão Python pura de *note
     OrderedDict: 5db. com a versão C. Agora, ambas as versões
     configuram seu estado interno em ‘__new__’.  Anteriormente, a
     versão Python pura fazia a configuração em ‘__init__’.

   - gh-108083(77): Corrige bugs no construtor de *note
     sqlite3.Connection: 245. e *note sqlite3.Connection.close(): 246,
     onde exceções poderiam vazar.  Patch por Erlend E. Aasland.

   - gh-107932(78): Corrige o módulo ‘dis’ para relatar e exibir
     corretamente o bytecode que não possui linhas de código-fonte.

   - gh-105539(79): *note sqlite3: cf. agora emite uma *note
     ResourceWarning: 244. se um objeto *note sqlite3.Connection: 245.
     não for ‘fechado’ explicitamente.  Patch por Erlend E. Aasland.

   - gh-107995(80): O atributo ‘__module__’ em instâncias de *note
     functools.cached_property: 541. agora é definido como o nome do
     módulo no qual a cached_property está definida, em vez de
     “functools”.  Isso significa que os doctests em docstrings
     ‘cached_property’ agora são coletados corretamente pelo módulo
     *note doctest: 3a.  Patch por Tyler Smart.

   - gh-107963(81): Corrige *note
     multiprocessing.set_forkserver_preload(): 1681. para verificar a
     lista de nomes de módulos fornecida.  Patch por Donghee Na.

   - gh-106242(82): Corrige *note os.path.normpath(): 135e. para
     manipular caracteres nulos incorporados sem truncar o caminho.

   - gh-81555(83): *note xml.dom.minidom: 122. agora coloca apenas aspas
     ‘"’ em atributos.

   - gh-50002(84): *note xml.dom.minidom: 122. agora preserva espaços em
     branco em atributos.

   - gh-93057(85): Passa mais de um argumento posicional para *note
     sqlite3.connect(): 2a8. e o construtor *note sqlite3.Connection:
     245. está obsoleto.  Os parâmetros restantes se tornarão
     somente-nomeados no Python 3.15.  Patch por Erlend E. Aasland.

   - gh-76913(86): Adiciona o parâmetro/recurso 'merge_extra' a *note
     logging.LoggerAdapter: 1339.

   - gh-107913(87): Corrige possíveis perdas dos valores ‘errno’ e
     ‘winerror’ em exceções *note OSError: 417. se eles fossem limpados
     ou modificados pelo código de limpeza antes de criar o objeto de
     exceção.

   - gh-107845(88): *note tarfile.data_filter(): 42d. agora leva em
     consideração a localização dos links simbólicos ao determinar seu
     destino, portanto, não rejeitará mais alguns tarballs válidos com
     ‘LinkOutsideDestinationError’.

   - gh-107812(89): Estende o suporte a netlink do socket para a
     plataforma FreeBSD.

   - gh-107805(90): Corrige assinaturas de funções geradas em nível de
     módulo no *note turtle: 101.

   - gh-107782(91): *note pydoc: b5. agora é capaz de exibir assinaturas
     que não são representáveis em Python, por exemplo, para ‘getattr’ e
     ‘dict.pop’.

   - gh-56166(92): Descontinua a passagem de argumentos opcionais
     'maxsplit', 'count' e 'flags' em funções de nível de módulo *note
     re.split(): 2a2, *note re.sub(): 2a3. e *note re.subn(): 2a4. como
     posicionais.  Eles devem ser passados apenas como nomeados.

   - gh-107710(93): Acelera *note logging.getHandlerNames(): 17f0.

   - gh-107715(94): Corrige *note doctest.DocTestFinder.find(): 17f1. na
     presença de nomes de classe com caracteres especiais.  Patch por
     Gertjan van Zwieten.

   - gh-100814(95): Passa um objeto chamável como um valor de opção para
     uma imagem Tkinter agora levanta o TclError esperado em vez de um
     AttributeError.

   - gh-72684(96): Adiciona métodos de widget *note tkinter: f0.:
     ‘tk_busy_hold()’, ‘tk_busy_configure()’, ‘tk_busy_cget()’,
     ‘tk_busy_forget()’, ‘tk_busy_current()’ e ‘tk_busy_status()’.

   - gh-106684(97): Levanta *note ResourceWarning: 244. quando *note
     asyncio.StreamWriter: 17f2. não for fechado, causando vazamentos de
     memória.  Patch por Kumar Aditya.

   - gh-107465(98): Adiciona método de classe *note
     pathlib.Path.from_uri(): 22a.

   - gh-107077(99): Parece que em algumas condições, o OpenSSL retornará
     ‘SSL_ERROR_SYSCALL’ em vez de ‘SSL_ERROR_SSL’ quando uma
     verificação de certificação falhar, mas os parâmetros de erro ainda
     conterão ‘ERR_LIB_SSL’ e ‘SSL_R_CERTIFICATE_VERIFY_FAILED’.
     Estamos detectando essa situação e levantando o erro
     ‘ssl.SSLCertVerificationError’ apropriado.  Patch por Pablo Galindo

   - gh-107576(100): Corrige *note types.get_original_bases(): 4ce. para
     retornar ‘__orig_bases__’ somente se estiver presente diretamente
     em ‘cls’.  Patch por James Hilton-Balfe.

   - gh-105481(101): Remove ‘opcode.is_pseudo’,
     ‘opcode.MIN_PSEUDO_OPCODE’ e ‘opcode.MAX_PSEUDO_OPCODE’, que foram
     adicionados na versão 3.12, nunca foram documentados e não foram
     projetados para uso externo.

   - gh-105481(102): ‘opcode.ENABLE_SPECIALIZATION’ (que foi adicionado
     na versão 3.12, mas nunca foi documentado ou destinado ao uso
     externo) foi movido para ‘_opcode.ENABLE_SPECIALIZATION’, onde os
     testes podem acessá-lo.

   - gh-107396(103): tarfiles; Corrigido o uso antes da atribuição de
     self.exception para descompactação gzip.

   - gh-107409(104): Definido o atributo ‘__wrapped__’ em *note
     reprlib.recursive_repr(): 1233.

   - gh-107406(105): Implementa o novo método ‘__repr__()’ para *note
     struct.Struct: 15a0.  Agora ele retorna ‘Struct(<format repr>)’.

   - gh-107369(106): Otimiza *note textwrap.indent(): 276.  Ele está
     ~30% mais rápido para entradas grandes.  Patch por Inada Naoki.

   - gh-78722(107): Corrige o problema em que *note
     pathlib.Path.iterdir(): 171d. não levantava *note OSError: 417. até
     ser iterado.

   - gh-105578(108): Descontinua *note typing.AnyStr: 2b2. em favor da
     nova sintaxe de parâmetro de tipo.  Consulte PEP 695.

   - gh-62519(109): Faz com que *note gettext.pgettext(): 9fd. busque
     definições no plural quando a tradução não for encontrada.

   - gh-107089(110): Prateleiras abertas com *note shelve.open(): 17f3.
     têm um método ‘clear()’ muito mais rápido.  Patch por James Cave.

   - gh-82500(111): Corrige estouro em sistemas de 32 bits com a
     implementação de *note asyncio: a. *note os.sendfile(): b21.

   - gh-83006(112): Documenta o comportamento de *note
     shutil.disk_usage(): 116c. para sistemas de arquivos não montados
     no Unix.

   - gh-65495(113): Usa ‘mail from’ e ‘rcpt to’ em letras minúsculas em
     ‘smptlib.SMTP’.

   - gh-106186(114): Não reporta o defeito
     ‘MultipartInvariantViolationDefect’ quando a classe *note
     email.parser.Parser: 11dc. for usada para analisar e-mails com
     ‘headersonly=True’.

   - gh-105002(115): Corrige resultado inválido do método
     ‘PurePath.relative_to()’ ao tentar percorrer um segmento “‘..’” em
     'other' com 'walk_up' habilitado.  Uma exceção *note ValueError:
     202. agora é levantada neste caso.

   - gh-106739(116): Adiciona ‘rtype_cache’ à mensagem de aviso (como um
     complemento ao tipo de objetos vazados e ao número de objetos
     vazados já incluídos na mensagem) para facilitar a depuração de
     objetos vazados quando o processo rastreador de recursos de
     multiprocessamento os encontra no desligamento.  Isso ajuda a
     identificar mais rapidamente o que vazou e/ou por que o objeto
     vazado não foi limpo corretamente.

   - gh-106751(117): Otimiza ‘SelectSelector.select()’ para muitos casos
     de iteração.  Patch por Donghee Na.

   - gh-106751(118): Otimiza ‘_PollLikeSelector.select()’ para o caso de
     muitas iterações.

   - gh-106751(119): Otimiza ‘KqueueSelector.select()’ para o caso de
     muitas iterações.  Patch por Donghee Na.

   - gh-106831(120): Corrige a possível ausência da verificação ‘NULL’
     do resultado ‘d2i_SSL_SESSION’ em ‘_ssl.c’.

   - gh-105481(121): As diversas listas de opcodes no módulo *note dis:
     38. agora são geradas a partir de bytecodes.c em vez de construídas
     explicitamente em opcode.py.

   - gh-106727(122): Torna *note inspect.getsource(): 15f8. mais
     inteligente para classes com definições de mesmo nome

   - gh-106789(123): Remove importação de *note pprint: ae. de *note
     sysconfig: db.

   - gh-105726(124): Adiciona ‘__slots__’ a *note
     contextlib.AbstractContextManager: cab. e *note
     contextlib.AbstractAsyncContextManager: b3d. para que classes
     filhas possam usar ‘__slots__’.

   - gh-106774(125): Atualiza a cópia do pacote do pip para a versão
     23.2.1.

   - gh-106751(126): *note selectors: c2.: Otimiza o código
     ‘EpollSelector.select()’ movendo parte do código para fora do laço.

   - gh-106752(127): Corrigidos vários bugs em zipfile.Path, incluindo:
     em ‘zipfile.Path.match()’, os separadores do Windows não são mais
     respeitados (e nunca foram pensados para serem); Corrigidas as
     operações ‘name’/‘suffix’/‘suffixes’/‘stem’ quando nenhum nome de
     arquivo está presente e o Path não está na raiz do arquivo zip;
     Glob reformulado para melhor desempenho e comportamento de
     correspondência mais correto.

   - gh-105293(128): Removida a chamada para
     ‘SSL_CTX_set_session_id_context’ durante a criação de contexto do
     lado do cliente no módulo *note ssl: d0.

   - gh-106734(129): Desabilita o preenchimento automático com tabulação
     no modo multilinha de *note pdb: a5.

   - gh-105481(130): Exibido metadados do opcode por meio de ‘_opcode’.

   - gh-106670(131): Adiciona o novo comando ‘exceptions’ ao depurador
     Pdb.  Ele possibilita a navegação entre exceções encadeadas ao usar
     a depuração post mortem.

   - gh-106602(132): Adiciona __copy__ e __deepcopy__ em *note enum: 56.

   - gh-106664(133): *note selectors: c2.: Adiciona o método
     ‘_SelectorMapping.get()’ e otimiza
     ‘_SelectorMapping.__getitem__()’.

   - gh-106628(134): Acelera a análise de e-mails em cerca de 20%,
     eliminando a necessidade de compilar uma nova expressão regular
     para cada e-mail.

   - gh-89427(135): Define a variável de ambiente ‘VIRTUAL_ENV_PROMPT’
     na ativação de *note venv: 111, mesmo quando
     ‘VIRTUAL_ENV_DISABLE_PROMPT’ estiver definido.

   - gh-106530(136): Reverte uma alteração em *note
     colorsys.rgb_to_hls(): 17f4. que causava divisão por zero para
     certas entradas quase brancas.  Patch por Terry Jan Reedy.

   - gh-106584(137): Corrige o código de saída para ‘unittest’ caso
     todos os testes sejam ignorados.  Patch por Egor Eliseev.

   - gh-106566(138): Otimiza ‘(?!)’ (padrão que sempre falha) em
     expressões regulares.

   - gh-106554(139): *note selectors: c2.: Reduz a sobrecarga do seletor
     usando ‘dict.get()’ para procurar descritores de arquivo.

   - gh-106558(140): Remove o ciclo de referência em chamadores de
     ‘convert_to_error()’ excluindo ‘result’ do escopo em um bloco
     ‘finally’.

   - gh-100502(141): Adiciona o atributo de classe
     ‘pathlib.PurePath.pathmod’ que armazena a implementação de *note
     os.path: a2. usado para operações de caminho de baixo nível:
     ‘posixpath’ ou ‘ntpath’.

   - gh-106527(142): Reduz a sobrecarga para adicionar e remover
     leitores e escritores *note asyncio: a.

   - gh-106524(143): Corrige a falha em ‘_sre.template()’ com modelos
     contendo índices de grupo inválidos.

   - gh-106531(144): Removido ‘_legacy’ e os nomes que ele fornecia de
     ‘importlib.resources’: ‘Resource’, ‘contents’, ‘is_resource’,
     ‘open_binary’, ‘open_text’, ‘path’, ‘read_binary’ e ‘read_text’.

   - gh-106052(145): Módulo *note re: b9.: corrige a correspondência de
     quantificadores possessivos no caso de um subpadrão contendo
     retrocesso.

   - gh-106510(146): Melhora a saída de depuração para grupos atômicos
     em expressões regulares.

   - gh-106503(147): Corrige o ciclo de referência em
     ‘asyncio._SelectorSocketTransport’ removendo ‘_write_ready’ em
     ‘close’.

   - gh-105497(148): Corrige a inversão da máscara de sinalizador quando
     existem flags sem nome.

   - gh-90876(149): Impede que ‘multiprocessing.spawn’ falhe na
     'importação' em ambientes onde ‘sys.executable’ é ‘None’.  Isso
     regrediu na versão 3.11 com a adição do suporte a objetos caminho
     ou similares em multiprocessamento.

   - gh-106403(150): Instâncias de *note typing.TypeVar: 15d, *note
     typing.ParamSpec: 15e, *note typing.ParamSpecArgs: 7c7, *note
     typing.ParamSpecKwargs: 7c8. e *note typing.TypeVarTuple: 15f.
     novamente oferecem suporte a referências fracas, corrigindo uma
     regressão introduzida no Python 3.12.0 beta 1.  Patch por Jelle
     Zijlstra.

   - gh-89812(151): Adiciona a classe privada ‘pathlib._PathBase’, que
     fornece suporte experimental para sistemas de arquivos virtuais e
     pode ser disponibilizada publicamente em uma versão futura do
     Python.

   - gh-106292(152): Verifica se há um valor armazenado em cache do tipo
     dicionário instanciado no método ‘__get__()’ de *note
     functools.cached_property(): 541.  Isso corresponde melhor ao
     comportamento anterior à versão 3.12 e melhora a compatibilidade
     para usuários que subclassificam *note functools.cached_property():
     541. e adicionam um método ‘__set__()’.

   - gh-106350(153): Detecta possível falha de alocação de memória na
     função libtommath ‘mp_init()’ usada pelo módulo ‘_tkinter’.

   - gh-106330(154): Corrige a correspondência incorreta de caminhos
     vazios em *note pathlib.PurePath.match(): 4ac.  Este bug foi
     introduzido no Python 3.12.0 beta 1.

   - gh-106309(155): Descontinua *note typing.no_type_check_decorator():
     2b1.  Nenhum verificador de tipos importante adicionou suporte a
     este decorador.  Patch por Alex Waygood.

   - gh-102541(156): Faz com que ‘pydoc.doc()’ capture o módulo inválido
     *note ImportError: 419. quando o fluxo de saída não for ‘None’.

   - gh-106263(157): Corrige a falha ao chamar ‘repr’ com um objeto
     SignalDict construído manualmente.  Patch por Charlie Zhao.

   - gh-106236(158): Substitui instruções ‘assert’ por ‘raise
     RuntimeError’ em *note threading: ed, para que ‘_DummyThread’ não
     possa ser unido nem mesmo com ‘-OO’.

   - gh-106238(159): Corrige bug raro de simultaneidade na aquisição de
     trava pelo pacote de registro.

   - gh-106152(160): Adicionado gancho de evento PY_THROW para *note
     cProfile: 27. para geradores.

   - gh-106075(161): Adicionado ‘asyncio.taskgroups.__all__’ a
     ‘asyncio.__all__’ para exportação em importações estrela.

   - gh-104527(162): O Zipapp agora ignora a anexação de um arquivo a si
     mesmo.

   - gh-106046(163): Melhoria na mensagem de erro de *note os.fspath():
     c6e. se chamada em um objeto onde ‘__fspath__’ está definido como
     ‘None’.  Patch por Alex Waygood.

   - gh-105987(164): Corrige falha devido à contagem de referências
     incorreta nas rotinas internas ansiosas de fábrica de tarefas do do
     *note asyncio: a.

   - gh-105974(165): Corrige bug em que uma classe *note
     typing.Protocol: 264. que tinha um ou mais membros não-chamáveis
     levantava *note TypeError: 2c3. quando *note issubclass(): 7c2. era
     chamada contra ela, mesmo se definisse um método ‘__subclasshook__’
     personalizado.  O comportamento no Python 3.11 e versões anteriores
     — que agora foi restaurado — era não levantar *note TypeError: 2c3.
     nessas situações se um método ‘__subclasshook__’ personalizado
     fosse definido.  Patch por Alex Waygood.

   - gh-96145(166): Revertida a adição de ‘json.AttrDict’.

   - gh-89812(167): Adiciona *note pathlib.UnsupportedOperation: 227,
     que é levantada em vez de *note NotImplementedError: 228. quando
     uma operação de caminho não é suportada.

   - gh-105808(168): Corrigida uma regressão introduzida em
     gh-101251(169) para a versão 3.12, que fazia com que
     ‘gzip.GzipFile.flush()’ não descarregasse o compactador (nem
     passasse o argumento ‘zip_mode’).

   - gh-105481(170): *note stack_effect(): f64. não levanta mais uma
     exceção se um ‘oparg’ for fornecido para um ‘opcode’ que não usa
     seu argumento, ou quando não for fornecido para um ‘opcode’ que o
     utiliza.  Neste último caso, o efeito de pilha é retornado para
     ‘oparg=0’.

   - gh-104799(171): Habilita *note ast.unparse(): 8eb. para desfazer o
     analisador sintático de definições de função e classe criadas sem o
     novo campo ‘type_params’ de PEP 695(172).  Patch por Jelle
     Zijlstra.

   - gh-105793(173): Adiciona o argumento somente-nomeado
     'follow_symlinks' para *note pathlib.Path.is_dir(): 230. e *note
     is_file(): 22f, com o padrão ‘True’.

   - gh-105570(174): Descontinua dois métodos de criação de classes
     *note typing.TypedDict: 162. com 0 campos usando a sintaxe
     funcional: ‘TD = TypedDict("TD")’ e ‘TD = TypedDict("TD", None)’.
     Ambos serão descontinuados no Python 3.15.  Para criar uma classe
     ‘TypedDict’ com 0 campos, use ‘class TD(TypedDict): pass’ ou ‘TD =
     TypedDict("TD", {})’.

   - gh-105745(175): Corrige o método ‘webbrowser.Konqueror.open’.

   - gh-105733(176): *note ctypes: 2a.: Descontinua as funções não
     documentadas ‘ctypes.SetPointerType()’ e ‘ctypes.ARRAY()’.  Patch
     por Victor Stinner.

   - gh-105687(177): Remove as funções descontinuadas ‘re.template’,
     ‘re.T’, ‘re.TEMPLATE’ e ‘sre_constans.SRE_FLAG_TEMPLATE’.

   - gh-105684(178): O suporte a *note asyncio.Task.set_name(): 9e5.
     agora é obrigatório para implementações de tarefas de terceiros.  A
     função não documentada ‘_set_task_name()’ (descontinuada desde a
     versão 3.8) foi removida.  Patch por Kumar Aditya.

   - gh-105375(179): Corrige um bug em ‘_Unpickler_SetInputStream()’,
     onde uma exceção poderia ser sobrescrita em caso de falha.

   - gh-105626(180): Altera o valor de retorno padrão de *note
     http.client.HTTPConnection.get_proxy_response_headers(): 17f5. para
     ‘None’ e não ‘{}’.

   - gh-105375(181): Corrige bugs em *note sys: d9, onde exceções
     poderiam ser sobrescritas devido ao tratamento de erros adiado.

   - gh-105605(182): Reforça o tratamento de erros em ‘pyexpat’ durante
     a inicialização do módulo para evitar que exceções sejam
     sobrescritas e que objetos sejam desreferenciados duas vezes.

   - gh-105375(183): Corrige bug em *note decimal: 36, onde uma exceção
     poderia acabar sendo sobrescrita.

   - gh-105375(184): Corrige bugs em ‘_datetime’, onde exceções poderiam
     ser sobrescritas em caso de falha na inicialização do módulo.

   - gh-105375(185): Corrige bugs na inicialização de ‘_ssl’, que
     poderiam levar a referências vazadas e exceções sobrescritas.

   - gh-105375(186): Corrige um bug em *note array.array: 1a0, onde uma
     exceção poderia acabar sendo sobrescrita.

   - gh-105375(187): Corrige bugs em ‘_ctypes’, onde exceções poderiam
     ser sobrescritas.

   - gh-105375(188): Corrige um bug no módulo *note posix: ad, onde uma
     exceção poderia ser sobrescrita.

   - gh-105375(189): Corrige bugs em ‘_elementtree’, onde exceções
     poderiam ser sobrescritas.

   - gh-105375(190): Corrige bugs em *note zoneinfo: 134, onde exceções
     poderiam ser sobrescritas.

   - gh-105375(191): Corrige bugs em *note errno: 57, onde exceções
     poderiam ser sobrescritas.

   - gh-105566(192): Descontinua a criação de uma classe *note
     typing.NamedTuple: 2b0. usando argumentos nomeados para denotar os
     campos (‘NT = NamedTuple("NT", x=int, y=str)’).  Isso não será
     permitido no Python 3.15.  Use a sintaxe baseada em classe ou a
     sintaxe funcional.

     Dois métodos para criar classes ‘NamedTuple’ com 0 campos usando a
     sintaxe funcional também estão descontinuados e não serão
     permitidos no Python 3.15: ‘NT = NamedTuple("NT")’ e ‘NT =
     NamedTuple("NT", None)’.  Para criar uma classe ‘NamedTuple’ com 0
     campos, use ‘class NT(NamedTuple): pass’ ou ‘NT = NamedTuple("NT",
     [])’.

   - gh-105545(193): Remove o atributo
     ‘webbrowser.MacOSXOSAScript._name’, que estava descontinuado na
     versão 3.11.

   - gh-105497(194): Corrige a inversão de sinalizadores quando existem
     membros de apelido/máscara.

   - gh-105509(195): *note typing.Annotated: 944. agora é implementado
     como uma instância de ‘typing._SpecialForm’ em vez de uma classe.
     Isso não deve ter impacto direto para os usuários da API pública do
     módulo *note typing: 104.

   - gh-105375(196): Corrige bugs em *note pickle: a6, onde exceções
     podiam ser sobrescritas.

   - gh-70303(197): Emite *note FutureWarning: 415. de *note
     pathlib.Path.glob(): 22d. e *note rglob(): 22e. se o padrão
     fornecido terminar com “‘**’”.  Em uma versão futura do Python,
     padrões com essa terminação corresponderão tanto a arquivos quanto
     a diretórios.  Adicione uma barra final para corresponder apenas a
     diretórios.

   - gh-105375(198): Corrige um bug em *note sqlite3: cf. onde uma
     exceção poderia ser sobrescrita no retorno de chamada de *note
     collation: 676.

   - gh-105382(199): Remove os parâmetros 'cafile', 'capath' e
     'cadefault' da função *note urllib.request.urlopen(): 293,
     descontinuados no Python 3.6.  Patch por Victor Stinner.

   - gh-105376(200): *note logging: 87.: Remove os métodos
     ‘Logger.warn()’ e ‘LoggerAdapter.warn()’ não documentados e não
     testados, bem como a função ‘logging.warn()’.  Descontinuados desde
     o Python 3.3, eles eram apelidos dos métodos *note
     logging.Logger.warning(): 17f6, ‘logging.LoggerAdapter.warning()’ e
     *note logging.warning(): 2ff.  Patch por Victor Stinner.

   - gh-105332(201): Reverte o método de serialização com pickle de
     by-name para by-value.

   - gh-104554(202): Adiciona suporte ao esquema RTSPS em urllib.parse

   - gh-105292(203): Adiciona opção a *note
     traceback.format_exception_only(): 851. para recursivamente
     retornar à exceção aninhada de um *note BaseExceptionGroup: 25f.

   - gh-105280(204): Corrige bug em que ‘isinstance([],
     collections.abc.Mapping)’ poderia ser avaliado como ‘True’ se a
     coleta de lixo ocorresse no momento errado.  O bug foi causado por
     alterações na implementação de *note typing.Protocol: 264. no
     Python 3.12.

   - gh-80480(205): *note array: 7.: Adiciona o typecode ‘'w'’ que
     representa ‘Py_UCS4’.

   - gh-105239(206): Corrige bug antigo em que ‘issubclass(object,
     typing.Protocol)’ era avaliado como ‘True’ em alguns casos
     extremos.  Patch por Alex Waygood.

   - gh-104310(207): Na versão beta 1, adicionamos uma função utilitária
     para autores de módulos de extensão, para usar ao testar seus
     módulos quanto ao suporte em múltiplos interpretadores ou sob uma
     GIL por interpretador.  O nome dessa função mudou de
     ‘allowing_all_extensions’ para
     ‘_incompatible_extension_module_restrictions’.  O padrão para o
     argumento “disable_check” foi alterado de “True” para “False”, para
     corresponder melhor ao novo nome da função.

   - gh-105080(208): Assinatura inconsistente corrigida em classes
     derivadas para *note inspect.signature(): 738.

   - gh-105144(209): Uma regressão recente foi corrigida no módulo *note
     typing: 104.  A regressão significava que executar ‘class Foo(X,
     typing.Protocol)’, onde ‘X’ era uma classe que tinha *note
     abc.ABCMeta: f4a. como metaclasse, faria com que chamadas
     subsequentes de ‘isinstance(1, X)’ levantassem erroneamente *note
     TypeError: 2c3.  Patch por Alex Waygood.

   - gh-62948(210): O finalizador *note io.IOBase: 1f5. agora registra
     os erros do método ‘close()’ com *note sys.unraisablehook: 1f7.
     Anteriormente, os erros eram ignorados silenciosamente por padrão e
     registrados apenas no *note Modo de Desenvolvimento Python: 1f8. ou
     no *note Python construído em modo de depuração: 1f9.  Patch por
     Victor Stinner.

   - gh-105096(211): *note wave: 113.: Descontinua os métodos
     ‘getmark()’, ‘setmark()’ e ‘getmarkers()’ das classes *note
     wave.Wave_read: 2b6. e *note wave.Wave_write: 2b7.  Eles serão
     removidos no Python 3.15.  Patch por Victor Stinner.

   - gh-104992(212): Remove o método ‘unittest.TestProgram.usageExit()’
     não testado e não documentado, descontinuado no Python 3.11.  Patch
     por Hugo van Kemenade.

   - gh-104996(213): Melhore o desempenho da inicialização de *note
     pathlib.PurePath: 4a6. adiando a junção de caminhos quando
     múltiplos argumentos são fornecidos.

   - gh-101588(214): Descontinua o suporte não documentado a
     copy/deepcopy/pickle para itertools.

   - gh-103631(215): Corrige
     ‘pathlib.PurePosixPath(pathlib.PureWindowsPath(...))’ que não
     convertia separadores de caminho para restaurar o comportamento
     compatível com a versão 3.11.

   - gh-104947(216): Torna as comparações entre objetos *note
     pathlib.PureWindowsPath: 17f7. consistentes no Windows e no Posix
     para corresponder ao comportamento da versão 3.11.

   - gh-104773(217): PEP 594(218): Remove o módulo ‘audioop’,
     descontinuado no Python 3.11.  Patch por Victor Stinner.

   - gh-104773(219): PEP 594(220): Remove o módulo ‘aifc’, descontinuado
     no Python 3.11.  Patch por Victor Stinner.

   - gh-104773(221): PEP 594(222): Remove o módulo ‘uu’, descontinuado
     no Python 3.11.  Patch por Victor Stinner.

   - gh-104935(223): Corrige bugs na interação entre *note
     typing.runtime_checkable(): 443. e *note typing.Generic: 15d7. que
     foram introduzidos pela implementação PEP 695(224).  Patch por
     Jelle Zijlstra.

   - gh-104773(225): PEP 594(226): Remove o módulo ‘crypt’ e sua
     extensão privada ‘_crypt’, descontinuados no Python 3.11.  Patch
     por Victor Stinner.

   - gh-104773(227): PEP 594(228): Remove o módulo ‘nis’, obsoletos no
     Python 3.11.  Patch por Victor Stinner.

   - gh-104898(229): Adiciona *note __slots__: 1533. ausente a *note
     os.PathLike: c6c.

   - gh-104773(230): PEP 594(231): Remove o módulo ‘xdrlib’,
     descontinuado no Python 3.11.  Patch por Victor Stinner.

   - gh-104773(232): PEP 594(233): Remove o módulo ‘nntplib’,
     descontinuado no Python 3.11.  Patch por Victor Stinner.

   - gh-104886(234): Remove a classe não documentada
     ‘configparser.LegacyInterpolation’, descontinuada na documentação
     desde o Python 3.2 e com um aviso de descontinuação desde o Python
     3.11.  Patch por Hugo van Kemenade.

   - gh-104786(235): Remove a criação de *note typing.TypedDict: 162.
     baseada em kwargs.

   - gh-104876(236): Remove o método ‘turtle.RawTurtle.settiltangle()’,
     descontinuado na documentação desde o Python 3.1 e com um aviso de
     descontinuação desde o Python 3.11.  Patch por Hugo van Kemenade.

   - gh-104773(237): PEP 594(238): Removido o pacote ‘msilib’,
     descontinuado no Python 3.11.

   - gh-104773(239): PEP 594(240): Removido o módulo ‘spwd’,
     descontinuado no Python 3.11: o projeto python-pam(241) pode ser
     usado em seu lugar.  Patch por Victor Stinner.

   - gh-75552(242): Removido o módulo ‘tkinter.tix’, descontinuado desde
     o Python 3.6.

   - gh-104773(243): PEP 594(244): Remove o módulo ‘chunk’,
     descontinuado no Python 3.11.  Patch por Victor Stinner.

   - gh-104773(245): PEP 594(246): Remove o módulo ‘mailcap’,
     descontinuado no Python 3.11.  Patch por Victor Stinner.

   - gh-104773(247): PEP 594(248): Remove o módulo ‘sunau’,
     descontinuado no Python 3.11.  Patch por Victor Stinner.

   - gh-104780(249): PEP 594(250): Remove o módulo ‘ossaudiodev’,
     descontinuado no Python 3.11.  Patch por Victor Stinner.

   - gh-104773(251): PEP 594(252): Remove o módulo ‘pipes’,
     descontinuado no Python 3.11.  Patch por Victor Stinner.

   - gh-104873(253): Adiciona *note typing.get_protocol_members(): 263.
     para retornar o conjunto de membros que definem um *note
     typing.Protocol: 264.  Adiciona *note typing.is_protocol(): 265.
     para verificar se uma classe é um *note typing.Protocol: 264.
     Patch por Jelle Zijlstra.

   - gh-104874(254): Documenta os atributos ‘__name__’ e ‘__supertype__’
     de *note typing.NewType: d16.  Patch por Jelle Zijlstra.

   - gh-104835(255): Removidas as seguintes funções *note unittest: 106,
     descontinuadas no Python 3.11:

        * ‘unittest.findTestCases()’

        * ‘unittest.makeSuite()’

        * ‘unittest.getTestCaseNames()’

     Em vez delas, use os métodos de *note TestLoader: 28e.:

        * *note unittest.TestLoader.loadTestsFromModule(): 28f.

        * *note unittest.TestLoader.loadTestsFromTestCase(): 290.

        * *note unittest.TestLoader.getTestCaseNames(): 291.

     Patch por Hugo van Kemenade.

   - gh-104804(256): Remove the untested and undocumented *note
     webbrowser: 115. ‘MacOSX’ class, deprecated in Python 3.11.  Patch
     by Hugo van Kemenade.

   - gh-83863(257): Support for using *note pathlib.Path: 229. objects
     as context managers has been removed.  Before Python 3.9, exiting
     the context manager marked a path as “closed”, which caused some
     (but not all!)  methods to raise when called.  Since Python 3.9,
     using a path as a context manager does nothing.

   - gh-104799(258): Adjust the location of the (see PEP 695(259))
     ‘type_params’ field on *note ast.ClassDef: 17f8, *note
     ast.AsyncFunctionDef: 17f9, and *note ast.FunctionDef: 17fa. to
     better preserve backward compatibility.  Patch by Jelle Zijlstra

   - gh-104797(260): Allow *note typing.Protocol: 264. classes to
     inherit from *note collections.abc.Buffer: 2e9.  Patch by Jelle
     Zijlstra.

   - gh-104783(261): Remove ‘locale.resetlocale()’ function deprecated
     in Python 3.11.  Patch by Victor Stinner.

   - gh-104780(262): Remove the ‘2to3’ program and the ‘lib2to3’ module,
     deprecated in Python 3.11.  Patch by Victor Stinner.

   - gh-104773(263): PEP 594(264): Remove the ‘telnetlib’ module,
     deprecated in Python 3.11.  Patch by Victor Stinner.

   - gh-104773(265): PEP 594(266): Remove the ‘imghdr’ module,
     deprecated in Python 3.11.  Patch by Victor Stinner.

   - gh-104773(267): PEP 594(268): Remove the ‘cgi’ and ‘cgitb’ modules,
     deprecated in Python 3.11.  Patch by Victor Stinner.

   - gh-104773(269): PEP 594(270): Remove the ‘sndhdr’ module,
     deprecated in Python 3.11.  Patch by Victor Stinner.

   - gh-104372(271): On Linux where *note subprocess: d6. can use the
     ‘vfork()’ syscall for faster spawning, prevent the parent process
     from blocking other threads by dropping the GIL while it waits for
     the vfork’ed child process ‘exec()’ outcome.  This prevents
     spawning a binary from a slow filesystem from blocking the rest of
     the application.

   - gh-99108(272): We now release the GIL around built-in *note
     hashlib: 68. computations of reasonable size for the SHA families
     and MD5 hash functions, matching what our OpenSSL backed hash
     computations already does.

   - gh-102613(273): Improve performance of *note pathlib.Path.glob():
     22d. when expanding a pattern with a non-terminal “‘**’” component
     by filtering walked paths through a regular expression, rather than
     calling *note os.scandir(): a68. more than once on each directory.

   - gh-104399(274): Prepare the ‘_tkinter’ module for building with Tcl
     9.0 and future libtommath by replacing usage of deprecated
     functions ‘mp_to_unsigned_bin_n()’ and ‘mp_unsigned_bin_size()’
     when necessary.

   - gh-102676(275): Add fields ‘start_offset’, ‘cache_offset’,
     ‘end_offset’, ‘baseopname’, ‘baseopcode’, ‘jump_target’ and ‘oparg’
     to *note dis.Instruction: 1da.

   - gh-103558(276): Fixed ‘parent’ argument validation mechanism of
     *note argparse: 6.  Improved test coverage.

   - gh-103464(277): Provide helpful usage messages when parsing
     incorrect *note pdb: a5. commands.

   - gh-103384(278): Generalize the regex pattern
     ‘BaseConfigurator.INDEX_PATTERN’ to allow spaces and
     non-alphanumeric characters in keys.

   - gh-103124(279): Added multiline statement support for *note pdb:
     a5.

   - gh-101162(280): Forbid using ‘builtins.issubclass()’ with *note
     types.GenericAlias: 7ed. as the first argument.

   - gh-103200(281): Fix cache repopulation semantics of
     zipimport.invalidate_caches().  The cache is now repopulated upon
     retrieving files with an invalid cache, not when the cache is
     invalidated.

   - gh-100061(282): Fix a bug that causes wrong matches for regular
     expressions with possessive qualifier.

   - gh-77609(283): Add 'follow_symlinks' argument to *note
     pathlib.Path.glob(): 22d. and *note rglob(): 22e, defaulting to
     false.

   - gh-102541(284): Hide traceback in *note help(): 8dd. prompt, when
     import failed.

   - gh-102120(285): Added a stream mode to ‘tarfile’ that allows for
     reading archives without caching info about the inner files.

   - gh-102029(286): Deprecate passing any arguments to *note
     threading.RLock(): 2de.

   - gh-88233(287): Refactored ‘zipfile._strip_extra’ to use higher
     level abstractions for extras instead of a heavy-state loop.

   - gh-102024(288): Reduce calls of ‘_idle_semaphore.release()’ in
     ‘concurrent.futures.thread._worker()’.

   - gh-73435(289): Add support for recursive wildcards in *note
     pathlib.PurePath.match(): 4ac.

   - gh-84867(290): *note unittest.TestLoader: 28e. no longer loads test
     cases from exact *note unittest.TestCase: 44f. and *note
     unittest.FunctionTestCase: 17fb. classes.

   - gh-99203(291): Restore following CPython <= 3.10.5 behavior of
     *note shutil.make_archive(): 4b3.: do not create an empty archive
     if ‘root_dir’ is not a directory, and, in that case, raise *note
     FileNotFoundError: 42b. or *note NotADirectoryError: 1093.
     regardless of ‘format’ choice.  Beyond the brought-back behavior,
     the function may now also raise these exceptions in ‘dry_run’ mode.

   - gh-80480(292): Emit *note DeprecationWarning: 1a5. for *note array:
     7.’s ‘'u'’ type code, deprecated in docs since Python 3.3.

   - gh-94924(293): *note unittest.mock.create_autospec(): 16f4. now
     properly returns coroutine functions compatible with *note
     inspect.iscoroutinefunction(): 2e4.

   - gh-94777(294): Fix hanging *note multiprocessing: 94.
     ‘ProcessPoolExecutor’ when a child process crashes while data is
     being written in the call queue.

   - gh-92871(295): Remove the ‘typing.io’ and ‘typing.re’ namespaces,
     deprecated since Python 3.8.  All items are still available from
     the main *note typing: 104. module.

   - bpo-43633(296): Improve the textual representation of IPv4-mapped
     IPv6 addresses ( RFC 4291(297) Sections 2.2, 2.5.5.2) in *note
     ipaddress: 80.  Patch by Oleksandr Pavliuk.

   - bpo-44850(298): Improve performance of *note
     operator.methodcaller(): e61. using the PEP 590(299) ‘vectorcall’
     convention.  Patch by Anthony Lee and Pieter Eendebak.

   - bpo-44185(300): *note unittest.mock.mock_open(): 101d. will call
     the ‘close()’ method of the file handle mock when it is exiting
     from the context manager.  Patch by Samet Yaslan.

   - bpo-40988(301): Improve performance of *note
     functools.singledispatchmethod: 9f8. by caching the generated
     dispatch wrapper.  Optimization suggested by frederico.  Patch by
     @mental32, Alex Waygood and Pieter Eendebak.

   - bpo-41768(302): *note unittest.mock: 107. speccing no longer calls
     class properties.  Patch by Melanie Witt.

   - bpo-18319(303): Ensure ‘gettext(msg)’ retrieve translations even if
     a plural form exists.  In other words: ‘gettext(msg) ==
     ngettext(msg, '', 1)’.

   - bpo-17013(304): Add ‘ThreadingMock’ to *note unittest.mock: 107.
     that can be used to create Mock objects that can wait until they
     are called.  Patch by Karthikeyan Singaravelan and Mario Corchero.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/110786

   (2) https://github.com/python/cpython/issues/103480

   (3) https://github.com/python/cpython/issues/110733

   (4) https://github.com/python/cpython/issues/94597

   (5) https://github.com/python/cpython/issues/110682

   (6) https://github.com/python/cpython/issues/110488

   (7) https://github.com/python/cpython/issues/110590

   (8) https://github.com/python/cpython/issues/65052

   (9) https://github.com/python/cpython/issues/110519

   (10) https://github.com/python/cpython/issues/89902

   (11) https://github.com/python/cpython/issues/110378

   (12) https://github.com/python/cpython/issues/106670

   (13) https://github.com/python/cpython/issues/110365

   (14) https://github.com/python/cpython/issues/109653

   (15) https://github.com/python/cpython/issues/110273

   (16) https://github.com/python/cpython/issues/110249

   (17) https://github.com/python/cpython/issues/109653

   (18) https://github.com/python/cpython/issues/110222

   (19) https://github.com/python/cpython/issues/109649

   (20) https://github.com/python/cpython/issues/110150

   (21) https://github.com/python/cpython/issues/110036

   (22) https://github.com/python/cpython/issues/110038

   (23) https://github.com/python/cpython/issues/110045

   (24) https://peps.python.org/pep-0695/

   (25) https://github.com/python/cpython/issues/88402

   (26) https://github.com/python/cpython/issues/109631

   (27) https://github.com/python/cpython/issues/109653

   (28) https://github.com/python/cpython/issues/109818

   (29) https://github.com/python/cpython/issues/109047

   (30) https://github.com/python/cpython/issues/109782

   (31) https://github.com/python/cpython/issues/109653

   (32) https://github.com/python/cpython/issues/109590

   (33) https://github.com/python/cpython/issues/109653

   (34) https://github.com/python/cpython/issues/109593

   (35) https://github.com/python/cpython/issues/109653

   (36) https://github.com/python/cpython/issues/109649

   (37) https://github.com/python/cpython/issues/74481

   (38) https://github.com/python/cpython/issues/109613

   (39) https://github.com/python/cpython/issues/109599

   (40) https://github.com/python/cpython/issues/109109

   (41) https://github.com/python/cpython/issues/109559

   (42) https://github.com/python/cpython/issues/109543

   (43) https://github.com/python/cpython/issues/109495

   (44) https://github.com/python/cpython/issues/109461

   (45) https://github.com/python/cpython/issues/109096

   (46) https://github.com/python/cpython/issues/109409

   (47) https://github.com/python/cpython/issues/109375

   (48) https://github.com/python/cpython/issues/109319

   (49) https://github.com/python/cpython/issues/107219

   (50) https://github.com/python/cpython/issues/66143

   (51) https://github.com/python/cpython/issues/109187

   (52) https://github.com/python/cpython/issues/50644

   (53) https://github.com/python/cpython/issues/109174

   (54) https://github.com/python/cpython/issues/109164

   (55) https://github.com/python/cpython/issues/109151

   (56) https://github.com/python/cpython/issues/108987

   (57) https://github.com/python/cpython/issues/108682

   (58) https://github.com/python/cpython/issues/109033

   (59) https://github.com/python/cpython/issues/108843

   (60) https://github.com/python/cpython/issues/108469

   (61) https://github.com/python/cpython/issues/108751

   (62) https://github.com/python/cpython/issues/108682

   (63) https://github.com/python/cpython/issues/108278

   (64) https://github.com/python/cpython/issues/105829

   (65) https://github.com/python/cpython/issues/108295

   (66) https://github.com/python/cpython/issues/108463

   (67) https://github.com/python/cpython/issues/108277

   (68) https://github.com/python/cpython/issues/107811

   (69) https://github.com/python/cpython/issues/64662

   (70) https://github.com/python/cpython/issues/108111

   (71) https://github.com/python/cpython/issues/101251

   (72) https://github.com/python/cpython/issues/108294

   (73) https://github.com/python/cpython/issues/108278

   (74) https://github.com/python/cpython/issues/108322

   (75) https://github.com/python/cpython/issues/83417

   (76) https://github.com/python/cpython/issues/105736

   (77) https://github.com/python/cpython/issues/108083

   (78) https://github.com/python/cpython/issues/107932

   (79) https://github.com/python/cpython/issues/105539

   (80) https://github.com/python/cpython/issues/107995

   (81) https://github.com/python/cpython/issues/107963

   (82) https://github.com/python/cpython/issues/106242

   (83) https://github.com/python/cpython/issues/81555

   (84) https://github.com/python/cpython/issues/50002

   (85) https://github.com/python/cpython/issues/93057

   (86) https://github.com/python/cpython/issues/76913

   (87) https://github.com/python/cpython/issues/107913

   (88) https://github.com/python/cpython/issues/107845

   (89) https://github.com/python/cpython/issues/107812

   (90) https://github.com/python/cpython/issues/107805

   (91) https://github.com/python/cpython/issues/107782

   (92) https://github.com/python/cpython/issues/56166

   (93) https://github.com/python/cpython/issues/107710

   (94) https://github.com/python/cpython/issues/107715

   (95) https://github.com/python/cpython/issues/100814

   (96) https://github.com/python/cpython/issues/72684

   (97) https://github.com/python/cpython/issues/106684

   (98) https://github.com/python/cpython/issues/107465

   (99) https://github.com/python/cpython/issues/107077

   (100) https://github.com/python/cpython/issues/107576

   (101) https://github.com/python/cpython/issues/105481

   (102) https://github.com/python/cpython/issues/105481

   (103) https://github.com/python/cpython/issues/107396

   (104) https://github.com/python/cpython/issues/107409

   (105) https://github.com/python/cpython/issues/107406

   (106) https://github.com/python/cpython/issues/107369

   (107) https://github.com/python/cpython/issues/78722

   (108) https://github.com/python/cpython/issues/105578

   (109) https://github.com/python/cpython/issues/62519

   (110) https://github.com/python/cpython/issues/107089

   (111) https://github.com/python/cpython/issues/82500

   (112) https://github.com/python/cpython/issues/83006

   (113) https://github.com/python/cpython/issues/65495

   (114) https://github.com/python/cpython/issues/106186

   (115) https://github.com/python/cpython/issues/105002

   (116) https://github.com/python/cpython/issues/106739

   (117) https://github.com/python/cpython/issues/106751

   (118) https://github.com/python/cpython/issues/106751

   (119) https://github.com/python/cpython/issues/106751

   (120) https://github.com/python/cpython/issues/106831

   (121) https://github.com/python/cpython/issues/105481

   (122) https://github.com/python/cpython/issues/106727

   (123) https://github.com/python/cpython/issues/106789

   (124) https://github.com/python/cpython/issues/105726

   (125) https://github.com/python/cpython/issues/106774

   (126) https://github.com/python/cpython/issues/106751

   (127) https://github.com/python/cpython/issues/106752

   (128) https://github.com/python/cpython/issues/105293

   (129) https://github.com/python/cpython/issues/106734

   (130) https://github.com/python/cpython/issues/105481

   (131) https://github.com/python/cpython/issues/106670

   (132) https://github.com/python/cpython/issues/106602

   (133) https://github.com/python/cpython/issues/106664

   (134) https://github.com/python/cpython/issues/106628

   (135) https://github.com/python/cpython/issues/89427

   (136) https://github.com/python/cpython/issues/106530

   (137) https://github.com/python/cpython/issues/106584

   (138) https://github.com/python/cpython/issues/106566

   (139) https://github.com/python/cpython/issues/106554

   (140) https://github.com/python/cpython/issues/106558

   (141) https://github.com/python/cpython/issues/100502

   (142) https://github.com/python/cpython/issues/106527

   (143) https://github.com/python/cpython/issues/106524

   (144) https://github.com/python/cpython/issues/106531

   (145) https://github.com/python/cpython/issues/106052

   (146) https://github.com/python/cpython/issues/106510

   (147) https://github.com/python/cpython/issues/106503

   (148) https://github.com/python/cpython/issues/105497

   (149) https://github.com/python/cpython/issues/90876

   (150) https://github.com/python/cpython/issues/106403

   (151) https://github.com/python/cpython/issues/89812

   (152) https://github.com/python/cpython/issues/106292

   (153) https://github.com/python/cpython/issues/106350

   (154) https://github.com/python/cpython/issues/106330

   (155) https://github.com/python/cpython/issues/106309

   (156) https://github.com/python/cpython/issues/102541

   (157) https://github.com/python/cpython/issues/106263

   (158) https://github.com/python/cpython/issues/106236

   (159) https://github.com/python/cpython/issues/106238

   (160) https://github.com/python/cpython/issues/106152

   (161) https://github.com/python/cpython/issues/106075

   (162) https://github.com/python/cpython/issues/104527

   (163) https://github.com/python/cpython/issues/106046

   (164) https://github.com/python/cpython/issues/105987

   (165) https://github.com/python/cpython/issues/105974

   (166) https://github.com/python/cpython/issues/96145

   (167) https://github.com/python/cpython/issues/89812

   (168) https://github.com/python/cpython/issues/105808

   (169) https://github.com/python/cpython/issues/101251

   (170) https://github.com/python/cpython/issues/105481

   (171) https://github.com/python/cpython/issues/104799

   (172) https://peps.python.org/pep-0695/

   (173) https://github.com/python/cpython/issues/105793

   (174) https://github.com/python/cpython/issues/105570

   (175) https://github.com/python/cpython/issues/105745

   (176) https://github.com/python/cpython/issues/105733

   (177) https://github.com/python/cpython/issues/105687

   (178) https://github.com/python/cpython/issues/105684

   (179) https://github.com/python/cpython/issues/105375

   (180) https://github.com/python/cpython/issues/105626

   (181) https://github.com/python/cpython/issues/105375

   (182) https://github.com/python/cpython/issues/105605

   (183) https://github.com/python/cpython/issues/105375

   (184) https://github.com/python/cpython/issues/105375

   (185) https://github.com/python/cpython/issues/105375

   (186) https://github.com/python/cpython/issues/105375

   (187) https://github.com/python/cpython/issues/105375

   (188) https://github.com/python/cpython/issues/105375

   (189) https://github.com/python/cpython/issues/105375

   (190) https://github.com/python/cpython/issues/105375

   (191) https://github.com/python/cpython/issues/105375

   (192) https://github.com/python/cpython/issues/105566

   (193) https://github.com/python/cpython/issues/105545

   (194) https://github.com/python/cpython/issues/105497

   (195) https://github.com/python/cpython/issues/105509

   (196) https://github.com/python/cpython/issues/105375

   (197) https://github.com/python/cpython/issues/70303

   (198) https://github.com/python/cpython/issues/105375

   (199) https://github.com/python/cpython/issues/105382

   (200) https://github.com/python/cpython/issues/105376

   (201) https://github.com/python/cpython/issues/105332

   (202) https://github.com/python/cpython/issues/104554

   (203) https://github.com/python/cpython/issues/105292

   (204) https://github.com/python/cpython/issues/105280

   (205) https://github.com/python/cpython/issues/80480

   (206) https://github.com/python/cpython/issues/105239

   (207) https://github.com/python/cpython/issues/104310

   (208) https://github.com/python/cpython/issues/105080

   (209) https://github.com/python/cpython/issues/105144

   (210) https://github.com/python/cpython/issues/62948

   (211) https://github.com/python/cpython/issues/105096

   (212) https://github.com/python/cpython/issues/104992

   (213) https://github.com/python/cpython/issues/104996

   (214) https://github.com/python/cpython/issues/101588

   (215) https://github.com/python/cpython/issues/103631

   (216) https://github.com/python/cpython/issues/104947

   (217) https://github.com/python/cpython/issues/104773

   (218) https://peps.python.org/pep-0594/

   (219) https://github.com/python/cpython/issues/104773

   (220) https://peps.python.org/pep-0594/

   (221) https://github.com/python/cpython/issues/104773

   (222) https://peps.python.org/pep-0594/

   (223) https://github.com/python/cpython/issues/104935

   (224) https://peps.python.org/pep-0695/

   (225) https://github.com/python/cpython/issues/104773

   (226) https://peps.python.org/pep-0594/

   (227) https://github.com/python/cpython/issues/104773

   (228) https://peps.python.org/pep-0594/

   (229) https://github.com/python/cpython/issues/104898

   (230) https://github.com/python/cpython/issues/104773

   (231) https://peps.python.org/pep-0594/

   (232) https://github.com/python/cpython/issues/104773

   (233) https://peps.python.org/pep-0594/

   (234) https://github.com/python/cpython/issues/104886

   (235) https://github.com/python/cpython/issues/104786

   (236) https://github.com/python/cpython/issues/104876

   (237) https://github.com/python/cpython/issues/104773

   (238) https://peps.python.org/pep-0594/

   (239) https://github.com/python/cpython/issues/104773

   (240) https://peps.python.org/pep-0594/

   (241) https://pypi.org/project/python-pam/

   (242) https://github.com/python/cpython/issues/75552

   (243) https://github.com/python/cpython/issues/104773

   (244) https://peps.python.org/pep-0594/

   (245) https://github.com/python/cpython/issues/104773

   (246) https://peps.python.org/pep-0594/

   (247) https://github.com/python/cpython/issues/104773

   (248) https://peps.python.org/pep-0594/

   (249) https://github.com/python/cpython/issues/104780

   (250) https://peps.python.org/pep-0594/

   (251) https://github.com/python/cpython/issues/104773

   (252) https://peps.python.org/pep-0594/

   (253) https://github.com/python/cpython/issues/104873

   (254) https://github.com/python/cpython/issues/104874

   (255) https://github.com/python/cpython/issues/104835

   (256) https://github.com/python/cpython/issues/104804

   (257) https://github.com/python/cpython/issues/83863

   (258) https://github.com/python/cpython/issues/104799

   (259) https://peps.python.org/pep-0695/

   (260) https://github.com/python/cpython/issues/104797

   (261) https://github.com/python/cpython/issues/104783

   (262) https://github.com/python/cpython/issues/104780

   (263) https://github.com/python/cpython/issues/104773

   (264) https://peps.python.org/pep-0594/

   (265) https://github.com/python/cpython/issues/104773

   (266) https://peps.python.org/pep-0594/

   (267) https://github.com/python/cpython/issues/104773

   (268) https://peps.python.org/pep-0594/

   (269) https://github.com/python/cpython/issues/104773

   (270) https://peps.python.org/pep-0594/

   (271) https://github.com/python/cpython/issues/104372

   (272) https://github.com/python/cpython/issues/99108

   (273) https://github.com/python/cpython/issues/102613

   (274) https://github.com/python/cpython/issues/104399

   (275) https://github.com/python/cpython/issues/102676

   (276) https://github.com/python/cpython/issues/103558

   (277) https://github.com/python/cpython/issues/103464

   (278) https://github.com/python/cpython/issues/103384

   (279) https://github.com/python/cpython/issues/103124

   (280) https://github.com/python/cpython/issues/101162

   (281) https://github.com/python/cpython/issues/103200

   (282) https://github.com/python/cpython/issues/100061

   (283) https://github.com/python/cpython/issues/77609

   (284) https://github.com/python/cpython/issues/102541

   (285) https://github.com/python/cpython/issues/102120

   (286) https://github.com/python/cpython/issues/102029

   (287) https://github.com/python/cpython/issues/88233

   (288) https://github.com/python/cpython/issues/102024

   (289) https://github.com/python/cpython/issues/73435

   (290) https://github.com/python/cpython/issues/84867

   (291) https://github.com/python/cpython/issues/99203

   (292) https://github.com/python/cpython/issues/80480

   (293) https://github.com/python/cpython/issues/94924

   (294) https://github.com/python/cpython/issues/94777

   (295) https://github.com/python/cpython/issues/92871

   (296) https://bugs.python.org/issue?@action=redirect&bpo=43633

   (297) https://datatracker.ietf.org/doc/html/rfc4291.html

   (298) https://bugs.python.org/issue?@action=redirect&bpo=44850

   (299) https://peps.python.org/pep-0590/

   (300) https://bugs.python.org/issue?@action=redirect&bpo=44185

   (301) https://bugs.python.org/issue?@action=redirect&bpo=40988

   (302) https://bugs.python.org/issue?@action=redirect&bpo=41768

   (303) https://bugs.python.org/issue?@action=redirect&bpo=18319

   (304) https://bugs.python.org/issue?@action=redirect&bpo=17013


File: python.info,  Node: Documentação<16>,  Next: Testes<20>,  Prev: Biblioteca<38>,  Up: Python 3 13 0 alpha 1

1.23.26.4 Documentação
......................

   - gh-109209(1): The minimum Sphinx version required for the
     documentation is now 4.2.

   - gh-108826(2): *note dis: 38. module command-line interface is now
     mentioned in documentation.

   - gh-107305(3): Add documentation for *note PyInterpreterConfig: 56d.
     and *note Py_NewInterpreterFromConfig(): 45c.  Also clarify some of
     the nearby docs relative to per-interpreter GIL.

   - gh-107008(4): Document the *note curses: 2b. module variables *note
     LINES: e17. and *note COLS: e18.

   - gh-106948(5): Add a number of standard external names to
     ‘nitpick_ignore’.

   - gh-106232(6): Make timeit doc command lines compatible with Windows
     by using double quotes for arguments.  This works on linux and
     macOS also.

   - gh-105172(7): Fixed *note functools.lru_cache(): 9f7. docstring
     accounting for ‘typed’ argument’s different handling of str and
     int.  Patch by Bar Harel.

   - gh-105052(8): Update ‘timeit’ doc to specify that time in seconds
     is just the default.

   - gh-89455(9): Add missing documentation for the ‘max_group_depth’
     and ‘max_group_width’ parameters and the ‘exceptions’ attribute of
     the *note traceback.TracebackException: 25c. class.

   - gh-89412(10): Add missing documentation for the ‘end_lineno’ and
     ‘end_offset’ attributes of the *note traceback.TracebackException:
     25c. class.

   - gh-104943(11): Remove mentions of old Python versions in *note
     typing.NamedTuple: 2b0.

   - gh-54738(12): Add documentation on how to localize the *note
     argparse: 6. module.

   - gh-102823(13): Document the return type of ‘x // y’ when ‘x’ and
     ‘y’ have type *note float: 2f7.

   - gh-102759(14): Align function signature for ‘functools.reduce’ in
     documentation and docstring with the C implementation.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109209

   (2) https://github.com/python/cpython/issues/108826

   (3) https://github.com/python/cpython/issues/107305

   (4) https://github.com/python/cpython/issues/107008

   (5) https://github.com/python/cpython/issues/106948

   (6) https://github.com/python/cpython/issues/106232

   (7) https://github.com/python/cpython/issues/105172

   (8) https://github.com/python/cpython/issues/105052

   (9) https://github.com/python/cpython/issues/89455

   (10) https://github.com/python/cpython/issues/89412

   (11) https://github.com/python/cpython/issues/104943

   (12) https://github.com/python/cpython/issues/54738

   (13) https://github.com/python/cpython/issues/102823

   (14) https://github.com/python/cpython/issues/102759


File: python.info,  Node: Testes<20>,  Next: Construção<20>,  Prev: Documentação<16>,  Up: Python 3 13 0 alpha 1

1.23.26.5 Testes
................

   - gh-110647(1): Fix test_stress_modifying_handlers() of test_signal.
     Patch by Victor Stinner.

   - gh-103053(2): Fix test_tools.test_freeze on FreeBSD: run “make
     distclean” instead of “make clean” in the copied source directory
     to remove also the “python” program.  Patch by Victor Stinner.

   - gh-110167(3): Fix a deadlock in test_socket when server fails with
     a timeout but the client is still running in its thread.  Don’t
     hold a lock to call cleanup functions in doCleanups().  One of the
     cleanup function waits until the client completes, whereas the
     client could deadlock if it called addCleanup() in such situation.
     Patch by Victor Stinner.

   - gh-110388(4): Add tests for *note tty: 100.

   - gh-81002(5): Add tests for *note termios: e1.

   - gh-110367(6): regrtest: When using worker processes (-jN) with
     –verbose3 option, regrtest can now display the worker output even
     if a worker process does crash.  Previously, sys.stdout and
     sys.stderr were replaced and so the worker output was lost on a
     crash.  Patch by Victor Stinner.

   - gh-110267(7): Add tests for pickling and copying PyStructSequence
     objects.  Patched by Xuehai Pan.

   - gh-110171(8): ‘libregrtest’ now always sets and shows
     ‘random.seed’, so tests are more reproducible.  Use ‘--randseed’
     flag to pass the explicit random seed for tests.

   - gh-110152(9): Remove ‘Tools/scripts/run_tests.py’ and ‘make
     hostrunnertest’.  Just run ‘./python -m test --slow-ci’, ‘make
     buildbottest’ or ‘make test’ instead.  Python test runner
     (regrtest) now handles cross-compilation and HOSTRUNNER. It also
     adds options to Python such fast ‘-u -E -W default -bb’ when
     ‘--fast-ci’ or ‘--slow-ci’ option is used.  Patch by Victor
     Stinner.

   - gh-110031(10): Skip test_threading tests using thread+fork if
     Python is built with Address Sanitizer (ASAN). Patch by Victor
     Stinner.

   - gh-110088(11): Fix test_asyncio timeouts: don’t measure the maximum
     duration, a test should not measure a CI performance.  Only measure
     the minimum duration when a task has a timeout or delay.  Add
     ‘CLOCK_RES’ to ‘test_asyncio.utils’.  Patch by Victor Stinner.

   - gh-109974(12): Fix race conditions in test_threading lock tests.
     Wait until a condition is met rather than using *note time.sleep():
     69d. with a hardcoded number of seconds.  Patch by Victor Stinner.

   - gh-110033(13): Fix ‘test_interprocess_signal()’ of ‘test_signal’.
     Make sure that the ‘subprocess.Popen’ object is deleted before the
     test raising an exception in a signal handler.  Otherwise,
     ‘Popen.__del__()’ can get the exception which is logged as
     ‘Exception ignored in: ...’ and the test fails.  Patch by Victor
     Stinner.

   - gh-109594(14): Fix test_timeout() of
     test_concurrent_futures.test_wait.  Remove the future which may or
     may not complete depending if it takes longer than the timeout or
     not.  Keep the second future which does not complete before wait()
     timeout.  Patch by Victor Stinner.

   - gh-109972(15): Split test_gdb.py file into a test_gdb package made
     of multiple tests, so tests can now be run in parallel.  Patch by
     Victor Stinner.

   - gh-109566(16): regrtest: When ‘--fast-ci’ or ‘--slow-ci’ option is
     used, regrtest now replaces the current process with a new process
     to add ‘-u -W default -bb -E’ options to Python.  Patch by Victor
     Stinner.

   - gh-109748(17): Fix ‘test_zippath_from_non_installed_posix()’ of
     test_venv: don’t copy ‘__pycache__/’ sub-directories, because they
     can be modified by other Python tests running in parallel.  Patch
     by Victor Stinner.

   - gh-109739(18): regrtest: Fix reference leak check on Windows.
     Disable the load tracker on Windows in the reference leak check
     mode (-R option).  Patch by Victor Stinner.

   - gh-109276(19): regrtest: When a test fails with “env changed” and
     the –rerun option is used, the test is now re-run in verbose mode
     in a fresh process.  Patch by Victor Stinner.

   - gh-103053(20): Skip test_freeze_simple_script() of
     test_tools.test_freeze if Python is built with ‘./configure
     --enable-optimizations’, which means with Profile Guided
     Optimization (PGO): it just makes the test too slow.  The freeze
     tool is tested by many other CIs with other (faster) compiler
     flags.  Patch by Victor Stinner.

   - gh-109580(21): Skip ‘test_perf_profiler’ if Python is built with
     ASAN, MSAN or UBSAN sanitizer.  Python does crash randomly in this
     test on such build.  Patch by Victor Stinner.

   - gh-109566(22): regrtest: Add ‘--fast-ci’ and ‘--slow-ci’ options.
     ‘--fast-ci’ uses a default timeout of 10 minutes and ‘-u all,-cpu’
     (skip slowest tests).  ‘--slow-ci’ uses a default timeout of 20
     minutes and ‘-u all’ (run all tests).  Patch by Victor Stinner.

   - gh-109425(23): libregrtest now decodes stdout of test worker
     processes with the “backslashreplace” error handler to log
     corrupted stdout, instead of failing with an error and not logging
     the stdout.  Patch by Victor Stinner.

   - gh-109396(24): Fix ‘test_socket.test_hmac_sha1()’ in FIPS mode.
     Use a longer key: FIPS mode requires at least of at least 112 bits.
     The previous key was only 32 bits.  Patch by Victor Stinner.

   - gh-104736(25): Fix test_gdb on Python built with LLVM clang 16 on
     Linux ppc64le (ex: Fedora 38).  Search patterns in gdb “bt” command
     output to detect when gdb fails to retrieve the traceback.  For
     example, skip a test if ‘Backtrace stopped: frame did not save the
     PC’ is found.  Patch by Victor Stinner.

   - gh-109276(26): libregrtest now calls *note random.seed(): 12b5.
     before running each test file when ‘-r/--randomize’ command line
     option is used.  Moreover, it’s also called in worker processes.
     It should help to make tests more deterministic.  Previously, it
     was only called once in the main process before running all test
     files and it was not called in worker processes.  Patch by Victor
     Stinner.

   - gh-109276(27): libregrtest now uses a separated file descriptor to
     write test result as JSON. Previously, if a test wrote debug
     messages late around the JSON, the main test process failed to
     parse JSON. Patch by Victor Stinner.

   - gh-108996(28): Fix and enable ‘test_msvcrt’.

   - gh-109237(29): Fix ‘test_site.test_underpth_basic()’ when the
     working directory contains at least one non-ASCII character: encode
     the ‘._pth’ file to UTF-8 and enable the UTF-8 Mode to use UTF-8
     for the child process stdout.  Patch by Victor Stinner.

   - gh-109230(30): Fix ‘test_pyexpat.test_exception()’: it can now be
     run from a directory different than Python source code directory.
     Before, the test failed in this case.  Skip the test if
     Modules/pyexpat.c source is not available.  Skip also the test on
     Python implementations other than CPython.  Patch by Victor
     Stinner.

   - gh-108996(31): Add tests for ‘msvcrt’.

   - gh-109015(32): Fix test_asyncio, test_imaplib and test_socket tests
     on FreeBSD if the TCP blackhole is enabled (‘sysctl
     net.inet.tcp.blackhole’).  Skip the few tests which failed with
     ‘ETIMEDOUT’ which such non standard configuration.  Currently, the
     FreeBSD GCP image enables TCP and UDP blackhole(33) (‘sysctl
     net.inet.tcp.blackhole=2’ and ‘sysctl net.inet.udp.blackhole=1’).
     Patch by Victor Stinner.

   - gh-91960(34): Skip ‘test_gdb’ if gdb is unable to retrieve Python
     frame objects: if a frame is ‘<optimized out>’.  When Python is
     built with “clang -Og”, gdb can fail to retrieve the 'frame'
     parameter of ‘_PyEval_EvalFrameDefault()’.  In this case, tests
     like ‘py_bt()’ are likely to fail.  Without getting access to
     Python frames, ‘python-gdb.py’ is mostly clueless on retrieving the
     Python traceback.  Moreover, ‘test_gdb’ is no longer skipped on
     macOS if Python is built with Clang.  Patch by Victor Stinner.

   - gh-108962(35): Skip ‘test_tempfile.test_flags()’ if ‘chflags()’
     fails with “OSError: [Errno 45] Operation not supported” (ex: on
     FreeBSD 13).  Patch by Victor Stinner.

   - gh-91960(36): FreeBSD 13.2 CI coverage for pull requests is now
     provided by Cirrus-CI (a hosted CI service that supports Linux,
     macOS, Windows, and FreeBSD).

   - gh-89392(37): Removed support of ‘test_main()’ function in tests.
     They now always use normal unittest test runner.

   - gh-108851(38): Fix ‘test_tomllib’ recursion tests for WASI
     buildbots: reduce the recursion limit and compute the maximum
     nested array/dict depending on the current available recursion
     limit.  Patch by Victor Stinner.

   - gh-108851(39): Add ‘get_recursion_available()’ and
     ‘get_recursion_depth()’ functions to the *note test.support: e4.
     module.  Patch by Victor Stinner.

   - gh-108834(40): Add ‘--fail-rerun option’ option to regrtest: if a
     test failed when then passed when rerun in verbose mode, exit the
     process with exit code 2 (error), instead of exit code 0 (success).
     Patch by Victor Stinner.

   - gh-108834(41): Rename regrtest ‘--verbose2’ option (‘-w’) to
     ‘--rerun’.  Keep ‘--verbose2’ as a deprecated alias.  Patch by
     Victor Stinner.

   - gh-108834(42): When regrtest reruns failed tests in verbose mode
     (‘./python -m test --rerun’), tests are now rerun in fresh worker
     processes rather than being executed in the main process.  If a
     test does crash or is killed by a timeout, the main process can
     detect and handle the killed worker process.  Tests are rerun in
     parallel if the ‘-jN’ option is used to run tests in parallel.
     Patch by Victor Stinner.

   - gh-108822(43): ‘regrtest’ now computes statistics on all tests:
     successes, failures and skipped.  ‘test_netrc’,
     ‘test_pep646_syntax’ and ‘test_xml_etree’ now return results in
     their ‘test_main()’ function.  Patch by Victor Stinner and Alex
     Waygood.

   - gh-108794(44): The *note doctest.DocTestRunner.run(): 1dc. method
     now counts the number of skipped tests.  Add *note
     doctest.DocTestRunner.skips: 1dd. and *note
     doctest.TestResults.skipped: 1de. attributes.  Patch by Victor
     Stinner.

   - gh-108388(45): Convert test_concurrent_futures to a package of 7
     sub-tests.  Patch by Victor Stinner.

   - gh-108388(46): Split test_multiprocessing_fork,
     test_multiprocessing_forkserver and test_multiprocessing_spawn into
     test packages.  Each package is made of 4 sub-tests: processes,
     threads, manager and misc.  It allows running more tests in
     parallel and so reduce the total test duration.  Patch by Victor
     Stinner.

   - gh-105776(47): Fix test_cppext when the C compiler command
     ‘-std=c11’ option: remove ‘-std=’ options from the compiler
     command.  Patch by Victor Stinner.

   - gh-107652(48): Set up CIFuzz to run fuzz targets in GitHub Actions.
     Patch by Illia Volochii.

   - gh-107237(49): ‘test_logging’: Fix ‘test_udp_reconnection()’ by
     increasing the timeout from 100 ms to 5 minutes (LONG_TIMEOUT).
     Patch by Victor Stinner.

   - gh-107178(50): Add the C API test for functions in the Mapping
     Protocol, the Sequence Protocol and some functions in the Object
     Protocol.

   - gh-106714(51): test_capi: Fix test_no_FatalError_infinite_loop() to
     no longer write a coredump, by using
     test.support.SuppressCrashReport.  Patch by Victor Stinner.

   - gh-104090(52): Avoid creating a reference to the test object in
     *note collectedDurations(): 17fe.

   - gh-106752(53): Moved tests for ‘zipfile.Path’ into
     ‘Lib/test/test_zipfile/_path’.  Made ‘zipfile._path’ a package.

   - gh-106690(54): Add .coveragerc to cpython repository for use with
     coverage package.

   - gh-101634(55): When running the Python test suite with ‘-jN’
     option, if a worker stdout cannot be decoded from the locale
     encoding report a failed testn so the exitcode is non-zero.  Patch
     by Victor Stinner.

   - gh-105084(56): When the Python build is configured
     ‘--with-wheel-pkg-dir’, tests requiring the ‘setuptools’ and
     ‘wheel’ wheels will search for the wheels in ‘WHEEL_PKG_DIR’.

   - gh-81005(57): String tests are modified to reflect that ‘str’ and
     ‘unicode’ are merged in Python 3.  Patch by Daniel Fortunov.

   - gh-103186(58): Suppress and assert expected RuntimeWarnings in
     test_sys_settrace.py

   - gh-69714(59): Add additional tests to *note calendar: 14. to
     achieve full test coverage.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/110647

   (2) https://github.com/python/cpython/issues/103053

   (3) https://github.com/python/cpython/issues/110167

   (4) https://github.com/python/cpython/issues/110388

   (5) https://github.com/python/cpython/issues/81002

   (6) https://github.com/python/cpython/issues/110367

   (7) https://github.com/python/cpython/issues/110267

   (8) https://github.com/python/cpython/issues/110171

   (9) https://github.com/python/cpython/issues/110152

   (10) https://github.com/python/cpython/issues/110031

   (11) https://github.com/python/cpython/issues/110088

   (12) https://github.com/python/cpython/issues/109974

   (13) https://github.com/python/cpython/issues/110033

   (14) https://github.com/python/cpython/issues/109594

   (15) https://github.com/python/cpython/issues/109972

   (16) https://github.com/python/cpython/issues/109566

   (17) https://github.com/python/cpython/issues/109748

   (18) https://github.com/python/cpython/issues/109739

   (19) https://github.com/python/cpython/issues/109276

   (20) https://github.com/python/cpython/issues/103053

   (21) https://github.com/python/cpython/issues/109580

   (22) https://github.com/python/cpython/issues/109566

   (23) https://github.com/python/cpython/issues/109425

   (24) https://github.com/python/cpython/issues/109396

   (25) https://github.com/python/cpython/issues/104736

   (26) https://github.com/python/cpython/issues/109276

   (27) https://github.com/python/cpython/issues/109276

   (28) https://github.com/python/cpython/issues/108996

   (29) https://github.com/python/cpython/issues/109237

   (30) https://github.com/python/cpython/issues/109230

   (31) https://github.com/python/cpython/issues/108996

   (32) https://github.com/python/cpython/issues/109015

   (33) https://reviews.freebsd.org/D41751

   (34) https://github.com/python/cpython/issues/91960

   (35) https://github.com/python/cpython/issues/108962

   (36) https://github.com/python/cpython/issues/91960

   (37) https://github.com/python/cpython/issues/89392

   (38) https://github.com/python/cpython/issues/108851

   (39) https://github.com/python/cpython/issues/108851

   (40) https://github.com/python/cpython/issues/108834

   (41) https://github.com/python/cpython/issues/108834

   (42) https://github.com/python/cpython/issues/108834

   (43) https://github.com/python/cpython/issues/108822

   (44) https://github.com/python/cpython/issues/108794

   (45) https://github.com/python/cpython/issues/108388

   (46) https://github.com/python/cpython/issues/108388

   (47) https://github.com/python/cpython/issues/105776

   (48) https://github.com/python/cpython/issues/107652

   (49) https://github.com/python/cpython/issues/107237

   (50) https://github.com/python/cpython/issues/107178

   (51) https://github.com/python/cpython/issues/106714

   (52) https://github.com/python/cpython/issues/104090

   (53) https://github.com/python/cpython/issues/106752

   (54) https://github.com/python/cpython/issues/106690

   (55) https://github.com/python/cpython/issues/101634

   (56) https://github.com/python/cpython/issues/105084

   (57) https://github.com/python/cpython/issues/81005

   (58) https://github.com/python/cpython/issues/103186

   (59) https://github.com/python/cpython/issues/69714


File: python.info,  Node: Construção<20>,  Next: Windows<18>,  Prev: Testes<20>,  Up: Python 3 13 0 alpha 1

1.23.26.6 Construção
....................

   - gh-103053(1): “make check-clean-src” now also checks if the
     “python” program is found in the source directory: fail with an
     error if it does exist.  Patch by Victor Stinner.

   - gh-109191(2): Fix compile error when building with recent versions
     of libedit.

   - gh-110276(3): No longer ignore *note PROFILE_TASK: 1800. failure
     silently: command used by Profile Guided Optimization (PGO). Patch
     by Victor Stinner.

   - gh-109566(4): Remove ‘make testall’ target: use ‘make buildbottest’
     instead.  Patch by Victor Stinner.

   - gh-109740(5): The experimental ‘--disable-gil’ configure flag now
     includes “t” (for “threaded”) in extension ABI tags.

   - gh-109054(6): Fix building the ‘_testcapi’ extension on Linux
     AArch64 which requires linking to libatomic when
     ‘<cpython/pyatomic.h>’ is used: the ‘_Py_atomic_or_uint64()’
     function requires libatomic ‘__atomic_fetch_or_8()’ on this
     platform.  The configure script now checks if linking to libatomic
     is needed and generates a new LIBATOMIC variable used to build the
     _testcapi extension.  Patch by Victor Stinner.

   - gh-63760(7): Fix Solaris build: no longer redefine the
     ‘gethostname()’ function.  Solaris defines the function since 2005.
     Patch by Victor Stinner, original patch by Jakub Kulík.

   - gh-108740(8): Fix a race condition in ‘make regen-all’.  The
     ‘deepfreeze.c’ source and files generated by Argument Clinic are
     now generated or updated before generating “global objects”.
     Previously, some identifiers may miss depending on the order in
     which these files were generated.  Patch by Victor Stinner.

   - gh-108634(9): Python built with ‘configure’ *note -with-trace-refs:
     395. (tracing references) is now ABI compatible with Python release
     build and *note debug build: 1f9.  Patch by Victor Stinner.

   - gh-85283(10): The ‘_stat’ C extension is now built with the *note
     limited C API: 396.  Patch by Victor Stinner.

   - gh-108447(11): Fix x86_64 GNU/Hurd build

   - gh-107814(12): When calling ‘find_python.bat’ with ‘-q’ it did not
     properly silence the output of nuget.  That is now fixed.

   - gh-105481(13): Remove the make target ‘regen-opcode-targets’, merge
     its work into ‘regen-opcode’ which repeats most of the calculation.
     This simplifies the code for the build and reduces code
     duplication.

   - gh-106881(14): Check for ‘linux/limits.h’ before including it in
     ‘Modules/posixmodule.c’.

   - gh-95855(15): Refactor platform triplet detection code and add
     detection for MIPS soft float and musl libc.

   - gh-106962(16): Detect MPI compilers in ‘configure’.

   - gh-106118(17): Fix compilation for platforms without ‘O_CLOEXEC’.
     The issue was introduced with Python 3.12b1 in gh-103295(18).
     Patch by Erlend Aasland.

   - gh-105875(19): SQLite 3.15.2 or newer is required to build the
     *note sqlite3: cf. extension module.  Patch by Erlend Aasland.

   - gh-90005(20): Fix a regression in ‘configure’ where we could end up
     unintentionally linking with ‘libbsd’.

   - gh-102404(21): Document how to perform a WASI build on Linux.  Also
     add Tools/wasm/build_wasi.sh as a reference implementation of the
     docs.

   - gh-89886(22): Autoconf 2.71 and aclocal 1.16.4 is now required to
     regenerate ‘!configure’.

   - gh-104692(23): Include ‘commoninstall’ as a prerequisite for
     ‘bininstall’

     This ensures that ‘commoninstall’ is completed before ‘bininstall’
     is started when parallel builds are used (‘make -j install’), and
     so the ‘python3’ symlink is only installed after all standard
     library modules are installed.

   - gh-101538(24): Add experimental wasi-threads support.  Patch by
     Takashi Yamamoto.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/103053

   (2) https://github.com/python/cpython/issues/109191

   (3) https://github.com/python/cpython/issues/110276

   (4) https://github.com/python/cpython/issues/109566

   (5) https://github.com/python/cpython/issues/109740

   (6) https://github.com/python/cpython/issues/109054

   (7) https://github.com/python/cpython/issues/63760

   (8) https://github.com/python/cpython/issues/108740

   (9) https://github.com/python/cpython/issues/108634

   (10) https://github.com/python/cpython/issues/85283

   (11) https://github.com/python/cpython/issues/108447

   (12) https://github.com/python/cpython/issues/107814

   (13) https://github.com/python/cpython/issues/105481

   (14) https://github.com/python/cpython/issues/106881

   (15) https://github.com/python/cpython/issues/95855

   (16) https://github.com/python/cpython/issues/106962

   (17) https://github.com/python/cpython/issues/106118

   (18) https://github.com/python/cpython/issues/103295

   (19) https://github.com/python/cpython/issues/105875

   (20) https://github.com/python/cpython/issues/90005

   (21) https://github.com/python/cpython/issues/102404

   (22) https://github.com/python/cpython/issues/89886

   (23) https://github.com/python/cpython/issues/104692

   (24) https://github.com/python/cpython/issues/101538


File: python.info,  Node: Windows<18>,  Next: macOS<13>,  Prev: Construção<20>,  Up: Python 3 13 0 alpha 1

1.23.26.7 Windows
.................

   - gh-110437(1): Allows overriding the source of VC redistributables
     so that releases can be guaranteed to never downgrade between
     updates.

   - gh-109286(2): Update Windows installer to use SQLite 3.43.1.

   - gh-82367(3): *note os.path.realpath(): 225. now resolves MS-DOS
     style file names even if the file is not accessible.  Patch by
     Moonsik Park.

   - gh-109991(4): Update Windows build to use OpenSSL 3.0.11.

   - gh-106242(5): Fixes *note realpath(): 225. to behave consistently
     when passed a path containing an embedded null character on
     Windows.  In strict mode, it now raises *note OSError: 417. instead
     of the unexpected *note ValueError: 202, and in non-strict mode
     will make the path absolute.

   - gh-83180(6): Changes the *note Inicializador Python para Windows:
     5be. to prefer an active virtual environment when the launched
     script has a shebang line using a Unix-like virtual command, even
     if the command requests a specific version of Python.

   - gh-106844(7): Fix integer overflow and truncating by the null
     character in ‘_winapi.LCMapStringEx()’ which affects
     ‘ntpath.normcase()’.

   - gh-105436(8): Ensure that an empty environment block is terminated
     by two null characters, as is required by Windows.

   - gh-105146(9): Updated the links at the end of the installer to
     point to Discourse rather than the mailing lists.

   - gh-103646(10): When installed from the Microsoft Store, ‘pip’ no
     longer defaults to per-user installs.  However, as the install
     directory is unwritable, it should automatically decide to do a
     per-user install anyway.  This should resolve issues when ‘pip’ is
     passed an option that conflicts with ‘--user’.

   - gh-88745(11): Improve performance of *note shutil.copy2(): a65. by
     using the operating system’s ‘CopyFile2’ function.  This may result
     in subtle changes to metadata copied along with some files,
     bringing them in line with normal OS behavior.

   - gh-104820(12): Fixes *note stat(): 4a0. and related functions on
     file systems that do not support file ID requests.  This includes
     FAT32 and exFAT.

   - gh-104803(13): Add *note os.path.isdevdrive(): 1739. to detect
     whether a path is on a Windows Dev Drive.  Returns ‘False’ on
     platforms that do not support Dev Drive, and is absent on
     non-Windows platforms.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/110437

   (2) https://github.com/python/cpython/issues/109286

   (3) https://github.com/python/cpython/issues/82367

   (4) https://github.com/python/cpython/issues/109991

   (5) https://github.com/python/cpython/issues/106242

   (6) https://github.com/python/cpython/issues/83180

   (7) https://github.com/python/cpython/issues/106844

   (8) https://github.com/python/cpython/issues/105436

   (9) https://github.com/python/cpython/issues/105146

   (10) https://github.com/python/cpython/issues/103646

   (11) https://github.com/python/cpython/issues/88745

   (12) https://github.com/python/cpython/issues/104820

   (13) https://github.com/python/cpython/issues/104803


File: python.info,  Node: macOS<13>,  Next: IDLE<17>,  Prev: Windows<18>,  Up: Python 3 13 0 alpha 1

1.23.26.8 macOS
...............

   - gh-109286(1): Update macOS installer to use SQLite 3.43.1.

   - gh-109991(2): Update macOS installer to use OpenSSL 3.0.11.

   - gh-99079(3): Update macOS installer to use OpenSSL 3.0.9.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109286

   (2) https://github.com/python/cpython/issues/109991

   (3) https://github.com/python/cpython/issues/99079


File: python.info,  Node: IDLE<17>,  Next: Ferramentas/Demos<12>,  Prev: macOS<13>,  Up: Python 3 13 0 alpha 1

1.23.26.9 IDLE
..............

   - gh-104719(1): Remove IDLE’s modification of tokenize.tabsize and
     test other uses of tokenize data and methods.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/104719


File: python.info,  Node: Ferramentas/Demos<12>,  Next: API C<21>,  Prev: IDLE<17>,  Up: Python 3 13 0 alpha 1

1.23.26.10 Ferramentas/Demos
............................

   - gh-109991(1): Update GitHub CI workflows to use OpenSSL 3.0.11 and
     multissltests to use 1.1.1w, 3.0.11, and 3.1.3.

   - gh-108494(2): Argument Clinic(3) now has a partial support of the
     *note Limited API: 396.: see documentation in the Python
     Developer's Guide(4) Patch by Victor Stinner.

   - gh-107704(5): It is now possible to deprecate passing keyword
     arguments for keyword-or-positional parameters with Argument
     Clinic, using the new ‘/ [from X.Y]’ syntax.  (To be read as
     '“positional-only from Python version X.Y”'.)  See documentation in
     the Python Developer's Guide(6) for more information.

   - gh-107880(7): Argument Clinic can now clone ‘__init__()’ and
     ‘__new__()’ methods.

   - gh-104683(8): Add ‘--exclude’ option to Argument Clinic CLI.

   - gh-95065(9): Argument Clinic now supports overriding automatically
     generated signature by using directive ‘@text_signature’.  See
     documentation in the Python Developer's Guide(10)

   - gh-107609(11): Fix duplicate module check in Argument Clinic.
     Previously, a duplicate definition would incorrectly be silently
     accepted.  Patch by Erlend E. Aasland.

   - gh-107467(12): The Argument Clinic command-line tool now prints to
     stderr instead of stdout on failure.

   - gh-106970(13): Fix bugs in the Argument Clinic ‘destination <name>
     clear’ command; the destination buffers would never be cleared, and
     the ‘destination’ directive parser would simply continue to the
     fault handler after processing the command.  Patch by Erlend E.
     Aasland.

   - gh-106706(14): Change bytecode syntax for families to remove
     redundant name matching pseudo syntax.

   - gh-106359(15): Argument Clinic now explicitly forbids “kwarg
     splats” in function calls used as annotations.

   - gh-103186(16): ‘freeze’ now fetches ‘CONFIG_ARGS’ from the original
     CPython instance the Makefile uses to call utility scripts.  Patch
     by Ijtaba Hussain.

   - gh-95065(17): It is now possible to deprecate passing parameters
     positionally with Argument Clinic, using the new ‘* [from X.Y]’
     syntax.  (To be read as '“keyword-only from Python version X.Y”'.)
     See documentation in the Python Developer's Guide(18) for more
     information.  Patch by Erlend E. Aasland with help from Alex
     Waygood, Nikita Sobolev, and Serhiy Storchaka.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/109991

   (2) https://github.com/python/cpython/issues/108494

   (3) https://devguide.python.org/development-tools/clinic/

   (4) 
https://devguide.python.org/development-tools/clinic/#clinic-howto-limited-capi

   (5) https://github.com/python/cpython/issues/107704

   (6) 
https://devguide.python.org/development-tools/clinic/#clinic-howto-deprecate-keyword

   (7) https://github.com/python/cpython/issues/107880

   (8) https://github.com/python/cpython/issues/104683

   (9) https://github.com/python/cpython/issues/95065

   (10) 
https://devguide.python.org/development-tools/clinic/#clinic-howto-override-signature

   (11) https://github.com/python/cpython/issues/107609

   (12) https://github.com/python/cpython/issues/107467

   (13) https://github.com/python/cpython/issues/106970

   (14) https://github.com/python/cpython/issues/106706

   (15) https://github.com/python/cpython/issues/106359

   (16) https://github.com/python/cpython/issues/103186

   (17) https://github.com/python/cpython/issues/95065

   (18) 
https://devguide.python.org/development-tools/clinic/#clinic-howto-deprecate-positional


File: python.info,  Node: API C<21>,  Prev: Ferramentas/Demos<12>,  Up: Python 3 13 0 alpha 1

1.23.26.11 API C
................

   - gh-85283(1): If the *note Py_LIMITED_API: 41e. macro is defined,
     ‘Py_BUILD_CORE’, ‘Py_BUILD_CORE_BUILTIN’ and ‘Py_BUILD_CORE_MODULE’
     macros are now undefined by ‘<Python.h>’.  Patch by Victor Stinner.

   - gh-110289(2): Add *note PyUnicode_EqualToUTF8AndSize(): 376. and
     *note PyUnicode_EqualToUTF8(): 377. functions.

   - gh-110235(3): Raise *note TypeError: 2c3. for duplicate/unknown
     fields in ‘PyStructSequence’ constructor.  Patched by Xuehai Pan.

   - gh-110014(4): Remove undocumented ‘PY_TIMEOUT_MAX’ constant from
     the limited C API. Patch by Victor Stinner.

   - gh-109521(5): *note PyImport_GetImporter(): 1806. now sets
     RuntimeError if it fails to get *note sys.path_hooks: 105a. or
     *note sys.path_importer_cache: 5e4. or they are not list and dict
     correspondingly.  Previously it could return NULL without setting
     error in obscure cases, crash or raise SystemError if these
     attributes have wrong type.

   - gh-108724(6): Add *note PyMutex: 15b. internal-only lightweight
     locking API.

   - gh-85283(7): Add *note PySys_AuditTuple(): 36e. function: similar
     to *note PySys_Audit(): 36f, but pass event arguments as a Python
     *note tuple: 370. object.  Patch by Victor Stinner.

   - gh-108867(8): Add *note PyThreadState_GetUnchecked(): 371.
     function: similar to *note PyThreadState_Get(): 372, but don’t kill
     the process with a fatal error if it is NULL. The caller is
     responsible to check if the result is NULL. Previously, the
     function was private and known as ‘_PyThreadState_UncheckedGet()’.
     Patch by Victor Stinner.

   - gh-108765(9): ‘Python.h’ no longer includes the ‘<ctype.h>’
     standard header file.  If needed, it should now be included
     explicitly.  For example, it provides ‘isalpha()’ and ‘tolower()’
     functions which are locale dependent.  Python provides locale
     independent functions, like ‘Py_ISALPHA()’ and ‘Py_TOLOWER()’.
     Patch by Victor Stinner.

   - gh-108765(10): ‘Python.h’ no longer includes the ‘<unistd.h>’
     standard header file.  If needed, it should now be included
     explicitly.  For example, it provides the functions: ‘close()’,
     ‘getpagesize()’, ‘getpid()’ and ‘sysconf()’.  Patch by Victor
     Stinner.

   - gh-108765(11): ‘Python.h’ no longer includes the ‘<ieeefp.h>’
     standard header.  It was included for the ‘finite()’ function which
     is now provided by the ‘<math.h>’ header.  It should now be
     included explicitly if needed.  Remove also the ‘HAVE_IEEEFP_H’
     macro.  Patch by Victor Stinner.

   - gh-108765(12): ‘Python.h’ no longer includes these standard header
     files: ‘<time.h>’, ‘<sys/select.h>’ and ‘<sys/time.h>’.  If needed,
     they should now be included explicitly.  For example, ‘<time.h>’
     provides the ‘clock()’ and ‘gmtime()’ functions, ‘<sys/select.h>’
     provides the ‘select()’ function, and ‘<sys/time.h>’ provides the
     ‘futimes()’, ‘gettimeofday()’ and ‘setitimer()’ functions.  Patch
     by Victor Stinner.

   - gh-108511(13): Add functions *note PyObject_HasAttrWithError():
     37a, *note PyObject_HasAttrStringWithError(): 37c, *note
     PyMapping_HasKeyWithError(): 37e. and *note
     PyMapping_HasKeyStringWithError(): 380.

   - gh-107073(14): Add *note PyObject_VisitManagedDict(): 369. and
     *note PyObject_ClearManagedDict(): 36a. functions which must be
     called by the traverse and clear functions of a type using *note
     Py_TPFLAGS_MANAGED_DICT: 36b. flag.  Patch by Victor Stinner.

   - gh-108634(15): Python built with ‘configure’ *note
     -with-trace-refs: 395. (tracing references) now supports the *note
     Limited API: 396.  Patch by Victor Stinner.

   - gh-108014(16): Add *note PyLong_AsInt(): 35f. function: similar to
     *note PyLong_AsLong(): 360, but store the result in a C int instead
     of a C long.  Previously, it was known as the private function
     ‘_PyLong_AsInt()’ (with an underscore prefix).  Patch by Victor
     Stinner.

   - gh-108314(17): Add *note PyDict_ContainsString(): 337. function:
     same as *note PyDict_Contains(): 338, but 'key' is specified as a
     const char* UTF-8 encoded bytes string, rather than a *note
     PyObject: 339.*.  Patch by Victor Stinner.

   - gh-108337(18): Adiciona operações atômicas em tipos de dados
     adicionais em pyatomic.h.

   - gh-108014(19): Add *note Py_IsFinalizing(): 358. function: check if
     the main Python interpreter is *note shutting down: 14e.  Patch by
     Victor Stinner.

   - gh-107916(20): C API functions *note
     PyErr_SetFromErrnoWithFilename(): 1807, *note
     PyErr_SetExcFromWindowsErrWithFilename(): 1808. and *note
     PyErr_SetFromWindowsErrWithFilename(): 1809. save now the error
     code before calling *note PyUnicode_DecodeFSDefault(): 180a.

   - gh-107915(21): Such C API functions as ‘PyErr_SetString()’,
     ‘PyErr_Format()’, ‘PyErr_SetFromErrnoWithFilename()’ and many
     others no longer crash or ignore errors if it failed to format the
     error message or decode the filename.  Instead, they keep a
     corresponding error.

   - gh-107810(22): Improve *note DeprecationWarning: 1a5. for uses of
     *note PyType_Spec: 180b. with metaclasses that have custom
     ‘tp_new’.

   - gh-107249(23): Implement the *note Py_UNUSED: 180c. macro for
     Windows MSVC compiler.  Patch by Victor Stinner.

   - gh-107226(24): *note PyModule_AddObjectRef(): 365. is now only
     available in the limited API version 3.10 or later.

   - gh-106320(25): Remove private ‘_PyUnicode_AsString()’ alias to
     *note PyUnicode_AsUTF8(): bd4.  It was kept for backward
     compatibility with Python 3.0 - 3.2.  The *note PyUnicode_AsUTF8():
     bd4. is available since Python 3.3.  The *note
     PyUnicode_AsUTF8String(): 11cd. function can be used to keep
     compatibility with Python 3.2 and older.  Patch by Victor Stinner.

   - gh-106572(26): Convert *note PyObject_DelAttr(): 161f. and *note
     PyObject_DelAttrString(): 1620. macros to functions.  Patch by
     Victor Stinner.

   - gh-106307(27): Add *note PyMapping_GetOptionalItem(): 345.
     function.

   - gh-106521(28): Add *note PyObject_GetOptionalAttr(): 349. and *note
     PyObject_GetOptionalAttrString(): 34a. functions.

   - gh-106320(29): Remove ‘_PyInterpreterState_Get()’ alias to *note
     PyInterpreterState_Get(): 3ad. which was kept for backward
     compatibility with Python 3.8.  Patch by Victor Stinner.

   - gh-106316(30): Remove ‘cpython/pytime.h’ header file: it only
     contained private functions.  Patch by Victor Stinner.

   - gh-106023(31): Remove private ‘_PyObject_FastCall()’ function: use
     ‘PyObject_Vectorcall()’ which is available since Python 3.8 ( PEP
     590(32)).  Patch by Victor Stinner.

   - gh-106168(33): If Python is built in *note debug mode: 1f9. or
     *note with assertions: 38c, *note PyTuple_SET_ITEM(): 38d. and
     *note PyList_SET_ITEM(): 38e. now check the index argument with an
     assertion.  If the assertion fails, make sure that the size is set
     before.  Patch by Victor Stinner.

   - gh-106084(34): Remove the old aliases to functions calling
     functions which were kept for backward compatibility with Python
     3.8 provisional API:

        * ‘_PyObject_CallMethodNoArgs()’: use
          ‘PyObject_CallMethodNoArgs()’

        * ‘_PyObject_CallMethodOneArg()’: use
          ‘PyObject_CallMethodOneArg()’

        * ‘_PyObject_CallOneArg()’: use ‘PyObject_CallOneArg()’

        * ‘_PyObject_FastCallDict()’: use ‘PyObject_VectorcallDict()’

        * ‘_PyObject_Vectorcall()’: use ‘PyObject_Vectorcall()’

        * ‘_PyObject_VectorcallMethod()’: use
          ‘PyObject_VectorcallMethod()’

        * ‘_PyVectorcall_Function()’: use ‘PyVectorcall_Function()’

     Just remove the underscore prefix to update your code.  Patch by
     Victor Stinner.

   - gh-106004(35): Adds *note PyDict_GetItemRef(): 33a. and *note
     PyDict_GetItemStringRef(): 33b. functions: similar to *note
     PyDict_GetItemWithError(): 33c. but returning a *note strong
     reference: 33d. instead of a *note borrowed reference: 33e.  Patch
     by Victor Stinner.

   - gh-105927(36): Deprecate the *note PyWeakref_GetObject(): 379. and
     *note PyWeakref_GET_OBJECT(): 3bf. functions: use the new *note
     PyWeakref_GetRef(): 378. function instead.  Patch by Victor
     Stinner.

   - gh-105927(37): Add *note PyWeakref_GetRef(): 378. function: similar
     to *note PyWeakref_GetObject(): 379. but returns a *note strong
     reference: 33d, or ‘NULL’ if the referent is no longer live.  Patch
     by Victor Stinner.

   - gh-105922(38): Add *note PyImport_AddModuleRef(): 356.: similar to
     *note PyImport_AddModule(): 357, but return a *note strong
     reference: 33d. instead of a *note borrowed reference: 33e.  Patch
     by Victor Stinner.

   - gh-105227(39): The new *note PyType_GetDict(): 180d. provides the
     dictionary for the given type object that is normally exposed by
     ‘cls.__dict__’.  Normally it’s sufficient to use *note tp_dict:
     180e, but for the static builtin types ‘tp_dict’ is now always
     ‘NULL’.  ‘PyType_GetDict()’ provides the correct dict object
     instead.

   - gh-105375(40): Fix a bug in *note PyErr_WarnExplicit(): 180f. where
     an exception could end up being overwritten if the API failed
     internally.

   - gh-105603(41): We’ve renamed the new (in 3.12)
     ‘PyInterpreterConfig.own_gil’ to ‘PyInterpreterConfig.gil’ and
     changed the meaning of the value from “bool” to an integer with
     supported values of ‘PyInterpreterConfig_DEFAULT_GIL’,
     ‘PyInterpreterConfig_SHARED_GIL’, and
     ‘PyInterpreterConfig_OWN_GIL’.  The default is “shared”.

   - gh-105387(42): In the limited C API version 3.12, *note
     Py_INCREF(): 56e. and *note Py_DECREF(): 56f. functions are now
     implemented as opaque function calls to hide implementation
     details.  Patch by Victor Stinner.

   - gh-105396(43): Deprecate the *note PyImport_ImportModuleNoBlock():
     3bd. function which is just an alias to *note
     PyImport_ImportModule(): 3be. since Python 3.3.  Patch by Victor
     Stinner.

   - gh-103968(44): *note PyType_FromMetaclass(): 550. now allows
     metaclasses with ‘tp_new’ set to ‘NULL’.

   - gh-105268(45): Remove the old private, undocumented and untested
     ‘_PyGC_FINALIZED()’ macro which was kept for backward compatibility
     with Python 3.8 and older.  Patch by Victor Stinner.

   - gh-105182(46): Remove ‘PyEval_AcquireLock()’ and
     ‘PyEval_ReleaseLock()’ functions, deprecated in Python 3.2.  Patch
     by Victor Stinner.

   - gh-105182(47): Remove ‘PyEval_InitThreads()’ and
     ‘PyEval_ThreadsInitialized()’ functions, deprecated in Python 3.9.
     Patch by Victor Stinner.

   - gh-105145(48): Deprecate old Python initialization functions:

        * *note PySys_ResetWarnOptions(): 3af.

        * *note Py_GetExecPrefix(): 3b1.

        * *note Py_GetPath(): 3b3.

        * *note Py_GetPrefix(): 3b5.

        * *note Py_GetProgramFullPath(): 3b7.

        * *note Py_GetProgramName(): 3b9.

        * *note Py_GetPythonHome(): 3ba.

     Patch por Victor Stinner.

   - gh-85275(49): ‘PyObject_AsCharBuffer()’, ‘PyObject_AsReadBuffer()’,
     ‘PyObject_CheckReadBuffer()’, and ‘PyObject_AsWriteBuffer()’ are
     removed.  Please migrate to new buffer protocol; *note
     PyObject_GetBuffer(): 399. and *note PyBuffer_Release(): 39a.

   - gh-105156(50): Deprecate the old ‘Py_UNICODE’ and ‘PY_UNICODE_TYPE’
     types: use directly the ‘wchar_t’ type instead.  Since Python 3.3,
     ‘Py_UNICODE’ and ‘PY_UNICODE_TYPE’ are just aliases to ‘wchar_t’.
     Patch by Victor Stinner.

   - gh-105145(51): Remove the following old functions to configure the
     Python initialization, deprecated in Python 3.11:

        * ‘PySys_AddWarnOptionUnicode()’

        * ‘PySys_AddWarnOption()’

        * ‘PySys_AddXOption()’

        * ‘PySys_HasWarnOptions()’

        * ‘PySys_SetArgvEx()’

        * ‘PySys_SetArgv()’

        * ‘PySys_SetPath()’

        * ‘Py_SetPath()’

        * ‘Py_SetProgramName()’

        * ‘Py_SetPythonHome()’

        * ‘Py_SetStandardStreamEncoding()’

        * ‘_Py_SetProgramFullPath()’

     Patch por Victor Stinner.

   - gh-105107(52): Remove functions deprecated in Python 3.9.

        * ‘PyEval_CallObject()’, ‘PyEval_CallObjectWithKeywords()’: use
          *note PyObject_CallNoArgs(): 39b. and *note PyObject_Call():
          39c. (positional arguments must not be 'NULL') instead.

        * ‘PyEval_CallFunction()’: use *note PyObject_CallFunction():
          39e.

        * ‘PyEval_CallMethod()’: use *note PyObject_CallMethod(): 39f.

        * ‘PyCFunction_Call()’: use *note PyObject_Call(): 39c.

     Patch por Victor Stinner.

   - gh-105115(53): ‘PyTypeObject.tp_bases’ (and ‘tp_mro’) for builtin
     static types are now shared by all interpreters, whereas in
     3.12-beta1 they were stored on ‘PyInterpreterState’.  Also note
     that now the tuples are immortal objects.

   - gh-105071(54): Add ‘PyUnstable_Exc_PrepReraiseStar’ to the unstable
     C api to expose the implementation of *note except*: 5b8.

   - gh-104922(55): ‘PY_SSIZE_T_CLEAN’ is no longer required to use
     ‘'#'’ formats in APIs like *note PyArg_ParseTuple(): 571. and *note
     Py_BuildValue(): 8ac.  They uses ‘Py_ssize_t’ for ‘'#'’ regardless
     ‘PY_SSIZE_T_CLEAN’.

   - gh-104584(56): Add an unstable C API for hooking in an optimizer.
     This is mainly internal, but marked “unstable” to allow third-party
     experimentation.

   - gh-104668(57): Don’t call *note PyOS_InputHook: 585. or *note
     PyOS_ReadlineFunctionPointer: 586. in subinterpreters, since it’s
     generally difficult to avoid using global state in their registered
     callbacks.  This also avoids situations where extensions may find
     themselves running in a subinterpreter they don’t support (or
     haven’t yet been loaded in).

   - bpo-42327(58): Add *note PyModule_Add(): 364. function: similar to
     *note PyModule_AddObjectRef(): 365. and *note PyModule_AddObject():
     366, but always steals a reference to the value.

   - bpo-40309(59): Properly handle trailing spaces before closing
     parenthesis in *note Py_BuildValue(): 8ac. format strings.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/85283

   (2) https://github.com/python/cpython/issues/110289

   (3) https://github.com/python/cpython/issues/110235

   (4) https://github.com/python/cpython/issues/110014

   (5) https://github.com/python/cpython/issues/109521

   (6) https://github.com/python/cpython/issues/108724

   (7) https://github.com/python/cpython/issues/85283

   (8) https://github.com/python/cpython/issues/108867

   (9) https://github.com/python/cpython/issues/108765

   (10) https://github.com/python/cpython/issues/108765

   (11) https://github.com/python/cpython/issues/108765

   (12) https://github.com/python/cpython/issues/108765

   (13) https://github.com/python/cpython/issues/108511

   (14) https://github.com/python/cpython/issues/107073

   (15) https://github.com/python/cpython/issues/108634

   (16) https://github.com/python/cpython/issues/108014

   (17) https://github.com/python/cpython/issues/108314

   (18) https://github.com/python/cpython/issues/108337

   (19) https://github.com/python/cpython/issues/108014

   (20) https://github.com/python/cpython/issues/107916

   (21) https://github.com/python/cpython/issues/107915

   (22) https://github.com/python/cpython/issues/107810

   (23) https://github.com/python/cpython/issues/107249

   (24) https://github.com/python/cpython/issues/107226

   (25) https://github.com/python/cpython/issues/106320

   (26) https://github.com/python/cpython/issues/106572

   (27) https://github.com/python/cpython/issues/106307

   (28) https://github.com/python/cpython/issues/106521

   (29) https://github.com/python/cpython/issues/106320

   (30) https://github.com/python/cpython/issues/106316

   (31) https://github.com/python/cpython/issues/106023

   (32) https://peps.python.org/pep-0590/

   (33) https://github.com/python/cpython/issues/106168

   (34) https://github.com/python/cpython/issues/106084

   (35) https://github.com/python/cpython/issues/106004

   (36) https://github.com/python/cpython/issues/105927

   (37) https://github.com/python/cpython/issues/105927

   (38) https://github.com/python/cpython/issues/105922

   (39) https://github.com/python/cpython/issues/105227

   (40) https://github.com/python/cpython/issues/105375

   (41) https://github.com/python/cpython/issues/105603

   (42) https://github.com/python/cpython/issues/105387

   (43) https://github.com/python/cpython/issues/105396

   (44) https://github.com/python/cpython/issues/103968

   (45) https://github.com/python/cpython/issues/105268

   (46) https://github.com/python/cpython/issues/105182

   (47) https://github.com/python/cpython/issues/105182

   (48) https://github.com/python/cpython/issues/105145

   (49) https://github.com/python/cpython/issues/85275

   (50) https://github.com/python/cpython/issues/105156

   (51) https://github.com/python/cpython/issues/105145

   (52) https://github.com/python/cpython/issues/105107

   (53) https://github.com/python/cpython/issues/105115

   (54) https://github.com/python/cpython/issues/105071

   (55) https://github.com/python/cpython/issues/104922

   (56) https://github.com/python/cpython/issues/104584

   (57) https://github.com/python/cpython/issues/104668

   (58) https://bugs.python.org/issue?@action=redirect&bpo=42327

   (59) https://bugs.python.org/issue?@action=redirect&bpo=40309


File: python.info,  Node: Python 3 12 0 beta 1,  Next: Python 3 12 0 alpha 7,  Prev: Python 3 13 0 alpha 1,  Up: Changelog

1.23.27 Python 3.12.0 beta 1
----------------------------

'Data de lançamento: 2023-05-22'

* Menu:

* Segurança: Segurança<18>.
* Biblioteca: Biblioteca<39>.
* Núcleo e embutidos: Núcleo e embutidos<35>.
* Biblioteca: Biblioteca<40>.
* Núcleo e embutidos: Núcleo e embutidos<36>.
* Biblioteca: Biblioteca<41>.
* Núcleo e embutidos: Núcleo e embutidos<37>.
* Biblioteca: Biblioteca<42>.
* Documentação: Documentação<17>.
* Testes: Testes<21>.
* Construção: Construção<21>.
* Windows: Windows<19>.
* macOS: macOS<14>.
* IDLE: IDLE<18>.
* Ferramentas/Demos: Ferramentas/Demos<13>.
* API C: API C<22>.


File: python.info,  Node: Segurança<18>,  Next: Biblioteca<39>,  Up: Python 3 12 0 beta 1

1.23.27.1 Segurança
...................

   - gh-99889(1): Fixed a security in flaw in ‘uu.decode()’ that could
     allow for directory traversal based on the input if no ‘out_file’
     was specified.

   - gh-104049(2): Do not expose the local on-disk location in directory
     indexes produced by ‘http.client.SimpleHTTPRequestHandler’.

   - gh-99108(3): Upgrade built-in *note hashlib: 68. SHA3
     implementation to a verified implementation from the ‘HACL*’
     project.  Used when OpenSSL is not present or lacks SHA3.

   - gh-102153(4): *note urllib.parse.urlsplit(): d61. now strips
     leading C0 control and space characters following the specification
     for URLs defined by WHATWG in response to CVE 2023-24329(5).  Patch
     by Illia Volochii.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99889

   (2) https://github.com/python/cpython/issues/104049

   (3) https://github.com/python/cpython/issues/99108

   (4) https://github.com/python/cpython/issues/102153

   (5) https://www.cve.org/CVERecord?id=CVE-2023-24329


File: python.info,  Node: Biblioteca<39>,  Next: Núcleo e embutidos<35>,  Prev: Segurança<18>,  Up: Python 3 12 0 beta 1

1.23.27.2 Biblioteca
....................

   - gh-102856(1): Implement PEP 701 changes in the *note tokenize: fb.
     module.  Patch by Marta Gómez Macías and Pablo Galindo Salgado

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102856


File: python.info,  Node: Núcleo e embutidos<35>,  Next: Biblioteca<40>,  Prev: Biblioteca<39>,  Up: Python 3 12 0 beta 1

1.23.27.3 Núcleo e embutidos
............................

   - gh-104615(1): Fix wrong ordering of assignments in code like ‘a, a
     = x, y’.  Contributed by Carl Meyer.

   - gh-104572(2): Improve syntax error message for invalid constructs
     in PEP 695(3) contexts and in annotations when ‘from __future__
     import annotations’ is active.

   - gh-104482(4): Fix three error handling bugs in ast.c’s validation
     of pattern matching statements.

   - gh-102818(5): Do not add a frame to the traceback in the
     ‘sys.setprofile’ and ‘sys.settrace’ trampoline functions.  This
     ensures that frames are not duplicated if an exception is raised in
     the callback function, and ensures that frames are not omitted if a
     C callback is used and that does not add the frame.

   - gh-104405(6): Fix an issue where some *note bytecode: 187.
     instructions could ignore PEP 523(7) when “inlining” calls.

   - gh-103082(8): Change behavior of ‘sys.monitoring.events.LINE’
     events in ‘sys.monitoring’: Line events now occur when a new line
     is reached dynamically, instead of using a static approximation, as
     before.  This makes the behavior very similar to that of “line”
     events in ‘sys.settrace’.  This should ease porting of tools from
     3.11 to 3.12.

   - gh-104263(9): Fix ‘float("nan")’ to produce a quiet NaN on
     platforms (like MIPS) where the meaning of the signalling / quiet
     bit is inverted from its usual meaning.  Also introduce a new macro
     ‘Py_INFINITY’ matching C99’s ‘INFINITY’, and refactor internals to
     rely on C99’s ‘NAN’ and ‘INFINITY’ macros instead of hard-coding
     bit patterns for infinities and NaNs.  Thanks Sebastian Berg.

   - gh-99113(10): Multi-phase init extension modules may now indicate
     that they support running in subinterpreters that have their own
     GIL. This is done by using ‘Py_MOD_PER_INTERPRETER_GIL_SUPPORTED’
     as the value for the ‘Py_mod_multiple_interpreters’ module def
     slot.  Otherwise the module, by default, cannot be imported in such
     subinterpreters.  (This does not affect the main interpreter or
     subinterpreters that do not have their own GIL.) In addition to the
     isolation that multi-phase init already normally requires, support
     for per-interpreter GIL involves one additional constraint:
     thread-safety.  If the module has external (linked) dependencies
     and those libraries have any state that isn’t thread-safe then the
     module must do the additional work to add thread-safety.  This
     should be an uncommon case.

   - gh-99113(11): The GIL is now (optionally) per-interpreter.  This is
     the fundamental change for PEP 684.  This is all made possible by
     virtue of the isolated state of each interpreter in the process.
     The behavior of the main interpreter remains unchanged.  Likewise,
     interpreters created using ‘Py_NewInterpreter()’ are not affected.
     To get an interpreter with its own GIL, call
     ‘Py_NewInterpreterFromConfig()’.

   - gh-104108(12): Multi-phase init extension modules may now indicate
     whether or not they actually support multiple interpreters.  By
     default such modules are expected to support use in multiple
     interpreters.  In the uncommon case that one does not, it may use
     the new ‘Py_mod_multiple_interpreters’ module def slot.  A value of
     ‘0’ means the module does not support them.  ‘1’ means it does.
     The default is ‘1’.

   - gh-104142(13): Fix an issue where *note list: 611. or *note tuple:
     370. repetition could fail to respect PEP 683(14).

   - gh-104078(15): Improve the performance of *note
     PyObject_HasAttrString(): 37d.

   - gh-104066(16): Improve the performance of *note hasattr(): 4d2. for
     module objects with a missing attribute.

   - gh-104028(17): Reduce object creation while calling callback
     function from gc.  Patch by Donghee Na.

   - gh-104018(18): Disallow the “z” format specifier in %-format of
     bytes objects.

   - gh-102213(19): Fix performance loss when accessing an object’s
     attributes with ‘__getattr__’ defined.

   - gh-103895(20): Improve handling of edge cases in showing
     ‘Exception.__notes__’.  Ensures that the messages always end with a
     newline and that string/bytes are not exploded over multiple lines.
     Patch by Carey Metcalfe.

   - gh-103907(21): Don’t modify the refcounts of known immortal objects
     (*note True: c27, *note False: b49, and *note None: 675.) in the
     main interpreter loop.

   - gh-103899(22): Provide a helpful hint in the *note TypeError: 2c3.
     message when accidentally calling a *note module: 1755. object that
     has a callable attribute of the same name (such as *note dis.dis():
     b46. or *note datetime.datetime: 1cc.).

   - gh-103845(23): Remove both line and instruction instrumentation
     before adding new ones for monitoring, to avoid newly added
     instrumentation being removed immediately.

   - gh-103763(24): Implement PEP 695(25), adding syntactic support for
     generic classes, generic functions, and type aliases.

     A new ‘type X = ...’ syntax is added for type aliases, which
     resolves at runtime to an instance of the new class
     ‘typing.TypeAliasType’.  The value is lazily evaluated and is
     accessible through the ‘.__value__’ attribute.  This is implemented
     as a new AST node ‘ast.TypeAlias’.

     New syntax (‘class X[T]: ...’, ‘def func[T](): ...’) is added for
     defining generic functions and classes.  This is implemented as a
     new ‘type_params’ attribute on the AST nodes for classes and
     functions.  This node holds instances of the new AST classes
     ‘ast.TypeVar’, ‘ast.ParamSpec’, and ‘ast.TypeVarTuple’.

     ‘typing.TypeVar’, ‘typing.ParamSpec’, ‘typing.ParamSpecArgs’,
     ‘typing.ParamSpecKwargs’, ‘typing.TypeVarTuple’, and
     ‘typing.Generic’ are now implemented in C rather than Python.

     There are new bytecode instructions ‘LOAD_LOCALS’,
     ‘LOAD_CLASSDICT_OR_GLOBAL’, and ‘LOAD_CLASSDICT_OR_DEREF’ to
     support correct resolution of names in class namespaces.

     Patch by Eric Traut, Larry Hastings, and Jelle Zijlstra.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/104615

   (2) https://github.com/python/cpython/issues/104572

   (3) https://peps.python.org/pep-0695/

   (4) https://github.com/python/cpython/issues/104482

   (5) https://github.com/python/cpython/issues/102818

   (6) https://github.com/python/cpython/issues/104405

   (7) https://peps.python.org/pep-0523/

   (8) https://github.com/python/cpython/issues/103082

   (9) https://github.com/python/cpython/issues/104263

   (10) https://github.com/python/cpython/issues/99113

   (11) https://github.com/python/cpython/issues/99113

   (12) https://github.com/python/cpython/issues/104108

   (13) https://github.com/python/cpython/issues/104142

   (14) https://peps.python.org/pep-0683/

   (15) https://github.com/python/cpython/issues/104078

   (16) https://github.com/python/cpython/issues/104066

   (17) https://github.com/python/cpython/issues/104028

   (18) https://github.com/python/cpython/issues/104018

   (19) https://github.com/python/cpython/issues/102213

   (20) https://github.com/python/cpython/issues/103895

   (21) https://github.com/python/cpython/issues/103907

   (22) https://github.com/python/cpython/issues/103899

   (23) https://github.com/python/cpython/issues/103845

   (24) https://github.com/python/cpython/issues/103763

   (25) https://peps.python.org/pep-0695/


File: python.info,  Node: Biblioteca<40>,  Next: Núcleo e embutidos<36>,  Prev: Núcleo e embutidos<35>,  Up: Python 3 12 0 beta 1

1.23.27.4 Biblioteca
....................

   - gh-103801(1): Adds three minor linting fixes to the wasm module
     caught that were caught by ruff.

   - gh-103793(2): Optimized asyncio Task creation by deferring
     expensive string formatting (task name generation) from Task
     creation to the first time ‘get_name’ is called.  This makes
     asyncio benchmarks up to 5% faster.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/103801

   (2) https://github.com/python/cpython/issues/103793


File: python.info,  Node: Núcleo e embutidos<36>,  Next: Biblioteca<41>,  Prev: Biblioteca<40>,  Up: Python 3 12 0 beta 1

1.23.27.5 Núcleo e embutidos
............................

   - gh-102310(1): Change the error range for invalid bytes literals.

   - gh-103590(2): Do not wrap a single exception raised from a
     ‘try-except*’ construct in an *note ExceptionGroup: 1b6.

   - gh-103650(3): Change the perf map format to remove the ‘0x’ prefix
     from the addresses

   - gh-102856(4): Implement the required C tokenizer changes for PEP
     701.  Patch by Pablo Galindo Salgado, Lysandros Nikolaou, Batuhan
     Taskaya, Marta Gómez Macías and sunmy2019.

   - gh-100530(5): Clarify the error message raised when the called part
     of a class pattern isn’t actually a class.

   - gh-101517(6): Fix bug in line numbers of instructions emitted for
     *note except*: 5b8.

   - gh-103492(7): Clarify *note SyntaxWarning: 466. with literal ‘is’
     comparison by specifying which literal is problematic, since
     comparisons using ‘is’ with e.g.  ‘None’ and bool literals are
     idiomatic.

   - gh-87729(8): Add *note LOAD_SUPER_ATTR: 4dc. (and a specialization
     for ‘super().method()’) to speed up ‘super().method()’ and
     ‘super().attr’.  This makes ‘super().method()’ roughly 2.3x faster
     and brings it within 20% of the performance of a simple method
     call.  Patch by Vladimir Matveev and Carl Meyer.

   - gh-103488(9): Change the internal offset distinguishing yield and
     return target addresses, so that the instruction pointer is correct
     for exception handling and other stack unwinding.

   - gh-82012(10): The bitwise inversion operator (‘~’) on bool is
     deprecated.  It returns the bitwise inversion of the underlying
     ‘int’ representation such that ‘bool(~True) == True’, which can be
     confusing.  Use ‘not’ for logical negation of bools.  In the rare
     case that you really need the bitwise inversion of the underlying
     ‘int’, convert to int explicitly ‘~int(x)’.

   - gh-77757(11): Exceptions raised in a typeobject’s ‘__set_name__’
     method are no longer wrapped by a *note RuntimeError: 195.  Context
     information is added to the exception as a PEP 678(12) note.

   - gh-103333(13): *note AttributeError: 34b. now retains the ‘name’
     attribute when pickled and unpickled.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102310

   (2) https://github.com/python/cpython/issues/103590

   (3) https://github.com/python/cpython/issues/103650

   (4) https://github.com/python/cpython/issues/102856

   (5) https://github.com/python/cpython/issues/100530

   (6) https://github.com/python/cpython/issues/101517

   (7) https://github.com/python/cpython/issues/103492

   (8) https://github.com/python/cpython/issues/87729

   (9) https://github.com/python/cpython/issues/103488

   (10) https://github.com/python/cpython/issues/82012

   (11) https://github.com/python/cpython/issues/77757

   (12) https://peps.python.org/pep-0678/

   (13) https://github.com/python/cpython/issues/103333


File: python.info,  Node: Biblioteca<41>,  Next: Núcleo e embutidos<37>,  Prev: Núcleo e embutidos<36>,  Up: Python 3 12 0 beta 1

1.23.27.6 Biblioteca
....................

   - gh-103242(1): Migrate *note set_ecdh_curve(): 1182. method not to
     use deprecated OpenSSL APIs.  Patch by Donghee Na.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/103242


File: python.info,  Node: Núcleo e embutidos<37>,  Next: Biblioteca<42>,  Prev: Biblioteca<41>,  Up: Python 3 12 0 beta 1

1.23.27.7 Núcleo e embutidos
............................

   - gh-103323(1): We’ve replaced our use of ‘_PyRuntime.tstate_current’
     with a thread-local variable.  This is a fairly low-level
     implementation detail, and there should be no change in behavior.

   - gh-84436(2): The implementation of PEP-683 which adds Immortal
     Objects by using a fixed reference count that skips reference
     counting to make objects truly immutable.

   - gh-102700(3): Allow built-in modules to be submodules.  This allows
     submodules to be statically linked into a CPython binary.

   - gh-103082(4): Implement PEP 669(5) Low Impact Monitoring for
     CPython.

   - gh-88691(6): Reduce the number of inline *note CACHE: 6f9. entries
     for *note CALL: 707.

   - gh-102500(7): Make the buffer protocol accessible in Python code
     using the new ‘__buffer__’ and ‘__release_buffer__’ magic methods.
     See PEP 688(8) for details.  Patch by Jelle Zijlstra.

   - gh-97933(9): PEP 709(10): inline list, dict and set comprehensions
     to improve performance and reduce bytecode size.

   - gh-99184(11): Bypass instance attribute access of ‘__name__’ in
     ‘repr’ of *note weakref.ref: 1026.

   - gh-98003(12): Complex function calls are now faster and consume no
     C stack space.

   - bpo-39610(13): ‘len()’ for 0-dimensional *note memoryview: 2eb.
     objects (such as ‘memoryview(ctypes.c_uint8(42))’) now raises a
     *note TypeError: 2c3.  Previously this returned ‘1’, which was not
     consistent with ‘mem_0d[0]’ raising an *note IndexError: 157e.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/103323

   (2) https://github.com/python/cpython/issues/84436

   (3) https://github.com/python/cpython/issues/102700

   (4) https://github.com/python/cpython/issues/103082

   (5) https://peps.python.org/pep-0669/

   (6) https://github.com/python/cpython/issues/88691

   (7) https://github.com/python/cpython/issues/102500

   (8) https://peps.python.org/pep-0688/

   (9) https://github.com/python/cpython/issues/97933

   (10) https://peps.python.org/pep-0709/

   (11) https://github.com/python/cpython/issues/99184

   (12) https://github.com/python/cpython/issues/98003

   (13) https://bugs.python.org/issue?@action=redirect&bpo=39610


File: python.info,  Node: Biblioteca<42>,  Next: Documentação<17>,  Prev: Núcleo e embutidos<37>,  Up: Python 3 12 0 beta 1

1.23.27.8 Biblioteca
....................

   - bpo-31821(1): Fix ‘pause_reading()’ to work when called from
     ‘connection_made()’ in *note asyncio: a.

   - gh-104600(2): *note functools.update_wrapper(): 1058. now sets the
     ‘__type_params__’ attribute (added by PEP 695(3)).

   - gh-104340(4): When an ‘asyncio’ pipe protocol loses its connection
     due to an error, and the caller doesn’t await ‘wait_closed()’ on
     the corresponding ‘StreamWriter’, don’t log a warning about an
     exception that was never retrieved.  After all, according to the
     ‘StreamWriter.close()’ docs, the ‘wait_closed()’ call is optional
     (“not mandatory”).

   - gh-104555(5): Fix issue where an *note issubclass(): 7c2. check
     comparing a class ‘X’ against a *note runtime-checkable protocol:
     443. ‘Y’ with non-callable members would not cause *note TypeError:
     2c3. to be raised if an *note isinstance(): 442. call had
     previously been made comparing an instance of ‘X’ to ‘Y’.  This
     issue was present in edge cases on Python 3.11, but became more
     prominent in 3.12 due to some unrelated changes that were made to
     runtime-checkable protocols.  Patch by Alex Waygood.

   - gh-104372(6): Refactored the ‘_posixsubprocess’ internals to avoid
     Python C API usage between fork and exec when marking ‘pass_fds=’
     file descriptors inheritable.

   - gh-104484(7): Added 'case_sensitive' argument to *note
     pathlib.PurePath.match(): 4ac.

   - gh-75367(8): Fix data descriptor detection in *note
     inspect.getattr_static(): 494.

   - gh-104536(9): Fix a race condition in the internal
     ‘multiprocessing.process’ cleanup logic that could manifest as an
     unintended ‘AttributeError’ when calling ‘process.close()’.

   - gh-103857(10): Update datetime deprecations’ stracktrace to point
     to the calling line

   - gh-101520(11): Move the core functionality of the ‘tracemalloc’
     module in the ‘Python/’ folder, leaving just the module wrapper in
     ‘Modules/’.

   - gh-104392(12): Remove undocumented and unused ‘_paramspec_tvars’
     attribute from some classes in *note typing: 104.

   - gh-102613(13): Fix issue where *note pathlib.Path.glob(): 22d.
     raised *note RecursionError: d90. when walking deep directory
     trees.

   - gh-103000(14): Improve performance of *note dataclasses.asdict():
     1819. for the common case where 'dict_factory' is ‘dict’.  Patch by
     David C Ellis.

   - gh-104301(15): Allow leading whitespace in disambiguated statements
     in *note pdb: a5.

   - gh-104139(16): Teach ‘urllib.parse.unsplit()’ to retain the ‘"//"’
     when assembling ‘itms-services://?action=generate-bugs’ style Apple
     Platform Deployment(17) URLs.

   - gh-104307(18): *note socket.getnameinfo(): 17b6. now releases the
     GIL while contacting the DNS server

   - gh-104310(19): Users may now use
     ‘importlib.util.allowing_all_extensions()’ (a context manager) to
     temporarily disable the strict compatibility checks for importing
     extension modules in subinterpreters.

   - gh-87695(20): Fix issue where *note pathlib.Path.glob(): 22d.
     raised *note OSError: 417. when it encountered a symlink to an
     overly long path.

   - gh-104265(21): Prevent possible crash by disallowing instantiation
     of the ‘_csv.Reader’ and ‘_csv.Writer’ types.  The regression was
     introduced in 3.10.0a4 with PR 23224 (bpo-14935(22)).  Patch by
     Radislav Chugunov.

   - gh-102613(23): Improve performance of *note pathlib.Path.glob():
     22d. when expanding recursive wildcards (”‘**’”) by merging
     adjacent wildcards and de-duplicating results only when necessary.

   - gh-65772(24): Remove unneeded comments and code in turtle.py.

   - gh-90208(25): Fixed issue where *note pathlib.Path.glob(): 22d.
     returned incomplete results when it encountered a *note
     PermissionError: d65.  This method now suppresses all *note
     OSError: 417. exceptions, except those raised from calling *note
     is_dir(): 230. on the top-level path.

   - gh-104144(26): Optimize *note asyncio.TaskGroup: 1b5. when using
     *note asyncio.eager_task_factory(): 477.  Skip scheduling a done
     callback if a TaskGroup task completes eagerly.

   - gh-104144(27): Optimize *note asyncio.gather(): 5fd. when using
     *note asyncio.eager_task_factory(): 477. to complete eagerly if all
     fututres completed eagerly.  Avoid scheduling done callbacks for
     futures that complete eagerly.

   - gh-104114(28): Fix issue where *note pathlib.Path.glob(): 22d.
     returns paths using the case of non-wildcard segments for
     corresponding path segments, rather than the real filesystem case.

   - gh-104104(29): Improve performance of *note pathlib.Path.glob():
     22d. by using *note re.IGNORECASE: 181a. to implement
     case-insensitive matching.

   - gh-104102(30): Improve performance of *note pathlib.Path.glob():
     22d. when evaluating patterns that contain ‘'../'’ segments.

   - gh-103822(31): Update the return type of ‘weekday’ to the newly
     added Day attribute

   - gh-103629(32): Update the ‘repr’ of *note typing.Unpack: 171b.
     according to PEP 692(33).

   - gh-103963(34): Make *note dis: 38. display the names of the args
     for ‘CALL_INTRINSIC_*’.

   - gh-104035(35): Do not ignore user-defined ‘__getstate__’ and
     ‘__setstate__’ methods for slotted frozen dataclasses.

   - gh-103987(36): In *note mmap: 90, fix several bugs that could lead
     to access to memory-mapped files after they have been invalidated.

   - gh-103977(37): Improve import time of *note platform: aa. module.

   - gh-88773(38): Added *note turtle.teleport(): 181b. to the *note
     turtle: 101. module to move a turtle to a new point without tracing
     a line, visible or invisible.  Patch by Liam Gersten.

   - gh-103935(39): Use *note io.open_code(): 181c. for files to be
     executed instead of raw *note open(): 51c.

   - gh-68968(40): Fixed garbled output of *note assertEqual(): 529.
     when an input lacks final newline.

   - gh-100370(41): Fix potential *note OverflowError: 885. in *note
     sqlite3.Connection.blobopen(): 681. for 32-bit builds.  Patch by
     Erlend E. Aasland.

   - gh-102628(42): Substitute CTRL-D with CTRL-Z in *note sqlite3: cf.
     CLI banner when running on Windows.

   - gh-103636(43): Module-level attributes ‘January’ and ‘February’ are
     deprecated from *note calendar: 14.

   - gh-103583(44): Isolate ‘_multibytecodec’ and codecs extension
     modules.  Patches by Erlend E. Aasland.

   - gh-103848(45): Add checks to ensure that ‘[’ bracketed ‘]’ hosts
     found by *note urllib.parse.urlsplit(): d61. are of IPv6 or
     IPvFuture format.

   - gh-103872(46): Update the bundled copy of pip to version 23.1.2.

   - gh-99944(47): Make *note dis: 38. display the value of oparg of
     ‘KW_NAMES’.

   - gh-74940(48): The C.UTF-8 locale is no longer converted to
     en_US.UTF-8, enabling the use of UTF-8 encoding on systems which
     have no locales installed.

   - gh-103861(49): Fix ‘zipfile.Zipfile’ creating invalid zip files
     when ‘force_zip64’ was used to add files to them.  Patch by Carey
     Metcalfe.

   - gh-103857(50): Deprecated *note datetime.datetime.utcnow(): 2fc.
     and *note datetime.datetime.utcfromtimestamp(): 2fd.  (Patch by
     Paul Ganssle)

   - gh-103839(51): Avoid compilation error due to tommath.h not being
     found when building Tkinter against Tcl 8.7 built with bundled
     libtommath.

   - gh-103791(52): *note contextlib.suppress: f58. now supports
     suppressing exceptions raised as part of an *note ExceptionGroup:
     1b6.  If other exceptions exist on the group, they are re-raised in
     a group that does not contain the suppressed exceptions.

   - gh-90750(53): Use *note datetime.datetime.fromisocalendar(): 9f5.
     in the implementation of *note datetime.datetime.strptime(): 16f6,
     which should now accept only valid ISO dates.  (Patch by Paul
     Ganssle)

   - gh-103685(54): Prepare ‘tkinter.Menu.index()’ for Tk 8.7 so that it
     does not raise ‘TclError: expected integer but got ""’ when it
     should return ‘None’.

   - gh-81403(55): *note urllib.request.CacheFTPHandler: 181d. no longer
     raises ‘URLError’ if a cached FTP instance is reused.  ftplib’s
     endtransfer method calls voidresp to drain the connection to handle
     FTP instance reuse properly.

   - gh-103699(56): Add ‘__orig_bases__’ to non-generic TypedDicts,
     call-based TypedDicts, and call-based NamedTuples.  Other
     TypedDicts and NamedTuples already had the attribute.

   - gh-103693(57): Add convenience variable feature to *note pdb: a5.

   - gh-92248(58): Deprecate ‘type’, ‘choices’, and ‘metavar’ parameters
     of ‘argparse.BooleanOptionalAction’.

   - gh-89415(59): Add *note socket: cc. constants for source-specific
     multicast.  Patch by Reese Hyde.

   - gh-103673(60): *note socketserver: cd. gains
     ‘ForkingUnixStreamServer’ and ‘ForkingUnixDatagramServer’ classes.
     Patch by Jay Berry.

   - gh-103636(61): Added Enum for months and days in the calendar
     module.

   - gh-84976(62): Create a new ‘Lib/_pydatetime.py’ file that defines
     the Python version of the ‘datetime’ module, and make ‘datetime’
     import the contents of the new library only if the C implementation
     is missing.  Currently, the full Python implementation is defined
     and then deleted if the C implementation is not available, slowing
     down ‘import datetime’ unnecessarily.

   - gh-103596(63): Attributes/methods are no longer shadowed by
     same-named enum members, although they may be shadowed by
     enum.property’s.

   - gh-103584(64): Updated ‘importlib.metadata’ with changes from
     ‘importlib_metadata’ 5.2 through 6.5.0, including: Support
     ‘installed-files.txt’ for ‘Distribution.files’ when present.
     ‘PackageMetadata’ now stipulates an additional ‘get’ method
     allowing for easy querying of metadata keys that may not be
     present.  ‘packages_distributions’ now honors packages and modules
     with Python modules that not ‘.py’ sources (e.g.  ‘.pyc’, ‘.so’).
     Expand protocol for ‘PackageMetadata.get_all’ to match the upstream
     implementation of ‘email.message.Message.get_all’ in
     python/typeshed#9620.  Deprecated use of ‘Distribution’ without
     defining abstract methods.  Deprecated expectation that
     ‘PackageMetadata.__getitem__’ will return ‘None’ for missing keys.
     In the future, it will raise a ‘KeyError’.

   - gh-103578(65): Fixed a bug where *note pdb: a5. crashes when
     reading source file with different encoding by replacing *note
     io.open(): 51d. with *note io.open_code(): 181c.  The new method
     would also call into the hook set by *note
     PyFile_SetOpenCodeHook(): 181e.

   - gh-103556(66): Now creating *note inspect.Signature: 1cf. objects
     with positional-only parameter with a default followed by a
     positional-or-keyword parameter without one is impossible.

   - gh-103559(67): Update the bundled copy of pip to version 23.1.1.

   - gh-103548(68): Improve performance of *note
     pathlib.Path.absolute(): 17a2. and *note cwd(): 181f. by joining
     paths only when necessary.  Also improve performance of *note
     pathlib.PurePath.is_absolute(): 1820. on Posix by skipping path
     parsing and normalization.

   - gh-103538(69): Remove ‘_tkinter’ module code guarded by definition
     of the ‘TK_AQUA’ macro which was only needed for Tk 8.4.7 or
     earlier and was never actually defined by any build system or
     documented for manual use.

   - gh-103533(70): Update *note cProfile: 27. to use PEP 669 API

   - gh-103525(71): Fix misleading exception message when mixed ‘str’
     and ‘bytes’ arguments are supplied to *note pathlib.PurePath: 4a6.
     and *note Path: 229.

   - gh-103489(72): Add *note getconfig(): 4b9. and *note setconfig():
     4ba. to *note Connection: 245. to make configuration changes to a
     database connection.  Patch by Erlend E. Aasland.

   - gh-103365(73): Set default Flag boundary to ‘STRICT’ and fix
     bitwise operations.

   - gh-103472(74): Avoid a potential *note ResourceWarning: 244. in
     *note http.client.HTTPConnection: b53. by closing the proxy /
     tunnel’s CONNECT response explicitly.

   - gh-103462(75): Fixed an issue with using *note writelines(): 15dc.
     in *note asyncio: a. to send very large payloads that exceed the
     amount of data that can be written in one call to *note
     socket.socket.send(): dcf. or *note socket.socket.sendmsg(): 476,
     resulting in the remaining buffer being left unwritten.

   - gh-103449(76): Fix a bug in doc string generation in *note
     dataclasses.dataclass(): 1cb.

   - gh-103092(77): Isolate ‘_collections’ (apply PEP 687(78)).  Patch
     by Erlend E. Aasland.

   - gh-103357(79): Added support for *note logging.Formatter: 14df.
     ‘defaults’ parameter to *note logging.config.dictConfig(): 11ef.
     and *note logging.config.fileConfig(): b66.  Patch by Bar Harel.

   - gh-103092(80): Adapt the *note winreg: 116. extension module to PEP
     687(81).

   - gh-74690(82): The performance of *note isinstance(): 442. checks
     against *note runtime-checkable protocols: 443. has been
     considerably improved for protocols that only have a few members.
     To achieve this improvement, several internal implementation
     details of the *note typing: 104. module have been refactored,
     including ‘typing._ProtocolMeta.__instancecheck__’,
     ‘typing._is_callable_members_only’, and
     ‘typing._get_protocol_attrs’.  Patches by Alex Waygood.

   - gh-74690(83): The members of a runtime-checkable protocol are now
     considered “frozen” at runtime as soon as the class has been
     created.  See *note “What’s new in Python 3.12”: 4d1. for more
     details.

   - gh-103256(84): Fixed a bug that caused *note hmac: 6a. to raise an
     exception when the requested hash algorithm was not available in
     OpenSSL despite being available separately as part of ‘hashlib’
     itself.  It now falls back properly to the built-in.  This could
     happen when, for example, your OpenSSL does not include SHA3
     support and you want to compute ‘hmac.digest(b'K', b'M',
     'sha3_256')’.

   - gh-102778(85): Support ‘sys.last_exc’ in *note idlelib: 73.

   - gh-103285(86): Improve performance of *note
     ast.get_source_segment(): 9e0.

   - gh-103225(87): Fix a bug in *note pdb: a5. when displaying line
     numbers of module-level source code.

   - gh-103092(88): Adapt the *note msvcrt: 93. extension module to PEP
     687(89).

   - gh-103092(90): Adapt the *note winsound: 117. extension module to
     PEP 687(91).

   - gh-93910(92): Remove deprecation of enum ‘member.member’ access.

   - gh-102978(93): Fixes *note unittest.mock.patch(): ec1. not
     enforcing function signatures for methods decorated with
     ‘@classmethod’ or ‘@staticmethod’ when patch is called with
     ‘autospec=True’.

   - gh-103092(94): Isolate ‘_socket’ (apply PEP 687(95)).  Patch by
     Erlend E. Aasland.

   - gh-100479(96): Add *note pathlib.PurePath.with_segments(): 4a7,
     which creates a path object from arguments.  This method is called
     whenever a derivative path is created, such as from *note
     pathlib.PurePath.parent: 1821.  Subclasses may override this method
     to share information between path objects.

   - gh-103220(97): Fix issue where *note os.path.join(): 171f. added a
     slash when joining onto an incomplete UNC drive with a trailing
     slash on Windows.

   - gh-103204(98): Fixes *note http.server: 72. accepting HTTP requests
     with HTTP version numbers preceded by ‘+’, or ‘-’, or with
     digit-separating ‘_’ characters.  The length of the version numbers
     is also constrained.

   - gh-75586(99): Fix various Windows-specific issues with
     ‘shutil.which’.

   - gh-103193(100): Improve performance of *note
     inspect.getattr_static(): 494.  Patch by Alex Waygood.

   - gh-103176(101): *note sys._current_exceptions(): 4c2. now returns a
     mapping from thread-id to an exception instance, rather than to a
     ‘(typ, exc, tb)’ tuple.

   - gh-103143(102): Polish the help messages and docstrings of *note
     pdb: a5.

   - gh-103015(103): Add 'entrypoint' keyword-only parameter to *note
     sqlite3.Connection.load_extension(): 4b8, for overriding the SQLite
     extension entry point.  Patch by Erlend E. Aasland.

   - gh-103000(104): Improve performance of *note dataclasses.astuple():
     1822. and *note dataclasses.asdict(): 1819. in cases where the
     contents are common Python types.

   - gh-102953(105): The extraction methods in *note tarfile: de, and
     *note shutil.unpack_archive(): 46b, have a new a 'filter' argument
     that allows limiting tar features than may be surprising or
     dangerous, such as creating files outside the destination
     directory.  See *note Filtros de extração: 46c. for details.

   - gh-97696(106): Implemented an eager task factory in asyncio.  When
     used as a task factory on an event loop, it performs eager
     execution of coroutines.  Coroutines that are able to complete
     synchronously (e.g.  return or raise without blocking) are returned
     immediately as a finished task, and the task is never scheduled to
     the event loop.  If the coroutine blocks, the (pending) task is
     scheduled and returned.

   - gh-81079(107): Add 'case_sensitive' keyword-only argument to *note
     pathlib.Path.glob(): 22d. and *note rglob(): 22e.

   - gh-101819(108): Isolate the *note io: 7f. extension module by
     applying PEP 687(109).  Patch by Kumar Aditya, Victor Stinner, and
     Erlend E. Aasland.

   - gh-91896(110): Deprecate *note collections.abc.ByteString: 2e7.

   - gh-101362(111): Speed up *note pathlib.Path: 229. construction by
     omitting the path anchor from the internal list of path parts.

   - gh-102114(112): Functions in the *note dis: 38. module that accept
     a source code string as argument now print a more concise traceback
     when the string contains a syntax or indentation error.

   - gh-62432(113): The *note unittest: 106. runner will now exit with
     status code 5 if no tests were run.  It is common for test runner
     misconfiguration to fail to find any tests, this should be an
     error.

   - gh-78079(114): Fix incorrect normalization of UNC device path
     roots, and partial UNC share path roots, in *note pathlib.PurePath:
     4a6.  Pathlib no longer appends a trailing slash to such paths.

   - gh-85984(115): Add *note tty.cfmakeraw(): 17bf. and *note
     tty.cfmakecbreak(): 176f. to *note tty: 100. and modernize, the
     behavior of *note tty.setraw(): 17be. and *note tty.setcbreak():
     176e. to use POSIX.1-2017 Chapter 11 “General Terminal Interface”
     flag masks by default.

   - gh-101688(116): Implement *note types.get_original_bases(): 4ce. to
     provide further introspection for types.

   - gh-101640(117): *note argparse.ArgumentParser: 539. now catches
     errors when writing messages, such as when *note sys.stderr: 940.
     is ‘None’.  Patch by Oleg Iarygin.

   - gh-83861(118): Fix datetime.astimezone method return value when
     invoked on a naive datetime instance that represents local time
     falling in a timezone transition gap.  PEP 495 requires that
     instances with fold=1 produce earlier times than those with fold=0
     in this case.

   - gh-89550(119): Decrease execution time of some *note gzip: 67. file
     writes by 15% by adding more appropriate buffering.

   - gh-95299(120): Remove the bundled setuptools wheel from
     ‘ensurepip’, and stop installing setuptools in environments created
     by ‘venv’.

   - gh-99353(121): Respect the *note http.client.HTTPConnection: b53.
     ‘.debuglevel’ flag in ‘urllib.request.AbstractHTTPHandler’ when its
     constructor parameter ‘debuglevel’ is not set.  And do the same for
     ‘*HTTPS*’.

   - gh-98040(122): Remove the long-deprecated ‘imp’ module.

   - gh-97850(123): Deprecate *note pkgutil.find_loader(): 2cb. and
     *note pkgutil.get_loader(): 2cc. in favor of *note
     importlib.util.find_spec(): 2cd.

   - gh-94473(124): Flatten arguments in ‘tkinter.Canvas.coords()’.  It
     now accepts not only ‘x1, y1, x2, y2, ...’ and ‘[x1, y1, x2, y2,
     ...]’, but also ‘(x1, y1), (x2, y2), ...’ and ‘[(x1, y1), (x2, y2),
     ...]’.

   - gh-98040(125): Remove more deprecated importlib APIs:
     ‘find_loader()’, ‘find_module()’, ‘importlib.abc.Finder’,
     ‘pkgutil.ImpImporter’, ‘pkgutil.ImpLoader’.

   - gh-96522(126): Fix potential deadlock in pty.spawn()

   - gh-96534(127): Support divert(4) added in FreeBSD 14.

   - gh-87474(128): Fix potential file descriptor leaks in *note
     subprocess.Popen: 199.

   - gh-94906(129): Support multiple steps in *note math.nextafter():
     498.  Patch by Shantanu Jain and Matthias Gorgens.

   - gh-51574(130): Make *note tempfile.mkdtemp(): 21f. return absolute
     paths when its 'dir' parameter is relative.

   - gh-94518(131): Convert private ‘_posixsubprocess.fork_exec()’ to
     use Argument Clinic.

   - gh-92184(132): When creating zip files using *note zipfile: 131,
     ‘os.altsep’, if not ‘None’, will always be treated as a path
     separator even when it is not ‘/’.  Patch by Carey Metcalfe.

   - bpo-46797(133): Deprecation warnings are now emitted for ‘ast.Num’,
     ‘ast.Bytes’, ‘ast.Str’, ‘ast.NameConstant’ and ‘ast.Ellipsis’.
     These have been documented as deprecated since Python 3.8, and will
     be removed in Python 3.14.

   - bpo-44844(134): Enables *note webbrowser: 115. to detect and launch
     Microsoft Edge browser.

   - bpo-45606(135): Fixed the bug in *note pathlib.Path.glob(): 22d. –
     previously a dangling symlink would not be found by this method
     when the pattern is an exact match, but would be found when the
     pattern contains a wildcard or the recursive wildcard (‘**’).  With
     this change, a dangling symlink will be found in both cases.

   - bpo-23041(136): Add *note QUOTE_STRINGS: 485. and *note
     QUOTE_NOTNULL: 484. to the suite of *note csv: 29. module quoting
     styles.

   - bpo-24964(137): Added *note
     http.client.HTTPConnection.get_proxy_response_headers(): 17f5. that
     provides access to the HTTP headers on a proxy server response to
     the ‘CONNECT’ request.

   - bpo-17258(138): *note multiprocessing: 94. now supports stronger
     HMAC algorithms for inter-process connection authentication rather
     than only HMAC-MD5.

   - bpo-39744(139): Make *note
     asyncio.subprocess.Process.communicate(): 1823. close the
     subprocess’s stdin even when called with ‘input=None’.

   - bpo-22708(140): http.client CONNECT method tunnel improvements: Use
     HTTP 1.1 protocol; send a matching Host: header with CONNECT, if
     one is not provided; convert IDN domain names to Punycode.  Patch
     by Michael Handler.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31821

   (2) https://github.com/python/cpython/issues/104600

   (3) https://peps.python.org/pep-0695/

   (4) https://github.com/python/cpython/issues/104340

   (5) https://github.com/python/cpython/issues/104555

   (6) https://github.com/python/cpython/issues/104372

   (7) https://github.com/python/cpython/issues/104484

   (8) https://github.com/python/cpython/issues/75367

   (9) https://github.com/python/cpython/issues/104536

   (10) https://github.com/python/cpython/issues/103857

   (11) https://github.com/python/cpython/issues/101520

   (12) https://github.com/python/cpython/issues/104392

   (13) https://github.com/python/cpython/issues/102613

   (14) https://github.com/python/cpython/issues/103000

   (15) https://github.com/python/cpython/issues/104301

   (16) https://github.com/python/cpython/issues/104139

   (17) 
https://support.apple.com/en-gb/guide/deployment/depce7cefc4d/web

   (18) https://github.com/python/cpython/issues/104307

   (19) https://github.com/python/cpython/issues/104310

   (20) https://github.com/python/cpython/issues/87695

   (21) https://github.com/python/cpython/issues/104265

   (22) https://bugs.python.org/issue?@action=redirect&bpo=14935

   (23) https://github.com/python/cpython/issues/102613

   (24) https://github.com/python/cpython/issues/65772

   (25) https://github.com/python/cpython/issues/90208

   (26) https://github.com/python/cpython/issues/104144

   (27) https://github.com/python/cpython/issues/104144

   (28) https://github.com/python/cpython/issues/104114

   (29) https://github.com/python/cpython/issues/104104

   (30) https://github.com/python/cpython/issues/104102

   (31) https://github.com/python/cpython/issues/103822

   (32) https://github.com/python/cpython/issues/103629

   (33) https://peps.python.org/pep-0692/

   (34) https://github.com/python/cpython/issues/103963

   (35) https://github.com/python/cpython/issues/104035

   (36) https://github.com/python/cpython/issues/103987

   (37) https://github.com/python/cpython/issues/103977

   (38) https://github.com/python/cpython/issues/88773

   (39) https://github.com/python/cpython/issues/103935

   (40) https://github.com/python/cpython/issues/68968

   (41) https://github.com/python/cpython/issues/100370

   (42) https://github.com/python/cpython/issues/102628

   (43) https://github.com/python/cpython/issues/103636

   (44) https://github.com/python/cpython/issues/103583

   (45) https://github.com/python/cpython/issues/103848

   (46) https://github.com/python/cpython/issues/103872

   (47) https://github.com/python/cpython/issues/99944

   (48) https://github.com/python/cpython/issues/74940

   (49) https://github.com/python/cpython/issues/103861

   (50) https://github.com/python/cpython/issues/103857

   (51) https://github.com/python/cpython/issues/103839

   (52) https://github.com/python/cpython/issues/103791

   (53) https://github.com/python/cpython/issues/90750

   (54) https://github.com/python/cpython/issues/103685

   (55) https://github.com/python/cpython/issues/81403

   (56) https://github.com/python/cpython/issues/103699

   (57) https://github.com/python/cpython/issues/103693

   (58) https://github.com/python/cpython/issues/92248

   (59) https://github.com/python/cpython/issues/89415

   (60) https://github.com/python/cpython/issues/103673

   (61) https://github.com/python/cpython/issues/103636

   (62) https://github.com/python/cpython/issues/84976

   (63) https://github.com/python/cpython/issues/103596

   (64) https://github.com/python/cpython/issues/103584

   (65) https://github.com/python/cpython/issues/103578

   (66) https://github.com/python/cpython/issues/103556

   (67) https://github.com/python/cpython/issues/103559

   (68) https://github.com/python/cpython/issues/103548

   (69) https://github.com/python/cpython/issues/103538

   (70) https://github.com/python/cpython/issues/103533

   (71) https://github.com/python/cpython/issues/103525

   (72) https://github.com/python/cpython/issues/103489

   (73) https://github.com/python/cpython/issues/103365

   (74) https://github.com/python/cpython/issues/103472

   (75) https://github.com/python/cpython/issues/103462

   (76) https://github.com/python/cpython/issues/103449

   (77) https://github.com/python/cpython/issues/103092

   (78) https://peps.python.org/pep-0687/

   (79) https://github.com/python/cpython/issues/103357

   (80) https://github.com/python/cpython/issues/103092

   (81) https://peps.python.org/pep-0687/

   (82) https://github.com/python/cpython/issues/74690

   (83) https://github.com/python/cpython/issues/74690

   (84) https://github.com/python/cpython/issues/103256

   (85) https://github.com/python/cpython/issues/102778

   (86) https://github.com/python/cpython/issues/103285

   (87) https://github.com/python/cpython/issues/103225

   (88) https://github.com/python/cpython/issues/103092

   (89) https://peps.python.org/pep-0687/

   (90) https://github.com/python/cpython/issues/103092

   (91) https://peps.python.org/pep-0687/

   (92) https://github.com/python/cpython/issues/93910

   (93) https://github.com/python/cpython/issues/102978

   (94) https://github.com/python/cpython/issues/103092

   (95) https://peps.python.org/pep-0687/

   (96) https://github.com/python/cpython/issues/100479

   (97) https://github.com/python/cpython/issues/103220

   (98) https://github.com/python/cpython/issues/103204

   (99) https://github.com/python/cpython/issues/75586

   (100) https://github.com/python/cpython/issues/103193

   (101) https://github.com/python/cpython/issues/103176

   (102) https://github.com/python/cpython/issues/103143

   (103) https://github.com/python/cpython/issues/103015

   (104) https://github.com/python/cpython/issues/103000

   (105) https://github.com/python/cpython/issues/102953

   (106) https://github.com/python/cpython/issues/97696

   (107) https://github.com/python/cpython/issues/81079

   (108) https://github.com/python/cpython/issues/101819

   (109) https://peps.python.org/pep-0687/

   (110) https://github.com/python/cpython/issues/91896

   (111) https://github.com/python/cpython/issues/101362

   (112) https://github.com/python/cpython/issues/102114

   (113) https://github.com/python/cpython/issues/62432

   (114) https://github.com/python/cpython/issues/78079

   (115) https://github.com/python/cpython/issues/85984

   (116) https://github.com/python/cpython/issues/101688

   (117) https://github.com/python/cpython/issues/101640

   (118) https://github.com/python/cpython/issues/83861

   (119) https://github.com/python/cpython/issues/89550

   (120) https://github.com/python/cpython/issues/95299

   (121) https://github.com/python/cpython/issues/99353

   (122) https://github.com/python/cpython/issues/98040

   (123) https://github.com/python/cpython/issues/97850

   (124) https://github.com/python/cpython/issues/94473

   (125) https://github.com/python/cpython/issues/98040

   (126) https://github.com/python/cpython/issues/96522

   (127) https://github.com/python/cpython/issues/96534

   (128) https://github.com/python/cpython/issues/87474

   (129) https://github.com/python/cpython/issues/94906

   (130) https://github.com/python/cpython/issues/51574

   (131) https://github.com/python/cpython/issues/94518

   (132) https://github.com/python/cpython/issues/92184

   (133) https://bugs.python.org/issue?@action=redirect&bpo=46797

   (134) https://bugs.python.org/issue?@action=redirect&bpo=44844

   (135) https://bugs.python.org/issue?@action=redirect&bpo=45606

   (136) https://bugs.python.org/issue?@action=redirect&bpo=23041

   (137) https://bugs.python.org/issue?@action=redirect&bpo=24964

   (138) https://bugs.python.org/issue?@action=redirect&bpo=17258

   (139) https://bugs.python.org/issue?@action=redirect&bpo=39744

   (140) https://bugs.python.org/issue?@action=redirect&bpo=22708


File: python.info,  Node: Documentação<17>,  Next: Testes<21>,  Prev: Biblioteca<42>,  Up: Python 3 12 0 beta 1

1.23.27.9 Documentação
......................

   - gh-67056(1): Document that the effect of registering or
     unregistering an *note atexit: c. cleanup function from within a
     registered cleanup function is undefined.

   - gh-103629(2): Mention the new way of typing ‘**kwargs’ with
     ‘Unpack’ and ‘TypedDict’ introduced in PEP 692(3).

   - gh-48241(4): Clarifying documentation about the url parameter to
     urllib.request.urlopen and urllib.request.Request needing to be
     encoded properly.

   - gh-86094(5): Add support for Unicode Path Extra Field in ZipFile.
     Patch by Yeojin Kim and Andrea Giudiceandrea

   - gh-99202(6): Fix extension type from documentation for compiling in
     C++20 mode

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/67056

   (2) https://github.com/python/cpython/issues/103629

   (3) https://peps.python.org/pep-0692/

   (4) https://github.com/python/cpython/issues/48241

   (5) https://github.com/python/cpython/issues/86094

   (6) https://github.com/python/cpython/issues/99202


File: python.info,  Node: Testes<21>,  Next: Construção<21>,  Prev: Documentação<17>,  Up: Python 3 12 0 beta 1

1.23.27.10 Testes
.................

   - gh-104494(1): Update ‘test_pack_configure_in’ and
     ‘test_place_configure_in’ for changes to error message formatting
     in Tk 8.7.

   - gh-104461(2): Run test_configure_screen on X11 only, since the
     ‘DISPLAY’ environment variable and ‘-screen’ option for toplevels
     are not useful on Tk for Win32 or Aqua.

   - gh-86275(3): Added property-based tests to the *note zoneinfo: 134.
     tests, along with stubs for the ‘hypothesis’ interface.  (Patch by
     Paul Ganssle)

   - gh-103329(4): Regression tests for the behaviour of
     ‘unittest.mock.PropertyMock’ were added.

   - gh-102795(5): fix use of poll in test_epoll’s test_control_and_wait

   - gh-75729(6): Fix the *note os.spawn*: 1826. tests failing on
     Windows when the working directory or interpreter path contains
     spaces.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/104494

   (2) https://github.com/python/cpython/issues/104461

   (3) https://github.com/python/cpython/issues/86275

   (4) https://github.com/python/cpython/issues/103329

   (5) https://github.com/python/cpython/issues/102795

   (6) https://github.com/python/cpython/issues/75729


File: python.info,  Node: Construção<21>,  Next: Windows<19>,  Prev: Testes<21>,  Up: Python 3 12 0 beta 1

1.23.27.11 Construção
.....................

   - gh-101282(1): BOLT optimization is now applied to the libpython
     shared library if building a shared library.  BOLT instrumentation
     and application settings can now be influenced via the
     ‘BOLT_INSTRUMENT_FLAGS’ and ‘BOLT_APPLY_FLAGS’ configure variables.

   - gh-99017(2): ‘PYTHON_FOR_REGEN’ now require Python 3.10 or newer.

   - gh-104490(3): Define ‘.PHONY’ / virtual make targets consistently
     and properly.

   - gh-104106(4): Add gcc fallback of mkfifoat/mknodat for macOS. Patch
     by Donghee Na.

   - gh-103532(5): The ‘TKINTER_PROTECT_LOADTK’ macro is no longer
     defined or used in the ‘_tkinter’ module.  It was previously only
     defined when building against Tk 8.4.13 and older, but Tk older
     than 8.5.12 has been unsupported since gh-91152(6).

   - gh-99069(7): Extended workaround defining ‘static_assert’ when
     missing from the libc headers to all clang and gcc builds.  In
     particular, this fixes building on macOS <= 10.10.

   - gh-100220(8): Changed the default value of the ‘SHELL’ Makefile
     variable from ‘/bin/sh’ to ‘/bin/sh -e’ to ensure that complex
     recipes correctly fail after an error.  Previously, ‘make install’
     could fail to install some files and yet return a successful
     result.

   - gh-90656(9): Add platform triplets for 64-bit LoongArch:

        * loongarch64-linux-gnusf

        * loongarch64-linux-gnuf32

        * loongarch64-linux-gnu

     Patch by Zhang Na.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/101282

   (2) https://github.com/python/cpython/issues/99017

   (3) https://github.com/python/cpython/issues/104490

   (4) https://github.com/python/cpython/issues/104106

   (5) https://github.com/python/cpython/issues/103532

   (6) https://github.com/python/cpython/issues/91152

   (7) https://github.com/python/cpython/issues/99069

   (8) https://github.com/python/cpython/issues/100220

   (9) https://github.com/python/cpython/issues/90656


File: python.info,  Node: Windows<19>,  Next: macOS<14>,  Prev: Construção<21>,  Up: Python 3 12 0 beta 1

1.23.27.12 Windows
..................

   - gh-104623(1): Update Windows installer to use SQLite 3.42.0.

   - gh-82814(2): Fix a potential ‘[Errno 13] Permission denied’ when
     using *note shutil.copystat(): 116d. within Windows Subsystem for
     Linux (WSL) on a mounted filesystem by adding ‘errno.EACCES’ to the
     list of ignored errors within the internal implementation.

   - gh-103088(3): Fix virtual environment ‘activate’ script having
     incorrect line endings for Cygwin.

   - gh-103088(4): Fixes venvs not working in bash on Windows across
     different disks

   - gh-102997(5): Update Windows installer to use SQLite 3.41.2.

   - gh-88013(6): Fixed a bug where *note TypeError: 2c3. was raised
     when calling ‘ntpath.realpath()’ with a bytes parameter in some
     cases.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/104623

   (2) https://github.com/python/cpython/issues/82814

   (3) https://github.com/python/cpython/issues/103088

   (4) https://github.com/python/cpython/issues/103088

   (5) https://github.com/python/cpython/issues/102997

   (6) https://github.com/python/cpython/issues/88013


File: python.info,  Node: macOS<14>,  Next: IDLE<18>,  Prev: Windows<19>,  Up: Python 3 12 0 beta 1

1.23.27.13 macOS
................

   - gh-99834(1): Update macOS installer to Tcl/Tk 8.6.13.

   - gh-104623(2): Update macOS installer to SQLite 3.42.0.

   - gh-103545(3): Add ‘os.PRIO_DARWIN_THREAD’,
     ‘os.PRIO_DARWIN_PROCESS’, ‘os.PRIO_DARWIN_BG’ and
     ‘os.PRIO_DARWIN_NONUI’.  These can be used with ‘os.setpriority’ to
     run the process at a lower priority and make use of the efficiency
     cores on Apple Silicon systems.

   - gh-104180(4): Support reading SOCKS proxy configuration from macOS
     System Configuration.  Patch by Sam Schott.

   - gh-60436(5): update curses textbox to additionally handle backspace
     using the ‘curses.ascii.DEL’ key press.

   - gh-102997(6): Update macOS installer to SQLite 3.41.2.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99834

   (2) https://github.com/python/cpython/issues/104623

   (3) https://github.com/python/cpython/issues/103545

   (4) https://github.com/python/cpython/issues/104180

   (5) https://github.com/python/cpython/issues/60436

   (6) https://github.com/python/cpython/issues/102997


File: python.info,  Node: IDLE<18>,  Next: Ferramentas/Demos<13>,  Prev: macOS<14>,  Up: Python 3 12 0 beta 1

1.23.27.14 IDLE
...............

   - gh-104499(1): Fix completions for Tk Aqua 8.7 (currently blank).

   - gh-104496(2): About prints both tcl and tk versions if different
     (expected someday).

   - gh-88496(3): Fix IDLE test hang on macOS.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/104499

   (2) https://github.com/python/cpython/issues/104496

   (3) https://github.com/python/cpython/issues/88496


File: python.info,  Node: Ferramentas/Demos<13>,  Next: API C<22>,  Prev: IDLE<18>,  Up: Python 3 12 0 beta 1

1.23.27.15 Ferramentas/Demos
............................

   - gh-104389(1): Argument Clinic C converters now accept the ‘unused’
     keyword, for wrapping a parameter with *note Py_UNUSED: 180c.
     Patch by Erlend E. Aasland.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/104389


File: python.info,  Node: API C<22>,  Prev: Ferramentas/Demos<13>,  Up: Python 3 12 0 beta 1

1.23.27.16 API C
................

   - gh-101291(1): Added unstable C API for extracting the value of
     “compact” integers: *note PyUnstable_Long_IsCompact(): 589. and
     *note PyUnstable_Long_CompactValue(): 58a.

   - gh-104109(2): We’ve added ‘Py_NewInterpreterFromConfig()’ and
     ‘PyInterpreterConfig’ to the public C-API (but not the stable ABI;
     not yet at least).  The new function may be used to create a new
     interpreter with various features configured.  The function was
     added to support PEP 684 (per-interpreter GIL).

   - gh-103968(3): *note PyType_FromSpec(): 57d. and its variants now
     allow creating classes whose metaclass overrides *note tp_new: 57f.
     The ‘tp_new’ is ignored.  This behavior is deprecated and will be
     disallowed in 3.14+.  The new *note PyType_FromMetaclass(): 550.
     already disallows it.

   - gh-103743(4): Add *note PyUnstable_Object_GC_NewWithExtraData():
     182d. function that can be used to allocate additional memory after
     an object for data not managed by Python.

   - gh-103295(5): Introduced *note PyUnstable_WritePerfMapEntry():
     182e, *note PyUnstable_PerfMapState_Init(): 182f. and *note
     PyUnstable_PerfMapState_Fini(): 1830.  These allow extension
     modules (JIT compilers in particular) to write to perf-map files in
     a thread safe manner.  The *note Suporte do Python ao perfilador
     perf do Linux: 1831. also uses these APIs to write entries in the
     perf-map file.

   - gh-103509(6): Added C API for extending types whose instance memory
     layout is opaque: *note PyType_Spec.basicsize: 548. can now be zero
     or negative, *note PyObject_GetTypeData(): 549. can be used to get
     subclass-specific data, and *note Py_TPFLAGS_ITEMS_AT_END: 54b. can
     be used to safely extend variable-size objects.  See PEP 697(7) for
     details.

   - gh-103091(8): Add a new C-API function to eagerly assign a version
     tag to a PyTypeObject: ‘PyUnstable_Type_AssignVersionTag()’.

   - gh-101408(9): *note PyObject_GC_Resize: 1832. should calculate
     preheader size if needed.  Patch by Donghee Na.

   - gh-98836(10): Add support of more formatting options (left
     aligning, octals, uppercase hexadecimals, ‘intmax_t’, ‘ptrdiff_t’,
     ‘wchar_t’ C strings, variable width and precision) in *note
     PyUnicode_FromFormat(): 38a. and *note PyUnicode_FromFormatV():
     574.

   - gh-96803(11): Add unstable C-API functions to get the code object,
     lasti and line number from the internal ‘_PyInterpreterFrame’ in
     the limited API. The functions are:

        * ‘PyCodeObject * PyUnstable_InterpreterFrame_GetCode(struct
          _PyInterpreterFrame *frame)’

        * ‘int PyUnstable_InterpreterFrame_GetLasti(struct
          _PyInterpreterFrame *frame)’

        * ‘int PyUnstable_InterpreterFrame_GetLine(struct
          _PyInterpreterFrame *frame)’

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/101291

   (2) https://github.com/python/cpython/issues/104109

   (3) https://github.com/python/cpython/issues/103968

   (4) https://github.com/python/cpython/issues/103743

   (5) https://github.com/python/cpython/issues/103295

   (6) https://github.com/python/cpython/issues/103509

   (7) https://peps.python.org/pep-0697/

   (8) https://github.com/python/cpython/issues/103091

   (9) https://github.com/python/cpython/issues/101408

   (10) https://github.com/python/cpython/issues/98836

   (11) https://github.com/python/cpython/issues/96803


File: python.info,  Node: Python 3 12 0 alpha 7,  Next: Python 3 12 0 alpha 6,  Prev: Python 3 12 0 beta 1,  Up: Changelog

1.23.28 Python 3.12.0 alpha 7
-----------------------------

'Data de lançamento: 2023-04-04'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<38>.
* Biblioteca: Biblioteca<43>.
* Núcleo e embutidos: Núcleo e embutidos<39>.
* Construção: Construção<22>.
* Núcleo e embutidos: Núcleo e embutidos<40>.
* Biblioteca: Biblioteca<44>.
* Documentação: Documentação<18>.
* Testes: Testes<22>.
* Construção: Construção<23>.
* Windows: Windows<20>.
* Ferramentas/Demos: Ferramentas/Demos<14>.
* API C: API C<23>.


File: python.info,  Node: Núcleo e embutidos<38>,  Next: Biblioteca<43>,  Up: Python 3 12 0 alpha 7

1.23.28.1 Núcleo e embutidos
............................

   - gh-102192(1): Deprecated ‘_PyErr_ChainExceptions’ in favour of
     ‘_PyErr_ChainExceptions1’.

   - gh-89987(2): Reduce the number of inline *note CACHE: 6f9. entries
     for *note BINARY_SUBSCR: 1835.

   - gh-102859(3): Removed ‘JUMP_IF_FALSE_OR_POP’ and
     ‘JUMP_IF_TRUE_OR_POP’ instructions.

   - gh-101975(4): Fixed ‘stacktop’ value on tracing entries to avoid
     corruption on garbage collection.

   - gh-102778(5): Add *note sys.last_exc: 4be. and deprecate *note
     sys.last_type: 4bf, *note sys.last_value: 4c0. and *note
     sys.last_traceback: 4c1, which hold the same information in its
     legacy form.

   - gh-100982(6): Replace all occurrences of ‘COMPARE_AND_BRANCH’ with
     *note COMPARE_OP: 970.

   - gh-102701(7): Fix overflow when creating very large dict.

   - gh-102755(8): Add *note PyErr_DisplayException(): 402. which takes
     just an exception instance, to replace the legacy ‘PyErr_Display()’
     which takes the ‘(typ, exc, tb)’ triplet.

   - gh-102594(9): Add note to exception raised in ‘PyErr_SetObject’
     when normalization fails.

   - gh-90997(10): Shrink the number of inline *note CACHE: 6f9. entries
     used by *note LOAD_GLOBAL: 17dc.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102192

   (2) https://github.com/python/cpython/issues/89987

   (3) https://github.com/python/cpython/issues/102859

   (4) https://github.com/python/cpython/issues/101975

   (5) https://github.com/python/cpython/issues/102778

   (6) https://github.com/python/cpython/issues/100982

   (7) https://github.com/python/cpython/issues/102701

   (8) https://github.com/python/cpython/issues/102755

   (9) https://github.com/python/cpython/issues/102594

   (10) https://github.com/python/cpython/issues/90997


File: python.info,  Node: Biblioteca<43>,  Next: Núcleo e embutidos<39>,  Prev: Núcleo e embutidos<38>,  Up: Python 3 12 0 alpha 7

1.23.28.2 Biblioteca
....................

   - gh-102491(1): Improve import time of ‘platform’ by removing
     IronPython version parsing.  The IronPython version parsing was not
     functional (see
     ‘https://github.com/IronLanguages/ironpython3/issues/1667’).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102491


File: python.info,  Node: Núcleo e embutidos<39>,  Next: Construção<22>,  Prev: Biblioteca<43>,  Up: Python 3 12 0 alpha 7

1.23.28.3 Núcleo e embutidos
............................

   - gh-101291(1): Rearrage bits in first field (after header) of
     PyLongObject.  * Bits 0 and 1: 1 - sign.  I.e.  0 for positive
     numbers, 1 for zero and 2 for negative numbers.  * Bit 2 reserved
     (probably for the immortal bit) * Bits 3+ the unsigned size.

     This makes a few operations slightly more efficient, and will
     enable a more compact and faster 2s-complement representation of
     most ints in future.

   - gh-102397(2): Fix segfault from race condition in signal handling
     during garbage collection.  Patch by Kumar Aditya.

   - gh-102406(3): *note codecs: 1b. encoding/decoding errors now get
     the context information (which operation and which codecs) attached
     as PEP 678(4) notes instead of through chaining a new instance of
     the exception.

   - gh-102281(5): Fix potential nullptr dereference and use of
     uninitialized memory in fileutils.  Patch by Max Bachmann.

   - gh-102300(6): Reuse operands with refcount of 1 in float
     specializations of BINARY_OP.

   - gh-102213(7): Fix performance loss when accessing an object’s
     attributes with ‘__getattr__’ defined.

   - gh-102255(8): Improve build support for the Xbox.  Patch by Max
     Bachmann.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/101291

   (2) https://github.com/python/cpython/issues/102397

   (3) https://github.com/python/cpython/issues/102406

   (4) https://peps.python.org/pep-0678/

   (5) https://github.com/python/cpython/issues/102281

   (6) https://github.com/python/cpython/issues/102300

   (7) https://github.com/python/cpython/issues/102213

   (8) https://github.com/python/cpython/issues/102255


File: python.info,  Node: Construção<22>,  Next: Núcleo e embutidos<40>,  Prev: Núcleo e embutidos<39>,  Up: Python 3 12 0 alpha 7

1.23.28.4 Construção
....................

   - gh-102027(1): Fix SSE2 and SSE3 detection in ‘_blake2’ internal
     module.  Patch by Max Bachmann.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102027


File: python.info,  Node: Núcleo e embutidos<40>,  Next: Biblioteca<44>,  Prev: Construção<22>,  Up: Python 3 12 0 alpha 7

1.23.28.5 Núcleo e embutidos
............................

   - gh-101865(1): Deprecate ‘co_lnotab’ in code objects, schedule it
     for removal in Python 3.14

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/101865


File: python.info,  Node: Biblioteca<44>,  Next: Documentação<18>,  Prev: Núcleo e embutidos<40>,  Up: Python 3 12 0 alpha 7

1.23.28.6 Biblioteca
....................

   - bpo-1635741(1): Adapt ‘_pickle’ to PEP 687(2).  Patch by Mohamed
     Koubaa and Erlend Aasland.

   - gh-103085(3): Pure python *note locale.getencoding(): 2dc. will not
     warn deprecation.

   - gh-103068(4): It’s no longer possible to register conditional
     breakpoints in *note Pdb: 928. that raise *note SyntaxError: 18d.
     Patch by Tian Gao.

   - gh-102549(5): Don’t ignore exceptions in member type creation.

   - gh-103056(6): Ensure final ‘_generate_next_value_’ is a
     ‘staticmethod’.

   - gh-103046(7): Display current line label correctly in *note dis:
     38. when ‘show_caches’ is False and ‘lasti’ points to a CACHE
     entry.

   - gh-102433(8): *note isinstance(): 442. checks against *note
     runtime-checkable protocols: 443. now use *note
     inspect.getattr_static(): 494. rather than *note hasattr(): 4d2. to
     lookup whether attributes exist.  This means that descriptors and
     *note __getattr__(): 4d3. methods are no longer unexpectedly
     evaluated during ‘isinstance()’ checks against runtime-checkable
     protocols.  However, it may also mean that some objects which used
     to be considered instances of a runtime-checkable protocol may no
     longer be considered instances of that protocol on Python 3.12+,
     and vice versa.  Most users are unlikely to be affected by this
     change.  Patch by Alex Waygood.

   - gh-103023(9): It’s no longer possible to register expressions to
     display in *note Pdb: 928. that raise *note SyntaxError: 18d.
     Patch by Tian Gao.

   - gh-102947(10): Improve traceback when *note dataclasses.fields():
     183b. is called on a non-dataclass.  Patch by Alex Waygood

   - gh-102780(11): The *note asyncio.Timeout: 17bd. context manager now
     works reliably even when performing cleanup due to task
     cancellation.  Previously it could raise a *note CancelledError:
     1b8. instead of an *note TimeoutError: 183c. in such cases.

   - gh-102871(12): Remove support for obsolete browsers from *note
     webbrowser: 115.  Removed browsers include Grail, Mosaic, Netscape,
     Galeon, Skipstone, Iceape, Firebird, and Firefox versions 35 and
     below.

   - gh-102839(13): Improve performance of *note math.log(): 1508.
     arguments handling by removing the argument clinic.

   - gh-102828(14): Add the ‘onexc’ arg to *note shutil.rmtree(): 301,
     which is like ‘onerror’ but expects an exception instance rather
     than an exc_info tuple.  Deprecate ‘onerror’.

   - gh-88965(15): typing: Fix a bug relating to substitution in custom
     classes generic over a *note ParamSpec: 15e.  Previously, if the
     ‘ParamSpec’ was substituted with a parameters list that itself
     contained a *note TypeVar: 15d, the ‘TypeVar’ in the parameters
     list could not be subsequently substituted.  This is now fixed.

     Patch by Nikita Sobolev.

   - gh-76846(16): Fix issue where ‘__new__()’ and ‘__init__()’ methods
     of *note pathlib.PurePath: 4a6. and *note Path: 229. subclasses
     were not called in some circumstances.

   - gh-78530(17): *note asyncio.wait(): 47f. now accepts generators
     yielding tasks.  Patch by Kumar Aditya.

   - gh-102748(18): *note asyncio.iscoroutine(): 47e. now returns
     ‘False’ for generators as *note asyncio: a. does not support legacy
     generator-based coroutines.  Patch by Kumar Aditya.

   - gh-102670(19): Optimized fmean(), correlation(), covariance(), and
     linear_regression() using the new math.sumprod() function.

   - gh-102615(20): Typing: Improve the ‘repr’ of generic aliases for
     classes generic over a *note ParamSpec: 15e.  (Use square brackets
     to represent a parameter list.)

   - gh-100112(21): *note asyncio.Task.get_coro(): 9e4. now always
     returns a coroutine when wrapping an awaitable object.  Patch by
     Kumar Aditya.

   - gh-102578(22): Speed up setting or deleting mutable attributes on
     non-dataclass subclasses of frozen dataclasses.  Due to the
     implementation of ‘__setattr__’ and ‘__delattr__’ for frozen
     dataclasses, this previously had a time complexity of 'O'('n').  It
     now has a time complexity of 'O'(1).

   - gh-102519(23): Add *note os.listdrives(): 49d, *note
     os.listvolumes(): 49e. and *note os.listmounts(): 49f. functions on
     Windows for enumerating drives, volumes and mount points

   - gh-74468(24): Attribute name of the extracted *note tarfile: de.
     file object now holds filename of itself rather than of the archive
     it is contained in.  Patch by Oleg Iarygin.

   - gh-102378(25): Private helper method
     ‘inspect._signature_strip_non_python_syntax’ will no longer strip
     ‘/’ from the input string.

   - gh-79940(26): Add *note inspect.getasyncgenstate(): 492. and *note
     inspect.getasyncgenlocals(): 493.  Patch by Thomas Krennwallner.

   - gh-102103(27): Add ‘module’ argument to *note
     dataclasses.make_dataclass(): 183d. and make classes produced by it
     pickleable.

   - gh-102069(28): Fix ‘__weakref__’ descriptor generation for custom
     dataclasses.

   - gh-102038(29): Skip a ‘stat’ in *note site: c7. if we have already
     found a ‘pyvenv.cfg’

   - gh-98886(30): Fix issues when defining dataclasses that have fields
     with specific underscore names that aren’t clearly reserved by
     *note dataclasses: 2f.

   - gh-101673(31): Fix a *note pdb: a5. bug where ‘ll’ clears the
     changes to local variables.

   - gh-101313(32): Added -h and –help arguments to the webbrowser CLI

   - gh-100372(33): *note ssl.SSLContext.load_verify_locations(): f1d.
     no longer incorrectly accepts some cases of trailing data when
     parsing DER.

   - gh-89727(34): Fix pathlib.Path.walk RecursionError on deep
     directory trees by rewriting it using iteration instead of
     recursion.

   - gh-100131(35): Added an optional ‘delete’ keyword argument to *note
     tempfile.TemporaryDirectory: 1275.

   - gh-48330(36): Added ‘--durations’ command line option, showing the
     N slowest test cases.  *note unittest.TextTestRunner: 183e. and
     *note unittest.TextTestResult: 531. constructors accept a new
     'durations' keyword argument.  Subclasses should take this into
     account or accept ‘**kwargs’.  Added *note
     unittest.TestResult.addDuration(): 183f. method and *note
     unittest.TestResult.collectedDurations: 17fe. attribute.

     (Contribuição de Giampaolo Rodola)

   - gh-98169(37): Fix *note dataclasses.astuple(): 1822. crash when
     *note collections.defaultdict: 11fc. is present in the attributes.

   - gh-96931(38): Fix incorrect results from *note
     ssl.SSLSocket.shared_ciphers(): e9b.

   - gh-95495(39): When built against OpenSSL 3.0, the *note ssl: d0.
     module had a bug where it reported unauthenticated EOFs (i.e.
     without close_notify) as a clean TLS-level EOF. It now raises *note
     SSLEOFError: 1840, matching the behavior in previous versions of
     OpenSSL. The *note options: 83b. attribute on *note SSLContext:
     294. also no longer includes *note OP_IGNORE_UNEXPECTED_EOF: 83a.
     by default.  This option may be set to specify the previous OpenSSL
     3.0 behavior.

   - gh-94684(40): Now *note uuid.uuid3(): 1645. and *note uuid.uuid5():
     1647. functions support *note bytes: 1c2. objects as their 'name'
     argument.

   - gh-94440(41): Fix a ‘concurrent.futures.process’ bug where
     ‘ProcessPoolExecutor’ shutdown could hang after a future has been
     quickly submitted and canceled.

   - gh-72346(42): Added deprecation warning to 'isdst' parameter of
     *note email.utils.localtime(): 2c4.

   - bpo-36305(43): Fix handling of Windows filenames that resemble
     drives, such as ‘./a:b’, in *note pathlib: a4.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (2) https://peps.python.org/pep-0687/

   (3) https://github.com/python/cpython/issues/103085

   (4) https://github.com/python/cpython/issues/103068

   (5) https://github.com/python/cpython/issues/102549

   (6) https://github.com/python/cpython/issues/103056

   (7) https://github.com/python/cpython/issues/103046

   (8) https://github.com/python/cpython/issues/102433

   (9) https://github.com/python/cpython/issues/103023

   (10) https://github.com/python/cpython/issues/102947

   (11) https://github.com/python/cpython/issues/102780

   (12) https://github.com/python/cpython/issues/102871

   (13) https://github.com/python/cpython/issues/102839

   (14) https://github.com/python/cpython/issues/102828

   (15) https://github.com/python/cpython/issues/88965

   (16) https://github.com/python/cpython/issues/76846

   (17) https://github.com/python/cpython/issues/78530

   (18) https://github.com/python/cpython/issues/102748

   (19) https://github.com/python/cpython/issues/102670

   (20) https://github.com/python/cpython/issues/102615

   (21) https://github.com/python/cpython/issues/100112

   (22) https://github.com/python/cpython/issues/102578

   (23) https://github.com/python/cpython/issues/102519

   (24) https://github.com/python/cpython/issues/74468

   (25) https://github.com/python/cpython/issues/102378

   (26) https://github.com/python/cpython/issues/79940

   (27) https://github.com/python/cpython/issues/102103

   (28) https://github.com/python/cpython/issues/102069

   (29) https://github.com/python/cpython/issues/102038

   (30) https://github.com/python/cpython/issues/98886

   (31) https://github.com/python/cpython/issues/101673

   (32) https://github.com/python/cpython/issues/101313

   (33) https://github.com/python/cpython/issues/100372

   (34) https://github.com/python/cpython/issues/89727

   (35) https://github.com/python/cpython/issues/100131

   (36) https://github.com/python/cpython/issues/48330

   (37) https://github.com/python/cpython/issues/98169

   (38) https://github.com/python/cpython/issues/96931

   (39) https://github.com/python/cpython/issues/95495

   (40) https://github.com/python/cpython/issues/94684

   (41) https://github.com/python/cpython/issues/94440

   (42) https://github.com/python/cpython/issues/72346

   (43) https://bugs.python.org/issue?@action=redirect&bpo=36305


File: python.info,  Node: Documentação<18>,  Next: Testes<22>,  Prev: Biblioteca<44>,  Up: Python 3 12 0 alpha 7

1.23.28.7 Documentação
......................

   - gh-103112(1): Add docstring to *note
     http.client.HTTPResponse.read(): 1669. to fix ‘pydoc’ output.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/103112


File: python.info,  Node: Testes<22>,  Next: Construção<23>,  Prev: Documentação<18>,  Up: Python 3 12 0 alpha 7

1.23.28.8 Testes
................

   - gh-102980(1): Improve test coverage on *note pdb: a5.

   - gh-102537(2): Adjust the error handling strategy in
     ‘test_zoneinfo.TzPathTest.python_tzpath_context’.  Patch by Paul
     Ganssle.

   - gh-101377(3): Improved test_locale_calendar_formatweekday of
     calendar.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102980

   (2) https://github.com/python/cpython/issues/102537

   (3) https://github.com/python/cpython/issues/101377


File: python.info,  Node: Construção<23>,  Next: Windows<20>,  Prev: Testes<22>,  Up: Python 3 12 0 alpha 7

1.23.28.9 Construção
....................

   - gh-102973(1): Add a dev container (along with accompanying
     Dockerfile) for development purposes.

   - gh-102711(2): Fix ‘-Wstrict-prototypes’ compiler warnings.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102973

   (2) https://github.com/python/cpython/issues/102711


File: python.info,  Node: Windows<20>,  Next: Ferramentas/Demos<14>,  Prev: Construção<23>,  Up: Python 3 12 0 alpha 7

1.23.28.10 Windows
..................

   - gh-102690(1): Update *note webbrowser: 115. to fall back to
     Microsoft Edge instead of Internet Explorer.

   - gh-99726(2): Improves correctness of stat results for Windows, and
     uses faster API when available

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102690

   (2) https://github.com/python/cpython/issues/99726


File: python.info,  Node: Ferramentas/Demos<14>,  Next: API C<23>,  Prev: Windows<20>,  Up: Python 3 12 0 alpha 7

1.23.28.11 Ferramentas/Demos
............................

   - gh-102809(1): ‘Misc/gdbinit’ was removed.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102809


File: python.info,  Node: API C<23>,  Prev: Ferramentas/Demos<14>,  Up: Python 3 12 0 alpha 7

1.23.28.12 API C
................

   - gh-102013(1): Add a new (unstable) C-API function for iterating
     over GC’able objects using a callback: ‘PyUnstable_VisitObjects’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102013


File: python.info,  Node: Python 3 12 0 alpha 6,  Next: Python 3 12 0 alpha 5,  Prev: Python 3 12 0 alpha 7,  Up: Changelog

1.23.29 Python 3.12.0 alpha 6
-----------------------------

'Data de lançamento: 2023-03-07'

* Menu:

* Segurança: Segurança<19>.
* Núcleo e embutidos: Núcleo e embutidos<41>.
* Biblioteca: Biblioteca<45>.
* Documentação: Documentação<19>.
* Testes: Testes<23>.
* Construção: Construção<24>.
* Windows: Windows<21>.
* macOS: macOS<15>.
* API C: API C<24>.


File: python.info,  Node: Segurança<19>,  Next: Núcleo e embutidos<41>,  Up: Python 3 12 0 alpha 6

1.23.29.1 Segurança
...................

   - gh-99108(1): Replace builtin hashlib implementations of MD5 and
     SHA1 with verified ones from the HACL* project.

   - gh-101727(2): Updated the OpenSSL version used in Windows and macOS
     binary release builds to 1.1.1t to address CVE 2023-0286(3), CVE
     2022-4303(4), and CVE 2022-4303(5) per the OpenSSL 2023-02-07
     security advisory(6).

   - gh-99108(7): Replace the builtin *note hashlib: 68. implementations
     of SHA2-384 and SHA2-512 originally from LibTomCrypt with formally
     verified, side-channel resistant code from the HACL*(8) project.
     The builtins remain a fallback only used when OpenSSL does not
     provide them.

   - gh-101283(9): *note subprocess.Popen: 199. now uses a safer
     approach to find ‘cmd.exe’ when launching with ‘shell=True’.  Patch
     by Eryk Sun, based on a patch by Oleg Iarygin.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99108

   (2) https://github.com/python/cpython/issues/101727

   (3) https://www.cve.org/CVERecord?id=CVE-2023-0286

   (4) https://www.cve.org/CVERecord?id=CVE-2022-4303

   (5) https://www.cve.org/CVERecord?id=CVE-2022-4303

   (6) https://openssl-library.org/news/secadv/20230207.txt

   (7) https://github.com/python/cpython/issues/99108

   (8) https://github.com/hacl-star/hacl-star/

   (9) https://github.com/python/cpython/issues/101283


File: python.info,  Node: Núcleo e embutidos<41>,  Next: Biblioteca<45>,  Prev: Segurança<19>,  Up: Python 3 12 0 alpha 6

1.23.29.2 Núcleo e embutidos
............................

   - gh-102493(1): Fix regression in semantics of normalisation in
     ‘PyErr_SetObject’.

   - gh-102416(2): Do not memoize incorrectly automatically generated
     loop rules in the parser.  Patch by Pablo Galindo.

   - gh-102356(3): Fix a bug that caused a crash when deallocating
     deeply nested filter objects.  Patch by Marta Gómez Macías.

   - gh-102336(4): Cleanup Windows 7 specific special handling.  Patch
     by Max Bachmann.

   - gh-102250(5): Fixed a segfault occurring when the interpreter calls
     a ‘__bool__’ method that raises.

   - gh-102126(6): Fix deadlock at shutdown when clearing thread states
     if any finalizer tries to acquire the runtime head lock.  Patch by
     Kumar Aditya.

   - gh-102027(7): Use ‘GetCurrentProcessId’ on Windows when ‘getpid’ is
     unavailable.  Patch by Max Bachmann.

   - gh-102056(8): Fix error handling bugs in interpreter’s exception
     printing code, which could cause a crash on infinite recursion.

   - gh-100982(9): Restrict the scope of the ‘FOR_ITER_RANGE’
     instruction to the scope of the original *note FOR_ITER: 184a.
     instruction, to allow instrumentation.

   - gh-101967(10): Fix possible segfault in
     ‘positional_only_passed_as_keyword’ function, when new list
     created.

   - gh-101952(11): Fix possible segfault in ‘BUILD_SET’ opcode, when
     new set created.

   - gh-74895(12): *note socket.getaddrinfo: 184b. no longer raises
     *note OverflowError: 885. for *note int: 257. 'port' values outside
     of the C long range.  Out of range values are left up to the
     underlying string based C library API to report.  A *note
     socket.gaierror: 184c. ‘SAI_SERVICE’ may occur instead, or no error
     at all as not all platform C libraries generate an error.

   - gh-101799(13): Add *note CALL_INTRINSIC_2: 4e2. and use it instead
     of ‘PREP_RERAISE_STAR’.

   - gh-101857(14): Fix xattr support detection on Linux systems by
     widening the check to linux, not just glibc.  This fixes support
     for musl.

   - gh-84783(15): Make the slice object hashable.  Patch by Will
     Bradshaw and Furkan Onder.

   - gh-87849(16): Change the ‘SEND’ instruction to leave the receiver
     on the stack.  This allows the specialized form of ‘SEND’ to skip
     the chain of C calls and jump directly to the ‘RESUME’ in the
     generator or coroutine.

   - gh-101765(17): Fix SystemError / segmentation fault in iter
     ‘__reduce__’ when internal access of ‘builtins.__dict__’ keys
     mutates the iter object.

   - gh-101430(18): Update *note tracemalloc: ff. to handle presize of
     object properly.  Patch by Donghee Na.

   - gh-101696(19): Invalidate type version tag in
     ‘_PyStaticType_Dealloc’ for static types, avoiding bug where a
     false cache hit could crash the interpreter.  Patch by Kumar
     Aditya.

   - gh-101632(20): Adds a new *note RETURN_CONST: 4e9. instruction.

   - gh-100719(21): Remove gi_code field from generator (and coroutine
     and async generator) objects as it is redundant.  The frame already
     includes a reference to the code object.

   - gh-98627(22): When an interpreter is configured to check (and only
     then), importing an extension module will now fail when the
     extension does not support multiple interpreters (i.e.  doesn’t
     implement PEP 489 multi-phase init).  This does not apply to the
     main interpreter, nor to subinterpreters created with
     ‘Py_NewInterpreter()’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102493

   (2) https://github.com/python/cpython/issues/102416

   (3) https://github.com/python/cpython/issues/102356

   (4) https://github.com/python/cpython/issues/102336

   (5) https://github.com/python/cpython/issues/102250

   (6) https://github.com/python/cpython/issues/102126

   (7) https://github.com/python/cpython/issues/102027

   (8) https://github.com/python/cpython/issues/102056

   (9) https://github.com/python/cpython/issues/100982

   (10) https://github.com/python/cpython/issues/101967

   (11) https://github.com/python/cpython/issues/101952

   (12) https://github.com/python/cpython/issues/74895

   (13) https://github.com/python/cpython/issues/101799

   (14) https://github.com/python/cpython/issues/101857

   (15) https://github.com/python/cpython/issues/84783

   (16) https://github.com/python/cpython/issues/87849

   (17) https://github.com/python/cpython/issues/101765

   (18) https://github.com/python/cpython/issues/101430

   (19) https://github.com/python/cpython/issues/101696

   (20) https://github.com/python/cpython/issues/101632

   (21) https://github.com/python/cpython/issues/100719

   (22) https://github.com/python/cpython/issues/98627


File: python.info,  Node: Biblioteca<45>,  Next: Documentação<19>,  Prev: Núcleo e embutidos<41>,  Up: Python 3 12 0 alpha 6

1.23.29.3 Biblioteca
....................

   - gh-102302(1): Micro-optimise hashing of *note inspect.Parameter:
     1d0, reducing the time it takes to hash an instance by around 40%.

   - gh-101979(2): Fix a bug where parentheses in the ‘metavar’ argument
     to *note argparse.ArgumentParser.add_argument(): 19e. were dropped.
     Patch by Yeojin Kim.

   - gh-91038(3): *note platform.platform(): 184e. now has boolean
     default arguments.

   - gh-81652(4): Add *note mmap.MAP_ALIGNED_SUPER: 184f. FreeBSD and
     *note mmap.MAP_CONCEAL: 1850. OpenBSD constants to *note mmap: 90.
     Patch by Yeojin Kim.

   - gh-102179(5): Fix *note os.dup2(): b79. error message for negative
     fds.

   - gh-101961(6): For the binary mode, ‘fileinput.hookcompressed()’
     doesn’t set the ‘encoding’ value even if the value is ‘None’.
     Patch by Gihwan Kim.

   - gh-101936(7): The default value of ‘fp’ becomes *note io.BytesIO:
     ed3. if *note HTTPError: 1014. is initialized without a designated
     ‘fp’ parameter.  Patch by Long Vo.

   - gh-101566(8): In zipfile, sync Path with zipp 3.14(9), including
     fix for extractall on the underlying zipfile after being wrapped in
     ‘Path’.

   - gh-97930(10): Apply changes from importlib_resources 5.12(11),
     including fix for ‘MultiplexedPath’ to support directories in
     multiple namespaces (python/importlib_resources#265).

   - gh-101997(12): Upgrade pip wheel bundled with ensurepip (pip
     23.0.1)

   - gh-99108(13): The built-in extension modules for *note hashlib: 68.
     SHA2 algorithms, used when OpenSSL does not provide them, now live
     in a single internal ‘_sha2’ module instead of separate ‘_sha256’
     and ‘_sha512’ modules.

   - gh-101892(14): Callable iterators no longer raise *note
     SystemError: 575. when the callable object exhausts the iterator
     but forgets to either return a sentinel value or raise *note
     StopIteration: c15.

   - gh-87634(15): Remove locking behavior from *note
     functools.cached_property(): 541.

   - gh-97786(16): Fix potential undefined behaviour in corner cases of
     floating-point-to-time conversions.

   - gh-101517(17): Fixed bug where *note bdb: f. looks up the source
     line with *note linecache: 85. with a ‘lineno=None’, which causes
     it to fail with an unhandled exception.

   - gh-101773(18): Optimize *note fractions.Fraction: 1e7. for small
     components.  The private argument ‘_normalize’ of the *note
     fractions.Fraction: 1e7. constructor has been removed.

   - gh-101693(19): In *note sqlite3.Cursor.execute(): 2d1, *note
     DeprecationWarning: 1a5. is now emitted when *note named
     placeholders: 2d3. are used together with parameters supplied as a
     *note sequence: 4f1. instead of as a *note dict: 256.  Starting
     from Python 3.14, using named placeholders with parameters supplied
     as a sequence will raise a *note ProgrammingError: 4f2.  Patch by
     Erlend E. Aasland.

   - gh-101446(20): Change repr of *note collections.OrderedDict: 5db.
     to use regular dictionary formatting instead of pairs of keys and
     values.

   - gh-101362(21): Speed up *note pathlib.PurePath: 4a6. construction
     by handling arguments more uniformly.  When a *note pathlib.Path:
     229. argument is supplied, we use its string representation rather
     than joining its parts with *note os.path.join(): 171f.

   - gh-101362(22): Speed up *note pathlib.PurePath: 4a6. construction
     by calling *note os.path.join(): 171f. only when two or more
     arguments are given.

   - gh-101362(23): Speed up *note pathlib.Path: 229. construction by
     running the path flavour compatibility check only when pathlib is
     imported.

   - gh-85984(24): Refactored the implementation of *note pty.fork():
     1851. to use *note os.login_tty(): 1852.

     A *note DeprecationWarning: 1a5. is now raised by
     ‘pty.master_open()’ and ‘pty.slave_open()’.  They were undocumented
     and deprecated long long ago in the docstring in favor of *note
     pty.openpty(): 2ce.

   - gh-101561(25): Add a new decorator *note typing.override(): 44b.
     See PEP 698(26) for details.  Patch by Steven Troxler.

   - gh-63301(27): Set exit code when *note tabnanny: dd. CLI exits on
     error.

   - gh-101360(28): Fix anchor matching in
     ‘pathlib.PureWindowsPath.match()’.  Path and pattern anchors are
     now matched with *note fnmatch: 5c, just like other path parts.
     This allows patterns such as ‘"*:/Users/*"’ to be matched.

   - gh-101277(29): Remove global state from *note itertools: 81. module
     ( PEP 687(30)).  Patches by Erlend E. Aasland.

   - gh-100809(31): Fix handling of drive-relative paths (like ‘C:’ and
     ‘C:foo’) in *note pathlib.Path.absolute(): 17a2.  This method now
     uses the OS API to retrieve the correct current working directory
     for the drive.

   - gh-99138(32): Apply PEP 687(33) to *note zoneinfo: 134.  Patch by
     Erlend E. Aasland.

   - gh-96764(34): *note asyncio.wait_for(): 5ff. now uses *note
     asyncio.timeout(): 5fe. as its underlying implementation.  Patch by
     Kumar Aditya.

   - gh-88233(35): Correctly preserve “extra” fields in ‘zipfile’
     regardless of their ordering relative to a zip64 “extra.”

   - bpo-23224(36): Fix segfaults when creating *note
     lzma.LZMADecompressor: 1853. and *note bz2.BZ2Decompressor: 1854.
     objects without calling ‘__init__()’, and fix leakage of locks and
     internal buffers when calling the ‘__init__()’ methods of *note
     lzma.LZMADecompressor: 1853, *note lzma.LZMACompressor: 1855, *note
     bz2.BZ2Compressor: 1856, and *note bz2.BZ2Decompressor: 1854.
     objects multiple times.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102302

   (2) https://github.com/python/cpython/issues/101979

   (3) https://github.com/python/cpython/issues/91038

   (4) https://github.com/python/cpython/issues/81652

   (5) https://github.com/python/cpython/issues/102179

   (6) https://github.com/python/cpython/issues/101961

   (7) https://github.com/python/cpython/issues/101936

   (8) https://github.com/python/cpython/issues/101566

   (9) https://zipp.readthedocs.io/en/latest/history.html#v3-14-0

   (10) https://github.com/python/cpython/issues/97930

   (11) 
https://importlib-resources.readthedocs.io/en/latest/history.html#v5-12-0

   (12) https://github.com/python/cpython/issues/101997

   (13) https://github.com/python/cpython/issues/99108

   (14) https://github.com/python/cpython/issues/101892

   (15) https://github.com/python/cpython/issues/87634

   (16) https://github.com/python/cpython/issues/97786

   (17) https://github.com/python/cpython/issues/101517

   (18) https://github.com/python/cpython/issues/101773

   (19) https://github.com/python/cpython/issues/101693

   (20) https://github.com/python/cpython/issues/101446

   (21) https://github.com/python/cpython/issues/101362

   (22) https://github.com/python/cpython/issues/101362

   (23) https://github.com/python/cpython/issues/101362

   (24) https://github.com/python/cpython/issues/85984

   (25) https://github.com/python/cpython/issues/101561

   (26) https://peps.python.org/pep-0698/

   (27) https://github.com/python/cpython/issues/63301

   (28) https://github.com/python/cpython/issues/101360

   (29) https://github.com/python/cpython/issues/101277

   (30) https://peps.python.org/pep-0687/

   (31) https://github.com/python/cpython/issues/100809

   (32) https://github.com/python/cpython/issues/99138

   (33) https://peps.python.org/pep-0687/

   (34) https://github.com/python/cpython/issues/96764

   (35) https://github.com/python/cpython/issues/88233

   (36) https://bugs.python.org/issue?@action=redirect&bpo=23224


File: python.info,  Node: Documentação<19>,  Next: Testes<23>,  Prev: Biblioteca<45>,  Up: Python 3 12 0 alpha 6

1.23.29.4 Documentação
......................

   - gh-85417(1): Update *note cmath: 18. documentation to clarify
     behaviour on branch cuts.

   - gh-97725(2): Fix *note asyncio.Task.print_stack(): 1858.
     description for ‘file=None’.  Patch by Oleg Iarygin.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/85417

   (2) https://github.com/python/cpython/issues/97725


File: python.info,  Node: Testes<23>,  Next: Construção<24>,  Prev: Documentação<19>,  Up: Python 3 12 0 alpha 6

1.23.29.5 Testes
................

   - gh-102019(1): Fix deadlock on shutdown if
     ‘test_current_{exception,frames}’ fails.  Patch by Jacob Bower.

   - gh-85984(2): Utilize new “winsize” functions from termios in pty
     tests.

   - gh-89792(3): ‘test_tools’ now copies up to 10x less source data to
     a temporary directory during the ‘freeze’ test by ignoring git
     metadata and other artifacts.  It also limits its python build
     parallelism based on os.cpu_count instead of hard coding it as 8
     cores.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102019

   (2) https://github.com/python/cpython/issues/85984

   (3) https://github.com/python/cpython/issues/89792


File: python.info,  Node: Construção<24>,  Next: Windows<21>,  Prev: Testes<23>,  Up: Python 3 12 0 alpha 6

1.23.29.6 Construção
....................

   - gh-99942(1): On Android, in a static build, python-config in embed
     mode no longer incorrectly reports a library to link to.

   - gh-99942(2): On Android, python.pc now correctly reports the
     library to link to, the same as python-config.sh.

   - gh-100221(3): Fix creating install directories in ‘make
     sharedinstall’ if they exist outside ‘DESTDIR’ already.

   - gh-96821(4): Explicitly mark C extension modules that need defined
     signed integer overflow, and add a configure option *note
     -with-strict-overflow: 185b.  Patch by Matthias Görgens and
     Shantanu Jain.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99942

   (2) https://github.com/python/cpython/issues/99942

   (3) https://github.com/python/cpython/issues/100221

   (4) https://github.com/python/cpython/issues/96821


File: python.info,  Node: Windows<21>,  Next: macOS<15>,  Prev: Construção<24>,  Up: Python 3 12 0 alpha 6

1.23.29.7 Windows
.................

   - gh-102344(1): Implement ‘winreg.QueryValue’ using ‘QueryValueEx’
     and ‘winreg.SetValue’ using ‘SetValueEx’.  Patch by Max Bachmann.

   - gh-101881(2): Handle read and write operations on non-blocking
     pipes properly on Windows.

   - gh-101881(3): Add support for the os.get_blocking() and
     os.set_blocking() functions on Windows.

   - gh-101849(4): Ensures installer will correctly upgrade existing
     ‘py.exe’ launcher installs.

   - gh-101763(5): Updates copy of libffi bundled with Windows installs
     to 3.4.4.

   - gh-101759(6): Update Windows installer to SQLite 3.40.1.

   - gh-101614(7): Correctly handle extensions built against debug
     binaries that reference ‘python3_d.dll’.

   - gh-101196(8): The functions ‘os.path.isdir’, ‘os.path.isfile’,
     ‘os.path.islink’ and ‘os.path.exists’ are now 13% to 28% faster on
     Windows, by making fewer Win32 API calls.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/102344

   (2) https://github.com/python/cpython/issues/101881

   (3) https://github.com/python/cpython/issues/101881

   (4) https://github.com/python/cpython/issues/101849

   (5) https://github.com/python/cpython/issues/101763

   (6) https://github.com/python/cpython/issues/101759

   (7) https://github.com/python/cpython/issues/101614

   (8) https://github.com/python/cpython/issues/101196


File: python.info,  Node: macOS<15>,  Next: API C<24>,  Prev: Windows<21>,  Up: Python 3 12 0 alpha 6

1.23.29.8 macOS
...............

   - gh-101759(1): Update macOS installer to SQLite 3.40.1.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/101759


File: python.info,  Node: API C<24>,  Prev: macOS<15>,  Up: Python 3 12 0 alpha 6

1.23.29.9 API C
...............

   - gh-101907(1): Removes use of non-standard C++ extension in public
     header files.

   - gh-99293(2): Document that the Py_TPFLAGS_VALID_VERSION_TAG is an
     internal feature, should not be used, and will be removed.

   - gh-101578(3): Add *note PyErr_GetRaisedException(): 3f4. and *note
     PyErr_SetRaisedException(): 3f7. for saving and restoring the
     current exception.  These functions return and accept a single
     exception object, rather than the triple arguments of the
     now-deprecated *note PyErr_Fetch(): 3f3. and *note PyErr_Restore():
     3f6.  This is less error prone and a bit more efficient.

     Add *note PyException_GetArgs(): 56a. and *note
     PyException_SetArgs(): 56b. as convenience functions for retrieving
     and modifying the *note args: 56c. passed to the exception’s
     constructor.

   - gh-91744(4): Introduced the 'Unstable C API tier', marking APi that
     is allowed to change in minor releases without a deprecation
     period.  See PEP 689(5) for details.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/101907

   (2) https://github.com/python/cpython/issues/99293

   (3) https://github.com/python/cpython/issues/101578

   (4) https://github.com/python/cpython/issues/91744

   (5) https://peps.python.org/pep-0689/


File: python.info,  Node: Python 3 12 0 alpha 5,  Next: Python 3 12 0 alpha 4,  Prev: Python 3 12 0 alpha 6,  Up: Changelog

1.23.30 Python 3.12.0 alpha 5
-----------------------------

'Data de lançamento: 2023-02-07'

* Menu:

* Segurança: Segurança<20>.
* Núcleo e embutidos: Núcleo e embutidos<42>.
* Biblioteca: Biblioteca<46>.
* Documentação: Documentação<20>.
* Testes: Testes<24>.
* Construção: Construção<25>.
* Windows: Windows<22>.


File: python.info,  Node: Segurança<20>,  Next: Núcleo e embutidos<42>,  Up: Python 3 12 0 alpha 5

1.23.30.1 Segurança
...................

   - gh-99108(1): Replace the builtin *note hashlib: 68. implementations
     of SHA2-224 and SHA2-256 originally from LibTomCrypt with formally
     verified, side-channel resistant code from the HACL*(2) project.
     The builtins remain a fallback only used when OpenSSL does not
     provide them.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99108

   (2) https://github.com/hacl-star/hacl-star/


File: python.info,  Node: Núcleo e embutidos<42>,  Next: Biblioteca<46>,  Prev: Segurança<20>,  Up: Python 3 12 0 alpha 5

1.23.30.2 Núcleo e embutidos
............................

   - gh-92173(1): Fix the ‘defs’ and ‘kwdefs’ arguments to *note
     PyEval_EvalCodeEx(): 1862. and a reference leak in that function.

   - gh-59956(2): The GILState API is now partially compatible with
     subinterpreters.  Previously, ‘PyThreadState_GET()’ and
     ‘PyGILState_GetThisThreadState()’ would get out of sync, causing
     inconsistent behavior and crashes.

   - gh-101400(3): Fix wrong lineno in exception message on *note
     continue: 9d1. or *note break: ab8. which are not in a loop.  Patch
     by Donghee Na.

   - gh-101372(4): Fix *note is_normalized(): a51. to properly handle
     the UCD 3.2.0 cases.  Patch by Donghee Na.

   - gh-101266(5): Fix *note sys.getsizeof(): 1863. reporting for *note
     int: 257. subclasses.

   - gh-101291(6): Refactor the ‘PyLongObject’ struct into a normal
     Python object header and a ‘PyLongValue’ struct.

   - gh-101046(7): Fix a possible memory leak in the parser when raising
     *note MemoryError: 15c5.  Patch by Pablo Galindo

   - gh-101037(8): Fix potential memory underallocation issue for
     instances of *note int: 257. subclasses with value zero.

   - gh-100762(9): Record the (virtual) exception block depth in the
     oparg of *note YIELD_VALUE: 314.  Use this to avoid the expensive
     ‘throw()’ when closing generators (and coroutines) that can be
     closed trivially.

   - gh-100982(10): Adds a new ‘COMPARE_AND_BRANCH’ instruction.  This
     is a bit more efficient when performing a comparison immediately
     followed by a branch, and restores the design intent of PEP 659
     that specializations are local to a single instruction.

   - gh-100942(11): Fixed segfault in property.getter/setter/deleter
     that occurred when a property subclass overrode the ‘__new__’
     method to return a non-property instance.

   - gh-100923(12): Remove the ‘mask’ cache entry for the *note
     COMPARE_OP: 970. instruction and embed the mask into the oparg.

   - gh-100892(13): Fix race while iterating over thread states in
     clearing *note threading.local: 1631.  Patch by Kumar Aditya.

   - gh-91351(14): Fix a case where re-entrant imports could corrupt the
     import deadlock detection code and cause a *note KeyError: 344. to
     be raised out of ‘importlib/_bootstrap’.  In addition to the
     straightforward cases, this could also happen when garbage
     collection leads to a warning being emitted – as happens when it
     collects an open socket or file)

   - gh-100726(15): Optimize construction of ‘range’ object for medium
     size integers.

   - gh-100712(16): Added option to build cpython with specialization
     disabled, by setting ‘ENABLE_SPECIALIZATION=False’ in ‘opcode’,
     followed by ‘make regen-all’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/92173

   (2) https://github.com/python/cpython/issues/59956

   (3) https://github.com/python/cpython/issues/101400

   (4) https://github.com/python/cpython/issues/101372

   (5) https://github.com/python/cpython/issues/101266

   (6) https://github.com/python/cpython/issues/101291

   (7) https://github.com/python/cpython/issues/101046

   (8) https://github.com/python/cpython/issues/101037

   (9) https://github.com/python/cpython/issues/100762

   (10) https://github.com/python/cpython/issues/100982

   (11) https://github.com/python/cpython/issues/100942

   (12) https://github.com/python/cpython/issues/100923

   (13) https://github.com/python/cpython/issues/100892

   (14) https://github.com/python/cpython/issues/91351

   (15) https://github.com/python/cpython/issues/100726

   (16) https://github.com/python/cpython/issues/100712


File: python.info,  Node: Biblioteca<46>,  Next: Documentação<20>,  Prev: Núcleo e embutidos<42>,  Up: Python 3 12 0 alpha 5

1.23.30.3 Biblioteca
....................

   - bpo-32780(1): Inter-field padding is now inserted into the PEP3118
     format strings obtained from *note ctypes.Structure: 1d4. objects,
     reflecting their true representation in memory.

   - gh-101541(2): [Enum] - fix psuedo-flag creation

   - gh-101570(3): Upgrade pip wheel bundled with ensurepip (pip 23.0)

   - gh-101323(4): Fix a bug where errors where not thrown by
     zlib._ZlibDecompressor if encountered during decompressing.

   - gh-101317(5): Add 'ssl_shutdown_timeout' parameter for *note
     asyncio.StreamWriter.start_tls(): 604.

   - gh-101326(6): Fix regression when passing ‘None’ as second or third
     argument to ‘FutureIter.throw’.

   - gh-92123(7): Adapt the ‘_elementtree’ extension module to
     multi-phase init ( PEP 489(8)).  Patches by Erlend E. Aasland.

   - gh-100795(9): Avoid potential unexpected ‘freeaddrinfo’ call
     (double free) in *note socket: cc. when when a libc ‘getaddrinfo()’
     implementation leaves garbage in an output pointer when returning
     an error.  Original patch by Sergey G. Brester.

   - gh-101143(10): Remove unused references to *note TimerHandle: 1865.
     in ‘asyncio.base_events.BaseEventLoop._add_callback’.

   - gh-101144(11): Make *note zipfile.Path.open(): 1680. and *note
     zipfile.Path.read_text(): 1866. also accept ‘encoding’ as a
     positional argument.  This was the behavior in Python 3.9 and
     earlier.  3.10 introduced a regression where supplying it as a
     positional argument would lead to a *note TypeError: 2c3.

   - gh-94518(12): Group-related variables of ‘_posixsubprocess’ module
     are renamed to stress that supplementary group affinity is added to
     a fork, not replace the inherited ones.  Patch by Oleg Iarygin.

   - gh-101015(13): Fix *note typing.get_type_hints(): 6b1. on
     ‘'*tuple[...]'’ and ‘*tuple[...]’.  It must not drop the ‘Unpack’
     part.

   - gh-101000(14): Add *note os.path.splitroot(): 4a4, which splits a
     path into a 3-item tuple ‘(drive, root, tail)’.  This new function
     is used by *note pathlib: a4. to improve the performance of path
     construction by up to a third.

   - gh-100573(15): Fix a Windows *note asyncio: a. bug with named pipes
     where a client doing ‘os.stat()’ on the pipe would cause an error
     in the server that disabled serving future requests.

   - gh-39615(16): *note warnings.warn(): 1562. now has the ability to
     skip stack frames based on code filename prefix rather than only a
     numeric ‘stacklevel’ via the new ‘skip_file_prefixes’ keyword
     argument.

   - gh-100750(17): pass encoding kwarg to subprocess in platform

   - gh-100160(18): Emit a deprecation warning in
     ‘asyncio.DefaultEventLoopPolicy.get_event_loop()’ if there is no
     current event loop set and it decides to create one.

   - gh-96290(19): Fix handling of partial and invalid UNC drives in
     ‘ntpath.splitdrive()’, and in ‘ntpath.normpath()’ on non-Windows
     systems.  Paths such as ‘\server’ and ‘\’ are now considered by
     ‘splitdrive()’ to contain only a drive, and consequently are not
     modified by ‘normpath()’ on non-Windows systems.  The behaviour of
     ‘normpath()’ on Windows systems is unaffected, as native OS APIs
     are used.  Patch by Eryk Sun, with contributions by Barney Gale.

   - gh-99952(20): Fix a reference undercounting issue in *note
     ctypes.Structure: 1d4. with ‘from_param()’ results larger than a C
     pointer.

   - gh-67790(21): Add float-style formatting support for *note
     fractions.Fraction: 1e7. instances.

   - gh-99266(22): Preserve more detailed error messages in *note
     ctypes: 2a.

   - gh-86682(23): Ensure runtime-created collections have the correct
     module name using the newly added (internal) *note
     sys._getframemodulename(): 1867.

   - gh-88597(24): *note uuid: 110. now has a command line interface.
     Try ‘python -m uuid -h’.

   - gh-60580(25): ‘ctypes.wintypes.BYTE’ definition changed from *note
     c_byte: 1868. to *note c_ubyte: 1869. to match Windows SDK. Patch
     by Anatoly Techtonik and Oleg Iarygin.

   - gh-94518(26): ‘_posixsubprocess’ now initializes all UID and GID
     variables using a reserved ‘-1’ value instead of a separate flag.
     Patch by Oleg Iarygin.

   - bpo-38941(27): The *note xml.etree.ElementTree: 125. module now
     emits *note DeprecationWarning: 1a5. when testing the truth value
     of an *note xml.etree.ElementTree.Element: 310.  Before, the Python
     implementation emitted *note FutureWarning: 415, and the C
     implementation emitted nothing.

   - bpo-40077(28): Convert ‘elementtree’ types to heap types.  Patch by
     Erlend E. Aasland.

   - bpo-29847(29): Fix a bug where *note pathlib.Path: 229. accepted
     and ignored keyword arguments.  Patch provided by Yurii Karabas.

   - gh-77772(30): *note ctypes.CDLL: 9f1, *note ctypes.OleDLL: 186a,
     *note ctypes.WinDLL: 186b, and *note ctypes.PyDLL: 186c. now accept
     *note path-like objects: 2a0. as their ‘name’ argument.  Patch by
     Robert Hoelzl.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32780

   (2) https://github.com/python/cpython/issues/101541

   (3) https://github.com/python/cpython/issues/101570

   (4) https://github.com/python/cpython/issues/101323

   (5) https://github.com/python/cpython/issues/101317

   (6) https://github.com/python/cpython/issues/101326

   (7) https://github.com/python/cpython/issues/92123

   (8) https://peps.python.org/pep-0489/

   (9) https://github.com/python/cpython/issues/100795

   (10) https://github.com/python/cpython/issues/101143

   (11) https://github.com/python/cpython/issues/101144

   (12) https://github.com/python/cpython/issues/94518

   (13) https://github.com/python/cpython/issues/101015

   (14) https://github.com/python/cpython/issues/101000

   (15) https://github.com/python/cpython/issues/100573

   (16) https://github.com/python/cpython/issues/39615

   (17) https://github.com/python/cpython/issues/100750

   (18) https://github.com/python/cpython/issues/100160

   (19) https://github.com/python/cpython/issues/96290

   (20) https://github.com/python/cpython/issues/99952

   (21) https://github.com/python/cpython/issues/67790

   (22) https://github.com/python/cpython/issues/99266

   (23) https://github.com/python/cpython/issues/86682

   (24) https://github.com/python/cpython/issues/88597

   (25) https://github.com/python/cpython/issues/60580

   (26) https://github.com/python/cpython/issues/94518

   (27) https://bugs.python.org/issue?@action=redirect&bpo=38941

   (28) https://bugs.python.org/issue?@action=redirect&bpo=40077

   (29) https://bugs.python.org/issue?@action=redirect&bpo=29847

   (30) https://github.com/python/cpython/issues/77772


File: python.info,  Node: Documentação<20>,  Next: Testes<24>,  Prev: Biblioteca<46>,  Up: Python 3 12 0 alpha 5

1.23.30.4 Documentação
......................

   - gh-88324(1): Reword *note subprocess: d6. to emphasize default
     behavior of 'stdin', 'stdout', and 'stderr' arguments.  Remove
     inaccurate statement about child file handle inheritance.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/88324


File: python.info,  Node: Testes<24>,  Next: Construção<25>,  Prev: Documentação<20>,  Up: Python 3 12 0 alpha 5

1.23.30.5 Testes
................

   - gh-101334(1): ‘test_tarfile’ has been updated to pass when run as a
     high UID.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/101334


File: python.info,  Node: Construção<25>,  Next: Windows<22>,  Prev: Testes<24>,  Up: Python 3 12 0 alpha 5

1.23.30.6 Construção
....................

   - gh-101282(1): Update BOLT configuration not to use deprecated usage
     of ‘--split functions’.  Patch by Donghee Na.

   - gh-101522(2): Allow overriding Windows dependencies versions and
     paths using MSBuild properties.

   - gh-77532(3): Minor fixes to allow building with
     ‘PlatformToolset=ClangCL’ on Windows.

   - gh-101152(4): In accordance with PEP 699(5), the ‘ma_version_tag’
     field in *note PyDictObject: 3c1. is deprecated for extension
     modules.  Accessing this field will generate a compiler warning at
     compile time.  This field will be removed in Python 3.14.

   - gh-100340(6): Allows -Wno-int-conversion for wasm-sdk 17 and
     onwards, thus enables building WASI builds once against the latest
     sdk.

   - gh-101060(7): Conditionally add ‘-fno-reorder-blocks-and-partition’
     in configure.  Effectively fixes ‘--enable-bolt’ when using Clang,
     as this appears to be a GCC-only flag.

   - gh-98705(8): ‘__bool__’ is defined in AIX system header files which
     breaks the build in AIX, so undefine it.

   - gh-98636(9): Fix a regression in detecting ‘gdbm_compat’ library
     for the ‘_gdbm’ module build.

   - gh-96305(10): ‘_aix_support’ now uses a simple code to get platform
     details rather than the now non-existent ‘_bootsubprocess’ during
     bootstrap.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/101282

   (2) https://github.com/python/cpython/issues/101522

   (3) https://github.com/python/cpython/issues/77532

   (4) https://github.com/python/cpython/issues/101152

   (5) https://peps.python.org/pep-0699/

   (6) https://github.com/python/cpython/issues/100340

   (7) https://github.com/python/cpython/issues/101060

   (8) https://github.com/python/cpython/issues/98705

   (9) https://github.com/python/cpython/issues/98636

   (10) https://github.com/python/cpython/issues/96305


File: python.info,  Node: Windows<22>,  Prev: Construção<25>,  Up: Python 3 12 0 alpha 5

1.23.30.7 Windows
.................

   - gh-101543(1): Ensure the install path in the registry is only used
     when the standard library hasn’t been located in any other way.

   - gh-101467(2): The ‘py.exe’ launcher now correctly filters when only
     a single runtime is installed.  It also correctly handles prefix
     matches on tags so that ‘-3.1’ does not match ‘3.11’, but would
     still match ‘3.1-32’.

   - gh-99834(3): Updates bundled copy of Tcl/Tk to 8.6.13.0

   - gh-101135(4): Restore ability to launch older 32-bit versions from
     the ‘py.exe’ launcher when both 32-bit and 64-bit installs of the
     same version are available.

   - gh-82052(5): Fixed an issue where writing more than 32K of Unicode
     output to the console screen in one go can result in mojibake.

   - gh-100320(6): Ensures the ‘PythonPath’ registry key from an install
     is used when launching from a different copy of Python that relies
     on an existing install to provide a copy of its modules and
     standard library.

   - gh-100247(7): Restores support for the ‘py.exe’ launcher finding
     shebang commands in its configuration file using the full command
     name.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/101543

   (2) https://github.com/python/cpython/issues/101467

   (3) https://github.com/python/cpython/issues/99834

   (4) https://github.com/python/cpython/issues/101135

   (5) https://github.com/python/cpython/issues/82052

   (6) https://github.com/python/cpython/issues/100320

   (7) https://github.com/python/cpython/issues/100247


File: python.info,  Node: Python 3 12 0 alpha 4,  Next: Python 3 12 0 alpha 3,  Prev: Python 3 12 0 alpha 5,  Up: Changelog

1.23.31 Python 3.12.0 alpha 4
-----------------------------

'Data de lançamento: 2023-01-10'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<43>.
* Biblioteca: Biblioteca<47>.
* Núcleo e embutidos: Núcleo e embutidos<44>.
* Biblioteca: Biblioteca<48>.
* Núcleo e embutidos: Núcleo e embutidos<45>.
* Biblioteca: Biblioteca<49>.
* Documentação: Documentação<21>.
* Testes: Testes<25>.
* Construção: Construção<26>.
* Windows: Windows<23>.
* macOS: macOS<16>.
* Ferramentas/Demos: Ferramentas/Demos<15>.
* API C: API C<25>.


File: python.info,  Node: Núcleo e embutidos<43>,  Next: Biblioteca<47>,  Up: Python 3 12 0 alpha 4

1.23.31.1 Núcleo e embutidos
............................

   - gh-100776(1): Fix misleading default value in *note input():
     131b.’s ‘__text_signature__’.

   - gh-99005(2): Remove ‘UNARY_POSITIVE’, ‘ASYNC_GEN_WRAP’ and
     ‘LIST_TO_TUPLE’, replacing them with intrinsics.

   - gh-99005(3): Add new *note CALL_INTRINSIC_1: 4e1. instruction.
     Remove ‘IMPORT_STAR’, ‘PRINT_EXPR’ and ‘STOPITERATION_ERROR’,
     replacing them with the *note CALL_INTRINSIC_1: 4e1. instruction.

   - gh-100288(4): Remove the LOAD_ATTR_METHOD_WITH_DICT specialized
     instruction.  Stats show it is not useful.

   - gh-100720(5): Added ‘_PyFrame_NumSlotsForCodeObject’, which returns
     the number of slots needed in a frame for a given code object.

   - gh-100719(6): Removed the co_nplaincellvars field from the code
     object, as it is redundant.

   - gh-100637(7): Fix ‘int.__sizeof__()’ calculation to include the
     1-element ‘ob_digit’ array for ‘0’ and ‘False’.

   - gh-100649(8): Update the native_thread_id field of PyThreadState
     after fork.

   - gh-100126(9): Fix an issue where “incomplete” frames could be
     briefly visible to C code while other frames are being torn down,
     possibly resulting in corruption or hard crashes of the interpreter
     while running finalizers.

   - gh-87447(10): Fix *note SyntaxError: 18d. on comprehension rebind
     checking with names that are not actually redefined.

     Now reassigning ‘b’ in ‘[(b := 1) for a, b.prop in some_iter]’ is
     allowed.  Reassigning ‘a’ is still disallowed as per PEP 572(11).

   - gh-100268(12): Add *note int.is_integer(): 1873. to improve duck
     type compatibility between *note int: 257. and *note float: 2f7.

   - gh-100425(13): Improve the accuracy of ‘sum()’ with compensated
     summation.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100776

   (2) https://github.com/python/cpython/issues/99005

   (3) https://github.com/python/cpython/issues/99005

   (4) https://github.com/python/cpython/issues/100288

   (5) https://github.com/python/cpython/issues/100720

   (6) https://github.com/python/cpython/issues/100719

   (7) https://github.com/python/cpython/issues/100637

   (8) https://github.com/python/cpython/issues/100649

   (9) https://github.com/python/cpython/issues/100126

   (10) https://github.com/python/cpython/issues/87447

   (11) https://peps.python.org/pep-0572/

   (12) https://github.com/python/cpython/issues/100268

   (13) https://github.com/python/cpython/issues/100425


File: python.info,  Node: Biblioteca<47>,  Next: Núcleo e embutidos<44>,  Prev: Núcleo e embutidos<43>,  Up: Python 3 12 0 alpha 4

1.23.31.2 Biblioteca
....................

   - gh-100374(1): Fix incorrect result and delay in *note
     socket.getfqdn(): 1875.  Patch by Dominic Socular.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100374


File: python.info,  Node: Núcleo e embutidos<44>,  Next: Biblioteca<48>,  Prev: Biblioteca<47>,  Up: Python 3 12 0 alpha 4

1.23.31.3 Núcleo e embutidos
............................

   - gh-100357(1): Convert ‘vars’, ‘dir’, ‘next’, ‘getattr’, and ‘iter’
     to argument clinic.

   - gh-100117(2): Improve the output of *note codeobject.co_lines():
     2fb. by emitting only one entry for each line range.

   - gh-90043(3): Handle NaNs when specializing *note COMPARE_OP: 970.
     for *note float: 2f7. values.

   - gh-100222(4): Redefine the ‘_Py_CODEUNIT’ typedef as a union to
     describe its layout to the C compiler, avoiding type punning and
     improving clarity.

   - gh-99955(5): Internal compiler functions (in compile.c) now
     consistently return -1 on error and 0 on success.

   - gh-100188(6): The ‘BINARY_SUBSCR_LIST_INT’ and
     ‘BINARY_SUBSCR_TUPLE_INT’ instructions are no longer used for
     negative integers because those instructions always miss when
     encountering negative integers.

   - gh-99110(7): Initialize frame->previous in frameobject.c to fix a
     segmentation fault when accessing frames created by *note
     PyFrame_New(): 1877.

   - gh-94155(8): Improved the hashing algorithm for code objects,
     mitigating some hash collisions.

   - gh-99540(9): ‘None’ now hashes to a constant value.  This is not a
     requirements change.

   - gh-100143(10): When built with ‘--enable-pystats’, stats collection
     is now off by default.  To enable it early at startup, pass the
     ‘-Xpystats’ flag.  Stats are now always dumped, even if switched
     off.

   - gh-100146(11): Improve ‘BUILD_LIST’ opcode so that it works
     similarly to the ‘BUILD_TUPLE’ opcode, by stealing references from
     the stack rather than repeatedly using stack operations to set list
     elements.  Implementation details are in a new private API
     ‘_PyList_FromArraySteal()’.

   - gh-100110(12): Specialize ‘FOR_ITER’ for tuples.

   - gh-100050(13): Honor existing errors obtained when searching for
     mismatching parentheses in the tokenizer.  Patch by Pablo Galindo

   - gh-92216(14): Improve the performance of *note hasattr(): 4d2. for
     type objects with a missing attribute.

   - gh-99582(15): Freeze *note zipimport: 132. module into
     ‘_bootstrap_python’.

   - gh-99554(16): Pack debugging location tables more efficiently
     during bytecode compilation.

   - gh-98522(17): Add an internal version number to code objects, to
     give better versioning of inner functions and comprehensions, and
     thus better specialization of those functions.  This change is
     invisible to both Python and C extensions.

   - gh-94603(18): Improve performance of ‘list.pop’ for small lists.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100357

   (2) https://github.com/python/cpython/issues/100117

   (3) https://github.com/python/cpython/issues/90043

   (4) https://github.com/python/cpython/issues/100222

   (5) https://github.com/python/cpython/issues/99955

   (6) https://github.com/python/cpython/issues/100188

   (7) https://github.com/python/cpython/issues/99110

   (8) https://github.com/python/cpython/issues/94155

   (9) https://github.com/python/cpython/issues/99540

   (10) https://github.com/python/cpython/issues/100143

   (11) https://github.com/python/cpython/issues/100146

   (12) https://github.com/python/cpython/issues/100110

   (13) https://github.com/python/cpython/issues/100050

   (14) https://github.com/python/cpython/issues/92216

   (15) https://github.com/python/cpython/issues/99582

   (16) https://github.com/python/cpython/issues/99554

   (17) https://github.com/python/cpython/issues/98522

   (18) https://github.com/python/cpython/issues/94603


File: python.info,  Node: Biblioteca<48>,  Next: Núcleo e embutidos<45>,  Prev: Núcleo e embutidos<44>,  Up: Python 3 12 0 alpha 4

1.23.31.4 Biblioteca
....................

   - gh-89051(1): Add *note ssl.OP_LEGACY_SERVER_CONNECT: 1879.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/89051


File: python.info,  Node: Núcleo e embutidos<45>,  Next: Biblioteca<49>,  Prev: Biblioteca<48>,  Up: Python 3 12 0 alpha 4

1.23.31.5 Núcleo e embutidos
............................

   - bpo-32782(1): ‘ctypes’ arrays of length 0 now report a correct
     itemsize when a ‘memoryview’ is constructed from them, rather than
     always giving a value of 0.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32782


File: python.info,  Node: Biblioteca<49>,  Next: Documentação<21>,  Prev: Núcleo e embutidos<45>,  Up: Python 3 12 0 alpha 4

1.23.31.6 Biblioteca
....................

   - gh-100833(1): Speed up *note math.fsum(): 141b. by removing
     defensive ‘volatile’ qualifiers.

   - gh-100805(2): Modify *note random.choice(): 1271. implementation to
     once again work with NumPy arrays.

   - gh-100813(3): Add ‘socket.IP_PKTINFO’ constant.

   - gh-100792(4): Make *note email.message.Message.__contains__():
     187c. twice as fast.

   - gh-91851(5): Microoptimizations for *note
     fractions.Fraction.__round__(): 187d, *note
     fractions.Fraction.__ceil__(): 187e. and *note
     fractions.Fraction.__floor__(): 187f.

   - gh-90104(6): Avoid RecursionError on ‘repr’ if a dataclass field
     definition has a cyclic reference.

   - gh-100689(7): Fix crash in ‘pyexpat’ by statically allocating
     ‘PyExpat_CAPI’ capsule.

   - gh-100740(8): Fix ‘unittest.mock.Mock’ not respecting the spec for
     attribute names prefixed with ‘assert’.

   - gh-91219(9): Change ‘SimpleHTTPRequestHandler’ to support
     subclassing to provide a different set of index file names instead
     of using ‘__init__’ parameters.

   - gh-100690(10): ‘Mock’ objects which are not unsafe will now raise
     an ‘AttributeError’ when accessing an attribute that matches the
     name of an assertion but without the prefix ‘assert_’, e.g.
     accessing ‘called_once’ instead of ‘assert_called_once’.  This is
     in addition to this already happening for accessing attributes with
     prefixes ‘assert’, ‘assret’, ‘asert’, ‘aseert’, and ‘assrt’.

   - gh-89727(11): Simplify and optimize *note os.walk(): 4a9. by using
     *note isinstance(): 442. checks to check the top of the stack.

   - gh-100485(12): Add math.sumprod() to compute the sum of products.

   - gh-86508(13): Fix *note asyncio.open_connection(): b2b. to skip
     binding to local addresses of different family.  Patch by Kumar
     Aditya.

   - gh-97930(14): ‘importlib.resources.files’ now accepts a module as
     an anchor instead of only accepting packages.  If a module is
     passed, resources are resolved adjacent to that module (in the same
     package or at the package root).  The parameter was renamed from
     ‘package’ to ‘anchor’ with a compatibility shim for those passing
     by keyword.  Additionally, the new ‘anchor’ parameter is now
     optional and will default to the caller’s module.

   - gh-100585(15): Fixed a bug where importlib.resources.as_file was
     leaving file pointers open

   - gh-100562(16): Improve performance of *note
     pathlib.Path.absolute(): 17a2. by nearly 2x.  This comes at the
     cost of a performance regression in *note pathlib.Path.cwd(): 181f,
     which is generally used less frequently in user code.

   - gh-100519(17): Small simplification of
     ‘http.cookiejar.eff_request_host()’ that improves readability and
     better matches the RFC wording.

   - gh-100287(18): Fix the interaction of *note unittest.mock.seal():
     bb9. with *note unittest.mock.AsyncMock: a53.

   - gh-100488(19): Add ‘Fraction.is_integer()’ to check whether a *note
     fractions.Fraction: 1e7. is an integer.  This improves duck type
     compatibility with *note float: 2f7. and *note int: 257.

   - gh-100474(20): *note http.server: 72. now checks that an index page
     is actually a regular file before trying to serve it.  This avoids
     issues with directories named ‘index.html’.

   - gh-100363(21): Speed up *note asyncio.get_running_loop(): b1d. by
     removing redundant ‘getpid’ checks.  Patch by Kumar Aditya.

   - gh-78878(22): Fix crash when creating an instance of
     ‘_ctypes.CField’.

   - gh-100348(23): Fix ref cycle in ‘asyncio._SelectorSocketTransport’
     by removing ‘_read_ready_cb’ in ‘close’.

   - gh-100344(24): Provide C implementation for *note
     asyncio.current_task(): 47d. for a 4x-6x speedup.

   - gh-100272(25): Fix JSON serialization of OrderedDict.  It now
     preserves the order of keys.

   - gh-83076(26): Instantiation of ‘Mock()’ and ‘AsyncMock()’ is now
     3.8x faster.

   - gh-100234(27): Set a default value of 1.0 for the ‘lambd’ parameter
     in random.expovariate().

   - gh-100228(28): A *note DeprecationWarning: 1a5. may be raised when
     *note os.fork(): 197. or *note os.forkpty(): 198. is called from
     multi-threaded processes.  Forking with threads is unsafe and can
     cause deadlocks, crashes and subtle problems.  Lack of a warning
     does not indicate that the fork call was actually safe, as Python
     may not be aware of all threads.

   - gh-100039(29): Improve signatures for enums and flags.

   - gh-100133(30): Fix regression in *note asyncio: a. where a
     subprocess would sometimes lose data received from pipe.

   - bpo-44592(31): Fixes inconsistent handling of case sensitivity of
     'extrasaction' arg in *note csv.DictWriter: 123e.

   - gh-100098(32): Fix ‘tuple’ subclasses being cast to ‘tuple’ when
     used as enum values.

   - gh-85432(33): Rename the 'fmt' parameter of the pure-Python
     implementation of *note datetime.time.strftime(): 1880. to
     'format'.  Rename the 't' parameter of *note
     datetime.datetime.fromtimestamp(): 4ed. to 'timestamp'.  These
     changes mean the parameter names in the pure-Python implementation
     now match the parameter names in the C implementation.  Patch by
     Alex Waygood.

   - gh-98778(34): Update *note HTTPError: 1014. to be initialized
     properly, even if the ‘fp’ is ‘None’.  Patch by Donghee Na.

   - gh-99925(35): Unify error messages in JSON serialization between
     ‘json.dumps(float('nan'), allow_nan=False)’ and
     ‘json.dumps(float('nan'), allow_nan=False, indent=<SOMETHING>)’.
     Now both include the representation of the value that could not be
     serialized.

   - gh-89727(36): Fix issue with *note os.walk(): 4a9. where a *note
     RecursionError: d90. would occur on deep directory structures by
     adjusting the implementation of *note os.walk(): 4a9. to be
     iterative instead of recursive.

   - gh-94943(37): Add *note Suporte a dataclass: 1881. to the *note
     Enum: 630. *note __repr__(): 1882.  When inheriting from a *note
     dataclass: 1cb, only show the field names in the value section of
     the member *note repr(): 800, and not the dataclass’ class name.

   - gh-83035(38): Fix *note inspect.getsource(): 15f8. handling of
     decorator calls with nested parentheses.

   - gh-99576(39): Fix ‘.save()’ method for ‘LWPCookieJar’ and
     ‘MozillaCookieJar’: saved file was not truncated on repeated save.

   - gh-94912(40): Add *note inspect.markcoroutinefunction(): 490.
     decorator which manually marks a function as a coroutine for the
     benefit of ‘iscoroutinefunction()’.

   - gh-99509(41): Add PEP 585(42) support for
     ‘multiprocessing.queues.Queue’.

   - gh-99482(43): Remove ‘Jython’ partial compatibility code from
     several stdlib modules.

   - gh-99433(44): Fix *note doctest: 3a. failure on *note
     types.MethodWrapperType: 64b. in modules.

   - gh-85267(45): Several improvements to *note inspect.signature():
     738.’s handling of ‘__text_signature’.  - Fixes a case where *note
     inspect.signature(): 738. dropped parameters - Fixes a case where
     *note inspect.signature(): 738. raised *note tokenize.TokenError:
     542. - Allows *note inspect.signature(): 738. to understand
     defaults involving binary operations of constants - *note
     inspect.signature(): 738. is documented as only raising *note
     TypeError: 2c3. or *note ValueError: 202, but sometimes raised
     *note RuntimeError: 195.  These cases now raise *note ValueError:
     202. - Removed a dead code path

   - gh-91166(46): *note asyncio: a. is optimized to avoid excessive
     copying when writing to socket and use *note sendmsg(): 476. if the
     platform supports it.  Patch by Kumar Aditya.

   - gh-98030(47): Add missing TCP socket options from Linux:
     ‘TCP_MD5SIG’, ‘TCP_THIN_LINEAR_TIMEOUTS’, ‘TCP_THIN_DUPACK’,
     ‘TCP_REPAIR’, ‘TCP_REPAIR_QUEUE’, ‘TCP_QUEUE_SEQ’,
     ‘TCP_REPAIR_OPTIONS’, ‘TCP_TIMESTAMP’, ‘TCP_CC_INFO’,
     ‘TCP_SAVE_SYN’, ‘TCP_SAVED_SYN’, ‘TCP_REPAIR_WINDOW’,
     ‘TCP_FASTOPEN_CONNECT’, ‘TCP_ULP’, ‘TCP_MD5SIG_EXT’,
     ‘TCP_FASTOPEN_KEY’, ‘TCP_FASTOPEN_NO_COOKIE’,
     ‘TCP_ZEROCOPY_RECEIVE’, ‘TCP_INQ’, ‘TCP_TX_DELAY’.

   - gh-88500(48): Reduced the memory usage of *note
     urllib.parse.unquote(): 1883. and *note
     urllib.parse.unquote_to_bytes(): 1884. on large values.

   - gh-96127(49): ‘inspect.signature’ was raising ‘TypeError’ on call
     with mock objects.  Now it correctly returns ‘(*args, **kwargs)’ as
     inferred signature.

   - gh-95882(50): Fix a 3.11 regression in *note asynccontextmanager():
     b3c, which caused it to propagate exceptions with incorrect
     tracebacks and fix a 3.11 regression in *note contextmanager():
     1242, which caused it to propagate exceptions with incorrect
     tracebacks for *note StopIteration: c15.

   - gh-78707(51): Deprecate passing more than one positional argument
     to *note pathlib.PurePath.relative_to(): 2ca. and *note
     is_relative_to(): 2c9.

   - gh-92122(52): Fix reStructuredText syntax errors in docstrings in
     the *note enum: 56. module.

   - gh-91851(53): Optimize the *note Fraction: 1e7. arithmetics for
     small components.

   - bpo-24132(54): Make *note pathlib.PurePath: 4a6. and *note Path:
     229. subclassable (private to start).  Previously, attempting to
     instantiate a subclass resulted in an *note AttributeError: 34b.
     being raised.  Patch by Barney Gale.

   - bpo-40447(55): Accept *note os.PathLike: c6c. (such as *note
     pathlib.Path: 229.) in the ‘stripdir’ arguments of *note
     compileall.compile_file(): e0b. and *note compileall.compile_dir():
     b38.

   - bpo-36880(56): Fix a reference counting issue when a *note ctypes:
     2a. callback with return type *note py_object: 147f. returns
     ‘None’, which could cause crashes.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100833

   (2) https://github.com/python/cpython/issues/100805

   (3) https://github.com/python/cpython/issues/100813

   (4) https://github.com/python/cpython/issues/100792

   (5) https://github.com/python/cpython/issues/91851

   (6) https://github.com/python/cpython/issues/90104

   (7) https://github.com/python/cpython/issues/100689

   (8) https://github.com/python/cpython/issues/100740

   (9) https://github.com/python/cpython/issues/91219

   (10) https://github.com/python/cpython/issues/100690

   (11) https://github.com/python/cpython/issues/89727

   (12) https://github.com/python/cpython/issues/100485

   (13) https://github.com/python/cpython/issues/86508

   (14) https://github.com/python/cpython/issues/97930

   (15) https://github.com/python/cpython/issues/100585

   (16) https://github.com/python/cpython/issues/100562

   (17) https://github.com/python/cpython/issues/100519

   (18) https://github.com/python/cpython/issues/100287

   (19) https://github.com/python/cpython/issues/100488

   (20) https://github.com/python/cpython/issues/100474

   (21) https://github.com/python/cpython/issues/100363

   (22) https://github.com/python/cpython/issues/78878

   (23) https://github.com/python/cpython/issues/100348

   (24) https://github.com/python/cpython/issues/100344

   (25) https://github.com/python/cpython/issues/100272

   (26) https://github.com/python/cpython/issues/83076

   (27) https://github.com/python/cpython/issues/100234

   (28) https://github.com/python/cpython/issues/100228

   (29) https://github.com/python/cpython/issues/100039

   (30) https://github.com/python/cpython/issues/100133

   (31) https://bugs.python.org/issue?@action=redirect&bpo=44592

   (32) https://github.com/python/cpython/issues/100098

   (33) https://github.com/python/cpython/issues/85432

   (34) https://github.com/python/cpython/issues/98778

   (35) https://github.com/python/cpython/issues/99925

   (36) https://github.com/python/cpython/issues/89727

   (37) https://github.com/python/cpython/issues/94943

   (38) https://github.com/python/cpython/issues/83035

   (39) https://github.com/python/cpython/issues/99576

   (40) https://github.com/python/cpython/issues/94912

   (41) https://github.com/python/cpython/issues/99509

   (42) https://peps.python.org/pep-0585/

   (43) https://github.com/python/cpython/issues/99482

   (44) https://github.com/python/cpython/issues/99433

   (45) https://github.com/python/cpython/issues/85267

   (46) https://github.com/python/cpython/issues/91166

   (47) https://github.com/python/cpython/issues/98030

   (48) https://github.com/python/cpython/issues/88500

   (49) https://github.com/python/cpython/issues/96127

   (50) https://github.com/python/cpython/issues/95882

   (51) https://github.com/python/cpython/issues/78707

   (52) https://github.com/python/cpython/issues/92122

   (53) https://github.com/python/cpython/issues/91851

   (54) https://bugs.python.org/issue?@action=redirect&bpo=24132

   (55) https://bugs.python.org/issue?@action=redirect&bpo=40447

   (56) https://bugs.python.org/issue?@action=redirect&bpo=36880


File: python.info,  Node: Documentação<21>,  Next: Testes<25>,  Prev: Biblioteca<49>,  Up: Python 3 12 0 alpha 4

1.23.31.7 Documentação
......................

   - gh-100616(1): Document existing ‘attr’ parameter to *note
     curses.window.vline(): 1886. function in *note curses: 2b.

   - gh-100472(2): Remove claim in documentation that the ‘stripdir’,
     ‘prependdir’ and ‘limit_sl_dest’ parameters of *note
     compileall.compile_dir(): b38. and *note compileall.compile_file():
     e0b. could be *note bytes: 1c2.

   - bpo-25377(3): Clarify use of octal format of mode argument in
     help(os.chmod) as well as help(os.fchmod)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100616

   (2) https://github.com/python/cpython/issues/100472

   (3) https://bugs.python.org/issue?@action=redirect&bpo=25377


File: python.info,  Node: Testes<25>,  Next: Construção<26>,  Prev: Documentação<21>,  Up: Python 3 12 0 alpha 4

1.23.31.8 Testes
................

   - gh-100454(1): Start running SSL tests with OpenSSL 3.1.0-beta1.

   - gh-100086(2): The Python test runner (libregrtest) now logs Python
     build information like “debug” vs “release” build, or LTO and PGO
     optimizations.  Patch by Victor Stinner.

   - gh-93018(3): Make two tests forgiving towards host system libexpat
     with backported security fixes applied.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100454

   (2) https://github.com/python/cpython/issues/100086

   (3) https://github.com/python/cpython/issues/93018


File: python.info,  Node: Construção<26>,  Next: Windows<23>,  Prev: Testes<25>,  Up: Python 3 12 0 alpha 4

1.23.31.9 Construção
....................

   - gh-100540(1): Removed the ‘--with-system-ffi’ ‘configure’ option;
     ‘libffi’ must now always be supplied by the system on all
     non-Windows platforms.  The option has had no effect on non-Darwin
     platforms for several releases, and in 3.11 only had the
     non-obvious effect of invoking ‘pkg-config’ to find ‘libffi’ and
     never setting ‘-DUSING_APPLE_OS_LIBFFI’.  Now on Darwin platforms
     ‘configure’ will first check for the OS ‘libffi’ and then fall back
     to the same processing as other platforms if it is not found.

   - gh-88267(2): Avoid exporting Python symbols in linked Windows
     applications when the core is built as static.

   - bpo-41916(3): Allow override of ac_cv_cxx_thread so that cross
     compiled python can set -pthread for CXX.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100540

   (2) https://github.com/python/cpython/issues/88267

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41916


File: python.info,  Node: Windows<23>,  Next: macOS<16>,  Prev: Construção<26>,  Up: Python 3 12 0 alpha 4

1.23.31.10 Windows
..................

   - gh-100180(1): Update Windows installer to OpenSSL 1.1.1s

   - gh-99191(2): Use ‘_MSVC_LANG >= 202002L’ instead of less-precise
     ‘_MSC_VER >=1929’ to more accurately test for C++20 support in
     ‘PC/_wmimodule.cpp’.

   - gh-79218(3): Define ‘MS_WIN64’ for Mingw-w64 64bit, fix cython
     compilation failure.

   - gh-99941(4): Ensure that *note asyncio.Protocol.data_received():
     188a. receives an immutable *note bytes: 1c2. object (as
     documented), instead of *note bytearray: 2ea.

   - bpo-43984(5): *note winreg.SetValueEx(): 188b. now leaves the
     target value untouched in the case of conversion errors.
     Previously, ‘-1’ would be written in case of such errors.

   - bpo-34816(6): ‘hasattr(ctypes.windll, 'nonexistant')’ now returns
     ‘False’ instead of raising *note OSError: 417.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100180

   (2) https://github.com/python/cpython/issues/99191

   (3) https://github.com/python/cpython/issues/79218

   (4) https://github.com/python/cpython/issues/99941

   (5) https://bugs.python.org/issue?@action=redirect&bpo=43984

   (6) https://bugs.python.org/issue?@action=redirect&bpo=34816


File: python.info,  Node: macOS<16>,  Next: Ferramentas/Demos<15>,  Prev: Windows<23>,  Up: Python 3 12 0 alpha 4

1.23.31.11 macOS
................

   - gh-100180(1): Update macOS installer to OpenSSL 1.1.1s

   - gh-100540(2): Removed obsolete ‘dlfcn.h’ shim from the ‘_ctypes’
     extension module, which has not been necessary since Mac OS X 10.2.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100180

   (2) https://github.com/python/cpython/issues/100540


File: python.info,  Node: Ferramentas/Demos<15>,  Next: API C<25>,  Prev: macOS<16>,  Up: Python 3 12 0 alpha 4

1.23.31.12 Ferramentas/Demos
............................

   - bpo-45256(1): Fix a bug that caused an *note AttributeError: 34b.
     to be raised in ‘python-gdb.py’ when ‘py-locals’ is used without a
     frame.

   - gh-100342(2): Add missing ‘NULL’ check for possible allocation
     failure in ‘*args’ parsing in Argument Clinic.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45256

   (2) https://github.com/python/cpython/issues/100342


File: python.info,  Node: API C<25>,  Prev: Ferramentas/Demos<15>,  Up: Python 3 12 0 alpha 4

1.23.31.13 API C
................

   - gh-99947(1): Raising SystemError on import will now have its cause
     be set to the original unexpected exception.

   - gh-99240(2): In argument parsing, after deallocating newly
     allocated memory, reset its pointer to NULL.

   - gh-98724(3): The *note Py_CLEAR: 578, *note Py_SETREF: 579. and
     *note Py_XSETREF: 57a. macros now only evaluate their arguments
     once.  If an argument has side effects, these side effects are no
     longer duplicated.  Patch by Victor Stinner.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99947

   (2) https://github.com/python/cpython/issues/99240

   (3) https://github.com/python/cpython/issues/98724


File: python.info,  Node: Python 3 12 0 alpha 3,  Next: Python 3 12 0 alpha 2,  Prev: Python 3 12 0 alpha 4,  Up: Changelog

1.23.32 Python 3.12.0 alpha 3
-----------------------------

'Data de lançamento: 2022-12-06'

* Menu:

* Segurança: Segurança<21>.
* Núcleo e embutidos: Núcleo e embutidos<46>.
* Biblioteca: Biblioteca<50>.
* Núcleo e embutidos: Núcleo e embutidos<47>.
* Biblioteca: Biblioteca<51>.
* Documentação: Documentação<22>.
* Testes: Testes<26>.
* Construção: Construção<27>.
* Windows: Windows<24>.
* macOS: macOS<17>.
* Ferramentas/Demos: Ferramentas/Demos<16>.
* API C: API C<26>.


File: python.info,  Node: Segurança<21>,  Next: Núcleo e embutidos<46>,  Up: Python 3 12 0 alpha 3

1.23.32.1 Segurança
...................

   - gh-100001(1): ‘python -m http.server’ no longer allows terminal
     control characters sent within a garbage request to be printed to
     the stderr server log.

     This is done by changing the *note http.server: 72.
     ‘BaseHTTPRequestHandler’ ‘.log_message’ method to replace control
     characters with a ‘\xHH’ hex escape before printing.

   - gh-87604(2): Avoid publishing list of active per-interpreter audit
     hooks via the *note gc: 60. module

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100001

   (2) https://github.com/python/cpython/issues/87604


File: python.info,  Node: Núcleo e embutidos<46>,  Next: Biblioteca<50>,  Prev: Segurança<21>,  Up: Python 3 12 0 alpha 3

1.23.32.2 Núcleo e embutidos
............................

   - gh-99891(1): Fix a bug in the tokenizer that could cause infinite
     recursion when showing syntax warnings that happen in the first
     line of the source.  Patch by Pablo Galindo

   - gh-91054(2): Add *note PyCode_AddWatcher(): 566. and *note
     PyCode_ClearWatcher(): 567. APIs to register callbacks to receive
     notification on creation and destruction of code objects.

   - gh-99729(3): Fix an issue that could cause frames to be visible to
     Python code as they are being torn down, possibly leading to memory
     corruption or hard crashes of the interpreter.

   - gh-99708(4): Fix bug where compiler crashes on an if expression
     with an empty body block.

   - gh-99578(5): Fix a reference bug in ‘_imp.create_builtin()’ after
     the creation of the first sub-interpreter for modules ‘builtins’
     and ‘sys’.  Patch by Victor Stinner.

   - gh-99581(6): Fixed a bug that was causing a buffer overflow if the
     tokenizer copies a line missing the newline character from a file
     that is as long as the available tokenizer buffer.  Patch by Pablo
     galindo

   - gh-99553(7): Fix bug where an *note ExceptionGroup: 1b6. subclass
     can wrap a *note BaseException: 5bb.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99891

   (2) https://github.com/python/cpython/issues/91054

   (3) https://github.com/python/cpython/issues/99729

   (4) https://github.com/python/cpython/issues/99708

   (5) https://github.com/python/cpython/issues/99578

   (6) https://github.com/python/cpython/issues/99581

   (7) https://github.com/python/cpython/issues/99553


File: python.info,  Node: Biblioteca<50>,  Next: Núcleo e embutidos<47>,  Prev: Núcleo e embutidos<46>,  Up: Python 3 12 0 alpha 3

1.23.32.3 Biblioteca
....................

   - gh-99547(1): Add a function to os.path to check if a path is a
     junction: isjunction.  Add similar functionality to pathlib.Path as
     is_junction.

   - gh-99370(2): Fix zip path for venv created from a non-installed
     python on POSIX platforms.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99547

   (2) https://github.com/python/cpython/issues/99370


File: python.info,  Node: Núcleo e embutidos<47>,  Next: Biblioteca<51>,  Prev: Biblioteca<50>,  Up: Python 3 12 0 alpha 3

1.23.32.4 Núcleo e embutidos
............................

   - gh-99377(1): Add audit events for thread creation and clear
     operations.

   - gh-98686(2): Remove the ‘BINARY_OP_GENERIC’ and
     ‘COMPARE_OP_GENERIC’ “specializations”.

   - gh-99298(3): Remove the remaining error paths for attribute
     specializations, and refuse to specialize attribute accesses on
     types that haven’t had *note PyType_Ready(): 77c. called on them
     yet.

   - gh-99127(4): Allow some features of *note syslog: dc. to the main
     interpreter only.  Patch by Donghee Na.

   - gh-91053(5): Optimizing interpreters and JIT compilers may need to
     invalidate internal metadata when functions are modified.  This
     change adds the ability to provide a callback that will be invoked
     each time a function is created, modified, or destroyed.

   - gh-90994(6): Improve error messages when there’s a syntax error
     with call arguments.  The following three cases are covered: - No
     value is assigned to a named argument, eg ‘foo(a=)’.  - A value is
     assigned to a star argument, eg ‘foo(*args=[0])’.  - A value is
     assigned to a double-star keyword argument, eg ‘foo(**kwarg={'a':
     0})’.

   - bpo-45026(7): Optimize the *note range: 94a. object iterator.  It
     is now smaller, faster iteration of ranges containing large
     numbers.  Smaller pickles, faster unpickling.

   - bpo-31718(8): Raise *note ValueError: 202. instead of *note
     SystemError: 575. when methods of uninitialized *note
     io.IncrementalNewlineDecoder: 17bb. objects are called.  Patch by
     Oren Milman.

   - bpo-38031(9): Fix a possible assertion failure in *note io.FileIO:
     1354. when the opener returns an invalid file descriptor.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99377

   (2) https://github.com/python/cpython/issues/98686

   (3) https://github.com/python/cpython/issues/99298

   (4) https://github.com/python/cpython/issues/99127

   (5) https://github.com/python/cpython/issues/91053

   (6) https://github.com/python/cpython/issues/90994

   (7) https://bugs.python.org/issue?@action=redirect&bpo=45026

   (8) https://bugs.python.org/issue?@action=redirect&bpo=31718

   (9) https://bugs.python.org/issue?@action=redirect&bpo=38031


File: python.info,  Node: Biblioteca<51>,  Next: Documentação<22>,  Prev: Núcleo e embutidos<47>,  Up: Python 3 12 0 alpha 3

1.23.32.5 Biblioteca
....................

   - gh-100001(1): Also escape s in the http.server
     BaseHTTPRequestHandler.log_message so that it is technically
     possible to parse the line and reconstruct what the original data
     was.  Without this a xHH is ambiguous as to if it is a hex
     replacement we put in or the characters r”x” came through in the
     original request line.

   - gh-99957(2): Add ‘frozen_default’ parameter to *note
     typing.dataclass_transform(): 4d4.

   - gh-79033(3): Fix *note asyncio.Server.wait_closed(): 17bc. to
     actually do what the docs promise – wait for all existing
     connections to complete, after closing the server.

   - gh-51524(4): Fix bug when calling trace.CoverageResults with valid
     infile.

   - gh-99645(5): Fix a bug in handling class cleanups in *note
     unittest.TestCase: 44f.  Now ‘addClassCleanup()’ uses separate
     lists for different ‘TestCase’ subclasses, and ‘doClassCleanups()’
     only cleans up the particular class.

   - gh-99508(6): Fix ‘TypeError’ in
     ‘Lib/importlib/_bootstrap_external.py’ while calling
     ‘_imp.source_hash()’.

   - gh-66285(7): Fix *note asyncio: a. to not share event loop and
     signal wakeupfd in forked processes.  Patch by Kumar Aditya.

   - gh-97001(8): Release the GIL when calling termios APIs to avoid
     blocking threads.

   - gh-92647(9): Use final status of an enum to determine lookup or
     creation branch of functional API.

   - gh-99388(10): Add 'loop_factory' parameter to *note asyncio.run():
     47c. to allow specifying a custom event loop factory.  Patch by
     Kumar Aditya.

   - gh-99341(11): Fix *note ast.increment_lineno(): 1895. to also cover
     *note ast.TypeIgnore: 1896. when changing line numbers.

   - gh-99382(12): Check the number of arguments in substitution in user
     generics containing a *note TypeVarTuple: 15f. and one or more
     *note TypeVar: 15d.

   - gh-99379(13): Fix substitution of *note ParamSpec: 15e. followed by
     *note TypeVarTuple: 15f. in generic aliases.

   - gh-99344(14): Fix substitution of *note TypeVarTuple: 15f. and
     *note ParamSpec: 15e. together in user generics.

   - gh-99284(15): Remove ‘_use_broken_old_ctypes_structure_semantics_’
     old untested and undocumented hack from *note ctypes: 2a.

   - gh-99201(16): Fix *note IndexError: 157e. when initializing the
     config variables on Windows if ‘HAVE_DYNAMIC_LOADING’ is not set.

   - gh-99240(17): Fix double-free bug in Argument Clinic
     ‘str_converter’ by extracting memory clean up to a new
     ‘post_parsing’ section.

   - gh-64490(18): Fix refcount error when arguments are packed to tuple
     in Argument Clinic.

   - gh-99029(19): *note pathlib.PurePath.relative_to(): 2ca. now treats
     naked Windows drive paths as relative.  This brings its behaviour
     in line with other parts of pathlib.

   - gh-98253(20): The implementation of the typing module is now more
     resilient to reference leaks in binary extension modules.

     Previously, a reference leak in a typed C API-based extension
     module could leak internals of the typing module, which could in
     turn introduce leaks in essentially any other package with typed
     function signatures.  Although the typing package is not the
     original source of the problem, such non-local dependences
     exacerbate debugging of large-scale projects, and the
     implementation was therefore changed to reduce harm by providing
     better isolation.

   - gh-98458(21): Fix infinite loop in unittest when a self-referencing
     chained exception is raised

   - gh-93453(22): *note asyncio.get_event_loop(): 2c2. and many other
     *note asyncio: a. functions like *note asyncio.ensure_future():
     c92, *note asyncio.shield(): a7a. or *note asyncio.gather(): 5fd,
     and also the ‘get_event_loop()’ method of
     ‘asyncio.BaseDefaultEventLoopPolicy’ now raise a *note
     RuntimeError: 195. if called when there is no running event loop
     and the current event loop was not set.  Previously they implicitly
     created and set a new current event loop.  *note
     DeprecationWarning: 1a5. is no longer emitted if there is no
     running event loop but the current event loop was set.

   - gh-97966(23): On ‘uname_result’, restored expectation that
     ‘_fields’ and ‘_asdict’ would include all six properties including
     ‘processor’.

   - gh-98248(24): Provide informative error messages in *note
     struct.pack(): 12b8. when its integral arguments are not in range.

   - gh-98108(25): ‘zipfile.Path’ is now pickleable if its
     initialization parameters were pickleable (e.g.  for file system
     paths).

   - gh-98098(26): Created packages from zipfile and test_zipfile
     modules, separating ‘zipfile.Path’ functionality.

   - gh-82836(27): Fix *note is_private: 173a. properties in the *note
     ipaddress: 80. module.  Previously non-private networks (0.0.0.0/0)
     would return ‘True’ from this method; now they correctly return
     ‘False’.

   - gh-96828(28): Add an *note OP_ENABLE_KTLS: 1897. option for
     enabling the use of the kernel TLS (kTLS). Patch by Illia Volochii.

   - gh-88863(29): To avoid apparent memory leaks when *note
     asyncio.open_connection(): b2b. raises, break reference cycles
     generated by local exception and future instances (which has
     exception instance as its member var).  Patch by Dong Uk, Kang.

   - gh-91078(30): ‘TarFile.next()’ now returns ‘None’ when called on an
     empty tarfile.

   - bpo-47220(31): Document the optional 'callback' parameter of
     ‘WeakMethod’.  Patch by Géry Ogam.

   - bpo-44817(32): Ignore WinError 53 (ERROR_BAD_NETPATH), 65
     (ERROR_NETWORK_ACCESS_DENIED) and 161 (ERROR_BAD_PATHNAME) when
     using ntpath.realpath().

   - bpo-41260(33): Rename the 'fmt' parameter of the pure Python
     implementation of *note datetime.date.strftime(): cb0. to 'format'.

   - bpo-15999(34): All built-in functions now accept arguments of any
     type instead of just ‘bool’ and ‘int’ for boolean parameters.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/100001

   (2) https://github.com/python/cpython/issues/99957

   (3) https://github.com/python/cpython/issues/79033

   (4) https://github.com/python/cpython/issues/51524

   (5) https://github.com/python/cpython/issues/99645

   (6) https://github.com/python/cpython/issues/99508

   (7) https://github.com/python/cpython/issues/66285

   (8) https://github.com/python/cpython/issues/97001

   (9) https://github.com/python/cpython/issues/92647

   (10) https://github.com/python/cpython/issues/99388

   (11) https://github.com/python/cpython/issues/99341

   (12) https://github.com/python/cpython/issues/99382

   (13) https://github.com/python/cpython/issues/99379

   (14) https://github.com/python/cpython/issues/99344

   (15) https://github.com/python/cpython/issues/99284

   (16) https://github.com/python/cpython/issues/99201

   (17) https://github.com/python/cpython/issues/99240

   (18) https://github.com/python/cpython/issues/64490

   (19) https://github.com/python/cpython/issues/99029

   (20) https://github.com/python/cpython/issues/98253

   (21) https://github.com/python/cpython/issues/98458

   (22) https://github.com/python/cpython/issues/93453

   (23) https://github.com/python/cpython/issues/97966

   (24) https://github.com/python/cpython/issues/98248

   (25) https://github.com/python/cpython/issues/98108

   (26) https://github.com/python/cpython/issues/98098

   (27) https://github.com/python/cpython/issues/82836

   (28) https://github.com/python/cpython/issues/96828

   (29) https://github.com/python/cpython/issues/88863

   (30) https://github.com/python/cpython/issues/91078

   (31) https://bugs.python.org/issue?@action=redirect&bpo=47220

   (32) https://bugs.python.org/issue?@action=redirect&bpo=44817

   (33) https://bugs.python.org/issue?@action=redirect&bpo=41260

   (34) https://bugs.python.org/issue?@action=redirect&bpo=15999


File: python.info,  Node: Documentação<22>,  Next: Testes<26>,  Prev: Biblioteca<51>,  Up: Python 3 12 0 alpha 3

1.23.32.6 Documentação
......................

   - gh-99931(1): Use sphinxext-opengraph(2) to generate OpenGraph
     metadata(3).

   - gh-89682(4): Reworded docstring of the default ‘__contains__’ to
     clarify that it returns a *note bool: 468.

   - gh-88330(5): Improved the description of what a resource is in
     importlib.resources docs.

   - gh-92892(6): Document that calling variadic functions with ctypes
     requires special care on macOS/arm64 (and possibly other
     platforms).

   - bpo-41825(7): Restructured the documentation for the *note
     os.wait*: dc0. family of functions, and improved the docs for *note
     os.waitid(): dc1. with more explanation of the possible argument
     constants.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99931

   (2) https://sphinxext-opengraph.readthedocs.io/

   (3) https://ogp.me/

   (4) https://github.com/python/cpython/issues/89682

   (5) https://github.com/python/cpython/issues/88330

   (6) https://github.com/python/cpython/issues/92892

   (7) https://bugs.python.org/issue?@action=redirect&bpo=41825


File: python.info,  Node: Testes<26>,  Next: Construção<27>,  Prev: Documentação<22>,  Up: Python 3 12 0 alpha 3

1.23.32.7 Testes
................

   - gh-99892(1): Skip test_normalization() of test_unicodedata if it
     fails to download NormalizationTest.txt file from pythontest.net.
     Patch by Victor Stinner.

   - gh-99934(2): Correct test_marsh on (32 bit) x86: test_deterministic
     sets was failing.

   - gh-99741(3): We’ve implemented multi-phase init (PEP 489/630/687)
     for the internal (for testing) _xxsubinterpreters module.

   - gh-99659(4): Optional big memory tests in ‘test_sqlite3’ now catch
     the correct ‘sqlite.DataError’ exception type in case of too large
     strings and/or blobs passed.

   - gh-99593(5): Cover the Unicode C API with tests.

   - gh-96002(6): Add functional test for Argument Clinic.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99892

   (2) https://github.com/python/cpython/issues/99934

   (3) https://github.com/python/cpython/issues/99741

   (4) https://github.com/python/cpython/issues/99659

   (5) https://github.com/python/cpython/issues/99593

   (6) https://github.com/python/cpython/issues/96002


File: python.info,  Node: Construção<27>,  Next: Windows<24>,  Prev: Testes<26>,  Up: Python 3 12 0 alpha 3

1.23.32.8 Construção
....................

   - gh-99086(1): Fix ‘-Wimplicit-int’, ‘-Wstrict-prototypes’, and
     ‘-Wimplicit-function-declaration’ compiler warnings in ‘configure’
     checks.

   - gh-99337(2): Fix a compilation issue with GCC 12 on macOS.

   - gh-99289(3): Add a ‘COMPILEALL_OPTS’ variable in Makefile to
     override *note compileall: 20. options (default: ‘-j0’) in ‘make
     install’.  Also merged the ‘compileall’ commands into a single
     command building .pyc files for the all optimization levels (0, 1,
     2) at once.  Patch by Victor Stinner.

   - gh-98872(4): Fix a possible fd leak in ‘Programs/_freeze_module.c’
     introduced in Python 3.11.

   - gh-88226(5): Always define ‘TARGET_*’ labels in ‘Python/ceval.c’,
     even if ‘USE_COMPUTED_GOTOS’ is disabled.  This allows breakpoints
     to be set at those labels in (for instance) ‘gdb’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99086

   (2) https://github.com/python/cpython/issues/99337

   (3) https://github.com/python/cpython/issues/99289

   (4) https://github.com/python/cpython/issues/98872

   (5) https://github.com/python/cpython/issues/88226


File: python.info,  Node: Windows<24>,  Next: macOS<17>,  Prev: Construção<27>,  Up: Python 3 12 0 alpha 3

1.23.32.9 Windows
.................

   - gh-99345(1): Use faster initialization functions to detect install
     location for Windows Store package

   - gh-98629(2): Fix initialization of *note sys.version: 178. and
     ‘sys._git’ on Windows

   - gh-99442(3): Fix handling in *note Inicializador Python para
     Windows: 5be. when ‘argv[0]’ does not include a file extension.

   - bpo-40882(4): Fix a memory leak in *note
     multiprocessing.shared_memory.SharedMemory: 174f. on Windows.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99345

   (2) https://github.com/python/cpython/issues/98629

   (3) https://github.com/python/cpython/issues/99442

   (4) https://bugs.python.org/issue?@action=redirect&bpo=40882


File: python.info,  Node: macOS<17>,  Next: Ferramentas/Demos<16>,  Prev: Windows<24>,  Up: Python 3 12 0 alpha 3

1.23.32.10 macOS
................

   - gh-87235(1): On macOS ‘python3 /dev/fd/9 9</path/to/script.py’
     failed for any script longer than a couple of bytes.

   - gh-98940(2): Fix ‘Mac/Extras.install.py’ file filter bug.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/87235

   (2) https://github.com/python/cpython/issues/98940


File: python.info,  Node: Ferramentas/Demos<16>,  Next: API C<26>,  Prev: macOS<17>,  Up: Python 3 12 0 alpha 3

1.23.32.11 Ferramentas/Demos
............................

   - gh-64490(1): Argument Clinic varargs bugfixes

        * Fix out-of-bounds error in
          ‘_PyArg_UnpackKeywordsWithVararg()’.

        * Fix incorrect check which allowed more than one varargs in
          clinic.py.

        * Fix miscalculation of ‘noptargs’ in generated code.

        * Do not generate ‘noptargs’ when there is a vararg argument and
          no optional argument.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/64490


File: python.info,  Node: API C<26>,  Prev: Ferramentas/Demos<16>,  Up: Python 3 12 0 alpha 3

1.23.32.12 API C
................

   - gh-98680(1): ‘PyBUF_*’ constants were marked as part of Limited API
     of Python 3.11+.  These were available in 3.11.0 with *note
     Py_LIMITED_API: 41e. defined for 3.11, and are necessary to use the
     buffer API.

   - gh-99612(2): Fix *note PyUnicode_DecodeUTF8Stateful(): 189f. for
     ASCII-only data: ‘*consumed’ was not set.

   - gh-47146(3): The ‘structmember.h’ header is deprecated.  Its
     non-deprecated contents are now available just by including
     ‘Python.h’, with a ‘Py_’ prefix added if it was missing.
     (Deprecated contents are *note T_OBJECT: 593, *note T_NONE: 595,
     and no-op flags.)  Patch by Petr Viktorin, based on earlier work by
     Alexander Belopolsky and Matthias Braun.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98680

   (2) https://github.com/python/cpython/issues/99612

   (3) https://github.com/python/cpython/issues/47146


File: python.info,  Node: Python 3 12 0 alpha 2,  Next: Python 3 12 0 alpha 1,  Prev: Python 3 12 0 alpha 3,  Up: Changelog

1.23.33 Python 3.12.0 alpha 2
-----------------------------

'Data de lançamento: 2022-11-14'

* Menu:

* Segurança: Segurança<22>.
* Núcleo e embutidos: Núcleo e embutidos<48>.
* Construção: Construção<28>.
* Núcleo e embutidos: Núcleo e embutidos<49>.
* Biblioteca: Biblioteca<52>.
* Documentação: Documentação<23>.
* Testes: Testes<27>.
* Construção: Construção<29>.
* Windows: Windows<25>.
* macOS: macOS<18>.
* API C: API C<27>.


File: python.info,  Node: Segurança<22>,  Next: Núcleo e embutidos<48>,  Up: Python 3 12 0 alpha 2

1.23.33.1 Segurança
...................

   - gh-98433(1): The IDNA codec decoder used on DNS hostnames by *note
     socket: cc. or *note asyncio: a. related name resolution functions
     no longer involves a quadratic algorithm.  This prevents a
     potential CPU denial of service if an out-of-spec excessive length
     hostname involving bidirectional characters were decoded.  Some
     protocols such as *note urllib: 108. http ‘3XX’ redirects
     potentially allow for an attacker to supply such a name.

     Individual labels within an IDNA encoded DNS name will now raise an
     error early during IDNA decoding if they are longer than 1024
     unicode characters given that each decoded DNS label must be 63 or
     fewer characters and the entire decoded DNS name is limited to 255.
     Only an application presenting a hostname or label consisting
     primarily of RFC 3454(2) section 3.1 “Nothing” characters to be
     removed would run into of this new limit.  See also RFC 5894(3)
     section 6 and RFC 3491(4).

   - gh-98739(5): Update bundled libexpat to 2.5.0

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98433

   (2) https://datatracker.ietf.org/doc/html/rfc3454.html

   (3) https://datatracker.ietf.org/doc/html/rfc5894.html

   (4) https://datatracker.ietf.org/doc/html/rfc3491.html

   (5) https://github.com/python/cpython/issues/98739


File: python.info,  Node: Núcleo e embutidos<48>,  Next: Construção<28>,  Prev: Segurança<22>,  Up: Python 3 12 0 alpha 2

1.23.33.2 Núcleo e embutidos
............................

   - gh-81057(1): The docs clearly say that *note PyImport_Inittab:
     18a3, *note PyImport_AppendInittab(): 18a4, and *note
     PyImport_ExtendInittab(): 18a5. should not be used after *note
     Py_Initialize(): 8b1. has been called.  We now enforce this for the
     two functions.  Additionally, the runtime now uses an internal copy
     of *note PyImport_Inittab: 18a3, to guard against modification.

   - gh-99298(2): Fix an issue that could potentially cause incorrect
     error handling for some bytecode instructions.

   - gh-99254(3): The compiler now removes all unused constants from
     code objects (except the first one, which may be a docstring).

   - gh-99205(4): Fix an issue that prevented *note PyThreadState: 78d.
     and *note PyInterpreterState: 8c2. memory from being freed
     properly.

   - gh-81057(5): The 18 global C variables holding the state of the
     allocators have been moved to ‘_PyRuntimeState’.  This is a
     strictly internal change with no change in behavior.

   - gh-99181(6): Fix failure in *note except*: 5b8. with unhashable
     exceptions.

   - gh-99204(7): Fix calculation of ‘sys._base_executable’ when inside
     a POSIX virtual environment using copies of the python binary when
     the base installation does not provide the executable name used by
     the venv.  Calculation will fall back to alternative names
     (“python<MAJOR>”, “python<MAJOR>.<MINOR>”).

   - gh-96055(8): Update *note faulthandler: 58. to emit an error
     message with the proper unexpected signal number.  Patch by Donghee
     Na.

   - gh-99153(9): Fix location of *note SyntaxError: 18d. for a *note
     try: 6e9. block with both *note except: 18b. and *note except*:
     5b8.

   - gh-98686(10): Merge the adaptive opcode logic into each
     instruction’s unquickened variant, and merge the logic in
     ‘EXTENDED_ARG_QUICK’ into *note EXTENDED_ARG: 18a6.  With these
     changes, the quickening that happens at code object creation is now
     only responsible for initializing warmup counters and inserting
     superinstructions.

   - gh-99103(11): Fix the error reporting positions of specialized
     traceback anchors when the source line contains Unicode characters.

   - gh-99139(12): Improve the error suggestion for *note NameError:
     43f. exceptions for instances.  Now if a *note NameError: 43f. is
     raised in a method and the instance has an attribute that’s exactly
     equal to the name in the exception, the suggestion will include
     ‘self.<NAME>’ instead of the closest match in the method scope.
     Patch by Pablo Galindo

   - gh-98401(13): Octal escapes with value larger than ‘0o377’ (ex:
     ‘"\477"’), deprecated in Python 3.11, now produce a *note
     SyntaxWarning: 466, instead of *note DeprecationWarning: 1a5.  In a
     future Python version they will be eventually a *note SyntaxError:
     18d.  Patch by Victor Stinner.

   - gh-98401(14): A backslash-character pair that is not a valid escape
     sequence now generates a *note SyntaxWarning: 466, instead of *note
     DeprecationWarning: 1a5.  For example, ‘re.compile("\d+\.\d+")’ now
     emits a *note SyntaxWarning: 466. (‘"\d"’ is an invalid escape
     sequence), use raw strings for regular expression:
     ‘re.compile(r"\d+\.\d+")’.  In a future Python version, *note
     SyntaxError: 18d. will eventually be raised, instead of *note
     SyntaxWarning: 466.  Patch by Victor Stinner.

   - gh-96793(15): Handle StopIteration and StopAsyncIteration raised in
     generator or coroutines in the bytecode, rather than in wrapping C
     code.

   - gh-98931(16): Improve the *note SyntaxError: 18d. error message
     when the user types ‘import x from y’ instead of ‘from y import x’.
     Patch by Pablo Galindo

   - gh-98852(17): Fix subscription of type aliases containing bare
     generic types or types like *note TypeVar: 15d.: for example
     ‘tuple[A, T][int]’ and ‘tuple[TypeVar, T][int]’, where ‘A’ is a
     generic type, and ‘T’ is a type variable.

   - gh-98925(18): Lower the recursion depth for marshal on WASI to
     support (in-development) wasmtime 2.0.

   - gh-98783(19): Fix multiple crashes in debug mode when ‘str’
     subclasses are used instead of ‘str’ itself.

   - gh-98811(20): Use complete source locations to simplify detection
     of ‘__future__’ imports which are not at the beginning of the file.
     Also corrects the offset in the exception raised in one case, which
     was off by one and impeded highlighting.

   - gh-96793(21): Add specialization of *note FOR_ITER: 184a. for
     generators.  Saves multiple layers of dispatch and checking to get
     from the *note FOR_ITER: 184a. instruction in the caller to the
     *note RESUME: 315. in the generator.

   - gh-98762(22): Fix source locations of *note match: 810.
     sub-patterns.

   - gh-98586(23): Added the methods *note PyObject_Vectorcall(): 55c.
     and *note PyObject_VectorcallMethod(): 55d. to the *note Limited
     API: 553. along with the auxiliary macro constant *note
     PY_VECTORCALL_ARGUMENTS_OFFSET: 55e.

     The availability of these functions enables more efficient PEP
     590(24) vector calls from binary extension modules that avoid
     argument boxing/unboxing overheads.

   - gh-99257(25): Fix an issue where member descriptors (such as those
     for *note __slots__: 1533.) could behave incorrectly or crash
     instead of raising a *note TypeError: 2c3. when accessed via an
     instance of an invalid type.

   - gh-93143(26): Rather than changing ‘co_code’, the interpreter will
     now display a *note RuntimeWarning: 1bd. and assign *note None:
     675. to any fast locals that are left unbound after jumps or *note
     del: 18a7. statements executed while tracing.

   - gh-96421(27): When calling into Python code from C code, through
     *note PyEval_EvalFrameEx(): 1066. or a related C-API function, a
     shim frame in inserted into the call stack.  This occurs in the
     ‘_PyEval_EvalFrameDefault()’ function.  The extra frame should be
     invisible to all Python and most C extensions, but out-of-process
     profilers and debuggers need to be aware of it.  These shim frames
     can be detected by checking ‘frame->owner ==
     FRAME_OWNED_BY_CSTACK’.

     Extensions implementing their own interpreters using PEP 523 need
     to be aware of this shim frame and the changes to the semantics of
     *note RETURN_VALUE: 18a8, *note YIELD_VALUE: 314, and *note
     RETURN_GENERATOR: 6fc, which now clear the frame.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/81057

   (2) https://github.com/python/cpython/issues/99298

   (3) https://github.com/python/cpython/issues/99254

   (4) https://github.com/python/cpython/issues/99205

   (5) https://github.com/python/cpython/issues/81057

   (6) https://github.com/python/cpython/issues/99181

   (7) https://github.com/python/cpython/issues/99204

   (8) https://github.com/python/cpython/issues/96055

   (9) https://github.com/python/cpython/issues/99153

   (10) https://github.com/python/cpython/issues/98686

   (11) https://github.com/python/cpython/issues/99103

   (12) https://github.com/python/cpython/issues/99139

   (13) https://github.com/python/cpython/issues/98401

   (14) https://github.com/python/cpython/issues/98401

   (15) https://github.com/python/cpython/issues/96793

   (16) https://github.com/python/cpython/issues/98931

   (17) https://github.com/python/cpython/issues/98852

   (18) https://github.com/python/cpython/issues/98925

   (19) https://github.com/python/cpython/issues/98783

   (20) https://github.com/python/cpython/issues/98811

   (21) https://github.com/python/cpython/issues/96793

   (22) https://github.com/python/cpython/issues/98762

   (23) https://github.com/python/cpython/issues/98586

   (24) https://peps.python.org/pep-0590/

   (25) https://github.com/python/cpython/issues/99257

   (26) https://github.com/python/cpython/issues/93143

   (27) https://github.com/python/cpython/issues/96421


File: python.info,  Node: Construção<28>,  Next: Núcleo e embutidos<49>,  Prev: Núcleo e embutidos<48>,  Up: Python 3 12 0 alpha 2

1.23.33.3 Construção
....................

   - gh-98415(1): Fix detection of MAC addresses for *note uuid: 110. on
     certain OSs.  Patch by Chaim Sanders

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98415


File: python.info,  Node: Núcleo e embutidos<49>,  Next: Biblioteca<52>,  Prev: Construção<28>,  Up: Python 3 12 0 alpha 2

1.23.33.4 Núcleo e embutidos
............................

   - gh-98686(1): Quicken all code objects, and specialize adaptive
     bytecode instructions more aggressively.

   - gh-92119(2): Print exception class name instead of its string
     representation when raising errors from *note ctypes: 2a. calls.

   - gh-91058(3): *note ImportError: 419. raised from failed ‘from
     <module> import <name>’ now include suggestions for the value of
     ‘<name>’ based on the available names in ‘<module>’.  Patch by
     Pablo Galindo

   - gh-96793(4): The *note FOR_ITER: 184a. now leaves the iterator on
     the stack on termination of the loop.  This is to assist
     specialization of loops for generators.

   - gh-90716(5): Add _pylong.py module.  It includes asymptotically
     faster algorithms that can be used for operations on integers with
     many digits.  It is used by longobject.c to speed up some
     operations.

   - gh-95389(6): Expose *note ETH_P_ALL: 18ab. and some of the *note
     ETHERTYPE_* constants: 18ac. in *note socket: cc.  Patch by Noam
     Cohen.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98686

   (2) https://github.com/python/cpython/issues/92119

   (3) https://github.com/python/cpython/issues/91058

   (4) https://github.com/python/cpython/issues/96793

   (5) https://github.com/python/cpython/issues/90716

   (6) https://github.com/python/cpython/issues/95389


File: python.info,  Node: Biblioteca<52>,  Next: Documentação<23>,  Prev: Núcleo e embutidos<49>,  Up: Python 3 12 0 alpha 2

1.23.33.5 Biblioteca
....................

   - gh-93696(1): Allow *note pdb: a5. to locate source for frozen
     modules in the standard library.

   - gh-99418(2): Fix bug in *note urllib.parse.urlparse(): 30d. that
     causes URL schemes that begin with a digit, a plus sign, or a minus
     sign to be parsed incorrectly.

   - gh-94597(3): Deprecate *note asyncio.AbstractChildWatcher: 2bc. to
     be removed in Python 3.14.  Patch by Kumar Aditya.

   - gh-99305(4): Improve performance of *note secrets.token_hex():
     18ae.

   - gh-74044(5): Fixed bug where *note inspect.signature(): 738.
     reported incorrect arguments for decorated methods.

   - gh-99275(6): Fix ‘SystemError’ in *note ctypes: 2a. when exception
     was not set during ‘__initsubclass__’.

   - gh-99277(7): Remove older version of
     ‘_SSLProtocolTransport.get_write_buffer_limits’ in
     ‘asyncio.sslproto’

   - gh-99248(8): fix negative numbers failing in verify()

   - gh-99155(9): Fix *note statistics.NormalDist: a41. pickle with ‘0’
     and ‘1’ protocols.

   - gh-93464(10): ‘enum.auto()’ is now correctly activated when
     combined with other assignment values.  E.g.  ‘ONE = auto(), 'some
     text'’ will now evaluate as ‘(1, 'some text')’.

   - gh-99134(11): Update the bundled copy of pip to version 22.3.1.

   - gh-92584(12): Remove the ‘distutils’ package.  It was deprecated in
     Python 3.10 by PEP 632(13) “Deprecate distutils module”.  For
     projects still using ‘distutils’ and cannot be updated to something
     else, the ‘setuptools’ project can be installed: it still provides
     ‘distutils’.  Patch by Victor Stinner.

   - gh-98999(14): Now ‘_pyio’ is consistent with ‘_io’ in raising
     ‘ValueError’ when executing methods over closed buffers.

   - gh-83004(15): Clean up refleak on failed module initialisation in
     ‘_zoneinfo’

   - gh-83004(16): Clean up refleaks on failed module initialisation in
     ‘_pickle’

   - gh-83004(17): Clean up refleak on failed module initialisation in
     ‘_io’.

   - gh-98897(18): Fix memory leak in *note math.dist(): a0a. when both
     points don’t have the same dimension.  Patch by Kumar Aditya.

   - gh-98878(19): Use the frame bound builtins when offering a name
     suggestion in *note traceback: fe. to prevent crashing when
     ‘__builtins__’ is not a dict.

   - gh-98139(20): In ‘importlib._bootstrap’, enhance namespace package
     repr to ‘<module 'x' (namespace) from ['path']>’.

   - gh-90352(21): Fix ‘_SelectorDatagramTransport’ to inherit from
     *note DatagramTransport: 18af. in *note asyncio: a.  Patch by Kumar
     Aditya.

   - gh-98793(22): Fix argument typechecks in ‘_overlapped.WSAConnect()’
     and ‘_overlapped.Overlapped.WSASendTo()’ functions.

   - gh-98744(23): Prevent crashing in *note traceback: fe. when
     retrieving the byte-offset for some source files that contain
     certain unicode characters.

   - gh-98740(24): Fix internal error in the *note re: b9. module which
     in very rare circumstances prevented compilation of a regular
     expression containing a *note conditional expression: 18b0. without
     the “else” branch.

   - gh-98703(25): Fix *note asyncio.StreamWriter.drain(): 18b1. to call
     ‘protocol.connection_lost’ callback only once on Windows.

   - gh-98624(26): Add a mutex to unittest.mock.NonCallableMock to
     protect concurrent access to mock attributes.

   - gh-98658(27): The *note array.array: 1a0. class now supports
     subscripting, making it a *note generic type: 439.

   - gh-98284(28): Improved *note TypeError: 2c3. message for undefined
     abstract methods of a *note abc.ABC: f49. instance.  The names of
     the missing methods are surrounded by single-quotes to highlight
     them.

   - gh-96151(29): Allow ‘BUILTINS’ to be a valid field name for frozen
     dataclasses.

   - gh-98086(30): Make sure ‘patch.dict()’ can be applied on async
     functions.

   - gh-72719(31): Remove modules ‘asyncore’ and ‘asynchat’, which were
     deprecated by PEP 594(32).

   - gh-96192(33): Fix handling of ‘bytes’ *note path-like objects: 2a0.
     in ‘os.ismount()’.

   - gh-94172(34): *note ftplib: 5e.: Remove the ‘FTP_TLS.ssl_version’
     class attribute: use the 'context' parameter instead.  Patch by
     Victor Stinner

   - gh-94172(35): Remove the 'keyfile' and 'certfile' parameters from
     the *note ftplib: 5e, *note imaplib: 74, *note poplib: ac. and
     *note smtplib: ca. modules, and the 'key_file', 'cert_file' and
     'check_hostname' parameters from the *note http.client: 6f. module,
     all deprecated since Python 3.6.  Use the 'context' parameter
     ('ssl_context' in *note imaplib: 74.) instead.  Patch by Victor
     Stinner.

   - gh-83638(36): Add the *note autocommit: 4b6. attribute to *note
     sqlite3.Connection: 245. and the 'autocommit' parameter to *note
     sqlite3.connect(): 2a8. to control PEP 249(37)-compliant *note
     transaction handling: 4b7.  Patch by Erlend E. Aasland.

   - gh-92452(38): Fixed a race condition that could cause *note
     sysconfig.get_config_var(): 1063. to incorrectly return *note None:
     675. in multi-threaded programs.

   - gh-91803(39): Fix an error when using a method of objects mocked
     with *note unittest.mock.create_autospec(): 16f4. after it was
     sealed with *note unittest.mock.seal(): bb9. function.

   - bpo-38523(40): *note shutil.copytree(): a33. now applies the
     'ignore_dangling_symlinks' argument recursively.

   - bpo-40358(41): Add walk_up argument in *note
     pathlib.PurePath.relative_to(): 2ca.

   - bpo-36267(42): Fix IndexError in *note argparse.ArgumentParser:
     539. when a ‘store_true’ action is given an explicit argument.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/93696

   (2) https://github.com/python/cpython/issues/99418

   (3) https://github.com/python/cpython/issues/94597

   (4) https://github.com/python/cpython/issues/99305

   (5) https://github.com/python/cpython/issues/74044

   (6) https://github.com/python/cpython/issues/99275

   (7) https://github.com/python/cpython/issues/99277

   (8) https://github.com/python/cpython/issues/99248

   (9) https://github.com/python/cpython/issues/99155

   (10) https://github.com/python/cpython/issues/93464

   (11) https://github.com/python/cpython/issues/99134

   (12) https://github.com/python/cpython/issues/92584

   (13) https://peps.python.org/pep-0632/

   (14) https://github.com/python/cpython/issues/98999

   (15) https://github.com/python/cpython/issues/83004

   (16) https://github.com/python/cpython/issues/83004

   (17) https://github.com/python/cpython/issues/83004

   (18) https://github.com/python/cpython/issues/98897

   (19) https://github.com/python/cpython/issues/98878

   (20) https://github.com/python/cpython/issues/98139

   (21) https://github.com/python/cpython/issues/90352

   (22) https://github.com/python/cpython/issues/98793

   (23) https://github.com/python/cpython/issues/98744

   (24) https://github.com/python/cpython/issues/98740

   (25) https://github.com/python/cpython/issues/98703

   (26) https://github.com/python/cpython/issues/98624

   (27) https://github.com/python/cpython/issues/98658

   (28) https://github.com/python/cpython/issues/98284

   (29) https://github.com/python/cpython/issues/96151

   (30) https://github.com/python/cpython/issues/98086

   (31) https://github.com/python/cpython/issues/72719

   (32) https://peps.python.org/pep-0594/

   (33) https://github.com/python/cpython/issues/96192

   (34) https://github.com/python/cpython/issues/94172

   (35) https://github.com/python/cpython/issues/94172

   (36) https://github.com/python/cpython/issues/83638

   (37) https://peps.python.org/pep-0249/

   (38) https://github.com/python/cpython/issues/92452

   (39) https://github.com/python/cpython/issues/91803

   (40) https://bugs.python.org/issue?@action=redirect&bpo=38523

   (41) https://bugs.python.org/issue?@action=redirect&bpo=40358

   (42) https://bugs.python.org/issue?@action=redirect&bpo=36267


File: python.info,  Node: Documentação<23>,  Next: Testes<27>,  Prev: Biblioteca<52>,  Up: Python 3 12 0 alpha 2

1.23.33.6 Documentação
......................

   - gh-98832(1): Changes wording of docstring for *note
     pathlib.Path.iterdir(): 171d.

   - gh-97966(2): Update uname docs to clarify the special nature of the
     platform attribute and to indicate when it became late-bound.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98832

   (2) https://github.com/python/cpython/issues/97966


File: python.info,  Node: Testes<27>,  Next: Construção<29>,  Prev: Documentação<23>,  Up: Python 3 12 0 alpha 2

1.23.33.7 Testes
................

   - gh-98903(1): The Python test suite now fails with exit code 4 if no
     tests ran.  It should help detecting typos in test names and test
     methods.

   - gh-98713(2): Fix a bug in the *note typing: 104. tests where a test
     relying on CPython-specific implementation details was not
     decorated with ‘@cpython_only’ and was not skipped on other
     implementations.

   - gh-87390(3): Add tests for star-unpacking with PEP 646, and some
     other miscellaneous PEP 646 tests.

   - gh-96853(4): Added explicit coverage of ‘Py_Initialize’ (and hence
     ‘Py_InitializeEx’) back to the embedding tests (all other embedding
     tests migrated to ‘Py_InitializeFromConfig’ in Python 3.11)

   - bpo-34272(5): Some C API tests were moved into the new
     Lib/test/test_capi/ directory.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98903

   (2) https://github.com/python/cpython/issues/98713

   (3) https://github.com/python/cpython/issues/87390

   (4) https://github.com/python/cpython/issues/96853

   (5) https://bugs.python.org/issue?@action=redirect&bpo=34272


File: python.info,  Node: Construção<29>,  Next: Windows<25>,  Prev: Testes<27>,  Up: Python 3 12 0 alpha 2

1.23.33.8 Construção
....................

   - gh-99086(1): Fix ‘-Wimplicit-int’ compiler warning in ‘configure’
     check for ‘PTHREAD_SCOPE_SYSTEM’.

   - gh-99016(2): Fix build with ‘PYTHON_FOR_REGEN=python3.8’.

   - gh-97731(3): Specify the full path to the source location for ‘make
     docclean’ (needed for cross-builds).

   - gh-98949(4): Drop unused build dependency on ‘readelf’.

   - gh-98989(5): Use ‘python3.11’, if available, for regeneration and
     freezing.

   - gh-98831(6): Add new tooling, in ‘Tools/cases_generator’, to
     generate the interpreter switch statement from a list of opcode
     definitions.  This only affects adding, modifying or removing
     instruction definitions.  The instruction definitions now live in
     ‘Python/bytecodes.c’, in the form of a custom DSL (under
     development)(7).  The tooling reads this file and writes
     ‘Python/generated_cases.c.h’, which is then included by
     ‘Python/ceval.c’ to provide most of the cases of the main
     interpreter switch.

   - gh-98817(8): Remove PCbuild/lib.pyproj: it’s not used for anything,
     is only a minor convenience for Visual Studio users (who probably
     mostly don’t even know about it), and it takes a lot of maintenance
     effort to keep updated.

   - gh-98776(9): Fix ‘make regen-test-levenshtein’ for out-of-tree
     builds.

   - gh-98707(10): Don’t use vendored ‘libmpdec’ headers if *note
     -with-system-libmpdec: 412. is passed to ‘configure’.  Don’t use
     vendored ‘libexpat’ headers if *note -with-system-expat: 18b5. is
     passed to ‘configure’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/99086

   (2) https://github.com/python/cpython/issues/99016

   (3) https://github.com/python/cpython/issues/97731

   (4) https://github.com/python/cpython/issues/98949

   (5) https://github.com/python/cpython/issues/98989

   (6) https://github.com/python/cpython/issues/98831

   (7) 
https://github.com/faster-cpython/ideas/blob/main/3.12/interpreter_definition.md

   (8) https://github.com/python/cpython/issues/98817

   (9) https://github.com/python/cpython/issues/98776

   (10) https://github.com/python/cpython/issues/98707


File: python.info,  Node: Windows<25>,  Next: macOS<18>,  Prev: Construção<29>,  Up: Python 3 12 0 alpha 2

1.23.33.9 Windows
.................

   - gh-98689(1): Update Windows builds to zlib v1.2.13.  v1.2.12 has
     CVE 2022-37434(2), but the vulnerable ‘inflateGetHeader’ API is not
     used by Python.

   - gh-98790(3): Assumes that a missing ‘DLLs’ directory means that
     standard extension modules are in the executable’s directory.

   - gh-98745(4): Update ‘py.exe’ launcher to install 3.11 by default
     and 3.12 on request.

   - gh-98692(5): Fix the *note Inicializador Python para Windows: 5be.
     ignoring unrecognized shebang lines instead of treating them as
     local paths

   - gh-94328(6): Update Windows installer to use SQLite 3.39.4.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98689

   (2) https://www.cve.org/CVERecord?id=CVE-2022-37434

   (3) https://github.com/python/cpython/issues/98790

   (4) https://github.com/python/cpython/issues/98745

   (5) https://github.com/python/cpython/issues/98692

   (6) https://github.com/python/cpython/issues/94328


File: python.info,  Node: macOS<18>,  Next: API C<27>,  Prev: Windows<25>,  Up: Python 3 12 0 alpha 2

1.23.33.10 macOS
................

   - gh-94328(1): Update macOS installer to SQLite 3.39.4.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/94328


File: python.info,  Node: API C<27>,  Prev: macOS<18>,  Up: Python 3 12 0 alpha 2

1.23.33.11 API C
................

   - gh-98724(1): The *note Py_CLEAR: 578, *note Py_SETREF: 579. and
     *note Py_XSETREF: 57a. macros now only evaluate their argument
     once.  If the argument has side effects, these side effects are no
     longer duplicated.  Patch by Victor Stinner.

   - gh-98978(2): Fix use-after-free in ‘Py_SetPythonHome(NULL)’,
     ‘Py_SetProgramName(NULL)’ and ‘_Py_SetProgramFullPath(NULL)’
     function calls.  Issue reported by Benedikt Reinartz.  Patch by
     Victor Stinner.

   - gh-98410(3): Add ‘getbufferproc’ and ‘releasebufferproc’ to the
     stable API.

   - gh-98610(4): Some configurable capabilities of sub-interpreters
     have changed.  They always allow subprocesses (*note subprocess:
     d6.) now, whereas before subprocesses could be optionally
     disallowed for a sub-interpreter.  Instead ‘os.exec()’ can now be
     disallowed.  Disallowing daemon threads is now supported.
     Disallowing all threads is still allowed, but is never done by
     default.  Note that the optional restrictions are only available
     through ‘_Py_NewInterpreterFromConfig()’, which isn’t a public API.
     They do not affect the main interpreter, nor *note
     Py_NewInterpreter(): 18b9.

   - gh-98608(5): A ‘_PyInterpreterConfig’ has been added and
     ‘_Py_NewInterpreter()’ has been renamed to
     ‘_Py_NewInterpreterFromConfig()’.  The “isolated_subinterpreters”
     argument is now a granular config that captures the previous
     behavior.  Note that this is all “private” API.

   - gh-96853(6): ‘Py_InitializeEx’ now correctly calls ‘PyConfig_Clear’
     after initializing the interpreter (the omission didn’t cause a
     memory leak only because none of the dynamically allocated config
     fields are populated by the wrapper function)

   - gh-91248(7): Add *note PyFrame_GetVar(): 568. and *note
     PyFrame_GetVarString(): 569. functions to get a frame variable by
     its name.  Patch by Victor Stinner.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98724

   (2) https://github.com/python/cpython/issues/98978

   (3) https://github.com/python/cpython/issues/98410

   (4) https://github.com/python/cpython/issues/98610

   (5) https://github.com/python/cpython/issues/98608

   (6) https://github.com/python/cpython/issues/96853

   (7) https://github.com/python/cpython/issues/91248


File: python.info,  Node: Python 3 12 0 alpha 1,  Next: Python 3 11 0 beta 1,  Prev: Python 3 12 0 alpha 2,  Up: Changelog

1.23.34 Python 3.12.0 alpha 1
-----------------------------

'Data de lançamento: 2022-10-25'

* Menu:

* Segurança: Segurança<23>.
* Núcleo e embutidos: Núcleo e embutidos<50>.
* Biblioteca: Biblioteca<53>.
* Núcleo e embutidos: Núcleo e embutidos<51>.
* Biblioteca: Biblioteca<54>.
* Núcleo e embutidos: Núcleo e embutidos<52>.
* Biblioteca: Biblioteca<55>.
* Núcleo e embutidos: Núcleo e embutidos<53>.
* Biblioteca: Biblioteca<56>.
* Núcleo e embutidos: Núcleo e embutidos<54>.
* Biblioteca: Biblioteca<57>.
* Núcleo e embutidos: Núcleo e embutidos<55>.
* Biblioteca: Biblioteca<58>.
* Núcleo e embutidos: Núcleo e embutidos<56>.
* Biblioteca: Biblioteca<59>.
* Núcleo e embutidos: Núcleo e embutidos<57>.
* Biblioteca: Biblioteca<60>.
* Núcleo e embutidos: Núcleo e embutidos<58>.
* Biblioteca: Biblioteca<61>.
* Núcleo e embutidos: Núcleo e embutidos<59>.
* Biblioteca: Biblioteca<62>.
* Documentação: Documentação<24>.
* Testes: Testes<28>.
* Construção: Construção<30>.
* Windows: Windows<26>.
* macOS: macOS<19>.
* IDLE: IDLE<19>.
* Ferramentas/Demos: Ferramentas/Demos<17>.
* API C: API C<28>.


File: python.info,  Node: Segurança<23>,  Next: Núcleo e embutidos<50>,  Up: Python 3 12 0 alpha 1

1.23.34.1 Segurança
...................

   - gh-97616(1): Fix multiplying a list by an integer (‘list *= int’):
     detect the integer overflow when the new allocated length is close
     to the maximum size.  Issue reported by Jordan Limor.  Patch by
     Victor Stinner.

   - gh-97514(2): On Linux the *note multiprocessing: 94. module returns
     to using filesystem backed unix domain sockets for communication
     with the 'forkserver' process instead of the Linux abstract socket
     namespace.  Only code that chooses to use the *note “forkserver”
     start method: 2c8. is affected.

     Abstract sockets have no permissions and could allow any user on
     the system in the same network namespace(3) (often the whole
     system) to inject code into the multiprocessing 'forkserver'
     process.  This was a potential privilege escalation.  Filesystem
     based socket permissions restrict this to the 'forkserver' process
     user as was the default in Python 3.8 and earlier.

     This prevents Linux CVE 2022-42919(4).

   - gh-87389(5): *note http.server: 72.: Fix an open redirection
     vulnerability in the HTTP server when an URI path starts with ‘//’.
     Vulnerability discovered, and initial fix proposed, by Hamza Avvan.

   - gh-79096(6): LWPCookieJar and MozillaCookieJar create files with
     file mode 600 instead of 644 (Microsoft Windows is not affected)

   - gh-92888(7): Fix ‘memoryview’ use after free when accessing the
     backing buffer in certain cases.

   - gh-68966(8): The deprecated mailcap module now refuses to inject
     unsafe text (filenames, MIME types, parameters) into shell
     commands.  Instead of using such text, it will warn and act as if a
     match was not found (or for test commands, as if the test failed).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/97616

   (2) https://github.com/python/cpython/issues/97514

   (3) https://man7.org/linux/man-pages/man7/network_namespaces.7.html

   (4) https://www.cve.org/CVERecord?id=CVE-2022-42919

   (5) https://github.com/python/cpython/issues/87389

   (6) https://github.com/python/cpython/issues/79096

   (7) https://github.com/python/cpython/issues/92888

   (8) https://github.com/python/cpython/issues/68966


File: python.info,  Node: Núcleo e embutidos<50>,  Next: Biblioteca<53>,  Prev: Segurança<23>,  Up: Python 3 12 0 alpha 1

1.23.34.2 Núcleo e embutidos
............................

   - gh-98374(1): Suppress ImportError for invalid query for help()
     command.  Patch by Donghee Na.

   - gh-98461(2): Fix source location in bytecode for list, set and dict
     comprehensions as well as generator expressions.

   - gh-98354(3): Added unicode check for ‘name’ attribute of ‘spec’
     argument passed in ‘_imp.create_builtin()’ function.

   - gh-98398(4): Fix source location of ‘assert’ bytecodes.

   - gh-98390(5): Fix location of sub-expressions of boolean
     expressions, by reducing their scope to that of the sub-expression.

   - gh-98254(6): Modules from the standard library are now potentially
     suggested as part of the error messages displayed by the
     interpreter when an *note NameError: 43f. is raised to the top
     level.  Patch by Pablo Galindo

   - gh-97997(7): Add running column offset to the tokenizer state to
     avoid calculating AST column information with pointer arithmetic.

   - gh-97973(8): Modify the tokenizer to return all necessary
     information the parser needs to set location information in the AST
     nodes, so that the parser does not have to calculate those doing
     pointer arithmetic.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98374

   (2) https://github.com/python/cpython/issues/98461

   (3) https://github.com/python/cpython/issues/98354

   (4) https://github.com/python/cpython/issues/98398

   (5) https://github.com/python/cpython/issues/98390

   (6) https://github.com/python/cpython/issues/98254

   (7) https://github.com/python/cpython/issues/97997

   (8) https://github.com/python/cpython/issues/97973


File: python.info,  Node: Biblioteca<53>,  Next: Núcleo e embutidos<51>,  Prev: Núcleo e embutidos<50>,  Up: Python 3 12 0 alpha 1

1.23.34.3 Biblioteca
....................

   - gh-96078(1): *note os.sched_yield(): 1150. now release the GIL
     while calling sched_yield(2).  Patch by Donghee Na.

   - gh-97955(2): Migrate *note zoneinfo: 134. to Argument Clinic.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/96078

   (2) https://github.com/python/cpython/issues/97955


File: python.info,  Node: Núcleo e embutidos<51>,  Next: Biblioteca<54>,  Prev: Biblioteca<53>,  Up: Python 3 12 0 alpha 1

1.23.34.4 Núcleo e embutidos
............................

   - gh-97912(1): The compiler now avoids quadratic behavior when
     finding which instructions should use the *note LOAD_FAST_CHECK:
     4e5. opcode.

   - gh-97002(2): Fix an issue where several frame objects could be
     backed by the same interpreter frame, possibly leading to corrupted
     memory and hard crashes of the interpreter.

   - gh-97943(3): Bugfix: *note PyFunction_GetAnnotations(): 18bf.
     should return a borrowed reference.  It was returning a new
     reference.

   - gh-97922(4): The Garbage Collector now runs only on the eval
     breaker mechanism of the Python bytecode evaluation loop instead on
     object allocations.  The GC can also run when *note
     PyErr_CheckSignals(): 467. is called so C extensions that need to
     run for a long time without executing any Python code also have a
     chance to execute the GC periodically.

   - gh-65961(5): When ‘__package__’ is different than
     ‘__spec__.parent’, raise a ‘DeprecationWarning’ instead of
     ‘ImportWarning’.

     Also remove ‘importlib.util.set_package()’ which was scheduled for
     removal.

   - gh-97850(6): Long deprecated, ‘module_repr()’ should now be
     completely eradicated.

   - gh-86298(7): In cases where ‘warnings.warn_explicit()’ consults the
     module’s loader, an ‘DeprecationWarning’ is issued when
     ‘m.__loader__’ differs from ‘m.__spec__.loader’.

   - gh-97779(8): Ensure that all Python frame objects are backed by
     “complete” frames.

   - gh-91052(9): Add API for subscribing to modification events on
     selected dictionaries.

   - gh-97752(10): Fix possible data corruption or crashes when
     accessing the ‘f_back’ member of newly-created generator or
     coroutine frames.

   - gh-97591(11): Fixed a missing incref/decref pair in
     ‘Exception.__setstate__()’.  Patch by Ofey Chan.

   - gh-97670(12): Remove the ‘sys.getdxp()’ function and the
     ‘Tools/scripts/analyze_dxp.py’ script.  DXP stands for “dynamic
     execution pairs”.  They were related to ‘DYNAMIC_EXECUTION_PROFILE’
     and ‘DXPAIRS’ macros which have been removed in Python 3.11.
     Python can now be built with *note ./configure -enable-pystats:
     18c0. to gather statistics on Python opcodes.  Patch by Victor
     Stinner.

   - gh-94526(13): Fix the Python path configuration used to initialized
     *note sys.path: 3b4. at Python startup.  Paths are no longer
     encoded to UTF-8/strict to avoid encoding errors if it contains
     surrogate characters (bytes paths are decoded with the
     surrogateescape error handler).  Patch by Victor Stinner.

   - gh-96670(14): The parser now raises *note SyntaxError: 18d. when
     parsing source code containing null bytes.  Patch by Pablo Galindo

   - gh-96975(15): Fix a crash occurring when *note PyEval_GetFrame():
     18c1. is called while the topmost Python frame is in a
     partially-initialized state.

   - gh-96848(16): Fix command line parsing: reject *note -X
     int_max_str_digits: 176. option with no value (invalid) when the
     *note PYTHONINTMAXSTRDIGITS: 18c2. environment variable is set to a
     valid limit.  Patch by Victor Stinner.

   - gh-95921(17): Fix overly-broad source position information for
     chained comparisons used as branching conditions.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/97912

   (2) https://github.com/python/cpython/issues/97002

   (3) https://github.com/python/cpython/issues/97943

   (4) https://github.com/python/cpython/issues/97922

   (5) https://github.com/python/cpython/issues/65961

   (6) https://github.com/python/cpython/issues/97850

   (7) https://github.com/python/cpython/issues/86298

   (8) https://github.com/python/cpython/issues/97779

   (9) https://github.com/python/cpython/issues/91052

   (10) https://github.com/python/cpython/issues/97752

   (11) https://github.com/python/cpython/issues/97591

   (12) https://github.com/python/cpython/issues/97670

   (13) https://github.com/python/cpython/issues/94526

   (14) https://github.com/python/cpython/issues/96670

   (15) https://github.com/python/cpython/issues/96975

   (16) https://github.com/python/cpython/issues/96848

   (17) https://github.com/python/cpython/issues/95921


File: python.info,  Node: Biblioteca<54>,  Next: Núcleo e embutidos<52>,  Prev: Núcleo e embutidos<51>,  Up: Python 3 12 0 alpha 1

1.23.34.5 Biblioteca
....................

   - gh-96821(1): Fix undefined behaviour in ‘audioop.c’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/96821


File: python.info,  Node: Núcleo e embutidos<52>,  Next: Biblioteca<55>,  Prev: Biblioteca<54>,  Up: Python 3 12 0 alpha 1

1.23.34.6 Núcleo e embutidos
............................

   - gh-96821(1): Fix undefined behaviour in ‘_testcapimodule.c’.

   - gh-95778(2): When *note ValueError: 202. is raised if an integer is
     larger than the limit, mention the *note
     sys.set_int_max_str_digits(): 18c5. function in the error message.
     Patch by Victor Stinner.

   - gh-96387(3): At Python exit, sometimes a thread holding the GIL can
     wait forever for a thread (usually a daemon thread) which requested
     to drop the GIL, whereas the thread already exited.  To fix the
     race condition, the thread which requested the GIL drop now resets
     its request before exiting.  Issue discovered and analyzed by
     Mingliang ZHAO. Patch by Victor Stinner.

   - gh-96864(4): Fix a possible assertion failure, fatal error, or
     *note SystemError: 575. if a line tracing event raises an exception
     while opcode tracing is enabled.

   - gh-95778(5): The ‘PyLong_FromString’ function was refactored to
     make it more maintainable and extensible.

   - gh-96678(6): Fix undefined behaviour in C code of null pointer
     arithmetic.

   - gh-96754(7): Make sure that all frame objects created are created
     from valid interpreter frames.  Prevents the possibility of invalid
     frames in backtraces and signal handlers.

   - gh-90997(8): Improve the performance of reading and writing inline
     bytecode caches on some platforms.

   - gh-96751(9): Remove dead code from ‘CALL_FUNCTION_EX’ opcode.

   - gh-90751(10): *note memoryview: 2eb. now supports half-floats.
     Patch by Donghee Na and Antoine Pitrou.

   - gh-96678(11): Fix case of undefined behavior in ceval.c

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/96821

   (2) https://github.com/python/cpython/issues/95778

   (3) https://github.com/python/cpython/issues/96387

   (4) https://github.com/python/cpython/issues/96864

   (5) https://github.com/python/cpython/issues/95778

   (6) https://github.com/python/cpython/issues/96678

   (7) https://github.com/python/cpython/issues/96754

   (8) https://github.com/python/cpython/issues/90997

   (9) https://github.com/python/cpython/issues/96751

   (10) https://github.com/python/cpython/issues/90751

   (11) https://github.com/python/cpython/issues/96678


File: python.info,  Node: Biblioteca<55>,  Next: Núcleo e embutidos<53>,  Prev: Núcleo e embutidos<52>,  Up: Python 3 12 0 alpha 1

1.23.34.7 Biblioteca
....................

   - gh-64373(1): Convert ‘_functools’ to argument clinic.

   - gh-96641(2): Do not expose ‘KeyWrapper’ in ‘_functools’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/64373

   (2) https://github.com/python/cpython/issues/96641


File: python.info,  Node: Núcleo e embutidos<53>,  Next: Biblioteca<56>,  Prev: Biblioteca<55>,  Up: Python 3 12 0 alpha 1

1.23.34.8 Núcleo e embutidos
............................

   - gh-96636(1): Ensure that tracing, ‘sys.setrace()’, is turned on
     immediately.  In pre-release versions of 3.11, some tracing events
     might have been lost when turning on tracing in a ‘__del__’ method
     or interrupt.

   - gh-96572(2): Fix use after free in trace refs build mode.  Patch by
     Kumar Aditya.

   - gh-96611(3): When loading a file with invalid UTF-8 inside a
     multi-line string, a correct SyntaxError is emitted.

   - gh-96612(4): Make sure that incomplete frames do not show up in
     tracemalloc traces.

   - gh-90230(5): Fix compiler warnings and test failures when building
     with ‘--enable-pystats’.

   - gh-96587(6): Correctly raise ‘SyntaxError’ on exception groups (
     PEP 654(7)) on python versions prior to 3.11

   - gh-96569(8): Remove two cases of undefined behavior, by adding NULL
     checks.

   - gh-96582(9): Fix possible ‘NULL’ pointer dereference in
     ‘_PyThread_CurrentFrames’.  Patch by Kumar Aditya.

   - gh-91079(10): Separate Python recursion checking from C recursion
     checking which reduces the chance of C stack overflow and allows
     the recursion limit to be increased safely.

   - gh-93911(11): Fix an issue that could prevent *note LOAD_ATTR: 4de.
     from specializing properly when accessing properties.

   - gh-96348(12): Emit a DeprecationWarning when *note throw(): 4f8,
     *note throw(): 4f7. or *note athrow(): 4f9. are called with more
     than one argument.

   - gh-95196(13): Disable incorrect pickling of the C implemented
     classmethod descriptors.

   - gh-96364(14): Fix text signatures of ‘list.__getitem__’ and
     ‘dict.__getitem__’.

   - gh-96352(15): Fix *note AttributeError: 34b. missing ‘name’ and
     ‘obj’ attributes in *note object.__getattribute__(): beb.  Patch by
     Philip Georgi.

   - gh-93554(16): Change the jump opcodes so that all conditional jumps
     are forward jumps.  Backward jumps are converted by the assembler
     into a conditional forward jump whose target is the fallthrough
     block (and with a reversed condition), followed by an unconditional
     backward jump.  For example:

     ‘POP_JUMP_IF_TRUE BACKWARD_TARGET’ becomes ‘POP_JUMP_IF_FALSE
     NEXT_BLOCK; JUMP BACKWARD_TARGET’.

     All the directed conditional jump opcodes were removed:
     ‘POP_JUMP_FORWARD_IF_TRUE’, ‘POP_JUMP_BACKWARD_IF_TRUE’,
     ‘POP_JUMP_FORWARD_IF_FALSE’, ‘POP_JUMP_BACKWARD_IF_FALSE’,
     ‘POP_JUMP_FORWARD_IF_NONE’, ‘POP_JUMP_BACKWARD_IF_NONE’,
     ‘POP_JUMP_FORWARD_IF_NOT_NONE’, ‘POP_JUMP_BACKWARD_IF_NOT_NONE’.

     The corresponding opcodes without direction are no longer
     pseudo-instructions, and they implement the forward conditional
     jumps.

   - gh-96268(17): Loading a file with invalid UTF-8 will now report the
     broken character at the correct location.

   - gh-96237(18): The internal field ‘_PyInterpreterFrame.f_func’ is
     renamed to ‘_PyInterpreterFrame.f_funcobj’ and may be any object.
     The ‘f_globals’ and ‘f_builtin’ fields may hold junk values.

     It is safest to treat the ‘_PyInterpreterFrame’ struct as opaque.

   - gh-96187(19): Fixed a bug that caused ‘_PyCode_GetExtra’ to return
     garbage for negative indexes.  Patch by Pablo Galindo

   - gh-96143(20): Add a new ‘-X perf’ Python command line option as
     well as *note sys.activate_stack_trampoline(): 46f. and *note
     sys.deactivate_stack_trampoline(): 470. function in the *note sys:
     d9. module that allows to set/unset the interpreter in a way that
     the Linux ‘perf’ profiler can detect Python calls.  The new *note
     sys.is_stack_trampoline_active(): 471. function allows to query the
     state of the perf trampoline.  Design by Pablo Galindo.  Patch by
     Pablo Galindo and Christian Heimes with contributions from Gregory
     P. Smith [Google] and Mark Shannon.

   - gh-96071(21): Fix a deadlock in *note PyGILState_Ensure(): 3ab.
     when allocating new thread state.  Patch by Kumar Aditya.

   - gh-96046(22): *note PyType_Ready(): 77c. now initializes
     ‘ht_cached_keys’ and performs additional checks to ensure that type
     objects are properly configured.  This avoids crashes in 3rd party
     packages that don’t use regular API to create new types.

   - gh-96005(23): On WASI *note ENOTCAPABLE: 18c8. is now mapped to
     *note PermissionError: d65.  The *note errno: 57. modules exposes
     the new error number.  ‘getpath.py’ now ignores *note
     PermissionError: d65. when it cannot open landmark files
     ‘pybuilddir.txt’ and ‘pyenv.cfg’.

   - gh-93678(24): Added test a harness for direct unit tests of the
     compiler’s optimization stage.  The
     ‘_testinternalcapi.optimize_cfg()’ function runs the optimiser on a
     sequence of instructions.  The ‘CfgOptimizationTestCase’ class in
     ‘test.support’ has utilities for invoking the optimizer and
     checking the output.

   - gh-95245(25): Reduces the size of a “simple” Python object from 8
     to 6 words by moving the weakreflist pointer into the pre-header
     directly before the object’s dict/values pointer.

   - gh-90997(26): Compile virtual *note try: 6e9./*note except: 18b.
     blocks to handle exceptions raised during *note close(): 15b9. or
     *note throw(): 4f8. calls through a suspended frame.

   - gh-95977(27): Optimized calling *note __get__(): 1530. with
     vectorcall.  Patch by Kumar Aditya.

   - gh-91210(28): Improve error message when a parameter without a
     default value follows one with a default value, and show the same
     message, even when the non-default/default sequence is preceded by
     positional-only parameters.

   - gh-95922(29): Fixed bug where the compiler’s
     ‘eliminate_empty_basic_blocks’ function ignores the last block of
     the code unit.

   - gh-95818(30): Skip over incomplete frames in *note
     PyThreadState_GetFrame(): 78e.

   - gh-95876(31): Fix format string in
     ‘_PyPegen_raise_error_known_location’ that can lead to memory
     corruption on some 64bit systems.  The function was building a
     tuple with ‘i’ (int) instead of ‘n’ (Py_ssize_t) for Py_ssize_t
     arguments.

   - gh-95605(32): Fix misleading contents of error message when
     converting an all-whitespace string to *note float: 2f7.

   - gh-95150(33): Update code object hashing and equality to consider
     all debugging and exception handling tables.  This fixes an issue
     where certain non-identical code objects could be “deduplicated”
     during compilation.

   - gh-91146(34): Reduce allocation size of *note list: 611. from *note
     str.split(): ed9. and *note str.rsplit(): 1297.  Patch by Donghee
     Na and Inada Naoki.

   - gh-87092(35): Create a ‘jump target label’ abstraction in the
     compiler so that the compiler’s codegen stage does not work
     directly with basic blocks.  This prepares the code for changes to
     the underlying CFG generation mechanism.

   - gh-95355(36): ‘_PyPegen_Parser_New’ now properly detects token
     memory allocation errors.  Patch by Honglin Zhu.

   - gh-90081(37): Run Python code in tracer/profiler function at full
     speed.  Fixes slowdown in earlier versions of 3.11.

   - gh-95324(38): Emit a warning in debug mode if an object does not
     call *note PyObject_GC_UnTrack(): 154e. before deallocation.  Patch
     by Pablo Galindo.

   - gh-95245(39): Merge managed dict and values pointer into a single
     tagged pointer to save one word in the pre-header.

   - gh-93678(40): Add cfg_builder struct and refactor the relevant code
     so that a cfg can be constructed without an instance of the
     compiler struct.

   - gh-95185(41): Prevented crashes in the AST constructor when
     compiling some absurdly long expressions like ‘"+0"*1000000’.
     *note RecursionError: d90. is now raised instead.  Patch by Pablo
     Galindo

   - gh-93351(42): *note ast.AST: 1a6. node positions are now validated
     when provided to *note compile(): 192. and other related functions.
     If invalid positions are detected, a *note ValueError: 202. will be
     raised.

   - gh-94438(43): Fix an issue that caused extended opcode arguments
     and some conditional pops to be ignored when calculating valid jump
     targets for assignments to the ‘f_lineno’ attribute of frame
     objects.  In some cases, this could cause inconsistent internal
     state, resulting in a hard crash of the interpreter.

   - gh-95060(44): Undocumented ‘PyCode_Addr2Location’ function now
     properly returns when ‘addrq’ argument is less than zero.

   - gh-95113(45): Replace all ‘EXTENDED_ARG_QUICK’ instructions with
     basic *note EXTENDED_ARG: 18a6. instructions in unquickened code.
     Consumers of non-adaptive bytecode should be able to handle
     extended arguments the same way they were handled in CPython 3.10
     and older.

   - gh-91409(46): Fix incorrect source location info caused by certain
     optimizations in the bytecode compiler.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/96636

   (2) https://github.com/python/cpython/issues/96572

   (3) https://github.com/python/cpython/issues/96611

   (4) https://github.com/python/cpython/issues/96612

   (5) https://github.com/python/cpython/issues/90230

   (6) https://github.com/python/cpython/issues/96587

   (7) https://peps.python.org/pep-0654/

   (8) https://github.com/python/cpython/issues/96569

   (9) https://github.com/python/cpython/issues/96582

   (10) https://github.com/python/cpython/issues/91079

   (11) https://github.com/python/cpython/issues/93911

   (12) https://github.com/python/cpython/issues/96348

   (13) https://github.com/python/cpython/issues/95196

   (14) https://github.com/python/cpython/issues/96364

   (15) https://github.com/python/cpython/issues/96352

   (16) https://github.com/python/cpython/issues/93554

   (17) https://github.com/python/cpython/issues/96268

   (18) https://github.com/python/cpython/issues/96237

   (19) https://github.com/python/cpython/issues/96187

   (20) https://github.com/python/cpython/issues/96143

   (21) https://github.com/python/cpython/issues/96071

   (22) https://github.com/python/cpython/issues/96046

   (23) https://github.com/python/cpython/issues/96005

   (24) https://github.com/python/cpython/issues/93678

   (25) https://github.com/python/cpython/issues/95245

   (26) https://github.com/python/cpython/issues/90997

   (27) https://github.com/python/cpython/issues/95977

   (28) https://github.com/python/cpython/issues/91210

   (29) https://github.com/python/cpython/issues/95922

   (30) https://github.com/python/cpython/issues/95818

   (31) https://github.com/python/cpython/issues/95876

   (32) https://github.com/python/cpython/issues/95605

   (33) https://github.com/python/cpython/issues/95150

   (34) https://github.com/python/cpython/issues/91146

   (35) https://github.com/python/cpython/issues/87092

   (36) https://github.com/python/cpython/issues/95355

   (37) https://github.com/python/cpython/issues/90081

   (38) https://github.com/python/cpython/issues/95324

   (39) https://github.com/python/cpython/issues/95245

   (40) https://github.com/python/cpython/issues/93678

   (41) https://github.com/python/cpython/issues/95185

   (42) https://github.com/python/cpython/issues/93351

   (43) https://github.com/python/cpython/issues/94438

   (44) https://github.com/python/cpython/issues/95060

   (45) https://github.com/python/cpython/issues/95113

   (46) https://github.com/python/cpython/issues/91409


File: python.info,  Node: Biblioteca<56>,  Next: Núcleo e embutidos<54>,  Prev: Núcleo e embutidos<53>,  Up: Python 3 12 0 alpha 1

1.23.34.9 Biblioteca
....................

   - gh-95023(1): Implement *note os.setns(): 18ca. and *note
     os.unshare(): 18cb. for Linux.  Patch by Noam Cohen.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/95023


File: python.info,  Node: Núcleo e embutidos<54>,  Next: Biblioteca<57>,  Prev: Biblioteca<56>,  Up: Python 3 12 0 alpha 1

1.23.34.10 Núcleo e embutidos
.............................

   - gh-94036(1): Fix incorrect source location info for some multi-line
     attribute accesses and method calls.

   - gh-94938(2): Fix error detection in some builtin functions when
     keyword argument name is an instance of a str subclass with
     overloaded ‘__eq__’ and ‘__hash__’.  Previously it could cause
     SystemError or other undesired behavior.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/94036

   (2) https://github.com/python/cpython/issues/94938


File: python.info,  Node: Biblioteca<57>,  Next: Núcleo e embutidos<55>,  Prev: Núcleo e embutidos<54>,  Up: Python 3 12 0 alpha 1

1.23.34.11 Biblioteca
.....................

   - gh-94996(1): *note ast.parse(): 1a8. will no longer parse function
     definitions with positional-only params when passed
     ‘feature_version’ less than ‘(3, 8)’.  Patch by Shantanu Jain.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/94996


File: python.info,  Node: Núcleo e embutidos<55>,  Next: Biblioteca<58>,  Prev: Biblioteca<57>,  Up: Python 3 12 0 alpha 1

1.23.34.12 Núcleo e embutidos
.............................

   - gh-94739(1): Allow jumping within, out of, and across exception
     handlers in the debugger.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/94739


File: python.info,  Node: Biblioteca<58>,  Next: Núcleo e embutidos<56>,  Prev: Núcleo e embutidos<55>,  Up: Python 3 12 0 alpha 1

1.23.34.13 Biblioteca
.....................

   - gh-94949(1): *note ast.parse(): 1a8. will no longer parse
     parenthesized context managers when passed ‘feature_version’ less
     than ‘(3, 9)’.  Patch by Shantanu Jain.

   - gh-94947(2): *note ast.parse(): 1a8. will no longer parse
     assignment expressions when passed ‘feature_version’ less than ‘(3,
     8)’.  Patch by Shantanu Jain.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/94949

   (2) https://github.com/python/cpython/issues/94947


File: python.info,  Node: Núcleo e embutidos<56>,  Next: Biblioteca<59>,  Prev: Biblioteca<58>,  Up: Python 3 12 0 alpha 1

1.23.34.14 Núcleo e embutidos
.............................

   - gh-91256(1): Ensures the program name is known for help text during
     interpreter startup.

   - gh-94869(2): Fix the column offsets for some expressions in
     multi-line f-strings *note ast: 8. nodes.  Patch by Pablo Galindo.

   - gh-94893(3): Fix an issue where frame object manipulations could
     corrupt inline bytecode caches.

   - gh-94822(4): Fix an issue where lookups of metaclass descriptors
     may be ignored when an identically-named attribute also exists on
     the class itself.

   - gh-91153(5): Fix an issue where a *note bytearray: 2ea. item
     assignment could crash if it’s resized by the new value’s
     ‘__index__()’ method.

   - gh-90699(6): Fix reference counting bug in ‘bool.__repr__()’.
     Patch by Kumar Aditya.

   - gh-94694(7): Fix an issue that could cause code with multi-line
     method lookups to have misleading or incorrect column offset
     information.  In some cases (when compiling a hand-built AST) this
     could have resulted in a hard crash of the interpreter.

   - gh-93252(8): Fix an issue that caused internal frames to outlive
     failed Python function calls, possibly resulting in memory leaks or
     hard interpreter crashes.

   - gh-94215(9): Fix an issue where exceptions raised by line-tracing
     events would cause frames to be left in an invalid state, possibly
     resulting in a hard crash of the interpreter.

   - gh-92228(10): Disable the compiler’s inline-small-exit-blocks
     optimization for exit blocks that are associated with source code
     lines.  This fixes a bug where the debugger cannot tell where an
     exception handler ends and the following code block begins.

   - gh-94485(11): Line number of a module’s ‘RESUME’ instruction is set
     to 0 as specified in PEP 626(12).

   - gh-94438(13): Account for instructions that can push NULL to the
     stack when setting line number in a frame.  Prevents some
     (unlikely) crashes.

   - gh-91719(14): Reload ‘opcode’ when raising ‘unknown opcode error’
     in the interpreter main loop, for C compilers to generate
     dispatching code independently.

   - gh-94329(15): Compile and run code with unpacking of extremely
     large sequences (1000s of elements).  Such code failed to compile.
     It now compiles and runs correctly.

   - gh-94360(16): Fixed a tokenizer crash when reading encoded files
     with syntax errors from ‘stdin’ with non utf-8 encoded text.  Patch
     by Pablo Galindo

   - gh-88116(17): Fix an issue when reading line numbers from code
     objects if the encoded line numbers are close to ‘INT_MIN’.  Patch
     by Pablo Galindo

   - gh-94262(18): Don’t create frame objects for incomplete frames.
     Prevents the creation of generators and closures from being
     observable to Python and C extensions, restoring the behavior of
     3.10 and earlier.

   - gh-94192(19): Fix error for dictionary literals with invalid
     expression as value.

   - gh-87995(20): *note types.MappingProxyType: 46d. instances are now
     hashable if the underlying mapping is hashable.

   - gh-93883(21): Revise the display strategy of traceback enhanced
     error locations.  The indicators are only shown when the location
     doesn’t span the whole line.

   - gh-94163(22): Add *note BINARY_SLICE: 4df. and *note STORE_SLICE:
     4e0. instructions for more efficient handling and better
     specialization of slicing operations, where the slice is explicit
     in the source code.

   - gh-94021(23): Fix unreachable code warning in
     ‘Python/specialize.c’.

   - gh-93911(24): Specialize ‘LOAD_ATTR’ for objects with custom
     ‘__getattribute__’.

   - gh-93955(25): Improve performance of attribute lookups on objects
     with custom ‘__getattribute__’ and ‘__getattr__’.  Patch by Ken
     Jin.

   - gh-93911(26): Specialize ‘LOAD_ATTR’ for ‘property()’ attributes.

   - gh-93678(27): Refactor compiler optimisation code so that it no
     longer needs the ‘struct assembler’ and ‘struct compiler’ passed
     around.  Instead, each function takes the CFG and other data that
     it actually needs.  This will make it possible to test this code
     directly.

   - gh-93841(28): When built with ‘-enable-pystats’, ‘sys._stats_on()’,
     ‘sys._stats_off()’, ‘sys._stats_clear()’ and ‘sys._stats_dump()’
     functions have been added to enable gathering stats for parts of
     programs.

   - gh-93516(29): Store offset of first traceable instruction in code
     object to avoid having to recompute it for each instruction when
     tracing.

   - gh-93516(30): Lazily create a table mapping bytecode offsets to
     line numbers to speed up calculation of line numbers when tracing.

   - gh-89828(31): *note types.GenericAlias: 7ed. no longer relays the
     ‘__class__’ attribute.  For example, ‘isinstance(list[int], type)’
     no longer returns ‘True’.

   - gh-93678(32): Refactor the compiler to reduce boilerplate and
     repetition.

   - gh-93671(33): Fix some exponential backtrace case happening with
     deeply nested sequence patterns in match statements.  Patch by
     Pablo Galindo

   - gh-93662(34): Make sure that the end column offsets are correct in
     multi-line method calls.  Previously, the end column could precede
     the column offset.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/91256

   (2) https://github.com/python/cpython/issues/94869

   (3) https://github.com/python/cpython/issues/94893

   (4) https://github.com/python/cpython/issues/94822

   (5) https://github.com/python/cpython/issues/91153

   (6) https://github.com/python/cpython/issues/90699

   (7) https://github.com/python/cpython/issues/94694

   (8) https://github.com/python/cpython/issues/93252

   (9) https://github.com/python/cpython/issues/94215

   (10) https://github.com/python/cpython/issues/92228

   (11) https://github.com/python/cpython/issues/94485

   (12) https://peps.python.org/pep-0626/

   (13) https://github.com/python/cpython/issues/94438

   (14) https://github.com/python/cpython/issues/91719

   (15) https://github.com/python/cpython/issues/94329

   (16) https://github.com/python/cpython/issues/94360

   (17) https://github.com/python/cpython/issues/88116

   (18) https://github.com/python/cpython/issues/94262

   (19) https://github.com/python/cpython/issues/94192

   (20) https://github.com/python/cpython/issues/87995

   (21) https://github.com/python/cpython/issues/93883

   (22) https://github.com/python/cpython/issues/94163

   (23) https://github.com/python/cpython/issues/94021

   (24) https://github.com/python/cpython/issues/93911

   (25) https://github.com/python/cpython/issues/93955

   (26) https://github.com/python/cpython/issues/93911

   (27) https://github.com/python/cpython/issues/93678

   (28) https://github.com/python/cpython/issues/93841

   (29) https://github.com/python/cpython/issues/93516

   (30) https://github.com/python/cpython/issues/93516

   (31) https://github.com/python/cpython/issues/89828

   (32) https://github.com/python/cpython/issues/93678

   (33) https://github.com/python/cpython/issues/93671

   (34) https://github.com/python/cpython/issues/93662


File: python.info,  Node: Biblioteca<59>,  Next: Núcleo e embutidos<57>,  Prev: Núcleo e embutidos<56>,  Up: Python 3 12 0 alpha 1

1.23.34.15 Biblioteca
.....................

   - gh-93461(1): *note importlib.invalidate_caches(): c2a. now drops
     entries from *note sys.path_importer_cache: 5e4. with a relative
     path as name.  This solves a caching issue when a process changes
     its current working directory.

     ‘FileFinder’ no longer inserts a dot in the path, e.g.
     ‘/egg/./spam’ is now ‘/egg/spam’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/93461


File: python.info,  Node: Núcleo e embutidos<57>,  Next: Biblioteca<60>,  Prev: Biblioteca<59>,  Up: Python 3 12 0 alpha 1

1.23.34.16 Núcleo e embutidos
.............................

   - gh-93621(1): Change order of bytecode instructions emitted for
     *note with: 5d2. and *note async with: 5d5. to reduce the number of
     entries in the exception table.

   - gh-93533(2): Reduce the size of the inline cache for ‘LOAD_METHOD’
     by 2 bytes.

   - gh-93444(3): Removed redundant fields from the compiler’s
     basicblock struct: ‘b_nofallthrough’, ‘b_exit’, ‘b_return’.  They
     can be easily calculated from the opcode of the last instruction of
     the block.

   - gh-93429(4): ‘LOAD_METHOD’ instruction has been removed.  It was
     merged back into ‘LOAD_ATTR’.

   - gh-93418(5): Fixed an assert where an f-string has an equal sign
     ‘=’ following an expression, but there’s no trailing brace.  For
     example, f”{i=”.

   - gh-93382(6): Cache the result of *note PyCode_GetCode(): 778.
     function to restore the 'O'(1) lookup of the ‘co_code’ attribute.

   - gh-93359(7): Ensure that custom *note ast: 8. nodes without
     explicit end positions can be compiled.  Patch by Pablo Galindo.

   - gh-93356(8): Code for exception handlers is emitted at the end of
     the code unit’s bytecode.  This avoids one jump when no exception
     is raised.

   - gh-93354(9): Use exponential backoff for specialization counters in
     the interpreter.  Can reduce the number of failed specializations
     significantly and avoid slowdown for those parts of a program that
     are not suitable for specialization.

   - gh-93283(10): Improve error message for invalid syntax of
     conversion character in f-string expressions.

   - gh-93345(11): Fix a crash in substitution of a ‘TypeVar’ in nested
     generic alias after ‘TypeVarTuple’.

   - gh-93223(12): When a bytecode instruction jumps to an unconditional
     jump instruction, the first instruction can often be optimized to
     target the unconditional jump’s target directly.  For tracing
     reasons, this would previously only occur if both instructions have
     the same line number.  This also now occurs if the unconditional
     jump is artificial, i.e., if it has no associated line number.

   - gh-84694(13): The ‘--experimental-isolated-subinterpreters’
     configure option and ‘EXPERIMENTAL_ISOLATED_SUBINTERPRETERS’ macro
     have been removed.

   - gh-91924(14): Fix ‘__lltrace__’ debug feature if the stdout
     encoding is not UTF-8.  Patch by Victor Stinner.

   - gh-93040(15): Wraps unused parameters in ‘Objects/obmalloc.c’ with
     ‘Py_UNUSED’.

   - gh-93143(16): Avoid ‘NULL’ checks for uninitialized local variables
     by determining at compile time which variables must be initialized.

   - gh-93061(17): Backward jumps after ‘async for’ loops are no longer
     given dubious line numbers.

   - gh-93065(18): Fix contextvars HAMT implementation to handle
     iteration over deep trees.

     The bug was discovered and fixed by Eli Libman.  See
     MagicStack/immutables#84(19) for more details.

   - gh-93012(20): Added the new function *note PyType_FromMetaclass():
     550, which generalizes the existing *note
     PyType_FromModuleAndSpec(): 551. using an additional metaclass
     argument.  This is useful for language binding tools, where it can
     be used to intercept type-related operations like subclassing or
     static attribute access by specifying a metaclass with custom
     slots.

     Importantly, *note PyType_FromMetaclass(): 550. is available in the
     Limited API, which provides a path towards migrating more binding
     tools onto the Stable ABI.

   - gh-93021(21): Fix the ‘__text_signature__’ for ‘__get__()’ methods
     implemented in C. Patch by Jelle Zijlstra.

   - gh-89914(22): The operand of the ‘YIELD_VALUE’ instruction is set
     to the stack depth.  This is done to help frame handling on ‘yield’
     and may assist debuggers.

   - gh-92955(23): Fix memory leak in code object’s lines and positions
     iterators as they were not finalized at exit.  Patch by Kumar
     Aditya.

   - gh-92930(24): Fixed a crash in ‘_pickle.c’ from mutating
     collections during ‘__reduce__’ or ‘persistent_id’.

   - gh-90690(25): The PRECALL instruction has been removed.  It offered
     only a small advantage for specialization and is not needed in the
     vast majority of cases.

   - gh-92914(26): Always round the allocated size for lists up to the
     nearest even number.

   - gh-92858(27): Improve error message for some suites with syntax
     error before ‘:’

   - gh-90473(28): Decrease default recursion limit on WASI to address
     limited call stack size.

   - gh-92804(29): Fix memory leak in ‘memoryview’ iterator as it was
     not finalized at exit.  Patch by Kumar Aditya.

   - gh-92777(30): Specialize ‘LOAD_METHOD’ for objects with lazy
     dictionaries.  Patch by Ken Jin.

   - gh-92658(31): Add support for connecting and binding to Hyper-V
     sockets on Windows Hyper-V hosts and guests.

   - gh-92236(32): Remove spurious “LINE” event when starting a
     generator or coroutine, visible tracing functions implemented in C.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/93621

   (2) https://github.com/python/cpython/issues/93533

   (3) https://github.com/python/cpython/issues/93444

   (4) https://github.com/python/cpython/issues/93429

   (5) https://github.com/python/cpython/issues/93418

   (6) https://github.com/python/cpython/issues/93382

   (7) https://github.com/python/cpython/issues/93359

   (8) https://github.com/python/cpython/issues/93356

   (9) https://github.com/python/cpython/issues/93354

   (10) https://github.com/python/cpython/issues/93283

   (11) https://github.com/python/cpython/issues/93345

   (12) https://github.com/python/cpython/issues/93223

   (13) https://github.com/python/cpython/issues/84694

   (14) https://github.com/python/cpython/issues/91924

   (15) https://github.com/python/cpython/issues/93040

   (16) https://github.com/python/cpython/issues/93143

   (17) https://github.com/python/cpython/issues/93061

   (18) https://github.com/python/cpython/issues/93065

   (19) https://github.com/MagicStack/immutables/issues/84

   (20) https://github.com/python/cpython/issues/93012

   (21) https://github.com/python/cpython/issues/93021

   (22) https://github.com/python/cpython/issues/89914

   (23) https://github.com/python/cpython/issues/92955

   (24) https://github.com/python/cpython/issues/92930

   (25) https://github.com/python/cpython/issues/90690

   (26) https://github.com/python/cpython/issues/92914

   (27) https://github.com/python/cpython/issues/92858

   (28) https://github.com/python/cpython/issues/90473

   (29) https://github.com/python/cpython/issues/92804

   (30) https://github.com/python/cpython/issues/92777

   (31) https://github.com/python/cpython/issues/92658

   (32) https://github.com/python/cpython/issues/92236


File: python.info,  Node: Biblioteca<60>,  Next: Núcleo e embutidos<58>,  Prev: Núcleo e embutidos<57>,  Up: Python 3 12 0 alpha 1

1.23.34.17 Biblioteca
.....................

   - gh-91102(1): ‘_warnings.warn_explicit()’ is ported to Argument
     Clinic.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/91102


File: python.info,  Node: Núcleo e embutidos<58>,  Next: Biblioteca<61>,  Prev: Biblioteca<60>,  Up: Python 3 12 0 alpha 1

1.23.34.18 Núcleo e embutidos
.............................

   - gh-92619(1): Make the compiler duplicate an exit block only if none
     of its instructions have a lineno (previously only the first
     instruction in the block was checked, leading to unnecessarily
     duplicated blocks).

   - gh-88750(2): The deprecated debug build only ‘PYTHONTHREADDEBUG’
     environment variable no longer does anything.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/92619

   (2) https://github.com/python/cpython/issues/88750


File: python.info,  Node: Biblioteca<61>,  Next: Núcleo e embutidos<59>,  Prev: Núcleo e embutidos<58>,  Up: Python 3 12 0 alpha 1

1.23.34.19 Biblioteca
.....................

   - gh-92261(1): Fix hang when trying to iterate over a ‘typing.Union’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/92261


File: python.info,  Node: Núcleo e embutidos<59>,  Next: Biblioteca<62>,  Prev: Biblioteca<61>,  Up: Python 3 12 0 alpha 1

1.23.34.20 Núcleo e embutidos
.............................

   - gh-91432(1): Specialized the *note FOR_ITER: 184a. opcode using the
     PEP 659 machinery

   - gh-91399(2): Removed duplicate ‘{0, 0, 0, 0, 0, 0}’ entry in
     ‘Objects/unicodetype_db.h’.

   - gh-91578(3): Updates the error message for abstract class.

   - bpo-47091(4): Improve performance of repetition of *note list: 611.
     and *note tuple: 370. by using ‘memcpy’ to copy data and performing
     the reference increments in one step.

   - bpo-46142(5): Make ‘--help’ output shorter by moving some info to
     the new ‘--help-env’ and ‘--help-xoptions’ command-line options.
     Also add ‘--help-all’ option to print complete usage.

   - bpo-42316(6): Document some places where an assignment expression
     needs parentheses.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/91432

   (2) https://github.com/python/cpython/issues/91399

   (3) https://github.com/python/cpython/issues/91578

   (4) https://bugs.python.org/issue?@action=redirect&bpo=47091

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46142

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42316


File: python.info,  Node: Biblioteca<62>,  Next: Documentação<24>,  Prev: Núcleo e embutidos<59>,  Up: Python 3 12 0 alpha 1

1.23.34.21 Biblioteca
.....................

   - gh-89237(1): Fix hang on Windows in ‘subprocess.wait_closed()’ in
     *note asyncio: a. with *note ProactorEventLoop: 609.  Patch by
     Kumar Aditya.

   - gh-97928(2): ‘tkinter.Text.count()’ raises now an exception for
     options starting with “-” instead of silently ignoring them.

   - gh-98393(3): The *note os: a1. module no longer accepts bytes-like
     paths, like *note bytearray: 2ea. and *note memoryview: 2eb. types:
     only the exact *note bytes: 1c2. type is accepted for bytes
     strings.  Patch by Victor Stinner.

   - gh-98363(4): Added itertools.batched() to batch data into lists of
     a given length with the last list possibly being shorter than the
     others.

   - gh-98331(5): Update the bundled copies of pip and setuptools to
     versions 22.3 and 65.5.0 respectively.

   - gh-98307(6): A *note createSocket(): 65b. method was added to *note
     SysLogHandler: 65c.

   - gh-96035(7): Fix bug in *note urllib.parse.urlparse(): 30d. that
     causes certain port numbers containing whitespace, underscores,
     plus and minus signs, or non-ASCII digits to be incorrectly
     accepted.

   - gh-98257(8): Make *note sys.setprofile(): 1546. and *note
     sys.settrace(): 1547. functions reentrant.  They can no long fail
     with: ‘RuntimeError("Cannot install a trace function while another
     trace function is being installed")’.  Patch by Victor Stinner.

   - gh-98251(9): Allow *note venv: 111. to pass along ‘PYTHON*’
     variables to ‘ensurepip’ and ‘pip’ when they do not impact path
     resolution

   - gh-94597(10): Deprecated *note
     asyncio.AbstractEventLoopPolicy.get_child_watcher(): 2c1. and *note
     asyncio.AbstractEventLoopPolicy.set_child_watcher(): 2c0. methods
     to be removed in Python 3.14.  Patch by Kumar Aditya.

   - gh-98178(11): On macOS, fix a crash in *note syslog.syslog(): 540.
     in multi-threaded applications.  On macOS, the libc ‘syslog()’
     function is not thread-safe, so *note syslog.syslog(): 540. no
     longer releases the GIL to call it.  Patch by Victor Stinner.

   - gh-44098(12): Release the GIL when creating *note mmap.mmap: 20b.
     objects on Unix.

   - gh-87730(13): Wrap network errors consistently in urllib FTP
     support, so the test suite doesn’t fail when a network is available
     but the public internet is not reachable.

   - gh-94597(14): The child watcher classes *note
     MultiLoopChildWatcher: 2ba, *note FastChildWatcher: 2bb. and *note
     SafeChildWatcher: 2bd. are deprecated and will be removed in Python
     3.14.  Patch by Kumar Aditya.

   - gh-98023(15): Change default child watcher to *note
     PidfdChildWatcher: 479. on Linux systems which supports it.  Patch
     by Kumar Aditya.

   - gh-90985(16): Earlier in 3.11 we deprecated
     ‘asyncio.Task.cancel("message")’.  We realized we were too harsh,
     and have undeprecated it.

   - gh-65961(17): Do not rely solely on ‘__cached__’ on modules; code
     will also support ‘__spec__.cached’.

   - gh-97646(18): Replace deprecated ‘application/javascript’ with
     ‘text/javascript’ in *note mimetypes: 8f.  See RFC 9239(19).  Patch
     by Noam Cohen.

   - gh-97930(20): Apply changes from importlib_resources 5.8 and 5.9:
     ‘Traversable.joinpath’ provides a concrete implementation.
     ‘as_file’ now supports directories of resources.

   - gh-97850(21): Remove deprecated ‘importlib.util.set_loader()’ and
     ‘importlib.util.module_for_loader()’ from *note importlib.util: 7d.

   - gh-97837(22): Change deprecate warning message in *note unittest:
     106. from

     ‘It is deprecated to return a value!=None’

     to

     ‘It is deprecated to return a value that is not None from a test
     case’

   - gh-97825(23): Fixes *note AttributeError: 34b. when *note
     subprocess.check_output(): ff6. is used with argument ‘input=None’
     and either of the arguments 'encoding' or 'errors' are used.

   - gh-97008(24): *note NameError: 43f. and *note AttributeError: 34b.
     spelling suggestions provided since gh-82711(25) are now also
     emitted by the pure Python *note traceback: fe. module.  Tests for
     those suggestions now exercise both implementations to ensure they
     are equivalent.  Patch by Carl Friedrich Bolz-Tereick and Łukasz
     Langa.

   - gh-97799(26): ‘dataclass’ now uses *note inspect.get_annotations():
     816. to examine the annotations on class objects.

   - gh-97781(27): Removed deprecated interfaces in ‘importlib.metadata’
     (entry points accessed as dictionary, implicit dictionary
     construction of sequence of ‘EntryPoint’ objects, mutablility of
     ‘EntryPoints’ result, access of entry point by index).
     ‘entry_points’ now has a simpler, more straightforward API
     (returning ‘EntryPoints’).

   - gh-96827(28): Avoid spurious tracebacks from *note asyncio: a. when
     default executor cleanup is delayed until after the event loop is
     closed (e.g.  as the result of a keyboard interrupt).

   - gh-95534(29): ‘gzip.GzipFile.read()’ reads 10% faster.

   - gh-97592(30): Avoid a crash in the C version of *note
     asyncio.Future.remove_done_callback(): 168b. when an evil argument
     is passed.

   - gh-97639(31): Remove ‘tokenize.NL’ check from *note tabnanny: dd.

   - gh-97545(32): Make Semaphore run faster.

   - gh-73588(33): Fix generation of the default name of
     ‘tkinter.Checkbutton’.  Previously, checkbuttons in different
     parent widgets could have the same short name and share the same
     state if arguments “name” and “variable” are not specified.  Now
     they are globally unique.

   - gh-96865(34): fix Flag to use boundary CONFORM

     This restores previous Flag behavior of allowing flags with
     non-sequential values to be combined; e.g.

     class Skip(Flag): TWO = 2 EIGHT = 8

     Skip.TWO | Skip.EIGHT -> <Skip.TWO|EIGHT: 10>

   - gh-97005(35): Update bundled libexpat to 2.4.9

   - gh-85760(36): Fix race condition in *note asyncio: a. where *note
     process_exited(): 18d8. called before the *note
     pipe_data_received(): 18d9. leading to inconsistent output.  Patch
     by Kumar Aditya.

   - gh-96704(37): Pass the correct ‘contextvars.Context’ when a
     ‘asyncio’ exception handler is called on behalf of a task or
     callback handle.  This adds a new ‘Task’ method, ‘get_context’, and
     also a new ‘Handle’ method with the same name.  If this method is
     not found on a task object (perhaps because it is a third-party
     library that does not yet provide this method), the context
     prevailing at the time the exception handler is called is used.

   - gh-96819(38): Fixed check in ‘multiprocessing.resource_tracker’
     that guarantees that the length of a write to a pipe is not greater
     than ‘PIPE_BUF’.

   - gh-95865(39): Reduce *note urllib.parse.quote_from_bytes(): 18da.
     memory use on large values.

     Contribuição de Dennis Sweeney.

   - gh-96741(40): Corrected type annotation for dataclass attribute
     ‘pstats.FunctionProfile.ncalls’ to be ‘str’.

   - gh-96734(41): Update *note unicodedata: 105. database to Unicode
     15.0.0.

   - gh-96735(42): Fix undefined behaviour in *note struct.unpack():
     18db.

   - gh-46412(43): Improve performance of ‘bool(db)’ for large ndb/gdb
     databases.  Previously this would call ‘len(db)’ which would
     iterate over all keys – the answer (empty or not) is known after
     the first key.

   - gh-96652(44): Fix the faulthandler implementation of
     ‘faulthandler.register(signal, chain=True)’ if the ‘sigaction()’
     function is not available: don’t call the previous signal handler
     if it’s NULL. Patch by Victor Stinner.

   - gh-68163(45): Correct conversion of *note numbers.Rational: 1301.’s
     to *note float: 2f7.

   - gh-96538(46): Speed up ‘bisect.bisect()’ functions by taking
     advantage of type-stability.

   - gh-96465(47): Fraction hashes are now cached.

   - gh-96079(48): In *note typing: 104, fix missing field ‘name’ and
     incorrect ‘__module__’ in _AnnotatedAlias.

   - gh-96415(49): Remove ‘types._cell_factory’ from module namespace.

   - gh-95987(50): Fix ‘repr’ of ‘Any’ subclasses.

   - gh-96388(51): Work around missing socket functions in *note socket:
     dc9.’s ‘__repr__’.

   - gh-96385(52): Fix ‘TypeVarTuple.__typing_prepare_subst__’.
     ‘TypeError’ was not raised when using more than one ‘TypeVarTuple’,
     like ‘[*T, *V]’ in type alias substitutions.

   - gh-96142(53): Add ‘match_args’, ‘kw_only’, ‘slots’, and
     ‘weakref_slot’ to ‘_DataclassParams’.

   - gh-96073(54): In *note inspect: 7e, fix overeager replacement of
     “‘typing.’” in formatting annotations.

   - gh-89258(55): Added a *note getChildren(): 18dc. method to *note
     logging.Logger: b64, to get the immediate child loggers of a
     logger.

   - gh-96346(56): Use double caching for compiled RE patterns.

   - gh-96349(57): Fixed a minor performance regression in
     ‘threading.Event.__init__()’

   - gh-90467(58): Fix ‘asyncio.streams.StreamReaderProtocol’ to keep a
     strong reference to the created task, so that it’s not garbage
     collected

   - gh-96172(59): Fix a bug in ‘unicodedata’: ‘east_asian_width’ used
     to return the wrong value for unassigned characters; and for yet
     unassigned, but reserved characters.

   - gh-96159(60): Fix a performance regression in logging
     TimedRotatingFileHandler.  Only check for special files when the
     rollover time has passed.

   - gh-96175(61): Fix unused ‘localName’ parameter in the ‘Attr’ class
     in *note xml.dom.minidom: 122.

   - gh-96145(62): Add AttrDict to JSON module for use with object_hook.

   - gh-96052(63): Fix handling compiler warnings (SyntaxWarning and
     DeprecationWarning) in *note codeop.compile_command(): 18dd. when
     checking for incomplete input.  Previously it emitted warnings and
     raised a SyntaxError.  Now it always returns ‘None’ for incomplete
     input without emitting any warnings.

   - gh-96125(64): Fix incorrect condition that causes
     ‘sys.thread_info.name’ to be wrong on pthread platforms.

   - gh-96019(65): Fix a bug in the ‘makeunicodedata.py’ script leading
     to about 13 KiB of space saving in the ‘unicodedata’ module,
     specifically the character decomposition data.

   - gh-95463(66): Remove an incompatible change from bpo-28080(67) that
     caused a regression that ignored the utf8 in ‘ZipInfo.flag_bits’.
     Patch by Pablo Galindo.

   - gh-69142(68): Add ‘%:z’ strftime format code (generates tzoffset
     with colons as separator), see *note Comportamento de strftime() e
     strptime(): 18de.

   - gh-95899(69): Fix *note asyncio.Runner: 600. to call *note
     asyncio.set_event_loop(): 18df. only once to avoid calling *note
     attach_loop(): 18e0. multiple times on child watchers.  Patch by
     Kumar Aditya.

   - gh-95736(70): Fix *note unittest.IsolatedAsyncioTestCase: 30c. to
     set event loop before calling setup functions.  Patch by Kumar
     Aditya.

   - gh-95865(71): Speed up *note urllib.parse.quote_from_bytes(): 18da.
     by replacing a list comprehension with ‘map()’.

   - gh-95861(72): Add support for computing Spearman’s correlation
     coefficient to the existing statistics.correlation() function.

   - gh-95804(73): Fix ‘logging’ shutdown handler so it respects
     ‘MemoryHandler.flushOnClose’.

   - gh-95704(74): When a task catches *note asyncio.CancelledError:
     1b8. and raises some other error, the other error should generally
     not silently be suppressed.

   - gh-95149(75): The *note HTTPStatus: 906. enum offers a couple of
     properties to indicate the HTTP status category e.g.
     ‘HTTPStatus.OK.is_success’.

   - gh-95609(76): Update bundled pip to 22.2.2.

   - gh-95289(77): Fix *note asyncio.TaskGroup: 1b5. to propagate
     exception when *note asyncio.CancelledError: 1b8. was replaced with
     another exception by a context manager.  Patch by Kumar Aditya and
     Guido van Rossum.

   - gh-94909(78): Fix incorrect joining of relative Windows paths with
     drives in *note pathlib.PurePath: 4a6. initializer.

   - gh-95385(79): Faster ‘json.dumps()’ when sorting of keys is not
     requested (default).

   - gh-83901(80): Improve *note Signature.bind: 1648. error message for
     missing keyword-only arguments.

   - gh-95339(81): Update bundled pip to 22.2.1.

   - gh-95045(82): Fix GC crash when deallocating ‘_lsprof.Profiler’ by
     untracking it before calling any callbacks.  Patch by Kumar Aditya.

   - gh-95231(83): Fail gracefully if *note EPERM: 18e1. or *note
     ENOSYS: 18e2. is raised when loading ‘crypt’ methods.  This may
     happen when trying to load ‘MD5’ on a Linux kernel with FIPS
     (Federal Information Processing Standard) enabled.

   - gh-95097(84): Fix *note asyncio.run(): 47c. for *note asyncio.Task:
     1be. implementations without *note uncancel(): 1bb. method.  Patch
     by Kumar Aditya.

   - gh-95087(85): Fix IndexError in parsing invalid date in the *note
     email: 3b. module.

   - gh-95199(86): Upgrade bundled setuptools to 63.2.0.

   - gh-95194(87): Upgrade bundled pip to 22.2.

   - gh-93899(88): Fix check for existence of *note os.EFD_CLOEXEC:
     18e3, *note os.EFD_NONBLOCK: 18e4. and *note os.EFD_SEMAPHORE:
     18e5. flags on older kernel versions where these flags are not
     present.  Patch by Kumar Aditya.

   - gh-95166(89): Fix *note concurrent.futures.Executor.map(): e0e. to
     cancel the currently waiting on future on an error - e.g.
     TimeoutError or KeyboardInterrupt.

   - gh-95132(90): Fix a *note sqlite3: cf. regression where ‘*args’ and
     ‘**kwds’ were incorrectly relayed from *note connect(): 2a8. to the
     *note Connection: 245. factory.  The regression was introduced in
     3.11a1 with PR 24421 (gh-85128(91)).  Patch by Erlend E. Aasland.

   - gh-93157(92): Fix *note fileinput: 5b. module didn’t support
     ‘errors’ option when ‘inplace’ is true.

   - gh-91212(93): Fixed flickering of the turtle window when the tracer
     is turned off.  Patch by Shin-myoung-serp.

   - gh-95077(94): Add deprecation warning for enum ‘member.member’
     access (e.g.  ‘Color.RED.BLUE’).  Remove ‘EnumMeta.__getattr__’.

   - gh-95109(95): Ensure that timeouts scheduled with *note
     asyncio.Timeout: 17bd. that have already expired are delivered
     promptly.

   - gh-95105(96): ‘wsgiref.types.InputStream.__iter__()’ should return
     ‘Iterator[bytes]’, not ‘Iterable[bytes]’.  Patch by Shantanu Jain.

   - gh-95066(97): Replaced assert with exception in *note ast.parse():
     1a8, when ‘feature_version’ has an invalid major version.  Patch by
     Shantanu Jain.

   - gh-77617(98): Add *note sqlite3: cf. *note command-line interface:
     441.  Patch by Erlend Aasland.

   - gh-95005(99): Replace _PyAccu with _PyUnicodeWriter in JSON encoder
     and StringIO and remove the _PyAccu implementation.

   - gh-90085(100): Remove ‘-c/--clock’ and ‘-t/--time’ CLI options of
     *note timeit: ef.  The options had been deprecated since Python 3.3
     and the functionality was removed in Python 3.7.  Patch by Shantanu
     Jain.

   - gh-94857(101): Fix refleak in ‘_io.TextIOWrapper.reconfigure’.
     Patch by Kumar Aditya.

   - gh-94821(102): Fix binding of unix socket to empty address on Linux
     to use an available address from the abstract namespace, instead of
     “0”.

   - gh-94736(103): Fix crash when deallocating an instance of a
     subclass of ‘_multiprocessing.SemLock’.  Patch by Kumar Aditya.

   - gh-81620(104): Add random.binomialvariate().

   - gh-74116(105): Allow *note asyncio.StreamWriter.drain(): 18b1. to
     be awaited concurrently by multiple tasks.  Patch by Kumar Aditya.

   - gh-87822(106): When called with ‘capture_locals=True’, the *note
     traceback: fe. module functions swallow exceptions raised from
     calls to ‘repr()’ on local variables of frames.  This is in order
     to prioritize the original exception over rendering errors.  An
     indication of the failure is printed in place of the missing value.
     (Patch by Simon-Martin Schroeder).

   - gh-88050(107): Fix *note asyncio: a. subprocess transport to kill
     process cleanly when process is blocked and avoid ‘RuntimeError’
     when loop is closed.  Patch by Kumar Aditya.

   - gh-94637(108): ‘SSLContext.set_default_verify_paths()’ now releases
     the GIL around ‘SSL_CTX_set_default_verify_paths’ call.  The
     function call performs I/O and CPU intensive work.

   - gh-94309(109): Deprecate aliases *note typing.Hashable: 4f3. and
     *note typing.Sized: 4f4.

   - gh-92546(110): An undocumented ‘python -m pprint’ benchmark is
     moved into ‘pprint’ suite of pyperformance.  Patch by Oleg Iarygin.

   - gh-94607(111): Fix subclassing complex generics with type variables
     in *note typing: 104.  Previously an error message saying ‘Some
     type variables ... are not listed in Generic[...]’ was shown.
     *note typing: 104. no longer populates ‘__parameters__’ with the
     ‘__parameters__’ of a Python class.

   - gh-94619(112): Remove the long-deprecated ‘module_repr()’ from
     *note importlib: 77.

   - gh-93910(113): The ability to access the other values of an enum on
     an enum (e.g.  ‘Color.RED.BLUE’) has been restored in order to fix
     a performance regression.

   - gh-93896(114): Fix *note asyncio.run(): 47c. and *note
     unittest.IsolatedAsyncioTestCase: 30c. to always the set event loop
     as it was done in Python 3.10 and earlier.  Patch by Kumar Aditya.

   - gh-94343(115): Allow setting the attributes of ‘reprlib.Repr’
     during object initialization

   - gh-94382(116): Port static types of ‘_multiprocessing’ module to
     heap types.  Patch by Kumar Aditya.

   - gh-78724(117): Fix crash in *note struct.Struct: 15a0. when it was
     not completely initialized by initializing it in *note __new__():
     580.  Patch by Kumar Aditya.

   - gh-94510(118): Re-entrant calls to *note sys.setprofile(): 1546.
     and *note sys.settrace(): 1547. now raise *note RuntimeError: 195.
     Patch by Pablo Galindo.

   - gh-92336(119): Fix bug where *note linecache.getline(): e50. fails
     on bad files with *note UnicodeDecodeError: a1d. or *note
     SyntaxError: 18d.  It now returns an empty string as per the
     documentation.

   - gh-94398(120): Once a *note asyncio.TaskGroup: 1b5. has started
     shutting down (i.e., at least one task has failed and the task
     group has started cancelling the remaining tasks), it should not be
     possible to add new tasks to the task group.

   - gh-94383(121): ‘xml.etree’: Remove the ‘ElementTree.Element.copy()’
     method of the pure Python implementation, deprecated in Python
     3.10, use the *note copy.copy(): 534. function instead.  The C
     implementation of ‘xml.etree’ has no ‘copy()’ method, only a
     ‘__copy__()’ method.  Patch by Victor Stinner.

   - gh-94379(122): *note zipimport: 132.: Remove ‘find_loader()’ and
     ‘find_module()’ methods, deprecated in Python 3.10: use the
     ‘find_spec()’ method instead.  See PEP 451(123) for the rationale.
     Patch by Victor Stinner.

   - gh-94352(124): *note shlex.split(): 53c.: Passing ‘None’ for 's'
     argument now raises an exception, rather than reading *note
     sys.stdin: 53d.  The feature was deprecated in Python 3.9.  Patch
     by Victor Stinner.

   - gh-94318(125): Strip trailing spaces in *note pydoc: b5. text
     output.

   - gh-89988(126): Fix memory leak in *note pickle.Pickler: a28. when
     looking up ‘dispatch_table’.  Patch by Kumar Aditya.

   - gh-90016(127): Deprecate *note sqlite3: cf. *note default adapters
     and converters: 4ef.  Patch by Erlend E. Aasland.

   - gh-94254(128): Fixed types of *note struct: d5. module to be
     immutable.  Patch by Kumar Aditya.

   - gh-93259(129): Now raise ‘ValueError’ when ‘None’ or an empty
     string are passed to ‘Distribution.from_name’ (and other callers).

   - gh-74696(130): *note shutil.make_archive(): 4b3. now passes the
     'root_dir' argument to custom archivers which support it.

   - gh-94216(131): The *note dis: 38. module now has the opcodes for
     pseudo instructions (those which are used by the compiler during
     code generation but then removed or replaced by real opcodes before
     the final bytecode is emitted).

   - gh-93096(132): Removed undocumented ‘python -m codecs’.  Use
     ‘python -m unittest test.test_codecs.EncodedFileTest’ instead.

   - gh-94207(133): Made ‘_struct.Struct’ GC-tracked in order to fix a
     reference leak in the ‘_struct’ module.

   - gh-93096(134): Removed undocumented ‘-t’ argument of ‘python -m
     base64’.  Use ‘python -m unittest
     test.test_base64.LegacyBase64TestCase.test_encodebytes’ instead.

   - gh-94226(135): Remove the ‘locale.format()’ function, deprecated in
     Python 3.7: use *note locale.format_string(): 51f. instead.  Patch
     by Victor Stinner.

   - gh-94199(136): Remove the ‘ssl.match_hostname()’ function.  The
     ‘ssl.match_hostname()’ was deprecated in Python 3.7.  OpenSSL
     performs hostname matching since Python 3.7, Python no longer uses
     the ‘ssl.match_hostname()’ function.  Patch by Victor Stinner.

   - gh-94214(137): Document the ‘context’ object used in the
     ‘venv.EnvBuilder’ class, and add the new environment’s library path
     to it.

   - gh-94199(138): Remove the ‘ssl.wrap_socket()’ function, deprecated
     in Python 3.7: instead, create a *note ssl.SSLContext: 294. object
     and call its *note ssl.SSLContext.wrap_socket: 525. method.  Any
     package that still uses ‘ssl.wrap_socket()’ is broken and insecure.
     The function neither sends a SNI TLS extension nor validates server
     hostname.  Code is subject to CWE 295(139) Improper Certificate
     Validation.  Patch by Victor Stinner.

   - gh-94199(140): Remove the ‘ssl.RAND_pseudo_bytes()’ function,
     deprecated in Python 3.6: use *note os.urandom(): 523. or *note
     ssl.RAND_bytes(): 524. instead.  Patch by Victor Stinner.

   - gh-94199(141): *note hashlib: 68.: Remove the pure Python
     implementation of *note hashlib.pbkdf2_hmac(): 50f, deprecated in
     Python 3.10.  Python 3.10 and newer requires OpenSSL 1.1.1 ( PEP
     644(142)): this OpenSSL version provides a C implementation of
     *note pbkdf2_hmac(): 50f. which is faster.  Patch by Victor
     Stinner.

   - gh-94196(143): *note gzip: 67.: Remove the ‘filename’ attribute of
     *note gzip.GzipFile: 41a, deprecated since Python 2.6, use the
     *note name: 50d. attribute instead.  In write mode, the ‘filename’
     attribute added ‘'.gz'’ file extension if it was not present.
     Patch by Victor Stinner.

   - gh-94182(144): run the *note asyncio.PidfdChildWatcher: 479. on the
     running loop, this allows event loops to run subprocesses when
     there is no default event loop running on the main thread

   - gh-94169(145): Remove ‘io.OpenWrapper’ and ‘_pyio.OpenWrapper’,
     deprecated in Python 3.10: just use *note open(): 51c. instead.
     The *note open(): 51c. (*note io.open(): 51d.) function is a
     built-in function.  Since Python 3.10, ‘_pyio.open()’ is also a
     static method.  Patch by Victor Stinner.

   - gh-91742(146): Fix *note pdb: a5. crash after jump caused by a null
     pointer dereference.  Patch by Kumar Aditya.

   - gh-94101(147): Manual instantiation of *note ssl.SSLSession: cfe.
     objects is no longer allowed as it lead to misconfigured instances
     that crashed the interpreter when attributes where accessed on
     them.

   - gh-84753(148): *note inspect.iscoroutinefunction(): 2e4, *note
     inspect.isgeneratorfunction(): 18e6, and *note
     inspect.isasyncgenfunction(): 18e7. now properly return ‘True’ for
     duck-typed function-like objects like instances of *note
     unittest.mock.AsyncMock: a53.

     This makes *note inspect.iscoroutinefunction(): 2e4. consistent
     with the behavior of ‘asyncio.iscoroutinefunction()’.  Patch by
     Mehdi ABAAKOUK.

   - gh-94028(149): Fix a regression in the *note sqlite3: cf. where
     statement objects were not properly cleared and reset after use in
     cursor iters.  The regression was introduced by PR 27884 in Python
     3.11a1.  Patch by Erlend E. Aasland.

   - gh-93973(150): Add keyword argument ‘all_errors’ to
     ‘asyncio.create_connection’ so that multiple connection errors can
     be raised as an ‘ExceptionGroup’.

   - gh-93963(151): Officially deprecate from ‘importlib.abc’ classes
     moved to ‘importlib.resources.abc’.

   - gh-93858(152): Prevent error when activating venv in nested fish
     instances.

   - gh-93820(153): Pickle *note enum.Flag: 623. by name.

   - gh-93847(154): Fix repr of enum of generic aliases.

   - gh-91404(155): Revert the *note re: b9. memory leak when a match is
     terminated by a signal or memory allocation failure as the
     implemented fix caused a major performance regression.

   - gh-83499(156): Fix double closing of file description in *note
     tempfile: e0.

   - gh-93820(157): Fixed a regression when *note copy.copy(): 534.-ing
     *note enum.Flag: 623. with multiple flag members.

   - gh-79512(158): Fixed names and ‘__module__’ value of *note weakref:
     114. classes *note ReferenceType: 18e8, *note ProxyType: 18e9,
     *note CallableProxyType: 18ea.  It makes them pickleable.

   - gh-91389(159): Fix an issue where *note dis: 38. utilities could
     report missing or incorrect position information in the presence of
     ‘CACHE’ entries.

   - gh-93626(160): Set ‘__future__.annotations’ to have a ‘None’
     mandatoryRelease to indicate that it is currently ‘TBD’.

   - gh-90473(161): Emscripten and WASI have no home directory and
     cannot provide PEP 370(162) user site directory.

   - gh-90494(163): *note copy.copy(): 534. and *note copy.deepcopy():
     b84. now always raise a TypeError if ‘__reduce__()’ returns a tuple
     with length 6 instead of silently ignore the 6th item or produce
     incorrect result.

   - gh-90549(164): Fix a multiprocessing bug where a global named
     resource (such as a semaphore) could leak when a child process is
     spawned (as opposed to forked).

   - gh-93521(165): Fixed a case where dataclasses would try to add
     ‘__weakref__’ into the ‘__slots__’ for a dataclass that specified
     ‘weakref_slot=True’ when it was already defined in one of its
     bases.  This resulted in a ‘TypeError’ upon the new class being
     created.

   - gh-79579(166): *note sqlite3: cf. now correctly detects DML queries
     with leading comments.  Patch by Erlend E. Aasland.

   - gh-93421(167): Update *note sqlite3.Cursor.rowcount: 18eb. when a
     DML statement has run to completion.  This fixes the row count for
     SQL queries like ‘UPDATE ... RETURNING’.  Patch by Erlend E.
     Aasland.

   - gh-93475(168): Expose ‘FICLONE’ and ‘FICLONERANGE’ constants in
     *note fcntl: 59.  Patch by Illia Volochii.

   - gh-93370(169): Deprecate *note sqlite3.version: 2cf. and *note
     sqlite3.version_info: 2d0.

   - gh-91810(170): Suppress writing an XML declaration in open files in
     ‘ElementTree.write()’ with ‘encoding='unicode'’ and
     ‘xml_declaration=None’.

   - gh-91162(171): Support splitting of unpacked arbitrary-length tuple
     over ‘TypeVar’ and ‘TypeVarTuple’ parameters.  For example:

        * ‘A[T, *Ts][*tuple[int, ...]]’ -> ‘A[int, *tuple[int, ...]]’

        * ‘A[*Ts, T][*tuple[int, ...]]’ -> ‘A[*tuple[int, ...], int]’

   - gh-93353(172): Fix the *note importlib.resources.as_file(): 48d.
     context manager to remove the temporary file if destroyed late
     during Python finalization: keep a local reference to the *note
     os.remove(): 112f. function.  Patch by Victor Stinner.

   - gh-83658(173): Make ‘multiprocessing.Pool’ raise an exception if
     ‘maxtasksperchild’ is not ‘None’ or a positive int.

   - gh-93312(174): Add *note os.PIDFD_NONBLOCK: 49a. flag to open a
     file descriptor for a process with *note os.pidfd_open(): 47a. in
     non-blocking mode.  Patch by Kumar Aditya.

   - gh-88123(175): Implement ‘Enum.__contains__’ that returns ‘True’ or
     ‘False’ to replace the deprecated behaviour that would sometimes
     raise a *note TypeError: 2c3.

   - gh-93297(176): Make asyncio task groups prevent child tasks from
     being GCed

   - gh-85308(177): Changed *note argparse.ArgumentParser: 539. to use
     *note filesystem encoding and error handler: 53b. instead of
     default text encoding to read arguments from file (e.g.
     ‘fromfile_prefix_chars’ option).  This change affects Windows;
     argument file should be encoded with UTF-8 instead of ANSI
     Codepage.

   - gh-93156(178): Accessing the *note pathlib.PurePath.parents: 823.
     sequence of an absolute path using negative index values produced
     incorrect results.

   - gh-93162(179): Add the ability for *note
     logging.config.dictConfig(): 11ef. to usefully configure *note
     QueueHandler: 18ec. and *note QueueListener: e59. as a pair, and
     add *note logging.getHandlerByName(): 18ed. and *note
     logging.getHandlerNames(): 17f0. APIs to allow access to handlers
     by name.

   - gh-93243(180): The ‘smtpd’ module was removed per the schedule in
     PEP 594(181).

   - gh-92886(182): Replace ‘assert’ statements with ‘raise
     AssertionError()’ in ‘BaseHandler’ so that the tested behaviour is
     maintained running with optimizations ‘(-O)’.

   - gh-90155(183): Fix broken *note asyncio.Semaphore: a7e. when
     acquire is cancelled.

   - gh-90817(184): The ‘locale.resetlocale()’ function is deprecated
     and will be removed in Python 3.13.  Use
     ‘locale.setlocale(locale.LC_ALL, "")’ instead.  Patch by Victor
     Stinner.

   - gh-91513(185): Added ‘taskName’ attribute to *note logging: 87.
     module for use with *note asyncio: a. tasks.

   - gh-74696(186): *note shutil.make_archive(): 4b3. no longer
     temporarily changes the current working directory during creation
     of standard ‘.zip’ or tar archives.

   - gh-92728(187): The ‘re.template()’ function and the corresponding
     ‘re.TEMPLATE’ and ‘re.T’ flags are restored after they were removed
     in 3.11.0b1, but they are now deprecated, so they might be removed
     from Python 3.13.

   - gh-93033(188): Search in some strings (platform dependent i.e
     [U+0xFFFF, U+0x0100] on Windows or [U+0xFFFFFFFF, U+0x00010000] on
     Linux 64-bit) are now up to 10 times faster.

   - gh-89973(189): Fix ‘re.error’ raised in *note fnmatch: 5c. if the
     pattern contains a character range with upper bound lower than
     lower bound (e.g.  ‘[c-a]’).  Now such ranges are interpreted as
     empty ranges.

   - gh-93044(190): No longer convert the database argument of *note
     sqlite3.connect(): 2a8. to bytes before passing it to the factory.

   - gh-93010(191): In a very special case, the email package tried to
     append the nonexistent ‘InvalidHeaderError’ to the defect list.  It
     should have been ‘InvalidHeaderDefect’.

   - gh-92986(192): Fix *note ast.unparse(): 8eb. when
     ‘ImportFrom.level’ is ‘None’

   - gh-92932(193): Now *note dis(): b46. and *note get_instructions():
     1d9. handle operand values for instructions prefixed by
     ‘EXTENDED_ARG_QUICK’.  Patch by Sam Gross and Donghee Na.

   - gh-92675(194): Fix ‘venv.ensure_directories()’ to accept *note
     pathlib.Path: 229. arguments in addition to *note str: 44c. paths.
     Patch by David Foster.

   - gh-87901(195): Removed the ‘encoding’ argument from *note
     os.popen(): a91. that was added in 3.11b1.

   - gh-91922(196): Fix function ‘sqlite.connect()’ and the
     ‘sqlite.Connection’ constructor on non-UTF-8 locales.  Also, they
     now support bytes paths non-decodable with the current FS encoding.

   - gh-92869(197): Added *note c_time_t: 18ee. to *note ctypes: 2a,
     which has the same size as the ‘time_t’ type in C.

   - gh-92839(198): Fixed crash resulting from calling bisect.insort()
     or bisect.insort_left() with the key argument not equal to ‘None’.

   - gh-90473(199): *note subprocess: d6. now fails early on Emscripten
     and WASI platforms to work around missing *note os.pipe(): 18ef. on
     WASI.

   - gh-89325(200): Removed many old deprecated *note unittest: 106.
     features: *note TestCase: 44f. method aliases, undocumented and
     broken *note TestCase: 44f. method ‘assertDictContainsSubset’,
     undocumented *note TestLoader.loadTestsFromModule: 28f. parameter
     'use_load_tests', and an underscored alias of the *note
     TextTestResult: 531. class.

   - gh-92734(201): Allow multi-element reprs emitted by *note reprlib:
     bb. to be pretty-printed using configurable indentation.

   - gh-92671(202): Fixed *note ast.unparse(): 8eb. for empty tuples in
     the assignment target context.

   - gh-91581(203): *note utcfromtimestamp(): 2fd. no longer attempts to
     resolve ‘fold’ in the pure Python implementation, since the fold is
     never 1 in UTC. In addition to being slightly faster in the common
     case, this also prevents some errors when the timestamp is close to
     *note datetime.min: 18f0.  Patch by Paul Ganssle.

   - gh-86388(204): Removed randrange() functionality deprecated since
     Python 3.10.  Formerly, randrange(10.0) losslessly converted to
     randrange(10).  Now, it raises a TypeError.  Also, the exception
     raised for non-integral values such as randrange(10.5) or
     randrange(‘10’) has been changed from ValueError to TypeError.

   - gh-90385(205): Add *note pathlib.Path.walk(): 4a8. as an
     alternative to *note os.walk(): 4a9.

   - gh-92550(206): Fix *note pathlib.Path.rglob(): 22e. for empty
     pattern.

   - gh-92591(207): Allow *note logging: 87. filters to return a *note
     logging.LogRecord: 101c. instance so that filters attached to *note
     logging.Handler: 14de.s can enrich records without side effects on
     other handlers.

   - gh-92445(208): Fix a bug in *note argparse: 6. where ‘nargs="*"’
     would raise an error instead of returning an empty list when 0
     arguments were supplied if choice was also defined in
     ‘parser.add_argument’.

   - gh-92547(209): Remove undocumented *note sqlite3: cf. features
     deprecated in Python 3.10:

        * ‘sqlite3.enable_shared_cache()’

        * ‘sqlite3.OptimizedUnicode’

     Patch por Erlend E. Aasland.

   - gh-92530(210): Fix an issue that occurred after interrupting *note
     threading.Condition.notify(): 18f1.

   - gh-92531(211): The statistics.median_grouped() function now always
     return a float.  Formerly, it did not convert the input type when
     for sequences of length one.

   - gh-84131(212): The *note pathlib.Path: 229. deprecated method
     ‘link_to’ has been removed.  Use 3.10’s *note hardlink_to(): 824.
     method instead as its semantics are consistent with that of *note
     symlink_to(): 825.

   - gh-89336(213): Removed *note configparser: 22. module APIs: the
     ‘SafeConfigParser’ class alias, the ‘ParsingError.filename’
     property and parameter, and the ‘ConfigParser.readfp’ method, all
     of which were deprecated since Python 3.2.

   - gh-92391(214): Add *note __class_getitem__(): 73b. to *note
     csv.DictReader: 9ed. and *note csv.DictWriter: 123e, allowing them
     to be parameterized at runtime.  Patch by Marc Mueller.

   - gh-91968(215): Add ‘SO_RTABLE’ and ‘SO_USER_COOKIE’ constants to
     *note socket: cc.

   - gh-91810(216): *note ElementTree: 955. method *note write(): aa4.
     and function *note tostring(): 102b. now use the text file’s
     encoding (“UTF-8” if not available) instead of locale encoding in
     XML declaration when ‘encoding="unicode"’ is specified.

   - gh-81790(217): *note os.path.splitdrive(): c0f. now understands DOS
     device paths with UNC links (beginning ‘\\?\UNC\’).  Contributed by
     Barney Gale.

   - gh-91760(218): Apply more strict rules for numerical group
     references and group names in regular expressions.  Only sequence
     of ASCII digits is now accepted as a numerical reference.  The
     group name in bytes patterns and replacement strings can now only
     contain ASCII letters and digits and underscore.

   - gh-90622(219): Worker processes for *note
     concurrent.futures.ProcessPoolExecutor: 8f4. are no longer spawned
     on demand (a feature added in 3.9) when the multiprocessing context
     start method is ‘"fork"’ as that can lead to deadlocks in the child
     processes due to a fork happening while threads are running.

   - gh-91577(220): Move imports in ‘SharedMemory’ methods to module
     level so that they can be executed late in python finalization.

   - gh-91581(221): Remove an unhandled error case in the C
     implementation of calls to *note datetime.fromtimestamp: 4ed. with
     no time zone (i.e.  getting a local time from an epoch timestamp).
     This should have no user-facing effect other than giving a possibly
     more accurate error message when called with timestamps that fall
     on 10000-01-01 in the local time.  Patch by Paul Ganssle.

   - gh-91539(222): Improve performance of
     ‘urllib.request.getproxies_environment’ when there are many
     environment variables

   - gh-91524(223): Speed up the regular expression substitution
     (functions *note re.sub(): 2a3. and *note re.subn(): 2a4. and
     corresponding *note re.Pattern: 18f2. methods) for replacement
     strings containing group references by 2–3 times.

   - gh-91447(224): Fix findtext in the xml module to only give an empty
     string when the text attribute is set to ‘None’.

   - gh-91456(225): Deprecate current default auto() behavior: In 3.13
     the default will be for for auto() to always return the largest
     member value incremented by 1, and to raise if incompatible value
     types are used.

   - bpo-47231(226): Fixed an issue with inconsistent trailing slashes
     in tarfile longname directories.

   - bpo-39064(227): *note zipfile.ZipFile: 6c4. now raises *note
     zipfile.BadZipFile: 18f3. instead of ‘ValueError’ when reading a
     corrupt zip file in which the central directory offset is negative.

   - bpo-41287(228): Fix handling of the ‘doc’ argument in subclasses of
     *note property(): 194.

   - gh-90005(229): *note ctypes: 2a. dependency ‘libffi’ is now
     detected with ‘pkg-config’.

   - bpo-32547(230): The constructors for *note DictWriter: 123e. and
     *note DictReader: 9ed. now coerce the ‘fieldnames’ argument to a
     *note list: 611. if it is an iterator.

   - bpo-35540(231): Fix *note dataclasses.asdict(): 1819. crash when
     *note collections.defaultdict: 11fc. is present in the attributes.

   - bpo-47063(232): Add an index_pages parameter to support using
     non-default index page names.

   - bpo-47025(233): Drop support for *note bytes: 1c2. on *note
     sys.path: 3b4.

   - bpo-46951(234): Order the contents of zipapp archives, to make
     builds more reproducible.

   - bpo-42777(235): Implement *note pathlib.Path.is_mount(): a21. for
     Windows paths.

   - bpo-46755(236): In ‘QueueHandler’, clear ‘stack_info’ from
     ‘LogRecord’ to prevent stack trace from being written twice.

   - bpo-45393(237): Fix the formatting for ‘await x’ and ‘not x’ in the
     operator precedence table when using the *note help(): 8dd. system.

   - bpo-46642(238): Improve error message when trying to subclass an
     instance of *note typing.TypeVar: 15d, *note typing.ParamSpec: 15e,
     *note typing.TypeVarTuple: 15f, etc.  Based on patch by Gregory
     Beauregard.

   - bpo-46364(239): Restrict use of sockets instead of pipes for stdin
     of subprocesses created by *note asyncio: a. to AIX platform only.

   - bpo-28249(240): Set *note doctest.DocTest.lineno: 1606. to ‘None’
     when an object does not have *note __doc__: 92e.

   - bpo-46197(241): Fix *note ensurepip: 55. environment isolation for
     subprocess running ‘pip’.

   - bpo-45924(242): Fix *note asyncio: a. incorrect traceback when
     future’s exception is raised multiple times.  Patch by Kumar
     Aditya.

   - bpo-45046(243): Add support of context managers in *note unittest:
     106.: methods *note enterContext(): 6b9. and *note
     enterClassContext(): 6ba. of class *note TestCase: 44f, method
     *note enterAsyncContext(): 6bb. of class *note
     IsolatedAsyncioTestCase: 30c. and function *note
     unittest.enterModuleContext(): 6bc.

   - bpo-44173(244): Enable fast seeking of uncompressed unencrypted
     ‘zipfile.ZipExtFile’

   - bpo-42627(245): Fix incorrect parsing of Windows registry proxy
     settings

   - bpo-42047(246): Add *note threading.get_native_id(): a47. support
     for DragonFly BSD. Patch by David Carlier.

   - bpo-14243(247): The *note tempfile.NamedTemporaryFile: 4c6.
     function has a new optional parameter 'delete_on_close'

   - bpo-41246(248): Give the same callback function for when the
     overlapped operation is done to the functions ‘recv’, ‘recv_into’,
     ‘recvfrom’, ‘sendto’, ‘send’ and ‘sendfile’ inside ‘IocpProactor’.

   - bpo-39264(249): Fixed ‘collections.UserDict.get()’ to not call
     *note __missing__(): 11fd. when a value is not found.  This matches
     the behavior of *note dict: 256.  Patch by Bar Harel.

   - bpo-38693(250): *note importlib: 77. now uses f-strings internally
     instead of ‘str.format’.

   - bpo-38267(251): Add 'timeout' parameter to *note
     asyncio.loop.shutdown_default_executor(): 8ed.  The default value
     is ‘None’, which means the executor will be given an unlimited
     amount of time.  When called from *note asyncio.Runner: 600. or
     *note asyncio.run(): 47c, the default timeout is 5 minutes.

   - bpo-34828(252): *note sqlite3.Connection.iterdump(): 247. now
     handles databases that use ‘AUTOINCREMENT’ in one or more tables.

   - bpo-32990(253): Support reading wave files with the
     ‘WAVE_FORMAT_EXTENSIBLE’ format in the *note wave: 113. module.

   - bpo-26253(254): Allow adjustable compression level for tarfile
     streams in *note tarfile.open(): ea6.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/89237

   (2) https://github.com/python/cpython/issues/97928

   (3) https://github.com/python/cpython/issues/98393

   (4) https://github.com/python/cpython/issues/98363

   (5) https://github.com/python/cpython/issues/98331

   (6) https://github.com/python/cpython/issues/98307

   (7) https://github.com/python/cpython/issues/96035

   (8) https://github.com/python/cpython/issues/98257

   (9) https://github.com/python/cpython/issues/98251

   (10) https://github.com/python/cpython/issues/94597

   (11) https://github.com/python/cpython/issues/98178

   (12) https://github.com/python/cpython/issues/44098

   (13) https://github.com/python/cpython/issues/87730

   (14) https://github.com/python/cpython/issues/94597

   (15) https://github.com/python/cpython/issues/98023

   (16) https://github.com/python/cpython/issues/90985

   (17) https://github.com/python/cpython/issues/65961

   (18) https://github.com/python/cpython/issues/97646

   (19) https://datatracker.ietf.org/doc/html/rfc9239.html

   (20) https://github.com/python/cpython/issues/97930

   (21) https://github.com/python/cpython/issues/97850

   (22) https://github.com/python/cpython/issues/97837

   (23) https://github.com/python/cpython/issues/97825

   (24) https://github.com/python/cpython/issues/97008

   (25) https://github.com/python/cpython/issues/82711

   (26) https://github.com/python/cpython/issues/97799

   (27) https://github.com/python/cpython/issues/97781

   (28) https://github.com/python/cpython/issues/96827

   (29) https://github.com/python/cpython/issues/95534

   (30) https://github.com/python/cpython/issues/97592

   (31) https://github.com/python/cpython/issues/97639

   (32) https://github.com/python/cpython/issues/97545

   (33) https://github.com/python/cpython/issues/73588

   (34) https://github.com/python/cpython/issues/96865

   (35) https://github.com/python/cpython/issues/97005

   (36) https://github.com/python/cpython/issues/85760

   (37) https://github.com/python/cpython/issues/96704

   (38) https://github.com/python/cpython/issues/96819

   (39) https://github.com/python/cpython/issues/95865

   (40) https://github.com/python/cpython/issues/96741

   (41) https://github.com/python/cpython/issues/96734

   (42) https://github.com/python/cpython/issues/96735

   (43) https://github.com/python/cpython/issues/46412

   (44) https://github.com/python/cpython/issues/96652

   (45) https://github.com/python/cpython/issues/68163

   (46) https://github.com/python/cpython/issues/96538

   (47) https://github.com/python/cpython/issues/96465

   (48) https://github.com/python/cpython/issues/96079

   (49) https://github.com/python/cpython/issues/96415

   (50) https://github.com/python/cpython/issues/95987

   (51) https://github.com/python/cpython/issues/96388

   (52) https://github.com/python/cpython/issues/96385

   (53) https://github.com/python/cpython/issues/96142

   (54) https://github.com/python/cpython/issues/96073

   (55) https://github.com/python/cpython/issues/89258

   (56) https://github.com/python/cpython/issues/96346

   (57) https://github.com/python/cpython/issues/96349

   (58) https://github.com/python/cpython/issues/90467

   (59) https://github.com/python/cpython/issues/96172

   (60) https://github.com/python/cpython/issues/96159

   (61) https://github.com/python/cpython/issues/96175

   (62) https://github.com/python/cpython/issues/96145

   (63) https://github.com/python/cpython/issues/96052

   (64) https://github.com/python/cpython/issues/96125

   (65) https://github.com/python/cpython/issues/96019

   (66) https://github.com/python/cpython/issues/95463

   (67) https://bugs.python.org/issue?@action=redirect&bpo=28080

   (68) https://github.com/python/cpython/issues/69142

   (69) https://github.com/python/cpython/issues/95899

   (70) https://github.com/python/cpython/issues/95736

   (71) https://github.com/python/cpython/issues/95865

   (72) https://github.com/python/cpython/issues/95861

   (73) https://github.com/python/cpython/issues/95804

   (74) https://github.com/python/cpython/issues/95704

   (75) https://github.com/python/cpython/issues/95149

   (76) https://github.com/python/cpython/issues/95609

   (77) https://github.com/python/cpython/issues/95289

   (78) https://github.com/python/cpython/issues/94909

   (79) https://github.com/python/cpython/issues/95385

   (80) https://github.com/python/cpython/issues/83901

   (81) https://github.com/python/cpython/issues/95339

   (82) https://github.com/python/cpython/issues/95045

   (83) https://github.com/python/cpython/issues/95231

   (84) https://github.com/python/cpython/issues/95097

   (85) https://github.com/python/cpython/issues/95087

   (86) https://github.com/python/cpython/issues/95199

   (87) https://github.com/python/cpython/issues/95194

   (88) https://github.com/python/cpython/issues/93899

   (89) https://github.com/python/cpython/issues/95166

   (90) https://github.com/python/cpython/issues/95132

   (91) https://github.com/python/cpython/issues/85128

   (92) https://github.com/python/cpython/issues/93157

   (93) https://github.com/python/cpython/issues/91212

   (94) https://github.com/python/cpython/issues/95077

   (95) https://github.com/python/cpython/issues/95109

   (96) https://github.com/python/cpython/issues/95105

   (97) https://github.com/python/cpython/issues/95066

   (98) https://github.com/python/cpython/issues/77617

   (99) https://github.com/python/cpython/issues/95005

   (100) https://github.com/python/cpython/issues/90085

   (101) https://github.com/python/cpython/issues/94857

   (102) https://github.com/python/cpython/issues/94821

   (103) https://github.com/python/cpython/issues/94736

   (104) https://github.com/python/cpython/issues/81620

   (105) https://github.com/python/cpython/issues/74116

   (106) https://github.com/python/cpython/issues/87822

   (107) https://github.com/python/cpython/issues/88050

   (108) https://github.com/python/cpython/issues/94637

   (109) https://github.com/python/cpython/issues/94309

   (110) https://github.com/python/cpython/issues/92546

   (111) https://github.com/python/cpython/issues/94607

   (112) https://github.com/python/cpython/issues/94619

   (113) https://github.com/python/cpython/issues/93910

   (114) https://github.com/python/cpython/issues/93896

   (115) https://github.com/python/cpython/issues/94343

   (116) https://github.com/python/cpython/issues/94382

   (117) https://github.com/python/cpython/issues/78724

   (118) https://github.com/python/cpython/issues/94510

   (119) https://github.com/python/cpython/issues/92336

   (120) https://github.com/python/cpython/issues/94398

   (121) https://github.com/python/cpython/issues/94383

   (122) https://github.com/python/cpython/issues/94379

   (123) https://peps.python.org/pep-0451/

   (124) https://github.com/python/cpython/issues/94352

   (125) https://github.com/python/cpython/issues/94318

   (126) https://github.com/python/cpython/issues/89988

   (127) https://github.com/python/cpython/issues/90016

   (128) https://github.com/python/cpython/issues/94254

   (129) https://github.com/python/cpython/issues/93259

   (130) https://github.com/python/cpython/issues/74696

   (131) https://github.com/python/cpython/issues/94216

   (132) https://github.com/python/cpython/issues/93096

   (133) https://github.com/python/cpython/issues/94207

   (134) https://github.com/python/cpython/issues/93096

   (135) https://github.com/python/cpython/issues/94226

   (136) https://github.com/python/cpython/issues/94199

   (137) https://github.com/python/cpython/issues/94214

   (138) https://github.com/python/cpython/issues/94199

   (139) https://cwe.mitre.org/data/definitions/295.html

   (140) https://github.com/python/cpython/issues/94199

   (141) https://github.com/python/cpython/issues/94199

   (142) https://peps.python.org/pep-0644/

   (143) https://github.com/python/cpython/issues/94196

   (144) https://github.com/python/cpython/issues/94182

   (145) https://github.com/python/cpython/issues/94169

   (146) https://github.com/python/cpython/issues/91742

   (147) https://github.com/python/cpython/issues/94101

   (148) https://github.com/python/cpython/issues/84753

   (149) https://github.com/python/cpython/issues/94028

   (150) https://github.com/python/cpython/issues/93973

   (151) https://github.com/python/cpython/issues/93963

   (152) https://github.com/python/cpython/issues/93858

   (153) https://github.com/python/cpython/issues/93820

   (154) https://github.com/python/cpython/issues/93847

   (155) https://github.com/python/cpython/issues/91404

   (156) https://github.com/python/cpython/issues/83499

   (157) https://github.com/python/cpython/issues/93820

   (158) https://github.com/python/cpython/issues/79512

   (159) https://github.com/python/cpython/issues/91389

   (160) https://github.com/python/cpython/issues/93626

   (161) https://github.com/python/cpython/issues/90473

   (162) https://peps.python.org/pep-0370/

   (163) https://github.com/python/cpython/issues/90494

   (164) https://github.com/python/cpython/issues/90549

   (165) https://github.com/python/cpython/issues/93521

   (166) https://github.com/python/cpython/issues/79579

   (167) https://github.com/python/cpython/issues/93421

   (168) https://github.com/python/cpython/issues/93475

   (169) https://github.com/python/cpython/issues/93370

   (170) https://github.com/python/cpython/issues/91810

   (171) https://github.com/python/cpython/issues/91162

   (172) https://github.com/python/cpython/issues/93353

   (173) https://github.com/python/cpython/issues/83658

   (174) https://github.com/python/cpython/issues/93312

   (175) https://github.com/python/cpython/issues/88123

   (176) https://github.com/python/cpython/issues/93297

   (177) https://github.com/python/cpython/issues/85308

   (178) https://github.com/python/cpython/issues/93156

   (179) https://github.com/python/cpython/issues/93162

   (180) https://github.com/python/cpython/issues/93243

   (181) https://peps.python.org/pep-0594/

   (182) https://github.com/python/cpython/issues/92886

   (183) https://github.com/python/cpython/issues/90155

   (184) https://github.com/python/cpython/issues/90817

   (185) https://github.com/python/cpython/issues/91513

   (186) https://github.com/python/cpython/issues/74696

   (187) https://github.com/python/cpython/issues/92728

   (188) https://github.com/python/cpython/issues/93033

   (189) https://github.com/python/cpython/issues/89973

   (190) https://github.com/python/cpython/issues/93044

   (191) https://github.com/python/cpython/issues/93010

   (192) https://github.com/python/cpython/issues/92986

   (193) https://github.com/python/cpython/issues/92932

   (194) https://github.com/python/cpython/issues/92675

   (195) https://github.com/python/cpython/issues/87901

   (196) https://github.com/python/cpython/issues/91922

   (197) https://github.com/python/cpython/issues/92869

   (198) https://github.com/python/cpython/issues/92839

   (199) https://github.com/python/cpython/issues/90473

   (200) https://github.com/python/cpython/issues/89325

   (201) https://github.com/python/cpython/issues/92734

   (202) https://github.com/python/cpython/issues/92671

   (203) https://github.com/python/cpython/issues/91581

   (204) https://github.com/python/cpython/issues/86388

   (205) https://github.com/python/cpython/issues/90385

   (206) https://github.com/python/cpython/issues/92550

   (207) https://github.com/python/cpython/issues/92591

   (208) https://github.com/python/cpython/issues/92445

   (209) https://github.com/python/cpython/issues/92547

   (210) https://github.com/python/cpython/issues/92530

   (211) https://github.com/python/cpython/issues/92531

   (212) https://github.com/python/cpython/issues/84131

   (213) https://github.com/python/cpython/issues/89336

   (214) https://github.com/python/cpython/issues/92391

   (215) https://github.com/python/cpython/issues/91968

   (216) https://github.com/python/cpython/issues/91810

   (217) https://github.com/python/cpython/issues/81790

   (218) https://github.com/python/cpython/issues/91760

   (219) https://github.com/python/cpython/issues/90622

   (220) https://github.com/python/cpython/issues/91577

   (221) https://github.com/python/cpython/issues/91581

   (222) https://github.com/python/cpython/issues/91539

   (223) https://github.com/python/cpython/issues/91524

   (224) https://github.com/python/cpython/issues/91447

   (225) https://github.com/python/cpython/issues/91456

   (226) https://bugs.python.org/issue?@action=redirect&bpo=47231

   (227) https://bugs.python.org/issue?@action=redirect&bpo=39064

   (228) https://bugs.python.org/issue?@action=redirect&bpo=41287

   (229) https://github.com/python/cpython/issues/90005

   (230) https://bugs.python.org/issue?@action=redirect&bpo=32547

   (231) https://bugs.python.org/issue?@action=redirect&bpo=35540

   (232) https://bugs.python.org/issue?@action=redirect&bpo=47063

   (233) https://bugs.python.org/issue?@action=redirect&bpo=47025

   (234) https://bugs.python.org/issue?@action=redirect&bpo=46951

   (235) https://bugs.python.org/issue?@action=redirect&bpo=42777

   (236) https://bugs.python.org/issue?@action=redirect&bpo=46755

   (237) https://bugs.python.org/issue?@action=redirect&bpo=45393

   (238) https://bugs.python.org/issue?@action=redirect&bpo=46642

   (239) https://bugs.python.org/issue?@action=redirect&bpo=46364

   (240) https://bugs.python.org/issue?@action=redirect&bpo=28249

   (241) https://bugs.python.org/issue?@action=redirect&bpo=46197

   (242) https://bugs.python.org/issue?@action=redirect&bpo=45924

   (243) https://bugs.python.org/issue?@action=redirect&bpo=45046

   (244) https://bugs.python.org/issue?@action=redirect&bpo=44173

   (245) https://bugs.python.org/issue?@action=redirect&bpo=42627

   (246) https://bugs.python.org/issue?@action=redirect&bpo=42047

   (247) https://bugs.python.org/issue?@action=redirect&bpo=14243

   (248) https://bugs.python.org/issue?@action=redirect&bpo=41246

   (249) https://bugs.python.org/issue?@action=redirect&bpo=39264

   (250) https://bugs.python.org/issue?@action=redirect&bpo=38693

   (251) https://bugs.python.org/issue?@action=redirect&bpo=38267

   (252) https://bugs.python.org/issue?@action=redirect&bpo=34828

   (253) https://bugs.python.org/issue?@action=redirect&bpo=32990

   (254) https://bugs.python.org/issue?@action=redirect&bpo=26253


File: python.info,  Node: Documentação<24>,  Next: Testes<28>,  Prev: Biblioteca<62>,  Up: Python 3 12 0 alpha 1

1.23.34.22 Documentação
.......................

   - gh-85525(1): Remove extra row

   - gh-86404(2): Deprecated tools ‘make suspicious’ and ‘rstlint.py’
     are now removed.  They have been replaced by sphinx-lint(3).

   - gh-97741(4): Fix ‘!’ in c domain ref target syntax via a ‘conf.py’
     patch, so it works as intended to disable ref target resolution.

   - gh-96432(5): Fraction literals now support whitespace around the
     forward slash, ‘Fraction('2 / 3')’.

   - gh-96098(6): Improve discoverability of the higher level
     concurrent.futures module by providing clearer links from the lower
     level threading and multiprocessing modules.

   - gh-95957(7): What’s New 3.11 now has instructions for how to
     provide compiler and linker flags for Tcl/Tk and OpenSSL on RHEL 7
     and CentOS 7.

   - gh-95588(8): Clarified the conflicting advice given in the *note
     ast: 8. documentation about *note ast.literal_eval(): c32. being
     “safe” for use on untrusted input while at the same time warning
     that it can crash the process.  The latter statement is true and is
     deemed unfixable without a large amount of work unsuitable for a
     bugfix.  So we keep the warning and no longer claim that
     ‘literal_eval’ is safe.

   - gh-91207(9): Fix stylesheet not working in Windows CHM htmlhelp
     docs and add warning that they are deprecated.  Contributed by
     C.A.M. Gerlach.

   - gh-95454(10): Replaced incorrectly written true/false values in
     documentation.  Patch by Robert O’Shea

   - gh-95451(11): Atualiza a documentação da biblioteca com *note
     informações de disponibilidade: 18f5. para as plataformas
     WebAssembly ‘wasm32-emscripten’ e ‘wasm32-wasi’.

   - gh-95415(12): Use consistent syntax for platform availability.  The
     directive now supports a content body and emits a warning when it
     encounters an unknown platform.

   - gh-94321(13): Document the PEP 246(14) style protocol type *note
     sqlite3.PrepareProtocol: 18f6.

   - gh-86128(15): Document a limitation in ThreadPoolExecutor where its
     exit handler is executed before any handlers in atexit.

   - gh-61162(16): Clarify *note sqlite3: cf. behavior when *note How to
     use the connection context manager: 18f7.

   - gh-87260(17): Align *note sqlite3: cf. argument specs with the
     actual implementation.

   - gh-86986(18): The minimum Sphinx version required to build the
     documentation is now 3.2.

   - gh-88831(19): Augmented documentation of asyncio.create_task().
     Clarified the need to keep strong references to tasks and added a
     code snippet detailing how to do this.

   - gh-86438(20): Clarify that *note -W: 8cd. and *note PYTHONWARNINGS:
     bc2. are matched literally and case-insensitively, rather than as
     regular expressions, in *note warnings: 112.

   - gh-93031(21): Update tutorial introduction output to use 3.10+
     SyntaxError invalid range.

   - gh-92240(22): Added release dates for “What’s New in Python 3.X”
     for 3.0, 3.1, 3.2, 3.8 and 3.10

   - bpo-47161(23): Document that *note pathlib.PurePath: 4a6. does not
     collapse initial double slashes because they denote UNC paths.

   - bpo-40838(24): Document that *note inspect.getdoc(): a02, *note
     inspect.getmodule(): 18f8, and *note inspect.getsourcefile(): 18f9.
     might return ‘None’.

   - bpo-43689(25): The ‘Differ’ documentation now also mentions other
     whitespace characters, which make it harder to understand the diff
     output.

   - bpo-38056(26): Overhaul the *note Error Handlers: 18fa.
     documentation in *note codecs: 1b.

   - bpo-13553(27): Document tkinter.Tk args.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/85525

   (2) https://github.com/python/cpython/issues/86404

   (3) https://pypi.org/project/sphinx-lint/

   (4) https://github.com/python/cpython/issues/97741

   (5) https://github.com/python/cpython/issues/96432

   (6) https://github.com/python/cpython/issues/96098

   (7) https://github.com/python/cpython/issues/95957

   (8) https://github.com/python/cpython/issues/95588

   (9) https://github.com/python/cpython/issues/91207

   (10) https://github.com/python/cpython/issues/95454

   (11) https://github.com/python/cpython/issues/95451

   (12) https://github.com/python/cpython/issues/95415

   (13) https://github.com/python/cpython/issues/94321

   (14) https://peps.python.org/pep-0246/

   (15) https://github.com/python/cpython/issues/86128

   (16) https://github.com/python/cpython/issues/61162

   (17) https://github.com/python/cpython/issues/87260

   (18) https://github.com/python/cpython/issues/86986

   (19) https://github.com/python/cpython/issues/88831

   (20) https://github.com/python/cpython/issues/86438

   (21) https://github.com/python/cpython/issues/93031

   (22) https://github.com/python/cpython/issues/92240

   (23) https://bugs.python.org/issue?@action=redirect&bpo=47161

   (24) https://bugs.python.org/issue?@action=redirect&bpo=40838

   (25) https://bugs.python.org/issue?@action=redirect&bpo=43689

   (26) https://bugs.python.org/issue?@action=redirect&bpo=38056

   (27) https://bugs.python.org/issue?@action=redirect&bpo=13553


File: python.info,  Node: Testes<28>,  Next: Construção<30>,  Prev: Documentação<24>,  Up: Python 3 12 0 alpha 1

1.23.34.23 Testes
.................

   - gh-95027(1): On Windows, when the Python test suite is run with the
     ‘-jN’ option, the ANSI code page is now used as the encoding for
     the stdout temporary file, rather than using UTF-8 which can lead
     to decoding errors.  Patch by Victor Stinner.

   - gh-96624(2): Fixed the failure of repeated runs of
     ‘test.test_unittest’ caused by side effects in
     ‘test_dotted_but_module_not_loaded’.

   - gh-95243(3): Mitigate the inherent race condition from using
     find_unused_port() in testSockName() by trying to find an unused
     port a few times before failing.  Patch by Ross Burton.

   - gh-95573(4): Lib/test/test_asyncio/test_ssl.py(5) exposed a bug in
     the macOS kernel where intense concurrent load on non-blocking
     sockets occasionally causes *note errno.ENOBUFS: 18fc. (“No buffer
     space available”) to be emitted.  FB11063974 filed with Apple, in
     the mean time as a workaround buffer size used in tests on macOS is
     decreased to avoid intermittent failures.  Patch by Fantix King.

   - gh-95280(6): Fix problem with ‘test_ssl’ ‘test_get_ciphers’ on
     systems that require perfect forward secrecy (PFS) ciphers.

   - gh-95212(7): Make multiprocessing test case
     ‘test_shared_memory_recreate’ parallel-safe.

   - gh-95218(8): Move tests for importlib.resources into
     test_importlib.resources.

   - gh-93963(9): Updated tests to use preferred location for
     ‘importlib.resources’ ABCs.

   - gh-94675(10): Add a regression test for *note re: b9. exponentional
     slowdown when using rjsmin.

   - gh-91330(11): Added more tests for *note dataclasses: 2f. to cover
     behavior with data descriptor-based fields.

   - gh-94208(12): ‘test_ssl’ is now checking for supported TLS version
     and protocols in more tests.

   - gh-94315(13): Tests now check for DAC override capability instead
     of relying on *note os.geteuid(): 18fd.

   - gh-54781(14): Rename test_tk to test_tkinter, and rename
     test_ttk_guionly to test_ttk.  Patch by Victor Stinner.

   - gh-93839(15): Move ‘Lib/ctypes/test/’ to ‘Lib/test/test_ctypes/’.
     Patch by Victor Stinner.

   - gh-93951(16): In test_bdb.StateTestCase.test_skip, avoid including
     auxiliary importers.

   - gh-93957(17): Provide nicer error reporting from subprocesses in
     test_venv.EnsurePipTest.test_with_pip.

   - gh-93884(18): Add test cases for *note PyNumber_ToBase(): 18fe.
     that take a large number or a non-int object as parameter.

   - gh-93852(19): test_asyncio, test_logging, test_socket and
     test_socketserver now create AF_UNIX domains in the current
     directory to no longer fail with ‘OSError("AF_UNIX path too long")’
     if the temporary directory (the ‘TMPDIR’ environment variable) is
     too long.  Patch by Victor Stinner.

   - gh-93353(20): regrtest now checks if a test leaks temporary files
     or directories if run with -jN option.  Patch by Victor Stinner.

   - gh-84461(21): ‘run_tests.py’ now handles cross compiling env vars
     correctly and pass ‘HOSTRUNNER’ to regression tests.

   - gh-93616(22): ‘test_modulefinder’ now creates a temporary directory
     in ‘ModuleFinderTest.setUp()’ instead of module scope.

   - gh-93575(23): Fix issue with test_unicode test_raiseMemError.  The
     test case now use ‘test.support.calcobjsize’ to calculate size of
     PyUnicode structs.  *note sys.getsizeof(): 1863. may return
     different size when string has UTF-8 memory.

   - gh-90473(24): WASI does not have a ‘chmod(2)’ syscall.  *note
     os.chmod(): 21b. is now a dummy function on WASI. Skip all tests
     that depend on working *note os.chmod(): 21b.

   - gh-90473(25): Skip tests on WASI that require symlinks with
     absolute paths.

   - gh-57539(26): Increase calendar test coverage for
     ‘calendar.LocaleTextCalendar.formatweekday()’.

   - gh-90473(27): Skip symlink tests on WASI. wasmtime uses
     ‘openat2(2)’ with ‘RESOLVE_BENEATH’ flag, which prevents symlinks
     with absolute paths.

   - gh-89858(28): Fix ‘test_embed’ for out-of-tree builds.  Patch by
     Kumar Aditya.

   - gh-92886(29): Fixing tests that fail when running with
     optimizations (‘-O’) in ‘test_imaplib.py’.

   - gh-92886(30): Fixing tests that fail when running with
     optimizations (‘-O’) in ‘test_zipimport.py’

   - gh-92886(31): Fixing tests that fail when running with
     optimizations (‘-O’) in ‘test_py_compile.py’

   - gh-92886(32): Fixing tests that fail when running with
     optimizations (‘-O’) in ‘test_sys_settrace.py’.

   - gh-92886(33): Fixing tests that fail when running with
     optimizations (‘-O’) in ‘_test_multiprocessing.py’

   - gh-92670(34): Skip
     ‘test_shutil.TestCopy.test_copyfile_nonexistent_dir’ test on AIX as
     the test uses a trailing slash to force the OS consider the path as
     a directory, but on AIX the trailing slash has no effect and is
     considered as a file.

   - gh-92514(35): Remove unused ‘test.support.BasicTestRunner’.  Patch
     by Jelle Zijlstra.

   - bpo-47016(36): Create a GitHub Actions workflow for verifying
     bundled pip and setuptools.  Patch by Illia Volochii and Adam
     Turner.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/95027

   (2) https://github.com/python/cpython/issues/96624

   (3) https://github.com/python/cpython/issues/95243

   (4) https://github.com/python/cpython/issues/95573

   (5) 
https://github.com/python/cpython/tree/3.13/Lib/test/test_asyncio/test_ssl.py

   (6) https://github.com/python/cpython/issues/95280

   (7) https://github.com/python/cpython/issues/95212

   (8) https://github.com/python/cpython/issues/95218

   (9) https://github.com/python/cpython/issues/93963

   (10) https://github.com/python/cpython/issues/94675

   (11) https://github.com/python/cpython/issues/91330

   (12) https://github.com/python/cpython/issues/94208

   (13) https://github.com/python/cpython/issues/94315

   (14) https://github.com/python/cpython/issues/54781

   (15) https://github.com/python/cpython/issues/93839

   (16) https://github.com/python/cpython/issues/93951

   (17) https://github.com/python/cpython/issues/93957

   (18) https://github.com/python/cpython/issues/93884

   (19) https://github.com/python/cpython/issues/93852

   (20) https://github.com/python/cpython/issues/93353

   (21) https://github.com/python/cpython/issues/84461

   (22) https://github.com/python/cpython/issues/93616

   (23) https://github.com/python/cpython/issues/93575

   (24) https://github.com/python/cpython/issues/90473

   (25) https://github.com/python/cpython/issues/90473

   (26) https://github.com/python/cpython/issues/57539

   (27) https://github.com/python/cpython/issues/90473

   (28) https://github.com/python/cpython/issues/89858

   (29) https://github.com/python/cpython/issues/92886

   (30) https://github.com/python/cpython/issues/92886

   (31) https://github.com/python/cpython/issues/92886

   (32) https://github.com/python/cpython/issues/92886

   (33) https://github.com/python/cpython/issues/92886

   (34) https://github.com/python/cpython/issues/92670

   (35) https://github.com/python/cpython/issues/92514

   (36) https://bugs.python.org/issue?@action=redirect&bpo=47016


File: python.info,  Node: Construção<30>,  Next: Windows<26>,  Prev: Testes<28>,  Up: Python 3 12 0 alpha 1

1.23.34.24 Construção
.....................

   - gh-96761(1): Fix the build process of clang compiler for
     ‘_bootstrap_python’ if LTO optimization is applied.  Patch by
     Matthias Görgens and Donghee Na.

   - gh-96883(2): ‘wasm32-emscripten’ builds for browsers now include
     *note concurrent.futures: 21. for *note asyncio: a. and *note
     unittest.mock: 107.

   - gh-85936(3): CPython now uses the ThinLTO option as the default
     policy if the Clang compiler accepts the flag.  Patch by Donghee
     Na.

   - gh-96729(4): Ensure that Windows releases built with
     ‘Tools\msi\buildrelease.bat’ are upgradable to and from official
     Python releases.

   - gh-96269(5): Shared module targets now depend on new ‘MODULE_DEPS’
     variable, which includes ‘EXPORTSYMS’.  This fixes a build order
     issue on unsupported AIX platform.

   - gh-84461(6): ‘wasm32-emscripten’ platform no longer builds *note
     resource: bc. module, *note getresuid(): 135a, *note getresgid():
     1359, and their setters.  The APIs are stubs and not functional.

   - gh-95973(7): Add a new ‘--with-dsymutil’ configure option to link
     debug information in macOS. Patch by Pablo Galindo.

   - gh-90536(8): Use the BOLT post-link optimizer to improve
     performance, particularly on medium-to-large applications.

   - gh-93744(9): Remove the ‘configure --with-cxx-main’ build option:
     it didn’t work for many years.  Remove the ‘MAINCC’ variable from
     ‘configure’ and ‘Makefile’.  Patch by Victor Stinner.

   - gh-94801(10): Fix a regression in ‘configure’ script that caused
     some header checks to ignore custom ‘CPPFLAGS’.  The regression was
     introduced in gh-94802(11).

   - gh-95145(12): wasm32-wasi builds no longer depend on WASIX’s
     pthread stubs.  Python now has its own stubbed pthread API.

   - gh-95174(13): Python now detects missing ‘dup’ function in WASI and
     works around some missing *note errno: 57, *note select: c1, and
     *note socket: cc. constants.

   - gh-95174(14): Python now skips missing *note socket: cc. functions
     and methods on WASI. WASI can only create sockets from existing fd
     / accept and has no netdb.

   - gh-95085(15): Platforms ‘wasm32-unknown-emscripten’ and
     ‘wasm32-unknown-wasi’ have been promoted to PEP 11(16) tier 3
     platform support.

   - gh-94847(17): Fixed ‘_decimal’ module build issue on GCC when
     compiling with LTO and pydebug.  Debug builds no longer force
     inlining of functions.

   - gh-94841(18): Fix the possible performance regression of *note
     PyObject_Free(): c80. compiled with MSVC version 1932.

   - gh-94801(19): ‘configure’ now uses custom flags like ‘ZLIB_CFLAGS’
     and ‘ZLIB_LIBS’ when searching for headers and libraries.

   - gh-94773(20): ‘deepfreeze.py’ now supports code object with
     frozensets that contain incompatible, unsortable types.

   - gh-94682(21): Build and test with OpenSSL 1.1.1q

   - gh-90005(22): Dependencies of *note readline: ba. and *note curses:
     2b. module are now detected in ‘configure’ script with
     ‘pkg-config’.  Only ‘ncurses’ / ‘ncursesw’ are detected
     automatically.  The old ‘curses’ library is not configured
     automatically.  Workaround for missing ‘termcap’ or ‘tinfo’ library
     has been removed.

   - gh-90005(23): Fix building ‘_ctypes’ extension without
     ‘pkg-config’.

   - gh-90005(24): ‘_dbm’ module dependencies are now detected by
     configure.

   - gh-94404(25): ‘makesetup’ now works around an issue with sed on
     macOS and uses correct CFLAGS for object files that end up in a
     shared extension.  Module CFLAGS are used before
     PY_STDMODULE_CFLAGS to avoid clashes with system headers.

   - gh-93939(26): C extension modules are now built by ‘configure’ and
     ‘make’ instead of ‘distutils’ and ‘setup.py’.

   - gh-93939(27): The ‘2to3’, ‘idle’, and ‘pydoc’ scripts are now
     generated and installed by ‘Makefile’ instead of ‘setup.py’.

   - gh-94280(28): Updated pegen regeneration script on Windows to find
     and use Python 3.9 or higher.  Prior to this, pegen regeneration
     already required 3.9 or higher, but the script may have used lower
     versions of Python.

   - gh-93584(29): Address race condition in ‘Makefile’ when installing
     a PGO build.  All ‘test’ and ‘install’ targets now depend on ‘all’
     target.

   - gh-93491(30): ‘configure’ now detects and reports PEP 11(31)
     support tiers.

   - gh-69093(32): Fix ‘Modules/Setup.stdlib.in’ rule for ‘_sqlite3’
     extension.

   - gh-93207(33): ‘va_start()’ with two parameters, like
     ‘va_start(args, format),’ is now required to build Python.
     ‘va_start()’ is no longer called with a single parameter.  Patch by
     Kumar Aditya.

   - gh-93202(34): Python now always use the ‘%zu’ and ‘%zd’ printf
     formats to format a ‘size_t’ or ‘Py_ssize_t’ number.  Building
     Python 3.12 requires a C11 compiler, so these printf formats are
     now always supported.  Patch by Victor Stinner.

   - gh-90473(35): Disable pymalloc and increase stack size on
     ‘wasm32-wasi’.

   - bpo-34449(36): Drop invalid compiler switch ‘-fPIC’ for HP aCC on
     HP-UX. Patch by Michael Osipov.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/96761

   (2) https://github.com/python/cpython/issues/96883

   (3) https://github.com/python/cpython/issues/85936

   (4) https://github.com/python/cpython/issues/96729

   (5) https://github.com/python/cpython/issues/96269

   (6) https://github.com/python/cpython/issues/84461

   (7) https://github.com/python/cpython/issues/95973

   (8) https://github.com/python/cpython/issues/90536

   (9) https://github.com/python/cpython/issues/93744

   (10) https://github.com/python/cpython/issues/94801

   (11) https://github.com/python/cpython/issues/94802

   (12) https://github.com/python/cpython/issues/95145

   (13) https://github.com/python/cpython/issues/95174

   (14) https://github.com/python/cpython/issues/95174

   (15) https://github.com/python/cpython/issues/95085

   (16) https://peps.python.org/pep-0011/

   (17) https://github.com/python/cpython/issues/94847

   (18) https://github.com/python/cpython/issues/94841

   (19) https://github.com/python/cpython/issues/94801

   (20) https://github.com/python/cpython/issues/94773

   (21) https://github.com/python/cpython/issues/94682

   (22) https://github.com/python/cpython/issues/90005

   (23) https://github.com/python/cpython/issues/90005

   (24) https://github.com/python/cpython/issues/90005

   (25) https://github.com/python/cpython/issues/94404

   (26) https://github.com/python/cpython/issues/93939

   (27) https://github.com/python/cpython/issues/93939

   (28) https://github.com/python/cpython/issues/94280

   (29) https://github.com/python/cpython/issues/93584

   (30) https://github.com/python/cpython/issues/93491

   (31) https://peps.python.org/pep-0011/

   (32) https://github.com/python/cpython/issues/69093

   (33) https://github.com/python/cpython/issues/93207

   (34) https://github.com/python/cpython/issues/93202

   (35) https://github.com/python/cpython/issues/90473

   (36) https://bugs.python.org/issue?@action=redirect&bpo=34449


File: python.info,  Node: Windows<26>,  Next: macOS<19>,  Prev: Construção<30>,  Up: Python 3 12 0 alpha 1

1.23.34.25 Windows
..................

   - gh-98360(1): Fixes *note multiprocessing: 94. spawning child
     processes on Windows from a virtual environment to ensure that
     child processes that also use *note multiprocessing: 94. to spawn
     more children will recognize that they are in a virtual
     environment.

   - gh-98414(2): Fix ‘py.exe’ launcher handling of ‘-V:<COMPANY>/’
     option when default preferences have been set in environment
     variables or configuration files.

   - gh-97728(3): Fix possible crashes caused by the use of
     uninitialized variables when pass invalid arguments in *note
     os.system(): 14a5. on Windows and in Windows-specific modules (like
     ‘winreg’).

   - gh-90989(4): Made *note Inicializador Python para Windows: 5be.
     install per-user by default (unless an all users install already
     exists), and clarify some text in the installer.

   - gh-97649(5): The ‘Tools’ directory is no longer installed on
     Windows

   - gh-96965(6): Update libffi to 3.4.3

   - gh-96577(7): Fixes a potential buffer overrun in ‘msilib’.

   - gh-96559(8): Fixes the Windows launcher not using the compatible
     interpretation of default tags found in configuration files when no
     tag was passed to the command.

   - gh-94781(9): Fix ‘pcbuild.proj’ to clean previous instances of
     output files in ‘Python\deepfreeze’ and ‘Python\frozen_modules’
     directories on Windows.  Patch by Charlie Zhao.

   - gh-89545(10): Updates *note platform: aa. code getting the Windows
     version to use native Windows Management Instrumentation (WMI)
     queries to determine OS version, type, and architecture.

   - gh-95733(11): Make certain requirements of the Windows Store
     package optional to allow installing on earlier updates of Windows.

   - gh-95656(12): Enable the *note enable_load_extension(): 841. *note
     sqlite3: cf. API.

   - gh-95587(13): Fixes some issues where the Windows installer would
     incorrectly detect certain features of an existing install when
     upgrading.

   - gh-94399(14): Restores the behaviour of *note Inicializador Python
     para Windows: 5be. for ‘/usr/bin/env’ shebang lines, which will now
     search ‘PATH’ for an executable matching the given command.  If
     none is found, the usual search process is used.

   - gh-95445(15): Fixes the unsuccessful removal of the HTML document
     directory when uninstalling with Windows msi.

   - gh-95359(16): Fix *note Inicializador Python para Windows: 5be.
     handling of ‘py.ini’ commands (it was incorrectly expecting a ‘py_’
     prefix on keys) and crashes when reading per-user configuration
     file.

   - gh-95285(17): Fix *note Inicializador Python para Windows: 5be.
     handling of command lines where it is only passed a short
     executable name.

   - gh-90844(18): Allow virtual environments to correctly launch when
     they have spaces in the path.

   - gh-94772(19): Fix incorrect handling of shebang lines in py.exe
     launcher

   - gh-94018(20): *note zipfile: 131. will now remove trailing spaces
     from path components when extracting files on Windows.

   - gh-93824(21): Drag and drop of files onto Python files in Windows
     Explorer has been enabled for Windows ARM64.

   - gh-43414(22): *note os.get_terminal_size(): 1141. now attempts to
     read the size from any provided handle, rather than only supporting
     file descriptors 0, 1 and 2.

   - gh-92817(23): Ensures that ‘py.exe’ will prefer an active virtual
     environment over default tags specified with environment variables
     or through a ‘py.ini’ file.

   - gh-92984(24): Explicitly disable incremental linking for non-Debug
     builds

   - gh-92841(25): *note asyncio: a. no longer throws ‘RuntimeError:
     Event loop is closed’ on interpreter exit after asynchronous socket
     activity.  Patch by Oleg Iarygin.

   - bpo-46907(26): Update Windows installer to use SQLite 3.38.4.

   - gh-91061(27): Accept os.PathLike for the argument to
     winsound.PlaySound

   - bpo-42658(28): Support native Windows case-insensitive path
     comparisons by using ‘LCMapStringEx’ instead of *note str.lower():
     1901. in ‘ntpath.normcase()’.  Add ‘LCMapStringEx’ to the ‘_winapi’
     module.

   - bpo-38704(29): Prevent installation on unsupported Windows
     versions.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98360

   (2) https://github.com/python/cpython/issues/98414

   (3) https://github.com/python/cpython/issues/97728

   (4) https://github.com/python/cpython/issues/90989

   (5) https://github.com/python/cpython/issues/97649

   (6) https://github.com/python/cpython/issues/96965

   (7) https://github.com/python/cpython/issues/96577

   (8) https://github.com/python/cpython/issues/96559

   (9) https://github.com/python/cpython/issues/94781

   (10) https://github.com/python/cpython/issues/89545

   (11) https://github.com/python/cpython/issues/95733

   (12) https://github.com/python/cpython/issues/95656

   (13) https://github.com/python/cpython/issues/95587

   (14) https://github.com/python/cpython/issues/94399

   (15) https://github.com/python/cpython/issues/95445

   (16) https://github.com/python/cpython/issues/95359

   (17) https://github.com/python/cpython/issues/95285

   (18) https://github.com/python/cpython/issues/90844

   (19) https://github.com/python/cpython/issues/94772

   (20) https://github.com/python/cpython/issues/94018

   (21) https://github.com/python/cpython/issues/93824

   (22) https://github.com/python/cpython/issues/43414

   (23) https://github.com/python/cpython/issues/92817

   (24) https://github.com/python/cpython/issues/92984

   (25) https://github.com/python/cpython/issues/92841

   (26) https://bugs.python.org/issue?@action=redirect&bpo=46907

   (27) https://github.com/python/cpython/issues/91061

   (28) https://bugs.python.org/issue?@action=redirect&bpo=42658

   (29) https://bugs.python.org/issue?@action=redirect&bpo=38704


File: python.info,  Node: macOS<19>,  Next: IDLE<19>,  Prev: Windows<26>,  Up: Python 3 12 0 alpha 1

1.23.34.26 macOS
................

   - gh-97897(1): The macOS 13 SDK includes support for the ‘mkfifoat’
     and ‘mknodat’ system calls.  Using the ‘dir_fd’ option with either
     *note os.mkfifo(): db8. or *note os.mknod(): db9. could result in a
     segfault if cpython is built with the macOS 13 SDK but run on an
     earlier version of macOS. Prevent this by adding runtime support
     for detection of these system calls (“weaklinking”) as is done for
     other newer syscalls on macOS.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/97897


File: python.info,  Node: IDLE<19>,  Next: Ferramentas/Demos<17>,  Prev: macOS<19>,  Up: Python 3 12 0 alpha 1

1.23.34.27 IDLE
...............

   - gh-97527(1): Fix a bug in the previous bugfix that caused IDLE to
     not start when run with 3.10.8, 3.12.0a1, and at least Microsoft
     Python 3.10.2288.0 installed without the Lib/test package.  3.11.0
     was never affected.

   - gh-65802(2): Document handling of extensions in Save As dialogs.

   - gh-95191(3): Include prompts when saving Shell (interactive input
     and output).

   - gh-95511(4): Fix the Shell context menu copy-with-prompts bug of
     copying an extra line when one selects whole lines.

   - gh-95471(5): In the Edit menu, move ‘Select All’ and add a new
     separator.

   - gh-95411(6): Enable using IDLE’s module browser with .pyw files.

   - gh-89610(7): Add .pyi as a recognized extension for IDLE on macOS.
     This allows opening stub files by double clicking on them in the
     Finder.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/97527

   (2) https://github.com/python/cpython/issues/65802

   (3) https://github.com/python/cpython/issues/95191

   (4) https://github.com/python/cpython/issues/95511

   (5) https://github.com/python/cpython/issues/95471

   (6) https://github.com/python/cpython/issues/95411

   (7) https://github.com/python/cpython/issues/89610


File: python.info,  Node: Ferramentas/Demos<17>,  Next: API C<28>,  Prev: IDLE<19>,  Up: Python 3 12 0 alpha 1

1.23.34.28 Ferramentas/Demos
............................

   - gh-68686(1): Remove ptags and eptags scripts.

   - gh-97681(2): Remove the ‘Tools/demo/’ directory which contained old
     demo scripts.  A copy can be found in the old-demos project(3).
     Patch by Victor Stinner.

   - gh-97669(4): Remove outdated example scripts of the
     ‘Tools/scripts/’ directory.  A copy can be found in the old-demos
     project(5).  Patch by Victor Stinner.

   - gh-95853(6): The ‘wasm_build.py’ script now pre-builds Emscripten
     ports, checks for broken EMSDK versions, and warns about pkg-config
     env vars.

   - gh-95853(7): A nova ferramenta ‘Tools/wasm/wasm_builder.py’
     automatiza as etapas de configuração, compilação e teste para a
     construção do CPython em plataformas WebAssembly.

   - gh-95731(8): Fix handling of module docstrings in
     ‘Tools/i18n/pygettext.py’.

   - gh-93939(9): Add script ‘Tools/scripts/check_modules.py’ to check
     and validate builtin and shared extension modules.  The script also
     handles ‘Modules/Setup’ and will eventually replace ‘setup.py’.

   - gh-94538(10): Fix Argument Clinic output to custom file
     destinations.  Patch by Erlend E. Aasland.

   - gh-94430(11): Allow parameters named ‘module’ and ‘self’ with
     custom C names in Argument Clinic.  Patch by Erlend E. Aasland

   - gh-86087(12): The ‘Tools/scripts/parseentities.py’ script used to
     parse HTML4 entities has been removed.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/68686

   (2) https://github.com/python/cpython/issues/97681

   (3) https://github.com/gvanrossum/old-demos

   (4) https://github.com/python/cpython/issues/97669

   (5) https://github.com/gvanrossum/old-demos

   (6) https://github.com/python/cpython/issues/95853

   (7) https://github.com/python/cpython/issues/95853

   (8) https://github.com/python/cpython/issues/95731

   (9) https://github.com/python/cpython/issues/93939

   (10) https://github.com/python/cpython/issues/94538

   (11) https://github.com/python/cpython/issues/94430

   (12) https://github.com/python/cpython/issues/86087


File: python.info,  Node: API C<28>,  Prev: Ferramentas/Demos<17>,  Up: Python 3 12 0 alpha 1

1.23.34.29 API C
................

   - gh-98393(1): The *note PyUnicode_FSDecoder(): 577. function no
     longer accepts bytes-like paths, like *note bytearray: 2ea. and
     *note memoryview: 2eb. types: only the exact *note bytes: 1c2. type
     is accepted for bytes strings.  Patch by Victor Stinner.

   - gh-91051(2): Add *note PyType_Watch(): 565. and related APIs to
     allow callbacks on *note PyType_Modified(): 1906.

   - gh-95756(3): Lazily create and cache ‘co_’ attributes for better
     performance for code getters.

   - gh-96512(4): Configuration for the *note integer string conversion
     length limitation: 5f5. now lives in the PyConfig C API struct.

   - gh-95589(5): Extensions classes that set ‘tp_dictoffset’ and
     ‘tp_weaklistoffset’ lose the support for multiple inheritance, but
     are now safe.  Extension classes should use *note
     Py_TPFLAGS_MANAGED_DICT: 36b. and *note Py_TPFLAGS_MANAGED_WEAKREF:
     55a. instead.

   - gh-95781(6): An unrecognized format character in *note
     PyUnicode_FromFormat(): 38a. and *note PyUnicode_FromFormatV():
     574. now sets a *note SystemError: 575.  In previous versions it
     caused all the rest of the format string to be copied as-is to the
     result string, and any extra arguments discarded.

   - gh-92678(7): Restore the 3.10 behavior for multiple inheritance of
     C extension classes that store their dictionary at the end of the
     struct.

   - gh-92678(8): Support C extensions using managed dictionaries by
     setting the ‘Py_TPFLAGS_MANAGED_DICT’ flag.

   - gh-93274(9): API for implementing vectorcall (*note
     Py_TPFLAGS_HAVE_VECTORCALL: 554, *note PyVectorcall_NARGS(): 555.
     and *note PyVectorcall_Call(): 556.) was added to the limited API
     and stable ABI.

   - gh-95504(10): Fix sign placement when specifying width or precision
     in *note PyUnicode_FromFormat(): 38a. and *note
     PyUnicode_FromFormatV(): 574.  Patch by Philip Georgi.

   - gh-93012(11): The *note Py_TPFLAGS_HAVE_VECTORCALL: 554. flag is
     now removed from a class when the class’s *note __call__(): 558.
     method is reassigned.  This makes vectorcall safe to use with
     mutable types (i.e.  heap types without the ‘immutable’ flag).
     Mutable types that do not override *note tp_call: 559. now inherit
     the *note Py_TPFLAGS_HAVE_VECTORCALL: 554. flag.

   - gh-95388(12): Creating *note immutable types: 3c2. with mutable
     bases is deprecated and is planned to be disabled in Python 3.14.

   - gh-92678(13): Adds unstable C-API functions
     ‘_PyObject_VisitManagedDict’ and ‘_PyObject_ClearManagedDict’ to
     allow C extensions to allow the VM to manage their object’s
     dictionaries.

   - gh-94936(14): Added *note PyCode_GetVarnames(): 779, *note
     PyCode_GetCellvars(): 77a. and *note PyCode_GetFreevars(): 77b. for
     accessing ‘co_varnames’, ‘co_cellvars’ and ‘co_freevars’
     respectively via the C API.

   - gh-94930(15): Fix ‘SystemError’ raised when *note
     PyArg_ParseTupleAndKeywords(): 383. is used with ‘#’ in ‘(...)’ but
     without ‘PY_SSIZE_T_CLEAN’ defined.

   - gh-94731(16): Python again uses C-style casts for most casting
     operations when compiled with C++.  This may trigger compiler
     warnings, if they are enabled with e.g.  ‘-Wold-style-cast’ or
     ‘-Wzero-as-null-pointer-constant’ options for ‘g++’.

   - gh-93937(17): The following frame functions and type are now
     directly available with ‘#include <Python.h>’, it’s no longer
     needed to add ‘#include <frameobject.h>’:

        * *note PyFrame_Check(): 785.

        * *note PyFrame_GetBack(): 786.

        * *note PyFrame_GetBuiltins(): 76b.

        * *note PyFrame_GetGenerator(): 76c.

        * *note PyFrame_GetGlobals(): 76d.

        * *note PyFrame_GetLasti(): 76e.

        * *note PyFrame_GetLocals(): 41f.

        * *note PyFrame_Type: 787.

     Patch por Victor Stinner.

   - gh-91321(18): Fix the compatibility of the Python C API with C++
     older than C++11.  Patch by Victor Stinner.

   - gh-91731(19): Avoid defining the ‘static_assert’ when compiling
     with C++ 11, where this is a keyword and redefining it can lead to
     undefined behavior.  Patch by Pablo Galindo

   - gh-89546(20): *note PyType_FromMetaclass(): 550. (and other
     ‘PyType_From*’ functions) now check that offsets and the base
     class’s *note tp_basicsize: 98e. fit in the new class’s
     ‘tp_basicsize’.

   - gh-93503(21): Add two new public functions to the public C-API,
     *note PyEval_SetProfileAllThreads(): 55f. and *note
     PyEval_SetTraceAllThreads(): 422, that allow to set tracing and
     profiling functions in all running threads in addition to the
     calling one.  Also, two analogous functions to the *note threading:
     ed. module (*note threading.setprofile_all_threads(): 4c9. and
     *note threading.settrace_all_threads(): 4c8.) that allow to do the
     same from Python.  Patch by Pablo Galindo

   - gh-93442(22): Add C++ overloads for _Py_CAST_impl() to handle
     0/NULL. This will allow C++ extensions that pass 0 or NULL to
     macros using _Py_CAST() to continue to compile.

   - gh-93466(23): Slot IDs in PyType_Spec may not be repeated.  The
     documentation was updated to mention this.  For some cases of
     repeated slots, PyType_FromSpec and related functions will now
     raise an exception.

   - gh-92898(24): Fix C++ compiler warnings when casting function
     arguments to ‘PyObject*’.  Patch by Serge Guelton.

   - gh-93103(25): Deprecate global configuration variables, like *note
     Py_IgnoreEnvironmentFlag: 3d8, in the documentation: the *note
     Py_InitializeFromConfig(): 3c5. API should be instead.  Patch by
     Victor Stinner.

   - gh-77782(26): Deprecate global configuration variable like *note
     Py_IgnoreEnvironmentFlag: 3d8.: the *note
     Py_InitializeFromConfig(): 3c5. API should be instead.  Patch by
     Victor Stinner.

   - gh-92913(27): Ensures changes to *note
     PyConfig.module_search_paths: 3a2. are ignored unless *note
     PyConfig.module_search_paths_set: 5ef. is set

   - gh-92781(28): Avoid mixing declarations and code in the C API to
     fix the compiler warning: “ISO C90 forbids mixed declarations and
     code” [-Werror=declaration-after-statement].  Patch by Victor
     Stinner.

   - gh-92651(29): Remove the ‘token.h’ header file.  There was never
     any public tokenizer C API. The ‘token.h’ header file was only
     designed to be used by Python internals.  Patch by Victor Stinner.

   - gh-92536(30): Remove legacy Unicode APIs based on ‘Py_UNICODE*’.

   - gh-85858(31): Remove the ‘PyUnicode_InternImmortal()’ function and
     the ‘SSTATE_INTERNED_IMMORTAL’ macro.  Patch by Victor Stinner.

   - gh-92193(32): Add new function *note PyFunction_SetVectorcall():
     560. to the C API which sets the vectorcall field of a given *note
     PyFunctionObject: 561.

     Warning: extensions using this API must preserve the behavior of
     the unaltered function!

   - gh-59121(33): Fixed an assert that prevented ‘PyRun_InteractiveOne’
     from providing tracebacks when parsing from the provided FD.

   - bpo-45383(34): The *note PyType_FromSpec(): 57d. API will now find
     and use a metaclass based on the provided bases.  An error will be
     raised if there is a metaclass conflict.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/98393

   (2) https://github.com/python/cpython/issues/91051

   (3) https://github.com/python/cpython/issues/95756

   (4) https://github.com/python/cpython/issues/96512

   (5) https://github.com/python/cpython/issues/95589

   (6) https://github.com/python/cpython/issues/95781

   (7) https://github.com/python/cpython/issues/92678

   (8) https://github.com/python/cpython/issues/92678

   (9) https://github.com/python/cpython/issues/93274

   (10) https://github.com/python/cpython/issues/95504

   (11) https://github.com/python/cpython/issues/93012

   (12) https://github.com/python/cpython/issues/95388

   (13) https://github.com/python/cpython/issues/92678

   (14) https://github.com/python/cpython/issues/94936

   (15) https://github.com/python/cpython/issues/94930

   (16) https://github.com/python/cpython/issues/94731

   (17) https://github.com/python/cpython/issues/93937

   (18) https://github.com/python/cpython/issues/91321

   (19) https://github.com/python/cpython/issues/91731

   (20) https://github.com/python/cpython/issues/89546

   (21) https://github.com/python/cpython/issues/93503

   (22) https://github.com/python/cpython/issues/93442

   (23) https://github.com/python/cpython/issues/93466

   (24) https://github.com/python/cpython/issues/92898

   (25) https://github.com/python/cpython/issues/93103

   (26) https://github.com/python/cpython/issues/77782

   (27) https://github.com/python/cpython/issues/92913

   (28) https://github.com/python/cpython/issues/92781

   (29) https://github.com/python/cpython/issues/92651

   (30) https://github.com/python/cpython/issues/92536

   (31) https://github.com/python/cpython/issues/85858

   (32) https://github.com/python/cpython/issues/92193

   (33) https://github.com/python/cpython/issues/59121

   (34) https://bugs.python.org/issue?@action=redirect&bpo=45383


File: python.info,  Node: Python 3 11 0 beta 1,  Next: Python 3 11 0 alpha 7,  Prev: Python 3 12 0 alpha 1,  Up: Changelog

1.23.35 Python 3.11.0 beta 1
----------------------------

'Data de lançamento: 2022-05-06'

* Menu:

* Segurança: Segurança<24>.
* Núcleo e embutidos: Núcleo e embutidos<60>.
* Biblioteca: Biblioteca<63>.
* Núcleo e embutidos: Núcleo e embutidos<61>.
* Construção: Construção<31>.
* Núcleo e embutidos: Núcleo e embutidos<62>.
* Biblioteca: Biblioteca<64>.
* Documentação: Documentação<25>.
* Testes: Testes<29>.
* Construção: Construção<32>.
* Windows: Windows<27>.
* macOS: macOS<20>.
* Ferramentas/Demos: Ferramentas/Demos<18>.
* API C: API C<29>.


File: python.info,  Node: Segurança<24>,  Next: Núcleo e embutidos<60>,  Up: Python 3 11 0 beta 1

1.23.35.1 Segurança
...................

   - gh-57684(1): Add the *note -P: 5a4. command line option and the
     *note PYTHONSAFEPATH: 5a5. environment variable to not prepend a
     potentially unsafe path to *note sys.path: 3b4.  Patch by Victor
     Stinner.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/57684


File: python.info,  Node: Núcleo e embutidos<60>,  Next: Biblioteca<63>,  Prev: Segurança<24>,  Up: Python 3 11 0 beta 1

1.23.35.2 Núcleo e embutidos
............................

   - gh-89519(1): Chaining classmethod descriptors (introduced in
     bpo-19072(2)) is deprecated.  It can no longer be used to wrap
     other descriptors such as property().  The core design of this
     feature was flawed, and it caused a number of downstream problems.

   - gh-92345(3): ‘pymain_run_python()’ now imports ‘readline’ and
     ‘rlcompleter’ before sys.path is extended to include the current
     working directory of an interactive interpreter.  Non-interactive
     interpreters are not affected.

   - bpo-43857(4): Improve the *note AttributeError: 34b. message when
     deleting a missing attribute.  Patch by Géry Ogam.

   - gh-92245(5): Make sure that PEP 523 is respected in all cases.  In
     3.11a7, specialization may have prevented Python-to-Python calls
     respecting PEP 523.

   - gh-92203(6): Add a closure keyword-only parameter to *note exec():
     17f.  It can only be specified when exec-ing a code object that
     uses free variables.  When specified, it must be a tuple, with
     exactly the number of cell variables referenced by the code object.
     closure has a default value of ‘None’, and it must be ‘None’ if the
     code object doesn’t refer to any free variables.

   - gh-91173(7): Disable frozen modules in debug builds.  Patch by
     Kumar Aditya.

   - gh-92114(8): Improve error message when subscript a type with
     ‘__class_getitem__’ set to ‘None’.

   - gh-92112(9): Fix crash triggered by an evil custom ‘mro()’ on a
     metaclass.

   - gh-92063(10): The ‘PRECALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS’
     instruction now ensures methods are called only on objects of the
     correct type.

   - gh-92031(11): Deoptimize statically allocated code objects during
     ‘Py_FINALIZE()’ so that future ‘_PyCode_Quicken’ calls always start
     with unquickened code.

   - gh-92036(12): Fix a crash in subinterpreters related to the garbage
     collector.  When a subinterpreter is deleted, untrack all objects
     tracked by its GC. To prevent a crash in deallocator functions
     expecting objects to be tracked by the GC, leak a strong reference
     to these objects on purpose, so they are never deleted and their
     deallocator functions are not called.  Patch by Victor Stinner.

   - gh-92032(13): The interpreter can now autocomplete soft keywords,
     as of now ‘match’, ‘case’, and ‘_’ (wildcard pattern) from PEP
     634(14).

   - gh-87999(15): The warning emitted by the Python parser for a
     numeric literal immediately followed by keyword has been changed
     from deprecation warning to syntax warning.

   - gh-91869(16): Fix an issue where specialized opcodes with extended
     arguments could produce incorrect tracing output or lead to
     assertion failures.

   - gh-91603(17): Speed up *note types.UnionType: 63a. instantiation.
     Based on patch provided by Yurii Karabas.

   - gh-89373(18): If Python is built in debug mode, Python now ensures
     that deallocator functions leave the current exception unchanged.
     Patch by Victor Stinner.

   - gh-91632(19): Fix a minor memory leak at exit: release the memory
     of the ‘generic_alias_iterator’ type.  Patch by Donghee Na.

   - gh-81548(20): Octal escapes with value larger than ‘0o377’ now
     produce a *note DeprecationWarning: 1a5.  In a future Python
     version they will be a *note SyntaxWarning: 466. and eventually a
     *note SyntaxError: 18d.

   - bpo-43950(21): Use a single compact table for line starts, ends and
     column offsets.  Reduces memory consumption for location info by
     half

   - gh-91102(22): Use Argument Clinic for ‘EncodingMap’.  Patch by Oleg
     Iarygin.

   - gh-91636(23): Fixed a crash in a garbage-collection edge-case, in
     which a ‘PyFunction_Type.tp_clear’ function could leave a python
     function object in an inconsistent state.

   - gh-91603(24): Speed up *note isinstance(): 442. and *note
     issubclass(): 7c2. checks for *note types.UnionType: 63a.  Patch by
     Yurii Karabas.

   - gh-91625(25): Fixed a bug in which adaptive opcodes ignored any
     preceding ‘EXTENDED_ARG’s on specialization failure.

   - gh-78607(26): The LLTRACE special build now looks for the name
     ‘__lltrace__’ defined in module globals, rather than the name
     ‘__ltrace__’, which had been introduced as a typo.

   - gh-91576(27): Speed up iteration of ascii strings by 50%.  Patch by
     Kumar Aditya.

   - gh-89279(28): Improve interpreter performance on Windows by
     inlining a few specific macros.

   - gh-91502(29): Add a new ‘_PyFrame_IsEntryFrame()’ API function, to
     check if a *note PyFrameObject: 789. is an entry frame.  Patch by
     Pablo Galindo.

   - gh-91266(30): Refactor the ‘bytearray’ strip methods ‘strip’,
     ‘lstrip’ and ‘rstrip’ to use a common implementation.

   - gh-91479(31): Replaced the ‘__note__’ field of *note BaseException:
     5bb. (added in an earlier version of 3.11) with the final design of
     PEP 678(32).  Namely, *note BaseException: 5bb. gets an
     ‘add_note()’ method, and its ‘__notes__’ field is created when
     necessary.

   - gh-46055(33): Speed up right shift of negative integers, by
     removing unnecessary creation of temporaries.  Original patch by
     Xinhang Xu, reworked by Mark Dickinson.

   - gh-91462(34): Make the interpreter’s low-level tracing (lltrace)
     feature output more readable by displaying opcode names (rather
     than just numbers), and by displaying stack contents before each
     opcode.

   - gh-89455(35): Fixed an uninitialized bool value in the traceback
     printing code path that was introduced by the initial bpo-45292(36)
     exception groups work.

   - gh-91421(37): Fix a potential integer overflow in _Py_DecodeUTF8Ex.

   - gh-91428(38): Add ‘static const char *const _PyOpcode_OpName[256] =
     {...};’ to ‘opcode.h’ for debug builds to assist in debugging the
     Python interpreter.  It is now more convenient to make various
     forms of debugging output more human-readable by including opcode
     names rather than just the corresponding decimal digits.

   - bpo-47120(39): Make *note POP_JUMP_IF_TRUE: 17e1, *note
     POP_JUMP_IF_FALSE: 17e2, *note POP_JUMP_IF_NONE: 190a. and *note
     POP_JUMP_IF_NOT_NONE: 190b. virtual, mapping to new relative jump
     opcodes.

   - bpo-45317(40): Add internal documentation explaining design of new
     (for 3.11) frame stack.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/89519

   (2) https://bugs.python.org/issue?@action=redirect&bpo=19072

   (3) https://github.com/python/cpython/issues/92345

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43857

   (5) https://github.com/python/cpython/issues/92245

   (6) https://github.com/python/cpython/issues/92203

   (7) https://github.com/python/cpython/issues/91173

   (8) https://github.com/python/cpython/issues/92114

   (9) https://github.com/python/cpython/issues/92112

   (10) https://github.com/python/cpython/issues/92063

   (11) https://github.com/python/cpython/issues/92031

   (12) https://github.com/python/cpython/issues/92036

   (13) https://github.com/python/cpython/issues/92032

   (14) https://peps.python.org/pep-0634/

   (15) https://github.com/python/cpython/issues/87999

   (16) https://github.com/python/cpython/issues/91869

   (17) https://github.com/python/cpython/issues/91603

   (18) https://github.com/python/cpython/issues/89373

   (19) https://github.com/python/cpython/issues/91632

   (20) https://github.com/python/cpython/issues/81548

   (21) https://bugs.python.org/issue?@action=redirect&bpo=43950

   (22) https://github.com/python/cpython/issues/91102

   (23) https://github.com/python/cpython/issues/91636

   (24) https://github.com/python/cpython/issues/91603

   (25) https://github.com/python/cpython/issues/91625

   (26) https://github.com/python/cpython/issues/78607

   (27) https://github.com/python/cpython/issues/91576

   (28) https://github.com/python/cpython/issues/89279

   (29) https://github.com/python/cpython/issues/91502

   (30) https://github.com/python/cpython/issues/91266

   (31) https://github.com/python/cpython/issues/91479

   (32) https://peps.python.org/pep-0678/

   (33) https://github.com/python/cpython/issues/46055

   (34) https://github.com/python/cpython/issues/91462

   (35) https://github.com/python/cpython/issues/89455

   (36) https://bugs.python.org/issue?@action=redirect&bpo=45292

   (37) https://github.com/python/cpython/issues/91421

   (38) https://github.com/python/cpython/issues/91428

   (39) https://bugs.python.org/issue?@action=redirect&bpo=47120

   (40) https://bugs.python.org/issue?@action=redirect&bpo=45317


File: python.info,  Node: Biblioteca<63>,  Next: Núcleo e embutidos<61>,  Prev: Núcleo e embutidos<60>,  Up: Python 3 11 0 beta 1

1.23.35.3 Biblioteca
....................

   - bpo-47197(1): ctypes used to mishandle ‘void’ return types, so that
     for instance a function declared like ‘ctypes.CFUNCTYPE(None,
     ctypes.c_int)’ would be called with signature ‘int f(int)’ instead
     of ‘void f(int)’.  Wasm targets require function pointers to be
     called with the correct signatures so this led to crashes.  The
     problem is now fixed.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=47197


File: python.info,  Node: Núcleo e embutidos<61>,  Next: Construção<31>,  Prev: Biblioteca<63>,  Up: Python 3 11 0 beta 1

1.23.35.4 Núcleo e embutidos
............................

   - bpo-47120(1): Make opcodes ‘JUMP_IF_TRUE_OR_POP’ and
     ‘JUMP_IF_FALSE_OR_POP’ relative rather than absolute.

   - bpo-47177(2): Replace the ‘f_lasti’ member of the internal
     ‘_PyInterpreterFrame’ structure with a ‘prev_instr’ pointer, which
     reduces overhead in the main interpreter loop.  The ‘f_lasti’
     attribute of Python-layer frame objects is preserved for
     backward-compatibility.

   - bpo-46961(3): Integer mod/remainder operations, including the
     three-argument form of *note pow(): 9da, now consistently return
     ints from the global small integer cache when applicable.

   - bpo-46962(4): Classes and functions that unconditionally declared
     their docstrings ignoring the ‘--without-doc-strings’ compilation
     flag no longer do so.

     The classes affected are ‘ctypes.UnionType’, *note
     pickle.PickleBuffer: 15a2, ‘testcapi.RecursingInfinitelyError’, and
     *note types.GenericAlias: 7ed.

     The functions affected are 24 methods in *note ctypes: 2a.

     Patch by Oleg Iarygin.

   - bpo-46942(5): Use Argument Clinic for the *note types.MethodType:
     190e. constructor.  Patch by Oleg Iarygin.

   - bpo-46764(6): Fix wrapping bound methods with @classmethod

   - bpo-43464(7): Optimize *note set.intersection(): 190f. for non-set
     arguments.

   - bpo-46721(8): Optimize *note set.issuperset(): 1910. for non-set
     argument.

   - bpo-46509(9): Add type-specialized versions of the ‘Py_DECREF()’,
     and use them for ‘float’, ‘int’, ‘str’, ‘bool’, and ‘None’ to avoid
     pointer-chasing at runtime where types are known at C compile time.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=47120

   (2) https://bugs.python.org/issue?@action=redirect&bpo=47177

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46961

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46962

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46942

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46764

   (7) https://bugs.python.org/issue?@action=redirect&bpo=43464

   (8) https://bugs.python.org/issue?@action=redirect&bpo=46721

   (9) https://bugs.python.org/issue?@action=redirect&bpo=46509


File: python.info,  Node: Construção<31>,  Next: Núcleo e embutidos<62>,  Prev: Núcleo e embutidos<61>,  Up: Python 3 11 0 beta 1

1.23.35.5 Construção
....................

   - bpo-46045(1): Do not use POSIX semaphores on NetBSD

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46045


File: python.info,  Node: Núcleo e embutidos<62>,  Next: Biblioteca<64>,  Prev: Construção<31>,  Up: Python 3 11 0 beta 1

1.23.35.6 Núcleo e embutidos
............................

   - bpo-36819(1): Fix crashes in built-in encoders with error handlers
     that return position less or equal than the starting position of
     non-encodable characters.

   - bpo-34093(2): ‘marshal.dumps()’ uses ‘FLAG_REF’ for all interned
     strings.  This makes output more deterministic and helps
     reproducible build.

   - bpo-26579(3): Added ‘object.__getstate__’ which provides the
     default implementation of the ‘__getstate__()’ method.

     Copying and pickling instances of subclasses of builtin types
     bytearray, set, frozenset, collections.OrderedDict,
     collections.deque, weakref.WeakSet, and datetime.tzinfo now copies
     and pickles instance attributes implemented as slots.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36819

   (2) https://bugs.python.org/issue?@action=redirect&bpo=34093

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26579


File: python.info,  Node: Biblioteca<64>,  Next: Documentação<25>,  Prev: Núcleo e embutidos<62>,  Up: Python 3 11 0 beta 1

1.23.35.7 Biblioteca
....................

   - gh-87901(1): Add the 'encoding' parameter to *note os.popen(): a91.

   - gh-90997(2): Fix an issue where *note dis: 38. utilities may
     interpret populated inline cache entries as valid instructions.

   - gh-92332(3): Deprecate *note typing.Text: 30b. (removal of the
     class is currently not planned).  Patch by Alex Waygood.

   - gh-78157(4): Deprecate nested classes in enum definitions becoming
     members – in 3.13 they will be normal classes; add ‘member’ and
     ‘nonmember’ functions to allow control over results now.

   - gh-92356(5): Fixed a performance regression in ctypes function
     calls.

   - gh-90997(6): Show the actual named values stored in inline caches
     when ‘show_caches=True’ is passed to *note dis: 38. utilities.

   - gh-92301(7): Prefer ‘close_range()’ to iterating over procfs for
     file descriptor closing in *note subprocess: d6. for better
     performance.

   - gh-67248(8): Sort the miscellaneous topics in Cmd.do_help()

   - gh-92210(9): Port ‘socket.__init__’ to Argument Clinic.  Patch by
     Cinder.

   - gh-80010(10): Add support for generalized ISO 8601 parsing to *note
     datetime.datetime.fromisoformat(): 617, *note
     datetime.date.fromisoformat(): 615. and *note
     datetime.time.fromisoformat(): 616.  Patch by Paul Ganssle.

   - gh-92118(11): Fix a 3.11 regression in *note contextmanager():
     1242, which caused it to propagate exceptions with incorrect
     tracebacks.

   - gh-90887(12): Adding ‘COPYFILE_STAT’, ‘COPYFILE_ACL’ and
     ‘COPYFILE_XATTR’ constants for ‘os.fcopyfile()’ available in macOs.

   - gh-91215(13): For *note @~dataclasses.dataclass: 1cb, add
     'weakref_slot'.  The new parameter defaults to ‘False’.  If true,
     and if ‘slots=True’, add a slot named ‘"__weakref__"’, which will
     allow instances to be weakref’d.  Contributed by Eric V. Smith

   - gh-85984(14): New function os.login_tty() for Unix.

   - gh-92128(15): Add *note __class_getitem__(): 73b. to *note
     logging.LoggerAdapter: 1339. and *note logging.StreamHandler: 1238,
     allowing them to be parameterized at runtime.  Patch by Alex
     Waygood.

   - gh-92049(16): Forbid pickling constants ‘re._constants.SUCCESS’
     etc.  Previously, pickling did not fail, but the result could not
     be unpickled.

   - gh-92062(17): *note inspect.Parameter: 1d0. now raises *note
     ValueError: 202. if ‘name’ is a keyword, in addition to the
     existing check that it is an identifier.

   - gh-87390(18): Add an ‘__unpacked__’ attribute to *note
     types.GenericAlias: 7ed.  Patch by Jelle Zijlstra.

   - gh-88089(19): Add support for generic *note typing.NamedTuple: 2b0.

   - gh-91996(20): New http.HTTPMethod enum to represent all the
     available HTTP request methods in a convenient way

   - gh-91984(21): Modified test strings in test_argparse.py to not
     contain trailing spaces before end of line.

   - gh-91952(22): Add ‘encoding="locale"’ support to
     ‘TextIOWrapper.reconfigure()’.

   - gh-91954(23): Add 'encoding' and 'errors' arguments to *note
     subprocess.getoutput(): ff7. and *note
     subprocess.getstatusoutput(): ff8.

   - bpo-47029(24): Always close the read end of the pipe used by *note
     multiprocessing.Queue: 1914. 'after' the last write of buffered
     data to the write end of the pipe to avoid *note BrokenPipeError:
     1095. at garbage collection and at *note
     multiprocessing.Queue.close(): 1915. calls.  Patch by Géry Ogam.

   - gh-91928(25): Add ‘datetime.UTC’ alias for ‘datetime.timezone.utc’.

     Patch by Kabir Kwatra.

   - gh-68966(26): The ‘mailcap’ module is now deprecated and will be
     removed in Python 3.13.  See PEP 594(27) for the rationale and the
     *note mimetypes: 8f. module for an alternative.  Patch by Victor
     Stinner.

   - gh-91401(28): Provide a way to disable *note subprocess: d6. use of
     ‘vfork()’ just in case it is ever needed and document the existing
     mechanism for ‘posix_spawn()’.

   - gh-64783(29): Fix *note signal.NSIG: 1916. value on FreeBSD to
     accept signal numbers greater than 32, like ‘signal.SIGRTMIN’ and
     ‘signal.SIGRTMAX’.  Patch by Victor Stinner.

   - gh-91910(30): Add missing f prefix to f-strings in error messages
     from the *note multiprocessing: 94. and *note asyncio: a. modules.

   - gh-91860(31): Add *note typing.dataclass_transform(): 4d4,
     implementing PEP 681(32).  Patch by Jelle Zijlstra.

   - gh-91832(33): Add ‘required’ attribute to *note argparse.Action:
     1917. repr output.

   - gh-91827(34): In the *note tkinter: f0. module add method
     ‘info_patchlevel()’ which returns the exact version of the Tcl
     library as a named tuple similar to *note sys.version_info: 6a0.

   - gh-84461(35): Add *note -enable-wasm-pthreads: 1918. to enable
     pthreads support for WASM builds.  ‘Emscripten/node’ no longer has
     threading enabled by default.  Include additional file systems.

   - gh-91821(36): Fix unstable ‘test_from_tuple’ test in
     ‘test_decimal.py’.

   - gh-91217(37): Deprecate the xdrlib module.

   - gh-91217(38): Deprecate the uu module.

   - gh-91760(39): More strict rules will be applied for numerical group
     references and group names in regular expressions.  For now, a
     deprecation warning is emitted for group references and group names
     which will be errors in future Python versions.

   - gh-84461(40): Add provisional *note sys._emscripten_info: 1919.
     named tuple with build-time and run-time information about
     Emscripten platform.

   - gh-90623(41): *note signal.raise_signal(): 191a. and *note
     os.kill(): 13ae. now check immediately for pending signals.  Patch
     by Victor Stinner.

   - gh-91734(42): Fix OSS audio support on Solaris.

   - gh-90633(43): Include the passed value in the exception thrown by
     *note typing.assert_never(): 6a7.  Patch by Jelle Zijlstra.

   - gh-91700(44): Compilation of regular expression containing a
     conditional expression ‘(?(group)...)’ now raises an appropriate
     ‘re.error’ if the group number refers to not defined group.
     Previously an internal RuntimeError was raised.

   - gh-91231(45): Add an optional keyword 'shutdown_timeout' parameter
     to the ‘multiprocessing.BaseManager’ constructor.  Kill the process
     if terminate() takes longer than the timeout.  Patch by Victor
     Stinner.

   - gh-91621(46): Fix *note typing.get_type_hints(): 6b1. for *note
     collections.abc.Callable: 7ec.  Patch by Shantanu Jain.

   - gh-90568(47): Parsing ‘\N’ escapes of Unicode Named Character
     Sequences in a *note regular expression: b9. raises now ‘re.error’
     instead of ‘TypeError’.

   - gh-91670(48): Remove deprecated ‘SO’ config variable in *note
     sysconfig: db.

   - gh-91217(49): Deprecate the telnetlib module.

   - gh-91217(50): Deprecate the sunau module.

   - gh-91217(51): Deprecate the spwd module.

   - gh-91217(52): Deprecate the sndhdr module, as well as inline needed
     functionality for ‘email.mime.MIMEAudio’.

   - gh-91616(53): *note re: b9. module, fix *note fullmatch(): fba.
     mismatch when using Atomic Grouping or Possessive Quantifiers.

   - gh-91217(54): Deprecate the ‘pipes’ module.

   - gh-91217(55): Deprecate the ossaudiodev module.

   - bpo-47256(56): *note re: b9. module, limit the maximum capturing
     group to 1,073,741,823 in 64-bit build, this increases the depth of
     backtracking.

   - gh-91217(57): Deprecate the nis module.

   - gh-91595(58): Fix the comparison of character and integer inside
     ‘Tools.gdb.libpython.write_repr()’.  Patch by Yu Liu.

   - gh-74166(59): Add option to raise all errors from *note
     create_connection(): 672. in an *note ExceptionGroup: 1b6. when it
     fails to create a connection.  The default remains to raise only
     the last error that had occurred when multiple addresses were
     tried.

   - gh-91487(60): Optimize asyncio UDP speed, over 100 times faster
     when transferring a large file.

   - gh-91575(61): Update case-insensitive matching in the *note re: b9.
     module to the latest Unicode version.

   - gh-90622(62): In ‘concurrent.futures.process.ProcessPoolExecutor’
     disallow the “fork” multiprocessing start method when the new
     ‘max_tasks_per_child’ feature is used as the mix of threads+fork
     can hang the child processes.  Default to using the safe “spawn”
     start method in that circumstance if no ‘mp_context’ was supplied.

   - gh-89022(63): In *note sqlite3: cf, ‘SQLITE_MISUSE’ result codes
     are now mapped to *note InterfaceError: 67d. instead of *note
     ProgrammingError: 4f2.  Also, more accurate exceptions are raised
     when binding parameters fail.  Patch by Erlend E. Aasland.

   - gh-91526(64): Stop calling ‘os.device_encoding(file.fileno())’ in
     ‘TextIOWrapper’.  It was complex, never documented, and didn’t work
     for most cases.  (Patch by Inada Naoki.)

   - gh-88116(65): Change the frame-related functions in the *note
     inspect: 7e. module to return a regular object (that is backwards
     compatible with the old tuple-like interface) that include the
     extended PEP 657(66) position information (end line number, column
     and end column).  The affected functions are: *note
     inspect.getframeinfo(): 64f, *note inspect.getouterframes(): 650,
     *note inspect.getinnerframes(): 651, *note inspect.stack(): 652.
     and *note inspect.trace(): 653.  Patch by Pablo Galindo.

   - gh-69093(67): Add indexing and slicing support to *note
     sqlite3.Blob: 682.  Patch by Aviv Palivoda and Erlend E. Aasland.

   - gh-69093(68): Add *note context manager: 5d4. support to *note
     sqlite3.Blob: 682.  Patch by Aviv Palivoda and Erlend E. Aasland.

   - gh-91217(69): Deprecate nntplib.

   - gh-91217(70): Deprecate msilib.

   - gh-91404(71): Improve the performance of *note re: b9. matching by
     using computed gotos (or “threaded code”) on supported platforms
     and removing expensive pointer indirections.

   - gh-91217(72): Deprecate the imghdr module.

   - gh-91217(73): Deprecate the crypt module.

   - gh-91276(74): Make space for longer opcodes in *note dis: 38.
     output.

   - bpo-47000(75): Make ‘TextIOWrapper’ uses locale encoding when
     ‘encoding="locale"’ is specified even in UTF-8 mode.

   - gh-91230(76): *note warnings.catch_warnings(): 584. now accepts
     arguments for *note warnings.simplefilter(): 6c1, providing a more
     concise way to locally ignore warnings or convert them to errors.

   - gh-91217(77): Deprecate the chunk module.

   - gh-91498(78): Add the ‘TCP_CONNECTION_INFO’ option (available on
     macOS) to *note socket: cc.

   - bpo-47260(79): Fix ‘os.closerange()’ potentially being a no-op in a
     Linux seccomp sandbox.

   - bpo-47087(80): Implement ‘typing.Required’ and ‘typing.NotRequired’
     ( PEP 655(81)).  Patch by David Foster and Jelle Zijlstra.

   - bpo-47061(82): Deprecate cgi and cgitb.

   - bpo-47061(83): Deprecate audioop.

   - bpo-47000(84): Add *note locale.getencoding(): 2dc. to get the
     current locale encoding.  It is similar to
     ‘locale.getpreferredencoding(False)’ but ignores the *note Python
     UTF-8 Mode: 656.

   - bpo-42012(85): Add *note wsgiref.types: 11c, containing
     WSGI-specific types for static type checking.

   - bpo-47227(86): Suppress expression chaining for more *note re: b9.
     parsing errors.

   - bpo-47211(87): Remove undocumented and never working function
     ‘re.template()’ and flag ‘re.TEMPLATE’.  This was later reverted in
     3.11.0b2 and deprecated instead.

   - bpo-47135(88): *note decimal.localcontext(): 13cd. now accepts
     context attributes via keyword arguments

   - bpo-43323(89): Fix errors in the *note email: 3b. module if the
     charset itself contains undecodable/unencodable characters.

   - bpo-46841(90): Disassembly of quickened code.

   - bpo-46681(91): Forward gzip.compress() compresslevel to zlib.

   - bpo-45100(92): Add *note typing.get_overloads(): 6ae. and *note
     typing.clear_overloads(): 6af.  Patch by Jelle Zijlstra.

   - bpo-44807(93): *note typing.Protocol: 264. no longer silently
     replaces ‘__init__()’ methods defined on subclasses.  Patch by
     Adrian Garcia Badaracco.

   - bpo-46787(94): Fix *note concurrent.futures.ProcessPoolExecutor:
     8f4. exception memory leak

   - bpo-46720(95): Add support for path-like objects to *note
     multiprocessing.set_executable(): 191b. for Windows to be on a par
     with Unix-like systems.  Patch by Géry Ogam.

   - bpo-46696(96): Add ‘SO_INCOMING_CPU’ constant to *note socket: cc.

   - bpo-46053(97): Fix OSS audio support on NetBSD.

   - bpo-45639(98): ‘image/avif’ and ‘image/webp’ were added to *note
     mimetypes: 8f.

   - bpo-46285(99): Add command-line option ‘-p’/‘--protocol’ to module
     *note http.server: 72. which specifies the HTTP version to which
     the server is conformant (HTTP/1.1 conformant servers can now be
     run from the command-line interface of module *note http.server:
     72.).  Patch by Géry Ogam.

   - bpo-44791(100): Accept ellipsis as the last argument of *note
     typing.Concatenate: 7c5.

   - bpo-46547(101): Remove variables leaking into ‘pydoc.Helper’ class
     namespace.

   - bpo-46415(102): Fix ipaddress.ip_{address,interface,network}
     raising TypeError instead of ValueError if given invalid tuple as
     address parameter.

   - bpo-46075(103): ‘CookieJar’ with ‘DefaultCookiePolicy’ now can
     process cookies from localhost with domain=localhost explicitly
     specified in Set-Cookie header.

   - bpo-45995(104): Add a “z” option to the string formatting
     specification that coerces negative zero floating-point values to
     positive zero after rounding to the format precision.  Contributed
     by John Belmonte.

   - bpo-26175(105): Fully implement the *note io.BufferedIOBase: 694.
     or *note io.TextIOBase: 695. interface for *note
     tempfile.SpooledTemporaryFile: 693. objects.  This lets them work
     correctly with higher-level layers (like compression modules).
     Patch by Carey Metcalfe.

   - bpo-45138(106): Fix a regression in the *note sqlite3: cf. trace
     callback where bound parameters were not expanded in the passed
     statement string.  The regression was introduced in Python 3.10 by
     bpo-40318(107).  Patch by Erlend E. Aasland.

   - bpo-44863(108): Allow *note TypedDict: 162. subclasses to also
     include *note Generic: 15d7. as a base class in class based syntax.
     Thereby allowing the user to define a generic ‘TypedDict’, just
     like a user-defined generic but with ‘TypedDict’ semantics.

   - bpo-44587(109): Fix BooleanOptionalAction to not automatically add
     a default string.  If a default string is desired, use a formatter
     to add it.

   - bpo-43827(110): All positional-or-keyword parameters to
     ‘ABCMeta.__new__’ are now positional-only to avoid conflicts with
     keyword arguments to be passed to ‘__init_subclass__()’.

   - bpo-43218(111): Prevent creation of a venv whose path contains the
     PATH separator.  This could affect the usage of the activate
     script.  Patch by Dustin Rodrigues.

   - bpo-38435(112): Add a ‘process_group’ parameter to *note
     subprocess.Popen: 199. to help move more things off of the unsafe
     ‘preexec_fn’ parameter.

   - bpo-42066(113): Fix cookies getting sorted in
     ‘CookieJar.__iter__()’ which is an extra behavior and not mentioned
     in RFC 2965 or Netscape cookie protocol.  Now the cookies in
     ‘CookieJar’ follows the order of the ‘Set-Cookie’ header.  Patch by
     Iman Kermani.

   - bpo-40617(114): Add *note create_window_function(): 680. to *note
     sqlite3.Connection: 245. for creating aggregate window functions.
     Patch by Erlend E. Aasland.

   - bpo-40676(115): Convert *note csv: 29. to use Argument Clinic for
     *note csv.field_size_limit(): 191c, *note csv.get_dialect(): 191d,
     *note csv.unregister_dialect(): 191e. and *note
     csv.list_dialects(): 191f.

   - bpo-39716(116): Raise an ‘ArgumentError’ when the same subparser
     name is added twice to an ‘argparse.ArgumentParser’.  This is
     consistent with the (default) behavior when the same option string
     is added twice to an ‘ArgumentParser’.

   - bpo-36073(117): Raise *note ProgrammingError: 4f2. instead of
     segfaulting on recursive usage of cursors in *note sqlite3: cf.
     converters.  Patch by Sergey Fedoseev.

   - bpo-34975(118): Adds a ‘start_tls()’ method to ‘StreamWriter’,
     which upgrades the connection with TLS using the given *note
     SSLContext: 294.

   - bpo-22276(119): *note Path: 229. methods *note glob(): 22d. and
     *note rglob(): 22e. return only directories if 'pattern' ends with
     a pathname components separator (‘/’ or *note sep: 66a.).  Patch by
     Eisuke Kawashima.

   - bpo-24905(120): Add *note blobopen(): 681. to *note
     sqlite3.Connection: 245.  *note sqlite3.Blob: 682. allows
     incremental I/O operations on blobs.  Patch by Aviv Palivoda and
     Erlend E. Aasland.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/87901

   (2) https://github.com/python/cpython/issues/90997

   (3) https://github.com/python/cpython/issues/92332

   (4) https://github.com/python/cpython/issues/78157

   (5) https://github.com/python/cpython/issues/92356

   (6) https://github.com/python/cpython/issues/90997

   (7) https://github.com/python/cpython/issues/92301

   (8) https://github.com/python/cpython/issues/67248

   (9) https://github.com/python/cpython/issues/92210

   (10) https://github.com/python/cpython/issues/80010

   (11) https://github.com/python/cpython/issues/92118

   (12) https://github.com/python/cpython/issues/90887

   (13) https://github.com/python/cpython/issues/91215

   (14) https://github.com/python/cpython/issues/85984

   (15) https://github.com/python/cpython/issues/92128

   (16) https://github.com/python/cpython/issues/92049

   (17) https://github.com/python/cpython/issues/92062

   (18) https://github.com/python/cpython/issues/87390

   (19) https://github.com/python/cpython/issues/88089

   (20) https://github.com/python/cpython/issues/91996

   (21) https://github.com/python/cpython/issues/91984

   (22) https://github.com/python/cpython/issues/91952

   (23) https://github.com/python/cpython/issues/91954

   (24) https://bugs.python.org/issue?@action=redirect&bpo=47029

   (25) https://github.com/python/cpython/issues/91928

   (26) https://github.com/python/cpython/issues/68966

   (27) https://peps.python.org/pep-0594/

   (28) https://github.com/python/cpython/issues/91401

   (29) https://github.com/python/cpython/issues/64783

   (30) https://github.com/python/cpython/issues/91910

   (31) https://github.com/python/cpython/issues/91860

   (32) https://peps.python.org/pep-0681/

   (33) https://github.com/python/cpython/issues/91832

   (34) https://github.com/python/cpython/issues/91827

   (35) https://github.com/python/cpython/issues/84461

   (36) https://github.com/python/cpython/issues/91821

   (37) https://github.com/python/cpython/issues/91217

   (38) https://github.com/python/cpython/issues/91217

   (39) https://github.com/python/cpython/issues/91760

   (40) https://github.com/python/cpython/issues/84461

   (41) https://github.com/python/cpython/issues/90623

   (42) https://github.com/python/cpython/issues/91734

   (43) https://github.com/python/cpython/issues/90633

   (44) https://github.com/python/cpython/issues/91700

   (45) https://github.com/python/cpython/issues/91231

   (46) https://github.com/python/cpython/issues/91621

   (47) https://github.com/python/cpython/issues/90568

   (48) https://github.com/python/cpython/issues/91670

   (49) https://github.com/python/cpython/issues/91217

   (50) https://github.com/python/cpython/issues/91217

   (51) https://github.com/python/cpython/issues/91217

   (52) https://github.com/python/cpython/issues/91217

   (53) https://github.com/python/cpython/issues/91616

   (54) https://github.com/python/cpython/issues/91217

   (55) https://github.com/python/cpython/issues/91217

   (56) https://bugs.python.org/issue?@action=redirect&bpo=47256

   (57) https://github.com/python/cpython/issues/91217

   (58) https://github.com/python/cpython/issues/91595

   (59) https://github.com/python/cpython/issues/74166

   (60) https://github.com/python/cpython/issues/91487

   (61) https://github.com/python/cpython/issues/91575

   (62) https://github.com/python/cpython/issues/90622

   (63) https://github.com/python/cpython/issues/89022

   (64) https://github.com/python/cpython/issues/91526

   (65) https://github.com/python/cpython/issues/88116

   (66) https://peps.python.org/pep-0657/

   (67) https://github.com/python/cpython/issues/69093

   (68) https://github.com/python/cpython/issues/69093

   (69) https://github.com/python/cpython/issues/91217

   (70) https://github.com/python/cpython/issues/91217

   (71) https://github.com/python/cpython/issues/91404

   (72) https://github.com/python/cpython/issues/91217

   (73) https://github.com/python/cpython/issues/91217

   (74) https://github.com/python/cpython/issues/91276

   (75) https://bugs.python.org/issue?@action=redirect&bpo=47000

   (76) https://github.com/python/cpython/issues/91230

   (77) https://github.com/python/cpython/issues/91217

   (78) https://github.com/python/cpython/issues/91498

   (79) https://bugs.python.org/issue?@action=redirect&bpo=47260

   (80) https://bugs.python.org/issue?@action=redirect&bpo=47087

   (81) https://peps.python.org/pep-0655/

   (82) https://bugs.python.org/issue?@action=redirect&bpo=47061

   (83) https://bugs.python.org/issue?@action=redirect&bpo=47061

   (84) https://bugs.python.org/issue?@action=redirect&bpo=47000

   (85) https://bugs.python.org/issue?@action=redirect&bpo=42012

   (86) https://bugs.python.org/issue?@action=redirect&bpo=47227

   (87) https://bugs.python.org/issue?@action=redirect&bpo=47211

   (88) https://bugs.python.org/issue?@action=redirect&bpo=47135

   (89) https://bugs.python.org/issue?@action=redirect&bpo=43323

   (90) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (91) https://bugs.python.org/issue?@action=redirect&bpo=46681

   (92) https://bugs.python.org/issue?@action=redirect&bpo=45100

   (93) https://bugs.python.org/issue?@action=redirect&bpo=44807

   (94) https://bugs.python.org/issue?@action=redirect&bpo=46787

   (95) https://bugs.python.org/issue?@action=redirect&bpo=46720

   (96) https://bugs.python.org/issue?@action=redirect&bpo=46696

   (97) https://bugs.python.org/issue?@action=redirect&bpo=46053

   (98) https://bugs.python.org/issue?@action=redirect&bpo=45639

   (99) https://bugs.python.org/issue?@action=redirect&bpo=46285

   (100) https://bugs.python.org/issue?@action=redirect&bpo=44791

   (101) https://bugs.python.org/issue?@action=redirect&bpo=46547

   (102) https://bugs.python.org/issue?@action=redirect&bpo=46415

   (103) https://bugs.python.org/issue?@action=redirect&bpo=46075

   (104) https://bugs.python.org/issue?@action=redirect&bpo=45995

   (105) https://bugs.python.org/issue?@action=redirect&bpo=26175

   (106) https://bugs.python.org/issue?@action=redirect&bpo=45138

   (107) https://bugs.python.org/issue?@action=redirect&bpo=40318

   (108) https://bugs.python.org/issue?@action=redirect&bpo=44863

   (109) https://bugs.python.org/issue?@action=redirect&bpo=44587

   (110) https://bugs.python.org/issue?@action=redirect&bpo=43827

   (111) https://bugs.python.org/issue?@action=redirect&bpo=43218

   (112) https://bugs.python.org/issue?@action=redirect&bpo=38435

   (113) https://bugs.python.org/issue?@action=redirect&bpo=42066

   (114) https://bugs.python.org/issue?@action=redirect&bpo=40617

   (115) https://bugs.python.org/issue?@action=redirect&bpo=40676

   (116) https://bugs.python.org/issue?@action=redirect&bpo=39716

   (117) https://bugs.python.org/issue?@action=redirect&bpo=36073

   (118) https://bugs.python.org/issue?@action=redirect&bpo=34975

   (119) https://bugs.python.org/issue?@action=redirect&bpo=22276

   (120) https://bugs.python.org/issue?@action=redirect&bpo=24905


File: python.info,  Node: Documentação<25>,  Next: Testes<29>,  Prev: Biblioteca<64>,  Up: Python 3 11 0 beta 1

1.23.35.8 Documentação
......................

   - gh-91888(1): Add a new ‘gh’ role to the documentation to link to
     GitHub issues.

   - gh-91783(2): Document security issues concerning the use of the
     function *note shutil.unpack_archive(): 46b.

   - gh-91547(3): Remove “Undocumented modules” page.

   - gh-91298(4): In ‘importlib.resources.abc’, refined the
     documentation of the Traversable Protocol, applying changes from
     importlib_resources 5.7.1.

   - bpo-44347(5): Clarify the meaning of 'dirs_exist_ok', a kwarg of
     *note shutil.copytree(): a33.

   - bpo-36329(6): Remove ‘make -C Doc serve’ in favour of ‘make -C Doc
     htmlview’

   - bpo-47189(7): Add a What’s New in Python 3.11 entry for the Faster
     CPython project.  Documentation by Ken Jin and Kumar Aditya.

   - bpo-38668(8): Update the introduction to documentation for *note
     os.path: a2. to remove warnings that became irrelevant after the
     implementations of PEP 383(9) and PEP 529(10).

   - bpo-47115(11): The documentation now lists which members of C
     structs are part of the *note Limited API/Stable ABI: 553.

   - bpo-46962(12): All docstrings in code snippets are now wrapped into
     *note PyDoc_STR: 1921. to follow the guideline of PEP 7’s
     Documentation Strings paragraph(13).  Patch by Oleg Iarygin.

   - bpo-26792(14): Improve the docstrings of *note runpy.run_module():
     1922. and *note runpy.run_path(): 181.  Original patch by Andrew
     Brezovsky.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/91888

   (2) https://github.com/python/cpython/issues/91783

   (3) https://github.com/python/cpython/issues/91547

   (4) https://github.com/python/cpython/issues/91298

   (5) https://bugs.python.org/issue?@action=redirect&bpo=44347

   (6) https://bugs.python.org/issue?@action=redirect&bpo=36329

   (7) https://bugs.python.org/issue?@action=redirect&bpo=47189

   (8) https://bugs.python.org/issue?@action=redirect&bpo=38668

   (9) https://peps.python.org/pep-0383/

   (10) https://peps.python.org/pep-0529/

   (11) https://bugs.python.org/issue?@action=redirect&bpo=47115

   (12) https://bugs.python.org/issue?@action=redirect&bpo=46962

   (13) https://peps.python.org/pep-0007/#documentation-strings

   (14) https://bugs.python.org/issue?@action=redirect&bpo=26792


File: python.info,  Node: Testes<29>,  Next: Construção<32>,  Prev: Documentação<25>,  Up: Python 3 11 0 beta 1

1.23.35.9 Testes
................

   - gh-92169(1): Use ‘warnings_helper.import_deprecated()’ to import
     deprecated modules uniformly in tests.  Patch by Hugo van Kemenade.

   - gh-84461(2): When multiprocessing is enabled, libregrtest can now
     use a Python executable other than ‘sys.executable’ via the
     ‘--python’ flag.

   - gh-91904(3): Fix initialization of ‘PYTHONREGRTEST_UNICODE_GUARD’
     which prevented running regression tests on non-UTF-8 locale.

   - gh-91752(4): Added @requires_zlib to
     test.test_tools.test_freeze.TestFreeze.

   - gh-91607(5): Fix ‘test_concurrent_futures’ to test the correct
     multiprocessing start method context in several cases where the
     test logic mixed this up.

   - bpo-40280(6): Threading tests are now skipped on WASM targets
     without pthread support.

   - bpo-47109(7): Test for ‘ctypes.macholib.dyld’,
     ‘ctypes.macholib.dylib’, and ‘ctypes.macholib.framework’ are
     brought from manual pre-*note unittest: 106. times to ‘ctypes.test’
     location and structure.  Patch by Oleg Iarygin.

   - bpo-29890(8): Add tests for *note ipaddress.IPv4Interface: 1924.
     and *note ipaddress.IPv6Interface: 1925. construction with tuple
     arguments.  Original patch and tests by louisom.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/92169

   (2) https://github.com/python/cpython/issues/84461

   (3) https://github.com/python/cpython/issues/91904

   (4) https://github.com/python/cpython/issues/91752

   (5) https://github.com/python/cpython/issues/91607

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40280

   (7) https://bugs.python.org/issue?@action=redirect&bpo=47109

   (8) https://bugs.python.org/issue?@action=redirect&bpo=29890


File: python.info,  Node: Construção<32>,  Next: Windows<27>,  Prev: Testes<29>,  Up: Python 3 11 0 beta 1

1.23.35.10 Construção
.....................

   - gh-89452(1): gdbm-compat is now preferred over ndbm if both are
     available on the system.  This allows avoiding the problematic
     ndbm.h on macOS.

   - gh-91731(2): Python is now built with ‘-std=c11’ compiler option,
     rather than ‘-std=c99’.  Patch by Victor Stinner.

   - bpo-47152(3): Add script and make target for generating
     ‘sre_constants.h’.

   - bpo-47103(4): As construções de ‘PGInstrument’ do Windows agora
     copiam uma DLL necessária para o diretório de saída, facilitando a
     execução do estágio de perfil de uma construção do PGO.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/89452

   (2) https://github.com/python/cpython/issues/91731

   (3) https://bugs.python.org/issue?@action=redirect&bpo=47152

   (4) https://bugs.python.org/issue?@action=redirect&bpo=47103


File: python.info,  Node: Windows<27>,  Next: macOS<20>,  Prev: Construção<32>,  Up: Python 3 11 0 beta 1

1.23.35.11 Windows
..................

   - bpo-46907(1): Update Windows installer to use SQLite 3.38.3.

   - bpo-47239(2): Fixed –list and –list-paths output for *note
     Inicializador Python para Windows: 5be. when used in an active
     virtual environment.

   - bpo-46907(3): Update Windows installer to use SQLite 3.38.2.

   - bpo-46785(4): Fix race condition between *note os.stat(): 4a0. and
     unlinking a file on Windows, by using errors codes returned by
     ‘FindFirstFileW()’ when appropriate in ‘win32_xstat_impl’.

   - bpo-40859(5): Update Windows build to use xz-5.2.5

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46907

   (2) https://bugs.python.org/issue?@action=redirect&bpo=47239

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46907

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46785

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40859


File: python.info,  Node: macOS<20>,  Next: Ferramentas/Demos<18>,  Prev: Windows<27>,  Up: Python 3 11 0 beta 1

1.23.35.12 macOS
................

   - bpo-46907(1): Update macOS installer to SQLite 3.38.4.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46907


File: python.info,  Node: Ferramentas/Demos<18>,  Next: API C<29>,  Prev: macOS<20>,  Up: Python 3 11 0 beta 1

1.23.35.13 Ferramentas/Demos
............................

   - gh-91583(1): Fix regression in the code generated by Argument
     Clinic for functions with the ‘defining_class’ parameter.

   - gh-91575(2): Add script ‘Tools/scripts/generate_re_casefix.py’ and
     the make target ‘regen-re’ for generating additional data for
     case-insensitive matching according to the current Unicode version.

   - gh-91551(3): Remove the ancient Pynche color editor.  It has moved
     to ‘https://gitlab.com/warsaw/pynche’

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/91583

   (2) https://github.com/python/cpython/issues/91575

   (3) https://github.com/python/cpython/issues/91551


File: python.info,  Node: API C<29>,  Prev: Ferramentas/Demos<18>,  Up: Python 3 11 0 beta 1

1.23.35.14 API C
................

   - gh-88279(1): Deprecate the C functions: ‘PySys_SetArgv()’,
     ‘PySys_SetArgvEx()’, ‘PySys_SetPath()’.  Patch by Victor Stinner.

   - gh-92154(2): Added the *note PyCode_GetCode(): 778. function.  This
     function does the equivalent of the Python code
     ‘getattr(code_object, 'co_code')’.

   - gh-92173(3): Fix the ‘closure’ argument to *note
     PyEval_EvalCodeEx(): 1862.

   - gh-91320(4): Fix C++ compiler warnings about “old-style cast” (‘g++
     -Wold-style-cast’) in the Python C API. Use C++
     ‘reinterpret_cast<>’ and ‘static_cast<>’ casts when the Python C
     API is used in C++.  Patch by Victor Stinner.

   - gh-80527(5): Mark functions as deprecated by PEP 623(6):
     ‘PyUnicode_AS_DATA()’, ‘PyUnicode_AS_UNICODE()’,
     ‘PyUnicode_GET_DATA_SIZE()’, ‘PyUnicode_GET_SIZE()’.  Patch by
     Victor Stinner.

   - gh-91768(7): *note Py_REFCNT(): 8ae, *note Py_TYPE(): 780, *note
     Py_SIZE(): 782. and *note Py_IS_TYPE(): 192b. functions argument
     type is now ‘PyObject*’, rather than ‘const PyObject*’.  Patch by
     Victor Stinner.

   - gh-91020(8): Add ‘PyBytes_Type.tp_alloc’ to initialize
     ‘PyBytesObject.ob_shash’ for bytes subclasses.

   - bpo-40421(9): Add ‘PyFrame_GetLasti’ C-API function to access frame
     object’s ‘f_lasti’ attribute safely from C code.

   - bpo-35134(10): Remove the ‘Include/code.h’ header file.  C
     extensions should only include the main ‘<Python.h>’ header file.
     Patch by Victor Stinner.

   - bpo-47169(11): *note PyOS_CheckStack(): 192c. is now exported in
     the Stable ABI on Windows.

   - bpo-47169(12): *note PyThread_get_thread_native_id(): 192d. is
     excluded from the stable ABI on platforms where it doesn’t exist
     (like Solaris).

   - bpo-46343(13): Added *note PyErr_GetHandledException(): 76f. and
     *note PyErr_SetHandledException(): 770. as simpler alternatives to
     *note PyErr_GetExcInfo(): 772. and *note PyErr_SetExcInfo(): 771.

     They are included in the stable ABI.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/88279

   (2) https://github.com/python/cpython/issues/92154

   (3) https://github.com/python/cpython/issues/92173

   (4) https://github.com/python/cpython/issues/91320

   (5) https://github.com/python/cpython/issues/80527

   (6) https://peps.python.org/pep-0623/

   (7) https://github.com/python/cpython/issues/91768

   (8) https://github.com/python/cpython/issues/91020

   (9) https://bugs.python.org/issue?@action=redirect&bpo=40421

   (10) https://bugs.python.org/issue?@action=redirect&bpo=35134

   (11) https://bugs.python.org/issue?@action=redirect&bpo=47169

   (12) https://bugs.python.org/issue?@action=redirect&bpo=47169

   (13) https://bugs.python.org/issue?@action=redirect&bpo=46343


File: python.info,  Node: Python 3 11 0 alpha 7,  Next: Python 3 11 0 alpha 6,  Prev: Python 3 11 0 beta 1,  Up: Changelog

1.23.36 Python 3.11.0 alpha 7
-----------------------------

'Data de lançamento: 2022-04-05'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<63>.
* Biblioteca: Biblioteca<65>.
* Núcleo e embutidos: Núcleo e embutidos<64>.
* Biblioteca: Biblioteca<66>.
* Núcleo e embutidos: Núcleo e embutidos<65>.
* Biblioteca: Biblioteca<67>.
* Documentação: Documentação<26>.
* Testes: Testes<30>.
* Construção: Construção<33>.
* Windows: Windows<28>.
* macOS: macOS<21>.
* Ferramentas/Demos: Ferramentas/Demos<19>.
* API C: API C<30>.


File: python.info,  Node: Núcleo e embutidos<63>,  Next: Biblioteca<65>,  Up: Python 3 11 0 alpha 7

1.23.36.1 Núcleo e embutidos
............................

   - bpo-47212(1): Raise *note IndentationError: 7a9. instead of *note
     SyntaxError: 18d. for a bare ‘except’ with no following indent.
     Improve *note SyntaxError: 18d. locations for an un-parenthesized
     generator used as arguments.  Patch by Matthieu Dartiailh.

   - bpo-47186(2): Replace ‘JUMP_IF_NOT_EG_MATCH’ by *note
     CHECK_EG_MATCH: 702. + jump.

   - bpo-47176(3): Emscripten builds cannot handle signals in the usual
     way due to platform limitations.  Python can now handle signals.
     To use, set Module.Py_EmscriptenSignalBuffer to be a single byte
     SharedArrayBuffer and set Py_EMSCRIPTEN_SIGNAL_HANDLING to 1.
     Writing a number into the SharedArrayBuffer will cause the
     corresponding signal to be raised into the Python thread.

   - bpo-47186(4): Replace ‘JUMP_IF_NOT_EXC_MATCH’ by *note
     CHECK_EXC_MATCH: 70b. + jump.

   - bpo-47120(5): Replace the absolute jump opcode *note
     JUMP_NO_INTERRUPT: 1930. by the relative *note
     JUMP_BACKWARD_NO_INTERRUPT: 6ff.

   - bpo-46841(6): Avoid unnecessary allocations when comparing code
     objects.

   - bpo-47182(7): Fix a crash when using a named unicode character like
     ‘"\N{digit nine}"’ after the main interpreter has been initialized
     a second time.

   - bpo-47162(8): O WebAssembly não consegue lidar com conversões de
     ponteiros para função ruins (contagem ou tipos diferentes de
     argumento).  O Python agora pode usar trampolins de chamada para
     atenuar o problema.  Defina ‘PY_CALL_TRAMPOLINE’ para ativar os
     trampolins de chamada.

   - bpo-46775(9): Some Windows system error codes(>= 10000) are now
     mapped into the correct errno and may now raise a subclass of *note
     OSError: 417.  Patch by Donghee Na.

   - bpo-47129(10): Improve error messages in f-string syntax errors
     concerning empty expressions.

   - bpo-47117(11): Fix a crash if we fail to decode characters in
     interactive mode if the tokenizer buffers are uninitialized.  Patch
     by Pablo Galindo.

   - bpo-47127(12): Speed up calls to c functions with keyword arguments
     by 25% with specialization.  Patch by Kumar Aditya.

   - bpo-47120(13): Replaced ‘JUMP_ABSOLUTE’ by the relative jump *note
     JUMP_BACKWARD: 70c.

   - bpo-42197(14): ‘PyFrame_FastToLocalsWithError()’ and
     ‘PyFrame_LocalsToFast()’ are no longer called during profiling nor
     tracing.  C code can access the ‘f_locals’ attribute of *note
     PyFrameObject: 789. by calling *note PyFrame_GetLocals(): 41f.

   - bpo-47070(15): Improve performance of ‘array_inplace_repeat’ by
     reducing the number of invocations of ‘memcpy’.  Refactor the
     ‘repeat’ and inplace ‘repeat’ methods of ‘array’, ‘bytes’,
     ‘bytearray’ and ‘unicodeobject’ to use the common
     ‘_PyBytes_Repeat’.

   - bpo-47053(16): Reduce de-optimization in the specialized
     ‘BINARY_OP_INPLACE_ADD_UNICODE’ opcode.

   - bpo-47045(17): Remove the ‘f_state’ field from the
     _PyInterpreterFrame struct.  Add the ‘owner’ field to the
     _PyInterpreterFrame struct to make ownership explicit to simplify
     clearing and deallocing frames and generators.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=47212

   (2) https://bugs.python.org/issue?@action=redirect&bpo=47186

   (3) https://bugs.python.org/issue?@action=redirect&bpo=47176

   (4) https://bugs.python.org/issue?@action=redirect&bpo=47186

   (5) https://bugs.python.org/issue?@action=redirect&bpo=47120

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (7) https://bugs.python.org/issue?@action=redirect&bpo=47182

   (8) https://bugs.python.org/issue?@action=redirect&bpo=47162

   (9) https://bugs.python.org/issue?@action=redirect&bpo=46775

   (10) https://bugs.python.org/issue?@action=redirect&bpo=47129

   (11) https://bugs.python.org/issue?@action=redirect&bpo=47117

   (12) https://bugs.python.org/issue?@action=redirect&bpo=47127

   (13) https://bugs.python.org/issue?@action=redirect&bpo=47120

   (14) https://bugs.python.org/issue?@action=redirect&bpo=42197

   (15) https://bugs.python.org/issue?@action=redirect&bpo=47070

   (16) https://bugs.python.org/issue?@action=redirect&bpo=47053

   (17) https://bugs.python.org/issue?@action=redirect&bpo=47045


File: python.info,  Node: Biblioteca<65>,  Next: Núcleo e embutidos<64>,  Prev: Núcleo e embutidos<63>,  Up: Python 3 11 0 alpha 7

1.23.36.2 Biblioteca
....................

   - bpo-46968(1): Check for the existence of the “sys/auxv.h” header in
     *note faulthandler: 58. to avoid compilation problems in systems
     where this header doesn’t exist.  Patch by Pablo Galindo

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46968


File: python.info,  Node: Núcleo e embutidos<64>,  Next: Biblioteca<66>,  Prev: Biblioteca<65>,  Up: Python 3 11 0 alpha 7

1.23.36.3 Núcleo e embutidos
............................

   - bpo-46329(1): Use low bit of ‘LOAD_GLOBAL’ to indicate whether to
     push a ‘NULL’ before the global.  Helps streamline the call
     sequence a bit.

   - bpo-46841(2): Quicken bytecode in-place by storing it as part of
     the corresponding ‘PyCodeObject’.

   - bpo-47012(3): Speed up iteration of *note bytes: 1c2. and *note
     bytearray: 2ea. by 30%.  Patch by Kumar Aditya.

   - bpo-47009(4): Improved the performance of *note list.append(): 6cd.
     and list comprehensions by optimizing for the common case, where no
     resize is needed.  Patch by Dennis Sweeney.

   - bpo-47005(5): Improve performance of ‘bytearray_repeat’ and
     ‘bytearray_irepeat’ by reducing the number of invocations of
     ‘memcpy’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46329

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (3) https://bugs.python.org/issue?@action=redirect&bpo=47012

   (4) https://bugs.python.org/issue?@action=redirect&bpo=47009

   (5) https://bugs.python.org/issue?@action=redirect&bpo=47005


File: python.info,  Node: Biblioteca<66>,  Next: Núcleo e embutidos<65>,  Prev: Núcleo e embutidos<64>,  Up: Python 3 11 0 alpha 7

1.23.36.4 Biblioteca
....................

   - bpo-46829(1): Deprecate passing a message into *note
     asyncio.Future.cancel(): 1934. and *note asyncio.Task.cancel():
     1b7.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46829


File: python.info,  Node: Núcleo e embutidos<65>,  Next: Biblioteca<67>,  Prev: Biblioteca<66>,  Up: Python 3 11 0 alpha 7

1.23.36.5 Núcleo e embutidos
............................

   - bpo-46993(1): Speed up *note bytearray: 2ea. creation from *note
     list: 611. and *note tuple: 370. by 40%.  Patch by Kumar Aditya.

   - bpo-39829(2): Removed the ‘__len__()’ call when initializing a list
     and moved initializing to ‘list_extend’.  Patch by Jeremiah
     Pascual.

   - bpo-46944(3): Speed up throwing exception in generator with *note
     METH_FASTCALL: 1713. calling convention.  Patch by Kumar Aditya.

   - bpo-46841(4): Modify *note STORE_SUBSCR: 1936. to use an inline
     cache entry (rather than its oparg) as an adaptive counter.

   - bpo-46841(5): Use inline caching for ‘PRECALL’ and *note CALL: 707,
     and remove the internal machinery for managing the (now unused)
     non-inline caches.

   - bpo-46881(6): Statically allocate and initialize the latin1
     characters.

   - bpo-46838(7): Improve syntax errors for incorrect function
     definitions.  Patch by Pablo Galindo

   - bpo-43721(8): Fix docstrings of *note getter: 1750, *note setter:
     1751, and *note deleter: 1752. to clarify that they create a new
     copy of the property.

   - bpo-43224(9): Make grammar changes required for PEP 646.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46993

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39829

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46944

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46881

   (7) https://bugs.python.org/issue?@action=redirect&bpo=46838

   (8) https://bugs.python.org/issue?@action=redirect&bpo=43721

   (9) https://bugs.python.org/issue?@action=redirect&bpo=43224


File: python.info,  Node: Biblioteca<67>,  Next: Documentação<26>,  Prev: Núcleo e embutidos<65>,  Up: Python 3 11 0 alpha 7

1.23.36.6 Biblioteca
....................

   - bpo-47208(1): Allow vendors to override ‘CTYPES_MAX_ARGCOUNT’.

   - bpo-23689(2): *note re: b9. module: fix memory leak when a match is
     terminated by a signal or memory allocation failure.  Patch by Ma
     Lin.

   - bpo-47167(3): Allow overriding a future compliance check in *note
     asyncio.Task: 1be.

   - bpo-47151(4): When subprocess tries to use vfork, it now falls back
     to fork if vfork returns an error.  This allows use in situations
     where vfork isn’t allowed by the OS kernel.

   - bpo-47152(5): Convert the *note re: b9. module into a package.
     Deprecate modules ‘sre_compile’, ‘sre_constants’ and ‘sre_parse’.

   - bpo-4833(6): Add ‘ZipFile.mkdir()’

   - bpo-27929(7): Fix *note asyncio.loop.sock_connect(): df2. to only
     resolve names for *note socket.AF_INET: 1938. or *note
     socket.AF_INET6: 1939. families.  Resolution may not make sense for
     other families, like ‘socket.AF_BLUETOOTH’ and *note
     socket.AF_UNIX: 193a.

   - bpo-14265(8): Adds the fully qualified test name to unittest output

   - bpo-47061(9): Deprecate the aifc module.

   - bpo-39622(10): Handle Ctrl+C in asyncio programs to interrupt the
     main task.

   - bpo-47101(11): *note hashlib.algorithms_available: 13bb. now lists
     only algorithms that are provided by activated crypto providers on
     OpenSSL 3.0.  Legacy algorithms are not listed unless the legacy
     provider has been loaded into the default OSSL context.

   - bpo-47099(12): All ‘URLError’ exception messages raised in *note
     urllib.request.URLopener: 30e. now contain a colon between ‘ftp
     error’ and the rest of the message.  Previously, ‘open_ftp()’
     missed the colon.  Patch by Oleg Iarygin.

   - bpo-47099(13): Exception chaining is changed from
     ‘Exception.with_traceback()’/*note sys.exc_info(): 68a. to PEP
     3134(14).  Patch by Oleg Iarygin.

   - bpo-47095(15): *note hashlib: 68.’s internal ‘_blake2’ module now
     prefers ‘libb2’ from ‘https://www.blake2.net/’ over Python’s
     vendored copy of blake2.

   - bpo-47098(16): The Keccak Code Package for *note hashlib: 68.’s
     internal ‘_sha3’ module has been replaced with tiny_sha3.  The
     module is used as fallback when Python is built without OpenSSL.

   - bpo-47088(17): Implement *note typing.LiteralString: 5ca, part of
     PEP 675(18).  Patch by Jelle Zijlstra.

   - bpo-42885(19): Optimize *note re.search(): 126d, *note re.split():
     2a2, *note re.findall(): 1060, *note re.finditer(): 1542. and *note
     re.sub(): 2a3. for regular expressions starting with ‘\A’ or ‘^’.

   - bpo-23691(20): Protect the *note re.finditer(): 1542. iterator from
     re-entering.

   - bpo-47067(21): Optimize calling ‘GenericAlias’ objects by using PEP
     590(22) ‘vectorcall’ and by replacing ‘PyObject_SetAttrString’ with
     ‘PyObject_SetAttr’.

   - bpo-28080(23): Add the 'metadata_encoding' parameter in the *note
     zipfile.ZipFile: 6c4. constructor and the ‘--metadata-encoding’
     option in the *note zipfile: 131. CLI to allow reading zipfiles
     using non-standard codecs to encode the filenames within the
     archive.

   - bpo-47000(24): Make *note io.text_encoding(): 17b9. returns “utf-8”
     when UTF-8 mode is enabled.

   - bpo-42369(25): Fix thread safety of ‘zipfile._SharedFile.tell()’ to
     avoid a “zipfile.BadZipFile: Bad CRC-32 for file” exception when
     reading a ‘ZipFile’ from multiple threads.

   - bpo-38256(26): Fix *note binascii.crc32(): 178c. when it is
     compiled to use zlib’c crc32 to work properly on inputs 4+GiB in
     length instead of returning the wrong result.  The workaround prior
     to this was to always feed the function data in increments smaller
     than 4GiB or to just call the zlib module function.

     We also have *note binascii.crc32(): 178c. release the GIL when
     computing on larger inputs as *note zlib.crc32(): 178b. and *note
     hashlib: 68. do.

     This also boosts performance on Windows as it now uses the zlib
     crc32 implementation for *note binascii.crc32(): 178c. for a 2-3x
     speedup.

     That the stdlib has a crc32 API in two modules is a known
     historical oddity.  This moves us closer to a single implementation
     behind them.

   - bpo-47066(27): Global inline flags (e.g.  ‘(?i)’) can now only be
     used at the start of the regular expressions.  Using them not at
     the start of expression was deprecated since Python 3.6.

   - bpo-39394(28): A warning about inline flags not at the start of the
     regular expression now contains the position of the flag.

   - bpo-433030(29): Add support of atomic grouping (‘(?>...)’) and
     possessive quantifiers (‘*+’, ‘++’, ‘?+’, ‘{m,n}+’) in *note
     regular expressions: b9.

   - bpo-47062(30): Implement *note asyncio.Runner: 600. context
     manager.

   - bpo-46382(31): *note dataclass(): 1cb. ‘slots=True’ now correctly
     omits slots already defined in base classes.  Patch by Arie
     Bovenberg.

   - bpo-47057(32): Use FASTCALL convention for ‘FutureIter.throw()’

   - bpo-47061(33): Deprecate the various modules listed by PEP 594(34):

     aifc, asynchat, asyncore, audioop, cgi, cgitb, chunk, crypt,
     imghdr, msilib, nntplib, nis, ossaudiodev, pipes, smtpd, sndhdr,
     spwd, sunau, telnetlib, uu, xdrlib

   - bpo-34790(35): Remove passing coroutine objects to *note
     asyncio.wait(): 47f.

   - bpo-47039(36): Normalize ‘repr()’ of asyncio future and task
     objects.

   - bpo-2604(37): Fix bug where doctests using globals would fail when
     run multiple times.

   - bpo-45150(38): Add *note hashlib.file_digest(): 644. helper for
     efficient hashing of file object.

   - bpo-34861(39): Made cumtime the default sorting key for cProfile

   - bpo-45997(40): Fix *note asyncio.Semaphore: a7e. re-aquiring FIFO
     order.

   - bpo-47022(41): The ‘asynchat’, ‘asyncore’ and ‘smtpd’ modules have
     been deprecated since at least Python 3.6.  Their documentation and
     deprecation warnings and have now been updated to note they will
     removed in Python 3.12 ( PEP 594(42)).

   - bpo-43253(43): Fix a crash when closing transports where the
     underlying socket handle is already invalid on the Proactor event
     loop.

   - bpo-40280(44): *note select.select(): dc8. now passes ‘NULL’ to
     ‘select’ for each empty fdset.

   - bpo-47004(45): Apply bugfixes from importlib_metadata 4.11.3,
     including bugfix for EntryPoint.extras, which was returning match
     objects and not the extras strings.

   - bpo-46998(46): Allow subclassing of *note typing.Any: 6ac.  Patch
     by Shantanu Jain.

   - bpo-46995(47): Deprecate missing *note asyncio.Task.set_name():
     9e5. for third-party task implementations, schedule making it
     mandatory in Python 3.13.

   - bpo-46994(48): Accept explicit contextvars.Context in *note
     asyncio.create_task(): 1bf. and *note asyncio.loop.create_task():
     1c0.

   - bpo-46981(49): ‘typing.get_args(typing.Tuple[()])’ now returns ‘()’
     instead of ‘((),)’.

   - bpo-46968(50): Add ‘os.sysconf_names['SC_MINSIGSTKSZ']’.

   - bpo-46985(51): Upgrade pip wheel bundled with ensurepip (pip
     22.0.4)

   - bpo-46968(52): *note faulthandler: 58.: On Linux 5.14 and newer,
     dynamically determine size of signal handler stack size CPython
     allocates using ‘getauxval(AT_MINSIGSTKSZ)’.  This changes allows
     for Python extension’s request to Linux kernel to use AMX_TILE
     instruction set on Sapphire Rapids Xeon processor to succeed,
     unblocking use of the ISA in frameworks.

   - bpo-46917(53): The *note math.nan: 663. value is now always
     available.  Patch by Victor Stinner.

   - bpo-46955(54): Expose ‘asyncio.base_events.Server’ as *note
     asyncio.Server: b24.  Patch by Stefan Zabka.

   - bpo-23325(55): The *note signal: c6. module no longer assumes that
     *note SIG_IGN: 193b. and *note SIG_DFL: 193c. are small int
     singletons.

   - bpo-46932(56): Update bundled libexpat to 2.4.7

   - bpo-46933(57): The *note pwd: b2. module is now optional.  *note
     os.path.expanduser(): a1e. returns the path when the *note pwd: b2.
     module is not available.

   - bpo-40059(58): PEP 680(59), the *note tomllib: fc. module.  Adds
     support for parsing TOML.

   - bpo-464471(60): *note asyncio.timeout(): 5fe. and *note
     asyncio.timeout_at(): 193d. context managers added.  Patch by Tin
     Tvrtković and Andrew Svetlov.

   - bpo-46805(61): Added raw datagram socket functions for asyncio:
     ‘sock_sendto()’, ‘sock_recvfrom()’ and ‘sock_recvfrom_into()’.

   - bpo-46644(62): No longer require valid typeforms to be callable.
     This allows *note typing.Annotated: 944. to wrap *note
     typing.ParamSpecArgs: 7c7. and *note dataclasses.InitVar: 193e.
     Patch by Gregory Beauregard.

   - bpo-46581(63): Brings ‘ParamSpec’ propagation for ‘GenericAlias’ in
     line with ‘Concatenate’ (and others).

   - bpo-45413(64): Define 'posix_venv' and 'nt_venv' *note sysconfig
     installation schemes: 68f. to be used for bootstrapping new virtual
     environments.  Add 'venv' sysconfig installation scheme to get the
     appropriate one of the above.  The schemes are identical to the
     pre-existing 'posix_prefix' and 'nt' install schemes.  The *note
     venv: 111. module now uses the 'venv' scheme to create new virtual
     environments instead of hardcoding the paths depending only on the
     platform.  Downstream Python distributors customizing the
     'posix_prefix' or 'nt' install scheme in a way that is not
     compatible with the install scheme used in virtual environments are
     encouraged not to customize the 'venv' schemes.  When Python itself
     runs in a virtual environment, *note
     sysconfig.get_default_scheme(): 193f. and *note
     sysconfig.get_preferred_scheme(): 690. with ‘key="prefix"’ returns
     'venv'.

   - bpo-43224(65): Implement support for PEP 646 in typing.py.

   - bpo-43224(66): Allow unpacking types.GenericAlias objects, e.g.
     ‘*tuple[int, str]’.

   - bpo-46557(67): Warnings captured by the logging module are now
     logged without a format string to prevent systems that group logs
     by the msg argument from grouping captured warnings together.

   - bpo-41370(68): *note typing.get_type_hints(): 6b1. now supports
     evaluating strings as forward references in *note PEP 585 generic
     aliases: 6b2.

   - bpo-46607(69): Add *note DeprecationWarning: 1a5. to
     ‘LegacyInterpolation’, deprecated in the docstring since Python
     3.2.  Will be removed in Python 3.13.  Use ‘BasicInterpolation’ or
     ‘ExtendedInterpolation’ instead.

   - bpo-26120(70): *note pydoc: b5. now excludes __future__ imports
     from the module’s data items.

   - bpo-46480(71): Add *note typing.assert_type(): 6ab.  Patch by Jelle
     Zijlstra.

   - bpo-46421(72): Fix a unittest issue where if the command was
     invoked as ‘python -m unittest’ and the filename(s) began with a
     dot (.), a ‘ValueError’ is returned.

   - bpo-46245(73): Add optional parameter 'dir_fd' in *note
     shutil.rmtree(): 301.

   - bpo-22859(74): ‘unittest.TestProgram.usageExit()’ is marked as
     deprecated, to be removed in Python 3.13.

   - bpo-46170(75): Improve the error message when you try to subclass
     an instance of *note typing.NewType: d16.

   - bpo-40296(76): Fix supporting generic aliases in *note pydoc: b5.

   - bpo-20392(77): Fix inconsistency with uppercase file extensions in
     ‘MimeTypes.guess_type()’.  Patch by Kumar Aditya.

   - bpo-46030(78): Add ‘LOCAL_CREDS’, ‘LOCAL_CREDS_PERSISTENT’ and
     ‘SCM_CREDS2’ FreeBSD constants to the socket module.

   - bpo-44439(79): Fix ‘.write()’ method of a member file in ‘ZipFile’,
     when the input data is an object that supports the buffer protocol,
     the file length may be wrong.

   - bpo-45171(80): Fix handling of the ‘stacklevel’ argument to logging
     functions in the *note logging: 87. module so that it is consistent
     across all logging functions and, as advertised, similar to the
     ‘stacklevel’ argument used in *note warn(): 1562.

   - bpo-24959(81): Fix bug where *note unittest: 106. sometimes drops
     frames from tracebacks of exceptions raised in tests.

   - bpo-44859(82): Raise more accurate and PEP 249(83) compatible
     exceptions in *note sqlite3: cf.

        * Raise *note InterfaceError: 67d. instead of *note
          ProgrammingError: 4f2. for ‘SQLITE_MISUSE’ errors.

        * Don’t overwrite *note BufferError: 15bd. with *note
          ValueError: 202. when conversion to BLOB fails.

        * Raise *note ProgrammingError: 4f2. instead of *note Warning:
          1940. if user tries to *note execute(): 2d1. more than one SQL
          statement.

        * Raise *note ProgrammingError: 4f2. instead of *note
          ValueError: 202. if an SQL query contains null characters.

   - bpo-44493(84): Add missing terminated NUL in sockaddr_un’s length

     This was potentially observable when using non-abstract AF_UNIX
     datagram sockets to processes written in another programming
     language.

   - bpo-41930(85): Add *note serialize(): 67e. and *note deserialize():
     67f. support to *note sqlite3: cf.  Patch by Erlend E. Aasland.

   - bpo-33178(86): Added *note ctypes.BigEndianUnion: 1941. and *note
     ctypes.LittleEndianUnion: 1942. classes, as originally documented
     in the library docs but not yet implemented.

   - bpo-43352(87): Add an Barrier object in synchronization primitives
     of 'asyncio' Lib in order to be consistent with Barrier from
     'threading' and 'multiprocessing' libs*

   - bpo-35859(88): *note re: b9. module, fix a few bugs about capturing
     group.  In rare cases, capturing group gets an incorrect string.
     Patch by Ma Lin.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=47208

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23689

   (3) https://bugs.python.org/issue?@action=redirect&bpo=47167

   (4) https://bugs.python.org/issue?@action=redirect&bpo=47151

   (5) https://bugs.python.org/issue?@action=redirect&bpo=47152

   (6) https://bugs.python.org/issue?@action=redirect&bpo=4833

   (7) https://bugs.python.org/issue?@action=redirect&bpo=27929

   (8) https://bugs.python.org/issue?@action=redirect&bpo=14265

   (9) https://bugs.python.org/issue?@action=redirect&bpo=47061

   (10) https://bugs.python.org/issue?@action=redirect&bpo=39622

   (11) https://bugs.python.org/issue?@action=redirect&bpo=47101

   (12) https://bugs.python.org/issue?@action=redirect&bpo=47099

   (13) https://bugs.python.org/issue?@action=redirect&bpo=47099

   (14) https://peps.python.org/pep-3134/

   (15) https://bugs.python.org/issue?@action=redirect&bpo=47095

   (16) https://bugs.python.org/issue?@action=redirect&bpo=47098

   (17) https://bugs.python.org/issue?@action=redirect&bpo=47088

   (18) https://peps.python.org/pep-0675/

   (19) https://bugs.python.org/issue?@action=redirect&bpo=42885

   (20) https://bugs.python.org/issue?@action=redirect&bpo=23691

   (21) https://bugs.python.org/issue?@action=redirect&bpo=47067

   (22) https://peps.python.org/pep-0590/

   (23) https://bugs.python.org/issue?@action=redirect&bpo=28080

   (24) https://bugs.python.org/issue?@action=redirect&bpo=47000

   (25) https://bugs.python.org/issue?@action=redirect&bpo=42369

   (26) https://bugs.python.org/issue?@action=redirect&bpo=38256

   (27) https://bugs.python.org/issue?@action=redirect&bpo=47066

   (28) https://bugs.python.org/issue?@action=redirect&bpo=39394

   (29) https://bugs.python.org/issue?@action=redirect&bpo=433030

   (30) https://bugs.python.org/issue?@action=redirect&bpo=47062

   (31) https://bugs.python.org/issue?@action=redirect&bpo=46382

   (32) https://bugs.python.org/issue?@action=redirect&bpo=47057

   (33) https://bugs.python.org/issue?@action=redirect&bpo=47061

   (34) https://peps.python.org/pep-0594/

   (35) https://bugs.python.org/issue?@action=redirect&bpo=34790

   (36) https://bugs.python.org/issue?@action=redirect&bpo=47039

   (37) https://bugs.python.org/issue?@action=redirect&bpo=2604

   (38) https://bugs.python.org/issue?@action=redirect&bpo=45150

   (39) https://bugs.python.org/issue?@action=redirect&bpo=34861

   (40) https://bugs.python.org/issue?@action=redirect&bpo=45997

   (41) https://bugs.python.org/issue?@action=redirect&bpo=47022

   (42) https://peps.python.org/pep-0594/

   (43) https://bugs.python.org/issue?@action=redirect&bpo=43253

   (44) https://bugs.python.org/issue?@action=redirect&bpo=40280

   (45) https://bugs.python.org/issue?@action=redirect&bpo=47004

   (46) https://bugs.python.org/issue?@action=redirect&bpo=46998

   (47) https://bugs.python.org/issue?@action=redirect&bpo=46995

   (48) https://bugs.python.org/issue?@action=redirect&bpo=46994

   (49) https://bugs.python.org/issue?@action=redirect&bpo=46981

   (50) https://bugs.python.org/issue?@action=redirect&bpo=46968

   (51) https://bugs.python.org/issue?@action=redirect&bpo=46985

   (52) https://bugs.python.org/issue?@action=redirect&bpo=46968

   (53) https://bugs.python.org/issue?@action=redirect&bpo=46917

   (54) https://bugs.python.org/issue?@action=redirect&bpo=46955

   (55) https://bugs.python.org/issue?@action=redirect&bpo=23325

   (56) https://bugs.python.org/issue?@action=redirect&bpo=46932

   (57) https://bugs.python.org/issue?@action=redirect&bpo=46933

   (58) https://bugs.python.org/issue?@action=redirect&bpo=40059

   (59) https://peps.python.org/pep-0680/

   (60) https://bugs.python.org/issue?@action=redirect&bpo=464471

   (61) https://bugs.python.org/issue?@action=redirect&bpo=46805

   (62) https://bugs.python.org/issue?@action=redirect&bpo=46644

   (63) https://bugs.python.org/issue?@action=redirect&bpo=46581

   (64) https://bugs.python.org/issue?@action=redirect&bpo=45413

   (65) https://bugs.python.org/issue?@action=redirect&bpo=43224

   (66) https://bugs.python.org/issue?@action=redirect&bpo=43224

   (67) https://bugs.python.org/issue?@action=redirect&bpo=46557

   (68) https://bugs.python.org/issue?@action=redirect&bpo=41370

   (69) https://bugs.python.org/issue?@action=redirect&bpo=46607

   (70) https://bugs.python.org/issue?@action=redirect&bpo=26120

   (71) https://bugs.python.org/issue?@action=redirect&bpo=46480

   (72) https://bugs.python.org/issue?@action=redirect&bpo=46421

   (73) https://bugs.python.org/issue?@action=redirect&bpo=46245

   (74) https://bugs.python.org/issue?@action=redirect&bpo=22859

   (75) https://bugs.python.org/issue?@action=redirect&bpo=46170

   (76) https://bugs.python.org/issue?@action=redirect&bpo=40296

   (77) https://bugs.python.org/issue?@action=redirect&bpo=20392

   (78) https://bugs.python.org/issue?@action=redirect&bpo=46030

   (79) https://bugs.python.org/issue?@action=redirect&bpo=44439

   (80) https://bugs.python.org/issue?@action=redirect&bpo=45171

   (81) https://bugs.python.org/issue?@action=redirect&bpo=24959

   (82) https://bugs.python.org/issue?@action=redirect&bpo=44859

   (83) https://peps.python.org/pep-0249/

   (84) https://bugs.python.org/issue?@action=redirect&bpo=44493

   (85) https://bugs.python.org/issue?@action=redirect&bpo=41930

   (86) https://bugs.python.org/issue?@action=redirect&bpo=33178

   (87) https://bugs.python.org/issue?@action=redirect&bpo=43352

   (88) https://bugs.python.org/issue?@action=redirect&bpo=35859


File: python.info,  Node: Documentação<26>,  Next: Testes<30>,  Prev: Biblioteca<67>,  Up: Python 3 11 0 alpha 7

1.23.36.7 Documentação
......................

   - bpo-45099(1): Document internal *note asyncio: a. API.

   - bpo-47126(2): Update PEP URLs to PEP 676(3)’s new canonical form.

   - bpo-47040(4): Clarified the old Python versions compatibility note
     of *note binascii.crc32(): 178c. / *note zlib.adler32(): 1944. /
     *note zlib.crc32(): 178b. functions.

   - bpo-46033(5): Clarify ‘for’ statement execution in its doc.

   - bpo-45790(6): Adjust inaccurate phrasing in *note Definindo Tipos
     de Extensão; Tutorial: 1945. about the ‘ob_base’ field and the
     macros used to access its contents.

   - bpo-42340(7): Document that in some circumstances *note
     KeyboardInterrupt: 9d9. may cause the code to enter an inconsistent
     state.  Provided a sample workaround to avoid it if needed.

   - bpo-41233(8): Link the errnos referenced in
     ‘Doc/library/exceptions.rst’ to their respective section in
     ‘Doc/library/errno.rst’, and vice versa.  Previously this was only
     done for EINTR and InterruptedError.  Patch by Yan “yyyyyyyan”
     Orestes.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45099

   (2) https://bugs.python.org/issue?@action=redirect&bpo=47126

   (3) https://peps.python.org/pep-0676/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=47040

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46033

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45790

   (7) https://bugs.python.org/issue?@action=redirect&bpo=42340

   (8) https://bugs.python.org/issue?@action=redirect&bpo=41233


File: python.info,  Node: Testes<30>,  Next: Construção<33>,  Prev: Documentação<26>,  Up: Python 3 11 0 alpha 7

1.23.36.8 Testes
................

   - bpo-47205(1): Skip test for *note sched_getaffinity(): 1149. and
     *note sched_setaffinity(): 114d. error case on FreeBSD.

   - bpo-46126(2): Restore ‘descriptions’ when running tests internally.

   - bpo-47104(3): Rewrite *note asyncio.to_thread(): 8ee. tests to use
     *note unittest.IsolatedAsyncioTestCase: 30c.

   - bpo-40280(4): The test suite is now passing on the Emscripten
     platform.  All fork, socket, and subprocess-based tests are
     skipped.

   - bpo-47037(5): Skip ‘strftime("%4Y")’ feature test on Windows.  It
     can cause an assertion error in debug builds.

   - bpo-46587(6): Skip tests if platform’s ‘strftime’ does not support
     non-portable glibc extensions.

   - bpo-47015(7): A test case for *note os.sendfile(): b21. is
     converted from deprecated ‘asyncore’ (see PEP 594(8)) to *note
     asyncio: a.  Patch by Oleg Iarygin.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=47205

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46126

   (3) https://bugs.python.org/issue?@action=redirect&bpo=47104

   (4) https://bugs.python.org/issue?@action=redirect&bpo=40280

   (5) https://bugs.python.org/issue?@action=redirect&bpo=47037

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46587

   (7) https://bugs.python.org/issue?@action=redirect&bpo=47015

   (8) https://peps.python.org/pep-0594/


File: python.info,  Node: Construção<33>,  Next: Windows<28>,  Prev: Testes<30>,  Up: Python 3 11 0 alpha 7

1.23.36.9 Construção
....................

   - bpo-40280(1): Add configure option *note
     -enable-wasm-dynamic-linking: 1948. to enable ‘dlopen’ and
     MAIN_MODULE / SIDE_MODULE on ‘wasm32-emscripten’.

   - bpo-46023(2): ‘makesetup’ now detects and skips all duplicated
     module definitions.  The first entry wins.

   - bpo-40280(3): Add SOABI ‘wasm32-emscripten’ for Emscripten and
     ‘wasm32-wasi’ for WASI on 32bit WASM as well as ‘wasm64’ counter
     parts.

   - bpo-47032(4): Ensure Windows install builds fail correctly with a
     non-zero exit code when part of the build fails.

   - bpo-47024(5): Update OpenSSL to 1.1.1n for macOS installers and all
     Windows builds.

   - bpo-46996(6): The *note tkinter: f0. package now requires Tcl/Tk
     version 8.5.12 or newer.

   - bpo-46973(7): Add ‘regen-configure’ make target to regenerate
     configure script with Christian’s container image
     ‘quay.io/tiran/cpython_autoconf:269’.

   - bpo-46917(8): Building Python now requires support of IEEE 754
     floating-point numbers.  Patch by Victor Stinner.

   - bpo-45774(9): ‘configure’ now verifies that all SQLite C APIs
     needed for the *note sqlite3: cf. extension module are found.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40280

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46023

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40280

   (4) https://bugs.python.org/issue?@action=redirect&bpo=47032

   (5) https://bugs.python.org/issue?@action=redirect&bpo=47024

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46996

   (7) https://bugs.python.org/issue?@action=redirect&bpo=46973

   (8) https://bugs.python.org/issue?@action=redirect&bpo=46917

   (9) https://bugs.python.org/issue?@action=redirect&bpo=45774


File: python.info,  Node: Windows<28>,  Next: macOS<21>,  Prev: Construção<33>,  Up: Python 3 11 0 alpha 7

1.23.36.10 Windows
..................

   - bpo-47194(1): Update ‘zlib’ to v1.2.12 to resolve CVE
     2018-25032(2).

   - bpo-47171(3): Enables installing the ‘py.exe’ launcher on Windows
     ARM64.

   - bpo-46566(4): Upgraded *note Inicializador Python para Windows:
     5be. to support a new ‘-V:company/tag’ argument for full PEP 514(5)
     support and to detect ARM64 installs.  The ‘-64’ suffix on
     arguments is deprecated, but still selects any non-32-bit install.
     Setting ‘PYLAUNCHER_ALLOW_INSTALL’ and specifying a version that is
     not installed will attempt to install the requested version from
     the Microsoft Store.

   - bpo-47086(6): The installer for Windows now includes documentation
     as loose HTML files rather than a single compiled ‘.chm’ file.

   - bpo-46907(7): Update Windows installer to use SQLite 3.38.1.

   - bpo-44549(8): Update bzip2 to 1.0.8 in Windows builds to mitigate
     CVE 2016-3189(9) and CVE 2019-12900(10).

   - bpo-46948(11): Prevent CVE 2022-26488(12) by ensuring the Add to
     PATH option in the Windows installer uses the correct path when
     being repaired.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=47194

   (2) https://www.cve.org/CVERecord?id=CVE-2018-25032

   (3) https://bugs.python.org/issue?@action=redirect&bpo=47171

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46566

   (5) https://peps.python.org/pep-0514/

   (6) https://bugs.python.org/issue?@action=redirect&bpo=47086

   (7) https://bugs.python.org/issue?@action=redirect&bpo=46907

   (8) https://bugs.python.org/issue?@action=redirect&bpo=44549

   (9) https://www.cve.org/CVERecord?id=CVE-2016-3189

   (10) https://www.cve.org/CVERecord?id=CVE-2019-12900

   (11) https://bugs.python.org/issue?@action=redirect&bpo=46948

   (12) https://www.cve.org/CVERecord?id=CVE-2022-26488


File: python.info,  Node: macOS<21>,  Next: Ferramentas/Demos<19>,  Prev: Windows<28>,  Up: Python 3 11 0 alpha 7

1.23.36.11 macOS
................

   - bpo-46890(1): Fix a regression in the setting of
     ‘sys._base_executable’ in framework builds, and thereby fix a
     regression in *note venv: 111. virtual environments with such
     builds.

   - bpo-46907(2): Update macOS installer to SQLite 3.38.1.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46890

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46907


File: python.info,  Node: Ferramentas/Demos<19>,  Next: API C<30>,  Prev: macOS<21>,  Up: Python 3 11 0 alpha 7

1.23.36.12 Ferramentas/Demos
............................

   - bpo-40280(1): Replace Emscripten’s limited shell with Katie Bell’s
     browser-ui REPL from python-wasm project.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40280


File: python.info,  Node: API C<30>,  Prev: Ferramentas/Demos<19>,  Up: Python 3 11 0 alpha 7

1.23.36.13 API C
................

   - bpo-40421(1): Add ‘PyFrame_GetBuiltins’, ‘PyFrame_GetGenerator’ and
     ‘PyFrame_GetGlobals’ C-API functions to access frame object
     attributes safely from C code.

   - bpo-46850(2): Move the private ‘_PyFrameEvalFunction’ type, and
     private ‘_PyInterpreterState_GetEvalFrameFunc()’ and
     ‘_PyInterpreterState_SetEvalFrameFunc()’ functions to the internal
     C API. The ‘_PyFrameEvalFunction’ callback function type now uses
     the ‘_PyInterpreterFrame’ type which is part of the internal C API.
     Patch by Victor Stinner.

   - bpo-46850(3): Move the private undocumented
     ‘_PyEval_EvalFrameDefault()’ function to the internal C API. The
     function now uses the ‘_PyInterpreterFrame’ type which is part of
     the internal C API. Patch by Victor Stinner.

   - bpo-46850(4): Remove the private undocumented function
     ‘_PyEval_CallTracing()’ from the C API. Call the public *note
     sys.call_tracing(): 194d. function instead.  Patch by Victor
     Stinner.

   - bpo-46850(5): Remove the private undocumented function
     ‘_PyEval_GetCoroutineOriginTrackingDepth()’ from the C API. Call
     the public *note sys.get_coroutine_origin_tracking_depth(): ba3.
     function instead.  Patch by Victor Stinner.

   - bpo-46850(6): Remove the following private undocumented functions
     from the C API:

        * ‘_PyEval_GetAsyncGenFirstiter()’

        * ‘_PyEval_GetAsyncGenFinalizer()’

        * ‘_PyEval_SetAsyncGenFirstiter()’

        * ‘_PyEval_SetAsyncGenFinalizer()’

     Call the public *note sys.get_asyncgen_hooks(): 194e. and *note
     sys.set_asyncgen_hooks(): 1712. functions instead.  Patch by Victor
     Stinner.

   - bpo-46987(7): Remove private functions ‘_PySys_GetObjectId()’ and
     ‘_PySys_SetObjectId()’.  Patch by Donghee Na.

   - bpo-46906(8): Add new functions to pack and unpack C double
     (serialize and deserialize): *note PyFloat_Pack2(): 765, *note
     PyFloat_Pack4(): 766, *note PyFloat_Pack8(): 767, *note
     PyFloat_Unpack2(): 768, *note PyFloat_Unpack4(): 769. and *note
     PyFloat_Unpack8(): 76a.  Patch by Victor Stinner.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40421

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46850

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46850

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46850

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46850

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46850

   (7) https://bugs.python.org/issue?@action=redirect&bpo=46987

   (8) https://bugs.python.org/issue?@action=redirect&bpo=46906


File: python.info,  Node: Python 3 11 0 alpha 6,  Next: Python 3 11 0 alpha 5,  Prev: Python 3 11 0 alpha 7,  Up: Changelog

1.23.37 Python 3.11.0 alpha 6
-----------------------------

'Data de lançamento: 2022-03-07'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<66>.
* Biblioteca: Biblioteca<68>.
* Núcleo e embutidos: Núcleo e embutidos<67>.
* Biblioteca: Biblioteca<69>.
* Núcleo e embutidos: Núcleo e embutidos<68>.
* Biblioteca: Biblioteca<70>.
* Núcleo e embutidos: Núcleo e embutidos<69>.
* Biblioteca: Biblioteca<71>.
* Documentação: Documentação<27>.
* Testes: Testes<31>.
* Construção: Construção<34>.
* Windows: Windows<29>.
* IDLE: IDLE<20>.
* API C: API C<31>.


File: python.info,  Node: Núcleo e embutidos<66>,  Next: Biblioteca<68>,  Up: Python 3 11 0 alpha 6

1.23.37.1 Núcleo e embutidos
............................

   - bpo-46940(1): Avoid overriding *note AttributeError: 34b. metadata
     information for nested attribute access calls.  Patch by Pablo
     Galindo.

   - bpo-46927(2): Include the type’s name in the error message for
     subscripting non-generic types.

   - bpo-46921(3): Support vectorcall for ‘super()’.  Patch by Ken Jin.

   - bpo-46841(4): Fix incorrect handling of inline cache entries when
     specializing *note BINARY_OP: 706.

   - bpo-46841(5): Use an oparg to simplify the construction of helpful
     error messages in *note GET_AWAITABLE: 1951.

   - bpo-46903(6): Make sure that str subclasses can be used as
     attribute names for instances with virtual dictionaries.  Fixes
     regression in 3.11alpha

   - bpo-46841(7): Add more detailed specialization failure stats for
     *note COMPARE_OP: 970. followed by *note EXTENDED_ARG: 18a6.

   - bpo-46891(8): Fix bug introduced during 3.11alpha where subclasses
     of ‘types.ModuleType’ with ‘__slots__’ were not initialized
     correctly, resulting in an interpreter crash.

   - bpo-46841(9): Use inline caching for *note LOAD_ATTR: 4de, *note
     LOAD_METHOD: c39, and *note STORE_ATTR: 1952.

   - bpo-46841(10): Use inline cache for *note BINARY_SUBSCR: 1835.

   - bpo-46841(11): Use inline caching for *note COMPARE_OP: 970.

   - bpo-46864(12): Deprecate ‘PyBytesObject.ob_shash’.  It will be
     removed in Python 3.13.

   - bpo-46841(13): Use inline caching for *note UNPACK_SEQUENCE: 1953.

   - bpo-46845(14): Reduces dict size by removing hash value from hash
     table when all inserted keys are Unicode.  For example,
     ‘sys.getsizeof(dict.fromkeys("abcdefg"))’ becomes 272 bytes from
     352 bytes on 64bit platform.

   - bpo-46841(15): Use inline cache for *note LOAD_GLOBAL: 17dc.

   - bpo-46852(16): Rename the private undocumented
     ‘float.__set_format__()’ method to ‘float.__setformat__()’ to fix a
     typo introduced in Python 3.7.  The method is only used by
     test_float.  Patch by Victor Stinner.

   - bpo-46852(17): Remove the undocumented private
     ‘float.__set_format__()’ method, previously known as
     ‘float.__setformat__()’ in Python 3.7.  Its docstring said: “You
     probably don’t want to use this function.  It exists mainly to be
     used in Python’s test suite.” Patch by Victor Stinner.

   - bpo-40116(18): Fix regression that dict.update(other) may don’t
     respect iterate order of other when other is key sharing dict.

   - bpo-46712(19): Share global string identifiers in deep-frozen
     modules.

   - bpo-46430(20): Fix memory leak in interned strings of deep-frozen
     modules.

   - bpo-46841(21): Store *note BINARY_OP: 706. caches inline using a
     new *note CACHE: 6f9. instruction.

   - bpo-45107(22): Specialize ‘LOAD_METHOD’ for instances with a dict.

   - bpo-44337(23): Reduce the memory usage of specialized *note
     LOAD_ATTR: 4de. and *note STORE_ATTR: 1952. instructions.

   - bpo-46729(24): Add number of sub-exceptions to
     ‘BaseException.__str__()’.

   - bpo-45885(25): Don’t un-adapt *note COMPARE_OP: 970. when
     collecting specialization stats.

   - bpo-46329(26): Fix specialization stats gathering for ‘PRECALL’
     instructions.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46940

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46927

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46921

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46903

   (7) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (8) https://bugs.python.org/issue?@action=redirect&bpo=46891

   (9) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (10) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (11) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (12) https://bugs.python.org/issue?@action=redirect&bpo=46864

   (13) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (14) https://bugs.python.org/issue?@action=redirect&bpo=46845

   (15) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (16) https://bugs.python.org/issue?@action=redirect&bpo=46852

   (17) https://bugs.python.org/issue?@action=redirect&bpo=46852

   (18) https://bugs.python.org/issue?@action=redirect&bpo=40116

   (19) https://bugs.python.org/issue?@action=redirect&bpo=46712

   (20) https://bugs.python.org/issue?@action=redirect&bpo=46430

   (21) https://bugs.python.org/issue?@action=redirect&bpo=46841

   (22) https://bugs.python.org/issue?@action=redirect&bpo=45107

   (23) https://bugs.python.org/issue?@action=redirect&bpo=44337

   (24) https://bugs.python.org/issue?@action=redirect&bpo=46729

   (25) https://bugs.python.org/issue?@action=redirect&bpo=45885

   (26) https://bugs.python.org/issue?@action=redirect&bpo=46329


File: python.info,  Node: Biblioteca<68>,  Next: Núcleo e embutidos<67>,  Prev: Núcleo e embutidos<66>,  Up: Python 3 11 0 alpha 6

1.23.37.2 Biblioteca
....................

   - bpo-46794(1): Bump up the libexpat version into 2.4.6

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46794


File: python.info,  Node: Núcleo e embutidos<67>,  Next: Biblioteca<69>,  Prev: Biblioteca<68>,  Up: Python 3 11 0 alpha 6

1.23.37.3 Núcleo e embutidos
............................

   - bpo-46823(1): Implement a specialized combined opcode
     ‘LOAD_FAST__LOAD_ATTR_INSTANCE_VALUE’.  Patch by Dennis Sweeney.

   - bpo-46820(2): Fix parsing a numeric literal immediately (without
     spaces) followed by “not in” keywords, like in ‘1not in x’.  Now
     the parser only emits a warning, not a syntax error.

   - bpo-46329(3): Move ‘KW_NAMES’ before ‘PRECALL’ instruction in call
     sequence.  Change ‘operand’ of ‘CALL’ to match ‘PRECALL’ for easier
     specialization.

   - bpo-46808(4): Remove the ‘NEXT_BLOCK’ macro from compile.c, and
     make the compiler automatically generate implicit blocks when they
     are needed.

   - bpo-46329(5): Add ‘PUSH_NULL’ instruction.  This is used as a
     prefix when evaluating a callable, so that the stack has the same
     shape for methods and other calls.  ‘PRECALL_FUNCTION’ and
     ‘PRECALL_METHOD’ are merged into a single ‘PRECALL’ instruction.

     There is no change in semantics.

   - bpo-46762(6): Fix an assert failure in debug builds when a ‘<’,
     ‘>’, or ‘=’ is the last character in an f-string that’s missing a
     closing right brace.

   - bpo-46730(7): Message of AttributeError caused by getting, setting
     or deleting a property without the corresponding function now
     mentions that the attribute is in fact a property and also
     specifies type of the class that it belongs to.

   - bpo-46724(8): Make sure that all backwards jumps use the
     ‘JUMP_ABSOLUTE’ instruction, rather than ‘JUMP_FORWARD’ with an
     argument of ‘(2**32)+offset’.

   - bpo-46732(9): Correct the docstring for the *note __bool__(): 1318.
     method.  Patch by Jelle Zijlstra.

   - bpo-46072(10): Add more detailed specialization failure statistics
     for *note BINARY_OP: 706.

   - bpo-46707(11): Avoid potential exponential backtracking when
     producing some syntax errors involving lots of brackets.  Patch by
     Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46823

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46820

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46329

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46808

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46329

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46762

   (7) https://bugs.python.org/issue?@action=redirect&bpo=46730

   (8) https://bugs.python.org/issue?@action=redirect&bpo=46724

   (9) https://bugs.python.org/issue?@action=redirect&bpo=46732

   (10) https://bugs.python.org/issue?@action=redirect&bpo=46072

   (11) https://bugs.python.org/issue?@action=redirect&bpo=46707


File: python.info,  Node: Biblioteca<69>,  Next: Núcleo e embutidos<68>,  Prev: Núcleo e embutidos<67>,  Up: Python 3 11 0 alpha 6

1.23.37.4 Biblioteca
....................

   - bpo-46323(1): *note ctypes: 2a. now allocates memory on the stack
     instead of on the heap to pass arguments while calling a Python
     callback function.  Patch by Donghee Na.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46323


File: python.info,  Node: Núcleo e embutidos<68>,  Next: Biblioteca<70>,  Prev: Biblioteca<69>,  Up: Python 3 11 0 alpha 6

1.23.37.5 Núcleo e embutidos
............................

   - bpo-45923(1): Add a quickened form of *note RESUME: 315. that skips
     quickening checks.

   - bpo-46702(2): Specialize *note UNPACK_SEQUENCE: 1953. for *note
     tuple: 370. and *note list: 611. unpackings.

   - bpo-46072(3): Opcode pair stats are now gathered with
     ‘--enable-pystats’.  Defining ‘DYNAMIC_EXECUTION_PROFILE’ or
     ‘DXPAIRS’ no longer has any effect.

   - bpo-46675(4): Allow more than 16 items in a split dict before it is
     combined.  The limit is now 254.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45923

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46702

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46072

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46675


File: python.info,  Node: Biblioteca<70>,  Next: Núcleo e embutidos<69>,  Prev: Núcleo e embutidos<68>,  Up: Python 3 11 0 alpha 6

1.23.37.6 Biblioteca
....................

   - bpo-40479(1): Add a missing call to ‘va_end()’ in
     ‘Modules/_hashopenssl.c’.

   - bpo-46323(2): Use *note PyObject_Vectorcall(): 55c. while calling
     ctypes callback function.  Patch by Donghee Na.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40479

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46323


File: python.info,  Node: Núcleo e embutidos<69>,  Next: Biblioteca<71>,  Prev: Biblioteca<70>,  Up: Python 3 11 0 alpha 6

1.23.37.7 Núcleo e embutidos
............................

   - bpo-46615(1): When iterating over sets internally in ‘setobject.c’,
     acquire strong references to the resulting items from the set.
     This prevents crashes in corner-cases of various set operations
     where the set gets mutated.

   - bpo-45828(2): The bytecode compiler now attempts to apply runtime
     stack manipulations at compile-time (whenever it is feasible to do
     so).

   - bpo-30496(3): Fixed a minor portability issue in the implementation
     of *note PyLong_FromLong(): 195a, and added a fast path for
     single-digit integers to *note PyLong_FromLongLong(): 195b.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46615

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45828

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30496


File: python.info,  Node: Biblioteca<71>,  Next: Documentação<27>,  Prev: Núcleo e embutidos<69>,  Up: Python 3 11 0 alpha 6

1.23.37.8 Biblioteca
....................

   - bpo-25707(1): Fixed a file leak in *note
     xml.etree.ElementTree.iterparse(): 273. when the iterator is not
     exhausted.  Patch by Jacob Walls.

   - bpo-46877(2): Export *note unittest.doModuleCleanups(): 195d. in
     *note unittest: 106.  Patch by Kumar Aditya.

   - bpo-46848(3): For performance, use the optimized string-searching
     implementations from *note find(): 195e. and *note rfind(): 195f.
     for ‘find()’ and ‘rfind()’.

   - bpo-46736(4): *note SimpleHTTPRequestHandler: b56. now uses HTML5
     grammar.  Patch by Donghee Na.

   - bpo-44886(5): Inherit asyncio proactor datagram transport from
     *note asyncio.DatagramTransport: 18af.

   - bpo-46827(6): Support UDP sockets in *note
     asyncio.loop.sock_connect(): df2. for selector-based event loops.
     Patch by Thomas Grainger.

   - bpo-46811(7): Make test suite support Expat >=2.4.5

   - bpo-46252(8): Raise *note TypeError: 2c3. if *note ssl.SSLSocket:
     8f0. is passed to transport-based APIs.

   - bpo-46784(9): Fix libexpat symbols collisions with user dynamically
     loaded or statically linked libexpat in embedded Python.

   - bpo-46786(10): The HTML serialisation in xml.etree.ElementTree now
     writes ‘embed’, ‘source’, ‘track’ and ‘wbr’ as empty tags, as
     defined in HTML 5.

   - bpo-39327(11): *note shutil.rmtree(): 301. can now work with
     VirtualBox shared folders when running from the guest
     operating-system.

   - bpo-45390(12): Propagate *note asyncio.CancelledError: 1b8. message
     from inner task to outer awaiter.

   - bpo-46756(13): Fix a bug in *note
     urllib.request.HTTPPasswordMgr.find_user_password(): 1960. and
     *note
     urllib.request.HTTPPasswordMgrWithPriorAuth.is_authenticated():
     1961. which allowed to bypass authorization.  For example, access
     to URI ‘example.org/foobar’ was allowed if the user was authorized
     for URI ‘example.org/foo’.

   - bpo-46737(14): *note random.gauss(): 1962. and *note
     random.normalvariate(): 1963. now have default arguments.

   - bpo-46752(15): Add task groups to asyncio (structured concurrency,
     inspired by Trio’s nurseries).  This also introduces a change to
     task cancellation, where a cancelled task can’t be cancelled again
     until it calls .uncancel().

   - bpo-46724(16): Fix *note dis: 38. behavior on negative jump
     offsets.

   - bpo-46333(17): The ‘__repr__()’ method of *note typing.ForwardRef:
     1964. now includes the ‘module’ parameter of *note
     typing.ForwardRef: 1964. when it is set.

   - bpo-46643(18): In *note typing.get_type_hints(): 6b1, support
     evaluating stringified ‘ParamSpecArgs’ and ‘ParamSpecKwargs’
     annotations.  Patch by Gregory Beauregard.

   - bpo-45863(19): When the *note tarfile: de. module creates a pax
     format archive, it will put an integer representation of timestamps
     in the ustar header (if possible) for the benefit of older
     unarchivers, in addition to the existing full-precision timestamps
     in the pax extended header.

   - bpo-46066(20): Deprecate kwargs-based syntax for *note
     typing.TypedDict: 162. definitions.  It had confusing semantics
     when specifying totality, and was largely unused.  Patch by
     Jingchen Ye.

   - bpo-46676(21): Make *note typing.ParamSpec: 15e. args and kwargs
     equal to themselves.  Patch by Gregory Beauregard.

   - bpo-46323(22): ‘ctypes.CFUNCTYPE()’ and ‘ctypes.WINFUNCTYPE()’ now
     fail to create the type if its ‘_argtypes_’ member contains too
     many arguments.  Previously, the error was only raised when calling
     a function.  Patch by Victor Stinner.

   - bpo-46672(23): Fix ‘NameError’ in *note asyncio.gather(): 5fd. when
     initial type check fails.

   - bpo-46659(24): The *note calendar.LocaleTextCalendar: 744. and
     *note calendar.LocaleHTMLCalendar: 745. classes now use *note
     locale.getlocale(): 2da, instead of using *note
     locale.getdefaultlocale(): 2d9, if no locale is specified.  Patch
     by Victor Stinner.

   - bpo-46659(25): The *note locale.getdefaultlocale(): 2d9. function
     is deprecated and will be removed in Python 3.13.  Use *note
     locale.setlocale(): 2db, *note locale.getpreferredencoding(False):
     53a. and *note locale.getlocale(): 2da. functions instead.  Patch
     by Victor Stinner.

   - bpo-46655(26): In *note typing.get_type_hints(): 6b1, support
     evaluating bare stringified ‘TypeAlias’ annotations.  Patch by
     Gregory Beauregard.

   - bpo-45948(27): Fixed a discrepancy in the C implementation of the
     *note xml.etree.ElementTree: 125. module.  Now, instantiating an
     *note xml.etree.ElementTree.XMLParser: a5e. with a ‘target=None’
     keyword provides a default *note xml.etree.ElementTree.TreeBuilder:
     a5f. target as the Python implementation does.

   - bpo-46626(28): Expose Linux’s ‘IP_BIND_ADDRESS_NO_PORT’ option in
     *note socket: cc.

   - bpo-46521(29): Fix a bug in the *note codeop: 1c. module that was
     incorrectly identifying invalid code involving string quotes as
     valid code.

   - bpo-46571(30): Improve *note typing.no_type_check(): 6b4.

     Now it does not modify external classes and functions.  We also now
     correctly mark classmethods as not to be type checked.

   - bpo-46400(31): expat: Update libexpat from 2.4.1 to 2.4.4

   - bpo-46556(32): Deprecate undocumented support for using a *note
     pathlib.Path: 229. object as a context manager.

   - bpo-46534(33): Implement PEP 673(34) *note typing.Self: 5c7.  Patch
     by James Hilton-Balfe.

   - bpo-46522(35): Make various module ‘__getattr__’ AttributeErrors
     more closely match a typical AttributeError

   - bpo-46475(36): Add *note typing.Never: 6a8. and *note
     typing.assert_never(): 6a7.  Patch by Jelle Zijlstra.

   - bpo-46333(37): The ‘__eq__()’ and ‘__hash__()’ methods of *note
     typing.ForwardRef: 1964. now honor the ‘module’ parameter of *note
     typing.ForwardRef: 1964.  Forward references from different modules
     are now differentiated.

   - bpo-46246(38): Add missing ‘__slots__’ to
     ‘importlib.metadata.DeprecatedList’.  Patch by Arie Bovenberg.

   - bpo-46232(39): The *note ssl: d0. module now handles certificates
     with bit strings in DN correctly.

   - bpo-46195(40): *note typing.get_type_hints(): 6b1. no longer adds
     ‘Optional’ to parameters with ‘None’ as a default.  This aligns to
     changes to PEP 484 in ‘https://github.com/python/peps/pull/689’

   - bpo-31369(41): Add *note RegexFlag: 62d. to ‘re.__all__’ and
     documented it.  Add ‘NOFLAG’ to indicate no flags being set.

   - bpo-45898(42): *note ctypes: 2a. no longer defines ‘ffi_type_*’
     symbols in ‘cfield.c’.  The symbols have been provided by libffi
     for over a decade.

   - bpo-44953(43): Calling ‘operator.itemgetter’ objects and
     ‘operator.attrgetter’ objects is now faster due to use of the
     vectorcall calling convention.

   - bpo-44289(44): Fix an issue with *note is_tarfile(): 1965. method
     when using 'fileobj' argument: position in the 'fileobj' was
     advanced forward which made it unreadable with *note
     tarfile.TarFile.open(): 1966.

   - bpo-44011(45): Reimplement SSL/TLS support in asyncio, borrow the
     implementation from uvloop library.

   - bpo-41086(46): Make the *note configparser.ConfigParser: 1c8.
     constructor raise *note TypeError: 2c3. if the ‘interpolation’
     parameter is not of type ‘configparser.Interpolation’

   - bpo-29418(47): Implement *note inspect.ismethodwrapper(): 64a. and
     fix *note inspect.isroutine(): 16d6. for cases where methodwrapper
     is given.  Patch by Hakan Çelik.

   - bpo-14156(48): argparse.FileType now supports an argument of ‘-’ in
     binary mode, returning the .buffer attribute of
     sys.stdin/sys.stdout as appropriate.  Modes including ‘x’ and ‘a’
     are treated equivalently to ‘w’ when argument is ‘-’.  Patch
     contributed by Josh Rosenberg

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25707

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46877

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46848

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46736

   (5) https://bugs.python.org/issue?@action=redirect&bpo=44886

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46827

   (7) https://bugs.python.org/issue?@action=redirect&bpo=46811

   (8) https://bugs.python.org/issue?@action=redirect&bpo=46252

   (9) https://bugs.python.org/issue?@action=redirect&bpo=46784

   (10) https://bugs.python.org/issue?@action=redirect&bpo=46786

   (11) https://bugs.python.org/issue?@action=redirect&bpo=39327

   (12) https://bugs.python.org/issue?@action=redirect&bpo=45390

   (13) https://bugs.python.org/issue?@action=redirect&bpo=46756

   (14) https://bugs.python.org/issue?@action=redirect&bpo=46737

   (15) https://bugs.python.org/issue?@action=redirect&bpo=46752

   (16) https://bugs.python.org/issue?@action=redirect&bpo=46724

   (17) https://bugs.python.org/issue?@action=redirect&bpo=46333

   (18) https://bugs.python.org/issue?@action=redirect&bpo=46643

   (19) https://bugs.python.org/issue?@action=redirect&bpo=45863

   (20) https://bugs.python.org/issue?@action=redirect&bpo=46066

   (21) https://bugs.python.org/issue?@action=redirect&bpo=46676

   (22) https://bugs.python.org/issue?@action=redirect&bpo=46323

   (23) https://bugs.python.org/issue?@action=redirect&bpo=46672

   (24) https://bugs.python.org/issue?@action=redirect&bpo=46659

   (25) https://bugs.python.org/issue?@action=redirect&bpo=46659

   (26) https://bugs.python.org/issue?@action=redirect&bpo=46655

   (27) https://bugs.python.org/issue?@action=redirect&bpo=45948

   (28) https://bugs.python.org/issue?@action=redirect&bpo=46626

   (29) https://bugs.python.org/issue?@action=redirect&bpo=46521

   (30) https://bugs.python.org/issue?@action=redirect&bpo=46571

   (31) https://bugs.python.org/issue?@action=redirect&bpo=46400

   (32) https://bugs.python.org/issue?@action=redirect&bpo=46556

   (33) https://bugs.python.org/issue?@action=redirect&bpo=46534

   (34) https://peps.python.org/pep-0673/

   (35) https://bugs.python.org/issue?@action=redirect&bpo=46522

   (36) https://bugs.python.org/issue?@action=redirect&bpo=46475

   (37) https://bugs.python.org/issue?@action=redirect&bpo=46333

   (38) https://bugs.python.org/issue?@action=redirect&bpo=46246

   (39) https://bugs.python.org/issue?@action=redirect&bpo=46232

   (40) https://bugs.python.org/issue?@action=redirect&bpo=46195

   (41) https://bugs.python.org/issue?@action=redirect&bpo=31369

   (42) https://bugs.python.org/issue?@action=redirect&bpo=45898

   (43) https://bugs.python.org/issue?@action=redirect&bpo=44953

   (44) https://bugs.python.org/issue?@action=redirect&bpo=44289

   (45) https://bugs.python.org/issue?@action=redirect&bpo=44011

   (46) https://bugs.python.org/issue?@action=redirect&bpo=41086

   (47) https://bugs.python.org/issue?@action=redirect&bpo=29418

   (48) https://bugs.python.org/issue?@action=redirect&bpo=14156


File: python.info,  Node: Documentação<27>,  Next: Testes<31>,  Prev: Biblioteca<71>,  Up: Python 3 11 0 alpha 6

1.23.37.9 Documentação
......................

   - bpo-42238(1): ‘Doc/tools/rstlint.py’ has moved to its own
     repository and is now packaged on PyPI as ‘sphinx-lint’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42238


File: python.info,  Node: Testes<31>,  Next: Construção<34>,  Prev: Documentação<27>,  Up: Python 3 11 0 alpha 6

1.23.37.10 Testes
.................

   - bpo-46913(1): Fix test_faulthandler.test_sigfpe() if Python is
     built with undefined behavior sanitizer (UBSAN): disable UBSAN on
     the faulthandler_sigfpe() function.  Patch by Victor Stinner.

   - bpo-46760(2): Remove bytecode offsets from expected values in
     test.test_dis module.  Reduces the obstacles to modifying the VM or
     compiler.

   - bpo-46708(3): Prevent default asyncio event loop policy
     modification warning after ‘test_asyncio’ execution.

   - bpo-46678(4): The function ‘make_legacy_pyc’ in
     ‘Lib/test/support/import_helper.py’ no longer fails when
     ‘PYTHONPYCACHEPREFIX’ is set to a directory on a different device
     from where tempfiles are stored.

   - bpo-46623(5): Skip test_pair() and test_speech128() of test_zlib on
     s390x since they fail if zlib uses the s390x hardware accelerator.
     Patch by Victor Stinner.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46913

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46760

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46708

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46678

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46623


File: python.info,  Node: Construção<34>,  Next: Windows<29>,  Prev: Testes<31>,  Up: Python 3 11 0 alpha 6

1.23.37.11 Construção
.....................

   - bpo-46860(1): Respect ‘--with-suffix’ when building on
     case-insensitive file systems.

   - bpo-46656(2): Building Python now requires a C11 compiler.
     Optional C11 features are not required.  Patch by Victor Stinner.

   - bpo-46656(3): Building Python now requires support for
     floating-point Not-a-Number (NaN): remove the ‘Py_NO_NAN’ macro.
     Patch by Victor Stinner.

   - bpo-46640(4): Building Python now requires a C99 ‘<math.h>’ header
     file providing a ‘NAN’ constant, or the ‘__builtin_nan()’ built-in
     function.  Patch by Victor Stinner.

   - bpo-46608(5): Exclude marshalled-frozen data if deep-freezing to
     save 300 KB disk space.  This includes adding a new ‘is_package’
     field to *note _frozen: 775.  Patch by Kumar Aditya.

   - bpo-40280(6): Fix wasm32-emscripten test failures and platform
     issues.  - Disable syscalls that are not supported or don’t work,
     e.g.  wait, getrusage, prlimit, mkfifo, mknod, setres[gu]id,
     setgroups.  - Use fd_count to count open fds.  - Add more checks
     for subprocess and fork.  - Add workarounds for missing
     _multiprocessing and failing socket.accept().  - Enable bzip2.  -
     Disable large file support.  - Disable signal.alarm.

   - bpo-46430(7): Intern strings in deep-frozen modules.  Patch by
     Kumar Aditya.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46860

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46656

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46656

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46640

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46608

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40280

   (7) https://bugs.python.org/issue?@action=redirect&bpo=46430


File: python.info,  Node: Windows<29>,  Next: IDLE<20>,  Prev: Construção<34>,  Up: Python 3 11 0 alpha 6

1.23.37.12 Windows
..................

   - bpo-46744(1): The default all users install directory for ARM64 is
     now under the native ‘Program Files’ folder, rather than ‘Program
     Files (Arm)’ which is intended for ARM (32-bit) files.

   - bpo-46567(2): Adds Tcl and Tk support for Windows ARM64.  This also
     adds IDLE to the installation.

   - bpo-46638(3): Ensures registry virtualization is consistently
     disabled.  For 3.10 and earlier, it remains enabled (some registry
     writes are protected), while for 3.11 and later it is disabled
     (registry modifications affect all applications).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46744

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46567

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46638


File: python.info,  Node: IDLE<20>,  Next: API C<31>,  Prev: Windows<29>,  Up: Python 3 11 0 alpha 6

1.23.37.13 IDLE
...............

   - bpo-46630(1): Make query dialogs on Windows start with a cursor in
     the entry box.

   - bpo-45447(2): Apply IDLE syntax highlighting to ‘.pyi’ files.
     Patch by Alex Waygood and Terry Jan Reedy.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46630

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45447


File: python.info,  Node: API C<31>,  Prev: IDLE<20>,  Up: Python 3 11 0 alpha 6

1.23.37.14 API C
................

   - bpo-46748(1): Python’s public headers no longer import
     ‘<stdbool.h>’, leaving code that embeds/extends Python free to
     define ‘bool’, ‘true’ and ‘false’.

   - bpo-46836(2): Move the *note PyFrameObject: 789. type definition
     (‘struct _frame’) to the internal C API ‘pycore_frame.h’ header
     file.  Patch by Victor Stinner.

   - bpo-45459(3): Rename ‘Include/buffer.h’ header file to
     ‘Include/pybuffer.h’ to avoid conflicts with projects having an
     existing ‘buffer.h’ header file.  Patch by Victor Stinner.

   - bpo-45412(4): Remove the ‘HAVE_PY_SET_53BIT_PRECISION’ macro (moved
     to the internal C API). Patch by Victor Stinner.

   - bpo-46613(5): Added function *note PyType_GetModuleByDef(): 394,
     which allows access to module state when a method’s defining class
     is not available.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46748

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46836

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45459

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45412

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46613


File: python.info,  Node: Python 3 11 0 alpha 5,  Next: Python 3 11 0 alpha 4,  Prev: Python 3 11 0 alpha 6,  Up: Changelog

1.23.38 Python 3.11.0 alpha 5
-----------------------------

'Data de lançamento: 2022-02-03'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<70>.
* Biblioteca: Biblioteca<72>.
* Núcleo e embutidos: Núcleo e embutidos<71>.
* Biblioteca: Biblioteca<73>.
* Construção: Construção<35>.
* Núcleo e embutidos: Núcleo e embutidos<72>.
* Biblioteca: Biblioteca<74>.
* Documentação: Documentação<28>.
* Testes: Testes<32>.
* Construção: Construção<36>.
* Windows: Windows<30>.
* macOS: macOS<22>.
* IDLE: IDLE<21>.
* API C: API C<32>.


File: python.info,  Node: Núcleo e embutidos<70>,  Next: Biblioteca<72>,  Up: Python 3 11 0 alpha 5

1.23.38.1 Núcleo e embutidos
............................

   - bpo-45773(1): Remove two invalid “peephole” optimizations from the
     bytecode compiler.

   - bpo-46564(2): Do not create frame objects when creating *note
     super: 4db. object.  Patch by Kumar Aditya.

   - bpo-45885(3): Added more fined-grained specialization failure stats
     regarding the ‘COMPARE_OP’ bytecode.

   - bpo-44977(4): The delegation of *note int(): 257. to ‘__trunc__()’
     is now deprecated.  Calling ‘int(a)’ when ‘type(a)’ implements
     ‘__trunc__()’ but not ‘__int__()’ or ‘__index__()’ now raises a
     *note DeprecationWarning: 1a5.

   - bpo-46458(5): Reorder code emitted by the compiler for a *note try:
     6e9.-*note except: 18b. block so that the *note else: 18c. block’s
     code immediately follows the *note try: 6e9. body (without a jump).
     This is more optimal for the happy path.

   - bpo-46527(6): Allow passing ‘iterable’ as a keyword argument to
     *note enumerate(): 14c9. again.  Patch by Jelle Zijlstra.

   - bpo-46528(7): Replace several stack manipulation instructions
     (‘DUP_TOP’, ‘DUP_TOP_TWO’, ‘ROT_TWO’, ‘ROT_THREE’, ‘ROT_FOUR’, and
     ‘ROT_N’) with new *note COPY: 709. and *note SWAP: 70a.
     instructions.

   - bpo-46329(8): Use two or three bytecodes to implement most calls.

     Calls without named arguments are implemented as a sequence of two
     instructions: ‘PRECALL; CALL’.  Calls with named arguments are
     implemented as a sequence of three instructions: ‘PRECALL;
     KW_NAMES; CALL’.  There are two different ‘PRECALL’ instructions:
     ‘PRECALL_FUNTION’ and ‘PRECALL_METHOD’.  The latter pairs with
     ‘LOAD_METHOD’.

     This partition into pre-call and call allows better specialization,
     and thus better performance ultimately.

     There is no change in semantics.

   - bpo-46503(9): Fix an assert when parsing some invalid N escape
     sequences in f-strings.

   - bpo-46431(10): Improve error message on invalid calls to
     ‘BaseExceptionGroup.__new__()’.

   - bpo-46476(11): Fix memory leak in code objects generated by
     deepfreeze.  Patch by Kumar Aditya.

   - bpo-46481(12): Speed up calls to ‘weakref.ref.__call__()’ by using
     the PEP 590(13) ‘vectorcall’ calling convention.  Patch by Donghee
     Na.

   - bpo-46417(14): Fix a race condition on setting a type ‘__bases__’
     attribute: the internal function ‘add_subclass()’ now gets the
     ‘PyTypeObject.tp_subclasses’ member after calling *note
     PyWeakref_NewRef(): 196f. which can trigger a garbage collection
     which can indirectly modify ‘PyTypeObject.tp_subclasses’.  Patch by
     Victor Stinner.

   - bpo-46417(15): ‘python -X showrefcount’ now shows the total
     reference count after clearing and destroyed the main Python
     interpreter.  Previously, it was shown before.  Patch by Victor
     Stinner.

   - bpo-43683(16): Add ASYNC_GEN_WRAP opcode to wrap the value to be
     yielded in async generators.  Removes the need to special case
     async generators in the ‘YIELD_VALUE’ instruction.

   - bpo-46407(17): Optimize some modulo operations in
     ‘Objects/longobject.c’.  Patch by Jeremiah Vivian.

   - bpo-46409(18): Add new ‘RETURN_GENERATOR’ bytecode to make
     generators.  Simplifies calling Python functions in the VM, as they
     no longer any need to special case generator functions.

     Also add ‘JUMP_NO_INTERRUPT’ bytecode that acts like
     ‘JUMP_ABSOLUTE’, but does not check for interrupts.

   - bpo-46406(19): The integer division ‘//’ implementation has been
     optimized to better let the compiler understand its constraints.
     It can be 20% faster on the amd64 platform when dividing an int by
     a value smaller than ‘2**30’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45773

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46564

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45885

   (4) https://bugs.python.org/issue?@action=redirect&bpo=44977

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46458

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46527

   (7) https://bugs.python.org/issue?@action=redirect&bpo=46528

   (8) https://bugs.python.org/issue?@action=redirect&bpo=46329

   (9) https://bugs.python.org/issue?@action=redirect&bpo=46503

   (10) https://bugs.python.org/issue?@action=redirect&bpo=46431

   (11) https://bugs.python.org/issue?@action=redirect&bpo=46476

   (12) https://bugs.python.org/issue?@action=redirect&bpo=46481

   (13) https://peps.python.org/pep-0590/

   (14) https://bugs.python.org/issue?@action=redirect&bpo=46417

   (15) https://bugs.python.org/issue?@action=redirect&bpo=46417

   (16) https://bugs.python.org/issue?@action=redirect&bpo=43683

   (17) https://bugs.python.org/issue?@action=redirect&bpo=46407

   (18) https://bugs.python.org/issue?@action=redirect&bpo=46409

   (19) https://bugs.python.org/issue?@action=redirect&bpo=46406


File: python.info,  Node: Biblioteca<72>,  Next: Núcleo e embutidos<71>,  Prev: Núcleo e embutidos<70>,  Up: Python 3 11 0 alpha 5

1.23.38.2 Biblioteca
....................

   - bpo-46383(1): Fix invalid signature of ‘_zoneinfo’’s ‘module_free’
     function to resolve a crash on wasm32-emscripten platform.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46383


File: python.info,  Node: Núcleo e embutidos<71>,  Next: Biblioteca<73>,  Prev: Biblioteca<72>,  Up: Python 3 11 0 alpha 5

1.23.38.3 Núcleo e embutidos
............................

   - bpo-46361(1): Ensure that “small” integers created by *note
     int.from_bytes(): 1972. and *note decimal.Decimal: 29d. are
     properly cached.

   - bpo-46161(2): Fix the class building error when the arguments are
     constants and CALL_FUNCTION_EX is used.

   - bpo-46028(3): Fixes calculation of ‘sys._base_executable’ when
     inside a virtual environment that uses symlinks with different
     binary names than the base environment provides.

   - bpo-46091(4): Correctly calculate indentation levels for lines with
     whitespace character that are ended by line continuation
     characters.  Patch by Pablo Galindo

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46361

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46161

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46028

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46091


File: python.info,  Node: Biblioteca<73>,  Next: Construção<35>,  Prev: Núcleo e embutidos<71>,  Up: Python 3 11 0 alpha 5

1.23.38.4 Biblioteca
....................

   - bpo-30512(1): Add CAN Socket support for NetBSD.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30512


File: python.info,  Node: Construção<35>,  Next: Núcleo e embutidos<72>,  Prev: Biblioteca<73>,  Up: Python 3 11 0 alpha 5

1.23.38.5 Construção
....................

   - bpo-46045(1): Do not use POSIX semaphores on NetBSD

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46045


File: python.info,  Node: Núcleo e embutidos<72>,  Next: Biblioteca<74>,  Prev: Construção<35>,  Up: Python 3 11 0 alpha 5

1.23.38.6 Núcleo e embutidos
............................

   - bpo-44024(1): Improve the *note TypeError: 2c3. message for
     non-string second arguments passed to the built-in functions *note
     getattr(): bea. and *note hasattr(): 4d2.  Patch by Géry Ogam.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44024


File: python.info,  Node: Biblioteca<74>,  Next: Documentação<28>,  Prev: Núcleo e embutidos<72>,  Up: Python 3 11 0 alpha 5

1.23.38.7 Biblioteca
....................

   - bpo-46624(1): Restore support for non-integer arguments of *note
     random.randrange(): 86f. and *note random.randint(): 1270.

   - bpo-46591(2): Make the IDLE doc URL on the About IDLE dialog
     clickable.

   - bpo-46565(3): Remove loop variables that are leaking into modules’
     namespaces.

   - bpo-46553(4): In *note typing.get_type_hints(): 6b1, support
     evaluating bare stringified ‘ClassVar’ annotations.  Patch by
     Gregory Beauregard.

   - bpo-46544(5): Don’t leak ‘x’ & ‘uspace’ intermediate vars in *note
     textwrap.TextWrapper: 1003.

   - bpo-46487(6): Add the ‘get_write_buffer_limits’ method to
     ‘asyncio.transports.WriteTransport’ and to the SSL transport.

   - bpo-45173(7): Note the configparser deprecations will be removed in
     Python 3.12.

   - bpo-45162(8): The deprecated *note unittest: 106. APIs removed in
     3.11a1 have been temporarily restored to be removed in 3.12 while
     cleanups in external projects go in.

   - bpo-46539(9): In *note typing.get_type_hints(): 6b1, support
     evaluating stringified ‘ClassVar’ and ‘Final’ annotations inside
     ‘Annotated’.  Patch by Gregory Beauregard.

   - bpo-46510(10): Add missing test for *note types.TracebackType: b05.
     and *note types.FrameType: 1977.  Calculate them directly from the
     caught exception without calling *note sys.exc_info(): 68a.

   - bpo-46491(11): Allow *note typing.Annotated: 944. to wrap *note
     typing.Final: 267. and *note typing.ClassVar: 266.  Patch by
     Gregory Beauregard.

   - bpo-46483(12): Remove *note __class_getitem__(): 73b. from *note
     pathlib.PurePath: 4a6. as this class was not supposed to be
     generic.

   - bpo-46436(13): Fix command-line option ‘-d’/‘--directory’ in module
     *note http.server: 72. which is ignored when combined with
     command-line option ‘--cgi’.  Patch by Géry Ogam.

   - bpo-41403(14): Make ‘mock.patch()’ raise a *note TypeError: 2c3.
     with a relevant error message on invalid arg.  Previously it
     allowed a cryptic *note AttributeError: 34b. to escape.

   - bpo-46474(15): In ‘importlib.metadata.EntryPoint.pattern’, avoid
     potential REDoS by limiting ambiguity in consecutive whitespace.

   - bpo-46474(16): Removed private method from
     ‘importlib.metadata.Path’.  Sync with importlib_metadata 4.10.0.

   - bpo-46470(17): Remove unused branch from
     ‘typing._remove_dups_flatten’

   - bpo-46469(18): *note asyncio: a. generic classes now return *note
     types.GenericAlias: 7ed. in ‘__class_getitem__’ instead of the same
     class.

   - bpo-41906(19): Support passing filter instances in the ‘filters’
     values of ‘handlers’ and ‘loggers’ in the dictionary passed to
     *note logging.config.dictConfig(): 11ef.

   - bpo-46422(20): Use ‘dis.Positions’ in ‘dis.Instruction’ instead of
     a regular ‘tuple’.

   - bpo-46434(21): *note pdb: a5. now gracefully handles ‘help’ when
     *note __doc__: 1978. is missing, for example when run with
     pregenerated optimized ‘.pyc’ files.

   - bpo-43869(22): Python uses the same time Epoch on all platforms.
     Add an explicit unit test to ensure that it’s the case.  Patch by
     Victor Stinner.

   - bpo-46414(23): Add *note typing.reveal_type(): 6aa.  Patch by Jelle
     Zijlstra.

   - bpo-40280(24): *note subprocess: d6. now imports Windows-specific
     imports when ‘msvcrt’ module is available, and POSIX-specific
     imports on all other platforms.  This gives a clean exception when
     ‘_posixsubprocess’ is not available (e.g.  Emscripten browser
     target).

   - bpo-40066(25): ‘IntEnum’, ‘IntFlag’, and ‘StrEnum’ use the mixed-in
     type for their ‘str()’ and ‘format()’ output.

   - bpo-46316(26): Optimize *note pathlib.Path.iterdir(): 171d. by
     removing an unnecessary check for special entries.

   - bpo-29688(27): Document *note pathlib.Path.absolute(): 17a2. (which
     has always existed).

   - bpo-43012(28): The pathlib module’s obsolete and internal
     ‘_Accessor’ class has been removed to prepare the terrain for
     upcoming enhancements to the module.

   - bpo-46258(29): Speed up *note math.isqrt(): a0d. for small positive
     integers by replacing two division steps with a lookup table.

   - bpo-46242(30): Improve error message when creating a new *note
     enum.Enum: 630. type subclassing an existing ‘Enum’ with
     ‘_member_names_’ using ‘enum.Enum.__call__()’.

   - bpo-43118(31): Fix a bug in *note inspect.signature(): 738. that
     was causing it to fail on some subclasses of classes with a
     ‘__text_signature__’ referencing module globals.  Patch by Weipeng
     Hong.

   - bpo-26552(32): Fixed case where failing *note
     asyncio.ensure_future(): c92. did not close the coroutine.  Patch
     by Kumar Aditya.

   - bpo-21987(33): Fix an issue with *note tarfile.TarFile.getmember():
     1979. getting a directory name with a trailing slash.

   - bpo-46124(34): Update *note zoneinfo: 134. to rely on
     importlib.resources traversable API.

   - bpo-46103(35): Now *note inspect.getmembers(): 197a. only gets
     ‘__bases__’ attribute from class type.  Patch by Weipeng Hong.

   - bpo-46080(36): Fix exception in argparse help text generation if a
     *note argparse.BooleanOptionalAction: 197b. argument’s default is
     ‘argparse.SUPPRESS’ and it has ‘help’ specified.  Patch by Felix
     Fontein.

   - bpo-44791(37): Fix substitution of *note ParamSpec: 15e. in *note
     Concatenate: 7c5. with different parameter expressions.
     Substitution with a list of types returns now a tuple of types.
     Substitution with ‘Concatenate’ returns now a ‘Concatenate’ with
     concatenated lists of arguments.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46624

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46591

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46565

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46553

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46544

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46487

   (7) https://bugs.python.org/issue?@action=redirect&bpo=45173

   (8) https://bugs.python.org/issue?@action=redirect&bpo=45162

   (9) https://bugs.python.org/issue?@action=redirect&bpo=46539

   (10) https://bugs.python.org/issue?@action=redirect&bpo=46510

   (11) https://bugs.python.org/issue?@action=redirect&bpo=46491

   (12) https://bugs.python.org/issue?@action=redirect&bpo=46483

   (13) https://bugs.python.org/issue?@action=redirect&bpo=46436

   (14) https://bugs.python.org/issue?@action=redirect&bpo=41403

   (15) https://bugs.python.org/issue?@action=redirect&bpo=46474

   (16) https://bugs.python.org/issue?@action=redirect&bpo=46474

   (17) https://bugs.python.org/issue?@action=redirect&bpo=46470

   (18) https://bugs.python.org/issue?@action=redirect&bpo=46469

   (19) https://bugs.python.org/issue?@action=redirect&bpo=41906

   (20) https://bugs.python.org/issue?@action=redirect&bpo=46422

   (21) https://bugs.python.org/issue?@action=redirect&bpo=46434

   (22) https://bugs.python.org/issue?@action=redirect&bpo=43869

   (23) https://bugs.python.org/issue?@action=redirect&bpo=46414

   (24) https://bugs.python.org/issue?@action=redirect&bpo=40280

   (25) https://bugs.python.org/issue?@action=redirect&bpo=40066

   (26) https://bugs.python.org/issue?@action=redirect&bpo=46316

   (27) https://bugs.python.org/issue?@action=redirect&bpo=29688

   (28) https://bugs.python.org/issue?@action=redirect&bpo=43012

   (29) https://bugs.python.org/issue?@action=redirect&bpo=46258

   (30) https://bugs.python.org/issue?@action=redirect&bpo=46242

   (31) https://bugs.python.org/issue?@action=redirect&bpo=43118

   (32) https://bugs.python.org/issue?@action=redirect&bpo=26552

   (33) https://bugs.python.org/issue?@action=redirect&bpo=21987

   (34) https://bugs.python.org/issue?@action=redirect&bpo=46124

   (35) https://bugs.python.org/issue?@action=redirect&bpo=46103

   (36) https://bugs.python.org/issue?@action=redirect&bpo=46080

   (37) https://bugs.python.org/issue?@action=redirect&bpo=44791


File: python.info,  Node: Documentação<28>,  Next: Testes<32>,  Prev: Biblioteca<74>,  Up: Python 3 11 0 alpha 5

1.23.38.8 Documentação
......................

   - bpo-46463(1): Fixes ‘escape4chm.py’ script used when building the
     CHM documentation file

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46463


File: python.info,  Node: Testes<32>,  Next: Construção<36>,  Prev: Documentação<28>,  Up: Python 3 11 0 alpha 5

1.23.38.9 Testes
................

   - bpo-43478(1): Mocks can no longer be provided as the specs for
     other Mocks.  As a result, an already-mocked object cannot be
     passed to ‘mock.Mock()’.  This can uncover bugs in tests since
     these Mock-derived Mocks will always pass certain tests (e.g.
     isinstance) and builtin assert functions (e.g.
     assert_called_once_with) will unconditionally pass.

   - bpo-46616(2): Ensures ‘test_importlib.test_windows’ cleans up
     registry keys after completion.

   - bpo-44359(3): test_ftplib now silently ignores socket errors to
     prevent logging unhandled threading exceptions.  Patch by Victor
     Stinner.

   - bpo-46600(4): Fix test_gdb.test_pycfunction() for Python built with
     ‘clang -Og’.  Tolerate inlined functions in the gdb traceback.
     Patch by Victor Stinner.

   - bpo-46542(5): Fix a Python crash in test_lib2to3 when using Python
     built in debug mode: limit the recursion limit.  Patch by Victor
     Stinner.

   - bpo-46576(6): test_peg_generator now disables compiler optimization
     when testing compilation of its own C extensions to significantly
     speed up the testing on non-debug builds of CPython.

   - bpo-46542(7): Fix ‘test_json’ tests checking for *note
     RecursionError: d90.: modify these tests to use
     ‘support.infinite_recursion()’.  Patch by Victor Stinner.

   - bpo-13886(8): Skip test_builtin PTY tests on non-ASCII characters
     if the readline module is loaded.  The readline module changes
     input() behavior, but test_builtin is not intended to test the
     readline module.  Patch by Victor Stinner.

   - bpo-40280(9): Add ‘test.support.requires_fork()’ decorators to mark
     tests that require a working *note os.fork(): 197.

   - bpo-40280(10): Add ‘test.support.requires_subprocess()’ decorator
     to mark tests which require working *note subprocess: d6. module or
     ‘os.spawn*’.  The wasm32-emscripten platform has no support for
     processes.

   - bpo-46126(11): Disable ‘descriptions’ when running tests
     internally.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43478

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46616

   (3) https://bugs.python.org/issue?@action=redirect&bpo=44359

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46600

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46542

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46576

   (7) https://bugs.python.org/issue?@action=redirect&bpo=46542

   (8) https://bugs.python.org/issue?@action=redirect&bpo=13886

   (9) https://bugs.python.org/issue?@action=redirect&bpo=40280

   (10) https://bugs.python.org/issue?@action=redirect&bpo=40280

   (11) https://bugs.python.org/issue?@action=redirect&bpo=46126


File: python.info,  Node: Construção<36>,  Next: Windows<30>,  Prev: Testes<32>,  Up: Python 3 11 0 alpha 5

1.23.38.10 Construção
.....................

   - bpo-46602(1): Tidied up configure.ac so that conftest.c is
     truncated rather than appended.  This assists in the case where the
     ‘rm’ of conftest.c fails to happen between tests.  Downstream
     issues such as a clobbered SOABI can result.

   - bpo-46600(2): Fix the test checking if the C compiler supports
     ‘-Og’ option in the ‘./configure’ script to also use ‘-Og’ on clang
     which supports it.  Patch by Victor Stinner.

   - bpo-38472(3): Fix GCC detection in setup.py when cross-compiling.
     The C compiler is now run with LC_ALL=C. Previously, the detection
     failed with a German locale.

   - bpo-46513(4): ‘configure’ no longer uses ‘AC_C_CHAR_UNSIGNED’ macro
     and ‘pyconfig.h’ no longer defines reserved symbol
     ‘__CHAR_UNSIGNED__’.

   - bpo-46471(5): Use global singletons for single byte bytes objects
     in deepfreeze.

   - bpo-46443(6): Deepfreeze now uses cached small integers as it saves
     some space for common small integers.

   - bpo-46429(7): Merge all deep-frozen files into one for space
     savings.  Patch by Kumar Aditya.

   - bpo-45569(8): The build now defaults to using 30-bit digits for
     Python integers.  Previously either 15-bit or 30-bit digits would
     be selected, depending on the platform.  15-bit digits may still be
     selected using the ‘--enable-big-digits=15’ option to the
     ‘configure’ script, or by defining ‘PYLONG_BITS_IN_DIGIT’ in
     ‘pyconfig.h’.

   - bpo-45925(9): Update Windows installer to use SQLite 3.37.2.

   - bpo-43112(10): Detect musl libc as a separate SOABI (tagged as
     ‘linux-musl’).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46602

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46600

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38472

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46513

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46471

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46443

   (7) https://bugs.python.org/issue?@action=redirect&bpo=46429

   (8) https://bugs.python.org/issue?@action=redirect&bpo=45569

   (9) https://bugs.python.org/issue?@action=redirect&bpo=45925

   (10) https://bugs.python.org/issue?@action=redirect&bpo=43112


File: python.info,  Node: Windows<30>,  Next: macOS<22>,  Prev: Construção<36>,  Up: Python 3 11 0 alpha 5

1.23.38.11 Windows
..................

   - bpo-33125(1): The traditional EXE/MSI based installer for Windows
     is now available for ARM64

   - bpo-46362(2): os.path.abspath(“C:CON”) is now fixed to return
     “\.CON”, not the same path.  The regression was true of all legacy
     DOS devices such as COM1, LPT1, or NUL.

   - bpo-44934(3): The installer now offers a command-line only option
     to add the installation directory to the end of ‘PATH’ instead of
     at the start.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33125

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46362

   (3) https://bugs.python.org/issue?@action=redirect&bpo=44934


File: python.info,  Node: macOS<22>,  Next: IDLE<21>,  Prev: Windows<30>,  Up: Python 3 11 0 alpha 5

1.23.38.12 macOS
................

   - bpo-45925(1): Update macOS installer to SQLite 3.37.2.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45925


File: python.info,  Node: IDLE<21>,  Next: API C<32>,  Prev: macOS<22>,  Up: Python 3 11 0 alpha 5

1.23.38.13 IDLE
...............

   - bpo-45296(1): Clarify close, quit, and exit in IDLE. In the File
     menu, ‘Close’ and ‘Exit’ are now ‘Close Window’ (the current one)
     and ‘Exit’ is now ‘Exit IDLE’ (by closing all windows).  In Shell,
     ‘quit()’ and ‘exit()’ mean ‘close Shell’.  If there are no other
     windows, this also exits IDLE.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45296


File: python.info,  Node: API C<32>,  Prev: IDLE<21>,  Up: Python 3 11 0 alpha 5

1.23.38.14 API C
................

   - bpo-40170(1): Remove the ‘PyHeapType_GET_MEMBERS()’ macro.  It was
     exposed in the public C API by mistake, it must only be used by
     Python internally.  Use the ‘PyTypeObject.tp_members’ member
     instead.  Patch by Victor Stinner.

   - bpo-40170(2): Move _Py_GetAllocatedBlocks() and
     _PyObject_DebugMallocStats() private functions to the internal C
     API. Patch by Victor Stinner.

   - bpo-46433(3): The internal function _PyType_GetModuleByDef now
     correctly handles inheritance patterns involving static types.

   - bpo-45459(4): *note Py_buffer: 758. and various ‘Py_buffer’ related
     functions are now part of the limited API and stable ABI.

   - bpo-14916(5): Fixed bug in the tokenizer that prevented
     ‘PyRun_InteractiveOne’ from parsing from the provided FD.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40170

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40170

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46433

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45459

   (5) https://bugs.python.org/issue?@action=redirect&bpo=14916


File: python.info,  Node: Python 3 11 0 alpha 4,  Next: Python 3 11 0 alpha 3,  Prev: Python 3 11 0 alpha 5,  Up: Changelog

1.23.39 Python 3.11.0 alpha 4
-----------------------------

'Data de lançamento: 2022-01-13'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<73>.
* Biblioteca: Biblioteca<75>.
* Núcleo e embutidos: Núcleo e embutidos<74>.
* Biblioteca: Biblioteca<76>.
* Núcleo e embutidos: Núcleo e embutidos<75>.
* Biblioteca: Biblioteca<77>.
* Núcleo e embutidos: Núcleo e embutidos<76>.
* Biblioteca: Biblioteca<78>.
* Documentação: Documentação<29>.
* Testes: Testes<33>.
* Construção: Construção<37>.
* Windows: Windows<31>.
* macOS: macOS<23>.
* API C: API C<33>.


File: python.info,  Node: Núcleo e embutidos<73>,  Next: Biblioteca<75>,  Up: Python 3 11 0 alpha 4

1.23.39.1 Núcleo e embutidos
............................

   - bpo-46070(1): *note Py_EndInterpreter(): 1985. now explicitly
     untracks all objects currently tracked by the GC. Previously, if an
     object was used later by another interpreter, calling *note
     PyObject_GC_UnTrack(): 154e. on the object crashed if the previous
     or the next object of the ‘PyGC_Head’ structure became a dangling
     pointer.  Patch by Victor Stinner.

   - bpo-46347(2): Fix memory leak in PyEval_EvalCodeEx.

   - bpo-46339(3): Fix a crash in the parser when retrieving the error
     text for multi-line f-strings expressions that do not start in the
     first line of the string.  Patch by Pablo Galindo

   - bpo-46331(4): Do not set line number of instruction storing
     doc-string.  Fixes regression introduced in 3.11 alpha.

   - bpo-46314(5): Remove spurious “call” event when creating a lambda
     function that was accidentally introduced in 3.11a4.

   - bpo-46289(6): ASDL declaration of ‘FormattedValue’ has changed to
     reflect ‘conversion’ field is not optional.

   - bpo-46297(7): Fixed an interpreter crash on bootup with multiple
     PythonPaths set in the Windows registry.  Patch by Derzsi Dániel.

   - bpo-46237(8): Fix the line number of tokenizer errors inside
     f-strings.  Patch by Pablo Galindo.

   - bpo-46263(9): We always expect the “use_frozen_modules” config to
     be set, now that getpath.c was rewritten in pure Python and the
     logic improved.

   - bpo-46006(10): Fix a regression when a type method like
     ‘__init__()’ is modified in a subinterpreter.  Fix a regression in
     ‘_PyUnicode_EqualToASCIIId()’ and type ‘update_slot()’.  Revert the
     change which made the Unicode dictionary of interned strings
     compatible with subinterpreters: the internal interned dictionary
     is shared again by all interpreters.  Patch by Victor Stinner.

   - bpo-45923(11): Add RESUME opcode.  This is a logical no-op.  It is
     emitted by the compiler anywhere a Python function can be entered.
     It is used by the interpreter to perform tracing and optimizer
     checks.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46070

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46347

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46339

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46331

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46314

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46289

   (7) https://bugs.python.org/issue?@action=redirect&bpo=46297

   (8) https://bugs.python.org/issue?@action=redirect&bpo=46237

   (9) https://bugs.python.org/issue?@action=redirect&bpo=46263

   (10) https://bugs.python.org/issue?@action=redirect&bpo=46006

   (11) https://bugs.python.org/issue?@action=redirect&bpo=45923


File: python.info,  Node: Biblioteca<75>,  Next: Núcleo e embutidos<74>,  Prev: Núcleo e embutidos<73>,  Up: Python 3 11 0 alpha 4

1.23.39.2 Biblioteca
....................

   - bpo-46208(1): Fix the regression of os.path.normpath(“A/../../B”)
     not returning expected “../B” but “B”.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46208


File: python.info,  Node: Núcleo e embutidos<74>,  Next: Biblioteca<76>,  Prev: Biblioteca<75>,  Up: Python 3 11 0 alpha 4

1.23.39.3 Núcleo e embutidos
............................

   - bpo-46240(1): Correct the error message for unclosed parentheses
     when the tokenizer doesn’t reach the end of the source when the
     error is reported.  Patch by Pablo Galindo

   - bpo-46009(2): Remove the ‘GEN_START’ opcode.

   - bpo-46235(3): Certain sequence multiplication operations like ‘[0]
     * 1_000’ are now faster due to reference-counting optimizations.
     Patch by Dennis Sweeney.

   - bpo-46221(4): ‘PREP_RERAISE_STAR’ no longer pushes ‘lasti’ to the
     stack.

   - bpo-46202(5): Remove ‘POP_EXCEPT_AND_RERAISE’ and replace it by an
     equivalent sequence of other opcodes.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46240

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46009

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46235

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46221

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46202


File: python.info,  Node: Biblioteca<76>,  Next: Núcleo e embutidos<75>,  Prev: Núcleo e embutidos<74>,  Up: Python 3 11 0 alpha 4

1.23.39.4 Biblioteca
....................

   - bpo-46085(1): Fix iterator cache mechanism of ‘OrderedDict’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46085


File: python.info,  Node: Núcleo e embutidos<75>,  Next: Biblioteca<77>,  Prev: Biblioteca<76>,  Up: Python 3 11 0 alpha 4

1.23.39.5 Núcleo e embutidos
............................

   - bpo-46055(1): Speed up shifting operation involving integers less
     than ‘PyLong_BASE’.  Patch by Xinhang Xu.

   - bpo-46110(2): Add a maximum recursion check to the PEG parser to
     avoid stack overflow.  Patch by Pablo Galindo

   - bpo-46107(3): Fix bug where ‘ExceptionGroup.split()’ and
     ‘ExceptionGroup.subgroup()’ did not copy the exception group’s
     ‘__note__’ field to the parts.

   - bpo-45711(4): The interpreter state’s representation of handled
     exceptions (a.k.a exc_info, or _PyErr_StackItem) now has only the
     ‘exc_value’ field, ‘exc_type’ and ‘exc_traceback’ have been removed
     as their values can be derived from ‘exc_value’.

   - bpo-44525(5): Replace the four call bytecode instructions which one
     pre-call instruction and two call instructions.

     Removes ‘CALL_FUNCTION’, ‘CALL_FUNCTION_KW’, ‘CALL_METHOD’ and
     ‘CALL_METHOD_KW’.

     Adds ‘CALL_NO_KW’ and ‘CALL_KW’ call instructions, and
     ‘PRECALL_METHOD’ prefix for pairing with ‘LOAD_METHOD’.

   - bpo-46039(6): Remove the ‘YIELD_FROM’ instruction and replace it
     with the ‘SEND’ instruction which performs the same operation, but
     without the loop.

   - bpo-45635(7): The code called from ‘_PyErr_Display()’ was
     refactored to improve error handling.  It now exits immediately
     upon an unrecoverable error.

   - bpo-46054(8): Fix parser error when parsing non-utf8 characters in
     source files.  Patch by Pablo Galindo.

   - bpo-46042(9): Improve the location of the caret in *note
     SyntaxError: 18d. exceptions emitted by the symbol table.  Patch by
     Pablo Galindo.

   - bpo-46049(10): Ensure ‘._pth’ files work as intended on platforms
     other than Windows.

   - bpo-46048(11): Fixes parsing of ‘._pth’ files on startup so that
     single-character paths are correctly read.

   - bpo-37971(12): Fix a bug where the line numbers given in a
     traceback when a decorator application raised an exception were
     wrong.

   - bpo-46031(13): Add *note POP_JUMP_IF_NOT_NONE: 190b. and *note
     POP_JUMP_IF_NONE: 190a. opcodes to speed up conditional jumps.

   - bpo-45654(14): Deepfreeze *note runpy: be, patch by Kumar Aditya.

   - bpo-46025(15): Fix a crash in the *note atexit: c. module involving
     functions that unregister themselves before raising exceptions.
     Patch by Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46055

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46110

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46107

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45711

   (5) https://bugs.python.org/issue?@action=redirect&bpo=44525

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46039

   (7) https://bugs.python.org/issue?@action=redirect&bpo=45635

   (8) https://bugs.python.org/issue?@action=redirect&bpo=46054

   (9) https://bugs.python.org/issue?@action=redirect&bpo=46042

   (10) https://bugs.python.org/issue?@action=redirect&bpo=46049

   (11) https://bugs.python.org/issue?@action=redirect&bpo=46048

   (12) https://bugs.python.org/issue?@action=redirect&bpo=37971

   (13) https://bugs.python.org/issue?@action=redirect&bpo=46031

   (14) https://bugs.python.org/issue?@action=redirect&bpo=45654

   (15) https://bugs.python.org/issue?@action=redirect&bpo=46025


File: python.info,  Node: Biblioteca<77>,  Next: Núcleo e embutidos<76>,  Prev: Núcleo e embutidos<75>,  Up: Python 3 11 0 alpha 4

1.23.39.6 Biblioteca
....................

   - bpo-46000(1): Improve compatibility of the *note curses: 2b. module
     with NetBSD curses.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46000


File: python.info,  Node: Núcleo e embutidos<76>,  Next: Biblioteca<78>,  Prev: Biblioteca<77>,  Up: Python 3 11 0 alpha 4

1.23.39.7 Núcleo e embutidos
............................

   - bpo-44525(1): Specialize the CALL_FUNCTION instruction for calls to
     builtin types with a single argument.  Speeds up ‘range(x)’,
     ‘list(x)’, and specifically ‘type(obj)’.

   - bpo-42918(2): Fix bug where the built-in *note compile(): 192.
     function did not always raise a *note SyntaxError: 18d. when passed
     multiple statements in ‘single’ mode.  Patch by Weipeng Hong.

   - bpo-45953(3): The main interpreter in _PyRuntimeState.interpreters
     is now statically allocated (as part of _PyRuntime).  Likewise for
     the initial thread state of each interpreter.  This means less
     allocation during runtime init, as well as better memory locality
     for these key state objects.

   - bpo-45292(4): Complete the PEP 654(5) implementation: add
     ‘except*’.

   - bpo-43413(6): Revert changes in ‘set.__init__’.  Subclass of *note
     set: 5d9. needs to define a ‘__init__()’ method if it defines a
     ‘__new__()’ method with additional keyword parameters.

   - bpo-43931(7): Added the *note Py_Version: 756. constant which bears
     the same value as *note PY_VERSION_HEX: 757.  Patch by Gabriele N.
     Tornetta.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44525

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42918

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45953

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45292

   (5) https://peps.python.org/pep-0654/

   (6) https://bugs.python.org/issue?@action=redirect&bpo=43413

   (7) https://bugs.python.org/issue?@action=redirect&bpo=43931


File: python.info,  Node: Biblioteca<78>,  Next: Documentação<29>,  Prev: Núcleo e embutidos<76>,  Up: Python 3 11 0 alpha 4

1.23.39.8 Biblioteca
....................

   - bpo-46342(1): The ‘@typing.final’ decorator now sets the
     ‘__final__’ attribute on the decorated object to allow runtime
     introspection.  Patch by Jelle Zijlstra.

   - bpo-46328(2): Added the *note sys.exception(): 68b. method which
     returns the active exception instance.

   - bpo-46307(3): Add *note string.Template.is_valid(): 686. and *note
     string.Template.get_identifiers(): 685. methods.

   - bpo-46306(4): Assume that *note types.CodeType: 2df. always has
     ‘types.CodeType.co_firstlineno’ in *note doctest: 3a.

   - bpo-40479(5): Fix *note hashlib: 68. 'usedforsecurity' option to
     work correctly with OpenSSL 3.0.0 in FIPS mode.

   - bpo-46070(6): Fix possible segfault when importing the *note
     asyncio: a. module from different sub-interpreters in parallel.
     Patch by Erlend E. Aasland.

   - bpo-46244(7): Removed ‘__slots__’ from *note typing.ParamSpec: 15e.
     and *note typing.TypeVar: 15d.  They served no purpose.  Patch by
     Arie Bovenberg.

   - bpo-46278(8): Reflect ‘context’ argument in
     ‘AbstractEventLoop.call_*()’ methods.  Loop implementations already
     support it.

   - bpo-46269(9): Remove special-casing of ‘__new__’ in *note
     enum.Enum.__dir__(): 198d.

   - bpo-46266(10): Improve day constants in *note calendar: 14.

     Now all constants (‘MONDAY’ … ‘SUNDAY’) are documented, tested, and
     added to ‘__all__’.

   - bpo-46257(11): Optimized the mean, variance, and stdev functions in
     the statistics module.  If the input is an iterator, it is consumed
     in a single pass rather than eating memory by conversion to a list.
     The single pass algorithm is about twice as fast as the previous
     two pass code.

   - bpo-41011(12): Added two new variables to 'pyvenv.cfg' which is
     generated by *note venv: 111. module: 'executable' for the
     executable and 'command' for the command line used to create the
     environment.

   - bpo-46239(13): Improve error message when importing
     ‘asyncio.windows_events’ on non-Windows.

   - bpo-46238(14): Reuse ‘_winapi’ constants in
     ‘asyncio.windows_events’.

   - bpo-46222(15): Adding ‘SF_NOCACHE’ sendfile constant for FreeBSD
     for the posixmodule.

   - bpo-37295(16): Add fast path for ‘0 <= k <= n <= 67’ for *note
     math.comb(): 6d0.

   - bpo-46176(17): Adding the ‘MAP_STACK’ constant for the mmap module.

   - bpo-43424(18): Deprecate ‘webbrowser.MacOSXOSAScript._name’ and use
     ‘name’ instead.

   - bpo-45321(19): Added missing error codes to module
     ‘xml.parsers.expat.errors’.

   - bpo-46125(20): Refactor tests to test traversable API directly.
     Includes changes from importlib 5.4.0.

   - bpo-46118(21): Moved importlib.resources and its related
     functionality to a package.

   - bpo-37578(22): Add 'include_hidden' parameter to *note glob(): 29f.
     and *note iglob(): 80a. to match hidden files and directories when
     using special characters like ‘*’, ‘**’, ‘?’ and ‘[]’.

   - bpo-20369(23): *note concurrent.futures.wait(): 198e. no longer
     blocks forever when given duplicate Futures.  Patch by Kumar
     Aditya.

   - bpo-46105(24): Honor spec when generating requirement specs with
     urls and extras (importlib_metadata 4.8.3).

   - bpo-44893(25): EntryPoint objects are no longer tuples.
     Recommended means to access is by attribute (‘.name’, ‘.group’) or
     accessor (‘.load()’).  Access by index is deprecated and will raise
     deprecation warning.

   - bpo-22815(26): Print unexpected successes together with failures
     and errors in summary in *note unittest.TextTestResult: 531.

   - bpo-22047(27): Calling ‘add_argument_group()’ on an argument group
     is deprecated.  Calling ‘add_argument_group()’ or
     ‘add_mutually_exclusive_group()’ on a mutually exclusive group is
     deprecated.

     These features were never supported and do not always work
     correctly.  The functions exist on the API by accident through
     inheritance and will be removed in the future.

   - bpo-26952(28): *note argparse: 6. raises *note ValueError: 202.
     with clear message when trying to render usage for an empty
     mutually exclusive group.  Previously it raised a cryptic *note
     IndexError: 157e.

   - bpo-45615(29): Functions in the *note traceback: fe. module raise
     *note TypeError: 2c3. rather than *note AttributeError: 34b. when
     an exception argument is not of type *note BaseException: 5bb.

   - bpo-16594(30): Add allow allow_reuse_port flag in socketserver.

   - bpo-27718(31): Fix help for the *note signal: c6. module.  Some
     functions (e.g.  ‘signal()’ and ‘getsignal()’) were omitted.

   - bpo-46032(32): The ‘registry()’ method of *note
     functools.singledispatch(): 639. functions checks now the first
     argument or the first parameter annotation and raises a TypeError
     if it is not supported.  Previously unsupported “types” were
     ignored (e.g.  ‘typing.List[int]’) or caused an error at calling
     time (e.g.  ‘list[int]’).

   - bpo-46014(33): Add ability to use ‘typing.Union’ and
     ‘types.UnionType’ as dispatch argument to
     ‘functools.singledispatch’.  Patch provided by Yurii Karabas.

   - bpo-27062(34): Add ‘__all__’ to *note inspect: 7e, patch by Kumar
     Aditya.

   - bpo-46018(35): Ensure that *note math.expm1(): 122c. does not raise
     on underflow.

   - bpo-46016(36): Adding ‘F_DUP2FD’ and ‘F_DUP2FD_CLOEXEC’ constants
     from FreeBSD into the *note fcntl: 59. module.

   - bpo-45755(37): *note typing: 104. generic aliases now reveal the
     class attributes of the original generic class when passed to
     ‘dir()’.  This was the behavior up to Python 3.6, but was changed
     in 3.7-3.9.

   - bpo-45874(38): The empty query string, consisting of no query
     arguments, is now handled correctly in ‘urllib.parse.parse_qsl’.
     This caused problems before when strict parsing was enabled.

   - bpo-44674(39): Change how dataclasses disallows mutable default
     values.  It used to use a list of known types (list, dict, set).
     Now it disallows unhashable objects to be defaults.  It’s using
     unhashability as a proxy for mutability.  Patch by Eric V. Smith,
     idea by Raymond Hettinger.

   - bpo-23882(40): Remove namespace package (PEP 420) support from
     unittest discovery.  It was introduced in Python 3.4 but has been
     broken since Python 3.7.

   - bpo-25066(41): Added a ‘__repr__()’ method to *note
     multiprocessing.Event: 198f. objects, patch by Kumar Aditya.

   - bpo-45643(42): Added *note signal.SIGSTKFLT: 1990. on platforms
     where this signal is defined.

   - bpo-44092(43): Fetch across rollback no longer raises *note
     InterfaceError: 67d.  Instead we leave it to the SQLite library to
     handle these cases.  Patch by Erlend E. Aasland.

   - bpo-42413(44): Replace ‘concurrent.futures.TimeoutError’ and
     ‘asyncio.TimeoutError’ with builtin *note TimeoutError: 838, keep
     these names as deprecated aliases.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46342

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46328

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46307

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46306

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40479

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46070

   (7) https://bugs.python.org/issue?@action=redirect&bpo=46244

   (8) https://bugs.python.org/issue?@action=redirect&bpo=46278

   (9) https://bugs.python.org/issue?@action=redirect&bpo=46269

   (10) https://bugs.python.org/issue?@action=redirect&bpo=46266

   (11) https://bugs.python.org/issue?@action=redirect&bpo=46257

   (12) https://bugs.python.org/issue?@action=redirect&bpo=41011

   (13) https://bugs.python.org/issue?@action=redirect&bpo=46239

   (14) https://bugs.python.org/issue?@action=redirect&bpo=46238

   (15) https://bugs.python.org/issue?@action=redirect&bpo=46222

   (16) https://bugs.python.org/issue?@action=redirect&bpo=37295

   (17) https://bugs.python.org/issue?@action=redirect&bpo=46176

   (18) https://bugs.python.org/issue?@action=redirect&bpo=43424

   (19) https://bugs.python.org/issue?@action=redirect&bpo=45321

   (20) https://bugs.python.org/issue?@action=redirect&bpo=46125

   (21) https://bugs.python.org/issue?@action=redirect&bpo=46118

   (22) https://bugs.python.org/issue?@action=redirect&bpo=37578

   (23) https://bugs.python.org/issue?@action=redirect&bpo=20369

   (24) https://bugs.python.org/issue?@action=redirect&bpo=46105

   (25) https://bugs.python.org/issue?@action=redirect&bpo=44893

   (26) https://bugs.python.org/issue?@action=redirect&bpo=22815

   (27) https://bugs.python.org/issue?@action=redirect&bpo=22047

   (28) https://bugs.python.org/issue?@action=redirect&bpo=26952

   (29) https://bugs.python.org/issue?@action=redirect&bpo=45615

   (30) https://bugs.python.org/issue?@action=redirect&bpo=16594

   (31) https://bugs.python.org/issue?@action=redirect&bpo=27718

   (32) https://bugs.python.org/issue?@action=redirect&bpo=46032

   (33) https://bugs.python.org/issue?@action=redirect&bpo=46014

   (34) https://bugs.python.org/issue?@action=redirect&bpo=27062

   (35) https://bugs.python.org/issue?@action=redirect&bpo=46018

   (36) https://bugs.python.org/issue?@action=redirect&bpo=46016

   (37) https://bugs.python.org/issue?@action=redirect&bpo=45755

   (38) https://bugs.python.org/issue?@action=redirect&bpo=45874

   (39) https://bugs.python.org/issue?@action=redirect&bpo=44674

   (40) https://bugs.python.org/issue?@action=redirect&bpo=23882

   (41) https://bugs.python.org/issue?@action=redirect&bpo=25066

   (42) https://bugs.python.org/issue?@action=redirect&bpo=45643

   (43) https://bugs.python.org/issue?@action=redirect&bpo=44092

   (44) https://bugs.python.org/issue?@action=redirect&bpo=42413


File: python.info,  Node: Documentação<29>,  Next: Testes<33>,  Prev: Biblioteca<78>,  Up: Python 3 11 0 alpha 4

1.23.39.9 Documentação
......................

   - bpo-46196(1): Document method *note cmd.Cmd.columnize(): 1992.

   - bpo-46120(2): State that ‘|’ is preferred for readability over
     ‘Union’ in the *note typing: 104. docs.

   - bpo-46109(3): Extracted ‘importlib.resources’ and
     ‘importlib.resources.abc’ documentation into separate files.

   - bpo-19737(4): Update the documentation for the *note globals():
     1993. function.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46196

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46120

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46109

   (4) https://bugs.python.org/issue?@action=redirect&bpo=19737


File: python.info,  Node: Testes<33>,  Next: Construção<37>,  Prev: Documentação<29>,  Up: Python 3 11 0 alpha 4

1.23.39.10 Testes
.................

   - bpo-46296(1): Add a test case for *note enum: 56. with ‘_use_args_
     == True’ and ‘_member_type_ == object’.

   - bpo-46205(2): Fix hang in runtest_mp due to race condition

   - bpo-46263(3): Fix test_capi on FreeBSD 14-dev: instruct jemalloc to
     not fill freed memory with junk byte.

   - bpo-46262(4): Cover ‘ValueError’ path in tests for
     ‘enum.Flag._missing_()’.

   - bpo-46150(5): Now ‘fakename’ in
     ‘test_pathlib.PosixPathTest.test_expanduser’ is checked to be
     non-existent.

   - bpo-46129(6): Rewrite ‘asyncio.locks’ tests with *note
     unittest.IsolatedAsyncioTestCase: 30c. usage.

   - bpo-23819(7): Fixed *note asyncio: a. tests in python optimized
     mode.  Patch by Kumar Aditya.

   - bpo-46114(8): Fix test case for OpenSSL 3.0.1 version.  OpenSSL 3.0
     uses ‘0xMNN00PP0L’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46296

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46205

   (3) https://bugs.python.org/issue?@action=redirect&bpo=46263

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46262

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46150

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46129

   (7) https://bugs.python.org/issue?@action=redirect&bpo=23819

   (8) https://bugs.python.org/issue?@action=redirect&bpo=46114


File: python.info,  Node: Construção<37>,  Next: Windows<31>,  Prev: Testes<33>,  Up: Python 3 11 0 alpha 4

1.23.39.11 Construção
.....................

   - bpo-44133(1): When Python is configured with *note
     -without-static-libpython: 892, the Python static library
     (libpython.a) is no longer built.  Patch by Victor Stinner.

   - bpo-44133(2): When Python is built without *note -enable-shared:
     866, the ‘python’ program is now linked to object files, rather
     than being linked to the Python static library (libpython.a), to
     make sure that all symbols are exported.  Previously, the linker
     omitted some symbols like the ‘Py_FrozenMain()’ function.  Patch by
     Victor Stinner.

   - bpo-40280(3): The ‘configure’ script has a new option
     ‘--with-emscripten-target’ to select browser or node as Emscripten
     build target.

   - bpo-46315(4): Added and fixed ‘#ifdef HAVE_FEATURE’ checks for
     functionality that is not available on WASI platform.

   - bpo-45723(5): Fixed a regression in ‘configure’ check for *note
     select.epoll(): fc8.

   - bpo-46263(6): ‘configure’ no longer sets ‘MULTIARCH’ on FreeBSD
     platforms.

   - bpo-46106(7): Updated OpenSSL to 1.1.1m in Windows builds, macOS
     installer builds, and CI. Patch by Kumar Aditya.

   - bpo-46088(8): Automatically detect or install bootstrap Python
     runtime when building from Visual Studio.

   - bpo-46072(9): Add a –with-pystats configure option to turn on
     internal statistics gathering.

   - bpo-40280(10): Um novo diretório ‘Tools/wasm’ contém auxiliares
     relacionados a WebAssembly, como ‘config.site’ próprio para
     wasm32-emscripten, arquivos do gerador wasm para empacotar a stdlib
     e um README.

   - bpo-46023(11): ‘makesetup’ no longer builds extensions that have
     been marked as 'disabled'.  This allows users to disable modules in
     ‘Modules/Setup.local’.

   - bpo-45949(12): Use pure Python ‘freeze_module’ for all but
     importlib bootstrap files.  ‘--with-freeze-module’ ‘configure’
     option is no longer needed for cross builds.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44133

   (2) https://bugs.python.org/issue?@action=redirect&bpo=44133

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40280

   (4) https://bugs.python.org/issue?@action=redirect&bpo=46315

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45723

   (6) https://bugs.python.org/issue?@action=redirect&bpo=46263

   (7) https://bugs.python.org/issue?@action=redirect&bpo=46106

   (8) https://bugs.python.org/issue?@action=redirect&bpo=46088

   (9) https://bugs.python.org/issue?@action=redirect&bpo=46072

   (10) https://bugs.python.org/issue?@action=redirect&bpo=40280

   (11) https://bugs.python.org/issue?@action=redirect&bpo=46023

   (12) https://bugs.python.org/issue?@action=redirect&bpo=45949


File: python.info,  Node: Windows<31>,  Next: macOS<23>,  Prev: Construção<37>,  Up: Python 3 11 0 alpha 4

1.23.39.12 Windows
..................

   - bpo-46217(1): Removed parameter that is unsupported on Windows 8.1
     and early Windows 10 and may have caused build or runtime failures.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46217


File: python.info,  Node: macOS<23>,  Next: API C<33>,  Prev: Windows<31>,  Up: Python 3 11 0 alpha 4

1.23.39.13 macOS
................

   - bpo-40477(1): The Python Launcher app for macOS now properly
     launches scripts and, if necessary, the Terminal app when running
     on recent macOS releases.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40477


File: python.info,  Node: API C<33>,  Prev: macOS<23>,  Up: Python 3 11 0 alpha 4

1.23.39.14 API C
................

   - bpo-46236(1): Fix a bug in *note PyFunction_GetAnnotations(): 18bf.
     that caused it to return a ‘tuple’ instead of a ‘dict’.

   - bpo-46140(2): *note PyBuffer_GetPointer(): 759, *note
     PyBuffer_FromContiguous(): 75c, *note PyBuffer_ToContiguous(): 75b.
     and *note PyMemoryView_FromBuffer(): 761. now take buffer info by
     ‘const Py_buffer *’ instead of ‘Py_buffer *’, as they do not need
     mutability.  *note PyBuffer_FromContiguous(): 75c. also now takes
     the source buffer as ‘const void *’, and similarly *note
     PyBuffer_GetPointer(): 759. takes the strides as ‘const Py_ssize_t
     *’.

   - bpo-45855(3): Document that the 'no_block' argument to *note
     PyCapsule_Import(): 1999. is a no-op now.

   - bpo-45855(4): Replaced deprecated usage of *note
     PyImport_ImportModuleNoBlock(): 3bd. with *note
     PyImport_ImportModule(): 3be. in stdlib modules.  Patch by Kumar
     Aditya.

   - bpo-46007(5): The ‘PyUnicode_CHECK_INTERNED()’ macro has been
     excluded from the limited C API. It was never usable there, because
     it used internal structures which are not available in the limited
     C API. Patch by Victor Stinner.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46236

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46140

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45855

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45855

   (5) https://bugs.python.org/issue?@action=redirect&bpo=46007


File: python.info,  Node: Python 3 11 0 alpha 3,  Next: Python 3 11 0 alpha 2,  Prev: Python 3 11 0 alpha 4,  Up: Changelog

1.23.40 Python 3.11.0 alpha 3
-----------------------------

'Data de lançamento: 2021-12-08'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<77>.
* Biblioteca: Biblioteca<79>.
* Núcleo e embutidos: Núcleo e embutidos<78>.
* Biblioteca: Biblioteca<80>.
* Documentação: Documentação<30>.
* Testes: Testes<34>.
* Construção: Construção<38>.
* Windows: Windows<32>.
* macOS: macOS<24>.
* API C: API C<34>.


File: python.info,  Node: Núcleo e embutidos<77>,  Next: Biblioteca<79>,  Up: Python 3 11 0 alpha 3

1.23.40.1 Núcleo e embutidos
............................

   - bpo-46009(1): Restore behavior from 3.9 and earlier when sending
     non-None to newly started generator.  In 3.9 this did not affect
     the state of the generator.  In 3.10.0 and 3.10.1
     ‘gen_func().send(0)’ is equivalent to
     ‘gen_func().throw(TypeError(...)’ which exhausts the generator.  In
     3.10.2 onward, the behavior has been reverted to that of 3.9.

   - bpo-46004(2): Fix the *note SyntaxError: 18d. location for errors
     involving for loops with invalid targets.  Patch by Pablo Galindo

   - bpo-45711(3): ‘_PyErr_ChainStackItem()’ no longer normalizes
     ‘exc_info’ (including setting the traceback on the exception
     instance) because ‘exc_info’ is always normalized.

   - bpo-45607(4): The ‘__note__’ field was added to *note
     BaseException: 5bb.  It is ‘None’ by default but can be set to a
     string which is added to the exception’s traceback.

   - bpo-45947(5): Place pointers to dict and values immediately before
     GC header.  This reduces number of dependent memory loads to access
     either dict or values from 3 to 1.

   - bpo-45915(6): ‘is_valid_fd’ now uses faster ‘fcntl(fd, F_GETFD)’ on
     Linux, macOS, and Windows.

   - bpo-44530(7): Reverts a change to the ‘code.__new__’ *note audit
     event: 199c. from an earlier prerelease.

   - bpo-42268(8): Fail the configure step if the selected compiler
     doesn’t support memory sanitizer.  Patch by Pablo Galindo

   - bpo-45711(9): The three values of ‘exc_info’ are now always
     consistent with each other.  In particular, the ‘type’ and
     ‘traceback’ fields are now derived from the exception instance.
     This impacts the return values of *note sys.exc_info(): 68a. and
     *note PyErr_GetExcInfo(): 772. if the exception instance is
     modified while the exception is handled, as well as *note
     PyErr_SetExcInfo(): 771, which now ignores the ‘type’ and
     ‘traceback’ arguments provided to it.

   - bpo-45727(10): Refine the custom syntax error that suggests that a
     comma may be missing to trigger only when the expressions are
     detected between parentheses or brackets.  Patch by Pablo Galindo

   - bpo-45885(11): Specialized the ‘COMPARE_OP’ opcode using the PEP
     659 machinery.

   - bpo-45786(12): Allocate space for the interpreter frame in the
     frame object, to avoid an additional allocation when the frame
     object outlives the frame activation.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46009

   (2) https://bugs.python.org/issue?@action=redirect&bpo=46004

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45711

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45607

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45947

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45915

   (7) https://bugs.python.org/issue?@action=redirect&bpo=44530

   (8) https://bugs.python.org/issue?@action=redirect&bpo=42268

   (9) https://bugs.python.org/issue?@action=redirect&bpo=45711

   (10) https://bugs.python.org/issue?@action=redirect&bpo=45727

   (11) https://bugs.python.org/issue?@action=redirect&bpo=45885

   (12) https://bugs.python.org/issue?@action=redirect&bpo=45786


File: python.info,  Node: Biblioteca<79>,  Next: Núcleo e embutidos<78>,  Prev: Núcleo e embutidos<77>,  Up: Python 3 11 0 alpha 3

1.23.40.2 Biblioteca
....................

   - bpo-45614(1): Fix *note traceback: fe. display for exceptions with
     invalid module name.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45614


File: python.info,  Node: Núcleo e embutidos<78>,  Next: Biblioteca<80>,  Prev: Biblioteca<79>,  Up: Python 3 11 0 alpha 3

1.23.40.3 Núcleo e embutidos
............................

   - bpo-45813(1): Fix crash when calling coro.cr_frame.clear() after
     coroutine has been freed.

   - bpo-45811(2): Improve the tokenizer errors when encountering
     invisible control characters in the parser.  Patch by Pablo Galindo

   - bpo-45848(3): Allow the parser to obtain error lines directly from
     encoded files.  Patch by Pablo Galindo

   - bpo-45709(4): Restore behavior from 3.10 when tracing an exception
     raised within a with statement.

   - bpo-44525(5): Adds new *note COPY_FREE_VARS: 6fe. opcode, to make
     copying of free variables from function to frame explicit.  Helps
     optimization of calls to Python function.

   - bpo-45829(6): Specialize *note BINARY_SUBSCR: 1835. for classes
     with a ‘__getitem__’ method implemented in Python

   - bpo-45826(7): Fixed a crash when calling ‘.with_traceback(None)’ on
     ‘NameError’.  This occurs internally in
     ‘unittest.TestCase.assertRaises()’.

   - bpo-45822(8): Fixed a bug in the parser that was causing it to not
     respect PEP 263(9) coding cookies when no flags are provided.
     Patch by Pablo Galindo

   - bpo-45820(10): Fix a segfault when the parser fails without reading
     any input.  Patch by Pablo Galindo

   - bpo-45636(11): Simplify the implementation of *note BINARY_OP: 706.
     by indexing into an array of function pointers (rather than
     switching on the oparg).

   - bpo-42540(12): Fix crash when *note os.fork(): 197. is called with
     an active non-default memory allocator.

   - bpo-45738(13): Fix computation of error location for invalid
     continuation characters in the parser.  Patch by Pablo Galindo.

   - bpo-45636(14): Remove an existing “fast path” for old-style string
     formatting, since it no longer appears to have any measurable
     impact.

   - bpo-45753(15): Make recursion checks a bit more efficient by
     tracking amount of calls left before overflow.

   - bpo-45773(16): Fix a compiler hang when attempting to optimize
     certain jump patterns.

   - bpo-45764(17): The parser now gives a better error message when
     leaving out the opening parenthesis ‘(’ after a ‘def’-statement:

          >>> def f:
            File "<stdin>", line 1
              def f:
                   ^
          SyntaxError: expected '('

   - bpo-45609(18): Specialized the ‘STORE_SUBSCR’ opcode using the PEP
     659 machinery.

   - bpo-45636(19): Replace all numeric ‘BINARY_*’ and ‘INPLACE_*’
     instructions with a single *note BINARY_OP: 706. implementation.

   - bpo-45582(20): Path calculation (known as ‘getpath’) has been
     reimplemented as a frozen Python module.  This should have no
     visible impact, but may affect calculation of all paths referenced
     in *note sys: d9. and *note sysconfig: db.

   - bpo-45450(21): Improve the syntax error message for parenthesized
     arguments.  Patch by Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45813

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45811

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45848

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45709

   (5) https://bugs.python.org/issue?@action=redirect&bpo=44525

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45829

   (7) https://bugs.python.org/issue?@action=redirect&bpo=45826

   (8) https://bugs.python.org/issue?@action=redirect&bpo=45822

   (9) https://peps.python.org/pep-0263/

   (10) https://bugs.python.org/issue?@action=redirect&bpo=45820

   (11) https://bugs.python.org/issue?@action=redirect&bpo=45636

   (12) https://bugs.python.org/issue?@action=redirect&bpo=42540

   (13) https://bugs.python.org/issue?@action=redirect&bpo=45738

   (14) https://bugs.python.org/issue?@action=redirect&bpo=45636

   (15) https://bugs.python.org/issue?@action=redirect&bpo=45753

   (16) https://bugs.python.org/issue?@action=redirect&bpo=45773

   (17) https://bugs.python.org/issue?@action=redirect&bpo=45764

   (18) https://bugs.python.org/issue?@action=redirect&bpo=45609

   (19) https://bugs.python.org/issue?@action=redirect&bpo=45636

   (20) https://bugs.python.org/issue?@action=redirect&bpo=45582

   (21) https://bugs.python.org/issue?@action=redirect&bpo=45450


File: python.info,  Node: Biblioteca<80>,  Next: Documentação<30>,  Prev: Núcleo e embutidos<78>,  Up: Python 3 11 0 alpha 3

1.23.40.4 Biblioteca
....................

   - bpo-27946(1): Fix possible crash when getting an attribute of *note
     xml.etree.ElementTree.Element: 310. simultaneously with replacing
     the ‘attrib’ dict.

   - bpo-45711(2): Make *note asyncio: a. normalize exceptions as soon
     as they are captured with *note PyErr_Fetch(): 3f3, and before they
     are stored as an exc_info triplet.  This brings *note asyncio: a.
     in line with the rest of the codebase, where an exc_info triplet is
     always normalized.

   - bpo-23819(3): Replaced asserts with exceptions in asyncio, patch by
     Kumar Aditya.

   - bpo-13236(4): *note unittest.TextTestResult: 531. and *note
     unittest.TextTestRunner: 183e. flush now the output stream more
     often.

   - bpo-45917(5): Added *note math.exp2(): 660.:, which returns 2
     raised to the power of x.

   - bpo-37658(6): Fix issue when on certain conditions
     ‘asyncio.wait_for()’ may allow a coroutine to complete
     successfully, but fail to return the result, potentially causing
     memory leaks or other issues.

   - bpo-45876(7): Improve the accuracy of stdev() and pstdev() in the
     statistics module.  When the inputs are floats or fractions, the
     output is a correctly rounded float

   - bpo-44649(8): Handle dataclass(slots=True) with a field that has
     default a default value, but for which init=False.

   - bpo-45803(9): Added missing kw_only parameter to
     dataclasses.make_dataclass().

   - bpo-45837(10): The ‘turtle.RawTurtle.settiltangle()’ is deprecated
     since Python 3.1, it now emits a deprecation warning and will be
     removed in Python 3.13.

     Use ‘turtle.RawTurtle.tiltangle()’ instead.

     ‘turtle.RawTurtle.tiltangle()’ was earlier incorrectly marked as
     deprecated, its docstring has been corrected.

     Patch por Hugo van Kemenade.

   - bpo-45831(11): *note faulthandler: 58. can now write ASCII-only
     strings (like filenames and function names) with a single write()
     syscall when dumping a traceback.  It reduces the risk of getting
     an unreadable dump when two threads or two processes dump a
     traceback to the same file (like stderr) at the same time.  Patch
     by Victor Stinner.

   - bpo-45828(12): ‘sqlite’ C callbacks now use unraisable exceptions
     if callback tracebacks are enabled.  Patch by Erlend E. Aasland.

   - bpo-41735(13): Fix thread lock in ‘zlib.Decompress.flush()’ method
     before ‘PyObject_GetBuffer’.

   - bpo-45235(14): Reverted an argparse bugfix that caused regression
     in the handling of default arguments for subparsers.  This
     prevented leaf level arguments from taking precedence over root
     level arguments.

   - bpo-45754(15): Fix a regression in Python 3.11a1 and 3.11a2 where
     *note sqlite3: cf. incorrectly would use ‘SQLITE_LIMIT_LENGTH’ when
     checking SQL statement lengths.  Now, ‘SQLITE_LIMIT_SQL_LENGTH’ is
     used.  Patch by Erlend E. Aasland.

   - bpo-45766(16): Added 'proportional' option to *note
     statistics.linear_regression(): 834.

   - bpo-45765(17): In importlib.metadata, fix distribution discovery
     for an empty path.

   - bpo-45757(18): Fix bug where *note dis: 38. produced an incorrect
     oparg when *note EXTENDED_ARG: 18a6. is followed by an opcode that
     does not use its argument.

   - bpo-45644(19): In-place JSON file formatting using ‘python3 -m
     json.tool infile infile’ now works correctly, previously it left
     the file empty.  Patch by Chris Wesseling.

   - bpo-45703(20): When a namespace package is imported before another
     module from the same namespace is created/installed in a different
     *note sys.path: 3b4. location while the program is running, calling
     the *note importlib.invalidate_caches(): c2a. function will now
     also guarantee the new module is noticed.

   - bpo-45535(21): Improve output of ‘dir()’ with Enums.

   - bpo-45664(22): Fix *note types.resolve_bases(): bb4. and *note
     types.new_class(): 11a0. for *note types.GenericAlias: 7ed.
     instance as a base.

   - bpo-45663(23): Fix *note dataclasses.is_dataclass(): 19a0. for
     dataclasses which are subclasses of *note types.GenericAlias: 7ed.

   - bpo-45662(24): Fix the repr of *note dataclasses.InitVar: 193e.
     with a type alias to the built-in class, e.g.
     ‘InitVar[list[int]]’.

   - bpo-43137(25): Launch GNOME web browsers via gio tool instead of
     obsolete gvfs-open

   - bpo-45429(26): On Windows, *note time.sleep(): 69d. now uses a
     waitable timer which supports high-resolution timers.  Patch by
     Donghee Na and Eryk Sun.

   - bpo-37295(27): Optimize *note math.comb(): 6d0. and *note
     math.perm(): 6d1.

   - bpo-45514(28): Deprecated legacy functions in *note
     importlib.resources: 7b.

   - bpo-45507(29): Add tests for truncated/missing trailers in
     gzip.decompress implementation.

   - bpo-45359(30): Implement PEP 585(31) for *note
     graphlib.TopologicalSorter: 8e7.

   - bpo-44733(32): Add ‘max_tasks_per_child’ to *note
     concurrent.futures.ProcessPoolExecutor: 8f4.  This allows users to
     specify the maximum number of tasks a single process should execute
     before the process needs to be restarted.

   - bpo-28806(33): Improve netrc library.  netrc file no longer needs
     to contain all tokens.  And if the login name is anonymous,
     security check is no longer need.

   - bpo-43498(34): Avoid a possible '“RuntimeError: dictionary changed
     size during iteration”' when adjusting the process count of
     ‘ProcessPoolExecutor’.

   - bpo-42158(35): Add MIME types for N-quads, N-triples, Notation3 and
     TriG to ‘mimetypes’.

   - bpo-30533(36): Add *note inspect.getmembers_static(): 649. , it
     return all members without triggering dynamic lookup via the
     descriptor protocol.  Patch by Weipeng Hong.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27946

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45711

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23819

   (4) https://bugs.python.org/issue?@action=redirect&bpo=13236

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45917

   (6) https://bugs.python.org/issue?@action=redirect&bpo=37658

   (7) https://bugs.python.org/issue?@action=redirect&bpo=45876

   (8) https://bugs.python.org/issue?@action=redirect&bpo=44649

   (9) https://bugs.python.org/issue?@action=redirect&bpo=45803

   (10) https://bugs.python.org/issue?@action=redirect&bpo=45837

   (11) https://bugs.python.org/issue?@action=redirect&bpo=45831

   (12) https://bugs.python.org/issue?@action=redirect&bpo=45828

   (13) https://bugs.python.org/issue?@action=redirect&bpo=41735

   (14) https://bugs.python.org/issue?@action=redirect&bpo=45235

   (15) https://bugs.python.org/issue?@action=redirect&bpo=45754

   (16) https://bugs.python.org/issue?@action=redirect&bpo=45766

   (17) https://bugs.python.org/issue?@action=redirect&bpo=45765

   (18) https://bugs.python.org/issue?@action=redirect&bpo=45757

   (19) https://bugs.python.org/issue?@action=redirect&bpo=45644

   (20) https://bugs.python.org/issue?@action=redirect&bpo=45703

   (21) https://bugs.python.org/issue?@action=redirect&bpo=45535

   (22) https://bugs.python.org/issue?@action=redirect&bpo=45664

   (23) https://bugs.python.org/issue?@action=redirect&bpo=45663

   (24) https://bugs.python.org/issue?@action=redirect&bpo=45662

   (25) https://bugs.python.org/issue?@action=redirect&bpo=43137

   (26) https://bugs.python.org/issue?@action=redirect&bpo=45429

   (27) https://bugs.python.org/issue?@action=redirect&bpo=37295

   (28) https://bugs.python.org/issue?@action=redirect&bpo=45514

   (29) https://bugs.python.org/issue?@action=redirect&bpo=45507

   (30) https://bugs.python.org/issue?@action=redirect&bpo=45359

   (31) https://peps.python.org/pep-0585/

   (32) https://bugs.python.org/issue?@action=redirect&bpo=44733

   (33) https://bugs.python.org/issue?@action=redirect&bpo=28806

   (34) https://bugs.python.org/issue?@action=redirect&bpo=43498

   (35) https://bugs.python.org/issue?@action=redirect&bpo=42158

   (36) https://bugs.python.org/issue?@action=redirect&bpo=30533


File: python.info,  Node: Documentação<30>,  Next: Testes<34>,  Prev: Biblioteca<80>,  Up: Python 3 11 0 alpha 3

1.23.40.5 Documentação
......................

   - bpo-42238(1): ‘make -C Doc suspicious’ will be removed soon in
     favor of ‘make -C Doc check’, mark it as deprecated.

   - bpo-45840(2): Improve cross-references in the documentation for the
     data model.

   - bpo-45640(3): Properly marked-up grammar tokens in the
     documentation are now clickable and take you to the definition of a
     given piece of grammar.  Patch by Arthur Milchior.

   - bpo-45788(4): Link doc for sys.prefix to sysconfig doc on
     installation paths.

   - bpo-45772(5): ‘socket.socket’ documentation is corrected to a class
     from a function.

   - bpo-45392(6): Update the docstring of the *note type: d6b. built-in
     to remove a redundant line and to mention keyword arguments for the
     constructor.

   - bpo-45250(7): Update the documentation to note that CPython does
     not consistently require iterators to define ‘__iter__’.

   - bpo-25381(8): In the extending chapter of the extending doc, update
     a paragraph about the global variables containing exception
     information.

   - bpo-43905(9): Expanded *note astuple(): 1822. and *note asdict():
     1819. docs, warning about deepcopy being applied and providing a
     workaround.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42238

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45840

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45640

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45788

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45772

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45392

   (7) https://bugs.python.org/issue?@action=redirect&bpo=45250

   (8) https://bugs.python.org/issue?@action=redirect&bpo=25381

   (9) https://bugs.python.org/issue?@action=redirect&bpo=43905


File: python.info,  Node: Testes<34>,  Next: Construção<38>,  Prev: Documentação<30>,  Up: Python 3 11 0 alpha 3

1.23.40.6 Testes
................

   - bpo-45695(1): Out-of-tree builds with a read-only source directory
     are now tested by CI.

   - bpo-19460(2): Add new Test for
     ‘Lib/email/mime/nonmultipart.py::MIMENonMultipart’.

   - bpo-45835(3): Fix race condition in test_queue tests with multiple
     “feeder” threads.

   - bpo-45783(4): The test for the freeze tool now handles file moves
     and deletions.

   - bpo-45745(5): Remove the ‘--findleaks’ command line option of
     regrtest: use the ‘--fail-env-changed’ option instead.  Since
     Python 3.7, it was a deprecated alias to the ‘--fail-env-changed’
     option.

   - bpo-45701(6): Add tests with ‘tuple’ type with *note
     functools.lru_cache(): 9f7. to ‘test_functools’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45695

   (2) https://bugs.python.org/issue?@action=redirect&bpo=19460

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45835

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45783

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45745

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45701


File: python.info,  Node: Construção<38>,  Next: Windows<32>,  Prev: Testes<34>,  Up: Python 3 11 0 alpha 3

1.23.40.7 Construção
....................

   - bpo-44035(1): CI now verifies that autoconf files have been
     regenerated with a current and unpatched autoconf package.

   - bpo-45950(2): The build system now uses a ‘_bootstrap_python’
     interpreter for freezing and deepfreezing again.  To speed up build
     process the build tools ‘_bootstrap_python’ and ‘_freeze_module’
     are no longer build with LTO.

   - bpo-45881(3): The ‘configure’ script now accepts
     ‘--with-build-python’ and ‘--with-freeze-module’ options to make
     cross compiling easier.

   - bpo-40280(4): Emscripten platform now uses ‘.wasm’ suffix by
     default.

   - bpo-40280(5): Disable unusable core extension modules on
     WASM/Emscripten targets.

   - bpo-40280(6): ‘configure’ now checks for socket ‘shutdown’
     function.  The check makes it possible to disable ‘SYS_shutdown’
     with ‘ac_cv_func_shutdown=no’ in CONFIG_SITE.

   - bpo-40280(7): ‘configure’ now checks for functions ‘fork1, getegid,
     geteuid, getgid, getppid, getuid, opendir, pipe, system, wait,
     ttyname’.

   - bpo-33393(8): Update ‘config.guess’ to 2021-06-03 and ‘config.sub’
     to 2021-08-14.  ‘Makefile’ now has an ‘update-config’ target to
     make updating more convenient.

   - bpo-45866(9): ‘make regen-all’ now produces the same output when
     run from a directory other than the source tree: when building
     Python out of the source tree.  pegen now strips directory of the
     “generated by pygen from <FILENAME>” header Patch by Victor
     Stinner.

   - bpo-40280(10): ‘configure’ now accepts machine ‘wasm32’ or ‘wasm64’
     and OS ‘wasi’ or ‘emscripten’ for cross building, e.g.
     ‘wasm32-unknown-emscripten’, ‘wasm32-wasi’, or
     ‘wasm32-unknown-wasi’.

   - bpo-41498(11): Python now compiles on platforms without ‘sigset_t’.
     Several functions in *note signal: c6. are not available when
     ‘sigset_t’ is missing.

     Based on patch by Roman Yurchak for pyodide.

   - bpo-45881(12): ‘setup.py’ now uses ‘CC’ from environment first to
     discover multiarch and cross compile paths.

   - bpo-45886(13): The ‘_freeze_module’ program path can now be
     overridden on the command line, e.g.  ‘make
     FREEZE_MODULE=../x86_64/Program/_freeze_module’.

   - bpo-45873(14): Get rid of the ‘_bootstrap_python’ build step.  The
     deepfreeze.py script is now run using ‘$(PYTHON_FOR_REGEN)’ which
     can be Python 3.7 or newer (on Windows, 3.8 or newer).

   - bpo-45847(15): Port builtin hashlib extensions to ‘PY_STDLIB_MOD’
     macro and ‘addext()’.

   - bpo-45723(16): Add ‘autoconf’ helpers for saving and restoring
     environment variables:

        * ‘SAVE_ENV’: Save ‘$CFLAGS’, ‘$LDFLAGS’, ‘$LIBS’, and
          ‘$CPPFLAGS’.

        * ‘RESTORE_ENV’: Restore ‘$CFLAGS’, ‘$LDFLAGS’, ‘$LIBS’, and
          ‘$CPPFLAGS’.

        * ‘WITH_SAVE_ENV([SCRIPT])’: Run ‘SCRIPT’ wrapped with
          ‘SAVE_ENV’ and ‘RESTORE_ENV’.

     Patch por Erlend E. Aasland.

   - bpo-45573(17): Mandatory core modules, that are required to
     bootstrap Python, are now in ‘Modules/Setup.bootstrap’.

   - bpo-45573(18): ‘configure’ now creates ‘Modules/Setup.stdlib’ with
     conditionally enabled/disabled extension module lines.  The file is
     not used, yet.

   - bpo-45573(19): ‘configure’ now uses a unified format to set state,
     compiler flags, and linker flags in Makefile.  The new macro
     ‘PY_STDLIB_MOD’ sets three variables that are consumed by
     ‘Modules/Setup’ and ‘setup.py’.

   - bpo-45816(20): Python now supports building with Visual Studio 2022
     (MSVC v143, VS Version 17.0).  Patch by Jeremiah Vivian.

   - bpo-45800(21): Settings for ‘pyexpat’ C extension are now detected
     by ‘configure’.  The bundled ‘expat’ library is built in
     ‘Makefile’.

   - bpo-45798(22): Settings for *note decimal: 36. internal C extension
     are now detected by ‘configure’.  The bundled ‘libmpdec’ library is
     built in ‘Makefile’.

   - bpo-45723(23): ‘configure’ has a new option ‘--with-pkg-config’ to
     disable or require pkg-config.

   - bpo-45774(24): The build dependencies for *note sqlite3: cf. are
     now detected by ‘configure’ and ‘pkg-config’.  Patch by Erlend E.
     Aasland.

   - bpo-45763(25): The build dependencies for *note zlib: 133, *note
     bz2: 13, and *note lzma: 8a. are now detected by ‘configure’.

   - bpo-45747(26): gdbm and dbm build dependencies are now detected by
     ‘configure’.

   - bpo-45743(27): On macOS, the build system no longer passes
     ‘search_paths_first’ to the linker.  The flag has been the default
     since Xcode 4 / macOS 10.6.

   - bpo-45723(28): ‘configure.ac’ is now compatible with autoconf 2.71.
     Deprecated checks ‘STDC_HEADERS’ and ‘AC_HEADER_TIME’ have been
     removed.

   - bpo-45723(29): ‘configure’ now prints a warning when pkg-config is
     missing.

   - bpo-45731(30): ‘configure --enable-loadable-sqlite-extensions’ is
     now handled by new ‘PY_SQLITE_ENABLE_LOAD_EXTENSION’ macro instead
     of logic in setup.py.

   - bpo-45723(31): configure.ac now uses custom helper macros and
     ‘AC_CACHE_CHECK’ to simplify and speed up configure runs.

   - bpo-45696(32): Skip the marshal step for frozen modules by
     generating C code that produces a set of ready-to-use code objects.
     This speeds up startup time by another 10% or more.

   - bpo-45561(33): Run smelly.py tool from $(srcdir).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44035

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45950

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45881

   (4) https://bugs.python.org/issue?@action=redirect&bpo=40280

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40280

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40280

   (7) https://bugs.python.org/issue?@action=redirect&bpo=40280

   (8) https://bugs.python.org/issue?@action=redirect&bpo=33393

   (9) https://bugs.python.org/issue?@action=redirect&bpo=45866

   (10) https://bugs.python.org/issue?@action=redirect&bpo=40280

   (11) https://bugs.python.org/issue?@action=redirect&bpo=41498

   (12) https://bugs.python.org/issue?@action=redirect&bpo=45881

   (13) https://bugs.python.org/issue?@action=redirect&bpo=45886

   (14) https://bugs.python.org/issue?@action=redirect&bpo=45873

   (15) https://bugs.python.org/issue?@action=redirect&bpo=45847

   (16) https://bugs.python.org/issue?@action=redirect&bpo=45723

   (17) https://bugs.python.org/issue?@action=redirect&bpo=45573

   (18) https://bugs.python.org/issue?@action=redirect&bpo=45573

   (19) https://bugs.python.org/issue?@action=redirect&bpo=45573

   (20) https://bugs.python.org/issue?@action=redirect&bpo=45816

   (21) https://bugs.python.org/issue?@action=redirect&bpo=45800

   (22) https://bugs.python.org/issue?@action=redirect&bpo=45798

   (23) https://bugs.python.org/issue?@action=redirect&bpo=45723

   (24) https://bugs.python.org/issue?@action=redirect&bpo=45774

   (25) https://bugs.python.org/issue?@action=redirect&bpo=45763

   (26) https://bugs.python.org/issue?@action=redirect&bpo=45747

   (27) https://bugs.python.org/issue?@action=redirect&bpo=45743

   (28) https://bugs.python.org/issue?@action=redirect&bpo=45723

   (29) https://bugs.python.org/issue?@action=redirect&bpo=45723

   (30) https://bugs.python.org/issue?@action=redirect&bpo=45731

   (31) https://bugs.python.org/issue?@action=redirect&bpo=45723

   (32) https://bugs.python.org/issue?@action=redirect&bpo=45696

   (33) https://bugs.python.org/issue?@action=redirect&bpo=45561


File: python.info,  Node: Windows<32>,  Next: macOS<24>,  Prev: Construção<38>,  Up: Python 3 11 0 alpha 3

1.23.40.8 Windows
.................

   - bpo-46105(1): Fixed calculation of *note sys.path: 3b4. in a venv
     on Windows.

   - bpo-45901(2): When installed through the Microsoft Store and set as
     the default app for ‘*.py’ files, command line arguments will now
     be passed to Python when invoking a script without explicitly
     launching Python (that is, ‘script.py args’ rather than ‘python
     script.py args’).

   - bpo-45616(3): Fix Python Launcher’s ability to distinguish between
     versions 3.1 and 3.10 when either one is explicitly requested.
     Previously, 3.1 would be used if 3.10 was requested but not
     installed, and 3.10 would be used if 3.1 was requested but 3.10 was
     installed.

   - bpo-45850(4): Implement changes to build with deep-frozen modules
     on Windows.  Note that we now require Python 3.10 as the
     “bootstrap” or “host” Python.

   - bpo-45732(5): Updates bundled Tcl/Tk to 8.6.12.

   - bpo-45720(6): Internal reference to ‘shlwapi.dll’ was dropped to
     help improve startup time.  This DLL will no longer be loaded at
     the start of every Python process.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=46105

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45901

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45616

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45850

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45732

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45720


File: python.info,  Node: macOS<24>,  Next: API C<34>,  Prev: Windows<32>,  Up: Python 3 11 0 alpha 3

1.23.40.9 macOS
...............

   - bpo-45732(1): Update python.org macOS installer to use Tcl/Tk
     8.6.12.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45732


File: python.info,  Node: API C<34>,  Prev: macOS<24>,  Up: Python 3 11 0 alpha 3

1.23.40.10 API C
................

   - bpo-39026(1): Fix Python.h to build C extensions with Xcode: remove
     a relative include from ‘Include/cpython/pystate.h’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39026


File: python.info,  Node: Python 3 11 0 alpha 2,  Next: Python 3 11 0 alpha 1,  Prev: Python 3 11 0 alpha 3,  Up: Changelog

1.23.41 Python 3.11.0 alpha 2
-----------------------------

'Data de lançamento: 2021-11-05'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<79>.
* Biblioteca: Biblioteca<81>.
* Documentação: Documentação<31>.
* Testes: Testes<35>.
* Construção: Construção<39>.
* Windows: Windows<33>.
* macOS: macOS<25>.
* IDLE: IDLE<22>.
* API C: API C<35>.


File: python.info,  Node: Núcleo e embutidos<79>,  Next: Biblioteca<81>,  Up: Python 3 11 0 alpha 2

1.23.41.1 Núcleo e embutidos
............................

   - bpo-45716(1): Improve the *note SyntaxError: 18d. message when
     using ‘True’, ‘None’ or ‘False’ as keywords in a function call.
     Patch by Pablo Galindo.

   - bpo-45688(2): *note sys.stdlib_module_names: 844. now contains the
     macOS-specific module ‘_scproxy’.

   - bpo-45379(3): Clarify *note ImportError: 419. message when we try
     to explicitly import a frozen module but frozen modules are
     disabled.

   - bpo-44525(4): Specialize simple calls to Python functions (no
     starargs, keyword dict, or closure)

   - bpo-45530(5): Cases of sorting using tuples as keys may now be
     significantly faster in some cases.  Patch by Tim Peters.

     The order of the result may differ from earlier releases if the
     tuple elements don’t define a total ordering (see *note Comparações
     de valor: 19a9. for information on total ordering).  It’s generally
     true that the result of sorting simply isn’t well-defined in the
     absence of a total ordering on list elements.

   - bpo-45526(6): In obmalloc, set ADDRESS_BITS to not ignore any bits
     (ignored 16 before).  That is safer in the case that the kernel
     gives user-space virtual addresses that span a range greater than
     48 bits.

   - bpo-30570(7): Fixed a crash in ‘issubclass()’ from infinite
     recursion when searching pathological ‘__bases__’ tuples.

   - bpo-45521(8): Fix a bug in the obmalloc radix tree code.  On 64-bit
     machines, the bug causes the tree to hold 46-bits of virtual
     addresses, rather than the intended 48-bits.

   - bpo-45494(9): Fix parser crash when reporting errors involving
     invalid continuation characters.  Patch by Pablo Galindo.

   - bpo-45445(10): Python now fails to initialize if it finds an
     invalid *note -X: 176. option in the command line.  Patch by Pablo
     Galindo.

   - bpo-45340(11): Object attributes are held in an array instead of a
     dictionary.  An object’s dictionary are created lazily, only when
     needed.  Reduces the memory consumption of a typical Python object
     by about 30%.  Patch by Mark Shannon.

   - bpo-45408(12): Fix a crash in the parser when reporting tokenizer
     errors that occur at the same time unclosed parentheses are
     detected.  Patch by Pablo Galindo.

   - bpo-29410(13): Add SipHash13 for string hash algorithm and use it
     by default.

   - bpo-45385(14): Fix reference leak from descr_check.  Patch by
     Donghee Na.

   - bpo-45367(15): Specialized the ‘BINARY_MULTIPLY’ opcode to
     ‘BINARY_MULTIPLY_INT’ and ‘BINARY_MULTIPLY_FLOAT’ using the PEP 659
     machinery.

   - bpo-21736(16): Frozen stdlib modules now have ‘__file__’ to the .py
     file they would otherwise be loaded from, if possible.  For
     packages, ‘__path__’ now has the correct entry instead of being an
     empty list, which allows unfrozen submodules to be imported.  These
     are set only if the stdlib directory is known when the runtime is
     initialized.  Note that the file at ‘__file__’ is not guaranteed to
     exist.  None of this affects non-stdlib frozen modules nor, for
     now, frozen modules imported using ‘PyImport_ImportFrozenModule()’.
     Also, at the moment ‘co_filename’ is not updated for the module.

   - bpo-45020(17): For frozen stdlib modules, record the original
     module name as ‘module.__spec__.loader_state.origname’.  If the
     value is different than ‘module.__spec__.name’ then the module was
     defined as an alias in Tools/scripts/freeze_modules.py.  If it is
     ‘None’ then the module comes from a source file outside the stdlib.

   - bpo-45324(18): In FrozenImporter.find_spec(), we now preserve the
     information needed in exec_module() to load the module.  This
     change mostly impacts internal details, rather than changing the
     importer’s behavior.

   - bpo-45292(19): Implement PEP 654(20).  Add *note ExceptionGroup:
     1b6. and *note BaseExceptionGroup: 25f.  Update traceback display
     code.

   - bpo-40116(21): Change to the implementation of split dictionaries.
     Classes where the instances differ either in the exact set of
     attributes, or in the order in which those attributes are set, can
     still share keys.  This should have no observable effect on users
     of Python or the C-API. Patch by Mark Shannon.

   - bpo-44050(22): Extensions that indicate they use global state (by
     setting ‘m_size’ to -1) can again be used in multiple interpreters.
     This reverts to behavior of Python 3.8.

   - bpo-44525(23): Setup initial specialization infrastructure for the
     ‘CALL_FUNCTION’ opcode.  Implemented initial specializations for C
     function calls:

        * ‘CALL_FUNCTION_BUILTIN_O’ for ‘METH_O’ flag.

        * ‘CALL_FUNCTION_BUILTIN_FAST’ for ‘METH_FASTCALL’ flag without
          keywords.

        * ‘CALL_FUNCTION_LEN’ for ‘len(o)’.

        * ‘CALL_FUNCTION_ISINSTANCE’ for ‘isinstance(o, t)’.

   - bpo-44511(24): Improve the generated bytecode for class and mapping
     patterns.

   - bpo-43706(25): Speed up calls to ‘enumerate()’ by using the PEP
     590(26) ‘vectorcall’ calling convention.  Patch by Donghee Na.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45716

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45688

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45379

   (4) https://bugs.python.org/issue?@action=redirect&bpo=44525

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45530

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45526

   (7) https://bugs.python.org/issue?@action=redirect&bpo=30570

   (8) https://bugs.python.org/issue?@action=redirect&bpo=45521

   (9) https://bugs.python.org/issue?@action=redirect&bpo=45494

   (10) https://bugs.python.org/issue?@action=redirect&bpo=45445

   (11) https://bugs.python.org/issue?@action=redirect&bpo=45340

   (12) https://bugs.python.org/issue?@action=redirect&bpo=45408

   (13) https://bugs.python.org/issue?@action=redirect&bpo=29410

   (14) https://bugs.python.org/issue?@action=redirect&bpo=45385

   (15) https://bugs.python.org/issue?@action=redirect&bpo=45367

   (16) https://bugs.python.org/issue?@action=redirect&bpo=21736

   (17) https://bugs.python.org/issue?@action=redirect&bpo=45020

   (18) https://bugs.python.org/issue?@action=redirect&bpo=45324

   (19) https://bugs.python.org/issue?@action=redirect&bpo=45292

   (20) https://peps.python.org/pep-0654/

   (21) https://bugs.python.org/issue?@action=redirect&bpo=40116

   (22) https://bugs.python.org/issue?@action=redirect&bpo=44050

   (23) https://bugs.python.org/issue?@action=redirect&bpo=44525

   (24) https://bugs.python.org/issue?@action=redirect&bpo=44511

   (25) https://bugs.python.org/issue?@action=redirect&bpo=43706

   (26) https://peps.python.org/pep-0590/


File: python.info,  Node: Biblioteca<81>,  Next: Documentação<31>,  Prev: Núcleo e embutidos<79>,  Up: Python 3 11 0 alpha 2

1.23.41.2 Biblioteca
....................

   - bpo-45679(1): Fix caching of multi-value *note typing.Literal: 858.
     ‘Literal[True, 2]’ is no longer equal to ‘Literal[1, 2]’.

   - bpo-42064(2): Convert *note sqlite3: cf. to multi-phase
     initialisation (PEP 489).  Patches by Erlend E. Aasland.

   - bpo-45438(3): Fix typing.Signature string representation for
     generic builtin types.

   - bpo-45613(4): *note sqlite3: cf. now sets *note
     sqlite3.threadsafety: 67c. based on the default threading mode the
     underlying SQLite library has been compiled with.  Patch by Erlend
     E. Aasland.

   - bpo-45574(5): Fix warning about ‘print_escape’ being unused.

   - bpo-45581(6): *note sqlite3.connect(): 2a8. now correctly raises
     *note MemoryError: 15c5. if the underlying SQLite API signals
     memory error.  Patch by Erlend E. Aasland.

   - bpo-45557(7): *note pprint.pprint(): 82b. now handles
     'underscore_numbers' correctly.  Previously it was always setting
     it to ‘False’.

   - bpo-44019(8): Add *note operator.call(): 19ab. to
     ‘operator.__all__’.  Patch by Kreusada.

   - bpo-42174(9): *note shutil.get_terminal_size(): 1142. now falls
     back to sane values if the column or line count are 0.

   - bpo-35673(10): Improve the introspectability of the ‘__loader__’
     attribute for namespace packages.  *note
     importlib.machinery.NamespaceLoader: f8a. is now public, and
     implements the *note importlib.abc.InspectLoader: f88. interface.
     ‘_NamespaceLoader’ is kept for backward compatibility.

   - bpo-45515(11): Add references to *note zoneinfo: 134. in the *note
     datetime: 30. documentation, mostly replacing outdated references
     to ‘dateutil.tz’.  Change by Paul Ganssle.

   - bpo-45475(12): Reverted optimization of iterating *note
     gzip.GzipFile: 41a, *note bz2.BZ2File: 86a, and *note
     lzma.LZMAFile: 1042. (see bpo-43787(13)) because it caused
     regression when user iterate them without having reference of them.
     Patch by Inada Naoki.

   - bpo-45489(14): Update *note ForwardRef: 1964. to support ‘|’
     operator.  Patch by Donghee Na.

   - bpo-42222(15): Removed deprecated support for float arguments in
     'randrange()'.

   - bpo-45428(16): Fix a regression in py_compile when reading
     filenames from standard input.

   - bpo-45467(17): Fix incremental decoder and stream reader in the
     “raw-unicode-escape” codec.  Previously they failed if the escape
     sequence was split.

   - bpo-45461(18): Fix incremental decoder and stream reader in the
     “unicode-escape” codec.  Previously they failed if the escape
     sequence was split.

   - bpo-45239(19): Fixed *note email.utils.parsedate_tz(): 19ac.
     crashing with *note UnboundLocalError: 157f. on certain invalid
     input instead of returning ‘None’.  Patch by Ben Hoyt.

   - bpo-45417(20): Fix quadratic behaviour in the enum module: Creation
     of enum classes with a lot of entries was quadratic.

   - bpo-45249(21): Fix the behaviour of *note traceback.print_exc():
     19ad. when displaying the caret when the ‘end_offset’ in the
     exception is set to 0.  Patch by Pablo Galindo

   - bpo-45416(22): Fix use of *note asyncio.Condition: a7d. with
     explicit *note asyncio.Lock: a7b. objects, which was a regression
     due to removal of explicit loop arguments.  Patch by Joongi Kim.

   - bpo-20028(23): Empty escapechar/quotechar is not allowed when
     initializing *note csv.Dialect: 1771.  Patch by Vajrasky Kok and
     Donghee Na.

   - bpo-44904(24): Fix bug in the *note doctest: 3a. module that caused
     it to fail if a docstring included an example with a ‘classmethod’
     ‘property’.  Patch by Alex Waygood.

   - bpo-45406(25): Make *note inspect.getmodule(): 18f8. catch
     ‘FileNotFoundError’ raised by ‘inspect.getabsfile()’, and return
     ‘None’ to indicate that the module could not be determined.

   - bpo-45411(26): Add extensions for files containing subtitles - .srt
     & .vtt - to the mimetypes.py module.

   - bpo-10716(27): Migrated pydoc to HTML5 (without changing the look
     of it).  Side effect is to update xmlrpc’s ‘ServerHTMLDoc’ which
     now uses the CSS too.  cgitb now relies less on pydoc (as it can’t
     use the CSS file).

   - bpo-27580(28): Add support of null characters in *note csv: 29.

   - bpo-45262(29): Prevent use-after-free in asyncio.  Make sure the
     cached running loop holder gets cleared on dealloc to prevent
     use-after-free in get_running_loop

   - bpo-45386(30): Make *note xmlrpc.client: 12e. more robust to C
     runtimes where the underlying C ‘strftime’ function results in a
     ‘ValueError’ when testing for year formatting options.

   - bpo-20028(31): Improve error message of *note csv.Dialect: 1771.
     when initializing.  Patch by Vajrasky Kok and Donghee Na.

   - bpo-45343(32): Update bundled pip to 21.2.4 and setuptools to
     58.1.0

   - bpo-45328(33): Fixed *note http.client.HTTPConnection: b53. to work
     properly in OSs that don’t support the ‘TCP_NODELAY’ socket option.

   - bpo-45243(34): Add *note setlimit(): 67a. and *note getlimit():
     67b. to *note sqlite3.Connection: 245. for setting and getting
     SQLite limits by connection basis.  Patch by Erlend E. Aasland.

   - bpo-45320(35): Removed from the *note inspect: 7e. module:

        * 
          the ‘getargspec’ function, deprecated since Python 3.0;

               use *note inspect.signature(): 738. or *note
               inspect.getfullargspec(): 739. instead.

        * the ‘formatargspec’ function, deprecated since Python 3.5; use
          the *note inspect.signature(): 738. function and ‘Signature’
          object directly.

        * the undocumented ‘Signature.from_builtin’ and
          ‘Signature.from_function’ functions, deprecated since Python
          3.5; use the *note Signature.from_callable(): 73a. method
          instead.

     Patch por Hugo van Kemenade.

   - bpo-45192(36): Fix the ‘tempfile._infer_return_type’ function so
     that the ‘dir’ argument of the *note tempfile: e0. functions
     accepts an object implementing the ‘os.PathLike’ protocol.

     Patch by Kyungmin Lee.

   - bpo-45160(37): When tracing a tkinter variable used by a ttk
     OptionMenu, callbacks are no longer made twice.

   - bpo-25625(38): Added non parallel-safe *note chdir(): 60c. context
     manager to change the current working directory and then restore it
     on exit.  Simple wrapper around *note chdir(): 60d.

   - bpo-24139(39): Add support for SQLite extended result codes in
     *note sqlite3.Error: 19ae.  Patch by Erlend E. Aasland.

   - bpo-24444(40): Fixed an error raised in *note argparse: 6. help
     display when help for an option is set to 1+ blank spaces or when
     'choices' arg is an empty container.

   - bpo-44547(41): Implement ‘Fraction.__int__’, so that a *note
     fractions.Fraction: 1e7. instance ‘f’ passes an ‘isinstance(f,
     typing.SupportsInt)’ check.

   - bpo-40321(42): Adds support for HTTP 308 redirects to *note urllib:
     108.  See RFC 7538(43) for details.  Patch by Jochem
     Schulenklopper.

   - bpo-41374(44): Ensure that ‘socket.TCP_*’ constants are exposed on
     Cygwin 3.1.6 and greater.

   - bpo-35970(45): Add help flag to the base64 module’s command line
     interface.  Patch contributed by Robert Kuska.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45679

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42064

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45438

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45613

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45574

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45581

   (7) https://bugs.python.org/issue?@action=redirect&bpo=45557

   (8) https://bugs.python.org/issue?@action=redirect&bpo=44019

   (9) https://bugs.python.org/issue?@action=redirect&bpo=42174

   (10) https://bugs.python.org/issue?@action=redirect&bpo=35673

   (11) https://bugs.python.org/issue?@action=redirect&bpo=45515

   (12) https://bugs.python.org/issue?@action=redirect&bpo=45475

   (13) https://bugs.python.org/issue?@action=redirect&bpo=43787

   (14) https://bugs.python.org/issue?@action=redirect&bpo=45489

   (15) https://bugs.python.org/issue?@action=redirect&bpo=42222

   (16) https://bugs.python.org/issue?@action=redirect&bpo=45428

   (17) https://bugs.python.org/issue?@action=redirect&bpo=45467

   (18) https://bugs.python.org/issue?@action=redirect&bpo=45461

   (19) https://bugs.python.org/issue?@action=redirect&bpo=45239

   (20) https://bugs.python.org/issue?@action=redirect&bpo=45417

   (21) https://bugs.python.org/issue?@action=redirect&bpo=45249

   (22) https://bugs.python.org/issue?@action=redirect&bpo=45416

   (23) https://bugs.python.org/issue?@action=redirect&bpo=20028

   (24) https://bugs.python.org/issue?@action=redirect&bpo=44904

   (25) https://bugs.python.org/issue?@action=redirect&bpo=45406

   (26) https://bugs.python.org/issue?@action=redirect&bpo=45411

   (27) https://bugs.python.org/issue?@action=redirect&bpo=10716

   (28) https://bugs.python.org/issue?@action=redirect&bpo=27580

   (29) https://bugs.python.org/issue?@action=redirect&bpo=45262

   (30) https://bugs.python.org/issue?@action=redirect&bpo=45386

   (31) https://bugs.python.org/issue?@action=redirect&bpo=20028

   (32) https://bugs.python.org/issue?@action=redirect&bpo=45343

   (33) https://bugs.python.org/issue?@action=redirect&bpo=45328

   (34) https://bugs.python.org/issue?@action=redirect&bpo=45243

   (35) https://bugs.python.org/issue?@action=redirect&bpo=45320

   (36) https://bugs.python.org/issue?@action=redirect&bpo=45192

   (37) https://bugs.python.org/issue?@action=redirect&bpo=45160

   (38) https://bugs.python.org/issue?@action=redirect&bpo=25625

   (39) https://bugs.python.org/issue?@action=redirect&bpo=24139

   (40) https://bugs.python.org/issue?@action=redirect&bpo=24444

   (41) https://bugs.python.org/issue?@action=redirect&bpo=44547

   (42) https://bugs.python.org/issue?@action=redirect&bpo=40321

   (43) https://datatracker.ietf.org/doc/html/rfc7538.html

   (44) https://bugs.python.org/issue?@action=redirect&bpo=41374

   (45) https://bugs.python.org/issue?@action=redirect&bpo=35970


File: python.info,  Node: Documentação<31>,  Next: Testes<35>,  Prev: Biblioteca<81>,  Up: Python 3 11 0 alpha 2

1.23.41.3 Documentação
......................

   - bpo-45726(1): Improve documentation for *note
     functools.singledispatch(): 639. and *note
     functools.singledispatchmethod: 9f8.

   - bpo-45680(2): Amend the docs on ‘GenericAlias’ objects to clarify
     that non-container classes can also implement ‘__class_getitem__’.
     Patch contributed by Alex Waygood.

   - bpo-45618(3): Update Sphinx version used to build the documentation
     to 4.2.0.  Patch by Maciej Olko.

   - bpo-45655(4): Add a new “relevant PEPs” section to the top of the
     documentation for the ‘typing’ module.  Patch by Alex Waygood.

   - bpo-45604(5): Add ‘level’ argument to
     ‘multiprocessing.log_to_stderr’ function docs.

   - bpo-45516(6): Add protocol description to the *note
     importlib.abc.TraversableResources: 19b0. documentation.

   - bpo-45464(7): Mention in the documentation of *note Built-in
     Exceptions: 19b1. that inheriting from multiple exception types in
     a single subclass is not recommended due to possible memory layout
     incompatibility.

   - bpo-45449(8): Add note about PEP 585(9) in *note collections.abc:
     1e.

   - bpo-45516(10): Add protocol description to the *note
     importlib.abc.Traversable: 19b2. documentation.

   - bpo-20692(11): Add Programming FAQ entry explaining that int
     literal attribute access requires either a space after or
     parentheses around the literal.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45726

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45680

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45618

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45655

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45604

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45516

   (7) https://bugs.python.org/issue?@action=redirect&bpo=45464

   (8) https://bugs.python.org/issue?@action=redirect&bpo=45449

   (9) https://peps.python.org/pep-0585/

   (10) https://bugs.python.org/issue?@action=redirect&bpo=45516

   (11) https://bugs.python.org/issue?@action=redirect&bpo=20692


File: python.info,  Node: Testes<35>,  Next: Construção<39>,  Prev: Documentação<31>,  Up: Python 3 11 0 alpha 2

1.23.41.4 Testes
................

   - bpo-45678(1): Add tests for scenarios in which *note
     functools.singledispatchmethod: 9f8. is stacked on top of a method
     that has already been wrapped by two other decorators.  Patch by
     Alex Waygood.

   - bpo-45578(2): Add tests for *note dis.distb(): f5f.

   - bpo-45678(3): Add tests to ensure that
     ‘functools.singledispatchmethod’ correctly wraps the attributes of
     the target function.

   - bpo-45668(4): PGO tests now pass when Python is built without test
     extension modules.

   - bpo-45577(5): Add subtests for all ‘pickle’ protocols in
     ‘test_zoneinfo’.

   - bpo-45566(6): Fix ‘test_frozen_pickle’ in ‘test_dataclasses’ to
     check all ‘pickle’ versions.

   - bpo-43592(7): ‘test.libregrtest’ now raises the soft resource limit
     for the maximum number of file descriptors when the default is too
     low for our test suite as was often the case on macOS.

   - bpo-39679(8): Add more test cases for
     ‘@functools.singledispatchmethod’ when combined with ‘@classmethod’
     or ‘@staticmethod’.

   - bpo-45410(9): When libregrtest spawns a worker process, stderr is
     now written into stdout to keep messages order.  Use a single pipe
     for stdout and stderr, rather than two pipes.  Previously, messages
     were out of order which made analysis of buildbot logs harder Patch
     by Victor Stinner.

   - bpo-45402(10): Fix test_tools.test_sundry() when Python is built
     out of tree: fix how the freeze_modules.py tool locates the
     _freeze_module program.  Patch by Victor Stinner.

   - bpo-45403(11): Fix test_sys.test_stdlib_dir() when Python is built
     outside the source tree: compare normalized paths.  Patch by Victor
     Stinner.

   - bpo-45400(12): Fix
     test_name_error_suggestions_do_not_trigger_for_too_many_locals() of
     test_exceptions if a directory name contains “a1” (like
     “Python-3.11.0a1”): use a stricter regular expression.  Patch by
     Victor Stinner.

   - bpo-10572(13): Rename *note sqlite3: cf. tests from ‘test_sqlite’
     to ‘test_sqlite3’, and relocate them to ‘Lib/test/test_sqlite3’.
     Patch by Erlend E. Aasland.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45678

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45578

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45678

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45668

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45577

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45566

   (7) https://bugs.python.org/issue?@action=redirect&bpo=43592

   (8) https://bugs.python.org/issue?@action=redirect&bpo=39679

   (9) https://bugs.python.org/issue?@action=redirect&bpo=45410

   (10) https://bugs.python.org/issue?@action=redirect&bpo=45402

   (11) https://bugs.python.org/issue?@action=redirect&bpo=45403

   (12) https://bugs.python.org/issue?@action=redirect&bpo=45400

   (13) https://bugs.python.org/issue?@action=redirect&bpo=10572


File: python.info,  Node: Construção<39>,  Next: Windows<33>,  Prev: Testes<35>,  Up: Python 3 11 0 alpha 2

1.23.41.5 Construção
....................

   - bpo-43158(1): ‘setup.py’ now uses values from configure script to
     build the ‘_uuid’ extension module.  Configure now detects
     util-linux’s ‘libuuid’, too.

   - bpo-45666(2): Fix warning of ‘swprintf’ and ‘%s’ usage in
     ‘_testembed.c’

   - bpo-45548(3): ‘Modules/Setup’ and ‘Modules/makesetup’ have been
     improved.  The ‘Setup’ file now contains working rules for all
     extensions.  Outdated comments have been removed.  Rules defined by
     ‘makesetup’ track dependencies correctly.

   - bpo-45548(4): The *note math: 8e. and *note cmath: 18.
     implementation now require a C99 compatible ‘libm’ and no longer
     ship with workarounds for missing acosh, asinh, atanh, expm1, and
     log1p functions.

   - bpo-45595(5): ‘setup.py’ and ‘makesetup’ now track build
     dependencies on all Python header files and module specific header
     files.

   - bpo-45571(6): ‘Modules/Setup’ now use ‘PY_CFLAGS_NODIST’ instead of
     ‘PY_CFLAGS’ to compile shared modules.

   - bpo-45570(7): ‘pyexpat’ and ‘_elementtree’ no longer define
     obsolete macros ‘HAVE_EXPAT_CONFIG_H’ and ‘USE_PYEXPAT_CAPI’.
     ‘XML_POOR_ENTROPY’ is now defined in ‘expat_config.h’.

   - bpo-43974(8): ‘setup.py’ no longer defines ‘Py_BUILD_CORE_MODULE’.
     Instead every module, that uses the internal API, defines the
     macro.

   - bpo-45548(9): Fill in missing entries in Modules/Setup.

   - bpo-45532(10): Update *note sys.version: 178. to use ‘main’ as
     fallback information.  Patch by Jeong YunWon.

   - bpo-45536(11): The ‘configure’ script now checks whether OpenSSL
     headers and libraries provide required APIs.  Most common APIs are
     verified.  The check detects outdated or missing OpenSSL. Failures
     do not stop configure.

   - bpo-45221(12): Fixed regression in handling of ‘LDFLAGS’ and
     ‘CPPFLAGS’ options where ‘argparse.parse_known_args()’ could
     interpret an option as one of the built-in command line argument,
     for example ‘-h’ for help.

   - bpo-45440(13): Building Python now requires a C99 ‘<math.h>’ header
     file providing the following functions: ‘copysign()’, ‘hypot()’,
     ‘isfinite()’, ‘isinf()’, ‘isnan()’, ‘round()’.  Patch by Victor
     Stinner.

   - bpo-45405(14): Prevent ‘internal configure error’ when running
     ‘configure’ with recent versions of non-Apple clang.  Patch by
     David Bohman.

   - bpo-45433(15): Avoid linking libpython with libcrypt.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43158

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45666

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45548

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45548

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45595

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45571

   (7) https://bugs.python.org/issue?@action=redirect&bpo=45570

   (8) https://bugs.python.org/issue?@action=redirect&bpo=43974

   (9) https://bugs.python.org/issue?@action=redirect&bpo=45548

   (10) https://bugs.python.org/issue?@action=redirect&bpo=45532

   (11) https://bugs.python.org/issue?@action=redirect&bpo=45536

   (12) https://bugs.python.org/issue?@action=redirect&bpo=45221

   (13) https://bugs.python.org/issue?@action=redirect&bpo=45440

   (14) https://bugs.python.org/issue?@action=redirect&bpo=45405

   (15) https://bugs.python.org/issue?@action=redirect&bpo=45433


File: python.info,  Node: Windows<33>,  Next: macOS<25>,  Prev: Construção<39>,  Up: Python 3 11 0 alpha 2

1.23.41.6 Windows
.................

   - bpo-43652(1): Update Tcl/Tk to 8.6.11, actually this time.  The
     previous update incorrectly included 8.6.10.

   - bpo-45337(2): venv now warns when the created environment may need
     to be accessed at a different path, due to redirections, links or
     junctions.  It also now correctly installs or upgrades components
     when the alternate path is required.

   - bpo-43851(3): Build SQLite ‘SQLITE_OMIT_AUTOINIT’ on Windows.
     Patch by Erlend E. Aasland.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43652

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45337

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43851


File: python.info,  Node: macOS<25>,  Next: IDLE<22>,  Prev: Windows<33>,  Up: Python 3 11 0 alpha 2

1.23.41.7 macOS
...............

   - bpo-44828(1): Avoid tkinter file dialog failure on macOS 12
     Monterey when using the Tk 8.6.11 provided by python.org macOS
     installers.  Patch by Marc Culler of the Tk project.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44828


File: python.info,  Node: IDLE<22>,  Next: API C<35>,  Prev: macOS<25>,  Up: Python 3 11 0 alpha 2

1.23.41.8 IDLE
..............

   - bpo-45495(1): Add context keywords ‘case’ and ‘match’ to
     completions list.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45495


File: python.info,  Node: API C<35>,  Prev: IDLE<22>,  Up: Python 3 11 0 alpha 2

1.23.41.9 API C
...............

   - bpo-29103(1): *note PyType_FromSpec*: 551. now copies the class
     name from the spec to a buffer owned by the class, so the original
     can be safely deallocated.  Patch by Petr Viktorin.

   - bpo-45522(2): The internal freelists for frame, float, list, dict,
     async generators, and context objects can now be disabled.

   - bpo-35134(3): Exclude *note PyWeakref_GET_OBJECT(): 3bf. from the
     limited C API. It never worked since the ‘PyWeakReference’
     structure is opaque in the limited C API.

   - bpo-35081(4): Move the ‘interpreteridobject.h’ header file from
     ‘Include/’ to ‘Include/internal/’.  It only provides private
     functions.  Patch by Victor Stinner.

   - bpo-35134(5): The non-limited API files ‘cellobject.h’,
     ‘classobject.h’, ‘context.h’, ‘funcobject.h’, ‘genobject.h’ and
     ‘longintrepr.h’ have been moved to the ‘Include/cpython’ directory.
     Moreover, the ‘eval.h’ header file was removed.  These files must
     not be included directly, as they are already included in
     ‘Python.h’: *note Include Files: 784.  If they have been included
     directly, consider including ‘Python.h’ instead.  Patch by Victor
     Stinner.

   - bpo-45474(6): The following items are no longer available when
     ‘Py_LIMITED_API’ is defined:

        * *note PyMarshal_WriteLongToFile(): 796.

        * *note PyMarshal_WriteObjectToFile(): 797.

        * *note PyMarshal_ReadObjectFromString(): 798.

        * *note PyMarshal_WriteObjectToString(): 799.

        * a macro ‘Py_MARSHAL_VERSION’

     Eles não fazem parte da *note API limitada: 79a.

     Patch por Victor Stinner.

   - bpo-45434(7): Remove the ‘pystrhex.h’ header file.  It only
     contains private functions.  C extensions should only include the
     main ‘<Python.h>’ header file.  Patch by Victor Stinner.

   - bpo-45440(8): Remove the ‘Py_FORCE_DOUBLE()’ macro.  It was used by
     the ‘Py_IS_INFINITY()’ macro.  Patch by Victor Stinner.

   - bpo-45434(9): ‘<Python.h>’ no longer includes the header files
     ‘<stdlib.h>’, ‘<stdio.h>’, ‘<errno.h>’ and ‘<string.h>’ when the
     ‘Py_LIMITED_API’ macro is set to ‘0x030b0000’ (Python 3.11) or
     higher.  C extensions should explicitly include the header files
     after ‘#include <Python.h>’.  Patch by Victor Stinner.

   - bpo-41123(10): Remove ‘Py_UNICODE_COPY()’ and ‘Py_UNICODE_FILL()’
     macros, deprecated since Python 3.3.  Use
     ‘PyUnicode_CopyCharacters()’ or ‘memcpy()’ (‘wchar_t*’ string), and
     ‘PyUnicode_Fill()’ functions instead.  Patch by Victor Stinner.

   - bpo-45412(11): Remove the following math macros using the ‘errno’
     variable:

        * ‘Py_ADJUST_ERANGE1()’

        * ‘Py_ADJUST_ERANGE2()’

        * ‘Py_OVERFLOWED()’

        * ‘Py_SET_ERANGE_IF_OVERFLOW()’

        * ‘Py_SET_ERRNO_ON_MATH_ERROR()’

     Patch por Victor Stinner.

   - bpo-45395(12): Custom frozen modules (the array set to
     ‘PyImport_FrozenModules’) are now treated as additions, rather than
     replacing all the default frozen modules.  Frozen stdlib modules
     can still be disabled by setting the “code” field of the custom
     array entry to NULL.

   - bpo-43760(13): Add new *note PyThreadState_EnterTracing(): 754, and
     *note PyThreadState_LeaveTracing(): 755. functions to the limited C
     API to suspend and resume tracing and profiling.  Patch by Victor
     Stinner.

   - bpo-44220(14): *note PyStructSequence_UnnamedField: 989. is added
     to the Stable ABI.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29103

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45522

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35134

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35081

   (5) https://bugs.python.org/issue?@action=redirect&bpo=35134

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45474

   (7) https://bugs.python.org/issue?@action=redirect&bpo=45434

   (8) https://bugs.python.org/issue?@action=redirect&bpo=45440

   (9) https://bugs.python.org/issue?@action=redirect&bpo=45434

   (10) https://bugs.python.org/issue?@action=redirect&bpo=41123

   (11) https://bugs.python.org/issue?@action=redirect&bpo=45412

   (12) https://bugs.python.org/issue?@action=redirect&bpo=45395

   (13) https://bugs.python.org/issue?@action=redirect&bpo=43760

   (14) https://bugs.python.org/issue?@action=redirect&bpo=44220


File: python.info,  Node: Python 3 11 0 alpha 1,  Next: Python 3 10 0 beta 1,  Prev: Python 3 11 0 alpha 2,  Up: Changelog

1.23.42 Python 3.11.0 alpha 1
-----------------------------

'Data de lançamento: 2021-10-05'

* Menu:

* Segurança: Segurança<25>.
* Núcleo e embutidos: Núcleo e embutidos<80>.
* Biblioteca: Biblioteca<82>.
* Núcleo e embutidos: Núcleo e embutidos<81>.
* Biblioteca: Biblioteca<83>.
* Núcleo e embutidos: Núcleo e embutidos<82>.
* Biblioteca: Biblioteca<84>.
* Núcleo e embutidos: Núcleo e embutidos<83>.
* Biblioteca: Biblioteca<85>.
* Núcleo e embutidos: Núcleo e embutidos<84>.
* Biblioteca: Biblioteca<86>.
* Núcleo e embutidos: Núcleo e embutidos<85>.
* Biblioteca: Biblioteca<87>.
* Núcleo e embutidos: Núcleo e embutidos<86>.
* Biblioteca: Biblioteca<88>.
* Núcleo e embutidos: Núcleo e embutidos<87>.
* Biblioteca: Biblioteca<89>.
* Núcleo e embutidos: Núcleo e embutidos<88>.
* Biblioteca: Biblioteca<90>.
* Núcleo e embutidos: Núcleo e embutidos<89>.
* Biblioteca: Biblioteca<91>.
* Documentação: Documentação<32>.
* Testes: Testes<36>.
* Construção: Construção<40>.
* Windows: Windows<34>.
* macOS: macOS<26>.
* IDLE: IDLE<23>.
* Ferramentas/Demos: Ferramentas/Demos<20>.
* API C: API C<36>.


File: python.info,  Node: Segurança<25>,  Next: Núcleo e embutidos<80>,  Up: Python 3 11 0 alpha 1

1.23.42.1 Segurança
...................

   - bpo-42278(1): Replaced usage of *note tempfile.mktemp(): 19bb. with
     *note TemporaryDirectory: 1275. to avoid a potential race
     condition.

   - bpo-44600(2): Fix incorrect line numbers while tracing some failed
     patterns in *note match: 810. statements.  Patch by Charles
     Burkland.

   - bpo-41180(3): Add auditing events to the *note marshal: 8d. module,
     and stop raising ‘code.__init__’ events for every unmarshalled code
     object.  Directly instantiated code objects will continue to raise
     an event, and audit event handlers should inspect or collect the
     raw marshal data.  This reduces a significant performance overhead
     when loading from ‘.pyc’ files.

   - bpo-44394(4): Update the vendored copy of libexpat to 2.4.1 (from
     2.2.8) to get the fix for the CVE 2013-0340(5) “Billion Laughs”
     vulnerability.  This copy is most used on Windows and macOS.

   - bpo-43124(6): Made the internal ‘putcmd’ function in *note smtplib:
     ca. sanitize input for presence of ‘\r’ and ‘\n’ characters to
     avoid (unlikely) command injection.

   - bpo-44022(7): *note http.client: 6f. now avoids infinitely reading
     potential HTTP headers after a ‘100 Continue’ status response from
     the server.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42278

   (2) https://bugs.python.org/issue?@action=redirect&bpo=44600

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41180

   (4) https://bugs.python.org/issue?@action=redirect&bpo=44394

   (5) https://www.cve.org/CVERecord?id=CVE-2013-0340

   (6) https://bugs.python.org/issue?@action=redirect&bpo=43124

   (7) https://bugs.python.org/issue?@action=redirect&bpo=44022


File: python.info,  Node: Núcleo e embutidos<80>,  Next: Biblioteca<82>,  Prev: Segurança<25>,  Up: Python 3 11 0 alpha 1

1.23.42.2 Núcleo e embutidos
............................

   - bpo-43760(1): The number of hardware branches per instruction
     dispatch is reduced from two to one by adding a special instruction
     for tracing.  Patch by Mark Shannon.

   - bpo-45061(2): Add a deallocator to the bool type to detect refcount
     bugs in C extensions which call Py_DECREF(Py_True) or
     Py_DECREF(Py_False) by mistake.  Detect also refcount bugs when the
     empty tuple singleton or the Unicode empty string singleton is
     destroyed by mistake.  Patch by Victor Stinner.

   - bpo-24076(3): sum() was further optimised for summing up single
     digit integers.

   - bpo-45190(4): Update Unicode databases to Unicode 14.0.0.

   - bpo-45167(5): Fix deepcopying of *note types.GenericAlias: 7ed.
     objects.

   - bpo-45155(6): *note int.to_bytes(): 19bd. and *note
     int.from_bytes(): 1972. now take a default value of ‘"big"’ for the
     ‘byteorder’ argument.  *note int.to_bytes(): 19bd. also takes a
     default value of ‘1’ for the ‘length’ argument.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43760

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45061

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24076

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45190

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45167

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45155


File: python.info,  Node: Biblioteca<82>,  Next: Núcleo e embutidos<81>,  Prev: Núcleo e embutidos<80>,  Up: Python 3 11 0 alpha 1

1.23.42.3 Biblioteca
....................

   - bpo-44219(1): Release the GIL while performing ‘isatty’ system
     calls on arbitrary file descriptors.  In particular, this affects
     *note os.isatty(): 19bf, *note os.device_encoding(): 19c0. and
     *note io.TextIOWrapper: 7bc.  By extension, *note io.open(): 51d.
     in text mode is also affected.  This change solves a deadlock in
     *note os.isatty(): 19bf.  Patch by Vincent Michel in bpo-44219(2).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44219

   (2) https://bugs.python.org/issue?@action=redirect&bpo=44219


File: python.info,  Node: Núcleo e embutidos<81>,  Next: Biblioteca<83>,  Prev: Biblioteca<82>,  Up: Python 3 11 0 alpha 1

1.23.42.4 Núcleo e embutidos
............................

   - bpo-44959(1): Added fallback to extension modules with ‘.sl’ suffix
     on HP-UX

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44959


File: python.info,  Node: Biblioteca<83>,  Next: Núcleo e embutidos<82>,  Prev: Núcleo e embutidos<81>,  Up: Python 3 11 0 alpha 1

1.23.42.5 Biblioteca
....................

   - bpo-45121(1): Fix issue where ‘Protocol.__init__’ raises
     ‘RecursionError’ when it’s called directly or via ‘super()’.  Patch
     provided by Yurii Karabas.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45121


File: python.info,  Node: Núcleo e embutidos<82>,  Next: Biblioteca<84>,  Prev: Biblioteca<83>,  Up: Python 3 11 0 alpha 1

1.23.42.6 Núcleo e embutidos
............................

   - bpo-44348(1): The deallocator function of the *note BaseException:
     5bb. type now uses the trashcan mechanism to prevent stack
     overflow.  For example, when a *note RecursionError: d90. instance
     is raised, it can be linked to another RecursionError through the
     ‘__context__’ attribute or the ‘__traceback__’ attribute, and then
     a chain of exceptions is created.  When the chain is destroyed,
     nested deallocator function calls can crash with a stack overflow
     if the chain is too long compared to the available stack memory.
     Patch by Victor Stinner.

   - bpo-45123(2): Fix PyAiter_Check to only check for the __anext__
     presence (not for __aiter__).  Rename PyAiter_Check to
     PyAIter_Check, PyObject_GetAiter -> PyObject_GetAIter.

   - bpo-1514420(3): Interpreter no longer attempts to open files with
     names in angle brackets (like “<string>” or “<stdin>”) when
     formatting an exception.

   - bpo-41031(4): Match C and Python code formatting of unprintable
     exceptions and exceptions in the *note __main__: 1. module.

   - bpo-37330(5): *note open(): 51c, *note io.open(): 51d, *note
     codecs.open(): 740. and *note fileinput.FileInput: 737. no longer
     accept ‘'U'’ (“universal newline”) in the file mode.  This flag was
     deprecated since Python 3.3.  Patch by Victor Stinner.

   - bpo-45083(6): When the interpreter renders an exception, its name
     now has a complete qualname.  Previously only the class name was
     concatenated to the module name, which sometimes resulted in an
     incorrect full name being displayed.

     (This issue impacted only the C code exception rendering, the *note
     traceback: fe. module was using qualname already).

   - bpo-34561(7): List sorting now uses the merge-ordering strategy
     from Munro and Wild’s ‘powersort()’.  Unlike the former strategy,
     this is provably near-optimal in the entropy of the distribution of
     run lengths.  Most uses of ‘list.sort()’ probably won’t see a
     significant time difference, but may see significant improvements
     in cases where the former strategy was exceptionally poor.
     However, as these are all fast linear-time approximations to a
     problem that’s inherently at best quadratic-time to solve truly
     optimally, it’s also possible to contrive cases where the former
     strategy did better.

   - bpo-45056(8): Compiler now removes trailing unused constants from
     co_consts.

   - bpo-45020(9): Add a new command line option, “-X
     frozen_modules=[on|off]” to opt out of (or into) using optional
     frozen modules.  This defaults to “on” (or “off” if it’s running
     out of the source tree).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44348

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45123

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1514420

   (4) https://bugs.python.org/issue?@action=redirect&bpo=41031

   (5) https://bugs.python.org/issue?@action=redirect&bpo=37330

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45083

   (7) https://bugs.python.org/issue?@action=redirect&bpo=34561

   (8) https://bugs.python.org/issue?@action=redirect&bpo=45056

   (9) https://bugs.python.org/issue?@action=redirect&bpo=45020


File: python.info,  Node: Biblioteca<84>,  Next: Núcleo e embutidos<83>,  Prev: Núcleo e embutidos<82>,  Up: Python 3 11 0 alpha 1

1.23.42.7 Biblioteca
....................

   - bpo-45012(1): In *note posix: ad, release GIL during ‘stat()’,
     ‘lstat()’, and ‘fstatat()’ syscalls made by *note
     os.DirEntry.stat(): 17ed.  Patch by Stanisław Skonieczny.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45012


File: python.info,  Node: Núcleo e embutidos<83>,  Next: Biblioteca<85>,  Prev: Biblioteca<84>,  Up: Python 3 11 0 alpha 1

1.23.42.8 Núcleo e embutidos
............................

   - bpo-45018(1): Fixed pickling of range iterators that iterated for
     over ‘2**32’ times.

   - bpo-45000(2): A *note SyntaxError: 18d. is now raised when trying
     to delete *note __debug__: 7db.  Patch by Donghee Na.

   - bpo-44963(3): Implement ‘send()’ and ‘throw()’ methods for
     ‘anext_awaitable’ objects.  Patch by Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45018

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45000

   (3) https://bugs.python.org/issue?@action=redirect&bpo=44963


File: python.info,  Node: Biblioteca<85>,  Next: Núcleo e embutidos<84>,  Prev: Núcleo e embutidos<83>,  Up: Python 3 11 0 alpha 1

1.23.42.9 Biblioteca
....................

   - bpo-44962(1): Fix a race in WeakKeyDictionary, WeakValueDictionary
     and WeakSet when two threads attempt to commit the last pending
     removal.  This fixes asyncio.create_task and fixes a data loss in
     asyncio.run where shutdown_asyncgens is not run

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44962


File: python.info,  Node: Núcleo e embutidos<84>,  Next: Biblioteca<86>,  Prev: Biblioteca<85>,  Up: Python 3 11 0 alpha 1

1.23.42.10 Núcleo e embutidos
.............................

   - bpo-24234(1): Implement the ‘__bytes__()’ special method on the
     *note bytes: 1c2. type, so a bytes object ‘b’ passes an
     ‘isinstance(b, typing.SupportsBytes)’ check.

   - bpo-24234(2): Implement the ‘__complex__()’ special method on the
     *note complex: 2f8. type, so a complex number ‘z’ passes an
     ‘isinstance(z, typing.SupportsComplex)’ check.

   - bpo-44954(3): Fixed a corner case bug where the result of
     ‘float.fromhex('0x.8p-1074')’ was rounded the wrong way.

   - bpo-44947(4): Refine the syntax error for trailing commas in import
     statements.  Patch by Pablo Galindo.

   - bpo-44945(5): Specialize the BINARY_ADD instruction using the PEP
     659 machinery.  Adds five new instructions:

        * BINARY_ADD_ADAPTIVE

        * BINARY_ADD_FLOAT

        * BINARY_ADD_INT

        * BINARY_ADD_UNICODE

        * BINARY_ADD_UNICODE_INPLACE_FAST

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24234

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24234

   (3) https://bugs.python.org/issue?@action=redirect&bpo=44954

   (4) https://bugs.python.org/issue?@action=redirect&bpo=44947

   (5) https://bugs.python.org/issue?@action=redirect&bpo=44945


File: python.info,  Node: Biblioteca<86>,  Next: Núcleo e embutidos<85>,  Prev: Núcleo e embutidos<84>,  Up: Python 3 11 0 alpha 1

1.23.42.11 Biblioteca
.....................

   - bpo-44929(1): Fix some edge cases of ‘enum.Flag’ string
     representation in the REPL. Patch by Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44929


File: python.info,  Node: Núcleo e embutidos<85>,  Next: Biblioteca<87>,  Prev: Biblioteca<86>,  Up: Python 3 11 0 alpha 1

1.23.42.12 Núcleo e embutidos
.............................

   - bpo-44914(1): Class version tags are no longer recycled.

     This means that a version tag serves as a unique identifier for the
     state of a class.  We rely on this for effective specialization of
     the LOAD_ATTR and other instructions.

   - bpo-44698(2): Restore behaviour of complex exponentiation with
     integer-valued exponent of type *note float: 2f7. or *note complex:
     2f8.

   - bpo-44895(3): A debug variable *note PYTHONDUMPREFSFILE: 19ca. is
     added for creating a dump file which is generated by *note
     -with-trace-refs: 395.  Patch by Donghee Na.

   - bpo-44900(4): Add five superinstructions for PEP 659 quickening:

        * LOAD_FAST LOAD_FAST

        * STORE_FAST LOAD_FAST

        * LOAD_FAST LOAD_CONST

        * LOAD_CONST LOAD_FAST

        * STORE_FAST STORE_FAST

   - bpo-44889(5): Initial implementation of adaptive specialization of
     ‘LOAD_METHOD’.  The following specialized forms were added:

        * ‘LOAD_METHOD_CACHED’

        * ‘LOAD_METHOD_MODULE’

        * ‘LOAD_METHOD_CLASS’

   - bpo-44890(6): Specialization stats are always collected in debug
     builds.

   - bpo-44885(7): Correct the ast locations of f-strings with format
     specs and repeated expressions.  Patch by Pablo Galindo

   - bpo-44878(8): Remove the loop from the bytecode interpreter.  All
     instructions end with a DISPATCH macro, so the loop is now
     redundant.

   - bpo-44878(9): Remove switch statement for interpreter loop when
     using computed gotos.  This makes sure that we only have one
     dispatch table in the interpreter.

   - bpo-44874(10): Deprecate the old trashcan macros
     (‘Py_TRASHCAN_SAFE_BEGIN’/‘Py_TRASHCAN_SAFE_END’).  They should be
     replaced by the new macros ‘Py_TRASHCAN_BEGIN’ and
     ‘Py_TRASHCAN_END’.

   - bpo-44872(11): Use new trashcan macros (Py_TRASHCAN_BEGIN/END) in
     frameobject.c instead of the old ones (Py_TRASHCAN_SAFE_BEGIN/END).

   - bpo-33930(12): Fix segmentation fault with deep recursion when
     cleaning method objects.  Patch by Augusto Goulart and Pablo
     Galindo.

   - bpo-25782(13): Fix bug where ‘PyErr_SetObject’ hangs when the
     current exception has a cycle in its context chain.

   - bpo-44856(14): Fix reference leaks in the error paths of
     ‘update_bases()’ and ‘__build_class__’.  Patch by Pablo Galindo.

   - bpo-44826(15): Initial implementation of adaptive specialization of
     STORE_ATTR

     Three specialized forms of STORE_ATTR are added:

        * STORE_ATTR_SLOT

        * STORE_ATTR_SPLIT_KEYS

        * STORE_ATTR_WITH_HINT

   - bpo-44838(16): Fixed a bug that was causing the parser to raise an
     incorrect custom *note SyntaxError: 18d. for invalid ‘if’
     expressions.  Patch by Pablo Galindo.

   - bpo-44821(17): Create instance dictionaries (__dict__) eagerly, to
     improve regularity of object layout and assist specialization.

   - bpo-44792(18): Improve syntax errors for if expressions.  Patch by
     Miguel Brito

   - bpo-34013(19): Generalize the invalid legacy statement custom error
     message (like the one generated when “print” is called without
     parentheses) to include more generic expressions.  Patch by Pablo
     Galindo

   - bpo-44732(20): Rename ‘types.Union’ to ‘types.UnionType’.

   - bpo-44725(21): Expose specialization stats in python via
     ‘_opcode.get_specialization_stats()’.

   - bpo-44717(22): Improve AttributeError on circular imports of
     submodules.

   - bpo-44698(23): Fix undefined behaviour in complex object
     exponentiation.

   - bpo-44653(24): Support *note typing: 104. types in parameter
     substitution in the union type.

   - bpo-44676(25): Add ability to serialise ‘types.Union’ objects.
     Patch provided by Yurii Karabas.

   - bpo-44633(26): Parameter substitution of the union type with wrong
     types now raises ‘TypeError’ instead of returning *note
     NotImplemented: 7d3.

   - bpo-44661(27): Update ‘property_descr_set’ to use vectorcall if
     possible.  Patch by Donghee Na.

   - bpo-44662(28): Add ‘__module__’ to ‘types.Union’.  This also fixes
     ‘types.Union’ issues with ‘typing.Annotated’.  Patch provided by
     Yurii Karabas.

   - bpo-44655(29): Include the name of the type in unset __slots__
     attribute errors.  Patch by Pablo Galindo

   - bpo-44655(30): Don’t include a missing attribute with the same name
     as the failing one when offering suggestions for missing
     attributes.  Patch by Pablo Galindo

   - bpo-44646(31): Fix the hash of the union type: it no longer depends
     on the order of arguments.

   - bpo-44636(32): Collapse union of equal types.  E.g.  the result of
     ‘int | int’ is now ‘int’.  Fix comparison of the union type with
     non-hashable objects.  E.g.  ‘int | str == {}’ no longer raises a
     TypeError.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44914

   (2) https://bugs.python.org/issue?@action=redirect&bpo=44698

   (3) https://bugs.python.org/issue?@action=redirect&bpo=44895

   (4) https://bugs.python.org/issue?@action=redirect&bpo=44900

   (5) https://bugs.python.org/issue?@action=redirect&bpo=44889

   (6) https://bugs.python.org/issue?@action=redirect&bpo=44890

   (7) https://bugs.python.org/issue?@action=redirect&bpo=44885

   (8) https://bugs.python.org/issue?@action=redirect&bpo=44878

   (9) https://bugs.python.org/issue?@action=redirect&bpo=44878

   (10) https://bugs.python.org/issue?@action=redirect&bpo=44874

   (11) https://bugs.python.org/issue?@action=redirect&bpo=44872

   (12) https://bugs.python.org/issue?@action=redirect&bpo=33930

   (13) https://bugs.python.org/issue?@action=redirect&bpo=25782

   (14) https://bugs.python.org/issue?@action=redirect&bpo=44856

   (15) https://bugs.python.org/issue?@action=redirect&bpo=44826

   (16) https://bugs.python.org/issue?@action=redirect&bpo=44838

   (17) https://bugs.python.org/issue?@action=redirect&bpo=44821

   (18) https://bugs.python.org/issue?@action=redirect&bpo=44792

   (19) https://bugs.python.org/issue?@action=redirect&bpo=34013

   (20) https://bugs.python.org/issue?@action=redirect&bpo=44732

   (21) https://bugs.python.org/issue?@action=redirect&bpo=44725

   (22) https://bugs.python.org/issue?@action=redirect&bpo=44717

   (23) https://bugs.python.org/issue?@action=redirect&bpo=44698

   (24) https://bugs.python.org/issue?@action=redirect&bpo=44653

   (25) https://bugs.python.org/issue?@action=redirect&bpo=44676

   (26) https://bugs.python.org/issue?@action=redirect&bpo=44633

   (27) https://bugs.python.org/issue?@action=redirect&bpo=44661

   (28) https://bugs.python.org/issue?@action=redirect&bpo=44662

   (29) https://bugs.python.org/issue?@action=redirect&bpo=44655

   (30) https://bugs.python.org/issue?@action=redirect&bpo=44655

   (31) https://bugs.python.org/issue?@action=redirect&bpo=44646

   (32) https://bugs.python.org/issue?@action=redirect&bpo=44636


File: python.info,  Node: Biblioteca<87>,  Next: Núcleo e embutidos<86>,  Prev: Núcleo e embutidos<85>,  Up: Python 3 11 0 alpha 1

1.23.42.13 Biblioteca
.....................

   - bpo-44611(1): On Windows, *note os.urandom(): 523.: uses
     BCryptGenRandom API instead of CryptGenRandom API which is
     deprecated from Microsoft Windows API. Patch by Donghee Na.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44611


File: python.info,  Node: Núcleo e embutidos<86>,  Next: Biblioteca<88>,  Prev: Biblioteca<87>,  Up: Python 3 11 0 alpha 1

1.23.42.14 Núcleo e embutidos
.............................

   - bpo-44635(1): Convert ‘None’ to ‘type(None)’ in the union type
     constructor.

   - bpo-26280(2): Implement adaptive specialization for BINARY_SUBSCR

     Three specialized forms of BINARY_SUBSCR are added:

        * BINARY_SUBSCR_LIST_INT

        * BINARY_SUBSCR_TUPLE_INT

        * BINARY_SUBSCR_DICT

   - bpo-44589(3): Mapping patterns in ‘match’ statements with two or
     more equal literal keys will now raise a *note SyntaxError: 18d. at
     compile-time.

   - bpo-44606(4): Fix ‘__instancecheck__’ and ‘__subclasscheck__’ for
     the union type.

   - bpo-42073(5): The ‘@classmethod’ decorator can now wrap other
     classmethod-like descriptors.

   - bpo-41972(6): Tuned the string-searching algorithm of fastsearch.h
     to have a shorter inner loop for most cases.

   - bpo-44590(7): All necessary data for executing a Python function
     (local variables, stack, etc) is now kept in a per-thread stack.
     Frame objects are lazily allocated on demand.  This increases
     performance by about 7% on the standard benchmark suite.
     Introspection and debugging are unaffected as frame objects are
     always available when needed.  Patch by Mark Shannon.

   - bpo-44584(8): The threading debug (‘PYTHONTHREADDEBUG’ environment
     variable) is deprecated in Python 3.10 and will be removed in
     Python 3.12.  This feature requires a debug build of Python.  Patch
     by Victor Stinner.

   - bpo-43895(9): An obsolete internal cache of shared object file
     handles added in 1995 that attempted, but did not guarantee, that a
     .so would not be dlopen’ed twice to work around flaws in mid-1990s
     posix-ish operating systems has been removed from dynload_shlib.c.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44635

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26280

   (3) https://bugs.python.org/issue?@action=redirect&bpo=44589

   (4) https://bugs.python.org/issue?@action=redirect&bpo=44606

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42073

   (6) https://bugs.python.org/issue?@action=redirect&bpo=41972

   (7) https://bugs.python.org/issue?@action=redirect&bpo=44590

   (8) https://bugs.python.org/issue?@action=redirect&bpo=44584

   (9) https://bugs.python.org/issue?@action=redirect&bpo=43895


File: python.info,  Node: Biblioteca<88>,  Next: Núcleo e embutidos<87>,  Prev: Núcleo e embutidos<86>,  Up: Python 3 11 0 alpha 1

1.23.42.15 Biblioteca
.....................

   - bpo-44490(1): *note typing: 104. now searches for type parameters
     in ‘types.Union’ objects.  ‘get_type_hints’ will also properly
     resolve annotations with nested ‘types.Union’ objects.  Patch
     provided by Yurii Karabas.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44490


File: python.info,  Node: Núcleo e embutidos<87>,  Next: Biblioteca<89>,  Prev: Biblioteca<88>,  Up: Python 3 11 0 alpha 1

1.23.42.16 Núcleo e embutidos
.............................

   - bpo-43950(1): Code objects can now provide the column information
     for instructions when available.  This is levaraged during
     traceback printing to show the expressions responsible for errors.

     Contributed by Pablo Galindo, Batuhan Taskaya and Ammar Askar as
     part of PEP 657(2).

   - bpo-44562(3): Remove uses of *note PyObject_GC_Del(): 154c. in
     error path when initializing *note types.GenericAlias: 7ed.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43950

   (2) https://peps.python.org/pep-0657/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=44562


File: python.info,  Node: Biblioteca<89>,  Next: Núcleo e embutidos<88>,  Prev: Núcleo e embutidos<87>,  Up: Python 3 11 0 alpha 1

1.23.42.17 Biblioteca
.....................

   - bpo-41486(1): Fix a memory consumption and copying performance
     regression in earlier 3.10 beta releases if someone used an output
     buffer larger than 4GiB with zlib.decompress on input data that
     expands that large.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41486


File: python.info,  Node: Núcleo e embutidos<88>,  Next: Biblioteca<90>,  Prev: Biblioteca<89>,  Up: Python 3 11 0 alpha 1

1.23.42.18 Núcleo e embutidos
.............................

   - bpo-43908(1): Heap types with the *note Py_TPFLAGS_IMMUTABLETYPE:
     3c2. flag can now inherit the PEP 590(2) vectorcall protocol.
     Previously, this was only possible for *note static types: 77f.
     Patch by Erlend E. Aasland.

   - bpo-44553(3): Implement GC methods for ‘types.Union’ to break
     reference cycles and prevent memory leaks.

   - bpo-44490(4): Add ‘__parameters__’ attribute and ‘__getitem__’
     operator to ‘types.Union’.  Patch provided by Yurii Karabas.

   - bpo-44523(5): Remove the pass-through for *note hash(): 5eb. of
     *note weakref.proxy: a5b. objects to prevent unintended
     consequences when the original referred object dies while the proxy
     is part of a hashable object.  Patch by Pablo Galindo.

   - bpo-44483(6): Fix a crash in ‘types.Union’ objects when creating a
     union of an object with bad ‘__module__’ field.

   - bpo-44486(7): Modules will always have a dictionary, even when
     created by ‘types.ModuleType.__new__()’

   - bpo-44472(8): Fix ltrace functionality when exceptions are raised.
     Patch by Pablo Galindo

   - bpo-12022(9): A *note TypeError: 2c3. is now raised instead of an
     *note AttributeError: 34b. in *note with: 5d2. and *note async
     with: 5d5. statements for objects which do not support the *note
     context manager: 5d4. or *note asynchronous context manager: 5d7.
     protocols correspondingly.

   - bpo-44297(10): Make sure that the line number is set when entering
     a comprehension scope.  This ensures that backtraces including
     generator expressions show the correct line number.

   - bpo-44456(11): Improve the syntax error when mixing positional and
     keyword patterns.  Patch by Pablo Galindo.

   - bpo-44409(12): Fix error location information for tokenizer errors
     raised on initialization of the tokenizer.  Patch by Pablo Galindo.

   - bpo-44396(13): Fix a possible crash in the tokenizer when raising
     syntax errors for unclosed strings.  Patch by Pablo Galindo.

   - bpo-44376(14): Exact integer exponentiation (like ‘i**2’ or ‘pow(i,
     2)’) with a small exponent is much faster, due to reducing overhead
     in such cases.

   - bpo-44313(15): Directly imported objects and modules (through
     import and from import statements) don’t generate
     ‘LOAD_METHOD’/‘CALL_METHOD’ for directly accessed objects on their
     namespace.  They now use the regular ‘LOAD_ATTR’/‘CALL_FUNCTION’.

   - bpo-44338(16): Implement adaptive specialization for LOAD_GLOBAL

     Two specialized forms of LOAD_GLOBAL are added:

        * LOAD_GLOBAL_MODULE

        * LOAD_GLOBAL_BUILTIN

   - bpo-44368(17): Improve syntax errors for invalid “as” targets.
     Patch by Pablo Galindo

   - bpo-44349(18): Fix an edge case when displaying text from files
     with encoding in syntax errors.  Patch by Pablo Galindo.

   - bpo-44337(19): Initial implementation of adaptive specialization of
     LOAD_ATTR

     Four specialized forms of LOAD_ATTR are added:

        * LOAD_ATTR_SLOT

        * LOAD_ATTR_SPLIT_KEYS

        * LOAD_ATTR_WITH_HINT

        * LOAD_ATTR_MODULE

   - bpo-44335(20): Fix a regression when identifying incorrect
     characters in syntax errors.  Patch by Pablo Galindo

   - bpo-43693(21): Computation of the offsets of cell variables is done
     in the compiler instead of at runtime.  This reduces the overhead
     of handling cell and free variables, especially in the case where a
     variable is both an argument and cell variable.

   - bpo-44317(22): Improve tokenizer error with improved locations.
     Patch by Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43908

   (2) https://peps.python.org/pep-0590/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=44553

   (4) https://bugs.python.org/issue?@action=redirect&bpo=44490

   (5) https://bugs.python.org/issue?@action=redirect&bpo=44523

   (6) https://bugs.python.org/issue?@action=redirect&bpo=44483

   (7) https://bugs.python.org/issue?@action=redirect&bpo=44486

   (8) https://bugs.python.org/issue?@action=redirect&bpo=44472

   (9) https://bugs.python.org/issue?@action=redirect&bpo=12022

   (10) https://bugs.python.org/issue?@action=redirect&bpo=44297

   (11) https://bugs.python.org/issue?@action=redirect&bpo=44456

   (12) https://bugs.python.org/issue?@action=redirect&bpo=44409

   (13) https://bugs.python.org/issue?@action=redirect&bpo=44396

   (14) https://bugs.python.org/issue?@action=redirect&bpo=44376

   (15) https://bugs.python.org/issue?@action=redirect&bpo=44313

   (16) https://bugs.python.org/issue?@action=redirect&bpo=44338

   (17) https://bugs.python.org/issue?@action=redirect&bpo=44368

   (18) https://bugs.python.org/issue?@action=redirect&bpo=44349

   (19) https://bugs.python.org/issue?@action=redirect&bpo=44337

   (20) https://bugs.python.org/issue?@action=redirect&bpo=44335

   (21) https://bugs.python.org/issue?@action=redirect&bpo=43693

   (22) https://bugs.python.org/issue?@action=redirect&bpo=44317


File: python.info,  Node: Biblioteca<90>,  Next: Núcleo e embutidos<89>,  Prev: Núcleo e embutidos<88>,  Up: Python 3 11 0 alpha 1

1.23.42.19 Biblioteca
.....................

   - bpo-44304(1): Fix a crash in the *note sqlite3: cf. module that
     happened when the garbage collector clears ‘sqlite.Statement’
     objects.  Patch by Pablo Galindo

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44304


File: python.info,  Node: Núcleo e embutidos<89>,  Next: Biblioteca<91>,  Prev: Biblioteca<90>,  Up: Python 3 11 0 alpha 1

1.23.42.20 Núcleo e embutidos
.............................

   - bpo-44305(1): Improve error message for ‘try’ blocks without
     ‘except’ or ‘finally’ blocks.  Patch by Pablo Galindo.

   - bpo-43413(2): Constructors of subclasses of some builtin classes
     (e.g.  *note tuple: 370, *note list: 611, *note frozenset: 5da.) no
     longer accept arbitrary keyword arguments.  [reverted in 3.11a4]
     Subclass of *note set: 5d9. can now define a ‘__new__()’ method
     with additional keyword parameters without overriding also
     ‘__init__()’.

   - bpo-43667(3): Improve Unicode support in non-UTF locales on Oracle
     Solaris.  This issue does not affect other Solaris systems.

   - bpo-43693(4): A new opcode MAKE_CELL has been added that
     effectively moves some of the work done on function entry into the
     compiler and into the eval loop.  In addition to creating the
     required cell objects, the new opcode converts relevant arguments
     (and other locals) to cell variables on function entry.

   - bpo-44232(5): Fix a regression in *note type(): d6b. when a
     metaclass raises an exception.  The C function ‘type_new()’ must
     properly report the exception when a metaclass constructor raises
     an exception and the winner class is not the metaclass.  Patch by
     Victor Stinner.

   - bpo-44201(6): Avoid side effects of checking for specialized syntax
     errors in the REPL that was causing it to ask for extra tokens
     after a syntax error had been detected.  Patch by Pablo Galindo

   - bpo-43693(7): ‘PyCodeObject’ gained ‘co_fastlocalnames’ and
     ‘co_fastlocalkinds’ as the authoritative source of fast locals
     info.  Marshaled code objects have changed accordingly.

   - bpo-44184(8): Fix a crash at Python exit when a deallocator
     function removes the last strong reference to a heap type.  Patch
     by Victor Stinner.

   - bpo-44187(9): Implement quickening in the interpreter.  This offers
     no advantages as yet, but is an enabler of future optimizations.
     See PEP 659 for full explanation.

   - bpo-44180(10): The parser doesn’t report generic syntax errors that
     happen in a position further away that the one it reached in the
     first pass.  Patch by Pablo Galindo

   - bpo-44168(11): Fix error message in the parser involving keyword
     arguments with invalid expressions.  Patch by Pablo Galindo

   - bpo-44156(12): String caches in ‘compile.c’ are now subinterpreter
     compatible.

   - bpo-44143(13): Fixed a crash in the parser that manifest when
     raising tokenizer errors when an existing exception was present.
     Patch by Pablo Galindo.

   - bpo-44032(14): Move ‘fast’ locals and other variables from the
     frame object to a per-thread datastack.

   - bpo-44114(15): Correção de assinaturas incorretas das funções
     dictkeys_reversed e dictitems_reversed no código C, que quebrou a
     construção do WebAssembly.

   - bpo-44110(16): Improve ‘str.__getitem__()’ error message

   - bpo-26110(17): Add ‘CALL_METHOD_KW’ opcode to speed up method calls
     with keyword arguments.  Idea originated from PyPy.  A side effect
     is executing ‘CALL_METHOD’ is now branchless in the evaluation
     loop.

   - bpo-28307(18): Compiler now optimizes simple C-style formatting
     with literal format containing only format codes %s, %r and %a by
     converting them to f-string expressions.

   - bpo-43149(19): Correct the syntax error message regarding multiple
     exception types to not refer to “exception groups”.  Patch by Pablo
     Galindo

   - bpo-43822(20): The parser will prioritize tokenizer errors over
     custom syntax errors when raising exceptions.  Patch by Pablo
     Galindo.

   - bpo-40222(21): “Zero cost” exception handling.

        * Uses a lookup table to determine how to handle exceptions.

        * Removes SETUP_FINALLY and POP_TOP block instructions,
          eliminating the runtime overhead of try statements.

        * Reduces the size of the frame object by about 60%.

     Patch by Mark Shannon

   - bpo-43918(22): Document the signature and ‘default’ argument in the
     docstring of the new ‘anext’ builtin.

   - bpo-43833(23): Emit a deprecation warning if the numeric literal is
     immediately followed by one of keywords: and, else, for, if, in,
     is, or.  Raise a syntax error with more informative message if it
     is immediately followed by other keyword or identifier.

   - bpo-43879(24): Add native_thread_id to PyThreadState.  Patch by
     Gabriele N. Tornetta.

   - bpo-43693(25): Compute cell offsets relative to locals in compiler.
     Allows the interpreter to treats locals and cells a single array,
     which is slightly more efficient.  Also make the LOAD_CLOSURE
     opcode an alias for LOAD_FAST. Preserving LOAD_CLOSURE helps keep
     bytecode a bit more readable.

   - bpo-17792(26): More accurate error messages for access of unbound
     locals or free vars.

   - bpo-28146(27): Fix a confusing error message in *note str.format():
     621.

   - bpo-11105(28): When compiling *note ast.AST: 1a6. objects with
     recursive references through *note compile(): 192, the interpreter
     doesn’t crash anymore instead it raises a *note RecursionError:
     d90.

   - bpo-39091(29): Fix crash when using passing a non-exception to a
     generator’s ‘throw()’ method.  Patch by Noah Oxer

   - bpo-33346(30): Asynchronous comprehensions are now allowed inside
     comprehensions in asynchronous functions.  Outer comprehensions
     implicitly become asynchronous.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44305

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43413

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43667

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43693

   (5) https://bugs.python.org/issue?@action=redirect&bpo=44232

   (6) https://bugs.python.org/issue?@action=redirect&bpo=44201

   (7) https://bugs.python.org/issue?@action=redirect&bpo=43693

   (8) https://bugs.python.org/issue?@action=redirect&bpo=44184

   (9) https://bugs.python.org/issue?@action=redirect&bpo=44187

   (10) https://bugs.python.org/issue?@action=redirect&bpo=44180

   (11) https://bugs.python.org/issue?@action=redirect&bpo=44168

   (12) https://bugs.python.org/issue?@action=redirect&bpo=44156

   (13) https://bugs.python.org/issue?@action=redirect&bpo=44143

   (14) https://bugs.python.org/issue?@action=redirect&bpo=44032

   (15) https://bugs.python.org/issue?@action=redirect&bpo=44114

   (16) https://bugs.python.org/issue?@action=redirect&bpo=44110

   (17) https://bugs.python.org/issue?@action=redirect&bpo=26110

   (18) https://bugs.python.org/issue?@action=redirect&bpo=28307

   (19) https://bugs.python.org/issue?@action=redirect&bpo=43149

   (20) https://bugs.python.org/issue?@action=redirect&bpo=43822

   (21) https://bugs.python.org/issue?@action=redirect&bpo=40222

   (22) https://bugs.python.org/issue?@action=redirect&bpo=43918

   (23) https://bugs.python.org/issue?@action=redirect&bpo=43833

   (24) https://bugs.python.org/issue?@action=redirect&bpo=43879

   (25) https://bugs.python.org/issue?@action=redirect&bpo=43693

   (26) https://bugs.python.org/issue?@action=redirect&bpo=17792

   (27) https://bugs.python.org/issue?@action=redirect&bpo=28146

   (28) https://bugs.python.org/issue?@action=redirect&bpo=11105

   (29) https://bugs.python.org/issue?@action=redirect&bpo=39091

   (30) https://bugs.python.org/issue?@action=redirect&bpo=33346


File: python.info,  Node: Biblioteca<91>,  Next: Documentação<32>,  Prev: Núcleo e embutidos<89>,  Up: Python 3 11 0 alpha 1

1.23.42.21 Biblioteca
.....................

   - bpo-45371(1): Fix clang rpath issue in ‘distutils’.  The
     UnixCCompiler now uses correct clang option to add a runtime
     library directory (rpath) to a shared library.

   - bpo-45329(2): Fix freed memory access in ‘pyexpat.xmlparser’ when
     building it with an installed expat library <= 2.2.0.

   - bpo-41710(3): On Unix, if the ‘sem_clockwait()’ function is
     available in the C library (glibc 2.30 and newer), the *note
     threading.Lock.acquire(): 698. method now uses the monotonic clock
     (*note time.CLOCK_MONOTONIC: 699.) for the timeout, rather than
     using the system clock (*note time.CLOCK_REALTIME: 69a.), to not be
     affected by system clock changes.  Patch by Victor Stinner.

   - bpo-1596321(4): Fix the ‘threading._shutdown()’ function when the
     *note threading: ed. module was imported first from a thread
     different than the main thread: no longer log an error at Python
     exit.

   - bpo-45274(5): Fix a race condition in the *note Thread.join():
     1224. method of the *note threading: ed. module.  If the function
     is interrupted by a signal and the signal handler raises an
     exception, make sure that the thread remains in a consistent state
     to prevent a deadlock.  Patch by Victor Stinner.

   - bpo-21302(6): In Unix operating systems, *note time.sleep(): 69d.
     now uses the ‘nanosleep()’ function, if ‘clock_nanosleep()’ is not
     available but ‘nanosleep()’ is available.  ‘nanosleep()’ allows to
     sleep with nanosecond precision.

   - bpo-21302(7): On Windows, *note time.sleep(): 69d. now uses a
     waitable timer which has a resolution of 100 nanoseconds (10^-7
     seconds).  Previously, it had a resolution of 1 millisecond (10^-3
     seconds).  Patch by Benjamin Szőke and Victor Stinner.

   - bpo-45238(8): Fix ‘unittest.IsolatedAsyncioTestCase.debug()’: it
     runs now asynchronous methods and callbacks.

   - bpo-36674(9): *note unittest.TestCase.debug(): 19d4. raises now a
     *note unittest.SkipTest: 101a. if the class or the test method are
     decorated with the skipping decorator.

   - bpo-45235(10): Fix an issue where argparse would not preserve
     values in a provided namespace when using a subparser with
     defaults.

   - bpo-45183(11): Have zipimport.zipimporter.find_spec() not raise an
     exception when the underlying zip file has been deleted and the
     internal cache has been reset via invalidate_cache().

   - bpo-45234(12): Fixed a regression in *note copyfile(): a63, *note
     copy(): a64, *note copy2(): a65. raising *note FileNotFoundError:
     42b. when source is a directory, which should raise *note
     IsADirectoryError: 1092.

   - bpo-45228(13): Fix stack buffer overflow in parsing J1939 network
     address.

   - bpo-45225(14): use map function instead of genexpr in capwords.

   - bpo-42135(15): Fix typo: ‘importlib.find_loader’ is really slated
     for removal in Python 3.12 not 3.10, like the others in PR 25169.

     Patch por Hugo van Kemenade.

   - bpo-20524(16): Improves error messages on ‘.format()’ operation for
     ‘str’, ‘float’, ‘int’, and ‘complex’.  New format now shows the
     problematic pattern and the object type.

   - bpo-45168(17): Change *note dis.dis(): b46. output to omit op arg
     values that cannot be resolved due to ‘co_consts’, ‘co_names’ etc
     not being provided.  Previously the oparg itself was repeated in
     the value field, which is not useful and can be confusing.

   - bpo-21302(18): In Unix operating systems, *note time.sleep(): 69d.
     now uses the ‘clock_nanosleep()’ function, if available, which
     allows to sleep for an interval specified with nanosecond
     precision.

   - bpo-45173(19): Remove from the *note configparser: 22. module: the
     ‘SafeConfigParser’ class, the ‘filename’ property of the *note
     ParsingError: 505. class, the ‘readfp()’ method of the *note
     ConfigParser: 1c8. class, deprecated since Python 3.2.

     Patch por Hugo van Kemenade.

   - bpo-44987(20): Pure ASCII strings are now normalized in constant
     time by *note unicodedata.normalize(): 6d5.  Patch by Donghee Na.

   - bpo-35474(21): Calling *note mimetypes.guess_all_extensions():
     19d5. with ‘strict=False’ no longer affects the result of the
     following call with ‘strict=True’.  Also, mutating the returned
     list no longer affects the global state.

   - bpo-45166(22): *note typing.get_type_hints(): 6b1. now works with
     *note Final: 267. wrapped in *note ForwardRef: 1964.

   - bpo-45162(23): Remove many old deprecated *note unittest: 106.
     features:

        * “‘fail*’” and “‘assert*’” aliases of *note TestCase: 44f.
          methods.

        * Broken from start *note TestCase: 44f. method
          ‘assertDictContainsSubset()’.

        * Ignored ‘<unittest.TestLoader.loadTestsFromModule>
          TestLoader.loadTestsFromModule()’ parameter 'use_load_tests'.

        * Old alias ‘_TextTestResult’ of *note TextTestResult: 531.

   - bpo-38371(24): Remove the deprecated ‘split()’ method of
     ‘_tkinter.TkappType’.  Patch by Erlend E. Aasland.

   - bpo-20499(25): Improve the speed and accuracy of
     statistics.pvariance().

   - bpo-45132(26): Remove *note __getitem__(): 283. methods of *note
     xml.dom.pulldom.DOMEventStream: 735, *note
     wsgiref.util.FileWrapper: 736. and *note fileinput.FileInput: 737,
     deprecated since Python 3.9.

     Patch por Hugo van Kemenade.

   - bpo-45129(27): Due to significant security concerns, the
     'reuse_address' parameter of *note
     asyncio.loop.create_datagram_endpoint(): 733, disabled in Python
     3.9, is now entirely removed.  This is because of the behavior of
     the socket option ‘SO_REUSEADDR’ in UDP.

     Patch por Hugo van Kemenade.

   - bpo-45124(28): The ‘bdist_msi’ command, deprecated in Python 3.9,
     is now removed.

     Use ‘bdist_wheel’ (wheel packages) instead.

     Patch por Hugo van Kemenade.

   - bpo-30856(29): *note unittest.TestResult: 11a6. methods *note
     addFailure(): 19d6, *note addError(): 19d7, *note addSkip(): 19d8.
     and *note addSubTest(): 19d9. are now called immediately after
     raising an exception in test or finishing a subtest.  Previously
     they were called only after finishing the test clean up.

   - bpo-45034(30): Changes how error is formatted for ‘struct.pack’
     with ‘'H'’ and ‘'h'’ modes and too large / small numbers.  Now it
     shows the actual numeric limits, while previously it was showing
     arithmetic expressions.

   - bpo-25894(31): *note unittest: 106. now always reports skipped and
     failed subtests separately: separate characters in default mode and
     separate lines in verbose mode.  Also the test description is now
     output for errors in test method, class and module cleanups.

   - bpo-45081(32): Fix issue when dataclasses that inherit from
     ‘typing.Protocol’ subclasses have wrong ‘__init__’.  Patch provided
     by Yurii Karabas.

   - bpo-45085(33): The ‘binhex’ module, deprecated in Python 3.9, is
     now removed.  The following *note binascii: 10. functions,
     deprecated in Python 3.9, are now also removed:

        * ‘a2b_hqx()’, ‘b2a_hqx()’;

        * ‘rlecode_hqx()’, ‘rledecode_hqx()’.

     A função *note binascii.crc_hqx(): 734. continua disponível.

     Patch por Victor Stinner.

   - bpo-40360(34): The ‘lib2to3’ package is now deprecated and may not
     be able to parse Python 3.10 or newer.  See the PEP 617(35) (New
     PEG parser for CPython).  Patch by Victor Stinner.

   - bpo-45075(36): Rename ‘traceback.StackSummary.format_frame()’ to
     *note traceback.StackSummary.format_frame_summary(): 6a3.  This
     method was added for 3.11 so it was not released yet.

     Updated code and docs to better distinguish frame and FrameSummary.

   - bpo-31299(37): Add option to completely drop frames from a
     traceback by returning ‘None’ from a ‘format_frame()’ override.

   - bpo-41620(38): *note run(): 11a5. now always return a *note
     TestResult: 11a6. instance.  Previously it returned ‘None’ if the
     test class or method was decorated with a skipping decorator.

   - bpo-45021(39): Fix a potential deadlock at shutdown of forked
     children when using *note concurrent.futures: 21. module

   - bpo-43913(40): Fix bugs in cleaning up classes and modules in *note
     unittest: 106.:

        * Functions registered with *note addModuleCleanup(): a55. were
          not called unless the user defines ‘tearDownModule()’ in their
          test module.

        * Functions registered with *note addClassCleanup(): a56. were
          not called if ‘tearDownClass’ is set to ‘None’.

        * Buffering in *note TestResult: 11a6. did not work with
          functions registered with ‘addClassCleanup()’ and
          ‘addModuleCleanup()’.

        * Errors in functions registered with ‘addClassCleanup()’ and
          ‘addModuleCleanup()’ were not handled correctly in buffered
          and debug modes.

        * Errors in ‘setUpModule()’ and functions registered with
          ‘addModuleCleanup()’ were reported in wrong order.

        * And several lesser bugs.

   - bpo-45030(41): Fix integer overflow in pickling and copying the
     range iterator.

   - bpo-45001(42): Made email date parsing more robust against
     malformed input, namely a whitespace-only ‘Date:’ header.  Patch by
     Wouter Bolsterlee.

   - bpo-45010(43): Remove support of special method ‘__div__’ in *note
     unittest.mock: 107.  It is not used in Python 3.

   - bpo-39218(44): Improve accuracy of variance calculations by using
     ‘x*x’ instead of ‘x**2’.

   - bpo-43613(45): Improve the speed of *note gzip.compress(): 63e. and
     *note gzip.decompress(): 124d. by compressing and decompressing at
     once in memory instead of in a streamed fashion.

   - bpo-37596(46): Ensure that *note set: 5d9. and *note frozenset:
     5da. objects are always *note marshalled: 8d. reproducibly.

   - bpo-44019(47): A new function ‘operator.call’ has been added, such
     that ‘operator.call(obj, *args, **kwargs) == obj(*args, **kwargs)’.

   - bpo-42255(48): ‘webbrowser.MacOSX’ is deprecated and will be
     removed in Python 3.13.  It is untested and undocumented and also
     not used by *note webbrowser: 115. itself.  Patch by Donghee Na.

   - bpo-44955(49): Method *note stopTestRun(): 1390. is now always
     called in pair with method *note startTestRun(): 138f. for *note
     TestResult: 11a6. objects implicitly created in *note run(): 11a5.
     Previously it was not called for test methods and classes decorated
     with a skipping decorator.

   - bpo-39039(50): tarfile.open raises *note ReadError: 19da. when a
     zlib error occurs during file extraction.

   - bpo-44935(51): *note subprocess: d6. on Solaris now also uses *note
     os.posix_spawn(): 220. for better performance.

   - bpo-44911(52): *note IsolatedAsyncioTestCase: 30c. will no longer
     throw an exception while cancelling leaked tasks.  Patch by Bar
     Harel.

   - bpo-41322(53): Added ‘DeprecationWarning’ for tests and async tests
     that return a value!=None (as this may indicate an improperly
     written test, for example a test written as a generator function).

   - bpo-44524(54): Make exception message more useful when subclass
     from typing special form alias.  Patch provided by Yurii Karabas.

   - bpo-38956(55): *note argparse.BooleanOptionalAction: 197b.’s
     default value is no longer printed twice when used with *note
     argparse.ArgumentDefaultsHelpFormatter: 19db.

   - bpo-44860(56): Fix the ‘posix_user’ scheme in *note sysconfig: db.
     to not depend on *note sys.platlibdir: 93f.

   - bpo-44859(57): Improve error handling in *note sqlite3: cf. and
     raise more accurate exceptions.

        * *note MemoryError: 15c5. is now raised instead of *note
          sqlite3.Warning: 1940. when memory is not enough for encoding
          a statement to UTF-8 in ‘Connection.__call__()’ and
          ‘Cursor.execute()’.

        * ‘UnicodEncodeError’ is now raised instead of *note
          sqlite3.Warning: 1940. when the statement contains surrogate
          characters in ‘Connection.__call__()’ and ‘Cursor.execute()’.

        * *note TypeError: 2c3. is now raised instead of *note
          ValueError: 202. for non-string script argument in
          ‘Cursor.executescript()’.

        * *note ValueError: 202. is now raised for script containing the
          null character instead of truncating it in
          ‘Cursor.executescript()’.

        * Correctly handle exceptions raised when getting boolean value
          of the result of the progress handler.

        * Add many tests covering different corner cases.

   - bpo-44581(58): Upgrade bundled pip to 21.2.3 and setuptools to
     57.4.0

   - bpo-44849(59): Fix the *note os.set_inheritable(): f2d. function on
     FreeBSD 14 for file descriptor opened with the *note O_PATH: fa6.
     flag: ignore the *note EBADF: 962. error on ‘ioctl()’, fallback on
     the ‘fcntl()’ implementation.  Patch by Victor Stinner.

   - bpo-44605(60): The @functools.total_ordering() decorator now works
     with metaclasses.

   - bpo-44524(61): Fixed an issue wherein the ‘__name__’ and
     ‘__qualname__’ attributes of subscribed specialforms could be
     ‘None’.

   - bpo-44839(62): *note MemoryError: 15c5. raised in user-defined
     functions will now produce a ‘MemoryError’ in *note sqlite3: cf.
     *note OverflowError: 885. will now be converted to *note DataError:
     19dc.  Previously *note OperationalError: 19dd. was produced in
     these cases.

   - bpo-44822(63): *note sqlite3: cf. user-defined functions and
     aggregators returning *note strings: 44c. with embedded NUL
     characters are no longer truncated.  Patch by Erlend E. Aasland.

   - bpo-44801(64): Ensure that the *note ParamSpec: 15e. variable in
     Callable can only be substituted with a parameters expression (a
     list of types, an ellipsis, ParamSpec or Concatenate).

   - bpo-44806(65): Non-protocol subclasses of *note typing.Protocol:
     264. ignore now the ‘__init__’ method inherited from protocol base
     classes.

   - bpo-27275(66): *note collections.OrderedDict.popitem(): 1331. and
     ‘collections.OrderedDict.pop()’ no longer call ‘__getitem__’ and
     ‘__delitem__’ methods of the OrderedDict subclasses.

   - bpo-44793(67): Fix checking the number of arguments when subscribe
     a generic type with ‘ParamSpec’ parameter.

   - bpo-44784(68): In importlib.metadata tests, override warnings
     behavior under expected DeprecationWarnings (importlib_metadata
     4.6.3).

   - bpo-44667(69): The *note tokenize.tokenize(): 4d9. doesn’t
     incorrectly generate a ‘NEWLINE’ token if the source doesn’t end
     with a new line character but the last line is a comment, as the
     function is already generating a ‘NL’ token.  Patch by Pablo
     Galindo

   - bpo-44771(70): Added ‘importlib.simple’ module implementing
     adapters from a low-level resources reader interface to a
     ‘TraversableResources’ interface.  Legacy API (‘path’, ‘contents’,
     …) is now supported entirely by the ‘.files()’ API with a
     compatibility shim supplied for resource loaders without that
     functionality.  Feature parity with ‘importlib_resources’ 5.2.

   - bpo-44752(71): ‘rcompleter’ does not call *note getattr(): bea. on
     *note property: 194. objects to avoid the side-effect of evaluating
     the corresponding method.

   - bpo-44747(72): Refactor usage of ‘sys._getframe’ in ‘typing’
     module.  Patch provided by Yurii Karabas.

   - bpo-42378(73): Fixes the issue with log file being overwritten when
     *note logging.FileHandler: 19de. is used in *note atexit: c. with
     'filemode' set to ‘'w'’.  Note this will cause the message in
     'atexit' not being logged if the log stream is already closed due
     to shutdown of logging.

   - bpo-44720(74): ‘weakref.proxy’ objects referencing non-iterators
     now raise ‘TypeError’ rather than dereferencing the null
     ‘tp_iternext’ slot and crashing.

   - bpo-44704(75): The implementation of ‘collections.abc.Set._hash()’
     now matches that of ‘frozenset.__hash__()’.

   - bpo-44666(76): Fixed issue in *note compileall.compile_file(): e0b.
     when ‘sys.stdout’ is redirected.  Patch by Stefan Hölzl.

   - bpo-44688(77): *note sqlite3.Connection.create_collation(): 676.
     now accepts non-ASCII collation names.  Patch by Erlend E. Aasland.

   - bpo-44690(78): Adopt 'binacii.a2b_base64'’s strict mode in
     'base64.b64decode'.

   - bpo-42854(79): Fixed a bug in the ‘_ssl’ module that was throwing
     *note OverflowError: 885. when using ‘_ssl._SSLSocket.write()’ and
     ‘_ssl._SSLSocket.read()’ for a big value of the ‘len’ parameter.
     Patch by Pablo Galindo.

   - bpo-44686(80): Replace ‘unittest.mock._importer’ with
     ‘pkgutil.resolve_name’.

   - bpo-44353(81): Make ‘NewType.__call__’ faster by implementing it in
     C. Patch provided by Yurii Karabas.

   - bpo-44682(82): Change the *note pdb: a5. 'commands' directive to
     disallow setting commands for an invalid breakpoint and to display
     an appropriate error.

   - bpo-44353(83): Refactor ‘typing.NewType’ from function into
     callable class.  Patch provided by Yurii Karabas.

   - bpo-44678(84): Added a separate error message for discontinuous
     padding in 'binascii.a2b_base64' strict mode.

   - bpo-44524(85): Add missing ‘__name__’ and ‘__qualname__’ attributes
     to ‘typing’ module classes.  Patch provided by Yurii Karabas.

   - bpo-40897(86): Give priority to using the current class constructor
     in *note inspect.signature(): 738.  Patch by Weipeng Hong.

   - bpo-44638(87): Add a reference to the zipp project and hint as to
     how to use it.

   - bpo-44648(88): Fixed wrong error being thrown by *note
     inspect.getsource(): 15f8. when examining a class in the
     interactive session.  Instead of *note TypeError: 2c3, it should be
     *note OSError: 417. with appropriate error message.

   - bpo-44608(89): Fix memory leak in ‘_tkinter._flatten()’ if it is
     called with a sequence or set, but not list or tuple.

   - bpo-44594(90): Fix an edge case of ‘ExitStack’ and ‘AsyncExitStack’
     exception chaining.  They will now match ‘with’ block behavior when
     ‘__context__’ is explicitly set to ‘None’ when the exception is in
     flight.

   - bpo-42799(91): In *note fnmatch: 5c, the cache size for compiled
     regex patterns (*note functools.lru_cache(): 9f7.) was bumped up
     from 256 to 32768, affecting functions: *note fnmatch.fnmatch():
     19df, *note fnmatch.fnmatchcase(): 19e0, *note fnmatch.filter():
     19e1.

   - bpo-41928(92): Update *note shutil.copyfile(): a63. to raise *note
     FileNotFoundError: 42b. instead of confusing *note
     IsADirectoryError: 1092. when a path ending with a ‘os.path.sep’
     does not exist; *note shutil.copy(): a64. and *note shutil.copy2():
     a65. are also affected.

   - bpo-44569(93): Added the ‘StackSummary.format_frame()’ function in
     *note traceback: fe.  This allows users to customize the way
     individual lines are formatted in tracebacks without
     re-implementing logic to handle recursive tracebacks.

   - bpo-44566(94): handle StopIteration subclass raised from
     @contextlib.contextmanager generator

   - bpo-44558(95): Make the implementation consistency of *note
     indexOf(): 8e1. between C and Python versions.  Patch by Donghee
     Na.

   - bpo-41249(96): Fixes ‘TypedDict’ to work with
     ‘typing.get_type_hints()’ and postponed evaluation of annotations
     across modules.

   - bpo-44554(97): Refactor argument processing in ‘pdb.main()’ to
     simplify detection of errors in input loading and clarify behavior
     around module or script invocation.

   - bpo-34798(98): Break up paragraph about *note pprint.PrettyPrinter:
     fb3. construction parameters to make it easier to read.

   - bpo-44539(99): Added support for recognizing JPEG files without
     JFIF or Exif markers.

   - bpo-44461(100): Fix bug with *note pdb: a5.’s handling of import
     error due to a package which does not have a ‘__main__’ module

   - bpo-43625(101): Fix a bug in the detection of CSV file headers by
     *note csv.Sniffer.has_header(): 19e2. and improve documentation of
     same.

   - bpo-44516(102): Update vendored pip to 21.1.3

   - bpo-42892(103): Fixed an exception thrown while parsing a malformed
     multipart email by *note email.message.EmailMessage: 27b.

   - bpo-44468(104): *note typing.get_type_hints(): 6b1. now finds
     annotations in classes and base classes with unexpected
     ‘__module__’.  Previously, it skipped those MRO elements.

   - bpo-44491(105): Allow clearing the *note sqlite3: cf. authorizer
     callback by passing *note None: 675. to *note set_authorizer():
     2ab.  Patch by Erlend E. Aasland.

   - bpo-43977(106): Set the proper *note Py_TPFLAGS_MAPPING: 19e3. and
     *note Py_TPFLAGS_SEQUENCE: 19e4. flags for subclasses created
     before a parent has been registered as a *note
     collections.abc.Mapping: 8d0. or *note collections.abc.Sequence:
     1204.

   - bpo-44482(107): Fix very unlikely resource leak in *note glob: 64.
     in alternate Python implementations.

   - bpo-44466(108): The *note faulthandler: 58. module now detects if a
     fatal error occurs during a garbage collector collection.  Patch by
     Victor Stinner.

   - bpo-44471(109): A *note TypeError: 2c3. is now raised instead of an
     *note AttributeError: 34b. in *note
     contextlib.ExitStack.enter_context(): 5d3. and *note
     contextlib.AsyncExitStack.enter_async_context(): 5d6. for objects
     which do not support the *note context manager: 5d4. or *note
     asynchronous context manager: 5d7. protocols correspondingly.

   - bpo-44404(110): *note tkinter: f0.’s ‘after()’ method now supports
     callables without the ‘__name__’ attribute.

   - bpo-41546(111): Make *note pprint: ae. (like the builtin ‘print’)
     not attempt to write to ‘stdout’ when it is ‘None’.

   - bpo-44458(112): ‘BUFFER_BLOCK_SIZE’ is now declared static, to
     avoid linking collisions when bz2, lmza or zlib are statically
     linked.

   - bpo-44464(113): Remove exception for flake8 in deprecated
     importlib.metadata interfaces.  Sync with importlib_metadata 4.6.

   - bpo-44446(114): Take into account that ‘lineno’ might be ‘None’ in
     *note traceback.FrameSummary: eb3.

   - bpo-44439(115): Fix in ‘bz2.BZ2File.write()’ /
     ‘lzma.LZMAFile.write()’ methods, when the input data is an object
     that supports the buffer protocol, the file length may be wrong.

   - bpo-44434(116): _thread.start_new_thread() no longer calls
     PyThread_exit_thread() explicitly at the thread exit, the call was
     redundant.  On Linux with the glibc, pthread_exit() aborts the
     whole process if dlopen() fails to open libgcc_s.so file (ex:
     EMFILE error).  Patch by Victor Stinner.

   - bpo-42972(117): The _thread.RLock type now fully implement the GC
     protocol: add a traverse function and the *note Py_TPFLAGS_HAVE_GC:
     77d. flag.  Patch by Victor Stinner.

   - bpo-44422(118): The *note threading.enumerate(): 19e5. function now
     uses a reentrant lock to prevent a hang on reentrant call.  Patch
     by Victor Stinner.

   - bpo-38291(119): Importing typing.io or typing.re now prints a
     ‘DeprecationWarning’.

   - bpo-37880(120): argparse actions store_const and append_const each
     receive a default value of ‘None’ when the ‘const’ kwarg is not
     provided.  Previously, this raised a *note TypeError: 2c3.

   - bpo-44389(121): Fix deprecation of *note ssl.OP_NO_TLSv1_3: 19e6.

   - bpo-27827(122): ‘pathlib.PureWindowsPath.is_reserved()’ now
     identifies a greater range of reserved filenames, including those
     with trailing spaces or colons.

   - bpo-44395(123): Fix ‘as_string()’ to pass unixfrom properly.  Patch
     by Donghee Na.

   - bpo-34266(124): Handle exceptions from parsing the arg of *note
     pdb: a5.’s run/restart command.

   - bpo-44362(125): Improve *note ssl: d0. module’s deprecation
     messages, error reporting, and documentation for deprecations.

   - bpo-44342(126): [Enum] Change pickling from by-value to by-name.

   - bpo-44356(127): [Enum] Allow multiple data-type mixins if they are
     all the same.

   - bpo-44351(128): Restore back ‘parse_makefile()’ in
     ‘distutils.sysconfig’ because it behaves differently than the
     similar implementation in *note sysconfig: db.

   - bpo-35800(129): ‘smtpd.MailmanProxy’ is now removed as it is
     unusable without an external module, ‘mailman’.  Patch by Donghee
     Na.

   - bpo-44357(130): Added a function that returns cube root of the
     given number *note math.cbrt(): 661.

   - bpo-44339(131): Change ‘math.pow(±0.0, -math.inf)’ to return ‘inf’
     instead of raising ‘ValueError’.  This brings the special-case
     handling of ‘math.pow’ into compliance with the IEEE 754 standard.

   - bpo-44242(132): Remove missing flag check from Enum creation and
     move into a ‘verify’ decorator.

   - bpo-44246(133): In ‘importlib.metadata’, restore compatibility in
     the result from ‘Distribution.entry_points’ (‘EntryPoints’) to
     honor expectations in older implementations and issuing deprecation
     warnings for these cases: A. ‘EntryPoints’ objects are once again
     mutable, allowing for ‘sort()’ and other list-based mutation
     operations.  Avoid deprecation warnings by casting to a mutable
     sequence (e.g.  ‘list(dist.entry_points).sort()’).  B.
     ‘EntryPoints’ results once again allow for access by index.  To
     avoid deprecation warnings, cast the result to a Sequence first
     (e.g.  ‘tuple(dist.entry_points)[0]’).

   - bpo-44246(134): In importlib.metadata.entry_points, de-duplication
     of distributions no longer requires loading the full metadata for
     PathDistribution objects, improving entry point loading performance
     by ~10x.

   - bpo-43858(135): Added a function that returns a copy of a dict of
     logging levels: *note logging.getLevelNamesMapping(): 659.

   - bpo-44260(136): The *note random.Random: 19e7. constructor no
     longer reads system entropy without need.

   - bpo-44254(137): On Mac, give turtledemo button text a color that
     works on both light or dark background.  Programmers cannot control
     the latter.

   - bpo-44258(138): Support PEP 515 for Fraction’s initialization from
     string.

   - bpo-44235(139): Remove deprecated functions in the *note gettext:
     63.  Patch by Donghee Na.

   - bpo-38693(140): Prefer f-strings to ‘.format’ in
     importlib.resources.

   - bpo-33693(141): Importlib.metadata now prefers f-strings to
     .format.

   - bpo-44241(142): Incorporate minor tweaks from importlib_metadata
     4.1: SimplePath protocol, support for Metadata 2.2.

   - bpo-43216(143): Remove the ‘@asyncio.coroutine’ *note decorator:
     731. enabling legacy generator-based coroutines to be compatible
     with async/await code; remove ‘asyncio.coroutines.CoroWrapper’ used
     for wrapping legacy coroutine objects in the debug mode.  The
     decorator has been deprecated since Python 3.8 and the removal was
     initially scheduled for Python 3.10.  Patch by Illia Volochii.

   - bpo-44210(144): Make importlib.metadata._meta.PackageMetadata
     public.

   - bpo-43643(145): Declare readers.MultiplexedPath.name as a property
     per the spec.

   - bpo-27334(146): The *note sqlite3: cf. context manager now performs
     a rollback (thus releasing the database lock) if commit failed.
     Patch by Luca Citi and Erlend E. Aasland.

   - bpo-4928(147): Documented existing behavior on POSIX:
     NamedTemporaryFiles are not deleted when creating process is killed
     with SIGKILL

   - bpo-44154(148): Optimize *note fractions.Fraction: 1e7. pickling
     for large components.

   - bpo-33433(149): For IPv4 mapped IPv6 addresses ( RFC 4291(150)
     Section 2.5.5.2), the *note ipaddress.IPv6Address.is_private: 173b.
     check is deferred to the mapped IPv4 address.  This solves a bug
     where public mapped IPv4 addresses were considered private by the
     IPv6 check.

   - bpo-44150(151): Add optional 'weights' argument to
     statistics.fmean().

   - bpo-44142(152): *note ast.unparse(): 8eb. will now drop the
     redundant parentheses when tuples used as assignment targets (e.g
     in for loops).

   - bpo-44145(153): *note hmac: 6a. computations were not releasing the
     GIL while calling the OpenSSL ‘HMAC_Update’ C API (a new feature in
     3.9).  This unintentionally prevented parallel computation as other
     *note hashlib: 68. algorithms support.

   - bpo-44095(154): *note zipfile.Path: 6c9. now supports *note
     zipfile.Path.stem: 6c6, *note zipfile.Path.suffixes: 6c8, and *note
     zipfile.Path.suffix: 6c7. attributes.

   - bpo-44077(155): It’s now possible to receive the type of service
     (ToS), a.k.a.  differentiated services (DS), a.k.a.  differentiated
     services code point (DSCP) and explicit congestion notification
     (ECN) IP header fields with ‘socket.IP_RECVTOS’.

   - bpo-37788(156): Fix a reference leak when a Thread object is never
     joined.

   - bpo-38908(157): Subclasses of ‘typing.Protocol’ which only have
     data variables declared will now raise a ‘TypeError’ when checked
     with ‘isinstance’ unless they are decorated with
     ‘runtime_checkable()’.  Previously, these checks passed silently.
     Patch provided by Yurii Karabas.

   - bpo-44098(158): ‘typing.ParamSpec’ will no longer be found in the
     ‘__parameters__’ of most *note typing: 104. generics except in
     valid use locations specified by PEP 612(159).  This prevents
     incorrect usage like ‘typing.List[P][int]’.  This change means
     incorrect usage which may have passed silently in 3.10 beta 1 and
     earlier will now error.

   - bpo-44089(160): Allow subclassing ‘csv.Error’ in 3.10 (it was
     allowed in 3.9 and earlier but was disallowed in early versions of
     3.10).

   - bpo-44081(161): *note ast.unparse(): 8eb. now doesn’t use redundant
     spaces to separate ‘lambda’ and the ‘:’ if there are no parameters.

   - bpo-44061(162): Fix regression in previous release when calling
     *note pkgutil.iter_modules(): d6e. with a list of *note
     pathlib.Path: 229. objects

   - bpo-44059(163): Register the SerenityOS Browser in the *note
     webbrowser: 115. module.

   - bpo-36515(164): The *note hashlib: 68. module no longer does
     unaligned memory accesses when compiled for ARM platforms.

   - bpo-40465(165): Remove random module features deprecated in Python
     3.9.

   - bpo-44018(166): random.seed() no longer mutates bytearray inputs.

   - bpo-38352(167): Add ‘IO’, ‘BinaryIO’, ‘TextIO’, ‘Match’, and
     ‘Pattern’ to ‘typing.__all__’.  Patch by Jelle Zijlstra.

   - bpo-44002(168): *note urllib.parse: 10a. now uses
     ‘functool.lru_cache()’ for its internal URL splitting and quoting
     caches instead of rolling its own like its the ‘90s.

     The undocumented internal *note urllib.parse: 10a. ‘Quoted’ class
     API is now deprecated, for removal in 3.14.

   - bpo-43972(169): When *note http.server.SimpleHTTPRequestHandler:
     b56. sends a ‘301 (Moved Permanently)’ for a directory path not
     ending with ‘/’, add a ‘Content-Length: 0’ header.  This improves
     the behavior for certain clients.

   - bpo-28528(170): Fix a bug in *note pdb: a5. where ‘checkline()’
     raises *note AttributeError: 34b. if it is called after ‘reset()’.

   - bpo-43853(171): Improved string handling for *note sqlite3: cf.
     user-defined functions and aggregates:

        * It is now possible to pass strings with embedded null
          characters to UDFs

        * Conversion failures now correctly raise *note MemoryError:
          15c5.

     Patch por Erlend E. Aasland.

   - bpo-43666(172): AIX: ‘Lib/_aix_support.get_platform()’ may fail in
     an AIX WPAR. The fileset bos.rte appears to have a builddate in
     both LPAR and WPAR so this fileset is queried rather than bos.mp64.
     To prevent a similar situation (no builddate in ODM) a value (9988)
     sufficient for completing a build is provided.  Patch by M Felt.

   - bpo-43650(173): Fix *note MemoryError: 15c5. in *note
     shutil.unpack_archive(): 46b. which fails inside
     ‘shutil._unpack_zipfile()’ on large files.  Patch by Igor
     Bolshakov.

   - bpo-43612(174): *note zlib.compress(): 63f. now accepts a wbits
     parameter which allows users to compress data as a raw deflate
     block without zlib headers and trailers in one go.  Previously this
     required instantiating a ‘zlib.compressobj’.  It also provides a
     faster alternative to ‘gzip.compress’ when wbits=31 is used.

   - bpo-43392(175): ‘importlib._bootstrap._find_and_load()’ now
     implements a two-step check to avoid locking when modules have been
     already imported and are ready.  This improves performance of
     repeated calls to *note importlib.import_module(): 518. and *note
     importlib.__import__(): 10a6.

   - bpo-43318(176): Fix a bug where *note pdb: a5. does not always echo
     cleared breakpoints.

   - bpo-43234(177): Prohibit passing non-*note
     concurrent.futures.ThreadPoolExecutor: 742. executors to
     ‘loop.set_default_executor()’ following a deprecation in Python
     3.8.  Patch by Illia Volochii.

   - bpo-43232(178): Prohibit previously deprecated potentially
     disruptive operations on ‘asyncio.trsock.TransportSocket’.  Patch
     by Illia Volochii.

   - bpo-30077(179): Added support for Apple’s aifc/sowt
     pseudo-compression

   - bpo-42971(180): Add definition of ‘errno.EQFULL’ for platforms that
     define this constant (such as macOS).

   - bpo-43086(181): Added a new optional ‘strict_mode’ parameter to
     'binascii.a2b_base64'.  When ‘scrict_mode’ is set to ‘True’, the
     'a2b_base64' function will accept only valid base64 content.  More
     details about what “valid base64 content” is, can be found in the
     function’s documentation.

   - bpo-43024(182): Improve the help signature of *note
     traceback.print_exception(): 852, *note
     traceback.format_exception(): 850. and *note
     traceback.format_exception_only(): 851.

   - bpo-33809(183): Add the *note traceback.TracebackException.print():
     6a4. method which prints the formatted exception information.

   - bpo-42862(184): *note sqlite3: cf. now utilizes *note
     functools.lru_cache(): 9f7. to implement the connection statement
     cache.  As a small optimisation, the default statement cache size
     has been increased from 100 to 128.  Patch by Erlend E. Aasland.

   - bpo-41818(185): Soumendra Ganguly: add termios.tcgetwinsize(),
     termios.tcsetwinsize().

   - bpo-40497(186): *note subprocess.check_output(): ff6. now raises
     *note ValueError: 202. when the invalid keyword argument 'check' is
     passed by user code.  Previously such use would fail later with a
     *note TypeError: 2c3.  Patch by Rémi Lapeyre.

   - bpo-37449(187): ‘ensurepip’ now uses ‘importlib.resources.files()’
     traversable APIs

   - bpo-40956(188): Use Argument Clinic in *note sqlite3: cf.  Patches
     by Erlend E. Aasland.

   - bpo-41730(189): ‘DeprecationWarning’ is now raised when importing
     ‘tkinter.tix’, which has been deprecated in documentation since
     Python 3.6.

   - bpo-20684(190): Remove unused ‘_signature_get_bound_param’ function
     from *note inspect: 7e. - by Anthony Sottile.

   - bpo-41402(191): Fix *note email.message.EmailMessage.set_content():
     19e8. when called with binary data and ‘7bit’ content transfer
     encoding.

   - bpo-32695(192): The 'compresslevel' and 'preset' keyword arguments
     of *note tarfile.open(): ea6. are now both documented and tested.

   - bpo-41137(193): Use utf-8 encoding while reading .pdbrc files.
     Patch by Srinivas Reddy Thatiparthy

   - bpo-24391(194): Improved reprs of *note threading: ed.
     synchronization objects: *note Semaphore: 1195, *note
     BoundedSemaphore: 1196, *note Event: 1197. and *note Barrier: 1223.

   - bpo-5846(195): Deprecated the following *note unittest: 106.
     functions, scheduled for removal in Python 3.13:

        * ‘findTestCases()’

        * ‘makeSuite()’

        * ‘getTestCaseNames()’

     Em vez delas, use os métodos de *note TestLoader: 28e.:

        * *note unittest.TestLoader.loadTestsFromModule(): 28f.

        * *note unittest.TestLoader.loadTestsFromTestCase(): 290.

        * *note unittest.TestLoader.getTestCaseNames(): 291.

     Patch por Erlend E. Aasland.

   - bpo-40563(196): Support pathlike objects on dbm/shelve.  Patch by
     Hakan Çelik and Henry-Joseph Audéoud.

   - bpo-34990(197): Fixed a Y2k38 bug in the compileall module where it
     would fail to compile files with a modification time after the year
     2038.

   - bpo-39549(198): Whereas the code for reprlib.Repr had previously
     used a hardcoded string value of ‘…’, this PR updates it to use of
     a “fillvalue” attribute, whose value defaults to ‘…’ and can be
     reset in either individual reprlib.Repr instances or in subclasses
     thereof.

   - bpo-37022(199): *note pdb: a5. now displays exceptions from
     ‘repr()’ with its ‘p’ and ‘pp’ commands.

   - bpo-38840(200): Fix ‘test___all__’ on platforms lacking a shared
     memory implementation.

   - bpo-39359(201): Add one missing check that the password is a bytes
     object for an encrypted zipfile.

   - bpo-38741(202): *note configparser: 22.: using ‘]’ inside a section
     header will no longer cut the section name short at the ‘]’

   - bpo-38415(203): Added missing behavior to *note
     contextlib.asynccontextmanager(): b3c. to match *note
     contextlib.contextmanager(): 1242. so decorated functions can
     themselves be decorators.

   - bpo-30256(204): Pass multiprocessing BaseProxy argument
     ‘manager_owned’ through AutoProxy.

   - bpo-27513(205): *note email.utils.getaddresses(): 1e1. now accepts
     *note email.header.Header: 19e9. objects along with string values.
     Patch by Zackery Spytz.

   - bpo-16379(206): Add SQLite error code and name to *note sqlite3:
     cf. exceptions.  Patch by Aviv Palivoda, Daniel Shahaf, and Erlend
     E. Aasland.

   - bpo-26228(207): pty.spawn no longer hangs on FreeBSD, macOS, and
     Solaris.

   - bpo-33349(208): lib2to3 now recognizes async generators everywhere.

   - bpo-29298(209): Fix ‘TypeError’ when required subparsers without
     ‘dest’ do not receive arguments.  Patch by Anthony Sottile.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45371

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45329

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41710

   (4) https://bugs.python.org/issue?@action=redirect&bpo=1596321

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45274

   (6) https://bugs.python.org/issue?@action=redirect&bpo=21302

   (7) https://bugs.python.org/issue?@action=redirect&bpo=21302

   (8) https://bugs.python.org/issue?@action=redirect&bpo=45238

   (9) https://bugs.python.org/issue?@action=redirect&bpo=36674

   (10) https://bugs.python.org/issue?@action=redirect&bpo=45235

   (11) https://bugs.python.org/issue?@action=redirect&bpo=45183

   (12) https://bugs.python.org/issue?@action=redirect&bpo=45234

   (13) https://bugs.python.org/issue?@action=redirect&bpo=45228

   (14) https://bugs.python.org/issue?@action=redirect&bpo=45225

   (15) https://bugs.python.org/issue?@action=redirect&bpo=42135

   (16) https://bugs.python.org/issue?@action=redirect&bpo=20524

   (17) https://bugs.python.org/issue?@action=redirect&bpo=45168

   (18) https://bugs.python.org/issue?@action=redirect&bpo=21302

   (19) https://bugs.python.org/issue?@action=redirect&bpo=45173

   (20) https://bugs.python.org/issue?@action=redirect&bpo=44987

   (21) https://bugs.python.org/issue?@action=redirect&bpo=35474

   (22) https://bugs.python.org/issue?@action=redirect&bpo=45166

   (23) https://bugs.python.org/issue?@action=redirect&bpo=45162

   (24) https://bugs.python.org/issue?@action=redirect&bpo=38371

   (25) https://bugs.python.org/issue?@action=redirect&bpo=20499

   (26) https://bugs.python.org/issue?@action=redirect&bpo=45132

   (27) https://bugs.python.org/issue?@action=redirect&bpo=45129

   (28) https://bugs.python.org/issue?@action=redirect&bpo=45124

   (29) https://bugs.python.org/issue?@action=redirect&bpo=30856

   (30) https://bugs.python.org/issue?@action=redirect&bpo=45034

   (31) https://bugs.python.org/issue?@action=redirect&bpo=25894

   (32) https://bugs.python.org/issue?@action=redirect&bpo=45081

   (33) https://bugs.python.org/issue?@action=redirect&bpo=45085

   (34) https://bugs.python.org/issue?@action=redirect&bpo=40360

   (35) https://peps.python.org/pep-0617/

   (36) https://bugs.python.org/issue?@action=redirect&bpo=45075

   (37) https://bugs.python.org/issue?@action=redirect&bpo=31299

   (38) https://bugs.python.org/issue?@action=redirect&bpo=41620

   (39) https://bugs.python.org/issue?@action=redirect&bpo=45021

   (40) https://bugs.python.org/issue?@action=redirect&bpo=43913

   (41) https://bugs.python.org/issue?@action=redirect&bpo=45030

   (42) https://bugs.python.org/issue?@action=redirect&bpo=45001

   (43) https://bugs.python.org/issue?@action=redirect&bpo=45010

   (44) https://bugs.python.org/issue?@action=redirect&bpo=39218

   (45) https://bugs.python.org/issue?@action=redirect&bpo=43613

   (46) https://bugs.python.org/issue?@action=redirect&bpo=37596

   (47) https://bugs.python.org/issue?@action=redirect&bpo=44019

   (48) https://bugs.python.org/issue?@action=redirect&bpo=42255

   (49) https://bugs.python.org/issue?@action=redirect&bpo=44955

   (50) https://bugs.python.org/issue?@action=redirect&bpo=39039

   (51) https://bugs.python.org/issue?@action=redirect&bpo=44935

   (52) https://bugs.python.org/issue?@action=redirect&bpo=44911

   (53) https://bugs.python.org/issue?@action=redirect&bpo=41322

   (54) https://bugs.python.org/issue?@action=redirect&bpo=44524

   (55) https://bugs.python.org/issue?@action=redirect&bpo=38956

   (56) https://bugs.python.org/issue?@action=redirect&bpo=44860

   (57) https://bugs.python.org/issue?@action=redirect&bpo=44859

   (58) https://bugs.python.org/issue?@action=redirect&bpo=44581

   (59) https://bugs.python.org/issue?@action=redirect&bpo=44849

   (60) https://bugs.python.org/issue?@action=redirect&bpo=44605

   (61) https://bugs.python.org/issue?@action=redirect&bpo=44524

   (62) https://bugs.python.org/issue?@action=redirect&bpo=44839

   (63) https://bugs.python.org/issue?@action=redirect&bpo=44822

   (64) https://bugs.python.org/issue?@action=redirect&bpo=44801

   (65) https://bugs.python.org/issue?@action=redirect&bpo=44806

   (66) https://bugs.python.org/issue?@action=redirect&bpo=27275

   (67) https://bugs.python.org/issue?@action=redirect&bpo=44793

   (68) https://bugs.python.org/issue?@action=redirect&bpo=44784

   (69) https://bugs.python.org/issue?@action=redirect&bpo=44667

   (70) https://bugs.python.org/issue?@action=redirect&bpo=44771

   (71) https://bugs.python.org/issue?@action=redirect&bpo=44752

   (72) https://bugs.python.org/issue?@action=redirect&bpo=44747

   (73) https://bugs.python.org/issue?@action=redirect&bpo=42378

   (74) https://bugs.python.org/issue?@action=redirect&bpo=44720

   (75) https://bugs.python.org/issue?@action=redirect&bpo=44704

   (76) https://bugs.python.org/issue?@action=redirect&bpo=44666

   (77) https://bugs.python.org/issue?@action=redirect&bpo=44688

   (78) https://bugs.python.org/issue?@action=redirect&bpo=44690

   (79) https://bugs.python.org/issue?@action=redirect&bpo=42854

   (80) https://bugs.python.org/issue?@action=redirect&bpo=44686

   (81) https://bugs.python.org/issue?@action=redirect&bpo=44353

   (82) https://bugs.python.org/issue?@action=redirect&bpo=44682

   (83) https://bugs.python.org/issue?@action=redirect&bpo=44353

   (84) https://bugs.python.org/issue?@action=redirect&bpo=44678

   (85) https://bugs.python.org/issue?@action=redirect&bpo=44524

   (86) https://bugs.python.org/issue?@action=redirect&bpo=40897

   (87) https://bugs.python.org/issue?@action=redirect&bpo=44638

   (88) https://bugs.python.org/issue?@action=redirect&bpo=44648

   (89) https://bugs.python.org/issue?@action=redirect&bpo=44608

   (90) https://bugs.python.org/issue?@action=redirect&bpo=44594

   (91) https://bugs.python.org/issue?@action=redirect&bpo=42799

   (92) https://bugs.python.org/issue?@action=redirect&bpo=41928

   (93) https://bugs.python.org/issue?@action=redirect&bpo=44569

   (94) https://bugs.python.org/issue?@action=redirect&bpo=44566

   (95) https://bugs.python.org/issue?@action=redirect&bpo=44558

   (96) https://bugs.python.org/issue?@action=redirect&bpo=41249

   (97) https://bugs.python.org/issue?@action=redirect&bpo=44554

   (98) https://bugs.python.org/issue?@action=redirect&bpo=34798

   (99) https://bugs.python.org/issue?@action=redirect&bpo=44539

   (100) https://bugs.python.org/issue?@action=redirect&bpo=44461

   (101) https://bugs.python.org/issue?@action=redirect&bpo=43625

   (102) https://bugs.python.org/issue?@action=redirect&bpo=44516

   (103) https://bugs.python.org/issue?@action=redirect&bpo=42892

   (104) https://bugs.python.org/issue?@action=redirect&bpo=44468

   (105) https://bugs.python.org/issue?@action=redirect&bpo=44491

   (106) https://bugs.python.org/issue?@action=redirect&bpo=43977

   (107) https://bugs.python.org/issue?@action=redirect&bpo=44482

   (108) https://bugs.python.org/issue?@action=redirect&bpo=44466

   (109) https://bugs.python.org/issue?@action=redirect&bpo=44471

   (110) https://bugs.python.org/issue?@action=redirect&bpo=44404

   (111) https://bugs.python.org/issue?@action=redirect&bpo=41546

   (112) https://bugs.python.org/issue?@action=redirect&bpo=44458

   (113) https://bugs.python.org/issue?@action=redirect&bpo=44464

   (114) https://bugs.python.org/issue?@action=redirect&bpo=44446

   (115) https://bugs.python.org/issue?@action=redirect&bpo=44439

   (116) https://bugs.python.org/issue?@action=redirect&bpo=44434

   (117) https://bugs.python.org/issue?@action=redirect&bpo=42972

   (118) https://bugs.python.org/issue?@action=redirect&bpo=44422

   (119) https://bugs.python.org/issue?@action=redirect&bpo=38291

   (120) https://bugs.python.org/issue?@action=redirect&bpo=37880

   (121) https://bugs.python.org/issue?@action=redirect&bpo=44389

   (122) https://bugs.python.org/issue?@action=redirect&bpo=27827

   (123) https://bugs.python.org/issue?@action=redirect&bpo=44395

   (124) https://bugs.python.org/issue?@action=redirect&bpo=34266

   (125) https://bugs.python.org/issue?@action=redirect&bpo=44362

   (126) https://bugs.python.org/issue?@action=redirect&bpo=44342

   (127) https://bugs.python.org/issue?@action=redirect&bpo=44356

   (128) https://bugs.python.org/issue?@action=redirect&bpo=44351

   (129) https://bugs.python.org/issue?@action=redirect&bpo=35800

   (130) https://bugs.python.org/issue?@action=redirect&bpo=44357

   (131) https://bugs.python.org/issue?@action=redirect&bpo=44339

   (132) https://bugs.python.org/issue?@action=redirect&bpo=44242

   (133) https://bugs.python.org/issue?@action=redirect&bpo=44246

   (134) https://bugs.python.org/issue?@action=redirect&bpo=44246

   (135) https://bugs.python.org/issue?@action=redirect&bpo=43858

   (136) https://bugs.python.org/issue?@action=redirect&bpo=44260

   (137) https://bugs.python.org/issue?@action=redirect&bpo=44254

   (138) https://bugs.python.org/issue?@action=redirect&bpo=44258

   (139) https://bugs.python.org/issue?@action=redirect&bpo=44235

   (140) https://bugs.python.org/issue?@action=redirect&bpo=38693

   (141) https://bugs.python.org/issue?@action=redirect&bpo=33693

   (142) https://bugs.python.org/issue?@action=redirect&bpo=44241

   (143) https://bugs.python.org/issue?@action=redirect&bpo=43216

   (144) https://bugs.python.org/issue?@action=redirect&bpo=44210

   (145) https://bugs.python.org/issue?@action=redirect&bpo=43643

   (146) https://bugs.python.org/issue?@action=redirect&bpo=27334

   (147) https://bugs.python.org/issue?@action=redirect&bpo=4928

   (148) https://bugs.python.org/issue?@action=redirect&bpo=44154

   (149) https://bugs.python.org/issue?@action=redirect&bpo=33433

   (150) https://datatracker.ietf.org/doc/html/rfc4291.html

   (151) https://bugs.python.org/issue?@action=redirect&bpo=44150

   (152) https://bugs.python.org/issue?@action=redirect&bpo=44142

   (153) https://bugs.python.org/issue?@action=redirect&bpo=44145

   (154) https://bugs.python.org/issue?@action=redirect&bpo=44095

   (155) https://bugs.python.org/issue?@action=redirect&bpo=44077

   (156) https://bugs.python.org/issue?@action=redirect&bpo=37788

   (157) https://bugs.python.org/issue?@action=redirect&bpo=38908

   (158) https://bugs.python.org/issue?@action=redirect&bpo=44098

   (159) https://peps.python.org/pep-0612/

   (160) https://bugs.python.org/issue?@action=redirect&bpo=44089

   (161) https://bugs.python.org/issue?@action=redirect&bpo=44081

   (162) https://bugs.python.org/issue?@action=redirect&bpo=44061

   (163) https://bugs.python.org/issue?@action=redirect&bpo=44059

   (164) https://bugs.python.org/issue?@action=redirect&bpo=36515

   (165) https://bugs.python.org/issue?@action=redirect&bpo=40465

   (166) https://bugs.python.org/issue?@action=redirect&bpo=44018

   (167) https://bugs.python.org/issue?@action=redirect&bpo=38352

   (168) https://bugs.python.org/issue?@action=redirect&bpo=44002

   (169) https://bugs.python.org/issue?@action=redirect&bpo=43972

   (170) https://bugs.python.org/issue?@action=redirect&bpo=28528

   (171) https://bugs.python.org/issue?@action=redirect&bpo=43853

   (172) https://bugs.python.org/issue?@action=redirect&bpo=43666

   (173) https://bugs.python.org/issue?@action=redirect&bpo=43650

   (174) https://bugs.python.org/issue?@action=redirect&bpo=43612

   (175) https://bugs.python.org/issue?@action=redirect&bpo=43392

   (176) https://bugs.python.org/issue?@action=redirect&bpo=43318

   (177) https://bugs.python.org/issue?@action=redirect&bpo=43234

   (178) https://bugs.python.org/issue?@action=redirect&bpo=43232

   (179) https://bugs.python.org/issue?@action=redirect&bpo=30077

   (180) https://bugs.python.org/issue?@action=redirect&bpo=42971

   (181) https://bugs.python.org/issue?@action=redirect&bpo=43086

   (182) https://bugs.python.org/issue?@action=redirect&bpo=43024

   (183) https://bugs.python.org/issue?@action=redirect&bpo=33809

   (184) https://bugs.python.org/issue?@action=redirect&bpo=42862

   (185) https://bugs.python.org/issue?@action=redirect&bpo=41818

   (186) https://bugs.python.org/issue?@action=redirect&bpo=40497

   (187) https://bugs.python.org/issue?@action=redirect&bpo=37449

   (188) https://bugs.python.org/issue?@action=redirect&bpo=40956

   (189) https://bugs.python.org/issue?@action=redirect&bpo=41730

   (190) https://bugs.python.org/issue?@action=redirect&bpo=20684

   (191) https://bugs.python.org/issue?@action=redirect&bpo=41402

   (192) https://bugs.python.org/issue?@action=redirect&bpo=32695

   (193) https://bugs.python.org/issue?@action=redirect&bpo=41137

   (194) https://bugs.python.org/issue?@action=redirect&bpo=24391

   (195) https://bugs.python.org/issue?@action=redirect&bpo=5846

   (196) https://bugs.python.org/issue?@action=redirect&bpo=40563

   (197) https://bugs.python.org/issue?@action=redirect&bpo=34990

   (198) https://bugs.python.org/issue?@action=redirect&bpo=39549

   (199) https://bugs.python.org/issue?@action=redirect&bpo=37022

   (200) https://bugs.python.org/issue?@action=redirect&bpo=38840

   (201) https://bugs.python.org/issue?@action=redirect&bpo=39359

   (202) https://bugs.python.org/issue?@action=redirect&bpo=38741

   (203) https://bugs.python.org/issue?@action=redirect&bpo=38415

   (204) https://bugs.python.org/issue?@action=redirect&bpo=30256

   (205) https://bugs.python.org/issue?@action=redirect&bpo=27513

   (206) https://bugs.python.org/issue?@action=redirect&bpo=16379

   (207) https://bugs.python.org/issue?@action=redirect&bpo=26228

   (208) https://bugs.python.org/issue?@action=redirect&bpo=33349

   (209) https://bugs.python.org/issue?@action=redirect&bpo=29298


File: python.info,  Node: Documentação<32>,  Next: Testes<36>,  Prev: Biblioteca<91>,  Up: Python 3 11 0 alpha 1

1.23.42.22 Documentação
.......................

   - bpo-45216(1): Remove extra documentation listing methods in
     ‘difflib’.  It was rendering twice in pydoc and was outdated in
     some places.

   - bpo-45024(2): *note collections.abc: 1e. documentation has been
     expanded to explicitly cover how instance and subclass checks work,
     with additional doctest examples and an exhaustive list of ABCs
     which test membership purely by presence of the right *note special
     method: 19eb.s.  Patch by Raymond Hettinger.

   - bpo-44957(3): Promote PEP 604 union syntax by using it where
     possible.  Also, mention ‘X | Y’ more prominently in section about
     ‘Union’ and mention ‘X | None’ at all in section about ‘Optional’.

   - bpo-16580(4): Added code equivalents for the *note int.to_bytes():
     19bd. and *note int.from_bytes(): 1972. methods, as well as tests
     ensuring that these code equivalents are valid.

   - bpo-44903(5): Removed the ‘othergui.rst’ file, any references to
     it, and the list of GUI frameworks in the FAQ. In their place I’ve
     added links to the Python Wiki page on GUI frameworks(6).

   - bpo-33479(7): Tkinter documentation has been greatly expanded with
     new “Architecture” and “Threading model” sections.

   - bpo-36700(8): *note base64: e. RFC references were updated to point
     to RFC 4648(9); a section was added to point users to the new
     “security considerations” section of the RFC.

   - bpo-44740(10): Replaced occurrences of uppercase “Web” and
     “Internet” with lowercase versions per the 2016 revised Associated
     Press Style Book.

   - bpo-44693(11): Update the definition of __future__ in the glossary
     by replacing the confusing word “pseudo-module” with a more
     accurate description.

   - bpo-35183(12): Add typical examples to os.path.splitext docs

   - bpo-30511(13): Clarify that *note shutil.make_archive(): 4b3. is
     not thread-safe due to reliance on changing the current working
     directory.

   - bpo-44561(14): Update of three expired hyperlinks in
     Doc/distributing/index.rst: “Project structure”, “Building and
     packaging the project”, and “Uploading the project to the Python
     Packaging Index”.

   - bpo-44651(15): Delete entry “coercion” in Doc/glossary.rst for its
     outdated definition.

   - bpo-42958(16): Updated the docstring and docs of *note
     filecmp.cmp(): 1754. to be more accurate and less confusing
     especially in respect to 'shallow' arg.

   - bpo-44631(17): Refactored the ‘repr()’ code of the ‘_Environ’ (os
     module).

   - bpo-44613(18): importlib.metadata is no longer provisional.

   - bpo-44558(19): Match the docstring and python implementation of
     *note countOf(): 8e2. to the behavior of its c implementation.

   - bpo-44544(20): List all kwargs for *note textwrap.wrap(): 150f,
     *note textwrap.fill(): 150e, and *note textwrap.shorten(): 1006.
     Now, there are nav links to attributes of ‘TextWrap’, which makes
     navigation much easier while minimizing duplication in the
     documentation.

   - bpo-38062(21): Clarify that atexit uses equality comparisons
     internally.

   - bpo-40620(22): Convert examples in tutorial controlflow.rst section
     4.3 to be interpreter-demo style.

   - bpo-43066(23): Added a warning to *note zipfile: 131. docs:
     filename arg with a leading slash may cause archive to be
     un-openable on Windows systems.

   - bpo-39452(24): Rewrote ‘Doc/library/__main__.rst’.  Broadened scope
     of the document to explicitly discuss and differentiate between
     ‘__main__.py’ in packages versus the ‘__name__ == '__main__'’
     expression (and the idioms that surround it).

   - bpo-13814(25): In the Design FAQ, answer “Why don’t generators
     support the with statement?”

   - bpo-27752(26): Documentation of csv.Dialect is more descriptive.

   - bpo-44453(27): Fix documentation for the return type of *note
     sysconfig.get_path(): 1372.

   - bpo-44392(28): Added a new section in the C API documentation for
     types used in type hinting.  Documented ‘Py_GenericAlias’ and
     ‘Py_GenericAliasType’.

   - bpo-38291(29): Mark ‘typing.io’ and ‘typing.re’ as deprecated since
     Python 3.8 in the documentation.  They were never properly
     supported by type checkers.

   - bpo-44322(30): Document that SyntaxError args have a details tuple
     and that details are adjusted for errors in f-string field
     replacement expressions.

   - bpo-42392(31): Document the deprecation and removal of the ‘loop’
     parameter for many functions and classes in *note asyncio: a.

   - bpo-44195(32): Corrected references to ‘TraversableResources’ in
     docs.  There is no ‘TraversableReader’.

   - bpo-41963(33): Document that ‘ConfigParser’ strips off comments
     when reading configuration files.

   - bpo-44072(34): Correct where in the numeric ABC hierarchy ‘**’
     support is added, i.e., in numbers.Complex, not numbers.Integral.

   - bpo-43558(35): Add the remark to *note dataclasses: 2f.
     documentation that the ‘__init__()’ of any base class has to be
     called in ‘__post_init__()’, along with a code example.

   - bpo-44025(36): Clarify when ‘_’ in match statements is a keyword,
     and when not.

   - bpo-41706(37): Fix docs about how methods like ‘__add__’ are
     invoked when evaluating operator expressions.

   - bpo-41621(38): Document that *note collections.defaultdict: 11fc.
     parameter ‘default_factory’ defaults to ‘None’ and is
     positional-only.

   - bpo-41576(39): document BaseException in favor of bare except

   - bpo-21760(40): The description for __file__ fixed.  Patch by Furkan
     Onder

   - bpo-39498(41): Add a “Security Considerations” index which links to
     standard library modules that have explicitly documented security
     considerations.

   - bpo-33479(42): Remove the unqualified claim that tkinter is
     threadsafe.  It has not been true for several years and likely
     never was.  An explanation of what is true may be added later,
     after more discussion, and possibly after patching _tkinter.c,

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45216

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45024

   (3) https://bugs.python.org/issue?@action=redirect&bpo=44957

   (4) https://bugs.python.org/issue?@action=redirect&bpo=16580

   (5) https://bugs.python.org/issue?@action=redirect&bpo=44903

   (6) https://wiki.python.org/moin/GuiProgramming

   (7) https://bugs.python.org/issue?@action=redirect&bpo=33479

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36700

   (9) https://datatracker.ietf.org/doc/html/rfc4648.html

   (10) https://bugs.python.org/issue?@action=redirect&bpo=44740

   (11) https://bugs.python.org/issue?@action=redirect&bpo=44693

   (12) https://bugs.python.org/issue?@action=redirect&bpo=35183

   (13) https://bugs.python.org/issue?@action=redirect&bpo=30511

   (14) https://bugs.python.org/issue?@action=redirect&bpo=44561

   (15) https://bugs.python.org/issue?@action=redirect&bpo=44651

   (16) https://bugs.python.org/issue?@action=redirect&bpo=42958

   (17) https://bugs.python.org/issue?@action=redirect&bpo=44631

   (18) https://bugs.python.org/issue?@action=redirect&bpo=44613

   (19) https://bugs.python.org/issue?@action=redirect&bpo=44558

   (20) https://bugs.python.org/issue?@action=redirect&bpo=44544

   (21) https://bugs.python.org/issue?@action=redirect&bpo=38062

   (22) https://bugs.python.org/issue?@action=redirect&bpo=40620

   (23) https://bugs.python.org/issue?@action=redirect&bpo=43066

   (24) https://bugs.python.org/issue?@action=redirect&bpo=39452

   (25) https://bugs.python.org/issue?@action=redirect&bpo=13814

   (26) https://bugs.python.org/issue?@action=redirect&bpo=27752

   (27) https://bugs.python.org/issue?@action=redirect&bpo=44453

   (28) https://bugs.python.org/issue?@action=redirect&bpo=44392

   (29) https://bugs.python.org/issue?@action=redirect&bpo=38291

   (30) https://bugs.python.org/issue?@action=redirect&bpo=44322

   (31) https://bugs.python.org/issue?@action=redirect&bpo=42392

   (32) https://bugs.python.org/issue?@action=redirect&bpo=44195

   (33) https://bugs.python.org/issue?@action=redirect&bpo=41963

   (34) https://bugs.python.org/issue?@action=redirect&bpo=44072

   (35) https://bugs.python.org/issue?@action=redirect&bpo=43558

   (36) https://bugs.python.org/issue?@action=redirect&bpo=44025

   (37) https://bugs.python.org/issue?@action=redirect&bpo=41706

   (38) https://bugs.python.org/issue?@action=redirect&bpo=41621

   (39) https://bugs.python.org/issue?@action=redirect&bpo=41576

   (40) https://bugs.python.org/issue?@action=redirect&bpo=21760

   (41) https://bugs.python.org/issue?@action=redirect&bpo=39498

   (42) https://bugs.python.org/issue?@action=redirect&bpo=33479


File: python.info,  Node: Testes<36>,  Next: Construção<40>,  Prev: Documentação<32>,  Up: Python 3 11 0 alpha 1

1.23.42.23 Testes
.................

   - bpo-40173(1): Fix *note
     test.support.import_helper.import_fresh_module(): 19ed.

   - bpo-45280(2): Add a test case for empty *note typing.NamedTuple:
     2b0.

   - bpo-45269(3): Cover case when invalid ‘markers’ type is supplied to
     ‘c_make_encoder’.

   - bpo-45128(4): Fix ‘test_multiprocessing_fork’ failure due to
     ‘test_logging’ and ‘sys.modules’ manipulation.

   - bpo-45209(5): Fix ‘UserWarning: resource_tracker’ warning in
     ‘_test_multiprocessing._TestSharedMemory.test_shared_memory_cleaned_after_process_termination’

   - bpo-45185(6): Enables ‘TestEnumerations’ test cases in ‘test_ssl’
     suite.

   - bpo-45195(7): Fix test_readline.test_nonascii(): sometimes, the
     newline character is not written at the end, so don’t expect it in
     the output.  Patch by Victor Stinner.

   - bpo-45156(8): Fixes infinite loop on *note unittest.mock.seal():
     bb9. of mocks created by ‘create_autospec()’.

   - bpo-45125(9): Improves pickling tests and docs of ‘SharedMemory’
     and ‘SharableList’ objects.

   - bpo-44860(10): Update ‘test_sysconfig.test_user_similar()’ for the
     posix_user scheme: ‘platlib’ doesn’t use *note sys.platlibdir: 93f.
     Patch by Victor Stinner.

   - bpo-45052(11):
     ‘WithProcessesTestSharedMemory.test_shared_memory_basics’ test was
     ignored, because ‘self.assertEqual(sms.size, sms2.size)’ line was
     failing.  It is now removed and test is unskipped.

     The main motivation for this line to be removed from the test is
     that the ‘size’ of ‘SharedMemory’ is not ever guaranteed to be the
     same.  It is decided by the platform.

   - bpo-44895(12): libregrtest now clears the type cache later to
     reduce the risk of false alarm when checking for reference leaks.
     Previously, the type cache was cleared too early and libregrtest
     raised a false alarm about reference leaks under very specific
     conditions.  Patch by Irit Katriel and Victor Stinner.

   - bpo-45042(13): Fixes that test classes decorated with
     ‘@hashlib_helper.requires_hashdigest’ were skipped all the time.

   - bpo-25130(14): Add calls of *note gc.collect(): a43. in tests to
     support PyPy.

   - bpo-45011(15): Made tests relying on the ‘_asyncio’ C extension
     module optional to allow running on alternative Python
     implementations.  Patch by Serhiy Storchaka.

   - bpo-44949(16): Fix auto history tests of test_readline: sometimes,
     the newline character is not written at the end, so don’t expect it
     in the output.

   - bpo-44891(17): Tests were added to clarify *note id(): 146a. is
     preserved when ‘obj * 1’ is used on *note str: 44c. and *note
     bytes: 1c2. objects.  Patch by Nikita Sobolev.

   - bpo-44852(18): Add ability to wholesale silence DeprecationWarnings
     while running the regression test suite.

   - bpo-40928(19): Notify users running test_decimal regression tests
     on macOS of potential harmless “malloc can’t allocate region”
     messages spewed by test_decimal.

   - bpo-44734(20): Fixed floating-point precision issue in turtle
     tests.

   - bpo-44708(21): Regression tests, when run with -w, are now
     re-running only the affected test methods instead of re-running the
     entire test file.

   - bpo-42095(22): Added interop tests for Apple plists: generate plist
     files with Python plistlib and parse with Apple plutil; and the
     other way round.

   - bpo-44647(23): Added a permanent Unicode-valued environment
     variable to regression tests to ensure they handle this use case in
     the future.  If your test environment breaks because of that,
     report a bug to us, and temporarily set
     PYTHONREGRTEST_UNICODE_GUARD=0 in your test environment.

   - bpo-44515(24): Adjust recently added contextlib tests to avoid
     assuming the use of a refcounted GC

   - bpo-44287(25): Fix asyncio test_popen() of test_windows_utils by
     using a longer timeout.  Use military grade battle-tested *note
     test.support.SHORT_TIMEOUT: 19ee. timeout rather than a hardcoded
     timeout of 10 seconds: it’s 30 seconds by default, but it is made
     longer on slow buildbots.  Patch by Victor Stinner.

   - bpo-44451(26): Reset ‘DeprecationWarning’ filters in
     ‘test.test_importlib.test_metadata_api.APITests.test_entry_points_by_index’
     to avoid ‘StopIteration’ error if ‘DeprecationWarnings’ are
     ignored.

   - bpo-44363(27): Account for address sanitizer in test_capi.
     test_capi now passes when run GCC address sanitizer.

   - bpo-44364(28): Add non integral tests for *note math.sqrt(): a0e.
     function.

   - bpo-43921(29): Fix test_ssl.test_wrong_cert_tls13(): use
     ‘suppress_ragged_eofs=False’, since ‘read()’ can raise *note
     ssl.SSLEOFError: 1840. on Windows.  Patch by Victor Stinner.

   - bpo-43921(30): Fix test_pha_required_nocert() of test_ssl: catch
     two more EOF cases (when the ‘recv()’ method returns an empty
     string).  Patch by Victor Stinner.

   - bpo-44131(31): Add test_frozenmain to test_embed to test the
     ‘Py_FrozenMain()’ C function.  Patch by Victor Stinner.

   - bpo-31904(32): Ignore error string case in test_file_not_exists().

   - bpo-42083(33): Add test to check that ‘PyStructSequence_NewType’
     accepts a ‘PyStructSequence_Desc’ with ‘doc’ field set to ‘NULL’.

   - bpo-35753(34): Fix crash in doctest when doctest parses modules
     that include unwrappable functions by skipping those functions.

   - bpo-30256(35): Add test for nested queues when using
     ‘multiprocessing’ shared objects ‘AutoProxy[Queue]’ inside
     ‘ListProxy’ and ‘DictProxy’

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40173

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45280

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45269

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45128

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45209

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45185

   (7) https://bugs.python.org/issue?@action=redirect&bpo=45195

   (8) https://bugs.python.org/issue?@action=redirect&bpo=45156

   (9) https://bugs.python.org/issue?@action=redirect&bpo=45125

   (10) https://bugs.python.org/issue?@action=redirect&bpo=44860

   (11) https://bugs.python.org/issue?@action=redirect&bpo=45052

   (12) https://bugs.python.org/issue?@action=redirect&bpo=44895

   (13) https://bugs.python.org/issue?@action=redirect&bpo=45042

   (14) https://bugs.python.org/issue?@action=redirect&bpo=25130

   (15) https://bugs.python.org/issue?@action=redirect&bpo=45011

   (16) https://bugs.python.org/issue?@action=redirect&bpo=44949

   (17) https://bugs.python.org/issue?@action=redirect&bpo=44891

   (18) https://bugs.python.org/issue?@action=redirect&bpo=44852

   (19) https://bugs.python.org/issue?@action=redirect&bpo=40928

   (20) https://bugs.python.org/issue?@action=redirect&bpo=44734

   (21) https://bugs.python.org/issue?@action=redirect&bpo=44708

   (22) https://bugs.python.org/issue?@action=redirect&bpo=42095

   (23) https://bugs.python.org/issue?@action=redirect&bpo=44647

   (24) https://bugs.python.org/issue?@action=redirect&bpo=44515

   (25) https://bugs.python.org/issue?@action=redirect&bpo=44287

   (26) https://bugs.python.org/issue?@action=redirect&bpo=44451

   (27) https://bugs.python.org/issue?@action=redirect&bpo=44363

   (28) https://bugs.python.org/issue?@action=redirect&bpo=44364

   (29) https://bugs.python.org/issue?@action=redirect&bpo=43921

   (30) https://bugs.python.org/issue?@action=redirect&bpo=43921

   (31) https://bugs.python.org/issue?@action=redirect&bpo=44131

   (32) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (33) https://bugs.python.org/issue?@action=redirect&bpo=42083

   (34) https://bugs.python.org/issue?@action=redirect&bpo=35753

   (35) https://bugs.python.org/issue?@action=redirect&bpo=30256


File: python.info,  Node: Construção<40>,  Next: Windows<34>,  Prev: Testes<36>,  Up: Python 3 11 0 alpha 1

1.23.42.24 Construção
.....................

   - bpo-45220(1): Avoid building with the Windows 11 SDK previews
     automatically.  This may be overridden by setting the
     ‘DefaultWindowsSDKVersion’ environment variable before building.

   - bpo-45020(2): Freeze stdlib modules that are imported during
     startup.  This provides significant performance improvements to
     startup.  If necessary, use the previously added “-X
     frozen_modules=off” commandline option to force importing the
     source modules.

   - bpo-45188(3): Windows builds now regenerate frozen modules as the
     first part of the build.  Previously the regeneration was later in
     the build, which would require it to be restarted if any modules
     had changed.

   - bpo-45163(4): Fixes Haiku platform build.

   - bpo-45067(5): The ncurses function extended_color_content was
     introduced in 2017

     (‘https://invisible-island.net/ncurses/NEWS.html#index-t20170401’).
     The

     ncurses-devel package in CentOS 7 had a older version ncurses
     resulted in compilation error.  For compiling ncurses with extended
     color support, we verify the version of the ncurses library >=
     20170401.

   - bpo-45019(6): Generate lines in relevant files for frozen modules.
     Up until now each of the files had to be edited manually.  This
     change makes it easier to add to and modify the frozen modules.

   - bpo-44340(7): Add support for building with clang thin lto via
     –with-lto=thin/full.  Patch by Donghee Na and Brett Holman.

   - bpo-44535(8): Enable building using a Visual Studio 2022 install on
     Windows.

   - bpo-43298(9): Improved error message when building without a
     Windows SDK installed.

   - bpo-44381(10): The Windows build now accepts
     ‘EnableControlFlowGuard’ set to ‘guard’ to enable CFG.

   - bpo-41282(11): Fix broken ‘make install’ that caused standard
     library extension modules to be unnecessarily and incorrectly
     rebuilt during the install phase of cpython.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45220

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45020

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45188

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45163

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45067

   (6) https://bugs.python.org/issue?@action=redirect&bpo=45019

   (7) https://bugs.python.org/issue?@action=redirect&bpo=44340

   (8) https://bugs.python.org/issue?@action=redirect&bpo=44535

   (9) https://bugs.python.org/issue?@action=redirect&bpo=43298

   (10) https://bugs.python.org/issue?@action=redirect&bpo=44381

   (11) https://bugs.python.org/issue?@action=redirect&bpo=41282


File: python.info,  Node: Windows<34>,  Next: macOS<26>,  Prev: Construção<40>,  Up: Python 3 11 0 alpha 1

1.23.42.25 Windows
..................

   - bpo-45375(1): Fixes an assertion failure due to searching for the
     standard library in unnormalised paths.

   - bpo-45022(2): Update Windows release to include libffi 3.4.2

   - bpo-45007(3): Update to OpenSSL 1.1.1l in Windows build

   - bpo-44848(4): Upgrade Windows installer to use SQLite 3.36.0.

   - bpo-44572(5): Avoid consuming standard input in the *note platform:
     aa. module

   - bpo-44582(6): Accelerate speed of *note mimetypes: 8f.
     initialization using a native implementation of the registry scan.

   - bpo-41299(7): Fix 16 milliseconds jitter when using timeouts in
     *note threading: ed, such as with *note threading.Lock.acquire():
     698. or *note threading.Condition.wait(): 19f1.

   - bpo-42686(8): Build *note sqlite3: cf. with math functions enabled.
     Patch by Erlend E. Aasland.

   - bpo-40263(9): This is a follow-on bug from
     ‘https://bugs.python.org/issue26903’.  Once that is applied we run
     into an off-by-one assertion problem.  The assert was not correct.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45375

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45022

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45007

   (4) https://bugs.python.org/issue?@action=redirect&bpo=44848

   (5) https://bugs.python.org/issue?@action=redirect&bpo=44572

   (6) https://bugs.python.org/issue?@action=redirect&bpo=44582

   (7) https://bugs.python.org/issue?@action=redirect&bpo=41299

   (8) https://bugs.python.org/issue?@action=redirect&bpo=42686

   (9) https://bugs.python.org/issue?@action=redirect&bpo=40263


File: python.info,  Node: macOS<26>,  Next: IDLE<23>,  Prev: Windows<34>,  Up: Python 3 11 0 alpha 1

1.23.42.26 macOS
................

   - bpo-45007(1): Update macOS installer builds to use OpenSSL 1.1.1l.

   - bpo-34602(2): When building CPython on macOS with ‘./configure
     --with-undefined-behavior-sanitizer --with-pydebug’, the stack size
     is now quadrupled to allow for the entire test suite to pass.

   - bpo-44848(3): Update macOS installer to use SQLite 3.36.0.

   - bpo-44689(4): *note ctypes.util.find_library(): d6c. now works
     correctly on macOS 11 Big Sur even if Python is built on an older
     version of macOS. Previously, when built on older macOS systems,
     ‘find_library’ was not able to find macOS system libraries when
     running on Big Sur due to changes in how system libraries are
     stored.

   - bpo-41972(5): The framework build’s user header path in sysconfig
     is changed to add a ‘pythonX.Y’ component to match distutils’s
     behavior.

   - bpo-43109(6): Allow –with-lto configure option to work with
     Apple-supplied Xcode or Command Line Tools.

   - bpo-34932(7): Add socket.TCP_KEEPALIVE support for macOS. Patch by
     Shane Harvey.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45007

   (2) https://bugs.python.org/issue?@action=redirect&bpo=34602

   (3) https://bugs.python.org/issue?@action=redirect&bpo=44848

   (4) https://bugs.python.org/issue?@action=redirect&bpo=44689

   (5) https://bugs.python.org/issue?@action=redirect&bpo=41972

   (6) https://bugs.python.org/issue?@action=redirect&bpo=43109

   (7) https://bugs.python.org/issue?@action=redirect&bpo=34932


File: python.info,  Node: IDLE<23>,  Next: Ferramentas/Demos<20>,  Prev: macOS<26>,  Up: Python 3 11 0 alpha 1

1.23.42.27 IDLE
...............

   - bpo-45296(1): On Windows, change exit/quit message to suggest
     Ctrl-D, which works, instead of <Ctrl-Z Return>, which does not
     work in IDLE.

   - bpo-45193(2): Make completion boxes appear on Ubuntu again.

   - bpo-40128(3): Mostly fix completions on macOS when not using tcl/tk
     8.6.11 (as with 3.9).  The added update_idletask call should be
     harmless and possibly helpful otherwise.

   - bpo-33962(4): Move the indent space setting from the Font tab to
     the new Windows tab.  Patch by Mark Roseman and Terry Jan Reedy.

   - bpo-40468(5): Split the settings dialog General tab into Windows
     and Shell/ED tabs.  Move help sources, which extend the Help menu,
     to the Extensions tab.  Make space for new options and shorten the
     dialog.  The latter makes the dialog better fit small screens.

   - bpo-41611(6): Avoid uncaught exceptions in
     ‘AutoCompleteWindow.winconfig_event()’.

   - bpo-41611(7): Fix IDLE sometimes freezing upon tab-completion on
     macOS.

   - bpo-44010(8): Highlight the new *note match: 810. statement’s *note
     soft keywords: 80f.: *note match: 810, *note case: 810, and *note
     _: 811.  However, this highlighting is not perfect and will be
     incorrect in some rare cases, including some ‘_’-s in ‘case’
     patterns.

   - bpo-44026(9): Include interpreter’s typo fix suggestions in message
     line for NameErrors and AttributeErrors.  Patch by E. Paine.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=45296

   (2) https://bugs.python.org/issue?@action=redirect&bpo=45193

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40128

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33962

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40468

   (6) https://bugs.python.org/issue?@action=redirect&bpo=41611

   (7) https://bugs.python.org/issue?@action=redirect&bpo=41611

   (8) https://bugs.python.org/issue?@action=redirect&bpo=44010

   (9) https://bugs.python.org/issue?@action=redirect&bpo=44026


File: python.info,  Node: Ferramentas/Demos<20>,  Next: API C<36>,  Prev: IDLE<23>,  Up: Python 3 11 0 alpha 1

1.23.42.28 Ferramentas/Demos
............................

   - bpo-44786(1): Fix a warning in regular expression in the c-analyzer
     script.

   - bpo-44967(2): pydoc now returns a non-zero status code when a
     module cannot be found.

   - bpo-44978(3): Allow the Argument Clinic tool to handle
     ‘__complex__’ special methods.

   - bpo-43425(4): Removed the ‘test2to3’ demo project that demonstrated
     using lib2to3 to support Python 2.x and Python 3.x from a single
     source in a distutils package.  Patch by Donghee Na

   - bpo-44074(5): Make patchcheck automatically detect the correct base
     branch name (previously it was hardcoded to ‘master’)

   - bpo-20291(6): Added support for variadic positional parameters in
     Argument Clinic.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44786

   (2) https://bugs.python.org/issue?@action=redirect&bpo=44967

   (3) https://bugs.python.org/issue?@action=redirect&bpo=44978

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43425

   (5) https://bugs.python.org/issue?@action=redirect&bpo=44074

   (6) https://bugs.python.org/issue?@action=redirect&bpo=20291


File: python.info,  Node: API C<36>,  Prev: Ferramentas/Demos<20>,  Up: Python 3 11 0 alpha 1

1.23.42.29 API C
................

   - bpo-41710(1): The PyThread_acquire_lock_timed() function now clamps
     the timeout if it is too large, rather than aborting the process.
     Patch by Victor Stinner.

   - bpo-44687(2): ‘BufferedReader.peek()’ no longer raises *note
     ValueError: 202. when the entire file has already been buffered.

   - bpo-45116(3): Add the *note Py_ALWAYS_INLINE: 19f6. macro to ask
     the compiler to always inline a static inline function.  The
     compiler can ignore it and decides to not inline the function.
     Patch by Victor Stinner.

   - bpo-45094(4): Add the *note Py_NO_INLINE: 19f7. macro to disable
     inlining on a function.  Patch by Victor Stinner.

   - bpo-45061(5): Add a deallocator to the *note bool: 468. type to
     detect refcount bugs in C extensions which call
     ‘Py_DECREF(Py_True);’ or ‘Py_DECREF(Py_False);’ by mistake.  Patch
     by Victor Stinner.

   - bpo-42035(6): Add a new *note PyType_GetQualName(): 753. function
     to get type’s qualified name.

   - bpo-41103(7): Reverts removal of the old buffer protocol because
     they are part of stable ABI.

   - bpo-44751(8): Remove ‘crypt.h’ include from the public ‘Python.h’
     header.

   - bpo-42747(9): The ‘Py_TPFLAGS_HAVE_VERSION_TAG’ type flag now does
     nothing.  The ‘Py_TPFLAGS_HAVE_AM_SEND’ flag (which was added in
     3.10) is removed.  Both were unnecessary because it is not possible
     to have type objects with the relevant fields missing.

   - bpo-44530(10): Added the ‘co_qualname’ to the ‘PyCodeObject’
     structure to propagate the qualified name from the compiler to code
     objects.

     Patch by Gabriele N. Tornetta

   - bpo-44441(11): *note Py_RunMain(): 9cd. now resets *note
     PyImport_Inittab: 18a3. to its initial value at exit.  It must be
     possible to call *note PyImport_AppendInittab(): 18a4. or *note
     PyImport_ExtendInittab(): 18a5. at each Python initialization.
     Patch by Victor Stinner.

   - bpo-39947(12): Remove 4 private trashcan C API functions which were
     only kept for the backward compatibility of the stable ABI with
     Python 3.8 and older, since the trashcan API was not usable with
     the limited C API on Python 3.8 and older.  The trashcan API was
     excluded from the limited C API in Python 3.9.

     Funções removidas:

        * _PyTrash_deposit_object()

        * _PyTrash_destroy_chain()

        * _PyTrash_thread_deposit_object()

        * _PyTrash_thread_destroy_chain()

     The trashcan C API was never usable with the limited C API, since
     old trashcan macros accessed directly *note PyThreadState: 78d.
     members like ‘_tstate->trash_delete_nesting’, whereas the *note
     PyThreadState: 78d. structure is opaque in the limited C API.

     Exclude also the ‘PyTrash_UNWIND_LEVEL’ constant from the C API.

     Patch por Victor Stinner.

   - bpo-40939(13): Removed documentation for the removed ‘PyParser_*’ C
     API.

   - bpo-43795(14): The list in *note Conteúdo da API Limitada: 79a. now
     shows the public name *note PyFrameObject: 789. rather than
     ‘_frame’.  The non-existing entry ‘_node’ no longer appears in the
     list.

   - bpo-44378(15): *note Py_IS_TYPE(): 192b. no longer uses *note
     Py_TYPE(): 780. to avoid a compiler warning: no longer cast ‘const
     PyObject*’ to ‘PyObject*’.  Patch by Victor Stinner.

   - bpo-39573(16): Convert the *note Py_TYPE(): 780. and *note
     Py_SIZE(): 782. macros to static inline functions.  The *note
     Py_SET_TYPE(): 781. and *note Py_SET_SIZE(): 783. functions must
     now be used to set an object type and size.  Patch by Victor
     Stinner.

   - bpo-44263(17): The *note PyType_Ready(): 77c. function now raises
     an error if a type is defined with the *note Py_TPFLAGS_HAVE_GC:
     77d. flag set but has no traverse function (*note
     PyTypeObject.tp_traverse: 77e.).  Patch by Victor Stinner.

   - bpo-43795(18): The undocumented function ‘Py_FrozenMain()’ is
     removed from the Limited API.

   - bpo-44113(19): Deprecate the following functions to configure the
     Python initialization:

        * ‘PySys_AddWarnOptionUnicode()’

        * ‘PySys_AddWarnOption()’

        * ‘PySys_AddXOption()’

        * ‘PySys_HasWarnOptions()’

        * ‘Py_SetPath()’

        * ‘Py_SetProgramName()’

        * ‘Py_SetPythonHome()’

        * ‘Py_SetStandardStreamEncoding()’

        * ‘_Py_SetProgramFullPath()’

     Use the new *note PyConfig: 3a6. API of the *note Python
     Initialization Configuration: 3a7. instead ( PEP 587(20)).

   - bpo-44094(21): Remove ‘PyErr_SetFromErrnoWithUnicodeFilename()’,
     ‘PyErr_SetFromWindowsErrWithUnicodeFilename()’, and
     ‘PyErr_SetExcFromWindowsErrWithUnicodeFilename()’.  They are not
     documented and have been deprecated since Python 3.3.

   - bpo-43795(22): *note PyCodec_Unregister(): 89b. is now properly
     exported as a function in the Windows Stable ABI DLL.

   - bpo-44029(23): Remove deprecated ‘Py_UNICODE’ APIs:
     ‘PyUnicode_Encode’, ‘PyUnicode_EncodeUTF7’, ‘PyUnicode_EncodeUTF8’,
     ‘PyUnicode_EncodeUTF16’, ‘PyUnicode_EncodeUTF32’,
     ‘PyUnicode_EncodeLatin1’, ‘PyUnicode_EncodeMBCS’,
     ‘PyUnicode_EncodeDecimal’, ‘PyUnicode_EncodeRawUnicodeEscape’,
     ‘PyUnicode_EncodeCharmap’, ‘PyUnicode_EncodeUnicodeEscape’,
     ‘PyUnicode_TransformDecimalToASCII’, ‘PyUnicode_TranslateCharmap’,
     ‘PyUnicodeEncodeError_Create’, ‘PyUnicodeTranslateError_Create’.
     See PEP 393(24) and PEP 624(25) for reference.

   - bpo-42035(26): Add a new *note PyType_GetName(): 752. function to
     get type’s short name.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41710

   (2) https://bugs.python.org/issue?@action=redirect&bpo=44687

   (3) https://bugs.python.org/issue?@action=redirect&bpo=45116

   (4) https://bugs.python.org/issue?@action=redirect&bpo=45094

   (5) https://bugs.python.org/issue?@action=redirect&bpo=45061

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42035

   (7) https://bugs.python.org/issue?@action=redirect&bpo=41103

   (8) https://bugs.python.org/issue?@action=redirect&bpo=44751

   (9) https://bugs.python.org/issue?@action=redirect&bpo=42747

   (10) https://bugs.python.org/issue?@action=redirect&bpo=44530

   (11) https://bugs.python.org/issue?@action=redirect&bpo=44441

   (12) https://bugs.python.org/issue?@action=redirect&bpo=39947

   (13) https://bugs.python.org/issue?@action=redirect&bpo=40939

   (14) https://bugs.python.org/issue?@action=redirect&bpo=43795

   (15) https://bugs.python.org/issue?@action=redirect&bpo=44378

   (16) https://bugs.python.org/issue?@action=redirect&bpo=39573

   (17) https://bugs.python.org/issue?@action=redirect&bpo=44263

   (18) https://bugs.python.org/issue?@action=redirect&bpo=43795

   (19) https://bugs.python.org/issue?@action=redirect&bpo=44113

   (20) https://peps.python.org/pep-0587/

   (21) https://bugs.python.org/issue?@action=redirect&bpo=44094

   (22) https://bugs.python.org/issue?@action=redirect&bpo=43795

   (23) https://bugs.python.org/issue?@action=redirect&bpo=44029

   (24) https://peps.python.org/pep-0393/

   (25) https://peps.python.org/pep-0624/

   (26) https://bugs.python.org/issue?@action=redirect&bpo=42035


File: python.info,  Node: Python 3 10 0 beta 1,  Next: Python 3 10 0 alpha 7,  Prev: Python 3 11 0 alpha 1,  Up: Changelog

1.23.43 Python 3.10.0 beta 1
----------------------------

'Data de lançamento: 2021-05-03'

* Menu:

* Segurança: Segurança<26>.
* Núcleo e embutidos: Núcleo e embutidos<90>.
* Biblioteca: Biblioteca<92>.
* Núcleo e embutidos: Núcleo e embutidos<91>.
* Biblioteca: Biblioteca<93>.
* Núcleo e embutidos: Núcleo e embutidos<92>.
* Biblioteca: Biblioteca<94>.
* Documentação: Documentação<33>.
* Testes: Testes<37>.
* Construção: Construção<41>.
* Windows: Windows<35>.
* macOS: macOS<27>.
* IDLE: IDLE<24>.
* API C: API C<37>.


File: python.info,  Node: Segurança<26>,  Next: Núcleo e embutidos<90>,  Up: Python 3 10 0 beta 1

1.23.43.1 Segurança
...................

   - bpo-43434(1): Creating *note sqlite3.Connection: 245. objects now
     also produces ‘sqlite3.connect’ and ‘sqlite3.connect/handle’ *note
     auditing events: 19fa.  Previously these events were only produced
     by *note sqlite3.connect(): 2a8. calls.  Patch by Erlend E.
     Aasland.

   - bpo-43998(2): The *note ssl: d0. module sets more secure cipher
     suites defaults.  Ciphers without forward secrecy and with SHA-1
     MAC are disabled by default.  Security level 2 prohibits weak RSA,
     DH, and ECC keys with less than 112 bits of security.  *note
     SSLContext: 294. defaults to minimum protocol version TLS 1.2.
     Settings are based on Hynek Schlawack’s research.

   - bpo-43882(3): The presence of newline or tab characters in parts of
     a URL could allow some forms of attacks.

     Following the controlling specification for URLs defined by WHATWG
     *note urllib.parse(): 10a. now removes ASCII newlines and tabs from
     URLs, preventing such attacks.

   - bpo-43472(4): Ensures interpreter-level audit hooks receive the
     ‘cpython.PyInterpreterState_New’ event when called through the
     ‘_xxsubinterpreters’ module.

   - bpo-43362(5): Fix invalid free in _sha3 module.  The issue was
     introduced in 3.10.0a1.  Python 3.9 and earlier are not affected.

   - bpo-43762(6): Add audit events for ‘sqlite3.connect/handle()’,
     *note sqlite3.Connection.enable_load_extension(): 841, and *note
     sqlite3.Connection.load_extension(): 4b8.  Patch by Erlend E.
     Aasland.

   - bpo-43756(7): Add new audit event ‘glob.glob/2’ to incorporate the
     new 'root_dir' and 'dir_fd' arguments added to *note glob.glob():
     29f. and *note glob.iglob(): 80a.

   - bpo-36384(8): *note ipaddress: 80. module no longer accepts any
     leading zeros in IPv4 address strings.  Leading zeros are ambiguous
     and interpreted as octal notation by some libraries.  For example
     the legacy function *note socket.inet_aton(): 968. treats leading
     zeros as octal notation.  glibc implementation of modern *note
     inet_pton(): 969. does not accept any leading zeros.  For a while
     the *note ipaddress: 80. module used to accept ambiguous leading
     zeros.

   - bpo-43075(9): Fix Regular Expression Denial of Service (ReDoS)
     vulnerability in *note urllib.request.AbstractBasicAuthHandler:
     19fb.  The ReDoS-vulnerable regex has quadratic worst-case
     complexity and it allows cause a denial of service when identifying
     crafted invalid RFCs.  This ReDoS issue is on the client side and
     needs remote attackers to control the HTTP server.

   - bpo-42800(10): Audit hooks are now fired for frame.f_code,
     traceback.tb_frame, and generator code/frame attribute access.

   - bpo-37363(11): Add audit events to the *note http.client: 6f.
     module.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43434

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43998

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43882

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43472

   (5) https://bugs.python.org/issue?@action=redirect&bpo=43362

   (6) https://bugs.python.org/issue?@action=redirect&bpo=43762

   (7) https://bugs.python.org/issue?@action=redirect&bpo=43756

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36384

   (9) https://bugs.python.org/issue?@action=redirect&bpo=43075

   (10) https://bugs.python.org/issue?@action=redirect&bpo=42800

   (11) https://bugs.python.org/issue?@action=redirect&bpo=37363


File: python.info,  Node: Núcleo e embutidos<90>,  Next: Biblioteca<92>,  Prev: Segurança<26>,  Up: Python 3 10 0 beta 1

1.23.43.2 Núcleo e embutidos
............................

   - bpo-43977(1): Prevent classes being both a sequence and a mapping
     when pattern matching.

   - bpo-43977(2): Use *note tp_flags: 19fd. on the class object to
     determine if the subject is a sequence or mapping when pattern
     matching.  Avoids the need to import *note collections.abc: 1e.
     when pattern matching.

   - bpo-43892(3): Restore proper validation of complex literal value
     patterns when parsing ‘match’ blocks.

   - bpo-43933(4): Set frame.f_lineno to the line number of the ‘with’
     kweyword when executing the call to ‘__exit__’.

   - bpo-43933(5): If the current position in a frame has no line number
     then set the f_lineno attribute to None, instead of -1, to conform
     to PEP 626.  This should not normally be possible, but might occur
     in some unusual circumstances.

   - bpo-43963(6): Importing the ‘_signal’ module in a subinterpreter
     has no longer side effects.

   - bpo-42739(7): The internal representation of line number tables is
     changed to not use sentinels, and an explicit length parameter is
     added to the out of process API function
     ‘PyLineTable_InitAddressRange’.  This makes the handling of line
     number tables more robust in some circumstances.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43977

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43977

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43892

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43933

   (5) https://bugs.python.org/issue?@action=redirect&bpo=43933

   (6) https://bugs.python.org/issue?@action=redirect&bpo=43963

   (7) https://bugs.python.org/issue?@action=redirect&bpo=42739


File: python.info,  Node: Biblioteca<92>,  Next: Núcleo e embutidos<91>,  Prev: Núcleo e embutidos<90>,  Up: Python 3 10 0 beta 1

1.23.43.3 Biblioteca
....................

   - bpo-43908(1): Make *note re: b9. types immutable.  Patch by Erlend
     E. Aasland.

   - bpo-43908(2): Make the *note array.array: 1a0. type immutable.
     Patch by Erlend E. Aasland.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43908

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43908


File: python.info,  Node: Núcleo e embutidos<91>,  Next: Biblioteca<93>,  Prev: Biblioteca<92>,  Up: Python 3 10 0 beta 1

1.23.43.4 Núcleo e embutidos
............................

   - bpo-43901(1): Change class and module objects to lazy-create empty
     annotations dicts on demand.  The annotations dicts are stored in
     the object’s __dict__ for backwards compatibility.

   - bpo-43892(2): Match patterns now use new dedicated AST nodes
     (‘MatchValue’, ‘MatchSingleton’, ‘MatchSequence’, ‘MatchStar’,
     ‘MatchMapping’, ‘MatchClass’) rather than reusing expression AST
     nodes.  ‘MatchAs’ and ‘MatchOr’ are now defined as pattern nodes
     rather than as expression nodes.  Patch by Nick Coghlan.

   - bpo-42725(3): Usage of ‘await’/‘yield’/‘yield from’ and named
     expressions within an annotation is now forbidden when PEP 563 is
     activated.

   - bpo-43754(4): When performing structural pattern matching ( PEP
     634(5)), captured names are now left unbound until the 'entire'
     pattern has matched successfully.

   - bpo-42737(6): Annotations for complex targets (everything beside
     simple names) no longer cause any runtime effects with ‘from
     __future__ import annotations’.

   - bpo-43914(7): *note SyntaxError: 18d. exceptions raised by the
     interpreter will highlight the full error range of the expression
     that constitutes the syntax error itself, instead of just where the
     problem is detected.  Patch by Pablo Galindo.

   - bpo-38605(8): Revert making ‘from __future__ import annotations’
     the default.  This follows the Steering Council decision to
     postpone PEP 563 changes to at least Python 3.11.  See the original
     email for more information regarding the decision:
     ‘https://mail.python.org/archives/list/python-dev@python.org/thread/CLVXXPQ2T2LQ5MP2Y53VVQFCXYWQJHKZ/’.
     Patch by Pablo Galindo.

   - bpo-43475(9): Hashes of NaN values now depend on object identity.
     Formerly, they always hashed to 0 even though NaN values are not
     equal to one another.  Having the same hash for unequal values
     caused pile-ups in hash tables.

   - bpo-43859(10): Improve the error message for *note
     IndentationError: 7a9. exceptions.  Patch by Pablo Galindo

   - bpo-41323(11): Constant tuple folding in bytecode optimizer now
     reuses tuple in constant table.

   - bpo-43846(12): Data stack usage is much reduced for large literal
     and call expressions.

   - bpo-38530(13): When printing *note NameError: 43f. raised by the
     interpreter, ‘PyErr_Display()’ will offer suggestions of similar
     variable names in the function that the exception was raised from.
     Patch by Pablo Galindo

   - bpo-43823(14): Improve syntax errors for invalid dictionary
     literals.  Patch by Pablo Galindo.

   - bpo-43822(15): Improve syntax errors in the parser for missing
     commas between expressions.  Patch by Pablo Galindo.

   - bpo-43798(16): *note ast.alias: 1a00. nodes now include source
     location metadata attributes e.g.  lineno, col_offset.

   - bpo-43797(17): Improve ‘SyntaxError’ error messages for invalid
     comparisons.  Patch by Pablo Galindo.

   - bpo-43760(18): Move the flag for checking whether tracing is
     enabled to the C stack, from the heap.  Should speed up dispatch in
     the interpreter.

   - bpo-43682(19): Static methods (*note @staticmethod: 416.) and class
     methods (*note @classmethod: 166.) now inherit the method
     attributes (‘__module__’, ‘__name__’, ‘__qualname__’, ‘__doc__’,
     ‘__annotations__’) and have a new ‘__wrapped__’ attribute.  Patch
     by Victor Stinner.

   - bpo-43751(20): Fixed a bug where ‘anext(ait, default)’ would
     erroneously return None.

   - bpo-42128(21): *note __match_args__: 1a01. is no longer allowed to
     be a list.

   - bpo-43683(22): Add GEN_START opcode.  Marks start of generator,
     including async, or coroutine and handles sending values to a newly
     created generator or coroutine.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43901

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43892

   (3) https://bugs.python.org/issue?@action=redirect&bpo=42725

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43754

   (5) https://peps.python.org/pep-0634/

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42737

   (7) https://bugs.python.org/issue?@action=redirect&bpo=43914

   (8) https://bugs.python.org/issue?@action=redirect&bpo=38605

   (9) https://bugs.python.org/issue?@action=redirect&bpo=43475

   (10) https://bugs.python.org/issue?@action=redirect&bpo=43859

   (11) https://bugs.python.org/issue?@action=redirect&bpo=41323

   (12) https://bugs.python.org/issue?@action=redirect&bpo=43846

   (13) https://bugs.python.org/issue?@action=redirect&bpo=38530

   (14) https://bugs.python.org/issue?@action=redirect&bpo=43823

   (15) https://bugs.python.org/issue?@action=redirect&bpo=43822

   (16) https://bugs.python.org/issue?@action=redirect&bpo=43798

   (17) https://bugs.python.org/issue?@action=redirect&bpo=43797

   (18) https://bugs.python.org/issue?@action=redirect&bpo=43760

   (19) https://bugs.python.org/issue?@action=redirect&bpo=43682

   (20) https://bugs.python.org/issue?@action=redirect&bpo=43751

   (21) https://bugs.python.org/issue?@action=redirect&bpo=42128

   (22) https://bugs.python.org/issue?@action=redirect&bpo=43683


File: python.info,  Node: Biblioteca<93>,  Next: Núcleo e embutidos<92>,  Prev: Núcleo e embutidos<91>,  Up: Python 3 10 0 beta 1

1.23.43.5 Biblioteca
....................

   - bpo-43105(1): Importlib now resolves relative paths when creating
     module spec objects from file locations.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43105


File: python.info,  Node: Núcleo e embutidos<92>,  Next: Biblioteca<94>,  Prev: Biblioteca<93>,  Up: Python 3 10 0 beta 1

1.23.43.6 Núcleo e embutidos
............................

   - bpo-43682(1): Static methods (*note @staticmethod: 416.) are now
     callable as regular functions.  Patch by Victor Stinner.

   - bpo-42609(2): Prevented crashes in the AST validator and optimizer
     when compiling some absurdly long expressions like ‘"+0"*1000000’.
     *note RecursionError: d90. is now raised instead.

   - bpo-38530(3): When printing *note AttributeError: 34b,
     ‘PyErr_Display()’ will offer suggestions of similar attribute names
     in the object that the exception was raised from.  Patch by Pablo
     Galindo

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43682

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42609

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38530


File: python.info,  Node: Biblioteca<94>,  Next: Documentação<33>,  Prev: Núcleo e embutidos<92>,  Up: Python 3 10 0 beta 1

1.23.43.7 Biblioteca
....................

   - bpo-44015(1): In @dataclass(), raise a TypeError if KW_ONLY is
     specified more than once.

   - bpo-25478(2): Added a 'total()' method to collections.Counter() to
     compute the sum of the counts.

   - bpo-43733(3): Change *note netrc.netrc: 1a05. to use UTF-8 encoding
     before using locale encoding.

   - bpo-43979(4): Removed an unnecessary list comprehension before
     looping from *note urllib.parse.parse_qsl(): 279.  Patch by
     Christoph Zwerschke and Donghee Na.

   - bpo-43993(5): Update bundled pip to 21.1.1.

   - bpo-43957(6): [Enum] Deprecate ‘TypeError’ when non-member is used
     in a containment check; In 3.12 ‘True’ or ‘False’ will be returned
     instead, and containment will return ‘True’ if the value is either
     a member of that enum or one of its members’ value.

   - bpo-42904(7): For backwards compatibility with previous minor
     versions of Python, if *note typing.get_type_hints(): 6b1. receives
     no namespace dictionary arguments, *note typing.get_type_hints():
     6b1. will search through the global then local namespaces during
     evaluation of stringized type annotations (string forward
     references) inside a class.

   - bpo-43945(8): [Enum] Deprecate non-standard mixin format()
     behavior: in 3.12 the enum member, not the member’s value, will be
     used for format() calls.

   - bpo-41139(9): Deprecate undocumented ‘cgi.log()’ API.

   - bpo-43937(10): Fixed the *note turtle: 101. module working with
     non-default root window.

   - bpo-43930(11): Update bundled pip to 21.1 and setuptools to 56.0.0

   - bpo-43907(12): Fix a bug in the pure-Python pickle implementation
     when using protocol 5, where bytearray instances that occur several
     time in the pickled object graph would incorrectly unpickle into
     repeated copies of the bytearray object.

   - bpo-43926(13): In ‘importlib.metadata’, provide a uniform interface
     to ‘Description’, allow for any field to be encoded with multiline
     values, remove continuation lines from multiline values, and add a
     ‘.json’ property for easy access to the PEP 566 JSON-compatible
     form.  Sync with ‘importlib_metadata 4.0’.

   - bpo-43920(14): OpenSSL 3.0.0: *note load_verify_locations(): f1d.
     now returns a consistent error message when cadata contains no
     valid certificate.

   - bpo-43607(15): *note urllib: 108. can now convert Windows paths
     with ‘\\?\’ prefixes into URL paths.

   - bpo-43817(16): Add *note inspect.get_annotations(): 816, which
     safely computes the annotations defined on an object.  It works
     around the quirks of accessing the annotations from various types
     of objects, and makes very few assumptions about the object passed
     in.  *note inspect.get_annotations(): 816. can also correctly
     un-stringize stringized annotations.

     *note inspect.signature(): 738, ‘inspect.from_callable()’, and
     ‘inspect.from_function()’ now call *note inspect.get_annotations():
     816. to retrieve annotations.  This means *note
     inspect.signature(): 738. and ‘inspect.from_callable()’ can now
     un-stringize stringized annotations, too.

   - bpo-43284(17): platform.win32_ver derives the windows version from
     sys.getwindowsversion().platform_version which in turn derives the
     version from kernel32.dll (which can be of a different version than
     Windows itself).  Therefore change the platform.win32_ver to
     determine the version using the platform module’s _syscmd_ver
     private function to return an accurate version.

   - bpo-42854(18): The *note ssl: d0. module now uses ‘SSL_read_ex’ and
     ‘SSL_write_ex’ internally.  The functions support reading and
     writing of data larger than 2 GB. Writing zero-length data no
     longer fails with a protocol violation error.

   - bpo-42333(19): Port ‘_ssl’ extension module to multiphase
     initialization.

   - bpo-43880(20): *note ssl: d0. now raises DeprecationWarning for
     OP_NO_SSL/TLS* options, old TLS versions, old protocols, and other
     features that have been deprecated since Python 3.6, 3.7, or
     OpenSSL 1.1.0.

   - bpo-41559(21): PEP 612(22) is now implemented purely in Python;
     builtin ‘types.GenericAlias’ objects no longer include
     ‘typing.ParamSpec’ in ‘__parameters__’ (with the exception of
     ‘collections.abc.Callable’‘s ‘GenericAlias’).  This means
     previously invalid uses of ‘ParamSpec’ (such as ‘list[P]’) which
     worked in earlier versions of Python 3.10 alpha, will now raise
     ‘TypeError’ during substitution.

   - bpo-43867(23): The *note multiprocessing: 94. ‘Server’ class now
     explicitly catches *note SystemExit: d63. and closes the client
     connection in this case.  It happens when the
     ‘Server.serve_client()’ method reaches the end of file (EOF).

   - bpo-40443(24): Remove unused imports: pyclbr no longer uses copy,
     and typing no longer uses ast.  Patch by Victor Stinner.

   - bpo-43820(25): Remove an unneeded copy of the namespace passed to
     dataclasses.make_dataclass().

   - bpo-43787(26): Add ‘__iter__()’ method to *note bz2.BZ2File: 86a,
     *note gzip.GzipFile: 41a, and *note lzma.LZMAFile: 1042.  It makes
     iterating them about 2x faster.  Patch by Inada Naoki.

   - bpo-43680(27): Deprecate io.OpenWrapper and _pyio.OpenWrapper: use
     io.open and _pyio.open instead.  Until Python 3.9, _pyio.open was
     not a static method and builtins.open was set to OpenWrapper to not
     become a bound method when set to a class variable.  _io.open is a
     built-in function whereas _pyio.open is a Python function.  In
     Python 3.10, _pyio.open() is now a static method, and
     builtins.open() is now io.open().

   - bpo-43680(28): The Python ‘_pyio.open()’ function becomes a static
     method to behave as *note io.open(): 51d. built-in function: don’t
     become a bound method when stored as a class variable.  It becomes
     possible since static methods are now callable in Python 3.10.
     Moreover, ‘_pyio.OpenWrapper()’ becomes a simple alias to
     ‘_pyio.open()’.  Patch by Victor Stinner.

   - bpo-41515(29): Fix *note KeyError: 344. raised in *note
     typing.get_type_hints(): 6b1. due to synthetic modules that don’t
     appear in ‘sys.modules’.

   - bpo-43776(30): When *note subprocess.Popen: 199. args are provided
     as a string or as *note pathlib.Path: 229, the Popen instance repr
     now shows the right thing.

   - bpo-42248(31): [Enum] ensure exceptions raised in ‘_missing__’ are
     released

   - bpo-43744(32): fix issue with enum member name matching the start
     of a private variable name

   - bpo-43772(33): Fixed the return value of ‘TypeVar.__ror__’.  Patch
     by Jelle Zijlstra.

   - bpo-43764(34): Add match_args parameter to @dataclass decorator to
     allow suppression of __match_args__ generation.

   - bpo-43799(35): OpenSSL 3.0.0: define ‘OPENSSL_API_COMPAT’ 1.1.1 to
     suppress deprecation warnings.  Python requires OpenSSL 1.1.1 APIs.

   - bpo-43478(36): Mocks can no longer be used as the specs for other
     Mocks.  As a result, an already-mocked object cannot have an
     attribute mocked using ‘autospec=True’ or be the subject of a
     ‘create_autospec(...)’ call.  This can uncover bugs in tests since
     these Mock-derived Mocks will always pass certain tests (e.g.
     *note isinstance(): 442.) and builtin assert functions (e.g.
     assert_called_once_with) will unconditionally pass.

   - bpo-43794(37): Add *note ssl.OP_IGNORE_UNEXPECTED_EOF: 83a.
     constants (OpenSSL 3.0.0)

   - bpo-43785(38): Improve ‘bz2.BZ2File’ performance by removing the
     RLock from BZ2File.  This makes BZ2File thread unsafe in the face
     of multiple simultaneous readers or writers, just like its
     equivalent classes in *note gzip: 67. and *note lzma: 8a. have
     always been.  Patch by Inada Naoki.

   - bpo-43789(39): OpenSSL 3.0.0: Don’t call the password callback
     function a second time when first call has signaled an error
     condition.

   - bpo-43788(40): The header files for *note ssl: d0. error codes are
     now OpenSSL version-specific.  Exceptions will now show correct
     reason and library codes.  The ‘make_ssl_data.py’ script has been
     rewritten to use OpenSSL’s text file with error codes.

   - bpo-43766(41): Implement PEP 647(42) in the *note typing: 104.
     module by adding ‘TypeGuard’.

   - bpo-25264(43): *note os.path.realpath(): 225. now accepts a
     'strict' keyword-only argument.  When set to ‘True’, *note OSError:
     417. is raised if a path doesn’t exist or a symlink loop is
     encountered.

   - bpo-43780(44): In ‘importlib.metadata’, incorporate changes from
     importlib_metadata 3.10: Add mtime-based caching during
     distribution discovery.  Flagged use of dict result from
     ‘entry_points()’ as deprecated.

   - gh-47383(45): The ‘P.args’ and ‘P.kwargs’ attributes of *note
     typing.ParamSpec: 15e. are now instances of the new classes *note
     typing.ParamSpecArgs: 7c7. and *note typing.ParamSpecKwargs: 7c8,
     which enables a more useful ‘repr()’.  Patch by Jelle Zijlstra.

   - bpo-43731(46): Add an ‘encoding’ parameter ‘logging.fileConfig()’.

   - bpo-43712(47): Add ‘encoding’ and ‘errors’ parameters to *note
     fileinput.input(): 802. and *note fileinput.FileInput: 737.

   - bpo-38659(48): A ‘simple_enum’ decorator is added to the ‘enum’
     module to convert a normal class into an Enum.  ‘test_simple_enum’
     added to test simple enums against a corresponding normal Enum.
     Standard library modules updated to use ‘simple_enum’.

   - bpo-43764(49): Fix an issue where *note __match_args__: 1a01.
     generation could fail for some *note dataclasses: 2f.

   - bpo-43752(50): Fix *note sqlite3: cf. regression for zero-sized
     blobs with converters, where ‘b""’ was returned instead of ‘None’.
     The regression was introduced by PR 24723.  Patch by Erlend E.
     Aasland.

   - bpo-43655(51): *note tkinter: f0. dialog windows are now recognized
     as dialogs by window managers on macOS and X Window.

   - bpo-43723(52): The following ‘threading’ methods are now deprecated
     and should be replaced:

        - ‘currentThread’ => *note threading.current_thread(): 309.

        - ‘activeCount’ => *note threading.active_count(): 30a.

        - ‘Condition.notifyAll’ => *note
          threading.Condition.notify_all(): 303.

        - ‘Event.isSet’ => *note threading.Event.is_set(): 304.

        - ‘Thread.setName’ => *note threading.Thread.name: 308.

        - ‘thread.getName’ => *note threading.Thread.name: 308.

        - ‘Thread.isDaemon’ => *note threading.Thread.daemon: 306.

        - ‘Thread.setDaemon’ => *note threading.Thread.daemon: 306.

     Patch by Jelle Zijlstra.

   - bpo-2135(53): Deprecate find_module() and find_loader()
     implementations in importlib and zipimport.

   - bpo-43534(54): *note turtle.textinput(): 1a06. and *note
     turtle.numinput(): 1a07. create now a transient window working on
     behalf of the canvas window.

   - bpo-43532(55): Add the ability to specify keyword-only fields to
     dataclasses.  These fields will become keyword-only arguments to
     the generated __init__.

   - bpo-43522(56): Fix problem with *note hostname_checks_common_name:
     b95.  OpenSSL does not copy hostflags from 'struct SSL_CTX' to
     'struct SSL'.

   - bpo-8978(57): Improve error message for *note tarfile.open(): ea6.
     when *note lzma: 8a. / *note bz2: 13. are unavailable.  Patch by
     Anthony Sottile.

   - bpo-42967(58): Allow *note bytes: 1c2. ‘separator’ argument in
     ‘urllib.parse.parse_qs’ and ‘urllib.parse.parse_qsl’ when parsing
     *note str: 44c. query strings.  Previously, this raised a
     ‘TypeError’.

   - bpo-43296(59): Improve *note sqlite3: cf. error handling:
     ‘sqlite3_value_blob()’ errors that set ‘SQLITE_NOMEM’ now raise
     *note MemoryError: 15c5.  Patch by Erlend E. Aasland.

   - bpo-43312(60): New functions *note
     sysconfig.get_preferred_scheme(): 690. and *note
     sysconfig.get_default_scheme(): 193f. are added to query a platform
     for its preferred “user”, “home”, and “prefix” (default) scheme
     names.

   - bpo-43265(61): Improve *note sqlite3.Connection.backup(): b92.
     error handling.  The error message for non-existent target database
     names is now ‘unknown database <database name>’ instead of ‘SQL
     logic error’.  Patch by Erlend E. Aasland.

   - bpo-41282(62): Install schemes in ‘distutils.command.install’ are
     now loaded from *note sysconfig: db.

   - bpo-41282(63): ‘distutils.sysconfig’ has been merged to *note
     sysconfig: db.

   - bpo-43176(64): Fixed processing of a dataclass that inherits from a
     frozen dataclass with no fields.  It is now correctly detected as
     an error.

   - bpo-43080(65): *note pprint: ae. now has support for *note
     dataclasses.dataclass: 1cb.  Patch by Lewis Gaul.

   - bpo-39950(66): Add ‘pathlib.Path.hardlink_to()’ method that
     supersedes ‘link_to()’.  The new method has the same argument order
     as ‘symlink_to()’.

   - bpo-42904(67): *note typing.get_type_hints(): 6b1. now checks the
     local namespace of a class when evaluating PEP 563(68) annotations
     inside said class.

   - bpo-42269(69): Add ‘slots’ parameter to ‘dataclasses.dataclass’
     decorator to automatically generate ‘__slots__’ for class.  Patch
     provided by Yurii Karabas.

   - bpo-39529(70): Deprecated use of *note asyncio.get_event_loop():
     2c2. without running event loop.  Emit deprecation warning for
     *note asyncio: a. functions which implicitly create a *note Future:
     be6. or *note Task: 1be. objects if there is no running event loop
     and no explicit 'loop' argument is passed: *note ensure_future():
     c92, *note wrap_future(): 1a08, *note gather(): 5fd, *note
     shield(): a7a, *note as_completed(): 1aa. and constructors of *note
     Future: be6, *note Task: 1be, *note StreamReader: 1a09,
     ‘StreamReaderProtocol’.

   - bpo-18369(71): Certificate and PrivateKey classes were added to the
     ssl module.  Certificates and keys can now be loaded from memory
     buffer, too.

   - bpo-41486(72): Use a new output buffer management code for *note
     bz2: 13. / *note lzma: 8a. / *note zlib: 133. modules, and add
     ‘.readall()’ function to ‘_compression.DecompressReader’ class.
     These bring some performance improvements.  Patch by Ma Lin.

   - bpo-31870(73): The *note ssl.get_server_certificate(): 83f.
     function now has a 'timeout' parameter.

   - bpo-41735(74): Fix thread locks in zlib module may go wrong in rare
     case.  Patch by Ma Lin.

   - bpo-36470(75): Fix dataclasses with ‘InitVar’s and *note replace():
     17ec.  Patch by Claudiu Popa.

   - bpo-40849(76): Expose X509_V_FLAG_PARTIAL_CHAIN ssl flag

   - bpo-35114(77): *note ssl.RAND_status(): 1a0a. now returns a boolean
     value (as documented) instead of ‘1’ or ‘0’.

   - bpo-39906(78): *note pathlib.Path.stat(): 826. and *note chmod():
     827. now accept a 'follow_symlinks' keyword-only argument for
     consistency with corresponding functions in the *note os: a1.
     module.

   - bpo-39899(79): *note os.path.expanduser(): a1e. now refuses to
     guess Windows home directories if the basename of current user’s
     home directory does not match their username.

     *note pathlib.Path.expanduser(): e6f. and *note home(): e70. now
     consistently raise *note RuntimeError: 195. exception when a home
     directory cannot be resolved.  Previously a *note KeyError: 344.
     exception could be raised on Windows when the ‘"USERNAME"’
     environment variable was unset.

   - bpo-36076(80): Added SNI support to *note
     ssl.get_server_certificate(): 83f.

   - bpo-38490(81): Covariance, Pearson’s correlation, and simple linear
     regression functionality was added to statistics module.  Patch by
     Tymoteusz Wołodźko.

   - bpo-33731(82): Provide a locale.localize() function, which converts
     a normalized number string into a locale format.

   - bpo-32745(83): Fix a regression in the handling of ctypes’ *note
     ctypes.c_wchar_p: 17da. type: embedded null characters would cause
     a *note ValueError: 202. to be raised.  Patch by Zackery Spytz.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=44015

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25478

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43733

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43979

   (5) https://bugs.python.org/issue?@action=redirect&bpo=43993

   (6) https://bugs.python.org/issue?@action=redirect&bpo=43957

   (7) https://bugs.python.org/issue?@action=redirect&bpo=42904

   (8) https://bugs.python.org/issue?@action=redirect&bpo=43945

   (9) https://bugs.python.org/issue?@action=redirect&bpo=41139

   (10) https://bugs.python.org/issue?@action=redirect&bpo=43937

   (11) https://bugs.python.org/issue?@action=redirect&bpo=43930

   (12) https://bugs.python.org/issue?@action=redirect&bpo=43907

   (13) https://bugs.python.org/issue?@action=redirect&bpo=43926

   (14) https://bugs.python.org/issue?@action=redirect&bpo=43920

   (15) https://bugs.python.org/issue?@action=redirect&bpo=43607

   (16) https://bugs.python.org/issue?@action=redirect&bpo=43817

   (17) https://bugs.python.org/issue?@action=redirect&bpo=43284

   (18) https://bugs.python.org/issue?@action=redirect&bpo=42854

   (19) https://bugs.python.org/issue?@action=redirect&bpo=42333

   (20) https://bugs.python.org/issue?@action=redirect&bpo=43880

   (21) https://bugs.python.org/issue?@action=redirect&bpo=41559

   (22) https://peps.python.org/pep-0612/

   (23) https://bugs.python.org/issue?@action=redirect&bpo=43867

   (24) https://bugs.python.org/issue?@action=redirect&bpo=40443

   (25) https://bugs.python.org/issue?@action=redirect&bpo=43820

   (26) https://bugs.python.org/issue?@action=redirect&bpo=43787

   (27) https://bugs.python.org/issue?@action=redirect&bpo=43680

   (28) https://bugs.python.org/issue?@action=redirect&bpo=43680

   (29) https://bugs.python.org/issue?@action=redirect&bpo=41515

   (30) https://bugs.python.org/issue?@action=redirect&bpo=43776

   (31) https://bugs.python.org/issue?@action=redirect&bpo=42248

   (32) https://bugs.python.org/issue?@action=redirect&bpo=43744

   (33) https://bugs.python.org/issue?@action=redirect&bpo=43772

   (34) https://bugs.python.org/issue?@action=redirect&bpo=43764

   (35) https://bugs.python.org/issue?@action=redirect&bpo=43799

   (36) https://bugs.python.org/issue?@action=redirect&bpo=43478

   (37) https://bugs.python.org/issue?@action=redirect&bpo=43794

   (38) https://bugs.python.org/issue?@action=redirect&bpo=43785

   (39) https://bugs.python.org/issue?@action=redirect&bpo=43789

   (40) https://bugs.python.org/issue?@action=redirect&bpo=43788

   (41) https://bugs.python.org/issue?@action=redirect&bpo=43766

   (42) https://peps.python.org/pep-0647/

   (43) https://bugs.python.org/issue?@action=redirect&bpo=25264

   (44) https://bugs.python.org/issue?@action=redirect&bpo=43780

   (45) https://github.com/python/cpython/issues/47383

   (46) https://bugs.python.org/issue?@action=redirect&bpo=43731

   (47) https://bugs.python.org/issue?@action=redirect&bpo=43712

   (48) https://bugs.python.org/issue?@action=redirect&bpo=38659

   (49) https://bugs.python.org/issue?@action=redirect&bpo=43764

   (50) https://bugs.python.org/issue?@action=redirect&bpo=43752

   (51) https://bugs.python.org/issue?@action=redirect&bpo=43655

   (52) https://bugs.python.org/issue?@action=redirect&bpo=43723

   (53) https://bugs.python.org/issue?@action=redirect&bpo=2135

   (54) https://bugs.python.org/issue?@action=redirect&bpo=43534

   (55) https://bugs.python.org/issue?@action=redirect&bpo=43532

   (56) https://bugs.python.org/issue?@action=redirect&bpo=43522

   (57) https://bugs.python.org/issue?@action=redirect&bpo=8978

   (58) https://bugs.python.org/issue?@action=redirect&bpo=42967

   (59) https://bugs.python.org/issue?@action=redirect&bpo=43296

   (60) https://bugs.python.org/issue?@action=redirect&bpo=43312

   (61) https://bugs.python.org/issue?@action=redirect&bpo=43265

   (62) https://bugs.python.org/issue?@action=redirect&bpo=41282

   (63) https://bugs.python.org/issue?@action=redirect&bpo=41282

   (64) https://bugs.python.org/issue?@action=redirect&bpo=43176

   (65) https://bugs.python.org/issue?@action=redirect&bpo=43080

   (66) https://bugs.python.org/issue?@action=redirect&bpo=39950

   (67) https://bugs.python.org/issue?@action=redirect&bpo=42904

   (68) https://peps.python.org/pep-0563/

   (69) https://bugs.python.org/issue?@action=redirect&bpo=42269

   (70) https://bugs.python.org/issue?@action=redirect&bpo=39529

   (71) https://bugs.python.org/issue?@action=redirect&bpo=18369

   (72) https://bugs.python.org/issue?@action=redirect&bpo=41486

   (73) https://bugs.python.org/issue?@action=redirect&bpo=31870

   (74) https://bugs.python.org/issue?@action=redirect&bpo=41735

   (75) https://bugs.python.org/issue?@action=redirect&bpo=36470

   (76) https://bugs.python.org/issue?@action=redirect&bpo=40849

   (77) https://bugs.python.org/issue?@action=redirect&bpo=35114

   (78) https://bugs.python.org/issue?@action=redirect&bpo=39906

   (79) https://bugs.python.org/issue?@action=redirect&bpo=39899

   (80) https://bugs.python.org/issue?@action=redirect&bpo=36076

   (81) https://bugs.python.org/issue?@action=redirect&bpo=38490

   (82) https://bugs.python.org/issue?@action=redirect&bpo=33731

   (83) https://bugs.python.org/issue?@action=redirect&bpo=32745


File: python.info,  Node: Documentação<33>,  Next: Testes<37>,  Prev: Biblioteca<94>,  Up: Python 3 10 0 beta 1

1.23.43.8 Documentação
......................

   - bpo-43987(1): Add “Annotations Best Practices” document as a new
     HOWTO.

   - bpo-43977(2): Document the new *note Py_TPFLAGS_MAPPING: 19e3. and
     *note Py_TPFLAGS_SEQUENCE: 19e4. type flags.

   - bpo-43959(3): The documentation on the PyContextVar C-API was
     clarified.

   - bpo-43938(4): Update dataclasses documentation to express that
     FrozenInstanceError is derived from AttributeError.

   - bpo-43778(5): Fix the Sphinx glossary_search extension: create the
     _static/ sub-directory if it doesn’t exist.

   - bpo-43755(6): Update documentation to reflect that unparenthesized
     lambda expressions can no longer be the expression part in an ‘if’
     clause in comprehensions and generator expressions since Python
     3.9.

   - bpo-43739(7): Fixing the example code in
     Doc/extending/extending.rst to declare and initialize the pmodule
     variable to be of the right type.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43987

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43977

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43959

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43938

   (5) https://bugs.python.org/issue?@action=redirect&bpo=43778

   (6) https://bugs.python.org/issue?@action=redirect&bpo=43755

   (7) https://bugs.python.org/issue?@action=redirect&bpo=43739


File: python.info,  Node: Testes<37>,  Next: Construção<41>,  Prev: Documentação<33>,  Up: Python 3 10 0 beta 1

1.23.43.9 Testes
................

   - bpo-43961(1): Fix test_logging.test_namer_rotator_inheritance() on
     Windows: use *note os.replace(): 1131. rather than *note
     os.rename(): 1130.  Patch by Victor Stinner.

   - bpo-43842(2): Fix a race condition in the SMTP test of
     test_logging.  Don’t close a file descriptor (socket) from a
     different thread while asyncore.loop() is polling the file
     descriptor.  Patch by Victor Stinner.

   - bpo-43843(3): ‘test.libregrtest’ now marks a test as ENV_CHANGED
     (altered the execution environment) if a thread raises an exception
     but does not catch it.  It sets a hook on *note
     threading.excepthook(): 84e.  Use ‘--fail-env-changed’ option to
     mark the test as failed.  Patch by Victor Stinner.

   - bpo-43811(4): Tests multiple OpenSSL versions on GitHub Actions.
     Use ccache to speed up testing.

   - bpo-43791(5): OpenSSL 3.0.0: Disable testing of legacy protocols
     TLS 1.0 and 1.1.  Tests are failing with
     TLSV1_ALERT_INTERNAL_ERROR.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43961

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43842

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43843

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43811

   (5) https://bugs.python.org/issue?@action=redirect&bpo=43791


File: python.info,  Node: Construção<41>,  Next: Windows<35>,  Prev: Testes<37>,  Up: Python 3 10 0 beta 1

1.23.43.10 Construção
.....................

   - bpo-43567(1): Improved generated code refresh
     (AST/tokens/opcodes/keywords) on Windows.

   - bpo-43669(2): Implement PEP 644(3).  Python now requires OpenSSL
     1.1.1 or newer.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43567

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43669

   (3) https://peps.python.org/pep-0644/


File: python.info,  Node: Windows<35>,  Next: macOS<27>,  Prev: Construção<41>,  Up: Python 3 10 0 beta 1

1.23.43.11 Windows
..................

   - bpo-35306(1): Adds additional arguments to *note os.startfile():
     1a0f. function.

   - bpo-43538(2): Avoid raising errors from *note
     pathlib.Path.exists(): a20. when passed an invalid filename.

   - bpo-38822(3): Fixed *note os.stat(): 4a0. failing on inaccessible
     directories with a trailing slash, rather than falling back to the
     parent directory’s metadata.  This implicitly affected *note
     os.path.exists(): a18. and *note os.path.isdir(): a1a.

   - bpo-26227(4): Fixed decoding of host names in *note
     socket.gethostbyaddr(): 1a10. and *note socket.gethostbyname_ex():
     1a11.

   - bpo-40432(5): Updated pegen regeneration script on Windows to find
     and use Python 3.8 or higher.  Prior to this, pegen regeneration
     already required 3.8 or higher, but the script may have used lower
     versions of Python.

   - bpo-43745(6): Actually updates Windows release to OpenSSL 1.1.1k.
     Earlier releases were mislabelled and actually included 1.1.1i
     again.

   - bpo-43652(7): Update Tcl and Tk to 8.6.11 in Windows installer.

   - bpo-43492(8): Upgrade Windows installer to use SQLite 3.35.5.

   - bpo-30555(9): Fix ‘WindowsConsoleIO’ errors in the presence of fd
     redirection.  Patch by Segev Finer.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35306

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43538

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38822

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26227

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40432

   (6) https://bugs.python.org/issue?@action=redirect&bpo=43745

   (7) https://bugs.python.org/issue?@action=redirect&bpo=43652

   (8) https://bugs.python.org/issue?@action=redirect&bpo=43492

   (9) https://bugs.python.org/issue?@action=redirect&bpo=30555


File: python.info,  Node: macOS<27>,  Next: IDLE<24>,  Prev: Windows<35>,  Up: Python 3 10 0 beta 1

1.23.43.12 macOS
................

   - bpo-42119(1): Fix check for macOS SDK paths when building Python.
     Narrow search to match contents of SDKs, namely only files in
     ‘/System/Library’, ‘/System/IOSSupport’, and ‘/usr’ other than
     ‘/usr/local’.  Previously, anything under ‘/System’ was assumed to
     be in an SDK which causes problems with the new file system layout
     in 10.15+ where user file systems may appear to be mounted under
     ‘/System’.  Paths in ‘/Library’ were also incorrectly treated as
     SDK locations.

   - bpo-43568(2): Drop support for MACOSX_DEPLOYMENT_TARGET < 10.3

   - bpo-44009(3): Provide “python3.x-intel64” executable to allow
     reliably forcing macOS universal2 framework builds to run under
     Rosetta 2 Intel-64 emulation on Apple Silicon Macs.  This can be
     useful for testing or when universal2 wheels are not yet available.

   - bpo-43851(4): Build SQLite with ‘SQLITE_OMIT_AUTOINIT’ on macOS.
     Patch by Erlend E. Aasland.

   - bpo-43492(5): Update macOS installer to use SQLite 3.35.4.

   - bpo-42235(6): ‘Mac/BuildScript/build-installer.py’ will now use
     “–enable-optimizations” and ‘--with-lto’ when building on macOS
     10.15 or later.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42119

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43568

   (3) https://bugs.python.org/issue?@action=redirect&bpo=44009

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43851

   (5) https://bugs.python.org/issue?@action=redirect&bpo=43492

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42235


File: python.info,  Node: IDLE<24>,  Next: API C<37>,  Prev: macOS<27>,  Up: Python 3 10 0 beta 1

1.23.43.13 IDLE
...............

   - bpo-37903(1): Add mouse actions to the shell sidebar.  Left click
     and optional drag selects one or more lines, as with the editor
     line number sidebar.  Right click after selecting raises a context
     menu with ‘copy with prompts’.  This zips together prompts from the
     sidebar with lines from the selected text.

   - bpo-43981(2): Fix reference leak in test_sidebar and test_squeezer.
     Patches by Terry Jan Reedy and Pablo Galindo

   - bpo-37892(3): Indent IDLE Shell input with spaces instead of tabs

   - bpo-43655(4): IDLE dialog windows are now recognized as dialogs by
     window managers on macOS and X Window.

   - bpo-37903(5): IDLE’s shell now shows prompts in a separate
     side-bar.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37903

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43981

   (3) https://bugs.python.org/issue?@action=redirect&bpo=37892

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43655

   (5) https://bugs.python.org/issue?@action=redirect&bpo=37903


File: python.info,  Node: API C<37>,  Prev: IDLE<24>,  Up: Python 3 10 0 beta 1

1.23.43.14 API C
................

   - bpo-43916(1): Add a new *note Py_TPFLAGS_DISALLOW_INSTANTIATION:
     582. type flag to disallow creating type instances.  Patch by
     Victor Stinner.

   - bpo-43774(2): Remove the now unused ‘PYMALLOC_DEBUG’ macro.  Debug
     hooks on memory allocators are now installed by default if Python
     is built in debug mode (if ‘Py_DEBUG’ macro is defined).  Moreover,
     they can now be used on Python build in release mode (ex: using
     ‘PYTHONMALLOC=debug’ environment variable).

   - bpo-43962(3): _PyInterpreterState_IDIncref() now calls
     _PyInterpreterState_IDInitref() and always increments id_refcount.
     Previously, calling _xxsubinterpreters.get_current() could create
     an id_refcount inconsistency when a
     _xxsubinterpreters.InterpreterID object was deallocated.  Patch by
     Victor Stinner.

   - bpo-28254(4): Add new C-API functions to control the state of the
     garbage collector: *note PyGC_Enable(): 8a8, *note PyGC_Disable():
     8a9, *note PyGC_IsEnabled(): 8aa, corresponding to the functions in
     the *note gc: 60. module.

   - bpo-43908(5): Introduce *note Py_TPFLAGS_IMMUTABLETYPE: 3c2. flag
     for immutable type objects, and modify *note PyType_Ready(): 77c.
     to set it for static types.  Patch by Erlend E. Aasland.

   - bpo-43795(6): *note PyMem_Calloc(): edc. is now available in the
     limited C API (‘Py_LIMITED_API’).

   - bpo-43868(7): *note PyOS_ReadlineFunctionPointer(): 586. is no
     longer exported by limited C API headers and by ‘python3.dll’ on
     Windows.  Like any function that takes ‘FILE*’, it is not part of
     the stable ABI.

   - bpo-43795(8): Stable ABI and limited API definitions are generated
     from a central manifest ( PEP 652(9)).

   - bpo-43753(10): Add the *note Py_Is(x, y): 8a4. function to test if
     the 'x' object is the 'y' object, the same as ‘x is y’ in Python.
     Add also the *note Py_IsNone(): 8a5, *note Py_IsTrue(): 8a6, *note
     Py_IsFalse(): 8a7. functions to test if an object is, respectively,
     the ‘None’ singleton, the ‘True’ singleton or the ‘False’
     singleton.  Patch by Victor Stinner.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43916

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43774

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43962

   (4) https://bugs.python.org/issue?@action=redirect&bpo=28254

   (5) https://bugs.python.org/issue?@action=redirect&bpo=43908

   (6) https://bugs.python.org/issue?@action=redirect&bpo=43795

   (7) https://bugs.python.org/issue?@action=redirect&bpo=43868

   (8) https://bugs.python.org/issue?@action=redirect&bpo=43795

   (9) https://peps.python.org/pep-0652/

   (10) https://bugs.python.org/issue?@action=redirect&bpo=43753


File: python.info,  Node: Python 3 10 0 alpha 7,  Next: Python 3 10 0 alpha 6,  Prev: Python 3 10 0 beta 1,  Up: Changelog

1.23.44 Python 3.10.0 alpha 7
-----------------------------

'Data de lançamento: 2021-04-05'

* Menu:

* Segurança: Segurança<27>.
* Núcleo e embutidos: Núcleo e embutidos<93>.
* Biblioteca: Biblioteca<95>.
* Núcleo e embutidos: Núcleo e embutidos<94>.
* Biblioteca: Biblioteca<96>.
* Documentação: Documentação<34>.
* Testes: Testes<38>.
* Construção: Construção<42>.
* Windows: Windows<36>.
* IDLE: IDLE<25>.
* API C: API C<38>.


File: python.info,  Node: Segurança<27>,  Next: Núcleo e embutidos<93>,  Up: Python 3 10 0 alpha 7

1.23.44.1 Segurança
...................

   - bpo-42988(1): CVE 2021-3426(2): Remove the ‘getfile’ feature of the
     *note pydoc: b5. module which could be abused to read arbitrary
     files on the disk (directory traversal vulnerability).  Moreover,
     even source code of Python modules can contain sensitive data like
     passwords.  Vulnerability reported by David Schwörer.

   - bpo-43285(3): *note ftplib: 5e. no longer trusts the IP address
     value returned from the server in response to the PASV command by
     default.  This prevents a malicious FTP server from using the
     response to probe IPv4 address and port combinations on the client
     network.

     Code that requires the former vulnerable behavior may set a
     ‘trust_server_pasv_ipv4_address’ attribute on their *note
     ftplib.FTP: 900. instances to ‘True’ to re-enable it.

   - bpo-43439(4): Add audit hooks for *note gc.get_objects(): 806,
     *note gc.get_referrers(): 807. and *note gc.get_referents(): 808.
     Patch by Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42988

   (2) https://www.cve.org/CVERecord?id=CVE-2021-3426

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43285

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43439


File: python.info,  Node: Núcleo e embutidos<93>,  Next: Biblioteca<95>,  Prev: Segurança<27>,  Up: Python 3 10 0 alpha 7

1.23.44.2 Núcleo e embutidos
............................

   - bpo-27129(1): Update CPython bytecode magic number.

   - bpo-43672(2): Raise ImportWarning when calling find_loader().

   - bpo-43660(3): Fix crash that happens when replacing ‘sys.stderr’
     with a callable that can remove the object while an exception is
     being printed.  Patch by Pablo Galindo.

   - bpo-27129(4): The bytecode interpreter uses instruction, rather
     byte, offsets internally.  This reduces the number of EXTENDED_ARG
     instructions needed and streamlines instruction dispatch a bit.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27129

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43672

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43660

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27129


File: python.info,  Node: Biblioteca<95>,  Next: Núcleo e embutidos<94>,  Prev: Núcleo e embutidos<93>,  Up: Python 3 10 0 alpha 7

1.23.44.3 Biblioteca
....................

   - bpo-40645(1): Fix reference leak in the ‘_hashopenssl’ extension.
     Patch by Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40645


File: python.info,  Node: Núcleo e embutidos<94>,  Next: Biblioteca<96>,  Prev: Biblioteca<95>,  Up: Python 3 10 0 alpha 7

1.23.44.4 Núcleo e embutidos
............................

   - bpo-42134(1): Calls to find_module() by the import system now raise
     ImportWarning.

   - bpo-41064(2): Improve the syntax error for invalid usage of double
     starred elements (‘**’) in f-strings.  Patch by Pablo Galindo.

   - bpo-43575(3): Speed up calls to ‘map()’ by using the PEP 590(4)
     ‘vectorcall’ calling convention.  Patch by Donghee Na.

   - bpo-42137(5): The import system now prefers using ‘__spec__’ for
     ‘ModuleType.__repr__’ over ‘module_repr()’.

   - bpo-43452(6): Added micro-optimizations to ‘_PyType_Lookup()’ to
     improve cache lookup performance in the common case of cache hits.

   - bpo-43555(7): Report the column offset for *note SyntaxError: 18d.
     for invalid line continuation characters.  Patch by Pablo Galindo.

   - bpo-43517(8): Fix misdetection of circular imports when using ‘from
     pkg.mod import attr’, which caused false positives in non-trivial
     multi-threaded code.

   - bpo-43497(9): Emit SyntaxWarnings for assertions with tuple
     constants, this is a regression introduced in python3.7

   - bpo-39316(10): Tracing now has correct line numbers for attribute
     accesses when the attribute is on a different line from the object.
     Improves debugging and profiling for multi-line method chains.

   - bpo-35883(11): Python no longer fails at startup with a fatal error
     if a command line argument contains an invalid Unicode character.
     The *note Py_DecodeLocale(): be0. function now escapes byte
     sequences which would be decoded as Unicode characters outside the
     [U+0000; U+10ffff] range.

   - bpo-43410(12): Fix a bug that was causing the parser to crash when
     emitting syntax errors when reading input from stdin.  Patch by
     Pablo Galindo

   - bpo-43406(13): Fix a possible race condition where
     ‘PyErr_CheckSignals’ tries to execute a non-Python signal handler.

   - bpo-42128(14): Add ‘__match_args__’ to *note struct sequence
     objects: 11ff.  Patch by Pablo Galindo.

   - bpo-43390(15): CPython now sets the ‘SA_ONSTACK’ flag in
     ‘PyOS_setsig’ for the VM’s default signal handlers.  This is
     friendlier to other in-process code that an extension module or
     embedding use could pull in (such as Golang’s cgo) where tiny
     thread stacks are the norm and ‘sigaltstack()’ has been used to
     provide for signal handlers.  This is a no-op change for the vast
     majority of processes that don’t use sigaltstack.

   - bpo-43287(16): Speed up calls to ‘filter()’ by using the PEP
     590(17) ‘vectorcall’ calling convention.  Patch by Donghee Na.

   - bpo-37448(18): Add a radix tree based memory map to track in-use
     obmalloc arenas.  Use to replace the old implementation of
     address_in_range().  The radix tree approach makes it easy to
     increase pool sizes beyond the OS page size.  Boosting the pool and
     arena size allows obmalloc to handle a significantly higher
     percentage of requests from its ultra-fast paths.

     It also has the advantage of eliminating the memory unsanitary
     behavior of the previous address_in_range().  The old
     address_in_range() was marked with the annotations
     _Py_NO_SANITIZE_ADDRESS, _Py_NO_SANITIZE_THREAD, and
     _Py_NO_SANITIZE_MEMORY. Those annotations are no longer needed.

     To disable the radix tree map, set a preprocessor flag as follows:
     ‘-DWITH_PYMALLOC_RADIX_TREE=0’.

     Coautoria de: Tim Peters <<tim.peters@gmail.com>>

   - bpo-29988(19): Only handle asynchronous exceptions and requests to
     drop the GIL when returning from a call or on the back edges of
     loops.  Makes sure that *note __exit__(): 1344. is always called in
     with statements, even for interrupts.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42134

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41064

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43575

   (4) https://peps.python.org/pep-0590/

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42137

   (6) https://bugs.python.org/issue?@action=redirect&bpo=43452

   (7) https://bugs.python.org/issue?@action=redirect&bpo=43555

   (8) https://bugs.python.org/issue?@action=redirect&bpo=43517

   (9) https://bugs.python.org/issue?@action=redirect&bpo=43497

   (10) https://bugs.python.org/issue?@action=redirect&bpo=39316

   (11) https://bugs.python.org/issue?@action=redirect&bpo=35883

   (12) https://bugs.python.org/issue?@action=redirect&bpo=43410

   (13) https://bugs.python.org/issue?@action=redirect&bpo=43406

   (14) https://bugs.python.org/issue?@action=redirect&bpo=42128

   (15) https://bugs.python.org/issue?@action=redirect&bpo=43390

   (16) https://bugs.python.org/issue?@action=redirect&bpo=43287

   (17) https://peps.python.org/pep-0590/

   (18) https://bugs.python.org/issue?@action=redirect&bpo=37448

   (19) https://bugs.python.org/issue?@action=redirect&bpo=29988


File: python.info,  Node: Biblioteca<96>,  Next: Documentação<34>,  Prev: Núcleo e embutidos<94>,  Up: Python 3 10 0 alpha 7

1.23.44.5 Biblioteca
....................

   - bpo-43720(1): Document various stdlib deprecations in imp, pkgutil,
     and importlib.util for removal in Python 3.12.

   - bpo-43433(2): *note xmlrpc.client.ServerProxy: a61. no longer
     ignores query and fragment in the URL of the server.

   - bpo-31956(3): The *note index(): 7e2. method of *note array.array:
     1a0. now has optional 'start' and 'stop' parameters.

   - bpo-40066(4): Enum: adjust ‘repr()’ to show only enum and member
     name (not value, nor angle brackets) and ‘str()’ to show only
     member name.  Update and improve documentation to match.

   - bpo-42136(5): Deprecate all module_repr() methods found in
     importlib as their use is being phased out by Python 3.12.

   - bpo-35930(6): Raising an exception raised in a “future” instance
     will create reference cycles.

   - bpo-41369(7): Finish updating the vendored libmpdec to version
     2.5.1.  Patch by Stefan Krah.

   - bpo-43422(8): Revert the _decimal C API which was added in
     bpo-41324(9).

   - bpo-43577(10): Fix deadlock when using *note ssl.SSLContext: 294.
     debug callback with *note ssl.SSLContext.sni_callback(): 1a1b.

   - bpo-43571(11): It’s now possible to create MPTCP sockets with
     IPPROTO_MPTCP

   - bpo-43542(12): ‘image/heic’ and ‘image/heif’ were added to *note
     mimetypes: 8f.

   - bpo-40645(13): The *note hmac: 6a. module now uses OpenSSL’s HMAC
     implementation when digestmod argument is a hash name or builtin
     hash function.

   - bpo-43510(14): Implement PEP 597(15): Add ‘EncodingWarning’
     warning, ‘-X warn_default_encoding’ option, *note
     PYTHONWARNDEFAULTENCODING: 7bd. environment variable and
     ‘encoding="locale"’ argument value.

   - bpo-43521(16): ‘ast.unparse’ can now render NaNs and empty sets.

   - bpo-42914(17): *note pprint.pprint(): 82b. gains a new boolean
     ‘underscore_numbers’ optional argument to emit integers with
     thousands separated by an underscore character for improved
     readability (for example ‘1_000_000’ instead of ‘1000000’).

   - bpo-41361(18): *note rotate(): 1a1c. calls are now slightly faster
     due to faster argument parsing.

   - bpo-43423(19): ‘subprocess.communicate()’ no longer raises an
     IndexError when there is an empty stdout or stderr IO buffer during
     a timeout on Windows.

   - bpo-27820(20): Fixed long-standing bug of smtplib.SMTP where doing
     AUTH LOGIN with initial_response_ok=False will fail.

     The cause is that SMTP.auth_login _always_ returns a password if
     provided with a challenge string, thus non-compliant with the
     standard for AUTH LOGIN.

     Also fixes bug with the test for smtpd.

   - bpo-43445(21): Add frozen modules to *note sys.stdlib_module_names:
     844.  For example, add ‘"_frozen_importlib"’ and
     ‘"_frozen_importlib_external"’ names.

   - bpo-43245(22): Add keyword arguments support to
     ‘ChainMap.new_child()’.

   - bpo-29982(23): Add optional parameter 'ignore_cleanup_errors' to
     *note tempfile.TemporaryDirectory(): 1275. and allow multiple
     ‘cleanup()’ attempts.  Contributed by C.A.M. Gerlach.

   - bpo-43428(24): Include changes from importlib_metadata 3.7(25):

     Performance enhancements to distribution discovery.

     ‘entry_points’ only returns unique distributions.

     Introduces new ‘EntryPoints’ object for containing a set of entry
     points with convenience methods for selecting entry points by group
     or name.  ‘entry_points’ now returns this object if selection
     parameters are supplied but continues to return a dict object for
     compatibility.  Users are encouraged to rely on the selection
     interface.  The dict object result is likely to be deprecated in
     the future.

     Added packages_distributions function to return a mapping of
     packages to the distributions that provide them.

   - bpo-43332(26): Improves the networking efficiency of *note
     http.client: 6f. when using a proxy via ‘set_tunnel()’.  Fewer
     small send calls are made during connection setup.

   - bpo-43420(27): Improve performance of *note fractions.Fraction:
     1e7. arithmetics for large components.  Contributed by Sergey B.
     Kirpichev.

   - bpo-43356(28): Allow passing a signal number to
     ‘_thread.interrupt_main()’.

   - bpo-43399(29): Fix ‘ElementTree.extend’ not working on iterators
     when using the Python implementation

   - bpo-43369(30): Improve *note sqlite3: cf. error handling: If
     ‘sqlite3_column_text()’ and ‘sqlite3_column_blob()’ set
     ‘SQLITE_NOMEM’, *note MemoryError: 15c5. is now raised.  Patch by
     Erlend E. Aasland.

   - bpo-43368(31): Fix a regression introduced in PR 24562, where an
     empty bytestring was fetched as ‘None’ instead of ‘b''’ in *note
     sqlite3: cf.  Patch by Mariusz Felisiak.

   - bpo-41282(32): Fixed stacklevel of ‘DeprecationWarning’ emitted
     from ‘import distutils’.

   - bpo-42129(33): ‘importlib.resources’ now honors namespace packages,
     merging resources from each location in the namespace as introduced
     in ‘importlib_resources’ 3.2 and including incidental changes
     through 5.0.3.

   - bpo-43295(34): *note datetime.datetime.strptime(): 16f6. now raises
     ‘ValueError’ instead of ‘IndexError’ when matching ‘'z'’ with the
     ‘%z’ format specifier.

   - bpo-43125(35): Return empty string if base64mime.body_encode
     receive empty bytes

   - bpo-43084(36): *note curses.window.enclose(): 1a1d. returns now
     ‘True’ or ‘False’ (as was documented) instead of ‘1’ or ‘0’.

   - bpo-42994(37): Add MIME types for opus, AAC, 3gpp and 3gpp2

   - bpo-14678(38): Add an invalidate_caches() method to the
     zipimport.zipimporter class to support
     importlib.invalidate_caches().  Patch by Desmond Cheong.

   - bpo-42782(39): Fail fast in *note shutil.move(): e82. to avoid
     creating destination directories on failure.

   - bpo-40066(40): Enum’s ‘repr()’ and ‘str()’ have changed: ‘repr()’
     is now 'EnumClass.MemberName' and ‘str()’ is 'MemberName'.
     Additionally, stdlib Enum’s whose contents are available as module
     attributes, such as ‘RegexFlag.IGNORECASE’, have their ‘repr()’ as
     'module.name', e.g.  ‘re.IGNORECASE’.

   - bpo-26053(41): Fixed bug where the *note pdb: a5. interactive run
     command echoed the args from the shell command line, even if those
     have been overridden at the pdb prompt.

   - bpo-24160(42): Fixed bug where breakpoints did not persist across
     multiple debugger sessions in *note pdb: a5.’s interactive mode.

   - bpo-40701(43): When the *note tempfile.tempdir: 1a1e. global
     variable is set to a value of type bytes, it is now handled
     consistently.  Previously exceptions could be raised from some
     tempfile APIs when the directory did not already exist in this
     situation.  Also ensures that the *note tempfile.gettempdir():
     1a1f. and *note tempfile.gettempdirb(): 1a20. functions 'always'
     return ‘str’ and ‘bytes’ respectively.

   - bpo-39342(44): Expose ‘X509_V_FLAG_ALLOW_PROXY_CERTS’ as *note
     VERIFY_ALLOW_PROXY_CERTS: 1a21. to allow proxy certificate
     validation as explained in
     ‘https://docs.openssl.org/1.1.1/man7/proxy-certificates/’.

   - bpo-31861(45): Add builtins.aiter and builtins.anext.  Patch by
     Joshua Bronson (@jab), Daniel Pope (@lordmauve), and Justin Wang
     (@justin39).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43720

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43433

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31956

   (4) https://bugs.python.org/issue?@action=redirect&bpo=40066

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42136

   (6) https://bugs.python.org/issue?@action=redirect&bpo=35930

   (7) https://bugs.python.org/issue?@action=redirect&bpo=41369

   (8) https://bugs.python.org/issue?@action=redirect&bpo=43422

   (9) https://bugs.python.org/issue?@action=redirect&bpo=41324

   (10) https://bugs.python.org/issue?@action=redirect&bpo=43577

   (11) https://bugs.python.org/issue?@action=redirect&bpo=43571

   (12) https://bugs.python.org/issue?@action=redirect&bpo=43542

   (13) https://bugs.python.org/issue?@action=redirect&bpo=40645

   (14) https://bugs.python.org/issue?@action=redirect&bpo=43510

   (15) https://peps.python.org/pep-0597/

   (16) https://bugs.python.org/issue?@action=redirect&bpo=43521

   (17) https://bugs.python.org/issue?@action=redirect&bpo=42914

   (18) https://bugs.python.org/issue?@action=redirect&bpo=41361

   (19) https://bugs.python.org/issue?@action=redirect&bpo=43423

   (20) https://bugs.python.org/issue?@action=redirect&bpo=27820

   (21) https://bugs.python.org/issue?@action=redirect&bpo=43445

   (22) https://bugs.python.org/issue?@action=redirect&bpo=43245

   (23) https://bugs.python.org/issue?@action=redirect&bpo=29982

   (24) https://bugs.python.org/issue?@action=redirect&bpo=43428

   (25) 
https://importlib-metadata.readthedocs.io/en/latest/history.html#v3-7-0

   (26) https://bugs.python.org/issue?@action=redirect&bpo=43332

   (27) https://bugs.python.org/issue?@action=redirect&bpo=43420

   (28) https://bugs.python.org/issue?@action=redirect&bpo=43356

   (29) https://bugs.python.org/issue?@action=redirect&bpo=43399

   (30) https://bugs.python.org/issue?@action=redirect&bpo=43369

   (31) https://bugs.python.org/issue?@action=redirect&bpo=43368

   (32) https://bugs.python.org/issue?@action=redirect&bpo=41282

   (33) https://bugs.python.org/issue?@action=redirect&bpo=42129

   (34) https://bugs.python.org/issue?@action=redirect&bpo=43295

   (35) https://bugs.python.org/issue?@action=redirect&bpo=43125

   (36) https://bugs.python.org/issue?@action=redirect&bpo=43084

   (37) https://bugs.python.org/issue?@action=redirect&bpo=42994

   (38) https://bugs.python.org/issue?@action=redirect&bpo=14678

   (39) https://bugs.python.org/issue?@action=redirect&bpo=42782

   (40) https://bugs.python.org/issue?@action=redirect&bpo=40066

   (41) https://bugs.python.org/issue?@action=redirect&bpo=26053

   (42) https://bugs.python.org/issue?@action=redirect&bpo=24160

   (43) https://bugs.python.org/issue?@action=redirect&bpo=40701

   (44) https://bugs.python.org/issue?@action=redirect&bpo=39342

   (45) https://bugs.python.org/issue?@action=redirect&bpo=31861


File: python.info,  Node: Documentação<34>,  Next: Testes<38>,  Prev: Biblioteca<96>,  Up: Python 3 10 0 alpha 7

1.23.44.6 Documentação
......................

   - bpo-43199(1): Answer “Why is there no goto?” in the Design and
     History FAQ.

   - bpo-43407(2): Clarified that a result from *note time.monotonic():
     253, *note time.perf_counter(): a92, *note time.process_time():
     a93, or *note time.thread_time(): 93d. can be compared with the
     result from any following call to the same function - not just the
     next immediate call.

   - bpo-43354(3): Fix type documentation for ‘Fault.faultCode’; the
     type has to be ‘int’ instead of ‘str’.

   - bpo-41933(4): Clarified wording of s * n in the Common Sequence
     Operations

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43199

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43407

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43354

   (4) https://bugs.python.org/issue?@action=redirect&bpo=41933


File: python.info,  Node: Testes<38>,  Next: Construção<42>,  Prev: Documentação<34>,  Up: Python 3 10 0 alpha 7

1.23.44.7 Testes
................

   - bpo-37945(1): Fix test_getsetlocale_issue1813() of test_locale:
     skip the test if ‘setlocale()’ fails.  Patch by Victor Stinner.

   - bpo-41561(2): Add workaround for Ubuntu’s custom OpenSSL security
     level policy.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37945

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41561


File: python.info,  Node: Construção<42>,  Next: Windows<36>,  Prev: Testes<38>,  Up: Python 3 10 0 alpha 7

1.23.44.8 Construção
....................

   - bpo-43179(1): Introduce and correctly use ALIGNOF_X in place of
     SIZEOF_X for alignment-related code in optimized string routines.
     Patch by Jessica Clarke.

   - bpo-43631(2): Update macOS, Windows, and CI to OpenSSL 1.1.1k.

   - bpo-43617(3): Improve configure.ac: Check for presence of
     autoconf-archive package and remove our copies of M4 macros.

   - bpo-43466(4): The ‘configure’ script now supports
     ‘--with-openssl-rpath’ option.

   - bpo-43372(5): Use ‘_freeze_importlib’ to generate code for the
     ‘__hello__’ module.  This approach ensures the code matches the
     interpreter version.  Previously, PYTHON_FOR_REGEN was used to
     generate the code, which might be wrong.  The marshal format for
     code objects has changed with bpo-42246(6), commit 877df851.
     Update the code and the expected code sizes in ctypes
     test_frozentable.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43179

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43631

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43617

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43466

   (5) https://bugs.python.org/issue?@action=redirect&bpo=43372

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42246


File: python.info,  Node: Windows<36>,  Next: IDLE<25>,  Prev: Construção<42>,  Up: Python 3 10 0 alpha 7

1.23.44.9 Windows
.................

   - bpo-43440(1): Build *note sqlite3: cf. with the ‘R*Tree’ module
     enabled.  Patch by Erlend E. Aasland.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43440


File: python.info,  Node: IDLE<25>,  Next: API C<38>,  Prev: Windows<36>,  Up: Python 3 10 0 alpha 7

1.23.44.10 IDLE
...............

   - bpo-42225(1): Document that IDLE can fail on Unix either from
     misconfigured IP masquerade rules or failure displaying complex
     colored (non-ascii) characters.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42225


File: python.info,  Node: API C<38>,  Prev: IDLE<25>,  Up: Python 3 10 0 alpha 7

1.23.44.11 API C
................

   - bpo-43688(1): The limited C API is now supported if Python is built
     in debug mode (if the ‘Py_DEBUG’ macro is defined).  In the limited
     C API, the *note Py_INCREF(): 56e. and *note Py_DECREF(): 56f.
     functions are now implemented as opaque function calls, rather than
     accessing directly the *note PyObject.ob_refcnt: 8a3. member, if
     Python is built in debug mode and the ‘Py_LIMITED_API’ macro
     targets Python 3.10 or newer.  It became possible to support the
     limited C API in debug mode because the *note PyObject: 339.
     structure is the same in release and debug mode since Python 3.8
     (see bpo-36465(2)).

     The limited C API is still not supported in the ‘--with-trace-refs’
     special build (‘Py_TRACE_REFS’ macro).

     Patch por Victor Stinner.

   - bpo-43244(3): Remove the ‘pyarena.h’ header file with functions:

        * ‘PyArena_New()’

        * ‘PyArena_Free()’

        * ‘PyArena_Malloc()’

        * ‘PyArena_AddPyObject()’

     These functions were undocumented, excluded from the limited C API,
     and were only used internally by the compiler.  Patch by Victor
     Stinner.

   - bpo-43244(4): Remove the compiler and parser functions using
     ‘struct _mod’ type, because the public AST C API was removed:

        * ‘PyAST_Compile()’

        * ‘PyAST_CompileEx()’

        * ‘PyAST_CompileObject()’

        * ‘PyFuture_FromAST()’

        * ‘PyFuture_FromASTObject()’

        * ‘PyParser_ASTFromFile()’

        * ‘PyParser_ASTFromFileObject()’

        * ‘PyParser_ASTFromFilename()’

        * ‘PyParser_ASTFromString()’

        * ‘PyParser_ASTFromStringObject()’

     These functions were undocumented and excluded from the limited C
     API. Patch by Victor Stinner.

   - bpo-43244(5): Remove ‘ast.h’, ‘asdl.h’, and ‘Python-ast.h’ header
     files.  These functions were undocumented and excluded from the
     limited C API. Most names defined by these header files were not
     prefixed by ‘Py’ and so could create names conflicts.  For example,
     ‘Python-ast.h’ defined a ‘Yield’ macro which was conflict with the
     ‘Yield’ name used by the Windows ‘<winbase.h>’ header.  Use the
     Python *note ast: 8. module instead.  Patch by Victor Stinner.

   - bpo-43541(6): Fix a ‘PyEval_EvalCodeEx()’ regression: fix reference
     counting on builtins.  Patch by Victor Stinner.

   - bpo-43244(7): Remove the ‘symtable.h’ header file and the
     undocumented functions:

        * ‘PyST_GetScope()’

        * ‘PySymtable_Build()’

        * ‘PySymtable_BuildObject()’

        * ‘PySymtable_Free()’

        * ‘Py_SymtableString()’

        * ‘Py_SymtableStringObject()’

     A função ‘Py_SymtableString()’ fazia parte da ABI estável por
     engano, mas não pôde ser usada, porque o arquivo de cabeçalho
     ‘symtable.h’ foi excluído da API C limitada.

     The Python *note symtable: d8. module remains available and is
     unchanged.

     Patch por Victor Stinner.

   - bpo-43244(8): Remove the ‘PyAST_Validate()’ function.  It is no
     longer possible to build a AST object (‘mod_ty’ type) with the
     public C API. The function was already excluded from the limited C
     API ( PEP 384(9)).  Patch by Victor Stinner.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43688

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36465

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43244

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43244

   (5) https://bugs.python.org/issue?@action=redirect&bpo=43244

   (6) https://bugs.python.org/issue?@action=redirect&bpo=43541

   (7) https://bugs.python.org/issue?@action=redirect&bpo=43244

   (8) https://bugs.python.org/issue?@action=redirect&bpo=43244

   (9) https://peps.python.org/pep-0384/


File: python.info,  Node: Python 3 10 0 alpha 6,  Next: Python 3 10 0 alpha 5,  Prev: Python 3 10 0 alpha 7,  Up: Changelog

1.23.45 Python 3.10.0 alpha 6
-----------------------------

'Data de lançamento: 2021-03-01'

* Menu:

* Segurança: Segurança<28>.
* Núcleo e embutidos: Núcleo e embutidos<95>.
* Biblioteca: Biblioteca<97>.
* Núcleo e embutidos: Núcleo e embutidos<96>.
* Biblioteca: Biblioteca<98>.
* Núcleo e embutidos: Núcleo e embutidos<97>.
* Biblioteca: Biblioteca<99>.
* Documentação: Documentação<35>.
* Testes: Testes<39>.
* Construção: Construção<43>.
* Windows: Windows<37>.
* macOS: macOS<28>.
* IDLE: IDLE<26>.
* API C: API C<39>.


File: python.info,  Node: Segurança<28>,  Next: Núcleo e embutidos<95>,  Up: Python 3 10 0 alpha 6

1.23.45.1 Segurança
...................

   - bpo-42967(1): Fix web cache poisoning vulnerability by defaulting
     the query args separator to ‘&’, and allowing the user to choose a
     custom separator.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42967


File: python.info,  Node: Núcleo e embutidos<95>,  Next: Biblioteca<97>,  Prev: Segurança<28>,  Up: Python 3 10 0 alpha 6

1.23.45.2 Núcleo e embutidos
............................

   - bpo-43321(1): Fix ‘SystemError’ raised when ‘PyArg_Parse*()’ is
     used with ‘#’ but without ‘PY_SSIZE_T_CLEAN’ defined.

   - bpo-36346(2): ‘PyArg_Parse*()’ functions now emits
     ‘DeprecationWarning’ when ‘u’ or ‘Z’ format is used.  See PEP
     623(3) for detail.

   - bpo-43277(4): Add a new *note PySet_CheckExact(): 8a1. function to
     the C-API to check if an object is an instance of *note set: 5d9.
     but not an instance of a subtype.  Patch by Pablo Galindo.

   - bpo-42990(5): The *note types.FunctionType: 887. constructor now
     inherits the current builtins if the 'globals' dictionary has no
     ‘"__builtins__"’ key, rather than using ‘{"None": None}’ as
     builtins: same behavior as *note eval(): 180. and *note exec():
     17f. functions.  Defining a function with ‘def function(...): ...’
     in Python is not affected, globals cannot be overridden with this
     syntax: it also inherits the current builtins.  Patch by Victor
     Stinner.

   - bpo-42990(6): Functions have a new ‘__builtins__’ attribute which
     is used to look for builtin symbols when a function is executed,
     instead of looking into ‘__globals__['__builtins__']’.  Patch by
     Mark Shannon and Victor Stinner.

   - bpo-43149(7): Improve the error message in the parser for exception
     groups without parentheses.  Patch by Pablo Galindo.

   - bpo-43121(8): Fixed an incorrect *note SyntaxError: 18d. message
     for missing comma in literals.  Patch by Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43321

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36346

   (3) https://peps.python.org/pep-0623/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43277

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42990

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42990

   (7) https://bugs.python.org/issue?@action=redirect&bpo=43149

   (8) https://bugs.python.org/issue?@action=redirect&bpo=43121


File: python.info,  Node: Biblioteca<97>,  Next: Núcleo e embutidos<96>,  Prev: Núcleo e embutidos<95>,  Up: Python 3 10 0 alpha 6

1.23.45.3 Biblioteca
....................

   - bpo-42819(1): *note readline: ba.: Explicitly disable bracketed
     paste in the interactive interpreter, even if it’s set in the
     inputrc, is enabled by default (eg GNU Readline 8.1), or a user
     calls ‘readline.read_init_file()’.  The Python REPL has not
     implemented bracketed paste support.  Also, bracketed mode writes
     the ‘"\x1b[?2004h"’ escape sequence into stdout which causes test
     failures in applications that don’t support it.  It can still be
     explicitly enabled by calling ‘readline.parse_and_bind("set
     enable-bracketed-paste on")’.  Patch by Dustin Rodrigues.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42819


File: python.info,  Node: Núcleo e embutidos<96>,  Next: Biblioteca<98>,  Prev: Biblioteca<97>,  Up: Python 3 10 0 alpha 6

1.23.45.4 Núcleo e embutidos
............................

   - bpo-42808(1): Simple calls to ‘type(object)’ are now faster due to
     the ‘vectorcall’ calling convention.  Patch by Dennis Sweeney.

   - bpo-42217(2): Make the compiler merges same co_code and
     co_linetable objects in a module like already did for co_consts.

   - bpo-41972(3): Substring search functions such as ‘str1 in str2’ and
     ‘str2.find(str1)’ now sometimes use the “Two-Way” string comparison
     algorithm to avoid quadratic behavior on long strings.

   - bpo-42128(4): Implement PEP 634(5) (structural pattern matching).
     Patch by Brandt Bucher.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42808

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42217

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41972

   (4) https://bugs.python.org/issue?@action=redirect&bpo=42128

   (5) https://peps.python.org/pep-0634/


File: python.info,  Node: Biblioteca<98>,  Next: Núcleo e embutidos<97>,  Prev: Núcleo e embutidos<96>,  Up: Python 3 10 0 alpha 6

1.23.45.5 Biblioteca
....................

   - bpo-40692(1): In the *note concurrent.futures.ProcessPoolExecutor:
     8f4, validate that ‘multiprocess.synchronize()’ is available on a
     given platform and rely on that check in the *note
     concurrent.futures: 21. test suite so we can run tests that are
     unrelated to ‘ProcessPoolExecutor’ on those platforms.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40692


File: python.info,  Node: Núcleo e embutidos<97>,  Next: Biblioteca<99>,  Prev: Biblioteca<98>,  Up: Python 3 10 0 alpha 6

1.23.45.6 Núcleo e embutidos
............................

   - bpo-38302(1): If *note object.__ipow__(): 7d2. returns *note
     NotImplemented: 7d3, the operator will correctly fall back to *note
     object.__pow__(): 7d4. and *note object.__rpow__(): 7d5. as
     expected.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38302


File: python.info,  Node: Biblioteca<99>,  Next: Documentação<35>,  Prev: Núcleo e embutidos<97>,  Up: Python 3 10 0 alpha 6

1.23.45.7 Biblioteca
....................

   - bpo-43316(1): The ‘python -m gzip’ command line application now
     properly fails when detecting an unsupported extension.  It exits
     with a non-zero exit code and prints an error message to stderr.

   - bpo-43317(2): Set the chunk size for the ‘gzip’ module main
     function to io.DEFAULT_BUFFER_SIZE. This is slightly faster than
     the 1024 bytes constant that was used previously.

   - bpo-43146(3): Handle None in single-arg versions of *note
     print_exception(): 852. and *note format_exception(): 850.

   - bpo-43260(4): Fix TextIOWrapper can not flush internal buffer
     forever after very large text is written.

   - bpo-43258(5): Prevent needless allocation of *note sqlite3: cf.
     aggregate function context when no rows match an aggregate query.
     Patch by Erlend E. Aasland.

   - bpo-43251(6): Improve *note sqlite3: cf. error handling:
     ‘sqlite3_column_name()’ failures now result in *note MemoryError:
     15c5.  Patch by Erlend E. Aasland.

   - bpo-40956(7): Fix segfault in *note sqlite3.Connection.backup():
     b92. if no argument was provided.  The regression was introduced by
     PR 23838.  Patch by Erlend E. Aasland.

   - bpo-43172(8): The readline module now passes its tests when built
     directly against libedit.  Existing irreconcilable API differences
     remain in *note readline.get_begidx(): 1a30. and *note
     readline.get_endidx(): 1a31. behavior based on libreadline vs
     libedit use.

   - bpo-43163(9): Fix a bug in *note codeop: 1c. that was causing it to
     not ask for more input when multi-line snippets have unclosed
     parentheses.  Patch by Pablo Galindo

   - bpo-43162(10): deprecate unsupported ability to access enum members
     as attributes of other enum members

   - bpo-43146(11): Fix recent regression in None argument handling in
     *note traceback: fe. module functions.

   - bpo-43102(12): The namedtuple __new__ method had its __builtins__
     set to None instead of an actual dictionary.  This created problems
     for introspection tools.

   - bpo-43106(13): Added *note O_EVTONLY: 81d, *note O_FSYNC: 81e,
     *note O_SYMLINK: 81f. and *note O_NOFOLLOW_ANY: 820. for macOS.
     Patch by Donghee Na.

   - bpo-42960(14): Adds *note resource.RLIMIT_KQUEUES: 1a32. constant
     from FreeBSD to the *note resource: bc. module.

   - bpo-42151(15): Make the pure Python implementation of *note
     xml.etree.ElementTree: 125. behave the same as the C implementation
     (‘_elementree’) regarding default attribute values (by not setting
     ‘specified_attributes=1’).

   - bpo-29753(16): In ctypes, now packed bitfields are calculated
     properly and the first item of packed bitfields is now shrank
     correctly.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43316

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43317

   (3) https://bugs.python.org/issue?@action=redirect&bpo=43146

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43260

   (5) https://bugs.python.org/issue?@action=redirect&bpo=43258

   (6) https://bugs.python.org/issue?@action=redirect&bpo=43251

   (7) https://bugs.python.org/issue?@action=redirect&bpo=40956

   (8) https://bugs.python.org/issue?@action=redirect&bpo=43172

   (9) https://bugs.python.org/issue?@action=redirect&bpo=43163

   (10) https://bugs.python.org/issue?@action=redirect&bpo=43162

   (11) https://bugs.python.org/issue?@action=redirect&bpo=43146

   (12) https://bugs.python.org/issue?@action=redirect&bpo=43102

   (13) https://bugs.python.org/issue?@action=redirect&bpo=43106

   (14) https://bugs.python.org/issue?@action=redirect&bpo=42960

   (15) https://bugs.python.org/issue?@action=redirect&bpo=42151

   (16) https://bugs.python.org/issue?@action=redirect&bpo=29753


File: python.info,  Node: Documentação<35>,  Next: Testes<39>,  Prev: Biblioteca<99>,  Up: Python 3 10 0 alpha 6

1.23.45.8 Documentação
......................

   - bpo-27646(1): Clarify that ‘yield from <expr>’ works with any
     iterable, not just iterators.

   - bpo-36346(2): Update some deprecated unicode APIs which are
     documented as “will be removed in 4.0” to “3.12”.  See PEP 623(3)
     for detail.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27646

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36346

   (3) https://peps.python.org/pep-0623/


File: python.info,  Node: Testes<39>,  Next: Construção<43>,  Prev: Documentação<35>,  Up: Python 3 10 0 alpha 6

1.23.45.9 Testes
................

   - bpo-43288(1): Fix test_importlib to correctly skip Unicode file
     tests if the filesystem does not support them.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43288


File: python.info,  Node: Construção<43>,  Next: Windows<37>,  Prev: Testes<39>,  Up: Python 3 10 0 alpha 6

1.23.45.10 Construção
.....................

   - bpo-43174(1): Windows build now uses ‘/utf-8’ compiler option.

   - bpo-43103(2): Add a new configure ‘--without-static-libpython’
     option to not build the ‘libpythonMAJOR.MINOR.a’ static library and
     not install the ‘python.o’ object file.

   - bpo-13501(3): The configure script can now use 'libedit' instead of
     'readline' with the command line option ‘--with-readline=editline’.

   - bpo-42603(4): Make configure script use pkg-config to detect the
     location of Tcl/Tk headers and libraries, used to build tkinter.

     On macOS, a Tcl/Tk configuration provided by pkg-config will be
     preferred over Tcl/Tk frameworks installed in
     ‘/{System/,}Library/Frameworks’.  If both exist and the latter is
     preferred, the appropriate ‘--with-tcltk-*’ configuration options
     need to be explicitly set.

   - bpo-39448(5): Add the “regen-frozen” makefile target that
     regenerates the code for the frozen ‘__hello__’ module.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43174

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43103

   (3) https://bugs.python.org/issue?@action=redirect&bpo=13501

   (4) https://bugs.python.org/issue?@action=redirect&bpo=42603

   (5) https://bugs.python.org/issue?@action=redirect&bpo=39448


File: python.info,  Node: Windows<37>,  Next: macOS<28>,  Prev: Construção<43>,  Up: Python 3 10 0 alpha 6

1.23.45.11 Windows
..................

   - bpo-43155(1): *note PyCMethod_New(): 1a37. is now present in
     ‘python3.lib’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43155


File: python.info,  Node: macOS<28>,  Next: IDLE<26>,  Prev: Windows<37>,  Up: Python 3 10 0 alpha 6

1.23.45.12 macOS
................

   - bpo-41837(1): Update macOS installer build to use OpenSSL 1.1.1j.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41837


File: python.info,  Node: IDLE<26>,  Next: API C<39>,  Prev: macOS<28>,  Up: Python 3 10 0 alpha 6

1.23.45.13 IDLE
...............

   - bpo-43283(1): Document why printing to IDLE’s Shell is often slower
     than printing to a system terminal and that it can be made faster
     by pre-formatting a single string before printing.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43283


File: python.info,  Node: API C<39>,  Prev: IDLE<26>,  Up: Python 3 10 0 alpha 6

1.23.45.14 API C
................

   - bpo-43278(1): Always put compiler and system information on the
     first line of the REPL welcome message.

   - bpo-43270(2): Remove the private ‘_PyErr_OCCURRED()’ macro: use the
     public *note PyErr_Occurred(): 1a3b. function instead.

   - bpo-35134(3): Move odictobject.h, parser_interface.h,
     picklebufobject.h, pydebug.h, and pyfpe.h into the cpython/
     directory.  They must not be included directly, as they are already
     included by Python.h: *note Include Files: 784.

   - bpo-35134(4): Move pyarena.h, pyctype.h, and pytime.h into the
     cpython/ directory.  They must not be included directly, as they
     are already included by Python.h: *note Include Files: 784.

   - bpo-40170(5): *note PyExceptionClass_Name(): a6f. is now always
     declared as a function, in order to hide implementation details.
     The macro accessed *note PyTypeObject.tp_name: 1a3c. directly.
     Patch by Erlend E. Aasland.

   - bpo-43239(6): The *note PyCFunction_New(): 1a3d. function is now
     exported in the ABI when compiled with ‘-fvisibility=hidden’.

   - bpo-40170(7): *note PyIter_Check(): 1a3e. is now always declared as
     a function, in order to hide implementation details.  The macro
     accessed *note PyTypeObject.tp_iternext: 1538. directly.  Patch by
     Erlend E. Aasland.

   - bpo-40170(8): Convert *note PyDescr_IsData(): 1a3f. macro to a
     function to hide implementation details: The macro accessed *note
     PyTypeObject.tp_descr_set: 1a40. directly.  Patch by Erlend E.
     Aasland.

   - bpo-43181(9): Convert *note PyObject_TypeCheck(): 1a41. macro to a
     static inline function.  Patch by Erlend E. Aasland.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43278

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43270

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35134

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35134

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40170

   (6) https://bugs.python.org/issue?@action=redirect&bpo=43239

   (7) https://bugs.python.org/issue?@action=redirect&bpo=40170

   (8) https://bugs.python.org/issue?@action=redirect&bpo=40170

   (9) https://bugs.python.org/issue?@action=redirect&bpo=43181


File: python.info,  Node: Python 3 10 0 alpha 5,  Next: Python 3 10 0 alpha 4,  Prev: Python 3 10 0 alpha 6,  Up: Changelog

1.23.46 Python 3.10.0 alpha 5
-----------------------------

'Data de lançamento: 2021-02-02'

* Menu:

* Segurança: Segurança<29>.
* Núcleo e embutidos: Núcleo e embutidos<98>.
* Biblioteca: Biblioteca<100>.
* Núcleo e embutidos: Núcleo e embutidos<99>.
* Biblioteca: Biblioteca<101>.
* Documentação: Documentação<36>.
* Testes: Testes<40>.
* Construção: Construção<44>.
* Windows: Windows<38>.
* macOS: macOS<29>.
* IDLE: IDLE<27>.
* API C: API C<40>.


File: python.info,  Node: Segurança<29>,  Next: Núcleo e embutidos<98>,  Up: Python 3 10 0 alpha 5

1.23.46.1 Segurança
...................

   - bpo-42938(1): Avoid static buffers when computing the repr of *note
     ctypes.c_double: 1a44. and *note ctypes.c_longdouble: 1a45. values.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42938


File: python.info,  Node: Núcleo e embutidos<98>,  Next: Biblioteca<100>,  Prev: Segurança<29>,  Up: Python 3 10 0 alpha 5

1.23.46.2 Núcleo e embutidos
............................

   - bpo-42990(1): Refactor the ‘PyEval_’ family of functions.

        * An new function ‘_PyEval_Vector’ is added to simplify calls to
          Python from C.

        * ‘_PyEval_EvalCodeWithName’ is removed

        * ‘PyEval_EvalCodeEx’ is retained as part of the API, but is not
          used internally

   - bpo-38631(2): Replace *note Py_FatalError(): 98a. calls in the
     compiler with regular *note SystemError: 575. exceptions.  Patch by
     Victor Stinner.

   - bpo-42997(3): Improve error message for missing “:” before blocks.
     Patch by Pablo Galindo.

   - bpo-43017(4): Improve error message in the parser when using
     un-parenthesised tuples in comprehensions.  Patch by Pablo Galindo.

   - bpo-42986(5): Fix parser crash when reporting syntax errors in
     f-string with newlines.  Patch by Pablo Galindo.

   - bpo-40176(6): Syntax errors for unterminated string literals now
     point to the start of the string instead of reporting EOF/EOL.

   - bpo-42927(7): The inline cache for ‘LOAD_ATTR’ now also optimizes
     access to attributes defined by ‘__slots__’.  This makes reading
     such attribute up to 30% faster.

   - bpo-42864(8): Improve error messages in the parser when parentheses
     are not closed.  Patch by Pablo Galindo.

   - bpo-42924(9): Fix ‘bytearray’ repetition incorrectly copying data
     from the start of the buffer, even if the data is offset within the
     buffer (e.g.  after reassigning a slice at the start of the
     ‘bytearray’ to a shorter byte string).

   - bpo-42882(10): Fix the ‘_PyUnicode_FromId()’ function
     (_Py_IDENTIFIER(var) API) when *note Py_Initialize(): 8b1. / *note
     Py_Finalize(): 13a0. is called multiple times: preserve
     ‘_PyRuntime.unicode_ids.next_index’ value.

   - bpo-42827(11): Fix a crash when working out the error line of a
     *note SyntaxError: 18d. in some multi-line expressions.

   - bpo-42823(12): frame.f_lineno is correct even if frame.f_trace is
     set to True

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42990

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38631

   (3) https://bugs.python.org/issue?@action=redirect&bpo=42997

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43017

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42986

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40176

   (7) https://bugs.python.org/issue?@action=redirect&bpo=42927

   (8) https://bugs.python.org/issue?@action=redirect&bpo=42864

   (9) https://bugs.python.org/issue?@action=redirect&bpo=42924

   (10) https://bugs.python.org/issue?@action=redirect&bpo=42882

   (11) https://bugs.python.org/issue?@action=redirect&bpo=42827

   (12) https://bugs.python.org/issue?@action=redirect&bpo=42823


File: python.info,  Node: Biblioteca<100>,  Next: Núcleo e embutidos<99>,  Prev: Núcleo e embutidos<98>,  Up: Python 3 10 0 alpha 5

1.23.46.3 Biblioteca
....................

   - bpo-37324(1): Remove deprecated aliases to *note Classes Base
     Abstratas de Coleções: 87c. from the *note collections: 1d. module.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37324


File: python.info,  Node: Núcleo e embutidos<99>,  Next: Biblioteca<101>,  Prev: Biblioteca<100>,  Up: Python 3 10 0 alpha 5

1.23.46.4 Núcleo e embutidos
............................

   - bpo-41994(1): Fixed possible leak in ‘import’ when ‘sys.modules’ is
     not a ‘dict’.

   - bpo-27772(2): In string formatting, preceding the 'width' field by
     ‘'0'’ no longer affects the default alignment for strings.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41994

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27772


File: python.info,  Node: Biblioteca<101>,  Next: Documentação<36>,  Prev: Núcleo e embutidos<99>,  Up: Python 3 10 0 alpha 5

1.23.46.5 Biblioteca
....................

   - bpo-43108(1): Fixed a reference leak in the *note curses: 2b.
     module.  Patch by Pablo Galindo

   - bpo-43077(2): Update the bundled pip to 21.0.1 and setuptools to
     52.0.0.

   - bpo-41282(3): Deprecate ‘distutils’ in documentation and add
     warning on import.

   - bpo-43014(4): Improve performance of *note tokenize: fb. by 20-30%.
     Patch by Anthony Sottile.

   - bpo-42323(5): Fix *note math.nextafter(): 498. for NaN on AIX.

   - bpo-42955(6): Add *note sys.stdlib_module_names: 844, containing
     the list of the standard library module names.  Patch by Victor
     Stinner.

   - bpo-42944(7): Fix ‘random.Random.sample’ when ‘counts’ argument is
     not ‘None’.

   - bpo-42934(8): Use *note TracebackException: 25c.’s new ‘compact’
     param in *note TestResult: 11a6. to reduce time and memory consumed
     by traceback formatting.

   - bpo-42931(9): Add ‘randbytes()’ to ‘random.__all__’.

   - bpo-38250(10): [Enum] Flags consisting of a single bit are now
     considered canonical, and will be the only flags returned from
     listing and iterating over a Flag class or a Flag member.
     Multi-bit flags are considered aliases; they will be returned from
     lookups and operations that result in their value.  Iteration for
     both Flag and Flag members is in definition order.

   - bpo-42877(11): Added the ‘compact’ parameter to the constructor of
     *note traceback.TracebackException: 25c. to reduce time and memory
     for use cases that only need to call ‘TracebackException.format()’
     and ‘TracebackException.format_exception_only()’.

   - bpo-42923(12): The *note Py_FatalError(): 98a. function and the
     *note faulthandler: 58. module now dump the list of extension
     modules on a fatal error.

   - bpo-42848(13): Removed recursion from *note TracebackException:
     25c. to allow it to handle long exception chains.

   - bpo-42901(14): [Enum] move member creation from ‘EnumMeta.__new__’
     to ‘_proto_member.__set_name__’, allowing members to be created and
     visible in ‘__init_subclass__’.

   - bpo-42780(15): Fix os.set_inheritable() for O_PATH file descriptors
     on Linux.

   - bpo-42866(16): Fix a reference leak in the ‘getcodec()’ function of
     CJK codecs.  Patch by Victor Stinner.

   - bpo-42846(17): Convert the 6 CJK codec extension modules
     (_codecs_cn, _codecs_hk, _codecs_iso2022, _codecs_jp, _codecs_kr
     and _codecs_tw) to the multiphase initialization API ( PEP
     489(18)).  Patch by Victor Stinner.

   - bpo-42851(19): remove __init_subclass__ support for Enum members

   - bpo-42834(20): Make internal caches of the ‘_json’ module
     compatible with subinterpreters.

   - bpo-41748(21): Fix HTMLParser parsing rules for element attributes
     containing commas with spaces.  Patch by Karl Dubost.

   - bpo-40810(22): Require SQLite 3.7.15 or newer.  Patch by Erlend E.
     Aasland.

   - bpo-1635741(23): Convert the _multibytecodec extension module (CJK
     codecs) to multi-phase initialization ( PEP 489(24)).  Patch by
     Erlend E. Aasland.

   - bpo-42802(25): The distutils ‘bdist_wininst’ command deprecated in
     Python 3.8 has been removed.  The distutils ‘bdist_wheel’ command
     is now recommended to distribute binary packages on Windows.

   - bpo-24464(26): The undocumented built-in function
     ‘sqlite3.enable_shared_cache’ is now deprecated, scheduled for
     removal in Python 3.12.  Its use is strongly discouraged by the
     SQLite3 documentation.  Patch by Erlend E. Aasland.

   - bpo-42384(27): Make pdb populate sys.path[0] exactly the same as
     regular python execution.

   - bpo-42383(28): Fix pdb: previously pdb would fail to restart the
     debugging target if it was specified using a relative path and the
     current directory changed.

   - bpo-42005(29): Fix CLI of *note cProfile: 27. and *note profile:
     af. to catch *note BrokenPipeError: 1095.

   - bpo-41604(30): Don’t decrement the reference count of the previous
     user_ptr when set_panel_userptr fails.

   - bpo-41149(31): Allow executing callables that have a boolean value
     of ‘False’ when passed to ‘Threading.thread’ as the target.  Patch
     contributed by Barney Stratford.

   - bpo-38307(32): Add an ‘end_lineno’ attribute to the Class and
     Function objects that appear in the tree returned by pyclbr
     functions.  This and the existing ‘lineno’ attribute define the
     extent of class and def statements.  Patch by Aviral Srivastava.

   - bpo-39273(33): The ‘BUTTON5_*’ constants are now exposed in the
     *note curses: 2b. module if available.

   - bpo-33289(34): Correct call to *note tkinter.colorchooser: f1. to
     return RGB triplet of ints instead of floats.  Patch by Cheryl
     Sabella.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43108

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43077

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41282

   (4) https://bugs.python.org/issue?@action=redirect&bpo=43014

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42323

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42955

   (7) https://bugs.python.org/issue?@action=redirect&bpo=42944

   (8) https://bugs.python.org/issue?@action=redirect&bpo=42934

   (9) https://bugs.python.org/issue?@action=redirect&bpo=42931

   (10) https://bugs.python.org/issue?@action=redirect&bpo=38250

   (11) https://bugs.python.org/issue?@action=redirect&bpo=42877

   (12) https://bugs.python.org/issue?@action=redirect&bpo=42923

   (13) https://bugs.python.org/issue?@action=redirect&bpo=42848

   (14) https://bugs.python.org/issue?@action=redirect&bpo=42901

   (15) https://bugs.python.org/issue?@action=redirect&bpo=42780

   (16) https://bugs.python.org/issue?@action=redirect&bpo=42866

   (17) https://bugs.python.org/issue?@action=redirect&bpo=42846

   (18) https://peps.python.org/pep-0489/

   (19) https://bugs.python.org/issue?@action=redirect&bpo=42851

   (20) https://bugs.python.org/issue?@action=redirect&bpo=42834

   (21) https://bugs.python.org/issue?@action=redirect&bpo=41748

   (22) https://bugs.python.org/issue?@action=redirect&bpo=40810

   (23) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (24) https://peps.python.org/pep-0489/

   (25) https://bugs.python.org/issue?@action=redirect&bpo=42802

   (26) https://bugs.python.org/issue?@action=redirect&bpo=24464

   (27) https://bugs.python.org/issue?@action=redirect&bpo=42384

   (28) https://bugs.python.org/issue?@action=redirect&bpo=42383

   (29) https://bugs.python.org/issue?@action=redirect&bpo=42005

   (30) https://bugs.python.org/issue?@action=redirect&bpo=41604

   (31) https://bugs.python.org/issue?@action=redirect&bpo=41149

   (32) https://bugs.python.org/issue?@action=redirect&bpo=38307

   (33) https://bugs.python.org/issue?@action=redirect&bpo=39273

   (34) https://bugs.python.org/issue?@action=redirect&bpo=33289


File: python.info,  Node: Documentação<36>,  Next: Testes<40>,  Prev: Biblioteca<101>,  Up: Python 3 10 0 alpha 5

1.23.46.6 Documentação
......................

   - bpo-40304(1): Fix doc for type(name, bases, dict).  Patch by Boris
     Verkhovskiy and Éric Araujo.

   - bpo-42811(2): Updated importlib.util.resolve_name() doc to use
     __spec__.parent instead of __package__.  (Thanks Yair Frid.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40304

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42811


File: python.info,  Node: Testes<40>,  Next: Construção<44>,  Prev: Documentação<36>,  Up: Python 3 10 0 alpha 5

1.23.46.7 Testes
................

   - bpo-40823(1): Use ‘unittest.TestLoader().loadTestsFromTestCase()’
     instead of ‘unittest.makeSuite()’ in *note sqlite3: cf. tests.
     Patch by Erlend E. Aasland.

   - bpo-40810(2): In *note sqlite3: cf, fix ‘CheckTraceCallbackContent’
     for SQLite pre 3.7.15.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40823

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40810


File: python.info,  Node: Construção<44>,  Next: Windows<38>,  Prev: Testes<40>,  Up: Python 3 10 0 alpha 5

1.23.46.8 Construção
....................

   - bpo-43031(1): Pass ‘--timeout=$(TESTTIMEOUT)’ option to the default
     profile task ‘./python -m test --pgo’ command.

   - bpo-36143(2): ‘make regen-all’ now also runs ‘regen-keyword’.
     Patch by Victor Stinner.

   - bpo-42874(3): Removed the grep -q and -E flags in the tzpath
     validation section of the configure script to better accommodate
     users of some platforms (specifically Solaris 10).

   - bpo-31904(4): Add library search path by wr-cc in
     add_cross_compiling_paths() for VxWorks.

   - bpo-42856(5): Add ‘--with-wheel-pkg-dir=PATH’ option to the
     ‘./configure’ script.  If specified, the *note ensurepip: 55.
     module looks for ‘setuptools’ and ‘pip’ wheel packages in this
     directory: if both are present, these wheel packages are used
     instead of ensurepip bundled wheel packages.

     Algumas distribuições Linux possuem políticas de empacotamento
     recomendando evitar o empacotamento de dependências.  Por exemplo,
     Fedora instala pacotes wheel no diretório
     ‘/usr/share/python-wheels/’ e não instala o pacote
     ‘ensurepip._bundled’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43031

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36143

   (3) https://bugs.python.org/issue?@action=redirect&bpo=42874

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42856


File: python.info,  Node: Windows<38>,  Next: macOS<29>,  Prev: Construção<44>,  Up: Python 3 10 0 alpha 5

1.23.46.9 Windows
.................

   - bpo-41837(1): Updated Windows installer to include OpenSSL 1.1.1i

   - bpo-42584(2): Upgrade Windows installer to use SQLite 3.34.0.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41837

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42584


File: python.info,  Node: macOS<29>,  Next: IDLE<27>,  Prev: Windows<38>,  Up: Python 3 10 0 alpha 5

1.23.46.10 macOS
................

   - bpo-42504(1): Ensure that the value of
     sysconfig.get_config_var(‘MACOSX_DEPLOYMENT_TARGET’) is always a
     string, even in when the value is parsable as an integer.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42504


File: python.info,  Node: IDLE<27>,  Next: API C<40>,  Prev: macOS<29>,  Up: Python 3 10 0 alpha 5

1.23.46.11 IDLE
...............

   - bpo-43008(1): Make IDLE invoke *note sys.excepthook(): 80e. in
     normal, 2-process mode.  Patch by Ken Hilton.

   - bpo-33065(2): Fix problem debugging user classes with __repr__
     method.

   - bpo-23544(3): Disable Debug=>Stack Viewer when user code is running
     or Debugger is active, to prevent hang or crash.  Patch by Zackery
     Spytz.

   - bpo-32631(4): Finish zzdummy example extension module: make menu
     entries work; add docstrings and tests with 100% coverage.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=43008

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33065

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23544

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32631


File: python.info,  Node: API C<40>,  Prev: IDLE<27>,  Up: Python 3 10 0 alpha 5

1.23.46.12 API C
................

   - bpo-42979(1): When Python is built in debug mode (with C
     assertions), calling a type slot like ‘sq_length’ (‘__len__()’ in
     Python) now fails with a fatal error if the slot succeeded with an
     exception set, or failed with no exception set.  The error message
     contains the slot, the type name, and the current exception (if an
     exception is set).  Patch by Victor Stinner.

   - bpo-43030(2): Fixed a compiler warning in *note
     Py_UNICODE_ISSPACE(): 1a51. on platforms with signed ‘wchar_t’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42979

   (2) https://bugs.python.org/issue?@action=redirect&bpo=43030


File: python.info,  Node: Python 3 10 0 alpha 4,  Next: Python 3 10 0 alpha 3,  Prev: Python 3 10 0 alpha 5,  Up: Changelog

1.23.47 Python 3.10.0 alpha 4
-----------------------------

'Data de lançamento: 2021-01-04'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<100>.
* Biblioteca: Biblioteca<102>.
* Núcleo e embutidos: Núcleo e embutidos<101>.
* Biblioteca: Biblioteca<103>.
* Núcleo e embutidos: Núcleo e embutidos<102>.
* Biblioteca: Biblioteca<104>.
* Documentação: Documentação<37>.
* Testes: Testes<41>.
* Construção: Construção<45>.
* macOS: macOS<30>.
* Ferramentas/Demos: Ferramentas/Demos<21>.
* API C: API C<41>.


File: python.info,  Node: Núcleo e embutidos<100>,  Next: Biblioteca<102>,  Up: Python 3 10 0 alpha 4

1.23.47.1 Núcleo e embutidos
............................

   - bpo-42814(1): Fix undefined behavior in
     ‘Objects/genericaliasobject.c’.

   - bpo-42806(2): Fix the column offsets for f-strings *note ast: 8.
     nodes surrounded by parentheses and for nodes that spawn multiple
     lines.  Patch by Pablo Galindo.

   - bpo-40631(3): Fix regression where a single parenthesized starred
     expression was a valid assignment target.

   - bpo-27794(4): Improve the error message for failed writes/deletes
     to property objects.  When possible, the attribute name is now
     shown.  Patch provided by Yurii Karabas.

   - bpo-42745(5): Make the type attribute lookup cache per-interpreter.
     Patch by Victor Stinner.

   - bpo-42246(6): Jumps to jumps are not eliminated when it would break
     PEP 626.

   - bpo-42246(7): Make sure that the ‘f_lasti’ and ‘f_lineno’
     attributes of a frame are set correctly when an exception is raised
     or re-raised.  Required for PEP 626.

   - bpo-32381(8): The coding cookie (ex: ‘# coding: latin1’) is now
     ignored in the command passed to the *note -c: 5e0. command line
     option.  Patch by Victor Stinner.

   - bpo-30858(9): Improve error location in expressions that contain
     assignments.  Patch by Pablo Galindo and Lysandros Nikolaou.

   - bpo-42615(10): Remove jump commands made redundant by the deletion
     of unreachable bytecode blocks

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42814

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42806

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40631

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27794

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42745

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42246

   (7) https://bugs.python.org/issue?@action=redirect&bpo=42246

   (8) https://bugs.python.org/issue?@action=redirect&bpo=32381

   (9) https://bugs.python.org/issue?@action=redirect&bpo=30858

   (10) https://bugs.python.org/issue?@action=redirect&bpo=42615


File: python.info,  Node: Biblioteca<102>,  Next: Núcleo e embutidos<101>,  Prev: Núcleo e embutidos<100>,  Up: Python 3 10 0 alpha 4

1.23.47.2 Biblioteca
....................

   - bpo-42639(1): Make the *note atexit: c. module state
     per-interpreter.  It is now safe have more than one *note atexit:
     c. module instance.  Patch by Donghee Na and Victor Stinner.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42639


File: python.info,  Node: Núcleo e embutidos<101>,  Next: Biblioteca<103>,  Prev: Biblioteca<102>,  Up: Python 3 10 0 alpha 4

1.23.47.3 Núcleo e embutidos
............................

   - bpo-32381(1): Fix encoding name when running a ‘.pyc’ file on
     Windows: *note PyRun_SimpleFileExFlags(): 1a56. now uses the
     correct encoding to decode the filename.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32381


File: python.info,  Node: Biblioteca<103>,  Next: Núcleo e embutidos<102>,  Prev: Núcleo e embutidos<101>,  Up: Python 3 10 0 alpha 4

1.23.47.4 Biblioteca
....................

   - bpo-42195(1): The ‘__args__’ of the parameterized generics for
     *note typing.Callable: 7c6. and *note collections.abc.Callable:
     7ec. are now consistent.  The ‘__args__’ for *note
     collections.abc.Callable: 7ec. are now flattened while *note
     typing.Callable: 7c6.’s have not changed.  To allow this change,
     *note types.GenericAlias: 7ed. can now be subclassed and
     ‘collections.abc.Callable’’s ‘__class_getitem__’ will now return a
     subclass of ‘types.GenericAlias’.  Tests for typing were also
     updated to not subclass things like ‘Callable[..., T]’ as that is
     not a valid base class.  Finally, both ‘Callable’s no longer
     validate their ‘argtypes’, in ‘Callable[[argtypes], resulttype]’ to
     prepare for PEP 612(2).  Patch by Ken Jin.

   - bpo-40137(3): Convert functools module to use *note
     PyType_FromModuleAndSpec(): 551.

   - bpo-40077(4): Convert *note array: 7. to use heap types, and
     establish module state for these.

   - bpo-42008(5): Fix _random.Random() seeding.

   - bpo-1635741(6): Port the ‘pyexpat’ extension module to multi-phase
     initialization ( PEP 489(7)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42195

   (2) https://peps.python.org/pep-0612/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40137

   (4) https://bugs.python.org/issue?@action=redirect&bpo=40077

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42008

   (6) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (7) https://peps.python.org/pep-0489/


File: python.info,  Node: Núcleo e embutidos<102>,  Next: Biblioteca<104>,  Prev: Biblioteca<103>,  Up: Python 3 10 0 alpha 4

1.23.47.5 Núcleo e embutidos
............................

   - bpo-40521(1): Make the Unicode dictionary of interned strings
     compatible with subinterpreters.  Patch by Victor Stinner.

   - bpo-39465(2): Make ‘_PyUnicode_FromId()’ function compatible with
     subinterpreters.  Each interpreter now has an array of identifier
     objects (interned strings decoded from UTF-8).  Patch by Victor
     Stinner.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40521

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39465


File: python.info,  Node: Biblioteca<104>,  Next: Documentação<37>,  Prev: Núcleo e embutidos<102>,  Up: Python 3 10 0 alpha 4

1.23.47.6 Biblioteca
....................

   - bpo-42257(1): Handle empty string in variable executable in
     platform.libc_ver()

   - bpo-42772(2): randrange() now raises a TypeError when step is
     specified without a stop argument.  Formerly, it silently ignored
     the step argument.

   - bpo-42759(3): Fixed equality comparison of ‘tkinter.Variable’ and
     *note tkinter.font.Font: 1a5a.  Objects which belong to different
     Tcl interpreters are now always different, even if they have the
     same name.

   - bpo-42756(4): Configure LMTP Unix-domain socket to use socket
     global default timeout when a timeout is not explicitly provided.

   - bpo-23328(5): Allow / character in username, password fields on
     _PROXY envars.

   - bpo-42740(6): *note typing.get_args(): 2ed. and *note
     typing.get_origin(): 2ec. now support PEP 604(7) union types and
     PEP 612(8) additions to ‘Callable’.

   - bpo-42655(9): *note subprocess: d6. 'extra_groups' is now correctly
     passed into setgroups() system call.

   - bpo-42727(10): ‘EnumMeta.__prepare__’ now accepts ‘**kwds’ to
     properly support ‘__init_subclass__’

   - bpo-38308(11): Add optional 'weights' to
     'statistics.harmonic_mean()'.

   - bpo-42721(12): When simple query dialogs (*note
     tkinter.simpledialog: f8.), message boxes (*note
     tkinter.messagebox: f6.) or color choose dialog (*note
     tkinter.colorchooser: f1.) are created without arguments 'master'
     and 'parent', and the default root window is not yet created, and
     ‘NoDefaultRoot()’ was not called, a new temporal hidden root window
     will be created automatically.  It will not be set as the default
     root window and will be destroyed right after closing the dialog
     window.  It will help to use these simple dialog windows in
     programs which do not need other GUI.

   - bpo-25246(13): Optimized *note collections.deque.remove(): 1a5b.

   - bpo-35728(14): Added a root parameter to *note
     tkinter.font.nametofont(): 1a5c.

   - bpo-15303(15): *note tkinter: f0. supports now widgets with boolean
     value False.

   - bpo-42681(16): Fixed range checks for color and pair numbers in
     *note curses: 2b.

   - bpo-42685(17): Improved placing of simple query windows in Tkinter
     (such as *note tkinter.simpledialog.askinteger(): 1a5d.).  They are
     now centered at the center of the parent window if it is specified
     and shown, otherwise at the center of the screen.

   - bpo-9694(18): Argparse help no longer uses the confusing phrase,
     “optional arguments”.  It uses “options” instead.

   - bpo-1635741(19): Port the ‘_thread’ extension module to the
     multiphase initialization API ( PEP 489(20)) and convert its static
     types to heap types.

   - bpo-37961(21): Fix crash in ‘tracemalloc.Traceback.__repr__()’
     (regressed in Python 3.9).

   - bpo-42630(22): *note tkinter: f0. functions and constructors which
     need a default root window raise now *note RuntimeError: 195. with
     descriptive message instead of obscure *note AttributeError: 34b.
     or *note NameError: 43f. if it is not created yet or cannot be
     created automatically.

   - bpo-42639(23): ‘atexit._run_exitfuncs()’ now logs callback
     exceptions using *note sys.unraisablehook: 1f7, rather than logging
     them directly into *note sys.stderr: 940. and raise the last
     exception.

   - bpo-42644(24): ‘logging.disable’ will now validate the types and
     value of its parameter.  It also now accepts strings representing
     the levels (as does ‘logging.setLevel’) instead of only the
     numerical values.

   - bpo-42639(25): At Python exit, if a callback registered with *note
     atexit.register(): 882. fails, its exception is now logged.
     Previously, only some exceptions were logged, and the last
     exception was always silently ignored.

   - bpo-36541(26): Fixed lib2to3.pgen2 to be able to parse PEP-570
     positional only argument syntax.

   - bpo-42382(27): In ‘importlib.metadata’: - ‘EntryPoint’ objects now
     expose a ‘.dist’ object referencing the ‘Distribution’ when
     constructed from a ‘Distribution’.  - Add support for package
     discovery under package normalization rules.  - The object returned
     by ‘metadata()’ now has a formally defined protocol called
     ‘PackageMetadata’ with declared support for the ‘.get_all()’
     method.  - Synced with importlib_metadata 3.3.

   - bpo-41877(28): A check is added against misspellings of autospect,
     auto_spec and set_spec being passed as arguments to patch,
     patch.object and create_autospec.

   - bpo-39717(29): [tarfile] update nested exception raising to use
     ‘from None’ or ‘from e’

   - bpo-41877(30): AttributeError for suspected misspellings of
     assertions on mocks are now pointing out that the cause are
     misspelled assertions and also what to do if the misspelling is
     actually an intended attribute name.  The unittest.mock document is
     also updated to reflect the current set of recognised misspellings.

   - bpo-41559(31): Implemented PEP 612(32): added ‘ParamSpec’ and
     ‘Concatenate’ to *note typing: 104.  Patch by Ken Jin.

   - bpo-42385(33): StrEnum: fix _generate_next_value_ to return a str

   - bpo-31904(34): Define THREAD_STACK_SIZE for VxWorks.

   - bpo-34750(35): [Enum] ‘_EnumDict.update()’ is now supported.

   - bpo-42517(36): Enum: private names do not become members / do not
     generate errors – they remain normal attributes

   - bpo-42678(37): ‘Enum’: call ‘__init_subclass__’ after members have
     been added

   - bpo-28964(38): *note ast.literal_eval(): c32. adds line number
     information (if available) in error message for malformed nodes.

   - bpo-42470(39): *note random.sample(): 746. no longer warns on a
     sequence which is also a set.

   - bpo-31904(40): ‘posixpath.expanduser()’ returns the input 'path'
     unchanged if user home directory is None on VxWorks.

   - bpo-42388(41): Fix subprocess.check_output(…, input=None) behavior
     when text=True to be consistent with that of the documentation and
     universal_newlines=True.

   - bpo-34463(42): Fixed discrepancy between *note traceback: fe. and
     the interpreter in formatting of SyntaxError with lineno not set
     (*note traceback: fe. was changed to match interpreter).

   - bpo-42393(43): Raise *note OverflowError: 885. instead of silent
     truncation in *note socket.ntohs(): 884. and *note socket.htons():
     883.  Silent truncation was deprecated in Python 3.7.  Patch by
     Erlend E. Aasland

   - bpo-42222(44): Harmonized *note random.randrange(): 86f. argument
     handling to match *note range(): 94a.

        * The integer test and conversion in ‘randrange()’ now uses
          *note operator.index(): 1a5e.

        * Non-integer arguments to ‘randrange()’ are deprecated.

        * The ‘ValueError’ is deprecated in favor of a ‘TypeError’.

        * It now runs a little faster than before.

     (Contributed by Raymond Hettinger and Serhiy Storchaka.)

   - bpo-42163(45): Restore compatibility for ‘uname_result’ around
     deepcopy and _replace.

   - bpo-42090(46): ‘zipfile.Path.joinpath’ now accepts arbitrary
     arguments, same as ‘pathlib.Path.joinpath’.

   - bpo-1635741(47): Port the _csv module to the multi-phase
     initialization API ( PEP 489(48)).

   - bpo-42059(49): *note typing.TypedDict: 162. types created using the
     alternative call-style syntax now correctly respect the ‘total’
     keyword argument when setting their ‘__required_keys__’ and
     ‘__optional_keys__’ class attributes.

   - bpo-41960(50): Add ‘globalns’ and ‘localns’ parameters to the *note
     inspect.signature(): 738. and *note
     inspect.Signature.from_callable(): 73a.

   - bpo-41907(51): fix ‘format()’ behavior for ‘IntFlag’

   - bpo-41891(52): Ensure asyncio.wait_for waits for task completion

   - bpo-24792(53): Fixed bug where ‘zipimporter’ sometimes reports an
     incorrect cause of import errors.

   - bpo-31904(54): Fix site and sysconfig modules for VxWorks RTOS
     which has no home directories.

   - bpo-41462(55): Add *note os.set_blocking(): e67. support for
     VxWorks RTOS.

   - bpo-40219(56): Lowered ‘tkinter.ttk.LabeledScale’ dummy widget to
     prevent hiding part of the content label.

   - bpo-37193(57): Fixed memory leak in ‘socketserver.ThreadingMixIn’
     introduced in Python 3.7.

   - bpo-39068(58): Fix initialization race condition in ‘a85encode()’
     and ‘b85encode()’ in *note base64: e.  Patch by Brandon Stansbury.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42257

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42772

   (3) https://bugs.python.org/issue?@action=redirect&bpo=42759

   (4) https://bugs.python.org/issue?@action=redirect&bpo=42756

   (5) https://bugs.python.org/issue?@action=redirect&bpo=23328

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42740

   (7) https://peps.python.org/pep-0604/

   (8) https://peps.python.org/pep-0612/

   (9) https://bugs.python.org/issue?@action=redirect&bpo=42655

   (10) https://bugs.python.org/issue?@action=redirect&bpo=42727

   (11) https://bugs.python.org/issue?@action=redirect&bpo=38308

   (12) https://bugs.python.org/issue?@action=redirect&bpo=42721

   (13) https://bugs.python.org/issue?@action=redirect&bpo=25246

   (14) https://bugs.python.org/issue?@action=redirect&bpo=35728

   (15) https://bugs.python.org/issue?@action=redirect&bpo=15303

   (16) https://bugs.python.org/issue?@action=redirect&bpo=42681

   (17) https://bugs.python.org/issue?@action=redirect&bpo=42685

   (18) https://bugs.python.org/issue?@action=redirect&bpo=9694

   (19) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (20) https://peps.python.org/pep-0489/

   (21) https://bugs.python.org/issue?@action=redirect&bpo=37961

   (22) https://bugs.python.org/issue?@action=redirect&bpo=42630

   (23) https://bugs.python.org/issue?@action=redirect&bpo=42639

   (24) https://bugs.python.org/issue?@action=redirect&bpo=42644

   (25) https://bugs.python.org/issue?@action=redirect&bpo=42639

   (26) https://bugs.python.org/issue?@action=redirect&bpo=36541

   (27) https://bugs.python.org/issue?@action=redirect&bpo=42382

   (28) https://bugs.python.org/issue?@action=redirect&bpo=41877

   (29) https://bugs.python.org/issue?@action=redirect&bpo=39717

   (30) https://bugs.python.org/issue?@action=redirect&bpo=41877

   (31) https://bugs.python.org/issue?@action=redirect&bpo=41559

   (32) https://peps.python.org/pep-0612/

   (33) https://bugs.python.org/issue?@action=redirect&bpo=42385

   (34) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (35) https://bugs.python.org/issue?@action=redirect&bpo=34750

   (36) https://bugs.python.org/issue?@action=redirect&bpo=42517

   (37) https://bugs.python.org/issue?@action=redirect&bpo=42678

   (38) https://bugs.python.org/issue?@action=redirect&bpo=28964

   (39) https://bugs.python.org/issue?@action=redirect&bpo=42470

   (40) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (41) https://bugs.python.org/issue?@action=redirect&bpo=42388

   (42) https://bugs.python.org/issue?@action=redirect&bpo=34463

   (43) https://bugs.python.org/issue?@action=redirect&bpo=42393

   (44) https://bugs.python.org/issue?@action=redirect&bpo=42222

   (45) https://bugs.python.org/issue?@action=redirect&bpo=42163

   (46) https://bugs.python.org/issue?@action=redirect&bpo=42090

   (47) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (48) https://peps.python.org/pep-0489/

   (49) https://bugs.python.org/issue?@action=redirect&bpo=42059

   (50) https://bugs.python.org/issue?@action=redirect&bpo=41960

   (51) https://bugs.python.org/issue?@action=redirect&bpo=41907

   (52) https://bugs.python.org/issue?@action=redirect&bpo=41891

   (53) https://bugs.python.org/issue?@action=redirect&bpo=24792

   (54) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (55) https://bugs.python.org/issue?@action=redirect&bpo=41462

   (56) https://bugs.python.org/issue?@action=redirect&bpo=40219

   (57) https://bugs.python.org/issue?@action=redirect&bpo=37193

   (58) https://bugs.python.org/issue?@action=redirect&bpo=39068


File: python.info,  Node: Documentação<37>,  Next: Testes<41>,  Prev: Biblioteca<104>,  Up: Python 3 10 0 alpha 4

1.23.47.7 Documentação
......................

   - bpo-17140(1): Add documentation for the *note
     multiprocessing.pool.ThreadPool: 1a60. class.

   - bpo-34398(2): Prominently feature listings from the glossary in
     documentation search results.  Patch by Ammar Askar.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17140

   (2) https://bugs.python.org/issue?@action=redirect&bpo=34398


File: python.info,  Node: Testes<41>,  Next: Construção<45>,  Prev: Documentação<37>,  Up: Python 3 10 0 alpha 4

1.23.47.8 Testes
................

   - bpo-42794(1): Update test_nntplib to use official group name of
     news.aioe.org for testing.  Patch by Donghee Na.

   - bpo-31904(2): Skip some asyncio tests on VxWorks.

   - bpo-42641(3): Enhance ‘test_select.test_select()’: it now takes 500
     milliseconds rather than 10 seconds.  Use Python rather than a
     shell to make the test more portable.

   - bpo-31904(4): Skip some tests in _test_all_chown_common() on
     VxWorks.

   - bpo-42199(5): Fix bytecode helper assertNotInBytecode.

   - bpo-41443(6): Add more attribute checking in test_posix.py

   - bpo-31904(7): Disable os.popen and impacted tests on VxWorks

   - bpo-41439(8): Port test_ssl and test_uuid to VxWorks RTOS.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42794

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (3) https://bugs.python.org/issue?@action=redirect&bpo=42641

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42199

   (6) https://bugs.python.org/issue?@action=redirect&bpo=41443

   (7) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (8) https://bugs.python.org/issue?@action=redirect&bpo=41439


File: python.info,  Node: Construção<45>,  Next: macOS<30>,  Prev: Testes<41>,  Up: Python 3 10 0 alpha 4

1.23.47.9 Construção
....................

   - bpo-42692(1): Fix __builtin_available check on older compilers.
     Patch by Joshua Root.

   - bpo-27640(2): Added ‘--disable-test-modules’ option to the
     ‘configure’ script: don’t build nor install test modules.  Patch by
     Xavier de Gaye, Thomas Petazzoni and Peixing Xin.

   - bpo-42604(3): Now all platforms use a value for the “EXT_SUFFIX”
     build variable derived from SOABI (for instance in freeBSD,
     “EXT_SUFFIX” is now “.cpython-310d.so” instead of “.so”).
     Previously only Linux, Mac and VxWorks were using a value for
     “EXT_SUFFIX” that included “SOABI”.

   - bpo-42598(4): Fix implicit function declarations in configure which
     could have resulted in incorrect configuration checks.  Patch
     contributed by Joshua Root.

   - bpo-31904(5): Enable libpython3.so for VxWorks.

   - bpo-29076(6): Add fish shell support to macOS installer.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42692

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27640

   (3) https://bugs.python.org/issue?@action=redirect&bpo=42604

   (4) https://bugs.python.org/issue?@action=redirect&bpo=42598

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (6) https://bugs.python.org/issue?@action=redirect&bpo=29076


File: python.info,  Node: macOS<30>,  Next: Ferramentas/Demos<21>,  Prev: Construção<45>,  Up: Python 3 10 0 alpha 4

1.23.47.10 macOS
................

   - bpo-42361(1): Update macOS installer build to use Tcl/Tk 8.6.11
     (rc2, expected to be final release).

   - bpo-41837(2): Update macOS installer build to use OpenSSL 1.1.1i.

   - bpo-42584(3): Update macOS installer to use SQLite 3.34.0.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42361

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41837

   (3) https://bugs.python.org/issue?@action=redirect&bpo=42584


File: python.info,  Node: Ferramentas/Demos<21>,  Next: API C<41>,  Prev: macOS<30>,  Up: Python 3 10 0 alpha 4

1.23.47.11 Ferramentas/Demos
............................

   - bpo-42726(1): Fixed Python 3 compatibility issue with
     gdb/libpython.py handling of attribute dictionaries.

   - bpo-42613(2): Fix ‘freeze.py’ tool to use the prope config and
     library directories.  Patch by Victor Stinner.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42726

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42613


File: python.info,  Node: API C<41>,  Prev: Ferramentas/Demos<21>,  Up: Python 3 10 0 alpha 4

1.23.47.12 API C
................

   - bpo-42591(1): Export the ‘Py_FrozenMain()’ function: fix a Python
     3.9.0 regression.  Python 3.9 uses ‘-fvisibility=hidden’ and the
     function was not exported explicitly and so not exported.

   - bpo-32381(2): Remove the private ‘_Py_fopen()’ function which is no
     longer needed.  Use ‘_Py_wfopen()’ or ‘_Py_fopen_obj()’ instead.
     Patch by Victor Stinner.

   - bpo-1635741(3): Port *note resource: bc. extension module to module
     state

   - bpo-42111(4): Update the ‘xxlimited’ module to be a better example
     of how to use the limited C API.

   - bpo-40052(5): Fix an alignment build warning/error in function
     ‘PyVectorcall_Function()’.  Patch by Andreas Schneider, Antoine
     Pitrou and Petr Viktorin.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42591

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32381

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (4) https://bugs.python.org/issue?@action=redirect&bpo=42111

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40052


File: python.info,  Node: Python 3 10 0 alpha 3,  Next: Python 3 10 0 alpha 2,  Prev: Python 3 10 0 alpha 4,  Up: Changelog

1.23.48 Python 3.10.0 alpha 3
-----------------------------

'Data de lançamento: 2020-12-07'

* Menu:

* Segurança: Segurança<30>.
* Núcleo e embutidos: Núcleo e embutidos<103>.
* Biblioteca: Biblioteca<105>.
* Núcleo e embutidos: Núcleo e embutidos<104>.
* Biblioteca: Biblioteca<106>.
* Núcleo e embutidos: Núcleo e embutidos<105>.
* Biblioteca: Biblioteca<107>.
* Núcleo e embutidos: Núcleo e embutidos<106>.
* Biblioteca: Biblioteca<108>.
* Documentação: Documentação<38>.
* Testes: Testes<42>.
* Construção: Construção<46>.
* Windows: Windows<39>.
* macOS: macOS<31>.
* IDLE: IDLE<28>.
* Ferramentas/Demos: Ferramentas/Demos<22>.
* API C: API C<42>.


File: python.info,  Node: Segurança<30>,  Next: Núcleo e embutidos<103>,  Up: Python 3 10 0 alpha 3

1.23.48.1 Segurança
...................

   - bpo-40791(1): Add ‘volatile’ to the accumulator variable in
     ‘hmac.compare_digest’, making constant-time-defeating optimizations
     less likely.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40791


File: python.info,  Node: Núcleo e embutidos<103>,  Next: Biblioteca<105>,  Prev: Segurança<30>,  Up: Python 3 10 0 alpha 3

1.23.48.2 Núcleo e embutidos
............................

   - bpo-42576(1): ‘types.GenericAlias’ will now raise a ‘TypeError’
     when attempting to initialize with a keyword argument.  Previously,
     this would cause the interpreter to crash if the interpreter was
     compiled with debug symbols.  This does not affect interpreters
     compiled for release.  Patch by Ken Jin.

   - bpo-42536(2): Several built-in and standard library types now
     ensure that their internal result tuples are always tracked by the
     *note garbage collector: 1a69.:

        - *note collections.OrderedDict.items(): 5db.

        - *note dict.items(): 7d0.

        - *note enumerate(): 14c9.

        - *note functools.reduce(): 131f.

        - *note itertools.combinations(): 1356.

        - *note itertools.combinations_with_replacement(): 12c3.

        - *note itertools.permutations(): 1a6a.

        - *note itertools.product(): 1357.

        - *note itertools.zip_longest(): 12e0.

        - *note zip(): 7d1.

     Previously, they could have become untracked by a prior garbage
     collection.  Patch by Brandt Bucher.

   - bpo-42500(3): Improve handling of exceptions near recursion limit.
     Converts a number of Fatal Errors in RecursionErrors.

   - bpo-42246(4): PEP 626: After a return, the f_lineno attribute of a
     frame is always the last line executed.

   - bpo-42435(5): Speed up comparison of bytes objects with non-bytes
     objects when option *note -b: 5e3. is specified.  Speed up
     comparison of bytarray objects with non-buffer object.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42576

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42536

   (3) https://bugs.python.org/issue?@action=redirect&bpo=42500

   (4) https://bugs.python.org/issue?@action=redirect&bpo=42246

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42435


File: python.info,  Node: Biblioteca<105>,  Next: Núcleo e embutidos<104>,  Prev: Núcleo e embutidos<103>,  Up: Python 3 10 0 alpha 3

1.23.48.3 Biblioteca
....................

   - bpo-1635741(1): Port the ‘_warnings’ extension module to the
     multi-phase initialization API ( PEP 489(2)).  Patch by Victor
     Stinner.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (2) https://peps.python.org/pep-0489/


File: python.info,  Node: Núcleo e embutidos<104>,  Next: Biblioteca<106>,  Prev: Biblioteca<105>,  Up: Python 3 10 0 alpha 3

1.23.48.4 Núcleo e embutidos
............................

   - bpo-41686(1): On Windows, the ‘SIGINT’ event,
     ‘_PyOS_SigintEvent()’, is now created even if Python is configured
     to not install signal handlers (if *note
     PyConfig.install_signal_handlers: 8c3. equals to 0, or
     ‘Py_InitializeEx(0)’).

   - bpo-42381(2): Allow assignment expressions in set literals and set
     comprehensions as per PEP 572.  Patch by Pablo Galindo.

   - bpo-42202(3): Change function parameters annotations internal
     representation to tuple of strings.  Patch provided by Yurii
     Karabas.

   - bpo-42374(4): Fix a regression introduced by the new parser, where
     an unparenthesized walrus operator was not allowed within generator
     expressions.

   - bpo-42316(5): Allow an unparenthesized walrus in subscript indexes.

   - bpo-42349(6): Make sure that the compiler front-end produces a
     well-formed control flow graph.  Be more aggressive in the compiler
     back-end, as it is now safe to do so.

   - bpo-42296(7): On Windows, fix a regression in signal handling which
     prevented to interrupt a program using CTRL+C. The signal handler
     can be run in a thread different than the Python thread, in which
     case the test deciding if the thread can handle signals is wrong.

   - bpo-42332(8): *note types.GenericAlias: 7ed. objects can now be the
     targets of weakrefs.

   - bpo-42282(9): Optimise constant subexpressions that appear as part
     of named expressions (previously the AST optimiser did not descend
     into named expressions).  Patch by Nick Coghlan.

   - bpo-42266(10): Fixed a bug with the LOAD_ATTR opcode cache that was
     not respecting monkey-patching a class-level attribute to make it a
     descriptor.  Patch by Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41686

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42381

   (3) https://bugs.python.org/issue?@action=redirect&bpo=42202

   (4) https://bugs.python.org/issue?@action=redirect&bpo=42374

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42316

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42349

   (7) https://bugs.python.org/issue?@action=redirect&bpo=42296

   (8) https://bugs.python.org/issue?@action=redirect&bpo=42332

   (9) https://bugs.python.org/issue?@action=redirect&bpo=42282

   (10) https://bugs.python.org/issue?@action=redirect&bpo=42266


File: python.info,  Node: Biblioteca<106>,  Next: Núcleo e embutidos<105>,  Prev: Núcleo e embutidos<104>,  Up: Python 3 10 0 alpha 3

1.23.48.5 Biblioteca
....................

   - bpo-40077(1): Convert *note queue: b6. to use heap types.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40077


File: python.info,  Node: Núcleo e embutidos<105>,  Next: Biblioteca<107>,  Prev: Biblioteca<106>,  Up: Python 3 10 0 alpha 3

1.23.48.6 Núcleo e embutidos
............................

   - bpo-42246(1): Improved accuracy of line tracing events and f_lineno
     attribute of Frame objects.  See PEP 626 for details.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42246


File: python.info,  Node: Biblioteca<107>,  Next: Núcleo e embutidos<106>,  Prev: Núcleo e embutidos<105>,  Up: Python 3 10 0 alpha 3

1.23.48.7 Biblioteca
....................

   - bpo-40077(1): Convert *note mmap: 90. to use heap types.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40077


File: python.info,  Node: Núcleo e embutidos<106>,  Next: Biblioteca<108>,  Prev: Biblioteca<107>,  Up: Python 3 10 0 alpha 3

1.23.48.8 Núcleo e embutidos
............................

   - bpo-42233(1): Allow ‘GenericAlias’ objects to use *note union type
     expressions: 7c3.  This allows expressions like ‘list[int] |
     dict[float, str]’ where previously a ‘TypeError’ would have been
     thrown.  This also fixes union type expressions not de-duplicating
     ‘GenericAlias’ objects.  (Contributed by Ken Jin in bpo-42233(2).)

   - bpo-26131(3): The import system triggers a ‘ImportWarning’ when it
     falls back to using ‘load_module()’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42233

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42233

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26131


File: python.info,  Node: Biblioteca<108>,  Next: Documentação<38>,  Prev: Núcleo e embutidos<106>,  Up: Python 3 10 0 alpha 3

1.23.48.9 Biblioteca
....................

   - bpo-5054(1): CGIHTTPRequestHandler.run_cgi() HTTP_ACCEPT improperly
     parsed.  Replace the special purpose getallmatchingheaders with
     generic get_all method and add relevant tests.

     Original Patch by Martin Panter.  Modified by Senthil Kumaran.

   - bpo-42562(2): Fix issue when dis failed to parse function that has
     no line numbers.  Patch provided by Yurii Karabas.

   - bpo-17735(3): ‘inspect.findsource()’ now raises *note OSError: 417.
     instead of *note IndexError: 157e. when ‘co_lineno’ of a code
     object is greater than the file length.  This can happen, for
     example, when a file is edited after it was imported.  PR by Irit
     Katriel.

   - bpo-42116(4): Fix handling of trailing comments by *note
     inspect.getsource(): 15f8.

   - bpo-42532(5): Remove unexpected call of ‘__bool__’ when passing a
     ‘spec_arg’ argument to a Mock.

   - bpo-38200(6): Added itertools.pairwise()

   - bpo-41818(7): Fix test_master_read() so that it succeeds on all
     platforms that either raise OSError or return b”” upon reading from
     master.

   - bpo-42487(8): ChainMap.__iter__ no longer calls __getitem__ on
     underlying maps

   - bpo-42482(9): *note TracebackException: 25c. no longer holds a
     reference to the exception’s traceback object.  Consequently,
     instances of TracebackException for equivalent but non-equal
     exceptions now compare as equal.

   - bpo-41818(10): Make test_openpty() avoid unexpected success due to
     number of rows and/or number of columns being == 0.

   - bpo-42392(11): Remove loop parameter from ‘asyncio.subprocess’ and
     ‘asyncio.tasks’ functions.  Patch provided by Yurii Karabas.

   - bpo-42392(12): Remove loop parameter from ‘asyncio.open_connection’
     and ‘asyncio.start_server’ functions.  Patch provided by Yurii
     Karabas.

   - bpo-28468(13): Add *note platform.freedesktop_os_release(): 829.
     function to parse freedesktop.org ‘os-release’ files.

   - bpo-42299(14): Removed the ‘formatter’ module, which was deprecated
     in Python 3.4.  It is somewhat obsolete, little used, and not
     tested.  It was originally scheduled to be removed in Python 3.6,
     but such removals were delayed until after Python 2.7 EOL. Existing
     users should copy whatever classes they use into their code.  Patch
     by Donghee Na and and Terry J. Reedy.

   - bpo-26131(15): Deprecate zipimport.zipimporter.load_module() in
     favour of exec_module().

   - bpo-41818(16): Updated tests for the pty library.  test_basic() has
     been changed to test_openpty(); this additionally checks if slave
     termios and slave winsize are being set properly by pty.openpty().
     In order to add support for FreeBSD, NetBSD, OpenBSD, and Darwin,
     this also adds test_master_read(), which demonstrates that
     pty.spawn() should not depend on an OSError to exit from its copy
     loop.

   - bpo-42392(17): Remove loop parameter from ‘__init__’ in all
     ‘asyncio.locks’ and ‘asyncio.Queue’ classes.  Patch provided by
     Yurii Karabas.

   - bpo-15450(18): Make *note filecmp.dircmp: f73. respect subclassing.
     Now the *note filecmp.dircmp.subdirs: 1a72. behaves as expected
     when subclassing dircmp.

   - bpo-42413(19): The exception *note socket.timeout: 837. is now an
     alias of *note TimeoutError: 838.

   - bpo-31904(20): Support signal module on VxWorks.

   - bpo-42406(21): We fixed an issue in ‘pickle.whichmodule’ in which
     importing ‘multiprocessing’ could change the how pickle identifies
     which module an object belongs to, potentially breaking the
     unpickling of those objects.

   - bpo-42403(22): Simplify the *note importlib: 77. external bootstrap
     code: ‘importlib._bootstrap_external’ now uses regular imports to
     import builtin modules.  When it is imported, the builtin *note
     __import__(): 8da. function is already fully working and so can be
     used to import builtin modules like *note sys: d9.  Patch by Victor
     Stinner.

   - bpo-1635741(23): Convert _sre module types to heap types (PEP 384).
     Patch by Erlend E. Aasland.

   - bpo-42375(24): subprocess module update for DragonFlyBSD support.

   - bpo-41713(25): Port the ‘_signal’ extension module to the
     multi-phase initialization API ( PEP 489(26)).  Patch by Victor
     Stinner and Mohamed Koubaa.

   - bpo-37205(27): *note time.time(): 254, *note time.perf_counter():
     a92. and *note time.monotonic(): 253. functions can no longer fail
     with a Python fatal error, instead raise a regular Python exception
     on failure.

   - bpo-42328(28): Fixed *note tkinter.ttk.Style.map(): 1a73.  The
     function accepts now the representation of the default state as
     empty sequence (as returned by ‘Style.map()’).  The structure of
     the result is now the same on all platform and does not depend on
     the value of ‘wantobjects’.

   - bpo-42345(29): Fix various issues with ‘typing.Literal’ parameter
     handling (flatten, deduplicate, use type to cache key).  Patch
     provided by Yurii Karabas.

   - bpo-37205(30): *note time.perf_counter(): a92. on Windows and *note
     time.monotonic(): 253. on macOS are now system-wide.  Previously,
     they used an offset computed at startup to reduce the precision
     loss caused by the float type.  Use *note time.perf_counter_ns():
     af7. and *note time.monotonic_ns(): af6. added in Python 3.7 to
     avoid this precision loss.

   - bpo-42318(31): Fixed support of non-BMP characters in *note
     tkinter: f0. on macOS.

   - bpo-42350(32): Fix the *note threading.Thread: 953. class at fork:
     do nothing if the thread is already stopped (ex: fork called at
     Python exit).  Previously, an error was logged in the child
     process.

   - bpo-42333(33): Port _ssl extension module to heap types.

   - bpo-42014(34): The ‘onerror’ callback from ‘shutil.rmtree’ now
     receives correct function when ‘os.open’ fails.

   - bpo-42237(35): Fix ‘os.sendfile()’ on illumos.

   - bpo-42308(36): Add *note threading.__excepthook__: 84d. to allow
     retrieving the original value of *note threading.excepthook(): 84e.
     in case it is set to a broken or a different value.  Patch by Mario
     Corchero.

   - bpo-42131(37): Implement PEP 451/spec methods on
     zipimport.zipimporter: find_spec(), create_module(), and
     exec_module().

     This also allows for the documented deprecation of find_loader(),
     find_module(), and load_module().

   - bpo-41877(38): Mock objects which are not unsafe will now raise an
     AttributeError if an attribute with the prefix asert, aseert, or
     assrt is accessed, in addition to this already happening for the
     prefixes assert or assret.

   - bpo-42264(39): ‘sqlite3.OptimizedUnicode’ has been undocumented and
     obsolete since Python 3.3, when it was made an alias to *note str:
     44c.  It is now deprecated, scheduled for removal in Python 3.12.

   - bpo-42251(40): Added *note threading.gettrace(): 849. and *note
     threading.getprofile(): 84a. to retrieve the functions set by *note
     threading.settrace(): 84b. and *note threading.setprofile(): 84c.
     respectively.  Patch by Mario Corchero.

   - bpo-42249(41): Fixed writing binary Plist files larger than 4 GiB.

   - bpo-42236(42): On Unix, the *note os.device_encoding(): 19c0.
     function now returns ‘'UTF-8'’ rather than the device encoding if
     the *note Python UTF-8 Mode: 656. is enabled.

   - bpo-41754(43): webbrowser: Ignore 'NotADirectoryError' when calling
     ‘xdg-settings’.

   - bpo-42183(44): Fix a stack overflow error for asyncio Task or
     Future repr().

     The overflow occurs under some circumstances when a Task or Future
     recursively returns itself.

   - bpo-42140(45): Improve asyncio.wait function to create the futures
     set just one time.

   - bpo-42133(46): Update various modules in the stdlib to fall back on
     ‘__spec__.loader’ when ‘__loader__’ isn’t defined on a module.

   - bpo-26131(47): The ‘load_module()’ methods found in ‘importlib’ now
     trigger a ‘DeprecationWarning’.

   - bpo-39825(48): Windows: Change
     ‘sysconfig.get_config_var('EXT_SUFFIX')’ to the expected full
     ‘platform_tag.extension’ format.  Previously it was hard-coded to
     ‘.pyd’, now it is compatible with ‘distutils.sysconfig’ and will
     result in something like ‘.cp38-win_amd64.pyd’.  This brings
     windows into conformance with the other platforms.

   - bpo-26389(49): The *note traceback.format_exception(): 850, *note
     traceback.format_exception_only(): 851, and *note
     traceback.print_exception(): 852. functions can now take an
     exception object as a positional-only argument.

   - bpo-41889(50): Enum: fix regression involving inheriting a multiply
     inherited enum

   - bpo-41861(51): Convert *note sqlite3: cf. to use heap types (PEP
     384).  Patch by Erlend E. Aasland.

   - bpo-40624(52): Added support for the XPath ‘!=’ operator in
     xml.etree

   - bpo-28850(53): Fix *note pprint.PrettyPrinter.format(): 1a74.
     overrides being ignored for contents of small containers.  The
     ‘pprint._safe_repr()’ function was removed.

   - bpo-41625(54): Expose the ‘splice()’ as *note os.splice(): 81c. in
     the *note os: a1. module.  Patch by Pablo Galindo

   - bpo-34215(55): Clarify the error message for *note
     asyncio.IncompleteReadError: 1a75. when ‘expected’ is ‘None’.

   - bpo-41543(56): Add async context manager support for
     contextlib.nullcontext.

   - bpo-21041(57): *note pathlib.PurePath.parents: 823. now supports
     negative indexing.  Patch contributed by Yaroslav Pankovych.

   - bpo-41332(58): Added missing connect_accepted_socket() method to
     ‘asyncio.AbstractEventLoop’.

   - bpo-12800(59): Extracting a symlink from a tarball should succeed
     and overwrite the symlink if it already exists.  The fix is to
     remove the existing file or symlink before extraction.  Based on
     patch by Chris AtLee, Jeffrey Kintscher, and Senthil Kumaran.

   - bpo-40968(60): *note urllib.request: 10b. and *note http.client:
     6f. now send ‘http/1.1’ ALPN extension during TLS handshake when no
     custom context is supplied.

   - bpo-41001(61): Add *note os.eventfd(): 81b. to provide a low level
     interface for Linux’s event notification file descriptor.

   - bpo-40816(62): Add AsyncContextDecorator to contextlib to support
     async context manager as a decorator.

   - bpo-40550(63): Fix time-of-check/time-of-action issue in
     subprocess.Popen.send_signal.

   - bpo-39411(64): Add an ‘is_async’ identifier to *note pyclbr: b4.’s
     ‘Function’ objects.  Patch by Batuhan Taskaya

   - bpo-35498(65): Add slice support to *note pathlib.PurePath.parents:
     823.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5054

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42562

   (3) https://bugs.python.org/issue?@action=redirect&bpo=17735

   (4) https://bugs.python.org/issue?@action=redirect&bpo=42116

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42532

   (6) https://bugs.python.org/issue?@action=redirect&bpo=38200

   (7) https://bugs.python.org/issue?@action=redirect&bpo=41818

   (8) https://bugs.python.org/issue?@action=redirect&bpo=42487

   (9) https://bugs.python.org/issue?@action=redirect&bpo=42482

   (10) https://bugs.python.org/issue?@action=redirect&bpo=41818

   (11) https://bugs.python.org/issue?@action=redirect&bpo=42392

   (12) https://bugs.python.org/issue?@action=redirect&bpo=42392

   (13) https://bugs.python.org/issue?@action=redirect&bpo=28468

   (14) https://bugs.python.org/issue?@action=redirect&bpo=42299

   (15) https://bugs.python.org/issue?@action=redirect&bpo=26131

   (16) https://bugs.python.org/issue?@action=redirect&bpo=41818

   (17) https://bugs.python.org/issue?@action=redirect&bpo=42392

   (18) https://bugs.python.org/issue?@action=redirect&bpo=15450

   (19) https://bugs.python.org/issue?@action=redirect&bpo=42413

   (20) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (21) https://bugs.python.org/issue?@action=redirect&bpo=42406

   (22) https://bugs.python.org/issue?@action=redirect&bpo=42403

   (23) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (24) https://bugs.python.org/issue?@action=redirect&bpo=42375

   (25) https://bugs.python.org/issue?@action=redirect&bpo=41713

   (26) https://peps.python.org/pep-0489/

   (27) https://bugs.python.org/issue?@action=redirect&bpo=37205

   (28) https://bugs.python.org/issue?@action=redirect&bpo=42328

   (29) https://bugs.python.org/issue?@action=redirect&bpo=42345

   (30) https://bugs.python.org/issue?@action=redirect&bpo=37205

   (31) https://bugs.python.org/issue?@action=redirect&bpo=42318

   (32) https://bugs.python.org/issue?@action=redirect&bpo=42350

   (33) https://bugs.python.org/issue?@action=redirect&bpo=42333

   (34) https://bugs.python.org/issue?@action=redirect&bpo=42014

   (35) https://bugs.python.org/issue?@action=redirect&bpo=42237

   (36) https://bugs.python.org/issue?@action=redirect&bpo=42308

   (37) https://bugs.python.org/issue?@action=redirect&bpo=42131

   (38) https://bugs.python.org/issue?@action=redirect&bpo=41877

   (39) https://bugs.python.org/issue?@action=redirect&bpo=42264

   (40) https://bugs.python.org/issue?@action=redirect&bpo=42251

   (41) https://bugs.python.org/issue?@action=redirect&bpo=42249

   (42) https://bugs.python.org/issue?@action=redirect&bpo=42236

   (43) https://bugs.python.org/issue?@action=redirect&bpo=41754

   (44) https://bugs.python.org/issue?@action=redirect&bpo=42183

   (45) https://bugs.python.org/issue?@action=redirect&bpo=42140

   (46) https://bugs.python.org/issue?@action=redirect&bpo=42133

   (47) https://bugs.python.org/issue?@action=redirect&bpo=26131

   (48) https://bugs.python.org/issue?@action=redirect&bpo=39825

   (49) https://bugs.python.org/issue?@action=redirect&bpo=26389

   (50) https://bugs.python.org/issue?@action=redirect&bpo=41889

   (51) https://bugs.python.org/issue?@action=redirect&bpo=41861

   (52) https://bugs.python.org/issue?@action=redirect&bpo=40624

   (53) https://bugs.python.org/issue?@action=redirect&bpo=28850

   (54) https://bugs.python.org/issue?@action=redirect&bpo=41625

   (55) https://bugs.python.org/issue?@action=redirect&bpo=34215

   (56) https://bugs.python.org/issue?@action=redirect&bpo=41543

   (57) https://bugs.python.org/issue?@action=redirect&bpo=21041

   (58) https://bugs.python.org/issue?@action=redirect&bpo=41332

   (59) https://bugs.python.org/issue?@action=redirect&bpo=12800

   (60) https://bugs.python.org/issue?@action=redirect&bpo=40968

   (61) https://bugs.python.org/issue?@action=redirect&bpo=41001

   (62) https://bugs.python.org/issue?@action=redirect&bpo=40816

   (63) https://bugs.python.org/issue?@action=redirect&bpo=40550

   (64) https://bugs.python.org/issue?@action=redirect&bpo=39411

   (65) https://bugs.python.org/issue?@action=redirect&bpo=35498


File: python.info,  Node: Documentação<38>,  Next: Testes<42>,  Prev: Biblioteca<108>,  Up: Python 3 10 0 alpha 3

1.23.48.10 Documentação
.......................

   - bpo-42238(1): Tentative to deprecate ‘make suspicious’ by first
     removing it from the CI and documentation builds, but keeping it
     around for manual uses.

   - bpo-42153(2): Fix the URL for the IMAP protocol documents.

   - bpo-41028(3): Language and version switchers, previously maintained
     in every cpython branches, are now handled by docsbuild-script.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42238

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42153

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41028


File: python.info,  Node: Testes<42>,  Next: Construção<46>,  Prev: Documentação<38>,  Up: Python 3 10 0 alpha 3

1.23.48.11 Testes
.................

   - bpo-41473(1): Re-enable test_gdb on gdb 9.2 and newer:
     ‘https://bugzilla.redhat.com/show_bug.cgi?id=1866884’ bug is fixed
     in gdb 10.1.

   - bpo-42553(2): Fix ‘test_asyncio.test_call_later()’ race condition:
     don’t measure asyncio performance in the ‘call_later()’ unit test.
     The test failed randomly on the CI.

   - bpo-31904(3): Fix test_netrc on VxWorks: create temporary
     directories using temp_cwd().

   - bpo-31904(4): skip test_getaddrinfo_ipv6_scopeid_symbolic and
     test_getnameinfo_ipv6_scopeid_symbolic on VxWorks

   - bpo-31904(5): skip test_test of test_mailcap on VxWorks

   - bpo-31904(6): add shell requirement for test_pipes

   - bpo-31904(7): skip some tests related to fifo on VxWorks

   - bpo-31904(8): Fix test_doctest.py failures for VxWorks.

   - bpo-40754(9): Include ‘_testinternalcapi’ module in Windows
     installer for test suite

   - bpo-41561(10): test_ssl: skip test_min_max_version_mismatch when
     TLS 1.0 is not available

   - bpo-31904(11): Fix os module failures for VxWorks RTOS.

   - bpo-31904(12): Fix fifo test cases for VxWorks RTOS.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41473

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42553

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (6) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (7) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (8) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (9) https://bugs.python.org/issue?@action=redirect&bpo=40754

   (10) https://bugs.python.org/issue?@action=redirect&bpo=41561

   (11) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (12) https://bugs.python.org/issue?@action=redirect&bpo=31904


File: python.info,  Node: Construção<46>,  Next: Windows<39>,  Prev: Testes<42>,  Up: Python 3 10 0 alpha 3

1.23.48.12 Construção
.....................

   - bpo-31904(1): remove libnet dependency from detect_socket() for
     VxWorks

   - bpo-42398(2): Fix a race condition in “make regen-all” when make
     -jN option is used to run jobs in parallel.  The clinic.py script
     now only use atomic write to write files.  Moveover, generated
     files are now left unchanged if the content does not change, to not
     change the file modification time.

   - bpo-41617(3): Fix building ‘pycore_bitutils.h’ internal header on
     old clang version without ‘__builtin_bswap16()’ (ex: Xcode 4.6.3 on
     Mac OS X 10.7).  Patch by Joshua Root and Victor Stinner.

   - bpo-38823(4): It is no longer possible to build the ‘_ctypes’
     extension module without ‘wchar_t’ type: remove ‘CTYPES_UNICODE’
     macro.  Anyway, the ‘wchar_t’ type is required to build Python.
     Patch by Victor Stinner.

   - bpo-42087(5): Support was removed for AIX 5.3 and below.  See
     bpo-40680(6).

   - bpo-40998(7): Addressed three compiler warnings found by undefined
     behavior sanitizer (ubsan).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42398

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41617

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38823

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42087

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40680

   (7) https://bugs.python.org/issue?@action=redirect&bpo=40998


File: python.info,  Node: Windows<39>,  Next: macOS<31>,  Prev: Construção<46>,  Up: Python 3 10 0 alpha 3

1.23.48.13 Windows
..................

   - bpo-42120(1): Remove macro definition of ‘copysign’ (to
     ‘_copysign’) in headers.

   - bpo-38506(2): The Windows launcher now properly handles Python 3.10
     when listing installed Python versions.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42120

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38506


File: python.info,  Node: macOS<31>,  Next: IDLE<28>,  Prev: Windows<39>,  Up: Python 3 10 0 alpha 3

1.23.48.14 macOS
................

   - bpo-42504(1): Fix build on macOS Big Sur when
     MACOSX_DEPLOYMENT_TARGET=11

   - bpo-41116(2): Ensure distutils.unixxcompiler.find_library_file can
     find system provided libraries on macOS 11.

   - bpo-41100(3): Add support for macOS 11 and Apple Silicon systems.

     It is now possible to build “Universal 2” binaries using
     “–enable-universalsdk –with-universal-archs=universal2”.

     Binaries build on later macOS versions can be deployed back to
     older versions (tested up to macOS 10.9), when using the correct
     deployment target.  This is tested using Xcode 11 and later.

   - bpo-42232(4): Added Darwin specific madvise options to mmap module.

   - bpo-38443(5): The ‘--enable-universalsdk’ and
     ‘--with-universal-archs’ options for the configure script now check
     that the specified architectures can be used.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42504

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41116

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41100

   (4) https://bugs.python.org/issue?@action=redirect&bpo=42232

   (5) https://bugs.python.org/issue?@action=redirect&bpo=38443


File: python.info,  Node: IDLE<28>,  Next: Ferramentas/Demos<22>,  Prev: macOS<31>,  Up: Python 3 10 0 alpha 3

1.23.48.15 IDLE
...............

   - bpo-42508(1): Keep IDLE running on macOS. Remove obsolete
     workaround that prevented running files with shortcuts when using
     new universal2 installers built on macOS 11.

   - bpo-42426(2): Fix reporting offset of the RE error in searchengine.

   - bpo-42415(3): Get docstrings for IDLE calltips more often by using
     inspect.getdoc.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42508

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42426

   (3) https://bugs.python.org/issue?@action=redirect&bpo=42415


File: python.info,  Node: Ferramentas/Demos<22>,  Next: API C<42>,  Prev: IDLE<28>,  Up: Python 3 10 0 alpha 3

1.23.48.16 Ferramentas/Demos
............................

   - bpo-42212(1): The smelly.py script now also checks the Python
     dynamic library and extension modules, not only the Python static
     library.  Make also the script more verbose: explain what it does.

   - bpo-36310(2): Allow ‘Tools/i18n/pygettext.py’ to detect calls to
     ‘gettext’ in f-strings.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42212

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36310


File: python.info,  Node: API C<42>,  Prev: Ferramentas/Demos<22>,  Up: Python 3 10 0 alpha 3

1.23.48.17 API C
................

   - bpo-42423(1): The *note PyType_FromSpecWithBases(): 57e. and *note
     PyType_FromModuleAndSpec(): 551. functions now accept a single
     class as the 'bases' argument.

   - bpo-1635741(2): Port *note select: c1. extension module to
     multiphase initialization ( PEP 489(3)).

   - bpo-1635741(4): Port _posixsubprocess extension module to
     multiphase initialization ( PEP 489(5)).

   - bpo-1635741(6): Port _posixshmem extension module to multiphase
     initialization ( PEP 489(7))

   - bpo-1635741(8): Port _struct extension module to multiphase
     initialization ( PEP 489(9))

   - bpo-1635741(10): Port ‘spwd’ extension module to multiphase
     initialization ( PEP 489(11))

   - bpo-1635741(12): Port *note gc: 60. extension module to multiphase
     initialization ( PEP 489(13))

   - bpo-1635741(14): Port _queue extension module to multiphase
     initialization ( PEP 489(15))

   - bpo-39573(16): Convert *note Py_TYPE(): 780. and *note Py_SIZE():
     782. back to macros to allow using them as an l-value.  Many third
     party C extension modules rely on the ability of using Py_TYPE()
     and Py_SIZE() to set an object type and size: ‘Py_TYPE(obj) =
     type;’ and ‘Py_SIZE(obj) = size;’.

   - bpo-1635741(17): Port *note symtable: d8. extension module to
     multiphase initialization ( PEP 489(18))

   - bpo-1635741(19): Port *note grp: 66. and *note pwd: b2. extension
     modules to multiphase initialization ( PEP 489(20))

   - bpo-1635741(21): Port _random extension module to multiphase
     initialization ( PEP 489(22))

   - bpo-1635741(23): Port _hashlib extension module to multiphase
     initialization ( PEP 489(24))

   - bpo-41713(25): Removed the undocumented ‘PyOS_InitInterrupts()’
     function.  Initializing Python already implicitly installs signal
     handlers: see *note PyConfig.install_signal_handlers: 8c3.  Patch
     by Victor Stinner.

   - bpo-40170(26): The ‘Py_TRASHCAN_BEGIN’ macro no longer accesses
     PyTypeObject attributes, but now can get the condition by calling
     the new private ‘_PyTrash_cond()’ function which hides
     implementation details.

   - bpo-42260(27): *note Py_GetPath(): 3b3, *note Py_GetPrefix(): 3b5,
     *note Py_GetExecPrefix(): 3b1, *note Py_GetProgramFullPath(): 3b7,
     *note Py_GetPythonHome(): 3ba. and *note Py_GetProgramName(): 3b9.
     functions now return ‘NULL’ if called before *note Py_Initialize():
     8b1. (before Python is initialized).  Use the new *note Python
     Initialization Configuration API: 3a7. to get the *note Python Path
     Configuration.: 8b2.  Patch by Victor Stinner.

   - bpo-42260(28): The *note PyConfig_Read(): 790. function now only
     parses *note PyConfig.argv: 3c3. arguments once: *note
     PyConfig.parse_argv: 1a7e. is set to ‘2’ after arguments are
     parsed.  Since Python arguments are strippped from *note
     PyConfig.argv: 3c3, parsing arguments twice would parse the
     application options as Python options.

   - bpo-42262(29): Added *note Py_NewRef(): 89e. and *note
     Py_XNewRef(): 89f. functions to increment the reference count of an
     object and return the object.  Patch by Victor Stinner.

   - bpo-42260(30): When *note Py_Initialize(): 8b1. is called twice,
     the second call now updates more *note sys: d9. attributes for the
     configuration, rather than only *note sys.argv: 12a6.  Patch by
     Victor Stinner.

   - bpo-41832(31): The *note PyType_FromModuleAndSpec(): 551. function
     now accepts NULL ‘tp_doc’ slot.

   - bpo-1635741(32): Added *note PyModule_AddObjectRef(): 365.
     function: similar to *note PyModule_AddObject(): 366. but don’t
     steal a reference to the value on success.  Patch by Victor
     Stinner.

   - bpo-42171(33): The *note METH_FASTCALL: 1713. calling convention is
     added to the limited API. The functions *note PyModule_AddType():
     97c, *note PyType_FromModuleAndSpec(): 551, *note
     PyType_GetModule(): 975. and *note PyType_GetModuleState(): 976.
     are added to the limited API on Windows.

   - bpo-42085(34): Add dedicated entry to PyAsyncMethods for sending
     values

   - bpo-41073(35): *note PyType_GetSlot(): 8a0. can now accept static
     types.

   - bpo-30459(36): *note PyList_SET_ITEM(): 38e, *note
     PyTuple_SET_ITEM(): 38d. and *note PyCell_SET(): 8b3. macros can no
     longer be used as l-value or r-value.  For example, ‘x =
     PyList_SET_ITEM(a, b, c)’ and ‘PyList_SET_ITEM(a, b, c) = x’ now
     fail with a compiler error.  It prevents bugs like ‘if
     (PyList_SET_ITEM (a, b, c) < 0) ...’ test.  Patch by Zackery Spytz
     and Victor Stinner.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42423

   (2) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (3) https://peps.python.org/pep-0489/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (5) https://peps.python.org/pep-0489/

   (6) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (7) https://peps.python.org/pep-0489/

   (8) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (9) https://peps.python.org/pep-0489/

   (10) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (11) https://peps.python.org/pep-0489/

   (12) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (13) https://peps.python.org/pep-0489/

   (14) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (15) https://peps.python.org/pep-0489/

   (16) https://bugs.python.org/issue?@action=redirect&bpo=39573

   (17) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (18) https://peps.python.org/pep-0489/

   (19) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (20) https://peps.python.org/pep-0489/

   (21) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (22) https://peps.python.org/pep-0489/

   (23) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (24) https://peps.python.org/pep-0489/

   (25) https://bugs.python.org/issue?@action=redirect&bpo=41713

   (26) https://bugs.python.org/issue?@action=redirect&bpo=40170

   (27) https://bugs.python.org/issue?@action=redirect&bpo=42260

   (28) https://bugs.python.org/issue?@action=redirect&bpo=42260

   (29) https://bugs.python.org/issue?@action=redirect&bpo=42262

   (30) https://bugs.python.org/issue?@action=redirect&bpo=42260

   (31) https://bugs.python.org/issue?@action=redirect&bpo=41832

   (32) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (33) https://bugs.python.org/issue?@action=redirect&bpo=42171

   (34) https://bugs.python.org/issue?@action=redirect&bpo=42085

   (35) https://bugs.python.org/issue?@action=redirect&bpo=41073

   (36) https://bugs.python.org/issue?@action=redirect&bpo=30459


File: python.info,  Node: Python 3 10 0 alpha 2,  Next: Python 3 10 0 alpha 1,  Prev: Python 3 10 0 alpha 3,  Up: Changelog

1.23.49 Python 3.10.0 alpha 2
-----------------------------

'Data de lançamento: 2020-11-03'

* Menu:

* Segurança: Segurança<31>.
* Núcleo e embutidos: Núcleo e embutidos<107>.
* Biblioteca: Biblioteca<109>.
* Núcleo e embutidos: Núcleo e embutidos<108>.
* Biblioteca: Biblioteca<110>.
* Documentação: Documentação<39>.
* Testes: Testes<43>.
* Construção: Construção<47>.
* Windows: Windows<40>.
* macOS: macOS<32>.
* IDLE: IDLE<29>.
* API C: API C<43>.


File: python.info,  Node: Segurança<31>,  Next: Núcleo e embutidos<107>,  Up: Python 3 10 0 alpha 2

1.23.49.1 Segurança
...................

   - bpo-42103(1): Prevented potential DoS attack via CPU and RAM
     exhaustion when processing malformed Apple Property List files in
     binary format.

   - bpo-42051(2): The *note plistlib: ab. module no longer accepts
     entity declarations in XML plist files to avoid XML
     vulnerabilities.  This should not affect users as entity
     declarations are not used in regular plist files.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42103

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42051


File: python.info,  Node: Núcleo e embutidos<107>,  Next: Biblioteca<109>,  Prev: Segurança<31>,  Up: Python 3 10 0 alpha 2

1.23.49.2 Núcleo e embutidos
............................

   - bpo-42236(1): If the ‘nl_langinfo(CODESET)’ function returns an
     empty string, Python now uses UTF-8 as the filesystem encoding.
     Patch by Victor Stinner.

   - bpo-42218(2): Fixed a bug in the PEG parser that was causing
     crashes in debug mode.  Now errors are checked in left-recursive
     rules to avoid cases where such errors do not get handled in time
     and appear as long-distance crashes in other places.

   - bpo-42214(3): Fixed a possible crash in the PEG parser when
     checking for the ‘!=’ token in the ‘barry_as_flufl’ rule.  Patch by
     Pablo Galindo.

   - bpo-42206(4): Propagate and raise the errors caused by
     ‘PyAST_Validate()’ in the parser.

   - bpo-41796(5): The *note ast: 8. module internal state is now per
     interpreter.  Patch by Victor Stinner.

   - bpo-42143(6): Fix handling of errors during creation of
     ‘PyFunctionObject’, which resulted in operations on uninitialized
     memory.  Patch by Yonatan Goldschmidt.

   - bpo-41659(7): Fix a bug in the parser, where a curly brace
     following a ‘primary’ didn’t fail immediately.  This led to invalid
     expressions like ‘a {b}’ to throw a *note SyntaxError: 18d. with a
     wrong offset, or invalid expressions ending with a curly brace like
     ‘a {’ to not fail immediately in the REPL.

   - bpo-42150(8): Fix possible buffer overflow in the new parser when
     checking for continuation lines.  Patch by Pablo Galindo.

   - bpo-42123(9): Run the parser two times.  On the first run, disable
     all the rules that only generate better error messages to gain
     performance.  If there’s a parse failure, run the parser a second
     time with those enabled.

   - bpo-42093(10): The ‘LOAD_ATTR’ instruction now uses new “per opcode
     cache” mechanism and it is about 36% faster now.  Patch by Pablo
     Galindo and Yury Selivanov.

   - bpo-42030(11): Support for the legacy AIX-specific shared library
     loading support has been removed.  All versions of AIX since 4.3
     have supported and defaulted to using the common Unix mechanism
     instead.

   - bpo-41984(12): The garbage collector now tracks all user-defined
     classes.  Patch by Brandt Bucher.

   - bpo-41993(13): Fixed potential issues with removing not completely
     initialized module from ‘sys.modules’ when import fails.

   - bpo-41979(14): Star-unpacking is now allowed for with item’s
     targets in the PEG parser.

   - bpo-41974(15): Removed special methods ‘__int__’, ‘__float__’,
     ‘__floordiv__’, ‘__mod__’, ‘__divmod__’, ‘__rfloordiv__’,
     ‘__rmod__’ and ‘__rdivmod__’ of the *note complex: 2f8. class.
     They always raised a *note TypeError: 2c3.

   - bpo-41902(16): Micro optimization when compute *note sq_item: 1a82.
     and *note mp_subscript: 1a83. of *note range: 94a.  Patch by
     Donghee Na.

   - bpo-41894(17): When loading a native module and a load failure
     occurs, prevent a possible UnicodeDecodeError when not running in a
     UTF-8 locale by decoding the load error message using the current
     locale’s encoding.

   - bpo-41902(18): Micro optimization for range.index if step is 1.
     Patch by Donghee Na.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42236

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42218

   (3) https://bugs.python.org/issue?@action=redirect&bpo=42214

   (4) https://bugs.python.org/issue?@action=redirect&bpo=42206

   (5) https://bugs.python.org/issue?@action=redirect&bpo=41796

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42143

   (7) https://bugs.python.org/issue?@action=redirect&bpo=41659

   (8) https://bugs.python.org/issue?@action=redirect&bpo=42150

   (9) https://bugs.python.org/issue?@action=redirect&bpo=42123

   (10) https://bugs.python.org/issue?@action=redirect&bpo=42093

   (11) https://bugs.python.org/issue?@action=redirect&bpo=42030

   (12) https://bugs.python.org/issue?@action=redirect&bpo=41984

   (13) https://bugs.python.org/issue?@action=redirect&bpo=41993

   (14) https://bugs.python.org/issue?@action=redirect&bpo=41979

   (15) https://bugs.python.org/issue?@action=redirect&bpo=41974

   (16) https://bugs.python.org/issue?@action=redirect&bpo=41902

   (17) https://bugs.python.org/issue?@action=redirect&bpo=41894

   (18) https://bugs.python.org/issue?@action=redirect&bpo=41902


File: python.info,  Node: Biblioteca<109>,  Next: Núcleo e embutidos<108>,  Prev: Núcleo e embutidos<107>,  Up: Python 3 10 0 alpha 2

1.23.49.3 Biblioteca
....................

   - bpo-41435(1): Add ‘sys._current_exceptions()’ function to retrieve
     a dictionary mapping each thread’s identifier to the topmost
     exception currently active in that thread at the time the function
     is called.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41435


File: python.info,  Node: Núcleo e embutidos<108>,  Next: Biblioteca<110>,  Prev: Biblioteca<109>,  Up: Python 3 10 0 alpha 2

1.23.49.4 Núcleo e embutidos
............................

   - bpo-38605(1): Enable ‘from __future__ import annotations’ ( PEP
     563(2)) by default.  The values found in ‘__annotations__’ dicts
     are now strings, for example ‘{"x": "int"}’ instead of ‘{"x":
     int}’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38605

   (2) https://peps.python.org/pep-0563/


File: python.info,  Node: Biblioteca<110>,  Next: Documentação<39>,  Prev: Núcleo e embutidos<108>,  Up: Python 3 10 0 alpha 2

1.23.49.5 Biblioteca
....................

   - bpo-35455(1): On Solaris, *note thread_time(): 93d. is now
     implemented with ‘gethrvtime()’ because
     ‘clock_gettime(CLOCK_THREAD_CPUTIME_ID)’ is not always available.
     Patch by Jakub Kulik.

   - bpo-42233(2): The *note repr(): 800. of *note typing: 104. types
     containing *note Generic Alias Types: 6b2. previously did not show
     the parameterized types in the ‘GenericAlias’.  They have now been
     changed to do so.

   - bpo-29566(3): ‘binhex.binhex()’ consistently writes macOS 9 line
     endings.

   - bpo-26789(4): The *note logging.FileHandler: 19de. class now keeps
     a reference to the builtin *note open(): 51c. function to be able
     to open or reopen the file during Python finalization.  Fix errors
     like: ‘NameError: name 'open' is not defined’.  Patch by Victor
     Stinner.

   - bpo-42157(5): Removed the ‘unicodedata.ucnhash_CAPI’ attribute
     which was an internal PyCapsule object.  The related private
     ‘_PyUnicode_Name_CAPI’ structure was moved to the internal C API.
     Patch by Victor Stinner.

   - bpo-42157(6): Convert the *note unicodedata: 105. extension module
     to the multiphase initialization API ( PEP 489(7)) and convert the
     ‘unicodedata.UCD’ static type to a heap type.  Patch by Mohamed
     Koubaa and Victor Stinner.

   - bpo-42146(8): Fix memory leak in *note subprocess.Popen(): 199. in
     case an uid (gid) specified in ‘user’ (‘group’, ‘extra_groups’)
     overflows ‘uid_t’ (‘gid_t’).

   - bpo-42103(9): *note InvalidFileException: 1a87. and *note
     RecursionError: d90. are now the only errors caused by loading
     malformed binary Plist file (previously ValueError and TypeError
     could be raised in some specific cases).

   - bpo-41490(10): In ‘importlib.resources’, ‘.path’ method is more
     aggressive about releasing handles to zipfile objects early,
     enabling use-cases like certifi to leave the context open but
     delete the underlying zip file.

   - bpo-41052(11): Pickling heap types implemented in C with protocols
     0 and 1 raises now an error instead of producing incorrect data.

   - bpo-42089(12): In ‘importlib.metadata.PackageNotFoundError’, make
     reference to the package metadata being missing to improve the user
     experience.

   - bpo-41491(13): plistlib: fix parsing XML plists with hexadecimal
     integer values

   - bpo-42065(14): Fix an incorrectly formatted error from
     ‘_codecs.charmap_decode()’ when called with a mapped value outside
     the range of valid Unicode code points.  PR by Max Bernstein.

   - bpo-41966(15): Fix pickling pure Python *note datetime.time: 1ce.
     subclasses.  Patch by Dean Inwood.

   - bpo-19270(16): *note sched.scheduler.cancel(): 1a88. will now
     cancel the correct event, if two events with same priority are
     scheduled for the same time.  Patch by Bar Harel.

   - bpo-28660(17): *note textwrap.wrap(): 150f. now attempts to break
     long words after hyphens when ‘break_long_words=True’ and
     ‘break_on_hyphens=True’.

   - bpo-35823(18): Use ‘vfork()’ instead of ‘fork()’ for *note
     subprocess.Popen(): 199. on Linux to improve performance in cases
     where it is deemed safe.

   - bpo-42043(19): Add support for ‘zipfile.Path’ inheritance.
     ‘zipfile.Path.is_file()’ now returns False for non-existent names.
     ‘zipfile.Path’ objects now expose a ‘.filename’ attribute and rely
     on that to resolve ‘.name’ and ‘.parent’ when the ‘Path’ object is
     at the root of the zipfile.

   - bpo-42021(20): Fix possible ref leaks in *note sqlite3: cf. module
     init.

   - bpo-39101(21): Fixed tests using IsolatedAsyncioTestCase from
     hanging on BaseExceptions.

   - bpo-41976(22): Fixed a bug that was causing *note
     ctypes.util.find_library(): d6c. to return ‘None’ when triying to
     locate a library in an environment when gcc>=9 is available and
     ‘ldconfig’ is not.  Patch by Pablo Galindo

   - bpo-41943(23): Fix bug where TestCase.assertLogs doesn’t correctly
     filter messages by level.

   - bpo-41923(24): Implement PEP 613(25), introducing *note
     typing.TypeAlias: 7ca. annotation.

   - bpo-41905(26): A new function in abc: 'update_abstractmethods' to
     re-calculate an abstract class’s abstract status.  In addition,
     'dataclass' has been changed to call this function.

   - bpo-23706(27): Added 'newline' parameter to
     ‘pathlib.Path.write_text()’.

   - bpo-41876(28): Tkinter font class repr uses font name

   - bpo-41831(29): ‘str()’ for the ‘type’ attribute of the
     ‘tkinter.Event’ object always returns now the numeric code returned
     by Tk instead of the name of the event type.

   - bpo-39337(30): *note encodings.normalize_encoding(): 7fe. now
     ignores non-ASCII characters.

   - bpo-41747(31): Ensure all methods that generated from *note
     dataclasses.dataclass(): 1cb. objects now have the proper
     ‘__qualname__’ attribute referring to the class they belong to.
     Patch by Batuhan Taskaya.

   - bpo-30681(32): Handle exceptions caused by unparsable date headers
     when using email “default” policy.  Patch by Tim Bell, Georges Toth

   - bpo-41586(33): Add F_SETPIPE_SZ and F_GETPIPE_SZ to fcntl module.
     Allow setting pipesize on subprocess.Popen.

   - bpo-41229(34): Add ‘contextlib.aclosing’ for deterministic cleanup
     of async generators which is analogous to ‘contextlib.closing’ for
     non-async generators.  Patch by Joongi Kim and John Belmonte.

   - bpo-16396(35): Allow ‘ctypes.wintypes’ to be imported on
     non-Windows systems.

   - bpo-4356(36): Add a key function to the bisect module.

   - bpo-40592(37): *note shutil.which(): 4b4. now ignores empty entries
     in ‘PATHEXT’ instead of treating them as a match.

   - bpo-40492(38): Fix ‘--outfile’ for *note cProfile: 27. / *note
     profile: af. not writing the output file in the original directory
     when the program being profiled changes the working directory.  PR
     by Anthony Sottile.

   - bpo-34204(39): The *note shelve: c3. module now uses *note
     pickle.DEFAULT_PROTOCOL: 831. by default instead of *note pickle:
     a6. protocol ‘3’.

   - bpo-27321(40): Fixed KeyError exception when flattening an email to
     a string attempts to replace a non-existent
     Content-Transfer-Encoding header.

   - bpo-38976(41): The *note http.cookiejar: 70. module now supports
     the parsing of cookies in CURL-style cookiejar files through
     MozillaCookieJar on all platforms.  Previously, such cookie entries
     would be silently ignored when loading a cookiejar with such
     entries.

     Additionally, the HTTP Only attribute is persisted in the object,
     and will be correctly written to file if the MozillaCookieJar
     object is subsequently dumped.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35455

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42233

   (3) https://bugs.python.org/issue?@action=redirect&bpo=29566

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26789

   (5) https://bugs.python.org/issue?@action=redirect&bpo=42157

   (6) https://bugs.python.org/issue?@action=redirect&bpo=42157

   (7) https://peps.python.org/pep-0489/

   (8) https://bugs.python.org/issue?@action=redirect&bpo=42146

   (9) https://bugs.python.org/issue?@action=redirect&bpo=42103

   (10) https://bugs.python.org/issue?@action=redirect&bpo=41490

   (11) https://bugs.python.org/issue?@action=redirect&bpo=41052

   (12) https://bugs.python.org/issue?@action=redirect&bpo=42089

   (13) https://bugs.python.org/issue?@action=redirect&bpo=41491

   (14) https://bugs.python.org/issue?@action=redirect&bpo=42065

   (15) https://bugs.python.org/issue?@action=redirect&bpo=41966

   (16) https://bugs.python.org/issue?@action=redirect&bpo=19270

   (17) https://bugs.python.org/issue?@action=redirect&bpo=28660

   (18) https://bugs.python.org/issue?@action=redirect&bpo=35823

   (19) https://bugs.python.org/issue?@action=redirect&bpo=42043

   (20) https://bugs.python.org/issue?@action=redirect&bpo=42021

   (21) https://bugs.python.org/issue?@action=redirect&bpo=39101

   (22) https://bugs.python.org/issue?@action=redirect&bpo=41976

   (23) https://bugs.python.org/issue?@action=redirect&bpo=41943

   (24) https://bugs.python.org/issue?@action=redirect&bpo=41923

   (25) https://peps.python.org/pep-0613/

   (26) https://bugs.python.org/issue?@action=redirect&bpo=41905

   (27) https://bugs.python.org/issue?@action=redirect&bpo=23706

   (28) https://bugs.python.org/issue?@action=redirect&bpo=41876

   (29) https://bugs.python.org/issue?@action=redirect&bpo=41831

   (30) https://bugs.python.org/issue?@action=redirect&bpo=39337

   (31) https://bugs.python.org/issue?@action=redirect&bpo=41747

   (32) https://bugs.python.org/issue?@action=redirect&bpo=30681

   (33) https://bugs.python.org/issue?@action=redirect&bpo=41586

   (34) https://bugs.python.org/issue?@action=redirect&bpo=41229

   (35) https://bugs.python.org/issue?@action=redirect&bpo=16396

   (36) https://bugs.python.org/issue?@action=redirect&bpo=4356

   (37) https://bugs.python.org/issue?@action=redirect&bpo=40592

   (38) https://bugs.python.org/issue?@action=redirect&bpo=40492

   (39) https://bugs.python.org/issue?@action=redirect&bpo=34204

   (40) https://bugs.python.org/issue?@action=redirect&bpo=27321

   (41) https://bugs.python.org/issue?@action=redirect&bpo=38976


File: python.info,  Node: Documentação<39>,  Next: Testes<43>,  Prev: Biblioteca<110>,  Up: Python 3 10 0 alpha 2

1.23.49.6 Documentação
......................

   - bpo-42061(1): Document __format__ functionality for IP addresses.

   - bpo-41910(2): Document the default implementation of
     ‘object.__eq__’.

   - bpo-42010(3): Clarify that subscription expressions are also valid
     for certain *note classes: 1a8a. and *note types: 1a8b. in the
     standard library, and for user-defined classes and types if the
     classmethod ‘__class_getitem__()’ is provided.

   - bpo-41805(4): Documented *note generic alias type: 6b2. and *note
     types.GenericAlias: 7ed.  Also added an entry in glossary for *note
     generic types: 439.

   - bpo-39693(5): Fix tarfile’s extractfile documentation

   - bpo-39416(6): Document some restrictions on the default string
     representations of numeric classes.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42061

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41910

   (3) https://bugs.python.org/issue?@action=redirect&bpo=42010

   (4) https://bugs.python.org/issue?@action=redirect&bpo=41805

   (5) https://bugs.python.org/issue?@action=redirect&bpo=39693

   (6) https://bugs.python.org/issue?@action=redirect&bpo=39416


File: python.info,  Node: Testes<43>,  Next: Construção<47>,  Prev: Documentação<39>,  Up: Python 3 10 0 alpha 2

1.23.49.7 Testes
................

   - bpo-41739(1): Fix
     test_logging.test_race_between_set_target_and_flush(): the test now
     waits until all threads complete to avoid leaking running threads.

   - bpo-41970(2): Avoid a test failure in ‘test_lib2to3’ if the module
     has already imported at the time the test executes.  Patch by Pablo
     Galindo.

   - bpo-41944(3): Tests for CJK codecs no longer call ‘eval()’ on
     content received via HTTP.

   - bpo-41306(4): Fixed a failure in ‘test_tk.test_widgets.ScaleTest’
     happening when executing the test with Tk 8.6.10.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41739

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41970

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41944

   (4) https://bugs.python.org/issue?@action=redirect&bpo=41306


File: python.info,  Node: Construção<47>,  Next: Windows<40>,  Prev: Testes<43>,  Up: Python 3 10 0 alpha 2

1.23.49.8 Construção
....................

   - bpo-38980(1): Add ‘-fno-semantic-interposition’ to both the compile
     and link line when building with ‘--enable-optimizations’.  Patch
     by Victor Stinner and Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38980


File: python.info,  Node: Windows<40>,  Next: macOS<32>,  Prev: Construção<47>,  Up: Python 3 10 0 alpha 2

1.23.49.9 Windows
.................

   - bpo-38439(1): Updates the icons for IDLE in the Windows Store
     package.

   - bpo-38252(2): Use 8-byte step to detect ASCII sequence in 64-bit
     Windows build.

   - bpo-39107(3): Update Tcl and Tk to 8.6.10 in Windows installer.

   - bpo-41557(4): Update Windows installer to use SQLite 3.33.0.

   - bpo-38324(5): Avoid Unicode errors when accessing certain locale
     data on Windows.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38439

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38252

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39107

   (4) https://bugs.python.org/issue?@action=redirect&bpo=41557

   (5) https://bugs.python.org/issue?@action=redirect&bpo=38324


File: python.info,  Node: macOS<32>,  Next: IDLE<29>,  Prev: Windows<40>,  Up: Python 3 10 0 alpha 2

1.23.49.10 macOS
................

   - bpo-41471(1): Ignore invalid prefix lengths in system proxy
     excludes.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41471


File: python.info,  Node: IDLE<29>,  Next: API C<43>,  Prev: macOS<32>,  Up: Python 3 10 0 alpha 2

1.23.49.11 IDLE
...............

   - bpo-33987(1): Mostly finish using ttk widgets, mainly for editor,
     settings, and searches.  Some patches by Mark Roseman.

   - bpo-40511(2): Typing opening and closing parentheses inside the
     parentheses of a function call will no longer cause unnecessary
     “flashing” off and on of an existing open call-tip, e.g.  when
     typed in a string literal.

   - bpo-38439(3): Add a 256×256 pixel IDLE icon to the Windows .ico
     file.  Created by Andrew Clover.  Remove the low-color gif
     variations from the .ico file.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33987

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40511

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38439


File: python.info,  Node: API C<43>,  Prev: IDLE<29>,  Up: Python 3 10 0 alpha 2

1.23.49.12 API C
................

   - bpo-42157(1): The private ‘_PyUnicode_Name_CAPI’ structure of the
     PyCapsule API ‘unicodedata.ucnhash_CAPI’ has been moved to the
     internal C API. Patch by Victor Stinner.

   - bpo-42015(2): Fix potential crash in deallocating method objects
     when dynamically allocated *note PyMethodDef: 151f.’s lifetime is
     managed through the ‘self’ argument of a *note PyCFunction: 14c0.

   - bpo-40423(3): The *note subprocess: d6. module and ‘os.closerange’
     will now use the ‘close_range(low, high, flags)’ syscall when it is
     available for more efficient closing of ranges of descriptors.

   - bpo-41845(4): *note PyObject_GenericGetDict(): 1a92. is available
     again in the limited API when targeting 3.10 or later.

   - bpo-40422(5): Add ‘_Py_closerange’ function to provide performant
     closing of a range of file descriptors.

   - bpo-41986(6): ‘Py_FileSystemDefaultEncodeErrors’ and ‘Py_UTF8Mode’
     are available again in limited API.

   - bpo-41756(7): Add ‘PyIter_Send’ function to allow sending value
     into generator/coroutine/iterator without raising StopIteration
     exception to signal return.

   - bpo-41784(8): Added ‘PyUnicode_AsUTF8AndSize’ to the limited C API.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42157

   (2) https://bugs.python.org/issue?@action=redirect&bpo=42015

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40423

   (4) https://bugs.python.org/issue?@action=redirect&bpo=41845

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40422

   (6) https://bugs.python.org/issue?@action=redirect&bpo=41986

   (7) https://bugs.python.org/issue?@action=redirect&bpo=41756

   (8) https://bugs.python.org/issue?@action=redirect&bpo=41784


File: python.info,  Node: Python 3 10 0 alpha 1,  Next: Python 3 9 0 beta 1,  Prev: Python 3 10 0 alpha 2,  Up: Changelog

1.23.50 Python 3.10.0 alpha 1
-----------------------------

'Data de lançamento: 2020-10-05'

* Menu:

* Segurança: Segurança<32>.
* Núcleo e embutidos: Núcleo e embutidos<109>.
* Biblioteca: Biblioteca<111>.
* Núcleo e embutidos: Núcleo e embutidos<110>.
* Biblioteca: Biblioteca<112>.
* Núcleo e embutidos: Núcleo e embutidos<111>.
* Biblioteca: Biblioteca<113>.
* Núcleo e embutidos: Núcleo e embutidos<112>.
* Biblioteca: Biblioteca<114>.
* Núcleo e embutidos: Núcleo e embutidos<113>.
* Biblioteca: Biblioteca<115>.
* Núcleo e embutidos: Núcleo e embutidos<114>.
* Biblioteca: Biblioteca<116>.
* Núcleo e embutidos: Núcleo e embutidos<115>.
* Biblioteca: Biblioteca<117>.
* Núcleo e embutidos: Núcleo e embutidos<116>.
* Biblioteca: Biblioteca<118>.
* Núcleo e embutidos: Núcleo e embutidos<117>.
* Biblioteca: Biblioteca<119>.
* Núcleo e embutidos: Núcleo e embutidos<118>.
* Biblioteca: Biblioteca<120>.
* Núcleo e embutidos: Núcleo e embutidos<119>.
* Biblioteca: Biblioteca<121>.
* Núcleo e embutidos: Núcleo e embutidos<120>.
* Biblioteca: Biblioteca<122>.
* Núcleo e embutidos: Núcleo e embutidos<121>.
* Biblioteca: Biblioteca<123>.
* Núcleo e embutidos: Núcleo e embutidos<122>.
* Biblioteca: Biblioteca<124>.
* Núcleo e embutidos: Núcleo e embutidos<123>.
* Biblioteca: Biblioteca<125>.
* Documentação: Documentação<40>.
* Testes: Testes<44>.
* Construção: Construção<48>.
* Windows: Windows<41>.
* macOS: macOS<33>.
* IDLE: IDLE<30>.
* API C: API C<44>.


File: python.info,  Node: Segurança<32>,  Next: Núcleo e embutidos<109>,  Up: Python 3 10 0 alpha 1

1.23.50.1 Segurança
...................

   - bpo-41304(1): Fixes ‘python3x._pth’ being ignored on Windows,
     caused by the fix for bpo-29778(2) ( CVE 2020-15801(3)).

   - bpo-41162(4): Audit hooks are now cleared later during finalization
     to avoid missing events.

   - bpo-29778(5): Ensure ‘python3.dll’ is loaded from correct locations
     when Python is embedded ( CVE 2020-15523(6)).

   - bpo-41004(7): The __hash__() methods of ipaddress.IPv4Interface and
     ipaddress.IPv6Interface incorrectly generated constant hash values
     of 32 and 128 respectively.  This resulted in always causing hash
     collisions.  The fix uses hash() to generate hash values for the
     tuple of (address, mask length, network address).

   - bpo-39603(8): Prevent http header injection by rejecting control
     characters in http.client.putrequest(…).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41304

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29778

   (3) https://www.cve.org/CVERecord?id=CVE-2020-15801

   (4) https://bugs.python.org/issue?@action=redirect&bpo=41162

   (5) https://bugs.python.org/issue?@action=redirect&bpo=29778

   (6) https://www.cve.org/CVERecord?id=CVE-2020-15523

   (7) https://bugs.python.org/issue?@action=redirect&bpo=41004

   (8) https://bugs.python.org/issue?@action=redirect&bpo=39603


File: python.info,  Node: Núcleo e embutidos<109>,  Next: Biblioteca<111>,  Prev: Segurança<32>,  Up: Python 3 10 0 alpha 1

1.23.50.2 Núcleo e embutidos
............................

   - bpo-41909(1): Fixed stack overflow in *note issubclass(): 7c2. and
     *note isinstance(): 442. when getting the ‘__bases__’ attribute
     leads to infinite recursion.

   - bpo-41922(2): Speed up calls to ‘reversed()’ by using the PEP
     590(3) ‘vectorcall’ calling convention.  Patch by Donghee Na.

   - bpo-41873(4): Calls to ‘float()’ are now faster due to the
     ‘vectorcall’ calling convention.  Patch by Dennis Sweeney.

   - bpo-41870(5): Speed up calls to ‘bool()’ by using the PEP 590(6)
     ‘vectorcall’ calling convention.  Patch by Donghee Na.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41909

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41922

   (3) https://peps.python.org/pep-0590/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=41873

   (5) https://bugs.python.org/issue?@action=redirect&bpo=41870

   (6) https://peps.python.org/pep-0590/


File: python.info,  Node: Biblioteca<111>,  Next: Núcleo e embutidos<110>,  Prev: Núcleo e embutidos<109>,  Up: Python 3 10 0 alpha 1

1.23.50.3 Biblioteca
....................

   - bpo-1635741(1): Port the ‘_bisect’ module to the multi-phase
     initialization API ( PEP 489(2)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (2) https://peps.python.org/pep-0489/


File: python.info,  Node: Núcleo e embutidos<110>,  Next: Biblioteca<112>,  Prev: Biblioteca<111>,  Up: Python 3 10 0 alpha 1

1.23.50.4 Núcleo e embutidos
............................

   - bpo-39934(1): Correctly count control blocks in ‘except’ in
     compiler.  Ensures that a syntax error, rather a fatal error,
     occurs for deeply nested, named exception handlers.

   - bpo-41780(2): Fix ‘__dir__()’ of *note types.GenericAlias: 7ed.
     Patch by Batuhan Taskaya.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39934

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41780


File: python.info,  Node: Biblioteca<112>,  Next: Núcleo e embutidos<111>,  Prev: Núcleo e embutidos<110>,  Up: Python 3 10 0 alpha 1

1.23.50.5 Biblioteca
....................

   - bpo-1635741(1): Port the ‘_lsprof’ extension module to multi-phase
     initialization ( PEP 489(2)).

   - bpo-1635741(3): Port the *note cmath: 18. extension module to
     multi-phase initialization ( PEP 489(4)).

   - bpo-1635741(5): Port the ‘_scproxy’ extension module to multi-phase
     initialization ( PEP 489(6)).

   - bpo-1635741(7): Port the *note termios: e1. extension module to
     multi-phase initialization ( PEP 489(8)).

   - bpo-1635741(9): Convert the ‘_sha256’ extension module types to
     heap types.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (2) https://peps.python.org/pep-0489/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (4) https://peps.python.org/pep-0489/

   (5) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (6) https://peps.python.org/pep-0489/

   (7) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (8) https://peps.python.org/pep-0489/

   (9) https://bugs.python.org/issue?@action=redirect&bpo=1635741


File: python.info,  Node: Núcleo e embutidos<111>,  Next: Biblioteca<113>,  Prev: Biblioteca<112>,  Up: Python 3 10 0 alpha 1

1.23.50.6 Núcleo e embutidos
............................

   - bpo-41690(1): Fix a possible stack overflow in the parser when
     parsing functions and classes with a huge amount of arguments.
     Patch by Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41690


File: python.info,  Node: Biblioteca<113>,  Next: Núcleo e embutidos<112>,  Prev: Núcleo e embutidos<111>,  Up: Python 3 10 0 alpha 1

1.23.50.7 Biblioteca
....................

   - bpo-1635741(1): Port the ‘_overlapped’ extension module to
     multi-phase initialization ( PEP 489(2)).

   - bpo-1635741(3): Port the ‘_curses_panel’ extension module to
     multi-phase initialization ( PEP 489(4)).

   - bpo-1635741(5): Port the ‘_opcode’ extension module to multi-phase
     initialization ( PEP 489(6)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (2) https://peps.python.org/pep-0489/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (4) https://peps.python.org/pep-0489/

   (5) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (6) https://peps.python.org/pep-0489/


File: python.info,  Node: Núcleo e embutidos<112>,  Next: Biblioteca<114>,  Prev: Biblioteca<113>,  Up: Python 3 10 0 alpha 1

1.23.50.8 Núcleo e embutidos
............................

   - bpo-41681(1): Fixes the wrong error description in the error raised
     by using 2 ‘,’ in format string in f-string and *note str.format():
     621.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41681


File: python.info,  Node: Biblioteca<114>,  Next: Núcleo e embutidos<113>,  Prev: Núcleo e embutidos<112>,  Up: Python 3 10 0 alpha 1

1.23.50.9 Biblioteca
....................

   - bpo-41675(1): The implementation of *note signal.siginterrupt():
     1174. now uses ‘sigaction()’ (if it is available in the system)
     instead of the deprecated ‘siginterrupt()’.  Patch by Pablo
     Galindo.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41675


File: python.info,  Node: Núcleo e embutidos<113>,  Next: Biblioteca<115>,  Prev: Biblioteca<114>,  Up: Python 3 10 0 alpha 1

1.23.50.10 Núcleo e embutidos
.............................

   - bpo-41670(1): Prevent line trace being skipped on platforms not
     compiled with ‘USE_COMPUTED_GOTOS’.  Fixes issue where some lines
     nested within a try-except block were not being traced on Windows.

   - bpo-41654(2): Fix a crash that occurred when destroying subclasses
     of *note MemoryError: 15c5.  Patch by Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41670

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41654


File: python.info,  Node: Biblioteca<115>,  Next: Núcleo e embutidos<114>,  Prev: Núcleo e embutidos<113>,  Up: Python 3 10 0 alpha 1

1.23.50.11 Biblioteca
.....................

   - bpo-1635741(1): Port the *note zlib: 133. extension module to
     multi-phase initialization ( PEP 489(2)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (2) https://peps.python.org/pep-0489/


File: python.info,  Node: Núcleo e embutidos<114>,  Next: Biblioteca<116>,  Prev: Biblioteca<115>,  Up: Python 3 10 0 alpha 1

1.23.50.12 Núcleo e embutidos
.............................

   - bpo-41631(1): The ‘_ast’ module uses again a global state.  Using a
     module state per module instance is causing subtle practical
     problems.  For example, the Mercurial project replaces the
     ‘__import__()’ function to implement lazy import, whereas Python
     expected that ‘import _ast’ always return a fully initialized
     ‘_ast’ module.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41631


File: python.info,  Node: Biblioteca<116>,  Next: Núcleo e embutidos<115>,  Prev: Núcleo e embutidos<114>,  Up: Python 3 10 0 alpha 1

1.23.50.13 Biblioteca
.....................

   - bpo-40077(1): Convert ‘_operator’ to use *note PyType_FromSpec():
     57d.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40077


File: python.info,  Node: Núcleo e embutidos<115>,  Next: Biblioteca<117>,  Prev: Biblioteca<116>,  Up: Python 3 10 0 alpha 1

1.23.50.14 Núcleo e embutidos
.............................

   - bpo-1653741(1): Port ‘_sha3’ to multi-phase init.  Convert static
     types to heap types.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1653741


File: python.info,  Node: Biblioteca<117>,  Next: Núcleo e embutidos<116>,  Prev: Núcleo e embutidos<115>,  Up: Python 3 10 0 alpha 1

1.23.50.15 Biblioteca
.....................

   - bpo-1635741(1): Port the ‘_blake2’ extension module to the
     multi-phase initialization API ( PEP 489(2)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (2) https://peps.python.org/pep-0489/


File: python.info,  Node: Núcleo e embutidos<116>,  Next: Biblioteca<118>,  Prev: Biblioteca<117>,  Up: Python 3 10 0 alpha 1

1.23.50.16 Núcleo e embutidos
.............................

   - bpo-41533(1): Free the stack allocated in ‘va_build_stack’ if
     ‘do_mkstack’ fails and the stack is not a ‘small_stack’.

   - bpo-41531(2): Fix a bug that was dropping keys when compiling dict
     literals with more than 0xFFFF elements.  Patch by Pablo Galindo.

   - bpo-41525(3): The output of ‘python --help’ contains now only ASCII
     characters.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41533

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41531

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41525


File: python.info,  Node: Biblioteca<118>,  Next: Núcleo e embutidos<117>,  Prev: Núcleo e embutidos<116>,  Up: Python 3 10 0 alpha 1

1.23.50.17 Biblioteca
.....................

   - bpo-1635741(1): Port the ‘_sha1’, ‘_sha512’, and ‘_md5’ extension
     modules to multi-phase initialization API ( PEP 489(2)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (2) https://peps.python.org/pep-0489/


File: python.info,  Node: Núcleo e embutidos<117>,  Next: Biblioteca<119>,  Prev: Biblioteca<118>,  Up: Python 3 10 0 alpha 1

1.23.50.18 Núcleo e embutidos
.............................

   - bpo-41431(1): Optimize ‘dict_merge()’ for copying dict (e.g.
     ‘dict(d)’ and ‘{}.update(d)’).

   - bpo-41428(2): Implement PEP 604.  This supports (int | str) etc.
     in place of Union[str, int].

   - bpo-41340(3): Removed fallback implementation for ‘strdup’.

   - bpo-38156(4): Handle interrupts that come after EOF correctly in
     ‘PyOS_StdioReadline’.

   - bpo-41342(5): *note round(): 131d. with integer argument is now
     faster (9–60%).

   - bpo-41334(6): Constructors *note str(): 44c, *note bytes(): 1c2.
     and *note bytearray(): 2ea. are now faster (around 30–40% for small
     objects).

   - bpo-41295(7): Resolve a regression in CPython 3.8.4 where defining
     “__setattr__” in a multi-inheritance setup and calling up the
     hierarchy chain could fail if builtins/extension types were
     involved in the base types.

   - bpo-41323(8): Bytecode optimizations are performed directly on the
     control flow graph.  This will result in slightly more compact code
     objects in some circumstances.

   - bpo-41247(9): Always cache the running loop holder when running
     ‘asyncio.set_running_loop’.

   - bpo-41252(10): Fix incorrect refcounting in _ssl.c’s
     ‘_servername_callback()’.

   - bpo-1635741(11): Port *note multiprocessing: 94. to multi-phase
     initialization

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41431

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41428

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41340

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38156

   (5) https://bugs.python.org/issue?@action=redirect&bpo=41342

   (6) https://bugs.python.org/issue?@action=redirect&bpo=41334

   (7) https://bugs.python.org/issue?@action=redirect&bpo=41295

   (8) https://bugs.python.org/issue?@action=redirect&bpo=41323

   (9) https://bugs.python.org/issue?@action=redirect&bpo=41247

   (10) https://bugs.python.org/issue?@action=redirect&bpo=41252

   (11) https://bugs.python.org/issue?@action=redirect&bpo=1635741


File: python.info,  Node: Biblioteca<119>,  Next: Núcleo e embutidos<118>,  Prev: Núcleo e embutidos<117>,  Up: Python 3 10 0 alpha 1

1.23.50.19 Biblioteca
.....................

   - bpo-1635741(1): Port ‘winapi’ to multiphase initialization

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1635741


File: python.info,  Node: Núcleo e embutidos<118>,  Next: Biblioteca<120>,  Prev: Biblioteca<119>,  Up: Python 3 10 0 alpha 1

1.23.50.20 Núcleo e embutidos
.............................

   - bpo-41215(1): Use non-NULL default values in the PEG parser keyword
     list to overcome a bug that was preventing Python from being
     properly compiled when using the XLC compiler.  Patch by Pablo
     Galindo.

   - bpo-41218(2): Python 3.8.3 had a regression where compiling with
     ast.PyCF_ALLOW_TOP_LEVEL_AWAIT would aggressively mark list
     comprehension with CO_COROUTINE. Now only list comprehension making
     use of async/await will tagged as so.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41215

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41218


File: python.info,  Node: Biblioteca<120>,  Next: Núcleo e embutidos<119>,  Prev: Núcleo e embutidos<118>,  Up: Python 3 10 0 alpha 1

1.23.50.21 Biblioteca
.....................

   - bpo-1635741(1): Port *note faulthandler: 58. to multiphase
     initialization.

   - bpo-1635741(2): Port ‘sha256’ to multiphase initialization

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (2) https://bugs.python.org/issue?@action=redirect&bpo=1635741


File: python.info,  Node: Núcleo e embutidos<119>,  Next: Biblioteca<121>,  Prev: Biblioteca<120>,  Up: Python 3 10 0 alpha 1

1.23.50.22 Núcleo e embutidos
.............................

   - bpo-41175(1): Guard against a NULL pointer dereference within
     bytearrayobject triggered by the ‘bytearray() + bytearray()’
     operation.

   - bpo-41100(2): add arm64 to the allowable Mac OS arches in
     mpdecimal.h

   - bpo-41094(3): Fix decoding errors with audit when open files with
     non-ASCII names on non-UTF-8 locale.

   - bpo-39960(4): The “hackcheck” that prevents sneaking around a
     type’s __setattr__() by calling the superclass method was rewritten
     to allow C implemented heap types.

   - bpo-41084(5): Prefix the error message with ‘f-string: ‘, when
     parsing an f-string expression which throws a *note SyntaxError:
     18d.

   - bpo-40521(6): Empty frozensets are no longer singletons.

   - bpo-41076(7): Pre-feed the parser with the location of the f-string
     expression, not the f-string itself, which allows us to skip the
     shifting of the AST node locations after the parsing is completed.

   - bpo-41056(8): Fixes a reference to deallocated stack space during
     startup when constructing sys.path involving a relative symlink
     when code was supplied via -c.  (discovered via Coverity)

   - bpo-41061(9): Fix incorrect expressions and asserts in hashtable
     code and tests.

   - bpo-41052(10): Opt out serialization/deserialization for
     _random.Random

   - bpo-40939(11): Rename ‘PyPegen*’ functions to ‘PyParser*’, so that
     we can remove the old set of ‘PyParser*’ functions that were using
     the old parser, but keep everything backwards-compatible.

   - bpo-35975(12): Stefan Behnel reported that cf_feature_version is
     used even when PyCF_ONLY_AST is not set.  This is against the
     intention and against the documented behavior, so it’s been fixed.

   - bpo-40939(13): Remove the remaining files from the old parser and
     the ‘symbol’ module.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41175

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41100

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41094

   (4) https://bugs.python.org/issue?@action=redirect&bpo=39960

   (5) https://bugs.python.org/issue?@action=redirect&bpo=41084

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40521

   (7) https://bugs.python.org/issue?@action=redirect&bpo=41076

   (8) https://bugs.python.org/issue?@action=redirect&bpo=41056

   (9) https://bugs.python.org/issue?@action=redirect&bpo=41061

   (10) https://bugs.python.org/issue?@action=redirect&bpo=41052

   (11) https://bugs.python.org/issue?@action=redirect&bpo=40939

   (12) https://bugs.python.org/issue?@action=redirect&bpo=35975

   (13) https://bugs.python.org/issue?@action=redirect&bpo=40939


File: python.info,  Node: Biblioteca<121>,  Next: Núcleo e embutidos<120>,  Prev: Núcleo e embutidos<119>,  Up: Python 3 10 0 alpha 1

1.23.50.23 Biblioteca
.....................

   - bpo-40077(1): Convert ‘_bz2’ to use *note PyType_FromSpec(): 57d.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40077


File: python.info,  Node: Núcleo e embutidos<120>,  Next: Biblioteca<122>,  Prev: Biblioteca<121>,  Up: Python 3 10 0 alpha 1

1.23.50.24 Núcleo e embutidos
.............................

   - bpo-41006(1): The ‘encodings.latin_1’ module is no longer imported
     at startup.  Now it is only imported when it is the filesystem
     encoding or the stdio encoding.

   - bpo-40636(2): *note zip(): 7d1. now supports PEP 618(3)’s ‘strict’
     parameter, which raises a *note ValueError: 202. if the arguments
     are exhausted at different lengths.  Patch by Brandt Bucher.

   - bpo-1635741(4): Port ‘_gdbm’ to multiphase initialization.

   - bpo-40985(5): Fix a bug that caused the *note SyntaxError: 18d.
     text to be empty when a file ends with a line ending in a line
     continuation character (i.e.  backslash).  The error text should
     contain the text of the last line.

   - bpo-40958(6): Fix a possible buffer overflow in the PEG parser when
     gathering information for emitting syntax errors.  Patch by Pablo
     Galindo.

   - bpo-1635741(7): Port ‘_dbm’ to multiphase initialization.

   - bpo-40957(8): Fix refleak in _Py_fopen_obj() when PySys_Audit()
     fails

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41006

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40636

   (3) https://peps.python.org/pep-0618/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40985

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40958

   (7) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (8) https://bugs.python.org/issue?@action=redirect&bpo=40957


File: python.info,  Node: Biblioteca<122>,  Next: Núcleo e embutidos<121>,  Prev: Núcleo e embutidos<120>,  Up: Python 3 10 0 alpha 1

1.23.50.25 Biblioteca
.....................

   - bpo-40950(1): Add a state to the ‘nis’ module ( PEP 3121(2)) and
     apply the multiphase initialization.  Patch by Donghee Na.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40950

   (2) https://peps.python.org/pep-3121/


File: python.info,  Node: Núcleo e embutidos<121>,  Next: Biblioteca<123>,  Prev: Biblioteca<122>,  Up: Python 3 10 0 alpha 1

1.23.50.26 Núcleo e embutidos
.............................

   - bpo-40947(1): The Python *note Path Configuration: 8b2. now takes
     *note PyConfig.platlibdir: 1aae. in account.

   - bpo-40939(2): Remove the old parser, the ‘parser’ module and all
     associated support code, command-line options and environment
     variables.  Patch by Pablo Galindo.

   - bpo-40847(3): Fix a bug where a line with only a line continuation
     character is not considered a blank line at tokenizer level.  In
     such cases, more than a single ‘NEWLINE’ token was emitted.  The
     old parser was working around the issue, but the new parser threw a
     *note SyntaxError: 18d. for valid input due to this.  For example,
     an empty line following a line continuation character was
     interpreted as a *note SyntaxError: 18d.

   - bpo-40890(4): Each dictionary view now has a ‘mapping’ attribute
     that provides a *note types.MappingProxyType: 46d. wrapping the
     original dictionary.  Patch contributed by Dennis Sweeney.

   - bpo-40889(5): Improved the performance of symmetric difference
     operations on dictionary item views.  Patch by Dennis Sweeney.

   - bpo-40904(6): Fix possible segfault in the new PEG parser when
     parsing f-string containing yield statements with no value
     (‘f"{yield}"’).  Patch by Pablo Galindo

   - bpo-40903(7): Fixed a possible segfault in the new PEG parser when
     producing error messages for invalid assignments of the form
     ‘p=p=’.  Patch by Pablo Galindo

   - bpo-40880(8): Fix invalid memory read in the new parser when
     checking newlines in string literals.  Patch by Pablo Galindo.

   - bpo-40883(9): Fix memory leak in when parsing f-strings in the new
     parser.  Patch by Pablo Galindo

   - bpo-40870(10): Raise *note ValueError: 202. when validating custom
     AST’s where the constants ‘True’, ‘False’ and ‘None’ are used
     within a *note ast.Name: 1aaf. node.

   - bpo-40854(11): Allow overriding *note sys.platlibdir: 93f. via a
     new *note PYTHONPLATLIBDIR: 1ab0. environment variable.

   - bpo-40826(12): Fix GIL usage in ‘PyOS_Readline()’: lock the GIL to
     set an exception and pass the Python thread state when checking if
     there is a pending signal.

   - bpo-1635741(13): Port *note fcntl: 59. to multiphase
     initialization.

   - bpo-19468(14): Delete unnecessary instance check in
     importlib.reload().  Patch by Furkan Önder.

   - bpo-40824(15): Unexpected errors in calling the ‘__iter__’ method
     are no longer masked by ‘TypeError’ in the *note in: 2f4. operator
     and functions *note contains(): 8e0, *note indexOf(): 8e1. and
     *note countOf(): 8e2. of the *note operator: 9f. module.

   - bpo-40792(16): Attributes ‘start’, ‘stop’ and ‘step’ of the *note
     range: 94a. object now always has exact type *note int: 257.
     Previously, they could have been an instance of a subclass of
     ‘int’.

   - bpo-40780(17): Fix a corner case where g-style string formatting of
     a float failed to remove trailing zeros.

   - bpo-38964(18): When there’s a *note SyntaxError: 18d. in the
     expression part of an fstring, the filename attribute of the *note
     SyntaxError: 18d. gets correctly set to the name of the file the
     fstring resides in.

   - bpo-40750(19): Support the “-d” debug flag in the new PEG parser.
     Patch by Pablo Galindo

   - bpo-40217(20): Instances of types created with *note
     PyType_FromSpecWithBases(): 57e. will no longer automatically visit
     their class object when traversing references in the garbage
     collector.  The user is expected to manually visit the object’s
     class.  Patch by Pablo Galindo.

   - bpo-39573(21): *note Py_TYPE(): 780. is changed to the inline
     static function.  Patch by Donghee Na.

   - bpo-40696(22): Fix a hang that can arise after *note
     generator.throw(): 4f8. due to a cycle in the exception context
     chain.

   - bpo-40521(23): Each interpreter now its has own free lists,
     singletons and caches:

        * Free lists: float, tuple, list, dict, frame, context,
          asynchronous generator, MemoryError.

        * Singletons: empty tuple, empty bytes string, empty Unicode
          string, single byte character, single Unicode (latin1)
          character.

        * Slice cache.

     They are no longer shared by all interpreters.

   - bpo-40679(24): Certain *note TypeError: 2c3. messages about missing
     or extra arguments now include the function’s *note qualified name:
     1ab1.  Patch by Dennis Sweeney.

   - bpo-29590(25): Make the stack trace correct after calling *note
     generator.throw(): 4f8. on a generator that has yielded from a
     ‘yield from’.

   - bpo-4022(26): Improve performance of generators by not raising
     internal StopIteration.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40947

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40939

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40847

   (4) https://bugs.python.org/issue?@action=redirect&bpo=40890

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40889

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40904

   (7) https://bugs.python.org/issue?@action=redirect&bpo=40903

   (8) https://bugs.python.org/issue?@action=redirect&bpo=40880

   (9) https://bugs.python.org/issue?@action=redirect&bpo=40883

   (10) https://bugs.python.org/issue?@action=redirect&bpo=40870

   (11) https://bugs.python.org/issue?@action=redirect&bpo=40854

   (12) https://bugs.python.org/issue?@action=redirect&bpo=40826

   (13) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (14) https://bugs.python.org/issue?@action=redirect&bpo=19468

   (15) https://bugs.python.org/issue?@action=redirect&bpo=40824

   (16) https://bugs.python.org/issue?@action=redirect&bpo=40792

   (17) https://bugs.python.org/issue?@action=redirect&bpo=40780

   (18) https://bugs.python.org/issue?@action=redirect&bpo=38964

   (19) https://bugs.python.org/issue?@action=redirect&bpo=40750

   (20) https://bugs.python.org/issue?@action=redirect&bpo=40217

   (21) https://bugs.python.org/issue?@action=redirect&bpo=39573

   (22) https://bugs.python.org/issue?@action=redirect&bpo=40696

   (23) https://bugs.python.org/issue?@action=redirect&bpo=40521

   (24) https://bugs.python.org/issue?@action=redirect&bpo=40679

   (25) https://bugs.python.org/issue?@action=redirect&bpo=29590

   (26) https://bugs.python.org/issue?@action=redirect&bpo=4022


File: python.info,  Node: Biblioteca<123>,  Next: Núcleo e embutidos<122>,  Prev: Núcleo e embutidos<121>,  Up: Python 3 10 0 alpha 1

1.23.50.27 Biblioteca
.....................

   - bpo-1635741(1): Port *note mmap: 90. to multiphase initialization.

   - bpo-1635741(2): Port ‘_lzma’ to multiphase initialization.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (2) https://bugs.python.org/issue?@action=redirect&bpo=1635741


File: python.info,  Node: Núcleo e embutidos<122>,  Next: Biblioteca<124>,  Prev: Biblioteca<123>,  Up: Python 3 10 0 alpha 1

1.23.50.28 Núcleo e embutidos
.............................

   - bpo-37999(1): Builtin and extension functions that take integer
     arguments no longer accept *note Decimal: 29d.s, *note Fraction:
     1e7.s and other objects that can be converted to integers only with
     a loss (e.g.  that have the *note __int__(): 71c. method but do not
     have the *note __index__(): 71d. method).

   - bpo-29882(2): Add *note int.bit_count(): 7cd, counting the number
     of ones in the binary representation of an integer.  Patch by
     Niklas Fiekas.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37999

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29882


File: python.info,  Node: Biblioteca<124>,  Next: Núcleo e embutidos<123>,  Prev: Núcleo e embutidos<122>,  Up: Python 3 10 0 alpha 1

1.23.50.29 Biblioteca
.....................

   - bpo-36982(1): Use ncurses extended color functions when available
     to support terminals with 256 colors, and add the new function
     *note curses.has_extended_color_support(): 7f7. to indicate whether
     extended color support is provided by the underlying ncurses
     library.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36982


File: python.info,  Node: Núcleo e embutidos<123>,  Next: Biblioteca<125>,  Prev: Biblioteca<124>,  Up: Python 3 10 0 alpha 1

1.23.50.30 Núcleo e embutidos
.............................

   - bpo-19569(1): Add the private macros ‘_Py_COMP_DIAG_PUSH’,
     ‘_Py_COMP_DIAG_IGNORE_DEPR_DECLS’, and ‘_Py_COMP_DIAG_POP’.

   - bpo-26680(2): The int type now supports the x.is_integer() method
     for compatibility with float.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19569

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26680


File: python.info,  Node: Biblioteca<125>,  Next: Documentação<40>,  Prev: Núcleo e embutidos<123>,  Up: Python 3 10 0 alpha 1

1.23.50.31 Biblioteca
.....................

   - bpo-41900(1): C14N 2.0 serialisation in xml.etree.ElementTree
     failed for unprefixed attributes when a default namespace was
     defined.

   - bpo-41887(2): Strip leading spaces and tabs on *note
     ast.literal_eval(): c32.  Also document stripping of spaces and
     tabs for *note eval(): 180.

   - bpo-41773(3): Note in documentation that *note random.choices():
     ce6. doesn’t support non-finite weights, raise *note ValueError:
     202. when given non-finite weights.

   - bpo-41840(4): Fix a bug in the *note symtable: d8. module that was
     causing module-scope global variables to not be reported as both
     local and global.  Patch by Pablo Galindo.

   - bpo-41842(5): Add *note codecs.unregister(): 7ea. function to
     unregister a codec search function.

   - bpo-40564(6): In ‘zipfile.Path’, mutate the passed ZipFile object
     type instead of making a copy.  Prevents issues when both the local
     copy and the caller’s copy attempt to close the same file handle.

   - bpo-40670(7): More reliable validation of statements in *note
     timeit.Timer: 1510.  It now accepts “empty” statements (only
     whitespaces and comments) and rejects misindentent statements.

   - bpo-41833(8): The *note threading.Thread: 953. constructor now uses
     the target name if the 'target' argument is specified but the
     'name' argument is omitted.

   - bpo-41817(9): fix ‘tkinter.EventType’ Enum so all members are
     strings, and none are tuples

   - bpo-41810(10): *note types.EllipsisType: 854, *note
     types.NotImplementedType: 856. and *note types.NoneType: 855. have
     been reintroduced, providing a new set of types readily
     interpretable by static type checkers.

   - bpo-41815(11): Fix SQLite3 segfault when backing up closed
     database.  Patch contributed by Peter David McCormick.

   - bpo-41816(12): StrEnum added: it ensures that all members are
     already strings or string candidates

   - bpo-41517(13): fix bug allowing Enums to be extended via multiple
     inheritance

   - bpo-39587(14): use the correct mix-in data type when constructing
     Enums

   - bpo-41792(15): Add is_typeddict function to typing.py to check if a
     type is a TypedDict class

     Previously there was no way to check that without using private
     API.  See the relevant issue in python/typing(16).

   - bpo-41789(17): Honor ‘object’ overrides in ‘Enum’ class creation
     (specifically, ‘__str__’, ‘__repr__’, ‘__format__’, and
     ‘__reduce_ex__’).

   - bpo-32218(18): ‘enum.Flag’ and ‘enum.IntFlag’ members are now
     iterable.

   - bpo-39651(19): Fix a race condition in the ‘call_soon_threadsafe()’
     method of ‘asyncio.ProactorEventLoop’: do nothing if the self-pipe
     socket has been closed.

   - bpo-1635741(20): Port the ‘mashal’ extension module to the
     multi-phase initialization API ( PEP 489(21)).

   - bpo-1635741(22): Port the ‘_string’ extension module to the
     multi-phase initialization API ( PEP 489(23)).

   - bpo-41732(24): Added an *note iterator: 1ac. to *note memoryview:
     2eb.

   - bpo-41720(25): Fixed ‘turtle.Vec2D.__rmul__()’ for arguments which
     are not int or float.

   - bpo-41696(26): Fix handling of debug mode in *note asyncio.run():
     47c.  This allows setting ‘PYTHONASYNCIODEBUG’ or ‘-X dev’ to
     enable asyncio debug mode when using *note asyncio.run(): 47c.

   - bpo-41687(27): Fix implementation of sendfile to be compatible with
     Solaris.

   - bpo-41662(28): No longer override exceptions raised in ‘__len__()’
     of a sequence of parameters in *note sqlite3: cf. with *note
     ProgrammingError: 4f2.

   - bpo-39010(29): Restarting a ‘ProactorEventLoop’ on Windows no
     longer logs spurious ‘ConnectionResetErrors’.

   - bpo-41638(30): *note ProgrammingError: 4f2. message for absent
     parameter in *note sqlite3: cf. contains now the name of the
     parameter instead of its index when parameters are supplied as a
     dict.

   - bpo-41662(31): Fixed crash when mutate list of parameters during
     iteration in *note sqlite3: cf.

   - bpo-41513(32): Improved the accuracy of math.hypot().  Internally,
     each step is computed with extra precision so that the result is
     now almost always correctly rounded.

   - bpo-41609(33): The pdb whatis command correctly reports instance
     methods as ‘Method’ rather than ‘Function’.

   - bpo-39994(34): Fixed pprint’s handling of dict subclasses that
     override __repr__.

   - bpo-32751(35): When cancelling the task due to a timeout, *note
     asyncio.wait_for(): 5ff. will now wait until the cancellation is
     complete also in the case when 'timeout' is <= 0, like it does with
     positive timeouts.

   - bpo-37658(36): *note asyncio.wait_for(): 5ff. now properly handles
     races between cancellation of itself and the completion of the
     wrapped awaitable.

   - bpo-40782(37): Change the method
     asyncio.AbstractEventLoop.run_in_executor to not be a coroutine.

   - bpo-41520(38): Fix *note codeop: 1c. regression that prevented
     turning compile warnings into errors.

   - bpo-41528(39): turtle uses math module functions to convert degrees
     to radians and vice versa and to calculate vector norm

   - bpo-41513(40): Minor algorithmic improvement to math.hypot() and
     math.dist() giving small gains in speed and accuracy.

   - bpo-41503(41): Fixed a race between setTarget and flush in
     logging.handlers.MemoryHandler.

   - bpo-41497(42): Fix potential UnicodeDecodeError in dis module.

   - bpo-41467(43): On Windows, fix asyncio ‘recv_into()’ return value
     when the socket/pipe is closed (*note BrokenPipeError: 1095.):
     return ‘0’ rather than an empty byte string (‘b''’).

   - bpo-41425(44): Make tkinter doc example runnable.

   - bpo-41421(45): Make an algebraic simplification to
     random.paretovariate().  It now is slightly less subject to
     round-off error and is slightly faster.  Inputs that used to cause
     ZeroDivisionError now cause an OverflowError instead.

   - bpo-41440(46): Add *note os.cpu_count(): 1c5. support for VxWorks
     RTOS.

   - bpo-41316(47): Fix the *note tarfile: de. module to write only
     basename of TAR file to GZIP compression header.

   - bpo-41384(48): Raise TclError instead of TypeError when an unknown
     option is passed to tkinter.OptionMenu.

   - bpo-41317(49): Use add_done_callback() in
     asyncio.loop.sock_accept() to unsubscribe reader early on
     cancellation.

   - bpo-41364(50): Reduce import overhead of *note uuid: 110.

   - bpo-35328(51): Set the environment variable ‘VIRTUAL_ENV_PROMPT’ at
     *note venv: 111. activation.

   - bpo-41341(52): Recursive evaluation of ‘typing.ForwardRef’ in
     ‘get_type_hints’.

   - bpo-41344(53): Prevent creating ‘shared_memory.SharedMemory’
     objects with ‘size=0’.

   - bpo-41333(54): ‘collections.OrderedDict.pop()’ is now 2 times
     faster.

   - bpo-41288(55): Unpickling invalid NEWOBJ_EX opcode with the C
     implementation raises now UnpicklingError instead of crashing.

   - bpo-39017(56): Avoid infinite loop when reading specially crafted
     TAR files using the tarfile module ( CVE 2019-20907(57)).

   - bpo-41273(58): Speed up any transport using
     ‘_ProactorReadPipeTransport’ by calling ‘recv_into’ instead of
     ‘recv’, thus not creating a new buffer for each ‘recv’ call in the
     transport’s read loop.

   - bpo-41235(59): Fix the error handling in *note
     ssl.SSLContext.load_dh_params(): 1181.

   - bpo-41207(60): In distutils.spawn, restore expectation that
     DistutilsExecError is raised when the command is not found.

   - bpo-29727(61): Register *note array.array: 1a0. as a *note
     MutableSequence: 1a1.  Patch by Pablo Galindo.

   - bpo-39168(62): Remove the ‘__new__’ method of *note typing.Generic:
     15d7.

   - bpo-41194(63): Fix a crash in the ‘_ast’ module: it can no longer
     be loaded more than once.  It now uses a global state rather than a
     module state.

   - bpo-41195(64): Add read-only ssl.SSLContext.security_level
     attribute to retrieve the context’s security level.

   - bpo-41193(65): The ‘write_history()’ atexit function of the
     readline completer now ignores any *note OSError: 417. to ignore
     error if the filesystem is read-only, instead of only ignoring
     *note FileNotFoundError: 42b. and *note PermissionError: d65.

   - bpo-41182(66): selector: use DefaultSelector based upon
     implementation

   - bpo-41161(67): The decimal module now requires libmpdec-2.5.0.
     Users of –with-system-libmpdec should update their system library.

   - bpo-40874(68): The decimal module now requires libmpdec-2.5.0.

   - bpo-41138(69): Fixed the *note trace: fd. module CLI for Python
     source files with non-UTF-8 encoding.

   - bpo-31082(70): Use the term “iterable” in the docstring for *note
     functools.reduce(): 131f.

   - bpo-40521(71): Remove freelist from collections.deque().

   - bpo-31938(72): Fix default-value signatures of several functions in
     the *note select: c1. module - by Anthony Sottile.

   - bpo-41068(73): Fixed reading files with non-ASCII names from ZIP
     archive directly after writing them.

   - bpo-41058(74): ‘pdb.find_function()’ now correctly determines the
     source file encoding.

   - bpo-41056(75): Invalid file descriptor values are now prevented
     from being passed to os.fpathconf.  (discovered by Coverity)

   - bpo-41056(76): Fix a NULL pointer dereference within the ssl module
     during a MemoryError in the keylog callback.  (discovered by
     Coverity)

   - bpo-41056(77): Fixed an instance where a MemoryError within the
     zoneinfo module might not be reported or not reported at its
     source.  (found by Coverity)

   - bpo-41048(78): *note mimetypes.read_mime_types(): 1ab7. function
     reads the rule file using UTF-8 encoding, not the locale encoding.
     Patch by Srinivas Reddy Thatiparthy.

   - bpo-41043(79): Fixed the use of *note glob(): 29f. in the stdlib:
     literal part of the path is now always correctly escaped.

   - bpo-41025(80): Fixed an issue preventing the C implementation of
     *note zoneinfo.ZoneInfo: 8e5. from being subclassed.

   - bpo-35018(81): Add the *note xml.sax.handler.LexicalHandler: 85f.
     class that is present in other SAX XML implementations.

   - bpo-41002(82): Improve performance of HTTPResponse.read with a
     given amount.  Patch by Bruce Merry.

   - bpo-40448(83): *note ensurepip: 55. now disables the use of ‘pip’
     cache when installing the bundled versions of ‘pip’ and
     ‘setuptools’.  Patch by Krzysztof Konopko.

   - bpo-40967(84): Removed ‘asyncio.Task.current_task()’ and
     ‘asyncio.Task.all_tasks()’.  Patch contributed by Rémi Lapeyre.

   - bpo-40924(85): Ensure ‘importlib.resources.path’ returns an extant
     path for the SourceFileLoader’s resource reader.  Avoids the
     regression identified in master while a long-term solution is
     devised.

   - bpo-40955(86): Fix a minor memory leak in *note subprocess: d6.
     module when extra_groups was specified.

   - bpo-40855(87): The standard deviation and variance functions in the
     statistics module were ignoring their mu and xbar arguments.

   - bpo-40939(88): Use the new PEG parser when generating the stdlib
     *note keyword: 84. module.

   - bpo-23427(89): Add *note sys.orig_argv: 843. attribute: the list of
     the original command line arguments passed to the Python
     executable.

   - bpo-33689(90): Ignore empty or whitespace-only lines in .pth files.
     This matches the documentated behavior.  Before, empty lines caused
     the site-packages dir to appear multiple times in sys.path.  By Ido
     Michael, contributors Malcolm Smith and Tal Einat.

   - bpo-40884(91): Added a ‘defaults’ parameter to *note
     logging.Formatter: 14df, to allow specifying default values for
     custom fields.  Patch by Asaf Alon and Bar Harel.

   - bpo-40876(92): Clarify error message in the *note csv: 29. module.

   - bpo-39791(93): Refresh importlib.metadata from importlib_metadata
     1.6.1.

   - bpo-40807(94): Stop codeop._maybe_compile, used by
     code.InteractiveInterpreter (and IDLE). from emitting each warning
     three times.

   - bpo-32604(95): Fix reference leak in the *note select: c1. module
     when the module is imported in a subinterpreter.

   - bpo-39791(96): Built-in loaders (SourceFileLoader and ZipImporter)
     now supply ‘TraversableResources’ implementations for
     ‘ResourceReader’, and the fallback function has been removed.

   - bpo-39314(97): *note rlcompleter.Completer: 1ab8. and the standard
     Python shell now close the parenthesis for functions that take no
     arguments.  Patch contributed by Rémi Lapeyre.

   - bpo-17005(98): The topological sort functionality that was
     introduced initially in the *note functools: 5f. module has been
     moved to a new *note graphlib: 65. module to better accommodate the
     new tools and keep the original scope of the *note functools: 5f.
     module.  Patch by Pablo Galindo

   - bpo-40834(99): Fix truncate when sending str object
     with_xxsubinterpreters.channel_send.

   - bpo-40755(100): Add rich comparisons to collections.Counter().

   - bpo-26407(101): Unexpected errors in calling the ‘__iter__’ method
     are no longer masked by ‘TypeError’ in *note csv.reader(): 486,
     ‘csv.writer.writerow()’ and ‘csv.writer.writerows()’.

   - bpo-39384(102): Fixed email.contentmanager to allow set_content()
     to set a null string.

   - bpo-40744(103): The *note sqlite3: cf. module uses SQLite API
     functions that require SQLite v3.7.3 or higher.  This patch removes
     support for older SQLite versions, and explicitly requires SQLite
     3.7.3 both at build, compile and runtime.  Patch by Sergey Fedoseev
     and Erlend E. Aasland.

   - bpo-40777(104): Initialize PyDateTime_IsoCalendarDateType.tp_base
     at run-time to avoid errors on some compilers.

   - bpo-38488(105): Update ensurepip to install pip 20.1.1 and
     setuptools 47.1.0.

   - bpo-40792(106): The result of *note operator.index(): 1a5e. now
     always has exact type *note int: 257.  Previously, the result could
     have been an instance of a subclass of ‘int’.

   - bpo-40767(107): *note webbrowser: 115. now properly finds the
     default browser in pure Wayland systems by checking the
     WAYLAND_DISPLAY environment variable.  Patch contributed by Jérémy
     Attali.

   - bpo-40791(108): ‘hashlib.compare_digest()’ uses OpenSSL’s
     ‘CRYPTO_memcmp()’ function when OpenSSL is available.

   - bpo-40795(109): *note ctypes: 2a. module: If ctypes fails to
     convert the result of a callback or if a ctypes callback function
     raises an exception, sys.unraisablehook is now called with an
     exception set.  Previously, the error was logged into stderr by
     *note PyErr_Print(): 1ab9.

   - bpo-16995(110): Add *note base64.b32hexencode(): 7e5. and *note
     base64.b32hexdecode(): 7e6. to support the Base32 Encoding with
     Extended Hex Alphabet.

   - bpo-30008(111): Fix *note ssl: d0. code to be compatible with
     OpenSSL 1.1.x builds that use ‘no-deprecated’ and ‘--api=1.1.0’.

   - bpo-30064(112): Fix asyncio ‘loop.sock_*’ race condition issue

   - bpo-40759(113): Deprecate the ‘symbol’ module.

   - bpo-40756(114): The second argument (extra) of
     ‘LoggerAdapter.__init__’ now defaults to None.

   - bpo-37129(115): Add a new *note os.RWF_APPEND: 1aba. flag for *note
     os.pwritev(): b76.

   - bpo-40737(116): Fix possible reference leak for *note sqlite3: cf.
     initialization.

   - bpo-40726(117): Handle cases where the ‘end_lineno’ is ‘None’ on
     *note ast.increment_lineno(): 1895.

   - bpo-40698(118): ‘distutils’ upload creates SHA2-256 and Blake2b-256
     digests.  MD5 digests is skipped if platform blocks MD5.

   - bpo-40695(119): *note hashlib: 68. no longer falls back to builtin
     hash implementations when OpenSSL provides a hash digest and the
     algorithm is blocked by security policy.

   - bpo-9216(120): *note hashlib.new(): 1abb. passed ‘usedforsecurity’
     to OpenSSL EVP constructor ‘_hashlib.new()’.  test_hashlib and
     test_smtplib handle strict security policy better.

   - bpo-40614(121): *note ast.parse(): 1a8. will not parse self
     documenting expressions in f-strings when passed ‘feature_version’
     is less than ‘(3, 8)’.

   - bpo-40626(122): Add h5 file extension as MIME Type
     application/x-hdf5, as per HDF Group recommendation for HDF5
     formatted data files.  Patch contributed by Mark Schwab.

   - bpo-25920(123): On macOS, when building Python for macOS 10.4 and
     older, which wasn’t the case for python.org macOS installer, *note
     socket.getaddrinfo(): 184b. no longer uses an internal lock to
     prevent race conditions when calling ‘getaddrinfo()’ which is
     thread-safe since macOS 10.5.  Python 3.9 requires macOS 10.6 or
     newer.  The internal lock caused random hang on fork when another
     thread was calling *note socket.getaddrinfo(): 184b.  The lock was
     also used on FreeBSD older than 5.3, OpenBSD older than 201311 and
     NetBSD older than 4.

   - bpo-40671(124): Prepare ‘_hashlib’ for PEP 489(125) and use *note
     PyModule_AddType(): 97c.

   - bpo-32309(126): Added a new *note coroutine: 491. *note
     asyncio.to_thread(): 8ee.  It is mainly used for running IO-bound
     functions in a separate thread to avoid blocking the event loop,
     and essentially works as a high-level version of *note
     run_in_executor(): 8ef. that can directly take keyword arguments.

   - bpo-36543(127): Restored the deprecated ‘xml.etree.cElementTree’
     module.

   - bpo-40611(128): *note MAP_POPULATE: 1abc. constant has now been
     added to the list of exported *note mmap: 90. module flags.

   - bpo-39881(129): PEP 554 for use in the test suite.  (Patch By
     Joannah Nanjekye)

   - bpo-13097(130): ‘ctypes’ now raises an ‘ArgumentError’ when a
     callback is invoked with more than 1024 arguments.

   - bpo-39385(131): A new test assertion context-manager,
     ‘unittest.assertNoLogs()’ will ensure a given block of code emits
     no log messages using the logging module.  Contributed by Kit Yan
     Choi.

   - bpo-23082(132): Updated the error message and docs of
     PurePath.relative_to() to better reflect the function behaviour.

   - bpo-40318(133): Use SQLite3 trace v2 API, if it is available.

   - bpo-40105(134): ZipFile truncates files to avoid corruption when a
     shorter comment is provided in append (“a”) mode.  Patch by Jan
     Mazur.

   - bpo-40084(135): Fix ‘Enum.__dir__’: dir(Enum.member) now includes
     attributes as well as methods.

   - bpo-31122(136): ssl.wrap_socket() now raises ssl.SSLEOFError rather
     than OSError when peer closes connection during TLS negotiation

   - bpo-39728(137): fix default ‘_missing_’ so a duplicate ‘ValueError’
     is not set as the ‘__context__’ of the original ‘ValueError’.

   - bpo-39244(138): Fixed
     ‘multiprocessing.context.get_all_start_methods’ to properly return
     the default method first on macOS.

   - bpo-39040(139): Fix parsing of invalid mime headers parameters by
     collapsing whitespace between encoded words in a bare-quote-string.

   - bpo-38731(140): Add ‘--quiet’ option to command-line interface of
     *note py_compile: b3.  Patch by Gregory Schevchenko.

   - bpo-35714(141): *note struct.error: 1368. is now raised if there is
     a null character in a *note struct: d5. format string.

   - bpo-38144(142): Added the 'root_dir' and 'dir_fd' parameters in
     *note glob.glob(): 29f.

   - bpo-26543(143): Fix ‘IMAP4.noop()’ when debug mode is enabled (ex:
     ‘imaplib.Debug = 3’).

   - bpo-12178(144): *note csv.writer(): 487. now correctly escapes
     'escapechar' when input contains 'escapechar'.  Patch by Catalin
     Iacob, Berker Peksag, and Itay Elbirt.

   - bpo-36290(145): AST nodes are now raising *note TypeError: 2c3. on
     conflicting keyword arguments.  Patch contributed by Rémi Lapeyre.

   - bpo-33944(146): Added site.py site-packages tracing in verbose
     mode.

   - bpo-35078(147): Refactor formatweekday, formatmonthname methods in
     LocaleHTMLCalendar and LocaleTextCalendar classes in calendar
     module to call the base class methods.This enables customizable CSS
     classes for LocaleHTMLCalendar.  Patch by Srinivas Reddy
     Thatiparthy

   - bpo-29620(148): *note assertWarns(): 11a3. no longer raises a
     ‘RuntimeException’ when accessing a module’s ‘__warningregistry__’
     causes importation of a new module, or when a new module is
     imported in another thread.  Patch by Kernc.

   - bpo-31844(149): Remove ‘ParserBase.error()’ method from the private
     and undocumented ‘_markupbase’ module.  *note
     html.parser.HTMLParser: 87b. is the only subclass of ‘ParserBase’
     and its ‘error()’ implementation was deprecated in Python 3.4 and
     removed in Python 3.5.

   - bpo-34226(150): Fix ‘cgi.parse_multipart’ without content_length.
     Patch by Roger Duran

   - bpo-33660(151): Fix pathlib.PosixPath to resolve a relative path
     located on the root directory properly.

   - bpo-28557(152): Improve the error message for a misbehaving
     ‘rawio.readinto’

   - bpo-26680(153): The d.is_integer() method is added to the Decimal
     type, for compatibility with other number types.

   - bpo-26680(154): The x.is_integer() method is incorporated into the
     abstract types of the numeric tower, Real, Rational and Integral,
     with appropriate default implementations.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41900

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41887

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41773

   (4) https://bugs.python.org/issue?@action=redirect&bpo=41840

   (5) https://bugs.python.org/issue?@action=redirect&bpo=41842

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40564

   (7) https://bugs.python.org/issue?@action=redirect&bpo=40670

   (8) https://bugs.python.org/issue?@action=redirect&bpo=41833

   (9) https://bugs.python.org/issue?@action=redirect&bpo=41817

   (10) https://bugs.python.org/issue?@action=redirect&bpo=41810

   (11) https://bugs.python.org/issue?@action=redirect&bpo=41815

   (12) https://bugs.python.org/issue?@action=redirect&bpo=41816

   (13) https://bugs.python.org/issue?@action=redirect&bpo=41517

   (14) https://bugs.python.org/issue?@action=redirect&bpo=39587

   (15) https://bugs.python.org/issue?@action=redirect&bpo=41792

   (16) https://github.com/python/typing/issues/751

   (17) https://bugs.python.org/issue?@action=redirect&bpo=41789

   (18) https://bugs.python.org/issue?@action=redirect&bpo=32218

   (19) https://bugs.python.org/issue?@action=redirect&bpo=39651

   (20) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (21) https://peps.python.org/pep-0489/

   (22) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (23) https://peps.python.org/pep-0489/

   (24) https://bugs.python.org/issue?@action=redirect&bpo=41732

   (25) https://bugs.python.org/issue?@action=redirect&bpo=41720

   (26) https://bugs.python.org/issue?@action=redirect&bpo=41696

   (27) https://bugs.python.org/issue?@action=redirect&bpo=41687

   (28) https://bugs.python.org/issue?@action=redirect&bpo=41662

   (29) https://bugs.python.org/issue?@action=redirect&bpo=39010

   (30) https://bugs.python.org/issue?@action=redirect&bpo=41638

   (31) https://bugs.python.org/issue?@action=redirect&bpo=41662

   (32) https://bugs.python.org/issue?@action=redirect&bpo=41513

   (33) https://bugs.python.org/issue?@action=redirect&bpo=41609

   (34) https://bugs.python.org/issue?@action=redirect&bpo=39994

   (35) https://bugs.python.org/issue?@action=redirect&bpo=32751

   (36) https://bugs.python.org/issue?@action=redirect&bpo=37658

   (37) https://bugs.python.org/issue?@action=redirect&bpo=40782

   (38) https://bugs.python.org/issue?@action=redirect&bpo=41520

   (39) https://bugs.python.org/issue?@action=redirect&bpo=41528

   (40) https://bugs.python.org/issue?@action=redirect&bpo=41513

   (41) https://bugs.python.org/issue?@action=redirect&bpo=41503

   (42) https://bugs.python.org/issue?@action=redirect&bpo=41497

   (43) https://bugs.python.org/issue?@action=redirect&bpo=41467

   (44) https://bugs.python.org/issue?@action=redirect&bpo=41425

   (45) https://bugs.python.org/issue?@action=redirect&bpo=41421

   (46) https://bugs.python.org/issue?@action=redirect&bpo=41440

   (47) https://bugs.python.org/issue?@action=redirect&bpo=41316

   (48) https://bugs.python.org/issue?@action=redirect&bpo=41384

   (49) https://bugs.python.org/issue?@action=redirect&bpo=41317

   (50) https://bugs.python.org/issue?@action=redirect&bpo=41364

   (51) https://bugs.python.org/issue?@action=redirect&bpo=35328

   (52) https://bugs.python.org/issue?@action=redirect&bpo=41341

   (53) https://bugs.python.org/issue?@action=redirect&bpo=41344

   (54) https://bugs.python.org/issue?@action=redirect&bpo=41333

   (55) https://bugs.python.org/issue?@action=redirect&bpo=41288

   (56) https://bugs.python.org/issue?@action=redirect&bpo=39017

   (57) https://www.cve.org/CVERecord?id=CVE-2019-20907

   (58) https://bugs.python.org/issue?@action=redirect&bpo=41273

   (59) https://bugs.python.org/issue?@action=redirect&bpo=41235

   (60) https://bugs.python.org/issue?@action=redirect&bpo=41207

   (61) https://bugs.python.org/issue?@action=redirect&bpo=29727

   (62) https://bugs.python.org/issue?@action=redirect&bpo=39168

   (63) https://bugs.python.org/issue?@action=redirect&bpo=41194

   (64) https://bugs.python.org/issue?@action=redirect&bpo=41195

   (65) https://bugs.python.org/issue?@action=redirect&bpo=41193

   (66) https://bugs.python.org/issue?@action=redirect&bpo=41182

   (67) https://bugs.python.org/issue?@action=redirect&bpo=41161

   (68) https://bugs.python.org/issue?@action=redirect&bpo=40874

   (69) https://bugs.python.org/issue?@action=redirect&bpo=41138

   (70) https://bugs.python.org/issue?@action=redirect&bpo=31082

   (71) https://bugs.python.org/issue?@action=redirect&bpo=40521

   (72) https://bugs.python.org/issue?@action=redirect&bpo=31938

   (73) https://bugs.python.org/issue?@action=redirect&bpo=41068

   (74) https://bugs.python.org/issue?@action=redirect&bpo=41058

   (75) https://bugs.python.org/issue?@action=redirect&bpo=41056

   (76) https://bugs.python.org/issue?@action=redirect&bpo=41056

   (77) https://bugs.python.org/issue?@action=redirect&bpo=41056

   (78) https://bugs.python.org/issue?@action=redirect&bpo=41048

   (79) https://bugs.python.org/issue?@action=redirect&bpo=41043

   (80) https://bugs.python.org/issue?@action=redirect&bpo=41025

   (81) https://bugs.python.org/issue?@action=redirect&bpo=35018

   (82) https://bugs.python.org/issue?@action=redirect&bpo=41002

   (83) https://bugs.python.org/issue?@action=redirect&bpo=40448

   (84) https://bugs.python.org/issue?@action=redirect&bpo=40967

   (85) https://bugs.python.org/issue?@action=redirect&bpo=40924

   (86) https://bugs.python.org/issue?@action=redirect&bpo=40955

   (87) https://bugs.python.org/issue?@action=redirect&bpo=40855

   (88) https://bugs.python.org/issue?@action=redirect&bpo=40939

   (89) https://bugs.python.org/issue?@action=redirect&bpo=23427

   (90) https://bugs.python.org/issue?@action=redirect&bpo=33689

   (91) https://bugs.python.org/issue?@action=redirect&bpo=40884

   (92) https://bugs.python.org/issue?@action=redirect&bpo=40876

   (93) https://bugs.python.org/issue?@action=redirect&bpo=39791

   (94) https://bugs.python.org/issue?@action=redirect&bpo=40807

   (95) https://bugs.python.org/issue?@action=redirect&bpo=32604

   (96) https://bugs.python.org/issue?@action=redirect&bpo=39791

   (97) https://bugs.python.org/issue?@action=redirect&bpo=39314

   (98) https://bugs.python.org/issue?@action=redirect&bpo=17005

   (99) https://bugs.python.org/issue?@action=redirect&bpo=40834

   (100) https://bugs.python.org/issue?@action=redirect&bpo=40755

   (101) https://bugs.python.org/issue?@action=redirect&bpo=26407

   (102) https://bugs.python.org/issue?@action=redirect&bpo=39384

   (103) https://bugs.python.org/issue?@action=redirect&bpo=40744

   (104) https://bugs.python.org/issue?@action=redirect&bpo=40777

   (105) https://bugs.python.org/issue?@action=redirect&bpo=38488

   (106) https://bugs.python.org/issue?@action=redirect&bpo=40792

   (107) https://bugs.python.org/issue?@action=redirect&bpo=40767

   (108) https://bugs.python.org/issue?@action=redirect&bpo=40791

   (109) https://bugs.python.org/issue?@action=redirect&bpo=40795

   (110) https://bugs.python.org/issue?@action=redirect&bpo=16995

   (111) https://bugs.python.org/issue?@action=redirect&bpo=30008

   (112) https://bugs.python.org/issue?@action=redirect&bpo=30064

   (113) https://bugs.python.org/issue?@action=redirect&bpo=40759

   (114) https://bugs.python.org/issue?@action=redirect&bpo=40756

   (115) https://bugs.python.org/issue?@action=redirect&bpo=37129

   (116) https://bugs.python.org/issue?@action=redirect&bpo=40737

   (117) https://bugs.python.org/issue?@action=redirect&bpo=40726

   (118) https://bugs.python.org/issue?@action=redirect&bpo=40698

   (119) https://bugs.python.org/issue?@action=redirect&bpo=40695

   (120) https://bugs.python.org/issue?@action=redirect&bpo=9216

   (121) https://bugs.python.org/issue?@action=redirect&bpo=40614

   (122) https://bugs.python.org/issue?@action=redirect&bpo=40626

   (123) https://bugs.python.org/issue?@action=redirect&bpo=25920

   (124) https://bugs.python.org/issue?@action=redirect&bpo=40671

   (125) https://peps.python.org/pep-0489/

   (126) https://bugs.python.org/issue?@action=redirect&bpo=32309

   (127) https://bugs.python.org/issue?@action=redirect&bpo=36543

   (128) https://bugs.python.org/issue?@action=redirect&bpo=40611

   (129) https://bugs.python.org/issue?@action=redirect&bpo=39881

   (130) https://bugs.python.org/issue?@action=redirect&bpo=13097

   (131) https://bugs.python.org/issue?@action=redirect&bpo=39385

   (132) https://bugs.python.org/issue?@action=redirect&bpo=23082

   (133) https://bugs.python.org/issue?@action=redirect&bpo=40318

   (134) https://bugs.python.org/issue?@action=redirect&bpo=40105

   (135) https://bugs.python.org/issue?@action=redirect&bpo=40084

   (136) https://bugs.python.org/issue?@action=redirect&bpo=31122

   (137) https://bugs.python.org/issue?@action=redirect&bpo=39728

   (138) https://bugs.python.org/issue?@action=redirect&bpo=39244

   (139) https://bugs.python.org/issue?@action=redirect&bpo=39040

   (140) https://bugs.python.org/issue?@action=redirect&bpo=38731

   (141) https://bugs.python.org/issue?@action=redirect&bpo=35714

   (142) https://bugs.python.org/issue?@action=redirect&bpo=38144

   (143) https://bugs.python.org/issue?@action=redirect&bpo=26543

   (144) https://bugs.python.org/issue?@action=redirect&bpo=12178

   (145) https://bugs.python.org/issue?@action=redirect&bpo=36290

   (146) https://bugs.python.org/issue?@action=redirect&bpo=33944

   (147) https://bugs.python.org/issue?@action=redirect&bpo=35078

   (148) https://bugs.python.org/issue?@action=redirect&bpo=29620

   (149) https://bugs.python.org/issue?@action=redirect&bpo=31844

   (150) https://bugs.python.org/issue?@action=redirect&bpo=34226

   (151) https://bugs.python.org/issue?@action=redirect&bpo=33660

   (152) https://bugs.python.org/issue?@action=redirect&bpo=28557

   (153) https://bugs.python.org/issue?@action=redirect&bpo=26680

   (154) https://bugs.python.org/issue?@action=redirect&bpo=26680


File: python.info,  Node: Documentação<40>,  Next: Testes<44>,  Prev: Biblioteca<125>,  Up: Python 3 10 0 alpha 1

1.23.50.32 Documentação
.......................

   - bpo-41428(1): Add documentation for PEP 604(2) (Allow writing union
     types as ‘X | Y’).

   - bpo-41774(3): In Programming FAQ “Sequences (Tuples/Lists)”
     section, add “How do you remove multiple items from a list”.

   - bpo-35293(4): Fix RemovedInSphinx40Warning when building the
     documentation.  Patch by Donghee Na.

   - bpo-37149(5): Change Shipman tkinter doc link from archive.org to
     TkDocs.  (The doc has been removed from the NMT server.)  The new
     link responds much faster and includes a short explanatory note.

   - bpo-41726(6): Update the refcounts info of
     ‘PyType_FromModuleAndSpec’.

   - bpo-41624(7): Fix the signature of *note typing.Coroutine: 1abe.

   - bpo-40204(8): Enable Sphinx 3.2 ‘c_allow_pre_v3’ option and disable
     ‘c_warn_on_allowed_pre_v3’ option to make the documentation
     compatible with Sphinx 2 and Sphinx 3.

   - bpo-41045(9): Add documentation for debug feature of f-strings.

   - bpo-41314(10): Changed the release when ‘from __future__ import
     annotations’ becomes the default from ‘4.0’ to ‘3.10’ (following a
     change in PEP 563).

   - bpo-40979(11): Refactored typing.rst, arranging more than 70
     classes, functions, and decorators into new sub-sections.

   - bpo-40552(12): Fix in tutorial section 4.2.  Code snippet is now
     correct.

   - bpo-39883(13): Make code, examples, and recipes in the Python
     documentation be licensed under the more permissive BSD0 license in
     addition to the existing Python 2.0 license.

   - bpo-37703(14): Updated Documentation to comprehensively elaborate
     on the behaviour of gather.cancel()

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41428

   (2) https://peps.python.org/pep-0604/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41774

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35293

   (5) https://bugs.python.org/issue?@action=redirect&bpo=37149

   (6) https://bugs.python.org/issue?@action=redirect&bpo=41726

   (7) https://bugs.python.org/issue?@action=redirect&bpo=41624

   (8) https://bugs.python.org/issue?@action=redirect&bpo=40204

   (9) https://bugs.python.org/issue?@action=redirect&bpo=41045

   (10) https://bugs.python.org/issue?@action=redirect&bpo=41314

   (11) https://bugs.python.org/issue?@action=redirect&bpo=40979

   (12) https://bugs.python.org/issue?@action=redirect&bpo=40552

   (13) https://bugs.python.org/issue?@action=redirect&bpo=39883

   (14) https://bugs.python.org/issue?@action=redirect&bpo=37703


File: python.info,  Node: Testes<44>,  Next: Construção<48>,  Prev: Documentação<40>,  Up: Python 3 10 0 alpha 1

1.23.50.33 Testes
.................

   - bpo-41939(1): Fix test_site.test_license_exists_at_url(): call
     ‘urllib.request.urlcleanup()’ to reset the global
     ‘urllib.request._opener’.  Patch by Victor Stinner.

   - bpo-41731(2): Make test_cmd_line_script pass with option ‘-vv’.

   - bpo-41602(3): Add tests for SIGINT handling in the runpy module.

   - bpo-41521(4): *note test.support: e4.: Rename ‘blacklist’ parameter
     of *note check__all__(): 1ac0. to ‘not_exported’.

   - bpo-41477(5): Make ctypes optional in test_genericalias.

   - bpo-41085(6): Fix integer overflow in the *note
     array.array.index(): 7e2. method on 64-bit Windows for index larger
     than ‘2**31’.

   - bpo-41069(7): ‘test.support.TESTFN’ and the current directory for
     tests when run via ‘test.regrtest’ contain now non-ascii characters
     if possible.

   - bpo-38377(8): On Linux, skip tests using multiprocessing if the
     current user cannot create a file in ‘/dev/shm/’ directory.  Add
     the *note skip_if_broken_multiprocessing_synchronize(): 1ac1.
     function to the *note test.support: e4. module.

   - bpo-41009(9): Fix use of
     ‘support.require_{linux|mac|freebsd}_version()’ decorators as class
     decorator.

   - bpo-41003(10): Fix ‘test_copyreg’ when ‘numpy’ is installed:
     ‘test.pickletester’ now saves/restores warnings filters when
     importing ‘numpy’, to ignore filters installed by ‘numpy’.

   - bpo-40964(11): Disable remote *note imaplib: 74. tests, host
     cyrus.andrew.cmu.edu is blocking incoming connections.

   - bpo-40927(12): Fix test_binhex when run twice: it now uses
     import_fresh_module() to ensure that it raises DeprecationWarning
     each time.

   - bpo-17258(13): Skip some *note multiprocessing: 94. tests when MD5
     hash digest is blocked.

   - bpo-31904(14): Increase LOOPBACK_TIMEOUT to 10 for VxWorks RTOS.

   - bpo-38169(15): Increase code coverage for SharedMemory and
     ShareableList

   - bpo-34401(16): Make test_gdb properly run on HP-UX. Patch by
     Michael Osipov.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41939

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41731

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41602

   (4) https://bugs.python.org/issue?@action=redirect&bpo=41521

   (5) https://bugs.python.org/issue?@action=redirect&bpo=41477

   (6) https://bugs.python.org/issue?@action=redirect&bpo=41085

   (7) https://bugs.python.org/issue?@action=redirect&bpo=41069

   (8) https://bugs.python.org/issue?@action=redirect&bpo=38377

   (9) https://bugs.python.org/issue?@action=redirect&bpo=41009

   (10) https://bugs.python.org/issue?@action=redirect&bpo=41003

   (11) https://bugs.python.org/issue?@action=redirect&bpo=40964

   (12) https://bugs.python.org/issue?@action=redirect&bpo=40927

   (13) https://bugs.python.org/issue?@action=redirect&bpo=17258

   (14) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (15) https://bugs.python.org/issue?@action=redirect&bpo=38169

   (16) https://bugs.python.org/issue?@action=redirect&bpo=34401


File: python.info,  Node: Construção<48>,  Next: Windows<41>,  Prev: Testes<44>,  Up: Python 3 10 0 alpha 1

1.23.50.34 Construção
.....................

   - bpo-38249(1): Update *note Py_UNREACHABLE: bcd. to use
     __builtin_unreachable() if only the compiler is able to use it.
     Patch by Donghee Na.

   - bpo-41617(2): Fix ‘pycore_bitutils.h’ header file to support old
     clang versions: ‘__builtin_bswap16()’ is not available in LLVM
     clang 3.0.

   - bpo-40204(3): Pin Sphinx version to 2.3.1 in ‘Doc/Makefile’.

   - bpo-36020(4): The C99 functions ‘snprintf()’ and ‘vsnprintf()’ are
     now required to build Python.

   - bpo-40684(5): ‘make install’ now uses the ‘PLATLIBDIR’ variable for
     the destination ‘lib-dynload/’ directory when ‘./configure
     --with-platlibdir’ is used.

   - bpo-40683(6): Fixed an issue where the *note zoneinfo: 134. module
     and its tests were not included when Python is installed with
     ‘make’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38249

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41617

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40204

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36020

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40684

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40683


File: python.info,  Node: Windows<41>,  Next: macOS<33>,  Prev: Construção<48>,  Up: Python 3 10 0 alpha 1

1.23.50.35 Windows
..................

   - bpo-41744(1): Fixes automatic import of props file when using the
     Nuget package.

   - bpo-41627(2): The user site directory for 32-bit now includes a
     ‘-32’ suffix to distinguish it from the 64-bit interpreter’s
     directory.

   - bpo-41526(3): Fixed layout of final page of the installer by
     removing the special thanks to Mark Hammond (with his permission).

   - bpo-41492(4): Fixes the description that appears in UAC prompts.

   - bpo-40948(5): Improve post-install message to direct people to the
     “py” command.

   - bpo-41412(6): The installer will now fail to install on Windows 7
     and Windows 8.  Further, the UCRT dependency is now always
     downloaded on demand.

   - bpo-40741(7): Update Windows release to include SQLite 3.32.3.

   - bpo-41142(8): ‘msilib’ now supports creating CAB files with
     non-ASCII file path and adding files with non-ASCII file path to
     them.

   - bpo-41074(9): Fixed support of non-ASCII names in functions
     ‘msilib.OpenDatabase()’ and ‘msilib.init_database()’ and non-ASCII
     SQL in method ‘msilib.Database.OpenView()’.

   - bpo-41039(10): Stable ABI redirection DLL (python3.dll) now uses
     ‘#pragma comment(linker)’ for re-exporting.

   - bpo-40164(11): Updates Windows OpenSSL to 1.1.1g

   - bpo-39631(12): Changes the registered MIME type for ‘.py’ files on
     Windows to ‘text/x-python’ instead of ‘text/plain’.

   - bpo-40677(13): Manually define IO_REPARSE_TAG_APPEXECLINK in case
     some old Windows SDK doesn’t have it.

   - bpo-37556(14): Extend py.exe help to mention overrides via venv,
     shebang, environmental variables & ini files.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41744

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41627

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41526

   (4) https://bugs.python.org/issue?@action=redirect&bpo=41492

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40948

   (6) https://bugs.python.org/issue?@action=redirect&bpo=41412

   (7) https://bugs.python.org/issue?@action=redirect&bpo=40741

   (8) https://bugs.python.org/issue?@action=redirect&bpo=41142

   (9) https://bugs.python.org/issue?@action=redirect&bpo=41074

   (10) https://bugs.python.org/issue?@action=redirect&bpo=41039

   (11) https://bugs.python.org/issue?@action=redirect&bpo=40164

   (12) https://bugs.python.org/issue?@action=redirect&bpo=39631

   (13) https://bugs.python.org/issue?@action=redirect&bpo=40677

   (14) https://bugs.python.org/issue?@action=redirect&bpo=37556


File: python.info,  Node: macOS<33>,  Next: IDLE<30>,  Prev: Windows<41>,  Up: Python 3 10 0 alpha 1

1.23.50.36 macOS
................

   - bpo-41557(1): Update macOS installer to use SQLite 3.33.0.

   - bpo-39580(2): Avoid opening Finder window if running installer from
     the command line.  Patch contributed by Rick Heil.

   - bpo-41100(3): Fix configure error when building on macOS 11.  Note
     that the current Python release was released shortly after the
     first developer preview of macOS 11 (Big Sur); there are other
     known issues with building and running on the developer preview.
     Big Sur is expected to be fully supported in a future bugfix
     release of Python 3.8.x and with 3.9.0.

   - bpo-40741(4): Update macOS installer to use SQLite 3.32.3.

   - bpo-41005(5): fixed an XDG settings issue not allowing macos to
     open browser in webbrowser.py

   - bpo-40741(6): Update macOS installer to use SQLite 3.32.2.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41557

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39580

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41100

   (4) https://bugs.python.org/issue?@action=redirect&bpo=40741

   (5) https://bugs.python.org/issue?@action=redirect&bpo=41005

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40741


File: python.info,  Node: IDLE<30>,  Next: API C<44>,  Prev: macOS<33>,  Up: Python 3 10 0 alpha 1

1.23.50.37 IDLE
...............

   - bpo-41775(1): Use ‘IDLE Shell’ as shell title

   - bpo-35764(2): Rewrite the Calltips doc section.

   - bpo-40181(3): In calltips, stop reminding that ‘/’ marks the end of
     positional-only arguments.

   - bpo-41468(4): Improve IDLE run crash error message (which users
     should never see).

   - bpo-41373(5): Save files loaded with no line ending, as when blank,
     or different line endings, by setting its line ending to the system
     default.  Fix regression in 3.8.4 and 3.9.0b4.

   - bpo-41300(6): Save files with non-ascii chars.  Fix regression
     released in 3.9.0b4 and 3.8.4.

   - bpo-37765(7): Add keywords to module name completion list.  Rewrite
     Completions section of IDLE doc.

   - bpo-41152(8): The encoding of ‘stdin’, ‘stdout’ and ‘stderr’ in
     IDLE is now always UTF-8.

   - bpo-41144(9): Make Open Module open a special module such as
     os.path.

   - bpo-39885(10): Make context menu Cut and Copy work again when
     right-clicking within a selection.

   - bpo-40723(11): Make test_idle pass when run after import.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41775

   (2) https://bugs.python.org/issue?@action=redirect&bpo=35764

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40181

   (4) https://bugs.python.org/issue?@action=redirect&bpo=41468

   (5) https://bugs.python.org/issue?@action=redirect&bpo=41373

   (6) https://bugs.python.org/issue?@action=redirect&bpo=41300

   (7) https://bugs.python.org/issue?@action=redirect&bpo=37765

   (8) https://bugs.python.org/issue?@action=redirect&bpo=41152

   (9) https://bugs.python.org/issue?@action=redirect&bpo=41144

   (10) https://bugs.python.org/issue?@action=redirect&bpo=39885

   (11) https://bugs.python.org/issue?@action=redirect&bpo=40723


File: python.info,  Node: API C<44>,  Prev: IDLE<30>,  Up: Python 3 10 0 alpha 1

1.23.50.38 API C
................

   - bpo-41936(1): Removed undocumented macros ‘Py_ALLOW_RECURSION’ and
     ‘Py_END_ALLOW_RECURSION’ and the ‘recursion_critical’ field of the
     *note PyInterpreterState: 8c2. structure.

   - bpo-41692(2): The ‘PyUnicode_InternImmortal()’ function is now
     deprecated and will be removed in Python 3.12: use *note
     PyUnicode_InternInPlace(): 8b6. instead.  Patch by Victor Stinner.

   - bpo-41842(3): Add *note PyCodec_Unregister(): 89b. function to
     unregister a codec search function.

   - bpo-41834(4): Remove the ‘_Py_CheckRecursionLimit’ variable: it has
     been replaced by ‘ceval.recursion_limit’ of the *note
     PyInterpreterState: 8c2. structure.  Patch by Victor Stinner.

   - bpo-41689(5): Types created with *note PyType_FromSpec(): 57d. now
     make any signature in their ‘tp_doc’ slot accessible from
     ‘__text_signature__’.

   - bpo-41524(6): Fix bug in *note PyOS_mystrnicmp(): 1ac7. and *note
     PyOS_mystricmp(): 1ac8. that incremented pointers beyond the end of
     a string.

   - bpo-41324(7): Add a minimal decimal capsule API. The API supports
     fast conversions between Decimals up to 38 digits and their triple
     representation as a C struct.

   - bpo-30155(8): Add *note PyDateTime_DATE_GET_TZINFO(): 899. and
     *note PyDateTime_TIME_GET_TZINFO(): 89a. macros for accessing the
     ‘tzinfo’ attributes of *note datetime.datetime: 1cc. and *note
     datetime.time: 1ce. objects.

   - bpo-40170(9): Revert *note PyType_HasFeature(): 1ac9. change: it
     reads again directly the *note PyTypeObject.tp_flags: 19fd. member
     when the limited C API is not used, rather than always calling
     *note PyType_GetFlags(): 1aca. which hides implementation details.

   - bpo-41123(10): Remove ‘PyUnicode_AsUnicodeCopy’.

   - bpo-41123(11): Removed ‘PyLong_FromUnicode()’.

   - bpo-41123(12): Removed ‘PyUnicode_GetMax()’.

   - bpo-41123(13): Removed ‘Py_UNICODE_str*’ functions manipulating
     ‘Py_UNICODE*’ strings.

   - bpo-41103(14): ‘PyObject_AsCharBuffer()’,
     ‘PyObject_AsReadBuffer()’, ‘PyObject_CheckReadBuffer()’, and
     ‘PyObject_AsWriteBuffer()’ are removed.  Please migrate to new
     buffer protocol; *note PyObject_GetBuffer(): 399. and *note
     PyBuffer_Release(): 39a.

   - bpo-36346(15): Raises DeprecationWarning for
     ‘PyUnicode_FromUnicode(NULL, size)’ and
     ‘PyUnicode_FromStringAndSize(NULL, size)’ with ‘size > 0’.

   - bpo-36346(16): Mark ‘Py_UNICODE_COPY’, ‘Py_UNICODE_FILL’,
     ‘PyUnicode_WSTR_LENGTH’, ‘PyUnicode_FromUnicode’,
     ‘PyUnicode_AsUnicode’, and ‘PyUnicode_AsUnicodeAndSize’ as
     deprecated in C. Remove ‘Py_UNICODE_MATCH’ which was deprecated and
     broken since Python 3.3.

   - bpo-40989(17): The *note PyObject_INIT(): 1acb. and *note
     PyObject_INIT_VAR(): 1acc. macros become aliases to, respectively,
     *note PyObject_Init(): a74. and *note PyObject_InitVar(): 1acd.
     functions.

   - bpo-36020(18): On Windows, ‘#include "pyerrors.h"’ no longer
     defines ‘snprintf’ and ‘vsnprintf’ macros.

   - bpo-40943(19): The ‘PY_SSIZE_T_CLEAN’ macro must now be defined to
     use *note PyArg_ParseTuple(): 571. and *note Py_BuildValue(): 8ac.
     formats which use ‘#’: ‘es#’, ‘et#’, ‘s#’, ‘u#’, ‘y#’, ‘z#’, ‘U#’
     and ‘Z#’.  See *note Parsing arguments and building values: 8ad.
     and the PEP 353(20).

   - bpo-40910(21): Export explicitly the *note Py_GetArgcArgv(): 1ace.
     function to the C API and document the function.  Previously, it
     was exported implicitly which no longer works since Python is built
     with ‘-fvisibility=hidden’.

   - bpo-40724(22): Allow defining buffer slots in type specs.

   - bpo-40679(23): Fix a ‘_PyEval_EvalCode()’ crash if 'qualname'
     argument is NULL.

   - bpo-40839(24): Calling *note PyDict_GetItem(): 387. without *note
     GIL: 159. held had been allowed for historical reason.  It is no
     longer allowed.

   - bpo-40826(25): *note PyOS_InterruptOccurred(): 1acf. now fails with
     a fatal error if it is called with the GIL released.

   - bpo-40792(26): The result of *note PyNumber_Index(): 897. now
     always has exact type *note int: 257.  Previously, the result could
     have been an instance of a subclass of ‘int’.

   - bpo-39573(27): Convert *note Py_REFCNT(): 8ae. and *note Py_SIZE():
     782. macros to static inline functions.  They cannot be used as
     l-value anymore: use *note Py_SET_REFCNT(): 8af. and *note
     Py_SET_SIZE(): 783. to set an object reference count and size.
     This change is backward incompatible on purpose, to prepare the C
     API for an opaque *note PyObject: 339. structure.

   - bpo-40703(28): The PyType_FromSpec*() functions no longer overwrite
     the type’s “__module__” attribute if it is set via “Py_tp_members”
     or “Py_tp_getset”.

   - bpo-39583(29): Remove superfluous “extern C” declarations from
     ‘Include/cpython/*.h’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=41936

   (2) https://bugs.python.org/issue?@action=redirect&bpo=41692

   (3) https://bugs.python.org/issue?@action=redirect&bpo=41842

   (4) https://bugs.python.org/issue?@action=redirect&bpo=41834

   (5) https://bugs.python.org/issue?@action=redirect&bpo=41689

   (6) https://bugs.python.org/issue?@action=redirect&bpo=41524

   (7) https://bugs.python.org/issue?@action=redirect&bpo=41324

   (8) https://bugs.python.org/issue?@action=redirect&bpo=30155

   (9) https://bugs.python.org/issue?@action=redirect&bpo=40170

   (10) https://bugs.python.org/issue?@action=redirect&bpo=41123

   (11) https://bugs.python.org/issue?@action=redirect&bpo=41123

   (12) https://bugs.python.org/issue?@action=redirect&bpo=41123

   (13) https://bugs.python.org/issue?@action=redirect&bpo=41123

   (14) https://bugs.python.org/issue?@action=redirect&bpo=41103

   (15) https://bugs.python.org/issue?@action=redirect&bpo=36346

   (16) https://bugs.python.org/issue?@action=redirect&bpo=36346

   (17) https://bugs.python.org/issue?@action=redirect&bpo=40989

   (18) https://bugs.python.org/issue?@action=redirect&bpo=36020

   (19) https://bugs.python.org/issue?@action=redirect&bpo=40943

   (20) https://peps.python.org/pep-0353/

   (21) https://bugs.python.org/issue?@action=redirect&bpo=40910

   (22) https://bugs.python.org/issue?@action=redirect&bpo=40724

   (23) https://bugs.python.org/issue?@action=redirect&bpo=40679

   (24) https://bugs.python.org/issue?@action=redirect&bpo=40839

   (25) https://bugs.python.org/issue?@action=redirect&bpo=40826

   (26) https://bugs.python.org/issue?@action=redirect&bpo=40792

   (27) https://bugs.python.org/issue?@action=redirect&bpo=39573

   (28) https://bugs.python.org/issue?@action=redirect&bpo=40703

   (29) https://bugs.python.org/issue?@action=redirect&bpo=39583


File: python.info,  Node: Python 3 9 0 beta 1,  Next: Python 3 9 0 alpha 6,  Prev: Python 3 10 0 alpha 1,  Up: Changelog

1.23.51 Python 3.9.0 beta 1
---------------------------

'Data de lançamento: 2020-05-19'

* Menu:

* Segurança: Segurança<33>.
* Núcleo e embutidos: Núcleo e embutidos<124>.
* Biblioteca: Biblioteca<126>.
* Documentação: Documentação<41>.
* Testes: Testes<45>.
* Construção: Construção<49>.
* Windows: Windows<42>.
* macOS: macOS<34>.
* Ferramentas/Demos: Ferramentas/Demos<23>.
* API C: API C<45>.


File: python.info,  Node: Segurança<33>,  Next: Núcleo e embutidos<124>,  Up: Python 3 9 0 beta 1

1.23.51.1 Segurança
...................

   - bpo-40501(1): *note uuid: 110. no longer uses *note ctypes: 2a. to
     load ‘libuuid’ or ‘rpcrt4.dll’ at runtime.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40501


File: python.info,  Node: Núcleo e embutidos<124>,  Next: Biblioteca<126>,  Prev: Segurança<33>,  Up: Python 3 9 0 beta 1

1.23.51.2 Núcleo e embutidos
............................

   - bpo-40663(1): Correctly generate annotations where parentheses are
     omitted but required (e.g: ‘Type[(str, int, *other))]’.

   - bpo-40596(2): Fixed *note str.isidentifier(): 1ad3. for
     non-canonicalized strings containing non-BMP characters on Windows.

   - bpo-40593(3): Improved syntax errors for invalid characters in
     source code.

   - bpo-40585(4): Fixed a bug when using *note
     codeop.compile_command(): 18dd. that was causing exceptions to be
     swallowed with the new parser.  Patch by Pablo Galindo

   - bpo-40566(5): Apply PEP 573(6) to *note abc: 4.

   - bpo-40502(7): Initialize ‘n->n_col_offset’.  (Patch by Joannah
     Nanjekye)

   - bpo-40527(8): Fix command line argument parsing: no longer write
     errors multiple times into stderr.

   - bpo-1635741(9): Port *note errno: 57. to multiphase initialization
     ( PEP 489(10)).

   - bpo-40523(11): Add pass-throughs for *note hash(): 5eb. and *note
     reversed(): 869. to *note weakref.proxy: a5b. objects.  Patch by
     Pablo Galindo.

   - bpo-1635741(12): Port *note syslog: dc. to multiphase
     initialization ( PEP 489(13)).

   - bpo-40246(14): Reporting a specialised error message for invalid
     string prefixes, which was introduced in bpo-40246(15), is being
     reverted due to backwards compatibility concerns for strings that
     immediately follow a reserved keyword without whitespace between
     them.  Constructs like ‘bg="#d00" if clear else"#fca"’ were failing
     to parse, which is not an acceptable breakage on such short notice.

   - bpo-40417(16): Fix imp module deprecation warning when
     PyImport_ReloadModule is called.  Patch by Robert Rouhani.

   - bpo-40408(17): Fixed support of nested type variables in
     GenericAlias (e.g.  ‘list[list[T]]’).

   - bpo-1635741(18): Port _stat module to multiphase initialization (
     PEP 489(19)).

   - bpo-29587(20): Enable implicit exception chaining when calling
     *note generator.throw(): 4f8.

   - bpo-40328(21): Add tools for generating mappings headers for
     CJKCodecs.

   - bpo-40228(22): Setting frame.f_lineno is now robust w.r.t.  changes
     in the source-to-bytecode compiler

   - bpo-38880(23): Added the ability to list interpreters associated
     with channel ends in the internal subinterpreters module.

   - bpo-37986(24): Improve performance of *note PyLong_FromDouble():
     949. for values that fit into long.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40663

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40596

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40593

   (4) https://bugs.python.org/issue?@action=redirect&bpo=40585

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40566

   (6) https://peps.python.org/pep-0573/

   (7) https://bugs.python.org/issue?@action=redirect&bpo=40502

   (8) https://bugs.python.org/issue?@action=redirect&bpo=40527

   (9) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (10) https://peps.python.org/pep-0489/

   (11) https://bugs.python.org/issue?@action=redirect&bpo=40523

   (12) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (13) https://peps.python.org/pep-0489/

   (14) https://bugs.python.org/issue?@action=redirect&bpo=40246

   (15) https://bugs.python.org/issue?@action=redirect&bpo=40246

   (16) https://bugs.python.org/issue?@action=redirect&bpo=40417

   (17) https://bugs.python.org/issue?@action=redirect&bpo=40408

   (18) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (19) https://peps.python.org/pep-0489/

   (20) https://bugs.python.org/issue?@action=redirect&bpo=29587

   (21) https://bugs.python.org/issue?@action=redirect&bpo=40328

   (22) https://bugs.python.org/issue?@action=redirect&bpo=40228

   (23) https://bugs.python.org/issue?@action=redirect&bpo=38880

   (24) https://bugs.python.org/issue?@action=redirect&bpo=37986


File: python.info,  Node: Biblioteca<126>,  Next: Documentação<41>,  Prev: Núcleo e embutidos<124>,  Up: Python 3 9 0 beta 1

1.23.51.3 Biblioteca
....................

   - bpo-40662(1): Fixed *note ast.get_source_segment(): 9e0. for ast
     nodes that have incomplete location information.  Patch by Irit
     Katriel.

   - bpo-40665(2): Convert *note bisect: 11. to use Argument Clinic.

   - bpo-40536(3): Added the *note available_timezones(): 1ad5. function
     to the *note zoneinfo: 134. module.  Patch by Paul Ganssle.

   - bpo-40645(4): The *note hmac.HMAC: b51. exposes internal
     implementation details.  The attributes ‘digest_cons’, ‘inner’, and
     ‘outer’ are deprecated and will be removed in the future.

   - bpo-40645(5): The internal module ‘_hashlib’ wraps and exposes
     OpenSSL’s HMAC API. The new code will be used in Python 3.10 after
     the internal implementation details of the pure Python HMAC module
     are no longer part of the public API.

   - bpo-40637(6): Builtin hash modules can now be disabled or
     selectively enabled with ‘configure
     --with-builtin-hashlib-hashes=sha3,blake1’ or
     ‘--without-builtin-hashlib-hashes’.

   - bpo-37630(7): The *note hashlib: 68. module can now use SHA3 hashes
     and SHAKE XOF from OpenSSL when available.

   - bpo-40479(8): The *note hashlib: 68. now compiles with OpenSSL
     3.0.0-alpha2.

   - bpo-40257(9): Revert changes to *note inspect.getdoc(): a02.

   - bpo-40607(10): When cancelling a task due to timeout, *note
     asyncio.wait_for(): 5ff. will now propagate the exception if an
     error happens during cancellation.  Patch by Roman Skurikhin.

   - bpo-40612(11): Fix edge cases in SyntaxError formatting.  If the
     offset is <= 0, no caret is printed.  If the offset is > line
     length, the caret is printed pointing just after the last
     character.

   - bpo-40597(12): If text content lines are longer than
     policy.max_line_length, always use a content-encoding to make sure
     they are wrapped.

   - bpo-40571(13): Added functools.cache() as a simpler, more
     discoverable way to access the unbounded cache variant of
     lru_cache(maxsize=None).

   - bpo-40503(14): PEP 615(15), the *note zoneinfo: 134. module.  Adds
     support for the IANA time zone database.

   - bpo-40397(16): Removed attributes ‘__args__’ and ‘__parameters__’
     from special generic aliases like ‘typing.List’ (not subscripted).

   - bpo-40549(17): Convert posixmodule.c (“posix” or “nt” module) to
     the multiphase initialization (PEP 489).

   - bpo-31033(18): Add a ‘msg’ argument to ‘Future.cancel()’ and
     ‘Task.cancel()’.

   - bpo-40541(19): Added an optional 'counts' parameter to
     random.sample().

   - bpo-40515(20): The *note ssl: d0. and *note hashlib: 68. modules
     now actively check that OpenSSL is build with thread support.
     Python 3.7.0 made thread support mandatory and no longer works
     safely with a no-thread builds.

   - bpo-31033(21): When a *note asyncio.Task: 1be. is cancelled, the
     exception traceback now chains all the way back to where the task
     was first interrupted.

   - bpo-40504(22): *note functools.lru_cache(): 9f7. objects can now be
     the targets of weakrefs.

   - bpo-40559(23): Fix possible memory leak in the C implementation of
     *note asyncio.Task: 1be.

   - bpo-40480(24): ‘fnmatch.fnmatch()’ could take exponential time in
     the presence of multiple ‘*’ pattern characters.  This was repaired
     by generating more elaborate regular expressions to avoid futile
     backtracking.

   - bpo-40495(25): *note compileall: 20. is now able to use hardlinks
     to prevent duplicates in a case when ‘.pyc’ files for different
     optimization levels have the same content.

   - bpo-40457(26): The ssl module now support OpenSSL builds without
     TLS 1.0 and 1.1 methods.

   - bpo-40355(27): Improve error reporting in *note ast.literal_eval():
     c32. in the presence of malformed *note ast.Dict: 1ad6. nodes
     instead of silently ignoring any non-conforming elements.  Patch by
     Curtis Bucher.

   - bpo-40465(28): Deprecated the optional 'random' argument to
     'random.shuffle()'.

   - bpo-40459(29): *note platform.win32_ver(): 1ad7. now produces
     correct 'ptype' strings instead of empty strings.

   - bpo-39435(30): The first argument of *note pickle.loads(): d33. is
     now positional-only.

   - bpo-39305(31): Update ‘nntplib’ to merge ‘nntplib.NNTP’ and
     ‘nntplib._NNTPBase’.  Patch by Donghee Na.

   - bpo-32494(32): Update *note dbm.gnu: 33. to use gdbm_count if
     possible when calling *note len(): 62e.  Patch by Donghee Na.

   - bpo-40453(33): Add ‘isolated=True’ keyword-only parameter to
     ‘_xxsubinterpreters.create()’.  An isolated subinterpreter cannot
     spawn threads, spawn a child process or call ‘os.fork()’.

   - bpo-40286(34): Remove ‘_random.Random.randbytes()’: the C
     implementation of ‘randbytes()’.  Implement the method in Python to
     ease subclassing: ‘randbytes()’ now directly reuses
     ‘getrandbits()’.

   - bpo-40394(35): Added default arguments to *note
     difflib.SequenceMatcher.find_longest_match(): 1ad8.

   - bpo-39995(36): Fix a race condition in
     concurrent.futures._ThreadWakeup: access to _ThreadWakeup is now
     protected with the shutdown lock.

   - bpo-30966(37): ‘Process.shutdown(wait=True)’ of *note
     concurrent.futures: 21. now closes explicitly the result queue.

   - bpo-30966(38): Add a new *note close(): 91b. method to the *note
     SimpleQueue: 91a. class to explicitly close the queue.

   - bpo-39966(39): Revert bpo-25597(40).  *note
     unittest.mock.MagicMock: ebe. with wraps’ set uses default return
     values for magic methods.

   - bpo-39791(41): Added ‘files()’ function to importlib.resources with
     support for subdirectories in package data, matching backport in
     importlib_resources 1.5.

   - bpo-40375(42): *note imaplib.IMAP4.unselect(): 90d. is added.
     Patch by Donghee Na.

   - bpo-40389(43): ‘repr()’ now returns ‘typing.Optional[T]’ when
     called for ‘typing.Union’ of two types, one of which is ‘NoneType’.

   - bpo-40291(44): Add support for CAN_J1939 sockets (available on
     Linux 5.4+)

   - bpo-40273(45): *note types.MappingProxyType: 46d. is now
     reversible.

   - bpo-39075(46): The repr for *note types.SimpleNamespace: 1d1. is
     now insertion ordered rather than alphabetical.

   - bpo-40192(47): On AIX, *note thread_time(): 93d. is now implemented
     with ‘thread_cputime()’ which has nanosecond resolution, rather
     than ‘clock_gettime(CLOCK_THREAD_CPUTIME_ID)’ which has a
     resolution of 10 milliseconds.  Patch by Batuhan Taskaya.

   - bpo-40025(48): Raise TypeError when _generate_next_value_ is
     defined after members.  Patch by Ethan Onstott.

   - bpo-39058(49): In the argparse module, the repr for Namespace() and
     other argument holders now displayed in the order attributes were
     added.  Formerly, it displayed in alphabetical order even though
     argument order is preserved the user visible parts of the module.

   - bpo-24416(50): The ‘isocalendar()’ methods of *note datetime.date:
     1cd. and *note datetime.datetime: 1cc. now return a *note named
     tuple: 64e. instead of a *note tuple: 370.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40662

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40665

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40536

   (4) https://bugs.python.org/issue?@action=redirect&bpo=40645

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40645

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40637

   (7) https://bugs.python.org/issue?@action=redirect&bpo=37630

   (8) https://bugs.python.org/issue?@action=redirect&bpo=40479

   (9) https://bugs.python.org/issue?@action=redirect&bpo=40257

   (10) https://bugs.python.org/issue?@action=redirect&bpo=40607

   (11) https://bugs.python.org/issue?@action=redirect&bpo=40612

   (12) https://bugs.python.org/issue?@action=redirect&bpo=40597

   (13) https://bugs.python.org/issue?@action=redirect&bpo=40571

   (14) https://bugs.python.org/issue?@action=redirect&bpo=40503

   (15) https://peps.python.org/pep-0615/

   (16) https://bugs.python.org/issue?@action=redirect&bpo=40397

   (17) https://bugs.python.org/issue?@action=redirect&bpo=40549

   (18) https://bugs.python.org/issue?@action=redirect&bpo=31033

   (19) https://bugs.python.org/issue?@action=redirect&bpo=40541

   (20) https://bugs.python.org/issue?@action=redirect&bpo=40515

   (21) https://bugs.python.org/issue?@action=redirect&bpo=31033

   (22) https://bugs.python.org/issue?@action=redirect&bpo=40504

   (23) https://bugs.python.org/issue?@action=redirect&bpo=40559

   (24) https://bugs.python.org/issue?@action=redirect&bpo=40480

   (25) https://bugs.python.org/issue?@action=redirect&bpo=40495

   (26) https://bugs.python.org/issue?@action=redirect&bpo=40457

   (27) https://bugs.python.org/issue?@action=redirect&bpo=40355

   (28) https://bugs.python.org/issue?@action=redirect&bpo=40465

   (29) https://bugs.python.org/issue?@action=redirect&bpo=40459

   (30) https://bugs.python.org/issue?@action=redirect&bpo=39435

   (31) https://bugs.python.org/issue?@action=redirect&bpo=39305

   (32) https://bugs.python.org/issue?@action=redirect&bpo=32494

   (33) https://bugs.python.org/issue?@action=redirect&bpo=40453

   (34) https://bugs.python.org/issue?@action=redirect&bpo=40286

   (35) https://bugs.python.org/issue?@action=redirect&bpo=40394

   (36) https://bugs.python.org/issue?@action=redirect&bpo=39995

   (37) https://bugs.python.org/issue?@action=redirect&bpo=30966

   (38) https://bugs.python.org/issue?@action=redirect&bpo=30966

   (39) https://bugs.python.org/issue?@action=redirect&bpo=39966

   (40) https://bugs.python.org/issue?@action=redirect&bpo=25597

   (41) https://bugs.python.org/issue?@action=redirect&bpo=39791

   (42) https://bugs.python.org/issue?@action=redirect&bpo=40375

   (43) https://bugs.python.org/issue?@action=redirect&bpo=40389

   (44) https://bugs.python.org/issue?@action=redirect&bpo=40291

   (45) https://bugs.python.org/issue?@action=redirect&bpo=40273

   (46) https://bugs.python.org/issue?@action=redirect&bpo=39075

   (47) https://bugs.python.org/issue?@action=redirect&bpo=40192

   (48) https://bugs.python.org/issue?@action=redirect&bpo=40025

   (49) https://bugs.python.org/issue?@action=redirect&bpo=39058

   (50) https://bugs.python.org/issue?@action=redirect&bpo=24416


File: python.info,  Node: Documentação<41>,  Next: Testes<45>,  Prev: Biblioteca<126>,  Up: Python 3 9 0 beta 1

1.23.51.4 Documentação
......................

   - bpo-34790(1): Add version of removal for explicit passing of coros
     to ‘asyncio.wait()’’s documentation

   - bpo-40561(2): Provide docstrings for webbrowser open functions.

   - bpo-40499(3): Mention that *note asyncio.wait(): 47f. requires a
     non-empty set of awaitables.

   - bpo-39705(4): Tutorial example for sorted() in the Loop Techniques
     section is given a better explanation.  Also a new example is
     included to explain sorted()’s basic behavior.

   - bpo-39435(5): Fix an incorrect signature for *note pickle.loads():
     d33. in the docs

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34790

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40561

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40499

   (4) https://bugs.python.org/issue?@action=redirect&bpo=39705

   (5) https://bugs.python.org/issue?@action=redirect&bpo=39435


File: python.info,  Node: Testes<45>,  Next: Construção<49>,  Prev: Documentação<41>,  Up: Python 3 9 0 beta 1

1.23.51.5 Testes
................

   - bpo-40055(1): distutils.tests now saves/restores warnings filters
     to leave them unchanged.  Importing tests imports docutils which
     imports pkg_resources which adds a warnings filter.

   - bpo-40436(2): test_gdb and test.pythoninfo now check gdb command
     exit code.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40055

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40436


File: python.info,  Node: Construção<49>,  Next: Windows<42>,  Prev: Testes<45>,  Up: Python 3 9 0 beta 1

1.23.51.6 Construção
....................

   - bpo-40653(1): Move _dirnameW out of HAVE_SYMLINK to fix a potential
     compiling issue.

   - bpo-40514(2): Add ‘--with-experimental-isolated-subinterpreters’
     build option to ‘configure’: better isolate subinterpreters,
     experimental build mode.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40653

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40514


File: python.info,  Node: Windows<42>,  Next: macOS<34>,  Prev: Construção<49>,  Up: Python 3 9 0 beta 1

1.23.51.7 Windows
.................

   - bpo-40650(1): Include winsock2.h in pytime.c for timeval.

   - bpo-40458(2): Increase reserved stack space to prevent overflow
     crash on Windows.

   - bpo-39148(3): Add IPv6 support to *note asyncio: a. datagram
     endpoints in ProactorEventLoop.  Change the raised exception for
     unknown address families to ValueError as it’s not coming from
     Windows API.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40650

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40458

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39148


File: python.info,  Node: macOS<34>,  Next: Ferramentas/Demos<23>,  Prev: Windows<42>,  Up: Python 3 9 0 beta 1

1.23.51.8 macOS
...............

   - bpo-34956(1): When building Python on macOS from source, ‘_tkinter’
     now links with non-system Tcl and Tk frameworks if they are
     installed in ‘/Library/Frameworks’, as had been the case on older
     releases of macOS. If a macOS SDK is explicitly configured, by
     using ‘--enable-universalsdk=’ or ‘-isysroot’, only the SDK itself
     is searched.  The default behavior can still be overridden with
     ‘--with-tcltk-includes’ and ‘--with-tcltk-libs’.

   - bpo-35569(2): Expose RFC 3542 IPv6 socket options.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34956

   (2) https://bugs.python.org/issue?@action=redirect&bpo=35569


File: python.info,  Node: Ferramentas/Demos<23>,  Next: API C<45>,  Prev: macOS<34>,  Up: Python 3 9 0 beta 1

1.23.51.9 Ferramentas/Demos
...........................

   - bpo-40479(1): Update multissltest helper to test with latest
     OpenSSL 1.0.2, 1.1.0, 1.1.1, and 3.0.0-alpha.

   - bpo-40431(2): Fix a syntax typo in ‘turtledemo’ that now raises a
     ‘SyntaxError’.

   - bpo-40163(3): Fix multissltest tool.  OpenSSL has changed download
     URL for old releases.  The multissltest tool now tries to download
     from current and old download URLs.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40479

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40431

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40163


File: python.info,  Node: API C<45>,  Prev: Ferramentas/Demos<23>,  Up: Python 3 9 0 beta 1

1.23.51.10 API C
................

   - bpo-39465(1): Remove the ‘_PyUnicode_ClearStaticStrings()’ function
     from the C API.

   - bpo-38787(2): Add PyCFunction_CheckExact() macro for exact type
     checks now that we allow subtypes of PyCFunction, as well as
     PyCMethod_CheckExact() and PyCMethod_Check() for the new PyCMethod
     subtype.

   - bpo-40545(3): Declare ‘_PyErr_GetTopmostException()’ with
     ‘PyAPI_FUNC()’ to properly export the function in the C API. The
     function remains private (‘_Py’) prefix.

   - bpo-40412(4): Nullify inittab_copy during finalization, preventing
     future interpreter initializations in an embedded situation from
     crashing.  Patch by Gregory Szorc.

   - bpo-40429(5): The *note PyThreadState_GetFrame(): 78e. function now
     returns a strong reference to the frame.

   - bpo-40428(6): Remove the following functions from the C API. Call
     *note PyGC_Collect(): 995. explicitly to free all free lists.

        * ‘PyAsyncGen_ClearFreeLists()’

        * ‘PyContext_ClearFreeList()’

        * ‘PyDict_ClearFreeList()’

        * ‘PyFloat_ClearFreeList()’

        * ‘PyFrame_ClearFreeList()’

        * ‘PyList_ClearFreeList()’

        * ‘PySet_ClearFreeList()’

        * ‘PyTuple_ClearFreeList()’

   - bpo-40421(7): New *note PyFrame_GetBack(): 786. function: get the
     frame next outer frame.

   - bpo-40421(8): New *note PyFrame_GetCode(): 78a. function: return a
     borrowed reference to the frame code.

   - bpo-40217(9): Ensure that instances of types created with *note
     PyType_FromSpecWithBases(): 57e. will visit its class object when
     traversing references in the garbage collector (implemented as an
     extension of the provided *note tp_traverse: 77e.).  Patch by Pablo
     Galindo.

   - bpo-38787(10): Module C state is now accessible from C-defined heap
     type methods ( PEP 573(11)).  Patch by Marcel Plch and Petr
     Viktorin.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39465

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38787

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40545

   (4) https://bugs.python.org/issue?@action=redirect&bpo=40412

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40429

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40428

   (7) https://bugs.python.org/issue?@action=redirect&bpo=40421

   (8) https://bugs.python.org/issue?@action=redirect&bpo=40421

   (9) https://bugs.python.org/issue?@action=redirect&bpo=40217

   (10) https://bugs.python.org/issue?@action=redirect&bpo=38787

   (11) https://peps.python.org/pep-0573/


File: python.info,  Node: Python 3 9 0 alpha 6,  Next: Python 3 9 0 alpha 5,  Prev: Python 3 9 0 beta 1,  Up: Changelog

1.23.52 Python 3.9.0 alpha 6
----------------------------

'Data de lançamento: 2020-04-27'

* Menu:

* Segurança: Segurança<34>.
* Núcleo e embutidos: Núcleo e embutidos<125>.
* Biblioteca: Biblioteca<127>.
* Documentação: Documentação<42>.
* Testes: Testes<46>.
* Construção: Construção<50>.
* Windows: Windows<43>.
* macOS: macOS<35>.
* IDLE: IDLE<31>.
* Ferramentas/Demos: Ferramentas/Demos<24>.
* API C: API C<46>.


File: python.info,  Node: Segurança<34>,  Next: Núcleo e embutidos<125>,  Up: Python 3 9 0 alpha 6

1.23.52.1 Segurança
...................

   - bpo-40121(1): Fixes audit events raised on creating a new socket.

   - bpo-39073(2): Disallow CR or LF in email.headerregistry.Address
     arguments to guard against header injection attacks.

   - bpo-39503(3): CVE 2020-8492(4): The *note AbstractBasicAuthHandler:
     19fb. class of the *note urllib.request: 10b. module uses an
     inefficient regular expression which can be exploited by an
     attacker to cause a denial of service.  Fix the regex to prevent
     the catastrophic backtracking.  Vulnerability reported by Ben
     Caller and Matt Schwager.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40121

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39073

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39503

   (4) https://www.cve.org/CVERecord?id=CVE-2020-8492


File: python.info,  Node: Núcleo e embutidos<125>,  Next: Biblioteca<127>,  Prev: Segurança<34>,  Up: Python 3 9 0 alpha 6

1.23.52.2 Núcleo e embutidos
............................

   - bpo-40313(1): Improve the performance of bytes.hex().

   - bpo-40334(2): Switch to a new parser, based on PEG. For more
     details see PEP 617.  To temporarily switch back to the old parser,
     use ‘-X oldparser’ or ‘PYTHONOLDPARSER=1’.  In Python 3.10 we will
     remove the old parser completely, including the ‘parser’ module
     (already deprecated) and anything that depends on it.

   - bpo-40267(3): Fix the tokenizer to display the correct error
     message, when there is a ‘SyntaxError’ on the last input character
     and no newline follows.  It used to be ‘unexpected EOF while
     parsing’, while it should be ‘invalid syntax’.

   - bpo-39522(4): Correctly unparse explicit ‘u’ prefix for strings
     when postponed evaluation for annotations activated.  Patch by
     Batuhan Taskaya.

   - bpo-40246(5): Report a specialized error message, ‘invalid string
     prefix’, when the tokenizer encounters a string with an invalid
     prefix.

   - bpo-40082(6): Fix the signal handler: it now always uses the main
     interpreter, rather than trying to get the current Python thread
     state.

   - bpo-37388(7): str.encode() and str.decode() no longer check the
     encoding and errors in development mode or in debug mode during
     Python finalization.  The codecs machinery can no longer work on
     very late calls to str.encode() and str.decode().

   - bpo-40077(8): Fix possible refleaks in ‘_json’, memo of
     PyScannerObject should be traversed.

   - bpo-37207(9): Speed up calls to ‘dict()’ by using the PEP 590(10)
     ‘vectorcall’ calling convention.

   - bpo-40141(11): Add column and line information to ‘ast.keyword’
     nodes.  Patch by Pablo Galindo.

   - bpo-1635741(12): Port *note resource: bc. to multiphase
     initialization ( PEP 489(13)).

   - bpo-1635741(14): Port *note math: 8e. to multiphase initialization
     ( PEP 489(15)).

   - bpo-1635741(16): Port _uuid module to multiphase initialization (
     PEP 489(17)).

   - bpo-40077(18): Convert json module to use *note PyType_FromSpec():
     57d.

   - bpo-40067(19): Improve the error message for multiple star
     expressions in an assignment.  Patch by Furkan Onder

   - bpo-1635741(20): Port _functools module to multiphase
     initialization (PEP 489).  Patch by Paulo Henrique Silva.

   - bpo-1635741(21): Port operator module to multiphase initialization
     (PEP 489).  Patch by Paulo Henrique Silva.

   - bpo-20526(22): Fix *note PyThreadState_Clear(): 170b.
     ‘PyThreadState.frame’ is a borrowed reference, not a strong
     reference: ‘PyThreadState_Clear()’ must not call
     ‘Py_CLEAR(tstate->frame)’.

   - bpo-1635741(23): Port time module to multiphase initialization (
     PEP 489(24)).  Patch by Paulo Henrique Silva.

   - bpo-1635741(25): Port _weakref extension module to multiphase
     initialization ( PEP 489(26)).

   - bpo-40020(27): Fix a leak and subsequent crash in parsetok.c caused
     by realloc misuse on a rare codepath.

   - bpo-39939(28): Added str.removeprefix and str.removesuffix methods
     and corresponding bytes, bytearray, and collections.UserString
     methods to remove affixes from a string if present.  See PEP
     616(29) for a full description.  Patch by Dennis Sweeney.

   - bpo-39481(30): Implement PEP 585.  This supports list[int],
     tuple[str, …] etc.

   - bpo-32894(31): Support unparsing of infinity numbers in postponed
     annotations.  Patch by Batuhan Taşkaya.

   - bpo-37207(32): Speed up calls to ‘list()’ by using the PEP 590(33)
     ‘vectorcall’ calling convention.  Patch by Mark Shannon.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40313

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40334

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40267

   (4) https://bugs.python.org/issue?@action=redirect&bpo=39522

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40246

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40082

   (7) https://bugs.python.org/issue?@action=redirect&bpo=37388

   (8) https://bugs.python.org/issue?@action=redirect&bpo=40077

   (9) https://bugs.python.org/issue?@action=redirect&bpo=37207

   (10) https://peps.python.org/pep-0590/

   (11) https://bugs.python.org/issue?@action=redirect&bpo=40141

   (12) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (13) https://peps.python.org/pep-0489/

   (14) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (15) https://peps.python.org/pep-0489/

   (16) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (17) https://peps.python.org/pep-0489/

   (18) https://bugs.python.org/issue?@action=redirect&bpo=40077

   (19) https://bugs.python.org/issue?@action=redirect&bpo=40067

   (20) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (21) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (22) https://bugs.python.org/issue?@action=redirect&bpo=20526

   (23) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (24) https://peps.python.org/pep-0489/

   (25) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (26) https://peps.python.org/pep-0489/

   (27) https://bugs.python.org/issue?@action=redirect&bpo=40020

   (28) https://bugs.python.org/issue?@action=redirect&bpo=39939

   (29) https://peps.python.org/pep-0616/

   (30) https://bugs.python.org/issue?@action=redirect&bpo=39481

   (31) https://bugs.python.org/issue?@action=redirect&bpo=32894

   (32) https://bugs.python.org/issue?@action=redirect&bpo=37207

   (33) https://peps.python.org/pep-0590/


File: python.info,  Node: Biblioteca<127>,  Next: Documentação<42>,  Prev: Núcleo e embutidos<125>,  Up: Python 3 9 0 alpha 6

1.23.52.3 Biblioteca
....................

   - bpo-40398(1): *note typing.get_args(): 2ed. now always returns an
     empty tuple for special generic aliases.

   - bpo-40396(2): Functions *note typing.get_origin(): 2ec, *note
     typing.get_args(): 2ed. and *note typing.get_type_hints(): 6b1.
     support now generic aliases like ‘list[int]’.

   - bpo-38061(3): Optimize the *note subprocess: d6. module on FreeBSD
     using ‘closefrom()’.  A single ‘close(fd)’ syscall is cheap, but
     when ‘sysconf(_SC_OPEN_MAX)’ is high, the loop calling ‘close(fd)’
     on each file descriptor can take several milliseconds.

     The workaround on FreeBSD to improve performance was to load and
     mount the fdescfs kernel module, but this is not enabled by
     default.

     Initial patch by Ed Maste (emaste), Conrad Meyer (cem), Kyle Evans
     (kevans) and Kubilay Kocak (koobs):
     ‘https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242274’

   - bpo-38061(4): On FreeBSD, ‘os.closerange(fd_low, fd_high)’ now
     calls ‘closefrom(fd_low)’ if 'fd_high' is greater than or equal to
     ‘sysconf(_SC_OPEN_MAX)’.

     Initial patch by Ed Maste (emaste), Conrad Meyer (cem), Kyle Evans
     (kevans) and Kubilay Kocak (koobs):
     ‘https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=242274’

   - bpo-40360(5): The ‘lib2to3’ module is pending deprecation due to
     PEP 617(6).

   - bpo-40138(7): Fix the Windows implementation of *note os.waitpid():
     dc2. for exit code larger than ‘INT_MAX >> 8’.  The exit status is
     now interpreted as an unsigned number.

   - bpo-39942(8): Set “__main__” as the default module name when
     “__name__” is missing in *note typing.TypeVar: 15d.  Patch by
     Weipeng Hong.

   - bpo-40275(9): The *note logging: 87. package is now imported lazily
     in *note unittest: 106. only when the *note assertLogs(): 85c.
     assertion is used.

   - bpo-40275(10): The *note asyncio: a. package is now imported lazily
     in *note unittest: 106. only when the *note
     IsolatedAsyncioTestCase: 30c. class is used.

   - bpo-40330(11): In ‘ShareableList.__setitem__()’, check the size of
     a new string item after encoding it to utf-8, not before.

   - bpo-40148(12): Added ‘pathlib.Path.with_stem()’ to create a new
     Path with the stem replaced.

   - bpo-40325(13): Deprecated support for set objects in
     random.sample().

   - bpo-40257(14): Improved help for the *note typing: 104. module.
     Docstrings are now shown for all special forms and special generic
     aliases (like ‘Union’ and ‘List’).  Using ‘help()’ with generic
     alias like ‘List[int]’ will show the help for the correspondent
     concrete type (‘list’ in this case).

   - bpo-40257(15): *note inspect.getdoc(): a02. no longer returns
     docstring inherited from the type of the object or from parent
     class if it is a class if it is not defined in the object itself.
     In *note pydoc: b5. the documentation string is now shown not only
     for class, function, method etc, but for any object that has its
     own ‘__doc__’ attribute.

   - bpo-40287(16): Fixed ‘SpooledTemporaryFile.seek()’ to return the
     position.

   - bpo-40290(17): Added zscore() to statistics.NormalDist().

   - bpo-40282(18): Allow ‘random.getrandbits(0)’ to succeed and to
     return 0.

   - bpo-40286(19): Add *note random.randbytes(): 1629. function and
     *note random.Random.randbytes(): 930. method to generate random
     bytes.

   - bpo-40277(20): *note collections.namedtuple(): 1ca. now provides a
     human-readable repr for its field accessors.

   - bpo-40270(21): The included copy of sqlite3 on Windows is now
     compiled with the json extension.  This allows the use of functions
     such as ‘json_object’.

   - bpo-29255(22): Wait in ‘KqueueSelector.select’ when no fds are
     registered

   - bpo-40260(23): Ensure *note modulefinder: 91. uses *note
     io.open_code(): 181c. and respects coding comments.

   - bpo-40234(24): Allow again to spawn daemon threads in
     subinterpreters (revert change which denied them).

   - bpo-39207(25): Workers in *note ProcessPoolExecutor: 8f4. are now
     spawned on demand, only when there are no available idle workers to
     reuse.  This optimizes startup overhead and reduces the amount of
     lost CPU time to idle workers.  Patch by Kyle Stanley.

   - bpo-40091(26): Fix a hang at fork in the logging module: the new
     private _at_fork_reinit() method is now used to reinitialize locks
     at fork in the child process.

   - bpo-40149(27): Implement traverse and clear slots in _abc._abc_data
     type.

   - bpo-40208(28): Remove deprecated ‘symtable.SymbolTable.has_exec()’.

   - bpo-40196(29): Fix a bug in the *note symtable: d8. module that was
     causing incorrectly report global variables as local.  Patch by
     Pablo Galindo.

   - bpo-40190(30): Add support for ‘_SC_AIX_REALMEM’ to
     ‘posix.sysconf()’.

   - bpo-40182(31): Removed the ‘_field_types’ attribute of the *note
     typing.NamedTuple: 2b0. class.

   - bpo-36517(32): Multiple inheritance with *note typing.NamedTuple:
     2b0. now raises an error instead of silently ignoring other types.

   - bpo-40126(33): Fixed reverting multiple patches in unittest.mock.
     Patcher’s ‘__exit__()’ is now never called if its ‘__enter__()’ is
     failed.  Returning true from ‘__exit__()’ silences now the
     exception.

   - bpo-40094(34): CGIHTTPRequestHandler of http.server now logs the
     CGI script exit code, rather than the CGI script exit status of
     os.waitpid().  For example, if the script is killed by signal 11,
     it now logs: “CGI script exit code -11.”

   - bpo-40108(35): Improve the error message when triying to import a
     module using *note runpy: be. and incorrectly using the “.py”
     extension at the end of the module name.  Patch by Pablo Galindo.

   - bpo-40094(36): Add *note os.waitstatus_to_exitcode(): 923.
     function: convert a wait status to an exit code.

   - bpo-40089(37): Fix threading._after_fork(): if fork was not called
     by a thread spawned by threading.Thread, threading._after_fork()
     now creates a _MainThread instance for _main_thread, instead of a
     _DummyThread instance.

   - bpo-40089(38): Add a private ‘_at_fork_reinit()’ method to
     ‘_thread.Lock’, ‘_thread.RLock’, *note threading.RLock: 2de. and
     *note threading.Condition: 1194. classes: reinitialize the lock at
     fork in the child process, reset the lock to the unlocked state.
     Rename also the private ‘_reset_internal_locks()’ method of *note
     threading.Event: 1197. to ‘_at_fork_reinit()’.

   - bpo-25780(39): Expose *note CAN_RAW_JOIN_FILTERS: 938. in the *note
     socket: cc. module.

   - bpo-39503(40): *note AbstractBasicAuthHandler: 19fb. of *note
     urllib.request: 10b. now parses all WWW-Authenticate HTTP headers
     and accepts multiple challenges per header: use the realm of the
     first Basic challenge.

   - bpo-39812(41): Removed daemon threads from *note
     concurrent.futures: 21. by adding an internal
     ‘threading._register_atexit()’, which calls registered functions
     prior to joining all non-daemon threads.  This allows for
     compatibility with subinterpreters, which don’t support daemon
     threads.

   - bpo-40050(42): Fix ‘importlib._bootstrap_external’: avoid creating
     a new ‘winreg’ builtin module if it’s already available in *note
     sys.modules: 1636, and remove redundant imports.

   - bpo-40014(43): Fix ‘os.getgrouplist()’: if ‘getgrouplist()’
     function fails because the group list is too small, retry with a
     larger group list.  On failure, the glibc implementation of
     ‘getgrouplist()’ sets ‘ngroups’ to the total number of groups.  For
     other implementations, double the group list size.

   - bpo-40017(44): Add *note time.CLOCK_TAI: 1ae4. constant if the
     operating system support it.

   - bpo-40016(45): In re docstring, clarify the relationship between
     inline and argument compile flags.

   - bpo-39953(46): Update internal table of OpenSSL error codes in the
     ‘ssl’ module.

   - bpo-36144(47): Added PEP 584(48) operators to *note
     weakref.WeakValueDictionary: 1ae5.

   - bpo-36144(49): Added PEP 584(50) operators to *note
     weakref.WeakKeyDictionary: 1ae6.

   - bpo-38891(51): Fix linear runtime behaviour of the ‘__getitem__’
     and ‘__setitem__’ methods in *note
     multiprocessing.shared_memory.ShareableList: 1ae7.  This avoids
     quadratic performance when iterating a ‘ShareableList’.  Patch by
     Thomas Krennwallner.

   - bpo-39682(52): Remove undocumented support for 'closing' a
     ‘pathlib.Path’ object via its context manager.  The context manager
     magic methods remain, but they are now a no-op, making ‘Path’
     objects immutable.

   - bpo-36144(53): Added PEP 584(54) operators (‘|’ and ‘|=’) to *note
     collections.ChainMap: c36.

   - bpo-39011(55): Normalization of line endings in ElementTree
     attributes was removed, as line endings which were replaced by
     entity numbers should be preserved in original form.

   - bpo-38410(56): Properly handle *note sys.audit(): 16a0. failures in
     *note sys.set_asyncgen_hooks(): 1712.

   - bpo-36541(57): lib2to3 now recognizes named assignment expressions
     (the walrus operator, ‘:=’)

   - bpo-35967(58): In platform, delay the invocation of ‘uname -p’
     until the processor attribute is requested.

   - bpo-35113(59): *note inspect.getsource(): 15f8. now returns correct
     source code for inner class with same name as module level class.
     Decorators are also returned as part of source of the class.  Patch
     by Karthikeyan Singaravelan.

   - bpo-33262(60): Deprecate passing None as an argument for *note
     shlex.split(): 53c.’s ‘s’ parameter.  Patch by Zackery Spytz.

   - bpo-31758(61): Prevent crashes when using an uninitialized
     ‘_elementtree.XMLParser’ object.  Patch by Oren Milman.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40398

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40396

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38061

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38061

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40360

   (6) https://peps.python.org/pep-0617/

   (7) https://bugs.python.org/issue?@action=redirect&bpo=40138

   (8) https://bugs.python.org/issue?@action=redirect&bpo=39942

   (9) https://bugs.python.org/issue?@action=redirect&bpo=40275

   (10) https://bugs.python.org/issue?@action=redirect&bpo=40275

   (11) https://bugs.python.org/issue?@action=redirect&bpo=40330

   (12) https://bugs.python.org/issue?@action=redirect&bpo=40148

   (13) https://bugs.python.org/issue?@action=redirect&bpo=40325

   (14) https://bugs.python.org/issue?@action=redirect&bpo=40257

   (15) https://bugs.python.org/issue?@action=redirect&bpo=40257

   (16) https://bugs.python.org/issue?@action=redirect&bpo=40287

   (17) https://bugs.python.org/issue?@action=redirect&bpo=40290

   (18) https://bugs.python.org/issue?@action=redirect&bpo=40282

   (19) https://bugs.python.org/issue?@action=redirect&bpo=40286

   (20) https://bugs.python.org/issue?@action=redirect&bpo=40277

   (21) https://bugs.python.org/issue?@action=redirect&bpo=40270

   (22) https://bugs.python.org/issue?@action=redirect&bpo=29255

   (23) https://bugs.python.org/issue?@action=redirect&bpo=40260

   (24) https://bugs.python.org/issue?@action=redirect&bpo=40234

   (25) https://bugs.python.org/issue?@action=redirect&bpo=39207

   (26) https://bugs.python.org/issue?@action=redirect&bpo=40091

   (27) https://bugs.python.org/issue?@action=redirect&bpo=40149

   (28) https://bugs.python.org/issue?@action=redirect&bpo=40208

   (29) https://bugs.python.org/issue?@action=redirect&bpo=40196

   (30) https://bugs.python.org/issue?@action=redirect&bpo=40190

   (31) https://bugs.python.org/issue?@action=redirect&bpo=40182

   (32) https://bugs.python.org/issue?@action=redirect&bpo=36517

   (33) https://bugs.python.org/issue?@action=redirect&bpo=40126

   (34) https://bugs.python.org/issue?@action=redirect&bpo=40094

   (35) https://bugs.python.org/issue?@action=redirect&bpo=40108

   (36) https://bugs.python.org/issue?@action=redirect&bpo=40094

   (37) https://bugs.python.org/issue?@action=redirect&bpo=40089

   (38) https://bugs.python.org/issue?@action=redirect&bpo=40089

   (39) https://bugs.python.org/issue?@action=redirect&bpo=25780

   (40) https://bugs.python.org/issue?@action=redirect&bpo=39503

   (41) https://bugs.python.org/issue?@action=redirect&bpo=39812

   (42) https://bugs.python.org/issue?@action=redirect&bpo=40050

   (43) https://bugs.python.org/issue?@action=redirect&bpo=40014

   (44) https://bugs.python.org/issue?@action=redirect&bpo=40017

   (45) https://bugs.python.org/issue?@action=redirect&bpo=40016

   (46) https://bugs.python.org/issue?@action=redirect&bpo=39953

   (47) https://bugs.python.org/issue?@action=redirect&bpo=36144

   (48) https://peps.python.org/pep-0584/

   (49) https://bugs.python.org/issue?@action=redirect&bpo=36144

   (50) https://peps.python.org/pep-0584/

   (51) https://bugs.python.org/issue?@action=redirect&bpo=38891

   (52) https://bugs.python.org/issue?@action=redirect&bpo=39682

   (53) https://bugs.python.org/issue?@action=redirect&bpo=36144

   (54) https://peps.python.org/pep-0584/

   (55) https://bugs.python.org/issue?@action=redirect&bpo=39011

   (56) https://bugs.python.org/issue?@action=redirect&bpo=38410

   (57) https://bugs.python.org/issue?@action=redirect&bpo=36541

   (58) https://bugs.python.org/issue?@action=redirect&bpo=35967

   (59) https://bugs.python.org/issue?@action=redirect&bpo=35113

   (60) https://bugs.python.org/issue?@action=redirect&bpo=33262

   (61) https://bugs.python.org/issue?@action=redirect&bpo=31758


File: python.info,  Node: Documentação<42>,  Next: Testes<46>,  Prev: Biblioteca<127>,  Up: Python 3 9 0 alpha 6

1.23.52.4 Documentação
......................

   - bpo-27635(1): The pickle documentation incorrectly claimed that
     ‘__new__’ isn’t called by default when unpickling.

   - bpo-39879(2): Updated *note Modelo de dados: 1ae9. docs to include
     *note dict(): 256. insertion order preservation.  Patch by Furkan
     Onder and Samy Lahfa.

   - bpo-38387(3): Document *note PyDoc_STRVAR: 1aea. macro in the C-API
     reference.

   - bpo-13743(4): Some methods within xml.dom.minidom.Element class are
     now better documented.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27635

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39879

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38387

   (4) https://bugs.python.org/issue?@action=redirect&bpo=13743


File: python.info,  Node: Testes<46>,  Next: Construção<50>,  Prev: Documentação<42>,  Up: Python 3 9 0 alpha 6

1.23.52.5 Testes
................

   - bpo-31904(1): Set expected default encoding in
     test_c_locale_coercion.py for VxWorks RTOS.

   - bpo-40162(2): Update Travis CI configuration to OpenSSL 1.1.1f.

   - bpo-40146(3): Update OpenSSL to 1.1.1f in Azure Pipelines.

   - bpo-40094(4): Add *note test.support.wait_process(): 1aec.
     function.

   - bpo-40003(5): ‘test.bisect_cmd’ now copies Python command line
     options like ‘-O’ or ‘-W’.  Moreover, emit a warning if
     ‘test.bisect_cmd’ is used with ‘-w’/‘--verbose2’ option.

   - bpo-39380(6): Add the encoding in *note ftplib.FTP: 900. and *note
     ftplib.FTP_TLS: 901. to the constructor as keyword-only and change
     the default from ‘latin-1’ to ‘utf-8’ to follow RFC 2640(7).

   - bpo-39793(8): Use the same domain when testing ‘make_msgid’.  Patch
     by Batuhan Taskaya.

   - bpo-1812(9): Fix newline handling in doctest.testfile when loading
     from a package whose loader has a get_data method.  Patch by Peter
     Donis.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40162

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40146

   (4) https://bugs.python.org/issue?@action=redirect&bpo=40094

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40003

   (6) https://bugs.python.org/issue?@action=redirect&bpo=39380

   (7) https://datatracker.ietf.org/doc/html/rfc2640.html

   (8) https://bugs.python.org/issue?@action=redirect&bpo=39793

   (9) https://bugs.python.org/issue?@action=redirect&bpo=1812


File: python.info,  Node: Construção<50>,  Next: Windows<43>,  Prev: Testes<46>,  Up: Python 3 9 0 alpha 6

1.23.52.6 Construção
....................

   - bpo-38360(1): Support single-argument form of macOS -isysroot flag.

   - bpo-40158(2): Fix CPython MSBuild Properties in NuGet Package
     (build/native/python.props)

   - bpo-38527(3): Fix configure check on Solaris for “float word
     ordering”: sometimes, the correct “grep” command was not being
     used.  Patch by Arnon Yaari.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38360

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40158

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38527


File: python.info,  Node: Windows<43>,  Next: macOS<35>,  Prev: Construção<50>,  Up: Python 3 9 0 alpha 6

1.23.52.7 Windows
.................

   - bpo-40164(1): Updates Windows to OpenSSL 1.1.1f

   - bpo-8901(2): Ignore the Windows registry when the ‘-E’ option is
     used.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40164

   (2) https://bugs.python.org/issue?@action=redirect&bpo=8901


File: python.info,  Node: macOS<35>,  Next: IDLE<31>,  Prev: Windows<43>,  Up: Python 3 9 0 alpha 6

1.23.52.8 macOS
...............

   - bpo-38329(1): python.org macOS installers now update the Current
     version symlink of /Library/Frameworks/Python.framework/Versions
     for 3.9 installs.  Previously, Current was only updated for Python
     2.x installs.  This should make it easier to embed Python 3 into
     other macOS applications.

   - bpo-40164(2): Update macOS installer builds to use OpenSSL 1.1.1g.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38329

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40164


File: python.info,  Node: IDLE<31>,  Next: Ferramentas/Demos<24>,  Prev: macOS<35>,  Up: Python 3 9 0 alpha 6

1.23.52.9 IDLE
..............

   - bpo-38439(1): Add a 256×256 pixel IDLE icon to support more modern
     environments.  Created by Andrew Clover.  Delete the unused macOS
     idle.icns icon file.

   - bpo-38689(2): IDLE will no longer freeze when inspect.signature
     fails when fetching a calltip.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38439

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38689


File: python.info,  Node: Ferramentas/Demos<24>,  Next: API C<46>,  Prev: IDLE<31>,  Up: Python 3 9 0 alpha 6

1.23.52.10 Ferramentas/Demos
............................

   - bpo-40385(1): Removed the checkpyc.py tool.  Please see compileall
     without force mode as a potential alternative.

   - bpo-40179(2): Fixed translation of ‘#elif’ in Argument Clinic.

   - bpo-40094(3): Fix ‘which.py’ script exit code: it now uses *note
     os.waitstatus_to_exitcode(): 923. to convert *note os.system():
     14a5. exit status into an exit code.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40385

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40179

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40094


File: python.info,  Node: API C<46>,  Prev: Ferramentas/Demos<24>,  Up: Python 3 9 0 alpha 6

1.23.52.11 API C
................

   - bpo-40241(1): Move the ‘PyGC_Head’ structure to the internal C API.

   - bpo-40170(2): Convert *note PyObject_IS_GC(): 98b. macro to a
     function to hide implementation details.

   - bpo-40241(3): Add the functions *note PyObject_GC_IsTracked(): 97d.
     and *note PyObject_GC_IsFinalized(): 97e. to the public API to
     allow to query if Python objects are being currently tracked or
     have been already finalized by the garbage collector respectively.
     Patch by Pablo Galindo.

   - bpo-40170(4): The ‘PyObject_NEW()’ macro becomes an alias to the
     *note PyObject_New(): 98c. macro, and the ‘PyObject_NEW_VAR()’
     macro becomes an alias to the *note PyObject_NewVar(): 98d. macro,
     to hide implementation details.  They no longer access directly the
     *note PyTypeObject.tp_basicsize: 98e. member.

   - bpo-40170(5): *note PyType_HasFeature(): 1ac9. now always calls
     *note PyType_GetFlags(): 1aca. to hide implementation details.
     Previously, it accessed directly the *note PyTypeObject.tp_flags:
     19fd. member when the limited C API was not used.

   - bpo-40170(6): Convert the ‘PyObject_GET_WEAKREFS_LISTPTR()’ macro
     to a function to hide implementation details: the macro accessed
     directly to the *note PyTypeObject.tp_weaklistoffset: 98f. member.

   - bpo-40170(7): Convert *note PyObject_CheckBuffer(): 398. macro to a
     function to hide implementation details: the macro accessed
     directly the *note PyTypeObject.tp_as_buffer: 990. member.

   - bpo-40170(8): Always declare *note PyIndex_Check(): 991. as an
     opaque function to hide implementation details: remove
     ‘PyIndex_Check()’ macro.  The macro accessed directly the *note
     PyTypeObject.tp_as_number: 992. member.

   - bpo-39947(9): Add *note PyThreadState_GetID(): 979. function: get
     the unique identifier of a Python thread state.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40241

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40170

   (3) https://bugs.python.org/issue?@action=redirect&bpo=40241

   (4) https://bugs.python.org/issue?@action=redirect&bpo=40170

   (5) https://bugs.python.org/issue?@action=redirect&bpo=40170

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40170

   (7) https://bugs.python.org/issue?@action=redirect&bpo=40170

   (8) https://bugs.python.org/issue?@action=redirect&bpo=40170

   (9) https://bugs.python.org/issue?@action=redirect&bpo=39947


File: python.info,  Node: Python 3 9 0 alpha 5,  Next: Python 3 9 0 alpha 4,  Prev: Python 3 9 0 alpha 6,  Up: Changelog

1.23.53 Python 3.9.0 alpha 5
----------------------------

'Data de lançamento: 2020-03-23'

* Menu:

* Segurança: Segurança<35>.
* Núcleo e embutidos: Núcleo e embutidos<126>.
* Biblioteca: Biblioteca<128>.
* Documentação: Documentação<43>.
* Testes: Testes<47>.
* Construção: Construção<51>.
* Windows: Windows<44>.
* macOS: macOS<36>.
* IDLE: IDLE<32>.
* Ferramentas/Demos: Ferramentas/Demos<25>.
* API C: API C<47>.


File: python.info,  Node: Segurança<35>,  Next: Núcleo e embutidos<126>,  Up: Python 3 9 0 alpha 5

1.23.53.1 Segurança
...................

   - bpo-38576(1): Disallow control characters in hostnames in
     http.client, addressing CVE 2019-18348(2).  Such potentially
     malicious header injection URLs now cause a InvalidURL to be
     raised.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38576

   (2) https://www.cve.org/CVERecord?id=CVE-2019-18348


File: python.info,  Node: Núcleo e embutidos<126>,  Next: Biblioteca<128>,  Prev: Segurança<35>,  Up: Python 3 9 0 alpha 5

1.23.53.2 Núcleo e embutidos
............................

   - bpo-40010(1): Optimize pending calls in multithreaded applications.
     If a thread different than the main thread schedules a pending call
     (*note Py_AddPendingCall(): 988.), the bytecode evaluation loop is
     no longer interrupted at each bytecode instruction to check for
     pending calls which cannot be executed.  Only the main thread can
     execute pending calls.

     Previously, the bytecode evaluation loop was interrupted at each
     instruction until the main thread executes pending calls.

   - bpo-1635741(2): Port _weakref extension module to multiphase
     initialization ( PEP 489(3)).

   - bpo-1635741(4): Port _collections module to multiphase
     initialization ( PEP 489(5)).

   - bpo-40010(6): Optimize signal handling in multithreaded
     applications.  If a thread different than the main thread gets a
     signal, the bytecode evaluation loop is no longer interrupted at
     each bytecode instruction to check for pending signals which cannot
     be handled.  Only the main thread of the main interpreter can
     handle signals.

     Previously, the bytecode evaluation loop was interrupted at each
     instruction until the main thread handles signals.

   - bpo-39984(7): If *note Py_AddPendingCall(): 988. is called in a
     subinterpreter, the function is now scheduled to be called from the
     subinterpreter, rather than being called from the main interpreter.
     Each subinterpreter now has its own list of scheduled calls.

   - bpo-1635741(8): Port _heapq module to multiphase initialization.

   - bpo-1635741(9): Port itertools module to multiphase initialization
     ( PEP 489(10)).

   - bpo-37207(11): Speed up calls to ‘frozenset()’ by using the PEP
     590(12) ‘vectorcall’ calling convention.  Patch by Donghee Na.

   - bpo-39984(13): subinterpreters: Move
     ‘_PyRuntimeState.ceval.tracing_possible’ to
     ‘PyInterpreterState.ceval.tracing_possible’: each interpreter now
     has its own variable.

   - bpo-37207(14): Speed up calls to ‘set()’ by using the PEP 590(15)
     ‘vectorcall’ calling convention.  Patch by Donghee Na.

   - bpo-1635741(16): Port _statistics module to multiphase
     initialization ( PEP 489(17)).

   - bpo-39968(18): Use inline function to replace extension modules’
     get_module_state macros.

   - bpo-39965(19): Correctly raise ‘SyntaxError’ if 'await' is used
     inside non-async functions and ‘PyCF_ALLOW_TOP_LEVEL_AWAIT’ is set
     (like in the asyncio REPL). Patch by Pablo Galindo.

   - bpo-39562(20): Allow executing asynchronous comprehensions on the
     top level when the ‘PyCF_ALLOW_TOP_LEVEL_AWAIT’ flag is given.
     Patch by Batuhan Taskaya.

   - bpo-37207(21): Speed up calls to ‘tuple()’ by using the PEP 590(22)
     ‘vectorcall’ calling convention.  Patch by Donghee Na.

   - bpo-38373(23): Changed list overallocation strategy.  It no longer
     overallocates if the new size is closer to overallocated size than
     to the old size and adds padding.

   - bpo-39926(24): Update Unicode database to Unicode version 13.0.0.

   - bpo-19466(25): Clear the frames of daemon threads earlier during
     the Python shutdown to call objects destructors.  So “unclosed
     file” resource warnings are now emitted for daemon threads in a
     more reliable way.

   - bpo-38894(26): Fix a bug that was causing incomplete results when
     calling ‘pathlib.Path.glob’ in the presence of symlinks that point
     to files where the user does not have read access.  Patch by Pablo
     Galindo and Matt Wozniski.

   - bpo-39877(27): Fix *note PyEval_RestoreThread(): 3a9. random crash
     at exit with daemon threads.  It now accesses the ‘_PyRuntime’
     variable directly instead of using ‘tstate->interp->runtime’, since
     ‘tstate’ can be a dangling pointer after *note Py_Finalize(): 13a0.
     has been called.  Moreover, the daemon thread now exits before
     trying to take the GIL.

   - bpo-39871(28): Fix a possible *note SystemError: 575. in
     ‘math.{atan2,copysign,remainder}()’ when the first argument cannot
     be converted to a *note float: 2f7.  Patch by Zackery Spytz.

   - bpo-39776(29): Fix race condition where threads created by
     PyGILState_Ensure() could get a duplicate id.

     Isso afeta os usuários de tstate->id como o mecanismo de
     armazenamento em cache da contextvar, que pode retornar objetos em
     cache inválidos sob uso intenso de threads (observado em cenários
     de sistemas embarcados).

   - bpo-39778(30): Fixed a crash due to incorrect handling of weak
     references in ‘collections.OrderedDict’ classes.  Patch by Pablo
     Galindo.

   - bpo-1635741(31): Port audioop extension module to multiphase
     initialization ( PEP 489(32)).

   - bpo-39702(33): Relax *note decorator: 731. grammar restrictions to
     allow any valid expression ( PEP 614(34)).

   - bpo-38091(35): Tweak import deadlock detection code to not deadlock
     itself.

   - bpo-1635741(36): Port _locale extension module to multiphase
     initialization ( PEP 489(37)).

   - bpo-39087(38): Optimize *note PyUnicode_AsUTF8(): bd4. and *note
     PyUnicode_AsUTF8AndSize(): 89d. slightly when they need to create
     internal UTF-8 cache.

   - bpo-39520(39): Fix unparsing of ext slices with no items
     (‘foo[:,]’).  Patch by Batuhan Taskaya.

   - bpo-39220(40): Do not optimize annotations if ‘from __future__
     import annotations’ is used.  Patch by Pablo Galindo.

   - bpo-35712(41): Using *note NotImplemented: 7d3. in a boolean
     context has been deprecated.  Patch contributed by Josh Rosenberg.

   - bpo-22490(42): Don’t leak environment variable
     ‘__PYVENV_LAUNCHER__’ into the interpreter session on macOS.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40010

   (2) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (3) https://peps.python.org/pep-0489/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (5) https://peps.python.org/pep-0489/

   (6) https://bugs.python.org/issue?@action=redirect&bpo=40010

   (7) https://bugs.python.org/issue?@action=redirect&bpo=39984

   (8) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (9) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (10) https://peps.python.org/pep-0489/

   (11) https://bugs.python.org/issue?@action=redirect&bpo=37207

   (12) https://peps.python.org/pep-0590/

   (13) https://bugs.python.org/issue?@action=redirect&bpo=39984

   (14) https://bugs.python.org/issue?@action=redirect&bpo=37207

   (15) https://peps.python.org/pep-0590/

   (16) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (17) https://peps.python.org/pep-0489/

   (18) https://bugs.python.org/issue?@action=redirect&bpo=39968

   (19) https://bugs.python.org/issue?@action=redirect&bpo=39965

   (20) https://bugs.python.org/issue?@action=redirect&bpo=39562

   (21) https://bugs.python.org/issue?@action=redirect&bpo=37207

   (22) https://peps.python.org/pep-0590/

   (23) https://bugs.python.org/issue?@action=redirect&bpo=38373

   (24) https://bugs.python.org/issue?@action=redirect&bpo=39926

   (25) https://bugs.python.org/issue?@action=redirect&bpo=19466

   (26) https://bugs.python.org/issue?@action=redirect&bpo=38894

   (27) https://bugs.python.org/issue?@action=redirect&bpo=39877

   (28) https://bugs.python.org/issue?@action=redirect&bpo=39871

   (29) https://bugs.python.org/issue?@action=redirect&bpo=39776

   (30) https://bugs.python.org/issue?@action=redirect&bpo=39778

   (31) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (32) https://peps.python.org/pep-0489/

   (33) https://bugs.python.org/issue?@action=redirect&bpo=39702

   (34) https://peps.python.org/pep-0614/

   (35) https://bugs.python.org/issue?@action=redirect&bpo=38091

   (36) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (37) https://peps.python.org/pep-0489/

   (38) https://bugs.python.org/issue?@action=redirect&bpo=39087

   (39) https://bugs.python.org/issue?@action=redirect&bpo=39520

   (40) https://bugs.python.org/issue?@action=redirect&bpo=39220

   (41) https://bugs.python.org/issue?@action=redirect&bpo=35712

   (42) https://bugs.python.org/issue?@action=redirect&bpo=22490


File: python.info,  Node: Biblioteca<128>,  Next: Documentação<43>,  Prev: Núcleo e embutidos<126>,  Up: Python 3 9 0 alpha 5

1.23.53.3 Biblioteca
....................

   - bpo-39830(1): Add *note zipfile.Path: 6c9. to ‘__all__’ in the
     *note zipfile: 131. module.

   - bpo-40000(2): Improved error messages for validation of
     ‘ast.Constant’ nodes.  Patch by Batuhan Taskaya.

   - bpo-39999(3): ‘__module__’ of the AST node classes is now set to
     “ast” instead of “_ast”.  Added docstrings for dummy AST node
     classes and deprecated attributes.

   - bpo-39991(4): *note uuid.getnode(): bbf. now skips IPv6 addresses
     with the same string length than a MAC address (17 characters):
     only use MAC addresses.

   - bpo-39988(5): Deprecated ‘ast.AugLoad’ and ‘ast.AugStore’ node
     classes because they are no longer used.

   - bpo-39656(6): Ensure ‘bin/python3.#’ is always present in virtual
     environments on POSIX platforms - by Anthony Sottile.

   - bpo-39969(7): Deprecated ‘ast.Param’ node class because it’s no
     longer used.  Patch by Batuhan Taskaya.

   - bpo-39360(8): Ensure all workers exit when finalizing a
     ‘multiprocessing.Pool’ implicitly via the module finalization
     handlers of multiprocessing.  This fixes a deadlock situation that
     can be experienced when the Pool is not properly finalized via the
     context manager or a call to ‘multiprocessing.Pool.terminate’.
     Patch by Batuhan Taskaya and Pablo Galindo.

   - bpo-35370(9): sys.settrace(), sys.setprofile() and
     _lsprof.Profiler.enable() now properly report *note PySys_Audit():
     36f. error if “sys.setprofile” or “sys.settrace” audit event is
     denied.

   - bpo-39936(10): AIX: Fix _aix_support module when the subprocess is
     not available, when building Python from scratch.  It now uses new
     private _bootsubprocess module, rather than having two
     implementations depending if subprocess is available or not.  So
     _aix_support.aix_platform() result is now the same if subprocess is
     available or not.

   - bpo-36144(11): *note collections.OrderedDict: 5db. now implements
     ‘|’ and ‘|=’ ( PEP 584(12)).

   - bpo-39652(13): The column name found in
     ‘sqlite3.Cursor.description’ is now truncated on the first ‘[’ only
     if the PARSE_COLNAMES option is set.

   - bpo-39915(14): Ensure *note
     unittest.mock.AsyncMock.await_args_list: 1af7. has call objects in
     the order of awaited arguments instead of using *note
     unittest.mock.Mock.call_args: 1af8. which has the last value of the
     call.  Patch by Karthikeyan Singaravelan.

   - bpo-36144(15): Updated *note os.environ: 11f9. and *note
     os.environb: 1257. to support PEP 584(16)’s merge (‘|’) and update
     (‘|=’) operators.

   - bpo-38662(17): The ‘ensurepip’ module now invokes ‘pip’ via the
     ‘runpy’ module.  Hence it is no longer tightly coupled with the
     internal API of the bundled ‘pip’ version, allowing easier updates
     to a newer ‘pip’ version both internally and for distributors.

   - bpo-38075(18): Fix the *note random.Random.seed(): 1af9. method
     when a *note bool: 468. is passed as the seed.

   - bpo-39916(19): More reliable use of ‘os.scandir()’ in
     ‘Path.glob()’.  It no longer emits a ResourceWarning when
     interrupted.

   - bpo-39850(20): *note multiprocessing: 94. now supports abstract
     socket addresses (if abstract sockets are supported in the running
     platform).  When creating arbitrary addresses (like when
     default-constructing *note multiprocessing.connection.Listener:
     179e. objects) abstract sockets are preferred to avoid the case
     when the temporary-file-generated address is too large for an
     AF_UNIX socket address.  Patch by Pablo Galindo.

   - bpo-36287(21): *note ast.dump(): 8ea. no longer outputs optional
     fields and attributes with default values.  The default values for
     optional fields and attributes of AST nodes are now set as class
     attributes (e.g.  ‘Constant.kind’ is set to ‘None’).

   - bpo-39889(22): Fixed *note ast.unparse(): 8eb. for extended slices
     containing a single element (e.g.  ‘a[i:j,]’).  Remove redundant
     tuples when index with a tuple (e.g.  ‘a[i, j]’).

   - bpo-39828(23): Fix *note json.tool: 83. to catch *note
     BrokenPipeError: 1095.  Patch by Donghee Na.

   - bpo-13487(24): Avoid a possible '“RuntimeError: dictionary changed
     size during iteration”' from *note inspect.getmodule(): 18f8. when
     it tried to loop through *note sys.modules: 1636.

   - bpo-39674(25): Revert “bpo-37330(26): open() no longer accept ‘U’
     in file mode”.  The “U” mode of open() is kept in Python 3.9 to
     ease transition from Python 2.7, but will be removed in Python
     3.10.

   - bpo-28577(27): The hosts method on 32-bit prefix length
     IPv4Networks and 128-bit prefix IPv6Networks now returns a list
     containing the single Address instead of an empty list.

   - bpo-39826(28): Add getConnection method to logging HTTPHandler to
     enable custom connections.

   - bpo-39763(29): Reimplement ‘distutils.spawn.spawn’ function with
     the *note subprocess: d6. module.

   - bpo-39794(30): Add –without-decimal-contextvar build option.  This
     enables a thread-local rather than a coroutine local context.

   - bpo-36144(31): *note collections.defaultdict: 11fc. now implements
     ‘|’ ( PEP 584(32)).

   - bpo-39517(33): Fix runpy.run_path() when using pathlike objects

   - bpo-39775(34): Change ‘inspect.Signature.parameters’ back to
     ‘collections.OrderedDict’.  This was changed to ‘dict’ in Python
     3.9.0a4.

   - bpo-39678(35): Refactor queue_manager in *note
     concurrent.futures.ProcessPoolExecutor: 8f4. to make it easier to
     maintain.

   - bpo-39764(36): Fix AttributeError when calling get_stack on a
     PyAsyncGenObject Task

   - bpo-39769(37): The *note compileall.compile_dir(): b38. function’s
     'ddir' parameter and the compileall command line flag ‘-d’ no
     longer write the wrong pathname to the generated pyc file for
     submodules beneath the root of the directory tree being compiled.
     This fixes a regression introduced with Python 3.5.

   - bpo-36144(38): *note types.MappingProxyType: 46d. objects now
     support the merge (‘|’) operator from PEP 584(39).

   - bpo-38691(40): The *note importlib: 77. module now ignores the
     *note PYTHONCASEOK: 963. environment variable when the *note -E:
     964. or *note -I: 965. command line options are being used.

   - bpo-39719(41): Remove ‘tempfile.SpooledTemporaryFile.softspace()’
     as files no longer have the ‘softspace’ attribute in Python 3.
     Patch by Shantanu.

   - bpo-39667(42): Improve pathlib.Path compatibility on zipfile.Path
     and correct performance degradation as found in zipp 3.0.

   - bpo-39638(43): Keep ASDL signatures in the docstrings for ‘AST’
     nodes.  Patch by Batuhan Taskaya

   - bpo-39639(44): Deprecated ‘ast.Suite’ node class because it’s no
     longer used.  Patch by Batuhan Taskaya.

   - bpo-39609(45): Add thread_name_prefix to default asyncio executor

   - bpo-39548(46): Fix handling of header in *note
     urllib.request.AbstractDigestAuthHandler: 1afa. when the optional
     ‘qop’ parameter is not present.

   - bpo-39509(47): HTTP status codes ‘103 EARLY_HINTS’ and ‘425
     TOO_EARLY’ are added to *note http.HTTPStatus: 906.  Patch by
     Donghee Na.

   - bpo-39507(48): Adding HTTP status 418 “I’m a Teapot” to HTTPStatus
     in http library.  Patch by Ross Rhodes.

   - bpo-39495(49): Remove default value from 'attrs' parameter of *note
     xml.etree.ElementTree.TreeBuilder.start(): 1afb. for consistency
     between Python and C implementations.

   - bpo-38971(50): Open issue in the BPO indicated a desire to make the
     implementation of codecs.open() at parity with io.open(), which
     implements a try/except to assure file stream gets closed before an
     exception is raised.

   - bpo-38641(51): Added starred expressions support to ‘return’ and
     ‘yield’ statements for ‘lib2to3’.  Patch by Vlad Emelianov.

   - bpo-37534(52): When using minidom module to generate XML documents
     the ability to add Standalone Document Declaration is added.  All
     the changes are made to generate a document in compliance with
     Extensible Markup Language (XML) 1.0 (Fifth Edition) W3C
     Recommendation (available here:
     ‘https://www.w3.org/TR/xml/#sec-prolog-dtd’).

   - bpo-34788(53): Add support for scoped IPv6 addresses to *note
     ipaddress: 80.  Patch by Oleksandr Pavliuk.

   - bpo-34822(54): Simplified AST for subscription.  Simple indices are
     now represented by their value, extended slices are represented as
     tuples.  *note ast: 8. classes ‘Index’ and ‘ExtSlice’ are
     considered deprecated and will be removed in future Python
     versions.  In the meantime, ‘Index(value)’ now returns a ‘value’
     itself, ‘ExtSlice(slices)’ returns ‘Tuple(slices, Load())’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39830

   (2) https://bugs.python.org/issue?@action=redirect&bpo=40000

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39999

   (4) https://bugs.python.org/issue?@action=redirect&bpo=39991

   (5) https://bugs.python.org/issue?@action=redirect&bpo=39988

   (6) https://bugs.python.org/issue?@action=redirect&bpo=39656

   (7) https://bugs.python.org/issue?@action=redirect&bpo=39969

   (8) https://bugs.python.org/issue?@action=redirect&bpo=39360

   (9) https://bugs.python.org/issue?@action=redirect&bpo=35370

   (10) https://bugs.python.org/issue?@action=redirect&bpo=39936

   (11) https://bugs.python.org/issue?@action=redirect&bpo=36144

   (12) https://peps.python.org/pep-0584/

   (13) https://bugs.python.org/issue?@action=redirect&bpo=39652

   (14) https://bugs.python.org/issue?@action=redirect&bpo=39915

   (15) https://bugs.python.org/issue?@action=redirect&bpo=36144

   (16) https://peps.python.org/pep-0584/

   (17) https://bugs.python.org/issue?@action=redirect&bpo=38662

   (18) https://bugs.python.org/issue?@action=redirect&bpo=38075

   (19) https://bugs.python.org/issue?@action=redirect&bpo=39916

   (20) https://bugs.python.org/issue?@action=redirect&bpo=39850

   (21) https://bugs.python.org/issue?@action=redirect&bpo=36287

   (22) https://bugs.python.org/issue?@action=redirect&bpo=39889

   (23) https://bugs.python.org/issue?@action=redirect&bpo=39828

   (24) https://bugs.python.org/issue?@action=redirect&bpo=13487

   (25) https://bugs.python.org/issue?@action=redirect&bpo=39674

   (26) https://bugs.python.org/issue?@action=redirect&bpo=37330

   (27) https://bugs.python.org/issue?@action=redirect&bpo=28577

   (28) https://bugs.python.org/issue?@action=redirect&bpo=39826

   (29) https://bugs.python.org/issue?@action=redirect&bpo=39763

   (30) https://bugs.python.org/issue?@action=redirect&bpo=39794

   (31) https://bugs.python.org/issue?@action=redirect&bpo=36144

   (32) https://peps.python.org/pep-0584/

   (33) https://bugs.python.org/issue?@action=redirect&bpo=39517

   (34) https://bugs.python.org/issue?@action=redirect&bpo=39775

   (35) https://bugs.python.org/issue?@action=redirect&bpo=39678

   (36) https://bugs.python.org/issue?@action=redirect&bpo=39764

   (37) https://bugs.python.org/issue?@action=redirect&bpo=39769

   (38) https://bugs.python.org/issue?@action=redirect&bpo=36144

   (39) https://peps.python.org/pep-0584/

   (40) https://bugs.python.org/issue?@action=redirect&bpo=38691

   (41) https://bugs.python.org/issue?@action=redirect&bpo=39719

   (42) https://bugs.python.org/issue?@action=redirect&bpo=39667

   (43) https://bugs.python.org/issue?@action=redirect&bpo=39638

   (44) https://bugs.python.org/issue?@action=redirect&bpo=39639

   (45) https://bugs.python.org/issue?@action=redirect&bpo=39609

   (46) https://bugs.python.org/issue?@action=redirect&bpo=39548

   (47) https://bugs.python.org/issue?@action=redirect&bpo=39509

   (48) https://bugs.python.org/issue?@action=redirect&bpo=39507

   (49) https://bugs.python.org/issue?@action=redirect&bpo=39495

   (50) https://bugs.python.org/issue?@action=redirect&bpo=38971

   (51) https://bugs.python.org/issue?@action=redirect&bpo=38641

   (52) https://bugs.python.org/issue?@action=redirect&bpo=37534

   (53) https://bugs.python.org/issue?@action=redirect&bpo=34788

   (54) https://bugs.python.org/issue?@action=redirect&bpo=34822


File: python.info,  Node: Documentação<43>,  Next: Testes<47>,  Prev: Biblioteca<128>,  Up: Python 3 9 0 alpha 5

1.23.53.4 Documentação
......................

   - bpo-39868(1): Updated the Language Reference for PEP 572(2).

   - bpo-13790(3): Change ‘string’ to ‘specification’ in format doc.

   - bpo-17422(4): The language reference no longer restricts default
     class namespaces to dicts only.

   - bpo-39530(5): Fix misleading documentation about mixed-type numeric
     comparisons.

   - bpo-39718(6): Update *note token: fa. documentation to reflect
     additions in Python 3.8

   - bpo-39677(7): Changed operand name of 'MAKE_FUNCTION' from 'argc'
     to 'flags' for module *note dis: 38.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39868

   (2) https://peps.python.org/pep-0572/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=13790

   (4) https://bugs.python.org/issue?@action=redirect&bpo=17422

   (5) https://bugs.python.org/issue?@action=redirect&bpo=39530

   (6) https://bugs.python.org/issue?@action=redirect&bpo=39718

   (7) https://bugs.python.org/issue?@action=redirect&bpo=39677


File: python.info,  Node: Testes<47>,  Next: Construção<51>,  Prev: Documentação<43>,  Up: Python 3 9 0 alpha 5

1.23.53.5 Testes
................

   - bpo-40019(1): test_gdb now skips tests if it detects that gdb
     failed to read debug information because the Python binary is
     optimized.

   - bpo-27807(2): ‘test_site.test_startup_imports()’ is now skipped if
     a path of *note sys.path: 3b4. contains a ‘.pth’ file.

   - bpo-26067(3): Do not fail test_shutil test_chown test when uid or
     gid of user cannot be resolved to a name.

   - bpo-39855(4): test_subprocess.test_user() now skips the test on an
     user name if the user name doesn’t exist.  For example, skip the
     test if the user “nobody” doesn’t exist on Linux.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40019

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27807

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26067

   (4) https://bugs.python.org/issue?@action=redirect&bpo=39855


File: python.info,  Node: Construção<51>,  Next: Windows<44>,  Prev: Testes<47>,  Up: Python 3 9 0 alpha 5

1.23.53.6 Construção
....................

   - bpo-39761(1): Fix build with DTrace but without additional DFLAGS.

   - bpo-39763(2): setup.py now uses a basic implementation of the *note
     subprocess: d6. module if the *note subprocess: d6. module is not
     available: before required C extension modules are built.

   - bpo-1294959(3): Add ‘--with-platlibdir’ option to the configure
     script: name of the platform-specific library directory, stored in
     the new *note sys.platlibdir: 93f. attribute.  It is used to build
     the path of platform-specific extension modules and the path of the
     standard library.  It is equal to ‘"lib"’ on most platforms.  On
     Fedora and SuSE, it is equal to ‘"lib64"’ on 64-bit platforms.
     Patch by Jan Matějek, Matěj Cepl, Charalampos Stratakis and Victor
     Stinner.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39761

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39763

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1294959


File: python.info,  Node: Windows<44>,  Next: macOS<36>,  Prev: Construção<51>,  Up: Python 3 9 0 alpha 5

1.23.53.7 Windows
.................

   - bpo-39930(1): Ensures the required ‘vcruntime140.dll’ is included
     in install packages.

   - bpo-39847(2): Avoid hang when computer is hibernated whilst waiting
     for a mutex (for lock-related objects from *note threading: ed.)
     around 49-day uptime.

   - bpo-38597(3): ‘distutils’ will no longer statically link
     ‘vcruntime140.dll’ when a redistributable version is unavailable.
     All future releases of CPython will include a copy of this DLL to
     ensure distributed extensions can continue to load.

   - bpo-38380(4): Update Windows builds to use SQLite 3.31.1

   - bpo-39789(5): Update Windows release build machines to Visual
     Studio 2019 (MSVC 14.2).

   - bpo-34803(6): Package for nuget.org now includes repository
     reference and bundled icon image.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39930

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39847

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38597

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38380

   (5) https://bugs.python.org/issue?@action=redirect&bpo=39789

   (6) https://bugs.python.org/issue?@action=redirect&bpo=34803


File: python.info,  Node: macOS<36>,  Next: IDLE<32>,  Prev: Windows<44>,  Up: Python 3 9 0 alpha 5

1.23.53.8 macOS
...............

   - bpo-38380(1): Update macOS builds to use SQLite 3.31.1

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38380


File: python.info,  Node: IDLE<32>,  Next: Ferramentas/Demos<25>,  Prev: macOS<36>,  Up: Python 3 9 0 alpha 5

1.23.53.9 IDLE
..............

   - bpo-27115(1): For ‘Go to Line’, use a Query box subclass with IDLE
     standard behavior and improved error checking.

   - bpo-39885(2): Since clicking to get an IDLE context menu moves the
     cursor, any text selection should be and now is cleared.

   - bpo-39852(3): Edit “Go to line” now clears any selection,
     preventing accidental deletion.  It also updates Ln and Col on the
     status bar.

   - bpo-39781(4): Selecting code context lines no longer causes a jump.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27115

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39885

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39852

   (4) https://bugs.python.org/issue?@action=redirect&bpo=39781


File: python.info,  Node: Ferramentas/Demos<25>,  Next: API C<47>,  Prev: IDLE<32>,  Up: Python 3 9 0 alpha 5

1.23.53.10 Ferramentas/Demos
............................

   - bpo-36184(1): Port python-gdb.py to FreeBSD. python-gdb.py now
     checks for “take_gil” function name to check if a frame tries to
     acquire the GIL, instead of checking for “pthread_cond_timedwait”
     which is specific to Linux and can be a different condition than
     the GIL.

   - bpo-38080(2): Added support to fix ‘getproxies’ in the
     ‘lib2to3.fixes.fix_urllib’ module.  Patch by José Roberto Meza
     Cabrera.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36184

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38080


File: python.info,  Node: API C<47>,  Prev: Ferramentas/Demos<25>,  Up: Python 3 9 0 alpha 5

1.23.53.11 API C
................

   - bpo-40024(1): Add *note PyModule_AddType(): 97c. helper function:
     add a type to a module.  Patch by Donghee Na.

   - bpo-39946(2): Remove ‘_PyRuntime.getframe’ hook and remove
     ‘_PyThreadState_GetFrame’ macro which was an alias to
     ‘_PyRuntime.getframe’.  They were only exposed by the internal C
     API. Remove also ‘PyThreadFrameGetter’ type.

   - bpo-39947(3): Add *note PyThreadState_GetFrame(): 78e. function:
     get the current frame of a Python thread state.

   - bpo-37207(4): Add _PyArg_NoKwnames helper function.  Patch by
     Donghee Na.

   - bpo-39947(5): Add *note PyThreadState_GetInterpreter(): 978.: get
     the interpreter of a Python thread state.

   - bpo-39947(6): Add *note PyInterpreterState_Get(): 3ad. function to
     the limited C API.

   - bpo-35370(7): If *note PySys_Audit(): 36f. fails in *note
     PyEval_SetProfile(): 1545. or *note PyEval_SetTrace(): 421, log the
     error as an unraisable exception.

   - bpo-39947(8): Move the static inline function flavor of
     Py_EnterRecursiveCall() and Py_LeaveRecursiveCall() to the internal
     C API: they access PyThreadState attributes.  The limited C API
     provides regular functions which hide implementation details.

   - bpo-39947(9): Py_TRASHCAN_BEGIN_CONDITION and Py_TRASHCAN_END macro
     no longer access PyThreadState attributes, but call new private
     _PyTrash_begin() and _PyTrash_end() functions which hide
     implementation details.

   - bpo-39884(10): *note PyDescr_NewMethod(): 1b04. and *note
     PyCFunction_NewEx(): 1b05. now include the method name in the
     SystemError “bad call flags” error message to ease debug.

   - bpo-39877(11): Deprecated ‘PyEval_InitThreads()’ and
     ‘PyEval_ThreadsInitialized()’.  Calling ‘PyEval_InitThreads()’ now
     does nothing.

   - bpo-38249(12): *note Py_UNREACHABLE: bcd. is now implemented with
     ‘__builtin_unreachable()’ and analogs in release mode.

   - bpo-38643(13): *note PyNumber_ToBase(): 18fe. now raises a *note
     SystemError: 575. instead of crashing when called with invalid
     base.

   - bpo-39882(14): The *note Py_FatalError(): 98a. function is replaced
     with a macro which logs automatically the name of the current
     function, unless the ‘Py_LIMITED_API’ macro is defined.

   - bpo-39824(15): Extension modules: *note m_traverse: 981, *note
     m_clear: 982. and *note m_free: 983. functions of *note
     PyModuleDef: 984. are no longer called if the module state was
     requested but is not allocated yet.  This is the case immediately
     after the module is created and before the module is executed
     (*note Py_mod_exec: 985. function).  More precisely, these
     functions are not called if *note m_size: 986. is greater than 0
     and the module state (as returned by *note PyModule_GetState():
     987.) is ‘NULL’.

     Módulos de extensão sem um estado de módulo (‘m_size <= 0’) não são
     afetados.

   - bpo-38913(16): Fixed segfault in ‘Py_BuildValue()’ called with a
     format containing “#” and undefined PY_SSIZE_T_CLEAN whwn an
     exception is set.

   - bpo-38500(17): Add a private API to get and set the frame
     evaluation function: add *note
     _PyInterpreterState_GetEvalFrameFunc(): 1b06. and *note
     _PyInterpreterState_SetEvalFrameFunc(): 1b07. C functions.  The
     *note _PyFrameEvalFunction: 776. function type now takes a 'tstate'
     parameter.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=40024

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39946

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39947

   (4) https://bugs.python.org/issue?@action=redirect&bpo=37207

   (5) https://bugs.python.org/issue?@action=redirect&bpo=39947

   (6) https://bugs.python.org/issue?@action=redirect&bpo=39947

   (7) https://bugs.python.org/issue?@action=redirect&bpo=35370

   (8) https://bugs.python.org/issue?@action=redirect&bpo=39947

   (9) https://bugs.python.org/issue?@action=redirect&bpo=39947

   (10) https://bugs.python.org/issue?@action=redirect&bpo=39884

   (11) https://bugs.python.org/issue?@action=redirect&bpo=39877

   (12) https://bugs.python.org/issue?@action=redirect&bpo=38249

   (13) https://bugs.python.org/issue?@action=redirect&bpo=38643

   (14) https://bugs.python.org/issue?@action=redirect&bpo=39882

   (15) https://bugs.python.org/issue?@action=redirect&bpo=39824

   (16) https://bugs.python.org/issue?@action=redirect&bpo=38913

   (17) https://bugs.python.org/issue?@action=redirect&bpo=38500


File: python.info,  Node: Python 3 9 0 alpha 4,  Next: Python 3 9 0 alpha 3,  Prev: Python 3 9 0 alpha 5,  Up: Changelog

1.23.54 Python 3.9.0 alpha 4
----------------------------

'Data de lançamento: 2020-02-25'

* Menu:

* Segurança: Segurança<36>.
* Núcleo e embutidos: Núcleo e embutidos<127>.
* Biblioteca: Biblioteca<129>.
* Documentação: Documentação<44>.
* Testes: Testes<48>.
* Construção: Construção<52>.
* Windows: Windows<45>.
* IDLE: IDLE<33>.
* API C: API C<48>.


File: python.info,  Node: Segurança<36>,  Next: Núcleo e embutidos<127>,  Up: Python 3 9 0 alpha 4

1.23.54.1 Segurança
...................

   - bpo-39184(1): Add audit events to functions in ‘fcntl’, ‘msvcrt’,
     ‘os’, ‘resource’, ‘shutil’, ‘signal’ and ‘syslog’.

   - bpo-39401(2): Avoid unsafe DLL load at startup on Windows 7 and
     earlier.

   - bpo-39184(3): Add audit events to command execution functions in os
     and pty modules.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39184

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39401

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39184


File: python.info,  Node: Núcleo e embutidos<127>,  Next: Biblioteca<129>,  Prev: Segurança<36>,  Up: Python 3 9 0 alpha 4

1.23.54.2 Núcleo e embutidos
............................

   - bpo-39382(1): Fix a use-after-free in the single inheritance path
     of ‘issubclass()’, when the ‘__bases__’ of an object has a single
     reference, and so does its first item.  Patch by Yonatan
     Goldschmidt.

   - bpo-39573(2): Update clinic tool to use *note Py_IS_TYPE(): 192b.
     Patch by Donghee Na.

   - bpo-39619(3): Enable use of *note os.chroot(): 1b0b. on HP-UX
     systems.

   - bpo-39573(4): Add *note Py_IS_TYPE(): 192b. static inline function
     to check whether the object 'o' type is 'type'.

   - bpo-39606(5): Fix regression caused by fix for bpo-39386(6), that
     prevented calling ‘aclose’ on an async generator that had already
     been closed or exhausted.

   - bpo-39579(7): Change the ending column offset of ‘Attribute’ nodes
     constructed in ‘ast_for_dotted_name’ to point at the end of the
     current node and not at the end of the last ‘NAME’ node.

   - bpo-1635741(8): Port _crypt extension module to multiphase
     initialization ( PEP 489(9)).

   - bpo-1635741(10): Port _contextvars extension module to multiphase
     initialization ( PEP 489(11)).

   - bpo-39510(12): Fix segfault in ‘readinto()’ method on closed
     BufferedReader.

   - bpo-39502(13): Fix *note time.localtime(): 1541. on 64-bit AIX to
     support years before 1902 and after 2038.  Patch by M Felt.

   - bpo-39492(14): Fix a reference cycle in the C Pickler that was
     preventing the garbage collection of deleted, pickled objects.

   - bpo-39453(15): Fixed a possible crash in ‘list.__contains__()’ when
     a list is changed during comparing items.  Patch by Donghee Na.

   - bpo-39434(16): *note floor division: 94b. of float operation now
     has a better performance.  Also the message of *note
     ZeroDivisionError: 94c. for this operation is updated.  Patch by
     Donghee Na.

   - bpo-1635741(17): Port _codecs extension module to multiphase
     initialization ( PEP 489(18)).

   - bpo-1635741(19): Port _bz2 extension module to multiphase
     initialization ( PEP 489(20)).

   - bpo-1635741(21): Port _abc extension module to multiphase
     initialization ( PEP 489(22)).

   - bpo-39320(23): Replace two complex bytecodes for building dicts
     with two simpler ones.  The new bytecodes ‘DICT_MERGE’ and
     ‘DICT_UPDATE’ have been added The old bytecodes ‘BUILD_MAP_UNPACK’
     and ‘BUILD_MAP_UNPACK_WITH_CALL’ have been removed.

   - bpo-39219(24): Syntax errors raised in the tokenizer now always set
     correct “text” and “offset” attributes.

   - bpo-36051(25): Drop the GIL during large ‘bytes.join’ operations.
     Patch by Bruce Merry.

   - bpo-38960(26): Fix DTrace build issues on FreeBSD. Patch by David
     Carlier.

   - bpo-37207(27): Speed up calls to ‘range()’ by about 30%, by using
     the PEP 590 ‘vectorcall’ calling convention.  Patch by Mark
     Shannon.

   - bpo-36144(28): *note dict: 256. (and *note collections.UserDict:
     1b0c.) objects now support PEP 584’s merge (‘|’) and update (‘|=’)
     operators.  Patch by Brandt Bucher.

   - bpo-32856(29): Optimized the idiom for assignment a temporary
     variable in comprehensions.  Now ‘for y in [expr]’ in
     comprehensions is as fast as a simple assignment ‘y = expr’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39382

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39573

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39619

   (4) https://bugs.python.org/issue?@action=redirect&bpo=39573

   (5) https://bugs.python.org/issue?@action=redirect&bpo=39606

   (6) https://bugs.python.org/issue?@action=redirect&bpo=39386

   (7) https://bugs.python.org/issue?@action=redirect&bpo=39579

   (8) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (9) https://peps.python.org/pep-0489/

   (10) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (11) https://peps.python.org/pep-0489/

   (12) https://bugs.python.org/issue?@action=redirect&bpo=39510

   (13) https://bugs.python.org/issue?@action=redirect&bpo=39502

   (14) https://bugs.python.org/issue?@action=redirect&bpo=39492

   (15) https://bugs.python.org/issue?@action=redirect&bpo=39453

   (16) https://bugs.python.org/issue?@action=redirect&bpo=39434

   (17) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (18) https://peps.python.org/pep-0489/

   (19) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (20) https://peps.python.org/pep-0489/

   (21) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (22) https://peps.python.org/pep-0489/

   (23) https://bugs.python.org/issue?@action=redirect&bpo=39320

   (24) https://bugs.python.org/issue?@action=redirect&bpo=39219

   (25) https://bugs.python.org/issue?@action=redirect&bpo=36051

   (26) https://bugs.python.org/issue?@action=redirect&bpo=38960

   (27) https://bugs.python.org/issue?@action=redirect&bpo=37207

   (28) https://bugs.python.org/issue?@action=redirect&bpo=36144

   (29) https://bugs.python.org/issue?@action=redirect&bpo=32856


File: python.info,  Node: Biblioteca<129>,  Next: Documentação<44>,  Prev: Núcleo e embutidos<127>,  Up: Python 3 9 0 alpha 4

1.23.54.3 Biblioteca
....................

   - bpo-30566(1): Fix *note IndexError: 157e. when trying to decode an
     invalid string with punycode codec.

   - bpo-39649(2): Remove obsolete check for ‘__args__’ in
     ‘bdb.Bdb.format_stack_entry’.

   - bpo-39648(3): Expanded *note math.gcd(): 916. and *note math.lcm():
     917. to handle multiple arguments.

   - bpo-39681(4): Fix a regression where the C pickle module wouldn’t
     allow unpickling from a file-like object that doesn’t expose a
     readinto() method.

   - bpo-35950(5): Raise *note io.UnsupportedOperation: 1b0e. in
     ‘io.BufferedReader.truncate()’ when it is called on a read-only
     *note io.BufferedReader: 124e. instance.

   - bpo-39479(6): Add *note math.lcm(): 917. function: least common
     multiple.

   - bpo-39674(7): Revert “Do not expose abstract collection classes in
     the collections module” change (bpo-25988(8)).  Aliases to ABC like
     collections.Mapping are kept in Python 3.9 to ease transition from
     Python 2.7, but will be removed in Python 3.10.

   - bpo-39104(9): Fix hanging ProcessPoolExcutor on
     ‘shutdown(wait=False)’ when a task has failed pickling.

   - bpo-39627(10): Fixed TypedDict totality check for inherited keys.

   - bpo-39474(11): Fixed starting position of AST for expressions like
     ‘(a)(b)’, ‘(a)[b]’ and ‘(a).b’.

   - bpo-21016(12): The *note pydoc: b5. and *note trace: fd. modules
     now use the *note sysconfig: db. module to get the path to the
     Python standard library, to support uncommon installation path like
     ‘/usr/lib64/python3.9/’ on Fedora.  Patch by Jan Matějek.

   - bpo-39590(13): Collections.deque now holds strong references during
     deque.__contains__ and deque.count, fixing crashes.

   - bpo-39586(14): The distutils ‘bdist_msi’ command is deprecated in
     Python 3.9, use ‘bdist_wheel’ (wheel packages) instead.

   - bpo-39595(15): Improved performance of zipfile.Path for files with
     a large number of entries.  Also improved performance and fixed
     minor issue as published with importlib_metadata 1.5(16).

   - bpo-39350(17): Fix regression in *note fractions.Fraction: 1e7. if
     the numerator and/or the denominator is an *note int: 257.
     subclass.  The *note math.gcd(): 916. function is now used to
     normalize the 'numerator' and 'denominator'.  *note math.gcd():
     916. always return a *note int: 257. type.  Previously, the GCD
     type depended on 'numerator' and 'denominator'.

   - bpo-39567(18): Added audit for *note os.walk(): 4a9, *note
     os.fwalk(): b71, *note pathlib.Path.glob(): 22d. and *note
     pathlib.Path.rglob(): 22e.

   - bpo-39559(19): Remove unused, undocumented argument ‘getters’ from
     *note uuid.getnode(): bbf.

   - bpo-38149(20): *note sys.audit(): 16a0. is now called only once per
     call of *note glob.glob(): 29f. and *note glob.iglob(): 80a.

   - bpo-39546(21): Fix a regression in *note ArgumentParser: 539. where
     ‘allow_abbrev=False’ was ignored for long options that used a
     prefix character other than “-“.

   - bpo-39450(22): Striped whitespace from docstring before returning
     it from ‘unittest.case.shortDescription()’.

   - bpo-12915(23): A new function ‘resolve_name’ has been added to the
     ‘pkgutil’ module.  This resolves a string of the form ‘'a.b.c.d'’
     or ‘'a.b:c.d'’ to an object.  In the example, ‘a.b’ is a
     package/module and ‘c.d’ is an object within that package/module
     reached via recursive attribute access.

   - bpo-39353(24): The *note binascii.crc_hqx(): 734. function is no
     longer deprecated.

   - bpo-39493(25): Mark ‘typing.IO.closed’ as a property

   - bpo-39491(26): Add *note typing.Annotated: 944. and
     ‘include_extras’ parameter to *note typing.get_type_hints(): 6b1.
     as part of PEP 593(27).  Patch by Till Varoquaux, documentation by
     Till Varoquaux and Konstantin Kashin.

   - bpo-39485(28): Fix a bug in *note unittest.mock.create_autospec():
     16f4. that would complain about the wrong number of arguments for
     custom descriptors defined in an extension module returning
     functions.

   - bpo-38932(29): Mock fully resets child objects on reset_mock().
     Patch by Vegard Stikbakke

   - bpo-39082(30): Allow AsyncMock to correctly patch static/class
     methods

   - bpo-39432(31): Implement PEP-489 algorithm for non-ascii “PyInit_…”
     symbol names in distutils to make it export the correct init symbol
     also on Windows.

   - bpo-18819(32): Omit ‘devmajor’ and ‘devminor’ fields for non-device
     files in *note tarfile: de. archives, enabling bit-for-bit
     compatibility with GNU ‘tar(1)’.

   - bpo-39349(33): Added a new 'cancel_futures' parameter to *note
     concurrent.futures.Executor.shutdown(): 8f3. that cancels all
     pending futures which have not started running, instead of waiting
     for them to complete before shutting down the executor.

   - bpo-39274(34): ‘bool(fraction.Fraction)’ now returns a boolean even
     if (numerator != 0) does not return a boolean (ex: numpy number).

   - bpo-34793(35): Remove support for ‘with (await asyncio.lock):’ and
     ‘with (yield from asyncio.lock):’.  The same is correct for
     ‘asyncio.Condition’ and ‘asyncio.Semaphore’.

   - bpo-25597(36): Ensure, if ‘wraps’ is supplied to *note
     unittest.mock.MagicMock: ebe, it is used to calculate return values
     for the magic methods instead of using the default return values.
     Patch by Karthikeyan Singaravelan.

   - bpo-36350(37): ‘inspect.Signature.parameters’ and
     ‘inspect.BoundArguments.arguments’ are now dicts instead of
     OrderedDicts.  Patch contributed by Rémi Lapeyre.

   - bpo-35727(38): Fix sys.exit() and sys.exit(None) exit code
     propagation when used in multiprocessing.Process.

   - bpo-32173(39): * Add ‘lazycache’ function to ‘__all__’.  * Use
     ‘dict.clear’ to clear the cache.  * Refactoring ‘getline’ function
     and ‘checkcache’ function.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30566

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39649

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39648

   (4) https://bugs.python.org/issue?@action=redirect&bpo=39681

   (5) https://bugs.python.org/issue?@action=redirect&bpo=35950

   (6) https://bugs.python.org/issue?@action=redirect&bpo=39479

   (7) https://bugs.python.org/issue?@action=redirect&bpo=39674

   (8) https://bugs.python.org/issue?@action=redirect&bpo=25988

   (9) https://bugs.python.org/issue?@action=redirect&bpo=39104

   (10) https://bugs.python.org/issue?@action=redirect&bpo=39627

   (11) https://bugs.python.org/issue?@action=redirect&bpo=39474

   (12) https://bugs.python.org/issue?@action=redirect&bpo=21016

   (13) https://bugs.python.org/issue?@action=redirect&bpo=39590

   (14) https://bugs.python.org/issue?@action=redirect&bpo=39586

   (15) https://bugs.python.org/issue?@action=redirect&bpo=39595

   (16) 
https://importlib-metadata.readthedocs.io/en/latest/history.html#v1-5-0

   (17) https://bugs.python.org/issue?@action=redirect&bpo=39350

   (18) https://bugs.python.org/issue?@action=redirect&bpo=39567

   (19) https://bugs.python.org/issue?@action=redirect&bpo=39559

   (20) https://bugs.python.org/issue?@action=redirect&bpo=38149

   (21) https://bugs.python.org/issue?@action=redirect&bpo=39546

   (22) https://bugs.python.org/issue?@action=redirect&bpo=39450

   (23) https://bugs.python.org/issue?@action=redirect&bpo=12915

   (24) https://bugs.python.org/issue?@action=redirect&bpo=39353

   (25) https://bugs.python.org/issue?@action=redirect&bpo=39493

   (26) https://bugs.python.org/issue?@action=redirect&bpo=39491

   (27) https://peps.python.org/pep-0593/

   (28) https://bugs.python.org/issue?@action=redirect&bpo=39485

   (29) https://bugs.python.org/issue?@action=redirect&bpo=38932

   (30) https://bugs.python.org/issue?@action=redirect&bpo=39082

   (31) https://bugs.python.org/issue?@action=redirect&bpo=39432

   (32) https://bugs.python.org/issue?@action=redirect&bpo=18819

   (33) https://bugs.python.org/issue?@action=redirect&bpo=39349

   (34) https://bugs.python.org/issue?@action=redirect&bpo=39274

   (35) https://bugs.python.org/issue?@action=redirect&bpo=34793

   (36) https://bugs.python.org/issue?@action=redirect&bpo=25597

   (37) https://bugs.python.org/issue?@action=redirect&bpo=36350

   (38) https://bugs.python.org/issue?@action=redirect&bpo=35727

   (39) https://bugs.python.org/issue?@action=redirect&bpo=32173


File: python.info,  Node: Documentação<44>,  Next: Testes<48>,  Prev: Biblioteca<129>,  Up: Python 3 9 0 alpha 4

1.23.54.4 Documentação
......................

   - bpo-17422(1): The language reference now specifies restrictions on
     class namespaces.  Adapted from a patch by Ethan Furman.

   - bpo-39572(2): Updated documentation of ‘total’ flag of ‘TypedDict’.

   - bpo-39654(3): In pyclbr doc, update ‘class’ to ‘module’ where
     appropriate and add readmodule comment.  Patch by Hakan Çelik.

   - bpo-39153(4): Clarify refcounting semantics for the following
     functions: - PyObject_SetItem - PyMapping_SetItemString -
     PyDict_SetItem - PyDict_SetItemString

   - bpo-39392(5): Explain that when filling with turtle, overlap
     regions may be left unfilled.

   - bpo-39369(6): Update mmap readline method description.  The fact
     that the readline method does update the file position should not
     be ignored since this might give the impression for the programmer
     that it doesn’t update it.

   - bpo-9056(7): Include subsection in TOC for PDF version of docs.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17422

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39572

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39654

   (4) https://bugs.python.org/issue?@action=redirect&bpo=39153

   (5) https://bugs.python.org/issue?@action=redirect&bpo=39392

   (6) https://bugs.python.org/issue?@action=redirect&bpo=39369

   (7) https://bugs.python.org/issue?@action=redirect&bpo=9056


File: python.info,  Node: Testes<48>,  Next: Construção<52>,  Prev: Documentação<44>,  Up: Python 3 9 0 alpha 4

1.23.54.5 Testes
................

   - bpo-38325(1): Skip tests on non-BMP characters of
     test_winconsoleio.

   - bpo-39502(2): Skip test_zipfile.test_add_file_after_2107() if *note
     time.localtime(): 1541. fails with *note OverflowError: 885.  It is
     the case on AIX 6.1 for example.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38325

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39502


File: python.info,  Node: Construção<52>,  Next: Windows<45>,  Prev: Testes<48>,  Up: Python 3 9 0 alpha 4

1.23.54.6 Construção
....................

   - bpo-39489(1): Remove ‘COUNT_ALLOCS’ special build.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39489


File: python.info,  Node: Windows<45>,  Next: IDLE<33>,  Prev: Construção<52>,  Up: Python 3 9 0 alpha 4

1.23.54.7 Windows
.................

   - bpo-39553(1): Delete unused code related to SxS manifests.

   - bpo-39439(2): Honor the Python path when a virtualenv is active on
     Windows.

   - bpo-39393(3): Improve the error message when attempting to load a
     DLL with unresolved dependencies.

   - bpo-38883(4): *note home(): e70. and *note expanduser(): e6f. on
     Windows now prefer ‘USERPROFILE’ and no longer use ‘HOME’, which is
     not normally set for regular user accounts.  This makes them again
     behave like *note os.path.expanduser(): a1e, which was changed to
     ignore ‘HOME’ in 3.8, see bpo-36264(5).

   - bpo-39185(6): The build.bat script has additional options for
     very-quiet output (-q) and very-verbose output (-vv)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39553

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39439

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39393

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38883

   (5) https://bugs.python.org/issue?@action=redirect&bpo=36264

   (6) https://bugs.python.org/issue?@action=redirect&bpo=39185


File: python.info,  Node: IDLE<33>,  Next: API C<48>,  Prev: Windows<45>,  Up: Python 3 9 0 alpha 4

1.23.54.8 IDLE
..............

   - bpo-39663(1): Add tests for pyparse find_good_parse_start().

   - bpo-39600(2): In the font configuration window, remove duplicated
     font names.

   - bpo-30780(3): Add remaining configdialog tests for buttons and
     highlights and keys tabs.

   - bpo-39388(4): IDLE Settings Cancel button now cancels pending
     changes

   - bpo-38792(5): Close an IDLE shell calltip if a *note
     KeyboardInterrupt: 9d9. or shell restart occurs.  Patch by Zackery
     Spytz.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39663

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39600

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30780

   (4) https://bugs.python.org/issue?@action=redirect&bpo=39388

   (5) https://bugs.python.org/issue?@action=redirect&bpo=38792


File: python.info,  Node: API C<48>,  Prev: IDLE<33>,  Up: Python 3 9 0 alpha 4

1.23.54.9 API C
...............

   - bpo-35081(1): Move the ‘bytes_methods.h’ header file to the
     internal C API as ‘pycore_bytes_methods.h’: it only contains
     private symbols (prefixed by ‘_Py’), except of the
     ‘PyDoc_STRVAR_shared()’ macro.

   - bpo-35081(2): Move the ‘dtoa.h’ header file to the internal C API
     as ‘pycore_dtoa.h’: it only contains private functions (prefixed by
     ‘_Py’).  The *note math: 8e. and *note cmath: 18. modules must now
     be compiled with the ‘Py_BUILD_CORE’ macro defined.

   - bpo-39573(3): Add *note Py_SET_SIZE(): 783. function to set the
     size of an object.

   - bpo-39500(4): *note PyUnicode_IsIdentifier(): 1b15. does not call
     *note Py_FatalError(): 98a. anymore if the string is not ready.

   - bpo-39573(5): Add *note Py_SET_TYPE(): 781. function to set the
     type of an object.

   - bpo-39573(6): Add a *note Py_SET_REFCNT(): 8af. function to set the
     reference counter of an object.

   - bpo-39542(7): Convert *note PyType_HasFeature(): 1ac9, *note
     PyType_Check(): 1b16. and *note PyType_CheckExact(): 1b17. macros
     to static inline functions.

   - bpo-39542(8): In the limited C API, ‘PyObject_INIT()’ and
     ‘PyObject_INIT_VAR()’ are now defined as aliases to *note
     PyObject_Init(): a74. and *note PyObject_InitVar(): 1acd. to make
     their implementation opaque.  It avoids to leak implementation
     details in the limited C API. Exclude the following functions from
     the limited C API: ‘_Py_NewReference()’, ‘_Py_ForgetReference()’,
     ‘_PyTraceMalloc_NewReference()’ and ‘_Py_GetRefTotal()’.

   - bpo-39542(9): Exclude trashcan mechanism from the limited C API: it
     requires access to PyTypeObject and PyThreadState structure fields,
     whereas these structures are opaque in the limited C API.

   - bpo-39511(10): The *note PyThreadState_Clear(): 170b. function now
     calls the ‘PyThreadState.on_delete’ callback.  Previously, that
     happened in *note PyThreadState_Delete(): 1b18.

   - bpo-38076(11): Fix to clear the interpreter state only after
     clearing module globals to guarantee module state access from C
     Extensions during runtime destruction

   - bpo-39245(12): The Vectorcall API (PEP 590) was made public, adding
     the functions ‘PyObject_Vectorcall’, ‘PyObject_VectorcallMethod’,
     ‘PyVectorcall_Function’, ‘PyObject_CallOneArg’,
     ‘PyObject_CallMethodNoArgs’, ‘PyObject_CallMethodOneArg’,
     ‘PyObject_FastCallDict’, and the flag ‘Py_TPFLAGS_HAVE_VECTORCALL’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35081

   (2) https://bugs.python.org/issue?@action=redirect&bpo=35081

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39573

   (4) https://bugs.python.org/issue?@action=redirect&bpo=39500

   (5) https://bugs.python.org/issue?@action=redirect&bpo=39573

   (6) https://bugs.python.org/issue?@action=redirect&bpo=39573

   (7) https://bugs.python.org/issue?@action=redirect&bpo=39542

   (8) https://bugs.python.org/issue?@action=redirect&bpo=39542

   (9) https://bugs.python.org/issue?@action=redirect&bpo=39542

   (10) https://bugs.python.org/issue?@action=redirect&bpo=39511

   (11) https://bugs.python.org/issue?@action=redirect&bpo=38076

   (12) https://bugs.python.org/issue?@action=redirect&bpo=39245


File: python.info,  Node: Python 3 9 0 alpha 3,  Next: Python 3 9 0 alpha 2,  Prev: Python 3 9 0 alpha 4,  Up: Changelog

1.23.55 Python 3.9.0 alpha 3
----------------------------

'Data de lançamento: 2020-01-24'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<128>.
* Biblioteca: Biblioteca<130>.
* Documentação: Documentação<45>.
* Construção: Construção<53>.
* IDLE: IDLE<34>.
* API C: API C<49>.


File: python.info,  Node: Núcleo e embutidos<128>,  Next: Biblioteca<130>,  Up: Python 3 9 0 alpha 3

1.23.55.1 Núcleo e embutidos
............................

   - bpo-39427(1): Document all possibilities for the ‘-X’ options in
     the command line help section.  Patch by Pablo Galindo.

   - bpo-39421(2): Fix possible crashes when operating with the
     functions in the *note heapq: 69. module and custom comparison
     operators.

   - bpo-39386(3): Prevent double awaiting of async iterator.

   - bpo-17005(4): Add ‘functools.TopologicalSorter’ to the *note
     functools: 5f. module to offers functionality to perform
     topological sorting of graphs.  Patch by Pablo Galindo, Tim Peters
     and Larry Hastings.

   - bpo-39320(5): Replace four complex bytecodes for building sequences
     with three simpler ones.

     The following four bytecodes have been removed:

        * BUILD_LIST_UNPACK

        * BUILD_TUPLE_UNPACK

        * BUILD_SET_UNPACK

        * BUILD_TUPLE_UNPACK_WITH_CALL

     The following three bytecodes have been added:

        * LIST_TO_TUPLE

        * LIST_EXTEND

        * SET_UPDATE

   - bpo-39336(6): Import loaders which publish immutable module objects
     can now publish immutable packages in addition to individual
     modules.

   - bpo-39322(7): Added a new function *note gc.is_finalized(): 903. to
     check if an object has been finalized by the garbage collector.
     Patch by Pablo Galindo.

   - bpo-39048(8): Improve the displayed error message when incorrect
     types are passed to ‘async with’ statements by looking up the
     ‘__aenter__()’ special method before the ‘__aexit__()’ special
     method when entering an asynchronous context manager.  Patch by
     Géry Ogam.

   - bpo-39235(9): Fix AST end location for lone generator expression in
     function call, e.g.  f(i for i in a).

   - bpo-39209(10): Correctly handle multi-line tokens in interactive
     mode.  Patch by Pablo Galindo.

   - bpo-1635741(11): Port _json extension module to multiphase
     initialization ( PEP 489(12)).

   - bpo-39216(13): Fix constant folding optimization for positional
     only arguments - by Anthony Sottile.

   - bpo-39215(14): Fix ‘SystemError’ when nested function has
     annotation on positional-only argument - by Anthony Sottile.

   - bpo-39200(15): Correct the error message when calling the *note
     min(): f3a. or *note max(): f3b. with no arguments.  Patch by
     Donghee Na.

   - bpo-39200(16): Correct the error message when trying to construct
     *note range: 94a. objects with no arguments.  Patch by Pablo
     Galindo.

   - bpo-39166(17): Fix incorrect line execution reporting in trace
     functions when tracing the last iteration of asynchronous for
     loops.  Patch by Pablo Galindo.

   - bpo-39114(18): Fix incorrect line execution reporting in trace
     functions when tracing exception handlers with name binding.  Patch
     by Pablo Galindo.

   - bpo-39156(19): Split the COMPARE_OP bytecode instruction into four
     distinct instructions.

        * COMPARE_OP for rich comparisons

        * IS_OP for ‘is’ and ‘is not’ tests

        * CONTAINS_OP for ‘in’ and ‘is not’ tests

        * JUMP_IF_NOT_EXC_MATCH for checking exceptions in ‘try-except’
          statements.

     This improves the clarity of the interpreter and should provide a
     modest speedup.

   - bpo-38588(20): Fix possible crashes in dict and list when calling
     *note PyObject_RichCompareBool(): 1b1b.

   - bpo-13601(21): By default, ‘sys.stderr’ is line-buffered now, even
     if ‘stderr’ is redirected to a file.  You can still make
     ‘sys.stderr’ unbuffered by passing the *note -u: 1b1c. command-line
     option or setting the *note PYTHONUNBUFFERED: 1b1d. environment
     variable.

     (Contributed by Jendrik Seipp in bpo-13601(22).)

   - bpo-38610(23): Fix possible crashes in several list methods by
     holding strong references to list elements when calling *note
     PyObject_RichCompareBool(): 1b1b.

   - bpo-32021(24): Include brotli .br encoding in mimetypes
     encodings_map

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39427

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39421

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39386

   (4) https://bugs.python.org/issue?@action=redirect&bpo=17005

   (5) https://bugs.python.org/issue?@action=redirect&bpo=39320

   (6) https://bugs.python.org/issue?@action=redirect&bpo=39336

   (7) https://bugs.python.org/issue?@action=redirect&bpo=39322

   (8) https://bugs.python.org/issue?@action=redirect&bpo=39048

   (9) https://bugs.python.org/issue?@action=redirect&bpo=39235

   (10) https://bugs.python.org/issue?@action=redirect&bpo=39209

   (11) https://bugs.python.org/issue?@action=redirect&bpo=1635741

   (12) https://peps.python.org/pep-0489/

   (13) https://bugs.python.org/issue?@action=redirect&bpo=39216

   (14) https://bugs.python.org/issue?@action=redirect&bpo=39215

   (15) https://bugs.python.org/issue?@action=redirect&bpo=39200

   (16) https://bugs.python.org/issue?@action=redirect&bpo=39200

   (17) https://bugs.python.org/issue?@action=redirect&bpo=39166

   (18) https://bugs.python.org/issue?@action=redirect&bpo=39114

   (19) https://bugs.python.org/issue?@action=redirect&bpo=39156

   (20) https://bugs.python.org/issue?@action=redirect&bpo=38588

   (21) https://bugs.python.org/issue?@action=redirect&bpo=13601

   (22) https://bugs.python.org/issue?@action=redirect&bpo=13601

   (23) https://bugs.python.org/issue?@action=redirect&bpo=38610

   (24) https://bugs.python.org/issue?@action=redirect&bpo=32021


File: python.info,  Node: Biblioteca<130>,  Next: Documentação<45>,  Prev: Núcleo e embutidos<128>,  Up: Python 3 9 0 alpha 3

1.23.55.2 Biblioteca
....................

   - bpo-39430(1): Fixed race condition in lazy imports in *note
     tarfile: de.

   - bpo-39413(2): The *note os.unsetenv(): 921. function is now also
     available on Windows.

   - bpo-39390(3): Fixed a regression with the ‘ignore’ callback of
     *note shutil.copytree(): a33.  The argument types are now ‘str’ and
     ‘List[str]’ again.

   - bpo-39395(4): The *note os.putenv(): 922. and *note os.unsetenv():
     921. functions are now always available.

   - bpo-39406(5): If ‘setenv()’ C function is available, *note
     os.putenv(): 922. is now implemented with ‘setenv()’ instead of
     ‘putenv()’, so Python doesn’t have to handle the environment
     variable memory.

   - bpo-39396(6): Fix ‘math.nextafter(-0.0, +0.0)’ on AIX 7.1.

   - bpo-29435(7): Allow *note tarfile.is_tarfile(): 1965. to be used
     with file and file-like objects, like *note zipfile.is_zipfile():
     136e.  Patch by William Woodruff.

   - bpo-39377(8): Removed ‘encoding’ option from *note json.loads():
     95c.  It has been deprecated since Python 3.1.

   - bpo-39389(9): Write accurate compression level metadata in *note
     gzip: 67. archives, rather than always signaling maximum
     compression.

   - bpo-39366(10): The previously deprecated ‘xpath()’ and ‘xgtitle()’
     methods of ‘nntplib.NNTP’ have been removed.

   - bpo-39357(11): Remove the 'buffering' parameter of *note
     bz2.BZ2File: 86a.  Since Python 3.0, it was ignored and using it
     was emitting *note DeprecationWarning: 1a5.  Pass an open file
     object, to control how the file is opened.  The 'compresslevel'
     parameter becomes keyword-only.

   - bpo-39353(12): Deprecate binhex4 and hexbin4 standards.  Deprecate
     the ‘binhex’ module and the following *note binascii: 10.
     functions: ‘b2a_hqx()’, ‘a2b_hqx()’, ‘rlecode_hqx()’,
     ‘rledecode_hqx()’, *note crc_hqx(): 734.

   - bpo-39351(13): Remove ‘base64.encodestring()’ and
     ‘base64.decodestring()’, aliases deprecated since Python 3.1: use
     *note base64.encodebytes(): 95a. and *note base64.decodebytes():
     95b. instead.

   - bpo-39350(14): Remove ‘fractions.gcd()’ function, deprecated since
     Python 3.5 (bpo-22486(15)): use *note math.gcd(): 916. instead.

   - bpo-39329(16): *note LMTP: 936. constructor now has an optional
     'timeout' parameter.  Patch by Donghee Na.

   - bpo-39313(17): Add a new ‘exec_function’ option ('–exec-function'
     in the CLI) to ‘RefactoringTool’ for making ‘exec’ a function.
     Patch by Batuhan Taskaya.

   - bpo-39259(18): *note FTP_TLS: 901. and *note FTP_TLS: 901. now
     raise a *note ValueError: 202. if the given timeout for their
     constructor is zero to prevent the creation of a non-blocking
     socket.  Patch by Donghee Na.

   - bpo-39259(19): *note SMTP: 934. and *note SMTP_SSL: 935. now raise
     a *note ValueError: 202. if the given timeout for their constructor
     is zero to prevent the creation of a non-blocking socket.  Patch by
     Donghee Na.

   - bpo-39310(20): Add *note math.ulp(): 918.: return the value of the
     least significant bit of a float.

   - bpo-39297(21): Improved performance of importlib.metadata
     distribution discovery and resilients to inaccessible sys.path
     entries (importlib_metadata v1.4.0).

   - bpo-39259(22): ‘NNTP’ and ‘NNTP_SSL’ now raise a *note ValueError:
     202. if the given timeout for their constructor is zero to prevent
     the creation of a non-blocking socket.  Patch by Donghee Na.

   - bpo-38901(23): When you specify prompt=’.’ or equivalently python
     -m venv –prompt .  … the basename of the current directory is used
     to set the created venv’s prompt when it’s activated.

   - bpo-39288(24): Add *note math.nextafter(): 498.: return the next
     floating-point value after 'x' towards 'y'.

   - bpo-39259(25): *note POP3: 92a. and *note POP3_SSL: 92b. now raise
     a *note ValueError: 202. if the given timeout for their constructor
     is zero to prevent the creation of a non-blocking socket.  Patch by
     Donghee Na.

   - bpo-39242(26): Updated the Gmane domain from news.gmane.org to
     news.gmane.io which is used for examples of ‘NNTP’ news reader
     server and nntplib tests.

   - bpo-35292(27): Proxy the ‘SimpleHTTPRequestHandler.guess_type’ to
     ‘mimetypes.guess_type’ so the ‘mimetypes.init’ is called lazily to
     avoid unnecessary costs when *note http.server: 72. module is
     imported.

   - bpo-39239(28): The *note select.epoll.unregister(): 961. method no
     longer ignores the *note EBADF: 962. error.

   - bpo-38907(29): In http.server script, restore binding to IPv4 on
     Windows.

   - bpo-39152(30): Fix ttk.Scale.configure([name]) to return
     configuration tuple for name or all options.  Giovanni Lombardo
     contributed part of the patch.

   - bpo-39198(31): If an exception were to be thrown in
     ‘Logger.isEnabledFor’ (say, by asyncio timeouts or stopit) , the
     ‘logging’ global lock may not be released appropriately, resulting
     in deadlock.  This change wraps that block of code with
     ‘try...finally’ to ensure the lock is released.

   - bpo-39191(32): Perform a check for running loop before starting a
     new task in ‘loop.run_until_complete()’ to fail fast; it prevents
     the side effect of new task spawning before exception raising.

   - bpo-38871(33): Correctly parenthesize filter-based statements that
     contain lambda expressions in ‘lib2to3’.  Patch by Donghee Na.

   - bpo-39142(34): A change was made to logging.config.dictConfig to
     avoid converting instances of named tuples to ConvertingTuple.
     It’s assumed that named tuples are too specialised to be treated
     like ordinary tuples; if a user of named tuples requires
     ConvertingTuple functionality, they will have to implement that
     themselves in their named tuple class.

   - bpo-39158(35): ast.literal_eval() now supports empty sets.

   - bpo-39129(36): Fix import path for ‘asyncio.TimeoutError’

   - bpo-39057(37): ‘urllib.request.proxy_bypass_environment()’ now
     ignores leading dots and no longer ignores a trailing newline.

   - bpo-39056(38): Fixed handling invalid warning category in the -W
     option.  No longer import the re module if it is not needed.

   - bpo-39055(39): *note base64.b64decode(): 1b1f. with ‘validate=True’
     raises now a binascii.Error if the input ends with a single ‘\n’.

   - bpo-21600(40): Fix ‘mock.patch.stopall()’ to stop active patches
     that were created with ‘mock.patch.dict()’.

   - bpo-39019(41): Implement dummy ‘__class_getitem__’ for *note
     tempfile.SpooledTemporaryFile: 693.

   - bpo-39019(42): Implement dummy ‘__class_getitem__’ for
     ‘subprocess.Popen’, ‘subprocess.CompletedProcess’

   - bpo-38914(43): Adjusted the wording of the warning issued by
     distutils’ ‘check’ command when the ‘author’ and ‘maintainer’
     fields are supplied but no corresponding e-mail field
     (‘author_email’ or ‘maintainer_email’) is found.  The wording now
     reflects the fact that these fields are suggested, but not
     required.  Patch by Juergen Gmach.

   - bpo-38878(44): Fixed __subclasshook__ of *note os.PathLike: c6c. to
     return a correct result upon inheritance.  Patch by Bar Harel.

   - bpo-38615(45): *note IMAP4: 909. and *note IMAP4_SSL: 90a. now have
     an optional 'timeout' parameter for their constructors.  Also, the
     *note open(): 90b. method now has an optional 'timeout' parameter
     with this change.  The overridden methods of *note IMAP4_SSL: 90a.
     and *note IMAP4_stream: 90c. were applied to this change.  Patch by
     Donghee Na.

   - bpo-35182(46): Fixed ‘Popen.communicate()’ subsequent call crash
     when the child process has already closed any piped standard
     stream, but still continues to be running.  Patch by Andriy
     Maletsky.

   - bpo-38630(47): On Unix, *note subprocess.Popen.send_signal(): 1425.
     now polls the process status.  Polling reduces the risk of sending
     a signal to the wrong process if the process completed, the *note
     subprocess.Popen.returncode: a9c. attribute is still ‘None’, and
     the pid has been reassigned (recycled) to a new different process.

   - bpo-38536(48): Removes trailing space in formatted currency with
     ‘international=True’ and a locale with symbol following value.
     E.g.  ‘locale.currency(12.34, international=True)’ returned ‘'12,34
     EUR '’ instead of ‘'12,34 EUR'’.

   - bpo-38473(49): Use signature from inner mock for autospecced
     methods attached with ‘unittest.mock.attach_mock()’.  Patch by
     Karthikeyan Singaravelan.

   - bpo-38361(50): Fixed an issue where ‘ident’ could include a leading
     path separator when *note syslog.openlog(): 53e. was called without
     arguments.

   - bpo-38293(51): Add *note copy.copy(): 534. and *note
     copy.deepcopy(): b84. support to *note property(): 194. objects.

   - bpo-37958(52): Added the pstats.Stats.get_profile_dict() method to
     return the profile data as a StatsProfile instance.

   - bpo-28367(53): Termios magic constants for the following baud
     rates: - B500000 - B576000 - B921600 - B1000000 - B1152000 -
     B1500000 - B2000000 - B2500000 - B3000000 - B3500000 - B4000000
     Patch by Andrey Smirnov

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39430

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39413

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39390

   (4) https://bugs.python.org/issue?@action=redirect&bpo=39395

   (5) https://bugs.python.org/issue?@action=redirect&bpo=39406

   (6) https://bugs.python.org/issue?@action=redirect&bpo=39396

   (7) https://bugs.python.org/issue?@action=redirect&bpo=29435

   (8) https://bugs.python.org/issue?@action=redirect&bpo=39377

   (9) https://bugs.python.org/issue?@action=redirect&bpo=39389

   (10) https://bugs.python.org/issue?@action=redirect&bpo=39366

   (11) https://bugs.python.org/issue?@action=redirect&bpo=39357

   (12) https://bugs.python.org/issue?@action=redirect&bpo=39353

   (13) https://bugs.python.org/issue?@action=redirect&bpo=39351

   (14) https://bugs.python.org/issue?@action=redirect&bpo=39350

   (15) https://bugs.python.org/issue?@action=redirect&bpo=22486

   (16) https://bugs.python.org/issue?@action=redirect&bpo=39329

   (17) https://bugs.python.org/issue?@action=redirect&bpo=39313

   (18) https://bugs.python.org/issue?@action=redirect&bpo=39259

   (19) https://bugs.python.org/issue?@action=redirect&bpo=39259

   (20) https://bugs.python.org/issue?@action=redirect&bpo=39310

   (21) https://bugs.python.org/issue?@action=redirect&bpo=39297

   (22) https://bugs.python.org/issue?@action=redirect&bpo=39259

   (23) https://bugs.python.org/issue?@action=redirect&bpo=38901

   (24) https://bugs.python.org/issue?@action=redirect&bpo=39288

   (25) https://bugs.python.org/issue?@action=redirect&bpo=39259

   (26) https://bugs.python.org/issue?@action=redirect&bpo=39242

   (27) https://bugs.python.org/issue?@action=redirect&bpo=35292

   (28) https://bugs.python.org/issue?@action=redirect&bpo=39239

   (29) https://bugs.python.org/issue?@action=redirect&bpo=38907

   (30) https://bugs.python.org/issue?@action=redirect&bpo=39152

   (31) https://bugs.python.org/issue?@action=redirect&bpo=39198

   (32) https://bugs.python.org/issue?@action=redirect&bpo=39191

   (33) https://bugs.python.org/issue?@action=redirect&bpo=38871

   (34) https://bugs.python.org/issue?@action=redirect&bpo=39142

   (35) https://bugs.python.org/issue?@action=redirect&bpo=39158

   (36) https://bugs.python.org/issue?@action=redirect&bpo=39129

   (37) https://bugs.python.org/issue?@action=redirect&bpo=39057

   (38) https://bugs.python.org/issue?@action=redirect&bpo=39056

   (39) https://bugs.python.org/issue?@action=redirect&bpo=39055

   (40) https://bugs.python.org/issue?@action=redirect&bpo=21600

   (41) https://bugs.python.org/issue?@action=redirect&bpo=39019

   (42) https://bugs.python.org/issue?@action=redirect&bpo=39019

   (43) https://bugs.python.org/issue?@action=redirect&bpo=38914

   (44) https://bugs.python.org/issue?@action=redirect&bpo=38878

   (45) https://bugs.python.org/issue?@action=redirect&bpo=38615

   (46) https://bugs.python.org/issue?@action=redirect&bpo=35182

   (47) https://bugs.python.org/issue?@action=redirect&bpo=38630

   (48) https://bugs.python.org/issue?@action=redirect&bpo=38536

   (49) https://bugs.python.org/issue?@action=redirect&bpo=38473

   (50) https://bugs.python.org/issue?@action=redirect&bpo=38361

   (51) https://bugs.python.org/issue?@action=redirect&bpo=38293

   (52) https://bugs.python.org/issue?@action=redirect&bpo=37958

   (53) https://bugs.python.org/issue?@action=redirect&bpo=28367


File: python.info,  Node: Documentação<45>,  Next: Construção<53>,  Prev: Biblioteca<130>,  Up: Python 3 9 0 alpha 3

1.23.55.3 Documentação
......................

   - bpo-39381(1): Mention in docs that *note asyncio.get_event_loop():
     2c2. implicitly creates new event loop only if called from the main
     thread.

   - bpo-38918(2): Add an entry for ‘__module__’ in the “function” &
     “method” sections of the *note inspect: 7e. docs’ *note Tipos e
     membros: 1b21. table.

   - bpo-3530(3): In the *note ast: 8. module documentation, fix a
     misleading ‘NodeTransformer’ example and add advice on when to use
     the ‘fix_missing_locations’ function.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39381

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38918

   (3) https://bugs.python.org/issue?@action=redirect&bpo=3530


File: python.info,  Node: Construção<53>,  Next: IDLE<34>,  Prev: Documentação<45>,  Up: Python 3 9 0 alpha 3

1.23.55.4 Construção
....................

   - bpo-39395(1): On non-Windows platforms, the ‘setenv()’ and
     ‘unsetenv()’ functions are now required to build Python.

   - bpo-39160(2): Updated the documentation in ‘./configure --help’ to
     show default values, reference documentation where required and add
     additional explanation where needed.

   - bpo-39144(3): The ctags and etags build targets both include
     Modules/_ctypes and Python standard library source files.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39395

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39160

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39144


File: python.info,  Node: IDLE<34>,  Next: API C<49>,  Prev: Construção<53>,  Up: Python 3 9 0 alpha 3

1.23.55.5 IDLE
..............

   - bpo-39050(1): Make IDLE Settings dialog Help button work again.

   - bpo-34118(2): Tag memoryview, range, and tuple as classes, the same
     as list, etcetera, in the library manual built-in functions list.

   - bpo-32989(3): Add tests for editor newline_and_indent_event method.
     Remove dead code from pyparse find_good_parse_start method.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39050

   (2) https://bugs.python.org/issue?@action=redirect&bpo=34118

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32989


File: python.info,  Node: API C<49>,  Prev: IDLE<34>,  Up: Python 3 9 0 alpha 3

1.23.55.6 API C
...............

   - bpo-39372(1): Clean header files of interfaces defined but with no
     implementation.  The public API symbols being removed are:
     ‘_PyBytes_InsertThousandsGroupingLocale’,
     ‘_PyBytes_InsertThousandsGrouping’, ‘_Py_InitializeFromArgs’,
     ‘_Py_InitializeFromWideArgs’, ‘_PyFloat_Repr’, ‘_PyFloat_Digits’,
     ‘_PyFloat_DigitsInit’, ‘PyFrame_ExtendStack’,
     ‘_PyAIterWrapper_Type’, ‘PyNullImporter_Type’, ‘PyCmpWrapper_Type’,
     ‘PySortWrapper_Type’, ‘PyNoArgsFunction’.

   - bpo-39164(2): Add a private ‘_PyErr_GetExcInfo()’ function to
     retrieve exception information of the specified Python thread
     state.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39372

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39164


File: python.info,  Node: Python 3 9 0 alpha 2,  Next: Python 3 9 0 alpha 1,  Prev: Python 3 9 0 alpha 3,  Up: Changelog

1.23.56 Python 3.9.0 alpha 2
----------------------------

'Data de lançamento: 2019-12-18'

* Menu:

* Segurança: Segurança<37>.
* Núcleo e embutidos: Núcleo e embutidos<129>.
* Biblioteca: Biblioteca<131>.
* Documentação: Documentação<46>.
* Testes: Testes<49>.
* Construção: Construção<54>.
* Windows: Windows<46>.
* macOS: macOS<37>.
* IDLE: IDLE<35>.
* API C: API C<50>.


File: python.info,  Node: Segurança<37>,  Next: Núcleo e embutidos<129>,  Up: Python 3 9 0 alpha 2

1.23.56.1 Segurança
...................

   - bpo-38945(1): Newline characters have been escaped when performing
     uu encoding to prevent them from overflowing into to content
     section of the encoded file.  This prevents malicious or accidental
     modification of data during the decoding process.

   - bpo-37228(2): Due to significant security concerns, the
     'reuse_address' parameter of *note
     asyncio.loop.create_datagram_endpoint(): 733. is no longer
     supported.  This is because of the behavior of ‘SO_REUSEADDR’ in
     UDP. For more details, see the documentation for
     ‘loop.create_datagram_endpoint()’.  (Contributed by Kyle Stanley,
     Antoine Pitrou, and Yury Selivanov in bpo-37228(3).)

   - bpo-38804(4): Fixes a ReDoS vulnerability in *note http.cookiejar:
     70.  Patch by Ben Caller.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38945

   (2) https://bugs.python.org/issue?@action=redirect&bpo=37228

   (3) https://bugs.python.org/issue?@action=redirect&bpo=37228

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38804


File: python.info,  Node: Núcleo e embutidos<129>,  Next: Biblioteca<131>,  Prev: Segurança<37>,  Up: Python 3 9 0 alpha 2

1.23.56.2 Núcleo e embutidos
............................

   - bpo-39028(1): Slightly improve the speed of keyword argument
     parsing with many kwargs by strengthening the assumption that
     kwargs are interned strings.

   - bpo-39080(2): Fix the value of 'end_col_offset' for Starred
     Expression AST nodes when they are among the elements in the 'args'
     attribute of Call AST nodes.

   - bpo-39031(3): When parsing an “elif” node, lineno and col_offset of
     the node now point to the “elif” keyword and not to its condition,
     making it consistent with the “if” node.  Patch by Lysandros
     Nikolaou.

   - bpo-20443(4): In Python 3.9.0a1, sys.argv[0] was made an absolute
     path if a filename was specified on the command line.  Revert this
     change, since most users expect sys.argv to be unmodified.

   - bpo-39008(5): *note PySys_Audit(): 36f. now requires ‘Py_ssize_t’
     to be used for size arguments in the format string, regardless of
     whether ‘PY_SSIZE_T_CLEAN’ was defined at include time.

   - bpo-38673(6): In REPL mode, don’t switch to PS2 if the line starts
     with comment or whitespace.  Based on work by Batuhan Taşkaya.

   - bpo-38922(7): Calling ‘replace’ on a code object now raises the
     ‘code.__new__’ audit event.

   - bpo-38920(8): Add audit hooks for when *note sys.excepthook(): 80e.
     and *note sys.unraisablehook(): 1f7. are invoked.

   - bpo-38892(9): Improve documentation for audit events table and
     functions.

   - bpo-38852(10): Set the thread stack size to 8 Mb for debug builds
     on android platforms.

   - bpo-38858(11): Each Python subinterpreter now has its own “small
     integer singletons”: numbers in [-5; 257] range.  It is no longer
     possible to change the number of small integers at build time by
     overriding ‘NSMALLNEGINTS’ and ‘NSMALLPOSINTS’ macros: macros
     should now be modified manually in ‘pycore_pystate.h’ header file.

   - bpo-36854(12): The garbage collector state becomes per interpreter
     (‘PyInterpreterState.gc’), rather than being global
     (‘_PyRuntimeState.gc’).

   - bpo-38835(13): The ‘PyFPE_START_PROTECT()’ and
     ‘PyFPE_END_PROTECT()’ macros are empty: they have been doing
     nothing for the last year, so stop using them.

   - bpo-38328(14): Sped up the creation time of constant *note list:
     611. and *note set: 5d9. displays.  Patch by Brandt Bucher.

   - bpo-38707(15): ‘MainThread.native_id’ is now correctly reset in
     child processes spawned using *note multiprocessing.Process: b6f,
     instead of retaining the parent’s value.

   - bpo-38629(16): Added ‘__floor__’ and ‘__ceil__’ methods to float
     object.  Patch by Batuhan Taşkaya.

   - bpo-27145(17): int + int and int - int operators can now return
     small integer singletons.  Patch by hongweipeng.

   - bpo-38021(18): Provide a platform tag for AIX that is sufficient
     for PEP425 binary distribution identification.  Patch by Michael
     Felt.

   - bpo-35409(19): Ignore GeneratorExit exceptions when throwing an
     exception into the aclose coroutine of an asynchronous generator.

   - bpo-33387(20): Removed WITH_CLEANUP_START, WITH_CLEANUP_FINISH,
     BEGIN_FINALLY, END_FINALLY, CALL_FINALLY and POP_FINALLY bytecodes.
     Replaced with RERAISE and WITH_EXCEPT_START bytecodes.  The
     compiler now generates different code for exceptional and
     non-exceptional branches for ‘with’ and ‘try-except’ statements.
     For ‘try-finally’ statements the ‘finally’ block is replicated for
     each exit from the ‘try’ body.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39028

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39080

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39031

   (4) https://bugs.python.org/issue?@action=redirect&bpo=20443

   (5) https://bugs.python.org/issue?@action=redirect&bpo=39008

   (6) https://bugs.python.org/issue?@action=redirect&bpo=38673

   (7) https://bugs.python.org/issue?@action=redirect&bpo=38922

   (8) https://bugs.python.org/issue?@action=redirect&bpo=38920

   (9) https://bugs.python.org/issue?@action=redirect&bpo=38892

   (10) https://bugs.python.org/issue?@action=redirect&bpo=38852

   (11) https://bugs.python.org/issue?@action=redirect&bpo=38858

   (12) https://bugs.python.org/issue?@action=redirect&bpo=36854

   (13) https://bugs.python.org/issue?@action=redirect&bpo=38835

   (14) https://bugs.python.org/issue?@action=redirect&bpo=38328

   (15) https://bugs.python.org/issue?@action=redirect&bpo=38707

   (16) https://bugs.python.org/issue?@action=redirect&bpo=38629

   (17) https://bugs.python.org/issue?@action=redirect&bpo=27145

   (18) https://bugs.python.org/issue?@action=redirect&bpo=38021

   (19) https://bugs.python.org/issue?@action=redirect&bpo=35409

   (20) https://bugs.python.org/issue?@action=redirect&bpo=33387


File: python.info,  Node: Biblioteca<131>,  Next: Documentação<46>,  Prev: Núcleo e embutidos<129>,  Up: Python 3 9 0 alpha 2

1.23.56.3 Biblioteca
....................

   - bpo-39033(1): Fix *note NameError: 43f. in *note zipimport: 132.
     Patch by Karthikeyan Singaravelan.

   - bpo-39022(2): Update importlib.metadata to include improvements
     from importlib_metadata 1.3 including better serialization of
     EntryPoints and improved documentation for custom finders.

   - bpo-39006(3): Fix asyncio when the ssl module is missing: only
     check for ssl.SSLSocket instance if the ssl module is available.

   - bpo-38708(4): Fix a potential IndexError in email parser when
     parsing an empty msg-id.

   - bpo-38698(5): Add a new ‘InvalidMessageID’ token to email parser to
     represent invalid Message-ID headers.  Also, add defects when there
     is remaining value after parsing the header.

   - bpo-38994(6): Implement ‘__class_getitem__’ for ‘os.PathLike’,
     ‘pathlib.Path’.

   - bpo-38979(7): Return class from ‘ContextVar.__class_getitem__’ to
     simplify subclassing.

   - bpo-38978(8): Implement ‘__class_getitem__’ on asyncio objects
     (Future, Task, Queue).  Patch by Batuhan Taskaya.

   - bpo-38916(9): *note array.array: 1a0.: Remove ‘tostring()’ and
     ‘fromstring()’ methods.  They were aliases to ‘tobytes()’ and
     ‘frombytes()’, deprecated since Python 3.2.

   - bpo-38986(10): Make repr of C accelerated TaskWakeupMethWrapper the
     same as of pure Python version.

   - bpo-38982(11): Fix asyncio ‘PidfdChildWatcher’: handle ‘waitpid()’
     error.  If ‘waitpid()’ is called elsewhere, ‘waitpid()’ call fails
     with *note ChildProcessError: 1091.: use return code 255 in this
     case, and log a warning.  It ensures that the pidfd file descriptor
     is closed if this error occurs.

   - bpo-38529(12): Drop too noisy asyncio warning about deletion of a
     stream without explicit ‘.close()’ call.

   - bpo-27413(13): Added ability to pass through ‘ensure_ascii’ options
     to json.dumps in the ‘json.tool’ command-line interface.

   - bpo-38634(14): The *note readline: ba. module now detects if Python
     is linked to libedit at runtime on all platforms.  Previously, the
     check was only done on macOS.

   - bpo-33684(15): Fix ‘json.tool’ failed to read a JSON file with
     non-ASCII characters when locale encoding is not UTF-8.

   - bpo-38698(16): Prevent UnboundLocalError to pop up in
     parse_message_id.

     parse_message_id() was improperly using a token defined inside an
     exception handler, which was raising ‘UnboundLocalError’ on parsing
     an invalid value.  Patch by Claudiu Popa.

   - bpo-38927(17): Use ‘python -m pip’ instead of ‘pip’ to upgrade
     dependencies in venv.

   - bpo-26730(18): Fix ‘SpooledTemporaryFile.rollover()’ might corrupt
     the file when it is in text mode.  Patch by Serhiy Storchaka.

   - bpo-38881(19): random.choices() now raises a ValueError when all
     the weights are zero.

   - bpo-38876(20): Raise pickle.UnpicklingError when loading an item
     from memo for invalid input.

     The previous code was raising a ‘KeyError’ for both the Python and
     C implementation.  This was caused by the specified index of an
     invalid input which did not exist in the memo structure, where the
     pickle stores what objects it has seen.  The malformed input would
     have caused either a ‘BINGET’ or ‘LONG_BINGET’ load from the memo,
     leading to a ‘KeyError’ as the determined index was bogus.  Patch
     by Claudiu Popa.

   - bpo-38688(21): Calling func:‘shutil.copytree’ to copy a directory
     tree from one directory to another subdirectory resulted in an
     endless loop and a RecursionError.  A fix was added to consume an
     iterator and create the list of the entries to be copied, avoiding
     the recursion for newly created directories.  Patch by Bruno P.
     Kinoshita.

   - bpo-38863(22): Improve ‘is_cgi()’ function in *note http.server:
     72, which enables processing the case that cgi directory is a child
     of another directory other than root.

   - bpo-37838(23): *note typing.get_type_hints(): 6b1. properly handles
     functions decorated with *note functools.wraps(): f91.

   - bpo-38870(24): Expose *note ast.unparse(): 8eb. as a function of
     the *note ast: 8. module that can be used to unparse an *note
     ast.AST: 1a6. object and produce a string with code that would
     produce an equivalent *note ast.AST: 1a6. object when parsed.
     Patch by Pablo Galindo and Batuhan Taskaya.

   - bpo-38859(25): AsyncMock now returns StopAsyncIteration on the
     exhaustion of a side_effects iterable.  Since PEP-479 its
     Impossible to raise a StopIteration exception from a coroutine.

   - bpo-38857(26): AsyncMock fix for return values that are awaitable
     types.  This also covers side_effect iterable values that happened
     to be awaitable, and wraps callables that return an awaitable type.
     Before these awaitables were being awaited instead of being
     returned as is.

   - bpo-38834(27): *note typing.TypedDict: 162. subclasses now track
     which keys are optional using the ‘__required_keys__’ and
     ‘__optional_keys__’ attributes, to enable runtime validation by
     downstream projects.  Patch by Zac Hatfield-Dodds.

   - bpo-38821(28): Fix unhandled exceptions in *note argparse: 6. when
     internationalizing error messages for arguments with ‘nargs’ set to
     special (non-integer) values.  Patch by Federico Bond.

   - bpo-38820(29): Make Python compatible with OpenSSL 3.0.0.  *note
     ssl.SSLSocket.getpeercert(): fec. no longer returns IPv6 addresses
     with a trailing new line.

   - bpo-38811(30): Fix an unhandled exception in *note pathlib: a4.
     when *note os.link(): 112e. is missing.  Patch by Toke
     Høiland-Jørgensen.

   - bpo-38686(31): Added support for multiple ‘qop’ values in *note
     urllib.request.AbstractDigestAuthHandler: 1afa.

   - bpo-38712(32): Add the Linux-specific *note
     signal.pidfd_send_signal(): 932. function, which allows sending a
     signal to a process identified by a file descriptor rather than a
     pid.

   - bpo-38348(33): Add ‘-i’ and ‘--indent’ (indentation level), and
     ‘--no-type-comments’ (type comments) command line options to ast
     parsing tool.

   - bpo-37523(34): Change ‘zipfile.ZipExtFile’ to raise ‘ValueError’
     when trying to access the underlying file object after it has been
     closed.  This new behavior is consistent with how accessing closed
     files is handled in other parts of Python.

   - bpo-38045(35): Improve the performance of ‘enum._decompose()’ in
     *note enum: 56.  Patch by hongweipeng.

   - bpo-36820(36): Break cycle generated when saving an exception in
     socket.py, codeop.py and dyld.py as they keep alive not only the
     exception but user objects through the ‘__traceback__’ attribute.
     Patch by Mario Corchero.

   - bpo-36406(37): Handle namespace packages in *note doctest: 3a.
     Patch by Karthikeyan Singaravelan.

   - bpo-34776(38): Fix dataclasses to support forward references in
     type annotations

   - bpo-20928(39): ElementTree supports recursive XInclude processing.
     Patch by Stefan Behnel.

   - bpo-29636(40): Add whitespace options for formatting JSON with the
     ‘json.tool’ CLI. The following mutually exclusive options are now
     supported: ‘--indent’ for setting the indent level in spaces;
     ‘--tab’ for indenting with tabs; ‘--no-indent’ for suppressing
     newlines; and ‘--compact’ for suppressing all whitespace.  The
     default behavior remains the same as ‘--indent=4’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39033

   (2) https://bugs.python.org/issue?@action=redirect&bpo=39022

   (3) https://bugs.python.org/issue?@action=redirect&bpo=39006

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38708

   (5) https://bugs.python.org/issue?@action=redirect&bpo=38698

   (6) https://bugs.python.org/issue?@action=redirect&bpo=38994

   (7) https://bugs.python.org/issue?@action=redirect&bpo=38979

   (8) https://bugs.python.org/issue?@action=redirect&bpo=38978

   (9) https://bugs.python.org/issue?@action=redirect&bpo=38916

   (10) https://bugs.python.org/issue?@action=redirect&bpo=38986

   (11) https://bugs.python.org/issue?@action=redirect&bpo=38982

   (12) https://bugs.python.org/issue?@action=redirect&bpo=38529

   (13) https://bugs.python.org/issue?@action=redirect&bpo=27413

   (14) https://bugs.python.org/issue?@action=redirect&bpo=38634

   (15) https://bugs.python.org/issue?@action=redirect&bpo=33684

   (16) https://bugs.python.org/issue?@action=redirect&bpo=38698

   (17) https://bugs.python.org/issue?@action=redirect&bpo=38927

   (18) https://bugs.python.org/issue?@action=redirect&bpo=26730

   (19) https://bugs.python.org/issue?@action=redirect&bpo=38881

   (20) https://bugs.python.org/issue?@action=redirect&bpo=38876

   (21) https://bugs.python.org/issue?@action=redirect&bpo=38688

   (22) https://bugs.python.org/issue?@action=redirect&bpo=38863

   (23) https://bugs.python.org/issue?@action=redirect&bpo=37838

   (24) https://bugs.python.org/issue?@action=redirect&bpo=38870

   (25) https://bugs.python.org/issue?@action=redirect&bpo=38859

   (26) https://bugs.python.org/issue?@action=redirect&bpo=38857

   (27) https://bugs.python.org/issue?@action=redirect&bpo=38834

   (28) https://bugs.python.org/issue?@action=redirect&bpo=38821

   (29) https://bugs.python.org/issue?@action=redirect&bpo=38820

   (30) https://bugs.python.org/issue?@action=redirect&bpo=38811

   (31) https://bugs.python.org/issue?@action=redirect&bpo=38686

   (32) https://bugs.python.org/issue?@action=redirect&bpo=38712

   (33) https://bugs.python.org/issue?@action=redirect&bpo=38348

   (34) https://bugs.python.org/issue?@action=redirect&bpo=37523

   (35) https://bugs.python.org/issue?@action=redirect&bpo=38045

   (36) https://bugs.python.org/issue?@action=redirect&bpo=36820

   (37) https://bugs.python.org/issue?@action=redirect&bpo=36406

   (38) https://bugs.python.org/issue?@action=redirect&bpo=34776

   (39) https://bugs.python.org/issue?@action=redirect&bpo=20928

   (40) https://bugs.python.org/issue?@action=redirect&bpo=29636


File: python.info,  Node: Documentação<46>,  Next: Testes<49>,  Prev: Biblioteca<131>,  Up: Python 3 9 0 alpha 2

1.23.56.4 Documentação
......................

   - bpo-38928(1): Correct when venv’s ‘upgrade_dependencies()’ and
     ‘--upgrade-deps’ are added.

   - bpo-38899(2): Update documentation to state that to activate
     virtual environments under fish one should use ‘source’, not ‘.’ as
     documented at
     ‘https://fishshell.com/docs/current/cmds/source.html’.

   - bpo-22377(3): Improves documentation of the values that *note
     datetime.datetime.strptime(): 16f6. accepts for ‘%Z’.  Patch by
     Karl Dubost.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38928

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38899

   (3) https://bugs.python.org/issue?@action=redirect&bpo=22377


File: python.info,  Node: Testes<49>,  Next: Construção<54>,  Prev: Documentação<46>,  Up: Python 3 9 0 alpha 2

1.23.56.5 Testes
................

   - bpo-38546(1): Fix test_ressources_gced_in_workers() of
     test_concurrent_futures: explicitly stop the manager to prevent
     leaking a child process running in the background after the test
     completes.

   - bpo-38546(2): Multiprocessing and concurrent.futures tests now stop
     the resource tracker process when tests complete.

   - bpo-38614(3): Replace hardcoded timeout constants in tests with new
     *note test.support: e4. constants: *note LOOPBACK_TIMEOUT: 1b2b,
     *note INTERNET_TIMEOUT: 1b2c, *note SHORT_TIMEOUT: 19ee. and *note
     LONG_TIMEOUT: 1b2d.  It becomes easier to adjust these four timeout
     constants for all tests at once, rather than having to adjust every
     single test file.

   - bpo-38547(4): Fix test_pty: if the process is the session leader,
     closing the master file descriptor raises a SIGHUP signal: simply
     ignore SIGHUP when running the tests.

   - bpo-38992(5): Fix a test for *note math.fsum(): 141b. that was
     failing due to constant folding.

   - bpo-38991(6): *note test.support: e4.: ‘run_python_until_end()’,
     ‘assert_python_ok()’ and ‘assert_python_failure()’ functions no
     longer strip whitespaces from stderr.  Remove
     ‘test.support.strip_python_stderr()’ function.

   - bpo-38965(7): Fix test_faulthandler on GCC 10.  Use the “volatile”
     keyword in ‘faulthandler._stack_overflow()’ to prevent tail call
     optimization on any compiler, rather than relying on compiler
     specific pragma.

   - bpo-38875(8): test_capi: trashcan tests now require the test “cpu”
     resource.

   - bpo-38841(9): Skip asyncio
     test_create_datagram_endpoint_existing_sock_unix on platforms
     lacking a functional bind() for named unix domain sockets.

   - bpo-38692(10): Skip the test_posix.test_pidfd_open() test if
     ‘os.pidfd_open()’ fails with a *note PermissionError: d65.  This
     situation can happen in a Linux sandbox using a syscall whitelist
     which doesn’t allow the ‘pidfd_open()’ syscall yet.

   - bpo-38839(11): Fix some unused functions in tests.  Patch by Adam
     Johnson.

   - bpo-38669(12): Raise *note TypeError: 2c3. when passing target as a
     string with *note unittest.mock.patch.object(): 167f.

   - bpo-37957(13): test.regrtest now can receive a list of test
     patterns to ignore (using the -i/–ignore argument) or a file with a
     list of patterns to ignore (using the –ignore-file argument).
     Patch by Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38546

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38546

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38614

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38547

   (5) https://bugs.python.org/issue?@action=redirect&bpo=38992

   (6) https://bugs.python.org/issue?@action=redirect&bpo=38991

   (7) https://bugs.python.org/issue?@action=redirect&bpo=38965

   (8) https://bugs.python.org/issue?@action=redirect&bpo=38875

   (9) https://bugs.python.org/issue?@action=redirect&bpo=38841

   (10) https://bugs.python.org/issue?@action=redirect&bpo=38692

   (11) https://bugs.python.org/issue?@action=redirect&bpo=38839

   (12) https://bugs.python.org/issue?@action=redirect&bpo=38669

   (13) https://bugs.python.org/issue?@action=redirect&bpo=37957


File: python.info,  Node: Construção<54>,  Next: Windows<46>,  Prev: Testes<49>,  Up: Python 3 9 0 alpha 2

1.23.56.6 Construção
....................

   - bpo-37404(1): *note asyncio: a. now raises *note TypeError: 2c3.
     when calling incompatible methods with an *note ssl.SSLSocket: 8f0.
     socket.  Patch by Ido Michael.

   - bpo-36500(2): Added an optional “regen” project to the Visual
     Studio solution that will regenerate all grammar, tokens, and
     opcodes.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37404

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36500


File: python.info,  Node: Windows<46>,  Next: macOS<37>,  Prev: Construção<54>,  Up: Python 3 9 0 alpha 2

1.23.56.7 Windows
.................

   - bpo-39007(1): Add auditing events to functions in *note winreg:
     116.

   - bpo-33125(2): Add support for building and releasing Windows ARM64
     packages.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=39007

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33125


File: python.info,  Node: macOS<37>,  Next: IDLE<35>,  Prev: Windows<46>,  Up: Python 3 9 0 alpha 2

1.23.56.8 macOS
...............

   - bpo-37931(1): Fixed a crash on OSX dynamic builds that occurred
     when re-initializing the posix module after a Py_Finalize if the
     environment had changed since the previous ‘import posix’.  Patch
     by Benoît Hudson.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37931


File: python.info,  Node: IDLE<35>,  Next: API C<50>,  Prev: macOS<37>,  Up: Python 3 9 0 alpha 2

1.23.56.9 IDLE
..............

   - bpo-38944(1): Escape key now closes IDLE completion windows.  Patch
     by Johnny Najera.

   - bpo-38943(2): Fix IDLE autocomplete windows not always appearing on
     some systems.  Patch by Johnny Najera.

   - bpo-38862(3): ‘Strip Trailing Whitespace’ on the Format menu
     removes extra newlines at the end of non-shell files.

   - bpo-38636(4): Fix IDLE Format menu tab toggle and file indent
     width.  These functions (default shortcuts Alt-T and Alt-U) were
     mistakenly disabled in 3.7.5 and 3.8.0.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38944

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38943

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38862

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38636


File: python.info,  Node: API C<50>,  Prev: IDLE<35>,  Up: Python 3 9 0 alpha 2

1.23.56.10 API C
................

   - bpo-38896(1): Remove ‘PyUnicode_ClearFreeList()’ function: the
     Unicode free list has been removed in Python 3.3.

   - bpo-37340(2): Remove ‘PyMethod_ClearFreeList()’ and
     ‘PyCFunction_ClearFreeList()’ functions: the free lists of bound
     method objects have been removed.

   - bpo-38835(3): Exclude ‘PyFPE_START_PROTECT()’ and
     ‘PyFPE_END_PROTECT()’ macros of ‘pyfpe.h’ from ‘Py_LIMITED_API’
     (stable API).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38896

   (2) https://bugs.python.org/issue?@action=redirect&bpo=37340

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38835


File: python.info,  Node: Python 3 9 0 alpha 1,  Next: Python 3 8 0 beta 1,  Prev: Python 3 9 0 alpha 2,  Up: Changelog

1.23.57 Python 3.9.0 alpha 1
----------------------------

'Data de lançamento: 2019-11-19'

* Menu:

* Segurança: Segurança<38>.
* Núcleo e embutidos: Núcleo e embutidos<130>.
* Biblioteca: Biblioteca<132>.
* Documentação: Documentação<47>.
* Testes: Testes<50>.
* Construção: Construção<55>.
* Windows: Windows<47>.
* macOS: macOS<38>.
* IDLE: IDLE<36>.
* Ferramentas/Demos: Ferramentas/Demos<26>.
* API C: API C<51>.


File: python.info,  Node: Segurança<38>,  Next: Núcleo e embutidos<130>,  Up: Python 3 9 0 alpha 1

1.23.57.1 Segurança
...................

   - bpo-38722(1): *note runpy: be. now uses *note io.open_code(): 181c.
     to open code files.  Patch by Jason Killen.

   - bpo-38622(2): Add additional audit events for the *note ctypes: 2a.
     module.

   - bpo-38418(3): Fixes audit event for *note os.system(): 14a5. to be
     named ‘os.system’.

   - bpo-38243(4): Escape the server title of *note
     xmlrpc.server.DocXMLRPCServer: 1b35. when rendering the document
     page as HTML. (Contributed by Donghee Na in bpo-38243(5).)

   - bpo-38174(6): Update vendorized expat library version to 2.2.8,
     which resolves CVE 2019-15903(7).

   - bpo-37764(8): Fixes email._header_value_parser.get_unstructured
     going into an infinite loop for a specific case in which the email
     header does not have trailing whitespace, and the case in which it
     contains an invalid encoded word.  Patch by Ashwin Ramaswami.

   - bpo-37461(9): Fix an infinite loop when parsing specially crafted
     email headers.  Patch by Abhilash Raj.

   - bpo-37363(10): Adds audit events for the range of supported run
     commands (see *note Linha de comando e ambiente: 1b36.).

   - bpo-37463(11): ssl.match_hostname() no longer accepts IPv4
     addresses with additional text after the address and only
     quad-dotted notation without trailing whitespaces.  Some
     inet_aton() implementations ignore whitespace and all data after
     whitespace, e.g.  ‘127.0.0.1 whatever’.

   - bpo-37363(12): Adds audit events for *note ensurepip: 55, *note
     ftplib: 5e, *note glob: 64, *note imaplib: 74, ‘nntplib’, *note
     pdb: a5, *note poplib: ac, *note shutil: c5, *note smtplib: ca,
     *note sqlite3: cf, *note subprocess: d6, ‘telnetlib’, *note
     tempfile: e0. and *note webbrowser: 115, as well as *note
     os.listdir(): 1139, *note os.scandir(): a68. and *note
     breakpoint(): 234.

   - bpo-37364(13): *note io.open_code(): 181c. is now used when reading
     ‘.pth’ files.

   - bpo-34631(14): Updated OpenSSL to 1.1.1c in Windows installer

   - bpo-34155(15): Fix parsing of invalid email addresses with more
     than one ‘@’ (e.g.  a@b@c.com.)  to not return the part before 2nd
     ‘@’ as valid email address.  Patch by maxking & jpic.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38722

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38622

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38418

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38243

   (5) https://bugs.python.org/issue?@action=redirect&bpo=38243

   (6) https://bugs.python.org/issue?@action=redirect&bpo=38174

   (7) https://www.cve.org/CVERecord?id=CVE-2019-15903

   (8) https://bugs.python.org/issue?@action=redirect&bpo=37764

   (9) https://bugs.python.org/issue?@action=redirect&bpo=37461

   (10) https://bugs.python.org/issue?@action=redirect&bpo=37363

   (11) https://bugs.python.org/issue?@action=redirect&bpo=37463

   (12) https://bugs.python.org/issue?@action=redirect&bpo=37363

   (13) https://bugs.python.org/issue?@action=redirect&bpo=37364

   (14) https://bugs.python.org/issue?@action=redirect&bpo=34631

   (15) https://bugs.python.org/issue?@action=redirect&bpo=34155


File: python.info,  Node: Núcleo e embutidos<130>,  Next: Biblioteca<132>,  Prev: Segurança<38>,  Up: Python 3 9 0 alpha 1

1.23.57.2 Núcleo e embutidos
............................

   - bpo-38631(1): Replace ‘Py_FatalError()’ call with a regular *note
     RuntimeError: 195. exception in ‘float.__getformat__()’.

   - bpo-38639(2): Optimized *note math.floor(): 1404, *note
     math.ceil(): 1405. and *note math.trunc(): 1406. for floats.

   - bpo-38640(3): Fixed a bug in the compiler that was causing to raise
     in the presence of break statements and continue statements inside
     always false while loops.  Patch by Pablo Galindo.

   - bpo-38613(4): Optimized some set operations (e.g.  ‘|’, ‘^’, and
     ‘-’) of ‘dict_keys’.  ‘d.keys() | other’ was slower than ‘set(d) |
     other’ but they are almost same performance for now.

   - bpo-28029(5): ‘"".replace("", s, n)’ now returns ‘s’ instead of an
     empty string for all non-zero ‘n’.  There are similar changes for
     *note bytes: 1c2. and *note bytearray: 2ea. objects.

   - bpo-38535(6): Fixed line numbers and column offsets for AST nodes
     for calls without arguments in decorators.

   - bpo-38525(7): Fix a segmentation fault when using reverse iterators
     of empty ‘dict’ objects.  Patch by Donghee Na and Inada Naoki.

   - bpo-38465(8): *note bytearray: 2ea, *note array: 1a0. and *note
     mmap: 20b. objects allow now to export more than ‘2**31’ buffers at
     a time.

   - bpo-38469(9): Fixed a bug where the scope of named expressions was
     not being resolved correctly in the presence of the 'global'
     keyword.  Patch by Pablo Galindo.

   - bpo-38437(10): Activate the ‘GC_DEBUG’ macro for debug builds of
     the interpreter (when ‘Py_DEBUG’ is set).  Patch by Pablo Galindo.

   - bpo-38379(11): When the garbage collector makes a collection in
     which some objects resurrect (they are reachable from outside the
     isolated cycles after the finalizers have been executed), do not
     block the collection of all objects that are still unreachable.
     Patch by Pablo Galindo and Tim Peters.

   - bpo-38379(12): When cyclic garbage collection (gc) runs finalizers
     that resurrect unreachable objects, the current gc run ends,
     without collecting any cyclic trash.  However, the statistics
     reported by ‘collect()’ and ‘get_stats()’ claimed that all cyclic
     trash found was collected, and that the resurrected objects were
     collected.  Changed the stats to report that none were collected.

   - bpo-38392(13): In debug mode, *note PyObject_GC_Track(): 154d. now
     calls ‘tp_traverse()’ of the object type to ensure that the object
     is valid: test that objects visited by ‘tp_traverse()’ are valid.

   - bpo-38210(14): Remove unnecessary intersection and update set
     operation in dictview with empty set.  (Contributed by Donghee Na
     in bpo-38210(15).)

   - bpo-38402(16): Check the error from the system’s underlying ‘crypt’
     or ‘crypt_r’.

   - bpo-37474(17): On FreeBSD, Python no longer calls
     ‘fedisableexcept()’ at startup to control the floating-point
     control mode.  The call became useless since FreeBSD 6: it became
     the default mode.

   - bpo-38006(18): Fix a bug due to the interaction of weakrefs and the
     cyclic garbage collector.  We must clear any weakrefs in garbage in
     order to prevent their callbacks from executing and causing a
     crash.

   - bpo-38317(19): Fix warnings options priority:
     ‘PyConfig.warnoptions’ has the highest priority, as stated in the
     PEP 587(20).

   - bpo-38310(21): Predict ‘BUILD_MAP_UNPACK_WITH_CALL’ ->
     ‘CALL_FUNCTION_EX’ opcode pairs in the main interpreter loop.
     Patch by Brandt Bucher.

   - bpo-36871(22): Improve error handling for the assert_has_calls and
     assert_has_awaits methods of mocks.  Fixed a bug where any errors
     encountered while binding the expected calls to the mock’s spec
     were silently swallowed, leading to misleading error output.

   - bpo-11410(23): Better control over symbol visibility is provided
     through use of the visibility attributes available in gcc >= 4.0,
     provided in a uniform way across POSIX and Windows.  The POSIX
     build files have been updated to compile with -fvisibility=hidden,
     minimising exported symbols.

   - bpo-38219(24): Optimized the *note dict: 256. constructor and the
     *note update(): 14ad. method for the case when the argument is a
     dict.

   - bpo-38236(25): Python now dumps path configuration if it fails to
     import the Python codecs of the filesystem and stdio encodings.

   - bpo-38013(26): Allow to call ‘async_generator_athrow().throw(...)’
     even for non-started async generator helper.  It fixes annoying
     warning at the end of *note asyncio.run(): 47c. call.

   - bpo-38124(27): Fix an off-by-one error in PyState_AddModule that
     could cause out-of-bounds memory access.

   - bpo-38116(28): The select module is now PEP-384 compliant and no
     longer has static state

   - bpo-38113(29): ast module updated to PEP-384 and all statics
     removed

   - bpo-38076(30): The struct module is now PEP-384 compatible

   - bpo-38075(31): The random module is now PEP-384 compatible

   - bpo-38074(32): zlib module made PEP-384 compatible

   - bpo-38073(33): Make pwd extension module PEP-384 compatible

   - bpo-38072(34): grp module made PEP-384 compatible

   - bpo-38069(35): Make _posixsubprocess PEP-384 compatible

   - bpo-38071(36): Make termios extension module PEP-384 compatible

   - bpo-38005(37): Fixed comparing and creating of InterpreterID and
     ChannelID.

   - bpo-36946(38): Fix possible signed integer overflow when handling
     slices.  Patch by hongweipeng.

   - bpo-37994(39): Fixed silencing arbitrary errors if an attribute
     lookup fails in several sites.  Only AttributeError should be
     silenced.

   - bpo-8425(40): Optimize set difference_update for the case when the
     other set is much larger than the base set.  (Suggested by Evgeny
     Kapun with code contributed by Michele Orrù).

   - bpo-37966(41): The implementation of *note is_normalized(): a51.
     has been greatly sped up on strings that aren’t normalized, by
     implementing the full normalization-quick-check algorithm from the
     Unicode standard.

   - bpo-37947(42): Adjust correctly the recursion level in the symtable
     generation for named expressions.  Patch by Pablo Galindo.

   - bpo-37812(43): The ‘CHECK_SMALL_INT’ macro used inside
     ‘Object/longobject.c’ has been replaced with an explicit ‘return’
     at each call site.

   - bpo-37751(44): Fix *note codecs.lookup(): 96a. to normalize the
     encoding name the same way than *note
     encodings.normalize_encoding(): 7fe, except that *note
     codecs.lookup(): 96a. also converts the name to lower case.

   - bpo-37830(45): Fixed compilation of *note break: ab8. and *note
     continue: 9d1. in the *note finally: 9d2. block when the
     corresponding *note try: 6e9. block contains *note return: 9d6.
     with a non-constant value.

   - bpo-20490(46): Improve import error message for partially
     initialized module on circular ‘from’ imports - by Anthony Sottile.

   - bpo-37840(47): Fix handling of negative indices in *note sq_item:
     1a82. of *note bytearray: 2ea.  Patch by Sergey Fedoseev.

   - bpo-37802(48): Slightly improve performance of *note
     PyLong_FromUnsignedLong(): 1b38, *note
     PyLong_FromUnsignedLongLong(): 1b39. and *note PyLong_FromSize_t():
     1b3a.  Patch by Sergey Fedoseev.

   - bpo-37409(49): Ensure explicit relative imports from interactive
     sessions and scripts (having no parent package) always raise
     ImportError, rather than treating the current module as the
     package.  Patch by Ben Lewis.

   - bpo-32912(50): Reverted bpo-32912(51): emitting *note
     SyntaxWarning: 466. instead of *note DeprecationWarning: 1a5. for
     invalid escape sequences in string and bytes literals.

   - bpo-37757(52): PEP 572(53): As described in the PEP, assignment
     expressions now raise *note SyntaxError: 18d. when their
     interaction with comprehension scoping results in an ambiguous
     target scope.

     The ‘TargetScopeError’ subclass originally proposed by the PEP has
     been removed in favour of just raising regular syntax errors for
     the disallowed cases.

   - bpo-36279(54): Fix potential use of uninitialized memory in *note
     os.wait3(): dbe.

   - bpo-36311(55): Decoding bytes objects larger than 2GiB is faster
     and no longer fails when a multibyte characters spans a chunk
     boundary.

   - bpo-34880(56): The *note assert: 96f. statement now works properly
     if the *note AssertionError: 6a9. exception is being shadowed.
     Patch by Zackery Spytz.

   - bpo-37340(57): Removed object cache (‘free_list’) for bound method
     objects.  Temporary bound method objects are less used than before
     thanks to the ‘LOAD_METHOD’ opcode and the
     ‘_PyObject_VectorcallMethod’ C API.

   - bpo-37648(58): Fixed minor inconsistency in ‘list.__contains__()’,
     ‘tuple.__contains__()’ and a few other places.  The collection’s
     item is now always at the left and the needle is on the right of
     ‘==’.

   - bpo-37444(59): Update differing exception between
     ‘builtins.__import__()’ and *note importlib.__import__(): 10a6.

   - bpo-37619(60): When adding a wrapper descriptor from one class to a
     different class (for example, setting ‘__add__ = str.__add__’ on an
     ‘int’ subclass), an exception is correctly raised when the operator
     is called.

   - bpo-37593(61): Swap the positions of the 'posonlyargs' and 'args'
     parameters in the constructor of ‘ast.parameters’ nodes.

   - bpo-37543(62): Optimized pymalloc for non PGO build.

   - bpo-37537(63): Compute allocated pymalloc blocks inside
     _Py_GetAllocatedBlocks().  This slows down _Py_GetAllocatedBlocks()
     but gives a small speedup to _PyObject_Malloc() and
     _PyObject_Free().

   - bpo-37467(64): Fix *note sys.excepthook(): 80e. and
     ‘PyErr_Display()’ if a filename is a bytes string.  For example,
     for a SyntaxError exception where the filename attribute is a bytes
     string.

   - bpo-37433(65): Fix ‘SyntaxError’ indicator printing too many spaces
     for multi-line strings - by Anthony Sottile.

   - bpo-37417(66): *note bytearray.extend(): 15b6. now correctly
     handles errors that arise during iteration.  Patch by Brandt
     Bucher.

   - bpo-37414(67): The undocumented ‘sys.callstats()’ function has been
     removed.  Since Python 3.7, it was deprecated and always returned
     ‘None’.  It required a special build option ‘CALL_PROFILE’ which
     was already removed in Python 3.7.

   - bpo-37392(68): Remove ‘sys.getcheckinterval()’ and
     ‘sys.setcheckinterval()’ functions.  They were deprecated since
     Python 3.2.  Use *note sys.getswitchinterval(): 950. and *note
     sys.setswitchinterval(): 951. instead.  Remove also
     ‘check_interval’ field of the ‘PyInterpreterState’ structure.

   - bpo-37388(69): In development mode and in debug build, 'encoding'
     and 'errors' arguments are now checked on string encoding and
     decoding operations.  Examples: *note open(): 51c, *note
     str.encode(): 8db. and *note bytes.decode(): 8dc.

     By default, for best performances, the 'errors' argument is only
     checked at the first encoding/decoding error, and the 'encoding'
     argument is sometimes ignored for empty strings.

   - bpo-37348(70): Optimized decoding short ASCII string with UTF-8 and
     ascii codecs.  ‘b"foo".decode()’ is about 15% faster.  Patch by
     Inada Naoki.

   - bpo-24214(71): Improved support of the surrogatepass error handler
     in the UTF-8 and UTF-16 incremental decoders.

   - bpo-37330(72): *note open(): 51c, *note io.open(): 51d, *note
     codecs.open(): 740. and *note fileinput.FileInput: 737. no longer
     accept ‘'U'’ (“universal newline”) in the file mode.  This flag was
     deprecated since Python 3.3.

   - bpo-35224(73): Reverse evaluation order of key: value in dict
     comprehensions as proposed in PEP 572.  I.e.  in ‘{k: v for ...}’,
     ‘k’ will be evaluated before ‘v’.

   - bpo-37316(74): Fix the *note PySys_Audit(): 36f. call in *note
     mmap.mmap: 20b.

   - bpo-37300(75): Remove an unnecessary Py_XINCREF in classobject.c.

   - bpo-37269(76): Fix a bug in the peephole optimizer that was not
     treating correctly constant conditions with binary operators.
     Patch by Pablo Galindo.

   - bpo-20443(77): Python now gets the absolute path of the script
     filename specified on the command line (ex: “python3 script.py”):
     the __file__ attribute of the __main__ module and sys.path[0]
     become an absolute path, rather than a relative path.

   - bpo-37257(78): Python’s small object allocator (‘obmalloc.c’) now
     allows (no more than) one empty arena to remain available for
     immediate reuse, without returning it to the OS. This prevents
     thrashing in simple loops where an arena could be created and
     destroyed anew on each iteration.

   - bpo-37231(79): The dispatching of type slots to special methods
     (for example calling ‘__mul__’ when doing ‘x * y’) has been made
     faster.

   - bpo-36974(80): Implemented separate vectorcall functions for every
     calling convention of builtin functions and methods.  This improves
     performance for calls.

   - bpo-37213(81): Handle correctly negative line offsets in the
     peephole optimizer.  Patch by Pablo Galindo.

   - bpo-37219(82): Remove erroneous optimization for empty set
     differences.

   - bpo-15913(83): Implement *note PyBuffer_SizeFromFormat(): 75a.
     function (previously documented but not implemented): call *note
     struct.calcsize(): 1b3b.  Patch by Joannah Nanjekye.

   - bpo-36922(84): Slot functions optimize any callable with
     ‘Py_TPFLAGS_METHOD_DESCRIPTOR’ instead of only instances of
     ‘function’.

   - bpo-36974(85): The slot ‘tp_vectorcall_offset’ is inherited
     unconditionally to support ‘super().__call__()’ when the base class
     uses vectorcall.

   - bpo-37160(86): *note threading.get_native_id(): a47. now also
     supports NetBSD.

   - bpo-37077(87): Add *note threading.get_native_id(): a47. support
     for AIX. Patch by M. Felt

   - bpo-36781(88): *note sum(): 46a. has been optimized for boolean
     values.

   - bpo-34556(89): Add ‘--upgrade-deps’ to venv module.  Patch by
     Cooper Ry Lees

   - bpo-20523(90): ‘pdb.Pdb’ supports ~/.pdbrc in Windows 7.  Patch by
     Tim Hopper and Dan Lidral-Porter.

   - bpo-35551(91): Updated encodings: - Removed the “tis260” encoding,
     which was an alias for the nonexistent “tactis” codec.  - Added
     “mac_centeuro” as an alias for the mac_latin2 encoding.

   - bpo-19072(92): The *note classmethod: 166. decorator can now wrap
     other descriptors such as property objects.  Adapted from a patch
     written by Graham Dumpleton.

   - bpo-27575(93): Improve speed of dictview intersection by directly
     using set intersection logic.  Patch by David Su.

   - bpo-30773(94): Prohibit parallel running of aclose() / asend() /
     athrow().  Fix ag_running to reflect the actual running status of
     the AG.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38631

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38639

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38640

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38613

   (5) https://bugs.python.org/issue?@action=redirect&bpo=28029

   (6) https://bugs.python.org/issue?@action=redirect&bpo=38535

   (7) https://bugs.python.org/issue?@action=redirect&bpo=38525

   (8) https://bugs.python.org/issue?@action=redirect&bpo=38465

   (9) https://bugs.python.org/issue?@action=redirect&bpo=38469

   (10) https://bugs.python.org/issue?@action=redirect&bpo=38437

   (11) https://bugs.python.org/issue?@action=redirect&bpo=38379

   (12) https://bugs.python.org/issue?@action=redirect&bpo=38379

   (13) https://bugs.python.org/issue?@action=redirect&bpo=38392

   (14) https://bugs.python.org/issue?@action=redirect&bpo=38210

   (15) https://bugs.python.org/issue?@action=redirect&bpo=38210

   (16) https://bugs.python.org/issue?@action=redirect&bpo=38402

   (17) https://bugs.python.org/issue?@action=redirect&bpo=37474

   (18) https://bugs.python.org/issue?@action=redirect&bpo=38006

   (19) https://bugs.python.org/issue?@action=redirect&bpo=38317

   (20) https://peps.python.org/pep-0587/

   (21) https://bugs.python.org/issue?@action=redirect&bpo=38310

   (22) https://bugs.python.org/issue?@action=redirect&bpo=36871

   (23) https://bugs.python.org/issue?@action=redirect&bpo=11410

   (24) https://bugs.python.org/issue?@action=redirect&bpo=38219

   (25) https://bugs.python.org/issue?@action=redirect&bpo=38236

   (26) https://bugs.python.org/issue?@action=redirect&bpo=38013

   (27) https://bugs.python.org/issue?@action=redirect&bpo=38124

   (28) https://bugs.python.org/issue?@action=redirect&bpo=38116

   (29) https://bugs.python.org/issue?@action=redirect&bpo=38113

   (30) https://bugs.python.org/issue?@action=redirect&bpo=38076

   (31) https://bugs.python.org/issue?@action=redirect&bpo=38075

   (32) https://bugs.python.org/issue?@action=redirect&bpo=38074

   (33) https://bugs.python.org/issue?@action=redirect&bpo=38073

   (34) https://bugs.python.org/issue?@action=redirect&bpo=38072

   (35) https://bugs.python.org/issue?@action=redirect&bpo=38069

   (36) https://bugs.python.org/issue?@action=redirect&bpo=38071

   (37) https://bugs.python.org/issue?@action=redirect&bpo=38005

   (38) https://bugs.python.org/issue?@action=redirect&bpo=36946

   (39) https://bugs.python.org/issue?@action=redirect&bpo=37994

   (40) https://bugs.python.org/issue?@action=redirect&bpo=8425

   (41) https://bugs.python.org/issue?@action=redirect&bpo=37966

   (42) https://bugs.python.org/issue?@action=redirect&bpo=37947

   (43) https://bugs.python.org/issue?@action=redirect&bpo=37812

   (44) https://bugs.python.org/issue?@action=redirect&bpo=37751

   (45) https://bugs.python.org/issue?@action=redirect&bpo=37830

   (46) https://bugs.python.org/issue?@action=redirect&bpo=20490

   (47) https://bugs.python.org/issue?@action=redirect&bpo=37840

   (48) https://bugs.python.org/issue?@action=redirect&bpo=37802

   (49) https://bugs.python.org/issue?@action=redirect&bpo=37409

   (50) https://bugs.python.org/issue?@action=redirect&bpo=32912

   (51) https://bugs.python.org/issue?@action=redirect&bpo=32912

   (52) https://bugs.python.org/issue?@action=redirect&bpo=37757

   (53) https://peps.python.org/pep-0572/

   (54) https://bugs.python.org/issue?@action=redirect&bpo=36279

   (55) https://bugs.python.org/issue?@action=redirect&bpo=36311

   (56) https://bugs.python.org/issue?@action=redirect&bpo=34880

   (57) https://bugs.python.org/issue?@action=redirect&bpo=37340

   (58) https://bugs.python.org/issue?@action=redirect&bpo=37648

   (59) https://bugs.python.org/issue?@action=redirect&bpo=37444

   (60) https://bugs.python.org/issue?@action=redirect&bpo=37619

   (61) https://bugs.python.org/issue?@action=redirect&bpo=37593

   (62) https://bugs.python.org/issue?@action=redirect&bpo=37543

   (63) https://bugs.python.org/issue?@action=redirect&bpo=37537

   (64) https://bugs.python.org/issue?@action=redirect&bpo=37467

   (65) https://bugs.python.org/issue?@action=redirect&bpo=37433

   (66) https://bugs.python.org/issue?@action=redirect&bpo=37417

   (67) https://bugs.python.org/issue?@action=redirect&bpo=37414

   (68) https://bugs.python.org/issue?@action=redirect&bpo=37392

   (69) https://bugs.python.org/issue?@action=redirect&bpo=37388

   (70) https://bugs.python.org/issue?@action=redirect&bpo=37348

   (71) https://bugs.python.org/issue?@action=redirect&bpo=24214

   (72) https://bugs.python.org/issue?@action=redirect&bpo=37330

   (73) https://bugs.python.org/issue?@action=redirect&bpo=35224

   (74) https://bugs.python.org/issue?@action=redirect&bpo=37316

   (75) https://bugs.python.org/issue?@action=redirect&bpo=37300

   (76) https://bugs.python.org/issue?@action=redirect&bpo=37269

   (77) https://bugs.python.org/issue?@action=redirect&bpo=20443

   (78) https://bugs.python.org/issue?@action=redirect&bpo=37257

   (79) https://bugs.python.org/issue?@action=redirect&bpo=37231

   (80) https://bugs.python.org/issue?@action=redirect&bpo=36974

   (81) https://bugs.python.org/issue?@action=redirect&bpo=37213

   (82) https://bugs.python.org/issue?@action=redirect&bpo=37219

   (83) https://bugs.python.org/issue?@action=redirect&bpo=15913

   (84) https://bugs.python.org/issue?@action=redirect&bpo=36922

   (85) https://bugs.python.org/issue?@action=redirect&bpo=36974

   (86) https://bugs.python.org/issue?@action=redirect&bpo=37160

   (87) https://bugs.python.org/issue?@action=redirect&bpo=37077

   (88) https://bugs.python.org/issue?@action=redirect&bpo=36781

   (89) https://bugs.python.org/issue?@action=redirect&bpo=34556

   (90) https://bugs.python.org/issue?@action=redirect&bpo=20523

   (91) https://bugs.python.org/issue?@action=redirect&bpo=35551

   (92) https://bugs.python.org/issue?@action=redirect&bpo=19072

   (93) https://bugs.python.org/issue?@action=redirect&bpo=27575

   (94) https://bugs.python.org/issue?@action=redirect&bpo=30773


File: python.info,  Node: Biblioteca<132>,  Next: Documentação<47>,  Prev: Núcleo e embutidos<130>,  Up: Python 3 9 0 alpha 1

1.23.57.3 Biblioteca
....................

   - bpo-36589(1): The *note curses.update_lines_cols(): e16. function
     now returns ‘None’ instead of ‘1’ on success.

   - bpo-38807(2): Update *note TypeError: 2c3. messages for *note
     os.path.join(): 171f. to include *note os.PathLike: c6c. objects as
     acceptable input types.

   - bpo-38724(3): Add a repr for ‘subprocess.Popen’ objects.  Patch by
     Andrey Doroschenko.

   - bpo-38786(4): pydoc now recognizes and parses HTTPS URLs.  Patch by
     python273.

   - bpo-38785(5): Prevent asyncio from crashing if parent ‘__init__’ is
     not called from a constructor of object derived from
     ‘asyncio.Future’.

   - bpo-38723(6): *note pdb: a5. now uses *note io.open_code(): 181c.
     to trigger auditing events.

   - bpo-27805(7): Allow opening pipes and other non-seekable files in
     append mode with *note open(): 51c.

   - bpo-38438(8): Simplify the *note argparse: 6. usage message for
     ‘nargs="*"’.

   - bpo-38761(9): WeakSet is now registered as a
     collections.abc.MutableSet.

   - bpo-38716(10): logging: change RotatingHandler namer and rotator to
     class-level attributes.  This stops __init__ from setting them to
     None in the case where a subclass defines them with eponymous
     methods.

   - bpo-38713(11): Add *note os.P_PIDFD: 920. constant, which may be
     passed to *note os.waitid(): dc1. to wait on a Linux process file
     descriptor.

   - bpo-38692(12): Add *note asyncio.PidfdChildWatcher: 479, a
     Linux-specific child watcher implementation that polls process file
     descriptors.

   - bpo-38692(13): Expose the Linux ‘pidfd_open’ syscall as *note
     os.pidfd_open(): 47a.

   - bpo-38602(14): Added constants ‘F_OFD_GETLK’, ‘F_OFD_SETLK’ and
     ‘F_OFD_SETLKW’ to the *note fcntl: 59. module.  Patch by Donghee
     Na.

   - bpo-38334(15): Fixed seeking backward on an encrypted
     ‘zipfile.ZipExtFile’.

   - bpo-38312(16): Add *note curses.get_escdelay(): 8f6, *note
     curses.set_escdelay(): 8f7, *note curses.get_tabsize(): 8f8, and
     *note curses.set_tabsize(): 8f9. functions - by Anthony Sottile.

   - bpo-38586(17): Now *note fileConfig(): b66. correctly sets the
     .name of handlers loaded.

   - bpo-38565(18): Add new cache_parameters() method for
     functools.lru_cache() to better support pickling.

   - bpo-34679(19): asynci.ProactorEventLoop.close() now only calls
     signal.set_wakeup_fd() in the main thread.

   - bpo-31202(20): The case the result of ‘pathlib.WindowsPath.glob()’
     matches now the case of the pattern for literal parts.

   - bpo-36321(21): Remove misspelled attribute.  The 3.8 changelog
     noted that this would be removed in 3.9.

   - bpo-38521(22): Fixed erroneous equality comparison in
     statistics.NormalDist().

   - bpo-38493(23): Added *note CLD_KILLED: 91e. and *note CLD_STOPPED:
     91f. for ‘si_code’.  Patch by Donghee Na.

   - bpo-38478(24): Fixed a bug in ‘inspect.signature.bind()’ that was
     causing it to fail when handling a keyword argument with same name
     as positional-only parameter.  Patch by Pablo Galindo.

   - bpo-33604(25): Fixed ‘hmac.new’ and ‘hmac.HMAC’ to raise TypeError
     instead of ValueError when the digestmod parameter, now required in
     3.8, is omitted.  Also clarified the hmac module documentation and
     docstrings.

   - bpo-38378(26): Parameters 'out' and 'in' of *note os.sendfile():
     b21. was renamed to 'out_fd' and 'in_fd'.

   - bpo-38417(27): Added support for setting the umask in the child
     process to the subprocess module on POSIX systems.

   - bpo-38449(28): Revert PR 15522, which introduces a regression in
     *note mimetypes.guess_type(): 208. due to improper handling of
     filenames as urls.

   - bpo-38431(29): Fix ‘__repr__’ method for *note dataclasses.InitVar:
     193e. to support typing objects, patch by Samuel Colvin.

   - bpo-38109(30): Add missing *note stat.S_IFDOOR: fef, *note
     stat.S_IFPORT: ff0, *note stat.S_IFWHT: ff1, *note stat.S_ISDOOR():
     1b3d, *note stat.S_ISPORT(): 1b3e, and *note stat.S_ISWHT(): 1b3f.
     values to the Python implementation of *note stat: d1.

   - bpo-38422(31): Clarify docstrings of pathlib suffix(es)

   - bpo-38405(32): Nested subclasses of *note typing.NamedTuple: 2b0.
     are now pickleable.

   - bpo-38332(33): Prevent *note KeyError: 344. thrown by
     ‘_encoded_words.decode()’ when given an encoded-word with invalid
     content-type encoding from propagating all the way to
     ‘email.message.get()’.

   - bpo-38371(34): Deprecated the ‘split()’ method in
     ‘_tkinter.TkappType’ in favour of the ‘splitlist()’ method which
     has more consistent and predictable behavior.

   - bpo-38341(35): Add *note smtplib.SMTPNotSupportedError: 1b40. to
     the *note smtplib: ca. exported names.

   - bpo-38319(36): sendfile() used in socket and shutil modules was
     raising OverflowError for files >= 2GiB on 32-bit architectures.
     (patch by Giampaolo Rodola)

   - bpo-38242(37): Revert the new asyncio Streams API

   - bpo-13153(38): OS native encoding is now used for converting
     between Python strings and Tcl objects.  This allows to display,
     copy and paste to clipboard emoji and other non-BMP characters.
     Converting strings from Tcl to Python and back now never fails
     (except MemoryError).

   - bpo-38019(39): Correctly handle pause/resume reading of closed
     asyncio unix pipe.

   - bpo-38163(40): Child mocks will now detect their type as either
     synchronous or asynchronous, asynchronous child mocks will be
     AsyncMocks and synchronous child mocks will be either MagicMock or
     Mock (depending on their parent type).

   - bpo-38161(41): Removes _AwaitEvent from AsyncMock.

   - bpo-38216(42): Allow the rare code that wants to send invalid http
     requests from the ‘http.client’ library a way to do so.  The fixes
     for bpo-30458(43) led to breakage for some projects that were
     relying on this ability to test their own behavior in the face of
     bad requests.

   - bpo-28286(44): Deprecate opening *note GzipFile: 41a. for writing
     implicitly.  Always specify the 'mode' argument for writing.

   - bpo-38108(45): Any synchronous magic methods on an AsyncMock now
     return a MagicMock.  Any asynchronous magic methods on a MagicMock
     now return an AsyncMock.

   - bpo-38265(46): Update the 'length' parameter of *note os.pread():
     b75. to accept *note Py_ssize_t: a69. instead of int.

   - bpo-38112(47): *note compileall: 20. has a higher default recursion
     limit and new command-line arguments for path manipulation,
     symlinks handling, and multiple optimization levels.

   - bpo-38248(48): asyncio: Fix inconsistent immediate Task
     cancellation

   - bpo-38237(49): The arguments for the builtin pow function are more
     descriptive.  They can now also be passed in as keywords.

   - bpo-34002(50): Improve efficiency in parts of email package by
     changing while-pop to a for loop, using isdisjoint instead of set
     intersections.

   - bpo-38191(51): Constructors of *note NamedTuple: 2b0. and *note
     TypedDict: 162. types now accept arbitrary keyword argument names,
     including “cls”, “self”, “typename”, “_typename”, “fields” and
     “_fields”.

   - bpo-38155(52): Add ‘__all__’ to *note datetime: 30.  Patch by Tahia
     Khan.

   - bpo-38185(53): Fixed case-insensitive string comparison in *note
     sqlite3.Row: ea0. indexing.

   - bpo-38136(54): Changes AsyncMock call count and await count to be
     two different counters.  Now await count only counts when a
     coroutine has been awaited, not when it has been called, and
     vice-versa.  Update the documentation around this.

   - bpo-37828(55): Fix default mock name in *note
     unittest.mock.Mock.assert_called(): d19. exceptions.  Patch by
     Abraham Toriz Cruz.

   - bpo-38175(56): Fix a memory leak in comparison of *note
     sqlite3.Row: ea0. objects.

   - bpo-33936(57): _hashlib no longer calls obsolete OpenSSL
     initialization function with OpenSSL 1.1.0+.

   - bpo-34706(58): Preserve subclassing in
     inspect.Signature.from_callable.

   - bpo-38153(59): Names of hashing algorithms from OpenSSL are now
     normalized to follow Python’s naming conventions.  For example
     OpenSSL uses sha3-512 instead of sha3_512 or blake2b512 instead of
     blake2b.

   - bpo-38115(60): Fix a bug in dis.findlinestarts() where it would
     return invalid bytecode offsets.  Document that a code object’s
     co_lnotab can contain invalid bytecode offsets.

   - bpo-38148(61): Add slots to *note asyncio: a. transport classes,
     which can reduce memory usage.

   - bpo-38142(62): The _hashlib OpenSSL wrapper extension module is now
     PEP-384 compliant.

   - bpo-9216(63): hashlib constructors now support usedforsecurity flag
     to signal that a hashing algorithm is not used in a security
     context.

   - bpo-36991(64): Fixes a potential incorrect AttributeError exception
     escaping ZipFile.extract() in some unsupported input error
     situations.

   - bpo-38134(65): Remove obsolete copy of PBKDF2_HMAC_fast.  All
     supported OpenSSL versions contain a fast implementation.

   - bpo-38132(66): The OpenSSL hashlib wrapper uses a simpler
     implementation.  Several Macros and pointless caches are gone.  The
     hash name now comes from OpenSSL’s EVP. The algorithm name stays
     the same, except it is now always lower case.

   - bpo-38008(67): Fix parent class check in protocols to correctly
     identify the module that provides a builtin protocol, instead of
     assuming they all come from the *note collections.abc: 1e. module

   - bpo-34037(68): For *note asyncio: a, add a new coroutine
     ‘loop.shutdown_default_executor()’.  The new coroutine provides an
     API to schedule an executor shutdown that waits on the threadpool
     to finish closing.  Also, *note asyncio.run(): 47c. has been
     updated to utilize the new coroutine.  Patch by Kyle Stanley.

   - bpo-37405(69): Fixed regression bug for socket.getsockname() for
     non-CAN_ISOTP AF_CAN address family sockets by returning a 1-tuple
     instead of string.

   - bpo-38121(70): Update parameter names on functions in
     importlib.metadata matching the changes in the 0.22 release of
     importlib_metadata.

   - bpo-38110(71): The os.closewalk() implementation now uses the libc
     fdwalk() API on platforms where it is available.

   - bpo-38093(72): Fixes AsyncMock so it doesn’t crash when used with
     AsyncContextManagers or AsyncIterators.

   - bpo-37488(73): Add warning to ‘datetime.utctimetuple()’,
     ‘datetime.utcnow()’ and ‘datetime.utcfromtimestamp()’ .

   - bpo-35640(74): Allow passing a *note path-like object: 2a0. as
     ‘directory’ argument to the *note
     http.server.SimpleHTTPRequestHandler: b56. class.  Patch by Géry
     Ogam.

   - bpo-38086(75): Update importlib.metadata with changes from
     importlib_metadata 0.21(76).

   - bpo-37251(77): Remove ‘__code__’ check in AsyncMock that
     incorrectly evaluated function specs as async objects but failed to
     evaluate classes with ‘__await__’ but no ‘__code__’ attribute
     defined as async objects.

   - bpo-38037(78): Fix reference counters in the *note signal: c6.
     module.

   - bpo-38066(79): Hide internal asyncio.Stream methods: feed_eof(),
     feed_data(), set_exception() and set_transport().

   - bpo-38059(80): inspect.py now uses sys.exit() instead of exit()

   - bpo-38049(81): Added command-line interface for the *note ast: 8.
     module.

   - bpo-37953(82): In *note typing: 104, improved the ‘__hash__’ and
     ‘__eq__’ methods for ‘ForwardReferences’.

   - bpo-38026(83): Fixed *note inspect.getattr_static(): 494. used
     ‘isinstance’ while it should avoid dynamic lookup.

   - bpo-35923(84): Update *note importlib.machinery.BuiltinImporter:
     ccf. to use ‘loader._ORIGIN’ instead of a hardcoded value.  Patch
     by Donghee Na.

   - bpo-38010(85): In ‘importlib.metadata’ sync with
     ‘importlib_metadata’ 0.20, clarifying behavior of ‘files()’ and
     fixing issue where only one requirement was returned for
     ‘requires()’ on ‘dist-info’ packages.

   - bpo-38006(86): weakref.WeakValueDictionary defines a local remove()
     function used as callback for weak references.  This function was
     created with a closure.  Modify the implementation to avoid the
     closure.

   - bpo-37995(87): Added the 'indent' option to *note ast.dump(): 8ea.
     which allows it to produce a multiline indented output.

   - bpo-34410(88): Fixed a crash in the ‘tee()’ iterator when re-enter
     it.  RuntimeError is now raised in this case.

   - bpo-37140(89): Fix a ctypes regression of Python 3.8.  When a
     ctypes.Structure is passed by copy to a function, ctypes internals
     created a temporary object which had the side effect of calling the
     structure finalizer (__del__) twice.  The Python semantics requires
     a finalizer to be called exactly once.  Fix ctypes internals to no
     longer call the finalizer twice.

   - bpo-37587(90): ‘_json.scanstring’ is now up to 3x faster when there
     are many backslash escaped characters in the JSON string.

   - bpo-37834(91): Prevent shutil.rmtree exception when built on
     non-Windows system without fd system call support, like older
     versions of macOS.

   - bpo-10978(92): Semaphores and BoundedSemaphores can now release
     more than one waiting thread at a time.

   - bpo-37972(93): Subscripts to the ‘unittest.mock.call’ objects now
     receive the same chaining mechanism as any other custom attributes,
     so that the following usage no longer raises a ‘TypeError’:

     ‘call().foo().__getitem__('bar')’

     Patch by blhsing

   - bpo-37965(94): Fix C compiler warning caused by
     distutils.ccompiler.CCompiler.has_function.

   - bpo-37964(95): Add ‘F_GETPATH’ command to *note fcntl: 59.

   - bpo-37960(96): ‘repr()’ of buffered and text streams now silences
     only expected exceptions when get the value of “name” and “mode”
     attributes.

   - bpo-37961(97): Add a ‘total_nframe’ field to the traces collected
     by the tracemalloc module.  This field indicates the original
     number of frames before it was truncated.

   - bpo-37951(98): Most features of the subprocess module now work
     again in subinterpreters.  Only 'preexec_fn' is restricted in
     subinterpreters.

   - bpo-36205(99): Fix the rusage implementation of time.process_time()
     to correctly report the sum of the system and user CPU time.

   - bpo-37950(100): Fix *note ast.dump(): 8ea. when call with
     incompletely initialized node.

   - bpo-34679(101): Restores instantiation of Windows IOCP event loops
     from the non-main thread.

   - bpo-36917(102): Add default implementation of the *note
     ast.NodeVisitor.visit_Constant(): a78. method which emits a
     deprecation warning and calls corresponding methods ‘visit_Num()’,
     ‘visit_Str()’, etc.

   - bpo-37798(103): Update test_statistics.py to verify that the
     statistics module works well for both C and Python implementations.
     Patch by Donghee Na

   - bpo-26589(104): Added a new status code to the http module: 451
     UNAVAILABLE_FOR_LEGAL_REASONS

   - bpo-37915(105): Fix a segmentation fault that appeared when
     comparing instances of ‘datetime.timezone’ and ‘datetime.tzinfo’
     objects.  Patch by Pablo Galindo.

   - bpo-32554(106): Deprecate having random.seed() call hash on
     arbitrary types.

   - bpo-9938(107): Add optional keyword argument ‘exit_on_error’ for
     ‘ArgumentParser’.

   - bpo-37851(108): The *note faulthandler: 58. module no longer
     allocates its alternative stack at Python startup.  Now the stack
     is only allocated at the first faulthandler usage.

   - bpo-32793(109): Fix a duplicated debug message when *note
     smtplib.SMTP.connect(): 1b41. is called.

   - bpo-37885(110): venv: Don’t generate unset variable warning on
     deactivate.

   - bpo-37868(111): Fix dataclasses.is_dataclass when given an instance
     that never raises AttributeError in __getattr__.  That is, an
     object that returns something for __dataclass_fields__ even if it’s
     not a dataclass.

   - bpo-37811(112): Fix ‘socket’ module’s ‘socket.connect(address)’
     function being unable to establish connection in case of
     interrupted system call.  The problem was observed on all OSes
     which ‘poll(2)’ system call can take only non-negative integers and
     -1 as a timeout value.

   - bpo-37863(113): Optimizations for Fraction.__hash__ suggested by
     Tim Peters.

   - bpo-21131(114): Fix ‘faulthandler.register(chain=True)’ stack.
     faulthandler now allocates a dedicated stack of ‘SIGSTKSZ*2’ bytes,
     instead of just ‘SIGSTKSZ’ bytes.  Calling the previous signal
     handler in faulthandler signal handler uses more than ‘SIGSTKSZ’
     bytes of stack memory on some platforms.

   - bpo-37798(115): Add C fastpath for statistics.NormalDist.inv_cdf()
     Patch by Donghee Na

   - bpo-37804(116): Remove the deprecated method
     ‘threading.Thread.isAlive()’.  Patch by Donghee Na.

   - bpo-37819(117): Add Fraction.as_integer_ratio() to match the
     corresponding methods in bool, int, float, and decimal.

   - bpo-14465(118): Add an xml.etree.ElementTree.indent() function for
     pretty-printing XML trees.  Contributed by Stefan Behnel.

   - bpo-37810(119): Fix *note difflib: 37. ‘?’ hint in diff output when
     dealing with tabs.  Patch by Anthony Sottile.

   - bpo-37772(120): In ‘zipfile.Path’, when adding implicit dirs,
     ensure that ancestral directories are added and that duplicates are
     excluded.

   - bpo-18578(121): Renamed and documented ‘test.bytecode_helper’ as
     ‘test.support.bytecode_helper’.  Patch by Joannah Nanjekye.

   - bpo-37785(122): Fix xgettext warnings in *note argparse: 6.

   - bpo-34488(123): ‘writelines()’ method of *note io.BytesIO: ed3. is
     now slightly faster when many small lines are passed.  Patch by
     Sergey Fedoseev.

   - bpo-37449(124): ‘ensurepip’ now uses
     ‘importlib.resources.read_binary()’ to read data instead of
     ‘pkgutil.get_data()’.  Patch by Joannah Nanjekye.

   - bpo-28292(125): Mark calendar.py helper functions as being private.
     The follows PEP 8 guidance to maintain the style conventions in the
     module and it addresses a known case of user confusion.

   - bpo-18049(126): Add definition of THREAD_STACK_SIZE for AIX in
     Python/thread_pthread.h The default thread stacksize caused crashes
     with the default recursion limit Patch by M Felt

   - bpo-37742(127): The logging.getLogger() API now returns the root
     logger when passed the name ‘root’, whereas previously it returned
     a non-root logger named ‘root’.  This could affect cases where user
     code explicitly wants a non-root logger named ‘root’, or
     instantiates a logger using logging.getLogger(__name__) in some
     top-level module called ‘root.py’.

   - bpo-37738(128): Fix the implementation of curses ‘addch(str,
     color_pair)’: pass the color pair to ‘setcchar()’, instead of
     always passing 0 as the color pair.

   - bpo-37723(129): Fix performance regression on regular expression
     parsing with huge character sets.  Patch by Yann Vaginay.

   - bpo-35943(130): The function *note PyImport_GetModule(): bcb. now
     ensures any module it returns is fully initialized.  Patch by
     Joannah Nanjekye.

   - bpo-32178(131): Fix IndexError in *note email: 3b. package when
     trying to parse invalid address fields starting with ‘:’.

   - bpo-37268(132): The ‘parser’ module is deprecated and will be
     removed in future versions of Python.

   - bpo-11953(133): Completing WSA* error codes in *note socket: cc.

   - bpo-37685(134): Fixed comparisons of *note datetime.timedelta: 9d7.
     and *note datetime.timezone: 10fe.

   - bpo-37697(135): Synchronize ‘importlib.metadata’ with
     importlib_metadata 0.19(136), improving handling of EGG-INFO files
     and fixing a crash when entry point names contained colons.

   - bpo-37695(137): Correct *note curses.unget_wch(): 10d7. error
     message.  Patch by Anthony Sottile.

   - bpo-37689(138): Add ‘is_relative_to()’ in ‘PurePath’ to determine
     whether or not one path is relative to another.

   - bpo-29553(139): Fixed *note argparse.ArgumentParser.format_usage():
     1b42. for mutually exclusive groups.  Patch by Andrew Nester.

   - bpo-37691(140): Let math.dist() accept coordinates as sequences (or
     iterables) rather than just tuples.

   - bpo-37685(141): Fixed ‘__eq__’, ‘__lt__’ etc implementations in
     some classes.  They now return *note NotImplemented: 7d3. for
     unsupported type of the other operand.  This allows the other
     operand to play role (for example the equality comparison with
     *note ANY: 1b43. will return ‘True’).

   - bpo-37354(142): Make Activate.ps1 Powershell script static to allow
     for signing it.

   - bpo-37664(143): Update wheels bundled with ensurepip (pip 19.2.3
     and setuptools 41.2.0)

   - bpo-37663(144): Bring consistency to venv shell activation scripts
     by always using __VENV_PROMPT__.

   - bpo-37642(145): Allowed the pure Python implementation of *note
     datetime.timezone: 10fe. to represent sub-minute offsets close to
     minimum and maximum boundaries, specifically in the ranges (23:59,
     24:00) and (-23:59, 24:00).  Patch by Ngalim Siregar

   - bpo-36161(146): In *note posix: ad, use ‘ttyname_r’ instead of
     ‘ttyname’ for thread safety.

   - bpo-36324(147): Make internal attributes for
     statistics.NormalDist() private.

   - bpo-37555(148): Fix ‘NonCallableMock._call_matcher’ returning tuple
     instead of ‘_Call’ object when ‘self._spec_signature’ exists.
     Patch by Elizabeth Uselton

   - bpo-29446(149): Make ‘from tkinter import *’ import only the
     expected objects.

   - bpo-16970(150): Adding a value error when an invalid value in
     passed to nargs Patch by Robert Leenders

   - bpo-34443(151): Exceptions from *note enum: 56. now use the
     ‘__qualname’ of the enum class in the exception message instead of
     the ‘__name__’.

   - bpo-37491(152): Fix ‘IndexError’ when parsing email headers with
     unexpectedly ending bare-quoted string value.  Patch by Abhilash
     Raj.

   - bpo-37587(153): Make json.loads faster for long strings.  (Patch by
     Marco Paolini)

   - bpo-18378(154): Recognize “UTF-8” as a valid value for LC_CTYPE in
     locale._parse_localename.

   - bpo-37579(155): Return *note NotImplemented: 7d3. in Python
     implementation of ‘__eq__’ for *note timedelta: 9d7. and *note
     time: 1ce. when the other object being compared is not of the same
     type to match C implementation.  Patch by Karthikeyan Singaravelan.

   - bpo-21478(156): Record calls to parent when autospecced object is
     attached to a mock using ‘unittest.mock.attach_mock()’.  Patch by
     Karthikeyan Singaravelan.

   - bpo-37531(157): “python3 -m test -jN –timeout=TIMEOUT” now kills a
     worker process if it runs longer than 'TIMEOUT' seconds.

   - bpo-37482(158): Fix serialization of display name in originator or
     destination address fields with both encoded words and special
     chars.

   - bpo-36993(159): Improve error reporting for corrupt zip files with
     bad zip64 extra data.  Patch by Daniel Hillier.

   - bpo-37502(160): pickle.loads() no longer raises TypeError when the
     buffers argument is set to None

   - bpo-37520(161): Correct behavior for zipfile.Path.parent when the
     path object identifies a subdirectory.

   - bpo-18374(162): Fix the ‘.col_offset’ attribute of nested *note
     ast.BinOp: 1b44. instances which had a too large value in some
     situations.

   - bpo-37424(163): Fixes a possible hang when using a timeout on
     ‘subprocess.run()’ while capturing output.  If the child process
     spawned its own children or otherwise connected its stdout or
     stderr handles with another process, we could hang after the
     timeout was reached and our child was killed when attempting to
     read final output from the pipes.

   - bpo-37421(164): Fix ‘multiprocessing.util.get_temp_dir()’
     finalizer: clear also the ‘tempdir’ configuration of the current
     process, so next call to ‘get_temp_dir()’ will create a new
     temporary directory, rather than reusing the removed temporary
     directory.

   - bpo-37481(165): The distutils ‘bdist_wininst’ command is deprecated
     in Python 3.8, use ‘bdist_wheel’ (wheel packages) instead.

   - bpo-37479(166): When ‘Enum.__str__’ is overridden in a derived
     class, the override will be used by ‘Enum.__format__’ regardless of
     whether mixin classes are present.

   - bpo-37440(167): http.client now enables TLS 1.3 post-handshake
     authentication for default context or if a cert_file is passed to
     HTTPSConnection.

   - bpo-37437(168): Update vendorized expat version to 2.2.7.

   - bpo-37428(169): SSLContext.post_handshake_auth = True no longer
     sets SSL_VERIFY_POST_HANDSHAKE verify flag for client connections.
     Although the option is documented as ignored for clients, OpenSSL
     implicitly enables cert chain validation when the flag is set.

   - bpo-37420(170): *note os.sched_setaffinity(): 114d. now correctly
     handles errors that arise during iteration over its ‘mask’
     argument.  Patch by Brandt Bucher.

   - bpo-37412(171): The *note os.getcwdb(): a9b. function now uses the
     UTF-8 encoding on Windows, rather than the ANSI code page: see PEP
     529(172) for the rationale.  The function is no longer deprecated
     on Windows.

   - bpo-37406(173): The sqlite3 module now raises TypeError, rather
     than ValueError, if operation argument type is not str: execute(),
     executemany() and calling a connection.

   - bpo-29412(174): Fix IndexError in parsing a header value ending
     unexpectedly.  Patch by Abhilash Raj.

   - bpo-36546(175): The 'dist' argument for statistics.quantiles() is
     now positional only.  The current name doesn’t reflect that the
     argument can be either a dataset or a distribution.  Marking the
     parameter as positional avoids confusion and makes it possible to
     change the name later.

   - bpo-37394(176): Fix a bug that was causing the *note queue: b6.
     module to fail if the accelerator module was not available.  Patch
     by Pablo Galindo.

   - bpo-37376(177): *note pprint: ae. now has support for *note
     types.SimpleNamespace: 1d1.  Patch by Carl Bordum Hansen.

   - bpo-26967(178): An *note ArgumentParser: 539. with
     ‘allow_abbrev=False’ no longer disables grouping of short flags,
     such as ‘-vv’, but only disables abbreviation of long flags as
     documented.  Patch by Zac Hatfield-Dodds.

   - bpo-37212(179): *note unittest.mock.call(): 1b45. now preserves the
     order of keyword arguments in repr output.  Patch by Karthikeyan
     Singaravelan.

   - bpo-37372(180): Fix error unpickling datetime.time objects from
     Python 2 with seconds>=24.  Patch by Justin Blanchard.

   - bpo-37345(181): Add formal support for UDPLITE sockets.  Support
     was present before, but it is now easier to detect support with
     ‘hasattr(socket, 'IPPROTO_UDPLITE')’ and there are constants
     defined for each of the values needed: ‘socket.IPPROTO_UDPLITE’,
     ‘UDPLITE_SEND_CSCOV’, and ‘UDPLITE_RECV_CSCOV’.  Patch by Gabe
     Appleton.

   - bpo-37358(182): Optimized ‘functools.partial’ by using vectorcall.

   - bpo-37347(183): *note sqlite3.Connection.create_aggregate(): 2aa,
     *note sqlite3.Connection.create_function(): 2a9, *note
     sqlite3.Connection.set_authorizer(): 2ab, *note
     sqlite3.Connection.set_progress_handler(): 2ac. *note
     sqlite3.Connection.set_trace_callback(): 2ad. methods lead to
     segfaults if some of these methods are called twice with an equal
     object but not the same.  Now callbacks are stored more carefully.
     Patch by Aleksandr Balezin.

   - bpo-37163(184): The 'obj' argument of *note dataclasses.replace():
     17ec. is positional-only now.

   - bpo-37085(185): Add the optional Linux SocketCAN Broadcast Manager
     constants, used as flags to configure the BCM behaviour, in the
     socket module.  Patch by Karl Ding.

   - bpo-37328(186): ‘HTMLParser.unescape’ is removed.  It was
     undocumented and deprecated since Python 3.4.

   - bpo-37305(187): Add .webmanifest -> application/manifest+json to
     list of recognized file types and content type headers

   - bpo-37320(188): ‘aifc.openfp()’ alias to ‘aifc.open()’,
     ‘sunau.openfp()’ alias to ‘sunau.open()’, and ‘wave.openfp()’ alias
     to ‘wave.open()’ have been removed.  They were deprecated since
     Python 3.7.

   - bpo-37315(189): Deprecated accepting floats with integral value
     (like ‘5.0’) in *note math.factorial(): 94e.

   - bpo-37312(190): ‘_dummy_thread’ and ‘dummy_threading’ modules have
     been removed.  These modules were deprecated since Python 3.7 which
     requires threading support.

   - bpo-33972(191): Email with single part but content-type set to
     ‘multipart/*’ doesn’t raise AttributeError anymore.

   - bpo-37280(192): Use threadpool for reading from file for sendfile
     fallback mode.

   - bpo-37279(193): Fix asyncio sendfile support when sendfile sends
     extra data in fallback mode.

   - bpo-19865(194): *note ctypes.create_unicode_buffer(): 1b46. now
     also supports non-BMP characters on platforms with 16-bit ‘wchar_t’
     (for example, Windows and AIX).

   - bpo-37266(195): In a subinterpreter, spawning a daemon thread now
     raises an exception.  Daemon threads were never supported in
     subinterpreters.  Previously, the subinterpreter finalization
     crashed with a Python fatal error if a daemon thread was still
     running.

   - bpo-37210(196): Allow pure Python implementation of *note pickle:
     a6. to work even when the C ‘_pickle’ module is unavailable.

   - bpo-21872(197): Fix *note lzma: 8a.: module decompresses data
     incompletely.  When decompressing a FORMAT_ALONE format file, and
     it doesn’t have the end marker, sometimes the last one to dozens
     bytes can’t be output.  Patch by Ma Lin.

   - bpo-35922(198): Fix ‘RobotFileParser.crawl_delay()’ and
     ‘RobotFileParser.request_rate()’ to return ‘None’ rather than raise
     *note AttributeError: 34b. when no relevant rule is defined in the
     robots.txt file.  Patch by Rémi Lapeyre.

   - bpo-35766(199): Change the format of feature_version to be a
     (major, minor) tuple.

   - bpo-36607(200): Eliminate *note RuntimeError: 195. raised by *note
     asyncio.all_tasks(): 95d. if internal tasks weak set is changed by
     another thread during iteration.

   - bpo-18748(201): ‘_pyio.IOBase’ destructor now does nothing if
     getting the ‘closed’ attribute fails to better mimic ‘_io.IOBase’
     finalizer.

   - bpo-36402(202): Fix a race condition at Python shutdown when
     waiting for threads.  Wait until the Python thread state of all
     non-daemon threads get deleted (join all non-daemon threads),
     rather than just wait until non-daemon Python threads complete.

   - bpo-37206(203): Default values which cannot be represented as
     Python objects no longer improperly represented as ‘None’ in
     function signatures.

   - bpo-37111(204): Added ‘encoding’ and ‘errors’ keyword parameters to
     ‘logging.basicConfig’.

   - bpo-12144(205): Ensure cookies with ‘expires’ attribute are handled
     in ‘CookieJar.make_cookies()’.

   - bpo-34886(206): Fix an unintended ValueError from *note
     subprocess.run(): b9e. when checking for conflicting 'input' and
     'stdin' or 'capture_output' and 'stdout' or 'stderr' args when they
     were explicitly provided but with ‘None’ values within a passed in
     ‘**kwargs’ dict rather than as passed directly by name.  Patch
     contributed by Rémi Lapeyre.

   - bpo-37173(207): The exception message for ‘inspect.getfile()’ now
     correctly reports the passed class rather than the builtins module.

   - bpo-37178(208): Give math.perm() a one argument form that means the
     same as math.factorial().

   - bpo-37178(209): For math.perm(n, k), let k default to n, giving the
     same result as factorial.

   - bpo-37165(210): Converted _collections._count_elements to use the
     Argument Clinic.

   - bpo-34767(211): Do not always create a *note collections.deque:
     5dc. in *note asyncio.Lock: a7b.

   - bpo-37158(212): Speed-up statistics.fmean() by switching from a
     function to a generator.

   - bpo-34282(213): Remove ‘Enum._convert’ method, deprecated in 3.8.

   - bpo-37150(214): ‘argparse._ActionsContainer.add_argument’ now
     throws error, if someone accidentally pass FileType class object
     instead of instance of FileType as ‘type’ argument.

   - bpo-28724(215): The socket module now has the *note
     socket.send_fds(): 93a. and ‘socket.recv.fds()’ methods.
     Contributed by Joannah Nanjekye, Shinya Okano and Victor Stinner.

   - bpo-35621(216): Support running asyncio subprocesses when execution
     event loop in a thread on UNIX.

   - bpo-36520(217): Lengthy email headers with UTF-8 characters are now
     properly encoded when they are folded.  Patch by Jeffrey Kintscher.

   - bpo-30835(218): Fixed a bug in email parsing where a message with
     invalid bytes in content-transfer-encoding of a multipart message
     can cause an AttributeError.  Patch by Andrew Donnellan.

   - bpo-31163(219): pathlib.Path instance’s rename and replace methods
     now return the new Path instance.

   - bpo-25068(220): *note urllib.request.ProxyHandler: 1b47. now
     lowercases the keys of the passed dictionary.

   - bpo-26185(221): Fix *note repr(): 800. on empty ‘ZipInfo’ object.
     Patch by Mickaël Schoentgen.

   - bpo-21315(222): Email headers containing RFC2047 encoded words are
     parsed despite the missing whitespace, and a defect registered.
     Also missing trailing whitespace after encoded words is now
     registered as a defect.

   - bpo-31904(223): Port test_datetime to VxWorks: skip zoneinfo tests
     on VxWorks

   - bpo-35805(224): Add parser for Message-ID header and add it to
     default HeaderRegistry.  This should prevent folding of Message-ID
     using RFC 2048 encoded words.

   - bpo-36871(225): Ensure method signature is used instead of
     constructor signature of a class while asserting mock object
     against method calls.  Patch by Karthikeyan Singaravelan.

   - bpo-35070(226): posix.getgrouplist() now works correctly when the
     user belongs to NGROUPS_MAX supplemental groups.  Patch by Jeffrey
     Kintscher.

   - bpo-31783(227): Fix race condition in ThreadPoolExecutor when
     worker threads are created during interpreter shutdown.

   - bpo-36582(228): Fix ‘UserString.encode()’ to correctly return
     ‘bytes’ rather than a ‘UserString’ instance.

   - bpo-32424(229): Deprecate xml.etree.ElementTree.Element.copy() in
     favor of copy.copy().

     Patch by Gordon P. Hemsley

   - bpo-36564(230): Fix infinite loop in email header folding logic
     that would be triggered when an email policy’s max_line_length is
     not long enough to include the required markup and any values in
     the message.  Patch by Paul Ganssle

   - bpo-36543(231): Removed methods Element.getchildren(),
     Element.getiterator() and ElementTree.getiterator() and the
     xml.etree.cElementTree module.

   - bpo-36409(232): Remove the old plistlib API deprecated in Python
     3.4

   - bpo-36302(233): distutils sorts source file lists so that Extension
     .so files build more reproducibly by default

   - bpo-36250(234): Ignore ‘ValueError’ from ‘signal’ with
     ‘interaction’ in non-main thread.

   - bpo-36046(235): Added ‘user’, ‘group’ and ‘extra_groups’ parameters
     to the subprocess.Popen constructor.  Patch by Patrick McLean.

   - bpo-32627(236): Fix compile error when ‘_uuid’ headers conflicting
     included.

   - bpo-35800(237): Deprecate ‘smtpd.MailmanProxy’ ready for future
     removal.

   - bpo-35168(238): *note shlex.shlex.punctuation_chars: 1b48. is now a
     read-only property.

   - bpo-8538(239): Add support for boolean actions like ‘--foo’ and
     ‘--no-foo’ to argparse.  Patch contributed by Rémi Lapeyre.

   - bpo-20504(240): Fixes a bug in ‘cgi’ module when a
     multipart/form-data request has no ‘Content-Length’ header.

   - bpo-25988(241): The abstract base classes in *note collections.abc:
     1e. no longer are exposed in the regular *note collections: 1d.
     module.

   - bpo-11122(242): Distutils won’t check for rpmbuild in specified
     paths only.

   - bpo-34775(243): Division handling of PurePath now returns
     NotImplemented instead of raising a TypeError when passed something
     other than an instance of str or PurePath.  Patch by Roger Aiudi.

   - bpo-34749(244): *note binascii.a2b_base64(): 1719. is now up to 2
     times faster.  Patch by Sergey Fedoseev.

   - bpo-34519(245): Add additional aliases for HP Roman 8.  Patch by
     Michael Osipov.

   - bpo-28009(246): Fix uuid.getnode() on platforms with ‘.’ as MAC
     Addr delimiter as well fix for MAC Addr format that omits a leading
     0 in MAC Addr values.  Currently, AIX is the only know platform
     with these settings.  Patch by Michael Felt.

   - bpo-30618(247): Add *note readlink(): 925.  Patch by Girts
     Folkmanis.

   - bpo-32498(248): Made *note urllib.parse.unquote(): 1883. accept
     bytes in addition to strings.  Patch by Stein Karlsen.

   - bpo-33348(249): lib2to3 now recognizes expressions after ‘*’ and
     ‘**’ like in ‘f(*[] or [])’.

   - bpo-32689(250): Update *note shutil.move(): e82. function to allow
     for Path objects to be used as source argument.  Patch by Emily
     Morehouse and Maxwell “5.13b” McKinnon.

   - bpo-32820(251): Added ‘__format__’ to IPv4 and IPv6 classes.
     Always outputs a fully zero-padded string.  Supports b/x/n
     modifiers (bin/hex/native format).  Native format for IPv4 is bin,
     native format for IPv6 is hex.  Also supports ‘#’ and ‘_’
     modifiers.

   - bpo-27657(252): Fix urllib.parse.urlparse() with numeric paths.  A
     string like “path:80” is no longer parsed as a path but as a scheme
     (“path”) and a path (“80”).

   - bpo-4963(253): Fixed non-deterministic behavior related to
     mimetypes extension mapping and module reinitialization.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36589

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38807

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38724

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38786

   (5) https://bugs.python.org/issue?@action=redirect&bpo=38785

   (6) https://bugs.python.org/issue?@action=redirect&bpo=38723

   (7) https://bugs.python.org/issue?@action=redirect&bpo=27805

   (8) https://bugs.python.org/issue?@action=redirect&bpo=38438

   (9) https://bugs.python.org/issue?@action=redirect&bpo=38761

   (10) https://bugs.python.org/issue?@action=redirect&bpo=38716

   (11) https://bugs.python.org/issue?@action=redirect&bpo=38713

   (12) https://bugs.python.org/issue?@action=redirect&bpo=38692

   (13) https://bugs.python.org/issue?@action=redirect&bpo=38692

   (14) https://bugs.python.org/issue?@action=redirect&bpo=38602

   (15) https://bugs.python.org/issue?@action=redirect&bpo=38334

   (16) https://bugs.python.org/issue?@action=redirect&bpo=38312

   (17) https://bugs.python.org/issue?@action=redirect&bpo=38586

   (18) https://bugs.python.org/issue?@action=redirect&bpo=38565

   (19) https://bugs.python.org/issue?@action=redirect&bpo=34679

   (20) https://bugs.python.org/issue?@action=redirect&bpo=31202

   (21) https://bugs.python.org/issue?@action=redirect&bpo=36321

   (22) https://bugs.python.org/issue?@action=redirect&bpo=38521

   (23) https://bugs.python.org/issue?@action=redirect&bpo=38493

   (24) https://bugs.python.org/issue?@action=redirect&bpo=38478

   (25) https://bugs.python.org/issue?@action=redirect&bpo=33604

   (26) https://bugs.python.org/issue?@action=redirect&bpo=38378

   (27) https://bugs.python.org/issue?@action=redirect&bpo=38417

   (28) https://bugs.python.org/issue?@action=redirect&bpo=38449

   (29) https://bugs.python.org/issue?@action=redirect&bpo=38431

   (30) https://bugs.python.org/issue?@action=redirect&bpo=38109

   (31) https://bugs.python.org/issue?@action=redirect&bpo=38422

   (32) https://bugs.python.org/issue?@action=redirect&bpo=38405

   (33) https://bugs.python.org/issue?@action=redirect&bpo=38332

   (34) https://bugs.python.org/issue?@action=redirect&bpo=38371

   (35) https://bugs.python.org/issue?@action=redirect&bpo=38341

   (36) https://bugs.python.org/issue?@action=redirect&bpo=38319

   (37) https://bugs.python.org/issue?@action=redirect&bpo=38242

   (38) https://bugs.python.org/issue?@action=redirect&bpo=13153

   (39) https://bugs.python.org/issue?@action=redirect&bpo=38019

   (40) https://bugs.python.org/issue?@action=redirect&bpo=38163

   (41) https://bugs.python.org/issue?@action=redirect&bpo=38161

   (42) https://bugs.python.org/issue?@action=redirect&bpo=38216

   (43) https://bugs.python.org/issue?@action=redirect&bpo=30458

   (44) https://bugs.python.org/issue?@action=redirect&bpo=28286

   (45) https://bugs.python.org/issue?@action=redirect&bpo=38108

   (46) https://bugs.python.org/issue?@action=redirect&bpo=38265

   (47) https://bugs.python.org/issue?@action=redirect&bpo=38112

   (48) https://bugs.python.org/issue?@action=redirect&bpo=38248

   (49) https://bugs.python.org/issue?@action=redirect&bpo=38237

   (50) https://bugs.python.org/issue?@action=redirect&bpo=34002

   (51) https://bugs.python.org/issue?@action=redirect&bpo=38191

   (52) https://bugs.python.org/issue?@action=redirect&bpo=38155

   (53) https://bugs.python.org/issue?@action=redirect&bpo=38185

   (54) https://bugs.python.org/issue?@action=redirect&bpo=38136

   (55) https://bugs.python.org/issue?@action=redirect&bpo=37828

   (56) https://bugs.python.org/issue?@action=redirect&bpo=38175

   (57) https://bugs.python.org/issue?@action=redirect&bpo=33936

   (58) https://bugs.python.org/issue?@action=redirect&bpo=34706

   (59) https://bugs.python.org/issue?@action=redirect&bpo=38153

   (60) https://bugs.python.org/issue?@action=redirect&bpo=38115

   (61) https://bugs.python.org/issue?@action=redirect&bpo=38148

   (62) https://bugs.python.org/issue?@action=redirect&bpo=38142

   (63) https://bugs.python.org/issue?@action=redirect&bpo=9216

   (64) https://bugs.python.org/issue?@action=redirect&bpo=36991

   (65) https://bugs.python.org/issue?@action=redirect&bpo=38134

   (66) https://bugs.python.org/issue?@action=redirect&bpo=38132

   (67) https://bugs.python.org/issue?@action=redirect&bpo=38008

   (68) https://bugs.python.org/issue?@action=redirect&bpo=34037

   (69) https://bugs.python.org/issue?@action=redirect&bpo=37405

   (70) https://bugs.python.org/issue?@action=redirect&bpo=38121

   (71) https://bugs.python.org/issue?@action=redirect&bpo=38110

   (72) https://bugs.python.org/issue?@action=redirect&bpo=38093

   (73) https://bugs.python.org/issue?@action=redirect&bpo=37488

   (74) https://bugs.python.org/issue?@action=redirect&bpo=35640

   (75) https://bugs.python.org/issue?@action=redirect&bpo=38086

   (76) 
https://gitlab.com/python-devs/importlib_metadata/blob/0.21/importlib_metadata/docs/changelog.rst

   (77) https://bugs.python.org/issue?@action=redirect&bpo=37251

   (78) https://bugs.python.org/issue?@action=redirect&bpo=38037

   (79) https://bugs.python.org/issue?@action=redirect&bpo=38066

   (80) https://bugs.python.org/issue?@action=redirect&bpo=38059

   (81) https://bugs.python.org/issue?@action=redirect&bpo=38049

   (82) https://bugs.python.org/issue?@action=redirect&bpo=37953

   (83) https://bugs.python.org/issue?@action=redirect&bpo=38026

   (84) https://bugs.python.org/issue?@action=redirect&bpo=35923

   (85) https://bugs.python.org/issue?@action=redirect&bpo=38010

   (86) https://bugs.python.org/issue?@action=redirect&bpo=38006

   (87) https://bugs.python.org/issue?@action=redirect&bpo=37995

   (88) https://bugs.python.org/issue?@action=redirect&bpo=34410

   (89) https://bugs.python.org/issue?@action=redirect&bpo=37140

   (90) https://bugs.python.org/issue?@action=redirect&bpo=37587

   (91) https://bugs.python.org/issue?@action=redirect&bpo=37834

   (92) https://bugs.python.org/issue?@action=redirect&bpo=10978

   (93) https://bugs.python.org/issue?@action=redirect&bpo=37972

   (94) https://bugs.python.org/issue?@action=redirect&bpo=37965

   (95) https://bugs.python.org/issue?@action=redirect&bpo=37964

   (96) https://bugs.python.org/issue?@action=redirect&bpo=37960

   (97) https://bugs.python.org/issue?@action=redirect&bpo=37961

   (98) https://bugs.python.org/issue?@action=redirect&bpo=37951

   (99) https://bugs.python.org/issue?@action=redirect&bpo=36205

   (100) https://bugs.python.org/issue?@action=redirect&bpo=37950

   (101) https://bugs.python.org/issue?@action=redirect&bpo=34679

   (102) https://bugs.python.org/issue?@action=redirect&bpo=36917

   (103) https://bugs.python.org/issue?@action=redirect&bpo=37798

   (104) https://bugs.python.org/issue?@action=redirect&bpo=26589

   (105) https://bugs.python.org/issue?@action=redirect&bpo=37915

   (106) https://bugs.python.org/issue?@action=redirect&bpo=32554

   (107) https://bugs.python.org/issue?@action=redirect&bpo=9938

   (108) https://bugs.python.org/issue?@action=redirect&bpo=37851

   (109) https://bugs.python.org/issue?@action=redirect&bpo=32793

   (110) https://bugs.python.org/issue?@action=redirect&bpo=37885

   (111) https://bugs.python.org/issue?@action=redirect&bpo=37868

   (112) https://bugs.python.org/issue?@action=redirect&bpo=37811

   (113) https://bugs.python.org/issue?@action=redirect&bpo=37863

   (114) https://bugs.python.org/issue?@action=redirect&bpo=21131

   (115) https://bugs.python.org/issue?@action=redirect&bpo=37798

   (116) https://bugs.python.org/issue?@action=redirect&bpo=37804

   (117) https://bugs.python.org/issue?@action=redirect&bpo=37819

   (118) https://bugs.python.org/issue?@action=redirect&bpo=14465

   (119) https://bugs.python.org/issue?@action=redirect&bpo=37810

   (120) https://bugs.python.org/issue?@action=redirect&bpo=37772

   (121) https://bugs.python.org/issue?@action=redirect&bpo=18578

   (122) https://bugs.python.org/issue?@action=redirect&bpo=37785

   (123) https://bugs.python.org/issue?@action=redirect&bpo=34488

   (124) https://bugs.python.org/issue?@action=redirect&bpo=37449

   (125) https://bugs.python.org/issue?@action=redirect&bpo=28292

   (126) https://bugs.python.org/issue?@action=redirect&bpo=18049

   (127) https://bugs.python.org/issue?@action=redirect&bpo=37742

   (128) https://bugs.python.org/issue?@action=redirect&bpo=37738

   (129) https://bugs.python.org/issue?@action=redirect&bpo=37723

   (130) https://bugs.python.org/issue?@action=redirect&bpo=35943

   (131) https://bugs.python.org/issue?@action=redirect&bpo=32178

   (132) https://bugs.python.org/issue?@action=redirect&bpo=37268

   (133) https://bugs.python.org/issue?@action=redirect&bpo=11953

   (134) https://bugs.python.org/issue?@action=redirect&bpo=37685

   (135) https://bugs.python.org/issue?@action=redirect&bpo=37697

   (136) 
https://gitlab.com/python-devs/importlib_metadata/-/milestones/20

   (137) https://bugs.python.org/issue?@action=redirect&bpo=37695

   (138) https://bugs.python.org/issue?@action=redirect&bpo=37689

   (139) https://bugs.python.org/issue?@action=redirect&bpo=29553

   (140) https://bugs.python.org/issue?@action=redirect&bpo=37691

   (141) https://bugs.python.org/issue?@action=redirect&bpo=37685

   (142) https://bugs.python.org/issue?@action=redirect&bpo=37354

   (143) https://bugs.python.org/issue?@action=redirect&bpo=37664

   (144) https://bugs.python.org/issue?@action=redirect&bpo=37663

   (145) https://bugs.python.org/issue?@action=redirect&bpo=37642

   (146) https://bugs.python.org/issue?@action=redirect&bpo=36161

   (147) https://bugs.python.org/issue?@action=redirect&bpo=36324

   (148) https://bugs.python.org/issue?@action=redirect&bpo=37555

   (149) https://bugs.python.org/issue?@action=redirect&bpo=29446

   (150) https://bugs.python.org/issue?@action=redirect&bpo=16970

   (151) https://bugs.python.org/issue?@action=redirect&bpo=34443

   (152) https://bugs.python.org/issue?@action=redirect&bpo=37491

   (153) https://bugs.python.org/issue?@action=redirect&bpo=37587

   (154) https://bugs.python.org/issue?@action=redirect&bpo=18378

   (155) https://bugs.python.org/issue?@action=redirect&bpo=37579

   (156) https://bugs.python.org/issue?@action=redirect&bpo=21478

   (157) https://bugs.python.org/issue?@action=redirect&bpo=37531

   (158) https://bugs.python.org/issue?@action=redirect&bpo=37482

   (159) https://bugs.python.org/issue?@action=redirect&bpo=36993

   (160) https://bugs.python.org/issue?@action=redirect&bpo=37502

   (161) https://bugs.python.org/issue?@action=redirect&bpo=37520

   (162) https://bugs.python.org/issue?@action=redirect&bpo=18374

   (163) https://bugs.python.org/issue?@action=redirect&bpo=37424

   (164) https://bugs.python.org/issue?@action=redirect&bpo=37421

   (165) https://bugs.python.org/issue?@action=redirect&bpo=37481

   (166) https://bugs.python.org/issue?@action=redirect&bpo=37479

   (167) https://bugs.python.org/issue?@action=redirect&bpo=37440

   (168) https://bugs.python.org/issue?@action=redirect&bpo=37437

   (169) https://bugs.python.org/issue?@action=redirect&bpo=37428

   (170) https://bugs.python.org/issue?@action=redirect&bpo=37420

   (171) https://bugs.python.org/issue?@action=redirect&bpo=37412

   (172) https://peps.python.org/pep-0529/

   (173) https://bugs.python.org/issue?@action=redirect&bpo=37406

   (174) https://bugs.python.org/issue?@action=redirect&bpo=29412

   (175) https://bugs.python.org/issue?@action=redirect&bpo=36546

   (176) https://bugs.python.org/issue?@action=redirect&bpo=37394

   (177) https://bugs.python.org/issue?@action=redirect&bpo=37376

   (178) https://bugs.python.org/issue?@action=redirect&bpo=26967

   (179) https://bugs.python.org/issue?@action=redirect&bpo=37212

   (180) https://bugs.python.org/issue?@action=redirect&bpo=37372

   (181) https://bugs.python.org/issue?@action=redirect&bpo=37345

   (182) https://bugs.python.org/issue?@action=redirect&bpo=37358

   (183) https://bugs.python.org/issue?@action=redirect&bpo=37347

   (184) https://bugs.python.org/issue?@action=redirect&bpo=37163

   (185) https://bugs.python.org/issue?@action=redirect&bpo=37085

   (186) https://bugs.python.org/issue?@action=redirect&bpo=37328

   (187) https://bugs.python.org/issue?@action=redirect&bpo=37305

   (188) https://bugs.python.org/issue?@action=redirect&bpo=37320

   (189) https://bugs.python.org/issue?@action=redirect&bpo=37315

   (190) https://bugs.python.org/issue?@action=redirect&bpo=37312

   (191) https://bugs.python.org/issue?@action=redirect&bpo=33972

   (192) https://bugs.python.org/issue?@action=redirect&bpo=37280

   (193) https://bugs.python.org/issue?@action=redirect&bpo=37279

   (194) https://bugs.python.org/issue?@action=redirect&bpo=19865

   (195) https://bugs.python.org/issue?@action=redirect&bpo=37266

   (196) https://bugs.python.org/issue?@action=redirect&bpo=37210

   (197) https://bugs.python.org/issue?@action=redirect&bpo=21872

   (198) https://bugs.python.org/issue?@action=redirect&bpo=35922

   (199) https://bugs.python.org/issue?@action=redirect&bpo=35766

   (200) https://bugs.python.org/issue?@action=redirect&bpo=36607

   (201) https://bugs.python.org/issue?@action=redirect&bpo=18748

   (202) https://bugs.python.org/issue?@action=redirect&bpo=36402

   (203) https://bugs.python.org/issue?@action=redirect&bpo=37206

   (204) https://bugs.python.org/issue?@action=redirect&bpo=37111

   (205) https://bugs.python.org/issue?@action=redirect&bpo=12144

   (206) https://bugs.python.org/issue?@action=redirect&bpo=34886

   (207) https://bugs.python.org/issue?@action=redirect&bpo=37173

   (208) https://bugs.python.org/issue?@action=redirect&bpo=37178

   (209) https://bugs.python.org/issue?@action=redirect&bpo=37178

   (210) https://bugs.python.org/issue?@action=redirect&bpo=37165

   (211) https://bugs.python.org/issue?@action=redirect&bpo=34767

   (212) https://bugs.python.org/issue?@action=redirect&bpo=37158

   (213) https://bugs.python.org/issue?@action=redirect&bpo=34282

   (214) https://bugs.python.org/issue?@action=redirect&bpo=37150

   (215) https://bugs.python.org/issue?@action=redirect&bpo=28724

   (216) https://bugs.python.org/issue?@action=redirect&bpo=35621

   (217) https://bugs.python.org/issue?@action=redirect&bpo=36520

   (218) https://bugs.python.org/issue?@action=redirect&bpo=30835

   (219) https://bugs.python.org/issue?@action=redirect&bpo=31163

   (220) https://bugs.python.org/issue?@action=redirect&bpo=25068

   (221) https://bugs.python.org/issue?@action=redirect&bpo=26185

   (222) https://bugs.python.org/issue?@action=redirect&bpo=21315

   (223) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (224) https://bugs.python.org/issue?@action=redirect&bpo=35805

   (225) https://bugs.python.org/issue?@action=redirect&bpo=36871

   (226) https://bugs.python.org/issue?@action=redirect&bpo=35070

   (227) https://bugs.python.org/issue?@action=redirect&bpo=31783

   (228) https://bugs.python.org/issue?@action=redirect&bpo=36582

   (229) https://bugs.python.org/issue?@action=redirect&bpo=32424

   (230) https://bugs.python.org/issue?@action=redirect&bpo=36564

   (231) https://bugs.python.org/issue?@action=redirect&bpo=36543

   (232) https://bugs.python.org/issue?@action=redirect&bpo=36409

   (233) https://bugs.python.org/issue?@action=redirect&bpo=36302

   (234) https://bugs.python.org/issue?@action=redirect&bpo=36250

   (235) https://bugs.python.org/issue?@action=redirect&bpo=36046

   (236) https://bugs.python.org/issue?@action=redirect&bpo=32627

   (237) https://bugs.python.org/issue?@action=redirect&bpo=35800

   (238) https://bugs.python.org/issue?@action=redirect&bpo=35168

   (239) https://bugs.python.org/issue?@action=redirect&bpo=8538

   (240) https://bugs.python.org/issue?@action=redirect&bpo=20504

   (241) https://bugs.python.org/issue?@action=redirect&bpo=25988

   (242) https://bugs.python.org/issue?@action=redirect&bpo=11122

   (243) https://bugs.python.org/issue?@action=redirect&bpo=34775

   (244) https://bugs.python.org/issue?@action=redirect&bpo=34749

   (245) https://bugs.python.org/issue?@action=redirect&bpo=34519

   (246) https://bugs.python.org/issue?@action=redirect&bpo=28009

   (247) https://bugs.python.org/issue?@action=redirect&bpo=30618

   (248) https://bugs.python.org/issue?@action=redirect&bpo=32498

   (249) https://bugs.python.org/issue?@action=redirect&bpo=33348

   (250) https://bugs.python.org/issue?@action=redirect&bpo=32689

   (251) https://bugs.python.org/issue?@action=redirect&bpo=32820

   (252) https://bugs.python.org/issue?@action=redirect&bpo=27657

   (253) https://bugs.python.org/issue?@action=redirect&bpo=4963


File: python.info,  Node: Documentação<47>,  Next: Testes<50>,  Prev: Biblioteca<132>,  Up: Python 3 9 0 alpha 1

1.23.57.4 Documentação
......................

   - bpo-21767(1): Explicitly mention abc support in
     functools.singledispatch

   - bpo-38816(2): Provides more details about the interaction between
     ‘fork()’ and CPython’s runtime, focusing just on the C-API. This
     includes cautions about where ‘fork()’ should and shouldn’t be
     called.

   - bpo-38351(3): Modernize *note email: 3b. examples from %-formatting
     to f-strings.

   - bpo-38778(4): Document the fact that *note RuntimeError: 195. is
     raised if *note os.fork(): 197. is called in a subinterpreter.

   - bpo-38592(5): Add Brazilian Portuguese to the language switcher at
     Python Documentation website.

   - bpo-38294(6): Add list of no-longer-escaped chars to re.escape
     documentation

   - bpo-38053(7): Modernized the plistlib documentation

   - bpo-26868(8): Fix example usage of *note PyModule_AddObject(): 366.
     to properly handle errors.

   - bpo-36797(9): Fix a dead link in the distutils API Reference.

   - bpo-37977(10): Warn more strongly and clearly about pickle
     insecurity

   - bpo-37979(11): Added a link to dateutil.parser.isoparse in the
     datetime.fromisoformat documentation.  Patch by Paul Ganssle

   - bpo-12707(12): Deprecate info(), geturl(), getcode() methods in
     favor of the headers, url, and status properties, respectively, for
     HTTPResponse and addinfourl.  Also deprecate the code attribute of
     addinfourl in favor of the status attribute.  Patch by Ashwin
     Ramaswami

   - bpo-37937(13): Mention ‘frame.f_trace’ in *note sys.settrace():
     1547. docs.

   - bpo-37878(14): Make *note PyThreadState_DeleteCurrent(): 1b4a.
     Internal.

   - bpo-37759(15): Beginning edits to Whatsnew 3.8

   - bpo-37726(16): Stop recommending getopt in the tutorial for command
     line argument parsing and promote argparse.

   - bpo-32910(17): Remove implementation-specific behaviour of how
     venv’s Deactivate works.

   - bpo-37256(18): Fix wording of arguments for ‘Request’ in *note
     urllib.request: 10b.

   - bpo-37284(19): Add a brief note to indicate that any new
     ‘sys.implementation’ required attributes must go through the PEP
     process.

   - bpo-30088(20): Documented that *note mailbox.Maildir: 41c.
     constructor doesn’t attempt to verify the maildir folder layout
     correctness.  Patch by Sviatoslav Sydorenko.

   - bpo-37521(21): Fix ‘importlib’ examples to insert any newly created
     modules via importlib.util.module_from_spec() immediately into
     sys.modules instead of after calling loader.exec_module().

     Thanks to Benjamin Mintz for finding the bug.

   - bpo-37456(22): Slash (‘/’) is now part of syntax.

   - bpo-37487(23): Fix PyList_GetItem index description to include 0.

   - bpo-37149(24): Replace the dead link to the Tkinter 8.5 reference
     by John Shipman, New Mexico Tech, with a link to the archive.org
     copy.

   - bpo-37478(25): Added possible exceptions to the description of
     os.chdir().

   - bpo-34903(26): Documented that in *note
     datetime.datetime.strptime(): 16f6, the leading zero in some
     two-digit formats is optional.  Patch by Mike Gleen.

   - bpo-36260(27): Add decompression pitfalls to zipfile module
     documentation.

   - bpo-37004(28): In the documentation for difflib, a note was added
     explicitly warning that the results of SequenceMatcher’s ratio
     method may depend on the order of the input strings.

   - bpo-36960(29): Restructured the *note datetime: 30. docs in the
     interest of making them more user-friendly and improving
     readability.  Patch by Brad Solomon.

   - bpo-36487(30): Make C-API docs clear about what the “main”
     interpreter is.

   - bpo-23460(31): The documentation for decimal string formatting
     using the ‘:g’ specifier has been updated to reflect the correct
     exponential notation cutoff point.  Original patch contributed by
     Tuomas Suutari.

   - bpo-35803(32): Document and test that ‘tempfile’ functions may
     accept a *note path-like object: 2a0. for the ‘dir’ argument.
     Patch by Anthony Sottile.

   - bpo-33944(33): Added a note about the intended use of code in .pth
     files.

   - bpo-34293(34): Fix the Doc/Makefile regarding PAPER environment
     variable and PDF builds

   - bpo-25237(35): Add documentation for tkinter modules

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21767

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38816

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38351

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38778

   (5) https://bugs.python.org/issue?@action=redirect&bpo=38592

   (6) https://bugs.python.org/issue?@action=redirect&bpo=38294

   (7) https://bugs.python.org/issue?@action=redirect&bpo=38053

   (8) https://bugs.python.org/issue?@action=redirect&bpo=26868

   (9) https://bugs.python.org/issue?@action=redirect&bpo=36797

   (10) https://bugs.python.org/issue?@action=redirect&bpo=37977

   (11) https://bugs.python.org/issue?@action=redirect&bpo=37979

   (12) https://bugs.python.org/issue?@action=redirect&bpo=12707

   (13) https://bugs.python.org/issue?@action=redirect&bpo=37937

   (14) https://bugs.python.org/issue?@action=redirect&bpo=37878

   (15) https://bugs.python.org/issue?@action=redirect&bpo=37759

   (16) https://bugs.python.org/issue?@action=redirect&bpo=37726

   (17) https://bugs.python.org/issue?@action=redirect&bpo=32910

   (18) https://bugs.python.org/issue?@action=redirect&bpo=37256

   (19) https://bugs.python.org/issue?@action=redirect&bpo=37284

   (20) https://bugs.python.org/issue?@action=redirect&bpo=30088

   (21) https://bugs.python.org/issue?@action=redirect&bpo=37521

   (22) https://bugs.python.org/issue?@action=redirect&bpo=37456

   (23) https://bugs.python.org/issue?@action=redirect&bpo=37487

   (24) https://bugs.python.org/issue?@action=redirect&bpo=37149

   (25) https://bugs.python.org/issue?@action=redirect&bpo=37478

   (26) https://bugs.python.org/issue?@action=redirect&bpo=34903

   (27) https://bugs.python.org/issue?@action=redirect&bpo=36260

   (28) https://bugs.python.org/issue?@action=redirect&bpo=37004

   (29) https://bugs.python.org/issue?@action=redirect&bpo=36960

   (30) https://bugs.python.org/issue?@action=redirect&bpo=36487

   (31) https://bugs.python.org/issue?@action=redirect&bpo=23460

   (32) https://bugs.python.org/issue?@action=redirect&bpo=35803

   (33) https://bugs.python.org/issue?@action=redirect&bpo=33944

   (34) https://bugs.python.org/issue?@action=redirect&bpo=34293

   (35) https://bugs.python.org/issue?@action=redirect&bpo=25237


File: python.info,  Node: Testes<50>,  Next: Construção<55>,  Prev: Documentação<47>,  Up: Python 3 9 0 alpha 1

1.23.57.5 Testes
................

   - bpo-38614(1): Fix test_communicate() of
     test_asyncio.test_subprocess: use ‘support.LONG_TIMEOUT’ (5
     minutes), instead of just 1 minute.

   - bpo-38614(2): Add timeout constants to *note test.support: e4.:
     *note LOOPBACK_TIMEOUT: 1b2b, *note INTERNET_TIMEOUT: 1b2c, *note
     SHORT_TIMEOUT: 19ee. and *note LONG_TIMEOUT: 1b2d.

   - bpo-38502(3): test.regrtest now uses process groups in the
     multiprocessing mode (-jN command line option) if process groups
     are available: if *note os.setsid(): 1b4c. and *note os.killpg():
     1b4d. functions are available.

   - bpo-35998(4): Fix a race condition in
     test_asyncio.test_start_tls_server_1().  Previously, there was a
     race condition between the test main() function which replaces the
     protocol and the test ServerProto protocol which sends ANSWER once
     it gets HELLO. Now, only the test main() function is responsible to
     send data, ServerProto no longer sends data.

   - bpo-38470(5): Fix ‘test_compileall.test_compile_dir_maxlevels()’ on
     Windows without long path support: only create 3 subdirectories
     instead of between 20 and 100 subdirectories.

   - bpo-37531(6): On timeout, regrtest no longer attempts to call
     ‘popen.communicate()’ again: it can hang until all child processes
     using stdout and stderr pipes completes.  Kill the worker process
     and ignores its output.  Change also the faulthandler timeout of
     the main process from 1 minute to 5 minutes, for Python slowest
     buildbots.

   - bpo-38239(7): Fix test_gdb for Link Time Optimization (LTO) builds.

   - bpo-38275(8): test_ssl now handles disabled TLS/SSL versions
     better.  OpenSSL’s crypto policy and run-time settings are
     recognized and tests for disabled versions are skipped.  Tests also
     accept more TLS minimum_versions for platforms that override
     OpenSSL’s default with strict settings.

   - bpo-38271(9): The private keys for test_ssl were encrypted with
     3DES in traditional PKCS#5 format.  3DES and the digest algorithm
     of PKCS#5 are blocked by some strict crypto policies.  Use PKCS#8
     format with AES256 encryption instead.

   - bpo-38270(10): test.support now has a helper function to check for
     availability of a hash digest function.  Several tests are
     refactored avoid MD5 and use SHA256 instead.  Other tests are
     marked to use MD5 and skipped when MD5 is disabled.

   - bpo-37123(11): Multiprocessing test test_mymanager() now also
     expects -SIGTERM, not only exitcode 0.
     BaseManager._finalize_manager() sends SIGTERM to the manager
     process if it takes longer than 1 second to stop, which happens on
     slow buildbots.

   - bpo-38212(12): Multiprocessing tests: increase
     test_queue_feeder_donot_stop_onexc() timeout from 1 to 60 seconds.

   - bpo-38117(13): Test with OpenSSL 1.1.1d

   - bpo-38018(14): Increase code coverage for
     multiprocessing.shared_memory.

   - bpo-37805(15): Add tests for json.dump(…, skipkeys=True).  Patch by
     Donghee Na.

   - bpo-37531(16): Enhance regrtest multiprocess timeout: write a
     message when killing a worker process, catch popen.kill() and
     popen.wait() exceptions, put a timeout on the second call to
     popen.communicate().

   - bpo-37876(17): Add tests for ROT-13 codec.

   - bpo-36833(18): Added tests for ‘PyDateTime_XXX_GET_XXX()’ macros of
     the C API of the *note datetime: 30. module.  Patch by Joannah
     Nanjekye.

   - bpo-37558(19): Fix
     test_shared_memory_cleaned_after_process_termination name handling

   - bpo-37526(20): Add ‘test.support.catch_threading_exception()’:
     context manager catching *note threading.Thread: 953. exception
     using *note threading.excepthook(): 84e.

   - bpo-37421(21): test_concurrent_futures now explicitly stops the
     ForkServer instance if it’s running.

   - bpo-37421(22): multiprocessing tests now stop the ForkServer
     instance if it’s running: close the “alive” file descriptor to ask
     the server to stop and then remove its UNIX address.

   - bpo-37421(23): test_distutils.test_build_ext() is now able to
     remove the temporary directory on Windows: don’t import the newly
     built C extension (“xx”) in the current process, but test it in a
     separated process.

   - bpo-37421(24): test_concurrent_futures now cleans up
     multiprocessing to remove immediately temporary directories created
     by multiprocessing.util.get_temp_dir().

   - bpo-37421(25): test_winconsoleio doesn’t leak a temporary file
     anymore: use tempfile.TemporaryFile() to remove it when the test
     completes.

   - bpo-37421(26): multiprocessing tests now explicitly call
     ‘_run_finalizers()’ to immediately remove temporary directories
     created by tests.

   - bpo-37421(27): urllib.request tests now call *note urlcleanup():
     1b4e. to remove temporary files created by ‘urlretrieve()’ tests
     and to clear the ‘_opener’ global variable set by ‘urlopen()’ and
     functions calling indirectly ‘urlopen()’.

   - bpo-37472(28): Remove ‘Lib/test/outstanding_bugs.py’.

   - bpo-37199(29): Fix test failures when IPv6 is unavailable or
     disabled.

   - bpo-19696(30): Replace deprecated method “random.choose” with
     “random.choice” in “test_pkg_import.py”.

   - bpo-37335(31): Remove no longer necessary code from c locale
     coercion tests

   - bpo-37421(32): Fix test_shutil to no longer leak temporary files.

   - bpo-37411(33): Fix test_wsgiref.testEnviron() to no longer depend
     on the environment variables (don’t fail if “X” variable is set).

   - bpo-37400(34): Fix test_os.test_chown(): use os.getgroups() rather
     than grp.getgrall() to get groups.  Rename also the test to
     test_chown_gid().

   - bpo-37359(35): Add –cleanup option to python3 -m test to remove
     ‘test_python_*’ directories of previous failed jobs.  Add “make
     cleantest” to run ‘python3 -m test --cleanup’.

   - bpo-37362(36): test_gdb no longer fails if it gets an “unexpected”
     message on stderr: it now ignores stderr.  The purpose of test_gdb
     is to test that python-gdb.py commands work as expected, not to
     test gdb.

   - bpo-35998(37): Avoid TimeoutError in test_asyncio:
     test_start_tls_server_1()

   - bpo-37278(38): Fix test_asyncio ProactorLoopCtrlC: join the thread
     to prevent leaking a running thread and leaking a reference.

   - bpo-37261(39): Fix *note test.support.catch_unraisable_exception():
     1b4f.: its __exit__() method now ignores unraisable exception
     raised when clearing its ‘unraisable’ attribute.

   - bpo-37069(40): regrtest now uses *note sys.unraisablehook(): 1f7.
     to mark a test as “environment altered” (ENV_CHANGED) if it emits
     an “unraisable exception”.  Moreover, regrtest logs a warning in
     this case.

     Use ‘python3 -m test --fail-env-changed’ to catch unraisable
     exceptions in tests.

   - bpo-37252(41): Fix assertions in ‘test_close’ and
     ‘test_events_mask_overflow’ devpoll tests.

   - bpo-37169(42): Rewrite ‘_PyObject_IsFreed()’ unit tests.

   - bpo-37153(43): ‘test_venv.test_multiprocessing()’ now explicitly
     calls ‘pool.terminate()’ to wait until the pool completes.

   - bpo-34001(44): Make test_ssl pass with LibreSSL. LibreSSL handles
     minimum and maximum TLS version differently than OpenSSL.

   - bpo-36919(45): Make ‘test_source_encoding.test_issue2301’
     implementation independent.  The test will work now for both
     CPython and IronPython.

   - bpo-30202(46): Update ‘test.test_importlib.test_abc’ to test
     ‘find_spec()’.

   - bpo-28009(47): Modify the test_uuid logic to test when a program is
     available AND can be used to obtain a MACADDR as basis for an UUID.
     Patch by M. Felt

   - bpo-34596(48): Fallback to a default reason when *note
     unittest.skip(): 1b50. is uncalled.  Patch by Naitree Zhu.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38614

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38614

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38502

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35998

   (5) https://bugs.python.org/issue?@action=redirect&bpo=38470

   (6) https://bugs.python.org/issue?@action=redirect&bpo=37531

   (7) https://bugs.python.org/issue?@action=redirect&bpo=38239

   (8) https://bugs.python.org/issue?@action=redirect&bpo=38275

   (9) https://bugs.python.org/issue?@action=redirect&bpo=38271

   (10) https://bugs.python.org/issue?@action=redirect&bpo=38270

   (11) https://bugs.python.org/issue?@action=redirect&bpo=37123

   (12) https://bugs.python.org/issue?@action=redirect&bpo=38212

   (13) https://bugs.python.org/issue?@action=redirect&bpo=38117

   (14) https://bugs.python.org/issue?@action=redirect&bpo=38018

   (15) https://bugs.python.org/issue?@action=redirect&bpo=37805

   (16) https://bugs.python.org/issue?@action=redirect&bpo=37531

   (17) https://bugs.python.org/issue?@action=redirect&bpo=37876

   (18) https://bugs.python.org/issue?@action=redirect&bpo=36833

   (19) https://bugs.python.org/issue?@action=redirect&bpo=37558

   (20) https://bugs.python.org/issue?@action=redirect&bpo=37526

   (21) https://bugs.python.org/issue?@action=redirect&bpo=37421

   (22) https://bugs.python.org/issue?@action=redirect&bpo=37421

   (23) https://bugs.python.org/issue?@action=redirect&bpo=37421

   (24) https://bugs.python.org/issue?@action=redirect&bpo=37421

   (25) https://bugs.python.org/issue?@action=redirect&bpo=37421

   (26) https://bugs.python.org/issue?@action=redirect&bpo=37421

   (27) https://bugs.python.org/issue?@action=redirect&bpo=37421

   (28) https://bugs.python.org/issue?@action=redirect&bpo=37472

   (29) https://bugs.python.org/issue?@action=redirect&bpo=37199

   (30) https://bugs.python.org/issue?@action=redirect&bpo=19696

   (31) https://bugs.python.org/issue?@action=redirect&bpo=37335

   (32) https://bugs.python.org/issue?@action=redirect&bpo=37421

   (33) https://bugs.python.org/issue?@action=redirect&bpo=37411

   (34) https://bugs.python.org/issue?@action=redirect&bpo=37400

   (35) https://bugs.python.org/issue?@action=redirect&bpo=37359

   (36) https://bugs.python.org/issue?@action=redirect&bpo=37362

   (37) https://bugs.python.org/issue?@action=redirect&bpo=35998

   (38) https://bugs.python.org/issue?@action=redirect&bpo=37278

   (39) https://bugs.python.org/issue?@action=redirect&bpo=37261

   (40) https://bugs.python.org/issue?@action=redirect&bpo=37069

   (41) https://bugs.python.org/issue?@action=redirect&bpo=37252

   (42) https://bugs.python.org/issue?@action=redirect&bpo=37169

   (43) https://bugs.python.org/issue?@action=redirect&bpo=37153

   (44) https://bugs.python.org/issue?@action=redirect&bpo=34001

   (45) https://bugs.python.org/issue?@action=redirect&bpo=36919

   (46) https://bugs.python.org/issue?@action=redirect&bpo=30202

   (47) https://bugs.python.org/issue?@action=redirect&bpo=28009

   (48) https://bugs.python.org/issue?@action=redirect&bpo=34596


File: python.info,  Node: Construção<55>,  Next: Windows<47>,  Prev: Testes<50>,  Up: Python 3 9 0 alpha 1

1.23.57.6 Construção
....................

   - bpo-38809(1): On Windows, build scripts will now recognize and use
     python.exe from an active virtual env.

   - bpo-38684(2): Fix _hashlib build when Blake2 is disabled, but
     OpenSSL supports it.

   - bpo-38468(3): Misc/python-config.in now uses ‘getvar()’ for all
     still existing ‘sysconfig.get_config_var()’ calls.  Patch by
     Joannah Nanjekye.

   - bpo-37415(4): Fix stdatomic.h header check for ICC compiler: the
     ICC implementation lacks atomic_uintptr_t type which is needed by
     Python.

   - bpo-38301(5): In Solaris family, we must be sure to use
     ‘-D_REENTRANT’.  Patch by Jesús Cea Avión.

   - bpo-36002(6): Locate ‘llvm-profdata’ and ‘llvm-ar’ binaries using
     ‘AC_PATH_TOOL’ rather than ‘AC_PATH_TARGET_TOOL’.

   - bpo-37936(7): The ‘.gitignore’ file systematically keeps “rooted”,
     with a non-trailing slash, all the rules that are meant to apply to
     files in a specific place in the repo.  Previously, when the
     intended file to ignore happened to be at the root of the repo,
     we’d most often accidentally also ignore files and directories with
     the same name anywhere in the tree.

   - bpo-37760(8): The ‘Tools/unicode/makeunicodedata.py’ script, which
     is used for converting information from the Unicode Character
     Database into generated code and data used by the methods of *note
     str: 44c. and by the *note unicodedata: 105. module, now handles
     each character’s data as a ‘dataclass’ with named attributes,
     rather than a length-18 list of different fields.

   - bpo-37936(9): The ‘.gitignore’ file no longer applies to any files
     that are in fact tracked in the Git repository.  Patch by Greg
     Price.

   - bpo-37725(10): Change “clean” makefile target to also clean the
     program guided optimization (PGO) data.  Previously you would have
     to use “make clean” and “make profile-removal”, or “make clobber”.

   - bpo-37707(11): Mark some individual tests to skip when –pgo is
     used.  The tests marked increase the PGO task time significantly
     and likely don’t help improve optimization of the final executable.

   - bpo-36044(12): Reduce the number of unit tests run for the PGO
     generation task.  This speeds up the task by a factor of about 15x.
     Running the full unit test suite is slow.  This change may result
     in a slightly less optimized build since not as many code branches
     will be executed.  If you are willing to wait for the much slower
     build, the old behavior can be restored using ‘./configure [..]
     PROFILE_TASK=”-m test –pgo-extended”’.  We make no guarantees as to
     which PGO task set produces a faster build.  Users who care should
     run their own relevant benchmarks as results can depend on the
     environment, workload, and compiler tool chain.

   - bpo-37468(13): ‘make install’ no longer installs ‘wininst-*.exe’
     files used by distutils bdist_wininst: bdist_wininst only works on
     Windows.

   - bpo-37189(14): Many ‘PyRun_XXX()’ functions like *note
     PyRun_String(): 1b52. were no longer exported in ‘libpython38.dll’
     by mistake.  Export them again to fix the ABI compatibility.

   - bpo-25361(15): Enables use of SSE2 instructions in Windows 32-bit
     build.

   - bpo-36210(16): Update optional extension module detection for AIX.
     ossaudiodev and spwd are not applicable for AIX, and are no longer
     reported as missing.  3rd-party packaging of ncurses (with ASIS
     support) conflicts with officially supported AIX curses library, so
     configure AIX to use libcurses.a.  However, skip trying to build
     _curses_panel.

     patch by M Felt

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38809

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38684

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38468

   (4) https://bugs.python.org/issue?@action=redirect&bpo=37415

   (5) https://bugs.python.org/issue?@action=redirect&bpo=38301

   (6) https://bugs.python.org/issue?@action=redirect&bpo=36002

   (7) https://bugs.python.org/issue?@action=redirect&bpo=37936

   (8) https://bugs.python.org/issue?@action=redirect&bpo=37760

   (9) https://bugs.python.org/issue?@action=redirect&bpo=37936

   (10) https://bugs.python.org/issue?@action=redirect&bpo=37725

   (11) https://bugs.python.org/issue?@action=redirect&bpo=37707

   (12) https://bugs.python.org/issue?@action=redirect&bpo=36044

   (13) https://bugs.python.org/issue?@action=redirect&bpo=37468

   (14) https://bugs.python.org/issue?@action=redirect&bpo=37189

   (15) https://bugs.python.org/issue?@action=redirect&bpo=25361

   (16) https://bugs.python.org/issue?@action=redirect&bpo=36210


File: python.info,  Node: Windows<47>,  Next: macOS<38>,  Prev: Construção<55>,  Up: Python 3 9 0 alpha 1

1.23.57.7 Windows
.................

   - bpo-38589(1): Fixes HTML Help shortcut when Windows is not
     installed to C drive

   - bpo-38453(2): Ensure ntpath.realpath() correctly resolves relative
     paths.

   - bpo-38519(3): Restores the internal C headers that were missing
     from the nuget.org and Microsoft Store packages.

   - bpo-38492(4): Remove ‘pythonw.exe’ dependency on the Microsoft C++
     runtime.

   - bpo-38344(5): Fix error message in activate.bat

   - bpo-38359(6): Ensures ‘pyw.exe’ launcher reads correct registry
     key.

   - bpo-38355(7): Fixes ‘ntpath.realpath’ failing on ‘sys.executable’.

   - bpo-38117(8): Update bundled OpenSSL to 1.1.1d

   - bpo-38092(9): Reduce overhead when using multiprocessing in a
     Windows virtual environment.

   - bpo-38133(10): Allow py.exe launcher to locate installations from
     the Microsoft Store and improve display of active virtual
     environments.

   - bpo-38114(11): The ‘pip.ini’ is no longer included in the Nuget
     package.

   - bpo-32592(12): Set Windows 8 as the minimum required version for
     API support

   - bpo-36634(13): *note os.cpu_count(): 1c5. now returns active
     processors rather than maximum processors.

   - bpo-36634(14): venv activate.bat now works when the existing
     variables contain double quote characters.

   - bpo-38081(15): Prevent error calling *note os.path.realpath(): 225.
     on ‘'NUL'’.

   - bpo-38087(16): Fix case sensitivity in test_pathlib and
     test_ntpath.

   - bpo-38088(17): Fixes distutils not finding vcruntime140.dll with
     only the v142 toolset installed.

   - bpo-37283(18): Ensure command-line and unattend.xml setting
     override previously detected states in Windows installer.

   - bpo-38030(19): Fixes *note os.stat(): 4a0. failing for block
     devices on Windows

   - bpo-38020(20): Fixes potential crash when calling *note
     os.readlink(): 926. (or indirectly through *note realpath(): 225.)
     on a file that is not a supported link.

   - bpo-37705(21): Improve the implementation of ‘winerror_to_errno()’.

   - bpo-37549(22): *note os.dup(): 1b54. no longer fails for standard
     streams on Windows 7.

   - bpo-1311(23): The ‘nul’ file on Windows now returns True from *note
     exists(): a18. and a valid result from *note os.stat(): 4a0. with
     ‘S_IFCHR’ set.

   - bpo-9949(24): Enable support for following symlinks in
     ‘os.realpath()’.

   - bpo-37834(25): Treat all name surrogate reparse points on Windows
     in *note os.lstat(): 4a1. and other reparse points as regular files
     in *note os.stat(): 4a0.

   - bpo-36266(26): Add the module name in the formatted error message
     when DLL load fail happens during module import in
     ‘_PyImport_FindSharedFuncptrWindows()’.  Patch by Srinivas
     Nyayapati.

   - bpo-25172(27): Trying to import the ‘crypt’ module on Windows will
     result in an *note ImportError: 419. with a message explaining that
     the module isn’t supported on Windows.  On other platforms, if the
     underlying ‘_crypt’ module is not available, the ImportError will
     include a message explaining the problem.

   - bpo-37778(28): Fixes the icons used for file associations to the
     Microsoft Store package.

   - bpo-37734(29): Fix use of registry values to launch Python from
     Microsoft Store app.

   - bpo-37702(30): Fix memory leak on Windows in creating an SSLContext
     object or running ‘urllib.request.urlopen('https://...')’.

   - bpo-37672(31): Switch Windows Store package’s pip to use bundled
     ‘pip.ini’ instead of ‘PIP_USER’ variable.

   - bpo-10945(32): Officially drop support for creating bdist_wininst
     installers on non-Windows systems.

   - bpo-37445(33): Include the ‘FORMAT_MESSAGE_IGNORE_INSERTS’ flag in
     ‘FormatMessageW()’ calls.

   - bpo-37369(34): Fixes path for *note sys.executable: 3b8. when
     running from the Microsoft Store.

   - bpo-37380(35): Don’t collect unfinished processes with
     ‘subprocess._active’ on Windows to cleanup later.  Patch by Ruslan
     Kuprieiev.

   - bpo-37351(36): Removes libpython38.a from standard Windows
     distribution.

   - bpo-35360(37): Update Windows builds to use SQLite 3.28.0.

   - bpo-37267(38): On Windows, *note os.dup(): 1b54. no longer creates
     an inheritable fd when handling a character file.

   - bpo-36779(39): Ensure ‘time.tzname’ is correct on Windows when the
     active code page is set to CP_UTF7 or CP_UTF8.

   - bpo-32587(40): Make *note winreg.REG_MULTI_SZ: 1b55. support
     zero-length strings.

   - bpo-28269(41): Replace use of ‘strcasecmp()’ for the system
     function ‘_stricmp()’.  Patch by Minmin Gong.

   - bpo-36590(42): Add native Bluetooth RFCOMM support to socket
     module.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38589

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38453

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38519

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38492

   (5) https://bugs.python.org/issue?@action=redirect&bpo=38344

   (6) https://bugs.python.org/issue?@action=redirect&bpo=38359

   (7) https://bugs.python.org/issue?@action=redirect&bpo=38355

   (8) https://bugs.python.org/issue?@action=redirect&bpo=38117

   (9) https://bugs.python.org/issue?@action=redirect&bpo=38092

   (10) https://bugs.python.org/issue?@action=redirect&bpo=38133

   (11) https://bugs.python.org/issue?@action=redirect&bpo=38114

   (12) https://bugs.python.org/issue?@action=redirect&bpo=32592

   (13) https://bugs.python.org/issue?@action=redirect&bpo=36634

   (14) https://bugs.python.org/issue?@action=redirect&bpo=36634

   (15) https://bugs.python.org/issue?@action=redirect&bpo=38081

   (16) https://bugs.python.org/issue?@action=redirect&bpo=38087

   (17) https://bugs.python.org/issue?@action=redirect&bpo=38088

   (18) https://bugs.python.org/issue?@action=redirect&bpo=37283

   (19) https://bugs.python.org/issue?@action=redirect&bpo=38030

   (20) https://bugs.python.org/issue?@action=redirect&bpo=38020

   (21) https://bugs.python.org/issue?@action=redirect&bpo=37705

   (22) https://bugs.python.org/issue?@action=redirect&bpo=37549

   (23) https://bugs.python.org/issue?@action=redirect&bpo=1311

   (24) https://bugs.python.org/issue?@action=redirect&bpo=9949

   (25) https://bugs.python.org/issue?@action=redirect&bpo=37834

   (26) https://bugs.python.org/issue?@action=redirect&bpo=36266

   (27) https://bugs.python.org/issue?@action=redirect&bpo=25172

   (28) https://bugs.python.org/issue?@action=redirect&bpo=37778

   (29) https://bugs.python.org/issue?@action=redirect&bpo=37734

   (30) https://bugs.python.org/issue?@action=redirect&bpo=37702

   (31) https://bugs.python.org/issue?@action=redirect&bpo=37672

   (32) https://bugs.python.org/issue?@action=redirect&bpo=10945

   (33) https://bugs.python.org/issue?@action=redirect&bpo=37445

   (34) https://bugs.python.org/issue?@action=redirect&bpo=37369

   (35) https://bugs.python.org/issue?@action=redirect&bpo=37380

   (36) https://bugs.python.org/issue?@action=redirect&bpo=37351

   (37) https://bugs.python.org/issue?@action=redirect&bpo=35360

   (38) https://bugs.python.org/issue?@action=redirect&bpo=37267

   (39) https://bugs.python.org/issue?@action=redirect&bpo=36779

   (40) https://bugs.python.org/issue?@action=redirect&bpo=32587

   (41) https://bugs.python.org/issue?@action=redirect&bpo=28269

   (42) https://bugs.python.org/issue?@action=redirect&bpo=36590


File: python.info,  Node: macOS<38>,  Next: IDLE<36>,  Prev: Windows<47>,  Up: Python 3 9 0 alpha 1

1.23.57.8 macOS
...............

   - bpo-38117(1): Updated OpenSSL to 1.1.1d in macOS installer.

   - bpo-38089(2): Move Azure Pipelines to latest VM versions and make
     macOS tests optional

   - bpo-18049(3): Increase the default stack size of threads from 5MB
     to 16MB on macOS, to match the stack size of the main thread.  This
     avoids crashes on deep recursion in threads.

   - bpo-34602(4): Avoid test suite failures on macOS by no longer
     calling resource.setrlimit to increase the process stack size limit
     at runtime.  The runtime change is no longer needed since the
     interpreter is being built with a larger default stack size.

   - bpo-35360(5): Update macOS installer to use SQLite 3.28.0.

   - bpo-34631(6): Updated OpenSSL to 1.1.1c in macOS installer.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38117

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38089

   (3) https://bugs.python.org/issue?@action=redirect&bpo=18049

   (4) https://bugs.python.org/issue?@action=redirect&bpo=34602

   (5) https://bugs.python.org/issue?@action=redirect&bpo=35360

   (6) https://bugs.python.org/issue?@action=redirect&bpo=34631


File: python.info,  Node: IDLE<36>,  Next: Ferramentas/Demos<26>,  Prev: macOS<38>,  Up: Python 3 9 0 alpha 1

1.23.57.9 IDLE
..............

   - bpo-26353(1): Stop adding newline when saving an IDLE shell window.

   - bpo-4630(2): Add an option to toggle IDLE’s cursor blink for shell,
     editor, and output windows.  See Settings, General, Window
     Preferences, Cursor Blink.  Patch by Zackery Spytz.

   - bpo-38598(3): Do not try to compile IDLE shell or output windows

   - bpo-36698(4): IDLE no longer fails when write non-encodable
     characters to stderr.  It now escapes them with a backslash, as the
     regular Python interpreter.  Added the ‘errors’ field to the
     standard streams.

   - bpo-35379(5): When exiting IDLE, catch any AttributeError.  One
     happens when EditorWindow.close is called twice.  Printing a
     traceback, when IDLE is run from a terminal, is useless and
     annoying.

   - bpo-38183(6): To avoid problems, test_idle ignores the user config
     directory.  It no longer tries to create or access .idlerc or any
     files within.  Users must run IDLE to discover problems with saving
     settings.

   - bpo-38077(7): IDLE no longer adds ‘argv’ to the user namespace when
     initializing it.  This bug only affected 3.7.4 and 3.8.0b2 to
     3.8.0b4.

   - bpo-38041(8): Shell restart lines now fill the window width, always
     start with ‘=’, and avoid wrapping unnecessarily.  The line will
     still wrap if the included file name is long relative to the width.

   - bpo-35771(9): To avoid occasional spurious test_idle failures on
     slower machines, increase the ‘hover_delay’ in test_tooltip.

   - bpo-37824(10): Properly handle user input warnings in IDLE shell.
     Cease turning SyntaxWarnings into SyntaxErrors.

   - bpo-37929(11): IDLE Settings dialog now closes properly when there
     is no shell window.

   - bpo-37902(12): Add mousewheel scrolling for IDLE module, path, and
     stack browsers.  Patch by George Zhang.

   - bpo-37849(13): Fixed completions list appearing too high or low
     when shown above the current line.

   - bpo-36419(14): Refactor IDLE autocomplete and improve testing.

   - bpo-37748(15): Reorder the Run menu.  Put the most common choice,
     Run Module, at the top.

   - bpo-37692(16): Improve highlight config sample with example shell
     interaction and better labels for shell elements.

   - bpo-37628(17): Settings dialog no longer expands with font size.

   - bpo-37627(18): Initialize the Customize Run dialog with the command
     line arguments most recently entered before.  The user can
     optionally edit before submitting them.

   - bpo-33610(19): Fix code context not showing the correct context
     when first toggled on.

   - bpo-37530(20): Optimize code context to reduce unneeded background
     activity.  Font and highlight changes now occur along with text
     changes instead of after a random delay.

   - bpo-27452(21): Cleanup ‘config.py’ by inlining ‘RemoveFile’ and
     simplifying the handling of ‘file’ in ‘CreateConfigHandlers’.

   - bpo-37325(22): Fix tab focus traversal order for help source and
     custom run dialogs.

   - bpo-37321(23): Both subprocess connection error messages now refer
     to the ‘Startup failure’ section of the IDLE doc.

   - bpo-17535(24): Add optional line numbers for IDLE editor windows.
     Windows open without line numbers unless set otherwise in the
     General tab of the configuration dialog.

   - bpo-26806(25): To compensate for stack frames added by IDLE and
     avoid possible problems with low recursion limits, add 30 to limits
     in the user code execution process.  Subtract 30 when reporting
     recursion limits to make this addition mostly transparent.

   - bpo-37177(26): Properly ‘attach’ search dialogs to their main
     window so that they behave like other dialogs and do not get hidden
     behind their main window.

   - bpo-37039(27): Adjust “Zoom Height” to individual screens by
     momentarily maximizing the window on first use with a particular
     screen.  Changing screen settings may invalidate the saved height.
     While a window is maximized, “Zoom Height” has no effect.

   - bpo-35763(28): Make calltip reminder about ‘/’ meaning
     positional-only less obtrusive by only adding it when there is room
     on the first line.

   - bpo-5680(29): Add ‘Run… Customized’ to the Run menu to run a module
     with customized settings.  Any ‘command line arguments’ entered are
     added to sys.argv.  One can suppress the normal Shell main module
     restart.

   - bpo-36390(30): Gather Format menu functions into format.py.
     Combine paragraph.py, rstrip.py, and format methods from editor.py.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26353

   (2) https://bugs.python.org/issue?@action=redirect&bpo=4630

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38598

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36698

   (5) https://bugs.python.org/issue?@action=redirect&bpo=35379

   (6) https://bugs.python.org/issue?@action=redirect&bpo=38183

   (7) https://bugs.python.org/issue?@action=redirect&bpo=38077

   (8) https://bugs.python.org/issue?@action=redirect&bpo=38041

   (9) https://bugs.python.org/issue?@action=redirect&bpo=35771

   (10) https://bugs.python.org/issue?@action=redirect&bpo=37824

   (11) https://bugs.python.org/issue?@action=redirect&bpo=37929

   (12) https://bugs.python.org/issue?@action=redirect&bpo=37902

   (13) https://bugs.python.org/issue?@action=redirect&bpo=37849

   (14) https://bugs.python.org/issue?@action=redirect&bpo=36419

   (15) https://bugs.python.org/issue?@action=redirect&bpo=37748

   (16) https://bugs.python.org/issue?@action=redirect&bpo=37692

   (17) https://bugs.python.org/issue?@action=redirect&bpo=37628

   (18) https://bugs.python.org/issue?@action=redirect&bpo=37627

   (19) https://bugs.python.org/issue?@action=redirect&bpo=33610

   (20) https://bugs.python.org/issue?@action=redirect&bpo=37530

   (21) https://bugs.python.org/issue?@action=redirect&bpo=27452

   (22) https://bugs.python.org/issue?@action=redirect&bpo=37325

   (23) https://bugs.python.org/issue?@action=redirect&bpo=37321

   (24) https://bugs.python.org/issue?@action=redirect&bpo=17535

   (25) https://bugs.python.org/issue?@action=redirect&bpo=26806

   (26) https://bugs.python.org/issue?@action=redirect&bpo=37177

   (27) https://bugs.python.org/issue?@action=redirect&bpo=37039

   (28) https://bugs.python.org/issue?@action=redirect&bpo=35763

   (29) https://bugs.python.org/issue?@action=redirect&bpo=5680

   (30) https://bugs.python.org/issue?@action=redirect&bpo=36390


File: python.info,  Node: Ferramentas/Demos<26>,  Next: API C<51>,  Prev: IDLE<36>,  Up: Python 3 9 0 alpha 1

1.23.57.10 Ferramentas/Demos
............................

   - bpo-38118(1): Update Valgrind suppression file to ignore a false
     alarm in *note PyUnicode_Decode(): 1b59. when using GCC builtin
     strcmp().

   - bpo-38347(2): pathfix.py: Assume all files that end on ‘.py’ are
     Python scripts when working recursively.

   - bpo-37803(3): pdb’s ‘--help’ and ‘--version’ long options now work.

   - bpo-37942(4): Improve ArgumentClinic converter for floats.

   - bpo-37704(5): Remove ‘Tools/scripts/h2py.py’: use cffi to access a
     C API in Python.

   - bpo-37675(6): 2to3 now works when run from a zipped standard
     library.

   - bpo-37034(7): Argument Clinic now uses the argument name on errors
     with keyword-only argument instead of their position.  Patch
     contributed by Rémi Lapeyre.

   - bpo-37064(8): Add option -k to pathscript.py script: preserve
     shebang flags.  Add option -a to pathscript.py script: add flags.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=38118

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38347

   (3) https://bugs.python.org/issue?@action=redirect&bpo=37803

   (4) https://bugs.python.org/issue?@action=redirect&bpo=37942

   (5) https://bugs.python.org/issue?@action=redirect&bpo=37704

   (6) https://bugs.python.org/issue?@action=redirect&bpo=37675

   (7) https://bugs.python.org/issue?@action=redirect&bpo=37034

   (8) https://bugs.python.org/issue?@action=redirect&bpo=37064


File: python.info,  Node: API C<51>,  Prev: Ferramentas/Demos<26>,  Up: Python 3 9 0 alpha 1

1.23.57.11 API C
................

   - bpo-37633(1): Re-export some function compatibility wrappers for
     macros in ‘pythonrun.h’.

   - bpo-38644(2): Provide *note Py_EnterRecursiveCall(): 97a. and *note
     Py_LeaveRecursiveCall(): 97b. as regular functions for the limited
     API. Previously, there were defined as macros, but these macros
     didn’t work with the limited API which cannot access
     ‘PyThreadState.recursion_depth’ field.  Remove
     ‘_Py_CheckRecursionLimit’ from the stable ABI.

   - bpo-38650(3): The global variable *note
     PyStructSequence_UnnamedField: 989. is now a constant and refers to
     a constant string.

   - bpo-38540(4): Fixed possible leak in *note PyArg_Parse(): 1b5b. and
     similar functions for format units ‘"es#"’ and ‘"et#"’ when the
     macro ‘PY_SSIZE_T_CLEAN’ is not defined.

   - bpo-38395(5): Fix a crash in *note weakref.proxy: a5b. objects due
     to incorrect lifetime management when calling some associated
     methods that may delete the last reference to object being
     referenced by the proxy.  Patch by Pablo Galindo.

   - bpo-36389(6): The ‘_PyObject_CheckConsistency()’ function is now
     also available in release mode.  For example, it can be used to
     debug a crash in the ‘visit_decref()’ function of the GC.

   - bpo-38266(7): Revert the removal of PyThreadState_DeleteCurrent()
     with documentation.

   - bpo-38303(8): Update audioop extension module to use the stable ABI
     (PEP-384).  Patch by Tyler Kieft.

   - bpo-38234(9): ‘Py_SetPath()’ now sets *note sys.executable: 3b8. to
     the program full path (*note Py_GetProgramFullPath(): 3b7.) rather
     than to the program name (*note Py_GetProgramName(): 3b9.).

   - bpo-38234(10): Python ignored arguments passed to ‘Py_SetPath()’,
     ‘Py_SetPythonHome()’ and ‘Py_SetProgramName()’: fix Python
     initialization to use specified arguments.

   - bpo-38205(11): The *note Py_UNREACHABLE(): bcd. macro now calls
     *note Py_FatalError(): 98a.

   - bpo-38140(12): Make dict and weakref offsets opaque for C heap
     types by passing the offsets through PyMemberDef

   - bpo-15088(13): The C function ‘PyGen_NeedsFinalizing’ has been
     removed.  It was not documented, tested or used anywhere within
     CPython after the implementation of PEP 442(14).  Patch by Joannah
     Nanjekye.  (Patch by Joannah Nanjekye)

   - bpo-36763(15): Options added by ‘PySys_AddXOption()’ are now
     handled the same way than ‘PyConfig.xoptions’ and command line ‘-X’
     options.

   - bpo-37926(16): Fix a crash in ‘PySys_SetArgvEx(0, NULL, 0)’.

   - bpo-37879(17): Fix subtype_dealloc to suppress the type decref when
     the base type is a C heap type

   - bpo-37645(18): Add ‘_PyObject_FunctionStr()’ to get a user-friendly
     string representation of a function-like object.  Patch by Jeroen
     Demeyer.

   - bpo-29548(19): The functions ‘PyEval_CallObject’,
     ‘PyEval_CallFunction’, ‘PyEval_CallMethod’ and
     ‘PyEval_CallObjectWithKeywords’ are deprecated.  Use *note
     PyObject_Call(): 39c. and its variants instead.

   - bpo-37151(20): ‘PyCFunction_Call’ is now a deprecated alias of
     *note PyObject_Call(): 39c.

   - bpo-37540(21): The vectorcall protocol now requires that the caller
     passes only strings as keyword names.

   - bpo-37207(22): The vectorcall protocol is now enabled for ‘type’
     objects: set ‘tp_vectorcall’ to a vectorcall function to be used
     instead of ‘tp_new’ and ‘tp_init’ when calling the class itself.

   - bpo-21120(23): Exclude Python-ast.h, ast.h and asdl.h from the
     limited API.

   - bpo-37483(24): Add new function ‘_PyObject_CallOneArg’ for calling
     an object with one positional argument.

   - bpo-36763(25): Add *note PyConfig_SetWideStringList(): 1b5c.
     function.

   - bpo-37337(26): Add fast functions for calling methods:
     ‘_PyObject_VectorcallMethod()’, ‘_PyObject_CallMethodNoArgs()’ and
     ‘_PyObject_CallMethodOneArg()’.

   - bpo-28805(27): The *note METH_FASTCALL: 1713. calling convention
     has been documented.

   - bpo-37221(28): The new function ‘PyCode_NewWithPosOnlyArgs()’
     allows to create code objects like ‘PyCode_New()’, but with an
     extra 'posonlyargcount' parameter for indicating the number of
     positonal-only arguments.

   - bpo-37215(29): Fix dtrace issue introduce by bpo-36842(30)

   - bpo-37194(31): Add a new public *note PyObject_CallNoArgs(): 39b.
     function to the C API: call a callable Python object without any
     arguments.  It is the most efficient way to call a callback without
     any argument.  On x86-64, for example,
     ‘PyObject_CallFunctionObjArgs(func, NULL)’ allocates 960 bytes on
     the stack per call, whereas ‘PyObject_CallNoArgs(func)’ only
     allocates 624 bytes per call.

   - bpo-37170(32): Fix the cast on error in *note
     PyLong_AsUnsignedLongLongMask(): 1b5d.

   - bpo-35381(33): Convert posixmodule.c statically allocated types
     ‘DirEntryType’ and ‘ScandirIteratorType’ to heap-allocated types.

   - bpo-34331(34): Use singular/plural noun in error message when
     instantiating an abstract class with non-overridden abstract
     method(s).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37633

   (2) https://bugs.python.org/issue?@action=redirect&bpo=38644

   (3) https://bugs.python.org/issue?@action=redirect&bpo=38650

   (4) https://bugs.python.org/issue?@action=redirect&bpo=38540

   (5) https://bugs.python.org/issue?@action=redirect&bpo=38395

   (6) https://bugs.python.org/issue?@action=redirect&bpo=36389

   (7) https://bugs.python.org/issue?@action=redirect&bpo=38266

   (8) https://bugs.python.org/issue?@action=redirect&bpo=38303

   (9) https://bugs.python.org/issue?@action=redirect&bpo=38234

   (10) https://bugs.python.org/issue?@action=redirect&bpo=38234

   (11) https://bugs.python.org/issue?@action=redirect&bpo=38205

   (12) https://bugs.python.org/issue?@action=redirect&bpo=38140

   (13) https://bugs.python.org/issue?@action=redirect&bpo=15088

   (14) https://peps.python.org/pep-0442/

   (15) https://bugs.python.org/issue?@action=redirect&bpo=36763

   (16) https://bugs.python.org/issue?@action=redirect&bpo=37926

   (17) https://bugs.python.org/issue?@action=redirect&bpo=37879

   (18) https://bugs.python.org/issue?@action=redirect&bpo=37645

   (19) https://bugs.python.org/issue?@action=redirect&bpo=29548

   (20) https://bugs.python.org/issue?@action=redirect&bpo=37151

   (21) https://bugs.python.org/issue?@action=redirect&bpo=37540

   (22) https://bugs.python.org/issue?@action=redirect&bpo=37207

   (23) https://bugs.python.org/issue?@action=redirect&bpo=21120

   (24) https://bugs.python.org/issue?@action=redirect&bpo=37483

   (25) https://bugs.python.org/issue?@action=redirect&bpo=36763

   (26) https://bugs.python.org/issue?@action=redirect&bpo=37337

   (27) https://bugs.python.org/issue?@action=redirect&bpo=28805

   (28) https://bugs.python.org/issue?@action=redirect&bpo=37221

   (29) https://bugs.python.org/issue?@action=redirect&bpo=37215

   (30) https://bugs.python.org/issue?@action=redirect&bpo=36842

   (31) https://bugs.python.org/issue?@action=redirect&bpo=37194

   (32) https://bugs.python.org/issue?@action=redirect&bpo=37170

   (33) https://bugs.python.org/issue?@action=redirect&bpo=35381

   (34) https://bugs.python.org/issue?@action=redirect&bpo=34331


File: python.info,  Node: Python 3 8 0 beta 1,  Next: Python 3 8 0 alpha 4,  Prev: Python 3 9 0 alpha 1,  Up: Changelog

1.23.58 Python 3.8.0 beta 1
---------------------------

'Data de lançamento: 2019-06-04'

* Menu:

* Segurança: Segurança<39>.
* Núcleo e embutidos: Núcleo e embutidos<131>.
* Biblioteca: Biblioteca<133>.
* Documentação: Documentação<48>.
* Testes: Testes<51>.
* Construção: Construção<56>.
* Windows: Windows<48>.
* macOS: macOS<39>.
* IDLE: IDLE<37>.
* Ferramentas/Demos: Ferramentas/Demos<27>.
* API C: API C<52>.


File: python.info,  Node: Segurança<39>,  Next: Núcleo e embutidos<131>,  Up: Python 3 8 0 beta 1

1.23.58.1 Segurança
...................

   - bpo-35907(1): CVE 2019-9948(2): Avoid file reading by disallowing
     ‘local-file://’ and ‘local_file://’ URL schemes in
     ‘URLopener().open()’ and ‘URLopener().retrieve()’ of *note
     urllib.request: 10b.

   - bpo-33529(3): Prevent fold function used in email header encoding
     from entering infinite loop when there are too many non-ASCII
     characters in a header.

   - bpo-33164(4): Updated blake2 implementation which uses secure
     memset implementation provided by platform.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35907

   (2) https://www.cve.org/CVERecord?id=CVE-2019-9948

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33529

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33164


File: python.info,  Node: Núcleo e embutidos<131>,  Next: Biblioteca<133>,  Prev: Segurança<39>,  Up: Python 3 8 0 beta 1

1.23.58.2 Núcleo e embutidos
............................

   - bpo-35814(1): Allow unpacking in the right hand side of annotated
     assignments.  In particular, ‘t: Tuple[int, ...] = x, y, *z’ is now
     allowed.

   - bpo-37126(2): All structseq objects are now tracked by the garbage
     collector.  Patch by Pablo Galindo.

   - bpo-37122(3): Make the 'co_argcount' attribute of code objects
     represent the total number of positional arguments (including
     positional-only arguments).  The value of 'co_posonlyargcount' can
     be used to distinguish which arguments are positional only, and the
     difference ('co_argcount' - 'co_posonlyargcount') is the number of
     positional-or-keyword arguments.  Patch by Pablo Galindo.

   - bpo-20092(4): Constructors of *note int: 257, *note float: 2f7. and
     *note complex: 2f8. will now use the *note __index__(): 71d.
     special method, if available and the corresponding method *note
     __int__(): 71c, *note __float__(): 9d4. or *note __complex__():
     5e7. is not available.

   - bpo-37087(5): Add native thread ID (TID) support to OpenBSD.

   - bpo-26219(6): Implemented per opcode cache mechanism and
     ‘LOAD_GLOBAL’ instruction use it.  ‘LOAD_GLOBAL’ is now about 40%
     faster.  Contributed by Yury Selivanov, and Inada Naoki.

   - bpo-37072(7): Fix crash in PyAST_FromNodeObject() when flags is
     NULL.

   - bpo-37029(8): Freeing a great many small objects could take time
     quadratic in the number of arenas, due to using linear search to
     keep ‘obmalloc.c’’s list of usable arenas sorted by order of number
     of free memory pools.  This is accomplished without search now,
     leaving the worst-case time linear in the number of arenas.  For
     programs where this quite visibly matters (typically with more than
     100 thousand small objects alive simultaneously), this can greatly
     reduce the time needed to release their memory.

   - bpo-26423(9): Fix possible overflow in ‘wrap_lenfunc()’ when
     ‘sizeof(long) < sizeof(Py_ssize_t)’ (e.g., 64-bit Windows).

   - bpo-37050(10): Improve the AST for “debug” f-strings, which use ‘=’
     to print out the source of the expression being evaluated.  Delete
     expr_text from the FormattedValue node, and instead use a Constant
     string node (possibly merged with adjacent constant expressions
     inside the f-string).

   - bpo-22385(11): The ‘bytes.hex’, ‘bytearray.hex’, and
     ‘memoryview.hex’ methods as well as the ‘binascii.hexlify’ and
     ‘b2a_hex’ functions now have the ability to include an optional
     separator between hex bytes.  This functionality was inspired by
     MicroPython’s hexlify implementation.

   - bpo-26836(12): Add *note os.memfd_create(): a13.

   - bpo-37032(13): Added new ‘replace()’ method to the code type (*note
     types.CodeType: 2df.).

   - bpo-37007(14): Implement *note socket.if_nameindex(): a37, *note
     socket.if_nametoindex(): a38, and *note socket.if_indextoname():
     a39. on Windows.

   - bpo-36829(15): *note PyErr_WriteUnraisable(): 34d. now creates a
     traceback object if there is no current traceback.  Moreover, call
     *note PyErr_NormalizeException(): 3f5. and *note
     PyException_SetTraceback(): 1b61. to normalize the exception value.
     Ignore any error.

   - bpo-36878(16): Only accept text after ‘# type: ignore’ if the first
     character is ASCII. This is to disallow things like ‘# type:
     ignoreé’.

   - bpo-36878(17): Store text appearing after a ‘# type: ignore’
     comment in the AST. For example a type ignore like ‘# type:
     ignore[E1000]’ will have the string ‘"[E1000]"’ stored in its AST
     node.

   - bpo-2180(18): Treat line continuation at EOF as a ‘SyntaxError’ by
     Anthony Sottile.

   - bpo-36907(19): Fix a crash when calling a C function with a keyword
     dict (‘f(**kwargs)’) and changing the dict ‘kwargs’ while that
     function is running.

   - bpo-36946(20): Fix possible signed integer overflow when handling
     slices.

   - bpo-36826(21): Add NamedExpression kind support to ast_unparse.c

   - bpo-1875(22): A *note SyntaxError: 18d. is now raised if a code
     blocks that will be optimized away (e.g.  if conditions that are
     always false) contains syntax errors.  Patch by Pablo Galindo.

   - bpo-36027(23): Allow computation of modular inverses via
     three-argument ‘pow’: the second argument is now permitted to be
     negative in the case where the first and third arguments are
     relatively prime.

   - bpo-36861(24): Update the Unicode database to version 12.1.0.

   - bpo-28866(25): Avoid caching attributes of classes which type
     defines mro() to avoid a hard cache invalidation problem.

   - bpo-36851(26): The ‘FrameType’ stack is now correctly cleaned up if
     the execution ends with a return and the stack is not empty.

   - bpo-34616(27): The ‘compile()’ builtin functions now support the
     ‘ast.PyCF_ALLOW_TOP_LEVEL_AWAIT’ flag, which allow to compile
     sources that contains top-level ‘await’, ‘async with’ or ‘async
     for’.  This is useful to evaluate async-code from with an already
     async functions; for example in a custom REPL.

   - bpo-36842(28): Implement PEP 578, adding sys.audit, io.open_code
     and related APIs.

   - bpo-27639(29): Correct return type for UserList slicing operations.
     Patch by Michael Blahay, Erick Cervantes, and vaultah

   - bpo-36737(30): Move PyRuntimeState.warnings into per-interpreter
     state (via “module state”).

   - bpo-36793(31): Removed ‘__str__’ implementations from builtin types
     *note bool: 468, *note int: 257, *note float: 2f7, *note complex:
     2f8. and few classes from the standard library.  They now inherit
     ‘__str__()’ from *note object: a96.

   - bpo-36817(32): Add a ‘=’ feature f-strings for debugging.  This can
     precede ‘!s’, ‘!r’, or ‘!a’.  It produces the text of the
     expression, followed by an equal sign, followed by the repr of the
     value of the expression.  So ‘f'{3*9+15=}'’ would be equal to the
     string ‘'3*9+15=42'’.  If ‘=’ is specified, the default conversion
     is set to ‘!r’, unless a format spec is given, in which case the
     formatting behavior is unchanged, and __format__ will be used.

   - bpo-24048(33): Save the live exception during import.c’s
     ‘remove_module()’.

   - bpo-27987(34): pymalloc returns memory blocks aligned by 16 bytes,
     instead of 8 bytes, on 64-bit platforms to conform x86-64 ABI.
     Recent compilers assume this alignment more often.  Patch by Inada
     Naoki.

   - bpo-36601(35): A long-since-meaningless check for ‘getpid() ==
     main_pid’ was removed from Python’s internal C signal handler.

   - bpo-36594(36): Fix incorrect use of ‘%p’ in format strings.  Patch
     by Zackery Spytz.

   - bpo-36045(37): ‘builtins.help()’ now prefixes ‘async’ for async
     functions.

   - bpo-36084(38): Add native thread ID (TID) to threading.Thread
     objects (supported platforms: Windows, FreeBSD, Linux, macOS)

   - bpo-36035(39): Added fix for broken symlinks in combination with
     pathlib

   - bpo-35983(40): Added new trashcan macros to deal with a double
     deallocation that could occur when the ‘tp_dealloc’ of a subclass
     calls the ‘tp_dealloc’ of a base class and that base class uses the
     trashcan mechanism.  Patch by Jeroen Demeyer.

   - bpo-20602(41): Do not clear *note sys.flags: 68c. and *note
     sys.float_info: 1b62. during shutdown.  Patch by Zackery Spytz.

   - bpo-26826(42): Expose ‘copy_file_range()’ as a low level API in the
     *note os: a1. module.

   - bpo-32388(43): Remove cross-version binary compatibility
     requirement in tp_flags.

   - bpo-31862(44): Port binascii to PEP 489 multiphase initialization.
     Patch by Marcel Plch.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35814

   (2) https://bugs.python.org/issue?@action=redirect&bpo=37126

   (3) https://bugs.python.org/issue?@action=redirect&bpo=37122

   (4) https://bugs.python.org/issue?@action=redirect&bpo=20092

   (5) https://bugs.python.org/issue?@action=redirect&bpo=37087

   (6) https://bugs.python.org/issue?@action=redirect&bpo=26219

   (7) https://bugs.python.org/issue?@action=redirect&bpo=37072

   (8) https://bugs.python.org/issue?@action=redirect&bpo=37029

   (9) https://bugs.python.org/issue?@action=redirect&bpo=26423

   (10) https://bugs.python.org/issue?@action=redirect&bpo=37050

   (11) https://bugs.python.org/issue?@action=redirect&bpo=22385

   (12) https://bugs.python.org/issue?@action=redirect&bpo=26836

   (13) https://bugs.python.org/issue?@action=redirect&bpo=37032

   (14) https://bugs.python.org/issue?@action=redirect&bpo=37007

   (15) https://bugs.python.org/issue?@action=redirect&bpo=36829

   (16) https://bugs.python.org/issue?@action=redirect&bpo=36878

   (17) https://bugs.python.org/issue?@action=redirect&bpo=36878

   (18) https://bugs.python.org/issue?@action=redirect&bpo=2180

   (19) https://bugs.python.org/issue?@action=redirect&bpo=36907

   (20) https://bugs.python.org/issue?@action=redirect&bpo=36946

   (21) https://bugs.python.org/issue?@action=redirect&bpo=36826

   (22) https://bugs.python.org/issue?@action=redirect&bpo=1875

   (23) https://bugs.python.org/issue?@action=redirect&bpo=36027

   (24) https://bugs.python.org/issue?@action=redirect&bpo=36861

   (25) https://bugs.python.org/issue?@action=redirect&bpo=28866

   (26) https://bugs.python.org/issue?@action=redirect&bpo=36851

   (27) https://bugs.python.org/issue?@action=redirect&bpo=34616

   (28) https://bugs.python.org/issue?@action=redirect&bpo=36842

   (29) https://bugs.python.org/issue?@action=redirect&bpo=27639

   (30) https://bugs.python.org/issue?@action=redirect&bpo=36737

   (31) https://bugs.python.org/issue?@action=redirect&bpo=36793

   (32) https://bugs.python.org/issue?@action=redirect&bpo=36817

   (33) https://bugs.python.org/issue?@action=redirect&bpo=24048

   (34) https://bugs.python.org/issue?@action=redirect&bpo=27987

   (35) https://bugs.python.org/issue?@action=redirect&bpo=36601

   (36) https://bugs.python.org/issue?@action=redirect&bpo=36594

   (37) https://bugs.python.org/issue?@action=redirect&bpo=36045

   (38) https://bugs.python.org/issue?@action=redirect&bpo=36084

   (39) https://bugs.python.org/issue?@action=redirect&bpo=36035

   (40) https://bugs.python.org/issue?@action=redirect&bpo=35983

   (41) https://bugs.python.org/issue?@action=redirect&bpo=20602

   (42) https://bugs.python.org/issue?@action=redirect&bpo=26826

   (43) https://bugs.python.org/issue?@action=redirect&bpo=32388

   (44) https://bugs.python.org/issue?@action=redirect&bpo=31862


File: python.info,  Node: Biblioteca<133>,  Next: Documentação<48>,  Prev: Núcleo e embutidos<131>,  Up: Python 3 8 0 beta 1

1.23.58.3 Biblioteca
....................

   - bpo-37128(1): Added *note math.perm(): 6d1.

   - bpo-37120(2): Add SSLContext.num_tickets to control the number of
     TLSv1.3 session tickets.

   - bpo-12202(3): Fix the error handling in
     ‘msilib.SummaryInformation.GetProperty()’.  Patch by Zackery Spytz.

   - bpo-26835(4): The fcntl module now contains file sealing constants
     for sealing of memfds.

   - bpo-29262(5): Add ‘get_origin()’ and ‘get_args()’ introspection
     helpers to ‘typing’ module.

   - bpo-12639(6): ‘msilib.Directory.start_component()’ no longer fails
     if 'keyfile' is not ‘None’.

   - bpo-36999(7): Add the ‘asyncio.Task.get_coro()’ method to publicly
     expose the tasks’s coroutine object.

   - bpo-35246(8): Make *note asyncio.create_subprocess_exec(): a81.
     accept path-like arguments.

   - bpo-35279(9): Change default 'max_workers' of ‘ThreadPoolExecutor’
     from ‘cpu_count() * 5’ to ‘min(32, cpu_count() + 4)’.  Previous
     value was unreasonably large on many cores machines.

   - bpo-37076(10): *note _thread.start_new_thread(): 196. now logs
     uncaught exception raised by the function using *note
     sys.unraisablehook(): 1f7, rather than *note sys.excepthook(): 80e,
     so the hook gets access to the function which raised the exception.

   - bpo-33725(11): On macOS, the *note multiprocessing: 94. module now
     uses 'spawn' start method by default.

   - bpo-37054(12): Fix destructor ‘_pyio.BytesIO’ and
     ‘_pyio.TextIOWrapper’: initialize their ‘_buffer’ attribute as soon
     as possible (in the class body), because it’s used by ‘__del__()’
     which calls ‘close()’.

   - bpo-37058(13): PEP 544: Add ‘Protocol’ and ‘@runtime_checkable’ to
     the ‘typing’ module.

   - bpo-36933(14): The functions ‘sys.set_coroutine_wrapper’ and
     ‘sys.get_coroutine_wrapper’ that were deprecated and marked for
     removal in 3.8 have been removed.

   - bpo-37047(15): Handle late binding and attribute access in *note
     unittest.mock.AsyncMock: a53. setup for autospeccing.  Document
     newly implemented async methods in *note unittest.mock.MagicMock:
     ebe.

   - bpo-37049(16): PEP 589: Add ‘TypedDict’ to the ‘typing’ module.

   - bpo-37046(17): PEP 586: Add ‘Literal’ to the ‘typing’ module.

   - bpo-37045(18): PEP 591: Add ‘Final’ qualifier and ‘@final’
     decorator to the ‘typing’ module.

   - bpo-37035(19): Don’t log OSError based exceptions if a fatal error
     has occurred in asyncio transport.  Peer can generate almost any
     OSError, user cannot avoid these exceptions by fixing own code.
     Errors are still propagated to user code, it’s just logging them is
     pointless and pollute asyncio logs.

   - bpo-37001(20): *note symtable.symtable(): 1b64. now accepts the
     same input types for source code as the built-in *note compile():
     192. function.  Patch by Dino Viehland.

   - bpo-37028(21): Implement asyncio REPL

   - bpo-37027(22): Return safe to use proxy socket object from
     transport.get_extra_info(‘socket’)

   - bpo-32528(23): Make asyncio.CancelledError a BaseException.

     This will address the common mistake many asyncio users make: an
     “except Exception” clause breaking Tasks cancellation.

     In addition to this change, we stop inheriting asyncio.TimeoutError
     and asyncio.InvalidStateError from their concurrent.futures.*
     counterparts.  There’s no point for these exceptions to share the
     inheritance chain.

   - bpo-1230540(24): Add a new *note threading.excepthook(): 84e.
     function which handles uncaught *note threading.Thread.run(): a46.
     exception.  It can be overridden to control how uncaught *note
     threading.Thread.run(): a46. exceptions are handled.

   - bpo-36996(25): Handle *note unittest.mock.patch(): ec1. used as a
     decorator on async functions.

   - bpo-37008(26): Add support for calling *note next(): 7d9. with the
     mock resulting from *note unittest.mock.mock_open(): 101d.

   - bpo-27737(27): Allow whitespace only header encoding in
     ‘email.header’ - by Batuhan Taskaya

   - bpo-36969(28): PDB command ‘args’ now display positional only
     arguments.  Patch contributed by Rémi Lapeyre.

   - bpo-36969(29): PDB command ‘args’ now display keyword only
     arguments.  Patch contributed by Rémi Lapeyre.

   - bpo-36983(30): Add missing names to ‘typing.__all__’: ‘ChainMap’,
     ‘ForwardRef’, ‘OrderedDict’ - by Anthony Sottile.

   - bpo-36972(31): Add SupportsIndex protocol to the typing module to
     allow type checking to detect classes that can be passed to
     ‘hex()’, ‘oct()’ and ‘bin()’.

   - bpo-32972(32): Implement ‘unittest.IsolatedAsyncioTestCase’ to help
     testing asyncio-based code.

   - bpo-36952(33): *note fileinput.input(): 802. and *note
     fileinput.FileInput: 737. 'bufsize' argument has been removed (was
     deprecated and ignored since Python 3.6), and as a result the
     'mode' and 'openhook' arguments have been made keyword-only.

   - bpo-36952(34): Starting with Python 3.3, importing ABCs from *note
     collections: 1d. is deprecated, and import should be done from
     *note collections.abc: 1e.  Still being able to import from *note
     collections: 1d. was marked for removal in 3.8, but has been
     delayed to 3.9; documentation and ‘DeprecationWarning’ clarified.

   - bpo-36949(35): Implement __repr__ for WeakSet objects.

   - bpo-36948(36): Fix *note NameError: 43f. in *note
     urllib.request.URLopener.retrieve(): 1b65.  Patch by Karthikeyan
     Singaravelan.

   - bpo-33524(37): Fix the folding of email header when the
     max_line_length is 0 or None and the header contains non-ascii
     characters.  Contributed by Licht Takeuchi (@Licht-T).

   - bpo-24564(38): *note shutil.copystat(): 116d. now ignores *note
     errno.EINVAL: 1b66. on *note os.setxattr(): 1146. which may occur
     when copying files on filesystems without extended attributes
     support.

     Original patch by Giampaolo Rodola, updated by Ying Wang.

   - bpo-36888(39): Python child processes can now access the status of
     their parent process using multiprocessing.process.parent_process

   - bpo-36921(40): Deprecate ‘@coroutine’ for sake of ‘async def’.

   - bpo-25652(41): Fix bug in ‘__rmod__’ of ‘UserString’ - by Batuhan
     Taskaya.

   - bpo-36916(42): Remove a message about an unhandled exception in a
     task when writer.write() is used without await and writer.drain()
     fails with an exception.

   - bpo-36889(43): Introduce ‘asyncio.Stream’ class that merges *note
     asyncio.StreamReader: 1a09. and *note asyncio.StreamWriter: 17f2.
     functionality.  ‘asyncio.Stream’ can work in readonly, writeonly
     and readwrite modes.  Provide ‘asyncio.connect()’,
     ‘asyncio.connect_unix()’, ‘asyncio.connect_read_pipe()’ and
     ‘asyncio.connect_write_pipe()’ factories to open ‘asyncio.Stream’
     connections.  Provide ‘asyncio.StreamServer’ and ‘UnixStreamServer’
     to serve servers with asyncio.Stream API. Modify *note
     asyncio.create_subprocess_shell(): a82. and *note
     asyncio.create_subprocess_exec(): a81. to use ‘asyncio.Stream’
     instead of deprecated ‘StreamReader’ and ‘StreamWriter’.  Deprecate
     *note asyncio.StreamReader: 1a09. and *note asyncio.StreamWriter:
     17f2.  Deprecate usage of private classes, e.g.
     ‘asyncio.FlowControlMixing’ and ‘asyncio.StreamReaderProtocol’
     outside of asyncio package.

   - bpo-36845(44): Added validation of integer prefixes to the
     construction of IP networks and interfaces in the ipaddress module.

   - bpo-23378(45): Add an extend action to argparser.

   - bpo-36867(46): Fix a bug making a SharedMemoryManager instance and
     its parent process use two separate resource_tracker processes.

   - bpo-23896(47): Adds a grammar to lib2to3.pygram that contains exec
     as a function not as statement.

   - bpo-36895(48): The function ‘time.clock()’ was deprecated in 3.3 in
     favor of ‘time.perf_counter()’ and marked for removal in 3.8, it
     has removed.

   - bpo-35545(49): Fix asyncio discarding IPv6 scopes when ensuring
     hostname resolutions internally

   - bpo-36887(50): Add new function *note math.isqrt(): a0d. to compute
     integer square roots.

   - bpo-34632(51): Introduce the ‘importlib.metadata’ module with
     (provisional) support for reading metadata from third-party
     packages.

   - bpo-36878(52): When using ‘type_comments=True’ in ‘ast.parse’,
     treat ‘# type: ignore’ followed by a non-alphanumeric character and
     then arbitrary text as a type ignore, instead of requiring nothing
     but whitespace or another comment.  This is to permit formations
     such as ‘# type: ignore[E1000]’.

   - bpo-36778(53): ‘cp65001’ encoding (Windows code page 65001) becomes
     an alias to ‘utf_8’ encoding.

   - bpo-36867(54): The multiprocessing.resource_tracker replaces the
     multiprocessing.semaphore_tracker module.  Other than semaphores,
     resource_tracker also tracks shared_memory segments.

   - bpo-30262(55): The ‘Cache’ and ‘Statement’ objects of the *note
     sqlite3: cf. module are not exposed to the user.  Patch by Aviv
     Palivoda.

   - bpo-24538(56): In ‘shutil.copystat()’, first copy extended file
     attributes and then file permissions, since extended attributes can
     only be set on the destination while it is still writeable.

   - bpo-36829(57): Add new *note sys.unraisablehook(): 1f7. function
     which can be overridden to control how “unraisable exceptions” are
     handled.  It is called when an exception has occurred but there is
     no way for Python to handle it.  For example, when a destructor
     raises an exception or during garbage collection (*note
     gc.collect(): a43.).

   - bpo-36832(58): Introducing ‘zipfile.Path’, a pathlib-compatible
     wrapper for traversing zip files.

   - bpo-36814(59): Fix an issue where os.posix_spawnp() would
     incorrectly raise a TypeError when file_actions is None.

   - bpo-33110(60): Handle exceptions raised by functions added by
     concurrent.futures add_done_callback correctly when the Future has
     already completed.

   - bpo-26903(61): Limit ‘max_workers’ in ‘ProcessPoolExecutor’ to 61
     to work around a WaitForMultipleObjects limitation.

   - bpo-36813(62): Fix *note QueueListener: e59. to call
     ‘queue.task_done()’ upon stopping.  Patch by Bar Harel.

   - bpo-36806(63): Forbid creation of asyncio stream objects like
     StreamReader, StreamWriter, Process, and their protocols outside of
     asyncio package.

   - bpo-36802(64): Provide both sync and async calls for
     StreamWriter.write() and StreamWriter.close()

   - bpo-36801(65): Properly handle SSL connection closing in asyncio
     StreamWriter.drain() call.

   - bpo-36785(66): Implement PEP 574 (pickle protocol 5 with
     out-of-band buffers).

   - bpo-36772(67): functools.lru_cache() can now be used as a straight
     decorator in addition to its existing usage as a function that
     returns a decorator.

   - bpo-6584(68): Add a *note BadGzipFile: 9ff. exception to the *note
     gzip: 67. module.

   - bpo-36748(69): Optimized write buffering in C implementation of
     ‘TextIOWrapper’.  Writing ASCII string to ‘TextIOWrapper’ with
     ascii, latin1, or utf-8 encoding is about 20% faster.  Patch by
     Inada Naoki.

   - bpo-8138(70): Don’t mark ‘wsgiref.simple_server.SimpleServer’ as
     multi-threaded since ‘wsgiref.simple_server.WSGIServer’ is
     single-threaded.

   - bpo-22640(71): *note py_compile.compile(): a2f. now supports silent
     mode.  Patch by Joannah Nanjekye

   - bpo-29183(72): Fix double exceptions in *note
     wsgiref.handlers.BaseHandler: 1b67. by calling its ‘close()’ method
     only when no exception is raised.

   - bpo-36548(73): Improved the repr of regular expression flags.

   - bpo-36542(74): The signature of Python functions can now be
     overridden by specifying the ‘__text_signature__’ attribute.

   - bpo-36533(75): Reinitialize logging.Handler locks in forked child
     processes instead of attempting to acquire them all in the parent
     before forking only to be released in the child process.  The
     acquire/release pattern was leading to deadlocks in code that has
     implemented any form of chained logging handlers that depend upon
     one another as the lock acquisition order cannot be guaranteed.

   - bpo-35252(76): Throw a TypeError instead of an AssertionError when
     using an invalid type annotation with singledispatch.

   - bpo-35900(77): Allow reduction methods to return a 6-item tuple
     where the 6th item specifies a custom state-setting method that’s
     called instead of the regular ‘__setstate__’ method.

   - bpo-35900(78): enable custom reduction callback registration for
     functions and classes in _pickle.c, using the new Pickler’s
     attribute ‘reducer_override’

   - bpo-36368(79): Fix a bug crashing SharedMemoryManager instances in
     interactive sessions after a ctrl-c (KeyboardInterrupt) was sent

   - bpo-31904(80): Fix mmap fail for VxWorks

   - bpo-27497(81): *note csv.DictWriter.writeheader(): 123f. now
     returns the return value of the underlying ‘csv.Writer.writerow()’
     method.  Patch contributed by Ashish Nitin Patil.

   - bpo-36239(82): Parsing .mo files now ignores comments starting and
     ending with #-#-#-#-#.

   - bpo-26707(83): Enable plistlib to read and write binary plist files
     that were created as a KeyedArchive file.  Specifically, this
     allows the plistlib to process 0x80 tokens as UID objects.

   - bpo-31904(84): Add posix module support for VxWorks.

   - bpo-35125(85): Asyncio: Remove inner callback on outer cancellation
     in shield

   - bpo-35721(86): Fix ‘asyncio.SelectorEventLoop.subprocess_exec()’
     leaks file descriptors if ‘Popen’ fails and called with
     ‘stdin=subprocess.PIPE’.  Patch by Niklas Fiekas.

   - bpo-31855(87): *note unittest.mock.mock_open(): 101d. results now
     respects the argument of read([size]).  Patch contributed by Rémi
     Lapeyre.

   - bpo-35431(88): Implement *note math.comb(): 6d0. that returns
     binomial coefficient, that computes the number of ways to choose k
     items from n items without repetition and without order.  Patch by
     Yash Aggarwal and Keller Fuchs.

   - bpo-26660(89): Fixed permission errors in *note TemporaryDirectory:
     1275. clean up.  Previously ‘TemporaryDirectory.cleanup()’ failed
     when non-writeable or non-searchable files or directories were
     created inside a temporary directory.

   - bpo-34271(90): Add debugging helpers to ssl module.  It’s now
     possible to dump key material and to trace TLS protocol.  The
     default and stdlib contexts also support SSLKEYLOGFILE env var.

   - bpo-26467(91): Added AsyncMock to support using unittest to mock
     asyncio coroutines.  Patch by Lisa Roach.

   - bpo-33569(92): dataclasses.InitVar: Exposes the type used to create
     the init var.

   - bpo-34424(93): Fix serialization of messages containing encoded
     strings when the policy.linesep is set to a multi-character string.
     Patch by Jens Troeger.

   - bpo-34303(94): Performance of *note functools.reduce(): 131f. is
     slightly improved.  Patch by Sergey Fedoseev.

   - bpo-33361(95): Fix a bug in *note codecs.StreamRecoder: 1b68. where
     seeking might leave old data in a buffer and break subsequent read
     calls.  Patch by Ammar Askar.

   - bpo-22454(96): The *note shlex: c4. module now exposes *note
     shlex.join(): a31, the inverse of *note shlex.split(): 53c.  Patch
     by Bo Bayles.

   - bpo-31922(97):
     ‘asyncio.AbstractEventLoop.create_datagram_endpoint()’: Do not
     connect UDP socket when broadcast is allowed.  This allows to
     receive replies after a UDP broadcast.

   - bpo-24882(98): Change ThreadPoolExecutor to use existing idle
     threads before spinning up new ones.

   - bpo-31961(99): Added support for bytes and path-like objects in
     *note subprocess.Popen(): 199. on Windows.  The 'args' parameter
     now accepts a *note path-like object: 2a0. if 'shell' is ‘False’
     and a sequence containing bytes and path-like objects.  The
     'executable' parameter now accepts a bytes and *note path-like
     object: 2a0.  The 'cwd' parameter now accepts a bytes object.
     Based on patch by Anders Lorentsen.

   - bpo-33123(100): *note pathlib.Path.unlink: 1b69. now accepts a
     'missing_ok' parameter to avoid a *note FileNotFoundError: 42b.
     from being raised.  Patch by Robert Buchholz.

   - bpo-32941(101): Allow *note mmap.mmap: 20b. objects to access the
     madvise() system call (through *note mmap.mmap.madvise(): a10.).

   - bpo-22102(102): Added support for ZIP files with disks set to 0.
     Such files are commonly created by builtin tools on Windows when
     use ZIP64 extension.  Patch by Francisco Facioni.

   - bpo-32515(103): trace.py can now run modules via python3 -m trace
     -t –module module_name

   - bpo-32299(104): Changed *note unittest.mock.patch.dict(): 1b6a. to
     return the patched dictionary when used as context manager.  Patch
     by Vadim Tsander.

   - bpo-27141(105): Added a ‘__copy__()’ to ‘collections.UserList’ and
     ‘collections.UserDict’ in order to correctly implement shallow
     copying of the objects.  Patch by Bar Harel.

   - bpo-31829(106): ‘\r’, ‘\0’ and ‘\x1a’ (end-of-file on Windows) are
     now escaped in protocol 0 pickles of Unicode strings.  This allows
     to load them without loss from files open in text mode in Python 2.

   - bpo-23395(107): ‘_thread.interrupt_main()’ now avoids setting the
     Python error status if the ‘SIGINT’ signal is ignored or not
     handled by Python.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37128

   (2) https://bugs.python.org/issue?@action=redirect&bpo=37120

   (3) https://bugs.python.org/issue?@action=redirect&bpo=12202

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26835

   (5) https://bugs.python.org/issue?@action=redirect&bpo=29262

   (6) https://bugs.python.org/issue?@action=redirect&bpo=12639

   (7) https://bugs.python.org/issue?@action=redirect&bpo=36999

   (8) https://bugs.python.org/issue?@action=redirect&bpo=35246

   (9) https://bugs.python.org/issue?@action=redirect&bpo=35279

   (10) https://bugs.python.org/issue?@action=redirect&bpo=37076

   (11) https://bugs.python.org/issue?@action=redirect&bpo=33725

   (12) https://bugs.python.org/issue?@action=redirect&bpo=37054

   (13) https://bugs.python.org/issue?@action=redirect&bpo=37058

   (14) https://bugs.python.org/issue?@action=redirect&bpo=36933

   (15) https://bugs.python.org/issue?@action=redirect&bpo=37047

   (16) https://bugs.python.org/issue?@action=redirect&bpo=37049

   (17) https://bugs.python.org/issue?@action=redirect&bpo=37046

   (18) https://bugs.python.org/issue?@action=redirect&bpo=37045

   (19) https://bugs.python.org/issue?@action=redirect&bpo=37035

   (20) https://bugs.python.org/issue?@action=redirect&bpo=37001

   (21) https://bugs.python.org/issue?@action=redirect&bpo=37028

   (22) https://bugs.python.org/issue?@action=redirect&bpo=37027

   (23) https://bugs.python.org/issue?@action=redirect&bpo=32528

   (24) https://bugs.python.org/issue?@action=redirect&bpo=1230540

   (25) https://bugs.python.org/issue?@action=redirect&bpo=36996

   (26) https://bugs.python.org/issue?@action=redirect&bpo=37008

   (27) https://bugs.python.org/issue?@action=redirect&bpo=27737

   (28) https://bugs.python.org/issue?@action=redirect&bpo=36969

   (29) https://bugs.python.org/issue?@action=redirect&bpo=36969

   (30) https://bugs.python.org/issue?@action=redirect&bpo=36983

   (31) https://bugs.python.org/issue?@action=redirect&bpo=36972

   (32) https://bugs.python.org/issue?@action=redirect&bpo=32972

   (33) https://bugs.python.org/issue?@action=redirect&bpo=36952

   (34) https://bugs.python.org/issue?@action=redirect&bpo=36952

   (35) https://bugs.python.org/issue?@action=redirect&bpo=36949

   (36) https://bugs.python.org/issue?@action=redirect&bpo=36948

   (37) https://bugs.python.org/issue?@action=redirect&bpo=33524

   (38) https://bugs.python.org/issue?@action=redirect&bpo=24564

   (39) https://bugs.python.org/issue?@action=redirect&bpo=36888

   (40) https://bugs.python.org/issue?@action=redirect&bpo=36921

   (41) https://bugs.python.org/issue?@action=redirect&bpo=25652

   (42) https://bugs.python.org/issue?@action=redirect&bpo=36916

   (43) https://bugs.python.org/issue?@action=redirect&bpo=36889

   (44) https://bugs.python.org/issue?@action=redirect&bpo=36845

   (45) https://bugs.python.org/issue?@action=redirect&bpo=23378

   (46) https://bugs.python.org/issue?@action=redirect&bpo=36867

   (47) https://bugs.python.org/issue?@action=redirect&bpo=23896

   (48) https://bugs.python.org/issue?@action=redirect&bpo=36895

   (49) https://bugs.python.org/issue?@action=redirect&bpo=35545

   (50) https://bugs.python.org/issue?@action=redirect&bpo=36887

   (51) https://bugs.python.org/issue?@action=redirect&bpo=34632

   (52) https://bugs.python.org/issue?@action=redirect&bpo=36878

   (53) https://bugs.python.org/issue?@action=redirect&bpo=36778

   (54) https://bugs.python.org/issue?@action=redirect&bpo=36867

   (55) https://bugs.python.org/issue?@action=redirect&bpo=30262

   (56) https://bugs.python.org/issue?@action=redirect&bpo=24538

   (57) https://bugs.python.org/issue?@action=redirect&bpo=36829

   (58) https://bugs.python.org/issue?@action=redirect&bpo=36832

   (59) https://bugs.python.org/issue?@action=redirect&bpo=36814

   (60) https://bugs.python.org/issue?@action=redirect&bpo=33110

   (61) https://bugs.python.org/issue?@action=redirect&bpo=26903

   (62) https://bugs.python.org/issue?@action=redirect&bpo=36813

   (63) https://bugs.python.org/issue?@action=redirect&bpo=36806

   (64) https://bugs.python.org/issue?@action=redirect&bpo=36802

   (65) https://bugs.python.org/issue?@action=redirect&bpo=36801

   (66) https://bugs.python.org/issue?@action=redirect&bpo=36785

   (67) https://bugs.python.org/issue?@action=redirect&bpo=36772

   (68) https://bugs.python.org/issue?@action=redirect&bpo=6584

   (69) https://bugs.python.org/issue?@action=redirect&bpo=36748

   (70) https://bugs.python.org/issue?@action=redirect&bpo=8138

   (71) https://bugs.python.org/issue?@action=redirect&bpo=22640

   (72) https://bugs.python.org/issue?@action=redirect&bpo=29183

   (73) https://bugs.python.org/issue?@action=redirect&bpo=36548

   (74) https://bugs.python.org/issue?@action=redirect&bpo=36542

   (75) https://bugs.python.org/issue?@action=redirect&bpo=36533

   (76) https://bugs.python.org/issue?@action=redirect&bpo=35252

   (77) https://bugs.python.org/issue?@action=redirect&bpo=35900

   (78) https://bugs.python.org/issue?@action=redirect&bpo=35900

   (79) https://bugs.python.org/issue?@action=redirect&bpo=36368

   (80) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (81) https://bugs.python.org/issue?@action=redirect&bpo=27497

   (82) https://bugs.python.org/issue?@action=redirect&bpo=36239

   (83) https://bugs.python.org/issue?@action=redirect&bpo=26707

   (84) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (85) https://bugs.python.org/issue?@action=redirect&bpo=35125

   (86) https://bugs.python.org/issue?@action=redirect&bpo=35721

   (87) https://bugs.python.org/issue?@action=redirect&bpo=31855

   (88) https://bugs.python.org/issue?@action=redirect&bpo=35431

   (89) https://bugs.python.org/issue?@action=redirect&bpo=26660

   (90) https://bugs.python.org/issue?@action=redirect&bpo=34271

   (91) https://bugs.python.org/issue?@action=redirect&bpo=26467

   (92) https://bugs.python.org/issue?@action=redirect&bpo=33569

   (93) https://bugs.python.org/issue?@action=redirect&bpo=34424

   (94) https://bugs.python.org/issue?@action=redirect&bpo=34303

   (95) https://bugs.python.org/issue?@action=redirect&bpo=33361

   (96) https://bugs.python.org/issue?@action=redirect&bpo=22454

   (97) https://bugs.python.org/issue?@action=redirect&bpo=31922

   (98) https://bugs.python.org/issue?@action=redirect&bpo=24882

   (99) https://bugs.python.org/issue?@action=redirect&bpo=31961

   (100) https://bugs.python.org/issue?@action=redirect&bpo=33123

   (101) https://bugs.python.org/issue?@action=redirect&bpo=32941

   (102) https://bugs.python.org/issue?@action=redirect&bpo=22102

   (103) https://bugs.python.org/issue?@action=redirect&bpo=32515

   (104) https://bugs.python.org/issue?@action=redirect&bpo=32299

   (105) https://bugs.python.org/issue?@action=redirect&bpo=27141

   (106) https://bugs.python.org/issue?@action=redirect&bpo=31829

   (107) https://bugs.python.org/issue?@action=redirect&bpo=23395


File: python.info,  Node: Documentação<48>,  Next: Testes<51>,  Prev: Biblioteca<133>,  Up: Python 3 8 0 beta 1

1.23.58.4 Documentação
......................

   - bpo-36896(1): Clarify that some types have unstable constructor
     signature between Python versions.

   - bpo-36686(2): Improve documentation of the stdin, stdout, and
     stderr arguments of the ‘asyncio.subprocess_exec’ function to
     specify which values are supported.  Also mention that decoding as
     text is not supported.

     Add a few tests to verify that the various values passed to the
     std* arguments actually work.

   - bpo-36984(3): Improve version added references in ‘typing’ module -
     by Anthony Sottile.

   - bpo-36868(4): What’s new now mentions
     SSLContext.hostname_checks_common_name instead of
     SSLContext.host_flags.

   - bpo-35924(5): Add a note to the ‘curses.addstr()’ documentation to
     warn that multiline strings can cause segfaults because of an
     ncurses bug.

   - bpo-36783(6): Added C API Documentation for Time_FromTimeAndFold
     and PyDateTime_FromDateAndTimeAndFold as per PEP 495.  Patch by
     Edison Abahurire.

   - bpo-36797(7): More of the legacy distutils documentation has been
     either pruned, or else more clearly marked as being retained solely
     until the setuptools documentation covers it independently.

   - bpo-22865(8): Add detail to the documentation on the ‘pty.spawn’
     function.

   - bpo-35397(9): Remove deprecation and document
     urllib.parse.unwrap().  Patch contributed by Rémi Lapeyre.

   - bpo-32995(10): Added the context variable in glossary.

   - bpo-33519(11): Clarify that ‘copy()’ is not part of the
     ‘MutableSequence’ ABC.

   - bpo-33482(12): Make ‘codecs.StreamRecoder.writelines’ take a list
     of bytes.

   - bpo-25735(13): Added documentation for func factorial to indicate
     that returns integer values

   - bpo-20285(14): Expand object.__doc__ (docstring) to make it
     clearer.  Modify pydoc.py so that help(object) lists object methods
     (for other classes, help omits methods of the object base class.)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36896

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36686

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36984

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36868

   (5) https://bugs.python.org/issue?@action=redirect&bpo=35924

   (6) https://bugs.python.org/issue?@action=redirect&bpo=36783

   (7) https://bugs.python.org/issue?@action=redirect&bpo=36797

   (8) https://bugs.python.org/issue?@action=redirect&bpo=22865

   (9) https://bugs.python.org/issue?@action=redirect&bpo=35397

   (10) https://bugs.python.org/issue?@action=redirect&bpo=32995

   (11) https://bugs.python.org/issue?@action=redirect&bpo=33519

   (12) https://bugs.python.org/issue?@action=redirect&bpo=33482

   (13) https://bugs.python.org/issue?@action=redirect&bpo=25735

   (14) https://bugs.python.org/issue?@action=redirect&bpo=20285


File: python.info,  Node: Testes<51>,  Next: Construção<56>,  Prev: Documentação<48>,  Up: Python 3 8 0 beta 1

1.23.58.5 Testes
................

   - bpo-37069(1): Modify test_coroutines, test_cprofile,
     test_generators, test_raise, test_ssl and test_yield_from to use
     *note test.support.catch_unraisable_exception(): 1b4f. rather than
     *note test.support.captured_stderr(): 1b6d.

   - bpo-37098(2): Fix test_memfd_create on older Linux Kernels.

   - bpo-37081(3): Test with OpenSSL 1.1.1c

   - bpo-36829(4): Add *note test.support.catch_unraisable_exception():
     1b4f.: context manager catching unraisable exception using *note
     sys.unraisablehook(): 1f7.

   - bpo-36915(5): The main regrtest process now always removes all
     temporary directories of worker processes even if they crash or if
     they are killed on KeyboardInterrupt (CTRL+c).

   - bpo-36719(6): “python3 -m test -jN …” now continues the execution
     of next tests when a worker process crash (CHILD_ERROR state).
     Previously, the test suite stopped immediately.  Use –failfast to
     stop at the first error.

   - bpo-36816(7): Update Lib/test/selfsigned_pythontestdotnet.pem to
     match self-signed.pythontest.net’s new TLS certificate.

   - bpo-35925(8): Skip httplib and nntplib networking tests when they
     would otherwise fail due to a modern OS or distro with a default
     OpenSSL policy of rejecting connections to servers with weak
     certificates.

   - bpo-36782(9): Add tests for several C API functions in the *note
     datetime: 30. module.  Patch by Edison Abahurire.

   - bpo-36342(10): Fix test_multiprocessing in test_venv if platform
     lacks functioning sem_open.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37069

   (2) https://bugs.python.org/issue?@action=redirect&bpo=37098

   (3) https://bugs.python.org/issue?@action=redirect&bpo=37081

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36829

   (5) https://bugs.python.org/issue?@action=redirect&bpo=36915

   (6) https://bugs.python.org/issue?@action=redirect&bpo=36719

   (7) https://bugs.python.org/issue?@action=redirect&bpo=36816

   (8) https://bugs.python.org/issue?@action=redirect&bpo=35925

   (9) https://bugs.python.org/issue?@action=redirect&bpo=36782

   (10) https://bugs.python.org/issue?@action=redirect&bpo=36342


File: python.info,  Node: Construção<56>,  Next: Windows<48>,  Prev: Testes<51>,  Up: Python 3 8 0 beta 1

1.23.58.6 Construção
....................

   - bpo-36721(1): To embed Python into an application, a new ‘--embed’
     option must be passed to ‘python3-config --libs --embed’ to get
     ‘-lpython3.8’ (link the application to libpython).  To support both
     3.8 and older, try ‘python3-config --libs --embed’ first and
     fallback to ‘python3-config --libs’ (without ‘--embed’) if the
     previous command fails.

     Adicione um módulo pkg-config ‘python-3.8-embed’ para incorporar o
     Python em uma aplicação: ‘pkg-config python-3.8-embed --libs’
     inclui ‘-lpython3.8’.  Para suportar tanto o 3.8 quanto o anterior,
     tente ‘pkg-config python-X.Y-embed --libs’ primeiro e use como
     fallback ‘pkg-config python-X.Y --libs’ (sem ‘--embed’) se o
     comando anterior falhar (substitua ‘X.Y’ pela versão do Python).

     On the other hand, ‘pkg-config python3.8 --libs’ no longer contains
     ‘-lpython3.8’.  C extensions must not be linked to libpython
     (except on Android, case handled by the script); this change is
     backward incompatible on purpose.

   - bpo-36786(2): “make install” now runs compileall in parallel.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36721

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36786


File: python.info,  Node: Windows<48>,  Next: macOS<39>,  Prev: Construção<56>,  Up: Python 3 8 0 beta 1

1.23.58.7 Windows
.................

   - bpo-36965(1): include of STATUS_CONTROL_C_EXIT without depending on
     MSC compiler

   - bpo-35926(2): Update to OpenSSL 1.1.1b for Windows.

   - bpo-29883(3): Add Windows support for UDP transports for the
     Proactor Event Loop.  Patch by Adam Meily.

   - bpo-33407(4): The *note Py_DEPRECATED(): ab3. macro has been
     implemented for MSVC.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36965

   (2) https://bugs.python.org/issue?@action=redirect&bpo=35926

   (3) https://bugs.python.org/issue?@action=redirect&bpo=29883

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33407


File: python.info,  Node: macOS<39>,  Next: IDLE<37>,  Prev: Windows<48>,  Up: Python 3 8 0 beta 1

1.23.58.8 macOS
...............

   - bpo-36231(1): Support building Python on macOS without /usr/include
     installed.  As of macOS 10.14, system header files are only
     available within an SDK provided by either the Command Line Tools
     or the Xcode app.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36231


File: python.info,  Node: IDLE<37>,  Next: Ferramentas/Demos<27>,  Prev: macOS<39>,  Up: Python 3 8 0 beta 1

1.23.58.9 IDLE
..............

   - bpo-35610(1): Replace now redundant .context_use_ps1 with
     .prompt_last_line.  This finishes change started in bpo-31858(2).

   - bpo-37038(3): Make idlelib.run runnable; add test clause.

   - bpo-36958(4): Print any argument other than None or int passed to
     SystemExit or sys.exit().

   - bpo-36807(5): When saving a file, call os.fsync() so bits are
     flushed to e.g.  USB drive.

   - bpo-32411(6): In browser.py, remove extraneous sorting by line
     number since dictionary was created in line number order.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35610

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31858

   (3) https://bugs.python.org/issue?@action=redirect&bpo=37038

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36958

   (5) https://bugs.python.org/issue?@action=redirect&bpo=36807

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32411


File: python.info,  Node: Ferramentas/Demos<27>,  Next: API C<52>,  Prev: IDLE<37>,  Up: Python 3 8 0 beta 1

1.23.58.10 Ferramentas/Demos
............................

   - bpo-37053(1): Handle strings like u”bar” correctly in
     Tools/parser/unparse.py.  Patch by Chih-Hsuan Yen.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=37053


File: python.info,  Node: API C<52>,  Prev: Ferramentas/Demos<27>,  Up: Python 3 8 0 beta 1

1.23.58.11 API C
................

   - bpo-36763(1): Implement the PEP 587(2) “Python Initialization
     Configuration”.

   - bpo-36379(3): Fix crashes when attempting to use the 'modulo'
     parameter when ‘__ipow__’ is implemented in C.

   - bpo-37107(4): Update *note PyObject_CallMethodObjArgs(): 1b74. and
     ‘_PyObject_CallMethodIdObjArgs’ to use ‘_PyObject_GetMethod’ to
     avoid creating a bound method object in many cases.  Patch by
     Michael J. Sullivan.

   - bpo-36974(5): Implement PEP 590(6): Vectorcall: a fast calling
     protocol for CPython.  This is a new protocol to optimize calls of
     custom callable objects.

   - bpo-36763(7): ‘Py_Main()’ now returns the exitcode rather than
     calling ‘Py_Exit(exitcode)’ when calling ‘PyErr_Print()’ if the
     current exception type is ‘SystemExit’.

   - bpo-36922(8): Add new type flag ‘Py_TPFLAGS_METHOD_DESCRIPTOR’ for
     objects behaving like unbound methods.  These are objects
     supporting the optimization given by the
     ‘LOAD_METHOD’/‘CALL_METHOD’ opcodes.  See PEP 590.

   - bpo-36728(9): The ‘PyEval_ReInitThreads()’ function has been
     removed from the C API. It should not be called explicitly: use
     *note PyOS_AfterFork_Child(): 3fb. instead.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36763

   (2) https://peps.python.org/pep-0587/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36379

   (4) https://bugs.python.org/issue?@action=redirect&bpo=37107

   (5) https://bugs.python.org/issue?@action=redirect&bpo=36974

   (6) https://peps.python.org/pep-0590/

   (7) https://bugs.python.org/issue?@action=redirect&bpo=36763

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36922

   (9) https://bugs.python.org/issue?@action=redirect&bpo=36728


File: python.info,  Node: Python 3 8 0 alpha 4,  Next: Python 3 8 0 alpha 3,  Prev: Python 3 8 0 beta 1,  Up: Changelog

1.23.59 Python 3.8.0 alpha 4
----------------------------

'Data de lançamento: 2019-05-06'

* Menu:

* Segurança: Segurança<40>.
* Núcleo e embutidos: Núcleo e embutidos<132>.
* Biblioteca: Biblioteca<134>.
* Documentação: Documentação<49>.
* Testes: Testes<52>.
* Construção: Construção<57>.
* Windows: Windows<49>.
* macOS: macOS<40>.
* IDLE: IDLE<38>.
* Ferramentas/Demos: Ferramentas/Demos<28>.
* API C: API C<53>.


File: python.info,  Node: Segurança<40>,  Next: Núcleo e embutidos<132>,  Up: Python 3 8 0 alpha 4

1.23.59.1 Segurança
...................

   - bpo-36742(1): Fixes mishandling of pre-normalization characters in
     urlsplit().

   - bpo-30458(2): Address CVE 2019-9740(3) by disallowing URL paths
     with embedded whitespace or control characters through into the
     underlying http client request.  Such potentially malicious header
     injection URLs now cause an http.client.InvalidURL exception to be
     raised.

   - bpo-35755(4): *note shutil.which(): 4b4. now uses
     ‘os.confstr("CS_PATH")’ if available and if the ‘PATH’ environment
     variable is not set.  Remove also the current directory from
     ‘posixpath.defpath’.  On Unix, *note shutil.which(): 4b4. and the
     *note subprocess: d6. module no longer search the executable in the
     current directory if the ‘PATH’ environment variable is not set.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36742

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30458

   (3) https://www.cve.org/CVERecord?id=CVE-2019-9740

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35755


File: python.info,  Node: Núcleo e embutidos<132>,  Next: Biblioteca<134>,  Prev: Segurança<40>,  Up: Python 3 8 0 alpha 4

1.23.59.2 Núcleo e embutidos
............................

   - bpo-36722(1): In debug build, import now also looks for C
     extensions compiled in release mode and for C extensions compiled
     in the stable ABI.

   - bpo-32849(2): Fix Python Initialization code on FreeBSD to detect
     properly when stdin file descriptor (fd 0) is invalid.

   - bpo-36623(3): Remove parser headers and related function
     declarations that lack implementations after the removal of pgen.

   - bpo-20180(4): ‘dict.pop()’ is now up to 33% faster thanks to
     Argument Clinic.  Patch by Inada Naoki.

   - bpo-36611(5): Debug memory allocators: disable serialno field by
     default from debug hooks on Python memory allocators to reduce the
     memory footprint by 5%.  Enable *note tracemalloc: ff. to get the
     traceback where a memory block has been allocated when a fatal
     memory error is logged to decide where to put a breakpoint.
     Compile Python with ‘PYMEM_DEBUG_SERIALNO’ defined to get back the
     field.

   - bpo-36588(6): On AIX, *note sys.platform: a97. doesn’t contain the
     major version anymore.  Always return ‘'aix'’, instead of ‘'aix3'’
     ..  ‘'aix7'’.  Since older Python versions include the version
     number, it is recommended to always use
     ‘sys.platform.startswith('aix')’.  Contributed by M. Felt.

   - bpo-36549(7): Change str.capitalize to use titlecase for the first
     character instead of uppercase.

   - bpo-36540(8): Implement PEP 570(9) (Python positional-only
     parameters).  Patch by Pablo Galindo.

   - bpo-36475(10): ‘PyEval_AcquireLock()’ and ‘PyEval_AcquireThread()’
     now terminate the current thread if called while the interpreter is
     finalizing, making them consistent with *note
     PyEval_RestoreThread(): 3a9, *note Py_END_ALLOW_THREADS(): a98, and
     *note PyGILState_Ensure(): 3ab.

   - bpo-36504(11): Fix signed integer overflow in _ctypes.c’s
     ‘PyCArrayType_new()’.

   - bpo-20844(12): Fix running script with encoding cookie and LF line
     ending may fail on Windows.

   - bpo-24214(13): Fixed support of the surrogatepass error handler in
     the UTF-8 incremental decoder.

   - bpo-36452(14): Changing ‘dict’ keys during iteration of the dict
     itself, ‘keys()’, ‘values()’, or ‘items()’ will now be detected in
     certain corner cases where keys are deleted/added so that the
     number of keys isn’t changed.  A ‘RuntimeError’ will be raised
     after ‘len(dict)’ iterations.  Contributed by Thomas Perl.

   - bpo-36459(15): Fix a possible double ‘PyMem_FREE()’ due to
     tokenizer.c’s ‘tok_nextc()’.

   - bpo-36433(16): Fixed TypeError message in classmethoddescr_call.

   - bpo-36430(17): Fix a possible reference leak in *note
     itertools.count(): 12c5.

   - bpo-36440(18): Include node names in ‘ParserError’ messages,
     instead of numeric IDs.  Patch by A. Skrobov.

   - bpo-36143(19): Regenerate *note keyword: 84. from the Grammar and
     Tokens file using pgen.  Patch by Pablo Galindo.

   - bpo-18372(20): Add missing *note PyObject_GC_Track(): 154d. calls
     in the *note pickle: a6. module.  Patch by Zackery Spytz.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36722

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32849

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36623

   (4) https://bugs.python.org/issue?@action=redirect&bpo=20180

   (5) https://bugs.python.org/issue?@action=redirect&bpo=36611

   (6) https://bugs.python.org/issue?@action=redirect&bpo=36588

   (7) https://bugs.python.org/issue?@action=redirect&bpo=36549

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36540

   (9) https://peps.python.org/pep-0570/

   (10) https://bugs.python.org/issue?@action=redirect&bpo=36475

   (11) https://bugs.python.org/issue?@action=redirect&bpo=36504

   (12) https://bugs.python.org/issue?@action=redirect&bpo=20844

   (13) https://bugs.python.org/issue?@action=redirect&bpo=24214

   (14) https://bugs.python.org/issue?@action=redirect&bpo=36452

   (15) https://bugs.python.org/issue?@action=redirect&bpo=36459

   (16) https://bugs.python.org/issue?@action=redirect&bpo=36433

   (17) https://bugs.python.org/issue?@action=redirect&bpo=36430

   (18) https://bugs.python.org/issue?@action=redirect&bpo=36440

   (19) https://bugs.python.org/issue?@action=redirect&bpo=36143

   (20) https://bugs.python.org/issue?@action=redirect&bpo=18372


File: python.info,  Node: Biblioteca<134>,  Next: Documentação<49>,  Prev: Núcleo e embutidos<132>,  Up: Python 3 8 0 alpha 4

1.23.59.3 Biblioteca
....................

   - bpo-35952(1): Fix pythoninfo when the compiler is missing.

   - bpo-28238(2): The ‘.find*()’ methods of xml.etree.ElementTree can
     now search for wildcards like ‘{*}tag’ and ‘{ns}*’ that match a tag
     in any namespace or all tags in a namespace.  Patch by Stefan
     Behnel.

   - bpo-26978(3): ‘pathlib.path.link_to()’ is now implemented.  It
     creates a hard link pointing to a path.

   - bpo-1613500(4): *note fileinput.FileInput: 737. now uses the input
     file mode to correctly set the output file mode (previously it was
     hardcoded to ‘'w'’) when ‘inplace=True’ is passed to its
     constructor.

   - bpo-36734(5): Fix compilation of ‘faulthandler.c’ on HP-UX.
     Initialize ‘stack_t current_stack’ to zero using ‘memset()’.

   - bpo-13611(6): The xml.etree.ElementTree packages gained support for
     C14N 2.0 serialisation.  Patch by Stefan Behnel.

   - bpo-36669(7): Add missing matrix multiplication operator support to
     weakref.proxy.

   - bpo-36676(8): The XMLParser() in xml.etree.ElementTree provides
     namespace prefix context to the parser target if it defines the
     callback methods “start_ns()” and/or “end_ns()”.  Patch by Stefan
     Behnel.

   - bpo-36673(9): The TreeBuilder and XMLPullParser in
     xml.etree.ElementTree gained support for parsing comments and
     processing instructions.  Patch by Stefan Behnel.

   - bpo-36650(10): The C version of functools.lru_cache() was treating
     calls with an empty ‘**kwargs’ dictionary as being distinct from
     calls with no keywords at all.  This did not result in an incorrect
     answer, but it did trigger an unexpected cache miss.

   - bpo-28552(11): Fix ‘distutils.sysconfig’ if *note sys.executable:
     3b8. is ‘None’ or an empty string: use *note os.getcwd(): 1682. to
     initialize ‘project_base’.  Fix also the distutils build command:
     don’t use *note sys.executable: 3b8. if it is ‘None’ or an empty
     string.

   - bpo-35755(12): *note shutil.which(): 4b4. and
     ‘distutils.spawn.find_executable’ now use ‘os.confstr("CS_PATH")’
     if available instead of *note os.defpath: 1b79, if the ‘PATH’
     environment variable is not set.  Moreover, don’t use
     ‘os.confstr("CS_PATH")’ nor *note os.defpath: 1b79. if the ‘PATH’
     environment variable is set to an empty string.

   - bpo-25430(13): improve performance of ‘IPNetwork.__contains__()’

   - bpo-30485(14): Path expressions in xml.etree.ElementTree can now
     avoid explicit namespace prefixes for tags (or the “{namespace}tag”
     notation) by passing a default namespace with an empty string
     prefix.

   - bpo-36613(15): Fix *note asyncio: a. wait() not removing callback
     if exception

   - bpo-36598(16): Fix ‘isinstance’ check for Mock objects with spec
     when the code is executed under tracing.  Patch by Karthikeyan
     Singaravelan.

   - bpo-18748(17): In development mode (*note -X: 176. ‘dev’) and in
     debug build, the *note io.IOBase: 1f5. destructor now logs
     ‘close()’ exceptions.  These exceptions are silent by default in
     release mode.

   - bpo-36575(18): The ‘_lsprof’ module now uses internal timer same to
     ‘time.perf_counter()’ by default.  ‘gettimeofday(2)’ was used on
     Unix.  New timer has better resolution on most Unix platforms and
     timings are no longer impacted by system clock updates since
     ‘perf_counter()’ is monotonic.  Patch by Inada Naoki.

   - bpo-33461(19): ‘json.loads’ now emits ‘DeprecationWarning’ when
     ‘encoding’ option is specified.  Patch by Matthias Bussonnier.

   - bpo-36559(20): The random module now prefers the lean internal
     _sha512 module over hashlib for seed(version=2) to optimize import
     time.

   - bpo-17561(21): Set backlog=None as the default for
     socket.create_server.

   - bpo-34373(22): Fix *note time.mktime(): 1228. error handling on AIX
     for year before 1970.

   - bpo-36232(23): Improve error message when trying to open existing
     DBM database that actually doesn’t exist.  Patch by Marco Rougeth.

   - bpo-36546(24): Add statistics.quantiles()

   - bpo-36050(25): Optimized ‘http.client.HTTPResponse.read()’ for
     large response.  Patch by Inada Naoki.

   - bpo-36522(26): If 'debuglevel' is set to >0 in *note http.client:
     6f, print all values for headers with multiple values for the same
     header name.  Patch by Matt Houglum.

   - bpo-36492(27): Deprecated passing required arguments like 'func' as
     keyword arguments in functions which should accept arbitrary
     keyword arguments and pass them to other function.  Arbitrary
     keyword arguments (even with names “self” and “func”) can now be
     passed to these functions if the required arguments are passed as
     positional arguments.

   - bpo-27181(28): Add statistics.geometric_mean().

   - bpo-30427(29): ‘os.path.normcase()’ relies on ‘os.fspath()’ to
     check the type of its argument.  Redundant checks have been removed
     from its ‘posixpath.normcase()’ and ‘ntpath.normcase()’
     implementations.  Patch by Wolfgang Maier.

   - bpo-36385(30): Stop rejecting IPv4 octets for being ambiguously
     octal.  Leading zeros are ignored, and no longer are assumed to
     specify octal octets.  Octets are always decimal numbers.  Octets
     must still be no more than three digits, including leading zeroes.

   - bpo-36434(31): Errors during writing to a ZIP file no longer
     prevent to properly close it.

   - bpo-36407(32): Fixed wrong indentation writing for CDATA section in
     xml.dom.minidom.  Patch by Vladimir Surjaninov.

   - bpo-36326(33): inspect.getdoc() can now find docstrings for member
     objects when __slots__ is a dictionary.

   - bpo-36366(34): Calling ‘stop()’ on an unstarted or stopped *note
     unittest.mock.patch(): ec1. object will now return ‘None’ instead
     of raising *note RuntimeError: 195, making the method idempotent.
     Patch by Karthikeyan Singaravelan.

   - bpo-36348(35): The ‘imap.IMAP4.logout()’ method no longer ignores
     silently arbitrary exceptions.

   - bpo-31904(36): Add time module support and fix test_time failures
     for VxWorks.

   - bpo-36227(37): Added support for keyword arguments
     ‘default_namespace’ and ‘xml_declaration’ in functions
     ‘ElementTree.tostring()’ and ‘ElementTree.tostringlist()’.

   - bpo-36004(38): Added new alternate constructors *note
     datetime.date.fromisocalendar(): 9f4. and *note
     datetime.datetime.fromisocalendar(): 9f5, which construct date
     objects from ISO year, week number and weekday; these are the
     inverse of each class’s ‘isocalendar’ method.  Patch by Paul
     Ganssle.

   - bpo-35936(39): *note modulefinder: 91. no longer depends on the
     deprecated *note imp: 76. module, and the initializer for *note
     modulefinder.ModuleFinder: 1b7a. now has immutable default
     arguments.  Patch by Brandt Bucher.

   - bpo-35376(40): *note modulefinder: 91. correctly handles modules
     that have the same name as a bad package.  Patch by Brandt Bucher.

   - bpo-17396(41): *note modulefinder: 91. no longer crashes when
     encountering syntax errors in followed imports.  Patch by Brandt
     Bucher.

   - bpo-35934(42): Added *note create_server(): a35. and *note
     has_dualstack_ipv6(): a36. convenience functions to automate the
     necessary tasks usually involved when creating a server socket,
     including accepting both IPv4 and IPv6 connections on the same
     socket.  (Contributed by Giampaolo Rodola in bpo-17561(43).)

   - bpo-23078(44): Add support for *note classmethod(): 166. and *note
     staticmethod(): 416. to *note unittest.mock.create_autospec():
     16f4.  Initial patch by Felipe Ochoa.

   - bpo-35416(45): Fix potential resource warnings in distutils.  Patch
     by Mickaël Schoentgen.

   - bpo-25451(46): Add transparency methods to ‘tkinter.PhotoImage’.
     Patch by Zackery Spytz.

   - bpo-35082(47): Don’t return deleted attributes when calling dir on
     a *note unittest.mock.Mock: a54.

   - bpo-34547(48): *note wsgiref.handlers.BaseHandler: 1b67. now
     handles abrupt client connection terminations gracefully.  Patch by
     Petter Strandmark.

   - bpo-31658(49): *note xml.sax.parse(): 1b7b. now supports *note
     path-like: 2a0.  Patch by Mickaël Schoentgen.

   - bpo-34139(50): Remove stale unix datagram socket before binding

   - bpo-33530(51): Implemented Happy Eyeballs in
     ‘asyncio.create_connection()’.  Added two new arguments,
     'happy_eyeballs_delay' and 'interleave', to specify Happy Eyeballs
     behavior.

   - bpo-33291(52): Do not raise AttributeError when calling the inspect
     functions isgeneratorfunction, iscoroutinefunction,
     isasyncgenfunction on a method created from an arbitrary callable.
     Instead, return False.

   - bpo-31310(53): Fix the multiprocessing.semaphore_tracker so it is
     reused by child processes

   - bpo-31292(54): Fix ‘setup.py check --restructuredtext’ for files
     containing ‘include’ directives.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35952

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28238

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26978

   (4) https://bugs.python.org/issue?@action=redirect&bpo=1613500

   (5) https://bugs.python.org/issue?@action=redirect&bpo=36734

   (6) https://bugs.python.org/issue?@action=redirect&bpo=13611

   (7) https://bugs.python.org/issue?@action=redirect&bpo=36669

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36676

   (9) https://bugs.python.org/issue?@action=redirect&bpo=36673

   (10) https://bugs.python.org/issue?@action=redirect&bpo=36650

   (11) https://bugs.python.org/issue?@action=redirect&bpo=28552

   (12) https://bugs.python.org/issue?@action=redirect&bpo=35755

   (13) https://bugs.python.org/issue?@action=redirect&bpo=25430

   (14) https://bugs.python.org/issue?@action=redirect&bpo=30485

   (15) https://bugs.python.org/issue?@action=redirect&bpo=36613

   (16) https://bugs.python.org/issue?@action=redirect&bpo=36598

   (17) https://bugs.python.org/issue?@action=redirect&bpo=18748

   (18) https://bugs.python.org/issue?@action=redirect&bpo=36575

   (19) https://bugs.python.org/issue?@action=redirect&bpo=33461

   (20) https://bugs.python.org/issue?@action=redirect&bpo=36559

   (21) https://bugs.python.org/issue?@action=redirect&bpo=17561

   (22) https://bugs.python.org/issue?@action=redirect&bpo=34373

   (23) https://bugs.python.org/issue?@action=redirect&bpo=36232

   (24) https://bugs.python.org/issue?@action=redirect&bpo=36546

   (25) https://bugs.python.org/issue?@action=redirect&bpo=36050

   (26) https://bugs.python.org/issue?@action=redirect&bpo=36522

   (27) https://bugs.python.org/issue?@action=redirect&bpo=36492

   (28) https://bugs.python.org/issue?@action=redirect&bpo=27181

   (29) https://bugs.python.org/issue?@action=redirect&bpo=30427

   (30) https://bugs.python.org/issue?@action=redirect&bpo=36385

   (31) https://bugs.python.org/issue?@action=redirect&bpo=36434

   (32) https://bugs.python.org/issue?@action=redirect&bpo=36407

   (33) https://bugs.python.org/issue?@action=redirect&bpo=36326

   (34) https://bugs.python.org/issue?@action=redirect&bpo=36366

   (35) https://bugs.python.org/issue?@action=redirect&bpo=36348

   (36) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (37) https://bugs.python.org/issue?@action=redirect&bpo=36227

   (38) https://bugs.python.org/issue?@action=redirect&bpo=36004

   (39) https://bugs.python.org/issue?@action=redirect&bpo=35936

   (40) https://bugs.python.org/issue?@action=redirect&bpo=35376

   (41) https://bugs.python.org/issue?@action=redirect&bpo=17396

   (42) https://bugs.python.org/issue?@action=redirect&bpo=35934

   (43) https://bugs.python.org/issue?@action=redirect&bpo=17561

   (44) https://bugs.python.org/issue?@action=redirect&bpo=23078

   (45) https://bugs.python.org/issue?@action=redirect&bpo=35416

   (46) https://bugs.python.org/issue?@action=redirect&bpo=25451

   (47) https://bugs.python.org/issue?@action=redirect&bpo=35082

   (48) https://bugs.python.org/issue?@action=redirect&bpo=34547

   (49) https://bugs.python.org/issue?@action=redirect&bpo=31658

   (50) https://bugs.python.org/issue?@action=redirect&bpo=34139

   (51) https://bugs.python.org/issue?@action=redirect&bpo=33530

   (52) https://bugs.python.org/issue?@action=redirect&bpo=33291

   (53) https://bugs.python.org/issue?@action=redirect&bpo=31310

   (54) https://bugs.python.org/issue?@action=redirect&bpo=31292


File: python.info,  Node: Documentação<49>,  Next: Testes<52>,  Prev: Biblioteca<134>,  Up: Python 3 8 0 alpha 4

1.23.59.4 Documentação
......................

   - bpo-36625(1): Remove obsolete comments from docstrings in
     fractions.Fraction

   - bpo-30840(2): Document relative imports

   - bpo-36523(3): Add docstring for io.IOBase.writelines().

   - bpo-36425(4): New documentation translation: Simplified Chinese(5).

   - bpo-36345(6): Avoid the duplication of code from
     ‘Tools/scripts/serve.py’ in using the ‘literalinclude’ directive
     for the basic wsgiref-based web server in the documentation of
     *note wsgiref: 118.  Contributed by Stéphane Wirtel.

   - bpo-36345(7): Using the code of the ‘Tools/scripts/serve.py’ script
     as an example in the *note wsgiref: 118. documentation.
     Contributed by Stéphane Wirtel.

   - bpo-36157(8): Added documentation for PyInterpreterState_Main().

   - bpo-33043(9): Updates the docs.python.org page with the addition of
     a ‘Contributing to Docs’ link at the end of the page (between
     ‘Reporting Bugs’ and ‘About Documentation’).  Updates the ‘Found a
     Bug’ page with additional links and information in the
     Documentation Bugs section.

   - bpo-35581(10): @typing.type_check_only now allows type stubs to
     mark functions and classes not available during runtime.

   - bpo-33832(11): Add glossary entry for ‘magic method’.

   - bpo-32913(12): Added re.Match.groupdict example to regex HOWTO.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36625

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30840

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36523

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36425

   (5) https://docs.python.org/zh-cn/

   (6) https://bugs.python.org/issue?@action=redirect&bpo=36345

   (7) https://bugs.python.org/issue?@action=redirect&bpo=36345

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36157

   (9) https://bugs.python.org/issue?@action=redirect&bpo=33043

   (10) https://bugs.python.org/issue?@action=redirect&bpo=35581

   (11) https://bugs.python.org/issue?@action=redirect&bpo=33832

   (12) https://bugs.python.org/issue?@action=redirect&bpo=32913


File: python.info,  Node: Testes<52>,  Next: Construção<57>,  Prev: Documentação<49>,  Up: Python 3 8 0 alpha 4

1.23.59.5 Testes
................

   - bpo-36719(1): regrtest now always detects uncollectable objects.
     Previously, the check was only enabled by ‘--findleaks’.  The check
     now also works with ‘-jN/--multiprocess N’.  ‘--findleaks’ becomes
     a deprecated alias to ‘--fail-env-changed’.

   - bpo-36725(2): When using multiprocessing mode (-jN), regrtest now
     better reports errors if a worker process fails, and it exits
     immediately on a worker thread failure or when interrupted.

   - bpo-36454(3): Change test_time.test_monotonic() to test only the
     lower bound of elapsed time after a sleep command rather than the
     upper bound.  This prevents unnecessary test failures on slow
     buildbots.  Patch by Victor Stinner.

   - bpo-32424(4): Improve test coverage for xml.etree.ElementTree.
     Patch by Gordon P. Hemsley.

   - bpo-32424(5): Fix typo in test_cyclic_gc() test for
     xml.etree.ElementTree.  Patch by Gordon P. Hemsley.

   - bpo-36635(6): Add a new ‘_testinternalcapi’ module to test the
     internal C API.

   - bpo-36629(7): Fix ‘test_imap4_host_default_value()’ of
     ‘test_imaplib’: catch also *note errno.ENETUNREACH: 1b7e. error.

   - bpo-36611(8): Fix ‘test_sys.test_getallocatedblocks()’ when *note
     tracemalloc: ff. is enabled.

   - bpo-36560(9): Fix reference leak hunting in regrtest: compute also
     deltas (of reference count, allocated memory blocks, file
     descriptor count) during warmup, to ensure that everything is
     initialized before starting to hunt reference leaks.

   - bpo-36565(10): Fix reference hunting (‘python3 -m test -R 3:3’)
     when Python has no built-in abc module.

   - bpo-31904(11): Port test_resource to VxWorks: skip tests cases
     setting RLIMIT_FSIZE and RLIMIT_CPU.

   - bpo-31904(12): Fix test_tabnanny on VxWorks: adjust ENOENT error
     message.

   - bpo-36436(13): Fix ‘_testcapi.pymem_buffer_overflow()’: handle
     memory allocation failure.

   - bpo-31904(14): Fix test_utf8_mode on VxWorks: Python always use
     UTF-8 on VxWorks.

   - bpo-36341(15): Fix tests that may fail with PermissionError upon
     calling bind() on AF_UNIX sockets.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36719

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36725

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36454

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32424

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32424

   (6) https://bugs.python.org/issue?@action=redirect&bpo=36635

   (7) https://bugs.python.org/issue?@action=redirect&bpo=36629

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36611

   (9) https://bugs.python.org/issue?@action=redirect&bpo=36560

   (10) https://bugs.python.org/issue?@action=redirect&bpo=36565

   (11) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (12) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (13) https://bugs.python.org/issue?@action=redirect&bpo=36436

   (14) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (15) https://bugs.python.org/issue?@action=redirect&bpo=36341


File: python.info,  Node: Construção<57>,  Next: Windows<49>,  Prev: Testes<52>,  Up: Python 3 8 0 alpha 4

1.23.59.6 Construção
....................

   - bpo-36747(1): Remove the stale scriptsinstall Makefile target.

   - bpo-21536(2): On Unix, C extensions are no longer linked to
     libpython except on Android and Cygwin.

     It is now possible for a statically linked Python to load a C
     extension built using a shared library Python.

     When Python is embedded, ‘libpython’ must not be loaded with
     ‘RTLD_LOCAL’, but ‘RTLD_GLOBAL’ instead.  Previously, using
     ‘RTLD_LOCAL’, it was already not possible to load C extensions
     which were not linked to ‘libpython’, such as C extensions of the
     standard library built by the ‘*shared*’ section of
     ‘Modules/Setup’.

     distutils, python-config and python-config.py have been modified.

   - bpo-36707(3): ‘./configure --with-pymalloc’ no longer adds the ‘m’
     flag to SOABI (sys.implementation.cache_tag).  Enabling or
     disabling pymalloc has no impact on the ABI.

   - bpo-36635(4): Change ‘PyAPI_FUNC(type)’, ‘PyAPI_DATA(type)’ and
     ‘PyMODINIT_FUNC’ macros of ‘pyport.h’ when ‘Py_BUILD_CORE_MODULE’
     is defined.  The ‘Py_BUILD_CORE_MODULE’ define must be now be used
     to build a C extension as a dynamic library accessing Python
     internals: export the ‘PyInit_XXX()’ function in DLL exports on
     Windows.

   - bpo-31904(5): Don’t build the ‘_crypt’ extension on VxWorks.

   - bpo-36618(6): Add ‘-fmax-type-align=8’ to CFLAGS when clang
     compiler is detected.  The pymalloc memory allocator aligns memory
     on 8 bytes.  On x86-64, clang expects alignment on 16 bytes by
     default and so uses MOVAPS instruction which can lead to
     segmentation fault.  Instruct clang that Python is limited to
     alignment on 8 bytes to use MOVUPS instruction instead: slower but
     don’t trigger a SIGSEGV if the memory is not aligned on 16 bytes.
     Sadly, the flag must be added to ‘CFLAGS’ and not just
     ‘CFLAGS_NODIST’, since third party C extensions can have the same
     issue.

   - bpo-36605(7): ‘make tags’ and ‘make TAGS’ now also parse
     ‘Modules/_io/*.c’ and ‘Modules/_io/*.h’.

   - bpo-36465(8): Release builds and debug builds are now ABI
     compatible: defining the ‘Py_DEBUG’ macro no longer implies the
     ‘Py_TRACE_REFS’ macro, which introduces the only ABI
     incompatibility.  The ‘Py_TRACE_REFS’ macro, which adds the *note
     sys.getobjects(): 427. function and the *note PYTHONDUMPREFS: 9ae.
     environment variable, can be set using the new ‘./configure
     --with-trace-refs’ build option.

   - bpo-36577(9): setup.py now correctly reports missing OpenSSL
     headers and libraries again.

   - bpo-36544(10): Fix regression introduced in bpo-36146(11)
     refactoring setup.py

   - bpo-36508(12): ‘python-config --ldflags’ no longer includes flags
     of the ‘LINKFORSHARED’ variable.  The ‘LINKFORSHARED’ variable must
     only be used to build executables.

   - bpo-36503(13): Remove references to “aix3” and “aix4”.  Patch by M.
     Felt.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36747

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21536

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36707

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36635

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (6) https://bugs.python.org/issue?@action=redirect&bpo=36618

   (7) https://bugs.python.org/issue?@action=redirect&bpo=36605

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36465

   (9) https://bugs.python.org/issue?@action=redirect&bpo=36577

   (10) https://bugs.python.org/issue?@action=redirect&bpo=36544

   (11) https://bugs.python.org/issue?@action=redirect&bpo=36146

   (12) https://bugs.python.org/issue?@action=redirect&bpo=36508

   (13) https://bugs.python.org/issue?@action=redirect&bpo=36503


File: python.info,  Node: Windows<49>,  Next: macOS<40>,  Prev: Construção<57>,  Up: Python 3 8 0 alpha 4

1.23.59.7 Windows
.................

   - bpo-35920(1): Added platform.win32_edition() and
     platform.win32_is_iot().  Added support for cross-compiling
     packages for Windows ARM32.  Skip tests that are not expected to
     work on Windows IoT Core ARM32.

   - bpo-36649(2): Remove trailing spaces for registry keys when
     installed via the Store.

   - bpo-34144(3): Fixed activate.bat to correctly update codepage when
     chcp.com returns dots in output.  Patch by Lorenz Mende.

   - bpo-36509(4): Added preset-iot layout for Windows IoT ARM
     containers.  This layout doesn’t contain UI components like tkinter
     or IDLE. It also doesn’t contain files to support on-target builds
     since Windows ARM32 builds must be cross-compiled when using MSVC.

   - bpo-35941(5): enum_certificates function of the ssl module now
     returns certificates from all available certificate stores inside
     windows in a query instead of returning only certificates from the
     system wide certificate store.  This includes certificates from
     these certificate stores: local machine, local machine enterprise,
     local machine group policy, current user, current user group
     policy, services, users.  ssl.enum_crls() function is changed in
     the same way to return all certificate revocation lists inside the
     windows certificate revocation list stores.

   - bpo-36441(6): Fixes creating a venv when debug binaries are
     installed.

   - bpo-36085(7): Enable better DLL resolution on Windows by using safe
     DLL search paths and adding *note os.add_dll_directory(): 9f2.

   - bpo-36010(8): Add the venv standard library module to the nuget
     distribution for Windows.

   - bpo-29515(9): Add the following socket module constants on Windows:
     IPPROTO_AH IPPROTO_CBT IPPROTO_DSTOPTS IPPROTO_EGP IPPROTO_ESP
     IPPROTO_FRAGMENT IPPROTO_GGP IPPROTO_HOPOPTS IPPROTO_ICLFXBM
     IPPROTO_ICMPV6 IPPROTO_IDP IPPROTO_IGMP IPPROTO_IGP IPPROTO_IPV4
     IPPROTO_IPV6 IPPROTO_L2TP IPPROTO_MAX IPPROTO_ND IPPROTO_NONE
     IPPROTO_PGM IPPROTO_PIM IPPROTO_PUP IPPROTO_RDP IPPROTO_ROUTING
     IPPROTO_SCTP IPPROTO_ST

   - bpo-35947(10): Added current version of libffi to
     cpython-source-deps.  Change _ctypes to use current version of
     libffi on Windows.

   - bpo-34060(11): Report system load when running test suite on
     Windows.  Patch by Ammar Askar.  Based on prior work by Jeremy
     Kloth.

   - bpo-31512(12): With the Windows 10 Creators Update, non-elevated
     users can now create symlinks as long as the computer has Developer
     Mode enabled.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35920

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36649

   (3) https://bugs.python.org/issue?@action=redirect&bpo=34144

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36509

   (5) https://bugs.python.org/issue?@action=redirect&bpo=35941

   (6) https://bugs.python.org/issue?@action=redirect&bpo=36441

   (7) https://bugs.python.org/issue?@action=redirect&bpo=36085

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36010

   (9) https://bugs.python.org/issue?@action=redirect&bpo=29515

   (10) https://bugs.python.org/issue?@action=redirect&bpo=35947

   (11) https://bugs.python.org/issue?@action=redirect&bpo=34060

   (12) https://bugs.python.org/issue?@action=redirect&bpo=31512


File: python.info,  Node: macOS<40>,  Next: IDLE<38>,  Prev: Windows<49>,  Up: Python 3 8 0 alpha 4

1.23.59.8 macOS
...............

   - bpo-34602(1): Avoid failures setting macOS stack resource limit
     with resource.setrlimit.  This reverts an earlier fix for
     bpo-18075(2) which forced a non-default stack size when building
     the interpreter executable on macOS.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34602

   (2) https://bugs.python.org/issue?@action=redirect&bpo=18075


File: python.info,  Node: IDLE<38>,  Next: Ferramentas/Demos<28>,  Prev: macOS<40>,  Up: Python 3 8 0 alpha 4

1.23.59.9 IDLE
..............

   - bpo-36429(1): Fix starting IDLE with pyshell.  Add idlelib.pyshell
     alias at top; remove pyshell alias at bottom.  Remove obsolete
     __name__==’__main__’ command.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36429


File: python.info,  Node: Ferramentas/Demos<28>,  Next: API C<53>,  Prev: IDLE<38>,  Up: Python 3 8 0 alpha 4

1.23.59.10 Ferramentas/Demos
............................

   - bpo-14546(1): Fix the argument handling in Tools/scripts/lll.py.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14546


File: python.info,  Node: API C<53>,  Prev: Ferramentas/Demos<28>,  Up: Python 3 8 0 alpha 4

1.23.59.11 API C
................

   - bpo-36763(1): Fix memory leak in ‘Py_SetStandardStreamEncoding()’:
     release memory if the function is called twice.

   - bpo-36641(2): *note PyDoc_VAR: 1b85.(name) and *note PyDoc_STRVAR:
     1aea.(name, str) now create ‘static const char name[]’ instead of
     ‘static char name[]’.  Patch by Inada Naoki.

   - bpo-36389(3): Change the value of ‘CLEANBYTE’, ‘DEADDYTE’ and
     ‘FORBIDDENBYTE’ internal constants used by debug hooks on Python
     memory allocators (*note PyMem_SetupDebugHooks(): c85. function).
     Byte patterns ‘0xCB’, ‘0xDB’ and ‘0xFB’ have been replaced with
     ‘0xCD’, ‘0xDD’ and ‘0xFD’ to use the same values than Windows CRT
     debug ‘malloc()’ and ‘free()’.

   - bpo-36443(4): Since Python 3.7.0, calling *note Py_DecodeLocale():
     be0. before *note Py_Initialize(): 8b1. produces mojibake if the
     ‘LC_CTYPE’ locale is coerced and/or if the UTF-8 Mode is enabled by
     the user configuration.  The LC_CTYPE coercion and UTF-8 Mode are
     now disabled by default to fix the mojibake issue.  They must now
     be enabled explicitly (opt-in) using the new ‘_Py_PreInitialize()’
     API with ‘_PyPreConfig’.

   - bpo-36025(5): Fixed an accidental change to the datetime C API
     where the arguments to the *note PyDate_FromTimestamp(): 1b86.
     function were incorrectly interpreted as a single timestamp rather
     than an arguments tuple, which causes existing code to start
     raising *note TypeError: 2c3.  The backwards-incompatible change
     was only present in alpha releases of Python 3.8.  Patch by Paul
     Ganssle.

   - bpo-35810(6): Modify ‘PyObject_Init’ to correctly increase the
     refcount of heap-allocated Type objects.  Also fix the refcounts of
     the heap-allocated types that were either doing this manually or
     not decreasing the type’s refcount in tp_dealloc

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36763

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36641

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36389

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36443

   (5) https://bugs.python.org/issue?@action=redirect&bpo=36025

   (6) https://bugs.python.org/issue?@action=redirect&bpo=35810


File: python.info,  Node: Python 3 8 0 alpha 3,  Next: Python 3 8 0 alpha 2,  Prev: Python 3 8 0 alpha 4,  Up: Changelog

1.23.60 Python 3.8.0 alpha 3
----------------------------

'Data de lançamento: 2019-03-25'

* Menu:

* Segurança: Segurança<41>.
* Núcleo e embutidos: Núcleo e embutidos<133>.
* Biblioteca: Biblioteca<135>.
* Documentação: Documentação<50>.
* Testes: Testes<53>.
* Construção: Construção<58>.
* Windows: Windows<50>.
* IDLE: IDLE<39>.
* Ferramentas/Demos: Ferramentas/Demos<29>.
* API C: API C<54>.


File: python.info,  Node: Segurança<41>,  Next: Núcleo e embutidos<133>,  Up: Python 3 8 0 alpha 3

1.23.60.1 Segurança
...................

   - bpo-36216(1): Changes urlsplit() to raise ValueError when the URL
     contains characters that decompose under IDNA encoding
     (NFKC-normalization) into characters that affect how the URL is
     parsed.

   - bpo-35121(2): Don’t send cookies of domain A without Domain
     attribute to domain B when domain A is a suffix match of domain B
     while using a cookiejar with *note
     http.cookiejar.DefaultCookiePolicy: 1b89. policy.  Patch by
     Karthikeyan Singaravelan.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36216

   (2) https://bugs.python.org/issue?@action=redirect&bpo=35121


File: python.info,  Node: Núcleo e embutidos<133>,  Next: Biblioteca<135>,  Prev: Segurança<41>,  Up: Python 3 8 0 alpha 3

1.23.60.2 Núcleo e embutidos
............................

   - bpo-36421(1): Fix a possible double decref in _ctypes.c’s
     ‘PyCArrayType_new()’.

   - bpo-36412(2): Fix a possible crash when creating a new dictionary.

   - bpo-36398(3): Fix a possible crash in ‘structseq_repr()’.

   - bpo-36256(4): Fix bug in parsermodule when parsing a state in a DFA
     that has two or more arcs with labels of the same type.  Patch by
     Pablo Galindo.

   - bpo-36365(5): repr(structseq) is no longer limited to 512 bytes.

   - bpo-36374(6): Fix a possible null pointer dereference in
     ‘merge_consts_recursive()’.  Patch by Zackery Spytz.

   - bpo-36236(7): At Python initialization, the current directory is no
     longer prepended to *note sys.path: 3b4. if it has been removed.

   - bpo-36352(8): Python initialization now fails with an error, rather
     than silently truncating paths, if a path is too long.

   - bpo-36301(9): Python initialization now fails if decoding
     ‘pybuilddir.txt’ configuration file fails at startup.

   - bpo-36333(10): Fix leak in _PyRuntimeState_Fini.  Contributed by
     Stéphane Wirtel.

   - bpo-36332(11): The builtin *note compile(): 192. can now handle AST
     objects that contain assignment expressions.  Patch by Pablo
     Galindo.

   - bpo-36282(12): Improved error message for too much positional
     arguments in some builtin functions.

   - bpo-30040(13): New empty dict uses fewer memory for now.  It used
     more memory than empty dict created by ‘dict.clear()’.  And empty
     dict creation and deletion is about 2x faster.  Patch by Inada
     Naoki.

   - bpo-36262(14): Fix an unlikely memory leak on conversion from
     string to float in the function ‘_Py_dg_strtod()’ used by
     ‘float(str)’, ‘complex(str)’, *note pickle.load(): d32, *note
     marshal.load(): 1b8b, etc.

   - bpo-36252(15): Update Unicode databases to version 12.0.0.

   - bpo-36218(16): Fix a segfault occurring when sorting a list of
     heterogeneous values.  Patch contributed by Rémi Lapeyre and Elliot
     Gorokhovsky.

   - bpo-36188(17): Cleaned up left-over vestiges of Python 2 unbound
     method handling in method objects and documentation.  Patch by
     Martijn Pieters

   - bpo-36124(18): Add a new interpreter-specific dict and expose it in
     the C-API via PyInterpreterState_GetDict().  This parallels
     PyThreadState_GetDict().  However, extension modules should
     continue using PyModule_GetState() for their own internal
     per-interpreter state.

   - bpo-35975(19): Add a ‘feature_version’ flag to ‘ast.parse()’
     (documented) and ‘compile()’ (hidden) that allows tweaking the
     parser to support older versions of the grammar.  In particular, if
     ‘feature_version’ is 5 or 6, the hacks for the ‘async’ and ‘await’
     keyword from PEP 492 are reinstated.  (For 7 or higher, these are
     unconditionally treated as keywords, but they are still special
     tokens rather than ‘NAME’ tokens that the parser driver
     recognizes.)

   - bpo-31904(20): Use UTF-8 as the system encoding on VxWorks.

   - bpo-36048(21): The *note __index__(): 71d. special method will be
     used instead of *note __int__(): 71c. for implicit conversion of
     Python numbers to C integers.  Using the ‘__int__()’ method in
     implicit conversions has been deprecated.

   - bpo-35808(22): Retire pgen and use a modified version of pgen2 to
     generate the parser.  Patch by Pablo Galindo.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36421

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36412

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36398

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36256

   (5) https://bugs.python.org/issue?@action=redirect&bpo=36365

   (6) https://bugs.python.org/issue?@action=redirect&bpo=36374

   (7) https://bugs.python.org/issue?@action=redirect&bpo=36236

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36352

   (9) https://bugs.python.org/issue?@action=redirect&bpo=36301

   (10) https://bugs.python.org/issue?@action=redirect&bpo=36333

   (11) https://bugs.python.org/issue?@action=redirect&bpo=36332

   (12) https://bugs.python.org/issue?@action=redirect&bpo=36282

   (13) https://bugs.python.org/issue?@action=redirect&bpo=30040

   (14) https://bugs.python.org/issue?@action=redirect&bpo=36262

   (15) https://bugs.python.org/issue?@action=redirect&bpo=36252

   (16) https://bugs.python.org/issue?@action=redirect&bpo=36218

   (17) https://bugs.python.org/issue?@action=redirect&bpo=36188

   (18) https://bugs.python.org/issue?@action=redirect&bpo=36124

   (19) https://bugs.python.org/issue?@action=redirect&bpo=35975

   (20) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (21) https://bugs.python.org/issue?@action=redirect&bpo=36048

   (22) https://bugs.python.org/issue?@action=redirect&bpo=35808


File: python.info,  Node: Biblioteca<135>,  Next: Documentação<50>,  Prev: Núcleo e embutidos<133>,  Up: Python 3 8 0 alpha 3

1.23.60.3 Biblioteca
....................

   - bpo-36401(1): The class documentation created by pydoc now has a
     separate section for readonly properties.

   - bpo-36320(2): The typing.NamedTuple() class has deprecated the
     _field_types attribute in favor of the __annotations__ attribute
     which carried the same information.  Also, both attributes were
     converted from OrderedDict to a regular dict.

   - bpo-34745(3): Fix *note asyncio: a. ssl memory issues caused by
     circular references

   - bpo-36324(4): Add method to statistics.NormalDist for computing the
     inverse cumulative normal distribution.

   - bpo-36321(5): collections.namedtuple() misspelled the name of an
     attribute.  To be consistent with typing.NamedTuple, the attribute
     name should have been “_field_defaults” instead of
     “_fields_defaults”.  For backwards compatibility, both spellings
     are now created.  The misspelled version may be removed in the
     future.

   - bpo-36297(6): “unicode_internal” codec is removed.  It was
     deprecated since Python 3.3.  Patch by Inada Naoki.

   - bpo-36298(7): Raise ModuleNotFoundError in pyclbr when a module
     can’t be found.  Thanks to ‘mental’ for the bug report.

   - bpo-36268(8): Switch the default format used for writing tars with
     *note tarfile: de. to the modern POSIX.1-2001 pax standard, from
     the vendor-specific GNU. Contributed by C.A.M. Gerlach.

   - bpo-36285(9): Fix integer overflows in the array module.  Patch by
     Stephan Hohe.

   - bpo-31904(10): Add _signal module support for VxWorks.

   - bpo-36272(11): *note logging: 87. does not silently ignore
     RecursionError anymore.  Patch contributed by Rémi Lapeyre.

   - bpo-36280(12): Add a kind field to ast.Constant.  It is ‘u’ if the
     literal has a ‘u’ prefix (i.e.  a Python 2 style unicode literal),
     else None.

   - bpo-35931(13): The *note pdb: a5. ‘debug’ command now gracefully
     handles all exceptions.

   - bpo-36251(14): Fix format strings used for stderrprinter and
     re.Match reprs.  Patch by Stephan Hohe.

   - bpo-36235(15): Fix ‘CFLAGS’ in ‘customize_compiler()’ of
     ‘distutils.sysconfig’: when the ‘CFLAGS’ environment variable is
     defined, don’t override ‘CFLAGS’ variable with the ‘OPT’ variable
     anymore.  Initial patch written by David Malcolm.

   - bpo-35807(16): Update ensurepip to install pip 19.0.3 and
     setuptools 40.8.0.

   - bpo-36139(17): Release GIL when closing *note mmap: 20b. objects.

   - bpo-36179(18): Fix two unlikely reference leaks in _hashopenssl.
     The leaks only occur in out-of-memory cases.

   - bpo-36169(19): Add overlap() method to statistics.NormalDist.
     Computes the overlapping coefficient for two normal distributions.

   - bpo-36103(20): Default buffer size used by ‘shutil.copyfileobj()’
     is changed from 16 KiB to 64 KiB on non-Windows platform to reduce
     system call overhead.  Contributed by Inada Naoki.

   - bpo-36130(21): Fix ‘pdb’ with ‘skip=...’ when stepping into a frame
     without a ‘__name__’ global.  Patch by Anthony Sottile.

   - bpo-35652(22): shutil.copytree(copy_function=…) erroneously pass
     DirEntry instead of a path string.

   - bpo-35178(23): Ensure custom *note warnings.formatwarning(): 1b8d.
     function can receive ‘line’ as positional argument.  Based on patch
     by Tashrif Billah.

   - bpo-36106(24): Resolve potential name clash with libm’s sinpi().
     Patch by Dmitrii Pasechnik.

   - bpo-36091(25): Clean up reference to async generator in Lib/types.
     Patch by Henry Chen.

   - bpo-36043(26): ‘FileCookieJar’ supports *note path-like object:
     2a0.  Contributed by Stéphane Wirtel

   - bpo-35899(27): Enum has been fixed to correctly handle empty
     strings and strings with non-Latin characters (ie.  ‘α’, ‘א’)
     without crashing.  Original patch contributed by Maxwell.  Assisted
     by Stéphane Wirtel.

   - bpo-21269(28): Add ‘args’ and ‘kwargs’ properties to mock call
     objects.  Contributed by Kumar Akshay.

   - bpo-30670(29): ‘pprint.pp’ has been added to pretty-print objects
     with dictionary keys being sorted with their insertion order by
     default.  Parameter 'sort_dicts' has been added to ‘pprint.pprint’,
     ‘pprint.pformat’ and ‘pprint.PrettyPrinter’.  Contributed by Rémi
     Lapeyre.

   - bpo-35843(30): Implement ‘__getitem__’ for ‘_NamespacePath’.  Patch
     by Anthony Sottile.

   - bpo-35802(31): Clean up code which checked presence of ‘os.stat’ /
     ‘os.lstat’ / ‘os.chmod’ which are always present.  Patch by Anthony
     Sottile.

   - bpo-35715(32): Librates the return value of a ProcessPoolExecutor
     _process_worker after it’s no longer needed to free memory

   - bpo-35493(33): Use *note multiprocessing.connection.wait(): 111e.
     instead of polling each 0.2 seconds for worker updates in
     ‘multiprocessing.Pool’.  Patch by Pablo Galindo.

   - bpo-35661(34): Store the venv prompt in pyvenv.cfg.

   - bpo-35121(35): Don’t set cookie for a request when the request path
     is a prefix match of the cookie’s path attribute but doesn’t end
     with “/”.  Patch by Karthikeyan Singaravelan.

   - bpo-21478(36): Calls to a child function created with *note
     unittest.mock.create_autospec(): 16f4. should propagate to the
     parent.  Patch by Karthikeyan Singaravelan.

   - bpo-35198(37): Fix C++ extension compilation on AIX

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36401

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36320

   (3) https://bugs.python.org/issue?@action=redirect&bpo=34745

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36324

   (5) https://bugs.python.org/issue?@action=redirect&bpo=36321

   (6) https://bugs.python.org/issue?@action=redirect&bpo=36297

   (7) https://bugs.python.org/issue?@action=redirect&bpo=36298

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36268

   (9) https://bugs.python.org/issue?@action=redirect&bpo=36285

   (10) https://bugs.python.org/issue?@action=redirect&bpo=31904

   (11) https://bugs.python.org/issue?@action=redirect&bpo=36272

   (12) https://bugs.python.org/issue?@action=redirect&bpo=36280

   (13) https://bugs.python.org/issue?@action=redirect&bpo=35931

   (14) https://bugs.python.org/issue?@action=redirect&bpo=36251

   (15) https://bugs.python.org/issue?@action=redirect&bpo=36235

   (16) https://bugs.python.org/issue?@action=redirect&bpo=35807

   (17) https://bugs.python.org/issue?@action=redirect&bpo=36139

   (18) https://bugs.python.org/issue?@action=redirect&bpo=36179

   (19) https://bugs.python.org/issue?@action=redirect&bpo=36169

   (20) https://bugs.python.org/issue?@action=redirect&bpo=36103

   (21) https://bugs.python.org/issue?@action=redirect&bpo=36130

   (22) https://bugs.python.org/issue?@action=redirect&bpo=35652

   (23) https://bugs.python.org/issue?@action=redirect&bpo=35178

   (24) https://bugs.python.org/issue?@action=redirect&bpo=36106

   (25) https://bugs.python.org/issue?@action=redirect&bpo=36091

   (26) https://bugs.python.org/issue?@action=redirect&bpo=36043

   (27) https://bugs.python.org/issue?@action=redirect&bpo=35899

   (28) https://bugs.python.org/issue?@action=redirect&bpo=21269

   (29) https://bugs.python.org/issue?@action=redirect&bpo=30670

   (30) https://bugs.python.org/issue?@action=redirect&bpo=35843

   (31) https://bugs.python.org/issue?@action=redirect&bpo=35802

   (32) https://bugs.python.org/issue?@action=redirect&bpo=35715

   (33) https://bugs.python.org/issue?@action=redirect&bpo=35493

   (34) https://bugs.python.org/issue?@action=redirect&bpo=35661

   (35) https://bugs.python.org/issue?@action=redirect&bpo=35121

   (36) https://bugs.python.org/issue?@action=redirect&bpo=21478

   (37) https://bugs.python.org/issue?@action=redirect&bpo=35198


File: python.info,  Node: Documentação<50>,  Next: Testes<53>,  Prev: Biblioteca<135>,  Up: Python 3 8 0 alpha 3

1.23.60.4 Documentação
......................

   - bpo-36329(1): Declare the path of the Python binary for the usage
     of ‘Tools/scripts/serve.py’ when executing ‘make -C Doc/ serve’.
     Contributed by Stéphane Wirtel

   - bpo-36138(2): Improve documentation about converting
     datetime.timedelta to scalars.

   - bpo-21314(3): A new entry was added to the Core Language Section of
     the Programming FAQ, which explaines the usage of slash(/) in the
     signature of a function.  Patch by Lysandros Nikolaou

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36329

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36138

   (3) https://bugs.python.org/issue?@action=redirect&bpo=21314


File: python.info,  Node: Testes<53>,  Next: Construção<58>,  Prev: Documentação<50>,  Up: Python 3 8 0 alpha 3

1.23.60.5 Testes
................

   - bpo-36234(1): test_posix.PosixUidGidTests: add tests for invalid
     uid/gid type (str).  Initial patch written by David Malcolm.

   - bpo-29571(2): Fix ‘test_re.test_locale_flag()’: use
     ‘locale.getpreferredencoding()’ rather than ‘locale.getlocale()’ to
     get the locale encoding.  With some locales, ‘locale.getlocale()’
     returns the wrong encoding.

   - bpo-36123(3): Fix race condition in test_socket.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36234

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29571

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36123


File: python.info,  Node: Construção<58>,  Next: Windows<50>,  Prev: Testes<53>,  Up: Python 3 8 0 alpha 3

1.23.60.6 Construção
....................

   - bpo-36356(1): Fix leaks that led to build failure when configured
     with address sanitizer.

   - bpo-36146(2): Add ‘TEST_EXTENSIONS’ constant to ‘setup.py’ to allow
     to not build test extensions like ‘_testcapi’.

   - bpo-36146(3): Fix setup.py on macOS: only add ‘/usr/include/ffi’ to
     include directories of _ctypes, not for all extensions.

   - bpo-31904(4): Enable build system to cross-build for VxWorks RTOS.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36356

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36146

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36146

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31904


File: python.info,  Node: Windows<50>,  Next: IDLE<39>,  Prev: Construção<58>,  Up: Python 3 8 0 alpha 3

1.23.60.7 Windows
.................

   - bpo-36312(1): Fixed decoders for the following code pages: 50220,
     50221, 50222, 50225, 50227, 50229, 57002 through 57011, 65000 and
     42.

   - bpo-36264(2): Don’t honor POSIX ‘HOME’ in ‘os.path.expanduser’ on
     windows.  Patch by Anthony Sottile.

   - bpo-24643(3): Fix name collisions due to ‘#define timezone
     _timezone’ in PC/pyconfig.h.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36312

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36264

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24643


File: python.info,  Node: IDLE<39>,  Next: Ferramentas/Demos<29>,  Prev: Windows<50>,  Up: Python 3 8 0 alpha 3

1.23.60.8 IDLE
..............

   - bpo-36405(1): Use dict unpacking in idlelib.

   - bpo-36396(2): Remove fgBg param of idlelib.config.GetHighlight().
     This param was only used twice and changed the return type.

   - bpo-36176(3): Fix IDLE autocomplete & calltip popup colors.
     Prevent conflicts with Linux dark themes (and slightly darken
     calltip background).

   - bpo-23205(4): For the grep module, add tests for findfiles,
     refactor findfiles to be a module-level function, and refactor
     findfiles to use os.walk.

   - bpo-23216(5): Add docstrings to IDLE search modules.

   - bpo-36152(6): Remove colorizer.ColorDelegator.close_when_done and
     the corresponding argument of .close().  In IDLE, both have always
     been None or False since 2007.

   - bpo-32129(7): Avoid blurry IDLE application icon on macOS with Tk
     8.6.  Patch by Kevin Walzer.

   - bpo-36096(8): Refactor class variables to instance variables in
     colorizer.

   - bpo-30348(9): Increase test coverage of idlelib.autocomplete by
     30%.  Patch by Louie Lu

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36405

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36396

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36176

   (4) https://bugs.python.org/issue?@action=redirect&bpo=23205

   (5) https://bugs.python.org/issue?@action=redirect&bpo=23216

   (6) https://bugs.python.org/issue?@action=redirect&bpo=36152

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32129

   (8) https://bugs.python.org/issue?@action=redirect&bpo=36096

   (9) https://bugs.python.org/issue?@action=redirect&bpo=30348


File: python.info,  Node: Ferramentas/Demos<29>,  Next: API C<54>,  Prev: IDLE<39>,  Up: Python 3 8 0 alpha 3

1.23.60.9 Ferramentas/Demos
...........................

   - bpo-35132(1): Fix py-list and py-bt commands of python-gdb.py on
     gdb7.

   - bpo-32217(2): Fix freeze script on Windows.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35132

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32217


File: python.info,  Node: API C<54>,  Prev: Ferramentas/Demos<29>,  Up: Python 3 8 0 alpha 3

1.23.60.10 API C
................

   - bpo-36381(1): Raise ‘DeprecationWarning’ when ‘#’ formats are used
     for building or parsing values without ‘PY_SSIZE_T_CLEAN’.

   - bpo-36142(2): The whole coreconfig.h header is now excluded from
     Py_LIMITED_API. Move functions definitions into a new internal
     pycore_coreconfig.h header.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36381

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36142


File: python.info,  Node: Python 3 8 0 alpha 2,  Next: Python 3 8 0 alpha 1,  Prev: Python 3 8 0 alpha 3,  Up: Changelog

1.23.61 Python 3.8.0 alpha 2
----------------------------

'Data de lançamento: 2019-02-25'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<134>.
* Biblioteca: Biblioteca<136>.
* Documentação: Documentação<51>.
* Testes: Testes<54>.
* Windows: Windows<51>.
* IDLE: IDLE<40>.


File: python.info,  Node: Núcleo e embutidos<134>,  Next: Biblioteca<136>,  Up: Python 3 8 0 alpha 2

1.23.61.1 Núcleo e embutidos
............................

   - bpo-36052(1): Raise a *note SyntaxError: 18d. when assigning a
     value to ‘__debug__’ with the Assignment Operator.  Contributed by
     Stéphane Wirtel and Pablo Galindo.

   - bpo-36012(2): Doubled the speed of class variable writes.  When a
     non-dunder attribute was updated, there was an unnecessary call to
     update slots.

   - bpo-35942(3): The error message emitted when returning invalid
     types from ‘__fspath__’ in interfaces that allow passing *note
     PathLike: c6c. objects has been improved and now it does explain
     the origin of the error.

   - bpo-36016(4): ‘gc.get_objects’ can now receive an optional
     parameter indicating a generation to get objects from.  Patch by
     Pablo Galindo.

   - bpo-1054041(5): When the main interpreter exits due to an uncaught
     KeyboardInterrupt, the process now exits in the appropriate manner
     for its parent process to detect that a SIGINT or ^C terminated the
     process.  This allows shells and batch scripts to understand that
     the user has asked them to stop.

   - bpo-35992(6): Fix ‘__class_getitem__()’ not being called on a class
     with a custom non-subscriptable metaclass.

   - bpo-35993(7): Fix a crash on fork when using subinterpreters.
     Contributed by Stéphane Wirtel

   - bpo-35991(8): Fix a potential double free in
     Modules/_randommodule.c.

   - bpo-35961(9): Fix a crash in slice_richcompare(): use strong
     references rather than stolen references for the two temporary
     internal tuples.

   - bpo-35911(10): Enable the creation of cell objects by adding a
     ‘cell.__new__’ method, and expose the type ‘cell’ in ‘Lib/types.py’
     under the name CellType.  Patch by Pierre Glaser.

   - bpo-12822(11): Use monotonic clock for ‘pthread_cond_timedwait’
     when ‘pthread_condattr_setclock’ and ‘CLOCK_MONOTONIC’ are
     available.

   - bpo-15248(12): The compiler emits now syntax warnings in the case
     when a comma is likely missed before tuple or list.

   - bpo-35886(13): The implementation of PyInterpreterState has been
     moved into the internal header files (guarded by Py_BUILD_CORE).

   - bpo-31506(14): Clarify the errors reported when ‘object.__new__’
     and ‘object.__init__’ receive more than one argument.  Contributed
     by Sanyam Khurana.

   - bpo-35724(15): Signal-handling is now guaranteed to happen relative
     to the main interpreter.

   - bpo-33608(16): We added a new internal _Py_AddPendingCall() that
     operates relative to the provided interpreter.  This allows us to
     use the existing implementation to ask another interpreter to do
     work that cannot be done in the current interpreter, like decref an
     object the other interpreter owns.  The existing
     Py_AddPendingCall() only operates relative to the main interpreter.

   - bpo-33989(17): Fix a possible crash in *note list.sort(): be8. when
     sorting objects with ‘ob_type->tp_richcompare == NULL’.  Patch by
     Zackery Spytz.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36052

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36012

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35942

   (4) https://bugs.python.org/issue?@action=redirect&bpo=36016

   (5) https://bugs.python.org/issue?@action=redirect&bpo=1054041

   (6) https://bugs.python.org/issue?@action=redirect&bpo=35992

   (7) https://bugs.python.org/issue?@action=redirect&bpo=35993

   (8) https://bugs.python.org/issue?@action=redirect&bpo=35991

   (9) https://bugs.python.org/issue?@action=redirect&bpo=35961

   (10) https://bugs.python.org/issue?@action=redirect&bpo=35911

   (11) https://bugs.python.org/issue?@action=redirect&bpo=12822

   (12) https://bugs.python.org/issue?@action=redirect&bpo=15248

   (13) https://bugs.python.org/issue?@action=redirect&bpo=35886

   (14) https://bugs.python.org/issue?@action=redirect&bpo=31506

   (15) https://bugs.python.org/issue?@action=redirect&bpo=35724

   (16) https://bugs.python.org/issue?@action=redirect&bpo=33608

   (17) https://bugs.python.org/issue?@action=redirect&bpo=33989


File: python.info,  Node: Biblioteca<136>,  Next: Documentação<51>,  Prev: Núcleo e embutidos<134>,  Up: Python 3 8 0 alpha 2

1.23.61.2 Biblioteca
....................

   - bpo-35512(1): *note unittest.mock.patch.dict(): 1b6a. used as a
     decorator with string target resolves the target during function
     call instead of during decorator construction.  Patch by
     Karthikeyan Singaravelan.

   - bpo-36018(2): Add statistics.NormalDist, a tool for creating and
     manipulating normal distributions of random variable.  Features a
     composite class that treats the mean and standard deviation of
     measurement data as single entity.

   - bpo-35904(3): Added statistics.fmean() as a faster, floating-point
     variant of the existing mean() function.

   - bpo-35918(4): Removed broken ‘has_key’ method from
     multiprocessing.managers.SyncManager.dict.  Contributed by Rémi
     Lapeyre.

   - bpo-18283(5): Add support for bytes to *note shutil.which(): 4b4.

   - bpo-35960(6): Fix *note dataclasses.field(): 1b98. throwing away
     empty mapping objects passed as metadata.

   - bpo-35500(7): Write expected and actual call parameters on separate
     lines in *note unittest.mock.Mock.assert_called_with(): 1b99.
     assertion errors.  Contributed by Susan Su.

   - bpo-35931(8): The *note pdb: a5. ‘debug’ command now gracefully
     handles syntax errors.

   - bpo-24209(9): In http.server script, rely on getaddrinfo to bind to
     preferred address based on the bind parameter.  Now default bind or
     binding to a name may bind to IPv6 or dual-stack, depending on the
     environment.

   - bpo-35321(10): Set ‘__spec__.origin’ of ‘_frozen_importlib’ to
     frozen so that it matches the behavior of
     ‘_frozen_importlib_external’.  Patch by Nina Zakharenko.

   - bpo-35378(11): Fix a reference issue inside ‘multiprocessing.Pool’
     that caused the pool to remain alive if it was deleted without
     being closed or terminated explicitly.  A new strong reference is
     added to the pool iterators to link the lifetime of the pool to the
     lifetime of its iterators so the pool does not get destroyed if a
     pool iterator is still alive.

   - bpo-34294(12): re module, fix wrong capturing groups in rare cases.
     *note re.search(): 126d, *note re.findall(): 1060, *note re.sub():
     2a3. and other functions that scan through string looking for a
     match, should reset capturing groups between two match attempts.
     Patch by Ma Lin.

   - bpo-35615(13): *note weakref: 114.: Fix a RuntimeError when copying
     a WeakKeyDictionary or a WeakValueDictionary, due to some keys or
     values disappearing while iterating.

   - bpo-35606(14): Implement *note math.prod(): a0c. as analogous
     function to *note sum(): 46a. that returns the product of a ‘start’
     value (default: 1) times an iterable of numbers.  Patch by Pablo
     Galindo.

   - bpo-32417(15): Performing arithmetic between *note
     datetime.datetime: 1cc. subclasses and *note datetime.timedelta:
     9d7. now returns an object of the same type as the *note
     datetime.datetime: 1cc. subclass.  As a result, *note
     datetime.datetime.astimezone(): 9d8. and alternate constructors
     like *note datetime.datetime.now(): 4ec. and
     ‘datetime.fromtimestamp()’ called with a ‘tz’ argument now 'also'
     retain their subclass.

   - bpo-35153(16): Add 'headers' optional keyword-only parameter to
     *note xmlrpc.client.ServerProxy: a61, ‘xmlrpc.client.Transport’ and
     ‘xmlrpc.client.SafeTransport’.  Patch by Cédric Krier.

   - bpo-34572(17): Fix C implementation of pickle.loads to use
     importlib’s locking mechanisms, and thereby avoid using partially
     loaded modules.  Patch by Tim Burgess.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35512

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36018

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35904

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35918

   (5) https://bugs.python.org/issue?@action=redirect&bpo=18283

   (6) https://bugs.python.org/issue?@action=redirect&bpo=35960

   (7) https://bugs.python.org/issue?@action=redirect&bpo=35500

   (8) https://bugs.python.org/issue?@action=redirect&bpo=35931

   (9) https://bugs.python.org/issue?@action=redirect&bpo=24209

   (10) https://bugs.python.org/issue?@action=redirect&bpo=35321

   (11) https://bugs.python.org/issue?@action=redirect&bpo=35378

   (12) https://bugs.python.org/issue?@action=redirect&bpo=34294

   (13) https://bugs.python.org/issue?@action=redirect&bpo=35615

   (14) https://bugs.python.org/issue?@action=redirect&bpo=35606

   (15) https://bugs.python.org/issue?@action=redirect&bpo=32417

   (16) https://bugs.python.org/issue?@action=redirect&bpo=35153

   (17) https://bugs.python.org/issue?@action=redirect&bpo=34572


File: python.info,  Node: Documentação<51>,  Next: Testes<54>,  Prev: Biblioteca<136>,  Up: Python 3 8 0 alpha 2

1.23.61.3 Documentação
......................

   - bpo-36083(1): Fix formatting of –check-hash-based-pycs options in
     the manpage Synopsis.

   - bpo-36007(2): Bump minimum sphinx version to 1.8.  Patch by Anthony
     Sottile.

   - bpo-22062(3): Update documentation and docstrings for pathlib.
     Original patch by Mike Short.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=36083

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36007

   (3) https://bugs.python.org/issue?@action=redirect&bpo=22062


File: python.info,  Node: Testes<54>,  Next: Windows<51>,  Prev: Documentação<51>,  Up: Python 3 8 0 alpha 2

1.23.61.4 Testes
................

   - bpo-27313(1): Avoid test_ttk_guionly ComboboxTest failure with
     macOS Cocoa Tk.

   - bpo-36019(2): Add test.support.TEST_HTTP_URL and replace references
     of ‘http://www.example.com’ by this new constant.  Contributed by
     Stéphane Wirtel.

   - bpo-36037(3): Fix test_ssl for strict OpenSSL configuration like
     RHEL8 strict crypto policy.  Use older TLS version for minimum TLS
     version of the server SSL context if needed, to test TLS version
     older than default minimum TLS version.

   - bpo-35798(4): Added ‘test.support.check_syntax_warning()’.

   - bpo-35505(5): Make test_imap4_host_default_value independent on
     whether the local IMAP server is running.

   - bpo-35917(6): multiprocessing: provide unit tests for SyncManager
     and SharedMemoryManager classes + all the shareable types which are
     supposed to be supported by them.  (patch by Giampaolo Rodola)

   - bpo-35704(7): Skip ‘test_shutil.test_unpack_archive_xztar’ to
     prevent a MemoryError on 32-bit AIX when MAXDATA setting is less
     than 0x20000000.

     Patch by Michael Felt (aixtools)

   - bpo-34720(8): Assert m_state != NULL to mimic GC traversal
     functions that do not correctly handle module creation when the
     module state has not been created.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27313

   (2) https://bugs.python.org/issue?@action=redirect&bpo=36019

   (3) https://bugs.python.org/issue?@action=redirect&bpo=36037

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35798

   (5) https://bugs.python.org/issue?@action=redirect&bpo=35505

   (6) https://bugs.python.org/issue?@action=redirect&bpo=35917

   (7) https://bugs.python.org/issue?@action=redirect&bpo=35704

   (8) https://bugs.python.org/issue?@action=redirect&bpo=34720


File: python.info,  Node: Windows<51>,  Next: IDLE<40>,  Prev: Testes<54>,  Up: Python 3 8 0 alpha 2

1.23.61.5 Windows
.................

   - bpo-35976(1): Added ARM build support to Windows build files in
     PCBuild.

   - bpo-35692(2): ‘pathlib’ no longer raises when checking file and
     directory existence on drives that are not ready

   - bpo-35872(3): Uses the base Python executable when invoking venv in
     a virtual environment

   - bpo-35873(4): Prevents venv paths being inherited by child
     processes

   - bpo-35299(5): Fix sysconfig detection of the source directory and
     distutils handling of pyconfig.h during PGO profiling

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35976

   (2) https://bugs.python.org/issue?@action=redirect&bpo=35692

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35872

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35873

   (5) https://bugs.python.org/issue?@action=redirect&bpo=35299


File: python.info,  Node: IDLE<40>,  Prev: Windows<51>,  Up: Python 3 8 0 alpha 2

1.23.61.6 IDLE
..............

   - bpo-24310(1): IDLE – Document settings dialog font tab sample.

   - bpo-35833(2): Revise IDLE doc for control codes sent to Shell.  Add
     a code example block.

   - bpo-35689(3): Add docstrings and unittests for colorizer.py.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24310

   (2) https://bugs.python.org/issue?@action=redirect&bpo=35833

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35689


File: python.info,  Node: Python 3 8 0 alpha 1,  Next: Python 3 7 0 final,  Prev: Python 3 8 0 alpha 2,  Up: Changelog

1.23.62 Python 3.8.0 alpha 1
----------------------------

'Data de lançamento: 2019-02-03'

* Menu:

* Segurança: Segurança<42>.
* Núcleo e embutidos: Núcleo e embutidos<135>.
* Biblioteca: Biblioteca<137>.
* Documentação: Documentação<52>.
* Testes: Testes<55>.
* Construção: Construção<59>.
* Windows: Windows<52>.
* macOS: macOS<41>.
* IDLE: IDLE<41>.
* Ferramentas/Demos: Ferramentas/Demos<30>.
* API C: API C<55>.


File: python.info,  Node: Segurança<42>,  Next: Núcleo e embutidos<135>,  Up: Python 3 8 0 alpha 1

1.23.62.1 Segurança
...................

   - bpo-35746(1): CVE 2019-5010(2): Fix a NULL pointer deref in ssl
     module.  The cert parser did not handle CRL distribution points
     with empty DP or URI correctly.  A malicious or buggy certificate
     can result into segfault.  Vulnerability (TALOS-2018-0758) reported
     by Colin Read and Nicolas Edet of Cisco.

   - bpo-34812(3): The *note -I: 965. command line option (run Python in
     isolated mode) is now also copied by the *note multiprocessing: 94.
     and ‘distutils’ modules when spawning child processes.  Previously,
     only *note -E: 964. and *note -s: 13d5. options (enabled by *note
     -I: 965.) were copied.

   - bpo-34791(4): The xml.sax and xml.dom.domreg no longer use
     environment variables to override parser implementations when
     sys.flags.ignore_environment is set by -E or -I arguments.

   - bpo-17239(5): The xml.sax and xml.dom.minidom parsers no longer
     processes external entities by default.  External DTD and ENTITY
     declarations no longer load files or create network connections.

   - bpo-34623(6): CVE 2018-14647(7): The C accelerated _elementtree
     module now initializes hash randomization salt from _Py_HashSecret
     instead of libexpat’s default CSPRNG.

   - bpo-34405(8): Updated to OpenSSL 1.1.0i for Windows builds.

   - bpo-33871(9): Fixed sending the part of the file in *note
     os.sendfile(): b21. on macOS. Using the 'trailers' argument could
     cause sending more bytes from the input file than was specified.

   - bpo-32533(10): Fixed thread-safety of error handling in _ssl.

   - bpo-33136(11): Harden ssl module against LibreSSL CVE
     2018-8970(12).  X509_VERIFY_PARAM_set1_host() is called with an
     explicit namelen.  A new test ensures that NULL bytes are not
     allowed.

   - bpo-33001(13): Minimal fix to prevent buffer overrun in os.symlink
     on Windows

   - bpo-32981(14): Regexes in difflib and poplib were vulnerable to
     catastrophic backtracking.  These regexes formed potential DOS
     vectors (REDOS). They have been refactored.  This resolves CVE
     2018-1060(15) and CVE 2018-1061(16).  Patch by Jamie Davis.

   - bpo-28414(17): The ssl module now allows users to perform their own
     IDN en/decoding when using SNI.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35746

   (2) https://www.cve.org/CVERecord?id=CVE-2019-5010

   (3) https://bugs.python.org/issue?@action=redirect&bpo=34812

   (4) https://bugs.python.org/issue?@action=redirect&bpo=34791

   (5) https://bugs.python.org/issue?@action=redirect&bpo=17239

   (6) https://bugs.python.org/issue?@action=redirect&bpo=34623

   (7) https://www.cve.org/CVERecord?id=CVE-2018-14647

   (8) https://bugs.python.org/issue?@action=redirect&bpo=34405

   (9) https://bugs.python.org/issue?@action=redirect&bpo=33871

   (10) https://bugs.python.org/issue?@action=redirect&bpo=32533

   (11) https://bugs.python.org/issue?@action=redirect&bpo=33136

   (12) https://www.cve.org/CVERecord?id=CVE-2018-8970

   (13) https://bugs.python.org/issue?@action=redirect&bpo=33001

   (14) https://bugs.python.org/issue?@action=redirect&bpo=32981

   (15) https://www.cve.org/CVERecord?id=CVE-2018-1060

   (16) https://www.cve.org/CVERecord?id=CVE-2018-1061

   (17) https://bugs.python.org/issue?@action=redirect&bpo=28414


File: python.info,  Node: Núcleo e embutidos<135>,  Next: Biblioteca<137>,  Prev: Segurança<42>,  Up: Python 3 8 0 alpha 1

1.23.62.2 Núcleo e embutidos
............................

   - bpo-35877(1): Make parenthesis optional for named expressions in
     while statement.  Patch by Karthikeyan Singaravelan.

   - bpo-35814(2): Allow same right hand side expressions in annotated
     assignments as in normal ones.  In particular, ‘x: Tuple[int, int]
     = 1, 2’ (without parentheses on the right) is now allowed.

   - bpo-35766(3): Add the option to parse PEP 484 type comments in the
     ast module.  (Off by default.)  This is merging the key
     functionality of the third party fork thereof,
     [typed_ast](‘https://github.com/python/typed_ast’).

   - bpo-35713(4): Reorganize Python initialization to get working
     exceptions and sys.stderr earlier.

   - bpo-33416(5): Add end line and end column position information to
     the Python AST nodes.  This is a C-level backwards incompatible
     change.

   - bpo-35720(6): Fixed a minor memory leak in
     pymain_parse_cmdline_impl function in Modules/main.c

   - bpo-35634(7): ‘func(**kwargs)’ will now raise an error when
     ‘kwargs’ is a mapping containing multiple entries with the same
     key.  An error was already raised when other keyword arguments are
     passed before ‘**kwargs’ since Python 3.6.

   - bpo-35623(8): Fix a crash when sorting very long lists.  Patch by
     Stephan Hohe.

   - bpo-35214(9): clang Memory Sanitizer build instrumentation was
     added to work around false positives from posix, socket, time,
     test_io, and test_faulthandler.

   - bpo-35560(10): Fix an assertion error in *note format(): 61f. in
     debug build for floating-point formatting with “n” format, zero
     padding and small width.  Release build is not impacted.  Patch by
     Karthikeyan Singaravelan.

   - bpo-35552(11): Format characters ‘%s’ and ‘%V’ in *note
     PyUnicode_FromFormat(): 38a. and ‘%s’ in *note
     PyBytes_FromFormat(): 1ba1. no longer read memory past the limit if
     'precision' is specified.

   - bpo-35504(12): Fix segfaults and *note SystemError: 575.s when
     deleting certain attributes.  Patch by Zackery Spytz.

   - bpo-35504(13): Fixed a SystemError when delete the
     characters_written attribute of an OSError.

   - bpo-35494(14): Improved syntax error messages for unbalanced
     parentheses in f-string.

   - bpo-35444(15): Fixed error handling in pickling methods when fail
     to look up builtin “getattr”.  Sped up pickling iterators.

   - bpo-35436(16): Fix various issues with memory allocation error
     handling.  Patch by Zackery Spytz.

   - bpo-35423(17): Separate the signal handling trigger in the eval
     loop from the “pending calls” machinery.  There is no semantic
     change and the difference in performance is insignificant.

   - bpo-35357(18): Internal attributes’ names of unittest.mock._Call
     and unittest.mock.MagicProxy (name, parent & from_kall) are now
     prefixed with _mock_ in order to prevent clashes with widely used
     object attributes.  Fixed minor typo in test function name.

   - bpo-35372(19): Fixed the code page decoder for input longer than 2
     GiB containing undecodable bytes.

   - bpo-35336(20): Fix PYTHONCOERCECLOCALE=1 environment variable: only
     coerce the C locale if the LC_CTYPE locale is “C”.

   - bpo-31241(21): The 'lineno' and 'col_offset' attributes of AST
     nodes for list comprehensions, generator expressions and tuples are
     now point to the opening parenthesis or square brace.  For tuples
     without parenthesis they point to the position of the first item.

   - bpo-33954(22): For *note str.format(): 621, ‘float.__format__()’
     and ‘complex.__format__()’ methods for non-ASCII decimal point when
     using the “n” formatter.

   - bpo-35269(23): Fix a possible segfault involving a newly created
     coroutine.  Patch by Zackery Spytz.

   - bpo-35224(24): Implement PEP 572(25) (assignment expressions).
     Patch by Emily Morehouse.

   - bpo-32492(26): Speed up ‘namedtuple()’ attribute access by 1.6x
     using a C fast-path for the name descriptors.  Patch by Pablo
     Galindo.

   - bpo-35214(27): Fixed an out of bounds memory access when parsing a
     truncated unicode escape sequence at the end of a string such as
     ‘'\N'’.  It would read one byte beyond the end of the memory
     allocation.

   - bpo-35214(28): The interpreter and extension modules have had
     annotations added so that they work properly under clang’s Memory
     Sanitizer.  A new configure flag –with-memory-sanitizer has been
     added to make test builds of this nature easier to perform.

   - bpo-35193(29): Fix an off by one error in the bytecode peephole
     optimizer where it could read bytes beyond the end of bounds of an
     array when removing unreachable code.  This bug was present in
     every release of Python 3.6 and 3.7 until now.

   - bpo-35169(30): Improved error messages for forbidden assignments.

   - bpo-34022(31): Fix handling of hash-based bytecode files in *note
     zipimport: 132.  Patch by Elvis Pranskevichus.

   - bpo-28401(32): Debug builds will no longer to attempt to import
     extension modules built for the ABI as they were never compatible
     to begin with.  Patch by Stefano Rivera.

   - bpo-29341(33): Clarify in the docstrings of *note os: a1. methods
     that path-like objects are also accepted as input parameters.

   - bpo-35050(34): *note socket: cc.: Fix off-by-one bug in length
     check for ‘AF_ALG’ name and type.

   - bpo-29743(35): Raise *note ValueError: 202. instead of *note
     OverflowError: 885. in case of a negative ‘_length_’ in a *note
     ctypes.Array: 1ba2. subclass.  Also raise *note TypeError: 2c3.
     instead of *note AttributeError: 34b. for non-integer ‘_length_’.
     Original patch by Oren Milman.

   - bpo-16806(36): Fix ‘lineno’ and ‘col_offset’ for multi-line string
     tokens.

   - bpo-35029(37): *note SyntaxWarning: 466. raised as an exception at
     code generation time will be now replaced with a *note SyntaxError:
     18d. for better error reporting.

   - bpo-34983(38): Expose *note symtable.Symbol.is_nonlocal(): 1ba3. in
     the symtable module.  Patch by Pablo Galindo.

   - bpo-34974(39): *note bytes: 1c2. and *note bytearray: 2ea.
     constructors no longer convert unexpected exceptions (e.g.  *note
     MemoryError: 15c5. and *note KeyboardInterrupt: 9d9.) to *note
     TypeError: 2c3.

   - bpo-34939(40): Allow annotated names in module namespace that are
     declared global before the annotation happens.  Patch by Pablo
     Galindo.

   - bpo-34973(41): Fixed crash in *note bytes(): 1c2. when the *note
     list: 611. argument is mutated while it is iterated.

   - bpo-34876(42): The 'lineno' and 'col_offset' attributes of the AST
     for decorated function and class refer now to the position of the
     corresponding ‘def’, ‘async def’ and ‘class’ instead of the
     position of the first decorator.  This leads to more correct line
     reporting in tracing.  This is the only case when the position of
     child AST nodes can precede the position of the parent AST node.

   - bpo-34879(43): Fix a possible null pointer dereference in
     bytesobject.c.  Patch by Zackery Spytz.

   - bpo-34784(44): Fix the implementation of PyStructSequence_NewType
     in order to create heap allocated StructSequences.

   - bpo-32912(45): A *note SyntaxWarning: 466. is now emitted instead
     of a *note DeprecationWarning: 1a5. for invalid escape sequences in
     string and bytes literals.

   - bpo-34854(46): Fixed a crash in compiling string annotations
     containing a lambda with a keyword-only argument that doesn’t have
     a default value.

   - bpo-34850(47): The compiler now produces a *note SyntaxWarning:
     466. when identity checks (‘is’ and ‘is not’) are used with certain
     types of literals (e.g.  strings, ints).  These can often work by
     accident in CPython, but are not guaranteed by the language spec.
     The warning advises users to use equality tests (‘==’ and ‘!=’)
     instead.

   - bpo-34824(48): Fix a possible null pointer dereference in
     Modules/_ssl.c.  Patch by Zackery Spytz.

   - bpo-30156(49): The C function ‘property_descr_get()’ uses a
     “cached” tuple to optimize function calls.  But this tuple can be
     discovered in debug mode with *note sys.getobjects(): 427.  Remove
     the optimization, it’s not really worth it and it causes 3
     different crashes last years.

   - bpo-34762(50): Fix contextvars C API to use PyObject* pointer
     types.

   - bpo-34751(51): The hash function for tuples is now based on xxHash
     which gives better collision results on (formerly) pathological
     cases.  Additionally, on 64-bit systems it improves tuple hashes in
     general.  Patch by Jeroen Demeyer with substantial contributions by
     Tim Peters.

   - bpo-34735(52): Fix a memory leak in Modules/timemodule.c.  Patch by
     Zackery Spytz.

   - bpo-34683(53): Fixed a bug where some SyntaxError error pointed to
     locations that were off-by-one.

   - bpo-34651(54): Only allow the main interpreter to fork.  The avoids
     the possibility of affecting the main interpreter, which is
     critical to operation of the runtime.

   - bpo-34653(55): Remove unused function
     PyParser_SimpleParseStringFilename.

   - bpo-32236(56): Warn that line buffering is not supported if *note
     open(): 51c. is called with binary mode and ‘buffering=1’.

   - bpo-34641(57): Further restrict the syntax of the left-hand side of
     keyword arguments in function calls.  In particular,
     ‘f((keyword)=arg)’ is now disallowed.

   - bpo-34637(58): Make the 'start' argument to 'sum()' visible as a
     keyword argument.

   - bpo-1621(59): Do not assume signed integer overflow behavior (C
     undefined behavior) when performing set hash table resizing.

   - bpo-34588(60): Fix an off-by-one in the recursive call pruning
     feature of traceback formatting.

   - bpo-34485(61): On Windows, the LC_CTYPE is now set to the user
     preferred locale at startup.  Previously, the LC_CTYPE locale was
     “C” at startup, but changed when calling setlocale(LC_CTYPE, “”) or
     setlocale(LC_ALL, “”).

   - bpo-34485(62): Standard streams like sys.stdout now use the
     “surrogateescape” error handler, instead of “strict”, on the POSIX
     locale (when the C locale is not coerced and the UTF-8 Mode is
     disabled).

   - bpo-34485(63): Fix the error handler of standard streams like
     sys.stdout: PYTHONIOENCODING=”:” is now ignored instead of setting
     the error handler to “strict”.

   - bpo-34485(64): Python now gets the locale encoding with C code to
     initialize the encoding of standard streams like sys.stdout.
     Moreover, the encoding is now initialized to the Python codec name
     to get a normalized encoding name and to ensure that the codec is
     loaded.  The change avoids importing _bootlocale and _locale
     modules at startup by default.

   - bpo-34527(65): On FreeBSD, Py_DecodeLocale() and Py_EncodeLocale()
     now also forces the ASCII encoding if the LC_CTYPE locale is
     “POSIX”, not only if the LC_CTYPE locale is “C”.

   - bpo-34527(66): The UTF-8 Mode is now also enabled by the “POSIX”
     locale, not only by the “C” locale.

   - bpo-34403(67): On HP-UX with C or POSIX locale,
     sys.getfilesystemencoding() now returns “ascii” instead of “roman8”
     (when the UTF-8 Mode is disabled and the C locale is not coerced).

   - bpo-34523(68): The Python filesystem encoding is now read earlier
     during the Python initialization.

   - bpo-12458(69): Tracebacks show now correct line number for
     subexpressions in multiline expressions.  Tracebacks show now the
     line number of the first line for multiline expressions instead of
     the line number of the last subexpression.

   - bpo-34408(70): Prevent a null pointer dereference and resource
     leakage in ‘PyInterpreterState_New()’.

   - bpo-34400(71): Fix undefined behavior in parsetok.c.  Patch by
     Zackery Spytz.

   - bpo-33073(72): Added as_integer_ratio to ints to make them more
     interoperable with floats.

   - bpo-34377(73): Update valgrind suppression list to use
     ‘_PyObject_Free’/‘_PyObject_Realloc’ instead of
     ‘PyObject_Free’/‘PyObject_Realloc’.

   - bpo-34353(74): Added the “socket” option in the ‘stat.filemode()’
     Python implementation to match the C implementation.

   - bpo-34320(75): Fix ‘dict(od)’ didn’t copy iteration order of
     OrderedDict.

   - bpo-34113(76): Fixed crash on debug builds when opcode stack was
     adjusted with negative numbers.  Patch by Constantin Petrisor.

   - bpo-34100(77): Compiler now merges constants in tuples and
     frozensets recursively.  Code attributes like ‘co_names’ are merged
     too.

   - bpo-34151(78): Performance of list concatenation, repetition and
     slicing operations is slightly improved.  Patch by Sergey Fedoseev.

   - bpo-34170(79): -X dev: it is now possible to override the memory
     allocator using PYTHONMALLOC even if the developer mode is enabled.

   - bpo-33237(80): Improved *note AttributeError: 34b. message for
     partially initialized module.

   - bpo-34149(81): Fix min and max functions to get default behavior
     when key is None.

   - bpo-34125(82): Profiling of unbound built-in methods now works when
     ‘**kwargs’ is given.

   - bpo-34141(83): Optimized pickling atomic types (None, bool, int,
     float, bytes, str).

   - bpo-34126(84): Fix crashes when profiling certain invalid calls of
     unbound methods.  Patch by Jeroen Demeyer.

   - bpo-24618(85): Fixed reading invalid memory when create the code
     object with too small varnames tuple or too large argument counts.

   - bpo-34068(86): In *note io.IOBase.close(): 1f6, ensure that the
     *note closed: 1ba4. attribute is not set with a live exception.
     Patch by Zackery Spytz and Serhiy Storchaka.

   - bpo-34087(87): Fix buffer overflow while converting unicode to
     numeric values.

   - bpo-34080(88): Fixed a memory leak in the compiler when it raised
     some uncommon errors during tokenizing.

   - bpo-34066(89): Disabled interruption by Ctrl-C between calling
     ‘open()’ and entering a 'with' block in ‘with open()’.

   - bpo-34042(90): Fix dict.copy() to maintain correct total refcount
     (as reported by sys.gettotalrefcount()).

   - bpo-33418(91): Fix potential memory leak in function object when it
     creates reference cycle.

   - bpo-33985(92): Implement contextvars.ContextVar.name attribute.

   - bpo-33956(93): Update vendored Expat library copy to version 2.2.5.

   - bpo-24596(94): Decref the module object in *note
     PyRun_SimpleFileExFlags(): 1a56. before calling *note
     PyErr_Print(): 1ab9.  Patch by Zackery Spytz.

   - bpo-33451(95): Close directly executed pyc files before calling
     ‘PyEval_EvalCode()’.

   - bpo-1617161(96): The hash of ‘BuiltinMethodType’ instances (methods
     of built-in classes) now depends on the hash of the identity of
     '__self__' instead of its value.  The hash and equality of
     ‘ModuleType’ and ‘MethodWrapperType’ instances (methods of
     user-defined classes and some methods of built-in classes like
     ‘str.__add__’) now depend on the hash and equality of the identity
     of '__self__' instead of its value.  ‘MethodWrapperType’ instances
     no longer support ordering.

   - bpo-33824(97): Fix “LC_ALL=C python3.7 -V”: reset properly the
     command line parser when the encoding changes after reading the
     Python configuration.

   - bpo-33803(98): Fix a crash in hamt.c caused by enabling GC tracking
     for an object that hadn’t all of its fields set to NULL.

   - bpo-33738(99): Seven macro incompatibilities with the Limited API
     were fixed, and the macros *note PyIter_Check(): 1a3e, *note
     PyIndex_Check(): 991. and *note PyExceptionClass_Name(): a6f. were
     added as functions.  A script for automatic macro checks was added.

   - bpo-33786(100): Fix asynchronous generators to handle GeneratorExit
     in athrow() correctly

   - bpo-30167(101): ‘PyRun_SimpleFileExFlags’ removes ‘__cached__’ from
     module in addition to ‘__file__’.

   - bpo-33706(102): Fix a crash in Python initialization when parsing
     the command line options.  Thanks Christoph Gohlke for the bug
     report and the fix!

   - bpo-33597(103): Reduce ‘PyGC_Head’ size from 3 words to 2 words.

   - bpo-30654(104): Fixed reset of the SIGINT handler to SIG_DFL on
     interpreter shutdown even when there was a custom handler set
     previously.  Patch by Philipp Kerling.

   - bpo-33622(105): Fixed a leak when the garbage collector fails to
     add an object with the ‘__del__’ method or referenced by it into
     the *note gc.garbage: 1201. list.  *note PyGC_Collect(): 995. can
     now be called when an exception is set and preserves it.

   - bpo-33462(106): Make dict and dict views reversible.  Patch by Rémi
     Lapeyre.

   - bpo-23722(107): A *note RuntimeError: 195. is now raised when the
     custom metaclass doesn’t provide the ‘__classcell__’ entry in the
     namespace passed to ‘type.__new__’.  A *note DeprecationWarning:
     1a5. was emitted in Python 3.6–3.7.

   - bpo-33499(108): Add *note PYTHONPYCACHEPREFIX: 9ab. environment
     variable and *note -X: 176. ‘pycache_prefix’ command-line option to
     set an alternate root directory for writing module bytecode cache
     files.

   - bpo-25711(109): The *note zipimport: 132. module has been rewritten
     in pure Python.

   - bpo-33509(110): Fix module_globals parameter of
     warnings.warn_explicit(): don’t crash if module_globals is not a
     dict.

   - bpo-31849(111): Fix signed/unsigned comparison warning in pyhash.c.

   - bpo-33475(112): Fixed miscellaneous bugs in converting annotations
     to strings and optimized parentheses in the string representation.

   - bpo-20104(113): Added support for the ‘setpgroup’, ‘resetids’,
     ‘setsigmask’, ‘setsigdef’ and ‘scheduler’ parameters of
     ‘posix_spawn’.  Patch by Pablo Galindo.

   - bpo-33391(114): Fix a leak in set_symmetric_difference().

   - bpo-33363(115): Raise a SyntaxError for ‘async with’ and ‘async
     for’ statements outside of async functions.

   - bpo-28055(116): Fix unaligned accesses in siphash24().  Patch by
     Rolf Eike Beer.

   - bpo-33128(117): Fix a bug that causes PathFinder to appear twice on
     sys.meta_path.  Patch by Pablo Galindo Salgado.

   - bpo-33331(118): Modules imported last are now cleared first at
     interpreter shutdown.

   - bpo-33312(119): Fixed clang ubsan (undefined behavior sanitizer)
     warnings in dictobject.c by adjusting how the internal struct
     _dictkeysobject shared keys structure is declared.

   - bpo-33305(120): Improved syntax error messages for invalid
     numerical literals.

   - bpo-33306(121): Improved syntax error messages for unbalanced
     parentheses.

   - bpo-33234(122): The list constructor will pre-size and not
     over-allocate when the input length is known.

   - bpo-33270(123): Intern the names for all anonymous code objects.
     Patch by Zackery Spytz.

   - bpo-30455(124): The C and Python code and the documentation related
     to tokens are now generated from a single source file
     ‘Grammar/Tokens’.

   - bpo-33176(125): Add a ‘toreadonly()’ method to memoryviews.

   - bpo-33231(126): Fix potential memory leak in ‘normalizestring()’.

   - bpo-33205(127): Change dict growth function from
     ‘round_up_to_power_2(used*2+hashtable_size/2)’ to
     ‘round_up_to_power_2(used*3)’.  Previously, dict is shrinked only
     when ‘used == 0’.  Now dict has more chance to be shrinked.

   - bpo-29922(128): Improved error messages in ‘async with’ when
     ‘__aenter__()’ or ‘__aexit__()’ return non-awaitable object.

   - bpo-33199(129): Fix ‘ma_version_tag’ in dict implementation is
     uninitialized when copying from key-sharing dict.

   - bpo-33053(130): When using the -m switch, sys.path[0] is now
     explicitly expanded as the 'starting' working directory, rather
     than being left as the empty path (which allows imports from the
     current working directory at the time of the import)

   - bpo-33138(131): Changed standard error message for non-pickleable
     and non-copyable types.  It now says “cannot pickle” instead of
     “can’t pickle” or “cannot serialize”.

   - bpo-33018(132): Improve consistency of errors raised by
     ‘issubclass()’ when called with a non-class and an abstract base
     class as the first and second arguments, respectively.  Patch by
     Josh Bronson.

   - bpo-33083(133): ‘math.factorial’ no longer accepts arguments that
     are not int-like.  Patch by Pablo Galindo.

   - bpo-33041(134): Added new opcode *note END_ASYNC_FOR: ab9. and
     fixes the following issues:

        * Setting global *note StopAsyncIteration: 1ba5. no longer
          breaks ‘async for’ loops.

        * Jumping into an ‘async for’ loop is now disabled.

        * Jumping out of an ‘async for’ loop no longer corrupts the
          stack.

   - bpo-25750(135): Fix rare Python crash due to bad refcounting in
     ‘type_getattro()’ if a descriptor deletes itself from the class.
     Patch by Jeroen Demeyer.

   - bpo-33041(136): Fixed bytecode generation for “async for” with a
     complex target.  A StopAsyncIteration raised on assigning or
     unpacking will be now propagated instead of stopping the iteration.

   - bpo-33026(137): Fixed jumping out of “with” block by setting
     f_lineno.

   - bpo-33005(138): Fix a crash on fork when using a custom memory
     allocator (ex: using PYTHONMALLOC env var).  _PyGILState_Reinit()
     and _PyInterpreterState_Enable() now use the default RAW memory
     allocator to allocate a new interpreters mutex on fork.

   - bpo-32911(139): Due to unexpected compatibility issues discovered
     during downstream beta testing, reverted bpo-29463(140).
     ‘docstring’ field is removed from Module, ClassDef, FunctionDef,
     and AsyncFunctionDef ast nodes which was added in 3.7a1.  Docstring
     expression is restored as a first statement in their body.  Based
     on patch by Inada Naoki.

   - bpo-17288(141): Prevent jumps from ‘return’ and ‘exception’ trace
     events.

   - bpo-32946(142): Importing names from already imported module with
     “from … import …” is now 30% faster if the module is not a package.

   - bpo-32932(143): Make error message more revealing when there are
     non-str objects in ‘__all__’.

   - bpo-32925(144): Optimized iterating and containing test for literal
     lists consisting of non-constants: ‘x in [a, b]’ and ‘for x in [a,
     b]’.  The case of all constant elements already was optimized.

   - bpo-32889(145): Update Valgrind suppression list to account for the
     rename of ‘Py_ADDRESS_IN_RANG’ to ‘address_in_range’.

   - bpo-32836(146): Don’t use temporary variables in cases of
     list/dict/set comprehensions

   - bpo-31356(147): Remove the new API added in bpo-31356(148)
     (gc.ensure_disabled() context manager).

   - bpo-32305(149): For namespace packages, ensure that both ‘__file__’
     and ‘__spec__.origin’ are set to None.

   - bpo-32303(150): Make sure ‘__spec__.loader’ matches ‘__loader__’
     for namespace packages.

   - bpo-32711(151): Fix the warning messages for Python/ast_unparse.c.
     Patch by Stéphane Wirtel

   - bpo-32583(152): Fix possible crashing in builtin Unicode decoders
     caused by write out-of-bound errors when using customized decode
     error handlers.

   - bpo-32489(153): A *note continue: 9d1. statement is now allowed in
     the *note finally: 9d2. clause.

   - bpo-17611(154): Simplified the interpreter loop by moving the logic
     of unrolling the stack of blocks into the compiler.  The compiler
     emits now explicit instructions for adjusting the stack of values
     and calling the cleaning up code for *note break: ab8, *note
     continue: 9d1. and *note return: 9d6.

     Removed opcodes ‘BREAK_LOOP’, ‘CONTINUE_LOOP’, ‘SETUP_LOOP’ and
     ‘SETUP_EXCEPT’.  Added new opcodes ‘ROT_FOUR’, ‘BEGIN_FINALLY’ and
     ‘CALL_FINALLY’ and ‘POP_FINALLY’.  Changed the behavior of
     ‘END_FINALLY’ and ‘WITH_CLEANUP_START’.

   - bpo-32285(155): New function unicodedata.is_normalized, which can
     check whether a string is in a specific normal form.

   - bpo-10544(156): Yield expressions are now disallowed in
     comprehensions and generator expressions except the expression for
     the outermost iterable.

   - bpo-32117(157): Iterable unpacking is now allowed without
     parentheses in yield and return statements, e.g.  ‘yield 1, 2, 3,
     *rest’.  Thanks to David Cuthbert for the change and Jordan Chapman
     for added tests.

   - bpo-31902(158): Fix the ‘col_offset’ attribute for ast nodes
     ‘ast.AsyncFor’, ‘ast.AsyncFunctionDef’, and ‘ast.AsyncWith’.
     Previously, ‘col_offset’ pointed to the keyword after ‘async’.

   - bpo-25862(159): Fix assertion failures in the ‘tell()’ method of
     ‘io.TextIOWrapper’.  Patch by Zackery Spytz.

   - bpo-21983(160): Fix a crash in ‘ctypes.cast()’ in case the type
     argument is a ctypes structured data type.  Patch by Eryk Sun and
     Oren Milman.

   - bpo-31577(161): Fix a crash in ‘os.utime()’ in case of a bad ns
     argument.  Patch by Oren Milman.

   - bpo-29832(162): Remove references to ‘getsockaddrarg’ from various
     socket error messages.  Patch by Oren Milman.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35877

   (2) https://bugs.python.org/issue?@action=redirect&bpo=35814

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35766

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35713

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33416

   (6) https://bugs.python.org/issue?@action=redirect&bpo=35720

   (7) https://bugs.python.org/issue?@action=redirect&bpo=35634

   (8) https://bugs.python.org/issue?@action=redirect&bpo=35623

   (9) https://bugs.python.org/issue?@action=redirect&bpo=35214

   (10) https://bugs.python.org/issue?@action=redirect&bpo=35560

   (11) https://bugs.python.org/issue?@action=redirect&bpo=35552

   (12) https://bugs.python.org/issue?@action=redirect&bpo=35504

   (13) https://bugs.python.org/issue?@action=redirect&bpo=35504

   (14) https://bugs.python.org/issue?@action=redirect&bpo=35494

   (15) https://bugs.python.org/issue?@action=redirect&bpo=35444

   (16) https://bugs.python.org/issue?@action=redirect&bpo=35436

   (17) https://bugs.python.org/issue?@action=redirect&bpo=35423

   (18) https://bugs.python.org/issue?@action=redirect&bpo=35357

   (19) https://bugs.python.org/issue?@action=redirect&bpo=35372

   (20) https://bugs.python.org/issue?@action=redirect&bpo=35336

   (21) https://bugs.python.org/issue?@action=redirect&bpo=31241

   (22) https://bugs.python.org/issue?@action=redirect&bpo=33954

   (23) https://bugs.python.org/issue?@action=redirect&bpo=35269

   (24) https://bugs.python.org/issue?@action=redirect&bpo=35224

   (25) https://peps.python.org/pep-0572/

   (26) https://bugs.python.org/issue?@action=redirect&bpo=32492

   (27) https://bugs.python.org/issue?@action=redirect&bpo=35214

   (28) https://bugs.python.org/issue?@action=redirect&bpo=35214

   (29) https://bugs.python.org/issue?@action=redirect&bpo=35193

   (30) https://bugs.python.org/issue?@action=redirect&bpo=35169

   (31) https://bugs.python.org/issue?@action=redirect&bpo=34022

   (32) https://bugs.python.org/issue?@action=redirect&bpo=28401

   (33) https://bugs.python.org/issue?@action=redirect&bpo=29341

   (34) https://bugs.python.org/issue?@action=redirect&bpo=35050

   (35) https://bugs.python.org/issue?@action=redirect&bpo=29743

   (36) https://bugs.python.org/issue?@action=redirect&bpo=16806

   (37) https://bugs.python.org/issue?@action=redirect&bpo=35029

   (38) https://bugs.python.org/issue?@action=redirect&bpo=34983

   (39) https://bugs.python.org/issue?@action=redirect&bpo=34974

   (40) https://bugs.python.org/issue?@action=redirect&bpo=34939

   (41) https://bugs.python.org/issue?@action=redirect&bpo=34973

   (42) https://bugs.python.org/issue?@action=redirect&bpo=34876

   (43) https://bugs.python.org/issue?@action=redirect&bpo=34879

   (44) https://bugs.python.org/issue?@action=redirect&bpo=34784

   (45) https://bugs.python.org/issue?@action=redirect&bpo=32912

   (46) https://bugs.python.org/issue?@action=redirect&bpo=34854

   (47) https://bugs.python.org/issue?@action=redirect&bpo=34850

   (48) https://bugs.python.org/issue?@action=redirect&bpo=34824

   (49) https://bugs.python.org/issue?@action=redirect&bpo=30156

   (50) https://bugs.python.org/issue?@action=redirect&bpo=34762

   (51) https://bugs.python.org/issue?@action=redirect&bpo=34751

   (52) https://bugs.python.org/issue?@action=redirect&bpo=34735

   (53) https://bugs.python.org/issue?@action=redirect&bpo=34683

   (54) https://bugs.python.org/issue?@action=redirect&bpo=34651

   (55) https://bugs.python.org/issue?@action=redirect&bpo=34653

   (56) https://bugs.python.org/issue?@action=redirect&bpo=32236

   (57) https://bugs.python.org/issue?@action=redirect&bpo=34641

   (58) https://bugs.python.org/issue?@action=redirect&bpo=34637

   (59) https://bugs.python.org/issue?@action=redirect&bpo=1621

   (60) https://bugs.python.org/issue?@action=redirect&bpo=34588

   (61) https://bugs.python.org/issue?@action=redirect&bpo=34485

   (62) https://bugs.python.org/issue?@action=redirect&bpo=34485

   (63) https://bugs.python.org/issue?@action=redirect&bpo=34485

   (64) https://bugs.python.org/issue?@action=redirect&bpo=34485

   (65) https://bugs.python.org/issue?@action=redirect&bpo=34527

   (66) https://bugs.python.org/issue?@action=redirect&bpo=34527

   (67) https://bugs.python.org/issue?@action=redirect&bpo=34403

   (68) https://bugs.python.org/issue?@action=redirect&bpo=34523

   (69) https://bugs.python.org/issue?@action=redirect&bpo=12458

   (70) https://bugs.python.org/issue?@action=redirect&bpo=34408

   (71) https://bugs.python.org/issue?@action=redirect&bpo=34400

   (72) https://bugs.python.org/issue?@action=redirect&bpo=33073

   (73) https://bugs.python.org/issue?@action=redirect&bpo=34377

   (74) https://bugs.python.org/issue?@action=redirect&bpo=34353

   (75) https://bugs.python.org/issue?@action=redirect&bpo=34320

   (76) https://bugs.python.org/issue?@action=redirect&bpo=34113

   (77) https://bugs.python.org/issue?@action=redirect&bpo=34100

   (78) https://bugs.python.org/issue?@action=redirect&bpo=34151

   (79) https://bugs.python.org/issue?@action=redirect&bpo=34170

   (80) https://bugs.python.org/issue?@action=redirect&bpo=33237

   (81) https://bugs.python.org/issue?@action=redirect&bpo=34149

   (82) https://bugs.python.org/issue?@action=redirect&bpo=34125

   (83) https://bugs.python.org/issue?@action=redirect&bpo=34141

   (84) https://bugs.python.org/issue?@action=redirect&bpo=34126

   (85) https://bugs.python.org/issue?@action=redirect&bpo=24618

   (86) https://bugs.python.org/issue?@action=redirect&bpo=34068

   (87) https://bugs.python.org/issue?@action=redirect&bpo=34087

   (88) https://bugs.python.org/issue?@action=redirect&bpo=34080

   (89) https://bugs.python.org/issue?@action=redirect&bpo=34066

   (90) https://bugs.python.org/issue?@action=redirect&bpo=34042

   (91) https://bugs.python.org/issue?@action=redirect&bpo=33418

   (92) https://bugs.python.org/issue?@action=redirect&bpo=33985

   (93) https://bugs.python.org/issue?@action=redirect&bpo=33956

   (94) https://bugs.python.org/issue?@action=redirect&bpo=24596

   (95) https://bugs.python.org/issue?@action=redirect&bpo=33451

   (96) https://bugs.python.org/issue?@action=redirect&bpo=1617161

   (97) https://bugs.python.org/issue?@action=redirect&bpo=33824

   (98) https://bugs.python.org/issue?@action=redirect&bpo=33803

   (99) https://bugs.python.org/issue?@action=redirect&bpo=33738

   (100) https://bugs.python.org/issue?@action=redirect&bpo=33786

   (101) https://bugs.python.org/issue?@action=redirect&bpo=30167

   (102) https://bugs.python.org/issue?@action=redirect&bpo=33706

   (103) https://bugs.python.org/issue?@action=redirect&bpo=33597

   (104) https://bugs.python.org/issue?@action=redirect&bpo=30654

   (105) https://bugs.python.org/issue?@action=redirect&bpo=33622

   (106) https://bugs.python.org/issue?@action=redirect&bpo=33462

   (107) https://bugs.python.org/issue?@action=redirect&bpo=23722

   (108) https://bugs.python.org/issue?@action=redirect&bpo=33499

   (109) https://bugs.python.org/issue?@action=redirect&bpo=25711

   (110) https://bugs.python.org/issue?@action=redirect&bpo=33509

   (111) https://bugs.python.org/issue?@action=redirect&bpo=31849

   (112) https://bugs.python.org/issue?@action=redirect&bpo=33475

   (113) https://bugs.python.org/issue?@action=redirect&bpo=20104

   (114) https://bugs.python.org/issue?@action=redirect&bpo=33391

   (115) https://bugs.python.org/issue?@action=redirect&bpo=33363

   (116) https://bugs.python.org/issue?@action=redirect&bpo=28055

   (117) https://bugs.python.org/issue?@action=redirect&bpo=33128

   (118) https://bugs.python.org/issue?@action=redirect&bpo=33331

   (119) https://bugs.python.org/issue?@action=redirect&bpo=33312

   (120) https://bugs.python.org/issue?@action=redirect&bpo=33305

   (121) https://bugs.python.org/issue?@action=redirect&bpo=33306

   (122) https://bugs.python.org/issue?@action=redirect&bpo=33234

   (123) https://bugs.python.org/issue?@action=redirect&bpo=33270

   (124) https://bugs.python.org/issue?@action=redirect&bpo=30455

   (125) https://bugs.python.org/issue?@action=redirect&bpo=33176

   (126) https://bugs.python.org/issue?@action=redirect&bpo=33231

   (127) https://bugs.python.org/issue?@action=redirect&bpo=33205

   (128) https://bugs.python.org/issue?@action=redirect&bpo=29922

   (129) https://bugs.python.org/issue?@action=redirect&bpo=33199

   (130) https://bugs.python.org/issue?@action=redirect&bpo=33053

   (131) https://bugs.python.org/issue?@action=redirect&bpo=33138

   (132) https://bugs.python.org/issue?@action=redirect&bpo=33018

   (133) https://bugs.python.org/issue?@action=redirect&bpo=33083

   (134) https://bugs.python.org/issue?@action=redirect&bpo=33041

   (135) https://bugs.python.org/issue?@action=redirect&bpo=25750

   (136) https://bugs.python.org/issue?@action=redirect&bpo=33041

   (137) https://bugs.python.org/issue?@action=redirect&bpo=33026

   (138) https://bugs.python.org/issue?@action=redirect&bpo=33005

   (139) https://bugs.python.org/issue?@action=redirect&bpo=32911

   (140) https://bugs.python.org/issue?@action=redirect&bpo=29463

   (141) https://bugs.python.org/issue?@action=redirect&bpo=17288

   (142) https://bugs.python.org/issue?@action=redirect&bpo=32946

   (143) https://bugs.python.org/issue?@action=redirect&bpo=32932

   (144) https://bugs.python.org/issue?@action=redirect&bpo=32925

   (145) https://bugs.python.org/issue?@action=redirect&bpo=32889

   (146) https://bugs.python.org/issue?@action=redirect&bpo=32836

   (147) https://bugs.python.org/issue?@action=redirect&bpo=31356

   (148) https://bugs.python.org/issue?@action=redirect&bpo=31356

   (149) https://bugs.python.org/issue?@action=redirect&bpo=32305

   (150) https://bugs.python.org/issue?@action=redirect&bpo=32303

   (151) https://bugs.python.org/issue?@action=redirect&bpo=32711

   (152) https://bugs.python.org/issue?@action=redirect&bpo=32583

   (153) https://bugs.python.org/issue?@action=redirect&bpo=32489

   (154) https://bugs.python.org/issue?@action=redirect&bpo=17611

   (155) https://bugs.python.org/issue?@action=redirect&bpo=32285

   (156) https://bugs.python.org/issue?@action=redirect&bpo=10544

   (157) https://bugs.python.org/issue?@action=redirect&bpo=32117

   (158) https://bugs.python.org/issue?@action=redirect&bpo=31902

   (159) https://bugs.python.org/issue?@action=redirect&bpo=25862

   (160) https://bugs.python.org/issue?@action=redirect&bpo=21983

   (161) https://bugs.python.org/issue?@action=redirect&bpo=31577

   (162) https://bugs.python.org/issue?@action=redirect&bpo=29832


File: python.info,  Node: Biblioteca<137>,  Next: Documentação<52>,  Prev: Núcleo e embutidos<135>,  Up: Python 3 8 0 alpha 1

1.23.62.3 Biblioteca
....................

   - bpo-35845(1): Add ‘order’ parameter to memoryview.tobytes().

   - bpo-35864(2): The _asdict() method for collections.namedtuple now
     returns a regular dict instead of an OrderedDict.

   - bpo-35537(3): An ExitStack is now used internally within
     subprocess.Popen to clean up pipe file handles.  No behavior change
     in normal operation.  But if closing one handle were ever to cause
     an exception, the others will now be closed instead of leaked.
     (patch by Giampaolo Rodola)

   - bpo-35847(4): RISC-V needed the CTYPES_PASS_BY_REF_HACK. Fixes
     ctypes Structure test_pass_by_value.

   - bpo-35813(5): Shared memory submodule added to multiprocessing to
     avoid need for serialization between processes

   - bpo-35780(6): Fix lru_cache() errors arising in recursive,
     reentrant, or multi-threaded code.  These errors could result in
     orphan links and in the cache being trapped in a state with fewer
     than the specified maximum number of links.  Fix handling of
     negative maxsize which should have been treated as zero.  Fix
     errors in toggling the “full” status flag.  Fix misordering of
     links when errors are encountered.  Sync-up the C code and pure
     Python code for the space saving path in functions with a single
     positional argument.  In this common case, the space overhead of an
     lru cache entry is reduced by almost half.  Fix counting of cache
     misses.  In error cases, the miss count was out of sync with the
     actual number of times the underlying user function was called.

   - bpo-35537(7): *note os.posix_spawn(): 220. and *note
     os.posix_spawnp(): 1ba7. now have a 'setsid' parameter.

   - bpo-23846(8): *note asyncio.ProactorEventLoop: 609. now catches and
     logs send errors when the self-pipe is full.

   - bpo-34323(9): *note asyncio: a.: Enhance ‘IocpProactor.close()’
     log: wait 1 second before the first log, then log every second.
     Log also the number of seconds since ‘close()’ was called.

   - bpo-35674(10): Add a new *note os.posix_spawnp(): 1ba7. function.
     Patch by Joannah Nanjekye.

   - bpo-35733(11): ‘ast.Constant(boolean)’ no longer an instance of
     ‘ast.Num’.  Patch by Anthony Sottile.

   - bpo-35726(12): QueueHandler.prepare() now makes a copy of the
     record before modifying and enqueueing it, to avoid affecting other
     handlers in the chain.

   - bpo-35719(13): Sped up multi-argument *note math: 8e. functions
     atan2(), copysign(), remainder() and hypot() by 1.3–2.5 times.

   - bpo-35717(14): Fix KeyError exception raised when using enums and
     compile.  Patch contributed by Rémi Lapeyre.

   - bpo-35699(15): Fixed detection of Visual Studio Build Tools 2017 in
     distutils

   - bpo-32710(16): Fix memory leaks in asyncio ProactorEventLoop on
     overlapped operation failure.

   - bpo-35702(17): The *note time.CLOCK_UPTIME_RAW: a4c. constant is
     now available for macOS 10.12.

   - bpo-32710(18): Fix a memory leak in asyncio in the
     ProactorEventLoop when ‘ReadFile()’ or ‘WSASend()’ overlapped
     operation fail immediately: release the internal buffer.

   - bpo-35682(19): Fix ‘asyncio.ProactorEventLoop.sendfile()’: don’t
     attempt to set the result of an internal future if it’s already
     done.

   - bpo-35283(20): Add a deprecated warning for the
     ‘threading.Thread.isAlive()’ method.  Patch by Donghee Na.

   - bpo-35664(21): Improve operator.itemgetter() performance by 33%
     with optimized argument handling and with adding a fast path for
     the common case of a single non-negative integer index into a tuple
     (which is the typical use case in the standard library).

   - bpo-35643(22): Fixed a SyntaxWarning: invalid escape sequence in
     Modules/_sha3/cleanup.py.  Patch by Mickaël Schoentgen.

   - bpo-35619(23): Improved support of custom data descriptors in *note
     help(): 8dd. and *note pydoc: b5.

   - bpo-28503(24): The ‘crypt’ module now internally uses the
     ‘crypt_r()’ library function instead of ‘crypt()’ when available.

   - bpo-35614(25): Fixed help() on metaclasses.  Patch by Sanyam
     Khurana.

   - bpo-35568(26): Expose ‘raise(signum)’ as ‘raise_signal’

   - bpo-35588(27): The floor division and modulo operations and the
     *note divmod(): 9a9. function on *note fractions.Fraction: 1e7.
     types are 2–4x faster.  Patch by Stefan Behnel.

   - bpo-35585(28): Speed-up building enums by value, e.g.
     http.HTTPStatus(200).

   - bpo-30561(29): random.gammavariate(1.0, beta) now computes the same
     result as random.expovariate(1.0 / beta).  This synchronizes the
     two algorithms and eliminates some idiosyncrasies in the old
     implementation.  It does however produce a difference stream of
     random variables than it used to.

   - bpo-35537(30): The *note subprocess: d6. module can now use the
     *note os.posix_spawn(): 220. function in some cases for better
     performance.

   - bpo-35526(31): Delaying the ‘joke’ of barry_as_FLUFL.mandatory to
     Python version 4.0

   - bpo-35523(32): Remove *note ctypes: 2a. callback workaround: no
     longer create a callback at startup.  Avoid SELinux alert on
     ‘import ctypes’ and ‘import uuid’.

   - bpo-31784(33): *note uuid.uuid1(): bc0. now calls *note
     time.time_ns(): af9. rather than ‘int(time.time() * 1e9)’.

   - bpo-35513(34): ‘TextTestRunner’ of ‘unittest.runner’ now uses *note
     time.perf_counter(): a92. rather than *note time.time(): 254. to
     measure the execution time of a test: *note time.time(): 254. can
     go backwards, whereas *note time.perf_counter(): a92. is monotonic.

   - bpo-35502(35): Fixed reference leaks in *note
     xml.etree.ElementTree.TreeBuilder: a5f. in case of unfinished
     building of the tree (in particular when an error was raised during
     parsing XML).

   - bpo-35348(36): Make *note platform.architecture(): 1781. parsing of
     ‘file’ command output more reliable: add the ‘-b’ option to the
     ‘file’ command to omit the filename, force the usage of the C
     locale, and search also the “shared object” pattern.

   - bpo-35491(37): *note multiprocessing: 94.: Add ‘Pool.__repr__()’
     and enhance ‘BaseProcess.__repr__()’ (add pid and parent pid) to
     ease debugging.  Pool state constant values are now strings instead
     of integers, for example ‘RUN’ value becomes ‘'RUN'’ instead of
     ‘0’.

   - bpo-35477(38): ‘multiprocessing.Pool.__enter__()’ now fails if the
     pool is not running: ‘with pool:’ fails if used more than once.

   - bpo-31446(39): Copy command line that was passed to CreateProcessW
     since this function can change the content of the input buffer.

   - bpo-35471(40): Python 2.4 dropped MacOS 9 support.  The macpath
     module was deprecated in Python 3.7.  The module is now removed.

   - bpo-23057(41): Unblock Proactor event loop when keyboard interrupt
     is received on Windows

   - bpo-35052(42): Fix xml.dom.minidom cloneNode() on a document with
     an entity: pass the correct arguments to the user data handler of
     an entity.

   - bpo-20239(43): Allow repeated assignment deletion of *note
     unittest.mock.Mock: a54. attributes.  Patch by Pablo Galindo.

   - bpo-17185(44): Set ‘__signature__’ on mock for *note inspect: 7e.
     to get signature.  Patch by Karthikeyan Singaravelan.

   - bpo-35445(45): Memory errors during creating posix.environ no
     longer ignored.

   - bpo-35415(46): Validate fileno= argument to socket.socket().

   - bpo-35424(47): ‘multiprocessing.Pool’ destructor now emits *note
     ResourceWarning: 244. if the pool is still running.

   - bpo-35330(48): When a ‘Mock’ instance was used to wrap an object,
     if ‘side_effect’ is used in one of the mocks of it methods, don’t
     call the original implementation and return the result of using the
     side effect the same way that it is done with return_value.

   - bpo-35346(49): Drop Mac OS 9 and Rhapsody support from the *note
     platform: aa. module.  Rhapsody last release was in 2000.  Mac OS 9
     last release was in 2001.

   - bpo-10496(50): ‘check_environ()’ of ‘distutils.utils’ now catches
     *note KeyError: 344. on calling *note pwd.getpwuid(): 1ba8.: don’t
     create the ‘HOME’ environment variable in this case.

   - bpo-10496(51): ‘posixpath.expanduser()’ now returns the input
     'path' unchanged if the ‘HOME’ environment variable is not set and
     the current user has no home directory (if the current user
     identifier doesn’t exist in the password database).  This change
     fix the *note site: c7. module if the current user doesn’t exist in
     the password database (if the user has no home directory).

   - bpo-35389(52): *note platform.libc_ver(): 1ba9. now uses
     ‘os.confstr('CS_GNU_LIBC_VERSION')’ if available and the
     'executable' parameter is not set.

   - bpo-35394(53): Add empty slots to asyncio abstract protocols.

   - bpo-35310(54): Fix a bug in *note select.select(): dc8. where, in
     some cases, the file descriptor sequences were returned unmodified
     after a signal interruption, even though the file descriptors might
     not be ready yet.  *note select.select(): dc8. will now always
     return empty lists if a timeout has occurred.  Patch by Oran
     Avraham.

   - bpo-35380(55): Enable TCP_NODELAY on Windows for proactor asyncio
     event loop.

   - bpo-35341(56): Add generic version of ‘collections.OrderedDict’ to
     the ‘typing’ module.  Patch by Ismo Toijala.

   - bpo-35371(57): Fixed possible crash in ‘os.utime()’ on Windows when
     pass incorrect arguments.

   - bpo-35346(58): *note platform.uname(): 1baa. now redirects ‘stderr’
     to *note os.devnull: 1bab. when running external programs like ‘cmd
     /c ver’.

   - bpo-35066(59): Previously, calling the strftime() method on a
     datetime object with a trailing ‘%’ in the format string would
     result in an exception.  However, this only occurred when the
     datetime C module was being used; the python implementation did not
     match this behavior.  Datetime is now PEP-399 compliant, and will
     not throw an exception on a trailing ‘%’.

   - bpo-35345(60): The function ‘platform.popen’ has been removed, it
     was deprecated since Python 3.3: use *note os.popen(): a91.
     instead.

   - bpo-35344(61): On macOS, *note platform.platform(): 184e. now uses
     *note platform.mac_ver(): 1bac, if it returns a non-empty release
     string, to get the macOS version rather than the darwin version.

   - bpo-35312(62): Make ‘lib2to3.pgen2.parse.ParseError’ round-trip
     pickle-able.  Patch by Anthony Sottile.

   - bpo-35308(63): Fix regression in ‘webbrowser’ where default
     browsers may be preferred over browsers in the ‘BROWSER’
     environment variable.

   - bpo-24746(64): Avoid stripping trailing whitespace in doctest fancy
     diff.  Original patch by R. David Murray & Jairo Trad.  Enhanced by
     Sanyam Khurana.

   - bpo-28604(65): *note locale.localeconv(): c18. now sets temporarily
     the ‘LC_CTYPE’ locale to the ‘LC_MONETARY’ locale if the two
     locales are different and monetary strings are non-ASCII. This
     temporary change affects other threads.

   - bpo-35277(66): Update ensurepip to install pip 18.1 and setuptools
     40.6.2.

   - bpo-24209(67): Adds IPv6 support when invoking http.server
     directly.

   - bpo-35226(68): Recursively check arguments when testing for
     equality of *note unittest.mock.call: 1b45. objects and add note
     that tracking of parameters used to create ancestors of mocks in
     ‘mock_calls’ is not possible.

   - bpo-29564(69): The warnings module now suggests to enable
     tracemalloc if the source is specified, the tracemalloc module is
     available, but tracemalloc is not tracing memory allocations.

   - bpo-35189(70): Modify the following fnctl function to retry if
     interrupted by a signal (EINTR): flock, lockf, fnctl

   - bpo-30064(71): Use add_done_callback() in sock_* asyncio API to
     unsubscribe reader/writer early on calcellation.

   - bpo-35186(72): Removed the “built with” comment added when
     ‘setup.py upload’ is used with either ‘bdist_rpm’ or ‘bdist_dumb’.

   - bpo-35152(73): Allow sending more than 2 GB at once on a
     multiprocessing connection on non-Windows systems.

   - bpo-35062(74): Fix incorrect parsing of *note
     io.IncrementalNewlineDecoder: 17bb.’s 'translate' argument.

   - bpo-35065(75): Remove ‘StreamReaderProtocol._untrack_reader’.  The
     call to ‘_untrack_reader’ is currently performed too soon, causing
     the protocol to forget about the reader before ‘connection_lost’
     can run and feed the EOF to the reader.

   - bpo-34160(76): ElementTree and minidom now preserve the attribute
     order specified by the user.

   - bpo-35079(77): Improve difflib.SequenceManager.get_matching_blocks
     doc by adding ‘non-overlapping’ and changing ‘!=’ to ‘<’.

   - bpo-33710(78): Deprecated ‘l*gettext()’ functions and methods in
     the *note gettext: 63. module.  They return encoded bytes instead
     of Unicode strings and are artifacts from Python 2 times.  Also
     deprecated functions and methods related to setting the charset for
     ‘l*gettext()’ functions and methods.

   - bpo-35017(79): *note socketserver.BaseServer.serve_forever(): 117e.
     now exits immediately if it’s *note shutdown(): 1bad. method is
     called while it is polling for new events.

   - bpo-35024(80): ‘importlib’ no longer logs ‘wrote <bytecode path>’
     redundantly after ‘(created|could not create) <bytecode path>’ is
     already logged.  Patch by Quentin Agren.

   - bpo-35047(81): ‘unittest.mock’ now includes mock calls in exception
     messages if ‘assert_not_called’, ‘assert_called_once’, or
     ‘assert_called_once_with’ fails.  Patch by Petter Strandmark.

   - bpo-31047(82): Fix ‘ntpath.abspath’ regression where it didn’t
     remove a trailing separator on Windows.  Patch by Tim Graham.

   - bpo-35053(83): tracemalloc now tries to update the traceback when
     an object is reused from a “free list” (optimization for faster
     object creation, used by the builtin list type for example).

   - bpo-31553(84): Add the –json-lines option to json.tool.  Patch by
     hongweipeng.

   - bpo-34794(85): Fixed a leak in Tkinter when pass the Python wrapper
     around Tcl_Obj back to Tcl/Tk.

   - bpo-34909(86): Enum: fix grandchildren subclassing when parent
     mixed with concrete data types.

   - bpo-35022(87): *note unittest.mock.MagicMock: ebe. now supports the
     ‘__fspath__’ method (from *note os.PathLike: c6c.).

   - bpo-35008(88): Fixed references leaks when call the
     ‘__setstate__()’ method of *note xml.etree.ElementTree.Element:
     310. in the C implementation for already initialized element.

   - bpo-23420(89): Verify the value for the parameter ‘-s’ of the
     cProfile CLI. Patch by Robert Kuska

   - bpo-33947(90): dataclasses now handle recursive reprs without
     raising RecursionError.

   - bpo-34890(91): Make *note inspect.iscoroutinefunction(): 2e4, *note
     inspect.isgeneratorfunction(): 18e6. and *note
     inspect.isasyncgenfunction(): 18e7. work with *note
     functools.partial(): 414.  Patch by Pablo Galindo.

   - bpo-34521(92): Use *note socket.CMSG_SPACE(): 1bae. to calculate
     ancillary data size instead of *note socket.CMSG_LEN(): 1baf. in
     ‘multiprocessing.reduction.recvfds()’ as RFC 3542(93) requires the
     use of the former for portable applications.

   - bpo-31522(94): The ‘mailbox.mbox.get_string’ function 'from_'
     parameter can now successfully be set to a non-default value.

   - bpo-34970(95): Protect tasks weak set manipulation in
     ‘asyncio.all_tasks()’

   - bpo-34969(96): gzip: Add –fast, –best on the gzip CLI, these
     parameters will be used for the fast compression method (quick) or
     the best method compress (slower, but smaller file).  Also, change
     the default compression level to 6 (tradeoff).

   - bpo-16965(97): The 2to3 ‘execfile’ fixer now opens the file with
     mode ‘'rb'’.  Patch by Zackery Spytz.

   - bpo-34966(98): *note pydoc: b5. now supports aliases not only to
     methods defined in the end class, but also to inherited methods.
     The docstring is not duplicated for aliases.

   - bpo-34926(99): *note mimetypes.MimeTypes.guess_type(): 1bb0. now
     accepts *note path-like object: 2a0. in addition to url strings.
     Patch by Mayank Asthana.

   - bpo-23831(100): Add ‘moveto()’ method to the ‘tkinter.Canvas’
     widget.  Patch by Juliette Monsel.

   - bpo-34941(101): Methods ‘find()’, ‘findtext()’ and ‘findall()’ of
     the ‘Element’ class in the *note xml.etree.ElementTree: 125. module
     are now able to find children which are instances of ‘Element’
     subclasses.

   - bpo-32680(102): *note smtplib.SMTP: 934. objects now always have a
     ‘sock’ attribute present

   - bpo-34769(103): Fix for async generators not finalizing when event
     loop is in debug mode and garbage collector runs in another thread.

   - bpo-34936(104): Fix ‘TclError’ in
     ‘tkinter.Spinbox.selection_element()’.  Patch by Juliette Monsel.

   - bpo-34829(105): Add methods ‘selection_from’, ‘selection_range’,
     ‘selection_present’ and ‘selection_to’ to the ‘tkinter.Spinbox’ for
     consistency with the ‘tkinter.Entry’ widget.  Patch by Juliette
     Monsel.

   - bpo-34911(106): Added 'secure_protocols' argument to
     'http.cookiejar.DefaultCookiePolicy' to allow for tweaking of
     protocols and also to add support by default for 'wss', the secure
     websocket protocol.

   - bpo-34922(107): Fixed integer overflow in the *note digest(): 1bb1.
     and *note hexdigest(): 1bb2. methods for the SHAKE algorithm in the
     *note hashlib: 68. module.

   - bpo-34925(108): 25% speedup in argument parsing for the functions
     in the bisect module.

   - bpo-34900(109): Fixed *note unittest.TestCase.debug(): 19d4. when
     used to call test methods with subtests.  Patch by Bruno Oliveira.

   - bpo-34844(110): logging.Formatter enhancement - Ensure styles and
     fmt matches in logging.Formatter - Added validate method in each
     format style class: StrFormatStyle, PercentStyle,
     StringTemplateStyle.  - This method is called in the constructor of
     logging.Formatter class - Also re-raise the KeyError in the format
     method of each style class, so it would a bit clear that it’s an
     error with the invalid format fields.

   - bpo-34897(111): Adjust test.support.missing_compiler_executable
     check so that a nominal command name of “” is ignored.  Patch by
     Michael Felt.

   - bpo-34871(112): Fix inspect module polluted ‘sys.modules’ when
     parsing ‘__text_signature__’ of callable.

   - bpo-34898(113): Add ‘mtime’ argument to ‘gzip.compress’ for
     reproducible output.  Patch by Guo Ci Teo.

   - bpo-28441(114): On Cygwin and MinGW, ensure that ‘sys.executable’
     always includes the full filename in the path, including the ‘.exe’
     suffix (unless it is a symbolic link).

   - bpo-34866(115): Adding ‘max_num_fields’ to ‘cgi.FieldStorage’ to
     make DOS attacks harder by limiting the number of
     ‘MiniFieldStorage’ objects created by ‘FieldStorage’.

   - bpo-34711(116): http.server ensures it reports HTTPStatus.NOT_FOUND
     when the local path ends with “/” and is not a directory, even if
     the underlying OS (e.g.  AIX) accepts such paths as a valid file
     reference.  Patch by Michael Felt.

   - bpo-34872(117): Fix self-cancellation in C implementation of
     asyncio.Task

   - bpo-34849(118): Don’t log waiting for ‘selector.select’ in asyncio
     loop iteration.  The waiting is pretty normal for any asyncio
     program, logging its time just adds a noise to logs without any
     useful information provided.

   - bpo-34022(119): The ‘SOURCE_DATE_EPOCH’ environment variable no
     longer overrides the value of the 'invalidation_mode' argument to
     *note py_compile.compile(): a2f, and determines its default value
     instead.

   - bpo-34819(120): Use a monotonic clock to compute timeouts in
     ‘Executor.map()’ and ‘as_completed()’, in order to prevent timeouts
     from deviating when the system clock is adjusted.

   - bpo-34758(121): Add .wasm -> application/wasm to list of recognized
     file types and content type headers

   - bpo-34789(122): *note xml.sax.make_parser(): 1bb3. now accepts any
     iterable as its 'parser_list' argument.  Patch by Andrés Delfino.

   - bpo-34334(123): In ‘QueueHandler’, clear ‘exc_text’ from
     ‘LogRecord’ to prevent traceback from being written twice.

   - bpo-34687(124): On Windows, asyncio now uses ProactorEventLoop,
     instead of SelectorEventLoop, by default.

   - bpo-5950(125): Support reading zip files with archive comments in
     *note zipimport: 132.

   - bpo-32892(126): The parser now represents all constants as *note
     ast.Constant: 2b9. instead of using specific constant AST types
     (‘Num’, ‘Str’, ‘Bytes’, ‘NameConstant’ and ‘Ellipsis’).  These
     classes are considered deprecated and will be removed in future
     Python versions.

   - bpo-34728(127): Add deprecation warning when ‘loop’ is used in
     methods: ‘asyncio.sleep’, ‘asyncio.wait’ and ‘asyncio.wait_for’.

   - bpo-34738(128): ZIP files created by ‘distutils’ will now include
     entries for directories.

   - bpo-34659(129): Add an optional 'initial' argument to
     itertools.accumulate().

   - bpo-29577(130): Support multiple mixin classes when creating Enums.

   - bpo-34670(131): Add SSLContext.post_handshake_auth and
     SSLSocket.verify_client_post_handshake for TLS 1.3’s post handshake
     authentication feature.

   - bpo-32718(132): The Activate.ps1 script from venv works with
     PowerShell Core 6.1 and is now available under all operating
     systems.

   - bpo-31177(133): Fix bug that prevented using *note reset_mock: d1b.
     on mock instances with deleted attributes

   - bpo-34672(134): Add a workaround, so the ‘'Z'’ *note
     time.strftime(): 1229. specifier on the musl C library can work in
     some cases.

   - bpo-34666(135): Implement ‘asyncio.StreamWriter.awrite’ and
     ‘asyncio.StreamWriter.aclose()’ coroutines.  Methods are needed for
     providing a consistent stream API with control flow switched on by
     default.

   - bpo-6721(136): Acquire the logging module’s commonly used internal
     locks while fork()ing to avoid deadlocks in the child process.

   - bpo-34658(137): Fix a rare interpreter unhandled exception state
     SystemError only seen when using subprocess with a preexec_fn while
     an after_parent handler has been registered with
     os.register_at_fork and the fork system call fails.

   - bpo-34652(138): Ensure *note os.lchmod(): 21a. is never defined on
     Linux.

   - bpo-34638(139): Store a weak reference to stream reader to break
     strong references loop between reader and protocol.  It allows to
     detect and close the socket if the stream is deleted (garbage
     collected) without ‘close()’ call.

   - bpo-34536(140): ‘Enum._missing_’: raise ‘ValueError’ if None
     returned and ‘TypeError’ if non-member is returned.

   - bpo-34636(141): Speed up re scanning of many non-matching
     characters for s w and d within bytes objects.  (microoptimization)

   - bpo-24412(142): Add *note addModuleCleanup(): a55. and *note
     addClassCleanup(): a56. to unittest to support cleanups for *note
     setUpModule(): a57. and *note setUpClass(): a58.  Patch by Lisa
     Roach.

   - bpo-34630(143): Don’t log SSL certificate errors in asyncio code
     (connection error logging is skipped already).

   - bpo-32490(144): Prevent filename duplication in *note subprocess:
     d6. exception messages.  Patch by Zackery Spytz.

   - bpo-34363(145): dataclasses.asdict() and .astuple() now handle
     namedtuples correctly.

   - bpo-34625(146): Update vendorized expat library version to 2.2.6.

   - bpo-32270(147): The subprocess module no longer mistakenly closes
     redirected fds even when they were in pass_fds when outside of the
     default {0, 1, 2} set.

   - bpo-34622(148): Create a dedicated ‘asyncio.CancelledError’,
     ‘asyncio.InvalidStateError’ and ‘asyncio.TimeoutError’ exception
     classes.  Inherit them from corresponding exceptions from
     ‘concurrent.futures’ package.  Extract ‘asyncio’ exceptions into a
     separate file.

   - bpo-34610(149): Fixed iterator of
     ‘multiprocessing.managers.DictProxy’.

   - bpo-34421(150): Fix distutils logging for non-ASCII strings.  This
     caused installation issues on Windows.

   - bpo-34604(151): Fix possible mojibake in the error message of
     ‘pwd.getpwnam’ and ‘grp.getgrnam’ using string representation
     because of invisible characters or trailing whitespaces.  Patch by
     William Grzybowski.

   - bpo-30977(152): Make uuid.UUID use ‘__slots__’ to reduce its memory
     footprint.  Based on original patch by Wouter Bolsterlee.

   - bpo-34574(153): OrderedDict iterators are not exhausted during
     pickling anymore.  Patch by Sergey Fedoseev.

   - bpo-8110(154): Refactored *note subprocess: d6. to check for
     Windows-specific modules rather than ‘sys.platform == 'win32'’.

   - bpo-34530(155): ‘distutils.spawn.find_executable()’ now falls back
     on *note os.defpath: 1b79. if the ‘PATH’ environment variable is
     not set.

   - bpo-34563(156): On Windows, fix multiprocessing.Connection for very
     large read: fix _winapi.PeekNamedPipe() and _winapi.ReadFile() for
     read larger than INT_MAX (usually ‘2**31-1’).

   - bpo-34558(157): Correct typo in Lib/ctypes/_aix.py

   - bpo-34282(158): Move ‘Enum._convert’ to ‘EnumMeta._convert_’ and
     fix enum members getting shadowed by parent attributes.

   - bpo-22872(159): When the queue is closed, *note ValueError: 202. is
     now raised by *note multiprocessing.Queue.put(): 1bb4. and *note
     multiprocessing.Queue.get(): 1bb5. instead of *note AssertionError:
     6a9. and *note OSError: 417, respectively.  Patch by Zackery Spytz.

   - bpo-34515(160): Fix parsing non-ASCII identifiers in
     ‘lib2to3.pgen2.tokenize’ ( PEP 3131(161)).

   - bpo-13312(162): Avoids a possible integer underflow (undefined
     behavior) in the time module’s year handling code when passed a
     very low negative year value.

   - bpo-34472(163): Improved compatibility for streamed files in *note
     zipfile: 131.  Previously an optional signature was not being
     written and certain ZIP applications were not supported.  Patch by
     Silas Sewell.

   - bpo-34454(164): Fix the .fromisoformat() methods of datetime types
     crashing when given unicode with non-UTF-8-encodable code points.
     Specifically, datetime.fromisoformat() now accepts surrogate
     unicode code points used as the separator.  Report and tests by
     Alexey Izbyshev, patch by Paul Ganssle.

   - bpo-6700(165): Fix inspect.getsourcelines for module level
     frames/tracebacks.  Patch by Vladimir Matveev.

   - bpo-34171(166): Running the *note trace: fd. module no longer
     creates the ‘trace.cover’ file.

   - bpo-34441(167): Fix crash when an ‘ABC’-derived class with invalid
     ‘__subclasses__’ is passed as the second argument to *note
     issubclass(): 7c2.  Patch by Alexey Izbyshev.

   - bpo-34427(168): Fix infinite loop in ‘a.extend(a)’ for
     ‘MutableSequence’ subclasses.

   - bpo-34412(169): Make *note signal.strsignal(): 1bb6. work on HP-UX.
     Patch by Michael Osipov.

   - bpo-20849(170): shutil.copytree now accepts a new ‘dirs_exist_ok’
     keyword argument.  Patch by Josh Bronson.

   - bpo-31715(171): Associate ‘.mjs’ file extension with
     ‘application/javascript’ MIME Type.

   - bpo-34384(172): *note os.readlink(): 926. now accepts *note
     path-like: 2a0. and *note bytes: 1c2. objects on Windows.

   - bpo-22602(173): The UTF-7 decoder now raises *note
     UnicodeDecodeError: a1d. for ill-formed sequences starting with “+”
     (as specified in RFC 2152).  Patch by Zackery Spytz.

   - bpo-2122(174): The *note mmap.flush(): aa7. method now returns
     ‘None’ on success, raises an exception on error under all
     platforms.

   - bpo-34341(175): Appending to the ZIP archive with the ZIP64
     extension no longer grows the size of extra fields of existing
     entries.

   - bpo-34333(176): Fix %-formatting in *note
     pathlib.PurePath.with_suffix(): 1703. when formatting an error
     message.

   - bpo-18540(177): The *note imaplib.IMAP4: 909. and *note
     imaplib.IMAP4_SSL: 90a. classes now resolve to the local host IP
     correctly when the default value of 'host' parameter (‘''’) is
     used.

   - bpo-26502(178): Implement ‘traceback.FrameSummary.__len__()’ method
     to preserve compatibility with the old tuple API.

   - bpo-34318(179): *note assertRaises(): 52d, *note
     assertRaisesRegex(): 52f, *note assertWarns(): 11a3. and *note
     assertWarnsRegex(): 11a4. no longer success if the passed callable
     is None.  They no longer ignore unknown keyword arguments in the
     context manager mode.  A DeprecationWarning was raised in these
     cases since Python 3.5.

   - bpo-9372(180): Deprecate *note __getitem__(): 283. methods of *note
     xml.dom.pulldom.DOMEventStream: 735, *note
     wsgiref.util.FileWrapper: 736. and *note fileinput.FileInput: 737.

   - bpo-33613(181): Fix a race condition in
     ‘multiprocessing.semaphore_tracker’ when the tracker receives
     SIGINT before it can register signal handlers for ignoring it.

   - bpo-34248(182): Report filename in the exception raised when the
     database file cannot be opened by *note dbm.gnu.open(): 1bb7. and
     *note dbm.ndbm.open(): 1bb8. due to OS-related error.  Patch by
     Zsolt Cserna.

   - bpo-33089(183): Add math.dist() to compute the Euclidean distance
     between two points.

   - bpo-34246(184): *note smtplib.SMTP.send_message(): e89. no longer
     modifies the content of the 'mail_options' argument.  Patch by
     Pablo S. Blum de Aguiar.

   - bpo-31047(185): Fix ‘ntpath.abspath’ for invalid paths on windows.
     Patch by Franz Woellert.

   - bpo-32321(186): Add pure Python fallback for functools.reduce.
     Patch by Robert Wright.

   - bpo-34270(187): The default asyncio task class now always has a
     name which can be get or set using two new methods (*note
     get_name(): 9e6. and *note set_name(): 9e5.) and is visible in the
     *note repr(): 800. output.  An initial name can also be set using
     the new ‘name’ keyword argument to *note asyncio.create_task():
     1bf. or the ‘create_task()’ method of the event loop.  If no
     initial name is set, the default Task implementation generates a
     name like ‘Task-1’ using a monotonic counter.

   - bpo-34263(188): asyncio’s event loop will not pass timeouts longer
     than one day to epoll/select etc.

   - bpo-34035(189): Fix several AttributeError in zipfile seek()
     methods.  Patch by Mickaël Schoentgen.

   - bpo-32215(190): Fix performance regression in *note sqlite3: cf.
     when a DML statement appeared in a different line than the rest of
     the SQL query.

   - bpo-34075(191): Deprecate passing non-ThreadPoolExecutor instances
     to ‘AbstractEventLoop.set_default_executor()’.

   - bpo-34251(192): Restore ‘msilib.Win64’ to preserve backwards
     compatibility since it’s already used by ‘distutils’’ ‘bdist_msi’
     command.

   - bpo-19891(193): Ignore errors caused by missing / non-writable
     homedir while writing history during exit of an interactive
     session.  Patch by Anthony Sottile.

   - bpo-33089(194): Enhanced math.hypot() to support more than two
     dimensions.

   - bpo-34228(195): tracemalloc: PYTHONTRACEMALLOC=0 environment
     variable and -X tracemalloc=0 command line option are now allowed
     to disable explicitly tracemalloc at startup.

   - bpo-13041(196): Use *note shutil.get_terminal_size(): 1142. to
     calculate the terminal width correctly in the
     ‘argparse.HelpFormatter’ class.  Initial patch by Zbyszek
     Jędrzejewski-Szmek.

   - bpo-34213(197): Allow frozen dataclasses to have a field named
     “object”.  Previously this conflicted with an internal use of
     “object”.

   - bpo-34052(198): *note sqlite3.Connection.create_aggregate(): 2aa,
     *note sqlite3.Connection.create_function(): 2a9, *note
     sqlite3.Connection.set_authorizer(): 2ab, *note
     sqlite3.Connection.set_progress_handler(): 2ac. methods raises
     TypeError when unhashable objects are passed as callable.  These
     methods now don’t pass such objects to SQLite API. Previous
     behavior could lead to segfaults.  Patch by Sergey Fedoseev.

   - bpo-34197(199): Attributes 'skipinitialspace', 'doublequote' and
     'strict' of the 'dialect' attribute of the *note csv: 29. reader
     are now *note bool: 468. instances instead of integers 0 or 1.

   - bpo-32788(200): Errors other than *note TypeError: 2c3. raised in
     methods ‘__adapt__()’ and ‘__conform__()’ in the *note sqlite3: cf.
     module are now propagated to the user.

   - bpo-21446(201): The ‘reload’ fixer now uses *note
     importlib.reload(): 519. instead of deprecated ‘imp.reload()’.

   - bpo-940286(202): pydoc’s ‘Helper.showtopic()’ method now prints the
     cross references of a topic correctly.

   - bpo-34164(203): *note base64.b32decode(): 105b. could raise
     UnboundLocalError or OverflowError for incorrect padding.  Now it
     always raises ‘base64.Error’ in these cases.

   - bpo-33729(204): Fixed issues with arguments parsing in *note
     hashlib: 68.

   - bpo-34097(205): ZipFile can zip files older than 1980-01-01 and
     newer than 2107-12-31 using a new ‘strict_timestamps’ parameter at
     the cost of setting the timestamp to the limit.

   - bpo-34108(206): Remove extraneous CR in 2to3 refactor.

   - bpo-34070(207): Make sure to only check if the handle is a tty,
     when opening a file with ‘buffering=-1’.

   - bpo-27494(208): Reverted bpo-27494(209).  2to3 rejects now a
     trailing comma in generator expressions.

   - bpo-33967(210): functools.singledispatch now raises TypeError
     instead of IndexError when no positional arguments are passed.

   - bpo-34041(211): Add the parameter 'deterministic' to the *note
     sqlite3.Connection.create_function(): 2a9. method.  Patch by Sergey
     Fedoseev.

   - bpo-34056(212): Ensure the loader shim created by ‘imp.load_module’
     always returns bytes from its ‘get_data()’ function.  This fixes
     using ‘imp.load_module’ with PEP 552(213) hash-based pycs.

   - bpo-34054(214): The multiprocessing module now uses the monotonic
     clock *note time.monotonic(): 253. instead of the system clock
     *note time.time(): 254. to implement timeout.

   - bpo-34043(215): Optimize tarfile uncompress performance about 15%
     when gzip is used.

   - bpo-34044(216): ‘subprocess.Popen’ now copies the 'startupinfo'
     argument to leave it unchanged: it will modify the copy, so that
     the same ‘STARTUPINFO’ object can be used multiple times.

   - bpo-34010(217): Fixed a performance regression for reading streams
     with tarfile.  The buffered read should use a list, instead of
     appending to a bytes object.

   - bpo-34019(218): webbrowser: Correct the arguments passed to Opera
     Browser when opening a new URL using the ‘webbrowser’ module.
     Patch by Bumsik Kim.

   - bpo-34003(219): csv.DictReader now creates dicts instead of
     OrderedDicts.  Patch by Michael Selik.

   - bpo-33978(220): Closed existing logging handlers before
     reconfiguration via fileConfig and dictConfig.  Patch by
     Karthikeyan Singaravelan.

   - bpo-14117(221): Make minor tweaks to turtledemo.  The ‘wikipedia’
     example is now ‘rosette’, describing what it draws.  The ‘penrose’
     print output is reduced.  The’1024’ output of ‘tree’ is eliminated.

   - bpo-33974(222): Fixed passing lists and tuples of strings
     containing special characters ‘"’, ‘\’, ‘{’, ‘}’ and ‘\n’ as
     options to *note ttk: f9. widgets.

   - bpo-27500(223): Fix getaddrinfo to resolve IPv6 addresses
     correctly.

   - bpo-24567(224): Improve random.choices() to handle subnormal input
     weights that could occasionally trigger an IndexError.

   - bpo-33871(225): Fixed integer overflow in *note os.readv(): b74,
     *note os.writev(): b77, *note os.preadv(): b73. and *note
     os.pwritev(): b76. and in *note os.sendfile(): b21. with 'headers'
     or 'trailers' arguments (on BSD-based OSes and macOS).

   - bpo-25007(226): Add *note copy.copy(): 534. and *note
     copy.deepcopy(): b84. support to zlib compressors and
     decompressors.  Patch by Zackery Spytz.

   - bpo-33929(227): multiprocessing: Fix a race condition in Popen of
     multiprocessing.popen_spawn_win32.  The child process now
     duplicates the read end of pipe instead of “stealing” it.
     Previously, the read end of pipe was “stolen” by the child process,
     but it leaked a handle if the child process had been terminated
     before it could steal the handle from the parent process.

   - bpo-33899(228): Tokenize module now implicitly emits a NEWLINE when
     provided with input that does not have a trailing new line.  This
     behavior now matches what the C tokenizer does internally.
     Contributed by Ammar Askar.

   - bpo-33897(229): Added a ‘force’ keyword argument to
     logging.basicConfig().

   - bpo-33695(230): *note shutil.copytree(): a33. uses *note
     os.scandir(): a68. function and all copy functions depending from
     it use cached *note os.stat(): 4a0. values.  The speedup for
     copying a directory with 8000 files is around +9% on Linux, +20% on
     Windows and + 30% on a Windows SMB share.  Also the number of *note
     os.stat(): 4a0. syscalls is reduced by 38% making *note
     shutil.copytree(): a33. especially faster on network filesystems.
     (Contributed by Giampaolo Rodola’ in bpo-33695(231).)

   - bpo-33916(232): bz2 and lzma: When Decompressor.__init__() is
     called twice, free the old lock to not leak memory.

   - bpo-32568(233): Make select.epoll() and its documentation
     consistent regarding 'sizehint' and 'flags'.

   - bpo-33833(234): Fixed bug in asyncio where ProactorSocketTransport
     logs AssertionError if force closed during write.

   - bpo-33663(235): Convert content length to string before putting to
     header.

   - bpo-33721(236): *note os.path: a2. functions that return a boolean
     result like *note exists(): a18, *note lexists(): a19, *note
     isdir(): a1a, *note isfile(): a1b, *note islink(): a16, and *note
     ismount(): a1c, and *note pathlib.Path: 229. methods that return a
     boolean result like *note exists(): a20, *note is_dir(): 230, *note
     is_file(): 22f, *note is_mount(): a21, *note is_symlink(): a22,
     *note is_block_device(): a23, *note is_char_device(): a24, *note
     is_fifo(): a25, *note is_socket(): a26. now return ‘False’ instead
     of raising *note ValueError: 202. or its subclasses *note
     UnicodeEncodeError: 677. and *note UnicodeDecodeError: a1d. for
     paths that contain characters or bytes unrepresentable at the OS
     level.

   - bpo-26544(237): Fixed implementation of *note platform.libc_ver():
     1ba9.  It almost always returned version ‘2.9’ for glibc.

   - bpo-33843(238): Remove deprecated ‘cgi.escape’, ‘cgi.parse_qs’ and
     ‘cgi.parse_qsl’.

   - bpo-33842(239): Remove ‘tarfile.filemode’ which is deprecated since
     Python 3.3.

   - bpo-30167(240): Prevent site.main() exception if PYTHONSTARTUP is
     set.  Patch by Steve Weber.

   - bpo-33805(241): Improve error message of dataclasses.replace() when
     an InitVar is not specified

   - bpo-33687(242): Fix the call to ‘os.chmod()’ for ‘uu.decode()’ if a
     mode is given or decoded.  Patch by Timo Furrer.

   - bpo-33812(243): Datetime instance d with non-None tzinfo, but with
     d.tzinfo.utcoffset(d) returning None is now treated as naive by the
     astimezone() method.

   - bpo-32108(244): In configparser, don’t clear section when it is
     assigned to itself.

   - bpo-27397(245): Make email module properly handle invalid-length
     base64 strings.

   - bpo-33578(246): Implement multibyte encoder/decoder state methods

   - bpo-30805(247): Avoid race condition with debug logging

   - bpo-33476(248): Fix _header_value_parser.py when address group is
     missing final ‘;’.  Contributed by Enrique Perez-Terron

   - bpo-33694(249): asyncio: Fix a race condition causing data loss on
     pause_reading()/resume_reading() when using the ProactorEventLoop.

   - bpo-32493(250): Correct test for ‘uuid_enc_be’ availability in
     ‘configure.ac’.  Patch by Michael Felt.

   - bpo-33792(251): Add asyncio.WindowsSelectorEventLoopPolicy and
     asyncio.WindowsProactorEventLoopPolicy.

   - bpo-33274(252): W3C DOM Level 1 specifies return value of
     Element.removeAttributeNode() as “The Attr node that was removed.”
     xml.dom.minidom now complies with this requirement.

   - bpo-33778(253): Update ‘unicodedata’’s database to Unicode version
     11.0.0.

   - bpo-33165(254): Added a stacklevel parameter to logging calls to
     allow use of wrapper/helper functions for logging APIs.

   - bpo-33770(255): improve base64 exception message for encoded inputs
     of invalid length

   - bpo-33769(256): asyncio/start_tls: Fix error message; cancel
     callbacks in case of an unhandled error; mark SSLTransport as
     closed if it is aborted.

   - bpo-33767(257): The concatenation (‘+’) and repetition (‘*’)
     sequence operations now raise *note TypeError: 2c3. instead of
     *note SystemError: 575. when performed on *note mmap.mmap: 20b.
     objects.  Patch by Zackery Spytz.

   - bpo-33734(258): asyncio/ssl: Fix AttributeError, increase default
     handshake timeout

   - bpo-31014(259): Fixed creating a controller for *note webbrowser:
     115. when a user specifies a path to an entry in the BROWSER
     environment variable.  Based on patch by John Still.

   - bpo-2504(260): Add gettext.pgettext() and variants.

   - bpo-33197(261): Add description property for _ParameterKind

   - bpo-32751(262): When cancelling the task due to a timeout, *note
     asyncio.wait_for(): 5ff. will now wait until the cancellation is
     complete.

   - bpo-32684(263): Fix gather to propagate cancellation of itself even
     with return_exceptions.

   - bpo-33654(264): Support protocol type switching in
     SSLTransport.set_protocol().

   - bpo-33674(265): Pause the transport as early as possible to further
     reduce the risk of data_received() being called before
     connection_made().

   - bpo-33671(266): *note shutil.copyfile(): a63, *note shutil.copy():
     a64, *note shutil.copy2(): a65, *note shutil.copytree(): a33. and
     *note shutil.move(): e82. use platform-specific fast-copy syscalls
     on Linux and macOS in order to copy the file more efficiently.  On
     Windows *note shutil.copyfile(): a63. uses a bigger default buffer
     size (1 MiB instead of 16 KiB) and a *note memoryview(): 2eb.-based
     variant of *note shutil.copyfileobj(): a66. is used.  The speedup
     for copying a 512MiB file is about +26% on Linux, +50% on macOS and
     +40% on Windows.  Also, much less CPU cycles are consumed.
     (Contributed by Giampaolo Rodola’ in bpo-25427(267).)

   - bpo-33674(268): Fix a race condition in
     SSLProtocol.connection_made() of asyncio.sslproto: start
     immediately the handshake instead of using call_soon().
     Previously, data_received() could be called before the handshake
     started, causing the handshake to hang or fail.

   - bpo-31647(269): Fixed bug where calling write_eof() on a
     _SelectorSocketTransport after it’s already closed raises
     AttributeError.

   - bpo-32610(270): Make asyncio.all_tasks() return only pending tasks.

   - bpo-32410(271): Avoid blocking on file IO in sendfile fallback code

   - bpo-33469(272): Fix RuntimeError after closing loop that used
     run_in_executor

   - bpo-33672(273): Fix Task.__repr__ crash with Cython’s bogus
     coroutines

   - bpo-33654(274): Fix transport.set_protocol() to support switching
     between asyncio.Protocol and asyncio.BufferedProtocol.  Fix
     loop.start_tls() to work with asyncio.BufferedProtocols.

   - bpo-33652(275): Pickles of type variables and subscripted generics
     are now future-proof and compatible with older Python versions.

   - bpo-32493(276): Fixed *note uuid.uuid1(): bc0. on FreeBSD.

   - bpo-33238(277): Add ‘InvalidStateError’ to *note
     concurrent.futures: 21.  ‘Future.set_result’ and
     ‘Future.set_exception’ now raise ‘InvalidStateError’ if the futures
     are not pending or running.  Patch by Jason Haydaman.

   - bpo-33618(278): Finalize and document preliminary and experimental
     TLS 1.3 support with OpenSSL 1.1.1

   - bpo-33625(279): Release GIL on ‘grp.getgrnam’, ‘grp.getgrgid’,
     ‘pwd.getpwnam’ and ‘pwd.getpwuid’ if reentrant variants of these
     functions are available.  Patch by William Grzybowski.

   - bpo-33623(280): Fix possible SIGSGV when asyncio.Future is created
     in __del__

   - bpo-11874(281): Use a better regex when breaking usage into
     wrappable parts.  Avoids bogus assertion errors from custom metavar
     strings.

   - bpo-30877(282): Fixed a bug in the Python implementation of the
     JSON decoder that prevented the cache of parsed strings from
     clearing after finishing the decoding.  Based on patch by c-fos.

   - bpo-33604(283): Remove HMAC default to md5 marked for removal in
     3.8 (removal originally planned in 3.6, bump to 3.8 in PR 7062).

   - bpo-33582(284): Emit a deprecation warning for
     inspect.formatargspec

   - bpo-21145(285): Add ‘functools.cached_property’ decorator, for
     computed properties cached for the life of the instance.

   - bpo-33570(286): Change TLS 1.3 cipher suite settings for
     compatibility with OpenSSL 1.1.1-pre6 and newer.  OpenSSL 1.1.1
     will have TLS 1.3 ciphers enabled by default.

   - bpo-28556(287): Do not simplify arguments to ‘typing.Union’.  Now
     ‘Union[Manager, Employee]’ is not simplified to ‘Employee’ at
     runtime.  Such simplification previously caused several bugs and
     limited possibilities for introspection.

   - bpo-12486(288): *note tokenize.generate_tokens(): 4da. is now
     documented as a public API to tokenize unicode strings.  It was
     previously present but undocumented.

   - bpo-33540(289): Add a new ‘block_on_close’ class attribute to
     ‘ForkingMixIn’ and ‘ThreadingMixIn’ classes of *note socketserver:
     cd.

   - bpo-33548(290): tempfile._candidate_tempdir_list should consider
     common TEMP locations

   - bpo-33109(291): argparse subparsers are once again not required by
     default, reverting the change in behavior introduced by
     bpo-26510(292) in 3.7.0a2.

   - bpo-33541(293): Remove unused private method
     ‘_strptime.LocaleTime.__pad’ (a.k.a.  ‘_LocaleTime__pad’).

   - bpo-33536(294): dataclasses.make_dataclass now checks for invalid
     field names and duplicate fields.  Also, added a check for invalid
     field specifications.

   - bpo-33542(295): Prevent ‘uuid.get_node’ from using a DUID instead
     of a MAC on Windows.  Patch by Zvi Effron

   - bpo-26819(296): Fix race condition with
     ‘ReadTransport.resume_reading’ in Windows proactor event loop.

   - Fix failure in ‘typing.get_type_hints()’ when ClassVar was provided
     as a string forward reference.

   - bpo-33516(297): *note unittest.mock.MagicMock: ebe. now supports
     the ‘__round__’ magic method.

   - bpo-28612(298): Added support for Site Maps to urllib’s
     ‘RobotFileParser’ as *note RobotFileParser.site_maps(): 1bb9.
     Patch by Lady Red, based on patch by Peter Wirtz.

   - bpo-28167(299): Remove platform.linux_distribution, which was
     deprecated since 3.5.

   - bpo-33504(300): Switch the default dictionary implementation for
     *note configparser: 22. from *note collections.OrderedDict: 5db. to
     the standard *note dict: 256. type.

   - bpo-33505(301): Optimize asyncio.ensure_future() by reordering if
     checks: 1.17x faster.

   - bpo-33497(302): Add errors param to cgi.parse_multipart and make an
     encoding in FieldStorage use the given errors (needed for Twisted).
     Patch by Amber Brown.

   - bpo-29235(303): The ‘cProfile.Profile’ class can now be used as a
     context manager.  Patch by Scott Sanderson.

   - bpo-33495(304): Change dataclasses.Fields repr to use the repr of
     each of its members, instead of str.  This makes it more clear what
     each field actually represents.  This is especially true for the
     ‘type’ member.

   - bpo-26103(305): Correct ‘inspect.isdatadescriptor’ to look for
     ‘__set__’ or ‘__delete__’.  Patch by Aaron Hall.

   - bpo-29209(306): Removed the ‘doctype()’ method and the 'html'
     parameter of the constructor of *note XMLParser: a5e.  The
     ‘doctype()’ method defined in a subclass will no longer be called.
     Deprecated methods ‘getchildren()’ and ‘getiterator()’ in the *note
     ElementTree: 125. module emit now a *note DeprecationWarning: 1a5.
     instead of *note PendingDeprecationWarning: 8ce.

   - bpo-33453(307): Fix dataclasses to work if using literal string
     type annotations or if using PEP 563 “Postponed Evaluation of
     Annotations”.  Only specific string prefixes are detected for both
     ClassVar (“ClassVar” and “typing.ClassVar”) and InitVar (“InitVar”
     and “dataclasses.InitVar”).

   - bpo-28556(308): Minor fixes in typing module: add annotations to
     ‘NamedTuple.__new__’, pass ‘*args’ and ‘**kwds’ in
     ‘Generic.__new__’.  Original PRs by Paulius Šarka and Chad
     Dombrova.

   - bpo-33365(309): Print the header values besides the header keys
     instead just the header keys if 'debuglevel' is set to >0 in *note
     http.client: 6f.  Patch by Marco Strigl.

   - bpo-20087(310): Updated alias mapping with glibc 2.27 supported
     locales.

   - bpo-33422(311): Fix trailing quotation marks getting deleted when
     looking up byte/string literals on pydoc.  Patch by Andrés Delfino.

   - bpo-28167(312): The function ‘platform.linux_distribution’ and
     ‘platform.dist’ now trigger a ‘DeprecationWarning’ and have been
     marked for removal in Python 3.8

   - bpo-33281(313): Fix ctypes.util.find_library regression on macOS.

   - bpo-33311(314): Text and html output generated by cgitb does not
     display parentheses if the current call is done directly in the
     module.  Patch by Stéphane Blondon.

   - bpo-27300(315): The file classes in 'tempfile' now accept an
     'errors' parameter that complements the already existing
     'encoding'.  Patch by Stephan Hohe.

   - bpo-32933(316): *note unittest.mock.mock_open(): 101d. now supports
     iteration over the file contents.  Patch by Tony Flury.

   - bpo-33217(317): Raise *note TypeError: 2c3. when looking up
     non-Enum objects in Enum classes and Enum members.

   - bpo-33197(318): Update error message when constructing invalid
     inspect.Parameters Patch by Donghee Na.

   - bpo-33383(319): Fixed crash in the get() method of the *note
     dbm.ndbm: 34. database object when it is called with a single
     argument.

   - bpo-33375(320): The warnings module now finds the Python file
     associated with a warning from the code object, rather than the
     frame’s global namespace.  This is consistent with how tracebacks
     and pdb find filenames, and should work better for dynamically
     executed code.

   - bpo-33336(321): ‘imaplib’ now allows ‘MOVE’ command in
     ‘IMAP4.uid()’ (RFC 6851: IMAP MOVE Extension) and potentially as a
     name of supported method of ‘IMAP4’ object.

   - bpo-32455(322): Added 'jump' parameter to *note dis.stack_effect():
     f64.

   - bpo-27485(323): Rename and deprecate undocumented functions in
     *note urllib.parse(): 10a.

   - bpo-33332(324): Add ‘signal.valid_signals()’ to expose the POSIX
     sigfillset() functionality.

   - bpo-33251(325): ‘ConfigParser.items()’ was fixed so that key-value
     pairs passed in via *note vars(): 1bba. are not included in the
     resulting output.

   - bpo-33329(326): Fix multiprocessing regression on newer glibcs

   - bpo-33334(327): *note dis.stack_effect(): f64. now supports all
     defined opcodes including NOP and EXTENDED_ARG.

   - bpo-991266(328): Fix quoting of the ‘Comment’ attribute of *note
     http.cookies.SimpleCookie: 1bbb.

   - bpo-33131(329): Upgrade bundled version of pip to 10.0.1.

   - bpo-33308(330): Fixed a crash in the ‘parser’ module when
     converting an ST object to a tree of tuples or lists with
     ‘line_info=False’ and ‘col_info=True’.

   - bpo-23403(331): lib2to3 now uses pickle protocol 4 for pre-computed
     grammars.

   - bpo-33266(332): lib2to3 now recognizes ‘rf'...'’ strings.

   - bpo-11594(333): Ensure line-endings are respected when using
     lib2to3.

   - bpo-33254(334): Have *note importlib.resources.contents(): 1f2. and
     *note importlib.abc.ResourceReader.contents(): 1bbc. return an
     *note iterable: 1268. instead of an *note iterator: 1ac.

   - bpo-33265(335): ‘contextlib.ExitStack’ and
     ‘contextlib.AsyncExitStack’ now use a method instead of a wrapper
     function for exit callbacks.

   - bpo-33263(336): Fix FD leak in ‘_SelectorSocketTransport’ Patch by
     Vlad Starostin.

   - bpo-33256(337): Fix display of ‘<module>’ call in the html produced
     by ‘cgitb.html()’.  Patch by Stéphane Blondon.

   - bpo-33144(338): ‘random.Random()’ and its subclassing mechanism got
     optimized to check only once at class/subclass instantiation time
     whether its ‘getrandbits()’ method can be relied on by other
     methods, including ‘randrange()’, for the generation of arbitrarily
     large random integers.  Patch by Wolfgang Maier.

   - bpo-33185(339): Fixed regression when running pydoc with the *note
     -m: 5e1. switch.  (The regression was introduced in 3.7.0b3 by the
     resolution of bpo-33053(340))

     This fix also changed pydoc to add ‘os.getcwd()’ to *note sys.path:
     3b4. when necessary, rather than adding ‘"."’.

   - bpo-29613(341): Added support for the ‘SameSite’ cookie flag to the
     ‘http.cookies’ module.

   - bpo-33169(342): Delete entries of ‘None’ in *note
     sys.path_importer_cache: 5e4. when
     ‘importlib.machinery.invalidate_caches()’ is called.

   - bpo-33203(343): ‘random.Random.choice()’ now raises ‘IndexError’
     for empty sequences consistently even when called from subclasses
     without a ‘getrandbits()’ implementation.

   - bpo-33224(344): Update difflib.mdiff() for PEP 479(345).  Convert
     an uncaught StopIteration in a generator into a return-statement.

   - bpo-33209(346): End framing at the end of C implementation of *note
     pickle.Pickler.dump(): 1bbd.

   - bpo-32861(347): The urllib.robotparser’s ‘__str__’ representation
     now includes wildcard entries and the “Crawl-delay” and
     “Request-rate” fields.  Also removes extra newlines that were being
     appended to the end of the string.  Patch by Michael Lazar.

   - bpo-23403(348): ‘DEFAULT_PROTOCOL’ in *note pickle: a6. was bumped
     to 4.  Protocol 4 is described in PEP 3154(349) and available since
     Python 3.4.  It offers better performance and smaller size compared
     to protocol 3 introduced in Python 3.0.

   - bpo-20104(350): Improved error handling and fixed a reference leak
     in *note os.posix_spawn(): 220.

   - bpo-33106(351): Deleting a key from a read-only dbm database raises
     module specific error instead of KeyError.

   - bpo-33175(352): In dataclasses, Field.__set_name__ now looks up the
     __set_name__ special method on the class, not the instance, of the
     default value.

   - bpo-32380(353): Create functools.singledispatchmethod to support
     generic single dispatch on descriptors and methods.

   - bpo-33141(354): Have Field objects pass through __set_name__ to
     their default values, if they have their own __set_name__.

   - bpo-33096(355): Allow ttk.Treeview.insert to insert iid that has a
     false boolean value.  Note iid=0 and iid=False would be same.
     Patch by Garvit Khatri.

   - bpo-32873(356): Treat type variables and special typing forms as
     immutable by copy and pickle.  This fixes several minor issues and
     inconsistencies, and improves backwards compatibility with Python
     3.6.

   - bpo-33134(357): When computing dataclass’s __hash__, use the lookup
     table to contain the function which returns the __hash__ value.
     This is an improvement over looking up a string, and then testing
     that string to see what to do.

   - bpo-33127(358): The ssl module now compiles with LibreSSL 2.7.1.

   - bpo-32505(359): Raise TypeError if a member variable of a dataclass
     is of type Field, but doesn’t have a type annotation.

   - bpo-33078(360): Fix the failure on OSX caused by the tests relying
     on sem_getvalue

   - bpo-33116(361): Add ‘Field’ to dataclasses.__all__.

   - bpo-32896(362): Fix an error where subclassing a dataclass with a
     field that uses a default_factory would generate an incorrect
     class.

   - bpo-33100(363): Dataclasses: If a field has a default value that’s
     a MemberDescriptorType, then it’s from that field being in
     __slots__, not an actual default value.

   - bpo-32953(364): If a non-dataclass inherits from a frozen
     dataclass, allow attributes to be added to the derived class.  Only
     attributes from the frozen dataclass cannot be assigned to.
     Require all dataclasses in a hierarchy to be either all frozen or
     all non-frozen.

   - bpo-33097(365): Raise RuntimeError when ‘executor.submit’ is called
     during interpreter shutdown.

   - bpo-32968(366): Modulo and floor division involving Fraction and
     float should return float.

   - bpo-33061(367): Add missing ‘NoReturn’ to ‘__all__’ in typing.py

   - bpo-33078(368): Fix the size handling in multiprocessing.Queue when
     a pickling error occurs.

   - bpo-33064(369): lib2to3 now properly supports trailing commas after
     ‘*args’ and ‘**kwargs’ in function signatures.

   - bpo-33056(370): FIX properly close leaking fds in
     concurrent.futures.ProcessPoolExecutor.

   - bpo-33021(371): Release the GIL during fstat() calls, avoiding hang
     of all threads when calling mmap.mmap(), os.urandom(), and
     random.seed().  Patch by Nir Soffer.

   - bpo-31804(372): Avoid failing in multiprocessing.Process if the
     standard streams are closed or None at exit.

   - bpo-33034(373): Providing an explicit error message when casting
     the port property to anything that is not an integer value using
     ‘urlparse()’ and ‘urlsplit()’.  Patch by Matt Eaton.

   - bpo-30249(374): Improve struct.unpack_from() exception messages for
     problems with the buffer size and offset.

   - bpo-33037(375): Skip sending/receiving data after SSL transport
     closing.

   - bpo-27683(376): Fix a regression in *note ipaddress: 80. that
     result of ‘hosts()’ is empty when the network is constructed by a
     tuple containing an integer mask and only 1 bit left for addresses.

   - bpo-22674(377): Add the strsignal() function in the signal module
     that returns the system description of the given signal, as
     returned by strsignal(3).

   - bpo-32999(378): Fix C implementation of ‘ABC.__subclasscheck__(cls,
     subclass)’ crashed when ‘subclass’ is not a type object.

   - bpo-33009(379): Fix inspect.signature() for single-parameter
     partialmethods.

   - bpo-32969(380): Expose several missing constants in zlib and fix
     corresponding documentation.

   - bpo-32056(381): Improved exceptions raised for invalid number of
     channels and sample width when read an audio file in modules
     ‘aifc’, *note wave: 113. and ‘sunau’.

   - bpo-32970(382): Improved disassembly of the MAKE_FUNCTION
     instruction.

   - bpo-32844(383): Fix wrong redirection of a low descriptor (0 or 1)
     to stderr in subprocess if another low descriptor is closed.

   - bpo-32960(384): For dataclasses, disallow inheriting frozen from
     non-frozen classes, and also disallow inheriting non-frozen from
     frozen classes.  This restriction will be relaxed at a future date.

   - bpo-32713(385): Fixed tarfile.itn handling of out-of-bounds float
     values.  Patch by Joffrey Fuhrer.

   - bpo-32257(386): The ssl module now contains OP_NO_RENEGOTIATION
     constant, available with OpenSSL 1.1.0h or 1.1.1.

   - bpo-32951(387): Direct instantiation of SSLSocket and SSLObject
     objects is now prohibited.  The constructors were never documented,
     tested, or designed as public constructors.  Users were suppose to
     use ssl.wrap_socket() or SSLContext.

   - bpo-32929(388): Remove the tri-state parameter “hash”, and add the
     boolean “unsafe_hash”.  If unsafe_hash is True, add a __hash__
     function, but if a __hash__ exists, raise TypeError.  If
     unsafe_hash is False, add a __hash__ based on the values of eq= and
     frozen=.  The unsafe_hash=False behavior is the same as the old
     hash=None behavior.  unsafe_hash=False is the default, just as
     hash=None used to be.

   - bpo-32947(389): Add OP_ENABLE_MIDDLEBOX_COMPAT and test workaround
     for TLSv1.3 for future compatibility with OpenSSL 1.1.1.

   - bpo-32146(390): Document the interaction between frozen executables
     and the spawn and forkserver start methods in multiprocessing.

   - bpo-30622(391): The ssl module now detects missing NPN support in
     LibreSSL.

   - bpo-32922(392): dbm.open() now encodes filename with the filesystem
     encoding rather than default encoding.

   - bpo-32759(393): Free unused arenas in multiprocessing.heap.

   - bpo-32859(394): In ‘os.dup2’, don’t check every call whether the
     ‘dup3’ syscall exists or not.

   - bpo-32556(395): nt._getfinalpathname, nt._getvolumepathname and
     nt._getdiskusage now correctly convert from bytes.

   - bpo-21060(396): Rewrite confusing message from setup.py upload from
     “No dist file created in earlier command” to the more helpful “Must
     create and upload files in one command”.

   - bpo-32857(397): In *note tkinter: f0, ‘after_cancel(None)’ now
     raises a *note ValueError: 202. instead of canceling the first
     scheduled function.  Patch by Cheryl Sabella.

   - bpo-32852(398): Make sure sys.argv remains as a list when running
     trace.

   - bpo-31333(399): ‘_abc’ module is added.  It is a speedup module
     with C implementations for various functions and methods in ‘abc’.
     Creating an ABC subclass and calling ‘isinstance’ or ‘issubclass’
     with an ABC subclass are up to 1.5x faster.  In addition, this
     makes Python start-up up to 10% faster.

     Note that the new implementation hides internal registry and
     caches, previously accessible via private attributes
     ‘_abc_registry’, ‘_abc_cache’, and ‘_abc_negative_cache’.  There
     are three debugging helper methods that can be used instead
     ‘_dump_registry’, ‘_abc_registry_clear’, and ‘_abc_caches_clear’.

   - bpo-32841(400): Fixed ‘asyncio.Condition’ issue which silently
     ignored cancellation after notifying and cancelling a conditional
     lock.  Patch by Bar Harel.

   - bpo-32819(401): ssl.match_hostname() has been simplified and no
     longer depends on re and ipaddress module for wildcard and IP
     addresses.  Error reporting for invalid wildcards has been
     improved.

   - bpo-19675(402): ‘multiprocessing.Pool’ no longer leaks processes if
     its initialization fails.

   - bpo-32394(403): socket: Remove
     TCP_FASTOPEN,TCP_KEEPCNT,TCP_KEEPIDLE,TCP_KEEPINTVL flags on older
     version Windows during run-time.

   - bpo-31787(404): Fixed refleaks of ‘__init__()’ methods in various
     modules.  (Contributed by Oren Milman)

   - bpo-30157(405): Fixed guessing quote and delimiter in
     csv.Sniffer.sniff() when only the last field is quoted.  Patch by
     Jake Davis.

   - bpo-30688(406): Added support of ‘\N{name}’ escapes in regular
     expressions.  Based on patch by Jonathan Eunice.

   - bpo-32792(407): collections.ChainMap() preserves the order of the
     underlying mappings.

   - bpo-32775(408): *note fnmatch.translate(): 1bbe. no longer produces
     patterns which contain set operations.  Sets starting with ‘[’ or
     containing ‘–’, ‘&&’, ‘~~’ or ‘||’ will be interpreted differently
     in regular expressions in future versions.  Currently they emit
     warnings.  fnmatch.translate() now avoids producing patterns
     containing such sets by accident.

   - bpo-32622(409): Implement native fast sendfile for Windows proactor
     event loop.

   - bpo-32777(410): Fix a rare but potential pre-exec child process
     deadlock in subprocess on POSIX systems when marking file
     descriptors inheritable on exec in the child process.  This bug
     appears to have been introduced in 3.4.

   - bpo-32647(411): The ctypes module used to depend on indirect
     linking for dlopen.  The shared extension is now explicitly linked
     against libdl on platforms with dl.

   - bpo-32749(412): A *note dbm.dumb: 32. database opened with flags
     ‘r’ is now read-only.  *note dbm.dumb.open(): aa5. with flags ‘r’
     and ‘w’ no longer creates a database if it does not exist.

   - bpo-32741(413): Implement ‘asyncio.TimerHandle.when()’ method.

   - bpo-32691(414): Use mod_spec.parent when running modules with pdb

   - bpo-32734(415): Fixed ‘asyncio.Lock()’ safety issue which allowed
     acquiring and locking the same lock multiple times, without it
     being free.  Patch by Bar Harel.

   - bpo-32727(416): Do not include name field in SMTP envelope from
     address.  Patch by Stéphane Wirtel

   - bpo-31453(417): Add TLSVersion constants and
     SSLContext.maximum_version / minimum_version attributes.  The new
     API wraps OpenSSL 1.1
     ‘https://web.archive.org/web/20180309043602/https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_set_min_proto_version.html’
     feature.

   - bpo-24334(418): Internal implementation details of ssl module were
     cleaned up.  The SSLSocket has one less layer of indirection.
     Owner and session information are now handled by the SSLSocket and
     SSLObject constructor.  Channel binding implementation has been
     simplified.

   - bpo-31848(419): Fix the error handling in Aifc_read.initfp() when
     the SSND chunk is not found.  Patch by Zackery Spytz.

   - bpo-32585(420): Add Ttk spinbox widget to *note tkinter.ttk: f9.
     Patch by Alan D Moore.

   - bpo-32512(421): *note profile: af. CLI accepts ‘-m module_name’ as
     an alternative to script path.

   - bpo-8525(422): help() on a type now displays builtin subclasses.
     This is intended primarily to help with notification of more
     specific exception subclasses.

     Patch by Sanyam Khurana.

   - bpo-31639(423): http.server now exposes a ThreadingHTTPServer class
     and uses it when the module is run with ‘-m’ to cope with web
     browsers pre-opening sockets.

   - bpo-29877(424): compileall: import ProcessPoolExecutor only when
     needed, preventing hangs on low resource platforms

   - bpo-32221(425): Various functions returning tuple containing IPv6
     addresses now omit ‘%scope’ part since the same information is
     already encoded in 'scopeid' tuple item.  Especially this speeds up
     ‘socket.recvfrom()’ when it receives multicast packet since useless
     resolving of network interface name is omitted.

   - bpo-32147(426): *note binascii.unhexlify(): 1bbf. is now up to 2
     times faster.  Patch by Sergey Fedoseev.

   - bpo-30693(427): The TarFile class now recurses directories in a
     reproducible way.

   - bpo-30693(428): The ZipFile class now recurses directories in a
     reproducible way.

   - bpo-31680(429): Added *note curses.ncurses_version: 9ef.

   - bpo-31908(430): Fix output of cover files for ‘trace’ module
     command-line tool.  Previously emitted cover files only when
     ‘--missing’ option was used.  Patch by Michael Selik.

   - bpo-31608(431): Raise a ‘TypeError’ instead of crashing if a
     ‘collections.deque’ subclass returns a non-deque from ‘__new__’.
     Patch by Oren Milman.

   - bpo-31425(432): Add support for sockets of the AF_QIPCRTR address
     family, supported by the Linux kernel.  This is used to communicate
     with services, such as GPS or radio, running on Qualcomm devices.
     Patch by Bjorn Andersson.

   - bpo-22005(433): Implemented unpickling instances of *note datetime:
     1cc, *note date: 1cd. and *note time: 1ce. pickled by Python 2.
     ‘encoding='latin1'’ should be used for successful decoding.

   - bpo-27645(434): *note sqlite3.Connection: 245. now exposes a *note
     backup: b92. method, if the underlying SQLite library is at version
     3.6.11 or higher.  Patch by Lele Gaifax.

   - bpo-16865(435): Support arrays >=2GiB in *note ctypes: 2a.  Patch
     by Segev Finer.

   - bpo-31508(436): Removed support of arguments in
     ‘tkinter.ttk.Treeview.selection’.  It was deprecated in 3.6.  Use
     specialized methods like ‘selection_set’ for changing the
     selection.

   - bpo-29456(437): Fix bugs in hangul normalization: u1176, u11a7 and
     u11c3

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35845

   (2) https://bugs.python.org/issue?@action=redirect&bpo=35864

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35537

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35847

   (5) https://bugs.python.org/issue?@action=redirect&bpo=35813

   (6) https://bugs.python.org/issue?@action=redirect&bpo=35780

   (7) https://bugs.python.org/issue?@action=redirect&bpo=35537

   (8) https://bugs.python.org/issue?@action=redirect&bpo=23846

   (9) https://bugs.python.org/issue?@action=redirect&bpo=34323

   (10) https://bugs.python.org/issue?@action=redirect&bpo=35674

   (11) https://bugs.python.org/issue?@action=redirect&bpo=35733

   (12) https://bugs.python.org/issue?@action=redirect&bpo=35726

   (13) https://bugs.python.org/issue?@action=redirect&bpo=35719

   (14) https://bugs.python.org/issue?@action=redirect&bpo=35717

   (15) https://bugs.python.org/issue?@action=redirect&bpo=35699

   (16) https://bugs.python.org/issue?@action=redirect&bpo=32710

   (17) https://bugs.python.org/issue?@action=redirect&bpo=35702

   (18) https://bugs.python.org/issue?@action=redirect&bpo=32710

   (19) https://bugs.python.org/issue?@action=redirect&bpo=35682

   (20) https://bugs.python.org/issue?@action=redirect&bpo=35283

   (21) https://bugs.python.org/issue?@action=redirect&bpo=35664

   (22) https://bugs.python.org/issue?@action=redirect&bpo=35643

   (23) https://bugs.python.org/issue?@action=redirect&bpo=35619

   (24) https://bugs.python.org/issue?@action=redirect&bpo=28503

   (25) https://bugs.python.org/issue?@action=redirect&bpo=35614

   (26) https://bugs.python.org/issue?@action=redirect&bpo=35568

   (27) https://bugs.python.org/issue?@action=redirect&bpo=35588

   (28) https://bugs.python.org/issue?@action=redirect&bpo=35585

   (29) https://bugs.python.org/issue?@action=redirect&bpo=30561

   (30) https://bugs.python.org/issue?@action=redirect&bpo=35537

   (31) https://bugs.python.org/issue?@action=redirect&bpo=35526

   (32) https://bugs.python.org/issue?@action=redirect&bpo=35523

   (33) https://bugs.python.org/issue?@action=redirect&bpo=31784

   (34) https://bugs.python.org/issue?@action=redirect&bpo=35513

   (35) https://bugs.python.org/issue?@action=redirect&bpo=35502

   (36) https://bugs.python.org/issue?@action=redirect&bpo=35348

   (37) https://bugs.python.org/issue?@action=redirect&bpo=35491

   (38) https://bugs.python.org/issue?@action=redirect&bpo=35477

   (39) https://bugs.python.org/issue?@action=redirect&bpo=31446

   (40) https://bugs.python.org/issue?@action=redirect&bpo=35471

   (41) https://bugs.python.org/issue?@action=redirect&bpo=23057

   (42) https://bugs.python.org/issue?@action=redirect&bpo=35052

   (43) https://bugs.python.org/issue?@action=redirect&bpo=20239

   (44) https://bugs.python.org/issue?@action=redirect&bpo=17185

   (45) https://bugs.python.org/issue?@action=redirect&bpo=35445

   (46) https://bugs.python.org/issue?@action=redirect&bpo=35415

   (47) https://bugs.python.org/issue?@action=redirect&bpo=35424

   (48) https://bugs.python.org/issue?@action=redirect&bpo=35330

   (49) https://bugs.python.org/issue?@action=redirect&bpo=35346

   (50) https://bugs.python.org/issue?@action=redirect&bpo=10496

   (51) https://bugs.python.org/issue?@action=redirect&bpo=10496

   (52) https://bugs.python.org/issue?@action=redirect&bpo=35389

   (53) https://bugs.python.org/issue?@action=redirect&bpo=35394

   (54) https://bugs.python.org/issue?@action=redirect&bpo=35310

   (55) https://bugs.python.org/issue?@action=redirect&bpo=35380

   (56) https://bugs.python.org/issue?@action=redirect&bpo=35341

   (57) https://bugs.python.org/issue?@action=redirect&bpo=35371

   (58) https://bugs.python.org/issue?@action=redirect&bpo=35346

   (59) https://bugs.python.org/issue?@action=redirect&bpo=35066

   (60) https://bugs.python.org/issue?@action=redirect&bpo=35345

   (61) https://bugs.python.org/issue?@action=redirect&bpo=35344

   (62) https://bugs.python.org/issue?@action=redirect&bpo=35312

   (63) https://bugs.python.org/issue?@action=redirect&bpo=35308

   (64) https://bugs.python.org/issue?@action=redirect&bpo=24746

   (65) https://bugs.python.org/issue?@action=redirect&bpo=28604

   (66) https://bugs.python.org/issue?@action=redirect&bpo=35277

   (67) https://bugs.python.org/issue?@action=redirect&bpo=24209

   (68) https://bugs.python.org/issue?@action=redirect&bpo=35226

   (69) https://bugs.python.org/issue?@action=redirect&bpo=29564

   (70) https://bugs.python.org/issue?@action=redirect&bpo=35189

   (71) https://bugs.python.org/issue?@action=redirect&bpo=30064

   (72) https://bugs.python.org/issue?@action=redirect&bpo=35186

   (73) https://bugs.python.org/issue?@action=redirect&bpo=35152

   (74) https://bugs.python.org/issue?@action=redirect&bpo=35062

   (75) https://bugs.python.org/issue?@action=redirect&bpo=35065

   (76) https://bugs.python.org/issue?@action=redirect&bpo=34160

   (77) https://bugs.python.org/issue?@action=redirect&bpo=35079

   (78) https://bugs.python.org/issue?@action=redirect&bpo=33710

   (79) https://bugs.python.org/issue?@action=redirect&bpo=35017

   (80) https://bugs.python.org/issue?@action=redirect&bpo=35024

   (81) https://bugs.python.org/issue?@action=redirect&bpo=35047

   (82) https://bugs.python.org/issue?@action=redirect&bpo=31047

   (83) https://bugs.python.org/issue?@action=redirect&bpo=35053

   (84) https://bugs.python.org/issue?@action=redirect&bpo=31553

   (85) https://bugs.python.org/issue?@action=redirect&bpo=34794

   (86) https://bugs.python.org/issue?@action=redirect&bpo=34909

   (87) https://bugs.python.org/issue?@action=redirect&bpo=35022

   (88) https://bugs.python.org/issue?@action=redirect&bpo=35008

   (89) https://bugs.python.org/issue?@action=redirect&bpo=23420

   (90) https://bugs.python.org/issue?@action=redirect&bpo=33947

   (91) https://bugs.python.org/issue?@action=redirect&bpo=34890

   (92) https://bugs.python.org/issue?@action=redirect&bpo=34521

   (93) https://datatracker.ietf.org/doc/html/rfc3542.html

   (94) https://bugs.python.org/issue?@action=redirect&bpo=31522

   (95) https://bugs.python.org/issue?@action=redirect&bpo=34970

   (96) https://bugs.python.org/issue?@action=redirect&bpo=34969

   (97) https://bugs.python.org/issue?@action=redirect&bpo=16965

   (98) https://bugs.python.org/issue?@action=redirect&bpo=34966

   (99) https://bugs.python.org/issue?@action=redirect&bpo=34926

   (100) https://bugs.python.org/issue?@action=redirect&bpo=23831

   (101) https://bugs.python.org/issue?@action=redirect&bpo=34941

   (102) https://bugs.python.org/issue?@action=redirect&bpo=32680

   (103) https://bugs.python.org/issue?@action=redirect&bpo=34769

   (104) https://bugs.python.org/issue?@action=redirect&bpo=34936

   (105) https://bugs.python.org/issue?@action=redirect&bpo=34829

   (106) https://bugs.python.org/issue?@action=redirect&bpo=34911

   (107) https://bugs.python.org/issue?@action=redirect&bpo=34922

   (108) https://bugs.python.org/issue?@action=redirect&bpo=34925

   (109) https://bugs.python.org/issue?@action=redirect&bpo=34900

   (110) https://bugs.python.org/issue?@action=redirect&bpo=34844

   (111) https://bugs.python.org/issue?@action=redirect&bpo=34897

   (112) https://bugs.python.org/issue?@action=redirect&bpo=34871

   (113) https://bugs.python.org/issue?@action=redirect&bpo=34898

   (114) https://bugs.python.org/issue?@action=redirect&bpo=28441

   (115) https://bugs.python.org/issue?@action=redirect&bpo=34866

   (116) https://bugs.python.org/issue?@action=redirect&bpo=34711

   (117) https://bugs.python.org/issue?@action=redirect&bpo=34872

   (118) https://bugs.python.org/issue?@action=redirect&bpo=34849

   (119) https://bugs.python.org/issue?@action=redirect&bpo=34022

   (120) https://bugs.python.org/issue?@action=redirect&bpo=34819

   (121) https://bugs.python.org/issue?@action=redirect&bpo=34758

   (122) https://bugs.python.org/issue?@action=redirect&bpo=34789

   (123) https://bugs.python.org/issue?@action=redirect&bpo=34334

   (124) https://bugs.python.org/issue?@action=redirect&bpo=34687

   (125) https://bugs.python.org/issue?@action=redirect&bpo=5950

   (126) https://bugs.python.org/issue?@action=redirect&bpo=32892

   (127) https://bugs.python.org/issue?@action=redirect&bpo=34728

   (128) https://bugs.python.org/issue?@action=redirect&bpo=34738

   (129) https://bugs.python.org/issue?@action=redirect&bpo=34659

   (130) https://bugs.python.org/issue?@action=redirect&bpo=29577

   (131) https://bugs.python.org/issue?@action=redirect&bpo=34670

   (132) https://bugs.python.org/issue?@action=redirect&bpo=32718

   (133) https://bugs.python.org/issue?@action=redirect&bpo=31177

   (134) https://bugs.python.org/issue?@action=redirect&bpo=34672

   (135) https://bugs.python.org/issue?@action=redirect&bpo=34666

   (136) https://bugs.python.org/issue?@action=redirect&bpo=6721

   (137) https://bugs.python.org/issue?@action=redirect&bpo=34658

   (138) https://bugs.python.org/issue?@action=redirect&bpo=34652

   (139) https://bugs.python.org/issue?@action=redirect&bpo=34638

   (140) https://bugs.python.org/issue?@action=redirect&bpo=34536

   (141) https://bugs.python.org/issue?@action=redirect&bpo=34636

   (142) https://bugs.python.org/issue?@action=redirect&bpo=24412

   (143) https://bugs.python.org/issue?@action=redirect&bpo=34630

   (144) https://bugs.python.org/issue?@action=redirect&bpo=32490

   (145) https://bugs.python.org/issue?@action=redirect&bpo=34363

   (146) https://bugs.python.org/issue?@action=redirect&bpo=34625

   (147) https://bugs.python.org/issue?@action=redirect&bpo=32270

   (148) https://bugs.python.org/issue?@action=redirect&bpo=34622

   (149) https://bugs.python.org/issue?@action=redirect&bpo=34610

   (150) https://bugs.python.org/issue?@action=redirect&bpo=34421

   (151) https://bugs.python.org/issue?@action=redirect&bpo=34604

   (152) https://bugs.python.org/issue?@action=redirect&bpo=30977

   (153) https://bugs.python.org/issue?@action=redirect&bpo=34574

   (154) https://bugs.python.org/issue?@action=redirect&bpo=8110

   (155) https://bugs.python.org/issue?@action=redirect&bpo=34530

   (156) https://bugs.python.org/issue?@action=redirect&bpo=34563

   (157) https://bugs.python.org/issue?@action=redirect&bpo=34558

   (158) https://bugs.python.org/issue?@action=redirect&bpo=34282

   (159) https://bugs.python.org/issue?@action=redirect&bpo=22872

   (160) https://bugs.python.org/issue?@action=redirect&bpo=34515

   (161) https://peps.python.org/pep-3131/

   (162) https://bugs.python.org/issue?@action=redirect&bpo=13312

   (163) https://bugs.python.org/issue?@action=redirect&bpo=34472

   (164) https://bugs.python.org/issue?@action=redirect&bpo=34454

   (165) https://bugs.python.org/issue?@action=redirect&bpo=6700

   (166) https://bugs.python.org/issue?@action=redirect&bpo=34171

   (167) https://bugs.python.org/issue?@action=redirect&bpo=34441

   (168) https://bugs.python.org/issue?@action=redirect&bpo=34427

   (169) https://bugs.python.org/issue?@action=redirect&bpo=34412

   (170) https://bugs.python.org/issue?@action=redirect&bpo=20849

   (171) https://bugs.python.org/issue?@action=redirect&bpo=31715

   (172) https://bugs.python.org/issue?@action=redirect&bpo=34384

   (173) https://bugs.python.org/issue?@action=redirect&bpo=22602

   (174) https://bugs.python.org/issue?@action=redirect&bpo=2122

   (175) https://bugs.python.org/issue?@action=redirect&bpo=34341

   (176) https://bugs.python.org/issue?@action=redirect&bpo=34333

   (177) https://bugs.python.org/issue?@action=redirect&bpo=18540

   (178) https://bugs.python.org/issue?@action=redirect&bpo=26502

   (179) https://bugs.python.org/issue?@action=redirect&bpo=34318

   (180) https://bugs.python.org/issue?@action=redirect&bpo=9372

   (181) https://bugs.python.org/issue?@action=redirect&bpo=33613

   (182) https://bugs.python.org/issue?@action=redirect&bpo=34248

   (183) https://bugs.python.org/issue?@action=redirect&bpo=33089

   (184) https://bugs.python.org/issue?@action=redirect&bpo=34246

   (185) https://bugs.python.org/issue?@action=redirect&bpo=31047

   (186) https://bugs.python.org/issue?@action=redirect&bpo=32321

   (187) https://bugs.python.org/issue?@action=redirect&bpo=34270

   (188) https://bugs.python.org/issue?@action=redirect&bpo=34263

   (189) https://bugs.python.org/issue?@action=redirect&bpo=34035

   (190) https://bugs.python.org/issue?@action=redirect&bpo=32215

   (191) https://bugs.python.org/issue?@action=redirect&bpo=34075

   (192) https://bugs.python.org/issue?@action=redirect&bpo=34251

   (193) https://bugs.python.org/issue?@action=redirect&bpo=19891

   (194) https://bugs.python.org/issue?@action=redirect&bpo=33089

   (195) https://bugs.python.org/issue?@action=redirect&bpo=34228

   (196) https://bugs.python.org/issue?@action=redirect&bpo=13041

   (197) https://bugs.python.org/issue?@action=redirect&bpo=34213

   (198) https://bugs.python.org/issue?@action=redirect&bpo=34052

   (199) https://bugs.python.org/issue?@action=redirect&bpo=34197

   (200) https://bugs.python.org/issue?@action=redirect&bpo=32788

   (201) https://bugs.python.org/issue?@action=redirect&bpo=21446

   (202) https://bugs.python.org/issue?@action=redirect&bpo=940286

   (203) https://bugs.python.org/issue?@action=redirect&bpo=34164

   (204) https://bugs.python.org/issue?@action=redirect&bpo=33729

   (205) https://bugs.python.org/issue?@action=redirect&bpo=34097

   (206) https://bugs.python.org/issue?@action=redirect&bpo=34108

   (207) https://bugs.python.org/issue?@action=redirect&bpo=34070

   (208) https://bugs.python.org/issue?@action=redirect&bpo=27494

   (209) https://bugs.python.org/issue?@action=redirect&bpo=27494

   (210) https://bugs.python.org/issue?@action=redirect&bpo=33967

   (211) https://bugs.python.org/issue?@action=redirect&bpo=34041

   (212) https://bugs.python.org/issue?@action=redirect&bpo=34056

   (213) https://peps.python.org/pep-0552/

   (214) https://bugs.python.org/issue?@action=redirect&bpo=34054

   (215) https://bugs.python.org/issue?@action=redirect&bpo=34043

   (216) https://bugs.python.org/issue?@action=redirect&bpo=34044

   (217) https://bugs.python.org/issue?@action=redirect&bpo=34010

   (218) https://bugs.python.org/issue?@action=redirect&bpo=34019

   (219) https://bugs.python.org/issue?@action=redirect&bpo=34003

   (220) https://bugs.python.org/issue?@action=redirect&bpo=33978

   (221) https://bugs.python.org/issue?@action=redirect&bpo=14117

   (222) https://bugs.python.org/issue?@action=redirect&bpo=33974

   (223) https://bugs.python.org/issue?@action=redirect&bpo=27500

   (224) https://bugs.python.org/issue?@action=redirect&bpo=24567

   (225) https://bugs.python.org/issue?@action=redirect&bpo=33871

   (226) https://bugs.python.org/issue?@action=redirect&bpo=25007

   (227) https://bugs.python.org/issue?@action=redirect&bpo=33929

   (228) https://bugs.python.org/issue?@action=redirect&bpo=33899

   (229) https://bugs.python.org/issue?@action=redirect&bpo=33897

   (230) https://bugs.python.org/issue?@action=redirect&bpo=33695

   (231) https://bugs.python.org/issue?@action=redirect&bpo=33695

   (232) https://bugs.python.org/issue?@action=redirect&bpo=33916

   (233) https://bugs.python.org/issue?@action=redirect&bpo=32568

   (234) https://bugs.python.org/issue?@action=redirect&bpo=33833

   (235) https://bugs.python.org/issue?@action=redirect&bpo=33663

   (236) https://bugs.python.org/issue?@action=redirect&bpo=33721

   (237) https://bugs.python.org/issue?@action=redirect&bpo=26544

   (238) https://bugs.python.org/issue?@action=redirect&bpo=33843

   (239) https://bugs.python.org/issue?@action=redirect&bpo=33842

   (240) https://bugs.python.org/issue?@action=redirect&bpo=30167

   (241) https://bugs.python.org/issue?@action=redirect&bpo=33805

   (242) https://bugs.python.org/issue?@action=redirect&bpo=33687

   (243) https://bugs.python.org/issue?@action=redirect&bpo=33812

   (244) https://bugs.python.org/issue?@action=redirect&bpo=32108

   (245) https://bugs.python.org/issue?@action=redirect&bpo=27397

   (246) https://bugs.python.org/issue?@action=redirect&bpo=33578

   (247) https://bugs.python.org/issue?@action=redirect&bpo=30805

   (248) https://bugs.python.org/issue?@action=redirect&bpo=33476

   (249) https://bugs.python.org/issue?@action=redirect&bpo=33694

   (250) https://bugs.python.org/issue?@action=redirect&bpo=32493

   (251) https://bugs.python.org/issue?@action=redirect&bpo=33792

   (252) https://bugs.python.org/issue?@action=redirect&bpo=33274

   (253) https://bugs.python.org/issue?@action=redirect&bpo=33778

   (254) https://bugs.python.org/issue?@action=redirect&bpo=33165

   (255) https://bugs.python.org/issue?@action=redirect&bpo=33770

   (256) https://bugs.python.org/issue?@action=redirect&bpo=33769

   (257) https://bugs.python.org/issue?@action=redirect&bpo=33767

   (258) https://bugs.python.org/issue?@action=redirect&bpo=33734

   (259) https://bugs.python.org/issue?@action=redirect&bpo=31014

   (260) https://bugs.python.org/issue?@action=redirect&bpo=2504

   (261) https://bugs.python.org/issue?@action=redirect&bpo=33197

   (262) https://bugs.python.org/issue?@action=redirect&bpo=32751

   (263) https://bugs.python.org/issue?@action=redirect&bpo=32684

   (264) https://bugs.python.org/issue?@action=redirect&bpo=33654

   (265) https://bugs.python.org/issue?@action=redirect&bpo=33674

   (266) https://bugs.python.org/issue?@action=redirect&bpo=33671

   (267) https://bugs.python.org/issue?@action=redirect&bpo=25427

   (268) https://bugs.python.org/issue?@action=redirect&bpo=33674

   (269) https://bugs.python.org/issue?@action=redirect&bpo=31647

   (270) https://bugs.python.org/issue?@action=redirect&bpo=32610

   (271) https://bugs.python.org/issue?@action=redirect&bpo=32410

   (272) https://bugs.python.org/issue?@action=redirect&bpo=33469

   (273) https://bugs.python.org/issue?@action=redirect&bpo=33672

   (274) https://bugs.python.org/issue?@action=redirect&bpo=33654

   (275) https://bugs.python.org/issue?@action=redirect&bpo=33652

   (276) https://bugs.python.org/issue?@action=redirect&bpo=32493

   (277) https://bugs.python.org/issue?@action=redirect&bpo=33238

   (278) https://bugs.python.org/issue?@action=redirect&bpo=33618

   (279) https://bugs.python.org/issue?@action=redirect&bpo=33625

   (280) https://bugs.python.org/issue?@action=redirect&bpo=33623

   (281) https://bugs.python.org/issue?@action=redirect&bpo=11874

   (282) https://bugs.python.org/issue?@action=redirect&bpo=30877

   (283) https://bugs.python.org/issue?@action=redirect&bpo=33604

   (284) https://bugs.python.org/issue?@action=redirect&bpo=33582

   (285) https://bugs.python.org/issue?@action=redirect&bpo=21145

   (286) https://bugs.python.org/issue?@action=redirect&bpo=33570

   (287) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (288) https://bugs.python.org/issue?@action=redirect&bpo=12486

   (289) https://bugs.python.org/issue?@action=redirect&bpo=33540

   (290) https://bugs.python.org/issue?@action=redirect&bpo=33548

   (291) https://bugs.python.org/issue?@action=redirect&bpo=33109

   (292) https://bugs.python.org/issue?@action=redirect&bpo=26510

   (293) https://bugs.python.org/issue?@action=redirect&bpo=33541

   (294) https://bugs.python.org/issue?@action=redirect&bpo=33536

   (295) https://bugs.python.org/issue?@action=redirect&bpo=33542

   (296) https://bugs.python.org/issue?@action=redirect&bpo=26819

   (297) https://bugs.python.org/issue?@action=redirect&bpo=33516

   (298) https://bugs.python.org/issue?@action=redirect&bpo=28612

   (299) https://bugs.python.org/issue?@action=redirect&bpo=28167

   (300) https://bugs.python.org/issue?@action=redirect&bpo=33504

   (301) https://bugs.python.org/issue?@action=redirect&bpo=33505

   (302) https://bugs.python.org/issue?@action=redirect&bpo=33497

   (303) https://bugs.python.org/issue?@action=redirect&bpo=29235

   (304) https://bugs.python.org/issue?@action=redirect&bpo=33495

   (305) https://bugs.python.org/issue?@action=redirect&bpo=26103

   (306) https://bugs.python.org/issue?@action=redirect&bpo=29209

   (307) https://bugs.python.org/issue?@action=redirect&bpo=33453

   (308) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (309) https://bugs.python.org/issue?@action=redirect&bpo=33365

   (310) https://bugs.python.org/issue?@action=redirect&bpo=20087

   (311) https://bugs.python.org/issue?@action=redirect&bpo=33422

   (312) https://bugs.python.org/issue?@action=redirect&bpo=28167

   (313) https://bugs.python.org/issue?@action=redirect&bpo=33281

   (314) https://bugs.python.org/issue?@action=redirect&bpo=33311

   (315) https://bugs.python.org/issue?@action=redirect&bpo=27300

   (316) https://bugs.python.org/issue?@action=redirect&bpo=32933

   (317) https://bugs.python.org/issue?@action=redirect&bpo=33217

   (318) https://bugs.python.org/issue?@action=redirect&bpo=33197

   (319) https://bugs.python.org/issue?@action=redirect&bpo=33383

   (320) https://bugs.python.org/issue?@action=redirect&bpo=33375

   (321) https://bugs.python.org/issue?@action=redirect&bpo=33336

   (322) https://bugs.python.org/issue?@action=redirect&bpo=32455

   (323) https://bugs.python.org/issue?@action=redirect&bpo=27485

   (324) https://bugs.python.org/issue?@action=redirect&bpo=33332

   (325) https://bugs.python.org/issue?@action=redirect&bpo=33251

   (326) https://bugs.python.org/issue?@action=redirect&bpo=33329

   (327) https://bugs.python.org/issue?@action=redirect&bpo=33334

   (328) https://bugs.python.org/issue?@action=redirect&bpo=991266

   (329) https://bugs.python.org/issue?@action=redirect&bpo=33131

   (330) https://bugs.python.org/issue?@action=redirect&bpo=33308

   (331) https://bugs.python.org/issue?@action=redirect&bpo=23403

   (332) https://bugs.python.org/issue?@action=redirect&bpo=33266

   (333) https://bugs.python.org/issue?@action=redirect&bpo=11594

   (334) https://bugs.python.org/issue?@action=redirect&bpo=33254

   (335) https://bugs.python.org/issue?@action=redirect&bpo=33265

   (336) https://bugs.python.org/issue?@action=redirect&bpo=33263

   (337) https://bugs.python.org/issue?@action=redirect&bpo=33256

   (338) https://bugs.python.org/issue?@action=redirect&bpo=33144

   (339) https://bugs.python.org/issue?@action=redirect&bpo=33185

   (340) https://bugs.python.org/issue?@action=redirect&bpo=33053

   (341) https://bugs.python.org/issue?@action=redirect&bpo=29613

   (342) https://bugs.python.org/issue?@action=redirect&bpo=33169

   (343) https://bugs.python.org/issue?@action=redirect&bpo=33203

   (344) https://bugs.python.org/issue?@action=redirect&bpo=33224

   (345) https://peps.python.org/pep-0479/

   (346) https://bugs.python.org/issue?@action=redirect&bpo=33209

   (347) https://bugs.python.org/issue?@action=redirect&bpo=32861

   (348) https://bugs.python.org/issue?@action=redirect&bpo=23403

   (349) https://peps.python.org/pep-3154/

   (350) https://bugs.python.org/issue?@action=redirect&bpo=20104

   (351) https://bugs.python.org/issue?@action=redirect&bpo=33106

   (352) https://bugs.python.org/issue?@action=redirect&bpo=33175

   (353) https://bugs.python.org/issue?@action=redirect&bpo=32380

   (354) https://bugs.python.org/issue?@action=redirect&bpo=33141

   (355) https://bugs.python.org/issue?@action=redirect&bpo=33096

   (356) https://bugs.python.org/issue?@action=redirect&bpo=32873

   (357) https://bugs.python.org/issue?@action=redirect&bpo=33134

   (358) https://bugs.python.org/issue?@action=redirect&bpo=33127

   (359) https://bugs.python.org/issue?@action=redirect&bpo=32505

   (360) https://bugs.python.org/issue?@action=redirect&bpo=33078

   (361) https://bugs.python.org/issue?@action=redirect&bpo=33116

   (362) https://bugs.python.org/issue?@action=redirect&bpo=32896

   (363) https://bugs.python.org/issue?@action=redirect&bpo=33100

   (364) https://bugs.python.org/issue?@action=redirect&bpo=32953

   (365) https://bugs.python.org/issue?@action=redirect&bpo=33097

   (366) https://bugs.python.org/issue?@action=redirect&bpo=32968

   (367) https://bugs.python.org/issue?@action=redirect&bpo=33061

   (368) https://bugs.python.org/issue?@action=redirect&bpo=33078

   (369) https://bugs.python.org/issue?@action=redirect&bpo=33064

   (370) https://bugs.python.org/issue?@action=redirect&bpo=33056

   (371) https://bugs.python.org/issue?@action=redirect&bpo=33021

   (372) https://bugs.python.org/issue?@action=redirect&bpo=31804

   (373) https://bugs.python.org/issue?@action=redirect&bpo=33034

   (374) https://bugs.python.org/issue?@action=redirect&bpo=30249

   (375) https://bugs.python.org/issue?@action=redirect&bpo=33037

   (376) https://bugs.python.org/issue?@action=redirect&bpo=27683

   (377) https://bugs.python.org/issue?@action=redirect&bpo=22674

   (378) https://bugs.python.org/issue?@action=redirect&bpo=32999

   (379) https://bugs.python.org/issue?@action=redirect&bpo=33009

   (380) https://bugs.python.org/issue?@action=redirect&bpo=32969

   (381) https://bugs.python.org/issue?@action=redirect&bpo=32056

   (382) https://bugs.python.org/issue?@action=redirect&bpo=32970

   (383) https://bugs.python.org/issue?@action=redirect&bpo=32844

   (384) https://bugs.python.org/issue?@action=redirect&bpo=32960

   (385) https://bugs.python.org/issue?@action=redirect&bpo=32713

   (386) https://bugs.python.org/issue?@action=redirect&bpo=32257

   (387) https://bugs.python.org/issue?@action=redirect&bpo=32951

   (388) https://bugs.python.org/issue?@action=redirect&bpo=32929

   (389) https://bugs.python.org/issue?@action=redirect&bpo=32947

   (390) https://bugs.python.org/issue?@action=redirect&bpo=32146

   (391) https://bugs.python.org/issue?@action=redirect&bpo=30622

   (392) https://bugs.python.org/issue?@action=redirect&bpo=32922

   (393) https://bugs.python.org/issue?@action=redirect&bpo=32759

   (394) https://bugs.python.org/issue?@action=redirect&bpo=32859

   (395) https://bugs.python.org/issue?@action=redirect&bpo=32556

   (396) https://bugs.python.org/issue?@action=redirect&bpo=21060

   (397) https://bugs.python.org/issue?@action=redirect&bpo=32857

   (398) https://bugs.python.org/issue?@action=redirect&bpo=32852

   (399) https://bugs.python.org/issue?@action=redirect&bpo=31333

   (400) https://bugs.python.org/issue?@action=redirect&bpo=32841

   (401) https://bugs.python.org/issue?@action=redirect&bpo=32819

   (402) https://bugs.python.org/issue?@action=redirect&bpo=19675

   (403) https://bugs.python.org/issue?@action=redirect&bpo=32394

   (404) https://bugs.python.org/issue?@action=redirect&bpo=31787

   (405) https://bugs.python.org/issue?@action=redirect&bpo=30157

   (406) https://bugs.python.org/issue?@action=redirect&bpo=30688

   (407) https://bugs.python.org/issue?@action=redirect&bpo=32792

   (408) https://bugs.python.org/issue?@action=redirect&bpo=32775

   (409) https://bugs.python.org/issue?@action=redirect&bpo=32622

   (410) https://bugs.python.org/issue?@action=redirect&bpo=32777

   (411) https://bugs.python.org/issue?@action=redirect&bpo=32647

   (412) https://bugs.python.org/issue?@action=redirect&bpo=32749

   (413) https://bugs.python.org/issue?@action=redirect&bpo=32741

   (414) https://bugs.python.org/issue?@action=redirect&bpo=32691

   (415) https://bugs.python.org/issue?@action=redirect&bpo=32734

   (416) https://bugs.python.org/issue?@action=redirect&bpo=32727

   (417) https://bugs.python.org/issue?@action=redirect&bpo=31453

   (418) https://bugs.python.org/issue?@action=redirect&bpo=24334

   (419) https://bugs.python.org/issue?@action=redirect&bpo=31848

   (420) https://bugs.python.org/issue?@action=redirect&bpo=32585

   (421) https://bugs.python.org/issue?@action=redirect&bpo=32512

   (422) https://bugs.python.org/issue?@action=redirect&bpo=8525

   (423) https://bugs.python.org/issue?@action=redirect&bpo=31639

   (424) https://bugs.python.org/issue?@action=redirect&bpo=29877

   (425) https://bugs.python.org/issue?@action=redirect&bpo=32221

   (426) https://bugs.python.org/issue?@action=redirect&bpo=32147

   (427) https://bugs.python.org/issue?@action=redirect&bpo=30693

   (428) https://bugs.python.org/issue?@action=redirect&bpo=30693

   (429) https://bugs.python.org/issue?@action=redirect&bpo=31680

   (430) https://bugs.python.org/issue?@action=redirect&bpo=31908

   (431) https://bugs.python.org/issue?@action=redirect&bpo=31608

   (432) https://bugs.python.org/issue?@action=redirect&bpo=31425

   (433) https://bugs.python.org/issue?@action=redirect&bpo=22005

   (434) https://bugs.python.org/issue?@action=redirect&bpo=27645

   (435) https://bugs.python.org/issue?@action=redirect&bpo=16865

   (436) https://bugs.python.org/issue?@action=redirect&bpo=31508

   (437) https://bugs.python.org/issue?@action=redirect&bpo=29456


File: python.info,  Node: Documentação<52>,  Next: Testes<55>,  Prev: Biblioteca<137>,  Up: Python 3 8 0 alpha 1

1.23.62.4 Documentação
......................

   - bpo-21257(1): Document *note http.client.parse_headers(): 1bc1.

   - bpo-34764(2): Improve example of iter() with 2nd sentinel argument.

   - bpo-35564(3): Explicitly set master_doc variable in conf.py for
     compliance with Sphinx 2.0

   - bpo-35511(4): Specified that profile.Profile class doesn’t not
     support enable or disable methods.  Also, elaborated that Profile
     object as a context manager is only supported in cProfile module.

   - bpo-10536(5): Enhance the gettext docs.  Patch by Éric Araujo

   - bpo-35089(6): Remove mention of ‘typing.io’ and ‘typing.re’.  Their
     types should be imported from ‘typing’ directly.

   - bpo-35038(7): Fix the documentation about an unexisting
     ‘f_restricted’ attribute in the frame object.  Patch by Stéphane
     Wirtel

   - bpo-35042(8): Replace PEP XYZ by the pep role and allow to use the
     direct links to the PEPs.

   - bpo-35044(9): Fix the documentation with the role ‘exc’ for the
     appropriated exception.  Patch by Stéphane Wirtel

   - bpo-35035(10): Rename documentation for *note email.utils: 50. to
     ‘email.utils.rst’.

   - bpo-34967(11): Use app.add_object_type() instead of the deprecated
     Sphinx function app.description_unit()

   - bpo-34913(12): Add documentation about the new command line
     interface of the gzip module.

   - bpo-32174(13): chm document displays non-ASCII characters properly
     on some MBCS Windows systems.

   - bpo-11233(14): Create availability directive for documentation.
     Original patch by Georg Brandl.

   - bpo-34790(15): Document how passing coroutines to asyncio.wait()
     can be confusing.

   - bpo-34552(16): Make clear that ‘==’ operator sometimes is
     equivalent to ‘is’.  The ‘<’, ‘<=’, ‘>’ and ‘>=’ operators are only
     defined where they make sense.

   - bpo-28617(17): Fixed info in the stdtypes docs concerning the types
     that support membership tests.

   - bpo-20177(18): Migrate datetime.date.fromtimestamp to Argument
     Clinic.  Patch by Tim Hoffmann.

   - bpo-34065(19): Fix wrongly written basicConfig documentation markup
     syntax

   - bpo-33460(20): replaced ellipsis with correct error codes in
     tutorial chapter 3.

   - bpo-33847(21): Add ‘@’ operator entry to index.

   - bpo-33409(22): Clarified the relationship between PEP 538(23)’s
     PYTHONCOERCECLOCALE and PEP 540’s PYTHONUTF8 mode.

   - bpo-33197(24): Add versionadded tag to the documentation of
     ParameterKind.description

   - bpo-17045(25): Improve the C-API doc for PyTypeObject.  This
     includes adding several quick-reference tables and a lot of missing
     slot/typedef entries.  The existing entries were also cleaned up
     with a slightly more consistent format.

   - bpo-33736(26): Improve the documentation of *note
     asyncio.open_connection(): b2b, *note asyncio.start_server(): b2c.
     and their UNIX socket counterparts.

   - bpo-23859(27): Document that ‘asyncio.wait()’ does not cancel its
     futures on timeout.

   - bpo-32436(28): Document PEP 567(29) changes to asyncio.

   - bpo-33604(30): Update HMAC md5 default to a DeprecationWarning,
     bump removal to 3.8.

   - bpo-33594(31): Document ‘getargspec’, ‘from_function’ and
     ‘from_builtin’ as deprecated in their respective docstring, and
     include version since deprecation in DeprecationWarning message.

   - bpo-33503(32): Fix broken pypi link

   - bpo-33421(33): Add missing documentation for
     ‘typing.AsyncContextManager’.

   - bpo-33487(34): BZ2file now emit a DeprecationWarning when
     buffering=None is passed, the deprecation message and documentation
     also now explicitly state it is deprecated since 3.0.

   - bpo-33378(35): Add Korean language switcher for
     ‘https://docs.python.org/3/’

   - bpo-33276(36): Clarify that the ‘__path__’ attribute on modules
     cannot be just any value.

   - bpo-33201(37): Modernize documentation for writing C extension
     types.

   - bpo-33195(38): Deprecate ‘Py_UNICODE’ usage in ‘c-api/arg’
     document.  ‘Py_UNICODE’ related APIs are deprecated since Python
     3.3, but it is missed in the document.

   - bpo-33126(39): Document PyBuffer_ToContiguous().

   - bpo-27212(40): Modify documentation for the ‘islice()’ recipe to
     consume initial values up to the start index.

   - bpo-28247(41): Update *note zipapp: 130. documentation to describe
     how to make standalone applications.

   - bpo-18802(42): Documentation changes for ipaddress.  Patch by Jon
     Foster and Berker Peksag.

   - bpo-27428(43): Update documentation to clarify that
     ‘WindowsRegistryFinder’ implements ‘MetaPathFinder’.  (Patch by
     Himanshu Lakhara)

   - bpo-28124(44): The ssl module function ssl.wrap_socket() has been
     de-emphasized and deprecated in favor of the more secure and
     efficient SSLContext.wrap_socket() method.

   - bpo-17232(45): Clarify docs for -O and -OO. Patch by Terry Reedy.

   - bpo-32436(46): Add documentation for the contextvars module (PEP
     567).

   - bpo-32800(47): Update link to w3c doc for xml default namespaces.

   - bpo-11015(48): Update *note test.support: e4. documentation.

   - bpo-32613(49): Update the faq/windows.html to use the py command
     from PEP 397 instead of python.

   - bpo-8722(50): Document ‘__getattr__()’ behavior when property
     ‘get()’ method raises *note AttributeError: 34b.

   - bpo-32614(51): Modify RE examples in documentation to use raw
     strings to prevent *note DeprecationWarning: 1a5. and add text to
     REGEX HOWTO to highlight the deprecation.

   - bpo-20709(52): Remove the paragraph where we explain that
     os.utime() does not support a directory as path under Windows.
     Patch by Jan-Philip Gehrcke

   - bpo-32722(53): Remove the bad example in the tutorial of the
     Generator Expression.  Patch by Stéphane Wirtel

   - bpo-31972(54): Improve docstrings for ‘pathlib.PurePath’
     subclasses.

   - bpo-30607(55): Use the externalized ‘python-docs-theme’ package
     when building the documentation.

   - bpo-8243(56): Add a note about curses.addch and curses.addstr
     exception behavior when writing outside a window, or pad.

   - bpo-32337(57): Update documentation related with ‘dict’ order.

   - bpo-25041(58): Document ‘AF_PACKET’ in the *note socket: cc.
     module.

   - bpo-31432(59): Clarify meaning of CERT_NONE, CERT_OPTIONAL, and
     CERT_REQUIRED flags for ssl.SSLContext.verify_mode.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21257

   (2) https://bugs.python.org/issue?@action=redirect&bpo=34764

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35564

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35511

   (5) https://bugs.python.org/issue?@action=redirect&bpo=10536

   (6) https://bugs.python.org/issue?@action=redirect&bpo=35089

   (7) https://bugs.python.org/issue?@action=redirect&bpo=35038

   (8) https://bugs.python.org/issue?@action=redirect&bpo=35042

   (9) https://bugs.python.org/issue?@action=redirect&bpo=35044

   (10) https://bugs.python.org/issue?@action=redirect&bpo=35035

   (11) https://bugs.python.org/issue?@action=redirect&bpo=34967

   (12) https://bugs.python.org/issue?@action=redirect&bpo=34913

   (13) https://bugs.python.org/issue?@action=redirect&bpo=32174

   (14) https://bugs.python.org/issue?@action=redirect&bpo=11233

   (15) https://bugs.python.org/issue?@action=redirect&bpo=34790

   (16) https://bugs.python.org/issue?@action=redirect&bpo=34552

   (17) https://bugs.python.org/issue?@action=redirect&bpo=28617

   (18) https://bugs.python.org/issue?@action=redirect&bpo=20177

   (19) https://bugs.python.org/issue?@action=redirect&bpo=34065

   (20) https://bugs.python.org/issue?@action=redirect&bpo=33460

   (21) https://bugs.python.org/issue?@action=redirect&bpo=33847

   (22) https://bugs.python.org/issue?@action=redirect&bpo=33409

   (23) https://peps.python.org/pep-0538/

   (24) https://bugs.python.org/issue?@action=redirect&bpo=33197

   (25) https://bugs.python.org/issue?@action=redirect&bpo=17045

   (26) https://bugs.python.org/issue?@action=redirect&bpo=33736

   (27) https://bugs.python.org/issue?@action=redirect&bpo=23859

   (28) https://bugs.python.org/issue?@action=redirect&bpo=32436

   (29) https://peps.python.org/pep-0567/

   (30) https://bugs.python.org/issue?@action=redirect&bpo=33604

   (31) https://bugs.python.org/issue?@action=redirect&bpo=33594

   (32) https://bugs.python.org/issue?@action=redirect&bpo=33503

   (33) https://bugs.python.org/issue?@action=redirect&bpo=33421

   (34) https://bugs.python.org/issue?@action=redirect&bpo=33487

   (35) https://bugs.python.org/issue?@action=redirect&bpo=33378

   (36) https://bugs.python.org/issue?@action=redirect&bpo=33276

   (37) https://bugs.python.org/issue?@action=redirect&bpo=33201

   (38) https://bugs.python.org/issue?@action=redirect&bpo=33195

   (39) https://bugs.python.org/issue?@action=redirect&bpo=33126

   (40) https://bugs.python.org/issue?@action=redirect&bpo=27212

   (41) https://bugs.python.org/issue?@action=redirect&bpo=28247

   (42) https://bugs.python.org/issue?@action=redirect&bpo=18802

   (43) https://bugs.python.org/issue?@action=redirect&bpo=27428

   (44) https://bugs.python.org/issue?@action=redirect&bpo=28124

   (45) https://bugs.python.org/issue?@action=redirect&bpo=17232

   (46) https://bugs.python.org/issue?@action=redirect&bpo=32436

   (47) https://bugs.python.org/issue?@action=redirect&bpo=32800

   (48) https://bugs.python.org/issue?@action=redirect&bpo=11015

   (49) https://bugs.python.org/issue?@action=redirect&bpo=32613

   (50) https://bugs.python.org/issue?@action=redirect&bpo=8722

   (51) https://bugs.python.org/issue?@action=redirect&bpo=32614

   (52) https://bugs.python.org/issue?@action=redirect&bpo=20709

   (53) https://bugs.python.org/issue?@action=redirect&bpo=32722

   (54) https://bugs.python.org/issue?@action=redirect&bpo=31972

   (55) https://bugs.python.org/issue?@action=redirect&bpo=30607

   (56) https://bugs.python.org/issue?@action=redirect&bpo=8243

   (57) https://bugs.python.org/issue?@action=redirect&bpo=32337

   (58) https://bugs.python.org/issue?@action=redirect&bpo=25041

   (59) https://bugs.python.org/issue?@action=redirect&bpo=31432


File: python.info,  Node: Testes<55>,  Next: Construção<59>,  Prev: Documentação<52>,  Up: Python 3 8 0 alpha 1

1.23.62.5 Testes
................

   - bpo-35772(1): Fix sparse file tests of test_tarfile on ppc64 with
     the tmpfs filesystem.  Fix the function testing if the filesystem
     supports sparse files: create a file which contains data and
     “holes”, instead of creating a file which contains no data.  tmpfs
     effective block size is a page size (tmpfs lives in the page
     cache).  RHEL uses 64 KiB pages on aarch64, ppc64, ppc64le, only
     s390x and x86_64 use 4 KiB pages, whereas the test punch holes of 4
     KiB.

   - bpo-35045(2): Make ssl tests less strict and also accept TLSv1 as
     system default.  The changes unbreaks test_min_max_version on
     Fedora 29.

   - bpo-32710(3): ‘test_asyncio/test_sendfile.py’ now resets the event
     loop policy using ‘tearDownModule()’ as done in other tests, to
     prevent a warning when running tests on Windows.

   - bpo-33717(4): test.pythoninfo now logs information of all clocks,
     not only time.time() and time.perf_counter().

   - bpo-35488(5): Add a test to pathlib’s Path.match() to verify it
     does not support glob-style ** recursive pattern matching.

   - bpo-31731(6): Fix a race condition in ‘check_interrupted_write()’
     of test_io: create directly the thread with SIGALRM signal blocked,
     rather than blocking the signal later from the thread.  Previously,
     it was possible that the thread gets the signal before the signal
     is blocked.

   - bpo-35424(7): Fix test_multiprocessing_main_handling: use
     ‘multiprocessing.Pool’ with a context manager and then explicitly
     join the pool.

   - bpo-35519(8): Rename ‘test.bisect’ module to ‘test.bisect_cmd’ to
     avoid conflict with *note bisect: 11. module when running directly
     a test like ‘./python Lib/test/test_xmlrpc.py’.

   - bpo-35513(9): Replace *note time.time(): 254. with *note
     time.monotonic(): 253. in tests to measure time delta.

   - bpo-34279(10): ‘test.support.run_unittest()’ no longer raise
     ‘TestDidNotRun’ if the test result contains skipped tests.  The
     exception is now only raised if no test have been run and no test
     have been skipped.

   - bpo-35412(11): Add testcase to ‘test_future4’: check unicode
     literal.

   - bpo-26704(12): Added test demonstrating double-patching of an
     instance method.  Patch by Anthony Sottile.

   - bpo-33725(13): test_multiprocessing_fork may crash on recent
     versions of macOS. Until the issue is resolved, skip the test on
     macOS.

   - bpo-35352(14): Modify test_asyncio to use the certificate set from
     the test directory.

   - bpo-35317(15): Fix ‘mktime()’ overflow error in ‘test_email’: run
     ‘test_localtime_daylight_true_dst_true()’ and
     ‘test_localtime_daylight_false_dst_true()’ with a specific
     timezone.

   - bpo-21263(16): After several reports that test_gdb does not work
     properly on macOS and since gdb is not shipped by default anymore,
     test_gdb is now skipped on macOS when LLVM Clang has been used to
     compile Python.  Patch by Lysandros Nikolaou

   - bpo-34279(17): regrtest issue a warning when no tests have been
     executed in a particular test file.  Also, a new final result state
     is issued if no test have been executed across all test files.
     Patch by Pablo Galindo.

   - bpo-34962(18): make docstest in Doc now passes., and is enforced in
     CI

   - bpo-23596(19): Use argparse for the command line of the gzip
     module.  Patch by Antony Lee

   - bpo-34537(20): Fix ‘test_gdb.test_strings()’ when ‘LC_ALL=C’ and
     GDB was compiled with Python 3.6 or earlier.

   - bpo-34587(21): test_socket: Remove RDSTest.testCongestion().  The
     test tries to fill the receiver’s socket buffer and expects an
     error.  But the RDS protocol doesn’t require that.  Moreover, the
     Linux implementation of RDS expects that the producer of the
     messages reduces its rate, it’s not the role of the receiver to
     trigger an error.  The test fails on Fedora 28 by design, so just
     remove it.

   - bpo-34661(22): Fix test_shutil if unzip doesn’t support -t.

   - bpo-34200(23): Fixed non-deterministic flakiness of test_pkg by not
     using the scary test.support.module_cleanup() logic to save and
     restore sys.modules contents between test cases.

   - bpo-34569(24): The experimental PEP 554 data channels now correctly
     pass negative PyLong objects between subinterpreters on 32-bit
     systems.  Patch by Michael Felt.

   - bpo-34594(25): Fix usage of hardcoded ‘errno’ values in the tests.

   - bpo-34579(26): Fix test_embed for AIX Patch by Michael Felt

   - bpo-34542(27): Use 3072 RSA keys and SHA-256 signature for test
     certs and keys.

   - bpo-11193(28): Remove special condition for AIX in
     ‘test_subprocess.test_undecodable_env’

   - bpo-34347(29): Fix ‘test_utf8_mode.test_cmd_line’ for AIX

   - bpo-34490(30): On AIX with AF_UNIX family sockets getsockname()
     does not provide ‘sockname’, so skip calls to
     transport.get_extra_info(‘sockname’)

   - bpo-34391(31): Fix ftplib test for TLS 1.3 by reading from data
     socket.

   - bpo-11192(32): Fix ‘test_socket’ on AIX 6.1 and later IPv6 zone id
     supports only supported by ‘inet_pton6_zone()’.  Switch to
     runtime-based ‘platform.system()’ to establish current platform
     rather than build-time based ‘sys.platform()’

   - bpo-34399(33): Update all RSA keys and DH params to use at least
     2048 bits.

   - bpo-34373(34): Fix ‘test_mktime’ and ‘test_pthread_getcpuclickid’
     tests for AIX Add range checking for ‘_PyTime_localtime’ for AIX
     Patch by Michael Felt

   - bpo-11191(35): Skip the distutils test ‘test_search_cpp’ when using
     XLC as compiler patch by aixtools (Michael Felt)

   - Improved an error message when mock assert_has_calls fails.

   - bpo-33746(36): Fix test_unittest when run in verbose mode.

   - bpo-33901(37): Fix test_dbm_gnu on macOS with gdbm 1.15: add a
     larger value to make sure that the file size changes.

   - bpo-33873(38): Fix a bug in ‘regrtest’ that caused an extra test to
     run if –huntrleaks/-R was used.  Exit with error in case that
     invalid parameters are specified to –huntrleaks/-R (at least one
     warmup run and one repetition must be used).

   - bpo-33562(39): Check that a global asyncio event loop policy is not
     left behind by any tests.

   - bpo-33655(40): Ignore test_posix_fallocate failures on BSD
     platforms that might be due to running on ZFS.

   - bpo-32962(41): Fixed test_gdb when Python is compiled with flags
     -mcet -fcf-protection -O0.

   - bpo-33358(42): Fix
     ‘test_embed.test_pre_initialization_sys_options()’ when the
     interpreter is built with ‘--enable-shared’.

   - bpo-32872(43): Avoid regrtest compatibility issue with namespace
     packages.

   - bpo-32517(44): Fix failing ‘test_asyncio’ on macOS 10.12.2+ due to
     transport of ‘KqueueSelector’ loop was not being closed.

   - bpo-32663(45): Making sure the ‘SMTPUTF8SimTests’ class of tests
     gets run in ‘test_smtplib.py’.

   - bpo-27643(46): Test_C test case needs “signed short” bitfields, but
     the IBM XLC compiler (on AIX) does not support this Skip the code
     and test when AIX and XLC are used

     Applicable to Python2-2.7 and later

   - bpo-19417(47): Add test_bdb.py.

   - bpo-31809(48): Add tests to verify connection with secp ECDH
     curves.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35772

   (2) https://bugs.python.org/issue?@action=redirect&bpo=35045

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32710

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33717

   (5) https://bugs.python.org/issue?@action=redirect&bpo=35488

   (6) https://bugs.python.org/issue?@action=redirect&bpo=31731

   (7) https://bugs.python.org/issue?@action=redirect&bpo=35424

   (8) https://bugs.python.org/issue?@action=redirect&bpo=35519

   (9) https://bugs.python.org/issue?@action=redirect&bpo=35513

   (10) https://bugs.python.org/issue?@action=redirect&bpo=34279

   (11) https://bugs.python.org/issue?@action=redirect&bpo=35412

   (12) https://bugs.python.org/issue?@action=redirect&bpo=26704

   (13) https://bugs.python.org/issue?@action=redirect&bpo=33725

   (14) https://bugs.python.org/issue?@action=redirect&bpo=35352

   (15) https://bugs.python.org/issue?@action=redirect&bpo=35317

   (16) https://bugs.python.org/issue?@action=redirect&bpo=21263

   (17) https://bugs.python.org/issue?@action=redirect&bpo=34279

   (18) https://bugs.python.org/issue?@action=redirect&bpo=34962

   (19) https://bugs.python.org/issue?@action=redirect&bpo=23596

   (20) https://bugs.python.org/issue?@action=redirect&bpo=34537

   (21) https://bugs.python.org/issue?@action=redirect&bpo=34587

   (22) https://bugs.python.org/issue?@action=redirect&bpo=34661

   (23) https://bugs.python.org/issue?@action=redirect&bpo=34200

   (24) https://bugs.python.org/issue?@action=redirect&bpo=34569

   (25) https://bugs.python.org/issue?@action=redirect&bpo=34594

   (26) https://bugs.python.org/issue?@action=redirect&bpo=34579

   (27) https://bugs.python.org/issue?@action=redirect&bpo=34542

   (28) https://bugs.python.org/issue?@action=redirect&bpo=11193

   (29) https://bugs.python.org/issue?@action=redirect&bpo=34347

   (30) https://bugs.python.org/issue?@action=redirect&bpo=34490

   (31) https://bugs.python.org/issue?@action=redirect&bpo=34391

   (32) https://bugs.python.org/issue?@action=redirect&bpo=11192

   (33) https://bugs.python.org/issue?@action=redirect&bpo=34399

   (34) https://bugs.python.org/issue?@action=redirect&bpo=34373

   (35) https://bugs.python.org/issue?@action=redirect&bpo=11191

   (36) https://bugs.python.org/issue?@action=redirect&bpo=33746

   (37) https://bugs.python.org/issue?@action=redirect&bpo=33901

   (38) https://bugs.python.org/issue?@action=redirect&bpo=33873

   (39) https://bugs.python.org/issue?@action=redirect&bpo=33562

   (40) https://bugs.python.org/issue?@action=redirect&bpo=33655

   (41) https://bugs.python.org/issue?@action=redirect&bpo=32962

   (42) https://bugs.python.org/issue?@action=redirect&bpo=33358

   (43) https://bugs.python.org/issue?@action=redirect&bpo=32872

   (44) https://bugs.python.org/issue?@action=redirect&bpo=32517

   (45) https://bugs.python.org/issue?@action=redirect&bpo=32663

   (46) https://bugs.python.org/issue?@action=redirect&bpo=27643

   (47) https://bugs.python.org/issue?@action=redirect&bpo=19417

   (48) https://bugs.python.org/issue?@action=redirect&bpo=31809


File: python.info,  Node: Construção<59>,  Next: Windows<52>,  Prev: Testes<55>,  Up: Python 3 8 0 alpha 1

1.23.62.6 Construção
....................

   - bpo-34691(1): The _contextvars module is now built into the core
     Python library on Windows.

   - bpo-35683(2): Improved Azure Pipelines build steps and now
     verifying layouts correctly

   - bpo-35642(3): Remove asynciomodule.c from pythoncore.vcxproj

   - bpo-35550(4): Fix incorrect Solaris #ifdef checks to look for __sun
     && __SVR4 instead of sun when compiling.

   - bpo-35499(5): ‘make profile-opt’ no longer replaces ‘CFLAGS_NODIST’
     with ‘CFLAGS’.  It now adds profile-guided optimization (PGO) flags
     to ‘CFLAGS_NODIST’: existing ‘CFLAGS_NODIST’ flags are kept.

   - bpo-35257(6): Avoid leaking the linker flags from Link Time
     Optimizations (LTO) into distutils when compiling C extensions.

   - bpo-35351(7): When building Python with clang and LTO, LTO flags
     are no longer passed into CFLAGS to build third-party C extensions
     through distutils.

   - bpo-35139(8): Fix a compiler error when statically linking
     ‘pyexpat’ in ‘Modules/Setup’.

   - bpo-35059(9): PCbuild: Set InlineFunctionExpansion to
     OnlyExplicitInline (“/Ob1” option) in pyproject.props in Debug mode
     to expand functions marked as inline.  This change should make
     Python compiled in Debug mode a little bit faster on Windows.

   - bpo-35011(10): Restores the use of pyexpatns.h to isolate our
     embedded copy of the expat C library so that its symbols do not
     conflict at link or dynamic loading time with an embedding
     application or other extension modules with their own version of
     libexpat.

   - bpo-28015(11): Have –with-lto works correctly with clang.

   - bpo-34765(12): Update the outdated install-sh file to the latest
     revision from automake v1.16.1

   - bpo-34585(13): Check for floating-point byte order in configure.ac
     using compilation tests instead of executing code, so that these
     checks work in cross-compiled builds.

   - bpo-34710(14): Fixed SSL module build with OpenSSL & pedantic
     CFLAGS.

   - bpo-34582(15): Add JUnit XML output for regression tests and update
     Azure DevOps builds.

   - bpo-34081(16): Make Sphinx warnings as errors in the Docs Makefile.

   - bpo-34555(17): Fix for case where it was not possible to have both
     ‘HAVE_LINUX_VM_SOCKETS_H’ and ‘HAVE_SOCKADDR_ALG’ be undefined.

   - bpo-33015(18): Fix an undefined behaviour in the pthread
     implementation of *note PyThread_start_new_thread(): 1bc4.: add a
     function wrapper to always return ‘NULL’.

   - bpo-34245(19): The Python shared library is now installed with
     write permission (mode 0755), which is the standard way of
     installing such libraries.

   - bpo-34121(20): Fix detection of C11 atomic support on clang.

   - bpo-32430(21): Rename Modules/Setup.dist to Modules/Setup, and
     remove the necessity to copy the former manually to the latter when
     updating the local source tree.

   - bpo-30345(22): Add -g to LDFLAGS when compiling with LTO to get
     debug symbols.

   - bpo-5755(23): Move ‘-Wstrict-prototypes’ option to ‘CFLAGS_NODIST’
     from ‘OPT’.  This option emitted annoying warnings when building
     extension modules written in C++.

   - bpo-33614(24): Ensures module definition files for the stable ABI
     on Windows are correctly regenerated.

   - bpo-33648(25): The –with-c-locale-warning configuration flag has
     been removed.  It has had no effect for about a year.

   - bpo-33522(26): Enable CI builds on Visual Studio Team Services at
     ‘https://python.visualstudio.com/cpython’

   - bpo-33512(27): configure’s check for “long double” has been
     simplified

   - bpo-33483(28): C compiler is now correctly detected from the
     standard environment variables.  –without-gcc and –with-icc options
     have been removed.

   - bpo-33394(29): Enable the verbose build for extension modules, when
     GNU make is passed macros on the command line.

   - bpo-33393(30): Update config.guess and config.sub files.

   - bpo-33377(31): Add new triplets for mips r6 and riscv variants
     (used in extension suffixes).

   - bpo-32232(32): By default, modules configured in ‘Modules/Setup’
     are no longer built with ‘-DPy_BUILD_CORE’.  Instead, modules that
     specifically need that preprocessor definition include it in their
     individual entries.

   - bpo-33182(33): The embedding tests can once again be built with
     clang 6.0

   - bpo-33163(34): Upgrade pip to 9.0.3 and setuptools to v39.0.1.

   - bpo-33012(35): gcc 8 has added a new warning heuristic to detect
     invalid function casts and a stock python build seems to hit that
     warning quite often.  The most common is the cast of a METH_NOARGS
     function (that uses just one argument) to a PyCFunction.  Fix this
     by adding a dummy argument to all functions that implement
     METH_NOARGS.

   - bpo-32898(36): Fix the python debug build when using COUNT_ALLOCS.

   - bpo-29442(37): Replace optparse with argparse in setup.py

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34691

   (2) https://bugs.python.org/issue?@action=redirect&bpo=35683

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35642

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35550

   (5) https://bugs.python.org/issue?@action=redirect&bpo=35499

   (6) https://bugs.python.org/issue?@action=redirect&bpo=35257

   (7) https://bugs.python.org/issue?@action=redirect&bpo=35351

   (8) https://bugs.python.org/issue?@action=redirect&bpo=35139

   (9) https://bugs.python.org/issue?@action=redirect&bpo=35059

   (10) https://bugs.python.org/issue?@action=redirect&bpo=35011

   (11) https://bugs.python.org/issue?@action=redirect&bpo=28015

   (12) https://bugs.python.org/issue?@action=redirect&bpo=34765

   (13) https://bugs.python.org/issue?@action=redirect&bpo=34585

   (14) https://bugs.python.org/issue?@action=redirect&bpo=34710

   (15) https://bugs.python.org/issue?@action=redirect&bpo=34582

   (16) https://bugs.python.org/issue?@action=redirect&bpo=34081

   (17) https://bugs.python.org/issue?@action=redirect&bpo=34555

   (18) https://bugs.python.org/issue?@action=redirect&bpo=33015

   (19) https://bugs.python.org/issue?@action=redirect&bpo=34245

   (20) https://bugs.python.org/issue?@action=redirect&bpo=34121

   (21) https://bugs.python.org/issue?@action=redirect&bpo=32430

   (22) https://bugs.python.org/issue?@action=redirect&bpo=30345

   (23) https://bugs.python.org/issue?@action=redirect&bpo=5755

   (24) https://bugs.python.org/issue?@action=redirect&bpo=33614

   (25) https://bugs.python.org/issue?@action=redirect&bpo=33648

   (26) https://bugs.python.org/issue?@action=redirect&bpo=33522

   (27) https://bugs.python.org/issue?@action=redirect&bpo=33512

   (28) https://bugs.python.org/issue?@action=redirect&bpo=33483

   (29) https://bugs.python.org/issue?@action=redirect&bpo=33394

   (30) https://bugs.python.org/issue?@action=redirect&bpo=33393

   (31) https://bugs.python.org/issue?@action=redirect&bpo=33377

   (32) https://bugs.python.org/issue?@action=redirect&bpo=32232

   (33) https://bugs.python.org/issue?@action=redirect&bpo=33182

   (34) https://bugs.python.org/issue?@action=redirect&bpo=33163

   (35) https://bugs.python.org/issue?@action=redirect&bpo=33012

   (36) https://bugs.python.org/issue?@action=redirect&bpo=32898

   (37) https://bugs.python.org/issue?@action=redirect&bpo=29442


File: python.info,  Node: Windows<52>,  Next: macOS<41>,  Prev: Construção<59>,  Up: Python 3 8 0 alpha 1

1.23.62.7 Windows
.................

   - bpo-35890(1): Fix API calling consistency of GetVersionEx and
     wcstok.

   - bpo-32560(2): The ‘py’ launcher now forwards its ‘STARTUPINFO’
     structure to child processes.

   - bpo-35854(3): Fix EnvBuilder and –symlinks in venv on Windows

   - bpo-35811(4): Avoid propagating venv settings when launching via
     py.exe

   - bpo-35797(5): Fix default executable used by the multiprocessing
     module

   - bpo-35758(6): Allow building on ARM with MSVC.

   - bpo-29734(7): Fix handle leaks in os.stat on Windows.

   - bpo-35596(8): Use unchecked PYCs for the embeddable distro to avoid
     zipimport restrictions.

   - bpo-35596(9): Fix vcruntime140.dll being added to embeddable distro
     multiple times.

   - bpo-35402(10): Update Windows build to use Tcl and Tk 8.6.9

   - bpo-35401(11): Updates Windows build to OpenSSL 1.1.0j

   - bpo-34977(12): venv on Windows will now use a python.exe redirector
     rather than copying the actual binaries from the base environment.

   - bpo-34977(13): Adds support for building a Windows App Store
     package

   - bpo-35067(14): Remove _distutils_findvs module and use vswhere.exe
     instead.

   - bpo-32557(15): Allow shutil.disk_usage to take a file path on
     Windows

   - bpo-34770(16): Fix a possible null pointer dereference in
     pyshellext.cpp.

   - bpo-34603(17): Fix returning structs from functions produced by
     MSVC

   - bpo-34581(18): Guard MSVC-specific code in socketmodule.c with
     ‘#ifdef _MSC_VER’.

   - bpo-34532(19): Fixes exit code of list version arguments for
     py.exe.

   - bpo-34062(20): Fixed the ‘–list’ and ‘–list-paths’ arguments for
     the py.exe launcher

   - bpo-34225(21): Ensure INCLUDE and LIB directories do not end with a
     backslash.

   - bpo-34011(22): A suite of code has been changed which copied across
     DLLs and init.tcl from the running Python location into a venv
     being created.  These copies are needed only when running from a
     Python source build, and the copying code is now only run when that
     is the case, rather than whenever a venv is created.

   - bpo-34006(23): Revert line length limit for Windows help docs.  The
     line-length limit is not needed because the pages appear in a
     separate app rather than on a browser tab.  It can also interact
     badly with the DPI setting.

   - bpo-31546(24): Restore running PyOS_InputHook while waiting for
     user input at the prompt.  The restores integration of interactive
     GUI windows (such as Matplotlib figures) with the prompt on
     Windows.

   - bpo-30237(25): Output error when ReadConsole is canceled by
     CancelSynchronousIo instead of crashing.

   - bpo-33895(26): GIL is released while calling functions that acquire
     Windows loader lock.

   - bpo-33720(27): Reduces maximum marshal recursion depth on release
     builds.

   - bpo-29097(28): Fix bug where ‘datetime.fromtimestamp()’ erroneously
     throws an *note OSError: 417. on Windows for values between 0 and
     86400.  Patch by Ammar Askar.

   - bpo-33316(29): PyThread_release_lock always fails

   - bpo-33184(30): Update Windows installer to use OpenSSL 1.1.0h.

   - bpo-32890(31): Fix usage of GetLastError() instead of errno in
     os.execve() and os.truncate().

   - bpo-33016(32): Fix potential use of uninitialized memory in
     nt._getfinalpathname

   - bpo-32903(33): Fix a memory leak in os.chdir() on Windows if the
     current directory is set to a UNC path.

   - bpo-32901(34): Update Tcl and Tk versions to 8.6.8

   - bpo-31966(35): Fixed WindowsConsoleIO.write() for writing empty
     data.

   - bpo-32409(36): Ensures activate.bat can handle Unicode contents.

   - bpo-32457(37): Improves handling of denormalized executable path
     when launching Python.

   - bpo-32370(38): Use the correct encoding for ipconfig output in the
     uuid module.  Patch by Segev Finer.

   - bpo-29248(39): Fix *note os.readlink(): 926. on Windows, which was
     mistakenly treating the ‘PrintNameOffset’ field of the reparse data
     buffer as a number of characters instead of bytes.  Patch by Craig
     Holmquist and SSE4.

   - bpo-1104(40): Correctly handle string length in
     ‘msilib.SummaryInfo.GetProperty()’ to prevent it from truncating
     the last character.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35890

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32560

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35854

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35811

   (5) https://bugs.python.org/issue?@action=redirect&bpo=35797

   (6) https://bugs.python.org/issue?@action=redirect&bpo=35758

   (7) https://bugs.python.org/issue?@action=redirect&bpo=29734

   (8) https://bugs.python.org/issue?@action=redirect&bpo=35596

   (9) https://bugs.python.org/issue?@action=redirect&bpo=35596

   (10) https://bugs.python.org/issue?@action=redirect&bpo=35402

   (11) https://bugs.python.org/issue?@action=redirect&bpo=35401

   (12) https://bugs.python.org/issue?@action=redirect&bpo=34977

   (13) https://bugs.python.org/issue?@action=redirect&bpo=34977

   (14) https://bugs.python.org/issue?@action=redirect&bpo=35067

   (15) https://bugs.python.org/issue?@action=redirect&bpo=32557

   (16) https://bugs.python.org/issue?@action=redirect&bpo=34770

   (17) https://bugs.python.org/issue?@action=redirect&bpo=34603

   (18) https://bugs.python.org/issue?@action=redirect&bpo=34581

   (19) https://bugs.python.org/issue?@action=redirect&bpo=34532

   (20) https://bugs.python.org/issue?@action=redirect&bpo=34062

   (21) https://bugs.python.org/issue?@action=redirect&bpo=34225

   (22) https://bugs.python.org/issue?@action=redirect&bpo=34011

   (23) https://bugs.python.org/issue?@action=redirect&bpo=34006

   (24) https://bugs.python.org/issue?@action=redirect&bpo=31546

   (25) https://bugs.python.org/issue?@action=redirect&bpo=30237

   (26) https://bugs.python.org/issue?@action=redirect&bpo=33895

   (27) https://bugs.python.org/issue?@action=redirect&bpo=33720

   (28) https://bugs.python.org/issue?@action=redirect&bpo=29097

   (29) https://bugs.python.org/issue?@action=redirect&bpo=33316

   (30) https://bugs.python.org/issue?@action=redirect&bpo=33184

   (31) https://bugs.python.org/issue?@action=redirect&bpo=32890

   (32) https://bugs.python.org/issue?@action=redirect&bpo=33016

   (33) https://bugs.python.org/issue?@action=redirect&bpo=32903

   (34) https://bugs.python.org/issue?@action=redirect&bpo=32901

   (35) https://bugs.python.org/issue?@action=redirect&bpo=31966

   (36) https://bugs.python.org/issue?@action=redirect&bpo=32409

   (37) https://bugs.python.org/issue?@action=redirect&bpo=32457

   (38) https://bugs.python.org/issue?@action=redirect&bpo=32370

   (39) https://bugs.python.org/issue?@action=redirect&bpo=29248

   (40) https://bugs.python.org/issue?@action=redirect&bpo=1104


File: python.info,  Node: macOS<41>,  Next: IDLE<41>,  Prev: Windows<52>,  Up: Python 3 8 0 alpha 1

1.23.62.8 macOS
...............

   - bpo-35401(1): Update macOS installer to use OpenSSL 1.1.0j.

   - bpo-35025(2): Properly guard the use of the ‘CLOCK_GETTIME’ et al.
     macros in ‘timemodule’ on macOS.

   - bpo-24658(3): On macOS, fix reading from and writing into a file
     with a size larger than 2 GiB.

   - bpo-34405(4): Update to OpenSSL 1.1.0i for macOS installer builds.

   - bpo-33635(5): In macOS stat on some file descriptors (/dev/fd/3
     f.e) will result in bad file descriptor OSError.  Guard against
     this exception was added in is_dir, is_file and similar methods.
     DirEntry.is_dir can also throw this exception so
     _RecursiveWildcardSelector._iterate_directories was also extended
     with the same error ignoring pattern.

   - bpo-13631(6): The .editrc file in user’s home directory is now
     processed correctly during the readline initialization through
     editline emulation on macOS.

   - bpo-33184(7): Update macOS installer build to use OpenSSL 1.1.0h.

   - bpo-32726(8): Build and link with private copy of Tcl/Tk 8.6 for
     the macOS 10.6+ installer.  The 10.9+ installer variant already
     does this.  This means that the Python 3.7 provided by the
     python.org macOS installers no longer need or use any external
     versions of Tcl/Tk, either system-provided or user-installed, such
     as ActiveTcl.

   - bpo-32901(9): Update macOS 10.9+ installer to Tcl/Tk 8.6.8.

   - bpo-31903(10): In ‘_scproxy’, drop the GIL when calling into
     ‘SystemConfiguration’ to avoid deadlocks.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35401

   (2) https://bugs.python.org/issue?@action=redirect&bpo=35025

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24658

   (4) https://bugs.python.org/issue?@action=redirect&bpo=34405

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33635

   (6) https://bugs.python.org/issue?@action=redirect&bpo=13631

   (7) https://bugs.python.org/issue?@action=redirect&bpo=33184

   (8) https://bugs.python.org/issue?@action=redirect&bpo=32726

   (9) https://bugs.python.org/issue?@action=redirect&bpo=32901

   (10) https://bugs.python.org/issue?@action=redirect&bpo=31903


File: python.info,  Node: IDLE<41>,  Next: Ferramentas/Demos<30>,  Prev: macOS<41>,  Up: Python 3 8 0 alpha 1

1.23.62.9 IDLE
..............

   - bpo-35770(1): IDLE macosx deletes Options => Configure IDLE. It
     previously deleted Window => Zoom Height by mistake.  (Zoom Height
     is now on the Options menu).  On Mac, the settings dialog is
     accessed via Preferences on the IDLE menu.

   - bpo-35769(2): Change IDLE’s new file name from ‘Untitled’ to
     ‘untitled’

   - bpo-35660(3): Fix imports in idlelib.window.

   - bpo-35641(4): Proper format ‘calltip’ when the function has no
     docstring.

   - bpo-33987(5): Use ttk Frame for ttk widgets.

   - bpo-34055(6): Fix erroneous ‘smart’ indents and newlines in IDLE
     Shell.

   - bpo-35591(7): Find Selection now works when selection not found.

   - bpo-35196(8): Speed up squeezer line counting.

   - bpo-35598(9): Update config_key: use PEP 8 names and ttk widgets,
     make some objects global, and add tests.

   - bpo-28097(10): Add Previous/Next History entries to Shell menu.

   - bpo-35208(11): Squeezer now properly counts wrapped lines before
     newlines.

   - bpo-35555(12): Gray out Code Context menu entry when it’s not
     applicable.

   - bpo-35521(13): Document the IDLE editor code context feature.  Add
     some internal references within the IDLE doc.

   - bpo-22703(14): The Code Context menu label now toggles between
     Show/Hide Code Context.  The Zoom Height menu now toggles between
     Zoom/Restore Height.  Zoom Height has moved from the Window menu to
     the Options menu.

   - bpo-35213(15): Where appropriate, use ‘macOS’ in idlelib.

   - bpo-34864(16): On macOS, warn if the system preference “Prefer tabs
     when opening documents” is set to “Always”.

   - bpo-34864(17): Document two IDLE on MacOS issues.  The System
     Preferences Dock “prefer tabs always” setting disables some IDLE
     features.  Menus are a bit different than as described for Windows
     and Linux.

   - bpo-35202(18): Remove unused imports from lib/idlelib

   - bpo-33000(19): Document that IDLE’s shell has no line limit.  A
     program that runs indefinitely can overfill memory.

   - bpo-23220(20): Explain how IDLE’s Shell displays output.

   - bpo-35099(21): Improve the doc about IDLE running user code.  The
     section is renamed from “IDLE – console differences” is renamed
     “Running user code”.  It mostly covers the implications of using
     custom ‘sys.stdXXX’ objects.

   - bpo-35097(22): Add IDLE doc subsection explaining editor windows.
     Topics include opening, title and status bar, .py* extension, and
     running.

   - bpo-35093(23): Document the IDLE document viewer in the IDLE doc.
     Add a paragraph in “Help and preferences”, “Help sources”
     subsection.

   - bpo-35088(24): Update idlelib.help.copy_string docstring.  We now
     use git and backporting instead of hg and forward merging.

   - bpo-35087(25): Update idlelib help files for the current doc build.
     The main change is the elimination of chapter-section numbers.

   - bpo-34548(26): Use configured color theme for read-only text views.

   - bpo-1529353(27): Enable “squeezing” of long outputs in the shell,
     to avoid performance degradation and to clean up the history
     without losing it.  Squeezed outputs may be copied, viewed in a
     separate window, and “unsqueezed”.

   - bpo-34047(28): Fixed mousewheel scrolling direction on macOS.

   - bpo-34275(29): Make IDLE calltips always visible on Mac.  Some
     MacOS-tk combinations need .update_idletasks().  Patch by Kevin
     Walzer.

   - bpo-34120(30): Fix unresponsiveness after closing certain windows
     and dialogs.

   - bpo-33975(31): Avoid small type when running htests.  Since part of
     the purpose of human-viewed tests is to determine that widgets look
     right, it is important that they look the same for testing as when
     running IDLE.

   - bpo-33905(32): Add test for idlelib.stackview.StackBrowser.

   - bpo-33924(33): Change mainmenu.menudefs key ‘windows’ to ‘window’.
     Every other menudef key is lowercase version of main menu entry.

   - bpo-33906(34): Rename idlelib.windows as window Match Window on the
     main menu and remove last plural module name.

   - bpo-33917(35): Fix and document idlelib/idle_test/template.py.  The
     revised file compiles, runs, and tests OK. idle_test/README.txt
     explains how to use it to create new IDLE test files.

   - bpo-33904(36): IDLE: In rstrip, rename class RstripExtension as
     Rstrip

   - bpo-33907(37): For consistency and clarity, rename an IDLE module
     and classes.  Module calltips and its class CallTips are now
     calltip and Calltip.  In module calltip_w, class CallTip is now
     CalltipWindow.

   - bpo-33856(38): Add “help” in the welcome message of IDLE

   - bpo-33839(39): IDLE: refactor ToolTip and CallTip and add
     documentation and tests

   - bpo-33855(40): Minimally test all IDLE modules.  Add missing files,
     import module, instantiate classes, and check coverage.  Check
     existing files.

   - bpo-33656(41): On Windows, add API call saying that tk scales for
     DPI. On Windows 8.1+ or 10, with DPI compatibility properties of
     the Python binary unchanged, and a monitor resolution greater than
     96 DPI, this should make text and lines sharper.  It should
     otherwise have no effect.

   - bpo-33768(42): Clicking on a context line moves that line to the
     top of the editor window.

   - bpo-33763(43): IDLE: Use read-only text widget for code context
     instead of label widget.

   - bpo-33664(44): Scroll IDLE editor text by lines.  Previously, the
     mouse wheel and scrollbar slider moved text by a fixed number of
     pixels, resulting in partial lines at the top of the editor box.
     The change also applies to the shell and grep output windows, but
     not to read-only text views.

   - bpo-33679(45): Enable theme-specific color configuration for Code
     Context.  Use the Highlights tab to see the setting for built-in
     themes or add settings to custom themes.

   - bpo-33642(46): Display up to maxlines non-blank lines for Code
     Context.  If there is no current context, show a single blank line.

   - bpo-33628(47): IDLE: Cleanup codecontext.py and its test.

   - bpo-33564(48): IDLE’s code context now recognizes async as a block
     opener.

   - bpo-21474(49): Update word/identifier definition from ascii to
     unicode.  In text and entry boxes, this affects selection by
     double-click, movement left/right by control-left/right, and
     deletion left/right by control-BACKSPACE/DEL.

   - bpo-33204(50): IDLE: consistently color invalid string prefixes.  A
     ‘u’ string prefix cannot be paired with either ‘r’ or ‘f’.
     Consistently color as much of the prefix, starting at the right, as
     is valid.  Revise and extend colorizer test.

   - bpo-32984(51): Set ‘__file__’ while running a startup file.  Like
     Python, IDLE optionally runs one startup file in the Shell window
     before presenting the first interactive input prompt.  For IDLE,
     ‘-s’ runs a file named in environmental variable ‘IDLESTARTUP’ or
     *note PYTHONSTARTUP: ffe.; ‘-r file’ runs ‘file’.  Python sets
     ‘__file__’ to the startup file name before running the file and
     unsets it before the first prompt.  IDLE now does the same when run
     normally, without the ‘-n’ option.

   - bpo-32940(52): Simplify and rename StringTranslatePseudoMapping in
     pyparse.

   - bpo-32916(53): Change ‘str’ to ‘code’ in pyparse.

   - bpo-32905(54): Remove unused code in pyparse module.

   - bpo-32874(55): Add tests for pyparse.

   - bpo-32837(56): Using the system and place-dependent default
     encoding for open() is a bad idea for IDLE’s system and
     location-independent files.

   - bpo-32826(57): Add “encoding=utf-8” to open() in IDLE’s
     test_help_about.  GUI test test_file_buttons() only looks at
     initial ascii-only lines, but failed on systems where open()
     defaults to ‘ascii’ because readline() internally reads and decodes
     far enough ahead to encounter a non-ascii character in CREDITS.txt.

   - bpo-32831(58): Add docstrings and tests for codecontext.

   - bpo-32765(59): Update configdialog General tab docstring to add new
     widgets to the widget list.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35770

   (2) https://bugs.python.org/issue?@action=redirect&bpo=35769

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35660

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35641

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33987

   (6) https://bugs.python.org/issue?@action=redirect&bpo=34055

   (7) https://bugs.python.org/issue?@action=redirect&bpo=35591

   (8) https://bugs.python.org/issue?@action=redirect&bpo=35196

   (9) https://bugs.python.org/issue?@action=redirect&bpo=35598

   (10) https://bugs.python.org/issue?@action=redirect&bpo=28097

   (11) https://bugs.python.org/issue?@action=redirect&bpo=35208

   (12) https://bugs.python.org/issue?@action=redirect&bpo=35555

   (13) https://bugs.python.org/issue?@action=redirect&bpo=35521

   (14) https://bugs.python.org/issue?@action=redirect&bpo=22703

   (15) https://bugs.python.org/issue?@action=redirect&bpo=35213

   (16) https://bugs.python.org/issue?@action=redirect&bpo=34864

   (17) https://bugs.python.org/issue?@action=redirect&bpo=34864

   (18) https://bugs.python.org/issue?@action=redirect&bpo=35202

   (19) https://bugs.python.org/issue?@action=redirect&bpo=33000

   (20) https://bugs.python.org/issue?@action=redirect&bpo=23220

   (21) https://bugs.python.org/issue?@action=redirect&bpo=35099

   (22) https://bugs.python.org/issue?@action=redirect&bpo=35097

   (23) https://bugs.python.org/issue?@action=redirect&bpo=35093

   (24) https://bugs.python.org/issue?@action=redirect&bpo=35088

   (25) https://bugs.python.org/issue?@action=redirect&bpo=35087

   (26) https://bugs.python.org/issue?@action=redirect&bpo=34548

   (27) https://bugs.python.org/issue?@action=redirect&bpo=1529353

   (28) https://bugs.python.org/issue?@action=redirect&bpo=34047

   (29) https://bugs.python.org/issue?@action=redirect&bpo=34275

   (30) https://bugs.python.org/issue?@action=redirect&bpo=34120

   (31) https://bugs.python.org/issue?@action=redirect&bpo=33975

   (32) https://bugs.python.org/issue?@action=redirect&bpo=33905

   (33) https://bugs.python.org/issue?@action=redirect&bpo=33924

   (34) https://bugs.python.org/issue?@action=redirect&bpo=33906

   (35) https://bugs.python.org/issue?@action=redirect&bpo=33917

   (36) https://bugs.python.org/issue?@action=redirect&bpo=33904

   (37) https://bugs.python.org/issue?@action=redirect&bpo=33907

   (38) https://bugs.python.org/issue?@action=redirect&bpo=33856

   (39) https://bugs.python.org/issue?@action=redirect&bpo=33839

   (40) https://bugs.python.org/issue?@action=redirect&bpo=33855

   (41) https://bugs.python.org/issue?@action=redirect&bpo=33656

   (42) https://bugs.python.org/issue?@action=redirect&bpo=33768

   (43) https://bugs.python.org/issue?@action=redirect&bpo=33763

   (44) https://bugs.python.org/issue?@action=redirect&bpo=33664

   (45) https://bugs.python.org/issue?@action=redirect&bpo=33679

   (46) https://bugs.python.org/issue?@action=redirect&bpo=33642

   (47) https://bugs.python.org/issue?@action=redirect&bpo=33628

   (48) https://bugs.python.org/issue?@action=redirect&bpo=33564

   (49) https://bugs.python.org/issue?@action=redirect&bpo=21474

   (50) https://bugs.python.org/issue?@action=redirect&bpo=33204

   (51) https://bugs.python.org/issue?@action=redirect&bpo=32984

   (52) https://bugs.python.org/issue?@action=redirect&bpo=32940

   (53) https://bugs.python.org/issue?@action=redirect&bpo=32916

   (54) https://bugs.python.org/issue?@action=redirect&bpo=32905

   (55) https://bugs.python.org/issue?@action=redirect&bpo=32874

   (56) https://bugs.python.org/issue?@action=redirect&bpo=32837

   (57) https://bugs.python.org/issue?@action=redirect&bpo=32826

   (58) https://bugs.python.org/issue?@action=redirect&bpo=32831

   (59) https://bugs.python.org/issue?@action=redirect&bpo=32765


File: python.info,  Node: Ferramentas/Demos<30>,  Next: API C<55>,  Prev: IDLE<41>,  Up: Python 3 8 0 alpha 1

1.23.62.10 Ferramentas/Demos
............................

   - bpo-35884(1): Add a benchmark script for timing various ways to
     access variables: ‘Tools/scripts/var_access_benchmark.py’.

   - bpo-34989(2): python-gdb.py now handles errors on computing the
     line number of a Python frame.

   - bpo-20260(3): Argument Clinic now has non-bitwise unsigned int
     converters.

   - bpo-32962(4): python-gdb now catches ‘UnicodeDecodeError’
     exceptions when calling ‘string()’.

   - bpo-32962(5): python-gdb now catches ValueError on read_var(): when
     Python has no debug symbols for example.

   - bpo-33189(6): ‘pygettext.py’ now recognizes only literal strings as
     docstrings and translatable strings, and rejects bytes literals and
     f-string expressions.

   - bpo-31920(7): Fixed handling directories as arguments in the
     ‘pygettext’ script.  Based on patch by Oleg Krasnikov.

   - bpo-29673(8): Fix pystackv and pystack gdbinit macros.

   - bpo-25427(9): Remove the pyvenv script in favor of ‘python3 -m
     venv’ in order to lower confusion as to what Python interpreter a
     virtual environment will be created for.

   - bpo-32885(10): Add an ‘-n’ flag for ‘Tools/scripts/pathfix.py’ to
     disable automatic backup creation (files with ‘~’ suffix).

   - bpo-32222(11): Fix pygettext not extracting docstrings for
     functions with type annotated arguments.  Patch by Toby Harradine.

   - bpo-31583(12): Fix 2to3 for using with –add-suffix option but
     without –output-dir option for relative path to files in current
     directory.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35884

   (2) https://bugs.python.org/issue?@action=redirect&bpo=34989

   (3) https://bugs.python.org/issue?@action=redirect&bpo=20260

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32962

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32962

   (6) https://bugs.python.org/issue?@action=redirect&bpo=33189

   (7) https://bugs.python.org/issue?@action=redirect&bpo=31920

   (8) https://bugs.python.org/issue?@action=redirect&bpo=29673

   (9) https://bugs.python.org/issue?@action=redirect&bpo=25427

   (10) https://bugs.python.org/issue?@action=redirect&bpo=32885

   (11) https://bugs.python.org/issue?@action=redirect&bpo=32222

   (12) https://bugs.python.org/issue?@action=redirect&bpo=31583


File: python.info,  Node: API C<55>,  Prev: Ferramentas/Demos<30>,  Up: Python 3 8 0 alpha 1

1.23.62.11 API C
................

   - bpo-35713(1): The ‘PyByteArray_Init()’ and ‘PyByteArray_Fini()’
     functions have been removed.  They did nothing since Python 2.7.4
     and Python 3.2.0, were excluded from the limited API (stable ABI),
     and were not documented.

   - bpo-33817(2): Fixed *note _PyBytes_Resize(): 1745. for empty bytes
     objects.

   - bpo-35322(3): Fix memory leak in *note PyUnicode_EncodeLocale():
     be3. and *note PyUnicode_EncodeFSDefault(): 1bca. on error
     handling.

   - bpo-35059(4): The following C macros have been converted to static
     inline functions: *note Py_INCREF(): 56e, *note Py_DECREF(): 56f,
     *note Py_XINCREF(): a6e, *note Py_XDECREF(): 78f, *note
     PyObject_INIT(): 1acb, *note PyObject_INIT_VAR(): 1acc.

   - bpo-35296(5): ‘make install’ now also installs the internal API:
     ‘Include/internal/*.h’ header files.

   - bpo-35081(6): Internal APIs surrounded by ‘#ifdef Py_BUILD_CORE’
     have been moved from ‘Include/*.h’ headers to new header files
     ‘Include/internal/pycore_*.h’.

   - bpo-35259(7): Conditionally declare *note Py_FinalizeEx(): d37.
     (new in 3.6) based on Py_LIMITED_API. Patch by Arthur Neufeld.

   - bpo-35081(8): The ‘_PyObject_GC_TRACK()’ and
     ‘_PyObject_GC_UNTRACK()’ macros have been removed from the public C
     API.

   - bpo-35134(9): Creation of a new ‘Include/cpython/’ subdirectory.

   - bpo-34725(10): Adds _Py_SetProgramFullPath so embedders may
     override sys.executable

   - bpo-34910(11): Ensure that *note PyObject_Print(): 16dc. always
     returns ‘-1’ on error.  Patch by Zackery Spytz.

   - bpo-34523(12): Py_DecodeLocale() and Py_EncodeLocale() now use the
     UTF-8 encoding on Windows if Py_LegacyWindowsFSEncodingFlag is
     zero.

   - bpo-34193(13): Fix pluralization in TypeError messages in getargs.c
     and typeobject.c: ‘1 argument’ instead of ‘1 arguments’ and ‘1
     element’ instead of ‘1 elements’.

   - bpo-34127(14): Return grammatically correct error message based on
     argument count.  Patch by Karthikeyan Singaravelan.

   - bpo-23927(15): Fixed *note SystemError: 575. in *note
     PyArg_ParseTupleAndKeywords(): 383. when the ‘w*’ format unit is
     used for optional parameter.

   - bpo-32455(16): Added *note PyCompile_OpcodeStackEffectWithJump():
     1bcb.

   - bpo-34008(17): Py_Main() can again be called after Py_Initialize(),
     as in Python 3.6.

   - bpo-32500(18): Fixed error messages for *note PySequence_Size():
     1bcc, *note PySequence_GetItem(): 1bcd, *note PySequence_SetItem():
     1bce. and *note PySequence_DelItem(): 1bcf. called with a mapping
     and *note PyMapping_Size(): 1bd0. called with a sequence.

   - bpo-33818(19): *note PyExceptionClass_Name(): a6f. will now return
     ‘const char *’ instead of ‘char *’.

   - bpo-33042(20): Embedding applications may once again call
     PySys_ResetWarnOptions, PySys_AddWarnOption, and PySys_AddXOption
     prior to calling Py_Initialize.

   - bpo-32374(21): Document that m_traverse for multi-phase initialized
     modules can be called with m_state=NULL, and add a sanity check

   - bpo-30863(22): *note PyUnicode_AsWideChar(): 1bd1. and *note
     PyUnicode_AsWideCharString(): 8c1. no longer cache the ‘wchar_t*’
     representation of string objects.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=35713

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33817

   (3) https://bugs.python.org/issue?@action=redirect&bpo=35322

   (4) https://bugs.python.org/issue?@action=redirect&bpo=35059

   (5) https://bugs.python.org/issue?@action=redirect&bpo=35296

   (6) https://bugs.python.org/issue?@action=redirect&bpo=35081

   (7) https://bugs.python.org/issue?@action=redirect&bpo=35259

   (8) https://bugs.python.org/issue?@action=redirect&bpo=35081

   (9) https://bugs.python.org/issue?@action=redirect&bpo=35134

   (10) https://bugs.python.org/issue?@action=redirect&bpo=34725

   (11) https://bugs.python.org/issue?@action=redirect&bpo=34910

   (12) https://bugs.python.org/issue?@action=redirect&bpo=34523

   (13) https://bugs.python.org/issue?@action=redirect&bpo=34193

   (14) https://bugs.python.org/issue?@action=redirect&bpo=34127

   (15) https://bugs.python.org/issue?@action=redirect&bpo=23927

   (16) https://bugs.python.org/issue?@action=redirect&bpo=32455

   (17) https://bugs.python.org/issue?@action=redirect&bpo=34008

   (18) https://bugs.python.org/issue?@action=redirect&bpo=32500

   (19) https://bugs.python.org/issue?@action=redirect&bpo=33818

   (20) https://bugs.python.org/issue?@action=redirect&bpo=33042

   (21) https://bugs.python.org/issue?@action=redirect&bpo=32374

   (22) https://bugs.python.org/issue?@action=redirect&bpo=30863


File: python.info,  Node: Python 3 7 0 final,  Next: Python 3 7 0 release candidate 1,  Prev: Python 3 8 0 alpha 1,  Up: Changelog

1.23.63 Python 3.7.0 final
--------------------------

'Data de lançamento: 2018-06-27'

* Menu:

* Biblioteca: Biblioteca<138>.
* API C: API C<56>.


File: python.info,  Node: Biblioteca<138>,  Next: API C<56>,  Up: Python 3 7 0 final

1.23.63.1 Biblioteca
....................

   - bpo-33851(1): Fix *note ast.get_docstring(): 1bd4. for a node that
     lacks a docstring.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33851


File: python.info,  Node: API C<56>,  Prev: Biblioteca<138>,  Up: Python 3 7 0 final

1.23.63.2 API C
...............

   - bpo-33932(1): Calling Py_Initialize() twice does nothing, instead
     of failing with a fatal error: restore the Python 3.6 behaviour.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33932


File: python.info,  Node: Python 3 7 0 release candidate 1,  Next: Python 3 7 0 beta 5,  Prev: Python 3 7 0 final,  Up: Changelog

1.23.64 Python 3.7.0 release candidate 1
----------------------------------------

'Data de lançamento: 2018-06-12'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<136>.
* Biblioteca: Biblioteca<139>.
* Documentação: Documentação<53>.
* Construção: Construção<60>.
* Windows: Windows<53>.
* IDLE: IDLE<42>.


File: python.info,  Node: Núcleo e embutidos<136>,  Next: Biblioteca<139>,  Up: Python 3 7 0 release candidate 1

1.23.64.1 Núcleo e embutidos
............................

   - bpo-33803(1): Fix a crash in hamt.c caused by enabling GC tracking
     for an object that hadn’t all of its fields set to NULL.

   - bpo-33706(2): Fix a crash in Python initialization when parsing the
     command line options.  Thanks Christoph Gohlke for the bug report
     and the fix!

   - bpo-30654(3): Fixed reset of the SIGINT handler to SIG_DFL on
     interpreter shutdown even when there was a custom handler set
     previously.  Patch by Philipp Kerling.

   - bpo-31849(4): Fix signed/unsigned comparison warning in pyhash.c.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33803

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33706

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30654

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31849


File: python.info,  Node: Biblioteca<139>,  Next: Documentação<53>,  Prev: Núcleo e embutidos<136>,  Up: Python 3 7 0 release candidate 1

1.23.64.2 Biblioteca
....................

   - bpo-30167(1): Prevent site.main() exception if PYTHONSTARTUP is
     set.  Patch by Steve Weber.

   - bpo-33812(2): Datetime instance d with non-None tzinfo, but with
     d.tzinfo.utcoffset(d) returning None is now treated as naive by the
     astimezone() method.

   - bpo-30805(3): Avoid race condition with debug logging

   - bpo-33694(4): asyncio: Fix a race condition causing data loss on
     pause_reading()/resume_reading() when using the ProactorEventLoop.

   - bpo-32493(5): Correct test for ‘uuid_enc_be’ availability in
     ‘configure.ac’.  Patch by Michael Felt.

   - bpo-33792(6): Add asyncio.WindowsSelectorEventLoopPolicy and
     asyncio.WindowsProactorEventLoopPolicy.

   - bpo-33778(7): Update ‘unicodedata’’s database to Unicode version
     11.0.0.

   - bpo-33770(8): improve base64 exception message for encoded inputs
     of invalid length

   - bpo-33769(9): asyncio/start_tls: Fix error message; cancel
     callbacks in case of an unhandled error; mark SSLTransport as
     closed if it is aborted.

   - bpo-33767(10): The concatenation (‘+’) and repetition (‘*’)
     sequence operations now raise *note TypeError: 2c3. instead of
     *note SystemError: 575. when performed on *note mmap.mmap: 20b.
     objects.  Patch by Zackery Spytz.

   - bpo-33734(11): asyncio/ssl: Fix AttributeError, increase default
     handshake timeout

   - bpo-11874(12): Use a better regex when breaking usage into
     wrappable parts.  Avoids bogus assertion errors from custom metavar
     strings.

   - bpo-33582(13): Emit a deprecation warning for inspect.formatargspec

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30167

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33812

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30805

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33694

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32493

   (6) https://bugs.python.org/issue?@action=redirect&bpo=33792

   (7) https://bugs.python.org/issue?@action=redirect&bpo=33778

   (8) https://bugs.python.org/issue?@action=redirect&bpo=33770

   (9) https://bugs.python.org/issue?@action=redirect&bpo=33769

   (10) https://bugs.python.org/issue?@action=redirect&bpo=33767

   (11) https://bugs.python.org/issue?@action=redirect&bpo=33734

   (12) https://bugs.python.org/issue?@action=redirect&bpo=11874

   (13) https://bugs.python.org/issue?@action=redirect&bpo=33582


File: python.info,  Node: Documentação<53>,  Next: Construção<60>,  Prev: Biblioteca<139>,  Up: Python 3 7 0 release candidate 1

1.23.64.3 Documentação
......................

   - bpo-33409(1): Clarified the relationship between PEP 538(2)’s
     PYTHONCOERCECLOCALE and PEP 540’s PYTHONUTF8 mode.

   - bpo-33736(3): Improve the documentation of *note
     asyncio.open_connection(): b2b, *note asyncio.start_server(): b2c.
     and their UNIX socket counterparts.

   - bpo-31432(4): Clarify meaning of CERT_NONE, CERT_OPTIONAL, and
     CERT_REQUIRED flags for ssl.SSLContext.verify_mode.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33409

   (2) https://peps.python.org/pep-0538/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33736

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31432


File: python.info,  Node: Construção<60>,  Next: Windows<53>,  Prev: Documentação<53>,  Up: Python 3 7 0 release candidate 1

1.23.64.4 Construção
....................

   - bpo-5755(1): Move ‘-Wstrict-prototypes’ option to ‘CFLAGS_NODIST’
     from ‘OPT’.  This option emitted annoying warnings when building
     extension modules written in C++.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5755


File: python.info,  Node: Windows<53>,  Next: IDLE<42>,  Prev: Construção<60>,  Up: Python 3 7 0 release candidate 1

1.23.64.5 Windows
.................

   - bpo-33720(1): Reduces maximum marshal recursion depth on release
     builds.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33720


File: python.info,  Node: IDLE<42>,  Prev: Windows<53>,  Up: Python 3 7 0 release candidate 1

1.23.64.6 IDLE
..............

   - bpo-33656(1): On Windows, add API call saying that tk scales for
     DPI. On Windows 8.1+ or 10, with DPI compatibility properties of
     the Python binary unchanged, and a monitor resolution greater than
     96 DPI, this should make text and lines sharper.  It should
     otherwise have no effect.

   - bpo-33768(2): Clicking on a context line moves that line to the top
     of the editor window.

   - bpo-33763(3): IDLE: Use read-only text widget for code context
     instead of label widget.

   - bpo-33664(4): Scroll IDLE editor text by lines.  Previously, the
     mouse wheel and scrollbar slider moved text by a fixed number of
     pixels, resulting in partial lines at the top of the editor box.
     The change also applies to the shell and grep output windows, but
     not to read-only text views.

   - bpo-33679(5): Enable theme-specific color configuration for Code
     Context.  Use the Highlights tab to see the setting for built-in
     themes or add settings to custom themes.

   - bpo-33642(6): Display up to maxlines non-blank lines for Code
     Context.  If there is no current context, show a single blank line.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33656

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33768

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33763

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33664

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33679

   (6) https://bugs.python.org/issue?@action=redirect&bpo=33642


File: python.info,  Node: Python 3 7 0 beta 5,  Next: Python 3 7 0 beta 4,  Prev: Python 3 7 0 release candidate 1,  Up: Changelog

1.23.65 Python 3.7.0 beta 5
---------------------------

'Data de lançamento: 2018-05-30'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<137>.
* Biblioteca: Biblioteca<140>.
* Documentação: Documentação<54>.
* Testes: Testes<56>.
* Construção: Construção<61>.
* macOS: macOS<42>.
* IDLE: IDLE<43>.


File: python.info,  Node: Núcleo e embutidos<137>,  Next: Biblioteca<140>,  Up: Python 3 7 0 beta 5

1.23.65.1 Núcleo e embutidos
............................

   - bpo-33622(1): Fixed a leak when the garbage collector fails to add
     an object with the ‘__del__’ method or referenced by it into the
     *note gc.garbage: 1201. list.  *note PyGC_Collect(): 995. can now
     be called when an exception is set and preserves it.

   - bpo-33509(2): Fix module_globals parameter of
     warnings.warn_explicit(): don’t crash if module_globals is not a
     dict.

   - bpo-20104(3): The new ‘os.posix_spawn’ added in 3.7.0b1 was removed
     as we are still working on what the API should look like.  Expect
     this in 3.8 instead.

   - bpo-33475(4): Fixed miscellaneous bugs in converting annotations to
     strings and optimized parentheses in the string representation.

   - bpo-33391(5): Fix a leak in set_symmetric_difference().

   - bpo-28055(6): Fix unaligned accesses in siphash24().  Patch by Rolf
     Eike Beer.

   - bpo-32911(7): Due to unexpected compatibility issues discovered
     during downstream beta testing, reverted bpo-29463(8).  ‘docstring’
     field is removed from Module, ClassDef, FunctionDef, and
     AsyncFunctionDef ast nodes which was added in 3.7a1.  Docstring
     expression is restored as a first statement in their body.  Based
     on patch by Inada Naoki.

   - bpo-21983(9): Fix a crash in ‘ctypes.cast()’ in case the type
     argument is a ctypes structured data type.  Patch by Eryk Sun and
     Oren Milman.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33622

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33509

   (3) https://bugs.python.org/issue?@action=redirect&bpo=20104

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33475

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33391

   (6) https://bugs.python.org/issue?@action=redirect&bpo=28055

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32911

   (8) https://bugs.python.org/issue?@action=redirect&bpo=29463

   (9) https://bugs.python.org/issue?@action=redirect&bpo=21983


File: python.info,  Node: Biblioteca<140>,  Next: Documentação<54>,  Prev: Núcleo e embutidos<137>,  Up: Python 3 7 0 beta 5

1.23.65.2 Biblioteca
....................

   - bpo-32751(1): When cancelling the task due to a timeout, *note
     asyncio.wait_for(): 5ff. will now wait until the cancellation is
     complete.

   - bpo-32684(2): Fix gather to propagate cancellation of itself even
     with return_exceptions.

   - bpo-33654(3): Support protocol type switching in
     SSLTransport.set_protocol().

   - bpo-33674(4): Pause the transport as early as possible to further
     reduce the risk of data_received() being called before
     connection_made().

   - bpo-33674(5): Fix a race condition in SSLProtocol.connection_made()
     of asyncio.sslproto: start immediately the handshake instead of
     using call_soon().  Previously, data_received() could be called
     before the handshake started, causing the handshake to hang or
     fail.

   - bpo-31647(6): Fixed bug where calling write_eof() on a
     _SelectorSocketTransport after it’s already closed raises
     AttributeError.

   - bpo-32610(7): Make asyncio.all_tasks() return only pending tasks.

   - bpo-32410(8): Avoid blocking on file IO in sendfile fallback code

   - bpo-33469(9): Fix RuntimeError after closing loop that used
     run_in_executor

   - bpo-33672(10): Fix Task.__repr__ crash with Cython’s bogus
     coroutines

   - bpo-33654(11): Fix transport.set_protocol() to support switching
     between asyncio.Protocol and asyncio.BufferedProtocol.  Fix
     loop.start_tls() to work with asyncio.BufferedProtocols.

   - bpo-33652(12): Pickles of type variables and subscripted generics
     are now future-proof and compatible with older Python versions.

   - bpo-32493(13): Fixed *note uuid.uuid1(): bc0. on FreeBSD.

   - bpo-33618(14): Finalize and document preliminary and experimental
     TLS 1.3 support with OpenSSL 1.1.1

   - bpo-33623(15): Fix possible SIGSGV when asyncio.Future is created
     in __del__

   - bpo-30877(16): Fixed a bug in the Python implementation of the JSON
     decoder that prevented the cache of parsed strings from clearing
     after finishing the decoding.  Based on patch by c-fos.

   - bpo-33570(17): Change TLS 1.3 cipher suite settings for
     compatibility with OpenSSL 1.1.1-pre6 and newer.  OpenSSL 1.1.1
     will have TLS 1.3 ciphers enabled by default.

   - bpo-28556(18): Do not simplify arguments to ‘typing.Union’.  Now
     ‘Union[Manager, Employee]’ is not simplified to ‘Employee’ at
     runtime.  Such simplification previously caused several bugs and
     limited possibilities for introspection.

   - bpo-33540(19): Add a new ‘block_on_close’ class attribute to
     ‘ForkingMixIn’ and ‘ThreadingMixIn’ classes of *note socketserver:
     cd.

   - bpo-33548(20): tempfile._candidate_tempdir_list should consider
     common TEMP locations

   - bpo-33109(21): argparse subparsers are once again not required by
     default, reverting the change in behavior introduced by
     bpo-26510(22) in 3.7.0a2.

   - bpo-33536(23): dataclasses.make_dataclass now checks for invalid
     field names and duplicate fields.  Also, added a check for invalid
     field specifications.

   - bpo-33542(24): Prevent ‘uuid.get_node’ from using a DUID instead of
     a MAC on Windows.  Patch by Zvi Effron

   - bpo-26819(25): Fix race condition with
     ‘ReadTransport.resume_reading’ in Windows proactor event loop.

   - Fix failure in ‘typing.get_type_hints()’ when ClassVar was provided
     as a string forward reference.

   - bpo-33505(26): Optimize asyncio.ensure_future() by reordering if
     checks: 1.17x faster.

   - bpo-33497(27): Add errors param to cgi.parse_multipart and make an
     encoding in FieldStorage use the given errors (needed for Twisted).
     Patch by Amber Brown.

   - bpo-33495(28): Change dataclasses.Fields repr to use the repr of
     each of its members, instead of str.  This makes it more clear what
     each field actually represents.  This is especially true for the
     ‘type’ member.

   - bpo-33453(29): Fix dataclasses to work if using literal string type
     annotations or if using PEP 563 “Postponed Evaluation of
     Annotations”.  Only specific string prefixes are detected for both
     ClassVar (“ClassVar” and “typing.ClassVar”) and InitVar (“InitVar”
     and “dataclasses.InitVar”).

   - bpo-28556(30): Minor fixes in typing module: add annotations to
     ‘NamedTuple.__new__’, pass ‘*args’ and ‘**kwds’ in
     ‘Generic.__new__’.  Original PRs by Paulius Šarka and Chad
     Dombrova.

   - bpo-20087(31): Updated alias mapping with glibc 2.27 supported
     locales.

   - bpo-33422(32): Fix trailing quotation marks getting deleted when
     looking up byte/string literals on pydoc.  Patch by Andrés Delfino.

   - bpo-28167(33): The function ‘platform.linux_distribution’ and
     ‘platform.dist’ now trigger a ‘DeprecationWarning’ and have been
     marked for removal in Python 3.8

   - bpo-33197(34): Update error message when constructing invalid
     inspect.Parameters Patch by Donghee Na.

   - bpo-33263(35): Fix FD leak in ‘_SelectorSocketTransport’ Patch by
     Vlad Starostin.

   - bpo-32861(36): The urllib.robotparser’s ‘__str__’ representation
     now includes wildcard entries and the “Crawl-delay” and
     “Request-rate” fields.  Patch by Michael Lazar.

   - bpo-32257(37): The ssl module now contains OP_NO_RENEGOTIATION
     constant, available with OpenSSL 1.1.0h or 1.1.1.

   - bpo-16865(38): Support arrays >=2GiB in *note ctypes: 2a.  Patch by
     Segev Finer.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32751

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32684

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33654

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33674

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33674

   (6) https://bugs.python.org/issue?@action=redirect&bpo=31647

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32610

   (8) https://bugs.python.org/issue?@action=redirect&bpo=32410

   (9) https://bugs.python.org/issue?@action=redirect&bpo=33469

   (10) https://bugs.python.org/issue?@action=redirect&bpo=33672

   (11) https://bugs.python.org/issue?@action=redirect&bpo=33654

   (12) https://bugs.python.org/issue?@action=redirect&bpo=33652

   (13) https://bugs.python.org/issue?@action=redirect&bpo=32493

   (14) https://bugs.python.org/issue?@action=redirect&bpo=33618

   (15) https://bugs.python.org/issue?@action=redirect&bpo=33623

   (16) https://bugs.python.org/issue?@action=redirect&bpo=30877

   (17) https://bugs.python.org/issue?@action=redirect&bpo=33570

   (18) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (19) https://bugs.python.org/issue?@action=redirect&bpo=33540

   (20) https://bugs.python.org/issue?@action=redirect&bpo=33548

   (21) https://bugs.python.org/issue?@action=redirect&bpo=33109

   (22) https://bugs.python.org/issue?@action=redirect&bpo=26510

   (23) https://bugs.python.org/issue?@action=redirect&bpo=33536

   (24) https://bugs.python.org/issue?@action=redirect&bpo=33542

   (25) https://bugs.python.org/issue?@action=redirect&bpo=26819

   (26) https://bugs.python.org/issue?@action=redirect&bpo=33505

   (27) https://bugs.python.org/issue?@action=redirect&bpo=33497

   (28) https://bugs.python.org/issue?@action=redirect&bpo=33495

   (29) https://bugs.python.org/issue?@action=redirect&bpo=33453

   (30) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (31) https://bugs.python.org/issue?@action=redirect&bpo=20087

   (32) https://bugs.python.org/issue?@action=redirect&bpo=33422

   (33) https://bugs.python.org/issue?@action=redirect&bpo=28167

   (34) https://bugs.python.org/issue?@action=redirect&bpo=33197

   (35) https://bugs.python.org/issue?@action=redirect&bpo=33263

   (36) https://bugs.python.org/issue?@action=redirect&bpo=32861

   (37) https://bugs.python.org/issue?@action=redirect&bpo=32257

   (38) https://bugs.python.org/issue?@action=redirect&bpo=16865


File: python.info,  Node: Documentação<54>,  Next: Testes<56>,  Prev: Biblioteca<140>,  Up: Python 3 7 0 beta 5

1.23.65.3 Documentação
......................

   - bpo-23859(1): Document that ‘asyncio.wait()’ does not cancel its
     futures on timeout.

   - bpo-32436(2): Document PEP 567(3) changes to asyncio.

   - bpo-33604(4): Update HMAC md5 default to a DeprecationWarning, bump
     removal to 3.8.

   - bpo-33503(5): Fix broken pypi link

   - bpo-33421(6): Add missing documentation for
     ‘typing.AsyncContextManager’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23859

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32436

   (3) https://peps.python.org/pep-0567/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33604

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33503

   (6) https://bugs.python.org/issue?@action=redirect&bpo=33421


File: python.info,  Node: Testes<56>,  Next: Construção<61>,  Prev: Documentação<54>,  Up: Python 3 7 0 beta 5

1.23.65.4 Testes
................

   - bpo-33655(1): Ignore test_posix_fallocate failures on BSD platforms
     that might be due to running on ZFS.

   - bpo-32604(2): Remove the _xxsubinterpreters module (meant for
     testing) and associated helpers.  This module was originally added
     recently in 3.7b1.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33655

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32604


File: python.info,  Node: Construção<61>,  Next: macOS<42>,  Prev: Testes<56>,  Up: Python 3 7 0 beta 5

1.23.65.5 Construção
....................

   - bpo-33614(1): Ensures module definition files for the stable ABI on
     Windows are correctly regenerated.

   - bpo-33522(2): Enable CI builds on Visual Studio Team Services at
     ‘https://python.visualstudio.com/cpython’

   - bpo-33012(3): Add ‘-Wno-cast-function-type’ for gcc 8 for silencing
     warnings about function casts like casting to PyCFunction in method
     definition lists.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33614

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33522

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33012


File: python.info,  Node: macOS<42>,  Next: IDLE<43>,  Prev: Construção<61>,  Up: Python 3 7 0 beta 5

1.23.65.6 macOS
...............

   - bpo-13631(1): The .editrc file in user’s home directory is now
     processed correctly during the readline initialization through
     editline emulation on macOS.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13631


File: python.info,  Node: IDLE<43>,  Prev: macOS<42>,  Up: Python 3 7 0 beta 5

1.23.65.7 IDLE
..............

   - bpo-33628(1): IDLE: Cleanup codecontext.py and its test.

   - bpo-33564(2): IDLE’s code context now recognizes async as a block
     opener.

   - bpo-32831(3): Add docstrings and tests for codecontext.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33628

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33564

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32831


File: python.info,  Node: Python 3 7 0 beta 4,  Next: Python 3 7 0 beta 3,  Prev: Python 3 7 0 beta 5,  Up: Changelog

1.23.66 Python 3.7.0 beta 4
---------------------------

'Data de lançamento: 2018-05-02'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<138>.
* Biblioteca: Biblioteca<141>.
* Documentação: Documentação<55>.
* Testes: Testes<57>.
* Construção: Construção<62>.
* Windows: Windows<54>.
* macOS: macOS<43>.
* IDLE: IDLE<44>.
* Ferramentas/Demos: Ferramentas/Demos<31>.


File: python.info,  Node: Núcleo e embutidos<138>,  Next: Biblioteca<141>,  Up: Python 3 7 0 beta 4

1.23.66.1 Núcleo e embutidos
............................

   - bpo-33363(1): Raise a SyntaxError for ‘async with’ and ‘async for’
     statements outside of async functions.

   - bpo-33128(2): Fix a bug that causes PathFinder to appear twice on
     sys.meta_path.  Patch by Pablo Galindo Salgado.

   - bpo-33312(3): Fixed clang ubsan (undefined behavior sanitizer)
     warnings in dictobject.c by adjusting how the internal struct
     _dictkeysobject shared keys structure is declared.

   - bpo-33231(4): Fix potential memory leak in ‘normalizestring()’.

   - bpo-33205(5): Change dict growth function from
     ‘round_up_to_power_2(used*2+hashtable_size/2)’ to
     ‘round_up_to_power_2(used*3)’.  Previously, dict is shrinked only
     when ‘used == 0’.  Now dict has more chance to be shrinked.

   - bpo-29922(6): Improved error messages in ‘async with’ when
     ‘__aenter__()’ or ‘__aexit__()’ return non-awaitable object.

   - bpo-33199(7): Fix ‘ma_version_tag’ in dict implementation is
     uninitialized when copying from key-sharing dict.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33363

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33128

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33312

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33231

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33205

   (6) https://bugs.python.org/issue?@action=redirect&bpo=29922

   (7) https://bugs.python.org/issue?@action=redirect&bpo=33199


File: python.info,  Node: Biblioteca<141>,  Next: Documentação<55>,  Prev: Núcleo e embutidos<138>,  Up: Python 3 7 0 beta 4

1.23.66.2 Biblioteca
....................

   - bpo-33281(1): Fix ctypes.util.find_library regression on macOS.

   - bpo-33383(2): Fixed crash in the get() method of the *note
     dbm.ndbm: 34. database object when it is called with a single
     argument.

   - bpo-33329(3): Fix multiprocessing regression on newer glibcs

   - bpo-991266(4): Fix quoting of the ‘Comment’ attribute of *note
     http.cookies.SimpleCookie: 1bbb.

   - bpo-33131(5): Upgrade bundled version of pip to 10.0.1.

   - bpo-33308(6): Fixed a crash in the ‘parser’ module when converting
     an ST object to a tree of tuples or lists with ‘line_info=False’
     and ‘col_info=True’.

   - bpo-33266(7): lib2to3 now recognizes ‘rf'...'’ strings.

   - bpo-11594(8): Ensure line-endings are respected when using lib2to3.

   - bpo-33254(9): Have *note importlib.resources.contents(): 1f2. and
     *note importlib.abc.ResourceReader.contents(): 1bbc. return an
     *note iterable: 1268. instead of an *note iterator: 1ac.

   - bpo-33256(10): Fix display of ‘<module>’ call in the html produced
     by ‘cgitb.html()’.  Patch by Stéphane Blondon.

   - bpo-33185(11): Fixed regression when running pydoc with the *note
     -m: 5e1. switch.  (The regression was introduced in 3.7.0b3 by the
     resolution of bpo-33053(12)) This fix also changed pydoc to add
     ‘os.getcwd()’ to *note sys.path: 3b4. when necessary, rather than
     adding ‘"."’.

   - bpo-33169(13): Delete entries of ‘None’ in *note
     sys.path_importer_cache: 5e4. when
     ‘importlib.machinery.invalidate_caches()’ is called.

   - bpo-33217(14): Deprecate looking up non-Enum objects in Enum
     classes and Enum members (will raise *note TypeError: 2c3. in
     3.8+).

   - bpo-33203(15): ‘random.Random.choice()’ now raises ‘IndexError’ for
     empty sequences consistently even when called from subclasses
     without a ‘getrandbits()’ implementation.

   - bpo-33224(16): Update difflib.mdiff() for PEP 479(17).  Convert an
     uncaught StopIteration in a generator into a return-statement.

   - bpo-33209(18): End framing at the end of C implementation of *note
     pickle.Pickler.dump(): 1bbd.

   - bpo-20104(19): Improved error handling and fixed a reference leak
     in *note os.posix_spawn(): 220.

   - bpo-33175(20): In dataclasses, Field.__set_name__ now looks up the
     __set_name__ special method on the class, not the instance, of the
     default value.

   - bpo-33097(21): Raise RuntimeError when ‘executor.submit’ is called
     during interpreter shutdown.

   - bpo-31908(22): Fix output of cover files for ‘trace’ module
     command-line tool.  Previously emitted cover files only when
     ‘--missing’ option was used.  Patch by Michael Selik.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33281

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33383

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33329

   (4) https://bugs.python.org/issue?@action=redirect&bpo=991266

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33131

   (6) https://bugs.python.org/issue?@action=redirect&bpo=33308

   (7) https://bugs.python.org/issue?@action=redirect&bpo=33266

   (8) https://bugs.python.org/issue?@action=redirect&bpo=11594

   (9) https://bugs.python.org/issue?@action=redirect&bpo=33254

   (10) https://bugs.python.org/issue?@action=redirect&bpo=33256

   (11) https://bugs.python.org/issue?@action=redirect&bpo=33185

   (12) https://bugs.python.org/issue?@action=redirect&bpo=33053

   (13) https://bugs.python.org/issue?@action=redirect&bpo=33169

   (14) https://bugs.python.org/issue?@action=redirect&bpo=33217

   (15) https://bugs.python.org/issue?@action=redirect&bpo=33203

   (16) https://bugs.python.org/issue?@action=redirect&bpo=33224

   (17) https://peps.python.org/pep-0479/

   (18) https://bugs.python.org/issue?@action=redirect&bpo=33209

   (19) https://bugs.python.org/issue?@action=redirect&bpo=20104

   (20) https://bugs.python.org/issue?@action=redirect&bpo=33175

   (21) https://bugs.python.org/issue?@action=redirect&bpo=33097

   (22) https://bugs.python.org/issue?@action=redirect&bpo=31908


File: python.info,  Node: Documentação<55>,  Next: Testes<57>,  Prev: Biblioteca<141>,  Up: Python 3 7 0 beta 4

1.23.66.3 Documentação
......................

   - bpo-33378(1): Add Korean language switcher for
     ‘https://docs.python.org/3/’

   - bpo-33276(2): Clarify that the ‘__path__’ attribute on modules
     cannot be just any value.

   - bpo-33201(3): Modernize documentation for writing C extension
     types.

   - bpo-33195(4): Deprecate ‘Py_UNICODE’ usage in ‘c-api/arg’ document.
     ‘Py_UNICODE’ related APIs are deprecated since Python 3.3, but it
     is missed in the document.

   - bpo-8243(5): Add a note about curses.addch and curses.addstr
     exception behavior when writing outside a window, or pad.

   - bpo-32337(6): Update documentation related with ‘dict’ order.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33378

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33276

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33201

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33195

   (5) https://bugs.python.org/issue?@action=redirect&bpo=8243

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32337


File: python.info,  Node: Testes<57>,  Next: Construção<62>,  Prev: Documentação<55>,  Up: Python 3 7 0 beta 4

1.23.66.4 Testes
................

   - bpo-33358(1): Fix
     ‘test_embed.test_pre_initialization_sys_options()’ when the
     interpreter is built with ‘--enable-shared’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33358


File: python.info,  Node: Construção<62>,  Next: Windows<54>,  Prev: Testes<57>,  Up: Python 3 7 0 beta 4

1.23.66.5 Construção
....................

   - bpo-33394(1): Enable the verbose build for extension modules, when
     GNU make is passed macros on the command line.

   - bpo-33393(2): Update config.guess and config.sub files.

   - bpo-33377(3): Add new triplets for mips r6 and riscv variants (used
     in extension suffixes).

   - bpo-32232(4): By default, modules configured in ‘Modules/Setup’ are
     no longer built with ‘-DPy_BUILD_CORE’.  Instead, modules that
     specifically need that preprocessor definition include it in their
     individual entries.

   - bpo-33182(5): The embedding tests can once again be built with
     clang 6.0

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33394

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33393

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33377

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32232

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33182


File: python.info,  Node: Windows<54>,  Next: macOS<43>,  Prev: Construção<62>,  Up: Python 3 7 0 beta 4

1.23.66.6 Windows
.................

   - bpo-33184(1): Update Windows installer to use OpenSSL 1.1.0h.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33184


File: python.info,  Node: macOS<43>,  Next: IDLE<44>,  Prev: Windows<54>,  Up: Python 3 7 0 beta 4

1.23.66.7 macOS
...............

   - bpo-33184(1): Update macOS installer build to use OpenSSL 1.1.0h.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33184


File: python.info,  Node: IDLE<44>,  Next: Ferramentas/Demos<31>,  Prev: macOS<43>,  Up: Python 3 7 0 beta 4

1.23.66.8 IDLE
..............

   - bpo-21474(1): Update word/identifier definition from ascii to
     unicode.  In text and entry boxes, this affects selection by
     double-click, movement left/right by control-left/right, and
     deletion left/right by control-BACKSPACE/DEL.

   - bpo-33204(2): IDLE: consistently color invalid string prefixes.  A
     ‘u’ string prefix cannot be paired with either ‘r’ or ‘f’.
     Consistently color as much of the prefix, starting at the right, as
     is valid.  Revise and extend colorizer test.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21474

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33204


File: python.info,  Node: Ferramentas/Demos<31>,  Prev: IDLE<44>,  Up: Python 3 7 0 beta 4

1.23.66.9 Ferramentas/Demos
...........................

   - bpo-33189(1): ‘pygettext.py’ now recognizes only literal strings as
     docstrings and translatable strings, and rejects bytes literals and
     f-string expressions.

   - bpo-31920(2): Fixed handling directories as arguments in the
     ‘pygettext’ script.  Based on patch by Oleg Krasnikov.

   - bpo-29673(3): Fix pystackv and pystack gdbinit macros.

   - bpo-31583(4): Fix 2to3 for using with –add-suffix option but
     without –output-dir option for relative path to files in current
     directory.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33189

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31920

   (3) https://bugs.python.org/issue?@action=redirect&bpo=29673

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31583


File: python.info,  Node: Python 3 7 0 beta 3,  Next: Python 3 7 0 beta 2,  Prev: Python 3 7 0 beta 4,  Up: Changelog

1.23.67 Python 3.7.0 beta 3
---------------------------

'Data de lançamento: 2018-03-29'

* Menu:

* Segurança: Segurança<43>.
* Núcleo e embutidos: Núcleo e embutidos<139>.
* Biblioteca: Biblioteca<142>.
* Documentação: Documentação<56>.
* Testes: Testes<58>.
* Construção: Construção<63>.
* Windows: Windows<55>.
* macOS: macOS<44>.
* IDLE: IDLE<45>.
* Ferramentas/Demos: Ferramentas/Demos<32>.
* API C: API C<57>.


File: python.info,  Node: Segurança<43>,  Next: Núcleo e embutidos<139>,  Up: Python 3 7 0 beta 3

1.23.67.1 Segurança
...................

   - bpo-33136(1): Harden ssl module against LibreSSL CVE 2018-8970(2).
     X509_VERIFY_PARAM_set1_host() is called with an explicit namelen.
     A new test ensures that NULL bytes are not allowed.

   - bpo-33001(3): Minimal fix to prevent buffer overrun in os.symlink
     on Windows

   - bpo-32981(4): Regexes in difflib and poplib were vulnerable to
     catastrophic backtracking.  These regexes formed potential DOS
     vectors (REDOS). They have been refactored.  This resolves CVE
     2018-1060(5) and CVE 2018-1061(6).  Patch by Jamie Davis.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33136

   (2) https://www.cve.org/CVERecord?id=CVE-2018-8970

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33001

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32981

   (5) https://www.cve.org/CVERecord?id=CVE-2018-1060

   (6) https://www.cve.org/CVERecord?id=CVE-2018-1061


File: python.info,  Node: Núcleo e embutidos<139>,  Next: Biblioteca<142>,  Prev: Segurança<43>,  Up: Python 3 7 0 beta 3

1.23.67.2 Núcleo e embutidos
............................

   - bpo-33053(1): When using the -m switch, sys.path[0] is now
     explicitly expanded as the 'starting' working directory, rather
     than being left as the empty path (which allows imports from the
     current working directory at the time of the import)

   - bpo-33018(2): Improve consistency of errors raised by
     ‘issubclass()’ when called with a non-class and an abstract base
     class as the first and second arguments, respectively.  Patch by
     Josh Bronson.

   - bpo-33041(3): Fixed jumping when the function contains an ‘async
     for’ loop.

   - bpo-33026(4): Fixed jumping out of “with” block by setting
     f_lineno.

   - bpo-33005(5): Fix a crash on fork when using a custom memory
     allocator (ex: using PYTHONMALLOC env var).  _PyGILState_Reinit()
     and _PyInterpreterState_Enable() now use the default RAW memory
     allocator to allocate a new interpreters mutex on fork.

   - bpo-17288(6): Prevent jumps from ‘return’ and ‘exception’ trace
     events.

   - bpo-32836(7): Don’t use temporary variables in cases of
     list/dict/set comprehensions

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33053

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33018

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33041

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33026

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33005

   (6) https://bugs.python.org/issue?@action=redirect&bpo=17288

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32836


File: python.info,  Node: Biblioteca<142>,  Next: Documentação<56>,  Prev: Núcleo e embutidos<139>,  Up: Python 3 7 0 beta 3

1.23.67.3 Biblioteca
....................

   - bpo-33141(1): Have Field objects pass through __set_name__ to their
     default values, if they have their own __set_name__.

   - bpo-33096(2): Allow ttk.Treeview.insert to insert iid that has a
     false boolean value.  Note iid=0 and iid=False would be same.
     Patch by Garvit Khatri.

   - bpo-32873(3): Treat type variables and special typing forms as
     immutable by copy and pickle.  This fixes several minor issues and
     inconsistencies, and improves backwards compatibility with Python
     3.6.

   - bpo-33134(4): When computing dataclass’s __hash__, use the lookup
     table to contain the function which returns the __hash__ value.
     This is an improvement over looking up a string, and then testing
     that string to see what to do.

   - bpo-33127(5): The ssl module now compiles with LibreSSL 2.7.1.

   - bpo-32505(6): Raise TypeError if a member variable of a dataclass
     is of type Field, but doesn’t have a type annotation.

   - bpo-33078(7): Fix the failure on OSX caused by the tests relying on
     sem_getvalue

   - bpo-33116(8): Add ‘Field’ to dataclasses.__all__.

   - bpo-32896(9): Fix an error where subclassing a dataclass with a
     field that uses a default_factory would generate an incorrect
     class.

   - bpo-33100(10): Dataclasses: If a field has a default value that’s a
     MemberDescriptorType, then it’s from that field being in __slots__,
     not an actual default value.

   - bpo-32953(11): If a non-dataclass inherits from a frozen dataclass,
     allow attributes to be added to the derived class.  Only attributes
     from the frozen dataclass cannot be assigned to.  Require all
     dataclasses in a hierarchy to be either all frozen or all
     non-frozen.

   - bpo-33061(12): Add missing ‘NoReturn’ to ‘__all__’ in typing.py

   - bpo-33078(13): Fix the size handling in multiprocessing.Queue when
     a pickling error occurs.

   - bpo-33064(14): lib2to3 now properly supports trailing commas after
     ‘*args’ and ‘**kwargs’ in function signatures.

   - bpo-33056(15): FIX properly close leaking fds in
     concurrent.futures.ProcessPoolExecutor.

   - bpo-33021(16): Release the GIL during fstat() calls, avoiding hang
     of all threads when calling mmap.mmap(), os.urandom(), and
     random.seed().  Patch by Nir Soffer.

   - bpo-31804(17): Avoid failing in multiprocessing.Process if the
     standard streams are closed or None at exit.

   - bpo-33037(18): Skip sending/receiving data after SSL transport
     closing.

   - bpo-27683(19): Fix a regression in *note ipaddress: 80. that result
     of ‘hosts()’ is empty when the network is constructed by a tuple
     containing an integer mask and only 1 bit left for addresses.

   - bpo-32999(20): Fix C implementation of ‘ABC.__subclasscheck__(cls,
     subclass)’ crashed when ‘subclass’ is not a type object.

   - bpo-33009(21): Fix inspect.signature() for single-parameter
     partialmethods.

   - bpo-32969(22): Expose several missing constants in zlib and fix
     corresponding documentation.

   - bpo-32056(23): Improved exceptions raised for invalid number of
     channels and sample width when read an audio file in modules
     ‘aifc’, *note wave: 113. and ‘sunau’.

   - bpo-32844(24): Fix wrong redirection of a low descriptor (0 or 1)
     to stderr in subprocess if another low descriptor is closed.

   - bpo-32857(25): In *note tkinter: f0, ‘after_cancel(None)’ now
     raises a *note ValueError: 202. instead of canceling the first
     scheduled function.  Patch by Cheryl Sabella.

   - bpo-31639(26): http.server now exposes a ThreadedHTTPServer class
     and uses it when the module is run with ‘-m’ to cope with web
     browsers pre-opening sockets.

   - bpo-27645(27): *note sqlite3.Connection: 245. now exposes a *note
     backup: b92. method, if the underlying SQLite library is at version
     3.6.11 or higher.  Patch by Lele Gaifax.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33141

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33096

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32873

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33134

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33127

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32505

   (7) https://bugs.python.org/issue?@action=redirect&bpo=33078

   (8) https://bugs.python.org/issue?@action=redirect&bpo=33116

   (9) https://bugs.python.org/issue?@action=redirect&bpo=32896

   (10) https://bugs.python.org/issue?@action=redirect&bpo=33100

   (11) https://bugs.python.org/issue?@action=redirect&bpo=32953

   (12) https://bugs.python.org/issue?@action=redirect&bpo=33061

   (13) https://bugs.python.org/issue?@action=redirect&bpo=33078

   (14) https://bugs.python.org/issue?@action=redirect&bpo=33064

   (15) https://bugs.python.org/issue?@action=redirect&bpo=33056

   (16) https://bugs.python.org/issue?@action=redirect&bpo=33021

   (17) https://bugs.python.org/issue?@action=redirect&bpo=31804

   (18) https://bugs.python.org/issue?@action=redirect&bpo=33037

   (19) https://bugs.python.org/issue?@action=redirect&bpo=27683

   (20) https://bugs.python.org/issue?@action=redirect&bpo=32999

   (21) https://bugs.python.org/issue?@action=redirect&bpo=33009

   (22) https://bugs.python.org/issue?@action=redirect&bpo=32969

   (23) https://bugs.python.org/issue?@action=redirect&bpo=32056

   (24) https://bugs.python.org/issue?@action=redirect&bpo=32844

   (25) https://bugs.python.org/issue?@action=redirect&bpo=32857

   (26) https://bugs.python.org/issue?@action=redirect&bpo=31639

   (27) https://bugs.python.org/issue?@action=redirect&bpo=27645


File: python.info,  Node: Documentação<56>,  Next: Testes<58>,  Prev: Biblioteca<142>,  Up: Python 3 7 0 beta 3

1.23.67.4 Documentação
......................

   - bpo-33126(1): Document PyBuffer_ToContiguous().

   - bpo-27212(2): Modify documentation for the ‘islice()’ recipe to
     consume initial values up to the start index.

   - bpo-28247(3): Update *note zipapp: 130. documentation to describe
     how to make standalone applications.

   - bpo-18802(4): Documentation changes for ipaddress.  Patch by Jon
     Foster and Berker Peksag.

   - bpo-27428(5): Update documentation to clarify that
     ‘WindowsRegistryFinder’ implements ‘MetaPathFinder’.  (Patch by
     Himanshu Lakhara)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33126

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27212

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28247

   (4) https://bugs.python.org/issue?@action=redirect&bpo=18802

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27428


File: python.info,  Node: Testes<58>,  Next: Construção<63>,  Prev: Documentação<56>,  Up: Python 3 7 0 beta 3

1.23.67.5 Testes
................

   - bpo-32872(1): Avoid regrtest compatibility issue with namespace
     packages.

   - bpo-32517(2): Fix failing ‘test_asyncio’ on macOS 10.12.2+ due to
     transport of ‘KqueueSelector’ loop was not being closed.

   - bpo-19417(3): Add test_bdb.py.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32872

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32517

   (3) https://bugs.python.org/issue?@action=redirect&bpo=19417


File: python.info,  Node: Construção<63>,  Next: Windows<55>,  Prev: Testes<58>,  Up: Python 3 7 0 beta 3

1.23.67.6 Construção
....................

   - bpo-33163(1): Upgrade pip to 9.0.3 and setuptools to v39.0.1.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33163


File: python.info,  Node: Windows<55>,  Next: macOS<44>,  Prev: Construção<63>,  Up: Python 3 7 0 beta 3

1.23.67.7 Windows
.................

   - bpo-33016(1): Fix potential use of uninitialized memory in
     nt._getfinalpathname

   - bpo-32903(2): Fix a memory leak in os.chdir() on Windows if the
     current directory is set to a UNC path.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33016

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32903


File: python.info,  Node: macOS<44>,  Next: IDLE<45>,  Prev: Windows<55>,  Up: Python 3 7 0 beta 3

1.23.67.8 macOS
...............

   - bpo-32726(1): Build and link with private copy of Tcl/Tk 8.6 for
     the macOS 10.6+ installer.  The 10.9+ installer variant already
     does this.  This means that the Python 3.7 provided by the
     python.org macOS installers no longer need or use any external
     versions of Tcl/Tk, either system-provided or user-installed, such
     as ActiveTcl.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32726


File: python.info,  Node: IDLE<45>,  Next: Ferramentas/Demos<32>,  Prev: macOS<44>,  Up: Python 3 7 0 beta 3

1.23.67.9 IDLE
..............

   - bpo-32984(1): Set ‘__file__’ while running a startup file.  Like
     Python, IDLE optionally runs one startup file in the Shell window
     before presenting the first interactive input prompt.  For IDLE,
     ‘-s’ runs a file named in environmental variable ‘IDLESTARTUP’ or
     *note PYTHONSTARTUP: ffe.; ‘-r file’ runs ‘file’.  Python sets
     ‘__file__’ to the startup file name before running the file and
     unsets it before the first prompt.  IDLE now does the same when run
     normally, without the ‘-n’ option.

   - bpo-32940(2): Simplify and rename StringTranslatePseudoMapping in
     pyparse.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32984

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32940


File: python.info,  Node: Ferramentas/Demos<32>,  Next: API C<57>,  Prev: IDLE<45>,  Up: Python 3 7 0 beta 3

1.23.67.10 Ferramentas/Demos
............................

   - bpo-32885(1): Add an ‘-n’ flag for ‘Tools/scripts/pathfix.py’ to
     disable automatic backup creation (files with ‘~’ suffix).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32885


File: python.info,  Node: API C<57>,  Prev: Ferramentas/Demos<32>,  Up: Python 3 7 0 beta 3

1.23.67.11 API C
................

   - bpo-33042(1): Embedding applications may once again call
     PySys_ResetWarnOptions, PySys_AddWarnOption, and PySys_AddXOption
     prior to calling Py_Initialize.

   - bpo-32374(2): Document that m_traverse for multi-phase initialized
     modules can be called with m_state=NULL, and add a sanity check

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33042

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32374


File: python.info,  Node: Python 3 7 0 beta 2,  Next: Python 3 7 0 beta 1,  Prev: Python 3 7 0 beta 3,  Up: Changelog

1.23.68 Python 3.7.0 beta 2
---------------------------

'Data de lançamento: 2018-02-27'

* Menu:

* Segurança: Segurança<44>.
* Núcleo e embutidos: Núcleo e embutidos<140>.
* Biblioteca: Biblioteca<143>.
* Documentação: Documentação<57>.
* Testes: Testes<59>.
* Construção: Construção<64>.
* Windows: Windows<56>.
* macOS: macOS<45>.
* IDLE: IDLE<46>.
* Ferramentas/Demos: Ferramentas/Demos<33>.


File: python.info,  Node: Segurança<44>,  Next: Núcleo e embutidos<140>,  Up: Python 3 7 0 beta 2

1.23.68.1 Segurança
...................

   - bpo-28414(1): The ssl module now allows users to perform their own
     IDN en/decoding when using SNI.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28414


File: python.info,  Node: Núcleo e embutidos<140>,  Next: Biblioteca<143>,  Prev: Segurança<44>,  Up: Python 3 7 0 beta 2

1.23.68.2 Núcleo e embutidos
............................

   - bpo-32889(1): Update Valgrind suppression list to account for the
     rename of ‘Py_ADDRESS_IN_RANG’ to ‘address_in_range’.

   - bpo-31356(2): Remove the new API added in bpo-31356(3)
     (gc.ensure_disabled() context manager).

   - bpo-32305(4): For namespace packages, ensure that both ‘__file__’
     and ‘__spec__.origin’ are set to None.

   - bpo-32303(5): Make sure ‘__spec__.loader’ matches ‘__loader__’ for
     namespace packages.

   - bpo-32711(6): Fix the warning messages for Python/ast_unparse.c.
     Patch by Stéphane Wirtel

   - bpo-32583(7): Fix possible crashing in builtin Unicode decoders
     caused by write out-of-bound errors when using customized decode
     error handlers.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32889

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31356

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31356

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32305

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32303

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32711

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32583


File: python.info,  Node: Biblioteca<143>,  Next: Documentação<57>,  Prev: Núcleo e embutidos<140>,  Up: Python 3 7 0 beta 2

1.23.68.3 Biblioteca
....................

   - bpo-32960(1): For dataclasses, disallow inheriting frozen from
     non-frozen classes, and also disallow inheriting non-frozen from
     frozen classes.  This restriction will be relaxed at a future date.

   - bpo-32713(2): Fixed tarfile.itn handling of out-of-bounds float
     values.  Patch by Joffrey Fuhrer.

   - bpo-32951(3): Direct instantiation of SSLSocket and SSLObject
     objects is now prohibited.  The constructors were never documented,
     tested, or designed as public constructors.  Users were suppose to
     use ssl.wrap_socket() or SSLContext.

   - bpo-32929(4): Remove the tri-state parameter “hash”, and add the
     boolean “unsafe_hash”.  If unsafe_hash is True, add a __hash__
     function, but if a __hash__ exists, raise TypeError.  If
     unsafe_hash is False, add a __hash__ based on the values of eq= and
     frozen=.  The unsafe_hash=False behavior is the same as the old
     hash=None behavior.  unsafe_hash=False is the default, just as
     hash=None used to be.

   - bpo-32947(5): Add OP_ENABLE_MIDDLEBOX_COMPAT and test workaround
     for TLSv1.3 for future compatibility with OpenSSL 1.1.1.

   - bpo-30622(6): The ssl module now detects missing NPN support in
     LibreSSL.

   - bpo-32922(7): dbm.open() now encodes filename with the filesystem
     encoding rather than default encoding.

   - bpo-32859(8): In ‘os.dup2’, don’t check every call whether the
     ‘dup3’ syscall exists or not.

   - bpo-32556(9): nt._getfinalpathname, nt._getvolumepathname and
     nt._getdiskusage now correctly convert from bytes.

   - bpo-25988(10): Emit a *note DeprecationWarning: 1a5. when using or
     importing an ABC directly from *note collections: 1d. rather than
     from *note collections.abc: 1e.

   - bpo-21060(11): Rewrite confusing message from setup.py upload from
     “No dist file created in earlier command” to the more helpful “Must
     create and upload files in one command”.

   - bpo-32852(12): Make sure sys.argv remains as a list when running
     trace.

   - bpo-31333(13): ‘_abc’ module is added.  It is a speedup module with
     C implementations for various functions and methods in ‘abc’.
     Creating an ABC subclass and calling ‘isinstance’ or ‘issubclass’
     with an ABC subclass are up to 1.5x faster.  In addition, this
     makes Python start-up up to 10% faster.  Note that the new
     implementation hides internal registry and caches, previously
     accessible via private attributes ‘_abc_registry’, ‘_abc_cache’,
     and ‘_abc_negative_cache’.  There are three debugging helper
     methods that can be used instead ‘_dump_registry’,
     ‘_abc_registry_clear’, and ‘_abc_caches_clear’.

   - bpo-32841(14): Fixed ‘asyncio.Condition’ issue which silently
     ignored cancellation after notifying and cancelling a conditional
     lock.  Patch by Bar Harel.

   - bpo-32819(15): ssl.match_hostname() has been simplified and no
     longer depends on re and ipaddress module for wildcard and IP
     addresses.  Error reporting for invalid wildcards has been
     improved.

   - bpo-32394(16): socket: Remove
     TCP_FASTOPEN,TCP_KEEPCNT,TCP_KEEPIDLE,TCP_KEEPINTVL flags on older
     version Windows during run-time.

   - bpo-31787(17): Fixed refleaks of ‘__init__()’ methods in various
     modules.  (Contributed by Oren Milman)

   - bpo-30157(18): Fixed guessing quote and delimiter in
     csv.Sniffer.sniff() when only the last field is quoted.  Patch by
     Jake Davis.

   - bpo-32792(19): collections.ChainMap() preserves the order of the
     underlying mappings.

   - bpo-32775(20): *note fnmatch.translate(): 1bbe. no longer produces
     patterns which contain set operations.  Sets starting with ‘[’ or
     containing ‘–’, ‘&&’, ‘~~’ or ‘||’ will be interpreted differently
     in regular expressions in future versions.  Currently they emit
     warnings.  fnmatch.translate() now avoids producing patterns
     containing such sets by accident.

   - bpo-32622(21): Implement native fast sendfile for Windows proactor
     event loop.

   - bpo-32777(22): Fix a rare but potential pre-exec child process
     deadlock in subprocess on POSIX systems when marking file
     descriptors inheritable on exec in the child process.  This bug
     appears to have been introduced in 3.4.

   - bpo-32647(23): The ctypes module used to depend on indirect linking
     for dlopen.  The shared extension is now explicitly linked against
     libdl on platforms with dl.

   - bpo-32741(24): Implement ‘asyncio.TimerHandle.when()’ method.

   - bpo-32691(25): Use mod_spec.parent when running modules with pdb

   - bpo-32734(26): Fixed ‘asyncio.Lock()’ safety issue which allowed
     acquiring and locking the same lock multiple times, without it
     being free.  Patch by Bar Harel.

   - bpo-32727(27): Do not include name field in SMTP envelope from
     address.  Patch by Stéphane Wirtel

   - bpo-31453(28): Add TLSVersion constants and
     SSLContext.maximum_version / minimum_version attributes.  The new
     API wraps OpenSSL 1.1
     ‘https://web.archive.org/web/20180309043602/https://www.openssl.org/docs/man1.1.0/ssl/SSL_CTX_set_min_proto_version.html’
     feature.

   - bpo-24334(29): Internal implementation details of ssl module were
     cleaned up.  The SSLSocket has one less layer of indirection.
     Owner and session information are now handled by the SSLSocket and
     SSLObject constructor.  Channel binding implementation has been
     simplified.

   - bpo-31848(30): Fix the error handling in Aifc_read.initfp() when
     the SSND chunk is not found.  Patch by Zackery Spytz.

   - bpo-32585(31): Add Ttk spinbox widget to *note tkinter.ttk: f9.
     Patch by Alan D Moore.

   - bpo-32221(32): Various functions returning tuple containing IPv6
     addresses now omit ‘%scope’ part since the same information is
     already encoded in 'scopeid' tuple item.  Especially this speeds up
     ‘socket.recvfrom()’ when it receives multicast packet since useless
     resolving of network interface name is omitted.

   - bpo-30693(33): The TarFile class now recurses directories in a
     reproducible way.

   - bpo-30693(34): The ZipFile class now recurses directories in a
     reproducible way.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32960

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32713

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32951

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32929

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32947

   (6) https://bugs.python.org/issue?@action=redirect&bpo=30622

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32922

   (8) https://bugs.python.org/issue?@action=redirect&bpo=32859

   (9) https://bugs.python.org/issue?@action=redirect&bpo=32556

   (10) https://bugs.python.org/issue?@action=redirect&bpo=25988

   (11) https://bugs.python.org/issue?@action=redirect&bpo=21060

   (12) https://bugs.python.org/issue?@action=redirect&bpo=32852

   (13) https://bugs.python.org/issue?@action=redirect&bpo=31333

   (14) https://bugs.python.org/issue?@action=redirect&bpo=32841

   (15) https://bugs.python.org/issue?@action=redirect&bpo=32819

   (16) https://bugs.python.org/issue?@action=redirect&bpo=32394

   (17) https://bugs.python.org/issue?@action=redirect&bpo=31787

   (18) https://bugs.python.org/issue?@action=redirect&bpo=30157

   (19) https://bugs.python.org/issue?@action=redirect&bpo=32792

   (20) https://bugs.python.org/issue?@action=redirect&bpo=32775

   (21) https://bugs.python.org/issue?@action=redirect&bpo=32622

   (22) https://bugs.python.org/issue?@action=redirect&bpo=32777

   (23) https://bugs.python.org/issue?@action=redirect&bpo=32647

   (24) https://bugs.python.org/issue?@action=redirect&bpo=32741

   (25) https://bugs.python.org/issue?@action=redirect&bpo=32691

   (26) https://bugs.python.org/issue?@action=redirect&bpo=32734

   (27) https://bugs.python.org/issue?@action=redirect&bpo=32727

   (28) https://bugs.python.org/issue?@action=redirect&bpo=31453

   (29) https://bugs.python.org/issue?@action=redirect&bpo=24334

   (30) https://bugs.python.org/issue?@action=redirect&bpo=31848

   (31) https://bugs.python.org/issue?@action=redirect&bpo=32585

   (32) https://bugs.python.org/issue?@action=redirect&bpo=32221

   (33) https://bugs.python.org/issue?@action=redirect&bpo=30693

   (34) https://bugs.python.org/issue?@action=redirect&bpo=30693


File: python.info,  Node: Documentação<57>,  Next: Testes<59>,  Prev: Biblioteca<143>,  Up: Python 3 7 0 beta 2

1.23.68.4 Documentação
......................

   - bpo-28124(1): The ssl module function ssl.wrap_socket() has been
     de-emphasized and deprecated in favor of the more secure and
     efficient SSLContext.wrap_socket() method.

   - bpo-17232(2): Clarify docs for -O and -OO. Patch by Terry Reedy.

   - bpo-32436(3): Add documentation for the contextvars module (PEP
     567).

   - bpo-32800(4): Update link to w3c doc for xml default namespaces.

   - bpo-11015(5): Update *note test.support: e4. documentation.

   - bpo-8722(6): Document ‘__getattr__()’ behavior when property
     ‘get()’ method raises *note AttributeError: 34b.

   - bpo-32614(7): Modify RE examples in documentation to use raw
     strings to prevent *note DeprecationWarning: 1a5. and add text to
     REGEX HOWTO to highlight the deprecation.

   - bpo-31972(8): Improve docstrings for ‘pathlib.PurePath’ subclasses.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28124

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17232

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32436

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32800

   (5) https://bugs.python.org/issue?@action=redirect&bpo=11015

   (6) https://bugs.python.org/issue?@action=redirect&bpo=8722

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32614

   (8) https://bugs.python.org/issue?@action=redirect&bpo=31972


File: python.info,  Node: Testes<59>,  Next: Construção<64>,  Prev: Documentação<57>,  Up: Python 3 7 0 beta 2

1.23.68.5 Testes
................

   - bpo-31809(1): Add tests to verify connection with secp ECDH curves.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31809


File: python.info,  Node: Construção<64>,  Next: Windows<56>,  Prev: Testes<59>,  Up: Python 3 7 0 beta 2

1.23.68.6 Construção
....................

   - bpo-32898(1): Fix the python debug build when using COUNT_ALLOCS.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32898


File: python.info,  Node: Windows<56>,  Next: macOS<45>,  Prev: Construção<64>,  Up: Python 3 7 0 beta 2

1.23.68.7 Windows
.................

   - bpo-32901(1): Update Tcl and Tk versions to 8.6.8

   - bpo-31966(2): Fixed WindowsConsoleIO.write() for writing empty
     data.

   - bpo-32409(3): Ensures activate.bat can handle Unicode contents.

   - bpo-32457(4): Improves handling of denormalized executable path
     when launching Python.

   - bpo-32370(5): Use the correct encoding for ipconfig output in the
     uuid module.  Patch by Segev Finer.

   - bpo-29248(6): Fix *note os.readlink(): 926. on Windows, which was
     mistakenly treating the ‘PrintNameOffset’ field of the reparse data
     buffer as a number of characters instead of bytes.  Patch by Craig
     Holmquist and SSE4.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32901

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31966

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32409

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32457

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32370

   (6) https://bugs.python.org/issue?@action=redirect&bpo=29248


File: python.info,  Node: macOS<45>,  Next: IDLE<46>,  Prev: Windows<56>,  Up: Python 3 7 0 beta 2

1.23.68.8 macOS
...............

   - bpo-32901(1): Update macOS 10.9+ installer to Tcl/Tk 8.6.8.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32901


File: python.info,  Node: IDLE<46>,  Next: Ferramentas/Demos<33>,  Prev: macOS<45>,  Up: Python 3 7 0 beta 2

1.23.68.9 IDLE
..............

   - bpo-32916(1): Change ‘str’ to ‘code’ in pyparse.

   - bpo-32905(2): Remove unused code in pyparse module.

   - bpo-32874(3): Add tests for pyparse.

   - bpo-32837(4): Using the system and place-dependent default encoding
     for open() is a bad idea for IDLE’s system and location-independent
     files.

   - bpo-32826(5): Add “encoding=utf-8” to open() in IDLE’s
     test_help_about.  GUI test test_file_buttons() only looks at
     initial ascii-only lines, but failed on systems where open()
     defaults to ‘ascii’ because readline() internally reads and decodes
     far enough ahead to encounter a non-ascii character in CREDITS.txt.

   - bpo-32765(6): Update configdialog General tab docstring to add new
     widgets to the widget list.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32916

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32905

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32874

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32837

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32826

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32765


File: python.info,  Node: Ferramentas/Demos<33>,  Prev: IDLE<46>,  Up: Python 3 7 0 beta 2

1.23.68.10 Ferramentas/Demos
............................

   - bpo-32222(1): Fix pygettext not extracting docstrings for functions
     with type annotated arguments.  Patch by Toby Harradine.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32222


File: python.info,  Node: Python 3 7 0 beta 1,  Next: Python 3 7 0 alpha 4,  Prev: Python 3 7 0 beta 2,  Up: Changelog

1.23.69 Python 3.7.0 beta 1
---------------------------

'Data de lançamento: 2018-01-30'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<141>.
* Biblioteca: Biblioteca<144>.
* Documentação: Documentação<58>.
* Testes: Testes<60>.
* Construção: Construção<65>.
* Windows: Windows<57>.
* macOS: macOS<46>.
* API C: API C<58>.


File: python.info,  Node: Núcleo e embutidos<141>,  Next: Biblioteca<144>,  Up: Python 3 7 0 beta 1

1.23.69.1 Núcleo e embutidos
............................

   - bpo-32703(1): Fix coroutine’s ResourceWarning when there’s an
     active error set when it’s being finalized.

   - bpo-32650(2): Pdb and other debuggers dependent on bdb.py will
     correctly step over (next command) native coroutines.  Patch by
     Pablo Galindo.

   - bpo-28685(3): Optimize list.sort() and sorted() by using type
     specialized comparisons when possible.

   - bpo-32685(4): Improve suggestion when the Python 2 form of print
     statement is either present on the same line as the header of a
     compound statement or else terminated by a semi-colon instead of a
     newline.  Patch by Nitish Chandra.

   - bpo-32697(5): Python now explicitly preserves the definition order
     of keyword-only parameters.  It’s always preserved their order, but
     this behavior was never guaranteed before; this behavior is now
     guaranteed and tested.

   - bpo-32690(6): The locals() dictionary now displays in the lexical
     order that variables were defined.  Previously, the order was
     reversed.

   - bpo-32677(7): Add ‘.isascii()’ method to ‘str’, ‘bytes’ and
     ‘bytearray’.  It can be used to test that string contains only
     ASCII characters.

   - bpo-32670(8): Enforce PEP 479(9) for all code.  This means that
     manually raising a StopIteration exception from a generator is
     prohibited for all code, regardless of whether ‘from __future__
     import generator_stop’ was used or not.

   - bpo-32591(10): Added built-in support for tracking the origin of
     coroutine objects; see sys.set_coroutine_origin_tracking_depth and
     CoroutineType.cr_origin.  This replaces the asyncio debug mode’s
     use of coroutine wrapping for native coroutine objects.

   - bpo-31368(11): Expose preadv and pwritev system calls in the os
     module.  Patch by Pablo Galindo

   - bpo-32544(12): ‘hasattr(obj, name)’ and ‘getattr(obj, name,
     default)’ are about 4 times faster than before when ‘name’ is not
     found and ‘obj’ doesn’t override ‘__getattr__’ or
     ‘__getattribute__’.

   - bpo-26163(13): Improved frozenset() hash to create more distinct
     hash values when faced with datasets containing many similar
     values.

   - bpo-32550(14): Remove the STORE_ANNOTATION bytecode.

   - bpo-20104(15): Expose posix_spawn as a low level API in the os
     module.  (removed before 3.7.0rc1)

   - bpo-24340(16): Fixed estimation of the code stack size.

   - bpo-32436(17): Implement PEP 567(18) Context Variables.

   - bpo-18533(19): ‘repr()’ on a dict containing its own ‘values()’ or
     ‘items()’ no longer raises ‘RecursionError’; OrderedDict similarly.
     Instead, use ‘...’, as for other recursive structures.  Patch by
     Ben North.

   - bpo-20891(20): Py_Initialize() now creates the GIL. The GIL is no
     longer created “on demand” to fix a race condition when
     PyGILState_Ensure() is called in a non-Python thread.

   - bpo-32028(21): Leading whitespace is now correctly ignored when
     generating suggestions for converting Py2 print statements to Py3
     builtin print function calls.  Patch by Sanyam Khurana.

   - bpo-31179(22): Make dict.copy() up to 5.5 times faster.

   - bpo-31113(23): Get rid of recursion in the compiler for normal
     control flow.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32703

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32650

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28685

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32685

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32697

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32690

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32677

   (8) https://bugs.python.org/issue?@action=redirect&bpo=32670

   (9) https://peps.python.org/pep-0479/

   (10) https://bugs.python.org/issue?@action=redirect&bpo=32591

   (11) https://bugs.python.org/issue?@action=redirect&bpo=31368

   (12) https://bugs.python.org/issue?@action=redirect&bpo=32544

   (13) https://bugs.python.org/issue?@action=redirect&bpo=26163

   (14) https://bugs.python.org/issue?@action=redirect&bpo=32550

   (15) https://bugs.python.org/issue?@action=redirect&bpo=20104

   (16) https://bugs.python.org/issue?@action=redirect&bpo=24340

   (17) https://bugs.python.org/issue?@action=redirect&bpo=32436

   (18) https://peps.python.org/pep-0567/

   (19) https://bugs.python.org/issue?@action=redirect&bpo=18533

   (20) https://bugs.python.org/issue?@action=redirect&bpo=20891

   (21) https://bugs.python.org/issue?@action=redirect&bpo=32028

   (22) https://bugs.python.org/issue?@action=redirect&bpo=31179

   (23) https://bugs.python.org/issue?@action=redirect&bpo=31113


File: python.info,  Node: Biblioteca<144>,  Next: Documentação<58>,  Prev: Núcleo e embutidos<141>,  Up: Python 3 7 0 beta 1

1.23.69.2 Biblioteca
....................

   - bpo-25988(1): Deprecate exposing the contents of collections.abc in
     the regular collections module.

   - bpo-31429(2): The default cipher suite selection of the ssl module
     now uses a blacklist approach rather than a hard-coded whitelist.
     Python no longer re-enables ciphers that have been blocked by
     OpenSSL security update.  Default cipher suite selection can be
     configured on compile time.

   - bpo-30306(3): contextlib.contextmanager now releases the arguments
     passed to the underlying generator as soon as the context manager
     is entered.  Previously it would keep them alive for as long as the
     context manager was alive, even when not being used as a function
     decorator.  Patch by Martin Teichmann.

   - bpo-21417(4): Added support for setting the compression level for
     zipfile.ZipFile.

   - bpo-32251(5): Implement asyncio.BufferedProtocol (provisional API).

   - bpo-32513(6): In dataclasses, allow easier overriding of dunder
     methods without specifying decorator parameters.

   - bpo-32660(7): *note termios: e1. makes available ‘FIONREAD’,
     ‘FIONCLEX’, ‘FIOCLEX’, ‘FIOASYNC’ and ‘FIONBIO’ also under
     Solaris/derivatives.

   - bpo-27931(8): Fix email address header parsing error when the
     username is an empty quoted string.  Patch by Xiang Zhang.

   - bpo-32659(9): Under Solaris and derivatives, *note os.stat_result:
     1509. provides a st_fstype attribute.

   - bpo-32662(10): Implement Server.start_serving(),
     Server.serve_forever(), and Server.is_serving() methods.  Add
     ‘start_serving’ keyword parameter to loop.create_server() and
     loop.create_unix_server().

   - bpo-32391(11): Implement *note asyncio.StreamWriter.wait_closed():
     b1e. and *note asyncio.StreamWriter.is_closing(): b1f. methods

   - bpo-32643(12): Make Task._step, Task._wakeup and
     Future._schedule_callbacks methods private.

   - bpo-32630(13): Refactor decimal module to use contextvars to store
     decimal context.

   - bpo-32622(14): Add ‘asyncio.AbstractEventLoop.sendfile()’ method.

   - bpo-32304(15): distutils’ upload command no longer corrupts tar
     files ending with a CR byte, and no longer tries to convert CR to
     CRLF in any of the upload text fields.

   - bpo-32502(16): uuid.uuid1 no longer raises an exception if a 64-bit
     hardware address is encountered.

   - bpo-32596(17): ‘concurrent.futures’ imports ‘ThreadPoolExecutor’
     and ‘ProcessPoolExecutor’ lazily (using PEP 562(18)).  It makes
     ‘import asyncio’ about 15% faster because asyncio uses only
     ‘ThreadPoolExecutor’ by default.

   - bpo-31801(19): Add ‘_ignore_’ to ‘Enum’ so temporary variables can
     be used during class construction without being turned into
     members.

   - bpo-32576(20): Use queue.SimpleQueue() in places where it can be
     invoked from a weakref callback.

   - bpo-32574(21): Fix memory leak in asyncio.Queue, when the queue has
     limited size and it is full, the cancelation of queue.put() can
     cause a memory leak.  Patch by: José Melero.

   - bpo-32521(22): The nis module is now compatible with new libnsl and
     headers location.

   - bpo-32467(23): collections.abc.ValuesView now inherits from
     collections.abc.Collection.

   - bpo-32473(24): Improve ABCMeta._dump_registry() output readability

   - bpo-32102(25): New argument ‘capture_output’ for subprocess.run

   - bpo-32521(26): glibc has removed Sun RPC. Use replacement libtirpc
     headers and library in nis module.

   - bpo-32493(27): UUID module fixes build for FreeBSD/OpenBSD

   - bpo-32503(28): Pickling with protocol 4 no longer creates too small
     frames.

   - bpo-29237(29): Create enum for pstats sorting options

   - bpo-32454(30): Add close(fd) function to the socket module.

   - bpo-25942(31): The subprocess module is now more graceful when
     handling a Ctrl-C KeyboardInterrupt during subprocess.call,
     subprocess.run, or a Popen context manager.  It now waits a short
     amount of time for the child (presumed to have also gotten the
     SIGINT) to exit, before continuing the KeyboardInterrupt exception
     handling.  This still includes a SIGKILL in the call() and run()
     APIs, but at least the child had a chance first.

   - bpo-32433(32): The hmac module now has hmac.digest(), which
     provides an optimized HMAC digest.

   - bpo-28134(33): Sockets now auto-detect family, type and protocol
     from file descriptor by default.

   - bpo-32404(34): Fix bug where *note
     datetime.datetime.fromtimestamp(): 4ed. did not call __new__ in
     *note datetime.datetime: 1cc. subclasses.

   - bpo-32403(35): Improved speed of *note datetime.date: 1cd. and
     *note datetime.datetime: 1cc. alternate constructors.

   - bpo-32228(36): Ensure that ‘truncate()’ preserves the file position
     (as reported by ‘tell()’) after writes longer than the buffer size.

   - bpo-32410(37): Implement ‘loop.sock_sendfile’ for asyncio event
     loop.

   - bpo-22908(38): Added seek and tell to the ZipExtFile class.  This
     only works if the file object used to open the zipfile is seekable.

   - bpo-32373(39): Add socket.getblocking() method.

   - bpo-32248(40): Add *note importlib.resources: 7b. and *note
     importlib.abc.ResourceReader: b10. as the unified API for reading
     resources contained within packages.  Loaders wishing to support
     resource reading must implement the ‘get_resource_reader()’ method.
     File-based and zipimport-based loaders both implement these APIs.
     *note importlib.abc.ResourceLoader: c02. is deprecated in favor of
     these new APIs.

   - bpo-32320(41): collections.namedtuple() now supports default
     values.

   - bpo-29302(42): Add contextlib.AsyncExitStack.  Patch by Alexander
     Mohr and Ilya Kulakov.

   - bpo-31961(43): 'Removed in Python 3.7.0b2.'  The 'args' argument of
     subprocess.Popen can now be a *note path-like object: 2a0.  If
     'args' is given as a sequence, it’s first element can now be a
     *note path-like object: 2a0. as well.

   - bpo-31900(44): The *note locale.localeconv(): c18. function now
     sets temporarily the ‘LC_CTYPE’ locale to the ‘LC_NUMERIC’ locale
     to decode ‘decimal_point’ and ‘thousands_sep’ byte strings if they
     are non-ASCII or longer than 1 byte, and the ‘LC_NUMERIC’ locale is
     different than the ‘LC_CTYPE’ locale.  This temporary change
     affects other threads.  Same change for the *note str.format():
     621. method when formatting a number (*note int: 257, *note float:
     2f7, *note float: 2f7. and subclasses) with the ‘n’ type (ex:
     ‘'{:n}'.format(1234)’).

   - bpo-31853(45): Use super().method instead of socket.method in
     SSLSocket.  They were there most likely for legacy reasons.

   - bpo-31399(46): The ssl module now uses OpenSSL’s
     X509_VERIFY_PARAM_set1_host() and X509_VERIFY_PARAM_set1_ip() API
     to verify hostname and IP addresses.  Subject common name fallback
     can be disabled with SSLContext.hostname_checks_common_name.

   - bpo-14976(47): Add a queue.SimpleQueue class, an unbounded FIFO
     queue with a reentrant C implementation of put().

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25988

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31429

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30306

   (4) https://bugs.python.org/issue?@action=redirect&bpo=21417

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32251

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32513

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32660

   (8) https://bugs.python.org/issue?@action=redirect&bpo=27931

   (9) https://bugs.python.org/issue?@action=redirect&bpo=32659

   (10) https://bugs.python.org/issue?@action=redirect&bpo=32662

   (11) https://bugs.python.org/issue?@action=redirect&bpo=32391

   (12) https://bugs.python.org/issue?@action=redirect&bpo=32643

   (13) https://bugs.python.org/issue?@action=redirect&bpo=32630

   (14) https://bugs.python.org/issue?@action=redirect&bpo=32622

   (15) https://bugs.python.org/issue?@action=redirect&bpo=32304

   (16) https://bugs.python.org/issue?@action=redirect&bpo=32502

   (17) https://bugs.python.org/issue?@action=redirect&bpo=32596

   (18) https://peps.python.org/pep-0562/

   (19) https://bugs.python.org/issue?@action=redirect&bpo=31801

   (20) https://bugs.python.org/issue?@action=redirect&bpo=32576

   (21) https://bugs.python.org/issue?@action=redirect&bpo=32574

   (22) https://bugs.python.org/issue?@action=redirect&bpo=32521

   (23) https://bugs.python.org/issue?@action=redirect&bpo=32467

   (24) https://bugs.python.org/issue?@action=redirect&bpo=32473

   (25) https://bugs.python.org/issue?@action=redirect&bpo=32102

   (26) https://bugs.python.org/issue?@action=redirect&bpo=32521

   (27) https://bugs.python.org/issue?@action=redirect&bpo=32493

   (28) https://bugs.python.org/issue?@action=redirect&bpo=32503

   (29) https://bugs.python.org/issue?@action=redirect&bpo=29237

   (30) https://bugs.python.org/issue?@action=redirect&bpo=32454

   (31) https://bugs.python.org/issue?@action=redirect&bpo=25942

   (32) https://bugs.python.org/issue?@action=redirect&bpo=32433

   (33) https://bugs.python.org/issue?@action=redirect&bpo=28134

   (34) https://bugs.python.org/issue?@action=redirect&bpo=32404

   (35) https://bugs.python.org/issue?@action=redirect&bpo=32403

   (36) https://bugs.python.org/issue?@action=redirect&bpo=32228

   (37) https://bugs.python.org/issue?@action=redirect&bpo=32410

   (38) https://bugs.python.org/issue?@action=redirect&bpo=22908

   (39) https://bugs.python.org/issue?@action=redirect&bpo=32373

   (40) https://bugs.python.org/issue?@action=redirect&bpo=32248

   (41) https://bugs.python.org/issue?@action=redirect&bpo=32320

   (42) https://bugs.python.org/issue?@action=redirect&bpo=29302

   (43) https://bugs.python.org/issue?@action=redirect&bpo=31961

   (44) https://bugs.python.org/issue?@action=redirect&bpo=31900

   (45) https://bugs.python.org/issue?@action=redirect&bpo=31853

   (46) https://bugs.python.org/issue?@action=redirect&bpo=31399

   (47) https://bugs.python.org/issue?@action=redirect&bpo=14976


File: python.info,  Node: Documentação<58>,  Next: Testes<60>,  Prev: Biblioteca<144>,  Up: Python 3 7 0 beta 1

1.23.69.3 Documentação
......................

   - bpo-32724(1): Add references to some commands in the documentation
     of Pdb.  Patch by Stéphane Wirtel

   - bpo-32649(2): Complete the C API documentation, profiling and
     tracing part with the newly added per-opcode events.

   - bpo-17799(3): Explain real behaviour of sys.settrace and
     sys.setprofile and their C-API counterparts regarding which type of
     events are received in each function.  Patch by Pablo Galindo
     Salgado.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32724

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32649

   (3) https://bugs.python.org/issue?@action=redirect&bpo=17799


File: python.info,  Node: Testes<60>,  Next: Construção<65>,  Prev: Documentação<58>,  Up: Python 3 7 0 beta 1

1.23.69.4 Testes
................

   - bpo-32721(1): Fix test_hashlib to not fail if the _md5 module is
     not built.

   - bpo-28414(2): Add test cases for IDNA 2003 and 2008 host names.
     IDNA 2003 internationalized host names are working since
     bpo-31399(3) has landed.  IDNA 2008 are still broken.

   - bpo-32604(4): Add a new “_xxsubinterpreters” extension module that
     exposes the existing subinterpreter C-API and a new
     cross-interpreter data sharing mechanism.  The module is primarily
     intended for more thorough testing of the existing subinterpreter
     support.  Note that the _xxsubinterpreters module has been removed
     in 3.7.0rc1.

   - bpo-32602(5): Add test certs and test for ECDSA cert and EC/RSA
     dual mode.

   - bpo-32549(6): On Travis CI, Python now Compiles and uses a local
     copy of OpenSSL 1.1.0g for testing.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32721

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28414

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31399

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32604

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32602

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32549


File: python.info,  Node: Construção<65>,  Next: Windows<57>,  Prev: Testes<60>,  Up: Python 3 7 0 beta 1

1.23.69.5 Construção
....................

   - bpo-32635(1): Fix segfault of the crypt module when libxcrypt is
     provided instead of libcrypt at the system.

   - bpo-32598(2): Use autoconf to detect OpenSSL libs, headers and
     supported features.  The ax_check_openssl M4 macro uses pkg-config
     to locate OpenSSL and falls back to manual search.

   - bpo-32593(3): Drop support of FreeBSD 9 and older.

   - bpo-29708(4): If the ‘SOURCE_DATE_EPOCH’ environment variable is
     set, *note py_compile: b3. will always create hash-based ‘.pyc’
     files.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32635

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32598

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32593

   (4) https://bugs.python.org/issue?@action=redirect&bpo=29708


File: python.info,  Node: Windows<57>,  Next: macOS<46>,  Prev: Construção<65>,  Up: Python 3 7 0 beta 1

1.23.69.6 Windows
.................

   - bpo-32588(1): Create standalone _distutils_findvs module and add
     missing _queue module to installer.

   - bpo-29911(2): Ensure separate Modify and Uninstall buttons are
     displayed.

   - bpo-32507(3): Use app-local UCRT install rather than the proper
     update for old versions of Windows.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32588

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29911

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32507


File: python.info,  Node: macOS<46>,  Next: API C<58>,  Prev: Windows<57>,  Up: Python 3 7 0 beta 1

1.23.69.7 macOS
...............

   - bpo-32726(1): Provide an additional, more modern macOS installer
     variant that supports macOS 10.9+ systems in 64-bit mode only.
     Upgrade the supplied third-party libraries to OpenSSL 1.1.0g and to
     SQLite 3.22.0.  The 10.9+ installer now links with and supplies its
     own copy of Tcl/Tk 8.6.

   - bpo-28440(2): No longer add /Library/Python/3.x/site-packages to
     sys.path for macOS framework builds to avoid future conflicts.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32726

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28440


File: python.info,  Node: API C<58>,  Prev: macOS<46>,  Up: Python 3 7 0 beta 1

1.23.69.8 API C
...............

   - bpo-32681(1): Fix uninitialized variable ‘res’ in the C
     implementation of os.dup2.  Patch by Stéphane Wirtel

   - bpo-10381(2): Add C API access to the ‘datetime.timezone’
     constructor and ‘datetime.timzone.UTC’ singleton.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32681

   (2) https://bugs.python.org/issue?@action=redirect&bpo=10381


File: python.info,  Node: Python 3 7 0 alpha 4,  Next: Python 3 7 0 alpha 3,  Prev: Python 3 7 0 beta 1,  Up: Changelog

1.23.70 Python 3.7.0 alpha 4
----------------------------

'Data de lançamento: 2018-01-08'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<142>.
* Biblioteca: Biblioteca<145>.
* Documentação: Documentação<59>.
* Testes: Testes<61>.
* Windows: Windows<58>.
* Ferramentas/Demos: Ferramentas/Demos<34>.
* API C: API C<59>.


File: python.info,  Node: Núcleo e embutidos<142>,  Next: Biblioteca<145>,  Up: Python 3 7 0 alpha 4

1.23.70.1 Núcleo e embutidos
............................

   - bpo-31975(1): The default warning filter list now starts with a
     “default::DeprecationWarning:__main__” entry, so deprecation
     warnings are once again shown by default in single-file scripts and
     at the interactive prompt.

   - bpo-32226(2): ‘__class_getitem__’ is now an automatic class method.

   - bpo-32399(3): Add AIX uuid library support for RFC4122 using
     uuid_create() in libc.a

   - bpo-32390(4): Fix the compilation failure on AIX after the f_fsid
     field has been added to the object returned by os.statvfs()
     (bpo-32143(5)).  Original patch by Michael Felt.

   - bpo-32379(6): Make MRO computation faster when a class inherits
     from a single base.

   - bpo-32259(7): The error message of a TypeError raised when unpack
     non-iterable is now more specific.

   - bpo-27169(8): The ‘__debug__’ constant is now optimized out at
     compile time.  This fixes also bpo-22091(9).

   - bpo-32329(10): The *note -R: 1c11. option now turns on hash
     randomization when the *note PYTHONHASHSEED: 10b6. environment
     variable is set to ‘0’.  Previously, the option was ignored.
     Moreover, ‘sys.flags.hash_randomization’ is now properly set to 0
     when hash randomization is turned off by ‘PYTHONHASHSEED=0’.

   - bpo-30416(11): The optimizer is now protected from spending much
     time doing complex calculations and consuming much memory for
     creating large constants in constant folding.  Increased limits for
     constants that can be produced in constant folding.

   - bpo-32282(12): Fix an unnecessary ifdef in the include of
     VersionHelpers.h in socketmodule on Windows.

   - bpo-30579(13): Implement TracebackType.__new__ to allow
     Python-level creation of traceback objects, and make
     TracebackType.tb_next mutable.

   - bpo-32260(14): Don’t byte swap the input keys to the SipHash
     algorithm on big-endian platforms.  This should ensure siphash
     gives consistent results across platforms.

   - bpo-31506(15): Improve the error message logic for object.__new__
     and object.__init__.  Patch by Sanyam Khurana.

   - bpo-20361(16): ‘-b’ and ‘-bb’ now inject ‘'default::BytesWarning'’
     and ‘error::BytesWarning’ entries into ‘sys.warnoptions’, ensuring
     that they take precedence over any other warning filters configured
     via the ‘-W’ option or the ‘PYTHONWARNINGS’ environment variable.

   - bpo-32230(17): ‘-X dev’ now injects a ‘'default'’ entry into
     sys.warnoptions, ensuring that it behaves identically to actually
     passing ‘-Wdefault’ at the command line.

   - bpo-29240(18): Add a new UTF-8 mode: implementation of the PEP
     540(19).

   - bpo-32226(20): PEP 560(21): Add support for ‘__mro_entries__’ and
     ‘__class_getitem__’.  Implemented by Ivan Levkivskyi.

   - bpo-32225(22): PEP 562(23): Add support for module ‘__getattr__’
     and ‘__dir__’.  Implemented by Ivan Levkivskyi.

   - bpo-31901(24): The ‘atexit’ module now has its callback stored per
     interpreter.

   - bpo-31650(25): Implement PEP 552(26) (Deterministic pycs).  Python
     now supports invalidating bytecode cache files bashed on a source
     content hash rather than source last-modified time.

   - bpo-29469(27): Move constant folding from bytecode layer to AST
     layer.  Original patch by Eugene Toder.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31975

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32226

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32399

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32390

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32143

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32379

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32259

   (8) https://bugs.python.org/issue?@action=redirect&bpo=27169

   (9) https://bugs.python.org/issue?@action=redirect&bpo=22091

   (10) https://bugs.python.org/issue?@action=redirect&bpo=32329

   (11) https://bugs.python.org/issue?@action=redirect&bpo=30416

   (12) https://bugs.python.org/issue?@action=redirect&bpo=32282

   (13) https://bugs.python.org/issue?@action=redirect&bpo=30579

   (14) https://bugs.python.org/issue?@action=redirect&bpo=32260

   (15) https://bugs.python.org/issue?@action=redirect&bpo=31506

   (16) https://bugs.python.org/issue?@action=redirect&bpo=20361

   (17) https://bugs.python.org/issue?@action=redirect&bpo=32230

   (18) https://bugs.python.org/issue?@action=redirect&bpo=29240

   (19) https://peps.python.org/pep-0540/

   (20) https://bugs.python.org/issue?@action=redirect&bpo=32226

   (21) https://peps.python.org/pep-0560/

   (22) https://bugs.python.org/issue?@action=redirect&bpo=32225

   (23) https://peps.python.org/pep-0562/

   (24) https://bugs.python.org/issue?@action=redirect&bpo=31901

   (25) https://bugs.python.org/issue?@action=redirect&bpo=31650

   (26) https://peps.python.org/pep-0552/

   (27) https://bugs.python.org/issue?@action=redirect&bpo=29469


File: python.info,  Node: Biblioteca<145>,  Next: Documentação<59>,  Prev: Núcleo e embutidos<142>,  Up: Python 3 7 0 alpha 4

1.23.70.2 Biblioteca
....................

   - bpo-32506(1): Now that dict is defined as keeping insertion order,
     drop OrderedDict and just use plain dict.

   - bpo-32279(2): Add params to dataclasses.make_dataclasses(): init,
     repr, eq, order, hash, and frozen.  Pass them through to
     dataclass().

   - bpo-32278(3): Make type information optional on
     dataclasses.make_dataclass().  If omitted, the string ‘typing.Any’
     is used.

   - bpo-32499(4): Add dataclasses.is_dataclass(obj), which returns True
     if obj is a dataclass or an instance of one.

   - bpo-32468(5): Improve frame repr() to mention filename, code name
     and current line number.

   - bpo-23749(6): asyncio: Implement loop.start_tls()

   - bpo-32441(7): Return the new file descriptor (i.e., the second
     argument) from ‘os.dup2’.  Previously, ‘None’ was always returned.

   - bpo-32422(8): ‘functools.lru_cache’ uses less memory (3 words for
     each cached key) and takes about 1/3 time for cyclic GC.

   - bpo-31721(9): Prevent Python crash from happening when
     Future._log_traceback is set to True manually.  Now it can only be
     set to False, or a ValueError is raised.

   - bpo-32415(10): asyncio: Add Task.get_loop() and Future.get_loop()

   - bpo-26133(11): Don’t unsubscribe signals in asyncio UNIX event loop
     on interpreter shutdown.

   - bpo-32363(12): Make asyncio.Task.set_exception() and set_result()
     raise NotImplementedError.  Task._step() and Future.__await__()
     raise proper exceptions when they are in an invalid state, instead
     of raising an AssertionError.

   - bpo-32357(13): Optimize asyncio.iscoroutine() and
     loop.create_task() for non-native coroutines (e.g.  async/await
     compiled with Cython).  ‘loop.create_task(python_coroutine)’ used
     to be 20% faster than ‘loop.create_task(cython_coroutine)’.  Now,
     the latter is as fast.

   - bpo-32356(14): asyncio.transport.resume_reading() and
     pause_reading() are now idempotent.  New transport.is_reading()
     method is added.

   - bpo-32355(15): Optimize asyncio.gather(); now up to 15% faster.

   - bpo-32351(16): Use fastpath in asyncio.sleep if delay<0 (2x boost)

   - bpo-32348(17): Optimize asyncio.Future schedule/add/remove
     callback.  The optimization shows 3-6% performance improvements of
     async/await code.

   - bpo-32331(18): Fix socket.settimeout() and socket.setblocking() to
     keep socket.type as is.  Fix socket.socket() constructor to reset
     any bit flags applied to socket’s type.  This change only affects
     OSes that have SOCK_NONBLOCK and/or SOCK_CLOEXEC.

   - bpo-32248(19): Add *note importlib.abc.ResourceReader: b10. as an
     ABC for loaders to provide a unified API for reading resources
     contained within packages.  Also add *note importlib.resources: 7b.
     as the port of ‘importlib_resources’.

   - bpo-32311(20): Implement asyncio.create_task(coro) shortcut

   - bpo-32327(21): Convert asyncio functions that were documented as
     coroutines to coroutines.  Affected functions: loop.sock_sendall,
     loop.sock_recv, loop.sock_accept, loop.getaddrinfo,
     loop.getnameinfo.

   - bpo-32323(22): *note urllib.parse.urlsplit(): d61. does not convert
     zone-id (scope) to lower case for scoped IPv6 addresses in
     hostnames now.

   - bpo-32302(23): Fix bdist_wininst of distutils for CRT v142: it
     binary compatible with CRT v140.

   - bpo-29711(24): Fix ‘stop_serving’ in asyncio proactor loop kill all
     listening servers

   - bpo-32308(25): *note re.sub(): 2a3. now replaces empty matches
     adjacent to a previous non-empty match.

   - bpo-29970(26): Abort asyncio SSLProtocol connection if handshake
     not complete within 10 seconds.

   - bpo-32314(27): Implement asyncio.run().

   - bpo-17852(28): Revert incorrect fix based on misunderstanding of
     _Py_PyAtExit() semantics.

   - bpo-32296(29): Implement asyncio._get_running_loop() and
     get_event_loop() in C. This makes them 4x faster.

   - bpo-32250(30): Implement ‘asyncio.current_task()’ and
     ‘asyncio.all_tasks()’.  Add helpers intended to be used by
     alternative task implementations: ‘asyncio._register_task’,
     ‘asyncio._enter_task’, ‘asyncio._leave_task’ and
     ‘asyncio._unregister_task’.  Deprecate
     ‘asyncio.Task.current_task()’ and ‘asyncio.Task.all_tasks()’.

   - bpo-32255(31): A single empty field is now always quoted when
     written into a CSV file.  This allows to distinguish an empty row
     from a row consisting of a single empty field.  Patch by Licht
     Takeuchi.

   - bpo-32277(32): Raise ‘NotImplementedError’ instead of ‘SystemError’
     on platforms where ‘chmod(..., follow_symlinks=False)’ is not
     supported.  Patch by Anthony Sottile.

   - bpo-30050(33): New argument warn_on_full_buffer to
     signal.set_wakeup_fd lets you control whether Python prints a
     warning on stderr when the wakeup fd buffer overflows.

   - bpo-29137(34): The ‘fpectl’ library has been removed.  It was never
     enabled by default, never worked correctly on x86-64, and it
     changed the Python ABI in ways that caused unexpected breakage of C
     extensions.

   - bpo-32273(35): Move asyncio.test_utils to test.test_asyncio.

   - bpo-32272(36): Remove asyncio.async() function.

   - bpo-32269(37): Add asyncio.get_running_loop() function.

   - bpo-32265(38): All class and static methods of builtin types now
     are correctly classified by inspect.classify_class_attrs() and
     grouped in pydoc ouput.  Added types.ClassMethodDescriptorType for
     unbound class methods of builtin types.

   - bpo-32253(39): Deprecate ‘yield from lock’, ‘await lock’, ‘with
     (yield from lock)’ and ‘with await lock’ for asyncio
     synchronization primitives.

   - bpo-22589(40): Changed MIME type of .bmp from ‘image/x-ms-bmp’ to
     ‘image/bmp’

   - bpo-32193(41): Convert asyncio to use 'async/await' syntax.  Old
     styled ‘yield from’ is still supported too.

   - bpo-32206(42): Add support to run modules with pdb

   - bpo-32227(43): ‘functools.singledispatch’ now supports registering
     implementations using type annotations.

   - bpo-15873(44): Added new alternate constructors *note
     datetime.datetime.fromisoformat(): 617, *note
     datetime.time.fromisoformat(): 616. and *note
     datetime.date.fromisoformat(): 615. as the inverse operation of
     each classes’s respective ‘isoformat’ methods.

   - bpo-32199(45): The getnode() ip getter now uses ‘ip link’ instead
     of ‘ip link list’.

   - bpo-32143(46): os.statvfs() includes the f_fsid field from
     statvfs(2)

   - bpo-26439(47): Fix ctypes.util.find_library() for AIX by
     implementing ctypes._aix.find_library() Patch by: Michael Felt

   - bpo-31993(48): The pickler now uses less memory when serializing
     large bytes and str objects into a file.  Pickles created with
     protocol 4 will require less memory for unpickling large bytes and
     str objects.

   - bpo-27456(49): Ensure TCP_NODELAY is set on Linux.  Tests by Victor
     Stinner.

   - bpo-31778(50): ast.literal_eval() is now more strict.  Addition and
     subtraction of arbitrary numbers no longer allowed.

   - bpo-31802(51): Importing native path module (‘posixpath’, ‘ntpath’)
     now works even if the ‘os’ module still is not imported.

   - bpo-30241(52): Add contextlib.AbstractAsyncContextManager.  Patch
     by Jelle Zijlstra.

   - bpo-31699(53): Fix deadlocks in *note
     concurrent.futures.ProcessPoolExecutor: 8f4. when task arguments or
     results cause pickling or unpickling errors.  This should make sure
     that calls to the ‘ProcessPoolExecutor’ API always eventually
     return.

   - bpo-15216(54): ‘TextIOWrapper.reconfigure()’ supports changing
     'encoding', 'errors', and 'newline'.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32506

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32279

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32278

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32499

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32468

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23749

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32441

   (8) https://bugs.python.org/issue?@action=redirect&bpo=32422

   (9) https://bugs.python.org/issue?@action=redirect&bpo=31721

   (10) https://bugs.python.org/issue?@action=redirect&bpo=32415

   (11) https://bugs.python.org/issue?@action=redirect&bpo=26133

   (12) https://bugs.python.org/issue?@action=redirect&bpo=32363

   (13) https://bugs.python.org/issue?@action=redirect&bpo=32357

   (14) https://bugs.python.org/issue?@action=redirect&bpo=32356

   (15) https://bugs.python.org/issue?@action=redirect&bpo=32355

   (16) https://bugs.python.org/issue?@action=redirect&bpo=32351

   (17) https://bugs.python.org/issue?@action=redirect&bpo=32348

   (18) https://bugs.python.org/issue?@action=redirect&bpo=32331

   (19) https://bugs.python.org/issue?@action=redirect&bpo=32248

   (20) https://bugs.python.org/issue?@action=redirect&bpo=32311

   (21) https://bugs.python.org/issue?@action=redirect&bpo=32327

   (22) https://bugs.python.org/issue?@action=redirect&bpo=32323

   (23) https://bugs.python.org/issue?@action=redirect&bpo=32302

   (24) https://bugs.python.org/issue?@action=redirect&bpo=29711

   (25) https://bugs.python.org/issue?@action=redirect&bpo=32308

   (26) https://bugs.python.org/issue?@action=redirect&bpo=29970

   (27) https://bugs.python.org/issue?@action=redirect&bpo=32314

   (28) https://bugs.python.org/issue?@action=redirect&bpo=17852

   (29) https://bugs.python.org/issue?@action=redirect&bpo=32296

   (30) https://bugs.python.org/issue?@action=redirect&bpo=32250

   (31) https://bugs.python.org/issue?@action=redirect&bpo=32255

   (32) https://bugs.python.org/issue?@action=redirect&bpo=32277

   (33) https://bugs.python.org/issue?@action=redirect&bpo=30050

   (34) https://bugs.python.org/issue?@action=redirect&bpo=29137

   (35) https://bugs.python.org/issue?@action=redirect&bpo=32273

   (36) https://bugs.python.org/issue?@action=redirect&bpo=32272

   (37) https://bugs.python.org/issue?@action=redirect&bpo=32269

   (38) https://bugs.python.org/issue?@action=redirect&bpo=32265

   (39) https://bugs.python.org/issue?@action=redirect&bpo=32253

   (40) https://bugs.python.org/issue?@action=redirect&bpo=22589

   (41) https://bugs.python.org/issue?@action=redirect&bpo=32193

   (42) https://bugs.python.org/issue?@action=redirect&bpo=32206

   (43) https://bugs.python.org/issue?@action=redirect&bpo=32227

   (44) https://bugs.python.org/issue?@action=redirect&bpo=15873

   (45) https://bugs.python.org/issue?@action=redirect&bpo=32199

   (46) https://bugs.python.org/issue?@action=redirect&bpo=32143

   (47) https://bugs.python.org/issue?@action=redirect&bpo=26439

   (48) https://bugs.python.org/issue?@action=redirect&bpo=31993

   (49) https://bugs.python.org/issue?@action=redirect&bpo=27456

   (50) https://bugs.python.org/issue?@action=redirect&bpo=31778

   (51) https://bugs.python.org/issue?@action=redirect&bpo=31802

   (52) https://bugs.python.org/issue?@action=redirect&bpo=30241

   (53) https://bugs.python.org/issue?@action=redirect&bpo=31699

   (54) https://bugs.python.org/issue?@action=redirect&bpo=15216


File: python.info,  Node: Documentação<59>,  Next: Testes<61>,  Prev: Biblioteca<145>,  Up: Python 3 7 0 alpha 4

1.23.70.3 Documentação
......................

   - bpo-32418(1): Add get_loop() method to Server and AbstractServer
     classes.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32418


File: python.info,  Node: Testes<61>,  Next: Windows<58>,  Prev: Documentação<59>,  Up: Python 3 7 0 alpha 4

1.23.70.4 Testes
................

   - bpo-32252(1): Fix faulthandler_suppress_crash_report() used to
     prevent core dump files when testing crashes.  getrlimit() returns
     zero on success.

   - bpo-32002(2): Adjust C locale coercion testing for the empty locale
     and POSIX locale cases to more readily adjust to platform dependent
     behaviour.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32252

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32002


File: python.info,  Node: Windows<58>,  Next: Ferramentas/Demos<34>,  Prev: Testes<61>,  Up: Python 3 7 0 alpha 4

1.23.70.5 Windows
.................

   - bpo-19764(1): Implement support for
     ‘subprocess.Popen(close_fds=True)’ on Windows.  Patch by Segev
     Finer.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19764


File: python.info,  Node: Ferramentas/Demos<34>,  Next: API C<59>,  Prev: Windows<58>,  Up: Python 3 7 0 alpha 4

1.23.70.6 Ferramentas/Demos
...........................

   - bpo-24960(1): 2to3 and lib2to3 can now read pickled grammar files
     using pkgutil.get_data() rather than probing the filesystem.  This
     lets 2to3 and lib2to3 work when run from a zipfile.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24960


File: python.info,  Node: API C<59>,  Prev: Ferramentas/Demos<34>,  Up: Python 3 7 0 alpha 4

1.23.70.7 API C
...............

   - bpo-32030(1): Py_Initialize() doesn’t reset the memory allocators
     to default if the ‘PYTHONMALLOC’ environment variable is not set.

   - bpo-29084(2): Undocumented C API for OrderedDict has been excluded
     from the limited C API. It was added by mistake and actually never
     worked in the limited C API.

   - bpo-32264(3): Moved the pygetopt.h header into internal/, since it
     has no public APIs.

   - bpo-32241(4): ‘Py_SetProgramName()’ and ‘Py_SetPythonHome()’ now
     take the ‘const wchar *’ arguments instead of ‘wchar *’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32030

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29084

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32264

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32241


File: python.info,  Node: Python 3 7 0 alpha 3,  Next: Python 3 7 0 alpha 2,  Prev: Python 3 7 0 alpha 4,  Up: Changelog

1.23.71 Python 3.7.0 alpha 3
----------------------------

'Data de lançamento: 2017-12-05'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<143>.
* Biblioteca: Biblioteca<146>.
* Documentação: Documentação<60>.
* Testes: Testes<62>.
* Construção: Construção<66>.
* Windows: Windows<59>.
* macOS: macOS<47>.
* IDLE: IDLE<47>.
* Ferramentas/Demos: Ferramentas/Demos<35>.
* API C: API C<60>.


File: python.info,  Node: Núcleo e embutidos<143>,  Next: Biblioteca<146>,  Up: Python 3 7 0 alpha 3

1.23.71.1 Núcleo e embutidos
............................

   - bpo-32176(1): co_flags.CO_NOFREE is now always set correctly by the
     code object constructor based on freevars and cellvars, rather than
     needing to be set correctly by the caller.  This ensures it will be
     cleared automatically when additional cell references are injected
     into a modified code object and function.

   - bpo-10544(2): Yield expressions are now deprecated in
     comprehensions and generator expressions.  They are still permitted
     in the definition of the outermost iterable, as that is evaluated
     directly in the enclosing scope.

   - bpo-32137(3): The repr of deeply nested dict now raises a
     RecursionError instead of crashing due to a stack overflow.

   - bpo-32096(4): Revert memory allocator changes in the C API: move
     structures back from _PyRuntime to Objects/obmalloc.c.  The memory
     allocators are once again initialized statically, and so
     PyMem_RawMalloc() and Py_DecodeLocale() can be called before
     _PyRuntime_Initialize().

   - bpo-32043(5): Add a new “developer mode”: new “-X dev” command line
     option to enable debug checks at runtime.

   - bpo-32023(6): SyntaxError is now correctly raised when a generator
     expression without parenthesis is used instead of an inheritance
     list in a class definition.  The duplication of the parentheses can
     be omitted only on calls.

   - bpo-32012(7): SyntaxError is now correctly raised when a generator
     expression without parenthesis is passed as an argument, but
     followed by a trailing comma.  A generator expression always needs
     to be directly inside a set of parentheses and cannot have a comma
     on either side.

   - bpo-28180(8): A new internal ‘_Py_SetLocaleFromEnv(category)’
     helper function has been added in order to improve the consistency
     of behaviour across different ‘libc’ implementations (e.g.  Android
     doesn’t support setting the locale from the environment by
     default).

   - bpo-31949(9): Fixed several issues in printing tracebacks
     (PyTraceBack_Print()).  Setting sys.tracebacklimit to 0 or less now
     suppresses printing tracebacks.  Setting sys.tracebacklimit to None
     now causes using the default limit.  Setting sys.tracebacklimit to
     an integer larger than LONG_MAX now means using the limit LONG_MAX
     rather than the default limit.  Fixed integer overflows in the case
     of more than ‘2**31’ traceback items on Windows.  Fixed output
     errors handling.

   - bpo-30696(10): Fix the interactive interpreter looping endlessly
     when no memory.

   - bpo-20047(11): Bytearray methods partition() and rpartition() now
     accept only bytes-like objects as separator, as documented.  In
     particular they now raise TypeError rather of returning a bogus
     result when an integer is passed as a separator.

   - bpo-21720(12): BytesWarning no longer emitted when the 'fromlist'
     argument of ‘__import__()’ or the ‘__all__’ attribute of the module
     contain bytes instances.

   - bpo-31845(13): Environment variables are once more read correctly
     at interpreter startup.

   - bpo-28936(14): Ensure that lexically first syntax error involving a
     parameter and ‘global’ or ‘nonlocal’ is detected first at a given
     scope.  Patch by Ivan Levkivskyi.

   - bpo-31825(15): Fixed OverflowError in the ‘unicode-escape’ codec
     and in codecs.escape_decode() when decode an escaped non-ascii
     byte.

   - bpo-31618(16): The per-frame tracing logic added in 3.7a1 has been
     altered so that ‘frame->f_lineno’ is updated before either ‘"line"’
     or ‘"opcode"’ events are emitted.  Previously, opcode events were
     emitted first, and therefore would occasionally see stale line
     numbers on the frame.  The behavior of this feature has changed
     slightly as a result: when both ‘f_trace_lines’ and
     ‘f_trace_opcodes’ are enabled, line events now occur first.

   - bpo-28603(17): Print the full context/cause chain of exceptions on
     interpreter exit, even if an exception in the chain is unhashable
     or compares equal to later ones.  Patch by Zane Bitter.

   - bpo-31786(18): Fix timeout rounding in the select module to round
     correctly negative timeouts between -1.0 and 0.0.  The functions
     now block waiting for events as expected.  Previously, the call was
     incorrectly non-blocking.  Patch by Pablo Galindo.

   - bpo-31781(19): Prevent crashes when calling methods of an
     uninitialized ‘zipimport.zipimporter’ object.  Patch by Oren
     Milman.

   - bpo-30399(20): Standard repr() of BaseException with a single
     argument no longer contains redundant trailing comma.

   - bpo-31626(21): Fixed a bug in debug memory allocator.  There was a
     write to freed memory after shrinking a memory block.

   - bpo-30817(22): ‘PyErr_PrintEx()’ clears now the ignored exception
     that may be raised by ‘_PySys_SetObjectId()’, for example when no
     memory.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32176

   (2) https://bugs.python.org/issue?@action=redirect&bpo=10544

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32137

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32096

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32043

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32023

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32012

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28180

   (9) https://bugs.python.org/issue?@action=redirect&bpo=31949

   (10) https://bugs.python.org/issue?@action=redirect&bpo=30696

   (11) https://bugs.python.org/issue?@action=redirect&bpo=20047

   (12) https://bugs.python.org/issue?@action=redirect&bpo=21720

   (13) https://bugs.python.org/issue?@action=redirect&bpo=31845

   (14) https://bugs.python.org/issue?@action=redirect&bpo=28936

   (15) https://bugs.python.org/issue?@action=redirect&bpo=31825

   (16) https://bugs.python.org/issue?@action=redirect&bpo=31618

   (17) https://bugs.python.org/issue?@action=redirect&bpo=28603

   (18) https://bugs.python.org/issue?@action=redirect&bpo=31786

   (19) https://bugs.python.org/issue?@action=redirect&bpo=31781

   (20) https://bugs.python.org/issue?@action=redirect&bpo=30399

   (21) https://bugs.python.org/issue?@action=redirect&bpo=31626

   (22) https://bugs.python.org/issue?@action=redirect&bpo=30817


File: python.info,  Node: Biblioteca<146>,  Next: Documentação<60>,  Prev: Núcleo e embutidos<143>,  Up: Python 3 7 0 alpha 3

1.23.71.2 Biblioteca
....................

   - bpo-28556(1): Two minor fixes for ‘typing’ module: allow shallow
     copying instances of generic classes, improve interaction of
     ‘__init_subclass__’ with generics.  Original PRs by Ivan
     Levkivskyi.

   - bpo-32214(2): PEP 557, Data Classes.  Provides a decorator which
     adds boilerplate methods to classes which use type annotations so
     specify fields.

   - bpo-27240(3): The header folding algorithm for the new email
     policies has been rewritten, which also fixes bpo-30788(4),
     bpo-31831(5), and bpo-32182(6).  In particular, RFC2231 folding is
     now done correctly.

   - bpo-32186(7): io.FileIO.readall() and io.FileIO.read() now release
     the GIL when getting the file size.  Fixed hang of all threads with
     inaccessible NFS server.  Patch by Nir Soffer.

   - bpo-32101(8): Add *note sys.flags.dev_mode: 1c1b. flag

   - bpo-32154(9): The ‘asyncio.windows_utils.socketpair()’ function has
     been removed: use directly *note socket.socketpair(): c10. which is
     available on all platforms since Python 3.5 (before, it wasn’t
     available on Windows).  ‘asyncio.windows_utils.socketpair()’ was
     just an alias to ‘socket.socketpair’ on Python 3.5 and newer.

   - bpo-32089(10): warnings: In development (-X dev) and debug mode
     (pydebug build), use the “default” action for ResourceWarning,
     rather than the “always” action, in the default warnings filters.

   - bpo-32107(11): ‘uuid.getnode()’ now preferentially returns
     universally administered MAC addresses if available, over locally
     administered MAC addresses.  This makes a better guarantee for
     global uniqueness of UUIDs returned from ‘uuid.uuid1()’.  If only
     locally administered MAC addresses are available, the first such
     one found is returned.

   - bpo-23033(12): Wildcard is now supported in hostname when it is one
     and only character in the left most segment of hostname in second
     argument of ‘ssl.match_hostname()’.  Patch by Mandeep Singh.

   - bpo-12239(13): Make ‘msilib.SummaryInformation.GetProperty()’
     return ‘None’ when the value of property is ‘VT_EMPTY’.  Initial
     patch by Mark Mc Mahon.

   - bpo-28334(14): Use *note os.path.expanduser(): a1e. to find the
     ‘~/.netrc’ file in *note netrc.netrc: 1a05.  If it does not exist,
     *note FileNotFoundError: 42b. is raised.  Patch by Dimitri
     Merejkowsky.

   - bpo-32121(15): Made ‘tracemalloc.Traceback’ behave more like the
     traceback module, sorting the frames from oldest to most recent.
     ‘Traceback.format()’ now accepts negative 'limit', truncating the
     result to the ‘abs(limit)’ oldest frames.  To get the old
     behaviour, one can use the new 'most_recent_first' argument to
     ‘Traceback.format()’.  (Patch by Jesse Bakker.)

   - bpo-31325(16): Fix wrong usage of *note collections.namedtuple():
     1ca. in the *note RobotFileParser.parse(): 1c1c. method.  Initial
     patch by Robin Wellner.

   - bpo-12382(17): ‘msilib.OpenDatabase()’ now raises a better
     exception message when it couldn’t open or create an MSI file.
     Initial patch by William Tisäter.

   - bpo-19610(18): ‘setup()’ now warns about invalid types for some
     fields.  The ‘distutils.dist.Distribution’ class now warns when
     ‘classifiers’, ‘keywords’ and ‘platforms’ fields are not specified
     as a list or a string.

   - bpo-32071(19): Added the ‘-k’ command-line option to ‘python -m
     unittest’ to run only tests that match the given pattern(s).

   - bpo-10049(20): Added 'nullcontext' no-op context manager to
     contextlib.  This provides a simpler and faster alternative to
     ExitStack() when handling optional context managers.

   - bpo-28684(21): The new test.support.skip_unless_bind_unix_socket()
     decorator is used here to skip asyncio tests that fail because the
     platform lacks a functional bind() function for unix domain sockets
     (as it is the case for non root users on the recent Android
     versions that run now SELinux in enforcing mode).

   - bpo-32110(22): ‘codecs.StreamReader.read(n)’ now returns not more
     than 'n' characters/bytes for non-negative 'n'.  This makes it
     compatible with ‘read()’ methods of other file-like objects.

   - bpo-27535(23): The warnings module doesn’t leak memory anymore in
     the hidden warnings registry for the “ignore” action of warnings
     filters.  warn_explicit() function doesn’t add the warning key to
     the registry anymore for the “ignore” action.

   - bpo-32088(24): warnings: When Python is build is debug mode
     (‘Py_DEBUG’), *note DeprecationWarning: 1a5, *note
     PendingDeprecationWarning: 8ce. and *note ImportWarning: 4fa.
     warnings are now displayed by default.

   - bpo-1647489(25): Fixed searching regular expression patterns that
     could match an empty string.  Non-empty string can now be correctly
     found after matching an empty string.

   - bpo-25054(26): Added support of splitting on a pattern that could
     match an empty string.

   - bpo-32072(27): Fixed issues with binary plists: Fixed saving
     bytearrays.  Identical objects will be saved only once.  Equal
     references will be load as identical objects.  Added support for
     saving and loading recursive data structures.

   - bpo-32069(28): Drop legacy SSL transport from asyncio,
     ssl.MemoryBIO is always used anyway.

   - bpo-32066(29): asyncio: Support pathlib.Path in
     create_unix_connection; sock arg should be optional

   - bpo-32046(30): Updates 2to3 to convert from
     operator.isCallable(obj) to callable(obj).  Patch by Donghee Na.

   - bpo-32018(31): inspect.signature should follow PEP 8(32), if the
     parameter has an annotation and a default value.  Patch by Donghee
     Na.

   - bpo-32025(33): Add time.thread_time() and time.thread_time_ns()

   - bpo-32037(34): Integers that fit in a signed 32-bit integer will be
     now pickled with protocol 0 using the INT opcode.  This will
     decrease the size of a pickle, speed up pickling and unpickling,
     and make these integers be unpickled as int instances in Python 2.

   - bpo-32034(35): Make asyncio.IncompleteReadError and
     LimitOverrunError pickleable.

   - bpo-32015(36): Fixed the looping of asyncio in the case of
     reconnection the socket during waiting async read/write from/to the
     socket.

   - bpo-32011(37): Restored support of loading marshal files with the
     TYPE_INT64 code.  These files can be produced in Python 2.7.

   - bpo-28369(38): Enhance add_reader/writer check that socket is not
     used by some transport.  Before, only cases when add_reader/writer
     were called with an int FD were supported.  Now the check is
     implemented correctly for all file-like objects.

   - bpo-31976(39): Fix race condition when flushing a file is slow,
     which can cause a segfault if closing the file from another thread.

   - bpo-31985(40): Formally deprecated aifc.openfp, sunau.openfp, and
     wave.openfp.  Since change 7bc817d5ba917528e8bd07ec461c635291e7b06a
     in 1993, openfp in each of the three modules had been pointing to
     that module’s open function as a matter of backwards compatibility,
     though it had been both untested and undocumented.

   - bpo-21862(41): cProfile command line now accepts ‘-m module_name’
     as an alternative to script path.  Patch by Sanyam Khurana.

   - bpo-31970(42): Reduce performance overhead of asyncio debug mode.

   - bpo-31843(43): 'database' argument of sqlite3.connect() now accepts
     a *note path-like object: 2a0, instead of just a string.

   - bpo-31945(44): Add Configurable 'blocksize' to ‘HTTPConnection’ and
     ‘HTTPSConnection’ for improved upload throughput.  Patch by Nir
     Soffer.

   - bpo-31943(45): Add a ‘cancelled()’ method to *note asyncio.Handle:
     1c1d.  Patch by Marat Sharafutdinov.

   - bpo-9678(46): Fixed determining the MAC address in the uuid module:
     Using ifconfig on NetBSD and OpenBSD. Using arp on Linux, FreeBSD,
     NetBSD and OpenBSD. Based on patch by Takayuki Shimizukawa.

   - bpo-30057(47): Fix potential missed signal in signal.signal().

   - bpo-31933(48): Fix Blake2 params leaf_size and node_offset on big
     endian platforms.  Patch by Jack O’Connor.

   - bpo-21423(49): Add an initializer argument to
     {Process,Thread}PoolExecutor

   - bpo-31927(50): Fixed compilation of the socket module on NetBSD 8.
     Fixed assertion failure or reading arbitrary data when parse a
     AF_BLUETOOTH address on NetBSD and DragonFly BSD.

   - bpo-27666(51): Fixed stack corruption in curses.box() and
     curses.ungetmouse() when the size of types chtype or mmask_t is
     less than the size of C long.  curses.box() now accepts characters
     as arguments.  Based on patch by Steve Fink.

   - bpo-31917(52): Add 3 new clock identifiers: *note
     time.CLOCK_BOOTTIME: ba6, *note time.CLOCK_PROF: ba7. and *note
     time.CLOCK_UPTIME: ba8.

   - bpo-31897(53): plistlib now catches more errors when read binary
     plists and raises InvalidFileException instead of unexpected
     exceptions.

   - bpo-25720(54): Fix the method for checking pad state of curses
     WINDOW. Patch by Masayuki Yamamoto.

   - bpo-31893(55): Fixed the layout of the kqueue_event structure on
     OpenBSD and NetBSD. Fixed the comparison of the kqueue_event
     objects.

   - bpo-31891(56): Fixed building the curses module on NetBSD.

   - bpo-31884(57): added required constants to subprocess module for
     setting priority on windows

   - bpo-28281(58): Remove year (1-9999) limits on the
     Calendar.weekday() function.  Patch by Mark Gollahon.

   - bpo-31702(59): crypt.mksalt() now allows to specify the number of
     rounds for SHA-256 and SHA-512 hashing.

   - bpo-30639(60): *note inspect.getfile(): 1c1e. no longer computes
     the repr of unknown objects to display in an error message, to
     protect against badly behaved custom reprs.

   - bpo-30768(61): Fix the pthread+semaphore implementation of
     PyThread_acquire_lock_timed() when called with timeout > 0 and
     intr_flag=0: recompute the timeout if sem_timedwait() is
     interrupted by a signal (EINTR). See also the PEP 475(62).

   - bpo-31854(63): Add ‘mmap.ACCESS_DEFAULT’ constant.

   - bpo-31834(64): Use optimized code for BLAKE2 only with SSSE3+.  The
     pure SSE2 implementation is slower than the pure C reference
     implementation.

   - bpo-28292(65): Calendar.itermonthdates() will now consistently
     raise an exception when a date falls outside of the 0001-01-01
     through 9999-12-31 range.  To support applications that cannot
     tolerate such exceptions, the new methods itermonthdays3() and
     itermonthdays4() are added.  The new methods return tuples and are
     not restricted by the range supported by datetime.date.

   - bpo-28564(66): The shutil.rmtree() function has been sped up to
     20–40%.  This was done using the os.scandir() function.

   - bpo-28416(67): Instances of pickle.Pickler subclass with the
     persistent_id() method and pickle.Unpickler subclass with the
     persistent_load() method no longer create reference cycles.

   - bpo-31653(68): Don’t release the GIL if we can acquire a
     multiprocessing semaphore immediately.

   - bpo-28326(69): Fix multiprocessing.Process when stdout and/or
     stderr is closed or None.

   - bpo-20825(70): Add ‘subnet_of’ and ‘superset_of’ containment tests
     to *note ipaddress.IPv6Network: 1ff. and *note
     ipaddress.IPv4Network: 1fe.  Patch by Michel Albert and Cheryl
     Sabella.

   - bpo-31827(71): Remove the os.stat_float_times() function.  It was
     introduced in Python 2.3 for backward compatibility with Python
     2.2, and was deprecated since Python 3.1.

   - bpo-31756(72): Add a ‘subprocess.Popen(text=False)’ keyword
     argument to ‘subprocess’ functions to be more explicit about when
     the library should attempt to decode outputs into text.  Patch by
     Andrew Clegg.

   - bpo-31819(73): Add AbstractEventLoop.sock_recv_into().

   - bpo-31457(74): If nested log adapters are used, the inner
     ‘process()’ methods are no longer omitted.

   - bpo-31457(75): The ‘manager’ property on LoggerAdapter objects is
     now properly settable.

   - bpo-31806(76): Fix timeout rounding in time.sleep(),
     threading.Lock.acquire() and socket.socket.settimeout() to round
     correctly negative timeouts between -1.0 and 0.0.  The functions
     now block waiting for events as expected.  Previously, the call was
     incorrectly non-blocking.  Patch by Pablo Galindo.

   - bpo-31803(77): time.clock() and time.get_clock_info(‘clock’) now
     emit a DeprecationWarning warning.

   - bpo-31800(78): Extended support for parsing UTC offsets.  strptime
     ‘%z’ can now parse the output generated by datetime.isoformat,
     including seconds and microseconds.

   - bpo-28603(79): traceback: Fix a TypeError that occurred during
     printing of exception tracebacks when either the current exception
     or an exception in its context/cause chain is unhashable.  Patch by
     Zane Bitter.

   - bpo-30541(80): Add new function to seal a mock and prevent the
     automatically creation of child mocks.  Patch by Mario Corchero.

   - bpo-31784(81): Implement the PEP 564(82), add new 6 new functions
     with nanosecond resolution to the *note time: ee. module: *note
     clock_gettime_ns(): af4, *note clock_settime_ns(): af5, *note
     monotonic_ns(): af6, *note perf_counter_ns(): af7, *note
     process_time_ns(): af8, *note time_ns(): af9.

   - bpo-30143(83): 2to3 now generates a code that uses abstract
     collection classes from collections.abc rather than collections.

   - bpo-31770(84): Prevent a crash when calling the ‘__init__()’ method
     of a ‘sqlite3.Cursor’ object more than once.  Patch by Oren Milman.

   - bpo-31764(85): Prevent a crash in ‘sqlite3.Cursor.close()’ in case
     the ‘Cursor’ object is uninitialized.  Patch by Oren Milman.

   - bpo-31752(86): Fix possible crash in timedelta constructor called
     with custom integers.

   - bpo-31620(87): an empty asyncio.Queue now doesn’t leak memory when
     queue.get pollers timeout

   - bpo-31690(88): Allow the flags re.ASCII, re.LOCALE, and re.UNICODE
     to be used as group flags for regular expressions.

   - bpo-30349(89): FutureWarning is now emitted if a regular expression
     contains character set constructs that will change semantically in
     the future (nested sets and set operations).

   - bpo-31664(90): Added support for the Blowfish hashing in the crypt
     module.

   - bpo-31632(91): Fix method set_protocol() of class
     _SSLProtocolTransport in asyncio module.  This method was
     previously modifying a wrong reference to the protocol.

   - bpo-15037(92): Added a workaround for getkey() in curses for
     ncurses 5.7 and earlier.

   - bpo-31307(93): Allow use of bytes objects for arguments to *note
     configparser.ConfigParser.read(): 14b0.  Patch by Vincent Michel.

   - bpo-31334(94): Fix ‘poll.poll([timeout])’ in the ‘select’ module
     for arbitrary negative timeouts on all OSes where it can only be a
     non-negative integer or -1.  Patch by Riccardo Coccioli.

   - bpo-31310(95): multiprocessing’s semaphore tracker should be
     launched again if crashed.

   - bpo-31308(96): Make multiprocessing’s forkserver process immune to
     Ctrl-C and other user interruptions.  If it crashes, restart it
     when necessary.

   - bpo-31245(97): Added support for AF_UNIX socket in asyncio
     ‘create_datagram_endpoint’.

   - bpo-30553(98): Add HTTP/2 status code 421 (Misdirected Request) to
     *note http.HTTPStatus: 906.  Patch by Vitor Pereira.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32214

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27240

   (4) https://bugs.python.org/issue?@action=redirect&bpo=30788

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31831

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32182

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32186

   (8) https://bugs.python.org/issue?@action=redirect&bpo=32101

   (9) https://bugs.python.org/issue?@action=redirect&bpo=32154

   (10) https://bugs.python.org/issue?@action=redirect&bpo=32089

   (11) https://bugs.python.org/issue?@action=redirect&bpo=32107

   (12) https://bugs.python.org/issue?@action=redirect&bpo=23033

   (13) https://bugs.python.org/issue?@action=redirect&bpo=12239

   (14) https://bugs.python.org/issue?@action=redirect&bpo=28334

   (15) https://bugs.python.org/issue?@action=redirect&bpo=32121

   (16) https://bugs.python.org/issue?@action=redirect&bpo=31325

   (17) https://bugs.python.org/issue?@action=redirect&bpo=12382

   (18) https://bugs.python.org/issue?@action=redirect&bpo=19610

   (19) https://bugs.python.org/issue?@action=redirect&bpo=32071

   (20) https://bugs.python.org/issue?@action=redirect&bpo=10049

   (21) https://bugs.python.org/issue?@action=redirect&bpo=28684

   (22) https://bugs.python.org/issue?@action=redirect&bpo=32110

   (23) https://bugs.python.org/issue?@action=redirect&bpo=27535

   (24) https://bugs.python.org/issue?@action=redirect&bpo=32088

   (25) https://bugs.python.org/issue?@action=redirect&bpo=1647489

   (26) https://bugs.python.org/issue?@action=redirect&bpo=25054

   (27) https://bugs.python.org/issue?@action=redirect&bpo=32072

   (28) https://bugs.python.org/issue?@action=redirect&bpo=32069

   (29) https://bugs.python.org/issue?@action=redirect&bpo=32066

   (30) https://bugs.python.org/issue?@action=redirect&bpo=32046

   (31) https://bugs.python.org/issue?@action=redirect&bpo=32018

   (32) https://peps.python.org/pep-0008/

   (33) https://bugs.python.org/issue?@action=redirect&bpo=32025

   (34) https://bugs.python.org/issue?@action=redirect&bpo=32037

   (35) https://bugs.python.org/issue?@action=redirect&bpo=32034

   (36) https://bugs.python.org/issue?@action=redirect&bpo=32015

   (37) https://bugs.python.org/issue?@action=redirect&bpo=32011

   (38) https://bugs.python.org/issue?@action=redirect&bpo=28369

   (39) https://bugs.python.org/issue?@action=redirect&bpo=31976

   (40) https://bugs.python.org/issue?@action=redirect&bpo=31985

   (41) https://bugs.python.org/issue?@action=redirect&bpo=21862

   (42) https://bugs.python.org/issue?@action=redirect&bpo=31970

   (43) https://bugs.python.org/issue?@action=redirect&bpo=31843

   (44) https://bugs.python.org/issue?@action=redirect&bpo=31945

   (45) https://bugs.python.org/issue?@action=redirect&bpo=31943

   (46) https://bugs.python.org/issue?@action=redirect&bpo=9678

   (47) https://bugs.python.org/issue?@action=redirect&bpo=30057

   (48) https://bugs.python.org/issue?@action=redirect&bpo=31933

   (49) https://bugs.python.org/issue?@action=redirect&bpo=21423

   (50) https://bugs.python.org/issue?@action=redirect&bpo=31927

   (51) https://bugs.python.org/issue?@action=redirect&bpo=27666

   (52) https://bugs.python.org/issue?@action=redirect&bpo=31917

   (53) https://bugs.python.org/issue?@action=redirect&bpo=31897

   (54) https://bugs.python.org/issue?@action=redirect&bpo=25720

   (55) https://bugs.python.org/issue?@action=redirect&bpo=31893

   (56) https://bugs.python.org/issue?@action=redirect&bpo=31891

   (57) https://bugs.python.org/issue?@action=redirect&bpo=31884

   (58) https://bugs.python.org/issue?@action=redirect&bpo=28281

   (59) https://bugs.python.org/issue?@action=redirect&bpo=31702

   (60) https://bugs.python.org/issue?@action=redirect&bpo=30639

   (61) https://bugs.python.org/issue?@action=redirect&bpo=30768

   (62) https://peps.python.org/pep-0475/

   (63) https://bugs.python.org/issue?@action=redirect&bpo=31854

   (64) https://bugs.python.org/issue?@action=redirect&bpo=31834

   (65) https://bugs.python.org/issue?@action=redirect&bpo=28292

   (66) https://bugs.python.org/issue?@action=redirect&bpo=28564

   (67) https://bugs.python.org/issue?@action=redirect&bpo=28416

   (68) https://bugs.python.org/issue?@action=redirect&bpo=31653

   (69) https://bugs.python.org/issue?@action=redirect&bpo=28326

   (70) https://bugs.python.org/issue?@action=redirect&bpo=20825

   (71) https://bugs.python.org/issue?@action=redirect&bpo=31827

   (72) https://bugs.python.org/issue?@action=redirect&bpo=31756

   (73) https://bugs.python.org/issue?@action=redirect&bpo=31819

   (74) https://bugs.python.org/issue?@action=redirect&bpo=31457

   (75) https://bugs.python.org/issue?@action=redirect&bpo=31457

   (76) https://bugs.python.org/issue?@action=redirect&bpo=31806

   (77) https://bugs.python.org/issue?@action=redirect&bpo=31803

   (78) https://bugs.python.org/issue?@action=redirect&bpo=31800

   (79) https://bugs.python.org/issue?@action=redirect&bpo=28603

   (80) https://bugs.python.org/issue?@action=redirect&bpo=30541

   (81) https://bugs.python.org/issue?@action=redirect&bpo=31784

   (82) https://peps.python.org/pep-0564/

   (83) https://bugs.python.org/issue?@action=redirect&bpo=30143

   (84) https://bugs.python.org/issue?@action=redirect&bpo=31770

   (85) https://bugs.python.org/issue?@action=redirect&bpo=31764

   (86) https://bugs.python.org/issue?@action=redirect&bpo=31752

   (87) https://bugs.python.org/issue?@action=redirect&bpo=31620

   (88) https://bugs.python.org/issue?@action=redirect&bpo=31690

   (89) https://bugs.python.org/issue?@action=redirect&bpo=30349

   (90) https://bugs.python.org/issue?@action=redirect&bpo=31664

   (91) https://bugs.python.org/issue?@action=redirect&bpo=31632

   (92) https://bugs.python.org/issue?@action=redirect&bpo=15037

   (93) https://bugs.python.org/issue?@action=redirect&bpo=31307

   (94) https://bugs.python.org/issue?@action=redirect&bpo=31334

   (95) https://bugs.python.org/issue?@action=redirect&bpo=31310

   (96) https://bugs.python.org/issue?@action=redirect&bpo=31308

   (97) https://bugs.python.org/issue?@action=redirect&bpo=31245

   (98) https://bugs.python.org/issue?@action=redirect&bpo=30553


File: python.info,  Node: Documentação<60>,  Next: Testes<62>,  Prev: Biblioteca<146>,  Up: Python 3 7 0 alpha 3

1.23.71.3 Documentação
......................

   - bpo-32105(1): Added asyncio.BaseEventLoop.connect_accepted_socket
     versionadded marker.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32105


File: python.info,  Node: Testes<62>,  Next: Construção<66>,  Prev: Documentação<60>,  Up: Python 3 7 0 alpha 3

1.23.71.4 Testes
................

   - bpo-31380(1): Skip test_httpservers test_undecodable_file on macOS:
     fails on APFS.

   - bpo-31705(2): Skip test_socket.test_sha256() on Linux kernel older
     than 4.5.  The test fails with ENOKEY on kernel 3.10 (on ppc64le).
     A fix was merged into the kernel 4.5.

   - bpo-32138(3): Skip on Android test_faulthandler tests that raise
     SIGSEGV and remove the test.support.requires_android_level
     decorator.

   - bpo-32136(4): The runtime embedding tests have been split out from
     ‘Lib/test/test_capi.py’ into a new ‘Lib/test/test_embed.py’ file.

   - bpo-28668(5): test.support.requires_multiprocessing_queue is
     removed.  Skip tests with
     test.support.import_module(‘multiprocessing.synchronize’) instead
     when the semaphore implementation is broken or missing.

   - bpo-32126(6): Skip test_get_event_loop_new_process in
     test.test_asyncio.test_events when sem_open() is not functional.

   - bpo-31174(7): Fix test_tools.test_unparse: DirectoryTestCase now
     stores the names sample to always test the same files.  It prevents
     false alarms when hunting reference leaks.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31380

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31705

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32138

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32136

   (5) https://bugs.python.org/issue?@action=redirect&bpo=28668

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32126

   (7) https://bugs.python.org/issue?@action=redirect&bpo=31174


File: python.info,  Node: Construção<66>,  Next: Windows<59>,  Prev: Testes<62>,  Up: Python 3 7 0 alpha 3

1.23.71.5 Construção
....................

   - bpo-28538(1): Revert the previous changes, the if_nameindex
     structure is defined by Unified Headers.

   - bpo-28762(2): Revert the last commit, the F_LOCK macro is defined
     by Android Unified Headers.

   - bpo-29040(3): Support building Android with Unified Headers.  The
     first NDK release to support Unified Headers is android-ndk-r14.

   - bpo-32059(4): ‘detect_modules()’ in ‘setup.py’ now also searches
     the sysroot paths when cross-compiling.

   - bpo-31957(5): Fixes Windows SDK version detection when building for
     Windows.

   - bpo-31609(6): Fixes quotes in PCbuild/clean.bat

   - bpo-31934(7): Abort the build when building out of a not clean
     source tree.

   - bpo-31926(8): Fixed Argument Clinic sometimes causing compilation
     errors when there was more than one function and/or method in a .c
     file with the same name.

   - bpo-28791(9): Update Windows builds to use SQLite 3.21.0.

   - bpo-28791(10): Update OS X installer to use SQLite 3.21.0.

   - bpo-28643(11): Record profile-opt build progress with stamp files.

   - bpo-31866(12): Finish removing support for AtheOS.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28538

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28762

   (3) https://bugs.python.org/issue?@action=redirect&bpo=29040

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32059

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31957

   (6) https://bugs.python.org/issue?@action=redirect&bpo=31609

   (7) https://bugs.python.org/issue?@action=redirect&bpo=31934

   (8) https://bugs.python.org/issue?@action=redirect&bpo=31926

   (9) https://bugs.python.org/issue?@action=redirect&bpo=28791

   (10) https://bugs.python.org/issue?@action=redirect&bpo=28791

   (11) https://bugs.python.org/issue?@action=redirect&bpo=28643

   (12) https://bugs.python.org/issue?@action=redirect&bpo=31866


File: python.info,  Node: Windows<59>,  Next: macOS<47>,  Prev: Construção<66>,  Up: Python 3 7 0 alpha 3

1.23.71.6 Windows
.................

   - bpo-1102(1): Return ‘None’ when ‘View.Fetch()’ returns
     ‘ERROR_NO_MORE_ITEMS’ instead of raising ‘MSIError’.  Initial patch
     by Anthony Tuininga.

   - bpo-31944(2): Fixes Modify button in Apps and Features dialog.

   - bpo-20486(3): Implement the ‘Database.Close()’ method to help
     closing MSI database objects.

   - bpo-31857(4): Make the behavior of USE_STACKCHECK deterministic in
     a multi-threaded environment.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1102

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31944

   (3) https://bugs.python.org/issue?@action=redirect&bpo=20486

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31857


File: python.info,  Node: macOS<47>,  Next: IDLE<47>,  Prev: Windows<59>,  Up: Python 3 7 0 alpha 3

1.23.71.7 macOS
...............

   - bpo-31392(1): Update macOS installer to use OpenSSL 1.0.2m

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31392


File: python.info,  Node: IDLE<47>,  Next: Ferramentas/Demos<35>,  Prev: macOS<47>,  Up: Python 3 7 0 alpha 3

1.23.71.8 IDLE
..............

   - bpo-32207(1): Improve tk event exception tracebacks in IDLE. When
     tk event handling is driven by IDLE’s run loop, a confusing and
     distracting queue.EMPTY traceback context is no longer added to tk
     event exception tracebacks.  The traceback is now the same as when
     event handling is driven by user code.  Patch based on a suggestion
     by Serhiy Storchaka.

   - bpo-32164(2): Delete unused file idlelib/tabbedpages.py.  Use of
     TabbedPageSet in configdialog was replaced by ttk.Notebook.

   - bpo-32100(3): IDLE: Fix old and new bugs in pathbrowser; improve
     tests.  Patch mostly by Cheryl Sabella.

   - bpo-31858(4): IDLE – Restrict shell prompt manipulation to the
     shell.  Editor and output windows only see an empty last prompt
     line.  This simplifies the code and fixes a minor bug when newline
     is inserted.  Sys.ps1, if present, is read on Shell start-up, but
     is not set or changed.

   - bpo-31860(5): The font sample in the IDLE configuration dialog is
     now editable.  Changes persist while IDLE remains open

   - bpo-31836(6): Test_code_module now passes if run after test_idle,
     which sets ps1.  The code module uses sys.ps1 if present or sets it
     to ‘>>> ‘ if not.  Test_code_module now properly tests both
     behaviors.  Ditto for ps2.

   - bpo-28603(7): Fix a TypeError that caused a shell restart when
     printing a traceback that includes an exception that is unhashable.
     Patch by Zane Bitter.

   - bpo-13802(8): Use non-Latin characters in the IDLE’s Font settings
     sample.  Even if one selects a font that defines a limited subset
     of the unicode Basic Multilingual Plane, tcl/tk will use other
     fonts that define a character.  The expanded example give users of
     non-Latin characters a better idea of what they might see in IDLE’s
     shell and editors.  To make room for the expanded sample, frames on
     the Font tab are re-arranged.  The Font/Tabs help explains a bit
     about the additions.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32207

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32164

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32100

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31858

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31860

   (6) https://bugs.python.org/issue?@action=redirect&bpo=31836

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28603

   (8) https://bugs.python.org/issue?@action=redirect&bpo=13802


File: python.info,  Node: Ferramentas/Demos<35>,  Next: API C<60>,  Prev: IDLE<47>,  Up: Python 3 7 0 alpha 3

1.23.71.9 Ferramentas/Demos
...........................

   - bpo-32159(1): Remove CVS and Subversion tools: remove svneol.py and
     treesync.py scripts.  CPython migrated from CVS to Subversion, to
     Mercurial, and then to Git.  CVS and Subversion are no longer used
     to develop CPython.

   - bpo-30722(2): Make redemo work with Python 3.6 and newer versions.
     Also, remove the ‘LOCALE’ option since it doesn’t work with string
     patterns in Python 3.  Patch by Christoph Sarnowski.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32159

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30722


File: python.info,  Node: API C<60>,  Prev: Ferramentas/Demos<35>,  Up: Python 3 7 0 alpha 3

1.23.71.10 API C
................

   - bpo-20891(1): Fix PyGILState_Ensure().  When PyGILState_Ensure() is
     called in a non-Python thread before PyEval_InitThreads(), only
     call PyEval_InitThreads() after calling PyThreadState_New() to fix
     a crash.

   - bpo-32125(2): The ‘Py_UseClassExceptionsFlag’ flag has been
     removed.  It was deprecated and wasn’t used anymore since Python
     2.0.

   - bpo-25612(3): Move the current exception state from the frame
     object to the co-routine.  This simplifies the interpreter and
     fixes a couple of obscure bugs caused by having swap exception
     state when entering or exiting a generator.

   - bpo-23699(4): Add Py_RETURN_RICHCOMPARE macro to reduce boilerplate
     code in rich comparison functions.

   - bpo-30697(5): The ‘PyExc_RecursionErrorInst’ singleton is removed
     and ‘PyErr_NormalizeException()’ does not use it anymore.  This
     singleton is persistent and its members being never cleared may
     cause a segfault during finalization of the interpreter.  See also
     bpo-22898(6).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20891

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32125

   (3) https://bugs.python.org/issue?@action=redirect&bpo=25612

   (4) https://bugs.python.org/issue?@action=redirect&bpo=23699

   (5) https://bugs.python.org/issue?@action=redirect&bpo=30697

   (6) https://bugs.python.org/issue?@action=redirect&bpo=22898


File: python.info,  Node: Python 3 7 0 alpha 2,  Next: Python 3 7 0 alpha 1,  Prev: Python 3 7 0 alpha 3,  Up: Changelog

1.23.72 Python 3.7.0 alpha 2
----------------------------

'Data de lançamento: 2017-10-16'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<144>.
* Biblioteca: Biblioteca<147>.
* Documentação: Documentação<61>.
* Construção: Construção<67>.
* IDLE: IDLE<48>.
* API C: API C<61>.


File: python.info,  Node: Núcleo e embutidos<144>,  Next: Biblioteca<147>,  Up: Python 3 7 0 alpha 2

1.23.72.1 Núcleo e embutidos
............................

   - bpo-31558(1): ‘gc.freeze()’ is a new API that allows for moving all
     objects currently tracked by the garbage collector to a permanent
     generation, effectively removing them from future collection
     events.  This can be used to protect those objects from having
     their PyGC_Head mutated.  In effect, this enables great
     copy-on-write stability at fork().

   - bpo-31642(2): Restored blocking “from package import module” by
     setting sys.modules[“package.module”] to None.

   - bpo-31708(3): Allow use of asynchronous generator expressions in
     synchronous functions.

   - bpo-31709(4): Drop support of asynchronous __aiter__.

   - bpo-30404(5): The -u option now makes the stdout and stderr streams
     unbuffered rather than line-buffered.

   - bpo-31619(6): Fixed a ValueError when convert a string with large
     number of underscores to integer with binary base.

   - bpo-31602(7): Fix an assertion failure in
     ‘zipimporter.get_source()’ in case of a bad ‘zlib.decompress()’.
     Patch by Oren Milman.

   - bpo-31592(8): Fixed an assertion failure in Python parser in case
     of a bad ‘unicodedata.normalize()’.  Patch by Oren Milman.

   - bpo-31588(9): Raise a ‘TypeError’ with a helpful error message when
     class creation fails due to a metaclass with a bad ‘__prepare__()’
     method.  Patch by Oren Milman.

   - bpo-31574(10): Importlib was instrumented with two dtrace probes to
     profile import timing.

   - bpo-31566(11): Fix an assertion failure in ‘_warnings.warn()’ in
     case of a bad ‘__name__’ global.  Patch by Oren Milman.

   - bpo-31506(12): Improved the error message logic for
     ‘object.__new__’ and ‘object.__init__’.

   - bpo-31505(13): Fix an assertion failure in ‘json’, in case
     ‘_json.make_encoder()’ received a bad ‘encoder()’ argument.  Patch
     by Oren Milman.

   - bpo-31492(14): Fix assertion failures in case of failing to import
     from a module with a bad ‘__name__’ attribute, and in case of
     failing to access an attribute of such a module.  Patch by Oren
     Milman.

   - bpo-31478(15): Fix an assertion failure in ‘_random.Random.seed()’
     in case the argument has a bad ‘__abs__()’ method.  Patch by Oren
     Milman.

   - bpo-31336(16): Speed up class creation by 10-20% by reducing the
     overhead in the necessary special method lookups.  Patch by Stefan
     Behnel.

   - bpo-31415(17): Add ‘-X importtime’ option to show how long each
     import takes.  It can be used to optimize application’s startup
     time.  Support the *note PYTHONPROFILEIMPORTTIME: b08. as an
     equivalent way to enable this.

   - bpo-31410(18): Optimized calling wrapper and classmethod
     descriptors.

   - bpo-31353(19): PEP 553(20) - Add a new built-in called
     ‘breakpoint()’ which calls ‘sys.breakpointhook()’.  By default this
     imports ‘pdb’ and calls ‘pdb.set_trace()’, but users may override
     ‘sys.breakpointhook()’ to call whatever debugger they want.  The
     original value of the hook is saved in ‘sys.__breakpointhook__’.

   - bpo-17852(21): Maintain a list of open buffered files, flush them
     before exiting the interpreter.  Based on a patch from Armin Rigo.

   - bpo-31315(22): Fix an assertion failure in imp.create_dynamic(),
     when spec.name is not a string.  Patch by Oren Milman.

   - bpo-31311(23): Fix a crash in the ‘__setstate__()’ method of
     ‘ctypes._CData’, in case of a bad ‘__dict__’.  Patch by Oren
     Milman.

   - bpo-31293(24): Fix crashes in true division and multiplication of a
     timedelta object by a float with a bad as_integer_ratio() method.
     Patch by Oren Milman.

   - bpo-31285(25): Fix an assertion failure in
     ‘warnings.warn_explicit’, when the return value of the received
     loader’s ‘get_source()’ has a bad ‘splitlines()’ method.  Patch by
     Oren Milman.

   - bpo-30406(26): Make ‘async’ and ‘await’ proper keywords, as
     specified in PEP 492(27).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31558

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31642

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31708

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31709

   (5) https://bugs.python.org/issue?@action=redirect&bpo=30404

   (6) https://bugs.python.org/issue?@action=redirect&bpo=31619

   (7) https://bugs.python.org/issue?@action=redirect&bpo=31602

   (8) https://bugs.python.org/issue?@action=redirect&bpo=31592

   (9) https://bugs.python.org/issue?@action=redirect&bpo=31588

   (10) https://bugs.python.org/issue?@action=redirect&bpo=31574

   (11) https://bugs.python.org/issue?@action=redirect&bpo=31566

   (12) https://bugs.python.org/issue?@action=redirect&bpo=31506

   (13) https://bugs.python.org/issue?@action=redirect&bpo=31505

   (14) https://bugs.python.org/issue?@action=redirect&bpo=31492

   (15) https://bugs.python.org/issue?@action=redirect&bpo=31478

   (16) https://bugs.python.org/issue?@action=redirect&bpo=31336

   (17) https://bugs.python.org/issue?@action=redirect&bpo=31415

   (18) https://bugs.python.org/issue?@action=redirect&bpo=31410

   (19) https://bugs.python.org/issue?@action=redirect&bpo=31353

   (20) https://peps.python.org/pep-0553/

   (21) https://bugs.python.org/issue?@action=redirect&bpo=17852

   (22) https://bugs.python.org/issue?@action=redirect&bpo=31315

   (23) https://bugs.python.org/issue?@action=redirect&bpo=31311

   (24) https://bugs.python.org/issue?@action=redirect&bpo=31293

   (25) https://bugs.python.org/issue?@action=redirect&bpo=31285

   (26) https://bugs.python.org/issue?@action=redirect&bpo=30406

   (27) https://peps.python.org/pep-0492/


File: python.info,  Node: Biblioteca<147>,  Next: Documentação<61>,  Prev: Núcleo e embutidos<144>,  Up: Python 3 7 0 alpha 2

1.23.72.2 Biblioteca
....................

   - bpo-30058(1): Fixed buffer overflow in select.kqueue.control().

   - bpo-31672(2): ‘idpattern’ in ‘string.Template’ matched some
     non-ASCII characters.  Now it uses ‘-i’ regular expression local
     flag to avoid non-ASCII characters.

   - bpo-31701(3): On Windows, faulthandler.enable() now ignores MSC and
     COM exceptions.

   - bpo-31728(4): Prevent crashes in ‘_elementtree’ due to unsafe
     cleanup of ‘Element.text’ and ‘Element.tail’.  Patch by Oren
     Milman.

   - bpo-31671(5): Now ‘re.compile()’ converts passed RegexFlag to
     normal int object before compiling.  bm_regex_compile benchmark
     shows 14% performance improvements.

   - bpo-30397(6): The types of compiled regular objects and match
     objects are now exposed as ‘re.Pattern’ and ‘re.Match’.  This adds
     information in pydoc output for the ‘re’ module.

   - bpo-31675(7): Fixed memory leaks in Tkinter’s methods splitlist()
     and split() when pass a string larger than 2 GiB.

   - bpo-31673(8): Fixed typo in the name of Tkinter’s method
     adderrorinfo().

   - bpo-31648(9): Improvements to path predicates in ElementTree: Allow
     whitespace around predicate parts, i.e.  “[a = ‘text’]” instead of
     requiring the less readable “[a=’text’]”.  Add support for text
     comparison of the current node, like “[.=’text’]”.  Patch by Stefan
     Behnel.

   - bpo-30806(10): Fix the string representation of a netrc object.

   - bpo-31638(11): Add optional argument ‘compressed’ to
     ‘zipapp.create_archive’, and add option ‘--compress’ to the command
     line interface of ‘zipapp’.

   - bpo-25351(12): Avoid venv activate failures with undefined
     variables

   - bpo-20519(13): Avoid ctypes use (if possible) and improve import
     time for uuid.

   - bpo-28293(14): The regular expression cache is no longer completely
     dumped when it is full.

   - bpo-31596(15): Added pthread_getcpuclockid() to the time module

   - bpo-27494(16): Make 2to3 accept a trailing comma in generator
     expressions.  For example, ‘set(x for x in [],)’ is now allowed.

   - bpo-30347(17): Stop crashes when concurrently iterate over
     itertools.groupby() iterators.

   - bpo-30346(18): An iterator produced by itertools.groupby() iterator
     now becomes exhausted after advancing the groupby iterator.

   - bpo-31556(19): Cancel asyncio.wait_for future faster if timeout <=
     0

   - bpo-31540(20): Allow passing a context object in *note
     concurrent.futures.ProcessPoolExecutor: 8f4. constructor.  Also,
     free job resources in *note concurrent.futures.ProcessPoolExecutor:
     8f4. earlier to improve memory usage when a worker waits for new
     jobs.

   - bpo-31516(21): ‘threading.current_thread()’ should not return a
     dummy thread at shutdown.

   - bpo-31525(22): In the sqlite module, require the sqlite3_prepare_v2
     API. Thus, the sqlite module now requires sqlite version at least
     3.3.9.

   - bpo-26510(23): argparse subparsers are now required by default.
     This matches behaviour in Python 2.  For optional subparsers, use
     the new parameter ‘add_subparsers(required=False)’.  Patch by
     Anthony Sottile.  (As of 3.7.0rc1, the default was changed to not
     required as had been the case since Python 3.3.)

   - bpo-27541(24): Reprs of subclasses of some collection and iterator
     classes (‘bytearray’, ‘array.array’, ‘collections.deque’,
     ‘collections.defaultdict’, ‘itertools.count’, ‘itertools.repeat’)
     now contain actual type name instead of hardcoded names of the base
     class.

   - bpo-31351(25): python -m ensurepip now exits with non-zero exit
     code if pip bootstrapping has failed.

   - bpo-31389(26): ‘pdb.set_trace()’ now takes an optional keyword-only
     argument ‘header’.  If given, this is printed to the console just
     before debugging begins.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30058

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31672

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31701

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31728

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31671

   (6) https://bugs.python.org/issue?@action=redirect&bpo=30397

   (7) https://bugs.python.org/issue?@action=redirect&bpo=31675

   (8) https://bugs.python.org/issue?@action=redirect&bpo=31673

   (9) https://bugs.python.org/issue?@action=redirect&bpo=31648

   (10) https://bugs.python.org/issue?@action=redirect&bpo=30806

   (11) https://bugs.python.org/issue?@action=redirect&bpo=31638

   (12) https://bugs.python.org/issue?@action=redirect&bpo=25351

   (13) https://bugs.python.org/issue?@action=redirect&bpo=20519

   (14) https://bugs.python.org/issue?@action=redirect&bpo=28293

   (15) https://bugs.python.org/issue?@action=redirect&bpo=31596

   (16) https://bugs.python.org/issue?@action=redirect&bpo=27494

   (17) https://bugs.python.org/issue?@action=redirect&bpo=30347

   (18) https://bugs.python.org/issue?@action=redirect&bpo=30346

   (19) https://bugs.python.org/issue?@action=redirect&bpo=31556

   (20) https://bugs.python.org/issue?@action=redirect&bpo=31540

   (21) https://bugs.python.org/issue?@action=redirect&bpo=31516

   (22) https://bugs.python.org/issue?@action=redirect&bpo=31525

   (23) https://bugs.python.org/issue?@action=redirect&bpo=26510

   (24) https://bugs.python.org/issue?@action=redirect&bpo=27541

   (25) https://bugs.python.org/issue?@action=redirect&bpo=31351

   (26) https://bugs.python.org/issue?@action=redirect&bpo=31389


File: python.info,  Node: Documentação<61>,  Next: Construção<67>,  Prev: Biblioteca<147>,  Up: Python 3 7 0 alpha 2

1.23.72.3 Documentação
......................

   - bpo-31537(1): Fix incorrect usage of ‘get_history_length’ in
     readline documentation example code.  Patch by Brad Smith.

   - bpo-30085(2): The operator functions without double underscores are
     preferred for clarity.  The one with underscores are only kept for
     back-compatibility.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31537

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30085


File: python.info,  Node: Construção<67>,  Next: IDLE<48>,  Prev: Documentação<61>,  Up: Python 3 7 0 alpha 2

1.23.72.4 Construção
....................

   - bpo-31696(1): Improve compiler version information in *note
     sys.version: 178. when Python is built with Clang.

   - bpo-31625(2): Stop using ranlib on static libraries.  Instead, we
     assume ar supports the ‘s’ flag.

   - bpo-31624(3): Remove support for BSD/OS.

   - bpo-22140(4): Prevent double substitution of prefix in
     python-config.sh.

   - bpo-31569(5): Correct PCBuild/ case to PCbuild/ in build scripts
     and documentation.

   - bpo-31536(6): Avoid wholesale rebuild after ‘make regen-all’ if
     nothing changed.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31696

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31625

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31624

   (4) https://bugs.python.org/issue?@action=redirect&bpo=22140

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31569

   (6) https://bugs.python.org/issue?@action=redirect&bpo=31536


File: python.info,  Node: IDLE<48>,  Next: API C<61>,  Prev: Construção<67>,  Up: Python 3 7 0 alpha 2

1.23.72.5 IDLE
..............

   - bpo-31460(1): Simplify the API of IDLE’s Module Browser.  Passing a
     widget instead of an flist with a root widget opens the option of
     creating a browser frame that is only part of a window.  Passing a
     full file name instead of pieces assumed to come from a .py file
     opens the possibility of browsing python files that do not end in
     .py.

   - bpo-31649(2): IDLE - Make _htest, _utest parameters keyword only.

   - bpo-31559(3): Remove test order dependence in
     idle_test.test_browser.

   - bpo-31459(4): Rename IDLE’s module browser from Class Browser to
     Module Browser.  The original module-level class and method browser
     became a module browser, with the addition of module-level
     functions, years ago.  Nested classes and functions were added
     yesterday.  For back-compatibility, the virtual event
     <<open-class-browser>>, which appears on the Keys tab of the
     Settings dialog, is not changed.  Patch by Cheryl Sabella.

   - bpo-31500(5): Default fonts now are scaled on HiDPI displays.

   - bpo-1612262(6): IDLE module browser now shows nested classes and
     functions.  Original patches for code and tests by Guilherme Polo
     and Cheryl Sabella, respectively.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31460

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31649

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31559

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31459

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31500

   (6) https://bugs.python.org/issue?@action=redirect&bpo=1612262


File: python.info,  Node: API C<61>,  Prev: IDLE<48>,  Up: Python 3 7 0 alpha 2

1.23.72.6 API C
...............

   - bpo-28280(1): Make ‘PyMapping_Keys()’, ‘PyMapping_Values()’ and
     ‘PyMapping_Items()’ always return a ‘list’ (rather than a ‘list’ or
     a ‘tuple’).  Patch by Oren Milman.

   - bpo-31532(2): Fix memory corruption due to allocator mix in
     getpath.c between Py_GetPath() and Py_SetPath()

   - bpo-25658(3): Implement PEP 539(4) for Thread Specific Storage
     (TSS) API: it is a new Thread Local Storage (TLS) API to CPython
     which would supersede use of the existing TLS API within the
     CPython interpreter, while deprecating the existing API. PEP
     written by Erik M. Bray, patch by Masayuki Yamamoto.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28280

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31532

   (3) https://bugs.python.org/issue?@action=redirect&bpo=25658

   (4) https://peps.python.org/pep-0539/


File: python.info,  Node: Python 3 7 0 alpha 1,  Next: Python 3 6 6 final,  Prev: Python 3 7 0 alpha 2,  Up: Changelog

1.23.73 Python 3.7.0 alpha 1
----------------------------

'Data de lançamento: 2017-09-19'

* Menu:

* Segurança: Segurança<45>.
* Núcleo e embutidos: Núcleo e embutidos<145>.
* Biblioteca: Biblioteca<148>.
* Documentação: Documentação<62>.
* Testes: Testes<63>.
* Construção: Construção<68>.
* Windows: Windows<60>.
* IDLE: IDLE<49>.
* Ferramentas/Demos: Ferramentas/Demos<36>.
* API C: API C<62>.


File: python.info,  Node: Segurança<45>,  Next: Núcleo e embutidos<145>,  Up: Python 3 7 0 alpha 1

1.23.73.1 Segurança
...................

   - bpo-29781(1): SSLObject.version() now correctly returns None when
     handshake over BIO has not been performed yet.

   - bpo-29505(2): Add fuzz tests for float(str), int(str),
     unicode(str); for oss-fuzz.

   - bpo-30947(3): Upgrade libexpat embedded copy from version 2.2.1 to
     2.2.3 to get security fixes.

   - bpo-30730(4): Prevent environment variables injection in subprocess
     on Windows.  Prevent passing other environment variables and
     command arguments.

   - bpo-30694(5): Upgrade expat copy from 2.2.0 to 2.2.1 to get fixes
     of multiple security vulnerabilities including: CVE 2017-9233(6)
     (External entity infinite loop DoS), CVE 2016-9063(7) (Integer
     overflow, re-fix), CVE 2016-0718(8) (Fix regression bugs from
     2.2.0’s fix to CVE 2016-0718(9)) and CVE 2012-0876(10) (Counter
     hash flooding with SipHash).  Note: the CVE 2016-5300(11) (Use
     os-specific entropy sources like getrandom) doesn’t impact Python,
     since Python already gets entropy from the OS to set the expat
     secret using ‘XML_SetHashSalt()’.

   - bpo-30500(12): Fix urllib.parse.splithost() to correctly parse
     fragments.  For example, ‘splithost('//127.0.0.1#@evil.com/')’ now
     correctly returns the ‘127.0.0.1’ host, instead of treating
     ‘@evil.com’ as the host in an authentication (‘login@host’).

   - bpo-29591(13): Update expat copy from 2.1.1 to 2.2.0 to get fixes
     of CVE 2016-0718(14) and CVE 2016-4472(15).  See
     ‘https://sourceforge.net/p/expat/bugs/537/’ for more information.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29781

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29505

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30947

   (4) https://bugs.python.org/issue?@action=redirect&bpo=30730

   (5) https://bugs.python.org/issue?@action=redirect&bpo=30694

   (6) https://www.cve.org/CVERecord?id=CVE-2017-9233

   (7) https://www.cve.org/CVERecord?id=CVE-2016-9063

   (8) https://www.cve.org/CVERecord?id=CVE-2016-0718

   (9) https://www.cve.org/CVERecord?id=CVE-2016-0718

   (10) https://www.cve.org/CVERecord?id=CVE-2012-0876

   (11) https://www.cve.org/CVERecord?id=CVE-2016-5300

   (12) https://bugs.python.org/issue?@action=redirect&bpo=30500

   (13) https://bugs.python.org/issue?@action=redirect&bpo=29591

   (14) https://www.cve.org/CVERecord?id=CVE-2016-0718

   (15) https://www.cve.org/CVERecord?id=CVE-2016-4472


File: python.info,  Node: Núcleo e embutidos<145>,  Next: Biblioteca<148>,  Prev: Segurança<45>,  Up: Python 3 7 0 alpha 1

1.23.73.2 Núcleo e embutidos
............................

   - bpo-31490(1): Fix an assertion failure in ‘ctypes’ class
     definition, in case the class has an attribute whose name is
     specified in ‘_anonymous_’ but not in ‘_fields_’.  Patch by Oren
     Milman.

   - bpo-31471(2): Fix an assertion failure in ‘subprocess.Popen()’ on
     Windows, in case the env argument has a bad ‘keys()’ method.  Patch
     by Oren Milman.

   - bpo-31418(3): Fix an assertion failure in ‘PyErr_WriteUnraisable()’
     in case of an exception with a bad ‘__module__’ attribute.  Patch
     by Oren Milman.

   - bpo-31416(4): Fix assertion failures in case of a bad
     warnings.filters or warnings.defaultaction.  Patch by Oren Milman.

   - bpo-28411(5): Change direct usage of PyInterpreterState.modules to
     PyImport_GetModuleDict().  Also introduce more uniformity in other
     code that deals with sys.modules.  This helps reduce complications
     when working on sys.modules.

   - bpo-28411(6): Switch to the abstract API when dealing with
     ‘PyInterpreterState.modules’.  This allows later support for all
     dict subclasses and other Mapping implementations.  Also add a
     ‘PyImport_GetModule()’ function to reduce a bunch of duplicated
     code.

   - bpo-31411(7): Raise a TypeError instead of SystemError in case
     warnings.onceregistry is not a dictionary.  Patch by Oren Milman.

   - bpo-31344(8): For finer control of tracing behaviour when testing
     the interpreter, two new frame attributes have been added to
     control the emission of particular trace events: ‘f_trace_lines’
     (‘True’ by default) to turn off per-line trace events; and
     ‘f_trace_opcodes’ (‘False’ by default) to turn on per-opcode trace
     events.

   - bpo-31373(9): Fix several possible instances of undefined behavior
     due to floating-point demotions.

   - bpo-30465(10): Location information (‘lineno’ and ‘col_offset’) in
     f-strings is now (mostly) correct.  This fixes tools like flake8
     from showing warnings on the wrong line (typically the first line
     of the file).

   - bpo-30860(11): Consolidate CPython’s global runtime state under a
     single struct.  This improves discoverability of the runtime state.

   - bpo-31347(12): Fix possible undefined behavior in
     _PyObject_FastCall_Prepend.

   - bpo-31343(13): Include sys/sysmacros.h for major(), minor(), and
     makedev().  GNU C libray plans to remove the functions from
     sys/types.h.

   - bpo-31291(14): Fix an assertion failure in
     ‘zipimport.zipimporter.get_data’ on Windows, when the return value
     of ‘pathname.replace('/','\\')’ isn’t a string.  Patch by Oren
     Milman.

   - bpo-31271(15): Fix an assertion failure in the ‘write()’ method of
     ‘io.TextIOWrapper’, when the encoder doesn’t return a bytes object.
     Patch by Oren Milman.

   - bpo-31243(16): Fix a crash in some methods of ‘io.TextIOWrapper’,
     when the decoder’s state is invalid.  Patch by Oren Milman.

   - bpo-30721(17): ‘print’ now shows correct usage hint for using
     Python 2 redirection syntax.  Patch by Sanyam Khurana.

   - bpo-31070(18): Fix a race condition in importlib
     _get_module_lock().

   - bpo-30747(19): Add a non-dummy implementation of _Py_atomic_store
     and _Py_atomic_load on MSVC.

   - bpo-31095(20): Fix potential crash during GC caused by ‘tp_dealloc’
     which doesn’t call ‘PyObject_GC_UnTrack()’.

   - bpo-31071(21): Avoid masking original TypeError in call with *
     unpacking when other arguments are passed.

   - bpo-30978(22): str.format_map() now passes key lookup exceptions
     through.  Previously any exception was replaced with a KeyError
     exception.

   - bpo-30808(23): Use _Py_atomic API for concurrency-sensitive signal
     state.

   - bpo-30876(24): Relative import from unloaded package now reimports
     the package instead of failing with SystemError.  Relative import
     from non-package now fails with ImportError rather than
     SystemError.

   - bpo-30703(25): Improve signal delivery.  Avoid using
     Py_AddPendingCall from signal handler, to avoid calling
     signal-unsafe functions.  The tests I’m adding here fail without
     the rest of the patch, on Linux and OS X. This means our signal
     delivery logic had defects (some signals could be lost).

   - bpo-30765(26): Avoid blocking in pthread_mutex_lock() when
     PyThread_acquire_lock() is asked not to block.

   - bpo-31161(27): Make sure the ‘Missing parentheses’ syntax error
     message is only applied to SyntaxError, not to subclasses.  Patch
     by Martijn Pieters.

   - bpo-30814(28): Fixed a race condition when import a submodule from
     a package.

   - bpo-30736(29): The internal unicodedata database has been upgraded
     to Unicode 10.0.

   - bpo-30604(30): Move co_extra_freefuncs from per-thread to
     per-interpreter to avoid crashes.

   - bpo-30597(31): ‘print’ now shows expected input in custom error
     message when used as a Python 2 statement.  Patch by Sanyam
     Khurana.

   - bpo-30682(32): Removed a too-strict assertion that failed for
     certain f-strings, such as eval(“f’\n’”) and eval(“f’\r’”).

   - bpo-30501(33): The compiler now produces more optimal code for
     complex condition expressions in the “if”, “while” and “assert”
     statement, the “if” expression, and generator expressions and
     comprehensions.

   - bpo-28180(34): Implement PEP 538(35) (legacy C locale coercion).
     This means that when a suitable coercion target locale is
     available, both the core interpreter and locale-aware C extensions
     will assume the use of UTF-8 as the default text encoding, rather
     than ASCII.

   - bpo-30486(36): Allows setting cell values for __closure__.  Patch
     by Lisa Roach.

   - bpo-30537(37): itertools.islice now accepts integer-like objects
     (having an __index__ method) as start, stop, and slice arguments

   - bpo-25324(38): Tokens needed for parsing in Python moved to C.
     ‘COMMENT’, ‘NL’ and ‘ENCODING’.  This way the tokens and tok_names
     in the token module don’t get changed when you import the tokenize
     module.

   - bpo-29104(39): Fixed parsing backslashes in f-strings.

   - bpo-27945(40): Fixed various segfaults with dict when input
     collections are mutated during searching, inserting or comparing.
     Based on patches by Duane Griffin and Tim Mitchell.

   - bpo-25794(41): Fixed type.__setattr__() and type.__delattr__() for
     non-interned attribute names.  Based on patch by Eryk Sun.

   - bpo-30039(42): If a KeyboardInterrupt happens when the interpreter
     is in the middle of resuming a chain of nested ‘yield from’ or
     ‘await’ calls, it’s now correctly delivered to the innermost frame.

   - bpo-28974(43): ‘object.__format__(x, '')’ is now equivalent to
     ‘str(x)’ rather than ‘format(str(self), '')’.

   - bpo-30024(44): Circular imports involving absolute imports with
     binding a submodule to a name are now supported.

   - bpo-12414(45): sys.getsizeof() on a code object now returns the
     sizes which includes the code struct and sizes of objects which it
     references.  Patch by Donghee Na.

   - bpo-29839(46): len() now raises ValueError rather than
     OverflowError if __len__() returned a large negative integer.

   - bpo-11913(47): README.rst is now included in the list of distutils
     standard READMEs and therefore included in source distributions.

   - bpo-29914(48): Fixed default implementations of __reduce__ and
     __reduce_ex__().  object.__reduce__() no longer takes arguments,
     object.__reduce_ex__() now requires one argument.

   - bpo-29949(49): Fix memory usage regression of set and frozenset
     object.

   - bpo-29935(50): Fixed error messages in the index() method of tuple,
     list and deque when pass indices of wrong type.

   - bpo-29816(51): Shift operation now has less opportunity to raise
     OverflowError.  ValueError always is raised rather than
     OverflowError for negative counts.  Shifting zero with non-negative
     count always returns zero.

   - bpo-24821(52): Fixed the slowing down to 25 times in the searching
     of some unlucky Unicode characters.

   - bpo-29102(53): Add a unique ID to PyInterpreterState.  This makes
     it easier to identify each subinterpreter.

   - bpo-29894(54): The deprecation warning is emitted if __complex__
     returns an instance of a strict subclass of complex.  In a future
     versions of Python this can be an error.

   - bpo-29859(55): Show correct error messages when any of the
     pthread_* calls in thread_pthread.h fails.

   - bpo-29849(56): Fix a memory leak when an ImportError is raised
     during from import.

   - bpo-28856(57): Fix an oversight that %b format for bytes should
     support objects follow the buffer protocol.

   - bpo-29723(58): The ‘sys.path[0]’ initialization change for
     bpo-29139(59) caused a regression by revealing an inconsistency in
     how sys.path is initialized when executing ‘__main__’ from a
     zipfile, directory, or other import location.  The interpreter now
     consistently avoids ever adding the import location’s parent
     directory to ‘sys.path’, and ensures no other ‘sys.path’ entries
     are inadvertently modified when inserting the import location named
     on the command line.

   - bpo-29568(60): Escaped percent “%%” in the format string for
     classic string formatting no longer allows any characters between
     two percents.

   - bpo-29714(61): Fix a regression that bytes format may fail when
     containing zero bytes inside.

   - bpo-29695(62): bool(), float(), list() and tuple() no longer take
     keyword arguments.  The first argument of int() can now be passes
     only as positional argument.

   - bpo-28893(63): Set correct __cause__ for errors about invalid
     awaitables returned from __aiter__ and __anext__.

   - bpo-28876(64): ‘bool(range)’ works even if ‘len(range)’ raises
     *note OverflowError: 885.

   - bpo-29683(65): Fixes to memory allocation in _PyCode_SetExtra.
     Patch by Brian Coleman.

   - bpo-29684(66): Fix minor regression of
     PyEval_CallObjectWithKeywords.  It should raise TypeError when
     kwargs is not a dict.  But it might cause segv when args=NULL and
     kwargs is not a dict.

   - bpo-28598(67): Support __rmod__ for subclasses of str being called
     before str.__mod__.  Patch by Martijn Pieters.

   - bpo-29607(68): Fix stack_effect computation for CALL_FUNCTION_EX.
     Patch by Matthieu Dartiailh.

   - bpo-29602(69): Fix incorrect handling of signed zeros in complex
     constructor for complex subclasses and for inputs having a
     __complex__ method.  Patch by Serhiy Storchaka.

   - bpo-29347(70): Fixed possibly dereferencing undefined pointers when
     creating weakref objects.

   - bpo-29463(71): Add ‘docstring’ field to Module, ClassDef,
     FunctionDef, and AsyncFunctionDef ast nodes.  docstring is not
     first stmt in their body anymore.  It affects ‘co_firstlineno’ and
     ‘co_lnotab’ of code object for module and class.  (Reverted in
     bpo-32911(72).)

   - bpo-29438(73): Fixed use-after-free problem in key sharing dict.

   - bpo-29546(74): Set the ‘path’ and ‘name’ attribute on ImportError
     for ‘from ... import ...’.

   - bpo-29546(75): Improve from-import error message with location

   - bpo-29478(76): If max_line_length=None is specified while using the
     Compat32 policy, it is no longer ignored.  Patch by Mircea Cosbuc.

   - bpo-29319(77): Prevent RunMainFromImporter overwriting sys.path[0].

   - bpo-29337(78): Fixed possible BytesWarning when compare the code
     objects.  Warnings could be emitted at compile time.

   - bpo-29327(79): Fixed a crash when pass the iterable keyword
     argument to sorted().

   - bpo-29034(80): Fix memory leak and use-after-free in os module
     (path_converter).

   - bpo-29159(81): Fix regression in bytes(x) when x.__index__() raises
     Exception.

   - bpo-29049(82): Call _PyObject_GC_TRACK() lazily when calling Python
     function.  Calling function is up to 5% faster.

   - bpo-28927(83): bytes.fromhex() and bytearray.fromhex() now ignore
     all ASCII whitespace, not only spaces.  Patch by Robert Xiao.

   - bpo-28932(84): Do not include <sys/random.h> if it does not exist.

   - bpo-25677(85): Correct the positioning of the syntax error caret
     for indented blocks.  Based on patch by Michael Layzell.

   - bpo-29000(86): Fixed bytes formatting of octals with zero padding
     in alternate form.

   - bpo-18896(87): Python function can now have more than 255
     parameters.  collections.namedtuple() now supports tuples with more
     than 255 elements.

   - bpo-28596(88): The preferred encoding is UTF-8 on Android.  Patch
     written by Chi Hsuan Yen.

   - bpo-22257(89): Clean up interpreter startup (see PEP 432(90)).

   - bpo-26919(91): On Android, operating system data is now always
     encoded/decoded to/from UTF-8, instead of the locale encoding to
     avoid inconsistencies with os.fsencode() and os.fsdecode() which
     are already using UTF-8.

   - bpo-28991(92): functools.lru_cache() was susceptible to an obscure
     reentrancy bug triggerable by a monkey-patched len() function.

   - bpo-28147(93): Fix a memory leak in split-table dictionaries:
     setattr() must not convert combined table into split table.  Patch
     written by INADA Naoki.

   - bpo-28739(94): f-string expressions are no longer accepted as
     docstrings and by ast.literal_eval() even if they do not include
     expressions.

   - bpo-28512(95): Fixed setting the offset attribute of SyntaxError by
     PyErr_SyntaxLocationEx() and PyErr_SyntaxLocationObject().

   - bpo-28918(96): Fix the cross compilation of xxlimited when Python
     has been built with Py_DEBUG defined.

   - bpo-23722(97): Rather than silently producing a class that doesn’t
     support zero-argument ‘super()’ in methods, failing to pass the new
     ‘__classcell__’ namespace entry up to ‘type.__new__’ now results in
     a ‘DeprecationWarning’ and a class that supports zero-argument
     ‘super()’.

   - bpo-28797(98): Modifying the class __dict__ inside the __set_name__
     method of a descriptor that is used inside that class no longer
     prevents calling the __set_name__ method of other descriptors.

   - bpo-28799(99): Remove the ‘PyEval_GetCallStats()’ function and
     deprecate the untested and undocumented ‘sys.callstats()’ function.
     Remove the ‘CALL_PROFILE’ special build: use the *note
     sys.setprofile(): 1546. function, *note cProfile: 27. or *note
     profile: af. to profile function calls.

   - bpo-12844(100): More than 255 arguments can now be passed to a
     function.

   - bpo-28782(101): Fix a bug in the implementation ‘yield from’ when
     checking if the next instruction is YIELD_FROM. Regression
     introduced by WORDCODE (bpo-26647(102)).

   - bpo-28774(103): Fix error position of the unicode error in ASCII
     and Latin1 encoders when a string returned by the error handler
     contains multiple non-encodable characters (non-ASCII for the ASCII
     codec, characters out of the U+0000-U+00FF range for Latin1).

   - bpo-28731(104): Optimize _PyDict_NewPresized() to create correct
     size dict.  Improve speed of dict literal with constant keys up to
     30%.

   - bpo-28532(105): Show sys.version when -V option is supplied twice.

   - bpo-27100(106): The with-statement now checks for __enter__ before
     it checks for __exit__.  This gives less confusing error messages
     when both methods are missing.  Patch by Jonathan Ellington.

   - bpo-28746(107): Fix the set_inheritable() file descriptor method on
     platforms that do not have the ioctl FIOCLEX and FIONCLEX commands.

   - bpo-26920(108): Fix not getting the locale’s charset upon
     initializing the interpreter, on platforms that do not have
     langinfo.

   - bpo-28648(109): Fixed crash in Py_DecodeLocale() in debug build on
     Mac OS X when decode astral characters.  Patch by Xiang Zhang.

   - bpo-28665(110): Improve speed of the STORE_DEREF opcode by 40%.

   - bpo-19398(111): Extra slash no longer added to sys.path components
     in case of empty compile-time PYTHONPATH components.

   - bpo-28621(112): Sped up converting int to float by reusing faster
     bits counting implementation.  Patch by Adrian Wielgosik.

   - bpo-28580(113): Optimize iterating split table values.  Patch by
     Xiang Zhang.

   - bpo-28583(114): PyDict_SetDefault didn’t combine split table when
     needed.  Patch by Xiang Zhang.

   - bpo-28128(115): Deprecation warning for invalid str and byte escape
     sequences now prints better information about where the error
     occurs.  Patch by Serhiy Storchaka and Eric Smith.

   - bpo-28509(116): dict.update() no longer allocate unnecessary large
     memory.

   - bpo-28426(117): Fixed potential crash in
     PyUnicode_AsDecodedObject() in debug build.

   - bpo-28517(118): Fixed of-by-one error in the peephole optimizer
     that caused keeping unreachable code.

   - bpo-28214(119): Improved exception reporting for problematic
     __set_name__ attributes.

   - bpo-23782(120): Fixed possible memory leak in _PyTraceback_Add()
     and exception loss in PyTraceBack_Here().

   - bpo-28183(121): Optimize and cleanup dict iteration.

   - bpo-26081(122): Added C implementation of asyncio.Future.  Original
     patch by Yury Selivanov.

   - bpo-28379(123): Added sanity checks and tests for
     PyUnicode_CopyCharacters().  Patch by Xiang Zhang.

   - bpo-28376(124): The type of long range iterator is now registered
     as Iterator.  Patch by Oren Milman.

   - bpo-28376(125): Creating instances of range_iterator by calling
     range_iterator type now is disallowed.  Calling iter() on range
     instance is the only way.  Patch by Oren Milman.

   - bpo-26906(126): Resolving special methods of uninitialized type now
     causes implicit initialization of the type instead of a fail.

   - bpo-18287(127): PyType_Ready() now checks that tp_name is not NULL.
     Original patch by Niklas Koep.

   - bpo-24098(128): Fixed possible crash when AST is changed in process
     of compiling it.

   - bpo-28201(129): Dict reduces possibility of 2nd conflict in hash
     table when hashes have same lower bits.

   - bpo-28350(130): String constants with null character no longer
     interned.

   - bpo-26617(131): Fix crash when GC runs during weakref callbacks.

   - bpo-27942(132): String constants now interned recursively in tuples
     and frozensets.

   - bpo-28289(133): ImportError.__init__ now resets not specified
     attributes.

   - bpo-21578(134): Fixed misleading error message when ImportError
     called with invalid keyword args.

   - bpo-28203(135): Fix incorrect type in complex(1.0, {2:3}) error
     message.  Patch by Soumya Sharma.

   - bpo-28086(136): Single var-positional argument of tuple subtype was
     passed unscathed to the C-defined function.  Now it is converted to
     exact tuple.

   - bpo-28214(137): Now __set_name__ is looked up on the class instead
     of the instance.

   - bpo-27955(138): Fallback on reading /dev/urandom device when the
     getrandom() syscall fails with EPERM, for example when blocked by
     SECCOMP.

   - bpo-28192(139): Don’t import readline in isolated mode.

   - bpo-27441(140): Remove some redundant assignments to ob_size in
     longobject.c.  Thanks Oren Milman.

   - bpo-27222(141): Clean up redundant code in long_rshift function.
     Thanks Oren Milman.

   - Upgrade internal unicode databases to Unicode version 9.0.0.

   - bpo-28131(142): Fix a regression in zipimport’s compile_source().
     zipimport should use the same optimization level as the
     interpreter.

   - bpo-28126(143): Replace Py_MEMCPY with memcpy().  Visual Studio can
     properly optimize memcpy().

   - bpo-28120(144): Fix dict.pop() for splitted dictionary when trying
     to remove a “pending key” (Not yet inserted in split-table).  Patch
     by Xiang Zhang.

   - bpo-26182(145): Raise DeprecationWarning when async and await
     keywords are used as variable/attribute/class/function name.

   - bpo-26182(146): Fix a refleak in code that raises
     DeprecationWarning.

   - bpo-28721(147): Fix asynchronous generators aclose() and athrow()
     to handle StopAsyncIteration propagation properly.

   - bpo-26110(148): Speed-up method calls: add LOAD_METHOD and
     CALL_METHOD opcodes.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31490

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31471

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31418

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31416

   (5) https://bugs.python.org/issue?@action=redirect&bpo=28411

   (6) https://bugs.python.org/issue?@action=redirect&bpo=28411

   (7) https://bugs.python.org/issue?@action=redirect&bpo=31411

   (8) https://bugs.python.org/issue?@action=redirect&bpo=31344

   (9) https://bugs.python.org/issue?@action=redirect&bpo=31373

   (10) https://bugs.python.org/issue?@action=redirect&bpo=30465

   (11) https://bugs.python.org/issue?@action=redirect&bpo=30860

   (12) https://bugs.python.org/issue?@action=redirect&bpo=31347

   (13) https://bugs.python.org/issue?@action=redirect&bpo=31343

   (14) https://bugs.python.org/issue?@action=redirect&bpo=31291

   (15) https://bugs.python.org/issue?@action=redirect&bpo=31271

   (16) https://bugs.python.org/issue?@action=redirect&bpo=31243

   (17) https://bugs.python.org/issue?@action=redirect&bpo=30721

   (18) https://bugs.python.org/issue?@action=redirect&bpo=31070

   (19) https://bugs.python.org/issue?@action=redirect&bpo=30747

   (20) https://bugs.python.org/issue?@action=redirect&bpo=31095

   (21) https://bugs.python.org/issue?@action=redirect&bpo=31071

   (22) https://bugs.python.org/issue?@action=redirect&bpo=30978

   (23) https://bugs.python.org/issue?@action=redirect&bpo=30808

   (24) https://bugs.python.org/issue?@action=redirect&bpo=30876

   (25) https://bugs.python.org/issue?@action=redirect&bpo=30703

   (26) https://bugs.python.org/issue?@action=redirect&bpo=30765

   (27) https://bugs.python.org/issue?@action=redirect&bpo=31161

   (28) https://bugs.python.org/issue?@action=redirect&bpo=30814

   (29) https://bugs.python.org/issue?@action=redirect&bpo=30736

   (30) https://bugs.python.org/issue?@action=redirect&bpo=30604

   (31) https://bugs.python.org/issue?@action=redirect&bpo=30597

   (32) https://bugs.python.org/issue?@action=redirect&bpo=30682

   (33) https://bugs.python.org/issue?@action=redirect&bpo=30501

   (34) https://bugs.python.org/issue?@action=redirect&bpo=28180

   (35) https://peps.python.org/pep-0538/

   (36) https://bugs.python.org/issue?@action=redirect&bpo=30486

   (37) https://bugs.python.org/issue?@action=redirect&bpo=30537

   (38) https://bugs.python.org/issue?@action=redirect&bpo=25324

   (39) https://bugs.python.org/issue?@action=redirect&bpo=29104

   (40) https://bugs.python.org/issue?@action=redirect&bpo=27945

   (41) https://bugs.python.org/issue?@action=redirect&bpo=25794

   (42) https://bugs.python.org/issue?@action=redirect&bpo=30039

   (43) https://bugs.python.org/issue?@action=redirect&bpo=28974

   (44) https://bugs.python.org/issue?@action=redirect&bpo=30024

   (45) https://bugs.python.org/issue?@action=redirect&bpo=12414

   (46) https://bugs.python.org/issue?@action=redirect&bpo=29839

   (47) https://bugs.python.org/issue?@action=redirect&bpo=11913

   (48) https://bugs.python.org/issue?@action=redirect&bpo=29914

   (49) https://bugs.python.org/issue?@action=redirect&bpo=29949

   (50) https://bugs.python.org/issue?@action=redirect&bpo=29935

   (51) https://bugs.python.org/issue?@action=redirect&bpo=29816

   (52) https://bugs.python.org/issue?@action=redirect&bpo=24821

   (53) https://bugs.python.org/issue?@action=redirect&bpo=29102

   (54) https://bugs.python.org/issue?@action=redirect&bpo=29894

   (55) https://bugs.python.org/issue?@action=redirect&bpo=29859

   (56) https://bugs.python.org/issue?@action=redirect&bpo=29849

   (57) https://bugs.python.org/issue?@action=redirect&bpo=28856

   (58) https://bugs.python.org/issue?@action=redirect&bpo=29723

   (59) https://bugs.python.org/issue?@action=redirect&bpo=29139

   (60) https://bugs.python.org/issue?@action=redirect&bpo=29568

   (61) https://bugs.python.org/issue?@action=redirect&bpo=29714

   (62) https://bugs.python.org/issue?@action=redirect&bpo=29695

   (63) https://bugs.python.org/issue?@action=redirect&bpo=28893

   (64) https://bugs.python.org/issue?@action=redirect&bpo=28876

   (65) https://bugs.python.org/issue?@action=redirect&bpo=29683

   (66) https://bugs.python.org/issue?@action=redirect&bpo=29684

   (67) https://bugs.python.org/issue?@action=redirect&bpo=28598

   (68) https://bugs.python.org/issue?@action=redirect&bpo=29607

   (69) https://bugs.python.org/issue?@action=redirect&bpo=29602

   (70) https://bugs.python.org/issue?@action=redirect&bpo=29347

   (71) https://bugs.python.org/issue?@action=redirect&bpo=29463

   (72) https://bugs.python.org/issue?@action=redirect&bpo=32911

   (73) https://bugs.python.org/issue?@action=redirect&bpo=29438

   (74) https://bugs.python.org/issue?@action=redirect&bpo=29546

   (75) https://bugs.python.org/issue?@action=redirect&bpo=29546

   (76) https://bugs.python.org/issue?@action=redirect&bpo=29478

   (77) https://bugs.python.org/issue?@action=redirect&bpo=29319

   (78) https://bugs.python.org/issue?@action=redirect&bpo=29337

   (79) https://bugs.python.org/issue?@action=redirect&bpo=29327

   (80) https://bugs.python.org/issue?@action=redirect&bpo=29034

   (81) https://bugs.python.org/issue?@action=redirect&bpo=29159

   (82) https://bugs.python.org/issue?@action=redirect&bpo=29049

   (83) https://bugs.python.org/issue?@action=redirect&bpo=28927

   (84) https://bugs.python.org/issue?@action=redirect&bpo=28932

   (85) https://bugs.python.org/issue?@action=redirect&bpo=25677

   (86) https://bugs.python.org/issue?@action=redirect&bpo=29000

   (87) https://bugs.python.org/issue?@action=redirect&bpo=18896

   (88) https://bugs.python.org/issue?@action=redirect&bpo=28596

   (89) https://bugs.python.org/issue?@action=redirect&bpo=22257

   (90) https://peps.python.org/pep-0432/

   (91) https://bugs.python.org/issue?@action=redirect&bpo=26919

   (92) https://bugs.python.org/issue?@action=redirect&bpo=28991

   (93) https://bugs.python.org/issue?@action=redirect&bpo=28147

   (94) https://bugs.python.org/issue?@action=redirect&bpo=28739

   (95) https://bugs.python.org/issue?@action=redirect&bpo=28512

   (96) https://bugs.python.org/issue?@action=redirect&bpo=28918

   (97) https://bugs.python.org/issue?@action=redirect&bpo=23722

   (98) https://bugs.python.org/issue?@action=redirect&bpo=28797

   (99) https://bugs.python.org/issue?@action=redirect&bpo=28799

   (100) https://bugs.python.org/issue?@action=redirect&bpo=12844

   (101) https://bugs.python.org/issue?@action=redirect&bpo=28782

   (102) https://bugs.python.org/issue?@action=redirect&bpo=26647

   (103) https://bugs.python.org/issue?@action=redirect&bpo=28774

   (104) https://bugs.python.org/issue?@action=redirect&bpo=28731

   (105) https://bugs.python.org/issue?@action=redirect&bpo=28532

   (106) https://bugs.python.org/issue?@action=redirect&bpo=27100

   (107) https://bugs.python.org/issue?@action=redirect&bpo=28746

   (108) https://bugs.python.org/issue?@action=redirect&bpo=26920

   (109) https://bugs.python.org/issue?@action=redirect&bpo=28648

   (110) https://bugs.python.org/issue?@action=redirect&bpo=28665

   (111) https://bugs.python.org/issue?@action=redirect&bpo=19398

   (112) https://bugs.python.org/issue?@action=redirect&bpo=28621

   (113) https://bugs.python.org/issue?@action=redirect&bpo=28580

   (114) https://bugs.python.org/issue?@action=redirect&bpo=28583

   (115) https://bugs.python.org/issue?@action=redirect&bpo=28128

   (116) https://bugs.python.org/issue?@action=redirect&bpo=28509

   (117) https://bugs.python.org/issue?@action=redirect&bpo=28426

   (118) https://bugs.python.org/issue?@action=redirect&bpo=28517

   (119) https://bugs.python.org/issue?@action=redirect&bpo=28214

   (120) https://bugs.python.org/issue?@action=redirect&bpo=23782

   (121) https://bugs.python.org/issue?@action=redirect&bpo=28183

   (122) https://bugs.python.org/issue?@action=redirect&bpo=26081

   (123) https://bugs.python.org/issue?@action=redirect&bpo=28379

   (124) https://bugs.python.org/issue?@action=redirect&bpo=28376

   (125) https://bugs.python.org/issue?@action=redirect&bpo=28376

   (126) https://bugs.python.org/issue?@action=redirect&bpo=26906

   (127) https://bugs.python.org/issue?@action=redirect&bpo=18287

   (128) https://bugs.python.org/issue?@action=redirect&bpo=24098

   (129) https://bugs.python.org/issue?@action=redirect&bpo=28201

   (130) https://bugs.python.org/issue?@action=redirect&bpo=28350

   (131) https://bugs.python.org/issue?@action=redirect&bpo=26617

   (132) https://bugs.python.org/issue?@action=redirect&bpo=27942

   (133) https://bugs.python.org/issue?@action=redirect&bpo=28289

   (134) https://bugs.python.org/issue?@action=redirect&bpo=21578

   (135) https://bugs.python.org/issue?@action=redirect&bpo=28203

   (136) https://bugs.python.org/issue?@action=redirect&bpo=28086

   (137) https://bugs.python.org/issue?@action=redirect&bpo=28214

   (138) https://bugs.python.org/issue?@action=redirect&bpo=27955

   (139) https://bugs.python.org/issue?@action=redirect&bpo=28192

   (140) https://bugs.python.org/issue?@action=redirect&bpo=27441

   (141) https://bugs.python.org/issue?@action=redirect&bpo=27222

   (142) https://bugs.python.org/issue?@action=redirect&bpo=28131

   (143) https://bugs.python.org/issue?@action=redirect&bpo=28126

   (144) https://bugs.python.org/issue?@action=redirect&bpo=28120

   (145) https://bugs.python.org/issue?@action=redirect&bpo=26182

   (146) https://bugs.python.org/issue?@action=redirect&bpo=26182

   (147) https://bugs.python.org/issue?@action=redirect&bpo=28721

   (148) https://bugs.python.org/issue?@action=redirect&bpo=26110


File: python.info,  Node: Biblioteca<148>,  Next: Documentação<62>,  Prev: Núcleo e embutidos<145>,  Up: Python 3 7 0 alpha 1

1.23.73.3 Biblioteca
....................

   - bpo-31499(1): xml.etree: Fix a crash when a parser is part of a
     reference cycle.

   - bpo-31482(2): ‘random.seed()’ now works with bytes in version=1

   - bpo-28556(3): typing.get_type_hints now finds the right globalns
     for classes and modules by default (when no ‘globalns’ was
     specified by the caller).

   - bpo-28556(4): Speed improvements to the ‘typing’ module.  Original
     PRs by Ivan Levkivskyi and Mitar.

   - bpo-31544(5): The C accelerator module of ElementTree ignored
     exceptions raised when looking up TreeBuilder target methods in
     XMLParser().

   - bpo-31234(6): socket.create_connection() now fixes manually a
     reference cycle: clear the variable storing the last exception on
     success.

   - bpo-31457(7): LoggerAdapter objects can now be nested.

   - bpo-31431(8): SSLContext.check_hostname now automatically sets
     SSLContext.verify_mode to ssl.CERT_REQUIRED instead of failing with
     a ValueError.

   - bpo-31233(9): socketserver.ThreadingMixIn now keeps a list of
     non-daemonic threads to wait until all these threads complete in
     server_close().

   - bpo-28638(10): Changed the implementation strategy for
     collections.namedtuple() to substantially reduce the use of exec()
     in favor of precomputed methods.  As a result, the 'verbose'
     parameter and '_source' attribute are no longer supported.  The
     benefits include 1) having a smaller memory footprint for
     applications using multiple named tuples, 2) faster creation of the
     named tuple class (approx 4x to 6x depending on how it is
     measured), and 3) minor speed-ups for instance creation using
     __new__, _make, and _replace.  (The primary patch contributor is
     Jelle Zijlstra with further improvements by INADA Naoki, Serhiy
     Storchaka, and Raymond Hettinger.)

   - bpo-31400(11): Improves SSL error handling to avoid losing error
     numbers.

   - bpo-27629(12): Make return types of SSLContext.wrap_bio() and
     SSLContext.wrap_socket() customizable.

   - bpo-28958(13): ssl.SSLContext() now uses OpenSSL error information
     when a context cannot be instantiated.

   - bpo-28182(14): The SSL module now raises SSLCertVerificationError
     when OpenSSL fails to verify the peer’s certificate.  The exception
     contains more information about the error.

   - bpo-27340(15): SSLSocket.sendall() now uses memoryview to create
     slices of data.  This fixes support for all bytes-like object.  It
     is also more efficient and avoids costly copies.

   - bpo-14191(16): A new function
     ‘argparse.ArgumentParser.parse_intermixed_args’ provides the
     ability to parse command lines where there user intermixes options
     and positional arguments.

   - bpo-31178(17): Fix string concatenation bug in rare error path in
     the subprocess module

   - bpo-31350(18): Micro-optimize ‘asyncio._get_running_loop()’ to
     become up to 10% faster.

   - bpo-31170(19): expat: Update libexpat from 2.2.3 to 2.2.4.  Fix
     copying of partial characters for UTF-8 input (libexpat bug 115):
     ‘https://github.com/libexpat/libexpat/issues/115’

   - bpo-29136(20): Add TLS 1.3 cipher suites and OP_NO_TLSv1_3.

   - bpo-1198569(21): ‘string.Template’ subclasses can optionally define
     ‘braceidpattern’ if they want to specify different placeholder
     patterns inside and outside the braces.  If None (the default) it
     falls back to ‘idpattern’.

   - bpo-31326(22): concurrent.futures.ProcessPoolExecutor.shutdown()
     now explicitly closes the call queue.  Moreover,
     shutdown(wait=True) now also join the call queue thread, to prevent
     leaking a dangling thread.

   - bpo-27144(23): The ‘map()’ and ‘as_completed()’ iterators in
     ‘concurrent.futures’ now avoid keeping a reference to yielded
     objects.

   - bpo-31281(24): Fix ‘fileinput.FileInput(files, inplace=True)’ when
     ‘files’ contain ‘pathlib.Path’ objects.

   - bpo-10746(25): Fix ctypes producing wrong PEP 3118(26) type codes
     for integer types.

   - bpo-27584(27): ‘AF_VSOCK’ has been added to the socket interface
     which allows communication between virtual machines and their host.

   - bpo-22536(28): The subprocess module now sets the filename when
     FileNotFoundError is raised on POSIX systems due to the executable
     or cwd not being found.

   - bpo-29741(29): Update some methods in the _pyio module to also
     accept integer types.  Patch by Oren Milman.

   - bpo-31249(30): concurrent.futures: WorkItem.run() used by
     ThreadPoolExecutor now breaks a reference cycle between an
     exception object and the WorkItem object.

   - bpo-31247(31): xmlrpc.server now explicitly breaks reference cycles
     when using sys.exc_info() in code handling exceptions.

   - bpo-23835(32): configparser: reading defaults in the
     ‘ConfigParser()’ constructor is now using ‘read_dict()’, making its
     behavior consistent with the rest of the parser.  Non-string keys
     and values in the defaults dictionary are now being implicitly
     converted to strings.  Patch by James Tocknell.

   - bpo-31238(33): pydoc: the stop() method of the private ServerThread
     class now waits until DocServer.serve_until_quit() completes and
     then explicitly sets its docserver attribute to None to break a
     reference cycle.

   - bpo-5001(34): Many asserts in ‘multiprocessing’ are now more
     informative, and some error types have been changed to more
     specific ones.

   - bpo-31109(35): Convert zipimport to use Argument Clinic.

   - bpo-30102(36): The ssl and hashlib modules now call
     OPENSSL_add_all_algorithms_noconf() on OpenSSL < 1.1.0.  The
     function detects CPU features and enables optimizations on some CPU
     architectures such as POWER8.  Patch is based on research from
     Gustavo Serra Scalet.

   - bpo-18966(37): Non-daemonic threads created by a
     multiprocessing.Process are now joined on child exit.

   - bpo-31183(38): ‘dis’ now works with asynchronous generator and
     coroutine objects.  Patch by George Collins based on diagnosis by
     Luciano Ramalho.

   - bpo-5001(39): There are a number of uninformative asserts in the
     ‘multiprocessing’ module, as noted in issue 5001.  This change
     fixes two of the most potentially problematic ones, since they are
     in error-reporting code, in the
     ‘multiprocessing.managers.convert_to_error’ function.  (It also
     makes more informative a ValueError message.)  The only potentially
     problematic change is that the AssertionError is now a TypeError;
     however, this should also help distinguish it from an
     AssertionError being 'reported' by the function/its caller (such as
     in issue 31169).  - Patch by Allen W. Smith (drallensmith on
     github).

   - bpo-31185(40): Fixed miscellaneous errors in asyncio speedup
     module.

   - bpo-31151(41): socketserver.ForkingMixIn.server_close() now waits
     until all child processes completed to prevent leaking zombie
     processes.

   - bpo-31072(42): Add an ‘include_file’ parameter to
     ‘zipapp.create_archive()’

   - bpo-24700(43): Optimize array.array comparison.  It is now from 10x
     up to 70x faster when comparing arrays holding values of the same
     integer type.

   - bpo-31135(44): ttk: fix the destroy() method of LabeledScale and
     OptionMenu classes.  Call the parent destroy() method even if the
     used attribute doesn’t exist.  The LabeledScale.destroy() method
     now also explicitly clears label and scale attributes to help the
     garbage collector to destroy all widgets.

   - bpo-31107(45): Fix ‘copyreg._slotnames()’ mangled attribute
     calculation for classes whose name begins with an underscore.
     Patch by Shane Harvey.

   - bpo-31080(46): Allow ‘logging.config.fileConfig’ to accept kwargs
     and/or args.

   - bpo-30897(47): ‘pathlib.Path’ objects now include an ‘is_mount()’
     method (only implemented on POSIX). This is similar to
     ‘os.path.ismount(p)’.  Patch by Cooper Ry Lees.

   - bpo-31061(48): Fixed a crash when using asyncio and threads.

   - bpo-30987(49): Added support for CAN ISO-TP protocol in the socket
     module.

   - bpo-30522(50): Added a ‘setStream’ method to
     ‘logging.StreamHandler’ to allow the stream to be set after
     creation.

   - bpo-30502(51): Fix handling of long oids in ssl.  Based on patch by
     Christian Heimes.

   - bpo-5288(52): Support tzinfo objects with sub-minute offsets.

   - bpo-30919(53): Fix shared memory performance regression in
     multiprocessing in 3.x.  Shared memory used anonymous memory
     mappings in 2.x, while 3.x mmaps actual files.  Try to be careful
     to do as little disk I/O as possible.

   - bpo-26732(54): Fix too many fds in processes started with the
     “forkserver” method.  A child process would inherit as many fds as
     the number of still-running children.

   - bpo-29403(55): Fix ‘unittest.mock’’s autospec to not fail on
     method-bound builtin functions.  Patch by Aaron Gallagher.

   - bpo-30961(56): Fix decrementing a borrowed reference in
     tracemalloc.

   - bpo-19896(57): Fix multiprocessing.sharedctypes to recognize
     typecodes ‘'q'’ and ‘'Q'’.

   - bpo-30946(58): Remove obsolete code in readline module for
     platforms where GNU readline is older than 2.1 or where select() is
     not available.

   - bpo-25684(59): Change ‘ttk.OptionMenu’ radiobuttons to be unique
     across instances of ‘OptionMenu’.

   - bpo-30886(60): Fix multiprocessing.Queue.join_thread(): it now
     waits until the thread completes, even if the thread was started by
     the same process which created the queue.

   - bpo-29854(61): Fix segfault in readline when using readline’s
     history-size option.  Patch by Nir Soffer.

   - bpo-30794(62): Added multiprocessing.Process.kill method to
     terminate using the SIGKILL signal on Unix.

   - bpo-30319(63): socket.close() now ignores ECONNRESET error.

   - bpo-30828(64): Fix out of bounds write in
     ‘asyncio.CFuture.remove_done_callback()’.

   - bpo-30302(65): Use keywords in the ‘repr’ of ‘datetime.timedelta’.

   - bpo-30807(66): signal.setitimer() may disable the timer when passed
     a tiny value.  Tiny values (such as 1e-6) are valid non-zero values
     for setitimer(), which is specified as taking
     microsecond-resolution intervals.  However, on some platform, our
     conversion routine could convert 1e-6 into a zero interval,
     therefore disabling the timer instead of (re-)scheduling it.

   - bpo-30441(67): Fix bug when modifying os.environ while iterating
     over it

   - bpo-29585(68): Avoid importing ‘sysconfig’ from ‘site’ to improve
     startup speed.  Python startup is about 5% faster on Linux and 30%
     faster on macOS.

   - bpo-29293(69): Add missing parameter “n” on
     multiprocessing.Condition.notify().  The doc claims
     multiprocessing.Condition behaves like threading.Condition, but its
     notify() method lacked the optional “n” argument (to specify the
     number of sleepers to wake up) that threading.Condition.notify()
     accepts.

   - bpo-30532(70): Fix email header value parser dropping folding white
     space in certain cases.

   - bpo-30596(71): Add a ‘close()’ method to ‘multiprocessing.Process’.

   - bpo-9146(72): Fix a segmentation fault in _hashopenssl when
     standard hash functions such as md5 are not available in the linked
     OpenSSL library.  As in some special FIPS-140 build environments.

   - bpo-29169(73): Update zlib to 1.2.11.

   - bpo-30119(74): ftplib.FTP.putline() now throws ValueError on
     commands that contains CR or LF. Patch by Donghee Na.

   - bpo-30879(75): os.listdir() and os.scandir() now emit bytes names
     when called with bytes-like argument.

   - bpo-30746(76): Prohibited the ‘=’ character in environment variable
     names in ‘os.putenv()’ and ‘os.spawn*()’.

   - bpo-30664(77): The description of a unittest subtest now preserves
     the order of keyword arguments of TestCase.subTest().

   - bpo-21071(78): struct.Struct.format type is now *note str: 44c.
     instead of *note bytes: 1c2.

   - bpo-29212(79): Fix concurrent.futures.thread.ThreadPoolExecutor
     threads to have a non repr() based thread name by default when no
     thread_name_prefix is supplied.  They will now identify themselves
     as “ThreadPoolExecutor-y_n”.

   - bpo-29755(80): Fixed the lgettext() family of functions in the
     gettext module.  They now always return bytes.

   - bpo-30616(81): Functional API of enum allows to create empty enums.
     Patched by Donghee Na

   - bpo-30038(82): Fix race condition between signal delivery and
     wakeup file descriptor.  Patch by Nathaniel Smith.

   - bpo-23894(83): lib2to3 now recognizes ‘rb'...'’ and ‘f'...'’
     strings.

   - bpo-24744(84): pkgutil.walk_packages function now raises ValueError
     if 'path' is a string.  Patch by Sanyam Khurana.

   - bpo-24484(85): Avoid race condition in multiprocessing cleanup.

   - bpo-30589(86): Fix multiprocessing.Process.exitcode to return the
     opposite of the signal number when the process is killed by a
     signal (instead of 255) when using the “forkserver” method.

   - bpo-28994(87): The traceback no longer displayed for SystemExit
     raised in a callback registered by atexit.

   - bpo-30508(88): Don’t log exceptions if Task/Future “cancel()”
     method was called.

   - bpo-30645(89): Fix path calculation in ‘imp.load_package()’, fixing
     it for cases when a package is only shipped with bytecodes.  Patch
     by Alexandru Ardelean.

   - bpo-11822(90): The dis.dis() function now is able to disassemble
     nested code objects.

   - bpo-30624(91): selectors does not take KeyboardInterrupt and
     SystemExit into account, leaving a fd in a bad state in case of
     error.  Patch by Giampaolo Rodola’.

   - bpo-30595(92): multiprocessing.Queue.get() with a timeout now polls
     its reader in non-blocking mode if it succeeded to acquire the lock
     but the acquire took longer than the timeout.

   - bpo-28556(93): Updates to typing module: Add generic
     AsyncContextManager, add support for ContextManager on all
     versions.  Original PRs by Jelle Zijlstra and Ivan Levkivskyi

   - bpo-30605(94): re.compile() no longer raises a BytesWarning when
     compiling a bytes instance with misplaced inline modifier.  Patch
     by Roy Williams.

   - bpo-29870(95): Fix ssl sockets leaks when connection is aborted in
     asyncio/ssl implementation.  Patch by Michaël Sghaïer.

   - bpo-29743(96): Closing transport during handshake process leaks
     open socket.  Patch by Nikolay Kim

   - bpo-27585(97): Fix waiter cancellation in asyncio.Lock.  Patch by
     Mathieu Sornay.

   - bpo-30014(98): modify() method of poll(), epoll() and devpoll()
     based classes of selectors module is around 10% faster.  Patch by
     Giampaolo Rodola’.

   - bpo-30418(99): On Windows, subprocess.Popen.communicate() now also
     ignore EINVAL on stdin.write() if the child process is still
     running but closed the pipe.

   - bpo-30463(100): Addded empty __slots__ to abc.ABC. This allows
     subclassers to deny __dict__ and __weakref__ creation.  Patch by
     Aaron Hall.

   - bpo-30520(101): Loggers are now pickleable.

   - bpo-30557(102): faulthandler now correctly filters and displays
     exception codes on Windows

   - bpo-30526(103): Add TextIOWrapper.reconfigure() and a
     TextIOWrapper.write_through attribute.

   - bpo-30245(104): Fix possible overflow when organize
     struct.pack_into error message.  Patch by Yuan Liu.

   - bpo-30378(105): Fix the problem that logging.handlers.SysLogHandler
     cannot handle IPv6 addresses.

   - bpo-16500(106): Allow registering at-fork handlers.

   - bpo-30470(107): Deprecate invalid ctypes call protection on
     Windows.  Patch by Mariatta Wijaya.

   - bpo-30414(108): multiprocessing.Queue._feed background running
     thread do not break from main loop on exception.

   - bpo-30003(109): Fix handling escape characters in HZ codec.  Based
     on patch by Ma Lin.

   - bpo-30149(110): inspect.signature() now supports callables with
     variable-argument parameters wrapped with partialmethod.  Patch by
     Donghee Na.

   - bpo-30436(111): importlib.find_spec() raises ModuleNotFoundError
     instead of AttributeError if the specified parent module is not a
     package (i.e.  lacks a __path__ attribute).

   - bpo-30301(112): Fix AttributeError when using SimpleQueue.empty()
     under 'spawn' and 'forkserver' start methods.

   - bpo-30375(113): Warnings emitted when compile a regular expression
     now always point to the line in the user code.  Previously they
     could point into inners of the re module if emitted from inside of
     groups or conditionals.

   - bpo-30329(114): imaplib and poplib now catch the Windows socket
     WSAEINVAL error (code 10022) on shutdown(SHUT_RDWR): An invalid
     operation was attempted.  This error occurs sometimes on SSL
     connections.

   - bpo-29196(115): Removed previously deprecated in Python 2.4 classes
     Plist, Dict and _InternalDict in the plistlib module.  Dict values
     in the result of functions readPlist() and readPlistFromBytes() are
     now normal dicts.  You no longer can use attribute access to access
     items of these dictionaries.

   - bpo-9850(116): The ‘macpath’ is now deprecated and will be removed
     in Python 3.8.

   - bpo-30299(117): Compiling regular expression in debug mode on
     CPython now displays the compiled bytecode in human readable form.

   - bpo-30048(118): Fixed ‘Task.cancel()’ can be ignored when the task
     is running coroutine and the coroutine returned without any more
     ‘await’.

   - bpo-30266(119): contextlib.AbstractContextManager now supports
     anti-registration by setting __enter__ = None or __exit__ = None,
     following the pattern introduced in bpo-25958(120).  Patch by Jelle
     Zijlstra.

   - bpo-30340(121): Enhanced regular expressions optimization.  This
     increased the performance of matching some patterns up to 25 times.

   - bpo-30298(122): Weaken the condition of deprecation warnings for
     inline modifiers.  Now allowed several subsequential inline
     modifiers at the start of the pattern (e.g.  ‘'(?i)(?s)...'’).  In
     verbose mode whitespaces and comments now are allowed before and
     between inline modifiers (e.g.  ‘'(?x) (?i) (?s)...'’).

   - bpo-30285(123): Optimized case-insensitive matching and searching
     of regular expressions.

   - bpo-29990(124): Fix range checking in GB18030 decoder.  Original
     patch by Ma Lin.

   - bpo-29979(125): rewrite cgi.parse_multipart, reusing the
     FieldStorage class and making its results consistent with those of
     FieldStorage for multipart/form-data requests.  Patch by Pierre
     Quentel.

   - bpo-30243(126): Removed the __init__ methods of _json’s scanner and
     encoder.  Misusing them could cause memory leaks or crashes.  Now
     scanner and encoder objects are completely initialized in the
     __new__ methods.

   - bpo-30215(127): Compiled regular expression objects with the
     re.LOCALE flag no longer depend on the locale at compile time.
     Only the locale at matching time affects the result of matching.

   - bpo-30185(128): Avoid KeyboardInterrupt tracebacks in forkserver
     helper process when Ctrl-C is received.

   - bpo-30103(129): binascii.b2a_uu() and uu.encode() now support using
     ‘'`'’ as zero instead of space.

   - bpo-28556(130): Various updates to typing module: add
     typing.NoReturn type, use WrapperDescriptorType, minor bug-fixes.
     Original PRs by Jim Fasarakis-Hilliard and Ivan Levkivskyi.

   - bpo-30205(131): Fix getsockname() for unbound AF_UNIX sockets on
     Linux.

   - bpo-30228(132): The seek() and tell() methods of io.FileIO now set
     the internal seekable attribute to avoid one syscall on open() (in
     buffered or text mode).

   - bpo-30190(133): unittest’s assertAlmostEqual and
     assertNotAlmostEqual provide a better message in case of failure
     which includes the difference between left and right arguments.
     (patch by Giampaolo Rodola’)

   - bpo-30101(134): Add support for curses.A_ITALIC.

   - bpo-29822(135): inspect.isabstract() now works during
     __init_subclass__.  Patch by Nate Soares.

   - bpo-29960(136): Preserve generator state when
     _random.Random.setstate() raises an exception.  Patch by Bryan
     Olson.

   - bpo-30070(137): Fixed leaks and crashes in errors handling in the
     parser module.

   - bpo-22352(138): Column widths in the output of dis.dis() are now
     adjusted for large line numbers and instruction offsets.

   - bpo-30061(139): Fixed crashes in IOBase methods __next__() and
     readlines() when readline() or __next__() respectively return
     non-sizeable object.  Fixed possible other errors caused by not
     checking results of PyObject_Size(), PySequence_Size(), or
     PyMapping_Size().

   - bpo-30218(140): Fix PathLike support for shutil.unpack_archive.
     Patch by Jelle Zijlstra.

   - bpo-10076(141): Compiled regular expression and match objects in
     the re module now support copy.copy() and copy.deepcopy() (they are
     considered atomic).

   - bpo-30068(142): _io._IOBase.readlines will check if it’s closed
     first when hint is present.

   - bpo-29694(143): Fixed race condition in pathlib mkdir with flags
     parents=True.  Patch by Armin Rigo.

   - bpo-29692(144): Fixed arbitrary unchaining of RuntimeError
     exceptions in contextlib.contextmanager.  Patch by Siddharth
     Velankar.

   - bpo-26187(145): Test that sqlite3 trace callback is not called
     multiple times when schema is changing.  Indirectly fixed by
     switching to use sqlite3_prepare_v2() in bpo-9303(146).  Patch by
     Aviv Palivoda.

   - bpo-30017(147): Allowed calling the close() method of the zip entry
     writer object multiple times.  Writing to a closed writer now
     always produces a ValueError.

   - bpo-29998(148): Pickling and copying ImportError now preserves name
     and path attributes.

   - bpo-29995(149): re.escape() now escapes only regex special
     characters.

   - bpo-29962(150): Add math.remainder operation, implementing
     remainder as specified in IEEE 754.

   - bpo-29649(151): Improve struct.pack_into() exception messages for
     problems with the buffer size and offset.  Patch by Andrew Nester.

   - bpo-29654(152): Support If-Modified-Since HTTP header (browser
     cache).  Patch by Pierre Quentel.

   - bpo-29931(153): Fixed comparison check for ipaddress.ip_interface
     objects.  Patch by Sanjay Sundaresan.

   - bpo-29953(154): Fixed memory leaks in the replace() method of
     datetime and time objects when pass out of bound fold argument.

   - bpo-29942(155): Fix a crash in itertools.chain.from_iterable when
     encountering long runs of empty iterables.

   - bpo-10030(156): Sped up reading encrypted ZIP files by 2 times.

   - bpo-29204(157): Element.getiterator() and the html parameter of
     XMLParser() were deprecated only in the documentation (since Python
     3.2 and 3.4 correspondingly).  Now using them emits a deprecation
     warning.

   - bpo-27863(158): Fixed multiple crashes in ElementTree caused by
     race conditions and wrong types.

   - bpo-25996(159): Added support of file descriptors in os.scandir()
     on Unix.  os.fwalk() is sped up by 2 times by using os.scandir().

   - bpo-28699(160): Fixed a bug in pools in multiprocessing.pool that
     raising an exception at the very first of an iterable may swallow
     the exception or make the program hang.  Patch by Davin Potts and
     Xiang Zhang.

   - bpo-23890(161): unittest.TestCase.assertRaises() now manually
     breaks a reference cycle to not keep objects alive longer than
     expected.

   - bpo-29901(162): The zipapp module now supports general path-like
     objects, not just pathlib.Path.

   - bpo-25803(163): Avoid incorrect errors raised by
     Path.mkdir(exist_ok=True) when the OS gives priority to errors such
     as EACCES over EEXIST.

   - bpo-29861(164): Release references to tasks, their arguments and
     their results as soon as they are finished in multiprocessing.Pool.

   - bpo-19930(165): The mode argument of os.makedirs() no longer
     affects the file permission bits of newly created
     intermediate-level directories.

   - bpo-29884(166): faulthandler: Restore the old sigaltstack during
     teardown.  Patch by Christophe Zeitouny.

   - bpo-25455(167): Fixed crashes in repr of recursive buffered
     file-like objects.

   - bpo-29800(168): Fix crashes in partial.__repr__ if the keys of
     partial.keywords are not strings.  Patch by Michael Seifert.

   - bpo-8256(169): Fixed possible failing or crashing input() if
     attributes “encoding” or “errors” of sys.stdin or sys.stdout are
     not set or are not strings.

   - bpo-28692(170): Using non-integer value for selecting a plural form
     in gettext is now deprecated.

   - bpo-26121(171): Use C library implementation for math functions
     erf() and erfc().

   - bpo-29619(172): os.stat() and os.DirEntry.inode() now convert inode
     (st_ino) using unsigned integers.

   - bpo-28298(173): Fix a bug that prevented array ‘Q’, ‘L’ and ‘I’
     from accepting big intables (objects that have __int__) as
     elements.

   - bpo-29645(174): Speed up importing the webbrowser module.
     webbrowser.register() is now thread-safe.

   - bpo-28231(175): The zipfile module now accepts path-like objects
     for external paths.

   - bpo-26915(176): index() and count() methods of
     collections.abc.Sequence now check identity before checking
     equality when do comparisons.

   - bpo-28682(177): Added support for bytes paths in os.fwalk().

   - bpo-29728(178): Add new ‘socket.TCP_NOTSENT_LOWAT’ (Linux 3.12)
     constant.  Patch by Nathaniel J. Smith.

   - bpo-29623(179): Allow use of path-like object as a single argument
     in ConfigParser.read().  Patch by David Ellis.

   - bpo-9303(180): Migrate sqlite3 module to _v2 API. Patch by Aviv
     Palivoda.

   - bpo-28963(181): Fix out of bound iteration in
     asyncio.Future.remove_done_callback implemented in C.

   - bpo-29704(182): asyncio.subprocess.SubprocessStreamProtocol no
     longer closes before all pipes are closed.

   - bpo-29271(183): Fix Task.current_task and Task.all_tasks
     implemented in C to accept None argument as their pure Python
     implementation.

   - bpo-29703(184): Fix asyncio to support instantiation of new event
     loops in child processes.

   - bpo-29615(185): SimpleXMLRPCDispatcher no longer chains KeyError
     (or any other exception) to exception(s) raised in the dispatched
     methods.  Patch by Petr Motejlek.

   - bpo-7769(186): Method register_function() of
     xmlrpc.server.SimpleXMLRPCDispatcher and its subclasses can now be
     used as a decorator.

   - bpo-29376(187): Fix assertion error in
     threading._DummyThread.is_alive().

   - bpo-28624(188): Add a test that checks that cwd parameter of
     Popen() accepts PathLike objects.  Patch by Sayan Chowdhury.

   - bpo-28518(189): Start a transaction implicitly before a DML
     statement.  Patch by Aviv Palivoda.

   - bpo-29742(190): get_extra_info() raises exception if get called on
     closed ssl transport.  Patch by Nikolay Kim.

   - bpo-16285(191): urllib.parse.quote is now based on RFC 3986 and
     hence includes ‘~’ in the set of characters that is not quoted by
     default.  Patch by Christian Theune and Ratnadeep Debnath.

   - bpo-29532(192): Altering a kwarg dictionary passed to
     functools.partial() no longer affects a partial object after
     creation.

   - bpo-29110(193): Fix file object leak in aifc.open() when file is
     given as a filesystem path and is not in valid AIFF format.  Patch
     by Anthony Zhang.

   - bpo-22807(194): Add uuid.SafeUUID and uuid.UUID.is_safe to relay
     information from the platform about whether generated UUIDs are
     generated with a multiprocessing safe method.

   - bpo-29576(195): Improve some deprecations in importlib.  Some
     deprecated methods now emit DeprecationWarnings and have better
     descriptive messages.

   - bpo-29534(196): Fixed different behaviour of Decimal.from_float()
     for _decimal and _pydecimal.  Thanks Andrew Nester.

   - bpo-10379(197): locale.format_string now supports the ‘monetary’
     keyword argument, and locale.format is deprecated.

   - bpo-29851(198): importlib.reload() now raises ModuleNotFoundError
     if the module lacks a spec.

   - bpo-28556(199): Various updates to typing module: typing.Counter,
     typing.ChainMap, improved ABC caching, etc.  Original PRs by Jelle
     Zijlstra, Ivan Levkivskyi, Manuel Krebber, and Łukasz Langa.

   - bpo-29100(200): Fix datetime.fromtimestamp() regression introduced
     in Python 3.6.0: check minimum and maximum years.

   - bpo-29416(201): Prevent infinite loop in pathlib.Path.mkdir

   - bpo-29444(202): Fixed out-of-bounds buffer access in the group()
     method of the match object.  Based on patch by WGH.

   - bpo-29377(203): Add WrapperDescriptorType, MethodWrapperType, and
     MethodDescriptorType built-in types to types module.  Original
     patch by Manuel Krebber.

   - bpo-29218(204): Unused install_misc command is now removed.  It has
     been documented as unused since 2000.  Patch by Eric N. Vander
     Weele.

   - bpo-29368(205): The extend() method is now called instead of the
     append() method when unpickle collections.deque and other list-like
     objects.  This can speed up unpickling to 2 times.

   - bpo-29338(206): The help of a builtin or extension class now
     includes the constructor signature if __text_signature__ is
     provided for the class.

   - bpo-29335(207): Fix subprocess.Popen.wait() when the child process
     has exited to a stopped instead of terminated state (ex: when under
     ptrace).

   - bpo-29290(208): Fix a regression in argparse that help messages
     would wrap at non-breaking spaces.

   - bpo-28735(209): Fixed the comparison of mock.MagickMock with
     mock.ANY.

   - bpo-29197(210): Removed deprecated function ntpath.splitunc().

   - bpo-29210(211): Removed support of deprecated argument “exclude” in
     tarfile.TarFile.add().

   - bpo-29219(212): Fixed infinite recursion in the repr of
     uninitialized ctypes.CDLL instances.

   - bpo-29192(213): Removed deprecated features in the http.cookies
     module.

   - bpo-29193(214): A format string argument for
     string.Formatter.format() is now positional-only.

   - bpo-29195(215): Removed support of deprecated undocumented keyword
     arguments in methods of regular expression objects.

   - bpo-28969(216): Fixed race condition in C implementation of
     functools.lru_cache.  KeyError could be raised when cached function
     with full cache was simultaneously called from different threads
     with the same uncached arguments.

   - bpo-20804(217): The unittest.mock.sentinel attributes now preserve
     their identity when they are copied or pickled.

   - bpo-29142(218): In urllib.request, suffixes in no_proxy environment
     variable with leading dots could match related hostnames again
     (e.g.  .b.c matches a.b.c).  Patch by Milan Oberkirch.

   - bpo-28961(219): Fix unittest.mock._Call helper: don’t ignore the
     name parameter anymore.  Patch written by Jiajun Huang.

   - bpo-15812(220): inspect.getframeinfo() now correctly shows the
     first line of a context.  Patch by Sam Breese.

   - bpo-28985(221): Update authorizer constants in sqlite3 module.
     Patch by Dingyuan Wang.

   - bpo-29079(222): Prevent infinite loop in pathlib.resolve() on
     Windows

   - bpo-13051(223): Fixed recursion errors in large or resized
     curses.textpad.Textbox.  Based on patch by Tycho Andersen.

   - bpo-9770(224): curses.ascii predicates now work correctly with
     negative integers.

   - bpo-28427(225): old keys should not remove new values from
     WeakValueDictionary when collecting from another thread.

   - bpo-28923(226): Remove editor artifacts from Tix.py.

   - bpo-28871(227): Fixed a crash when deallocate deep ElementTree.

   - bpo-19542(228): Fix bugs in WeakValueDictionary.setdefault() and
     WeakValueDictionary.pop() when a GC collection happens in another
     thread.

   - bpo-20191(229): Fixed a crash in resource.prlimit() when passing a
     sequence that doesn’t own its elements as limits.

   - bpo-16255(230): subprocess.Popen uses /system/bin/sh on Android as
     the shell, instead of /bin/sh.

   - bpo-28779(231): multiprocessing.set_forkserver_preload() would
     crash the forkserver process if a preloaded module instantiated
     some multiprocessing objects such as locks.

   - bpo-26937(232): The chown() method of the tarfile.TarFile class
     does not fail now when the grp module cannot be imported, as for
     example on Android platforms.

   - bpo-28847(233): dbm.dumb now supports reading read-only files and
     no longer writes the index file when it is not changed.  A
     deprecation warning is now emitted if the index file is missed and
     recreated in the ‘r’ and ‘w’ modes (will be an error in future
     Python releases).

   - bpo-27030(234): Unknown escapes consisting of ‘'\'’ and an ASCII
     letter in re.sub() replacement templates regular expressions now
     are errors.

   - bpo-28835(235): Fix a regression introduced in
     warnings.catch_warnings(): call warnings.showwarning() if it was
     overridden inside the context manager.

   - bpo-27172(236): To assist with upgrades from 2.7, the previously
     documented deprecation of ‘inspect.getfullargspec()’ has been
     reversed.  This decision may be revisited again after the Python
     2.7 branch is no longer officially supported.

   - bpo-28740(237): Add sys.getandroidapilevel(): return the build time
     API version of Android as an integer.  Function only available on
     Android.

   - bpo-26273(238): Add new ‘socket.TCP_CONGESTION’ (Linux 2.6.13) and
     ‘socket.TCP_USER_TIMEOUT’ (Linux 2.6.37) constants.  Patch written
     by Omar Sandoval.

   - bpo-28752(239): Restored the __reduce__() methods of datetime
     objects.

   - bpo-28727(240): Regular expression patterns, _sre.SRE_Pattern
     objects created by re.compile(), become comparable (only x==y and
     x!=y operators).  This change should fix the bpo-18383(241): don’t
     duplicate warning filters when the warnings module is reloaded
     (thing usually only done in unit tests).

   - bpo-20572(242): Remove the subprocess.Popen.wait endtime parameter.
     It was deprecated in 3.4 and undocumented prior to that.

   - bpo-25659(243): In ctypes, prevent a crash calling the
     from_buffer() and from_buffer_copy() methods on abstract classes
     like Array.

   - bpo-28548(244): In the “http.server” module, parse the protocol
     version if possible, to avoid using HTTP 0.9 in some error
     responses.

   - bpo-19717(245): Makes Path.resolve() succeed on paths that do not
     exist.  Patch by Vajrasky Kok

   - bpo-28563(246): Fixed possible DoS and arbitrary code execution
     when handle plural form selections in the gettext module.  The
     expression parser now supports exact syntax supported by GNU
     gettext.

   - bpo-28387(247): Fixed possible crash in _io.TextIOWrapper
     deallocator when the garbage collector is invoked in other thread.
     Based on patch by Sebastian Cufre.

   - bpo-27517(248): LZMA compressor and decompressor no longer raise
     exceptions if given empty data twice.  Patch by Benjamin Fogle.

   - bpo-28549(249): Fixed segfault in curses’s addch() with ncurses6.

   - bpo-28449(250): tarfile.open() with mode “r” or “r:” now tries to
     open a tar file with compression before trying to open it without
     compression.  Otherwise it had 50% chance failed with
     ignore_zeros=True.

   - bpo-23262(251): The webbrowser module now supports Firefox 36+ and
     derived browsers.  Based on patch by Oleg Broytman.

   - bpo-24241(252): The webbrowser in an X environment now prefers
     using the default browser directly.  Also, the webbrowser
     register() function now has a documented ‘preferred’ argument, to
     specify browsers to be returned by get() with no arguments.  Patch
     by David Steele

   - bpo-27939(253): Fixed bugs in tkinter.ttk.LabeledScale and
     tkinter.Scale caused by representing the scale as float value
     internally in Tk.  tkinter.IntVar now works if float value is set
     to underlying Tk variable.

   - bpo-28255(254): calendar.TextCalendar.prweek() no longer prints a
     space after a weeks’s calendar.  calendar.TextCalendar.pryear() no
     longer prints redundant newline after a year’s calendar.  Based on
     patch by Xiang Zhang.

   - bpo-28255(255): calendar.TextCalendar.prmonth() no longer prints a
     space at the start of new line after printing a month’s calendar.
     Patch by Xiang Zhang.

   - bpo-20491(256): The textwrap.TextWrapper class now honors
     non-breaking spaces.  Based on patch by Kaarle Ritvanen.

   - bpo-28353(257): os.fwalk() no longer fails on broken links.

   - bpo-28430(258): Fix iterator of C implemented asyncio.Future
     doesn’t accept non-None value is passed to it.send(val).

   - bpo-27025(259): Generated names for Tkinter widgets now start by
     the “!” prefix for readability.

   - bpo-25464(260): Fixed HList.header_exists() in tkinter.tix module
     by addin a workaround to Tix library bug.

   - bpo-28488(261): shutil.make_archive() no longer adds entry “./” to
     ZIP archive.

   - bpo-25953(262): re.sub() now raises an error for invalid numerical
     group reference in replacement template even if the pattern is not
     found in the string.  Error message for invalid group reference now
     includes the group index and the position of the reference.  Based
     on patch by SilentGhost.

   - bpo-28469(263): timeit now uses the sequence 1, 2, 5, 10, 20, 50,…
     instead of 1, 10, 100,… for autoranging.

   - bpo-28115(264): Command-line interface of the zipfile module now
     uses argparse.  Added support of long options.

   - bpo-18219(265): Optimize csv.DictWriter for large number of
     columns.  Patch by Mariatta Wijaya.

   - bpo-28448(266): Fix C implemented asyncio.Future didn’t work on
     Windows.

   - bpo-23214(267): In the “io” module, the argument to BufferedReader
     and BytesIO’s read1() methods is now optional and can be -1,
     matching the BufferedIOBase specification.

   - bpo-28480(268): Fix error building socket module when
     multithreading is disabled.

   - bpo-28240(269): timeit: remove ‘-c/--clock’ and ‘-t/--time’ command
     line options which were deprecated since Python 3.3.

   - bpo-28240(270): timeit now repeats the benchmarks 5 times instead
     of only 3 to make benchmarks more reliable.

   - bpo-28240(271): timeit autorange now uses a single loop iteration
     if the benchmark takes less than 10 seconds, instead of 10
     iterations.  “python3 -m timeit -s ‘import time’ ‘time.sleep(1)’”
     now takes 4 seconds instead of 40 seconds.

   - Distutils.sdist now looks for README and setup.py files with case
     sensitivity.  This behavior matches that found in Setuptools 6.0
     and later.  See setuptools 100(272) for rationale.

   - bpo-24452(273): Make webbrowser support Chrome on Mac OS X. Patch
     by Ned Batchelder.

   - bpo-20766(274): Fix references leaked by pdb in the handling of
     SIGINT handlers.

   - bpo-27998(275): Fixed bytes path support in os.scandir() on
     Windows.  Patch by Eryk Sun.

   - bpo-28317(276): The disassembler now decodes FORMAT_VALUE argument.

   - bpo-28380(277): unittest.mock Mock autospec functions now properly
     support assert_called, assert_not_called, and assert_called_once.

   - bpo-28229(278): lzma module now supports pathlib.

   - bpo-28321(279): Fixed writing non-BMP characters with binary format
     in plistlib.

   - bpo-28225(280): bz2 module now supports pathlib.  Initial patch by
     Ethan Furman.

   - bpo-28227(281): gzip now supports pathlib.  Patch by Ethan Furman.

   - bpo-28332(282): Deprecated silent truncations in socket.htons and
     socket.ntohs.  Original patch by Oren Milman.

   - bpo-27358(283): Optimized merging var-keyword arguments and
     improved error message when passing a non-mapping as a var-keyword
     argument.

   - bpo-28257(284): Improved error message when passing a non-iterable
     as a var-positional argument.  Added opcode
     BUILD_TUPLE_UNPACK_WITH_CALL.

   - bpo-28322(285): Fixed possible crashes when unpickle itertools
     objects from incorrect pickle data.  Based on patch by John Leitch.

   - bpo-28228(286): imghdr now supports pathlib.

   - bpo-28226(287): compileall now supports pathlib.

   - bpo-28314(288): Fix function declaration (C flags) for the
     getiterator() method of xml.etree.ElementTree.Element.

   - bpo-28148(289): Stop using localtime() and gmtime() in the time
     module.  Introduced platform independent _PyTime_localtime API that
     is similar to POSIX localtime_r, but available on all platforms.
     Patch by Ed Schouten.

   - bpo-28253(290): Fixed calendar functions for extreme months:
     0001-01 and 9999-12.  Methods itermonthdays() and itermonthdays2()
     are reimplemented so that they don’t call itermonthdates() which
     can cause datetime.date under/overflow.

   - bpo-28275(291): Fixed possible use after free in the decompress()
     methods of the LZMADecompressor and BZ2Decompressor classes.
     Original patch by John Leitch.

   - bpo-27897(292): Fixed possible crash in
     sqlite3.Connection.create_collation() if pass invalid string-like
     object as a name.  Patch by Xiang Zhang.

   - bpo-18844(293): random.choices() now has k as a keyword-only
     argument to improve the readability of common cases and come into
     line with the signature used in other languages.

   - bpo-18893(294): Fix invalid exception handling in
     Lib/ctypes/macholib/dyld.py.  Patch by Madison May.

   - bpo-27611(295): Fixed support of default root window in the
     tkinter.tix module.  Added the master parameter in the DisplayStyle
     constructor.

   - bpo-27348(296): In the traceback module, restore the formatting of
     exception messages like “Exception: None”.  This fixes a regression
     introduced in 3.5a2.

   - bpo-25651(297): Allow false values to be used for msg parameter of
     subTest().

   - bpo-27778(298): Fix a memory leak in os.getrandom() when the
     getrandom() is interrupted by a signal and a signal handler raises
     a Python exception.

   - bpo-28200(299): Fix memory leak on Windows in the os module (fix
     path_converter() function).

   - bpo-25400(300): RobotFileParser now correctly returns default
     values for crawl_delay and request_rate.  Initial patch by Peter
     Wirtz.

   - bpo-27932(301): Prevent memory leak in win32_ver().

   - Fix UnboundLocalError in socket._sendfile_use_sendfile.

   - bpo-28075(302): Check for ERROR_ACCESS_DENIED in Windows
     implementation of os.stat().  Patch by Eryk Sun.

   - bpo-22493(303): Warning message emitted by using inline flags in
     the middle of regular expression now contains a (truncated) regex
     pattern.  Patch by Tim Graham.

   - bpo-25270(304): Prevent codecs.escape_encode() from raising
     SystemError when an empty bytestring is passed.

   - bpo-28181(305): Get antigravity over HTTPS. Patch by Kaartic
     Sivaraam.

   - bpo-25895(306): Enable WebSocket URL schemes in
     urllib.parse.urljoin.  Patch by Gergely Imreh and Markus
     Holtermann.

   - bpo-28114(307): Fix a crash in parse_envlist() when env contains
     byte strings.  Patch by Eryk Sun.

   - bpo-27599(308): Fixed buffer overrun in binascii.b2a_qp() and
     binascii.a2b_qp().

   - bpo-27906(309): Fix socket accept exhaustion during high TCP
     traffic.  Patch by Kevin Conway.

   - bpo-28174(310): Handle when SO_REUSEPORT isn’t properly supported.
     Patch by Seth Michael Larson.

   - bpo-26654(311): Inspect functools.partial in
     asyncio.Handle.__repr__.  Patch by iceboy.

   - bpo-26909(312): Fix slow pipes IO in asyncio.  Patch by INADA
     Naoki.

   - bpo-28176(313): Fix callbacks race in
     asyncio.SelectorLoop.sock_connect.

   - bpo-27759(314): Fix selectors incorrectly retain invalid file
     descriptors.  Patch by Mark Williams.

   - bpo-28325(315): Remove vestigial MacOS 9 macurl2path module and its
     tests.

   - bpo-28368(316): Refuse monitoring processes if the child watcher
     has no loop attached.  Patch by Vincent Michel.

   - bpo-28369(317): Raise RuntimeError when transport’s FD is used with
     add_reader, add_writer, etc.

   - bpo-28370(318): Speedup asyncio.StreamReader.readexactly.  Patch by
     Коренберг Марк.

   - bpo-28371(319): Deprecate passing asyncio.Handles to
     run_in_executor.

   - bpo-28372(320): Fix asyncio to support formatting of non-python
     coroutines.

   - bpo-28399(321): Remove UNIX socket from FS before binding.  Patch
     by Коренберг Марк.

   - bpo-27972(322): Prohibit Tasks to await on themselves.

   - bpo-24142(323): Reading a corrupt config file left configparser in
     an invalid state.  Original patch by Florian Höch.

   - bpo-29581(324): ABCMeta.__new__ now accepts ‘**kwargs’, allowing
     abstract base classes to use keyword parameters in
     __init_subclass__.  Patch by Nate Soares.

   - bpo-25532(325): inspect.unwrap() will now only try to unwrap an
     object sys.getrecursionlimit() times, to protect against objects
     which create a new object on every attribute access.

   - bpo-30177(326): path.resolve(strict=False) no longer cuts the path
     after the first element not present in the filesystem.  Patch by
     Antoine Pietri.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31499

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31482

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (4) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31544

   (6) https://bugs.python.org/issue?@action=redirect&bpo=31234

   (7) https://bugs.python.org/issue?@action=redirect&bpo=31457

   (8) https://bugs.python.org/issue?@action=redirect&bpo=31431

   (9) https://bugs.python.org/issue?@action=redirect&bpo=31233

   (10) https://bugs.python.org/issue?@action=redirect&bpo=28638

   (11) https://bugs.python.org/issue?@action=redirect&bpo=31400

   (12) https://bugs.python.org/issue?@action=redirect&bpo=27629

   (13) https://bugs.python.org/issue?@action=redirect&bpo=28958

   (14) https://bugs.python.org/issue?@action=redirect&bpo=28182

   (15) https://bugs.python.org/issue?@action=redirect&bpo=27340

   (16) https://bugs.python.org/issue?@action=redirect&bpo=14191

   (17) https://bugs.python.org/issue?@action=redirect&bpo=31178

   (18) https://bugs.python.org/issue?@action=redirect&bpo=31350

   (19) https://bugs.python.org/issue?@action=redirect&bpo=31170

   (20) https://bugs.python.org/issue?@action=redirect&bpo=29136

   (21) https://bugs.python.org/issue?@action=redirect&bpo=1198569

   (22) https://bugs.python.org/issue?@action=redirect&bpo=31326

   (23) https://bugs.python.org/issue?@action=redirect&bpo=27144

   (24) https://bugs.python.org/issue?@action=redirect&bpo=31281

   (25) https://bugs.python.org/issue?@action=redirect&bpo=10746

   (26) https://peps.python.org/pep-3118/

   (27) https://bugs.python.org/issue?@action=redirect&bpo=27584

   (28) https://bugs.python.org/issue?@action=redirect&bpo=22536

   (29) https://bugs.python.org/issue?@action=redirect&bpo=29741

   (30) https://bugs.python.org/issue?@action=redirect&bpo=31249

   (31) https://bugs.python.org/issue?@action=redirect&bpo=31247

   (32) https://bugs.python.org/issue?@action=redirect&bpo=23835

   (33) https://bugs.python.org/issue?@action=redirect&bpo=31238

   (34) https://bugs.python.org/issue?@action=redirect&bpo=5001

   (35) https://bugs.python.org/issue?@action=redirect&bpo=31109

   (36) https://bugs.python.org/issue?@action=redirect&bpo=30102

   (37) https://bugs.python.org/issue?@action=redirect&bpo=18966

   (38) https://bugs.python.org/issue?@action=redirect&bpo=31183

   (39) https://bugs.python.org/issue?@action=redirect&bpo=5001

   (40) https://bugs.python.org/issue?@action=redirect&bpo=31185

   (41) https://bugs.python.org/issue?@action=redirect&bpo=31151

   (42) https://bugs.python.org/issue?@action=redirect&bpo=31072

   (43) https://bugs.python.org/issue?@action=redirect&bpo=24700

   (44) https://bugs.python.org/issue?@action=redirect&bpo=31135

   (45) https://bugs.python.org/issue?@action=redirect&bpo=31107

   (46) https://bugs.python.org/issue?@action=redirect&bpo=31080

   (47) https://bugs.python.org/issue?@action=redirect&bpo=30897

   (48) https://bugs.python.org/issue?@action=redirect&bpo=31061

   (49) https://bugs.python.org/issue?@action=redirect&bpo=30987

   (50) https://bugs.python.org/issue?@action=redirect&bpo=30522

   (51) https://bugs.python.org/issue?@action=redirect&bpo=30502

   (52) https://bugs.python.org/issue?@action=redirect&bpo=5288

   (53) https://bugs.python.org/issue?@action=redirect&bpo=30919

   (54) https://bugs.python.org/issue?@action=redirect&bpo=26732

   (55) https://bugs.python.org/issue?@action=redirect&bpo=29403

   (56) https://bugs.python.org/issue?@action=redirect&bpo=30961

   (57) https://bugs.python.org/issue?@action=redirect&bpo=19896

   (58) https://bugs.python.org/issue?@action=redirect&bpo=30946

   (59) https://bugs.python.org/issue?@action=redirect&bpo=25684

   (60) https://bugs.python.org/issue?@action=redirect&bpo=30886

   (61) https://bugs.python.org/issue?@action=redirect&bpo=29854

   (62) https://bugs.python.org/issue?@action=redirect&bpo=30794

   (63) https://bugs.python.org/issue?@action=redirect&bpo=30319

   (64) https://bugs.python.org/issue?@action=redirect&bpo=30828

   (65) https://bugs.python.org/issue?@action=redirect&bpo=30302

   (66) https://bugs.python.org/issue?@action=redirect&bpo=30807

   (67) https://bugs.python.org/issue?@action=redirect&bpo=30441

   (68) https://bugs.python.org/issue?@action=redirect&bpo=29585

   (69) https://bugs.python.org/issue?@action=redirect&bpo=29293

   (70) https://bugs.python.org/issue?@action=redirect&bpo=30532

   (71) https://bugs.python.org/issue?@action=redirect&bpo=30596

   (72) https://bugs.python.org/issue?@action=redirect&bpo=9146

   (73) https://bugs.python.org/issue?@action=redirect&bpo=29169

   (74) https://bugs.python.org/issue?@action=redirect&bpo=30119

   (75) https://bugs.python.org/issue?@action=redirect&bpo=30879

   (76) https://bugs.python.org/issue?@action=redirect&bpo=30746

   (77) https://bugs.python.org/issue?@action=redirect&bpo=30664

   (78) https://bugs.python.org/issue?@action=redirect&bpo=21071

   (79) https://bugs.python.org/issue?@action=redirect&bpo=29212

   (80) https://bugs.python.org/issue?@action=redirect&bpo=29755

   (81) https://bugs.python.org/issue?@action=redirect&bpo=30616

   (82) https://bugs.python.org/issue?@action=redirect&bpo=30038

   (83) https://bugs.python.org/issue?@action=redirect&bpo=23894

   (84) https://bugs.python.org/issue?@action=redirect&bpo=24744

   (85) https://bugs.python.org/issue?@action=redirect&bpo=24484

   (86) https://bugs.python.org/issue?@action=redirect&bpo=30589

   (87) https://bugs.python.org/issue?@action=redirect&bpo=28994

   (88) https://bugs.python.org/issue?@action=redirect&bpo=30508

   (89) https://bugs.python.org/issue?@action=redirect&bpo=30645

   (90) https://bugs.python.org/issue?@action=redirect&bpo=11822

   (91) https://bugs.python.org/issue?@action=redirect&bpo=30624

   (92) https://bugs.python.org/issue?@action=redirect&bpo=30595

   (93) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (94) https://bugs.python.org/issue?@action=redirect&bpo=30605

   (95) https://bugs.python.org/issue?@action=redirect&bpo=29870

   (96) https://bugs.python.org/issue?@action=redirect&bpo=29743

   (97) https://bugs.python.org/issue?@action=redirect&bpo=27585

   (98) https://bugs.python.org/issue?@action=redirect&bpo=30014

   (99) https://bugs.python.org/issue?@action=redirect&bpo=30418

   (100) https://bugs.python.org/issue?@action=redirect&bpo=30463

   (101) https://bugs.python.org/issue?@action=redirect&bpo=30520

   (102) https://bugs.python.org/issue?@action=redirect&bpo=30557

   (103) https://bugs.python.org/issue?@action=redirect&bpo=30526

   (104) https://bugs.python.org/issue?@action=redirect&bpo=30245

   (105) https://bugs.python.org/issue?@action=redirect&bpo=30378

   (106) https://bugs.python.org/issue?@action=redirect&bpo=16500

   (107) https://bugs.python.org/issue?@action=redirect&bpo=30470

   (108) https://bugs.python.org/issue?@action=redirect&bpo=30414

   (109) https://bugs.python.org/issue?@action=redirect&bpo=30003

   (110) https://bugs.python.org/issue?@action=redirect&bpo=30149

   (111) https://bugs.python.org/issue?@action=redirect&bpo=30436

   (112) https://bugs.python.org/issue?@action=redirect&bpo=30301

   (113) https://bugs.python.org/issue?@action=redirect&bpo=30375

   (114) https://bugs.python.org/issue?@action=redirect&bpo=30329

   (115) https://bugs.python.org/issue?@action=redirect&bpo=29196

   (116) https://bugs.python.org/issue?@action=redirect&bpo=9850

   (117) https://bugs.python.org/issue?@action=redirect&bpo=30299

   (118) https://bugs.python.org/issue?@action=redirect&bpo=30048

   (119) https://bugs.python.org/issue?@action=redirect&bpo=30266

   (120) https://bugs.python.org/issue?@action=redirect&bpo=25958

   (121) https://bugs.python.org/issue?@action=redirect&bpo=30340

   (122) https://bugs.python.org/issue?@action=redirect&bpo=30298

   (123) https://bugs.python.org/issue?@action=redirect&bpo=30285

   (124) https://bugs.python.org/issue?@action=redirect&bpo=29990

   (125) https://bugs.python.org/issue?@action=redirect&bpo=29979

   (126) https://bugs.python.org/issue?@action=redirect&bpo=30243

   (127) https://bugs.python.org/issue?@action=redirect&bpo=30215

   (128) https://bugs.python.org/issue?@action=redirect&bpo=30185

   (129) https://bugs.python.org/issue?@action=redirect&bpo=30103

   (130) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (131) https://bugs.python.org/issue?@action=redirect&bpo=30205

   (132) https://bugs.python.org/issue?@action=redirect&bpo=30228

   (133) https://bugs.python.org/issue?@action=redirect&bpo=30190

   (134) https://bugs.python.org/issue?@action=redirect&bpo=30101

   (135) https://bugs.python.org/issue?@action=redirect&bpo=29822

   (136) https://bugs.python.org/issue?@action=redirect&bpo=29960

   (137) https://bugs.python.org/issue?@action=redirect&bpo=30070

   (138) https://bugs.python.org/issue?@action=redirect&bpo=22352

   (139) https://bugs.python.org/issue?@action=redirect&bpo=30061

   (140) https://bugs.python.org/issue?@action=redirect&bpo=30218

   (141) https://bugs.python.org/issue?@action=redirect&bpo=10076

   (142) https://bugs.python.org/issue?@action=redirect&bpo=30068

   (143) https://bugs.python.org/issue?@action=redirect&bpo=29694

   (144) https://bugs.python.org/issue?@action=redirect&bpo=29692

   (145) https://bugs.python.org/issue?@action=redirect&bpo=26187

   (146) https://bugs.python.org/issue?@action=redirect&bpo=9303

   (147) https://bugs.python.org/issue?@action=redirect&bpo=30017

   (148) https://bugs.python.org/issue?@action=redirect&bpo=29998

   (149) https://bugs.python.org/issue?@action=redirect&bpo=29995

   (150) https://bugs.python.org/issue?@action=redirect&bpo=29962

   (151) https://bugs.python.org/issue?@action=redirect&bpo=29649

   (152) https://bugs.python.org/issue?@action=redirect&bpo=29654

   (153) https://bugs.python.org/issue?@action=redirect&bpo=29931

   (154) https://bugs.python.org/issue?@action=redirect&bpo=29953

   (155) https://bugs.python.org/issue?@action=redirect&bpo=29942

   (156) https://bugs.python.org/issue?@action=redirect&bpo=10030

   (157) https://bugs.python.org/issue?@action=redirect&bpo=29204

   (158) https://bugs.python.org/issue?@action=redirect&bpo=27863

   (159) https://bugs.python.org/issue?@action=redirect&bpo=25996

   (160) https://bugs.python.org/issue?@action=redirect&bpo=28699

   (161) https://bugs.python.org/issue?@action=redirect&bpo=23890

   (162) https://bugs.python.org/issue?@action=redirect&bpo=29901

   (163) https://bugs.python.org/issue?@action=redirect&bpo=25803

   (164) https://bugs.python.org/issue?@action=redirect&bpo=29861

   (165) https://bugs.python.org/issue?@action=redirect&bpo=19930

   (166) https://bugs.python.org/issue?@action=redirect&bpo=29884

   (167) https://bugs.python.org/issue?@action=redirect&bpo=25455

   (168) https://bugs.python.org/issue?@action=redirect&bpo=29800

   (169) https://bugs.python.org/issue?@action=redirect&bpo=8256

   (170) https://bugs.python.org/issue?@action=redirect&bpo=28692

   (171) https://bugs.python.org/issue?@action=redirect&bpo=26121

   (172) https://bugs.python.org/issue?@action=redirect&bpo=29619

   (173) https://bugs.python.org/issue?@action=redirect&bpo=28298

   (174) https://bugs.python.org/issue?@action=redirect&bpo=29645

   (175) https://bugs.python.org/issue?@action=redirect&bpo=28231

   (176) https://bugs.python.org/issue?@action=redirect&bpo=26915

   (177) https://bugs.python.org/issue?@action=redirect&bpo=28682

   (178) https://bugs.python.org/issue?@action=redirect&bpo=29728

   (179) https://bugs.python.org/issue?@action=redirect&bpo=29623

   (180) https://bugs.python.org/issue?@action=redirect&bpo=9303

   (181) https://bugs.python.org/issue?@action=redirect&bpo=28963

   (182) https://bugs.python.org/issue?@action=redirect&bpo=29704

   (183) https://bugs.python.org/issue?@action=redirect&bpo=29271

   (184) https://bugs.python.org/issue?@action=redirect&bpo=29703

   (185) https://bugs.python.org/issue?@action=redirect&bpo=29615

   (186) https://bugs.python.org/issue?@action=redirect&bpo=7769

   (187) https://bugs.python.org/issue?@action=redirect&bpo=29376

   (188) https://bugs.python.org/issue?@action=redirect&bpo=28624

   (189) https://bugs.python.org/issue?@action=redirect&bpo=28518

   (190) https://bugs.python.org/issue?@action=redirect&bpo=29742

   (191) https://bugs.python.org/issue?@action=redirect&bpo=16285

   (192) https://bugs.python.org/issue?@action=redirect&bpo=29532

   (193) https://bugs.python.org/issue?@action=redirect&bpo=29110

   (194) https://bugs.python.org/issue?@action=redirect&bpo=22807

   (195) https://bugs.python.org/issue?@action=redirect&bpo=29576

   (196) https://bugs.python.org/issue?@action=redirect&bpo=29534

   (197) https://bugs.python.org/issue?@action=redirect&bpo=10379

   (198) https://bugs.python.org/issue?@action=redirect&bpo=29851

   (199) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (200) https://bugs.python.org/issue?@action=redirect&bpo=29100

   (201) https://bugs.python.org/issue?@action=redirect&bpo=29416

   (202) https://bugs.python.org/issue?@action=redirect&bpo=29444

   (203) https://bugs.python.org/issue?@action=redirect&bpo=29377

   (204) https://bugs.python.org/issue?@action=redirect&bpo=29218

   (205) https://bugs.python.org/issue?@action=redirect&bpo=29368

   (206) https://bugs.python.org/issue?@action=redirect&bpo=29338

   (207) https://bugs.python.org/issue?@action=redirect&bpo=29335

   (208) https://bugs.python.org/issue?@action=redirect&bpo=29290

   (209) https://bugs.python.org/issue?@action=redirect&bpo=28735

   (210) https://bugs.python.org/issue?@action=redirect&bpo=29197

   (211) https://bugs.python.org/issue?@action=redirect&bpo=29210

   (212) https://bugs.python.org/issue?@action=redirect&bpo=29219

   (213) https://bugs.python.org/issue?@action=redirect&bpo=29192

   (214) https://bugs.python.org/issue?@action=redirect&bpo=29193

   (215) https://bugs.python.org/issue?@action=redirect&bpo=29195

   (216) https://bugs.python.org/issue?@action=redirect&bpo=28969

   (217) https://bugs.python.org/issue?@action=redirect&bpo=20804

   (218) https://bugs.python.org/issue?@action=redirect&bpo=29142

   (219) https://bugs.python.org/issue?@action=redirect&bpo=28961

   (220) https://bugs.python.org/issue?@action=redirect&bpo=15812

   (221) https://bugs.python.org/issue?@action=redirect&bpo=28985

   (222) https://bugs.python.org/issue?@action=redirect&bpo=29079

   (223) https://bugs.python.org/issue?@action=redirect&bpo=13051

   (224) https://bugs.python.org/issue?@action=redirect&bpo=9770

   (225) https://bugs.python.org/issue?@action=redirect&bpo=28427

   (226) https://bugs.python.org/issue?@action=redirect&bpo=28923

   (227) https://bugs.python.org/issue?@action=redirect&bpo=28871

   (228) https://bugs.python.org/issue?@action=redirect&bpo=19542

   (229) https://bugs.python.org/issue?@action=redirect&bpo=20191

   (230) https://bugs.python.org/issue?@action=redirect&bpo=16255

   (231) https://bugs.python.org/issue?@action=redirect&bpo=28779

   (232) https://bugs.python.org/issue?@action=redirect&bpo=26937

   (233) https://bugs.python.org/issue?@action=redirect&bpo=28847

   (234) https://bugs.python.org/issue?@action=redirect&bpo=27030

   (235) https://bugs.python.org/issue?@action=redirect&bpo=28835

   (236) https://bugs.python.org/issue?@action=redirect&bpo=27172

   (237) https://bugs.python.org/issue?@action=redirect&bpo=28740

   (238) https://bugs.python.org/issue?@action=redirect&bpo=26273

   (239) https://bugs.python.org/issue?@action=redirect&bpo=28752

   (240) https://bugs.python.org/issue?@action=redirect&bpo=28727

   (241) https://bugs.python.org/issue?@action=redirect&bpo=18383

   (242) https://bugs.python.org/issue?@action=redirect&bpo=20572

   (243) https://bugs.python.org/issue?@action=redirect&bpo=25659

   (244) https://bugs.python.org/issue?@action=redirect&bpo=28548

   (245) https://bugs.python.org/issue?@action=redirect&bpo=19717

   (246) https://bugs.python.org/issue?@action=redirect&bpo=28563

   (247) https://bugs.python.org/issue?@action=redirect&bpo=28387

   (248) https://bugs.python.org/issue?@action=redirect&bpo=27517

   (249) https://bugs.python.org/issue?@action=redirect&bpo=28549

   (250) https://bugs.python.org/issue?@action=redirect&bpo=28449

   (251) https://bugs.python.org/issue?@action=redirect&bpo=23262

   (252) https://bugs.python.org/issue?@action=redirect&bpo=24241

   (253) https://bugs.python.org/issue?@action=redirect&bpo=27939

   (254) https://bugs.python.org/issue?@action=redirect&bpo=28255

   (255) https://bugs.python.org/issue?@action=redirect&bpo=28255

   (256) https://bugs.python.org/issue?@action=redirect&bpo=20491

   (257) https://bugs.python.org/issue?@action=redirect&bpo=28353

   (258) https://bugs.python.org/issue?@action=redirect&bpo=28430

   (259) https://bugs.python.org/issue?@action=redirect&bpo=27025

   (260) https://bugs.python.org/issue?@action=redirect&bpo=25464

   (261) https://bugs.python.org/issue?@action=redirect&bpo=28488

   (262) https://bugs.python.org/issue?@action=redirect&bpo=25953

   (263) https://bugs.python.org/issue?@action=redirect&bpo=28469

   (264) https://bugs.python.org/issue?@action=redirect&bpo=28115

   (265) https://bugs.python.org/issue?@action=redirect&bpo=18219

   (266) https://bugs.python.org/issue?@action=redirect&bpo=28448

   (267) https://bugs.python.org/issue?@action=redirect&bpo=23214

   (268) https://bugs.python.org/issue?@action=redirect&bpo=28480

   (269) https://bugs.python.org/issue?@action=redirect&bpo=28240

   (270) https://bugs.python.org/issue?@action=redirect&bpo=28240

   (271) https://bugs.python.org/issue?@action=redirect&bpo=28240

   (272) https://github.com/pypa/setuptools/issues/100

   (273) https://bugs.python.org/issue?@action=redirect&bpo=24452

   (274) https://bugs.python.org/issue?@action=redirect&bpo=20766

   (275) https://bugs.python.org/issue?@action=redirect&bpo=27998

   (276) https://bugs.python.org/issue?@action=redirect&bpo=28317

   (277) https://bugs.python.org/issue?@action=redirect&bpo=28380

   (278) https://bugs.python.org/issue?@action=redirect&bpo=28229

   (279) https://bugs.python.org/issue?@action=redirect&bpo=28321

   (280) https://bugs.python.org/issue?@action=redirect&bpo=28225

   (281) https://bugs.python.org/issue?@action=redirect&bpo=28227

   (282) https://bugs.python.org/issue?@action=redirect&bpo=28332

   (283) https://bugs.python.org/issue?@action=redirect&bpo=27358

   (284) https://bugs.python.org/issue?@action=redirect&bpo=28257

   (285) https://bugs.python.org/issue?@action=redirect&bpo=28322

   (286) https://bugs.python.org/issue?@action=redirect&bpo=28228

   (287) https://bugs.python.org/issue?@action=redirect&bpo=28226

   (288) https://bugs.python.org/issue?@action=redirect&bpo=28314

   (289) https://bugs.python.org/issue?@action=redirect&bpo=28148

   (290) https://bugs.python.org/issue?@action=redirect&bpo=28253

   (291) https://bugs.python.org/issue?@action=redirect&bpo=28275

   (292) https://bugs.python.org/issue?@action=redirect&bpo=27897

   (293) https://bugs.python.org/issue?@action=redirect&bpo=18844

   (294) https://bugs.python.org/issue?@action=redirect&bpo=18893

   (295) https://bugs.python.org/issue?@action=redirect&bpo=27611

   (296) https://bugs.python.org/issue?@action=redirect&bpo=27348

   (297) https://bugs.python.org/issue?@action=redirect&bpo=25651

   (298) https://bugs.python.org/issue?@action=redirect&bpo=27778

   (299) https://bugs.python.org/issue?@action=redirect&bpo=28200

   (300) https://bugs.python.org/issue?@action=redirect&bpo=25400

   (301) https://bugs.python.org/issue?@action=redirect&bpo=27932

   (302) https://bugs.python.org/issue?@action=redirect&bpo=28075

   (303) https://bugs.python.org/issue?@action=redirect&bpo=22493

   (304) https://bugs.python.org/issue?@action=redirect&bpo=25270

   (305) https://bugs.python.org/issue?@action=redirect&bpo=28181

   (306) https://bugs.python.org/issue?@action=redirect&bpo=25895

   (307) https://bugs.python.org/issue?@action=redirect&bpo=28114

   (308) https://bugs.python.org/issue?@action=redirect&bpo=27599

   (309) https://bugs.python.org/issue?@action=redirect&bpo=27906

   (310) https://bugs.python.org/issue?@action=redirect&bpo=28174

   (311) https://bugs.python.org/issue?@action=redirect&bpo=26654

   (312) https://bugs.python.org/issue?@action=redirect&bpo=26909

   (313) https://bugs.python.org/issue?@action=redirect&bpo=28176

   (314) https://bugs.python.org/issue?@action=redirect&bpo=27759

   (315) https://bugs.python.org/issue?@action=redirect&bpo=28325

   (316) https://bugs.python.org/issue?@action=redirect&bpo=28368

   (317) https://bugs.python.org/issue?@action=redirect&bpo=28369

   (318) https://bugs.python.org/issue?@action=redirect&bpo=28370

   (319) https://bugs.python.org/issue?@action=redirect&bpo=28371

   (320) https://bugs.python.org/issue?@action=redirect&bpo=28372

   (321) https://bugs.python.org/issue?@action=redirect&bpo=28399

   (322) https://bugs.python.org/issue?@action=redirect&bpo=27972

   (323) https://bugs.python.org/issue?@action=redirect&bpo=24142

   (324) https://bugs.python.org/issue?@action=redirect&bpo=29581

   (325) https://bugs.python.org/issue?@action=redirect&bpo=25532

   (326) https://bugs.python.org/issue?@action=redirect&bpo=30177


File: python.info,  Node: Documentação<62>,  Next: Testes<63>,  Prev: Biblioteca<148>,  Up: Python 3 7 0 alpha 1

1.23.73.4 Documentação
......................

   - bpo-31294(1): Fix incomplete code snippet in the
     ZeroMQSocketListener and ZeroMQSocketHandler examples and adapt
     them to Python 3.

   - bpo-21649(2): Add RFC 7525 and Mozilla server side TLS links to SSL
     documentation.

   - bpo-31128(3): Allow the pydoc server to bind to arbitrary
     hostnames.

   - bpo-30803(4): Clarify doc on truth value testing.  Original patch
     by Peter Thomassen.

   - bpo-30176(5): Add missing attribute related constants in curses
     documentation.

   - bpo-30052(6): the link targets for *note bytes(): 1c2. and *note
     bytearray(): 2ea. are now their respective type definitions, rather
     than the corresponding builtin function entries.  Use *note bytes:
     1c33. and *note bytearray: 1c34. to reference the latter.  In order
     to ensure this and future cross-reference updates are applied
     automatically, the daily documentation builds now disable the
     default output caching features in Sphinx.

   - bpo-26985(7): Add missing info of code object in inspect
     documentation.

   - bpo-19824(8): Improve the documentation for, and links to, template
     strings by emphasizing their utility for internationalization, and
     by clarifying some usage constraints.  (See also: bpo-20314(9),
     bpo-12518(10))

   - bpo-28929(11): Link the documentation to its source file on GitHub.

   - bpo-25008(12): Document smtpd.py as effectively deprecated and add
     a pointer to aiosmtpd, a third-party asyncio-based replacement.

   - bpo-26355(13): Add canonical header link on each page to
     corresponding major version of the documentation.  Patch by
     Matthias Bussonnier.

   - bpo-29349(14): Fix Python 2 syntax in code for building the
     documentation.

   - bpo-23722(15): The data model reference and the porting section in
     the 3.6 What’s New guide now cover the additional ‘__classcell__’
     handling needed for custom metaclasses to fully support PEP 487(16)
     and zero-argument ‘super()’.

   - bpo-28513(17): Documented command-line interface of zipfile.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31294

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21649

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31128

   (4) https://bugs.python.org/issue?@action=redirect&bpo=30803

   (5) https://bugs.python.org/issue?@action=redirect&bpo=30176

   (6) https://bugs.python.org/issue?@action=redirect&bpo=30052

   (7) https://bugs.python.org/issue?@action=redirect&bpo=26985

   (8) https://bugs.python.org/issue?@action=redirect&bpo=19824

   (9) https://bugs.python.org/issue?@action=redirect&bpo=20314

   (10) https://bugs.python.org/issue?@action=redirect&bpo=12518

   (11) https://bugs.python.org/issue?@action=redirect&bpo=28929

   (12) https://bugs.python.org/issue?@action=redirect&bpo=25008

   (13) https://bugs.python.org/issue?@action=redirect&bpo=26355

   (14) https://bugs.python.org/issue?@action=redirect&bpo=29349

   (15) https://bugs.python.org/issue?@action=redirect&bpo=23722

   (16) https://peps.python.org/pep-0487/

   (17) https://bugs.python.org/issue?@action=redirect&bpo=28513


File: python.info,  Node: Testes<63>,  Next: Construção<68>,  Prev: Documentação<62>,  Up: Python 3 7 0 alpha 1

1.23.73.5 Testes
................

   - bpo-29639(1): test.support.HOST is now “localhost”, a new HOSTv4
     constant has been added for your ‘127.0.0.1’ needs, similar to the
     existing HOSTv6 constant.

   - bpo-31320(2): Silence traceback in test_ssl

   - bpo-31346(3): Prefer PROTOCOL_TLS_CLIENT and PROTOCOL_TLS_SERVER
     protocols for SSLContext.

   - bpo-25674(4): Remove sha256.tbs-internet.com ssl test

   - bpo-30715(5): Address ALPN callback changes for OpenSSL 1.1.0f.
     The latest version behaves like OpenSSL 1.0.2 and no longer aborts
     handshake.

   - bpo-30822(6): regrtest: Exclude tzdata from regrtest –all.  When
     running the test suite using –use=all / -u all, exclude tzdata
     since it makes test_datetime too slow (15-20 min on some buildbots)
     which then times out on some buildbots.  Fix also regrtest command
     line parser to allow passing -u extralargefile to run
     test_zipfile64.

   - bpo-30695(7): Add the ‘set_nomemory(start, stop)’ and
     ‘remove_mem_hooks()’ functions to the ‘_testcapi’ module.

   - bpo-30357(8): test_thread: setUp() now uses
     support.threading_setup() and support.threading_cleanup() to wait
     until threads complete to avoid random side effects on following
     tests.  Initial patch written by Grzegorz Grzywacz.

   - bpo-30197(9): Enhanced functions swap_attr() and swap_item() in the
     test.support module.  They now work when delete replaced attribute
     or item inside the with statement.  The old value of the attribute
     or item (or None if it doesn’t exist) now will be assigned to the
     target of the “as” clause, if there is one.

   - bpo-24932(10): Use proper command line parsing in _testembed

   - bpo-28950(11): Disallow -j0 to be combined with -T/-l in regrtest
     command line arguments.

   - bpo-28683(12): Fix the tests that bind() a unix socket and raise
     PermissionError on Android for a non-root user.

   - bpo-26936(13): Fix the test_socket failures on Android -
     getservbyname(), getservbyport() and getaddrinfo() are broken on
     some Android API levels.

   - bpo-28666(14): Now test.support.rmtree is able to remove unwritable
     or unreadable directories.

   - bpo-23839(15): Various caches now are cleared before running every
     test file.

   - bpo-26944(16): Fix test_posix for Android where ‘id -G’ is entirely
     wrong or missing the effective gid.

   - bpo-28409(17): regrtest: fix the parser of command line arguments.

   - bpo-28217(18): Adds _testconsole module to test console input.

   - bpo-26939(19): Add the support.setswitchinterval() function to fix
     test_functools hanging on the Android armv7 qemu emulator.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29639

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31320

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31346

   (4) https://bugs.python.org/issue?@action=redirect&bpo=25674

   (5) https://bugs.python.org/issue?@action=redirect&bpo=30715

   (6) https://bugs.python.org/issue?@action=redirect&bpo=30822

   (7) https://bugs.python.org/issue?@action=redirect&bpo=30695

   (8) https://bugs.python.org/issue?@action=redirect&bpo=30357

   (9) https://bugs.python.org/issue?@action=redirect&bpo=30197

   (10) https://bugs.python.org/issue?@action=redirect&bpo=24932

   (11) https://bugs.python.org/issue?@action=redirect&bpo=28950

   (12) https://bugs.python.org/issue?@action=redirect&bpo=28683

   (13) https://bugs.python.org/issue?@action=redirect&bpo=26936

   (14) https://bugs.python.org/issue?@action=redirect&bpo=28666

   (15) https://bugs.python.org/issue?@action=redirect&bpo=23839

   (16) https://bugs.python.org/issue?@action=redirect&bpo=26944

   (17) https://bugs.python.org/issue?@action=redirect&bpo=28409

   (18) https://bugs.python.org/issue?@action=redirect&bpo=28217

   (19) https://bugs.python.org/issue?@action=redirect&bpo=26939


File: python.info,  Node: Construção<68>,  Next: Windows<60>,  Prev: Testes<63>,  Up: Python 3 7 0 alpha 1

1.23.73.6 Construção
....................

   - bpo-31354(1): Allow ‘--with-lto’ to be used on all builds, not just
     ‘make profile-opt’.

   - bpo-31370(2): Remove support for building –without-threads.  This
     option is not really useful anymore in the 21st century.  Removing
     lots of conditional paths allows us to simplify the code base,
     including in difficult to maintain low-level internal code.

   - bpo-31341(3): Per PEP 11(4), support for the IRIX operating system
     was removed.

   - bpo-30854(5): Fix compile error when compiling –without-threads.
     Patch by Masayuki Yamamoto.

   - bpo-30687(6): Locate msbuild.exe on Windows when building rather
     than vcvarsall.bat

   - bpo-20210(7): Support the 'disabled' marker in Setup files.
     Extension modules listed after this marker are not built at all,
     neither by the Makefile nor by setup.py.

   - bpo-29941(8): Add ‘--with-assertions’ configure flag to explicitly
     enable C ‘assert()’ checks.  Defaults to off.  ‘--with-pydebug’
     implies ‘--with-assertions’.

   - bpo-28787(9): Fix out-of-tree builds of Python when configured with
     ‘--with--dtrace’.

   - bpo-29243(10): Prevent unnecessary rebuilding of Python during
     ‘make test’, ‘make install’ and some other make targets when
     configured with ‘--enable-optimizations’.

   - bpo-23404(11): Don’t regenerate generated files based on file
     modification time anymore: the action is now explicit.  Replace
     ‘make touch’ with ‘make regen-all’.

   - bpo-29643(12): Fix ‘--enable-optimization’ didn’t work.

   - bpo-27593(13): sys.version and the platform module python_build(),
     python_branch(), and python_revision() functions now use git
     information rather than hg when building from a repo.

   - bpo-29572(14): Update Windows build and OS X installers to use
     OpenSSL 1.0.2k.

   - bpo-27659(15): Prohibit implicit C function declarations: use
     ‘-Werror=implicit-function-declaration’ when possible (GCC and
     Clang, but it depends on the compiler version).  Patch written by
     Chi Hsuan Yen.

   - bpo-29384(16): Remove old Be OS helper scripts.

   - bpo-26851(17): Set Android compilation and link flags.

   - bpo-28768(18): Fix implicit declaration of function _setmode.
     Patch by Masayuki Yamamoto

   - bpo-29080(19): Removes hard dependency on hg.exe from
     PCBuild/build.bat

   - bpo-23903(20): Added missed names to PC/python3.def.

   - bpo-28762(21): lockf() is available on Android API level 24, but
     the F_LOCK macro is not defined in android-ndk-r13.

   - bpo-28538(22): Fix the compilation error that occurs because
     if_nameindex() is available on Android API level 24, but the
     if_nameindex structure is not defined.

   - bpo-20211(23): Do not add the directory for installing C header
     files and the directory for installing object code libraries to the
     cross compilation search paths.  Original patch by Thomas
     Petazzoni.

   - bpo-28849(24): Do not define sys.implementation._multiarch on
     Android.

   - bpo-10656(25): Fix out-of-tree building on AIX. Patch by Tristan
     Carel and Michael Haubenwallner.

   - bpo-26359(26): Rename –with-optimiations to –enable-optimizations.

   - bpo-28444(27): Fix missing extensions modules when cross compiling.

   - bpo-28208(28): Update Windows build and OS X installers to use
     SQLite 3.14.2.

   - bpo-28248(29): Update Windows build and OS X installers to use
     OpenSSL 1.0.2j.

   - bpo-21124(30): Fix building the _struct module on Cygwin by passing
     ‘NULL’ instead of ‘&PyType_Type’ to PyVarObject_HEAD_INIT. Patch by
     Masayuki Yamamoto.

   - bpo-13756(31): Fix building extensions modules on Cygwin.  Patch by
     Roumen Petrov, based on original patch by Jason Tishler.

   - bpo-21085(32): Add configure check for siginfo_t.si_band, which
     Cygwin does not provide.  Patch by Masayuki Yamamoto with review
     and rebase by Erik Bray.

   - bpo-28258(33): Fixed build with Estonian locale (python-config and
     distclean targets in Makefile).  Patch by Arfrever Frehtes
     Taifersar Arahesis.

   - bpo-26661(34): setup.py now detects system libffi with multiarch
     wrapper.

   - bpo-27979(35): A full copy of libffi is no longer bundled for use
     when building _ctypes on non-OSX UNIX platforms.  An installed copy
     of libffi is now required when building _ctypes on such platforms.

   - bpo-15819(36): Remove redundant include search directory option for
     building outside the source tree.

   - bpo-28676(37): Prevent missing ‘getentropy’ declaration warning on
     macOS. Patch by Gareth Rees.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31354

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31370

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31341

   (4) https://peps.python.org/pep-0011/

   (5) https://bugs.python.org/issue?@action=redirect&bpo=30854

   (6) https://bugs.python.org/issue?@action=redirect&bpo=30687

   (7) https://bugs.python.org/issue?@action=redirect&bpo=20210

   (8) https://bugs.python.org/issue?@action=redirect&bpo=29941

   (9) https://bugs.python.org/issue?@action=redirect&bpo=28787

   (10) https://bugs.python.org/issue?@action=redirect&bpo=29243

   (11) https://bugs.python.org/issue?@action=redirect&bpo=23404

   (12) https://bugs.python.org/issue?@action=redirect&bpo=29643

   (13) https://bugs.python.org/issue?@action=redirect&bpo=27593

   (14) https://bugs.python.org/issue?@action=redirect&bpo=29572

   (15) https://bugs.python.org/issue?@action=redirect&bpo=27659

   (16) https://bugs.python.org/issue?@action=redirect&bpo=29384

   (17) https://bugs.python.org/issue?@action=redirect&bpo=26851

   (18) https://bugs.python.org/issue?@action=redirect&bpo=28768

   (19) https://bugs.python.org/issue?@action=redirect&bpo=29080

   (20) https://bugs.python.org/issue?@action=redirect&bpo=23903

   (21) https://bugs.python.org/issue?@action=redirect&bpo=28762

   (22) https://bugs.python.org/issue?@action=redirect&bpo=28538

   (23) https://bugs.python.org/issue?@action=redirect&bpo=20211

   (24) https://bugs.python.org/issue?@action=redirect&bpo=28849

   (25) https://bugs.python.org/issue?@action=redirect&bpo=10656

   (26) https://bugs.python.org/issue?@action=redirect&bpo=26359

   (27) https://bugs.python.org/issue?@action=redirect&bpo=28444

   (28) https://bugs.python.org/issue?@action=redirect&bpo=28208

   (29) https://bugs.python.org/issue?@action=redirect&bpo=28248

   (30) https://bugs.python.org/issue?@action=redirect&bpo=21124

   (31) https://bugs.python.org/issue?@action=redirect&bpo=13756

   (32) https://bugs.python.org/issue?@action=redirect&bpo=21085

   (33) https://bugs.python.org/issue?@action=redirect&bpo=28258

   (34) https://bugs.python.org/issue?@action=redirect&bpo=26661

   (35) https://bugs.python.org/issue?@action=redirect&bpo=27979

   (36) https://bugs.python.org/issue?@action=redirect&bpo=15819

   (37) https://bugs.python.org/issue?@action=redirect&bpo=28676


File: python.info,  Node: Windows<60>,  Next: IDLE<49>,  Prev: Construção<68>,  Up: Python 3 7 0 alpha 1

1.23.73.7 Windows
.................

   - bpo-31392(1): Update Windows build to use OpenSSL 1.1.0f

   - bpo-30389(2): Adds detection of Visual Studio 2017 to distutils on
     Windows.

   - bpo-31358(3): zlib is no longer bundled in the CPython source,
     instead it is downloaded on demand just like bz2, lzma, OpenSSL,
     Tcl/Tk, and SQLite.

   - bpo-31340(4): Change to building with MSVC v141 (included with
     Visual Studio 2017)

   - bpo-30581(5): os.cpu_count() now returns the correct number of
     processors on Windows when the number of logical processors is
     greater than 64.

   - bpo-30916(6): Pre-build OpenSSL, Tcl and Tk and include the
     binaries in the build.

   - bpo-30731(7): Add a missing xmlns to python.manifest so that it
     matches the schema.

   - bpo-30291(8): Allow requiring 64-bit interpreters from py.exe using
     -64 suffix.  Contributed by Steve (Gadget) Barnes.

   - bpo-30362(9): Adds list options (-0, -0p) to py.exe launcher.
     Contributed by Steve Barnes.

   - bpo-23451(10): Fix socket deprecation warnings in socketmodule.c.
     Patch by Segev Finer.

   - bpo-30450(11): The build process on Windows no longer depends on
     Subversion, instead pulling external code from GitHub via a Python
     script.  If Python 3.6 is not found on the system (via ‘py -3.6’),
     NuGet is used to download a copy of 32-bit Python.

   - bpo-29579(12): Removes readme.txt from the installer.

   - bpo-25778(13): winreg does not truncate string correctly (Patch by
     Eryk Sun)

   - bpo-28896(14): Deprecate WindowsRegistryFinder and disable it by
     default

   - bpo-28522(15): Fixes mishandled buffer reallocation in getpathp.c

   - bpo-28402(16): Adds signed catalog files for stdlib on Windows.

   - bpo-28333(17): Enables Unicode for ps1/ps2 and input() prompts.
     (Patch by Eryk Sun)

   - bpo-28251(18): Improvements to help manuals on Windows.

   - bpo-28110(19): launcher.msi has different product codes between
     32-bit and 64-bit

   - bpo-28161(20): Opening CON for write access fails

   - bpo-28162(21): WindowsConsoleIO readall() fails if first line
     starts with Ctrl+Z

   - bpo-28163(22): WindowsConsoleIO fileno() passes wrong flags to
     _open_osfhandle

   - bpo-28164(23): _PyIO_get_console_type fails for various paths

   - bpo-28137(24): Renames Windows path file to ._pth

   - bpo-28138(25): Windows ._pth file should allow import site

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31392

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30389

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31358

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31340

   (5) https://bugs.python.org/issue?@action=redirect&bpo=30581

   (6) https://bugs.python.org/issue?@action=redirect&bpo=30916

   (7) https://bugs.python.org/issue?@action=redirect&bpo=30731

   (8) https://bugs.python.org/issue?@action=redirect&bpo=30291

   (9) https://bugs.python.org/issue?@action=redirect&bpo=30362

   (10) https://bugs.python.org/issue?@action=redirect&bpo=23451

   (11) https://bugs.python.org/issue?@action=redirect&bpo=30450

   (12) https://bugs.python.org/issue?@action=redirect&bpo=29579

   (13) https://bugs.python.org/issue?@action=redirect&bpo=25778

   (14) https://bugs.python.org/issue?@action=redirect&bpo=28896

   (15) https://bugs.python.org/issue?@action=redirect&bpo=28522

   (16) https://bugs.python.org/issue?@action=redirect&bpo=28402

   (17) https://bugs.python.org/issue?@action=redirect&bpo=28333

   (18) https://bugs.python.org/issue?@action=redirect&bpo=28251

   (19) https://bugs.python.org/issue?@action=redirect&bpo=28110

   (20) https://bugs.python.org/issue?@action=redirect&bpo=28161

   (21) https://bugs.python.org/issue?@action=redirect&bpo=28162

   (22) https://bugs.python.org/issue?@action=redirect&bpo=28163

   (23) https://bugs.python.org/issue?@action=redirect&bpo=28164

   (24) https://bugs.python.org/issue?@action=redirect&bpo=28137

   (25) https://bugs.python.org/issue?@action=redirect&bpo=28138


File: python.info,  Node: IDLE<49>,  Next: Ferramentas/Demos<36>,  Prev: Windows<60>,  Up: Python 3 7 0 alpha 1

1.23.73.8 IDLE
..............

   - bpo-31493(1): IDLE code context – fix code update and font update
     timers.  Canceling timers prevents a warning message when test_idle
     completes.

   - bpo-31488(2): IDLE - Update non-key options in former extension
     classes.  When applying configdialog changes, call .reload for each
     feature class.  Change ParenMatch so updated options affect
     existing instances attached to existing editor windows.

   - bpo-31477(3): IDLE - Improve rstrip entry in doc.  Strip trailing
     whitespace strips more than blank spaces.  Multiline string
     literals are not skipped.

   - bpo-31480(4): IDLE - make tests pass with zzdummy extension
     disabled by default.

   - bpo-31421(5): Document how IDLE runs tkinter programs.  IDLE calls
     tcl/tk update in the background in order to make live interaction
     and experimentation with tkinter applications much easier.

   - bpo-31414(6): IDLE – fix tk entry box tests by deleting first.
     Adding to an int entry is not the same as deleting and inserting
     because int(‘’) will fail.

   - bpo-31051(7): Rearrange IDLE configdialog GenPage into Window,
     Editor, and Help sections.

   - bpo-30617(8): IDLE - Add docstrings and tests for outwin subclass
     of editor.  Move some data and functions from the class to module
     level.  Patch by Cheryl Sabella.

   - bpo-31287(9): IDLE - Do not modify tkinter.message in
     test_configdialog.

   - bpo-27099(10): Convert IDLE’s built-in ‘extensions’ to regular
     features.  About 10 IDLE features were implemented as supposedly
     optional extensions.  Their different behavior could be confusing
     or worse for users and not good for maintenance.  Hence the
     conversion.  The main difference for users is that user
     configurable key bindings for builtin features are now handled
     uniformly.  Now, editing a binding in a keyset only affects its
     value in the keyset.  All bindings are defined together in the
     system-specific default keysets in config-extensions.def.  All
     custom keysets are saved as a whole in config-extension.cfg.  All
     take effect as soon as one clicks Apply or Ok.  The affected events
     are ‘<<force-open-completions>>’, ‘<<expand-word>>’,
     ‘<<force-open-calltip>>’, ‘<<flash-paren>>’,
     ‘<<format-paragraph>>’, ‘<<run-module>>’, ‘<<check-module>>’, and
     ‘<<zoom-height>>’.  Any (global) customizations made before 3.6.3
     will not affect their keyset-specific customization after 3.6.3.
     and vice versa.  Initial patch by Charles Wohlganger.

   - bpo-31206(11): IDLE: Factor HighPage(Frame) class from
     ConfigDialog.  Patch by Cheryl Sabella.

   - bpo-31001(12): Add tests for configdialog highlight tab.  Patch by
     Cheryl Sabella.

   - bpo-31205(13): IDLE: Factor KeysPage(Frame) class from
     ConfigDialog.  The slightly modified tests continue to pass.  Patch
     by Cheryl Sabella.

   - bpo-31130(14): IDLE – stop leaks in test_configdialog.  Initial
     patch by Victor Stinner.

   - bpo-31002(15): Add tests for configdialog keys tab.  Patch by
     Cheryl Sabella.

   - bpo-19903(16): IDLE: Calltips use ‘inspect.signature’ instead of
     ‘inspect.getfullargspec’.  This improves calltips for builtins
     converted to use Argument Clinic.  Patch by Louie Lu.

   - bpo-31083(17): IDLE - Add an outline of a TabPage class in
     configdialog.  Update existing classes to match outline.  Initial
     patch by Cheryl Sabella.

   - bpo-31050(18): Factor GenPage(Frame) class from ConfigDialog.  The
     slightly modified tests continue to pass.  Patch by Cheryl Sabella.

   - bpo-31004(19): IDLE - Factor FontPage(Frame) class from
     ConfigDialog.  Slightly modified tests continue to pass.  Fix
     General tests.  Patch mostly by Cheryl Sabella.

   - bpo-30781(20): IDLE - Use ttk widgets in ConfigDialog.  Patches by
     Terry Jan Reedy and Cheryl Sabella.

   - bpo-31060(21): IDLE - Finish rearranging methods of ConfigDialog
     Grouping methods pertaining to each tab and the buttons will aid
     writing tests and improving the tabs and will enable splitting the
     groups into classes.

   - bpo-30853(22): IDLE – Factor a VarTrace class out of ConfigDialog.
     Instance tracers manages pairs consisting of a tk variable and a
     callback function.  When tracing is turned on, setting the variable
     calls the function.  Test coverage for the new class is 100%.

   - bpo-31003(23): IDLE: Add more tests for General tab.

   - bpo-30993(24): IDLE - Improve configdialog font page and tests.  In
     configdialog: Document causal pathways in create_font_tab
     docstring.  Simplify some attribute names.  Move set_samples calls
     to var_changed_font (idea from Cheryl Sabella).  Move related
     functions to positions after the create widgets function.  In
     test_configdialog: Fix test_font_set so not order dependent.  Fix
     renamed test_indent_scale so it tests the widget.  Adjust tests for
     movement of set_samples call.  Add tests for load functions.  Put
     all font tests in one class and tab indent tests in another.
     Except for two lines, these tests completely cover the related
     functions.

   - bpo-30981(25): IDLE – Add more configdialog font page tests.

   - bpo-28523(26): IDLE: replace ‘colour’ with ‘color’ in configdialog.

   - bpo-30917(27): Add tests for idlelib.config.IdleConf.  Increase
     coverage from 46% to 96%.  Patch by Louie Lu.

   - bpo-30934(28): Document coverage details for idlelib tests.  Add
     section to idlelib/idle-test/README.txt.  Include check that
     branches are taken both ways.  Exclude IDLE-specific code that does
     not run during unit tests.

   - bpo-30913(29): IDLE: Document ConfigDialog tk Vars, methods, and
     widgets in docstrings This will facilitate improving the dialog and
     splitting up the class.  Original patch by Cheryl Sabella.

   - bpo-30899(30): IDLE: Add tests for ConfigParser subclasses in
     config.  Patch by Louie Lu.

   - bpo-30881(31): IDLE: Add docstrings to browser.py.  Patch by Cheryl
     Sabella.

   - bpo-30851(32): IDLE: Remove unused variables in configdialog.  One
     is a duplicate, one is set but cannot be altered by users.  Patch
     by Cheryl Sabella.

   - bpo-30870(33): IDLE: In Settings dialog, select font with Up, Down
     keys as well as mouse.  Initial patch by Louie Lu.

   - bpo-8231(34): IDLE: call config.IdleConf.GetUserCfgDir only once.

   - bpo-30779(35): IDLE: Factor ConfigChanges class from configdialog,
     put in config; test.  * In config, put dump test code in a
     function; run it and unittest in ‘if __name__ == ‘__main__’.  * Add
     class config.ConfigChanges based on changes_class_v4.py on bpo
     issue.  * Add class test_config.ChangesTest, partly using
     configdialog_tests_v1.py.  * Revise configdialog to use
     ConfigChanges; see tracker msg297804.  * Revise test_configdialog
     to match configdialog changes.  * Remove configdialog functions
     unused or moved to ConfigChanges.  Cheryl Sabella contributed parts
     of the patch.

   - bpo-30777(36): IDLE: configdialog - Add docstrings and fix
     comments.  Patch by Cheryl Sabella.

   - bpo-30495(37): IDLE: Improve textview with docstrings, PEP8 names,
     and more tests.  Patch by Cheryl Sabella.

   - bpo-30723(38): IDLE: Make several improvements to parenmatch.  Add
     ‘parens’ style to highlight both opener and closer.  Make ‘default’
     style, which is not default, a synonym for ‘opener’.  Make
     time-delay work the same with all styles.  Add help for config
     dialog extensions tab, including help for parenmatch.  Add new
     tests.  Original patch by Charles Wohlganger.

   - bpo-30674(39): IDLE: add docstrings to grep module.  Patch by
     Cheryl Sabella

   - bpo-21519(40): IDLE’s basic custom key entry dialog now detects
     duplicates properly.  Original patch by Saimadhav Heblikar.

   - bpo-29910(41): IDLE no longer deletes a character after commenting
     out a region by a key shortcut.  Add ‘return 'break'’ for this and
     other potential conflicts between IDLE and default key bindings.

   - bpo-30728(42): Review and change idlelib.configdialog names.
     Lowercase method and attribute names.  Replace ‘colour’ with
     ‘color’, expand overly cryptic names, delete unneeded underscores.
     Replace ‘import *’ with specific imports.  Patches by Cheryl
     Sabella.

   - bpo-6739(43): IDLE: Verify user-entered key sequences by trying to
     bind them with tk.  Add tests for all 3 validation functions.
     Original patch by G Polo.  Tests added by Cheryl Sabella.

   - bpo-15786(44): Fix several problems with IDLE’s autocompletion box.
     The following should now work: clicking on selection box items;
     using the scrollbar; selecting an item by hitting Return.  Hangs on
     MacOSX should no longer happen.  Patch by Louie Lu.

   - bpo-25514(45): Add doc subsubsection about IDLE failure to start.
     Popup no-connection message directs users to this section.

   - bpo-30642(46): Fix reference leaks in IDLE tests.  Patches by Louie
     Lu and Terry Jan Reedy.

   - bpo-30495(47): Add docstrings for textview.py and use PEP8 names.
     Patches by Cheryl Sabella and Terry Jan Reedy.

   - bpo-30290(48): Help-about: use pep8 names and add tests.  Increase
     coverage to 100%.  Patches by Louie Lu, Cheryl Sabella, and Terry
     Jan Reedy.

   - bpo-30303(49): Add _utest option to textview; add new tests.
     Increase coverage to 100%.  Patches by Louie Lu and Terry Jan
     Reedy.

   - bpo-29071(50): IDLE colors f-string prefixes (but not invalid ur
     prefixes).

   - bpo-28572(51): Add 10% to coverage of IDLE’s test_configdialog.
     Update and augment description of the configuration system.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31493

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31488

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31477

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31480

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31421

   (6) https://bugs.python.org/issue?@action=redirect&bpo=31414

   (7) https://bugs.python.org/issue?@action=redirect&bpo=31051

   (8) https://bugs.python.org/issue?@action=redirect&bpo=30617

   (9) https://bugs.python.org/issue?@action=redirect&bpo=31287

   (10) https://bugs.python.org/issue?@action=redirect&bpo=27099

   (11) https://bugs.python.org/issue?@action=redirect&bpo=31206

   (12) https://bugs.python.org/issue?@action=redirect&bpo=31001

   (13) https://bugs.python.org/issue?@action=redirect&bpo=31205

   (14) https://bugs.python.org/issue?@action=redirect&bpo=31130

   (15) https://bugs.python.org/issue?@action=redirect&bpo=31002

   (16) https://bugs.python.org/issue?@action=redirect&bpo=19903

   (17) https://bugs.python.org/issue?@action=redirect&bpo=31083

   (18) https://bugs.python.org/issue?@action=redirect&bpo=31050

   (19) https://bugs.python.org/issue?@action=redirect&bpo=31004

   (20) https://bugs.python.org/issue?@action=redirect&bpo=30781

   (21) https://bugs.python.org/issue?@action=redirect&bpo=31060

   (22) https://bugs.python.org/issue?@action=redirect&bpo=30853

   (23) https://bugs.python.org/issue?@action=redirect&bpo=31003

   (24) https://bugs.python.org/issue?@action=redirect&bpo=30993

   (25) https://bugs.python.org/issue?@action=redirect&bpo=30981

   (26) https://bugs.python.org/issue?@action=redirect&bpo=28523

   (27) https://bugs.python.org/issue?@action=redirect&bpo=30917

   (28) https://bugs.python.org/issue?@action=redirect&bpo=30934

   (29) https://bugs.python.org/issue?@action=redirect&bpo=30913

   (30) https://bugs.python.org/issue?@action=redirect&bpo=30899

   (31) https://bugs.python.org/issue?@action=redirect&bpo=30881

   (32) https://bugs.python.org/issue?@action=redirect&bpo=30851

   (33) https://bugs.python.org/issue?@action=redirect&bpo=30870

   (34) https://bugs.python.org/issue?@action=redirect&bpo=8231

   (35) https://bugs.python.org/issue?@action=redirect&bpo=30779

   (36) https://bugs.python.org/issue?@action=redirect&bpo=30777

   (37) https://bugs.python.org/issue?@action=redirect&bpo=30495

   (38) https://bugs.python.org/issue?@action=redirect&bpo=30723

   (39) https://bugs.python.org/issue?@action=redirect&bpo=30674

   (40) https://bugs.python.org/issue?@action=redirect&bpo=21519

   (41) https://bugs.python.org/issue?@action=redirect&bpo=29910

   (42) https://bugs.python.org/issue?@action=redirect&bpo=30728

   (43) https://bugs.python.org/issue?@action=redirect&bpo=6739

   (44) https://bugs.python.org/issue?@action=redirect&bpo=15786

   (45) https://bugs.python.org/issue?@action=redirect&bpo=25514

   (46) https://bugs.python.org/issue?@action=redirect&bpo=30642

   (47) https://bugs.python.org/issue?@action=redirect&bpo=30495

   (48) https://bugs.python.org/issue?@action=redirect&bpo=30290

   (49) https://bugs.python.org/issue?@action=redirect&bpo=30303

   (50) https://bugs.python.org/issue?@action=redirect&bpo=29071

   (51) https://bugs.python.org/issue?@action=redirect&bpo=28572


File: python.info,  Node: Ferramentas/Demos<36>,  Next: API C<62>,  Prev: IDLE<49>,  Up: Python 3 7 0 alpha 1

1.23.73.9 Ferramentas/Demos
...........................

   - bpo-30983(1): gdb integration commands (py-bt, etc.)  work on
     optimized shared builds now, too.  PEP 523(2) introduced
     _PyEval_EvalFrameDefault which inlines PyEval_EvalFrameEx on
     non-debug shared builds.  This broke the ability to use py-bt,
     py-up, and a few other Python-specific gdb integrations.  The
     problem is fixed by only looking for _PyEval_EvalFrameDefault
     frames in python-gdb.py.  Original patch by Bruno “Polaco”
     Penteado.

   - bpo-29748(3): Added the slice index converter in Argument Clinic.

   - bpo-24037(4): Argument Clinic now uses the converter
     ‘bool(accept={int})’ rather than ‘int’ for semantical booleans.
     This avoids repeating the default value for Python and C and will
     help in converting to ‘bool’ in future.

   - bpo-29367(5): python-gdb.py now supports also ‘method-wrapper’
     (‘wrapperobject’) objects.

   - bpo-28023(6): Fix python-gdb.py didn’t support new dict
     implementation.

   - bpo-15369(7): The pybench and pystone microbenchmark have been
     removed from Tools.  Please use the new Python benchmark suite
     ‘https://github.com/python/pyperformance’ which is more reliable
     and includes a portable version of pybench working on Python 2 and
     Python 3.

   - bpo-28102(8): The zipfile module CLI now prints usage to stderr.
     Patch by Stephen J. Turnbull.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30983

   (2) https://peps.python.org/pep-0523/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=29748

   (4) https://bugs.python.org/issue?@action=redirect&bpo=24037

   (5) https://bugs.python.org/issue?@action=redirect&bpo=29367

   (6) https://bugs.python.org/issue?@action=redirect&bpo=28023

   (7) https://bugs.python.org/issue?@action=redirect&bpo=15369

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28102


File: python.info,  Node: API C<62>,  Prev: Ferramentas/Demos<36>,  Up: Python 3 7 0 alpha 1

1.23.73.10 API C
................

   - bpo-31338(1): Added the ‘Py_UNREACHABLE()’ macro for code paths
     which are never expected to be reached.  This and a few other
     useful macros are now documented in the C API manual.

   - bpo-30832(2): Remove own implementation for thread-local storage.
     CPython has provided the own implementation for thread-local
     storage (TLS) on Python/thread.c, it’s used in the case which a
     platform has not supplied native TLS. However, currently all
     supported platforms (Windows and pthreads) have provided native TLS
     and defined the Py_HAVE_NATIVE_TLS macro with unconditional in any
     case.

   - bpo-30708(3): PyUnicode_AsWideCharString() now raises a ValueError
     if the second argument is NULL and the wchar_t* string contains
     null characters.

   - bpo-16500(4): Deprecate PyOS_AfterFork() and add PyOS_BeforeFork(),
     PyOS_AfterFork_Parent() and PyOS_AfterFork_Child().

   - bpo-6532(5): The type of results of PyThread_start_new_thread() and
     PyThread_get_thread_ident(), and the id parameter of
     PyThreadState_SetAsyncExc() changed from “long” to “unsigned long”.

   - bpo-27867(6): Function PySlice_GetIndicesEx() is deprecated and
     replaced with a macro if Py_LIMITED_API is not set or set to the
     value between 0x03050400 and 0x03060000 (not including) or
     0x03060100 or higher.  Added functions PySlice_Unpack() and
     PySlice_AdjustIndices().

   - bpo-29083(7): Fixed the declaration of some public API functions.
     PyArg_VaParse() and PyArg_VaParseTupleAndKeywords() were not
     available in limited API. PyArg_ValidateKeywordArguments(),
     PyArg_UnpackTuple() and Py_BuildValue() were not available in
     limited API of version < 3.3 when PY_SSIZE_T_CLEAN is defined.

   - bpo-28769(8): The result of PyUnicode_AsUTF8AndSize() and
     PyUnicode_AsUTF8() is now of type ‘const char *’ rather of ‘char
     *’.

   - bpo-29058(9): All stable API extensions added after Python 3.2 are
     now available only when Py_LIMITED_API is set to the PY_VERSION_HEX
     value of the minimum Python version supporting this API.

   - bpo-28822(10): The index parameters 'start' and 'end' of
     PyUnicode_FindChar() are now adjusted to behave like
     ‘str[start:end]’.

   - bpo-28808(11): PyUnicode_CompareWithASCIIString() now never raises
     exceptions.

   - bpo-28761(12): The fields name and doc of structures PyMemberDef,
     PyGetSetDef, PyStructSequence_Field, PyStructSequence_Desc, and
     wrapperbase are now of type ‘const char *’ rather of ‘char *’.

   - bpo-28748(13): Private variable _Py_PackageContext is now of type
     ‘const char *’ rather of ‘char *’.

   - bpo-19569(14): Compiler warnings are now emitted if use most of
     deprecated functions.

   - bpo-28426(15): Deprecated undocumented functions
     PyUnicode_AsEncodedObject(), PyUnicode_AsDecodedObject(),
     PyUnicode_AsDecodedUnicode() and PyUnicode_AsEncodedUnicode().

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31338

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30832

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30708

   (4) https://bugs.python.org/issue?@action=redirect&bpo=16500

   (5) https://bugs.python.org/issue?@action=redirect&bpo=6532

   (6) https://bugs.python.org/issue?@action=redirect&bpo=27867

   (7) https://bugs.python.org/issue?@action=redirect&bpo=29083

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28769

   (9) https://bugs.python.org/issue?@action=redirect&bpo=29058

   (10) https://bugs.python.org/issue?@action=redirect&bpo=28822

   (11) https://bugs.python.org/issue?@action=redirect&bpo=28808

   (12) https://bugs.python.org/issue?@action=redirect&bpo=28761

   (13) https://bugs.python.org/issue?@action=redirect&bpo=28748

   (14) https://bugs.python.org/issue?@action=redirect&bpo=19569

   (15) https://bugs.python.org/issue?@action=redirect&bpo=28426


File: python.info,  Node: Python 3 6 6 final,  Next: Python 3 6 6 release candidate 1,  Prev: Python 3 7 0 alpha 1,  Up: Changelog

1.23.74 Python 3.6.6 final
--------------------------

'Data de lançamento: 2018-06-27'

There were no new changes in version 3.6.6.


File: python.info,  Node: Python 3 6 6 release candidate 1,  Next: Python 3 6 5 final,  Prev: Python 3 6 6 final,  Up: Changelog

1.23.75 Python 3.6.6 release candidate 1
----------------------------------------

'Data de lançamento: 2018-06-11'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<146>.
* Biblioteca: Biblioteca<149>.
* Documentação: Documentação<63>.
* Testes: Testes<64>.
* Construção: Construção<69>.
* Windows: Windows<61>.
* macOS: macOS<48>.
* IDLE: IDLE<50>.
* Ferramentas/Demos: Ferramentas/Demos<37>.
* API C: API C<63>.


File: python.info,  Node: Núcleo e embutidos<146>,  Next: Biblioteca<149>,  Up: Python 3 6 6 release candidate 1

1.23.75.1 Núcleo e embutidos
............................

   - bpo-33786(1): Fix asynchronous generators to handle GeneratorExit
     in athrow() correctly

   - bpo-30654(2): Fixed reset of the SIGINT handler to SIG_DFL on
     interpreter shutdown even when there was a custom handler set
     previously.  Patch by Philipp Kerling.

   - bpo-33622(3): Fixed a leak when the garbage collector fails to add
     an object with the ‘__del__’ method or referenced by it into the
     *note gc.garbage: 1201. list.  *note PyGC_Collect(): 995. can now
     be called when an exception is set and preserves it.

   - bpo-31849(4): Fix signed/unsigned comparison warning in pyhash.c.

   - bpo-33391(5): Fix a leak in set_symmetric_difference().

   - bpo-28055(6): Fix unaligned accesses in siphash24().  Patch by Rolf
     Eike Beer.

   - bpo-33231(7): Fix potential memory leak in ‘normalizestring()’.

   - bpo-29922(8): Improved error messages in ‘async with’ when
     ‘__aenter__()’ or ‘__aexit__()’ return non-awaitable object.

   - bpo-33199(9): Fix ‘ma_version_tag’ in dict implementation is
     uninitialized when copying from key-sharing dict.

   - bpo-33041(10): Fixed jumping when the function contains an ‘async
     for’ loop.

   - bpo-32282(11): Fix an unnecessary ifdef in the include of
     VersionHelpers.h in socketmodule on Windows.

   - bpo-21983(12): Fix a crash in ‘ctypes.cast()’ in case the type
     argument is a ctypes structured data type.  Patch by Eryk Sun and
     Oren Milman.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33786

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30654

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33622

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31849

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33391

   (6) https://bugs.python.org/issue?@action=redirect&bpo=28055

   (7) https://bugs.python.org/issue?@action=redirect&bpo=33231

   (8) https://bugs.python.org/issue?@action=redirect&bpo=29922

   (9) https://bugs.python.org/issue?@action=redirect&bpo=33199

   (10) https://bugs.python.org/issue?@action=redirect&bpo=33041

   (11) https://bugs.python.org/issue?@action=redirect&bpo=32282

   (12) https://bugs.python.org/issue?@action=redirect&bpo=21983


File: python.info,  Node: Biblioteca<149>,  Next: Documentação<63>,  Prev: Núcleo e embutidos<146>,  Up: Python 3 6 6 release candidate 1

1.23.75.2 Biblioteca
....................

   - bpo-30167(1): Prevent site.main() exception if PYTHONSTARTUP is
     set.  Patch by Steve Weber.

   - bpo-33812(2): Datetime instance d with non-None tzinfo, but with
     d.tzinfo.utcoffset(d) returning None is now treated as naive by the
     astimezone() method.

   - bpo-30805(3): Avoid race condition with debug logging

   - bpo-33767(4): The concatenation (‘+’) and repetition (‘*’) sequence
     operations now raise *note TypeError: 2c3. instead of *note
     SystemError: 575. when performed on *note mmap.mmap: 20b. objects.
     Patch by Zackery Spytz.

   - bpo-32684(5): Fix gather to propagate cancellation of itself even
     with return_exceptions.

   - bpo-33674(6): Fix a race condition in SSLProtocol.connection_made()
     of asyncio.sslproto: start immediately the handshake instead of
     using call_soon().  Previously, data_received() could be called
     before the handshake started, causing the handshake to hang or
     fail.

   - bpo-31647(7): Fixed bug where calling write_eof() on a
     _SelectorSocketTransport after it’s already closed raises
     AttributeError.

   - bpo-33672(8): Fix Task.__repr__ crash with Cython’s bogus
     coroutines

   - bpo-33469(9): Fix RuntimeError after closing loop that used
     run_in_executor

   - bpo-11874(10): Use a better regex when breaking usage into
     wrappable parts.  Avoids bogus assertion errors from custom metavar
     strings.

   - bpo-30877(11): Fixed a bug in the Python implementation of the JSON
     decoder that prevented the cache of parsed strings from clearing
     after finishing the decoding.  Based on patch by c-fos.

   - bpo-33548(12): tempfile._candidate_tempdir_list should consider
     common TEMP locations

   - bpo-33542(13): Prevent ‘uuid.get_node’ from using a DUID instead of
     a MAC on Windows.  Patch by Zvi Effron

   - bpo-26819(14): Fix race condition with
     ‘ReadTransport.resume_reading’ in Windows proactor event loop.

   - bpo-28556(15): Minor fixes in typing module: add annotations to
     ‘NamedTuple.__new__’, pass ‘*args’ and ‘**kwds’ in
     ‘Generic.__new__’.  Original PRs by Paulius Šarka and Chad
     Dombrova.

   - bpo-20087(16): Updated alias mapping with glibc 2.27 supported
     locales.

   - bpo-33422(17): Fix trailing quotation marks getting deleted when
     looking up byte/string literals on pydoc.  Patch by Andrés Delfino.

   - bpo-33197(18): Update error message when constructing invalid
     inspect.Parameters Patch by Donghee Na.

   - bpo-33383(19): Fixed crash in the get() method of the *note
     dbm.ndbm: 34. database object when it is called with a single
     argument.

   - bpo-33329(20): Fix multiprocessing regression on newer glibcs

   - bpo-991266(21): Fix quoting of the ‘Comment’ attribute of *note
     http.cookies.SimpleCookie: 1bbb.

   - bpo-33131(22): Upgrade bundled version of pip to 10.0.1.

   - bpo-33308(23): Fixed a crash in the ‘parser’ module when converting
     an ST object to a tree of tuples or lists with ‘line_info=False’
     and ‘col_info=True’.

   - bpo-33263(24): Fix FD leak in ‘_SelectorSocketTransport’ Patch by
     Vlad Starostin.

   - bpo-33256(25): Fix display of ‘<module>’ call in the html produced
     by ‘cgitb.html()’.  Patch by Stéphane Blondon.

   - bpo-33203(26): ‘random.Random.choice()’ now raises ‘IndexError’ for
     empty sequences consistently even when called from subclasses
     without a ‘getrandbits()’ implementation.

   - bpo-33224(27): Update difflib.mdiff() for PEP 479(28).  Convert an
     uncaught StopIteration in a generator into a return-statement.

   - bpo-33209(29): End framing at the end of C implementation of *note
     pickle.Pickler.dump(): 1bbd.

   - bpo-32861(30): The urllib.robotparser’s ‘__str__’ representation
     now includes wildcard entries and the “Crawl-delay” and
     “Request-rate” fields.  Patch by Michael Lazar.

   - bpo-33096(31): Allow ttk.Treeview.insert to insert iid that has a
     false boolean value.  Note iid=0 and iid=False would be same.
     Patch by Garvit Khatri.

   - bpo-33127(32): The ssl module now compiles with LibreSSL 2.7.1.

   - bpo-33021(33): Release the GIL during fstat() calls, avoiding hang
     of all threads when calling mmap.mmap(), os.urandom(), and
     random.seed().  Patch by Nir Soffer.

   - bpo-27683(34): Fix a regression in *note ipaddress: 80. that result
     of ‘hosts()’ is empty when the network is constructed by a tuple
     containing an integer mask and only 1 bit left for addresses.

   - bpo-32844(35): Fix wrong redirection of a low descriptor (0 or 1)
     to stderr in subprocess if another low descriptor is closed.

   - bpo-31908(36): Fix output of cover files for ‘trace’ module
     command-line tool.  Previously emitted cover files only when
     ‘--missing’ option was used.  Patch by Michael Selik.

   - bpo-31457(37): If nested log adapters are used, the inner
     ‘process()’ methods are no longer omitted.

   - bpo-16865(38): Support arrays >=2GiB in *note ctypes: 2a.  Patch by
     Segev Finer.

   - bpo-31238(39): pydoc: the stop() method of the private ServerThread
     class now waits until DocServer.serve_until_quit() completes and
     then explicitly sets its docserver attribute to None to break a
     reference cycle.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30167

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33812

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30805

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33767

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32684

   (6) https://bugs.python.org/issue?@action=redirect&bpo=33674

   (7) https://bugs.python.org/issue?@action=redirect&bpo=31647

   (8) https://bugs.python.org/issue?@action=redirect&bpo=33672

   (9) https://bugs.python.org/issue?@action=redirect&bpo=33469

   (10) https://bugs.python.org/issue?@action=redirect&bpo=11874

   (11) https://bugs.python.org/issue?@action=redirect&bpo=30877

   (12) https://bugs.python.org/issue?@action=redirect&bpo=33548

   (13) https://bugs.python.org/issue?@action=redirect&bpo=33542

   (14) https://bugs.python.org/issue?@action=redirect&bpo=26819

   (15) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (16) https://bugs.python.org/issue?@action=redirect&bpo=20087

   (17) https://bugs.python.org/issue?@action=redirect&bpo=33422

   (18) https://bugs.python.org/issue?@action=redirect&bpo=33197

   (19) https://bugs.python.org/issue?@action=redirect&bpo=33383

   (20) https://bugs.python.org/issue?@action=redirect&bpo=33329

   (21) https://bugs.python.org/issue?@action=redirect&bpo=991266

   (22) https://bugs.python.org/issue?@action=redirect&bpo=33131

   (23) https://bugs.python.org/issue?@action=redirect&bpo=33308

   (24) https://bugs.python.org/issue?@action=redirect&bpo=33263

   (25) https://bugs.python.org/issue?@action=redirect&bpo=33256

   (26) https://bugs.python.org/issue?@action=redirect&bpo=33203

   (27) https://bugs.python.org/issue?@action=redirect&bpo=33224

   (28) https://peps.python.org/pep-0479/

   (29) https://bugs.python.org/issue?@action=redirect&bpo=33209

   (30) https://bugs.python.org/issue?@action=redirect&bpo=32861

   (31) https://bugs.python.org/issue?@action=redirect&bpo=33096

   (32) https://bugs.python.org/issue?@action=redirect&bpo=33127

   (33) https://bugs.python.org/issue?@action=redirect&bpo=33021

   (34) https://bugs.python.org/issue?@action=redirect&bpo=27683

   (35) https://bugs.python.org/issue?@action=redirect&bpo=32844

   (36) https://bugs.python.org/issue?@action=redirect&bpo=31908

   (37) https://bugs.python.org/issue?@action=redirect&bpo=31457

   (38) https://bugs.python.org/issue?@action=redirect&bpo=16865

   (39) https://bugs.python.org/issue?@action=redirect&bpo=31238


File: python.info,  Node: Documentação<63>,  Next: Testes<64>,  Prev: Biblioteca<149>,  Up: Python 3 6 6 release candidate 1

1.23.75.3 Documentação
......................

   - bpo-33503(1): Fix broken pypi link

   - bpo-33421(2): Add missing documentation for
     ‘typing.AsyncContextManager’.

   - bpo-33378(3): Add Korean language switcher for
     ‘https://docs.python.org/3/’

   - bpo-33276(4): Clarify that the ‘__path__’ attribute on modules
     cannot be just any value.

   - bpo-33201(5): Modernize documentation for writing C extension
     types.

   - bpo-33195(6): Deprecate ‘Py_UNICODE’ usage in ‘c-api/arg’ document.
     ‘Py_UNICODE’ related APIs are deprecated since Python 3.3, but it
     is missed in the document.

   - bpo-33126(7): Document PyBuffer_ToContiguous().

   - bpo-27212(8): Modify documentation for the ‘islice()’ recipe to
     consume initial values up to the start index.

   - bpo-28247(9): Update *note zipapp: 130. documentation to describe
     how to make standalone applications.

   - bpo-18802(10): Documentation changes for ipaddress.  Patch by Jon
     Foster and Berker Peksag.

   - bpo-27428(11): Update documentation to clarify that
     ‘WindowsRegistryFinder’ implements ‘MetaPathFinder’.  (Patch by
     Himanshu Lakhara)

   - bpo-8243(12): Add a note about curses.addch and curses.addstr
     exception behavior when writing outside a window, or pad.

   - bpo-31432(13): Clarify meaning of CERT_NONE, CERT_OPTIONAL, and
     CERT_REQUIRED flags for ssl.SSLContext.verify_mode.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33503

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33421

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33378

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33276

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33201

   (6) https://bugs.python.org/issue?@action=redirect&bpo=33195

   (7) https://bugs.python.org/issue?@action=redirect&bpo=33126

   (8) https://bugs.python.org/issue?@action=redirect&bpo=27212

   (9) https://bugs.python.org/issue?@action=redirect&bpo=28247

   (10) https://bugs.python.org/issue?@action=redirect&bpo=18802

   (11) https://bugs.python.org/issue?@action=redirect&bpo=27428

   (12) https://bugs.python.org/issue?@action=redirect&bpo=8243

   (13) https://bugs.python.org/issue?@action=redirect&bpo=31432


File: python.info,  Node: Testes<64>,  Next: Construção<69>,  Prev: Documentação<63>,  Up: Python 3 6 6 release candidate 1

1.23.75.4 Testes
................

   - bpo-33655(1): Ignore test_posix_fallocate failures on BSD platforms
     that might be due to running on ZFS.

   - bpo-19417(2): Add test_bdb.py.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33655

   (2) https://bugs.python.org/issue?@action=redirect&bpo=19417


File: python.info,  Node: Construção<69>,  Next: Windows<61>,  Prev: Testes<64>,  Up: Python 3 6 6 release candidate 1

1.23.75.5 Construção
....................

   - bpo-5755(1): Move ‘-Wstrict-prototypes’ option to ‘CFLAGS_NODIST’
     from ‘OPT’.  This option emitted annoying warnings when building
     extension modules written in C++.

   - bpo-33614(2): Ensures module definition files for the stable ABI on
     Windows are correctly regenerated.

   - bpo-33522(3): Enable CI builds on Visual Studio Team Services at
     ‘https://python.visualstudio.com/cpython’

   - bpo-33012(4): Add ‘-Wno-cast-function-type’ for gcc 8 for silencing
     warnings about function casts like casting to PyCFunction in method
     definition lists.

   - bpo-33394(5): Enable the verbose build for extension modules, when
     GNU make is passed macros on the command line.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5755

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33614

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33522

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33012

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33394


File: python.info,  Node: Windows<61>,  Next: macOS<48>,  Prev: Construção<69>,  Up: Python 3 6 6 release candidate 1

1.23.75.6 Windows
.................

   - bpo-33184(1): Update Windows installer to OpenSSL 1.0.2o.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33184


File: python.info,  Node: macOS<48>,  Next: IDLE<50>,  Prev: Windows<61>,  Up: Python 3 6 6 release candidate 1

1.23.75.7 macOS
...............

   - bpo-33184(1): Update macOS installer build to use OpenSSL 1.0.2o.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33184


File: python.info,  Node: IDLE<50>,  Next: Ferramentas/Demos<37>,  Prev: macOS<48>,  Up: Python 3 6 6 release candidate 1

1.23.75.8 IDLE
..............

   - bpo-33656(1): On Windows, add API call saying that tk scales for
     DPI. On Windows 8.1+ or 10, with DPI compatibility properties of
     the Python binary unchanged, and a monitor resolution greater than
     96 DPI, this should make text and lines sharper.  It should
     otherwise have no effect.

   - bpo-33768(2): Clicking on a context line moves that line to the top
     of the editor window.

   - bpo-33763(3): IDLE: Use read-only text widget for code context
     instead of label widget.

   - bpo-33664(4): Scroll IDLE editor text by lines.  Previously, the
     mouse wheel and scrollbar slider moved text by a fixed number of
     pixels, resulting in partial lines at the top of the editor box.
     The change also applies to the shell and grep output windows, but
     not to read-only text views.

   - bpo-33679(5): Enable theme-specific color configuration for Code
     Context.  Use the Highlights tab to see the setting for built-in
     themes or add settings to custom themes.

   - bpo-33642(6): Display up to maxlines non-blank lines for Code
     Context.  If there is no current context, show a single blank line.

   - bpo-33628(7): IDLE: Cleanup codecontext.py and its test.

   - bpo-33564(8): IDLE’s code context now recognizes async as a block
     opener.

   - bpo-29706(9): IDLE now colors async and await as keywords in 3.6.
     They become full keywords in 3.7.

   - bpo-21474(10): Update word/identifier definition from ascii to
     unicode.  In text and entry boxes, this affects selection by
     double-click, movement left/right by control-left/right, and
     deletion left/right by control-BACKSPACE/DEL.

   - bpo-33204(11): IDLE: consistently color invalid string prefixes.  A
     ‘u’ string prefix cannot be paired with either ‘r’ or ‘f’.
     Consistently color as much of the prefix, starting at the right, as
     is valid.  Revise and extend colorizer test.

   - bpo-32831(12): Add docstrings and tests for codecontext.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33656

   (2) https://bugs.python.org/issue?@action=redirect&bpo=33768

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33763

   (4) https://bugs.python.org/issue?@action=redirect&bpo=33664

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33679

   (6) https://bugs.python.org/issue?@action=redirect&bpo=33642

   (7) https://bugs.python.org/issue?@action=redirect&bpo=33628

   (8) https://bugs.python.org/issue?@action=redirect&bpo=33564

   (9) https://bugs.python.org/issue?@action=redirect&bpo=29706

   (10) https://bugs.python.org/issue?@action=redirect&bpo=21474

   (11) https://bugs.python.org/issue?@action=redirect&bpo=33204

   (12) https://bugs.python.org/issue?@action=redirect&bpo=32831


File: python.info,  Node: Ferramentas/Demos<37>,  Next: API C<63>,  Prev: IDLE<50>,  Up: Python 3 6 6 release candidate 1

1.23.75.9 Ferramentas/Demos
...........................

   - bpo-33189(1): ‘pygettext.py’ now recognizes only literal strings as
     docstrings and translatable strings, and rejects bytes literals and
     f-string expressions.

   - bpo-31920(2): Fixed handling directories as arguments in the
     ‘pygettext’ script.  Based on patch by Oleg Krasnikov.

   - bpo-29673(3): Fix pystackv and pystack gdbinit macros.

   - bpo-32885(4): Add an ‘-n’ flag for ‘Tools/scripts/pathfix.py’ to
     disable automatic backup creation (files with ‘~’ suffix).

   - bpo-31583(5): Fix 2to3 for using with –add-suffix option but
     without –output-dir option for relative path to files in current
     directory.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33189

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31920

   (3) https://bugs.python.org/issue?@action=redirect&bpo=29673

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32885

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31583


File: python.info,  Node: API C<63>,  Prev: Ferramentas/Demos<37>,  Up: Python 3 6 6 release candidate 1

1.23.75.10 API C
................

   - bpo-32374(1): Document that m_traverse for multi-phase initialized
     modules can be called with m_state=NULL, and add a sanity check

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32374


File: python.info,  Node: Python 3 6 5 final,  Next: Python 3 6 5 release candidate 1,  Prev: Python 3 6 6 release candidate 1,  Up: Changelog

1.23.76 Python 3.6.5 final
--------------------------

'Data de lançamento: 2018-03-28'

* Menu:

* Testes: Testes<65>.
* Construção: Construção<70>.


File: python.info,  Node: Testes<65>,  Next: Construção<70>,  Up: Python 3 6 5 final

1.23.76.1 Testes
................

   - bpo-32872(1): Avoid regrtest compatibility issue with namespace
     packages.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32872


File: python.info,  Node: Construção<70>,  Prev: Testes<65>,  Up: Python 3 6 5 final

1.23.76.2 Construção
....................

   - bpo-33163(1): Upgrade pip to 9.0.3 and setuptools to v39.0.1.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33163


File: python.info,  Node: Python 3 6 5 release candidate 1,  Next: Python 3 6 4 final,  Prev: Python 3 6 5 final,  Up: Changelog

1.23.77 Python 3.6.5 release candidate 1
----------------------------------------

'Data de lançamento: 2018-03-13'

* Menu:

* Segurança: Segurança<46>.
* Núcleo e embutidos: Núcleo e embutidos<147>.
* Biblioteca: Biblioteca<150>.
* Documentação: Documentação<64>.
* Testes: Testes<66>.
* Construção: Construção<71>.
* Windows: Windows<62>.
* macOS: macOS<49>.
* IDLE: IDLE<51>.
* Ferramentas/Demos: Ferramentas/Demos<38>.
* API C: API C<64>.


File: python.info,  Node: Segurança<46>,  Next: Núcleo e embutidos<147>,  Up: Python 3 6 5 release candidate 1

1.23.77.1 Segurança
...................

   - bpo-33001(1): Minimal fix to prevent buffer overrun in os.symlink
     on Windows

   - bpo-32981(2): Regexes in difflib and poplib were vulnerable to
     catastrophic backtracking.  These regexes formed potential DOS
     vectors (REDOS). They have been refactored.  This resolves CVE
     2018-1060(3) and CVE 2018-1061(4).  Patch by Jamie Davis.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33001

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32981

   (3) https://www.cve.org/CVERecord?id=CVE-2018-1060

   (4) https://www.cve.org/CVERecord?id=CVE-2018-1061


File: python.info,  Node: Núcleo e embutidos<147>,  Next: Biblioteca<150>,  Prev: Segurança<46>,  Up: Python 3 6 5 release candidate 1

1.23.77.2 Núcleo e embutidos
............................

   - bpo-33026(1): Fixed jumping out of “with” block by setting
     f_lineno.

   - bpo-17288(2): Prevent jumps from ‘return’ and ‘exception’ trace
     events.

   - bpo-32889(3): Update Valgrind suppression list to account for the
     rename of ‘Py_ADDRESS_IN_RANG’ to ‘address_in_range’.

   - bpo-32650(4): Pdb and other debuggers dependent on bdb.py will
     correctly step over (next command) native coroutines.  Patch by
     Pablo Galindo.

   - bpo-32685(5): Improve suggestion when the Python 2 form of print
     statement is either present on the same line as the header of a
     compound statement or else terminated by a semi-colon instead of a
     newline.  Patch by Nitish Chandra.

   - bpo-32583(6): Fix possible crashing in builtin Unicode decoders
     caused by write out-of-bound errors when using customized decode
     error handlers.

   - bpo-26163(7): Improved frozenset() hash to create more distinct
     hash values when faced with datasets containing many similar
     values.

   - bpo-27169(8): The ‘__debug__’ constant is now optimized out at
     compile time.  This fixes also bpo-22091(9).

   - bpo-32329(10): ‘sys.flags.hash_randomization’ is now properly set
     to 0 when hash randomization is turned off by ‘PYTHONHASHSEED=0’.

   - bpo-30416(11): The optimizer is now protected from spending much
     time doing complex calculations and consuming much memory for
     creating large constants in constant folding.

   - bpo-18533(12): ‘repr()’ on a dict containing its own ‘values()’ or
     ‘items()’ no longer raises ‘RecursionError’; OrderedDict similarly.
     Instead, use ‘...’, as for other recursive structures.  Patch by
     Ben North.

   - bpo-32028(13): Leading whitespace is now correctly ignored when
     generating suggestions for converting Py2 print statements to Py3
     builtin print function calls.  Patch by Sanyam Khurana.

   - bpo-32137(14): The repr of deeply nested dict now raises a
     RecursionError instead of crashing due to a stack overflow.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33026

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17288

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32889

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32650

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32685

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32583

   (7) https://bugs.python.org/issue?@action=redirect&bpo=26163

   (8) https://bugs.python.org/issue?@action=redirect&bpo=27169

   (9) https://bugs.python.org/issue?@action=redirect&bpo=22091

   (10) https://bugs.python.org/issue?@action=redirect&bpo=32329

   (11) https://bugs.python.org/issue?@action=redirect&bpo=30416

   (12) https://bugs.python.org/issue?@action=redirect&bpo=18533

   (13) https://bugs.python.org/issue?@action=redirect&bpo=32028

   (14) https://bugs.python.org/issue?@action=redirect&bpo=32137


File: python.info,  Node: Biblioteca<150>,  Next: Documentação<64>,  Prev: Núcleo e embutidos<147>,  Up: Python 3 6 5 release candidate 1

1.23.77.3 Biblioteca
....................

   - bpo-33064(1): lib2to3 now properly supports trailing commas after
     ‘*args’ and ‘**kwargs’ in function signatures.

   - bpo-31804(2): Avoid failing in multiprocessing.Process if the
     standard streams are closed or None at exit.

   - bpo-33037(3): Skip sending/receiving data after SSL transport
     closing.

   - bpo-30353(4): Fix ctypes pass-by-value for structs on 64-bit
     Cygwin/MinGW.

   - bpo-33009(5): Fix inspect.signature() for single-parameter
     partialmethods.

   - bpo-32969(6): Expose several missing constants in zlib and fix
     corresponding documentation.

   - bpo-32713(7): Fixed tarfile.itn handling of out-of-bounds float
     values.  Patch by Joffrey Fuhrer.

   - bpo-30622(8): The ssl module now detects missing NPN support in
     LibreSSL.

   - bpo-32922(9): dbm.open() now encodes filename with the filesystem
     encoding rather than default encoding.

   - bpo-32859(10): In ‘os.dup2’, don’t check every call whether the
     ‘dup3’ syscall exists or not.

   - bpo-21060(11): Rewrite confusing message from setup.py upload from
     “No dist file created in earlier command” to the more helpful “Must
     create and upload files in one command”.

   - bpo-32857(12): In *note tkinter: f0, ‘after_cancel(None)’ now
     raises a *note ValueError: 202. instead of canceling the first
     scheduled function.  Patch by Cheryl Sabella.

   - bpo-32852(13): Make sure sys.argv remains as a list when running
     trace.

   - bpo-32841(14): Fixed ‘asyncio.Condition’ issue which silently
     ignored cancellation after notifying and cancelling a conditional
     lock.  Patch by Bar Harel.

   - bpo-31787(15): Fixed refleaks of ‘__init__()’ methods in various
     modules.  (Contributed by Oren Milman)

   - bpo-30157(16): Fixed guessing quote and delimiter in
     csv.Sniffer.sniff() when only the last field is quoted.  Patch by
     Jake Davis.

   - bpo-32394(17): socket: Remove TCP_FASTOPEN, TCP_KEEPCNT flags on
     older version Windows during run-time.

   - bpo-32777(18): Fix a rare but potential pre-exec child process
     deadlock in subprocess on POSIX systems when marking file
     descriptors inheritable on exec in the child process.  This bug
     appears to have been introduced in 3.4.

   - bpo-32647(19): The ctypes module used to depend on indirect linking
     for dlopen.  The shared extension is now explicitly linked against
     libdl on platforms with dl.

   - bpo-32734(20): Fixed ‘asyncio.Lock()’ safety issue which allowed
     acquiring and locking the same lock multiple times, without it
     being free.  Patch by Bar Harel.

   - bpo-32727(21): Do not include name field in SMTP envelope from
     address.  Patch by Stéphane Wirtel

   - bpo-27931(22): Fix email address header parsing error when the
     username is an empty quoted string.  Patch by Xiang Zhang.

   - bpo-32304(23): distutils’ upload command no longer corrupts tar
     files ending with a CR byte, and no longer tries to convert CR to
     CRLF in any of the upload text fields.

   - bpo-32502(24): uuid.uuid1 no longer raises an exception if a 64-bit
     hardware address is encountered.

   - bpo-31848(25): Fix the error handling in Aifc_read.initfp() when
     the SSND chunk is not found.  Patch by Zackery Spytz.

   - bpo-32555(26): On FreeBSD and Solaris, os.strerror() now always
     decode the byte string from the current locale encoding, rather
     than using ASCII/surrogateescape in some cases.

   - bpo-32521(27): The nis module is now compatible with new libnsl and
     headers location.

   - bpo-32473(28): Improve ABCMeta._dump_registry() output readability

   - bpo-32521(29): glibc has removed Sun RPC. Use replacement libtirpc
     headers and library in nis module.

   - bpo-32228(30): Ensure that ‘truncate()’ preserves the file position
     (as reported by ‘tell()’) after writes longer than the buffer size.

   - bpo-26133(31): Don’t unsubscribe signals in asyncio UNIX event loop
     on interpreter shutdown.

   - bpo-32185(32): The SSL module no longer sends IP addresses in SNI
     TLS extension on platforms with OpenSSL 1.0.2+ or inet_pton.

   - bpo-32323(33): *note urllib.parse.urlsplit(): d61. does not convert
     zone-id (scope) to lower case for scoped IPv6 addresses in
     hostnames now.

   - bpo-32302(34): Fix bdist_wininst of distutils for CRT v142: it
     binary compatible with CRT v140.

   - bpo-32255(35): A single empty field is now always quoted when
     written into a CSV file.  This allows to distinguish an empty row
     from a row consisting of a single empty field.  Patch by Licht
     Takeuchi.

   - bpo-32277(36): Raise ‘NotImplementedError’ instead of ‘SystemError’
     on platforms where ‘chmod(..., follow_symlinks=False)’ is not
     supported.  Patch by Anthony Sottile.

   - bpo-32199(37): The getnode() ip getter now uses ‘ip link’ instead
     of ‘ip link list’.

   - bpo-27456(38): Ensure TCP_NODELAY is set on Linux.  Tests by Victor
     Stinner.

   - bpo-31900(39): The *note locale.localeconv(): c18. function now
     sets temporarily the ‘LC_CTYPE’ locale to the ‘LC_NUMERIC’ locale
     to decode ‘decimal_point’ and ‘thousands_sep’ byte strings if they
     are non-ASCII or longer than 1 byte, and the ‘LC_NUMERIC’ locale is
     different than the ‘LC_CTYPE’ locale.  This temporary change
     affects other threads.  Same change for the *note str.format():
     621. method when formatting a number (*note int: 257, *note float:
     2f7, *note float: 2f7. and subclasses) with the ‘n’ type (ex:
     ‘'{:n}'.format(1234)’).

   - bpo-31802(40): Importing native path module (‘posixpath’, ‘ntpath’)
     now works even if the ‘os’ module still is not imported.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33064

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31804

   (3) https://bugs.python.org/issue?@action=redirect&bpo=33037

   (4) https://bugs.python.org/issue?@action=redirect&bpo=30353

   (5) https://bugs.python.org/issue?@action=redirect&bpo=33009

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32969

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32713

   (8) https://bugs.python.org/issue?@action=redirect&bpo=30622

   (9) https://bugs.python.org/issue?@action=redirect&bpo=32922

   (10) https://bugs.python.org/issue?@action=redirect&bpo=32859

   (11) https://bugs.python.org/issue?@action=redirect&bpo=21060

   (12) https://bugs.python.org/issue?@action=redirect&bpo=32857

   (13) https://bugs.python.org/issue?@action=redirect&bpo=32852

   (14) https://bugs.python.org/issue?@action=redirect&bpo=32841

   (15) https://bugs.python.org/issue?@action=redirect&bpo=31787

   (16) https://bugs.python.org/issue?@action=redirect&bpo=30157

   (17) https://bugs.python.org/issue?@action=redirect&bpo=32394

   (18) https://bugs.python.org/issue?@action=redirect&bpo=32777

   (19) https://bugs.python.org/issue?@action=redirect&bpo=32647

   (20) https://bugs.python.org/issue?@action=redirect&bpo=32734

   (21) https://bugs.python.org/issue?@action=redirect&bpo=32727

   (22) https://bugs.python.org/issue?@action=redirect&bpo=27931

   (23) https://bugs.python.org/issue?@action=redirect&bpo=32304

   (24) https://bugs.python.org/issue?@action=redirect&bpo=32502

   (25) https://bugs.python.org/issue?@action=redirect&bpo=31848

   (26) https://bugs.python.org/issue?@action=redirect&bpo=32555

   (27) https://bugs.python.org/issue?@action=redirect&bpo=32521

   (28) https://bugs.python.org/issue?@action=redirect&bpo=32473

   (29) https://bugs.python.org/issue?@action=redirect&bpo=32521

   (30) https://bugs.python.org/issue?@action=redirect&bpo=32228

   (31) https://bugs.python.org/issue?@action=redirect&bpo=26133

   (32) https://bugs.python.org/issue?@action=redirect&bpo=32185

   (33) https://bugs.python.org/issue?@action=redirect&bpo=32323

   (34) https://bugs.python.org/issue?@action=redirect&bpo=32302

   (35) https://bugs.python.org/issue?@action=redirect&bpo=32255

   (36) https://bugs.python.org/issue?@action=redirect&bpo=32277

   (37) https://bugs.python.org/issue?@action=redirect&bpo=32199

   (38) https://bugs.python.org/issue?@action=redirect&bpo=27456

   (39) https://bugs.python.org/issue?@action=redirect&bpo=31900

   (40) https://bugs.python.org/issue?@action=redirect&bpo=31802


File: python.info,  Node: Documentação<64>,  Next: Testes<66>,  Prev: Biblioteca<150>,  Up: Python 3 6 5 release candidate 1

1.23.77.4 Documentação
......................

   - bpo-17232(1): Clarify docs for -O and -OO. Patch by Terry Reedy.

   - bpo-32800(2): Update link to w3c doc for xml default namespaces.

   - bpo-8722(3): Document ‘__getattr__()’ behavior when property
     ‘get()’ method raises *note AttributeError: 34b.

   - bpo-32614(4): Modify RE examples in documentation to use raw
     strings to prevent *note DeprecationWarning: 1a5. and add text to
     REGEX HOWTO to highlight the deprecation.

   - bpo-31972(5): Improve docstrings for ‘pathlib.PurePath’ subclasses.

   - bpo-17799(6): Explain real behaviour of sys.settrace and
     sys.setprofile and their C-API counterparts regarding which type of
     events are received in each function.  Patch by Pablo Galindo
     Salgado.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=17232

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32800

   (3) https://bugs.python.org/issue?@action=redirect&bpo=8722

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32614

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31972

   (6) https://bugs.python.org/issue?@action=redirect&bpo=17799


File: python.info,  Node: Testes<66>,  Next: Construção<71>,  Prev: Documentação<64>,  Up: Python 3 6 5 release candidate 1

1.23.77.5 Testes
................

   - bpo-32517(1): Fix failing ‘test_asyncio’ on macOS 10.12.2+ due to
     transport of ‘KqueueSelector’ loop was not being closed.

   - bpo-32721(2): Fix test_hashlib to not fail if the _md5 module is
     not built.

   - bpo-32252(3): Fix faulthandler_suppress_crash_report() used to
     prevent core dump files when testing crashes.  getrlimit() returns
     zero on success.

   - bpo-31518(4): Debian Unstable has disabled TLS 1.0 and 1.1 for
     SSLv23_METHOD().  Change TLS/SSL protocol of some tests to
     PROTOCOL_TLS or PROTOCOL_TLSv1_2 to make them pass on Debian.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32517

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32721

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32252

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31518


File: python.info,  Node: Construção<71>,  Next: Windows<62>,  Prev: Testes<66>,  Up: Python 3 6 5 release candidate 1

1.23.77.6 Construção
....................

   - bpo-32635(1): Fix segfault of the crypt module when libxcrypt is
     provided instead of libcrypt at the system.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32635


File: python.info,  Node: Windows<62>,  Next: macOS<49>,  Prev: Construção<71>,  Up: Python 3 6 5 release candidate 1

1.23.77.7 Windows
.................

   - bpo-33016(1): Fix potential use of uninitialized memory in
     nt._getfinalpathname

   - bpo-32903(2): Fix a memory leak in os.chdir() on Windows if the
     current directory is set to a UNC path.

   - bpo-31966(3): Fixed WindowsConsoleIO.write() for writing empty
     data.

   - bpo-32409(4): Ensures activate.bat can handle Unicode contents.

   - bpo-32457(5): Improves handling of denormalized executable path
     when launching Python.

   - bpo-32370(6): Use the correct encoding for ipconfig output in the
     uuid module.  Patch by Segev Finer.

   - bpo-29248(7): Fix *note os.readlink(): 926. on Windows, which was
     mistakenly treating the ‘PrintNameOffset’ field of the reparse data
     buffer as a number of characters instead of bytes.  Patch by Craig
     Holmquist and SSE4.

   - bpo-32588(8): Create standalone _distutils_findvs module.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33016

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32903

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31966

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32409

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32457

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32370

   (7) https://bugs.python.org/issue?@action=redirect&bpo=29248

   (8) https://bugs.python.org/issue?@action=redirect&bpo=32588


File: python.info,  Node: macOS<49>,  Next: IDLE<51>,  Prev: Windows<62>,  Up: Python 3 6 5 release candidate 1

1.23.77.8 macOS
...............

   - bpo-32726(1): Provide an additional, more modern macOS installer
     variant that supports macOS 10.9+ systems in 64-bit mode only.
     Upgrade the supplied third-party libraries to OpenSSL 1.0.2n, XZ
     5.2.3, and SQLite 3.22.0.  The 10.9+ installer now links with and
     supplies its own copy of Tcl/Tk 8.6.8.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32726


File: python.info,  Node: IDLE<51>,  Next: Ferramentas/Demos<38>,  Prev: macOS<49>,  Up: Python 3 6 5 release candidate 1

1.23.77.9 IDLE
..............

   - bpo-32984(1): Set ‘__file__’ while running a startup file.  Like
     Python, IDLE optionally runs one startup file in the Shell window
     before presenting the first interactive input prompt.  For IDLE,
     ‘-s’ runs a file named in environmental variable ‘IDLESTARTUP’ or
     *note PYTHONSTARTUP: ffe.; ‘-r file’ runs ‘file’.  Python sets
     ‘__file__’ to the startup file name before running the file and
     unsets it before the first prompt.  IDLE now does the same when run
     normally, without the ‘-n’ option.

   - bpo-32940(2): Simplify and rename StringTranslatePseudoMapping in
     pyparse.

   - bpo-32916(3): Change ‘str’ to ‘code’ in pyparse.

   - bpo-32905(4): Remove unused code in pyparse module.

   - bpo-32874(5): Add tests for pyparse.

   - bpo-32837(6): Using the system and place-dependent default encoding
     for open() is a bad idea for IDLE’s system and location-independent
     files.

   - bpo-32826(7): Add “encoding=utf-8” to open() in IDLE’s
     test_help_about.  GUI test test_file_buttons() only looks at
     initial ascii-only lines, but failed on systems where open()
     defaults to ‘ascii’ because readline() internally reads and decodes
     far enough ahead to encounter a non-ascii character in CREDITS.txt.

   - bpo-32765(8): Update configdialog General tab docstring to add new
     widgets to the widget list.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32984

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32940

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32916

   (4) https://bugs.python.org/issue?@action=redirect&bpo=32905

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32874

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32837

   (7) https://bugs.python.org/issue?@action=redirect&bpo=32826

   (8) https://bugs.python.org/issue?@action=redirect&bpo=32765


File: python.info,  Node: Ferramentas/Demos<38>,  Next: API C<64>,  Prev: IDLE<51>,  Up: Python 3 6 5 release candidate 1

1.23.77.10 Ferramentas/Demos
............................

   - bpo-24960(1): 2to3 and lib2to3 can now read pickled grammar files
     using pkgutil.get_data() rather than probing the filesystem.  This
     lets 2to3 and lib2to3 work when run from a zipfile.

   - bpo-32222(2): Fix pygettext not extracting docstrings for functions
     with type annotated arguments.  Patch by Toby Harradine.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24960

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32222


File: python.info,  Node: API C<64>,  Prev: Ferramentas/Demos<38>,  Up: Python 3 6 5 release candidate 1

1.23.77.11 API C
................

   - bpo-29084(1): Undocumented C API for OrderedDict has been excluded
     from the limited C API. It was added by mistake and actually never
     worked in the limited C API.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29084


File: python.info,  Node: Python 3 6 4 final,  Next: Python 3 6 4 release candidate 1,  Prev: Python 3 6 5 release candidate 1,  Up: Changelog

1.23.78 Python 3.6.4 final
--------------------------

'Data de lançamento: 2017-12-18'

There were no new code changes in version 3.6.4 since v3.6.4rc1.


File: python.info,  Node: Python 3 6 4 release candidate 1,  Next: Python 3 6 3 final,  Prev: Python 3 6 4 final,  Up: Changelog

1.23.79 Python 3.6.4 release candidate 1
----------------------------------------

'Data de lançamento: 2017-12-05'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<148>.
* Biblioteca: Biblioteca<151>.
* Documentação: Documentação<65>.
* Testes: Testes<67>.
* Construção: Construção<72>.
* Windows: Windows<63>.
* macOS: macOS<50>.
* IDLE: IDLE<52>.
* Ferramentas/Demos: Ferramentas/Demos<39>.
* API C: API C<65>.


File: python.info,  Node: Núcleo e embutidos<148>,  Next: Biblioteca<151>,  Up: Python 3 6 4 release candidate 1

1.23.79.1 Núcleo e embutidos
............................

   - bpo-32176(1): co_flags.CO_NOFREE is now always set correctly by the
     code object constructor based on freevars and cellvars, rather than
     needing to be set correctly by the caller.  This ensures it will be
     cleared automatically when additional cell references are injected
     into a modified code object and function.

   - bpo-31949(2): Fixed several issues in printing tracebacks
     (PyTraceBack_Print()).  Setting sys.tracebacklimit to 0 or less now
     suppresses printing tracebacks.  Setting sys.tracebacklimit to None
     now causes using the default limit.  Setting sys.tracebacklimit to
     an integer larger than LONG_MAX now means using the limit LONG_MAX
     rather than the default limit.  Fixed integer overflows in the case
     of more than ‘2**31’ traceback items on Windows.  Fixed output
     errors handling.

   - bpo-30696(3): Fix the interactive interpreter looping endlessly
     when no memory.

   - bpo-20047(4): Bytearray methods partition() and rpartition() now
     accept only bytes-like objects as separator, as documented.  In
     particular they now raise TypeError rather of returning a bogus
     result when an integer is passed as a separator.

   - bpo-31852(5): Fix a segmentation fault caused by a combination of
     the async soft keyword and continuation lines.

   - bpo-21720(6): BytesWarning no longer emitted when the 'fromlist'
     argument of ‘__import__()’ or the ‘__all__’ attribute of the module
     contain bytes instances.

   - bpo-31825(7): Fixed OverflowError in the ‘unicode-escape’ codec and
     in codecs.escape_decode() when decode an escaped non-ascii byte.

   - bpo-28603(8): Print the full context/cause chain of exceptions on
     interpreter exit, even if an exception in the chain is unhashable
     or compares equal to later ones.  Patch by Zane Bitter.

   - bpo-31786(9): Fix timeout rounding in the select module to round
     correctly negative timeouts between -1.0 and 0.0.  The functions
     now block waiting for events as expected.  Previously, the call was
     incorrectly non-blocking.  Patch by Pablo Galindo.

   - bpo-31642(10): Restored blocking “from package import module” by
     setting sys.modules[“package.module”] to None.

   - bpo-31626(11): Fixed a bug in debug memory allocator.  There was a
     write to freed memory after shrinking a memory block.

   - bpo-31619(12): Fixed a ValueError when convert a string with large
     number of underscores to integer with binary base.

   - bpo-31592(13): Fixed an assertion failure in Python parser in case
     of a bad ‘unicodedata.normalize()’.  Patch by Oren Milman.

   - bpo-31588(14): Raise a ‘TypeError’ with a helpful error message
     when class creation fails due to a metaclass with a bad
     ‘__prepare__()’ method.  Patch by Oren Milman.

   - bpo-31566(15): Fix an assertion failure in ‘_warnings.warn()’ in
     case of a bad ‘__name__’ global.  Patch by Oren Milman.

   - bpo-31505(16): Fix an assertion failure in ‘json’, in case
     ‘_json.make_encoder()’ received a bad ‘encoder()’ argument.  Patch
     by Oren Milman.

   - bpo-31492(17): Fix assertion failures in case of failing to import
     from a module with a bad ‘__name__’ attribute, and in case of
     failing to access an attribute of such a module.  Patch by Oren
     Milman.

   - bpo-31490(18): Fix an assertion failure in ‘ctypes’ class
     definition, in case the class has an attribute whose name is
     specified in ‘_anonymous_’ but not in ‘_fields_’.  Patch by Oren
     Milman.

   - bpo-31478(19): Fix an assertion failure in ‘_random.Random.seed()’
     in case the argument has a bad ‘__abs__()’ method.  Patch by Oren
     Milman.

   - bpo-31315(20): Fix an assertion failure in imp.create_dynamic(),
     when spec.name is not a string.  Patch by Oren Milman.

   - bpo-31311(21): Fix a crash in the ‘__setstate__()’ method of
     ‘ctypes._CData’, in case of a bad ‘__dict__’.  Patch by Oren
     Milman.

   - bpo-31293(22): Fix crashes in true division and multiplication of a
     timedelta object by a float with a bad as_integer_ratio() method.
     Patch by Oren Milman.

   - bpo-31285(23): Fix an assertion failure in
     ‘warnings.warn_explicit’, when the return value of the received
     loader’s ‘get_source()’ has a bad ‘splitlines()’ method.  Patch by
     Oren Milman.

   - bpo-30817(24): ‘PyErr_PrintEx()’ clears now the ignored exception
     that may be raised by ‘_PySys_SetObjectId()’, for example when no
     memory.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32176

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31949

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30696

   (4) https://bugs.python.org/issue?@action=redirect&bpo=20047

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31852

   (6) https://bugs.python.org/issue?@action=redirect&bpo=21720

   (7) https://bugs.python.org/issue?@action=redirect&bpo=31825

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28603

   (9) https://bugs.python.org/issue?@action=redirect&bpo=31786

   (10) https://bugs.python.org/issue?@action=redirect&bpo=31642

   (11) https://bugs.python.org/issue?@action=redirect&bpo=31626

   (12) https://bugs.python.org/issue?@action=redirect&bpo=31619

   (13) https://bugs.python.org/issue?@action=redirect&bpo=31592

   (14) https://bugs.python.org/issue?@action=redirect&bpo=31588

   (15) https://bugs.python.org/issue?@action=redirect&bpo=31566

   (16) https://bugs.python.org/issue?@action=redirect&bpo=31505

   (17) https://bugs.python.org/issue?@action=redirect&bpo=31492

   (18) https://bugs.python.org/issue?@action=redirect&bpo=31490

   (19) https://bugs.python.org/issue?@action=redirect&bpo=31478

   (20) https://bugs.python.org/issue?@action=redirect&bpo=31315

   (21) https://bugs.python.org/issue?@action=redirect&bpo=31311

   (22) https://bugs.python.org/issue?@action=redirect&bpo=31293

   (23) https://bugs.python.org/issue?@action=redirect&bpo=31285

   (24) https://bugs.python.org/issue?@action=redirect&bpo=30817


File: python.info,  Node: Biblioteca<151>,  Next: Documentação<65>,  Prev: Núcleo e embutidos<148>,  Up: Python 3 6 4 release candidate 1

1.23.79.2 Biblioteca
....................

   - bpo-28556(1): Two minor fixes for ‘typing’ module: allow shallow
     copying instances of generic classes, improve interaction of
     ‘__init_subclass__’ with generics.  Original PRs by Ivan
     Levkivskyi.

   - bpo-27240(2): The header folding algorithm for the new email
     policies has been rewritten, which also fixes bpo-30788(3),
     bpo-31831(4), and bpo-32182(5).  In particular, RFC2231 folding is
     now done correctly.

   - bpo-32186(6): io.FileIO.readall() and io.FileIO.read() now release
     the GIL when getting the file size.  Fixed hang of all threads with
     inaccessible NFS server.  Patch by Nir Soffer.

   - bpo-12239(7): Make ‘msilib.SummaryInformation.GetProperty()’ return
     ‘None’ when the value of property is ‘VT_EMPTY’.  Initial patch by
     Mark Mc Mahon.

   - bpo-31325(8): Fix wrong usage of *note collections.namedtuple():
     1ca. in the *note RobotFileParser.parse(): 1c1c. method.  Initial
     patch by Robin Wellner.

   - bpo-12382(9): ‘msilib.OpenDatabase()’ now raises a better exception
     message when it couldn’t open or create an MSI file.  Initial patch
     by William Tisäter.

   - bpo-32110(10): ‘codecs.StreamReader.read(n)’ now returns not more
     than 'n' characters/bytes for non-negative 'n'.  This makes it
     compatible with ‘read()’ methods of other file-like objects.

   - bpo-32072(11): Fixed issues with binary plists: Fixed saving
     bytearrays.  Identical objects will be saved only once.  Equal
     references will be load as identical objects.  Added support for
     saving and loading recursive data structures.

   - bpo-32034(12): Make asyncio.IncompleteReadError and
     LimitOverrunError pickleable.

   - bpo-32015(13): Fixed the looping of asyncio in the case of
     reconnection the socket during waiting async read/write from/to the
     socket.

   - bpo-32011(14): Restored support of loading marshal files with the
     TYPE_INT64 code.  These files can be produced in Python 2.7.

   - bpo-31970(15): Reduce performance overhead of asyncio debug mode.

   - bpo-9678(16): Fixed determining the MAC address in the uuid module:
     Using ifconfig on NetBSD and OpenBSD. Using arp on Linux, FreeBSD,
     NetBSD and OpenBSD. Based on patch by Takayuki Shimizukawa.

   - bpo-30057(17): Fix potential missed signal in signal.signal().

   - bpo-31933(18): Fix Blake2 params leaf_size and node_offset on big
     endian platforms.  Patch by Jack O’Connor.

   - bpo-31927(19): Fixed compilation of the socket module on NetBSD 8.
     Fixed assertion failure or reading arbitrary data when parse a
     AF_BLUETOOTH address on NetBSD and DragonFly BSD.

   - bpo-27666(20): Fixed stack corruption in curses.box() and
     curses.ungetmouse() when the size of types chtype or mmask_t is
     less than the size of C long.  curses.box() now accepts characters
     as arguments.  Based on patch by Steve Fink.

   - bpo-31897(21): plistlib now catches more errors when read binary
     plists and raises InvalidFileException instead of unexpected
     exceptions.

   - bpo-25720(22): Fix the method for checking pad state of curses
     WINDOW. Patch by Masayuki Yamamoto.

   - bpo-31893(23): Fixed the layout of the kqueue_event structure on
     OpenBSD and NetBSD. Fixed the comparison of the kqueue_event
     objects.

   - bpo-31891(24): Fixed building the curses module on NetBSD.

   - bpo-28416(25): Instances of pickle.Pickler subclass with the
     persistent_id() method and pickle.Unpickler subclass with the
     persistent_load() method no longer create reference cycles.

   - bpo-28326(26): Fix multiprocessing.Process when stdout and/or
     stderr is closed or None.

   - bpo-31457(27): If nested log adapters are used, the inner
     ‘process()’ methods are no longer omitted.

   - bpo-31457(28): The ‘manager’ property on LoggerAdapter objects is
     now properly settable.

   - bpo-31806(29): Fix timeout rounding in time.sleep(),
     threading.Lock.acquire() and socket.socket.settimeout() to round
     correctly negative timeouts between -1.0 and 0.0.  The functions
     now block waiting for events as expected.  Previously, the call was
     incorrectly non-blocking.  Patch by Pablo Galindo.

   - bpo-28603(30): traceback: Fix a TypeError that occurred during
     printing of exception tracebacks when either the current exception
     or an exception in its context/cause chain is unhashable.  Patch by
     Zane Bitter.

   - bpo-30058(31): Fixed buffer overflow in select.kqueue.control().

   - bpo-31770(32): Prevent a crash when calling the ‘__init__()’ method
     of a ‘sqlite3.Cursor’ object more than once.  Patch by Oren Milman.

   - bpo-31672(33): ‘idpattern’ in ‘string.Template’ matched some
     non-ASCII characters.  Now it uses ‘-i’ regular expression local
     flag to avoid non-ASCII characters.

   - bpo-31764(34): Prevent a crash in ‘sqlite3.Cursor.close()’ in case
     the ‘Cursor’ object is uninitialized.  Patch by Oren Milman.

   - bpo-31752(35): Fix possible crash in timedelta constructor called
     with custom integers.

   - bpo-31701(36): On Windows, faulthandler.enable() now ignores MSC
     and COM exceptions.

   - bpo-31728(37): Prevent crashes in ‘_elementtree’ due to unsafe
     cleanup of ‘Element.text’ and ‘Element.tail’.  Patch by Oren
     Milman.

   - bpo-31620(38): an empty asyncio.Queue now doesn’t leak memory when
     queue.get pollers timeout

   - bpo-31632(39): Fix method set_protocol() of class
     _SSLProtocolTransport in asyncio module.  This method was
     previously modifying a wrong reference to the protocol.

   - bpo-31675(40): Fixed memory leaks in Tkinter’s methods splitlist()
     and split() when pass a string larger than 2 GiB.

   - bpo-31673(41): Fixed typo in the name of Tkinter’s method
     adderrorinfo().

   - bpo-30806(42): Fix the string representation of a netrc object.

   - bpo-15037(43): Added a workaround for getkey() in curses for
     ncurses 5.7 and earlier.

   - bpo-25351(44): Avoid venv activate failures with undefined
     variables

   - bpo-25532(45): inspect.unwrap() will now only try to unwrap an
     object sys.getrecursionlimit() times, to protect against objects
     which create a new object on every attribute access.

   - bpo-30347(46): Stop crashes when concurrently iterate over
     itertools.groupby() iterators.

   - bpo-31516(47): ‘threading.current_thread()’ should not return a
     dummy thread at shutdown.

   - bpo-31351(48): python -m ensurepip now exits with non-zero exit
     code if pip bootstrapping has failed.

   - bpo-31482(49): ‘random.seed()’ now works with bytes in version=1

   - bpo-31334(50): Fix ‘poll.poll([timeout])’ in the ‘select’ module
     for arbitrary negative timeouts on all OSes where it can only be a
     non-negative integer or -1.  Patch by Riccardo Coccioli.

   - bpo-31310(51): multiprocessing’s semaphore tracker should be
     launched again if crashed.

   - bpo-31308(52): Make multiprocessing’s forkserver process immune to
     Ctrl-C and other user interruptions.  If it crashes, restart it
     when necessary.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27240

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30788

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31831

   (5) https://bugs.python.org/issue?@action=redirect&bpo=32182

   (6) https://bugs.python.org/issue?@action=redirect&bpo=32186

   (7) https://bugs.python.org/issue?@action=redirect&bpo=12239

   (8) https://bugs.python.org/issue?@action=redirect&bpo=31325

   (9) https://bugs.python.org/issue?@action=redirect&bpo=12382

   (10) https://bugs.python.org/issue?@action=redirect&bpo=32110

   (11) https://bugs.python.org/issue?@action=redirect&bpo=32072

   (12) https://bugs.python.org/issue?@action=redirect&bpo=32034

   (13) https://bugs.python.org/issue?@action=redirect&bpo=32015

   (14) https://bugs.python.org/issue?@action=redirect&bpo=32011

   (15) https://bugs.python.org/issue?@action=redirect&bpo=31970

   (16) https://bugs.python.org/issue?@action=redirect&bpo=9678

   (17) https://bugs.python.org/issue?@action=redirect&bpo=30057

   (18) https://bugs.python.org/issue?@action=redirect&bpo=31933

   (19) https://bugs.python.org/issue?@action=redirect&bpo=31927

   (20) https://bugs.python.org/issue?@action=redirect&bpo=27666

   (21) https://bugs.python.org/issue?@action=redirect&bpo=31897

   (22) https://bugs.python.org/issue?@action=redirect&bpo=25720

   (23) https://bugs.python.org/issue?@action=redirect&bpo=31893

   (24) https://bugs.python.org/issue?@action=redirect&bpo=31891

   (25) https://bugs.python.org/issue?@action=redirect&bpo=28416

   (26) https://bugs.python.org/issue?@action=redirect&bpo=28326

   (27) https://bugs.python.org/issue?@action=redirect&bpo=31457

   (28) https://bugs.python.org/issue?@action=redirect&bpo=31457

   (29) https://bugs.python.org/issue?@action=redirect&bpo=31806

   (30) https://bugs.python.org/issue?@action=redirect&bpo=28603

   (31) https://bugs.python.org/issue?@action=redirect&bpo=30058

   (32) https://bugs.python.org/issue?@action=redirect&bpo=31770

   (33) https://bugs.python.org/issue?@action=redirect&bpo=31672

   (34) https://bugs.python.org/issue?@action=redirect&bpo=31764

   (35) https://bugs.python.org/issue?@action=redirect&bpo=31752

   (36) https://bugs.python.org/issue?@action=redirect&bpo=31701

   (37) https://bugs.python.org/issue?@action=redirect&bpo=31728

   (38) https://bugs.python.org/issue?@action=redirect&bpo=31620

   (39) https://bugs.python.org/issue?@action=redirect&bpo=31632

   (40) https://bugs.python.org/issue?@action=redirect&bpo=31675

   (41) https://bugs.python.org/issue?@action=redirect&bpo=31673

   (42) https://bugs.python.org/issue?@action=redirect&bpo=30806

   (43) https://bugs.python.org/issue?@action=redirect&bpo=15037

   (44) https://bugs.python.org/issue?@action=redirect&bpo=25351

   (45) https://bugs.python.org/issue?@action=redirect&bpo=25532

   (46) https://bugs.python.org/issue?@action=redirect&bpo=30347

   (47) https://bugs.python.org/issue?@action=redirect&bpo=31516

   (48) https://bugs.python.org/issue?@action=redirect&bpo=31351

   (49) https://bugs.python.org/issue?@action=redirect&bpo=31482

   (50) https://bugs.python.org/issue?@action=redirect&bpo=31334

   (51) https://bugs.python.org/issue?@action=redirect&bpo=31310

   (52) https://bugs.python.org/issue?@action=redirect&bpo=31308


File: python.info,  Node: Documentação<65>,  Next: Testes<67>,  Prev: Biblioteca<151>,  Up: Python 3 6 4 release candidate 1

1.23.79.3 Documentação
......................

   - bpo-32105(1): Added asyncio.BaseEventLoop.connect_accepted_socket
     versionadded marker.

   - bpo-31537(2): Fix incorrect usage of ‘get_history_length’ in
     readline documentation example code.  Patch by Brad Smith.

   - bpo-30085(3): The operator functions without double underscores are
     preferred for clarity.  The one with underscores are only kept for
     back-compatibility.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32105

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31537

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30085


File: python.info,  Node: Testes<67>,  Next: Construção<72>,  Prev: Documentação<65>,  Up: Python 3 6 4 release candidate 1

1.23.79.4 Testes
................

   - bpo-31380(1): Skip test_httpservers test_undecodable_file on macOS:
     fails on APFS.

   - bpo-31705(2): Skip test_socket.test_sha256() on Linux kernel older
     than 4.5.  The test fails with ENOKEY on kernel 3.10 (on ppc64le).
     A fix was merged into the kernel 4.5.

   - bpo-31174(3): Fix test_tools.test_unparse: DirectoryTestCase now
     stores the names sample to always test the same files.  It prevents
     false alarms when hunting reference leaks.

   - bpo-30695(4): Add the ‘set_nomemory(start, stop)’ and
     ‘remove_mem_hooks()’ functions to the ‘_testcapi’ module.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31380

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31705

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31174

   (4) https://bugs.python.org/issue?@action=redirect&bpo=30695


File: python.info,  Node: Construção<72>,  Next: Windows<63>,  Prev: Testes<67>,  Up: Python 3 6 4 release candidate 1

1.23.79.5 Construção
....................

   - bpo-32059(1): ‘detect_modules()’ in ‘setup.py’ now also searches
     the sysroot paths when cross-compiling.

   - bpo-31957(2): Fixes Windows SDK version detection when building for
     Windows.

   - bpo-31609(3): Fixes quotes in PCbuild/clean.bat

   - bpo-31934(4): Abort the build when building out of a not clean
     source tree.

   - bpo-31926(5): Fixed Argument Clinic sometimes causing compilation
     errors when there was more than one function and/or method in a .c
     file with the same name.

   - bpo-28791(6): Update Windows builds to use SQLite 3.21.0.

   - bpo-28791(7): Update OS X installer to use SQLite 3.21.0.

   - bpo-22140(8): Prevent double substitution of prefix in
     python-config.sh.

   - bpo-31536(9): Avoid wholesale rebuild after ‘make regen-all’ if
     nothing changed.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32059

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31957

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31609

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31934

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31926

   (6) https://bugs.python.org/issue?@action=redirect&bpo=28791

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28791

   (8) https://bugs.python.org/issue?@action=redirect&bpo=22140

   (9) https://bugs.python.org/issue?@action=redirect&bpo=31536


File: python.info,  Node: Windows<63>,  Next: macOS<50>,  Prev: Construção<72>,  Up: Python 3 6 4 release candidate 1

1.23.79.6 Windows
.................

   - bpo-1102(1): Return ‘None’ when ‘View.Fetch()’ returns
     ‘ERROR_NO_MORE_ITEMS’ instead of raising ‘MSIError’.  Initial patch
     by Anthony Tuininga.

   - bpo-31944(2): Fixes Modify button in Apps and Features dialog.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=1102

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31944


File: python.info,  Node: macOS<50>,  Next: IDLE<52>,  Prev: Windows<63>,  Up: Python 3 6 4 release candidate 1

1.23.79.7 macOS
...............

   - bpo-31392(1): Update macOS installer to use OpenSSL 1.0.2m

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31392


File: python.info,  Node: IDLE<52>,  Next: Ferramentas/Demos<39>,  Prev: macOS<50>,  Up: Python 3 6 4 release candidate 1

1.23.79.8 IDLE
..............

   - bpo-32207(1): Improve tk event exception tracebacks in IDLE. When
     tk event handling is driven by IDLE’s run loop, a confusing and
     distracting queue.EMPTY traceback context is no longer added to tk
     event exception tracebacks.  The traceback is now the same as when
     event handling is driven by user code.  Patch based on a suggestion
     by Serhiy Storchaka.

   - bpo-32164(2): Delete unused file idlelib/tabbedpages.py.  Use of
     TabbedPageSet in configdialog was replaced by ttk.Notebook.

   - bpo-32100(3): IDLE: Fix old and new bugs in pathbrowser; improve
     tests.  Patch mostly by Cheryl Sabella.

   - bpo-31858(4): IDLE – Restrict shell prompt manipulation to the
     shell.  Editor and output windows only see an empty last prompt
     line.  This simplifies the code and fixes a minor bug when newline
     is inserted.  Sys.ps1, if present, is read on Shell start-up, but
     is not set or changed.

   - bpo-31860(5): The font sample in the IDLE configuration dialog is
     now editable.  Changes persist while IDLE remains open

   - bpo-31836(6): Test_code_module now passes if run after test_idle,
     which sets ps1.  The code module uses sys.ps1 if present or sets it
     to ‘>>> ‘ if not.  Test_code_module now properly tests both
     behaviors.  Ditto for ps2.

   - bpo-28603(7): Fix a TypeError that caused a shell restart when
     printing a traceback that includes an exception that is unhashable.
     Patch by Zane Bitter.

   - bpo-13802(8): Use non-Latin characters in the IDLE’s Font settings
     sample.  Even if one selects a font that defines a limited subset
     of the unicode Basic Multilingual Plane, tcl/tk will use other
     fonts that define a character.  The expanded example give users of
     non-Latin characters a better idea of what they might see in IDLE’s
     shell and editors.  To make room for the expanded sample, frames on
     the Font tab are re-arranged.  The Font/Tabs help explains a bit
     about the additions.

   - bpo-31460(9): Simplify the API of IDLE’s Module Browser.  Passing a
     widget instead of an flist with a root widget opens the option of
     creating a browser frame that is only part of a window.  Passing a
     full file name instead of pieces assumed to come from a .py file
     opens the possibility of browsing python files that do not end in
     .py.

   - bpo-31649(10): IDLE - Make _htest, _utest parameters keyword only.

   - bpo-31559(11): Remove test order dependence in
     idle_test.test_browser.

   - bpo-31459(12): Rename IDLE’s module browser from Class Browser to
     Module Browser.  The original module-level class and method browser
     became a module browser, with the addition of module-level
     functions, years ago.  Nested classes and functions were added
     yesterday.  For back-compatibility, the virtual event
     <<open-class-browser>>, which appears on the Keys tab of the
     Settings dialog, is not changed.  Patch by Cheryl Sabella.

   - bpo-31500(13): Default fonts now are scaled on HiDPI displays.

   - bpo-1612262(14): IDLE module browser now shows nested classes and
     functions.  Original patches for code and tests by Guilherme Polo
     and Cheryl Sabella, respectively.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32207

   (2) https://bugs.python.org/issue?@action=redirect&bpo=32164

   (3) https://bugs.python.org/issue?@action=redirect&bpo=32100

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31858

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31860

   (6) https://bugs.python.org/issue?@action=redirect&bpo=31836

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28603

   (8) https://bugs.python.org/issue?@action=redirect&bpo=13802

   (9) https://bugs.python.org/issue?@action=redirect&bpo=31460

   (10) https://bugs.python.org/issue?@action=redirect&bpo=31649

   (11) https://bugs.python.org/issue?@action=redirect&bpo=31559

   (12) https://bugs.python.org/issue?@action=redirect&bpo=31459

   (13) https://bugs.python.org/issue?@action=redirect&bpo=31500

   (14) https://bugs.python.org/issue?@action=redirect&bpo=1612262


File: python.info,  Node: Ferramentas/Demos<39>,  Next: API C<65>,  Prev: IDLE<52>,  Up: Python 3 6 4 release candidate 1

1.23.79.9 Ferramentas/Demos
...........................

   - bpo-30722(1): Make redemo work with Python 3.6 and newer versions.
     Also, remove the ‘LOCALE’ option since it doesn’t work with string
     patterns in Python 3.  Patch by Christoph Sarnowski.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30722


File: python.info,  Node: API C<65>,  Prev: Ferramentas/Demos<39>,  Up: Python 3 6 4 release candidate 1

1.23.79.10 API C
................

   - bpo-20891(1): Fix PyGILState_Ensure().  When PyGILState_Ensure() is
     called in a non-Python thread before PyEval_InitThreads(), only
     call PyEval_InitThreads() after calling PyThreadState_New() to fix
     a crash.

   - bpo-31532(2): Fix memory corruption due to allocator mix in
     getpath.c between Py_GetPath() and Py_SetPath()

   - bpo-30697(3): The ‘PyExc_RecursionErrorInst’ singleton is removed
     and ‘PyErr_NormalizeException()’ does not use it anymore.  This
     singleton is persistent and its members being never cleared may
     cause a segfault during finalization of the interpreter.  See also
     bpo-22898(4).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20891

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31532

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30697

   (4) https://bugs.python.org/issue?@action=redirect&bpo=22898


File: python.info,  Node: Python 3 6 3 final,  Next: Python 3 6 3 release candidate 1,  Prev: Python 3 6 4 release candidate 1,  Up: Changelog

1.23.80 Python 3.6.3 final
--------------------------

'Data de lançamento: 2017-10-03'

* Menu:

* Biblioteca: Biblioteca<152>.
* Construção: Construção<73>.


File: python.info,  Node: Biblioteca<152>,  Next: Construção<73>,  Up: Python 3 6 3 final

1.23.80.1 Biblioteca
....................

   - bpo-31641(1): Re-allow arbitrary iterables in
     ‘concurrent.futures.as_completed()’.  Fixes regression in 3.6.3rc1.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31641


File: python.info,  Node: Construção<73>,  Prev: Biblioteca<152>,  Up: Python 3 6 3 final

1.23.80.2 Construção
....................

   - bpo-31662(1): Fix typos in Windows ‘uploadrelease.bat’ script.  Fix
     Windows Doc build issues in ‘Doc/make.bat’.

   - bpo-31423(2): Fix building the PDF documentation with newer
     versions of Sphinx.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31662

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31423


File: python.info,  Node: Python 3 6 3 release candidate 1,  Next: Python 3 6 2 final,  Prev: Python 3 6 3 final,  Up: Changelog

1.23.81 Python 3.6.3 release candidate 1
----------------------------------------

'Data de lançamento: 2017-09-18'

* Menu:

* Segurança: Segurança<47>.
* Núcleo e embutidos: Núcleo e embutidos<149>.
* Biblioteca: Biblioteca<153>.
* Documentação: Documentação<66>.
* Testes: Testes<68>.
* Construção: Construção<74>.
* Windows: Windows<64>.
* IDLE: IDLE<53>.
* Ferramentas/Demos: Ferramentas/Demos<40>.


File: python.info,  Node: Segurança<47>,  Next: Núcleo e embutidos<149>,  Up: Python 3 6 3 release candidate 1

1.23.81.1 Segurança
...................

   - bpo-29781(1): SSLObject.version() now correctly returns None when
     handshake over BIO has not been performed yet.

   - bpo-30947(2): Upgrade libexpat embedded copy from version 2.2.1 to
     2.2.3 to get security fixes.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29781

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30947


File: python.info,  Node: Núcleo e embutidos<149>,  Next: Biblioteca<153>,  Prev: Segurança<47>,  Up: Python 3 6 3 release candidate 1

1.23.81.2 Núcleo e embutidos
............................

   - bpo-31471(1): Fix an assertion failure in ‘subprocess.Popen()’ on
     Windows, in case the env argument has a bad ‘keys()’ method.  Patch
     by Oren Milman.

   - bpo-31418(2): Fix an assertion failure in ‘PyErr_WriteUnraisable()’
     in case of an exception with a bad ‘__module__’ attribute.  Patch
     by Oren Milman.

   - bpo-31416(3): Fix assertion failures in case of a bad
     warnings.filters or warnings.defaultaction.  Patch by Oren Milman.

   - bpo-31411(4): Raise a TypeError instead of SystemError in case
     warnings.onceregistry is not a dictionary.  Patch by Oren Milman.

   - bpo-31373(5): Fix several possible instances of undefined behavior
     due to floating-point demotions.

   - bpo-30465(6): Location information (‘lineno’ and ‘col_offset’) in
     f-strings is now (mostly) correct.  This fixes tools like flake8
     from showing warnings on the wrong line (typically the first line
     of the file).

   - bpo-31343(7): Include sys/sysmacros.h for major(), minor(), and
     makedev().  GNU C libray plans to remove the functions from
     sys/types.h.

   - bpo-31291(8): Fix an assertion failure in
     ‘zipimport.zipimporter.get_data’ on Windows, when the return value
     of ‘pathname.replace('/','\\')’ isn’t a string.  Patch by Oren
     Milman.

   - bpo-31271(9): Fix an assertion failure in the ‘write()’ method of
     ‘io.TextIOWrapper’, when the encoder doesn’t return a bytes object.
     Patch by Oren Milman.

   - bpo-31243(10): Fix a crash in some methods of ‘io.TextIOWrapper’,
     when the decoder’s state is invalid.  Patch by Oren Milman.

   - bpo-30721(11): ‘print’ now shows correct usage hint for using
     Python 2 redirection syntax.  Patch by Sanyam Khurana.

   - bpo-31070(12): Fix a race condition in importlib
     _get_module_lock().

   - bpo-31095(13): Fix potential crash during GC caused by ‘tp_dealloc’
     which doesn’t call ‘PyObject_GC_UnTrack()’.

   - bpo-31071(14): Avoid masking original TypeError in call with *
     unpacking when other arguments are passed.

   - bpo-30978(15): str.format_map() now passes key lookup exceptions
     through.  Previously any exception was replaced with a KeyError
     exception.

   - bpo-30808(16): Use _Py_atomic API for concurrency-sensitive signal
     state.

   - bpo-30876(17): Relative import from unloaded package now reimports
     the package instead of failing with SystemError.  Relative import
     from non-package now fails with ImportError rather than
     SystemError.

   - bpo-30703(18): Improve signal delivery.  Avoid using
     Py_AddPendingCall from signal handler, to avoid calling
     signal-unsafe functions.  The tests I’m adding here fail without
     the rest of the patch, on Linux and OS X. This means our signal
     delivery logic had defects (some signals could be lost).

   - bpo-30765(19): Avoid blocking in pthread_mutex_lock() when
     PyThread_acquire_lock() is asked not to block.

   - bpo-31161(20): Make sure the ‘Missing parentheses’ syntax error
     message is only applied to SyntaxError, not to subclasses.  Patch
     by Martijn Pieters.

   - bpo-30814(21): Fixed a race condition when import a submodule from
     a package.

   - bpo-30597(22): ‘print’ now shows expected input in custom error
     message when used as a Python 2 statement.  Patch by Sanyam
     Khurana.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31471

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31418

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31416

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31411

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31373

   (6) https://bugs.python.org/issue?@action=redirect&bpo=30465

   (7) https://bugs.python.org/issue?@action=redirect&bpo=31343

   (8) https://bugs.python.org/issue?@action=redirect&bpo=31291

   (9) https://bugs.python.org/issue?@action=redirect&bpo=31271

   (10) https://bugs.python.org/issue?@action=redirect&bpo=31243

   (11) https://bugs.python.org/issue?@action=redirect&bpo=30721

   (12) https://bugs.python.org/issue?@action=redirect&bpo=31070

   (13) https://bugs.python.org/issue?@action=redirect&bpo=31095

   (14) https://bugs.python.org/issue?@action=redirect&bpo=31071

   (15) https://bugs.python.org/issue?@action=redirect&bpo=30978

   (16) https://bugs.python.org/issue?@action=redirect&bpo=30808

   (17) https://bugs.python.org/issue?@action=redirect&bpo=30876

   (18) https://bugs.python.org/issue?@action=redirect&bpo=30703

   (19) https://bugs.python.org/issue?@action=redirect&bpo=30765

   (20) https://bugs.python.org/issue?@action=redirect&bpo=31161

   (21) https://bugs.python.org/issue?@action=redirect&bpo=30814

   (22) https://bugs.python.org/issue?@action=redirect&bpo=30597


File: python.info,  Node: Biblioteca<153>,  Next: Documentação<66>,  Prev: Núcleo e embutidos<149>,  Up: Python 3 6 3 release candidate 1

1.23.81.3 Biblioteca
....................

   - bpo-31499(1): xml.etree: Fix a crash when a parser is part of a
     reference cycle.

   - bpo-28556(2): typing.get_type_hints now finds the right globalns
     for classes and modules by default (when no ‘globalns’ was
     specified by the caller).

   - bpo-28556(3): Speed improvements to the ‘typing’ module.  Original
     PRs by Ivan Levkivskyi and Mitar.

   - bpo-31544(4): The C accelerator module of ElementTree ignored
     exceptions raised when looking up TreeBuilder target methods in
     XMLParser().

   - bpo-31234(5): socket.create_connection() now fixes manually a
     reference cycle: clear the variable storing the last exception on
     success.

   - bpo-31457(6): LoggerAdapter objects can now be nested.

   - bpo-31400(7): Improves SSL error handling to avoid losing error
     numbers.

   - bpo-28958(8): ssl.SSLContext() now uses OpenSSL error information
     when a context cannot be instantiated.

   - bpo-27340(9): SSLSocket.sendall() now uses memoryview to create
     slices of data.  This fixes support for all bytes-like object.  It
     is also more efficient and avoids costly copies.

   - bpo-31178(10): Fix string concatenation bug in rare error path in
     the subprocess module

   - bpo-31350(11): Micro-optimize ‘asyncio._get_running_loop()’ to
     become up to 10% faster.

   - bpo-31170(12): expat: Update libexpat from 2.2.3 to 2.2.4.  Fix
     copying of partial characters for UTF-8 input (libexpat bug 115):
     ‘https://github.com/libexpat/libexpat/issues/115’

   - bpo-29136(13): Add TLS 1.3 cipher suites and OP_NO_TLSv1_3.

   - bpo-29212(14): Fix concurrent.futures.thread.ThreadPoolExecutor
     threads to have a non repr() based thread name by default when no
     thread_name_prefix is supplied.  They will now identify themselves
     as “ThreadPoolExecutor-y_n”.

   - bpo-9146(15): Fix a segmentation fault in _hashopenssl when
     standard hash functions such as md5 are not available in the linked
     OpenSSL library.  As in some special FIPS-140 build environments.

   - bpo-27144(16): The ‘map()’ and ‘as_completed()’ iterators in
     ‘concurrent.futures’ now avoid keeping a reference to yielded
     objects.

   - bpo-10746(17): Fix ctypes producing wrong PEP 3118(18) type codes
     for integer types.

   - bpo-22536(19): The subprocess module now sets the filename when
     FileNotFoundError is raised on POSIX systems due to the executable
     or cwd not being found.

   - bpo-31249(20): concurrent.futures: WorkItem.run() used by
     ThreadPoolExecutor now breaks a reference cycle between an
     exception object and the WorkItem object.

   - bpo-31247(21): xmlrpc.server now explicitly breaks reference cycles
     when using sys.exc_info() in code handling exceptions.

   - bpo-30102(22): The ssl and hashlib modules now call
     OPENSSL_add_all_algorithms_noconf() on OpenSSL < 1.1.0.  The
     function detects CPU features and enables optimizations on some CPU
     architectures such as POWER8.  Patch is based on research from
     Gustavo Serra Scalet.

   - bpo-31185(23): Fixed miscellaneous errors in asyncio speedup
     module.

   - bpo-31135(24): ttk: fix the destroy() method of LabeledScale and
     OptionMenu classes.  Call the parent destroy() method even if the
     used attribute doesn’t exist.  The LabeledScale.destroy() method
     now also explicitly clears label and scale attributes to help the
     garbage collector to destroy all widgets.

   - bpo-31107(25): Fix ‘copyreg._slotnames()’ mangled attribute
     calculation for classes whose name begins with an underscore.
     Patch by Shane Harvey.

   - bpo-31061(26): Fixed a crash when using asyncio and threads.

   - bpo-30502(27): Fix handling of long oids in ssl.  Based on patch by
     Christian Heimes.

   - bpo-30119(28): ftplib.FTP.putline() now throws ValueError on
     commands that contains CR or LF. Patch by Donghee Na.

   - bpo-30595(29): multiprocessing.Queue.get() with a timeout now polls
     its reader in non-blocking mode if it succeeded to acquire the lock
     but the acquire took longer than the timeout.

   - bpo-29403(30): Fix ‘unittest.mock’’s autospec to not fail on
     method-bound builtin functions.  Patch by Aaron Gallagher.

   - bpo-30961(31): Fix decrementing a borrowed reference in
     tracemalloc.

   - bpo-25684(32): Change ‘ttk.OptionMenu’ radiobuttons to be unique
     across instances of ‘OptionMenu’.

   - bpo-30886(33): Fix multiprocessing.Queue.join_thread(): it now
     waits until the thread completes, even if the thread was started by
     the same process which created the queue.

   - bpo-29854(34): Fix segfault in readline when using readline’s
     history-size option.  Patch by Nir Soffer.

   - bpo-30319(35): socket.close() now ignores ECONNRESET error.

   - bpo-30828(36): Fix out of bounds write in
     ‘asyncio.CFuture.remove_done_callback()’.

   - bpo-30807(37): signal.setitimer() may disable the timer when passed
     a tiny value.  Tiny values (such as 1e-6) are valid non-zero values
     for setitimer(), which is specified as taking
     microsecond-resolution intervals.  However, on some platform, our
     conversion routine could convert 1e-6 into a zero interval,
     therefore disabling the timer instead of (re-)scheduling it.

   - bpo-30441(38): Fix bug when modifying os.environ while iterating
     over it

   - bpo-30532(39): Fix email header value parser dropping folding white
     space in certain cases.

   - bpo-30879(40): os.listdir() and os.scandir() now emit bytes names
     when called with bytes-like argument.

   - bpo-30746(41): Prohibited the ‘=’ character in environment variable
     names in ‘os.putenv()’ and ‘os.spawn*()’.

   - bpo-29755(42): Fixed the lgettext() family of functions in the
     gettext module.  They now always return bytes.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31499

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31544

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31234

   (6) https://bugs.python.org/issue?@action=redirect&bpo=31457

   (7) https://bugs.python.org/issue?@action=redirect&bpo=31400

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28958

   (9) https://bugs.python.org/issue?@action=redirect&bpo=27340

   (10) https://bugs.python.org/issue?@action=redirect&bpo=31178

   (11) https://bugs.python.org/issue?@action=redirect&bpo=31350

   (12) https://bugs.python.org/issue?@action=redirect&bpo=31170

   (13) https://bugs.python.org/issue?@action=redirect&bpo=29136

   (14) https://bugs.python.org/issue?@action=redirect&bpo=29212

   (15) https://bugs.python.org/issue?@action=redirect&bpo=9146

   (16) https://bugs.python.org/issue?@action=redirect&bpo=27144

   (17) https://bugs.python.org/issue?@action=redirect&bpo=10746

   (18) https://peps.python.org/pep-3118/

   (19) https://bugs.python.org/issue?@action=redirect&bpo=22536

   (20) https://bugs.python.org/issue?@action=redirect&bpo=31249

   (21) https://bugs.python.org/issue?@action=redirect&bpo=31247

   (22) https://bugs.python.org/issue?@action=redirect&bpo=30102

   (23) https://bugs.python.org/issue?@action=redirect&bpo=31185

   (24) https://bugs.python.org/issue?@action=redirect&bpo=31135

   (25) https://bugs.python.org/issue?@action=redirect&bpo=31107

   (26) https://bugs.python.org/issue?@action=redirect&bpo=31061

   (27) https://bugs.python.org/issue?@action=redirect&bpo=30502

   (28) https://bugs.python.org/issue?@action=redirect&bpo=30119

   (29) https://bugs.python.org/issue?@action=redirect&bpo=30595

   (30) https://bugs.python.org/issue?@action=redirect&bpo=29403

   (31) https://bugs.python.org/issue?@action=redirect&bpo=30961

   (32) https://bugs.python.org/issue?@action=redirect&bpo=25684

   (33) https://bugs.python.org/issue?@action=redirect&bpo=30886

   (34) https://bugs.python.org/issue?@action=redirect&bpo=29854

   (35) https://bugs.python.org/issue?@action=redirect&bpo=30319

   (36) https://bugs.python.org/issue?@action=redirect&bpo=30828

   (37) https://bugs.python.org/issue?@action=redirect&bpo=30807

   (38) https://bugs.python.org/issue?@action=redirect&bpo=30441

   (39) https://bugs.python.org/issue?@action=redirect&bpo=30532

   (40) https://bugs.python.org/issue?@action=redirect&bpo=30879

   (41) https://bugs.python.org/issue?@action=redirect&bpo=30746

   (42) https://bugs.python.org/issue?@action=redirect&bpo=29755


File: python.info,  Node: Documentação<66>,  Next: Testes<68>,  Prev: Biblioteca<153>,  Up: Python 3 6 3 release candidate 1

1.23.81.4 Documentação
......................

   - bpo-31294(1): Fix incomplete code snippet in the
     ZeroMQSocketListener and ZeroMQSocketHandler examples and adapt
     them to Python 3.

   - bpo-21649(2): Add RFC 7525 and Mozilla server side TLS links to SSL
     documentation.

   - bpo-30803(3): Clarify doc on truth value testing.  Original patch
     by Peter Thomassen.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31294

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21649

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30803


File: python.info,  Node: Testes<68>,  Next: Construção<74>,  Prev: Documentação<66>,  Up: Python 3 6 3 release candidate 1

1.23.81.5 Testes
................

   - bpo-31320(1): Silence traceback in test_ssl

   - bpo-25674(2): Remove sha256.tbs-internet.com ssl test

   - bpo-30715(3): Address ALPN callback changes for OpenSSL 1.1.0f.
     The latest version behaves like OpenSSL 1.0.2 and no longer aborts
     handshake.

   - bpo-30822(4): regrtest: Exclude tzdata from regrtest –all.  When
     running the test suite using –use=all / -u all, exclude tzdata
     since it makes test_datetime too slow (15-20 min on some buildbots)
     which then times out on some buildbots.  Fix also regrtest command
     line parser to allow passing -u extralargefile to run
     test_zipfile64.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31320

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25674

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30715

   (4) https://bugs.python.org/issue?@action=redirect&bpo=30822


File: python.info,  Node: Construção<74>,  Next: Windows<64>,  Prev: Testes<68>,  Up: Python 3 6 3 release candidate 1

1.23.81.6 Construção
....................

   - bpo-30854(1): Fix compile error when compiling –without-threads.
     Patch by Masayuki Yamamoto.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30854


File: python.info,  Node: Windows<64>,  Next: IDLE<53>,  Prev: Construção<74>,  Up: Python 3 6 3 release candidate 1

1.23.81.7 Windows
.................

   - bpo-30389(1): Adds detection of Visual Studio 2017 to distutils on
     Windows.

   - bpo-31340(2): Change to building with MSVC v141 (included with
     Visual Studio 2017)

   - bpo-30581(3): os.cpu_count() now returns the correct number of
     processors on Windows when the number of logical processors is
     greater than 64.

   - bpo-30731(4): Add a missing xmlns to python.manifest so that it
     matches the schema.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30389

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31340

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30581

   (4) https://bugs.python.org/issue?@action=redirect&bpo=30731


File: python.info,  Node: IDLE<53>,  Next: Ferramentas/Demos<40>,  Prev: Windows<64>,  Up: Python 3 6 3 release candidate 1

1.23.81.8 IDLE
..............

   - bpo-31493(1): IDLE code context – fix code update and font update
     timers.  Canceling timers prevents a warning message when test_idle
     completes.

   - bpo-31488(2): IDLE - Update non-key options in former extension
     classes.  When applying configdialog changes, call .reload for each
     feature class.  Change ParenMatch so updated options affect
     existing instances attached to existing editor windows.

   - bpo-31477(3): IDLE - Improve rstrip entry in doc.  Strip trailing
     whitespace strips more than blank spaces.  Multiline string
     literals are not skipped.

   - bpo-31480(4): IDLE - make tests pass with zzdummy extension
     disabled by default.

   - bpo-31421(5): Document how IDLE runs tkinter programs.  IDLE calls
     tcl/tk update in the background in order to make live interaction
     and experimentation with tkinter applications much easier.

   - bpo-31414(6): IDLE – fix tk entry box tests by deleting first.
     Adding to an int entry is not the same as deleting and inserting
     because int(‘’) will fail.

   - bpo-31051(7): Rearrange IDLE configdialog GenPage into Window,
     Editor, and Help sections.

   - bpo-30617(8): IDLE - Add docstrings and tests for outwin subclass
     of editor.  Move some data and functions from the class to module
     level.  Patch by Cheryl Sabella.

   - bpo-31287(9): IDLE - Do not modify tkinter.message in
     test_configdialog.

   - bpo-27099(10): Convert IDLE’s built-in ‘extensions’ to regular
     features.  About 10 IDLE features were implemented as supposedly
     optional extensions.  Their different behavior could be confusing
     or worse for users and not good for maintenance.  Hence the
     conversion.  The main difference for users is that user
     configurable key bindings for builtin features are now handled
     uniformly.  Now, editing a binding in a keyset only affects its
     value in the keyset.  All bindings are defined together in the
     system-specific default keysets in config-extensions.def.  All
     custom keysets are saved as a whole in config-extension.cfg.  All
     take effect as soon as one clicks Apply or Ok.  The affected events
     are ‘<<force-open-completions>>’, ‘<<expand-word>>’,
     ‘<<force-open-calltip>>’, ‘<<flash-paren>>’,
     ‘<<format-paragraph>>’, ‘<<run-module>>’, ‘<<check-module>>’, and
     ‘<<zoom-height>>’.  Any (global) customizations made before 3.6.3
     will not affect their keyset-specific customization after 3.6.3.
     and vice versa.  Initial patch by Charles Wohlganger.

   - bpo-31206(11): IDLE: Factor HighPage(Frame) class from
     ConfigDialog.  Patch by Cheryl Sabella.

   - bpo-31001(12): Add tests for configdialog highlight tab.  Patch by
     Cheryl Sabella.

   - bpo-31205(13): IDLE: Factor KeysPage(Frame) class from
     ConfigDialog.  The slightly modified tests continue to pass.  Patch
     by Cheryl Sabella.

   - bpo-31130(14): IDLE – stop leaks in test_configdialog.  Initial
     patch by Victor Stinner.

   - bpo-31002(15): Add tests for configdialog keys tab.  Patch by
     Cheryl Sabella.

   - bpo-19903(16): IDLE: Calltips use ‘inspect.signature’ instead of
     ‘inspect.getfullargspec’.  This improves calltips for builtins
     converted to use Argument Clinic.  Patch by Louie Lu.

   - bpo-31083(17): IDLE - Add an outline of a TabPage class in
     configdialog.  Update existing classes to match outline.  Initial
     patch by Cheryl Sabella.

   - bpo-31050(18): Factor GenPage(Frame) class from ConfigDialog.  The
     slightly modified tests continue to pass.  Patch by Cheryl Sabella.

   - bpo-31004(19): IDLE - Factor FontPage(Frame) class from
     ConfigDialog.  Slightly modified tests continue to pass.  Fix
     General tests.  Patch mostly by Cheryl Sabella.

   - bpo-30781(20): IDLE - Use ttk widgets in ConfigDialog.  Patches by
     Terry Jan Reedy and Cheryl Sabella.

   - bpo-31060(21): IDLE - Finish rearranging methods of ConfigDialog
     Grouping methods pertaining to each tab and the buttons will aid
     writing tests and improving the tabs and will enable splitting the
     groups into classes.

   - bpo-30853(22): IDLE – Factor a VarTrace class out of ConfigDialog.
     Instance tracers manages pairs consisting of a tk variable and a
     callback function.  When tracing is turned on, setting the variable
     calls the function.  Test coverage for the new class is 100%.

   - bpo-31003(23): IDLE: Add more tests for General tab.

   - bpo-30993(24): IDLE - Improve configdialog font page and tests.  In
     configdialog: Document causal pathways in create_font_tab
     docstring.  Simplify some attribute names.  Move set_samples calls
     to var_changed_font (idea from Cheryl Sabella).  Move related
     functions to positions after the create widgets function.  In
     test_configdialog: Fix test_font_set so not order dependent.  Fix
     renamed test_indent_scale so it tests the widget.  Adjust tests for
     movement of set_samples call.  Add tests for load functions.  Put
     all font tests in one class and tab indent tests in another.
     Except for two lines, these tests completely cover the related
     functions.

   - bpo-30981(25): IDLE – Add more configdialog font page tests.

   - bpo-28523(26): IDLE: replace ‘colour’ with ‘color’ in configdialog.

   - bpo-30917(27): Add tests for idlelib.config.IdleConf.  Increase
     coverage from 46% to 96%.  Patch by Louie Lu.

   - bpo-30934(28): Document coverage details for idlelib tests.  Add
     section to idlelib/idle-test/README.txt.  Include check that
     branches are taken both ways.  Exclude IDLE-specific code that does
     not run during unit tests.

   - bpo-30913(29): IDLE: Document ConfigDialog tk Vars, methods, and
     widgets in docstrings This will facilitate improving the dialog and
     splitting up the class.  Original patch by Cheryl Sabella.

   - bpo-30899(30): IDLE: Add tests for ConfigParser subclasses in
     config.  Patch by Louie Lu.

   - bpo-30881(31): IDLE: Add docstrings to browser.py.  Patch by Cheryl
     Sabella.

   - bpo-30851(32): IDLE: Remove unused variables in configdialog.  One
     is a duplicate, one is set but cannot be altered by users.  Patch
     by Cheryl Sabella.

   - bpo-30870(33): IDLE: In Settings dialog, select font with Up, Down
     keys as well as mouse.  Initial patch by Louie Lu.

   - bpo-8231(34): IDLE: call config.IdleConf.GetUserCfgDir only once.

   - bpo-30779(35): IDLE: Factor ConfigChanges class from configdialog,
     put in config; test.  * In config, put dump test code in a
     function; run it and unittest in ‘if __name__ == ‘__main__’.  * Add
     class config.ConfigChanges based on changes_class_v4.py on bpo
     issue.  * Add class test_config.ChangesTest, partly using
     configdialog_tests_v1.py.  * Revise configdialog to use
     ConfigChanges; see tracker msg297804.  * Revise test_configdialog
     to match configdialog changes.  * Remove configdialog functions
     unused or moved to ConfigChanges.  Cheryl Sabella contributed parts
     of the patch.

   - bpo-30777(36): IDLE: configdialog - Add docstrings and fix
     comments.  Patch by Cheryl Sabella.

   - bpo-30495(37): IDLE: Improve textview with docstrings, PEP8 names,
     and more tests.  Patch by Cheryl Sabella.

   - bpo-30723(38): IDLE: Make several improvements to parenmatch.  Add
     ‘parens’ style to highlight both opener and closer.  Make ‘default’
     style, which is not default, a synonym for ‘opener’.  Make
     time-delay work the same with all styles.  Add help for config
     dialog extensions tab, including help for parenmatch.  Add new
     tests.  Original patch by Charles Wohlganger.

   - bpo-30674(39): IDLE: add docstrings to grep module.  Patch by
     Cheryl Sabella

   - bpo-21519(40): IDLE’s basic custom key entry dialog now detects
     duplicates properly.  Original patch by Saimadhav Heblikar.

   - bpo-29910(41): IDLE no longer deletes a character after commenting
     out a region by a key shortcut.  Add ‘return 'break'’ for this and
     other potential conflicts between IDLE and default key bindings.

   - bpo-30728(42): Review and change idlelib.configdialog names.
     Lowercase method and attribute names.  Replace ‘colour’ with
     ‘color’, expand overly cryptic names, delete unneeded underscores.
     Replace ‘import *’ with specific imports.  Patches by Cheryl
     Sabella.

   - bpo-6739(43): IDLE: Verify user-entered key sequences by trying to
     bind them with tk.  Add tests for all 3 validation functions.
     Original patch by G Polo.  Tests added by Cheryl Sabella.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31493

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31488

   (3) https://bugs.python.org/issue?@action=redirect&bpo=31477

   (4) https://bugs.python.org/issue?@action=redirect&bpo=31480

   (5) https://bugs.python.org/issue?@action=redirect&bpo=31421

   (6) https://bugs.python.org/issue?@action=redirect&bpo=31414

   (7) https://bugs.python.org/issue?@action=redirect&bpo=31051

   (8) https://bugs.python.org/issue?@action=redirect&bpo=30617

   (9) https://bugs.python.org/issue?@action=redirect&bpo=31287

   (10) https://bugs.python.org/issue?@action=redirect&bpo=27099

   (11) https://bugs.python.org/issue?@action=redirect&bpo=31206

   (12) https://bugs.python.org/issue?@action=redirect&bpo=31001

   (13) https://bugs.python.org/issue?@action=redirect&bpo=31205

   (14) https://bugs.python.org/issue?@action=redirect&bpo=31130

   (15) https://bugs.python.org/issue?@action=redirect&bpo=31002

   (16) https://bugs.python.org/issue?@action=redirect&bpo=19903

   (17) https://bugs.python.org/issue?@action=redirect&bpo=31083

   (18) https://bugs.python.org/issue?@action=redirect&bpo=31050

   (19) https://bugs.python.org/issue?@action=redirect&bpo=31004

   (20) https://bugs.python.org/issue?@action=redirect&bpo=30781

   (21) https://bugs.python.org/issue?@action=redirect&bpo=31060

   (22) https://bugs.python.org/issue?@action=redirect&bpo=30853

   (23) https://bugs.python.org/issue?@action=redirect&bpo=31003

   (24) https://bugs.python.org/issue?@action=redirect&bpo=30993

   (25) https://bugs.python.org/issue?@action=redirect&bpo=30981

   (26) https://bugs.python.org/issue?@action=redirect&bpo=28523

   (27) https://bugs.python.org/issue?@action=redirect&bpo=30917

   (28) https://bugs.python.org/issue?@action=redirect&bpo=30934

   (29) https://bugs.python.org/issue?@action=redirect&bpo=30913

   (30) https://bugs.python.org/issue?@action=redirect&bpo=30899

   (31) https://bugs.python.org/issue?@action=redirect&bpo=30881

   (32) https://bugs.python.org/issue?@action=redirect&bpo=30851

   (33) https://bugs.python.org/issue?@action=redirect&bpo=30870

   (34) https://bugs.python.org/issue?@action=redirect&bpo=8231

   (35) https://bugs.python.org/issue?@action=redirect&bpo=30779

   (36) https://bugs.python.org/issue?@action=redirect&bpo=30777

   (37) https://bugs.python.org/issue?@action=redirect&bpo=30495

   (38) https://bugs.python.org/issue?@action=redirect&bpo=30723

   (39) https://bugs.python.org/issue?@action=redirect&bpo=30674

   (40) https://bugs.python.org/issue?@action=redirect&bpo=21519

   (41) https://bugs.python.org/issue?@action=redirect&bpo=29910

   (42) https://bugs.python.org/issue?@action=redirect&bpo=30728

   (43) https://bugs.python.org/issue?@action=redirect&bpo=6739


File: python.info,  Node: Ferramentas/Demos<40>,  Prev: IDLE<53>,  Up: Python 3 6 3 release candidate 1

1.23.81.9 Ferramentas/Demos
...........................

   - bpo-30983(1): gdb integration commands (py-bt, etc.)  work on
     optimized shared builds now, too.  PEP 523(2) introduced
     _PyEval_EvalFrameDefault which inlines PyEval_EvalFrameEx on
     non-debug shared builds.  This broke the ability to use py-bt,
     py-up, and a few other Python-specific gdb integrations.  The
     problem is fixed by only looking for _PyEval_EvalFrameDefault
     frames in python-gdb.py.  Original patch by Bruno “Polaco”
     Penteado.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30983

   (2) https://peps.python.org/pep-0523/


File: python.info,  Node: Python 3 6 2 final,  Next: Python 3 6 2 release candidate 2,  Prev: Python 3 6 3 release candidate 1,  Up: Changelog

1.23.82 Python 3.6.2 final
--------------------------

'Data de lançamento: 2017-07-17'

No changes since release candidate 2


File: python.info,  Node: Python 3 6 2 release candidate 2,  Next: Python 3 6 2 release candidate 1,  Prev: Python 3 6 2 final,  Up: Changelog

1.23.83 Python 3.6.2 release candidate 2
----------------------------------------

'Data de lançamento: 2017-07-07'

* Menu:

* Segurança: Segurança<48>.


File: python.info,  Node: Segurança<48>,  Up: Python 3 6 2 release candidate 2

1.23.83.1 Segurança
...................

   - bpo-30730(1): Prevent environment variables injection in subprocess
     on Windows.  Prevent passing other environment variables and
     command arguments.

   - bpo-30694(2): Upgrade expat copy from 2.2.0 to 2.2.1 to get fixes
     of multiple security vulnerabilities including: CVE 2017-9233(3)
     (External entity infinite loop DoS), CVE 2016-9063(4) (Integer
     overflow, re-fix), CVE 2016-0718(5) (Fix regression bugs from
     2.2.0’s fix to CVE 2016-0718(6)) and CVE 2012-0876(7) (Counter hash
     flooding with SipHash).  Note: the CVE 2016-5300(8) (Use
     os-specific entropy sources like getrandom) doesn’t impact Python,
     since Python already gets entropy from the OS to set the expat
     secret using ‘XML_SetHashSalt()’.

   - bpo-30500(9): Fix urllib.parse.splithost() to correctly parse
     fragments.  For example, ‘splithost('//127.0.0.1#@evil.com/')’ now
     correctly returns the ‘127.0.0.1’ host, instead of treating
     ‘@evil.com’ as the host in an authentication (‘login@host’).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30730

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30694

   (3) https://www.cve.org/CVERecord?id=CVE-2017-9233

   (4) https://www.cve.org/CVERecord?id=CVE-2016-9063

   (5) https://www.cve.org/CVERecord?id=CVE-2016-0718

   (6) https://www.cve.org/CVERecord?id=CVE-2016-0718

   (7) https://www.cve.org/CVERecord?id=CVE-2012-0876

   (8) https://www.cve.org/CVERecord?id=CVE-2016-5300

   (9) https://bugs.python.org/issue?@action=redirect&bpo=30500


File: python.info,  Node: Python 3 6 2 release candidate 1,  Next: Python 3 6 1 final,  Prev: Python 3 6 2 release candidate 2,  Up: Changelog

1.23.84 Python 3.6.2 release candidate 1
----------------------------------------

'Data de lançamento: 2017-06-17'

* Menu:

* Segurança: Segurança<49>.
* Núcleo e embutidos: Núcleo e embutidos<150>.
* Biblioteca: Biblioteca<154>.
* IDLE: IDLE<54>.
* API C: API C<66>.
* Construção: Construção<75>.
* Documentação: Documentação<67>.
* Ferramentas/Demos: Ferramentas/Demos<41>.
* Testes: Testes<69>.
* Windows: Windows<65>.


File: python.info,  Node: Segurança<49>,  Next: Núcleo e embutidos<150>,  Up: Python 3 6 2 release candidate 1

1.23.84.1 Segurança
...................

   - bpo-29591(1): Update expat copy from 2.1.1 to 2.2.0 to get fixes of
     CVE 2016-0718(2) and CVE 2016-4472(3).  See
     ‘https://sourceforge.net/p/expat/bugs/537/’ for more information.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29591

   (2) https://www.cve.org/CVERecord?id=CVE-2016-0718

   (3) https://www.cve.org/CVERecord?id=CVE-2016-4472


File: python.info,  Node: Núcleo e embutidos<150>,  Next: Biblioteca<154>,  Prev: Segurança<49>,  Up: Python 3 6 2 release candidate 1

1.23.84.2 Núcleo e embutidos
............................

   - bpo-30682(1): Removed a too-strict assertion that failed for
     certain f-strings, such as eval(“f’\n’”) and eval(“f’\r’”).

   - bpo-30604(2): Move co_extra_freefuncs to not be per-thread to avoid
     crashes

   - bpo-29104(3): Fixed parsing backslashes in f-strings.

   - bpo-27945(4): Fixed various segfaults with dict when input
     collections are mutated during searching, inserting or comparing.
     Based on patches by Duane Griffin and Tim Mitchell.

   - bpo-25794(5): Fixed type.__setattr__() and type.__delattr__() for
     non-interned attribute names.  Based on patch by Eryk Sun.

   - bpo-30039(6): If a KeyboardInterrupt happens when the interpreter
     is in the middle of resuming a chain of nested ‘yield from’ or
     ‘await’ calls, it’s now correctly delivered to the innermost frame.

   - bpo-12414(7): sys.getsizeof() on a code object now returns the
     sizes which includes the code struct and sizes of objects which it
     references.  Patch by Donghee Na.

   - bpo-29949(8): Fix memory usage regression of set and frozenset
     object.

   - bpo-29935(9): Fixed error messages in the index() method of tuple,
     list and deque when pass indices of wrong type.

   - bpo-29859(10): Show correct error messages when any of the
     pthread_* calls in thread_pthread.h fails.

   - bpo-28876(11): ‘bool(range)’ works even if ‘len(range)’ raises
     *note OverflowError: 885.

   - bpo-29600(12): Fix wrapping coroutine return values in
     StopIteration.

   - bpo-28856(13): Fix an oversight that %b format for bytes should
     support objects follow the buffer protocol.

   - bpo-29714(14): Fix a regression that bytes format may fail when
     containing zero bytes inside.

   - bpo-29478(15): If max_line_length=None is specified while using the
     Compat32 policy, it is no longer ignored.  Patch by Mircea Cosbuc.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30682

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30604

   (3) https://bugs.python.org/issue?@action=redirect&bpo=29104

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27945

   (5) https://bugs.python.org/issue?@action=redirect&bpo=25794

   (6) https://bugs.python.org/issue?@action=redirect&bpo=30039

   (7) https://bugs.python.org/issue?@action=redirect&bpo=12414

   (8) https://bugs.python.org/issue?@action=redirect&bpo=29949

   (9) https://bugs.python.org/issue?@action=redirect&bpo=29935

   (10) https://bugs.python.org/issue?@action=redirect&bpo=29859

   (11) https://bugs.python.org/issue?@action=redirect&bpo=28876

   (12) https://bugs.python.org/issue?@action=redirect&bpo=29600

   (13) https://bugs.python.org/issue?@action=redirect&bpo=28856

   (14) https://bugs.python.org/issue?@action=redirect&bpo=29714

   (15) https://bugs.python.org/issue?@action=redirect&bpo=29478


File: python.info,  Node: Biblioteca<154>,  Next: IDLE<54>,  Prev: Núcleo e embutidos<150>,  Up: Python 3 6 2 release candidate 1

1.23.84.3 Biblioteca
....................

   - bpo-30616(1): Functional API of enum allows to create empty enums.
     Patched by Donghee Na

   - bpo-30038(2): Fix race condition between signal delivery and wakeup
     file descriptor.  Patch by Nathaniel Smith.

   - bpo-23894(3): lib2to3 now recognizes ‘rb'...'’ and ‘f'...'’
     strings.

   - bpo-23890(4): unittest.TestCase.assertRaises() now manually breaks
     a reference cycle to not keep objects alive longer than expected.

   - bpo-30149(5): inspect.signature() now supports callables with
     variable-argument parameters wrapped with partialmethod.  Patch by
     Donghee Na.

   - bpo-30645(6): Fix path calculation in imp.load_package(), fixing it
     for cases when a package is only shipped with bytecodes.  Patch by
     Alexandru Ardelean.

   - bpo-29931(7): Fixed comparison check for ipaddress.ip_interface
     objects.  Patch by Sanjay Sundaresan.

   - bpo-30605(8): re.compile() no longer raises a BytesWarning when
     compiling a bytes instance with misplaced inline modifier.  Patch
     by Roy Williams.

   - bpo-24484(9): Avoid race condition in multiprocessing cleanup
     (#2159)

   - bpo-28994(10): The traceback no longer displayed for SystemExit
     raised in a callback registered by atexit.

   - bpo-30508(11): Don’t log exceptions if Task/Future “cancel()”
     method was called.

   - bpo-28556(12): Updates to typing module: Add generic
     AsyncContextManager, add support for ContextManager on all
     versions.  Original PRs by Jelle Zijlstra and Ivan Levkivskyi

   - bpo-29870(13): Fix ssl sockets leaks when connection is aborted in
     asyncio/ssl implementation.  Patch by Michaël Sghaïer.

   - bpo-29743(14): Closing transport during handshake process leaks
     open socket.  Patch by Nikolay Kim

   - bpo-27585(15): Fix waiter cancellation in asyncio.Lock.  Patch by
     Mathieu Sornay.

   - bpo-30418(16): On Windows, subprocess.Popen.communicate() now also
     ignore EINVAL on stdin.write() if the child process is still
     running but closed the pipe.

   - bpo-29822(17): inspect.isabstract() now works during
     __init_subclass__.  Patch by Nate Soares.

   - bpo-29581(18): ABCMeta.__new__ now accepts ‘**kwargs’, allowing
     abstract base classes to use keyword parameters in
     __init_subclass__.  Patch by Nate Soares.

   - bpo-30557(19): faulthandler now correctly filters and displays
     exception codes on Windows

   - bpo-30378(20): Fix the problem that logging.handlers.SysLogHandler
     cannot handle IPv6 addresses.

   - bpo-29960(21): Preserve generator state when
     _random.Random.setstate() raises an exception.  Patch by Bryan
     Olson.

   - bpo-30414(22): multiprocessing.Queue._feed background running
     thread do not break from main loop on exception.

   - bpo-30003(23): Fix handling escape characters in HZ codec.  Based
     on patch by Ma Lin.

   - bpo-30301(24): Fix AttributeError when using SimpleQueue.empty()
     under 'spawn' and 'forkserver' start methods.

   - bpo-30329(25): imaplib and poplib now catch the Windows socket
     WSAEINVAL error (code 10022) on shutdown(SHUT_RDWR): An invalid
     operation was attempted.  This error occurs sometimes on SSL
     connections.

   - bpo-30375(26): Warnings emitted when compile a regular expression
     now always point to the line in the user code.  Previously they
     could point into inners of the re module if emitted from inside of
     groups or conditionals.

   - bpo-30048(27): Fixed ‘Task.cancel()’ can be ignored when the task
     is running coroutine and the coroutine returned without any more
     ‘await’.

   - bpo-30266(28): contextlib.AbstractContextManager now supports
     anti-registration by setting __enter__ = None or __exit__ = None,
     following the pattern introduced in bpo-25958(29).  Patch by Jelle
     Zijlstra.

   - bpo-30298(30): Weaken the condition of deprecation warnings for
     inline modifiers.  Now allowed several subsequential inline
     modifiers at the start of the pattern (e.g.  ‘'(?i)(?s)...'’).  In
     verbose mode whitespaces and comments now are allowed before and
     between inline modifiers (e.g.  ‘'(?x) (?i) (?s)...'’).

   - bpo-29990(31): Fix range checking in GB18030 decoder.  Original
     patch by Ma Lin.

   - bpo-26293(32): Change resulted because of zipfile breakage.  (See
     also: bpo-29094(33))

   - bpo-30243(34): Removed the __init__ methods of _json’s scanner and
     encoder.  Misusing them could cause memory leaks or crashes.  Now
     scanner and encoder objects are completely initialized in the
     __new__ methods.

   - bpo-30185(35): Avoid KeyboardInterrupt tracebacks in forkserver
     helper process when Ctrl-C is received.

   - bpo-28556(36): Various updates to typing module: add
     typing.NoReturn type, use WrapperDescriptorType, minor bug-fixes.
     Original PRs by Jim Fasarakis-Hilliard and Ivan Levkivskyi.

   - bpo-30205(37): Fix getsockname() for unbound AF_UNIX sockets on
     Linux.

   - bpo-30070(38): Fixed leaks and crashes in errors handling in the
     parser module.

   - bpo-30061(39): Fixed crashes in IOBase methods __next__() and
     readlines() when readline() or __next__() respectively return
     non-sizeable object.  Fixed possible other errors caused by not
     checking results of PyObject_Size(), PySequence_Size(), or
     PyMapping_Size().

   - bpo-30017(40): Allowed calling the close() method of the zip entry
     writer object multiple times.  Writing to a closed writer now
     always produces a ValueError.

   - bpo-30068(41): _io._IOBase.readlines will check if it’s closed
     first when hint is present.

   - bpo-29694(42): Fixed race condition in pathlib mkdir with flags
     parents=True.  Patch by Armin Rigo.

   - bpo-29692(43): Fixed arbitrary unchaining of RuntimeError
     exceptions in contextlib.contextmanager.  Patch by Siddharth
     Velankar.

   - bpo-29998(44): Pickling and copying ImportError now preserves name
     and path attributes.

   - bpo-29953(45): Fixed memory leaks in the replace() method of
     datetime and time objects when pass out of bound fold argument.

   - bpo-29942(46): Fix a crash in itertools.chain.from_iterable when
     encountering long runs of empty iterables.

   - bpo-27863(47): Fixed multiple crashes in ElementTree caused by race
     conditions and wrong types.

   - bpo-28699(48): Fixed a bug in pools in multiprocessing.pool that
     raising an exception at the very first of an iterable may swallow
     the exception or make the program hang.  Patch by Davin Potts and
     Xiang Zhang.

   - bpo-25803(49): Avoid incorrect errors raised by
     Path.mkdir(exist_ok=True) when the OS gives priority to errors such
     as EACCES over EEXIST.

   - bpo-29861(50): Release references to tasks, their arguments and
     their results as soon as they are finished in multiprocessing.Pool.

   - bpo-29884(51): faulthandler: Restore the old sigaltstack during
     teardown.  Patch by Christophe Zeitouny.

   - bpo-25455(52): Fixed crashes in repr of recursive buffered
     file-like objects.

   - bpo-29800(53): Fix crashes in partial.__repr__ if the keys of
     partial.keywords are not strings.  Patch by Michael Seifert.

   - bpo-29742(54): get_extra_info() raises exception if get called on
     closed ssl transport.  Patch by Nikolay Kim.

   - bpo-8256(55): Fixed possible failing or crashing input() if
     attributes “encoding” or “errors” of sys.stdin or sys.stdout are
     not set or are not strings.

   - bpo-28298(56): Fix a bug that prevented array ‘Q’, ‘L’ and ‘I’ from
     accepting big intables (objects that have __int__) as elements.
     Patch by Oren Milman.

   - bpo-28231(57): The zipfile module now accepts path-like objects for
     external paths.

   - bpo-26915(58): index() and count() methods of
     collections.abc.Sequence now check identity before checking
     equality when do comparisons.

   - bpo-29615(59): SimpleXMLRPCDispatcher no longer chains KeyError (or
     any other exception) to exception(s) raised in the dispatched
     methods.  Patch by Petr Motejlek.

   - bpo-30177(60): path.resolve(strict=False) no longer cuts the path
     after the first element not present in the filesystem.  Patch by
     Antoine Pietri.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30616

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30038

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23894

   (4) https://bugs.python.org/issue?@action=redirect&bpo=23890

   (5) https://bugs.python.org/issue?@action=redirect&bpo=30149

   (6) https://bugs.python.org/issue?@action=redirect&bpo=30645

   (7) https://bugs.python.org/issue?@action=redirect&bpo=29931

   (8) https://bugs.python.org/issue?@action=redirect&bpo=30605

   (9) https://bugs.python.org/issue?@action=redirect&bpo=24484

   (10) https://bugs.python.org/issue?@action=redirect&bpo=28994

   (11) https://bugs.python.org/issue?@action=redirect&bpo=30508

   (12) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (13) https://bugs.python.org/issue?@action=redirect&bpo=29870

   (14) https://bugs.python.org/issue?@action=redirect&bpo=29743

   (15) https://bugs.python.org/issue?@action=redirect&bpo=27585

   (16) https://bugs.python.org/issue?@action=redirect&bpo=30418

   (17) https://bugs.python.org/issue?@action=redirect&bpo=29822

   (18) https://bugs.python.org/issue?@action=redirect&bpo=29581

   (19) https://bugs.python.org/issue?@action=redirect&bpo=30557

   (20) https://bugs.python.org/issue?@action=redirect&bpo=30378

   (21) https://bugs.python.org/issue?@action=redirect&bpo=29960

   (22) https://bugs.python.org/issue?@action=redirect&bpo=30414

   (23) https://bugs.python.org/issue?@action=redirect&bpo=30003

   (24) https://bugs.python.org/issue?@action=redirect&bpo=30301

   (25) https://bugs.python.org/issue?@action=redirect&bpo=30329

   (26) https://bugs.python.org/issue?@action=redirect&bpo=30375

   (27) https://bugs.python.org/issue?@action=redirect&bpo=30048

   (28) https://bugs.python.org/issue?@action=redirect&bpo=30266

   (29) https://bugs.python.org/issue?@action=redirect&bpo=25958

   (30) https://bugs.python.org/issue?@action=redirect&bpo=30298

   (31) https://bugs.python.org/issue?@action=redirect&bpo=29990

   (32) https://bugs.python.org/issue?@action=redirect&bpo=26293

   (33) https://bugs.python.org/issue?@action=redirect&bpo=29094

   (34) https://bugs.python.org/issue?@action=redirect&bpo=30243

   (35) https://bugs.python.org/issue?@action=redirect&bpo=30185

   (36) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (37) https://bugs.python.org/issue?@action=redirect&bpo=30205

   (38) https://bugs.python.org/issue?@action=redirect&bpo=30070

   (39) https://bugs.python.org/issue?@action=redirect&bpo=30061

   (40) https://bugs.python.org/issue?@action=redirect&bpo=30017

   (41) https://bugs.python.org/issue?@action=redirect&bpo=30068

   (42) https://bugs.python.org/issue?@action=redirect&bpo=29694

   (43) https://bugs.python.org/issue?@action=redirect&bpo=29692

   (44) https://bugs.python.org/issue?@action=redirect&bpo=29998

   (45) https://bugs.python.org/issue?@action=redirect&bpo=29953

   (46) https://bugs.python.org/issue?@action=redirect&bpo=29942

   (47) https://bugs.python.org/issue?@action=redirect&bpo=27863

   (48) https://bugs.python.org/issue?@action=redirect&bpo=28699

   (49) https://bugs.python.org/issue?@action=redirect&bpo=25803

   (50) https://bugs.python.org/issue?@action=redirect&bpo=29861

   (51) https://bugs.python.org/issue?@action=redirect&bpo=29884

   (52) https://bugs.python.org/issue?@action=redirect&bpo=25455

   (53) https://bugs.python.org/issue?@action=redirect&bpo=29800

   (54) https://bugs.python.org/issue?@action=redirect&bpo=29742

   (55) https://bugs.python.org/issue?@action=redirect&bpo=8256

   (56) https://bugs.python.org/issue?@action=redirect&bpo=28298

   (57) https://bugs.python.org/issue?@action=redirect&bpo=28231

   (58) https://bugs.python.org/issue?@action=redirect&bpo=26915

   (59) https://bugs.python.org/issue?@action=redirect&bpo=29615

   (60) https://bugs.python.org/issue?@action=redirect&bpo=30177


File: python.info,  Node: IDLE<54>,  Next: API C<66>,  Prev: Biblioteca<154>,  Up: Python 3 6 2 release candidate 1

1.23.84.4 IDLE
..............

   - bpo-15786(1): Fix several problems with IDLE’s autocompletion box.
     The following should now work: clicking on selection box items;
     using the scrollbar; selecting an item by hitting Return.  Hangs on
     MacOSX should no longer happen.  Patch by Louie Lu.

   - bpo-25514(2): Add doc subsubsection about IDLE failure to start.
     Popup no-connection message directs users to this section.

   - bpo-30642(3): Fix reference leaks in IDLE tests.  Patches by Louie
     Lu and Terry Jan Reedy.

   - bpo-30495(4): Add docstrings for textview.py and use PEP8 names.
     Patches by Cheryl Sabella and Terry Jan Reedy.

   - bpo-30290(5): Help-about: use pep8 names and add tests.  Increase
     coverage to 100%.  Patches by Louie Lu, Cheryl Sabella, and Terry
     Jan Reedy.

   - bpo-30303(6): Add _utest option to textview; add new tests.
     Increase coverage to 100%.  Patches by Louie Lu and Terry Jan
     Reedy.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15786

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25514

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30642

   (4) https://bugs.python.org/issue?@action=redirect&bpo=30495

   (5) https://bugs.python.org/issue?@action=redirect&bpo=30290

   (6) https://bugs.python.org/issue?@action=redirect&bpo=30303


File: python.info,  Node: API C<66>,  Next: Construção<75>,  Prev: IDLE<54>,  Up: Python 3 6 2 release candidate 1

1.23.84.5 API C
...............

   - bpo-27867(1): Function PySlice_GetIndicesEx() no longer replaced
     with a macro if Py_LIMITED_API is not set.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27867


File: python.info,  Node: Construção<75>,  Next: Documentação<67>,  Prev: API C<66>,  Up: Python 3 6 2 release candidate 1

1.23.84.6 Construção
....................

   - bpo-29941(1): Add ‘--with-assertions’ configure flag to explicitly
     enable C ‘assert()’ checks.  Defaults to off.  ‘--with-pydebug’
     implies ‘--with-assertions’.

   - bpo-28787(2): Fix out-of-tree builds of Python when configured with
     ‘--with--dtrace’.

   - bpo-29243(3): Prevent unnecessary rebuilding of Python during ‘make
     test’, ‘make install’ and some other make targets when configured
     with ‘--enable-optimizations’.

   - bpo-23404(4): Don’t regenerate generated files based on file
     modification time anymore: the action is now explicit.  Replace
     ‘make touch’ with ‘make regen-all’.

   - bpo-29643(5): Fix ‘--enable-optimization’ didn’t work.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29941

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28787

   (3) https://bugs.python.org/issue?@action=redirect&bpo=29243

   (4) https://bugs.python.org/issue?@action=redirect&bpo=23404

   (5) https://bugs.python.org/issue?@action=redirect&bpo=29643


File: python.info,  Node: Documentação<67>,  Next: Ferramentas/Demos<41>,  Prev: Construção<75>,  Up: Python 3 6 2 release candidate 1

1.23.84.7 Documentação
......................

   - bpo-30176(1): Add missing attribute related constants in curses
     documentation.

   - bpo-30052(2): the link targets for *note bytes(): 1c2. and *note
     bytearray(): 2ea. are now their respective type definitions, rather
     than the corresponding builtin function entries.  Use *note bytes:
     1c33. and *note bytearray: 1c34. to reference the latter.  In order
     to ensure this and future cross-reference updates are applied
     automatically, the daily documentation builds now disable the
     default output caching features in Sphinx.

   - bpo-26985(3): Add missing info of code object in inspect
     documentation.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30176

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30052

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26985


File: python.info,  Node: Ferramentas/Demos<41>,  Next: Testes<69>,  Prev: Documentação<67>,  Up: Python 3 6 2 release candidate 1

1.23.84.8 Ferramentas/Demos
...........................

   - bpo-29367(1): python-gdb.py now supports also ‘method-wrapper’
     (‘wrapperobject’) objects.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29367


File: python.info,  Node: Testes<69>,  Next: Windows<65>,  Prev: Ferramentas/Demos<41>,  Up: Python 3 6 2 release candidate 1

1.23.84.9 Testes
................

   - bpo-30357(1): test_thread: setUp() now uses
     support.threading_setup() and support.threading_cleanup() to wait
     until threads complete to avoid random side effects on following
     tests.  Initial patch written by Grzegorz Grzywacz.

   - bpo-30197(2): Enhanced functions swap_attr() and swap_item() in the
     test.support module.  They now work when delete replaced attribute
     or item inside the with statement.  The old value of the attribute
     or item (or None if it doesn’t exist) now will be assigned to the
     target of the “as” clause, if there is one.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30357

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30197


File: python.info,  Node: Windows<65>,  Prev: Testes<69>,  Up: Python 3 6 2 release candidate 1

1.23.84.10 Windows
..................

   - bpo-30687(1): Locate msbuild.exe on Windows when building rather
     than vcvarsall.bat

   - bpo-30450(2): The build process on Windows no longer depends on
     Subversion, instead pulling external code from GitHub via a Python
     script.  If Python 3.6 is not found on the system (via ‘py -3.6’),
     NuGet is used to download a copy of 32-bit Python.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30687

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30450


File: python.info,  Node: Python 3 6 1 final,  Next: Python 3 6 1 release candidate 1,  Prev: Python 3 6 2 release candidate 1,  Up: Changelog

1.23.85 Python 3.6.1 final
--------------------------

'Data de lançamento: 2017-03-21'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<151>.
* Construção: Construção<76>.


File: python.info,  Node: Núcleo e embutidos<151>,  Next: Construção<76>,  Up: Python 3 6 1 final

1.23.85.1 Núcleo e embutidos
............................

   - bpo-29723(1): The ‘sys.path[0]’ initialization change for
     bpo-29139(2) caused a regression by revealing an inconsistency in
     how sys.path is initialized when executing ‘__main__’ from a
     zipfile, directory, or other import location.  The interpreter now
     consistently avoids ever adding the import location’s parent
     directory to ‘sys.path’, and ensures no other ‘sys.path’ entries
     are inadvertently modified when inserting the import location named
     on the command line.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29723

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29139


File: python.info,  Node: Construção<76>,  Prev: Núcleo e embutidos<151>,  Up: Python 3 6 1 final

1.23.85.2 Construção
....................

   - bpo-27593(1): fix format of git information used in sys.version

   - Corrigir comentário incompatível em python.h

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27593


File: python.info,  Node: Python 3 6 1 release candidate 1,  Next: Python 3 6 0 final,  Prev: Python 3 6 1 final,  Up: Changelog

1.23.86 Python 3.6.1 release candidate 1
----------------------------------------

'Data de lançamento: 2017-03-04'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<152>.
* Biblioteca: Biblioteca<155>.
* IDLE: IDLE<55>.
* Windows: Windows<66>.
* API C: API C<67>.
* Documentação: Documentação<68>.
* Testes: Testes<70>.
* Construção: Construção<77>.


File: python.info,  Node: Núcleo e embutidos<152>,  Next: Biblioteca<155>,  Up: Python 3 6 1 release candidate 1

1.23.86.1 Núcleo e embutidos
............................

   - bpo-28893(1): Set correct __cause__ for errors about invalid
     awaitables returned from __aiter__ and __anext__.

   - bpo-29683(2): Fixes to memory allocation in _PyCode_SetExtra.
     Patch by Brian Coleman.

   - bpo-29684(3): Fix minor regression of
     PyEval_CallObjectWithKeywords.  It should raise TypeError when
     kwargs is not a dict.  But it might cause segv when args=NULL and
     kwargs is not a dict.

   - bpo-28598(4): Support __rmod__ for subclasses of str being called
     before str.__mod__.  Patch by Martijn Pieters.

   - bpo-29607(5): Fix stack_effect computation for CALL_FUNCTION_EX.
     Patch by Matthieu Dartiailh.

   - bpo-29602(6): Fix incorrect handling of signed zeros in complex
     constructor for complex subclasses and for inputs having a
     __complex__ method.  Patch by Serhiy Storchaka.

   - bpo-29347(7): Fixed possibly dereferencing undefined pointers when
     creating weakref objects.

   - bpo-29438(8): Fixed use-after-free problem in key sharing dict.

   - bpo-29319(9): Prevent RunMainFromImporter overwriting sys.path[0].

   - bpo-29337(10): Fixed possible BytesWarning when compare the code
     objects.  Warnings could be emitted at compile time.

   - bpo-29327(11): Fixed a crash when pass the iterable keyword
     argument to sorted().

   - bpo-29034(12): Fix memory leak and use-after-free in os module
     (path_converter).

   - bpo-29159(13): Fix regression in bytes(x) when x.__index__() raises
     Exception.

   - bpo-28932(14): Do not include <sys/random.h> if it does not exist.

   - bpo-25677(15): Correct the positioning of the syntax error caret
     for indented blocks.  Based on patch by Michael Layzell.

   - bpo-29000(16): Fixed bytes formatting of octals with zero padding
     in alternate form.

   - bpo-26919(17): On Android, operating system data is now always
     encoded/decoded to/from UTF-8, instead of the locale encoding to
     avoid inconsistencies with os.fsencode() and os.fsdecode() which
     are already using UTF-8.

   - bpo-28991(18): functools.lru_cache() was susceptible to an obscure
     reentrancy bug triggerable by a monkey-patched len() function.

   - bpo-28739(19): f-string expressions are no longer accepted as
     docstrings and by ast.literal_eval() even if they do not include
     expressions.

   - bpo-28512(20): Fixed setting the offset attribute of SyntaxError by
     PyErr_SyntaxLocationEx() and PyErr_SyntaxLocationObject().

   - bpo-28918(21): Fix the cross compilation of xxlimited when Python
     has been built with Py_DEBUG defined.

   - bpo-28731(22): Optimize _PyDict_NewPresized() to create correct
     size dict.  Improve speed of dict literal with constant keys up to
     30%.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28893

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29683

   (3) https://bugs.python.org/issue?@action=redirect&bpo=29684

   (4) https://bugs.python.org/issue?@action=redirect&bpo=28598

   (5) https://bugs.python.org/issue?@action=redirect&bpo=29607

   (6) https://bugs.python.org/issue?@action=redirect&bpo=29602

   (7) https://bugs.python.org/issue?@action=redirect&bpo=29347

   (8) https://bugs.python.org/issue?@action=redirect&bpo=29438

   (9) https://bugs.python.org/issue?@action=redirect&bpo=29319

   (10) https://bugs.python.org/issue?@action=redirect&bpo=29337

   (11) https://bugs.python.org/issue?@action=redirect&bpo=29327

   (12) https://bugs.python.org/issue?@action=redirect&bpo=29034

   (13) https://bugs.python.org/issue?@action=redirect&bpo=29159

   (14) https://bugs.python.org/issue?@action=redirect&bpo=28932

   (15) https://bugs.python.org/issue?@action=redirect&bpo=25677

   (16) https://bugs.python.org/issue?@action=redirect&bpo=29000

   (17) https://bugs.python.org/issue?@action=redirect&bpo=26919

   (18) https://bugs.python.org/issue?@action=redirect&bpo=28991

   (19) https://bugs.python.org/issue?@action=redirect&bpo=28739

   (20) https://bugs.python.org/issue?@action=redirect&bpo=28512

   (21) https://bugs.python.org/issue?@action=redirect&bpo=28918

   (22) https://bugs.python.org/issue?@action=redirect&bpo=28731


File: python.info,  Node: Biblioteca<155>,  Next: IDLE<55>,  Prev: Núcleo e embutidos<152>,  Up: Python 3 6 1 release candidate 1

1.23.86.2 Biblioteca
....................

   - bpo-29169(1): Update zlib to 1.2.11.

   - bpo-29623(2): Allow use of path-like object as a single argument in
     ConfigParser.read().  Patch by David Ellis.

   - bpo-28963(3): Fix out of bound iteration in
     asyncio.Future.remove_done_callback implemented in C.

   - bpo-29704(4): asyncio.subprocess.SubprocessStreamProtocol no longer
     closes before all pipes are closed.

   - bpo-29271(5): Fix Task.current_task and Task.all_tasks implemented
     in C to accept None argument as their pure Python implementation.

   - bpo-29703(6): Fix asyncio to support instantiation of new event
     loops in child processes.

   - bpo-29376(7): Fix assertion error in
     threading._DummyThread.is_alive().

   - bpo-28624(8): Add a test that checks that cwd parameter of Popen()
     accepts PathLike objects.  Patch by Sayan Chowdhury.

   - bpo-28518(9): Start a transaction implicitly before a DML
     statement.  Patch by Aviv Palivoda.

   - bpo-29532(10): Altering a kwarg dictionary passed to
     functools.partial() no longer affects a partial object after
     creation.

   - bpo-29110(11): Fix file object leak in aifc.open() when file is
     given as a filesystem path and is not in valid AIFF format.  Patch
     by Anthony Zhang.

   - bpo-28556(12): Various updates to typing module: typing.Counter,
     typing.ChainMap, improved ABC caching, etc.  Original PRs by Jelle
     Zijlstra, Ivan Levkivskyi, Manuel Krebber, and Łukasz Langa.

   - bpo-29100(13): Fix datetime.fromtimestamp() regression introduced
     in Python 3.6.0: check minimum and maximum years.

   - bpo-29519(14): Fix weakref spewing exceptions during interpreter
     shutdown when used with a rare combination of multiprocessing and
     custom codecs.

   - bpo-29416(15): Prevent infinite loop in pathlib.Path.mkdir

   - bpo-29444(16): Fixed out-of-bounds buffer access in the group()
     method of the match object.  Based on patch by WGH.

   - bpo-29335(17): Fix subprocess.Popen.wait() when the child process
     has exited to a stopped instead of terminated state (ex: when under
     ptrace).

   - bpo-29290(18): Fix a regression in argparse that help messages
     would wrap at non-breaking spaces.

   - bpo-28735(19): Fixed the comparison of mock.MagickMock with
     mock.ANY.

   - bpo-29316(20): Restore the provisional status of typing module, add
     corresponding note to documentation.  Patch by Ivan L.

   - bpo-29219(21): Fixed infinite recursion in the repr of
     uninitialized ctypes.CDLL instances.

   - bpo-29011(22): Fix an important omission by adding Deque to the
     typing module.

   - bpo-28969(23): Fixed race condition in C implementation of
     functools.lru_cache.  KeyError could be raised when cached function
     with full cache was simultaneously called from different threads
     with the same uncached arguments.

   - bpo-29142(24): In urllib.request, suffixes in no_proxy environment
     variable with leading dots could match related hostnames again
     (e.g.  .b.c matches a.b.c).  Patch by Milan Oberkirch.

   - bpo-28961(25): Fix unittest.mock._Call helper: don’t ignore the
     name parameter anymore.  Patch written by Jiajun Huang.

   - bpo-29203(26): functools.lru_cache() now respects PEP 468(27) and
     preserves the order of keyword arguments.  f(a=1, b=2) is now
     cached separately from f(b=2, a=1) since both calls could
     potentially give different results.

   - bpo-15812(28): inspect.getframeinfo() now correctly shows the first
     line of a context.  Patch by Sam Breese.

   - bpo-29094(29): Offsets in a ZIP file created with extern file
     object and modes “w” and “x” now are relative to the start of the
     file.

   - bpo-29085(30): Allow random.Random.seed() to use high quality OS
     randomness rather than the pid and time.

   - bpo-29061(31): Fixed bug in secrets.randbelow() which would hang
     when given a negative input.  Patch by Brendan Donegan.

   - bpo-29079(32): Prevent infinite loop in pathlib.resolve() on
     Windows

   - bpo-13051(33): Fixed recursion errors in large or resized
     curses.textpad.Textbox.  Based on patch by Tycho Andersen.

   - bpo-29119(34): Fix weakrefs in the pure python version of
     collections.OrderedDict move_to_end() method.  Contributed by Andra
     Bogildea.

   - bpo-9770(35): curses.ascii predicates now work correctly with
     negative integers.

   - bpo-28427(36): old keys should not remove new values from
     WeakValueDictionary when collecting from another thread.

   - bpo-28923(37): Remove editor artifacts from Tix.py.

   - bpo-29055(38): Neaten-up empty population error on random.choice()
     by suppressing the upstream exception.

   - bpo-28871(39): Fixed a crash when deallocate deep ElementTree.

   - bpo-19542(40): Fix bugs in WeakValueDictionary.setdefault() and
     WeakValueDictionary.pop() when a GC collection happens in another
     thread.

   - bpo-20191(41): Fixed a crash in resource.prlimit() when passing a
     sequence that doesn’t own its elements as limits.

   - bpo-28779(42): multiprocessing.set_forkserver_preload() would crash
     the forkserver process if a preloaded module instantiated some
     multiprocessing objects such as locks.

   - bpo-28847(43): dbm.dumb now supports reading read-only files and no
     longer writes the index file when it is not changed.

   - bpo-26937(44): The chown() method of the tarfile.TarFile class does
     not fail now when the grp module cannot be imported, as for example
     on Android platforms.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29169

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29623

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28963

   (4) https://bugs.python.org/issue?@action=redirect&bpo=29704

   (5) https://bugs.python.org/issue?@action=redirect&bpo=29271

   (6) https://bugs.python.org/issue?@action=redirect&bpo=29703

   (7) https://bugs.python.org/issue?@action=redirect&bpo=29376

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28624

   (9) https://bugs.python.org/issue?@action=redirect&bpo=28518

   (10) https://bugs.python.org/issue?@action=redirect&bpo=29532

   (11) https://bugs.python.org/issue?@action=redirect&bpo=29110

   (12) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (13) https://bugs.python.org/issue?@action=redirect&bpo=29100

   (14) https://bugs.python.org/issue?@action=redirect&bpo=29519

   (15) https://bugs.python.org/issue?@action=redirect&bpo=29416

   (16) https://bugs.python.org/issue?@action=redirect&bpo=29444

   (17) https://bugs.python.org/issue?@action=redirect&bpo=29335

   (18) https://bugs.python.org/issue?@action=redirect&bpo=29290

   (19) https://bugs.python.org/issue?@action=redirect&bpo=28735

   (20) https://bugs.python.org/issue?@action=redirect&bpo=29316

   (21) https://bugs.python.org/issue?@action=redirect&bpo=29219

   (22) https://bugs.python.org/issue?@action=redirect&bpo=29011

   (23) https://bugs.python.org/issue?@action=redirect&bpo=28969

   (24) https://bugs.python.org/issue?@action=redirect&bpo=29142

   (25) https://bugs.python.org/issue?@action=redirect&bpo=28961

   (26) https://bugs.python.org/issue?@action=redirect&bpo=29203

   (27) https://peps.python.org/pep-0468/

   (28) https://bugs.python.org/issue?@action=redirect&bpo=15812

   (29) https://bugs.python.org/issue?@action=redirect&bpo=29094

   (30) https://bugs.python.org/issue?@action=redirect&bpo=29085

   (31) https://bugs.python.org/issue?@action=redirect&bpo=29061

   (32) https://bugs.python.org/issue?@action=redirect&bpo=29079

   (33) https://bugs.python.org/issue?@action=redirect&bpo=13051

   (34) https://bugs.python.org/issue?@action=redirect&bpo=29119

   (35) https://bugs.python.org/issue?@action=redirect&bpo=9770

   (36) https://bugs.python.org/issue?@action=redirect&bpo=28427

   (37) https://bugs.python.org/issue?@action=redirect&bpo=28923

   (38) https://bugs.python.org/issue?@action=redirect&bpo=29055

   (39) https://bugs.python.org/issue?@action=redirect&bpo=28871

   (40) https://bugs.python.org/issue?@action=redirect&bpo=19542

   (41) https://bugs.python.org/issue?@action=redirect&bpo=20191

   (42) https://bugs.python.org/issue?@action=redirect&bpo=28779

   (43) https://bugs.python.org/issue?@action=redirect&bpo=28847

   (44) https://bugs.python.org/issue?@action=redirect&bpo=26937


File: python.info,  Node: IDLE<55>,  Next: Windows<66>,  Prev: Biblioteca<155>,  Up: Python 3 6 1 release candidate 1

1.23.86.3 IDLE
..............

   - bpo-29071(1): IDLE colors f-string prefixes (but not invalid ur
     prefixes).

   - bpo-28572(2): Add 10% to coverage of IDLE’s test_configdialog.
     Update and augment description of the configuration system.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29071

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28572


File: python.info,  Node: Windows<66>,  Next: API C<67>,  Prev: IDLE<55>,  Up: Python 3 6 1 release candidate 1

1.23.86.4 Windows
.................

   - bpo-29579(1): Removes readme.txt from the installer

   - bpo-29326(2): Ignores blank lines in ._pth files (Patch by Alexey
     Izbyshev)

   - bpo-28164(3): Correctly handle special console filenames (patch by
     Eryk Sun)

   - bpo-29409(4): Implement PEP 529(5) for io.FileIO (Patch by Eryk
     Sun)

   - bpo-29392(6): Prevent crash when passing invalid arguments into
     msvcrt module.

   - bpo-25778(7): winreg does not truncate string correctly (Patch by
     Eryk Sun)

   - bpo-28896(8): Deprecate WindowsRegistryFinder and disable it by
     default.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29579

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29326

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28164

   (4) https://bugs.python.org/issue?@action=redirect&bpo=29409

   (5) https://peps.python.org/pep-0529/

   (6) https://bugs.python.org/issue?@action=redirect&bpo=29392

   (7) https://bugs.python.org/issue?@action=redirect&bpo=25778

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28896


File: python.info,  Node: API C<67>,  Next: Documentação<68>,  Prev: Windows<66>,  Up: Python 3 6 1 release candidate 1

1.23.86.5 API C
...............

   - bpo-27867(1): Function PySlice_GetIndicesEx() is replaced with a
     macro if Py_LIMITED_API is not set or set to the value between
     0x03050400 and 0x03060000 (not including) or 0x03060100 or higher.

   - bpo-29083(2): Fixed the declaration of some public API functions.
     PyArg_VaParse() and PyArg_VaParseTupleAndKeywords() were not
     available in limited API. PyArg_ValidateKeywordArguments(),
     PyArg_UnpackTuple() and Py_BuildValue() were not available in
     limited API of version < 3.3 when PY_SSIZE_T_CLEAN is defined.

   - bpo-29058(3): All stable API extensions added after Python 3.2 are
     now available only when Py_LIMITED_API is set to the PY_VERSION_HEX
     value of the minimum Python version supporting this API.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27867

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29083

   (3) https://bugs.python.org/issue?@action=redirect&bpo=29058


File: python.info,  Node: Documentação<68>,  Next: Testes<70>,  Prev: API C<67>,  Up: Python 3 6 1 release candidate 1

1.23.86.6 Documentação
......................

   - bpo-28929(1): Link the documentation to its source file on GitHub.

   - bpo-25008(2): Document smtpd.py as effectively deprecated and add a
     pointer to aiosmtpd, a third-party asyncio-based replacement.

   - bpo-26355(3): Add canonical header link on each page to
     corresponding major version of the documentation.  Patch by
     Matthias Bussonnier.

   - bpo-29349(4): Fix Python 2 syntax in code for building the
     documentation.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28929

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25008

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26355

   (4) https://bugs.python.org/issue?@action=redirect&bpo=29349


File: python.info,  Node: Testes<70>,  Next: Construção<77>,  Prev: Documentação<68>,  Up: Python 3 6 1 release candidate 1

1.23.86.7 Testes
................

   - bpo-28087(1): Skip test_asyncore and test_eintr poll failures on
     macOS. Skip some tests of select.poll when running on macOS due to
     unresolved issues with the underlying system poll function on some
     macOS versions.

   - bpo-29571(2): to match the behaviour of the ‘re.LOCALE’ flag,
     test_re.test_locale_flag now uses
     ‘locale.getpreferredencoding(False)’ to determine the candidate
     encoding for the test regex (allowing it to correctly skip the test
     when the default locale encoding is a multi-byte encoding)

   - bpo-28950(3): Disallow -j0 to be combined with -T/-l in regrtest
     command line arguments.

   - bpo-28683(4): Fix the tests that bind() a unix socket and raise
     PermissionError on Android for a non-root user.

   - bpo-26939(5): Add the support.setswitchinterval() function to fix
     test_functools hanging on the Android armv7 qemu emulator.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28087

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29571

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28950

   (4) https://bugs.python.org/issue?@action=redirect&bpo=28683

   (5) https://bugs.python.org/issue?@action=redirect&bpo=26939


File: python.info,  Node: Construção<77>,  Prev: Testes<70>,  Up: Python 3 6 1 release candidate 1

1.23.86.8 Construção
....................

   - bpo-27593(1): sys.version and the platform module python_build(),
     python_branch(), and python_revision() functions now use git
     information rather than hg when building from a repo.

   - bpo-29572(2): Update Windows build and OS X installers to use
     OpenSSL 1.0.2k.

   - bpo-26851(3): Set Android compilation and link flags.

   - bpo-28768(4): Fix implicit declaration of function _setmode.  Patch
     by Masayuki Yamamoto

   - bpo-29080(5): Removes hard dependency on hg.exe from
     PCBuild/build.bat

   - bpo-23903(6): Added missed names to PC/python3.def.

   - bpo-28762(7): lockf() is available on Android API level 24, but the
     F_LOCK macro is not defined in android-ndk-r13.

   - bpo-28538(8): Fix the compilation error that occurs because
     if_nameindex() is available on Android API level 24, but the
     if_nameindex structure is not defined.

   - bpo-20211(9): Do not add the directory for installing C header
     files and the directory for installing object code libraries to the
     cross compilation search paths.  Original patch by Thomas
     Petazzoni.

   - bpo-28849(10): Do not define sys.implementation._multiarch on
     Android.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27593

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29572

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26851

   (4) https://bugs.python.org/issue?@action=redirect&bpo=28768

   (5) https://bugs.python.org/issue?@action=redirect&bpo=29080

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23903

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28762

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28538

   (9) https://bugs.python.org/issue?@action=redirect&bpo=20211

   (10) https://bugs.python.org/issue?@action=redirect&bpo=28849


File: python.info,  Node: Python 3 6 0 final,  Next: Python 3 6 0 release candidate 2,  Prev: Python 3 6 1 release candidate 1,  Up: Changelog

1.23.87 Python 3.6.0 final
--------------------------

'Data de lançamento: 2016-12-23'

No changes since release candidate 2


File: python.info,  Node: Python 3 6 0 release candidate 2,  Next: Python 3 6 0 release candidate 1,  Prev: Python 3 6 0 final,  Up: Changelog

1.23.88 Python 3.6.0 release candidate 2
----------------------------------------

'Data de lançamento: 2016-12-16'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<153>.
* Ferramentas/Demos: Ferramentas/Demos<42>.
* Windows: Windows<67>.
* Construção: Construção<78>.


File: python.info,  Node: Núcleo e embutidos<153>,  Next: Ferramentas/Demos<42>,  Up: Python 3 6 0 release candidate 2

1.23.88.1 Núcleo e embutidos
............................

   - bpo-28147(1): Fix a memory leak in split-table dictionaries:
     setattr() must not convert combined table into split table.  Patch
     written by INADA Naoki.

   - bpo-28990(2): Fix asyncio SSL hanging if connection is closed
     before handshake is completed.  (Patch by HoHo-Ho)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28147

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28990


File: python.info,  Node: Ferramentas/Demos<42>,  Next: Windows<67>,  Prev: Núcleo e embutidos<153>,  Up: Python 3 6 0 release candidate 2

1.23.88.2 Ferramentas/Demos
...........................

   - bpo-28770(1): Fix python-gdb.py for fastcalls.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28770


File: python.info,  Node: Windows<67>,  Next: Construção<78>,  Prev: Ferramentas/Demos<42>,  Up: Python 3 6 0 release candidate 2

1.23.88.3 Windows
.................

   - bpo-28896(1): Deprecate WindowsRegistryFinder.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28896


File: python.info,  Node: Construção<78>,  Prev: Windows<67>,  Up: Python 3 6 0 release candidate 2

1.23.88.4 Construção
....................

   - bpo-28898(1): Prevent gdb build errors due to HAVE_LONG_LONG
     redefinition.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28898


File: python.info,  Node: Python 3 6 0 release candidate 1,  Next: Python 3 6 0 beta 4,  Prev: Python 3 6 0 release candidate 2,  Up: Changelog

1.23.89 Python 3.6.0 release candidate 1
----------------------------------------

'Data de lançamento: 2016-12-06'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<154>.
* Biblioteca: Biblioteca<156>.
* API C: API C<68>.
* Documentação: Documentação<69>.
* Ferramentas/Demos: Ferramentas/Demos<43>.


File: python.info,  Node: Núcleo e embutidos<154>,  Next: Biblioteca<156>,  Up: Python 3 6 0 release candidate 1

1.23.89.1 Núcleo e embutidos
............................

   - bpo-23722(1): Rather than silently producing a class that doesn’t
     support zero-argument ‘super()’ in methods, failing to pass the new
     ‘__classcell__’ namespace entry up to ‘type.__new__’ now results in
     a ‘DeprecationWarning’ and a class that supports zero-argument
     ‘super()’.

   - bpo-28797(2): Modifying the class __dict__ inside the __set_name__
     method of a descriptor that is used inside that class no longer
     prevents calling the __set_name__ method of other descriptors.

   - bpo-28782(3): Fix a bug in the implementation ‘yield from’ when
     checking if the next instruction is YIELD_FROM. Regression
     introduced by WORDCODE (bpo-26647(4)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23722

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28797

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28782

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26647


File: python.info,  Node: Biblioteca<156>,  Next: API C<68>,  Prev: Núcleo e embutidos<154>,  Up: Python 3 6 0 release candidate 1

1.23.89.2 Biblioteca
....................

   - bpo-27030(1): Unknown escapes in re.sub() replacement template are
     allowed again.  But they still are deprecated and will be disabled
     in 3.7.

   - bpo-28835(2): Fix a regression introduced in
     warnings.catch_warnings(): call warnings.showwarning() if it was
     overridden inside the context manager.

   - bpo-27172(3): To assist with upgrades from 2.7, the previously
     documented deprecation of ‘inspect.getfullargspec()’ has been
     reversed.  This decision may be revisited again after the Python
     2.7 branch is no longer officially supported.

   - bpo-26273(4): Add new ‘socket.TCP_CONGESTION’ (Linux 2.6.13) and
     ‘socket.TCP_USER_TIMEOUT’ (Linux 2.6.37) constants.  Patch written
     by Omar Sandoval.

   - bpo-24142(5): Reading a corrupt config file left configparser in an
     invalid state.  Original patch by Florian Höch.

   - bpo-28843(6): Fix asyncio C Task to handle exceptions
     __traceback__.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27030

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28835

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27172

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26273

   (5) https://bugs.python.org/issue?@action=redirect&bpo=24142

   (6) https://bugs.python.org/issue?@action=redirect&bpo=28843


File: python.info,  Node: API C<68>,  Next: Documentação<69>,  Prev: Biblioteca<156>,  Up: Python 3 6 0 release candidate 1

1.23.89.3 API C
...............

   - bpo-28808(1): PyUnicode_CompareWithASCIIString() now never raises
     exceptions.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28808


File: python.info,  Node: Documentação<69>,  Next: Ferramentas/Demos<43>,  Prev: API C<68>,  Up: Python 3 6 0 release candidate 1

1.23.89.4 Documentação
......................

   - bpo-23722(1): The data model reference and the porting section in
     the What’s New guide now cover the additional ‘__classcell__’
     handling needed for custom metaclasses to fully support PEP 487(2)
     and zero-argument ‘super()’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23722

   (2) https://peps.python.org/pep-0487/


File: python.info,  Node: Ferramentas/Demos<43>,  Prev: Documentação<69>,  Up: Python 3 6 0 release candidate 1

1.23.89.5 Ferramentas/Demos
...........................

   - bpo-28023(1): Fix python-gdb.py didn’t support new dict
     implementation.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28023


File: python.info,  Node: Python 3 6 0 beta 4,  Next: Python 3 6 0 beta 3,  Prev: Python 3 6 0 release candidate 1,  Up: Changelog

1.23.90 Python 3.6.0 beta 4
---------------------------

'Data de lançamento: 2016-11-21'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<155>.
* Biblioteca: Biblioteca<157>.
* Documentação: Documentação<70>.
* Testes: Testes<71>.
* Construção: Construção<79>.


File: python.info,  Node: Núcleo e embutidos<155>,  Next: Biblioteca<157>,  Up: Python 3 6 0 beta 4

1.23.90.1 Núcleo e embutidos
............................

   - bpo-28532(1): Show sys.version when -V option is supplied twice.

   - bpo-27100(2): The with-statement now checks for __enter__ before it
     checks for __exit__.  This gives less confusing error messages when
     both methods are missing.  Patch by Jonathan Ellington.

   - bpo-28746(3): Fix the set_inheritable() file descriptor method on
     platforms that do not have the ioctl FIOCLEX and FIONCLEX commands.

   - bpo-26920(4): Fix not getting the locale’s charset upon
     initializing the interpreter, on platforms that do not have
     langinfo.

   - bpo-28648(5): Fixed crash in Py_DecodeLocale() in debug build on
     Mac OS X when decode astral characters.  Patch by Xiang Zhang.

   - bpo-19398(6): Extra slash no longer added to sys.path components in
     case of empty compile-time PYTHONPATH components.

   - bpo-28665(7): Improve speed of the STORE_DEREF opcode by 40%.

   - bpo-28583(8): PyDict_SetDefault didn’t combine split table when
     needed.  Patch by Xiang Zhang.

   - bpo-27243(9): Change PendingDeprecationWarning ->
     DeprecationWarning.  As it was agreed in the issue, __aiter__
     returning an awaitable should result in PendingDeprecationWarning
     in 3.5 and in DeprecationWarning in 3.6.

   - bpo-26182(10): Fix a refleak in code that raises
     DeprecationWarning.

   - bpo-28721(11): Fix asynchronous generators aclose() and athrow() to
     handle StopAsyncIteration propagation properly.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28532

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27100

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28746

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26920

   (5) https://bugs.python.org/issue?@action=redirect&bpo=28648

   (6) https://bugs.python.org/issue?@action=redirect&bpo=19398

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28665

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28583

   (9) https://bugs.python.org/issue?@action=redirect&bpo=27243

   (10) https://bugs.python.org/issue?@action=redirect&bpo=26182

   (11) https://bugs.python.org/issue?@action=redirect&bpo=28721


File: python.info,  Node: Biblioteca<157>,  Next: Documentação<70>,  Prev: Núcleo e embutidos<155>,  Up: Python 3 6 0 beta 4

1.23.90.2 Biblioteca
....................

   - bpo-28752(1): Restored the __reduce__() methods of datetime
     objects.

   - bpo-28727(2): Regular expression patterns, _sre.SRE_Pattern objects
     created by re.compile(), become comparable (only x==y and x!=y
     operators).  This change should fix the bpo-18383(3): don’t
     duplicate warning filters when the warnings module is reloaded
     (thing usually only done in unit tests).

   - bpo-20572(4): The subprocess.Popen.wait method’s undocumented
     endtime parameter now raises a DeprecationWarning.

   - bpo-25659(5): In ctypes, prevent a crash calling the from_buffer()
     and from_buffer_copy() methods on abstract classes like Array.

   - bpo-19717(6): Makes Path.resolve() succeed on paths that do not
     exist.  Patch by Vajrasky Kok

   - bpo-28563(7): Fixed possible DoS and arbitrary code execution when
     handle plural form selections in the gettext module.  The
     expression parser now supports exact syntax supported by GNU
     gettext.

   - bpo-28387(8): Fixed possible crash in _io.TextIOWrapper deallocator
     when the garbage collector is invoked in other thread.  Based on
     patch by Sebastian Cufre.

   - bpo-28600(9): Optimize loop.call_soon.

   - bpo-28613(10): Fix get_event_loop() return the current loop if
     called from coroutines/callbacks.

   - bpo-28634(11): Fix asyncio.isfuture() to support unittest.Mock.

   - bpo-26081(12): Fix refleak in _asyncio.Future.__iter__().throw.

   - bpo-28639(13): Fix inspect.isawaitable to always return bool Patch
     by Justin Mayfield.

   - bpo-28652(14): Make loop methods reject socket kinds they do not
     support.

   - bpo-28653(15): Fix a refleak in functools.lru_cache.

   - bpo-28703(16): Fix asyncio.iscoroutinefunction to handle Mock
     objects.

   - bpo-28704(17): Fix create_unix_server to support Path-like objects
     (PEP 519).

   - bpo-28720(18): Add collections.abc.AsyncGenerator.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28752

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28727

   (3) https://bugs.python.org/issue?@action=redirect&bpo=18383

   (4) https://bugs.python.org/issue?@action=redirect&bpo=20572

   (5) https://bugs.python.org/issue?@action=redirect&bpo=25659

   (6) https://bugs.python.org/issue?@action=redirect&bpo=19717

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28563

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28387

   (9) https://bugs.python.org/issue?@action=redirect&bpo=28600

   (10) https://bugs.python.org/issue?@action=redirect&bpo=28613

   (11) https://bugs.python.org/issue?@action=redirect&bpo=28634

   (12) https://bugs.python.org/issue?@action=redirect&bpo=26081

   (13) https://bugs.python.org/issue?@action=redirect&bpo=28639

   (14) https://bugs.python.org/issue?@action=redirect&bpo=28652

   (15) https://bugs.python.org/issue?@action=redirect&bpo=28653

   (16) https://bugs.python.org/issue?@action=redirect&bpo=28703

   (17) https://bugs.python.org/issue?@action=redirect&bpo=28704

   (18) https://bugs.python.org/issue?@action=redirect&bpo=28720


File: python.info,  Node: Documentação<70>,  Next: Testes<71>,  Prev: Biblioteca<157>,  Up: Python 3 6 0 beta 4

1.23.90.3 Documentação
......................

   - bpo-28513(1): Documented command-line interface of zipfile.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28513


File: python.info,  Node: Testes<71>,  Next: Construção<79>,  Prev: Documentação<70>,  Up: Python 3 6 0 beta 4

1.23.90.4 Testes
................

   - bpo-28666(1): Now test.support.rmtree is able to remove unwritable
     or unreadable directories.

   - bpo-23839(2): Various caches now are cleared before running every
     test file.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28666

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23839


File: python.info,  Node: Construção<79>,  Prev: Testes<71>,  Up: Python 3 6 0 beta 4

1.23.90.5 Construção
....................

   - bpo-10656(1): Fix out-of-tree building on AIX. Patch by Tristan
     Carel and Michael Haubenwallner.

   - bpo-26359(2): Rename –with-optimiations to –enable-optimizations.

   - bpo-28676(3): Prevent missing ‘getentropy’ declaration warning on
     macOS. Patch by Gareth Rees.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=10656

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26359

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28676


File: python.info,  Node: Python 3 6 0 beta 3,  Next: Python 3 6 0 beta 2,  Prev: Python 3 6 0 beta 4,  Up: Changelog

1.23.91 Python 3.6.0 beta 3
---------------------------

'Data de lançamento: 2016-10-31'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<156>.
* Biblioteca: Biblioteca<158>.
* Windows: Windows<68>.
* Construção: Construção<80>.
* Testes: Testes<72>.


File: python.info,  Node: Núcleo e embutidos<156>,  Next: Biblioteca<158>,  Up: Python 3 6 0 beta 3

1.23.91.1 Núcleo e embutidos
............................

   - bpo-28128(1): Deprecation warning for invalid str and byte escape
     sequences now prints better information about where the error
     occurs.  Patch by Serhiy Storchaka and Eric Smith.

   - bpo-28509(2): dict.update() no longer allocate unnecessary large
     memory.

   - bpo-28426(3): Fixed potential crash in PyUnicode_AsDecodedObject()
     in debug build.

   - bpo-28517(4): Fixed of-by-one error in the peephole optimizer that
     caused keeping unreachable code.

   - bpo-28214(5): Improved exception reporting for problematic
     __set_name__ attributes.

   - bpo-23782(6): Fixed possible memory leak in _PyTraceback_Add() and
     exception loss in PyTraceBack_Here().

   - bpo-28471(7): Fix “Python memory allocator called without holding
     the GIL” crash in socket.setblocking.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28128

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28509

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28426

   (4) https://bugs.python.org/issue?@action=redirect&bpo=28517

   (5) https://bugs.python.org/issue?@action=redirect&bpo=28214

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23782

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28471


File: python.info,  Node: Biblioteca<158>,  Next: Windows<68>,  Prev: Núcleo e embutidos<156>,  Up: Python 3 6 0 beta 3

1.23.91.2 Biblioteca
....................

   - bpo-27517(1): LZMA compressor and decompressor no longer raise
     exceptions if given empty data twice.  Patch by Benjamin Fogle.

   - bpo-28549(2): Fixed segfault in curses’s addch() with ncurses6.

   - bpo-28449(3): tarfile.open() with mode “r” or “r:” now tries to
     open a tar file with compression before trying to open it without
     compression.  Otherwise it had 50% chance failed with
     ignore_zeros=True.

   - bpo-23262(4): The webbrowser module now supports Firefox 36+ and
     derived browsers.  Based on patch by Oleg Broytman.

   - bpo-27939(5): Fixed bugs in tkinter.ttk.LabeledScale and
     tkinter.Scale caused by representing the scale as float value
     internally in Tk.  tkinter.IntVar now works if float value is set
     to underlying Tk variable.

   - bpo-18844(6): The various ways of specifying weights for
     random.choices() now produce the same result sequences.

   - bpo-28255(7): calendar.TextCalendar().prmonth() no longer prints a
     space at the start of new line after printing a month’s calendar.
     Patch by Xiang Zhang.

   - bpo-20491(8): The textwrap.TextWrapper class now honors
     non-breaking spaces.  Based on patch by Kaarle Ritvanen.

   - bpo-28353(9): os.fwalk() no longer fails on broken links.

   - bpo-28430(10): Fix iterator of C implemented asyncio.Future doesn’t
     accept non-None value is passed to it.send(val).

   - bpo-27025(11): Generated names for Tkinter widgets now start by the
     “!” prefix for readability.

   - bpo-25464(12): Fixed HList.header_exists() in tkinter.tix module by
     addin a workaround to Tix library bug.

   - bpo-28488(13): shutil.make_archive() no longer adds entry “./” to
     ZIP archive.

   - bpo-25953(14): re.sub() now raises an error for invalid numerical
     group reference in replacement template even if the pattern is not
     found in the string.  Error message for invalid group reference now
     includes the group index and the position of the reference.  Based
     on patch by SilentGhost.

   - bpo-18219(15): Optimize csv.DictWriter for large number of columns.
     Patch by Mariatta Wijaya.

   - bpo-28448(16): Fix C implemented asyncio.Future didn’t work on
     Windows.

   - bpo-28480(17): Fix error building socket module when multithreading
     is disabled.

   - bpo-24452(18): Make webbrowser support Chrome on Mac OS X.

   - bpo-20766(19): Fix references leaked by pdb in the handling of
     SIGINT handlers.

   - bpo-28492(20): Fix how StopIteration exception is raised in
     _asyncio.Future.

   - bpo-28500(21): Fix asyncio to handle async gens GC from another
     thread.

   - bpo-26923(22): Fix asyncio.Gather to refuse being cancelled once
     all children are done.  Patch by Johannes Ebke.

   - bpo-26796(23): Don’t configure the number of workers for default
     threadpool executor.  Initial patch by Hans Lawrenz.

   - bpo-28544(24): Implement asyncio.Task in C.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27517

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28549

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28449

   (4) https://bugs.python.org/issue?@action=redirect&bpo=23262

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27939

   (6) https://bugs.python.org/issue?@action=redirect&bpo=18844

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28255

   (8) https://bugs.python.org/issue?@action=redirect&bpo=20491

   (9) https://bugs.python.org/issue?@action=redirect&bpo=28353

   (10) https://bugs.python.org/issue?@action=redirect&bpo=28430

   (11) https://bugs.python.org/issue?@action=redirect&bpo=27025

   (12) https://bugs.python.org/issue?@action=redirect&bpo=25464

   (13) https://bugs.python.org/issue?@action=redirect&bpo=28488

   (14) https://bugs.python.org/issue?@action=redirect&bpo=25953

   (15) https://bugs.python.org/issue?@action=redirect&bpo=18219

   (16) https://bugs.python.org/issue?@action=redirect&bpo=28448

   (17) https://bugs.python.org/issue?@action=redirect&bpo=28480

   (18) https://bugs.python.org/issue?@action=redirect&bpo=24452

   (19) https://bugs.python.org/issue?@action=redirect&bpo=20766

   (20) https://bugs.python.org/issue?@action=redirect&bpo=28492

   (21) https://bugs.python.org/issue?@action=redirect&bpo=28500

   (22) https://bugs.python.org/issue?@action=redirect&bpo=26923

   (23) https://bugs.python.org/issue?@action=redirect&bpo=26796

   (24) https://bugs.python.org/issue?@action=redirect&bpo=28544


File: python.info,  Node: Windows<68>,  Next: Construção<80>,  Prev: Biblioteca<158>,  Up: Python 3 6 0 beta 3

1.23.91.3 Windows
.................

   - bpo-28522(1): Fixes mishandled buffer reallocation in getpathp.c

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28522


File: python.info,  Node: Construção<80>,  Next: Testes<72>,  Prev: Windows<68>,  Up: Python 3 6 0 beta 3

1.23.91.4 Construção
....................

   - bpo-28444(1): Fix missing extensions modules when cross compiling.

   - bpo-28208(2): Update Windows build and OS X installers to use
     SQLite 3.14.2.

   - bpo-28248(3): Update Windows build and OS X installers to use
     OpenSSL 1.0.2j.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28444

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28208

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28248


File: python.info,  Node: Testes<72>,  Prev: Construção<80>,  Up: Python 3 6 0 beta 3

1.23.91.5 Testes
................

   - bpo-26944(1): Fix test_posix for Android where ‘id -G’ is entirely
     wrong or missing the effective gid.

   - bpo-28409(2): regrtest: fix the parser of command line arguments.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26944

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28409


File: python.info,  Node: Python 3 6 0 beta 2,  Next: Python 3 6 0 beta 1,  Prev: Python 3 6 0 beta 3,  Up: Changelog

1.23.92 Python 3.6.0 beta 2
---------------------------

'Data de lançamento: 2016-10-10'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<157>.
* Biblioteca: Biblioteca<159>.
* Windows: Windows<69>.
* API C: API C<69>.
* Construção: Construção<81>.
* Testes: Testes<73>.


File: python.info,  Node: Núcleo e embutidos<157>,  Next: Biblioteca<159>,  Up: Python 3 6 0 beta 2

1.23.92.1 Núcleo e embutidos
............................

   - bpo-28183(1): Optimize and cleanup dict iteration.

   - bpo-26081(2): Added C implementation of asyncio.Future.  Original
     patch by Yury Selivanov.

   - bpo-28379(3): Added sanity checks and tests for
     PyUnicode_CopyCharacters().  Patch by Xiang Zhang.

   - bpo-28376(4): The type of long range iterator is now registered as
     Iterator.  Patch by Oren Milman.

   - bpo-28376(5): Creating instances of range_iterator by calling
     range_iterator type now is deprecated.  Patch by Oren Milman.

   - bpo-28376(6): The constructor of range_iterator now checks that
     step is not 0.  Patch by Oren Milman.

   - bpo-26906(7): Resolving special methods of uninitialized type now
     causes implicit initialization of the type instead of a fail.

   - bpo-18287(8): PyType_Ready() now checks that tp_name is not NULL.
     Original patch by Niklas Koep.

   - bpo-24098(9): Fixed possible crash when AST is changed in process
     of compiling it.

   - bpo-28201(10): Dict reduces possibility of 2nd conflict in hash
     table when hashes have same lower bits.

   - bpo-28350(11): String constants with null character no longer
     interned.

   - bpo-26617(12): Fix crash when GC runs during weakref callbacks.

   - bpo-27942(13): String constants now interned recursively in tuples
     and frozensets.

   - bpo-21578(14): Fixed misleading error message when ImportError
     called with invalid keyword args.

   - bpo-28203(15): Fix incorrect type in complex(1.0, {2:3}) error
     message.  Patch by Soumya Sharma.

   - bpo-28086(16): Single var-positional argument of tuple subtype was
     passed unscathed to the C-defined function.  Now it is converted to
     exact tuple.

   - bpo-28214(17): Now __set_name__ is looked up on the class instead
     of the instance.

   - bpo-27955(18): Fallback on reading /dev/urandom device when the
     getrandom() syscall fails with EPERM, for example when blocked by
     SECCOMP.

   - bpo-28192(19): Don’t import readline in isolated mode.

   - Upgrade internal unicode databases to Unicode version 9.0.0.

   - bpo-28131(20): Fix a regression in zipimport’s compile_source().
     zipimport should use the same optimization level as the
     interpreter.

   - bpo-28126(21): Replace Py_MEMCPY with memcpy().  Visual Studio can
     properly optimize memcpy().

   - bpo-28120(22): Fix dict.pop() for splitted dictionary when trying
     to remove a “pending key” (Not yet inserted in split-table).  Patch
     by Xiang Zhang.

   - bpo-26182(23): Raise DeprecationWarning when async and await
     keywords are used as variable/attribute/class/function name.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28183

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26081

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28379

   (4) https://bugs.python.org/issue?@action=redirect&bpo=28376

   (5) https://bugs.python.org/issue?@action=redirect&bpo=28376

   (6) https://bugs.python.org/issue?@action=redirect&bpo=28376

   (7) https://bugs.python.org/issue?@action=redirect&bpo=26906

   (8) https://bugs.python.org/issue?@action=redirect&bpo=18287

   (9) https://bugs.python.org/issue?@action=redirect&bpo=24098

   (10) https://bugs.python.org/issue?@action=redirect&bpo=28201

   (11) https://bugs.python.org/issue?@action=redirect&bpo=28350

   (12) https://bugs.python.org/issue?@action=redirect&bpo=26617

   (13) https://bugs.python.org/issue?@action=redirect&bpo=27942

   (14) https://bugs.python.org/issue?@action=redirect&bpo=21578

   (15) https://bugs.python.org/issue?@action=redirect&bpo=28203

   (16) https://bugs.python.org/issue?@action=redirect&bpo=28086

   (17) https://bugs.python.org/issue?@action=redirect&bpo=28214

   (18) https://bugs.python.org/issue?@action=redirect&bpo=27955

   (19) https://bugs.python.org/issue?@action=redirect&bpo=28192

   (20) https://bugs.python.org/issue?@action=redirect&bpo=28131

   (21) https://bugs.python.org/issue?@action=redirect&bpo=28126

   (22) https://bugs.python.org/issue?@action=redirect&bpo=28120

   (23) https://bugs.python.org/issue?@action=redirect&bpo=26182


File: python.info,  Node: Biblioteca<159>,  Next: Windows<69>,  Prev: Núcleo e embutidos<157>,  Up: Python 3 6 0 beta 2

1.23.92.2 Biblioteca
....................

   - bpo-27998(1): Fixed bytes path support in os.scandir() on Windows.
     Patch by Eryk Sun.

   - bpo-28317(2): The disassembler now decodes FORMAT_VALUE argument.

   - bpo-26293(3): Fixed writing ZIP files that starts not from the
     start of the file.  Offsets in ZIP file now are relative to the
     start of the archive in conforming to the specification.

   - bpo-28380(4): unittest.mock Mock autospec functions now properly
     support assert_called, assert_not_called, and assert_called_once.

   - bpo-27181(5): remove statistics.geometric_mean and defer until 3.7.

   - bpo-28229(6): lzma module now supports pathlib.

   - bpo-28321(7): Fixed writing non-BMP characters with binary format
     in plistlib.

   - bpo-28225(8): bz2 module now supports pathlib.  Initial patch by
     Ethan Furman.

   - bpo-28227(9): gzip now supports pathlib.  Patch by Ethan Furman.

   - bpo-27358(10): Optimized merging var-keyword arguments and improved
     error message when passing a non-mapping as a var-keyword argument.

   - bpo-28257(11): Improved error message when passing a non-iterable
     as a var-positional argument.  Added opcode
     BUILD_TUPLE_UNPACK_WITH_CALL.

   - bpo-28322(12): Fixed possible crashes when unpickle itertools
     objects from incorrect pickle data.  Based on patch by John Leitch.

   - bpo-28228(13): imghdr now supports pathlib.

   - bpo-28226(14): compileall now supports pathlib.

   - bpo-28314(15): Fix function declaration (C flags) for the
     getiterator() method of xml.etree.ElementTree.Element.

   - bpo-28148(16): Stop using localtime() and gmtime() in the time
     module.  Introduced platform independent _PyTime_localtime API that
     is similar to POSIX localtime_r, but available on all platforms.
     Patch by Ed Schouten.

   - bpo-28253(17): Fixed calendar functions for extreme months: 0001-01
     and 9999-12.  Methods itermonthdays() and itermonthdays2() are
     reimplemented so that they don’t call itermonthdates() which can
     cause datetime.date under/overflow.

   - bpo-28275(18): Fixed possible use after free in the decompress()
     methods of the LZMADecompressor and BZ2Decompressor classes.
     Original patch by John Leitch.

   - bpo-27897(19): Fixed possible crash in
     sqlite3.Connection.create_collation() if pass invalid string-like
     object as a name.  Patch by Xiang Zhang.

   - bpo-18844(20): random.choices() now has k as a keyword-only
     argument to improve the readability of common cases and come into
     line with the signature used in other languages.

   - bpo-18893(21): Fix invalid exception handling in
     Lib/ctypes/macholib/dyld.py.  Patch by Madison May.

   - bpo-27611(22): Fixed support of default root window in the
     tkinter.tix module.  Added the master parameter in the DisplayStyle
     constructor.

   - bpo-27348(23): In the traceback module, restore the formatting of
     exception messages like “Exception: None”.  This fixes a regression
     introduced in 3.5a2.

   - bpo-25651(24): Allow false values to be used for msg parameter of
     subTest().

   - bpo-27778(25): Fix a memory leak in os.getrandom() when the
     getrandom() is interrupted by a signal and a signal handler raises
     a Python exception.

   - bpo-28200(26): Fix memory leak on Windows in the os module (fix
     path_converter() function).

   - bpo-25400(27): RobotFileParser now correctly returns default values
     for crawl_delay and request_rate.  Initial patch by Peter Wirtz.

   - bpo-27932(28): Prevent memory leak in win32_ver().

   - Fix UnboundLocalError in socket._sendfile_use_sendfile.

   - bpo-28075(29): Check for ERROR_ACCESS_DENIED in Windows
     implementation of os.stat().  Patch by Eryk Sun.

   - bpo-22493(30): Warning message emitted by using inline flags in the
     middle of regular expression now contains a (truncated) regex
     pattern.  Patch by Tim Graham.

   - bpo-25270(31): Prevent codecs.escape_encode() from raising
     SystemError when an empty bytestring is passed.

   - bpo-28181(32): Get antigravity over HTTPS. Patch by Kaartic
     Sivaraam.

   - bpo-25895(33): Enable WebSocket URL schemes in
     urllib.parse.urljoin.  Patch by Gergely Imreh and Markus
     Holtermann.

   - bpo-28114(34): Fix a crash in parse_envlist() when env contains
     byte strings.  Patch by Eryk Sun.

   - bpo-27599(35): Fixed buffer overrun in binascii.b2a_qp() and
     binascii.a2b_qp().

   - bpo-27906(36): Fix socket accept exhaustion during high TCP
     traffic.  Patch by Kevin Conway.

   - bpo-28174(37): Handle when SO_REUSEPORT isn’t properly supported.
     Patch by Seth Michael Larson.

   - bpo-26654(38): Inspect functools.partial in
     asyncio.Handle.__repr__.  Patch by iceboy.

   - bpo-26909(39): Fix slow pipes IO in asyncio.  Patch by INADA Naoki.

   - bpo-28176(40): Fix callbacks race in
     asyncio.SelectorLoop.sock_connect.

   - bpo-27759(41): Fix selectors incorrectly retain invalid file
     descriptors.  Patch by Mark Williams.

   - bpo-28368(42): Refuse monitoring processes if the child watcher has
     no loop attached.  Patch by Vincent Michel.

   - bpo-28369(43): Raise RuntimeError when transport’s FD is used with
     add_reader, add_writer, etc.

   - bpo-28370(44): Speedup asyncio.StreamReader.readexactly.  Patch by
     Коренберг Марк.

   - bpo-28371(45): Deprecate passing asyncio.Handles to
     run_in_executor.

   - bpo-28372(46): Fix asyncio to support formatting of non-python
     coroutines.

   - bpo-28399(47): Remove UNIX socket from FS before binding.  Patch by
     Коренберг Марк.

   - bpo-27972(48): Prohibit Tasks to await on themselves.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27998

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28317

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26293

   (4) https://bugs.python.org/issue?@action=redirect&bpo=28380

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27181

   (6) https://bugs.python.org/issue?@action=redirect&bpo=28229

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28321

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28225

   (9) https://bugs.python.org/issue?@action=redirect&bpo=28227

   (10) https://bugs.python.org/issue?@action=redirect&bpo=27358

   (11) https://bugs.python.org/issue?@action=redirect&bpo=28257

   (12) https://bugs.python.org/issue?@action=redirect&bpo=28322

   (13) https://bugs.python.org/issue?@action=redirect&bpo=28228

   (14) https://bugs.python.org/issue?@action=redirect&bpo=28226

   (15) https://bugs.python.org/issue?@action=redirect&bpo=28314

   (16) https://bugs.python.org/issue?@action=redirect&bpo=28148

   (17) https://bugs.python.org/issue?@action=redirect&bpo=28253

   (18) https://bugs.python.org/issue?@action=redirect&bpo=28275

   (19) https://bugs.python.org/issue?@action=redirect&bpo=27897

   (20) https://bugs.python.org/issue?@action=redirect&bpo=18844

   (21) https://bugs.python.org/issue?@action=redirect&bpo=18893

   (22) https://bugs.python.org/issue?@action=redirect&bpo=27611

   (23) https://bugs.python.org/issue?@action=redirect&bpo=27348

   (24) https://bugs.python.org/issue?@action=redirect&bpo=25651

   (25) https://bugs.python.org/issue?@action=redirect&bpo=27778

   (26) https://bugs.python.org/issue?@action=redirect&bpo=28200

   (27) https://bugs.python.org/issue?@action=redirect&bpo=25400

   (28) https://bugs.python.org/issue?@action=redirect&bpo=27932

   (29) https://bugs.python.org/issue?@action=redirect&bpo=28075

   (30) https://bugs.python.org/issue?@action=redirect&bpo=22493

   (31) https://bugs.python.org/issue?@action=redirect&bpo=25270

   (32) https://bugs.python.org/issue?@action=redirect&bpo=28181

   (33) https://bugs.python.org/issue?@action=redirect&bpo=25895

   (34) https://bugs.python.org/issue?@action=redirect&bpo=28114

   (35) https://bugs.python.org/issue?@action=redirect&bpo=27599

   (36) https://bugs.python.org/issue?@action=redirect&bpo=27906

   (37) https://bugs.python.org/issue?@action=redirect&bpo=28174

   (38) https://bugs.python.org/issue?@action=redirect&bpo=26654

   (39) https://bugs.python.org/issue?@action=redirect&bpo=26909

   (40) https://bugs.python.org/issue?@action=redirect&bpo=28176

   (41) https://bugs.python.org/issue?@action=redirect&bpo=27759

   (42) https://bugs.python.org/issue?@action=redirect&bpo=28368

   (43) https://bugs.python.org/issue?@action=redirect&bpo=28369

   (44) https://bugs.python.org/issue?@action=redirect&bpo=28370

   (45) https://bugs.python.org/issue?@action=redirect&bpo=28371

   (46) https://bugs.python.org/issue?@action=redirect&bpo=28372

   (47) https://bugs.python.org/issue?@action=redirect&bpo=28399

   (48) https://bugs.python.org/issue?@action=redirect&bpo=27972


File: python.info,  Node: Windows<69>,  Next: API C<69>,  Prev: Biblioteca<159>,  Up: Python 3 6 0 beta 2

1.23.92.3 Windows
.................

   - bpo-28402(1): Adds signed catalog files for stdlib on Windows.

   - bpo-28333(2): Enables Unicode for ps1/ps2 and input() prompts.
     (Patch by Eryk Sun)

   - bpo-28251(3): Improvements to help manuals on Windows.

   - bpo-28110(4): launcher.msi has different product codes between
     32-bit and 64-bit

   - bpo-28161(5): Opening CON for write access fails

   - bpo-28162(6): WindowsConsoleIO readall() fails if first line starts
     with Ctrl+Z

   - bpo-28163(7): WindowsConsoleIO fileno() passes wrong flags to
     _open_osfhandle

   - bpo-28164(8): _PyIO_get_console_type fails for various paths

   - bpo-28137(9): Renames Windows path file to ._pth

   - bpo-28138(10): Windows ._pth file should allow import site

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28402

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28333

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28251

   (4) https://bugs.python.org/issue?@action=redirect&bpo=28110

   (5) https://bugs.python.org/issue?@action=redirect&bpo=28161

   (6) https://bugs.python.org/issue?@action=redirect&bpo=28162

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28163

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28164

   (9) https://bugs.python.org/issue?@action=redirect&bpo=28137

   (10) https://bugs.python.org/issue?@action=redirect&bpo=28138


File: python.info,  Node: API C<69>,  Next: Construção<81>,  Prev: Windows<69>,  Up: Python 3 6 0 beta 2

1.23.92.4 API C
...............

   - bpo-28426(1): Deprecated undocumented functions
     PyUnicode_AsEncodedObject(), PyUnicode_AsDecodedObject(),
     PyUnicode_AsDecodedUnicode() and PyUnicode_AsEncodedUnicode().

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28426


File: python.info,  Node: Construção<81>,  Next: Testes<73>,  Prev: API C<69>,  Up: Python 3 6 0 beta 2

1.23.92.5 Construção
....................

   - bpo-28258(1): Fixed build with Estonian locale (python-config and
     distclean targets in Makefile).  Patch by Arfrever Frehtes
     Taifersar Arahesis.

   - bpo-26661(2): setup.py now detects system libffi with multiarch
     wrapper.

   - bpo-15819(3): Remove redundant include search directory option for
     building outside the source tree.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28258

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26661

   (3) https://bugs.python.org/issue?@action=redirect&bpo=15819


File: python.info,  Node: Testes<73>,  Prev: Construção<81>,  Up: Python 3 6 0 beta 2

1.23.92.6 Testes
................

   - bpo-28217(1): Adds _testconsole module to test console input.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28217


File: python.info,  Node: Python 3 6 0 beta 1,  Next: Python 3 6 0 alpha 4,  Prev: Python 3 6 0 beta 2,  Up: Changelog

1.23.93 Python 3.6.0 beta 1
---------------------------

'Data de lançamento: 2016-09-12'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<158>.
* Biblioteca: Biblioteca<160>.
* IDLE: IDLE<56>.
* API C: API C<70>.
* Testes: Testes<74>.
* Construção: Construção<82>.
* Ferramentas/Demos: Ferramentas/Demos<44>.
* Windows: Windows<70>.


File: python.info,  Node: Núcleo e embutidos<158>,  Next: Biblioteca<160>,  Up: Python 3 6 0 beta 1

1.23.93.1 Núcleo e embutidos
............................

   - bpo-23722(1): The __class__ cell used by zero-argument super() is
     now initialized from type.__new__ rather than __build_class__, so
     class methods relying on that will now work correctly when called
     from metaclass methods during class creation.  Patch by Martin
     Teichmann.

   - bpo-25221(2): Fix corrupted result from PyLong_FromLong(0) when
     Python is compiled with NSMALLPOSINTS = 0.

   - bpo-27080(3): Implement formatting support for PEP 515(4).  Initial
     patch by Chris Angelico.

   - bpo-27199(5): In tarfile, expose copyfileobj bufsize to improve
     throughput.  Patch by Jason Fried.

   - bpo-27948(6): In f-strings, only allow backslashes inside the
     braces (where the expressions are).  This is a breaking change from
     the 3.6 alpha releases, where backslashes are allowed anywhere in
     an f-string.  Also, require that expressions inside f-strings be
     enclosed within literal braces, and not escapes like
     ‘f'\x7b"hi"\x7d'’.

   - bpo-28046(7): Remove platform-specific directories from sys.path.

   - bpo-28071(8): Add early-out for differencing from an empty set.

   - bpo-25758(9): Prevents zipimport from unnecessarily encoding a
     filename (patch by Eryk Sun)

   - bpo-25856(10): The __module__ attribute of extension classes and
     functions now is interned.  This leads to more compact pickle data
     with protocol 4.

   - bpo-27213(11): Rework CALL_FUNCTION* opcodes to produce shorter and
     more efficient bytecode.  Patch by Demur Rumed, design by Serhiy
     Storchaka, reviewed by Serhiy Storchaka and Victor Stinner.

   - bpo-26331(12): Implement tokenizing support for PEP 515(13).  Patch
     by Georg Brandl.

   - bpo-27999(14): Make “global after use” a SyntaxError, and ditto for
     nonlocal.  Patch by Ivan Levkivskyi.

   - bpo-28003(15): Implement PEP 525(16) – Asynchronous Generators.

   - bpo-27985(17): Implement PEP 526(18) – Syntax for Variable
     Annotations.  Patch by Ivan Levkivskyi.

   - bpo-26058(19): Add a new private version to the builtin dict type,
     incremented at each dictionary creation and at each dictionary
     change.  Implementation of the PEP 509.

   - bpo-27364(20): A backslash-character pair that is not a valid
     escape sequence now generates a DeprecationWarning.  Patch by
     Emanuel Barry.

   - bpo-27350(21): ‘dict’ implementation is changed like PyPy.  It is
     more compact and preserves insertion order.  (Concept developed by
     Raymond Hettinger and patch by Inada Naoki.)

   - bpo-27911(22): Remove unnecessary error checks in
     ‘exec_builtin_or_dynamic()’.

   - bpo-27078(23): Added BUILD_STRING opcode.  Optimized f-strings
     evaluation.

   - bpo-17884(24): Python now requires systems with inttypes.h and
     stdint.h

   - bpo-27961(25): Require platforms to support ‘long long’.  Python
     hasn’t compiled without ‘long long’ for years, so this is basically
     a formality.

   - bpo-27355(26): Removed support for Windows CE. It was never
     finished, and Windows CE is no longer a relevant platform for
     Python.

   - Implement PEP 523(27).

   - bpo-27870(28): A left shift of zero by a large integer no longer
     attempts to allocate large amounts of memory.

   - bpo-25402(29): In int-to-decimal-string conversion, improve the
     estimate of the intermediate memory required, and remove an
     unnecessarily strict overflow check.  Patch by Serhiy Storchaka.

   - bpo-27214(30): In long_invert, be more careful about modifying
     object returned by long_add, and remove an unnecessary check for
     small longs.  Thanks Oren Milman for analysis and patch.

   - bpo-27506(31): Support passing the bytes/bytearray.translate()
     “delete” argument by keyword.

   - bpo-27812(32): Properly clear out a generator’s frame’s
     backreference to the generator to prevent crashes in frame.clear().

   - bpo-27811(33): Fix a crash when a coroutine that has not been
     awaited is finalized with warnings-as-errors enabled.

   - bpo-27587(34): Fix another issue found by PVS-Studio: Null pointer
     check after use of ‘def’ in _PyState_AddModule().  Initial patch by
     Christian Heimes.

   - bpo-27792(35): The modulo operation applied to ‘bool’ and other
     ‘int’ subclasses now always returns an ‘int’.  Previously the
     return type depended on the input values.  Patch by Xiang Zhang.

   - bpo-26984(36): int() now always returns an instance of exact int.

   - bpo-25604(37): Fix a minor bug in integer true division; this bug
     could potentially have caused off-by-one-ulp results on platforms
     with unreliable ldexp implementations.

   - bpo-24254(38): Make class definition namespace ordered by default.

   - bpo-27662(39): Fix an overflow check in ‘List_New’: the original
     code was checking against ‘Py_SIZE_MAX’ instead of the correct
     upper bound of ‘Py_SSIZE_T_MAX’.  Patch by Xiang Zhang.

   - bpo-27782(40): Multi-phase extension module import now correctly
     allows the ‘m_methods’ field to be used to add module level
     functions to instances of non-module types returned from
     ‘Py_create_mod’.  Patch by Xiang Zhang.

   - bpo-27936(41): The round() function accepted a second None argument
     for some types but not for others.  Fixed the inconsistency by
     accepting None for all numeric types.

   - bpo-27487(42): Warn if a submodule argument to “python -m” or
     runpy.run_module() is found in sys.modules after parent packages
     are imported, but before the submodule is executed.

   - bpo-27157(43): Make only type() itself accept the one-argument
     form.  Patch by Eryk Sun and Emanuel Barry.

   - bpo-27558(44): Fix a SystemError in the implementation of “raise”
     statement.  In a brand new thread, raise a RuntimeError since there
     is no active exception to reraise.  Patch written by Xiang Zhang.

   - bpo-28008(45): Implement PEP 530(46) – asynchronous comprehensions.

   - bpo-27942(47): Fix memory leak in codeobject.c

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23722

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25221

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27080

   (4) https://peps.python.org/pep-0515/

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27199

   (6) https://bugs.python.org/issue?@action=redirect&bpo=27948

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28046

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28071

   (9) https://bugs.python.org/issue?@action=redirect&bpo=25758

   (10) https://bugs.python.org/issue?@action=redirect&bpo=25856

   (11) https://bugs.python.org/issue?@action=redirect&bpo=27213

   (12) https://bugs.python.org/issue?@action=redirect&bpo=26331

   (13) https://peps.python.org/pep-0515/

   (14) https://bugs.python.org/issue?@action=redirect&bpo=27999

   (15) https://bugs.python.org/issue?@action=redirect&bpo=28003

   (16) https://peps.python.org/pep-0525/

   (17) https://bugs.python.org/issue?@action=redirect&bpo=27985

   (18) https://peps.python.org/pep-0526/

   (19) https://bugs.python.org/issue?@action=redirect&bpo=26058

   (20) https://bugs.python.org/issue?@action=redirect&bpo=27364

   (21) https://bugs.python.org/issue?@action=redirect&bpo=27350

   (22) https://bugs.python.org/issue?@action=redirect&bpo=27911

   (23) https://bugs.python.org/issue?@action=redirect&bpo=27078

   (24) https://bugs.python.org/issue?@action=redirect&bpo=17884

   (25) https://bugs.python.org/issue?@action=redirect&bpo=27961

   (26) https://bugs.python.org/issue?@action=redirect&bpo=27355

   (27) https://peps.python.org/pep-0523/

   (28) https://bugs.python.org/issue?@action=redirect&bpo=27870

   (29) https://bugs.python.org/issue?@action=redirect&bpo=25402

   (30) https://bugs.python.org/issue?@action=redirect&bpo=27214

   (31) https://bugs.python.org/issue?@action=redirect&bpo=27506

   (32) https://bugs.python.org/issue?@action=redirect&bpo=27812

   (33) https://bugs.python.org/issue?@action=redirect&bpo=27811

   (34) https://bugs.python.org/issue?@action=redirect&bpo=27587

   (35) https://bugs.python.org/issue?@action=redirect&bpo=27792

   (36) https://bugs.python.org/issue?@action=redirect&bpo=26984

   (37) https://bugs.python.org/issue?@action=redirect&bpo=25604

   (38) https://bugs.python.org/issue?@action=redirect&bpo=24254

   (39) https://bugs.python.org/issue?@action=redirect&bpo=27662

   (40) https://bugs.python.org/issue?@action=redirect&bpo=27782

   (41) https://bugs.python.org/issue?@action=redirect&bpo=27936

   (42) https://bugs.python.org/issue?@action=redirect&bpo=27487

   (43) https://bugs.python.org/issue?@action=redirect&bpo=27157

   (44) https://bugs.python.org/issue?@action=redirect&bpo=27558

   (45) https://bugs.python.org/issue?@action=redirect&bpo=28008

   (46) https://peps.python.org/pep-0530/

   (47) https://bugs.python.org/issue?@action=redirect&bpo=27942


File: python.info,  Node: Biblioteca<160>,  Next: IDLE<56>,  Prev: Núcleo e embutidos<158>,  Up: Python 3 6 0 beta 1

1.23.93.2 Biblioteca
....................

   - bpo-28732(1): Fix crash in os.spawnv() with no elements in args

   - bpo-28485(2): Always raise ValueError for negative
     compileall.compile_dir(workers=…) parameter, even when
     multithreading is unavailable.

   - bpo-28037(3): Use sqlite3_get_autocommit() instead of setting
     Connection->inTransaction manually.

   - bpo-25283(4): Attributes tm_gmtoff and tm_zone are now available on
     all platforms in the return values of time.localtime() and
     time.gmtime().

   - bpo-24454(5): Regular expression match object groups are now
     accessible using __getitem__.  “mo[x]” is equivalent to
     “mo.group(x)”.

   - bpo-10740(6): sqlite3 no longer implicitly commit an open
     transaction before DDL statements.

   - bpo-17941(7): Add a 'module' parameter to collections.namedtuple().

   - bpo-22493(8): Inline flags now should be used only at the start of
     the regular expression.  Deprecation warning is emitted if uses
     them in the middle of the regular expression.

   - bpo-26885(9): xmlrpc now supports unmarshalling additional data
     types used by Apache XML-RPC implementation for numerics and None.

   - bpo-28070(10): Fixed parsing inline verbose flag in regular
     expressions.

   - bpo-19500(11): Add client-side SSL session resumption to the ssl
     module.

   - bpo-28022(12): Deprecate ssl-related arguments in favor of
     SSLContext.  The deprecation include manual creation of SSLSocket
     and certfile/keyfile (or similar) in ftplib, httplib, imaplib,
     smtplib, poplib and urllib.

   - bpo-28043(13): SSLContext has improved default settings:
     OP_NO_SSLv2, OP_NO_SSLv3, OP_NO_COMPRESSION,
     OP_CIPHER_SERVER_PREFERENCE, OP_SINGLE_DH_USE, OP_SINGLE_ECDH_USE
     and HIGH ciphers without MD5.

   - bpo-24693(14): Changed some RuntimeError’s in the zipfile module to
     more appropriate types.  Improved some error messages and debugging
     output.

   - bpo-17909(15): ‘json.load’ and ‘json.loads’ now support binary
     input encoded as UTF-8, UTF-16 or UTF-32.  Patch by Serhiy
     Storchaka.

   - bpo-27137(16): the pure Python fallback implementation of
     ‘functools.partial’ now matches the behaviour of its accelerated C
     counterpart for subclassing, pickling and text representation
     purposes.  Patch by Emanuel Barry and Serhiy Storchaka.

   - Fix possible integer overflows and crashes in the mmap module with
     unusual usage patterns.

   - bpo-1703178(17): Fix the ability to pass the –link-objects option
     to the distutils build_ext command.

   - bpo-28019(18): itertools.count() no longer rounds non-integer step
     in range between 1.0 and 2.0 to 1.

   - bpo-18401(19): Pdb now supports the ‘readrc’ keyword argument to
     control whether .pdbrc files should be read.  Patch by Martin
     Matusiak and Sam Kimbrel.

   - bpo-25969(20): Update the lib2to3 grammar to handle the unpacking
     generalizations added in 3.5.

   - bpo-14977(21): mailcap now respects the order of the lines in the
     mailcap files (“first match”), as required by RFC 1542.  Patch by
     Michael Lazar.

   - bpo-28082(22): Convert re flag constants to IntFlag.

   - bpo-28025(23): Convert all ssl module constants to IntEnum and
     IntFlags.  SSLContext properties now return flags and enums.

   - bpo-23591(24): Add Flag, IntFlag, and auto() to enum module.

   - bpo-433028(25): Added support of modifier spans in regular
     expressions.

   - bpo-24594(26): Validates persist parameter when opening MSI
     database

   - bpo-17582(27): xml.etree.ElementTree nows preserves whitespaces in
     attributes (Patch by Duane Griffin.  Reviewed and approved by
     Stefan Behnel.)

   - bpo-28047(28): Fixed calculation of line length used for the base64
     CTE in the new email policies.

   - bpo-27576(29): Fix call order in OrderedDict.__init__().

   - email.generator.DecodedGenerator now supports the policy keyword.

   - bpo-28027(30): Remove undocumented modules from ‘Lib/plat-*’: IN,
     CDROM, DLFCN, TYPES, CDIO, and STROPTS.

   - bpo-27445(31): Don’t pass str(_charset) to MIMEText.set_payload().
     Patch by Claude Paroz.

   - bpo-24277(32): The new email API is no longer provisional, and the
     docs have been reorganized and rewritten to emphasize the new API.

   - bpo-22450(33): urllib now includes an ‘Accept: */*’ header among
     the default headers.  This makes the results of REST API requests
     more consistent and predictable especially when proxy servers are
     involved.

   - lib2to3.pgen3.driver.load_grammar() now creates a stable cache file
     between runs given the same Grammar.txt input regardless of the
     hash randomization setting.

   - bpo-28005(34): Allow ImportErrors in encoding implementation to
     propagate.

   - bpo-26667(35): Support path-like objects in importlib.util.

   - bpo-27570(36): Avoid zero-length memcpy() etc calls with null
     source pointers in the “ctypes” and “array” modules.

   - bpo-22233(37): Break email header lines 'only' on the RFC specified
     CR and LF characters, not on arbitrary unicode line breaks.  This
     also fixes a bug in HTTP header parsing.

   - bpo-27331(38): The email.mime classes now all accept an optional
     policy keyword.

   - bpo-27988(39): Fix email iter_attachments incorrect mutation of
     payload list.

   - bpo-16113(40): Add SHA-3 and SHAKE support to hashlib module.

   - Eliminate a tautological-pointer-compare warning in _scproxy.c.

   - bpo-27776(41): The *note os.urandom(): 523. function does now block
     on Linux 3.17 and newer until the system urandom entropy pool is
     initialized to increase the security.  This change is part of the
     PEP 524(42).

   - bpo-27778(43): Expose the Linux ‘getrandom()’ syscall as a new
     *note os.getrandom(): cdd. function.  This change is part of the
     PEP 524(44).

   - bpo-27691(45): Fix ssl module’s parsing of GEN_RID subject
     alternative name fields in X.509 certs.

   - bpo-18844(46): Add random.choices().

   - bpo-25761(47): Improved error reporting about truncated pickle data
     in C implementation of unpickler.  UnpicklingError is now raised
     instead of AttributeError and ValueError in some cases.

   - bpo-26798(48): Add BLAKE2 (blake2b and blake2s) to hashlib.

   - bpo-26032(49): Optimized globbing in pathlib by using os.scandir();
     it is now about 1.5–4 times faster.

   - bpo-25596(50): Optimized glob() and iglob() functions in the glob
     module; they are now about 3–6 times faster.

   - bpo-27928(51): Add scrypt (password-based key derivation function)
     to hashlib module (requires OpenSSL 1.1.0).

   - bpo-27850(52): Remove 3DES from ssl module’s default cipher list to
     counter measure sweet32 attack ( CVE 2016-2183(53)).

   - bpo-27766(54): Add ChaCha20 Poly1305 to ssl module’s default cipher
     list.  (Required OpenSSL 1.1.0 or LibreSSL).

   - bpo-25387(55): Check return value of winsound.MessageBeep.

   - bpo-27866(56): Add SSLContext.get_ciphers() method to get a list of
     all enabled ciphers.

   - bpo-27744(57): Add AF_ALG (Linux Kernel crypto) to socket module.

   - bpo-26470(58): Port ssl and hashlib module to OpenSSL 1.1.0.

   - bpo-11620(59): Fix support for SND_MEMORY in winsound.PlaySound.
     Based on a patch by Tim Lesher.

   - bpo-11734(60): Add support for IEEE 754 half-precision floats to
     the struct module.  Based on a patch by Eli Stevens.

   - bpo-27919(61): Deprecated ‘extra_path’ distribution option in
     distutils packaging.

   - bpo-23229(62): Add new ‘cmath’ constants: ‘cmath.inf’ and
     ‘cmath.nan’ to match ‘math.inf’ and ‘math.nan’, and also
     ‘cmath.infj’ and ‘cmath.nanj’ to match the format used by complex
     repr.

   - bpo-27842(63): The csv.DictReader now returns rows of type
     OrderedDict.  (Contributed by Steve Holden.)

   - Remove support for passing a file descriptor to os.access.  It
     never worked but previously didn’t raise.

   - bpo-12885(64): Fix error when distutils encounters symlink.

   - bpo-27881(65): Fixed possible bugs when setting
     sqlite3.Connection.isolation_level.  Based on patch by Xiang Zhang.

   - bpo-27861(66): Fixed a crash in sqlite3.Connection.cursor() when a
     factory creates not a cursor.  Patch by Xiang Zhang.

   - bpo-19884(67): Avoid spurious output on OS X with Gnu Readline.

   - bpo-27706(68): Restore deterministic behavior of
     random.Random().seed() for string seeds using seeding version 1.
     Allows sequences of calls to random() to exactly match those
     obtained in Python 2.  Patch by Nofar Schnider.

   - bpo-10513(69): Fix a regression in Connection.commit().  Statements
     should not be reset after a commit.

   - bpo-12319(70): Chunked transfer encoding support added to
     http.client.HTTPConnection requests.  The
     urllib.request.AbstractHTTPHandler class does not enforce a
     Content-Length header any more.  If a HTTP request has a file or
     iterable body, but no Content-Length header, the library now falls
     back to use chunked transfer-encoding.

   - A new version of typing.py from ‘https://github.com/python/typing’:
     - Collection (only for 3.6) (bpo-27598(71)) - Add FrozenSet to
     __all__ (upstream #261) - fix crash in _get_type_vars() (upstream
     #259) - Remove the dict constraint in ForwardRef._eval_type
     (upstream #252)

   - bpo-27832(72): Make ‘_normalize’ parameter to ‘Fraction’
     constructor keyword-only, so that ‘Fraction(2, 3, 4)’ now raises
     ‘TypeError’.

   - bpo-27539(73): Fix unnormalised ‘Fraction.__pow__’ result in the
     case of negative exponent and negative base.

   - bpo-21718(74): cursor.description is now available for queries
     using CTEs.

   - bpo-27819(75): In distutils sdists, simply produce the “gztar”
     (gzipped tar format) distributions on all platforms unless
     “formats” is supplied.

   - bpo-2466(76): posixpath.ismount now correctly recognizes mount
     points which the user does not have permission to access.

   - bpo-9998(77): On Linux, ctypes.util.find_library now looks in
     LD_LIBRARY_PATH for shared libraries.

   - bpo-27573(78): exit message for code.interact is now configurable.

   - bpo-27930(79): Improved behaviour of
     logging.handlers.QueueListener.  Thanks to Paulo Andrade and Petr
     Viktorin for the analysis and patch.

   - bpo-6766(80): Distributed reference counting added to
     multiprocessing to support nesting of shared values / proxy
     objects.

   - bpo-21201(81): Improves readability of multiprocessing error
     message.  Thanks to Wojciech Walczak for patch.

   - asyncio: Add set_protocol / get_protocol to Transports.

   - bpo-27456(82): asyncio: Set TCP_NODELAY by default.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28732

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28485

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28037

   (4) https://bugs.python.org/issue?@action=redirect&bpo=25283

   (5) https://bugs.python.org/issue?@action=redirect&bpo=24454

   (6) https://bugs.python.org/issue?@action=redirect&bpo=10740

   (7) https://bugs.python.org/issue?@action=redirect&bpo=17941

   (8) https://bugs.python.org/issue?@action=redirect&bpo=22493

   (9) https://bugs.python.org/issue?@action=redirect&bpo=26885

   (10) https://bugs.python.org/issue?@action=redirect&bpo=28070

   (11) https://bugs.python.org/issue?@action=redirect&bpo=19500

   (12) https://bugs.python.org/issue?@action=redirect&bpo=28022

   (13) https://bugs.python.org/issue?@action=redirect&bpo=28043

   (14) https://bugs.python.org/issue?@action=redirect&bpo=24693

   (15) https://bugs.python.org/issue?@action=redirect&bpo=17909

   (16) https://bugs.python.org/issue?@action=redirect&bpo=27137

   (17) https://bugs.python.org/issue?@action=redirect&bpo=1703178

   (18) https://bugs.python.org/issue?@action=redirect&bpo=28019

   (19) https://bugs.python.org/issue?@action=redirect&bpo=18401

   (20) https://bugs.python.org/issue?@action=redirect&bpo=25969

   (21) https://bugs.python.org/issue?@action=redirect&bpo=14977

   (22) https://bugs.python.org/issue?@action=redirect&bpo=28082

   (23) https://bugs.python.org/issue?@action=redirect&bpo=28025

   (24) https://bugs.python.org/issue?@action=redirect&bpo=23591

   (25) https://bugs.python.org/issue?@action=redirect&bpo=433028

   (26) https://bugs.python.org/issue?@action=redirect&bpo=24594

   (27) https://bugs.python.org/issue?@action=redirect&bpo=17582

   (28) https://bugs.python.org/issue?@action=redirect&bpo=28047

   (29) https://bugs.python.org/issue?@action=redirect&bpo=27576

   (30) https://bugs.python.org/issue?@action=redirect&bpo=28027

   (31) https://bugs.python.org/issue?@action=redirect&bpo=27445

   (32) https://bugs.python.org/issue?@action=redirect&bpo=24277

   (33) https://bugs.python.org/issue?@action=redirect&bpo=22450

   (34) https://bugs.python.org/issue?@action=redirect&bpo=28005

   (35) https://bugs.python.org/issue?@action=redirect&bpo=26667

   (36) https://bugs.python.org/issue?@action=redirect&bpo=27570

   (37) https://bugs.python.org/issue?@action=redirect&bpo=22233

   (38) https://bugs.python.org/issue?@action=redirect&bpo=27331

   (39) https://bugs.python.org/issue?@action=redirect&bpo=27988

   (40) https://bugs.python.org/issue?@action=redirect&bpo=16113

   (41) https://bugs.python.org/issue?@action=redirect&bpo=27776

   (42) https://peps.python.org/pep-0524/

   (43) https://bugs.python.org/issue?@action=redirect&bpo=27778

   (44) https://peps.python.org/pep-0524/

   (45) https://bugs.python.org/issue?@action=redirect&bpo=27691

   (46) https://bugs.python.org/issue?@action=redirect&bpo=18844

   (47) https://bugs.python.org/issue?@action=redirect&bpo=25761

   (48) https://bugs.python.org/issue?@action=redirect&bpo=26798

   (49) https://bugs.python.org/issue?@action=redirect&bpo=26032

   (50) https://bugs.python.org/issue?@action=redirect&bpo=25596

   (51) https://bugs.python.org/issue?@action=redirect&bpo=27928

   (52) https://bugs.python.org/issue?@action=redirect&bpo=27850

   (53) https://www.cve.org/CVERecord?id=CVE-2016-2183

   (54) https://bugs.python.org/issue?@action=redirect&bpo=27766

   (55) https://bugs.python.org/issue?@action=redirect&bpo=25387

   (56) https://bugs.python.org/issue?@action=redirect&bpo=27866

   (57) https://bugs.python.org/issue?@action=redirect&bpo=27744

   (58) https://bugs.python.org/issue?@action=redirect&bpo=26470

   (59) https://bugs.python.org/issue?@action=redirect&bpo=11620

   (60) https://bugs.python.org/issue?@action=redirect&bpo=11734

   (61) https://bugs.python.org/issue?@action=redirect&bpo=27919

   (62) https://bugs.python.org/issue?@action=redirect&bpo=23229

   (63) https://bugs.python.org/issue?@action=redirect&bpo=27842

   (64) https://bugs.python.org/issue?@action=redirect&bpo=12885

   (65) https://bugs.python.org/issue?@action=redirect&bpo=27881

   (66) https://bugs.python.org/issue?@action=redirect&bpo=27861

   (67) https://bugs.python.org/issue?@action=redirect&bpo=19884

   (68) https://bugs.python.org/issue?@action=redirect&bpo=27706

   (69) https://bugs.python.org/issue?@action=redirect&bpo=10513

   (70) https://bugs.python.org/issue?@action=redirect&bpo=12319

   (71) https://bugs.python.org/issue?@action=redirect&bpo=27598

   (72) https://bugs.python.org/issue?@action=redirect&bpo=27832

   (73) https://bugs.python.org/issue?@action=redirect&bpo=27539

   (74) https://bugs.python.org/issue?@action=redirect&bpo=21718

   (75) https://bugs.python.org/issue?@action=redirect&bpo=27819

   (76) https://bugs.python.org/issue?@action=redirect&bpo=2466

   (77) https://bugs.python.org/issue?@action=redirect&bpo=9998

   (78) https://bugs.python.org/issue?@action=redirect&bpo=27573

   (79) https://bugs.python.org/issue?@action=redirect&bpo=27930

   (80) https://bugs.python.org/issue?@action=redirect&bpo=6766

   (81) https://bugs.python.org/issue?@action=redirect&bpo=21201

   (82) https://bugs.python.org/issue?@action=redirect&bpo=27456


File: python.info,  Node: IDLE<56>,  Next: API C<70>,  Prev: Biblioteca<160>,  Up: Python 3 6 0 beta 1

1.23.93.3 IDLE
..............

   - bpo-15308(1): Add ‘interrupt execution’ (^C) to Shell menu.  Patch
     by Roger Serwy, updated by Bayard Randel.

   - bpo-27922(2): Stop IDLE tests from ‘flashing’ gui widgets on the
     screen.

   - bpo-27891(3): Consistently group and sort imports within idlelib
     modules.

   - bpo-17642(4): add larger font sizes for classroom projection.

   - Add version to title of IDLE help window.

   - bpo-25564(5): In section on IDLE – console differences, mention
     that using exec means that __builtins__ is defined for each
     statement.

   - bpo-27821(6): Fix 3.6.0a3 regression that prevented custom key sets
     from being selected when no custom theme was defined.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15308

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27922

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27891

   (4) https://bugs.python.org/issue?@action=redirect&bpo=17642

   (5) https://bugs.python.org/issue?@action=redirect&bpo=25564

   (6) https://bugs.python.org/issue?@action=redirect&bpo=27821


File: python.info,  Node: API C<70>,  Next: Testes<74>,  Prev: IDLE<56>,  Up: Python 3 6 0 beta 1

1.23.93.4 API C
...............

   - bpo-26900(1): Excluded underscored names and other private API from
     limited API.

   - bpo-26027(2): Add support for path-like objects in
     PyUnicode_FSConverter() & PyUnicode_FSDecoder().

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26900

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26027


File: python.info,  Node: Testes<74>,  Next: Construção<82>,  Prev: API C<70>,  Up: Python 3 6 0 beta 1

1.23.93.5 Testes
................

   - bpo-27427(1): Additional tests for the math module.  Patch by
     Francisco Couzo.

   - bpo-27953(2): Skip math and cmath tests that fail on OS X 10.4 due
     to a poor libm implementation of tan.

   - bpo-26040(3): Improve test_math and test_cmath coverage and rigour.
     Patch by Jeff Allen.

   - bpo-27787(4): Call gc.collect() before checking each test for
     “dangling threads”, since the dangling threads are weak references.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27427

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27953

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26040

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27787


File: python.info,  Node: Construção<82>,  Next: Ferramentas/Demos<44>,  Prev: Testes<74>,  Up: Python 3 6 0 beta 1

1.23.93.6 Construção
....................

   - bpo-27566(1): Fix clean target in freeze makefile (patch by Lisa
     Roach)

   - bpo-27705(2): Update message in validate_ucrtbase.py

   - bpo-27976(3): Deprecate building _ctypes with the bundled copy of
     libffi on non-OSX UNIX platforms.

   - bpo-27983(4): Cause lack of llvm-profdata tool when using clang as
     required for PGO linking to be a configure time error rather than
     make time when ‘--with-optimizations’ is enabled.  Also improve our
     ability to find the llvm-profdata tool on MacOS and some Linuxes.

   - bpo-21590(5): Support for DTrace and SystemTap probes.

   - bpo-26307(6): The profile-opt build now applies PGO to the built-in
     modules.

   - bpo-26359(7): Add the –with-optimizations flag to turn on LTO and
     PGO build support when available.

   - bpo-27917(8): Set platform triplets for Android builds.

   - bpo-25825(9): Update references to the $(LIBPL) installation path
     on AIX. This path was changed in 3.2a4.

   - Update OS X installer to use SQLite 3.14.1 and XZ 5.2.2.

   - bpo-21122(10): Fix LTO builds on OS X.

   - bpo-17128(11): Build OS X installer with a private copy of OpenSSL.
     Also provide a sample Install Certificates command script to
     install a set of root certificates from the third-party certifi
     module.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27566

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27705

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27976

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27983

   (5) https://bugs.python.org/issue?@action=redirect&bpo=21590

   (6) https://bugs.python.org/issue?@action=redirect&bpo=26307

   (7) https://bugs.python.org/issue?@action=redirect&bpo=26359

   (8) https://bugs.python.org/issue?@action=redirect&bpo=27917

   (9) https://bugs.python.org/issue?@action=redirect&bpo=25825

   (10) https://bugs.python.org/issue?@action=redirect&bpo=21122

   (11) https://bugs.python.org/issue?@action=redirect&bpo=17128


File: python.info,  Node: Ferramentas/Demos<44>,  Next: Windows<70>,  Prev: Construção<82>,  Up: Python 3 6 0 beta 1

1.23.93.7 Ferramentas/Demos
...........................

   - bpo-27952(1): Get Tools/scripts/fixcid.py working with Python 3 and
     the current “re” module, avoid invalid Python backslash escapes,
     and fix a bug parsing escaped C quote signs.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27952


File: python.info,  Node: Windows<70>,  Prev: Ferramentas/Demos<44>,  Up: Python 3 6 0 beta 1

1.23.93.8 Windows
.................

   - bpo-28065(1): Update xz dependency to 5.2.2 and build it from
     source.

   - bpo-25144(2): Ensures TargetDir is set before continuing with
     custom install.

   - bpo-1602(3): Windows console doesn’t input or print Unicode (PEP
     528)

   - bpo-27781(4): Change file system encoding on Windows to UTF-8 (PEP
     529)

   - bpo-27731(5): Opt-out of MAX_PATH on Windows 10

   - bpo-6135(6): Adds encoding and errors parameters to subprocess.

   - bpo-27959(7): Adds oem encoding, alias ansi to mbcs, move aliasmbcs
     to codec lookup.

   - bpo-27982(8): The functions of the winsound module now accept
     keyword arguments.

   - bpo-20366(9): Build full text search support into SQLite on
     Windows.

   - bpo-27756(10): Adds new icons for Python files and processes on
     Windows.  Designs by Cherry Wang.

   - bpo-27883(11): Update sqlite to 3.14.1.0 on Windows.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28065

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25144

   (3) https://bugs.python.org/issue?@action=redirect&bpo=1602

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27781

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27731

   (6) https://bugs.python.org/issue?@action=redirect&bpo=6135

   (7) https://bugs.python.org/issue?@action=redirect&bpo=27959

   (8) https://bugs.python.org/issue?@action=redirect&bpo=27982

   (9) https://bugs.python.org/issue?@action=redirect&bpo=20366

   (10) https://bugs.python.org/issue?@action=redirect&bpo=27756

   (11) https://bugs.python.org/issue?@action=redirect&bpo=27883


File: python.info,  Node: Python 3 6 0 alpha 4,  Next: Python 3 6 0 alpha 3,  Prev: Python 3 6 0 beta 1,  Up: Changelog

1.23.94 Python 3.6.0 alpha 4
----------------------------

'Data de lançamento: 2016-08-15'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<159>.
* Biblioteca: Biblioteca<161>.
* IDLE: IDLE<57>.
* Testes: Testes<75>.
* Windows: Windows<71>.
* Construção: Construção<83>.


File: python.info,  Node: Núcleo e embutidos<159>,  Next: Biblioteca<161>,  Up: Python 3 6 0 alpha 4

1.23.94.1 Núcleo e embutidos
............................

   - bpo-27704(1): Optimized creating bytes and bytearray from byte-like
     objects and iterables.  Speed up to 3 times for short objects.
     Original patch by Naoki Inada.

   - bpo-26823(2): Large sections of repeated lines in tracebacks are
     now abbreviated as “[Previous line repeated {count} more times]” by
     the builtin traceback rendering.  Patch by Emanuel Barry.

   - bpo-27574(3): Decreased an overhead of parsing keyword arguments in
     functions implemented with using Argument Clinic.

   - bpo-22557(4): Now importing already imported modules is up to 2.5
     times faster.

   - bpo-17596(5): Include <wincrypt.h> to help with Min GW building.

   - bpo-17599(6): On Windows, rename the privately defined
     REPARSE_DATA_BUFFER structure to avoid conflicting with the
     definition from Min GW.

   - bpo-27507(7): Add integer overflow check in bytearray.extend().
     Patch by Xiang Zhang.

   - bpo-27581(8): Don’t rely on wrapping for overflow check in
     PySequence_Tuple().  Patch by Xiang Zhang.

   - bpo-1621(9): Avoid signed integer overflow in list and tuple
     operations.  Patch by Xiang Zhang.

   - bpo-27419(10): Standard __import__() no longer look up “__import__”
     in globals or builtins for importing submodules or “from import”.
     Fixed a crash if raise a warning about unabling to resolve package
     from __spec__ or __package__.

   - bpo-27083(11): Respect the PYTHONCASEOK environment variable under
     Windows.

   - bpo-27514(12): Make having too many statically nested blocks a
     SyntaxError instead of SystemError.

   - bpo-27366(13): Implemented PEP 487(14) (Simpler customization of
     class creation).  Upon subclassing, the __init_subclass__
     classmethod is called on the base class.  Descriptors are
     initialized with __set_name__ after class creation.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27704

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26823

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27574

   (4) https://bugs.python.org/issue?@action=redirect&bpo=22557

   (5) https://bugs.python.org/issue?@action=redirect&bpo=17596

   (6) https://bugs.python.org/issue?@action=redirect&bpo=17599

   (7) https://bugs.python.org/issue?@action=redirect&bpo=27507

   (8) https://bugs.python.org/issue?@action=redirect&bpo=27581

   (9) https://bugs.python.org/issue?@action=redirect&bpo=1621

   (10) https://bugs.python.org/issue?@action=redirect&bpo=27419

   (11) https://bugs.python.org/issue?@action=redirect&bpo=27083

   (12) https://bugs.python.org/issue?@action=redirect&bpo=27514

   (13) https://bugs.python.org/issue?@action=redirect&bpo=27366

   (14) https://peps.python.org/pep-0487/


File: python.info,  Node: Biblioteca<161>,  Next: IDLE<57>,  Prev: Núcleo e embutidos<159>,  Up: Python 3 6 0 alpha 4

1.23.94.2 Biblioteca
....................

   - bpo-26027(1): Add PEP 519(2)/__fspath__() support to the os and
     os.path modules.  Includes code from Jelle Zijlstra.  (See also:
     bpo-27524(3))

   - bpo-27598(4): Add Collections to collections.abc.  Patch by Ivan
     Levkivskyi, docs by Neil Girdhar.

   - bpo-25958(5): Support “anti-registration” of special methods from
     various ABCs, like __hash__, __iter__ or __len__.  All these (and
     several more) can be set to None in an implementation class and the
     behavior will be as if the method is not defined at all.
     (Previously, this mechanism existed only for __hash__, to make
     mutable classes unhashable.)  Code contributed by Andrew Barnert
     and Ivan Levkivskyi.

   - bpo-16764(6): Support keyword arguments to zlib.decompress().
     Patch by Xiang Zhang.

   - bpo-27736(7): Prevent segfault after interpreter re-initialization
     due to ref count problem introduced in code for bpo-27038(8) in
     3.6.0a3.  Patch by Xiang Zhang.

   - bpo-25628(9): The 'verbose' and 'rename' parameters for
     collections.namedtuple are now keyword-only.

   - bpo-12345(10): Add mathematical constant tau to math and cmath.
     See also PEP 628(11).

   - bpo-26823(12): traceback.StackSummary.format now abbreviates large
     sections of repeated lines as “[Previous line repeated {count} more
     times]” (this change then further affects other traceback display
     operations in the module).  Patch by Emanuel Barry.

   - bpo-27664(13): Add to
     concurrent.futures.thread.ThreadPoolExecutor() the ability to
     specify a thread name prefix.

   - bpo-27181(14): Add geometric_mean and harmonic_mean to statistics
     module.

   - bpo-27573(15): code.interact now prints an message when exiting.

   - bpo-6422(16): Add autorange method to timeit.Timer objects.

   - bpo-27773(17): Correct some memory management errors
     server_hostname in _ssl.wrap_socket().

   - bpo-26750(18): unittest.mock.create_autospec() now works properly
     for subclasses of property() and other data descriptors.  Removes
     the never publicly used, never documented
     unittest.mock.DescriptorTypes tuple.

   - bpo-26754(19): Undocumented support of general bytes-like objects
     as path in compile() and similar functions is now deprecated.

   - bpo-26800(20): Undocumented support of general bytes-like objects
     as paths in os functions is now deprecated.

   - bpo-26981(21): Add _order_ compatibility shim to enum.Enum for
     Python 2/3 code bases.

   - bpo-27661(22): Added tzinfo keyword argument to datetime.combine.

   - In the curses module, raise an error if window.getstr() or
     window.instr() is passed a negative value.

   - bpo-27783(23): Fix possible usage of uninitialized memory in
     operator.methodcaller.

   - bpo-27774(24): Fix possible Py_DECREF on unowned object in _sre.

   - bpo-27760(25): Fix possible integer overflow in binascii.b2a_qp.

   - bpo-27758(26): Fix possible integer overflow in the _csv module for
     large record lengths.

   - bpo-27568(27): Prevent HTTPoxy attack ( CVE 2016-1000110(28)).
     Ignore the HTTP_PROXY variable when REQUEST_METHOD environment is
     set, which indicates that the script is in CGI mode.

   - bpo-7063(29): Remove dead code from the “array” module’s slice
     handling.  Patch by Chuck.

   - bpo-27656(30): Do not assume sched.h defines any SCHED_* constants.

   - bpo-27130(31): In the “zlib” module, fix handling of large buffers
     (typically 4 GiB) when compressing and decompressing.  Previously,
     inputs were limited to 4 GiB, and compression and decompression
     operations did not properly handle results of 4 GiB.

   - bpo-24773(32): Implemented PEP 495(33) (Local Time Disambiguation).

   - Expose the EPOLLEXCLUSIVE constant (when it is defined) in the
     select module.

   - bpo-27567(34): Expose the EPOLLRDHUP and POLLRDHUP constants in the
     select module.

   - bpo-1621(35): Avoid signed int negation overflow in the “audioop”
     module.

   - bpo-27533(36): Release GIL in nt._isdir

   - bpo-17711(37): Fixed unpickling by the persistent ID with protocol
     0.  Original patch by Alexandre Vassalotti.

   - bpo-27522(38): Avoid an unintentional reference cycle in
     email.feedparser.

   - bpo-27512(39): Fix a segfault when os.fspath() called an
     __fspath__() method that raised an exception.  Patch by Xiang
     Zhang.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26027

   (2) https://peps.python.org/pep-0519/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27524

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27598

   (5) https://bugs.python.org/issue?@action=redirect&bpo=25958

   (6) https://bugs.python.org/issue?@action=redirect&bpo=16764

   (7) https://bugs.python.org/issue?@action=redirect&bpo=27736

   (8) https://bugs.python.org/issue?@action=redirect&bpo=27038

   (9) https://bugs.python.org/issue?@action=redirect&bpo=25628

   (10) https://bugs.python.org/issue?@action=redirect&bpo=12345

   (11) https://peps.python.org/pep-0628/

   (12) https://bugs.python.org/issue?@action=redirect&bpo=26823

   (13) https://bugs.python.org/issue?@action=redirect&bpo=27664

   (14) https://bugs.python.org/issue?@action=redirect&bpo=27181

   (15) https://bugs.python.org/issue?@action=redirect&bpo=27573

   (16) https://bugs.python.org/issue?@action=redirect&bpo=6422

   (17) https://bugs.python.org/issue?@action=redirect&bpo=27773

   (18) https://bugs.python.org/issue?@action=redirect&bpo=26750

   (19) https://bugs.python.org/issue?@action=redirect&bpo=26754

   (20) https://bugs.python.org/issue?@action=redirect&bpo=26800

   (21) https://bugs.python.org/issue?@action=redirect&bpo=26981

   (22) https://bugs.python.org/issue?@action=redirect&bpo=27661

   (23) https://bugs.python.org/issue?@action=redirect&bpo=27783

   (24) https://bugs.python.org/issue?@action=redirect&bpo=27774

   (25) https://bugs.python.org/issue?@action=redirect&bpo=27760

   (26) https://bugs.python.org/issue?@action=redirect&bpo=27758

   (27) https://bugs.python.org/issue?@action=redirect&bpo=27568

   (28) https://www.cve.org/CVERecord?id=CVE-2016-1000110

   (29) https://bugs.python.org/issue?@action=redirect&bpo=7063

   (30) https://bugs.python.org/issue?@action=redirect&bpo=27656

   (31) https://bugs.python.org/issue?@action=redirect&bpo=27130

   (32) https://bugs.python.org/issue?@action=redirect&bpo=24773

   (33) https://peps.python.org/pep-0495/

   (34) https://bugs.python.org/issue?@action=redirect&bpo=27567

   (35) https://bugs.python.org/issue?@action=redirect&bpo=1621

   (36) https://bugs.python.org/issue?@action=redirect&bpo=27533

   (37) https://bugs.python.org/issue?@action=redirect&bpo=17711

   (38) https://bugs.python.org/issue?@action=redirect&bpo=27522

   (39) https://bugs.python.org/issue?@action=redirect&bpo=27512


File: python.info,  Node: IDLE<57>,  Next: Testes<75>,  Prev: Biblioteca<161>,  Up: Python 3 6 0 alpha 4

1.23.94.3 IDLE
..............

   - bpo-27714(1): text_textview and test_autocomplete now pass when
     re-run in the same process.  This occurs when test_idle fails when
     run with the -w option but without -jn.  Fix warning from
     test_config.

   - bpo-27621(2): Put query response validation error messages in the
     query box itself instead of in a separate messagebox.  Redo tests
     to match.  Add Mac OSX refinements.  Original patch by Mark
     Roseman.

   - bpo-27620(3): Escape key now closes Query box as cancelled.

   - bpo-27609(4): IDLE: tab after initial whitespace should tab, not
     autocomplete.  This fixes problem with writing docstrings at least
     twice indented.

   - bpo-27609(5): Explicitly return None when there are also non-None
     returns.  In a few cases, reverse a condition and eliminate a
     return.

   - bpo-25507(6): IDLE no longer runs buggy code because of its tkinter
     imports.  Users must include the same imports required to run
     directly in Python.

   - bpo-27173(7): Add ‘IDLE Modern Unix’ to the built-in key sets.
     Make the default key set depend on the platform.  Add tests for the
     changes to the config module.

   - bpo-27452(8): add line counter and crc to IDLE configHandler test
     dump.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27714

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27621

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27620

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27609

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27609

   (6) https://bugs.python.org/issue?@action=redirect&bpo=25507

   (7) https://bugs.python.org/issue?@action=redirect&bpo=27173

   (8) https://bugs.python.org/issue?@action=redirect&bpo=27452


File: python.info,  Node: Testes<75>,  Next: Windows<71>,  Prev: IDLE<57>,  Up: Python 3 6 0 alpha 4

1.23.94.4 Testes
................

   - bpo-25805(1): Skip a test in test_pkgutil as needed that doesn’t
     work when ‘__name__ == __main__’.  Patch by SilentGhost.

   - bpo-27472(2): Add test.support.unix_shell as the path to the
     default shell.

   - bpo-27369(3): In test_pyexpat, avoid testing an error message
     detail that changed in Expat 2.2.0.

   - bpo-27594(4): Prevent assertion error when running test_ast with
     coverage enabled: ensure code object has a valid first line number.
     Patch suggested by Ivan Levkivskyi.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25805

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27472

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27369

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27594


File: python.info,  Node: Windows<71>,  Next: Construção<83>,  Prev: Testes<75>,  Up: Python 3 6 0 alpha 4

1.23.94.5 Windows
.................

   - bpo-27647(1): Update bundled Tcl/Tk to 8.6.6.

   - bpo-27610(2): Adds PEP 514(3) metadata to Windows installer

   - bpo-27469(4): Adds a shell extension to the launcher so that drag
     and drop works correctly.

   - bpo-27309(5): Enables proper Windows styles in python[w].exe
     manifest.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27647

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27610

   (3) https://peps.python.org/pep-0514/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27469

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27309


File: python.info,  Node: Construção<83>,  Prev: Windows<71>,  Up: Python 3 6 0 alpha 4

1.23.94.6 Construção
....................

   - bpo-27713(1): Suppress spurious build warnings when updating
     importlib’s bootstrap files.  Patch by Xiang Zhang

   - bpo-25825(2): Correct the references to Modules/python.exp, which
     is required on AIX. The references were accidentally changed in
     3.5.0a1.

   - bpo-27453(3): CPP invocation in configure must use CPPFLAGS. Patch
     by Chi Hsuan Yen.

   - bpo-27641(4): The configure script now inserts comments into the
     makefile to prevent the pgen and _freeze_importlib executables from
     being cross-compiled.

   - bpo-26662(5): Set PYTHON_FOR_GEN in configure as the Python program
     to be used for file generation during the build.

   - bpo-10910(6): Avoid C++ compilation errors on FreeBSD and OS X.
     Also update FreedBSD version checks for the original ctype UTF-8
     workaround.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27713

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25825

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27453

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27641

   (5) https://bugs.python.org/issue?@action=redirect&bpo=26662

   (6) https://bugs.python.org/issue?@action=redirect&bpo=10910


File: python.info,  Node: Python 3 6 0 alpha 3,  Next: Python 3 6 0 alpha 2,  Prev: Python 3 6 0 alpha 4,  Up: Changelog

1.23.95 Python 3.6.0 alpha 3
----------------------------

'Data de lançamento: 2016-07-11'

* Menu:

* Segurança: Segurança<50>.
* Núcleo e embutidos: Núcleo e embutidos<160>.
* Biblioteca: Biblioteca<162>.
* IDLE: IDLE<58>.
* API C: API C<71>.
* Construção: Construção<84>.
* Ferramentas/Demos: Ferramentas/Demos<45>.
* Documentação: Documentação<71>.
* Testes: Testes<76>.


File: python.info,  Node: Segurança<50>,  Next: Núcleo e embutidos<160>,  Up: Python 3 6 0 alpha 3

1.23.95.1 Segurança
...................

   - bpo-27278(1): Fix os.urandom() implementation using getrandom() on
     Linux.  Truncate size to INT_MAX and loop until we collected enough
     random bytes, instead of casting a directly Py_ssize_t to int.

   - bpo-22636(2): Avoid shell injection problems with
     ctypes.util.find_library().

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27278

   (2) https://bugs.python.org/issue?@action=redirect&bpo=22636


File: python.info,  Node: Núcleo e embutidos<160>,  Next: Biblioteca<162>,  Prev: Segurança<50>,  Up: Python 3 6 0 alpha 3

1.23.95.2 Núcleo e embutidos
............................

   - bpo-27473(1): Fixed possible integer overflow in bytes and
     bytearray concatenations.  Patch by Xiang Zhang.

   - bpo-23034(2): The output of a special Python build with defined
     COUNT_ALLOCS, SHOW_ALLOC_COUNT or SHOW_TRACK_COUNT macros is now
     off by default.  It can be re-enabled using the “-X showalloccount”
     option.  It now outputs to stderr instead of stdout.

   - bpo-27443(3): __length_hint__() of bytearray iterators no longer
     return a negative integer for a resized bytearray.

   - bpo-27007(4): The fromhex() class methods of bytes and bytearray
     subclasses now return an instance of corresponding subclass.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27473

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23034

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27443

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27007


File: python.info,  Node: Biblioteca<162>,  Next: IDLE<58>,  Prev: Núcleo e embutidos<160>,  Up: Python 3 6 0 alpha 3

1.23.95.3 Biblioteca
....................

   - bpo-26844(1): Fix error message for imp.find_module() to refer to
     ‘path’ instead of ‘name’.  Patch by Lev Maximov.

   - bpo-23804(2): Fix SSL zero-length recv() calls to not block and not
     raise an error about unclean EOF.

   - bpo-27466(3): Change time format returned by
     http.cookie.time2netscape, confirming the netscape cookie format
     and making it consistent with documentation.

   - bpo-21708(4): Deprecated dbm.dumb behavior that differs from common
     dbm behavior: creating a database in ‘r’ and ‘w’ modes and
     modifying a database in ‘r’ mode.

   - bpo-26721(5): Change the socketserver.StreamRequestHandler.wfile
     attribute to implement BufferedIOBase.  In particular, the write()
     method no longer does partial writes.

   - bpo-22115(6): Added methods trace_add, trace_remove and trace_info
     in the tkinter.Variable class.  They replace old methods
     trace_variable, trace, trace_vdelete and trace_vinfo that use
     obsolete Tcl commands and might not work in future versions of Tcl.
     Fixed old tracing methods: trace_vdelete() with wrong mode no
     longer break tracing, trace_vinfo() now always returns a list of
     pairs of strings, tracing in the “u” mode now works.

   - bpo-26243(7): Only the level argument to zlib.compress() is keyword
     argument now.  The first argument is positional-only.

   - bpo-27038(8): Expose the DirEntry type as os.DirEntry.  Code patch
     by Jelle Zijlstra.

   - bpo-27186(9): Update os.fspath()/PyOS_FSPath() to check the return
     value of __fspath__() to be either str or bytes.

   - bpo-18726(10): All optional parameters of the dump(), dumps(),
     load() and loads() functions and JSONEncoder and JSONDecoder class
     constructors in the json module are now keyword-only.

   - bpo-27319(11): Methods selection_set(), selection_add(),
     selection_remove() and selection_toggle() of ttk.TreeView now allow
     passing multiple items as multiple arguments instead of passing
     them as a tuple.  Deprecated undocumented ability of calling the
     selection() method with arguments.

   - bpo-27079(12): Fixed curses.ascii functions isblank(), iscntrl()
     and ispunct().

   - bpo-27294(13): Numerical state in the repr for Tkinter event
     objects is now represented as a combination of known flags.

   - bpo-27177(14): Match objects in the re module now support
     index-like objects as group indices.  Based on patches by Jeroen
     Demeyer and Xiang Zhang.

   - bpo-26754(15): Some functions (compile() etc) accepted a filename
     argument encoded as an iterable of integers.  Now only strings and
     byte-like objects are accepted.

   - bpo-26536(16): socket.ioctl now supports SIO_LOOPBACK_FAST_PATH.
     Patch by Daniel Stokes.

   - bpo-27048(17): Prevents distutils failing on Windows when
     environment variables contain non-ASCII characters

   - bpo-27330(18): Fixed possible leaks in the ctypes module.

   - bpo-27238(19): Got rid of bare excepts in the turtle module.
     Original patch by Jelle Zijlstra.

   - bpo-27122(20): When an exception is raised within the context being
     managed by a contextlib.ExitStack() and one of the exit stack
     generators catches and raises it in a chain, do not re-raise the
     original exception when exiting, let the new chained one through.
     This avoids the PEP 479(21) bug described in issue25782.

   - bpo-16864(22): sqlite3.Cursor.lastrowid now supports REPLACE
     statement.  Initial patch by Alex LordThorsen.

   - bpo-26386(23): Fixed ttk.TreeView selection operations with item
     id’s containing spaces.

   - bpo-8637(24): Honor a pager set by the env var MANPAGER (in
     preference to one set by the env var PAGER).

   - bpo-16182(25): Fix various functions in the “readline” module to
     use the locale encoding, and fix get_begidx() and get_endidx() to
     return code point indexes.

   - bpo-27392(26): Add loop.connect_accepted_socket().  Patch by Jim
     Fulton.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26844

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23804

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27466

   (4) https://bugs.python.org/issue?@action=redirect&bpo=21708

   (5) https://bugs.python.org/issue?@action=redirect&bpo=26721

   (6) https://bugs.python.org/issue?@action=redirect&bpo=22115

   (7) https://bugs.python.org/issue?@action=redirect&bpo=26243

   (8) https://bugs.python.org/issue?@action=redirect&bpo=27038

   (9) https://bugs.python.org/issue?@action=redirect&bpo=27186

   (10) https://bugs.python.org/issue?@action=redirect&bpo=18726

   (11) https://bugs.python.org/issue?@action=redirect&bpo=27319

   (12) https://bugs.python.org/issue?@action=redirect&bpo=27079

   (13) https://bugs.python.org/issue?@action=redirect&bpo=27294

   (14) https://bugs.python.org/issue?@action=redirect&bpo=27177

   (15) https://bugs.python.org/issue?@action=redirect&bpo=26754

   (16) https://bugs.python.org/issue?@action=redirect&bpo=26536

   (17) https://bugs.python.org/issue?@action=redirect&bpo=27048

   (18) https://bugs.python.org/issue?@action=redirect&bpo=27330

   (19) https://bugs.python.org/issue?@action=redirect&bpo=27238

   (20) https://bugs.python.org/issue?@action=redirect&bpo=27122

   (21) https://peps.python.org/pep-0479/

   (22) https://bugs.python.org/issue?@action=redirect&bpo=16864

   (23) https://bugs.python.org/issue?@action=redirect&bpo=26386

   (24) https://bugs.python.org/issue?@action=redirect&bpo=8637

   (25) https://bugs.python.org/issue?@action=redirect&bpo=16182

   (26) https://bugs.python.org/issue?@action=redirect&bpo=27392


File: python.info,  Node: IDLE<58>,  Next: API C<71>,  Prev: Biblioteca<162>,  Up: Python 3 6 0 alpha 3

1.23.95.4 IDLE
..............

   - bpo-27477(1): IDLE search dialogs now use ttk widgets.

   - bpo-27173(2): Add ‘IDLE Modern Unix’ to the built-in key sets.
     Make the default key set depend on the platform.  Add tests for the
     changes to the config module.

   - bpo-27452(3): make command line “idle-test> python test_help.py”
     work.  __file__ is relative when python is started in the file’s
     directory.

   - bpo-27452(4): add line counter and crc to IDLE configHandler test
     dump.

   - bpo-27380(5): IDLE: add query.py with base Query dialog and ttk
     widgets.  Module had subclasses SectionName, ModuleName, and
     HelpSource, which are used to get information from users by
     configdialog and file =>Load Module.  Each subclass has itw own
     validity checks.  Using ModuleName allows users to edit bad module
     names instead of starting over.  Add tests and delete the two files
     combined into the new one.

   - bpo-27372(6): Test_idle no longer changes the locale.

   - bpo-27365(7): Allow non-ascii chars in IDLE NEWS.txt, for
     contributor names.

   - bpo-27245(8): IDLE: Cleanly delete custom themes and key bindings.
     Previously, when IDLE was started from a console or by import, a
     cascade of warnings was emitted.  Patch by Serhiy Storchaka.

   - bpo-24137(9): Run IDLE, test_idle, and htest with tkinter default
     root disabled.  Fix code and tests that fail with this restriction.
     Fix htests to not create a second and redundant root and mainloop.

   - bpo-27310(10): Fix IDLE.app failure to launch on OS X due to
     vestigial import.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27477

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27173

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27452

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27452

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27380

   (6) https://bugs.python.org/issue?@action=redirect&bpo=27372

   (7) https://bugs.python.org/issue?@action=redirect&bpo=27365

   (8) https://bugs.python.org/issue?@action=redirect&bpo=27245

   (9) https://bugs.python.org/issue?@action=redirect&bpo=24137

   (10) https://bugs.python.org/issue?@action=redirect&bpo=27310


File: python.info,  Node: API C<71>,  Next: Construção<84>,  Prev: IDLE<58>,  Up: Python 3 6 0 alpha 3

1.23.95.5 API C
...............

   - bpo-26754(1): PyUnicode_FSDecoder() accepted a filename argument
     encoded as an iterable of integers.  Now only strings and byte-like
     objects are accepted.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26754


File: python.info,  Node: Construção<84>,  Next: Ferramentas/Demos<45>,  Prev: API C<71>,  Up: Python 3 6 0 alpha 3

1.23.95.6 Construção
....................

   - bpo-28066(1): Fix the logic that searches build directories for
     generated include files when building outside the source tree.

   - bpo-27442(2): Expose the Android API level that python was built
     against, in sysconfig.get_config_vars() as ‘ANDROID_API_LEVEL’.

   - bpo-27434(3): The interpreter that runs the cross-build, found in
     PATH, must now be of the same feature version (e.g.  3.6) as the
     source being built.

   - bpo-26930(4): Update Windows builds to use OpenSSL 1.0.2h.

   - bpo-23968(5): Rename the platform directory from plat-$(MACHDEP) to
     plat-$(PLATFORM_TRIPLET). Rename the config directory (LIBPL) from
     config-$(LDVERSION) to config-$(LDVERSION)-$(PLATFORM_TRIPLET).
     Install the platform specific _sysconfigdata module into the
     platform directory and rename it to include the ABIFLAGS.

   - Don’t use largefile support for GNU/Hurd.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28066

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27442

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27434

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26930

   (5) https://bugs.python.org/issue?@action=redirect&bpo=23968


File: python.info,  Node: Ferramentas/Demos<45>,  Next: Documentação<71>,  Prev: Construção<84>,  Up: Python 3 6 0 alpha 3

1.23.95.7 Ferramentas/Demos
...........................

   - bpo-27332(1): Fixed the type of the first argument of module-level
     functions generated by Argument Clinic.  Patch by Petr Viktorin.

   - bpo-27418(2): Fixed Tools/importbench/importbench.py.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27332

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27418


File: python.info,  Node: Documentação<71>,  Next: Testes<76>,  Prev: Ferramentas/Demos<45>,  Up: Python 3 6 0 alpha 3

1.23.95.8 Documentação
......................

   - bpo-19489(1): Moved the search box from the sidebar to the header
     and footer of each page.  Patch by Ammar Askar.

   - bpo-27285(2): Update documentation to reflect the deprecation of
     ‘pyvenv’ and normalize on the term “virtual environment”.  Patch by
     Steve Piercy.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19489

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27285


File: python.info,  Node: Testes<76>,  Prev: Documentação<71>,  Up: Python 3 6 0 alpha 3

1.23.95.9 Testes
................

   - bpo-27027(1): Added test.support.is_android that is True when this
     is an Android build.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27027


File: python.info,  Node: Python 3 6 0 alpha 2,  Next: Python 3 6 0 alpha 1,  Prev: Python 3 6 0 alpha 3,  Up: Changelog

1.23.96 Python 3.6.0 alpha 2
----------------------------

'Data de lançamento: 2016-06-13'

* Menu:

* Segurança: Segurança<51>.
* Núcleo e embutidos: Núcleo e embutidos<161>.
* Biblioteca: Biblioteca<163>.
* IDLE: IDLE<59>.
* Documentação: Documentação<72>.
* Testes: Testes<77>.
* Windows: Windows<72>.
* Construção: Construção<85>.
* API C: API C<72>.
* Ferramentas/Demos: Ferramentas/Demos<46>.


File: python.info,  Node: Segurança<51>,  Next: Núcleo e embutidos<161>,  Up: Python 3 6 0 alpha 2

1.23.96.1 Segurança
...................

   - bpo-26556(1): Update expat to 2.1.1, fixes CVE 2015-1283(2).

   - Fix TLS stripping vulnerability in smtplib, CVE 2016-0772(3).
     Reported by Team Oststrom.

   - bpo-26839(4): On Linux, *note os.urandom(): 523. now calls
     ‘getrandom()’ with ‘GRND_NONBLOCK’ to fall back on reading
     ‘/dev/urandom’ if the urandom entropy pool is not initialized yet.
     Patch written by Colm Buckley.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26556

   (2) https://www.cve.org/CVERecord?id=CVE-2015-1283

   (3) https://www.cve.org/CVERecord?id=CVE-2016-0772

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26839


File: python.info,  Node: Núcleo e embutidos<161>,  Next: Biblioteca<163>,  Prev: Segurança<51>,  Up: Python 3 6 0 alpha 2

1.23.96.2 Núcleo e embutidos
............................

   - bpo-27095(1): Simplified MAKE_FUNCTION and removed MAKE_CLOSURE
     opcodes.  Patch by Demur Rumed.

   - bpo-27190(2): Raise NotSupportedError if sqlite3 is older than
     3.3.1.  Patch by Dave Sawyer.

   - bpo-27286(3): Fixed compiling BUILD_MAP_UNPACK_WITH_CALL opcode.
     Calling function with generalized unpacking (PEP 448) and
     conflicting keyword names could cause undefined behavior.

   - bpo-27140(4): Added BUILD_CONST_KEY_MAP opcode.

   - bpo-27186(5): Add support for os.PathLike objects to open() (part
     of PEP 519(6)).

   - bpo-27066(7): Fixed SystemError if a custom opener (for open())
     returns a negative number without setting an exception.

   - bpo-26983(8): float() now always return an instance of exact float.
     The deprecation warning is emitted if __float__ returns an instance
     of a strict subclass of float.  In a future versions of Python this
     can be an error.

   - bpo-27097(9): Python interpreter is now about 7% faster due to
     optimized instruction decoding.  Based on patch by Demur Rumed.

   - bpo-26647(10): Python interpreter now uses 16-bit wordcode instead
     of bytecode.  Patch by Demur Rumed.

   - bpo-23275(11): Allow assigning to an empty target list in round
     brackets: () = iterable.

   - bpo-27243(12): Update the __aiter__ protocol: instead of returning
     an awaitable that resolves to an asynchronous iterator, the
     asynchronous iterator should be returned directly.  Doing the
     former will trigger a PendingDeprecationWarning.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27095

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27190

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27286

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27140

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27186

   (6) https://peps.python.org/pep-0519/

   (7) https://bugs.python.org/issue?@action=redirect&bpo=27066

   (8) https://bugs.python.org/issue?@action=redirect&bpo=26983

   (9) https://bugs.python.org/issue?@action=redirect&bpo=27097

   (10) https://bugs.python.org/issue?@action=redirect&bpo=26647

   (11) https://bugs.python.org/issue?@action=redirect&bpo=23275

   (12) https://bugs.python.org/issue?@action=redirect&bpo=27243


File: python.info,  Node: Biblioteca<163>,  Next: IDLE<59>,  Prev: Núcleo e embutidos<161>,  Up: Python 3 6 0 alpha 2

1.23.96.3 Biblioteca
....................

   - Comment out socket (SO_REUSEPORT) and posix (O_SHLOCK, O_EXLOCK)
     constants exposed on the API which are not implemented on GNU/Hurd.
     They would not work at runtime anyway.

   - bpo-27025(1): Generated names for Tkinter widgets are now more
     meaningful and recognizable.

   - bpo-25455(2): Fixed crashes in repr of recursive
     ElementTree.Element and functools.partial objects.

   - bpo-27294(3): Improved repr for Tkinter event objects.

   - bpo-20508(4): Improve exception message of
     IPv{4,6}Network.__getitem__.  Patch by Gareth Rees.

   - bpo-21386(5): Implement missing IPv4Address.is_global property.  It
     was documented since 07a5610bae9d.  Initial patch by Roger Luethi.

   - bpo-27029(6): Removed deprecated support of universal newlines mode
     from ZipFile.open().

   - bpo-27030(7): Unknown escapes consisting of ‘'\'’ and an ASCII
     letter in regular expressions now are errors.  The re.LOCALE flag
     now can be used only with bytes patterns.

   - bpo-27186(8): Add os.PathLike support to DirEntry (part of PEP
     519(9)).  Initial patch by Jelle Zijlstra.

   - bpo-20900(10): distutils register command now decodes HTTP
     responses correctly.  Initial patch by ingrid.

   - bpo-27186(11): Add os.PathLike support to pathlib, removing its
     provisional status (part of PEP 519).  Initial patch by Dusty
     Phillips.

   - bpo-27186(12): Add support for os.PathLike objects to os.fsencode()
     and os.fsdecode() (part of PEP 519(13)).

   - bpo-27186(14): Introduce os.PathLike and os.fspath() (part of PEP
     519(15)).

   - A new version of typing.py provides several new classes and
     features: @overload outside stubs, Reversible, DefaultDict, Text,
     ContextManager, Type[], NewType(), TYPE_CHECKING, and numerous bug
     fixes (note that some of the new features are not yet implemented
     in mypy or other static analyzers).  Also classes for PEP 492(16)
     (Awaitable, AsyncIterable, AsyncIterator) have been added (in fact
     they made it into 3.5.1 but were never mentioned).

   - bpo-25738(17): Stop http.server.BaseHTTPRequestHandler.send_error()
     from sending a message body for 205 Reset Content.  Also, don’t
     send Content header fields in responses that don’t have a body.
     Patch by Susumu Koshiba.

   - bpo-21313(18): Fix the “platform” module to tolerate when
     sys.version contains truncated build information.

   - bpo-23883(19): Added missing APIs to __all__ to match the
     documented APIs for the following modules: cgi, mailbox, mimetypes,
     plistlib and smtpd.  Patches by Jacek Kołodziej.

   - bpo-27164(20): In the zlib module, allow decompressing raw Deflate
     streams with a predefined zdict.  Based on patch by Xiang Zhang.

   - bpo-24291(21): Fix wsgiref.simple_server.WSGIRequestHandler to
     completely write data to the client.  Previously it could do
     partial writes and truncate data.  Also,
     wsgiref.handler.ServerHandler can now handle stdout doing partial
     writes, but this is deprecated.

   - bpo-21272(22): Use _sysconfigdata.py to initialize
     distutils.sysconfig.

   - bpo-19611(23): *note inspect: 7e. now reports the implicit ‘.0’
     parameters generated by the compiler for comprehension and
     generator expression scopes as if they were positional-only
     parameters called ‘implicit0’.  Patch by Jelle Zijlstra.

   - bpo-26809(24): Add ‘__all__’ to *note string: d3.  Patch by Emanuel
     Barry.

   - bpo-26373(25): subprocess.Popen.communicate now correctly ignores
     BrokenPipeError when the child process dies before .communicate()
     is called in more/all circumstances.

   - signal, socket, and ssl module IntEnum constant name lookups now
     return a consistent name for values having multiple names.  Ex:
     signal.Signals(6) now refers to itself as signal.SIGALRM rather
     than flipping between that and signal.SIGIOT based on the
     interpreter’s hash randomization seed.

   - bpo-27167(26): Clarify the subprocess.CalledProcessError error
     message text when the child process died due to a signal.

   - bpo-25931(27): Don’t define socketserver.Forking* names on
     platforms such as Windows that do not support os.fork().

   - bpo-21776(28): distutils.upload now correctly handles HTTPError.
     Initial patch by Claudiu Popa.

   - bpo-26526(29): Replace custom parse tree validation in the parser
     module with a simple DFA validator.

   - bpo-27114(30): Fix SSLContext._load_windows_store_certs fails with
     PermissionError

   - bpo-18383(31): Avoid creating duplicate filters when using
     filterwarnings and simplefilter.  Based on patch by Alex Shkop.

   - bpo-23026(32): winreg.QueryValueEx() now return an integer for
     REG_QWORD type.

   - bpo-26741(33): subprocess.Popen destructor now emits a
     ResourceWarning warning if the child process is still running.

   - bpo-27056(34): Optimize pickle.load() and pickle.loads(), up to 10%
     faster to deserialize a lot of small objects.

   - bpo-21271(35): New keyword only parameters in reset_mock call.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27025

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25455

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27294

   (4) https://bugs.python.org/issue?@action=redirect&bpo=20508

   (5) https://bugs.python.org/issue?@action=redirect&bpo=21386

   (6) https://bugs.python.org/issue?@action=redirect&bpo=27029

   (7) https://bugs.python.org/issue?@action=redirect&bpo=27030

   (8) https://bugs.python.org/issue?@action=redirect&bpo=27186

   (9) https://peps.python.org/pep-0519/

   (10) https://bugs.python.org/issue?@action=redirect&bpo=20900

   (11) https://bugs.python.org/issue?@action=redirect&bpo=27186

   (12) https://bugs.python.org/issue?@action=redirect&bpo=27186

   (13) https://peps.python.org/pep-0519/

   (14) https://bugs.python.org/issue?@action=redirect&bpo=27186

   (15) https://peps.python.org/pep-0519/

   (16) https://peps.python.org/pep-0492/

   (17) https://bugs.python.org/issue?@action=redirect&bpo=25738

   (18) https://bugs.python.org/issue?@action=redirect&bpo=21313

   (19) https://bugs.python.org/issue?@action=redirect&bpo=23883

   (20) https://bugs.python.org/issue?@action=redirect&bpo=27164

   (21) https://bugs.python.org/issue?@action=redirect&bpo=24291

   (22) https://bugs.python.org/issue?@action=redirect&bpo=21272

   (23) https://bugs.python.org/issue?@action=redirect&bpo=19611

   (24) https://bugs.python.org/issue?@action=redirect&bpo=26809

   (25) https://bugs.python.org/issue?@action=redirect&bpo=26373

   (26) https://bugs.python.org/issue?@action=redirect&bpo=27167

   (27) https://bugs.python.org/issue?@action=redirect&bpo=25931

   (28) https://bugs.python.org/issue?@action=redirect&bpo=21776

   (29) https://bugs.python.org/issue?@action=redirect&bpo=26526

   (30) https://bugs.python.org/issue?@action=redirect&bpo=27114

   (31) https://bugs.python.org/issue?@action=redirect&bpo=18383

   (32) https://bugs.python.org/issue?@action=redirect&bpo=23026

   (33) https://bugs.python.org/issue?@action=redirect&bpo=26741

   (34) https://bugs.python.org/issue?@action=redirect&bpo=27056

   (35) https://bugs.python.org/issue?@action=redirect&bpo=21271


File: python.info,  Node: IDLE<59>,  Next: Documentação<72>,  Prev: Biblioteca<163>,  Up: Python 3 6 0 alpha 2

1.23.96.4 IDLE
..............

   - bpo-5124(1): Paste with text selected now replaces the selection on
     X11.  This matches how paste works on Windows, Mac, most modern
     Linux apps, and ttk widgets.  Original patch by Serhiy Storchaka.

   - bpo-24750(2): Switch all scrollbars in IDLE to ttk versions.  Where
     needed, minimal tests are added to cover changes.

   - bpo-24759(3): IDLE requires tk 8.5 and availability ttk widgets.
     Delete now unneeded tk version tests and code for older versions.
     Add test for IDLE syntax colorizer.

   - bpo-27239(4): idlelib.macosx.isXyzTk functions initialize as
     needed.

   - bpo-27262(5): move Aqua unbinding code, which enable context menus,
     to macosx.

   - bpo-24759(6): Make clear in idlelib.idle_test.__init__ that the
     directory is a private implementation of test.test_idle and tool
     for maintainers.

   - bpo-27196(7): Stop ‘ThemeChanged’ warnings when running IDLE tests.
     These persisted after other warnings were suppressed in #20567.
     Apply Serhiy Storchaka’s update_idletasks solution to four test
     files.  Record this additional advice in idle_test/README.txt

   - bpo-20567(8): Revise idle_test/README.txt with advice about
     avoiding tk warning messages from tests.  Apply advice to several
     IDLE tests.

   - bpo-24225(9): Update idlelib/README.txt with new file names and
     event handlers.

   - bpo-27156(10): Remove obsolete code not used by IDLE.

   - bpo-27117(11): Make colorizer htest and turtledemo work with dark
     themes.  Move code for configuring text widget colors to a new
     function.

   - bpo-24225(12): Rename many ‘idlelib/*.py’ and ‘idle_test/test_*.py’
     files.  Edit files to replace old names with new names when the old
     name referred to the module rather than the class it contained.
     See the issue and IDLE section in What’s New in 3.6 for more.

   - bpo-26673(13): When tk reports font size as 0, change to size 10.
     Such fonts on Linux prevented the configuration dialog from
     opening.

   - bpo-21939(14): Add test for IDLE’s percolator.  Original patch by
     Saimadhav Heblikar.

   - bpo-21676(15): Add test for IDLE’s replace dialog.  Original patch
     by Saimadhav Heblikar.

   - bpo-18410(16): Add test for IDLE’s search dialog.  Original patch
     by Westley Martínez.

   - bpo-21703(17): Add test for undo delegator.  Patch mostly by
     Saimadhav Heblikar .

   - bpo-27044(18): Add ConfigDialog.remove_var_callbacks to stop memory
     leaks.

   - bpo-23977(19): Add more asserts to test_delegator.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5124

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24750

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24759

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27239

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27262

   (6) https://bugs.python.org/issue?@action=redirect&bpo=24759

   (7) https://bugs.python.org/issue?@action=redirect&bpo=27196

   (8) https://bugs.python.org/issue?@action=redirect&bpo=20567

   (9) https://bugs.python.org/issue?@action=redirect&bpo=24225

   (10) https://bugs.python.org/issue?@action=redirect&bpo=27156

   (11) https://bugs.python.org/issue?@action=redirect&bpo=27117

   (12) https://bugs.python.org/issue?@action=redirect&bpo=24225

   (13) https://bugs.python.org/issue?@action=redirect&bpo=26673

   (14) https://bugs.python.org/issue?@action=redirect&bpo=21939

   (15) https://bugs.python.org/issue?@action=redirect&bpo=21676

   (16) https://bugs.python.org/issue?@action=redirect&bpo=18410

   (17) https://bugs.python.org/issue?@action=redirect&bpo=21703

   (18) https://bugs.python.org/issue?@action=redirect&bpo=27044

   (19) https://bugs.python.org/issue?@action=redirect&bpo=23977


File: python.info,  Node: Documentação<72>,  Next: Testes<77>,  Prev: IDLE<59>,  Up: Python 3 6 0 alpha 2

1.23.96.5 Documentação
......................

   - bpo-16484(1): Change the default PYTHONDOCS URL to “https:”, and
     fix the resulting links to use lowercase.  Patch by Sean Rodman,
     test by Kaushik Nadikuditi.

   - bpo-24136(2): Document the new PEP 448(3) unpacking syntax of 3.5.

   - bpo-22558(4): Add remaining doc links to source code for
     Python-coded modules.  Patch by Yoni Lavi.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=16484

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24136

   (3) https://peps.python.org/pep-0448/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=22558


File: python.info,  Node: Testes<77>,  Next: Windows<72>,  Prev: Documentação<72>,  Up: Python 3 6 0 alpha 2

1.23.96.6 Testes
................

   - bpo-25285(1): regrtest now uses subprocesses when the -j1 command
     line option is used: each test file runs in a fresh child process.
     Before, the -j1 option was ignored.

   - bpo-25285(2): Tools/buildbot/test.bat script now uses -j1 by
     default to run each test file in fresh child process.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25285

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25285


File: python.info,  Node: Windows<72>,  Next: Construção<85>,  Prev: Testes<77>,  Up: Python 3 6 0 alpha 2

1.23.96.7 Windows
.................

   - bpo-27064(1): The py.exe launcher now defaults to Python 3.  The
     Windows launcher ‘py.exe’ no longer prefers an installed Python 2
     version over Python 3 by default when used interactively.

   - bpo-17500(2): Remove unused and outdated icons.  (See also:
     ‘https://github.com/python/pythondotorg/issues/945’)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27064

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17500


File: python.info,  Node: Construção<85>,  Next: API C<72>,  Prev: Windows<72>,  Up: Python 3 6 0 alpha 2

1.23.96.8 Construção
....................

   - bpo-27229(1): Fix the cross-compiling pgen rule for in-tree builds.
     Patch by Xavier de Gaye.

   - bpo-26930(2): Update OS X 10.5+ 32-bit-only installer to build and
     link with OpenSSL 1.0.2h.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27229

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26930


File: python.info,  Node: API C<72>,  Next: Ferramentas/Demos<46>,  Prev: Construção<85>,  Up: Python 3 6 0 alpha 2

1.23.96.9 API C
...............

   - bpo-27186(1): Add the PyOS_FSPath() function (part of PEP 519(2)).

   - bpo-26282(3): PyArg_ParseTupleAndKeywords() now supports
     positional-only parameters.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27186

   (2) https://peps.python.org/pep-0519/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26282


File: python.info,  Node: Ferramentas/Demos<46>,  Prev: API C<72>,  Up: Python 3 6 0 alpha 2

1.23.96.10 Ferramentas/Demos
............................

   - bpo-26282(1): Argument Clinic now supports positional-only and
     keyword parameters in the same function.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26282


File: python.info,  Node: Python 3 6 0 alpha 1,  Next: Python 3 5 5 final,  Prev: Python 3 6 0 alpha 2,  Up: Changelog

1.23.97 Python 3.6.0 alpha 1
----------------------------

'Data de lançamento: 2016-05-16'

* Menu:

* Segurança: Segurança<52>.
* Núcleo e embutidos: Núcleo e embutidos<162>.
* Biblioteca: Biblioteca<164>.
* IDLE: IDLE<60>.
* Documentação: Documentação<73>.
* Testes: Testes<78>.
* Construção: Construção<86>.
* Windows: Windows<73>.
* Ferramentas/Demos: Ferramentas/Demos<47>.
* API C: API C<73>.


File: python.info,  Node: Segurança<52>,  Next: Núcleo e embutidos<162>,  Up: Python 3 6 0 alpha 1

1.23.97.1 Segurança
...................

   - bpo-26657(1): Fix directory traversal vulnerability with
     http.server on Windows.  This fixes a regression that was
     introduced in 3.3.4rc1 and 3.4.0rc1.  Based on patch by Philipp
     Hagemeister.

   - bpo-26313(2): ssl.py _load_windows_store_certs fails if windows
     cert store is empty.  Patch by Baji.

   - bpo-25939(3): On Windows open the cert store readonly in
     ssl.enum_certificates.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26657

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26313

   (3) https://bugs.python.org/issue?@action=redirect&bpo=25939


File: python.info,  Node: Núcleo e embutidos<162>,  Next: Biblioteca<164>,  Prev: Segurança<52>,  Up: Python 3 6 0 alpha 1

1.23.97.2 Núcleo e embutidos
............................

   - bpo-20041(1): Fixed TypeError when frame.f_trace is set to None.
     Patch by Xavier de Gaye.

   - bpo-26168(2): Fixed possible refleaks in failing Py_BuildValue()
     with the “N” format unit.

   - bpo-26991(3): Fix possible refleak when creating a function with
     annotations.

   - bpo-27039(4): Fixed bytearray.remove() for values greater than 127.
     Based on patch by Joe Jevnik.

   - bpo-23640(5): int.from_bytes() no longer bypasses constructors for
     subclasses.

   - bpo-27005(6): Optimized the float.fromhex() class method for exact
     float.  It is now 2 times faster.

   - bpo-18531(7): Single var-keyword argument of dict subtype was
     passed unscathed to the C-defined function.  Now it is converted to
     exact dict.

   - bpo-26811(8): gc.get_objects() no longer contains a broken tuple
     with NULL pointer.

   - bpo-20120(9): Use RawConfigParser for .pypirc parsing, removing
     support for interpolation unintentionally added with move to Python
     3.  Behavior no longer does any interpolation in .pypirc files,
     matching behavior in Python 2.7 and Setuptools 19.0.

   - bpo-26249(10): Memory functions of the *note PyMem_Malloc(): c81.
     domain (*note PYMEM_DOMAIN_MEM: c84.) now use the *note pymalloc
     allocator: d31. rather than system ‘malloc()’.  Applications
     calling *note PyMem_Malloc(): c81. without holding the GIL can now
     crash: use ‘PYTHONMALLOC=debug’ environment variable to validate
     the usage of memory allocators in your application.

   - bpo-26802(11): Optimize function calls only using unpacking like
     ‘func(*tuple)’ (no other positional argument, no keyword): avoid
     copying the tuple.  Patch written by Joe Jevnik.

   - bpo-26659(12): Make the builtin slice type support cycle
     collection.

   - bpo-26718(13): super.__init__ no longer leaks memory if called
     multiple times.  NOTE: A direct call of super.__init__ is not
     endorsed!

   - bpo-27138(14): Fix the doc comment for FileFinder.find_spec().

   - bpo-27147(15): Mention PEP 420(16) in the importlib docs.

   - bpo-25339(17): PYTHONIOENCODING now has priority over locale in
     setting the error handler for stdin and stdout.

   - bpo-26494(18): Fixed crash on iterating exhausting iterators.
     Affected classes are generic sequence iterators, iterators of str,
     bytes, bytearray, list, tuple, set, frozenset, dict, OrderedDict,
     corresponding views and os.scandir() iterator.

   - bpo-26574(19): Optimize ‘bytes.replace(b'', b'.')’ and
     ‘bytearray.replace(b'', b'.')’.  Patch written by Josh Snider.

   - bpo-26581(20): If coding cookie is specified multiple times on a
     line in Python source code file, only the first one is taken to
     account.

   - bpo-19711(21): Add tests for reloading namespace packages.

   - bpo-21099(22): Switch applicable importlib tests to use PEP 451(23)
     API.

   - bpo-26563(24): Debug hooks on Python memory allocators now raise a
     fatal error if functions of the *note PyMem_Malloc(): c81. family
     are called without holding the GIL.

   - bpo-26564(25): On error, the debug hooks on Python memory
     allocators now use the *note tracemalloc: ff. module to get the
     traceback where a memory block was allocated.

   - bpo-26558(26): The debug hooks on Python memory allocator *note
     PyObject_Malloc(): c83. now detect when functions are called
     without holding the GIL.

   - bpo-26516(27): Add *note PYTHONMALLOC: c7f. environment variable to
     set the Python memory allocators and/or install debug hooks.

   - bpo-26516(28): The *note PyMem_SetupDebugHooks(): c85. function can
     now also be used on Python compiled in release mode.

   - bpo-26516(29): The *note PYTHONMALLOCSTATS: 1cd0. environment
     variable can now also be used on Python compiled in release mode.
     It now has no effect if set to an empty string.

   - bpo-26516(30): In debug mode, debug hooks are now also installed on
     Python memory allocators when Python is configured without
     pymalloc.

   - bpo-26464(31): Fix str.translate() when string is ASCII and first
     replacements removes character, but next replacement uses a
     non-ASCII character or a string longer than 1 character.
     Regression introduced in Python 3.5.0.

   - bpo-22836(32): Ensure exception reports from PyErr_Display() and
     PyErr_WriteUnraisable() are sensible even when formatting them
     produces secondary errors.  This affects the reports produced by
     sys.__excepthook__() and when __del__() raises an exception.

   - bpo-26302(33): Correct behavior to reject comma as a legal
     character for cookie names.

   - bpo-26136(34): Upgrade the warning when a generator raises
     StopIteration from PendingDeprecationWarning to DeprecationWarning.
     Patch by Anish Shah.

   - bpo-26204(35): The compiler now ignores all constant statements:
     bytes, str, int, float, complex, name constants (None, False,
     True), Ellipsis and ast.Constant; not only str and int.  For
     example, ‘1.0’ is now ignored in ‘def f(): 1.0’.

   - bpo-4806(36): Avoid masking the original TypeError exception when
     using star (‘*’) unpacking in function calls.  Based on patch by
     Hagen Fürstenau and Daniel Urban.

   - bpo-26146(37): Add a new kind of AST node: ‘ast.Constant’.  It can
     be used by external AST optimizers, but the compiler does not emit
     directly such node.

   - bpo-23601(38): Sped-up allocation of dict key objects by using
     Python’s small object allocator.  (Contributed by Julian Taylor.)

   - bpo-18018(39): Import raises ImportError instead of SystemError if
     a relative import is attempted without a known parent package.

   - bpo-25843(40): When compiling code, don’t merge constants if they
     are equal but have a different types.  For example, ‘f1, f2 =
     lambda: 1, lambda: 1.0’ is now correctly compiled to two different
     functions: ‘f1()’ returns ‘1’ (‘int’) and ‘f2()’ returns ‘1.0’
     (‘float’), even if ‘1’ and ‘1.0’ are equal.

   - bpo-26107(41): The format of the ‘co_lnotab’ attribute of code
     objects changes to support negative line number delta.

   - bpo-26154(42): Add a new private _PyThreadState_UncheckedGet()
     function to get the current Python thread state, but don’t issue a
     fatal error if it is NULL. This new function must be used instead
     of accessing directly the _PyThreadState_Current variable.  The
     variable is no more exposed since Python 3.5.1 to hide the exact
     implementation of atomic C types, to avoid compiler issues.

   - bpo-25791(43): If __package__ != __spec__.parent or if neither
     __package__ or __spec__ are defined then ImportWarning is raised.

   - bpo-22995(44): [UPDATE] Comment out the one of the pickleability
     tests in _PyObject_GetState() due to regressions observed in
     Cython-based projects.

   - bpo-25961(45): Disallowed null characters in the type name.

   - bpo-25973(46): Fix segfault when an invalid nonlocal statement
     binds a name starting with two underscores.

   - bpo-22995(47): Instances of extension types with a state that
     aren’t subclasses of list or dict and haven’t implemented any
     pickle-related methods (__reduce__, __reduce_ex__, __getnewargs__,
     __getnewargs_ex__, or __getstate__), can no longer be pickled.
     Including memoryview.

   - bpo-20440(48): Massive replacing unsafe attribute setting code with
     special macro Py_SETREF.

   - bpo-25766(49): Special method __bytes__() now works in str
     subclasses.

   - bpo-25421(50): __sizeof__ methods of builtin types now use dynamic
     basic size.  This allows sys.getsize() to work correctly with their
     subclasses with __slots__ defined.

   - bpo-25709(51): Fixed problem with in-place string concatenation and
     utf-8 cache.

   - bpo-5319(52): New Py_FinalizeEx() API allowing Python to set an
     exit status of 120 on failure to flush buffered streams.

   - bpo-25485(53): telnetlib.Telnet is now a context manager.

   - bpo-24097(54): Fixed crash in object.__reduce__() if slot name is
     freed inside __getattr__.

   - bpo-24731(55): Fixed crash on converting objects with special
     methods __bytes__, __trunc__, and __float__ returning instances of
     subclasses of bytes, int, and float to subclasses of bytes, int,
     and float correspondingly.

   - bpo-25630(56): Fix a possible segfault during argument parsing in
     functions that accept filesystem paths.

   - bpo-23564(57): Fixed a partially broken sanity check in the
     _posixsubprocess internals regarding how fds_to_pass were passed to
     the child.  The bug had no actual impact as subprocess.py already
     avoided it.

   - bpo-25388(58): Fixed tokenizer crash when processing undecodable
     source code with a null byte.

   - bpo-25462(59): The hash of the key now is calculated only once in
     most operations in C implementation of OrderedDict.

   - bpo-22995(60): Default implementation of __reduce__ and
     __reduce_ex__ now rejects builtin types with not defined __new__.

   - bpo-24802(61): Avoid buffer overreads when int(), float(),
     compile(), exec() and eval() are passed bytes-like objects.  These
     objects are not necessarily terminated by a null byte, but the
     functions assumed they were.

   - bpo-25555(62): Fix parser and AST: fill lineno and col_offset of
     “arg” node when compiling AST from Python objects.

   - bpo-24726(63): Fixed a crash and leaking NULL in repr() of
     OrderedDict that was mutated by direct calls of dict methods.

   - bpo-25449(64): Iterating OrderedDict with keys with unstable hash
     now raises KeyError in C implementations as well as in Python
     implementation.

   - bpo-25395(65): Fixed crash when highly nested OrderedDict
     structures were garbage collected.

   - bpo-25401(66): Optimize bytes.fromhex() and bytearray.fromhex():
     they are now between 2x and 3.5x faster.

   - bpo-25399(67): Optimize bytearray % args using the new private
     _PyBytesWriter API. Formatting is now between 2.5 and 5 times
     faster.

   - bpo-25274(68): sys.setrecursionlimit() now raises a RecursionError
     if the new recursion limit is too low depending at the current
     recursion depth.  Modify also the “lower-water mark” formula to
     make it monotonic.  This mark is used to decide when the overflowed
     flag of the thread state is reset.

   - bpo-24402(69): Fix input() to prompt to the redirected stdout when
     sys.stdout.fileno() fails.

   - bpo-25349(70): Optimize bytes % args using the new private
     _PyBytesWriter API. Formatting is now up to 2 times faster.

   - bpo-24806(71): Prevent builtin types that are not allowed to be
     subclassed from being subclassed through multiple inheritance.

   - bpo-25301(72): The UTF-8 decoder is now up to 15 times as fast for
     error handlers: ‘ignore’, ‘replace’ and ‘surrogateescape’.

   - bpo-24848(73): Fixed a number of bugs in UTF-7 decoding of
     misformed data.

   - bpo-25267(74): The UTF-8 encoder is now up to 75 times as fast for
     error handlers: ‘ignore’, ‘replace’, ‘surrogateescape’,
     ‘surrogatepass’.  Patch co-written with Serhiy Storchaka.

   - bpo-25280(75): Import trace messages emitted in verbose (-v) mode
     are no longer formatted twice.

   - bpo-25227(76): Optimize ASCII and latin1 encoders with the
     ‘surrogateescape’ error handler: the encoders are now up to 3 times
     as fast.  Initial patch written by Serhiy Storchaka.

   - bpo-25003(77): On Solaris 11.3 or newer, os.urandom() now uses the
     getrandom() function instead of the getentropy() function.  The
     getentropy() function is blocking to generate very good quality
     entropy, os.urandom() doesn’t need such high-quality entropy.

   - bpo-9232(78): Modify Python’s grammar to allow trailing commas in
     the argument list of a function declaration.  For example, “def
     f(*, a = 3,): pass” is now legal.  Patch from Mark Dickinson.

   - bpo-24965(79): Implement PEP 498(80) “Literal String
     Interpolation”.  This allows you to embed expressions inside
     f-strings, which are converted to normal strings at run time.
     Given x=3, then f’value={x}’ == ‘value=3’.  Patch by Eric V. Smith.

   - bpo-26478(81): Fix semantic bugs when using binary operators with
     dictionary views and tuples.

   - bpo-26171(82): Fix possible integer overflow and heap corruption in
     zipimporter.get_data().

   - bpo-25660(83): Fix TAB key behaviour in REPL with readline.

   - bpo-26288(84): Optimize PyLong_AsDouble.

   - bpo-26289(85): Optimize floor and modulo division for single-digit
     longs.  Microbenchmarks show 2-2.5x improvement.  Built-in ‘divmod’
     function is now also ~10% faster.  (See also: bpo-26315(86))

   - bpo-25887(87): Raise a RuntimeError when a coroutine object is
     awaited more than once.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20041

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26168

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26991

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27039

   (5) https://bugs.python.org/issue?@action=redirect&bpo=23640

   (6) https://bugs.python.org/issue?@action=redirect&bpo=27005

   (7) https://bugs.python.org/issue?@action=redirect&bpo=18531

   (8) https://bugs.python.org/issue?@action=redirect&bpo=26811

   (9) https://bugs.python.org/issue?@action=redirect&bpo=20120

   (10) https://bugs.python.org/issue?@action=redirect&bpo=26249

   (11) https://bugs.python.org/issue?@action=redirect&bpo=26802

   (12) https://bugs.python.org/issue?@action=redirect&bpo=26659

   (13) https://bugs.python.org/issue?@action=redirect&bpo=26718

   (14) https://bugs.python.org/issue?@action=redirect&bpo=27138

   (15) https://bugs.python.org/issue?@action=redirect&bpo=27147

   (16) https://peps.python.org/pep-0420/

   (17) https://bugs.python.org/issue?@action=redirect&bpo=25339

   (18) https://bugs.python.org/issue?@action=redirect&bpo=26494

   (19) https://bugs.python.org/issue?@action=redirect&bpo=26574

   (20) https://bugs.python.org/issue?@action=redirect&bpo=26581

   (21) https://bugs.python.org/issue?@action=redirect&bpo=19711

   (22) https://bugs.python.org/issue?@action=redirect&bpo=21099

   (23) https://peps.python.org/pep-0451/

   (24) https://bugs.python.org/issue?@action=redirect&bpo=26563

   (25) https://bugs.python.org/issue?@action=redirect&bpo=26564

   (26) https://bugs.python.org/issue?@action=redirect&bpo=26558

   (27) https://bugs.python.org/issue?@action=redirect&bpo=26516

   (28) https://bugs.python.org/issue?@action=redirect&bpo=26516

   (29) https://bugs.python.org/issue?@action=redirect&bpo=26516

   (30) https://bugs.python.org/issue?@action=redirect&bpo=26516

   (31) https://bugs.python.org/issue?@action=redirect&bpo=26464

   (32) https://bugs.python.org/issue?@action=redirect&bpo=22836

   (33) https://bugs.python.org/issue?@action=redirect&bpo=26302

   (34) https://bugs.python.org/issue?@action=redirect&bpo=26136

   (35) https://bugs.python.org/issue?@action=redirect&bpo=26204

   (36) https://bugs.python.org/issue?@action=redirect&bpo=4806

   (37) https://bugs.python.org/issue?@action=redirect&bpo=26146

   (38) https://bugs.python.org/issue?@action=redirect&bpo=23601

   (39) https://bugs.python.org/issue?@action=redirect&bpo=18018

   (40) https://bugs.python.org/issue?@action=redirect&bpo=25843

   (41) https://bugs.python.org/issue?@action=redirect&bpo=26107

   (42) https://bugs.python.org/issue?@action=redirect&bpo=26154

   (43) https://bugs.python.org/issue?@action=redirect&bpo=25791

   (44) https://bugs.python.org/issue?@action=redirect&bpo=22995

   (45) https://bugs.python.org/issue?@action=redirect&bpo=25961

   (46) https://bugs.python.org/issue?@action=redirect&bpo=25973

   (47) https://bugs.python.org/issue?@action=redirect&bpo=22995

   (48) https://bugs.python.org/issue?@action=redirect&bpo=20440

   (49) https://bugs.python.org/issue?@action=redirect&bpo=25766

   (50) https://bugs.python.org/issue?@action=redirect&bpo=25421

   (51) https://bugs.python.org/issue?@action=redirect&bpo=25709

   (52) https://bugs.python.org/issue?@action=redirect&bpo=5319

   (53) https://bugs.python.org/issue?@action=redirect&bpo=25485

   (54) https://bugs.python.org/issue?@action=redirect&bpo=24097

   (55) https://bugs.python.org/issue?@action=redirect&bpo=24731

   (56) https://bugs.python.org/issue?@action=redirect&bpo=25630

   (57) https://bugs.python.org/issue?@action=redirect&bpo=23564

   (58) https://bugs.python.org/issue?@action=redirect&bpo=25388

   (59) https://bugs.python.org/issue?@action=redirect&bpo=25462

   (60) https://bugs.python.org/issue?@action=redirect&bpo=22995

   (61) https://bugs.python.org/issue?@action=redirect&bpo=24802

   (62) https://bugs.python.org/issue?@action=redirect&bpo=25555

   (63) https://bugs.python.org/issue?@action=redirect&bpo=24726

   (64) https://bugs.python.org/issue?@action=redirect&bpo=25449

   (65) https://bugs.python.org/issue?@action=redirect&bpo=25395

   (66) https://bugs.python.org/issue?@action=redirect&bpo=25401

   (67) https://bugs.python.org/issue?@action=redirect&bpo=25399

   (68) https://bugs.python.org/issue?@action=redirect&bpo=25274

   (69) https://bugs.python.org/issue?@action=redirect&bpo=24402

   (70) https://bugs.python.org/issue?@action=redirect&bpo=25349

   (71) https://bugs.python.org/issue?@action=redirect&bpo=24806

   (72) https://bugs.python.org/issue?@action=redirect&bpo=25301

   (73) https://bugs.python.org/issue?@action=redirect&bpo=24848

   (74) https://bugs.python.org/issue?@action=redirect&bpo=25267

   (75) https://bugs.python.org/issue?@action=redirect&bpo=25280

   (76) https://bugs.python.org/issue?@action=redirect&bpo=25227

   (77) https://bugs.python.org/issue?@action=redirect&bpo=25003

   (78) https://bugs.python.org/issue?@action=redirect&bpo=9232

   (79) https://bugs.python.org/issue?@action=redirect&bpo=24965

   (80) https://peps.python.org/pep-0498/

   (81) https://bugs.python.org/issue?@action=redirect&bpo=26478

   (82) https://bugs.python.org/issue?@action=redirect&bpo=26171

   (83) https://bugs.python.org/issue?@action=redirect&bpo=25660

   (84) https://bugs.python.org/issue?@action=redirect&bpo=26288

   (85) https://bugs.python.org/issue?@action=redirect&bpo=26289

   (86) https://bugs.python.org/issue?@action=redirect&bpo=26315

   (87) https://bugs.python.org/issue?@action=redirect&bpo=25887


File: python.info,  Node: Biblioteca<164>,  Next: IDLE<60>,  Prev: Núcleo e embutidos<162>,  Up: Python 3 6 0 alpha 1

1.23.97.3 Biblioteca
....................

   - bpo-27057(1): Fix os.set_inheritable() on Android, ioctl() is
     blocked by SELinux and fails with EACCESS. The function now falls
     back to fcntl().  Patch written by Michał Bednarski.

   - bpo-27014(2): Fix infinite recursion using typing.py.  Thanks to
     Kalle Tuure!

   - bpo-27031(3): Removed dummy methods in Tkinter widget classes:
     tk_menuBar() and tk_bindForTraversal().

   - bpo-14132(4): Fix urllib.request redirect handling when the target
     only has a query string.  Original fix by Ján Janech.

   - bpo-17214(5): The “urllib.request” module now percent-encodes
     non-ASCII bytes found in redirect target URLs.  Some servers send
     Location header fields with non-ASCII bytes, but “http.client”
     requires the request target to be ASCII-encodable, otherwise a
     UnicodeEncodeError is raised.  Based on patch by Christian Heimes.

   - bpo-27033(6): The default value of the decode_data parameter for
     smtpd.SMTPChannel and smtpd.SMTPServer constructors is changed to
     False.

   - bpo-27034(7): Removed deprecated class asynchat.fifo.

   - bpo-26870(8): Added readline.set_auto_history(), which can stop
     entries being automatically added to the history list.  Based on
     patch by Tyler Crompton.

   - bpo-26039(9): zipfile.ZipFile.open() can now be used to write data
     into a ZIP file, as well as for extracting data.  Patch by Thomas
     Kluyver.

   - bpo-26892(10): Honor debuglevel flag in urllib.request.HTTPHandler.
     Patch contributed by Chi Hsuan Yen.

   - bpo-22274(11): In the subprocess module, allow stderr to be
     redirected to stdout even when stdout is not redirected.  Patch by
     Akira Li.

   - bpo-26807(12): mock_open ‘files’ no longer error on readline at end
     of file.  Patch from Yolanda Robla.

   - bpo-25745(13): Fixed leaking a userptr in curses panel destructor.

   - bpo-26977(14): Removed unnecessary, and ignored, call to sum of
     squares helper in statistics.pvariance.

   - bpo-26002(15): Use bisect in statistics.median instead of a linear
     search.  Patch by Upendra Kuma.

   - bpo-25974(16): Make use of new Decimal.as_integer_ratio() method in
     statistics module.  Patch by Stefan Krah.

   - bpo-26996(17): Add secrets module as described in PEP 506(18).

   - bpo-26881(19): The modulefinder module now supports extended opcode
     arguments.

   - bpo-23815(20): Fixed crashes related to directly created instances
     of types in _tkinter and curses.panel modules.

   - bpo-17765(21): weakref.ref() no longer silently ignores keyword
     arguments.  Patch by Georg Brandl.

   - bpo-26873(22): xmlrpc now raises ResponseError on unsupported type
     tags instead of silently return incorrect result.

   - bpo-26915(23): The __contains__ methods in the collections ABCs now
     check for identity before checking equality.  This better matches
     the behavior of the concrete classes, allows sensible handling of
     NaNs, and makes it easier to reason about container invariants.

   - bpo-26711(24): Fixed the comparison of plistlib.Data with other
     types.

   - bpo-24114(25): Fix an uninitialized variable in ‘ctypes.util’.  The
     bug only occurs on SunOS when the ctypes implementation searches
     for the ‘crle’ program.  Patch by Xiang Zhang.  Tested on SunOS by
     Kees Bos.

   - bpo-26864(26): In urllib.request, change the proxy bypass host
     checking against no_proxy to be case-insensitive, and to not match
     unrelated host names that happen to have a bypassed hostname as a
     suffix.  Patch by Xiang Zhang.

   - bpo-24902(27): Print server URL on http.server startup.  Initial
     patch by Felix Kaiser.

   - bpo-25788(28): fileinput.hook_encoded() now supports an “errors”
     argument for passing to open.  Original patch by Joseph Hackman.

   - bpo-26634(29): recursive_repr() now sets __qualname__ of wrapper.
     Patch by Xiang Zhang.

   - bpo-26804(30): urllib.request will prefer lower_case proxy
     environment variables over UPPER_CASE or Mixed_Case ones.  Patch
     contributed by Hans-Peter Jansen.

   - bpo-26837(31): assertSequenceEqual() now correctly outputs
     non-stringified differing items (like bytes in the -b mode).  This
     affects assertListEqual() and assertTupleEqual().

   - bpo-26041(32): Remove “will be removed in Python 3.7” from
     deprecation messages of platform.dist() and
     platform.linux_distribution().  Patch by Kumaripaba Miyurusara
     Athukorala.

   - bpo-26822(33): itemgetter, attrgetter and methodcaller objects no
     longer silently ignore keyword arguments.

   - bpo-26733(34): Disassembling a class now disassembles class and
     static methods.  Patch by Xiang Zhang.

   - bpo-26801(35): Fix error handling in *note
     shutil.get_terminal_size(): 1142, catch *note AttributeError: 34b.
     instead of *note NameError: 43f.  Patch written by Emanuel Barry.

   - bpo-24838(36): tarfile’s ustar and gnu formats now correctly
     calculate name and link field limits for multibyte character
     encodings like utf-8.

   - bpo-26717(37): Stop encoding Latin-1-ized WSGI paths with UTF-8.
     Patch by Anthony Sottile.

   - bpo-26782(38): Add STARTUPINFO to subprocess.__all__ on Windows.

   - bpo-26404(39): Add context manager to socketserver.  Patch by Aviv
     Palivoda.

   - bpo-26735(40): Fix *note os.urandom(): 523. on Solaris 11.3 and
     newer when reading more than 1,024 bytes: call ‘getrandom()’
     multiple times with a limit of 1024 bytes per call.

   - bpo-26585(41): Eliminate http.server._quote_html() and use
     html.escape(quote=False).  Patch by Xiang Zhang.

   - bpo-26685(42): Raise OSError if closing a socket fails.

   - bpo-16329(43): Add .webm to mimetypes.types_map.  Patch by
     Giampaolo Rodola’.

   - bpo-13952(44): Add .csv to mimetypes.types_map.  Patch by Geoff
     Wilson.

   - bpo-26587(45): the site module now allows .pth files to specify
     files to be added to sys.path (e.g.  zip files).

   - bpo-25609(46): Introduce contextlib.AbstractContextManager and
     typing.ContextManager.

   - bpo-26709(47): Fixed Y2038 problem in loading binary PLists.

   - bpo-23735(48): Handle terminal resizing with Readline 6.3+ by
     installing our own SIGWINCH handler.  Patch by Eric Price.

   - bpo-25951(49): Change SSLSocket.sendall() to return None, as
     explicitly documented for plain socket objects.  Patch by Aviv
     Palivoda.

   - bpo-26586(50): In http.server, respond with “413 Request header
     fields too large” if there are too many header fields to parse,
     rather than killing the connection and raising an unhandled
     exception.  Patch by Xiang Zhang.

   - bpo-26676(51): Added missing XMLPullParser to ElementTree.__all__.

   - bpo-22854(52): Change BufferedReader.writable() and
     BufferedWriter.readable() to always return False.

   - bpo-26492(53): Exhausted iterator of array.array now conforms with
     the behavior of iterators of other mutable sequences: it lefts
     exhausted even if iterated array is extended.

   - bpo-26641(54): doctest.DocFileTest and doctest.testfile() now
     support packages (module splitted into multiple directories) for
     the package parameter.

   - bpo-25195(55): Fix a regression in mock.MagicMock.  _Call is a
     subclass of tuple (changeset 3603bae63c13 only works for classes)
     so we need to implement __ne__ ourselves.  Patch by Andrew Plummer.

   - bpo-26644(56): Raise ValueError rather than SystemError when a
     negative length is passed to SSLSocket.recv() or read().

   - bpo-23804(57): Fix SSL recv(0) and read(0) methods to return zero
     bytes instead of up to 1024.

   - bpo-26616(58): Fixed a bug in datetime.astimezone() method.

   - bpo-26637(59): The *note importlib: 77. module now emits an *note
     ImportError: 419. rather than a *note TypeError: 2c3. if *note
     __import__(): 8da. is tried during the Python shutdown process but
     *note sys.path: 3b4. is already cleared (set to ‘None’).

   - bpo-21925(60): *note warnings.formatwarning(): 1b8d. now catches
     exceptions when calling *note linecache.getline(): e50. and *note
     tracemalloc.get_object_traceback(): 1cd2. to be able to log *note
     ResourceWarning: 244. emitted late during the Python shutdown
     process.

   - bpo-23848(61): On Windows, faulthandler.enable() now also installs
     an exception handler to dump the traceback of all Python threads on
     any Windows exception, not only on UNIX signals (SIGSEGV, SIGFPE,
     SIGABRT).

   - bpo-26530(62): Add C functions ‘_PyTraceMalloc_Track()’ and
     ‘_PyTraceMalloc_Untrack()’ to track memory blocks using the *note
     tracemalloc: ff. module.  Add ‘_PyTraceMalloc_GetTraceback()’ to
     get the traceback of an object.

   - bpo-26588(63): The _tracemalloc now supports tracing memory
     allocations of multiple address spaces (domains).

   - bpo-24266(64): Ctrl+C during Readline history search now cancels
     the search mode when compiled with Readline 7.

   - bpo-26590(65): Implement a safe finalizer for the _socket.socket
     type.  It now releases the GIL to close the socket.

   - bpo-18787(66): spwd.getspnam() now raises a PermissionError if the
     user doesn’t have privileges.

   - bpo-26560(67): Avoid potential ValueError in
     BaseHandler.start_response.  Initial patch by Peter Inglesby.

   - bpo-26567(68): Add a new function *note PyErr_ResourceWarning():
     d39. function to pass the destroyed object.  Add a 'source'
     attribute to ‘warnings.WarningMessage’.  Add
     warnings._showwarnmsg() which uses tracemalloc to get the traceback
     where source object was allocated.

   - bpo-26569(69): Fix *note pyclbr.readmodule(): 82e. and *note
     pyclbr.readmodule_ex(): 82f. to support importing packages.

   - bpo-26499(70): Account for remaining Content-Length in
     HTTPResponse.readline() and read1().  Based on patch by Silent
     Ghost.  Also document that HTTPResponse now supports these methods.

   - bpo-25320(71): Handle sockets in directories unittest discovery is
     scanning.  Patch from Victor van den Elzen.

   - bpo-16181(72): cookiejar.http2time() now returns None if year is
     higher than datetime.MAXYEAR.

   - bpo-26513(73): Fixes platform module detection of Windows Server

   - bpo-23718(74): Fixed parsing time in week 0 before Jan 1.  Original
     patch by Tamás Bence Gedai.

   - bpo-26323(75): Add Mock.assert_called() and
     Mock.assert_called_once() methods to unittest.mock.  Patch written
     by Amit Saha.

   - bpo-20589(76): Invoking Path.owner() and Path.group() on Windows
     now raise NotImplementedError instead of ImportError.

   - bpo-26177(77): Fixed the keys() method for Canvas and Scrollbar
     widgets.

   - bpo-15068(78): Got rid of excessive buffering in fileinput.  The
     bufsize parameter is now deprecated and ignored.

   - bpo-19475(79): Added an optional argument timespec to the datetime
     isoformat() method to choose the precision of the time component.

   - bpo-2202(80): Fix UnboundLocalError in
     AbstractDigestAuthHandler.get_algorithm_impls.  Initial patch by
     Mathieu Dupuy.

   - bpo-26167(81): Minimized overhead in copy.copy() and
     copy.deepcopy().  Optimized copying and deepcopying bytearrays,
     NotImplemented, slices, short lists, tuples, dicts, sets.

   - bpo-25718(82): Fixed pickling and copying the accumulate() iterator
     with total is None.

   - bpo-26475(83): Fixed debugging output for regular expressions with
     the (?x) flag.

   - bpo-26482(84): Allowed pickling recursive dequeues.

   - bpo-26335(85): Make mmap.write() return the number of bytes written
     like other write methods.  Patch by Jakub Stasiak.

   - bpo-26457(86): Fixed the subnets() methods in IP network classes
     for the case when resulting prefix length is equal to maximal
     prefix length.  Based on patch by Xiang Zhang.

   - bpo-26385(87): Remove the file if the internal open() call in
     NamedTemporaryFile() fails.  Patch by Silent Ghost.

   - bpo-26402(88): Fix XML-RPC client to retry when the server shuts
     down a persistent connection.  This was a regression related to the
     new http.client.RemoteDisconnected exception in 3.5.0a4.

   - bpo-25913(89): Leading ‘<~’ is optional now in base64.a85decode()
     with adobe=True.  Patch by Swati Jaiswal.

   - bpo-26186(90): Remove an invalid type check in
     importlib.util.LazyLoader.

   - bpo-26367(91): importlib.__import__() raises ImportError like
     builtins.__import__() when ‘level’ is specified but without an
     accompanying package specified.

   - bpo-26309(92): In the “socketserver” module, shut down the request
     (closing the connected socket) when verify_request() returns false.
     Patch by Aviv Palivoda.

   - bpo-23430(93): Change the socketserver module to only catch
     exceptions raised from a request handler that are derived from
     Exception (instead of BaseException).  Therefore SystemExit and
     KeyboardInterrupt no longer trigger the handle_error() method, and
     will now to stop a single-threaded server.

   - bpo-25995(94): os.walk() no longer uses FDs proportional to the
     tree depth.

   - bpo-25994(95): Added the close() method and the support of the
     context manager protocol for the os.scandir() iterator.

   - bpo-23992(96): multiprocessing: make MapResult not fail-fast upon
     exception.

   - bpo-26243(97): Support keyword arguments to zlib.compress().  Patch
     by Aviv Palivoda.

   - bpo-26117(98): The os.scandir() iterator now closes file descriptor
     not only when the iteration is finished, but when it was failed
     with error.

   - bpo-25949(99): __dict__ for an OrderedDict instance is now created
     only when needed.

   - bpo-25911(100): Restored support of bytes paths in os.walk() on
     Windows.

   - bpo-26045(101): Add UTF-8 suggestion to error message when posting
     a non-Latin-1 string with http.client.

   - bpo-26039(102): Added zipfile.ZipInfo.from_file() and
     zipinfo.ZipInfo.is_dir().  Patch by Thomas Kluyver.

   - bpo-12923(103): Reset FancyURLopener’s redirect counter even if
     there is an exception.  Based on patches by Brian Brazil and Daniel
     Rocco.

   - bpo-25945(104): Fixed a crash when unpickle the functools.partial
     object with wrong state.  Fixed a leak in failed functools.partial
     constructor.  “args” and “keywords” attributes of functools.partial
     have now always types tuple and dict correspondingly.

   - bpo-26202(105): copy.deepcopy() now correctly copies range()
     objects with non-atomic attributes.

   - bpo-23076(106): Path.glob() now raises a ValueError if it’s called
     with an invalid pattern.  Patch by Thomas Nyberg.

   - bpo-19883(107): Fixed possible integer overflows in zipimport.

   - bpo-26227(108): On Windows, getnameinfo(), gethostbyaddr() and
     gethostbyname_ex() functions of the socket module now decode the
     hostname from the ANSI code page rather than UTF-8.

   - bpo-26099(109): The site module now writes an error into stderr if
     sitecustomize module can be imported but executing the module raise
     an ImportError.  Same change for usercustomize.

   - bpo-26147(110): xmlrpc now works with strings not encodable with
     used non-UTF-8 encoding.

   - bpo-25935(111): Garbage collector now breaks reference loops with
     OrderedDict.

   - bpo-16620(112): Fixed AttributeError in msilib.Directory.glob().

   - bpo-26013(113): Added compatibility with broken protocol 2 pickles
     created in old Python 3 versions (3.4.3 and lower).

   - bpo-26129(114): Deprecated accepting non-integers in
     grp.getgrgid().

   - bpo-25850(115): Use cross-compilation by default for 64-bit
     Windows.

   - bpo-25822(116): Add docstrings to the fields of urllib.parse
     results.  Patch contributed by Swati Jaiswal.

   - bpo-22642(117): Convert trace module option parsing mechanism to
     argparse.  Patch contributed by SilentGhost.

   - bpo-24705(118): Fix sysconfig._parse_makefile not expanding ${}
     vars appearing before $() vars.

   - bpo-26069(119): Remove the deprecated apis in the trace module.

   - bpo-22138(120): Fix mock.patch behavior when patching descriptors.
     Restore original values after patching.  Patch contributed by Sean
     McCully.

   - bpo-25672(121): In the ssl module, enable the
     SSL_MODE_RELEASE_BUFFERS mode option if it is safe to do so.

   - bpo-26012(122): Don’t traverse into symlinks for ‘**’ pattern in
     pathlib.Path.[r]glob().

   - bpo-24120(123): Ignore PermissionError when traversing a tree with
     pathlib.Path.[r]glob().  Patch by Ulrich Petri.

   - bpo-21815(124): Accept ] characters in the data portion of imap
     responses, in order to handle the flags with square brackets
     accepted and produced by servers such as gmail.

   - bpo-25447(125): fileinput now uses sys.stdin as-is if it does not
     have a buffer attribute (restores backward compatibility).

   - bpo-25971(126): Optimized creating Fractions from floats by 2 times
     and from Decimals by 3 times.

   - bpo-25802(127): Document as deprecated the remaining
     implementations of importlib.abc.Loader.load_module().

   - bpo-25928(128): Add Decimal.as_integer_ratio().

   - bpo-25447(129): Copying the lru_cache() wrapper object now always
     works, independently from the type of the wrapped object (by
     returning the original object unchanged).

   - bpo-25768(130): Have the functions in compileall return booleans
     instead of ints and add proper documentation and tests for the
     return values.

   - bpo-24103(131): Fixed possible use after free in
     ElementTree.XMLPullParser.

   - bpo-25860(132): os.fwalk() no longer skips remaining directories
     when error occurs.  Original patch by Samson Lee.

   - bpo-25914(133): Fixed and simplified OrderedDict.__sizeof__.

   - bpo-25869(134): Optimized deepcopying ElementTree; it is now 20
     times faster.

   - bpo-25873(135): Optimized iterating ElementTree.  Iterating
     elements Element.iter() is now 40% faster, iterating text
     Element.itertext() is now up to 2.5 times faster.

   - bpo-25902(136): Fixed various refcount issues in ElementTree
     iteration.

   - bpo-22227(137): The TarFile iterator is reimplemented using
     generator.  This implementation is simpler that using class.

   - bpo-25638(138): Optimized ElementTree.iterparse(); it is now 2x
     faster.  Optimized ElementTree parsing; it is now 10% faster.

   - bpo-25761(139): Improved detecting errors in broken pickle data.

   - bpo-25717(140): Restore the previous behaviour of tolerating most
     fstat() errors when opening files.  This was a regression in 3.5a1,
     and stopped anonymous temporary files from working in special
     cases.

   - bpo-24903(141): Fix regression in number of arguments compileall
     accepts when ‘-d’ is specified.  The check on the number of
     arguments has been dropped completely as it never worked correctly
     anyway.

   - bpo-25764(142): In the subprocess module, preserve any exception
     caused by fork() failure when preexec_fn is used.

   - bpo-25771(143): Tweak the exception message for
     importlib.util.resolve_name() when ‘package’ isn’t specified but
     necessary.

   - bpo-6478(144): _strptime’s regexp cache now is reset after changing
     timezone with time.tzset().

   - bpo-14285(145): When executing a package with the “python -m
     package” option, and package initialization fails, a proper
     traceback is now reported.  The “runpy” module now lets exceptions
     from package initialization pass back to the caller, rather than
     raising ImportError.

   - bpo-19771(146): Also in runpy and the “-m” option, omit the
     irrelevant message “… is a package and cannot be directly executed”
     if the package could not even be initialized (e.g.  due to a bad
     ‘*.pyc’ file).

   - bpo-25177(147): Fixed problem with the mean of very small and very
     large numbers.  As a side effect, statistics.mean and
     statistics.variance should be significantly faster.

   - bpo-25718(148): Fixed copying object with state with boolean value
     is false.

   - bpo-10131(149): Fixed deep copying of minidom documents.  Based on
     patch by Marian Ganisin.

   - bpo-7990(150): dir() on ElementTree.Element now lists properties:
     “tag”, “text”, “tail” and “attrib”.  Original patch by Santoso
     Wijaya.

   - bpo-25725(151): Fixed a reference leak in pickle.loads() when
     unpickling invalid data including tuple instructions.

   - bpo-25663(152): In the Readline completer, avoid listing duplicate
     global names, and search the global namespace before searching
     builtins.

   - bpo-25688(153): Fixed file leak in ElementTree.iterparse() raising
     an error.

   - bpo-23914(154): Fixed SystemError raised by unpickler on broken
     pickle data.

   - bpo-25691(155): Fixed crash on deleting ElementTree.Element
     attributes.

   - bpo-25624(156): ZipFile now always writes a ZIP_STORED header for
     directory entries.  Patch by Dingyuan Wang.

   - bpo-25626(157): Change three zlib functions to accept sizes that
     fit in Py_ssize_t, but internally cap those sizes to UINT_MAX. This
     resolves a regression in 3.5 where GzipFile.read() failed to read
     chunks larger than 2 or 4 GiB. The change affects the
     zlib.Decompress.decompress() max_length parameter, the
     zlib.decompress() bufsize parameter, and the
     zlib.Decompress.flush() length parameter.

   - bpo-25583(158): Avoid incorrect errors raised by
     os.makedirs(exist_ok=True) when the OS gives priority to errors
     such as EACCES over EEXIST.

   - bpo-25593(159): Change semantics of EventLoop.stop() in asyncio.

   - bpo-6973(160): When we know a subprocess.Popen process has died, do
     not allow the send_signal(), terminate(), or kill() methods to do
     anything as they could potentially signal a different process.

   - bpo-23883(161): Added missing APIs to __all__ to match the
     documented APIs for the following modules: calendar, csv, enum,
     fileinput, ftplib, logging, optparse, tarfile, threading and wave.
     Also added a test.support.check__all__() helper.  Patches by Jacek
     Kołodziej, Mauro S. M. Rodrigues and Joel Taddei.

   - bpo-25590(162): In the Readline completer, only call getattr() once
     per attribute.  Also complete names of attributes such as
     properties and slots which are listed by dir() but not yet created
     on an instance.

   - bpo-25498(163): Fix a crash when garbage-collecting ctypes objects
     created by wrapping a memoryview.  This was a regression made in
     3.5a1.  Based on patch by Eryksun.

   - bpo-25584(164): Added “escape” to the __all__ list in the glob
     module.

   - bpo-25584(165): Fixed recursive glob() with patterns starting with
     ‘**’.

   - bpo-25446(166): Fix regression in smtplib’s AUTH LOGIN support.

   - bpo-18010(167): Fix the pydoc web server’s module search function
     to handle exceptions from importing packages.

   - bpo-25554(168): Got rid of circular references in regular
     expression parsing.

   - bpo-18973(169): Command-line interface of the calendar module now
     uses argparse instead of optparse.

   - bpo-25510(170): fileinput.FileInput.readline() now returns b’’
     instead of ‘’ at the end if the FileInput was opened with binary
     mode.  Patch by Ryosuke Ito.

   - bpo-25503(171): Fixed inspect.getdoc() for inherited docstrings of
     properties.  Original patch by John Mark Vandenberg.

   - bpo-25515(172): Always use os.urandom as a source of randomness in
     uuid.uuid4.

   - bpo-21827(173): Corrigido textwrap.dedent() para o caso em que o
     maior espaço em branco comum seja uma substring do menor espaço em
     branco inicial.  Com base no 'patch' de Robert Li.

   - bpo-25447(174): The lru_cache() wrapper objects now can be copied
     and pickled (by returning the original object unchanged).

   - bpo-25390(175): typing: Don’t crash on Union[str, Pattern].

   - bpo-25441(176): asyncio: Raise error from drain() when socket is
     closed.

   - bpo-25410(177): Cleaned up and fixed minor bugs in C implementation
     of OrderedDict.

   - bpo-25411(178): Improved Unicode support in SMTPHandler through
     better use of the email package.  Thanks to user simon04 for the
     patch.

   - Move the imp module from a PendingDeprecationWarning to
     DeprecationWarning.

   - bpo-25407(179): Remove mentions of the formatter module being
     removed in Python 3.6.

   - bpo-25406(180): Fixed a bug in C implementation of
     OrderedDict.move_to_end() that caused segmentation fault or hang in
     iterating after moving several items to the start of ordered dict.

   - bpo-25382(181): pickletools.dis() now outputs implicit memo index
     for the MEMOIZE opcode.

   - bpo-25357(182): Add an optional newline parameter to
     binascii.b2a_base64().  base64.b64encode() uses it to avoid a
     memory copy.

   - bpo-24164(183): Objects that need calling ‘__new__’ with keyword
     arguments, can now be pickled using pickle protocols older than
     protocol version 4.

   - bpo-25364(184): zipfile now works in threads disabled builds.

   - bpo-25328(185): smtpd’s SMTPChannel now correctly raises a
     ValueError if both decode_data and enable_SMTPUTF8 are set to true.

   - bpo-16099(186): RobotFileParser now supports Crawl-delay and
     Request-rate extensions.  Patch by Nikolay Bogoychev.

   - bpo-25316(187): distutils raises OSError instead of
     DistutilsPlatformError when MSVC is not installed.

   - bpo-25380(188): Fixed protocol for the STACK_GLOBAL opcode in
     pickletools.opcodes.

   - bpo-23972(189): Updates asyncio datagram create method allowing
     reuseport and reuseaddr socket options to be set prior to binding
     the socket.  Mirroring the existing asyncio create_server method
     the reuseaddr option for datagram sockets defaults to True if the
     O/S is ‘posix’ (except if the platform is Cygwin).  Patch by Chris
     Laws.

   - bpo-25304(190): Add asyncio.run_coroutine_threadsafe().  This lets
     you submit a coroutine to a loop from another thread, returning a
     concurrent.futures.Future.  By Vincent Michel.

   - bpo-25232(191): Fix CGIRequestHandler to split the query from the
     URL at the first question mark (?)  rather than the last.  Patch
     from Xiang Zhang.

   - bpo-24657(192): Prevent CGIRequestHandler from collapsing slashes
     in the query part of the URL as if it were a path.  Patch from
     Xiang Zhang.

   - bpo-25287(193): Don’t add crypt.METHOD_CRYPT to crypt.methods if
     it’s not supported.  Check if it is supported, it may not be
     supported on OpenBSD for example.

   - bpo-23600(194): Default implementation of tzinfo.fromutc() was
     returning wrong results in some cases.

   - bpo-25203(195): Failed readline.set_completer_delims() no longer
     left the module in inconsistent state.

   - bpo-25011(196): rlcompleter now omits private and special attribute
     names unless the prefix starts with underscores.

   - bpo-25209(197): rlcompleter now can add a space or a colon after
     completed keyword.

   - bpo-22241(198): timezone.utc name is now plain ‘UTC’, not
     ‘UTC-00:00’.

   - bpo-23517(199): fromtimestamp() and utcfromtimestamp() methods of
     datetime.datetime now round microseconds to nearest with ties going
     to nearest even integer (ROUND_HALF_EVEN), as round(float), instead
     of rounding towards -Infinity (ROUND_FLOOR).

   - bpo-23552(200): Timeit now warns when there is substantial (4x)
     variance between best and worst times.  Patch from Serhiy
     Storchaka.

   - bpo-24633(201): site-packages/README -> README.txt.

   - bpo-24879(202): help() and pydoc can now list named tuple fields in
     the order they were defined rather than alphabetically.  The
     ordering is determined by the _fields attribute if present.

   - bpo-24874(203): Improve speed of itertools.cycle() and make its
     pickle more compact.

   - Fix crash in itertools.cycle.__setstate__() when the first argument
     wasn’t a list.

   - bpo-20059(204): urllib.parse raises ValueError on all invalid
     ports.  Patch by Martin Panter.

   - bpo-24360(205): Improve __repr__ of argparse.Namespace() for
     invalid identifiers.  Patch by Matthias Bussonnier.

   - bpo-23426(206): run_setup was broken in distutils.  Patch from
     Alexander Belopolsky.

   - bpo-13938(207): 2to3 converts StringTypes to a tuple.  Patch from
     Mark Hammond.

   - bpo-2091(208): open() accepted a ‘U’ mode string containing ‘+’,
     but ‘U’ can only be used with ‘r’.  Patch from Jeff Balogh and John
     O’Connor.

   - bpo-8585(209): improved tests for zipimporter2.  Patch from Mark
     Lawrence.

   - bpo-18622(210): unittest.mock.mock_open().reset_mock would recurse
     infinitely.  Patch from Nicola Palumbo and Laurent De Buyst.

   - bpo-24426(211): Fast searching optimization in regular expressions
     now works for patterns that starts with capturing groups.  Fast
     searching optimization now can’t be disabled at compile time.

   - bpo-23661(212): unittest.mock side_effects can now be exceptions
     again.  This was a regression vs Python 3.4.  Patch from Ignacio
     Rossi

   - bpo-13248(213): Remove deprecated inspect.getmoduleinfo function.

   - bpo-25578(214): Fix (another) memory leak in
     SSLSocket.getpeercer().

   - bpo-25530(215): Disable the vulnerable SSLv3 protocol by default
     when creating ssl.SSLContext.

   - bpo-25569(216): Fix memory leak in SSLSocket.getpeercert().

   - bpo-25471(217): Sockets returned from accept() shouldn’t appear to
     be nonblocking.

   - bpo-25319(218): When threading.Event is reinitialized, the
     underlying condition should use a regular lock rather than a
     recursive lock.

   - Skip getaddrinfo if host is already resolved.  Patch by A. Jesse
     Jiryu Davis.

   - bpo-26050(219): Add asyncio.StreamReader.readuntil() method.  Patch
     by Марк Коренберг.

   - bpo-25924(220): Avoid unnecessary serialization of getaddrinfo(3)
     calls on OS X versions 10.5 or higher.  Original patch by A. Jesse
     Jiryu Davis.

   - bpo-26406(221): Avoid unnecessary serialization of getaddrinfo(3)
     calls on current versions of OpenBSD and NetBSD. Patch by A. Jesse
     Jiryu Davis.

   - bpo-26848(222): Fix asyncio/subprocess.communicate() to handle
     empty input.  Patch by Jack O’Connor.

   - bpo-27040(223): Add loop.get_exception_handler method

   - bpo-27041(224): asyncio: Add loop.create_future method

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27057

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27014

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27031

   (4) https://bugs.python.org/issue?@action=redirect&bpo=14132

   (5) https://bugs.python.org/issue?@action=redirect&bpo=17214

   (6) https://bugs.python.org/issue?@action=redirect&bpo=27033

   (7) https://bugs.python.org/issue?@action=redirect&bpo=27034

   (8) https://bugs.python.org/issue?@action=redirect&bpo=26870

   (9) https://bugs.python.org/issue?@action=redirect&bpo=26039

   (10) https://bugs.python.org/issue?@action=redirect&bpo=26892

   (11) https://bugs.python.org/issue?@action=redirect&bpo=22274

   (12) https://bugs.python.org/issue?@action=redirect&bpo=26807

   (13) https://bugs.python.org/issue?@action=redirect&bpo=25745

   (14) https://bugs.python.org/issue?@action=redirect&bpo=26977

   (15) https://bugs.python.org/issue?@action=redirect&bpo=26002

   (16) https://bugs.python.org/issue?@action=redirect&bpo=25974

   (17) https://bugs.python.org/issue?@action=redirect&bpo=26996

   (18) https://peps.python.org/pep-0506/

   (19) https://bugs.python.org/issue?@action=redirect&bpo=26881

   (20) https://bugs.python.org/issue?@action=redirect&bpo=23815

   (21) https://bugs.python.org/issue?@action=redirect&bpo=17765

   (22) https://bugs.python.org/issue?@action=redirect&bpo=26873

   (23) https://bugs.python.org/issue?@action=redirect&bpo=26915

   (24) https://bugs.python.org/issue?@action=redirect&bpo=26711

   (25) https://bugs.python.org/issue?@action=redirect&bpo=24114

   (26) https://bugs.python.org/issue?@action=redirect&bpo=26864

   (27) https://bugs.python.org/issue?@action=redirect&bpo=24902

   (28) https://bugs.python.org/issue?@action=redirect&bpo=25788

   (29) https://bugs.python.org/issue?@action=redirect&bpo=26634

   (30) https://bugs.python.org/issue?@action=redirect&bpo=26804

   (31) https://bugs.python.org/issue?@action=redirect&bpo=26837

   (32) https://bugs.python.org/issue?@action=redirect&bpo=26041

   (33) https://bugs.python.org/issue?@action=redirect&bpo=26822

   (34) https://bugs.python.org/issue?@action=redirect&bpo=26733

   (35) https://bugs.python.org/issue?@action=redirect&bpo=26801

   (36) https://bugs.python.org/issue?@action=redirect&bpo=24838

   (37) https://bugs.python.org/issue?@action=redirect&bpo=26717

   (38) https://bugs.python.org/issue?@action=redirect&bpo=26782

   (39) https://bugs.python.org/issue?@action=redirect&bpo=26404

   (40) https://bugs.python.org/issue?@action=redirect&bpo=26735

   (41) https://bugs.python.org/issue?@action=redirect&bpo=26585

   (42) https://bugs.python.org/issue?@action=redirect&bpo=26685

   (43) https://bugs.python.org/issue?@action=redirect&bpo=16329

   (44) https://bugs.python.org/issue?@action=redirect&bpo=13952

   (45) https://bugs.python.org/issue?@action=redirect&bpo=26587

   (46) https://bugs.python.org/issue?@action=redirect&bpo=25609

   (47) https://bugs.python.org/issue?@action=redirect&bpo=26709

   (48) https://bugs.python.org/issue?@action=redirect&bpo=23735

   (49) https://bugs.python.org/issue?@action=redirect&bpo=25951

   (50) https://bugs.python.org/issue?@action=redirect&bpo=26586

   (51) https://bugs.python.org/issue?@action=redirect&bpo=26676

   (52) https://bugs.python.org/issue?@action=redirect&bpo=22854

   (53) https://bugs.python.org/issue?@action=redirect&bpo=26492

   (54) https://bugs.python.org/issue?@action=redirect&bpo=26641

   (55) https://bugs.python.org/issue?@action=redirect&bpo=25195

   (56) https://bugs.python.org/issue?@action=redirect&bpo=26644

   (57) https://bugs.python.org/issue?@action=redirect&bpo=23804

   (58) https://bugs.python.org/issue?@action=redirect&bpo=26616

   (59) https://bugs.python.org/issue?@action=redirect&bpo=26637

   (60) https://bugs.python.org/issue?@action=redirect&bpo=21925

   (61) https://bugs.python.org/issue?@action=redirect&bpo=23848

   (62) https://bugs.python.org/issue?@action=redirect&bpo=26530

   (63) https://bugs.python.org/issue?@action=redirect&bpo=26588

   (64) https://bugs.python.org/issue?@action=redirect&bpo=24266

   (65) https://bugs.python.org/issue?@action=redirect&bpo=26590

   (66) https://bugs.python.org/issue?@action=redirect&bpo=18787

   (67) https://bugs.python.org/issue?@action=redirect&bpo=26560

   (68) https://bugs.python.org/issue?@action=redirect&bpo=26567

   (69) https://bugs.python.org/issue?@action=redirect&bpo=26569

   (70) https://bugs.python.org/issue?@action=redirect&bpo=26499

   (71) https://bugs.python.org/issue?@action=redirect&bpo=25320

   (72) https://bugs.python.org/issue?@action=redirect&bpo=16181

   (73) https://bugs.python.org/issue?@action=redirect&bpo=26513

   (74) https://bugs.python.org/issue?@action=redirect&bpo=23718

   (75) https://bugs.python.org/issue?@action=redirect&bpo=26323

   (76) https://bugs.python.org/issue?@action=redirect&bpo=20589

   (77) https://bugs.python.org/issue?@action=redirect&bpo=26177

   (78) https://bugs.python.org/issue?@action=redirect&bpo=15068

   (79) https://bugs.python.org/issue?@action=redirect&bpo=19475

   (80) https://bugs.python.org/issue?@action=redirect&bpo=2202

   (81) https://bugs.python.org/issue?@action=redirect&bpo=26167

   (82) https://bugs.python.org/issue?@action=redirect&bpo=25718

   (83) https://bugs.python.org/issue?@action=redirect&bpo=26475

   (84) https://bugs.python.org/issue?@action=redirect&bpo=26482

   (85) https://bugs.python.org/issue?@action=redirect&bpo=26335

   (86) https://bugs.python.org/issue?@action=redirect&bpo=26457

   (87) https://bugs.python.org/issue?@action=redirect&bpo=26385

   (88) https://bugs.python.org/issue?@action=redirect&bpo=26402

   (89) https://bugs.python.org/issue?@action=redirect&bpo=25913

   (90) https://bugs.python.org/issue?@action=redirect&bpo=26186

   (91) https://bugs.python.org/issue?@action=redirect&bpo=26367

   (92) https://bugs.python.org/issue?@action=redirect&bpo=26309

   (93) https://bugs.python.org/issue?@action=redirect&bpo=23430

   (94) https://bugs.python.org/issue?@action=redirect&bpo=25995

   (95) https://bugs.python.org/issue?@action=redirect&bpo=25994

   (96) https://bugs.python.org/issue?@action=redirect&bpo=23992

   (97) https://bugs.python.org/issue?@action=redirect&bpo=26243

   (98) https://bugs.python.org/issue?@action=redirect&bpo=26117

   (99) https://bugs.python.org/issue?@action=redirect&bpo=25949

   (100) https://bugs.python.org/issue?@action=redirect&bpo=25911

   (101) https://bugs.python.org/issue?@action=redirect&bpo=26045

   (102) https://bugs.python.org/issue?@action=redirect&bpo=26039

   (103) https://bugs.python.org/issue?@action=redirect&bpo=12923

   (104) https://bugs.python.org/issue?@action=redirect&bpo=25945

   (105) https://bugs.python.org/issue?@action=redirect&bpo=26202

   (106) https://bugs.python.org/issue?@action=redirect&bpo=23076

   (107) https://bugs.python.org/issue?@action=redirect&bpo=19883

   (108) https://bugs.python.org/issue?@action=redirect&bpo=26227

   (109) https://bugs.python.org/issue?@action=redirect&bpo=26099

   (110) https://bugs.python.org/issue?@action=redirect&bpo=26147

   (111) https://bugs.python.org/issue?@action=redirect&bpo=25935

   (112) https://bugs.python.org/issue?@action=redirect&bpo=16620

   (113) https://bugs.python.org/issue?@action=redirect&bpo=26013

   (114) https://bugs.python.org/issue?@action=redirect&bpo=26129

   (115) https://bugs.python.org/issue?@action=redirect&bpo=25850

   (116) https://bugs.python.org/issue?@action=redirect&bpo=25822

   (117) https://bugs.python.org/issue?@action=redirect&bpo=22642

   (118) https://bugs.python.org/issue?@action=redirect&bpo=24705

   (119) https://bugs.python.org/issue?@action=redirect&bpo=26069

   (120) https://bugs.python.org/issue?@action=redirect&bpo=22138

   (121) https://bugs.python.org/issue?@action=redirect&bpo=25672

   (122) https://bugs.python.org/issue?@action=redirect&bpo=26012

   (123) https://bugs.python.org/issue?@action=redirect&bpo=24120

   (124) https://bugs.python.org/issue?@action=redirect&bpo=21815

   (125) https://bugs.python.org/issue?@action=redirect&bpo=25447

   (126) https://bugs.python.org/issue?@action=redirect&bpo=25971

   (127) https://bugs.python.org/issue?@action=redirect&bpo=25802

   (128) https://bugs.python.org/issue?@action=redirect&bpo=25928

   (129) https://bugs.python.org/issue?@action=redirect&bpo=25447

   (130) https://bugs.python.org/issue?@action=redirect&bpo=25768

   (131) https://bugs.python.org/issue?@action=redirect&bpo=24103

   (132) https://bugs.python.org/issue?@action=redirect&bpo=25860

   (133) https://bugs.python.org/issue?@action=redirect&bpo=25914

   (134) https://bugs.python.org/issue?@action=redirect&bpo=25869

   (135) https://bugs.python.org/issue?@action=redirect&bpo=25873

   (136) https://bugs.python.org/issue?@action=redirect&bpo=25902

   (137) https://bugs.python.org/issue?@action=redirect&bpo=22227

   (138) https://bugs.python.org/issue?@action=redirect&bpo=25638

   (139) https://bugs.python.org/issue?@action=redirect&bpo=25761

   (140) https://bugs.python.org/issue?@action=redirect&bpo=25717

   (141) https://bugs.python.org/issue?@action=redirect&bpo=24903

   (142) https://bugs.python.org/issue?@action=redirect&bpo=25764

   (143) https://bugs.python.org/issue?@action=redirect&bpo=25771

   (144) https://bugs.python.org/issue?@action=redirect&bpo=6478

   (145) https://bugs.python.org/issue?@action=redirect&bpo=14285

   (146) https://bugs.python.org/issue?@action=redirect&bpo=19771

   (147) https://bugs.python.org/issue?@action=redirect&bpo=25177

   (148) https://bugs.python.org/issue?@action=redirect&bpo=25718

   (149) https://bugs.python.org/issue?@action=redirect&bpo=10131

   (150) https://bugs.python.org/issue?@action=redirect&bpo=7990

   (151) https://bugs.python.org/issue?@action=redirect&bpo=25725

   (152) https://bugs.python.org/issue?@action=redirect&bpo=25663

   (153) https://bugs.python.org/issue?@action=redirect&bpo=25688

   (154) https://bugs.python.org/issue?@action=redirect&bpo=23914

   (155) https://bugs.python.org/issue?@action=redirect&bpo=25691

   (156) https://bugs.python.org/issue?@action=redirect&bpo=25624

   (157) https://bugs.python.org/issue?@action=redirect&bpo=25626

   (158) https://bugs.python.org/issue?@action=redirect&bpo=25583

   (159) https://bugs.python.org/issue?@action=redirect&bpo=25593

   (160) https://bugs.python.org/issue?@action=redirect&bpo=6973

   (161) https://bugs.python.org/issue?@action=redirect&bpo=23883

   (162) https://bugs.python.org/issue?@action=redirect&bpo=25590

   (163) https://bugs.python.org/issue?@action=redirect&bpo=25498

   (164) https://bugs.python.org/issue?@action=redirect&bpo=25584

   (165) https://bugs.python.org/issue?@action=redirect&bpo=25584

   (166) https://bugs.python.org/issue?@action=redirect&bpo=25446

   (167) https://bugs.python.org/issue?@action=redirect&bpo=18010

   (168) https://bugs.python.org/issue?@action=redirect&bpo=25554

   (169) https://bugs.python.org/issue?@action=redirect&bpo=18973

   (170) https://bugs.python.org/issue?@action=redirect&bpo=25510

   (171) https://bugs.python.org/issue?@action=redirect&bpo=25503

   (172) https://bugs.python.org/issue?@action=redirect&bpo=25515

   (173) https://bugs.python.org/issue?@action=redirect&bpo=21827

   (174) https://bugs.python.org/issue?@action=redirect&bpo=25447

   (175) https://bugs.python.org/issue?@action=redirect&bpo=25390

   (176) https://bugs.python.org/issue?@action=redirect&bpo=25441

   (177) https://bugs.python.org/issue?@action=redirect&bpo=25410

   (178) https://bugs.python.org/issue?@action=redirect&bpo=25411

   (179) https://bugs.python.org/issue?@action=redirect&bpo=25407

   (180) https://bugs.python.org/issue?@action=redirect&bpo=25406

   (181) https://bugs.python.org/issue?@action=redirect&bpo=25382

   (182) https://bugs.python.org/issue?@action=redirect&bpo=25357

   (183) https://bugs.python.org/issue?@action=redirect&bpo=24164

   (184) https://bugs.python.org/issue?@action=redirect&bpo=25364

   (185) https://bugs.python.org/issue?@action=redirect&bpo=25328

   (186) https://bugs.python.org/issue?@action=redirect&bpo=16099

   (187) https://bugs.python.org/issue?@action=redirect&bpo=25316

   (188) https://bugs.python.org/issue?@action=redirect&bpo=25380

   (189) https://bugs.python.org/issue?@action=redirect&bpo=23972

   (190) https://bugs.python.org/issue?@action=redirect&bpo=25304

   (191) https://bugs.python.org/issue?@action=redirect&bpo=25232

   (192) https://bugs.python.org/issue?@action=redirect&bpo=24657

   (193) https://bugs.python.org/issue?@action=redirect&bpo=25287

   (194) https://bugs.python.org/issue?@action=redirect&bpo=23600

   (195) https://bugs.python.org/issue?@action=redirect&bpo=25203

   (196) https://bugs.python.org/issue?@action=redirect&bpo=25011

   (197) https://bugs.python.org/issue?@action=redirect&bpo=25209

   (198) https://bugs.python.org/issue?@action=redirect&bpo=22241

   (199) https://bugs.python.org/issue?@action=redirect&bpo=23517

   (200) https://bugs.python.org/issue?@action=redirect&bpo=23552

   (201) https://bugs.python.org/issue?@action=redirect&bpo=24633

   (202) https://bugs.python.org/issue?@action=redirect&bpo=24879

   (203) https://bugs.python.org/issue?@action=redirect&bpo=24874

   (204) https://bugs.python.org/issue?@action=redirect&bpo=20059

   (205) https://bugs.python.org/issue?@action=redirect&bpo=24360

   (206) https://bugs.python.org/issue?@action=redirect&bpo=23426

   (207) https://bugs.python.org/issue?@action=redirect&bpo=13938

   (208) https://bugs.python.org/issue?@action=redirect&bpo=2091

   (209) https://bugs.python.org/issue?@action=redirect&bpo=8585

   (210) https://bugs.python.org/issue?@action=redirect&bpo=18622

   (211) https://bugs.python.org/issue?@action=redirect&bpo=24426

   (212) https://bugs.python.org/issue?@action=redirect&bpo=23661

   (213) https://bugs.python.org/issue?@action=redirect&bpo=13248

   (214) https://bugs.python.org/issue?@action=redirect&bpo=25578

   (215) https://bugs.python.org/issue?@action=redirect&bpo=25530

   (216) https://bugs.python.org/issue?@action=redirect&bpo=25569

   (217) https://bugs.python.org/issue?@action=redirect&bpo=25471

   (218) https://bugs.python.org/issue?@action=redirect&bpo=25319

   (219) https://bugs.python.org/issue?@action=redirect&bpo=26050

   (220) https://bugs.python.org/issue?@action=redirect&bpo=25924

   (221) https://bugs.python.org/issue?@action=redirect&bpo=26406

   (222) https://bugs.python.org/issue?@action=redirect&bpo=26848

   (223) https://bugs.python.org/issue?@action=redirect&bpo=27040

   (224) https://bugs.python.org/issue?@action=redirect&bpo=27041


File: python.info,  Node: IDLE<60>,  Next: Documentação<73>,  Prev: Biblioteca<164>,  Up: Python 3 6 0 alpha 1

1.23.97.4 IDLE
..............

   - bpo-20640(1): Add tests for idlelib.configHelpSourceEdit.  Patch by
     Saimadhav Heblikar.

   - In the ‘IDLE-console differences’ section of the IDLE doc, clarify
     how running with IDLE affects sys.modules and the standard streams.

   - bpo-25507(2): fix incorrect change in IOBinding that prevented
     printing.  Augment IOBinding htest to include all major IOBinding
     functions.

   - bpo-25905(3): Revert unwanted conversion of ‘ to ’ RIGHT SINGLE
     QUOTATION MARK in README.txt and open this and NEWS.txt with
     ‘ascii’.  Re-encode CREDITS.txt to utf-8 and open it with ‘utf-8’.

   - bpo-15348(4): Stop the debugger engine (normally in a user process)
     before closing the debugger window (running in the IDLE process).
     This prevents the RuntimeErrors that were being caught and ignored.

   - bpo-24455(5): Prevent IDLE from hanging when a) closing the shell
     while the debugger is active (15347); b) closing the debugger with
     the [X] button (15348); and c) activating the debugger when already
     active (24455).  The patch by Mark Roseman does this by making two
     changes.  1.  Suspend and resume the gui.interaction method with
     the tcl vwait mechanism intended for this purpose (instead of
     root.mainloop & .quit).  2.  In gui.run, allow any existing
     interaction to terminate first.

   - Change ‘The program’ to ‘Your program’ in an IDLE ‘kill program?’
     message to make it clearer that the program referred to is the
     currently running user program, not IDLE itself.

   - bpo-24750(6): Improve the appearance of the IDLE editor window
     status bar.  Patch by Mark Roseman.

   - bpo-25313(7): Change the handling of new built-in text color themes
     to better address the compatibility problem introduced by the
     addition of IDLE Dark.  Consistently use the revised
     idleConf.CurrentTheme everywhere in idlelib.

   - bpo-24782(8): Extension configuration is now a tab in the IDLE
     Preferences dialog rather than a separate dialog.  The former tabs
     are now a sorted list.  Patch by Mark Roseman.

   - bpo-22726(9): Re-activate the config dialog help button with some
     content about the other buttons and the new IDLE Dark theme.

   - bpo-24820(10): IDLE now has an ‘IDLE Dark’ built-in text color
     theme.  It is more or less IDLE Classic inverted, with a cobalt
     blue background.  Strings, comments, keywords, … are still green,
     red, orange, … .  To use it with IDLEs released before November
     2015, hit the ‘Save as New Custom Theme’ button and enter a new
     name, such as ‘Custom Dark’.  The custom theme will work with any
     IDLE release, and can be modified.

   - bpo-25224(11): README.txt is now an idlelib index for IDLE
     developers and curious users.  The previous user content is now in
     the IDLE doc chapter.  ‘IDLE’ now means ‘Integrated Development and
     Learning Environment’.

   - bpo-24820(12): Users can now set breakpoint colors in Settings ->
     Custom Highlighting.  Original patch by Mark Roseman.

   - bpo-24972(13): Inactive selection background now matches active
     selection background, as configured by users, on all systems.
     Found items are now always highlighted on Windows.  Initial patch
     by Mark Roseman.

   - bpo-24570(14): Idle: make calltip and completion boxes appear on
     Macs affected by a tk regression.  Initial patch by Mark Roseman.

   - bpo-24988(15): Idle ScrolledList context menus (used in debugger)
     now work on Mac Aqua.  Patch by Mark Roseman.

   - bpo-24801(16): Make right-click for context menu work on Mac Aqua.
     Patch by Mark Roseman.

   - bpo-25173(17): Associate tkinter messageboxes with a specific
     widget.  For Mac OSX, make them a ‘sheet’.  Patch by Mark Roseman.

   - bpo-25198(18): Enhance the initial html viewer now used for Idle
     Help.  Properly indent fixed-pitch text (patch by Mark Roseman).
     Give code snippet a very Sphinx-like light blueish-gray background.
     Re-use initial width and height set by users for shell and editor.
     When the Table of Contents (TOC) menu is used, put the section
     header at the top of the screen.

   - bpo-25225(19): Condense and rewrite Idle doc section on text
     colors.

   - bpo-21995(20): Explain some differences between IDLE and console
     Python.

   - bpo-22820(21): Explain need for 'print' when running file from Idle
     editor.

   - bpo-25224(22): Doc: augment Idle feature list and no-subprocess
     section.

   - bpo-25219(23): Update doc for Idle command line options.  Some were
     missing and notes were not correct.

   - bpo-24861(24): Most of idlelib is private and subject to change.
     Use idleib.idle.* to start Idle.  See idlelib.__init__.__doc__.

   - bpo-25199(25): Idle: add synchronization comments for future
     maintainers.

   - bpo-16893(26): Replace help.txt with help.html for Idle doc
     display.  The new idlelib/help.html is rstripped
     Doc/build/html/library/idle.html.  It looks better than help.txt
     and will better document Idle as released.  The tkinter html viewer
     that works for this file was written by Rose Roseman.  The now
     unused EditorWindow.HelpDialog class and helt.txt file are
     deprecated.

   - bpo-24199(27): Deprecate unused idlelib.idlever with possible
     removal in 3.6.

   - bpo-24790(28): Remove extraneous code (which also create 2 & 3
     conflicts).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20640

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25507

   (3) https://bugs.python.org/issue?@action=redirect&bpo=25905

   (4) https://bugs.python.org/issue?@action=redirect&bpo=15348

   (5) https://bugs.python.org/issue?@action=redirect&bpo=24455

   (6) https://bugs.python.org/issue?@action=redirect&bpo=24750

   (7) https://bugs.python.org/issue?@action=redirect&bpo=25313

   (8) https://bugs.python.org/issue?@action=redirect&bpo=24782

   (9) https://bugs.python.org/issue?@action=redirect&bpo=22726

   (10) https://bugs.python.org/issue?@action=redirect&bpo=24820

   (11) https://bugs.python.org/issue?@action=redirect&bpo=25224

   (12) https://bugs.python.org/issue?@action=redirect&bpo=24820

   (13) https://bugs.python.org/issue?@action=redirect&bpo=24972

   (14) https://bugs.python.org/issue?@action=redirect&bpo=24570

   (15) https://bugs.python.org/issue?@action=redirect&bpo=24988

   (16) https://bugs.python.org/issue?@action=redirect&bpo=24801

   (17) https://bugs.python.org/issue?@action=redirect&bpo=25173

   (18) https://bugs.python.org/issue?@action=redirect&bpo=25198

   (19) https://bugs.python.org/issue?@action=redirect&bpo=25225

   (20) https://bugs.python.org/issue?@action=redirect&bpo=21995

   (21) https://bugs.python.org/issue?@action=redirect&bpo=22820

   (22) https://bugs.python.org/issue?@action=redirect&bpo=25224

   (23) https://bugs.python.org/issue?@action=redirect&bpo=25219

   (24) https://bugs.python.org/issue?@action=redirect&bpo=24861

   (25) https://bugs.python.org/issue?@action=redirect&bpo=25199

   (26) https://bugs.python.org/issue?@action=redirect&bpo=16893

   (27) https://bugs.python.org/issue?@action=redirect&bpo=24199

   (28) https://bugs.python.org/issue?@action=redirect&bpo=24790


File: python.info,  Node: Documentação<73>,  Next: Testes<78>,  Prev: IDLE<60>,  Up: Python 3 6 0 alpha 1

1.23.97.5 Documentação
......................

   - bpo-26736(1): Used HTTPS for external links in the documentation if
     possible.

   - bpo-6953(2): Rework the Readline module documentation to group
     related functions together, and add more details such as what
     underlying Readline functions and variables are accessed.

   - bpo-23606(3): Adds note to ctypes documentation regarding
     cdll.msvcrt.

   - bpo-24952(4): Clarify the default size argument of stack_size() in
     the “threading” and “_thread” modules.  Patch from Mattip.

   - bpo-26014(5): Update 3.x packaging documentation: * “See also”
     links to the new docs are now provided in the legacy pages * links
     to setuptools documentation have been updated

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26736

   (2) https://bugs.python.org/issue?@action=redirect&bpo=6953

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23606

   (4) https://bugs.python.org/issue?@action=redirect&bpo=24952

   (5) https://bugs.python.org/issue?@action=redirect&bpo=26014


File: python.info,  Node: Testes<78>,  Next: Construção<86>,  Prev: Documentação<73>,  Up: Python 3 6 0 alpha 1

1.23.97.6 Testes
................

   - bpo-21916(1): Added tests for the turtle module.  Patch by ingrid,
     Gregory Loyse and Jelle Zijlstra.

   - bpo-26295(2): When using “python3 -m test –testdir=TESTDIR”,
     regrtest doesn’t add “test.” prefix to test module names.

   - bpo-26523(3): The multiprocessing thread pool
     (multiprocessing.dummy.Pool) was untested.

   - bpo-26015(4): Added new tests for pickling iterators of mutable
     sequences.

   - bpo-26325(5): Added test.support.check_no_resource_warning() to
     check that no ResourceWarning is emitted.

   - bpo-25940(6): Changed test_ssl to use its internal local server
     more.  This avoids relying on svn.python.org, which recently
     changed root certificate.

   - bpo-25616(7): Tests for OrderedDict are extracted from
     test_collections into separate file test_ordered_dict.

   - bpo-25449(8): Added tests for OrderedDict subclasses.

   - bpo-25188(9): Add -P/–pgo to test.regrtest to suppress error output
     when running the test suite for the purposes of a PGO build.
     Initial patch by Alecsandru Patrascu.

   - bpo-22806(10): Add ‘python -m test --list-tests’ command to list
     tests.

   - bpo-18174(11): ‘python -m test --huntrleaks ...’ now also checks
     for leak of file descriptors.  Patch written by Richard Oudkerk.

   - bpo-25260(12): Fix ‘python -m test --coverage’ on Windows.  Remove
     the list of ignored directories.

   - ‘PCbuild\rt.bat’ now accepts an unlimited number of arguments to
     pass along to regrtest.py.  Previously there was a limit of 9.

   - bpo-26583(13): Skip test_timestamp_overflow in test_import if
     bytecode files cannot be written.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21916

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26295

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26523

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26015

   (5) https://bugs.python.org/issue?@action=redirect&bpo=26325

   (6) https://bugs.python.org/issue?@action=redirect&bpo=25940

   (7) https://bugs.python.org/issue?@action=redirect&bpo=25616

   (8) https://bugs.python.org/issue?@action=redirect&bpo=25449

   (9) https://bugs.python.org/issue?@action=redirect&bpo=25188

   (10) https://bugs.python.org/issue?@action=redirect&bpo=22806

   (11) https://bugs.python.org/issue?@action=redirect&bpo=18174

   (12) https://bugs.python.org/issue?@action=redirect&bpo=25260

   (13) https://bugs.python.org/issue?@action=redirect&bpo=26583


File: python.info,  Node: Construção<86>,  Next: Windows<73>,  Prev: Testes<78>,  Up: Python 3 6 0 alpha 1

1.23.97.7 Construção
....................

   - bpo-21277(1): Don’t try to link _ctypes with a ffi_convenience
     library.

   - bpo-26884(2): Fix linking extension modules for cross builds.
     Patch by Xavier de Gaye.

   - bpo-26932(3): Fixed support of RTLD_* constants defined as enum
     values, not via macros (in particular on Android).  Patch by Chi
     Hsuan Yen.

   - bpo-22359(4): Disable the rules for running _freeze_importlib and
     pgen when cross-compiling.  The output of these programs is
     normally saved with the source code anyway, and is still
     regenerated when doing a native build.  Patch by Xavier de Gaye.

   - bpo-21668(5): Link audioop, _datetime, _ctypes_test modules to
     libm, except on Mac OS X. Patch written by Chi Hsuan Yen.

   - bpo-25702(6): A –with-lto configure option has been added that will
     enable link time optimizations at build time during a make
     profile-opt.  Some compilers and toolchains are known to not
     produce stable code when using LTO, be sure to test things
     thoroughly before relying on it.  It can provide a few % speed up
     over profile-opt alone.

   - bpo-26624(7): Adds validation of ucrtbase[d].dll version with
     warning for old versions.

   - bpo-17603(8): Avoid error about nonexistent fileblocks.o file by
     using a lower-level check for st_blocks in struct stat.

   - bpo-26079(9): Fixing the build output folder for tix-8.4.3.6.
     Patch by Bjoern Thiel.

   - bpo-26465(10): Update Windows builds to use OpenSSL 1.0.2g.

   - bpo-25348(11): Added ‘--pgo’ and ‘--pgo-job’ arguments to
     ‘PCbuild\build.bat’ for building with Profile-Guided Optimization.
     The old ‘PCbuild\build_pgo.bat’ script is removed.

   - bpo-25827(12): Add support for building with ICC to ‘configure’,
     including a new ‘--with-icc’ flag.

   - bpo-25696(13): Fix installation of Python on UNIX with make -j9.

   - bpo-24986(14): It is now possible to build Python on Windows
     without errors when external libraries are not available.

   - bpo-24421(15): Compile Modules/_math.c once, before building
     extensions.  Previously it could fail to compile properly if the
     math and cmath builds were concurrent.

   - bpo-26465(16): Update OS X 10.5+ 32-bit-only installer to build and
     link with OpenSSL 1.0.2g.

   - bpo-26268(17): Update Windows builds to use OpenSSL 1.0.2f.

   - bpo-25136(18): Support Apple Xcode 7’s new textual SDK stub
     libraries.

   - bpo-24324(19): Do not enable unreachable code warnings when using
     gcc as the option does not work correctly in older versions of gcc
     and has been silently removed as of gcc-4.5.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21277

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26884

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26932

   (4) https://bugs.python.org/issue?@action=redirect&bpo=22359

   (5) https://bugs.python.org/issue?@action=redirect&bpo=21668

   (6) https://bugs.python.org/issue?@action=redirect&bpo=25702

   (7) https://bugs.python.org/issue?@action=redirect&bpo=26624

   (8) https://bugs.python.org/issue?@action=redirect&bpo=17603

   (9) https://bugs.python.org/issue?@action=redirect&bpo=26079

   (10) https://bugs.python.org/issue?@action=redirect&bpo=26465

   (11) https://bugs.python.org/issue?@action=redirect&bpo=25348

   (12) https://bugs.python.org/issue?@action=redirect&bpo=25827

   (13) https://bugs.python.org/issue?@action=redirect&bpo=25696

   (14) https://bugs.python.org/issue?@action=redirect&bpo=24986

   (15) https://bugs.python.org/issue?@action=redirect&bpo=24421

   (16) https://bugs.python.org/issue?@action=redirect&bpo=26465

   (17) https://bugs.python.org/issue?@action=redirect&bpo=26268

   (18) https://bugs.python.org/issue?@action=redirect&bpo=25136

   (19) https://bugs.python.org/issue?@action=redirect&bpo=24324


File: python.info,  Node: Windows<73>,  Next: Ferramentas/Demos<47>,  Prev: Construção<86>,  Up: Python 3 6 0 alpha 1

1.23.97.8 Windows
.................

   - bpo-27053(1): Updates make_zip.py to correctly generate library ZIP
     file.

   - bpo-26268(2): Update the prepare_ssl.py script to handle OpenSSL
     releases that don’t include the contents of the include directory
     (that is, 1.0.2e and later).

   - bpo-26071(3): bdist_wininst created binaries fail to start and find
     32bit Python

   - bpo-26073(4): Update the list of magic numbers in launcher

   - bpo-26065(5): Excludes venv from library when generating embeddable
     distro.

   - bpo-25022(6): Removed very outdated PC/example_nt/ directory.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27053

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26268

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26071

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26073

   (5) https://bugs.python.org/issue?@action=redirect&bpo=26065

   (6) https://bugs.python.org/issue?@action=redirect&bpo=25022


File: python.info,  Node: Ferramentas/Demos<47>,  Next: API C<73>,  Prev: Windows<73>,  Up: Python 3 6 0 alpha 1

1.23.97.9 Ferramentas/Demos
...........................

   - bpo-26799(1): Fix python-gdb.py: don’t get C types once when the
     Python code is loaded, but get C types on demand.  The C types can
     change if python-gdb.py is loaded before the Python executable.
     Patch written by Thomas Ilsche.

   - bpo-26271(2): Fix the Freeze tool to properly use flags passed
     through configure.  Patch by Daniel Shaulov.

   - bpo-26489(3): Add dictionary unpacking support to
     Tools/parser/unparse.py.  Patch by Guo Ci Teo.

   - bpo-26316(4): Fix variable name typo in Argument Clinic.

   - bpo-25440(5): Fix output of python-config –extension-suffix.

   - bpo-25154(6): The pyvenv script has been deprecated in favour of
     ‘python3 -m venv’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26799

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26271

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26489

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26316

   (5) https://bugs.python.org/issue?@action=redirect&bpo=25440

   (6) https://bugs.python.org/issue?@action=redirect&bpo=25154


File: python.info,  Node: API C<73>,  Prev: Ferramentas/Demos<47>,  Up: Python 3 6 0 alpha 1

1.23.97.10 API C
................

   - bpo-26312(1): SystemError is now raised in all programming bugs
     with using PyArg_ParseTupleAndKeywords().  RuntimeError did raised
     before in some programming bugs.

   - bpo-26198(2): ValueError is now raised instead of TypeError on
     buffer overflow in parsing “es#” and “et#” format units.
     SystemError is now raised instead of TypeError on programmatical
     error in parsing format string.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26312

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26198


File: python.info,  Node: Python 3 5 5 final,  Next: Python 3 5 5 release candidate 1,  Prev: Python 3 6 0 alpha 1,  Up: Changelog

1.23.98 Python 3.5.5 final
--------------------------

'Data de lançamento: 2018-02-04'

There were no new changes in version 3.5.5.


File: python.info,  Node: Python 3 5 5 release candidate 1,  Next: Python 3 5 4 final,  Prev: Python 3 5 5 final,  Up: Changelog

1.23.99 Python 3.5.5 release candidate 1
----------------------------------------

'Data de lançamento: 2018-01-23'

* Menu:

* Segurança: Segurança<53>.
* Núcleo e embutidos: Núcleo e embutidos<163>.
* Biblioteca: Biblioteca<165>.


File: python.info,  Node: Segurança<53>,  Next: Núcleo e embutidos<163>,  Up: Python 3 5 5 release candidate 1

1.23.99.1 Segurança
...................

   - bpo-32551(1): The ‘sys.path[0]’ initialization change for
     bpo-29139(2) caused a regression by revealing an inconsistency in
     how sys.path is initialized when executing ‘__main__’ from a
     zipfile, directory, or other import location.  This is considered a
     potential security issue, as it may lead to privileged processes
     unexpectedly loading code from user controlled directories in
     situations where that was not previously the case.  The interpreter
     now consistently avoids ever adding the import location’s parent
     directory to ‘sys.path’, and ensures no other ‘sys.path’ entries
     are inadvertently modified when inserting the import location named
     on the command line.  (Originally reported as bpo-29723(3) against
     Python 3.6rc1, but it was missed at the time that the then upcoming
     Python 3.5.4 release would also be affected)

   - bpo-30657(4): Fixed possible integer overflow in
     PyBytes_DecodeEscape, CVE 2017-1000158(5).  Original patch by Jay
     Bosamiya; rebased to Python 3 by Miro Hrončok.

   - bpo-30947(6): Upgrade libexpat embedded copy from version 2.2.1 to
     2.2.3 to get security fixes.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32551

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29139

   (3) https://bugs.python.org/issue?@action=redirect&bpo=29723

   (4) https://bugs.python.org/issue?@action=redirect&bpo=30657

   (5) https://www.cve.org/CVERecord?id=CVE-2017-1000158

   (6) https://bugs.python.org/issue?@action=redirect&bpo=30947


File: python.info,  Node: Núcleo e embutidos<163>,  Next: Biblioteca<165>,  Prev: Segurança<53>,  Up: Python 3 5 5 release candidate 1

1.23.99.2 Núcleo e embutidos
............................

   - bpo-31095(1): Fix potential crash during GC caused by ‘tp_dealloc’
     which doesn’t call ‘PyObject_GC_UnTrack()’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=31095


File: python.info,  Node: Biblioteca<165>,  Prev: Núcleo e embutidos<163>,  Up: Python 3 5 5 release candidate 1

1.23.99.3 Biblioteca
....................

   - bpo-32072(1): Fixed issues with binary plists: Fixed saving
     bytearrays.  Identical objects will be saved only once.  Equal
     references will be load as identical objects.  Added support for
     saving and loading recursive data structures.

   - bpo-31170(2): expat: Update libexpat from 2.2.3 to 2.2.4.  Fix
     copying of partial characters for UTF-8 input (libexpat bug 115):
     ‘https://github.com/libexpat/libexpat/issues/115’

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=32072

   (2) https://bugs.python.org/issue?@action=redirect&bpo=31170


File: python.info,  Node: Python 3 5 4 final,  Next: Python 3 5 4 release candidate 1,  Prev: Python 3 5 5 release candidate 1,  Up: Changelog

1.23.100 Python 3.5.4 final
---------------------------

'Data de lançamento: 2017-08-07'

* Menu:

* Biblioteca: Biblioteca<166>.


File: python.info,  Node: Biblioteca<166>,  Up: Python 3 5 4 final

1.23.100.1 Biblioteca
.....................

   - bpo-30119(1): ftplib.FTP.putline() now throws ValueError on
     commands that contains CR or LF. Patch by Donghee Na.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30119


File: python.info,  Node: Python 3 5 4 release candidate 1,  Next: Python 3 5 3 final,  Prev: Python 3 5 4 final,  Up: Changelog

1.23.101 Python 3.5.4 release candidate 1
-----------------------------------------

'Data de lançamento: 2017-07-23'

* Menu:

* Segurança: Segurança<54>.
* Núcleo e embutidos: Núcleo e embutidos<164>.
* Biblioteca: Biblioteca<167>.
* Documentação: Documentação<74>.
* Testes: Testes<79>.
* Construção: Construção<87>.
* Windows: Windows<74>.
* API C: API C<74>.


File: python.info,  Node: Segurança<54>,  Next: Núcleo e embutidos<164>,  Up: Python 3 5 4 release candidate 1

1.23.101.1 Segurança
....................

   - bpo-30730(1): Prevent environment variables injection in subprocess
     on Windows.  Prevent passing other environment variables and
     command arguments.

   - bpo-30694(2): Upgrade expat copy from 2.2.0 to 2.2.1 to get fixes
     of multiple security vulnerabilities including: CVE 2017-9233(3)
     (External entity infinite loop DoS), CVE 2016-9063(4) (Integer
     overflow, re-fix), CVE 2016-0718(5) (Fix regression bugs from
     2.2.0’s fix to CVE 2016-0718(6)) and CVE 2012-0876(7) (Counter hash
     flooding with SipHash).  Note: the CVE 2016-5300(8) (Use
     os-specific entropy sources like getrandom) doesn’t impact Python,
     since Python already gets entropy from the OS to set the expat
     secret using ‘XML_SetHashSalt()’.

   - bpo-30500(9): Fix urllib.parse.splithost() to correctly parse
     fragments.  For example, ‘splithost('//127.0.0.1#@evil.com/')’ now
     correctly returns the ‘127.0.0.1’ host, instead of treating
     ‘@evil.com’ as the host in an authentication (‘login@host’).

   - bpo-29591(10): Update expat copy from 2.1.1 to 2.2.0 to get fixes
     of CVE 2016-0718(11) and CVE 2016-4472(12).  See
     ‘https://sourceforge.net/p/expat/bugs/537/’ for more information.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30730

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30694

   (3) https://www.cve.org/CVERecord?id=CVE-2017-9233

   (4) https://www.cve.org/CVERecord?id=CVE-2016-9063

   (5) https://www.cve.org/CVERecord?id=CVE-2016-0718

   (6) https://www.cve.org/CVERecord?id=CVE-2016-0718

   (7) https://www.cve.org/CVERecord?id=CVE-2012-0876

   (8) https://www.cve.org/CVERecord?id=CVE-2016-5300

   (9) https://bugs.python.org/issue?@action=redirect&bpo=30500

   (10) https://bugs.python.org/issue?@action=redirect&bpo=29591

   (11) https://www.cve.org/CVERecord?id=CVE-2016-0718

   (12) https://www.cve.org/CVERecord?id=CVE-2016-4472


File: python.info,  Node: Núcleo e embutidos<164>,  Next: Biblioteca<167>,  Prev: Segurança<54>,  Up: Python 3 5 4 release candidate 1

1.23.101.2 Núcleo e embutidos
.............................

   - bpo-30876(1): Relative import from unloaded package now reimports
     the package instead of failing with SystemError.  Relative import
     from non-package now fails with ImportError rather than
     SystemError.

   - bpo-30765(2): Avoid blocking in pthread_mutex_lock() when
     PyThread_acquire_lock() is asked not to block.

   - bpo-27945(3): Fixed various segfaults with dict when input
     collections are mutated during searching, inserting or comparing.
     Based on patches by Duane Griffin and Tim Mitchell.

   - bpo-25794(4): Fixed type.__setattr__() and type.__delattr__() for
     non-interned attribute names.  Based on patch by Eryk Sun.

   - bpo-29935(5): Fixed error messages in the index() method of tuple,
     list and deque when pass indices of wrong type.

   - bpo-28876(6): ‘bool(range)’ works even if ‘len(range)’ raises *note
     OverflowError: 885.

   - bpo-29600(7): Fix wrapping coroutine return values in
     StopIteration.

   - bpo-29537(8): Restore runtime compatibility with bytecode files
     generated by CPython 3.5.0 to 3.5.2, and adjust the eval loop to
     avoid the problems that could be caused by the malformed variant of
     the BUILD_MAP_UNPACK_WITH_CALL opcode that they may contain.  Patch
     by Petr Viktorin, Serhiy Storchaka, and Nick Coghlan.

   - bpo-28598(9): Support __rmod__ for subclasses of str being called
     before str.__mod__.  Patch by Martijn Pieters.

   - bpo-29602(10): Fix incorrect handling of signed zeros in complex
     constructor for complex subclasses and for inputs having a
     __complex__ method.  Patch by Serhiy Storchaka.

   - bpo-29347(11): Fixed possibly dereferencing undefined pointers when
     creating weakref objects.

   - bpo-29438(12): Fixed use-after-free problem in key sharing dict.

   - bpo-29319(13): Prevent RunMainFromImporter overwriting sys.path[0].

   - bpo-29337(14): Fixed possible BytesWarning when compare the code
     objects.  Warnings could be emitted at compile time.

   - bpo-29478(15): If max_line_length=None is specified while using the
     Compat32 policy, it is no longer ignored.  Patch by Mircea Cosbuc.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30876

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30765

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27945

   (4) https://bugs.python.org/issue?@action=redirect&bpo=25794

   (5) https://bugs.python.org/issue?@action=redirect&bpo=29935

   (6) https://bugs.python.org/issue?@action=redirect&bpo=28876

   (7) https://bugs.python.org/issue?@action=redirect&bpo=29600

   (8) https://bugs.python.org/issue?@action=redirect&bpo=29537

   (9) https://bugs.python.org/issue?@action=redirect&bpo=28598

   (10) https://bugs.python.org/issue?@action=redirect&bpo=29602

   (11) https://bugs.python.org/issue?@action=redirect&bpo=29347

   (12) https://bugs.python.org/issue?@action=redirect&bpo=29438

   (13) https://bugs.python.org/issue?@action=redirect&bpo=29319

   (14) https://bugs.python.org/issue?@action=redirect&bpo=29337

   (15) https://bugs.python.org/issue?@action=redirect&bpo=29478


File: python.info,  Node: Biblioteca<167>,  Next: Documentação<74>,  Prev: Núcleo e embutidos<164>,  Up: Python 3 5 4 release candidate 1

1.23.101.3 Biblioteca
.....................

   - bpo-29403(1): Fix ‘unittest.mock’’s autospec to not fail on
     method-bound builtin functions.  Patch by Aaron Gallagher.

   - bpo-30961(2): Fix decrementing a borrowed reference in tracemalloc.

   - bpo-30886(3): Fix multiprocessing.Queue.join_thread(): it now waits
     until the thread completes, even if the thread was started by the
     same process which created the queue.

   - bpo-29854(4): Fix segfault in readline when using readline’s
     history-size option.  Patch by Nir Soffer.

   - bpo-30807(5): signal.setitimer() may disable the timer when passed
     a tiny value.  Tiny values (such as 1e-6) are valid non-zero values
     for setitimer(), which is specified as taking
     microsecond-resolution intervals.  However, on some platform, our
     conversion routine could convert 1e-6 into a zero interval,
     therefore disabling the timer instead of (re-)scheduling it.

   - bpo-30441(6): Fix bug when modifying os.environ while iterating
     over it

   - bpo-30532(7): Fix email header value parser dropping folding white
     space in certain cases.

   - bpo-29169(8): Update zlib to 1.2.11.

   - bpo-30879(9): os.listdir() and os.scandir() now emit bytes names
     when called with bytes-like argument.

   - bpo-30746(10): Prohibited the ‘=’ character in environment variable
     names in ‘os.putenv()’ and ‘os.spawn*()’.

   - bpo-29755(11): Fixed the lgettext() family of functions in the
     gettext module.  They now always return bytes.

   - bpo-30645(12): Fix path calculation in imp.load_package(), fixing
     it for cases when a package is only shipped with bytecodes.  Patch
     by Alexandru Ardelean.

   - bpo-23890(13): unittest.TestCase.assertRaises() now manually breaks
     a reference cycle to not keep objects alive longer than expected.

   - bpo-30149(14): inspect.signature() now supports callables with
     variable-argument parameters wrapped with partialmethod.  Patch by
     Donghee Na.

   - bpo-29931(15): Fixed comparison check for ipaddress.ip_interface
     objects.  Patch by Sanjay Sundaresan.

   - bpo-24484(16): Avoid race condition in multiprocessing cleanup.

   - bpo-28994(17): The traceback no longer displayed for SystemExit
     raised in a callback registered by atexit.

   - bpo-30508(18): Don’t log exceptions if Task/Future “cancel()”
     method was called.

   - bpo-28556(19): Updates to typing module: Add generic
     AsyncContextManager, add support for ContextManager on all
     versions.  Original PRs by Jelle Zijlstra and Ivan Levkivskyi

   - bpo-29870(20): Fix ssl sockets leaks when connection is aborted in
     asyncio/ssl implementation.  Patch by Michaël Sghaïer.

   - bpo-29743(21): Closing transport during handshake process leaks
     open socket.  Patch by Nikolay Kim

   - bpo-27585(22): Fix waiter cancellation in asyncio.Lock.  Patch by
     Mathieu Sornay.

   - bpo-30418(23): On Windows, subprocess.Popen.communicate() now also
     ignore EINVAL on stdin.write() if the child process is still
     running but closed the pipe.

   - bpo-30378(24): Fix the problem that logging.handlers.SysLogHandler
     cannot handle IPv6 addresses.

   - bpo-29960(25): Preserve generator state when
     _random.Random.setstate() raises an exception.  Patch by Bryan
     Olson.

   - bpo-30414(26): multiprocessing.Queue._feed background running
     thread do not break from main loop on exception.

   - bpo-30003(27): Fix handling escape characters in HZ codec.  Based
     on patch by Ma Lin.

   - bpo-30301(28): Fix AttributeError when using SimpleQueue.empty()
     under 'spawn' and 'forkserver' start methods.

   - bpo-30329(29): imaplib and poplib now catch the Windows socket
     WSAEINVAL error (code 10022) on shutdown(SHUT_RDWR): An invalid
     operation was attempted.  This error occurs sometimes on SSL
     connections.

   - bpo-30375(30): Warnings emitted when compile a regular expression
     now always point to the line in the user code.  Previously they
     could point into inners of the re module if emitted from inside of
     groups or conditionals.

   - bpo-30048(31): Fixed ‘Task.cancel()’ can be ignored when the task
     is running coroutine and the coroutine returned without any more
     ‘await’.

   - bpo-29990(32): Fix range checking in GB18030 decoder.  Original
     patch by Ma Lin.

   - bpo-26293(33): Change resulted because of zipfile breakage.  (See
     also: bpo-29094(34))

   - bpo-30243(35): Removed the __init__ methods of _json’s scanner and
     encoder.  Misusing them could cause memory leaks or crashes.  Now
     scanner and encoder objects are completely initialized in the
     __new__ methods.

   - bpo-30185(36): Avoid KeyboardInterrupt tracebacks in forkserver
     helper process when Ctrl-C is received.

   - bpo-28556(37): Various updates to typing module: add
     typing.NoReturn type, use WrapperDescriptorType, minor bug-fixes.
     Original PRs by Jim Fasarakis-Hilliard and Ivan Levkivskyi.

   - bpo-30205(38): Fix getsockname() for unbound AF_UNIX sockets on
     Linux.

   - bpo-30070(39): Fixed leaks and crashes in errors handling in the
     parser module.

   - bpo-30061(40): Fixed crashes in IOBase methods __next__() and
     readlines() when readline() or __next__() respectively return
     non-sizeable object.  Fixed possible other errors caused by not
     checking results of PyObject_Size(), PySequence_Size(), or
     PyMapping_Size().

   - bpo-30068(41): _io._IOBase.readlines will check if it’s closed
     first when hint is present.

   - bpo-29694(42): Fixed race condition in pathlib mkdir with flags
     parents=True.  Patch by Armin Rigo.

   - bpo-29692(43): Fixed arbitrary unchaining of RuntimeError
     exceptions in contextlib.contextmanager.  Patch by Siddharth
     Velankar.

   - bpo-29998(44): Pickling and copying ImportError now preserves name
     and path attributes.

   - bpo-29942(45): Fix a crash in itertools.chain.from_iterable when
     encountering long runs of empty iterables.

   - bpo-27863(46): Fixed multiple crashes in ElementTree caused by race
     conditions and wrong types.

   - bpo-28699(47): Fixed a bug in pools in multiprocessing.pool that
     raising an exception at the very first of an iterable may swallow
     the exception or make the program hang.  Patch by Davin Potts and
     Xiang Zhang.

   - bpo-25803(48): Avoid incorrect errors raised by
     Path.mkdir(exist_ok=True) when the OS gives priority to errors such
     as EACCES over EEXIST.

   - bpo-29861(49): Release references to tasks, their arguments and
     their results as soon as they are finished in multiprocessing.Pool.

   - bpo-29884(50): faulthandler: Restore the old sigaltstack during
     teardown.  Patch by Christophe Zeitouny.

   - bpo-25455(51): Fixed crashes in repr of recursive buffered
     file-like objects.

   - bpo-29800(52): Fix crashes in partial.__repr__ if the keys of
     partial.keywords are not strings.  Patch by Michael Seifert.

   - bpo-29742(53): get_extra_info() raises exception if get called on
     closed ssl transport.  Patch by Nikolay Kim.

   - bpo-8256(54): Fixed possible failing or crashing input() if
     attributes “encoding” or “errors” of sys.stdin or sys.stdout are
     not set or are not strings.

   - bpo-28298(55): Fix a bug that prevented array ‘Q’, ‘L’ and ‘I’ from
     accepting big intables (objects that have __int__) as elements.
     Patch by Oren Milman.

   - bpo-29615(56): SimpleXMLRPCDispatcher no longer chains KeyError (or
     any other exception) to exception(s) raised in the dispatched
     methods.  Patch by Petr Motejlek.

   - bpo-29704(57): asyncio.subprocess.SubprocessStreamProtocol no
     longer closes before all pipes are closed.

   - bpo-29703(58): Fix asyncio to support instantiation of new event
     loops in child processes.

   - bpo-29376(59): Fix assertion error in
     threading._DummyThread.is_alive().

   - bpo-29110(60): Fix file object leak in aifc.open() when file is
     given as a filesystem path and is not in valid AIFF format.  Patch
     by Anthony Zhang.

   - bpo-28961(61): Fix unittest.mock._Call helper: don’t ignore the
     name parameter anymore.  Patch written by Jiajun Huang.

   - bpo-29532(62): Altering a kwarg dictionary passed to
     functools.partial() no longer affects a partial object after
     creation.

   - bpo-28556(63): Various updates to typing module: typing.Counter,
     typing.ChainMap, improved ABC caching, etc.  Original PRs by Jelle
     Zijlstra, Ivan Levkivskyi, Manuel Krebber, and Łukasz Langa.

   - bpo-29100(64): Fix datetime.fromtimestamp() regression introduced
     in Python 3.6.0: check minimum and maximum years.

   - bpo-29519(65): Fix weakref spewing exceptions during interpreter
     shutdown when used with a rare combination of multiprocessing and
     custom codecs.

   - bpo-29416(66): Prevent infinite loop in pathlib.Path.mkdir

   - bpo-29444(67): Fixed out-of-bounds buffer access in the group()
     method of the match object.  Based on patch by WGH.

   - bpo-29335(68): Fix subprocess.Popen.wait() when the child process
     has exited to a stopped instead of terminated state (ex: when under
     ptrace).

   - bpo-29290(69): Fix a regression in argparse that help messages
     would wrap at non-breaking spaces.

   - bpo-28735(70): Fixed the comparison of mock.MagickMock with
     mock.ANY.

   - bpo-29011(71): Fix an important omission by adding Deque to the
     typing module.

   - bpo-29219(72): Fixed infinite recursion in the repr of
     uninitialized ctypes.CDLL instances.

   - bpo-28969(73): Fixed race condition in C implementation of
     functools.lru_cache.  KeyError could be raised when cached function
     with full cache was simultaneously called from different threads
     with the same uncached arguments.

   - bpo-29142(74): In urllib.request, suffixes in no_proxy environment
     variable with leading dots could match related hostnames again
     (e.g.  .b.c matches a.b.c).  Patch by Milan Oberkirch.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29403

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30961

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30886

   (4) https://bugs.python.org/issue?@action=redirect&bpo=29854

   (5) https://bugs.python.org/issue?@action=redirect&bpo=30807

   (6) https://bugs.python.org/issue?@action=redirect&bpo=30441

   (7) https://bugs.python.org/issue?@action=redirect&bpo=30532

   (8) https://bugs.python.org/issue?@action=redirect&bpo=29169

   (9) https://bugs.python.org/issue?@action=redirect&bpo=30879

   (10) https://bugs.python.org/issue?@action=redirect&bpo=30746

   (11) https://bugs.python.org/issue?@action=redirect&bpo=29755

   (12) https://bugs.python.org/issue?@action=redirect&bpo=30645

   (13) https://bugs.python.org/issue?@action=redirect&bpo=23890

   (14) https://bugs.python.org/issue?@action=redirect&bpo=30149

   (15) https://bugs.python.org/issue?@action=redirect&bpo=29931

   (16) https://bugs.python.org/issue?@action=redirect&bpo=24484

   (17) https://bugs.python.org/issue?@action=redirect&bpo=28994

   (18) https://bugs.python.org/issue?@action=redirect&bpo=30508

   (19) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (20) https://bugs.python.org/issue?@action=redirect&bpo=29870

   (21) https://bugs.python.org/issue?@action=redirect&bpo=29743

   (22) https://bugs.python.org/issue?@action=redirect&bpo=27585

   (23) https://bugs.python.org/issue?@action=redirect&bpo=30418

   (24) https://bugs.python.org/issue?@action=redirect&bpo=30378

   (25) https://bugs.python.org/issue?@action=redirect&bpo=29960

   (26) https://bugs.python.org/issue?@action=redirect&bpo=30414

   (27) https://bugs.python.org/issue?@action=redirect&bpo=30003

   (28) https://bugs.python.org/issue?@action=redirect&bpo=30301

   (29) https://bugs.python.org/issue?@action=redirect&bpo=30329

   (30) https://bugs.python.org/issue?@action=redirect&bpo=30375

   (31) https://bugs.python.org/issue?@action=redirect&bpo=30048

   (32) https://bugs.python.org/issue?@action=redirect&bpo=29990

   (33) https://bugs.python.org/issue?@action=redirect&bpo=26293

   (34) https://bugs.python.org/issue?@action=redirect&bpo=29094

   (35) https://bugs.python.org/issue?@action=redirect&bpo=30243

   (36) https://bugs.python.org/issue?@action=redirect&bpo=30185

   (37) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (38) https://bugs.python.org/issue?@action=redirect&bpo=30205

   (39) https://bugs.python.org/issue?@action=redirect&bpo=30070

   (40) https://bugs.python.org/issue?@action=redirect&bpo=30061

   (41) https://bugs.python.org/issue?@action=redirect&bpo=30068

   (42) https://bugs.python.org/issue?@action=redirect&bpo=29694

   (43) https://bugs.python.org/issue?@action=redirect&bpo=29692

   (44) https://bugs.python.org/issue?@action=redirect&bpo=29998

   (45) https://bugs.python.org/issue?@action=redirect&bpo=29942

   (46) https://bugs.python.org/issue?@action=redirect&bpo=27863

   (47) https://bugs.python.org/issue?@action=redirect&bpo=28699

   (48) https://bugs.python.org/issue?@action=redirect&bpo=25803

   (49) https://bugs.python.org/issue?@action=redirect&bpo=29861

   (50) https://bugs.python.org/issue?@action=redirect&bpo=29884

   (51) https://bugs.python.org/issue?@action=redirect&bpo=25455

   (52) https://bugs.python.org/issue?@action=redirect&bpo=29800

   (53) https://bugs.python.org/issue?@action=redirect&bpo=29742

   (54) https://bugs.python.org/issue?@action=redirect&bpo=8256

   (55) https://bugs.python.org/issue?@action=redirect&bpo=28298

   (56) https://bugs.python.org/issue?@action=redirect&bpo=29615

   (57) https://bugs.python.org/issue?@action=redirect&bpo=29704

   (58) https://bugs.python.org/issue?@action=redirect&bpo=29703

   (59) https://bugs.python.org/issue?@action=redirect&bpo=29376

   (60) https://bugs.python.org/issue?@action=redirect&bpo=29110

   (61) https://bugs.python.org/issue?@action=redirect&bpo=28961

   (62) https://bugs.python.org/issue?@action=redirect&bpo=29532

   (63) https://bugs.python.org/issue?@action=redirect&bpo=28556

   (64) https://bugs.python.org/issue?@action=redirect&bpo=29100

   (65) https://bugs.python.org/issue?@action=redirect&bpo=29519

   (66) https://bugs.python.org/issue?@action=redirect&bpo=29416

   (67) https://bugs.python.org/issue?@action=redirect&bpo=29444

   (68) https://bugs.python.org/issue?@action=redirect&bpo=29335

   (69) https://bugs.python.org/issue?@action=redirect&bpo=29290

   (70) https://bugs.python.org/issue?@action=redirect&bpo=28735

   (71) https://bugs.python.org/issue?@action=redirect&bpo=29011

   (72) https://bugs.python.org/issue?@action=redirect&bpo=29219

   (73) https://bugs.python.org/issue?@action=redirect&bpo=28969

   (74) https://bugs.python.org/issue?@action=redirect&bpo=29142


File: python.info,  Node: Documentação<74>,  Next: Testes<79>,  Prev: Biblioteca<167>,  Up: Python 3 5 4 release candidate 1

1.23.101.4 Documentação
.......................

   - bpo-30176(1): Add missing attribute related constants in curses
     documentation.

   - bpo-26985(2): Add missing info of code object in inspect
     documentation.

   - bpo-28929(3): Link the documentation to its source file on GitHub.

   - bpo-25008(4): Document smtpd.py as effectively deprecated and add a
     pointer to aiosmtpd, a third-party asyncio-based replacement.

   - bpo-26355(5): Add canonical header link on each page to
     corresponding major version of the documentation.  Patch by
     Matthias Bussonnier.

   - bpo-29349(6): Fix Python 2 syntax in code for building the
     documentation.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30176

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26985

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28929

   (4) https://bugs.python.org/issue?@action=redirect&bpo=25008

   (5) https://bugs.python.org/issue?@action=redirect&bpo=26355

   (6) https://bugs.python.org/issue?@action=redirect&bpo=29349


File: python.info,  Node: Testes<79>,  Next: Construção<87>,  Prev: Documentação<74>,  Up: Python 3 5 4 release candidate 1

1.23.101.5 Testes
.................

   - bpo-30822(1): Fix regrtest command line parser to allow passing -u
     extralargefile to run test_zipfile64.

   - bpo-30383(2): regrtest: Enhance regrtest and backport features from
     the master branch.  Add options: –coverage, –testdir, –list-tests
     (list test files, don’t run them), –list-cases (list test
     identifiers, don’t run them, bpo-30523(3)), –matchfile (load a list
     of test filters from a text file, bpo-30540(4)), –slowest (alias to
     –slow).  Enhance output: add timestamp, test result, currently
     running tests, “Tests result: xxx” summary with total duration,
     etc.  Fix reference leak hunting in regrtest, –huntrleaks: regrtest
     now warms up caches, create explicitly all internal singletons
     which are created on demand to prevent false positives when
     checking for reference leaks.  (bpo-30675(5)).

   - bpo-30357(6): test_thread: setUp() now uses
     support.threading_setup() and support.threading_cleanup() to wait
     until threads complete to avoid random side effects on following
     tests.  Initial patch written by Grzegorz Grzywacz.

   - bpo-28087(7): Skip test_asyncore and test_eintr poll failures on
     macOS. Skip some tests of select.poll when running on macOS due to
     unresolved issues with the underlying system poll function on some
     macOS versions.

   - bpo-30197(8): Enhanced functions swap_attr() and swap_item() in the
     test.support module.  They now work when delete replaced attribute
     or item inside the with statement.  The old value of the attribute
     or item (or None if it doesn’t exist) now will be assigned to the
     target of the “as” clause, if there is one.

   - bpo-29571(9): to match the behaviour of the ‘re.LOCALE’ flag,
     test_re.test_locale_flag now uses
     ‘locale.getpreferredencoding(False)’ to determine the candidate
     encoding for the test regex (allowing it to correctly skip the test
     when the default locale encoding is a multi-byte encoding)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30822

   (2) https://bugs.python.org/issue?@action=redirect&bpo=30383

   (3) https://bugs.python.org/issue?@action=redirect&bpo=30523

   (4) https://bugs.python.org/issue?@action=redirect&bpo=30540

   (5) https://bugs.python.org/issue?@action=redirect&bpo=30675

   (6) https://bugs.python.org/issue?@action=redirect&bpo=30357

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28087

   (8) https://bugs.python.org/issue?@action=redirect&bpo=30197

   (9) https://bugs.python.org/issue?@action=redirect&bpo=29571


File: python.info,  Node: Construção<87>,  Next: Windows<74>,  Prev: Testes<79>,  Up: Python 3 5 4 release candidate 1

1.23.101.6 Construção
.....................

   - bpo-29243(1): Prevent unnecessary rebuilding of Python during ‘make
     test’, ‘make install’ and some other make targets when configured
     with ‘--enable-optimizations’.

   - bpo-23404(2): Don’t regenerate generated files based on file
     modification time anymore: the action is now explicit.  Replace
     ‘make touch’ with ‘make regen-all’.

   - bpo-29643(3): Fix ‘--enable-optimization’ didn’t work.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29243

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23404

   (3) https://bugs.python.org/issue?@action=redirect&bpo=29643


File: python.info,  Node: Windows<74>,  Next: API C<74>,  Prev: Construção<87>,  Up: Python 3 5 4 release candidate 1

1.23.101.7 Windows
..................

   - bpo-30687(1): Locate msbuild.exe on Windows when building rather
     than vcvarsall.bat

   - bpo-29392(2): Prevent crash when passing invalid arguments into
     msvcrt module.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=30687

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29392


File: python.info,  Node: API C<74>,  Prev: Windows<74>,  Up: Python 3 5 4 release candidate 1

1.23.101.8 API C
................

   - bpo-27867(1): Function PySlice_GetIndicesEx() is replaced with a
     macro if Py_LIMITED_API is set to the value between 0x03050400 and
     0x03060000 (not including) or 0x03060100 or higher.

   - bpo-29083(2): Fixed the declaration of some public API functions.
     PyArg_VaParse() and PyArg_VaParseTupleAndKeywords() were not
     available in limited API. PyArg_ValidateKeywordArguments(),
     PyArg_UnpackTuple() and Py_BuildValue() were not available in
     limited API of version < 3.3 when PY_SSIZE_T_CLEAN is defined.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27867

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29083


File: python.info,  Node: Python 3 5 3 final,  Next: Python 3 5 3 release candidate 1,  Prev: Python 3 5 4 release candidate 1,  Up: Changelog

1.23.102 Python 3.5.3 final
---------------------------

'Data de lançamento: 2017-01-17'

There were no code changes between 3.5.3rc1 and 3.5.3 final.


File: python.info,  Node: Python 3 5 3 release candidate 1,  Next: Python 3 5 2 final,  Prev: Python 3 5 3 final,  Up: Changelog

1.23.103 Python 3.5.3 release candidate 1
-----------------------------------------

'Data de lançamento: 2017-01-02'

* Menu:

* Segurança: Segurança<55>.
* Núcleo e embutidos: Núcleo e embutidos<165>.
* Biblioteca: Biblioteca<168>.
* IDLE: IDLE<61>.
* API C: API C<75>.
* Documentação: Documentação<75>.
* Testes: Testes<80>.
* Ferramentas/Demos: Ferramentas/Demos<48>.
* Windows: Windows<75>.
* Construção: Construção<88>.


File: python.info,  Node: Segurança<55>,  Next: Núcleo e embutidos<165>,  Up: Python 3 5 3 release candidate 1

1.23.103.1 Segurança
....................

   - bpo-27278(1): Fix os.urandom() implementation using getrandom() on
     Linux.  Truncate size to INT_MAX and loop until we collected enough
     random bytes, instead of casting a directly Py_ssize_t to int.

   - bpo-22636(2): Avoid shell injection problems with
     ctypes.util.find_library().

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27278

   (2) https://bugs.python.org/issue?@action=redirect&bpo=22636


File: python.info,  Node: Núcleo e embutidos<165>,  Next: Biblioteca<168>,  Prev: Segurança<55>,  Up: Python 3 5 3 release candidate 1

1.23.103.2 Núcleo e embutidos
.............................

   - bpo-29073(1): bytearray formatting no longer truncates on first
     null byte.

   - bpo-28932(2): Do not include <sys/random.h> if it does not exist.

   - bpo-28147(3): Fix a memory leak in split-table dictionaries:
     setattr() must not convert combined table into split table.

   - bpo-25677(4): Correct the positioning of the syntax error caret for
     indented blocks.  Based on patch by Michael Layzell.

   - bpo-29000(5): Fixed bytes formatting of octals with zero padding in
     alternate form.

   - bpo-28512(6): Fixed setting the offset attribute of SyntaxError by
     PyErr_SyntaxLocationEx() and PyErr_SyntaxLocationObject().

   - bpo-28991(7): functools.lru_cache() was susceptible to an obscure
     reentrancy bug caused by a monkey-patched len() function.

   - bpo-28648(8): Fixed crash in Py_DecodeLocale() in debug build on
     Mac OS X when decode astral characters.  Patch by Xiang Zhang.

   - bpo-19398(9): Extra slash no longer added to sys.path components in
     case of empty compile-time PYTHONPATH components.

   - bpo-28426(10): Fixed potential crash in PyUnicode_AsDecodedObject()
     in debug build.

   - bpo-23782(11): Fixed possible memory leak in _PyTraceback_Add() and
     exception loss in PyTraceBack_Here().

   - bpo-28379(12): Added sanity checks and tests for
     PyUnicode_CopyCharacters().  Patch by Xiang Zhang.

   - bpo-28376(13): The type of long range iterator is now registered as
     Iterator.  Patch by Oren Milman.

   - bpo-28376(14): The constructor of range_iterator now checks that
     step is not 0.  Patch by Oren Milman.

   - bpo-26906(15): Resolving special methods of uninitialized type now
     causes implicit initialization of the type instead of a fail.

   - bpo-18287(16): PyType_Ready() now checks that tp_name is not NULL.
     Original patch by Niklas Koep.

   - bpo-24098(17): Fixed possible crash when AST is changed in process
     of compiling it.

   - bpo-28350(18): String constants with null character no longer
     interned.

   - bpo-26617(19): Fix crash when GC runs during weakref callbacks.

   - bpo-27942(20): String constants now interned recursively in tuples
     and frozensets.

   - bpo-21578(21): Fixed misleading error message when ImportError
     called with invalid keyword args.

   - bpo-28203(22): Fix incorrect type in error message from
     ‘complex(1.0, {2:3})’.  Patch by Soumya Sharma.

   - bpo-27955(23): Fallback on reading /dev/urandom device when the
     getrandom() syscall fails with EPERM, for example when blocked by
     SECCOMP.

   - bpo-28131(24): Fix a regression in zipimport’s compile_source().
     zipimport should use the same optimization level as the
     interpreter.

   - bpo-25221(25): Fix corrupted result from PyLong_FromLong(0) when
     Python is compiled with NSMALLPOSINTS = 0.

   - bpo-25758(26): Prevents zipimport from unnecessarily encoding a
     filename (patch by Eryk Sun)

   - bpo-28189(27): dictitems_contains no longer swallows compare
     errors.  (Patch by Xiang Zhang)

   - bpo-27812(28): Properly clear out a generator’s frame’s
     backreference to the generator to prevent crashes in frame.clear().

   - bpo-27811(29): Fix a crash when a coroutine that has not been
     awaited is finalized with warnings-as-errors enabled.

   - bpo-27587(30): Fix another issue found by PVS-Studio: Null pointer
     check after use of ‘def’ in _PyState_AddModule().  Initial patch by
     Christian Heimes.

   - bpo-26020(31): set literal evaluation order did not match
     documented behaviour.

   - bpo-27782(32): Multi-phase extension module import now correctly
     allows the ‘m_methods’ field to be used to add module level
     functions to instances of non-module types returned from
     ‘Py_create_mod’.  Patch by Xiang Zhang.

   - bpo-27936(33): The round() function accepted a second None argument
     for some types but not for others.  Fixed the inconsistency by
     accepting None for all numeric types.

   - bpo-27487(34): Warn if a submodule argument to “python -m” or
     runpy.run_module() is found in sys.modules after parent packages
     are imported, but before the submodule is executed.

   - bpo-27558(35): Fix a SystemError in the implementation of “raise”
     statement.  In a brand new thread, raise a RuntimeError since there
     is no active exception to reraise.  Patch written by Xiang Zhang.

   - bpo-27419(36): Standard __import__() no longer look up “__import__”
     in globals or builtins for importing submodules or “from import”.
     Fixed handling an error of non-string package name.

   - bpo-27083(37): Respect the PYTHONCASEOK environment variable under
     Windows.

   - bpo-27514(38): Make having too many statically nested blocks a
     SyntaxError instead of SystemError.

   - bpo-27473(39): Fixed possible integer overflow in bytes and
     bytearray concatenations.  Patch by Xiang Zhang.

   - bpo-27507(40): Add integer overflow check in bytearray.extend().
     Patch by Xiang Zhang.

   - bpo-27581(41): Don’t rely on wrapping for overflow check in
     PySequence_Tuple().  Patch by Xiang Zhang.

   - bpo-27443(42): __length_hint__() of bytearray iterators no longer
     return a negative integer for a resized bytearray.

   - bpo-27942(43): Fix memory leak in codeobject.c

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29073

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28932

   (3) https://bugs.python.org/issue?@action=redirect&bpo=28147

   (4) https://bugs.python.org/issue?@action=redirect&bpo=25677

   (5) https://bugs.python.org/issue?@action=redirect&bpo=29000

   (6) https://bugs.python.org/issue?@action=redirect&bpo=28512

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28991

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28648

   (9) https://bugs.python.org/issue?@action=redirect&bpo=19398

   (10) https://bugs.python.org/issue?@action=redirect&bpo=28426

   (11) https://bugs.python.org/issue?@action=redirect&bpo=23782

   (12) https://bugs.python.org/issue?@action=redirect&bpo=28379

   (13) https://bugs.python.org/issue?@action=redirect&bpo=28376

   (14) https://bugs.python.org/issue?@action=redirect&bpo=28376

   (15) https://bugs.python.org/issue?@action=redirect&bpo=26906

   (16) https://bugs.python.org/issue?@action=redirect&bpo=18287

   (17) https://bugs.python.org/issue?@action=redirect&bpo=24098

   (18) https://bugs.python.org/issue?@action=redirect&bpo=28350

   (19) https://bugs.python.org/issue?@action=redirect&bpo=26617

   (20) https://bugs.python.org/issue?@action=redirect&bpo=27942

   (21) https://bugs.python.org/issue?@action=redirect&bpo=21578

   (22) https://bugs.python.org/issue?@action=redirect&bpo=28203

   (23) https://bugs.python.org/issue?@action=redirect&bpo=27955

   (24) https://bugs.python.org/issue?@action=redirect&bpo=28131

   (25) https://bugs.python.org/issue?@action=redirect&bpo=25221

   (26) https://bugs.python.org/issue?@action=redirect&bpo=25758

   (27) https://bugs.python.org/issue?@action=redirect&bpo=28189

   (28) https://bugs.python.org/issue?@action=redirect&bpo=27812

   (29) https://bugs.python.org/issue?@action=redirect&bpo=27811

   (30) https://bugs.python.org/issue?@action=redirect&bpo=27587

   (31) https://bugs.python.org/issue?@action=redirect&bpo=26020

   (32) https://bugs.python.org/issue?@action=redirect&bpo=27782

   (33) https://bugs.python.org/issue?@action=redirect&bpo=27936

   (34) https://bugs.python.org/issue?@action=redirect&bpo=27487

   (35) https://bugs.python.org/issue?@action=redirect&bpo=27558

   (36) https://bugs.python.org/issue?@action=redirect&bpo=27419

   (37) https://bugs.python.org/issue?@action=redirect&bpo=27083

   (38) https://bugs.python.org/issue?@action=redirect&bpo=27514

   (39) https://bugs.python.org/issue?@action=redirect&bpo=27473

   (40) https://bugs.python.org/issue?@action=redirect&bpo=27507

   (41) https://bugs.python.org/issue?@action=redirect&bpo=27581

   (42) https://bugs.python.org/issue?@action=redirect&bpo=27443

   (43) https://bugs.python.org/issue?@action=redirect&bpo=27942


File: python.info,  Node: Biblioteca<168>,  Next: IDLE<61>,  Prev: Núcleo e embutidos<165>,  Up: Python 3 5 3 release candidate 1

1.23.103.3 Biblioteca
.....................

   - bpo-15812(1): inspect.getframeinfo() now correctly shows the first
     line of a context.  Patch by Sam Breese.

   - bpo-29094(2): Offsets in a ZIP file created with extern file object
     and modes “w” and “x” now are relative to the start of the file.

   - bpo-13051(3): Fixed recursion errors in large or resized
     curses.textpad.Textbox.  Based on patch by Tycho Andersen.

   - bpo-29119(4): Fix weakrefs in the pure python version of
     collections.OrderedDict move_to_end() method.  Contributed by Andra
     Bogildea.

   - bpo-9770(5): curses.ascii predicates now work correctly with
     negative integers.

   - bpo-28427(6): old keys should not remove new values from
     WeakValueDictionary when collecting from another thread.

   - bpo-28923(7): Remove editor artifacts from Tix.py.

   - bpo-28871(8): Fixed a crash when deallocate deep ElementTree.

   - bpo-19542(9): Fix bugs in WeakValueDictionary.setdefault() and
     WeakValueDictionary.pop() when a GC collection happens in another
     thread.

   - bpo-20191(10): Fixed a crash in resource.prlimit() when pass a
     sequence that doesn’t own its elements as limits.

   - bpo-28779(11): multiprocessing.set_forkserver_preload() would crash
     the forkserver process if a preloaded module instantiated some
     multiprocessing objects such as locks.

   - bpo-28847(12): dbm.dumb now supports reading read-only files and no
     longer writes the index file when it is not changed.

   - bpo-25659(13): In ctypes, prevent a crash calling the from_buffer()
     and from_buffer_copy() methods on abstract classes like Array.

   - bpo-28732(14): Fix crash in os.spawnv() with no elements in args

   - bpo-28485(15): Always raise ValueError for negative
     compileall.compile_dir(workers=…) parameter, even when
     multithreading is unavailable.

   - bpo-28387(16): Fixed possible crash in _io.TextIOWrapper
     deallocator when the garbage collector is invoked in other thread.
     Based on patch by Sebastian Cufre.

   - bpo-27517(17): LZMA compressor and decompressor no longer raise
     exceptions if given empty data twice.  Patch by Benjamin Fogle.

   - bpo-28549(18): Fixed segfault in curses’s addch() with ncurses6.

   - bpo-28449(19): tarfile.open() with mode “r” or “r:” now tries to
     open a tar file with compression before trying to open it without
     compression.  Otherwise it had 50% chance failed with
     ignore_zeros=True.

   - bpo-23262(20): The webbrowser module now supports Firefox 36+ and
     derived browsers.  Based on patch by Oleg Broytman.

   - bpo-27939(21): Fixed bugs in tkinter.ttk.LabeledScale and
     tkinter.Scale caused by representing the scale as float value
     internally in Tk.  tkinter.IntVar now works if float value is set
     to underlying Tk variable.

   - bpo-28255(22): calendar.TextCalendar().prmonth() no longer prints a
     space at the start of new line after printing a month’s calendar.
     Patch by Xiang Zhang.

   - bpo-20491(23): The textwrap.TextWrapper class now honors
     non-breaking spaces.  Based on patch by Kaarle Ritvanen.

   - bpo-28353(24): os.fwalk() no longer fails on broken links.

   - bpo-25464(25): Fixed HList.header_exists() in tkinter.tix module by
     addin a workaround to Tix library bug.

   - bpo-28488(26): shutil.make_archive() no longer add entry “./” to
     ZIP archive.

   - bpo-24452(27): Make webbrowser support Chrome on Mac OS X.

   - bpo-20766(28): Fix references leaked by pdb in the handling of
     SIGINT handlers.

   - bpo-26293(29): Fixed writing ZIP files that starts not from the
     start of the file.  Offsets in ZIP file now are relative to the
     start of the archive in conforming to the specification.

   - bpo-28321(30): Fixed writing non-BMP characters with binary format
     in plistlib.

   - bpo-28322(31): Fixed possible crashes when unpickle itertools
     objects from incorrect pickle data.  Based on patch by John Leitch.

   - Fix possible integer overflows and crashes in the mmap module with
     unusual usage patterns.

   - bpo-1703178(32): Fix the ability to pass the –link-objects option
     to the distutils build_ext command.

   - bpo-28253(33): Fixed calendar functions for extreme months: 0001-01
     and 9999-12.  Methods itermonthdays() and itermonthdays2() are
     reimplemented so that they don’t call itermonthdates() which can
     cause datetime.date under/overflow.

   - bpo-28275(34): Fixed possible use after free in the decompress()
     methods of the LZMADecompressor and BZ2Decompressor classes.
     Original patch by John Leitch.

   - bpo-27897(35): Fixed possible crash in
     sqlite3.Connection.create_collation() if pass invalid string-like
     object as a name.  Patch by Xiang Zhang.

   - bpo-18893(36): Fix invalid exception handling in
     Lib/ctypes/macholib/dyld.py.  Patch by Madison May.

   - bpo-27611(37): Fixed support of default root window in the
     tkinter.tix module.

   - bpo-27348(38): In the traceback module, restore the formatting of
     exception messages like “Exception: None”.  This fixes a regression
     introduced in 3.5a2.

   - bpo-25651(39): Allow false values to be used for msg parameter of
     subTest().

   - bpo-27932(40): Prevent memory leak in win32_ver().

   - Fix UnboundLocalError in socket._sendfile_use_sendfile.

   - bpo-28075(41): Check for ERROR_ACCESS_DENIED in Windows
     implementation of os.stat().  Patch by Eryk Sun.

   - bpo-25270(42): Prevent codecs.escape_encode() from raising
     SystemError when an empty bytestring is passed.

   - bpo-28181(43): Get antigravity over HTTPS. Patch by Kaartic
     Sivaraam.

   - bpo-25895(44): Enable WebSocket URL schemes in
     urllib.parse.urljoin.  Patch by Gergely Imreh and Markus
     Holtermann.

   - bpo-27599(45): Fixed buffer overrun in binascii.b2a_qp() and
     binascii.a2b_qp().

   - bpo-19003(46): m email.generator now replaces only ‘\r’ and/or ‘\n’
     line endings, per the RFC, instead of all unicode line endings.

   - bpo-28019(47): itertools.count() no longer rounds non-integer step
     in range between 1.0 and 2.0 to 1.

   - bpo-25969(48): Update the lib2to3 grammar to handle the unpacking
     generalizations added in 3.5.

   - bpo-14977(49): mailcap now respects the order of the lines in the
     mailcap files (“first match”), as required by RFC 1542.  Patch by
     Michael Lazar.

   - bpo-24594(50): Validates persist parameter when opening MSI
     database

   - bpo-17582(51): xml.etree.ElementTree nows preserves whitespaces in
     attributes (Patch by Duane Griffin.  Reviewed and approved by
     Stefan Behnel.)

   - bpo-28047(52): Fixed calculation of line length used for the base64
     CTE in the new email policies.

   - bpo-27445(53): Don’t pass str(_charset) to MIMEText.set_payload().
     Patch by Claude Paroz.

   - bpo-22450(54): urllib now includes an ‘Accept: */*’ header among
     the default headers.  This makes the results of REST API requests
     more consistent and predictable especially when proxy servers are
     involved.

   - lib2to3.pgen3.driver.load_grammar() now creates a stable cache file
     between runs given the same Grammar.txt input regardless of the
     hash randomization setting.

   - bpo-27570(55): Avoid zero-length memcpy() etc calls with null
     source pointers in the “ctypes” and “array” modules.

   - bpo-22233(56): Break email header lines 'only' on the RFC specified
     CR and LF characters, not on arbitrary unicode line breaks.  This
     also fixes a bug in HTTP header parsing.

   - bpo-27988(57): Fix email iter_attachments incorrect mutation of
     payload list.

   - bpo-27691(58): Fix ssl module’s parsing of GEN_RID subject
     alternative name fields in X.509 certs.

   - bpo-27850(59): Remove 3DES from ssl module’s default cipher list to
     counter measure sweet32 attack ( CVE 2016-2183(60)).

   - bpo-27766(61): Add ChaCha20 Poly1305 to ssl module’s default cipher
     list.  (Required OpenSSL 1.1.0 or LibreSSL).

   - bpo-26470(62): Port ssl and hashlib module to OpenSSL 1.1.0.

   - Remove support for passing a file descriptor to os.access.  It
     never worked but previously didn’t raise.

   - bpo-12885(63): Fix error when distutils encounters symlink.

   - bpo-27881(64): Fixed possible bugs when setting
     sqlite3.Connection.isolation_level.  Based on patch by Xiang Zhang.

   - bpo-27861(65): Fixed a crash in sqlite3.Connection.cursor() when a
     factory creates not a cursor.  Patch by Xiang Zhang.

   - bpo-19884(66): Avoid spurious output on OS X with Gnu Readline.

   - bpo-27706(67): Restore deterministic behavior of
     random.Random().seed() for string seeds using seeding version 1.
     Allows sequences of calls to random() to exactly match those
     obtained in Python 2.  Patch by Nofar Schnider.

   - bpo-10513(68): Fix a regression in Connection.commit().  Statements
     should not be reset after a commit.

   - A new version of typing.py from ‘https://github.com/python/typing’:
     Collection (only for 3.6) (bpo-27598(69)).  Add FrozenSet to
     __all__ (upstream #261).  Fix crash in _get_type_vars() (upstream
     #259).  Remove the dict constraint in ForwardRef._eval_type
     (upstream #252).

   - bpo-27539(70): Fix unnormalised ‘Fraction.__pow__’ result in the
     case of negative exponent and negative base.

   - bpo-21718(71): cursor.description is now available for queries
     using CTEs.

   - bpo-2466(72): posixpath.ismount now correctly recognizes mount
     points which the user does not have permission to access.

   - bpo-27773(73): Correct some memory management errors
     server_hostname in _ssl.wrap_socket().

   - bpo-26750(74): unittest.mock.create_autospec() now works properly
     for subclasses of property() and other data descriptors.

   - In the curses module, raise an error if window.getstr() or
     window.instr() is passed a negative value.

   - bpo-27783(75): Fix possible usage of uninitialized memory in
     operator.methodcaller.

   - bpo-27774(76): Fix possible Py_DECREF on unowned object in _sre.

   - bpo-27760(77): Fix possible integer overflow in binascii.b2a_qp.

   - bpo-27758(78): Fix possible integer overflow in the _csv module for
     large record lengths.

   - bpo-27568(79): Prevent HTTPoxy attack ( CVE 2016-1000110(80)).
     Ignore the HTTP_PROXY variable when REQUEST_METHOD environment is
     set, which indicates that the script is in CGI mode.

   - bpo-27656(81): Do not assume sched.h defines any SCHED_* constants.

   - bpo-27130(82): In the “zlib” module, fix handling of large buffers
     (typically 4 GiB) when compressing and decompressing.  Previously,
     inputs were limited to 4 GiB, and compression and decompression
     operations did not properly handle results of 4 GiB.

   - bpo-27533(83): Release GIL in nt._isdir

   - bpo-17711(84): Fixed unpickling by the persistent ID with protocol
     0.  Original patch by Alexandre Vassalotti.

   - bpo-27522(85): Avoid an unintentional reference cycle in
     email.feedparser.

   - bpo-26844(86): Fix error message for imp.find_module() to refer to
     ‘path’ instead of ‘name’.  Patch by Lev Maximov.

   - bpo-23804(87): Fix SSL zero-length recv() calls to not block and
     not raise an error about unclean EOF.

   - bpo-27466(88): Change time format returned by
     http.cookie.time2netscape, confirming the netscape cookie format
     and making it consistent with documentation.

   - bpo-26664(89): Fix activate.fish by removing mis-use of ‘$’.

   - bpo-22115(90): Fixed tracing Tkinter variables: trace_vdelete()
     with wrong mode no longer break tracing, trace_vinfo() now always
     returns a list of pairs of strings, tracing in the “u” mode now
     works.

   - Fix a scoping issue in importlib.util.LazyLoader which triggered an
     UnboundLocalError when lazy-loading a module that was already put
     into sys.modules.

   - bpo-27079(91): Fixed curses.ascii functions isblank(), iscntrl()
     and ispunct().

   - bpo-26754(92): Some functions (compile() etc) accepted a filename
     argument encoded as an iterable of integers.  Now only strings and
     byte-like objects are accepted.

   - bpo-27048(93): Prevents distutils failing on Windows when
     environment variables contain non-ASCII characters

   - bpo-27330(94): Fixed possible leaks in the ctypes module.

   - bpo-27238(95): Got rid of bare excepts in the turtle module.
     Original patch by Jelle Zijlstra.

   - bpo-27122(96): When an exception is raised within the context being
     managed by a contextlib.ExitStack() and one of the exit stack
     generators catches and raises it in a chain, do not re-raise the
     original exception when exiting, let the new chained one through.
     This avoids the PEP 479(97) bug described in issue25782.

   - bpo-26386(98): Fixed ttk.TreeView selection operations with item
     id’s containing spaces.

   - bpo-16182(99): Fix various functions in the “readline” module to
     use the locale encoding, and fix get_begidx() and get_endidx() to
     return code point indexes.

   - bpo-27392(100): Add loop.connect_accepted_socket().  Patch by Jim
     Fulton.

   - bpo-27930(101): Improved behaviour of
     logging.handlers.QueueListener.  Thanks to Paulo Andrade and Petr
     Viktorin for the analysis and patch.

   - bpo-21201(102): Improves readability of multiprocessing error
     message.  Thanks to Wojciech Walczak for patch.

   - bpo-27456(103): asyncio: Set TCP_NODELAY by default.

   - bpo-27906(104): Fix socket accept exhaustion during high TCP
     traffic.  Patch by Kevin Conway.

   - bpo-28174(105): Handle when SO_REUSEPORT isn’t properly supported.
     Patch by Seth Michael Larson.

   - bpo-26654(106): Inspect functools.partial in
     asyncio.Handle.__repr__.  Patch by iceboy.

   - bpo-26909(107): Fix slow pipes IO in asyncio.  Patch by INADA
     Naoki.

   - bpo-28176(108): Fix callbacks race in
     asyncio.SelectorLoop.sock_connect.

   - bpo-27759(109): Fix selectors incorrectly retain invalid file
     descriptors.  Patch by Mark Williams.

   - bpo-28368(110): Refuse monitoring processes if the child watcher
     has no loop attached.  Patch by Vincent Michel.

   - bpo-28369(111): Raise RuntimeError when transport’s FD is used with
     add_reader, add_writer, etc.

   - bpo-28370(112): Speedup asyncio.StreamReader.readexactly.  Patch by
     Коренберг Марк.

   - bpo-28371(113): Deprecate passing asyncio.Handles to
     run_in_executor.

   - bpo-28372(114): Fix asyncio to support formatting of non-python
     coroutines.

   - bpo-28399(115): Remove UNIX socket from FS before binding.  Patch
     by Коренберг Марк.

   - bpo-27972(116): Prohibit Tasks to await on themselves.

   - bpo-26923(117): Fix asyncio.Gather to refuse being cancelled once
     all children are done.  Patch by Johannes Ebke.

   - bpo-26796(118): Don’t configure the number of workers for default
     threadpool executor.  Initial patch by Hans Lawrenz.

   - bpo-28600(119): Optimize loop.call_soon().

   - bpo-28613(120): Fix get_event_loop() return the current loop if
     called from coroutines/callbacks.

   - bpo-28639(121): Fix inspect.isawaitable to always return bool Patch
     by Justin Mayfield.

   - bpo-28652(122): Make loop methods reject socket kinds they do not
     support.

   - bpo-28653(123): Fix a refleak in functools.lru_cache.

   - bpo-28703(124): Fix asyncio.iscoroutinefunction to handle Mock
     objects.

   - bpo-24142(125): Reading a corrupt config file left the parser in an
     invalid state.  Original patch by Florian Höch.

   - bpo-28990(126): Fix SSL hanging if connection is closed before
     handshake completed.  (Patch by HoHo-Ho)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15812

   (2) https://bugs.python.org/issue?@action=redirect&bpo=29094

   (3) https://bugs.python.org/issue?@action=redirect&bpo=13051

   (4) https://bugs.python.org/issue?@action=redirect&bpo=29119

   (5) https://bugs.python.org/issue?@action=redirect&bpo=9770

   (6) https://bugs.python.org/issue?@action=redirect&bpo=28427

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28923

   (8) https://bugs.python.org/issue?@action=redirect&bpo=28871

   (9) https://bugs.python.org/issue?@action=redirect&bpo=19542

   (10) https://bugs.python.org/issue?@action=redirect&bpo=20191

   (11) https://bugs.python.org/issue?@action=redirect&bpo=28779

   (12) https://bugs.python.org/issue?@action=redirect&bpo=28847

   (13) https://bugs.python.org/issue?@action=redirect&bpo=25659

   (14) https://bugs.python.org/issue?@action=redirect&bpo=28732

   (15) https://bugs.python.org/issue?@action=redirect&bpo=28485

   (16) https://bugs.python.org/issue?@action=redirect&bpo=28387

   (17) https://bugs.python.org/issue?@action=redirect&bpo=27517

   (18) https://bugs.python.org/issue?@action=redirect&bpo=28549

   (19) https://bugs.python.org/issue?@action=redirect&bpo=28449

   (20) https://bugs.python.org/issue?@action=redirect&bpo=23262

   (21) https://bugs.python.org/issue?@action=redirect&bpo=27939

   (22) https://bugs.python.org/issue?@action=redirect&bpo=28255

   (23) https://bugs.python.org/issue?@action=redirect&bpo=20491

   (24) https://bugs.python.org/issue?@action=redirect&bpo=28353

   (25) https://bugs.python.org/issue?@action=redirect&bpo=25464

   (26) https://bugs.python.org/issue?@action=redirect&bpo=28488

   (27) https://bugs.python.org/issue?@action=redirect&bpo=24452

   (28) https://bugs.python.org/issue?@action=redirect&bpo=20766

   (29) https://bugs.python.org/issue?@action=redirect&bpo=26293

   (30) https://bugs.python.org/issue?@action=redirect&bpo=28321

   (31) https://bugs.python.org/issue?@action=redirect&bpo=28322

   (32) https://bugs.python.org/issue?@action=redirect&bpo=1703178

   (33) https://bugs.python.org/issue?@action=redirect&bpo=28253

   (34) https://bugs.python.org/issue?@action=redirect&bpo=28275

   (35) https://bugs.python.org/issue?@action=redirect&bpo=27897

   (36) https://bugs.python.org/issue?@action=redirect&bpo=18893

   (37) https://bugs.python.org/issue?@action=redirect&bpo=27611

   (38) https://bugs.python.org/issue?@action=redirect&bpo=27348

   (39) https://bugs.python.org/issue?@action=redirect&bpo=25651

   (40) https://bugs.python.org/issue?@action=redirect&bpo=27932

   (41) https://bugs.python.org/issue?@action=redirect&bpo=28075

   (42) https://bugs.python.org/issue?@action=redirect&bpo=25270

   (43) https://bugs.python.org/issue?@action=redirect&bpo=28181

   (44) https://bugs.python.org/issue?@action=redirect&bpo=25895

   (45) https://bugs.python.org/issue?@action=redirect&bpo=27599

   (46) https://bugs.python.org/issue?@action=redirect&bpo=19003

   (47) https://bugs.python.org/issue?@action=redirect&bpo=28019

   (48) https://bugs.python.org/issue?@action=redirect&bpo=25969

   (49) https://bugs.python.org/issue?@action=redirect&bpo=14977

   (50) https://bugs.python.org/issue?@action=redirect&bpo=24594

   (51) https://bugs.python.org/issue?@action=redirect&bpo=17582

   (52) https://bugs.python.org/issue?@action=redirect&bpo=28047

   (53) https://bugs.python.org/issue?@action=redirect&bpo=27445

   (54) https://bugs.python.org/issue?@action=redirect&bpo=22450

   (55) https://bugs.python.org/issue?@action=redirect&bpo=27570

   (56) https://bugs.python.org/issue?@action=redirect&bpo=22233

   (57) https://bugs.python.org/issue?@action=redirect&bpo=27988

   (58) https://bugs.python.org/issue?@action=redirect&bpo=27691

   (59) https://bugs.python.org/issue?@action=redirect&bpo=27850

   (60) https://www.cve.org/CVERecord?id=CVE-2016-2183

   (61) https://bugs.python.org/issue?@action=redirect&bpo=27766

   (62) https://bugs.python.org/issue?@action=redirect&bpo=26470

   (63) https://bugs.python.org/issue?@action=redirect&bpo=12885

   (64) https://bugs.python.org/issue?@action=redirect&bpo=27881

   (65) https://bugs.python.org/issue?@action=redirect&bpo=27861

   (66) https://bugs.python.org/issue?@action=redirect&bpo=19884

   (67) https://bugs.python.org/issue?@action=redirect&bpo=27706

   (68) https://bugs.python.org/issue?@action=redirect&bpo=10513

   (69) https://bugs.python.org/issue?@action=redirect&bpo=27598

   (70) https://bugs.python.org/issue?@action=redirect&bpo=27539

   (71) https://bugs.python.org/issue?@action=redirect&bpo=21718

   (72) https://bugs.python.org/issue?@action=redirect&bpo=2466

   (73) https://bugs.python.org/issue?@action=redirect&bpo=27773

   (74) https://bugs.python.org/issue?@action=redirect&bpo=26750

   (75) https://bugs.python.org/issue?@action=redirect&bpo=27783

   (76) https://bugs.python.org/issue?@action=redirect&bpo=27774

   (77) https://bugs.python.org/issue?@action=redirect&bpo=27760

   (78) https://bugs.python.org/issue?@action=redirect&bpo=27758

   (79) https://bugs.python.org/issue?@action=redirect&bpo=27568

   (80) https://www.cve.org/CVERecord?id=CVE-2016-1000110

   (81) https://bugs.python.org/issue?@action=redirect&bpo=27656

   (82) https://bugs.python.org/issue?@action=redirect&bpo=27130

   (83) https://bugs.python.org/issue?@action=redirect&bpo=27533

   (84) https://bugs.python.org/issue?@action=redirect&bpo=17711

   (85) https://bugs.python.org/issue?@action=redirect&bpo=27522

   (86) https://bugs.python.org/issue?@action=redirect&bpo=26844

   (87) https://bugs.python.org/issue?@action=redirect&bpo=23804

   (88) https://bugs.python.org/issue?@action=redirect&bpo=27466

   (89) https://bugs.python.org/issue?@action=redirect&bpo=26664

   (90) https://bugs.python.org/issue?@action=redirect&bpo=22115

   (91) https://bugs.python.org/issue?@action=redirect&bpo=27079

   (92) https://bugs.python.org/issue?@action=redirect&bpo=26754

   (93) https://bugs.python.org/issue?@action=redirect&bpo=27048

   (94) https://bugs.python.org/issue?@action=redirect&bpo=27330

   (95) https://bugs.python.org/issue?@action=redirect&bpo=27238

   (96) https://bugs.python.org/issue?@action=redirect&bpo=27122

   (97) https://peps.python.org/pep-0479/

   (98) https://bugs.python.org/issue?@action=redirect&bpo=26386

   (99) https://bugs.python.org/issue?@action=redirect&bpo=16182

   (100) https://bugs.python.org/issue?@action=redirect&bpo=27392

   (101) https://bugs.python.org/issue?@action=redirect&bpo=27930

   (102) https://bugs.python.org/issue?@action=redirect&bpo=21201

   (103) https://bugs.python.org/issue?@action=redirect&bpo=27456

   (104) https://bugs.python.org/issue?@action=redirect&bpo=27906

   (105) https://bugs.python.org/issue?@action=redirect&bpo=28174

   (106) https://bugs.python.org/issue?@action=redirect&bpo=26654

   (107) https://bugs.python.org/issue?@action=redirect&bpo=26909

   (108) https://bugs.python.org/issue?@action=redirect&bpo=28176

   (109) https://bugs.python.org/issue?@action=redirect&bpo=27759

   (110) https://bugs.python.org/issue?@action=redirect&bpo=28368

   (111) https://bugs.python.org/issue?@action=redirect&bpo=28369

   (112) https://bugs.python.org/issue?@action=redirect&bpo=28370

   (113) https://bugs.python.org/issue?@action=redirect&bpo=28371

   (114) https://bugs.python.org/issue?@action=redirect&bpo=28372

   (115) https://bugs.python.org/issue?@action=redirect&bpo=28399

   (116) https://bugs.python.org/issue?@action=redirect&bpo=27972

   (117) https://bugs.python.org/issue?@action=redirect&bpo=26923

   (118) https://bugs.python.org/issue?@action=redirect&bpo=26796

   (119) https://bugs.python.org/issue?@action=redirect&bpo=28600

   (120) https://bugs.python.org/issue?@action=redirect&bpo=28613

   (121) https://bugs.python.org/issue?@action=redirect&bpo=28639

   (122) https://bugs.python.org/issue?@action=redirect&bpo=28652

   (123) https://bugs.python.org/issue?@action=redirect&bpo=28653

   (124) https://bugs.python.org/issue?@action=redirect&bpo=28703

   (125) https://bugs.python.org/issue?@action=redirect&bpo=24142

   (126) https://bugs.python.org/issue?@action=redirect&bpo=28990


File: python.info,  Node: IDLE<61>,  Next: API C<75>,  Prev: Biblioteca<168>,  Up: Python 3 5 3 release candidate 1

1.23.103.4 IDLE
...............

   - bpo-15308(1): Add ‘interrupt execution’ (^C) to Shell menu.  Patch
     by Roger Serwy, updated by Bayard Randel.

   - bpo-27922(2): Stop IDLE tests from ‘flashing’ gui widgets on the
     screen.

   - Add version to title of IDLE help window.

   - bpo-25564(3): In section on IDLE – console differences, mention
     that using exec means that __builtins__ is defined for each
     statement.

   - bpo-27714(4): text_textview and test_autocomplete now pass when
     re-run in the same process.  This occurs when test_idle fails when
     run with the -w option but without -jn.  Fix warning from
     test_config.

   - bpo-25507(5): IDLE no longer runs buggy code because of its tkinter
     imports.  Users must include the same imports required to run
     directly in Python.

   - bpo-27452(6): add line counter and crc to IDLE configHandler test
     dump.

   - bpo-27365(7): Allow non-ascii chars in IDLE NEWS.txt, for
     contributor names.

   - bpo-27245(8): IDLE: Cleanly delete custom themes and key bindings.
     Previously, when IDLE was started from a console or by import, a
     cascade of warnings was emitted.  Patch by Serhiy Storchaka.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15308

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27922

   (3) https://bugs.python.org/issue?@action=redirect&bpo=25564

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27714

   (5) https://bugs.python.org/issue?@action=redirect&bpo=25507

   (6) https://bugs.python.org/issue?@action=redirect&bpo=27452

   (7) https://bugs.python.org/issue?@action=redirect&bpo=27365

   (8) https://bugs.python.org/issue?@action=redirect&bpo=27245


File: python.info,  Node: API C<75>,  Next: Documentação<75>,  Prev: IDLE<61>,  Up: Python 3 5 3 release candidate 1

1.23.103.5 API C
................

   - bpo-28808(1): PyUnicode_CompareWithASCIIString() now never raises
     exceptions.

   - bpo-26754(2): PyUnicode_FSDecoder() accepted a filename argument
     encoded as an iterable of integers.  Now only strings and
     bytes-like objects are accepted.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28808

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26754


File: python.info,  Node: Documentação<75>,  Next: Testes<80>,  Prev: API C<75>,  Up: Python 3 5 3 release candidate 1

1.23.103.6 Documentação
.......................

   - bpo-28513(1): Documented command-line interface of zipfile.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28513


File: python.info,  Node: Testes<80>,  Next: Ferramentas/Demos<48>,  Prev: Documentação<75>,  Up: Python 3 5 3 release candidate 1

1.23.103.7 Testes
.................

   - bpo-28950(1): Disallow -j0 to be combined with -T/-l/-M in regrtest
     command line arguments.

   - bpo-28666(2): Now test.support.rmtree is able to remove unwritable
     or unreadable directories.

   - bpo-23839(3): Various caches now are cleared before running every
     test file.

   - bpo-28409(4): regrtest: fix the parser of command line arguments.

   - bpo-27787(5): Call gc.collect() before checking each test for
     “dangling threads”, since the dangling threads are weak references.

   - bpo-27369(6): In test_pyexpat, avoid testing an error message
     detail that changed in Expat 2.2.0.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28950

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28666

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23839

   (4) https://bugs.python.org/issue?@action=redirect&bpo=28409

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27787

   (6) https://bugs.python.org/issue?@action=redirect&bpo=27369


File: python.info,  Node: Ferramentas/Demos<48>,  Next: Windows<75>,  Prev: Testes<80>,  Up: Python 3 5 3 release candidate 1

1.23.103.8 Ferramentas/Demos
............................

   - bpo-27952(1): Get Tools/scripts/fixcid.py working with Python 3 and
     the current “re” module, avoid invalid Python backslash escapes,
     and fix a bug parsing escaped C quote signs.

   - bpo-27332(2): Fixed the type of the first argument of module-level
     functions generated by Argument Clinic.  Patch by Petr Viktorin.

   - bpo-27418(3): Fixed Tools/importbench/importbench.py.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27952

   (2) https://bugs.python.org/issue?@action=redirect&bpo=27332

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27418


File: python.info,  Node: Windows<75>,  Next: Construção<88>,  Prev: Ferramentas/Demos<48>,  Up: Python 3 5 3 release candidate 1

1.23.103.9 Windows
..................

   - bpo-28251(1): Improvements to help manuals on Windows.

   - bpo-28110(2): launcher.msi has different product codes between
     32-bit and 64-bit

   - bpo-25144(3): Ensures TargetDir is set before continuing with
     custom install.

   - bpo-27469(4): Adds a shell extension to the launcher so that drag
     and drop works correctly.

   - bpo-27309(5): Enabled proper Windows styles in python[w].exe
     manifest.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28251

   (2) https://bugs.python.org/issue?@action=redirect&bpo=28110

   (3) https://bugs.python.org/issue?@action=redirect&bpo=25144

   (4) https://bugs.python.org/issue?@action=redirect&bpo=27469

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27309


File: python.info,  Node: Construção<88>,  Prev: Windows<75>,  Up: Python 3 5 3 release candidate 1

1.23.103.10 Construção
......................

   - bpo-29080(1): Removes hard dependency on hg.exe from
     PCBuild/build.bat

   - bpo-23903(2): Added missed names to PC/python3.def.

   - bpo-10656(3): Fix out-of-tree building on AIX. Patch by Tristan
     Carel and Michael Haubenwallner.

   - bpo-26359(4): Rename –with-optimiations to –enable-optimizations.

   - bpo-28444(5): Fix missing extensions modules when cross compiling.

   - bpo-28248(6): Update Windows build and OS X installers to use
     OpenSSL 1.0.2j.

   - bpo-28258(7): Fixed build with Estonian locale (python-config and
     distclean targets in Makefile).  Patch by Arfrever Frehtes
     Taifersar Arahesis.

   - bpo-26661(8): setup.py now detects system libffi with multiarch
     wrapper.

   - bpo-28066(9): Fix the logic that searches build directories for
     generated include files when building outside the source tree.

   - bpo-15819(10): Remove redundant include search directory option for
     building outside the source tree.

   - bpo-27566(11): Fix clean target in freeze makefile (patch by Lisa
     Roach)

   - bpo-27705(12): Update message in validate_ucrtbase.py

   - bpo-27983(13): Cause lack of llvm-profdata tool when using clang as
     required for PGO linking to be a configure time error rather than
     make time when –with-optimizations is enabled.  Also improve our
     ability to find the llvm-profdata tool on MacOS and some Linuxes.

   - bpo-26307(14): The profile-opt build now applies PGO to the
     built-in modules.

   - bpo-26359(15): Add the –with-optimizations configure flag.

   - bpo-27713(16): Suppress spurious build warnings when updating
     importlib’s bootstrap files.  Patch by Xiang Zhang

   - bpo-25825(17): Correct the references to Modules/python.exp and
     ld_so_aix, which are required on AIX. This updates references to an
     installation path that was changed in 3.2a4, and undoes changed
     references to the build tree that were made in 3.5.0a1.

   - bpo-27453(18): CPP invocation in configure must use CPPFLAGS. Patch
     by Chi Hsuan Yen.

   - bpo-27641(19): The configure script now inserts comments into the
     makefile to prevent the pgen and _freeze_importlib executables from
     being cross-compiled.

   - bpo-26662(20): Set PYTHON_FOR_GEN in configure as the Python
     program to be used for file generation during the build.

   - bpo-10910(21): Avoid C++ compilation errors on FreeBSD and OS X.
     Also update FreedBSD version checks for the original ctype UTF-8
     workaround.

   - bpo-28676(22): Prevent missing ‘getentropy’ declaration warning on
     macOS. Patch by Gareth Rees.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=29080

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23903

   (3) https://bugs.python.org/issue?@action=redirect&bpo=10656

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26359

   (5) https://bugs.python.org/issue?@action=redirect&bpo=28444

   (6) https://bugs.python.org/issue?@action=redirect&bpo=28248

   (7) https://bugs.python.org/issue?@action=redirect&bpo=28258

   (8) https://bugs.python.org/issue?@action=redirect&bpo=26661

   (9) https://bugs.python.org/issue?@action=redirect&bpo=28066

   (10) https://bugs.python.org/issue?@action=redirect&bpo=15819

   (11) https://bugs.python.org/issue?@action=redirect&bpo=27566

   (12) https://bugs.python.org/issue?@action=redirect&bpo=27705

   (13) https://bugs.python.org/issue?@action=redirect&bpo=27983

   (14) https://bugs.python.org/issue?@action=redirect&bpo=26307

   (15) https://bugs.python.org/issue?@action=redirect&bpo=26359

   (16) https://bugs.python.org/issue?@action=redirect&bpo=27713

   (17) https://bugs.python.org/issue?@action=redirect&bpo=25825

   (18) https://bugs.python.org/issue?@action=redirect&bpo=27453

   (19) https://bugs.python.org/issue?@action=redirect&bpo=27641

   (20) https://bugs.python.org/issue?@action=redirect&bpo=26662

   (21) https://bugs.python.org/issue?@action=redirect&bpo=10910

   (22) https://bugs.python.org/issue?@action=redirect&bpo=28676


File: python.info,  Node: Python 3 5 2 final,  Next: Python 3 5 2 release candidate 1,  Prev: Python 3 5 3 release candidate 1,  Up: Changelog

1.23.104 Python 3.5.2 final
---------------------------

'Data de lançamento: 2016-06-26'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<166>.
* Testes: Testes<81>.
* IDLE: IDLE<62>.


File: python.info,  Node: Núcleo e embutidos<166>,  Next: Testes<81>,  Up: Python 3 5 2 final

1.23.104.1 Núcleo e embutidos
.............................

   - bpo-26930(1): Update Windows builds to use OpenSSL 1.0.2h.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26930


File: python.info,  Node: Testes<81>,  Next: IDLE<62>,  Prev: Núcleo e embutidos<166>,  Up: Python 3 5 2 final

1.23.104.2 Testes
.................

   - bpo-26867(1): Ubuntu’s openssl OP_NO_SSLv3 is forced on by default;
     fix test.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26867


File: python.info,  Node: IDLE<62>,  Prev: Testes<81>,  Up: Python 3 5 2 final

1.23.104.3 IDLE
...............

   - bpo-27365(1): Allow non-ascii in idlelib/NEWS.txt - minimal part
     for 3.5.2.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27365


File: python.info,  Node: Python 3 5 2 release candidate 1,  Next: Python 3 5 1 final,  Prev: Python 3 5 2 final,  Up: Changelog

1.23.105 Python 3.5.2 release candidate 1
-----------------------------------------

'Data de lançamento: 2016-06-12'

* Menu:

* Segurança: Segurança<56>.
* Núcleo e embutidos: Núcleo e embutidos<167>.
* Biblioteca: Biblioteca<169>.
* IDLE: IDLE<63>.
* Documentação: Documentação<76>.
* Testes: Testes<82>.
* Construção: Construção<89>.
* Windows: Windows<76>.
* Ferramentas/Demos: Ferramentas/Demos<49>.


File: python.info,  Node: Segurança<56>,  Next: Núcleo e embutidos<167>,  Up: Python 3 5 2 release candidate 1

1.23.105.1 Segurança
....................

   - bpo-26556(1): Update expat to 2.1.1, fixes CVE 2015-1283(2).

   - Fix TLS stripping vulnerability in smtplib, CVE 2016-0772(3).
     Reported by Team Oststrom.

   - bpo-26839(4): On Linux, *note os.urandom(): 523. now calls
     ‘getrandom()’ with ‘GRND_NONBLOCK’ to fall back on reading
     ‘/dev/urandom’ if the urandom entropy pool is not initialized yet.
     Patch written by Colm Buckley.

   - bpo-26657(5): Fix directory traversal vulnerability with
     http.server on Windows.  This fixes a regression that was
     introduced in 3.3.4rc1 and 3.4.0rc1.  Based on patch by Philipp
     Hagemeister.

   - bpo-26313(6): ssl.py _load_windows_store_certs fails if windows
     cert store is empty.  Patch by Baji.

   - bpo-25939(7): On Windows open the cert store readonly in
     ssl.enum_certificates.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26556

   (2) https://www.cve.org/CVERecord?id=CVE-2015-1283

   (3) https://www.cve.org/CVERecord?id=CVE-2016-0772

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26839

   (5) https://bugs.python.org/issue?@action=redirect&bpo=26657

   (6) https://bugs.python.org/issue?@action=redirect&bpo=26313

   (7) https://bugs.python.org/issue?@action=redirect&bpo=25939


File: python.info,  Node: Núcleo e embutidos<167>,  Next: Biblioteca<169>,  Prev: Segurança<56>,  Up: Python 3 5 2 release candidate 1

1.23.105.2 Núcleo e embutidos
.............................

   - bpo-27066(1): Fixed SystemError if a custom opener (for open())
     returns a negative number without setting an exception.

   - bpo-20041(2): Fixed TypeError when frame.f_trace is set to None.
     Patch by Xavier de Gaye.

   - bpo-26168(3): Fixed possible refleaks in failing Py_BuildValue()
     with the “N” format unit.

   - bpo-26991(4): Fix possible refleak when creating a function with
     annotations.

   - bpo-27039(5): Fixed bytearray.remove() for values greater than 127.
     Patch by Joe Jevnik.

   - bpo-23640(6): int.from_bytes() no longer bypasses constructors for
     subclasses.

   - bpo-26811(7): gc.get_objects() no longer contains a broken tuple
     with NULL pointer.

   - bpo-20120(8): Use RawConfigParser for .pypirc parsing, removing
     support for interpolation unintentionally added with move to Python
     3.  Behavior no longer does any interpolation in .pypirc files,
     matching behavior in Python 2.7 and Setuptools 19.0.

   - bpo-26659(9): Make the builtin slice type support cycle collection.

   - bpo-26718(10): super.__init__ no longer leaks memory if called
     multiple times.  NOTE: A direct call of super.__init__ is not
     endorsed!

   - bpo-25339(11): PYTHONIOENCODING now has priority over locale in
     setting the error handler for stdin and stdout.

   - bpo-26494(12): Fixed crash on iterating exhausting iterators.
     Affected classes are generic sequence iterators, iterators of str,
     bytes, bytearray, list, tuple, set, frozenset, dict, OrderedDict,
     corresponding views and os.scandir() iterator.

   - bpo-26581(13): If coding cookie is specified multiple times on a
     line in Python source code file, only the first one is taken to
     account.

   - bpo-26464(14): Fix str.translate() when string is ASCII and first
     replacements removes character, but next replacement uses a
     non-ASCII character or a string longer than 1 character.
     Regression introduced in Python 3.5.0.

   - bpo-22836(15): Ensure exception reports from PyErr_Display() and
     PyErr_WriteUnraisable() are sensible even when formatting them
     produces secondary errors.  This affects the reports produced by
     sys.__excepthook__() and when __del__() raises an exception.

   - bpo-26302(16): Correct behavior to reject comma as a legal
     character for cookie names.

   - bpo-4806(17): Avoid masking the original TypeError exception when
     using star (‘*’) unpacking in function calls.  Based on patch by
     Hagen Fürstenau and Daniel Urban.

   - bpo-27138(18): Fix the doc comment for FileFinder.find_spec().

   - bpo-26154(19): Add a new private _PyThreadState_UncheckedGet()
     function to get the current Python thread state, but don’t issue a
     fatal error if it is NULL. This new function must be used instead
     of accessing directly the _PyThreadState_Current variable.  The
     variable is no more exposed since Python 3.5.1 to hide the exact
     implementation of atomic C types, to avoid compiler issues.

   - bpo-26194(20): Deque.insert() gave odd results for bounded deques
     that had reached their maximum size.  Now an IndexError will be
     raised when attempting to insert into a full deque.

   - bpo-25843(21): When compiling code, don’t merge constants if they
     are equal but have a different types.  For example, ‘f1, f2 =
     lambda: 1, lambda: 1.0’ is now correctly compiled to two different
     functions: ‘f1()’ returns ‘1’ (‘int’) and ‘f2()’ returns ‘1.0’
     (‘int’), even if ‘1’ and ‘1.0’ are equal.

   - bpo-22995(22): [UPDATE] Comment out the one of the pickleability
     tests in _PyObject_GetState() due to regressions observed in
     Cython-based projects.

   - bpo-25961(23): Disallowed null characters in the type name.

   - bpo-25973(24): Fix segfault when an invalid nonlocal statement
     binds a name starting with two underscores.

   - bpo-22995(25): Instances of extension types with a state that
     aren’t subclasses of list or dict and haven’t implemented any
     pickle-related methods (__reduce__, __reduce_ex__, __getnewargs__,
     __getnewargs_ex__, or __getstate__), can no longer be pickled.
     Including memoryview.

   - bpo-20440(26): Massive replacing unsafe attribute setting code with
     special macro Py_SETREF.

   - bpo-25766(27): Special method __bytes__() now works in str
     subclasses.

   - bpo-25421(28): __sizeof__ methods of builtin types now use dynamic
     basic size.  This allows sys.getsize() to work correctly with their
     subclasses with __slots__ defined.

   - bpo-25709(29): Fixed problem with in-place string concatenation and
     utf-8 cache.

   - bpo-27147(30): Mention PEP 420(31) in the importlib docs.

   - bpo-24097(32): Fixed crash in object.__reduce__() if slot name is
     freed inside __getattr__.

   - bpo-24731(33): Fixed crash on converting objects with special
     methods __bytes__, __trunc__, and __float__ returning instances of
     subclasses of bytes, int, and float to subclasses of bytes, int,
     and float correspondingly.

   - bpo-26478(34): Fix semantic bugs when using binary operators with
     dictionary views and tuples.

   - bpo-26171(35): Fix possible integer overflow and heap corruption in
     zipimporter.get_data().

   - bpo-25660(36): Fix TAB key behaviour in REPL with readline.

   - bpo-25887(37): Raise a RuntimeError when a coroutine object is
     awaited more than once.

   - bpo-27243(38): Update the __aiter__ protocol: instead of returning
     an awaitable that resolves to an asynchronous iterator, the
     asynchronous iterator should be returned directly.  Doing the
     former will trigger a PendingDeprecationWarning.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27066

   (2) https://bugs.python.org/issue?@action=redirect&bpo=20041

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26168

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26991

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27039

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23640

   (7) https://bugs.python.org/issue?@action=redirect&bpo=26811

   (8) https://bugs.python.org/issue?@action=redirect&bpo=20120

   (9) https://bugs.python.org/issue?@action=redirect&bpo=26659

   (10) https://bugs.python.org/issue?@action=redirect&bpo=26718

   (11) https://bugs.python.org/issue?@action=redirect&bpo=25339

   (12) https://bugs.python.org/issue?@action=redirect&bpo=26494

   (13) https://bugs.python.org/issue?@action=redirect&bpo=26581

   (14) https://bugs.python.org/issue?@action=redirect&bpo=26464

   (15) https://bugs.python.org/issue?@action=redirect&bpo=22836

   (16) https://bugs.python.org/issue?@action=redirect&bpo=26302

   (17) https://bugs.python.org/issue?@action=redirect&bpo=4806

   (18) https://bugs.python.org/issue?@action=redirect&bpo=27138

   (19) https://bugs.python.org/issue?@action=redirect&bpo=26154

   (20) https://bugs.python.org/issue?@action=redirect&bpo=26194

   (21) https://bugs.python.org/issue?@action=redirect&bpo=25843

   (22) https://bugs.python.org/issue?@action=redirect&bpo=22995

   (23) https://bugs.python.org/issue?@action=redirect&bpo=25961

   (24) https://bugs.python.org/issue?@action=redirect&bpo=25973

   (25) https://bugs.python.org/issue?@action=redirect&bpo=22995

   (26) https://bugs.python.org/issue?@action=redirect&bpo=20440

   (27) https://bugs.python.org/issue?@action=redirect&bpo=25766

   (28) https://bugs.python.org/issue?@action=redirect&bpo=25421

   (29) https://bugs.python.org/issue?@action=redirect&bpo=25709

   (30) https://bugs.python.org/issue?@action=redirect&bpo=27147

   (31) https://peps.python.org/pep-0420/

   (32) https://bugs.python.org/issue?@action=redirect&bpo=24097

   (33) https://bugs.python.org/issue?@action=redirect&bpo=24731

   (34) https://bugs.python.org/issue?@action=redirect&bpo=26478

   (35) https://bugs.python.org/issue?@action=redirect&bpo=26171

   (36) https://bugs.python.org/issue?@action=redirect&bpo=25660

   (37) https://bugs.python.org/issue?@action=redirect&bpo=25887

   (38) https://bugs.python.org/issue?@action=redirect&bpo=27243


File: python.info,  Node: Biblioteca<169>,  Next: IDLE<63>,  Prev: Núcleo e embutidos<167>,  Up: Python 3 5 2 release candidate 1

1.23.105.3 Biblioteca
.....................

   - bpo-21386(1): Implement missing IPv4Address.is_global property.  It
     was documented since 07a5610bae9d.  Initial patch by Roger Luethi.

   - bpo-20900(2): distutils register command now decodes HTTP responses
     correctly.  Initial patch by ingrid.

   - A new version of typing.py provides several new classes and
     features: @overload outside stubs, Reversible, DefaultDict, Text,
     ContextManager, Type[], NewType(), TYPE_CHECKING, and numerous bug
     fixes (note that some of the new features are not yet implemented
     in mypy or other static analyzers).  Also classes for PEP 492(3)
     (Awaitable, AsyncIterable, AsyncIterator) have been added (in fact
     they made it into 3.5.1 but were never mentioned).

   - bpo-25738(4): Stop http.server.BaseHTTPRequestHandler.send_error()
     from sending a message body for 205 Reset Content.  Also, don’t
     send Content header fields in responses that don’t have a body.
     Patch by Susumu Koshiba.

   - bpo-21313(5): Fix the “platform” module to tolerate when
     sys.version contains truncated build information.

   - bpo-27164(6): In the zlib module, allow decompressing raw Deflate
     streams with a predefined zdict.  Based on patch by Xiang Zhang.

   - bpo-24291(7): Fix wsgiref.simple_server.WSGIRequestHandler to
     completely write data to the client.  Previously it could do
     partial writes and truncate data.  Also,
     wsgiref.handler.ServerHandler can now handle stdout doing partial
     writes, but this is deprecated.

   - bpo-26809(8): Add ‘__all__’ to *note string: d3.  Patch by Emanuel
     Barry.

   - bpo-26373(9): subprocess.Popen.communicate now correctly ignores
     BrokenPipeError when the child process dies before .communicate()
     is called in more/all circumstances.

   - bpo-21776(10): distutils.upload now correctly handles HTTPError.
     Initial patch by Claudiu Popa.

   - bpo-27114(11): Fix SSLContext._load_windows_store_certs fails with
     PermissionError

   - bpo-18383(12): Avoid creating duplicate filters when using
     filterwarnings and simplefilter.  Based on patch by Alex Shkop.

   - bpo-27057(13): Fix os.set_inheritable() on Android, ioctl() is
     blocked by SELinux and fails with EACCESS. The function now falls
     back to fcntl().  Patch written by Michał Bednarski.

   - bpo-27014(14): Fix infinite recursion using typing.py.  Thanks to
     Kalle Tuure!

   - bpo-14132(15): Fix urllib.request redirect handling when the target
     only has a query string.  Original fix by Ján Janech.

   - bpo-17214(16): The “urllib.request” module now percent-encodes
     non-ASCII bytes found in redirect target URLs.  Some servers send
     Location header fields with non-ASCII bytes, but “http.client”
     requires the request target to be ASCII-encodable, otherwise a
     UnicodeEncodeError is raised.  Based on patch by Christian Heimes.

   - bpo-26892(17): Honor debuglevel flag in urllib.request.HTTPHandler.
     Patch contributed by Chi Hsuan Yen.

   - bpo-22274(18): In the subprocess module, allow stderr to be
     redirected to stdout even when stdout is not redirected.  Patch by
     Akira Li.

   - bpo-26807(19): mock_open ‘files’ no longer error on readline at end
     of file.  Patch from Yolanda Robla.

   - bpo-25745(20): Fixed leaking a userptr in curses panel destructor.

   - bpo-26977(21): Removed unnecessary, and ignored, call to sum of
     squares helper in statistics.pvariance.

   - bpo-26881(22): The modulefinder module now supports extended opcode
     arguments.

   - bpo-23815(23): Fixed crashes related to directly created instances
     of types in _tkinter and curses.panel modules.

   - bpo-17765(24): weakref.ref() no longer silently ignores keyword
     arguments.  Patch by Georg Brandl.

   - bpo-26873(25): xmlrpc now raises ResponseError on unsupported type
     tags instead of silently return incorrect result.

   - bpo-26711(26): Fixed the comparison of plistlib.Data with other
     types.

   - bpo-24114(27): Fix an uninitialized variable in ‘ctypes.util’.  The
     bug only occurs on SunOS when the ctypes implementation searches
     for the ‘crle’ program.  Patch by Xiang Zhang.  Tested on SunOS by
     Kees Bos.

   - bpo-26864(28): In urllib.request, change the proxy bypass host
     checking against no_proxy to be case-insensitive, and to not match
     unrelated host names that happen to have a bypassed hostname as a
     suffix.  Patch by Xiang Zhang.

   - bpo-26634(29): recursive_repr() now sets __qualname__ of wrapper.
     Patch by Xiang Zhang.

   - bpo-26804(30): urllib.request will prefer lower_case proxy
     environment variables over UPPER_CASE or Mixed_Case ones.  Patch
     contributed by Hans-Peter Jansen.

   - bpo-26837(31): assertSequenceEqual() now correctly outputs
     non-stringified differing items (like bytes in the -b mode).  This
     affects assertListEqual() and assertTupleEqual().

   - bpo-26041(32): Remove “will be removed in Python 3.7” from
     deprecation messages of platform.dist() and
     platform.linux_distribution().  Patch by Kumaripaba Miyurusara
     Athukorala.

   - bpo-26822(33): itemgetter, attrgetter and methodcaller objects no
     longer silently ignore keyword arguments.

   - bpo-26733(34): Disassembling a class now disassembles class and
     static methods.  Patch by Xiang Zhang.

   - bpo-26801(35): Fix error handling in *note
     shutil.get_terminal_size(): 1142, catch *note AttributeError: 34b.
     instead of *note NameError: 43f.  Patch written by Emanuel Barry.

   - bpo-24838(36): tarfile’s ustar and gnu formats now correctly
     calculate name and link field limits for multibyte character
     encodings like utf-8.

   - bpo-26717(37): Stop encoding Latin-1-ized WSGI paths with UTF-8.
     Patch by Anthony Sottile.

   - bpo-26735(38): Fix *note os.urandom(): 523. on Solaris 11.3 and
     newer when reading more than 1,024 bytes: call ‘getrandom()’
     multiple times with a limit of 1024 bytes per call.

   - bpo-16329(39): Add .webm to mimetypes.types_map.  Patch by
     Giampaolo Rodola’.

   - bpo-13952(40): Add .csv to mimetypes.types_map.  Patch by Geoff
     Wilson.

   - bpo-26709(41): Fixed Y2038 problem in loading binary PLists.

   - bpo-23735(42): Handle terminal resizing with Readline 6.3+ by
     installing our own SIGWINCH handler.  Patch by Eric Price.

   - bpo-26586(43): In http.server, respond with “413 Request header
     fields too large” if there are too many header fields to parse,
     rather than killing the connection and raising an unhandled
     exception.  Patch by Xiang Zhang.

   - bpo-22854(44): Change BufferedReader.writable() and
     BufferedWriter.readable() to always return False.

   - bpo-25195(45): Fix a regression in mock.MagicMock.  _Call is a
     subclass of tuple (changeset 3603bae63c13 only works for classes)
     so we need to implement __ne__ ourselves.  Patch by Andrew Plummer.

   - bpo-26644(46): Raise ValueError rather than SystemError when a
     negative length is passed to SSLSocket.recv() or read().

   - bpo-23804(47): Fix SSL recv(0) and read(0) methods to return zero
     bytes instead of up to 1024.

   - bpo-26616(48): Fixed a bug in datetime.astimezone() method.

   - bpo-21925(49): *note warnings.formatwarning(): 1b8d. now catches
     exceptions on ‘linecache.getline(...)’ to be able to log *note
     ResourceWarning: 244. emitted late during the Python shutdown
     process.

   - bpo-24266(50): Ctrl+C during Readline history search now cancels
     the search mode when compiled with Readline 7.

   - bpo-26560(51): Avoid potential ValueError in
     BaseHandler.start_response.  Initial patch by Peter Inglesby.

   - bpo-26569(52): Fix *note pyclbr.readmodule(): 82e. and *note
     pyclbr.readmodule_ex(): 82f. to support importing packages.

   - bpo-26499(53): Account for remaining Content-Length in
     HTTPResponse.readline() and read1().  Based on patch by Silent
     Ghost.  Also document that HTTPResponse now supports these methods.

   - bpo-25320(54): Handle sockets in directories unittest discovery is
     scanning.  Patch from Victor van den Elzen.

   - bpo-16181(55): cookiejar.http2time() now returns None if year is
     higher than datetime.MAXYEAR.

   - bpo-26513(56): Fixes platform module detection of Windows Server

   - bpo-23718(57): Fixed parsing time in week 0 before Jan 1.  Original
     patch by Tamás Bence Gedai.

   - bpo-20589(58): Invoking Path.owner() and Path.group() on Windows
     now raise NotImplementedError instead of ImportError.

   - bpo-26177(59): Fixed the keys() method for Canvas and Scrollbar
     widgets.

   - bpo-15068(60): Got rid of excessive buffering in the fileinput
     module.  The bufsize parameter is no longer used.

   - bpo-2202(61): Fix UnboundLocalError in
     AbstractDigestAuthHandler.get_algorithm_impls.  Initial patch by
     Mathieu Dupuy.

   - bpo-25718(62): Fixed pickling and copying the accumulate() iterator
     with total is None.

   - bpo-26475(63): Fixed debugging output for regular expressions with
     the (?x) flag.

   - bpo-26457(64): Fixed the subnets() methods in IP network classes
     for the case when resulting prefix length is equal to maximal
     prefix length.  Based on patch by Xiang Zhang.

   - bpo-26385(65): Remove the file if the internal open() call in
     NamedTemporaryFile() fails.  Patch by Silent Ghost.

   - bpo-26402(66): Fix XML-RPC client to retry when the server shuts
     down a persistent connection.  This was a regression related to the
     new http.client.RemoteDisconnected exception in 3.5.0a4.

   - bpo-25913(67): Leading ‘<~’ is optional now in base64.a85decode()
     with adobe=True.  Patch by Swati Jaiswal.

   - bpo-26186(68): Remove an invalid type check in
     importlib.util.LazyLoader.

   - bpo-26367(69): importlib.__import__() raises SystemError like
     builtins.__import__() when ‘level’ is specified but without an
     accompanying package specified.

   - bpo-26309(70): In the “socketserver” module, shut down the request
     (closing the connected socket) when verify_request() returns false.
     Patch by Aviv Palivoda.

   - bpo-25995(71): os.walk() no longer uses FDs proportional to the
     tree depth.

   - bpo-26117(72): The os.scandir() iterator now closes file descriptor
     not only when the iteration is finished, but when it was failed
     with error.

   - bpo-25911(73): Restored support of bytes paths in os.walk() on
     Windows.

   - bpo-26045(74): Add UTF-8 suggestion to error message when posting a
     non-Latin-1 string with http.client.

   - bpo-12923(75): Reset FancyURLopener’s redirect counter even if
     there is an exception.  Based on patches by Brian Brazil and Daniel
     Rocco.

   - bpo-25945(76): Fixed a crash when unpickle the functools.partial
     object with wrong state.  Fixed a leak in failed functools.partial
     constructor.  “args” and “keywords” attributes of functools.partial
     have now always types tuple and dict correspondingly.

   - bpo-26202(77): copy.deepcopy() now correctly copies range() objects
     with non-atomic attributes.

   - bpo-23076(78): Path.glob() now raises a ValueError if it’s called
     with an invalid pattern.  Patch by Thomas Nyberg.

   - bpo-19883(79): Fixed possible integer overflows in zipimport.

   - bpo-26227(80): On Windows, getnameinfo(), gethostbyaddr() and
     gethostbyname_ex() functions of the socket module now decode the
     hostname from the ANSI code page rather than UTF-8.

   - bpo-26147(81): xmlrpc now works with strings not encodable with
     used non-UTF-8 encoding.

   - bpo-25935(82): Garbage collector now breaks reference loops with
     OrderedDict.

   - bpo-16620(83): Fixed AttributeError in msilib.Directory.glob().

   - bpo-26013(84): Added compatibility with broken protocol 2 pickles
     created in old Python 3 versions (3.4.3 and lower).

   - bpo-25850(85): Use cross-compilation by default for 64-bit Windows.

   - bpo-17633(86): Improve zipimport’s support for namespace packages.

   - bpo-24705(87): Fix sysconfig._parse_makefile not expanding ${} vars
     appearing before $() vars.

   - bpo-22138(88): Fix mock.patch behavior when patching descriptors.
     Restore original values after patching.  Patch contributed by Sean
     McCully.

   - bpo-25672(89): In the ssl module, enable the
     SSL_MODE_RELEASE_BUFFERS mode option if it is safe to do so.

   - bpo-26012(90): Don’t traverse into symlinks for ‘**’ pattern in
     pathlib.Path.[r]glob().

   - bpo-24120(91): Ignore PermissionError when traversing a tree with
     pathlib.Path.[r]glob().  Patch by Ulrich Petri.

   - bpo-25447(92): fileinput now uses sys.stdin as-is if it does not
     have a buffer attribute (restores backward compatibility).

   - bpo-25447(93): Copying the lru_cache() wrapper object now always
     works, independently from the type of the wrapped object (by
     returning the original object unchanged).

   - bpo-24103(94): Fixed possible use after free in
     ElementTree.XMLPullParser.

   - bpo-25860(95): os.fwalk() no longer skips remaining directories
     when error occurs.  Original patch by Samson Lee.

   - bpo-25914(96): Fixed and simplified OrderedDict.__sizeof__.

   - bpo-25902(97): Fixed various refcount issues in ElementTree
     iteration.

   - bpo-25717(98): Restore the previous behaviour of tolerating most
     fstat() errors when opening files.  This was a regression in 3.5a1,
     and stopped anonymous temporary files from working in special
     cases.

   - bpo-24903(99): Fix regression in number of arguments compileall
     accepts when ‘-d’ is specified.  The check on the number of
     arguments has been dropped completely as it never worked correctly
     anyway.

   - bpo-25764(100): In the subprocess module, preserve any exception
     caused by fork() failure when preexec_fn is used.

   - bpo-6478(101): _strptime’s regexp cache now is reset after changing
     timezone with time.tzset().

   - bpo-14285(102): When executing a package with the “python -m
     package” option, and package initialization fails, a proper
     traceback is now reported.  The “runpy” module now lets exceptions
     from package initialization pass back to the caller, rather than
     raising ImportError.

   - bpo-19771(103): Also in runpy and the “-m” option, omit the
     irrelevant message “… is a package and cannot be directly executed”
     if the package could not even be initialized (e.g.  due to a bad
     ‘*.pyc’ file).

   - bpo-25177(104): Fixed problem with the mean of very small and very
     large numbers.  As a side effect, statistics.mean and
     statistics.variance should be significantly faster.

   - bpo-25718(105): Fixed copying object with state with boolean value
     is false.

   - bpo-10131(106): Fixed deep copying of minidom documents.  Based on
     patch by Marian Ganisin.

   - bpo-25725(107): Fixed a reference leak in pickle.loads() when
     unpickling invalid data including tuple instructions.

   - bpo-25663(108): In the Readline completer, avoid listing duplicate
     global names, and search the global namespace before searching
     builtins.

   - bpo-25688(109): Fixed file leak in ElementTree.iterparse() raising
     an error.

   - bpo-23914(110): Fixed SystemError raised by unpickler on broken
     pickle data.

   - bpo-25691(111): Fixed crash on deleting ElementTree.Element
     attributes.

   - bpo-25624(112): ZipFile now always writes a ZIP_STORED header for
     directory entries.  Patch by Dingyuan Wang.

   - Skip getaddrinfo if host is already resolved.  Patch by A. Jesse
     Jiryu Davis.

   - bpo-26050(113): Add asyncio.StreamReader.readuntil() method.  Patch
     by Марк Коренберг.

   - bpo-25924(114): Avoid unnecessary serialization of getaddrinfo(3)
     calls on OS X versions 10.5 or higher.  Original patch by A. Jesse
     Jiryu Davis.

   - bpo-26406(115): Avoid unnecessary serialization of getaddrinfo(3)
     calls on current versions of OpenBSD and NetBSD. Patch by A. Jesse
     Jiryu Davis.

   - bpo-26848(116): Fix asyncio/subprocess.communicate() to handle
     empty input.  Patch by Jack O’Connor.

   - bpo-27040(117): Add loop.get_exception_handler method

   - bpo-27041(118): asyncio: Add loop.create_future method

   - bpo-27223(119): asyncio: Fix _read_ready and _write_ready to
     respect _conn_lost.  Patch by Łukasz Langa.

   - bpo-22970(120): asyncio: Fix inconsistency cancelling
     Condition.wait.  Patch by David Coles.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21386

   (2) https://bugs.python.org/issue?@action=redirect&bpo=20900

   (3) https://peps.python.org/pep-0492/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=25738

   (5) https://bugs.python.org/issue?@action=redirect&bpo=21313

   (6) https://bugs.python.org/issue?@action=redirect&bpo=27164

   (7) https://bugs.python.org/issue?@action=redirect&bpo=24291

   (8) https://bugs.python.org/issue?@action=redirect&bpo=26809

   (9) https://bugs.python.org/issue?@action=redirect&bpo=26373

   (10) https://bugs.python.org/issue?@action=redirect&bpo=21776

   (11) https://bugs.python.org/issue?@action=redirect&bpo=27114

   (12) https://bugs.python.org/issue?@action=redirect&bpo=18383

   (13) https://bugs.python.org/issue?@action=redirect&bpo=27057

   (14) https://bugs.python.org/issue?@action=redirect&bpo=27014

   (15) https://bugs.python.org/issue?@action=redirect&bpo=14132

   (16) https://bugs.python.org/issue?@action=redirect&bpo=17214

   (17) https://bugs.python.org/issue?@action=redirect&bpo=26892

   (18) https://bugs.python.org/issue?@action=redirect&bpo=22274

   (19) https://bugs.python.org/issue?@action=redirect&bpo=26807

   (20) https://bugs.python.org/issue?@action=redirect&bpo=25745

   (21) https://bugs.python.org/issue?@action=redirect&bpo=26977

   (22) https://bugs.python.org/issue?@action=redirect&bpo=26881

   (23) https://bugs.python.org/issue?@action=redirect&bpo=23815

   (24) https://bugs.python.org/issue?@action=redirect&bpo=17765

   (25) https://bugs.python.org/issue?@action=redirect&bpo=26873

   (26) https://bugs.python.org/issue?@action=redirect&bpo=26711

   (27) https://bugs.python.org/issue?@action=redirect&bpo=24114

   (28) https://bugs.python.org/issue?@action=redirect&bpo=26864

   (29) https://bugs.python.org/issue?@action=redirect&bpo=26634

   (30) https://bugs.python.org/issue?@action=redirect&bpo=26804

   (31) https://bugs.python.org/issue?@action=redirect&bpo=26837

   (32) https://bugs.python.org/issue?@action=redirect&bpo=26041

   (33) https://bugs.python.org/issue?@action=redirect&bpo=26822

   (34) https://bugs.python.org/issue?@action=redirect&bpo=26733

   (35) https://bugs.python.org/issue?@action=redirect&bpo=26801

   (36) https://bugs.python.org/issue?@action=redirect&bpo=24838

   (37) https://bugs.python.org/issue?@action=redirect&bpo=26717

   (38) https://bugs.python.org/issue?@action=redirect&bpo=26735

   (39) https://bugs.python.org/issue?@action=redirect&bpo=16329

   (40) https://bugs.python.org/issue?@action=redirect&bpo=13952

   (41) https://bugs.python.org/issue?@action=redirect&bpo=26709

   (42) https://bugs.python.org/issue?@action=redirect&bpo=23735

   (43) https://bugs.python.org/issue?@action=redirect&bpo=26586

   (44) https://bugs.python.org/issue?@action=redirect&bpo=22854

   (45) https://bugs.python.org/issue?@action=redirect&bpo=25195

   (46) https://bugs.python.org/issue?@action=redirect&bpo=26644

   (47) https://bugs.python.org/issue?@action=redirect&bpo=23804

   (48) https://bugs.python.org/issue?@action=redirect&bpo=26616

   (49) https://bugs.python.org/issue?@action=redirect&bpo=21925

   (50) https://bugs.python.org/issue?@action=redirect&bpo=24266

   (51) https://bugs.python.org/issue?@action=redirect&bpo=26560

   (52) https://bugs.python.org/issue?@action=redirect&bpo=26569

   (53) https://bugs.python.org/issue?@action=redirect&bpo=26499

   (54) https://bugs.python.org/issue?@action=redirect&bpo=25320

   (55) https://bugs.python.org/issue?@action=redirect&bpo=16181

   (56) https://bugs.python.org/issue?@action=redirect&bpo=26513

   (57) https://bugs.python.org/issue?@action=redirect&bpo=23718

   (58) https://bugs.python.org/issue?@action=redirect&bpo=20589

   (59) https://bugs.python.org/issue?@action=redirect&bpo=26177

   (60) https://bugs.python.org/issue?@action=redirect&bpo=15068

   (61) https://bugs.python.org/issue?@action=redirect&bpo=2202

   (62) https://bugs.python.org/issue?@action=redirect&bpo=25718

   (63) https://bugs.python.org/issue?@action=redirect&bpo=26475

   (64) https://bugs.python.org/issue?@action=redirect&bpo=26457

   (65) https://bugs.python.org/issue?@action=redirect&bpo=26385

   (66) https://bugs.python.org/issue?@action=redirect&bpo=26402

   (67) https://bugs.python.org/issue?@action=redirect&bpo=25913

   (68) https://bugs.python.org/issue?@action=redirect&bpo=26186

   (69) https://bugs.python.org/issue?@action=redirect&bpo=26367

   (70) https://bugs.python.org/issue?@action=redirect&bpo=26309

   (71) https://bugs.python.org/issue?@action=redirect&bpo=25995

   (72) https://bugs.python.org/issue?@action=redirect&bpo=26117

   (73) https://bugs.python.org/issue?@action=redirect&bpo=25911

   (74) https://bugs.python.org/issue?@action=redirect&bpo=26045

   (75) https://bugs.python.org/issue?@action=redirect&bpo=12923

   (76) https://bugs.python.org/issue?@action=redirect&bpo=25945

   (77) https://bugs.python.org/issue?@action=redirect&bpo=26202

   (78) https://bugs.python.org/issue?@action=redirect&bpo=23076

   (79) https://bugs.python.org/issue?@action=redirect&bpo=19883

   (80) https://bugs.python.org/issue?@action=redirect&bpo=26227

   (81) https://bugs.python.org/issue?@action=redirect&bpo=26147

   (82) https://bugs.python.org/issue?@action=redirect&bpo=25935

   (83) https://bugs.python.org/issue?@action=redirect&bpo=16620

   (84) https://bugs.python.org/issue?@action=redirect&bpo=26013

   (85) https://bugs.python.org/issue?@action=redirect&bpo=25850

   (86) https://bugs.python.org/issue?@action=redirect&bpo=17633

   (87) https://bugs.python.org/issue?@action=redirect&bpo=24705

   (88) https://bugs.python.org/issue?@action=redirect&bpo=22138

   (89) https://bugs.python.org/issue?@action=redirect&bpo=25672

   (90) https://bugs.python.org/issue?@action=redirect&bpo=26012

   (91) https://bugs.python.org/issue?@action=redirect&bpo=24120

   (92) https://bugs.python.org/issue?@action=redirect&bpo=25447

   (93) https://bugs.python.org/issue?@action=redirect&bpo=25447

   (94) https://bugs.python.org/issue?@action=redirect&bpo=24103

   (95) https://bugs.python.org/issue?@action=redirect&bpo=25860

   (96) https://bugs.python.org/issue?@action=redirect&bpo=25914

   (97) https://bugs.python.org/issue?@action=redirect&bpo=25902

   (98) https://bugs.python.org/issue?@action=redirect&bpo=25717

   (99) https://bugs.python.org/issue?@action=redirect&bpo=24903

   (100) https://bugs.python.org/issue?@action=redirect&bpo=25764

   (101) https://bugs.python.org/issue?@action=redirect&bpo=6478

   (102) https://bugs.python.org/issue?@action=redirect&bpo=14285

   (103) https://bugs.python.org/issue?@action=redirect&bpo=19771

   (104) https://bugs.python.org/issue?@action=redirect&bpo=25177

   (105) https://bugs.python.org/issue?@action=redirect&bpo=25718

   (106) https://bugs.python.org/issue?@action=redirect&bpo=10131

   (107) https://bugs.python.org/issue?@action=redirect&bpo=25725

   (108) https://bugs.python.org/issue?@action=redirect&bpo=25663

   (109) https://bugs.python.org/issue?@action=redirect&bpo=25688

   (110) https://bugs.python.org/issue?@action=redirect&bpo=23914

   (111) https://bugs.python.org/issue?@action=redirect&bpo=25691

   (112) https://bugs.python.org/issue?@action=redirect&bpo=25624

   (113) https://bugs.python.org/issue?@action=redirect&bpo=26050

   (114) https://bugs.python.org/issue?@action=redirect&bpo=25924

   (115) https://bugs.python.org/issue?@action=redirect&bpo=26406

   (116) https://bugs.python.org/issue?@action=redirect&bpo=26848

   (117) https://bugs.python.org/issue?@action=redirect&bpo=27040

   (118) https://bugs.python.org/issue?@action=redirect&bpo=27041

   (119) https://bugs.python.org/issue?@action=redirect&bpo=27223

   (120) https://bugs.python.org/issue?@action=redirect&bpo=22970


File: python.info,  Node: IDLE<63>,  Next: Documentação<76>,  Prev: Biblioteca<169>,  Up: Python 3 5 2 release candidate 1

1.23.105.4 IDLE
...............

   - bpo-5124(1): Paste with text selected now replaces the selection on
     X11.  This matches how paste works on Windows, Mac, most modern
     Linux apps, and ttk widgets.  Original patch by Serhiy Storchaka.

   - bpo-24759(2): Make clear in idlelib.idle_test.__init__ that the
     directory is a private implementation of test.test_idle and tool
     for maintainers.

   - bpo-27196(3): Stop ‘ThemeChanged’ warnings when running IDLE tests.
     These persisted after other warnings were suppressed in #20567.
     Apply Serhiy Storchaka’s update_idletasks solution to four test
     files.  Record this additional advice in idle_test/README.txt

   - bpo-20567(4): Revise idle_test/README.txt with advice about
     avoiding tk warning messages from tests.  Apply advice to several
     IDLE tests.

   - bpo-27117(5): Make colorizer htest and turtledemo work with dark
     themes.  Move code for configuring text widget colors to a new
     function.

   - bpo-26673(6): When tk reports font size as 0, change to size 10.
     Such fonts on Linux prevented the configuration dialog from
     opening.

   - bpo-21939(7): Add test for IDLE’s percolator.  Original patch by
     Saimadhav Heblikar.

   - bpo-21676(8): Add test for IDLE’s replace dialog.  Original patch
     by Saimadhav Heblikar.

   - bpo-18410(9): Add test for IDLE’s search dialog.  Original patch by
     Westley Martínez.

   - bpo-21703(10): Add test for IDLE’s undo delegator.  Original patch
     by Saimadhav Heblikar .

   - bpo-27044(11): Add ConfigDialog.remove_var_callbacks to stop memory
     leaks.

   - bpo-23977(12): Add more asserts to test_delegator.

   - bpo-20640(13): Add tests for idlelib.configHelpSourceEdit.  Patch
     by Saimadhav Heblikar.

   - In the ‘IDLE-console differences’ section of the IDLE doc, clarify
     how running with IDLE affects sys.modules and the standard streams.

   - bpo-25507(14): fix incorrect change in IOBinding that prevented
     printing.  Augment IOBinding htest to include all major IOBinding
     functions.

   - bpo-25905(15): Revert unwanted conversion of ‘ to ’ RIGHT SINGLE
     QUOTATION MARK in README.txt and open this and NEWS.txt with
     ‘ascii’.  Re-encode CREDITS.txt to utf-8 and open it with ‘utf-8’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5124

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24759

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27196

   (4) https://bugs.python.org/issue?@action=redirect&bpo=20567

   (5) https://bugs.python.org/issue?@action=redirect&bpo=27117

   (6) https://bugs.python.org/issue?@action=redirect&bpo=26673

   (7) https://bugs.python.org/issue?@action=redirect&bpo=21939

   (8) https://bugs.python.org/issue?@action=redirect&bpo=21676

   (9) https://bugs.python.org/issue?@action=redirect&bpo=18410

   (10) https://bugs.python.org/issue?@action=redirect&bpo=21703

   (11) https://bugs.python.org/issue?@action=redirect&bpo=27044

   (12) https://bugs.python.org/issue?@action=redirect&bpo=23977

   (13) https://bugs.python.org/issue?@action=redirect&bpo=20640

   (14) https://bugs.python.org/issue?@action=redirect&bpo=25507

   (15) https://bugs.python.org/issue?@action=redirect&bpo=25905


File: python.info,  Node: Documentação<76>,  Next: Testes<82>,  Prev: IDLE<63>,  Up: Python 3 5 2 release candidate 1

1.23.105.5 Documentação
.......................

   - bpo-19489(1): Moved the search box from the sidebar to the header
     and footer of each page.  Patch by Ammar Askar.

   - bpo-24136(2): Document the new PEP 448(3) unpacking syntax of 3.5.

   - bpo-26736(4): Used HTTPS for external links in the documentation if
     possible.

   - bpo-6953(5): Rework the Readline module documentation to group
     related functions together, and add more details such as what
     underlying Readline functions and variables are accessed.

   - bpo-23606(6): Adds note to ctypes documentation regarding
     cdll.msvcrt.

   - bpo-25500(7): Fix documentation to not claim that __import__ is
     searched for in the global scope.

   - bpo-26014(8): Update 3.x packaging documentation: * “See also”
     links to the new docs are now provided in the legacy pages * links
     to setuptools documentation have been updated

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19489

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24136

   (3) https://peps.python.org/pep-0448/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26736

   (5) https://bugs.python.org/issue?@action=redirect&bpo=6953

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23606

   (7) https://bugs.python.org/issue?@action=redirect&bpo=25500

   (8) https://bugs.python.org/issue?@action=redirect&bpo=26014


File: python.info,  Node: Testes<82>,  Next: Construção<89>,  Prev: Documentação<76>,  Up: Python 3 5 2 release candidate 1

1.23.105.6 Testes
.................

   - bpo-21916(1): Added tests for the turtle module.  Patch by ingrid,
     Gregory Loyse and Jelle Zijlstra.

   - bpo-26523(2): The multiprocessing thread pool
     (multiprocessing.dummy.Pool) was untested.

   - bpo-26015(3): Added new tests for pickling iterators of mutable
     sequences.

   - bpo-26325(4): Added test.support.check_no_resource_warning() to
     check that no ResourceWarning is emitted.

   - bpo-25940(5): Changed test_ssl to use self-signed.pythontest.net.
     This avoids relying on svn.python.org, which recently changed root
     certificate.

   - bpo-25616(6): Tests for OrderedDict are extracted from
     test_collections into separate file test_ordered_dict.

   - bpo-26583(7): Skip test_timestamp_overflow in test_import if
     bytecode files cannot be written.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21916

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26523

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26015

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26325

   (5) https://bugs.python.org/issue?@action=redirect&bpo=25940

   (6) https://bugs.python.org/issue?@action=redirect&bpo=25616

   (7) https://bugs.python.org/issue?@action=redirect&bpo=26583


File: python.info,  Node: Construção<89>,  Next: Windows<76>,  Prev: Testes<82>,  Up: Python 3 5 2 release candidate 1

1.23.105.7 Construção
.....................

   - bpo-26884(1): Fix linking extension modules for cross builds.
     Patch by Xavier de Gaye.

   - bpo-22359(2): Disable the rules for running _freeze_importlib and
     pgen when cross-compiling.  The output of these programs is
     normally saved with the source code anyway, and is still
     regenerated when doing a native build.  Patch by Xavier de Gaye.

   - bpo-27229(3): Fix the cross-compiling pgen rule for in-tree builds.
     Patch by Xavier de Gaye.

   - bpo-21668(4): Link audioop, _datetime, _ctypes_test modules to
     libm, except on Mac OS X. Patch written by Xavier de Gaye.

   - bpo-25702(5): A –with-lto configure option has been added that will
     enable link time optimizations at build time during a make
     profile-opt.  Some compilers and toolchains are known to not
     produce stable code when using LTO, be sure to test things
     thoroughly before relying on it.  It can provide a few % speed up
     over profile-opt alone.

   - bpo-26624(6): Adds validation of ucrtbase[d].dll version with
     warning for old versions.

   - bpo-17603(7): Avoid error about nonexistent fileblocks.o file by
     using a lower-level check for st_blocks in struct stat.

   - bpo-26079(8): Fixing the build output folder for tix-8.4.3.6.
     Patch by Bjoern Thiel.

   - bpo-26465(9): Update Windows builds to use OpenSSL 1.0.2g.

   - bpo-24421(10): Compile Modules/_math.c once, before building
     extensions.  Previously it could fail to compile properly if the
     math and cmath builds were concurrent.

   - bpo-25348(11): Added ‘--pgo’ and ‘--pgo-job’ arguments to
     ‘PCbuild\build.bat’ for building with Profile-Guided Optimization.
     The old ‘PCbuild\build_pgo.bat’ script is now deprecated, and
     simply calls ‘PCbuild\build.bat --pgo %*’.

   - bpo-25827(12): Add support for building with ICC to ‘configure’,
     including a new ‘--with-icc’ flag.

   - bpo-25696(13): Fix installation of Python on UNIX with make -j9.

   - bpo-26930(14): Update OS X 10.5+ 32-bit-only installer to build and
     link with OpenSSL 1.0.2h.

   - bpo-26268(15): Update Windows builds to use OpenSSL 1.0.2f.

   - bpo-25136(16): Support Apple Xcode 7’s new textual SDK stub
     libraries.

   - bpo-24324(17): Do not enable unreachable code warnings when using
     gcc as the option does not work correctly in older versions of gcc
     and has been silently removed as of gcc-4.5.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26884

   (2) https://bugs.python.org/issue?@action=redirect&bpo=22359

   (3) https://bugs.python.org/issue?@action=redirect&bpo=27229

   (4) https://bugs.python.org/issue?@action=redirect&bpo=21668

   (5) https://bugs.python.org/issue?@action=redirect&bpo=25702

   (6) https://bugs.python.org/issue?@action=redirect&bpo=26624

   (7) https://bugs.python.org/issue?@action=redirect&bpo=17603

   (8) https://bugs.python.org/issue?@action=redirect&bpo=26079

   (9) https://bugs.python.org/issue?@action=redirect&bpo=26465

   (10) https://bugs.python.org/issue?@action=redirect&bpo=24421

   (11) https://bugs.python.org/issue?@action=redirect&bpo=25348

   (12) https://bugs.python.org/issue?@action=redirect&bpo=25827

   (13) https://bugs.python.org/issue?@action=redirect&bpo=25696

   (14) https://bugs.python.org/issue?@action=redirect&bpo=26930

   (15) https://bugs.python.org/issue?@action=redirect&bpo=26268

   (16) https://bugs.python.org/issue?@action=redirect&bpo=25136

   (17) https://bugs.python.org/issue?@action=redirect&bpo=24324


File: python.info,  Node: Windows<76>,  Next: Ferramentas/Demos<49>,  Prev: Construção<89>,  Up: Python 3 5 2 release candidate 1

1.23.105.8 Windows
..................

   - bpo-27053(1): Updates make_zip.py to correctly generate library ZIP
     file.

   - bpo-26268(2): Update the prepare_ssl.py script to handle OpenSSL
     releases that don’t include the contents of the include directory
     (that is, 1.0.2e and later).

   - bpo-26071(3): bdist_wininst created binaries fail to start and find
     32bit Python

   - bpo-26073(4): Update the list of magic numbers in launcher

   - bpo-26065(5): Excludes venv from library when generating embeddable
     distro.

   - bpo-17500(6): Remove unused and outdated icons.  (See also:
     ‘https://github.com/python/pythondotorg/issues/945’)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=27053

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26268

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26071

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26073

   (5) https://bugs.python.org/issue?@action=redirect&bpo=26065

   (6) https://bugs.python.org/issue?@action=redirect&bpo=17500


File: python.info,  Node: Ferramentas/Demos<49>,  Prev: Windows<76>,  Up: Python 3 5 2 release candidate 1

1.23.105.9 Ferramentas/Demos
............................

   - bpo-26799(1): Fix python-gdb.py: don’t get C types once when the
     Python code is loaded, but get C types on demand.  The C types can
     change if python-gdb.py is loaded before the Python executable.
     Patch written by Thomas Ilsche.

   - bpo-26271(2): Fix the Freeze tool to properly use flags passed
     through configure.  Patch by Daniel Shaulov.

   - bpo-26489(3): Add dictionary unpacking support to
     Tools/parser/unparse.py.  Patch by Guo Ci Teo.

   - bpo-26316(4): Fix variable name typo in Argument Clinic.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=26799

   (2) https://bugs.python.org/issue?@action=redirect&bpo=26271

   (3) https://bugs.python.org/issue?@action=redirect&bpo=26489

   (4) https://bugs.python.org/issue?@action=redirect&bpo=26316


File: python.info,  Node: Python 3 5 1 final,  Next: Python 3 5 1 release candidate 1,  Prev: Python 3 5 2 release candidate 1,  Up: Changelog

1.23.106 Python 3.5.1 final
---------------------------

'Data de lançamento: 2015-12-06'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<168>.
* Windows: Windows<77>.


File: python.info,  Node: Núcleo e embutidos<168>,  Next: Windows<77>,  Up: Python 3 5 1 final

1.23.106.1 Núcleo e embutidos
.............................

   - bpo-25709(1): Fixed problem with in-place string concatenation and
     utf-8 cache.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25709


File: python.info,  Node: Windows<77>,  Prev: Núcleo e embutidos<168>,  Up: Python 3 5 1 final

1.23.106.2 Windows
..................

   - bpo-25715(1): Python 3.5.1 installer shows wrong upgrade path and
     incorrect logic for launcher detection.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25715


File: python.info,  Node: Python 3 5 1 release candidate 1,  Next: Python 3 5 0 final,  Prev: Python 3 5 1 final,  Up: Changelog

1.23.107 Python 3.5.1 release candidate 1
-----------------------------------------

'Data de lançamento: 2015-11-22'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<169>.
* Biblioteca: Biblioteca<170>.
* IDLE: IDLE<64>.
* Documentação: Documentação<77>.
* Testes: Testes<83>.
* Construção: Construção<90>.
* Windows: Windows<78>.
* Ferramentas/Demos: Ferramentas/Demos<50>.


File: python.info,  Node: Núcleo e embutidos<169>,  Next: Biblioteca<170>,  Up: Python 3 5 1 release candidate 1

1.23.107.1 Núcleo e embutidos
.............................

   - bpo-25630(1): Fix a possible segfault during argument parsing in
     functions that accept filesystem paths.

   - bpo-23564(2): Fixed a partially broken sanity check in the
     _posixsubprocess internals regarding how fds_to_pass were passed to
     the child.  The bug had no actual impact as subprocess.py already
     avoided it.

   - bpo-25388(3): Fixed tokenizer crash when processing undecodable
     source code with a null byte.

   - bpo-25462(4): The hash of the key now is calculated only once in
     most operations in C implementation of OrderedDict.

   - bpo-22995(5): Default implementation of __reduce__ and
     __reduce_ex__ now rejects builtin types with not defined __new__.

   - bpo-25555(6): Fix parser and AST: fill lineno and col_offset of
     “arg” node when compiling AST from Python objects.

   - bpo-24802(7): Avoid buffer overreads when int(), float(),
     compile(), exec() and eval() are passed bytes-like objects.  These
     objects are not necessarily terminated by a null byte, but the
     functions assumed they were.

   - bpo-24726(8): Fixed a crash and leaking NULL in repr() of
     OrderedDict that was mutated by direct calls of dict methods.

   - bpo-25449(9): Iterating OrderedDict with keys with unstable hash
     now raises KeyError in C implementations as well as in Python
     implementation.

   - bpo-25395(10): Fixed crash when highly nested OrderedDict
     structures were garbage collected.

   - bpo-25274(11): sys.setrecursionlimit() now raises a RecursionError
     if the new recursion limit is too low depending at the current
     recursion depth.  Modify also the “lower-water mark” formula to
     make it monotonic.  This mark is used to decide when the overflowed
     flag of the thread state is reset.

   - bpo-24402(12): Fix input() to prompt to the redirected stdout when
     sys.stdout.fileno() fails.

   - bpo-24806(13): Prevent builtin types that are not allowed to be
     subclassed from being subclassed through multiple inheritance.

   - bpo-24848(14): Fixed a number of bugs in UTF-7 decoding of
     misformed data.

   - bpo-25280(15): Import trace messages emitted in verbose (-v) mode
     are no longer formatted twice.

   - bpo-25003(16): On Solaris 11.3 or newer, os.urandom() now uses the
     getrandom() function instead of the getentropy() function.  The
     getentropy() function is blocking to generate very good quality
     entropy, os.urandom() doesn’t need such high-quality entropy.

   - bpo-25182(17): The stdprinter (used as sys.stderr before the io
     module is imported at startup) now uses the backslashreplace error
     handler.

   - bpo-25131(18): Make the line number and column offset of set/dict
     literals and comprehensions correspond to the opening brace.

   - bpo-25150(19): Hide the private ‘_Py_atomic_XXX’ symbols from the
     public Python.h header to fix a compilation error with OpenMP.
     PyThreadState_GET() becomes an alias to PyThreadState_Get() to
     avoid ABI incompatibilities.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25630

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23564

   (3) https://bugs.python.org/issue?@action=redirect&bpo=25388

   (4) https://bugs.python.org/issue?@action=redirect&bpo=25462

   (5) https://bugs.python.org/issue?@action=redirect&bpo=22995

   (6) https://bugs.python.org/issue?@action=redirect&bpo=25555

   (7) https://bugs.python.org/issue?@action=redirect&bpo=24802

   (8) https://bugs.python.org/issue?@action=redirect&bpo=24726

   (9) https://bugs.python.org/issue?@action=redirect&bpo=25449

   (10) https://bugs.python.org/issue?@action=redirect&bpo=25395

   (11) https://bugs.python.org/issue?@action=redirect&bpo=25274

   (12) https://bugs.python.org/issue?@action=redirect&bpo=24402

   (13) https://bugs.python.org/issue?@action=redirect&bpo=24806

   (14) https://bugs.python.org/issue?@action=redirect&bpo=24848

   (15) https://bugs.python.org/issue?@action=redirect&bpo=25280

   (16) https://bugs.python.org/issue?@action=redirect&bpo=25003

   (17) https://bugs.python.org/issue?@action=redirect&bpo=25182

   (18) https://bugs.python.org/issue?@action=redirect&bpo=25131

   (19) https://bugs.python.org/issue?@action=redirect&bpo=25150


File: python.info,  Node: Biblioteca<170>,  Next: IDLE<64>,  Prev: Núcleo e embutidos<169>,  Up: Python 3 5 1 release candidate 1

1.23.107.2 Biblioteca
.....................

   - bpo-25626(1): Change three zlib functions to accept sizes that fit
     in Py_ssize_t, but internally cap those sizes to UINT_MAX. This
     resolves a regression in 3.5 where GzipFile.read() failed to read
     chunks larger than 2 or 4 GiB. The change affects the
     zlib.Decompress.decompress() max_length parameter, the
     zlib.decompress() bufsize parameter, and the
     zlib.Decompress.flush() length parameter.

   - bpo-25583(2): Avoid incorrect errors raised by
     os.makedirs(exist_ok=True) when the OS gives priority to errors
     such as EACCES over EEXIST.

   - bpo-25593(3): Change semantics of EventLoop.stop() in asyncio.

   - bpo-6973(4): When we know a subprocess.Popen process has died, do
     not allow the send_signal(), terminate(), or kill() methods to do
     anything as they could potentially signal a different process.

   - bpo-25590(5): In the Readline completer, only call getattr() once
     per attribute.

   - bpo-25498(6): Fix a crash when garbage-collecting ctypes objects
     created by wrapping a memoryview.  This was a regression made in
     3.5a1.  Based on patch by Eryksun.

   - bpo-25584(7): Added “escape” to the __all__ list in the glob
     module.

   - bpo-25584(8): Fixed recursive glob() with patterns starting with
     ‘**’.

   - bpo-25446(9): Fix regression in smtplib’s AUTH LOGIN support.

   - bpo-18010(10): Fix the pydoc web server’s module search function to
     handle exceptions from importing packages.

   - bpo-25554(11): Got rid of circular references in regular expression
     parsing.

   - bpo-25510(12): fileinput.FileInput.readline() now returns b’’
     instead of ‘’ at the end if the FileInput was opened with binary
     mode.  Patch by Ryosuke Ito.

   - bpo-25503(13): Fixed inspect.getdoc() for inherited docstrings of
     properties.  Original patch by John Mark Vandenberg.

   - bpo-25515(14): Always use os.urandom as a source of randomness in
     uuid.uuid4.

   - bpo-21827(15): Corrigido textwrap.dedent() para o caso em que o
     maior espaço em branco comum seja uma substring do menor espaço em
     branco inicial.  Com base no 'patch' de Robert Li.

   - bpo-25447(16): The lru_cache() wrapper objects now can be copied
     and pickled (by returning the original object unchanged).

   - bpo-25390(17): typing: Don’t crash on Union[str, Pattern].

   - bpo-25441(18): asyncio: Raise error from drain() when socket is
     closed.

   - bpo-25410(19): Cleaned up and fixed minor bugs in C implementation
     of OrderedDict.

   - bpo-25411(20): Improved Unicode support in SMTPHandler through
     better use of the email package.  Thanks to user simon04 for the
     patch.

   - bpo-25407(21): Remove mentions of the formatter module being
     removed in Python 3.6.

   - bpo-25406(22): Fixed a bug in C implementation of
     OrderedDict.move_to_end() that caused segmentation fault or hang in
     iterating after moving several items to the start of ordered dict.

   - bpo-25364(23): zipfile now works in threads disabled builds.

   - bpo-25328(24): smtpd’s SMTPChannel now correctly raises a
     ValueError if both decode_data and enable_SMTPUTF8 are set to true.

   - bpo-25316(25): distutils raises OSError instead of
     DistutilsPlatformError when MSVC is not installed.

   - bpo-25380(26): Fixed protocol for the STACK_GLOBAL opcode in
     pickletools.opcodes.

   - bpo-23972(27): Updates asyncio datagram create method allowing
     reuseport and reuseaddr socket options to be set prior to binding
     the socket.  Mirroring the existing asyncio create_server method
     the reuseaddr option for datagram sockets defaults to True if the
     O/S is ‘posix’ (except if the platform is Cygwin).  Patch by Chris
     Laws.

   - bpo-25304(28): Add asyncio.run_coroutine_threadsafe().  This lets
     you submit a coroutine to a loop from another thread, returning a
     concurrent.futures.Future.  By Vincent Michel.

   - bpo-25232(29): Fix CGIRequestHandler to split the query from the
     URL at the first question mark (?)  rather than the last.  Patch
     from Xiang Zhang.

   - bpo-24657(30): Prevent CGIRequestHandler from collapsing slashes in
     the query part of the URL as if it were a path.  Patch from Xiang
     Zhang.

   - bpo-24483(31): C implementation of functools.lru_cache() now
     calculates key’s hash only once.

   - bpo-22958(32): Constructor and update method of
     weakref.WeakValueDictionary now accept the self and the dict
     keyword arguments.

   - bpo-22609(33): Constructor of collections.UserDict now accepts the
     self keyword argument.

   - bpo-25111(34): Fixed comparison of traceback.FrameSummary.

   - bpo-25262(35): Added support for BINBYTES8 opcode in Python
     implementation of unpickler.  Highest 32 bits of 64-bit size for
     BINUNICODE8 and BINBYTES8 opcodes no longer silently ignored on
     32-bit platforms in C implementation.

   - bpo-25034(36): Fix string.Formatter problem with auto-numbering and
     nested format_specs.  Patch by Anthon van der Neut.

   - bpo-25233(37): Rewrite the guts of asyncio.Queue and
     asyncio.Semaphore to be more understandable and correct.

   - bpo-25203(38): Failed readline.set_completer_delims() no longer
     left the module in inconsistent state.

   - bpo-23600(39): Default implementation of tzinfo.fromutc() was
     returning wrong results in some cases.

   - bpo-23329(40): Allow the ssl module to be built with older versions
     of LibreSSL.

   - Prevent overflow in _Unpickler_Read.

   - bpo-25047(41): The XML encoding declaration written by Element Tree
     now respects the letter case given by the user.  This restores the
     ability to write encoding names in uppercase like “UTF-8”, which
     worked in Python 2.

   - bpo-25135(42): Make deque_clear() safer by emptying the deque
     before clearing.  This helps avoid possible reentrancy issues.

   - bpo-19143(43): platform module now reads Windows version from
     kernel32.dll to avoid compatibility shims.

   - bpo-25092(44): Fix datetime.strftime() failure when errno was
     already set to EINVAL.

   - bpo-23517(45): Fix rounding in fromtimestamp() and
     utcfromtimestamp() methods of datetime.datetime: microseconds are
     now rounded to nearest with ties going to nearest even integer
     (ROUND_HALF_EVEN), instead of being rounding towards minus infinity
     (ROUND_FLOOR). It’s important that these methods use the same
     rounding mode than datetime.timedelta to keep the property:
     (datetime(1970,1,1) + timedelta(seconds=t)) ==
     datetime.utcfromtimestamp(t).  It also the rounding mode used by
     round(float) for example.

   - bpo-25155(46): Fix datetime.datetime.now() and
     datetime.datetime.utcnow() on Windows to support date after year
     2038.  It was a regression introduced in Python 3.5.0.

   - bpo-25108(47): Omitted internal frames in traceback functions
     print_stack(), format_stack(), and extract_stack() called without
     arguments.

   - bpo-25118(48): Fix a regression of Python 3.5.0 in os.waitpid() on
     Windows.

   - bpo-24684(49): socket.socket.getaddrinfo() now calls
     PyUnicode_AsEncodedString() instead of calling the encode() method
     of the host, to handle correctly custom string with an encode()
     method which doesn’t return a byte string.  The encoder of the IDNA
     codec is now called directly instead of calling the encode() method
     of the string.

   - bpo-25060(50): Correctly compute stack usage of the BUILD_MAP
     opcode.

   - bpo-24857(51): Comparing call_args to a long sequence now correctly
     returns a boolean result instead of raising an exception.  Patch by
     A Kaptur.

   - bpo-23144(52): Make sure that HTMLParser.feed() returns all the
     data, even when convert_charrefs is True.

   - bpo-24982(53): shutil.make_archive() with the “zip” format now adds
     entries for directories (including empty directories) in ZIP file.

   - bpo-25019(54): Fixed a crash caused by setting non-string key of
     expat parser.  Based on patch by John Leitch.

   - bpo-16180(55): Exit pdb if file has syntax error, instead of
     trapping user in an infinite loop.  Patch by Xavier de Gaye.

   - bpo-24891(56): Fix a race condition at Python startup if the file
     descriptor of stdin (0), stdout (1) or stderr (2) is closed while
     Python is creating sys.stdin, sys.stdout and sys.stderr objects.
     These attributes are now set to None if the creation of the object
     failed, instead of raising an OSError exception.  Initial patch
     written by Marco Paolini.

   - bpo-24992(57): Fix error handling and a race condition (related to
     garbage collection) in collections.OrderedDict constructor.

   - bpo-24881(58): Fixed setting binary mode in Python implementation
     of FileIO on Windows and Cygwin.  Patch from Akira Li.

   - bpo-25578(59): Fix (another) memory leak in SSLSocket.getpeercer().

   - bpo-25530(60): Disable the vulnerable SSLv3 protocol by default
     when creating ssl.SSLContext.

   - bpo-25569(61): Fix memory leak in SSLSocket.getpeercert().

   - bpo-25471(62): Sockets returned from accept() shouldn’t appear to
     be nonblocking.

   - bpo-25319(63): When threading.Event is reinitialized, the
     underlying condition should use a regular lock rather than a
     recursive lock.

   - bpo-21112(64): Fix regression in unittest.expectedFailure on
     subclasses.  Patch from Berker Peksag.

   - bpo-24764(65): cgi.FieldStorage.read_multi() now ignores the
     Content-Length header in part headers.  Patch written by Peter
     Landry and reviewed by Pierre Quentel.

   - bpo-24913(66): Fix overrun error in deque.index().  Found by John
     Leitch and Bryce Darling.

   - bpo-24774(67): Fix docstring in http.server.test.  Patch from
     Chiu-Hsiang Hsu.

   - bpo-21159(68): Improve message in
     configparser.InterpolationMissingOptionError.  Patch from Łukasz
     Langa.

   - bpo-20362(69): Honour TestCase.longMessage correctly in
     assertRegex.  Patch from Ilia Kurenkov.

   - bpo-23572(70): Fixed functools.singledispatch on classes with false
     metaclasses.  Patch by Ethan Furman.

   - asyncio: ensure_future() now accepts awaitable objects.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25626

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25583

   (3) https://bugs.python.org/issue?@action=redirect&bpo=25593

   (4) https://bugs.python.org/issue?@action=redirect&bpo=6973

   (5) https://bugs.python.org/issue?@action=redirect&bpo=25590

   (6) https://bugs.python.org/issue?@action=redirect&bpo=25498

   (7) https://bugs.python.org/issue?@action=redirect&bpo=25584

   (8) https://bugs.python.org/issue?@action=redirect&bpo=25584

   (9) https://bugs.python.org/issue?@action=redirect&bpo=25446

   (10) https://bugs.python.org/issue?@action=redirect&bpo=18010

   (11) https://bugs.python.org/issue?@action=redirect&bpo=25554

   (12) https://bugs.python.org/issue?@action=redirect&bpo=25510

   (13) https://bugs.python.org/issue?@action=redirect&bpo=25503

   (14) https://bugs.python.org/issue?@action=redirect&bpo=25515

   (15) https://bugs.python.org/issue?@action=redirect&bpo=21827

   (16) https://bugs.python.org/issue?@action=redirect&bpo=25447

   (17) https://bugs.python.org/issue?@action=redirect&bpo=25390

   (18) https://bugs.python.org/issue?@action=redirect&bpo=25441

   (19) https://bugs.python.org/issue?@action=redirect&bpo=25410

   (20) https://bugs.python.org/issue?@action=redirect&bpo=25411

   (21) https://bugs.python.org/issue?@action=redirect&bpo=25407

   (22) https://bugs.python.org/issue?@action=redirect&bpo=25406

   (23) https://bugs.python.org/issue?@action=redirect&bpo=25364

   (24) https://bugs.python.org/issue?@action=redirect&bpo=25328

   (25) https://bugs.python.org/issue?@action=redirect&bpo=25316

   (26) https://bugs.python.org/issue?@action=redirect&bpo=25380

   (27) https://bugs.python.org/issue?@action=redirect&bpo=23972

   (28) https://bugs.python.org/issue?@action=redirect&bpo=25304

   (29) https://bugs.python.org/issue?@action=redirect&bpo=25232

   (30) https://bugs.python.org/issue?@action=redirect&bpo=24657

   (31) https://bugs.python.org/issue?@action=redirect&bpo=24483

   (32) https://bugs.python.org/issue?@action=redirect&bpo=22958

   (33) https://bugs.python.org/issue?@action=redirect&bpo=22609

   (34) https://bugs.python.org/issue?@action=redirect&bpo=25111

   (35) https://bugs.python.org/issue?@action=redirect&bpo=25262

   (36) https://bugs.python.org/issue?@action=redirect&bpo=25034

   (37) https://bugs.python.org/issue?@action=redirect&bpo=25233

   (38) https://bugs.python.org/issue?@action=redirect&bpo=25203

   (39) https://bugs.python.org/issue?@action=redirect&bpo=23600

   (40) https://bugs.python.org/issue?@action=redirect&bpo=23329

   (41) https://bugs.python.org/issue?@action=redirect&bpo=25047

   (42) https://bugs.python.org/issue?@action=redirect&bpo=25135

   (43) https://bugs.python.org/issue?@action=redirect&bpo=19143

   (44) https://bugs.python.org/issue?@action=redirect&bpo=25092

   (45) https://bugs.python.org/issue?@action=redirect&bpo=23517

   (46) https://bugs.python.org/issue?@action=redirect&bpo=25155

   (47) https://bugs.python.org/issue?@action=redirect&bpo=25108

   (48) https://bugs.python.org/issue?@action=redirect&bpo=25118

   (49) https://bugs.python.org/issue?@action=redirect&bpo=24684

   (50) https://bugs.python.org/issue?@action=redirect&bpo=25060

   (51) https://bugs.python.org/issue?@action=redirect&bpo=24857

   (52) https://bugs.python.org/issue?@action=redirect&bpo=23144

   (53) https://bugs.python.org/issue?@action=redirect&bpo=24982

   (54) https://bugs.python.org/issue?@action=redirect&bpo=25019

   (55) https://bugs.python.org/issue?@action=redirect&bpo=16180

   (56) https://bugs.python.org/issue?@action=redirect&bpo=24891

   (57) https://bugs.python.org/issue?@action=redirect&bpo=24992

   (58) https://bugs.python.org/issue?@action=redirect&bpo=24881

   (59) https://bugs.python.org/issue?@action=redirect&bpo=25578

   (60) https://bugs.python.org/issue?@action=redirect&bpo=25530

   (61) https://bugs.python.org/issue?@action=redirect&bpo=25569

   (62) https://bugs.python.org/issue?@action=redirect&bpo=25471

   (63) https://bugs.python.org/issue?@action=redirect&bpo=25319

   (64) https://bugs.python.org/issue?@action=redirect&bpo=21112

   (65) https://bugs.python.org/issue?@action=redirect&bpo=24764

   (66) https://bugs.python.org/issue?@action=redirect&bpo=24913

   (67) https://bugs.python.org/issue?@action=redirect&bpo=24774

   (68) https://bugs.python.org/issue?@action=redirect&bpo=21159

   (69) https://bugs.python.org/issue?@action=redirect&bpo=20362

   (70) https://bugs.python.org/issue?@action=redirect&bpo=23572


File: python.info,  Node: IDLE<64>,  Next: Documentação<77>,  Prev: Biblioteca<170>,  Up: Python 3 5 1 release candidate 1

1.23.107.3 IDLE
...............

   - bpo-15348(1): Stop the debugger engine (normally in a user process)
     before closing the debugger window (running in the IDLE process).
     This prevents the RuntimeErrors that were being caught and ignored.

   - bpo-24455(2): Prevent IDLE from hanging when a) closing the shell
     while the debugger is active (15347); b) closing the debugger with
     the [X] button (15348); and c) activating the debugger when already
     active (24455).  The patch by Mark Roseman does this by making two
     changes.  1.  Suspend and resume the gui.interaction method with
     the tcl vwait mechanism intended for this purpose (instead of
     root.mainloop & .quit).  2.  In gui.run, allow any existing
     interaction to terminate first.

   - Change ‘The program’ to ‘Your program’ in an IDLE ‘kill program?’
     message to make it clearer that the program referred to is the
     currently running user program, not IDLE itself.

   - bpo-24750(3): Improve the appearance of the IDLE editor window
     status bar.  Patch by Mark Roseman.

   - bpo-25313(4): Change the handling of new built-in text color themes
     to better address the compatibility problem introduced by the
     addition of IDLE Dark.  Consistently use the revised
     idleConf.CurrentTheme everywhere in idlelib.

   - bpo-24782(5): Extension configuration is now a tab in the IDLE
     Preferences dialog rather than a separate dialog.  The former tabs
     are now a sorted list.  Patch by Mark Roseman.

   - bpo-22726(6): Re-activate the config dialog help button with some
     content about the other buttons and the new IDLE Dark theme.

   - bpo-24820(7): IDLE now has an ‘IDLE Dark’ built-in text color
     theme.  It is more or less IDLE Classic inverted, with a cobalt
     blue background.  Strings, comments, keywords, … are still green,
     red, orange, … .  To use it with IDLEs released before November
     2015, hit the ‘Save as New Custom Theme’ button and enter a new
     name, such as ‘Custom Dark’.  The custom theme will work with any
     IDLE release, and can be modified.

   - bpo-25224(8): README.txt is now an idlelib index for IDLE
     developers and curious users.  The previous user content is now in
     the IDLE doc chapter.  ‘IDLE’ now means ‘Integrated Development and
     Learning Environment’.

   - bpo-24820(9): Users can now set breakpoint colors in Settings ->
     Custom Highlighting.  Original patch by Mark Roseman.

   - bpo-24972(10): Inactive selection background now matches active
     selection background, as configured by users, on all systems.
     Found items are now always highlighted on Windows.  Initial patch
     by Mark Roseman.

   - bpo-24570(11): Idle: make calltip and completion boxes appear on
     Macs affected by a tk regression.  Initial patch by Mark Roseman.

   - bpo-24988(12): Idle ScrolledList context menus (used in debugger)
     now work on Mac Aqua.  Patch by Mark Roseman.

   - bpo-24801(13): Make right-click for context menu work on Mac Aqua.
     Patch by Mark Roseman.

   - bpo-25173(14): Associate tkinter messageboxes with a specific
     widget.  For Mac OSX, make them a ‘sheet’.  Patch by Mark Roseman.

   - bpo-25198(15): Enhance the initial html viewer now used for Idle
     Help.  Properly indent fixed-pitch text (patch by Mark Roseman).
     Give code snippet a very Sphinx-like light blueish-gray background.
     Re-use initial width and height set by users for shell and editor.
     When the Table of Contents (TOC) menu is used, put the section
     header at the top of the screen.

   - bpo-25225(16): Condense and rewrite Idle doc section on text
     colors.

   - bpo-21995(17): Explain some differences between IDLE and console
     Python.

   - bpo-22820(18): Explain need for 'print' when running file from Idle
     editor.

   - bpo-25224(19): Doc: augment Idle feature list and no-subprocess
     section.

   - bpo-25219(20): Update doc for Idle command line options.  Some were
     missing and notes were not correct.

   - bpo-24861(21): Most of idlelib is private and subject to change.
     Use idleib.idle.* to start Idle.  See idlelib.__init__.__doc__.

   - bpo-25199(22): Idle: add synchronization comments for future
     maintainers.

   - bpo-16893(23): Replace help.txt with help.html for Idle doc
     display.  The new idlelib/help.html is rstripped
     Doc/build/html/library/idle.html.  It looks better than help.txt
     and will better document Idle as released.  The tkinter html viewer
     that works for this file was written by Mark Roseman.  The now
     unused EditorWindow.HelpDialog class and helt.txt file are
     deprecated.

   - bpo-24199(24): Deprecate unused idlelib.idlever with possible
     removal in 3.6.

   - bpo-24790(25): Remove extraneous code (which also create 2 & 3
     conflicts).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15348

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24455

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24750

   (4) https://bugs.python.org/issue?@action=redirect&bpo=25313

   (5) https://bugs.python.org/issue?@action=redirect&bpo=24782

   (6) https://bugs.python.org/issue?@action=redirect&bpo=22726

   (7) https://bugs.python.org/issue?@action=redirect&bpo=24820

   (8) https://bugs.python.org/issue?@action=redirect&bpo=25224

   (9) https://bugs.python.org/issue?@action=redirect&bpo=24820

   (10) https://bugs.python.org/issue?@action=redirect&bpo=24972

   (11) https://bugs.python.org/issue?@action=redirect&bpo=24570

   (12) https://bugs.python.org/issue?@action=redirect&bpo=24988

   (13) https://bugs.python.org/issue?@action=redirect&bpo=24801

   (14) https://bugs.python.org/issue?@action=redirect&bpo=25173

   (15) https://bugs.python.org/issue?@action=redirect&bpo=25198

   (16) https://bugs.python.org/issue?@action=redirect&bpo=25225

   (17) https://bugs.python.org/issue?@action=redirect&bpo=21995

   (18) https://bugs.python.org/issue?@action=redirect&bpo=22820

   (19) https://bugs.python.org/issue?@action=redirect&bpo=25224

   (20) https://bugs.python.org/issue?@action=redirect&bpo=25219

   (21) https://bugs.python.org/issue?@action=redirect&bpo=24861

   (22) https://bugs.python.org/issue?@action=redirect&bpo=25199

   (23) https://bugs.python.org/issue?@action=redirect&bpo=16893

   (24) https://bugs.python.org/issue?@action=redirect&bpo=24199

   (25) https://bugs.python.org/issue?@action=redirect&bpo=24790


File: python.info,  Node: Documentação<77>,  Next: Testes<83>,  Prev: IDLE<64>,  Up: Python 3 5 1 release candidate 1

1.23.107.4 Documentação
.......................

   - bpo-22558(1): Add remaining doc links to source code for
     Python-coded modules.  Patch by Yoni Lavi.

   - bpo-12067(2): Rewrite Comparisons section in the Expressions
     chapter of the language reference.  Some of the details of
     comparing mixed types were incorrect or ambiguous.  NotImplemented
     is only relevant at a lower level than the Expressions chapter.
     Added details of comparing range() objects, and default behaviour
     and consistency suggestions for user-defined classes.  Patch from
     Andy Maier.

   - bpo-24952(3): Clarify the default size argument of stack_size() in
     the “threading” and “_thread” modules.  Patch from Mattip.

   - bpo-23725(4): Overhaul tempfile docs.  Note deprecated status of
     mktemp.  Patch from Zbigniew Jędrzejewski-Szmek.

   - bpo-24808(5): Update the types of some PyTypeObject fields.  Patch
     by Joseph Weston.

   - bpo-22812(6): Fix unittest discovery examples.  Patch from Pam
     McA’Nulty.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22558

   (2) https://bugs.python.org/issue?@action=redirect&bpo=12067

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24952

   (4) https://bugs.python.org/issue?@action=redirect&bpo=23725

   (5) https://bugs.python.org/issue?@action=redirect&bpo=24808

   (6) https://bugs.python.org/issue?@action=redirect&bpo=22812


File: python.info,  Node: Testes<83>,  Next: Construção<90>,  Prev: Documentação<77>,  Up: Python 3 5 1 release candidate 1

1.23.107.5 Testes
.................

   - bpo-25449(1): Added tests for OrderedDict subclasses.

   - bpo-25099(2): Make test_compileall not fail when an entry on
     sys.path cannot be written to (commonly seen in administrative
     installs on Windows).

   - bpo-23919(3): Prevents assert dialogs appearing in the test suite.

   - ‘PCbuild\rt.bat’ now accepts an unlimited number of arguments to
     pass along to regrtest.py.  Previously there was a limit of 9.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25449

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25099

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23919


File: python.info,  Node: Construção<90>,  Next: Windows<78>,  Prev: Testes<83>,  Up: Python 3 5 1 release candidate 1

1.23.107.6 Construção
.....................

   - bpo-24915(1): Add LLVM support for PGO builds and use the test
     suite to generate the profile data.  Initial patch by Alecsandru
     Patrascu of Intel.

   - bpo-24910(2): Windows MSIs now have unique display names.

   - bpo-24986(3): It is now possible to build Python on Windows without
     errors when external libraries are not available.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24915

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24910

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24986


File: python.info,  Node: Windows<78>,  Next: Ferramentas/Demos<50>,  Prev: Construção<90>,  Up: Python 3 5 1 release candidate 1

1.23.107.7 Windows
..................

   - bpo-25450(1): Updates shortcuts to start Python in installation
     directory.

   - bpo-25164(2): Changes default all-users install directory to match
     per-user directory.

   - bpo-25143(3): Improves installer error messages for unsupported
     platforms.

   - bpo-25163(4): Display correct directory in installer when using
     non-default settings.

   - bpo-25361(5): Disables use of SSE2 instructions in Windows 32-bit
     build

   - bpo-25089(6): Adds logging to installer for case where launcher is
     not selected on upgrade.

   - bpo-25165(7): Windows uninstallation should not remove launcher if
     other versions remain

   - bpo-25112(8): py.exe launcher is missing icons

   - bpo-25102(9): Windows installer does not precompile for -O or -OO.

   - bpo-25081(10): Makes Back button in installer go back to upgrade
     page when upgrading.

   - bpo-25091(11): Increases font size of the installer.

   - bpo-25126(12): Clarifies that the non-web installer will download
     some components.

   - bpo-25213(13): Restores requestedExecutionLevel to manifest to
     disable UAC virtualization.

   - bpo-25022(14): Removed very outdated PC/example_nt/ directory.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25450

   (2) https://bugs.python.org/issue?@action=redirect&bpo=25164

   (3) https://bugs.python.org/issue?@action=redirect&bpo=25143

   (4) https://bugs.python.org/issue?@action=redirect&bpo=25163

   (5) https://bugs.python.org/issue?@action=redirect&bpo=25361

   (6) https://bugs.python.org/issue?@action=redirect&bpo=25089

   (7) https://bugs.python.org/issue?@action=redirect&bpo=25165

   (8) https://bugs.python.org/issue?@action=redirect&bpo=25112

   (9) https://bugs.python.org/issue?@action=redirect&bpo=25102

   (10) https://bugs.python.org/issue?@action=redirect&bpo=25081

   (11) https://bugs.python.org/issue?@action=redirect&bpo=25091

   (12) https://bugs.python.org/issue?@action=redirect&bpo=25126

   (13) https://bugs.python.org/issue?@action=redirect&bpo=25213

   (14) https://bugs.python.org/issue?@action=redirect&bpo=25022


File: python.info,  Node: Ferramentas/Demos<50>,  Prev: Windows<78>,  Up: Python 3 5 1 release candidate 1

1.23.107.8 Ferramentas/Demos
............................

   - bpo-25440(1): Fix output of python-config –extension-suffix.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25440


File: python.info,  Node: Python 3 5 0 final,  Next: Python 3 5 0 release candidate 4,  Prev: Python 3 5 1 release candidate 1,  Up: Changelog

1.23.108 Python 3.5.0 final
---------------------------

'Data de lançamento: 2015-09-13'

* Menu:

* Construção: Construção<91>.


File: python.info,  Node: Construção<91>,  Up: Python 3 5 0 final

1.23.108.1 Construção
.....................

   - bpo-25071(1): Windows installer should not require TargetDir
     parameter when installing quietly.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25071


File: python.info,  Node: Python 3 5 0 release candidate 4,  Next: Python 3 5 0 release candidate 3,  Prev: Python 3 5 0 final,  Up: Changelog

1.23.109 Python 3.5.0 release candidate 4
-----------------------------------------

'Data de lançamento: 2015-09-09'

* Menu:

* Biblioteca: Biblioteca<171>.
* Construção: Construção<92>.


File: python.info,  Node: Biblioteca<171>,  Next: Construção<92>,  Up: Python 3 5 0 release candidate 4

1.23.109.1 Biblioteca
.....................

   - bpo-25029(1): Fixes MemoryError in test_strptime.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25029


File: python.info,  Node: Construção<92>,  Prev: Biblioteca<171>,  Up: Python 3 5 0 release candidate 4

1.23.109.2 Construção
.....................

   - bpo-25027(1): Reverts partial-static build options and adds
     vcruntime140.dll to Windows installation.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=25027


File: python.info,  Node: Python 3 5 0 release candidate 3,  Next: Python 3 5 0 release candidate 2,  Prev: Python 3 5 0 release candidate 4,  Up: Changelog

1.23.110 Python 3.5.0 release candidate 3
-----------------------------------------

'Data de lançamento: 2015-09-07'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<170>.
* Biblioteca: Biblioteca<172>.


File: python.info,  Node: Núcleo e embutidos<170>,  Next: Biblioteca<172>,  Up: Python 3 5 0 release candidate 3

1.23.110.1 Núcleo e embutidos
.............................

   - bpo-24305(1): Prevent import subsystem stack frames from being
     counted by the warnings.warn(stacklevel=) parameter.

   - bpo-24912(2): Prevent __class__ assignment to immutable built-in
     objects.

   - bpo-24975(3): Fix AST compilation for PEP 448(4) syntax.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24305

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24912

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24975

   (4) https://peps.python.org/pep-0448/


File: python.info,  Node: Biblioteca<172>,  Prev: Núcleo e embutidos<170>,  Up: Python 3 5 0 release candidate 3

1.23.110.2 Biblioteca
.....................

   - bpo-24917(1): time_strftime() buffer over-read.

   - bpo-24748(2): To resolve a compatibility problem found with py2exe
     and pywin32, imp.load_dynamic() once again ignores previously
     loaded modules to support Python modules replacing themselves with
     extension modules.  Patch by Petr Viktorin.

   - bpo-24635(3): Fixed a bug in typing.py where isinstance([],
     typing.Iterable) would return True once, then False on subsequent
     calls.

   - bpo-24989(4): Fixed buffer overread in BytesIO.readline() if a
     position is set beyond size.  Based on patch by John Leitch.

   - bpo-24913(5): Fix overrun error in deque.index().  Found by John
     Leitch and Bryce Darling.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24917

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24748

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24635

   (4) https://bugs.python.org/issue?@action=redirect&bpo=24989

   (5) https://bugs.python.org/issue?@action=redirect&bpo=24913


File: python.info,  Node: Python 3 5 0 release candidate 2,  Next: Python 3 5 0 release candidate 1,  Prev: Python 3 5 0 release candidate 3,  Up: Changelog

1.23.111 Python 3.5.0 release candidate 2
-----------------------------------------

'Data de lançamento: 2015-08-25'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<171>.
* Biblioteca: Biblioteca<173>.


File: python.info,  Node: Núcleo e embutidos<171>,  Next: Biblioteca<173>,  Up: Python 3 5 0 release candidate 2

1.23.111.1 Núcleo e embutidos
.............................

   - bpo-24769(1): Interpreter now starts properly when dynamic loading
     is disabled.  Patch by Petr Viktorin.

   - bpo-21167(2): NAN operations are now handled correctly when python
     is compiled with ICC even if -fp-model strict is not specified.

   - bpo-24492(3): A “package” lacking a __name__ attribute when trying
     to perform a ‘from .. import ...’ statement will trigger an
     ImportError instead of an AttributeError.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24769

   (2) https://bugs.python.org/issue?@action=redirect&bpo=21167

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24492


File: python.info,  Node: Biblioteca<173>,  Prev: Núcleo e embutidos<171>,  Up: Python 3 5 0 release candidate 2

1.23.111.2 Biblioteca
.....................

   - bpo-24847(1): Removes vcruntime140.dll dependency from Tcl/Tk.

   - bpo-24839(2): platform._syscmd_ver raises DeprecationWarning

   - bpo-24867(3): Fix Task.get_stack() for ‘async def’ coroutines

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24847

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24839

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24867


File: python.info,  Node: Python 3 5 0 release candidate 1,  Next: Python 3 5 0 beta 4,  Prev: Python 3 5 0 release candidate 2,  Up: Changelog

1.23.112 Python 3.5.0 release candidate 1
-----------------------------------------

'Data de lançamento: 2015-08-09'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<172>.
* Biblioteca: Biblioteca<174>.
* IDLE: IDLE<65>.
* Documentação: Documentação<78>.
* Testes: Testes<84>.


File: python.info,  Node: Núcleo e embutidos<172>,  Next: Biblioteca<174>,  Up: Python 3 5 0 release candidate 1

1.23.112.1 Núcleo e embutidos
.............................

   - bpo-24667(1): Resize odict in all cases that the underlying dict
     resizes.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24667


File: python.info,  Node: Biblioteca<174>,  Next: IDLE<65>,  Prev: Núcleo e embutidos<172>,  Up: Python 3 5 0 release candidate 1

1.23.112.2 Biblioteca
.....................

   - bpo-24824(1): Signatures of codecs.encode() and codecs.decode() now
     are compatible with pydoc.

   - bpo-24634(2): Importing uuid should not try to load libc on Windows

   - bpo-24798(3): _msvccompiler.py doesn’t properly support manifests

   - bpo-4395(4): Better testing and documentation of binary operators.
     Patch by Martin Panter.

   - bpo-23973(5): Update typing.py from GitHub repo.

   - bpo-23004(6): mock_open() now reads binary data correctly when the
     type of read_data is bytes.  Initial patch by Aaron Hill.

   - bpo-23888(7): Handle fractional time in cookie expiry.  Patch by
     ssh.

   - bpo-23652(8): Make it possible to compile the select module against
     the libc headers from the Linux Standard Base, which do not include
     some EPOLL macros.  Patch by Matt Frank.

   - bpo-22932(9): Fix timezones in email.utils.formatdate.  Patch from
     Dmitry Shachnev.

   - bpo-23779(10): imaplib raises TypeError if authenticator tries to
     abort.  Patch from Craig Holmquist.

   - bpo-23319(11): Fix ctypes.BigEndianStructure, swap correctly bytes.
     Patch written by Matthieu Gautier.

   - bpo-23254(12): Document how to close the TCPServer listening
     socket.  Patch from Martin Panter.

   - bpo-19450(13): Update Windows and OS X installer builds to use
     SQLite 3.8.11.

   - bpo-17527(14): Add PATCH to wsgiref.validator.  Patch from Luca
     Sbardella.

   - bpo-24791(15): Fix grammar regression for call syntax: ‘g(*a or
     b)’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24824

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24634

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24798

   (4) https://bugs.python.org/issue?@action=redirect&bpo=4395

   (5) https://bugs.python.org/issue?@action=redirect&bpo=23973

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23004

   (7) https://bugs.python.org/issue?@action=redirect&bpo=23888

   (8) https://bugs.python.org/issue?@action=redirect&bpo=23652

   (9) https://bugs.python.org/issue?@action=redirect&bpo=22932

   (10) https://bugs.python.org/issue?@action=redirect&bpo=23779

   (11) https://bugs.python.org/issue?@action=redirect&bpo=23319

   (12) https://bugs.python.org/issue?@action=redirect&bpo=23254

   (13) https://bugs.python.org/issue?@action=redirect&bpo=19450

   (14) https://bugs.python.org/issue?@action=redirect&bpo=17527

   (15) https://bugs.python.org/issue?@action=redirect&bpo=24791


File: python.info,  Node: IDLE<65>,  Next: Documentação<78>,  Prev: Biblioteca<174>,  Up: Python 3 5 0 release candidate 1

1.23.112.3 IDLE
...............

   - bpo-23672(1): Allow Idle to edit and run files with astral chars in
     name.  Patch by Mohd Sanad Zaki Rizvi.

   - bpo-24745(2): Idle editor default font.  Switch from Courier to
     platform-sensitive TkFixedFont.  This should not affect current
     customized font selections.  If there is a problem, edit
     $HOME/.idlerc/config-main.cfg and remove ‘‘fontXXX’’ entries from
     [Editor Window].  Patch by Mark Roseman.

   - bpo-21192(3): Idle editor.  When a file is run, put its name in the
     restart bar.  Do not print false prompts.  Original patch by Adnan
     Umer.

   - bpo-13884(4): Idle menus.  Remove tearoff lines.  Patch by Roger
     Serwy.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23672

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24745

   (3) https://bugs.python.org/issue?@action=redirect&bpo=21192

   (4) https://bugs.python.org/issue?@action=redirect&bpo=13884


File: python.info,  Node: Documentação<78>,  Next: Testes<84>,  Prev: IDLE<65>,  Up: Python 3 5 0 release candidate 1

1.23.112.4 Documentação
.......................

   - bpo-24129(1): Clarify the reference documentation for name
     resolution.  This includes removing the assumption that readers
     will be familiar with the name resolution scheme Python used prior
     to the introduction of lexical scoping for function namespaces.
     Patch by Ivan Levkivskyi.

   - bpo-20769(2): Improve reload() docs.  Patch by Dorian Pula.

   - bpo-23589(3): Remove duplicate sentence from the FAQ. Patch by
     Yongzhi Pan.

   - bpo-24729(4): Correct IO tutorial to match implementation regarding
     encoding parameter to open function.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24129

   (2) https://bugs.python.org/issue?@action=redirect&bpo=20769

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23589

   (4) https://bugs.python.org/issue?@action=redirect&bpo=24729


File: python.info,  Node: Testes<84>,  Prev: Documentação<78>,  Up: Python 3 5 0 release candidate 1

1.23.112.5 Testes
.................

   - bpo-24751(1): When running regrtest with the ‘-w’ command line
     option, a test run is no longer marked as a failure if all tests
     succeed when re-run.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24751


File: python.info,  Node: Python 3 5 0 beta 4,  Next: Python 3 5 0 beta 3,  Prev: Python 3 5 0 release candidate 1,  Up: Changelog

1.23.113 Python 3.5.0 beta 4
----------------------------

'Data de lançamento: 2015-07-26'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<173>.
* Biblioteca: Biblioteca<175>.
* Construção: Construção<93>.


File: python.info,  Node: Núcleo e embutidos<173>,  Next: Biblioteca<175>,  Up: Python 3 5 0 beta 4

1.23.113.1 Núcleo e embutidos
.............................

   - bpo-23573(1): Restored optimization of bytes.rfind() and
     bytearray.rfind() for single-byte argument on Linux.

   - bpo-24569(2): Make PEP 448(3) dictionary evaluation more
     consistent.

   - bpo-24583(4): Fix crash when set is mutated while being updated.

   - bpo-24407(5): Fix crash when dict is mutated while being updated.

   - bpo-24619(6): New approach for tokenizing async/await.  As a
     consequence, it is now possible to have one-line ‘async def foo():
     await ..’ functions.

   - bpo-24687(7): Plug refleak on SyntaxError in function parameters
     annotations.

   - bpo-15944(8): memoryview: Allow arbitrary formats when casting to
     bytes.  Patch by Martin Panter.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23573

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24569

   (3) https://peps.python.org/pep-0448/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=24583

   (5) https://bugs.python.org/issue?@action=redirect&bpo=24407

   (6) https://bugs.python.org/issue?@action=redirect&bpo=24619

   (7) https://bugs.python.org/issue?@action=redirect&bpo=24687

   (8) https://bugs.python.org/issue?@action=redirect&bpo=15944


File: python.info,  Node: Biblioteca<175>,  Next: Construção<93>,  Prev: Núcleo e embutidos<173>,  Up: Python 3 5 0 beta 4

1.23.113.2 Biblioteca
.....................

   - bpo-23441(1): rcompleter now prints a tab character instead of
     displaying possible completions for an empty word.  Initial patch
     by Martin Sekera.

   - bpo-24683(2): Fixed crashes in _json functions called with
     arguments of inappropriate type.

   - bpo-21697(3): shutil.copytree() now correctly handles symbolic
     links that point to directories.  Patch by Eduardo Seabra and
     Thomas Kluyver.

   - bpo-14373(4): Fixed segmentation fault when gc.collect() is called
     during constructing lru_cache (C implementation).

   - bpo-24695(5): Fix a regression in traceback.print_exception().  If
     exc_traceback is None we shouldn’t print a traceback header like
     described in the documentation.

   - bpo-24620(6): Random.setstate() now validates the value of state
     last element.

   - bpo-22485(7): Fixed an issue that caused ‘inspect.getsource’ to
     return incorrect results on nested functions.

   - bpo-22153(8): Improve unittest docs.  Patch from Martin Panter and
     evilzero.

   - bpo-24580(9): Symbolic group references to open group in re
     patterns now are explicitly forbidden as well as numeric group
     references.

   - bpo-24206(10): Fixed __eq__ and __ne__ methods of inspect classes.

   - bpo-24631(11): Fixed regression in the timeit module with multiline
     setup.

   - bpo-18622(12): unittest.mock.mock_open().reset_mock would recurse
     infinitely.  Patch from Nicola Palumbo and Laurent De Buyst.

   - bpo-23661(13): unittest.mock side_effects can now be exceptions
     again.  This was a regression vs Python 3.4.  Patch from Ignacio
     Rossi

   - bpo-24608(14): chunk.Chunk.read() now always returns bytes, not
     str.

   - bpo-18684(15): Fixed reading out of the buffer in the re module.

   - bpo-24259(16): tarfile now raises a ReadError if an archive is
     truncated inside a data segment.

   - bpo-15014(17): SMTP.auth() and SMTP.login() now support RFC 4954’s
     optional initial-response argument to the SMTP AUTH command.

   - bpo-24669(18): Fix inspect.getsource() for ‘async def’ functions.
     Patch by Kai Groner.

   - bpo-24688(19): ast.get_docstring() for ‘async def’ functions.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23441

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24683

   (3) https://bugs.python.org/issue?@action=redirect&bpo=21697

   (4) https://bugs.python.org/issue?@action=redirect&bpo=14373

   (5) https://bugs.python.org/issue?@action=redirect&bpo=24695

   (6) https://bugs.python.org/issue?@action=redirect&bpo=24620

   (7) https://bugs.python.org/issue?@action=redirect&bpo=22485

   (8) https://bugs.python.org/issue?@action=redirect&bpo=22153

   (9) https://bugs.python.org/issue?@action=redirect&bpo=24580

   (10) https://bugs.python.org/issue?@action=redirect&bpo=24206

   (11) https://bugs.python.org/issue?@action=redirect&bpo=24631

   (12) https://bugs.python.org/issue?@action=redirect&bpo=18622

   (13) https://bugs.python.org/issue?@action=redirect&bpo=23661

   (14) https://bugs.python.org/issue?@action=redirect&bpo=24608

   (15) https://bugs.python.org/issue?@action=redirect&bpo=18684

   (16) https://bugs.python.org/issue?@action=redirect&bpo=24259

   (17) https://bugs.python.org/issue?@action=redirect&bpo=15014

   (18) https://bugs.python.org/issue?@action=redirect&bpo=24669

   (19) https://bugs.python.org/issue?@action=redirect&bpo=24688


File: python.info,  Node: Construção<93>,  Prev: Biblioteca<175>,  Up: Python 3 5 0 beta 4

1.23.113.3 Construção
.....................

   - bpo-24603(1): Update Windows builds and OS X 10.5 installer to use
     OpenSSL 1.0.2d.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24603


File: python.info,  Node: Python 3 5 0 beta 3,  Next: Python 3 5 0 beta 2,  Prev: Python 3 5 0 beta 4,  Up: Changelog

1.23.114 Python 3.5.0 beta 3
----------------------------

'Data de lançamento: 2015-07-05'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<174>.
* Biblioteca: Biblioteca<176>.
* Testes: Testes<85>.
* Documentação: Documentação<79>.
* Construção: Construção<94>.


File: python.info,  Node: Núcleo e embutidos<174>,  Next: Biblioteca<176>,  Up: Python 3 5 0 beta 3

1.23.114.1 Núcleo e embutidos
.............................

   - bpo-24467(1): Fixed possible buffer over-read in bytearray.  The
     bytearray object now always allocates place for trailing null byte
     and it’s buffer now is always null-terminated.

   - Upgrade to Unicode 8.0.0.

   - bpo-24345(2): Add Py_tp_finalize slot for the stable ABI.

   - bpo-24400(3): Introduce a distinct type for PEP 492(4) coroutines;
     add types.CoroutineType, inspect.getcoroutinestate,
     inspect.getcoroutinelocals; coroutines no longer use CO_GENERATOR
     flag; sys.set_coroutine_wrapper works only for ‘async def’
     coroutines; inspect.iscoroutine no longer uses
     collections.abc.Coroutine, it’s intended to test for pure ‘async
     def’ coroutines only; add new opcode: GET_YIELD_FROM_ITER; fix
     generators wrapper used in types.coroutine to be instance of
     collections.abc.Generator; collections.abc.Awaitable and
     collections.abc.Coroutine can no longer be used to detect
     generator-based coroutines–use inspect.isawaitable instead.

   - bpo-24450(5): Add gi_yieldfrom to generators and cr_await to
     coroutines.  Contributed by Benno Leslie and Yury Selivanov.

   - bpo-19235(6): Add new RecursionError exception.  Patch by Georg
     Brandl.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24467

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24345

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24400

   (4) https://peps.python.org/pep-0492/

   (5) https://bugs.python.org/issue?@action=redirect&bpo=24450

   (6) https://bugs.python.org/issue?@action=redirect&bpo=19235


File: python.info,  Node: Biblioteca<176>,  Next: Testes<85>,  Prev: Núcleo e embutidos<174>,  Up: Python 3 5 0 beta 3

1.23.114.2 Biblioteca
.....................

   - bpo-21750(1): mock_open.read_data can now be read from each
     instance, as it could in Python 3.3.

   - bpo-24552(2): Fix use after free in an error case of the _pickle
     module.

   - bpo-24514(3): tarfile now tolerates number fields consisting of
     only whitespace.

   - bpo-19176(4): Fixed doctype() related bugs in C implementation of
     ElementTree.  A deprecation warning no longer issued by XMLParser
     subclass with default doctype() method.  Direct call of doctype()
     now issues a warning.  Parser’s doctype() now is not called if
     target’s doctype() is called.  Based on patch by Martin Panter.

   - bpo-20387(5): Restore semantic round-trip correctness in
     tokenize/untokenize for tab-indented blocks.

   - bpo-24456(6): Fixed possible buffer over-read in adpcm2lin() and
     lin2adpcm() functions of the audioop module.

   - bpo-24336(7): The contextmanager decorator now works with functions
     with keyword arguments called “func” and “self”.  Patch by Martin
     Panter.

   - bpo-24522(8): Fix possible integer overflow in json accelerator
     module.

   - bpo-24489(9): ensure a previously set C errno doesn’t disturb
     cmath.polar().

   - bpo-24408(10): Fixed AttributeError in measure() and metrics()
     methods of tkinter.Font.

   - bpo-14373(11): C implementation of functools.lru_cache() now can be
     used with methods.

   - bpo-24347(12): Set KeyError if PyDict_GetItemWithError returns
     NULL.

   - bpo-24348(13): Drop superfluous incref/decref.

   - bpo-24359(14): Check for changed OrderedDict size during iteration.

   - bpo-24368(15): Support keyword arguments in OrderedDict methods.

   - bpo-24362(16): Simplify the C OrderedDict fast nodes resize logic.

   - bpo-24377(17): Fix a ref leak in OrderedDict.__repr__.

   - bpo-24369(18): Defend against key-changes during iteration.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21750

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24552

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24514

   (4) https://bugs.python.org/issue?@action=redirect&bpo=19176

   (5) https://bugs.python.org/issue?@action=redirect&bpo=20387

   (6) https://bugs.python.org/issue?@action=redirect&bpo=24456

   (7) https://bugs.python.org/issue?@action=redirect&bpo=24336

   (8) https://bugs.python.org/issue?@action=redirect&bpo=24522

   (9) https://bugs.python.org/issue?@action=redirect&bpo=24489

   (10) https://bugs.python.org/issue?@action=redirect&bpo=24408

   (11) https://bugs.python.org/issue?@action=redirect&bpo=14373

   (12) https://bugs.python.org/issue?@action=redirect&bpo=24347

   (13) https://bugs.python.org/issue?@action=redirect&bpo=24348

   (14) https://bugs.python.org/issue?@action=redirect&bpo=24359

   (15) https://bugs.python.org/issue?@action=redirect&bpo=24368

   (16) https://bugs.python.org/issue?@action=redirect&bpo=24362

   (17) https://bugs.python.org/issue?@action=redirect&bpo=24377

   (18) https://bugs.python.org/issue?@action=redirect&bpo=24369


File: python.info,  Node: Testes<85>,  Next: Documentação<79>,  Prev: Biblioteca<176>,  Up: Python 3 5 0 beta 3

1.23.114.3 Testes
.................

   - bpo-24373(1): _testmultiphase and xxlimited now use tp_traverse and
     tp_finalize to avoid reference leaks encountered when combining
     tp_dealloc with PyType_FromSpec (see bpo-16690(2) for details)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24373

   (2) https://bugs.python.org/issue?@action=redirect&bpo=16690


File: python.info,  Node: Documentação<79>,  Next: Construção<94>,  Prev: Testes<85>,  Up: Python 3 5 0 beta 3

1.23.114.4 Documentação
.......................

   - bpo-24458(1): Update documentation to cover multi-phase
     initialization for extension modules (PEP 489).  Patch by Petr
     Viktorin.

   - bpo-24351(2): Clarify what is meant by “identifier” in the context
     of string.Template instances.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24458

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24351


File: python.info,  Node: Construção<94>,  Prev: Documentação<79>,  Up: Python 3 5 0 beta 3

1.23.114.5 Construção
.....................

   - bpo-24432(1): Update Windows builds and OS X 10.5 installer to use
     OpenSSL 1.0.2c.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24432


File: python.info,  Node: Python 3 5 0 beta 2,  Next: Python 3 5 0 beta 1,  Prev: Python 3 5 0 beta 3,  Up: Changelog

1.23.115 Python 3.5.0 beta 2
----------------------------

'Data de lançamento: 2015-05-31'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<175>.
* Biblioteca: Biblioteca<177>.


File: python.info,  Node: Núcleo e embutidos<175>,  Next: Biblioteca<177>,  Up: Python 3 5 0 beta 2

1.23.115.1 Núcleo e embutidos
.............................

   - bpo-24284(1): The startswith and endswith methods of the str class
     no longer return True when finding the empty string and the indexes
     are completely out of range.

   - bpo-24115(2): Update uses of PyObject_IsTrue(), PyObject_Not(),
     PyObject_IsInstance(), PyObject_RichCompareBool() and
     _PyDict_Contains() to check for and handle errors correctly.

   - bpo-24328(3): Fix importing one character extension modules.

   - bpo-11205(4): In dictionary displays, evaluate the key before the
     value.

   - bpo-24285(5): Fixed regression that prevented importing extension
     modules from inside packages.  Patch by Petr Viktorin.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24284

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24115

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24328

   (4) https://bugs.python.org/issue?@action=redirect&bpo=11205

   (5) https://bugs.python.org/issue?@action=redirect&bpo=24285


File: python.info,  Node: Biblioteca<177>,  Prev: Núcleo e embutidos<175>,  Up: Python 3 5 0 beta 2

1.23.115.2 Biblioteca
.....................

   - bpo-23247(1): Fix a crash in the StreamWriter.reset() of CJK
     codecs.

   - bpo-24270(2): Add math.isclose() and cmath.isclose() functions as
     per PEP 485(3).  Contributed by Chris Barker and Tal Einat.

   - bpo-5633(4): Fixed timeit when the statement is a string and the
     setup is not.

   - bpo-24326(5): Fixed audioop.ratecv() with non-default weightB
     argument.  Original patch by David Moore.

   - bpo-16991(6): Add a C implementation of OrderedDict.

   - bpo-23934(7): Fix inspect.signature to fail correctly for builtin
     types lacking signature information.  Initial patch by James
     Powell.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23247

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24270

   (3) https://peps.python.org/pep-0485/

   (4) https://bugs.python.org/issue?@action=redirect&bpo=5633

   (5) https://bugs.python.org/issue?@action=redirect&bpo=24326

   (6) https://bugs.python.org/issue?@action=redirect&bpo=16991

   (7) https://bugs.python.org/issue?@action=redirect&bpo=23934


File: python.info,  Node: Python 3 5 0 beta 1,  Next: Python 3 5 0 alpha 4,  Prev: Python 3 5 0 beta 2,  Up: Changelog

1.23.116 Python 3.5.0 beta 1
----------------------------

'Data de lançamento: 2015-05-24'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<176>.
* Biblioteca: Biblioteca<178>.
* IDLE: IDLE<66>.
* Testes: Testes<86>.
* Documentação: Documentação<80>.
* Ferramentas/Demos: Ferramentas/Demos<51>.


File: python.info,  Node: Núcleo e embutidos<176>,  Next: Biblioteca<178>,  Up: Python 3 5 0 beta 1

1.23.116.1 Núcleo e embutidos
.............................

   - bpo-24276(1): Fixed optimization of property descriptor getter.

   - bpo-24268(2): PEP 489: Multi-phase extension module initialization.
     Patch by Petr Viktorin.

   - bpo-23955(3): Add pyvenv.cfg option to suppress
     registry/environment lookup for generating sys.path on Windows.

   - bpo-24257(4): Fixed system error in the comparison of faked
     types.SimpleNamespace.

   - bpo-22939(5): Fixed integer overflow in iterator object.  Patch by
     Clement Rouault.

   - bpo-23985(6): Fix a possible buffer overrun when deleting a slice
     from the front of a bytearray and then appending some other bytes
     data.

   - bpo-24102(7): Fixed exception type checking in standard error
     handlers.

   - bpo-15027(8): The UTF-32 encoder is now 3x to 7x faster.

   - bpo-23290(9): Optimize set_merge() for cases where the target is
     empty.  (Contributed by Serhiy Storchaka.)

   - bpo-2292(10): PEP 448: Additional Unpacking Generalizations.

   - bpo-24096(11): Make warnings.warn_explicit more robust against
     mutation of the warnings.filters list.

   - bpo-23996(12): Avoid a crash when a delegated generator raises an
     unnormalized StopIteration exception.  Patch by Stefan Behnel.

   - bpo-23910(13): Optimize property() getter calls.  Patch by Joe
     Jevnik.

   - bpo-23911(14): Move path-based importlib bootstrap code to a
     separate frozen module.

   - bpo-24192(15): Fix namespace package imports.

   - bpo-24022(16): Fix tokenizer crash when processing undecodable
     source code.

   - bpo-9951(17): Added a hex() method to bytes, bytearray, and
     memoryview.

   - bpo-22906(18): PEP 479: Change StopIteration handling inside
     generators.

   - bpo-24017(19): PEP 492: Coroutines with async and await syntax.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24276

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24268

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23955

   (4) https://bugs.python.org/issue?@action=redirect&bpo=24257

   (5) https://bugs.python.org/issue?@action=redirect&bpo=22939

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23985

   (7) https://bugs.python.org/issue?@action=redirect&bpo=24102

   (8) https://bugs.python.org/issue?@action=redirect&bpo=15027

   (9) https://bugs.python.org/issue?@action=redirect&bpo=23290

   (10) https://bugs.python.org/issue?@action=redirect&bpo=2292

   (11) https://bugs.python.org/issue?@action=redirect&bpo=24096

   (12) https://bugs.python.org/issue?@action=redirect&bpo=23996

   (13) https://bugs.python.org/issue?@action=redirect&bpo=23910

   (14) https://bugs.python.org/issue?@action=redirect&bpo=23911

   (15) https://bugs.python.org/issue?@action=redirect&bpo=24192

   (16) https://bugs.python.org/issue?@action=redirect&bpo=24022

   (17) https://bugs.python.org/issue?@action=redirect&bpo=9951

   (18) https://bugs.python.org/issue?@action=redirect&bpo=22906

   (19) https://bugs.python.org/issue?@action=redirect&bpo=24017


File: python.info,  Node: Biblioteca<178>,  Next: IDLE<66>,  Prev: Núcleo e embutidos<176>,  Up: Python 3 5 0 beta 1

1.23.116.2 Biblioteca
.....................

   - bpo-14373(1): Added C implementation of functools.lru_cache().
     Based on patches by Matt Joiner and Alexey Kachayev.

   - bpo-24230(2): The tempfile module now accepts bytes for prefix,
     suffix and dir parameters and returns bytes in such situations
     (matching the os module APIs).

   - bpo-22189(3): collections.UserString now supports __getnewargs__(),
     __rmod__(), casefold(), format_map(), isprintable(), and
     maketrans().  Patch by Joe Jevnik.

   - bpo-24244(4): Prevents termination when an invalid format string is
     encountered on Windows in strftime.

   - bpo-23973(5): PEP 484: Add the typing module.

   - bpo-23086(6): The collections.abc.Sequence() abstract base class
     added 'start' and 'stop' parameters to the index() mixin.  Patch by
     Devin Jeanpierre.

   - bpo-20035(7): Replaced the ‘tkinter._fix’ module used for setting
     up the Tcl/Tk environment on Windows with a private function in the
     ‘_tkinter’ module that makes no permanent changes to the
     environment.

   - bpo-24257(8): Fixed segmentation fault in sqlite3.Row constructor
     with faked cursor type.

   - bpo-15836(9): assertRaises(), assertRaisesRegex(), assertWarns()
     and assertWarnsRegex() assertments now check the type of the first
     argument to prevent possible user error.  Based on patch by Daniel
     Wagner-Hall.

   - bpo-9858(10): Add missing method stubs to _io.RawIOBase.  Patch by
     Laura Rupprecht.

   - bpo-22955(11): attrgetter, itemgetter and methodcaller objects in
     the operator module now support pickling.  Added readable and
     evaluable repr for these objects.  Based on patch by Josh
     Rosenberg.

   - bpo-22107(12): tempfile.gettempdir() and tempfile.mkdtemp() now try
     again when a directory with the chosen name already exists on
     Windows as well as on Unix.  tempfile.mkstemp() now fails early if
     parent directory is not valid (not exists or is a file) on Windows.

   - bpo-23780(13): Improved error message in os.path.join() with single
     argument.

   - bpo-6598(14): Increased time precision and random number range in
     email.utils.make_msgid() to strengthen the uniqueness of the
     message ID.

   - bpo-24091(15): Fixed various crashes in corner cases in C
     implementation of ElementTree.

   - bpo-21931(16): msilib.FCICreate() now raises TypeError in the case
     of a bad argument instead of a ValueError with a bogus FCI error
     number.  Patch by Jeffrey Armstrong.

   - bpo-13866(17): 'quote_via' argument added to
     urllib.parse.urlencode.

   - bpo-20098(18): New mangle_from policy option for email, default
     True for compat32, but False for all other policies.

   - bpo-24211(19): The email library now supports RFC 6532: it can
     generate headers using utf-8 instead of encoded words.

   - bpo-16314(20): Added support for the LZMA compression in distutils.

   - bpo-21804(21): poplib now supports RFC 6856 (UTF8).

   - bpo-18682(22): Optimized pprint functions for builtin scalar types.

   - bpo-22027(23): smtplib now supports RFC 6531 (SMTPUTF8).

   - bpo-23488(24): Random generator objects now consume 2x less memory
     on 64-bit.

   - bpo-1322(25): platform.dist() and platform.linux_distribution()
     functions are now deprecated.  Initial patch by Vajrasky Kok.

   - bpo-22486(26): Added the math.gcd() function.  The fractions.gcd()
     function now is deprecated.  Based on patch by Mark Dickinson.

   - bpo-24064(27): Property() docstrings are now writeable.  (Patch by
     Berker Peksag.)

   - bpo-22681(28): Added support for the koi8_t encoding.

   - bpo-22682(29): Added support for the kz1048 encoding.

   - bpo-23796(30): peek and read1 methods of BufferedReader now raise
     ValueError if they called on a closed object.  Patch by John
     Hergenroeder.

   - bpo-21795(31): smtpd now supports the 8BITMIME extension whenever
     the new 'decode_data' constructor argument is set to False.

   - bpo-24155(32): optimize heapq.heapify() for better cache
     performance when heapifying large lists.

   - bpo-21800(33): imaplib now supports RFC 5161 (enable), RFC 6855
     (utf8/internationalized email) and automatically encodes non-ASCII
     usernames and passwords to UTF8.

   - bpo-20274(34): When calling a _sqlite.Connection, it now complains
     if passed any keyword arguments.  Previously it silently ignored
     them.

   - bpo-20274(35): Remove ignored and erroneous “kwargs” parameters
     from three METH_VARARGS methods on _sqlite.Connection.

   - bpo-24134(36): assertRaises(), assertRaisesRegex(), assertWarns()
     and assertWarnsRegex() checks now emits a deprecation warning when
     callable is None or keyword arguments except msg is passed in the
     context manager mode.

   - bpo-24018(37): Add a collections.abc.Generator abstract base class.
     Contributed by Stefan Behnel.

   - bpo-23880(38): Tkinter’s getint() and getdouble() now support
     Tcl_Obj.  Tkinter’s getdouble() now supports any numbers (in
     particular int).

   - bpo-22619(39): Added negative limit support in the traceback
     module.  Based on patch by Dmitry Kazakov.

   - bpo-24094(40): Fix possible crash in json.encode with poorly
     behaved dict subclasses.

   - bpo-9246(41): On POSIX, os.getcwd() now supports paths longer than
     1025 bytes.  Patch written by William Orr.

   - bpo-17445(42): add difflib.diff_bytes() to support comparison of
     byte strings (fixes a regression from Python 2).

   - bpo-23917(43): Fall back to sequential compilation when
     ProcessPoolExecutor doesn’t exist.  Patch by Claudiu Popa.

   - bpo-23008(44): Fixed resolving attributes with boolean value is
     False in pydoc.

   - Fix asyncio issue 235: LifoQueue and PriorityQueue’s put didn’t
     increment unfinished tasks (this bug was introduced when
     JoinableQueue was merged with Queue).

   - bpo-23908(45): os functions now reject paths with embedded null
     character on Windows instead of silently truncating them.

   - bpo-23728(46): binascii.crc_hqx() could return an integer outside
     of the range 0-0xffff for empty data.

   - bpo-23887(47): urllib.error.HTTPError now has a proper repr()
     representation.  Patch by Berker Peksag.

   - asyncio: New event loop APIs: set_task_factory() and
     get_task_factory().

   - asyncio: async() function is deprecated in favour of
     ensure_future().

   - bpo-24178(48): asyncio.Lock, Condition, Semaphore, and
     BoundedSemaphore support new ‘async with’ syntax.  Contributed by
     Yury Selivanov.

   - bpo-24179(49): Support ‘async for’ for asyncio.StreamReader.
     Contributed by Yury Selivanov.

   - bpo-24184(50): Add AsyncIterator and AsyncIterable ABCs to
     collections.abc.  Contributed by Yury Selivanov.

   - bpo-22547(51): Implement informative __repr__ for
     inspect.BoundArguments.  Contributed by Yury Selivanov.

   - bpo-24190(52): Implement inspect.BoundArgument.apply_defaults()
     method.  Contributed by Yury Selivanov.

   - bpo-20691(53): Add ‘follow_wrapped’ argument to
     inspect.Signature.from_callable() and inspect.signature().
     Contributed by Yury Selivanov.

   - bpo-24248(54): Deprecate inspect.Signature.from_function() and
     inspect.Signature.from_builtin().

   - bpo-23898(55): Fix inspect.classify_class_attrs() to support
     attributes with overloaded __eq__ and __bool__.  Patch by Mike
     Bayer.

   - bpo-24298(56): Fix inspect.signature() to correctly unwrap wrappers
     around bound methods.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14373

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24230

   (3) https://bugs.python.org/issue?@action=redirect&bpo=22189

   (4) https://bugs.python.org/issue?@action=redirect&bpo=24244

   (5) https://bugs.python.org/issue?@action=redirect&bpo=23973

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23086

   (7) https://bugs.python.org/issue?@action=redirect&bpo=20035

   (8) https://bugs.python.org/issue?@action=redirect&bpo=24257

   (9) https://bugs.python.org/issue?@action=redirect&bpo=15836

   (10) https://bugs.python.org/issue?@action=redirect&bpo=9858

   (11) https://bugs.python.org/issue?@action=redirect&bpo=22955

   (12) https://bugs.python.org/issue?@action=redirect&bpo=22107

   (13) https://bugs.python.org/issue?@action=redirect&bpo=23780

   (14) https://bugs.python.org/issue?@action=redirect&bpo=6598

   (15) https://bugs.python.org/issue?@action=redirect&bpo=24091

   (16) https://bugs.python.org/issue?@action=redirect&bpo=21931

   (17) https://bugs.python.org/issue?@action=redirect&bpo=13866

   (18) https://bugs.python.org/issue?@action=redirect&bpo=20098

   (19) https://bugs.python.org/issue?@action=redirect&bpo=24211

   (20) https://bugs.python.org/issue?@action=redirect&bpo=16314

   (21) https://bugs.python.org/issue?@action=redirect&bpo=21804

   (22) https://bugs.python.org/issue?@action=redirect&bpo=18682

   (23) https://bugs.python.org/issue?@action=redirect&bpo=22027

   (24) https://bugs.python.org/issue?@action=redirect&bpo=23488

   (25) https://bugs.python.org/issue?@action=redirect&bpo=1322

   (26) https://bugs.python.org/issue?@action=redirect&bpo=22486

   (27) https://bugs.python.org/issue?@action=redirect&bpo=24064

   (28) https://bugs.python.org/issue?@action=redirect&bpo=22681

   (29) https://bugs.python.org/issue?@action=redirect&bpo=22682

   (30) https://bugs.python.org/issue?@action=redirect&bpo=23796

   (31) https://bugs.python.org/issue?@action=redirect&bpo=21795

   (32) https://bugs.python.org/issue?@action=redirect&bpo=24155

   (33) https://bugs.python.org/issue?@action=redirect&bpo=21800

   (34) https://bugs.python.org/issue?@action=redirect&bpo=20274

   (35) https://bugs.python.org/issue?@action=redirect&bpo=20274

   (36) https://bugs.python.org/issue?@action=redirect&bpo=24134

   (37) https://bugs.python.org/issue?@action=redirect&bpo=24018

   (38) https://bugs.python.org/issue?@action=redirect&bpo=23880

   (39) https://bugs.python.org/issue?@action=redirect&bpo=22619

   (40) https://bugs.python.org/issue?@action=redirect&bpo=24094

   (41) https://bugs.python.org/issue?@action=redirect&bpo=9246

   (42) https://bugs.python.org/issue?@action=redirect&bpo=17445

   (43) https://bugs.python.org/issue?@action=redirect&bpo=23917

   (44) https://bugs.python.org/issue?@action=redirect&bpo=23008

   (45) https://bugs.python.org/issue?@action=redirect&bpo=23908

   (46) https://bugs.python.org/issue?@action=redirect&bpo=23728

   (47) https://bugs.python.org/issue?@action=redirect&bpo=23887

   (48) https://bugs.python.org/issue?@action=redirect&bpo=24178

   (49) https://bugs.python.org/issue?@action=redirect&bpo=24179

   (50) https://bugs.python.org/issue?@action=redirect&bpo=24184

   (51) https://bugs.python.org/issue?@action=redirect&bpo=22547

   (52) https://bugs.python.org/issue?@action=redirect&bpo=24190

   (53) https://bugs.python.org/issue?@action=redirect&bpo=20691

   (54) https://bugs.python.org/issue?@action=redirect&bpo=24248

   (55) https://bugs.python.org/issue?@action=redirect&bpo=23898

   (56) https://bugs.python.org/issue?@action=redirect&bpo=24298


File: python.info,  Node: IDLE<66>,  Next: Testes<86>,  Prev: Biblioteca<178>,  Up: Python 3 5 0 beta 1

1.23.116.3 IDLE
...............

   - bpo-23184(1): remove unused names and imports in idlelib.  Initial
     patch by Al Sweigart.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23184


File: python.info,  Node: Testes<86>,  Next: Documentação<80>,  Prev: IDLE<66>,  Up: Python 3 5 0 beta 1

1.23.116.4 Testes
.................

   - bpo-21520(1): test_zipfile no longer fails if the word ‘bad’
     appears anywhere in the name of the current directory.

   - bpo-9517(2): Move script_helper into the support package.  Patch by
     Christie Wilson.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=21520

   (2) https://bugs.python.org/issue?@action=redirect&bpo=9517


File: python.info,  Node: Documentação<80>,  Next: Ferramentas/Demos<51>,  Prev: Testes<86>,  Up: Python 3 5 0 beta 1

1.23.116.5 Documentação
.......................

   - bpo-22155(1): Add File Handlers subsection with createfilehandler
     to tkinter doc.  Remove obsolete example from FAQ. Patch by Martin
     Panter.

   - bpo-24029(2): Document the name binding behavior for submodule
     imports.

   - bpo-24077(3): Fix typo in man page for -I command option: -s, not
     -S

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22155

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24029

   (3) https://bugs.python.org/issue?@action=redirect&bpo=24077


File: python.info,  Node: Ferramentas/Demos<51>,  Prev: Documentação<80>,  Up: Python 3 5 0 beta 1

1.23.116.6 Ferramentas/Demos
............................

   - bpo-24000(1): Improved Argument Clinic’s mapping of converters to
     legacy “format units”.  Updated the documentation to match.

   - bpo-24001(2): Argument Clinic converters now use accept={type}
     instead of types={‘type’} to specify the types the converter
     accepts.

   - bpo-23330(3): h2py now supports arbitrary filenames in #include.

   - bpo-24031(4): make patchcheck now supports git checkouts, too.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=24000

   (2) https://bugs.python.org/issue?@action=redirect&bpo=24001

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23330

   (4) https://bugs.python.org/issue?@action=redirect&bpo=24031


File: python.info,  Node: Python 3 5 0 alpha 4,  Next: Python 3 5 0 alpha 3,  Prev: Python 3 5 0 beta 1,  Up: Changelog

1.23.117 Python 3.5.0 alpha 4
-----------------------------

'Data de lançamento: 2015-04-19'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<177>.
* Biblioteca: Biblioteca<179>.
* Construção: Construção<95>.
* Testes: Testes<87>.
* Ferramentas/Demos: Ferramentas/Demos<52>.
* API C: API C<76>.


File: python.info,  Node: Núcleo e embutidos<177>,  Next: Biblioteca<179>,  Up: Python 3 5 0 alpha 4

1.23.117.1 Núcleo e embutidos
.............................

   - bpo-22980(1): Under Linux, GNU/KFreeBSD and the Hurd, C extensions
     now include the architecture triplet in the extension name, to make
     it easy to test builds for different ABIs in the same working tree.
     Under OS X, the extension name now includes PEP 3149(2)-style
     information.

   - bpo-22631(3): Added Linux-specific socket constant
     CAN_RAW_FD_FRAMES. Patch courtesy of Joe Jevnik.

   - bpo-23731(4): Implement PEP 488(5): removal of .pyo files.

   - bpo-23726(6): Don’t enable GC for user subclasses of non-GC types
     that don’t add any new fields.  Patch by Eugene Toder.

   - bpo-23309(7): Avoid a deadlock at shutdown if a daemon thread is
     aborted while it is holding a lock to a buffered I/O object, and
     the main thread tries to use the same I/O object (typically stdout
     or stderr).  A fatal error is emitted instead.

   - bpo-22977(8): Fixed formatting Windows error messages on Wine.
     Patch by Martin Panter.

   - bpo-23466(9): %c, %o, %x, and %X in bytes formatting now raise
     TypeError on non-integer input.

   - bpo-24044(10): Fix possible null pointer dereference in list.sort
     in out of memory conditions.

   - bpo-21354(11): PyCFunction_New function is exposed by python DLL
     again.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22980

   (2) https://peps.python.org/pep-3149/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=22631

   (4) https://bugs.python.org/issue?@action=redirect&bpo=23731

   (5) https://peps.python.org/pep-0488/

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23726

   (7) https://bugs.python.org/issue?@action=redirect&bpo=23309

   (8) https://bugs.python.org/issue?@action=redirect&bpo=22977

   (9) https://bugs.python.org/issue?@action=redirect&bpo=23466

   (10) https://bugs.python.org/issue?@action=redirect&bpo=24044

   (11) https://bugs.python.org/issue?@action=redirect&bpo=21354


File: python.info,  Node: Biblioteca<179>,  Next: Construção<95>,  Prev: Núcleo e embutidos<177>,  Up: Python 3 5 0 alpha 4

1.23.117.2 Biblioteca
.....................

   - bpo-23840(1): tokenize.open() now closes the temporary binary file
     on error to fix a resource warning.

   - bpo-16914(2): new debuglevel 2 in smtplib adds timestamps to debug
     output.

   - bpo-7159(3): urllib.request now supports sending auth credentials
     automatically after the first 401.  This enhancement is a superset
     of the enhancement from bpo-19494(4) and supersedes that change.

   - bpo-23703(5): Fix a regression in urljoin() introduced in
     901e4e52b20a.  Patch by Demian Brecht.

   - bpo-4254(6): Adds _curses.update_lines_cols().  Patch by Arnon
     Yaari

   - bpo-19933(7): Provide default argument for ndigits in round.  Patch
     by Vajrasky Kok.

   - bpo-23193(8): Add a numeric_owner parameter to
     tarfile.TarFile.extract and tarfile.TarFile.extractall.  Patch by
     Michael Vogt and Eric Smith.

   - bpo-23342(9): Add a subprocess.run() function than returns a
     CalledProcess instance for a more consistent API than the existing
     call* functions.

   - bpo-21217(10): inspect.getsourcelines() now tries to compute the
     start and end lines from the code object, fixing an issue when a
     lambda function is used as decorator argument.  Patch by Thomas
     Ballinger and Allison Kaptur.

   - bpo-24521(11): Fix possible integer overflows in the pickle module.

   - bpo-22931(12): Allow ‘[’ and ‘]’ in cookie values.

   - The keywords attribute of functools.partial is now always a
     dictionary.

   - bpo-23811(13): Add missing newline to the PyCompileError error
     message.  Patch by Alex Shkop.

   - bpo-21116(14): Avoid blowing memory when allocating a
     multiprocessing shared array that’s larger than 50% of the
     available RAM. Patch by Médéric Boquien.

   - bpo-22982(15): Improve BOM handling when seeking to multiple
     positions of a writable text file.

   - bpo-23464(16): Removed deprecated asyncio JoinableQueue.

   - bpo-23529(17): Limit the size of decompressed data when reading
     from GzipFile, BZ2File or LZMAFile.  This defeats denial of service
     attacks using compressed bombs (i.e.  compressed payloads which
     decompress to a huge size).  Patch by Martin Panter and Nikolaus
     Rath.

   - bpo-21859(18): Added Python implementation of io.FileIO.

   - bpo-23865(19): close() methods in multiple modules now are
     idempotent and more robust at shutdown.  If they need to release
     multiple resources, all are released even if errors occur.

   - bpo-23400(20): Raise same exception on both Python 2 and 3 if
     sem_open is not available.  Patch by Davin Potts.

   - bpo-10838(21): The subprocess now module includes SubprocessError
     and TimeoutError in its list of exported names for the users wild
     enough to use ‘from subprocess import *’.

   - bpo-23411(22): Added DefragResult, ParseResult, SplitResult,
     DefragResultBytes, ParseResultBytes, and SplitResultBytes to
     urllib.parse.__all__.  Patch by Martin Panter.

   - bpo-23881(23): urllib.request.ftpwrapper constructor now closes the
     socket if the FTP connection failed to fix a ResourceWarning.

   - bpo-23853(24): *note socket.socket.sendall(): dd0. does no more
     reset the socket timeout each time data is sent successfully.  The
     socket timeout is now the maximum total duration to send all data.

   - bpo-22721(25): An order of multiline pprint output of set or dict
     containing orderable and non-orderable elements no longer depends
     on iteration order of set or dict.

   - bpo-15133(26): _tkinter.tkapp.getboolean() now supports Tcl_Obj and
     always returns bool.  tkinter.BooleanVar now validates input values
     (accepted bool, int, str, and Tcl_Obj).  tkinter.BooleanVar.get()
     now always returns bool.

   - bpo-10590(27): xml.sax.parseString() now supports string argument.

   - bpo-23338(28): Fixed formatting ctypes error messages on Cygwin.
     Patch by Makoto Kato.

   - bpo-15582(29): inspect.getdoc() now follows inheritance chains.

   - bpo-2175(30): SAX parsers now support a character stream of
     InputSource object.

   - bpo-16840(31): Tkinter now supports 64-bit integers added in Tcl
     8.4 and arbitrary precision integers added in Tcl 8.5.

   - bpo-23834(32): Fix socket.sendto(), use the C Py_ssize_t type to
     store the result of sendto() instead of the C int type.

   - bpo-23618(33): *note socket.socket.connect(): dcb. now waits until
     the connection completes instead of raising *note InterruptedError:
     db0. if the connection is interrupted by signals, signal handlers
     don’t raise an exception and the socket is blocking or has a
     timeout.  *note socket.socket.connect(): dcb. still raise *note
     InterruptedError: db0. for non-blocking sockets.

   - bpo-21526(34): Tkinter now supports new boolean type in Tcl 8.5.

   - bpo-23836(35): Fix the faulthandler module to handle reentrant
     calls to its signal handlers.

   - bpo-23838(36): linecache now clears the cache and returns an empty
     result on MemoryError.

   - bpo-10395(37): Added os.path.commonpath().  Implemented in
     posixpath and ntpath.  Based on patch by Rafik Draoui.

   - bpo-23611(38): Serializing more “lookupable” objects (such as
     unbound methods or nested classes) now are supported with pickle
     protocols < 4.

   - bpo-13583(39): sqlite3.Row now supports slice indexing.

   - bpo-18473(40): Fixed 2to3 and 3to2 compatible pickle mappings.
     Fixed ambiguous reverse mappings.  Added many new mappings.  Import
     mapping is no longer applied to modules already mapped with full
     name mapping.

   - bpo-23485(41): select.select() is now retried automatically with
     the recomputed timeout when interrupted by a signal, except if the
     signal handler raises an exception.  This change is part of the PEP
     475(42).

   - bpo-23752(43): When built from an existing file descriptor,
     io.FileIO() now only calls fstat() once.  Before fstat() was called
     twice, which was not necessary.

   - bpo-23704(44): collections.deque() objects now support __add__,
     __mul__, and __imul__().

   - bpo-23171(45): csv.Writer.writerow() now supports arbitrary
     iterables.

   - bpo-23745(46): The new email header parser now handles duplicate
     MIME parameter names without error, similar to how get_param
     behaves.

   - bpo-22117(47): Fix os.utime(), it now rounds the timestamp towards
     minus infinity (-inf) instead of rounding towards zero.

   - bpo-23310(48): Fix MagicMock’s initializer to work with
     __methods__, just like configure_mock().  Patch by Kasia Jachim.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23840

   (2) https://bugs.python.org/issue?@action=redirect&bpo=16914

   (3) https://bugs.python.org/issue?@action=redirect&bpo=7159

   (4) https://bugs.python.org/issue?@action=redirect&bpo=19494

   (5) https://bugs.python.org/issue?@action=redirect&bpo=23703

   (6) https://bugs.python.org/issue?@action=redirect&bpo=4254

   (7) https://bugs.python.org/issue?@action=redirect&bpo=19933

   (8) https://bugs.python.org/issue?@action=redirect&bpo=23193

   (9) https://bugs.python.org/issue?@action=redirect&bpo=23342

   (10) https://bugs.python.org/issue?@action=redirect&bpo=21217

   (11) https://bugs.python.org/issue?@action=redirect&bpo=24521

   (12) https://bugs.python.org/issue?@action=redirect&bpo=22931

   (13) https://bugs.python.org/issue?@action=redirect&bpo=23811

   (14) https://bugs.python.org/issue?@action=redirect&bpo=21116

   (15) https://bugs.python.org/issue?@action=redirect&bpo=22982

   (16) https://bugs.python.org/issue?@action=redirect&bpo=23464

   (17) https://bugs.python.org/issue?@action=redirect&bpo=23529

   (18) https://bugs.python.org/issue?@action=redirect&bpo=21859

   (19) https://bugs.python.org/issue?@action=redirect&bpo=23865

   (20) https://bugs.python.org/issue?@action=redirect&bpo=23400

   (21) https://bugs.python.org/issue?@action=redirect&bpo=10838

   (22) https://bugs.python.org/issue?@action=redirect&bpo=23411

   (23) https://bugs.python.org/issue?@action=redirect&bpo=23881

   (24) https://bugs.python.org/issue?@action=redirect&bpo=23853

   (25) https://bugs.python.org/issue?@action=redirect&bpo=22721

   (26) https://bugs.python.org/issue?@action=redirect&bpo=15133

   (27) https://bugs.python.org/issue?@action=redirect&bpo=10590

   (28) https://bugs.python.org/issue?@action=redirect&bpo=23338

   (29) https://bugs.python.org/issue?@action=redirect&bpo=15582

   (30) https://bugs.python.org/issue?@action=redirect&bpo=2175

   (31) https://bugs.python.org/issue?@action=redirect&bpo=16840

   (32) https://bugs.python.org/issue?@action=redirect&bpo=23834

   (33) https://bugs.python.org/issue?@action=redirect&bpo=23618

   (34) https://bugs.python.org/issue?@action=redirect&bpo=21526

   (35) https://bugs.python.org/issue?@action=redirect&bpo=23836

   (36) https://bugs.python.org/issue?@action=redirect&bpo=23838

   (37) https://bugs.python.org/issue?@action=redirect&bpo=10395

   (38) https://bugs.python.org/issue?@action=redirect&bpo=23611

   (39) https://bugs.python.org/issue?@action=redirect&bpo=13583

   (40) https://bugs.python.org/issue?@action=redirect&bpo=18473

   (41) https://bugs.python.org/issue?@action=redirect&bpo=23485

   (42) https://peps.python.org/pep-0475/

   (43) https://bugs.python.org/issue?@action=redirect&bpo=23752

   (44) https://bugs.python.org/issue?@action=redirect&bpo=23704

   (45) https://bugs.python.org/issue?@action=redirect&bpo=23171

   (46) https://bugs.python.org/issue?@action=redirect&bpo=23745

   (47) https://bugs.python.org/issue?@action=redirect&bpo=22117

   (48) https://bugs.python.org/issue?@action=redirect&bpo=23310


File: python.info,  Node: Construção<95>,  Next: Testes<87>,  Prev: Biblioteca<179>,  Up: Python 3 5 0 alpha 4

1.23.117.3 Construção
.....................

   - bpo-23817(1): FreeBSD now uses “1.0” in the SOVERSION as other
     operating systems, instead of just “1”.

   - bpo-23501(2): Argument Clinic now generates code into separate
     files by default.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23817

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23501


File: python.info,  Node: Testes<87>,  Next: Ferramentas/Demos<52>,  Prev: Construção<95>,  Up: Python 3 5 0 alpha 4

1.23.117.4 Testes
.................

   - bpo-23799(1): Added test.support.start_threads() for running and
     cleaning up multiple threads.

   - bpo-22390(2): test.regrtest now emits a warning if temporary files
     or directories are left after running a test.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23799

   (2) https://bugs.python.org/issue?@action=redirect&bpo=22390


File: python.info,  Node: Ferramentas/Demos<52>,  Next: API C<76>,  Prev: Testes<87>,  Up: Python 3 5 0 alpha 4

1.23.117.5 Ferramentas/Demos
............................

   - bpo-18128(1): pygettext now uses standard +NNNN format in the
     POT-Creation-Date header.

   - bpo-23935(2): Argument Clinic’s understanding of format units
     accepting bytes, bytearrays, and buffers is now consistent with
     both the documentation and the implementation.

   - bpo-23944(3): Argument Clinic now wraps long impl prototypes at
     column 78.

   - bpo-20586(4): Argument Clinic now ensures that functions without
     docstrings have signatures.

   - bpo-23492(5): Argument Clinic now generates argument parsing code
     with PyArg_Parse instead of PyArg_ParseTuple if possible.

   - bpo-23500(6): Argument Clinic is now smarter about generating the
     “#ifndef” (empty) definition of the methoddef macro: it’s only
     generated once, even if Argument Clinic processes the same symbol
     multiple times, and it’s emitted at the end of all processing
     rather than immediately after the first use.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18128

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23935

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23944

   (4) https://bugs.python.org/issue?@action=redirect&bpo=20586

   (5) https://bugs.python.org/issue?@action=redirect&bpo=23492

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23500


File: python.info,  Node: API C<76>,  Prev: Ferramentas/Demos<52>,  Up: Python 3 5 0 alpha 4

1.23.117.6 API C
................

   - bpo-23998(1): PyImport_ReInitLock() now checks for lock allocation
     error

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23998


File: python.info,  Node: Python 3 5 0 alpha 3,  Next: Python 3 5 0 alpha 2,  Prev: Python 3 5 0 alpha 4,  Up: Changelog

1.23.118 Python 3.5.0 alpha 3
-----------------------------

'Data de lançamento: 2015-03-28'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<178>.
* Biblioteca: Biblioteca<180>.
* Construção: Construção<96>.
* Testes: Testes<88>.
* Ferramentas/Demos: Ferramentas/Demos<53>.


File: python.info,  Node: Núcleo e embutidos<178>,  Next: Biblioteca<180>,  Up: Python 3 5 0 alpha 3

1.23.118.1 Núcleo e embutidos
.............................

   - bpo-23573(1): Increased performance of string search operations
     (str.find, str.index, str.count, the in operator, str.split,
     str.partition) with arguments of different kinds (UCS1, UCS2,
     UCS4).

   - bpo-23753(2): Python doesn’t support anymore platforms without
     stat() or fstat(), these functions are always required.

   - bpo-23681(3): The -b option now affects comparisons of bytes with
     int.

   - bpo-23632(4): Memoryviews now allow tuple indexing (including for
     multi-dimensional memoryviews).

   - bpo-23192(5): Fixed generator lambdas.  Patch by Bruno Cauet.

   - bpo-23629(6): Fix the default __sizeof__ implementation for
     variable-sized objects.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23573

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23753

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23681

   (4) https://bugs.python.org/issue?@action=redirect&bpo=23632

   (5) https://bugs.python.org/issue?@action=redirect&bpo=23192

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23629


File: python.info,  Node: Biblioteca<180>,  Next: Construção<96>,  Prev: Núcleo e embutidos<178>,  Up: Python 3 5 0 alpha 3

1.23.118.2 Biblioteca
.....................

   - bpo-14260(1): The groupindex attribute of regular expression
     pattern object now is non-modifiable mapping.

   - bpo-23792(2): Ignore KeyboardInterrupt when the pydoc pager is
     active.  This mimics the behavior of the standard unix pagers, and
     prevents pipepager from shutting down while the pager itself is
     still running.

   - bpo-23775(3): pprint() of OrderedDict now outputs the same
     representation as repr().

   - bpo-23765(4): Removed IsBadStringPtr calls in ctypes

   - bpo-22364(5): Improved some re error messages using regex for
     hints.

   - bpo-23742(6): ntpath.expandvars() no longer loses unbalanced single
     quotes.

   - bpo-21717(7): The zipfile.ZipFile.open function now supports ‘x’
     (exclusive creation) mode.

   - bpo-21802(8): The reader in BufferedRWPair now is closed even when
     closing writer failed in BufferedRWPair.close().

   - bpo-23622(9): Unknown escapes in regular expressions that consist
     of ‘'\'’ and ASCII letter now raise a deprecation warning and will
     be forbidden in Python 3.6.

   - bpo-23671(10): string.Template now allows specifying the “self”
     parameter as a keyword argument.  string.Formatter now allows
     specifying the “self” and the “format_string” parameters as keyword
     arguments.

   - bpo-23502(11): The pprint module now supports mapping proxies.

   - bpo-17530(12): pprint now wraps long bytes objects and bytearrays.

   - bpo-22687(13): Fixed some corner cases in breaking words in
     tetxtwrap.  Got rid of quadratic complexity in breaking long words.

   - bpo-4727(14): The copy module now uses pickle protocol 4 (PEP 3154)
     and supports copying of instances of classes whose __new__ method
     takes keyword-only arguments.

   - bpo-23491(15): Added a zipapp module to support creating executable
     zip file archives of Python code.  Registered “.pyz” and “.pyzw”
     extensions on Windows for these archives (PEP 441).

   - bpo-23657(16): Avoid explicit checks for str in zipapp, adding
     support for pathlib.Path objects as arguments.

   - bpo-23688(17): Added support of arbitrary bytes-like objects and
     avoided unnecessary copying of memoryview in gzip.GzipFile.write().
     Original patch by Wolfgang Maier.

   - bpo-23252(18): Added support for writing ZIP files to unseekable
     streams.

   - bpo-23647(19): Increase imaplib’s MAXLINE to accommodate modern
     mailbox sizes.

   - bpo-23539(20): If body is None, http.client.HTTPConnection.request
     now sets Content-Length to 0 for PUT, POST, and PATCH headers to
     avoid 411 errors from some web servers.

   - bpo-22351(21): The nntplib.NNTP constructor no longer leaves the
     connection and socket open until the garbage collector cleans them
     up.  Patch by Martin Panter.

   - bpo-23704(22): collections.deque() objects now support methods for
     index(), insert(), and copy().  This allows deques to be registered
     as a MutableSequence and it improves their substitutability for
     lists.

   - bpo-23715(23): *note signal.sigwaitinfo(): dd3. and *note
     signal.sigtimedwait(): dd2. are now retried when interrupted by a
     signal not in the 'sigset' parameter, if the signal handler does
     not raise an exception.  signal.sigtimedwait() recomputes the
     timeout with a monotonic clock when it is retried.

   - bpo-23001(24): Few functions in modules mmap, ossaudiodev, socket,
     ssl, and codecs, that accepted only read-only bytes-like object now
     accept writable bytes-like object too.

   - bpo-23646(25): If time.sleep() is interrupted by a signal, the
     sleep is now retried with the recomputed delay, except if the
     signal handler raises an exception (PEP 475).

   - bpo-23136(26): _strptime now uniformly handles all days in week 0,
     including Dec 30 of previous year.  Based on patch by Jim Carroll.

   - bpo-23700(27): Iterator of NamedTemporaryFile now keeps a reference
     to NamedTemporaryFile instance.  Patch by Bohuslav Kabrda.

   - bpo-22903(28): The fake test case created by unittest.loader when
     it fails importing a test module is now picklable.

   - bpo-22181(29): On Linux, os.urandom() now uses the new getrandom()
     syscall if available, syscall introduced in the Linux kernel 3.17.
     It is more reliable and more secure, because it avoids the need of
     a file descriptor and waits until the kernel has enough entropy.

   - bpo-2211(30): Updated the implementation of the http.cookies.Morsel
     class.  Setting attributes key, value and coded_value directly now
     is deprecated.  update() and setdefault() now transform and check
     keys.  Comparing for equality now takes into account attributes
     key, value and coded_value.  copy() now returns a Morsel, not a
     dict.  repr() now contains all attributes.  Optimized checking keys
     and quoting values.  Added new tests.  Original patch by Demian
     Brecht.

   - bpo-18983(31): Allow selection of output units in timeit.  Patch by
     Julian Gindi.

   - bpo-23631(32): Fix traceback.format_list when a traceback has been
     mutated.

   - bpo-23568(33): Add rdivmod support to MagicMock() objects.  Patch
     by Håkan Lövdahl.

   - bpo-2052(34): Add charset parameter to HtmlDiff.make_file().

   - bpo-23668(35): Support os.truncate and os.ftruncate on Windows.

   - bpo-23138(36): Fixed parsing cookies with absent keys or values in
     cookiejar.  Patch by Demian Brecht.

   - bpo-23051(37): multiprocessing.Pool methods imap() and
     imap_unordered() now handle exceptions raised by an iterator.
     Patch by Alon Diamant and Davin Potts.

   - bpo-23581(38): Add matmul support to MagicMock.  Patch by Håkan
     Lövdahl.

   - bpo-23566(39): enable(), register(), dump_traceback() and
     dump_traceback_later() functions of faulthandler now accept file
     descriptors.  Patch by Wei Wu.

   - bpo-22928(40): Disabled HTTP header injections in http.client.
     Original patch by Demian Brecht.

   - bpo-23615(41): Modules bz2, tarfile and tokenize now can be
     reloaded with imp.reload().  Patch by Thomas Kluyver.

   - bpo-23605(42): os.walk() now calls os.scandir() instead of
     os.listdir().  The usage of os.scandir() reduces the number of
     calls to os.stat().  Initial patch written by Ben Hoyt.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14260

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23792

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23775

   (4) https://bugs.python.org/issue?@action=redirect&bpo=23765

   (5) https://bugs.python.org/issue?@action=redirect&bpo=22364

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23742

   (7) https://bugs.python.org/issue?@action=redirect&bpo=21717

   (8) https://bugs.python.org/issue?@action=redirect&bpo=21802

   (9) https://bugs.python.org/issue?@action=redirect&bpo=23622

   (10) https://bugs.python.org/issue?@action=redirect&bpo=23671

   (11) https://bugs.python.org/issue?@action=redirect&bpo=23502

   (12) https://bugs.python.org/issue?@action=redirect&bpo=17530

   (13) https://bugs.python.org/issue?@action=redirect&bpo=22687

   (14) https://bugs.python.org/issue?@action=redirect&bpo=4727

   (15) https://bugs.python.org/issue?@action=redirect&bpo=23491

   (16) https://bugs.python.org/issue?@action=redirect&bpo=23657

   (17) https://bugs.python.org/issue?@action=redirect&bpo=23688

   (18) https://bugs.python.org/issue?@action=redirect&bpo=23252

   (19) https://bugs.python.org/issue?@action=redirect&bpo=23647

   (20) https://bugs.python.org/issue?@action=redirect&bpo=23539

   (21) https://bugs.python.org/issue?@action=redirect&bpo=22351

   (22) https://bugs.python.org/issue?@action=redirect&bpo=23704

   (23) https://bugs.python.org/issue?@action=redirect&bpo=23715

   (24) https://bugs.python.org/issue?@action=redirect&bpo=23001

   (25) https://bugs.python.org/issue?@action=redirect&bpo=23646

   (26) https://bugs.python.org/issue?@action=redirect&bpo=23136

   (27) https://bugs.python.org/issue?@action=redirect&bpo=23700

   (28) https://bugs.python.org/issue?@action=redirect&bpo=22903

   (29) https://bugs.python.org/issue?@action=redirect&bpo=22181

   (30) https://bugs.python.org/issue?@action=redirect&bpo=2211

   (31) https://bugs.python.org/issue?@action=redirect&bpo=18983

   (32) https://bugs.python.org/issue?@action=redirect&bpo=23631

   (33) https://bugs.python.org/issue?@action=redirect&bpo=23568

   (34) https://bugs.python.org/issue?@action=redirect&bpo=2052

   (35) https://bugs.python.org/issue?@action=redirect&bpo=23668

   (36) https://bugs.python.org/issue?@action=redirect&bpo=23138

   (37) https://bugs.python.org/issue?@action=redirect&bpo=23051

   (38) https://bugs.python.org/issue?@action=redirect&bpo=23581

   (39) https://bugs.python.org/issue?@action=redirect&bpo=23566

   (40) https://bugs.python.org/issue?@action=redirect&bpo=22928

   (41) https://bugs.python.org/issue?@action=redirect&bpo=23615

   (42) https://bugs.python.org/issue?@action=redirect&bpo=23605


File: python.info,  Node: Construção<96>,  Next: Testes<88>,  Prev: Biblioteca<180>,  Up: Python 3 5 0 alpha 3

1.23.118.3 Construção
.....................

   - bpo-23585(1): make patchcheck will ensure the interpreter is built.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23585


File: python.info,  Node: Testes<88>,  Next: Ferramentas/Demos<53>,  Prev: Construção<96>,  Up: Python 3 5 0 alpha 3

1.23.118.4 Testes
.................

   - bpo-23583(1): Added tests for standard IO streams in IDLE.

   - bpo-22289(2): Prevent test_urllib2net failures due to ftp
     connection timeout.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23583

   (2) https://bugs.python.org/issue?@action=redirect&bpo=22289


File: python.info,  Node: Ferramentas/Demos<53>,  Prev: Testes<88>,  Up: Python 3 5 0 alpha 3

1.23.118.5 Ferramentas/Demos
............................

   - bpo-22826(1): The result of open() in Tools/freeze/bkfile.py is now
     better compatible with regular files (in particular it now supports
     the context management protocol).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22826


File: python.info,  Node: Python 3 5 0 alpha 2,  Next: Python 3 5 0 alpha 1,  Prev: Python 3 5 0 alpha 3,  Up: Changelog

1.23.119 Python 3.5.0 alpha 2
-----------------------------

'Data de lançamento: 2015-03-09'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<179>.
* Biblioteca: Biblioteca<181>.
* Construção: Construção<97>.
* API C: API C<77>.
* Windows: Windows<79>.


File: python.info,  Node: Núcleo e embutidos<179>,  Next: Biblioteca<181>,  Up: Python 3 5 0 alpha 2

1.23.119.1 Núcleo e embutidos
.............................

   - bpo-23571(1): PyObject_Call() and PyCFunction_Call() now raise a
     SystemError if a function returns a result and raises an exception.
     The SystemError is chained to the previous exception.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23571


File: python.info,  Node: Biblioteca<181>,  Next: Construção<97>,  Prev: Núcleo e embutidos<179>,  Up: Python 3 5 0 alpha 2

1.23.119.2 Biblioteca
.....................

   - bpo-22524(1): New os.scandir() function, part of the PEP 471(2):
     “os.scandir() function – a better and faster directory iterator”.
     Patch written by Ben Hoyt.

   - bpo-23103(3): Reduced the memory consumption of IPv4Address and
     IPv6Address.

   - bpo-21793(4): BaseHTTPRequestHandler again logs response code as
     numeric, not as stringified enum.  Patch by Demian Brecht.

   - bpo-23476(5): In the ssl module, enable OpenSSL’s
     X509_V_FLAG_TRUSTED_FIRST flag on certificate stores when it is
     available.

   - bpo-23576(6): Avoid stalling in SSL reads when EOF has been reached
     in the SSL layer but the underlying connection hasn’t been closed.

   - bpo-23504(7): Added an __all__ to the types module.

   - bpo-23563(8): Optimized utility functions in urllib.parse.

   - bpo-7830(9): Flatten nested functools.partial.

   - bpo-20204(10): Added the __module__ attribute to _tkinter classes.

   - bpo-19980(11): Improved help() for non-recognized strings.
     help(‘’) now shows the help on str.  help(‘help’) now shows the
     help on help().  Original patch by Mark Lawrence.

   - bpo-23521(12): Corrected pure python implementation of timedelta
     division.  Eliminated OverflowError from ‘timedelta * float’ for
     some floats; Corrected rounding in timedelta true division.

   - bpo-21619(13): Popen objects no longer leave a zombie after exit in
     the with statement if the pipe was broken.  Patch by Martin Panter.

   - bpo-22936(14): Make it possible to show local variables in
     tracebacks for both the traceback module and unittest.

   - bpo-15955(15): Add an option to limit the output size in
     bz2.decompress().  Patch by Nikolaus Rath.

   - bpo-6639(16): Module-level turtle functions no longer raise
     TclError after closing the window.

   - bpo-814253(17): Group references and conditional group references
     now work in lookbehind assertions in regular expressions.  (See
     also: bpo-9179(18))

   - bpo-23215(19): Multibyte codecs with custom error handlers that
     ignores errors consumed too much memory and raised SystemError or
     MemoryError.  Original patch by Aleksi Torhamo.

   - bpo-5700(20): io.FileIO() called flush() after closing the file.
     flush() was not called in close() if closefd=False.

   - bpo-23374(21): Fixed pydoc failure with non-ASCII files when stdout
     encoding differs from file system encoding (e.g.  on Mac OS).

   - bpo-23481(22): Remove RC4 from the SSL module’s default cipher
     list.

   - bpo-21548(23): Fix pydoc.synopsis() and pydoc.apropos() on modules
     with empty docstrings.

   - bpo-22885(24): Fixed arbitrary code execution vulnerability in the
     dbm.dumb module.  Original patch by Claudiu Popa.

   - bpo-23239(25): ssl.match_hostname() now supports matching of IP
     addresses.

   - bpo-23146(26): Fix mishandling of absolute Windows paths with
     forward slashes in pathlib.

   - bpo-23096(27): Pickle representation of floats with protocol 0 now
     is the same for both Python and C implementations.

   - bpo-19105(28): pprint now more efficiently uses free space at the
     right.

   - bpo-14910(29): Add allow_abbrev parameter to
     argparse.ArgumentParser.  Patch by Jonathan Paugh, Steven Bethard,
     paul j3 and Daniel Eriksson.

   - bpo-21717(30): tarfile.open() now supports ‘x’ (exclusive creation)
     mode.

   - bpo-23344(31): marshal.dumps() is now 20-25% faster on average.

   - bpo-20416(32): marshal.dumps() with protocols 3 and 4 is now 40-50%
     faster on average.

   - bpo-23421(33): Fixed compression in tarfile CLI. Patch by wdv4758h.

   - bpo-23367(34): Fix possible overflows in the unicodedata module.

   - bpo-23361(35): Fix possible overflow in Windows subprocess creation
     code.

   - logging.handlers.QueueListener now takes a respect_handler_level
     keyword argument which, if set to True, will pass messages to
     handlers taking handler levels into account.

   - bpo-19705(36): turtledemo now has a visual sorting algorithm demo.
     Original patch from Jason Yeo.

   - bpo-23801(37): Fix issue where cgi.FieldStorage did not always
     ignore the entire preamble to a multipart body.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22524

   (2) https://peps.python.org/pep-0471/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23103

   (4) https://bugs.python.org/issue?@action=redirect&bpo=21793

   (5) https://bugs.python.org/issue?@action=redirect&bpo=23476

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23576

   (7) https://bugs.python.org/issue?@action=redirect&bpo=23504

   (8) https://bugs.python.org/issue?@action=redirect&bpo=23563

   (9) https://bugs.python.org/issue?@action=redirect&bpo=7830

   (10) https://bugs.python.org/issue?@action=redirect&bpo=20204

   (11) https://bugs.python.org/issue?@action=redirect&bpo=19980

   (12) https://bugs.python.org/issue?@action=redirect&bpo=23521

   (13) https://bugs.python.org/issue?@action=redirect&bpo=21619

   (14) https://bugs.python.org/issue?@action=redirect&bpo=22936

   (15) https://bugs.python.org/issue?@action=redirect&bpo=15955

   (16) https://bugs.python.org/issue?@action=redirect&bpo=6639

   (17) https://bugs.python.org/issue?@action=redirect&bpo=814253

   (18) https://bugs.python.org/issue?@action=redirect&bpo=9179

   (19) https://bugs.python.org/issue?@action=redirect&bpo=23215

   (20) https://bugs.python.org/issue?@action=redirect&bpo=5700

   (21) https://bugs.python.org/issue?@action=redirect&bpo=23374

   (22) https://bugs.python.org/issue?@action=redirect&bpo=23481

   (23) https://bugs.python.org/issue?@action=redirect&bpo=21548

   (24) https://bugs.python.org/issue?@action=redirect&bpo=22885

   (25) https://bugs.python.org/issue?@action=redirect&bpo=23239

   (26) https://bugs.python.org/issue?@action=redirect&bpo=23146

   (27) https://bugs.python.org/issue?@action=redirect&bpo=23096

   (28) https://bugs.python.org/issue?@action=redirect&bpo=19105

   (29) https://bugs.python.org/issue?@action=redirect&bpo=14910

   (30) https://bugs.python.org/issue?@action=redirect&bpo=21717

   (31) https://bugs.python.org/issue?@action=redirect&bpo=23344

   (32) https://bugs.python.org/issue?@action=redirect&bpo=20416

   (33) https://bugs.python.org/issue?@action=redirect&bpo=23421

   (34) https://bugs.python.org/issue?@action=redirect&bpo=23367

   (35) https://bugs.python.org/issue?@action=redirect&bpo=23361

   (36) https://bugs.python.org/issue?@action=redirect&bpo=19705

   (37) https://bugs.python.org/issue?@action=redirect&bpo=23801


File: python.info,  Node: Construção<97>,  Next: API C<77>,  Prev: Biblioteca<181>,  Up: Python 3 5 0 alpha 2

1.23.119.3 Construção
.....................

   - bpo-23445(1): pydebug builds now use “gcc -Og” where possible, to
     make the resulting executable faster.

   - bpo-23686(2): Update OS X 10.5 installer build to use OpenSSL
     1.0.2a.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23445

   (2) https://bugs.python.org/issue?@action=redirect&bpo=23686


File: python.info,  Node: API C<77>,  Next: Windows<79>,  Prev: Construção<97>,  Up: Python 3 5 0 alpha 2

1.23.119.4 API C
................

   - bpo-20204(1): Deprecation warning is now raised for builtin types
     without the __module__ attribute.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20204


File: python.info,  Node: Windows<79>,  Prev: API C<77>,  Up: Python 3 5 0 alpha 2

1.23.119.5 Windows
..................

   - bpo-23465(1): Implement PEP 486(2) - Make the Python Launcher aware
     of virtual environments.  Patch by Paul Moore.

   - bpo-23437(3): Make user scripts directory versioned on Windows.
     Patch by Paul Moore.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23465

   (2) https://peps.python.org/pep-0486/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=23437


File: python.info,  Node: Python 3 5 0 alpha 1,  Prev: Python 3 5 0 alpha 2,  Up: Changelog

1.23.120 Python 3.5.0 alpha 1
-----------------------------

'Data de lançamento: 2015-02-08'

* Menu:

* Núcleo e embutidos: Núcleo e embutidos<180>.
* Biblioteca: Biblioteca<182>.
* IDLE: IDLE<67>.
* Construção: Construção<98>.
* API C: API C<78>.
* Documentação: Documentação<81>.
* Testes: Testes<89>.
* Ferramentas/Demos: Ferramentas/Demos<54>.
* Windows: Windows<80>.


File: python.info,  Node: Núcleo e embutidos<180>,  Next: Biblioteca<182>,  Up: Python 3 5 0 alpha 1

1.23.120.1 Núcleo e embutidos
.............................

   - bpo-23285(1): PEP 475 - EINTR handling.

   - bpo-22735(2): Fix many edge cases (including crashes) involving
     custom mro() implementations.

   - bpo-22896(3): Avoid using PyObject_AsCharBuffer(),
     PyObject_AsReadBuffer() and PyObject_AsWriteBuffer().

   - bpo-21295(4): Revert some changes (bpo-16795(5)) to AST line
     numbers and column offsets that constituted a regression.

   - bpo-22986(6): Allow changing an object’s __class__ between a
     dynamic type and static type in some cases.

   - bpo-15859(7): PyUnicode_EncodeFSDefault(), PyUnicode_EncodeMBCS()
     and PyUnicode_EncodeCodePage() now raise an exception if the object
     is not a Unicode object.  For PyUnicode_EncodeFSDefault(), it was
     already the case on platforms other than Windows.  Patch written by
     Campbell Barton.

   - bpo-21408(8): The default __ne__() now returns NotImplemented if
     __eq__() returned NotImplemented.  Original patch by Martin Panter.

   - bpo-23321(9): Fixed a crash in str.decode() when error handler
     returned replacement string longer than malformed input data.

   - bpo-22286(10): The “backslashreplace” error handlers now works with
     decoding and translating.

   - bpo-23253(11): Delay-load ShellExecute[AW] in os.startfile for
     reduced startup overhead on Windows.

   - bpo-22038(12): pyatomic.h now uses stdatomic.h or GCC built-in
     functions for atomic memory access if available.  Patch written by
     Vitor de Lima and Gustavo Temple.

   - bpo-20284(13): %-interpolation (aka printf) formatting added for
     bytes and bytearray.

   - bpo-23048(14): Fix jumping out of an infinite while loop in the
     pdb.

   - bpo-20335(15): bytes constructor now raises TypeError when encoding
     or errors is specified with non-string argument.  Based on patch by
     Renaud Blanch.

   - bpo-22834(16): If the current working directory ends up being set
     to a non-existent directory then import will no longer raise
     FileNotFoundError.

   - bpo-22869(17): Move the interpreter startup & shutdown code to a
     new dedicated pylifecycle.c module

   - bpo-22847(18): Improve method cache efficiency.

   - bpo-22335(19): Fix crash when trying to enlarge a bytearray to
     0x7fffffff bytes on a 32-bit platform.

   - bpo-22653(20): Fix an assertion failure in debug mode when doing a
     reentrant dict insertion in debug mode.

   - bpo-22643(21): Fix integer overflow in Unicode case operations
     (upper, lower, title, swapcase, casefold).

   - bpo-17636(22): Circular imports involving relative imports are now
     supported.

   - bpo-22604(23): Fix assertion error in debug mode when dividing a
     complex number by (nan+0j).

   - bpo-21052(24): Do not raise ImportWarning when sys.path_hooks or
     sys.meta_path are set to None.

   - bpo-16518(25): Use ‘bytes-like object required’ in error messages
     that previously used the far more cryptic “‘x’ does not support the
     buffer protocol.

   - bpo-22470(26): Fixed integer overflow issues in “backslashreplace”,
     “xmlcharrefreplace”, and “surrogatepass” error handlers.

   - bpo-22540(27): speed up ‘PyObject_IsInstance’ and
     ‘PyObject_IsSubclass’ in the common case that the second argument
     has metaclass ‘type’.

   - bpo-18711(28): Add a new ‘PyErr_FormatV’ function, similar to
     ‘PyErr_Format’ but accepting a ‘va_list’ argument.

   - bpo-22520(29): Fix overflow checking when generating the repr of a
     unicode object.

   - bpo-22519(30): Fix overflow checking in PyBytes_Repr.

   - bpo-22518(31): Fix integer overflow issues in latin-1 encoding.

   - bpo-16324(32): _charset parameter of MIMEText now also accepts
     email.charset.Charset instances.  Initial patch by Claude Paroz.

   - bpo-1764286(33): Fix inspect.getsource() to support decorated
     functions.  Patch by Claudiu Popa.

   - bpo-18554(34): os.__all__ includes posix functions.

   - bpo-21391(35): Use os.path.abspath in the shutil module.

   - bpo-11471(36): avoid generating a JUMP_FORWARD instruction at the
     end of an if-block if there is no else-clause.  Original patch by
     Eugene Toder.

   - bpo-22215(37): Now ValueError is raised instead of TypeError when
     str or bytes argument contains not permitted null character or
     byte.

   - bpo-22258(38): Fix the internal function set_inheritable() on
     Illumos.  This platform exposes the function ‘ioctl(FIOCLEX)’, but
     calling it fails with errno is ENOTTY: “Inappropriate ioctl for
     device”.  set_inheritable() now falls back to the slower ‘fcntl()’
     (‘F_GETFD’ and then ‘F_SETFD’).

   - bpo-21389(39): Displaying the __qualname__ of the underlying
     function in the repr of a bound method.

   - bpo-22206(40): Using pthread, PyThread_create_key() now sets errno
     to ENOMEM and returns -1 (error) on integer overflow.

   - bpo-20184(41): Argument Clinic based signature introspection added
     for 30 of the builtin functions.

   - bpo-22116(42): C functions and methods (of the
     ‘builtin_function_or_method’ type) can now be weakref’ed.  Patch by
     Wei Wu.

   - bpo-22077(43): Improve index error messages for bytearrays, bytes,
     lists, and tuples by adding ‘or slices’.  Added ‘, not <typename>’
     for bytearrays.  Original patch by Claudiu Popa.

   - bpo-20179(44): Apply Argument Clinic to bytes and bytearray.  Patch
     by Tal Einat.

   - bpo-22082(45): Clear interned strings in slotdefs.

   - Upgrade Unicode database to Unicode 7.0.0.

   - bpo-21897(46): Fix a crash with the f_locals attribute with closure
     variables when frame.clear() has been called.

   - bpo-21205(47): Add a new ‘__qualname__’ attribute to generator, the
     qualified name, and use it in the representation of a generator
     (‘repr(gen)’).  The default name of the generator (‘__name__’
     attribute) is now get from the function instead of the code.  Use
     ‘gen.gi_code.co_name’ to get the name of the code.

   - bpo-21669(48): With the aid of heuristics in SyntaxError.__init__,
     the parser now attempts to generate more meaningful (or at least
     more search engine friendly) error messages when “exec” and “print”
     are used as statements.

   - bpo-21642(49): In the conditional if-else expression, allow an
     integer written with no space between itself and the ‘else’ keyword
     (e.g.  ‘True if 42else False’) to be valid syntax.

   - bpo-21523(50): Fix over-pessimistic computation of the stack effect
     of some opcodes in the compiler.  This also fixes a quadratic
     compilation time issue noticeable when compiling code with a large
     number of “and” and “or” operators.

   - bpo-21418(51): Fix a crash in the builtin function super() when
     called without argument and without current frame (ex: embedded
     Python).

   - bpo-21425(52): Fix flushing of standard streams in the interactive
     interpreter.

   - bpo-21435(53): In rare cases, when running finalizers on objects in
     cyclic trash a bad pointer dereference could occur due to a subtle
     flaw in internal iteration logic.

   - bpo-21377(54): PyBytes_Concat() now tries to concatenate in-place
     when the first argument has a reference count of 1.  Patch by
     Nikolaus Rath.

   - bpo-20355(55): -W command line options now have higher priority
     than the PYTHONWARNINGS environment variable.  Patch by Arfrever.

   - bpo-21274(56): Define PATH_MAX for GNU/Hurd in Python/pythonrun.c.

   - bpo-20904(57): Support setting FPU precision on m68k.

   - bpo-21209(58): Fix sending tuples to custom generator objects with
     the yield from syntax.

   - bpo-21193(59): pow(a, b, c) now raises ValueError rather than
     TypeError when b is negative.  Patch by Josh Rosenberg.

   - bpo-21176(60): PEP 465: Add the ‘@’ operator for matrix
     multiplication.

   - bpo-21134(61): Fix segfault when str is called on an uninitialized
     UnicodeEncodeError, UnicodeDecodeError, or UnicodeTranslateError
     object.

   - bpo-19537(62): Fix PyUnicode_DATA() alignment under m68k.  Patch by
     Andreas Schwab.

   - bpo-20929(63): Add a type cast to avoid shifting a negative number.

   - bpo-20731(64): Properly position in source code files even if they
     are opened in text mode.  Patch by Serhiy Storchaka.

   - bpo-20637(65): Key-sharing now also works for instance dictionaries
     of subclasses.  Patch by Peter Ingebretson.

   - bpo-8297(66): Attributes missing from modules now include the
     module name in the error text.  Original patch by ysj.ray.

   - bpo-19995(67): %c, %o, %x, and %X now raise TypeError on
     non-integer input.

   - bpo-19655(68): The ASDL parser - used by the build process to
     generate code for managing the Python AST in C - was rewritten.
     The new parser is self contained and does not require to carry long
     the spark.py parser-generator library; spark.py was removed from
     the source base.

   - bpo-12546(69): Allow ‘\x00’ to be used as a fill character when
     using str, int, float, and complex __format__ methods.

   - bpo-20480(70): Add ipaddress.reverse_pointer.  Patch by Leon Weber.

   - bpo-13598(71): Modify string.Formatter to support auto-numbering of
     replacement fields.  It now matches the behavior of str.format() in
     this regard.  Patches by Phil Elson and Ramchandra Apte.

   - bpo-8931(72): Make alternate formatting (‘#’) for type ‘c’ raise an
     exception.  In versions prior to 3.5, ‘#’ with ‘c’ had no effect.
     Now specifying it is an error.  Patch by Torsten Landschoff.

   - bpo-23165(73): Perform overflow checks before allocating memory in
     the _Py_char2wchar function.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23285

   (2) https://bugs.python.org/issue?@action=redirect&bpo=22735

   (3) https://bugs.python.org/issue?@action=redirect&bpo=22896

   (4) https://bugs.python.org/issue?@action=redirect&bpo=21295

   (5) https://bugs.python.org/issue?@action=redirect&bpo=16795

   (6) https://bugs.python.org/issue?@action=redirect&bpo=22986

   (7) https://bugs.python.org/issue?@action=redirect&bpo=15859

   (8) https://bugs.python.org/issue?@action=redirect&bpo=21408

   (9) https://bugs.python.org/issue?@action=redirect&bpo=23321

   (10) https://bugs.python.org/issue?@action=redirect&bpo=22286

   (11) https://bugs.python.org/issue?@action=redirect&bpo=23253

   (12) https://bugs.python.org/issue?@action=redirect&bpo=22038

   (13) https://bugs.python.org/issue?@action=redirect&bpo=20284

   (14) https://bugs.python.org/issue?@action=redirect&bpo=23048

   (15) https://bugs.python.org/issue?@action=redirect&bpo=20335

   (16) https://bugs.python.org/issue?@action=redirect&bpo=22834

   (17) https://bugs.python.org/issue?@action=redirect&bpo=22869

   (18) https://bugs.python.org/issue?@action=redirect&bpo=22847

   (19) https://bugs.python.org/issue?@action=redirect&bpo=22335

   (20) https://bugs.python.org/issue?@action=redirect&bpo=22653

   (21) https://bugs.python.org/issue?@action=redirect&bpo=22643

   (22) https://bugs.python.org/issue?@action=redirect&bpo=17636

   (23) https://bugs.python.org/issue?@action=redirect&bpo=22604

   (24) https://bugs.python.org/issue?@action=redirect&bpo=21052

   (25) https://bugs.python.org/issue?@action=redirect&bpo=16518

   (26) https://bugs.python.org/issue?@action=redirect&bpo=22470

   (27) https://bugs.python.org/issue?@action=redirect&bpo=22540

   (28) https://bugs.python.org/issue?@action=redirect&bpo=18711

   (29) https://bugs.python.org/issue?@action=redirect&bpo=22520

   (30) https://bugs.python.org/issue?@action=redirect&bpo=22519

   (31) https://bugs.python.org/issue?@action=redirect&bpo=22518

   (32) https://bugs.python.org/issue?@action=redirect&bpo=16324

   (33) https://bugs.python.org/issue?@action=redirect&bpo=1764286

   (34) https://bugs.python.org/issue?@action=redirect&bpo=18554

   (35) https://bugs.python.org/issue?@action=redirect&bpo=21391

   (36) https://bugs.python.org/issue?@action=redirect&bpo=11471

   (37) https://bugs.python.org/issue?@action=redirect&bpo=22215

   (38) https://bugs.python.org/issue?@action=redirect&bpo=22258

   (39) https://bugs.python.org/issue?@action=redirect&bpo=21389

   (40) https://bugs.python.org/issue?@action=redirect&bpo=22206

   (41) https://bugs.python.org/issue?@action=redirect&bpo=20184

   (42) https://bugs.python.org/issue?@action=redirect&bpo=22116

   (43) https://bugs.python.org/issue?@action=redirect&bpo=22077

   (44) https://bugs.python.org/issue?@action=redirect&bpo=20179

   (45) https://bugs.python.org/issue?@action=redirect&bpo=22082

   (46) https://bugs.python.org/issue?@action=redirect&bpo=21897

   (47) https://bugs.python.org/issue?@action=redirect&bpo=21205

   (48) https://bugs.python.org/issue?@action=redirect&bpo=21669

   (49) https://bugs.python.org/issue?@action=redirect&bpo=21642

   (50) https://bugs.python.org/issue?@action=redirect&bpo=21523

   (51) https://bugs.python.org/issue?@action=redirect&bpo=21418

   (52) https://bugs.python.org/issue?@action=redirect&bpo=21425

   (53) https://bugs.python.org/issue?@action=redirect&bpo=21435

   (54) https://bugs.python.org/issue?@action=redirect&bpo=21377

   (55) https://bugs.python.org/issue?@action=redirect&bpo=20355

   (56) https://bugs.python.org/issue?@action=redirect&bpo=21274

   (57) https://bugs.python.org/issue?@action=redirect&bpo=20904

   (58) https://bugs.python.org/issue?@action=redirect&bpo=21209

   (59) https://bugs.python.org/issue?@action=redirect&bpo=21193

   (60) https://bugs.python.org/issue?@action=redirect&bpo=21176

   (61) https://bugs.python.org/issue?@action=redirect&bpo=21134

   (62) https://bugs.python.org/issue?@action=redirect&bpo=19537

   (63) https://bugs.python.org/issue?@action=redirect&bpo=20929

   (64) https://bugs.python.org/issue?@action=redirect&bpo=20731

   (65) https://bugs.python.org/issue?@action=redirect&bpo=20637

   (66) https://bugs.python.org/issue?@action=redirect&bpo=8297

   (67) https://bugs.python.org/issue?@action=redirect&bpo=19995

   (68) https://bugs.python.org/issue?@action=redirect&bpo=19655

   (69) https://bugs.python.org/issue?@action=redirect&bpo=12546

   (70) https://bugs.python.org/issue?@action=redirect&bpo=20480

   (71) https://bugs.python.org/issue?@action=redirect&bpo=13598

   (72) https://bugs.python.org/issue?@action=redirect&bpo=8931

   (73) https://bugs.python.org/issue?@action=redirect&bpo=23165


File: python.info,  Node: Biblioteca<182>,  Next: IDLE<67>,  Prev: Núcleo e embutidos<180>,  Up: Python 3 5 0 alpha 1

1.23.120.2 Biblioteca
.....................

   - bpo-23399(1): pyvenv creates relative symlinks where possible.

   - bpo-20289(2): cgi.FieldStorage() now supports the context
     management protocol.

   - bpo-13128(3): Print response headers for CONNECT requests when
     debuglevel > 0.  Patch by Demian Brecht.

   - bpo-15381(4): Optimized io.BytesIO to make less allocations and
     copyings.

   - bpo-22818(5): Splitting on a pattern that could match an empty
     string now raises a warning.  Patterns that can only match empty
     strings are now rejected.

   - bpo-23099(6): Closing io.BytesIO with exported buffer is rejected
     now to prevent corrupting exported buffer.

   - bpo-23326(7): Removed __ne__ implementations.  Since fixing default
     __ne__ implementation in bpo-21408(8) they are redundant.

   - bpo-23363(9): Fix possible overflow in itertools.permutations.

   - bpo-23364(10): Fix possible overflow in itertools.product.

   - bpo-23366(11): Fixed possible integer overflow in
     itertools.combinations.

   - bpo-23369(12): Fixed possible integer overflow in
     _json.encode_basestring_ascii.

   - bpo-23353(13): Fix the exception handling of generators in
     PyEval_EvalFrameEx().  At entry, save or swap the exception state
     even if PyEval_EvalFrameEx() is called with throwflag=0.  At exit,
     the exception state is now always restored or swapped, not only if
     why is WHY_YIELD or WHY_RETURN. Patch co-written with Antoine
     Pitrou.

   - bpo-14099(14): Restored support of writing ZIP files to tellable
     but non-seekable streams.

   - bpo-14099(15): Writing to ZipFile and reading multiple ZipExtFiles
     is threadsafe now.

   - bpo-19361(16): JSON decoder now raises JSONDecodeError instead of
     ValueError.

   - bpo-18518(17): timeit now rejects statements which can’t be
     compiled outside a function or a loop (e.g.  “return” or “break”).

   - bpo-23094(18): Fixed readline with frames in Python implementation
     of pickle.

   - bpo-23268(19): Fixed bugs in the comparison of ipaddress classes.

   - bpo-21408(20): Removed incorrect implementations of __ne__() which
     didn’t returned NotImplemented if __eq__() returned NotImplemented.
     The default __ne__() now works correctly.

   - bpo-19996(21): ‘email.feedparser.FeedParser’ now handles
     (malformed) headers with no key rather than assuming the body has
     started.

   - bpo-20188(22): Support Application-Layer Protocol Negotiation
     (ALPN) in the ssl module.

   - bpo-23133(23): Pickling of ipaddress objects now produces more
     compact and portable representation.

   - bpo-23248(24): Update ssl error codes from latest OpenSSL git
     master.

   - bpo-23266(25): Much faster implementation of
     ipaddress.collapse_addresses() when there are many non-consecutive
     addresses.

   - bpo-23098(26): 64-bit dev_t is now supported in the os module.

   - bpo-21817(27): When an exception is raised in a task submitted to a
     ProcessPoolExecutor, the remote traceback is now displayed in the
     parent process.  Patch by Claudiu Popa.

   - bpo-15955(28): Add an option to limit output size when
     decompressing LZMA data.  Patch by Nikolaus Rath and Martin Panter.

   - bpo-23250(29): In the http.cookies module, capitalize “HttpOnly”
     and “Secure” as they are written in the standard.

   - bpo-23063(30): In the distutils’ check command, fix parsing of reST
     with code or code-block directives.

   - bpo-23209(31): selectors.BaseSelector.get_key() now raises a
     RuntimeError if the selector is closed.  And
     selectors.BaseSelector.close() now clears its internal reference to
     the selector mapping to break a reference cycle.  Initial patch
     written by Martin Richard.  (See also: bpo-23225(32))

   - bpo-17911(33): Provide a way to seed the linecache for a PEP-302
     module without actually loading the code.

   - bpo-17911(34): Provide a new object API for traceback, including
     the ability to not lookup lines at all until the traceback is
     actually rendered, without any trace of the original objects being
     kept alive.

   - bpo-19777(35): Provide a home() classmethod on Path objects.
     Contributed by Victor Salgado and Mayank Tripathi.

   - bpo-23206(36): Make ‘json.dumps(..., ensure_ascii=False)’ as fast
     as the default case of ‘ensure_ascii=True’.  Patch by Naoki Inada.

   - bpo-23185(37): Add math.inf and math.nan constants.

   - bpo-23186(38): Add ssl.SSLObject.shared_ciphers() and
     ssl.SSLSocket.shared_ciphers() to fetch the client’s list ciphers
     sent at handshake.

   - bpo-23143(39): Remove compatibility with OpenSSLs older than 0.9.8.

   - bpo-23132(40): Improve performance and introspection support of
     comparison methods created by functool.total_ordering.

   - bpo-19776(41): Add an expanduser() method on Path objects.

   - bpo-23112(42): Fix SimpleHTTPServer to correctly carry the query
     string and fragment when it redirects to add a trailing slash.

   - bpo-21793(43): Added http.HTTPStatus enums (i.e.  HTTPStatus.OK,
     HTTPStatus.NOT_FOUND). Patch by Demian Brecht.

   - bpo-23093(44): In the io, module allow more operations to work on
     detached streams.

   - bpo-23111(45): In the ftplib, make ssl.PROTOCOL_SSLv23 the default
     protocol version.

   - bpo-22585(46): On OpenBSD 5.6 and newer, os.urandom() now calls
     getentropy(), instead of reading /dev/urandom, to get pseudo-random
     bytes.

   - bpo-19104(47): pprint now produces evaluable output for wrapped
     strings.

   - bpo-23071(48): Added missing names to codecs.__all__.  Patch by
     Martin Panter.

   - bpo-22783(49): Pickling now uses the NEWOBJ opcode instead of the
     NEWOBJ_EX opcode if possible.

   - bpo-15513(50): Added a __sizeof__ implementation for pickle
     classes.

   - bpo-19858(51): pickletools.optimize() now aware of the MEMOIZE
     opcode, can produce more compact result and no longer produces
     invalid output if input data contains MEMOIZE opcodes together with
     PUT or BINPUT opcodes.

   - bpo-22095(52): Fixed HTTPConnection.set_tunnel with default port.
     The port value in the host header was set to “None”.  Patch by
     Demian Brecht.

   - bpo-23016(53): A warning no longer produces an AttributeError when
     the program is run with pythonw.exe.

   - bpo-21775(54): shutil.copytree(): fix crash when copying to VFAT.
     An exception handler assumed that OSError objects always have a
     ‘winerror’ attribute.  That is not the case, so the exception
     handler itself raised AttributeError when run on Linux (and,
     presumably, any other non-Windows OS). Patch by Greg Ward.

   - bpo-1218234(55): Fix inspect.getsource() to load updated source of
     reloaded module.  Initial patch by Berker Peksag.

   - bpo-21740(56): Support wrapped callables in doctest.  Patch by
     Claudiu Popa.

   - bpo-23009(57): Make sure selectors.EpollSelector.select() works
     when no FD is registered.

   - bpo-22959(58): In the constructor of http.client.HTTPSConnection,
     prefer the context’s check_hostname attribute over the
     'check_hostname' parameter.

   - bpo-22696(59): Add function *note sys.is_finalizing(): a99. to know
     about interpreter shutdown.

   - bpo-16043(60): Add a default limit for the amount of data
     xmlrpclib.gzip_decode will return.  This resolves CVE
     2013-1753(61).

   - bpo-14099(62): ZipFile.open() no longer reopen the underlying file.
     Objects returned by ZipFile.open() can now operate independently of
     the ZipFile even if the ZipFile was created by passing in a
     file-like object as the first argument to the constructor.

   - bpo-22966(63): Fix __pycache__ pyc file name clobber when
     pyc_compile is asked to compile a source file containing multiple
     dots in the source file name.

   - bpo-21971(64): Update turtledemo doc and add module to the index.

   - bpo-21032(65): Fixed socket leak if HTTPConnection.getresponse()
     fails.  Original patch by Martin Panter.

   - bpo-22407(66): Deprecated the use of re.LOCALE flag with str
     patterns or re.ASCII. It was newer worked.

   - bpo-22902(67): The “ip” command is now used on Linux to determine
     MAC address in uuid.getnode().  Pach by Bruno Cauet.

   - bpo-22960(68): Add a context argument to xmlrpclib.ServerProxy
     constructor.

   - bpo-22389(69): Add contextlib.redirect_stderr().

   - bpo-21356(70): Make ssl.RAND_egd() optional to support LibreSSL.
     The availability of the function is checked during the compilation.
     Patch written by Bernard Spil.

   - bpo-22915(71): SAX parser now supports files opened with file
     descriptor or bytes path.

   - bpo-22609(72): Constructors and update methods of mapping classes
     in the collections module now accept the self keyword argument.

   - bpo-22940(73): Add readline.append_history_file.

   - bpo-19676(74): Added the “namereplace” error handler.

   - bpo-22788(75): Add 'context' parameter to
     logging.handlers.HTTPHandler.

   - bpo-22921(76): Allow SSLContext to take the 'hostname' parameter
     even if OpenSSL doesn’t support SNI.

   - bpo-22894(77): TestCase.subTest() would cause the test suite to be
     stopped when in failfast mode, even in the absence of failures.

   - bpo-22796(78): HTTP cookie parsing is now stricter, in order to
     protect against potential injection attacks.

   - bpo-22370(79): Windows detection in pathlib is now more robust.

   - bpo-22841(80): Reject coroutines in asyncio add_signal_handler().
     Patch by Ludovic.Gasc.

   - bpo-19494(81): Added urllib.request.HTTPBasicPriorAuthHandler.
     Patch by Matej Cepl.

   - bpo-22578(82): Added attributes to the re.error class.

   - bpo-22849(83): Fix possible double free in the io.TextIOWrapper
     constructor.

   - bpo-12728(84): Different Unicode characters having the same
     uppercase but different lowercase are now matched in
     case-insensitive regular expressions.

   - bpo-22821(85): Fixed fcntl() with integer argument on 64-bit
     big-endian platforms.

   - bpo-21650(86): Add an ‘--sort-keys’ option to ‘json.tool’ CLI.

   - bpo-22824(87): Updated reprlib output format for sets to use set
     literals.  Patch contributed by Berker Peksag.

   - bpo-22824(88): Updated reprlib output format for arrays to display
     empty arrays without an unnecessary empty list.  Suggested by
     Serhiy Storchaka.

   - bpo-22406(89): Fixed the uu_codec codec incorrectly ported to 3.x.
     Based on patch by Martin Panter.

   - bpo-17293(90): uuid.getnode() now determines MAC address on AIX
     using netstat.  Based on patch by Aivars Kalvāns.

   - bpo-22769(91): Fixed ttk.Treeview.tag_has() when called without
     arguments.

   - bpo-22417(92): Verify certificates by default in httplib (PEP 476).

   - bpo-22775(93): Fixed unpickling of http.cookies.SimpleCookie with
     protocol 2 and above.  Patch by Tim Graham.

   - bpo-22776(94): Brought excluded code into the scope of a try block
     in SysLogHandler.emit().

   - bpo-22665(95): Add missing get_terminal_size and SameFileError to
     shutil.__all__.

   - bpo-6623(96): Remove deprecated Netrc class in the ftplib module.
     Patch by Matt Chaput.

   - bpo-17381(97): Fixed handling of case-insensitive ranges in regular
     expressions.

   - bpo-22410(98): Module level functions in the re module now cache
     compiled locale-dependent regular expressions taking into account
     the locale.

   - bpo-22759(99): Query methods on pathlib.Path() (exists(), is_dir(),
     etc.)  now return False when the underlying stat call raises
     NotADirectoryError.

   - bpo-8876(100): distutils now falls back to copying files when hard
     linking doesn’t work.  This allows use with special filesystems
     such as VirtualBox shared folders.

   - bpo-22217(101): Implemented reprs of classes in the zipfile module.

   - bpo-22457(102): Honour load_tests in the start_dir of discovery.

   - bpo-18216(103): gettext now raises an error when a .mo file has an
     unsupported major version number.  Patch by Aaron Hill.

   - bpo-13918(104): Provide a locale.delocalize() function which can
     remove locale-specific number formatting from a string representing
     a number, without then converting it to a specific type.  Patch by
     Cédric Krier.

   - bpo-22676(105): Make the pickling of global objects which don’t
     have a __module__ attribute less slow.

   - bpo-18853(106): Fixed ResourceWarning in shlex.__nain__.

   - bpo-9351(107): Defaults set with set_defaults on an argparse
     subparser are no longer ignored when also set on the parent parser.

   - bpo-7559(108): unittest test loading ImportErrors are reported as
     import errors with their import exception rather than as attribute
     errors after the import has already failed.

   - bpo-19746(109): Make it possible to examine the errors from
     unittest discovery without executing the test suite.  The new
     ‘errors’ attribute on ‘TestLoader’ exposes these non-fatal errors
     encountered during discovery.

   - bpo-21991(110): Make email.headerregistry’s header ‘params’
     attributes be read-only (MappingProxyType).  Previously the
     dictionary was modifiable but a new one was created on each access
     of the attribute.

   - bpo-22638(111): SSLv3 is now disabled throughout the standard
     library.  It can still be enabled by instantiating a SSLContext
     manually.

   - bpo-22641(112): In asyncio, the default SSL context for client
     connections is now created using ssl.create_default_context(), for
     stronger security.

   - bpo-17401(113): Include closefd in io.FileIO repr.

   - bpo-21338(114): Add silent mode for compileall.  quiet parameters
     of compile_{dir, file, path} functions now have a multilevel value.
     Also, -q option of the CLI now have a multilevel value.  Patch by
     Thomas Kluyver.

   - bpo-20152(115): Convert the array and cmath modules to Argument
     Clinic.

   - bpo-18643(116): Add socket.socketpair() on Windows.

   - bpo-22435(117): Fix a file descriptor leak when socketserver bind
     fails.

   - bpo-13096(118): Fixed segfault in CTypes POINTER handling of large
     values.

   - bpo-11694(119): Raise ConversionError in xdrlib as documented.
     Patch by Filip Gruszczyński and Claudiu Popa.

   - bpo-19380(120): Optimized parsing of regular expressions.

   - bpo-1519638(121): Now unmatched groups are replaced with empty
     strings in re.sub() and re.subn().

   - bpo-18615(122): sndhdr.what/whathdr now return a namedtuple.

   - bpo-22462(123): Fix pyexpat’s creation of a dummy frame to make it
     appear in exception tracebacks.

   - bpo-21965(124): Add support for in-memory SSL to the ssl module.
     Patch by Geert Jansen.

   - bpo-21173(125): Fix len() on a WeakKeyDictionary when .clear() was
     called with an iterator alive.

   - bpo-11866(126): Eliminated race condition in the computation of
     names for new threads.

   - bpo-21905(127): Avoid RuntimeError in pickle.whichmodule() when
     sys.modules is mutated while iterating.  Patch by Olivier Grisel.

   - bpo-11271(128): concurrent.futures.Executor.map() now takes a
     'chunksize' argument to allow batching of tasks in child processes
     and improve performance of ProcessPoolExecutor.  Patch by Dan
     O’Reilly.

   - bpo-21883(129): os.path.join() and os.path.relpath() now raise a
     TypeError with more helpful error message for unsupported or
     mismatched types of arguments.

   - bpo-22219(130): The zipfile module CLI now adds entries for
     directories (including empty directories) in ZIP file.

   - bpo-22449(131): In the ssl.SSLContext.load_default_certs, consult
     the environmental variables SSL_CERT_DIR and SSL_CERT_FILE on
     Windows.

   - bpo-22508(132): The email.__version__ variable has been removed;
     the email code is no longer shipped separately from the stdlib, and
     __version__ hasn’t been updated in several releases.

   - bpo-20076(133): Added non derived UTF-8 aliases to locale aliases
     table.

   - bpo-20079(134): Added locales supported in glibc 2.18 to locale
     alias table.

   - bpo-20218(135): Added convenience methods read_text/write_text and
     read_bytes/ write_bytes to pathlib.Path objects.

   - bpo-22396(136): On 32-bit AIX platform, don’t expose
     os.posix_fadvise() nor os.posix_fallocate() because their
     prototypes in system headers are wrong.

   - bpo-22517(137): When an io.BufferedRWPair object is deallocated,
     clear its weakrefs.

   - bpo-22437(138): Number of capturing groups in regular expression is
     no longer limited by 100.

   - bpo-17442(139): InteractiveInterpreter now displays the full
     chained traceback in its showtraceback method, to match the built
     in interactive interpreter.

   - bpo-23392(140): Added tests for marshal C API that works with
     FILE*.

   - bpo-10510(141): distutils register and upload methods now use HTML
     standards compliant CRLF line endings.

   - bpo-9850(142): Fixed macpath.join() for empty first component.
     Patch by Oleg Oshmyan.

   - bpo-5309(143): distutils’ build and build_ext commands now accept a
     ‘-j’ option to enable parallel building of extension modules.

   - bpo-22448(144): Improve canceled timer handles cleanup to prevent
     unbound memory usage.  Patch by Joshua Moore-Oliva.

   - bpo-22427(145): TemporaryDirectory no longer attempts to clean up
     twice when used in the with statement in generator.

   - bpo-22362(146): Forbidden ambiguous octal escapes out of range
     0-0o377 in regular expressions.

   - bpo-20912(147): Now directories added to ZIP file have correct Unix
     and MS-DOS directory attributes.

   - bpo-21866(148): ZipFile.close() no longer writes ZIP64 central
     directory records if allowZip64 is false.

   - bpo-22278(149): Fix urljoin problem with relative urls, a
     regression observed after changes to issue22118 were submitted.

   - bpo-22415(150): Fixed debugging output of the GROUPREF_EXISTS
     opcode in the re module.  Removed trailing spaces in debugging
     output.

   - bpo-22423(151): Unhandled exception in thread no longer causes
     unhandled AttributeError when sys.stderr is None.

   - bpo-21332(152): Ensure that ‘bufsize=1’ in subprocess.Popen()
     selects line buffering, rather than block buffering.  Patch by
     Akira Li.

   - bpo-21091(153): Fix API bug:
     email.message.EmailMessage.is_attachment is now a method.

   - bpo-21079(154): Fix email.message.EmailMessage.is_attachment to
     return the correct result when the header has parameters as well as
     a value.

   - bpo-22247(155): Add NNTPError to nntplib.__all__.

   - bpo-22366(156): urllib.request.urlopen will accept a context object
     (SSLContext) as an argument which will then be used for HTTPS
     connection.  Patch by Alex Gaynor.

   - bpo-4180(157): The warnings registries are now reset when the
     filters are modified.

   - bpo-22419(158): Limit the length of incoming HTTP request in
     wsgiref server to 65536 bytes and send a 414 error code for higher
     lengths.  Patch contributed by Devin Cook.

   - Lax cookie parsing in http.cookies could be a security issue when
     combined with non-standard cookie handling in some web browsers.
     Reported by Sergey Bobrov.

   - bpo-20537(159): logging methods now accept an exception instance as
     well as a Boolean value or exception tuple.  Thanks to Yury
     Selivanov for the patch.

   - bpo-22384(160): An exception in Tkinter callback no longer crashes
     the program when it is run with pythonw.exe.

   - bpo-22168(161): Prevent turtle AttributeError with non-default
     Canvas on OS X.

   - bpo-21147(162): sqlite3 now raises an exception if the request
     contains a null character instead of truncating it.  Based on patch
     by Victor Stinner.

   - bpo-13968(163): The glob module now supports recursive search in
     subdirectories using the ‘**’ pattern.

   - bpo-21951(164): Fixed a crash in Tkinter on AIX when called Tcl
     command with empty string or tuple argument.

   - bpo-21951(165): Tkinter now most likely raises MemoryError instead
     of crash if the memory allocation fails.

   - bpo-22338(166): Fix a crash in the json module on memory allocation
     failure.

   - bpo-12410(167): imaplib.IMAP4 now supports the context management
     protocol.  Original patch by Tarek Ziadé.

   - bpo-21270(168): We now override tuple methods in mock.call objects
     so that they can be used as normal call attributes.

   - bpo-16662(169): ‘load_tests()’ is now unconditionally run when it
     is present in a package’s ‘__init__.py’.
     ‘TestLoader.loadTestsFromModule()’ still accepts use_load_tests,
     but it is deprecated and ignored.  A new keyword-only attribute
     ‘pattern’ is added and documented.  Patch given by Robert Collins,
     tweaked by Barry Warsaw.

   - bpo-22226(170): First letter no longer is stripped from the
     “status” key in the result of Treeview.heading().

   - bpo-19524(171): Fixed resource leak in the HTTP connection when an
     invalid response is received.  Patch by Martin Panter.

   - bpo-20421(172): Add a .version() method to SSL sockets exposing the
     actual protocol version in use.

   - bpo-19546(173): configparser exceptions no longer expose
     implementation details.  Chained KeyErrors are removed, which leads
     to cleaner tracebacks.  Patch by Claudiu Popa.

   - bpo-22051(174): turtledemo no longer reloads examples to re-run
     them.  Initialization of variables and gui setup should be done in
     main(), which is called each time a demo is run, but not on import.

   - bpo-21933(175): Turtledemo users can change the code font size with
     a menu selection or control(command) ‘-’ or ‘+’ or
     control-mousewheel.  Original patch by Lita Cho.

   - bpo-21597(176): The separator between the turtledemo text pane and
     the drawing canvas can now be grabbed and dragged with a mouse.
     The code text pane can be widened to easily view or copy the full
     width of the text.  The canvas can be widened on small screens.
     Original patches by Jan Kanis and Lita Cho.

   - bpo-18132(177): Turtledemo buttons no longer disappear when the
     window is shrunk.  Original patches by Jan Kanis and Lita Cho.

   - bpo-22043(178): time.monotonic() is now always available.
     ‘threading.Lock.acquire()’, ‘threading.RLock.acquire()’ and socket
     operations now use a monotonic clock, instead of the system clock,
     when a timeout is used.

   - bpo-21527(179): Add a default number of workers to
     ThreadPoolExecutor equal to 5 times the number of CPUs.  Patch by
     Claudiu Popa.

   - bpo-22216(180): smtplib now resets its state more completely after
     a quit.  The most obvious consequence of the previous behavior was
     a STARTTLS failure during a connect/starttls/quit/connect/starttls
     sequence.

   - bpo-22098(181): ctypes’ BigEndianStructure and
     LittleEndianStructure now define an empty __slots__ so that
     subclasses don’t always get an instance dict.  Patch by Claudiu
     Popa.

   - bpo-22185(182): Fix an occasional RuntimeError in
     threading.Condition.wait() caused by mutation of the waiters queue
     without holding the lock.  Patch by Doug Zongker.

   - bpo-22287(183): On UNIX, _PyTime_gettimeofday() now uses
     clock_gettime(CLOCK_REALTIME) if available.  As a side effect,
     Python now depends on the librt library on Solaris and on Linux
     (only with glibc older than 2.17).

   - bpo-22182(184): Use e.args to unpack exceptions correctly in
     distutils.file_util.move_file.  Patch by Claudiu Popa.

   - The webbrowser module now uses subprocess’s start_new_session=True
     rather than a potentially risky preexec_fn=os.setsid call.

   - bpo-22042(185): signal.set_wakeup_fd(fd) now raises an exception if
     the file descriptor is in blocking mode.

   - bpo-16808(186): inspect.stack() now returns a named tuple instead
     of a tuple.  Patch by Daniel Shahaf.

   - bpo-22236(187): Fixed Tkinter images copying operations in
     NoDefaultRoot mode.

   - bpo-2527(188): Add a 'globals' argument to timeit functions, in
     order to override the globals namespace in which the timed code is
     executed.  Patch by Ben Roberts.

   - bpo-22118(189): Switch urllib.parse to use RFC 3986 semantics for
     the resolution of relative URLs, rather than RFCs 1808 and 2396.
     Patch by Demian Brecht.

   - bpo-21549(190): Added the “members” parameter to TarFile.list().

   - bpo-19628(191): Allow compileall recursion depth to be specified
     with a -r option.

   - bpo-15696(192): Add a __sizeof__ implementation for mmap objects on
     Windows.

   - bpo-22068(193): Avoided reference loops with Variables and Fonts in
     Tkinter.

   - bpo-22165(194): SimpleHTTPRequestHandler now supports undecodable
     file names.

   - bpo-15381(195): Optimized line reading in io.BytesIO.

   - bpo-8797(196): Raise HTTPError on failed Basic Authentication
     immediately.  Initial patch by Sam Bull.

   - bpo-20729(197): Restored the use of lazy
     iterkeys()/itervalues()/iteritems() in the mailbox module.

   - bpo-21448(198): Changed FeedParser feed() to avoid 'O'('n'^2)
     behavior when parsing long line.  Original patch by Raymond
     Hettinger.

   - bpo-22184(199): The functools LRU Cache decorator factory now gives
     an earlier and clearer error message when the user forgets the
     required parameters.

   - bpo-17923(200): glob() patterns ending with a slash no longer match
     non-dirs on AIX. Based on patch by Delhallt.

   - bpo-21725(201): Added support for RFC 6531 (SMTPUTF8) in smtpd.

   - bpo-22176(202): Update the ctypes module’s libffi to v3.1.  This
     release adds support for the Linux AArch64 and POWERPC ELF ABIv2
     little endian architectures.

   - bpo-5411(203): Added support for the “xztar” format in the shutil
     module.

   - bpo-21121(204): Don’t force 3rd party C extensions to be built with
     -Werror=declaration-after-statement.

   - bpo-21975(205): Fixed crash when using uninitialized sqlite3.Row
     (in particular when unpickling pickled sqlite3.Row).  sqlite3.Row
     is now initialized in the __new__() method.

   - bpo-20170(206): Convert posixmodule to use Argument Clinic.

   - bpo-21539(207): Add an 'exists_ok' argument to ‘Pathlib.mkdir()’ to
     mimic ‘mkdir -p’ and ‘os.makedirs()’ functionality.  When true,
     ignore ‘FileExistsErrors’.  Patch by Berker Peksag.

   - bpo-22127(208): Bypass IDNA for pure-ASCII host names in the socket
     module (in particular for numeric IPs).

   - bpo-21047(209): set the default value for the 'convert_charrefs'
     argument of HTMLParser to True.  Patch by Berker Peksag.

   - Add an __all__ to html.entities.

   - bpo-15114(210): the strict mode and argument of HTMLParser,
     HTMLParser.error, and the HTMLParserError exception have been
     removed.

   - bpo-22085(211): Dropped support of Tk 8.3 in Tkinter.

   - bpo-21580(212): Now Tkinter correctly handles bytes arguments
     passed to Tk.  In particular this allows initializing images from
     binary data.

   - bpo-22003(213): When initialized from a bytes object, io.BytesIO()
     now defers making a copy until it is mutated, improving performance
     and memory use on some use cases.  Patch by David Wilson.

   - bpo-22018(214): On Windows, signal.set_wakeup_fd() now also
     supports sockets.  A side effect is that Python depends to the
     WinSock library.

   - bpo-22054(215): Add os.get_blocking() and os.set_blocking()
     functions to get and set the blocking mode of a file descriptor
     (False if the O_NONBLOCK flag is set, True otherwise).  These
     functions are not available on Windows.

   - bpo-17172(216): Make turtledemo start as active on OS X even when
     run with subprocess.  Patch by Lita Cho.

   - bpo-21704(217): Fix build error for _multiprocessing when
     semaphores are not available.  Patch by Arfrever Frehtes Taifersar
     Arahesis.

   - bpo-20173(218): Convert sha1, sha256, sha512 and md5 to
     ArgumentClinic.  Patch by Vajrasky Kok.

   - Fix repr(_socket.socket) on Windows 64-bit: don’t fail with
     OverflowError on closed socket.  repr(socket.socket) already works
     fine.

   - bpo-22033(219): Reprs of most Python implemented classes now
     contain actual class name instead of hardcoded one.

   - bpo-21947(220): The dis module can now disassemble
     generator-iterator objects based on their gi_code attribute.  Patch
     by Clement Rouault.

   - bpo-16133(221): The asynchat.async_chat.handle_read() method now
     ignores BlockingIOError exceptions.

   - bpo-22044(222): Fixed premature DECREF in call_tzinfo_method.
     Patch by Tom Flanagan.

   - bpo-19884(223): readline: Disable the meta modifier key if stdout
     is not a terminal to not write the ANSI sequence ‘"\033[1034h"’
     into stdout.  This sequence is used on some terminal (ex:
     TERM=xterm-256color”) to enable support of 8 bit characters.

   - bpo-4350(224): Removed a number of out-of-dated and non-working for
     a long time Tkinter methods.

   - bpo-6167(225): Scrollbar.activate() now returns the name of active
     element if the argument is not specified.  Scrollbar.set() now
     always accepts only 2 arguments.

   - bpo-15275(226): Clean up and speed up the ntpath module.

   - bpo-21888(227): plistlib’s load() and loads() now work if the fmt
     parameter is specified.

   - bpo-22032(228): __qualname__ instead of __name__ is now always used
     to format fully qualified class names of Python implemented
     classes.

   - bpo-22031(229): Reprs now always use hexadecimal format with the
     “0x” prefix when contain an id in form “ at 0x…”.

   - bpo-22018(230): signal.set_wakeup_fd() now raises an OSError
     instead of a ValueError on ‘fstat()’ failure.

   - bpo-21044(231): tarfile.open() now handles fileobj with an integer
     ‘name’ attribute.  Based on patch by Antoine Pietri.

   - bpo-21966(232): Respect -q command-line option when code module is
     ran.

   - bpo-19076(233): Don’t pass the redundant ‘file’ argument to
     self.error().

   - bpo-16382(234): Improve exception message of warnings.warn() for
     bad category.  Initial patch by Phil Elson.

   - bpo-21932(235): os.read() now uses a *note Py_ssize_t(): a69. type
     instead of int for the size to support reading more than 2 GB at
     once.  On Windows, the size is truncated to INT_MAX. As any call to
     os.read(), the OS may read less bytes than the number of requested
     bytes.

   - bpo-21942(236): Fixed source file viewing in pydoc’s server mode on
     Windows.

   - bpo-11259(237): asynchat.async_chat().set_terminator() now raises a
     ValueError if the number of received bytes is negative.

   - bpo-12523(238): asynchat.async_chat.push() now raises a TypeError
     if it doesn’t get a bytes string

   - bpo-21707(239): Add missing kwonlyargcount argument to
     ModuleFinder.replace_paths_in_code().

   - bpo-20639(240): calling Path.with_suffix(‘’) allows removing the
     suffix again.  Patch by July Tikhonov.

   - bpo-21714(241): Disallow the construction of invalid paths using
     Path.with_name().  Original patch by Antony Lee.

   - bpo-15014(242): Added ‘auth’ method to smtplib to make implementing
     auth mechanisms simpler, and used it internally in the login
     method.

   - bpo-21151(243): Fixed a segfault in the winreg module when ‘None’
     is passed as a ‘REG_BINARY’ value to SetValueEx.  Patch by John
     Ehresman.

   - bpo-21090(244): io.FileIO.readall() does not ignore I/O errors
     anymore.  Before, it ignored I/O errors if at least the first C
     call read() succeed.

   - bpo-5800(245): headers parameter of wsgiref.headers.Headers is now
     optional.  Initial patch by Pablo Torres Navarrete and SilentGhost.

   - bpo-21781(246): ssl.RAND_add() now supports strings longer than 2
     GB.

   - bpo-21679(247): Prevent extraneous fstat() calls during open().
     Patch by Bohuslav Kabrda.

   - bpo-21863(248): cProfile now displays the module name of C
     extension functions, in addition to their own name.

   - bpo-11453(249): asyncore: emit a ResourceWarning when an unclosed
     file_wrapper object is destroyed.  The destructor now closes the
     file if needed.  The close() method can now be called twice: the
     second call does nothing.

   - bpo-21858(250): Better handling of Python exceptions in the sqlite3
     module.

   - bpo-21476(251): Make sure the email.parser.BytesParser
     TextIOWrapper is discarded after parsing, so the input file isn’t
     unexpectedly closed.

   - bpo-20295(252): imghdr now recognizes OpenEXR format images.

   - bpo-21729(253): Used the “with” statement in the dbm.dumb module to
     ensure files closing.  Patch by Claudiu Popa.

   - bpo-21491(254): socketserver: Fix a race condition in child
     processes reaping.

   - bpo-21719(255): Added the ‘st_file_attributes’ field to
     os.stat_result on Windows.

   - bpo-21832(256): Require named tuple inputs to be exact strings.

   - bpo-21722(257): The distutils “upload” command now exits with a
     non-zero return code when uploading fails.  Patch by Martin
     Dengler.

   - bpo-21723(258): asyncio.Queue: support any type of number (ex:
     float) for the maximum size.  Patch written by Vajrasky Kok.

   - bpo-21711(259): support for “site-python” directories has now been
     removed from the site module (it was deprecated in 3.4).

   - bpo-17552(260): new socket.sendfile() method allowing a file to be
     sent over a socket by using high-performance os.sendfile() on UNIX.
     Patch by Giampaolo Rodola’.

   - bpo-18039(261): dbm.dump.open() now always creates a new database
     when the flag has the value ‘n’.  Patch by Claudiu Popa.

   - bpo-21326(262): Add a new is_closed() method to
     asyncio.BaseEventLoop.  run_forever() and run_until_complete()
     methods of asyncio.BaseEventLoop now raise an exception if the
     event loop was closed.

   - bpo-21766(263): Prevent a security hole in CGIHTTPServer by URL
     unquoting paths before checking for a CGI script at that path.

   - bpo-21310(264): Fixed possible resource leak in failed open().

   - bpo-21256(265): Printout of keyword args should be in deterministic
     order in a mock function call.  This will help to write better
     doctests.

   - bpo-21677(266): Fixed chaining nonnormalized exceptions in io
     close() methods.

   - bpo-11709(267): Fix the pydoc.help function to not fail when
     sys.stdin is not a valid file.

   - bpo-21515(268): tempfile.TemporaryFile now uses os.O_TMPFILE flag
     is available.

   - bpo-13223(269): Fix pydoc.writedoc so that the HTML documentation
     for methods that use ‘self’ in the example code is generated
     correctly.

   - bpo-21463(270): In urllib.request, fix pruning of the FTP cache.

   - bpo-21618(271): The subprocess module could fail to close open fds
     that were inherited by the calling process and already higher than
     POSIX resource limits would otherwise allow.  On systems with a
     functioning /proc/self/fd or /dev/fd interface the max is now
     ignored and all fds are closed.

   - bpo-20383(272): Introduce importlib.util.module_from_spec() as the
     preferred way to create a new module.

   - bpo-21552(273): Fixed possible integer overflow of too long string
     lengths in the tkinter module on 64-bit platforms.

   - bpo-14315(274): The zipfile module now ignores extra fields in the
     central directory that are too short to be parsed instead of
     letting a struct.unpack error bubble up as this “bad data” appears
     in many real world zip files in the wild and is ignored by other
     zip tools.

   - bpo-13742(275): Added “key” and “reverse” parameters to
     heapq.merge().  (First draft of patch contributed by Simon Sapin.)

   - bpo-21402(276): tkinter.ttk now works when default root window is
     not set.

   - bpo-3015(277): ‘_tkinter.create()’ now creates ‘tkapp’ object with
     ‘wantobjects=1’ by default.

   - bpo-10203(278): sqlite3.Row now truly supports sequence protocol.
     In particular it supports reverse() and negative indices.  Original
     patch by Claudiu Popa.

   - bpo-18807(279): If copying (no symlinks) specified for a venv, then
     the python interpreter aliases (python, python3) are now created by
     copying rather than symlinking.

   - bpo-20197(280): Added support for the WebP image type in the imghdr
     module.  Patch by Fabrice Aneche and Claudiu Popa.

   - bpo-21513(281): Speedup some properties of IP addresses
     (IPv4Address, IPv6Address) such as .is_private or .is_multicast.

   - bpo-21137(282): Improve the repr for threading.Lock() and its
     variants by showing the “locked” or “unlocked” status.  Patch by
     Berker Peksag.

   - bpo-21538(283): The plistlib module now supports loading of binary
     plist files when reference or offset size is not a power of two.

   - bpo-21455(284): Add a default backlog to socket.listen().

   - bpo-21525(285): Most Tkinter methods which accepted tuples now
     accept lists too.

   - bpo-22166(286): With the assistance of a new internal
     _codecs._forget_codec helping function, test_codecs now clears the
     encoding caches to avoid the appearance of a reference leak

   - bpo-22236(287): Tkinter tests now don’t reuse default root window.
     New root window is created for every test class.

   - bpo-10744(288): Fix PEP 3118(289) format strings on ctypes objects
     with a nontrivial shape.

   - bpo-20826(290): Optimize ipaddress.collapse_addresses().

   - bpo-21487(291): Optimize ipaddress.summarize_address_range() and
     ipaddress.{IPv4Network,IPv6Network}.subnets().

   - bpo-21486(292): Optimize parsing of netmasks in
     ipaddress.IPv4Network and ipaddress.IPv6Network.

   - bpo-13916(293): Disallowed the surrogatepass error handler for non
     UTF-* encodings.

   - bpo-20998(294): Fixed re.fullmatch() of repeated single character
     pattern with ignore case.  Original patch by Matthew Barnett.

   - bpo-21075(295): fileinput.FileInput now reads bytes from standard
     stream if binary mode is specified.  Patch by Sam Kimbrel.

   - bpo-19775(296): Add a samefile() method to pathlib Path objects.
     Initial patch by Vajrasky Kok.

   - bpo-21226(297): Set up modules properly in
     PyImport_ExecCodeModuleObject (and friends).

   - bpo-21398(298): Fix a unicode error in the pydoc pager when the
     documentation contains characters not encodable to the stdout
     encoding.

   - bpo-16531(299): ipaddress.IPv4Network and ipaddress.IPv6Network now
     accept an (address, netmask) tuple argument, so as to easily
     construct network objects from existing addresses.

   - bpo-21156(300): importlib.abc.InspectLoader.source_to_code() is now
     a staticmethod.

   - bpo-21424(301): Simplified and optimized heaqp.nlargest() and
     nmsmallest() to make fewer tuple comparisons.

   - bpo-21396(302): Fix TextIOWrapper(…, write_through=True) to not
     force a flush() on the underlying binary stream.  Patch by akira.

   - bpo-18314(303): Unlink now removes junctions on Windows.  Patch by
     Kim Gräsman

   - bpo-21088(304): Bugfix for curses.window.addch() regression in
     3.4.0.  In porting to Argument Clinic, the first two arguments were
     reversed.

   - bpo-21407(305): _decimal: The module now supports function
     signatures.

   - bpo-10650(306): Remove the non-standard ‘watchexp’ parameter from
     the Decimal.quantize() method in the Python version.  It had never
     been present in the C version.

   - bpo-21469(307): Reduced the risk of false positives in robotparser
     by checking to make sure that robots.txt has been read or does not
     exist prior to returning True in can_fetch().

   - bpo-19414(308): Have the OrderedDict mark deleted links as
     unusable.  This gives an early failure if the link is deleted
     during iteration.

   - bpo-21421(309): Add __slots__ to the MappingViews ABC. Patch by
     Josh Rosenberg.

   - bpo-21101(310): Eliminate double hashing in the C speed-up code for
     collections.Counter().

   - bpo-21321(311): itertools.islice() now releases the reference to
     the source iterator when the slice is exhausted.  Patch by Anton
     Afanasyev.

   - bpo-21057(312): TextIOWrapper now allows the underlying binary
     stream’s read() or read1() method to return an arbitrary bytes-like
     object (such as a memoryview).  Patch by Nikolaus Rath.

   - bpo-20951(313): SSLSocket.send() now raises either SSLWantReadError
     or SSLWantWriteError on a non-blocking socket if the operation
     would block.  Previously, it would return 0.  Patch by Nikolaus
     Rath.

   - bpo-13248(314): removed previously deprecated asyncore.dispatcher
     __getattr__ cheap inheritance hack.

   - bpo-9815(315): assertRaises now tries to clear references to local
     variables in the exception’s traceback.

   - bpo-19940(316): ssl.cert_time_to_seconds() now interprets the given
     time string in the UTC timezone (as specified in RFC 5280), not the
     local timezone.

   - bpo-13204(317): Calling sys.flags.__new__ would crash the
     interpreter, now it raises a TypeError.

   - bpo-19385(318): Make operations on a closed dbm.dumb database
     always raise the same exception.

   - bpo-21207(319): Detect when the os.urandom cached fd has been
     closed or replaced, and open it anew.

   - bpo-21291(320): subprocess’s Popen.wait() is now thread safe so
     that multiple threads may be calling wait() or poll() on a Popen
     instance at the same time without losing the Popen.returncode
     value.

   - bpo-21127(321): Path objects can now be instantiated from str
     subclass instances (such as ‘numpy.str_’).

   - bpo-15002(322): urllib.response object to use _TemporaryFileWrapper
     (and _TemporaryFileCloser) facility.  Provides a better way to
     handle file descriptor close.  Patch contributed by Christian
     Theune.

   - bpo-12220(323): mindom now raises a custom ValueError indicating it
     doesn’t support spaces in URIs instead of letting a ‘split’
     ValueError bubble up.

   - bpo-21068(324): The ssl.PROTOCOL* constants are now enum members.

   - bpo-21276(325): posixmodule: Don’t define USE_XATTRS on KFreeBSD
     and the Hurd.

   - bpo-21262(326): New method assert_not_called for Mock.  It raises
     AssertionError if the mock has been called.

   - bpo-21238(327): New keyword argument ‘unsafe’ to Mock.  It raises
     ‘AttributeError’ incase of an attribute startswith assert or
     assret.

   - bpo-20896(328): ssl.get_server_certificate() now uses
     PROTOCOL_SSLv23, not PROTOCOL_SSLv3, for maximum compatibility.

   - bpo-21239(329): patch.stopall() didn’t work deterministically when
     the same name was patched more than once.

   - bpo-21203(330): Updated fileConfig and dictConfig to remove
     inconsistencies.  Thanks to Jure Koren for the patch.

   - bpo-21222(331): Passing name keyword argument to
     mock.create_autospec now works.

   - bpo-21197(332): Add lib64 -> lib symlink in venvs on 64-bit non-OS
     X POSIX.

   - bpo-17498(333): Some SMTP servers disconnect after certain errors,
     violating strict RFC conformance.  Instead of losing the error code
     when we issue the subsequent RSET, smtplib now returns the error
     code and defers raising the SMTPServerDisconnected error until the
     next command is issued.

   - bpo-17826(334): setting an iterable side_effect on a mock function
     created by create_autospec now works.  Patch by Kushal Das.

   - bpo-7776(335): Fix ‘Host:’ header and reconnection when using
     http.client.HTTPConnection.set_tunnel().  Patch by Nikolaus Rath.

   - bpo-20968(336): unittest.mock.MagicMock now supports division.
     Patch by Johannes Baiter.

   - bpo-21529(337): Fix arbitrary memory access in
     JSONDecoder.raw_decode with a negative second parameter.  Bug
     reported by Guido Vranken.  (See also: CVE 2014-4616(338))

   - bpo-21169(339): getpass now handles non-ascii characters that the
     input stream encoding cannot encode by re-encoding using the
     replace error handler.

   - bpo-21171(340): Fixed undocumented filter API of the rot13 codec.
     Patch by Berker Peksag.

   - bpo-20539(341): Improved math.factorial error message for large
     positive inputs and changed exception type (OverflowError ->
     ValueError) for large negative inputs.

   - bpo-21172(342): isinstance check relaxed from dict to
     collections.Mapping.

   - bpo-21155(343): asyncio.EventLoop.create_unix_server() now raises a
     ValueError if path and sock are specified at the same time.

   - bpo-21136(344): Avoid unnecessary normalization of Fractions
     resulting from power and other operations.  Patch by Raymond
     Hettinger.

   - bpo-17621(345): Introduce importlib.util.LazyLoader.

   - bpo-21076(346): signal module constants were turned into enums.
     Patch by Giampaolo Rodola’.

   - bpo-20636(347): Improved the repr of Tkinter widgets.

   - bpo-19505(348): The items, keys, and values views of OrderedDict
     now support reverse iteration using reversed().

   - bpo-21149(349): Improved thread-safety in logging cleanup during
     interpreter shutdown.  Thanks to Devin Jeanpierre for the patch.

   - bpo-21058(350): Fix a leak of file descriptor in *note
     tempfile.NamedTemporaryFile(): 4c6, close the file descriptor if
     *note io.open(): 51d. fails

   - bpo-21200(351): Return None from pkgutil.get_loader() when __spec__
     is missing.

   - bpo-21013(352): Enhance ssl.create_default_context() when used for
     server side sockets to provide better security by default.

   - bpo-20145(353): ‘assertRaisesRegex’ and ‘assertWarnsRegex’ now
     raise a ‘TypeError’ if the second argument is not a string or
     compiled regex.

   - bpo-20633(354): Replace relative import by absolute import.

   - bpo-20980(355): Stop wrapping exception when using ThreadPool.

   - bpo-21082(356): In os.makedirs, do not set the process-wide umask.
     Note this changes behavior of makedirs when exist_ok=True.

   - bpo-20990(357): Fix issues found by pyflakes for multiprocessing.

   - bpo-21015(358): SSL contexts will now automatically select an
     elliptic curve for ECDH key exchange on OpenSSL 1.0.2 and later,
     and otherwise default to “prime256v1”.

   - bpo-21000(359): Improve the command-line interface of json.tool.

   - bpo-20995(360): Enhance default ciphers used by the ssl module to
     enable better security and prioritize perfect forward secrecy.

   - bpo-20884(361): Don’t assume that __file__ is defined on
     importlib.__init__.

   - bpo-21499(362): Ignore __builtins__ in several
     test_importlib.test_api tests.

   - bpo-20627(363): xmlrpc.client.ServerProxy is now a context manager.

   - bpo-19165(364): The formatter module now raises DeprecationWarning
     instead of PendingDeprecationWarning.

   - bpo-13936(365): Remove the ability of datetime.time instances to be
     considered false in boolean contexts.

   - bpo-18931(366): selectors module now supports /dev/poll on Solaris.
     Patch by Giampaolo Rodola’.

   - bpo-19977(367): When the ‘LC_TYPE’ locale is the POSIX locale (‘C’
     locale), *note sys.stdin: 53d. and *note sys.stdout: ae6. are now
     using the ‘surrogateescape’ error handler, instead of the ‘strict’
     error handler.

   - bpo-20574(368): Implement incremental decoder for cp65001 code
     (Windows code page 65001, Microsoft UTF-8).

   - bpo-20879(369): Delay the initialization of encoding and decoding
     tables for base32, ascii85 and base85 codecs in the base64 module,
     and delay the initialization of the unquote_to_bytes() table of the
     urllib.parse module, to not waste memory if these modules are not
     used.

   - bpo-19157(370): Include the broadcast address in the usuable hosts
     for IPv6 in ipaddress.

   - bpo-11599(371): When an external command (e.g.  compiler) fails,
     distutils now prints out the whole command line (instead of just
     the command name) if the environment variable DISTUTILS_DEBUG is
     set.

   - bpo-4931(372): distutils should not produce unhelpful “error: None”
     messages anymore.  distutils.util.grok_environment_error is kept
     but doc-deprecated.

   - bpo-20875(373): Prevent possible gzip “‘read’ is not defined”
     NameError.  Patch by Claudiu Popa.

   - bpo-11558(374): ‘email.message.Message.attach’ now returns a more
     useful error message if ‘attach’ is called on a message for which
     ‘is_multipart’ is False.

   - bpo-20283(375): RE pattern methods now accept the string keyword
     parameters as documented.  The pattern and source keyword
     parameters are left as deprecated aliases.

   - bpo-20778(376): Fix modulefinder to work with bytecode-only
     modules.

   - bpo-20791(377): copy.copy() now doesn’t make a copy when the input
     is a bytes object.  Initial patch by Peter Otten.

   - bpo-19748(378): On AIX, time.mktime() now raises an OverflowError
     for year outsize range [1902; 2037].

   - bpo-19573(379): inspect.signature: Use enum for parameter kind
     constants.

   - bpo-20726(380): inspect.signature: Make Signature and Parameter
     picklable.

   - bpo-17373(381): Add inspect.Signature.from_callable method.

   - bpo-20378(382): Improve repr of inspect.Signature and
     inspect.Parameter.

   - bpo-20816(383): Fix inspect.getcallargs() to raise correct
     TypeError for missing keyword-only arguments.  Patch by Jeremiah
     Lowin.

   - bpo-20817(384): Fix inspect.getcallargs() to fail correctly if more
     than 3 arguments are missing.  Patch by Jeremiah Lowin.

   - bpo-6676(385): Ensure a meaningful exception is raised when
     attempting to parse more than one XML document per pyexpat
     xmlparser instance.  (Original patches by Hirokazu Yamamoto and
     Amaury Forgeot d’Arc, with suggested wording by David Gutteridge)

   - bpo-21117(386): Fix inspect.signature to better support
     functools.partial.  Due to the specifics of functools.partial
     implementation, positional-or-keyword arguments passed as keyword
     arguments become keyword-only.

   - bpo-20334(387): inspect.Signature and inspect.Parameter are now
     hashable.  Thanks to Antony Lee for bug reports and suggestions.

   - bpo-15916(388): doctest.DocTestSuite returns an empty
     unittest.TestSuite instead of raising ValueError if it finds no
     tests

   - bpo-21209(389): Fix asyncio.tasks.CoroWrapper to workaround a bug
     in yield-from implementation in CPythons prior to 3.4.1.

   - asyncio: Add gi_{frame,running,code} properties to CoroWrapper
     (upstream bpo-163(390)).

   - bpo-21311(391): Avoid exception in _osx_support with non-standard
     compiler configurations.  Patch by John Szakmeister.

   - bpo-11571(392): Ensure that the turtle window becomes the topmost
     window when launched on OS X.

   - bpo-21801(393): Validate that __signature__ is None or an instance
     of Signature.

   - bpo-21923(394): Prevent AttributeError in
     distutils.sysconfig.customize_compiler due to possible
     uninitialized _config_vars.

   - bpo-21323(395): Fix http.server to again handle scripts in CGI
     subdirectories, broken by the fix for security bpo-19435(396).
     Patch by Zach Byrne.

   - bpo-22733(397): Fix ffi_prep_args not zero-extending argument
     values correctly on 64-bit Windows.

   - bpo-23302(398): Default to TCP_NODELAY=1 upon establishing an
     HTTPConnection.  Removed use of hard-coded MSS as it’s an
     optimization that’s no longer needed with Nagle disabled.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23399

   (2) https://bugs.python.org/issue?@action=redirect&bpo=20289

   (3) https://bugs.python.org/issue?@action=redirect&bpo=13128

   (4) https://bugs.python.org/issue?@action=redirect&bpo=15381

   (5) https://bugs.python.org/issue?@action=redirect&bpo=22818

   (6) https://bugs.python.org/issue?@action=redirect&bpo=23099

   (7) https://bugs.python.org/issue?@action=redirect&bpo=23326

   (8) https://bugs.python.org/issue?@action=redirect&bpo=21408

   (9) https://bugs.python.org/issue?@action=redirect&bpo=23363

   (10) https://bugs.python.org/issue?@action=redirect&bpo=23364

   (11) https://bugs.python.org/issue?@action=redirect&bpo=23366

   (12) https://bugs.python.org/issue?@action=redirect&bpo=23369

   (13) https://bugs.python.org/issue?@action=redirect&bpo=23353

   (14) https://bugs.python.org/issue?@action=redirect&bpo=14099

   (15) https://bugs.python.org/issue?@action=redirect&bpo=14099

   (16) https://bugs.python.org/issue?@action=redirect&bpo=19361

   (17) https://bugs.python.org/issue?@action=redirect&bpo=18518

   (18) https://bugs.python.org/issue?@action=redirect&bpo=23094

   (19) https://bugs.python.org/issue?@action=redirect&bpo=23268

   (20) https://bugs.python.org/issue?@action=redirect&bpo=21408

   (21) https://bugs.python.org/issue?@action=redirect&bpo=19996

   (22) https://bugs.python.org/issue?@action=redirect&bpo=20188

   (23) https://bugs.python.org/issue?@action=redirect&bpo=23133

   (24) https://bugs.python.org/issue?@action=redirect&bpo=23248

   (25) https://bugs.python.org/issue?@action=redirect&bpo=23266

   (26) https://bugs.python.org/issue?@action=redirect&bpo=23098

   (27) https://bugs.python.org/issue?@action=redirect&bpo=21817

   (28) https://bugs.python.org/issue?@action=redirect&bpo=15955

   (29) https://bugs.python.org/issue?@action=redirect&bpo=23250

   (30) https://bugs.python.org/issue?@action=redirect&bpo=23063

   (31) https://bugs.python.org/issue?@action=redirect&bpo=23209

   (32) https://bugs.python.org/issue?@action=redirect&bpo=23225

   (33) https://bugs.python.org/issue?@action=redirect&bpo=17911

   (34) https://bugs.python.org/issue?@action=redirect&bpo=17911

   (35) https://bugs.python.org/issue?@action=redirect&bpo=19777

   (36) https://bugs.python.org/issue?@action=redirect&bpo=23206

   (37) https://bugs.python.org/issue?@action=redirect&bpo=23185

   (38) https://bugs.python.org/issue?@action=redirect&bpo=23186

   (39) https://bugs.python.org/issue?@action=redirect&bpo=23143

   (40) https://bugs.python.org/issue?@action=redirect&bpo=23132

   (41) https://bugs.python.org/issue?@action=redirect&bpo=19776

   (42) https://bugs.python.org/issue?@action=redirect&bpo=23112

   (43) https://bugs.python.org/issue?@action=redirect&bpo=21793

   (44) https://bugs.python.org/issue?@action=redirect&bpo=23093

   (45) https://bugs.python.org/issue?@action=redirect&bpo=23111

   (46) https://bugs.python.org/issue?@action=redirect&bpo=22585

   (47) https://bugs.python.org/issue?@action=redirect&bpo=19104

   (48) https://bugs.python.org/issue?@action=redirect&bpo=23071

   (49) https://bugs.python.org/issue?@action=redirect&bpo=22783

   (50) https://bugs.python.org/issue?@action=redirect&bpo=15513

   (51) https://bugs.python.org/issue?@action=redirect&bpo=19858

   (52) https://bugs.python.org/issue?@action=redirect&bpo=22095

   (53) https://bugs.python.org/issue?@action=redirect&bpo=23016

   (54) https://bugs.python.org/issue?@action=redirect&bpo=21775

   (55) https://bugs.python.org/issue?@action=redirect&bpo=1218234

   (56) https://bugs.python.org/issue?@action=redirect&bpo=21740

   (57) https://bugs.python.org/issue?@action=redirect&bpo=23009

   (58) https://bugs.python.org/issue?@action=redirect&bpo=22959

   (59) https://bugs.python.org/issue?@action=redirect&bpo=22696

   (60) https://bugs.python.org/issue?@action=redirect&bpo=16043

   (61) https://www.cve.org/CVERecord?id=CVE-2013-1753

   (62) https://bugs.python.org/issue?@action=redirect&bpo=14099

   (63) https://bugs.python.org/issue?@action=redirect&bpo=22966

   (64) https://bugs.python.org/issue?@action=redirect&bpo=21971

   (65) https://bugs.python.org/issue?@action=redirect&bpo=21032

   (66) https://bugs.python.org/issue?@action=redirect&bpo=22407

   (67) https://bugs.python.org/issue?@action=redirect&bpo=22902

   (68) https://bugs.python.org/issue?@action=redirect&bpo=22960

   (69) https://bugs.python.org/issue?@action=redirect&bpo=22389

   (70) https://bugs.python.org/issue?@action=redirect&bpo=21356

   (71) https://bugs.python.org/issue?@action=redirect&bpo=22915

   (72) https://bugs.python.org/issue?@action=redirect&bpo=22609

   (73) https://bugs.python.org/issue?@action=redirect&bpo=22940

   (74) https://bugs.python.org/issue?@action=redirect&bpo=19676

   (75) https://bugs.python.org/issue?@action=redirect&bpo=22788

   (76) https://bugs.python.org/issue?@action=redirect&bpo=22921

   (77) https://bugs.python.org/issue?@action=redirect&bpo=22894

   (78) https://bugs.python.org/issue?@action=redirect&bpo=22796

   (79) https://bugs.python.org/issue?@action=redirect&bpo=22370

   (80) https://bugs.python.org/issue?@action=redirect&bpo=22841

   (81) https://bugs.python.org/issue?@action=redirect&bpo=19494

   (82) https://bugs.python.org/issue?@action=redirect&bpo=22578

   (83) https://bugs.python.org/issue?@action=redirect&bpo=22849

   (84) https://bugs.python.org/issue?@action=redirect&bpo=12728

   (85) https://bugs.python.org/issue?@action=redirect&bpo=22821

   (86) https://bugs.python.org/issue?@action=redirect&bpo=21650

   (87) https://bugs.python.org/issue?@action=redirect&bpo=22824

   (88) https://bugs.python.org/issue?@action=redirect&bpo=22824

   (89) https://bugs.python.org/issue?@action=redirect&bpo=22406

   (90) https://bugs.python.org/issue?@action=redirect&bpo=17293

   (91) https://bugs.python.org/issue?@action=redirect&bpo=22769

   (92) https://bugs.python.org/issue?@action=redirect&bpo=22417

   (93) https://bugs.python.org/issue?@action=redirect&bpo=22775

   (94) https://bugs.python.org/issue?@action=redirect&bpo=22776

   (95) https://bugs.python.org/issue?@action=redirect&bpo=22665

   (96) https://bugs.python.org/issue?@action=redirect&bpo=6623

   (97) https://bugs.python.org/issue?@action=redirect&bpo=17381

   (98) https://bugs.python.org/issue?@action=redirect&bpo=22410

   (99) https://bugs.python.org/issue?@action=redirect&bpo=22759

   (100) https://bugs.python.org/issue?@action=redirect&bpo=8876

   (101) https://bugs.python.org/issue?@action=redirect&bpo=22217

   (102) https://bugs.python.org/issue?@action=redirect&bpo=22457

   (103) https://bugs.python.org/issue?@action=redirect&bpo=18216

   (104) https://bugs.python.org/issue?@action=redirect&bpo=13918

   (105) https://bugs.python.org/issue?@action=redirect&bpo=22676

   (106) https://bugs.python.org/issue?@action=redirect&bpo=18853

   (107) https://bugs.python.org/issue?@action=redirect&bpo=9351

   (108) https://bugs.python.org/issue?@action=redirect&bpo=7559

   (109) https://bugs.python.org/issue?@action=redirect&bpo=19746

   (110) https://bugs.python.org/issue?@action=redirect&bpo=21991

   (111) https://bugs.python.org/issue?@action=redirect&bpo=22638

   (112) https://bugs.python.org/issue?@action=redirect&bpo=22641

   (113) https://bugs.python.org/issue?@action=redirect&bpo=17401

   (114) https://bugs.python.org/issue?@action=redirect&bpo=21338

   (115) https://bugs.python.org/issue?@action=redirect&bpo=20152

   (116) https://bugs.python.org/issue?@action=redirect&bpo=18643

   (117) https://bugs.python.org/issue?@action=redirect&bpo=22435

   (118) https://bugs.python.org/issue?@action=redirect&bpo=13096

   (119) https://bugs.python.org/issue?@action=redirect&bpo=11694

   (120) https://bugs.python.org/issue?@action=redirect&bpo=19380

   (121) https://bugs.python.org/issue?@action=redirect&bpo=1519638

   (122) https://bugs.python.org/issue?@action=redirect&bpo=18615

   (123) https://bugs.python.org/issue?@action=redirect&bpo=22462

   (124) https://bugs.python.org/issue?@action=redirect&bpo=21965

   (125) https://bugs.python.org/issue?@action=redirect&bpo=21173

   (126) https://bugs.python.org/issue?@action=redirect&bpo=11866

   (127) https://bugs.python.org/issue?@action=redirect&bpo=21905

   (128) https://bugs.python.org/issue?@action=redirect&bpo=11271

   (129) https://bugs.python.org/issue?@action=redirect&bpo=21883

   (130) https://bugs.python.org/issue?@action=redirect&bpo=22219

   (131) https://bugs.python.org/issue?@action=redirect&bpo=22449

   (132) https://bugs.python.org/issue?@action=redirect&bpo=22508

   (133) https://bugs.python.org/issue?@action=redirect&bpo=20076

   (134) https://bugs.python.org/issue?@action=redirect&bpo=20079

   (135) https://bugs.python.org/issue?@action=redirect&bpo=20218

   (136) https://bugs.python.org/issue?@action=redirect&bpo=22396

   (137) https://bugs.python.org/issue?@action=redirect&bpo=22517

   (138) https://bugs.python.org/issue?@action=redirect&bpo=22437

   (139) https://bugs.python.org/issue?@action=redirect&bpo=17442

   (140) https://bugs.python.org/issue?@action=redirect&bpo=23392

   (141) https://bugs.python.org/issue?@action=redirect&bpo=10510

   (142) https://bugs.python.org/issue?@action=redirect&bpo=9850

   (143) https://bugs.python.org/issue?@action=redirect&bpo=5309

   (144) https://bugs.python.org/issue?@action=redirect&bpo=22448

   (145) https://bugs.python.org/issue?@action=redirect&bpo=22427

   (146) https://bugs.python.org/issue?@action=redirect&bpo=22362

   (147) https://bugs.python.org/issue?@action=redirect&bpo=20912

   (148) https://bugs.python.org/issue?@action=redirect&bpo=21866

   (149) https://bugs.python.org/issue?@action=redirect&bpo=22278

   (150) https://bugs.python.org/issue?@action=redirect&bpo=22415

   (151) https://bugs.python.org/issue?@action=redirect&bpo=22423

   (152) https://bugs.python.org/issue?@action=redirect&bpo=21332

   (153) https://bugs.python.org/issue?@action=redirect&bpo=21091

   (154) https://bugs.python.org/issue?@action=redirect&bpo=21079

   (155) https://bugs.python.org/issue?@action=redirect&bpo=22247

   (156) https://bugs.python.org/issue?@action=redirect&bpo=22366

   (157) https://bugs.python.org/issue?@action=redirect&bpo=4180

   (158) https://bugs.python.org/issue?@action=redirect&bpo=22419

   (159) https://bugs.python.org/issue?@action=redirect&bpo=20537

   (160) https://bugs.python.org/issue?@action=redirect&bpo=22384

   (161) https://bugs.python.org/issue?@action=redirect&bpo=22168

   (162) https://bugs.python.org/issue?@action=redirect&bpo=21147

   (163) https://bugs.python.org/issue?@action=redirect&bpo=13968

   (164) https://bugs.python.org/issue?@action=redirect&bpo=21951

   (165) https://bugs.python.org/issue?@action=redirect&bpo=21951

   (166) https://bugs.python.org/issue?@action=redirect&bpo=22338

   (167) https://bugs.python.org/issue?@action=redirect&bpo=12410

   (168) https://bugs.python.org/issue?@action=redirect&bpo=21270

   (169) https://bugs.python.org/issue?@action=redirect&bpo=16662

   (170) https://bugs.python.org/issue?@action=redirect&bpo=22226

   (171) https://bugs.python.org/issue?@action=redirect&bpo=19524

   (172) https://bugs.python.org/issue?@action=redirect&bpo=20421

   (173) https://bugs.python.org/issue?@action=redirect&bpo=19546

   (174) https://bugs.python.org/issue?@action=redirect&bpo=22051

   (175) https://bugs.python.org/issue?@action=redirect&bpo=21933

   (176) https://bugs.python.org/issue?@action=redirect&bpo=21597

   (177) https://bugs.python.org/issue?@action=redirect&bpo=18132

   (178) https://bugs.python.org/issue?@action=redirect&bpo=22043

   (179) https://bugs.python.org/issue?@action=redirect&bpo=21527

   (180) https://bugs.python.org/issue?@action=redirect&bpo=22216

   (181) https://bugs.python.org/issue?@action=redirect&bpo=22098

   (182) https://bugs.python.org/issue?@action=redirect&bpo=22185

   (183) https://bugs.python.org/issue?@action=redirect&bpo=22287

   (184) https://bugs.python.org/issue?@action=redirect&bpo=22182

   (185) https://bugs.python.org/issue?@action=redirect&bpo=22042

   (186) https://bugs.python.org/issue?@action=redirect&bpo=16808

   (187) https://bugs.python.org/issue?@action=redirect&bpo=22236

   (188) https://bugs.python.org/issue?@action=redirect&bpo=2527

   (189) https://bugs.python.org/issue?@action=redirect&bpo=22118

   (190) https://bugs.python.org/issue?@action=redirect&bpo=21549

   (191) https://bugs.python.org/issue?@action=redirect&bpo=19628

   (192) https://bugs.python.org/issue?@action=redirect&bpo=15696

   (193) https://bugs.python.org/issue?@action=redirect&bpo=22068

   (194) https://bugs.python.org/issue?@action=redirect&bpo=22165

   (195) https://bugs.python.org/issue?@action=redirect&bpo=15381

   (196) https://bugs.python.org/issue?@action=redirect&bpo=8797

   (197) https://bugs.python.org/issue?@action=redirect&bpo=20729

   (198) https://bugs.python.org/issue?@action=redirect&bpo=21448

   (199) https://bugs.python.org/issue?@action=redirect&bpo=22184

   (200) https://bugs.python.org/issue?@action=redirect&bpo=17923

   (201) https://bugs.python.org/issue?@action=redirect&bpo=21725

   (202) https://bugs.python.org/issue?@action=redirect&bpo=22176

   (203) https://bugs.python.org/issue?@action=redirect&bpo=5411

   (204) https://bugs.python.org/issue?@action=redirect&bpo=21121

   (205) https://bugs.python.org/issue?@action=redirect&bpo=21975

   (206) https://bugs.python.org/issue?@action=redirect&bpo=20170

   (207) https://bugs.python.org/issue?@action=redirect&bpo=21539

   (208) https://bugs.python.org/issue?@action=redirect&bpo=22127

   (209) https://bugs.python.org/issue?@action=redirect&bpo=21047

   (210) https://bugs.python.org/issue?@action=redirect&bpo=15114

   (211) https://bugs.python.org/issue?@action=redirect&bpo=22085

   (212) https://bugs.python.org/issue?@action=redirect&bpo=21580

   (213) https://bugs.python.org/issue?@action=redirect&bpo=22003

   (214) https://bugs.python.org/issue?@action=redirect&bpo=22018

   (215) https://bugs.python.org/issue?@action=redirect&bpo=22054

   (216) https://bugs.python.org/issue?@action=redirect&bpo=17172

   (217) https://bugs.python.org/issue?@action=redirect&bpo=21704

   (218) https://bugs.python.org/issue?@action=redirect&bpo=20173

   (219) https://bugs.python.org/issue?@action=redirect&bpo=22033

   (220) https://bugs.python.org/issue?@action=redirect&bpo=21947

   (221) https://bugs.python.org/issue?@action=redirect&bpo=16133

   (222) https://bugs.python.org/issue?@action=redirect&bpo=22044

   (223) https://bugs.python.org/issue?@action=redirect&bpo=19884

   (224) https://bugs.python.org/issue?@action=redirect&bpo=4350

   (225) https://bugs.python.org/issue?@action=redirect&bpo=6167

   (226) https://bugs.python.org/issue?@action=redirect&bpo=15275

   (227) https://bugs.python.org/issue?@action=redirect&bpo=21888

   (228) https://bugs.python.org/issue?@action=redirect&bpo=22032

   (229) https://bugs.python.org/issue?@action=redirect&bpo=22031

   (230) https://bugs.python.org/issue?@action=redirect&bpo=22018

   (231) https://bugs.python.org/issue?@action=redirect&bpo=21044

   (232) https://bugs.python.org/issue?@action=redirect&bpo=21966

   (233) https://bugs.python.org/issue?@action=redirect&bpo=19076

   (234) https://bugs.python.org/issue?@action=redirect&bpo=16382

   (235) https://bugs.python.org/issue?@action=redirect&bpo=21932

   (236) https://bugs.python.org/issue?@action=redirect&bpo=21942

   (237) https://bugs.python.org/issue?@action=redirect&bpo=11259

   (238) https://bugs.python.org/issue?@action=redirect&bpo=12523

   (239) https://bugs.python.org/issue?@action=redirect&bpo=21707

   (240) https://bugs.python.org/issue?@action=redirect&bpo=20639

   (241) https://bugs.python.org/issue?@action=redirect&bpo=21714

   (242) https://bugs.python.org/issue?@action=redirect&bpo=15014

   (243) https://bugs.python.org/issue?@action=redirect&bpo=21151

   (244) https://bugs.python.org/issue?@action=redirect&bpo=21090

   (245) https://bugs.python.org/issue?@action=redirect&bpo=5800

   (246) https://bugs.python.org/issue?@action=redirect&bpo=21781

   (247) https://bugs.python.org/issue?@action=redirect&bpo=21679

   (248) https://bugs.python.org/issue?@action=redirect&bpo=21863

   (249) https://bugs.python.org/issue?@action=redirect&bpo=11453

   (250) https://bugs.python.org/issue?@action=redirect&bpo=21858

   (251) https://bugs.python.org/issue?@action=redirect&bpo=21476

   (252) https://bugs.python.org/issue?@action=redirect&bpo=20295

   (253) https://bugs.python.org/issue?@action=redirect&bpo=21729

   (254) https://bugs.python.org/issue?@action=redirect&bpo=21491

   (255) https://bugs.python.org/issue?@action=redirect&bpo=21719

   (256) https://bugs.python.org/issue?@action=redirect&bpo=21832

   (257) https://bugs.python.org/issue?@action=redirect&bpo=21722

   (258) https://bugs.python.org/issue?@action=redirect&bpo=21723

   (259) https://bugs.python.org/issue?@action=redirect&bpo=21711

   (260) https://bugs.python.org/issue?@action=redirect&bpo=17552

   (261) https://bugs.python.org/issue?@action=redirect&bpo=18039

   (262) https://bugs.python.org/issue?@action=redirect&bpo=21326

   (263) https://bugs.python.org/issue?@action=redirect&bpo=21766

   (264) https://bugs.python.org/issue?@action=redirect&bpo=21310

   (265) https://bugs.python.org/issue?@action=redirect&bpo=21256

   (266) https://bugs.python.org/issue?@action=redirect&bpo=21677

   (267) https://bugs.python.org/issue?@action=redirect&bpo=11709

   (268) https://bugs.python.org/issue?@action=redirect&bpo=21515

   (269) https://bugs.python.org/issue?@action=redirect&bpo=13223

   (270) https://bugs.python.org/issue?@action=redirect&bpo=21463

   (271) https://bugs.python.org/issue?@action=redirect&bpo=21618

   (272) https://bugs.python.org/issue?@action=redirect&bpo=20383

   (273) https://bugs.python.org/issue?@action=redirect&bpo=21552

   (274) https://bugs.python.org/issue?@action=redirect&bpo=14315

   (275) https://bugs.python.org/issue?@action=redirect&bpo=13742

   (276) https://bugs.python.org/issue?@action=redirect&bpo=21402

   (277) https://bugs.python.org/issue?@action=redirect&bpo=3015

   (278) https://bugs.python.org/issue?@action=redirect&bpo=10203

   (279) https://bugs.python.org/issue?@action=redirect&bpo=18807

   (280) https://bugs.python.org/issue?@action=redirect&bpo=20197

   (281) https://bugs.python.org/issue?@action=redirect&bpo=21513

   (282) https://bugs.python.org/issue?@action=redirect&bpo=21137

   (283) https://bugs.python.org/issue?@action=redirect&bpo=21538

   (284) https://bugs.python.org/issue?@action=redirect&bpo=21455

   (285) https://bugs.python.org/issue?@action=redirect&bpo=21525

   (286) https://bugs.python.org/issue?@action=redirect&bpo=22166

   (287) https://bugs.python.org/issue?@action=redirect&bpo=22236

   (288) https://bugs.python.org/issue?@action=redirect&bpo=10744

   (289) https://peps.python.org/pep-3118/

   (290) https://bugs.python.org/issue?@action=redirect&bpo=20826

   (291) https://bugs.python.org/issue?@action=redirect&bpo=21487

   (292) https://bugs.python.org/issue?@action=redirect&bpo=21486

   (293) https://bugs.python.org/issue?@action=redirect&bpo=13916

   (294) https://bugs.python.org/issue?@action=redirect&bpo=20998

   (295) https://bugs.python.org/issue?@action=redirect&bpo=21075

   (296) https://bugs.python.org/issue?@action=redirect&bpo=19775

   (297) https://bugs.python.org/issue?@action=redirect&bpo=21226

   (298) https://bugs.python.org/issue?@action=redirect&bpo=21398

   (299) https://bugs.python.org/issue?@action=redirect&bpo=16531

   (300) https://bugs.python.org/issue?@action=redirect&bpo=21156

   (301) https://bugs.python.org/issue?@action=redirect&bpo=21424

   (302) https://bugs.python.org/issue?@action=redirect&bpo=21396

   (303) https://bugs.python.org/issue?@action=redirect&bpo=18314

   (304) https://bugs.python.org/issue?@action=redirect&bpo=21088

   (305) https://bugs.python.org/issue?@action=redirect&bpo=21407

   (306) https://bugs.python.org/issue?@action=redirect&bpo=10650

   (307) https://bugs.python.org/issue?@action=redirect&bpo=21469

   (308) https://bugs.python.org/issue?@action=redirect&bpo=19414

   (309) https://bugs.python.org/issue?@action=redirect&bpo=21421

   (310) https://bugs.python.org/issue?@action=redirect&bpo=21101

   (311) https://bugs.python.org/issue?@action=redirect&bpo=21321

   (312) https://bugs.python.org/issue?@action=redirect&bpo=21057

   (313) https://bugs.python.org/issue?@action=redirect&bpo=20951

   (314) https://bugs.python.org/issue?@action=redirect&bpo=13248

   (315) https://bugs.python.org/issue?@action=redirect&bpo=9815

   (316) https://bugs.python.org/issue?@action=redirect&bpo=19940

   (317) https://bugs.python.org/issue?@action=redirect&bpo=13204

   (318) https://bugs.python.org/issue?@action=redirect&bpo=19385

   (319) https://bugs.python.org/issue?@action=redirect&bpo=21207

   (320) https://bugs.python.org/issue?@action=redirect&bpo=21291

   (321) https://bugs.python.org/issue?@action=redirect&bpo=21127

   (322) https://bugs.python.org/issue?@action=redirect&bpo=15002

   (323) https://bugs.python.org/issue?@action=redirect&bpo=12220

   (324) https://bugs.python.org/issue?@action=redirect&bpo=21068

   (325) https://bugs.python.org/issue?@action=redirect&bpo=21276

   (326) https://bugs.python.org/issue?@action=redirect&bpo=21262

   (327) https://bugs.python.org/issue?@action=redirect&bpo=21238

   (328) https://bugs.python.org/issue?@action=redirect&bpo=20896

   (329) https://bugs.python.org/issue?@action=redirect&bpo=21239

   (330) https://bugs.python.org/issue?@action=redirect&bpo=21203

   (331) https://bugs.python.org/issue?@action=redirect&bpo=21222

   (332) https://bugs.python.org/issue?@action=redirect&bpo=21197

   (333) https://bugs.python.org/issue?@action=redirect&bpo=17498

   (334) https://bugs.python.org/issue?@action=redirect&bpo=17826

   (335) https://bugs.python.org/issue?@action=redirect&bpo=7776

   (336) https://bugs.python.org/issue?@action=redirect&bpo=20968

   (337) https://bugs.python.org/issue?@action=redirect&bpo=21529

   (338) https://www.cve.org/CVERecord?id=CVE-2014-4616

   (339) https://bugs.python.org/issue?@action=redirect&bpo=21169

   (340) https://bugs.python.org/issue?@action=redirect&bpo=21171

   (341) https://bugs.python.org/issue?@action=redirect&bpo=20539

   (342) https://bugs.python.org/issue?@action=redirect&bpo=21172

   (343) https://bugs.python.org/issue?@action=redirect&bpo=21155

   (344) https://bugs.python.org/issue?@action=redirect&bpo=21136

   (345) https://bugs.python.org/issue?@action=redirect&bpo=17621

   (346) https://bugs.python.org/issue?@action=redirect&bpo=21076

   (347) https://bugs.python.org/issue?@action=redirect&bpo=20636

   (348) https://bugs.python.org/issue?@action=redirect&bpo=19505

   (349) https://bugs.python.org/issue?@action=redirect&bpo=21149

   (350) https://bugs.python.org/issue?@action=redirect&bpo=21058

   (351) https://bugs.python.org/issue?@action=redirect&bpo=21200

   (352) https://bugs.python.org/issue?@action=redirect&bpo=21013

   (353) https://bugs.python.org/issue?@action=redirect&bpo=20145

   (354) https://bugs.python.org/issue?@action=redirect&bpo=20633

   (355) https://bugs.python.org/issue?@action=redirect&bpo=20980

   (356) https://bugs.python.org/issue?@action=redirect&bpo=21082

   (357) https://bugs.python.org/issue?@action=redirect&bpo=20990

   (358) https://bugs.python.org/issue?@action=redirect&bpo=21015

   (359) https://bugs.python.org/issue?@action=redirect&bpo=21000

   (360) https://bugs.python.org/issue?@action=redirect&bpo=20995

   (361) https://bugs.python.org/issue?@action=redirect&bpo=20884

   (362) https://bugs.python.org/issue?@action=redirect&bpo=21499

   (363) https://bugs.python.org/issue?@action=redirect&bpo=20627

   (364) https://bugs.python.org/issue?@action=redirect&bpo=19165

   (365) https://bugs.python.org/issue?@action=redirect&bpo=13936

   (366) https://bugs.python.org/issue?@action=redirect&bpo=18931

   (367) https://bugs.python.org/issue?@action=redirect&bpo=19977

   (368) https://bugs.python.org/issue?@action=redirect&bpo=20574

   (369) https://bugs.python.org/issue?@action=redirect&bpo=20879

   (370) https://bugs.python.org/issue?@action=redirect&bpo=19157

   (371) https://bugs.python.org/issue?@action=redirect&bpo=11599

   (372) https://bugs.python.org/issue?@action=redirect&bpo=4931

   (373) https://bugs.python.org/issue?@action=redirect&bpo=20875

   (374) https://bugs.python.org/issue?@action=redirect&bpo=11558

   (375) https://bugs.python.org/issue?@action=redirect&bpo=20283

   (376) https://bugs.python.org/issue?@action=redirect&bpo=20778

   (377) https://bugs.python.org/issue?@action=redirect&bpo=20791

   (378) https://bugs.python.org/issue?@action=redirect&bpo=19748

   (379) https://bugs.python.org/issue?@action=redirect&bpo=19573

   (380) https://bugs.python.org/issue?@action=redirect&bpo=20726

   (381) https://bugs.python.org/issue?@action=redirect&bpo=17373

   (382) https://bugs.python.org/issue?@action=redirect&bpo=20378

   (383) https://bugs.python.org/issue?@action=redirect&bpo=20816

   (384) https://bugs.python.org/issue?@action=redirect&bpo=20817

   (385) https://bugs.python.org/issue?@action=redirect&bpo=6676

   (386) https://bugs.python.org/issue?@action=redirect&bpo=21117

   (387) https://bugs.python.org/issue?@action=redirect&bpo=20334

   (388) https://bugs.python.org/issue?@action=redirect&bpo=15916

   (389) https://bugs.python.org/issue?@action=redirect&bpo=21209

   (390) https://bugs.python.org/issue?@action=redirect&bpo=163

   (391) https://bugs.python.org/issue?@action=redirect&bpo=21311

   (392) https://bugs.python.org/issue?@action=redirect&bpo=11571

   (393) https://bugs.python.org/issue?@action=redirect&bpo=21801

   (394) https://bugs.python.org/issue?@action=redirect&bpo=21923

   (395) https://bugs.python.org/issue?@action=redirect&bpo=21323

   (396) https://bugs.python.org/issue?@action=redirect&bpo=19435

   (397) https://bugs.python.org/issue?@action=redirect&bpo=22733

   (398) https://bugs.python.org/issue?@action=redirect&bpo=23302


File: python.info,  Node: IDLE<67>,  Next: Construção<98>,  Prev: Biblioteca<182>,  Up: Python 3 5 0 alpha 1

1.23.120.3 IDLE
...............

   - bpo-20577(1): Configuration of the max line length for the
     FormatParagraph extension has been moved from the General tab of
     the Idle preferences dialog to the FormatParagraph tab of the
     Config Extensions dialog.  Patch by Tal Einat.

   - bpo-16893(2): Update Idle doc chapter to match current Idle and add
     new information.

   - bpo-3068(3): Add Idle extension configuration dialog to Options
     menu.  Changes are written to HOME/.idlerc/config-extensions.cfg.
     Original patch by Tal Einat.

   - bpo-16233(4): A module browser (File : Class Browser, Alt+C)
     requires an editor window with a filename.  When Class Browser is
     requested otherwise, from a shell, output window, or ‘Untitled’
     editor, Idle no longer displays an error box.  It now pops up an
     Open Module box (Alt+M). If a valid name is entered and a module is
     opened, a corresponding browser is also opened.

   - bpo-4832(5): Save As to type Python files automatically adds .py to
     the name you enter (even if your system does not display it).  Some
     systems automatically add .txt when type is Text files.

   - bpo-21986(6): Code objects are not normally pickled by the pickle
     module.  To match this, they are no longer pickled when running
     under Idle.

   - bpo-17390(7): Adjust Editor window title; remove ‘Python’, move
     version to end.

   - bpo-14105(8): Idle debugger breakpoints no longer disappear when
     inserting or deleting lines.

   - bpo-17172(9): Turtledemo can now be run from Idle.  Currently, the
     entry is on the Help menu, but it may move to Run.  Patch by
     Ramchandra Apt and Lita Cho.

   - bpo-21765(10): Add support for non-ascii identifiers to
     HyperParser.

   - bpo-21940(11): Add unittest for WidgetRedirector.  Initial patch by
     Saimadhav Heblikar.

   - bpo-18592(12): Add unittest for SearchDialogBase.  Patch by Phil
     Webster.

   - bpo-21694(13): Add unittest for ParenMatch.  Patch by Saimadhav
     Heblikar.

   - bpo-21686(14): add unittest for HyperParser.  Original patch by
     Saimadhav Heblikar.

   - bpo-12387(15): Add missing upper(lower)case versions of default
     Windows key bindings for Idle so Caps Lock does not disable them.
     Patch by Roger Serwy.

   - bpo-21695(16): Closing a Find-in-files output window while the
     search is still in progress no longer closes Idle.

   - bpo-18910(17): Add unittest for textView.  Patch by Phil Webster.

   - bpo-18292(18): Add unittest for AutoExpand.  Patch by Saihadhav
     Heblikar.

   - bpo-18409(19): Add unittest for AutoComplete.  Patch by Phil
     Webster.

   - bpo-21477(20): htest.py - Improve framework, complete set of tests.
     Patches by Saimadhav Heblikar

   - bpo-18104(21): Add idlelib/idle_test/htest.py with a few sample
     tests to begin consolidating and improving human-validated tests of
     Idle.  Change other files as needed to work with htest.  Running
     the module as __main__ runs all tests.

   - bpo-21139(22): Change default paragraph width to 72, the PEP 8(23)
     recommendation.

   - bpo-21284(24): Paragraph reformat test passes after user changes
     reformat width.

   - bpo-17654(25): Ensure IDLE menus are customized properly on OS X
     for non-framework builds and for all variants of Tk.

   - bpo-23180(26): Rename IDLE “Windows” menu item to “Window”.  Patch
     by Al Sweigart.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=20577

   (2) https://bugs.python.org/issue?@action=redirect&bpo=16893

   (3) https://bugs.python.org/issue?@action=redirect&bpo=3068

   (4) https://bugs.python.org/issue?@action=redirect&bpo=16233

   (5) https://bugs.python.org/issue?@action=redirect&bpo=4832

   (6) https://bugs.python.org/issue?@action=redirect&bpo=21986

   (7) https://bugs.python.org/issue?@action=redirect&bpo=17390

   (8) https://bugs.python.org/issue?@action=redirect&bpo=14105

   (9) https://bugs.python.org/issue?@action=redirect&bpo=17172

   (10) https://bugs.python.org/issue?@action=redirect&bpo=21765

   (11) https://bugs.python.org/issue?@action=redirect&bpo=21940

   (12) https://bugs.python.org/issue?@action=redirect&bpo=18592

   (13) https://bugs.python.org/issue?@action=redirect&bpo=21694

   (14) https://bugs.python.org/issue?@action=redirect&bpo=21686

   (15) https://bugs.python.org/issue?@action=redirect&bpo=12387

   (16) https://bugs.python.org/issue?@action=redirect&bpo=21695

   (17) https://bugs.python.org/issue?@action=redirect&bpo=18910

   (18) https://bugs.python.org/issue?@action=redirect&bpo=18292

   (19) https://bugs.python.org/issue?@action=redirect&bpo=18409

   (20) https://bugs.python.org/issue?@action=redirect&bpo=21477

   (21) https://bugs.python.org/issue?@action=redirect&bpo=18104

   (22) https://bugs.python.org/issue?@action=redirect&bpo=21139

   (23) https://peps.python.org/pep-0008/

   (24) https://bugs.python.org/issue?@action=redirect&bpo=21284

   (25) https://bugs.python.org/issue?@action=redirect&bpo=17654

   (26) https://bugs.python.org/issue?@action=redirect&bpo=23180


File: python.info,  Node: Construção<98>,  Next: API C<78>,  Prev: IDLE<67>,  Up: Python 3 5 0 alpha 1

1.23.120.4 Construção
.....................

   - bpo-15506(1): Use standard PKG_PROG_PKG_CONFIG autoconf macro in
     the configure script.

   - bpo-22935(2): Allow the ssl module to be compiled if openssl
     doesn’t support SSL 3.

   - bpo-22592(3): Drop support of the Borland C compiler to build
     Python.  The distutils module still supports it to build
     extensions.

   - bpo-22591(4): Drop support of MS-DOS, especially of the DJGPP
     compiler (MS-DOS port of GCC).

   - bpo-16537(5): Check whether self.extensions is empty in setup.py.
     Patch by Jonathan Hosmer.

   - bpo-22359(6): Remove incorrect uses of recursive make.  Patch by
     Jonas Wagner.

   - bpo-21958(7): Define HAVE_ROUND when building with Visual Studio
     2013 and above.  Patch by Zachary Turner.

   - bpo-18093(8): the programs that embed the CPython runtime are now
     in a separate “Programs” directory, rather than being kept in the
     Modules directory.

   - bpo-15759(9): “make suspicious”, “make linkcheck” and “make
     doctest” in Doc/ now display special message when and only when
     there are failures.

   - bpo-21141(10): The Windows build process no longer attempts to find
     Perl, instead relying on OpenSSL source being configured and ready
     to build.  The ‘PCbuild\build_ssl.py’ script has been re-written
     and re-named to ‘PCbuild\prepare_ssl.py’, and takes care of
     configuring OpenSSL source for both 32 and 64 bit platforms.
     OpenSSL sources obtained from svn.python.org will always be
     pre-configured and ready to build.

   - bpo-21037(11): Add a build option to enable AddressSanitizer
     support.

   - bpo-19962(12): The Windows build process now creates “python.bat”
     in the root of the source tree, which passes all arguments through
     to the most recently built interpreter.

   - bpo-21285(13): Refactor and fix curses configure check to always
     search in a ncursesw directory.

   - bpo-15234(14): For BerkeleyDB and Sqlite, only add the found
     library and include directories if they aren’t already being
     searched.  This avoids an explicit runtime library dependency.

   - bpo-17861(15): Tools/scripts/generate_opcode_h.py automatically
     regenerates Include/opcode.h from Lib/opcode.py if the latter gets
     any change.

   - bpo-20644(16): OS X installer build support for documentation build
     changes in 3.4.1: assume externally supplied sphinx-build is
     available in /usr/bin.

   - bpo-20022(17): Eliminate use of deprecated bundlebuilder in OS X
     builds.

   - bpo-15968(18): Incorporated Tcl, Tk, and Tix builds into the
     Windows build solution.

   - bpo-17095(19): Fix Modules/Setup 'shared' support.

   - bpo-21811(20): Anticipated fixes to support OS X versions > 10.9.

   - bpo-21166(21): Prevent possible segfaults and other random failures
     of python –generate-posix-vars in pybuilddir.txt build target.

   - bpo-18096(22): Fix library order returned by python-config.

   - bpo-17219(23): Add library build dir for Python extension
     cross-builds.

   - bpo-22919(24): Windows build updated to support VC 14.0 (Visual
     Studio 2015), which will be used for the official release.

   - bpo-21236(25): Build _msi.pyd with cabinet.lib instead of fci.lib

   - bpo-17128(26): Use private version of OpenSSL for OS X 10.5+
     installer.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=15506

   (2) https://bugs.python.org/issue?@action=redirect&bpo=22935

   (3) https://bugs.python.org/issue?@action=redirect&bpo=22592

   (4) https://bugs.python.org/issue?@action=redirect&bpo=22591

   (5) https://bugs.python.org/issue?@action=redirect&bpo=16537

   (6) https://bugs.python.org/issue?@action=redirect&bpo=22359

   (7) https://bugs.python.org/issue?@action=redirect&bpo=21958

   (8) https://bugs.python.org/issue?@action=redirect&bpo=18093

   (9) https://bugs.python.org/issue?@action=redirect&bpo=15759

   (10) https://bugs.python.org/issue?@action=redirect&bpo=21141

   (11) https://bugs.python.org/issue?@action=redirect&bpo=21037

   (12) https://bugs.python.org/issue?@action=redirect&bpo=19962

   (13) https://bugs.python.org/issue?@action=redirect&bpo=21285

   (14) https://bugs.python.org/issue?@action=redirect&bpo=15234

   (15) https://bugs.python.org/issue?@action=redirect&bpo=17861

   (16) https://bugs.python.org/issue?@action=redirect&bpo=20644

   (17) https://bugs.python.org/issue?@action=redirect&bpo=20022

   (18) https://bugs.python.org/issue?@action=redirect&bpo=15968

   (19) https://bugs.python.org/issue?@action=redirect&bpo=17095

   (20) https://bugs.python.org/issue?@action=redirect&bpo=21811

   (21) https://bugs.python.org/issue?@action=redirect&bpo=21166

   (22) https://bugs.python.org/issue?@action=redirect&bpo=18096

   (23) https://bugs.python.org/issue?@action=redirect&bpo=17219

   (24) https://bugs.python.org/issue?@action=redirect&bpo=22919

   (25) https://bugs.python.org/issue?@action=redirect&bpo=21236

   (26) https://bugs.python.org/issue?@action=redirect&bpo=17128


File: python.info,  Node: API C<78>,  Next: Documentação<81>,  Prev: Construção<98>,  Up: Python 3 5 0 alpha 1

1.23.120.5 API C
................

   - bpo-14203(1): Remove obsolete support for view==NULL in
     PyBuffer_FillInfo(), bytearray_getbuffer(), bytesiobuf_getbuffer()
     and array_buffer_getbuf().  All functions now raise BufferError in
     that case.

   - bpo-22445(2): PyBuffer_IsContiguous() now implements precise
     contiguity tests, compatible with NumPy’s
     NPY_RELAXED_STRIDES_CHECKING compilation flag.  Previously the
     function reported false negatives for corner cases.

   - bpo-22079(3): PyType_Ready() now checks that statically allocated
     type has no dynamically allocated bases.

   - bpo-22453(4): Removed non-documented macro PyObject_REPR().

   - bpo-18395(5): Rename ‘_Py_char2wchar()’ to *note Py_DecodeLocale():
     be0, rename ‘_Py_wchar2char()’ to *note Py_EncodeLocale(): be1, and
     document these functions.

   - bpo-21233(6): Add new C functions: PyMem_RawCalloc(),
     PyMem_Calloc(), PyObject_Calloc(), _PyObject_GC_Calloc().
     bytes(int) is now using ‘calloc()’ instead of ‘malloc()’ for large
     objects which is faster and use less memory.

   - bpo-20942(7): PyImport_ImportFrozenModuleObject() no longer sets
     __file__ to match what importlib does; this affects
     _frozen_importlib as well as any module loaded using
     imp.init_frozen().

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=14203

   (2) https://bugs.python.org/issue?@action=redirect&bpo=22445

   (3) https://bugs.python.org/issue?@action=redirect&bpo=22079

   (4) https://bugs.python.org/issue?@action=redirect&bpo=22453

   (5) https://bugs.python.org/issue?@action=redirect&bpo=18395

   (6) https://bugs.python.org/issue?@action=redirect&bpo=21233

   (7) https://bugs.python.org/issue?@action=redirect&bpo=20942


File: python.info,  Node: Documentação<81>,  Next: Testes<89>,  Prev: API C<78>,  Up: Python 3 5 0 alpha 1

1.23.120.6 Documentação
.......................

   - bpo-19548(1): Update the codecs module documentation to better
     cover the distinction between text encodings and other codecs,
     together with other clarifications.  Patch by Martin Panter.

   - bpo-22394(2): Doc/Makefile now supports ‘make venv
     PYTHON=../python’ to create a venv for generating the
     documentation, e.g., ‘make html PYTHON=venv/bin/python3’.

   - bpo-21514(3): The documentation of the json module now refers to
     new JSON RFC 7159 instead of obsoleted RFC 4627.

   - bpo-21777(4): The binary sequence methods on bytes and bytearray
     are now documented explicitly, rather than assuming users will be
     able to derive the expected behaviour from the behaviour of the
     corresponding str methods.

   - bpo-6916(5): remove documentação da classe asynchat.fifo
     descontinuada.

   - bpo-17386(6): Expandida a funcionalidade do script ‘Doc/make.bat’
     para fazê-lo muito mais comparável a ‘Doc/Makefile’.

   - bpo-21312(7): Update the thread_foobar.h template file to include
     newer threading APIs.  Patch by Jack McCracken.

   - bpo-21043(8): Remove the recommendation for specific CA
     organizations and to mention the ability to load the OS
     certificates.

   - bpo-20765(9): Adiciona documentação faltante para
     PurePath.with_name() e PurePath.with_suffix().

   - bpo-19407(10): New package installation and distribution guides
     based on the Python Packaging Authority tools.  Existing guides
     have been retained as legacy links from the distutils docs, as they
     still contain some required reference material for tool developers
     that isn’t recorded anywhere else.

   - bpo-19697(11): Documenta casos em que __main__.__spec__ é None.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=19548

   (2) https://bugs.python.org/issue?@action=redirect&bpo=22394

   (3) https://bugs.python.org/issue?@action=redirect&bpo=21514

   (4) https://bugs.python.org/issue?@action=redirect&bpo=21777

   (5) https://bugs.python.org/issue?@action=redirect&bpo=6916

   (6) https://bugs.python.org/issue?@action=redirect&bpo=17386

   (7) https://bugs.python.org/issue?@action=redirect&bpo=21312

   (8) https://bugs.python.org/issue?@action=redirect&bpo=21043

   (9) https://bugs.python.org/issue?@action=redirect&bpo=20765

   (10) https://bugs.python.org/issue?@action=redirect&bpo=19407

   (11) https://bugs.python.org/issue?@action=redirect&bpo=19697


File: python.info,  Node: Testes<89>,  Next: Ferramentas/Demos<54>,  Prev: Documentação<81>,  Up: Python 3 5 0 alpha 1

1.23.120.7 Testes
.................

   - bpo-18982(1): Adiciona testes para ILC do módulo calendar.

   - bpo-19548(2): Added some additional checks to test_codecs to ensure
     that statements in the updated documentation remain accurate.
     Patch by Martin Panter.

   - bpo-22838(3): All test_re tests now work with unittest test
     discovery.

   - bpo-22173(4): Update lib2to3 tests to use unittest test discovery.

   - bpo-16000(5): Convert test_curses to use unittest.

   - bpo-21456(6): Skip two tests in test_urllib2net.py if _ssl module
     not present.  Patch by Remi Pointel.

   - bpo-20746(7): Fix test_pdb to run in refleak mode (-R). Patch by
     Xavier de Gaye.

   - bpo-22060(8): test_ctypes has been somewhat cleaned up and
     simplified; it now uses unittest test discovery to find its tests.

   - bpo-22104(9): regrtest.py no longer holds a reference to the suite
     of tests loaded from test modules that don’t define test_main().

   - bpo-22111(10): Assorted cleanups in test_imaplib.  Patch by Milan
     Oberkirch.

   - bpo-22002(11): Added ‘load_package_tests’ function to test.support
     and used it to implement/augment test discovery in test_asyncio,
     test_email, test_importlib, test_json, and test_tools.

   - bpo-21976(12): Fix test_ssl to accept LibreSSL version strings.
     Thanks to William Orr.

   - bpo-21918(13): Converted test_tools from a module to a package
     containing separate test files for each tested script.

   - bpo-9554(14): Use modern unittest features in test_argparse.
     Initial patch by Denver Coneybeare and Radu Voicilas.

   - bpo-20155(15): Changed HTTP method names in failing tests in
     test_httpservers so that packet filtering software (specifically
     Windows Base Filtering Engine) does not interfere with the
     transaction semantics expected by the tests.

   - bpo-19493(16): Refactored the ctypes test package to skip tests
     explicitly rather than silently.

   - bpo-18492(17): All resources are now allowed when tests are not run
     by regrtest.py.

   - bpo-21634(18): Fix pystone micro-benchmark: use floor division
     instead of true division to benchmark integers instead of
     floating-point numbers.  Set pystone version to 1.2.  Patch written
     by Lennart Regebro.

   - bpo-21605(19): Added tests for Tkinter images.

   - bpo-21493(20): Added test for ntpath.expanduser().  Original patch
     by Claudiu Popa.

   - bpo-19925(21): Added tests for the spwd module.  Original patch by
     Vajrasky Kok.

   - bpo-21522(22): Added Tkinter tests for Listbox.itemconfigure(),
     PanedWindow.paneconfigure(), and Menu.entryconfigure().

   - bpo-17756(23): Fix test_code test when run from the installed
     location.

   - bpo-17752(24): Fix distutils tests when run from the installed
     location.

   - bpo-18604(25): Consolidated checks for GUI availability.  All
     platforms now at least check whether Tk can be instantiated when
     the GUI resource is requested.

   - bpo-21275(26): Fix a socket test on KFreeBSD.

   - bpo-21223(27): Pass test_site/test_startup_imports when some of the
     extensions are built as builtins.

   - bpo-20635(28): Added tests for Tk geometry managers.

   - Add test case for freeze.

   - bpo-20743(29): Fix a reference leak in test_tcl.

   - bpo-21097(30): Move test_namespace_pkgs into test_importlib.

   - bpo-21503(31): Use test_both() consistently in test_importlib.

   - bpo-20939(32): Avoid various network test failures due to new
     redirect of ‘http://www.python.org/’ to ‘https://www.python.org’:
     use ‘http://www.example.com’ instead.

   - bpo-20668(33): asyncio tests no longer rely on tests.txt file.
     (Patch by Vajrasky Kok)

   - bpo-21093(34): Prevent failures of ctypes test_macholib on OS X if
     a copy of libz exists in $HOME/lib or /usr/local/lib.

   - bpo-22770(35): Prevent some Tk segfaults on OS X when running gui
     tests.

   - bpo-23211(36): Workaround test_logging failure on some OS X 10.6
     systems.

   - bpo-23345(37): Prevent test_ssl failures with large OpenSSL patch
     level values (like 0.9.8zc).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18982

   (2) https://bugs.python.org/issue?@action=redirect&bpo=19548

   (3) https://bugs.python.org/issue?@action=redirect&bpo=22838

   (4) https://bugs.python.org/issue?@action=redirect&bpo=22173

   (5) https://bugs.python.org/issue?@action=redirect&bpo=16000

   (6) https://bugs.python.org/issue?@action=redirect&bpo=21456

   (7) https://bugs.python.org/issue?@action=redirect&bpo=20746

   (8) https://bugs.python.org/issue?@action=redirect&bpo=22060

   (9) https://bugs.python.org/issue?@action=redirect&bpo=22104

   (10) https://bugs.python.org/issue?@action=redirect&bpo=22111

   (11) https://bugs.python.org/issue?@action=redirect&bpo=22002

   (12) https://bugs.python.org/issue?@action=redirect&bpo=21976

   (13) https://bugs.python.org/issue?@action=redirect&bpo=21918

   (14) https://bugs.python.org/issue?@action=redirect&bpo=9554

   (15) https://bugs.python.org/issue?@action=redirect&bpo=20155

   (16) https://bugs.python.org/issue?@action=redirect&bpo=19493

   (17) https://bugs.python.org/issue?@action=redirect&bpo=18492

   (18) https://bugs.python.org/issue?@action=redirect&bpo=21634

   (19) https://bugs.python.org/issue?@action=redirect&bpo=21605

   (20) https://bugs.python.org/issue?@action=redirect&bpo=21493

   (21) https://bugs.python.org/issue?@action=redirect&bpo=19925

   (22) https://bugs.python.org/issue?@action=redirect&bpo=21522

   (23) https://bugs.python.org/issue?@action=redirect&bpo=17756

   (24) https://bugs.python.org/issue?@action=redirect&bpo=17752

   (25) https://bugs.python.org/issue?@action=redirect&bpo=18604

   (26) https://bugs.python.org/issue?@action=redirect&bpo=21275

   (27) https://bugs.python.org/issue?@action=redirect&bpo=21223

   (28) https://bugs.python.org/issue?@action=redirect&bpo=20635

   (29) https://bugs.python.org/issue?@action=redirect&bpo=20743

   (30) https://bugs.python.org/issue?@action=redirect&bpo=21097

   (31) https://bugs.python.org/issue?@action=redirect&bpo=21503

   (32) https://bugs.python.org/issue?@action=redirect&bpo=20939

   (33) https://bugs.python.org/issue?@action=redirect&bpo=20668

   (34) https://bugs.python.org/issue?@action=redirect&bpo=21093

   (35) https://bugs.python.org/issue?@action=redirect&bpo=22770

   (36) https://bugs.python.org/issue?@action=redirect&bpo=23211

   (37) https://bugs.python.org/issue?@action=redirect&bpo=23345


File: python.info,  Node: Ferramentas/Demos<54>,  Next: Windows<80>,  Prev: Testes<89>,  Up: Python 3 5 0 alpha 1

1.23.120.8 Ferramentas/Demos
............................

   - bpo-22314(1): pydoc now works when the LINES environment variable
     is set.

   - bpo-22615(2): Argument Clinic now supports the “type” argument for
     the int converter.  This permits using the int converter with enums
     and typedefs.

   - bpo-20076(3): The makelocalealias.py script no longer ignores UTF-8
     mapping.

   - bpo-20079(4): The makelocalealias.py script now can parse the
     SUPPORTED file from glibc sources and supports command line options
     for source paths.

   - bpo-22201(5): Command-line interface of the zipfile module now
     correctly extracts ZIP files with directory entries.  Patch by Ryan
     Wilson.

   - bpo-22120(6): For functions using an unsigned integer return
     converter, Argument Clinic now generates a cast to that type for
     the comparison to -1 in the generated code.  (This suppresses a
     compilation warning.)

   - bpo-18974(7): Tools/scripts/diff.py now uses argparse instead of
     optparse.

   - bpo-21906(8): Make Tools/scripts/md5sum.py work in Python 3.  Patch
     by Zachary Ware.

   - bpo-21629(9): Fix Argument Clinic’s “–converters” feature.

   - Adiciona suporte a ‘yield from’ para 2to3.

   - Adiciona suporte ao operador de multiplicação de matriz PEP 465(10)
     para 2to3.

   - bpo-16047(11): Fix module exception list and __file__ handling in
     freeze.  Patch by Meador Inge.

   - bpo-11824(12): Consider ABI tags in freeze.  Patch by Meador Inge.

   - bpo-20535(13): PYTHONWARNING no longer affects the run_tests.py
     script.  Patch by Arfrever Frehtes Taifersar Arahesis.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=22314

   (2) https://bugs.python.org/issue?@action=redirect&bpo=22615

   (3) https://bugs.python.org/issue?@action=redirect&bpo=20076

   (4) https://bugs.python.org/issue?@action=redirect&bpo=20079

   (5) https://bugs.python.org/issue?@action=redirect&bpo=22201

   (6) https://bugs.python.org/issue?@action=redirect&bpo=22120

   (7) https://bugs.python.org/issue?@action=redirect&bpo=18974

   (8) https://bugs.python.org/issue?@action=redirect&bpo=21906

   (9) https://bugs.python.org/issue?@action=redirect&bpo=21629

   (10) https://peps.python.org/pep-0465/

   (11) https://bugs.python.org/issue?@action=redirect&bpo=16047

   (12) https://bugs.python.org/issue?@action=redirect&bpo=11824

   (13) https://bugs.python.org/issue?@action=redirect&bpo=20535


File: python.info,  Node: Windows<80>,  Prev: Ferramentas/Demos<54>,  Up: Python 3 5 0 alpha 1

1.23.120.9 Windows
..................

   - bpo-23260(1): Update Windows installer

   - A versão do pacote Tcl/Tk foi atualizada para 8.6.3.  O resultado
     mais visível dessa alteração é a adição de novas caixas de diálogo
     de arquivo nativo ao executar no Windows Vista ou mais recente.
     Consulte o TIP 432 da Tcl/Tk para obter mais informações.  Além
     disso, esta versão do Tcl/Tk inclui suporte ao Windows 10.

   - bpo-17896(2): The Windows build scripts now expect external library
     sources to be in ‘PCbuild\..\externals’ rather than
     ‘PCbuild\..\..’.

   - bpo-17717(3): The Windows build scripts now use a copy of NASM
     pulled from svn.python.org to build OpenSSL.

   - bpo-21907(4): Improved the batch scripts provided for building
     Python.

   - bpo-22644(5): The bundled version of OpenSSL has been updated to
     1.0.1j.

   - bpo-10747(6): Use versioned labels in the Windows start menu.
     Patch by Olive Kilburn.

   - bpo-22980(7): arquivos .pyd com identificador de versão e
     plataforma (por exemplo, “.cp35-win32.pyd”) agora serão carregados
     em preferência aos que não tem identificadores.

'(Para informações sobre versões mais antigas, consulte o arquivo
HISTORY.)'

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=23260

   (2) https://bugs.python.org/issue?@action=redirect&bpo=17896

   (3) https://bugs.python.org/issue?@action=redirect&bpo=17717

   (4) https://bugs.python.org/issue?@action=redirect&bpo=21907

   (5) https://bugs.python.org/issue?@action=redirect&bpo=22644

   (6) https://bugs.python.org/issue?@action=redirect&bpo=10747

   (7) https://bugs.python.org/issue?@action=redirect&bpo=22980


File: python.info,  Node: O tutorial do Python,  Next: Configurações e Uso do Python,  Prev: O que há de novo no Python,  Up: Top

2 O tutorial do Python
**********************

     Dica: Este tutorial foi desenvolvido para pessoas 'que já
     programam', mas são recém-chegadas na linguagem Python, 'não'
     pessoas 'iniciantes' em programação.

Python é uma linguagem fácil de aprender e poderosa.  Ela tem estruturas
de dados de alto nível eficientes e uma abordagem simples mas efetiva de
programação orientada a objetos.  A sintaxe elegante e a tipagem
dinâmica do Python, aliadas com sua natureza interpretativa, o tornam
uma linguagem ideal para fazer scripts e desenvolvimento de aplicações
rápidas em diversas áreas e na maioria das plataformas.

O interpretador Python e a extensiva biblioteca padrão estão disponíveis
gratuitamente em código ou na forma binária para toda as maiores
plataformas no endereço eletrônico do Python, ‘https://www.python.org/’,
e pode ser livremente distribuído.  O mesmo endereço contém
distribuições de diversos módulos, programas e ferramentas gratuitos
produzidos por terceiros e documentação adicional.

O interpretador do Python pode ser facilmente estendido com novas
funções e tipos de dados implementados em C ou C++ (ou outras linguagens
chamáveis a partir de C). Python também é adequado como uma linguagem de
extensão para aplicações personalizáveis.

Este tutorial introduz informalmente o leitor aos conceitos básicos e
aos recursos da linguagem e do sistema Python.  Esteja ciente de que ele
espera que você tenha um conhecimento básico de programação em geral.  É
mais fácil se você possuir um interpretador Python para uma experiência
prática, mas os exemplos são autossuficientes e, portanto, o tutorial
pode apenas ser lido off-line também.

Para uma descrição detalhada dos módulos e objetos padrões, veja *note A
Biblioteca Padrão do Python: 144.  Em *note A Referência da Linguagem
Python: 145. você encontra uma definição mais formal da linguagem.  Para
escrever extensões em C ou C++, leia *note Estendendo e incorporando o
interpretador Python: 1d56. e *note Manual de referência da API
Python/C: 1d57.  Existe também uma série de livros que cobrem Python em
profundidade.

Este tutorial não espera ser abrangente e cobrir todos os recursos ou
mesmo os recursos mais usados.  Ele busca introduzir diversos dos
recursos mais notáveis do Python e lhe dará uma boa ideia do sabor e
estilo da linguagem.  Depois de lê-lo, você terá condições de ler e
escrever programas e módulos Python e estará pronto para aprender mais
sobre os diversos módulos descritos em *note A Biblioteca Padrão do
Python: 144.

O *note Glossário: 1d58. também vale a pena ser estudado.

* Menu:

* Abrindo seu apetite::
* Utilizando o interpretador Python::
* Uma introdução informal ao Python::
* Mais ferramentas de controle de fluxo::
* Estruturas de dados::
* Módulos: Módulos<2>.
* Entrada e Saída::
* Erros e exceções::
* Classes::
* Um breve passeio pela biblioteca padrão::
* Um breve passeio pela biblioteca padrão — parte II::
* Ambientes virtuais e pacotes::
* E agora?::
* Edição de entrada interativa e substituição de histórico::
* Aritmética de ponto flutuante; problemas e limitações: Aritmética de ponto flutuante problemas e limitações.
* Anexo::


File: python.info,  Node: Abrindo seu apetite,  Next: Utilizando o interpretador Python,  Up: O tutorial do Python

2.1 Abrindo seu apetite
=======================

Se você trabalha bastante com computadores, eventualmente perceberá que
há alguma tarefa que gostaria de automatizar.  Por exemplo, pode querer
realizar uma busca e substituição em um grande número de arquivos de
texto ou renomear e reorganizar um conjunto de fotos de maneira
complexa.  Talvez deseje criar um pequeno banco de dados personalizado,
uma aplicação GUI especializada ou um jogo simples.

Se você é um desenvolvedor de software profissional, pode ter que
trabalhar com várias bibliotecas C/C++/Java, mas o tradicional ciclo
escrever/compilar/testar/recompilar é muito lento.  Talvez você esteja
escrevendo um conjunto de testes para uma biblioteca e está achando
tedioso codificar os testes.  Ou talvez você tenha escrito um programa
que poderia utilizar uma linguagem de extensão, e você não quer conceber
e implementar toda uma nova linguagem para sua aplicação.

Python é a linguagem para você.

Você pode escrever um script shell do Unix ou arquivos batch do Windows
para algumas dessas tarefas, mas os scripts shell são melhores para
mover arquivos e alterar dados de texto, não são adequados para
aplicações GUI ou jogos.  Você pode escrever um programa C/C++/Java, mas
pode levar muito tempo de desenvolvimento para obter até mesmo um
primeiro rascunho de programa.  O Python é mais simples de usar, está
disponível nos sistemas operacionais Windows, macOS e Unix e ajudará
você a terminar o trabalho mais rapidamente.

Python é fácil de usar, sem deixar de ser uma linguagem de programação
de verdade, oferecendo muito mais estruturação e suporte para programas
extensos do que shell scripts ou arquivos de lote oferecem.  Por outro
lado, Python também oferece melhor verificação de erros do que C, e por
ser uma linguagem de 'muito alto nível', ela possui tipos nativos de
alto nível, tais como dicionários e vetores (arrays) flexíveis.  Devido
ao suporte nativo a uma variedade de tipos de dados, Python é aplicável
a um domínio de problemas muito mais vasto do que Awk ou até mesmo Perl,
ainda assim muitas tarefas são pelo menos tão fáceis em Python quanto
nessas linguagens.

Python permite que você organize seu programa em módulos que podem ser
reutilizados em outros programas escritos em Python.  A linguagem provê
uma vasta coleção de módulos que podem ser utilizados como base para sua
aplicação — ou como exemplos para estudo e aprofundamento.  Alguns
desses módulos implementam manipulação de arquivos, chamadas do sistema,
sockets, e até mesmo acesso a bibliotecas de construção de interfaces
gráficas, como Tk.

Python é uma linguagem interpretada, por isso você pode economizar um
tempo considerável durante o desenvolvimento, uma vez que não há
necessidade de compilação e ligação ('linking').  O interpretador pode
ser usado interativamente, o que torna fácil experimentar diversas
características da linguagem, escrever programas “descartáveis”, ou
testar funções em um desenvolvimento debaixo para cima ('bottom-up').  É
também uma útil calculadora de mesa.

Python permite a escrita de programas compactos e legíveis.  Programas
escritos em Python são tipicamente mais curtos do que seus equivalentes
em C, C++ ou Java, por diversas razões:

   * os tipos de alto nível permitem que você expresse operações
     complexas em um único comando;

   * a definição de bloco é feita por indentação ao invés de marcadores
     de início e fim de bloco;

   * não há necessidade de declaração de variáveis ou parâmetros
     formais;

Python é 'extensível': se você sabe como programar em C, é fácil
adicionar módulos ou funções embutidas diretamente no interpretador,
seja para desempenhar operações críticas em máxima velocidade, ou para
vincular programas Python a bibliotecas que só estejam disponíveis em
formato binário (como uma biblioteca gráfica de terceiros).  Uma vez que
você tenha sido fisgado, você pode vincular o interpretador Python a uma
aplicação escrita em C e utilizá-la como linguagem de comandos ou
extensão para esta aplicação.

A propósito, a linguagem foi batizada a partir do famoso programa da BBC
“Monty Python’s Flying Circus” e não tem nada a ver com répteis.  Fazer
referências a citações do programa na documentação não é só permitido,
como também é encorajado!

Agora que você se entusiasmou com o Python, vai querer conhecê-lo com
mais detalhes.  Partindo do princípio que a melhor maneira de aprender
uma linguagem é usando-a, este tutorial lhe convida para fazê-lo com o
interpretador do Python enquanto você o lê.

No próximo capítulo, a mecânica de utilização do interpretador é
explicada.  Essa informação, ainda que mundana, é essencial para a
experimentação dos exemplos apresentados mais tarde.

O resto do tutorial introduz diversos aspectos do sistema e linguagem
Python por intermédio de exemplos.  Serão abordadas expressões simples,
instruções, tipos, funções e módulos.  Finalmente, serão explicados
alguns conceitos avançados como exceções e classes definidas pelo
usuário.


File: python.info,  Node: Utilizando o interpretador Python,  Next: Uma introdução informal ao Python,  Prev: Abrindo seu apetite,  Up: O tutorial do Python

2.2 Utilizando o interpretador Python
=====================================

* Menu:

* Chamando o interpretador::
* O interpretador e seu ambiente::


File: python.info,  Node: Chamando o interpretador,  Next: O interpretador e seu ambiente,  Up: Utilizando o interpretador Python

2.2.1 Chamando o interpretador
------------------------------

O interpretador Python é frequentemente instalado como
‘/usr/local/bin/python3.13’ nas máquinas onde está disponível;
adicionando ‘/usr/local/bin’ ao caminho de busca da shell de seu Unix
torna-se possível iniciá-lo digitando o comando:

     python3.13

no shell.  (1)  Considerando que a escolha do diretório onde o
interpretador está é uma opção de instalação, outros locais são
possíveis; verifique com seu guru local de Python ou administrador do
sistema local.  (Por exemplo, ‘/usr/local/python’ é um local alternativo
popular.)

Em máquinas Windows onde você instalou Python a partir da *note
Microsoft Store: 1d62, o comando ‘python3.13’ estará disponível.  Se
você tem o *note lançador py.exe: 5be. instalado, você pode usar o
comando ‘py’.  Veja *note Excursus; Configurando variáveis de ambiente:
1d63. para outras maneiras de executar o Python.

Digitar um caractere de fim de arquivo (‘Control’-‘D’ no Unix,
‘Control’-‘Z’ no Windows) diretamente no prompt força o interpretador a
sair com status de saída zero.  Se isso não funcionar, você pode sair do
interpretador digitando o seguinte comando: ‘quit()’.

Os recursos de edição de linha do interpretador incluem edição
interativa, substituição de histórico e autocompletar código na maioria
dos sistemas.  Talvez a maneira mais rápida de verificar se a edição da
linha de comando é suportada seja digitar uma palavra no prompt do
Python e, em seguida, pressionar a seta para a esquerda (ou
‘Control’-‘b’).  Se o cursor mover-se, tem edição de linha de comando;
consulte o Apêndice *note Edição de entrada interativa e substituição de
histórico: 1d64. para uma introdução às teclas.  Se nada parecer
acontecer, ou se uma sequência como ‘^[[D’ ou ‘^B’ aparecer, a edição de
linha de comando não está disponível; só poderá usar a tecla Backspace
para remover caracteres da linha atual.

O interpretador trabalha de forma semelhante a uma shell de Unix: quando
chamado com a saída padrão conectada a um console de terminal, ele lê e
executa comandos interativamente; quando chamado com um nome de arquivo
como argumento, ou com redirecionamento da entrada padrão para ler um
arquivo, o interpretador lê e executa o 'script' contido no arquivo.

Uma segunda forma de iniciar o interpretador é ‘python -c comando [arg]
...’, que executa uma ou mais instruções especificadas na posição
'comando', analogamente à opção de shell *note -c: 5e0.  Considerando
que comandos Python frequentemente têm espaços em branco (ou outros
caracteres que são especiais para a shell) é aconselhável que todo o
'comando' esteja entre as aspas.

Alguns módulos Python são também úteis como scripts.  Estes podem ser
chamados usando ‘python -m módulo [arg] ...’ que executa o arquivo fonte
do 'módulo' como se você tivesse digitado seu caminho completo na linha
de comando.

Quando um arquivo de script é utilizado, às vezes é útil executá-lo e
logo em seguida entrar em modo interativo.  Isto pode ser feito
acrescentando o argumento *note -i: 1523. antes do nome do script.

Todas as opções de linha de comando são descritas em *note Linha de
comando e ambiente: 1b36.

* Menu:

* Passagem de argumentos::
* Modo interativo::

   ---------- Footnotes ----------

   (1) No Unix, o interpretador Python 3.x não é instalado por padrão
com o executável nomeado ‘python’, então não vai conflitar com um
executável Python 2.x instalado simultaneamente.


File: python.info,  Node: Passagem de argumentos,  Next: Modo interativo,  Up: Chamando o interpretador

2.2.1.1 Passagem de argumentos
..............................

Quando são de conhecimento do interpretador, o nome do script e demais
argumentos da linha de comando da shell são acessíveis ao próprio script
através da variável ‘argv’ do módulo ‘sys’.  Pode-se acessar essa lista
executando ‘import sys’.  Essa lista tem sempre ao menos um elemento;
quando nenhum script ou argumento for passado para o interpretador,
‘sys.argv[0]’ será uma string vazia.  Quando o nome do script for ‘'-'’
(significando entrada padrão), o conteúdo de ‘sys.argv[0]’ será ‘'-'’.
Quando for utilizado *note -c: 5e0. 'comando', ‘sys.argv[0]’ conterá
‘'-c'’.  Quando for utilizado *note -m: 5e1. 'módulo', ‘sys.argv[0]’
conterá o caminho completo do módulo localizado.  Opções especificadas
após *note -c: 5e0. 'comando' ou *note -m: 5e1. 'módulo' não serão
consumidas pelo interpretador mas deixadas em ‘sys.argv’ para serem
tratadas pelo comando ou módulo.


File: python.info,  Node: Modo interativo,  Prev: Passagem de argumentos,  Up: Chamando o interpretador

2.2.1.2 Modo interativo
.......................

Quando os comandos são lidos a partir do console, diz-se que o
interpretador está em modo interativo.  Nesse modo ele solicita um
próximo comando através do 'prompt primário', tipicamente três sinais de
maior (‘>>>’); para linhas de continuação do comando atual, o 'prompt
secundário' padrão é formado por três pontos (‘...’).  O interpretador
exibe uma mensagem de boas vindas, informando seu número de versão e um
aviso de copyright antes de exibir o primeiro prompt:

     $ python3.13
     Python 3.13 (default, April 4 2023, 09:25:04)
     [GCC 10.2.0] on linux
     Type "help", "copyright", "credits" or "license" for more information.
     >>>

Linhas de continuação são necessárias em construções multi-linha.  Como
exemplo, dê uma olhada nesse comando *note if: 2f3.:

     >>> o_mundo_é_plano = True
     >>> if o_mundo_é_plano:
     ...     print("Cuidado para não cair da borda!")
     ...
     Cuidado para não cair da borda!

Para mais informações sobre o modo interativo, veja *note Modo
interativo: 16f.


File: python.info,  Node: O interpretador e seu ambiente,  Prev: Chamando o interpretador,  Up: Utilizando o interpretador Python

2.2.2 O interpretador e seu ambiente
------------------------------------

* Menu:

* Edição de código-fonte::


File: python.info,  Node: Edição de código-fonte,  Up: O interpretador e seu ambiente

2.2.2.1 Edição de código-fonte
..............................

Por padrão, arquivos fonte de Python são tratados com codificação UTF-8.
Nessa codificação, caracteres de muitos idiomas no mundo podem ser
usados simultaneamente em literais string, identificadores e comentários
— embora a biblioteca padrão use apenas caracteres ASCII para
identificadores, uma convenção que qualquer código portável deve seguir.
Para exibir todos esses caracteres corretamente, seu editor deve
reconhecer que o arquivo é UTF-8 e deve usar uma fonte com suporte a
todos os caracteres no arquivo.

Para declarar uma codificação diferente da padrão, uma linha de
comentário especial deve ser adicionada como 'primeira' linha do
arquivo.  A sintaxe é essa:

     # -*- coding: encoding -*-

onde 'encoding' é uma das *note codecs: 1b. válidas com suporte do
Python.

Por exemplo, para declarar que a codificação Windows-1252 deve ser
usada, a primeira linha do seu arquivo fonte deve ser:

     # -*- coding: cp1252 -*-

Uma exceção para a regra da 'primeira linha' é quando o código-fonte
inicia com uma *note linha com UNIX “shebang”: 1d6c.  Nesse caso, a
declaração de codificação deve ser adicionada como a segunda linha do
arquivo.  Por exemplo:

     #!/usr/bin/env python3
     # -*- coding: cp1252 -*-


File: python.info,  Node: Uma introdução informal ao Python,  Next: Mais ferramentas de controle de fluxo,  Prev: Utilizando o interpretador Python,  Up: O tutorial do Python

2.3 Uma introdução informal ao Python
=====================================

Nos exemplos seguintes, pode-se distinguir entrada e saída pela presença
ou ausência dos prompts (*note >>>: 16c. e *note …: 16d.): para repetir
o exemplo, você deve digitar tudo após o prompt, quando o mesmo aparece;
linhas que não começarem com um prompt são na verdade as saídas geradas
pelo interpretador.  Observe que quando aparece uma linha contendo
apenas o prompt secundário você deve digitar uma linha em branco; é
assim que se encerra um comando de múltiplas linhas.

Muitos exemplos neste manual, mesmo aqueles inscritos na linha de
comando interativa, incluem comentários.  Comentários em Python começam
com o caractere cerquilha ‘#’ e estende até o final da linha.  Um
comentário pode aparecer no inicio da linha ou após espaço em branco ou
código, mas não dentro de uma string literal.  O caractere cerquilha
dentro de uma string literal é apenas uma cerquilha.  Como os
comentários são para esclarecer o código e não são interpretados pelo
Python, eles podem ser omitidos ao digitar exemplos.

Alguns exemplos:

     # este é o primeiro comentário
     spam = 1  # e este é o segundo comentário
               # ... e agora um terceiro!
     texto = "# Este não é um comentário por estar entre aspas."

* Menu:

* Usando Python como uma calculadora::
* Primeiros passos para a programação::


File: python.info,  Node: Usando Python como uma calculadora,  Next: Primeiros passos para a programação,  Up: Uma introdução informal ao Python

2.3.1 Usando Python como uma calculadora
----------------------------------------

Vamos experimentar alguns comandos simples em Python.  Inicie o
interpretador e aguarde o prompt primário, ‘>>>’.  (Não deve demorar
muito.)

* Menu:

* Números::
* Texto::
* Listas::


File: python.info,  Node: Números,  Next: Texto,  Up: Usando Python como uma calculadora

2.3.1.1 Números
...............

O interpretador funciona como uma calculadora bem simples: você pode
digitar uma expressão nele e o resultado será apresentado.  A sintaxe de
expressões é a usual: operadores ‘+’, ‘-’, ‘*’ e ‘/’ podem ser usadas
para realizar operações aritméticas; parênteses (‘()’) podem ser usados
para agrupar expressões.  Por exemplo:

     >>> 2 + 2
     4
     >>> 50 - 5*6
     20
     >>> (50 - 5*6) / 4
     5.0
     >>> 8 / 5  # divisão sempre retorna um número de ponto flutuante
     1.6

Os números inteiros (por exemplo, ‘2’, ‘4’ e ‘20’) são do tipo *note
int: 257, aqueles com parte fracionária (por exemplo, ‘5.0’ e ‘1.6’) são
do tipo *note float: 2f7.  Veremos mais sobre tipos numéricos
posteriormente neste tutorial.

Divisão (‘/’) sempre retorna ponto flutuante (float).  Para fazer uma
*note divisão pelo piso: 94b. e receber um inteiro como resultado você
pode usar o operador ‘//’; para calcular o resto você pode usar o ‘%’:

     >>> 17 / 3  # divisão clássica retorna um ponto flutuante
     5.666666666666667
     >>>
     >>> 17 // 3  # divisão pelo piso descarta a parte fracionária
     5
     >>> 17 % 3  # o operador % retorna o resto da divisão
     2
     >>> 5 * 3 + 2  # quociente do piso * divisor + restante
     17

Com Python, é possível usar o operador ‘**’ para calcular potências (1):

     >>> 5 ** 2  # 5 ao quadrado
     25
     >>> 2 ** 7  # 2 à potência de 7
     128

O sinal de igual (‘'='’) é usado para atribuir um valor a uma variável.
Depois de uma atribuição, nenhum resultado é exibido antes do próximo
prompt:

     >>> largura = 20
     >>> altura = 5 * 9
     >>> largura * altura
     900

Se uma variável não é “definida” (não tem um valor atribuído), tentar
utilizá-la levantará um erro:

     >>> n  # tenta acessar uma variável não definida
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     NameError: name 'n' is not defined

Há suporte completo para ponto flutuante ('float'); operadores com
operandos de diferentes tipos convertem o inteiro para ponto flutuante:

     >>> 4 * 3.75 - 1
     14.0

No modo interativo, o valor da última expressão exibida é atribuída a
variável ‘_’.  Assim, ao utilizar Python como uma calculadora, fica mais
fácil prosseguir com os cálculos, por exemplo:

     >>> taxa = 12.5 / 100
     >>> preço = 100.50
     >>> preço * taxa
     12.5625
     >>> preço + _
     113.0625
     >>> round(_, 2)
     113.06

Essa variável especial deve ser tratada como 'somente para leitura' pelo
usuário.  Nunca lhe atribua explicitamente um valor — do contrário,
estaria criando uma outra variável (homônima) independente, que
mascararia a variável especial com seu comportamento mágico.

Além de *note int: 257. e *note float: 2f7, o Python oferece suporte a
outros tipos de números, tais como *note Decimal: 29d. e *note Fraction:
1e7.  O Python também possui suporte embutido a *note números complexos:
1d75, e usa os sufixos ‘j’ ou ‘J’ para indicar a parte imaginária (por
exemplo, ‘3+5j’).

   ---------- Footnotes ----------

   (1) Uma vez que ‘**’ tem precedência mais alta que ‘-’, ‘-3**2’ será
interpretado como ‘-(3**2)’ e assim resultará em ‘-9’.  Para evitar isso
e obter ‘9’, você pode usar ‘(-3)**2’.


File: python.info,  Node: Texto,  Next: Listas,  Prev: Números,  Up: Usando Python como uma calculadora

2.3.1.2 Texto
.............

Python pode manipular texto (representado pelo tipo *note str: 44c,
também chamado de “strings”), bem como números.  Isso inclui caracteres
“‘!’”, palavras “‘coelho’”, nomes “‘Paris’”, frases “‘Eu te protejo.’”,
etc.  “‘Oba! :)’”.  Eles podem ser colocados entre aspas simples
(‘'...'’) ou aspas duplas (‘"..."’) com o mesmo resultado (1).

     >>> 'spam eggs'  # aspas simples
     'spam eggs'
     >>> "Coelho de Paris, eu te projeto :)! Viva!"  # aspas duplas
     'Coelho de Paris, eu te projeto :)! Viva!'
     >>> '1975'  # dígitos e numerais envoltos em aspas também são strings
     '1975'

Para colocar aspas entre aspas, precisamos “escapá-la”, precedendo-as
com ‘\’.  Alternativamente, podemos usar o outro tipo de aspas:

     >>> 'd\'água'  # use \' para escapar a aspa simples...
     "d'água"
     >>> "d'água"  # ...ou use aspas duplas
     "d'água"
     >>> '"Sim", eles disseram.'
     '"Sim", eles disseram.'
     >>> "\"Sim\", eles disseram."
     '"Sim", eles disseram.'
     >>> '"Copo d\'água", eles pediram.'
     '"Copo d'água", eles pediram.'

No shell do Python, a definição de string e a string de saída podem
parecer diferentes.  A função *note print(): fa9. produz uma saída mais
legível, omitindo as aspas delimitadoras e imprimindo caracteres de
escape e especiais:

     >>> s = 'Primeira linha.\nSegunda linha.'  # \n significa nova linha
     >>> s  # sem print(), caracteres especiais são incluídos na string
     'Primeira linha.\nSegunda linha.'
     >>> print(s)  # com print(), caracteres especiais são interpretados, então \n produz nova linha
     Primeira linha.
     Segunda linha.

Caso não queira que os caracteres sejam precedidos por ‘\’ para serem
interpretados como caracteres especiais, você pode usar 'strings brutas'
('raw', em inglês) adicionando um ‘r’ antes da primeira aspa:

     >>> print('C:\algum\nome')  # aqui \n significa nova linha!
     C:\algum
     ome
     >>> print(r'C:\algum\nome')  # observe o r antes das aspas
     C:\algum\nome

Há um aspecto sutil nas strings brutas: uma string bruta não pode
terminar em um número ímpar de caracteres ‘\’; consulte *note o FAQ
relacionado: 1d78. para mais informações e soluções alternativas.

As strings literais podem abranger várias linhas.  Uma maneira é usar as
aspas triplas: ‘"""..."""’ ou ‘'''...'''’.  Caracteres de fim de linha
são incluídos automaticamente na string, mas é possível evitar isso
adicionando uma ‘\’ no final.  No exemplo a seguir, a nova linha no
início não é incluída:

     >>> print("""\
     ... Uso: coisinha [OPÇÕES]
     ...      -h                        Exibe esta mensagem de uso
     ...      -H hostname               Hostname para se conectar
     ... """)
     Usage: coisinha [OPÇÕES]
          -h                        Exibe esta mensagem de ajuda
          -H hostname               Hostname para se conectar

     >>>

Strings podem ser concatenadas (coladas) com o operador ‘+’, e repetidas
com ‘*’:

     >>> # 3 vezes 'un', seguido por 'ium'
     >>> 3 * 'un' + 'ium'
     'unununium'

Duas ou mais 'strings literais' (ou seja, entre aspas) ao lado da outra
são automaticamente concatenados.

     >>> 'Py' 'thon'
     'Python'

Esse recurso é particularmente útil quando você quer quebrar strings
longas:

     >>> texto = ('Coloque várias strings dentro de parênteses '
     ...          'para fazer com que elas sejam concatenadas.')
     >>> texto
     'Coloque várias strings dentro de parênteses para fazer com que elas sejam concatenadas.'

Isso só funciona com duas strings literais, não com variáveis ou
expressões:

     >>> prefixo = 'Py'
     >>> prefixo 'thon'  # não é possível concatenar uma variável e um literal de string
       File "<stdin>", line 1
         prefixi 'thon'
                ^^^^^^
     SyntaxError: invalid syntax
     >>> ('un' * 3) 'ium'
       File "<stdin>", line 1
         ('un' * 3) 'ium'
                    ^^^^^
     SyntaxError: invalid syntax

Se você quiser concatenar variáveis ou uma variável e uma literal, use
‘+’:

     >>> prefixo + 'thon'
     'Python'

As strings podem ser 'indexadas' (subscritas), com o primeiro caractere
como índice 0.  Não existe um tipo específico para caracteres; um
caractere é simplesmente uma string cujo tamanho é 1:

     >>> palavra = 'Python'
     >>> palavra[0]  # caractere na posição 0
     'P'
     >>> palavra[5]  # caractere na posição 5
     'n'

Índices também podem ser números negativos para iniciar a contagem pela
direita:

     >>> palavra[-1]  # último caractere
     'n'
     >>> palavra[-2]  # penúltimo caractere
     'o'
     >>> palavra[-6]
     'P'

Note que dado que -0 é o mesmo que 0, índices negativos começam em -1.

Além da indexação, o 'fatiamento' também é permitido.  Embora a
indexação seja usada para obter caracteres individuais, 'fatiar' permite
que você obtenha uma substring:

     >>> palavra[0:2]  # caracteres da posição 0 (incluída) até 2 (excluída)
     'Py'
     >>> palavra[2:5]  # caracteres da posição 2 (incluída) até 5 (excluída)
     'tho'

Os índices do fatiamento possuem padrões úteis; um primeiro índice
omitido padrão é zero, um segundo índice omitido é por padrão o tamanho
da string sendo fatiada:

     >>> palavra[:2]   # caracteres do início até a posição 2 (excluída)
     'Py'
     >>> palavra[4:]   # caracteres da posição 4 (incluída) até o fim
     'on'
     >>> palavra[-2:]  # caracteres da penúltima (incluída) até o fim
     'on'

Observe como o início sempre está incluído, e o fim sempre é excluído.
Isso garante que ‘s[:i] + s[i:]’ seja sempre igual a ‘s’:

     >>> palavra[:2] + palavra[2:]
     'Python'
     >>> palavra[:4] + palavra[4:]
     'Python'

Uma maneira de lembrar como fatias funcionam é pensar que os índices
indicam posições 'entre' caracteres, onde a borda esquerda do primeiro
caractere é 0.  Assim, a borda direita do último caractere de uma string
de comprimento 'n' tem índice 'n', por exemplo:

      +---+---+---+---+---+---+
      | P | y | t | h | o | n |
      +---+---+---+---+---+---+
      0   1   2   3   4   5   6
     -6  -5  -4  -3  -2  -1

A primeira fileira de números indica a posição dos índices 0…6 na
string; a segunda fileira indica a posição dos respectivos índices
negativos.  Uma fatia de 'i' a 'j' consiste em todos os caracteres entre
as bordas 'i' e 'j', respectivamente.

Para índices positivos, o comprimento da fatia é a diferença entre os
índices, se ambos estão dentro dos limites da string.  Por exemplo, o
comprimento de ‘word[1:3]’ é 2.

A tentativa de usar um índice que seja muito grande resultará em um
erro:

     >>> palavra[42]  # a palavra só tem 6 caracteres
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     IndexError: string index out of range

No entanto, os índices de fatiamento fora do alcance são tratados
graciosamente (N.d.T: o termo original “gracefully” indica robustez no
tratamento de erros) quando usados para fatiamento.  Um índice maior que
o comprimento é trocado pelo comprimento, um limite superior menor que o
limite inferior produz uma string vazia:

     >>> palavra[4:42]
     'on'
     >>> palavra[42:]
     ''

As strings do Python não podem ser alteradas — uma string é *note
imutável: 1d79.  Portanto, atribuir a uma posição indexada na sequência
resulta em um erro:

     >>> palavra[0] = 'J'
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: 'str' object does not support item assignment
     >>> palavra[2:] = 'py'
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: 'str' object does not support item assignment

Se você precisar de uma string diferente, deverá criar uma nova:

     >>> 'J' + palavra[1:]
     'Jython'
     >>> palavra[:2] + 'py'
     'Pypy'

A função embutida *note len(): 62e. devolve o comprimento de uma string:

     >>> s = 'supercalifragilisticexpialidoce'
     >>> len(s)
     31

Ver também
..........

*note Tipo sequência de texto — str: 1d7a.

     As strings são exemplos de 'tipos de sequências' e suportam as
     operações comumente suportadas por esses tipos.

*note String Methods: 1d7b.

     As strings suportam uma grande quantidade de métodos para
     transformações básicas e busca.

*note f-strings: 9b1.

     Strings literais que possuem expressões embutidas.

*note Sintaxe das strings de formato: 13e2.

     Informações sobre formatação de string com o método *note
     str.format(): 621.

*note Formatação de string no estilo printf: 6cc.

     As antigas operações de formatação invocadas quando as strings são
     o operando esquerdo do operador ‘%’ são descritas com mais detalhes
     aqui.

   ---------- Footnotes ----------

   (1) Ao contrário de outras linguagens, caracteres especiais como ‘\n’
têm o mesmo significado com as aspas simples (‘'...'’) e duplas
(‘"..."’) .  A única diferença entre as duas é que, dentro de aspas
simples, você não precisa escapar o ‘"’ (mas você deve escapar a ‘\'’) e
vice-versa.


File: python.info,  Node: Listas,  Prev: Texto,  Up: Usando Python como uma calculadora

2.3.1.3 Listas
..............

Python inclui diversas estruturas de dados 'compostas', usadas para
agrupar outros valores.  A mais versátil é 'list' (lista), que pode ser
escrita como uma lista de valores (itens) separados por vírgula, entre
colchetes.  Os valores contidos na lista não precisam ser todos do mesmo
tipo.

     >>> quadrados = [1, 4, 9, 16, 25]
     >>> quadrados
     [1, 4, 9, 16, 25]

Como strings (e todos os tipos embutidos de *note sequência: 4f1.),
listas pode ser indexados e fatiados:

     >>> quadrados[0]  # indexação retorna o item
     1
     >>> quadrados[-1]
     25
     >>> quadrados[-3:]  # fatiamento retorna uma nova lista
     [9, 16, 25]

As listas também suportam operações como concatenação:

     >>> quadrados + [36, 49, 64, 81, 100]
     [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Diferentemente de strings, que são *note imutáveis: 1d79, listas são
*note mutáveis: 1d7e, ou seja, é possível alterar elementos individuais
de uma lista:

     >>> cubos = [1, 8, 27, 65, 125]  # algo errado aqui
     >>> 4 ** 3  # o cubo de 4 é 64, não 65!
     64
     >>> cubos[3] = 64  # substitui o valor errado
     >>> cubos
     [1, 8, 27, 64, 125]

Você também pode adicionar novos itens no final da lista, usando o
'método' *note list.append(): 6cd. (estudaremos mais a respeito dos
métodos posteriormente):

     >>> cubos.append(216)  # adiciona o cubo de 6
     >>> cubos.append(7 ** 3)  # e o cubo de 7
     >>> cubos
     [1, 8, 27, 64, 125, 216, 343]

A atribuição simples em Python nunca copia dados.  Quando você atribui
uma lista a uma variável, a variável se refere à 'lista existente'.
Quaisquer alterações que você fizer na lista por meio de uma variável
serão vistas por todas as outras variáveis que se referem a ela:

     >>> rgb = ["Vermelho", "Verde", "Azul"]
     >>> rgba = rgb
     >>> id(rgb) == id(rgba)  # elas referenciam o mesmo objeto
     True
     >>> rgba.append("Alf")
     >>> rgb
     ["Vermelho", "Verde", "Azul", "Alf"]

Todas as operações de fatiamento devolvem uma nova lista contendo os
elementos solicitados.  Isso significa que o seguinte fatiamento devolve
uma *note cópia rasa: 1d7f. da lista:

     >>> rgba_correto = rgba[:]
     >>> rgba_correto[-1] = "Alfa"
     >>> rgba_correto
     ["Vermelho", "Verde", "Azul", "Alfa"]
     >>> rgba
     ["Vermelho", "Verde", "Azul", "Alf"]

Atribuição a fatias também é possível, e isso pode até alterar o tamanho
da lista ou remover todos os itens dela:

     >>> letras = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
     >>> letras
     ['a', 'b', 'c', 'd', 'e', 'f', 'g']
     >>> # substitui alguns valores
     >>> letras[2:5] = ['C', 'D', 'E']
     >>> letras
     ['a', 'b', 'C', 'D', 'E', 'f', 'g']
     >>> # agora remove-os
     >>> letras[2:5] = []
     >>> letras
     ['a', 'b', 'f', 'g']
     >>> # limpa a lista substituindo todos os elementos por uma lista vazia
     >>> letras[:] = []
     >>> letras
     []

A função embutida *note len(): 62e. também se aplica a listas:

     >>> letras = ['a', 'b', 'c', 'd']
     >>> len(letras)
     4

É possível aninhar listas (criar listas contendo outras listas), por
exemplo:

     >>> a = ['a', 'b', 'c']
     >>> n = [1, 2, 3]
     >>> x = [a, n]
     >>> x
     [['a', 'b', 'c'], [1, 2, 3]]
     >>> x[0]
     ['a', 'b', 'c']
     >>> x[0][1]
     'b'


File: python.info,  Node: Primeiros passos para a programação,  Prev: Usando Python como uma calculadora,  Up: Uma introdução informal ao Python

2.3.2 Primeiros passos para a programação
-----------------------------------------

Claro, podemos usar o Python para tarefas mais complicadas do que somar
2+2.  Por exemplo, podemos escrever o início da sequência de
Fibonacci(1) assim:

     >>> # Sequência de Fibonacci:
     >>> # a soma de dois elementos define a próxima
     >>> a, b = 0, 1
     >>> while a < 10:
     ...     print(a)
     ...     a, b = b, a+b
     ...
     0
     1
     1
     2
     3
     5
     8

Este exemplo introduz diversas características ainda não mencionadas.

   * A primeira linha contém uma atribuição múltipla: as variáveis ‘a’ e
     ‘b’ recebem simultaneamente os novos valores 0 e 1.  Na última
     linha há outro exemplo de atribuição múltipla demonstrando que
     expressões do lado direito são sempre avaliadas primeiro, antes da
     atribuição.  As expressões do lado direito são avaliadas da
     esquerda para a direita.

   * O laço de repetição *note while: 1d82. executa enquanto a condição
     (aqui: ‘a < 10’) permanece verdadeira.  Em Python, como em C,
     qualquer valor inteiro que não seja zero é considerado verdadeiro;
     zero é considerado falso.  A condição pode também ser uma cadeia de
     caracteres ou uma lista, ou qualquer sequência; qualquer coisa com
     um tamanho maior que zero é verdadeiro, enquanto sequências vazias
     são falsas.  O teste usado no exemplo é uma comparação simples.  Os
     operadores padrões de comparação são os mesmos de C: ‘<’ (menor
     que), ‘>’ (maior que), ‘==’ (igual), ‘<=’ (menor ou igual), ‘>=’
     (maior ou igual) e ‘!=’ (diferente).

   * O 'corpo' do laço é 'indentado': indentação em Python é a maneira
     de agrupar comandos em blocos.  No console interativo padrão você
     terá que digitar tab ou espaços para indentar cada linha.  Na
     prática você vai preparar scripts Python mais complicados em um
     editor de texto; a maioria dos editores de texto tem facilidades de
     indentação automática.  Quando um comando composto é digitado
     interativamente, deve ser finalizado por uma linha em branco (já
     que o interpretador não tem como adivinhar qual é a última linha do
     comando).  Observe que toda linha de um mesmo bloco de comandos
     deve ter a mesma indentação.

   * A função *note print(): fa9. escreve o valor dos argumentos
     fornecidos.  É diferente de apenas escrever a expressão no
     interpretador (como fizemos anteriormente nos exemplos da
     calculadora) pela forma como lida com múltiplos argumentos,
     quantidades de ponto flutuante e strings.  As strings são impressas
     sem aspas, e um espaço é inserido entre os itens, assim você pode
     formatar bem o resultado, dessa forma:

          >>> i = 256*256
          >>> print('O valor de i é', i)
          O valor de i é 65536

     O argumento nomeado 'end' pode ser usado para evitar uma nova linha
     após a saída ou finalizar a saída com uma string diferente:

          >>> a, b = 0, 1
          >>> while a < 1000:
          ...     print(a, end=',')
          ...     a, b = b, a+b
          ...
          0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,

   ---------- Footnotes ----------

   (1) https://pt.wikipedia.org/wiki/Sequência_de_Fibonacci


File: python.info,  Node: Mais ferramentas de controle de fluxo,  Next: Estruturas de dados,  Prev: Uma introdução informal ao Python,  Up: O tutorial do Python

2.4 Mais ferramentas de controle de fluxo
=========================================

Assim como a instrução *note while: 1d82. que acabou de ser apresentada,
o Python usa mais algumas que encontraremos neste capítulo.

* Menu:

* Instruções if::
* Instruções for::
* A função range(): A função range.
* Instruções break e continue::
* Cláusulas else em laços::
* Instruções pass::
* Instruções match::
* Definindo funções::
* Mais sobre definição de funções::
* Intermezzo; estilo de codificação: Intermezzo estilo de codificação.


File: python.info,  Node: Instruções if,  Next: Instruções for,  Up: Mais ferramentas de controle de fluxo

2.4.1 Instruções ‘if’
---------------------

Provavelmente a mais conhecida instrução de controle de fluxo é o *note
if: 2f3.  Por exemplo:

     >>> x = int(input("Insira um número inteiro: "))
     Insira um número inteiro: 42
     >>> if x < 0:
     ...     x = 0
     ...     print('Negativo alterado para zero')
     ... elif x == 0:
     ...     print('Zero')
     ... elif x == 1:
     ...     print('Um')
     ... else:
     ...     print('Mais')
     ...
     Mais

Pode haver zero ou mais partes *note elif: 1d89, e a parte *note else:
18c. é opcional.  A palavra-chave ‘‘elif’’ é uma abreviação para ‘else
if’, e é útil para evitar indentação excessiva.  Uma sequência ‘if’ …
‘elif’ … ‘elif’ … substitui as instruções ‘switch’ ou ‘case’,
encontrados em outras linguagens.

Se você está comparando o mesmo valor com várias constantes, ou
verificando por tipos ou atributos específicos, você também pode achar a
instrução ‘match’ útil.  Para mais detalhes veja *note Instruções match:
1d8a.


File: python.info,  Node: Instruções for,  Next: A função range,  Prev: Instruções if,  Up: Mais ferramentas de controle de fluxo

2.4.2 Instruções ‘for’
----------------------

A instrução *note for: 2f2. em Python é um pouco diferente do que
costuma ser em C ou Pascal.  Ao invés de sempre iterar sobre uma
progressão aritmética de números (como no Pascal), ou permitir ao
usuário definir o passo de iteração e a condição de parada (como C), a
instrução ‘for’ do Python itera sobre os itens de qualquer sequência
(seja uma lista ou uma string), na ordem que aparecem na sequência.  Por
exemplo:

     >>> # Mede algumas strings:
     >>> palavras = ['gato', 'janela', 'defenestrar']
     >>> for p in palavras:
     ...     print(p, len(p))
     ...
     gato 4
     janela 6
     defenestrar 11

Código que modifica uma coleção sobre a qual está iterando pode ser
inseguro.  No lugar disso, usualmente você deve iterar sobre uma cópia
da coleção ou criar uma nova coleção:

     # Cria uma amostra de coleção
     users = {'Hans': 'active', 'Éléonore': 'inactive', '景太郎': 'active'}

     # Estratégia: iterar por uma cópia
     for user, status in users.copy().items():
         if status == 'inactive':
             del users[user]

     # Estratégia: criar uma nova coleção
     active_users = {}
     for user, status in users.items():
         if status == 'active':
             active_users[user] = status


File: python.info,  Node: A função range,  Next: Instruções break e continue,  Prev: Instruções for,  Up: Mais ferramentas de controle de fluxo

2.4.3 A função ‘range()’
------------------------

Se você precisa iterar sobre sequências numéricas, a função embutida
*note range(): 94a. é a resposta.  Ela gera progressões aritméticas:

     >>> for i in range(5):
     ...     print(i)
     ...
     0
     1
     2
     3
     4

O ponto de parada fornecido nunca é incluído na lista; ‘range(10)’ gera
uma lista com 10 valores, exatamente os índices válidos para uma
sequência de comprimento 10.  É possível iniciar o intervalo com outro
número, ou alterar a razão da progressão (inclusive com passo negativo):

     >>> list(range(5, 10))
     [5, 6, 7, 8, 9]

     >>> list(range(0, 10, 3))
     [0, 3, 6, 9]

     >>> list(range(-10, -100, -30))
     [-10, -40, -70]

Para iterar sobre os índices de uma sequência, combine *note range():
94a. e *note len(): 62e. da seguinte forma:

     >>> a = ['Maria', 'tinha', 'um', 'carneirinho']
     >>> for i in range(len(a)):
     ...     print(i, a[i])
     ...
     0 Maria
     1 tinha
     2 um
     3 carneirinho

Na maioria dos casos, porém, é mais conveniente usar a função *note
enumerate(): 14c9, veja *note Técnicas de iteração: 1d8f.

Uma coisa estranha acontece se você imprime um intervalo:

     >>> range(10)
     range(0, 10)

Em muitos aspectos, o objeto retornado pela função *note range(): 94a.
se comporta como se fosse uma lista, mas na verdade não é.  É um objeto
que retorna os itens sucessivos da sequência desejada quando você itera
sobre a mesma, mas na verdade ele não gera a lista, economizando espaço.

Dizemos que um objeto é *note iterável: 1268, isso é, candidato a ser
alvo de uma função ou construção que espera alguma coisa capaz de
retornar sucessivamente seus elementos um de cada vez.  Nós vimos que a
instrução *note for: 2f2. é um exemplo de construção, enquanto que um
exemplo de função que recebe um iterável é *note sum(): 46a.:

     >>> sum(range(4))  # 0 + 1 + 2 + 3
     6

Mais tarde, veremos mais funções que retornam iteráveis e tomam
iteráveis como argumentos.  No capítulo *note Estruturas de dados: 1d90,
iremos discutir em mais detalhes sobre *note list(): 611.


File: python.info,  Node: Instruções break e continue,  Next: Cláusulas else em laços,  Prev: A função range,  Up: Mais ferramentas de controle de fluxo

2.4.4 Instruções ‘break’ e ‘continue’
-------------------------------------

A instrução *note break: ab8. sai imediatamente do laço de repetição
mais interno, seja *note for: 2f2. ou *note while: 1d82.:

     >>> for n in range(2, 10):
     ...     for x in range(2, n):
     ...         if n % x == 0:
     ...             print(f"{n} igual a {x} * {n//x}")
     ...             break
     ...
     4 igual a 2 * 2
     6 igual a 2 * 3
     8 igual a 2 * 4
     9 equals 3 * 3

A instrução *note continue: 9d1. continua com a próxima iteração do
laço:

     >>> for num in range(2, 10):
     ...     if num % 2 == 0:
     ...         print(f"Encontrado um número par {num}")
     ...         continue
     ...     print(f"Encontrado um número ímpar {num}")
     ...
     Encontrado um número par 2
     Encontrado um número ímpar 3
     Encontrado um número par 4
     Encontrado um número ímpar 5
     Encontrado um número par 6
     Encontrado um número ímpar 7
     Encontrado um número par 8
     Encontrado um número ímpar 9


File: python.info,  Node: Cláusulas else em laços,  Next: Instruções pass,  Prev: Instruções break e continue,  Up: Mais ferramentas de controle de fluxo

2.4.5 Cláusulas ‘else’ em laços
-------------------------------

Em um laço ‘for’ ou ‘while’ a instrução ‘break’ pode ser pareada com uma
cláusula ‘else’.  Se o laço terminar sem executar o ‘break’, a cláusula
‘else’ será executada.

Em um laço *note for: 2f2, a cláusula ‘else’ é executada após o laço
finalizar sua iteração final, ou seja, se não ocorrer nenhuma
interrupção.

Em um laço *note while: 1d82, ele é executado após a condição do laço se
tornar falsa.

Em qualquer tipo de laço, a cláusula ‘else’ 'não' é executada se o laço
foi encerrado por um *note break: ab8.  Claro, outras maneiras de
encerrar o laço mais cedo, como um *note return: 9d6. ou uma exceção
levantada, também pularão a execução da cláusula *note else: 18c.

Isso é exemplificado no seguinte laço ‘for’, que procura por números
primos:

     >>> for n in range(2, 10):
     ...     for x in range(2, n):
     ...         if n % x == 0:
     ...             print(n, 'igual a', x, '*', n//x)
     ...             break
     ...     else:
     ...         # a iteração passou direto sem encontrar um fator
     ...         print(n, 'é um número primo')
     ...
     2 é um número primo
     3 é um número primo
     4 igual a 2 * 2
     5 é um número primo
     6 igual a 2 * 3
     7 é um número primo
     8 igual a 2 * 4
     9 igual a 3 * 3

(Sim, este é o código correto.  Observe atentamente: a cláusula ‘else’
pertence ao laço ‘for’, 'não' à instrução ‘if’.)

Uma maneira de pensar na cláusula else é imaginá-la pareada com o ‘if’
dentro do laço.  Conforme o laço é executado, ele executará uma
sequência como if/if/if/else.  O ‘if’ está dentro do laço, encontrado
várias vezes.  Se a condição for verdadeira, um ‘break’ acontecerá.  Se
a condição nunca for verdadeira, a cláusula ‘else’ fora do laço será
executada.

Quando usado em um laço, a cláusula ‘else’ tem mais em comum com a
cláusula ‘else’ de uma instrução *note try: 6e9. do que com a de
instruções ‘if’: a cláusula ‘else’ de uma instrução ‘try’ é executada
quando não ocorre exceção, e a cláusula ‘else’ de um laço é executada
quando não ocorre um ‘break’.  Para mais informações sobre instrução
‘try’ e exceções, veja *note Tratamento de exceções: 1d96.


File: python.info,  Node: Instruções pass,  Next: Instruções match,  Prev: Cláusulas else em laços,  Up: Mais ferramentas de controle de fluxo

2.4.6 Instruções ‘pass’
-----------------------

A instrução *note pass: 1d99. não faz nada.  Pode ser usada quando a
sintaxe exige uma instrução, mas a semântica do programa não requer
nenhuma ação.  Por exemplo:

     >>> while True:
     ...     pass  # Ocupado, aguardando interrupção por teclado (Ctrl+C)
     ...

Isto é usado muitas vezes para se definir classes mínimas:

     >>> class MinhaClasseVazia:
     ...     pass
     ...

Outra ocasião em que o *note pass: 1d99. pode ser usado é como um
substituto temporário para uma função ou bloco condicional, quando se
está trabalhando com código novo, ainda indefinido, permitindo que
mantenha-se o pensamento num nível mais abstrato.  O ‘pass’ é
silenciosamente ignorado:

     >>> def initlog(*args):
     ...     pass   # Lembre-se de implementar isso!
     ...

Para este último caso, muitas pessoas usam o literal de reticências
‘...’ em vez de ‘pass’.  Este uso não tem significado especial para
Python e não faz parte da definição da linguagem (você pode usar
qualquer expressão constante aqui), mas ‘...’ também é usado
convencionalmente como um espaço reservado.  Consulte *note O Objeto
Ellipsis: 1d9a.


File: python.info,  Node: Instruções match,  Next: Definindo funções,  Prev: Instruções pass,  Up: Mais ferramentas de controle de fluxo

2.4.7 Instruções ‘match’
------------------------

Uma instrução *note match: 810. pega uma expressão e compara seu valor
com padrões sucessivos fornecidos como um ou mais blocos de case.  Isso
é superficialmente semelhante a uma instrução switch em C, Java ou
JavaScript (e muitas outras linguagens), mas também pode extrair
componentes (elementos de sequência ou atributos de objeto) do valor em
variáveis, mas muito mais parecido com a correspondência de padrões em
linguages como Rust ou Haskell.  Apenas o primeiro padrão que
corresponder será executado, podendo também extrair componentes
(elementos de sequência ou atributos de objetos) do valor para
variáveis.

A forma mais simples compara um valor de assunto com um ou mais
literais:

     def http_error(status):
         match status:
             case 400:
                 return "Bad request"
             case 404:
                 return "Not found"
             case 418:
                 return "I'm a teapot"
             case _:
                 return "Something's wrong with the internet"

Observe o último bloco: o “nome da variável” ‘_’ atua como um 'curinga'
e nunca falha em corresponder.  Se nenhum caso corresponder, nenhuma das
ramificações será executada.

Você pode combinar vários literais em um único padrão usando ‘|’ (“ou”):

     case 401 | 403 | 404:
         return "Não permitido"

Os padrões podem se parecer com atribuições de desempacotamento e podem
ser usados para vincular variáveis:

     # ponto é uma tupla (x, y)
     match ponto:
         case (0, 0):
             print("Origem")
         case (0, y):
             print(f"Y={y}")
         case (x, 0):
             print(f"X={x}")
         case (x, y):
             print(f"X={x}, Y={y}")
         case _:
             raise ValueError("Não é um ponto")

Estude isso com cuidado!  O primeiro padrão tem dois literais e pode ser
considerado uma extensão do padrão literal mostrado acima.  Mas os
próximos dois padrões combinam um literal e uma variável, e a variável
'vincula' um valor do assunto (‘ponto’).  O quarto padrão captura dois
valores, o que o torna conceitualmente semelhante à atribuição de
desempacotamento ‘(x, y) = ponto’.

Se você estiver usando classes para estruturar seus dados, você pode
usar o nome da classe seguido por uma lista de argumentos semelhante a
um construtor, mas com a capacidade de capturar atributos em variáveis:

     class Ponto:
         def __init__(self, x, y):
             self.x = x
             self.y = y

     def onde_está(ponto):
         match ponto:
             case Ponto(x=0, y=0):
                 print("Origem")
             case Ponto(x=0, y=y):
                 print(f"Y={y}")
             case Ponto(x=x, y=0):
                 print(f"X={x}")
             case Ponto():
                 print("Em outro lugar")
             case _:
                 print("Não é um ponto")

Você pode usar parâmetros posicionais com algumas classes embutidas que
fornecem uma ordem para seus atributos (por exemplo, classes de dados).
Você também pode definir uma posição específica para atributos em
padrões configurando o atributo especial ‘__match_args__’ em suas
classes.  Se for definido como (“x”, “y”), os seguintes padrões são
todos equivalentes (e todos ligam o atributo ‘y’ à variável ‘var’):

     Ponto(1, var)
     Ponto(1, y=var)
     Ponto(x=1, y=var)
     Ponto(y=var, x=1)

Uma maneira recomendada de ler padrões é vê-los como uma forma estendida
do que você colocaria à esquerda de uma atribuição, para entender quais
variáveis seriam definidas para quê.  Apenas os nomes autônomos (como
‘var’ acima) são atribuídos por uma instrução de correspondência.  Nomes
pontilhados (como ‘foo.bar’), nomes de atributos (o ‘x=’ e ‘y=’ acima)
ou nomes de classes (reconhecidos pelo “(…)” próximo a eles, como
‘Ponto’ acima) nunca são atribuídos.

Os padrões podem ser aninhados arbitrariamente.  Por exemplo, se
tivermos uma pequena lista de Pontos, com ‘__match_args__’ adicionado,
poderíamos correspondê-la assim:

     class Ponto:
         __match_args__ = ('x', 'y')
         def __init__(self, x, y):
             self.x = x
             self.y = y

     match pontos:
         case []:
             print("Sem pontos")
         case [Ponto(0, 0)]:
             print("A origem")
         case [Ponto(x, y)]:
             print(f"Ponto único {x}, {y}")
         case [Ponto(0, y1), Ponto(0, y2)]:
             print(f"Dois do eixo Y em {y1}, {y2}")
         case _:
             print("Outra coisa")

Podemos adicionar uma cláusula ‘if’ a um padrão, conhecido como
“guarda”.  Se a guarda for falsa, ‘match’ tenta o próximo bloco de caso.
Observe que a captura de valor ocorre antes que a guarda seja avaliada:

     match ponto:
         case Ponto(x, y) if x == y:
             print(f"Y=X at {x}")
         case Ponto(x, y):
             print(f"Não está na diagonal")

Vários outros recursos importantes desta instrução:

   - Assim como desempacotar atribuições, os padrões de tupla e lista
     têm exatamente o mesmo significado e realmente correspondem a
     sequências arbitrárias.  Uma exceção importante é que eles não
     correspondem a iteradores ou strings.

   - Os padrões de sequência têm suporte ao desempacotamento estendido:
     ‘[x, y, *rest]’ e ‘(x, y, *rest)’ funcionam de forma semelhante ao
     desempacotamento de atribuições.  O nome depois de ‘*’ também pode
     ser ‘_’, então ‘(x, y, *_)’ corresponde a uma sequência de pelo
     menos dois itens sem ligar os itens restantes.

   - Padrões de mapeamento: ‘{"bandwidth": b, "latency": l}’ captura os
     valores ‘"bandwidth"’ e ‘"latency"’ de um dicionário.  Diferente
     dos padrões de sequência, chaves extra são ignoradas.  Um
     desempacotamento como ‘**rest’ também é permitido.  (Mas ‘**_’
     seria redundante, então não é permitido.)

   - Subpadrões podem ser capturados usando a palavra reservada ‘as’

          case (Ponto(x1, y1), Ponto(x2, y2) as p2): ...

     Vai capturar o segundo elemento da entrada como ‘p2’ (se a entrada
     for uma sequência de dois pontos)

   - A maioria dos literais são comparados por igualdade, no entanto os
     singletons ‘True’, ‘False’ e ‘None’ são comparados por identidade.

   - Padrões podem usar constantes nomeadas.  Estas devem ser nomes
     pontilhados para prevenir que sejam interpretadas como variáveis de
     captura:

          from enum import Enum
          class Cor(Enum):
              VERMELHO = 'vermelho'
              VERDE = 'verde'
              AZUL = 'azul'

          cor = Cor(input("Insira sua escolha de 'vermelho, 'azul' ou 'verde': "))

          match color:
              case Cor.VERMELHO:
                  print("Eu vejo vermelho!")
              case Cor.VERDE:
                  print("Grama é verde")
              case Cor.AZUL:
                  print("O céu é azul :)")

Para uma explicação mais detalhada e exemplos adicionais, você pode
olhar PEP 636(1) que foi escrita em formato de tutorial.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0636/


File: python.info,  Node: Definindo funções,  Next: Mais sobre definição de funções,  Prev: Instruções match,  Up: Mais ferramentas de controle de fluxo

2.4.8 Definindo funções
-----------------------

Podemos criar uma função que escreve a série de Fibonacci até um limite
arbitrário:

     >>> def fib(n):    # escreve série de Fibonacci menor que n
     ...     """Imprime uma série de Fibonacci menor que n."""
     ...     a, b = 0, 1
     ...     while a < n:
     ...         print(a, end=' ')
     ...         a, b = b, a+b
     ...     print()
     ...
     >>> # Agora chamamos a função que acabamos de definir:
     >>> fib(2000)
     0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597

A palavra reservada *note def: 14a2. inicia a 'definição' de uma função.
Ela deve ser seguida do nome da função e da lista de parâmetros formais
entre parênteses.  As instruções que formam o corpo da função começam na
linha seguinte e devem ser indentados.

Opcionalmente, a primeira linha do corpo da função pode ser uma literal
string, cujo propósito é documentar a função.  Se presente, essa string
chama-se 'docstring'.  (Há mais informação sobre docstrings na seção
*note Strings de documentação: 1d9e.)  Existem ferramentas que utilizam
docstrings para produzir automaticamente documentação online ou para
imprimir, ou ainda, permitir que o usuário navegue interativamente pelo
código.  É uma boa prática incluir sempre docstrings em suas funções,
portanto, tente fazer disso um hábito.

A 'execução' de uma função cria uma nova tabela de símbolos para as
variáveis locais da função.  Mais precisamente, todas as atribuições de
variáveis numa função são armazenadas na tabela de símbolos local;
referências a variáveis são buscadas primeiro na tabela de símbolos
local, em seguida na tabela de símbolos locais de funções delimitadoras
ou circundantes, depois na tabela de símbolos global e, finalmente, na
tabela de nomes da própria linguagem.  Embora possam ser referenciadas,
variáveis globais e de funções externas não podem ter atribuições (a
menos que seja utilizada a instrução *note global: 18a, para variáveis
globais, ou *note nonlocal: 12ea, para variáveis de funções externas).

Os parâmetros reais (argumentos) de uma chamada de função são
introduzidos na tabela de símbolos local da função no momento da
chamada; portanto, argumentos são passados 'por valor' (onde o 'valor' é
sempre uma 'referência' para objeto, não o valor do objeto).  (1)
Quando uma função chama outra função, ou chama a si mesma
recursivamente, uma nova tabela de símbolos é criada para tal chamada.

Uma definição de função associa o nome da função com o objeto função na
tabela de símbolos atual.  O interpretador reconhece o objeto apontado
pelo nome como uma função definida pelo usuário.  Outros nomes também
podem apontar para o mesmo objeto função e também pode ser usados pra
acessar a função:

     >>> fib
     <function fib at 10042ed0>
     >>> f = fib
     >>> f(100)
     0 1 1 2 3 5 8 13 21 34 55 89

Conhecendo outras linguagens, pode-se questionar que ‘fib’ não é uma
função, mas um procedimento, pois ela não devolve um valor.  Na verdade,
mesmo funções que não usam a instrução *note return: 9d6. devolvem um
valor, ainda que pouco interessante.  Esse valor é chamado ‘None’ (é um
nome embutido).  O interpretador interativo evita escrever ‘None’ quando
ele é o único resultado de uma expressão.  Mas se quiser vê-lo pode usar
a função *note print(): fa9.:

     >>> fib(0)
     >>> print(fib(0))
     None

É fácil escrever uma função que retorna uma lista de números da série de
Fibonacci, ao invés de exibi-los:

     >>> def fib2(n):  # retorna série de  Fibonacci até n
     ...     """Retorna uma lista contendo a série de Fibonacci até n."""
     ...     resultado = []
     ...     a, b = 0, 1
     ...     while a < n:
     ...         resultado.append(a)    # veja abaixo
     ...         a, b = b, a+b
     ...     return resultado
     ...
     >>> f100 = fib2(100)    # chama-o
     >>> f100                # escreve o resultado
     [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

Este exemplo demonstra novos recursos de Python:

   * A instrução *note return: 9d6. finaliza a execução e retorna um
     valor da função.  ‘return’ sem qualquer expressão como argumento
     retorna ‘None’.  Atingir o final da função também retorna ‘None’.

   * A instrução ‘result.append(a)’ chama um 'método' do objeto lista
     ‘result’.  Um método é uma função que ‘pertence’ a um objeto, e é
     chamada ‘obj.nomemetodo’, onde ‘obj’ é um objeto qualquer (pode ser
     uma expressão), e ‘nomemetodo’ é o nome de um método que foi
     definido pelo tipo do objeto.  Tipos diferentes definem métodos
     diferentes.  Métodos de diferentes tipos podem ter o mesmo nome sem
     ambiguidade.  (É possível definir seus próprios tipos de objetos e
     métodos, utilizando 'classes', veja em *note Classes: 1d9f.) O
     método *note append(): 6cd, mostrado no exemplo é definido para
     objetos do tipo lista; adiciona um novo elemento ao final da lista.
     Neste exemplo, ele equivale a ‘result = result + [a]’, só que mais
     eficiente.

   ---------- Footnotes ----------

   (1) Na verdade, 'passagem por referência para objeto' seria uma
descrição melhor, pois, se um objeto mutável for passado, quem chamou
verá as alterações feitas por quem foi chamado (por exemplo, a inclusão
de itens em uma lista).


File: python.info,  Node: Mais sobre definição de funções,  Next: Intermezzo estilo de codificação,  Prev: Definindo funções,  Up: Mais ferramentas de controle de fluxo

2.4.9 Mais sobre definição de funções
-------------------------------------

É possível definir funções com um número variável de argumentos.
Existem três formas, que podem ser combinadas.

* Menu:

* Argumentos com valor padrão::
* Argumentos nomeados::
* Parâmetros especiais::
* Listas de argumentos arbitrárias::
* Desempacotando listas de argumentos::
* Expressões lambda::
* Strings de documentação::
* Anotações de função::


File: python.info,  Node: Argumentos com valor padrão,  Next: Argumentos nomeados,  Up: Mais sobre definição de funções

2.4.9.1 Argumentos com valor padrão
...................................

A mais útil das três é especificar um valor padrão para um ou mais
argumentos.  Isso cria uma função que pode ser invocada com menos
argumentos do que os que foram definidos.  Por exemplo:

     def pergunta_ok(mensagem, tentativas=4, lembrete='Por favor, tente novamente!'):
         while True:
             resposta = input(mensagem)
             if resposta in {'s', 'sim', 'é}:
                 return True
             if resposta in {'n', 'não', 'nah'}:
                 return False
             tentativas = tentativas - 1
             if tentativas < 0:
                 raise ValueError('resposta inválida de usuário')
             print(lembrete)

Essa função pode ser chamada de várias formas:

   * fornecendo apenas o argumento obrigatório: ‘ask_ok('Do you really
     want to quit?')’

   * fornecendo um dos argumentos opcionais: ‘ask_ok('OK to overwrite
     the file?', 2)’

   * ou fornecendo todos os argumentos: ‘ask_ok('OK to overwrite the
     file?', 2, 'Come on, only yes or no!')’

Este exemplo também introduz a palavra-chave *note in: 2f4, que verifica
se uma sequência contém ou não um determinado valor.

Os valores padrões são avaliados no momento da definição da função, e no
escopo em que a função foi 'definida', portanto:

     i = 5

     def f(arg=i):
         print(arg)

     i = 6
     f()

irá exibir ‘5’.

'Aviso importante:' Valores padrões são avaliados apenas uma vez.  Isso
faz diferença quando o valor é um objeto mutável, como uma lista,
dicionário, ou instâncias de classes.  Por exemplo, a função a seguir
acumula os argumentos passados, nas chamadas subsequentes:

     def f(a, L=[]):
         L.append(a)
         return L

     print(f(1))
     print(f(2))
     print(f(3))

Isso exibirá:

     [1]
     [1, 2]
     [1, 2, 3]

Se não quiser que o valor padrão seja compartilhado entre chamadas
subsequentes, pode reescrever a função assim:

     def f(a, L=None):
         if L is None:
             L = []
         L.append(a)
         return L


File: python.info,  Node: Argumentos nomeados,  Next: Parâmetros especiais,  Prev: Argumentos com valor padrão,  Up: Mais sobre definição de funções

2.4.9.2 Argumentos nomeados
...........................

Funções também podem ser chamadas usando *note argumentos nomeados: d34.
da forma ‘chave=valor’.  Por exemplo, a função a seguir:

     def papagaio(voltagem, estado='é um cadáver', ação='voar', tipo='Azul Norueguês'):
         print("-- Este papagaio não conseguiria", ação, end=' ')
         print("nem se você desse um choque de", voltagem, "de volts nele.")
         print("-- Plumagem formosa, o", tipo)
         print("-- Ele", estado, "!")

aceita um argumento obrigatório (‘voltagem’) e três argumentos opcionais
(‘estado’, ‘ação’, e ‘tipo’).  Esta função pode ser chamada de qualquer
uma dessas formas:

     papagaio(1000)                                        # 1 argumento posicional
     papagaio(voltagem=1000)                               # 1 argumento nomeado
     papagaio(voltagem=1000000, ação='fazer VOOOOOM')      # 2 argumentos nomeados
     papagaio(ação='fazer VOOOOOM', voltagem=1000000)      # 2 argumentos nomeados
     papagaio('um milhão', 'sem vida', 'pular')            # 3 argumentos posicionais
     papagaio('mil', estado='estaria no céu')              # 1 posicional, 1 argumento

mas todas as formas a seguir seriam inválidas:

     papagaio()                       # faltando argumento obrigatório
     papagaio(voltagem=5.0, 'morto')  # argumento não nomeado após um argumento nomeado
     papagaio(110, voltagem=220)      # valor duplicado para o mesmo argumento
     papagaio(ator='John Cleese')     # argumento nomeado desconhecido

Em uma chamada de função, argumentos nomeados devem vir depois dos
argumentos posicionais.  Todos os argumentos nomeados passados devem
corresponder com argumentos aceitos pela função (ex.  ‘ator’ não é um
argumento nomeado válido para a função ‘papagaio’), mas sua ordem é
irrelevante.  Isto também inclui argumentos obrigatórios (ex.:
‘papagaio(voltagem=1000)’ funciona).  Nenhum argumento pode receber mais
de um valor.  Eis um exemplo que não funciona devido a esta restrição:

     >>> def função(a):
     ...     pass
     ...
     >>> função(0, a=0)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: função() got multiple values for argument 'a'

Quando um último parâmetro formal no formato ‘**nome’ está presente, ele
recebe um dicionário (veja *note Tipo mapeamento — dict: ad6.) contendo
todos os argumentos nomeados, exceto aqueles que correspondem a um
parâmetro formal.  Isto pode ser combinado com um parâmetro formal no
formato ‘*nome’ (descrito na próxima subseção) que recebe uma *note
tupla: 1da6. contendo os argumentos posicionais, além da lista de
parâmetros formais.  (‘*nome’ deve ocorrer antes de ‘**nome’.)  Por
exemplo, se definirmos uma função assim:

     def loja_de_queijos(tipo, *argumentos, **argumentos_nomeados):
         print("-- Você tem algum", tipo, "?")
         print("-- Lamento, acabou o", tipo)
         for arg in argumentos:
             print(arg)
         print("-" * 40)
         for kw in argumentos_nomeados:
             print(kw, ":", argumentos_nomeados[kw])

Pode ser chamada assim:

     loja_de_queijos("Limburger", "Está muito mole, senhor",
                "Está realmente muito, MUITO mole, senhor.",
                vendedor="Michael Palin",
                cliente="John Cleese",
                sketch="Sketch da Loja de Queijos")

e, claro, exibiria:

     -- Você tem algum Limburger ?
     -- Lamento, acabou o Limburger
     Está muito mole, senhor.
     Está realmente muito, MUITO mole, senhor.
     ----------------------------------------
     vendedor : Michael Palin
     cliente : John Cleese
     sketch : Cheese Shop Sketch

Observe que a ordem em que os argumentos nomeados são exibidos é
garantida para corresponder à ordem em que foram fornecidos na chamada
da função.


File: python.info,  Node: Parâmetros especiais,  Next: Listas de argumentos arbitrárias,  Prev: Argumentos nomeados,  Up: Mais sobre definição de funções

2.4.9.3 Parâmetros especiais
............................

Por padrão, argumentos podem ser passadas para uma função Python tanto
por posição quanto explicitamente pelo nome.  Para uma melhor
legibilidade e desempenho, faz sentido restringir a maneira pelo qual
argumentos possam ser passados, assim um desenvolvedor precisa apenas
olhar para a definição da função para determinar se os itens são
passados por posição, por posição e nome, ou por nome.

A definição de uma função pode parecer com:

     def f(pos1, pos2, /, pos_ou_kwd, *, kwd1, kwd2):
           -----------    ----------     ----------
             |             |                  |
             |        Posicional ou nomeado   |
             |                                - Somente nomeado
              -- Somente posicional

onde ‘/’ e ‘*’ são opcionais.  Se usados, esses símbolos indicam o tipo
de parâmetro pelo qual os argumentos podem ser passados para as funções:
somente-posicional, posicional-ou-nomeado, e somente-nomeado.
Parâmetros nomeados são também conhecidos como parâmetros palavra-chave.

* Menu:

* Argumentos posicional-ou-nomeados::
* Parâmetros somente-posicionais: Parâmetros somente-posicionais<2>.
* Argumentos somente-nomeados::
* Exemplos de funções::
* Recapitulando::


File: python.info,  Node: Argumentos posicional-ou-nomeados,  Next: Parâmetros somente-posicionais<2>,  Up: Parâmetros especiais

2.4.9.4 Argumentos posicional-ou-nomeados
.........................................

Se ‘/’ e ‘*’ não estão presentes na definição da função, argumentos
podem ser passados para uma função por posição ou por nome.


File: python.info,  Node: Parâmetros somente-posicionais<2>,  Next: Argumentos somente-nomeados,  Prev: Argumentos posicional-ou-nomeados,  Up: Parâmetros especiais

2.4.9.5 Parâmetros somente-posicionais
......................................

Olhando com um pouco mais de detalhes, é possível definir certos
parâmetros como 'somente-posicional'.  Se 'somente-posicional', a ordem
do parâmetro importa, e os parâmetros não podem ser passados por nome.
Parâmetros somente-posicional são colocados antes de ‘/’ (barra).  A ‘/’
é usada para logicamente separar os argumentos somente-posicional dos
demais parâmetros.  Se não existe uma ‘/’ na definição da função, não
existe parâmetros somente-posicionais.

Parâmetros após a ‘/’ podem ser 'posicional-ou-nomeado' ou
'somente-nomeado'.


File: python.info,  Node: Argumentos somente-nomeados,  Next: Exemplos de funções,  Prev: Parâmetros somente-posicionais<2>,  Up: Parâmetros especiais

2.4.9.6 Argumentos somente-nomeados
...................................

Para definir parâmetros como 'somente-nomeado', indicando que o
parâmetro deve ser passado por argumento nomeado, colocamos um ‘*’ na
lista de argumentos imediatamente antes do primeiro parâmetro
'somente-nomeado'.


File: python.info,  Node: Exemplos de funções,  Next: Recapitulando,  Prev: Argumentos somente-nomeados,  Up: Parâmetros especiais

2.4.9.7 Exemplos de funções
...........................

Considere o seguinte exemplo de definição de função com atenção
redobrada para os marcadores ‘/’ e ‘*’:

     >>> def arg_padrão(arg):
     ...     print(arg)
     ...
     >>> def arg_somente_pos(arg, /):
     ...     print(arg)
     ...
     >>> def arg_somente_nom(*, arg):
     ...     print(arg)
     ...
     >>> def exemplo_combinado(somente_pos, /, padrão, *, somente_nom):
     ...     print(somente_pos, padrão, somente_nom)

A definição da primeira função, ‘arg_padrão’, a forma mais familiar, não
coloca nenhuma restrição para a chamada da função e argumentos podem ser
passados por posição ou nome:

     >>> arg_padrão(2)
     2

     >>> arg_padrão(arg=2)
     2

A segunda função ‘arg_somente_pos’ está restrita ao uso de parâmetros
somente posicionais, uma vez que existe uma ‘/’ na definição da função:

     >>> arg_somente_pos(1)
     1

     >>> arg_somente_pos(arg=1)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: arg_somente_pos() got some positional-only arguments passed as keyword arguments: 'arg'

A terceira função ‘arg_somente_nom’ permite somente argumentos nomeados
como indicado pelo ‘*’ na definição da função:

     >>> arg_somente_nom(3)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: arg_somente_nom() takes 0 positional arguments but 1 was given

     >>> arg_somente_nom(arg=3)
     3

E a última usa as três convenções de chamada na mesma definição de
função:

     >>> exemplo_combinado(1, 2, 3)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: exemplo_combinado() takes 2 positional arguments but 3 were given

     >>> exemplo_combinado(1, 2, somente_nom=3)
     1 2 3

     >>> exemplo_combinado(1, padrão=2, somente_nom=3)
     1 2 3

     >>> exemplo_combinado(somente_pos=1, padrão=2, somente_nom=3)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: exemplo_combinado() got some positional-only arguments passed as keyword arguments: 'somente_pos'

Finalmente, considere essa definição de função que possui uma potencial
colisão entre o argumento posicional ‘nome’ e ‘**kwds’ que possui ‘nome’
como uma chave:

     def foo(nome, **kwds):
         return 'nome' in kwds

Não é possível essa chamada devolver ‘True’, uma vez que o argumento
nomeado ‘'nome'’ sempre será aplicado para o primeiro parâmetro.  Por
exemplo:

     >>> foo(1, **{'nome': 2})
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: foo() got multiple values for argument 'nome'
     >>>

Mas usando ‘/’ (argumentos somente-posicionais), isso é possível já que
permite ‘nome’ como um argumento posicional e ‘'nome'’ como uma chave
nos argumentos nomeados:

     >>> def foo(nome, /, **kwds):
     ...     return 'nome' in kwds
     ...
     >>> foo(1, **{'nome': 2})
     True

Em outras palavras, o nome de parâmetros somente-posicional podem ser
usados em ‘**kwds’ sem ambiguidade.


File: python.info,  Node: Recapitulando,  Prev: Exemplos de funções,  Up: Parâmetros especiais

2.4.9.8 Recapitulando
.....................

A situação irá determinar quais parâmetros usar na definição da função:

     def f(pos1, pos2, /, pos_ou_nom *, nom1, nom2):

Como guia:

   * Use somente-posicional se você não quer que o nome do parâmetro
     esteja disponível para o usuário.  Isso é útil quando nomes de
     parâmetros não tem um significado real, se você quer forçar a ordem
     dos argumentos da função quando ela é chamada ou se você precisa
     ter alguns parâmetros posicionais e alguns nomeados.

   * Use somente-nomeado quando os nomes tem significado e a definição
     da função fica mais clara deixando esses nomes explícitos ou se
     você quer evitar que usuários confiem na posição dos argumentos que
     estão sendo passados.

   * Para uma API, use somente-posicional para evitar quebras na mudança
     da API se os nomes dos parâmetros forem alterados no futuro.


File: python.info,  Node: Listas de argumentos arbitrárias,  Next: Desempacotando listas de argumentos,  Prev: Parâmetros especiais,  Up: Mais sobre definição de funções

2.4.9.9 Listas de argumentos arbitrárias
........................................

Finalmente, a opção menos usada é especificar que a função pode ser
chamada com um número arbitrário de argumentos.  Esses argumentos serão
empacotados em uma tupla (ver *note Tuplas e Sequências: 1da6.).  Antes
dos argumentos em número variável, zero ou mais argumentos normais podem
estar presentes.

     def escreve_vários_itens(arquivo, separador, *args):
         file.write(separador.join(args))

Normalmente, esses argumentos 'variádicos' estarão no final da lista de
parâmetros formais, porque eles englobam todos os argumentos de entrada
restantes, que são passados para a função.  Quaisquer parâmetros formais
que ocorrem após o parâmetro ‘*args’ são argumentos ‘somente-nomeados’ ,
o que significa que eles só podem ser usados como chave-valor, em vez de
argumentos posicionais:

     >>> def concat(*args, sep="/"):
     ...     return sep.join(args)
     ...
     >>> concat("terra", "marte", "vênus")
     'terra/marte/vênus'
     >>> concat("terra", "marte", "vênus", sep=".")
     'terra.marte.vênus'


File: python.info,  Node: Desempacotando listas de argumentos,  Next: Expressões lambda,  Prev: Listas de argumentos arbitrárias,  Up: Mais sobre definição de funções

2.4.9.10 Desempacotando listas de argumentos
............................................

A situação inversa ocorre quando os argumentos já estão numa lista ou
tupla mas ela precisa ser explodida para invocarmos uma função que
requer argumentos posicionais separados.  Por exemplo, a função *note
range(): 94a. espera argumentos separados, 'start' e 'stop'.  Se os
valores já estiverem juntos em uma lista ou tupla, escreva a chamada de
função com o operador ‘*’ para desempacotá-los da sequência:

     >>> list(range(3, 6))            # chamada normal com argumentos separados
     [3, 4, 5]
     >>> args = [3, 6]
     >>> list(range(*args))           # chamada com argumentos desempacotados a partir de uma lista
     [3, 4, 5]

Da mesma forma, dicionários podem produzir argumentos nomeados com o
operador ‘**’:

     >>> def papagaio(voltagem, estado='um cadáver', ação='voar'):
     ...     print("-- Este papagaio não conseguiria", ação, end=' ')
     ...     print("nem se você desse um choque de", voltagem, "de volts nele.", end=' ')
     ...     print("Ele", estado, "!")
     ...
     >>> d = {"voltagem": "quatro milhões", "estado": "está realmente morto", "ação": "voar"}
     >>> papagaio(**d)
     -- Este papagaio não conseguiria voar nem se você desse um choque de quatro milhões de volts nele. Ele está realmente morto !


File: python.info,  Node: Expressões lambda,  Next: Strings de documentação,  Prev: Desempacotando listas de argumentos,  Up: Mais sobre definição de funções

2.4.9.11 Expressões lambda
..........................

Pequenas funções anônimas podem ser criadas com a palavra-chave *note
lambda: 12df.  Esta função retorna a soma de seus dois argumentos:
‘lambda a, b: a+b’.  As funções lambda podem ser usadas sempre que
objetos função forem necessários.  Eles são sintaticamente restritos a
uma única expressão.  Semanticamente, eles são apenas açúcar sintático
para uma definição de função normal.  Como definições de funções
aninhadas, as funções lambda podem referenciar variáveis contidas no
escopo:

     >>> def cria_incrementador(n):
     ...     return lambda x: x + n
     ...
     >>> f = cria_incrementador(42)
     >>> f(0)
     42
     >>> f(1)
     43

O exemplo acima usa uma expressão lambda para retornar uma função.
Outro uso é passar uma pequena função como um argumento.  Por exemplo,
*note list.sort(): be8. recebe uma função chave de ordenação 'key' que
pode ser uma função lambda:

     >>> pairs = [(1, 'um'), (2, 'dois'), (3, 'três), (4, 'quatro')]
     >>> pairs.sort(key=lambda pair: pair[1])
     >>> pairs
     [(4, 'quatro'), (1, 'um'), (3, 'três'), (2, 'dois')]


File: python.info,  Node: Strings de documentação,  Next: Anotações de função,  Prev: Expressões lambda,  Up: Mais sobre definição de funções

2.4.9.12 Strings de documentação
................................

Aqui estão algumas convenções sobre o conteúdo e formatação de strings
de documentação, também conhecidas como docstrings.

A primeira linha deve sempre ser curta, um resumo conciso do propósito
do objeto.  Por brevidade, não deve explicitamente se referir ao nome ou
tipo do objeto, uma vez que estas informações estão disponíveis por
outros meios (exceto se o nome da função for o próprio verbo que
descreve a finalidade da função).  Essa linha deve começar com letra
maiúscula e terminar com ponto.

Se existem mais linhas na string de documentação, a segunda linha deve
estar em branco, separando visualmente o resumo do resto da descrição.
As linhas seguintes devem conter um ou mais parágrafos descrevendo as
convenções de chamada ao objeto, seus efeitos colaterais, etc.

The Python parser strips indentation from multi-line string literals
when they serve as module, class, or function docstrings.

Eis um exemplo de uma string de documentação multilinha:

     >>> def my_function():
     ...     """Do nothing, but document it.
     ...
     ...     No, really, it doesn't do anything:
     ...
     ...         >>> my_function()
     ...         >>>
     ...     """
     ...     pass
     ...
     >>> print(my_function.__doc__)
     Do nothing, but document it.

     No, really, it doesn't do anything:

         >>> my_function()
         >>>


File: python.info,  Node: Anotações de função,  Prev: Strings de documentação,  Up: Mais sobre definição de funções

2.4.9.13 Anotações de função
............................

*note Anotações de função: 1db6. são informações de metadados
completamente opcionais sobre os tipos usados pelas funções definidas
pelo usuário (veja PEP 3107(1) e PEP 484(2) para mais informações).

*note Anotações: 1db7. são armazenadas no atributo ‘__annotations__’ da
função como um dicionário e não tem nenhum efeito em qualquer outra
parte da função.  Anotações de parâmetro são definidas por dois-pontos
(“:”) após o nome do parâmetro, seguida por uma expressão que quando
avaliada determina o valor da anotação.  Anotações do tipo do retorno
são definidas por um literal ‘->’, seguida por uma expressão, entre a
lista de parâmetro e os dois-pontos que marcam o fim da instrução *note
def: 14a2. .  O exemplo a seguir possui um argumento obrigatório, um
argumento opcional e o valor de retorno anotados:

     >>> def f(ham: str, ovos: str = 'ovos') -> str:
     ...     print("Anotações:", f.__annotations__)
     ...     print("Argumentos:", ham, ovos)
     ...     return ham + ' e ' + ovos
     ...
     >>> f('spam')
     Anotações: {'ham': <class 'str'>, 'return': <class 'str'>, 'ovos': <class 'str'>}
     Argumentos: spam ovos
     'spam e ovos'

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3107/

   (2) https://peps.python.org/pep-0484/


File: python.info,  Node: Intermezzo estilo de codificação,  Prev: Mais sobre definição de funções,  Up: Mais ferramentas de controle de fluxo

2.4.10 Intermezzo: estilo de codificação
----------------------------------------

Agora que está prestes a escrever códigos mais longos e complexos em
Python, é um bom momento para falar sobre 'estilo de codificação'.  A
maioria das linguagens podem ser escritas (ou 'formatadas') em
diferentes estilos; alguns são mais legíveis do que outros.  Tornar o
seu código mais fácil de ler, para os outros, é sempre uma boa ideia, e
adotar um estilo de codificação agradável ajuda bastante.

Em Python, a PEP 8(1) tornou-se o guia de estilo adotado pela maioria
dos projetos; promove um estilo de codificação muito legível e
visualmente agradável.  Todo desenvolvedor Python deve lê-lo em algum
momento; eis os pontos mais importantes, selecionados para você:

   * Use indentação com 4 espaços, e não use tabulações.

     4 espaços são um bom meio termo entre indentação estreita (permite
     maior profundidade de aninhamento) e indentação larga (mais fácil
     de ler).  Tabulações trazem complicações, e o melhor é não usar.

   * Quebre as linhas de modo que não excedam 79 caracteres.

     Isso ajuda os usuários com telas pequenas e torna possível abrir
     vários arquivos de código lado a lado em telas maiores.

   * Deixe linhas em branco para separar funções e classes, e blocos de
     código dentro de funções.

   * Quando possível, coloque comentários em uma linha própria.

   * Escreva strings de documentação.

   * Use espaços ao redor de operadores e após vírgulas, mas não
     diretamente dentro de parênteses, colchetes e chaves: ‘a = f(1, 2)
     + g(3, 4)’.

   * Nomeie suas classes e funções de forma consistente; a convenção é
     usar ‘MaiusculoCamelCase’ para classes e ‘minusculo_com_sublinhado’
     para funções e métodos.  Sempre use ‘self’ como o nome para o
     primeiro argumento dos métodos (veja *note Uma primeira olhada nas
     classes: 1dba. para mais informações sobre classes e métodos).

   * Não use codificações exóticas se o seu código é feito para ser
     usado em um contexto internacional.  O padrão do Python, UTF-8, ou
     mesmo ASCII puro funciona bem em qualquer caso.

   * Da mesma forma, não use caracteres não-ASCII em identificadores se
     houver apenas a menor chance de pessoas falando um idioma diferente
     ler ou manter o código.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0008/


File: python.info,  Node: Estruturas de dados,  Next: Módulos<2>,  Prev: Mais ferramentas de controle de fluxo,  Up: O tutorial do Python

2.5 Estruturas de dados
=======================

Esse capítulo descreve algumas coisas que você já aprendeu em detalhes e
adiciona algumas coisas novas também.

* Menu:

* Mais sobre listas::
* A instrução del::
* Tuplas e Sequências::
* Conjuntos::
* Dicionários::
* Técnicas de iteração::
* Mais sobre condições::
* Comparando sequências e outros tipos::


File: python.info,  Node: Mais sobre listas,  Next: A instrução del,  Up: Estruturas de dados

2.5.1 Mais sobre listas
-----------------------

O tipo de dado *note lista: 1dc0. tem ainda mais métodos.  Aqui estão
apresentados todos os métodos de objetos do tipo lista:

 -- Método: list.append (x)

     Adiciona um item ao fim da lista.  Similar a ‘a[len(a):] = [x]’.

 -- Método: list.extend (iterable)

     Estende a lista, adicionando no fim todos os elementos do argumento
     iterável passado como parâmetro.  Similar a ‘a[len(a):] =
     iterable’.

 -- Método: list.insert (i, x)

     Insere um item em uma dada posição.  O primeiro argumento é o
     índice do elemento antes do qual será feita a inserção, assim
     ‘a.insert(0, x)’ insere um elemento na frente da lista e
     ‘a.insert(len(a), x)’ e equivale a ‘a.append(x)’.

 -- Método: list.remove (x)

     Remove o primeiro item encontrado na lista cujo valor é igual a
     'x'.  Se não existir valor igual, uma exceção *note ValueError:
     202. é levantada.

 -- Método: list.pop ([i])

     Remove o item na posição fornecida na lista e retorna.  Se nenhum
     índice for especificado, ‘a.pop()’ remove e retorna o último item
     da lista.  Levanta um *note IndexError: 157e. se a lista estiver
     vazia ou o índice estiver fora do intervalo da lista.

 -- Método: list.clear ()

     Remove todos os itens de uma lista.  Similar a ‘del a[:]’.

 -- Método: list.index (x[, start[, end]])

     Retorna o índice de base zero da primeira ocorrência de 'x' na
     lista.  Levanta *note ValueError: 202. se não houver tal item.

     Os argumentos opcionais 'start' e 'end' são interpretados como nas
     notações de fatiamento e são usados para limitar a busca para uma
     subsequência específica da lista.  O índice retornado é calculado
     relativo ao começo da sequência inteira e não referente ao
     argumento 'start'.

 -- Método: list.count (x)

     Devolve o número de vezes em que 'x' aparece na lista.

 -- Método: list.sort (*, key=None, reverse=False)

     Ordena os itens na lista (os argumentos podem ser usados para
     personalizar a ordenação, veja a função *note sorted(): be7. para
     maiores explicações).

 -- Método: list.reverse ()

     Inverte a ordem dos elementos na lista.

 -- Método: list.copy ()

     Devolve uma cópia rasa da lista.  Similar a ‘a[:]’.

Um exemplo que usa a maior parte dos métodos das listas:

     >>> frutas = ['laranja', 'maçã', 'pera', 'banana', 'kiwi', 'maçã', 'banana']
     >>> frutas.count('maçã')
     2
     >>> frutas.count('tangerina')
     0
     >>> frutas.index('banana')
     3
     >>> frutas.index('banana', 4) # Encontra a próxima banana iniciando da posição 4
     6
     >>> frutas.reverse()
     >>> frutas
     ['banana', 'maçã', 'kiwi', 'banana', 'pera', 'maçã', 'laranja']
     >>> frutas.append('uva')
     >>> frutas
     ['banana', 'maçã', 'kiwi', 'banana', 'pera', 'maçã', 'laranja', 'uva']
     >>> frutas.sort()
     >>> frutas
     ['maçã', 'maçã', 'banana', 'banana', 'uva', 'kiwi', 'laranja', 'pera']
     >>> frutas.pop()
     'pera'

Você pode ter percebido que métodos como ‘insert’, ‘remove’ ou ‘sort’,
que apenas modificam a lista, não têm valor de retorno impresso – eles
retornam o ‘None’ padrão.  (1)  Isto é um princípio de design para todas
as estruturas de dados mutáveis em Python.

Outro aspecto que você pode notar é que nem todos os dados podem ser
classificados ou comparados.  Por exemplo, ‘[None, 'hello', 10]’ não é
ordenável porque os inteiros não podem ser comparados a strings e ‘None’
não pode ser comparado a outros tipos.  Além disso, há alguns tipos que
não têm uma relação de ordenação definida.  Por exemplo, ‘3+4j < 5+7j’
não é uma comparação válida.

* Menu:

* Usando listas como pilhas::
* Usando listas como filas::
* Compreensões de lista: Compreensões de lista<2>.
* Compreensões de lista aninhadas::

   ---------- Footnotes ----------

   (1) Outras linguagens podem retornar o objeto modificado, o que
permite encadeamento de métodos, como
‘d->insert("a")->remove("b")->sort();’.


File: python.info,  Node: Usando listas como pilhas,  Next: Usando listas como filas,  Up: Mais sobre listas

2.5.1.1 Usando listas como pilhas
.................................

Os métodos de lista tornam muito fácil utilizar listas como pilhas, onde
o item adicionado por último é o primeiro a ser recuperado (política
“último a entrar, primeiro a sair”).  Para adicionar um item ao topo da
pilha, use *note append(): 6cd.  Para recuperar um item do topo da pilha
use *note pop(): 1dc3. sem nenhum índice.  Por exemplo:

     >>> pilha = [3, 4, 5]
     >>> pilha.append(6)
     >>> pilha.append(7)
     >>> pilha
     [3, 4, 5, 6, 7]
     >>> pilha.pop()
     7
     >>> pilha
     [3, 4, 5, 6]
     >>> pilha.pop()
     6
     >>> pilha.pop()
     5
     >>> pilha
     [3, 4]


File: python.info,  Node: Usando listas como filas,  Next: Compreensões de lista<2>,  Prev: Usando listas como pilhas,  Up: Mais sobre listas

2.5.1.2 Usando listas como filas
................................

Você também pode usar uma lista como uma fila, onde o primeiro item
adicionado é o primeiro a ser recuperado (política “primeiro a entrar,
primeiro a sair”); porém, listas não são eficientes para esta
finalidade.  Embora 'appends' e 'pops' no final da lista sejam rápidos,
fazer 'inserts' ou 'pops' no início da lista é lento (porque todos os
demais elementos têm que ser deslocados).

Para implementar uma fila, use a classe *note collections.deque: 5dc.
que foi projetada para permitir 'appends' e 'pops' eficientes nas duas
extremidades.  Por exemplo:

     >>> from collections import deque
     >>> fila = deque(["Erik", "João", "Miguel"])
     >>> fila.append("Tiago")            # Tiago chega
     >>> fila.append("George")           # George chega
     >>> fila.popleft()                  # O primeiro a chegar agora sai
     'Erik'
     >>> fila.popleft()                  # O segundo a chegar agora sai
     'João'
     >>> fila                            # A fila restante na ordem de chegada
     deque(['Miguel', 'Tiago', 'George'])


File: python.info,  Node: Compreensões de lista<2>,  Next: Compreensões de lista aninhadas,  Prev: Usando listas como filas,  Up: Mais sobre listas

2.5.1.3 Compreensões de lista
.............................

Compreensões de lista fornece uma maneira concisa de criar uma lista.
Aplicações comuns são criar novas listas onde cada elemento é o
resultado de alguma operação aplicada a cada elemento de outra sequência
ou iterável, ou criar uma subsequência de elementos que satisfaçam uma
certa condição.  (N.d.T. o termo original em inglês é 'list
comprehensions', muito utilizado no Brasil; também se usa a abreviação
'listcomp').

Por exemplo, suponha que queremos criar uma lista de quadrados, assim:

     >>> quadrados = []
     >>> for x in range(10):
     ...     quadrados.append(x**2)
     ...
     >>> quadrados
     [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

Note que isto cria (ou sobrescreve) uma variável chamada ‘x’ que ainda
existe após o término do laço.  Podemos calcular a lista dos quadrados
sem qualquer efeito colateral usando:

     quadrados = list(map(lambda x: x**2, range(10)))

ou, de maneira equivalente:

     quadrados = [x**2 for x in range(10)]

que é mais conciso e legível.

Um compreensão de lista consiste de um par de colchetes contendo uma
expressão seguida de uma cláusula ‘for’, e então zero ou mais cláusulas
‘for’ ou ‘if’.  O resultado será uma nova lista resultante da avaliação
da expressão no contexto das cláusulas ‘for’ e ‘if’.  Por exemplo, essa
compreensão combina os elementos de duas listas se eles forem
diferentes:

     >>> [(x, y) for x in [1,2,3] for y in [3,1,4] if x != y]
     [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

e é equivalente a:

     >>> combos = []
     >>> for x in [1,2,3]:
     ...     for y in [3,1,4]:
     ...         if x != y:
     ...             combos.append((x, y))
     ...
     >>> combos
     [(1, 3), (1, 4), (2, 3), (2, 1), (2, 4), (3, 1), (3, 4)]

Note como a ordem das instruções *note for: 2f2. e *note if: 2f3. é a
mesma em ambos os trechos.

Se a expressão é uma tupla (ex., ‘(x, y)’ no exemplo anterior), ela deve
ser inserida entre parênteses.

     >>> vec = [-4, -2, 0, 2, 4]
     >>> # cria uma nova lista com os valores dobrados
     >>> [x*2 for x in vec]
     [-8, -4, 0, 4, 8]
     >>> # filtra a lista para excluir números negativos
     >>> [x for x in vec if x >= 0]
     [0, 2, 4]
     >>> # aplica uma função para todos os elementos
     >>> [abs(x) for x in vec]
     [4, 2, 0, 2, 4]
     >>> # chama um método em cada elemento
     >>> frutafresca = ['  banana', '  baga-de-logan ', 'maracujá  ']
     >>> [arma.strip() for arma in frutafresca]
     ['banana', 'baga-de-logan', 'maracujá']
     >>> # cria uma lista de tuplas de 2 elementos como (número, quadrado)
     >>> [(x, x**2) for x in range(6)]
     [(0, 0), (1, 1), (2, 4), (3, 9), (4, 16), (5, 25)]
     >>> # a tupla deve estar entre parênteses, do contrário um erro é levantado
     >>> [x, x**2 for x in range(6)]
       File "<stdin>", line 1
         [x, x**2 for x in range(6)]
          ^^^^^^^
     SyntaxError: did you forget parentheses around the comprehension target?
     >>> # achatamento de uma lista usando uma compreensão de lista com dois 'for'
     >>> vec = [[1,2,3], [4,5,6], [7,8,9]]
     >>> [num for elem in vec for num in elem]
     [1, 2, 3, 4, 5, 6, 7, 8, 9]

Compreensões de lista podem conter expressões complexas e funções
aninhadas:

     >>> from math import pi
     >>> [str(round(pi, i)) for i in range(1, 6)]
     ['3.1', '3.14', '3.142', '3.1416', '3.14159']


File: python.info,  Node: Compreensões de lista aninhadas,  Prev: Compreensões de lista<2>,  Up: Mais sobre listas

2.5.1.4 Compreensões de lista aninhadas
.......................................

A expressão inicial em uma compreensão de lista pode ser qualquer
expressão arbitrária, incluindo outra compreensão de lista.

Observe este exemplo de uma matriz 3x4 implementada como uma lista de 3
listas de comprimento 4:

     >>> matriz = [
     ...     [1, 2, 3, 4],
     ...     [5, 6, 7, 8],
     ...     [9, 10, 11, 12],
     ... ]

A compreensão de lista abaixo transpõe as linhas e colunas:

     >>> [[linha[i] for linha in matriz] for i in range(4)]
     [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

Como vimos na seção anterior, a compreensão de lista interna é computada
no contexto da cláusula *note for: 2f2. seguinte, portanto o exemplo
acima equivale a:

     >>> transposta = []
     >>> for i in range(4):
     ...     transposta.append([row[i] for linha in matriz])
     ...
     >>> transposta
     [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

e isso, por sua vez, faz o mesmo que isto:

     >>> transposta = []
     >>> for i in range(4):
     ...     # as 3 linhas a seguir implementam uma compreensão de lista aninhada
     ...     linha_transposta = []
     ...     for linha in matriz:
     ...         linha_transposta.append(linha[i])
     ...     transposta.append(linha_transposta)
     ...
     >>> transposta
     [[1, 5, 9], [2, 6, 10], [3, 7, 11], [4, 8, 12]]

Na prática, você deve dar preferência a funções embutidas em vez de
instruções complexas.  A função *note zip(): 7d1. resolve muito bem este
caso de uso:

     >>> list(zip(*matriz))
     [(1, 5, 9), (2, 6, 10), (3, 7, 11), (4, 8, 12)]

Veja *note Desempacotando listas de argumentos: 1daf. para entender o
uso do asterisco neste exemplo.


File: python.info,  Node: A instrução del,  Next: Tuplas e Sequências,  Prev: Mais sobre listas,  Up: Estruturas de dados

2.5.2 A instrução ‘del’
-----------------------

Existe uma maneira de remover um item de uma lista usando seu índice no
lugar do seu valor: a instrução *note del: 18a7.  Ela difere do método
*note pop(): 1dc3. que devolve um valor.  A instrução ‘del’ pode também
ser utilizada para remover fatias de uma lista ou limpar a lista inteira
(que fizemos antes atribuindo uma lista vazia à fatia ‘a[:]’).  Por
exemplo:

     >>> a = [-1, 1, 66.25, 333, 333, 1234.5]
     >>> del a[0]
     >>> a
     [1, 66.25, 333, 333, 1234.5]
     >>> del a[2:4]
     >>> a
     [1, 66.25, 1234.5]
     >>> del a[:]
     >>> a
     []

*note del: 18a7. também pode ser usado para remover totalmente uma
variável:

     >>> del a

Referenciar a variável ‘a’ depois de sua remoção constitui erro (pelo
menos até que seja feita uma nova atribuição para ela).  Encontraremos
outros usos para a instrução *note del: 18a7. mais tarde.


File: python.info,  Node: Tuplas e Sequências,  Next: Conjuntos,  Prev: A instrução del,  Up: Estruturas de dados

2.5.3 Tuplas e Sequências
-------------------------

Vimos que listas e strings têm muitas propriedades em comum, como
indexação e operações de fatiamento.  Elas são dois exemplos de
'sequências' (veja *note Tipos sequências — list, tuple, range: 1dcc.).
Como Python é uma linguagem em evolução, outros tipos de sequências
podem ser adicionados.  Existe ainda um outro tipo de sequência padrão
na linguagem: a 'tupla'.

Uma tupla consiste em uma sequência de valores separados por vírgulas,
por exemplo:

     >>> t = 12345, 54321, 'olá!'
     >>> t[0]
     12345
     >>> t
     (12345, 54321, 'olá!')
     >>> # Tuplas pode ser aninhadas:
     >>> u = t, (1, 2, 3, 4, 5)
     >>> u
     ((12345, 54321, 'olá!'), (1, 2, 3, 4, 5))
     >>> # Tuplas são imutáveis:
     >>> t[0] = 88888
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: 'tuple' object does not support item assignment
     >>> # mas elas podem conter objetos mutáveis:
     >>> v = ([1, 2, 3], [3, 2, 1])
     >>> v
     ([1, 2, 3], [3, 2, 1])

Como você pode ver no trecho acima, na saída do console as tuplas são
sempre envolvidas por parênteses, assim tuplas aninhadas podem ser lidas
corretamente.  Na criação, tuplas podem ser envolvidas ou não por
parênteses, desde que o contexto não exija os parênteses (como no caso
da tupla dentro de uma expressão maior).  Não é possível atribuir itens
individuais de uma tupla, contudo é possível criar tuplas que contenham
objetos mutáveis, como listas.

Apesar de tuplas serem similares a listas, elas são frequentemente
utilizadas em situações diferentes e com propósitos distintos.  Tuplas
são *note imutáveis: 1d79, e usualmente contém uma sequência heterogênea
de elementos que são acessados via desempacotamento (ver a seguir nessa
seção) ou índice (ou mesmo por um atributo no caso de *note namedtuples:
1ca.).  Listas são *note mutáveis: 1d7e, e seus elementos geralmente são
homogêneos e são acessados iterando sobre a lista.

Um problema especial é a criação de tuplas contendo 0 ou 1 itens: a
sintaxe usa certos truques para acomodar estes casos.  Tuplas vazias são
construídas por um par de parênteses vazios; uma tupla unitária é
construída por um único valor seguido de uma vírgula (não basta colocar
um único valor entre parênteses).  Feio, mas funciona.  Por exemplo:

     >>> vazio = ()
     >>> unitário = 'olá', # <!- note a vírgula ao final
     >>> len(vazio)
     0
     >>> len(unitário)
     1
     >>> unitário
     ('olá',)

A instrução ‘t = 12345, 54321, 'bom dia!'’ é um exemplo de
'empacotamento de tupla': os valores ‘12345’, ‘54321’ e ‘'bom dia!'’ são
empacotados em uma tupla.  A operação inversa também é possível:

     >>> x, y, z = t

Isso é chamado, apropriadamente, de 'desempacotamento de sequência' e
funciona para qualquer sequência no lado direito.  O desempacotamento de
sequência requer que haja tantas variáveis no lado esquerdo do sinal de
igual, quanto existem de elementos na sequência.  Observe que a
atribuição múltipla é, na verdade, apenas uma combinação de
empacotamento de tupla e desempacotamento de sequência.


File: python.info,  Node: Conjuntos,  Next: Dicionários,  Prev: Tuplas e Sequências,  Up: Estruturas de dados

2.5.4 Conjuntos
---------------

Python também inclui um tipo de dados para *note conjuntos: 1dcf,
chamado ‘set’.  Um conjunto é uma coleção desordenada de elementos, sem
elementos repetidos.  Usos comuns para conjuntos incluem a verificação
eficiente da existência de objetos e a eliminação de itens duplicados.
Conjuntos também suportam operações matemáticas como união, interseção,
diferença e diferença simétrica.

Chaves ou a função *note set(): 5d9. podem ser usados para criar
conjuntos.  Note: para criar um conjunto vazio você precisa usar
‘set()’, não ‘{}’; este último cria um dicionário vazio, uma estrutura
de dados que discutiremos na próxima seção.

Uma pequena demonstração:

     >>> cesta = {'maçã', 'laranja', 'maçã', 'pera', 'laranja', 'banana'}
     >>> print(cesta)                       # mostra que itens duplicados foram removidos
     {'laranja', 'banana', 'pera', 'maçã'}
     >>> 'laranja' in cesta                 # teste de pertinência rápido
     True
     >>> 'crabgrass' in cesta
     False

     >>> # Demonstra operações de conjunto em letras únicas de duas palavras
     >>>
     >>> a = set('abracadabra')
     >>> b = set('alacazam')
     >>> a                                  # letras únicas em a
     {'a', 'r', 'b', 'c', 'd'}
     >>> a - b                              # letras em a, mas não em b
     {'r', 'd', 'b'}
     >>> a | b                              # letras em a ou em b ou ambos
     {'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
     >>> a & b                              # letras em ambos a e b
     {'a', 'c'}
     >>> a ^ b                              # letras em a ou b, mas não em ambos
     {'r', 'd', 'b', 'm', 'z', 'l'}

Da mesma forma que *note compreensão de listas: 1dc7, compreensões de
conjunto também são suportadas:

     >>> a = {x for x in 'abracadabra' if x not in 'abc'}
     >>> a
     {'r', 'd'}


File: python.info,  Node: Dicionários,  Next: Técnicas de iteração,  Prev: Conjuntos,  Up: Estruturas de dados

2.5.5 Dicionários
-----------------

Outra estrutura de dados embutida muito útil em Python é o 'dicionário',
cujo tipo é ‘dict’ (ver *note Tipo mapeamento — dict: ad6.).
Dicionários são também chamados de “memória associativa” ou “vetor
associativo” em outras linguagens.  Diferente de sequências que são
indexadas por inteiros, dicionários são indexados por chaves ('keys'),
que podem ser de qualquer tipo imutável (como strings e inteiros).
Tuplas também podem ser chaves se contiverem apenas strings, inteiros ou
outras tuplas.  Se a tupla contiver, direta ou indiretamente, qualquer
valor mutável, não poderá ser chave.  Listas não podem ser usadas como
chaves porque podem ser modificadas 'internamente' pela atribuição em
índices ou fatias, e por métodos como *note append(): 6cd. e *note
extend(): 35d.

Um bom modelo mental é imaginar um dicionário como um conjunto
não-ordenado de pares 'chave:valor', onde as chaves são únicas em uma
dada instância do dicionário.  Dicionários são delimitados por chaves:
‘{}’, e contém uma lista de pares chave:valor separada por vírgulas.
Dessa forma também será exibido o conteúdo de um dicionário no console
do Python.  O dicionário vazio é ‘{}’.

As principais operações em um dicionário são armazenar e recuperar
valores a partir de chaves.  Também é possível remover um par
'chave:valor' com o comando ‘del’.  Se você armazenar um valor
utilizando uma chave já presente, o antigo valor será substituído pelo
novo.

Extrair um valor para uma chave inexistente por meio de um índice
(‘d[key]’) levanta *note KeyError: 344.  Para evitar esse erro ao tentar
acessar uma chave possivelmente inexistente, use o método *note get():
1dd2, que retorna ‘None’ (ou um valor padrão especificado) se a chave
não estiver no dicionário.

Executar ‘list(d)’ em um dicionário devolve a lista de todas as chaves
presentes no dicionário, na ordem de inserção (se desejar ordená-las
basta usar a função ‘sorted(d)’).  Para verificar a existência de uma
chave, use o operador *note in: 2f4.

A seguir, um exemplo de uso do dicionário:

     >>> tel = {'jack': 4098, 'sape': 4139}
     >>> tel['guido'] = 4127
     >>> tel
     {'jack': 4098, 'sape': 4139, 'guido': 4127}
     >>> tel['jack']
     4098
     >>> tel['irv']
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     KeyError: 'irv'
     >>> print(tel.get('irv'))
     None
     >>> del tel['sape']
     >>> tel['irv'] = 4127
     >>> tel
     {'jack': 4098, 'guido': 4127, 'irv': 4127}
     >>> list(tel)
     ['jack', 'guido', 'irv']
     >>> sorted(tel)
     ['guido', 'irv', 'jack']
     >>> 'guido' in tel
     True
     >>> 'jack' not in tel
     False

O construtor *note dict(): 256. produz dicionários diretamente de
sequências de pares chave-valor:

     >>> dict([('sape', 4139), ('guido', 4127), ('jack', 4098)])
     {'sape': 4139, 'guido': 4127, 'jack': 4098}

Além disso, as compreensões de dicionários podem ser usadas para criar
dicionários a partir de expressões arbitrárias de chave e valor:

     >>> {x: x**2 for x in (2, 4, 6)}
     {2: 4, 4: 16, 6: 36}

Quando chaves são strings simples, é mais fácil especificar os pares
usando argumentos nomeados no construtor:

     >>> dict(sape=4139, guido=4127, jack=4098)
     {'sape': 4139, 'guido': 4127, 'jack': 4098}


File: python.info,  Node: Técnicas de iteração,  Next: Mais sobre condições,  Prev: Dicionários,  Up: Estruturas de dados

2.5.6 Técnicas de iteração
--------------------------

Ao iterar sobre dicionários, a chave e o valor correspondente podem ser
obtidos simultaneamente usando o método *note items(): 7d0.

     >>> cavaleiros = {'gallahad': 'o puro', 'robin': 'o bravo'}
     >>> for k, v in cavaleiros.items():
     ...     print(k, v)
     ...
     gallahad o puro
     robin o bravo

Ao iterar sobre sequências, a posição e o valor correspondente podem ser
obtidos simultaneamente usando a função *note enumerate(): 14c9.

     >>> for i, v in enumerate(['jogo', 'da', 'velha']):
     ...     print(i, v)
     ...
     0 jogo
     1 da
     2 velha

Para percorrer duas ou mais sequências ao mesmo tempo, as entradas podem
ser pareadas com a função *note zip(): 7d1.

     >>> perguntas = ['Nome', 'Missão', 'Cor favorita']
     >>> respostas = ['Lancelot', 'o santo graal', 'azul']
     >>> for q, a in zip(perguntas, respostas):
     ...     print('{0}? É {1}.'.format(q, a))
     ...
     Nome? É Lancelot.
     Missão? É o santo graal.
     Cor favorita? É azul.

Para percorrer uma sequência em ordem inversa, chame a função *note
reversed(): 869. com a sequência na ordem original.

     >>> for i in reversed(range(1, 10, 2)):
     ...     print(i)
     ...
     9
     7
     5
     3
     1

Para percorrer uma sequência de maneira ordenada, use a função *note
sorted(): be7, que retorna uma lista ordenada com os itens, mantendo a
sequência original inalterada.

     >>> cesta = ['maçã', 'laranja', 'maçã', 'pera', 'laranja', 'banana']
     >>> for i in sorted(cesta):
     ...     print(i)
     ...
     maçã
     maçã
     banana
     laranja
     laranja
     pera

Usar *note set(): 5d9. em uma sequência elimina elementos duplicados.  O
uso de *note sorted(): be7. em combinação com *note set(): 5d9. sobre
uma sequência é uma maneira idiomática de fazer um loop sobre elementos
exclusivos da sequência na ordem de classificação.

     >>> cesta = ['maçã', 'laranja', 'maçã', 'pera', 'laranja', 'banana']
     >>> for i in sorted(cesta):
     ...     print(i)
     ...
     maçã
     maçã
     banana
     laranja
     laranja
     pera

Às vezes é tentador alterar uma lista enquanto você itera sobre ela;
porém, costuma ser mais simples e seguro criar uma nova lista.

     >>> import math
     >>> dados_brutos = [56.2, float('NaN'), 51.7, 55.3, 52.5, float('NaN'), 47.8]
     >>> dados_filtrados = []
     >>> for valor in dados_brutos:
     ...     if not math.isnan(value):
     ...         dados_filtrados.append(valor)
     ...
     >>> dados_filtrados
     [56.2, 51.7, 55.3, 52.5, 47.8]


File: python.info,  Node: Mais sobre condições,  Next: Comparando sequências e outros tipos,  Prev: Técnicas de iteração,  Up: Estruturas de dados

2.5.7 Mais sobre condições
--------------------------

As condições de controle usadas nas instruções ‘while’ e ‘if’ podem
conter quaisquer operadores, não apenas comparações.

Os operadores de comparação ‘in’ e ‘not in’ fazem testes de inclusão que
determinam se um valor está (ou não está) em um contêiner.  Os
operadores ‘is’ e ‘is not’ comparam se dois objetos são realmente o
mesmo objeto.  Todos os operadores de comparação possuem a mesma
prioridade, que é menor que a prioridade de todos os operadores
numéricos.

Comparações podem ser encadeadas: Por exemplo ‘a < b == c’ testa se ‘a’
é menor que ‘b’ e também se ‘b’ é igual a ‘c’.

Comparações podem ser combinadas através de operadores booleanos ‘and’ e
‘or’, e o resultado de uma comparação (ou de qualquer outra expressão),
pode ter seu valor booleano negado através de ‘not’.  Estes possuem
menor prioridade que os demais operadores de comparação.  Entre eles,
‘not’ é o de maior prioridade e ‘or’ o de menor.  Dessa forma, a
condição ‘A and not B or C’ é equivalente a ‘(A and (not B)) or C’.
Naturalmente, parênteses podem ser usados para expressar o agrupamento
desejado.

Os operadores booleanos ‘and’ e ‘or’ são operadores 'curto-circuito':
seus argumentos são avaliados da esquerda para a direita, e a avaliação
encerra quando o resultado é determinado.  Por exemplo, se ‘A’ e ‘C’ são
expressões verdadeiras, mas ‘B’ é falsa, então ‘A and B and C’ não chega
a avaliar a expressão ‘C’.  Em geral, quando usado sobre valores
genéricos e não como booleanos, o valor do resultado de um operador
curto-circuito é o último valor avaliado na expressão.

É possível atribuir o resultado de uma comparação ou outra expressão
booleana para uma variável.  Por exemplo:

     >>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
     >>> non_null = string1 or string2 or string3
     >>> non_null
     'Trondheim'

Observe que no Python, ao contrário de C, a atribuição dentro de
expressões deve ser feita explicitamente com o *note operador morsa:
1dd6. ‘:=’.  Isso evita uma classe comum de problemas encontrados nos
programas C: digitar ‘=’ em uma expressão quando ‘==’ era o planejado.


File: python.info,  Node: Comparando sequências e outros tipos,  Prev: Mais sobre condições,  Up: Estruturas de dados

2.5.8 Comparando sequências e outros tipos
------------------------------------------

Objetos sequência podem ser comparados com outros objetos sequência,
desde que o tipo das sequências seja o mesmo.  A comparação utiliza a
ordem lexicográfica: primeiramente os dois primeiros itens são
comparados, e se diferirem isto determinará o resultado da comparação,
caso contrário os próximos dois itens serão comparados, e assim por
diante até que se tenha exaurido alguma das sequências.  Se em uma
comparação de itens, os mesmos forem também sequências (aninhadas),
então é disparada recursivamente outra comparação lexicográfica.  Se
todos os itens da sequência forem iguais, então as sequências são ditas
iguais.  Se uma das sequências é uma subsequência da outra, então a
subsequência é a menor.  A comparação lexicográfica de strings utiliza
codificação Unicode para definir a ordenação.  Alguns exemplos de
comparações entre sequências do mesmo tipo:

     (1, 2, 3)              < (1, 2, 4)
     [1, 2, 3]              < [1, 2, 4]
     'ABC' < 'C' < 'Pascal' < 'Python'
     (1, 2, 3, 4)           < (1, 2, 4)
     (1, 2)                 < (1, 2, -1)
     (1, 2, 3)             == (1.0, 2.0, 3.0)
     (1, 2, ('aa', 'ab'))   < (1, 2, ('abc', 'a'), 4)

Note que comparar objetos de tipos diferentes com ‘<’ ou ‘>’ é permitido
desde que os objetos possuam os métodos de comparação apropriados.  Por
exemplo, tipos numéricos mistos são comparados de acordo com os seus
valores numéricos, portanto 0 é igual a 0.0, etc.  Em caso contrário, ao
invés de fornecer uma ordenação arbitrária, o interpretador levantará um
*note TypeError: 2c3.


File: python.info,  Node: Módulos<2>,  Next: Entrada e Saída,  Prev: Estruturas de dados,  Up: O tutorial do Python

2.6 Módulos
===========

Ao sair e entrar de novo no interpretador Python, as definições
anteriores (funções e variáveis) são perdidas.  Portanto, se quiser
escrever um programa maior, será mais eficiente usar um editor de texto
para preparar as entradas para o interpretador, e executá-lo usando o
arquivo como entrada.  Isso é conhecido como criar um 'script'.  Se o
programa se torna ainda maior, é uma boa prática dividi-lo em arquivos
menores, para facilitar a manutenção.  Também é preferível usar um
arquivo separado para uma função que você escreveria em vários programas
diferentes, para não copiar a definição de função em cada um deles.

Para permitir isso, Python tem uma maneira de colocar as definições em
um arquivo e então usá-las em um script ou em uma execução interativa do
interpretador.  Tal arquivo é chamado de 'módulo'; definições de um
módulo podem ser 'importadas' para outros módulos, ou para o módulo
'principal' (a coleção de variáveis a que você tem acesso num script
executado como um programa e no modo calculadora).

Um módulo é um arquivo contendo definições e instruções Python.  O nome
do arquivo é o nome do módulo acrescido do sufixo ‘.py’.  Dentro de um
módulo, o nome do módulo (como uma string) está disponível como o valor
da variável global ‘__name__’.  Por exemplo, use seu editor de texto
favorito para criar um arquivo chamado ‘fibo.py’ no diretório atual com
o seguinte conteúdo:

     # Módulo de números de Fibonacci

     def fib(n):
         """Escreve a série de Fibonacci até n."""
         a, b = 0, 1
         while a < n:
             print(a, end=' ')
             a, b = b, a+b
         print()

     def fib2(n):
         """Retorna a série de Fibonacci até n."""
         result = []
         a, b = 0, 1
         while a < n:
             result.append(a)
             a, b = b, a+b
         return result

Agora, entre no interpretador Python e importe esse módulo com o
seguinte comando:

     >>> import fibo

Isso não adiciona os nomes das funções definidas em ‘fibo’ diretamente
ao *note espaço de nomes: 1ddd. atual (veja *note Escopos e espaços de
nomes do Python: 1dde. para mais detalhes); isso adiciona somente o nome
do módulo ‘fibo’.  Usando o nome do módulo você pode acessar as funções:

     >>> fibo.fib(1000)
     0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
     >>> fibo.fib2(100)
     [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
     >>> fibo.__name__
     'fibo'

Se você pretende usar uma função muitas vezes, você pode atribui-lá a um
nome local:

     >>> fib = fibo.fib
     >>> fib(500)
     0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

* Menu:

* Mais sobre módulos::
* Módulos padrões::
* A função dir(): A função dir.
* Pacotes::


File: python.info,  Node: Mais sobre módulos,  Next: Módulos padrões,  Up: Módulos<2>

2.6.1 Mais sobre módulos
------------------------

Um módulo pode conter tanto instruções executáveis quanto definições de
funções e classes.  Essas instruções servem para inicializar o módulo.
Eles são executados somente na 'primeira' vez que o módulo é encontrado
em uma instrução de importação.  (1)  (Também rodam se o arquivo é
executado como um script.)

Cada módulo tem seu próprio espaço de nomes privado, que é usado como
espaço de nomes global para todas as funções definidas no módulo.
Assim, o autor de um módulo pode usar variáveis globais no seu módulo
sem se preocupar com conflitos acidentais com as variáveis globais do
usuário.  Por outro lado, se você precisar usar uma variável global de
um módulo, poderá fazê-lo com a mesma notação usada para se referir às
suas funções, ‘nomemodulo.nomeitem’.

Módulos podem importar outros módulos.  É costume, porém não
obrigatório, colocar todas as instruções *note import: 5e2. no início do
módulo (ou script , se preferir).  As definições do módulo importado, se
colocados no nível de um módulo (fora de quaisquer funções ou classes),
elas são adicionadas a espaço de nomes global da módulo.

Existe uma variante da instrução *note import: 5e2. que importa
definições de um módulo diretamente para o espaço de nomes do módulo
importador.  Por exemplo:

     >>> from fibo import fib, fib2
     >>> fib(500)
     0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

Isso não coloca o nome do módulo de onde foram feitas as importações no
espaço de nomes local (assim, no exemplo, ‘fibo’ não está definido).

Existe ainda uma variante que importa todos os nomes definidos em um
módulo:

     >>> from fibo import *
     >>> fib(500)
     0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

Isso importa todos as declarações de nomes, exceto aqueles que iniciam
com um sublinhado (‘_’).  Na maioria dos casos, programadores Python não
usam esta facilidade porque ela introduz um conjunto desconhecido de
nomes no ambiente, podendo esconder outros nomes previamente definidos.

Note que, em geral, a prática do ‘import *’ de um módulo ou pacote é
desaprovada, uma vez que muitas vezes dificulta a leitura do código.
Contudo, é aceitável para diminuir a digitação em sessões interativas.

Se o nome do módulo é seguido pela palavra-chave ‘as’, o nome a seguir é
vinculado diretamente ao módulo importado.

     >>> import fibo as fib
     >>> fib.fib(500)
     0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

Isto efetivamente importa o módulo, da mesma maneira que ‘import fibo’
fará, com a única diferença de estar disponível com o nome ‘fib’.

Também pode ser utilizado com a palavra-chave *note from: 12ee, com
efeitos similares:

     >>> from fibo import fib as fibonacci
     >>> fibonacci(500)
     0 1 1 2 3 5 8 13 21 34 55 89 144 233 377

     Nota: For efficiency reasons, each module is only imported once per
     interpreter session.  Therefore, if you change your modules, you
     must restart the interpreter – or, if it’s just one module you want
     to test interactively, use *note importlib.reload(): 519, e.g.
     ‘import importlib; importlib.reload(modulename)’.

* Menu:

* Executando módulos como scripts::
* O caminho de busca dos módulos::
* Arquivos Python “compilados”::

   ---------- Footnotes ----------

   (1) [#] Na verdade, definições de funções também são ‘instruções’ que
são ‘executados’; a execução da definição de uma função adiciona o nome
da função no espaço de nomes global do módulo.


File: python.info,  Node: Executando módulos como scripts,  Next: O caminho de busca dos módulos,  Up: Mais sobre módulos

2.6.1.1 Executando módulos como scripts
.......................................

Quando você rodar um módulo Python com

     python fibo.py <argumentos>

o código no módulo será executado, da mesma forma que quando é
importado, mas com a variável ‘__name__’ com valor ‘"__main__"’.  Isto
significa que adicionando este código ao final do seu módulo:

     if __name__ == "__main__":
         import sys
         fib(int(sys.argv[1]))

você pode tornar o arquivo utilizável tanto como script quanto como um
módulo importável, porque o código que analisa a linha de comando só
roda se o módulo é executado como arquivo “principal”:

     $ python fibo.py 50
     0 1 1 2 3 5 8 13 21 34

Se o módulo é importado, o código não é executado:

     >>> import fibo
     >>>

Isso é frequentemente usado para fornecer uma interface de usuário
conveniente para um módulo, ou para realizar testes (rodando o módulo
como um script executa um conjunto de testes).


File: python.info,  Node: O caminho de busca dos módulos,  Next: Arquivos Python “compilados”,  Prev: Executando módulos como scripts,  Up: Mais sobre módulos

2.6.1.2 O caminho de busca dos módulos
......................................

Quando um módulo chamado ‘spam’ é importado, o interpretador procura um
módulo embutido com este nome.  Estes nomes de módulo são listados em
*note sys.builtin_module_names: 1de5.  Se não encontra, procura um
arquivo chamado ‘spam.py’ em uma lista de diretórios incluídos na
variável *note sys.path: 3b4.  A *note sys.path: 3b4. é inicializada com
estes locais:

   * O diretório que contém o script importador (ou o diretório atual
     quando nenhum arquivo é especificado).

   * A variável de ambiente *note PYTHONPATH: 1053. (uma lista de nomes
     de diretórios, com a mesma sintaxe da variável de ambiente ‘PATH’).

   * O padrão dependente da instalação (por convenção, incluindo um
     diretório ‘site-packages’, tratado pelo módulo *note site: c7.).

Mais detalhes em *note A inicialização do caminho de pesquisa de módulos
sys.path: 1de6.

     Nota: Nos sistemas de arquivos que suportam links simbólicos, o
     diretório contendo o script de entrada é resultante do diretório
     apontado pelo link simbólico.  Em outras palavras o diretório que
     contém o link simbólico 'não' é adicionado ao caminho de busca de
     módulos.

Após a inicialização, programas Python podem modificar *note sys.path:
3b4.  O diretório que contém o script sendo executado é colocado no
início da lista de caminhos, à frente do caminho da biblioteca padrão.
Isto significa que módulos nesse diretório serão carregados, no lugar de
módulos com o mesmo nome na biblioteca padrão.  Isso costuma ser um
erro, a menos que seja intencional.  Veja a seção *note Módulos padrões:
1de7. para mais informações.


File: python.info,  Node: Arquivos Python “compilados”,  Prev: O caminho de busca dos módulos,  Up: Mais sobre módulos

2.6.1.3 Arquivos Python “compilados”
....................................

Para acelerar o carregamento de módulos, o Python guarda versões
compiladas de cada módulo no diretório ‘__pycache__’ com o nome
‘modulo.`versão'.pyc’, onde a versão corresponde ao formato do arquivo
compilado; geralmente contêm o número da versão Python utilizada.  Por
exemplo, no CPython release 3.3 a versão compilada de spam.py será
guardada como ‘__pycache__/spam.cpython-33.pyc’.  Esta convenção de
nomes permite a coexistência de módulos compilados de diferentes
releases e versões de Python.

O Python verifica a data de modificação do arquivo fonte mediante a
versão compilada, para ver se está desatualizada e precisa ser
recompilada.  É um processo completamente automático.  Além disso, os
módulos compilados são independentes de plataforma, portanto a mesma
biblioteca pode ser compartilhada entre sistemas de arquiteturas
diferentes.

O Python não verifica as versões compiladas em duas circunstâncias.
Primeiro, sempre recompila e não armazena o resultado para módulos
carregados diretamente da linha de comando.  Segundo, não verifica se
não houver um módulo fonte.  Para suportar uma distribuição sem fontes
(somente as versões compiladas), o módulo compilado deve estar no
diretório de fontes, e não deve haver um módulo fonte.

Algumas dicas para especialistas:

   * Você pode usar as opções *note -O: ddd. ou *note -OO: dde. no
     comando Python para reduzir o tamanho de um módulo compilado.  A
     opção ‘-O’ remove as instruções assert, e a opção ‘-OO’ remove,
     além das instruções assert, as strings de documentações.  Como
     alguns programas podem contar com essa disponibilidade, só use essa
     opção se souber o que está fazendo.  Módulos “otimizados” tem uma
     marcação ‘opt-’ e são geralmente de menor tamanho.  Futuros
     releases podem mudar os efeitos da otimização.

   * Um programa não roda mais rápido quando é lido de um arquivo ‘.pyc’
     do que quando lido de um arquivo ‘.py’; a única coisa que é mais
     rápida com arquivos ‘.pyc’ é sua velocidade de carregamento.

   * O módulo *note compileall: 20. pode criar arquivos .pyc para todos
     os módulos de um diretório.

   * Há mais detalhes desse processo, incluindo um fluxograma de
     decisões, no PEP 3147(1).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3147/


File: python.info,  Node: Módulos padrões,  Next: A função dir,  Prev: Mais sobre módulos,  Up: Módulos<2>

2.6.2 Módulos padrões
---------------------

O Python traz uma biblioteca padrão de módulos, descrita em um documento
em separado, a Referência da Biblioteca Python (doravante “Referência da
Biblioteca”).  Alguns módulos estão embutidos no interpretador; estes
possibilitam acesso a operações que não são parte do núcleo da
linguagem, mas estão no interpretador seja por eficiência ou para
permitir o acesso a chamadas do sistema operacional.  O conjunto destes
módulos é uma opção de configuração que depende também da plataforma
utilizada.  Por exemplo, o módulo *note winreg: 116. só está disponível
em sistemas Windows.  Existe um módulo que requer especial atenção:
*note sys: d9, que é embutido em qualquer interpretador Python.  As
variáveis ‘sys.ps1’ e ‘sys.ps2’ definem as strings utilizadas como
prompt primário e secundário:

     >>> import sys
     >>> sys.ps1
     '>>> '
     >>> sys.ps2
     '... '
     >>> sys.ps1 = 'C> '
     C> print('ECA!')
     Yuck!
     C>

Essas variáveis só estão definidas se o interpretador está em modo
interativo.

A variável ‘sys.path’ contém uma lista de strings que determina os
caminhos de busca de módulos conhecidos pelo interpretador.  Ela é
inicializada para um caminho padrão, determinado pela variável de
ambiente *note PYTHONPATH: 1053, ou por um valor padrão embutido, se
*note PYTHONPATH: 1053. não estiver definida.  Você pode modificá-la com
as operações típicas de lista, por exemplo:

     >>> import sys
     >>> sys.path.append('/ufs/guido/lib/python')


File: python.info,  Node: A função dir,  Next: Pacotes,  Prev: Módulos padrões,  Up: Módulos<2>

2.6.3 A função ‘dir()’
----------------------

A função embutida *note dir(): 632. é usada para descobrir quais nomes
são definidos por um módulo.  Ela devolve uma lista ordenada de strings:

     >>> import fibo, sys
     >>> dir(fibo)
     ['__name__', 'fib', 'fib2']
     >>> dir(sys)
     ['__breakpointhook__', '__displayhook__', '__doc__', '__excepthook__',
      '__interactivehook__', '__loader__', '__name__', '__package__', '__spec__',
      '__stderr__', '__stdin__', '__stdout__', '__unraisablehook__',
      '_clear_type_cache', '_current_frames', '_debugmallocstats', '_framework',
      '_getframe', '_git', '_home', '_xoptions', 'abiflags', 'addaudithook',
      'api_version', 'argv', 'audit', 'base_exec_prefix', 'base_prefix',
      'breakpointhook', 'builtin_module_names', 'byteorder', 'call_tracing',
      'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_info',
      'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info',
      'float_repr_style', 'get_asyncgen_hooks', 'get_coroutine_origin_tracking_depth',
      'getallocatedblocks', 'getdefaultencoding', 'getdlopenflags',
      'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile',
      'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval',
      'gettrace', 'hash_info', 'hexversion', 'implementation', 'int_info',
      'intern', 'is_finalizing', 'last_traceback', 'last_type', 'last_value',
      'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks',
      'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'pycache_prefix',
      'set_asyncgen_hooks', 'set_coroutine_origin_tracking_depth', 'setdlopenflags',
      'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr',
      'stdin', 'stdout', 'thread_info', 'unraisablehook', 'version', 'version_info',
      'warnoptions']

Sem argumentos, *note dir(): 632. lista os nomes atualmente definidos:

     >>> a = [1, 2, 3, 4, 5]
     >>> import fibo
     >>> fib = fibo.fib
     >>> dir()
     ['__builtins__', '__name__', 'a', 'fib', 'fibo', 'sys']

Observe que ela lista todo tipo de nomes: variáveis, módulos, funções,
etc.

*note dir(): 632. não lista os nomes de variáveis e funções embutidas.
Esta lista está disponível no módulo padrão *note builtins: 12.:

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


File: python.info,  Node: Pacotes,  Prev: A função dir,  Up: Módulos<2>

2.6.4 Pacotes
-------------

Os pacotes são uma maneira de estruturar o “espaço de nomes” dos módulos
Python, usando “nomes de módulo com pontos”.  Por exemplo, o nome do
módulo ‘A.B’ designa um submódulo chamado ‘B’, em um pacote chamado ‘A’.
Assim como o uso de módulos evita que os autores de módulos diferentes
tenham que se preocupar com nomes de variáveis globais, o uso de nomes
de módulos com pontos evita que os autores de pacotes com muitos
módulos, como NumPy ou Pillow, tenham que se preocupar com os nomes dos
módulos uns dos outros.

Suponha que você queira projetar uma coleção de módulos (um “pacote”)
para o gerenciamento uniforme de arquivos de som.  Existem muitos
formatos diferentes (normalmente identificados pela extensão do nome de
arquivo, por exemplo ‘.wav’, ‘.aiff’, ‘.au’), de forma que você pode
precisar criar e manter uma crescente coleção de módulos de conversão
entre formatos.  Ainda podem existir muitas operações diferentes,
passíveis de aplicação sobre os arquivos de som (mixagem, eco,
equalização, efeito stereo artificial).  Logo, possivelmente você também
estará escrevendo uma coleção sempre crescente de módulos para aplicar
estas operações.  Eis uma possível estrutura para o seu pacote (expressa
em termos de um sistema de arquivos hierárquico):

     sound/                          pacote de nível superior
           __init__.py               Inicializa o pacote de som
           formats/                  Subpacote para as conversões entre formatos de arquivos
                   __init__.py
                   wavread.py
                   wavwrite.py
                   aiffread.py
                   aiffwrite.py
                   auread.py
                   auwrite.py
                   ...
           effects/                  Subpacote para efeitos de som
                   __init__.py
                   echo.py
                   surround.py
                   reverse.py
                   ...
           filters/                  Subpacote para filtros
                   __init__.py
                   equalizer.py
                   vocoder.py
                   karaoke.py
                   ...

Ao importar esse pacote, Python busca pelo subdiretório com mesmo nome,
nos diretórios listados em ‘sys.path’.

Os arquivos ‘__init__.py’ são necessários para que o Python trate
diretórios contendo o arquivo como pacotes (a menos que se esteja usando
um *note pacote de espaço de nomes: 1dee, um recurso relativamente
avançado).  Isso impede que diretórios com um nome comum, como ‘string’,
ocultem, involuntariamente, módulos válidos que ocorrem posteriormente
no caminho de busca do módulo.  No caso mais simples, ‘__init__.py’ pode
ser apenas um arquivo vazio, mas pode também executar código de
inicialização do pacote, ou configurar a variável ‘__all__’, descrita
mais adiante.

Usuários do pacote podem importar módulos individuais, por exemplo:

     import sound.effects.echo

Isso carrega o submódulo ‘sound.effects.echo’.  Ele deve ser
referenciado com seu nome completo, como em:

     sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)

Uma maneira alternativa para a importação desse módulo é:

     from sound.effects import echo

Isso carrega o submódulo ‘echo’ sem necessidade de mencionar o prefixo
do pacote no momento da utilização, assim:

     echo.echofilter(input, output, delay=0.7, atten=4)

Também é possível importar diretamente uma única variável ou função:

     from sound.effects.echo import echofilter

Novamente, isso carrega o submódulo ‘echo’, mas a função ‘echofilter()’
está acessível diretamente sem prefixo:

     echofilter(input, output, delay=0.7, atten=4)

Observe que ao utilizar ‘from pacote import item’, o item pode ser um
subpacote, submódulo, classe, função ou variável.  A instrução ‘import’
primeiro testa se o item está definido no pacote, senão presume que é um
módulo e tenta carregá-lo.  Se falhar em encontrar o módulo, uma exceção
*note ImportError: 419. é levantada.

Em oposição, em uma construção como ‘import item.subitem.subsubitem’,
cada item, com exceção do último, deve ser um pacote.  O último pode ser
também um pacote ou módulo, mas nunca uma classe, função ou variável
contida em um módulo.

* Menu:

* Importando * de um pacote::
* Referências em um mesmo pacote::
* Pacotes em múltiplos diretórios::


File: python.info,  Node: Importando * de um pacote,  Next: Referências em um mesmo pacote,  Up: Pacotes

2.6.4.1 Importando * de um pacote
.................................

Agora, o que acontece quando um usuário escreve ‘from sound.effects
import *’ ?  Idealmente, poderia se esperar que este comando vasculhasse
o sistema de arquivos, encontrasse todos os submódulos presentes no
pacote, e os importasse.  Isso poderia demorar muito e a importação de
submódulos pode ocasionar efeitos colaterais, que somente deveriam
ocorrer quando o submódulo é explicitamente importado.

A única solução é o autor do pacote fornecer um índice explícito do
pacote.  A instrução *note import: 5e2. usa a seguinte convenção: se o
arquivo ‘__init__.py’ do pacote define uma lista chamada ‘__all__’,
então esta lista indica os nomes dos módulos a serem importados quando a
instrução ‘from pacote import *’ é acionada.  Fica a cargo do autor do
pacote manter esta lista atualizada, inclusive fica a seu critério
excluir inteiramente o suporte a importação direta de todo o pacote
através de ‘from pacote import *’.  Por exemplo, o arquivo
‘sounds/effects/__init__.py’ poderia conter apenas:

     __all__ = ["echo", "surround", "reverse"]

Isso significaria que ‘from sound.effects import *’ importaria os três
submódulos nomeados do pacote ‘sound.effects’.

Esteja ciente de que os submódulos podem ficar sobrepostos por nomes
definidos localmente.  Por exemplo, se você adicionou uma função
‘reverse’ ao arquivo ‘sound/effects/__init__.py’, usar ‘from
sound.effects import *’ só importaria os dois submódulos ‘echo’ e
‘surround’, mas 'não' o submódulo ‘reverse’, porque ele fica sobreposto
pela função ‘reverse’ definida localmente:

     __all__ = [
         "echo",      # refere-se ao arquivo 'echo.py'
         "surround",  # refere-se ao arquivo 'surround.py'
         "reverse",   # !!! refere-se à função 'reverse' agora !!!
     ]

     def reverse(msg: str):  # <-- este nome ofusca o submódulo 'reverse.py'
         return msg[::-1]    #     no caso de uma importação 'from sound.effects import *'

Se ‘__all__’ não estiver definido, a instrução ‘from sound.effects
import *’ não importa todos os submódulos do pacote ‘sound.effects’ no
espaço de nomes atual.  Há apenas garantia que o pacote ‘sound.effects’
foi importado (possivelmente executando qualquer código de inicialização
em ‘__init__.py’) juntamente com os nomes definidos no pacote.  Isso
inclui todo nome definido em ‘__init__.py’ bem como em qualquer
submódulo importado a partir deste.  Também inclui quaisquer submódulos
do pacote que tenham sido carregados explicitamente por instruções *note
import: 5e2. anteriores.  Considere o código abaixo:

     import sound.effects.echo
     import sound.effects.surround
     from sound.effects import *

Nesse exemplo, os módulos ‘echo’ e ‘surround’ são importados no espaço
de nomes atual, no momento em que a instrução ‘from...import’ é
executada, pois estão definidos no pacote ‘sound.effects’.  (Isso também
funciona quando ‘__all__’ estiver definida.)

Apesar de que certos módulos são projetados para exportar apenas nomes
conforme algum critério quando se faz ‘import *’, ainda assim essa
sintaxe é considerada uma prática ruim em código de produção.

Lembre-se, não há nada errado em usar ‘from pacote import
submodulo_especifico’!  De fato, essa é a notação recomendada, a menos
que o módulo importado necessite usar submódulos com o mesmo nome, de
diferentes pacotes.


File: python.info,  Node: Referências em um mesmo pacote,  Next: Pacotes em múltiplos diretórios,  Prev: Importando * de um pacote,  Up: Pacotes

2.6.4.2 Referências em um mesmo pacote
......................................

Quando pacotes são estruturados em subpacotes (como no pacote ‘sound’ do
exemplo), pode-se usar a sintaxe de importações absolutas para se
referir aos submódulos de pacotes irmãos (o que na prática é uma forma
de fazer um import relativo, a partir da base do pacote).  Por exemplo,
se o módulo ‘sound.filters.vocoder’ precisa usar o módulo ‘echo’ do
pacote ‘sound.effects’, é preciso importá-lo com ‘from sound.effects
import echo’.

Também é possível escrever imports relativos, com a forma ‘from module
import name’.  Esses imports usam pontos para indicar o pacote pai e o
atual, envolvidos no import relativo.  Do módulo ‘surround’, por
exemplo, pode-se usar:

     from . import echo
     from .. import formats
     from ..filters import equalizer

Observe que as importações relativas são baseadas no nome do pacote do
módulo atual.  Como o módulo principal não possui um pacote, os módulos
destinados ao uso como módulo principal de uma aplicação Python devem
sempre usar importações absolutas.


File: python.info,  Node: Pacotes em múltiplos diretórios,  Prev: Referências em um mesmo pacote,  Up: Pacotes

2.6.4.3 Pacotes em múltiplos diretórios
.......................................

Pacotes possuem mais um atributo especial, *note __path__: 1df4.
Inicializado como uma *note sequência: 4f1. de strings contendo o nome
do diretório onde está o arquivo ‘__init__.py’ do pacote, antes do
código naquele arquivo ser executado.  Esta variável pode ser
modificada; isso afeta a busca futura de módulos e subpacotes contidos
no pacote.

Apesar de não ser muito usado, esse mecanismo permite estender o
conjunto de módulos encontrados em um pacote.


File: python.info,  Node: Entrada e Saída,  Next: Erros e exceções,  Prev: Módulos<2>,  Up: O tutorial do Python

2.7 Entrada e Saída
===================

Existem várias maneiras de apresentar a saída de um programa; os dados
podem ser exibidos em forma legível para seres humanos, ou escritos em
arquivos para uso posterior.  Este capítulo apresentará algumas das
possibilidades.

* Menu:

* Refinando a formatação de saída::
* Leitura e escrita de arquivos::


File: python.info,  Node: Refinando a formatação de saída,  Next: Leitura e escrita de arquivos,  Up: Entrada e Saída

2.7.1 Refinando a formatação de saída
-------------------------------------

Até agora vimos duas maneiras de exibir valores: 'expressões' e a função
*note print(): fa9.  (Uma outra maneira é utilizar o método *note
write(): 1dfb. de objetos do tipo arquivo; o arquivo saída padrão pode
ser referenciado como ‘sys.stdout’.  Veja a Referência da Biblioteca
Python para mais informações sobre isso.)

Muitas vezes se deseja mais controle sobre a formatação da saída do que
simplesmente exibir valores separados por espaço.  Existem várias
maneiras de formatar a saída.

   * Para usar *note strings literais formatadas: 1dfc, comece uma
     string com ‘f’ ou ‘F’, antes de abrir as aspas ou aspas triplas.
     Dentro dessa string, pode-se escrever uma expressão Python entre
     caracteres ‘{’ e ‘}’, que podem se referir a variáveis, ou valores
     literais.

          >>> ano = 2016
          >>> evento = 'Referendo'
          >>> f'Resultados do {evento} {ano}'
          'Resultados do Referendo 2016'

   * O método de strings *note str.format(): 621. requer mais esforço
     manual.  Ainda será necessário usar ‘{’ e ‘}’ para marcar onde a
     variável será substituída e pode-se incluir diretivas de formatação
     detalhadas, mas também precisará incluir a informação a ser
     formatada.  No bloco de código a seguir há dois exemplos de como
     formatar variáveis:

          >>> votos_sim = 42_572_654
          >>> votos_totais = 85_705_149
          >>> porcentagem = votos_sim / votos_totais
          >>> '{:-9} votos SIM  {:2.2%}'.format(votos_sim, porcentagem)
          ' 42572654 votos SIM  49.67%'

     Observe como ‘yes_votes’ são preenchidos com espaços e um sinal
     negativo apenas para números negativos.  O exemplo também imprime
     ‘percentage’ multiplicado por 100, com 2 casas decimais e seguido
     por um sinal de porcentagem (veja *note Minilinguagem de
     especificação de formato: 1e8. para detalhes).

   * Finalmente, pode-se fazer todo o tratamento da saída usando as
     operações de fatiamento e concatenação de strings para criar
     qualquer layout que se possa imaginar.  O tipo string possui alguns
     métodos que realizam operações úteis para preenchimento de strings
     para uma determinada largura de coluna.

Quando não é necessário sofisticar a saída, mas apenas exibir algumas
variáveis com propósito de depuração, pode-se converter qualquer valor
para uma string com as funções *note repr(): 800. ou *note str(): 44c.

A função *note str(): 44c. serve para retornar representações de valores
que sejam legíveis para as pessoas, enquanto *note repr(): 800. é para
gerar representações que o interpretador Python consegue ler (ou
levantará uma exceção *note SyntaxError: 18d, se não houver sintaxe
equivalente).  Para objetos que não têm uma representação adequada para
consumo humano, *note str(): 44c. devolve o mesmo valor que *note
repr(): 800.  Muitos valores, tal como números ou estruturas, como
listas e dicionários, têm a mesma representação usando quaisquer das
funções.  Strings, em particular, têm duas representações distintas.

Alguns exemplos:

     >>> s = 'Olá, mundo.'
     >>> str(s)
     'Olá, mundo.'
     >>> repr(s)
     "'Olá, mundo.'"
     >>> str(1/7)
     '0.14285714285714285'
     >>> x = 10 * 3.25
     >>> y = 200 * 200
     >>> s = 'O valor de x é ' + repr(x) + ' e de y é ' + repr(y) + '...'
     >>> print(s)
     O valor de x é 32.5 e de y é 40000...
     >>> # A repr() da string adiciona aspas e contrabarras:
     >>> olá = 'olá, mundo\n'
     >>> olás = repr(olá)
     >>> print(olás)
     'olá, mundo\n'
     >>> # O argumento de repr() pode ser qualquer objeto Python:
     >>> repr((x, y, ('spam', 'ovos')))
     "(32.5, 40000, ('spam', 'ovos'))"

O módulo *note string: d3. contém uma classe *note Template: 687. que
oferece ainda outra maneira de substituir valores em strings, usando
espaços reservados como ‘$x’ e substituindo-os por valores de um
dicionário, mas oferece muito menos controle da formatação.

* Menu:

* Strings literais formatadas::
* O método format(): O método format.
* Formatação manual de string::
* Formatação de strings à moda antiga::


File: python.info,  Node: Strings literais formatadas,  Next: O método format,  Up: Refinando a formatação de saída

2.7.1.1 Strings literais formatadas
...................................

*note Strings literais formatadas: 9b1. (também chamadas f-strings, para
abreviar) permite que se inclua o valor de expressões Python dentro de
uma string, prefixando-a com ‘f’ ou ‘F’ e escrevendo expressões na forma
‘{expression}’.

Um especificador opcional de formato pode ser incluído após a expressão.
Isso permite maior controle sobre como o valor é formatado.  O exemplo a
seguir arredonda pi para três casas decimais:

     >>> import math
     >>> print(f'O valor de pi é aproximadamente {math.pi:.3f}.')
     O valor de pi é aproximadamente 3.142.

Passando um inteiro após o ‘':'’ fará com que o campo tenha um número
mínimo de caracteres de largura.  Isso é útil para alinhar colunas.

     >>> tabela = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 7678}
     >>> for nome, telefone in tabela.items():
     ...     print(f'{nome:10} ==> {telefone:10d}')
     ...
     Sjoerd     ==>       4127
     Jack       ==>       4098
     Dcab       ==>       7678

Outros modificadores podem ser usados para converter o valor antes de
ser formatado.  ‘'!a'’ aplica a função *note ascii(): 142d, ‘'!s'’
aplica a função *note str(): 44c. e ‘'!r'’ aplica a função *note repr():
800.

     >>> animais = 'enguias'
     >>> print(f'Meu hovercraft está cheio de {animais}.')
     Meu hovercraft está cheio de enguias.
     >>> print(f'Meu hovercraft está cheio de {animais!r}.')
     Meu hovercraft está cheio de 'enguias'.

O especificador ‘=’ pode ser usado para expandir uma expressão para o
texto da expressão, um sinal de igual e, então, a representação da
expressão avaliada:

     >>> bugs = 'roaches'
     >>> count = 13
     >>> area = 'living room'
     >>> print(f'Debugging {bugs=} {count=} {area=}')
     Debugging bugs='roaches' count=13 area='living room'

Veja *note expressões autodocumentadas: 9af. para mais informações sobre
o especificador ‘=’.  Para obter uma referência sobre essas
especificações de formato, consulte o guia de referência para a *note
Minilinguagem de especificação de formato: 1e8.


File: python.info,  Node: O método format,  Next: Formatação manual de string,  Prev: Strings literais formatadas,  Up: Refinando a formatação de saída

2.7.1.2 O método format()
.........................

Um uso básico do método *note str.format(): 621. tem esta forma:

     >>> print('Nós somos os {} que dizem "{}!"'.format('cavaleiros', 'Ni'))
     Nós somos os cavaleiros que dizem "Ni!"

As chaves e seus conteúdos (chamados campos de formatação) são
substituídos pelos objetos passados para o método *note str.format():
621.  Um número nas chaves pode ser usado para referenciar a posição do
objeto passado no método *note str.format(): 621.

     >>> print('{0} e {1}'.format('spam', 'ovos'))
     spam e eggs
     >>> print('{1} e {0}'.format('spam', 'ovos'))
     eggs e spam

Se argumentos nomeados são passados para o método *note str.format():
621, seus valores serão referenciados usando o nome do argumento:

     >>> print('Este {comida} está {adjetivo}.'.format(
     ...       comida='spam', adjetivo='absolutamente horrível'))
     Este spam está absolutamente horrível.

Argumentos posicionais e nomeados podem ser combinados à vontade:

     >>> print('A história de {0}, {1} e {outro}.'.format('Bill', 'Manfred',
     ...                                                    outro='Georg'))
     A história de Bill, Manfred e Georg.

Se uma string de formatação é muito longa, e não se deseja quebrá-la,
pode ser bom fazer referência aos valores a serem formatados por nome,
em vez de posição.  Isto pode ser feito passando um dicionário usando
colchetes ‘'[]'’ para acessar as chaves.

     >>> tabela = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
     >>> print('Jack: {0[Jack]:d}; Sjoerd: {0[Sjoerd]:d}; '
     ...       'Dcab: {0[Dcab]:d}'.format(tabela))
     Jack: 4098; Sjoerd: 4127; Dcab: 8637678

Isto também pode ser feito passando o dicionário ‘table’ como argumentos
nomeados com a notação ‘**’.

     >>> tabela = {'Sjoerd': 4127, 'Jack': 4098, 'Dcab': 8637678}
     >>> print('Jack: {Jack:d}; Sjoerd: {Sjoerd:d}; Dcab: {Dcab:d}'.format(**tabela))
     Jack: 4098; Sjoerd: 4127; Dcab: 8637678

Isto é particularmente útil em conjunto com a função embutida *note
vars(): 1bba, que devolve um dicionário contendo todas as variáveis
locais:

     >>> tabela = {k: str(v) for k, v in vars().items()}
     >>> mensagem = " ".join([f'{k}: ' + '{' + k +'};' for k in tabela.keys()])
     >>> print(mensagem.format(**tabela))
     __name__: __main__; __doc__: None; __package__: None; __loader__: ...

Como exemplo, as linhas seguintes produzem um conjunto de colunas
alinhadas, com alguns inteiros e seus quadrados e cubos:

     >>> for x in range(1, 11):
     ...     print('{0:2d} {1:3d} {2:4d}'.format(x, x*x, x*x*x))
     ...
      1   1    1
      2   4    8
      3   9   27
      4  16   64
      5  25  125
      6  36  216
      7  49  343
      8  64  512
      9  81  729
     10 100 1000

Para uma visão completa da formatação de strings com *note str.format():
621, veja a seção *note Sintaxe das strings de formato: 13e2.


File: python.info,  Node: Formatação manual de string,  Next: Formatação de strings à moda antiga,  Prev: O método format,  Up: Refinando a formatação de saída

2.7.1.3 Formatação manual de string
...................................

Aqui está a mesma tabela de quadrados e cubos, formatados manualmente:

     >>> for x in range(1, 11):
     ...     print(repr(x).rjust(2), repr(x*x).rjust(3), end=' ')
     ...     # Observe o uso do 'end' na linha anterior
     ...     print(repr(x*x*x).rjust(4))
     ...
      1   1    1
      2   4    8
      3   9   27
      4  16   64
      5  25  125
      6  36  216
      7  49  343
      8  64  512
      9  81  729
     10 100 1000

(Note que o espaço entre cada coluna foi adicionado pela forma que a
função *note print(): fa9. funciona: sempre adiciona espaços entre seus
argumentos.)

O método *note str.rjust(): 1e01. justifica uma string à direita, num
campo de tamanho definido, acrescentando espaços à esquerda.  De forma
similar, os métodos *note str.ljust(): 1e02, justifica à esquerda, e
*note str.center(): 1e03, para centralizar.  Esses métodos não escrevem
nada, apenas retornam uma nova string.  Se a string de entrada é muito
longa, os métodos não truncarão a saída, e retornarão a mesma string,
sem mudança; isso vai atrapalhar o layout da coluna, mas geralmente é
melhor do que a alternativa, que estaria distorcendo o valor.  (Se
realmente quiser truncar, sempre se pode adicionar uma operação de
fatiamento, como em ‘x.ljust(n)[:n]’.)

Existe ainda o método *note str.zfill(): 14fa. que preenche uma string
numérica com zeros à esquerda, e sabe lidar com sinais positivos e
negativos:

     >>> '12'.zfill(5)
     '00012'
     >>> '-3.14'.zfill(7)
     '-003.14'
     >>> '3.14159265359'.zfill(5)
     '3.14159265359'


File: python.info,  Node: Formatação de strings à moda antiga,  Prev: Formatação manual de string,  Up: Refinando a formatação de saída

2.7.1.4 Formatação de strings à moda antiga
...........................................

O operador % (módulo) também pode ser usado para formatação de string.
Dado ‘formato % valores’ (onde 'formato' é uma string), as instâncias de
‘%’ em ‘formato’ serão substituídas por zero ou mais elementos de
‘valores’.  Essa operação é conhecida como interpolação de string.  Por
exemplo:

     >>> import math
     >>> print('O valor de pi é aproximadamente %5.3f.' % math.pi)
     O valor de pi é aproximadamente 3.142.

Mais informação pode ser encontrada na seção *note Formatação de string
no estilo printf: 6cc.


File: python.info,  Node: Leitura e escrita de arquivos,  Prev: Refinando a formatação de saída,  Up: Entrada e Saída

2.7.2 Leitura e escrita de arquivos
-----------------------------------

*note open(): 51c. retorna um *note objeto arquivo: 1203, e é mais
utilizado com dois argumentos posicionais e um argumento nomeado:
‘open(filename, mode, encoding=None)’

     >>> f = open('arquivo_de_trabalho', 'w', encoding="utf-8")

O primeiro argumento é uma string contendo o nome do arquivo.  O segundo
argumento é outra string, contendo alguns caracteres que descrevem o
modo como o arquivo será usado.  'modo' pode ser ‘'r'’ quando o arquivo
será apenas lido, ‘'w'’ para escrever (se o arquivo já existir seu
conteúdo prévio será apagado), e ‘'a'’ para abrir o arquivo para adição;
qualquer escrita será adicionada ao final do arquivo.  A opção ‘'r+'’
abre o arquivo tanto para leitura como para escrita.  O argumento 'modo'
é opcional, em caso de omissão será presumido ‘'r'’.

Normalmente, arquivos são abertos no 'modo texto', o que significa que
você lê strings de e para o arquivo, o qual está em um codificação
específica.  Se a 'codificação' não for especificada, o padrão irá
depender da plataforma (veja *note open(): 51c.).  Como o UTF-8 é o
padrão mais moderno, ‘encoding="utf-8"’ é recomendado a não ser que você
precise utilizar uma 'codificação' diferente.  Adicionando ‘'b'’ ao modo
irá abrir o o arquivo em 'modo binário'.  Dados no modo binário são
lidos e escritos como objetos *note bytes: 1c2.  Você não pode
especificar a 'codificação' quando estiver abrindo os arquivos em modo
binário.

Em modo texto, o padrão durante a leitura é converter terminadores de
linha específicos da plataforma (‘\n’ no Unix, ‘\r\n’ no Windows) para
apenas ‘\n’.  Ao escrever no modo de texto, o padrão é converter as
ocorrências de ‘\n’ de volta para os finais de linha específicos da
plataforma.  Essa modificação de bastidores nos dados do arquivo é
adequada para arquivos de texto, mas corromperá dados binários, como
arquivos ‘JPEG’ ou ‘EXE’.  Tenha muito cuidado para só usar o modo
binário, ao ler e gravar esses arquivos.

É uma boa prática usar a palavra-chave *note with: 5d2. ao lidar com
arquivos.  A vantagem é que o arquivo é fechado corretamente após o
término de sua utilização, mesmo que uma exceção seja levantada em algum
momento.  Usar ‘with’ também é muito mais curto que escrever seu bloco
equivalente *note try: 6e9.-*note finally: 9d2.:

     >>> with open('arquivo_de_trabalho', encoding="utf-8") as f:
     ...     read_data = f.read()

     >>> # Podemos verificar se o arquivo foi fechado automaticamente.
     >>> f.closed
     True

Se você não está usando a palavra reservada *note with: 5d2, então você
deveria chamar ‘f.close()’ para fechar o arquivo e imediatamente liberar
qualquer recurso do sistema usado por ele.

     Aviso: Chamar ‘f.write()’ sem usar a palavra reservada ‘with’ ou
     chamar ‘f.close()’ 'pode' resultar nos argumentos de ‘f.write()’
     não serem completamente escritos no disco, mesmo se o programa for
     encerrado com êxito.

Depois que um arquivo é fechado, seja por uma instrução *note with: 5d2.
ou chamando ‘f.close()’, as tentativas de usar o arquivo falharão
automaticamente.

     >>> f.close()
     >>> f.read()
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     ValueError: I/O operation on closed file.

* Menu:

* Métodos de objetos arquivo::
* Gravando dados estruturados com json::


File: python.info,  Node: Métodos de objetos arquivo,  Next: Gravando dados estruturados com json,  Up: Leitura e escrita de arquivos

2.7.2.1 Métodos de objetos arquivo
..................................

Para simplificar, o resto dos exemplos nesta seção presumem que um
objeto arquivo chamado ‘f’ já foi criado.

Para ler o conteúdo de um arquivo, chame ‘f.read(tamanho)’, que lê um
punhado de dados devolvendo-os como uma string (em modo texto) ou bytes
(em modo binário).  'tamanho' é um argumento numérico opcional.  Quando
'tamanho' é omitido ou negativo, todo o conteúdo do arquivo é lido e
devolvido; se o arquivo é duas vezes maior que memória da máquina, o
problema é seu.  Caso contrário, no máximo 'tamanho' caracteres (em modo
texto) ou 'tamanho' bytes (em modo binário) são lidos e devolvidos.  Se
o fim do arquivo for atingido, ‘f.read()’ devolve uma string vazia
(‘''’).

     >>> f.read()
     'Este é o arquivo inteiro.\n'
     >>> f.read()
     ''

O método ‘f.readline()’ lê uma única linha do arquivo; o caractere de
quebra de linha (‘\n’) é mantido ao final da string, e só é omitido na
última linha do arquivo, se o arquivo não terminar com uma quebra de
linha.  Isso elimina a ambiguidade do valor retornado; se ‘f.readline()’
retorna uma string vazia, o fim do arquivo foi atingido.  Linhas em
branco são representadas por um ‘'\n'’ – uma string contendo apenas o
caractere terminador de linha.

     >>> f.readline()
     'Está é a primeira linha do arquivo.\n'
     >>> f.readline()
     'Segunda linha do arquivo\n'
     >>> f.readline()
     ''

Uma maneira alternativa de ler linhas do arquivo é iterar diretamente
pelo objeto arquivo.  É eficiente, rápido e resulta em código mais
simples:

     >>> for line in f:
     ...     print(line, end='')
     ...
     Esta é a primeira linha do arquivo.
     Segunda linha do arquivo

Se desejar ler todas as linhas de um arquivo em uma lista, pode-se usar
‘list(f)’ ou ‘f.readlines()’.

‘f.write(string)’ escreve o conteúdo de 'string' para o arquivo,
retornando o número de caracteres escritos.

     >>> f.write('Este é um teste\n')
     15

Outros tipos de objetos precisam ser convertidos – seja para uma string
(em modo texto) ou para bytes (em modo binário) – antes de escrevê-los:

     >>> value = ('a resposta', 42)
     >>> s = str(value)  # converte a tupla para string
     >>> f.write(s)
     18

‘f.tell()’ retorna um inteiro dando a posição atual do objeto arquivo,
no arquivo representado, como número de bytes desde o início do arquivo,
no modo binário, e um número ininteligível, quando no modo de texto.

Para mudar a posição, use ‘f.seek(offset, de_onde)’.  A nova posição é
computada pela soma do deslocamento 'offset' a um ponto de referência
especificado pelo argumento 'de-onde'.  Se o valor de 'de_onde' é 0,a
referência é o início do arquivo, 1 refere-se à posição atual, e 2
refere-se ao fim do arquivo.  Este argumento pode ser omitido e o valor
padrão é 0, usando o início do arquivo como referência.

     >>> f = open('arquivo_de_trabalho', 'rb+')
     >>> f.write(b'0123456789abcdef')
     16
     >>> f.seek(5)      # Vai até o 6º byte no arquivo
     5
     >>> f.read(1)
     b'5'
     >>> f.seek(-3, 2)  # Vai até o 3º byte antes do fim
     13
     >>> f.read(1)
     b'd'

Em arquivos texto (abertos sem um ‘b’, em modo string), somente 'seeks'
relativos ao início do arquivo serão permitidos (exceto se for indicado
o final do arquivo, com ‘seek(0, 2)’) e o único valor válido para
'offset' são aqueles retornados por chamada à ‘f.tell()’, ou zero.
Qualquer outro valor para 'offset' produz um comportamento indefinido.

Objetos arquivo tem alguns métodos adicionais, como *note isatty():
1e09. e *note truncate(): 1355. que não são usados com frequência;
consulte a Biblioteca de Referência para um guia completo de objetos
arquivo.


File: python.info,  Node: Gravando dados estruturados com json,  Prev: Métodos de objetos arquivo,  Up: Leitura e escrita de arquivos

2.7.2.2 Gravando dados estruturados com ‘json’
..............................................

Strings podem ser facilmente gravadas e lidas em um arquivo.  Números
dão um pouco mais de trabalho, já que o método *note read(): 1e0c. só
retorna strings, que terão que ser passadas para uma função como *note
int(): 257, que pega uma string como ‘'123'’ e retorna seu valor
numérico 123.  Quando você deseja salvar tipos de dados mais complexos,
como listas e dicionários aninhados, a análise e serialização manual
tornam-se complicadas.

Ao invés de ter usuários constantemente escrevendo e depurando código
para gravar tipos complicados de dados em arquivos, o Python permite que
se use o popular formato de troca de dados chamado JSON (JavaScript
Object Notation)(1).  O módulo padrão chamado *note json: 82. pode pegar
hierarquias de dados em Python e convertê-las em representações de
strings; esse processo é chamado 'serialização'.  Reconstruir os dados
estruturados da representação string é chamado 'desserialização'.  Entre
serializar e desserializar, a string que representa o objeto pode ser
armazenada em um arquivo, ou estrutura de dados, ou enviada por uma
conexão de rede para alguma outra máquina.

     Nota: O formato JSON é comumente usado por aplicativos modernos
     para permitir troca de dados.  Pessoas que programam já estão
     familiarizadas com esse formato, o que o torna uma boa opção para
     interoperabilidade.

Um objeto ‘x’, pode ser visualizado na sua representação JSON com uma
simples linha de código:

     >>> import json
     >>> x = [1, 'lista', 'simples']
     >>> json.dumps(x)
     '[1, "lista", "simples"]'

Outra variação da função *note dumps(): d68, chamada *note dump(): d67,
serializa o objeto para um *note arquivo texto: 1e0d.  Se ‘f’ é um *note
arquivo texto: 1e0d. aberto para escrita, podemos fazer isto:

     json.dump(x, f)

Para decodificar o objeto novamente, se ‘f’ é um objeto *note arquivo
binário: 1e0e. ou *note arquivo texto: 1e0d. que foi aberto para
leitura:

     x = json.load(f)

     Nota: Arquivos JSON devem ser codificados em UTF-8.  Use
     ‘encoding="utf-8"’ quando abrir um arquivo JSON como um *note
     arquivo texto: 1e0d. tanto para leitura quanto para escrita.

Essa técnica de serialização simples pode manipular listas e
dicionários, mas a serialização de instâncias de classes arbitrárias no
JSON requer um pouco mais de esforço.  A referência para o módulo *note
json: 82. contém uma explicação disso.

Ver também
..........

O módulo *note pickle: a6.

Ao contrário do *note JSON: 1e0b, 'pickle' é um protocolo que permite a
serialização de objetos Python arbitrariamente complexos.  Por isso, é
específico do Python e não pode ser usado para se comunicar com
aplicativos escritos em outros linguagens.  Também é inseguro por
padrão: desserializar dados de pickle, provenientes de uma fonte não
confiável, pode executar código arbitrário, se os dados foram criados
por um invasor habilidoso.

   ---------- Footnotes ----------

   (1) https://json.org


File: python.info,  Node: Erros e exceções,  Next: Classes,  Prev: Entrada e Saída,  Up: O tutorial do Python

2.8 Erros e exceções
====================

Até agora mensagens de erro foram apenas mencionadas, mas se você testou
os exemplos, talvez tenha esbarrado em algumas.  Existem pelo menos dois
tipos distintos de erros: 'erros de sintaxe' e 'exceções'.

* Menu:

* Erros de sintaxe::
* Exceções::
* Tratamento de exceções::
* Levantando exceções::
* Encadeamento de exceções::
* Exceções definidas pelo usuário::
* Definindo ações de limpeza::
* Ações de limpeza predefinidas::
* Criando e tratando várias exceções não relacionadas::
* Enriquecendo exceções com notas::


File: python.info,  Node: Erros de sintaxe,  Next: Exceções,  Up: Erros e exceções

2.8.1 Erros de sintaxe
----------------------

Erros de sintaxe, também conhecidos como erros de parse, são
provavelmente os mais frequentes entre aqueles que ainda estão
aprendendo Python:

     >>> while True print('Olá mundo')
       File "<stdin>", line 1
         while True print('Olá mundo')
                    ^^^^^
     SyntaxError: invalid syntax

O analisador sintático repete a linha ofensiva e exibe pequenas setas
apontando para o local onde o erro foi detectado.  Note que esse nem
sempre é o local que precisa ser corrigido.  No exemplo, o erro é
detectado na função *note print(): fa9, já que dois pontos (‘':'’) estão
faltando logo antes dele.

O nome do arquivo (‘<stdin>’ no nosso exemplo) e o número da linha são
impressos para que você saiba onde procurar caso a entrada tenha vindo
de um arquivo.


File: python.info,  Node: Exceções,  Next: Tratamento de exceções,  Prev: Erros de sintaxe,  Up: Erros e exceções

2.8.2 Exceções
--------------

Mesmo que um comando ou expressão estejam sintaticamente corretos,
talvez ocorra um erro na hora de sua execução.  Erros detectados durante
a execução são chamados 'exceções' e não são necessariamente fatais:
logo veremos como tratá-las em programas Python.  A maioria das exceções
não são tratadas pelos programas e acabam resultando em mensagens de
erro:

     >>> 10 * (1/0)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
         10 * (1/0)
               ~^~
     ZeroDivisionError: division by zero
     >>> 4 + spam*3
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
         4 + spam*3
             ^^^^
     NameError: name 'spam' is not defined
     >>> '2' + 2
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
         '2' + 2
         ~~~~^~~
     TypeError: can only concatenate str (not "int") to str

A última linha da mensagem de erro indica o que aconteceu.  Exceções
surgem com diferentes tipos, e o tipo é exibido como parte da mensagem:
os tipos no exemplo são *note ZeroDivisionError: 94c, *note NameError:
43f. e *note TypeError: 2c3.  A string exibida como sendo o tipo da
exceção é o nome da exceção embutida que ocorreu.  Isso é verdade para
todas exceções pré-definidas em Python, mas não é necessariamente
verdade para exceções definidas pelo usuário (embora seja uma convenção
útil).  Os nomes das exceções padrões são identificadores embutidos (não
palavras reservadas).

O resto da linha é um detalhamento que depende do tipo da exceção
ocorrida e sua causa.

A parte anterior da mensagem de erro apresenta o contexto onde ocorreu a
exceção.  Essa informação é denominada 'stack traceback' (situação da
pilha de execução).  Em geral, contém uma lista de linhas do
código-fonte, sem apresentar, no entanto, linhas lidas da entrada
padrão.

*note Exceções embutidas: 19b1. lista as exceções pré-definidas e seus
significados.


File: python.info,  Node: Tratamento de exceções,  Next: Levantando exceções,  Prev: Exceções,  Up: Erros e exceções

2.8.3 Tratamento de exceções
----------------------------

É possível escrever programas que tratam exceções específicas.  Observe
o exemplo seguinte, que pede dados ao usuário até que um inteiro válido
seja fornecido, ainda permitindo que o programa seja interrompido
(utilizando ‘Control’-‘C’ ou seja lá o que for que o sistema operacional
suporte); note que uma interrupção gerada pelo usuário será sinalizada
pela exceção *note KeyboardInterrupt: 9d9.

     >>> while True:
     ...     try:
     ...         x = int(input("Insira um número: "))
     ...         break
     ...     except ValueError:
     ...         print("Ops! Esse não é um número válido. Tente novamente...")
     ...

A instrução *note try: 6e9. funciona da seguinte maneira:

   * Primeiramente, a 'cláusula try' (o conjunto de instruções entre as
     palavras reservadas *note try: 6e9. e *note except: 18b. ) é
     executada.

   * Se nenhuma exceção ocorrer, a 'cláusula except' é ignorada e a
     execução da instrução *note try: 6e9. é finalizada.

   * Se ocorrer uma exceção durante a execução de uma cláusula *note
     try: 6e9, as instruções remanescentes na cláusula são ignoradas.
     Se o tipo da exceção ocorrida tiver sido previsto em algum *note
     except: 18b, essa 'cláusula except' é executada, e então depois a
     execução continua após o bloco try/except.

   * Se a exceção levantada não corresponder a nenhuma exceção listada
     na 'cláusula de exceção', então ela é entregue a uma instrução
     *note try: 6e9. mais externa.  Se não existir nenhum tratador
     previsto para tal exceção, trata-se de uma 'exceção não tratada' e
     a execução do programa termina com uma mensagem de erro.

A instrução *note try: 6e9. pode ter uma ou mais 'cláusula de exceção',
para especificar múltiplos tratadores para diferentes exceções.  No
máximo um único tratador será executado.  Tratadores só são sensíveis às
exceções levantadas no interior da 'cláusula de tentativa', e não às que
tenham ocorrido no interior de outro tratador numa mesma instrução
‘try’.  Uma 'cláusula de exceção' pode ser sensível a múltiplas
exceções, desde que as especifique em uma tupla, por exemplo:

     ... except (RuntimeError, TypeError, NameError):
     ...     pass

Uma classe em uma cláusula *note except: 18b. corresponde a exceções que
são instâncias da própria classe ou de uma de suas classes derivadas
(mas o contrário não é válido — uma 'cláusula except' listando uma
classe derivada não corresponde a instâncias de suas classes base).  Por
exemplo, o seguinte código irá mostrar B, C, D nessa ordem:

     class B(Exception):
         pass

     class C(B):
         pass

     class D(C):
         pass

     for cls in [B, C, D]:
         try:
             raise cls()
         except D:
             print("D")
         except C:
             print("C")
         except B:
             print("B")

Se a ordem das 'cláusulas de exceção' fosse invertida (‘except B’ no
início), seria exibido B, B, B — somente a primeira 'cláusula de
exceção' compatível é ativada.

Quando uma exceção ocorre, ela pode estar associada a valores chamados
'argumentos' da exceção.  A presença e os tipos dos argumentos dependem
do tipo da exceção.

A 'cláusula except' pode especificar uma variável após o nome da
exceção.  A variável está vinculada à instância de exceção que
normalmente possui um atributo ‘args’ que armazena os argumentos.  Por
conveniência, os tipos de exceção embutidos definem *note __str__():
61d. para exibir todos os argumentos sem acessar explicitamente ‘.args’.

     >>> try:
     ...     raise Exception('spam', 'ovos')
     ... except Exception as inst:
     ...     print(type(inst))    # o tipo da exceção
     ...     print(inst.args)     # argumentos armazenados em .args
     ...     print(inst)          # __str__ permite imprimir args diretamente,
     ...                          # mas pode ser substituído em subclasses de exceção
     ...     x, y = inst.args     # desempacota args
     ...     print('x =', x)
     ...     print('y =', y)
     ...
     <class 'Exception'>
     ('spam', 'ovos')
     ('spam', 'ovos')
     x = spam
     y = ovos

A saída *note __str__(): 61d. da exceção é exibida como a última parte
(“detalhe”) da mensagem para exceções não tratadas.

*note BaseException: 5bb. é a classe base comum de todas as exceções.
Uma de suas subclasses, *note Exception: 9e2, é a classe base de todas
as exceções não fatais.  Exceções que não são subclasses de *note
Exception: 9e2. normalmente não são tratadas, pois são usadas para
indicar que o programa deve terminar.  Elas incluem *note SystemExit:
d63. que é levantada por *note sys.exit(): 138e. e *note
KeyboardInterrupt: 9d9. que é levantada quando um usuário deseja
interromper o programa.

*note Exception: 9e2. pode ser usada como um curinga que captura (quase)
tudo.  No entanto, é uma boa prática ser o mais específico possível com
os tipos de exceções que pretendemos manipular e permitir que quaisquer
exceções inesperadas se propaguem.

O padrão mais comum para lidar com *note Exception: 9e2. é imprimir ou
registrar a exceção e então levantá-la novamente (permitindo que um
chamador lide com a exceção também):

     import sys

     try:
         f = open('meuarquivo.txt')
         s = f.readline()
         i = int(s.strip())
     except OSError as err:
         print("Erro de E/S:", err)
     except ValueError:
         print("Não foi possível converter dados para um inteiro.")
     except Exception as err:
         print(f"Não esperava {err=}, {type(err)=}")
         raise

A construção *note try: 6e9. … *note except: 18b. possui uma 'cláusula
else' opcional, que quando presente, deve ser colocada depois de todas
as outras cláusulas.  É útil para um código que precisa ser executado se
nenhuma exceção foi levantada.  Por exemplo:

     for arg in sys.argv[1:]:
         try:
             f = open(arg, 'r')
         except OSError:
             print('não foi possível abrir', arg)
         else:
             print(arg, 'tem', len(f.readlines()), 'linhas')
             f.close()

É melhor usar a cláusula ‘else’ do que adicionar código adicional à
cláusula *note try: 6e9. porque ela evita que acidentalmente seja
tratada uma exceção que não foi levantada pelo código protegido pela
construção com as instruções ‘try’ … ‘except’.

Os manipuladores de exceção não tratam apenas exceções que ocorrem
imediatamente na 'cláusula try', mas também aquelas que ocorrem dentro
de funções que são chamadas (mesmo indiretamente) na 'cláusula try'.
Por exemplo:

     >>> def this_fails():
     ...     x = 1/0
     ...
     >>> try:
     ...     isso_aqui_falha()
     ... except ZeroDivisionError as err:
     ...     print('Tratando o erro de tempo execução:', err)
     ...
     Tratando o erro de tempo execução: division by zero


File: python.info,  Node: Levantando exceções,  Next: Encadeamento de exceções,  Prev: Tratamento de exceções,  Up: Erros e exceções

2.8.4 Levantando exceções
-------------------------

A instrução *note raise: 5ed. permite ao programador forçar a ocorrência
de um determinado tipo de exceção.  Por exemplo:

     >>> raise NameError('Olá')
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
         raise NameError('Olá')
     NameError: Olá

O argumento de *note raise: 5ed. indica a exceção a ser levantada.  Esse
argumento deve ser uma instância de exceção ou uma classe de exceção
(uma classe que deriva de *note BaseException: 5bb, tal como *note
Exception: 9e2. ou uma de suas subclasses).  Se uma classe de exceção
for passada, será implicitamente instanciada invocando o seu construtor
sem argumentos:

     raise ValueError  # abreviação para 'raise ValueError()'

Caso você precise determinar se uma exceção foi levantada ou não, mas
não quer manipular o erro, uma forma simples de instrução *note raise:
5ed. permite que você levante-a novamente:

     >>> try:
     ...     raise NameError('Olá')
     ... except NameError:
     ...     print('Uma exceção passou por aqui!')
     ...     raise
     ...
     Uma exceção passou por aqui!
     Traceback (most recent call last):
       File "<stdin>", line 2, in <module>
         raise NameError('Olá')
     NameError: Olá


File: python.info,  Node: Encadeamento de exceções,  Next: Exceções definidas pelo usuário,  Prev: Levantando exceções,  Up: Erros e exceções

2.8.5 Encadeamento de exceções
------------------------------

Se uma exceção não tratada ocorrer dentro de uma seção *note except:
18b, ela terá a exceção sendo tratada anexada a ela e incluída na
mensagem de erro:

     >>> try:
     ...     open("database.sqlite")
     ... except OSError:
     ...     raise RuntimeError("unable to handle error")
     ...
     Traceback (most recent call last):
       File "<stdin>", line 2, in <module>
         open("database.sqlite")
         ~~~~^^^^^^^^^^^^^^^^^^^
     FileNotFoundError: [Errno 2] No such file or directory: 'database.sqlite'

     During handling of the above exception, another exception occurred:

     Traceback (most recent call last):
       File "<stdin>", line 4, in <module>
         raise RuntimeError("unable to handle error")
     RuntimeError: unable to handle error

Para indicar que uma exceção é uma consequência direta de outra, a
instrução *note raise: 5ed. permite uma cláusula opcional *note from:
5ed.:

     # exc deve ser uma instância de exceção ou None.
     raise RuntimeError from exc

Isso pode ser útil quando você está transformando exceções.  Por
exemplo:

     >>> def func():
     ...     raise ConnectionError
     ...
     >>> try:
     ...     func()
     ... except ConnectionError as exc:
     ...     raise RuntimeError('Failed to open database') from exc
     ...
     Traceback (most recent call last):
       File "<stdin>", line 2, in <module>
         func()
         ~~~~^^
       File "<stdin>", line 2, in func
     ConnectionError

     The above exception was the direct cause of the following exception:

     Traceback (most recent call last):
       File "<stdin>", line 4, in <module>
         raise RuntimeError('Failed to open database') from exc
     RuntimeError: Failed to open database

Ele também permite desabilitar o encadeamento automático de exceções
usando o idioma ‘from None’:

     >>> try:
     ...     open('bancodedados.sqlite')
     ... except OSError:
     ...     raise RuntimeError from None
     ...
     Traceback (most recent call last):
       File "<stdin>", line 4, in <module>
         raise RuntimeError from None
     RuntimeError

Para mais informações sobre os mecanismos de encadeamento, veja *note
Exceções embutidas: 19b1.


File: python.info,  Node: Exceções definidas pelo usuário,  Next: Definindo ações de limpeza,  Prev: Encadeamento de exceções,  Up: Erros e exceções

2.8.6 Exceções definidas pelo usuário
-------------------------------------

Programas podem definir novos tipos de exceções, através da criação de
uma nova classe (veja *note Classes: 1d9f. para mais informações sobre
classes Python).  Exceções devem ser derivadas da classe *note
Exception: 9e2, direta ou indiretamente.

As classes de exceção podem ser definidas para fazer qualquer coisa que
qualquer outra classe pode fazer, mas geralmente são mantidas simples,
geralmente oferecendo apenas um número de atributos que permitem que
informações sobre o erro sejam extraídas por manipuladores para a
exceção.

É comum que novas exceções sejam definidas com nomes terminando em
“Error”, semelhante a muitas exceções embutidas.

Muitos módulos padrão definem suas próprias exceções para relatar erros
que podem ocorrer nas funções que definem.


File: python.info,  Node: Definindo ações de limpeza,  Next: Ações de limpeza predefinidas,  Prev: Exceções definidas pelo usuário,  Up: Erros e exceções

2.8.7 Definindo ações de limpeza
--------------------------------

A instrução *note try: 6e9. possui outra cláusula opcional, cuja
finalidade é permitir a implementação de ações de limpeza, que sempre
devem ser executadas independentemente da ocorrência de exceções.  Como
no exemplo:

     >>> try:
     ...     raise KeyboardInterrupt
     ... finally:
     ...     print('Adeus, mundo!')
     ...
     Adeus, mundo!
     Traceback (most recent call last):
       File "<stdin>", line 2, in <module>
         raise KeyboardInterrupt
     KeyboardInterrupt

Se uma cláusula *note finally: 9d2. estiver presente, a cláusula
‘finally’ será executada como a última tarefa antes da conclusão da
instrução *note try: 6e9.  A cláusula ‘finally’ executa se a instrução
‘try’ produz uma exceção.  Os pontos a seguir discutem casos mais
complexos quando ocorre uma exceção:

   * Se ocorrer uma exceção durante a execução da cláusula ‘try’, a
     exceção poderá ser tratada por uma cláusula *note except: 18b.  Se
     a exceção não for tratada por uma cláusula ‘except’, a exceção será
     gerada novamente após a execução da cláusula ‘finally’.

   * Uma exceção pode ocorrer durante a execução de uma cláusula
     ‘except’ ou ‘else’.  Novamente, a exceção é re-levantada depois que
     ‘finally’ é executada.

   * Se a cláusula ‘finally’ executa uma instrução *note break: ab8,
     *note continue: 9d1. ou *note return: 9d6, as exceções não são
     levantadas novamente.

   * Se a instrução ‘try’ atingir uma instrução *note break: ab8, *note
     continue: 9d1. ou *note return: 9d6, a cláusula ‘finally’ será
     executada imediatamente antes da execução da instrução ‘break’,
     ‘continue’ ou ‘return’.

   * Se uma cláusula ‘finally’ incluir uma instrução ‘return’, o valor
     retornado será aquele da instrução ‘return’ da cláusula ‘finally’,
     não o valor da instrução ‘return’ da cláusula ‘try’.

Por exemplo:

     >>> def retorna_booleano():
     ...     try:
     ...         return True
     ...     finally:
     ...         return False
     ...
     >>> retorna_booleano()
     False

Um exemplo mais complicado:

     >>> def divide(x, y):
     ...     try:
     ...         result = x / y
     ...     except ZeroDivisionError:
     ...         print("division by zero!")
     ...     else:
     ...         print("result is", result)
     ...     finally:
     ...         print("executing finally clause")
     ...
     >>> divide(2, 1)
     result is 2.0
     executing finally clause
     >>> divide(2, 0)
     division by zero!
     executing finally clause
     >>> divide("2", "1")
     executing finally clause
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
         divide("2", "1")
         ~~~~~~^^^^^^^^^^
       File "<stdin>", line 3, in divide
         result = x / y
                  ~~^~~
     TypeError: unsupported operand type(s) for /: 'str' and 'str'

Como você pode ver, a cláusula *note finally: 9d2. é executada em todos
os casos.  A exceção *note TypeError: 2c3. levantada pela divisão de
duas strings não é tratada pela cláusula *note except: 18b. e portanto é
re-levantada depois que a cláusula ‘finally’ é executada.

Em aplicação do mundo real, a cláusula *note finally: 9d2. é útil para
liberar recursos externos (como arquivos ou conexões de rede),
independentemente do uso do recurso ter sido bem sucedido ou não.


File: python.info,  Node: Ações de limpeza predefinidas,  Next: Criando e tratando várias exceções não relacionadas,  Prev: Definindo ações de limpeza,  Up: Erros e exceções

2.8.8 Ações de limpeza predefinidas
-----------------------------------

Alguns objetos definem ações de limpeza padrões para serem executadas
quando o objeto não é mais necessário, independentemente da operação que
estava usando o objeto ter sido ou não bem sucedida.  Veja o exemplo a
seguir, que tenta abrir um arquivo e exibir seu conteúdo na tela.

     for linha in open("meuarquivo.txt"):
         print(linha, end="")

O problema com esse código é que ele deixa o arquivo aberto um período
indeterminado depois que o código é executado.  Isso não chega a ser
problema em scripts simples, mas pode ser um problema para grandes
aplicações.  A palavra reservada *note with: 5d2. permite que objetos
como arquivos sejam utilizados com a certeza de que sempre serão
prontamente e corretamente finalizados.

     with open("meuarquivo.txt") as f:
         for linha in f:
             print(linha, end="")

Depois que a instrução é executada, o arquivo 'f' é sempre fechado,
mesmo se ocorrer um problema durante o processamento das linhas.  Outros
objetos que, como arquivos, fornecem ações de limpeza predefinidas as
indicarão em suas documentações.


File: python.info,  Node: Criando e tratando várias exceções não relacionadas,  Next: Enriquecendo exceções com notas,  Prev: Ações de limpeza predefinidas,  Up: Erros e exceções

2.8.9 Criando e tratando várias exceções não relacionadas
---------------------------------------------------------

Existem situações em que é necessário relatar várias exceções que
ocorreram.  Isso geralmente ocorre em estruturas de simultaneidade,
quando várias tarefas podem ter falhado em paralelo, mas também há
outros casos de uso em que é desejável continuar a execução e coletar
vários erros em vez de levantar a primeira exceção.

O *note ExceptionGroup: 1b6. integrado envolve uma lista de instâncias
de exceção para que elas possam ser levantadas juntas.  É uma exceção em
si, portanto, pode ser capturada como qualquer outra exceção.

     >>> def f():
     ...     excs = [OSError('error 1'), SystemError('error 2')]
     ...     raise ExceptionGroup('houve problemas', excs)
     ...
     >>> f()
       + Exception Group Traceback (most recent call last):
       |   File "<stdin>", line 1, in <module>
       |     f()
       |     ~^^
       |   File "<stdin>", line 3, in f
       | ExceptionGroup: houve problemas (2 sub-exceptions)
       +-+---------------- 1 ----------------
         | OSError: error 1
         +---------------- 2 ----------------
         | SystemError: error 2
         +------------------------------------
     >>> try:
     ...     f()
     ... except Exception as e:
     ...     print(f'capturada {type(e)}: e')
     ...
     capturada <class 'ExceptionGroup'>: e
     >>>

Usando ‘except*’ em vez de ‘except’, podemos manipular seletivamente
apenas as exceções no grupo que correspondem a um determinado tipo.  No
exemplo a seguir, que mostra um grupo de exceção aninhado, cada cláusula
‘except*’ extrai do grupo exceções de um certo tipo enquanto permite que
todas as outras exceções se propaguem para outras cláusulas e
eventualmente sejam levantadas novamente.

     >>> def f():
     ...     raise ExceptionGroup(
     ...         "group1",
     ...         [
     ...             OSError(1),
     ...             SystemError(2),
     ...             ExceptionGroup(
     ...                 "group2",
     ...                 [
     ...                     OSError(3),
     ...                     RecursionError(4)
     ...                 ]
     ...             )
     ...         ]
     ...     )
     ...
     >>> try:
     ...     f()
     ... except* OSError as e:
     ...     print("Houve OSErrors")
     ... except* SystemError as e:
     ...     print("Houve SystemErrors")
     ...
     Houve OSErrors
     Houve SystemErrors
       + Exception Group Traceback (most recent call last):
       |   File "<stdin>", line 2, in <module>
       |     f()
       |     ~^^
       |   File "<stdin>", line 2, in f
       |     raise ExceptionGroup(
       |     ...<12 lines>...
       |     )
       | ExceptionGroup: group1
       +-+---------------- 1 ----------------
         | ExceptionGroup: group2
         +-+---------------- 1 ----------------
           | RecursionError: 4
           +------------------------------------
     >>>

Observe que as exceções aninhadas em um grupo de exceções devem ser
instâncias, não tipos.  Isso ocorre porque, na prática, as exceções
normalmente seriam aquelas que já foram levantadas e capturadas pelo
programa, seguindo o seguinte padrão:

     >>> excs = []
     ... for test in tests:
     ...     try:
     ...         test.run()
     ...     except Exception as e:
     ...         excs.append(e)
     ...
     >>> if excs:
     ...    raise ExceptionGroup("Falhas no teste", excs)
     ...


File: python.info,  Node: Enriquecendo exceções com notas,  Prev: Criando e tratando várias exceções não relacionadas,  Up: Erros e exceções

2.8.10 Enriquecendo exceções com notas
--------------------------------------

Quando uma exceção é criada para ser levantada, geralmente é
inicializada com informações que descrevem o erro ocorrido.  Há casos em
que é útil adicionar informações após a captura da exceção.  Para este
propósito, as exceções possuem um método ‘add_note(note)’ que aceita uma
string e a adiciona à lista de notas da exceção.  A renderização de
traceback padrão inclui todas as notas, na ordem em que foram
adicionadas, após a exceção.

     >>> try:
     ...     raise TypeError('tipo inválido')
     ... except Exception as e:
     ...     e.add_note('Adiciona algumas informações')
     ...     e.add_note('Adiciona mais algumas informações')
     ...     raise
     ...
     Traceback (most recent call last):
       File "<stdin>", line 2, in <module>
         raise TypeError('tipo inválido')
     TypeError: tipo inválido
     Adiciona algumas informações
     Adiciona mais algumas informações
     >>>

Por exemplo, ao coletar exceções em um grupo de exceções, podemos querer
adicionar informações de contexto para os erros individuais.  A seguir,
cada exceção no grupo tem uma nota indicando quando esse erro ocorreu.

     >>> def f():
     ...     raise OSError('operação falhou')
     ...
     >>> excs = []
     >>> for i in range(3):
     ...     try:
     ...         f()
     ...     except Exception as e:
     ...         e.add_note(f'Aconteceu na iteração {i+1}')
     ...         excs.append(e)
     ...
     >>> raise ExceptionGroup('Nós temos alguns problemas', excs)
       + Exception Group Traceback (most recent call last):
       |   File "<stdin>", line 1, in <module>
       |     raise ExceptionGroup('Nós temos alguns problemas', excs)
       | ExceptionGroup: Nós temos alguns problemas (3 sub-exceptions)
       +-+---------------- 1 ----------------
         | Traceback (most recent call last):
         |   File "<stdin>", line 3, in <module>
         |     f()
         |     ~^^
         |   File "<stdin>", line 2, in f
         |     raise OSError('operação falhou')
         | OSError: operação falhou
         | Aconteceu na iteração 1
         +---------------- 2 ----------------
         | Traceback (most recent call last):
         |   File "<stdin>", line 3, in <module>
         |     f()
         |     ~^^
         |   File "<stdin>", line 2, in f
         |     raise OSError('operação falhou')
         | OSError: operação falhou
         | Aconteceu na iteração 2
         +---------------- 3 ----------------
         | Traceback (most recent call last):
         |   File "<stdin>", line 3, in <module>
         |     f()
         |     ~^^
         |   File "<stdin>", line 2, in f
         |     raise OSError('operação falhou')
         | OSError: operação falhou
         | Aconteceu na iteração 3
         +------------------------------------
     >>>


File: python.info,  Node: Classes,  Next: Um breve passeio pela biblioteca padrão,  Prev: Erros e exceções,  Up: O tutorial do Python

2.9 Classes
===========

Classes proporcionam uma forma de organizar dados e funcionalidades
juntos.  Criar uma nova classe cria um novo “tipo” de objeto, permitindo
que novas “instâncias” desse tipo sejam produzidas.  Cada instância da
classe pode ter atributos anexados a ela, para manter seu estado.
Instâncias da classe também podem ter métodos (definidos pela classe)
para modificar seu estado.

Em comparação com outras linguagens de programação, o mecanismo de
classes de Python introduz a programação orientada a objetos sem
acrescentar muitas novidades de sintaxe ou semântica.  É uma mistura de
mecanismos equivalentes encontrados em C++ e Modula-3.  As classes em
Python oferecem todas as características tradicionais da programação
orientada a objetos: o mecanismo de herança permite múltiplas classes
base (herança múltipla), uma classe derivada pode sobrescrever quaisquer
métodos de uma classe ancestral, e um método pode invocar outro método
homônimo de uma classe ancestral.  Objetos podem armazenar uma
quantidade arbitrária de dados de qualquer tipo.  Assim como acontece
com os módulos, as classes fazem parte da natureza dinâmica de Python:
são criadas em tempo de execução, e podem ser alteradas após sua
criação.

Usando a terminologia de C++, todos os membros de uma classe (incluindo
dados) são 'públicos' (veja exceção abaixo *note Variáveis privadas:
1e29.), e todos as funções membro são 'virtuais'.  Como em Modula-3, não
existem atalhos para referenciar membros do objeto de dentro dos seus
métodos: o método (função definida em uma classe) é declarado com um
primeiro argumento explícito representando o objeto (instância da
classe), que é fornecido implicitamente pela chamada ao método.  Como em
Smalltalk, classes são objetos.  Isso fornece uma semântica para
importar e renomear.  Ao contrário de C++ ou Modula-3, tipos
pré-definidos podem ser utilizados como classes base para extensões por
herança pelo usuário.  Também, como em C++, a maioria dos operadores
(aritméticos, indexação, etc) podem ser redefinidos por instâncias de
classe.

(Na falta de uma terminologia universalmente aceita para falar sobre
classes, ocasionalmente farei uso de termos comuns em Smalltalk ou C++.
Eu usaria termos de Modula-3, já que sua semântica de orientação a
objetos é mais próxima da de Python, mas creio que poucos leitores já
ouviram falar dessa linguagem.)

* Menu:

* Uma palavra sobre nomes e objetos::
* Escopos e espaços de nomes do Python::
* Uma primeira olhada nas classes::
* Observações aleatórias::
* Herança::
* Variáveis privadas::
* Curiosidades e conclusões::
* Iteradores::
* Geradores::
* Expressões geradoras::


File: python.info,  Node: Uma palavra sobre nomes e objetos,  Next: Escopos e espaços de nomes do Python,  Up: Classes

2.9.1 Uma palavra sobre nomes e objetos
---------------------------------------

Objetos têm individualidade, e vários nomes (em diferentes escopos)
podem ser vinculados a um mesmo objeto.  Isso é chamado de apelidamento
em outras linguagens.  Geralmente, esta característica não é muito
apreciada, e pode ser ignorada com segurança ao lidar com tipos
imutáveis (números, strings, tuplas).  Entretanto, apelidamento pode ter
um efeito surpreendente na semântica do código Python envolvendo objetos
mutáveis como listas, dicionários e a maioria dos outros tipos.  Isso
pode ser usado em benefício do programa, porque os apelidos funcionam de
certa forma como ponteiros.  Por exemplo, passar um objeto como
argumento é barato, pois só um ponteiro é passado na implementação; e se
uma função modifica um objeto passado como argumento, o invocador verá a
mudança — isso elimina a necessidade de ter dois mecanismos de passagem
de parâmetros como em Pascal.


File: python.info,  Node: Escopos e espaços de nomes do Python,  Next: Uma primeira olhada nas classes,  Prev: Uma palavra sobre nomes e objetos,  Up: Classes

2.9.2 Escopos e espaços de nomes do Python
------------------------------------------

Antes de introduzir classes, é preciso falar das regras de escopo em
Python.  Definições de classe fazem alguns truques com espaços de nomes.
Portanto, primeiro é preciso entender claramente como escopos e espaços
de nomes funcionam, para entender o que está acontecendo.  Esse
conhecimento é muito útil para qualquer programador Python avançado.

Vamos começar com algumas definições.

Um 'espaço de nomes' é um mapeamento que associa nomes a objetos.
Atualmente, são implementados como dicionários em Python, mas isso não é
perceptível (a não ser pelo desempenho), e pode mudar no futuro.
Exemplos de espaços de nomes são: o conjunto de nomes pré-definidos
(funções como *note abs(): 1e2d. e as exceções pré-definidas); nomes
globais em um módulo; e nomes locais na invocação de uma função.  De
certa forma, os atributos de um objeto também formam um espaço de nomes.
O mais importante é saber que não existe nenhuma relação entre nomes em
espaços de nomes distintos.  Por exemplo, dois módulos podem definir uma
função de nome ‘maximize’ sem confusão — usuários dos módulos devem
prefixar a função com o nome do módulo, para evitar colisão.

A propósito, utilizo a palavra 'atributo' para qualquer nome depois de
um ponto.  Na expressão ‘z.real’, por exemplo, ‘real’ é um atributo do
objeto ‘z’.  Estritamente falando, referências para nomes em módulos são
atributos: na expressão ‘modname.funcname’, ‘modname’ é um objeto módulo
e ‘funcname’ é um de seus atributos.  Neste caso, existe um mapeamento
direto entre os atributos de um módulo e os nomes globais definidos no
módulo: eles compartilham o mesmo espaço de nomes!  (1)

Atributos podem ser somente leitura ou para leitura e escrita.  No
segundo caso, é possível atribuir um novo valor ao atributo.  Atributos
de módulos são passíveis de atribuição: você pode escrever
‘modname.the_answer = 42’.  Atributos que aceitam escrita também podem
ser apagados através da instrução *note del: 18a7.  Por exemplo, ‘del
modname.the_answer’ removerá o atributo ‘the_answer’ do objeto
referenciado por ‘modname’.

Espaços de nomes são criados em momentos diferentes e possuem diferentes
ciclos de vida.  O espaço de nomes que contém os nomes embutidos é
criado quando o interpretador inicializa e nunca é removido.  O espaço
de nomes global de um módulo é criado quando a definição do módulo é
lida, e normalmente duram até a terminação do interpretador.  Os
comandos executados pela invocação do interpretador, pela leitura de um
script com programa principal, ou interativamente, são parte do módulo
chamado *note __main__: 1, e portanto possuem seu próprio espaço de
nomes.  (Os nomes embutidos possuem seu próprio espaço de nomes no
módulo chamado *note builtins: 12.).

O espaço de nomes local de uma função é criado quando a função é
invocada, e apagado quando a função retorna ou levanta uma exceção que
não é tratada na própria função.  (Na verdade, uma forma melhor de
descrever o que realmente acontece é que o espaço de nomes local é
“esquecido” quando a função termina.)  Naturalmente, cada invocação
recursiva de uma função tem seu próprio espaço de nomes.

Um 'escopo' é uma região textual de um programa Python onde um espaço de
nomes é diretamente acessível.  Aqui, “diretamente acessível” significa
que uma referência sem um prefixo qualificador permite o acesso ao nome.

Ainda que escopos sejam determinados estaticamente, eles são usados
dinamicamente.  A qualquer momento durante a execução, existem 3 ou 4
escopos aninhados cujos espaços de nomes são diretamente acessíveis:

   * o escopo mais interno, que é acessado primeiro, contem os nomes
     locais

   * os escopos das funções que envolvem a função atual, que são
     acessados a partir do escopo mais próximo, contêm nomes não-locais,
     mas também não-globais

   * o penúltimo escopo contém os nomes globais do módulo atual

   * e o escopo mais externo (acessado por último) contém os nomes das
     funções embutidas e demais objetos pré-definidos do interpretador

Se um nome é declarado no escopo global, então todas as referências e
atribuições de valores vão diretamente para o penúltimo escopo, que
contém os nomes globais do módulo.  Para alterar variáveis declaradas
fora do escopo mais interno, a instrução *note nonlocal: 12ea. pode ser
usada; caso contrário, todas essas variáveis serão apenas para leitura
(a tentativa de atribuir valores a essas variáveis simplesmente criará
uma 'nova' variável local, no escopo interno, não alterando nada na
variável de nome idêntico fora dele).

Normalmente, o escopo local referencia os nomes locais da função
corrente no texto do programa.  Fora de funções, o escopo local
referencia os nomes do escopo global: espaço de nomes do módulo.
Definições de classes adicionam um outro espaço de nomes ao escopo
local.

É importante perceber que escopos são determinados estaticamente, pelo
texto do código-fonte: o escopo global de uma função definida em um
módulo é o espaço de nomes deste módulo, sem importar de onde ou por
qual apelido a função é invocada.  Por outro lado, a busca de nomes é
dinâmica, ocorrendo durante a execução.  Porém, a evolução da linguagem
está caminhando para uma resolução de nomes estática, em “tempo de
compilação”, portanto não conte com a resolução dinâmica de nomes!  (De
fato, variáveis locais já são resolvidas estaticamente.)

Uma peculiaridade especial do Python é que – se nenhuma instrução *note
global: 18a. ou *note nonlocal: 12ea. estiver em vigor – as atribuições
de nomes sempre entram no escopo mais interno.  As atribuições não
copiam dados — elas apenas vinculam nomes aos objetos.  O mesmo vale
para exclusões: a instrução ‘del x’ remove a ligação de ‘x’ do espaço de
nomes referenciado pelo escopo local.  De fato, todas as operações que
introduzem novos nomes usam o escopo local: em particular, instruções
*note import: 5e2. e definições de funções ligam o módulo ou o nome da
função no escopo local.

A instrução *note global: 18a. pode ser usada para indicar que certas
variáveis residem no escopo global ao invés do local; a instrução *note
nonlocal: 12ea. indica que variáveis particulares estão em um espoco
mais interno e devem ser recuperadas lá.

* Menu:

* Exemplo de escopos e espaço de nomes::

   ---------- Footnotes ----------

   (1) Exceto por uma coisa.  Os objetos módulo têm um atributo secreto
e somente para leitura chamado *note __dict__: 55b. que retorna o
dicionário usado para implementar o espaço de nomes do módulo; o nome
‘__dict__’ é um atributo, mas não um nome global.  Obviamente, usar isso
viola a abstração da implementação do espaço de nomes, e deve ser
restrito a coisas como depuradores post-mortem.


File: python.info,  Node: Exemplo de escopos e espaço de nomes,  Up: Escopos e espaços de nomes do Python

2.9.2.1 Exemplo de escopos e espaço de nomes
............................................

Este é um exemplo que demonstra como se referir aos diferentes escopos e
aos espaços de nomes, e como *note global: 18a. e *note nonlocal: 12ea.
pode afetar ligação entre as variáveis:

     def teste_de_escopo():
         def faz_local():
             spam = "spam local"

         def faz_nonlocal():
             nonlocal spam
             spam = "spam não-local"

         def faz_global():
             global spam
             spam = "spam global"

         spam = "spam teste"
         faz_local()
         print("Após atribuição local:", spam)
         faz_nonlocal()
         print("Após atribuição não-local:", spam)
         faz_global()
         print("Após atribuição global:", spam)

     teste_de_escopo()
     print("No escopo global:", spam)

A saída do código de exemplo é:

     Após atribuição local: spam teste
     Após atribuição não-local: spam não-local
     Após atribuição global: spam não-local
     No escopo global: spam global

Observe como uma atribuição 'local' (que é o padrão) não altera o
vínculo de 'teste_de_escopo' a 'spam'.  A instrução *note nonlocal:
12ea. mudou o vínculo de 'teste_de_escopo' de 'spam' e a atribuição
*note global: 18a. alterou a ligação para o nível do módulo.

Você também pode ver que não havia nenhuma ligação anterior para 'spam'
antes da atribuição *note global: 18a.


File: python.info,  Node: Uma primeira olhada nas classes,  Next: Observações aleatórias,  Prev: Escopos e espaços de nomes do Python,  Up: Classes

2.9.3 Uma primeira olhada nas classes
-------------------------------------

Classes introduzem novidades sintáticas, três novos tipos de objetos, e
também alguma semântica nova.

* Menu:

* Sintaxe da definição de classe::
* Objetos classe::
* Objetos instância::
* Objetos método::
* Variáveis de classe e instância::


File: python.info,  Node: Sintaxe da definição de classe,  Next: Objetos classe,  Up: Uma primeira olhada nas classes

2.9.3.1 Sintaxe da definição de classe
......................................

A forma mais simples de definir uma classe é:

     class NomeClasse:
         <instrução-1>
         .
         .
         .
         <instrução-N>

Definições de classe, assim como definições de função (instruções *note
def: 14a2.), precisam ser executadas antes que tenham qualquer efeito.
(Você pode colocar uma definição de classe dentro do teste condicional
de um *note if: 2f3. ou dentro de uma função.)

Na prática, as instruções dentro da definição de classe geralmente serão
definições de funções, mas outras instruções são permitidas, e às vezes
são bem úteis — voltaremos a este tema depois.  Definições de funções
dentro da classe normalmente têm um forma peculiar de lista de
argumentos, determinada pela convenção de chamada a métodos — isso
também será explicado mais tarde.

Quando se inicia a definição de classe, um novo espaço de nomes é
criado, e usado como escopo local — assim, todas atribuições a variáveis
locais ocorrem nesse espaço de nomes.  Em particular, funções definidas
aqui são vinculadas a nomes nesse escopo.

Quando uma definição de classe é finalizada normalmente (até o fim), um
'objeto classe' é criado.  Este objeto encapsula o conteúdo do espaço de
nomes criado pela definição da classe; aprenderemos mais sobre objetos
classe na próxima seção.  O escopo local (que estava vigente antes da
definição da classe) é reativado, e o objeto classe é vinculado ao
identificador da classe nesse escopo (‘NomeClasse’ no exemplo).


File: python.info,  Node: Objetos classe,  Next: Objetos instância,  Prev: Sintaxe da definição de classe,  Up: Uma primeira olhada nas classes

2.9.3.2 Objetos classe
......................

Objetos classe suportam dois tipos de operações: 'referências a
atributos' e 'instanciação'.

'Referências a atributos' de classe utilizam a sintaxe padrão utilizada
para quaisquer referências a atributos em Python: ‘obj.nome’.  Nomes de
atributos válidos são todos os nomes presentes dentro do espaço de nomes
da classe, quando o objeto classe foi criado.  Portanto, se a definição
de classe tem esta forma:

     class MinhaClasse:
         """Um exemplo de classe simples"""
         i = 12345

         def f(self):
             return 'olá mundo'

então ‘MinhaClasse.i’ e ‘MinhaClasse.f’ são referências a atributo
válidas, retornando, respectivamente, um inteiro e um objeto função.
Atributos de classe podem receber valores, pode-se modificar o valor de
‘MinhaClasse.i’ num atribuição.  *note __doc__: 1e35. também é um
atributo válido da classe, retornando a docstring associada à classe:
‘"Um exemplo de classe simples"’.

Para 'instanciar' uma classe, usa-se a mesma sintaxe de invocar uma
função.  Apenas finja que o objeto classe do exemplo é uma função sem
parâmetros, que devolve uma nova instância da classe.  Por exemplo
(presumindo a classe acima):

     x = MinhaClasse()

cria uma nova 'instância' da classe e atribui o objeto resultante à
variável local ‘x’.

A operação de instanciação (“invocar” um objeto classe) cria um objeto
vazio.  Muitas classes preferem criar novos objetos com um estado
inicial predeterminado.  Para tanto, a classe pode definir um método
especial chamado *note __init__(): 6b0, assim:

     def __init__(self):
         self.data = []

Quando uma classe define um método *note __init__(): 6b0, o processo de
instanciação automaticamente invoca ‘__init__()’ sobre a instância recém
criada.  Em nosso exemplo, uma nova instância já inicializada pode ser
obtida desta maneira:

     x = MinhaClasse()

Naturalmente, o método *note __init__(): 6b0. pode ter parâmetros para
maior flexibilidade.  Neste caso, os argumentos fornecidos na invocação
da classe serão passados para o método ‘__init__()’.  Por exemplo,

     >>> class Complex:
     ...     def __init__(self, realpart, imagpart):
     ...         self.r = realpart
     ...         self.i = imagpart
     ...
     >>> x = Complex(3.0, -4.5)
     >>> x.r, x.i
     (3.0, -4.5)


File: python.info,  Node: Objetos instância,  Next: Objetos método,  Prev: Objetos classe,  Up: Uma primeira olhada nas classes

2.9.3.3 Objetos instância
.........................

Agora o que podemos fazer com objetos de instância?  As únicas operações
compreendidas por objetos de instância são os atributos de referência.
Existem duas maneiras válidas para nomear atributos: atributos de dados
e métodos.

Atributos de dados correspondem a “variáveis de instância” em Smalltalk,
e a “membros de dados” em C++.  Atributos de dados não precisam ser
declarados.  Assim como variáveis locais, eles passam a existir na
primeira vez em que é feita uma atribuição.  Por exemplo, se ‘x’ é uma
instância da ‘MinhaClasse’ criada acima, o próximo trecho de código irá
exibir o valor ‘16’, sem deixar nenhum rastro:

     x.contador = 1
     while x.contador < 10:
         x.contador = x.contador * 2
     print(x.contador)
     del x.contador

O outro tipo de referência a um atributo de instância é um 'método'.  Um
método é uma função que “pertence a” um objeto.

Nomes de métodos válidos de uma instância dependem de sua classe.  Por
definição, cada atributo de uma classe que é uma função corresponde a um
método das instâncias.  Em nosso exemplo, ‘x.f’ é uma referência de
método válida já que ‘MinhaClasse.f’ é uma função, enquanto ‘x.i’ não é,
já que ‘MinhaClasse.i’ não é uma função.  Entretanto, ‘x.f’ não é o
mesmo que ‘MinhaClasse.f’.  A referência ‘x.f’ acessa um objeto método e
a ‘MinhaClasse.f’ acessa um objeto função.


File: python.info,  Node: Objetos método,  Next: Variáveis de classe e instância,  Prev: Objetos instância,  Up: Uma primeira olhada nas classes

2.9.3.4 Objetos método
......................

Normalmente, um método é chamado imediatamente após ser referenciado:

     x.f()

Se ‘x = MinhaClasse()’, como acima, o resultado da expressão acima será
a string ‘"olá mundo"’.  No entanto, não é obrigatório invocar o método
imediatamente: como ‘x.f’ é também um objeto ele pode ser atribuído a
uma variável e invocado depois.  Por exemplo:

     xf = x.f
     while True:
         print(xf())

exibirá o texto ‘olá mundo’ até o mundo acabar.

O que ocorre precisamente quando um método é invocado?  Você deve ter
notado que ‘x.f()’ foi chamado sem nenhum argumento, porém a definição
da função ‘f()’ especificava um argumento.  O que aconteceu com esse
argumento?  Certamente Python levanta uma exceção quando uma função que
declara um argumento é invocada sem nenhum argumento — mesmo que o
argumento não seja usado no corpo da função…

Na verdade, pode-se supor a resposta: a particularidade sobre os métodos
é que o objeto da instância é passado como o primeiro argumento da
função.  Em nosso exemplo, a chamada ‘x.f()’ é exatamente equivalente a
‘MinhaClasse.f(x)’.  Em geral, chamar um método com uma lista de 'n'
argumentos é equivalente a chamar a função correspondente com uma lista
de argumentos que é criada inserindo o objeto de instância do método
antes do primeiro argumento.

Em geral, os métodos funcionam da seguinte forma.  Quando um atributo de
uma instância, não relacionado a dados, é referenciado, a classe da
instância é pesquisada.  Se o nome é um atributo de classe válido que é
um objeto função, referências ao objeto de instância e ao objeto função
serão empacotadas em um objeto método.  Quando o objeto método é chamado
com uma lista de argumentos, uma nova lista de argumentos é construída a
partir do objeto de instância e da lista de argumentos, e o objeto
função é chamado com essa nova lista de argumentos.


File: python.info,  Node: Variáveis de classe e instância,  Prev: Objetos método,  Up: Uma primeira olhada nas classes

2.9.3.5 Variáveis de classe e instância
.......................................

De forma geral, variáveis de instância são variáveis que indicam dados
que são únicos a cada instância individual, e variáveis de classe são
variáveis de atributos e de métodos que são comuns a todas as instâncias
de uma classe:

     class Cachorro:

         tipo = 'canino'         # variável de classe compartilhada por todas as instâncias

         def __init__(self, nome):
             self.nome = nome    # variável de instância única para cada instância

     >>> d = Cachorro('Fido')
     >>> e = Cachorro('Buddy')
     >>> d.tipo                  # compartilhada por todos os cachorros
     'canino'
     >>> e.tipo                  # compartilhada por todos os cachorros
     'canino'
     >>> d.nome                  # exclusiva do d
     'Fido'
     >>> e.nome                  # exclusiva do e
     'Buddy'

Como vimos em *note Uma palavra sobre nomes e objetos: 1e2b, dados
compartilhados podem causar efeitos inesperados quando envolvem objetos
(*note mutáveis: 1d7e.), como listas ou dicionários.  Por exemplo, a
lista 'tricks' do código abaixo não deve ser usada como variável de
classe, pois assim seria compartilhada por todas as instâncias de
'Cachorro':

     class Cachorro:

         truques = []             # uso incorreto de uma variável de classe

         def __init__(self, nome):
             self.nome = nome

         def adicionar_truque(self, truque):
             self.truques.append(truque)

     >>> d = Cachorro('Fido')
     >>> e = Cachorro('Buddy')
     >>> d.adicionar_truque('rolar')
     >>> e.adicionar_truque('fingir de morto')
     >>> d.truques                # inesperadamente compartilhado por todos os cães
     ['rolar', 'fingir de morto']

Em vez disso, o modelo correto da classe deve usar uma variável de
instância:

     class Cachorro:

         def __init__(self, nome):
             self.nome = nome
             self.truques = []    # cria uma nova lista vazia para cada cachorro

         def adicionar_truque(self, truque):
             self.truques.append(truque)

     >>> d = Cachorro('Fido')
     >>> e = Cachorro('Buddy')
     >>> d.adicionar_truque('rolar')
     >>> e.adicionar_truque('fingir de morto')
     >>> d.truques
     ['rolar']
     >>> e.truques
     ['fingir de morto']


File: python.info,  Node: Observações aleatórias,  Next: Herança,  Prev: Uma primeira olhada nas classes,  Up: Classes

2.9.4 Observações aleatórias
----------------------------

Se um mesmo nome de atributo ocorre tanto na instância quanto na classe,
a busca pelo atributo prioriza a instância:

     >>> class Armazém:
     ...    propósito = 'armazenar'
     ...    região = 'oeste'
     ...
     >>> a1 = Armazém()
     >>> print(a1.propósito, a1.região)
     armazenar oeste
     >>> a2 = Armazém()
     >>> a2.região = 'leste'
     >>> print(a2.propósito, a2.região)
     armazenar leste

Atributos de dados podem ser referenciados por métodos da própria
instância, bem como por qualquer outro usuário do objeto (também
chamados “clientes” do objeto).  Em outras palavras, classes não servem
para implementar tipos puramente abstratos de dados.  De fato, nada em
Python torna possível assegurar o encapsulamento de dados — tudo é
baseado em convenção.  (Por outro lado, a implementação de Python,
escrita em C, pode esconder completamente detalhes de um objeto e
controlar o acesso ao objeto, se necessário; isto pode ser utilizado por
extensões de Python escritas em C.)

Clientes devem utilizar atributos de dados com cuidado, pois podem
bagunçar invariantes assumidas pelos métodos ao esbarrar em seus
atributos de dados.  Note que clientes podem adicionar atributos de
dados a suas próprias instâncias, sem afetar a validade dos métodos,
desde que seja evitado o conflito de nomes.  Novamente, uma convenção de
nomenclatura poupa muita dor de cabeça.

Não existe atalho para referenciar atributos de dados (ou outros
métodos!)  de dentro de um método.  Isso aumenta a legibilidade dos
métodos: não há como confundir variáveis locais com variáveis da
instância quando lemos rapidamente um método.

Frequentemente, o primeiro argumento de um método é chamado ‘self’.
Isso não passa de uma convenção: o identificador ‘self’ não é uma
palavra reservada nem possui qualquer significado especial em Python.
Mas note que, ao seguir essa convenção, seu código se torna legível por
uma grande comunidade de desenvolvedores Python e é possível que alguma
'IDE' dependa dessa convenção para analisar seu código.

Qualquer objeto função que é atributo de uma classe, define um método
para as instâncias dessa classe.  Não é necessário que a definição da
função esteja textualmente embutida na definição da classe.  Atribuir um
objeto função a uma variável local da classe é válido.  Por exemplo:

     # Função definida fora da classe
     def f1(self, x, y):
         return min(x, x+y)

     class C:
         f = f1

         def g(self):
             return 'olá mundo'

         h = g

Agora ‘f’, ‘g’ e ‘h’ são todos atributos da classe ‘C’ que referenciam
funções, e consequentemente são todos métodos de instâncias da classe
‘C’, onde ‘h’ é exatamente equivalente a ‘g’.  No entanto, essa prática
serve apenas para confundir o leitor do programa.

Métodos podem invocar outros métodos usando atributos de método do
argumento ‘self’:

     class Bolsa:
         def __init__(self):
             self.data = []

         def adicionar(self, x):
             self.data.append(x)

         def adicionar_em_dobro(self, x):
             self.adicionar(x)
             self.adicionar(x)

Métodos podem referenciar nomes globais da mesma forma que funções
comuns.  O escopo global associado a um método é o módulo contendo sua
definição na classe (a classe propriamente dita nunca é usada como
escopo global!).  Ainda que seja raro justificar o uso de dados globais
em um método, há diversos usos legítimos do escopo global.  Por exemplo,
funções e módulos importados no escopo global podem ser usados por
métodos, bem como as funções e classes definidas no próprio escopo
global.  Provavelmente, a classe contendo o método em questão também foi
definida neste escopo global.  Na próxima seção veremos razões pelas
quais um método pode querer referenciar sua própria classe.

Cada valor é um objeto e, portanto, tem uma 'classe' (também chamada de
'tipo').  Ela é armazenada como ‘object.__class__’.


File: python.info,  Node: Herança,  Next: Variáveis privadas,  Prev: Observações aleatórias,  Up: Classes

2.9.5 Herança
-------------

Obviamente, uma característica da linguagem não seria digna do nome
“classe” se não suportasse herança.  A sintaxe para uma classe derivada
é assim:

     class NomeClasseDerivada(NomeClasseBase):
         <instrução-1>
         .
         .
         .
         <instrução-N>

O identificador ‘BaseClassName’ deve estar definido em um espaço de
nomes acessível do escopo que contém a definição da classe derivada.  No
lugar do nome da classe base, também são aceitas outras expressões.
Isso é muito útil, por exemplo, quando a classe base é definida em outro
módulo:

     class NomeClasseDerivada(nomemódulo.NomeClasseBase):

A execução de uma definição de classe derivada procede da mesma forma
que a de uma classe base.  Quando o objeto classe é construído, a classe
base é lembrada.  Isso é utilizado para resolver referências a
atributos.  Se um atributo requisitado não for encontrado na classe, ele
é procurado na classe base.  Essa regra é aplicada recursivamente se a
classe base por sua vez for derivada de outra.

Não há nada de especial sobre instanciação de classes derivadas:
‘NomeClasseDerivada()’ cria uma nova instância da classe.  Referências a
métodos são resolvidas da seguinte forma: o atributo correspondente é
procurado através da cadeia de classes base, e referências a métodos são
válidas se essa procura produzir um objeto função.

Classes derivadas podem sobrescrever métodos das suas classes base.  Uma
vez que métodos não possuem privilégios especiais quando invocam outros
métodos no mesmo objeto, um método na classe base que invoca um outro
método da mesma classe base pode, efetivamente, acabar invocando um
método sobreposto por uma classe derivada.  (Para programadores C++ isso
significa que todos os métodos em Python são realmente ‘virtuais’.)

Um método sobrescrito em uma classe derivada, de fato, pode querer
estender, em vez de simplesmente substituir, o método da classe base, de
mesmo nome.  Existe uma maneira simples de chamar diretamente o método
da classe base: apenas chame ‘BaseClassName.methodname(self,
arguments)’.  Isso é geralmente útil para os clientes também.  (Note que
isto só funciona se a classe base estiver acessível como ‘BaseClassName’
no escopo global).

Python tem duas funções embutidas que trabalham com herança:

   * Use *note isinstance(): 442. para verificar o tipo de uma
     instância: ‘isinstance(obj, int)’ será ‘True’ somente se
     ‘obj.__class__’ é a classe *note int: 257. ou alguma classe
     derivada de *note int: 257.

   * Use *note issubclass(): 7c2. para verificar herança entre classes:
     ‘issubclass(bool, int)’ é ‘True’ porque *note bool: 468. é uma
     subclasse de *note int: 257.  Porém, ‘issubclass(float, int)’ é
     ‘False’ porque *note float: 2f7. não é uma subclasse de *note int:
     257.

* Menu:

* Herança múltipla::


File: python.info,  Node: Herança múltipla,  Up: Herança

2.9.5.1 Herança múltipla
........................

Python também suporta uma forma de herança múltipla.  Uma definição de
classe com várias classes bases tem esta forma:

     class NomeClasseDerivada(Base1, Base2, Base3):
         <instrução-1>
         .
         .
         .
         <instrução-N>

Para a maioria dos casos mais simples, pense na pesquisa de atributos
herdados de uma classe pai como o primeiro nível de profundidade, da
esquerda para a direita, não pesquisando duas vezes na mesma classe em
que há uma sobreposição na hierarquia.  Assim, se um atributo não é
encontrado em ‘DerivedClassName’, é procurado em ‘Base1’, depois,
recursivamente, nas classes base de ‘Base1’, e se não for encontrado lá,
é pesquisado em ‘Base2’ e assim por diante.

De fato, é um pouco mais complexo que isso; a ordem de resolução de
métodos muda dinamicamente para suportar chamadas cooperativas para
*note super(): 4db.  Essa abordagem é conhecida em outras linguagens de
herança múltipla como chamar-o-próximo-método, e é mais poderosa que a
chamada à função super, encontrada em linguagens de herança única.

A ordenação dinâmica é necessária porque todos os casos de herança
múltipla exibem um ou mais relacionamentos de diamante (em que pelo
menos uma das classes bases pode ser acessada por meio de vários
caminhos da classe mais inferior).  Por exemplo, todas as classes herdam
de *note object: a96, portanto, qualquer caso de herança múltipla
fornece mais de um caminho para alcançar *note object: a96.  Para evitar
que as classes base sejam acessadas mais de uma vez, o algoritmo
dinâmico lineariza a ordem de pesquisa, de forma a preservar a ordenação
da esquerda para a direita, especificada em cada classe, que chama cada
pai apenas uma vez, e que é monotônica (significando que uma classe pode
ser subclassificada sem afetar a ordem de precedência de seus pais).
Juntas, essas propriedades tornam possível projetar classes confiáveis e
extensíveis com herança múltipla.  Para mais detalhes, veja *note A
Ordem de Resolução de Métodos do Python 2.3: 14f2.


File: python.info,  Node: Variáveis privadas,  Next: Curiosidades e conclusões,  Prev: Herança,  Up: Classes

2.9.6 Variáveis privadas
------------------------

Variáveis de instância “privadas”, que não podem ser acessadas, exceto
em métodos do próprio objeto, não existem em Python.  No entanto, existe
uma convenção que é seguida pela maioria dos programas em Python: um
nome prefixado com um sublinhado (por exemplo: ‘_spam’ ) deve ser
tratado como uma parte não-pública da API (seja uma função, um método ou
um atributo de dados).  Tais nomes devem ser considerados um detalhe de
implementação e sujeito a alteração sem aviso prévio.

Uma vez que existe um caso de uso válido para a definição de atributos
privados em classes (especificamente para evitar conflitos com nomes
definidos em subclasses), existe um suporte limitado a identificadores
privados em classes, chamado 'desfiguração de nomes'.  Qualquer
identificador no formato ‘__spam’ (pelo menos dois sublinhados no
início, e no máximo um sublinhado no final) é textualmente substituído
por ‘_classname__spam’, onde ‘classname’ é o nome da classe atual com
sublinhado(s) iniciais omitidos.  Essa desfiguração independe da posição
sintática do identificador, desde que ele apareça dentro da definição de
uma classe.

Ver também
..........

O *note especificações de desfiguração de nome privado: 1e43. para
detalhes e casos especiais.

A desfiguração de nomes é útil para que subclasses possam sobrescrever
métodos sem quebrar invocações de métodos dentro de outra classe.  Por
exemplo:

     class Mapeamento:
         def __init__(self, iterável):
             self.lista_itens = []
             self.__atualizar(iterável)

         def atualizar(self, iterável):
             for item in iterável:
                 self.lista_itens.append(item)

         __atualizar = atualizar   # cópia privada do método atualizar() original

     class SubclasseMapeamento(Mapeamento):

         def update(self, chaves, valores):
             # fornece nova assinatura para atualizar(),
             # mas não quebra __init__()
             for item in zip(chaves, valores):
                 self.lista_itens.append(item)

O exemplo acima deve funcionar mesmo se ‘SubclasseMapeamento’
introduzisse um identificador ‘__atualizar’ uma vez que é substituído
por ‘_Mapeamento__atualizar’ na classe ‘Mapeamento’ e
‘_SubclasseMapeamento__atualizar’ na classe ‘SubclasseMapeamento’,
respectivamente.

Note que as regras de desfiguração de nomes foram projetadas para evitar
acidentes; ainda é possível acessar ou modificar uma variável que é
considerada privada.  Isso pode ser útil em certas circunstâncias
especiais, como depuração de código.

Código passado para ‘exec()’ ou ‘eval()’ não considera o nome da classe
que invocou como sendo a classe corrente; isso é semelhante ao
funcionamento da instrução ‘global’, cujo efeito se aplica somente ao
código que é compilado junto.  A mesma restrição se aplica às funções
‘getattr()’, ‘setattr()’ e ‘delattr()’, e quando acessamos diretamente o
‘__dict__’ da classe.


File: python.info,  Node: Curiosidades e conclusões,  Next: Iteradores,  Prev: Variáveis privadas,  Up: Classes

2.9.7 Curiosidades e conclusões
-------------------------------

Às vezes, é útil ter um tipo semelhante ao “record” de Pascal ou ao
“struct” de C, para agrupar alguns itens de dados.  A maneira pythônica
para este fim é usar *note dataclasses: 2f.:

     from dataclasses import dataclass

     @dataclass
     class Empregado:
         nome: str
         dept: str
         salário: int

     >>> joão = Empregado('joão', 'lab de computadores', 1000)
     >>> joão.dept
     'lab de computadores'
     >>> joão.salário
     1000

Um trecho de código Python que espera um tipo de dado abstrato em
particular, pode receber, ao invés disso, uma classe que imita os
métodos que aquele tipo suporta.  Por exemplo, se você tem uma função
que formata dados obtidos de um objeto do tipo “arquivo”, pode definir
uma classe com métodos *note read(): 1e0c. e *note readline(): 1e46. que
obtém os dados de um “buffer de caracteres” e passar como argumento.

*note Métodos de instância: 1e47. têm atributos também: *note
m.__self__: 140f. é o objeto instância com o método ‘m()’, e *note
m.__func__: 1340. é o *note objeto função: 299. correspondente ao
método.


File: python.info,  Node: Iteradores,  Next: Geradores,  Prev: Curiosidades e conclusões,  Up: Classes

2.9.8 Iteradores
----------------

Você já deve ter notado que pode usar laços *note for: 2f2. com a
maioria das coleções em Python:

     for elemento in [1, 2, 3]:
         print(elemento)
     for elemento in (1, 2, 3):
         print(elemento)
     for chave in {'um':1, 'dois':2}:
         print(chave)
     for char in "123":
         print(char)
     for linha in open("meuarquivo.txt"):
         print(linha, end='')

Esse estilo de acesso é claro, conciso e conveniente.  O uso de
iteradores permeia e unifica o Python.  Nos bastidores, a instrução
*note for: 2f2. chama *note iter(): 7d8. no objeto contêiner.  A função
retorna um objeto iterador que define o método *note __next__(): 1310.
que acessa elementos no contêiner, um de cada vez.  Quando não há mais
elementos, *note __next__(): 1310. levanta uma exceção *note
StopIteration: c15. que informa ao ‘for’ para terminar.  Você pode
chamar o método *note __next__(): 1310. usando a função embutida *note
next(): 7d9.; este exemplo mostra como tudo funciona:

     >>> s = 'abc'
     >>> it = iter(s)
     >>> it
     <str_iterator object at 0x10c90e650>
     >>> next(it)
     'a'
     >>> next(it)
     'b'
     >>> next(it)
     'c'
     >>> next(it)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
         next(it)
     StopIteration

Observando o mecanismo por trás do protocolo dos iteradores, fica fácil
adicionar esse comportamento às suas classes.  Defina um método *note
__iter__(): 1e4a. que retorna um objeto que tenha um método *note
__next__(): 1310.  Se uma classe já define ‘__next__()’, então
‘__iter__()’ pode simplesmente retornar ‘self’:

     class Inverter:
         """Iterador para fazer um laço em uma sequência de trás para frente."""
         def __init__(self, dados):
             self.dados = dados
             self.índice = len(dados)

         def __iter__(self):
             return self

         def __next__(self):
             if self.índice == 0:
                 raise StopIteration
             self.índice = self.índice - 1
             return self.dados[self.índice]

     >>> rev = Interverter('spam')
     >>> iter(rev)
     <__main__.Interverter object at 0x00A1DB50>
     >>> for char in rev:
     ...     print(char)
     ...
     m
     a
     p
     s


File: python.info,  Node: Geradores,  Next: Expressões geradoras,  Prev: Iteradores,  Up: Classes

2.9.9 Geradores
---------------

*note Geradores: 109a. são uma ferramenta simples e poderosa para criar
iteradores.  São escritos como funções normais mas usam a instrução
*note yield: 9d5. quando precisam retornar dados.  Cada vez que *note
next(): 7d9. é chamado, o gerador volta ao ponto onde parou (lembrando
todos os valores de dados e qual instrução foi executada pela última
vez).  Um exemplo mostra como geradores podem ser trivialmente fáceis de
criar:

     def inverter(dados):
         for índice in range(len(dados)-1, -1, -1):
             yield dados[índice]

     >>> for char in inverter('golf'):
     ...     print(char)
     ...
     f
     l
     o
     g

Qualquer coisa que possa ser feita com geradores também pode ser feita
com iteradores baseados numa classe, como descrito na seção anterior.  O
que torna geradores tão compactos é que os métodos *note __iter__():
1e4d. e *note __next__(): 1e4e. são criados automaticamente.

Outro ponto chave é que as variáveis locais e o estado da execução são
preservados automaticamente entre as chamadas.  Isto torna a função mais
fácil de escrever e muito mais clara do que uma implementação usando
variáveis de instância como ‘self.index’ e ‘self.data’.

Além disso, quando geradores terminam, eles levantam *note
StopIteration: c15. automaticamente.  Combinados, todos estes aspectos
tornam a criação de iteradores tão fácil quanto escrever uma função
normal.


File: python.info,  Node: Expressões geradoras,  Prev: Geradores,  Up: Classes

2.9.10 Expressões geradoras
---------------------------

Alguns geradores simples podem ser codificados, de forma sucinta, como
expressões, usando uma sintaxe semelhante a compreensões de lista, mas
com parênteses em vez de colchetes.  Essas expressões são projetadas
para situações em que o gerador é usado imediatamente, pela função que o
engloba.  As expressões geradoras são mais compactas, mas menos
versáteis do que as definições completas do gerador, e tendem a usar
menos memória do que as compreensões de lista equivalentes.

Exemplos:

     >>> sum(i*i for i in range(10))                 # soma dos quadrados
     285

     >>> xvec = [10, 20, 30]
     >>> yvec = [7, 5, 3]
     >>> sum(x*y for x,y in zip(xvec, yvec))         # produto escalar
     260

     >>> palavras_únicas = set(palavra for linha página for palavra in linha.split())

     >>> orador_da_turma = max((estudante.gpa, estudante.nome) for estudante in graduados)

     >>> dados = 'golf'
     >>> list(dados[i] for i in range(len(dados)-1, -1, -1))
     ['f', 'l', 'o', 'g']


File: python.info,  Node: Um breve passeio pela biblioteca padrão,  Next: Um breve passeio pela biblioteca padrão — parte II,  Prev: Classes,  Up: O tutorial do Python

2.10 Um breve passeio pela biblioteca padrão
============================================

* Menu:

* Interface com o sistema operacional::
* Caracteres curinga::
* Argumentos de linha de comando::
* Redirecionamento de erros e encerramento do programa::
* Reconhecimento de padrões em strings::
* Matemática::
* Acesso à internet::
* Data e hora::
* Compressão de dados::
* Medição de desempenho::
* Controle de qualidade::
* Baterias incluídas::


File: python.info,  Node: Interface com o sistema operacional,  Next: Caracteres curinga,  Up: Um breve passeio pela biblioteca padrão

2.10.1 Interface com o sistema operacional
------------------------------------------

O módulo *note os: a1. fornece dúzias de funções para interagir com o
sistema operacional:

     >>> import os
     >>> os.getcwd()      # Retorna o diretório de trabalho atual
     'C:\\Python313'
     >>> os.chdir('/server/accesslogs')   # Altera o diretório de trabalho atual
     >>> os.system('mkdir hoje')   # Executa o comando mkdir no shell do sistema
     0

Certifique-se de usar a forma ‘import os’ ao invés de ‘from os import
*’.  Isso evitará que *note os.open(): dba. oculte a função *note
open(): 51c. que opera de forma muito diferente.

As funções embutidas *note dir(): 632. e *note help(): 8dd. são úteis
como um sistema de ajuda interativa para lidar com módulos grandes como
*note os: a1.:

     >>> import os
     >>> dir(os)
     <retorna uma lista de todas as funções do módulo>
     >>> help(os)
     <retorna uma página de manual extensa criada a partir das docstrings do módulo>

Para tarefas de gerenciamento cotidiano de arquivos e diretórios, o
módulo *note shutil: c5. fornece uma interface de alto nível que é mais
simples de usar:

     >>> import shutil
     >>> shutil.copyfile('dados.db', 'arquivo.db')
     'arquivo.db'
     >>> shutil.move('/build/executáveis', 'dir_instal')
     'dir_instal'


File: python.info,  Node: Caracteres curinga,  Next: Argumentos de linha de comando,  Prev: Interface com o sistema operacional,  Up: Um breve passeio pela biblioteca padrão

2.10.2 Caracteres curinga
-------------------------

O módulo *note glob: 64. fornece uma função para criar listas de
arquivos a partir de buscas em diretórios usando caracteres curinga:

     >>> import glob
     >>> glob.glob('*.py')
     ['primos.py', 'aleatorizar.py', 'aspas.py']


File: python.info,  Node: Argumentos de linha de comando,  Next: Redirecionamento de erros e encerramento do programa,  Prev: Caracteres curinga,  Up: Um breve passeio pela biblioteca padrão

2.10.3 Argumentos de linha de comando
-------------------------------------

Scripts geralmente precisam processar argumentos passados na linha de
comando.  Esses argumentos são armazenados como uma lista no atributo
'argv' do módulo *note sys: d9.  Por exemplo, consideremos o arquivo
‘demo.py’ a seguir:

     # Arquivo demo.py
     import sys
     print(sys.argv)

Aqui está a saída da execução ‘python demo.py um dois três’ na linha de
comando:

     ['demo.py', 'um', 'dois, 'três']

O módulo *note argparse: 6. fornece um mecanismo mais sofisticado para
processar argumentos de linha de comando.  O script seguinte extrai e
exibe um ou mais nomes de arquivos e um número de linhas opcional:

     import argparse

     parser = argparse.ArgumentParser(
         prog='topo',
         description='Mostra as primeiras linhas de cada arquivo')
     parser.add_argument('arquivos, nargs='+')
     parser.add_argument('-l', '--linhas', type=int, default=10)
     args = parser.parse_args()
     print(args)

Quando executada na linha de comando ‘python topo.py --linhas=5 alfa.txt
beta.txt’, o script define ‘args.linhas’ para ‘5’ e ‘args.arquivos’ para
‘['alfa.txt', 'beta.txt']’.


File: python.info,  Node: Redirecionamento de erros e encerramento do programa,  Next: Reconhecimento de padrões em strings,  Prev: Argumentos de linha de comando,  Up: Um breve passeio pela biblioteca padrão

2.10.4 Redirecionamento de erros e encerramento do programa
-----------------------------------------------------------

O módulo *note sys: d9. também possui atributos para 'stdin', 'stdout' e
'stderr'.  O último é usado para emitir avisos e mensagens de erros
visíveis mesmo quando 'stdout' foi redirecionado:

     >>> sys.stderr.write('Aviso, arquivo log não encontrado, iniciando um novo\n')
     Aviso, arquivo log não encontrado, iniciando um novo

A forma mais direta de encerrar um script é usando ‘sys.exit()’.


File: python.info,  Node: Reconhecimento de padrões em strings,  Next: Matemática,  Prev: Redirecionamento de erros e encerramento do programa,  Up: Um breve passeio pela biblioteca padrão

2.10.5 Reconhecimento de padrões em strings
-------------------------------------------

O módulo *note re: b9. fornece ferramentas para lidar com processamento
de strings através de expressões regulares.  Para reconhecimento de
padrões complexos, expressões regulares oferecem uma solução sucinta e
eficiente:

     >>> import re
     >>> re.findall(r'\br[a-z]*', 'o rato roeu a roupa do rei de roma')
     ['rato', 'roeu', 'roupa', 'rei', 'roma']
     >>> re.sub(r'(\b[a-z]+) \1', r'\1', 'o gato de de chapéu')
     'o gato de chapéu'

Quando as exigências são simples, métodos de strings são preferíveis por
serem mais fáceis de ler e depurar:

     >>> 'xá para dois'.replace('xá', 'chá')
     'chá para dois'


File: python.info,  Node: Matemática,  Next: Acesso à internet,  Prev: Reconhecimento de padrões em strings,  Up: Um breve passeio pela biblioteca padrão

2.10.6 Matemática
-----------------

O módulo *note math: 8e. oferece acesso às funções da biblioteca C para
matemática de ponto flutuante:

     >>> import math
     >>> math.cos(math.pi / 4)
     0.70710678118654757
     >>> math.log(1024, 2)
     10.0

O módulo *note random: b8. fornece ferramentas para gerar seleções
aleatórias:

     >>> import random
     >>> random.choice(['maçã', 'pera', 'banana'])
     'maçã'
     >>> random.sample(range(100), 10)   # amostragem sem reposição
     [30, 83, 16, 4, 8, 81, 41, 50, 18, 33]
     >>> random.random()    # ponto flutuante aleatório do intervalo [0.0, 1.0)
     0.17970987693706186
     >>> random.randrange(6)    # inteiro aleatório escolhido de range(6)
     4

O módulo *note statistics: d2. calcula as propriedades estatísticas
básicas (a média, a mediana, a variação, etc.)  de dados numéricos:

     >>> import statistics
     >>> dados = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]
     >>> statistics.mean(dados)
     1.6071428571428572
     >>> statistics.median(dados)
     1.25
     >>> statistics.variance(dados)
     1.3720238095238095

O projeto SciPy <‘https://scipy.org’> tem muitos outros módulos para
cálculos numéricos.


File: python.info,  Node: Acesso à internet,  Next: Data e hora,  Prev: Matemática,  Up: Um breve passeio pela biblioteca padrão

2.10.7 Acesso à internet
------------------------

Há diversos módulos para acesso e processamento de protocolos da
internet.  Dois dos mais simples são *note urllib.request: 10b. para
efetuar download de dados a partir de URLs e *note smtplib: ca. para
enviar mensagens de correio eletrônico:

     >>> from urllib.request import urlopen
     >>> with urlopen('https://docs.python.org/3/') as response:
     ...     for line in response:
     ...         line = line.decode()             # Converte bytes para um str
     ...         if 'updated' in line:
     ...             print(line.rstrip())         # Remove nova linha ao final
     ...
           Last updated on Nov 11, 2025 (20:11 UTC).

     >>> import smtplib
     >>> server = smtplib.SMTP('localhost')
     >>> server.sendmail('soothsayer@example.org', 'jcaesar@example.org',
     ... """To: jcaesar@example.org
     ... From: soothsayer@example.org
     ...
     ... Cuidado com os Idos de Março.
     ... """)
     >>> server.quit()

(Note que o segundo exemplo precisa de um servidor de email rodando em
localhost.)


File: python.info,  Node: Data e hora,  Next: Compressão de dados,  Prev: Acesso à internet,  Up: Um breve passeio pela biblioteca padrão

2.10.8 Data e hora
------------------

O módulo *note datetime: 30. fornece classes para manipulação de datas e
horas nas mais variadas formas.  Apesar da disponibilidade de aritmética
com data e hora, o foco da implementação é na extração eficiente dos
membros para formatação e manipulação.  O módulo também oferece objetos
que levam os fusos horários em consideração.

     >>> # datas são facilmente construídas e formatadas
     >>> from datetime import date
     >>> now = date.today()
     >>> now
     datetime.date(2003, 12, 2)
     >>> now.strftime("%m-%d-%y. %d %b %Y is a %A on the %d day of %B.")
     '12-02-03. 02 Dec 2003 is a Tuesday on the 02 day of December.'

     >>> # datas têm suporte a matemática de calendário
     >>> birthday = date(1964, 7, 31)
     >>> age = now - birthday
     >>> age.days
     14368


File: python.info,  Node: Compressão de dados,  Next: Medição de desempenho,  Prev: Data e hora,  Up: Um breve passeio pela biblioteca padrão

2.10.9 Compressão de dados
--------------------------

Formatos comuns de arquivamento e compressão de dados estão disponíveis
diretamente através de alguns módulos, entre eles: *note zlib: 133,
*note gzip: 67, *note bz2: 13, *note lzma: 8a, *note zipfile: 131. and
*note tarfile: de.

     >>> import zlib
     >>> s = b'A vaca malhada foi molhada por outra vaca molhada e malhada.'
     >>> len(s)
     60
     >>> t = zlib.compress(s)
     >>> len(t)
     47
     >>> zlib.decompress(t)
     b'A vaca malhada foi molhada por outra vaca molhada e malhada.'
     >>> zlib.crc32(s)
     2444551089


File: python.info,  Node: Medição de desempenho,  Next: Controle de qualidade,  Prev: Compressão de dados,  Up: Um breve passeio pela biblioteca padrão

2.10.10 Medição de desempenho
-----------------------------

Alguns usuários de Python desenvolvem um interesse profundo pelo
desempenho relativo de diferentes abordagens para o mesmo problema.
Python oferece uma ferramenta de medição que esclarece essas dúvidas
rapidamente.

Por exemplo, pode ser tentador usar o empacotamento e desempacotamento
de tuplas ao invés da abordagem tradicional de permutar os argumentos.
O módulo *note timeit: ef. rapidamente mostra uma modesta vantagem de
desempenho:

     >>> from timeit import Timer
     >>> Timer('t=a; a=b; b=t', 'a=1; b=2').timeit()
     0.57535828626024577
     >>> Timer('a,b = b,a', 'a=1; b=2').timeit()
     0.54962537085770791

Em contraste com a granularidade fina do módulo *note timeit: ef, os
módulos *note profile: af. e *note pstats: b0. oferecem ferramentas para
identificar os trechos mais críticos em grandes blocos de código.


File: python.info,  Node: Controle de qualidade,  Next: Baterias incluídas,  Prev: Medição de desempenho,  Up: Um breve passeio pela biblioteca padrão

2.10.11 Controle de qualidade
-----------------------------

Uma das abordagens usadas no desenvolvimento de software de alta
qualidade é escrever testes para cada função à medida que é desenvolvida
e executar esses testes frequentemente durante o processo de
desenvolvimento.

O módulo *note doctest: 3a. oferece uma ferramenta para realizar um
trabalho de varredura e validação de testes escritos nas strings de
documentação (docstrings) de um programa.  A construção dos testes é tão
simples quanto copiar uma chamada típica juntamente com seus resultados
e colá-los na docstring.  Isto aprimora a documentação, fornecendo ao
usuário um exemplo real, e permite que o módulo doctest verifique se o
código continua fiel à documentação:

     def average(values):
         """Calcula a média aritmética da lista de números.

         >>> print(average([20, 30, 70]))
         40.0
         """
         return sum(values) / len(values)

     import doctest
     doctest.testmod()   # valida automaticamente os testes incorporados

O módulo *note unittest: 106. não é tão simples de usar quanto o módulo
*note doctest: 3a, mas permite que um conjunto muito maior de testes
seja mantido em um arquivo separado:

     import unittest

     class TestStatisticalFunctions(unittest.TestCase):

         def test_average(self):
             self.assertEqual(average([20, 30, 70]), 40.0)
             self.assertEqual(round(average([1, 5, 7]), 1), 4.3)
             with self.assertRaises(ZeroDivisionError):
                 average([])
             with self.assertRaises(TypeError):
                 average(20, 30, 70)

     unittest.main()  # Chamar a partir da linha de comando invoca todos os testes


File: python.info,  Node: Baterias incluídas,  Prev: Controle de qualidade,  Up: Um breve passeio pela biblioteca padrão

2.10.12 Baterias incluídas
--------------------------

Python tem uma filosofia de “baterias incluídas”.  Isso fica mais
evidente através da sofisticação e robustez dos seus maiores pacotes.
Por exemplo:

   * Os módulos *note xmlrpc.client: 12e. e *note xmlrpc.server: 12f.
     tornam a implementação de chamadas remotas (remote procedure calls)
     em uma tarefa quase trivial.  Apesar dos nomes dos módulos, nenhum
     conhecimento direto ou manipulação de XML é necessário.

   * O pacote *note email: 3b. é uma biblioteca para gerenciamento de
     mensagens de correio eletrônico, incluindo MIME e outros baseados
     no RFC 5322(1).  Diferente dos módulos *note smtplib: ca. e *note
     poplib: ac. que apenas enviam e recebem mensagens, o pacote de
     email tem um conjunto completo de ferramentas para construir ou
     decodificar a estrutura de mensagens complexas (incluindo anexos) e
     para implementação de protocolos de codificação e cabeçalhos.

   * O pacote *note json: 82. oferece um suporte robusto para analisar
     este popular formato para troca de dados.  O módulo *note csv: 29.
     oferece suporte para leitura e escrita direta em arquivos no
     formato Comma-Separated Value, comumente suportado por bancos de
     dados e planilhas.  O processamento XML é fornecido pelos pacotes
     *note xml.etree.ElementTree: 125, *note xml.dom: 121. e *note
     xml.sax: 129.  Juntos, esses módulos e pacotes simplificam muito a
     troca de informações entre aplicativos Python e outras ferramentas.

   * O módulo *note sqlite3: cf. é um wrapper para a biblioteca de banco
     de dados SQLite, fornecendo um banco de dados persistente que pode
     ser atualizado e acessado usando sintaxe SQL ligeiramente fora do
     padrão.

   * Internacionalização está disponível através de diversos módulos,
     como *note gettext: 63, *note locale: 86, e o pacote *note codecs:
     1b.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc5322.html


File: python.info,  Node: Um breve passeio pela biblioteca padrão — parte II,  Next: Ambientes virtuais e pacotes,  Prev: Um breve passeio pela biblioteca padrão,  Up: O tutorial do Python

2.11 Um breve passeio pela biblioteca padrão — parte II
=======================================================

Este segundo passeio apresenta alguns módulos avançados que atendem
necessidades de programação profissional.  Estes módulos raramente
aparecem em scripts pequenos.

* Menu:

* Formatando a saída::
* Usando templates::
* Trabalhando com formatos binários de dados::
* Multi-threading: Multi-threading<2>.
* Gerando logs::
* Referências fracas::
* Ferramentas para trabalhar com listas::
* Aritmética decimal com ponto flutuante::


File: python.info,  Node: Formatando a saída,  Next: Usando templates,  Up: Um breve passeio pela biblioteca padrão — parte II

2.11.1 Formatando a saída
-------------------------

O módulo *note reprlib: bb. fornece uma versão de *note repr(): 800.
personalizado para exibições abreviadas de contêineres grandes ou
profundamente aninhados:

     >>> import reprlib
     >>> reprlib.repr(set('supercalifragilisticexpialidoce'))
     "{'a', 'c', 'd', 'e', 'f', 'g', ...}"

O módulo *note pprint: ae. oferece um controle mais sofisticado na
exibição tanto de objetos embutidos quanto aqueles criados pelo usuário
de maneira que fique legível para o interpretador.  Quando o resultado é
maior que uma linha, o “pretty printer” acrescenta quebras de linha e
indentação para revelar as estruturas de maneira mais clara:

     >>> import pprint
     >>> t = [[[['preto', 'ciano'], 'branco', ['verde', 'vermelho']], [['magenta',
     ...     'amarelo'], 'azul']]]
     >>>
     >>> pprint.pprint(t, width=30)
     [[[['preto', 'ciano'],
        'branco',
        ['verde', 'vermelho']],
       [['magenta', 'amarelo'],
        'azul']]]

O módulo *note textwrap: ec. formata parágrafos de texto para que caibam
em uma dada largura de tela:

     >>> import textwrap
     >>> doc = """O método wrap() é como fill(), exceto que ele retorna
     ... uma lista de strings em vez de uma string grande com quebras
     ... de linha para separar as linhas quebradas."""
     ...
     >>> print(textwrap.fill(doc, width=40))
     O método wrap() é como fill(), exceto
     que ele retorna uma lista de strings em
     vez de uma string grande com quebras de
     linha para separar as linhas quebradas.

O módulo *note locale: 86. acessa uma base de dados de formatos
específicos a determinada cultura.  O atributo de agrupamento da função
“format” oferece uma forma direta de formatar números com separadores de
grupo:

     >>> import locale
     >>> locale.setlocale(locale.LC_ALL, 'English_United States.1252')
     'English_United States.1252'
     >>> conv = locale.localeconv()          # obtém mapeamento de convenções
     >>> x = 1234567.8
     >>> locale.format_string("%d", x, grouping=True)
     '1,234,567'
     >>> locale.format_string("%s%.*f", (conv['currency_symbol'],
     ...                      conv['frac_digits'], x), grouping=True)
     '$1,234,567.80'


File: python.info,  Node: Usando templates,  Next: Trabalhando com formatos binários de dados,  Prev: Formatando a saída,  Up: Um breve passeio pela biblioteca padrão — parte II

2.11.2 Usando templates
-----------------------

módulo *note string: d3. inclui a versátil classe ‘Template’ com uma
sintaxe simplificada, adequada para ser editada por usuários finais.
Isso permite que usuários personalizem suas aplicações sem a necessidade
de alterar a aplicação.

Em um template são colocadas marcações indicando o local onde o texto
variável deve ser inserido.  Uma marcação é formada por ‘$’ seguido de
um identificador Python válido (caracteres alfanuméricos e underscores).
Envolvendo-se o identificador da marcação entre chaves, permite que ele
seja seguido por mais caracteres alfanuméricos sem a necessidade de
espaços.  Escrevendo-se ‘$$’ cria-se um único ‘$’:

     >>> from string import Template
     >>> t = Template('O povo de ${vila} envia $$10 para $causa.')
     >>> t.substitute(vila='Nottingham', causa='o fundo de recuperação')
     'O povo de Nottingham envia $10 para o fundo de recuperação.'

O método ‘substitute()’ levanta uma exceção *note KeyError: 344. quando
o identificador de uma marcação não é fornecido em um dicionário ou em
um argumento nomeado ('keyword argument').  Para aplicações que podem
receber dados incompletos fornecidos pelo usuário, o método
‘safe_substitute()’ pode ser mais apropriado — deixará os marcadores
intactos se os dados estiverem faltando:

     >>> t = Template('Devolva $item para $dono.')
     >>> d = dict(item='a andorinha descarregada')
     >>> t.substitute(d)
     Traceback (most recent call last):
       ...
     KeyError: 'dono'
     >>> t.safe_substitute(d)
     'Devolva a andorinha descarregada para $dono.'

Subclasses de Template podem especificar um delimitador personalizado.
Por exemplo, um utilitário para renomeação em lote de fotos pode usar o
sinal de porcentagem para marcações como a data atual, número sequencial
da imagem ou formato do aquivo:

     >>> import time, os.path
     >>> arquivos_fotos = ['img_1074.jpg', 'img_1076.jpg', 'img_1077.jpg']
     >>> class RenomeiaEmLote(Template):
     ...     delimiter = '%'
     ...
     >>> formato = input('Informe o estilo de renomeação (%d-data %n-sequencia %f-formato):  ')
     Informe o estilo de renomeação (%d-data %n-sequencia %f-formato):  Ashley_%n%f

     >>> t = RenomeiaEmLote(formato)
     >>> data = time.strftime('%d%b%y')
     >>> for i, nome_arquivo in enumerate(arquivos_fotos):
     ...     base, extensão = os.path.splitext(nome_arquivo)
     ...     novo_nome = t.substitute(d=data, n=i, f=extensão)
     ...     print('{0} --> {1}'.format(nome_arquivo, novo_nome))

     img_1074.jpg --> Ashley_0.jpg
     img_1076.jpg --> Ashley_1.jpg
     img_1077.jpg --> Ashley_2.jpg

Outra aplicação para templates é separar a lógica da aplicação dos
detalhes de múltiplos formatos de saída.  Assim é possível usar
templates personalizados para gerar arquivos XML, relatórios em texto
puro e relatórios web em HTML.


File: python.info,  Node: Trabalhando com formatos binários de dados,  Next: Multi-threading<2>,  Prev: Usando templates,  Up: Um breve passeio pela biblioteca padrão — parte II

2.11.3 Trabalhando com formatos binários de dados
-------------------------------------------------

O módulo *note struct: d5. oferece as funções ‘pack()’ e ‘unpack()’ para
trabalhar com registros binários de tamanho variável.  O exemplo a
seguir mostra como iterar através do cabeçalho de informação num aquivo
ZIP sem usar o módulo *note zipfile: 131.  Os códigos de empacotamento
‘"H"’ e ‘"I"’ representam números sem sinal de dois e quatro bytes
respectivamente.  O ‘"<"’ indica que os números têm tamanho padrão e são
little-endian (bytes menos significativos primeiro):

     import struct

     with open('meuarquivo.zip', 'rb') as arq:
         dados = arq.read()

     inicio = 0
     for i in range(3):                      # mostra o cabeçalho dos 3 primeiros arquivos
         inicio += 14
         campos = struct.unpack('<IIIHH', dados[inicio:inicio+16])
         crc32, tamanho_comprimido, tamanho_descomprimido, tamanho_nome_arquivo, tamanho_extra = campos

         inicio += 16
         nome_arquivo = dados[inicio:inicio+tamanho_nome_arquivo]
         inicio += tamanho_nome_arquivo
         extra = dados[inicio:inicio+tamanho_extra]
         print(nome_arquivo, hex(crc32), tamanho_comprimido, tamanho_descomprimido)

         inicio += tamanho_extra + tamanho_comprimido     # pula para o próximo cabeçalho


File: python.info,  Node: Multi-threading<2>,  Next: Gerando logs,  Prev: Trabalhando com formatos binários de dados,  Up: Um breve passeio pela biblioteca padrão — parte II

2.11.4 Multi-threading
----------------------

O uso de threads é uma técnica para desacoplar tarefas que não são
sequencialmente dependentes.  Threads podem ser usadas para melhorar o
tempo de resposta de aplicações que aceitam entradas do usuário enquanto
outras tarefas são executadas em segundo plano.  Um caso relacionado é
executar ações de entrada e saída (I/O) em uma thread paralelamente a
cálculos em outra thread.

O código a seguir mostra como o módulo de alto nível *note threading:
ed. pode executar tarefas em segundo plano enquanto o programa principal
continua a sua execução:

     import threading, zipfile

     class AsyncZip(threading.Thread):
         def __init__(self, arquivo_entrada, arquivo_saida):
             threading.Thread.__init__(self)
             self.arquivo_entrada = arquivo_entrada
             self.arquivo_saida = arquivo_saida

         def run(self):
             arq = zipfile.ZipFile(self.arquivo_saida, 'w', zipfile.ZIP_DEFLATED)
             arq.write(self.)
             arq.close()
             print('Finalizou compactação em background de:', self.arquivo_entrada)

     background = AsyncZip('meusdados.txt', 'meuarquivo.zip')
     background.start()
     print('O programa original continua a executar em primeiro plano.')

     background.join()    # Aguarda a tarefa em background finalizar
     print('Programa principal aguardou até a tarefa em background estar finalizada.')

O principal desafio para as aplicações que usam múltiplas threads é
coordenar as threads que compartilham dados ou outros recursos.  Para
esta finalidade, o módulo threading oferece alguns mecanismos primitivos
de sincronização, como travas, eventos, variáveis de condição e
semáforos.

Ainda que todas essas ferramentas sejam poderosas, pequenos erros de
design podem resultar em problemas difíceis de serem diagnosticados.
Por isso, a abordagem preferida para a coordenação da tarefa é
concentrar todo o acesso a um recurso em um único tópico e, em seguida,
usar o módulo *note queue: b6. para alimentar esse segmento com
solicitações de outros tópicos.  Aplicações que utilizam objetos *note
Queue: 13db. para comunicação e coordenação inter-thread são mais fáceis
de serem projetados, mais legíveis e mais confiáveis.


File: python.info,  Node: Gerando logs,  Next: Referências fracas,  Prev: Multi-threading<2>,  Up: Um breve passeio pela biblioteca padrão — parte II

2.11.5 Gerando logs
-------------------

O módulo *note logging: 87. oferece um completo e flexível sistema de
log.  Da maneira mais simples, mensagens de log são enviadas para um
arquivo ou para ‘sys.stderr’:

     import logging
     logging.debug('Depurando informações')
     logging.info('Mensagem informática')
     logging.warning('Alerta: arquivo de configuração  %s não encontrado', 'server.conf')
     logging.error('Ocorreu um erro')
     logging.critical('Erro crítico -- desligando')

Isso produz a seguinte saída:

     WARNING:root:Alerta:arquivo de configuração server.conf não encontrado
     ERROR:root:Ocorreu um erro
     CRITICAL:root:Erro crítico -- shutting down

Por padrão, mensagens informativas e de depuração são suprimidas e a
saída é enviada para a saída de erros padrão (stderr).  Outras opções de
saída incluem envio de mensagens através de correio eletrônico,
datagramas, sockets ou para um servidor HTTP. Novos filtros podem
selecionar diferentes formas de envio de mensagens, baseadas na
prioridade da mensagem: ‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’ e
‘CRITICAL’.

O sistema de log pode ser configurado diretamente do Python ou pode ser
carregado a partir de um arquivo de configuração editável pelo usuário
para logs personalizados sem a necessidade de alterar a aplicação.


File: python.info,  Node: Referências fracas,  Next: Ferramentas para trabalhar com listas,  Prev: Gerando logs,  Up: Um breve passeio pela biblioteca padrão — parte II

2.11.6 Referências fracas
-------------------------

Python faz gerenciamento automático de memória (contagem de referências
para a maioria dos objetos e *note coleta de lixo: 1a69. para eliminar
ciclos).  A memória ocupada por um objeto é liberada logo depois da
última referência a ele ser eliminada.

Essa abordagem funciona bem para a maioria das aplicações, mas
ocasionalmente surge a necessidade de rastrear objetos apenas enquanto
estão sendo usados por algum outro.  Infelizmente rastreá-los cria uma
referência, e isso os fazem permanentes.  O módulo *note weakref: 114.
oferece ferramentas para rastrear objetos sem criar uma referência.
Quando o objeto não é mais necessário, ele é automaticamente removido de
uma tabela de referências fracas e uma chamada ('callback') é disparada.
Aplicações típicas incluem armazenamento em cache de objetos que são
muito custosos para criar:

     >>> import weakref, gc
     >>> class A:
     ...     def __init__(self, valor):
     ...         self.valor = valor
     ...     def __repr__(self):
     ...         return str(self.valor)
     ...
     >>> a = A(10)                   # cria uma referência
     >>> d = weakref.WeakValueDictionary()
     >>> d['primaria'] = a            # não cria uma referência
     >>> d['primaria']                # busca o objeto se ele estiver ativo
     10
     >>> del a                       # remove a referência criada
     >>> gc.collect()                # roda imediatamente a coleta de lixo
     0
     >>> d['primaria']                # o acesso foi automaticamente removido
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
         d['primaria']                # o acesso foi automaticamente removido
       File "C:/python313/lib/weakref.py", line 46, in __getitem__
         o = self.data[key]()
     KeyError: 'primaria'


File: python.info,  Node: Ferramentas para trabalhar com listas,  Next: Aritmética decimal com ponto flutuante,  Prev: Referências fracas,  Up: Um breve passeio pela biblioteca padrão — parte II

2.11.7 Ferramentas para trabalhar com listas
--------------------------------------------

Muitas necessidades envolvendo estruturas de dados podem ser satisfeitas
com o tipo embutido lista.  Entretanto, algumas vezes há uma necessidade
por implementações alternativas que sacrificam algumas facilidades em
nome de melhor desempenho.

O módulo *note array: 7. oferece uma classe *note array: 1a0, semelhante
a uma lista, mas que armazena apenas dados homogêneos e de maneira mais
compacta.  O exemplo a seguir mostra um vetor de números armazenados
como números binários de dois bytes sem sinal (código de tipo ‘"H"’) ao
invés dos 16 bytes usuais para cada item em uma lista de ‘int’:

     >>> from array import array
     >>> a = array('H', [4000, 10, 700, 22222])
     >>> sum(a)
     26932
     >>> a[1:3]
     array('H', [10, 700])

O módulo *note collections: 1d. oferece um objeto *note deque: 5dc. que
comporta-se como uma lista mas com 'appends' e 'pops' pela esquerda mais
rápidos, porém mais lento ao percorrer o meio da sequência.  Esses
objetos são adequados para implementar filas e buscas em amplitude em
árvores de dados:

     >>> from collections import deque
     >>> d = deque(["tarefa1", "tarefa2", "tarefa3"])
     >>> d.append("tarefa4")
     >>> print("Tratando", d.popleft())
     Tratando tarefa1

     nao_pesquisada = deque([no_inicial])
     def busca_em_profundidade(nao_pesquisada):
         no = nao_pesquisada.popleft()
         for m in gen_moves(no):
             if eh_o_alvo(m):
                 return m
             nao_pesquisada.append(m)

Além de implementações alternativas de listas, a biblioteca também
oferece outras ferramentas como o módulo *note bisect: 11. com funções
para manipulação de listas ordenadas:

     >>> import bisect
     >>> notas = [(100, 'perl'), (200, 'tcl'), (400, 'lua'), (500, 'python')]
     >>> bisect.insort(notas, (300, 'ruby'))
     >>> notas
     [(100, 'perl'), (200, 'tcl'), (300, 'ruby'), (400, 'lua'), (500, 'python')]

O módulo *note heapq: 69. oferece funções para implementação de 'heaps'
baseadas em listas normais.  O valor mais baixo é sempre mantido na
posição zero.  Isso é útil para aplicações que acessam repetidamente o
menor elemento, mas não querem reordenar a lista toda a cada acesso:

     >>> from heapq import heapify, heappop, heappush
     >>> dados = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
     >>> heapify(dados)                      # reorganiza a lista como um heap
     >>> heappush(dados, -5)                 # adiciona o valor -5 ao heap
     >>> [heappop(dados) for i in range(3)]  # encontra as 3 menores entradas
     [-5, 0, 1]


File: python.info,  Node: Aritmética decimal com ponto flutuante,  Prev: Ferramentas para trabalhar com listas,  Up: Um breve passeio pela biblioteca padrão — parte II

2.11.8 Aritmética decimal com ponto flutuante
---------------------------------------------

O módulo *note decimal: 36. oferece o tipo *note Decimal: 29d. para
aritmética decimal com ponto flutuante.  Comparado a implementação
embutida *note float: 2f7. que usa aritmética binária de ponto
flutuante, a classe é especialmente útil para:

   * aplicações financeiras que requerem representação decimal exata,

   * controle sobre a precisão,

   * controle sobre arredondamento para satisfazer requisitos legais,

   * rastreamento de casas decimais significativas, ou

   * aplicações onde o usuário espera que os resultados sejam os mesmos
     que os dos cálculos feitos à mão.

Por exemplo, calcular um imposto de 5% sobre uma chamada telefônica de
70 centavos devolve diferentes resultados com aritmética de ponto
flutuante decimal ou binária.  A diferença torna-se significativa se os
resultados são arredondados para o centavo mais próximo:

     >>> from decimal import *
     >>> round(Decimal('0.70') * Decimal('1.05'), 2)
     Decimal('0.74')
     >>> round(.70 * 1.05, 2)
     0.73

O resultado de *note Decimal: 29d. considera zeros à direita,
automaticamente inferindo quatro casas decimais a partir de
multiplicandos com duas casas decimais.  O módulo Decimal reproduz a
aritmética como fazemos à mão e evita problemas que podem ocorrer quando
a representação binária do ponto flutuante não consegue representar
quantidades decimais com exatidão.

A representação exata permite à classe *note Decimal: 29d. executar
cálculos de módulo e testes de igualdade que não funcionam bem em ponto
flutuante binário:

     >>> Decimal('1.00') % Decimal('.10')
     Decimal('0.00')
     >>> 1.00 % 0.10
     0.09999999999999995

     >>> sum([Decimal('0.1')]*10) == Decimal('1.0')
     True
     >>> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 == 1.0
     False

O módulo *note decimal: 36. implementa a aritmética com tanta precisão
quanto necessária:

     >>> getcontext().prec = 36
     >>> Decimal(1) / Decimal(7)
     Decimal('0.142857142857142857142857142857142857')


File: python.info,  Node: Ambientes virtuais e pacotes,  Next: E agora?,  Prev: Um breve passeio pela biblioteca padrão — parte II,  Up: O tutorial do Python

2.12 Ambientes virtuais e pacotes
=================================

* Menu:

* Introdução: Introdução<4>.
* Criando ambientes virtuais::
* Gerenciando pacotes com o pip::


File: python.info,  Node: Introdução<4>,  Next: Criando ambientes virtuais,  Up: Ambientes virtuais e pacotes

2.12.1 Introdução
-----------------

Aplicações em Python normalmente usam pacotes e módulos que não vêm como
parte da instalação padrão.  Aplicações às vezes necessitam uma versão
específica de uma biblioteca, porque ela requer que algum problema em
particular tenha sido consertado ou foi escrita utilizando-se de uma
versão obsoleta da interface da biblioteca.

Isso significa que talvez não seja possível que uma instalação Python
preencha os requisitos de qualquer aplicação.  Se uma aplicação A
necessita a versão 1.0 de um módulo particular mas a aplicação B
necessita a versão 2.0, os requisitos entrarão em conflito e instalar
qualquer uma das duas versões 1.0 ou 2.0 fará com que uma das aplicações
não consiga executar.

A solução para este problema é criar um *note ambiente virtual: 1e86,
uma árvore de diretórios que contém uma instalação Python para uma
versão particular do Python, além de uma série de pacotes adicionais.

Diferentes aplicações podem então usar diferentes ambientes virtuais.
Para resolver o exemplo anterior de requisitos conflitantes, a aplicação
A deve ter seu próprio ambiente virtual com a versão 1.0 instalada
enquanto a aplicação B vai possuir outro ambiente virtual com a versão
2.0.  Se a aplicação B precisar fazer uma atualização para a versão 3.0,
isso não afetará o ambiente da aplicação A.


File: python.info,  Node: Criando ambientes virtuais,  Next: Gerenciando pacotes com o pip,  Prev: Introdução<4>,  Up: Ambientes virtuais e pacotes

2.12.2 Criando ambientes virtuais
---------------------------------

O módulo usado para criar e gerenciar ambientes virtuais é chamado *note
venv: 111.  *note venv: 111. instalará a versão do Python a partir da
qual o comando foi executado (conforme relatado pela opção *note
-version: d3d.).  Por exemplo, executar o comando com ‘python3.12’
instalará a versão 3.12.

Para criar um ambiente virtual, escolha um diretório onde deseja
colocá-lo e execute o módulo *note venv: 111. como um script com o
caminho do diretório:

     python -m venv tutorial-env

Isso irá criar o diretório ‘tutorial-env’ se ele não existir, e também
criará diretórios dentro dele contendo uma cópia do interpretador
Python, a biblioteca padrão e diversos arquivos de suporte.

Um diretório de localização comum para um ambiente virtual é ‘.venv’.
Esse nome tipicamente mantém o diretório oculto em seu ambiente,
portanto é transparente, ao menos tempo que explica o motivo desse
diretório existir.  Também previne conflitos com ‘.env’, arquivos de
definição de variáveis de ambiente que algumas ferramentas utilizam.

Uma vez criado seu ambiente virtual, você deve ativá-lo.

No Windows, execute:

     tutorial-env\Scripts\activate

No Unix ou no MacOS, executa:

     source tutorial-env/bin/activate

(Este script é escrito para o shell bash.  Se você usa shells ‘csh’ ou
‘fish’, existem scripts alternativos ‘activate.csh’ e ‘activate.fish’
para utilização.)

Ao ativar seu ambiente virtual haverá uma mudança no prompt do shell
para mostrar qual ambiente virtual você está usando e modificará o
ambiente para que quando você executar ‘python’ ativar a versão e
instalação do Python particular àquele ambiente.  Por exemplo:

     $ source ~/envs/tutorial-env/bin/activate
     (tutorial-env) $ python
     Python 3.5.1 (default, May  6 2016, 10:59:36)
       ...
     >>> import sys
     >>> sys.path
     ['', '/usr/local/lib/python35.zip', ...,
     '~/envs/tutorial-env/lib/python3.5/site-packages']
     >>>

Para desativar um ambiente virtual, digite:

     deactivate

no terminal.


File: python.info,  Node: Gerenciando pacotes com o pip,  Prev: Criando ambientes virtuais,  Up: Ambientes virtuais e pacotes

2.12.3 Gerenciando pacotes com o pip
------------------------------------

Você pode instalar, atualizar e remover pacotes usando um programa
chamado ‘pip’.  Por padrão ‘pip’ irá instalar pacotes do Python Package
Index(1).  Você pode navegar pelo Python Package Index através do seu
navegador web.

‘pip’ tem uma série de subcomandos: “install”, “uninstall”, “freeze”,
etc.  (Consulte o guia *note Instalando módulos Python: f27. para a
documentação completa do ‘pip’.)

Você pode instalar a última versão de um pacote apenas especificando
nome do pacote:

     (tutorial-env) $ python -m pip install novas
     Collecting novas
       Downloading novas-3.1.1.3.tar.gz (136kB)
     Installing collected packages: novas
       Running setup.py install for novas
     Successfully installed novas-3.1.1.3

Você também pode instalar uma versão específica de um pacote dando o
nome do pacote seguido por ‘==’ e o número da versão:

     (tutorial-env) $ python -m pip install requests==2.6.0
     Collecting requests==2.6.0
       Using cached requests-2.6.0-py2.py3-none-any.whl
     Installing collected packages: requests
     Successfully installed requests-2.6.0

Se você executar novamente o comando, ‘pip’ será notificado de que a
versão já está instalada, e não fará nada.  Você pode fornecer um número
de versão diferente para obter essa versão ou pode executar ‘python -m
pip install --upgrade’ para atualizar o pacote para a versão mais
recente:

     (tutorial-env) $ python -m pip install --upgrade requests
     Collecting requests
     Installing collected packages: requests
       Found existing installation: requests 2.6.0
         Uninstalling requests-2.6.0:
           Successfully uninstalled requests-2.6.0
     Successfully installed requests-2.7.0

‘python -m pip uninstall’ seguido por um ou mais nomes de pacote
removerá os pacotes do ambiente virtual.

‘python -m pip show’ exibirá informações sobre um pacote específico:

     (tutorial-env) $ python -m pip show requests
     ---
     Metadata-Version: 2.0
     Name: requests
     Version: 2.7.0
     Summary: Python HTTP for Humans.
     Home-page: http://python-requests.org
     Author: Kenneth Reitz
     Author-email: me@kennethreitz.com
     License: Apache 2.0
     Location: /Users/akuchling/envs/tutorial-env/lib/python3.4/site-packages
     Requires:

‘python -m pip list’ exibirá todos os pacotes instalados no ambiente
virtual:

     (tutorial-env) $ python -m pip list
     novas (3.1.1.3)
     numpy (1.9.2)
     pip (7.0.3)
     requests (2.7.0)
     setuptools (16.0)

‘python -m pip freeze’ produzirá uma lista semelhante dos pacotes
instalados, mas a saída usa o formato que ‘python -m pip install’
espera.  Uma convenção comum é colocar esta lista em um arquivo
‘requirements.txt’:

     (tutorial-env) $ python -m pip freeze > requirements.txt
     (tutorial-env) $ cat requirements.txt
     novas==3.1.1.3
     numpy==1.9.2
     requests==2.7.0

O arquivo ‘requirements.txt’ pode ser submetido no controle de versão e
adicionado como parte da aplicação.  Usuários poderão então instalar
todos os pacotes necessários com um ‘install -r’:

     (tutorial-env) $ python -m pip install -r requirements.txt
     Collecting novas==3.1.1.3 (from -r requirements.txt (line 1))
       ...
     Collecting numpy==1.9.2 (from -r requirements.txt (line 2))
       ...
     Collecting requests==2.7.0 (from -r requirements.txt (line 3))
       ...
     Installing collected packages: novas, numpy, requests
       Running setup.py install for novas
     Successfully installed novas-3.1.1.3 numpy-1.9.2 requests-2.7.0

‘pip’ tem inúmeras outras opções.  Consulte o guia *note Instalando
módulos Python: f27. para a documentação completa do ‘pip’.  Quando você
escrever um pacote e desejar deixá-lo disponível no Python Package
Index, consulte o guia de usuário para empacotamento de Python(2).

   ---------- Footnotes ----------

   (1) https://pypi.org

   (2) 
https://packaging.python.org/en/latest/tutorials/packaging-projects/


File: python.info,  Node: E agora?,  Next: Edição de entrada interativa e substituição de histórico,  Prev: Ambientes virtuais e pacotes,  Up: O tutorial do Python

2.13 E agora?
=============

Ler este tutorial provavelmente reforçou seu interesse em usar Python —
você deve estar ansioso para aplicar Python para resolver problemas do
mundo real.  Aonde você deveria ir para aprender mais?

Este tutorial é parte do conjunto de documentação da linguagem Python.
Alguns outros documentos neste conjunto são:

   * *note A Biblioteca Padrão do Python: 144.:

     Você deveria navegar através deste manual, que lhe dará material
     completo (ainda que breve) de referência sobre tipos, funções e
     módulos na biblioteca padrão.  A distribuição padrão do Python
     inclui 'muito' código adicional.  Há módulos para ler caixa de
     correio Unix, baixar documentos via HTTP, gerar números aleatórios,
     processar opções de linha de comando, comprimir dados a muitas
     outras tarefas.  Uma lida rápida da Referência da Biblioteca lhe
     dará uma ideia do que está disponível.

   * *note Instalando módulos Python: f27. explica como instalar módulos
     adicionais escritos por outros usuários de Python.

   * *note A Referência da Linguagem Python: 145.: Uma explicação
     detalhada da sintaxe e da semântica de Python.  É uma leitura
     pesada, mas é útil como um guia completo da linguagem propriamente
     dita.

Mais recursos Python:

   * ‘https://www.python.org’: o principal site sobre Python.  Contém
     código, documentação, e referências para outras páginas
     relacionadas a Python ao redor da web.

   * ‘https://docs.python.org’: acesso rápido à documentação Python.

   * ‘https://pypi.org’: O Python Package Index, anteriormente apelidado
     de Cheese Shop (1), é um índice de módulos Python criados pelos
     usuários.  Uma vez que você começa a publicar código, pode
     registrar seus pacotes aqui para que outros possam encontrá-los.

   * ‘https://code.activestate.com/recipes/langs/python/’: O Python
     Cookbook (livro de receitas de Python) é uma grande coleção de
     exemplos de código, módulos maiores e scripts úteis.Contribuições
     particularmente notáveis são coletadas em um livro também chamado
     Python Cookbook (O’Reilly & Associates, ISBN 0-596-00797-3.)

   * ‘https://pyvideo.org’ coleta links para vídeo relacionados a Python
     de conferências e reuniões de grupos de usuários.

   * ‘https://scipy.org’: o projeto Scientific Python ( Python
     Científico) inclui módulos para computação e manipulação rápida de
     vetores e também hospeda pacotes para coisas similares como álgebra
     linear, transformações de Fourier, resolvedores não-lineares,
     distribuições de números aleatórios, análise estatística e afins.

Para reportar questões e problemas relacionadas a Python, você pode
postar no newsgroup ‘comp.lang.python’ ou enviá-los para o grupo de
e-mail em <python-list@python.org>.  O newsgroup e a lista são
conectados, então mensagens postadas em um são automaticamente
encaminhadas ao outro.  Há centenas de postagem diárias perguntando (e
respondendo) perguntas, sugerindo novas funcionalidades e anunciando
novos módulos.  E-mails arquivados estão disponíveis em
‘https://mail.python.org/pipermail/’.  Existe também o grupo de
discussão da comunidade brasileira de Python: python-brasil no Google
Groups (‘http://groups.google.com/group/python-brasil’), com discussões
de ótimo nível técnico.

Antes de postar, certifique-se de checar a lista de *note perguntas
frequentes: 1e8d. (também chamada de FAQ). O FAQ responde muitas das
perguntas que aparecem com frequência e pode já conter a solução para o
seu problema.

   ---------- Footnotes ----------

   (1) “Cheese Shop” é o título de um quadro do grupo Monty Python: um
freguês entra em uma loja especializada em queijos, mas qualquer queijo
que ele pede, o balconista diz que está em falta.


File: python.info,  Node: Edição de entrada interativa e substituição de histórico,  Next: Aritmética de ponto flutuante problemas e limitações,  Prev: E agora?,  Up: O tutorial do Python

2.14 Edição de entrada interativa e substituição de histórico
=============================================================

Algumas versões do interpretador Python suportam a edição da linha de
entrada atual e a substituição da história, semelhante às habilidade
encontradas no shell Korn e no shell GNU Bash.  Isso é implementado
usando a biblioteca GNU Readline(1), que oferece suporte a vários
estilos de edição.  Esta biblioteca possui sua própria documentação, que
não vamos duplicar aqui.

* Menu:

* Tab completion e histórico de edição::
* Alternativas ao interpretador interativo::

   ---------- Footnotes ----------

   (1) https://tiswww.case.edu/php/chet/readline/rltop.html


File: python.info,  Node: Tab completion e histórico de edição,  Next: Alternativas ao interpretador interativo,  Up: Edição de entrada interativa e substituição de histórico

2.14.1 Tab completion e histórico de edição
-------------------------------------------

A conclusão (“completion”) dos nomes de variáveis e módulos é *note
ativado automaticamente: fff. na inicialização do interpretador para que
a tecla ‘Tab’ invoque a função de conclusão.  Ele analisa os nomes das
instruções Python, as variáveis locais atuais e os nomes dos módulos
disponíveis.  Para expressões pontilhadas como ‘string.a’, ele avaliará
a expressão até o ‘'.'’ final e então sugerirá conclusões dos atributos
do objeto resultante.  Observe que isso pode executar o código definido
pela aplicação se um objeto com um método *note __getattr__(): 4d3. faz
parte da expressão.  A configuração padrão também guarda seu histórico
em um arquivo chamado ‘.python_history’ no seu diretório de usuário.  O
histórico estará disponível novamente durante a próxima sessão do
interpretador interativo.


File: python.info,  Node: Alternativas ao interpretador interativo,  Prev: Tab completion e histórico de edição,  Up: Edição de entrada interativa e substituição de histórico

2.14.2 Alternativas ao interpretador interativo
-----------------------------------------------

Esta facilidade é um enorme passo em frente em comparação com as versões
anteriores do interpretador; No entanto, alguns desejos são deixados:
seria bom se um *note INDENT: 1e95. adequado fosse sugerido nas linhas
de continuação (o analisador sabe se é necessário um token de recuo).  O
mecanismo de conclusão pode usar a tabela de símbolos do interpretador.
Um comando para verificar (ou mesmo sugerir) parênteses, aspas, etc.,
também seria útil.

Um interpretador interativo aprimorado e alternativo que existe há algum
tempo é o IPython(1), que apresenta a conclusão da guia, a exploração de
objetos e o gerenciamento de histórico avançado.  Também pode ser
completamente personalizado e incorporado em outras aplicações.  Outro
ambiente interativo aprimorado similar é bpython(2).

   ---------- Footnotes ----------

   (1) https://ipython.org/

   (2) https://bpython-interpreter.org/


File: python.info,  Node: Aritmética de ponto flutuante problemas e limitações,  Next: Anexo,  Prev: Edição de entrada interativa e substituição de histórico,  Up: O tutorial do Python

2.15 Aritmética de ponto flutuante: problemas e limitações
==========================================================

Os números de ponto flutuante são representados no hardware do
computador como frações de base 2 (binárias).  Por exemplo, a fração
'decimal' ‘0.625’ tem valor 6/10 + 2/100 + 5/1000, e da mesma forma a
fração 'binária' ‘0.101’ tem valor 0/2 + 0/4 + 1/8.  Essas duas frações
têm valores idênticos, a única diferença real é que a primeira é escrita
em notação fracionária de base 10 e a segunda em base 2.

Infelizmente, muitas frações decimais não podem ser representadas
precisamente como frações binárias.  O resultado é que, em geral, os
números decimais de ponto flutuante que você digita acabam sendo
armazenados de forma apenas aproximada, na forma de números binários de
ponto flutuante.

O problema é mais fácil de entender primeiro em base 10.  Considere a
fração 1/3.  Podemos representá-la aproximadamente como uma fração base
10:

     0.3

ou melhor,

     0.33

ou melhor,

     0.333

e assim por diante.  Não importa quantos dígitos você está disposto a
escrever, o resultado nunca será exatamente 1/3, mas será uma
aproximação de cada vez melhor de 1/3.

Da mesma forma, não importa quantos dígitos de base 2 estejas disposto a
usar, o valor decimal 0.1 não pode ser representado exatamente como uma
fração de base 2.  No sistema de base 2, 1/10 é uma fração binária que
se repete infinitamente:

     0.0001100110011001100110011001100110011001100110011...

Se parares em qualquer número finito de bits, obterás uma aproximação.
Hoje em dia, na maioria dos computadores, as casas decimais são
aproximados usando uma fração binária onde o numerado utiliza os
primeiros 53 bits iniciando no bit mais significativo e tendo como
denominador uma potência de dois.  No caso de 1/10, a fração binária
seria ‘602879701896397 / 2 ** 55’ o que chega bem perto, mas mesmo
assim, não é igual ao valor original de 1/10.

É fácil esquecer que o valor armazenado é uma aproximação da fração
decimal original, devido à forma como os pontos flutuantes são exibidos
no interpretador interativo.  O Python exibe apenas uma aproximação
decimal do verdadeiro valor decimal da aproximação binária armazenada
pela máquina.  Se o Python exibisse o verdadeiro valor decimal da
aproximação binária que representa o decimal 0.1, seria necessário
mostrar:

     >>> 0.1
     0.1000000000000000055511151231257827021181583404541015625

Isto contém muito mais dígitos do que é o esperado e utilizado pela
grande maioria dos desenvolvedores, portanto, o Python limita o número
de dígitos exibidos, apresentando um valor arredondado, ao invés de
mostrar todas as casas decimais:

     >>> 1 / 10
     0.1

Lembre-se, mesmo que o resultado impresso seja o valor exato de 1/10, o
valor que verdadeiramente estará armazenado será uma fração binária
representável que mais se aproxima.

Curiosamente, existem muitos números decimais diferentes que
compartilham a mesma fração binária aproximada.  Por exemplo, os números
‘0.1’ ou o ‘0.10000000000000001’ e
‘0.1000000000000000055511151231257827021181583404541015625’ são todos
aproximações de ‘3602879701896397 / 2 ** 55’.  Como todos esses valores
decimais compartilham um mesma de aproximação, qualquer um poderá ser
exibido enquanto for preservado o invariante ‘eval(repr(x)) == x’.

Historicamente, o prompt do Python e a função embutida *note repr():
800. utilizariam o que contivesse 17 dígitos significativos,
‘0.10000000000000001’.  Desde a versão do Python 3.1, o Python (na
maioria dos sistemas) agora é possível optar pela forma mais reduzida,
exibindo simplesmente o número ‘0.1’.

Note que essa é a própria natureza do ponto flutuante binário: não é um
bug do Python, e nem é um bug do seu código.  Essa situação pode ser
observada em todas as linguagens que usam as instruções aritméticas de
ponto flutuante do hardware (apesar de algumas linguagens não
'mostrarem' a diferença, por padrão, ou em todos os modos de saída).

Para obter um valor mais agradável, poderás utilizar a formatação de
sequência de caracteres para produzir um número limitado de dígitos
significativos:

     >>> format(math.pi, '.12g')  # ponto flutuante fornece 12 dígitos significativos
     '3.14159265359'

     >>> format(math.pi, '.2f')   # ponto flutuante fornece 2 dígitos significativos
     '3.14'

     >>> repr(math.pi)
     '3.141592653589793'

É importante perceber que tudo não passa de pura ilusão: estas
simplesmente arredondando a 'exibição' da verdadeira maquinaria do
valor.

Uma ilusão pode gerar outra.  Por exemplo, uma vez que 0.1 não é
exatamente 1/10, somar três vezes o valor 0.1, não garantirá que o
resultado seja exatamente 0.3, isso porque:

     >>> 0.1 + 0.1 + 0.1 == 0.3
     False

Inclusive, uma vez que o 0.1 não consegue aproximar-se do valor exato de
1/10 e 0.3 não pode se aproximar mais do valor exato de 3/10, temos
então que o pré-arredondamento com a função *note round(): 131d. não
servirá como ajuda:

     >>> round(0.1, 1) + round(0.1, 1) + round(0.1, 1) == round(0.3, 1)
     False

Embora os números não possam se aproximar mais dos exatos valores que
desejamos, a função *note math.isclose(): dd8. poderá ser útil para
comparar valores inexatos:

     >>> math.isclose(0.1 + 0.1 + 0.1, 0.3)
     True

Alternativamente, a função *note round(): 131d. pode ser usada para
comparar aproximações aproximadas:

     >>> round(math.pi, ndigits=2) == round(22 / 7, ndigits=2)
     True

A aritmética binária de ponto flutuante contém muitas surpresas como
essa.  O problema com “0.1” é explicado em detalhes precisos abaixo, na
seção “Erro de representação”.  Consulte Exemplos de problemas de ponto
flutuante(1) (em inglês) para obter um resumo agradável de como o ponto
flutuante binário funciona e os tipos de problemas comumente encontrados
na prática.  Veja também Os perigos do ponto flutuante(2) (em inglês)
para um relato mais completo de outras surpresas comuns.

Como dizemos perto do final, “não há respostas fáceis”.  Ainda assim,
não se percam indevidamente no uso do ponto flutuante!  Os erros nas
operações do tipo float do Python são heranças do hardware de ponto
flutuante e, a maioria dos computadores estão na ordem de não mais do
que 1 parte em 2**53 por operação.  Isso é mais do que o suficiente para
a maioria das tarefas, portanto, é importante lembrar que não se trata
de uma aritmética decimal e que toda operação com o tipo float poderá
via a apresentar novos problemas referentes ao arredondamento.

Embora existam casos patológicos, na maior parte das vezes, terás como
resultado final o valor esperado, se simplesmente arredondares a
exibição final dos resultados para a quantidade de dígitos decimais que
esperas a função *note str(): 44c. geralmente será o suficiente, e ,
para seja necessário um valor refinado, veja os especificadores de
formato *note str.format(): 621. contido na seção *note Sintaxe das
strings de formato: 13e2.

Para as situações que exijam uma representação decimal exata,
experimente o módulo *note decimal: 36. que possui, a implementação de
uma adequada aritmética decimal bastante utilizada nas aplicações
contábeis e pelas aplicações que demandam alta precisão.

Uma outra forma de obter uma aritmética exata tem suporte pelo módulo
‘fracções’ que implementa a aritmética baseada em números racionais
(portanto, os números fracionários como o 1/3 conseguem uma
representação precisa).

Caso necessites fazer um intenso uso das operações de ponto flutuante, é
importante que conheças o pacote NumPy e, também é importante dizer, que
existem diversos pacotes destinados ao trabalho intenso com operações
matemáticas e estatísticas que são fornecidas pelo projeto SciPy.  Veja
<‘https://scipy.org’>.

O Python fornece ferramentas que podem ajudar nessas raras ocasiões em
que realmente 'faz' necessário conhecer o valor exato de um ponto
flutuante.  O método *note float.as_integer_ratio(): 1e9a. expressa o
valor de um número do tipo float em sua forma fracionária:

     >>> x = 3.14159
     >>> x.as_integer_ratio()
     (3537115888337719, 1125899906842624)

Uma vez que a relação seja exata, será possível utiliza-la para obter,
sem que haja quaisquer perda do valor original:

     >>> x == 3537115888337719 / 1125899906842624
     True

O método *note float.hex(): 1e9b. expressa um ponto flutuante em
hexadecimal (base 16), o mesmo também retornará o valor exato pelo
computador:

     >>> x.hex()
     '0x1.921f9f01b866ep+1'

Sua precisa representação hexadecimal poderá ser utilizada para
reconstruir o valor exato do ponto flutuante:

     >>> x == float.fromhex('0x1.921f9f01b866ep+1')
     True

Como a representação será exata, é interessante utilizar valores
confiáveis em diferentes versões do Python (independente da plataforma)
e a troca de dados entre idiomas diferentes que forneçam o mesmo formato
(como o Java e o C99).

Uma outra ferramenta que poderá ser útil é a função *note sum(): 46a.
que ajuda a mitigar a perda de precisão durante a soma.  Ele usa
precisão estendida para etapas intermediárias de arredondamento, pois os
valores serão adicionados a um total em execução.  Isso poderá fazer a
diferença na precisão geral de forma que os erros não se acumulem
chegando ao ponto de afetar o resultado final:

     >>> 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 + 0.1 == 1.0
     False
     >>> sum([0.1] * 10) == 1.0
     True

A função *note math.fsum(): 141b. vai além e rastreia todos os “dígitos
perdidos” à medida que os valores são adicionados a um total contínuo,
de modo que o resultado tenha apenas um único arredondamento.  Isso é
mais lento que *note sum(): 46a, mas será mais preciso em casos incomuns
em que entradas de grande magnitude se cancelam, deixando uma soma final
próxima de zero:

     >>> arr = [-0.10430216751806065, -266310978.67179024, 143401161448607.16,
     ...        -143401161400469.7, 266262841.31058735, -0.003244936839808227]
     >>> float(sum(map(Fraction, arr)))   # Soma exata com arredondamento simples
     8.042173697819788e-13
     >>> math.fsum(arr)                   # Arredondamento simples
     8.042173697819788e-13
     >>> sum(arr)                         # Arredondamentos múltiplos em precisão estendida
     8.042178034628478e-13
     >>> total = 0.0
     >>> for x in arr:
     ...     total += x                   # Arredondamentos múltiplos em precisão padrão
     ...
     >>> total                            # A adição direta não tem dígitos corretos!
     -0.0051575902860057365

* Menu:

* Erro de representação::

   ---------- Footnotes ----------

   (1) 
https://jvns.ca/blog/2023/01/13/examples-of-floating-point-problems/

   (2) http://www.indowsway.com/floatingpoint.htm


File: python.info,  Node: Erro de representação,  Up: Aritmética de ponto flutuante problemas e limitações

2.15.1 Erro de representação
----------------------------

Esta seção explica o exemplo do “0.1” em detalhes, e mostra como poderás
realizar uma análise exata de casos semelhantes.  Presumimos que tenhas
uma familiaridade básica com a representação binária de ponto flutuante.

'Erro de representação' refere-se ao fato de que algumas frações
decimais (a maioria, na verdade) não podem ser representadas exatamente
como frações binárias (base 2).  Esta é a principal razão por que o
Python (ou Perl, C, C++, Java, Fortran, e muitas outras) frequentemente
não exibe o número decimal exato conforme o esperado:

Por que isso acontece?  1/10 não é representado exatamente sendo fração
binária.  Desde pelo menos 2000, quase todas as máquinas usam aritmética
binária de ponto flutuante da IEEE 754 e quase todas as plataformas
representam pontos flutuante do Python como valores binary64 de “double
precision” (dupla precisão) da IEEE 754.  Os valores binary64 da IEEE
754 têm 53 bits de precisão, por isso na entrada o computador se esforça
para converter “0.1” para a fração mais próxima que puder, na forma
'J'/2**'N' onde 'J' é um número inteiro contendo exatamente 53 bits.
Reescrevendo:

     1 / 10 ~= J / (2**N)

como

     J ~= 2**N / 10

e recordando que 'J' tenha exatamente 53 bits (é ‘>= 2**52’, mas ‘<
2**53’), o melhor valor para 'N' é 56:

     >>> 2**52 <=  2**56 // 10  < 2**53
     True

Ou seja, 56 é o único valor de 'N' que deixa 'J' com exatamente 53 bits.
Portanto, o melhor valor que conseguimos obter pra 'J' será aquele que
possui o quociente arredondado:

     >>> q, r = divmod(2**56, 10)
     >>> r
     6

Uma vez que o resto seja maior do que a metade de 10, a melhor
aproximação que poderá ser obtida se arredondarmos para cima:

     >>> q+1
     7205759403792794

Portanto, a melhor aproximação possível de 1/10 como um “IEEE 754 double
precision” é:

     7205759403792794 / 2 ** 56

Dividir o numerador e o denominador por dois reduzirá a fração para:

     3602879701896397 / 2 ** 55

Note que, como arredondamos para cima, esse valor é, de fato, um pouco
maior que 1/10; se não tivéssemos arredondado para cima, o quociente
teria sido um pouco menor que 1/10.  Mas em nenhum caso seria possível
obter 'exatamente' o valor 1/10!

Por isso, o computador nunca “vê” 1/10: o que ele vê é exatamente a
fração que é obtida pra cima, a melhor aproximação “IEEE 754 double”
possível é:

     >>> 0.1 * 2 ** 55
     3602879701896397.0

Se multiplicarmos essa fração por 10**55, podemos ver o valor contendo
os 55 dígitos mais significativos:

     >>> 3602879701896397 * 10 ** 55 // 2 ** 55
     1000000000000000055511151231257827021181583404541015625

o que significa que o número exato armazenado no computador é igual ao
valor decimal 0.1000000000000000055511151231257827021181583404541015625.
Em vez de exibir o valor decimal completo, muitas linguagens (incluindo
versões mais antigas do Python), arredondam o resultado para 17 dígitos
significativos:

     >>> format(0.1, '.17f')
     '0.10000000000000001'

Módulos como o *note fractions: 5d. e o *note decimal: 36. tornam esses
cálculos muito mais fáceis:

     >>> from decimal import Decimal
     >>> from fractions import Fraction

     >>> Fraction.from_float(0.1)
     Fraction(3602879701896397, 36028797018963968)

     >>> (0.1).as_integer_ratio()
     (3602879701896397, 36028797018963968)

     >>> Decimal.from_float(0.1)
     Decimal('0.1000000000000000055511151231257827021181583404541015625')

     >>> format(Decimal.from_float(0.1), '.17')
     '0.10000000000000001'


File: python.info,  Node: Anexo,  Prev: Aritmética de ponto flutuante problemas e limitações,  Up: O tutorial do Python

2.16 Anexo
==========

* Menu:

* Modo interativo: Modo interativo<2>.


File: python.info,  Node: Modo interativo<2>,  Up: Anexo

2.16.1 Modo interativo
----------------------

Existem duas variantes do *note REPL: 16a. interativo.  O interpretador
básico clássico é compatível com todas as plataformas com recursos
mínimos de controle de linha.

No Windows, ou em sistemas do tipo Unix com suporte a *note curses: 2b,
um novo console interativo é usado por padrão desde o Python 3.13.  Este
oferece suporte a cores, edição multilinha, navegação no histórico e
modo de colagem.  Para desabilitar a cor, veja *note Controlando cores:
16b. para detalhes.  As teclas de função fornecem algumas
funcionalidades adicionais.  ‘F1’ entra no navegador de ajuda interativo
*note pydoc: b5.  ‘F2’ permite navegar no histórico da linha de comando
sem saída nem os prompts *note >>>: 16c. e *note …: 16d.  ‘F3’ entra no
“modo de colagem”, o que torna mais fácil colar blocos maiores de
código.  Pressione ‘F3’ para retornar ao prompt normal.

Ao usar o novo console interativo, saia do console digitando ‘exit’ ou
‘quit’.  Não é necessário adicionar parênteses de chamada após esses
comandos.

Se o novo console interativo não for desejado, ele pode ser desabilitado
através da variável de ambiente *note PYTHON_BASIC_REPL: 16e.

* Menu:

* Tratamento de erros::
* Scripts Python executáveis::
* Arquivo de inicialização do modo interativo::
* Módulos de customização::


File: python.info,  Node: Tratamento de erros,  Next: Scripts Python executáveis,  Up: Modo interativo<2>

2.16.1.1 Tratamento de erros
............................

Quando um erro ocorre, o interpretador exibe uma mensagem de erro e um
'stack trace' (rastreamento de pilha).  Se estiver no modo interativo,
ele volta para o prompt primário; se a entrada veio de um arquivo, a
execução termina com um status de saída diferente de zero após a
exibição do 'stack trace'.  (Exceções tratadas por uma cláusula *note
except: 18b. numa instrução *note try: 6e9. não são consideradas erros,
nesse contexto.)  Alguns erros são irremediavelmente graves e causam
términos de execução com status de saída diferente de zero; isso pode
ocorrer devido a inconsistências internas e, em alguns casos, por falta
de memória.  Todas as mensagens de erro são escritas no fluxo de erros
padrão; a saída normal resultante da execução de comandos é escrita no
fluxo de saída padrão.

Digitar o caractere de interrupção (geralmente ‘Control’-‘C’ ou
‘Delete’) em prompts primários ou secundários interrompe a entrada de
dados e retorna ao prompt primário.  (1)  Digitar a interrupção durante
a execução de um comando levanta a exceção *note KeyboardInterrupt: 9d9,
que pode ser tratada por meio de uma declaração *note try: 6e9.

   ---------- Footnotes ----------

   (1) Um problema com o pacote GNU Readline pode impedir que isso
aconteça.


File: python.info,  Node: Scripts Python executáveis,  Next: Arquivo de inicialização do modo interativo,  Prev: Tratamento de erros,  Up: Modo interativo<2>

2.16.1.2 Scripts Python executáveis
...................................

Em sistemas Unix similares ao BSD, scripts Python podem ser executados
diretamente, tal como scripts shell, se tiverem a linha de código

     #!/usr/bin/env python3

(presumindo que o interpretador está na ‘PATH’ do usuário) no começo do
script e configurando o arquivo no modo executável.  Os dois primeiros
caracteres do arquivo devem ser ‘#!’.  Em algumas plataformas, essa
primeira linha deve terminar com uma quebra de linha em estilo Unix
(‘'\n'’), e não em estilo Windows (‘'\r\n'’).  Note que o caractere
cerquilha, ‘'#'’, é usado em Python para marcar o início de um
comentário.

O script pode receber a permissão para atuar em modo executável através
do comando ‘chmod’.

     $ chmod +x meuscript.py

Em sistemas Windows, não existe a noção de “modo executável”.  O
instalador do Python associa automaticamente os arquivos ‘.py’ ao
‘python.exe’, de modo que um clique duplo em um arquivo Python o
executará como um script.  A extensão pode ser também ‘.pyw’, o que
omite a janela de console que normalmente aparece.


File: python.info,  Node: Arquivo de inicialização do modo interativo,  Next: Módulos de customização,  Prev: Scripts Python executáveis,  Up: Modo interativo<2>

2.16.1.3 Arquivo de inicialização do modo interativo
....................................................

Quando se usa o Python no modo interativo, pode ser útil definir alguns
comandos que sejam executados automaticamente toda vez que o
interpretador for inicializado.  Isso pode ser feito configurando-se uma
variável de ambiente chamada *note PYTHONSTARTUP: ffe. para que ela
aponte para o arquivo contendo esses comandos.  Isso é similar ao
recurso ‘.profile’ das shells Unix.

Esse arquivo será lido apenas em sessões do modo interativo, e não
quando Python lê comandos de um script, tampouco quando ‘/dev/tty’ é
passado explicitamente como a origem dos comandos (neste caso, teremos
um comportamento similar a uma sessão interativa padrão).  Ele é
executado no mesmo espaço de nomes em que os comandos interativos são
executados, de modo que os objetos que ele define ou importa possam ser
usados sem qualificação na sessão interativa.  Também é possível alterar
os prompts ‘sys.ps1’ e ‘sys.ps2’ no mesmo arquivo.

Caso deseje usar um arquivo de inicialização adicional a partir do atual
diretório de trabalho, você pode programá-lo no arquivo de inicialização
global usando um código parecido com ‘if os.path.isfile('.pythonrc.py'):
exec(open('.pythonrc.py').read())’.  Se quiser usar o arquivo de
inicialização num script, será necessário fazê-lo explicitamente no
script:

     import osfilename = os.environ.get('PYTHONSTARTUP')if filename and os.path.isfile(filename):    with open(filename) as fobj:        startup_file = fobj.read()    exec(startup_file)


File: python.info,  Node: Módulos de customização,  Prev: Arquivo de inicialização do modo interativo,  Up: Modo interativo<2>

2.16.1.4 Módulos de customização
................................

Python oferece dois ganchos que permitem sua customização: sitecustomize
e usercustomize.  Para entender como funcionam, primeiro você deve
localizar o diretório site-packages do usuário.  Inicie o Python e
execute este código:

     >>> import site>>> site.getusersitepackages()'/home/user/.local/lib/python3.x/site-packages'

Agora você pode criar um arquivo chamado ‘usercustomize.py’ neste
diretório e colocar qualquer coisa que quiser dentro.  Isto vai afetar
toda invocação do Python, a menos que seja iniciado com a opção *note
-s: 13d5. para desabilitar a importação automática.

sitecustomize funciona da mesma forma, mas normalmente é criado por um
administrador do computador no diretório site-packages global e é
importado antes de usercustomize.  Veja a documentação do módulo *note
site: c7. para mais detalhes.


File: python.info,  Node: Configurações e Uso do Python,  Next: A Referência da Linguagem Python,  Prev: O tutorial do Python,  Up: Top

3 Configurações e Uso do Python
*******************************

Esta parte da documentação é dedicada a informações gerais sobre a
configuração do ambiente Python em diferentes plataformas, a chamada do
interpretador e outras coisas que facilitam o trabalho com o Python.

* Menu:

* Linha de comando e ambiente::
* Utilizando Python em plataformas Unix::
* Configurando o Python::
* Utilizando Python no Windows::
* Usando Python em macOS::
* Utilizando Python no Android::
* Usando Python no iOS::
* Editores e IDEs::


File: python.info,  Node: Linha de comando e ambiente,  Next: Utilizando Python em plataformas Unix,  Up: Configurações e Uso do Python

3.1 Linha de comando e ambiente
===============================

O interpretador do CPython verifica a linha de comando e o ambiente em
busca de várias configurações.

Os esquemas de linha de comando de outras implementações podem ser
diferentes.  Consulte *note Implementações Alternativas: 1eb0. para mais
recursos.

* Menu:

* Linha de comando::
* Variáveis de ambiente::


File: python.info,  Node: Linha de comando,  Next: Variáveis de ambiente,  Up: Linha de comando e ambiente

3.1.1 Linha de comando
----------------------

Ao invocar o Python, você pode especificar qualquer uma destas opções:

     python [-bBdEhiIOPqRsSuvVWx?] [-c comando | -m nome-módulo | script | - ] [args]

O caso de uso mais comum é, obviamente, uma simples invocação de um
script:

     python meuscript.py

* Menu:

* Opções de interface::
* Opções genéricas::
* Opções diversas::
* Controlando cores::
* Opções que você não deve usar::


File: python.info,  Node: Opções de interface,  Next: Opções genéricas,  Up: Linha de comando

3.1.1.1 Opções de interface
...........................

A interface do interpretador é semelhante à do console do UNIX, mas
fornece alguns métodos adicionais de chamada:

   * Quando chamado com a entrada padrão conectada a um dispositivo tty,
     ele solicita comandos e os executa até um EOF (um caractere de fim
     de arquivo, você pode produzi-lo com ‘Ctrl’-‘D’ no UNIX ou
     ‘Ctrl’-‘Z,’ ‘Enter’ no Windows) ser lido.  Para mais sobre o modo
     interativo, veja *note Modo interativo: 16f.

   * Quando chamado com um argumento de nome de arquivo ou com um
     arquivo como entrada padrão, ele lê e executa um script desse
     arquivo.

   * Quando chamado com um argumento de nome de diretório, ele lê e
     executa um script nomeado adequadamente desse diretório.

   * Quando chamado com ‘-c command’, ele executa as instruções Python
     fornecidas como 'command'.  Aqui 'command' pode conter várias
     instruções separadas por novas linhas.  O espaço em branco à
     esquerda é significativo nas instruções do Python!

   * Quando chamado com ‘-m module-name’, o módulo fornecido está
     localizado no caminho do módulo Python e é executado como um
     script.

No modo não interativo, toda a entrada é analisada antes de ser
executada.

Uma opção de interface termina a lista de opções consumidas pelo
interpretador, todos os argumentos consecutivos terminam em *note
sys.argv: 12a6. – observe que o primeiro elemento, subscrito zero
(‘sys.argv[0]’) , é uma string que reflete a fonte do programa.

 -- Option: -c <command>

     Executa o código Python em 'command'.  'command' pode ser uma ou
     mais instruções separadas por novas linhas, com espaços em branco à
     esquerda significativos, como em um código de um módulo normal.

     Se esta opção for fornecida, o primeiro elemento de *note sys.argv:
     12a6. será ‘"-c"’ e o diretório atual será adicionado ao início de
     *note sys.path: 3b4. (permitindo módulos nesse diretório serem
     importados como módulos de nível superior).

     Levanta um *note evento de auditoria: 19fa. ‘cpython.run_command’
     com o argumento ‘command’.

 -- Option: -m <module-name>

     Procura *note sys.path: 3b4. pelo módulo nomeado e executa seu
     conteúdo como o módulo *note __main__: 1.

     Como o argumento é um nome de 'module', você não deve fornecer uma
     extensão de arquivo (‘.py’).  O nome do módulo deve ser um nome de
     módulo Python absoluto válido, mas a implementação nem sempre pode
     impor isso (por exemplo, pode permitir que você use um nome que
     inclua um hífen).

     Nomes de pacotes (incluindo pacotes de espaço de nomes) também são
     permitidos.  Quando um nome de pacote é fornecido ao invés de um
     módulo normal, o interpretador irá executar ‘<pkg>.__main__’ como o
     módulo principal.  Esse comportamento é deliberadamente semelhante
     ao tratamento de diretórios e arquivos zip que são passados para o
     interpretador como o argumento do script.

          Nota: Esta opção não pode ser usada com módulos embutidos e
          módulos de extensão escritos em C, uma vez que eles não
          possuem arquivos de módulo Python.  No entanto, ele ainda pode
          ser usado para módulos pré-compilados, mesmo se o arquivo
          fonte original não estiver disponível.

     Se esta opção for fornecida, o primeiro elemento de *note sys.argv:
     12a6. será o caminho completo para o arquivo do módulo (enquanto o
     arquivo do módulo está sendo localizado, o primeiro elemento será
     definido como ‘"-m"’).  Como com a opção *note -c: 5e0, o diretório
     atual será adicionado ao início de *note sys.path: 3b4.

     A opção *note -I: 965. pode ser usada para executar o script em
     modo isolado onde *note sys.path: 3b4. não contém nem o diretório
     atual nem o diretório de pacotes de sites do usuário.  Todas as
     variáveis de ambiente ‘PYTHON*’ são ignoradas também.

     Muitos módulos de biblioteca padrão contêm código que é chamado em
     sua execução como um script.  Um exemplo é o módulo *note timeit:
     ef.:

          python -m timeit -s "configuração inicial aqui" "código a ser analisado aqui"
          python -m timeit -h # para detalhes

     Levanta um *note evento de auditoria: 19fa. ‘cpython.run_module’
     com o argumento ‘module-name’.

     Ver também
     ..........

     *note runpy.run_module(): 1922.

          Funcionalidade equivalente diretamente disponível para o
          código Python

     PEP 338(1) – Executando módulos como scripts

     Alterado na versão 3.1: Forneça o nome do pacote para executar um
     submódulo ‘__main__’.

     Alterado na versão 3.4: pacotes de espaço de nomes também são
     suportados

 -- Describe: -

     Lê os comandos da entrada padrão (*note sys.stdin: 53d.).  Se a
     entrada padrão for um terminal, *note -i: 1523. está implícito.

     Se esta opção for fornecida, o primeiro elemento de *note sys.argv:
     12a6. será ‘"-"’ e o diretório atual será adicionado ao início de
     *note sys.path: 3b4.

     Levanta um *note evento de auditoria: 19fa. ‘cpython.run_stdin’ sem
     argumentos.

 -- Describe: <script>

     Executa o código Python contido em 'script', que deve ser um
     caminho do sistema de arquivos (absoluto ou relativo) referindo-se
     a um arquivo Python, um diretório contendo um arquivo
     ‘__main__.py’, ou um arquivo zip contendo um arquivo ‘__main__.py’.

     Se esta opção for fornecida, o primeiro elemento de *note sys.argv:
     12a6. será o nome do script conforme fornecido na linha de comando.

     Se o nome do script se referir diretamente a um arquivo Python, o
     diretório que contém esse arquivo é adicionado ao início de *note
     sys.path: 3b4, e o arquivo é executado como o módulo *note
     __main__: 1.

     Se o nome do script se referir a um diretório ou arquivo zip, o
     nome do script será adicionado ao início de *note sys.path: 3b4. e
     o arquivo ‘__main__.py’ nesse local será executado como o módulo
     *note __main__: 1.

     A opção *note -I: 965. pode ser usada para executar o script em
     modo isolado onde *note sys.path: 3b4. não contém nem o diretório
     do script nem o diretório de pacotes de sites do usuário.  Todas as
     variáveis de ambiente ‘PYTHON*’ são ignoradas também.

     Levanta um *note evento de auditoria: 19fa. ‘cpython.run_file’ com
     o argumento ‘filename’.

     Ver também
     ..........

     *note runpy.run_path(): 181.

          Funcionalidade equivalente diretamente disponível para o
          código Python

Se nenhuma opção de interface for fornecida, *note -i: 1523. está
implícito, ‘sys.argv[0]’ é uma string vazia (‘""’) e o diretório atual
será adicionado ao início de *note sys.path: 3b4.  Além disso, o
preenchimento por tab e a edição do histórico são habilitados
automaticamente, se disponíveis em sua plataforma (veja *note
Configuração Readline: fff.).

Ver também
..........

*note Chamando o interpretador: 1d61.

Alterado na versão 3.4: Ativação automática de preenchimento com tab e
edição de histórico.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0338/


File: python.info,  Node: Opções genéricas,  Next: Opções diversas,  Prev: Opções de interface,  Up: Linha de comando

3.1.1.2 Opções genéricas
........................

 -- Option: -?
 -- Option: -h
 -- Option: --help

     Imprime uma breve descrição de todas as opções de linha de comando
     e variáveis de ambiente correspondentes e sai.

 -- Option: --help-env

     Imprime uma breve descrição das variáveis de ambiente específicas
     do Python e sai.

     Adicionado na versão 3.11.

 -- Option: --help-xoptions

     Imprime uma descrição das opções *note -X: 176. específica da
     implementação e sai.

     Adicionado na versão 3.11.

 -- Option: --help-all

     Imprime as informações de uso completas e sai.

     Adicionado na versão 3.11.

 -- Option: -V
 -- Option: --version

     Exibe o número da versão do Python e saia.  O exemplo de saída
     poderia ser:

          Python 3.8.0b2+

     Quando fornecido duas vezes, exibe mais informações sobre a
     construção, como:

          Python 3.8.0b2+ (3.8:0c076caaa8, Apr 20 2019, 21:55:00)
          [GCC 6.2.0 20161005]

     Adicionado na versão 3.6: A opção ‘-VV’.


File: python.info,  Node: Opções diversas,  Next: Controlando cores,  Prev: Opções genéricas,  Up: Linha de comando

3.1.1.3 Opções diversas
.......................

 -- Option: -b

     Emite um aviso ao converter *note bytes: 1c2. ou *note bytearray:
     2ea. para *note str: 44c. sem especificar codificação ou comparar
     ‘bytes’ ou ‘bytearray’ com ‘str’ ou ‘bytes’ com *note int: 257.
     Emite um erro quando a opção é fornecida duas vezes (‘-bb’).

     Alterado na versão 3.5: Afeta também comparações de *note bytes:
     1c2. com *note int: 257.

 -- Option: -B

     Se fornecido, Python não tentará escrever arquivos ‘.pyc’ na
     importação de módulos fonte.  Veja também *note
     PYTHONDONTWRITEBYTECODE: 1415.

 -- Option: --check-hash-based-pycs default|always|never

     Controla o comportamento de validação de arquivos ‘.pyc’ baseados
     em hash.  Veja *note Invalidação de bytecode em cache: 5ec.  Quando
     definido como ‘default’, os arquivos de cache bytecode baseados em
     hash verificados e não verificados são validados de acordo com sua
     semântica padrão.  Quando definido como ‘always’, todos os arquivos
     ‘.pyc’ baseados em hash, sejam verificados ou não verificados, são
     validados para seus arquivos fonte correspondentes.  Quando
     definido como ‘never’, os arquivos ‘.pyc’ baseados em hash não são
     validados para seus arquivos fonte correspondentes.

     A semântica dos arquivos ‘.pyc’ baseados em marca de tempo não é
     afetada por esta opção.

 -- Option: -d

     Ativa a saída analisador sintático de depuração (uso avançado).
     Consulte também a variável de ambiente *note PYTHONDEBUG: 1ebc.

     Essa opção requer uma *note construção de depuração do Python: 1f9,
     caso contrário, será ignorada.

 -- Option: -E

     Ignora todas as variáveis de ambiente ‘PYTHON*’, por exemplo *note
     PYTHONPATH: 1053. e *note PYTHONHOME: 3bc, que pode ser definido.

     Veja também as opções *note -P: 5a4. e *note -I: 965. (isolado).

 -- Option: -i

     Entra no modo interativo após a execução.

     Usanr a opção *note -i: 1523. vai entrar no modo interativo em
     qualquer uma das circunstâncias:

        * quando um script é passado como primeiro argumento

        * quando a opção *note -c: 5e0. é usada

        * quando a opção *note -m: 5e1. é usada

     O modo interativo vai ser iniciado mesmo quando a *note sys.stdin:
     53d. não parecer ser um terminal.  O arquivo *note PYTHONSTARTUP:
     ffe. não é lido.

     Isso pode ser útil para inspecionar variáveis globais ou um stack
     trace (situação da pilha de execução) quando um script levanta uma
     exceção.  Veja também *note PYTHONINSPECT: 1522.

 -- Option: -I

     Executa o Python no modo isolado.  Isso também implica nas opções
     *note -E: 964, *note -P: 5a4. e *note -s: 13d5.

     No modo isolado, *note sys.path: 3b4. não contém o diretório do
     script nem o diretório de pacotes do site do usuário.  Todas as
     variáveis de ambiente ‘PYTHON*’ são ignoradas também.  Outras
     restrições podem ser impostas para evitar que o usuário injete
     código malicioso.

     Adicionado na versão 3.4.

 -- Option: -O

     Remove as instruções de asserção e qualquer código condicional ao
     valor de *note __debug__: 7db.  Aumenta o nome do arquivo para
     arquivos compilados (*note bytecode: 187.) adicionando ‘.opt-1’
     antes da extensão ‘.pyc’ (veja PEP 488(1)).  Veja também *note
     PYTHONOPTIMIZE: 1ebd.

     Alterado na versão 3.5: Modifica nomes de arquivos ‘.pyc’ conforme
     a PEP 488(2).

 -- Option: -OO

     Faz o mesmo que *note -O: ddd. e também descarta strings de
     documentação.  Aumenta o nome do arquivo para arquivos compilados
     (*note bytecode: 187.) adicionando ‘.opt-2’ antes da extensão
     ‘.pyc’ (veja PEP 488(3)).

     Alterado na versão 3.5: Modifica nomes de arquivos ‘.pyc’ conforme
     a PEP 488(4).

 -- Option: -P

     Não anexa um caminho potencialmente inseguro a *note sys.path:
     3b4.:

        * A linha de comando ‘python -m módulo’: Não anexa o diretório
          atual.

        * A linha de comando ‘python script.py’: não anexa o diretório
          do script.  Se for um link simbólico, resolve os links
          simbólicos.

        * Linhas de comando ‘python -c código’ e ‘python’ (REPL): Não
          anexa uma string vazia, o que significa o diretório de
          trabalho atual.

     Veja também a variável de ambiente *note PYTHONSAFEPATH: 5a5. e as
     opções *note -E: 964. e *note -I: 965. (isolado).

     Adicionado na versão 3.11.

 -- Option: -q

     Não exibe as mensagens de direitos autorais e de versão nem mesmo
     no modo interativo.

     Adicionado na versão 3.2.

 -- Option: -R

     Habilita a aleatorização com hash.  Esta opção só tem efeito se a
     variável de ambiente *note PYTHONHASHSEED: 10b6. estiver
     configurada para qualquer valor diferente de ‘random’, uma vez que
     a aleatorização com hash é habilitada por padrão.

     Em versões anteriores do Python, esta opção ativa a aleatorização
     com hash, para que os valores *note __hash__(): b0e. dos objetos
     str e bytes sejam “salgados” com um valor aleatório imprevisível.
     Embora permaneçam constantes em um processo Python individual, eles
     não são previsíveis entre invocações repetidas de Python.

     A aleatorização com hash 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'('n'^2).  Consulte
     ‘http://ocert.org/advisories/ocert-2011-003.html’ para obter
     detalhes.

     *note PYTHONHASHSEED: 10b6. permite que você defina um valor fixo
     para o segredo da semente de hash.

     Adicionado na versão 3.2.3.

     Alterado na versão 3.7: A opção não é mais ignorada.

 -- Option: -s

     Não adiciona o ‘diretório site-packages de usuário’ a *note
     sys.path: 3b4.

     Veja também *note PYTHONNOUSERSITE: 13d6.

     Ver também
     ..........

     PEP 370(5) – Diretório site-packages por usuário.

 -- Option: -S

     Desabilita a importação do módulo *note site: c7. e as manipulações
     dependentes do site de *note sys.path: 3b4. que isso acarreta.
     Também desabilita essas manipulações se *note site: c7. for
     explicitamente importado mais tarde (chame *note site.main(): 1ebe.
     se você quiser que eles sejam acionados).

 -- Option: -u

     Força os fluxos stdout e stderr a serem sem buffer.  Esta opção não
     tem efeito no fluxo stdin.

     Veja também *note PYTHONUNBUFFERED: 1b1d.

     Alterado na versão 3.7: A camada de texto dos fluxos stdout e
     stderr agora é sem buffer.

 -- Option: -v

     Exibe uma mensagem cada vez que um módulo é inicializado, mostrando
     o local (nome do arquivo ou módulo embutido) de onde ele é
     carregado.  Quando fornecido duas vezes (‘-vv’), exibe uma mensagem
     para cada arquivo que é verificado durante a busca por um módulo.
     Também fornece informações sobre a limpeza do módulo na saída.

     Alterado na versão 3.10: O módulo *note site: c7. relata os
     caminhos específicos do site e os arquivos ‘.pth’ sendo
     processados.

     Veja também *note PYTHONVERBOSE: 1ebf.

 -- Option: -W arg

     Controle de advertência.  O mecanismo de aviso do Python por padrão
     exibe mensagens de aviso para *note sys.stderr: 940.

     As configurações mais simples aplicam uma determinada ação
     incondicionalmente a todos os avisos emitidos por um processo
     (mesmo aqueles que são ignorados por padrão):

          -Wdefault  # Avisa uma vez por local de chamada
          -Werror    # Converte para exceções
          -Walways   # Avisa toda vez
          -Wall      # Mesmo que -Walways
          -Wmodule   # Avisa uma vez por módulo chamador
          -Wonce     # Avisa uma vez por processo do Python
          -Wignore   # Nunca avisar

     Os nomes das ações podem ser abreviados conforme desejado e o
     interpretador irá resolvê-los para o nome da ação apropriado.  Por
     exemplo, ‘-Wi’ é o mesmo que ‘-Wignore’.

     A forma completa de argumento é:

          ação:mensagem:categoria:módulo:número-da-linha

     Os campos vazios correspondem a todos os valores; campos vazios à
     direita podem ser omitidos.  Por exemplo, ‘-W
     ignore::DeprecationWarning’ ignora todos os avisos de
     DeprecationWarning.

     O campo 'action' é explicado acima, mas se aplica apenas a avisos
     que correspondem aos campos restantes.

     O campo 'message' deve corresponder a toda a mensagem de aviso;
     essa correspondência não diferencia maiúsculas de minúsculas.

     O campo 'category' corresponde à categoria de aviso (ex:
     ‘DeprecationWarning’).  Deve ser um nome de classe; o teste de
     correspondência se a categoria de aviso real da mensagem é uma
     subclasse da categoria de aviso especificada.

     O campo 'module' corresponde ao nome do módulo (totalmente
     qualificado); esta correspondência diferencia maiúsculas de
     minúsculas.

     O campo 'lineno' corresponde ao número da linha, onde zero
     corresponde a todos os números da linha e, portanto, é equivalente
     a um número da linha omitido.

     Múltiplas opções *note -W: 8cd. podem ser fornecidas; quando um
     aviso corresponde a mais de uma opção, a ação para a última opção
     correspondente é executada.  As opções *note -W: 8cd. inválidas são
     ignoradas (embora, uma mensagem de aviso seja exibida sobre opções
     inválidas quando o primeiro aviso for emitido).

     Os avisos também podem ser controlados usando a variável de
     ambiente *note PYTHONWARNINGS: bc2. e de dentro de um programa
     Python usando o módulo *note warnings: 112.  Por exemplo, a função
     *note warnings.filterwarnings(): 14f1. pode ser usada para usar uma
     expressão regular na mensagem de aviso.

     Veja *note O filtro de avisos: 8cf. e *note Descrevendo filtros de
     aviso: 1ec1. para mais detalhes.

 -- Option: -x

     Pula a primeira linha do código-fonte, permitindo o uso de formas
     não-Unix de ‘#!cmd’.  Isso se destina apenas a um hack específico
     do DOS.

 -- Option: -X

     Reservado para várias opções específicas de implementação.  CPython
     atualmente define os seguintes valores possíveis:

        * ‘-X faulthandler’ para habilitar *note faulthandler: 58.  Veja
          também *note PYTHONFAULTHANDLER: 10be.

          Adicionado na versão 3.3.

        * ‘-X showrefcount’ para emitir a contagem de referências total
          e o número de blocos de memória usados quando o programa
          termina ou após cada instrução no interpretador interativo.
          Isso só funciona em *note construções de depuração: 1f9.

          Adicionado na versão 3.4.

        * ‘-X tracemalloc’ para começar a rastrear alocações de memória
          do Python usando o módulo *note tracemalloc: ff.  Por padrão,
          apenas o quadro mais recente é armazenado no traceback
          (situação da pilha de execução) de um rastro.  Use ‘-X
          tracemalloc=NFRAME’ para iniciar o rastreamento com um limite
          de traceback de quadros 'NFRAME'. Veja o *note
          tracemalloc.start(): 1ec3. e *note PYTHONTRACEMALLOC: 1ec4.
          para mais informações.

          Adicionado na versão 3.4.

        * ‘-X int_max_str_digits’ configura a *note limitação de
          comprimento de string na conversão para inteiro: 5f5.  Veja
          também *note PYTHONINTMAXSTRDIGITS: 18c2.

          Adicionado na versão 3.11.

        * ‘-X importtime’ para mostrar quanto tempo leva cada
          importação.  Mostra o nome do módulo, tempo cumulativo
          (incluindo importações aninhadas) e tempo próprio (excluindo
          importações aninhadas).  Observe que sua saída pode ser
          interrompida em aplicações multithread.  O uso típico é
          ‘python3 -X importtime -c 'import asyncio'’.  Veja também
          *note PYTHONPROFILEIMPORTTIME: b08.

          Adicionado na versão 3.7.

        * ‘-X dev’: habilita *note Modo de Desenvolvimento do Python:
          1f8, introduzindo verificações adicionais de tempo de execução
          que são muito custosas para serem habilitadas por padrão.
          Veja também *note PYTHONDEVMODE: b00.

          Adicionado na versão 3.7.

        * ‘-X utf8’ habilita o *note Modo UTF-8 do Python: 656.  ‘-X
          utf8=0’ explicitamente desabilita o *note Modo UTF-8 do
          Python: 656. (mesmo quando de outra forma seria ativado
          automaticamente).  Veja também *note PYTHONUTF8: ae8.

          Adicionado na versão 3.7.

        * ‘-X pycache_prefix=PATH’ permite a escrita de arquivos ‘.pyc’
          em uma árvore paralela enraizada em um determinado diretório
          em vez de na árvore de código.  Veja também *note
          PYTHONPYCACHEPREFIX: 9ab.

          Adicionado na versão 3.8.

        * ‘-X warn_default_encoding’ emite uma *note EncodingWarning:
          1ec5. quando a codificação padrão específica da localidade é
          usada para abrir arquivos.  Veja também *note
          PYTHONWARNDEFAULTENCODING: 7bd.

          Adicionado na versão 3.10.

        * ‘-X no_debug_ranges’ desabilita a inclusão das tabelas que
          mapeiam informações de localização extra (linha final,
          deslocamento da coluna inicial e deslocamento da coluna final)
          para cada instrução em objetos código.  Isso é útil quando
          objetos código menores e arquivos pyc são desejados, bem como
          suprimir os indicadores de localização visual extra quando o
          interpretador exibe tracebacks (situação da pilha de
          execução).  Veja também *note PYTHONNODEBUGRANGES: 5b6.

          Adicionado na versão 3.11.

        * ‘-X frozen_modules’ determina se os módulos congelados são ou
          não ignorados pelo maquinário de importação.  Um valor de ‘on’
          significa que eles são importados e ‘off’ significa que eles
          são ignorados.  O padrão é ‘on’ se este for um Python
          instalado (o caso normal).  Se estiver em desenvolvimento
          (executando a partir da árvore de origem), o padrão é ‘off’.
          Observe que os módulos congelados ‘importlib_bootstrap’ e
          ‘importlib_bootstrap_external’ são sempre usados, mesmo que
          esse sinalizador esteja definido como ‘off’.  Veja também
          *note PYTHON_FROZEN_MODULES: 18e.

          Adicionado na versão 3.11.

        * ‘-X perf’ habilita o suporte para o perfilador do Linux
          ‘perf’.  Quando essa opção for fornecida, o perfilador ‘perf’
          poderá relatar chamadas Python.  Essa opção está disponível
          apenas em algumas plataformas e não fará nada se não for
          compatível com o sistema atual.  O valor padrão é “off”.
          Consulte também: *note PYTHONPERFSUPPORT: 46e. e *note Suporte
          do Python ao perfilador perf do Linux: 18f.

          Adicionado na versão 3.12.

        * ‘-X perf_jit’ habilita o suporte para o perfilador do Linux
          ‘perf’ com suporte a DWARF. Quando essa opção for fornecida, o
          perfilador ‘perf’ poderá relatar chamadas Python usando
          informações de DWARF. Essa opção está disponível somente em
          algumas plataformas e não fará nada se não for compatível com
          o sistema atual.  O valor padrão é “off”.  Veja também: *note
          PYTHON_PERF_JIT_SUPPORT: 190. e *note Suporte do Python ao
          perfilador perf do Linux: 18f.

          Adicionado na versão 3.13.

        * ‘-X cpu_count=N’ substitui *note os.cpu_count(): 1c5, *note
          os.process_cpu_count(): 1c4. e *note
          multiprocessing.cpu_count(): fa3.  'n' deve ser maior ou igual
          a 1.  Esta opção pode ser útil para usuários que precisam
          limitar os recursos da CPU de um sistema contêiner.  Veja
          também *note PYTHON_CPU_COUNT: 210.  Se 'n' for ‘default’,
          nada será substituído.

          Adicionado na versão 3.13.

        * ‘-X presite=PACOTE.MÓDULO’ especifica um módulo que deve ser
          importado antes do módulo *note site: c7. ser executado e
          antes do módulo *note __main__: 1. existir.  Portanto, o
          módulo importado não é *note __main__: 1.  Isso pode ser usado
          para executar código antes da inicialização do Python.  Python
          precisa ser *note construído no modo de depuração: 1f9. para
          que esta opção exista.  Veja também *note PYTHON_PRESITE:
          1ec6.

          Adicionado na versão 3.13.

        * ‘-X gil=0,1’ força a GIL a ser desabilitada ou habilitada,
          respectivamente.  A definição para ‘0’ está disponível apenas
          em construções configuradas com *note -disable-gil: 174.  Veja
          também *note PYTHON_GIL: 175. e *note CPython com threads
          livres: 13f.

          Adicionado na versão 3.13.

     Também permite passar valores arbitrários e recuperá-los através do
     dicionário *note sys._xoptions: 1ec7.

     Adicionado na versão 3.2.

     Alterado na versão 3.9: Removida a opção ‘-X showalloccount’.

     Alterado na versão 3.10: Removida a opção ‘-X oldparser’.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0488/

   (2) https://peps.python.org/pep-0488/

   (3) https://peps.python.org/pep-0488/

   (4) https://peps.python.org/pep-0488/

   (5) https://peps.python.org/pep-0370/


File: python.info,  Node: Controlando cores,  Next: Opções que você não deve usar,  Prev: Opções diversas,  Up: Linha de comando

3.1.1.4 Controlando cores
.........................

O interpretador Python é configurado por padrão para usar cores para
destacar a saída em determinadas situações, como ao exibir tracebacks
(situação da pilha de execução).  Este comportamento pode ser controlado
ao definir diferentes variáveis de ambiente.

Definir a variável de ambiente ‘TERM’ como ‘dumb’ desativará a exibição
de cores.

Se a variável de ambiente FORCE_COLOR(1) estiver definida, a cor será
habilitada independentemente do valor de TERM. Isso é útil em sistemas
CI que não são terminais, mas ainda podem exibir sequências de escape
ANSI.

Se a variável de ambiente NO_COLOR(2) estiver definida, o Python
desativará todas as cores na saída.  Isto tem precedência sobre
‘FORCE_COLOR’.

Todas essas variáveis de ambiente também são usadas por outras
ferramentas para controlar a saída de cores.  Para controlar a saída de
cores apenas no interpretador Python, a variável de ambiente *note
PYTHON_COLORS: 14a. pode ser usada.  Esta variável tem precedência sobre
‘NO_COLOR’, que, por sua vez, tem precedência sobre ‘FORCE_COLOR’.

   ---------- Footnotes ----------

   (1) https://force-color.org/

   (2) https://no-color.org/


File: python.info,  Node: Opções que você não deve usar,  Prev: Controlando cores,  Up: Linha de comando

3.1.1.5 Opções que você não deve usar
.....................................

 -- Option: -J

     Reservado para uso pelo Jython(1).

   ---------- Footnotes ----------

   (1) https://www.jython.org/


File: python.info,  Node: Variáveis de ambiente,  Prev: Linha de comando,  Up: Linha de comando e ambiente

3.1.2 Variáveis de ambiente
---------------------------

Essas variáveis de ambiente influenciam o comportamento do Python, elas
são processadas antes das opções de linha de comando diferentes de -E ou
-I. É comum que as opções de linha de comando substituam as variáveis de
ambiente quando há um conflito.

 -- Variável De Ambiente: PYTHONHOME

     Altera a localização das bibliotecas padrão do Python.  Por padrão,
     as bibliotecas são pesquisadas em ‘`prefix'/lib/python`version'’ e
     ‘`exec_prefix'/lib/python`version'’, onde ‘`prefix'’ e
     ‘`exec_prefix'’ são diretórios dependentes da instalação, ambos
     padronizados para ‘/usr/local’.

     Quando *note PYTHONHOME: 3bc. é definido como um único diretório,
     seu valor substitui ‘`prefix'’ e ‘`exec_prefix'’.  Para especificar
     valores diferentes para estes, defina *note PYTHONHOME: 3bc. para
     ‘`prefix':`exec_prefix'’.

 -- Variável De Ambiente: PYTHONPATH

     Aumenta o caminho de pesquisa padrão para arquivos de módulo.  O
     formato é o mesmo da variável ‘PATH’ do shell: um ou mais caminhos
     de diretório separados por *note os.pathsep: 1ecc. (por exemplo,
     dois pontos no Unix ou ponto e vírgula no Windows).  Os diretórios
     inexistentes são ignorados silenciosamente.

     Além dos diretórios normais, entradas individuais *note PYTHONPATH:
     1053. podem referir-se a arquivos zip contendo módulos Python puros
     (tanto no código-fonte quanto na forma compilada).  Módulos de
     extensão não podem ser importados de arquivos zip.

     O caminho de pesquisa padrão depende da instalação, mas geralmente
     começa com ‘`prefix'/lib/python`version'’ (veja *note PYTHONHOME:
     3bc. acima).  É 'sempre' anexado a *note PYTHONPATH: 1053.

     Um diretório adicional será inserido no caminho de pesquisa antes
     de *note PYTHONPATH: 1053, conforme descrito acima em *note Opções
     de interface: 1eb3.  O caminho de pesquisa pode ser manipulado de
     partir de um programa em Python, por meio da variável *note
     sys.path: 3b4.

 -- Variável De Ambiente: PYTHONSAFEPATH

     Se for definido como uma string não vazia, não anexa um caminho
     potencialmente inseguro à *note sys.path: 3b4.: consulte a opção
     *note -P: 5a4. para obter detalhes.

     Adicionado na versão 3.11.

 -- Variável De Ambiente: PYTHONPLATLIBDIR

     Se for definida como uma string não vazia, ela substitui o valor
     *note sys.platlibdir: 93f.

     Adicionado na versão 3.9.

 -- Variável De Ambiente: PYTHONSTARTUP

     Se este for o nome de um arquivo legível, os comandos Python nesse
     arquivo serão executados antes que o primeiro prompt seja exibido
     no modo interativo.  O arquivo é executado no mesmo espaço de nomes
     em que os comandos interativos são executados, para que os objetos
     definidos ou importados nele possam ser usados sem qualificação na
     sessão interativa.  Você também pode alterar os prompts *note
     sys.ps1: 1ecd. e *note sys.ps2: 1ece, bem como o gancho *note
     sys.__interactivehook__: ffd, neste arquivo.

     Levanta um *note evento de auditoria: 19fa. ‘cpython.run_startup’
     com o nome de arquivo como argumento quando chamado na
     inicialização.

 -- Variável De Ambiente: PYTHONOPTIMIZE

     Se for definido como uma string não vazia, é equivalente a
     especificar a opção *note -O: ddd.  Se definido como um inteiro, é
     equivalente a especificar *note -O: ddd. várias vezes.

 -- Variável De Ambiente: PYTHONBREAKPOINT

     Se estiver definida, ela nomeia um chamável usando a notação de
     caminho com pontos.  O módulo que contém o chamável será importado
     e então o chamável será executado pela implementação padrão de
     *note sys.breakpointhook(): aea. que é chamado pelo *note
     breakpoint(): 234. embutido.  Se não for definido, ou definido como
     uma string vazia, é equivalente ao valor “pdb.set_trace”.  Definir
     isso para a string “0” faz com que a implementação padrão de *note
     sys.breakpointhook(): aea. não faça nada além de retornar
     imediatamente.

     Adicionado na versão 3.7.

 -- Variável De Ambiente: PYTHONDEBUG

     Se for definido como uma string não vazia, é equivalente a
     especificar a opção *note -d: 1ebb.  Se definido como um inteiro, é
     equivalente a especificar *note -d: 1ebb. várias vezes.

     Essa variável de ambiente requer uma *note construção de depuração
     do Python: 1f9, caso contrário, será ignorada.

 -- Variável De Ambiente: PYTHONINSPECT

     Se for definido como uma string não vazia, é equivalente a
     especificar a opção *note -i: 1523.

     Esta variável também pode ser modificada pelo código Python usando
     *note os.environ: 11f9. para forçar o modo de inspeção no
     encerramento do programa.

     Levanta um *note evento de auditoria: 19fa. ‘cpython.run_stdin’ sem
     argumentos.

     Alterado na versão 3.12.5: (também 3.11.10, 3.10.15, 3.9.20 e
     3.8.20) Emite eventos de auditoria.

     Alterado na versão 3.13: Usa PyrePL, se possível, nesse caso *note
     PYTHONSTARTUP: ffe. também é executado.  Emite eventos de
     auditoria.

 -- Variável De Ambiente: PYTHONUNBUFFERED

     Se for definido como uma string não vazia, é equivalente a
     especificar a opção *note -u: 1b1c.

 -- Variável De Ambiente: PYTHONVERBOSE

     Se for definido como uma string não vazia, é equivalente a
     especificar a opção *note -v: 146c.  Se definido como um inteiro, é
     equivalente a especificar *note -v: 146c. várias vezes.

 -- Variável De Ambiente: PYTHONCASEOK

     Se estiver definido, Python não diferencia letras maiúsculas e
     minúsculas nas instruções *note import: 5e2.  Isso só funciona no
     Windows e OS X.

 -- Variável De Ambiente: PYTHONDONTWRITEBYTECODE

     Se for definido como uma string não vazia, o Python não tentará
     escrever arquivos ‘.pyc’ na importação de módulos fonte.  Isso é
     equivalente a especificar a opção *note -B: 1414.

 -- Variável De Ambiente: PYTHONPYCACHEPREFIX

     Se estiver definido, o Python escreverá os arquivos ‘.pyc’ em uma
     árvore de diretório espelho neste caminho, em vez de nos diretórios
     ‘__pycache__’ dentro da árvore de fontes.  Isso é equivalente a
     especificar a opção *note -X: 176. ‘pycache_prefix=PATH’.

     Adicionado na versão 3.8.

 -- Variável De Ambiente: PYTHONHASHSEED

     Se esta variável não for definida ou definida como ‘random’, um
     valor aleatório é usado para semear os hashes de objetos str e
     bytes.

     Se *note PYTHONHASHSEED: 10b6. for definido como um valor inteiro,
     ele é usado como uma semente fixa para gerar o hash() dos tipos
     cobertos pela aleatorização do hash.

     Sua finalidade é permitir hash repetível, como autotestes do
     próprio interpretador, ou permitir que um cluster de processos
     Python compartilhe valores de hash.

     O número inteiro deve ser um número decimal no intervalo
     [0,4294967295].  Especificar o valor 0 desabilitará a aleatorização
     de hash.

     Adicionado na versão 3.2.3.

 -- Variável De Ambiente: PYTHONINTMAXSTRDIGITS

     Se esta variável estiver definida para um inteiro, é usada para
     configurar a *note limitação de comprimento de string na conversão
     para inteiro: 5f5. global do interpretador.

     Adicionado na versão 3.11.

 -- Variável De Ambiente: PYTHONIOENCODING

     Se for definido antes de executar o interpretador, ele substitui a
     codificação usada para stdin/stdout/stderr, na sintaxe
     ‘encodingname:errorhandler’.  Ambas as partes ‘encodingname’ e
     ‘:errorhandler’ são opcionais e têm o mesmo significado que em
     *note str.encode(): 8db.

     Para stderr, a parte ‘:errorhandler’ é ignorada; o tratador sempre
     será ‘'backslashreplace'’.

     Alterado na versão 3.4: A parte ‘encodingname’ é agora opcional.

     Alterado na versão 3.6: No Windows, a codificação especificada por
     esta variável é ignorada para buffers de console interativo, a
     menos que *note PYTHONLEGACYWINDOWSSTDIO: c76. também seja
     especificado.  Arquivos e canais redirecionados por meio de fluxos
     padrão não são afetados.

 -- Variável De Ambiente: PYTHONNOUSERSITE

     Se estiver definido, o Python não adicionará o *note diretório
     site-packages do usuário: 1ecf. a *note sys.path: 3b4.

     Ver também
     ..........

     PEP 370(1) – Diretório site-packages por usuário.

 -- Variável De Ambiente: PYTHONUSERBASE

     Define o *note diretório base do usuário: 1361, que é usado para
     calcular o caminho do *note diretório site-packages do usuário:
     1ecf. e *note caminhos de instalação: 1ed0. para ‘python -m pip
     install --user’.

     Ver também
     ..........

     PEP 370(2) – Diretório site-packages por usuário.

 -- Variável De Ambiente: PYTHONEXECUTABLE

     Se esta variável de ambiente for definida, ‘sys.argv[0]’ será
     definido com seu valor em vez do valor obtido através do tempo de
     execução C. Funciona apenas no macOS.

 -- Variável De Ambiente: PYTHONWARNINGS

     Isso é equivalente à opção *note -W: 8cd.  Se definido como uma
     string separada por vírgulas, é equivalente a especificar *note -W:
     8cd. várias vezes, com os filtros posteriores na lista tendo
     precedência sobre os anteriores na lista.

     As configurações mais simples aplicam uma determinada ação
     incondicionalmente a todos os avisos emitidos por um processo
     (mesmo aqueles que são ignorados por padrão):

          PYTHONWARNINGS=default  # Avisa uma vez por local de chamada
          PYTHONWARNINGS=error    # Converte para exceções
          PYTHONWARNINGS=always   # Avisa toda vez
          PYTHONWARNINGS=all      # Mesmo que PYTHONWARNINGS=always
          PYTHONWARNINGS=module   # Avisa uma vez por módulo chamador
          PYTHONWARNINGS=once     # Avisa uma vez por processo do Python
          PYTHONWARNINGS=ignore   # Nunca avisar

     Veja *note O filtro de avisos: 8cf. e *note Descrevendo filtros de
     aviso: 1ec1. para mais detalhes.

 -- Variável De Ambiente: PYTHONFAULTHANDLER

     Se esta variável de ambiente for definida como uma string não
     vazia, *note faulthandler.enable(): cbe. é chamado na
     inicialização: instale um tratador para os sinais *note SIGSEGV:
     10b9, *note SIGFPE: 10ba, *note SIGABRT: 10bb, *note SIGBUS: 10bc.
     e *note SIGILL: 10bd. para despejar o traceback (situação da pilha
     de execução) do Python.  Isso é equivalente à opção *note -X: 176.
     ‘faulthandler’.

     Adicionado na versão 3.3.

 -- Variável De Ambiente: PYTHONTRACEMALLOC

     Se esta variável de ambiente for definida como uma string não
     vazia, começa a rastrear as alocações de memória Python usando o
     módulo *note tracemalloc: ff.  O valor da variável é o número
     máximo de quadros armazenados em um traceback de um rastreamento.
     Por exemplo, ‘PYTHONTRACEMALLOC=1’ armazena apenas o quadro mais
     recente.  Veja a função *note tracemalloc.start(): 1ec3. para mais
     informações.  Isso é o equivalente a definir a opção *note -X: 176.
     ‘tracemalloc’.

     Adicionado na versão 3.4.

 -- Variável De Ambiente: PYTHONPROFILEIMPORTTIME

     Se esta variável de ambiente for definida como uma string não
     vazia, o Python mostrará quanto tempo leva cada importação.  Isso é
     o equivalente a definir a opção *note -X: 176. ‘importtime’.

     Adicionado na versão 3.7.

 -- Variável De Ambiente: PYTHONASYNCIODEBUG

     Se esta variável de ambiente for definida como uma string não
     vazia, habilita o *note modo de depuração: 1ed3. do módulo *note
     asyncio: a.

     Adicionado na versão 3.4.

 -- Variável De Ambiente: PYTHONMALLOC

     Define os alocadores de memória Python e/ou instale ganchos de
     depuração.

     Define a família de alocadores de memória usados pelo Python:

        * ‘default’: usa os *note alocadores padrão de memória: 1ed4.

        * ‘malloc’: usa a função ‘malloc()’ da biblioteca C para todos
          os domínios (*note PYMEM_DOMAIN_RAW: 1ed5, *note
          PYMEM_DOMAIN_MEM: c84, *note PYMEM_DOMAIN_OBJ: c82.).

        * ‘pymalloc’: usa o *note alocador pymalloc: d31. para domínios
          *note PYMEM_DOMAIN_MEM: c84. e *note PYMEM_DOMAIN_OBJ: c82. e
          usa a função ‘malloc()’ para o domínio *note PYMEM_DOMAIN_RAW:
          1ed5.

        * ‘mimalloc’: usa o *note alocador mimalloc: 1ed6. para domínios
          *note PYMEM_DOMAIN_MEM: c84. e *note PYMEM_DOMAIN_OBJ: c82. e
          usa a função ‘malloc()’ para o domínio *note PYMEM_DOMAIN_RAW:
          1ed5.

     Instala *note ganchos de depuração: 1ed7.:

        * ‘debug’: instala os ganchos de depuração sobre os *note
          alocadores padrão de memória: 1ed4.

        * ‘malloc_debug’: o mesmo que ‘malloc’, mas também instala
          ganchos de depuração.

        * ‘pymalloc_debug’: o mesmo que ‘pymalloc’, mas também instala
          ganchos de depuração.

        * ‘mimalloc_debug’: o mesmo que ‘mimalloc’, mas também instala
          ganchos de depuração.

     Adicionado na versão 3.6.

     Alterado na versão 3.7: Adicionado o alocador ‘"default"’.

 -- Variável De Ambiente: PYTHONMALLOCSTATS

     Se definido como uma string não vazia, o Python exibe estatísticas
     do *note alocador de memória pymalloc: d31. toda vez que uma nova
     arena de objeto pymalloc for criada e ao no desligamento.

     Esta variável é ignorada se a variável de ambiente *note
     PYTHONMALLOC: c7f. é usada para forçar o alocador ‘malloc()’ da
     biblioteca C, ou se Python está configurado sem suporte a
     ‘pymalloc’.

     Alterado na versão 3.6: Esta variável agora também pode ser usada
     em Python compilado no modo de lançamento.  Agora não tem efeito se
     definido como uma string vazia.

 -- Variável De Ambiente: PYTHONLEGACYWINDOWSFSENCODING

     Se definido como uma string não vazia, o modo padrão do *note
     tratador de erros e codificação do sistema de arquivos: 53b. irá
     reverter para seus valores pré-3.6 de “mbcs” e “replace”,
     respectivamente.  Caso contrário, os novos padrões “utf-8” e
     “surrogatepass” serão usados.

     Isso também pode ser habilitado em tempo de execução com *note
     sys._enablelegacywindowsfsencoding(): 2ae.

     *note Disponibilidade: 1ed8.: Windows.

     Adicionado na versão 3.6: Veja PEP 529(3) para mais detalhes.

 -- Variável De Ambiente: PYTHONLEGACYWINDOWSSTDIO

     Se definido como uma string não vazia, não usa o novo leitor e
     escritor de console.  Isso significa que os caracteres Unicode
     serão codificados de acordo com a página de código do console
     ativo, em vez de usar utf-8.

     Esta variável é ignorada se os fluxos padrão forem redirecionados
     (para arquivos ou canais) em vez de se referir aos buffers do
     console.

     *note Disponibilidade: 1ed8.: Windows.

     Adicionado na versão 3.6.

 -- Variável De Ambiente: PYTHONCOERCECLOCALE

     Se definido com o valor ‘0’, faz com que a aplicação principal de
     linha de comando Python ignore a coerção dos códigos de idioma
     legados C e POSIX baseados em ASCII para uma alternativa baseada em
     UTF-8 mais capaz.

     Se esta variável 'não' estiver definida (ou estiver definida para
     um valor diferente de ‘0’), a variável de ambiente de substituição
     de localidade ‘LC_ALL’ também não será definida, e a localidade
     atual relatada para a categoria ‘LC_CTYPE’ é a localidade ‘C’
     padrão, ou então a localidade ‘POSIX’ explicitamente baseada em
     ASCII, então a CLI do Python tentará configurar as seguintes
     localidades para a categoria ‘LC_CTYPE’ na ordem listada antes de
     carregar o tempo de execução do interpretador:

        * ‘C.UTF-8’

        * ‘C.utf8’

        * ‘UTF-8’

     Se a configuração de uma dessas categorias de local for
     bem-sucedida, a variável de ambiente ‘LC_CTYPE’ também será
     configurada de acordo no ambiente de processo atual antes que o
     tempo de execução do Python seja inicializado.  Isso garante que,
     além de ser visto pelo próprio interpretador e outros componentes
     com reconhecimento de localidade em execução no mesmo processo
     (como a biblioteca GNU ‘readline’), a configuração atualizada
     também é vista em subprocessos (independentemente de ou não esses
     processos estão executando um interpretador Python), bem como em
     operações que consultam o ambiente em vez da localidade C atual
     (como o *note locale.getdefaultlocale(): 2d9. do próprio Python).

     Configurar uma dessas localidades (explicitamente ou por meio da
     coerção de localidade implícita acima) habilita automaticamente o
     *note tratador de erros: 18fa. ‘surrogateescape’ para *note
     sys.stdin: 53d. e *note sys.stdout: ae6. (*note sys.stderr: 940.
     continua a usar ‘backslashreplace’ como faz em qualquer outra
     localidade).  Este comportamento de tratamento de fluxo pode ser
     substituído usando *note PYTHONIOENCODING: 1040. como de costume.

     Para fins de depuração, definir ‘PYTHONCOERCECLOCALE=warn’ fará com
     que o Python emita mensagens de aviso em ‘stderr’ se a coerção de
     localidade for ativada ou se uma localidade que 'teria' acionado a
     coerção ainda estiver ativa quando o Python o tempo de execução é
     inicializado.

     Observe também que mesmo quando a coerção de localidade está
     desabilitada, ou quando não consegue encontrar uma localidade de
     destino adequada, *note PYTHONUTF8: ae8. ainda será ativado por
     padrão em localidades baseadas em ASCII legadas.  Ambos os recursos
     devem ser desabilitados para forçar o interpretador a usar ‘ASCII’
     ao invés de ‘UTF-8’ para interfaces de sistema.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.7: Veja PEP 538(4) para mais detalhes.

 -- Variável De Ambiente: PYTHONDEVMODE

     Se esta variável de ambiente for definida como uma string não
     vazia, habilita *note Modo de Desenvolvimento do Python: 1f8,
     introduzindo verificações adicionais de tempo de execução que são
     muito caras para serem habilitadas por padrão.  Isso é o
     equivalente a definir a opção *note -X: 176. ‘dev’.

     Adicionado na versão 3.7.

 -- Variável De Ambiente: PYTHONUTF8

     Se definido para ‘1’, habilita o *note modo UTF-8 do Python: 656.

     Se definido para ‘0’, desabilita o *note modo UTF-8 do Python: 656.

     Definir qualquer outra string não vazia causa um erro durante a
     inicialização do interpretador.

     Adicionado na versão 3.7.

 -- Variável De Ambiente: PYTHONWARNDEFAULTENCODING

     Se esta variável de ambiente for definida como uma string não
     vazia, emite uma *note EncodingWarning: 1ec5. quando a codificação
     padrão específica da localidade é usada.

     Veja *note Ativar EncodingWarning: 1ed9. para detalhes.

     Adicionado na versão 3.10.

 -- Variável De Ambiente: PYTHONNODEBUGRANGES

     Se esta variável estiver definida, ela desabilita a inclusão das
     tabelas que mapeiam informações de localização extra (linha final,
     deslocamento da coluna inicial e deslocamento da coluna final) para
     cada instrução em objetos código.  Isso é útil quando objetos
     código menores e arquivos pyc são desejados, bem como suprimir os
     indicadores de localização visual extra quando o interpretador
     exibe tracebacks.

     Adicionado na versão 3.11.

 -- Variável De Ambiente: PYTHONPERFSUPPORT

     Se essa variável for definida como valor diferente de zero, ela
     habilitará suporte para o perfilador do Linux ‘perf’ para que as
     chamadas Python possam ser detectadas por ele.

     Se definido como ‘0’, desativa o suporte ao perfilador do Linux
     ‘perf’.

     Consulte também a opção de linha de comando *note -X perf: 176. e
     *note Suporte do Python ao perfilador perf do Linux: 18f.

     Adicionado na versão 3.12.

 -- Variável De Ambiente: PYTHON_PERF_JIT_SUPPORT

     Se essa variável for definida como valor diferente de zero, ela
     habilitará suporte para o perfilador do Linux ‘perf’ para que as
     chamadas Python possam ser detectadas por ele usando informações de
     DWARF.

     Se definido como ‘0’, desativa o suporte ao perfilador do Linux
     ‘perf’.

     Veja também a opção de linha de comando *note -X perf_jit: 176. e
     *note Suporte do Python ao perfilador perf do Linux: 18f.

     Adicionado na versão 3.13.

 -- Variável De Ambiente: PYTHON_CPU_COUNT

     Se esta variável for definida como um número inteiro positivo, ela
     substitui os valores de retorno de *note os.cpu_count(): 1c5. e
     *note os.process_cpu_count(): 1c4.

     Veja também a opção de linha de comando *note -X cpu_count: 176.

     Adicionado na versão 3.13.

 -- Variável De Ambiente: PYTHON_FROZEN_MODULES

     Se esta variável for definida como ‘on’ ou ‘off’, ela determina se
     os módulos congelados serão ou não ignorados pela maquinário de
     importação.  Um valor ‘on’ significa que eles serão importados e
     ‘off’ significa que serão ignorados.  O padrão é ‘on’ para
     construções sem depuração (o caso normal) e ‘off’ para construções
     com depuração.  Observe que os módulos congelados
     ‘importlib_bootstrap’ e ‘importlib_bootstrap_external’ são sempre
     usados, mesmo se este sinalizador estiver definido como ‘off’.

     Veja também a opção de linha de comando *note -X frozen_modules:
     176.

     Adicionado na versão 3.13.

 -- Variável De Ambiente: PYTHON_COLORS

     Se esta variável for definida como ‘1’, o interpretador irá colorir
     vários tipos de saída.  Definir como ‘0’ desativa este
     comportamento.  Veja também *note Controlando cores: 16b.

     Adicionado na versão 3.13.

 -- Variável De Ambiente: PYTHON_BASIC_REPL

     Se esta variável for definida como qualquer valor, o interpretador
     não tentará carregar o *note REPL: 16a. baseado em Python que
     requer *note curses: 2b. e *note readline: ba, e em vez disso usará
     o *note REPL: 16a. com o analisador sintático tradicional.

     Adicionado na versão 3.13.

 -- Variável De Ambiente: PYTHON_HISTORY

     Esta variável de ambiente pode ser usada para definir a localização
     de um arquivo ‘.python_history’ (por padrão, é ‘.python_history’ no
     diretório inicial do usuário).

     Adicionado na versão 3.13.

 -- Variável De Ambiente: PYTHON_GIL

     Se esta variável for definida como ‘1’, a trava global do
     interpretador (GIL) será forçada.  Definir como ‘0’ força a GIL a
     desligar (precisa do Python configurado com a opção de construção
     *note -disable-gil: 174.).

     Veja também a opção de linha de comando *note -X gil: 176, que tem
     precedência sobre esta variável, e *note CPython com threads
     livres: 13f.

     Adicionado na versão 3.13.

 -- Variável De Ambiente: PYTHON_JIT

     Em construções onde a compilação experimental just-in-time está
     disponível, esta variável pode forçar o JIT a ser desabilitado
     (‘0’) ou habilitado (‘1’) na inicialização do interpretador.

     Adicionado na versão 3.13.

* Menu:

* Variáveis de modo de depuração::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0370/

   (2) https://peps.python.org/pep-0370/

   (3) https://peps.python.org/pep-0529/

   (4) https://peps.python.org/pep-0538/


File: python.info,  Node: Variáveis de modo de depuração,  Up: Variáveis de ambiente

3.1.2.1 Variáveis de modo de depuração
......................................

 -- Variável De Ambiente: PYTHONDUMPREFS

     Se definido, Python irá despejar objetos e contagens de referências
     ainda vivas após desligar o interpretador.

     Precisa do Python configurado com a opção de construção *note
     -with-trace-refs: 395.

 -- Variável De Ambiente: PYTHONDUMPREFSFILE

     Se definido, o Python irá despejar objetos e contagens de
     referências ainda ativas após desligar o interpretador em um
     arquivo no caminho fornecido como valor para esta variável de
     ambiente.

     Precisa do Python configurado com a opção de construção *note
     -with-trace-refs: 395.

     Adicionado na versão 3.11.

 -- Variável De Ambiente: PYTHON_PRESITE

     Se esta variável for definida como um módulo, esse módulo será
     importado no início do ciclo de vida do interpretador, antes do
     módulo *note site: c7. ser executado, e antes do módulo *note
     __main__: 1. ser criado.  Portanto, o módulo importado não é
     tratado como *note __main__: 1.

     Isso pode ser usado para executar código antecipadamente durante a
     inicialização do Python.

     Para importar um submódulo, use ‘pacote.módulo’ como valor, como em
     uma instrução de importação.

     Veja também a opção de linha de comando *note -X presite: 176, que
     tem precedência sobre esta variável.

     Precisa do Python configurado com a opção de construção *note
     -with-pydebug: 424.

     Adicionado na versão 3.13.


File: python.info,  Node: Utilizando Python em plataformas Unix,  Next: Configurando o Python,  Prev: Linha de comando e ambiente,  Up: Configurações e Uso do Python

3.2 Utilizando Python em plataformas Unix
=========================================

* Menu:

* Obtendo e instalando a versão mais recente do Python::
* Compilando o Python::
* Paths e arquivos relacionados com o Python::
* Diversos: Diversos<2>.
* OpenSSL personalizado::


File: python.info,  Node: Obtendo e instalando a versão mais recente do Python,  Next: Compilando o Python,  Up: Utilizando Python em plataformas Unix

3.2.1 Obtendo e instalando a versão mais recente do Python
----------------------------------------------------------

* Menu:

* No Linux::
* No FreeBSD e OpenBSD::


File: python.info,  Node: No Linux,  Next: No FreeBSD e OpenBSD,  Up: Obtendo e instalando a versão mais recente do Python

3.2.1.1 No Linux
................

O Python vem pré-instalado na maioria das distribuições Linux e está
disponível como um pacote em todas as outras.  No entanto, há certos
recursos que você pode querer usar que não estão disponíveis no pacote
da sua distribuição.  Você pode compilar a versão mais recente do Python
a partir do código-fonte.

No caso de a versão mais recente do Python não vir pré-instalada e não
estar nos repositórios também, você pode criar pacotes para sua própria
distro.  Dê uma olhada nos seguintes links:

Ver também
..........

‘https://www.debian.org/doc/manuals/maint-guide/first.en.html’

     para usuários Debian

‘https://en.opensuse.org/Portal:Packaging’

     para usuários OpenSuse

‘https://docs.fedoraproject.org/en-US/package-maintainers/Packaging_Tutorial_GNU_Hello/’

     para usuários Fedora

‘https://slackbook.org/html/package-management-making-packages.html’

     para usuários do Slackware

* Menu:

* Instalação do IDLE::


File: python.info,  Node: Instalação do IDLE,  Up: No Linux

3.2.1.2 Instalação do IDLE
..........................

Em alguns casos, o IDLE pode não estar incluído em sua instalação do
Python.

   * Para usuários do Debian e do Ubuntu:

          sudo apt update
          sudo apt install idle

   * Para usuários do Fedora, RHEL e CentOS:

          sudo dnf install python3-idle

   * Para usuários do SUSE e do OpenSUSE:

          sudo zypper install python3-idle

   * Para usuários do Alpine Linux:

          sudo apk add python3-idle


File: python.info,  Node: No FreeBSD e OpenBSD,  Prev: No Linux,  Up: Obtendo e instalando a versão mais recente do Python

3.2.1.3 No FreeBSD e OpenBSD
............................

   * usuários do FreeBSD, para adicionar a utilização do pacote utilize:

          pkg install python3

   * Usuários do OpenBSD, para adicionar pacotes use:

          pkg_add -r python

          pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/<insert your architecture here>/python-<version>.tgz

     Por exemplo, usuários i386 podem pegar a versão 2.5.1 do Python
     usando o comando:

          pkg_add ftp://ftp.openbsd.org/pub/OpenBSD/4.2/packages/i386/python-2.5.1p2.tgz


File: python.info,  Node: Compilando o Python,  Next: Paths e arquivos relacionados com o Python,  Prev: Obtendo e instalando a versão mais recente do Python,  Up: Utilizando Python em plataformas Unix

3.2.2 Compilando o Python
-------------------------

Se você quer compilar o CPython, a primeira coisa que você precisa fazer
é baixar o código-fonte(1).  Você pode baixar a última versão ou usar o
git para fazer um clone(2).  (Se você pretende contribuir modificações,
você vai precisar um “clone”.)

O processo de compilação consiste nos comandos usuais:

     ./configure
     make
     make install

*note Opções de configuração: 1ee5. e advertências para plataformas
específicas do Unix estão amplamente documentadas no arquivo
README.rst(3) na raiz da árvore de fontes Python.

     Aviso: ‘make install’ pode sobrescrever ou mascarar o arquivo
     binário ‘python3’.  ‘make altinstall’ é, portanto, recomendado ao
     invés de ‘make install’ uma vez que o mesmo apenas instala o
     arquivo ‘`exec_prefix'/bin/python`version'’.

   ---------- Footnotes ----------

   (1) https://www.python.org/downloads/source/

   (2) https://devguide.python.org/setup/#get-the-source-code

   (3) https://github.com/python/cpython/tree/3.13/README.rst


File: python.info,  Node: Paths e arquivos relacionados com o Python,  Next: Diversos<2>,  Prev: Compilando o Python,  Up: Utilizando Python em plataformas Unix

3.2.3 Paths e arquivos relacionados com o Python
------------------------------------------------

Estes estão sujeitos a diferenças dependendo das convenções de
instalação local; *note prefix: 1ee7. e *note exec_prefix: 1ee8.
dependem da instalação e devem ser interpretados da mesma forma que para
o software GNU; eles poderão ser os mesmos.

Por exemplo, na maioria dos sistemas Linux, o padrão para ambos é
‘/usr’.

Arquivo/diretório                                   Significado
                                                    
---------------------------------------------------------------------------------------------------
                                                    
‘`exec_prefix'/bin/python3’                         Localização recomendada do interpretador.
                                                    
                                                    
‘`prefix'/lib/python`version'’,                     A localização recomendada dos diretórios
‘`exec_prefix'/lib/python`version'’                 contendo os módulos padrão.
                                                    
                                                    
‘`prefix'/include/python`version'’,                 Localizações recomendadas dos diretórios
‘`exec_prefix'/include/python`version'’             contendo os arquivos de inclusão necessários
                                                    para o desenvolvimento de extensões Python e
                                                    incorporação do interpretador.
                                                    


File: python.info,  Node: Diversos<2>,  Next: OpenSSL personalizado,  Prev: Paths e arquivos relacionados com o Python,  Up: Utilizando Python em plataformas Unix

3.2.4 Diversos
--------------

Para usar facilmente scripts Python no Unix, você precisa torná-los
executáveis, por exemplo, com

     $ chmod +x script

e colocar uma linha Shebang apropriada no topo do script.  Uma boa
escolha normalmente é

     #!/usr/bin/env python3

que procura o interpretador do Python no conjunto ‘PATH’.  No entanto,
alguns sistemas Unix podem não ter o comando ‘env’, então você pode
precisar codificar ‘/usr/bin/python3’ como o caminho do interpretador.

Para usar comandos Shell em seus scripts Python, veja o módulo *note
subprocess: d6.


File: python.info,  Node: OpenSSL personalizado,  Prev: Diversos<2>,  Up: Utilizando Python em plataformas Unix

3.2.5 OpenSSL personalizado
---------------------------

  1. Para usar a configuração OpenSSL do seu fornecedor e armazenamento
     confiável do sistema, localize o diretório com o arquivo
     ‘openssl.cnf’ ou link simbólico em ‘/etc’.  Na maioria das
     distribuições o arquivo está em ‘/etc/ssl’ ou em ‘/etc/pki/tls’.  O
     diretório também deve conter um arquivo ‘cert.pem’ e/ou um
     diretório ‘certs’.

          $ find /etc/ -name openssl.cnf -printf "%h\n"
          /etc/ssl

  2. Baixe, construa e instale o OpenSSL. Certifique-se de usar
     ‘install_sw’ e não ‘install’.  O destino ‘install_sw’ não substitui
     o ‘openssl.cnf’.

          $ curl -O https://www.openssl.org/source/openssl-VERSÃO.tar.gz
          $ tar xzf openssl-VERSÃO
          $ pushd openssl-VERSÃO
          $ ./config \
              --prefix=/usr/local/custom-openssl \
              --libdir=lib \
              --openssldir=/etc/ssl
          $ make -j1 depend
          $ make -j8
          $ make install_sw
          $ popd

  3. Construa o Python com o OpenSSL personalizado (veja as opções
     configure ‘--with-openssl’ e ‘--with-openssl-rpath’)

          $ pushd python-3.x.x
          $ ./configure -C \
              --with-openssl=/usr/local/custom-openssl \
              --with-openssl-rpath=auto \
              --prefix=/usr/local/python-3.x.x
          $ make -j8
          $ make altinstall

     Nota: As versões de patches do OpenSSL têm uma ABI compatível com
     versões anteriores.  Você não precisa recompilar o Python para
     atualizar o OpenSSL. É suficiente substituir a instalação
     personalizada do OpenSSL por uma versão mais recente.


File: python.info,  Node: Configurando o Python,  Next: Utilizando Python no Windows,  Prev: Utilizando Python em plataformas Unix,  Up: Configurações e Uso do Python

3.3 Configurando o Python
=========================

* Menu:

* Requisitos de construção::
* Arquivos gerados::
* Opções de configuração::
* Sistema de Construção Python::
* Sinalizadores do compilador e do vinculador::


File: python.info,  Node: Requisitos de construção,  Next: Arquivos gerados,  Up: Configurando o Python

3.3.1 Requisitos de construção
------------------------------

Recursos e versões mínimas necessários para construir o CPython:

   * Um compilador C11(1).  Não são necessários recursos opcionais do
     C11(2).

   * No Windows, é necessário o Microsoft Visual Studio 2017 ou
     posterior.

   * Suporte para números de ponto flutuante do IEEE 754(3) e
     Not-a-Number (NaN) de ponto flutuante(4).

   * Suporte a threads.

   * OpenSSL 1.1.1 é a versão mínima e OpenSSL 3.0.18 é a versão mínima
     recomendada para os módulos de extensão *note ssl: d0. e *note
     hashlib: 68.

   * SQLite 3.15.2 para o módulo de extensão *note sqlite3: cf.

   * Tcl/Tk 8.5.12 para o módulo *note tkinter: f0.

   * libmpdec(5) 2.5.0 para o módulo *note decimal: 36.

   * Autoconf 2.71 e aclocal 1.16.5 são necessários para regenerar o
     script ‘configure’.

Alterado na versão 3.1: Agora é necessária a versão 8.3.1 do Tcl/Tk.

Alterado na versão 3.5: No Windows, agora é necessário o Visual Studio
2015 ou posterior.  Agora é necessária a versão 8.4 do Tcl/Tk.

Alterado na versão 3.6: Recursos selecionados do C99 agora são
necessários, como funções ‘<stdint.h>’ e ‘static inline’.

Alterado na versão 3.7: Suporte a threads e OpenSSL 1.0.2 agora são
necessários.

Alterado na versão 3.10: OpenSSL 1.1.1 agora é necessário.  Requer
SQLite 3.7.15.

Alterado na versão 3.11: Compilador C11, suporte a IEEE 754 e NaN agora
são necessários.  No Windows, é necessário o Visual Studio 2017 ou
posterior.  A versão 8.5.12 do Tcl/Tk agora é necessária para o módulo
*note tkinter: f0.

Alterado na versão 3.13: Autoconf 2.71, aclocal 1.16.5 e SQLite 3.15.2
agora são necessários.

Veja também PEP 7(6) “Guia de estilo para código C” e PEP 11(7) “Suporte
do CPython a plataformas”.

   ---------- Footnotes ----------

   (1) https://en.cppreference.com/w/c/11

   (2) 
https://en.wikipedia.org/wiki/C11_(C_standard_revision)#Optional_features

   (3) https://en.wikipedia.org/wiki/IEEE_754

   (4) https://en.wikipedia.org/wiki/NaN#Floating_point

   (5) https://www.bytereef.org/mpdecimal/doc/libmpdec/

   (6) https://peps.python.org/pep-0007/

   (7) https://peps.python.org/pep-0011/


File: python.info,  Node: Arquivos gerados,  Next: Opções de configuração,  Prev: Requisitos de construção,  Up: Configurando o Python

3.3.2 Arquivos gerados
----------------------

Para reduzir as dependências de construção, o código-fonte do Python
contém vários arquivos gerados.  Comandos para regenerar todos os
arquivos gerados:

     make regen-all
     make regen-stdlib-module-names
     make regen-limited-abi
     make regen-configure

O arquivo ‘Makefile.pre.in’ documenta os arquivos gerados, suas entradas
e ferramentas usadas para regenerá-los.  Procure por alvos ‘regen-*’ de
make.

* Menu:

* Script configure::


File: python.info,  Node: Script configure,  Up: Arquivos gerados

3.3.2.1 Script configure
........................

O comando ‘make regen-configure’ regera o arquivo ‘aclocal.m4’ e o
script ‘configure’ usando o shell script
‘Tools/build/regen-configure.sh’, o qual usa um contêiner Ubuntu para
obter as mesmas versões de ferramentas e ter uma saída reproduzível.

O contêiner é opcional, o seguinte comando pode ser executado
localmente:

     autoreconf -ivf -Werror

Os arquivos gerados podem mudar dependendo das versões exatas do
‘autoconf-archive’, ‘aclocal’ e ‘pkg-config’.


File: python.info,  Node: Opções de configuração,  Next: Sistema de Construção Python,  Prev: Arquivos gerados,  Up: Configurando o Python

3.3.3 Opções de configuração
----------------------------

Liste todas as opções do ‘configure’ usando:

     ./configure --help

Veja também o ‘Misc/SpecialBuilds.txt’ na distribuição de código-fonte
do Python.

* Menu:

* Opções gerais::
* Opções do compilador C::
* Opções da ligação::
* Opções para dependências de terceiros::
* Opções de WebAssembly::
* Opções de instalação::
* Opções de desempenho::
* Compilação de depuração do Python::
* Opções de depuração::
* Opções da ligação: Opções da ligação<2>.
* Opções da biblioteca::
* Opções de segurança::
* Opções do macOS::
* Opções do iOS::
* Opções de compilação cruzada::


File: python.info,  Node: Opções gerais,  Next: Opções do compilador C,  Up: Opções de configuração

3.3.3.1 Opções gerais
.....................

 -- Option: --enable-loadable-sqlite-extensions

     Suporte a extensões carregáveis no módulo de extensão ‘_sqlite’ (o
     padrão é não) do módulo *note sqlite3: cf.

     Veja o método *note sqlite3.Connection.enable_load_extension():
     841. do módulo *note sqlite3: cf.

     Adicionado na versão 3.6.

 -- Option: --disable-ipv6

     Desabilita suporte a IPv6 (habilitado por padrão se houver
     suporte), veja o módulo *note socket: cc.

 -- Option: --enable-big-digits=[15|30]

     Define o tamanho em bits dos dígitos de *note int: 257. do Python:
     15 ou 30 bits.

     Por padrão, o tamanho dos dígitos é 30.

     Define o ‘PYLONG_BITS_IN_DIGIT’ para ‘15’ ou ‘30’.

     Veja *note sys.int_info.bits_per_digit: 12d5.

 -- Option: --with-suffix=SUFFIX

     Define o sufixo do executável do Python para 'SUFFIX'.

     O sufixo padrão é ‘.exe’ no Windows e macOS (executável
     ‘python.exe’), ‘.js’ em nó Emscripten, ‘.html’ em navegador
     Emscripten, ‘.wasm’ em WASI e uma string vazia em outras
     plataformas (executável ‘python’).

     Alterado na versão 3.11: O sufixo padrão na plataforma WASM é um
     entre ‘.js’, ‘.html’ ou ‘.wasm’

 -- Option: --with-tzpath=<list of absolute paths separated by pathsep>

     Seleciona o caminho de pesquisa de fuso horário padrão para *note
     zoneinfo.TZPATH: 1ef8.  Veja a *note Configuração de tempo de
     compilação: 1ef9. do módulo *note zoneinfo: 134.

     Padrão:
     ‘/usr/share/zoneinfo:/usr/lib/zoneinfo:/usr/share/lib/zoneinfo:/etc/zoneinfo’.

     Veja o separador de caminhos *note os.pathsep: 1ecc.

     Adicionado na versão 3.9.

 -- Option: --without-decimal-contextvar

     Constrói o módulo de extensão ‘_decimal’ usando um contexto local
     de thread ao invés de um contexto local de corrotina (padrão), veja
     o módulo *note decimal: 36.

     Veja *note decimal.HAVE_CONTEXTVAR: 1efb. e o módulo *note
     contextvars: 24.

     Adicionado na versão 3.9.

 -- Option: --with-dbmliborder=<list of backend names>

     Substitui a ordem de verificação de backends de banco de dados para
     o módulo *note dbm: 31.

     Um valor válido é uma string separada por dois pontos (‘:’) com os
     nomes de backend:

        * ‘ndbm’;

        * ‘gdbm’;

        * ‘bdb’.

 -- Option: --without-c-locale-coercion

     Desabilita a coerção de localidade C para uma localidade baseada em
     UTF-8 (ativada por padrão).

     Não define a macro ‘PY_COERCE_C_LOCALE’.

     Consulte *note PYTHONCOERCECLOCALE: ae5. e a PEP 538(1).

 -- Option: --without-freelists

     Desabilita todas as listas livres, exceto o singleton de tupla
     vazia.

     Adicionado na versão 3.11.

 -- Option: --with-platlibdir=DIRNAME

     Nome do diretório da biblioteca Python (o padrão é ‘lib’).

     Fedora e SuSE usam ‘lib64’ em plataformas de 64 bits.

     Veja *note sys.platlibdir: 93f.

     Adicionado na versão 3.9.

 -- Option: --with-wheel-pkg-dir=PATH

     Diretório de pacotes de wheel usados pelo módulo *note ensurepip:
     55. (nenhum por padrão).

     Algumas políticas de empacotamento de distribuição do Linux
     recomendam contra o empacotamento de dependências.  Por exemplo, o
     Fedora instala pacotes wheel no diretório
     ‘/usr/share/python-wheels/’ e não instala o pacote
     ‘ensurepip._bundled’.

     Adicionado na versão 3.10.

 -- Option: --with-pkg-config=[check|yes|no]

     Se o configure deve usar ‘pkg-config’ para detectar dependências de
     construção.

        * ‘check’ (padrão): ‘pkg-config’ é opcional

        * ‘yes’: ‘pkg-config’ é obrigatório

        * ‘no’: configure não usa ‘pkg-config’ mesmo quando presente

     Adicionado na versão 3.11.

 -- Option: --enable-pystats

     Ativa a coleta de estatísticas internas de desempenho do Python.

     Por padrão, a coleta de estatísticas está desativada.  Use o
     comando ‘python3 -X pystats’ ou defina a variável de ambiente
     ‘PYTHONSTATS=1’ para ativar a coleta de estatísticas na
     inicialização do Python.

     Na saída do Python, despeja as estatísticas se a coleta de
     estatísticas estiver ativada e não apagada.

     Efeitos:

        * Adiciona a opção de linha de comando *note -X pystats: 176.

        * Adiciona a variável de ambiente ‘PYTHONSTATS’.

        * Define a macro ‘Py_STATS’.

        * Adiciona funções ao módulo *note sys: d9.:

             * ‘sys._stats_on()’: Ativa a coleta de estatísticas.

             * ‘sys._stats_off()’: Desativa a coleta de estatísticas.

             * ‘sys._stats_clear()’: Apaga as estatísticas.

             * ‘sys._stats_dump()’: Despeja as estatísticas no arquivo e
               apaga as estatísticas.

     As estatísticas serão despejadas em um arquivo arbitrário
     (provavelmente único) em ‘/tmp/py_stats/’ (Unix) ou
     ‘C:\temp\py_stats\’ (Windows).  Se aquele diretório não existir, os
     resultados serão enviados para stderr.

     Use ‘Tools/scripts/summarize_stats.py’ para ler as estatísticas.

     Estatísticas:

        * Código de operação:

             * Especialização: sucesso, fracasso, acerto, adiado, erro,
               deopt, falhas;

             * Contagem de execuções;

             * Contagem em pares.

        * Chamada:

             * Chamadas Python em linha;

             * Chamadas a PyEval;

             * Quadros enviados;

             * Objetos quadro criados;

             * Chamadas de Eval: vetor, gerador, legado, função
               VECTORCALL, classe de construção, slot, função “ex”, API,
               método.

        * Objeto:

             * incref e decref;

             * incref e decref do interpretador;

             * alocações: tudo, 512 bytes, 4 kiB, big;

             * memória livre;

             * listas de memória livre para/de;

             * Dicionário materializado/desmaterializado;

             * cache de tipo;

             * tentativas de otimização;

             * rastros de otimização criados/executados;

             * uops executados.

        * Coletor de lixo:

             * Coletas de lixo;

             * Objetos visitados;

             * Objetos coletados.

     Adicionado na versão 3.11.

 -- Option: --disable-gil

     Habilita suporte 'experimental' para execução de Python sem a *note
     trava global do interpretador: 148. (GIL): construção de com
     threads livres.

     Define a macro ‘Py_GIL_DISABLED’ e adiciona ‘"t"’ a *note
     sys.abiflags: a6d.

     Veja *note CPython com threads livres: 13f. para mais detalhes.

     Adicionado na versão 3.13.

 -- Option: --enable-experimental-jit=[no|yes|yes-off|interpreter]

     Indica como integrar o *note compilador JIT: 140.

        * ‘no’ - constrói o interpretador sem o JIT.

        * ‘yes’ - constrói o interpretador com o JIT.

        * ‘yes-off’ - constrói o interpretador com o JIT, mas
          desabilitado por padrão.

        * ‘interpreter’ - constrói o interpretador sem o JIT, mas com o
          interpretador habilitado para nível 2.

     Por convenção, ‘--enable-experimental-jit’ é uma abreviação de
     ‘--enable-experimental-jit=yes’.

          Nota: Ao construir o CPython com o JIT habilitado,
          certifique-se de que seu sistema tenha o Python 3.11 ou
          posterior instalado.

     Adicionado na versão 3.13.

 -- Option: PKG_CONFIG

     Caminho para o utilitário ‘pkg-config’.

 -- Option: PKG_CONFIG_LIBDIR

 -- Option: PKG_CONFIG_PATH

     Opções do ‘pkg-config’.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0538/


File: python.info,  Node: Opções do compilador C,  Next: Opções da ligação,  Prev: Opções gerais,  Up: Opções de configuração

3.3.3.2 Opções do compilador C
..............................

 -- Option: CC

     Comando do compilador C.

 -- Option: CFLAGS

     Sinalizadores do compilador C.

 -- Option: CPP

     Comando do pré-processador C.

 -- Option: CPPFLAGS

     Sinalizadores do pré-processador C, p.ex., ‘-IINCLUDE_DIR’.


File: python.info,  Node: Opções da ligação,  Next: Opções para dependências de terceiros,  Prev: Opções do compilador C,  Up: Opções de configuração

3.3.3.3 Opções da ligação
.........................

 -- Option: LDFLAGS

     Sinalizadores do vinculador.  p.ex., ‘-LLIBRARY_DIRECTORY’.

 -- Option: LIBS

     Bibliotecas para passar para o vinculador, p.ex.  ‘-lLIBRARY’.

 -- Option: MACHDEP

     Nome para arquivos de biblioteca dependentes de máquina.


File: python.info,  Node: Opções para dependências de terceiros,  Next: Opções de WebAssembly,  Prev: Opções da ligação,  Up: Opções de configuração

3.3.3.4 Opções para dependências de terceiros
.............................................

Adicionado na versão 3.11.

 -- Option: BZIP2_CFLAGS

 -- Option: BZIP2_LIBS

     Sinalizadores de compilador C e vinculador para vincular Python a
     ‘libbz2’, usados pelo módulo *note bz2: 13, substituindo
     ‘pkg-config’.

 -- Option: CURSES_CFLAGS

 -- Option: CURSES_LIBS

     Sinalizadores de compilador C e vinculador para ‘libncurses’ ou
     ‘libncursesw’, usados pelo módulo *note curses: 2b, substituindo
     ‘pkg-config’.

 -- Option: GDBM_CFLAGS

 -- Option: GDBM_LIBS

     Sinalizadores de compilador C e vinculador para ‘gdbm’.

 -- Option: LIBB2_CFLAGS

 -- Option: LIBB2_LIBS

     Sinalizadores de compilador C e vinculador para ‘libb2’ (*note
     BLAKE2: 1f17.), usados pelo módulo *note hashlib: 68, substituindo
     ‘pkg-config’.

 -- Option: LIBEDIT_CFLAGS

 -- Option: LIBEDIT_LIBS

     Sinalizadores de compilador C e vinculador para ‘libedit’, usados
     pelo módulo *note readline: ba, substituindo ‘pkg-config’.

 -- Option: LIBFFI_CFLAGS

 -- Option: LIBFFI_LIBS

     Sinalizadores de compilador C e vinculador para ‘libffi’, usados
     pelo módulo *note ctypes: 2a, substituindo ‘pkg-config’.

 -- Option: LIBMPDEC_CFLAGS

 -- Option: LIBMPDEC_LIBS

     Sinalizadores de compilador C e vinculador para ‘libmpdec’, usados
     pelo módulo *note decimal: 36, substituindo ‘pkg-config’.

          Nota: Estas variáveis de ambiente não têm efeito a menos que
          *note -with-system-libmpdec: 412. seja especificado.

 -- Option: LIBLZMA_CFLAGS

 -- Option: LIBLZMA_LIBS

     Sinalizadores de compilador C e vinculador para ‘liblzma’, usados
     pelo módulo *note lzma: 8a, substituindo ‘pkg-config’.

 -- Option: LIBREADLINE_CFLAGS

 -- Option: LIBREADLINE_LIBS

     Sinalizadores de compilador C e vinculador para ‘libreadline’,
     usados pelo módulo *note readline: ba, substituindo ‘pkg-config’.

 -- Option: LIBSQLITE3_CFLAGS

 -- Option: LIBSQLITE3_LIBS

     Sinalizadores de compilador C e vinculador para ‘libsqlite3’,
     usados pelo módulo *note sqlite3: cf, substituindo ‘pkg-config’.

 -- Option: LIBUUID_CFLAGS

 -- Option: LIBUUID_LIBS

     Sinalizadores de compilador C e vinculador para ‘libuuid’, usados
     pelo módulo *note uuid: 110, substituindo ‘pkg-config’.

 -- Option: PANEL_CFLAGS

 -- Option: PANEL_LIBS

     Sinalizadores de compilador C e vinculador para PANEL, substituindo
     ‘pkg-config’.

     Sinalizadores de compilador C e vinculador para ‘libpanel’ ou
     ‘libpanelw’, usados pelo módulo *note curses.panel: 2d,
     substituindo ‘pkg-config’.

 -- Option: TCLTK_CFLAGS

 -- Option: TCLTK_LIBS

     Sinalizadores de compilador C e vinculador para TCLTK, substituindo
     ‘pkg-config’.;

 -- Option: ZLIB_CFLAGS

 -- Option: ZLIB_LIBS

     Sinalizadores de compilador C e vinculador para ‘libzlib’, usados
     pelo módulo *note gzip: 67, substituindo ‘pkg-config’.


File: python.info,  Node: Opções de WebAssembly,  Next: Opções de instalação,  Prev: Opções para dependências de terceiros,  Up: Opções de configuração

3.3.3.5 Opções de WebAssembly
.............................

 -- Option: --with-emscripten-target=[browser|node]

     Define o “sabor” de construção para ‘wasm32-emscripten’.

        * ‘browser’ (padrão): pré-carrega stdlib mínima, MEMFS padrão.

        * ‘node’: suporte a NODERAWFS e pthread.

     Adicionado na versão 3.11.

 -- Option: --enable-wasm-dynamic-linking

     Ativa o suporte de vinculação dinâmica para WASM.

     A vinculação dinâmica permite ‘dlopen’.  O tamanho do arquivo
     executável aumenta devido à eliminação limitada de código morto e
     recursos adicionais.

     Adicionado na versão 3.11.

 -- Option: --enable-wasm-pthreads

     Ativa o suporte a pthreads para WASM.

     Adicionado na versão 3.11.


File: python.info,  Node: Opções de instalação,  Next: Opções de desempenho,  Prev: Opções de WebAssembly,  Up: Opções de configuração

3.3.3.6 Opções de instalação
............................

 -- Option: --prefix=PREFIX

     Instala arquivos independentes de arquitetura em PREFIX. No Unix, o
     padrão é ‘/usr/local’.

     Este valor pode ser recuperado em tempo de execução usando *note
     sys.prefix: 3b6.

     Como exemplo, pode-se usar ‘--prefix="$HOME/.local/"’ para instalar
     um Python em seu diretório pessoal (home).

 -- Option: --exec-prefix=EPREFIX

     Instala arquivos dependentes de arquitetura no EPREFIX, o padrão é
     *note -prefix: 1ee7.

     Este valor pode ser recuperado em tempo de execução usando *note
     sys.exec_prefix: 3b2.

 -- Option: --disable-test-modules

     Não constrói nem instala módulos de teste, como o pacote *note
     test: e2. ou o módulo de extensão ‘_testcapi’ (construído e
     instalado por padrão).

     Adicionado na versão 3.10.

 -- Option: --with-ensurepip=[upgrade|install|no]

     Seleciona o comando *note ensurepip: 55. executado na instalação do
     Python:

        * ‘upgrade’ (padrão): executa o comando ‘python -m ensurepip
          --altinstall --upgrade’.

        * ‘install’: executa o comando ‘python -m ensurepip
          --altinstall’;

        * ‘no’: não executa ensurepip;

     Adicionado na versão 3.6.


File: python.info,  Node: Opções de desempenho,  Next: Compilação de depuração do Python,  Prev: Opções de instalação,  Up: Opções de configuração

3.3.3.7 Opções de desempenho
............................

Configurar o Python usando ‘--enable-optimizations --with-lto’ (PGO +
LTO) é o recomendado para melhor desempenho.  O sinalizador experimental
‘--enable-bolt’ também pode ser usado para melhorar o desempenho.

 -- Option: --enable-optimizations

     Habilita a otimização guiada por perfil (PGO, do inglês Profile
     Guided Optimization) usando *note PROFILE_TASK: 1800. (desabilitado
     por padrão).

     O compilador C Clang requer o programa ‘llvm-profdata’ para PGO. No
     macOS, o GCC também exige: o GCC é apenas um apelido para o Clang
     no macOS.

     Desabilita também a interposição semântica no libpython se
     ‘--enable-shared’ e GCC forem usados: adiciona
     ‘-fno-semantic-interposition’ aos sinalizadores do compilador e do
     vinculador.

          Nota: Durante a construção, você poderá encontrar avisos do
          compilador sobre a indisponibilidade de dados de perfil para
          alguns arquivos fonte.  Esses avisos são inofensivos, pois
          apenas um subconjunto do código é exercido durante a aquisição
          de dados de perfil.  Para desativar esses avisos no Clang,
          suprima-os manualmente adicionando
          ‘-Wno-profile-instr-unprofiled’ a *note CFLAGS: 14ff.

     Adicionado na versão 3.6.

     Alterado na versão 3.10: Usa ‘-fno-semantic-interposition’ no GCC.

 -- Variável De Ambiente: PROFILE_TASK

     Variável de ambiente usada no Makefile: argumentos de linha de
     comando do Python para a tarefa de geração de PGO.

     Padrão: ‘-m test --pgo --timeout=$(TESTTIMEOUT)’.

     Adicionado na versão 3.8.

     Alterado na versão 3.13: A falha da tarefa não é mais ignorada
     silenciosamente.

 -- Option: --with-lto=[full|thin|no|yes]

     Habilita o otimização em tempo de vinculação (LTO, do inglês Link
     Time Optimization) em qualquer construção (desabilitado por
     padrão).

     O compilador C Clang requer ‘llvm-ar’ para LTO (‘ar’ no macOS), bem
     como um vinculador compatível com LTO (‘ld.gold’ ou ‘lld’).

     Adicionado na versão 3.6.

     Adicionado na versão 3.11: Para usar o recurso ThinLTO, use
     ‘--with-lto=thin’ no Clang.

     Alterado na versão 3.12: Usa ThinLTO como política de otimização
     padrão no Clang se o compilador aceitar o sinalizador.

 -- Option: --enable-bolt

     Habilita o uso do otimizador binário pós-vinculação BOLT(1)
     (desabilitado por padrão).

     BOLT faz parte do projeto LLVM, mas nem sempre está incluído em
     suas distribuições binárias.  Este sinalizador requer que
     ‘llvm-bolt’ e ‘merge-fdata’ estejam disponíveis.

     BOLT ainda é um projeto relativamente novo, então este sinalizador
     deve ser considerado experimental por enquanto.  Como esta
     ferramenta opera em código de máquina, seu sucesso depende de uma
     combinação do ambiente de construção + os outros argumentos de
     configuração de otimização + a arquitetura da CPU, e nem todas as
     combinações são suportadas.  Versões do BOLT anteriores ao LLVM 16
     são conhecidas por travar o BOLT em alguns cenários.  O uso do LLVM
     16 ou mais recente para otimização do BOLT é fortemente
     incentivado.

     As variáveis ‘BOLT_INSTRUMENT_FLAGS’ e ‘BOLT_APPLY_FLAGS’ do
     ‘configure’ podem ser definidas para substituir o conjunto padrão
     de argumentos para ‘llvm-bolt’ para instrumentar e aplicar dados
     BOLT aos binários , respectivamente.

     Adicionado na versão 3.12.

 -- Option: BOLT_APPLY_FLAGS

     Argumentos para ‘llvm-bolt’ ao criar um binário otimizado com
     BOLT(2).

     Adicionado na versão 3.12.

 -- Option: BOLT_INSTRUMENT_FLAGS

     Argumentos para ‘llvm-bolt’ ao instrumentar binários.

     Adicionado na versão 3.12.

 -- Option: --with-computed-gotos

     Habilita “gotos” computados no laço de avaliação (habilitado por
     padrão em compiladores suportados).

 -- Option: --without-mimalloc

     Desativa o alocador rápido *note mimalloc: 1ed6. (habilitado por
     padrão).

     Veja também a variável de ambiente *note PYTHONMALLOC: c7f.

 -- Option: --without-pymalloc

     Desabilita o alocador de memória especializado do Python *note
     pymalloc: d31. (habilitado por padrão).

     Veja também a variável de ambiente *note PYTHONMALLOC: c7f.

 -- Option: --without-doc-strings

     Desabilita as strings de documentação estática para reduzir o
     consumo de memória (habilitado por padrão).  As strings de
     documentação definidas em Python não são afetadas.

     Não define a macro ‘WITH_DOC_STRINGS’.

     Veja a macro ‘PyDoc_STRVAR()’.

 -- Option: --enable-profiling

     Habilita o perfil de código a nível C com ‘gprof’ (desabilitado por
     padrão).

 -- Option: --with-strict-overflow

     Adiciona ‘-fstrict-overflow’ aos sinalizadores do compilador C (por
     padrão adicionamos ‘-fno-strict-overflow’).

   ---------- Footnotes ----------

   (1) https://github.com/llvm/llvm-project/tree/main/bolt

   (2) https://github.com/facebookarchive/BOLT


File: python.info,  Node: Compilação de depuração do Python,  Next: Opções de depuração,  Prev: Opções de desempenho,  Up: Opções de configuração

3.3.3.8 Compilação de depuração do Python
.........................................

Uma compilação de depuração é Python compilada com a opção de
configuração *note -with-pydebug: 424.

Efeitos de uma compilação de depuração:

   * Exibe todos os avisos por padrão: a lista de filtros de aviso
     padrão está vazia no módulo *note warnings: 112.

   * Adiciona ‘d’ a *note sys.abiflags: a6d.

   * Adiciona a função ‘sys.gettotalrefcount()’.

   * Adiciona a opção de linha de comando *note -X showrefcount: 176.

   * Adiciona a opção de linha de comando *note -d: 1ebb. e a variável
     de ambiente *note PYTHONDEBUG: 1ebc. para depurar o analisador
     sintático.

   * Adiciona suporte para a variável ‘__lltrace__’: habilita o
     rastreamento de baixo nível no laço de avaliação de bytecode se a
     variável estiver definida.

   * Instala *note ganchos de depuração nos alocadores de memória: 1ed4.
     para detectar estouro de buffer e outros erros de memória.

   * Define as macros ‘Py_DEBUG’ e ‘Py_REF_DEBUG’.

   * Adiciona verificações de tempo de execução: código cercado por
     ‘#ifdef Py_DEBUG’ e ‘#endif’.  Habilita as asserções ‘assert(...)’
     e ‘_PyObject_ASSERT(...)’: não define a macro ‘NDEBUG’ (veja também
     a configuração *note -with-assertions: 38c. opção).  Principais
     verificações de tempo de execução:

        * Adiciona verificações de sanidade nos argumentos da função.

        * Objetos Unicode e int são criados com sua memória preenchida
          com um padrão para detectar o uso de objetos não
          inicializados.

        * Garante que as funções que podem limpar ou substituir a
          exceção atual não sejam chamadas com uma exceção levantada.

        * Verifica se as funções desalocadoras não alteram a exceção
          atual.

        * O coletor de lixo (função *note gc.collect(): a43.) executa
          algumas verificações básicas na consistência dos objetos.

        * A macro ‘Py_SAFE_DOWNCAST()’ verifica o underflow e o overflow
          de inteiros ao fazer o downcast de tipos largos para tipos
          estreitos.

Veja também o *note Modo de Desenvolvimento do Python: 1f8. e a opção de
configuração *note -with-trace-refs: 395.

Alterado na versão 3.8: Construções de lançamento e construções de
depuração agora são compatíveis com ABI: definir a macro ‘Py_DEBUG’ não
implica mais na macro ‘Py_TRACE_REFS’ (consulte a opção *note
-with-trace-refs: 395.).


File: python.info,  Node: Opções de depuração,  Next: Opções da ligação<2>,  Prev: Compilação de depuração do Python,  Up: Opções de configuração

3.3.3.9 Opções de depuração
...........................

 -- Option: --with-pydebug

     *note Construção de depuração do Python: 1f9.: define a macro
     ‘Py_DEBUG’ (desabilitada por padrão).

 -- Option: --with-trace-refs

     Habilita referências de rastreamento para fins de depuração
     (desabilitado por padrão).

     Efeitos:

        * Define a macro ‘Py_TRACE_REFS’.

        * Adiciona a função *note sys.getobjects(): 427.

        * Adiciona a variável de ambiente *note PYTHONDUMPREFS: 9ae.

     A variável de ambiente *note PYTHONDUMPREFS: 9ae. pode ser usada
     para despejar objetos e contagens de referências ainda ativas na
     saída do Python.

     *note Objetos alocados estaticamente: 77f. não são rastreados.

     Adicionado na versão 3.8.

     Alterado na versão 3.13: Esta construção agora é compatibilidade de
     ABI com a construção de lançamento e *note construção de depuração:
     1f9.

 -- Option: --with-assertions

     Constrói com asserções C habilitadas (o padrão é não):
     ‘assert(...);’ e ‘_PyObject_ASSERT(...);’.

     Se definido, a macro ‘NDEBUG’ não é definida na variável do
     compilador *note OPT: 1f3b.

     Veja também a opção *note -with-pydebug: 424. (*note construção de
     depuração: 1f9.) que também habilita asserções.

     Adicionado na versão 3.6.

 -- Option: --with-valgrind

     Habilita suporte ao Valgrind (o padrão é não).

 -- Option: --with-dtrace

     Habilita suporte ao DTrace (o padrão é não).

     Veja *note Instrumentando o CPython com DTrace e SystemTap: c87.

     Adicionado na versão 3.6.

 -- Option: --with-address-sanitizer

     Habilita o detector de erros de memória AddressSanitizer, ‘asan’ (o
     padrão é não).  Para melhorar os recursos de detecção do ASan, você
     também pode combinar isso com *note -without-pymalloc: 1f36. para
     desabilitar o alocador especializado de pequenos objetos cujas
     alocações não são rastreadas pelo ASan.

     Adicionado na versão 3.6.

 -- Option: --with-memory-sanitizer

     Habilita o detector de erros de alocação do MemorySanitizer, ‘msan’
     (o padrão é não).

     Adicionado na versão 3.6.

 -- Option: --with-undefined-behavior-sanitizer

     Habilita o detector de comportamento indefinido
     UndefinedBehaviorSanitizer, ‘ubsan’ (o padrão é não).

     Adicionado na versão 3.6.

 -- Option: --with-thread-sanitizer

     Habilita o detector de corrida de dados ThreadSanitizer, ‘tsan’ (o
     padrão é não).

     Adicionado na versão 3.13.


File: python.info,  Node: Opções da ligação<2>,  Next: Opções da biblioteca,  Prev: Opções de depuração,  Up: Opções de configuração

3.3.3.10 Opções da ligação
..........................

 -- Option: --enable-shared

     Habilita a construção de uma biblioteca Python compartilhada:
     ‘libpython’ (o padrão é não).

 -- Option: --without-static-libpython

     Não constrói ‘libpythonMAJOR.MINOR.a’ e não instala ‘python.o’
     (construído e habilitado por padrão).

     Adicionado na versão 3.10.


File: python.info,  Node: Opções da biblioteca,  Next: Opções de segurança,  Prev: Opções da ligação<2>,  Up: Opções de configuração

3.3.3.11 Opções da biblioteca
.............................

 -- Option: --with-libs='lib1 ...'

     Vincula bibliotecas adicionais (o padrão é não).

 -- Option: --with-system-expat

     Constrói o módulo ‘pyexpat’ usando uma biblioteca ‘expat’ instalada
     (o padrão é não).

 -- Option: --with-system-libmpdec

     Constrói o módulo de extensão ‘_decimal’ usando uma biblioteca
     ‘mpdecimal’ instalada, veja o módulo *note decimal: 36. (o padrão é
     sim).

     Adicionado na versão 3.3.

     Alterado na versão 3.13: O padrão é usar a biblioteca ‘mpdecimal’
     instalada.

     Descontinuado desde a versão 3.13, será removido na versão 3.16:
     Uma cópia dos fontes da biblioteca ‘mpdecimal’ não será mais
     distribuída com Python 3.16.

     Ver também
     ..........

     *note LIBMPDEC_CFLAGS: 1f1c. e *note LIBMPDEC_LIBS: 1f1d.

 -- Option: --with-readline=readline|editline

     Designa uma biblioteca backend para o módulo *note readline: ba.

        * readline: Usa readline como o backend.

        * editline: Usa editline como o backend.

     Adicionado na versão 3.10.

 -- Option: --without-readline

     Não constrói o módulo *note readline: ba. (construído por padrão).

     Não define a macro ‘HAVE_LIBREADLINE’.

     Adicionado na versão 3.10.

 -- Option: --with-libm=STRING

     Substitui a biblioteca matemática ‘libm’ por 'STRING' (o padrão
     depende do sistema).

 -- Option: --with-libc=STRING

     Substitui a biblioteca C ‘libc’ por 'STRING' (o padrão depende do
     sistema).

 -- Option: --with-openssl=DIR

     Raiz do diretório OpenSSL.

     Adicionado na versão 3.7.

 -- Option: --with-openssl-rpath=[no|auto|DIR]

     Define o diretório da biblioteca de tempo de execução (rpath) para
     bibliotecas OpenSSL:

        * ‘no’ (padrão): não define o rpath;

        * ‘auto’: detecta automaticamente o rpath de *note
          -with-openssl: 1f49. e ‘pkg-config’;

        * 'DIR': define um rpath explícito.

     Adicionado na versão 3.10.


File: python.info,  Node: Opções de segurança,  Next: Opções do macOS,  Prev: Opções da biblioteca,  Up: Opções de configuração

3.3.3.12 Opções de segurança
............................

 -- Option: --with-hash-algorithm=[fnv|siphash13|siphash24]

     Seleciona o algoritmo de hash para usar em ‘Python/pyhash.c’:

        * ‘siphash13’ (padrão);

        * ‘siphash24’;

        * ‘fnv’.

     Adicionado na versão 3.4.

     Adicionado na versão 3.11: ‘siphash13’ é adicionado e é o novo
     padrão.

 -- Option:
          --with-builtin-hashlib-hashes=md5,sha1,sha256,sha512,sha3,blake2

     Módulos embutidos de hash

        * ‘md5’;

        * ‘sha1’;

        * ‘sha256’;

        * ‘sha512’;

        * ‘sha3’ (com shake);

        * ‘blake2’.

     Adicionado na versão 3.9.

 -- Option: --with-ssl-default-suites=[python|openssl|STRING]

     Substitui a string dos conjuntos de criptografia padrão do OpenSSL:

        * ‘python’ (padrão): use a seleciona preferida do Python;

        * ‘openssl’: mantém inalterados os padrões do OpenSSL;

        * 'STRING': usa uma string personalizada

     Veja o módulo *note ssl: d0.

     Adicionado na versão 3.7.

     Alterado na versão 3.10: As configurações ‘python’ e 'STRING'
     também definem TLS 1.2 como versão mínima do protocolo.


File: python.info,  Node: Opções do macOS,  Next: Opções do iOS,  Prev: Opções de segurança,  Up: Opções de configuração

3.3.3.13 Opções do macOS
........................

Veja Mac/README.rst(1).

 -- Option: --enable-universalsdk

 -- Option: --enable-universalsdk=SDKDIR

     Cria uma construção binária universal.  'SDKDIR' especifica qual
     SDK do macOS deve ser usado para executar a construção (o padrão é
     não).

 -- Option: --enable-framework

 -- Option: --enable-framework=INSTALLDIR

     Cria um Python.framework em vez de uma instalação tradicional do
     Unix.  O 'INSTALLDIR' opcional especifica o caminho de instalação
     (o padrão é não).

 -- Option: --with-universal-archs=ARCH

     Especifica o tipo de binário universal que deve ser criado.  Esta
     opção só é válida quando *note -enable-universalsdk: 972. está
     definido.

     Opções:

        * ‘universal2’ (x86-64 e arm64);

        * ‘32-bit’ (PPC e i386);

        * ‘64-bit’ (PPC64 e x86-64);

        * ‘3-way’ (i386, PPC e x86-64);

        * ‘intel’ (i386 e x86-64);

        * ‘intel-32’ (i386);

        * ‘intel-64’ (x86-64);

        * ‘all’ (PPC, i386, PPC64 e x86-64).

     Observe que os valores para este item de configuração 'não' são os
     mesmos que os identificadores usados para rodas binárias universais
     no macOS. Veja o Guia de Empacotamento do Python para detalhes
     sobre as tags de compatibilidade de plataforma de empacotamento
     usadas no macOS(2)

 -- Option: --with-framework-name=FRAMEWORK

     Especifica o nome do framework python no macOS válido apenas quando
     *note -enable-framework: 1f50. está definido (padrão: ‘Python’).

 -- Option: --with-app-store-compliance

 -- Option: --with-app-store-compliance=PATCH-FILE

     A biblioteca padrão do Python contém strings que são conhecidas por
     acionar erros de ferramentas de inspeção automatizadas quando
     enviadas para distribuição pelas App Stores do macOS e do iOS. Se
     ativada, esta opção aplicará a lista de patches que corrigem a
     conformidade da app store.  Um arquivo de patch personalizado
     também pode ser especificado.  Esta opção está desativada por
     padrão.

     Adicionado na versão 3.13.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Mac/README.rst

   (2) 
https://packaging.python.org/pt-br/latest/specifications/platform-compatibility-tags/#macos


File: python.info,  Node: Opções do iOS,  Next: Opções de compilação cruzada,  Prev: Opções do macOS,  Up: Opções de configuração

3.3.3.14 Opções do iOS
......................

Veja iOS/README.rst(1).

 -- Option: --enable-framework=INSTALLDIR

     Cria um Python.framework.  Ao contrário do macOS, o argumento
     'INSTALLDIR' que especifica o caminho de instalação é obrigatório.

 -- Option: --with-framework-name=FRAMEWORK

     Especifica o nome do framework (padrão: ‘Python’).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/iOS/README.rst


File: python.info,  Node: Opções de compilação cruzada,  Prev: Opções do iOS,  Up: Opções de configuração

3.3.3.15 Opções de compilação cruzada
.....................................

A compilação cruzada, também conhecida como construção cruzada, pode ser
usada para construir Python para outra arquitetura ou plataforma de CPU.
A compilação cruzada requer um interpretador Python para a plataforma de
construção.  A versão do Python para construção deve corresponder à
versão do Python da compilação cruzada do host.

 -- Option: --build=BUILD

     configura para construir em BUILD, geralmente adivinhado por
     ‘config.guess’.

 -- Option: --host=HOST

     faz compilação cruzada para construir programas para executar no
     HOST (plataforma de destino)

 -- Option: --with-build-python=path/to/python

     caminho para construir o binário ‘python’ para compilação cruzada

     Adicionado na versão 3.11.

 -- Option: CONFIG_SITE=file

     Uma variável de ambiente que aponta para um arquivo com
     substituições de configuração.

     Exemplo de arquivo 'config.site':

          # config.site-aarch64
          ac_cv_buggy_getaddrinfo=no
          ac_cv_file__dev_ptmx=yes
          ac_cv_file__dev_ptc=no

 -- Option: HOSTRUNNER

     Programa para executar CPython para a plataforma host para
     compilação cruzada.

     Adicionado na versão 3.11.

Exemplo de compilação cruzada:

     CONFIG_SITE=config.site-aarch64 ../configure \
         --build=x86_64-pc-linux-gnu \
         --host=aarch64-unknown-linux-gnu \
         --with-build-python=../x86_64/python


File: python.info,  Node: Sistema de Construção Python,  Next: Sinalizadores do compilador e do vinculador,  Prev: Opções de configuração,  Up: Configurando o Python

3.3.4 Sistema de Construção Python
----------------------------------

* Menu:

* Arquivos principais do sistema de construção::
* Principais etapas de construção::
* Alvos principais do Makefile::
* Extensões C::


File: python.info,  Node: Arquivos principais do sistema de construção,  Next: Principais etapas de construção,  Up: Sistema de Construção Python

3.3.4.1 Arquivos principais do sistema de construção
....................................................

   * ‘configure.ac’ => ‘configure’;

   * ‘Makefile.pre.in’ => ‘Makefile’ (criado por ‘configure’);

   * ‘pyconfig.h’ (criado por ‘configure’);

   * ‘Modules/Setup’: Extensões C construídas pelo Makefile usando o
     shell script ‘Module/makesetup’;


File: python.info,  Node: Principais etapas de construção,  Next: Alvos principais do Makefile,  Prev: Arquivos principais do sistema de construção,  Up: Sistema de Construção Python

3.3.4.2 Principais etapas de construção
.......................................

   * Arquivos C (‘.c’) são construídos como arquivos objeto (‘.o’).

   * Uma biblioteca estática ‘libpython’ (‘.a’) é criada a partir de
     arquivos de objetos.

   * ‘python.o’ e a biblioteca estática ‘libpython’ estão vinculadas ao
     programa final ‘python’.

   * Extensões C são construídas pelo Makefile (veja ‘Modules/Setup’).


File: python.info,  Node: Alvos principais do Makefile,  Next: Extensões C,  Prev: Principais etapas de construção,  Up: Sistema de Construção Python

3.3.4.3 Alvos principais do Makefile
....................................

* Menu:

* make::
* make platform::
* make profile-opt::
* make clean::
* make distclean::
* make install::
* make test::
* make buildbottest::
* make regen-all::


File: python.info,  Node: make,  Next: make platform,  Up: Alvos principais do Makefile

3.3.4.4 make
............

Na maioria das vezes, ao reconstruir após editar algum código ou
atualizar seu checkout do upstream, tudo que você precisa fazer é
executar ‘make’, que (pela semântica do Make) constrói o alvo padrão, o
primeiro definido no Makefile.  Por tradição (inclusive no projeto
CPython) este é geralmente o alvo ‘all’.  O script ‘configure’ expande
uma variável ‘autoconf’, ‘@DEF_MAKE_ALL_RULE@’ para descrever
precisamente quais alvos ‘make all’ serão construídos.  As três opções
são:

   * ‘profile-opt’ (configurado com ‘--enable-optimizations’)

   * ‘build_wasm’ (configurado com ‘--with-emscripten-target’)

   * ‘build_all’ (configurado sem usar explicitamente nenhum dos outros)

Dependendo das alterações mais recentes no arquivo fonte, o Make irá
reconstruir quaisquer alvos (arquivos objetos e executáveis)
considerados desatualizados, incluindo executar ‘configure’ novamente se
necessário.  As dependências de origem/alvo são muitas e mantidas
manualmente, portanto, às vezes, o Make não tem todas as informações
necessárias para detectar corretamente todos os alvos que precisam ser
reconstruídos.  Dependendo de quais destinos não são reconstruídos, você
poderá enfrentar vários problemas.  Se você tiver problemas de
construção ou teste que você não pode explicar de outra forma, ‘make
clean && make’ deve resolver a maioria dos problemas de dependência, às
custas de tempos de construção mais longos.


File: python.info,  Node: make platform,  Next: make profile-opt,  Prev: make,  Up: Alvos principais do Makefile

3.3.4.5 make platform
.....................

Constrói o programa ‘python’, mas não constrói os módulos de extensão da
biblioteca padrão.  Isto gera um arquivo chamado ‘platform’ que contém
uma única linha descrevendo os detalhes da plataforma de construção, por
exemplo, ‘macosx-14.3-arm64-3.12’ ou ‘linux-x86_64-3.13’.


File: python.info,  Node: make profile-opt,  Next: make clean,  Prev: make platform,  Up: Alvos principais do Makefile

3.3.4.6 make profile-opt
........................

Constrói Python usando otimização guiada por perfil (PGO). Você pode
usar a opção *note -enable-optimizations: 865. do configure para tornar
este o alvo padrão do comando ‘make’ (‘make all’ ou apenas ‘make’).


File: python.info,  Node: make clean,  Next: make distclean,  Prev: make profile-opt,  Up: Alvos principais do Makefile

3.3.4.7 make clean
..................

Remove arquivos construídos.


File: python.info,  Node: make distclean,  Next: make install,  Prev: make clean,  Up: Alvos principais do Makefile

3.3.4.8 make distclean
......................

Além do trabalho feito por ‘make clean’, remove os arquivos criados pelo
script configure.  ‘configure’ terá que ser executado antes de construir
novamente.  (1)

   ---------- Footnotes ----------

   (1) ‘git clean -fdx’ é uma maneira ainda mais extrema de “limpar” seu
checkout.  Ele remove todos os arquivos não conhecidos pelo Git.  Ao
procurar bugs usando ‘git bisect’, isso é recomendado entre testes
(https://github.com/python/cpython/issues/114505#issuecomment-1907021718)
para garantir uma construção completamente limpa.  'Use com cuidado',
pois isso excluirá todos os arquivos não registrados no Git, incluindo
seu trabalho novo e não confirmado.


File: python.info,  Node: make install,  Next: make test,  Prev: make distclean,  Up: Alvos principais do Makefile

3.3.4.9 make install
....................

Constrói o alvo ‘all’ e instala o Python.


File: python.info,  Node: make test,  Next: make buildbottest,  Prev: make install,  Up: Alvos principais do Makefile

3.3.4.10 make test
..................

Constrói o alvo ‘all’ e execute o conjunto de testes Python com a opção
‘--fast-ci’.  Variáveis:

   * ‘TESTOPTS’: opções adicionais de linha de comando regrtest.

   * ‘TESTPYTHONOPTS’: opções adicionais de linha de comando do Python.

   * ‘TESTTIMEOUT’: tempo limite em segundos (padrão: 10 minutos).


File: python.info,  Node: make buildbottest,  Next: make regen-all,  Prev: make test,  Up: Alvos principais do Makefile

3.3.4.11 make buildbottest
..........................

Isto é semelhante ao ‘make test’, mas usa a opção ‘--slow-ci’ e o tempo
limite padrão de 20 minutos, em vez da opção ‘--fast-ci’.


File: python.info,  Node: make regen-all,  Prev: make buildbottest,  Up: Alvos principais do Makefile

3.3.4.12 make regen-all
.......................

Gera novamente (quase) todos os arquivos gerados.  Isso inclui (mas não
está limitado a) casos de bytecode e arquivo gerador de analisador
sintático.  ‘make regen-stdlib-module-names’ e ‘autoconf’ devem ser
executados separadamente para os restantes *note arquivos gerados: 1ef0.


File: python.info,  Node: Extensões C,  Prev: Alvos principais do Makefile,  Up: Sistema de Construção Python

3.3.4.13 Extensões C
....................

Algumas extensões C são construídas como módulos embutidos, como o
módulo ‘sys’.  Eles são construídos com a macro ‘Py_BUILD_CORE_BUILTIN’
definida.  Módulos embutidos não possuem nenhum atributo ‘__file__’:

     >>> import sys
     >>> sys
     <module 'sys' (built-in)>
     >>> sys.__file__
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     AttributeError: module 'sys' has no attribute '__file__'

Outras extensões C são construídas como bibliotecas dinâmicas, como o
módulo ‘_asyncio’.  Eles são construídos com a macro
‘Py_BUILD_CORE_MODULE’ definida.  Exemplo no Linux x86-64:

     >>> import _asyncio
     >>> _asyncio
     <module '_asyncio' from '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'>
     >>> _asyncio.__file__
     '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'

‘Modules/Setup’ é usado para gerar alvos Makefile para construir
extensões C. No início dos arquivos, as extensões C são construídas como
módulos embutidos.  Extensões definidas após o marcador ‘*shared*’ são
construídas como bibliotecas dinâmicas.

As macros ‘PyAPI_FUNC()’, ‘PyAPI_DATA()’ e *note PyMODINIT_FUNC: 151b.
de ‘Include/exports.h’ são definidas de forma diferente dependendo se a
macro ‘Py_BUILD_CORE_MODULE’ está definida:

   * Usa ‘Py_EXPORTED_SYMBOL’ se ‘Py_BUILD_CORE_MODULE’ estiver definido

   * Do contrário, usa ‘Py_IMPORTED_SYMBOL’.

Se a macro ‘Py_BUILD_CORE_BUILTIN’ for usada por engano em uma extensão
C construída como uma biblioteca compartilhada, sua função
‘PyInit_XXX()’ não será exportada, causando um *note ImportError: 419.
na importação.


File: python.info,  Node: Sinalizadores do compilador e do vinculador,  Prev: Sistema de Construção Python,  Up: Configurando o Python

3.3.5 Sinalizadores do compilador e do vinculador
-------------------------------------------------

Opções definidas pelo script ‘./configure’ e variáveis de ambiente e
usadas por ‘Makefile’.

* Menu:

* Sinalizadores do pré-processador::
* Sinalizadores do compilador::
* Sinalizadores do vinculador::


File: python.info,  Node: Sinalizadores do pré-processador,  Next: Sinalizadores do compilador,  Up: Sinalizadores do compilador e do vinculador

3.3.5.1 Sinalizadores do pré-processador
........................................

 -- Variável De Ambiente: CONFIGURE_CPPFLAGS

     Valor da variável *note CPPFLAGS: 1501. passado para o script
     ‘./configure’.

     Adicionado na versão 3.6.

 -- Variável De Ambiente: CPPFLAGS

     Sinalizadores de pré-processador C++ / (Objective) C, p.ex.
     ‘-IINCLUDE_DIR’ se você tiver cabeçalhos em um diretório não padrão
     'include_dir'.

     Tanto *note CPPFLAGS: 1501. quanto *note LDFLAGS: 1500. precisam
     conter o valor do shell para poder construir módulos de extensão
     usando os diretórios especificados nas variáveis de ambiente.

 -- Variável De Ambiente: BASECPPFLAGS

     Adicionado na versão 3.4.

 -- Variável De Ambiente: PY_CPPFLAGS

     Sinalizadores extras de pré-processador adicionados para construir
     os arquivos de objeto do interpretador.

     Padrão: ‘$(BASECPPFLAGS) -I. -I$(srcdir)/Include
     $(CONFIGURE_CPPFLAGS) $(CPPFLAGS)’.

     Adicionado na versão 3.2.


File: python.info,  Node: Sinalizadores do compilador,  Next: Sinalizadores do vinculador,  Prev: Sinalizadores do pré-processador,  Up: Sinalizadores do compilador e do vinculador

3.3.5.2 Sinalizadores do compilador
...................................

 -- Variável De Ambiente: CC

     Comando do compilador C.

     Exemplo: ‘gcc -pthread’.

 -- Variável De Ambiente: CXX

     Comando do compilador C++.

     Exemplo: ‘g++ -pthread’.

 -- Variável De Ambiente: CFLAGS

     Sinalizadores do compilador C.

 -- Variável De Ambiente: CFLAGS_NODIST

     *note CFLAGS_NODIST: 1f73. é usado para construir o interpretador e
     extensões C da stdlib.  Use-o quando um sinalizador do compilador
     'não' deve fazer parte de *note CFLAGS: 14ff. depois que o Python
     estiver instalado (gh-65320(1)).

     Em particular, *note CFLAGS: 14ff. não deve conter:

        * o sinalizador do compilador ‘-I’ (para definir o caminho de
          pesquisa para arquivos incluídos).  Os sinalizadores ‘-I’ são
          processadas da esquerda para a direita, e quaisquer
          sinalizadores em *note CFLAGS: 14ff. terão precedência sobre
          os sinalizadores ‘-I’ fornecidos pelo usuário e pelo pacote.

        * sinalizadores de segurança como ‘-Werror’ porque as
          distribuições não podem controlar se os pacotes instalados
          pelos usuários estão em conformidade com esses padrões
          elevados.

     Adicionado na versão 3.5.

 -- Variável De Ambiente: COMPILEALL_OPTS

     Opções passadas para a linha de comando *note compileall: 20. ao
     construir arquivos PYC em ‘make install’.  Padrão: ‘-j0’.

     Adicionado na versão 3.12.

 -- Variável De Ambiente: EXTRA_CFLAGS

     Sinalizadores extra do compilador C.

 -- Variável De Ambiente: CONFIGURE_CFLAGS

     Valor da variável *note CFLAGS: 14ff. passado para o script
     ‘./configure’.

     Adicionado na versão 3.2.

 -- Variável De Ambiente: CONFIGURE_CFLAGS_NODIST

     Valor da variável *note CFLAGS_NODIST: 1f73. passado para o script
     ‘./configure’.

     Adicionado na versão 3.5.

 -- Variável De Ambiente: BASECFLAGS

     Sinalizadores base do compilador.

 -- Variável De Ambiente: OPT

     Sinalizadores de otimização.

 -- Variável De Ambiente: CFLAGS_ALIASING

     Sinalizadores de alias estritos ou não estritos usados para
     compilar ‘Python/dtoa.c’.

     Adicionado na versão 3.7.

 -- Variável De Ambiente: CCSHARED

     Sinalizadores de compilador usados para construir uma biblioteca
     compartilhada.

     Por exemplo, ‘-fPIC’ é usado no Linux e no BSD.

 -- Variável De Ambiente: CFLAGSFORSHARED

     Sinalizadores extras de C adicionados para construir os arquivos de
     objeto do interpretador.

     Padrão: ‘$(CCSHARED)’ quando *note -enable-shared: 866. é usado, ou
     uma string vazia caso contrário.

 -- Variável De Ambiente: PY_CFLAGS

     Padrão: ‘$(BASECFLAGS) $(OPT) $(CONFIGURE_CFLAGS) $(CFLAGS)
     $(EXTRA_CFLAGS)’.

 -- Variável De Ambiente: PY_CFLAGS_NODIST

     Padrão: ‘$(CONFIGURE_CFLAGS_NODIST) $(CFLAGS_NODIST)
     -I$(srcdir)/Include/internal’.

     Adicionado na versão 3.5.

 -- Variável De Ambiente: PY_STDMODULE_CFLAGS

     Sinalizadores do C usados para construir os arquivos de objeto do
     interpretador.

     Padrão: ‘$(PY_CFLAGS) $(PY_CFLAGS_NODIST) $(PY_CPPFLAGS)
     $(CFLAGSFORSHARED)’.

     Adicionado na versão 3.7.

 -- Variável De Ambiente: PY_CORE_CFLAGS

     Padrão: ‘$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE’.

     Adicionado na versão 3.2.

 -- Variável De Ambiente: PY_BUILTIN_MODULE_CFLAGS

     Sinalizadores do compilador para construir um módulo de extensão de
     biblioteca padrão como um módulo embutido, como o módulo *note
     posix: ad.

     Padrão: ‘$(PY_STDMODULE_CFLAGS) -DPy_BUILD_CORE_BUILTIN’.

     Adicionado na versão 3.8.

 -- Variável De Ambiente: PURIFY

     Comando de Purify.  Purify é um programa depurador de memória.

     Padrão: string vazia (não usada).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/65320


File: python.info,  Node: Sinalizadores do vinculador,  Prev: Sinalizadores do compilador,  Up: Sinalizadores do compilador e do vinculador

3.3.5.3 Sinalizadores do vinculador
...................................

 -- Variável De Ambiente: LINKCC

     Comando do vinculador usado para construir programas como ‘python’
     e ‘_testembed’.

     Padrão: ‘$(PURIFY) $(CC)’.

 -- Variável De Ambiente: CONFIGURE_LDFLAGS

     Valor da variável *note LDFLAGS: 1500. passado para o script
     ‘./configure’.

     Evite atribuir *note CFLAGS: 14ff, *note LDFLAGS: 1500, etc.  para
     que os usuários possam usá-los na linha de comando para anexar a
     esses valores sem pisotear os valores predefinidos.

     Adicionado na versão 3.2.

 -- Variável De Ambiente: LDFLAGS_NODIST

     *note LDFLAGS_NODIST: 1f85. é usado da mesma maneira que *note
     CFLAGS_NODIST: 1f73.  Use-o quando um sinalizador de vinculador
     'não' fizer parte de *note LDFLAGS: 1500. depois que o Python
     estiver instalado (gh-65320(1)).

     Em particular, *note LDFLAGS: 1500. não deve conter:

        * o sinalizador do compilador ‘-L’ (para definir o caminho de
          pesquisa para arquivos incluídos).  Os sinalizadores ‘-L’ são
          processadas da esquerda para a direita, e quaisquer
          sinalizadores em *note LDFLAGS: 1500. terão precedência sobre
          os sinalizadores ‘-L’ fornecidos pelo usuário e pelo pacote.

 -- Variável De Ambiente: CONFIGURE_LDFLAGS_NODIST

     Valor da variável *note LDFLAGS_NODIST: 1f85. passado para o script
     ‘./configure’.

     Adicionado na versão 3.8.

 -- Variável De Ambiente: LDFLAGS

     Sinalizadores do vinculador, p.ex.  ‘-LLIB_DIR’, se você tiver
     bibliotecas em um diretório não padrão 'lib_dir'.

     Tanto *note CPPFLAGS: 1501. quanto *note LDFLAGS: 1500. precisam
     conter o valor do shell para poder construir módulos de extensão
     usando os diretórios especificados nas variáveis de ambiente.

 -- Variável De Ambiente: LIBS

     Sinalizadores do vinculador para passar bibliotecas para o
     vinculador ao vincular o executável Python.

     Exemplo: ‘-lrt’.

 -- Variável De Ambiente: LDSHARED

     Comando para construir uma biblioteca compartilhada.

     Padrão: ‘@LDSHARED@ $(PY_LDFLAGS)’.

 -- Variável De Ambiente: BLDSHARED

     Comando para construir a biblioteca compartilhada ‘libpython’.

     Padrão: ‘@BLDSHARED@ $(PY_CORE_LDFLAGS)’.

 -- Variável De Ambiente: PY_LDFLAGS

     Padrão: ‘$(CONFIGURE_LDFLAGS) $(LDFLAGS)’.

 -- Variável De Ambiente: PY_LDFLAGS_NODIST

     Padrão: ‘$(CONFIGURE_LDFLAGS_NODIST) $(LDFLAGS_NODIST)’.

     Adicionado na versão 3.8.

 -- Variável De Ambiente: PY_CORE_LDFLAGS

     Sinalizadores de vinculador usados para construir os arquivos de
     objeto do interpretador.

     Adicionado na versão 3.8.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/65320


File: python.info,  Node: Utilizando Python no Windows,  Next: Usando Python em macOS,  Prev: Configurando o Python,  Up: Configurações e Uso do Python

3.4 Utilizando Python no Windows
================================

Este documento pretende dar uma visão geral do comportamento específico
do Windows que você deve conhecer quando fores utilizar o Python no
sistema operacional Microsoft Windows.

Diferente da maioria dos sistemas e serviços Unix, o Windows não inclui
uma instalação suportada do Python.  Para deixar o Python disponível, o
time CPython compilou os instaladores do Windows com cada versão(1) por
vários anos.  Esses instaladores têm a intenção primária de adicionar
uma instalação de Python por usuário, com o interpretador e as
bibliotecas núcleo sendo utilizadas por um único usuário.  O instalador
também é capaz de instalar para todos os usuários de uma única máquina,
e um arquivo ZIP separado está disponível para distribuições locais de
aplicação.

Como especificado na PEP 11(2), uma versão Python suporta apenas uma
plataforma Windows enquanto a Microsoft considera a plataforma sob
suporte estendido.  Isso significa que o Python 3.13 suporta Windows 8.1
ou superiores.  Se você requer suporte à Windows 7, por favor instale o
Python 3.8.

Há uma quantidade de instaladores diferentes disponíveis para Windows,
cada um com algumas vantagens e desvantagens.

*note O instalador completo: 1f90. contém todos os componentes e é a
melhor opção para desenvolvedores usando Python para qualquer tipo de
projeto.

*note O pacote Microsoft Store: 1d62. é uma instalação simples do Python
que é adequada para executar scripts e pacotes, e para usar a IDLE ou
outros ambientes de desenvolvimento.  Ela requer Windows 10 e superior,
mas pode ser instalada de forma segura sem corromper outros programas.
Ela também fornece vários comandos convenientes para iniciar o Python e
suas ferramentas.

*note Os pacotes nuget.org: 1f91. são instalações leves criadas para
integração contínua de sistemas.  Elas podem ser usadas para construir
pacotes Python ou executar scripts, mas não são atualizáveis e não
possuem ferramentas de interface de usuário.

*note O pacote embutível: 1f92. é um pacote mínimo de Python adequado
para ser incorporado em uma aplicação maior.

* Menu:

* O instalador completo::
* O pacote Microsoft Store::
* Os pacotes nuget.org: Os pacotes nuget org.
* O pacote embutível::
* Pacotes Alternativos::
* Configurando o Python: Configurando o Python<2>.
* Modo UTF-8::
* Inicializador Python para Windows::
* Encontrando módulos::
* Módulos adicionais::
* Compilando Python no Windows::
* Outras plataformas::

   ---------- Footnotes ----------

   (1) https://www.python.org/downloads/

   (2) https://peps.python.org/pep-0011/


File: python.info,  Node: O instalador completo,  Next: O pacote Microsoft Store,  Up: Utilizando Python no Windows

3.4.1 O instalador completo
---------------------------

* Menu:

* Etapas de instalação::
* Removendo a Limitação do MAX_PATH::
* Instalando sem UI::
* Instalando Sem Download::
* Modificando uma instalação::
* Instalando binários com threads livres::


File: python.info,  Node: Etapas de instalação,  Next: Removendo a Limitação do MAX_PATH,  Up: O instalador completo

3.4.1.1 Etapas de instalação
............................

Quatro instaladores Python 3.13 estão disponíveis para download - dois
de cada para as versões 32-bit e 64-bit do interpretador.  O 'instalador
web' é um download inicial menor, e ele irá automaticamente fazer o
download dos componentes solicitados na medida do necessário.  O
'instalador offline' inclui os componentes necessários para uma
instalação padrão e requer apenas uma conexão de internet para recursos
opcionais.  Veja *note Instalando Sem Download: 1f95. para outras formas
de evitar o download durante a instalação.

Após iniciar o instalador, uma de duas opções deve ser selecionada:

[image src="python-figures/win_installer.png"]


Se você selecionar “Install Now”:

   * Você 'não' precisará ser um administrador (a menos que uma
     atualização de sistema para a Biblioteca em Tempo de Execução C
     seja necessária ou que você instale o *note Inicializador Python
     para Windows: 5be. para todos os usuários)

   * Python será instalado dentro do seu diretório de usuário

   * O *note Inicializador Python para Windows: 5be. será instalado de
     acordo com a opção ao final da primeira página

   * A biblioteca padrão, a suíte de testes, o inicializador e o pip
     serão instalados

   * Se selecionado, o diretório de instalação será adicionado no seu
     ‘PATH’

   * Atalhos serão visíveis apenas para o usuário atual

Selecionando “Customize installation” irá permitir que você selecione os
recursos a serem instalados, o local da instalação e outras opções ou
ações pós-instalação.  Para instalar símbolos de depuração ou binários,
você precisará usar essa opção.

Para realizar uma instalação para todos os usuários, você deve
selecionar “Customize installation”.  Neste caso:

   * Você pode ser solicitado a providenciar credenciais administrativas
     ou aprovação

   * Python será instalado dentro do diretório Program Files (Arquivos
     de Programa)

   * O *note Inicializador Python para Windows: 5be. será instalado
     dentro do diretório Windows

   * Recursos opcionais podem ser selecionados durante a instalação

   * A biblioteca padrão pode ser pré-compilada em bytecode

   * Se selecionado, o diretório de instalação será adicionado ao ‘PATH’
     do sistema

   * Atalhos estão disponíveis para todos os usuários


File: python.info,  Node: Removendo a Limitação do MAX_PATH,  Next: Instalando sem UI,  Prev: Etapas de instalação,  Up: O instalador completo

3.4.1.2 Removendo a Limitação do MAX_PATH
.........................................

O Windows historicamente tem limitado os comprimentos dos caminhos de
arquivos em 260 caracteres.  Isso significava que caminhos maiores que
isso não seriam resolvidos e resultariam em erros.

Nas últimas versões do Windows, essa limitação pode ser expandida para
aproximadamente 32.000 caracteres.  Seu administrador irá precisar
ativar a política de grupo “Enable Win32 long paths”, ou definir
‘LongPathsEnabled’ para ‘1’ na chave de registro
‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem’.

Isso permite que a função *note open(): 51c, o módulo *note os: a1. e a
maior parte das outras funcionalidades de caminho aceitem e retornem
caminhos maiores que 260 caracteres quando usando strings.

Após alterar a opção acima, nenhuma configuração adicional é necessária.

Alterado na versão 3.6: Suporte para caminhos longos foi ativado no
Python.


File: python.info,  Node: Instalando sem UI,  Next: Instalando Sem Download,  Prev: Removendo a Limitação do MAX_PATH,  Up: O instalador completo

3.4.1.3 Instalando sem UI
.........................

Todas as opções disponíveis na IU do instalador também podem ser
especificadas a partir da linha de comando, permitindo que instaladores
por script repliquem uma instalação em várias máquinas sem interação do
usuário.  Essas opções também podem ser definidas sem suprimir a IU para
alterar alguns dos padrões.

As seguintes opções (encontradas executando o instalador com ‘/?’) podem
ser passadas para o instalador:

Nome                      Descrição
                          
---------------------------------------------------------------------------------------
                          
/passive                  para exibir o progresso sem exigir interação do usuário
                          
                          
/quiet                    para instalar/desinstalar sem exibir nenhuma UI
                          
                          
/simple                   para evitar a personalização do usuário
                          
                          
/uninstall                para remover o Python (sem exigir confirmação)
                          
                          
/layout [diretório]       para pré-baixar todos os componentes
                          
                          
/log [nome-de-arquivo]    para especificar a localização dos arquivos de log
                          

Todas as outras opções são passadas como ‘name=value’, onde o valor é
usualmente ‘0’ para desabilitar o recurso, ‘1’ para ativar o recurso, ou
um caminho.  A lista completa de opções disponíveis é mostrada abaixo.

Nome                            Descrição                                  Default (padrão)
                                                                           
----------------------------------------------------------------------------------------------------------
                                                                           
InstallAllUsers (Instalar       Execute uma instalação em todo o           0
para Todos usuários)            sistema.                                   
                                
                                                                           
TargetDir (Diretório Alvo)      O diretório de instalação                  Selecionado com base em
                                                                           “Instalar para Todos os
                                                                           Usuários”
                                                                           
                                                                           
DefaultAllUsersTargetDir        O diretório de instalação padrão para      ‘%ProgramFiles%\Python X.Y’
(Diretório de Destino Padrão    instalações de todos os usuários           or
para Todos os usuários)                                                    ‘%ProgramFiles(x86)%\Python
                                                                           X.Y’
                                                                           
                                                                           
DefaultJustForMeTargetDir       O diretório de instalação padrão para      ‘%LocalAppData%\Programs\Python\PythonXY’
(Diretório Alvo Padrão Apenas   instalações just-for-me                    ou
Para Mim)                                                                  ‘%LocalAppData%\Programs\Python\PythonXY-32’
                                                                           ou
                                                                           ‘%LocalAppData%\Programs\Python\PythonXY-64’
                                                                           
                                                                           
DefaultCustomTargetDir          Diretório de instalação personalizado      (vazio)
(Diretório de destino           padrão exibido na interface do usuário     
personalizado padrão)           

AssociateFiles (Arquivos        Criar associações de arquivos se o         1
Associados)                     launcher também estiver instalado.         
                                
                                                                           
CompileAll (Compilar Tudo)      Compile todos os arquivos ‘.py’ para       0
                                ‘.pyc’.                                    
                                
                                                                           
PrependPath (path a ser         Anexa os diretórios de instalação e        0
percorrido)                     Scripts ao início de ‘PATH’ e adiciona     
                                ‘.PY’ a ‘PATHEXT’
                                
                                                                           
AppendPath                      Anexa os diretórios de instalação e        0
                                Scripts ao final de ‘PATH’ e adiciona      
                                ‘.PY’ a ‘PATHEXT’
                                
                                                                           
Shortcuts (atalhos)             Crie atalhos para o interpretador,         1
                                documentação e IDLE se instalado.          
                                
                                                                           
Include_doc                     Install Python manual (Instalação Manual   1
                                do Python)                                 
                                
                                                                           
Include_debug (Incluir o Modo   Instalar binários de Depuração             0
de Depuração)                                                              

Include_dev                     Instala cabeçalhos e bibliotecas do        1
                                desenvolvedor.  Omitir isso pode levar a   
                                uma instalação inutilizável.
                                
                                                                           
Include_exe                     Instala ‘python.exe’ e arquivos            1
                                relacionados.  Omitir isso pode levar a    
                                uma instalação inutilizável.
                                
                                                                           
Include_launcher                Instalar                                   1
                                *note Inicializador Python para Windows: 5be.
                                
                                                                           
InstallLauncherAllUsers         Instala o iniciador para todos os          1
                                usuários.  Também requer                   
                                ‘Include_launcher’ para ser definido
                                como 1
                                
                                                                           
Include_lib                     Instala a biblioteca padrão e os módulos   1
                                de extensão.  Omitir isso pode levar a     
                                uma instalação inutilizável.
                                
                                                                           
Include_pip                     Instale o pacote pip e setuptools          1
                                                                           
                                                                           
Include_symbols                 Instala símbolos de depuração (‘*.pdb’)    0
                                                                           
                                                                           
Include_tcltk                   Instale o suporte Tcl/Tk e o IDLE          1
                                                                           
                                                                           
Include_test                    Instalar o conjunto de testes da           1
                                biblioteca padrão                          
                                
                                                                           
Include_tools                   Instalar scripts com utilitários           1
                                                                           
                                                                           
LauncherOnly                    Instala apenas o launcher.  Isso           0
                                substituirá a maioria das outras opções.   
                                
                                                                           
SimpleInstall                   Desativar a maioria das UIs de             0
                                instalação                                 
                                
                                                                           
SimpleInstallDescription        Uma mensagem personalizada para exibir     (vazio)
                                quando a IU de instalação simplificada é   
                                usada.
                                

Por exemplo, para instalar silenciosamente uma instalação de Python
padrão e em todo o sistema, você pode usar o seguinte comando (a partir
de um terminal de comando autorizado):

     python-3.9.0.exe /quiet InstallAllUsers=1 PrependPath=1 Include_test=0

Para permitir que usuários instalem facilmente uma cópia do Python sem a
suíte de testes, você pode fornecer um atalho com o seguinte comando.
Isso irá exibir uma página inicial simplificado e bloquear a
personalização:

     python-3.9.0.exe InstallAllUsers=0 Include_launcher=0 Include_test=0
         SimpleInstall=1 SimpleInstallDescription="Just for me, no test suite."

(Observe que omitir o inicializador também omite associações de
arquivos, e só é recomendado para instalações por usuários quando também
existe uma instalação por todo o sistema que inclui o inicializador.)

As opções listadas acima também podem ser fornecidas em um arquivo
chamado ‘unattend.xml’ juntamente com o executável.  Esse arquivo
especifica uma lista de opções e valores.  Quando um valor é fornecido
como um atributo, ele será convertido para um número se possível.
Valores fornecidos como elementos de texto são sempre deixados como
strings.  Esse arquivo de exemplo define as mesmas opções que o exemplo
anterior:

     <Options>
         <Option Name="InstallAllUsers" Value="no" />
         <Option Name="Include_launcher" Value="0" />
         <Option Name="Include_test" Value="no" />
         <Option Name="SimpleInstall" Value="yes" />
         <Option Name="SimpleInstallDescription">Just for me, no test suite</Option>
     </Options>


File: python.info,  Node: Instalando Sem Download,  Next: Modificando uma instalação,  Prev: Instalando sem UI,  Up: O instalador completo

3.4.1.4 Instalando Sem Download
...............................

Como alguns recursos do Python não estão inclusos no download inicial do
instalador, selecionar esses recursos pode exigir uma conexão com a
internet.  Para evitar isso, todos os possíveis componentes podem ser
baixados sob demanda para criar um 'layout' completo que não irá
precisar de uma conexão de internet independentemente dos recursos
selecionados.  Note que este download pode ser maior que o necessário,
mas onde um grande número de instalações serão realizadas é bem útil ter
uma cópia em cache local.

Execute o seguinte comando a partir do Prompt de Comando para fazer o
download de todos os possíveis arquivos necessários.  Lembre-se de
substituir ‘python-3.9.0.exe’ pelo nome real do seu instalador, e de
criar layouts nos respectivos diretórios para evitar colisão entre
arquivos com o mesmo nome.

     python-3.9.0.exe /layout [diretório alvo opcional]

Você também pode especificar a opção ‘/quiet’ para esconder o
acompanhamento de progresso.


File: python.info,  Node: Modificando uma instalação,  Next: Instalando binários com threads livres,  Prev: Instalando Sem Download,  Up: O instalador completo

3.4.1.5 Modificando uma instalação
..................................

Uma vez que o Python foi instalado, você pode adicionar ou remover
recursos através da ferramenta Programas e Recursos que é parte do
Windows.  Selecione o registro do Python e escolha “Uninstall/Change”
para abrir o instalador no modo de manutenção.

“Modify” permite que você adicione ou remova recursos modificando as
caixas de entrada - caixas de entrada não modificadas não irão instalar
ou remover nada.  Algumas opções não podem ser modificadas dessa forma,
como o diretório de instalação; para modificá-las, você precisará
remover e então reinstalar o Python completamente.

“Repair” irá verificar todos os arquivos que devem ser instalados usando
as configurações atuais e substituir qualquer um que tiver sido removido
ou modificado.

“Uninstall” irá remover o Python completamente, com a exceção do *note
Inicializador Python para Windows: 5be, que tem seu próprio registro nos
Programas e Recursos.


File: python.info,  Node: Instalando binários com threads livres,  Prev: Modificando uma instalação,  Up: O instalador completo

3.4.1.6 Instalando binários com threads livres
..............................................

Adicionado na versão 3.13: (Experimental)

     Nota: Tudo descrito nesta seção é considerado experimental e
     espera-se que mude em versões futuras.

Para instalar binários pré-construídos com recurso de threads livres
habilitado (veja PEP 703(1)), você deve selecionar “Customize
installation” (Instalação personalizada).  A segunda página de opções
inclui a caixa de seleção “Download free-threaded binaries” (Baixar
binários de threads livres).

[image src="python-figures/win_install_freethreaded.png"]


Selecionar esta opção fará o download e instalará binários adicionais no
mesmo local da instalação principal do Python.  O executável principal é
chamado ‘python3.13t.exe’, e outros binários recebem um sufixo ‘t’ ou um
sufixo ABI completo.  Arquivos de origem do Python e dependências de
terceiros empacotadas são compartilhadas com a instalação principal.

A versão com threads livres é registrada como uma instalação regular do
Python com a tag ‘3.13t’ (com um sufixo ‘-32’ ou ‘-arm64’ como normal
para essas plataformas).  Isso permite que as ferramentas o descubram e
que o *note Inicializador Python para Windows: 5be. ofereça suporte a
‘py.exe -3.13t’.  Observe que o inicializador interpretará ‘py.exe -3’
(ou um shebang ‘python3’) como “a instalação 3.x mais recente”, que
preferirá os binários com threads livres aos normais, enquanto ‘py.exe
-3.13’ não.  Se você usar o estilo curto da opção, talvez prefira não
instalar os binários com threads livres neste momento.

Para especificar a opção de instalação na linha de comando, use
‘Include_freethreaded=1’.  Veja *note Instalando Sem Download: 1f95.
para instruções sobre como baixar preventivamente os binários adicionais
para instalação offline.  As opções para incluir símbolos de depuração e
binários também se aplicam às construções com threads livres.

Binários com threads livres também estão disponíveis *note em nuget.org:
1f91.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0703/


File: python.info,  Node: O pacote Microsoft Store,  Next: Os pacotes nuget org,  Prev: O instalador completo,  Up: Utilizando Python no Windows

3.4.2 O pacote Microsoft Store
------------------------------

Adicionado na versão 3.7.2.

O pacote Microsoft Store é um interpretador Python facilmente instalável
criado principalmente para uso interativo, por exemplo, por estudantes.

Para instalar o pacote, certifique-se de que você possui as últimas 10
atualizações do Windows e procure o app “Python 3.13” na Microsoft
Store.  Certifique-se que o app que você selecionou foi publicado pela
Python Software Foundation, e instale-o.

     Aviso: Python sempre estará disponível gratuitamente na Microsoft
     Store.  Se você for solicitado a pagar por ele, você não selecionou
     o pacote correto.

Após a instalação, o Python pode ser inicializado por pesquisa no menu
Iniciar.  Alternativamente, ele estará disponível a partir de qualquer
Prompt de Comando ou sessão PowerShell apenas digitando ‘python’.  Além
disso, o pip e a IDLE podem ser usados digitando ‘pip’ ou ‘idle’.  A
IDLE também pode ser encontrada no menu Iniciar.

Todos os três comandos também estão disponíveis com sufixos do número da
versão, por exemplo, como em ‘python3.exe’ e ‘python3.x.exe’ bem como
‘python.exe’ (onde ‘3.x’ é a versão específica que você quer iniciar,
como a 3.13).  Abra o “Gerenciar aliases de execução de aplicativo”
através do menu Iniciar para selecionar qual versão do Python está
associada com cada comando.  É recomendado que você se certifique que
‘pip’ e ‘idle’ são consistentes com qualquer versão do ‘python’ que seja
selecionada.

Ambientes virtuais podem ser criados com ‘python -m venv’ e ativados e
usados normalmente.

Se você instalou outra versão do Python e adicionou ela à sua variável
‘PATH’, ela estará disponível com ‘python.exe’ ao invés de uma instalada
pela Microsoft Store.  Para acessar a nova instalação, use ‘python3.exe’
ou ‘python3.x.exe’.

O instalador ‘py.exe’ irá detectar essa instalação do Python, mas irá
preferir instalações feitas pelo instalador tradicional.

Para remover o Python, abra as Configurações e use Aplicativos e
Recursos, ou encontre o Python no menu Iniciar e clique com o botão
direito para selecionar Desinstalar.  A desinstalação irá remover todos
os pacotes que você instalou diretamente dentro dessa instalação do
Python, mas não irá remover nenhum ambiente virtual.

* Menu:

* Problemas conhecidos::


File: python.info,  Node: Problemas conhecidos,  Up: O pacote Microsoft Store

3.4.2.1 Problemas conhecidos
............................

* Menu:

* Redirecionamento de dados locais, registro e caminhos temporários: Redirecionamento de dados locais registro e caminhos temporários.


File: python.info,  Node: Redirecionamento de dados locais registro e caminhos temporários,  Up: Problemas conhecidos

3.4.2.2 Redirecionamento de dados locais, registro e caminhos temporários
.........................................................................

Por causa de restrições nos aplicativos da Microsoft Store, scripts
Python podem não ter acesso de escrita completo em locais compartilhados
como ‘TEMP’ ou o registro.  Ao invés disso, ele irá escrever uma cópia
privada.  Se seus scripts precisam modificar locais compartilhados, você
terá que instalar o instalador completo.

At runtime, Python will use a private copy of well-known Windows folders
and the registry.  For example, if the environment variable ‘%APPDATA%’
is ‘c:\Users\<user>\AppData\’, then when writing to
‘C:\Users\<user>\AppData\Local’ will write to
‘C:\Users\<user>\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\LocalCache\Local\’.

Ao ler arquivos, o Windows retornará o arquivo da pasta privada ou, se
não existir, o diretório real do Windows.  Por exemplo, ler
‘C:\Windows\System32’ retorna o conteúdo de ‘C:\Windows\System32’ mais o
conteúdo de ‘C:\Program Files\WindowsApps \nome_pacote\VFS\SystemX86’.

Você pode encontrar o caminho real de qualquer arquivo existente usando
*note os.path.realpath(): 225.:

     >>> import os
     >>> test_file = 'C:\\Users\\exemplo\\AppData\\Local\\test.txt'
     >>> os.path.realpath(test_file)
     'C:\\Users\\exemplo\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.8_qbz5n2kfra8p0\\LocalCache\\Local\\test.txt'

Ao gravar no Registro do Windows, existem os seguintes comportamentos:

   * A leitura de ‘HKLM\\Software’ é permitida e os resultados são
     mesclados com o arquivo ‘registry.dat’ no pacote.

   * Gravar em ‘HKLM\\Software’ não é permitido se a chave/valor
     correspondente existir, ou seja, modificar chaves existentes.

   * Gravar em ‘HKLM\\Software’ é permitido desde que uma chave/valor
     correspondente não exista no pacote e o usuário tenha as permissões
     de acesso corretas.

Para obter mais detalhes sobre a base técnica dessas limitações,
consulte a documentação da Microsoft sobre aplicativos de confiança
total empacotados, atualmente disponíveis em
docs.microsoft.com/pt-br/windows/msix/desktop/desktop-to-uwp-behind-the-scenes(1)

   ---------- Footnotes ----------

   (1) 
https://learn.microsoft.com/windows/msix/desktop/desktop-to-uwp-behind-the-scenes


File: python.info,  Node: Os pacotes nuget org,  Next: O pacote embutível,  Prev: O pacote Microsoft Store,  Up: Utilizando Python no Windows

3.4.3 Os pacotes nuget.org
--------------------------

Adicionado na versão 3.5.2.

O pacote nuget.org é um ambiente Python de tamanho reduzido criado para
uso em integração contínua e construção de sistemas que não precisam de
uma instalação de Python por todo o sistema da máquina.  Enquanto nuget
é o “gerenciador de pacotes para .NET”, ele também funciona
perfeitamente bem para pacotes contendo ferramentas em tempo de
construção.

Visite nuget.org(1) para informações mais atualizadas sobre utilização
do nuget.  A seguir está um sumário que é suficiente para
desenvolvedores Python.

A ferramenta de linha de comando ‘nuget.exe’ pode ser baixada
diretamente de ‘https://aka.ms/nugetclidl’, por exemplo, usando o curl
ou PowerShell.  Com a ferramenta, a versão mais recente do Python para
máquinas 64-bit ou 32-bit é instalada usando:

     nuget.exe install python -ExcludeVersion -OutputDirectory .
     nuget.exe install pythonx86 -ExcludeVersion -OutputDirectory .

Para selecionar uma versão específica, adicione ‘-Version 3.x.y’.  O
diretório de saída pode ser mudado de ‘.’, e o pacote será instalado em
um subdiretório.  Por padrão, o subdiretório é nomeado igual ao pacote,
e sem a opção ‘-ExcludeVersion’ esse nome irá incluir a versão
específica instalada.  Dentro do subdiretório está um diretório ‘tools’
que contém a instalação do Python:

     # Sem -ExcludeVersion
     > .\python.3.5.2\tools\python.exe -V
     Python 3.5.2

     # Com -ExcludeVersion
     > .\python\tools\python.exe -V
     Python 3.5.2

Em geral, pacotes nuget não são atualizáveis, e novas versões devem ser
instaladas lado-a-lado e referenciadas usando o caminho completo.
Alternativamente, delete o diretório do pacote manualmente e instale
novamente.  Muitos sistemas CI irão fazer isso automaticamente se eles
não preservam arquivos entre construções de projetos.

Juntamente com o diretório ‘tools’ está o diretório ‘build\native’.  Ele
contém um arquivo de propriedades MSBuild ‘python.props’ que pode ser
usado em um projeto C++ para referenciar a instalação do Python.
Incluir as configurações irá automaticamente usar os cabeçalhos e
importar as bibliotecas na sua construção de projeto.

As páginas de informação dos pacotes em nuget.org são
www.nuget.org/packages/python(2) para a versão 64 bits,
www.nuget.org/packages/pythonx86(3) para a versão 32 bits e
www.nuget.org/packages/pythonarm64(4) para a versão ARM64

* Menu:

* Pacotes com threads livres::

   ---------- Footnotes ----------

   (1) https://www.nuget.org/

   (2) https://www.nuget.org/packages/python

   (3) https://www.nuget.org/packages/pythonx86

   (4) https://www.nuget.org/packages/pythonarm64


File: python.info,  Node: Pacotes com threads livres,  Up: Os pacotes nuget org

3.4.3.1 Pacotes com threads livres
..................................

Adicionado na versão 3.13: (Experimental)

     Nota: Tudo descrito nesta seção é considerado experimental e
     espera-se que mude em versões futuras.

Pacotes contendo binários com threads livres são chamados
python-freethreaded(1) para a versão de 64 bits,
pythonx86-freethreaded(2) para a versão de 32 bits e
pythonarm64-freethreaded(3) para a versão ARM64.  Esses dois pacotes
contêm os pontos de entrada ‘python3.13t.exe’ e ‘python.exe’, os quais
são executados com threads livres.

   ---------- Footnotes ----------

   (1) https://www.nuget.org/packages/python-freethreaded

   (2) https://www.nuget.org/packages/pythonx86-freethreaded

   (3) https://www.nuget.org/packages/pythonarm64-freethreaded


File: python.info,  Node: O pacote embutível,  Next: Pacotes Alternativos,  Prev: Os pacotes nuget org,  Up: Utilizando Python no Windows

3.4.4 O pacote embutível
------------------------

Adicionado na versão 3.5.

A distribuição embutida é um arquivo ZIP contendo um ambiente Python
mínimo.  Ela foi criada para atuar como parte de outra aplicação, ao
invés de ser diretamente acessada por usuários finais.

Quando extraída, a distribuição embutida é (quase) completamente isolada
do sistema do usuário, incluindo variáveis de ambiente, configurações de
registro de sistema, e pacotes instalados.  A biblioteca padrão está
inclusa como arquivos ‘.pyc’ pré-compilados e otimizados em um ZIP, e
‘python3.dll’, ‘python37.dll’, ‘python.exe’ e ‘pythonw.exe’ estão todos
disponíveis.  Tcl/tk (incluindo todas as dependências, como a Idle), pip
e a documentação do Python não estão inclusos.

     Nota: A distribuição embutida não inclui o Microsoft C Runtime(1) e
     é de responsabilidade do instalador da aplicação providenciar isso.
     O aplicativo de tempo de execução pode já ter sido instalado no
     sistema de um usuário previamente ou automaticamente via Windows
     Update, e pode ser detectado procurando por ‘ucrtbase.dll’ no
     diretório do sistema.

Pacotes de terceiros devem ser instalados pelo instalador da aplicação
juntamente com a distribuição embutida.  Usar o pip para gerenciar as
dependências como em uma instalação regular do Python não é suportado
nessa distribuição, apesar de que com algum cuidado pode ser possível
incluir e usar o pip para atualizações automáticas.  Em geral, pacotes
de terceiros devem ser tratados como parte da aplicação (“vendoring”)
para que o desenvolvedor consiga garantir compatibilidade com versões
mais recentes antes de fornecer atualizações para os usuários.

Os dois casos de uso recomendados para essa distribuição são descritos
abaixo.

* Menu:

* Aplicação Python::
* Incorporando Python::

   ---------- Footnotes ----------

   (1) 
https://learn.microsoft.com/cpp/windows/latest-supported-vc-redist#visual-studio-2015-2017-2019-and-2022


File: python.info,  Node: Aplicação Python,  Next: Incorporando Python,  Up: O pacote embutível

3.4.4.1 Aplicação Python
........................

Uma aplicação escrita em Python não requer necessariamente que os
usuários estejam cientes deste fato.  A distribuição embutida pode ser
usada neste caso para incluir uma versão privada do pacote de instalação
do Python.  Dependendo de quão transparente deve ser (ou pelo contrário,
quão profissional deve parecer), existem duas opções.

Usar um executável especializado como inicializador requer um pouco de
código, mas fornece a experiência mais transparente para os usuários.
Com um inicializador personalizado, não existem indicações óbvias que o
programa está rodando em Python: ícones podem ser personalizados,
informações da empresa e versão podem ser especificadas, e associações
de arquivo se comportam de forma apropriada.  Na maioria dos casos, um
inicializador personalizado deve simplesmente ser capaz de chamar
‘Py_Main’ com uma linha de comando predefinida (hard-coded).

A abordagem mais simples é fornecer um arquivo batch ou um atalho gerado
que chama diretamente o ‘python.exe’ ou ‘pythonw.exe’ com os argumentos
de linha de comando necessários.  Neste caso, a aplicação irá aparecer
como Python e não seu nome real, e os usuários podem ter problemas em
distinguir ela de outros processos ou associações de arquivo em Python.

Com a abordagem anterior, pacotes devem ser instalados como diretórios
juntamente do executável do Python para garantir que estarão disponíveis
no caminho do ambiente.  Com o instalador especializado, pacotes podem
ser armazenados em outras localidades já que há uma oportunidade de
especificar o caminho de busca antes de executar a aplicação.


File: python.info,  Node: Incorporando Python,  Prev: Aplicação Python,  Up: O pacote embutível

3.4.4.2 Incorporando Python
...........................

Aplicações escritas em código nativo frequentemente precisam de alguma
forma de linguagem de script, e a distribuição embutida do Python pode
ser usada para esse propósito.  Em geral, a maior parte da aplicação é
em código nativo, e uma parte irá ou invocar ‘python.exe’ ou usar
diretamente ‘python3.dll’.  Para ambos os casos, extrair a distribuição
embutida em um subdiretório da instalação da aplicação é suficiente para
providenciar um interpretador Python carregável.

Para uso da aplicação, pacotes podem ser instalados em qualquer local já
que há uma oportunidade de especificar caminhos de busca antes de
inicializar o interpretador.  De outra forma, não existem diferenças
fundamentais entre usar a distribuição embutida ou a instalação regular.


File: python.info,  Node: Pacotes Alternativos,  Next: Configurando o Python<2>,  Prev: O pacote embutível,  Up: Utilizando Python no Windows

3.4.5 Pacotes Alternativos
--------------------------

À parte da distribuição padrão CPython, existem pacotes modificados
incluindo funcionalidades adicionais.  A seguir está uma lista de
versões populares e seus recursos chave:

ActivePython(1)

     Instalador com compatibilidade multi-plataforma, documentação,
     PyWin32

Anaconda(2)

     Módulos científicos populares (como o numpy, scipy e pandas) e o
     gerenciador de pacotes ‘conda’.

Enthought Deployment Manager(3)

     “A próxima geração de ambiente Python e gerenciador de pacotes”.

     Anteriormente, a Enthought fornecia Canopy, mas este chegou ao fim
     de vida em 2016(4).

WinPython(5)

     Distribuição específica do Windows com pacotes científicos
     pré-construídos e ferramentas para construir pacotes.

Note que esses pacotes podem não incluir as últimas versões do Python ou
outras bibliotecas, e não são mantidos ou suportados pelo time do núcleo
do Python.

   ---------- Footnotes ----------

   (1) https://www.activestate.com/products/python/

   (2) https://www.anaconda.com/download/

   (3) https://assets.enthought.com/downloads/edm/

   (4) 
https://support.enthought.com/hc/en-us/articles/360038600051-Canopy-GUI-end-of-life-transition-to-the-Enthought-Deployment-Manager-EDM-and-Visual-Studio-Code

   (5) https://winpython.github.io/


File: python.info,  Node: Configurando o Python<2>,  Next: Modo UTF-8,  Prev: Pacotes Alternativos,  Up: Utilizando Python no Windows

3.4.6 Configurando o Python
---------------------------

Para executar o Python convenientemente de um prompt de comando, você
pode considerar mudar algumas variáveis de ambiente padrão do Windows.
Ainda que o instalador forneça uma opção para configurar as variáveis
PATH e PATHEXT para você, isso só é confiável para uma instalação única
e global no sistema.  Se você usa regularmente múltiplas versões do
Python, considere usar o *note Inicializador Python para Windows: 5be.

* Menu:

* Excursus; Configurando variáveis de ambiente: Excursus Configurando variáveis de ambiente.
* Encontrando o executável do Python::


File: python.info,  Node: Excursus Configurando variáveis de ambiente,  Next: Encontrando o executável do Python,  Up: Configurando o Python<2>

3.4.6.1 Excursus: Configurando variáveis de ambiente
....................................................

O Windows permite que variáveis de ambiente sejam configuradas de forma
permanente em ambos os níveis de Usuário e de Sistema, ou
temporariamente em um prompt de comando.

Para definir as variáveis de ambiente temporariamente, abra um Prompt de
Comando e use o comando ‘set’:

     C:\>set PATH=C:\Program Files\Python 3.9;%PATH%
     C:\>set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib
     C:\>python

Essas mudanças serão aplicadas em quaisquer comandos posteriores que
forem executados neste console, e serão herdadas por quaisquer
aplicações iniciadas pelo console.

Incluir o nome da variável com sinais de porcentagem irá expandir o
valor existente, permitindo que você adicione seu novo valor ao início
ou final.  Modificar o ‘PATH’ adicionando o diretório contendo
‘python.exe’ ao início é o modo mais comum de garantir que a versão
correta do Python seja iniciada.

Para modificar permanentemente as variáveis de ambiente padrão, clique
em Iniciar e procure por ‘Editar as variáveis de ambiente do sistema',
ou abra as propriedades do Sistema, Configurações avançadas do sistema e
clique no botão Variáveis de Ambiente.  Neste diálogo, você pode
adicionar ou modificar as variáveis de Usuário ou Sistema.  Para mudar
as variáveis do Sistema, você precisa de acesso não-restrito à sua
máquina (isto é, direitos de Administrador).

     Nota: O Windows irá concatenar as variáveis de Usuário 'após' as
     variáveis de Sistema, o que pode causar resultados inesperados
     quando modificando o ‘PATH’.

     A variável *note PYTHONPATH: 1053. é usada por todas as versões do
     Python, portanto, você não deve configurá-la permanentemente, a
     menos que os caminhos listados incluam apenas código compatível com
     todas as versões instaladas do Python.

Ver também
..........

‘https://learn.microsoft.com/windows/win32/procthread/environment-variables’

     Visão geral das variáveis de ambiente no Windows

‘https://learn.microsoft.com/windows-server/administration/windows-commands/set_1’

     O comando ‘set’, para modificar temporariamente as variáveis de
     ambiente

‘https://learn.microsoft.com/windows-server/administration/windows-commands/setx’

     O comando ‘setx’, para modificar permanentemente as variáveis de
     ambiente


File: python.info,  Node: Encontrando o executável do Python,  Prev: Excursus Configurando variáveis de ambiente,  Up: Configurando o Python<2>

3.4.6.2 Encontrando o executável do Python
..........................................

Alterado na versão 3.5.

Além de usar o registro do menu Iniciar criado automaticamente para o
interpretador do Python, você pode querer iniciar o Python no prompt de
comando.  O instalador possui uma opção para configurar isso pra você.

Na primeira página do instalador, uma opção chamada “Add Python to PATH”
pode ser selecionada para que o instalador adicione o local de
instalação na sua variável ‘PATH’.  O local da pasta de ‘Scripts\’
também é adicionado.  Isso permite que você digite ‘python’ para
executar o interpretador, e ‘pip’ para o instalador de pacotes.  Além
disso, você pode também executar seus scripts com as opções de linha de
comando, veja a documentação *note Linha de comando: 103d.

Se você não habilitar essa opção no momento de instalação, você sempre
pode re-executar o instalador, selecionar Modify, e habilitá-la.
Alternativamente, você pode modificar manualmente a variável ‘PATH’
usando os direcionamentos em *note Excursus; Configurando variáveis de
ambiente: 1d63.  Você precisa definir sua variável de ambiente ‘PATH’
para incluir o diretório da sua instalação Python, delimitado por um
ponto e vírgula de outras entradas.  Uma variável exemplo pode parecer
com isso (presumindo que as duas primeiras entradas já existem):

     C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Python 3.9


File: python.info,  Node: Modo UTF-8,  Next: Inicializador Python para Windows,  Prev: Configurando o Python<2>,  Up: Utilizando Python no Windows

3.4.7 Modo UTF-8
----------------

Adicionado na versão 3.7.

O Windows ainda usa codificações legadas para a codificação do sistema
(a Página de Código ANSI). O Python usa-o para a codificação padrão de
arquivos de texto (por exemplo, *note locale.getencoding(): 2dc.).

Isso pode causar problemas, porque o UTF-8 é amplamente usado na
Internet e na maioria dos sistemas Unix, incluindo o WSL (Subsistema
Windows para Linux).

Você pode usar o *note Modo UTF-8 do Python: 656. para alterar a
codificação de texto padrão para UTF-8.  Você pode habilitar *note Modo
UTF-8 do Python: 656. através da opção de linha de comando ‘-X utf8’ ou
da variável de ambiente ‘PYTHONUTF8=1’.  Veja *note PYTHONUTF8: ae8.
para habilitar o modo UTF-8, e *note Excursus; Configurando variáveis de
ambiente: 1d63. para saber como modificar variáveis de ambiente.

Quando o *note Modo UTF-8 do Python: 656. está habilitado, você ainda
pode usar a codificação do sistema (a página de código ANSI) através do
codec “mbcs”.

Observe que adicionar ‘PYTHONUTF8=1’ às variáveis de ambiente padrão
afetará todas as aplicações Python 3.7+ em seu sistema.  Se você tiver
aplicações Python 3.7+ que dependem da codificação do sistema legado, é
recomendável definir a variável de ambiente temporariamente ou usar a
opção de linha de comando ‘-X utf8’.

     Nota: Mesmo quando o modo UTF-8 está desativado, o Python usa o
     UTF-8 por padrão no Windows para:

        * E/S do console, incluindo E/S padrão (consulte PEP 528(1) para
          detalhes).

        * A *note codificação do sistema de arquivos: 53b. (veja a PEP
          529(2) para detalhes).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0528/

   (2) https://peps.python.org/pep-0529/


File: python.info,  Node: Inicializador Python para Windows,  Next: Encontrando módulos,  Prev: Modo UTF-8,  Up: Utilizando Python no Windows

3.4.8 Inicializador Python para Windows
---------------------------------------

Adicionado na versão 3.3.

O inicializador Python para Windows é um utilitário que auxilia na
localização e execução de diferentes versões do Python.  Ele permite que
scripts (ou a linha de comando) indiquem uma preferência por uma versão
do Python específica, e irá localizar e executar essa versão.

Ao contrário da variável ‘PATH’, o inicializador irá corretamente
selecionar a versão mais apropriada do Python.  Ele irá preferir
instalações por usuário ao invés de instalações globais no sistema, e
ordenará por versão da linguagem ao invés de usar a versão instalada
mais recentemente.

O inicializador foi originalmente especificado na PEP 397(1).

* Menu:

* Começando::
* Linhas Shebang::
* Argumentos em linhas shebang::
* Personalização::
* Diagnósticos::
* Teste de simulação::
* Instalar sob demanda::
* Códigos de retorno::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0397/


File: python.info,  Node: Começando,  Next: Linhas Shebang,  Up: Inicializador Python para Windows

3.4.8.1 Começando
.................

* Menu:

* Pela linha de comando::
* Ambientes virtuais::
* Por um script::
* Por associação de arquivos::


File: python.info,  Node: Pela linha de comando,  Next: Ambientes virtuais,  Up: Começando

3.4.8.2 Pela linha de comando
.............................

Alterado na versão 3.6.

Instalações globais no sistema do Python 3.3 ou posterior irão colocar o
inicializador no seu ‘PATH’.  O inicializador é compatível com todas as
versões disponíveis do Python, então não importa qual versão está
instalada.  Para verificar se o inicializador está disponível, execute o
seguinte comando no Prompt de Comando:

     py

Você deve perceber que a última versão do Python que você tem é iniciada
- ela pode ser fechada normalmente, e qualquer argumento da linha de
comando adicional especificado será enviado diretamente para o Python.

Se você tem múltiplas versões do Python instaladas (por exemplo, 3.7 e
3.13) você deve ter notado que o Python 3.13 foi iniciado – para iniciar
o Python 3.7, use o comando:

     py -3.7

Se você quer a versão mais recente do Python 2 que você tem instalada,
tente o comando:

     py -2

Se você ver o seguinte erro, você não tem o inicializador instalado:

     'py' is not recognized as an internal or external command,
     operable program or batch file.

O comando:

     py --list

exibe a(s) versão(ões) atualmente instalada(s) do Python.

O argumento ‘-x.y’ é a forma abreviada do argumento ‘-V:Empresa/Tag’,
que permite selecionar um ambiente de execução Python específico,
incluindo aqueles que podem ter vindo de algum lugar diferente de
python.org.  Qualquer ambiente de execução registrado seguindo a PEP
514(1) será detectável.  O comando ‘--list’ lista todos os ambientes de
execução disponíveis usando o formato ‘-V:’.

Ao usar o argumento ‘-V:’, especificar a Empresa limitará a seleção aos
ambientes de execução desse provedor, enquanto especificar apenas a Tag
selecionará de todos os provedores.  Observe que omitir a barra implica
uma tag:

     # Seleciona qualquer ambiente de execução sinalizado como '3.*'
     py -V:3

     # Seleciona qualquer ambiente de execução lançado como 'PythonCore'
     py -V:PythonCore/

     # Seleciona o ambiente de execução Python 3 mais recente de PythonCore
     py -V:PythonCore/3

A forma abreviada do argumento (‘-3’) só seleciona a partir de versões
principais do Python, e não de outras distribuições.  No entanto, a
forma mais longa (‘-V:3’) selecionará qualquer um.

A Empresa é correspondida na string completa, sem distinção entre
maiúsculas e minúsculas.  A Tag corresponde a uma string completa ou a
um prefixo, desde que o próximo caractere seja um ponto ou um hífen.
Isso permite que ‘-V:3.1’ corresponda a ‘3.1-32’, mas não a ‘3.10’.  As
tags são classificadas usando ordenação numérica (‘3.10’ é mais recente
que ‘3.1’), mas são comparadas usando texto (‘-V:3.01’ não corresponde a
‘3.1’).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0514/


File: python.info,  Node: Ambientes virtuais,  Next: Por um script,  Prev: Pela linha de comando,  Up: Começando

3.4.8.3 Ambientes virtuais
..........................

Adicionado na versão 3.5.

Se o inicializador é executado sem versão explícita do Python
especificada, e um ambiente virtual (criado com o módulo da biblioteca
padrão *note venv: 111. ou da ferramenta externa ‘virtualenv’) está
ativo, o inicializador irá executar o interpretador do ambiente virtual
ao invés do global.  Para executar o interpretador global, ou desative o
ambiente virtual, ou explicitamente especifique a versão global do
Python.


File: python.info,  Node: Por um script,  Next: Por associação de arquivos,  Prev: Ambientes virtuais,  Up: Começando

3.4.8.4 Por um script
.....................

Vamos criar um script teste de Python - crie um arquivo chamado
‘hello.py’ com os seguintes conteúdos:

     #! python
     import sys
     sys.stdout.write("olá do Python %s\n" % (sys.version,))

A partir do diretório onde hello.py está, execute o comando:

     py hello.py

Você deve notar que o número da versão da sua instalação mais recente do
Python 2.x é exibido.  Agora tente mudar a primeira linha para ser:

     #! python3

Re-executar o comando agora deve exibir informações da última versão do
Python 3.x.  Como nos exemplos da linha de comando acima, você pode
especificar um qualificador de versão mais explícito.  Presumindo que
você tem o Python 3.7 instalado, tente mudar a primeira linha para ‘#!
python3.7’ e você deve ver as informações da versão 3.7 sendo exibidas.

Note que diferentemente do uso interativo, um simples “python” irá usar
a última versão do Python 2.x que você tem instalada.  Isso é para
retrocompatibilidade e para compatibilidade com Unix, onde o comando
‘python’ tipicamente se refere ao Python 2.


File: python.info,  Node: Por associação de arquivos,  Prev: Por um script,  Up: Começando

3.4.8.5 Por associação de arquivos
..................................

O inicializador deve ter sido associado com arquivos Python (isto é,
arquivos ‘.py’, ‘.pyw’, ‘.pyc’) quando foi instalado.  Isso significa
que quando você clica duas vezes em um desses arquivos a partir do
Explorador de Arquivos do Windows o inicializador será usado, e assim
você pode usar as mesmas facilidades descritas acima para que o script
especifique qual versão deve ser usada.

O benefício chave disso é que um único inicializador pode suportar
múltiplas versões do Python ao mesmo tempo dependendo dos conteúdos da
primeira linha.


File: python.info,  Node: Linhas Shebang,  Next: Argumentos em linhas shebang,  Prev: Começando,  Up: Inicializador Python para Windows

3.4.8.6 Linhas Shebang
......................

Se a primeira linha de um arquivo de script começa com ‘#!’, ela é
conhecida como linha “shebang”.  Linux e outros tipos de sistemas
operacionais Unix têm suporte nativo para essas linhas e elas são
comumente usadas nesses sistemas para indicar como um script deve ser
executado.  Esse inicializador permite que as mesmas facilidades sejam
usadas com scripts Python no Windows e os exemplos acima demonstram seu
uso.

Para permitir que linhas shebang em scripts Python sejam portáveis entre
Unix e Windows, este inicializador suporta um número de comandos
‘virtuais’ para especificar qual interpretador deve ser usado.  Os
comandos virtuais suportados são:

   * ‘/usr/bin/env’

   * ‘/usr/bin/python’

   * ‘/usr/local/bin/python’

   * ‘python’

Por exemplo, se a primeira linha do seu script começa com

     #! /usr/bin/python

O Python padrão ou um ambiente virtual ativo será localizado e
utilizado.  Como muitos scripts Python escritos para funcionar no Unix
já terão essa linha, você deve perceber que esses scripts podem ser
usados pelo inicializador sem modificação.  Se você está escrevendo um
novo script no Windows que você espera que seja útil no Unix, você deve
usar uma dessas linhas shebang começando com ‘/usr’.

Qualquer um dos comandos virtuais acima pode ser sufixado com uma versão
explícita (ou apenas a maior versão, ou a maior e a menor versão).  Além
disso, a versão de 32 bits pode ser solicitada adicionando “-32” após a
menor versão.  Isto é, ‘/usr/bin/python3.7-32’ irá solicitar o uso do
python 3.7 32-bit.  Se um ambiente virtual estiver ativo, a versão será
ignorada e o ambiente será usado.

Adicionado na versão 3.7: A partir do inicializador do python 3.7 é
possível solicitar a versão 64-bit adicionando o sufixo “-64”.  Além
disso é possível especificar uma versão maior e arquitetura sem a menor
(isto é, ‘/usr/bin/python3-64’).

Alterado na versão 3.11: O sufixo “-64” foi descontinuado e agora
implica “qualquer arquitetura que não seja comprovadamente i386/32
bits”.  Para solicitar um ambiente específico, use o novo argumento
‘-V:TAG’ com a tag completa.

Alterado na versão 3.13: Comandos virtuais que referenciam ‘python’
agora preferem um ambiente virtual ativo em vez de pesquisar ‘PATH’.
Isso lida com casos em que o shebang especifica ‘/usr/bin/env python3’,
mas ‘python3.exe’ não está presente no ambiente ativo.

A forma ‘/usr/bin/env’ da linha shebang tem mais uma propriedade
especial.  Antes de procurar por interpretadores Python instalados, este
formulário pesquisará o executável ‘PATH’ por um executável Python
correspondente ao nome fornecido como o primeiro argumento.  Isso
corresponde ao comportamento do programa Unix ‘env’, que executa uma
pesquisa ‘PATH’.  Se um executável correspondente ao primeiro argumento
após o comando ‘env’ não puder ser encontrado, mas o argumento começar
com ‘python’, ele será tratado conforme descrito para os outros comandos
virtuais.  A variável de ambiente ‘PYLAUNCHER_NO_SEARCH_PATH’ pode ser
definida (para qualquer valor) para ignorar esta pesquisa de ‘PATH’.

As linhas Shebang que não correspondem a nenhum desses padrões são
procuradas na seção ‘[commands]’ do arquivo *note .INI: 1fb0. do
lançador.  Isso pode ser usado para lidar com certos comandos de uma
maneira que faça sentido para o seu sistema.  O nome do comando deve ser
um único argumento (sem espaços no executável shebang) e o valor
substituído é o caminho completo para o executável (argumentos
adicionais especificados no .INI serão citados como parte do nome do
arquivo).

     [commands]
     /bin/xpython=C:\Program Files\XPython\python.exe

Quaisquer comandos não encontrados no arquivo .INI são tratados como
caminhos executáveis do 'Windows' que são absolutos ou relativos ao
diretório que contém o arquivo de script.  Isso é uma conveniência para
scripts somente do Windows, como aqueles gerados por um instalador, pois
o comportamento não é compatível com shells de estilo Unix.  Esses
caminhos podem ser citados e podem incluir vários argumentos, após os
quais o caminho para o script e quaisquer argumentos adicionais serão
anexados.


File: python.info,  Node: Argumentos em linhas shebang,  Next: Personalização,  Prev: Linhas Shebang,  Up: Inicializador Python para Windows

3.4.8.7 Argumentos em linhas shebang
....................................

As linhas shebang também podem especificar opções adicionais a serem
passadas ao interpretador Python.  Por exemplo, se você tem uma linha
shebang:

     #! /usr/bin/python -v

O Python será iniciado com a opção ‘-v’


File: python.info,  Node: Personalização,  Next: Diagnósticos,  Prev: Argumentos em linhas shebang,  Up: Inicializador Python para Windows

3.4.8.8 Personalização
......................

* Menu:

* Personalização via arquivos INI::
* Personalizando versões padrão do Python::


File: python.info,  Node: Personalização via arquivos INI,  Next: Personalizando versões padrão do Python,  Up: Personalização

3.4.8.9 Personalização via arquivos INI
.......................................

Dois arquivos .ini serão pesquisados pelo inicializador - ‘py.ini’ no
diretório de dados de aplicações do usuário atual (‘%LOCALAPPDATA%’ ou
‘$env:LocalAppData’) e ‘py.ini’ no mesmo diretório que o inicializador.
Os mesmos arquivos .ini são usados para ambas a versão ‘console’ do
inicializador (isto é, py.exe) e a versão ‘windows’ (isto é, pyw.exe).

Personalização especificada no “diretório da aplicação” terão
precedência sobre àquela especificada junto do executável, portanto um
usuário, que pode não ter acesso de escrita ao arquivo .ini junto do
inicializador, pode sobrescrever comandos naquele arquivo .ini global.


File: python.info,  Node: Personalizando versões padrão do Python,  Prev: Personalização via arquivos INI,  Up: Personalização

3.4.8.10 Personalizando versões padrão do Python
................................................

Em alguns casos, um qualificador de versão pode ser incluído em um
comando para ditar qual versão do Python deve ser usada pelo comando.
Um qualificador de versão começa com um número maior de versão e pode
opcionalmente ser seguido por um ponto (‘.’) e uma especificação de
versão menor.  Além disso, é possível especificar se uma implementação
de 32 ou 64 bit deve ser solicitada adicionando “-32” ou “-64”.

Por exemplo, uma linha shebang ‘#!python’ não tem qualificador de
versão, enquanto ‘#!python3’ tem um qualificador de versão que
especifica apenas uma versão maior.

Se nenhum qualificador de versão é encontrado em um comando, a variável
de ambiente ‘PY_PYTHON’ pode ser definida para especificar o
qualificador de versão padrão.  Se ela não está definida, o padrão é
“3”.  A variável pode especificar qualquer valor que pode ser passado
para a linha de comando, como “3”, “3.7”, “3.7-32” ou “3.7-64”.  (Note
que a opção “-64” está disponível apenas com o inicializador incluso no
Python 3.7 ou mais recente.)

Se nenhum qualificador de versão menor é encontrado, a variável de
ambiente ‘PY_PYTHON{major}’ (onde ‘{major}’ é o qualificador da versão
maior atual, como determinado acima) pode ser definida para especificar
a versão completa.  Se nenhuma opção é encontrada, o inicializador irá
enumerar as versões do Python instaladas e usar a última versão menor
encontrada como versão maior, o que é provavelmente, ainda que não
garantido, a versão instalada mais recentemente naquela família.

Em um Windows 64-bit com ambas as implementações de 32-bit e 64-bit da
mesma (maior.menor) versão do Python instaladas, a versão 64-bit sempre
será preferida.  Isso será verdadeiro para ambas as implementações de
32-bit e 64-bit do inicializador - um inicializador 32-bit irá preferir
executar uma instalação 64-bit do Python da versão especificada, se
disponível.  Isso é para que o comportamento do inicializador possa ser
previsto sabendo apenas quais versões estão instaladas no PC e sem
considerar a ordem com que elas foram instaladas (isto é, sem saber se a
última a ser instalada foi a versão 32 ou 64-bit do Python e do
instalador correspondente).  Como observado acima, um sufixo opcional
“-32” ou “-64” pode ser usado como especificador de versão para mudar
esse comportamento.

Exemplos:

   * Se nenhuma opção relevante for definida, os comandos ‘python’ e
     ‘python2’ irão usar a última versão instalada do Python 2.x e o
     comando ‘python3’ irá usar o último Python 3.x instalado.

   * O comando ‘python3.7’ não vai consultar nenhuma opção já que as
     versões estão completamente especificadas.

   * Se ‘PY_PYTHON=3’, os comandos ‘python’ e ‘python3’ irão ambos usar
     a última versão do Python 3 instalada.

   * Se ‘PY_PYTHON=3.7-32’, o comando ‘python’ irá usar a implementação
     32 bits do 3.7 enquanto o comando ‘python3’ irá usar o último
     Python instalado (PY_PYTHON não foi considerado porque uma versão
     maior foi especificada).

   * Se ‘PY_PYTHON=3’ e ‘PY_PYTHON3=3.7’, os comandos ‘python’ e
     ‘python3’ irão ambos usar especificamente 3.7

Em adição às variáveis de ambiente, as mesmas configurações podem ser
feitas no arquivo .INI usado pelo inicializador.  A seção nos arquivos
INI é chamada ‘[defaults]’ e o nome da chave será o mesmo que as
variáveis de ambiente sem o prefixo ‘PY_’ (e observe que os nomes das
chaves no arquivo INI não diferem maiúsculas e minúsculas).  Os
conteúdos de uma variável de ambiente irão sobrescrever coisas
especificadas em um arquivo INI.

Por exemplo:

   * Configurar ‘PY_PYTHON=3.7’ é o equivalente ao arquivo INI contendo:

     [defaults]
     python=3.7

   * Configurar ‘PY_PYTHON=3’ e ‘PY_PYTHON3=3.7’ é o equivalente ao
     arquivo INI contendo:

     [defaults]
     python=3
     python3=3.7


File: python.info,  Node: Diagnósticos,  Next: Teste de simulação,  Prev: Personalização,  Up: Inicializador Python para Windows

3.4.8.11 Diagnósticos
.....................

Se uma variável de ambiente ‘PYLAUNCHER_DEBUG’ é configurada (para
qualquer valor), o inicializador irá exibir a informação de diagnóstico
do stderr (isto é, no console).  Enquanto essa informação consegue ser
simultaneamente verbosa 'e' concisa, ela deve permitir que você veja
quais versões do Python foram localizadas, porquê uma versão particular
foi escolhida e qual linha de comando exatamente foi usada para executar
o Python alvo.  Destina-se principalmente para testes e depuração.


File: python.info,  Node: Teste de simulação,  Next: Instalar sob demanda,  Prev: Diagnósticos,  Up: Inicializador Python para Windows

3.4.8.12 Teste de simulação
...........................

Se uma variável de ambiente ‘PYLAUNCHER_DRYRUN’ for definida (para
qualquer valor), o inicializador emitirá o comando que ele teria
executado, mas não iniciará o Python de fato.  Isso pode ser útil para
ferramentas que desejam usar o inicializador para detectar e então
iniciar o Python diretamente.  Observe que o comando escrito na saída
padrão é sempre codificado usando UTF-8 e pode não ser renderizado
corretamente no console.


File: python.info,  Node: Instalar sob demanda,  Next: Códigos de retorno,  Prev: Teste de simulação,  Up: Inicializador Python para Windows

3.4.8.13 Instalar sob demanda
.............................

Se uma variável de ambiente ‘PYLAUNCHER_ALLOW_INSTALL’ for definida
(para qualquer valor), e a versão do Python solicitada não estiver
instalada, mas estiver disponível na Microsoft Store, o inicializador
tentará instalá-la.  Isso pode exigir interação do usuário para ser
concluído, e você pode precisar executar o comando novamente.

Uma variável adicional ‘PYLAUNCHER_ALWAYS_INSTALL’ faz com que o
inicializador sempre tente instalar o Python, mesmo se for detectado.
Isso é destinado principalmente para teste (e deve ser usado com
‘PYLAUNCHER_DRYRUN’).


File: python.info,  Node: Códigos de retorno,  Prev: Instalar sob demanda,  Up: Inicializador Python para Windows

3.4.8.14 Códigos de retorno
...........................

Os seguintes códigos de saída podem ser retornados pelo inicializador do
Python.  Infelizmente, não há como distingui-los do código de saída do
próprio Python.

Os nomes dos códigos são como usados nas fontes e são apenas para
referência.  Não há como acessá-los ou resolvê-los além de ler esta
página.  As entradas são listadas em ordem alfabética de nomes.

Nome                    Valor       Descrição
                                    
----------------------------------------------------------------------------------------
                                    
RC_BAD_VENV_CFG         107         Um ‘pyvenv.cfg’ foi encontrado, mas está
                                    corrompido.
                                    
                                    
RC_CREATE_PROCESS       101         Falha ao iniciar o Python.
                                    
                                    
RC_INSTALLING           111         Uma instalação foi iniciada, mas o comando
                                    precisará ser executado novamente após sua
                                    conclusão.
                                    
                                    
RC_INTERNAL_ERROR       109         Erro inesperado.  Por favor, relate um bug.
                                    
                                    
RC_NO_COMMANDLINE       108         Não é possível obter a linha de comando do
                                    sistema operacional.
                                    
                                    
RC_NO_PYTHON            103         Não foi possível localizar a versão solicitada.
                                    
                                    
RC_NO_VENV_CFG          106         Um ‘pyvenv.cfg’ era necessário, mas não foi
                                    encontrado.
                                    


File: python.info,  Node: Encontrando módulos,  Next: Módulos adicionais,  Prev: Inicializador Python para Windows,  Up: Utilizando Python no Windows

3.4.9 Encontrando módulos
-------------------------

Estas notas complementam a descrição em *note A inicialização do caminho
de pesquisa de módulos sys.path: 1de6. com notas detalhadas do Windows.

Quando nenhum arquivo ‘._pth’ é encontrado, assim é como *note sys.path:
3b4. é populado no Windows:

   * Uma entrada em branco é adicionada ao início, que corresponde ao
     diretório atual.

   * Se a variável de ambiente *note PYTHONPATH: 1053. existe, como
     descrito em *note Variáveis de ambiente: 5f1, suas entradas são
     adicionadas em seguida.  Note que no Windows, caminhos nessa
     variável devem ser separados por ponto e vírgula, para distinguir
     eles dos dois pontos usados nos identificadores de drivers (‘C:\’
     etc.).

   * “Caminhos da aplicação” adicionais podem ser adicionados ao
     registro como subchaves de
     ‘\SOFTWARE\Python\PythonCore{version}\PythonPath’ sob ambas
     ‘HKEY_CURRENT_USER’ e ‘HKEY_LOCAL_MACHINE’.  Subchaves que possuem
     string de caminhos delimitados por ponto e vírgula como seu valor
     padrão farão com que cada caminho seja adicionado ao *note
     sys.path: 3b4.  (Note que todos os instaladores conhecidos usam
     apenas HKLM, portanto HKCU está tipicamente vazio.)

   * Se a variável de ambiente *note PYTHONHOME: 3bc. está definida, ela
     é presumida como “Python Home”.  Caso contrário, o caminho do
     principal executável do Python é usado para localizar um “arquivo
     de referência” (ou ‘Lib\os.py’ ou ‘pythonXY.zip’) para deduzir o
     “Python Home”.  Se um Python Home é encontrado, os subdiretórios
     relevantes adicionados ao *note sys.path: 3b4. (‘Lib’, ‘plat-win’,
     etc) são baseados naquela pasta.  Se não, o caminho núcleo do
     Python é construído a partir do PythonPath armazenado no registro.

   * Se o Python Home não puder ser localizado, nenhum *note PYTHONPATH:
     1053. está especificado no ambiente, e nenhuma entrada de registro
     pôde ser encontrada, um caminho padrão com entradas relativas é
     usado (por exemplo, ‘.\Lib;.\plat-win’, etc).

Se um arquivo ‘pyvenv.cfg’ for encontrado juntamente com o principal
executável ou no diretório um nível acima do executável, as seguintes
variações se aplicam:

   * Se ‘home’ é um caminho absoluto e *note PYTHONHOME: 3bc. não está
     definido, o caminho é usado ao invés do caminho ao principal
     executável quando deduzindo a localização do Home.

O resultado final de tudo isso é:

   * Quando executando ‘python.exe’, ou qualquer outro .exe no diretório
     principal do Python (ou uma versão instalada, ou diretamente do
     diretório PCbuild), o caminho núcleo é deduzido, e os caminhos
     núcleo no registro são ignorados.  Outros “caminhos da aplicação”
     no registro são sempre lidos.

   * Quando Python é hospedado em outro .exe (diretório diferente,
     embutido via COM, etc), o “Python Home” não será deduzido, então o
     caminho núcleo do registro é usado.  Outros “caminhos da aplicação”
     no registro sempre são lidos.

   * Se o Python não puder encontrar seu Home e não existem valores no
     registro (.exe imutáveis, algumas configurações de instalação bem
     estranhas) você recebe um caminho com alguns caminhos padrão, porém
     relativos.

Para aqueles que querem empacotar o Python em suas aplicações ou
distribuições, o seguinte conselho irá prevenir conflitos com outras
instalações:

   * Inclua um arquivo ‘._pth’ juntamente do executável contendo os
     diretórios a serem incluídos.  Isso irá ignorar caminhos listados
     no registro e variáveis de ambiente, e também ignorar ‘sites’ a não
     ser que ‘import site’ seja listado.

   * Se você estiver carregando ‘python3.dll’ ou ‘python37.dll’ em seu
     próprio executável, defina explicitamente *note
     PyConfig.module_search_paths: 3a2. antes de *note
     Py_InitializeFromConfig(): 3c5.

   * Limpe e/ou sobrescreva *note PYTHONPATH: 1053. e defina *note
     PYTHONHOME: 3bc. antes de iniciar o ‘python.exe’ a partir da sua
     aplicação.

   * Se você não puder usar as sugestões anteriores (por exemplo, você é
     uma distribuição que permite que as pessoas executem o arquivo
     ‘python.exe’ diretamente), certifique-se de que o arquivo de
     referência (‘Lib\os.py’) existe no seu diretório de instalação.
     (Note que ele não será detectado dentro de um arquivo ZIP, mas um
     arquivo ZIP corretamente nomeado será detectado ao invés disso.)

Isso irá garantir que seus arquivos em uma instalação global no sistema
não terão precedência sobre uma cópia da biblioteca padrão empacotada
com a sua aplicação.  Caso contrário, seus usuários podem experienciar
problemas usando sua aplicação.  Note que a primeira sugestão é a
melhor, pois as outras podem ainda estar suscetíveis a caminhos
não-padrão no registro e no site-packages do usuário.

Alterado na versão 3.6: Adiciona suporte a arquivos ‘._pth’ e remove a
opção ‘applocal’ do ‘pyvenv.cfg’.

Alterado na versão 3.6: Adiciona ‘python`XX'.zip’ como uma possível
referência quando diretamente adjacente ao executável.

Descontinuado desde a versão 3.6: Módulos especificados no registro sob
‘Modules’ (não ‘PythonPath’) podem ser importados por *note
importlib.machinery.WindowsRegistryFinder: d4c.  Este localizador está
ativo no Windows no 3.6.0 e anteriores, mas pode precisar ser
explicitamente adicionado ao *note sys.meta_path: d4d. no futuro.


File: python.info,  Node: Módulos adicionais,  Next: Compilando Python no Windows,  Prev: Encontrando módulos,  Up: Utilizando Python no Windows

3.4.10 Módulos adicionais
-------------------------

Mesmo que o Python tenha como objetivo ser portável através de todas as
plataformas, existem recursos que são únicos para o Windows.  Alguns
módulos, em ambas as bibliotecas padrão e externa, e trechos de código
existem para usar esses recursos.

Os módulos padrão específicos para Windows estão documentados em *note
Serviços Específicos do MS Windows: 1fbb.

* Menu:

* PyWin32::
* cx_Freeze::


File: python.info,  Node: PyWin32,  Next: cx_Freeze,  Up: Módulos adicionais

3.4.10.1 PyWin32
................

O módulo PyWin32(1) de Mark Hammond é uma coleção de módulos para
suporte avançado específico para Windows.  Isso inclui utilitários para:

   * Component Object Model(2) (COM)

   * Chamadas à API Win32

   * Registro

   * Log de Eventos

   * Interfaces de usuário Microsoft Foundation Classes(3) (MFC)

PythonWin(4) é uma aplicação MFC de exemplo enviada com o PyWin32.  É
uma IDE embutível com um depurador embutido.

Ver também
..........

Win32 How Do I...?(5)

     por Tim Golden

Python e COM(6)

     by David and Paul Boddie

   ---------- Footnotes ----------

   (1) https://pypi.org/project/PyWin32/

   (2) 
https://learn.microsoft.com/windows/win32/com/component-object-model-com-portal

   (3) https://learn.microsoft.com/cpp/mfc/mfc-desktop-applications

   (4) 
https://web.archive.org/web/20060524042422/https://www.python.org/windows/pythonwin/

   (5) https://timgolden.me.uk/python/win32_how_do_i.html

   (6) https://www.boddie.org.uk/python/COM.html


File: python.info,  Node: cx_Freeze,  Prev: PyWin32,  Up: Módulos adicionais

3.4.10.2 cx_Freeze
..................

cx_Freeze(1) encapsula scripts Python em programas executáveis do
Windows (arquivos ‘`*'.exe’).  Quando você tiver feito isso, você pode
distribuir sua aplicação sem solicitar que os seus usuários instalem o
Python.

   ---------- Footnotes ----------

   (1) https://cx-freeze.readthedocs.io/en/latest/


File: python.info,  Node: Compilando Python no Windows,  Next: Outras plataformas,  Prev: Módulos adicionais,  Up: Utilizando Python no Windows

3.4.11 Compilando Python no Windows
-----------------------------------

Se você quer compilar o CPython por conta própria, a primeira coisa que
você precisa ter é a fonte(1).  Você pode fazer o download tanto da
fonte da última versão quanto pegar um novo checkout(2).

A árvore de fontes contém uma solução de construção e arquivos de
projeto para o Microsoft Visual Studio, que é o compilador usado para
construir as versões do Python oficiais.  Esses arquivos estão no
diretório ‘PCbuild’.

Confira o ‘PCbuild/readme.txt’ para informações gerais sobre o processo
de construção.

Para módulos de extensão, consulte *note Construindo Extensões C e C++
no Windows: 1fbf.

   ---------- Footnotes ----------

   (1) https://www.python.org/downloads/source/

   (2) https://devguide.python.org/setup/#get-the-source-code


File: python.info,  Node: Outras plataformas,  Prev: Compilando Python no Windows,  Up: Utilizando Python no Windows

3.4.12 Outras plataformas
-------------------------

Com o desenvolvimento do Python em andamento, algumas plataformas que
costumavam ser suportadas anteriormente não são mais suportadas (devido
à falta de usuário ou desenvolvedores).  Confira a PEP 11(1) para
detalhes de todas as plataformas não suportadas.

   * Windows CE(2) não é mais suportado(3) desde o Python 3 (se é que
     foi em algum momento).

   * O instalador do Cygwin(4) oferece instalar o interpretador do
     Python(5) também

Veja Python for Windows(6) para informação detalhada sobre as
plataformas com instaladores pré-compilados.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0011/

   (2) https://pythonce.sourceforge.net/

   (3) https://github.com/python/cpython/issues/71542

   (4) https://cygwin.com/

   (5) https://cygwin.com/packages/summary/python3.html

   (6) https://www.python.org/downloads/windows/


File: python.info,  Node: Usando Python em macOS,  Next: Utilizando Python no Android,  Prev: Utilizando Python no Windows,  Up: Configurações e Uso do Python

3.5 Usando Python em macOS
==========================

Este documento tem o objetivo de fornecer uma visão geral dos
comportamentos específicos do macOS que você deve conhecer para começar
a usar o Python em computadores Mac.  O Python em um Mac com macOS é
muito semelhante ao Python em outras plataformas derivadas do Unix, mas
há algumas diferenças na instalação e alguns recursos.

Há várias maneiras de obter e instalar o Python para macOS. Versões
pré-construídas das versões mais recentes do Python estão disponíveis em
vários distribuidores.  Grande parte deste documento descreve o uso dos
Pythons fornecidos pela equipe de lançamento do CPython, disponíveis
para download no site python.org(1).  Consulte *note Distribuições
alternativas: 1fc5. para conhecer outras opções.
* Menu:

* Usando Python para macOS do python.org: Usando Python para macOS do python org.
* Distribuições alternativas::
* Instalando pacotes adicionais ao python::
* Programação de GUI::
* Tópicos Avançados::
* Outros recursos::

   ---------- Footnotes ----------

   (1) https://www.python.org/downloads/


File: python.info,  Node: Usando Python para macOS do python org,  Next: Distribuições alternativas,  Up: Usando Python em macOS

3.5.1 Usando Python para macOS do ‘python.org’
----------------------------------------------

* Menu:

* Etapas de instalação: Etapas de instalação<2>.
* Como executar um script Python::


File: python.info,  Node: Etapas de instalação<2>,  Next: Como executar um script Python,  Up: Usando Python para macOS do python org

3.5.1.1 Etapas de instalação
............................

Para as versões atuais de Python(1) (exceto as com status ‘security’), a
equipe de lançamento produz um pacote de instalação 'Python para macOS'
em cada novo lançamento.  Uma lista dos instaladores disponíveis está
disponível aqui(2).  Recomendamos usar a versão suportada mais recente
de Python sempre que possível.  Os instaladores atuais fornecem uma
versão de Python como binário universal 2(3) que é executado nativamente
em todos os Macs (Apple Silicon e Intel) compatíveis com uma ampla gama
de versões do macOS, atualmente do 'macOS 10.13 High Sierra' em diante.

O arquivo baixado é um arquivo padrão do instalador de pacotes do macOS
(‘.pkg’).  As informações de integridade do arquivo (soma de
verificação, tamanho, assinatura de Sigstore, etc.)  de cada arquivo
estão inclusas na página de download dos lançamentos.  Os pacotes de
instalação e seus conteúdos são assinados e autenticados com
certificados Apple Developer ID ‘Python Software Foundation’ para
atender aos requisitos do macOS Gatekeeper(4).

Para uma instalação padrão, clique duas vezes no arquivo instalador de
pacotes baixado.  Isso deverá abrir o aplicativo padrão de instalação do
macOS e exibir o primeiro de vários passos de instalação.

[image src="python-figures/mac_installer_01_introduction.png"]


Ao clicar no botão 'Continuar', é exibido o 'Read Me' desse instalador.
Além de outras informações importantes, o 'Read Me' documenta qual
versão de Python será instalada e em quais versões do macOS ele é
compatível.  Talvez você precise rolar a tela para ler o arquivo
inteiro.  Por padrão, esse 'Read Me' também será instalado em
‘/Applications/Python 3.13/’ e estará disponível para leitura a qualquer
momento.

[image src="python-figures/mac_installer_02_readme.png"]


Ao clicar em 'Continuar', o instalador exibe a licença do Python e de
outros softwares incluídos.  Você precisará 'Concordar' com os termos da
licença antes de prosseguir para a próxima etapa.  Esse arquivo de
licença também será instalado e estará disponível para leitura a
qualquer momento.

[image src="python-figures/mac_installer_03_license.png"]


Após aceitar os termos da licença, a próxima etapa será a tela 'Tipo de
instalação'.  Para a maioria dos usos, o conjunto padrão de operações de
instalação é adequado.

[image src="python-figures/mac_installer_04_installation_type.png"]


Ao pressionar o botão 'Personalizar', você pode optar por omitir ou
selecionar determinados componentes de pacote do instalador.  Clique em
cada nome de pacote para ver uma descrição do que ele instala.  Para
também instalar o suporte para o recurso experimental opcional de
threads livres, consulte *note Instalando binários com threads livres:
1fc9.

[image src="python-figures/mac_installer_05_custom_install.png"]


Em ambos os casos, clicar em 'Instalar' iniciará o processo de
instalação solicitando a permissão para instalar um novo software.  É
necessário um nome de usuário do macOS com privilégio de
‘Administrador’, pois o Python instalado estará disponível para todos os
usuários do Mac.

Quando a instalação for concluída, a janela 'Resumo' será exibida.

[image src="python-figures/mac_installer_06_summary.png"]


Clique duas vezes no ícone ou arquivo ‘Install Certificates.command’ na
janela ‘/Applications/Python 3.13/’ para concluir a instalação.

[image src="python-figures/mac_installer_07_applications.png"]


Isso abrirá uma janela temporária do console ‘Terminal’ que usará o novo
Python para baixar e instalar certificados raiz SSL para seu uso.

[image src="python-figures/mac_installer_08_install_certificates.png"]


Se ‘Successfully installed certifi’ e ‘update complete’ aparecerem na
janela do terminal, a instalação estará concluída.  Feche essa janela do
terminal e a janela do instalador.

Uma instalação do padrão incluirá:

   * Uma pasta ‘Python 3.13’ em sua pasta ‘Applications’.  Aqui você
     encontra o ‘IDLE’, o ambiente de desenvolvimento que é parte das
     distribuições oficiais do Python; e o ‘Python Launcher’, que
     executa scripts Python quando são clicados duas vezes dentro do
     Finder(5) .

   * Uma framework ‘/Library/Frameworks/Python.framework’, que inclui o
     executável Python e suas bibliotecas.  O instalador adiciona esse
     local ao seu 'path' do console.  Para desinstalar o Python, você
     pode remover esses três itens.  É um link simbólico para o
     executável Python armazenado na pasta ‘/usr/local/bin/’.

     Nota: As versões recentes do macOS incluem um comando ‘python3’ em
     ‘/usr/bin/python3’ que aponta para uma versão geralmente mais
     antiga e incompleta de Python fornecida por e para uso pelas
     ferramentas de desenvolvimento da Apple, ‘Xcode’ ou o ‘Command Line
     Tools for Xcode’.  Você nunca deve modificar ou tentar excluir essa
     instalação por ser controlada pela Apple e é usada por softwares da
     Apple ou de terceiros.  Se você optar por instalar uma versão mais
     recente do Python a partir de ‘python.org’, você terá duas
     instalações diferentes, mas funcionais, de Python no computador que
     podem coexistir.  As opções do instalador padrão devem garantir que
     o comando ‘python3’ seja usado em vez do ‘python3’ do sistema.

   ---------- Footnotes ----------

   (1) https://www.python.org/downloads/

   (2) https://www.python.org/downloads/macos/

   (3) https://pt.wikipedia.org/wiki/Binário_universal

   (4) https://support.apple.com/en-us/102445

   (5) https://support.apple.com/en-us/HT201732


File: python.info,  Node: Como executar um script Python,  Prev: Etapas de instalação<2>,  Up: Usando Python para macOS do python org

3.5.1.2 Como executar um script Python
......................................

Há duas maneiras de invocar o interpretador Python.  Se você estiver
familiarizado com o uso de um console Unix em terminal, você pode
invocar ‘python3.13’ ou ‘python3’, opcionalmente seguido por uma ou mais
opções da linha de comando (descritas em *note Linha de comando e
ambiente: 1b36.).  O tutorial de Python também tem uma seção útil sobre
o *note uso interativo do Python a partir de um console: 16f.

Você também pode invocar o interpretador por um ambiente de
desenvolvimento integrado (IDE). O *note IDLE — editor e console Python:
104b. é um editor e ambiente de desenvolvimento básico incluído com a
distribuição padrão de Python.  ‘IDLE’ inclui um menu Ajuda que te
permite acessar a documentação de Python.  Se você for completamente
iniciante em Python, você pode ler o tutorial de introdução na
documentação.

Há muitos outros editores e IDEs disponíveis.  Consulte *note Editores e
IDEs: 1fcb. para mais informações.

Para executar um script Python na janela do terminal, você pode invocar
o interpretador com o nome do arquivo de script:

     ‘python3.13’ ‘meuscript.py’

Para executar seu script a partir do Finder, você pode:

   * Arrastá-lo para o ‘Python Launcher’.

   * Selecione ‘Python Launcher’ como a aplicação padrão para abrir seu
     script (ou qualquer script ‘.py’) na janela de informações Finder
     Info, e clique duas vezes nele.  O ‘Python Launcher’ tem várias
     preferências para controlar como o script é iniciado.  Você pode
     arrastar opções para alterá-las por uma invocação, ou usar o menu
     ‘Preferências’ para alterar configurações globalmente.

Saiba que executar o script diretamente do Finder pode produzir
resultados diferentes daqueles obtidos em uma janela de terminal, pois o
script não será executado no ambiente normal do console, incluindo
qualquer configuração de variáveis de ambiente nos perfis do console.
E, como em qualquer outro script ou programa, certifique-se do que está
prestes a executar.


File: python.info,  Node: Distribuições alternativas,  Next: Instalando pacotes adicionais ao python,  Prev: Usando Python para macOS do python org,  Up: Usando Python em macOS

3.5.2 Distribuições alternativas
--------------------------------

Além do instalador padrão do ‘python.org’ para macOS, existem
distribuições de terceiros para macOS que podem incluir funcionalidades
adicionais.  Algumas distribuições populares e seus recursos-chave são:

ActivePython(1)

     Instalador com compatibilidade multiplataforma, documentação

Anaconda(2)

     Módulos científicos populares (como numpy, scipy e pandas) e o
     gerenciador de pacotes ‘conda’.

Homebrew(3)

     Gerenciador de pacotes para macOS que inclui várias versões do
     Python e muitos pacotes Python de terceiros (incluindo numpy, scipy
     e pandas).

MacPorts(4)

     Outro gerenciador de pacotes para macOS, incluindo várias versões
     de Python e muitos pacotes Python de terceiros.  Pode incluir
     versões pré-construídas do Python e muitos pacotes para versões
     mais antigas do macOS.

Note que distribuições podem não incluir versões mais recentes de Python
ou de outras bibliotecas, e não são mantidas ou providas pela equipe do
Python.

   ---------- Footnotes ----------

   (1) https://www.activestate.com/products/python/

   (2) https://www.anaconda.com/download/

   (3) https://brew.sh

   (4) https://www.macports.org


File: python.info,  Node: Instalando pacotes adicionais ao python,  Next: Programação de GUI,  Prev: Distribuições alternativas,  Up: Usando Python em macOS

3.5.3 Instalando pacotes adicionais ao python
---------------------------------------------

Consulte o Guia de Usuário para Empacotamento de Python(1) para mais
informações.

   ---------- Footnotes ----------

   (1) 
https://packaging.python.org/en/latest/tutorials/installing-packages/


File: python.info,  Node: Programação de GUI,  Next: Tópicos Avançados,  Prev: Instalando pacotes adicionais ao python,  Up: Usando Python em macOS

3.5.4 Programação de GUI
------------------------

Existem várias opções para criar aplicações GUI no Mac com Python.

O kit de ferramentas GUI padrão de Python é o módulo *note tkinter: f0,
baseado no kit de ferramentas multiplataforma Tk (‘https://www.tcl.tk’).
Uma versão nativa do Tk para macOS está incluída no instalador.

'O PyObjC' é uma ligação em Python para o Objective-C/Cocoa da Apple
framework.  Informações sobre o PyObjC estão disponíveis em pyobjc(1).

Há vários kits de ferramentas GUI alternativas disponíveis para o macOS,
incluindo:

   * PySide(2): Ligações oficiais em Python ao kit de ferramentas Qt
     GUI(3) .

   * PyQt(4): Ligações alternativas em Python ao Qt.

   * Kivy(5): Um kit de ferramentas GUI multiplataforma que dá suporte a
     plataformas de desktop e dispositivos móveis.

   * Toga(6): Parte do BeeWare Project(7); dá suporte a aplicativos para
     desktop, dispositivos móveis, Web e console.

   * wxPython(8): Um kit de ferramentas multiplataforma que dá suporte a
     sistemas operacionais desktop.

   ---------- Footnotes ----------

   (1) https://pypi.org/project/pyobjc/

   (2) https://www.qt.io/qt-for-python

   (3) https://wiki.qt.io/Qt_for_Python

   (4) https://riverbankcomputing.com/software/pyqt/

   (5) https://kivy.org

   (6) https://toga.readthedocs.io

   (7) https://beeware.org

   (8) https://wxpython.org


File: python.info,  Node: Tópicos Avançados,  Next: Outros recursos,  Prev: Programação de GUI,  Up: Usando Python em macOS

3.5.5 Tópicos Avançados
-----------------------

* Menu:

* Instalando binários com threads livres: Instalando binários com threads livres<2>.
* Instalação usando a linha de comando::
* Distribuindo aplicações Python::
* Conformidade com a App Store::


File: python.info,  Node: Instalando binários com threads livres<2>,  Next: Instalação usando a linha de comando,  Up: Tópicos Avançados

3.5.5.1 Instalando binários com threads livres
..............................................

Adicionado na versão 3.13: (Experimental)

     Nota: Tudo descrito nesta seção é considerado experimental e
     espera-se que mude em versões futuras.

O pacote de instalação do *note Python para macOS: 173. em ‘python.org’
pode, opcionalmente, instalar uma compilação adicional do Python 3.13
que dá suporte à PEP 703(1), o recurso experimental de threads livres
(executado com o *note trava global do interpretador: 148. desativado).
Verifique a página de lançamento em ‘python.org’ para obter informações
atualizadas.

Como esse recurso ainda é considerado experimental, seu suporte não é
instalado por padrão.  Ele é empacotado como uma opção de instalação
separada, disponível clicando no botão 'Personalizar' na etapa 'Tipo de
instalação' do instalador, como descrito acima.

[image src="python-figures/mac_installer_09_custom_install_free_threaded.png"]


Se a caixa ao lado do nome 'Free-Threaded Python' for marcada, um
arquivo ‘PythonT.framework’ também será instalado junto ao arquivo
‘Python.framework’ em ‘/Library/Frameworks’.  Essa configuração permite
que a compilação de Python 3.13 com threads livres coexista no seu
sistema com a compilação de Python 3.13 tradicional (com GIL) com risco
mínimo durante instalação ou testagem.  Esse layout de instalação é em
si experimental e pode mudar em lançamentos futuros.

Precauções e limitações conhecidas:

   - O pacote 'Unix command-line tools', que é selecionado por padrão,
     instalará links em ‘/usr/local/bin’ para ‘python3.13t’, o
     interpretador com threads livres e ‘python3.13t-config’, um
     utilitário de configuração que pode ser útil para criadores de
     pacote.  Como ‘/usr/local/bin’ é normalmente incluído em seu ‘PATH’
     do console, geralmente não é necessário alterar as variáveis de
     ambiente do ‘PATH’ para usar o ‘python3.13t’.

   - Neste lançamento, o pacote 'Shell profile updater' e o comando
     ‘Update Shell Profile.command’ em ‘/Applications/Python 3.13/’ não
     dão suporte ao pacote com threads livres.

   - A construção com threads livres e a compilação tradicional têm
     caminhos de pesquisa separados e diretórios ‘site-packages’
     separados, portanto, por padrão, se você precisar de um pacote
     disponível em ambas construções, talvez seja necessário instalá-lo
     em ambos.  O pacote com threads livres instalará uma instância
     separada do ‘pip’ para uso com o ‘python3.13t’.

        - Para instalar um pacote usando ‘pip’ sem um ‘venv’:

               python3.13t -m pip install <package_name>

   - Ao trabalhar com vários ambientes Python, geralmente é mais seguro
     e mais fácil *note criar e usar ambientes virtuais: 1e83.  Isso
     pode tanto evitar possíveis conflitos de comandos, quanto evitar a
     confusão sobre qual Python está sendo usado:

          python3.13t -m venv <venv_name>

     e, em seguida, ‘activate’.

   - Para executar uma versão do IDLE com threads livres:

          python3.13t -m idlelib

   - Os interpretadores em ambos as construções respondem às mesmas
     variáveis de ambiente *note PYTHON: 5f1, o que pode gerar
     resultados inesperados, por exemplo, se você tiver ‘PYTHONPATH’
     definido em um perfil de console.  Se necessário, há *note opções
     de linha de comando: 1eb3. como ‘-E’ para ignorar essas variáveis
     de ambiente.

   - A construção com threads livres é ligada às bibliotecas
     compartilhadas de terceiros, como ‘OpenSSL’ e ‘Tk’, instaladas no
     framework tradicional.  Isso significa que ambas as compilações
     também compartilham um conjunto de certificados, como instalados
     pelo script ‘Install Certificates.command’, portanto, ele só
     precisa ser executado uma vez.

   - Se você não puder depender do link em ‘/usr/local/bin’ apontando
     para ‘python3.13t’ com threads livres do ‘python.org’ (por exemplo,
     se quiser instalar sua própria versão lá ou se alguma outra
     distribuição instalá-lo lá), você poderá definir explicitamente sua
     variável de ambiente de console ‘PATH’ para incluir o diretório da
     framework ‘PythonT’ ‘bin’:

          export PATH="/Library/Frameworks/PythonT.framework/Versions/3.13/bin":"$PATH"

     A instalação tradicional do framework por padrão faz algo
     semelhante, exceto pelo arquivo ‘Python.framework’.  Observe que
     ter dois diretórios ‘bin’ do framework em ‘PATH’ pode gerar
     confusão se houver nomes duplicados, como ‘python3.13’, em ambos;
     qual deles é realmente usado depende da ordem em que aparecem em
     ‘PATH’.  Os comandos ‘which python3.x’ ou ‘which python3.xt’ pode
     mostrar qual caminho está sendo usado.  Usar ambientes virtuais
     pode ajudar a evitar essas ambiguidades.  Outra opção pode ser
     criar um ‘alias’ no console para o interpretador desejado, como:

          alias py3.13="/Library/Frameworks/Python.framework/Versions/3.13/bin/python3.13"
          alias py3.13t="/Library/Frameworks/PythonT.framework/Versions/3.13/bin/python3.13t"

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0703/


File: python.info,  Node: Instalação usando a linha de comando,  Next: Distribuindo aplicações Python,  Prev: Instalando binários com threads livres<2>,  Up: Tópicos Avançados

3.5.5.2 Instalação usando a linha de comando
............................................

Se você quiser usar automação para instalar o pacote de instalação
‘python.org’ (em vez de usar o aplicativo GUI ‘Installer’ do macOS), o
utilitário para linha de comando ‘installer’ permite que você selecione
opções que não sejam do padrão.  Se você não estiver familiarizado com o
‘installer’, ele pode ser um tanto enigmático (consulte ‘man installer’
para obter mais informações).  Como exemplo, o seguinte trecho de
console mostra uma maneira de fazer isso, usando a versão ‘3.13.0b2’ e
selecionando a opção de interpretador com threads livres:

     RELEASE="python-3.130b2-macos11.pkg"

     # download installer pkg
     curl -O https://www.python.org/ftp/python/3.13.0/${RELEASE}

     # create installer choicechanges to customize the install:
     #    enable the PythonTFramework-3.13 package
     #    while accepting the other defaults (install all other packages)
     cat > ./choicechanges.plist <<EOF
     <?xml version="1.0" encoding="UTF-8"?>
     <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
     <plist version="1.0">
     <array>
             <dict>
                     <key>attributeSetting</key>
                     <integer>1</integer>
                     <key>choiceAttribute</key>
                     <string>selected</string>
                     <key>choiceIdentifier</key>
                     <string>org.python.Python.PythonTFramework-3.13</string>
             </dict>
     </array>
     </plist>
     EOF

     sudo installer -pkg ./${RELEASE} -applyChoiceChangesXML ./choicechanges.plist -target /

Você pode então testar que ambas as compilações de instaladores estão
disponíveis com algo como:

     $ # test that the free-threaded interpreter was installed if the Unix Command Tools package was enabled
     $ /usr/local/bin/python3.13t -VV
     Python 3.13.0b2 experimental free-threading build (v3.13.0b2:3a83b172af, Jun  5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]
     $ #    and the traditional interpreter
     $ /usr/local/bin/python3.13 -VV
     Python 3.13.0b2 (v3.13.0b2:3a83b172af, Jun  5 2024, 12:50:24) [Clang 15.0.0 (clang-1500.3.9.4)]
     $ # test that they are also available without the prefix if /usr/local/bin is on $PATH
     $ python3.13t -VV
     Python 3.13.0b2 experimental free-threading build (v3.13.0b2:3a83b172af, Jun  5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]
     $ python3.13 -VV
     Python 3.13.0b2 (v3.13.0b2:3a83b172af, Jun  5 2024, 12:50:24) [Clang 15.0.0 (clang-1500.3.9.4)]

     Nota: Os instaladores atuais do ‘python.org’ só instalam em locais
     fixos, como ‘/Library/Frameworks/’, ‘/Applications’ e
     ‘/usr/local/bin’.  Não é possível usar a opção ‘-domain’ do
     ‘installer’ para instalar em outros locais.


File: python.info,  Node: Distribuindo aplicações Python,  Next: Conformidade com a App Store,  Prev: Instalação usando a linha de comando,  Up: Tópicos Avançados

3.5.5.3 Distribuindo aplicações Python
......................................

Existe uma variedade de ferramentas para converter seu código Python em
uma aplicação distribuível independente:

   * py2app(1): Oferece suporte à criação de pacotes ‘.app’ do macOS a
     partir de um projeto Python.

   * Briefcase(2): Parte do BeeWare Project(3); uma ferramenta de
     empacotamento multiplataforma que permite criar 'bundles' ‘.app’ no
     macOS, além de gerenciar assinaturas digitais e a notarização.

   * PyInstaller(4): Uma ferramenta de empacotamento multiplataforma que
     cria um único arquivo ou pasta como um artefato distribuível.

   ---------- Footnotes ----------

   (1) https://pypi.org/project/py2app/

   (2) https://briefcase.readthedocs.io

   (3) https://beeware.org

   (4) https://pyinstaller.org/


File: python.info,  Node: Conformidade com a App Store,  Prev: Distribuindo aplicações Python,  Up: Tópicos Avançados

3.5.5.4 Conformidade com a App Store
....................................

As aplicações enviadas para distribuição pela macOS App Store devem
passar pelo processo de revisão de aplicativos da Apple.  Esse processo
inclui um conjunto de regras de validação automatizadas que inspecionam
o pacote de aplicativos enviado em busca de código problemático.

A biblioteca padrão do Python contém alguns códigos que violam essas
regras automatizadas.  Embora essas violações pareçam ser falsos
positivos, as regras de revisão da Apple não podem ser contestadas.
Portanto, é necessário modificar a biblioteca padrão do Python para que
uma aplicação passe na revisão da App Store.

A árvore de fontes do Python contém um arquivo de patch(1) que removerá
todo o código que é conhecido por causar problemas no processo de
revisão da App Store.  Este patch é aplicado automaticamente quando o
CPython é configurado com a opção *note -with-app-store-compliance:
16de.

Este patch normalmente não é necessário para usar o CPython em um Mac;
nem é necessário se você estiver distribuindo uma aplicação 'fora' da
App Store do macOS. É necessário 'apenas' se você estiver usando a App
Store do macOS como canal de distribuição.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Mac/Resources/app-store-compliance.patch


File: python.info,  Node: Outros recursos,  Prev: Tópicos Avançados,  Up: Usando Python em macOS

3.5.6 Outros recursos
---------------------

A página de ajuda do python.org(1) contém links para vários recursos
úteis.  A lista de discussão Pythonmac-SIG(2) é outro recurso específico
de suporte para usuários e desenvolvedores de Python no Mac.

   ---------- Footnotes ----------

   (1) https://www.python.org/about/help/

   (2) https://www.python.org/community/sigs/current/pythonmac-sig/


File: python.info,  Node: Utilizando Python no Android,  Next: Usando Python no iOS,  Prev: Usando Python em macOS,  Up: Configurações e Uso do Python

3.6 Utilizando Python no Android
================================

Python no Android é diferente do Python em plataformas de desktop.  Em
uma plataforma desktop, o Python geralmente é instalado como um recurso
do sistema que pode ser usado por qualquer usuário daquele computador.
Os usuários então interagem com o Python executando um executável
‘python’ e inserindo comandos em um prompt interativo ou executando um
script Python.

No Android, não existe o conceito de instalação como recurso do sistema.
A única unidade de distribuição de software é uma aplicação, ou “app”.
Também não há console onde você possa executar um executável ‘python’ ou
interagir com um REPL do Python.

Como resultado, a única maneira de usar Python no Andoid é no modo
incorporado – ou seja, escrevendo uma aplicação Android nativo,
incorporando um interpretador Python usando ‘libpython’ e invocando o
código Python usando *note API de incorporação do Python: 1fdd.  O
interpretador Python completo, a biblioteca padrão e todo o seu código
Python são então empacotados para sua aplicação para seu próprio uso
privado.

A biblioteca padrão do Python tem algumas omissões e restrições notáveis
no Andoid.  Consulte o *note guia de disponibilidade de API para
Android: 1fde. para obter detalhes.

* Menu:

* Adicionando Python a uma aplicação Android::
* Construindo um pacote Python para Android::


File: python.info,  Node: Adicionando Python a uma aplicação Android,  Next: Construindo um pacote Python para Android,  Up: Utilizando Python no Android

3.6.1 Adicionando Python a uma aplicação Android
------------------------------------------------

A maioria dos desenvolvedores de aplicações deve usar uma das seguintes
ferramentas, o que proporcionará uma experiência muito mais fácil:

   * Briefcase(1), do projeto BeeWare

   * Buildozer(2), do projeto Kivy

   * Chaquopy(3)

   * pyqtdeploy(4)

   * Termux(5)

Se você tem certeza de que quer fazer tudo isso manualmente, continue
lendo.  Você pode usar a aplicação testbed(6) como um guia; cada passo
abaixo contém um link para o arquivo relevante.

   * Construa o Python seguindo as instruções em Android/README.md(7).
     Isso vai criar o diretório ‘cross-build/HOST/prefix’.

   * Adicione código ao seu arquivo build.gradle(8) para copiar os
     seguintes itens para o seu projeto.  Todos, exceto seu próprio
     código Python, podem ser copiados de ‘prefix/lib’:

        * Em suas bibliotecas JNI:

             * ‘libpython*.*.so’

             * ‘lib*_python.so’ (bibliotecas externas, tal como OpenSSL)

        * Em seus ativos ('assets'):

             * ‘python*.*’ (a biblioteca padrão do Python)

             * ‘python*.*/site-packages’ (seu próprio código Python)

   * Adicione código ao seu aplicativo para extrair os ativos para o
     sistema de arquivos(9).

   * Adicione código a sua aplicação para iniciar o Python em modo
     incorporado(10).  Isso precisará ser código C chamado via JNI.

   ---------- Footnotes ----------

   (1) https://briefcase.readthedocs.io

   (2) https://buildozer.readthedocs.io

   (3) https://chaquo.com/chaquopy

   (4) https://www.riverbankcomputing.com/static/Docs/pyqtdeploy/

   (5) https://termux.dev/en/

   (6) https://github.com/python/cpython/tree/3.13/Android/testbed

   (7) https://github.com/python/cpython/tree/3.13/Android/README.md

   (8) 
https://github.com/python/cpython/tree/3.13/Android/testbed/app/build.gradle.kts

   (9) 
https://github.com/python/cpython/tree/3.13/Android/testbed/app/src/main/java/org/python/testbed/MainActivity.kt

   (10) 
https://github.com/python/cpython/tree/3.13/Android/testbed/app/src/main/c/main_activity.c


File: python.info,  Node: Construindo um pacote Python para Android,  Prev: Adicionando Python a uma aplicação Android,  Up: Utilizando Python no Android

3.6.2 Construindo um pacote Python para Android
-----------------------------------------------

Pacotes Python podem ser criados para Android como wheels e lançados no
PyPI. A ferramenta recomendada para isso é cibuildwheel(1), que
automatiza todos os detalhes da configuração de um ambiente de
compilação cruzada, da construção da wheel e dos testes em um emulador.

   ---------- Footnotes ----------

   (1) https://cibuildwheel.pypa.io/en/stable/platforms/#android


File: python.info,  Node: Usando Python no iOS,  Next: Editores e IDEs,  Prev: Utilizando Python no Android,  Up: Configurações e Uso do Python

3.7 Usando Python no iOS
========================


Autores: Russell Keith-Magee (2024-03)

Python no iOS é diferente do Python em plataformas de desktop.  Em uma
plataforma desktop, o Python geralmente é instalado como um recurso do
sistema que pode ser usado por qualquer usuário daquele computador.  Os
usuários então interagem com o Python executando um executável ‘python’
e inserindo comandos em um prompt interativo ou executando um script
Python.

No iOS, não existe o conceito de instalação como recurso do sistema.  A
única unidade de distribuição de software é uma aplicação, ou “app”.
Também não há console onde você possa executar um executável ‘python’ ou
interagir com um REPL do Python.

Como resultado, a única maneira de usar Python no iOS é no modo
incorporado – ou seja, escrevendo uma aplicação iOS nativo e
incorporando um interpretador Python usando ‘libPython’ e invocando o
código Python usando *note API de incorporação do Python: 1fdd.  O
interpretador Python completo, a biblioteca padrão e todo o seu código
Python são então empacotados como um pacote independente que pode ser
distribuído pela iOS App Store.

Se você deseja experimentar pela primeira vez escrever uma aplicação iOS
em Python, projetos como BeeWare(1) e Kivy(2) irão fornecer uma
experiência de usuário muito mais acessível.  Esses projetos gerenciam
as complexidades associadas à execução de um projeto iOS, portanto, você
só precisa lidar com o próprio código Python.

* Menu:

* Python em tempo de execução no iOS::
* Instalando Python no iOS::
* Conformidade com a App Store: Conformidade com a App Store<2>.

   ---------- Footnotes ----------

   (1) https://beeware.org

   (2) https://kivy.org


File: python.info,  Node: Python em tempo de execução no iOS,  Next: Instalando Python no iOS,  Up: Usando Python no iOS

3.7.1 Python em tempo de execução no iOS
----------------------------------------

* Menu:

* Compatibilidade com a versão do iOS::
* Identificação da plataforma::
* Disponibilidade da biblioteca padrão::
* Módulos de extensão binária::
* Binários stub do compilador::


File: python.info,  Node: Compatibilidade com a versão do iOS,  Next: Identificação da plataforma,  Up: Python em tempo de execução no iOS

3.7.1.1 Compatibilidade com a versão do iOS
...........................................

A versão mínima suportada do iOS é especificada em tempo de compilação,
usando a opção *note -host: 1f5a. do ‘configure’.  Por padrão, quando
compilado para iOS, Python será compilado com uma versão iOS mínima
suportada de 13.0.  Para usar uma versão mínima diferente do iOS,
forneça o número da versão como parte do argumento ‘--host’ - por
exemplo, ‘--host=arm64-apple-ios15.4-simulator’ compilaria um simulador
ARM64 construído com uma meta de implantação de 15.4.


File: python.info,  Node: Identificação da plataforma,  Next: Disponibilidade da biblioteca padrão,  Prev: Compatibilidade com a versão do iOS,  Up: Python em tempo de execução no iOS

3.7.1.2 Identificação da plataforma
...................................

Ao executar no iOS, ‘sys.platform’ reportará como ‘ios’.  Este valor
será retornado em um iPhone ou iPad, independentemente da aplicação
estar executando no simulador ou em um dispositivo físico.

Informações sobre o ambiente de execução específico, incluindo a versão
do iOS, modelo do dispositivo e se o dispositivo é um simulador, podem
ser obtidas usando *note platform.ios_ver(): 1fe8.  *note
platform.system(): 1fe9. reportará ‘iOS’ ou ‘iPadOS’, dependendo do
dispositivo.

*note os.uname(): 1155. reporta detalhes em nível de kernel; ele
reportará o nome ‘Darwin’.


File: python.info,  Node: Disponibilidade da biblioteca padrão,  Next: Módulos de extensão binária,  Prev: Identificação da plataforma,  Up: Python em tempo de execução no iOS

3.7.1.3 Disponibilidade da biblioteca padrão
............................................

A biblioteca padrão do Python tem algumas omissões e restrições notáveis
no iOS. Consulte o *note guia de disponibilidade de API para iOS: 1fde.
para obter detalhes.


File: python.info,  Node: Módulos de extensão binária,  Next: Binários stub do compilador,  Prev: Disponibilidade da biblioteca padrão,  Up: Python em tempo de execução no iOS

3.7.1.4 Módulos de extensão binária
...................................

Uma diferença notável sobre o iOS como plataforma é que a distribuição
da App Store impõe requisitos rígidos ao empacotamento de uma aplicação.
Um desses requisitos rege como os módulos de extensão binária são
distribuídos.

A iOS App Store exige que 'todos' os módulos binários em uma aplicação
iOS sejam bibliotecas dinâmicas, contidas em um framework com metadados
apropriados, armazenados na pasta ‘Frameworks’ da aplicação empacotada.
Pode haver apenas um único binário por framework, e não pode haver
nenhum material binário executável fora da pasta ‘Frameworks’.

Isto entra em conflito com a abordagem usual do Python para distribuição
de binários, que permite que um módulo de extensão binária seja
carregado de qualquer local em ‘sys.path’.  Para garantir a conformidade
com as políticas da App Store, um projeto iOS deve pós-processar
quaisquer pacotes Python, convertendo módulos binários ‘.so’ em
estruturas independentes individuais com metadados e assinatura
apropriados.  Para obter detalhes sobre como realizar esse
pós-processamento, consulte o guia para *note adicionar Python ao seu
projeto: 1fec.

Para ajudar o Python a descobrir binários em seu novo local, o arquivo
‘.so’ original em ‘sys.path’ é substituído por um arquivo ‘.fwork’.
Este arquivo é um arquivo texto que contém a localização do binário do
framework, relativo ao pacote de aplicações.  Para permitir que o
framework retorne ao local original, o framework deve conter um arquivo
‘.origin’ que contém a localização do arquivo ‘.fwork’, relativo ao
pacote da aplicação.

Por exemplo, considere o caso de uma importação ‘from foo.bar import
_whiz’, onde ‘_whiz’ é implementado com o módulo binário
‘sources/foo/bar/_whiz.abi3.so’, com ‘sources’ sendo o local registrado
em ‘sys.path’, relativo ao pacote da aplicação.  Este módulo 'deve' ser
distribuído como ‘Frameworks/foo.bar._whiz.framework/foo.bar._whiz’
(criando o nome do framework a partir do caminho de importação completo
do módulo), com um arquivo ‘Info.plist’ no diretório ‘.framework’
identificando o binário como um framework.  O módulo ‘foo.bar._whiz’
seria representado no local original com um arquivo marcador
‘sources/foo/bar/_whiz.abi3.fwork’, contendo o caminho
‘Frameworks/foo.bar._whiz/foo.bar._whiz’.  O framework também conteria
‘Frameworks/foo.bar._whiz.framework/foo.bar._whiz.origin’, contendo o
caminho para o arquivo ‘.fwork’.

Ao executar no iOS, o interpretador Python instalará um *note
AppleFrameworkLoader: 1fed. que é capaz de ler e importar arquivos
‘.fwork’.  Uma vez importado, o atributo ‘__file__’ do módulo binário
reportará como a localização do arquivo ‘.fwork’.  Entretanto, o *note
ModuleSpec: 1fee. para o módulo carregado reportará a ‘origin’ como a
localização do binário na pasta do framework.


File: python.info,  Node: Binários stub do compilador,  Prev: Módulos de extensão binária,  Up: Python em tempo de execução no iOS

3.7.1.5 Binários stub do compilador
...................................

O Xcode não expõe compiladores explícitos para iOS; em vez disso, ele
usa um script ‘xcrun’ que resolve um caminho do compilador (por exemplo,
‘xcrun --sdk iphoneos clang’ para obter o ‘clang’ para um dispositivo
iPhone).  No entanto, usar este script apresenta dois problemas:

   * A saída de ‘xcrun’ inclui caminhos que são específicos da máquina,
     resultando em um módulo sysconfig que não pode ser compartilhado
     entre usuários; e

   * Isso resulta em definições ‘CC’/‘CPP’/‘LD’/‘AR’ que incluem
     espaços.  Existem muitas ferramentas do ecossistema C que
     pressupõem que você pode dividir uma linha de comando no primeiro
     espaço para obter o caminho para o executável do compilador; este
     não é o caso ao usar ‘xcrun’.

Para evitar esses problemas, o Python forneceu stubs para essas
ferramentas.  Esses stubs são wrappers de script de shell em torno das
ferramentas subjacentes ‘xcrun’, distribuídos em uma pasta ‘bin’
distribuída junto com a estrutura iOS compilada.  Esses scripts são
relocáveis e sempre serão resolvidos para os caminhos apropriados do
sistema local.  Ao incluir esses scripts na pasta bin que acompanha um
framework, o conteúdo do módulo ‘sysconfig’ se torna útil para usuários
finais compilarem seus próprios módulos.  Ao compilar módulos Python de
terceiros para iOS, você deve garantir que esses binários stub estejam
no seu caminho.


File: python.info,  Node: Instalando Python no iOS,  Next: Conformidade com a App Store<2>,  Prev: Python em tempo de execução no iOS,  Up: Usando Python no iOS

3.7.2 Instalando Python no iOS
------------------------------

* Menu:

* Ferramentas para construir aplicações de iOS::
* Adicionando Python a um projeto iOS::
* Testando um pacote Python::


File: python.info,  Node: Ferramentas para construir aplicações de iOS,  Next: Adicionando Python a um projeto iOS,  Up: Instalando Python no iOS

3.7.2.1 Ferramentas para construir aplicações de iOS
....................................................

A construção para iOS requer o uso das ferramentas Xcode da Apple.  É
altamente recomendável que você use a versão estável mais recente do
Xcode.  Isso exigirá o uso da versão mais recente (ou segunda) do macOS
lançada recentemente, já que a Apple não mantém o Xcode para versões
mais antigas do macOS. As ferramentas de linha de comando do Xcode não
são suficientes para o desenvolvimento iOS; você precisa de uma
instalação 'completa' do Xcode.

Se quiser executar seu código no simulador iOS, você também precisará
instalar um iOS Simulator Platform.  Você deverá ser solicitado a
selecionar um iOS Simulator Platform ao executar o Xcode pela primeira
vez.  Alternativamente, você pode adicionar um iOS Simulator Platform
selecionando na guia Platforms do painel Settings do Xcode.


File: python.info,  Node: Adicionando Python a um projeto iOS,  Next: Testando um pacote Python,  Prev: Ferramentas para construir aplicações de iOS,  Up: Instalando Python no iOS

3.7.2.2 Adicionando Python a um projeto iOS
...........................................

Python pode ser adicionado a qualquer projeto iOS, usando Swift ou
Objective C. Os exemplos a seguir usarão Objective C; se você estiver
usando Swift, poderá achar uma biblioteca como PythonKit(1) útil.

Para adicionar Python a um projeto Xcode de iOS:

  1. Construa ou obtenha um ‘XCFramework’ em Python.  Veja as instruções
     em iOS/README.rst(2) (na distribuição fonte do CPython) para
     detalhes sobre como construir um ‘XCFramework’ em Python.  No
     mínimo, você precisará de uma construção que tenha suporte
     ‘arm64-apple-ios’, além de ‘arm64-apple-ios-simulator’ ou
     ‘x86_64-apple-ios-simulator’.

  2. Arraste o ‘XCframework’ para o seu projeto iOS. Nas instruções a
     seguir, presumiremos que você colocou o ‘XCframework’ na raiz do
     seu projeto; no entanto, você pode usar qualquer outro local
     desejado ajustando os caminhos conforme necessário.

  3. Arraste o arquivo ‘iOS/Resources/dylib-Info-template.plist’ para o
     seu projeto e certifique-se de que ele esteja associado ao destino
     da aplicação.

  4. Adicione o código da sua aplicação como uma pasta no seu projeto
     Xcode.  Nas instruções a seguir, presumiremos que seu código de
     usuário está em uma pasta chamada ‘app’ na raiz do seu projeto;
     você pode usar qualquer outro local ajustando os caminhos conforme
     necessário.  Certifique-se de que esta pasta esteja associada ao
     destino da sua aplicação.

  5. Selecione o destino da aplicação selecionando o nó raiz do seu
     projeto Xcode e, em seguida, o nome do destino na barra lateral que
     aparece.

  6. Nas configurações de “General”, em “Frameworks, Libraries and
     Embedded Content”, adicione ‘Python.xcframework’, com “Embed &
     Sign” selecionado.

  7. Na guia “Build Settings”, modifique o seguinte:

        - Build Options

             * User Script Sandboxing: No

             * Enable Testability: Yes

        - Search Paths

             * Framework Search Paths: ‘$(PROJECT_DIR)’

             * Header Search Paths:
               ‘"$(BUILT_PRODUCTS_DIR)/Python.framework/Headers"’

        - Apple Clang - Warnings - All languages

             * Quoted Include In Framework Header: No

  8. Adicione uma etapa de construção que copie a biblioteca padrão do
     Python em sua aplicação.  Na aba “Build Phases”, adicione uma nova
     etapa de construção “Run Script” 'antes' da etapa “Embed
     Frameworks”, mas 'depois' da etapa “Copy Bundle Resources”.  Nomeie
     a etapa como “Install Target Specific Python Standard Library”,
     desative a caixa de seleção “Based on dependency analysis” e defina
     o conteúdo do script como:

          set -e

          mkdir -p "$CODESIGNING_FOLDER_PATH/python/lib"
          if [ "$EFFECTIVE_PLATFORM_NAME" = "-iphonesimulator" ]; then
              echo "Instalando módulos Python para iOS Simulator"
              rsync -au --delete "$PROJECT_DIR/Python.xcframework/ios-arm64_x86_64-simulator/lib/" "$CODESIGNING_FOLDER_PATH/python/lib/"
          else
              echo "Instalando módulos Python para iOS Device"
              rsync -au --delete "$PROJECT_DIR/Python.xcframework/ios-arm64/lib/" "$CODESIGNING_FOLDER_PATH/python/lib/"
          fi

     Note que o nome da “fatia” do simulador no XCframework pode ser
     diferente, dependendo das arquiteturas de CPU que seu ‘XCFramework’
     provê suporte.

  9. Adicione uma segunda etapa de construção que processe os módulos de
     extensão binária na biblioteca padrão no formato “Framework”.
     Adicione uma etapa de construção “Run Script” 'diretamente após'
     aquela que você adicionou na etapa 8, chamada “Prepare Python
     Binary Modules”.  Também deve ter “Based on dependency analysis”
     desmarcado, com o seguinte conteúdo de script:

          set -e

          install_dylib () {
              INSTALL_BASE=$1
              FULL_EXT=$2

              # O nome do arquivo da extensão
              EXT=$(basename "$FULL_EXT")
              # A localização do arquivo da extensão, relativo ao pacote
              RELATIVE_EXT=${FULL_EXT#$CODESIGNING_FOLDER_PATH/}
              # O caminho para o arquivo da extensão, relativo à base de instalação
              PYTHON_EXT=${RELATIVE_EXT/$INSTALL_BASE/}
              # O nome completo e pontilhado do módulo de extensão, construído a partir do caminho do arquivo.
              FULL_MODULE_NAME=$(echo $PYTHON_EXT | cut -d "." -f 1 | tr "/" ".");
              # Um identificador de pacote; não é realmente usado, mas é necessário para empacotamento de frameworks no Xcode
              FRAMEWORK_BUNDLE_ID=$(echo $PRODUCT_BUNDLE_IDENTIFIER.$FULL_MODULE_NAME | tr "_" "-")
              # O nome da pasta do framework.
              FRAMEWORK_FOLDER="Frameworks/$FULL_MODULE_NAME.framework"

              # Se a pasta do framework não existir, cria-a.
              if [ ! -d "$CODESIGNING_FOLDER_PATH/$FRAMEWORK_FOLDER" ]; then
                  echo "Criando framework para $RELATIVE_EXT"
                  mkdir -p "$CODESIGNING_FOLDER_PATH/$FRAMEWORK_FOLDER"
                  cp "$CODESIGNING_FOLDER_PATH/dylib-Info-template.plist" "$CODESIGNING_FOLDER_PATH/$FRAMEWORK_FOLDER/Info.plist"
                  plutil -replace CFBundleExecutable -string "$FULL_MODULE_NAME" "$CODESIGNING_FOLDER_PATH/$FRAMEWORK_FOLDER/Info.plist"
                  plutil -replace CFBundleIdentifier -string "$FRAMEWORK_BUNDLE_ID" "$CODESIGNING_FOLDER_PATH/$FRAMEWORK_FOLDER/Info.plist"
              fi

              echo "Instalando binário para $FRAMEWORK_FOLDER/$FULL_MODULE_NAME"
              mv "$FULL_EXT" "$CODESIGNING_FOLDER_PATH/$FRAMEWORK_FOLDER/$FULL_MODULE_NAME"
              # Cria um arquivo substituto .fwork onde o .so estava
              echo "$FRAMEWORK_FOLDER/$FULL_MODULE_NAME" > ${FULL_EXT%.so}.fwork
              # Cria uma referência para o local do arquivo .so no framework
              echo "${RELATIVE_EXT%.so}.fwork" > "$CODESIGNING_FOLDER_PATH/$FRAMEWORK_FOLDER/$FULL_MODULE_NAME.origin"
          }

          PYTHON_VER=$(ls -1 "$CODESIGNING_FOLDER_PATH/python/lib")
          echo "Instalando módulos de extensão da biblioteca padrão para Python $PYTHON_VER..."
          find "$CODESIGNING_FOLDER_PATH/python/lib/$PYTHON_VER/lib-dynload" -name "*.so" | while read FULL_EXT; do
              install_dylib python/lib/$PYTHON_VER/lib-dynload/ "$FULL_EXT"
          done

          # Remove o modelo dylib
          rm -f "$CODESIGNING_FOLDER_PATH/dylib-Info-template.plist"

          echo "Assinando frameworks como $EXPANDED_CODE_SIGN_IDENTITY_NAME ($EXPANDED_CODE_SIGN_IDENTITY)..."
          find "$CODESIGNING_FOLDER_PATH/Frameworks" -name "*.framework" -exec /usr/bin/codesign --force --sign "$EXPANDED_CODE_SIGN_IDENTITY" ${OTHER_CODE_SIGN_FLAGS:-} -o runtime --timestamp=none --preserve-metadata=identifier,entitlements,flags --generate-entitlement-der "{}" \;

  10. Adicione código Objective C para inicializar e usar um
     interpretador Python em modo embarcado.  Você deve garantir que:

        * Modo UTF-8 (*note PyPreConfig.utf8_mode: 3ea.) esteja
          habilitado;

        * Stdio buffered (*note PyConfig.buffered_stdio: 3df.) esteja
          desabilitado;

        * Escrita de bytecode (*note PyConfig.write_bytecode: 3db.)
          esteja desabilitada;

        * Manipuladores de sinais (*note
          PyConfig.install_signal_handlers: 8c3.) estejam habilitados;

        * *note PYTHONHOME: 3bc. para o interpretador esteja configurado
          para apontar para a subpasta ‘python’ do pacote da sua
          aplicação; e

        * O *note PYTHONPATH: 1053. para o interpretador inclui:

             - a subpasta ‘python/lib/python3.X’ do pacote da sua
               aplicação,

             - a subpasta ‘python/lib/python3.X/lib-dynload’ do pacote
               da sua aplicação, e

             - a subpasta ‘app’ do pacote da sua aplicação

     O local do pacote da sua aplicação pode ser determinada usando
     ‘[[NSBundle mainBundle] resourcePath]’.

Os passos 8, 9 e 10 destas instruções presumem que você tem uma única
pasta de código de aplicação Python puro, chamada ‘app’.  Se você tiver
módulos binários de terceiros em sua aplicação, serão necessárias
algumas etapas adicionais:

   * Você precisa garantir que todas as pastas que contenham binários de
     terceiros sejam associadas ao destino da aplicação ou copiadas como
     parte da etapa 8.  A etapa 8 também deve limpar quaisquer binários
     que não sejam apropriados para a plataforma que uma construção
     específica está direcionando (ou seja, exclua todos os binários do
     dispositivo se estiver criando uma aplicação direcionado ao
     simulador).

   * Quaisquer pastas que contenham binários de terceiros devem ser
     processadas no formato framework no passo 9.  A invocação de
     ‘install_dylib’ que processa a pasta ‘lib-dynload’ pode ser copiada
     e adaptada para este propósito.

   * Se você estiver usando uma pasta separada para pacotes de
     terceiros, certifique-se de que essa pasta esteja incluída como
     parte da configuração *note PYTHONPATH: 1053. no passo 10.

   * Se alguma das pastas que contêm pacotes de terceiros contiver
     arquivos ‘.pth’, você deverá adicionar essa pasta como um
     'diretório de site' (usando *note site.addsitedir(): 1ff3.), em vez
     de adicioná-la diretamente a *note PYTHONPATH: 1053. ou *note
     sys.path: 3b4.

   ---------- Footnotes ----------

   (1) https://github.com/pvieito/PythonKit

   (2) https://github.com/python/cpython/tree/3.13/iOS/README.rst


File: python.info,  Node: Testando um pacote Python,  Prev: Adicionando Python a um projeto iOS,  Up: Instalando Python no iOS

3.7.2.3 Testando um pacote Python
.................................

A árvore de fontes do CPython contém um projeto de banco de testes(1)
que é usado para executar o conjunto de testes do CPython no simulador
do iOS. Este banco de testes também pode ser usado como um projeto de
banco de testes para executar o conjunto de testes da sua biblioteca
Python no iOS.

Depois de criar ou obter um iOS XCFramework (consulte iOS/README.rst(2)
para obter detalhes), crie um clone do projeto de banco de testes de iOS
do Python executando:

     $ python iOS/testbed clone --framework <caminho/para/Python.xcframework> --app <caminho/para/módulo1> --app <caminho/para/módulo2> app-testbed

Você precisará modificar a referência ‘iOS/testbed’ para apontar para
esse diretório na árvore de fontes do CPython; todas as pastas
especificadas com o sinalizador ‘--app’ serão copiadas para o projeto de
banco de testes clonado.  O banco de testes resultante será criado na
pasta ‘app-testbed’.  Neste exemplo, ‘módulo1’ e ‘módulo2’ seriam
módulos importáveis em tempo de execução.  Se seu projeto tiver
dependências adicionais, elas podem ser instaladas na pasta
‘app-testbed/iOSTestbed/app_packages’ (usando ‘pip install --target
app-testbed/iOSTestbed/app_packages’ ou similar).

Você pode então usar a pasta ‘app-testbed’ para executar o conjunto de
testes para seu aplicativo.  Por exemplo, se ‘módulo1.tests’ fosse o
ponto de entrada para seu conjunto de testes, você poderia executar:

     $ python app-testbed run -- módulo1.tests

Isso é o equivalente a executar ‘python -m módulo1.tests’ em uma
compilação Python de desktop.  Quaisquer argumentos após ‘--’ serão
passados para o banco de testes como se fossem argumentos para ‘python
-m’ em uma máquina de desktop.

Você também pode abrir o projeto de teste no Xcode executando:

     $ open app-testbed/iOSTestbed.xcodeproj

Isso permitirá que você use o conjunto completo de ferramentas do Xcode
para depuração.

Os argumentos usados para executar o conjunto de testes são definidos
como parte do plano de teste.  Para modificar o plano de teste,
selecione o nó do plano de teste na árvore do projeto (deve ser o
primeiro filho do nó raiz) e selecione a aba “Configurations”.
Modifique o valor “Arguments Passed On Launch” para alterar os
argumentos de teste.

O plano de teste também desabilita os testes paralelos e especifica o
uso do arquivo ‘iOSTestbed.lldbinit’ para fornecer a configuração do
depurador.  A configuração padrão do depurador desabilita pontos de
interrupção automáticos nos sinais ‘SIGINT’, ‘SIGUSR1’, ‘SIGUSR2’ e
‘SIGXFSZ’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/iOS/testbed

   (2) https://github.com/python/cpython/tree/3.13/iOS/README.rst


File: python.info,  Node: Conformidade com a App Store<2>,  Prev: Instalando Python no iOS,  Up: Usando Python no iOS

3.7.3 Conformidade com a App Store
----------------------------------

O único mecanismo para distribuir aplicações para dispositivos iOS de
terceiros é enviar a aplicação para a App Store do iOS; as aplicações
enviadas para distribuição devem passar pelo processo de revisão de
aplicações da Apple.  Esse processo inclui um conjunto de regras de
validação automatizadas que inspecionam o pacote de aplicação enviado em
busca de código problemático.

A biblioteca padrão do Python contém alguns códigos que violam essas
regras automatizadas.  Embora essas violações pareçam ser falsos
positivos, as regras de revisão da Apple não podem ser contestadas;
portanto, é necessário modificar a biblioteca padrão do Python para que
uma aplicação passe na revisão da App Store.

A árvore de fontes do Python contém um arquivo de patch(1) que removerá
todo o código que é conhecido por causar problemas no processo de
revisão da App Store.  Este patch é aplicado automaticamente quando o ao
construir para o iOS.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Mac/Resources/app-store-compliance.patch


File: python.info,  Node: Editores e IDEs,  Prev: Usando Python no iOS,  Up: Configurações e Uso do Python

3.8 Editores e IDEs
===================

Há um grande número de IDEs com suporte à linguagem de programação
Python.  Vários editores e IDEs provêm destaques coloridos de sintaxe,
ferramentas de depuração, e checagem do código conforme a PEP 8(1).

* Menu:

* IDLE — editor e console Python::
* Outros editores e IDEs::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0008/


File: python.info,  Node: IDLE — editor e console Python,  Next: Outros editores e IDEs,  Up: Editores e IDEs

3.8.1 IDLE — editor e console Python
------------------------------------

IDLE é o Ambiente Integrado de Desenvolvimento e Aprendizagem do Python
(em inglês Integrated Development and Learning Environment) e geralmente
vem junto com as instalações do Python.  Se você estiver no Linux e não
tiver o IDLE instalado consulte *note Instalando o IDLE no Linux: 1ee2.
Para obter mais informações consulte, consulte os documentos do *note
IDLE: 104b.


File: python.info,  Node: Outros editores e IDEs,  Prev: IDLE — editor e console Python,  Up: Editores e IDEs

3.8.2 Outros editores e IDEs
----------------------------

As wikis da comunidades Python têm informações enviadas pela comunidade
sobre Editores e IDEs.  Acesse Ferramentas de Desenvolvimento(1) para
obter uma lista abrangente enviada pela comunidade brasileira ou Python
Editors(2) e Integrated Development Environments(3) para listas enviadas
pela comunidade internacional (em inglês).

   ---------- Footnotes ----------

   (1) https://python.org.br/ferramentas/

   (2) https://wiki.python.org/moin/PythonEditors

   (3) https://wiki.python.org/moin/IntegratedDevelopmentEnvironments


File: python.info,  Node: A Referência da Linguagem Python,  Next: A Biblioteca Padrão do Python,  Prev: Configurações e Uso do Python,  Up: Top

4 A Referência da Linguagem Python
**********************************

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 *note A Biblioteca Padrão do Python: 144.  Para
uma introdução informal à linguagem, consulte *note O tutorial do
Python: 1d55.  Para programadores em C ou C++, existem dois manuais
adicionais: *note Estendendo e incorporando o interpretador Python:
1d56. descreve a imagem de alto nível de como escrever um módulo de
extensão Python, e o *note Manual de referência da API Python/C: 1d57.
descreve as interfaces disponíveis para programadores C/C++ em detalhes.

* Menu:

* Introdução: Introdução<5>.
* Análise léxica::
* Modelo de dados::
* Modelo de execução::
* O sistema de importação::
* Expressões::
* Instruções simples::
* Instruções compostas::
* Componentes de Alto Nível::
* Especificação completa da gramática::


File: python.info,  Node: Introdução<5>,  Next: Análise léxica,  Up: A Referência da Linguagem Python

4.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 intermediá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 encontrá
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 implementaçã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 *note A Biblioteca Padrão do
Python: 144.  Alguns módulos embutidos são mencionados ao interagirem de
forma significativa com a definição da linguagem.

* Menu:

* Implementações Alternativas::
* Notação::


File: python.info,  Node: Implementações Alternativas,  Next: Notação,  Up: Introdução<5>

4.1.1 Implementações Alternativas
---------------------------------

Embora exista uma implementação do Python que seja, de longe, a mais
popular, existem algumas implementações alternativas que são de de
interesse particular e para públicos diferentes.

As implementações conhecidas são:

CPython

     Esta é a implementação original e a é a versão do Python que mais
     vem sendo sendo desenvolvido e a mesma está escrita com a linguagem
     C. Novas funcionalidades ou recursos da linguagem aparecerão por
     aqui primeiro.

Jython

     Versão do Python implementado em Java.  Esta implementação pode ser
     usada como linguagem de Script em aplicações Java, ou pode ser
     usada para criar aplicativos usando as bibliotecas das classes do
     Java.  Também vem sendo bastante utilizado para criar testes
     unitários para as bibliotecas do Java.  Mais informações podem ser
     encontradas no the Jython website(1).

Python for .NET

     Essa implementação utiliza de fato a implementação CPython, mas é
     uma aplicação gerenciada .NET e disponibilizada como uma
     bibliotecas .NET. Foi desenvolvida por Brian Lloyd.  Para obter
     mais informações, consulte o site do Python for .NET(2).

IronPython

     Um versão alternativa do Python para a plataforma .NET. Ao
     contrário do Python.NET, esta é uma implementação completa do
     Python que gera IL e compila o código Python diretamente para
     assemblies .NET. Foi desenvolvida por Jim Hugunin, o criador
     original do Jython.  Para obter mais informações, consulte o site
     do IronPython(3).

PyPy

     Uma implementação do Python escrita completamente em Python.  A
     mesma suporta vários recursos avançados não encontrados em outras
     implementações, como suporte sem pilhas e um compilador Just in
     Time.  Um dos objetivos do projeto é incentivar a construção de
     experimentos com a própria linguagem, facilitando a modificação do
     interpretador (uma vez que o mesmos está escrito em Python).
     Informações adicionais estão disponíveis no site do projeto
     PyPy(4).

Cada uma dessas implementações varia em alguma forma a linguagem
conforme documentado neste manual, ou introduz informações específicas
além do que está coberto na documentação padrão do Python.  Consulte a
documentação específica da implementação para determinar o que é
necessário sobre a implementação específica que você está usando.

   ---------- Footnotes ----------

   (1) https://www.jython.org/

   (2) https://pythonnet.github.io/

   (3) https://ironpython.net/

   (4) https://pypy.org/


File: python.info,  Node: Notação,  Prev: Implementações Alternativas,  Up: Introdução<5>

4.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)(1) modificada.  Ela usa o seguinte
estilo de definição:

     name      ::= *note lc_letter: 2005. (*note lc_letter: 2005. | "_")*
     lc_letter ::= "a"..."z"

A primeira linha diz que um ‘name’ é um ‘lc_letter’ seguido de uma
sequência de zero ou mais ‘lc_letter’s 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 separados 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
exemplo, 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.

   ---------- Footnotes ----------

   (1) https://pt.wikipedia.org/wiki/Formalismo_de_Backus-Naur


File: python.info,  Node: Análise léxica,  Next: Modelo de dados,  Prev: Introdução<5>,  Up: A Referência da Linguagem Python

4.2 Análise léxica
==================

Um programa Python é lido por um 'analisador'.  A entrada para o
analisador é um fluxo de *note tokens: 200a, gerados pelo 'analisador
léxico' (também conhecido como 'tokenizador').  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(1)
para obter detalhes.  Se o arquivo de origem não puder ser decodificado,
uma exceção *note SyntaxError: 18d. será levantada.

* Menu:

* Estrutura das linhas::
* Outros tokens::
* Identificadores e palavras-chave::
* Literais::
* Operadores::
* Delimitadores::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3120/


File: python.info,  Node: Estrutura das linhas,  Next: Outros tokens,  Up: Análise léxica

4.2.1 Estrutura das linhas
--------------------------

Um programa Python é dividido em uma série de 'linhas lógicas'.

* Menu:

* Linhas lógicas::
* Linhas físicas::
* Comentários::
* Declarações de codificação::
* Junção de linha explícita::
* Junção de linha implícita::
* Linhas em branco::
* Indentação::
* Espaços em branco entre tokens::


File: python.info,  Node: Linhas lógicas,  Next: Linhas físicas,  Up: Estrutura das linhas

4.2.1.1 Linhas lógicas
......................

O fim de uma linha lógica é representado pelo token NEWLINE. As
declarações não podem cruzar os limites da linha lógica, exceto onde
NEWLINE for permitido pela sintaxe (por exemplo, entre as declarações de
declarações compostas).  Uma linha lógica é construída a partir de uma
ou mais 'linhas físicas' seguindo as regras explícitas ou implícitas que
'juntam as linhas'.


File: python.info,  Node: Linhas físicas,  Next: Comentários,  Prev: Linhas lógicas,  Up: Estrutura das linhas

4.2.1.2 Linhas físicas
......................

Uma linha física é uma sequência de caracteres terminada por uma
sequência de fim de linha.  Nos arquivos de origem e cadeias de
caracteres, qualquer uma das sequências de terminação de linha de
plataforma padrão pode ser usada - o formato Unix usando ASCII LF
(linefeed), o formato Windows usando a sequência ASCII CR LF (return
seguido de linefeed) ou o antigo formato Macintosh usando o caractere
ASCII CR (return).  Todos esses formatos podem ser usados igualmente,
independentemente da plataforma.  O final da entrada também serve como
um finalizador implícito para a linha física final.

Ao incorporar o Python, strings de código-fonte devem ser passadas para
APIs do Python usando as convenções C padrão para caracteres de nova
linha (o caractere ‘\n’, representando ASCII LF, será o terminador de
linha).


File: python.info,  Node: Comentários,  Next: Declarações de codificação,  Prev: Linhas físicas,  Up: Estrutura das linhas

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


File: python.info,  Node: Declarações de codificação,  Next: Junção de linha explícita,  Prev: Comentários,  Up: Estrutura das linhas

4.2.1.4 Declarações de codificação
..................................

Se um comentário na primeira ou segunda linha de um script Python
corresponde com a expressão regular ‘coding[=:]\s*([-\w.]+)’, esse
comentário é processado com uma declaração de codificação; o primeiro
grupo dessa expressão indica a codificação do arquivo do código-fonte.
A declaração de codificação deve aparecer em uma linha exclusiva para
tal.  Se está na segunda linha, a primeira linha também deve ser uma
linha somente com comentário.  As formas recomendadas de uma declaração
de codificação são:

     # -*- coding: <nome-codificação> -*-

que é reconhecido também por GNU Emacs, e

     # vim:fileencoding=<nome-codificação>

que é reconhecido pelo VIM de Bram Moolenaar.

Se nenhuma codificação é declarada, a codificação padrão é UTF-8.  Se a
codificação implícita ou explícita de um arquivo é UTF-8, uma marca
inicial de ordem de byte UTF-8 (‘b'\xef\xbb\xbf'’) será ignorada em vez
de ser um erro de sintaxe.

Se uma codificação é declarada, o nome da codificação deve ser
reconhecida pelo Python (veja *note Standard Encodings: de1.).  A
codificação é usada por toda análise léxica, incluindo literais strings,
comment and identificadores.


File: python.info,  Node: Junção de linha explícita,  Next: Junção de linha implícita,  Prev: Declarações de codificação,  Up: Estrutura das linhas

4.2.1.5 Junção de linha explícita
.................................

Duas ou mais linhas físicas podem ser juntadas em linhas lógicas usando
o caractere contrabarra (‘\’) da seguinte forma: quando uma linha física
termina com uma contrabarra que não é parte da uma literal string ou
comentário, ela é juntada com a linha seguinte formando uma única linha
lógica, removendo a contrabarra e o caractere de fim de linha seguinte.
Por exemplo:

     if 1900 < year < 2100 and 1 <= month <= 12 \
        and 1 <= day <= 31 and 0 <= hour < 24 \
        and 0 <= minute < 60 and 0 <= second < 60:   # Parece ser uma data válida
             return 1

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.


File: python.info,  Node: Junção de linha implícita,  Next: Linhas em branco,  Prev: Junção de linha explícita,  Up: Estrutura das linhas

4.2.1.6 Junção de linha implícita
.................................

Expressões entre parênteses, colchetes ou chaves podem ser quebradas em
mais de uma linha física sem a necessidade do uso de contrabarras.  Por
exemplo:

     month_names = ['Januari', 'Februari', 'Maart',      # Estes são os
                    'April',   'Mei',      'Juni',       # nomes holandeses
                    'Juli',    'Augustus', 'September',  # para os meses
                    'Oktober', 'November', 'December']   # do ano

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.


File: python.info,  Node: Linhas em branco,  Next: Indentação,  Prev: Junção de linha implícita,  Up: Estrutura das linhas

4.2.1.7 Linhas em branco
........................

Uma linha lógica que contém apenas espaços, tabulações, quebras de
página e possivelmente um comentário é ignorada (ou seja, nenhum token
NEWLINE é gerado).  Durante a entrada interativa de instruções, o
tratamento de uma linha em branco pode diferir dependendo da
implementação do interpretador.  No interpretador interativo padrã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.


File: python.info,  Node: Indentação,  Next: Espaços em branco entre tokens,  Prev: Linhas em branco,  Up: Estrutura das linhas

4.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 *note
TabError: 543. é 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:
                   r.append(l[i:i+1] + x)
         return r

O exemplo a seguir mostra vários erros de indentação:

      def perm(l):                       # erro: primeira linha indentada
     for i in range(len(l)):             # erro: não indentada
         s = l[:i] + l[i+1:]
             p = perm(l[:i] + l[i+1:])   # erro: indentação inesperada
             for x in p:
                     r.append(l[i:i+1] + x)
                 return r                # erro: desindentação inconsistente

(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.)


File: python.info,  Node: Espaços em branco entre tokens,  Prev: Indentação,  Up: Estrutura das linhas

4.2.1.9 Espaços em branco entre tokens
......................................

Exceto no início de uma linha lógica ou em string literais, os
caracteres de espaço em branco (espaço, tabulação e quebra de página)
podem ser usados alternadamente para separar tokens.  O espaço em branco
é necessário entre dois tokens somente se sua concatenação puder ser
interpretada como um token diferente (por exemplo, ab é um token, mas a
b são dois tokens).


File: python.info,  Node: Outros tokens,  Next: Identificadores e palavras-chave,  Prev: Estrutura das linhas,  Up: Análise léxica

4.2.2 Outros tokens
-------------------

Além de NEWLINE, INDENT e DEDENT, existem as seguintes categorias de
tokens: 'identificadores', 'palavras-chave', 'literais', 'operadores' e
'delimitadores'.  Caracteres de espaço em branco (exceto terminadores de
linha, discutidos anteriormente) não são tokens, mas servem para
delimitar tokens.  Onde existe ambiguidade, um token compreende a string
mais longa possível que forma um token legal, quando lido da esquerda
para a direita.


File: python.info,  Node: Identificadores e palavras-chave,  Next: Literais,  Prev: Outros tokens,  Up: Análise léxica

4.2.3 Identificadores e palavras-chave
--------------------------------------

Identificadores (também chamados de 'nomes') são descritos pelas
seguintes definições lexicais.

A sintaxe dos identificadores em Python é baseada no anexo do padrão
Unicode UAX-31, com elaboração e alterações conforme definido abaixo;
veja também PEP 3131(1) para mais detalhes.

Dentro do intervalo ASCII (U+0001..U+007F), os caracteres válidos para
identificadores incluem as letras maiúsculas e minúsculas ‘A’ a ‘Z’, o
sublinhado ‘_’ e, exceto pelo primeiro caractere, os dígitos ‘0’ a ‘9’.
O Python 3.0 introduziu caracteres adicionais de fora do intervalo ASCII
(veja PEP 3131(2)).  Para esses caracteres, a classificação usa a versão
do Unicode Character Database conforme incluído no módulo *note
unicodedata: 105.

Os identificadores têm comprimento ilimitado.  Maiúsculas são diferentes
de minúsculas.

     identifier   ::= *note xid_start: 2024. *note xid_continue: 2025.*
     id_start     ::= <all characters in general categories Lu, Ll, Lt, Lm, Lo, Nl, the underscore, and characters with the Other_ID_Start property>
     id_continue  ::= <all characters in *note id_start: 2026, plus characters in the categories Mn, Mc, Nd, Pc and others with the Other_ID_Continue property>
     xid_start    ::= <all characters in *note id_start: 2026. whose NFKC normalization is in "id_start xid_continue*">
     xid_continue ::= <all characters in *note id_continue: 2027. whose NFKC normalization is in "id_continue*">

Os códigos de categoria Unicode mencionados acima significam:

   * 'Lu' - letras maiúsculas

   * 'Ll' - letras minúsculas

   * 'Lt' - letras em titlecase

   * 'Lm' - letras modificadoras

   * 'Lo' - outras letras

   * 'Nl' - letras numéricas

   * 'Mn' - marcas sem espaçamento

   * 'Mc' - marcas de combinação de espaçamento

   * 'Nd' - números decimais

   * 'Pc' - pontuações de conectores

   * 'Other_ID_Start' - lista explícita de caracteres em PropList.txt(3)
     para oferecer suporte à compatibilidade com versões anteriores

   * 'Other_ID_Continue' - igualmente

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
‘https://www.unicode.org/Public/15.1.0/ucd/DerivedCoreProperties.txt’

* Menu:

* Palavras reservadas::
* Palavras reservadas contextuais::
* Classes reservadas de identificadores::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3131/

   (2) https://peps.python.org/pep-3131/

   (3) https://www.unicode.org/Public/15.1.0/ucd/PropList.txt


File: python.info,  Node: Palavras reservadas,  Next: Palavras reservadas contextuais,  Up: Identificadores e palavras-chave

4.2.3.1 Palavras reservadas
...........................

Os seguintes identificadores são usados como palavras reservadas, ou
'palavras-chave' da linguagem, e não podem ser usados como
identificadores comuns.  Eles devem ser escritos exatamente como estão
escritos aqui:

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


File: python.info,  Node: Palavras reservadas contextuais,  Next: Classes reservadas de identificadores,  Prev: Palavras reservadas,  Up: Identificadores e palavras-chave

4.2.3.2 Palavras reservadas contextuais
.......................................

Adicionado na versão 3.10.

Alguns identificadores são reservados apenas em contextos específicos.
Elas são conhecidas como 'palavras reservadas contextuais'.  Os
identificadores ‘match’, ‘case’, ‘type’ e ‘_’ podem atuar sintaticamente
como palavras reservadas em determinados contextos, mas essa distinção é
feita no nível do analisador sintático, não durante a tokenização.

Como palavras reservadas contextuais, seu uso na gramática é possível
preservando a compatibilidade com o código existente que usa esses nomes
como identificadores.

‘match’, ‘case’ e ‘_’ são usadas na instrução *note match: 810, ‘type’ é
usado na instrução *note type: 438.

Alterado na versão 3.12: ‘type’ é agora uma palavra reservada
contextual.


File: python.info,  Node: Classes reservadas de identificadores,  Prev: Palavras reservadas contextuais,  Up: Identificadores e palavras-chave

4.2.3.3 Classes reservadas de identificadores
.............................................

Certas classes de identificadores (além de palavras reservadas) possuem
significados especiais.  Essas classes são identificadas pelos padrões
de caracteres de sublinhado iniciais e finais:

‘_*’

     Não importado por ‘from module import *’.

‘_’

     Em um padrão ‘case’ de uma instrução *note match: 810, ‘_’ é uma
     *note palavra reservada contextual: 80f. que denota um *note
     curinga: 811.

     Isoladamente, o interpretador interativo disponibiliza o resultado
     da última avaliação na variável ‘_’.  (Ele é armazenado no módulo
     *note builtins: 12, juntamente com funções embutidas como ‘print’.)

     Em outros lugares, ‘_’ é um identificador comum.  Muitas vezes é
     usado para nomear itens “especiais”, mas não é especial para o
     Python em si.

          Nota: O nome ‘_’ é frequentemente usado em conjunto com
          internacionalização; consulte a documentação do módulo *note
          gettext: 63. para obter mais informações sobre esta convenção.

          Também é comumente usado para variáveis não utilizadas.

‘__*__’

     Nomes definidos pelo sistema, informalmente conhecidos como nomes
     “dunder”.  Esses nomes e suas implementações são definidos pelo
     interpretador (incluindo a biblioteca padrão).  Os nomes de sistema
     atuais são discutidos na seção *note Nomes de métodos especiais:
     c89. e em outros lugares.  Provavelmente mais nomes serão definidos
     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
     *note Identificadores (Nomes): 202d.


File: python.info,  Node: Literais,  Next: Operadores,  Prev: Identificadores e palavras-chave,  Up: Análise léxica

4.2.4 Literais
--------------

Literais são notações para valores constantes de alguns tipos embutidos.

* Menu:

* Literais de string e bytes::
* Concatenação de literal de string::
* f-strings::
* Literais numéricos::
* Inteiros literais::
* Literais de ponto flutuante::
* Literais imaginários::


File: python.info,  Node: Literais de string e bytes,  Next: Concatenação de literal de string,  Up: Literais

4.2.4.1 Literais de string e bytes
..................................

Literais de string são descritos pelas seguintes definições lexicais:

     stringliteral   ::= [*note stringprefix: 2033.](*note shortstring: 2034. | *note longstring: 2035.)
     stringprefix    ::= "r" | "u" | "R" | "U" | "f" | "F"
                         | "fr" | "Fr" | "fR" | "FR" | "rf" | "rF" | "Rf" | "RF"
     shortstring     ::= "'" *note shortstringitem: 2036.* "'" | '"' *note shortstringitem: 2036.* '"'
     longstring      ::= "'''" *note longstringitem: 2037.* "'''" | '"""' *note longstringitem: 2037.* '"""'
     shortstringitem ::= *note shortstringchar: 2038. | *note stringescapeseq: 2039.
     longstringitem  ::= *note longstringchar: 203a. | *note stringescapeseq: 2039.
     shortstringchar ::= <any source character except "\" or newline or the quote>
     longstringchar  ::= <any source character except "\">
     stringescapeseq ::= "\" <any source character>

     bytesliteral   ::= *note bytesprefix: 203c.(*note shortbytes: 203d. | *note longbytes: 203e.)
     bytesprefix    ::= "b" | "B" | "br" | "Br" | "bR" | "BR" | "rb" | "rB" | "Rb" | "RB"
     shortbytes     ::= "'" *note shortbytesitem: 203f.* "'" | '"' *note shortbytesitem: 203f.* '"'
     longbytes      ::= "'''" *note longbytesitem: 2040.* "'''" | '"""' *note longbytesitem: 2040.* '"""'
     shortbytesitem ::= *note shortbyteschar: 2041. | *note bytesescapeseq: 2042.
     longbytesitem  ::= *note longbyteschar: 2043. | *note bytesescapeseq: 2042.
     shortbyteschar ::= <any ASCII character except "\" or newline or the quote>
     longbyteschar  ::= <any ASCII character except "\">
     bytesescapeseq ::= "\" <any ASCII character>

Uma restrição sintática não indicada por essas produções é que não são
permitidos espaços em branco entre o *note stringprefix: 2033. ou *note
bytesprefix: 203c. 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 *note Declarações de codificação: 2014.

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 *note sequências de escape: 45a. abaixo para exemplos.

Literais de bytes são sempre prefixados com ‘'b'’ ou ‘'B'’; eles
produzem uma instância do tipo *note bytes: 1c2. em vez do tipo *note
str: 44c.  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(1) para obter mais informações.

Uma string literal com ‘'f'’ ou ‘'F'’ em seu prefixo é uma string
literal formatada; veja *note f-strings: 9b1.  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 ‘"’.)

* Menu:

* Sequências de escape::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0414/


File: python.info,  Node: Sequências de escape,  Up: Literais de string e bytes

4.2.4.2 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 interpretadas de acordo com
regras semelhantes àquelas usadas pelo Standard C. As sequências de
escape reconhecidas são:

Sequência de escape           Significado                           Notas
                                                                    
--------------------------------------------------------------------------------
                                                                    
‘\’<newline>                  A barra invertida e a nova linha      (1)
                              foram ignoradas                       
                              
                                                                    
‘\\’                          Contrabarra (‘\’)
                              
                                                                    
‘\'’                          Aspas simples (‘'’)
                              
                                                                    
‘\"’                          Aspas duplas (‘"’)
                              
                                                                    
‘\a’                          ASCII Bell (BEL) - um sinal audível
                              é emitido
                              
                                                                    
‘\b’                          ASCII Backspace (BS) - apaga
                              caractere à esquerda
                              
                                                                    
‘\f’                          ASCII Formfeed (FF) - quebra de
                              página
                              
                                                                    
‘\n’                          ASCII Linefeed (LF) - quebra de
                              linha
                              
                                                                    
‘\r’                          ASCII Carriage Return (CR) -
                              retorno de carro
                              
                                                                    
‘\t’                          ASCII Horizontal Tab (TAB) -
                              tabulação horizontal
                              
                                                                    
‘\v’                          ASCII Vertical Tab (VT) - tabulação
                              vertical
                              
                                                                    
‘\OOO’                        Caractere com valor octal 'ooo'       (2,4)
                                                                    
                                                                    
‘\xHH’                        Caractere com valor hexadecimal       (3,4)
                              'hh'                                  
                              

As sequências de escape apenas reconhecidas em literais de strings são:

Sequência de escape           Significado                           Notas
                                                                    
--------------------------------------------------------------------------------
                                                                    
‘\N{NAME}’                    Caractere chamado 'name' no banco     (5)
                              de dados Unicode                      
                              
                                                                    
‘\uXXXX’                      Caractere com valor hexadecimal de    (6)
                              16 bits 'xxxx'                        
                              
                                                                    
‘\UXXXXXXXX’                  Caractere com valor hexadecimal de    (7)
                              32 bits 'xxxxxxxx'                    
                              

Notas:

  1. Uma contrabarra pode ser adicionada ao fim da linha para ignorar a
     nova linha:

          >>> 'Esta string não vai incluir \
          ... contrabarras e caracteres de nova linha.'
          'Esta string não vai incluir contrabarras e caracteres de nova linha.'

     O mesmo resultado pode ser obtido usando *note strings com aspas
     triplas: 2031, ou parênteses e *note concatenação de literal
     string: 2045.

  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 *note DeprecationWarning: 1a5.

     Alterado na versão 3.12: Escapes octais com valor maior que ‘0o377’
     produzem um *note SyntaxWarning: 466.  Em uma versão futura do
     Python eles serão eventualmente um *note SyntaxError: 18d.

  3. Ao contrário do padrão C, são necessários exatamente dois dígitos
     hexadecimais.

  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 nome (1) 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 hexadecimais.

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 *note DeprecationWarning: 1a5.

Alterado na versão 3.12: Sequências de escape não reconhecidas produzem
um *note SyntaxWarning: 466.  Em uma versão futura do Python eles serão
eventualmente um *note SyntaxError: 18d.

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.

   ---------- Footnotes ----------

   (1) ‘https://www.unicode.org/Public/15.1.0/ucd/NameAliases.txt’


File: python.info,  Node: Concatenação de literal de string,  Next: f-strings,  Prev: Literais de string e bytes,  Up: Literais

4.2.4.3 Concatenação de literal de string
.........................................

São permitidos vários literais de strings ou bytes adjacentes
(delimitados por espaços em branco), possivelmente usando diferentes
convenções de delimitação de strings, e seu significado é o mesmo de sua
concatenação.  Assim, ‘"hello" 'world'’ é equivalente a ‘"helloworld"’.
Este recurso pode ser usado para reduzir o número de barras invertidas
necessárias, para dividir strings longas convenientemente em linhas
longas ou até mesmo para adicionar comentários a partes de strings, por
exemplo:

     re.compile("[A-Za-z_]"       # letra ou sublinhado
                "[A-Za-z0-9_]*"   # letra, dígito ou sublinhado
               )

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.


File: python.info,  Node: f-strings,  Next: Literais numéricos,  Prev: Concatenação de literal de string,  Up: Literais

4.2.4.4 f-strings
.................

Adicionado na versão 3.6.

Um 'literal de string formatado' ou 'f-string' é uma literal de string
prefixado com ‘'f'’ ou ‘'F'’.  Essas strings podem conter campos de
substituição, que são expressões delimitadas por chaves ‘{}’.  Embora
outros literais de string sempre tenham um valor constante, strings
formatadas são, na verdade, expressões avaliadas em tempo de execução.

As sequências de escape são decodificadas como em literais de string
comuns (exceto quando um literal também é marcado como uma string
bruta).  Após a decodificação, a gramática do conteúdo da string é:

     f_string          ::= (*note literal_char: 204a. | "{{" | "}}" | *note replacement_field: 204b.)*
     replacement_field ::= "{" *note f_expression: 204c. ["="] ["!" *note conversion: 204d.] [":" *note format_spec: 204e.] "}"
     f_expression      ::= (*note conditional_expression: 204f. | "*" *note or_expr: 2050.)
                           ("," *note conditional_expression: 204f. | "," "*" *note or_expr: 2050.)* [","]
                           | *note yield_expression: 2051.
     conversion        ::= "s" | "r" | "a"
     format_spec       ::= (*note literal_char: 204a. | *note replacement_field: 204b.)*
     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 strings 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 *note lambda: 12df.
e de atribuição ‘:=’ devem ser colocadas entre parênteses explícitos.
Cada expressão é avaliada no contexto onde o literal de string formatada
aparece, na ordem da esquerda para a direita.  As expressões de
substituição podem conter novas linhas em f-strings tanto entre aspas
simples quanto em 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 chaves e aspas).  Nesse caso, os campos de substituição deverão
ser fechados em uma linha diferente.

     >>> f"abc{a # Este é um comentário }"
     ... + 3}"
     'abc5'

Alterado na versão 3.7: Antes do Python 3.7, uma expressão *note await:
1b9. e compreensões contendo uma cláusula *note async for: aba. eram
ilegais nas expressões em literais de strings formatadas 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 *note repr(): 800. da expressão
seja fornecida, a menos que haja um formato especificado.  Quando um
formato é especificado, o padrão é o *note str(): 44c. 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 *note
str(): 44c. no resultado, ‘'!r'’ chama *note repr(): 800. e ‘'!a'’ chama
*note ascii(): 142d.

O resultado é então formatado usando o protocolo *note format(): 61f.  O
especificador de formato é passado para o método *note __format__():
61e. 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 *note especificadores de formato: 1e8,
mas podem não incluir campos de substituição aninhados mais
profundamente.  A *note minilinguagem do especificador de formato: 1e8.
é a mesma usada pelo método *note str.format(): 621.

Literais de strings formatadas podem ser concatenados, mas os campos de
substituição não podem ser divididos entre literais.

Alguns exemplos de literais de string formatada:

     >>> nome = "Fred"
     >>> f"Ele falou que o nome dele é {nome!r}."
     "Ele falou que o nome dele é 'Fred'."
     >>> f"Ele falou que o nome dele é {repr(nome)}."  # repr() é um equivalente a !r
     "Ele falou que o nome dele é 'Fred'."
     >>> largura = 10
     >>> precisão = 4
     >>> valor = decimal.Decimal("12.34567")
     >>> f"resultado: {valor:{largura}.{precisão}}"  # campos aninhados
     'resultado: 12.35'
     >>> hoje = datetime(year=2017, month=1, day=27)
     >>> f"{hoje:%B %d, %Y}"  # usando especificador de formato de data
     'January 27, 2017'
     >>> f"{hoje=:%B %d, %Y}"  # usando especificador de formato de data e depuração
     'hoje=January 27, 2017'
     >>> número = 1024
     >>> f"{número:#0x}"  # usando especificador de formato de número inteiro
     '0x400'
     >>> foo = "bar"
     >>> f"{ foo = }"  # preserva espaço em branco
     " foo = 'bar'"
     >>> linha = "Olha a caixa d'água"
     >>> f"{linha = }"
     'linha = "Olha a caixa d\'água"'
     >>> f"{linha = :20}"
     "linha = Olha a caixa d'água "
     >>> f"{linha = !r:20}"
     'linha = "Olha a caixa d\'água"'

É permitido reutilizar o tipo de aspas externas da f-string dentro de um
campo de substituição:

     >>> 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 externas da f-string 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:

     >>> a = ["a", "b", "c"]
     >>> print(f"A lista a contém:\n{"\n".join(a)}")
     A lista a contém:
     a
     b
     c

Alterado na versão 3.12: Antes do Python 3.12, contrabarras não eram
permitidas dentro de um campo de substituição em uma f-string.

Literais de strings formatadas não podem ser usados como strings de
documentação, mesmo que não incluam expressões.

     >>> def foo():
     ...     f"Não é uma docstring"
     ...
     >>> foo.__doc__ is None
     True

Consulte também PEP 498(1) para a proposta que adicionou literais de
strings formatadas e *note str.format(): 621, que usa um mecanismo de
string de formato relacionado.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0498/


File: python.info,  Node: Literais numéricos,  Next: Inteiros literais,  Prev: f-strings,  Up: Literais

4.2.4.5 Literais numéricos
..........................

Existem três tipos de literais numéricos: inteiros, números de ponto
flutuante e números imaginários.  Não existem literais complexos
(números complexos podem ser formados adicionando um número real e um
número imaginário).

Observe que os literais numéricos não incluem um sinal; uma frase como
‘-1’ é, na verdade, uma expressão composta pelo operador unário ‘‘-2’’ e
o literal ‘1’.


File: python.info,  Node: Inteiros literais,  Next: Literais de ponto flutuante,  Prev: Literais numéricos,  Up: Literais

4.2.4.6 Inteiros literais
.........................

Literais inteiros são descritos pelas seguintes definições léxicas:

     integer      ::= *note decinteger: 2057. | *note bininteger: 2058. | *note octinteger: 2059. | *note hexinteger: 205a.
     decinteger   ::= *note nonzerodigit: 205b. (["_"] *note digit: 205c.)* | "0"+ (["_"] "0")*
     bininteger   ::= "0" ("b" | "B") (["_"] *note bindigit: 205d.)+
     octinteger   ::= "0" ("o" | "O") (["_"] *note octdigit: 205e.)+
     hexinteger   ::= "0" ("x" | "X") (["_"] *note hexdigit: 205f.)+
     nonzerodigit ::= "1"..."9"
     digit        ::= "0"..."9"
     bindigit     ::= "0" | "1"
     octdigit     ::= "0"..."7"
     hexdigit     ::= *note digit: 205c. | "a"..."f" | "A"..."F"

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:

     7     2147483647                        0o177    0b100110111
     3     79228162514264337593543950336     0o377    0xdeadbeef
           100_000_000_000                   0b_1110_0101

Alterado na versão 3.6: Os sublinhados agora são permitidos para fins de
agrupamento de literais.


File: python.info,  Node: Literais de ponto flutuante,  Next: Literais imaginários,  Prev: Inteiros literais,  Up: Literais

4.2.4.7 Literais de ponto flutuante
...................................

Literais de ponto flutuante são descritos pelas seguintes definições
léxicas:

     floatnumber   ::= *note pointfloat: 2063. | *note exponentfloat: 2064.
     pointfloat    ::= [*note digitpart: 2065.] *note fraction: 2066. | *note digitpart: 2065. "."
     exponentfloat ::= (*note digitpart: 2065. | *note pointfloat: 2063.) *note exponent: 2067.
     digitpart     ::= *note digit: 205c. (["_"] *note digit: 205c.)*
     fraction      ::= "." *note digitpart: 2065.
     exponent      ::= ("e" | "E") ["+" | "-"] *note digitpart: 2065.

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:

     3.14    10.    .001    1e100    3.14e-10    0e0    3.14_15_93

Alterado na versão 3.6: Os sublinhados agora são permitidos para fins de
agrupamento de literais.


File: python.info,  Node: Literais imaginários,  Prev: Literais de ponto flutuante,  Up: Literais

4.2.4.8 Literais imaginários
............................

Os literais imaginários são descritos pelas seguintes definições
léxicas:

     imagnumber ::= (*note floatnumber: 2062. | *note digitpart: 2065.) ("j" | "J")

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:

     3.14j   10.j    10j     .001j   1e100j   3.14e-10j   3.14_15_93j


File: python.info,  Node: Operadores,  Next: Delimitadores,  Prev: Literais,  Up: Análise léxica

4.2.5 Operadores
----------------

Os seguintes tokens são operadores:

     +       -       *       **      /       //      %      @
     <<      >>      &       |       ^       ~       :=
     <       >       <=      >=      ==      !=


File: python.info,  Node: Delimitadores,  Prev: Operadores,  Up: Análise léxica

4.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 significativos 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:

     $       ?       `


File: python.info,  Node: Modelo de dados,  Next: Modelo de execução,  Prev: Análise léxica,  Up: A Referência da Linguagem Python

4.3 Modelo de dados
===================

* Menu:

* Objetos, valores e tipos: Objetos valores e tipos.
* A hierarquia de tipos padrão::
* Nomes de métodos especiais::
* Corrotinas::


File: python.info,  Node: Objetos valores e tipos,  Next: A hierarquia de tipos padrão,  Up: Modelo de dados

4.3.1 Objetos, valores e tipos
------------------------------

'Objetos' são abstrações do Python para dados.  Todos os dados em um
programa Python são representados por objetos ou por relações entre
objetos.  Código também é representado por objetos.

Todo objeto tem uma identidade, um tipo e um valor.  A 'identidade' de
um objeto nunca muda depois de criado; você pode pensar nisso como
endereço de objetos em memória.  O operador *note is: 2f5. compara as
identidades de dois objetos; a função *note id(): 146a. retorna um
inteiro representando sua identidade.

Para CPython, ‘id(x)’ é o endereço de memória em que ‘x’ está
armazenado.

O tipo de um objeto determina as operações que o objeto implementa (por
exemplo, “ele tem um comprimento?”) e também define os valores possíveis
para objetos desse tipo.  A função *note type(): d6b. retorna o tipo de
um objeto (que é também um objeto).  Como sua identidade, o 'tipo' do
objeto também é imutável.  (1)

O 'valor' de alguns objetos pode mudar.  Objetos cujos valores podem
mudar são descritos como 'mutáveis', objetos cujo valor não pode ser
mudado uma vez que foram criados são chamados 'imutáveis'.  (O valor de
um objeto contêiner imutável que contém uma referência a um objeto
mutável pode mudar quando o valor deste último for mudado; no entanto o
contêiner é ainda assim considerada imutável, pois a coleção de objetos
que contém não pode ser mudada.  Então a imutabilidade não é
estritamente o mesmo do que não haver mudanças de valor, é mais sutil.)
A mutabilidade de um objeto é determinada pelo seu tipo; por exemplo,
números, strings e tuplas são imutáveis, enquanto dicionários e listas
são mutáveis.

Os objetos nunca são destruídos explicitamente; no entanto, quando eles
se tornam inacessíveis, eles podem ser coletados como lixo.  Uma
implementação tem permissão para adiar a coleta de lixo ou omiti-la
completamente – é uma questão de detalhe de implementação como a coleta
de lixo é implementada, desde que nenhum objeto que ainda esteja
acessível seja coletado.

CPython atualmente usa um esquema de contagem de referências com
detecção atrasada (opcional) de lixo ligado ciclicamente, que coleta a
maioria dos objetos assim que eles se tornam inacessíveis, mas não é
garantido que coletará lixo contendo referências circulares.  Veja a
documentação do módulo *note gc: 60. para informações sobre como
controlar a coleta de lixo cíclico.  Outras implementações agem de forma
diferente e o CPython pode mudar.  Não dependa da finalização imediata
dos objetos quando eles se tornarem inacessíveis (isto é, você deve
sempre fechar os arquivos explicitamente).

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
*note try: 6e9.…*note except: 18b. 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 objetos 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 *note try: 6e9.…*note finally: 9d2. e a instrução *note with:
5d2. 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 *note int: 257. é 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'.)

   ---------- Footnotes ----------

   (1) Em alguns casos, 'é' possível alterar o tipo de um objeto, sob
certas condições controladas.  No entanto, geralmente não é uma boa
ideia, pois pode levar a um comportamento muito estranho se for tratado
incorretamente.


File: python.info,  Node: A hierarquia de tipos padrão,  Next: Nomes de métodos especiais,  Prev: Objetos valores e tipos,  Up: Modelo de dados

4.3.2 A hierarquia de tipos padrão
----------------------------------

Abaixo está uma lista dos tipos que são embutidos no Python.  Módulos de
extensão (escritos em C, Java ou outras linguagens, dependendo da
implementação) podem definir tipos adicionais.  Versões futuras do
Python podem adicionar tipos à hierarquia de tipo (por exemplo, números
racionais, matrizes de inteiros armazenadas de forma eficiente, etc.),
embora tais adições sejam frequentemente fornecidas por meio da
biblioteca padrão.

Algumas das descrições de tipo abaixo contêm um parágrafo listando
“atributos especiais”.  Esses são atributos que fornecem acesso à
implementação e não se destinam ao uso geral.  Sua definição pode mudar
no futuro.

* Menu:

* None::
* NotImplemented::
* Ellipsis::
* numbers.Number: numbers Number.
* Sequências::
* Tipos de conjuntos::
* Mapeamentos::
* Tipos chamáveis::
* Módulos: Módulos<3>.
* Classes personalizadas::
* Instâncias de classe: Instâncias de classe<2>.
* Objetos de E/S (também conhecidos como objetos arquivo): Objetos de E/S também conhecidos como objetos arquivo.
* Tipos internos::


File: python.info,  Node: None,  Next: NotImplemented,  Up: A hierarquia de tipos padrão

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


File: python.info,  Node: NotImplemented,  Next: Ellipsis,  Prev: None,  Up: A hierarquia de tipos padrão

4.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 *note NotImplemented:
7d3.  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 *note Implementando as operações aritméticas: 2078.
para mais detalhes.

Alterado na versão 3.9: A avaliação de *note NotImplemented: 7d3. em um
contexto booleano foi descontinuada.  Embora atualmente seja avaliada
como verdadeiro, é emitida uma exceção *note DeprecationWarning: 1a5.
Levantará uma *note TypeError: 2c3. em uma versão futura do Python.


File: python.info,  Node: Ellipsis,  Next: numbers Number,  Prev: NotImplemented,  Up: A hierarquia de tipos padrão

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


File: python.info,  Node: numbers Number,  Next: Sequências,  Prev: Ellipsis,  Up: A hierarquia de tipos padrão

4.3.2.4 ‘numbers.Number’
........................

Esses são criados por literais numéricos e retornados como resultados
por operadores aritméticos e funções aritméticas 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 *note
__repr__(): 61c. e *note __str__(): 61d, 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 mostrados.

   * 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:

* Menu:

* numbers.Integral: numbers Integral.
* numbers.Real (float): numbers Real float.
* numbers.Complex (complex): numbers Complex complex.


File: python.info,  Node: numbers Integral,  Next: numbers Real float,  Up: numbers Number

4.3.2.5 ‘numbers.Integral’
..........................

Estes representam elementos do conjunto matemático de inteiros
(positivos e negativos).

     Nota: 
     As regras para representação de inteiros têm como objetivo fornecer
     a interpretação mais significativa das operações de deslocamento e
     máscara envolvendo inteiros negativos.

Existem dois tipos de inteiros:

Inteiros (*note int: 257.)

     Estes representam números em um intervalo ilimitado, sujeito apenas
     à memória (virtual) disponível.  Para o propósito de operações de
     deslocamento e máscara, uma representação binária é presumida e os
     números negativos são representados em uma variante do complemento
     de 2 que dá a ilusão de uma string infinita de bits de sinal
     estendendo-se para a esquerda.

Booleanos (*note bool: 468.)

     Estes representam os valores da verdade Falsos e Verdadeiros.  Os
     dois objetos que representam os valores ‘False’ e ‘True’ são os
     únicos objetos booleanos.  O tipo booleano é um subtipo do tipo
     inteiro, e os valores booleanos se comportam como os valores 0 e 1,
     respectivamente, em quase todos os contextos, com exceção de que,
     quando convertidos em uma string, as strings ‘"False"’ ou ‘"True"’
     são retornados, respectivamente.


File: python.info,  Node: numbers Real float,  Next: numbers Complex complex,  Prev: numbers Integral,  Up: numbers Number

4.3.2.6 ‘numbers.Real’ (‘float’)
................................

Estes representam números de ponto flutuante de precisão dupla no nível
da máquina.  Você está à mercê da arquitetura 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.


File: python.info,  Node: numbers Complex complex,  Prev: numbers Real float,  Up: numbers Number

4.3.2.7 ‘numbers.Complex’ (‘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 ‘z.real’ e ‘z.imag’.


File: python.info,  Node: Sequências,  Next: Tipos de conjuntos,  Prev: numbers Number,  Up: A hierarquia de tipos padrão

4.3.2.8 Sequências
..................

Estes representam conjuntos ordenados finitos indexados por números não
negativos.  A função embutida *note len(): 62e. 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:

* Menu:

* Sequências imutáveis::
* Sequências mutáveis::


File: python.info,  Node: Sequências imutáveis,  Next: Sequências mutáveis,  Up: Sequências

4.3.2.9 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 *note ord(): 2080. converte um ponto de código de sua
     forma de string para um inteiro no intervalo ‘0 - 10FFFF’; *note
     chr(): 1768. converte um inteiro no intervalo ‘0 - 10FFFF’ para o
     objeto de string correspondente de comprimento ‘1’.  *note
     str.encode(): 8db. pode ser usado para converter uma *note str:
     44c. para *note bytes: 1c2. usando a codificação de texto
     fornecida, e *note bytes.decode(): 8dc. 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 *note bytes(): 1c2.
     podem ser usados para criar objetos bytes.  Além disso, os objetos
     bytes podem ser decodificados em strings através do método *note
     decode(): 8dc.


File: python.info,  Node: Sequências mutáveis,  Prev: Sequências imutáveis,  Up: Sequências

4.3.2.10 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 *note del: 18a7. ('delete', exclusão).

     Nota: 
     Os módulos *note collections: 1d. e *note array: 7. fornecem
     exemplos adicionais de tipos de sequência mutáveis.

Atualmente, existem dois tipos de sequência mutável intrínseca:

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 *note bytearray(): 2ea.  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 *note bytes:
     1c2.


File: python.info,  Node: Tipos de conjuntos,  Next: Mapeamentos,  Prev: Sequências,  Up: A hierarquia de tipos padrão

4.3.2.11 Tipos de conjuntos
...........................

Estes representam conjuntos finitos e não ordenados de objetos únicos e
imutáveis.  Como tal, eles não podem ser indexados por nenhum subscrito.
No entanto, eles podem ser iterados, e a função embutida *note len():
62e. retorna o número de itens em um conjunto.  Os usos comuns para
conjuntos são testes rápidos de associação, remoção de duplicatas de uma
sequência e computação de operações matemáticas como interseção, união,
diferença e diferença simétrica.

Para elementos de conjunto, as mesmas regras de imutabilidade se aplicam
às chaves de dicionário.  Observe que os tipos numéricos obedecem às
regras normais para comparação numérica: se dois números forem iguais
(por exemplo, ‘1’ e ‘1.0’), apenas um deles pode estar contido em um
conjunto.

Atualmente, existem dois tipos de conjuntos intrínsecos:

Conjuntos

     Estes representam um conjunto mutável.  Eles são criados pelo
     construtor embutido *note set(): 5d9. e podem ser modificados
     posteriormente por vários métodos, como *note add(): 2083.

Conjuntos congelados

     Estes representam um conjunto imutável.  Eles são criados pelo
     construtor embutido *note frozenset(): 5da.  Como um frozenset é
     imutável e *note hasheável: 610, ele pode ser usado novamente como
     um elemento de outro conjunto, ou como uma chave de dicionário.


File: python.info,  Node: Mapeamentos,  Next: Tipos chamáveis,  Prev: Tipos de conjuntos,  Up: A hierarquia de tipos padrão

4.3.2.12 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 *note del: 18a7.  A função
embutida *note len(): 62e. retorna o número de itens em um mapeamento.

Atualmente, há um único tipo de mapeamento intrínseco:

* Menu:

* Dicionários: Dicionários<2>.


File: python.info,  Node: Dicionários<2>,  Up: Mapeamentos

4.3.2.13 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 *note Sintaxes de criação de dicionário: da7.).

Os módulos de extensão *note dbm.ndbm: 34. e *note dbm.gnu: 33. fornecem
exemplos adicionais de tipos de mapeamento, assim como o módulo *note
collections: 1d.

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.


File: python.info,  Node: Tipos chamáveis,  Next: Módulos<3>,  Prev: Mapeamentos,  Up: A hierarquia de tipos padrão

4.3.2.14 Tipos chamáveis
........................

Estes são os tipos aos quais a operação de chamada de função (veja a
seção *note Chamadas: da5.) pode ser aplicada:

* Menu:

* Funções definidas pelo usuário::
* Métodos de instância::
* Funções geradoras::
* Funções de corrotina::
* Funções geradoras assíncronas::
* Funções embutidas: Funções embutidas<2>.
* Métodos embutidos::
* Classes: Classes<2>.
* Instâncias de classe::


File: python.info,  Node: Funções definidas pelo usuário,  Next: Métodos de instância,  Up: Tipos chamáveis

4.3.2.15 Funções definidas pelo usuário
.......................................

Um objeto função definido pelo usuário será criado pela definição de
função (veja a seção *note Definições de função: 1db6.).  A mesma deverá
ser invocada com uma lista de argumentos contendo o mesmo número de
itens que a lista de parâmetros formais da função.

* Menu:

* Atributos especiais de somente leitura::
* Atributos especiais graváveis::


File: python.info,  Node: Atributos especiais de somente leitura,  Next: Atributos especiais graváveis,  Up: Funções definidas pelo usuário

4.3.2.16 Atributos especiais de somente leitura
...............................................

Atributo                                               Significado
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
 -- Atributo: function.__builtins__                    A reference to the *note dictionary: 256. that holds
                                                       the function’s builtins namespace.
                                                       
                                                       Adicionado na versão 3.10.
                                                       
                                                       
 -- Atributo: function.__globals__                     Uma referência ao *note dicionário: 256. que contém
                                                       as *note variáveis globais: 208a. da função – o
                                                       espaço de nomes global do módulo no qual a função
                                                       foi definida.
                                                       
                                                       
 -- Atributo: function.__closure__                     ‘None’ ou uma *note tuple: 370. de células que
                                                       contêm ligação para os nomes especificados no
                                                       atributo *note co_freevars: 208b. do
                                                       *note objeto código: 29a. 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.
                                                       


File: python.info,  Node: Atributos especiais graváveis,  Prev: Atributos especiais de somente leitura,  Up: Funções definidas pelo usuário

4.3.2.17 Atributos especiais graváveis
......................................

A maioria desses atributos verifica o tipo do valor atribuído:

Atributo                                               Significado
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
 -- Atributo: function.__doc__                         A string de documentação da função, ou ‘None’ se
                                                       indisponível.
                                                       
                                                       
 -- Atributo: function.__name__                        O nome da função.  Veja também:
                                                       *note atributos __name__: 109f.
                                                       
                                                       
 -- Atributo: function.__qualname__                    O *note nome qualificado: 1ab1. da função.  Veja
                                                       também: *note atributos __qualname__: 109e.
                                                       
                                                       Adicionado na versão 3.3.
                                                       
                                                       
 -- Atributo: function.__module__                      O nome do módulo em que a função foi definida ou
                                                       ‘None’ se indisponível.
                                                       
                                                       
 -- Atributo: function.__defaults__                    Uma *note tuple: 370. contendo valores de
                                                       *note parâmetro: 208f. padrão para aqueles
                                                       parâmetros que possuem padrões, ou ‘None’ se nenhum
                                                       parâmetro tiver um valor padrão.
                                                       
                                                       
 -- Atributo: function.__code__                        O *note objeto código: 1d2. que representa o corpo
                                                       da função compilada.
                                                       
                                                       
 -- Atributo: function.__dict__                        O espaço de nomes que provê atributos de função
                                                       arbitrários.  Veja também:
                                                       *note atributos __dict__: 55b.
                                                       
                                                       
 -- Atributo: function.__annotations__                 Um *note dicionário: 256. contendo anotações de
                                                       *note parâmetros: 208f.  As chaves do dicionário são
                                                       os nomes dos parâmetros e ‘'return'’ para a anotação
                                                       de retorno, se fornecida.  Veja também:
                                                       *note Boas práticas para anotações: 7da.
                                                       
                                                       
 -- Atributo: function.__kwdefaults__                  Um *note dicionário: 256. contendo padrões apenas
                                                       para *note parâmetros: 208f. somente-nomeados.
                                                       
                                                       
 -- Atributo: function.__type_params__                 Uma *note tuple: 370. contendo os
                                                       *note parâmetros de tipo: 2b3. de uma
                                                       *note função genérica: 453.
                                                       
                                                       Adicionado na versão 3.12.
                                                       

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.

A implementação atual do CPython provê apenas atributos de função em
funções definidas pelo usuário.  Atributos de função em *note funções
embutido: 2091. podem ser suportados no futuro.

Informações adicionais sobre a definição de uma função podem ser obtidas
de seu *note objeto código: 1d2. (acessível através do atributo *note
__code__: 29a.).


File: python.info,  Node: Métodos de instância,  Next: Funções geradoras,  Prev: Funções definidas pelo usuário,  Up: Tipos chamáveis

4.3.2.18 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 (normalmente uma função definida pelo
usuário).

Atributos especiais de somente leitura:

 -- Atributo: method.__self__                          Refere-se ao objeto instância da classe ao qual o
                                                       método é *note vinculado: 2093.
                                                       
                                                       
 -- Atributo: method.__func__                          Refere-se ao *note objeto função: 299. original
                                                       
                                                       
 -- Atributo: method.__doc__                           A documentação do método (igual a
                                                       *note method.__func__.__doc__: 1219.).  Um
                                                       *note string: 44c. se a função original tivesse uma
                                                       docstring, caso contrário ‘None’.
                                                       
                                                       
 -- Atributo: method.__name__                          O nome do método (mesmo que
                                                       *note method.__func__.__name__: 1317.)
                                                       
                                                       
 -- Atributo: method.__module__                        O nome do módulo em que o método foi definido ou
                                                       ‘None’ se indisponível.
                                                       

Os métodos também implementam o acesso (mas não a configuração) dos
atributos arbitrários da função no *note objeto função: 299. 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 *note objeto função: 299. definido pelo usuário
ou um objeto *note classmethod: 166. .  Quando um objeto método de
instância é criado recuperando um *note objeto função: 299. definido
pelo usuário de uma classe por meio de uma de suas instâncias, seu
atributo *note __self__: 140f. é a instância, e o objeto método é
considerado 'vinculado'.  O atributo *note __func__: 1340. do novo
método é o objeto da função original.

Quando um objeto método de instância é criado obtendo um objeto *note
classmethod: 166. de uma classe ou instância, seu atributo *note
__self__: 140f. é a própria classe, e seu atributo *note __func__: 1340.
é o objeto função subjacente ao método de classe.

Quando um objeto método de instância é chamado, a função subjacente
(*note __func__: 1340.) é chamada, inserindo a instância de classe
(*note __self__: 140f.) 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 *note
classmethod: 166, a “instância de classe” armazenada em *note __self__:
140f. 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.


File: python.info,  Node: Funções geradoras,  Next: Funções de corrotina,  Prev: Métodos de instância,  Up: Tipos chamáveis

4.3.2.19 Funções geradoras
..........................

Uma função ou método que usa a instrução *note yield: 9d5. (veja a seção
*note A instrução yield: 9d5.) é chamada de 'função geradora'.  Tal
função, quando chamada, sempre retorna um objeto *note iterator: 1ac.
que pode ser usado para executar o corpo da função: chamar o método
*note iterator.__next__(): 1310. 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 *note return: 9d6. ou sai do fim, uma
exceção *note StopIteration: c15. é levantada e o iterador terá
alcançado o fim do conjunto de valores a serem retornados.


File: python.info,  Node: Funções de corrotina,  Next: Funções geradoras assíncronas,  Prev: Funções geradoras,  Up: Tipos chamáveis

4.3.2.20 Funções de corrotina
.............................

Uma função ou um método que é definida(o) usando *note async def: 5d1. é
chamado de 'função de corrotina'.  Tal função, quando chamada, retorna
um objeto de *note corrotina: 491.  Ele pode conter expressões *note
await: 1b9, bem como instruções *note async with: 5d5. e *note async
for: aba.  Veja também a seção *note Objetos corrotina: 2099.


File: python.info,  Node: Funções geradoras assíncronas,  Next: Funções embutidas<2>,  Prev: Funções de corrotina,  Up: Tipos chamáveis

4.3.2.21 Funções geradoras assíncronas
......................................

Uma função ou um método que é definida(o) usando *note async def: 5d1. e
que usa a instrução *note yield: 9d5. é chamada de 'função geradora
assíncrona'.  Tal função, quando chamada, retorna um objeto *note
iterador assíncrono: 1ab. que pode ser usado em uma instrução *note
async for: aba. para executar o corpo da função.

Chamar o método *note aiterator.__anext__: 1659. do iterador assíncrono
retornará um *note aguardável: 1ad. que, quando aguardado, será
executado até fornecer um valor usando a expressão *note yield: 9d5.
Quando a função executa uma instrução vazia *note return: 9d6. ou chega
ao final, uma exceção *note StopAsyncIteration: 1ba5. é levantada e o
iterador assíncrono terá alcançado o final do conjunto de valores a
serem produzidos.


File: python.info,  Node: Funções embutidas<2>,  Next: Métodos embutidos,  Prev: Funções geradoras assíncronas,  Up: Tipos chamáveis

4.3.2.22 Funções embutidas
..........................

Um objeto função embutida é um wrapper em torno de uma função C.
Exemplos de funções embutidas são *note len(): 62e. e *note math.sin():
1506. (*note math: 8e. é 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 *note function.__doc__: 1219.

   * ‘__name__’ é o nome da função.  Veja *note function.__name__: 1317.

   * ‘__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 *note function.__module__:
     208e.


File: python.info,  Node: Métodos embutidos,  Next: Classes<2>,  Prev: Funções embutidas<2>,  Up: Tipos chamáveis

4.3.2.23 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 é ‘alist.append()’, 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 *note outros métodos de
instância: 140f.)


File: python.info,  Node: Classes<2>,  Next: Instâncias de classe,  Prev: Métodos embutidos,  Up: Tipos chamáveis

4.3.2.24 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 *note __new__(): 580.  Os argumentos da
chamada são passados para ‘__new__()’ e, no caso típico, para *note
__init__(): 6b0. para inicializar a nova instância.


File: python.info,  Node: Instâncias de classe,  Prev: Classes<2>,  Up: Tipos chamáveis

4.3.2.25 Instâncias de classe
.............................

Instâncias de classes arbitrárias podem ser tornados chamáveis definindo
um método *note __call__(): 558. em sua classe.


File: python.info,  Node: Módulos<3>,  Next: Classes personalizadas,  Prev: Tipos chamáveis,  Up: A hierarquia de tipos padrão

4.3.2.26 Módulos
................

Módulos são uma unidade organizacional básica do código Python, e são
criados pelo *note sistema de importação: 20a3. quando invocado pela
instrução *note import: 5e2, ou chamando funções como *note
importlib.import_module(): 518. e a embutida *note __import__(): 8da.
Um objeto módulo tem um espaço de nomes implementado por um objeto *note
dicionário: 256. (este é o dicionário referenciado pelo atributo *note
__globals__: 1316. das funções definidas no módulo).  As referências de
atributos 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’.

* Menu:

* Atributos relacionados à importação em objetos de módulo::
* Outros atributos graváveis em objetos de módulo::
* Dicionários do módulo::


File: python.info,  Node: Atributos relacionados à importação em objetos de módulo,  Next: Outros atributos graváveis em objetos de módulo,  Up: Módulos<3>

4.3.2.27 Atributos relacionados à importação em objetos de módulo
.................................................................

Objetos de módulo têm os seguintes atributos que se relacionam ao *note
sistema de importação: 20a3.  Quando um módulo é criado usando o
maquinário associado ao sistema de importação, esses atributos são
preenchidos com base no *note spec: 20a6. do módulo, antes que o *note
carregador: 17a4. execute e carregue o módulo.

Para criar um módulo dinamicamente em vez de usar o sistema de
importação, é recomendado usar *note importlib.util.module_from_spec():
e3e, que definirá os vários atributos controlados pela importação para
valores apropriados.  Também é possível usar o construtor *note
types.ModuleType: e3f. para criar módulos diretamente, mas essa técnica
é mais propensa a erros, pois a maioria dos atributos deve ser definida
manualmente no objeto do módulo após ele ter sido criado ao usar essa
abordagem.

     Cuidado: Com exceção de *note __name__: 13d2, é 'fortemente'
     recomendado que você confie no *note __spec__: 20a7. 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')

 -- Atributo: 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__"’.

     Este atributo deve ser definido como o nome totalmente qualificado
     do módulo.  Espera-se que ele corresponda ao valor de *note
     module.__spec__.name: 20a8.

 -- Atributo: module.__spec__

     Um registro do estado relacionado ao sistema de importação do
     módulo.

     Define com *note spec de módulo: 1fee. que foi usado ao importar o
     módulo.  Veja *note Especificações de módulo: 20a9. para mais
     detalhes.

     Adicionado na versão 3.4.

 -- Atributo: module.__package__

     O *note pacote: 20aa. 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 *note module.__name__: 13d2.
     se o módulo em si for um pacote).  Veja PEP 366(1) para mais
     detalhes.

     Este atributo é usado em vez de *note __name__: 13d2. para calcular
     importações relativas explícitas para módulos principais.  O padrão
     é ‘None’ para módulos criados dinamicamente usando o construtor
     *note types.ModuleType: e3f.; use *note
     importlib.util.module_from_spec(): e3e. em vez disso para garantir
     que o atributo seja definido como *note str: 44c.

     É 'fortemente' recomendado que você use *note
     module.__spec__.parent: 2d8. em vez de ‘module.__package__’.  *note
     __package__: 2d7. agora só é usado como fallback se
     ‘__spec__.parent’ não estiver definido, e esse caminho de fallback
     está descontinuado.

     Alterado na versão 3.4: Este atributo agora presume o padrão ‘None’
     para módulos criados dinamicamente usando o construtor *note
     types.ModuleType: e3f.  Anteriormente, o atributo era opcional.

     Alterado na versão 3.6: Espera-se que o valor de ‘__package__’ seja
     o mesmo que *note __spec__.parent: 2d8.  *note __package__: 2d7.
     agora é usado apenas como fallback durante a resolução de
     importação se ‘__spec__.parent’ não estiver definido.

     Alterado na versão 3.10: *note ImportWarning: 4fa. é levantada se
     uma resolução de importação retorna para ‘__package__’ em vez de
     *note __spec__.parent: 2d8.

     Alterado na versão 3.12: Levanta *note DeprecationWarning: 1a5. em
     vez de *note ImportWarning: 4fa. ao retornar para ‘__package__’
     durante a resolução de importação.

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     ‘__package__’ deixará de ser definido ou levado em consideração
     pelo sistema de importação ou biblioteca padrão.

 -- Atributo: module.__loader__

     O objeto *note carregador: 17a4. 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 *note types.ModuleType: e3f.; use
     *note importlib.util.module_from_spec(): e3e. para garantir que o
     atributo seja definido como um objeto *note carregador: 17a4.

     É 'fortemetne' recomendado que você use *note
     module.__spec__.loader: 2e3. 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 *note
     types.ModuleType: e3f.  Anteriormente, o atributo era opcional.

     Descontinuado desde a versão 3.12, será removido na versão 3.16: A
     definição ‘__loader__’ em um módulo enquanto falha na definição de
     ‘__spec__.loader’ está descontinuado.  No Python 3.16, ‘__loader__’
     deixará de ser definido ou levado em consideração pelo sistema de
     importação ou pela biblioteca padrão.

 -- Atributo: module.__path__

     Uma *note sequência: 4f1. (possivelmente vazia) de strings
     enumerando os locais onde os submódulos do pacote serão
     encontrados.  Módulos que não sejam de pacote não devem ter um
     atributo ‘__path__’.  Veja *note Atributo __path__ dos módulos:
     20ab. para mais detalhes.

     É 'fortemente' recomendado que você use *note
     module.__spec__.submodule_search_locations: 20ac. em vez de
     ‘module.__path__’.

 -- Atributo: module.__file__

 -- Atributo: module.__cached__

     ‘__file__’ e ‘__cached__’ são atributos opcionais que podem ou não
     ser definidos.  Ambos os atributos devem ser um *note str: 44c.
     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 dinamicamente 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 *note sistema
     de importação: 20a3. 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(2)).

     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 *note carregador: 17a4. é o que faz uso do spec
     de módulo fornecido pelo *note localizador: 20ae. (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 *note
     module.__spec__.cached: 2d6. em vez de ‘module.__cached__’.

     Descontinuado desde a versão 3.13, será removido na versão 3.15: A
     definição ‘__cached__’ em um módulo enquanto 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.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0366/

   (2) https://peps.python.org/pep-3147/


File: python.info,  Node: Outros atributos graváveis em objetos de módulo,  Next: Dicionários do módulo,  Prev: Atributos relacionados à importação em objetos de módulo,  Up: Módulos<3>

4.3.2.28 Outros atributos graváveis em objetos de módulo
........................................................

Além dos atributos relacionados à importação listados acima, os objetos
de módulo também têm os seguintes atributos graváveis:

 -- Atributo: module.__doc__

     A string de documentação do módulo, ou ‘None’ se indisponível.
     Veja também: *note atributos __doc__: 92e.

 -- Atributo: module.__annotations__

     Um dicionário contendo *note anotações de variável: d79. coletadas
     durante a execução do corpo do módulo.  Para as melhores práticas
     sobre como trabalhar com *note __annotations__: 20b0, por favor
     veja *note Boas práticas para anotações: 7da.


File: python.info,  Node: Dicionários do módulo,  Prev: Outros atributos graváveis em objetos de módulo,  Up: Módulos<3>

4.3.2.29 Dicionários do módulo
..............................

Os objetos de módulo também têm o seguinte atributo especial somente
leitura:

 -- Atributo: module.__dict__

     O espaço de nomes do módulo como um objeto dicionário.
     Exclusivamente entre os atributos listados aqui, ‘__dict__’ não
     pode ser acessado como uma variável global de dentro de um módulo;
     ele só pode ser acessado como um atributo em objetos de módulo.

     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.


File: python.info,  Node: Classes personalizadas,  Next: Instâncias de classe<2>,  Prev: Módulos<3>,  Up: A hierarquia de tipos padrão

4.3.2.30 Classes personalizadas
...............................

Tipos de classe personalizados são tipicamente criados por definições de
classe (veja a seção *note Definições de classe: 131a.).  Uma classe
possui um espaço de nomes implementado por um objeto dicionário.  As
referências de atributos de classe são traduzidas para pesquisas neste
dicionário, por exemplo, ‘C.x’ é traduzido para ‘C.__dict__["x"]’
(embora haja uma série de ganchos que permitem outros meios de localizar
atributos).  Quando o nome do atributo não é encontrado lá, a pesquisa
do atributo continua nas classes base.  Essa pesquisa das classes base
usa a ordem de resolução de métodos C3, que se comporta corretamente
mesmo na presença de estruturas de herança em losango, onde há vários
caminhos de herança que levam de volta a um ancestral comum.  Detalhes
adicionais sobre a ordem de resolução de métodos (MRO) C3 usado pelo
Python podem ser encontrados em *note A Ordem de Resolução de Métodos do
Python 2.3: 14f2.

Quando uma referência de atributo de classe (para uma classe ‘C’,
digamos) produziria um objeto método de classe, ele é transformado em um
objeto método de instância cujo atributo *note __self__: 140f. é ‘C’.
Quando produziria um objeto *note staticmethod: 416, ele é transformado
no objeto encapsulado pelo objeto método estático.  Veja a seção *note
Implementando descritores: c6a. para outra maneira em que os atributos
recuperados de uma classe podem diferir daqueles realmente contidos em
seu *note __dict__: 55b.

As atribuições de atributos de classe atualizam o dicionário da classe,
nunca o dicionário de uma classe base.

Um objeto classe pode ser chamado (veja acima) para produzir uma
instância de classe (veja abaixo).

* Menu:

* Atributos especiais::
* Métodos especiais::


File: python.info,  Node: Atributos especiais,  Next: Métodos especiais,  Up: Classes personalizadas

4.3.2.31 Atributos especiais
............................

Atributo                                               Significado
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
 -- Atributo: type.__name__                            O nome da classe.  Veja também:
                                                       *note atributos __name__: 109f.
                                                       
                                                       
 -- Atributo: type.__qualname__                        O *note nome qualificado: 1ab1. da classe.  Veja
                                                       também: *note atributos __qualname__: 109e.
                                                       
                                                       
 -- Atributo: type.__module__                          O nome do módulo no qual a classe foi definida.
                                                       
                                                       
 -- Atributo: type.__dict__                            Um *note proxy de mapeamento: 46d. fornecendo uma
                                                       visão somente leitura do espaço de nomes da classe.
                                                       Veja também: *note atributos __dict__: 55b.
                                                       
                                                       
 -- Atributo: type.__bases__                           Uma *note tuple: 370. contendo as bases da classe.
                                                       Na maioria dos casos, para uma classe definida como
                                                       ‘class X(A, B, C)’, ‘X.__bases__’ será exatamente
                                                       igual a ‘(A, B, C)’.
                                                       
                                                       
 -- Atributo: type.__base__                            A única classe base na cadeia de herança responsável
                                                       pelo layout de memória das instâncias.  Este
                                                       atributo corresponde a *note tp_base: 20b8. no nível
                                                       C.
                                                       
                                                       
 -- Atributo: type.__doc__                             A string de documentação da classe, ou ‘None’ se não
                                                       estiver definida.  Não herdado por subclasses.
                                                       
                                                       
 -- Atributo: type.__annotations__                     Um dicionário contendo
                                                       *note anotações de variável: d79. coletadas durante
                                                       a execução do corpo da classe.  Para melhores
                                                       práticas sobre como trabalhar com ‘__annotations__’,
                                                       por favor veja
                                                       *note Boas práticas para anotações: 7da.
                                                       
                                                            Cuidado: Acessar o atributo ‘__annotations__’
                                                            de um objeto classe diretamente pode produzir
                                                            resultados incorretos na presença de
                                                            metaclasses.  Além disso, o atributo pode não
                                                            existir para algumas classes.  Use
                                                            *note inspect.get_annotations(): 816. para
                                                            recuperar anotações de classe com segurança.
                                                       
                                                       
 -- Atributo: type.__type_params__                     Uma *note tuple: 370. contendo os
                                                       *note parâmetros de tipo: 2b3. de uma
                                                       *note classe genérica: 452.
                                                       
                                                       Adicionado na versão 3.12.
                                                       
                                                       
 -- Atributo: type.__static_attributes__               Uma *note tuple: 370. contendo nomes de atributos
                                                       dessa classe que são atribuídos por meio de ‘self.X’
                                                       de qualquer função em seu corpo.
                                                       
                                                       Adicionado na versão 3.13.
                                                       
                                                       
 -- Atributo: type.__firstlineno__                     O número da linha da primeira linha da definição de
                                                       classe, incluindo decoradores.  Definir o atributo
                                                       ‘__module__’ remove o item ‘__firstlineno__’ do
                                                       dicionário do tipo.
                                                       
                                                       Adicionado na versão 3.13.
                                                       
                                                       
 -- Atributo: type.__mro__                             A *note tuple: 370. de classes que são consideradas
                                                       ao procurar por classes bases durante resolução de
                                                       métodos.
                                                       


File: python.info,  Node: Métodos especiais,  Prev: Atributos especiais,  Up: Classes personalizadas

4.3.2.32 Métodos especiais
..........................

Além dos atributos especiais descritos acima, todas as classes Python
também têm os dois métodos a seguir disponíveis:

 -- Método: type.mro ()

     Este método pode ser substituído por uma metaclasse para
     personalizar a ordem de resolução de métodos para suas instâncias.
     Ele é chamado na instanciação da classe, e o seu resultado é
     armazenado em *note __mro__: 20bb.

 -- Método: type.__subclasses__ ()

     Cada classe mantém uma lista de referências fracas para suas
     subclasses imediatas.  Este método retorna uma lista de todas essas
     referências ainda vivas.  A lista está na ordem que são definidas.
     Exemplo:

          >>> class A: pass
          >>> class B(A): pass
          >>> A.__subclasses__()
          [<class 'B'>]


File: python.info,  Node: Instâncias de classe<2>,  Next: Objetos de E/S também conhecidos como objetos arquivo,  Prev: Classes personalizadas,  Up: A hierarquia de tipos padrão

4.3.2.33 Instâncias de classe
.............................

Uma instância de classe é criada chamando um objeto classe (veja acima).
Uma instância de classe tem um espaço de nomes implementado como um
dicionário que é o primeiro lugar no qual as referências de atributos
são pesquisadas.  Quando um atributo não é encontrado lá, e a classe da
instância possui um atributo com esse nome, a pesquisa continua com os
atributos da classe.  Se for encontrado um atributo de classe que seja
um objeto função definido pelo usuário, ele é transformado em um objeto
método de instância cujo atributo *note __self__: 140f. é a instância.
Métodos estáticos e métodos de classe também são transformados; veja
acima em “Classes”.  Veja a seção *note Implementando descritores: c6a.
para outra maneira em que os atributos de uma classe recuperados através
de suas instâncias podem diferir dos objetos realmente armazenados no
*note __dict__: 55b. da classe.  Se nenhum atributo de classe for
encontrado, e a classe do objeto tiver um método *note __getattr__():
4d3, este é chamado para satisfazer a pesquisa.

As atribuições e exclusões de atributos atualizam o dicionário da
instância, nunca o dicionário de uma classe.  Se a classe tem um método
*note __setattr__(): 20bf. ou *note __delattr__(): 20c0, ele é chamado
ao invés de atualizar o dicionário da instância diretamente.

As instâncias de classe podem fingir ser números, sequências ou
mapeamentos se tiverem métodos com certos nomes especiais.  Veja a seção
*note Nomes de métodos especiais: c89.

* Menu:

* Atributos especiais: Atributos especiais<2>.


File: python.info,  Node: Atributos especiais<2>,  Up: Instâncias de classe<2>

4.3.2.34 Atributos especiais
............................

 -- Atributo: object.__class__

     A classe à qual pertence uma instância de classe.

 -- Atributo: object.__dict__

     Um dicionário ou outro objeto de mapeamento usado para armazenar
     atributos (graváveis) de um objeto.  Nem todas as instâncias têm um
     atributo ‘__dict__’; veja a seção sobre *note __slots__: 20c2. para
     mais detalhes.


File: python.info,  Node: Objetos de E/S também conhecidos como objetos arquivo,  Next: Tipos internos,  Prev: Instâncias de classe<2>,  Up: A hierarquia de tipos padrão

4.3.2.35 Objetos de E/S (também conhecidos como objetos arquivo)
................................................................

O *note objeto arquivo: 1203. representa um arquivo aberto.  Vários
atalhos estão disponíveis para criar objetos arquivos: a função embutida
*note open(): 51c, e também *note os.popen(): a91, *note os.fdopen():
20c4. e o método *note makefile(): 11de. de objetos soquete (e talvez
por outras funções ou métodos fornecidos por módulos de extensão).

Os objetos ‘sys.stdin’, ‘sys.stdout’ e ‘sys.stderr’ são inicializados
para objetos arquivo que correspondem aos fluxos de entrada, saída e
erro padrão do interpretador; eles são todos abertos em modo texto e,
portanto, seguem a interface definida pela classe abstrata *note
io.TextIOBase: 695.


File: python.info,  Node: Tipos internos,  Prev: Objetos de E/S também conhecidos como objetos arquivo,  Up: A hierarquia de tipos padrão

4.3.2.36 Tipos internos
.......................

Alguns tipos usados internamente pelo interpretador são expostos ao
usuário.  Suas definições podem mudar com versões futuras do
interpretador, mas são mencionadas aqui para fins de integridade.

* Menu:

* Objetos código::
* Objetos quadro::
* Objetos traceback::
* Objetos slice::
* Objetos método estático::
* Objetos método de classe::


File: python.info,  Node: Objetos código,  Next: Objetos quadro,  Up: Tipos internos

4.3.2.37 Objetos código
.......................

Objetos código representam código Python executável 'compilados em
bytes' ou *note bytecode: 187.  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.

* Menu:

* Atributos especiais de somente leitura: Atributos especiais de somente leitura<2>.
* Métodos de objetos código::


File: python.info,  Node: Atributos especiais de somente leitura<2>,  Next: Métodos de objetos código,  Up: Objetos código

4.3.2.38 Atributos especiais de somente leitura
...............................................

 -- Atributo: codeobject.co_name                       O nome da função
                                                       
                                                       
 -- Atributo: codeobject.co_qualname                   O nome completo da função
                                                       
                                                       Adicionado na versão 3.11.
                                                       
                                                       
 -- Atributo: codeobject.co_argcount                   O número total de *note parâmetros: 208f.
                                                       posicionais (incluindo parâmetros
                                                       somente-posicionais e parâmetros com valores padrão)
                                                       que a função possui
                                                       
                                                       
 -- Atributo: codeobject.co_posonlyargcount            O número de *note parâmetros: 208f.
                                                       somente-posicionais (incluindo argumentos com
                                                       valores padrão) que a função possui
                                                       
                                                       
 -- Atributo: codeobject.co_kwonlyargcount             O número de *note parâmetros: 208f. somente-nomeados
                                                       (incluindo argumentos com valores padrão) que a
                                                       função possui
                                                       
                                                       
 -- Atributo: codeobject.co_nlocals                    O número de *note variáveis locais: 208a. usadas
                                                       pela função (incluindo parâmetros)
                                                       
                                                       
 -- Atributo: codeobject.co_varnames                   Uma *note tuple: 370. contendo os nomes das
                                                       variáveis locais na função (começando com os nomes
                                                       dos parâmetros)
                                                       
                                                       
 -- Atributo: codeobject.co_cellvars                   Uma *note tuple: 370. contendo os nomes de
                                                       *note variáveis locais: 208a. que são referenciadas
                                                       a partir de pelo menos um
                                                       *note escopo aninhado: 20d0. de dentro da função
                                                       
                                                       
 -- Atributo: codeobject.co_freevars                   Uma *note tuple: 370. contendo os nomes de
                                                       *note variáveis livres (de clausura): 20d1. que um
                                                       *note escopo aninhado: 20d0. referencia em um escopo
                                                       externo.  Veja também
                                                       *note function.__closure__: 1313.
                                                       
                                                       Observação: referências a nomes globais e embutidos
                                                       'não' estão incluídas.
                                                       
                                                       
 -- Atributo: codeobject.co_code                       Uma string representando a sequência de instruções
                                                       *note bytecode: 187. na função
                                                       
                                                       
 -- Atributo: codeobject.co_consts                     Um *note tuple: 370. contendo os literais usados
                                                       pelo *note bytecode: 187. na função
                                                       
                                                       
 -- Atributo: codeobject.co_names                      Um *note tuple: 370. contendo os nomes usados pelo
                                                       *note bytecode: 187. na função
                                                       
                                                       
 -- Atributo: codeobject.co_filename                   O nome do arquivo do qual o código foi compilado
                                                       
                                                       
 -- Atributo: codeobject.co_firstlineno                O número da linha da primeira linha da função
                                                       
                                                       
 -- Atributo: codeobject.co_lnotab                     Uma string que codifica o mapeamento de
                                                       *note bytecode: 187. compensa para números de linha.
                                                       Para obter detalhes, consulte o código-fonte do
                                                       interpretador.
                                                       
                                                       Descontinuado desde a versão 3.12: Este atributo de
                                                       objetos código está descontinuado e pode ser
                                                       removido no Python 3.15.
                                                       
                                                       
 -- Atributo: codeobject.co_stacksize                  O tamanho de pilha necessário do objeto código
                                                       
                                                       
 -- Atributo: codeobject.co_flags                      Um número *note inteiro: 257. codificando uma série
                                                       de sinalizadores para o interpretador.
                                                       

Os seguintes bits sinalizadores são definidos para *note co_flags:
20d6.: 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 *note Code Objects Bit Flags: 20d7. para detalhes na
semântica de cada sinalizadores que podem estar presentes.

Declarações de recursos futuros (por exemplo, ‘from __future__ import
division’) também usam bits em *note co_flags: 20d6. para indicar se um
objeto código foi compilado com um recurso específico habilitado.  Veja
*note compiler_flag: 20d8.

Outros bits em *note co_flags: 20d6. são reservados para uso interno.

Se um objeto código representa uma função, o primeiro item em *note
co_consts: 165a. é a string de documentação da função, ou ‘None’ se
indefinido.


File: python.info,  Node: Métodos de objetos código,  Prev: Atributos especiais de somente leitura<2>,  Up: Objetos código

4.3.2.39 Métodos de objetos código
..................................

 -- Método: codeobject.co_positions ()

     Retorna um iterável das posições no código-fonte de cada instrução
     *note bytecode: 187. no objeto código.

     O iterador retorna *note tuple: 370.s 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’ *note -X:
          176.

        - Carregando um arquivo pyc compilado com ‘no_debug_ranges’
          *note -X: 176.

        - 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 implementação.

     Quando isso ocorre, alguns ou todos elementos da tupla podem ser
     *note None: 675.

     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 compilados.  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’ *note -X: 176. ou a variável de ambiente
          *note PYTHONNODEBUGRANGES: 5b6.

 -- Método: codeobject.co_lines ()

     Retorna um iterador que produz informações sobre intervalos
     sucessivos de *note bytecode: 187.s.  Cada item gerado é uma *note
     tuple: 370. de ‘(start, end, lineno)’:

        * ‘start’ (um *note int: 257.) representa o deslocamento
          (inclusivo) do início do intervalo *note bytecode: 187.

        * ‘end’ (um *note int: 257.) representa o deslocamento
          (exclusivo) do fim do intervalo *note bytecode: 187.

        * ‘lineno’ é um *note int: 257. representando o número da linha
          do intervalo do *note bytecode: 187, 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 *note tuple:
          370.s, o ‘start’ do segundo será igual ao ‘end’ do primeiro.

        * Nenhum intervalo será inverso: ‘end >= start’ para todos os
          trios.

        * A última *note tuple: 370. gerada terá ‘end’ igual ao tamanho
          do *note bytecode: 187.

     Intervalos de largura zero, onde ‘start == end’, são permitidos.
     Intervalos de largura zero são usados para linhas que estão
     presentes no código-fonte, mas foram eliminadas pelo compilador de
     *note bytecode: 187.

     Adicionado na versão 3.10.

     Ver também
     ..........

     PEP 626(1) - Números de linha precisos para depuração e outras ferramentas.

          A PEP que introduziu o método ‘co_lines()’.

 -- Método: codeobject.replace (**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 *note
     copy.replace(): 151.

     Adicionado na versão 3.8.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0626/


File: python.info,  Node: Objetos quadro,  Next: Objetos traceback,  Prev: Objetos código,  Up: Tipos internos

4.3.2.40 Objetos quadro
.......................

Objetos quadro representam quadros de execução.  Eles podem ocorrer em
*note objetos traceback: b07. e também são passados para funções de
rastreamento registradas.

* Menu:

* Atributos especiais de somente leitura: Atributos especiais de somente leitura<3>.
* Atributos especiais graváveis: Atributos especiais graváveis<2>.
* Métodos de objetos quadro::


File: python.info,  Node: Atributos especiais de somente leitura<3>,  Next: Atributos especiais graváveis<2>,  Up: Objetos quadro

4.3.2.41 Atributos especiais de somente leitura
...............................................

 -- Atributo: frame.f_back                             Aponta para o quadro de pilha anterior (em direção
                                                       ao chamador), ou ‘None’ se este for o quadro de
                                                       pilha mais abaixo.
                                                       
                                                       
 -- Atributo: frame.f_code                             O *note objeto código: 1d2. sendo executado neste
                                                       quadro.  Acessar este atributo levanta um
                                                       *note evento de auditoria: 19fa.
                                                       ‘object.__getattr__’ com os argumentos ‘obj’ e
                                                       ‘"f_code"’.
                                                       
                                                       
 -- Atributo: frame.f_locals                           O mapeamento usado pelo quadro para procurar
                                                       *note variáveis locais: 208a.  Se o quadro se
                                                       referir a um *note escopo otimizado: 17e, isso pode
                                                       retornar um objeto proxy write-through.
                                                       
                                                       Alterado na versão 3.13: Retorna um proxy para
                                                       escopos otimizados.
                                                       
                                                       
 -- Atributo: frame.f_globals                          O dicionário usado pelo quadro para procurar
                                                       *note variáveis globais: 208a.
                                                       
                                                       
 -- Atributo: frame.f_builtins                         O dicionário usado pelo quadro para procurar
                                                       *note nomes embutidos (intrínsecos): 208a.
                                                       
                                                       
 -- Atributo: frame.f_lasti                            A “instrução precisa” do objeto quadro (este é um
                                                       índice na string *note bytecode: 187. do
                                                       *note objeto código: 1d2.)
                                                       


File: python.info,  Node: Atributos especiais graváveis<2>,  Next: Métodos de objetos quadro,  Prev: Atributos especiais de somente leitura<3>,  Up: Objetos quadro

4.3.2.42 Atributos especiais graváveis
......................................

 -- Atributo: frame.f_trace                            Se não for ‘None’, esta é uma função chamada para
                                                       vários eventos durante a execução do código (isso é
                                                       usado por depuradores).  Normalmente, um evento é
                                                       disparado para cada nova linha de origem (veja
                                                       *note f_trace_lines: bf6.).
                                                       
                                                       
 -- Atributo: frame.f_trace_lines                      Defina este atributo como *note False: b49. para
                                                       desabilitar o acionamento de um evento de
                                                       rastreamento para cada linha de origem.
                                                       
                                                       
 -- Atributo: frame.f_trace_opcodes                    Defina este atributo para *note True: c27. para
                                                       permitir que eventos por opcode sejam solicitados.
                                                       Observe que isso pode levar a um comportamento
                                                       indefinido do interpretador se as exceções
                                                       levantadas pela função de rastreamento escaparem
                                                       para a função que está sendo rastreada.
                                                       
                                                       
 -- Atributo: frame.f_lineno                           O número da linha atual do quadro – escrever para
                                                       isso de dentro de uma função de rastreamento faz
                                                       saltar para a linha dada (apenas para o quadro mais
                                                       abaixo).  Um depurador pode implementar um comando
                                                       Jump (também conhecido como Set Next Statement)
                                                       escrevendo para esse atributo.
                                                       


File: python.info,  Node: Métodos de objetos quadro,  Prev: Atributos especiais graváveis<2>,  Up: Objetos quadro

4.3.2.43 Métodos de objetos quadro
..................................

Objetos quadro têm suporte a um método:

 -- Método: frame.clear ()

     Este método limpa todas as referências a *note variáveis locais:
     208a. mantidas pelo quadro.  Além disso, se o quadro pertencer a um
     *note gerador: 109a, o gerador é finalizado.  Isso ajuda a quebrar
     os ciclos de referência que envolvem objetos quadro (por exemplo,
     ao capturar uma *note exceção: 19b1. e armazenar seu *note
     traceback: b07. para uso posterior).

     *note RuntimeError: 195. é levantada se o quadro estiver em
     execução ou suspenso.

     Adicionado na versão 3.4.

     Alterado na versão 3.13: Tentar limpar um quadro suspenso levanta
     *note RuntimeError: 195. (como sempre foi o caso para quadros em
     execução).


File: python.info,  Node: Objetos traceback,  Next: Objetos slice,  Prev: Objetos quadro,  Up: Tipos internos

4.3.2.44 Objetos traceback
..........................

Objetos traceback representam o stack trace (situação da pilha de
execução) de uma *note exceção: 1e12.  Um objeto traceback é criado
implicitamente quando ocorre uma exceção e também pode ser criado
explicitamente chamando *note types.TracebackType: b05.

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 *note A instrução try:
6e9.)  É acessível como o terceiro item da tupla retornada por *note
sys.exc_info(): 68a, e como o atributo *note __traceback__: 1309. da
exceção capturada.

Quando o programa não contém um manipulador adequado, o stack trace é
escrito (formatado de maneira adequada) no fluxo de erro padrão; se o
interpretador for interativo, ele também é disponibilizado ao usuário
como *note sys.last_traceback: 4c1.

Para tracebacks criados explicitamente, cabe ao criador do traceback
determinar como os atributos *note tb_next: b06. devem ser vinculados
para formar um stack trace completo.

Atributos especiais de somente leitura:

 -- Atributo: traceback.tb_frame                       Aponta para o *note quadro: 6e0. de execução do
                                                       nível atual.
                                                       
                                                       Acessar este atributo levanta um
                                                       *note evento de auditoria: 19fa.
                                                       ‘object.__getattr__’ com os argumentos ‘obj’ e
                                                       ‘"tb_frame"’.
                                                       
                                                       
 -- Atributo: traceback.tb_lineno                      Fornece o número da linha onde ocorreu a exceção
                                                       
                                                       
 -- Atributo: traceback.tb_lasti                       Indica a “instrução precisa”.
                                                       

O número da linha e a última instrução no traceback podem diferir do
número da linha do seu *note objeto quadro: 6e0. se a exceção ocorreu em
uma instrução *note try: 6e9. sem cláusula except correspondente ou com
uma cláusula *note finally: 9d2.

 -- Atributo: 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


File: python.info,  Node: Objetos slice,  Next: Objetos método estático,  Prev: Objetos traceback,  Up: Tipos internos

4.3.2.45 Objetos slice
......................

Objetos slice são usados para representar fatias para métodos *note
__getitem__(): 283.  Eles também são criados pela função embutida *note
slice(): 469.

Atributos especiais de somente leitura: *note start: 20e8. é o limite
inferior; *note stop: 20e9. é o limite superior; *note step: 20ea. é 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:

 -- Método: slice.indices (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; respectivamente, estes são os índices
     'start' e 'stop' e o 'step' ou comprimento de avanços da fatia.
     Índices ausentes ou fora dos limites são tratados de maneira
     consistente com fatias regulares.


File: python.info,  Node: Objetos método estático,  Next: Objetos método de classe,  Prev: Objetos slice,  Up: Tipos internos

4.3.2.46 Objetos método estático
................................

Objetos método estático fornecem uma forma de transformar objetos função
em objetos métodos descritos acima.  Um objeto método estático é um
invólucro em torno de qualquer outro objeto, comumente um objeto método
definido pelo usuário.  Quando um objeto método estático é recuperado de
uma classe ou de uma instância de classe, o objeto retornado é o objeto
encapsulado, do qual não está sujeito a nenhuma transformação adicional.
Objetos método estático também são chamáveis.  Objetos método estático
são criados pelo construtor embutido *note staticmethod(): 416.


File: python.info,  Node: Objetos método de classe,  Prev: Objetos método estático,  Up: Tipos internos

4.3.2.47 Objetos método de classe
.................................

Um objeto método de classe, como um objeto método estático, é um
invólucro em torno de outro objeto que altera a maneira como esse objeto
é recuperado de classes e instâncias de classe.  O comportamento dos
objetos método de classe após tal recuperação é descrito acima, sob
*note “métodos de instância”: 1e47.  Objetos método de classe são
criados pelo construtor embutido *note classmethod(): 166.


File: python.info,  Node: Nomes de métodos especiais,  Next: Corrotinas,  Prev: A hierarquia de tipos padrão,  Up: Modelo de dados

4.3.3 Nomes de métodos especiais
--------------------------------

Uma classe pode implementar certas operações que são chamadas por
sintaxe especial (como operações aritméticas ou indexação e fatiamento),
definindo métodos com nomes especiais.  Esta é a abordagem do Python
para 'sobrecarga de operador', permitindo que as classes definam seu
próprio comportamento em relação aos operadores da linguagem.  Por
exemplo, se uma classe define um método chamado *note __getitem__():
283, e ‘x’ é uma instância desta classe, então ‘x[i]’ é aproximadamente
equivalente a ‘type(x).__getitem__(x, i)’.  Exceto onde mencionado, as
tentativas de executar uma operação levantam uma exceção quando nenhum
método apropriado é definido (tipicamente *note AttributeError: 34b. ou
*note TypeError: 2c3.).

Definir um método especial para ‘None’ indica que a operação
correspondente não está disponível.  Por exemplo, se uma classe define
*note __iter__(): c8a. para ‘None’, a classe não é iterável, então
chamar *note iter(): 7d8. em suas instâncias irá levantar um *note
TypeError: 2c3. (sem recorrer a *note __getitem__(): 283.).  (1)

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

* Menu:

* Personalização básica::
* Personalizando o acesso aos atributos::
* Personalizando a criação de classe::
* Personalizando verificações de instância e subclasse::
* Emulando tipos genéricos::
* Emulando objetos chamáveis::
* Emulando tipos contêineres::
* Emulando tipos numéricos::
* Gerenciadores de contexto da instrução with::
* Customizando argumentos posicionais na classe correspondência de padrão::
* Emulando tipos buffer::
* Pesquisa de método especial::

   ---------- Footnotes ----------

   (1) Os métodos *note __hash__(): b0e, *note __iter__(): c8a, *note
__reversed__(): ca7. e *note __contains__(): 1400, *note
__class_getitem__(): 73b. e *note __fspath__(): c6d. têm um tratamento
especial para isso.  Outros ainda irão levantar um *note TypeError: 2c3,
mas podem fazer isso contando com o comportamento de que ‘None’ não é
chamável.


File: python.info,  Node: Personalização básica,  Next: Personalizando o acesso aos atributos,  Up: Nomes de métodos especiais

4.3.3.1 Personalização básica
.............................

 -- Método: object.__new__ (cls[, ...])

     Chamado para criar uma nova instância da classe 'cls'.  *note
     __new__(): 580. é um método estático (é um caso especial, então
     você não precisa declará-lo como tal) que recebe a classe da qual
     uma instância foi solicitada como seu primeiro argumento.  Os
     argumentos restantes são aqueles passados para a expressão do
     construtor do objeto (a chamada para a classe).  O valor de retorno
     de *note __new__(): 580. deve ser a nova instância do objeto
     (geralmente uma instância de 'cls').

     Implementações típicas criam uma nova instância da classe invocando
     o método *note __new__(): 580. da superclasse usando
     ‘super().__new__(cls[, ...])’ com os argumentos apropriados e, em
     seguida, modificando a instância recém-criada conforme necessário
     antes de retorná-la.

     Se *note __new__(): 580. é chamado durante a construção do objeto e
     retorna uma instância de 'cls', então o método *note __init__():
     6b0. da nova instância será chamado como ‘__init__(self[, ...])’,
     onde 'self' é a nova instância e os argumentos restantes são os
     mesmos que foram passados para o construtor do objeto.

     Se *note __new__(): 580. não retornar uma instância de 'cls', então
     o método *note __init__(): 6b0. da nova instância não será
     invocado.

     *note __new__(): 580. destina-se principalmente a permitir que
     subclasses de tipos imutáveis (como int, str ou tupla) personalizem
     a criação de instâncias.  Também é comumente substituído em
     metaclasses personalizadas para personalizar a criação de classes.

 -- Método: object.__init__ (self[, ...])

     Chamado após a instância ter sido criada (por *note __new__():
     580.), mas antes de ser retornada ao chamador.  Os argumentos são
     aqueles passados para a expressão do construtor da classe.  Se uma
     classe base tem um método *note __init__(): 6b0, o método *note
     __init__(): 6b0. da classe derivada, se houver, deve chamá-lo
     explicitamente para garantir a inicialização apropriada da parte da
     classe base da instância; por exemplo:
     ‘super().__init__([args...])’.

     Porque *note __new__(): 580. e *note __init__(): 6b0. trabalham
     juntos na construção de objetos (*note __new__(): 580. para criá-lo
     e *note __init__(): 6b0. para personalizá-lo), nenhum valor
     diferente de ‘None’ pode ser retornado por *note __init__(): 6b0.;
     fazer isso fará com que uma *note TypeError: 2c3. seja levantada em
     tempo de execução.

 -- Método: object.__del__ (self)

     Chamado quando a instância está prestes a ser destruída.  Também é
     chamada de finalizador ou (incorretamente) de destruidor.  Se uma
     classe base tem um método *note __del__(): 1033, o método *note
     __del__(): 1033. 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 *note
     __del__(): 1033. 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 *note __del__(): 1033. é chamado uma
     segunda vez quando um objeto ressuscitado está prestes a ser
     destruído; a implementação atual do *note CPython: 6f6. chama-o
     apenas uma vez.

     Não há garantia de que os métodos *note __del__(): 1033. sejam
     chamados para objetos que ainda existem quando o interpretador sai.
     *note weakref.finalize: a86. 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.

     É 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 *note coletor de lixo cíclico:
     1a69.  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
     ..........

     Documentação do módulo *note gc: 60.

          Aviso: Devido às circunstâncias precárias sob as quais os
          métodos *note __del__(): 1033. são invocados, as exceções que
          ocorrem durante sua execução são ignoradas e um aviso é
          impresso em ‘sys.stderr’ em seu lugar.  Em particular:

             * *note __del__(): 1033. pode ser chamado quando um código
               arbitrário está sendo executado, incluindo de qualquer
               thread arbitrária.  Se *note __del__(): 1033. 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 é interrompido para executar *note
               __del__(): 1033.

             * *note __del__(): 1033. 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 *note
               __del__(): 1033. for chamado.

 -- Método: object.__repr__ (self)

     Chamado pela função embutida *note repr(): 800. 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 *note __repr__(): 61c,
     mas não *note __str__(): 61d, então *note __repr__(): 61c. também é
     usado quando uma representação de string “informal” de instâncias
     daquela classe é necessária.

     Isso é normalmente usado para depuração, portanto, é importante que
     a representação seja rica em informações e inequívoca.  Uma
     implementação padrão é fornecida pela própria classe *note object:
     a96.

 -- Método: object.__str__ (self)

     Chamado por *note str(object): 44c, a implementação padrão de *note
     __format__(): 61e, e as funções embutidas *note print(): fa9, para
     calcular a representação da string “informal” ou agradável para
     exibição de um objeto.  O valor de retorno deve ser um objeto *note
     str: 1d7a.

     Este método difere de *note object.__repr__(): 61c. por não haver
     expectativa de que *note __str__(): 61d. 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 *note object:
     a96. chama *note object.__repr__(): 61c.

 -- Método: object.__bytes__ (self)

     Chamado por *note bytes: 1c33. para calcular uma representação de
     string de bytes de um objeto.  Isso deve retornar um objeto *note
     bytes: 1c2.  A classe *note object: a96. em si não fornece este
     método.

 -- Método: object.__format__ (self, format_spec)

     Chamado pela função embutida *note format(): 61f. e, por extensão,
     avaliação de *note literais de string formatadas: 9b1. e o método
     *note str.format(): 621, 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 *note __format__(): 61e, 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 *note Minilinguagem de especificação de formato: 1e8. para
     uma descrição da sintaxe de formatação padrão.

     O valor de retorno deve ser um objeto string.

     A implementação padrão pela classe *note object: a96. deve receber
     uma string 'format_spec' vazia.  Ela delega para *note __str__():
     61d.

     Alterado na versão 3.4: O método __format__ do próprio ‘object’
     levanta uma *note TypeError: 2c3. se passada qualquer string não
     vazia.

     Alterado na versão 3.7: ‘object.__format__(x, '')’ é agora
     equivalente a ‘str(x)’ em vez de ‘format(str(x), '')’.

 -- Método: object.__lt__ (self, other)
 -- Método: object.__le__ (self, other)
 -- Método: object.__eq__ (self, other)
 -- Método: object.__ne__ (self, other)
 -- Método: object.__gt__ (self, other)
 -- Método: 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 *note
     NotImplemented: 7d3. se não implementar a operação para um
     determinado par de argumentos.  Por convenção, ‘False’ e ‘True’ são
     retornados para uma comparaçã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 *note bool():
     468. no valor para determinar se o resultado for verdadeiro ou
     falso.

     Por padrão, ‘object’ implementa *note __eq__(): b0d. usando ‘is’,
     retornando *note NotImplemented: 7d3. no caso de uma comparação
     falsa: ‘True if x is y else NotImplemented’.  Para *note __ne__():
     1560, por padrão ele delega para *note __eq__(): b0d. e inverte o
     resultado a menos que seja ‘NotImplemented’.  Não há outras
     relações implícitas entre 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 *note
     functools.total_ordering(): f75.

     Por padrão, a classe *note object: a96. fornece implementações
     consistentes com *note Comparações de valor: 19a9.: igualdade
     compara de acordo com a identidade do objeto, e comparações de
     ordem levantam *note TypeError: 2c3.  Cada método padrão pode gerar
     esses resultados diretamente, mas também pode retornar *note
     NotImplemented: 7d3.

     Veja o parágrafo sobre *note __hash__(): b0e. para algumas notas
     importantes sobre a criação de objetos *note hasheáveis: 610. 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, *note __lt__(): 12e2. e
     *note __gt__(): 1350. são o reflexo um do outro, *note __le__():
     134f. e *note __ge__(): 1351. são o reflexo um do outro, e *note
     __eq__(): b0d. e *note __ne__(): 1560. 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
     *note NotImplemented: 7d3, os operadores ‘==’ e ‘!=’ retornarão
     para ‘is’ e ‘is not’, respectivamente.

 -- Método: object.__hash__ (self)

     Chamado pela função embutida *note hash(): 5eb. e para operações em
     membros de coleções com hash incluindo *note set: 5d9, *note
     frozenset: 5da. e *note dict: 256.  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((self.name, self.nick, self.color))

          Nota: *note hash(): 5eb. trunca o valor retornado do método
          *note __hash__(): b0e. personalizado de um objeto para o
          tamanho de um *note Py_ssize_t: a69.  Isso é normalmente 8
          bytes em compilações de 64 bits e 4 bytes em compilações de 32
          bits.  Se o *note __hash__(): b0e. 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 *note __eq__(): b0d, ela também
     não deve definir uma operação *note __hash__(): b0e.; se define
     *note __eq__(): b0d. mas não *note __hash__(): b0e, 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 *note
     __eq__(): b0d, ela não deve implementar *note __hash__(): b0e, uma
     vez que a implementação de coleções *note hasheáveis: 610. requer
     que o valor hash de uma chave seja imutável (se o valor hash do
     objeto mudar, estará no balde de hash errado).

     As classes definidas pelo usuário têm os métodos *note __eq__():
     b0d. e *note __hash__(): b0e. por padrão (herdados da classe *note
     object: a96.); com eles, todos os objetos se comparam desiguais
     (exceto com eles mesmos) e ‘x.__hash__()’ retorna um valor
     apropriado tal que ‘x == y’ implica que ‘x is y’ e ‘hash(x) ==
     hash(y)’.

     Uma classe que sobrescreve *note __eq__(): b0d. e não define *note
     __hash__(): b0e. terá seu *note __hash__(): b0e. implicitamente
     definido como ‘None’.  Quando o método *note __hash__(): b0e. de
     uma classe é ‘None’, as instâncias da classe levantam uma *note
     TypeError: 2c3. apropriada quando um programa tenta recuperar seu
     valor hash, e também será identificado corretamente como
     não-hasheável ao verificar ‘isinstance(obj,
     collections.abc.Hashable)’.

     Se uma classe que substitui *note __eq__(): b0d. precisa manter a
     implementação de *note __hash__(): b0e. de uma classe base, o
     interpretador deve ser informado disso explicitamente pela
     configuração ‘__hash__ = <ClasseBase>.__hash__’.

     Se uma classe que não substitui *note __eq__(): b0d. deseja
     suprimir o suporte a hash, deve incluir ‘__hash__ = None’ na
     definição de classe.  Uma classe que define seu próprio *note
     __hash__(): b0e. que levanta explicitamente uma *note TypeError:
     2c3. seria incorretamente identificada como hasheável por uma
     chamada ‘isinstance(obj, collections.abc.Hashable)’.

          Nota: Por padrão, os valores *note __hash__(): b0e. dos
          objetos str e bytes são “salgados” com um valor aleatório
          imprevisí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'('n'^2).  Consulte
          ‘http://ocert.org/advisories/ocert-2011-003.html’ 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 *note PYTHONHASHSEED: 10b6.

     Alterado na versão 3.3: Aleatorização de hash está habilitada por
     padrão.

 -- Método: object.__bool__ (self)

     Chamado para implementar o teste de valor verdade e a operação
     embutida ‘bool()’; deve retornar ‘False’ ou ‘True’.  Quando este
     método não é definido, *note __len__(): 15b4. é chamado, se estiver
     definido, e o objeto é considerado verdadeiro se seu resultado for
     diferente de zero.  Se uma classe não define ‘__len__()’ nem
     ‘__bool__()’ (o que é verdadeiro da classe *note object: a96. em
     si), todas as suas instâncias são consideradas verdadeiras.


File: python.info,  Node: Personalizando o acesso aos atributos,  Next: Personalizando a criação de classe,  Prev: Personalização básica,  Up: Nomes de métodos especiais

4.3.3.2 Personalizando o acesso aos atributos
.............................................

Os seguintes métodos podem ser definidos para personalizar o significado
do acesso aos atributos (uso, atribuição ou exclusão de ‘x.name’) para
instâncias de classe.

 -- Método: object.__getattr__ (self, name)

     Chamado quando o acesso padrão ao atributo falha com um *note
     AttributeError: 34b. (ou *note __getattribute__(): beb. levanta uma
     *note AttributeError: 34b. porque 'name' não é um atributo de
     instância ou um atributo na árvore de classes para ‘self’; ou *note
     __get__(): 1530. de uma propriedade 'name' levanta *note
     AttributeError: 34b.).  Este método deve retornar o valor do
     atributo (calculado) ou levantar uma exceção *note AttributeError:
     34b.  A classe *note object: a96. em si não fornece este método.

     Observe que se o atributo for encontrado através do mecanismo
     normal, *note __getattr__(): 4d3. não é chamado.  (Esta é uma
     assimetria intencional entre *note __getattr__(): 4d3. e *note
     __setattr__(): 20bf.)  Isso é feito tanto por razões de eficiência
     quanto porque *note __getattr__(): 4d3. não teria como acessar
     outros atributos da instância.  Observe que pelo menos para
     variáveis de instâncias, você pode obter controle total não
     inserindo nenhum valor no dicionário de atributos de instância
     (mas, em vez disso, inserindo-os em outro objeto).  Veja o método
     *note __getattribute__(): beb. abaixo para uma maneira de realmente
     obter controle total sobre o acesso ao atributo.

 -- Método: object.__getattribute__ (self, name)

     Chamado incondicionalmente para implementar acessos a atributo para
     instâncias da classe.  Se a classe também define *note
     __getattr__(): 4d3, o último não será chamado a menos que *note
     __getattribute__(): beb. o chame explicitamente ou levante um *note
     AttributeError: 34b.  Este método deve retornar o valor do atributo
     (calculado) ou levantar uma exceção *note AttributeError: 34b.
     Para evitar recursão infinita neste método, sua implementação deve
     sempre chamar o método da classe base com o mesmo nome para acessar
     quaisquer atributos de que necessita, por exemplo,
     ‘object.__getattribute__(self, name)’.

          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 *note built-in functions: 2091.
          Consulte *note Pesquisa de método especial: 20f3.

     Para acessos a certos atributos sensíveis, levanta um *note evento
     de auditoria: 19fa. ‘object.__getattr__’ com os argumentos ‘obj’ e
     ‘name’.

 -- Método: 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 *note __setattr__(): 20bf. 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 *note
     evento de auditoria: 19fa. ‘object.__setattr__’ com os argumentos
     ‘obj’, ‘name’ e ‘value’.

 -- Método: object.__delattr__ (self, name)

     Como *note __setattr__(): 20bf, mas para exclusão de atributo em
     vez de atribuição.  Este método só deve ser implementado se ‘del
     obj.name’ for significativo para o objeto.

     Para exclusões a certos atributos sensíveis, levanta um *note
     evento de auditoria: 19fa. ‘object.__delattr__’ com os argumentos
     ‘obj’ e ‘name’.

 -- Método: object.__dir__ (self)

     Chamado quando *note dir(): 632. é chamado com o objeto como
     argumento.  Um iterável deve ser retornada.  *note dir(): 632.
     converte o iterável retornado em uma lista e o ordena.

* Menu:

* Personalizando acesso a atributos de módulos::
* Implementando descritores::
* Invocando descritores::
* __slots__: __slots__<2>.


File: python.info,  Node: Personalizando acesso a atributos de módulos,  Next: Implementando descritores,  Up: Personalizando o acesso aos atributos

4.3.3.3 Personalizando acesso a atributos de módulos
....................................................

 -- Método: module.__getattr__ ()
 -- Método: module.__dir__ ()

Os nomes especiais ‘__getattr__’ e ‘__dir__’ também podem ser usados
para personalizar o acesso aos atributos dos módulos.  A função
‘__getattr__’ no nível do módulo deve aceitar um argumento que é o nome
de um atributo e retornar o valor calculado ou levantar uma exceção
*note AttributeError: 34b.  Se um atributo não for encontrado em um
objeto de módulo por meio da pesquisa normal, por exemplo *note
object.__getattribute__(): beb, então ‘__getattr__’ é pesquisado no
módulo ‘__dict__’ antes de levantar *note AttributeError: 34b.  Se
encontrado, ele é chamado com o nome do atributo e o resultado é
retornado.

A função ‘__dir__’ não deve aceitar nenhum argumento e retorna um
iterável de strings que representa os nomes acessíveis no módulo.  Se
presente, esta função substitui a pesquisa padrão *note dir(): 632. em
um módulo.

 -- Atributo: module.__class__

Para uma personalização mais refinada do comportamento do módulo
(definição de atributos, propriedades etc.), pode-se definir o atributo
‘__class__’ de um objeto de módulo para uma subclasse de *note
types.ModuleType: e3f.  Por exemplo:

     import sys
     from types import ModuleType

     class VerboseModule(ModuleType):
         def __repr__(self):
             return f'Verbose {self.__name__}'

         def __setattr__(self, attr, value):
             print(f'Setting {attr}...')
             super().__setattr__(attr, value)

     sys.modules[__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
..........

PEP 562(1) - __getattr__ e __dir__ de módulo

     Descreve as funções ‘__getattr__’ e ‘__dir__’ nos módulos.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0562/


File: python.info,  Node: Implementando descritores,  Next: Invocando descritores,  Prev: Personalizando acesso a atributos de módulos,  Up: Personalizando o acesso aos atributos

4.3.3.4 Implementando descritores
.................................

Os métodos a seguir se aplicam apenas quando uma instância da classe que
contém o método (uma classe chamada 'descritora') aparece em uma classe
proprietária 'owner' (o descritor deve estar no dicionário de classe do
proprietário ou no dicionário de classe para um dos seus pais).  Nos
exemplos abaixo, “o atributo” refere-se ao atributo cujo nome é a chave
da propriedade no *note __dict__: 55b. da classe proprietária.  A classe
*note object: a96. em si não implementa quaisquer desses protocolos.

 -- Método: 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 *note AttributeError: 34b.

     PEP 252(1) especifica que *note __get__(): 1530. é 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 terceiros tenham descritores que requerem ambos os
     argumentos.  A implementação de *note __getattribute__(): beb. do
     próprio Python sempre passa em ambos os argumentos sejam eles
     requeridos ou não.

 -- Método: 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 *note __set__(): 20f7. ou *note __delete__():
     16f5. altera o tipo de descritor para um “descritor de dados”.
     Consulte *note Invocando descritores: 20f8. para mais detalhes.

 -- Método: 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:

 -- Atributo: object.__objclass__

     O atributo ‘__objclass__’ é interpretado pelo módulo *note inspect:
     7e. 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).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0252/


File: python.info,  Node: Invocando descritores,  Next: __slots__<2>,  Prev: Implementando descritores,  Up: Personalizando o acesso aos atributos

4.3.3.5 Invocando descritores
.............................

Em geral, um descritor é um atributo de objeto com “comportamento de
ligação”, cujo acesso ao atributo foi substituído por métodos no
protocolo do descritor: *note __get__(): 1530, *note __set__(): 20f7. e
*note __delete__(): 16f5.  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 objeto.  Por exemplo, ‘a.x’ tem
uma cadeia de pesquisa começando com ‘a.__dict__['x']’, depois
‘type(a).__dict__['x']’, e continuando 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 descritor: ‘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 *note __get__(): 1530, *note __set__():
20f7. e *note __delete__(): 16f5.  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 *note @staticmethod:
416. e *note @classmethod: 166.) 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 *note property(): 194. é implementada como um descritor de
dados.  Da mesma forma, as instâncias não podem substituir o
comportamento de uma propriedade.


File: python.info,  Node: __slots__<2>,  Prev: Invocando descritores,  Up: Personalizando o acesso aos atributos

4.3.3.6 __slots__
.................

'__slots__' permite-nos declarar explicitamente membros de dados (como
propriedades) e negar a criação de *note __dict__: 55b. e '__weakref__'
(a menos que explicitamente declarado em '__slots__' ou disponível em
uma classe base.)

O espaço economizado com o uso de *note __dict__: 55b. pode ser
significativo.  A velocidade de pesquisa de atributos também pode ser
significativamente melhorada.

 -- Dado: 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 *note __dict__: 55b. e
     '__weakref__' para cada instância.
Observações ao uso de '__slots__':

   * Ao herdar de uma classe sem '__slots__', os atributos *note
     __dict__: 55b. e '__weakref__' das instâncias sempre estarão
     acessíveis.

   * Sem uma variável *note __dict__: 55b, 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 *note AttributeError: 34b.  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 *note referências fracas: 114.
     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 *note
     descritores: c6a. para cada nome de variável.  Como resultado, 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.

   * A ação de uma declaração '__slots__' se limita à classe em que é
     definida.  '__slots__' declarados em uma classe base estão
     disponíveis nas subclasses.  No entanto, instâncias de uma
     subclasse filha vai receber um *note __dict__: 55b. e '__weakref__'
     a menos que a subclasse também defina '__slots__' (que deve conter
     apenas nomes de quaisquer slots 'adicionais').

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

   * *note TypeError: 2c3. será levantada se '__slots__' não vazios
     forem definidos para uma classe derivada de um tipo embutido *note
     "variable-length": 20fd. como *note int: 257, *note bytes: 1c2. e
     *note tuple: 370.

   * Qualquer *note iterável: 1268. não string pode ser atribuído a
     '__slots__'.

   * Se um *note dicionário: 256. 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 docstrings por
     atributo que serão reconhecidos por *note inspect.getdoc(): a02. e
     exibidos na saída de *note help(): 8dd.

   * Atribuição de *note __class__: 14f5. funciona apenas se ambas as
     classes têm o mesmo '__slots__'.

   * A *note herança múltipla: 1e41. com várias classes bases com slots
     pode ser usada, mas apenas uma classe base tem permissão para ter
     atributos criados por slots (as outras classes bases devem ter
     layouts de slots vazios) – violações levantam *note TypeError: 2c3.

   * Se um *note iterador: 1ac. for usado para '__slots__', um *note
     descritor: 1658. é criado para cada um dos valores do iterador.  No
     entanto, o atributo '__slots__' será um iterador vazio.


File: python.info,  Node: Personalizando a criação de classe,  Next: Personalizando verificações de instância e subclasse,  Prev: Personalizando o acesso aos atributos,  Up: Nomes de métodos especiais

4.3.3.7 Personalizando a criação de classe
..........................................

Sempre que uma classe herda de outra classe, *note __init_subclass__():
631. é chamado na classe base.  Dessa forma, é possível escrever classes
que alteram o comportamento das subclasses.  Isso está intimamente
relacionado aos decoradores de classe, mas onde decoradores de classe
afetam apenas a classe específica à qual são aplicados,
‘__init_subclass__’ aplica-se apenas a futuras subclasses da classe que
define o método.

 -- Método: 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.

     Argumentos nomeados dados a uma nova classe são passados para
     ‘__init_subclass__’ da classe base.  Para compatibilidade com
     outras classes usando ‘__init_subclass__’, deve-se retirar os
     argumentos nomeados necessários e passar os outros para a classe
     base, como em:

          class Philosopher:
              def __init_subclass__(cls, /, default_name, **kwargs):
                  super().__init_subclass__(**kwargs)
                  cls.default_name = default_name

          class AustralianPhilosopher(Philosopher, default_name="Bruce"):
              pass

     A implementação padrão de ‘object.__init_subclass__’ não faz nada,
     mas levanta um erro se for chamada 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)’.

     Adicionado na versão 3.6.

Quando uma classe é criada, ‘type.__new__()’ verifica as variáveis de
classe e faz chamadas a funções de retorno (callback) para aqueles com
um gancho *note __set_name__(): c69.

 -- Método: object.__set_name__ (self, owner, name)

     Chamado automaticamente no momento em que a classe proprietária
     'owner' é criada.  O objeto foi atribuído a 'name' nessa classe:

          class A:
              x = C()  # Automaticamente chama: x.__set_name__(A, 'x')

     Se a variável de classe for atribuída após a criação da classe,
     *note __set_name__(): c69. não será chamado automaticamente.  Se
     necessário, *note __set_name__(): c69. pode ser chamado
     diretamente:

          class A:
             pass

          c = C()
          A.x = c                  # O gancho não é chamado
          c.__set_name__(A, 'x')   # Invoca manualmente o gancho

     Consulte *note Criando o objeto classe: c65. para mais detalhes.

     Adicionado na versão 3.6.

* Menu:

* Metaclasses::
* Resolvendo entradas de MRO::
* Determinando a metaclasse apropriada::
* Preparando o espaço de nomes da classe::
* Executando o corpo da classe::
* Criando o objeto classe::
* Usos para metaclasses::


File: python.info,  Node: Metaclasses,  Next: Resolvendo entradas de MRO,  Up: Personalizando a criação de classe

4.3.3.8 Metaclasses
...................

Por padrão, as classes são construídas usando *note type(): d6b.  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.


File: python.info,  Node: Resolvendo entradas de MRO,  Next: Determinando a metaclasse apropriada,  Prev: Metaclasses,  Up: Personalizando a criação de classe

4.3.3.9 Resolvendo entradas de MRO
..................................

 -- Método: object.__mro_entries__ (self, bases)

     Se uma classe base que aparece em uma definição de classe não é uma
     instância de *note type: d6b, então um método ‘__mro_entries__()’ é
     procurado na base.  Se um método ‘__mro_entries__()’ é encontrado,
     a base é substituída pelo resultado de uma chamada para
     ‘__mro_entries__()’ ao criar a classe.  O método é chamado com a
     tupla de bases original passada como parâmetro 'bases', e deve
     retornar uma tupla de classes que serão usadas no lugar da base.  A
     tupla retornada pode estar vazia: nesses casos, a base original é
     ignorada.

Ver também
..........

*note types.resolve_bases(): bb4.

     Dinamicamente resolve bases que não são instâncias de *note type:
     d6b.

*note types.get_original_bases(): 4ce.

     Recupera as “bases originais” de uma classe antes das modificações
     feitas por *note __mro_entries__(): afc.

PEP 560(1)

     Suporte básico para módulo typing e tipos genéricos.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0560/


File: python.info,  Node: Determinando a metaclasse apropriada,  Next: Preparando o espaço de nomes da classe,  Prev: Resolvendo entradas de MRO,  Up: Personalizando a criação de classe

4.3.3.10 Determinando a metaclasse apropriada
.............................................

A metaclasse apropriada para uma definição de classe é determinada da
seguinte forma:

   * se nenhuma classe base e nenhuma metaclasse explícita forem
     fornecidas, então *note type(): d6b. é usada;

   * se uma metaclasse explícita é fornecida e 'não' é uma instância de
     *note type(): d6b, então ela é usada diretamente como a metaclasse;

   * se uma instância de *note type(): d6b. é fornecida como a
     metaclasse explícita, ou classes bases são definidas, então a
     metaclasse mais derivada é usada.

A metaclasse mais derivada é selecionada a partir da metaclasse
explicitamente especificada (se houver) e das metaclasses (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’.


File: python.info,  Node: Preparando o espaço de nomes da classe,  Next: Executando o corpo da classe,  Prev: Determinando a metaclasse apropriada,  Up: Personalizando a criação de classe

4.3.3.11 Preparando o espaço de nomes da classe
...............................................

Uma vez identificada a metaclasse apropriada, o espaço de nomes da
classe é preparado.  Se a metaclasse tiver um atributo ‘__prepare__’,
ela será chamada como ‘namespace = metaclass.__prepare__(name, bases,
**kwds)’ (onde os argumentos nomeados adicionais, se houver, vêm da
definição de classe).  O método ‘__prepare__’ deve ser implementado como
um *note classmethod: 166.  O espaço de nomes retornado por
‘__prepare__’ é passado para ‘__new__’, mas quando o objeto classe final
é criado, o espaço de nomes é copiado para um novo ‘dict’.

Se a metaclasse não tiver o atributo ‘__prepare__’, então o espaço de
nomes da classe é inicializado como um mapeamento ordenado vazio.

Ver também
..........

PEP 3115(1) - Metaclasses no Python 3000

     Introduzido o gancho de espaço de nomes ‘__prepare__’

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3115/


File: python.info,  Node: Executando o corpo da classe,  Next: Criando o objeto classe,  Prev: Preparando o espaço de nomes da classe,  Up: Personalizando a criação de classe

4.3.3.12 Executando o corpo da classe
.....................................

O corpo da classe é executado (aproximadamente) como ‘exec(body,
globals(), namespace)’.  A principal diferença de uma chamada normal
para *note exec(): 17f. é que o escopo léxico permite que o corpo da
classe (incluindo quaisquer métodos) faça referência a nomes dos escopos
atual e externo quando a definição de classe ocorre dentro de uma
função.

No entanto, mesmo quando a definição de classe ocorre dentro da função,
os métodos definidos dentro da classe ainda não podem ver os nomes
definidos no escopo da classe.  Variáveis de classe devem ser acessadas
através do primeiro parâmetro de instância ou métodos de classe, ou
através da referência implícita com escopo léxico ‘__class__’ descrita
na próxima seção.


File: python.info,  Node: Criando o objeto classe,  Next: Usos para metaclasses,  Prev: Executando o corpo da classe,  Up: Personalizando a criação de classe

4.3.3.13 Criando o objeto classe
................................

Uma vez que o espaço de nomes da classe tenha sido preenchido executando
o corpo da classe, o objeto classe é criado chamando ‘metaclass(name,
bases, namespace, **kwds)’ (os argumentos adicionais passados aqui são
os mesmos passados para ‘__prepare__’).

Este objeto classe é aquele que será referenciado pela chamada a *note
super(): 4db. sem argumentos.  ‘__class__’ é uma referência de clausura
implícita criada pelo compilador se algum método no corpo da classe se
referir a ‘__class__’ ou ‘super’.  Isso permite que a forma de argumento
zero de *note super(): 4db. identifique corretamente a classe sendo
definida com base no escopo léxico, enquanto a classe ou instância que
foi usada para fazer a chamada atual é identificada com base no primeiro
argumento passado para o método.

No CPython 3.6 e posterior, a célula ‘__class__’ é passada para a
metaclasse como uma entrada de ‘__classcell__’ no espaço de nomes da
classe.  Se estiver presente, deve ser propagado até a chamada a
‘type.__new__’ para que a classe seja inicializada corretamente.  Não
fazer isso resultará em um *note RuntimeError: 195. no Python 3.8.

Quando usada a metaclasse padrão *note type: d6b, ou qualquer metaclasse
que chame ‘type.__new__’, as seguintes etapas de personalização
adicionais são executadas depois da criação do objeto classe:

  1. O método ‘type.__new__’ coleta todos os atributos no espaço de
     nomes da classe que definem um método *note __set_name__(): c69.;

  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 *note __init_subclass__(): 631. é chamado na classe base
     imediata da nova classe em sua ordem de resoluçã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.

Quando uma nova classe é criada por ‘type.__new__’, o objeto fornecido
como o parâmetro do espaço de nomes é copiado para um novo mapeamento
ordenado e o objeto original é descartado.  A nova cópia é envolta em um
proxy de somente leitura, que se torna o atributo *note __dict__: c78.
do objeto classe.

Ver também
..........

PEP 3135(1) - Novo super

     Descreve a referência de clausura implícita de ‘__class__’

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3135/


File: python.info,  Node: Usos para metaclasses,  Prev: Criando o objeto classe,  Up: Personalizando a criação de classe

4.3.3.14 Usos para metaclasses
..............................

Os usos potenciais para metaclasses são ilimitados.  Algumas ideias que
foram exploradas incluem enumeradores, criação de log, verificação de
interface, delegação automática, criação automática de propriedade,
proxies, estruturas e travamento/sincronização automático/a de recursos.


File: python.info,  Node: Personalizando verificações de instância e subclasse,  Next: Emulando tipos genéricos,  Prev: Personalizando a criação de classe,  Up: Nomes de métodos especiais

4.3.3.15 Personalizando verificações de instância e subclasse
.............................................................

Os seguintes métodos são usados para substituir o comportamento padrão
das funções embutidas *note isinstance(): 442. e *note issubclass():
7c2.

Em particular, a metaclasse *note abc.ABCMeta: f4a. 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.

 -- Método: 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)’.

 -- Método: 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
..........

PEP 3119(1) - Introduzindo classes base abstratas

     Inclui a especificação para personalizar o comportamento de *note
     isinstance(): 442. e *note issubclass(): 7c2. através de *note
     __instancecheck__(): 2108. e *note __subclasscheck__(): 2109, com
     motivação para esta funcionalidade no contexto da adição de classes
     base abstratas (veja o módulo *note abc: 4.) para a linguagem.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3119/


File: python.info,  Node: Emulando tipos genéricos,  Next: Emulando objetos chamáveis,  Prev: Personalizando verificações de instância e subclasse,  Up: Nomes de métodos especiais

4.3.3.16 Emulando tipos genéricos
.................................

Quando estiver usando *note anotações de tipo: 458, é frequentemente
útil 'parametrizar' um *note tipo genérico: 439. usando a notação de
colchetes do Python.  Por exemplo, a anotação ‘list[int]’ pode ser usada
para indicar uma *note list: 611. em que todos os seus elementos são do
tipo *note int: 257.

Ver também
..........

PEP 484(1) - Dicas de tipo

     Apresenta a estrutura do Python para anotações de tipo

*note Tipos Generic Alias: 6b2.

     Documentação de objetos que representam classes genéricas
     parametrizadas

*note Genéricos: 210b, *note genéricos definidos pelo usuário: 4cf. e *note typing.Generic: 15d7.

     Documentação sobre como implementar classes genéricas que podem ser
     parametrizadas em tempo de execução e compreendidas por
     verificadores de tipo estático.

Uma classe pode 'geralmente' ser parametrizada somente se ela define o
método de classe especial ‘__class_getitem__()’.

 -- Método: classmethod object.__class_getitem__ (cls, key)

     Retorna um objeto que representa a especialização de uma classe
     genérica por argumentos de tipo encontrados em 'key'.

     Quando definido em uma classe, ‘__class_getitem__()’ é
     automaticamente um método de classe.  Assim, não é necessário que
     seja decorado com *note @classmethod: 166. quando de sua definição.

* Menu:

* O propósito de __class_getitem__::
* __class_getitem__ versus __getitem__::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/


File: python.info,  Node: O propósito de __class_getitem__,  Next: __class_getitem__ versus __getitem__,  Up: Emulando tipos genéricos

4.3.3.17 O propósito de '__class_getitem__'
...........................................

O propósito de *note __class_getitem__(): 73b. é permitir a
parametrização em tempo de execução de classes genéricas da biblioteca
padrão, a fim de aplicar mais facilmente *note dicas de tipo: 210d. a
essas classes.

Para implementar classes genéricas personalizadas que podem ser
parametrizadas em tempo de execução e compreendidas por verificadores de
tipo estáticos, os usuários devem herdar de uma classe da biblioteca
padrão que já implementa *note __class_getitem__(): 73b, ou herdar de
*note typing.Generic: 15d7, que possui sua própria implementação de
‘__class_getitem__()’.

Implementações personalizadas de *note __class_getitem__(): 73b. 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.


File: python.info,  Node: __class_getitem__ versus __getitem__,  Prev: O propósito de __class_getitem__,  Up: Emulando tipos genéricos

4.3.3.18 '__class_getitem__' versus '__getitem__'
.................................................

Normalmente, a *note subscription: 2110. de um objeto usando colchetes
chamará o método de instância *note __getitem__(): 283. definido na
classe do objeto.  No entanto, se o objeto sendo subscrito for ele mesmo
uma classe, o método de classe *note __class_getitem__(): 73b. pode ser
chamado em seu lugar.  ‘__class_getitem__()’ deve retornar um objeto
*note GenericAlias: 6b2. se estiver devidamente definido.

Apresentado com a *note expressão: 2111. ‘obj[x]’, o interpretador de
Python segue algo parecido com o seguinte processo para decidir se *note
__getitem__(): 283. ou *note __class_getitem__(): 73b. deve ser chamado:

     from inspect import isclass

     def subscribe(obj, x):
         """Return the result of the expression 'obj[x]'"""

         class_of_obj = type(obj)

         # Se a classe de  obj define __getitem__,
         # chama class_of_obj.__getitem__(obj, x)
         if hasattr(class_of_obj, '__getitem__'):
             return class_of_obj.__getitem__(obj, x)

         # Do contrário, se obj for uma classe e define __class_getitem__,
         # chama obj.__class_getitem__(x)
         elif isclass(obj) and hasattr(obj, '__class_getitem__'):
             return obj.__class_getitem__(x)

         # Do contrário, levanta uma exceção
         else:
             raise TypeError(
                 f"'{class_of_obj.__name__}' object is not subscriptable"
             )

Em Python, todas as classes são elas mesmas instâncias de outras
classes.  A classe de uma classe é conhecida como *note metaclasse:
2112. dessa classe, e a maioria das classes tem a classe *note type:
d6b. como sua metaclasse.  *note type: d6b. não define *note
__getitem__(): 283, o que significa que expressões como ‘list[int]’,
‘dict[str, float]’ e ‘tuple[str, bytes]’ resultam em chamadas para *note
__class_getitem__(): 73b.:

     >>> # lista tem a classe "type" como sua metaclasse, como a maioria das classes:
     >>> type(list)
     <class 'type'>
     >>> type(dict) == type(list) == type(tuple) == type(str) == type(bytes)
     True
     >>> # "list[int]" chama "list.__class_getitem__(int)"
     >>> list[int]
     list[int]
     >>> # list.__class_getitem__ retorna um objeto GenericAlias:
     >>> type(list[int])
     <class 'types.GenericAlias'>

No entanto, se uma classe tiver uma metaclasse personalizada que define
*note __getitem__(): 283, subscrever a classe pode resultar em
comportamento diferente.  Um exemplo disso pode ser encontrado no módulo
*note enum: 56.:

     >>> from enum import Enum
     >>> class Menu(Enum):
     ...     """A breakfast menu"""
     ...     SPAM = 'spam'
     ...     BACON = 'bacon'
     ...
     >>> # Classes Enum têm uma metaclasses personalizada:
     >>> type(Menu)
     <class 'enum.EnumMeta'>
     >>> # EnumMeta define __getitem__,
     >>> # de forma que __class_getitem__ não é chamado,
     >>> # e o resultado não é um objeto GenericAlias:
     >>> Menu['SPAM']
     <Menu.SPAM: 'spam'>
     >>> type(Menu['SPAM'])
     <enum 'Menu'>

Ver também
..........

PEP 560(1) - Suporte básico para módulo typing e tipos genéricos

     Introduz *note __class_getitem__(): 73b, e define quando uma *note
     subscrição: 2110. resulta na chamada de ‘__class_getitem__()’ em
     vez de *note __getitem__(): 283.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0560/


File: python.info,  Node: Emulando objetos chamáveis,  Next: Emulando tipos contêineres,  Prev: Emulando tipos genéricos,  Up: Nomes de métodos especiais

4.3.3.19 Emulando objetos chamáveis
...................................

 -- Método: object.__call__ (self[, args...])

     Chamado quando a instância é “chamada” como uma função; se este
     método for definido, ‘x(arg1, arg2, ...)’ basicamente traduz para
     ‘type(x).__call__(x, arg1, ...)’.  A classe *note object: a96. em
     si não fornece este método.


File: python.info,  Node: Emulando tipos contêineres,  Next: Emulando tipos numéricos,  Prev: Emulando objetos chamáveis,  Up: Nomes de métodos especiais

4.3.3.20 Emulando tipos contêineres
...................................

Os seguintes métodos podem ser definidos para implementar objetos
contêineres.  Nenhum deles é fornecido pela própria classe *note object:
a96.  Contêineres geralmente são *note sequências: 4f1. (como *note
listas: 611. ou *note tuplas: 370.) ou *note mapeamentos: 11fb. (como
*note dicionários: 2117.), mas também podem representar outros
contêineres.  O primeiro conjunto de métodos é usado para emular uma
sequência ou um mapeamento; a diferença é que, para uma sequência, as
chaves permitidas devem ser os inteiros 'k' para os quais ‘0 <= k < N’,
onde 'N' é o comprimento da sequência, ou objetos *note fatiamentos:
469, que definem um intervalo de itens.  Também é recomendado que os
mapeamentos forneçam os métodos ‘keys()’, ‘values()’, ‘items()’,
‘get()’, ‘clear()’, ‘setdefault()’, ‘pop()’, ‘popitem()’, ‘copy()’ e
‘update()’ se comportando de forma semelhante aos dos objetos *note
dicionário: 256. padrão do Python.  O módulo *note collections.abc: 1e.
fornece uma *note classe base abstrata: 11f5. *note MutableMapping:
10eb. para ajudar a criar esses métodos a partir de um conjunto base de
*note __getitem__(): 283, *note __setitem__(): 130e, *note
__delitem__(): 130f. e ‘keys()’.

Sequências mutáveis devem fornecer métodos *note append(): 2118, *note
clear(): 2119, *note count(): 211a, *note extend(): 211b, *note index():
211c, *note insert(): 211d, *note pop(): 211e, *note remove(): 211f. e
*note reverse(): 2120, como objetos *note list: 611. padrão do Python.
Por fim, os tipos de sequência devem implementar adição (ou seja,
concatenação) e multiplicação (ou seja, repetição) definindo os métodos
*note __add__(): 2121, *note __radd__(): 2122, *note __iadd__(): 2123,
*note __mul__(): 2124, *note __rmul__(): 2125. e *note __imul__(): 2126.
descritos abaixo; eles não devem definir outros operadores numéricos.

Recomenda-se que tanto mapeamentos quanto sequências implementem o
método *note __contains__(): 1400. para permitir o uso eficiente do
operador ‘in’; para mapeamentos, ‘in’ deve pesquisar as chaves do
mapeamento; para sequências, deve pesquisar os valores.  Recomenda-se
ainda que tanto mapeamentos quanto sequências implementem o método *note
__iter__(): c8a. para permitir uma iteração eficiente pelo contêiner;
para mapeamentos, ‘__iter__()’ deve iterar pelas chaves do objeto; para
sequências, deve iterar pelos valores.

 -- Método: object.__len__ (self)

     Chamado para implementar a função embutida *note len(): 62e.  Deve
     retornar o comprimento do objeto, um inteiro ‘>=’ 0.  Além disso,
     um objeto que não define um método *note __bool__(): 1318. e cujo
     método ‘__len__()’ retorna zero é considerado como falso em um
     contexto booleano.

     No CPython, o comprimento deve ser no máximo *note sys.maxsize:
     1205.  Se o comprimento for maior que ‘sys.maxsize’, alguns
     recursos (como *note len(): 62e.) podem levantar *note
     OverflowError: 885.  Para evitar levantar ‘OverflowError’ pelo
     teste de valor de verdade, um objeto deve definir um método *note
     __bool__(): 1318.

 -- Método: object.__length_hint__ (self)

     Chamado para implementar *note operator.length_hint(): fa1.  Deve
     retornar um comprimento estimado para o objeto (que pode ser maior
     ou menor que o comprimento real).  O comprimento deve ser um
     inteiro ‘>=’ 0.  O valor de retorno também pode ser *note
     NotImplemented: 7d3, que é tratado da mesma forma como se o método
     ‘__length_hint__’ não existisse.  Este método é puramente uma
     otimização e nunca é necessário para a correção.

     Adicionado na versão 3.4.

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

 -- Método: object.__getitem__ (self, key)

     Chamado para implementar a avaliação de ‘self[key]’.  Para tipos de
     *note sequência: 4f1, as chaves aceitas devem ser inteiros.
     Opcionalmente, eles também podem oferecer suporte a objetos *note
     slice: 469.  Suporte a índice negativo também é opcional.  Se 'key'
     for de um tipo impróprio, *note TypeError: 2c3. pode ser levantada;
     se 'key' for de um valor fora do conjunto de índices para a
     sequência (após qualquer interpretação especial de valores
     negativos), *note IndexError: 157e. deve ser levantada.  Para tipos
     *note mapeamento: 11fb, se 'key' estiver faltando (não no
     contêiner), *note KeyError: 344. deve ser levantada.

          Nota: Os loops *note for: 2f2. esperam que uma *note
          IndexError: 157e. seja levantada para índices ilegais para
          permitir a detecção apropriada do fim da sequência.

          Nota: Ao fazer *note subscrição: 2110. de uma 'classe', o
          método de classe especial *note __class_getitem__(): 73b. pode
          ser chamado em vez de ‘__getitem__()’.  Veja *note
          __class_getitem__ versus __getitem__: 210f. para mais
          detalhes.

 -- Método: object.__setitem__ (self, key, value)

     Chamado para implementar a atribuição de ‘self[key]’.  Mesma nota
     que para *note __getitem__(): 283.  Isso só deve ser implementado
     para mapeamentos se os objetos suportarem alterações nos valores
     das chaves, ou se novas chaves puderem ser adicionadas, ou para
     sequências se os elementos puderem ser substituídos.  As mesmas
     exceções devem ser levantadas para valores 'key' impróprios do
     método *note __getitem__(): 283.

 -- Método: object.__delitem__ (self, key)

     Chamado para implementar a exclusão de ‘self[key]’.  Mesma nota que
     para *note __getitem__(): 283.  Isso só deve ser implementado para
     mapeamentos se os objetos suportarem remoções de chaves, ou para
     sequências se os elementos puderem ser removidos da sequência.  As
     mesmas exceções devem ser levantadas para valores 'key' impróprios
     do método *note __getitem__(): 283.

 -- Método: object.__missing__ (self, key)

     Chamado por *note dict: 256.*note __getitem__(): 283. para
     implementar ‘self[key]’ para subclasses de dicionário quando a
     chave não estiver no dicionário.

 -- Método: object.__iter__ (self)

     Este método é chamado quando um *note iterador: 1ac. é necessário
     para um contêiner.  Este método deve retornar um novo objeto
     iterador que pode iterar sobre todos os objetos no contêiner.  Para
     mapeamentos, ele deve iterar sobre as chaves do contêiner.

 -- Método: object.__reversed__ (self)

     Chamado (se presente) pelo *note reversed(): 869. embutido para
     implementar a iteração reversa.  Ele deve retornar um novo objeto
     iterador que itera sobre todos os objetos no contêiner na ordem
     reversa.

     Se o método *note __reversed__(): ca7. não for fornecido, o *note
     reversed(): 869. embutido voltará a usar o protocolo de sequência
     (*note __len__(): 15b4. e *note __getitem__(): 283.).  Objetos que
     suportam o protocolo de sequência só devem fornecer *note
     __reversed__(): ca7. se eles puderem fornecer uma implementação que
     seja mais eficiente do que aquela fornecida por *note reversed():
     869.

Os operadores de teste de associação (*note in: 2f4. e *note not in:
62f.) são normalmente implementados como uma iteração através de um
contêiner.  No entanto, os objetos contêiner podem fornecer o seguinte
método especial com uma implementação mais eficiente, que também não
requer que o objeto seja iterável.

 -- Método: object.__contains__ (self, item)

     Chamado para implementar operadores de teste de associação.  Deve
     retornar verdadeiro se 'item' estiver em 'self', falso caso
     contrário.  Para objetos de mapeamento, isso deve considerar as
     chaves do mapeamento em vez dos valores ou pares de itens-chave.

     Para objetos que não definem *note __contains__(): 1400, o teste de
     associação primeiro tenta a iteração via *note __iter__(): c8a,
     depois o protocolo de iteração de sequência antigo via *note
     __getitem__(): 283, consulte *note esta seção em a referência da
     linguagem: 2127.


File: python.info,  Node: Emulando tipos numéricos,  Next: Gerenciadores de contexto da instrução with,  Prev: Emulando tipos contêineres,  Up: Nomes de métodos especiais

4.3.3.21 Emulando tipos numéricos
.................................

Os métodos a seguir podem ser definidos para emular objetos numéricos.
Métodos correspondentes a operações que não são suportadas pelo tipo
particular de número implementado (por exemplo, operações bit a bit para
números não inteiros) devem ser deixados indefinidos.

 -- Método: object.__add__ (self, other)
 -- Método: object.__sub__ (self, other)
 -- Método: object.__mul__ (self, other)
 -- Método: object.__matmul__ (self, other)
 -- Método: object.__truediv__ (self, other)
 -- Método: object.__floordiv__ (self, other)
 -- Método: object.__mod__ (self, other)
 -- Método: object.__divmod__ (self, other)
 -- Método: object.__pow__ (self, other[, modulo])
 -- Método: object.__lshift__ (self, other)
 -- Método: object.__rshift__ (self, other)
 -- Método: object.__and__ (self, other)
 -- Método: object.__xor__ (self, other)
 -- Método: object.__or__ (self, other)

     Esses métodos são chamados para implementar as operações
     aritméticas binárias (‘+’, ‘-’, ‘*’, ‘@’, ‘/’, ‘//’, ‘%’, *note
     divmod(): 9a9, *note pow(): 9da, ‘**’, ‘<<’, ‘>>’, ‘&’, ‘^’, ‘|’).
     Por exemplo, para avaliar a expressão ‘x + y’, onde 'x' é uma
     instância de uma classe que tem um método *note __add__(): 2121,
     ‘type(x).__add__(x, y)’ é chamado.  O método *note __divmod__():
     ec0. deve ser equivalente a usar *note __floordiv__(): 153c. e
     *note __mod__(): 212b.; não deve estar relacionado a *note
     __truediv__(): ebf.  Note que *note __pow__(): 7d4. deve ser
     definido para aceitar um terceiro argumento opcional se a versão
     ternária da função embutida *note pow(): 9da. for suportada.

     Se um desses métodos não suporta a operação com os argumentos
     fornecidos, ele deve retornar *note NotImplemented: 7d3.

 -- Método: object.__radd__ (self, other)
 -- Método: object.__rsub__ (self, other)
 -- Método: object.__rmul__ (self, other)
 -- Método: object.__rmatmul__ (self, other)
 -- Método: object.__rtruediv__ (self, other)
 -- Método: object.__rfloordiv__ (self, other)
 -- Método: object.__rmod__ (self, other)
 -- Método: object.__rdivmod__ (self, other)
 -- Método: object.__rpow__ (self, other[, modulo])
 -- Método: object.__rlshift__ (self, other)
 -- Método: object.__rrshift__ (self, other)
 -- Método: object.__rand__ (self, other)
 -- Método: object.__rxor__ (self, other)
 -- Método: object.__ror__ (self, other)

     Esses métodos são chamados para implementar as operações
     aritméticas binárias (‘+’, ‘-’, ‘*’, ‘@’, ‘/’, ‘//’, ‘%’, *note
     divmod(): 9a9, *note pow(): 9da, ‘**’, ‘<<’, ‘>>’, ‘&’, ‘^’, ‘|’)
     com operandos refletidos (trocados).  Essas funções são chamadas
     apenas se o operando esquerdo não suportar a operação
     correspondente (1) e os operandos forem de tipos diferentes.  (2)
     Por exemplo, para avaliar a expressão ‘x - y’, onde 'y' é uma
     instância de uma classe que tem um método *note __rsub__(): 2131,
     ‘type(y).__rsub__(y, x)’ é chamado se ‘type(x).__sub__(x, y)’
     retorna *note NotImplemented: 7d3.

     Note que ternário *note pow(): 9da. não tentará chamar *note
     __rpow__(): 7d5. (as regras de coerção se tornariam muito
     complicadas).

          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.

 -- Método: object.__iadd__ (self, other)
 -- Método: object.__isub__ (self, other)
 -- Método: object.__imul__ (self, other)
 -- Método: object.__imatmul__ (self, other)
 -- Método: object.__itruediv__ (self, other)
 -- Método: object.__ifloordiv__ (self, other)
 -- Método: object.__imod__ (self, other)
 -- Método: object.__ipow__ (self, other[, modulo])
 -- Método: object.__ilshift__ (self, other)
 -- Método: object.__irshift__ (self, other)
 -- Método: object.__iand__ (self, other)
 -- Método: object.__ixor__ (self, other)
 -- Método: object.__ior__ (self, other)

     Esses métodos são chamados para implementar as atribuições
     aritméticas aumentadas (‘+=’, ‘-=’, ‘*=’, ‘@=’, ‘/=’, ‘//=’, ‘%=’,
     ‘**=’, ‘<<=’, ‘>>=’, ‘&=’, ‘^=’, ‘|=’).  Esses métodos devem tentar
     fazer a operação no local (modificando 'self') e retornar o
     resultado (que poderia ser, mas não precisa ser, 'self').  Se um
     método específico não for definido, ou se esse método retorna *note
     NotImplemented: 7d3, a atribuição aumentada volta aos métodos
     normais.  Por exemplo, se 'x' é uma instância de uma classe com um
     método *note __iadd__(): 2123, ‘x += y’ equivale a ‘x =
     x.__iadd__(y)’.  Se *note __iadd__(): 2123. não existe, ou se
     ‘x.__iadd__(y)’ retorna ‘NotImplemented’, ‘x.__add__(y)’ e
     ‘y.__radd__(x)’ são considerados, como com a avaliação de ‘x + y’.
     Em certas situações, a atribuição aumentada pode resultar em erros
     inesperados (veja *note Porque uma_tupla[i] += [‘item’] levanta uma
     exceção quando a adição funciona?: 2143.), mas este comportamento é
     na verdade parte do modelo de dados.

 -- Método: object.__neg__ (self)
 -- Método: object.__pos__ (self)
 -- Método: object.__abs__ (self)
 -- Método: object.__invert__ (self)

     Chamado para implementar as operações aritméticas unárias (‘-’,
     ‘+’, *note abs(): 1e2d. e ‘~’).

 -- Método: object.__complex__ (self)
 -- Método: object.__int__ (self)
 -- Método: object.__float__ (self)

     Chamado para implementar as funções embutidas *note complex(): 2f8,
     *note int(): 257. e *note float(): 2f7.  Deve retornar um valor do
     tipo apropriado.

 -- Método: object.__index__ (self)

     Chamado para implementar *note operator.index(): 1a5e, 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 *note
     bin(): 12eb, *note hex(): 1312. e *note oct(): 1311.).  A presença
     deste método indica que o objeto numérico é do tipo inteiro.  Deve
     retornar um número inteiro.

     Se *note __int__(): 71c, *note __float__(): 9d4. e *note
     __complex__(): 5e7. não estiverem definidos, funções embutidas
     correspondentes *note int(): 257, *note float(): 2f7. e *note
     complex(): 2f8. recorre a *note __index__(): 71d.

 -- Método: object.__round__ (self[, ndigits])
 -- Método: object.__trunc__ (self)
 -- Método: object.__floor__ (self)
 -- Método: object.__ceil__ (self)

     Chamado para implementar as funções embutidas *note round(): 131d.
     e *note trunc(): 1406, *note floor(): 1404. e *note ceil(): 1405.
     de *note math: 8e.  A menos que 'ndigits' sejam passados para
     ‘__round__()’ todos estes métodos devem retornar o valor do objeto
     truncado para um *note Integral: 214b. (tipicamente um *note int:
     257.).

     A função embutida *note int(): 257. retorna para *note __trunc__():
     71b. se nem *note __int__(): 71c. nem *note __index__(): 71d.
     estiverem definidos.

     Alterado na versão 3.11: A delegação de *note int(): 257. para
     *note __trunc__(): 71b. foi descontinuada.

   ---------- Footnotes ----------

   (1) “Não suportar” aqui significa que a classe não possui tal método,
ou o método retorna *note NotImplemented: 7d3.  Não defina o método como
‘None’ se quiser forçar o fallback para o método refletido do operando
correto – isso terá o efeito oposto de 'bloquear' explicitamente esse
fallback.

   (2) Para operandos do mesmo tipo, presume-se que se o método não
refletido – como *note __add__(): 2121. – falhar, a operação geral não
será suportada, razão pela qual o método refletido não é chamado.


File: python.info,  Node: Gerenciadores de contexto da instrução with,  Next: Customizando argumentos posicionais na classe correspondência de padrão,  Prev: Emulando tipos numéricos,  Up: Nomes de métodos especiais

4.3.3.22 Gerenciadores de contexto da instrução with
....................................................

Um 'gerenciador de contexto' é um objeto que define o contexto de tempo
de execução a ser estabelecido ao executar uma instrução *note with:
5d2.  O gerenciador de contexto lida com a entrada e a saída do contexto
de tempo de execução desejado para a execução do bloco de código.  Os
gerenciadores de contexto são normalmente invocados usando a instrução
‘with’ (descrita na seção *note A instrução with: 5d2.), mas também
podem ser usados invocando diretamente seus métodos.

Os usos típicos de gerenciadores de contexto incluem salvar e restaurar
vários tipos de estado global, travar e destravar recursos, fechar
arquivos abertos, etc.

Para mais informações sobre gerenciadores de contexto, veja *note Tipos
de Gerenciador de Contexto: 214e.  A classe *note object: a96. em si não
fornece os métodos do gerenciador de contexto.

 -- Método: object.__enter__ (self)

     Insere o contexto de tempo de execução relacionado a este objeto.
     A instrução *note with: 5d2. vinculará o valor de retorno deste
     método ao(s) alvo(s) especificado(s) na cláusula ‘as’ da instrução,
     se houver.

 -- Método: object.__exit__ (self, exc_type, exc_value, traceback)

     Sai do contexto de tempo de execução relacionado a este objeto.  Os
     parâmetros descrevem a exceção que fez com que o contexto fosse
     encerrado.  Se o contexto foi encerrado sem exceção, todos os três
     argumentos serão *note None: 675.

     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.

     Observe que os métodos *note __exit__(): 1344. não devem relançar a
     exceção passada; esta é a responsabilidade do chamador.

Ver também
..........

PEP 343(1) - A instrução “with”

     A especificação, o histórico e os exemplos para a instrução Python
     *note with: 5d2.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0343/


File: python.info,  Node: Customizando argumentos posicionais na classe correspondência de padrão,  Next: Emulando tipos buffer,  Prev: Gerenciadores de contexto da instrução with,  Up: Nomes de métodos especiais

4.3.3.23 Customizando argumentos posicionais na classe correspondência de padrão
................................................................................

Ao usar um nome de classe em um padrão, argumentos posicionais não são
permitidos por padrão, ou seja, ‘case MyClass(x, y)’ é tipicamente
inválida sem suporte especial em ‘MyClass’.  Para permitir a utilização
desse tipo de padrão, a classe precisa definir um atributo
'__match_args__'

 -- Dado: object.__match_args__

     Essa variável de classe pode ser atribuída a uma tupla de strings.
     Quando essa classe é usada em uma classe padrão com argumentos
     posicionais, cada argumento posicional será convertido para um
     argumento nomeado, usando correspondência de valor em
     '__match_args__' como palavra reservada.  A ausência desse atributo
     é equivalente a defini-lo como ‘()’

Por exemplo, se ‘MyClass.__match_args__’ é ‘("left", "center", "right")’
significa que ‘case MyClass(x, y)’ é equivalente a ‘case MyClass(left=x,
center=y)’.  Note que o número de argumentos no padrão deve ser menor ou
igual ao número de elementos em '__match_args__'; caso seja maior, a
tentativa de correspondência de padrão irá levantar uma *note TypeError:
2c3.

Adicionado na versão 3.10.

Ver também
..........

PEP 634(1) - Correspondência de Padrão Estrutural

     A especificação para a instrução Python ‘match’

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0634/


File: python.info,  Node: Emulando tipos buffer,  Next: Pesquisa de método especial,  Prev: Customizando argumentos posicionais na classe correspondência de padrão,  Up: Nomes de métodos especiais

4.3.3.24 Emulando tipos buffer
..............................

O *note protocolo buffer: 2e8. fornece uma maneira para objetos Python
exporem acesso eficiente a um vetor de memória de baixo nível.  Este
protocolo é implementado por tipos embutido como *note bytes: 1c2. e
*note memoryview: 2eb, e bibliotecas de terceiros podem definir tipos de
buffer adicionais.

Embora os tipos buffer sejam geralmente implementados em C, também é
possível implementar o protocolo em Python.

 -- Método: object.__buffer__ (self, flags)

     Chamado quando um buffer é solicitado de 'self' (por exemplo, pelo
     construtor de *note memoryview: 2eb.).  O argumento 'flags' é um
     inteiro que representa o tipo de buffer solicitado, afetando, por
     exemplo, se o buffer retornado é somente leitura ou gravável.
     *note inspect.BufferFlags: 460. fornece uma maneira conveniente de
     interpretar os sinalizadores.  O método deve retornar um objeto
     *note memoryview: 2eb.

 -- Método: object.__release_buffer__ (self, buffer)

     Chamado quando um buffer não é mais necessário.  O argumento
     'buffer' é um objeto *note memoryview: 2eb. que foi retornado
     anteriormente por *note __buffer__(): 45f.  O método deve liberar
     quaisquer recursos associados ao buffer.  Este método deve retornar
     ‘None’.  Objetos buffer que não precisam executar nenhuma limpeza
     não são necessários para implementar este método.

Adicionado na versão 3.12.

Ver também
..........

PEP 688(1) - Tornando o protocolo de buffer acessível no Python

     Introduz os métodos ‘__buffer__’ e ‘__release_buffer__’ no Python

*note collections.abc.Buffer: 2e9.

     ABC para tipos buffer.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0688/


File: python.info,  Node: Pesquisa de método especial,  Prev: Emulando tipos buffer,  Up: Nomes de métodos especiais

4.3.3.25 Pesquisa de método especial
....................................

Para classes personalizadas, as invocações implícitas de métodos
especiais só têm garantia de funcionar corretamente se definidas em um
tipo de objeto, não no dicionário de instância do objeto.  Esse
comportamento é o motivo pelo qual o código a seguir levanta uma
exceção:

     >>> 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()

A justificativa por trás desse comportamento está em uma série de
métodos especiais como *note __hash__(): b0e. e *note __repr__(): 61c.
que são implementados por todos os objetos, incluindo objetos de tipo.
Se a pesquisa implícita desses métodos usasse o processo de pesquisa
convencional, eles falhariam quando invocados no próprio objeto do tipo:

     >>> 1 .__hash__() == hash(1)
     True
     >>> int.__hash__() == hash(int)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: descriptor '__hash__' of 'int' object needs an argument

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:

     >>> type(1).__hash__(1) == hash(1)
     True
     >>> type(int).__hash__(int) == hash(int)
     True

Além de contornar quaisquer atributos de instância no interesse da
correção, a pesquisa de método especial implícita geralmente também
contorna o método *note __getattribute__(): beb. mesmo da metaclasse do
objeto:

     >>> class Meta(type):
     ...     def __getattribute__(*args):
     ...         print("Metaclass getattribute invoked")
     ...         return type.__getattribute__(*args)
     ...
     >>> class C(object, metaclass=Meta):
     ...     def __len__(self):
     ...         return 10
     ...     def __getattribute__(*args):
     ...         print("Class getattribute invoked")
     ...         return object.__getattribute__(*args)
     ...
     >>> c = C()
     >>> c.__len__()                 # Explicit lookup via instance
     Class getattribute invoked
     10
     >>> type(c).__len__(c)          # Explicit lookup via type
     Metaclass getattribute invoked
     10
     >>> len(c)                      # Implicit lookup
     10

Ignorar a maquinaria de *note __getattribute__(): beb. desta forma
fornece um escopo significativo para otimizações de velocidade dentro do
interpretador, ao custo de alguma flexibilidade no tratamento de métodos
especiais (o método especial 'deve' ser definido no próprio objeto
classe em ordem ser invocado de forma consistente pelo interpretador).


File: python.info,  Node: Corrotinas,  Prev: Nomes de métodos especiais,  Up: Modelo de dados

4.3.4 Corrotinas
----------------

* Menu:

* Objetos aguardáveis::
* Objetos corrotina::
* Iteradores assíncronos::
* Gerenciadores de contexto assíncronos::


File: python.info,  Node: Objetos aguardáveis,  Next: Objetos corrotina,  Up: Corrotinas

4.3.4.1 Objetos aguardáveis
...........................

Um objeto *note aguardável: 1ad. geralmente implementa um método *note
__await__(): d9d.  Os *note objetos corrotina: 491. retornados das
funções *note async def: 5d1. são aguardáveis.

     Nota: Os objetos *note iteradores geradores: bf9. retornados de
     geradores decorados com *note types.coroutine(): eb7. também são
     aguardáveis, mas eles não implementam *note __await__(): d9d.

 -- Método: object.__await__ (self)

     Deve retornar um *note iterador: 1ac.  Deve ser usado para
     implementar objetos *note aguardáveis: 1ad.  Por exemplo, *note
     asyncio.Future: be6. implementa este método para ser compatível com
     a expressão *note await: 1b9.  A classe *note object: a96. em si
     não é aguardável e não fornece este método.

          Nota: A linguagem não impõe nenhuma restrição ao tipo ou valor
          dos objetos produzidos pelo iterador retornado por
          ‘__await__’, pois isso é específico para a implementação da
          estrutura de execução assíncrona (por exemplo, *note asyncio:
          a.) que gerenciará o objeto *note awaitable: 1ad.

Adicionado na versão 3.5.

Ver também
..........

PEP 492(1) para informações adicionais sobre objetos aguardáveis.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0492/


File: python.info,  Node: Objetos corrotina,  Next: Iteradores assíncronos,  Prev: Objetos aguardáveis,  Up: Corrotinas

4.3.4.2 Objetos corrotina
.........................

*note Objetos corrotina: 491. são objetos *note aguardáveis: 1ad.  A
execução de uma corrotina pode ser controlada chamando *note
__await__(): d9d. e iterando sobre o resultado.  Quando a corrotina
termina a execução e retorna, o iterador levanta *note StopIteration:
c15, e o atributo *note value: 2157. da exceção contém o valor de
retorno.  Se a corrotina levantar uma exceção, ela será propagada pelo
iterador.  As corrotinas não devem levantar exceções *note
StopIteration: c15. diretamente não tratadas.

As corrotinas também têm os métodos listados abaixo, que são análogos
aos dos geradores (ver *note Métodos de iterador gerador: 2158.).  No
entanto, ao contrário dos geradores, as corrotinas não suportam
diretamente a iteração.

Alterado na versão 3.5.2: É uma *note RuntimeError: 195. para aguardar
uma corrotina mais de uma vez.

 -- Método: coroutine.send (value)

     Inicia ou retoma a execução da corrotina.  Se 'value' for ‘None’,
     isso equivale a avançar o iterador retornado por *note __await__():
     d9d.  Se 'value' não for ‘None’, este método delega para o método
     *note send(): 215a. do iterador que causou a suspensão da
     corrotina.  O resultado (valor de retorno, *note StopIteration:
     c15. ou outra exceção) é o mesmo de iterar sobre o valor de retorno
     ‘__await__()’, descrito acima.

 -- Método: coroutine.throw (value)

 -- Método: coroutine.throw (type[, value[, traceback]])

     Levanta a exceção especificada na corrotina.  Este método delega ao
     método *note throw(): 4f8. do iterador que causou a suspensão da
     corrotina, se ela tiver tal método.  Caso contrário, a exceção é
     levantada no ponto de suspensão.  O resultado (valor de retorno,
     *note StopIteration: c15. ou outra exceção) é o mesmo de iterar
     sobre o valor de retorno *note __await__(): d9d, descrito acima.
     Se a exceção não for capturada na corrotina, ela se propagará de
     volta para o chamador.

     Alterado na versão 3.12: A segunda assinatura (tipo[, valor[,
     traceback]]) foi descontinuada e pode ser removida em uma versão
     futura do Python.

 -- Método: coroutine.close ()

     Faz com que a corrotina se limpe e saia.  Se a corrotina for
     suspensa, este método primeiro delega para o método *note close():
     15b9. do iterador que causou a suspensão da corrotina, se tiver tal
     método.  Então ele levanta *note GeneratorExit: 140e. no ponto de
     suspensão, fazendo com que a corrotina se limpe imediatamente.  Por
     fim, a corrotina é marcada como tendo sua execução concluída, mesmo
     que nunca tenha sido iniciada.

     Objetos corrotina são fechados automaticamente usando o processo
     acima quando estão prestes a ser destruídos.


File: python.info,  Node: Iteradores assíncronos,  Next: Gerenciadores de contexto assíncronos,  Prev: Objetos corrotina,  Up: Corrotinas

4.3.4.3 Iteradores assíncronos
..............................

Um 'iterador assíncrono' pode chamar código assíncrono em seu método
‘__anext__’.

Os iteradores assíncronos podem ser usados em uma instrução *note async
for: aba.

A classe *note object: a96. em si não fornece estes métodos.

 -- Método: object.__aiter__ (self)

     Deve retornar um objeto 'iterador assíncrono'.

 -- Método: object.__anext__ (self)

     Deve retornar um 'aguardável' resultando em um próximo valor do
     iterador.  Deve levantar um erro *note StopAsyncIteration: 1ba5.
     quando a iteração terminar.

Um exemplo de objeto iterável assíncrono:

     class Reader:
         async def readline(self):
             ...

         def __aiter__(self):
             return self

         async def __anext__(self):
             val = await self.readline()
             if val == b'':
                 raise StopAsyncIteration
             return val

Adicionado na versão 3.5.

Alterado na versão 3.7: Antes do Python 3.7, *note __aiter__(): c16.
poderia retornar um 'aguardável' que resolveria para um *note iterador
assíncrono: 1ab.

A partir do Python 3.7, *note __aiter__(): c16. deve retornar um objeto
iterador assíncrono.  Retornar qualquer outra coisa resultará em um erro
*note TypeError: 2c3.


File: python.info,  Node: Gerenciadores de contexto assíncronos,  Prev: Iteradores assíncronos,  Up: Corrotinas

4.3.4.4 Gerenciadores de contexto assíncronos
.............................................

Um 'gerenciador de contexto assíncrono' é um 'gerenciador de contexto'
que é capaz de suspender a execução em seus métodos ‘__aenter__’ e
‘__aexit__’.

Os gerenciadores de contexto assíncronos podem ser usados em uma
instrução *note async with: 5d5.

A classe *note object: a96. em si não fornece estes métodos.

 -- Método: object.__aenter__ (self)

     Semanticamente semelhante a *note __enter__(): 5c8, a única
     diferença é que ele deve retornar um 'aguardável'.

 -- Método: object.__aexit__ (self, exc_type, exc_value, traceback)

     Semanticamente semelhante a *note __exit__(): 1344, a única
     diferença é que ele deve retornar um 'aguardável'.

Um exemplo de uma classe gerenciadora de contexto assíncrona:

     class AsyncContextManager:
         async def __aenter__(self):
             await log('entrando no contexto')

         async def __aexit__(self, exc_type, exc, tb):
             await log('saindo do contexto')

Adicionado na versão 3.5.


File: python.info,  Node: Modelo de execução,  Next: O sistema de importação,  Prev: Modelo de dados,  Up: A Referência da Linguagem Python

4.4 Modelo de execução
======================

* Menu:

* Estrutura de um programa::
* Nomeação e ligação::
* Exceções: Exceções<2>.


File: python.info,  Node: Estrutura de um programa,  Next: Nomeação e ligação,  Up: Modelo de execução

4.4.1 Estrutura de um programa
------------------------------

Um programa Python é construído a partir de blocos de código.  Um
'bloco' é um pedaço do texto do programa Python que é executado como uma
unidade.  A seguir estão os blocos: um módulo, um corpo de função e uma
definição de classe.  Cada comando digitado interativamente é um bloco.
Um arquivo de script (um arquivo fornecido como entrada padrão para o
interpretador ou especificado como argumento de linha de comando para o
interpretador) é um bloco de código.  Um comando de script (um comando
especificado na linha de comando do interpretador com a opção *note -c:
5e0.) é um bloco de código.  Um módulo executado sobre um script de
nível superior (como o módulo ‘__main__’) a partir da linha de comando
usando um argumento *note -m: 5e1. também é um bloco de código.  O
argumento da string passado para as funções embutidas *note eval(): 180.
e *note exec(): 17f. é um bloco de código.

Um bloco de código é executado em um 'quadro de execução'.  Um quadro
contém algumas informações administrativas (usadas para depuração) e
determina onde e como a execução continua após a conclusão do bloco de
código.


File: python.info,  Node: Nomeação e ligação,  Next: Exceções<2>,  Prev: Estrutura de um programa,  Up: Modelo de execução

4.4.2 Nomeação e ligação
------------------------

* Menu:

* Ligação de nomes::
* Resolução de nomes::
* Escopos de anotação::
* Avaliação preguiçosa::
* Builtins e execução restrita::
* Interação com recursos dinâmicos::


File: python.info,  Node: Ligação de nomes,  Next: Resolução de nomes,  Up: Nomeação e ligação

4.4.2.1 Ligação de nomes
........................

'Nomes' referem-se a objetos.  Os nomes são introduzidos por operações
de ligação de nomes.

As seguintes construções ligam nomes:

   * parâmetros formais para funções,

   * definições de classe,

   * definições de função,

   * expressões de atribuição,

   * *note alvos: 2168. que são identificadores se ocorrerem em uma
     atribuição:

        + cabeçalho de laço *note for: 2f2,

        + depois de ‘as’ em uma instrução *note with: 5d2, cláusula
          *note except: 18b, cláusula *note except*: 5b8. ou no padrão
          as na correspondência de padrões estruturais,

        + em um padrão de captura na correspondência de padrões
          estruturais

   * instruções *note import: 5e2.

   * instruções *note type: 438.

   * *note listas de parâmetros de tipo: 2b3.

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 *note del: 18a7. 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 *note nonlocal: 12ea. ou *note global: 18a.  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
*note variável livre: 2169.

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.


File: python.info,  Node: Resolução de nomes,  Next: Escopos de anotação,  Prev: Ligação de nomes,  Up: Nomeação e ligação

4.4.2.2 Resolução de nomes
..........................

O 'escopo' define a visibilidade de um nome dentro de um bloco.  Se uma
variável local é definida em um bloco, seu escopo inclui esse bloco.  Se
a definição ocorrer em um bloco de função, o escopo se estende a
quaisquer blocos contidos no bloco de definição, a menos que um bloco
contido introduza uma ligação diferente para o nome.

Quando um nome é usado em um bloco de código, ele é resolvido usando o
escopo envolvente mais próximo.  O conjunto de todos esses escopos
visíveis a um bloco de código é chamado de 'ambiente' do bloco.

Quando um nome não é encontrado, uma exceção *note NameError: 43f. é
levantada.  Se o escopo atual for um escopo de função e o nome se
referir a uma variável local que ainda não foi associada a um valor no
ponto onde o nome é usado, uma exceção *note UnboundLocalError: 157f. é
levantada.  *note UnboundLocalError: 157f. é uma subclasse de *note
NameError: 43f.

Se a operação de ligação de nomes ocorre dentro de um bloco de código,
todos os usos do nome dentro do bloco são tratadas como referências para
o bloco atual.  Isso pode.  Isso pode levar a erros quando um nome é
usado em um bloco antes de ser vinculado.  Esta regra é sutil.  Python
carece de declarações e permite que as operações de ligação de nomes
ocorram em qualquer lugar dentro de um bloco de código.  As variáveis
locais de um bloco de código podem ser determinadas pela varredura de
todo o texto do bloco para operações de ligação de nome.  Veja *note o
FAQ sobre UnboundLocalError: 216c. para exemplos.

Se a instrução *note global: 18a. ocorrer dentro de um bloco, todos os
usos dos nomes especificados na instrução referem-se às ligações desses
nomes no espaço de nomes de nível superior.  Os nomes são resolvidos no
espaço de nomes de nível superior pesquisando o espaço de nomes global,
ou seja, o espaço de nomes do módulo que contém o bloco de código, e o
espaço de nomes embutido, o espaço de nomes do módulo *note builtins:
12.  O espaço de nomes global é pesquisado primeiro.  Se os nomes não
forem encontrados lá, o espaço de nomes embutidos será pesquisado em
seguida.  Se os nomes também não forem encontrados no espaço de nomes
embutido, novas variáveis são criadas no espaço de nomes global.  A
instrução global deve preceder todos os usos dos nomes listados.

A instrução *note global: 18a. tem o mesmo escopo que uma operação de
ligação de nome no mesmo bloco.  Se o escopo mais próximo de uma
variável livre contiver uma instrução global, a variável livre será
tratada como global.

A instrução *note nonlocal: 12ea. faz com que os nomes correspondentes
se refiram a variáveis previamente vinculadas no escopo da função
delimitadora mais próxima.  A exceção *note SyntaxError: 18d. é
levantada em tempo de compilação se o nome fornecido não existir em
nenhum escopo de função delimitador.  *note Parâmetros de tipo: 2b3. não
podem ser vinculadas novamente com a instrução ‘nonlocal’.

O espaço de nomes de um módulo é criado automaticamente na primeira vez
que um módulo é importado.  O módulo principal de um script é sempre
chamado de *note __main__: 1.

Blocos de definição de classe e argumentos para *note exec(): 17f. e
*note eval(): 180. são especiais no contexto de resolução de nome.  Uma
definição de classe é uma instrução executável que pode usar e definir
nomes.  Essas referências seguem as regras normais para resolução de
nome, com exceção de que variáveis locais não vinculadas são pesquisadas
no espaço de nomes global global.  O espaço de nomes global da definição
de classe se torna o dicionário de atributos da classe.  O escopo dos
nomes definidos em um bloco de classe é limitado ao bloco de classe; ele
não se estende aos blocos de código de métodos.  Isso inclui
compreensões e expressões geradoras, mas não inclui *note escopos de
anotação: 188, 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))

Porém, o seguinte vai funcionar:

     class A:
         type Alias = Nested
         class Nested: pass

     print(A.Alias.__value__)  # <type 'A.Nested'>


File: python.info,  Node: Escopos de anotação,  Next: Avaliação preguiçosa,  Prev: Resolução de nomes,  Up: Nomeação e ligação

4.4.2.3 Escopos de anotação
...........................

As instruções *note type: 438. e *note listas de parâmetros de tipo:
2b3. introduzem 'escopos de anotação', que se comportam principalmente
como escopos de função, mas com algumas exceções discutidas abaixo.
*note Anotações: 458. atualmente não usam escopos de anotação, mas
espera-se que elas usem escopos de anotação no Python 3.13 quando PEP
649(1) for implementada.

Os escopos de anotação são usados nos seguintes contextos:

   * Listas de parâmetros de tipo para *note apelidos de tipo genérico:
     456.

   * Listas de parâmetros de tipo para *note funções genéricas: 453.  As
     anotações de uma função genérica são executadas dentro do escopo de
     anotação, mas seus padrões e decoradores não.

   * Listas de parâmetros de tipo para *note classes genéricas: 453.  As
     classes base e argumentos nomeados de uma classe genérica são
     executadas dentro do escopo de anotação, mas seus decoradores não.

   * Os limites, restrições e valores padrão para parâmetros de tipo
     (*note avaliados preguiçosamente: 457.).

   * O valor dos apelidos de tipo (*note avaliado preguiçosamente:
     457.).

Escopos de anotação diferenciam-se de escopos de função nas seguintes
formas:

   * Os escopos de anotação têm acesso ao espaço de nomes da classe
     delimitadora.  Se um escopo de anotação estiver imediatamente
     dentro de um escopo de classe ou dentro de outro escopo de anotação
     que esteja imediatamente dentro de um escopo de classe, o código no
     escopo de anotação poderá usar nomes definidos no escopo de classe
     como se fosse executado diretamente no corpo da classe.  Isto
     contrasta com funções regulares definidas dentro de classes, que
     não podem acessar nomes definidos no escopo da classe.

   * Expressões em escopos de anotação não podem conter expressões *note
     yield: 9d5, ‘yield from’, *note await: 1b9. ou ‘:= 1’.  (Essas
     expressões são permitidas em outros escopos contidos no escopo de
     anotação.)

   * Nomes definidos em escopos de anotação não podem ser vinculados
     novamente com instruções *note nonlocal: 12ea. em escopos internos.
     Isso inclui apenas parâmetros de tipo, pois nenhum outro elemento
     sintático que pode aparecer nos escopos de anotação pode introduzir
     novos nomes.

   * Embora os escopos de anotação tenham um nome interno, esse nome não
     é refletido no *note nome qualificado: 1ab1. dos objetos definidos
     dentro do escopo.  Em vez disso, o *note __qualname__: 109e. de
     tais objetos é como se o objeto fosse definido no escopo
     delimitador.

Adicionado na versão 3.12: Escopos de anotação foram introduzidos no
Python 3.12 como parte da PEP 695(2).

Alterado na versão 3.13: Os escopos de anotação também são usados para
padrões de parâmetros de tipo, conforme introduzido pela PEP 696(3).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0649/

   (2) https://peps.python.org/pep-0695/

   (3) https://peps.python.org/pep-0696/


File: python.info,  Node: Avaliação preguiçosa,  Next: Builtins e execução restrita,  Prev: Escopos de anotação,  Up: Nomeação e ligação

4.4.2.4 Avaliação preguiçosa
............................

Os valores dos apelidos de tipo criados através da instrução *note type:
438. são 'avaliados preguiçosamente'.  O mesmo se aplica aos limites,
restrições e valores padrão de variáveis de tipo criadas através da
*note sintaxe do parâmetro de tipo: 2b3.  Isso significa que eles não
são avaliados quando o apelido de tipo ou a variável de tipo é criado.
Em vez disso, eles são avaliados apenas quando isso é necessário para
resolver um acesso de atributo.

Exemplo:

     >>> type Alias = 1/0
     >>> Alias.__value__
     Traceback (most recent call last):
       ...
     ZeroDivisionError: division by zero
     >>> def func[T: 1/0](): pass
     >>> T = func.__type_params__[0]
     >>> T.__bound__
     Traceback (most recent call last):
       ...
     ZeroDivisionError: division by zero

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:

     from typing import Literal

     type SimpleExpr = int | Parenthesized
     type Parenthesized = tuple[Literal["("], Expr, Literal[")"]]
     type Expr = SimpleExpr | tuple[SimpleExpr, Literal["+", "-"], Expr]

Valores avaliados preguiçosamente são avaliados em *note escopo de
anotação: 188, o que significa que os nomes que aparecem dentro do valor
avaliado preguiçosamente são pesquisados como se fossem usados no escopo
imediatamente envolvente.

Adicionado na versão 3.12.


File: python.info,  Node: Builtins e execução restrita,  Next: Interação com recursos dinâmicos,  Prev: Avaliação preguiçosa,  Up: Nomeação e ligação

4.4.2.5 Builtins e execução restrita
....................................

Os usuários não devem tocar em ‘__builtins__’; é estritamente um detalhe
de implementação.  Usuários que desejam substituir valores no espaço de
nomes interno devem *note import: 5e2. o módulo *note builtins: 12. e
modificar seus atributos apropriadamente.

O espaço de nomes builtins associado com a execução de um bloco de
código é encontrado procurando o nome ‘__builtins__’ em seu espaço de
nomes global; este deve ser um dicionário ou um módulo (no último caso,
o dicionário do módulo é usado).  Por padrão, quando no módulo *note
__main__: 1, ‘__builtins__’ é o módulo embutido *note builtins: 12.;
quando em qualquer outro módulo, ‘__builtins__’ é um apelido para o
dicionário do próprio módulo *note builtins: 12.


File: python.info,  Node: Interação com recursos dinâmicos,  Prev: Builtins e execução restrita,  Up: Nomeação e ligação

4.4.2.6 Interação com recursos dinâmicos
........................................

A resolução de nome de variáveis livres ocorre em tempo de execução, não
em tempo de compilação.  Isso significa que o código a seguir imprimirá
42:

     i = 10
     def f():
         print(i)
     i = 42
     f()

As funções *note eval(): 180. e *note exec(): 17f. 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 *note exec(): 17f. e *note eval(): 180. possuem
argumentos opcionais para substituir o espaço de nomes global e local.
Se apenas um espaço de nomes for especificado, ele será usado para
ambos.

   ---------- Footnotes ----------

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


File: python.info,  Node: Exceções<2>,  Prev: Nomeação e ligação,  Up: Modelo de execução

4.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 *note raise:
5ed.  Os tratadores de exceção são especificados com a instrução *note
try: 6e9. … *note except: 18b.  A cláusula *note finally: 9d2. 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 é *note SystemExit: d63.

As exceções são identificadas por instâncias de classe.  A cláusula
*note except: 18b. é selecionada dependendo da classe da instância: ela
deve referenciar a classe da instância ou uma *note classe base
não-virtual: 11f5. 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 *note try: 6e9. na seção *note A
instrução try: 6e9. e a instrução *note raise: 5ed. na seção *note A
instrução raise: 5ed.


File: python.info,  Node: O sistema de importação,  Next: Expressões,  Prev: Modelo de execução,  Up: A Referência da Linguagem Python

4.5 O sistema de importação
===========================

O código Python em um *note módulo: 1755. obtém acesso ao código em
outro módulo pelo processo de *note importação: 2178. dele.  A instrução
*note import: 5e2. é a maneira mais comum de invocar o mecanismo de
importação, mas não é a única maneira.  Funções como *note
importlib.import_module(): 518. e a função embutida *note __import__():
8da. também podem ser usadas para chamar o mecanismo de importação.

A instrução *note import: 5e2. 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 *note __import__(): 8da, com os argumentos
apropriados.  O valor de retorno de *note __import__(): 8da. é 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 *note __import__(): 8da. 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 *note
sys.modules: 1636.), apenas a instrução *note import: 5e2. realiza uma
operação de ligação de nome.

Quando uma instrução *note import: 5e2. é executada, a função embutida
padrão *note __import__(): 8da. é chamada.  Outros mecanismos para
chamar o sistema de importação (como *note importlib.import_module():
518.) podem optar por ignorar *note __import__(): 8da. 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 objeto de módulo (1), inicializando-o.
Se o módulo nomeado não puder ser encontrado, uma *note
ModuleNotFoundError: b5b. 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(2).  Não há mais um
mecanismo de importação implícito – o sistema completo de importação é
exposto através de *note sys.meta_path: d4d.  Além disso, o suporte
nativo a pacote de espaço de nomes foi implementado (consulte PEP
420(3)).

* Menu:

* importlib: importlib<10>.
* Pacotes: Pacotes<2>.
* Caminho de busca::
* Carregando::
* O localizador baseado no caminho::
* Substituindo o sistema de importação padrão::
* Importações relativas ao pacote::
* Considerações especiais para __main__::
* Referências::

   ---------- Footnotes ----------

   (1) Veja *note types.ModuleType: e3f.

   (2) https://peps.python.org/pep-0302/

   (3) https://peps.python.org/pep-0420/


File: python.info,  Node: importlib<10>,  Next: Pacotes<2>,  Up: O sistema de importação

4.5.1 ‘importlib’
-----------------

O módulo *note importlib: 77. fornece uma API rica para interagir com o
sistema de importação.  Por exemplo, *note importlib.import_module():
518. fornece uma API mais simples e recomendada do que a função embutida
*note __import__(): 8da. para chamar o mecanismo de importação.
Consulte a documentação da biblioteca *note importlib: 77. para obter
detalhes adicionais.


File: python.info,  Node: Pacotes<2>,  Next: Caminho de busca,  Prev: importlib<10>,  Up: O sistema de importação

4.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 *note
pacotes: 20aa.

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 *note email: 3b, que por
sua vez tem um subpacote chamado *note email.mime: 45. e um módulo
dentro dele chamado *note email.mime.text: 4d.

* Menu:

* Pacotes regulares::
* Pacotes de espaço de nomes::


File: python.info,  Node: Pacotes regulares,  Next: Pacotes de espaço de nomes,  Up: Pacotes<2>

4.5.2.1 Pacotes regulares
.........................

O Python define dois tipos de pacotes, *note pacotes regulares: 217c. e
*note pacotes de espaço de nomes: 1dee.  Pacotes regulares são pacotes
tradicionais, como existiam no Python 3.2 e versões anteriores.  Um
pacote regular é normalmente implementado como um diretório que contém
um arquivo ‘__init__.py’.  Quando um pacote regular é importado, esse
arquivo ‘__init__.py’ é executado implicitamente, e os objetos que ele
define são vinculados aos nomes no espaço de nomes do pacote.  O arquivo
‘__init__.py’ pode conter o mesmo código Python que qualquer outro
módulo pode conter, e o Python adicionará alguns atributos adicionais ao
módulo quando ele for importado.

Por exemplo, o layout do sistema de arquivos a seguir define um pacote
‘parent’ de nível superior com três subpacotes:

     parent/
         __init__.py
         one/
             __init__.py
         two/
             __init__.py
         three/
             __init__.py

A importação de ‘parent.one’ vai executar implicitamente
‘parent/__init__.py’ e ‘parent/one/__init__.py’.  Importações
subsequentes de ‘parent.two’ ou ‘parent.three’ vão executar
‘parent/two/__init__.py’ e ‘parent/three/__init__.py’, respectivamente.


File: python.info,  Node: Pacotes de espaço de nomes,  Prev: Pacotes regulares,  Up: Pacotes<2>

4.5.2.2 Pacotes de espaço de nomes
..................................

Um pacote de espaço de nomes é um composto de várias *note porções:
217f, em que cada parte contribui com um subpacote para o pacote pai.
Partes podem residir em locais diferentes no sistema de arquivos.
Partes também podem ser encontradas em arquivos zip, na rede ou em
qualquer outro lugar que o Python pesquisar durante a importação.  Os
pacotes de espaço de nomes podem ou não corresponder diretamente aos
objetos no sistema de arquivos; eles podem ser módulos virtuais que não
têm representação concreta.

Os pacotes de espaço de nomes não usam uma lista comum para o atributo
‘__path__’.  Em vez disso, eles usam um tipo iterável personalizado que
executará automaticamente uma nova pesquisa por partes do pacote na
próxima tentativa de importação dentro desse pacote, se o caminho do
pacote pai (ou *note sys.path: 3b4. para um pacote de nível superior)
for alterado.

Com pacotes de espaço de nomes, não há arquivo ‘pai/__init__.py’.  De
fato, pode haver vários diretórios ‘pai’ encontrados durante a pesquisa
de importação, onde cada um é fornecido por uma parte diferente.
Portanto, ‘pai/um’ pode não estar fisicamente localizado próximo a
‘pai/dois’.  Nesse caso, o Python criará um pacote de espaço de nomes
para o pacote ‘pai’ de nível superior sempre que ele ou um de seus
subpacotes for importado.

Veja também PEP 420(1) para a especificação de pacotes de espaço de
nomes.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0420/


File: python.info,  Node: Caminho de busca,  Next: Carregando,  Prev: Pacotes<2>,  Up: O sistema de importação

4.5.3 Caminho de busca
----------------------

Para iniciar a busca, o Python precisa do nome *note completo: 1ab1. do
módulo (ou pacote, mas para o propósito dessa exposição, não há
diferença) que se quer importar.  Esse nome vem de vários argumentos
passados para a instrução *note import: 5e2, ou dos parâmetros das
funções *note importlib.import_module(): 518. ou *note __import__():
8da.

Esse nome será usado em várias fases da busca da importação, e pode ser
um nome com pontos para um submódulo como, por exemplo, ‘foo.bar.baz’.
Nesse caso, Python primeiro tenta importar ‘foo’, depois ‘foo.bar’ e,
finalmente, ‘foo.bar.baz’.  Se alguma das importações intermediárias
falharem, uma exceção *note ModuleNotFoundError: b5b. é levantada.

* Menu:

* O cache de módulos::
* Localizadores e carregadores::
* Ganchos de importação::
* O metacaminho::


File: python.info,  Node: O cache de módulos,  Next: Localizadores e carregadores,  Up: Caminho de busca

4.5.3.1 O cache de módulos
..........................

A primeira verificação durante a busca da importação é feita no *note
sys.modules: 1636.  Esse mapeamento serve como um cache de todos os
módulos que já foram importados previamente, incluindo os caminhos
intermediários.  Se ‘foo.bar.baz’ foi previamente importado, *note
sys.modules: 1636. conterá entradas para ‘foo’, ‘foo.bar’ e
‘foo.bar.baz’.  Cada chave terá como valor um objeto módulo
correspondente.

Durante a importação, o nome do módulo é procurado em *note sys.modules:
1636. e, se estiver presente, o valor associado é o módulo que satisfaz
a importação, e o processo termina.  Entretanto, se o valor é ‘None’,
uma exceção *note ModuleNotFoundError: b5b. é levantada.  Se o nome do
módulo não foi encontrado, Python continuará a busca pelo módulo.

É possível alterar *note sys.modules: 1636.  Apagar uma chave pode não
destruir o objeto módulo associado (outros módulos podem manter
referências para ele), mas a entrada do cache será invalidada para o
nome daquele módulo, fazendo Python executar nova busca na próxima
importação.  Pode ser atribuído ‘None’ para a chave, forçando que a
próxima importação do módulo resulte numa exceção *note
ModuleNotFoundError: b5b.

No entanto, tenha cuidado, pois se você mantiver uma referência para o
objeto módulo, invalidar sua entrada de cache em *note sys.modules:
1636. e, em seguida, reimportar do módulo nomeado, os dois módulo
objetos 'não' serão os mesmos.  Por outro lado, o *note
importlib.reload(): 519. reutilizará o 'mesmo' objeto módulo e
simplesmente reinicializará o conteúdo do módulo executando novamente o
código do módulo.


File: python.info,  Node: Localizadores e carregadores,  Next: Ganchos de importação,  Prev: O cache de módulos,  Up: Caminho de busca

4.5.3.2 Localizadores e carregadores
....................................

Se o módulo nomeado não for encontrado em *note sys.modules: 1636, então
o protocolo de importação do Python é invocado para localizar e carregar
o módulo.  Este protocolo consiste em dois objetos conceituais, *note
localizadores: 20ae. e *note carregadores: 17a4.  O trabalho de um
localizador é determinar se ele pode localizar o módulo nomeado usando
qualquer estratégia que ele conheça.  Objetos que implementam ambas
essas interfaces são referenciadas como *note importadores: 2184. – eles
retornam a si mesmos, quando eles descobrem que eles podem carregar o
módulo requisitado.

Python inclui um número de localizadores e carregadores padrões.  O
primeiro sabe como localizar módulos embutidos, e o segundo sabe como
localizar módulos congelados.  Um terceiro localizador padrão procura em
um *note caminho de importação: 2185. por módulos.  O *note caminho de
importação: 2185. é uma lista de localizações que podem nomear caminhos
de sistema de arquivo ou arquivos zip.  Ele também pode ser estendido
para buscar por qualquer recurso localizável, tais como aqueles
identificados por URLs.

O mecanismo de importação é extensível, então novos localizadores podem
ser adicionados para estender o alcance e o escopo de buscar módulos.

Localizadores na verdade não carregam módulos.  Se eles conseguirem
encontrar o módulo nomeado, eles retornam um 'spec de módulo', um
encapsulamento da informação relacionada a importação do módulo, a qual
o mecanismo de importação então usa quando o módulo é carregado.

As seguintes seções descrevem o protocolo para localizadores e
carregadores em mais detalhes, incluindo como você pode criar e
registrar novos para estender o mecanismo de importação.

Alterado na versão 3.4: Em versões anteriores do Python, localizadores
retornavam *note carregadores: 17a4. diretamente, enquanto agora eles
retornam especificações de módulo, as qual 'contêm' carregadores.
Carregadores ainda são usados durante a importação, mas possuem menos
responsabilidades.


File: python.info,  Node: Ganchos de importação,  Next: O metacaminho,  Prev: Localizadores e carregadores,  Up: Caminho de busca

4.5.3.3 Ganchos de importação
.............................

O mecanismo de importação é desenhado para ser extensível; o mecanismo
primário para isso são os 'ganchos de importação'.  Existem dois tipos
de ganchos de importação: 'metaganchos' e 'ganchos de importação de
caminho'.

Metaganchos são chamados no início do processo de importação, antes que
qualquer outro processo de importação tenha ocorrido, que não seja busca
de cache de *note sys.modules: 1636.  Isso permite aos metaganchos
substituir processamento de *note sys.path: 3b4, módulos congelados ou
mesmo módulos embutidos.  Metaganchos são registrados adicionando novos
objetos localizadores a *note sys.meta_path: d4d, conforme descrito
abaixo.

Ganchos de caminho de importação são chamados como parte do
processamento de *note sys.path: 3b4. (ou ‘package.__path__’), no ponto
onde é encontrado o item do caminho associado.  Ganchos de caminho de
importação são registrados adicionando novos chamáveis para *note
sys.path_hooks: 105a, conforme descrito abaixo.


File: python.info,  Node: O metacaminho,  Prev: Ganchos de importação,  Up: Caminho de busca

4.5.3.4 O metacaminho
.....................

Quando o módulo nomeado não é encontrado em *note sys.modules: 1636, o
Python em seguida o busca em *note sys.meta_path: d4d, o qual contém uma
lista de objetos localizadores de metacaminho.  Esses localizadores são
consultados a fim de verificar se eles sabem como manipular o módulo
nomeado.  Os localizadores de metacaminho devem implementar um método
chamado *note find_spec(): 86c, o qual recebe três argumentos: um nome,
um caminho de importação, e (opcionalmente) um módulo alvo.  O
localizador de metacaminho pode usar qualquer estratégia que ele quiser
para determinar se ele pode manipular o módulo nomeado ou não.

Se o localizador de metacaminho souber como tratar o módulo nomeado, ele
retorna um objeto spec.  Se ele não puder tratar o módulo nomeado, ele
retorna ‘None’.  Se o processamento de *note sys.meta_path: d4d.
alcançar o fim da sua lista sem retornar um spec, então *note
ModuleNotFoundError: b5b. é levantada.  Quaisquer outras exceções
levantadas são simplesmente propagadas para cima, abortando o processo
de importação.

O método *note find_spec(): 86c. dos localizadores de metacaminhos é
chamado com dois ou três argumentos.  O primeiro é o nome totalmente
qualificado do módulo sendo importado, por exemplo ‘foo.bar.baz’.  O
segundo argumento são as entradas do caminho a ser usado na busca do
módulo.  Para módulos de nível superior, o segundo argumento é ‘None’,
mas para submódulos ou subpacotes, o segundo argumento é o valor do
atributo ‘__path__’ do pacote pai.  Se o atributo ‘__path__’ apropriado
não puder ser acessado, uma exceção *note ModuleNotFoundError: b5b. é
levantada.  O terceiro argumento é um objeto módulo existente que será o
alvo do carregamento posteriormente.  O sistema de importação passa um
módulo alvo apenas durante o recarregamento.

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 ‘foo.bar.baz’ irá primeiro
executar 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, ‘foo.bar’ será importado percorrendo o metacaminho
uma segunda vez, chamando ‘mpf.find_spec("foo.bar", foo.__path__,
None)’.  Uma vez que ‘foo.bar’ tenha sido importado, a travessia final
irá chamar ‘mpf.find_spec("foo.bar.baz", foo.bar.__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 *note sys.meta_path: d4d. padrão do Python possui três localizador de
metacaminho, um que sabe como importar módulos embutidos, um que sabe
como importar módulos congelados, e outro que sabe como importar módulos
de um *note caminho de importação: 2185. (isto é, o *note localizador
baseado no caminho: 2188.).

Alterado na versão 3.4: O método *note find_spec(): 86c. 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 *note
find_spec(): 86c.

Alterado na versão 3.10: O uso de ‘find_module()’ pelo sistema de
importação agora levanta *note ImportWarning: 4fa.

Alterado na versão 3.12: ‘find_module()’ foi removido.  Use *note
find_spec(): 86c.


File: python.info,  Node: Carregando,  Next: O localizador baseado no caminho,  Prev: Caminho de busca,  Up: O sistema de importação

4.5.4 Carregando
----------------

Se e quando uma spec de módulo é encontrada, o mecanismo de importação
vai usá-la (e o carregador que ela contém) durante o carregamento do
módulo.  Esta é uma aproximação do que acontece durante a etapa de
carregamento de uma importação:

     module = None
     if spec.loader is not None and hasattr(spec.loader, 'create_module'):
         # É assumido que o carregador também define 'exec_module'.
         module = spec.loader.create_module(spec)
     if module is None:
         module = ModuleType(spec.name)
     # Define os atributos do módulo relacionados à importação:
     _init_module_attrs(spec, module)

     if spec.loader is None:
         # não suportado
         raise ImportError
     if spec.origin is None and spec.submodule_search_locations is not None:
         # pacote espaço de nomes
         sys.modules[spec.name] = module
     elif not hasattr(spec.loader, 'exec_module'):
         module = spec.loader.load_module(spec.name)
     else:
         sys.modules[spec.name] = module
         try:
             spec.loader.exec_module(module)
         except BaseException:
             try:
                 del sys.modules[spec.name]
             except KeyError:
                 pass
             raise
     return sys.modules[spec.name]

Perceba os seguintes detalhes:

   * Se houver um objeto módulo existente com o nome fornecido em *note
     sys.modules: 1636, a importação já tera retornado ele.

   * O módulo irá existir em *note sys.modules: 1636. antes do
     carregador executar o código do módulo.  Isso é crucial porque o
     código do módulo pode (direta ou indiretamente) importar a si
     mesmo; adicioná-lo a *note sys.modules: 1636. antecipadamente
     previne recursão infinita no pior caso e múltiplos carregamentos no
     melhor caso.

   * Se o carregamento falhar, o módulo com falha – e apenas o módulo
     com falha – é removido de *note sys.modules: 1636.  Qualquer módulo
     já presente no cache de *note sys.modules: 1636, e qualquer módulo
     que tenha sido carregado com sucesso como um efeito colateral, deve
     permanecer no cache.  Isso contrasta com recarregamento, onde mesmo
     o módulo com falha é mantido em *note sys.modules: 1636.

   * Depois que o módulo é criado, mas antes da execução, o mecanismo de
     importação define os atributos de módulo relacionados a importação
     (“_init_module_attrs” no exemplo de pseudocódigo acima), assim como
     foi resumido em *note uma seção posterior: 20a4.

   * Execução de módulo é o momento chave do carregamento, no qual o
     espaço de nomes do módulo é populado.  Execução é inteiramente
     delegada para o carregador, o qual pode decidir o que será populado
     e como.

   * O módulo criado durante o carregamento e passado para exec_module()
     pode não ser aquele retornado ao final da importação (1).

Alterado na versão 3.4: O sistema de importação tem tomado conta das
responsabilidades inerentes dos carregadores.  Essas responsabilidades
eram anteriormente executadas pelo método *note
importlib.abc.Loader.load_module(): 86d.

* Menu:

* Carregadores::
* Submódulos::
* Especificações de módulo::
* Atributo __path__ dos módulos::
* Representações do módulo::
* Invalidação de bytecode em cache::

   ---------- Footnotes ----------

   (1) A implementação de importlib evita usar o valor de retorno
diretamente.  Em vez disso, ela obtém o objeto do módulo procurando o
nome do módulo em *note sys.modules: 1636.  O efeito indireto disso é
que um módulo importado pode substituir a si mesmo em *note sys.modules:
1636.  Esse é um comportamento específico da implementação que não tem
garantia de funcionar em outras implementações do Python.


File: python.info,  Node: Carregadores,  Next: Submódulos,  Up: Carregando

4.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 *note
importlib.abc.Loader.exec_module(): 86e. com um único argumento, o
objeto do módulo a ser executado.  Qualquer valor retornado de *note
exec_module(): 86e. é 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 dinamicamente), 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
     exceção *note ImportError: 419, embora qualquer outra exceção
     levantada durante *note exec_module(): 86e. será propagada.

Em muitos casos, o localizador e o carregador podem ser o mesmo objeto;
nesses casos o método *note find_spec(): 86c. apenas retornaria um spec
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 *note create_module():
cce.  Leva um argumento, o spec de 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 *note create_module(): cce. de
carregadores.

Alterado na versão 3.4: O método *note load_module(): 86d. foi
substituído por *note exec_module(): 86e. e o mecanismo de importaçã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
     *note sys.modules: 1636, o carregador deverá usar esse módulo
     existente.  (Caso contrário, *note importlib.reload(): 519. não
     funcionará corretamente.)  Se o módulo nomeado não existir em *note
     sys.modules: 1636, o carregador deverá criar um novo objeto de
     módulo e adicioná-lo a *note sys.modules: 1636.

   * O módulo 'deve' existir em *note sys.modules: 1636. 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 *note sys.modules: 1636, 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 *note DeprecationWarning: 1a5. é
levantada quando ‘exec_module()’ está definido, mas ‘create_module()’
não.

Alterado na versão 3.6: Uma exceção *note ImportError: 419. é levantada
quando ‘exec_module()’ está definido, mas ‘create_module()’ não.

Alterado na versão 3.10: O uso de ‘load_module()’ vai levantar *note
ImportWarning: 4fa.


File: python.info,  Node: Submódulos,  Next: Especificações de módulo,  Prev: Carregadores,  Up: Carregando

4.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 a função
‘__import__()’ embutida) 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 ‘spam.foo’, ‘spam’ terá um
atributo ‘foo’ que está vinculado ao submódulo.  Digamos que você tenha
a seguinte estrutura de diretórios:

     spam/
         __init__.py
         foo.py

e ‘spam/__init__.py’ tem a seguinte linha:

     from .foo import Foo

então executar o seguinte coloca ligações de nome para ‘foo’ e ‘Foo’ no
módulo ‘spam’:

     >>> import spam
     >>> spam.foo
     <module 'spam.foo' from '/tmp/imports/spam/foo.py'>
     >>> spam.Foo
     <class 'spam.foo.Foo'>

Dadas as conhecidas regras de ligação de nomes do Python, isso pode
parecer surpreendente, mas na verdade é um recurso fundamental do
sistema de importação.  A propriedade invariante é que se você tiver
‘sys.modules['spam']’ e ‘sys.modules['spam.foo']’ (como faria após a
importação acima), o último deve aparecer como o atributo ‘foo’ do
primeiro.


File: python.info,  Node: Especificações de módulo,  Next: Atributo __path__ dos módulos,  Prev: Submódulos,  Up: Carregando

4.5.4.3 Especificações de módulo
................................

O mecanismo de importação utiliza diversas informações sobre cada módulo
durante a importação, principalmente antes do carregamento.  A maior
parte das informações é comum a todos os módulos.  O propósito da spec
do módulo é encapsular essas informações relacionadas à importação por
módulo.

Usar um spec durante a importação permite que o estado seja transferido
entre componentes do sistema de importação, por exemplo entre o
localizador que cria o spec de módulo e o carregador que o executa.
Mais importante ainda, permite que o mecanismo de importação execute as
operações inerentes de carregamento, enquanto que sem um spec de módulo
o carregador tinha essa responsabilidade.

O spec do módulo é exposto no atributo *note module.__spec__: 20a7.  A
configuração oportuna do ‘__spec__’ se aplica igualmente aos *note
módulos inicializados durante a inicialização do interpretador: 218d.  A
única exceção é o ‘__main__’, cujo ‘__spec__’ é *note definido como None
em alguns casos: 218e.

Consulte *note ModuleSpec: 1fee. para detalhes sobre o conteúdo do spec
de módulo.

Adicionado na versão 3.4.


File: python.info,  Node: Atributo __path__ dos módulos,  Next: Representações do módulo,  Prev: Especificações de módulo,  Up: Carregando

4.5.4.4 Atributo __path__ dos módulos
.....................................

O atributo *note __path__: 1df4. deve ser uma *note sequência: 4f1.
(possivelmente vazia) de strings enumerando os locais onde os submódulos
do pacote serão encontrados.  Por definição, um módulo que tenha um
atributo ‘__path__’ é um *note pacote: 20aa.

O atributo *note __path__: 1df4. de um pacote é usado durante as
importações de seus subpacotes.  Dentro do mecanismo de importação,
funciona da mesma forma que *note sys.path: 3b4, ou seja, fornecendo uma
lista de locais para procurar módulos durante a importação.  Entretanto,
o ‘__path__’ normalmente é muito mais restrito que ‘sys.path’.

As mesmas regras usadas para *note sys.path: 3b4. também se aplicam ao
‘__path__’ de um pacote.  Os *note sys.path_hooks: 105a. (descritos
abaixo) são consultados ao percorrer o ‘__path__’ de um pacote.

O arquivo ‘__init__.py’ de um pacote pode definir ou alterar o atributo
*note __path__: 1df4. do pacote, e esta era tipicamente a forma como os
pacotes de espaço de nomes eram implementados antes da PEP 420(1).  Com
a adoção da PEP 420(2), os pacotes de espaço de nomes não precisam mais
fornecer arquivos ‘__init__.py’ contendo apenas código de manipulação do
‘__path__’; o mecanismo de importação define automaticamente o
‘__path__’ corretamente para o pacote de espaço de nomes.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0420/

   (2) https://peps.python.org/pep-0420/


File: python.info,  Node: Representações do módulo,  Next: Invalidação de bytecode em cache,  Prev: Atributo __path__ dos módulos,  Up: Carregando

4.5.4.5 Representações do módulo
................................

Por padrão, todos os módulos têm uma representação (repr) utilizável, no
entanto, dependendo dos atributos definidos acima e do spec do módulo,
você pode controlar mais explicitamente a representação dos objetos
módulo.

Se o módulo tiver um spec (‘__spec__’), o mecanismo de importação
tentará gerar uma representação a partir dele.  Se isso falhar ou não
houver nenhuma especificação, o sistema de importação criará uma
representação padrão usando qualquer informação disponível no módulo.
Ele tentará usar ‘module.__name__’, ‘module.__file__’ e
‘module.__loader__’ como entrada para a representação, com padrões para
qualquer informação que esteja faltando.

Arquivo estão as exatas regras usadas:

   * Se o módulo tiver um atributo ‘__spec__’, a informação no spec é
     usada para gerar a representação.  Os atributos “name”, “loader”,
     “origin” e “has_location” são consultados.

   * Se o módulo tiver um atributo ‘__file__’, ele será usado como parte
     da representação do módulo.

   * Se o módulo não tem ‘__file__’ mas tem um ‘__loader__’ que não seja
     ‘None’, então a representação do carregador é usado como parte da
     representação do módulo.

   * Caso contrário, basta usar o ‘__name__’ do módulo na representação.

Alterado na versão 3.12: O uso de ‘module_repr()’, descontinuado desde o
Python 3.4, foi removido no Python 3.12 e não é mais chamado durante a
resolução da representação de um módulo.


File: python.info,  Node: Invalidação de bytecode em cache,  Prev: Representações do módulo,  Up: Carregando

4.5.4.6 Invalidação de bytecode em cache
........................................

Antes do Python carregar o bytecode armazenado em cache de um arquivo
‘.pyc’, ele verifica se o cache está atualizado com o arquivo fonte
‘.py’.  Por padrão, o Python faz isso armazenando o registro de data e
hora da última modificação da fonte e o tamanho no arquivo de cache ao
escrevê-lo.  No tempo de execução, o sistema de importação valida o
arquivo de cache verificando os metadados armazenados no arquivo de
cache em relação aos metadados do código-fonte.

Python também oferece suporte a arquivos de cache “baseados em hash”,
que armazenam um hash do conteúdo do arquivo fonte em vez de seus
metadados.  Existem duas variantes de arquivos ‘.pyc’ baseados em hash:
verificados e não verificados.  Para arquivos ‘.pyc’ baseados em hash
verificados, o Python valida o arquivo de cache fazendo hash do arquivo
fonte e comparando o hash resultante com o hash no arquivo de cache.  Se
um arquivo de cache baseado em hash verificado for inválido, o Python o
regenerará e gravará um novo arquivo de cache baseado em hash
verificado.  Para arquivos ‘.pyc’ baseados em hash não verificados, o
Python simplesmente presume que o arquivo de cache é válido, se existir.
O comportamento de validação de arquivos ‘.pyc’ baseados em hash pode
ser substituído pelo sinalizador *note -check-hash-based-pycs: 1eba.

Alterado na versão 3.7: Adicionados arquivos ‘.pyc’ baseados em hash.
Anteriormente, o Python oferecia suporte apenas à invalidação de caches
de bytecode baseada em registro de data e hora.


File: python.info,  Node: O localizador baseado no caminho,  Next: Substituindo o sistema de importação padrão,  Prev: Carregando,  Up: O sistema de importação

4.5.5 O localizador baseado no caminho
--------------------------------------

Conforme mencionado anteriormente, Python vem com vários localizadores
de metacaminho padrão.  Um deles, chamado *note localizador baseado no
caminho: 2188. (*note PathFinder: 1059.), pesquisa um *note caminho de
importação: 2185, que contém uma lista de *note entradas de caminho:
2193.  Cada entrada de caminho nomeia um local para procurar módulos.

O próprio localizador baseado no caminho não sabe como importar nada.
Em vez disso, ele percorre as entradas de caminho individuais,
associando cada uma delas a um localizador de entrada de caminho que
sabe como lidar com esse tipo específico de caminho.

O conjunto padrão de localizadores de entrada de caminho implementa toda
a semântica para localizar módulos no sistema de arquivos, manipulando
tipos de arquivos especiais, como código-fonte Python (arquivos ‘.py’),
código de bytes Python (arquivos ‘.pyc’) e bibliotecas compartilhadas
(por exemplo, arquivos ‘.so’).  Quando suportado pelo módulo *note
zipimport: 132. na biblioteca padrão, os localizadores de entrada de
caminho padrão também lidam com o carregamento de todos esses tipos de
arquivos (exceto bibliotecas compartilhadas) de arquivos zip.

As entradas de caminho não precisam ser limitadas aos locais do sistema
de arquivos.  Eles podem referir-se a URLs, consultas de banco de dados
ou qualquer outro local que possa ser especificado como uma string.

O localizador baseado no caminho fornece ganchos e protocolos adicionais
para que você possa estender e personalizar os tipos de entradas de
caminho pesquisáveis.  Por exemplo, se você quiser oferecer suporte a
entradas de caminho como URLs de rede, poderá escrever um gancho que
implemente a semântica HTTP para localizar módulos na web.  Este gancho
(um chamável) retornaria um *note localizador de entrada de caminho:
10aa. suportando o protocolo descrito abaixo, que foi então usado para
obter um carregador para o módulo da web.

Uma palavra de advertência: esta seção e a anterior usam o termo
'localizador', distinguindo-os usando os termos *note localizador de
metacaminho: 10a9. e *note localizador de entrada de caminho: 10aa.
Esses dois tipos de localizadores são muito semelhantes, oferecem
suporte a protocolos semelhantes e funcionam de maneira semelhante
durante o processo de 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 *note sys.meta_path: d4d.

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 *note
sys.meta_path: d4d, nenhuma semântica do localizador de entrada de
caminho seria ser invocado.

* Menu:

* Localizadores de entrada de caminho::
* Protocolo do localizador de entrada de caminho::


File: python.info,  Node: Localizadores de entrada de caminho,  Next: Protocolo do localizador de entrada de caminho,  Up: O localizador baseado no caminho

4.5.5.1 Localizadores de entrada de caminho
...........................................

O *note localizador baseado no caminho: 2188. é responsável por
encontrar e carregar módulos e pacotes Python cuja localização é
especificada com uma string *note entrada de caminho: 2193.  A maioria
das entradas de caminho nomeiam locais no sistema de arquivos, mas não
precisam ser limitadas a isso.

Como um localizador de metacaminho, o *note localizador baseado no
caminho: 2188. implementa o protocolo *note find_spec(): 86c. descrito
anteriormente, no entanto, ele expõe ganchos adicionais que podem ser
usados para personalizar como os módulos são encontrados e carregado do
*note caminho de importação: 2185.

Três variáveis são usadas pelo *note localizador baseado no caminho:
2188, *note sys.path: 3b4, *note sys.path_hooks: 105a. e *note
sys.path_importer_cache: 5e4.  Os atributos ‘__path__’ em objetos de
pacote também são usados.  Eles fornecem maneiras adicionais de
personalizar o mecanismo de importação.

*note sys.path: 3b4. contém uma lista de strings fornecendo locais de
pesquisa para módulos e pacotes.  Ele é inicializado a partir da
variável de ambiente *note PYTHONPATH: 1053. e vários outros padrões
específicos de instalação e implementação.  Entradas em *note sys.path:
3b4. podem nomear diretórios no sistema de arquivos, arquivos zip e
potencialmente outros “locais” (veja o módulo *note site: c7.) que devem
ser pesquisados por módulos, como URLs, ou consultas ao banco de dados.
Apenas strings devem estar presentes em *note sys.path: 3b4.; todos os
outros tipos de dados são ignorados.

O *note localizador baseado no caminho: 2188. é um *note localizador de
metacaminho: 10a9, então o mecanismo de importação inicia a pesquisa no
*note caminho de importação: 2185. chamando o método *note find_spec():
1047. do localizador baseado no caminho conforme descrito anteriormente.
Quando o argumento ‘path’ para *note find_spec(): 1047. for fornecido,
será uma lista de caminhos de string a serem percorridos – normalmente o
atributo ‘__path__’ de um pacote para uma importação dentro desse
pacote.  Se o argumento ‘path’ for ‘None’, isso indica uma importação de
nível superior e *note sys.path: 3b4. é usado.

O localizador baseado no caminho itera sobre cada entrada no caminho de
pesquisa e, para cada uma delas, procura um *note localizador de entrada
de caminho: 10aa. (*note PathEntryFinder: 873.) apropriado para a
entrada do caminho.  Como esta pode ser uma operação custosa (por
exemplo, pode haver sobrecargas de chamada ‘stat()’ para esta pesquisa),
o localizador baseado no caminho mantém um cache mapeando entradas de
caminho para localizadores de entrada de caminho.  Este cache é mantido
em *note sys.path_importer_cache: 5e4. (apesar do nome, este cache na
verdade armazena objetos localizadores em vez de ser limitado a objetos
*note importador: 2184.).  Desta forma, a dispendiosa busca pelo *note
localizador de entrada de caminho: 10aa. de local específico de uma
*note entrada de caminho: 2193. só precisa ser feita uma vez.  O código
do usuário é livre para remover entradas de cache de *note
sys.path_importer_cache: 5e4, forçando o localizador baseado no caminho
a realizar a pesquisa de entrada de caminho novamente.

Se a entrada de caminho não estiver presente no cache, o localizador
baseado no caminho itera sobre cada chamável em *note sys.path_hooks:
105a.  Cada um dos *note ganchos de entrada de caminho: 2195. nesta
lista é chamado com um único argumento, a entrada de caminho a ser
pesquisada.  Este chamável pode retornar um *note localizador de entrada
de caminho: 10aa. que pode manipular a entrada de caminho ou pode
levantar *note ImportError: 419.  Um *note ImportError: 419. é usado
pelo localizador baseado no caminho para sinalizar que o gancho não
consegue encontrar um *note localizador de entrada de caminho: 10aa.
para aquela *note entrada de caminho: 2193.  A exceção é ignorada e a
iteração com o *note caminho de importação: 2185. continua.  O gancho
deve esperar um objeto string ou bytes; a codificação de objetos bytes
depende do gancho (por exemplo, pode ser uma codificação de sistema de
arquivos, UTF-8 ou outra coisa) e, se o gancho não puder decodificar o
argumento, ele deve levantar *note ImportError: 419.

Se a iteração *note sys.path_hooks: 105a. terminar sem que nenhum *note
localizador de entrada de caminho: 10aa. seja retornado, o método *note
find_spec(): 1047. do localizador baseado no caminho armazenará ‘None’
em *note sys.path_importer_cache: 5e4. (para indicar que não há um
localizador para esta entrada de caminho) e retornará ‘None’, indicando
que este *note localizador de metacaminho: 10a9. não conseguiu encontrar
o módulo.

Se um *note localizador de entrada de caminho: 10aa. 'for' retornado por
um dos chamáveis de *note gancho de entrada de caminho: 2195. em *note
sys.path_hooks: 105a, então o seguinte protocolo é usado para solicitar
ao localizador um spec de módulo, que é então usada ao carregar o
módulo.

O diretório de trabalho atual – denotado por uma string vazia – é
tratado de forma ligeiramente diferente de outras entradas em *note
sys.path: 3b4.  Primeiro, se o diretório de trabalho atual for
considerado inexistente, nenhum valor será armazenado em *note
sys.path_importer_cache: 5e4.  Segundo, o valor para o diretório de
trabalho atual é pesquisado novamente para cada pesquisa de módulo.
Terceiro, o caminho usado para *note sys.path_importer_cache: 5e4. e
retornado por *note importlib.machinery.PathFinder.find_spec(): 1047.
será o diretório de trabalho atual real e não a string vazia.


File: python.info,  Node: Protocolo do localizador de entrada de caminho,  Prev: Localizadores de entrada de caminho,  Up: O localizador baseado no caminho

4.5.5.2 Protocolo do localizador de entrada de caminho
......................................................

Para dar suporte a importações de módulos e pacotes inicializados e
também contribuir com partes para pacotes de espaço de nomes, os
localizadores de entrada de caminho devem implementar o método *note
find_spec(): 870.

*note find_spec(): 870. recebe dois argumentos: o nome totalmente
qualificado do módulo que está sendo importado e o módulo de destino
(opcional).  ‘find_spec()’ retorna um spec totalmente preenchido para o
módulo.  Este spec sempre terá “loader” definido (com uma exceção).

Para indicar ao maquinário de importação que o spec representa uma *note
porção: 217f. de espaço de nomes, o localizador de entrada de caminho
define ‘submodule_search_locations’ como uma lista contendo a porção.

Alterado na versão 3.4: *note find_spec(): 870. substituiu
‘find_loader()’ e ‘find_module()’, ambos descontinuados, mas serão
usados se ‘find_spec()’ não estiver definido.

Os localizadores de entrada de caminho mais antigos podem implementar um
desses dois métodos descontinuados em vez de ‘find_spec()’.  Os métodos
ainda são respeitados para fins de compatibilidade com versões
anteriores.  No entanto, se ‘find_spec()’ for implementado no
localizador de entrada de caminho, os métodos legados serão ignorados.

‘find_loader()’ recebe um argumento, o nome totalmente qualificado do
módulo que está sendo importado.  ‘find_loader()’ retorna uma tupla 2
onde o primeiro item é o carregador e o segundo item é uma *note porção:
217f. de espaço de nomes.

Para compatibilidade com versões anteriores de outras implementações do
protocolo de importação, muitos localizadores de entrada de caminho
também dão suporte ao mesmo método tradicional ‘find_module()’ que os
localizadores de metacaminho.  No entanto, os métodos ‘find_module()’ do
localizador de entrada de caminho nunca são chamados com um argumento
‘path’ (espera-se que eles registrem as informações de caminho
apropriadas da chamada inicial para o gancho de caminho).

O método ‘find_module()’ em localizadores de entrada de caminho foi
descontinuado, pois não permite que o localizador de entrada de caminho
contribua com porções para pacotes de espaço de nomes.  Se
‘find_loader()’ e ‘find_module()’ existirem em um localizador de entrada
de caminho, o sistema de importação sempre chamará ‘find_loader()’ em
preferência a ‘find_module()’.

Alterado na versão 3.10: Chamadas para ‘find_module()’ e ‘find_loader()’
pelo sistema de importação vão levantar *note ImportWarning: 4fa.

Alterado na versão 3.12: ‘find_module()’ e ‘find_loader()’ foram
removidos.


File: python.info,  Node: Substituindo o sistema de importação padrão,  Next: Importações relativas ao pacote,  Prev: O localizador baseado no caminho,  Up: O sistema de importação

4.5.6 Substituindo o sistema de importação padrão
-------------------------------------------------

O mecanismo mais confiável para substituir todo o sistema de importação
é excluir o conteúdo padrão de *note sys.meta_path: d4d, substituindo-o
inteiramente por um gancho de metacaminho personalizado.

If it is acceptable to only alter the behaviour of import statements
without affecting other APIs that access the import system, then
replacing the builtin *note __import__(): 8da. function may be
sufficient.

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 *note ModuleNotFoundError:
b5b. diretamente de *note find_spec(): 86c. em vez de retornar ‘None’.
O último indica que a busca do metacaminho deve continuar, enquanto
levantar uma exceção a encerra imediatamente.


File: python.info,  Node: Importações relativas ao pacote,  Next: Considerações especiais para __main__,  Prev: Substituindo o sistema de importação padrão,  Up: O sistema de importação

4.5.7 Importações relativas ao pacote
-------------------------------------

Importações relativas usam caracteres de ponto no início.  Um único
ponto no início indica uma importação relativa, começando com o pacote
atual.  Dois ou mais pontos no início indicam uma importação relativa
para o(s) pai(s) do pacote atual, um nível por ponto após o primeiro.
Por exemplo, dado o seguinte layout de pacote:

     package/
         __init__.py
         subpackage1/
             __init__.py
             moduleX.py
             moduleY.py
         subpackage2/
             __init__.py
             moduleZ.py
         moduleA.py

Em ‘subpackage1/moduleX.py’ ou ‘subpackage1/__init__.py’, as seguintes
são importações relativas válidas:

     from .moduleY import spam
     from .moduleY import spam as ham
     from . import moduleY
     from ..subpackage1 import moduleY
     from ..subpackage2.moduleZ import eggs
     from ..moduleA import foo

Importações absolutas podem usar a sintaxe ‘import <>’ ou ‘from <>
import <>’, mas importações relativas podem usar apenas a segunda forma;
o motivo para isso é que:

     import XXX.YYY.ZZZ

deve expor ‘XXX.YYY.ZZZ’ como uma expressão utilizável, mas .moduleY não
é uma expressão válida.


File: python.info,  Node: Considerações especiais para __main__,  Next: Referências,  Prev: Importações relativas ao pacote,  Up: O sistema de importação

4.5.8 Considerações especiais para __main__
-------------------------------------------

O módulo *note __main__: 1. é um caso especial em relação ao sistema de
importação do Python.  Conforme observado em *note em outro lugar: 218d,
o módulo ‘__main__’ é inicializado diretamente na inicialização do
interpretador, muito parecido com *note sys: d9. e *note builtins: 12.
No entanto, diferentemente desses dois, ele não se qualifica
estritamente como um módulo integrado.  Isso ocorre porque a maneira
como ‘__main__’ é inicializado depende dos sinalizadores e outras opções
com as quais o interpretador é invocado.

* Menu:

* __main__.__spec__: __main__ __spec__.


File: python.info,  Node: __main__ __spec__,  Up: Considerações especiais para __main__

4.5.8.1 __main__.__spec__
.........................

Dependendo de como *note __main__: 1. é inicializado,
‘__main__.__spec__’ é definido apropriadamente ou como ‘None’.

Quando o Python é iniciado com a opção *note -m: 5e1, ‘__spec__’ é
definido como o spec de 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 *note sys.path:
3b4.

*note Nos demais casos: 1eb3, ‘__main__.__spec__’ é definido como
‘None’, pois o código usado para preencher o *note __main__: 1. não
corresponde diretamente a um módulo importável:

   - prompt interativo

   - opção *note -c: 5e0.

   - 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 diretamente como um módulo.  Use a opção
*note -m: 5e1. se metadados de módulo válidos forem desejados em *note
__main__: 1.

Note também que mesmo quando ‘__main__’ corresponde a um módulo
importável e ‘__main__.__spec__’ é definido 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 preencher o espaço de
nomes ‘__main__’, e não durante a importação normal.


File: python.info,  Node: Referências,  Prev: Considerações especiais para __main__,  Up: O sistema de importação

4.5.9 Referências
-----------------

O maquinário de importação evoluiu consideravelmente desde os primeiros
dias do Python.  A especificação original para pacotes(1) ainda está
disponível para leitura, embora alguns detalhes tenham mudado desde a
escrita desse documento.

A especificação original para *note sys.meta_path: d4d. era PEP 302(2),
com extensão subsequente em PEP 420(3).

PEP 420(4) introduziu *note pacotes de espaço de nomes: 1dee. para
Python 3.3.  PEP 420(5) também introduziu o protocolo ‘find_loader()’
como uma alternativa ao ‘find_module()’.

PEP 366(6) descreve a adição do atributo ‘__package__’ para importações
relativas explícitas em módulos principais.

PEP 328(7) introduziu importações relativas absolutas e explícitas e
inicialmente propôs ‘__name__’ para semântica.  PEP 366(8) eventualmente
especificaria ‘__package__’.

PEP 338(9) define módulos de execução como scripts.

PEP 451(10) adiciona o encapsulamento do estado de importação por módulo
em objetos spec.  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.

   ---------- Footnotes ----------

   (1) https://www.python.org/doc/essays/packages/

   (2) https://peps.python.org/pep-0302/

   (3) https://peps.python.org/pep-0420/

   (4) https://peps.python.org/pep-0420/

   (5) https://peps.python.org/pep-0420/

   (6) https://peps.python.org/pep-0366/

   (7) https://peps.python.org/pep-0328/

   (8) https://peps.python.org/pep-0366/

   (9) https://peps.python.org/pep-0338/

   (10) https://peps.python.org/pep-0451/


File: python.info,  Node: Expressões,  Next: Instruções simples,  Prev: O sistema de importação,  Up: A Referência da Linguagem Python

4.6 Expressões
==============

Este capítulo explica o significado dos elementos das expressões em
Python.

'Notas de sintaxe:' Neste e nos capítulos seguintes, a notação BNF
estendida será usada para descrever a sintaxe, não a análise lexical.
Quando (uma alternativa de) uma regra de sintaxe tem a forma

     name ::= othername

e nenhuma semântica é fornecida, a semântica desta forma de ‘name’ é a
mesma que para ‘othername’.

* Menu:

* Conversões aritméticas::
* Átomos::
* Primárias::
* Expressão await::
* O operador de potência::
* Operações aritméticas unárias e bit a bit::
* Operações binárias aritméticas::
* Operações de deslocamento::
* Operações binárias bit a bit::
* Comparações::
* Operações booleanas::
* Expressões de atribuição: Expressões de atribuição<2>.
* Expressões condicionais::
* Lambdas::
* Listas de expressões::
* Ordem de avaliação::
* Precedência de operadores::


File: python.info,  Node: Conversões aritméticas,  Next: Átomos,  Up: Expressões

4.6.1 Conversões aritméticas
----------------------------

Quando uma descrição de um operador aritmético abaixo usa a frase “os
argumentos numéricos são convertidos em um tipo comum”, isso significa
que a implementação do operador para tipos embutidos funciona da
seguinte maneira:

   * Se um dos argumentos for um número complexo, o outro será
     convertido em complexo;

   * caso contrário, se um dos argumentos for um número de ponto
     flutuante, o outro será convertido em ponto flutuante;

   * caso contrário, ambos devem ser inteiros e nenhuma conversão é
     necessária.

Algumas regras adicionais se aplicam a certos operadores (por exemplo,
uma string como um argumento à esquerda para o operador ‘%’).  As
extensões devem definir seu próprio comportamento de conversão.


File: python.info,  Node: Átomos,  Next: Primárias,  Prev: Conversões aritméticas,  Up: Expressões

4.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 é:

     atom      ::= *note identifier: 2023. | *note literal: 21a8. | *note enclosure: 21a9.
     enclosure ::= *note parenth_form: 21aa. | *note list_display: 21ab. | *note dict_display: 21ac. | *note set_display: 21ad.
                   | *note generator_expression: 21ae. | *note yield_atom: 21af.

* Menu:

* Identificadores (Nomes): Identificadores Nomes.
* Literais: Literais<2>.
* Formas de parênteses::
* Sintaxe de criação de listas, conjuntos e dicionários: Sintaxe de criação de listas conjuntos e dicionários.
* Sintaxes de criação de lista::
* Sintaxes de criação de conjunto::
* Sintaxes de criação de dicionário::
* Expressões geradoras: Expressões geradoras<2>.
* Expressões yield::


File: python.info,  Node: Identificadores Nomes,  Next: Literais<2>,  Up: Átomos

4.6.2.1 Identificadores (Nomes)
...............................

Um identificador que ocorre como um átomo é um nome.  Veja a seção *note
Identificadores e palavras-chave: 2021. para a definição lexical e a
seção *note Nomeação e ligação: 208a. para documentação de nomenclatura
e ligação.

Quando o nome está vinculado a um objeto, a avaliação do átomo produz
esse objeto.  Quando um nome não está vinculado, uma tentativa de
avaliá-lo levanta uma exceção *note NameError: 43f.

* Menu:

* Desfiguração de nome privado::


File: python.info,  Node: Desfiguração de nome privado,  Up: Identificadores Nomes

4.6.2.2 Desfiguração de nome privado
....................................

Quando um identificador que ocorre textualmente em uma definição de
classe começa com dois ou mais caracteres de sublinhado e não termina
com dois ou mais sublinhados, ele é considerado um 'nome privado'
daquela classe.

Ver também
..........

As *note especificações de classe: 131a.

Mais precisamente, os nomes privados são transformados em um formato
mais longo antes que o código seja gerado 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 *note __name__: 109f. 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 identificador ‘__spam’ que ocorre em
     uma classe chamada ‘_’ ou ‘__’ é deixado como está.


File: python.info,  Node: Literais<2>,  Next: Formas de parênteses,  Prev: Identificadores Nomes,  Up: Átomos

4.6.2.3 Literais
................

Python oferece suporte a strings e bytes literais e vários literais
numéricos:

     literal ::= *note stringliteral: 2032. | *note bytesliteral: 203b.
                 | *note integer: 2056. | *note floatnumber: 2062. | *note imagnumber: 206a.

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 *note Literais: 202f.
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.


File: python.info,  Node: Formas de parênteses,  Next: Sintaxe de criação de listas conjuntos e dicionários,  Prev: Literais<2>,  Up: Átomos

4.6.2.4 Formas de parênteses
............................

Um forma entre parênteses é uma lista de expressões opcional entre
parênteses:

     parenth_form ::= "(" [*note starred_expression: 21b6.] ")"

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.


File: python.info,  Node: Sintaxe de criação de listas conjuntos e dicionários,  Next: Sintaxes de criação de lista,  Prev: Formas de parênteses,  Up: Átomos

4.6.2.5 Sintaxe de criação de listas, conjuntos e dicionários
.............................................................

Para construir uma lista, um conjunto ou um dicionário, o Python fornece
uma sintaxe especial chamada “sintaxes de criação” (em inglês,
'displays'), cada uma delas em dois tipos:

   * o conteúdo do contêiner é listado explicitamente ou

   * eles são calculados por meio de um conjunto de instruções de laço e
     filtragem, chamado de 'compreensão'.

Elementos de sintaxe comuns para compreensões são:

     comprehension ::= *note assignment_expression: 21b9. *note comp_for: 21ba.
     comp_for      ::= ["async"] "for" *note target_list: 21bb. "in" *note or_test: 21bc. [*note comp_iter: 21bd.]
     comp_iter     ::= *note comp_for: 21ba. | *note comp_if: 21be.
     comp_if       ::= "if" *note or_test: 21bc. [*note comp_iter: 21bd.]

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 *note async def: 5d1, uma cláusula
‘async for’ pode ser usada para iterar sobre um *note iterador
assíncrono: 1ab.  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 *note await: 1b9.

Se uma compreensão contém cláusulas ‘async for’, ou se contém expressões
‘await’ ou outras compreensões assíncronas em qualquer lugar, exceto a
expressão iterável na cláusula ‘for’ mais à esquerda, ela é chamada uma
'compreensã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(1).

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.

Alterado na versão 3.11: Compreensões assíncronas agora são permitidas
dentro de compreensões em funções assíncronas.  As compreensões externas
tornam-se implicitamente assíncronas.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0530/


File: python.info,  Node: Sintaxes de criação de lista,  Next: Sintaxes de criação de conjunto,  Prev: Sintaxe de criação de listas conjuntos e dicionários,  Up: Átomos

4.6.2.6 Sintaxes de criação de lista
....................................

Uma sintaxe de criação de lista é uma série possivelmente vazia de
expressões entre colchetes:

     list_display ::= "[" [*note flexible_expression_list: 21c1. | *note comprehension: 21b8.] "]"

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.


File: python.info,  Node: Sintaxes de criação de conjunto,  Next: Sintaxes de criação de dicionário,  Prev: Sintaxes de criação de lista,  Up: Átomos

4.6.2.7 Sintaxes de criação de conjunto
.......................................

Uma sintaxe de criação definida é denotada por chaves e distinguível de
sintaxes de criação de dicionário pela falta de caractere de dois pontos
separando chaves e valores:

     set_display ::= "{" (*note flexible_expression_list: 21c1. | *note comprehension: 21b8.) "}"

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.


File: python.info,  Node: Sintaxes de criação de dicionário,  Next: Expressões geradoras<2>,  Prev: Sintaxes de criação de conjunto,  Up: Átomos

4.6.2.8 Sintaxes de criação de dicionário
.........................................

Uma sintaxe de criação de dicionário é uma série possivelmente vazia de
itens de dicionário (pares chave/valor) envolto entre chaves:

     dict_display       ::= "{" [*note dict_item_list: 21c5. | *note dict_comprehension: 21c6.] "}"
     dict_item_list     ::= *note dict_item: 21c7. ("," *note dict_item: 21c7.)* [","]
     dict_item          ::= *note expression: 21c8. ":" *note expression: 21c8. | "**" *note or_expr: 2050.
     dict_comprehension ::= *note expression: 21c8. ":" *note expression: 21c8. *note comp_for: 21ba.

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 *note mapeamento: 11fb.  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(1).

Uma compreensão de dict, em contraste com as compreensões de lista e
conjunto, precisa de duas expressões separadas 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 *note A hierarquia de tipos padrão: 2075.  (Para resumir, o tipo
de chave deve ser *note hasheável: 610, que exclui todos os objetos
mutáveis.)  Não são detectadas colisões 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(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0448/

   (2) https://peps.python.org/pep-0572/


File: python.info,  Node: Expressões geradoras<2>,  Next: Expressões yield,  Prev: Sintaxes de criação de dicionário,  Up: Átomos

4.6.2.9 Expressões geradoras
............................

Uma expressão geradora é uma notação geradora compacta entre parênteses:

     generator_expression ::= "(" *note expression: 21c8. *note comp_for: 21ba. ")"

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 *note __next__(): 1e4e. é 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 e o
*note iterador: 1ac. é imediatamente criado para aquele iterável, de
modo que um erro produzido enquanto cria o iterador será emitido no
ponto em que a expressão geradora é 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 *note Chamadas: da5. 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
*note await: 1b9, ela é chamada de 'expressão geradora assíncrona'.  Uma
expressão geradora assíncrona retorna um novo objeto gerador assíncrono,
que é um iterador assíncrono (consulte *note Iteradores assíncronos:
d9f.).

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 *note async def: 5d1.  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.


File: python.info,  Node: Expressões yield,  Prev: Expressões geradoras<2>,  Up: Átomos

4.6.2.10 Expressões yield
.........................

     yield_atom       ::= "(" *note yield_expression: 2051. ")"
     yield_from       ::= "yield" "from" *note expression: 21c8.
     yield_expression ::= "yield" *note yield_list: 21ce. | *note yield_from: 21cd.

A expressão yield é usada ao definir uma função *note geradora: 109a. ou
uma função *note geradora assíncrona: 21cf. e, portanto, só pode ser
usada no corpo de uma definição de função.  Usar uma expressão yield no
corpo de uma função faz com que essa função seja uma função geradora, e
usá-la no corpo de uma função *note async def: 5d1. faz com que essa
função de corrotina seja uma função geradora assíncrona.  Por exemplo:

     def gen():  # define uma função geradora
         yield 123

     async def agen(): # define uma função geradora assíncrona
         yield 123

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.

As funções geradoras são descritas abaixo, enquanto as funções geradoras
assíncronas são descritas separadamente na seção *note Funções geradoras
assíncronas: 21d0.

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 *note yield_list: 21ce. ao
chamador do gerador, ou ‘None’ se *note yield_list: 21ce. é 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 *note __next__(): 1e4e.
for usado (tipicamente através de uma *note for: 2f2. ou do *note
next(): 7d9. embutido) então o resultado será *note None: 675.  Caso
contrário, se *note send(): 215a. 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
*note try: 6e9.  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 *note close(): 15b9. do iterador de gerador será
chamado, permitindo que quaisquer cláusulas *note finally: 9d2.
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 *note send(): 215a. e quaisquer exceções
passadas com *note throw(): 4f8. são passados para o iterador subjacente
se ele tiver os métodos apropriados.  Se este não for o caso, então
*note send(): 215a. irá levantar *note AttributeError: 34b. ou *note
TypeError: 2c3, enquanto *note throw(): 4f8. irá apenas levantar a
exceção passada imediatamente.

Quando o iterador subjacente estiver completo, o atributo *note value:
2157. da instância *note StopIteration: c15. gerada torna-se o valor da
expressão yield.  Ele pode ser definido explicitamente ao levantar *note
StopIteration: c15. 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
..........

PEP 255(1) - Simple Generators

     A proposta para adicionar geradores e a instrução *note yield: 9d5.
     ao Python.

PEP 342(2) - Corrotinas via Geradores Aprimorados

     A proposta de aprimorar a API e a sintaxe dos geradores,
     tornando-os utilizáveis como simples corrotinas.

PEP 380(3) - Sintaxe para Delegar a um Subgerador

     A proposta de introduzir a sintaxe *note yield_from: 21cd,
     facilitando a delegação a subgeradores.

PEP 525(4) - Geradores assíncronos

     A proposta que se expandiu em PEP 492(5) adicionando recursos de
     gerador a funções de corrotina.

* Menu:

* Métodos de iterador gerador::
* Exemplos::
* Funções geradoras assíncronas: Funções geradoras assíncronas<2>.
* Métodos geradores-iteradores assíncronos::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0255/

   (2) https://peps.python.org/pep-0342/

   (3) https://peps.python.org/pep-0380/

   (4) https://peps.python.org/pep-0525/

   (5) https://peps.python.org/pep-0492/


File: python.info,  Node: Métodos de iterador gerador,  Next: Exemplos,  Up: Expressões yield

4.6.2.11 Métodos de iterador gerador
....................................

Esta subseção descreve os métodos de um iterador gerador.  Eles podem
ser usados para controlar a execução de uma função geradora.

Observe que chamar qualquer um dos métodos do gerador abaixo quando o
gerador já estiver em execução levanta uma exceção *note ValueError:
202.

 -- Método: generator.__next__ ()

     Inicia a execução de uma função geradora ou a retoma na última
     expressão yield executada.  Quando uma função geradora é retomada
     com um método *note __next__(): 1e4e, a expressão yield atual
     sempre é avaliada como *note None: 675.  A execução então continua
     para a próxima expressão yield, onde o gerador é suspenso
     novamente, e o valor de *note yield_list: 21ce. é retornado para o
     chamador de *note __next__(): 1e4e.  Se o gerador sair sem produzir
     outro valor, uma exceção *note StopIteration: c15. será levantada.

     Este método é normalmente chamado implicitamente, por exemplo por
     um laço *note for: 2f2, ou pela função embutida *note next(): 7d9.

 -- Método: generator.send (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 *note send(): 215a. retorna o próximo valor gerado pelo
     gerador, ou levanta *note StopIteration: c15. se o gerador sair sem
     produzir outro valor.  Quando *note send(): 215a. é chamado para
     iniciar o gerador, ele deve ser chamado com *note None: 675. como
     argumento, porque não há nenhuma expressão yield que possa receber
     o valor.

 -- Método: generator.throw (value)

 -- Método: generator.throw (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 *note StopIteration: c15. 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 reservada *note raise: 5ed. é
     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 *note __traceback__:
     1309. existente armazenado em 'value' poderá ser limpo.

     Alterado na versão 3.12: A segunda assinatura (tipo[, valor[,
     traceback]]) foi descontinuada e pode ser removida em uma versão
     futura do Python.

 -- Método: generator.close ()

     Levanta uma exceção *note GeneratorExit: 140e. no ponto onde a
     função geradora foi pausada (equivalente a chamar
     ‘throw(GeneratorExit)’) A exceção é levantada pela expressão yield
     onde o gerador foi pausado.  Se a função geradora captura a
     exceção, e retorna um valor, este valor é retornado de *note
     close(): 15b9.  Se a função geradora já estiver fechada ou levantar
     *note GeneratorExit: 140e. (por não capturar a exceção), *note
     close(): 15b9. retornará *note None: 675.  Se o gerador produzir um
     valor, uma exceção *note RuntimeError: 195. é 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, *note close(): 15b9. retorna *note None: 675. 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 *note close(): 15b9.


File: python.info,  Node: Exemplos,  Next: Funções geradoras assíncronas<2>,  Prev: Métodos de iterador gerador,  Up: Expressões yield

4.6.2.12 Exemplos
.................

Aqui está um exemplo simples que demonstra o comportamento de geradores
e funções geradoras:

     >>> def echo(value=None):
     ...     print("A execução inicia quando 'next()' é chamada pela primeira vez.")
     ...     try:
     ...         while True:
     ...             try:
     ...                 value = (yield value)
     ...             except Exception as e:
     ...                 value = e
     ...     finally:
     ...         print("Não se esqueça de fazer uma limpeza quando 'close()' for chamada.")
     ...
     >>> generator = echo(1)
     >>> print(next(generator))
     A execução inicia quando 'next()' é chamada pela primeira vez.
     1
     >>> print(next(generator))
     None
     >>> print(generator.send(2))
     2
     >>> generator.throw(TypeError, "spam")
     TypeError('spam',)
     >>> generator.close()
     Não se esqueça de fazer uma limpeza quando 'close()' for chamada.

Para exemplos usando ‘yield from’, consulte a *note PEP 380; Syntax for
Delegating to a Subgenerator: 1072. em “O que há de novo no Python.”


File: python.info,  Node: Funções geradoras assíncronas<2>,  Next: Métodos geradores-iteradores assíncronos,  Prev: Exemplos,  Up: Expressões yield

4.6.2.13 Funções geradoras assíncronas
......................................

A presença de uma expressão yield em uma função ou método definido
usando a *note async def: 5d1. define ainda mais a função como uma
função *note geradora assíncrona: 21cf.

Quando uma função geradora assíncrona é chamada, ela retorna um iterador
assíncrono conhecido como objeto gerador assíncrono.  Esse objeto
controla a execução da função geradora.  Um objeto gerador assíncrono é
normalmente usado em uma instrução *note async for: aba. em uma função
de corrotina de forma análoga a como um objeto gerador seria usado em
uma instrução *note for: 2f2.

A chamada de um dos métodos do gerador assíncrono retorna um objeto
*note aguardável: 1ad, e a execução começa quando esse objeto é
aguardado.  Nesse momento, a execução prossegue até a primeira expressão
yield, onde é suspensa novamente, retornando o valor de *note
yield_list: 21ce. para a corrotina em aguardo.  Assim como ocorre com um
gerador, a suspensão significa que todo o estado local é mantido,
inclusive as ligações atuais das variáveis locais, o ponteiro de
instruções, a pilha de avaliação interna e o estado de qualquer
tratamento de exceção.  Quando a execução é retomada, aguardando o
próximo objeto retornado pelos métodos do gerador assíncrono, a função
pode prosseguir exatamente como se a expressão de rendimento 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 *note
__anext__(): 21d4. for usado, o resultado será *note None: 675.  Caso
contrário, se *note asend(): 8df. for usado, o resultado será o valor
passado para esse método.

Se um gerador assíncrono encerrar mais cedo por *note break: ab8, pela
tarefa que fez sua chamada ser cancelada ou por outras exceções, o
código de limpeza assíncrona do gerador será executado e possivelmente
levantará alguma exceção ou acessará as variáveis de contexto em um
contexto inesperado – talvez após o tempo de vida das tarefas das quais
ele depende, ou durante o laço de eventos de encerramento quando o
gancho de coleta de lixo do gerador assíncrono for chamado.  Para
prevenir isso, o chamador deve encerrar explicitamente o gerador
assíncrono chamando o método *note aclose(): 8de. para finalizar o
gerador e, por fim, desconectá-lo do laço de eventos.

Em uma função geradora assíncrona, expressões de yield são permitidas em
qualquer lugar em uma construção *note try: 6e9.  No entanto, se um
gerador assíncrono não for retomado antes de ser finalizado (alcançando
uma contagem de referência zero ou sendo coletado pelo coletor de lixo),
então uma expressão de yield dentro de um construção ‘try’ pode resultar
em uma falha na execução das cláusulas pendentes de *note finally: 9d2.
Nesse caso, é responsabilidade do laço de eventos ou escalonador que
executa o gerador assíncrono chamar o método *note aclose(): 8de. do
gerador iterador assíncrono e executar o objeto corrotina resultante,
permitindo assim que quaisquer cláusulas pendentes de ‘finally’ sejam
executadas.

Para cuidar da finalização após o término do laço de eventos, um laço de
eventos deve definir uma função 'finalizer' que recebe um gerador
assíncrono e provavelmente chama *note aclose(): 8de. e executa a
corrotina.  Este 'finalizer' pode ser registrado chamando *note
sys.set_asyncgen_hooks(): 1712.  Quando iterado pela primeira vez, um
gerador assíncrono armazenará o 'finalizer' registrado para ser chamado
na finalização.  Para um exemplo de referência de um método 'finalizer',
consulte a implementação de ‘asyncio.Loop.shutdown_asyncgens’ em
Lib/asyncio/base_events.py(1).

O expressão ‘yield from <expr>’ é um erro de sintaxe quando usado em uma
função geradora assíncrona.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/asyncio/base_events.py


File: python.info,  Node: Métodos geradores-iteradores assíncronos,  Prev: Funções geradoras assíncronas<2>,  Up: Expressões yield

4.6.2.14 Métodos geradores-iteradores assíncronos
.................................................

Esta subseção descreve os métodos de um iterador gerador assíncrono, que
são usados para controlar a execução de uma função geradora.

 -- Método: async agen.__anext__ ()

     Retorna um objeto aguardável que, quando executado, começa a
     executar o gerador assíncrono ou o retoma na última expressão yield
     executada.  Quando uma função geradora assíncrona é retomada com o
     método *note __anext__(): 21d4, a expressão yield atual sempre
     avalia para *note None: 675. no objeto aguardável retornado, que,
     quando executado, continuará para a próxima expressão yield.  O
     valor de *note yield_list: 21ce. da expressão yield é o valor da
     exceção *note StopIteration: c15. levantada pela corrotina em
     conclusão.  Se o gerador assíncrono sair sem produzir outro valor,
     o objeto aguardável em vez disso levanta uma exceção *note
     StopAsyncIteration: 1ba5, sinalizando que a iteração assíncrona foi
     concluída.

     Este método é normalmente chamado implicitamente por um laço *note
     async for: aba.

 -- Método: async agen.asend (value)

     Retorna um objeto aguardável que, quando executado, retoma a
     execução do gerador assíncrono.  Assim como o método *note send():
     215a. para um gerador, isso “envia” um valor para a função geradora
     assíncrona, e o argumento 'value' se torna o resultado da expressão
     de yield atual.  O objeto aguardável retornado pelo método *note
     asend(): 8df. retornará o próximo valor produzido pelo gerador como
     o valor da exceção *note StopIteration: c15. levantada, ou lança
     *note StopAsyncIteration: 1ba5. se o gerador assíncrono sair sem
     produzir outro valor.  Quando *note asend(): 8df. é chamado para
     iniciar o gerador assíncrono, ele deve ser chamado com *note None:
     675. como argumento, pois não há expressão yield que possa receber
     o valor.

 -- Método: async agen.athrow (value)

 -- Método: async agen.athrow (type[, value[, traceback]])

     Retorna um objeto aguardável que gera uma exceção do tipo ‘type’ no
     ponto em que o gerador assíncrono foi pausado, e retorna o próximo
     valor produzido pela função geradora como o valor da exceção *note
     StopIteration: c15. levantada.  Se o gerador assíncrono terminar
     sem produzir outro valor, uma exceção *note StopAsyncIteration:
     1ba5. é levantada pelo objeto aguardável.  Se a função geradora não
     capturar a exceção passada ou gerar uma exceção diferente, então
     quando o objeto aguardável for executado, essa exceção se propagará
     para o chamador do objeto aguardável.

     Alterado na versão 3.12: A segunda assinatura (tipo[, valor[,
     traceback]]) foi descontinuada e pode ser removida em uma versão
     futura do Python.

 -- Método: async agen.aclose ()

     Retorna um objeto aguardável que, quando executado, levantará uma
     *note GeneratorExit: 140e. na função geradora assíncrona no ponto
     em que foi pausada.  Se a função geradora assíncrona sair de forma
     normal, se estiver já estiver fechada ou levantar *note
     GeneratorExit: 140e. (não capturando a exceção), então o objeto
     aguardável retornado levantará uma exceção *note StopIteration:
     c15.  Quaisquer outros objetos aguardáveis retornados por chamadas
     subsequentes à função geradora assíncrona levantarão uma exceção
     *note StopAsyncIteration: 1ba5.  Se a função geradora assíncrona
     levantar um valor, um *note RuntimeError: 195. será lançado pelo
     objeto aguardável.  Se a função geradora assíncrona levantar
     qualquer outra exceção, ela será propagada para o chamador do
     objeto aguardável.  Se a função geradora assíncrona já tiver saído
     devido a uma exceção ou saída normal, então chamadas posteriores ao
     método *note aclose(): 8de. retornarão um objeto aguardável que não
     faz nada.


File: python.info,  Node: Primárias,  Next: Expressão await,  Prev: Átomos,  Up: Expressões

4.6.3 Primárias
---------------

Primárias representam as operações mais fortemente vinculadas da
linguagem.  Sua sintaxe é:

     primary ::= *note atom: 21a7. | *note attributeref: 21da. | *note subscription: 21db. | *note slicing: 21dc. | *note call: 21dd.

* Menu:

* Referências de atributo::
* Subscrições::
* Fatiamentos::
* Chamadas::


File: python.info,  Node: Referências de atributo,  Next: Subscrições,  Up: Primárias

4.6.3.1 Referências de atributo
...............................

Uma referência de atributo é um primário seguido de um ponto e um nome.

     attributeref ::= *note primary: 21d9. "." *note identifier: 2023.

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 *note
__getattribute__(): beb. ou o método *note __getattr__(): 4d3.  O método
‘__getattribute__()’ é chamado primeiro e retorna um valor ou levanta
uma *note AttributeError: 34b. se o atributo não estiver disponível.

Se for levantada uma *note AttributeError: 34b. e o objeto tiver um
método ‘__getattr__()’, esse método será chamado como alternativa.


File: python.info,  Node: Subscrições,  Next: Fatiamentos,  Prev: Referências de atributo,  Up: Primárias

4.6.3.2 Subscrições
...................

A subscrição de uma instância de uma classe de *note classe de
contêiner: 2116. geralmente selecionará um elemento do contêiner.  A
subscrição de uma *note classe genérica: 439. geralmente retornará um
objeto *note GenericAlias: 6b2.

     subscription ::= *note primary: 21d9. "[" *note flexible_expression_list: 21c1. "]"

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 subscrição através da definição de um ou
ambos *note __getitem__(): 283. e *note __class_getitem__(): 73b.
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
*note __class_getitem__ versus __getitem__: 210f.

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 *note tuple:
370. 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(1).

Para objetos embutido, existem dois tipos de objetos que oferecem
suporte a subscrição via *note __getitem__(): 283.:

  1. Mapeamentos.  Se o primário for um *note mapeamento: 11fb, 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 *note dict: 256.

  2. Sequências.  Se o primário for uma *note sequência: 4f1, a lista de
     expressões deve ser avaliada como *note int: 257. ou *note slice:
     469. (conforme discutido na seção seguinte).  Exemplos de classes
     de sequência embutidas incluem as classes *note str: 44c, *note
     list: 611. e *note tuple: 370.

A sintaxe formal não faz nenhuma provisão especial para índices
negativos em *note sequências: 4f1.  No entanto, todas as sequências
embutidas fornecem um método *note __getitem__(): 283. que interpreta
índices negativos adicionando o comprimento 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 *note __getitem__(): 283. do
objeto, as subclasses que substituem esse método precisarão adicionar
explicitamente esse suporte.

Uma *note string: 44c. é 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.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0646/


File: python.info,  Node: Fatiamentos,  Next: Chamadas,  Prev: Subscrições,  Up: Primárias

4.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 *note del:
18a7.  A sintaxe para um fatiamento:

     slicing      ::= *note primary: 21d9. "[" *note slice_list: 21e3. "]"
     slice_list   ::= *note slice_item: 21e4. ("," *note slice_item: 21e4.)* [","]
     slice_item   ::= *note expression: 21c8. | *note proper_slice: 21e5.
     proper_slice ::= [*note lower_bound: 21e6.] ":" [*note upper_bound: 21e7.] [ ":" [*note stride: 21e8.] ]
     lower_bound  ::= *note expression: 21c8.
     upper_bound  ::= *note expression: 21c8.
     stride       ::= *note expression: 21c8.

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 complicar 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 *note __getitem__(): 283. 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 *note A hierarquia de tipos
padrão: 2075.) cujos *note start: 20e8, *note stop: 20e9. e *note step:
20ea. atributos são os valores das expressões fornecidas como limite
inferior, limite superior e passo, respectivamente, substituindo ‘None’
pelas expressões ausentes.


File: python.info,  Node: Chamadas,  Prev: Fatiamentos,  Up: Primárias

4.6.3.4 Chamadas
................

Uma chamada chama um objeto que é um chamável (por exemplo, uma *note
função: 21ea.) com uma série possivelmente vazia de *note argumentos:
449.:

     call                 ::= *note primary: 21d9. "(" [*note argument_list: 21eb. [","] | *note comprehension: 21b8.] ")"
     argument_list        ::= *note positional_arguments: 21ec. ["," *note starred_and_keywords: 21ed.]
                              ["," *note keywords_arguments: 21ee.]
                              | *note starred_and_keywords: 21ed. ["," *note keywords_arguments: 21ee.]
                              | *note keywords_arguments: 21ee.
     positional_arguments ::= *note positional_item: 21ef. ("," *note positional_item: 21ef.)*
     positional_item      ::= *note assignment_expression: 21b9. | "*" *note expression: 21c8.
     starred_and_keywords ::= ("*" *note expression: 21c8. | *note keyword_item: 21f0.)
                              ("," "*" *note expression: 21c8. | "," *note keyword_item: 21f0.)*
     keywords_arguments   ::= (*note keyword_item: 21f0. | "**" *note expression: 21c8.)
                              ("," *note keyword_item: 21f0. | "," "**" *note expression: 21c8.)*
     keyword_item         ::= *note identifier: 2023. "=" *note expression: 21c8.

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 embutidas, métodos de objetos
embutidos, objetos de classe, métodos de instâncias de classe e todos os
objetos que possuem um método *note __call__(): 558. são chamáveis).
Todas as expressões de argumento são avaliadas antes da tentativa de
chamada.  Consulte a seção *note Definições de função: 1db6. para a
sintaxe das listas formais de *note parâmetros: 208f.

Se houver argumentos nomeados, eles serão primeiro convertidos em
argumentos posicionais, como segue.  Primeiro, é 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 *note
TypeError: 2c3. será levantada.  Caso 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 padrã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 *note TypeError: 2c3. será levantada.  Caso contrário, a lista
de slots preenchidos será usada como lista de argumentos para a chamada.

Uma implementação pode fornecer funções integradas cujos parâmetros
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 *note
PyArg_ParseTuple(): 571. para analisar seus argumentos.

Se houver mais argumentos posicionais do que slots de parâmetros
formais, uma exceção *note TypeError: 2c3. 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
argumentos posicionais em excesso).

Se algum argumento nomeado não corresponder a um nome de parâmetro
formal, uma exceção *note TypeError: 2c3. é levantada, 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 *note iterável: 1268.  Os elementos 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:

     >>> def f(a, b):
     ...     print(a, b)
     ...
     >>> f(b=1, *(2,))
     2 1
     >>> f(a=1, *(2,))
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: f() got multiple values for keyword argument 'a'
     >>> f(1, *(2,))
     1 2

É 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 *note mapeamento: 11fb, 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 *note TypeError:
2c3. é 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 *note TypeError: 2c3. é 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.

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
desempacotamentos de dicionário (‘**’).  Originalmente proposto pela PEP
448(1).

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
     *note Definições de função: 1db6.  Quando o bloco de código executa
     uma instrução *note return: 9d6, isso especifica o valor de retorno
     da chamada de função.  Se a execução atingir o final do bloco de
     código sem executar uma instrução *note return: 9d6, o valor de
     retorno será ‘None’.

um método embutido ou uma função embutida:

     O resultado fica por conta do interpretador; veja *note Funções
     embutidas: 129e. 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 *note __call__(): 558.; o efeito é
     então o mesmo como se esse método fosse chamado.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0448/


File: python.info,  Node: Expressão await,  Next: O operador de potência,  Prev: Primárias,  Up: Expressões

4.6.4 Expressão await
---------------------

Suspende a execução de *note corrotina: 491. em um objeto *note
aguardável: 1ad.  Só pode ser usado dentro de uma *note função de
corrotina: d9b.

     await_expr ::= "await" *note primary: 21d9.

Adicionado na versão 3.5.


File: python.info,  Node: O operador de potência,  Next: Operações aritméticas unárias e bit a bit,  Prev: Expressão await,  Up: Expressões

4.6.5 O operador de potência
----------------------------

O operador de potência vincula-se com mais força do que os operadores
unários à sua esquerda; ele se vincula com menos força do que os
operadores unários à sua direita.  A sintaxe é:

     power ::= (*note await_expr: 21f2. | *note primary: 21d9.) ["**" *note u_expr: 21f6.]

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 *note
pow(): 9da, quando chamado com dois argumentos: 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 *note
ZeroDivisionError: 94c.  Elevar um número negativo a uma potência
fracionária resulta em um número *note complex: 2f8.  (Em versões
anteriores, levantava *note ValueError: 202.)

Esta operação pode ser personalizada usando os métodos especial *note
__pow__(): 7d4. e *note __rpow__(): 7d5.


File: python.info,  Node: Operações aritméticas unárias e bit a bit,  Next: Operações binárias aritméticas,  Prev: O operador de potência,  Up: Expressões

4.6.6 Operações aritméticas unárias e bit a bit
-----------------------------------------------

Todas as operações aritméticas unárias e bit a bit têm a mesma
prioridade:

     u_expr ::= *note power: 21f5. | "-" *note u_expr: 21f6. | "+" *note u_expr: 21f6. | "~" *note u_expr: 21f6.

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 *note
__neg__(): 2144.

O operador unário ‘+’ (mais) produz seu argumento numérico inalterado; a
operação pode ser substituída pelo método especial *note __pos__():
2145.

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 *note __invert__():
2147.

Em todos os três casos, se o argumento não tiver o tipo adequado, uma
exceção *note TypeError: 2c3. é levantada.


File: python.info,  Node: Operações binárias aritméticas,  Next: Operações de deslocamento,  Prev: Operações aritméticas unárias e bit a bit,  Up: Expressões

4.6.7 Operações binárias aritméticas
------------------------------------

As operações aritméticas binárias possuem os níveis de prioridade
convencionais.  Observe que algumas dessas operações também se aplicam a
determinados tipos não numéricos.  Além do operador potência, existem
apenas dois níveis, um para operadores multiplicativos e outro para
operadores aditivos:

     m_expr ::= *note u_expr: 21f6. | *note m_expr: 21fb. "*" *note u_expr: 21f6. | *note m_expr: 21fb. "@" *note m_expr: 21fb. |
                *note m_expr: 21fb. "//" *note u_expr: 21f6. | *note m_expr: 21fb. "/" *note u_expr: 21f6. |
                *note m_expr: 21fb. "%" *note u_expr: 21f6.
     a_expr ::= *note m_expr: 21fb. | *note a_expr: 21fc. "+" *note m_expr: 21fb. | *note a_expr: 21fc. "-" *note m_expr: 21fb.

O operador ‘*’ (multiplicação) produz o produto de seus argumentos.  Os
argumentos devem ser números ou um argumento 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 *note
__mul__(): 2124. e *note __rmul__(): 2125.

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 *note
__matmul__(): da1. e *note __rmatmul__(): da2.

Adicionado na versão 3.5.

Os operadores ‘/’ (divisão) e ‘//’ (divisão pelo piso) produzem o
quociente de seus argumentos.  Os argumentos numé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 *note
ZeroDivisionError: 94c.

A operação de divisão pode ser personalizada usando os métodos especiais
*note __truediv__(): ebf. e *note __rtruediv__(): 2132.  A operação de
divisão pelo piso pode ser personalizada usando os métodos especiais
*note __floordiv__(): 153c. e *note __rfloordiv__(): 2133.

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 *note ZeroDivisionError: 94c.  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 operando (1).

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 *note divmod(): 9a9.:
‘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 *note Formatação de string no estilo printf: 6cc.

A operação 'módulo' pode ser personalizada usando os métodos especial
*note __mod__(): 212b. e *note __rmod__(): dff.

O operador de divisão pelo piso, o operador de módulo e a função *note
divmod(): 9a9. não são definidos para números complexos.  Em vez disso,
converta para um número de ponto flutuante usando a função *note abs():
1e2d. 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 *note
__add__(): 2121. e *note __radd__(): 2122.

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 *note
__sub__(): 212a. e *note __rsub__(): 2131.

   ---------- Footnotes ----------

   (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 ‘1e100’.  A
função *note math.fmod(): 21fd. 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’.


File: python.info,  Node: Operações de deslocamento,  Next: Operações binárias bit a bit,  Prev: Operações binárias aritméticas,  Up: Expressões

4.6.8 Operações de deslocamento
-------------------------------

As operações de deslocamento têm menor prioridade que as operações
aritméticas:

     shift_expr ::= *note a_expr: 21fc. | *note shift_expr: 2200. ("<<" | ">>") *note a_expr: 21fc.

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 *note __lshift__(): 212c. e *note __rlshift__(): 2135.
A operação de deslocamento à direita pode ser personalizada usando os
métodos especiais *note __rshift__(): 212d. e *note __rrshift__(): 2136.

Um deslocamento para a direita de 'n' bits é definido como a divisão
pelo piso por ‘pow(2,n)’.  Um deslocamento à esquerda de 'n' bits é
definido como a multiplicação por ‘pow(2,n)’.


File: python.info,  Node: Operações binárias bit a bit,  Next: Comparações,  Prev: Operações de deslocamento,  Up: Expressões

4.6.9 Operações binárias bit a bit
----------------------------------

Cada uma das três operações bit a bit tem um nível de prioridade
diferente:

     and_expr ::= *note shift_expr: 2200. | *note and_expr: 2203. "&" *note shift_expr: 2200.
     xor_expr ::= *note and_expr: 2203. | *note xor_expr: 2204. "^" *note and_expr: 2203.
     or_expr  ::= *note xor_expr: 2204. | *note or_expr: 2050. "|" *note xor_expr: 2204.

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 *note __and__(): 212e. ou *note __rand__(): 2137.

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 *note __xor__(): 212f. ou *note
__rxor__(): 2138.

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 *note __or__(): 2130. ou *note __ror__(): 2139.


File: python.info,  Node: Comparações,  Next: Operações booleanas,  Prev: Operações binárias bit a bit,  Up: Expressões

4.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:

     comparison    ::= *note or_expr: 2050. (*note comp_operator: 2208. *note or_expr: 2050.)*
     comp_operator ::= "<" | ">" | "==" | ">=" | "<=" | "!="
                       | "is" ["not"] | ["not"] "in"

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á *note bool(): 468. 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).

* Menu:

* Comparações de valor::
* Operações de teste de pertinência::
* Comparações de identidade::


File: python.info,  Node: Comparações de valor,  Next: Operações de teste de pertinência,  Up: Comparações

4.6.10.1 Comparações de valor
.............................

Os operadores ‘<’, ‘>’, ‘==’, ‘>=’, ‘<=’ e ‘!=’ comparam os valores de
dois objetos.  Os objetos não precisam ser do mesmo tipo.

O capítulo *note Objetos, valores e tipos: 2072. afirma que os objetos
possuem um valor (além do tipo e da identidade).  O valor de um objeto é
uma noção bastante abstrata em Python: por exemplo, não existe um método
de acesso canônico para o valor de um objeto.  Além disso, não há
exigência de que o valor de um objeto seja construído de uma maneira
específica, por exemplo.  composto por todos os seus atributos de dados.
Os operadores de comparação implementam uma noção específica de qual é o
valor de um objeto.  Pode-se pensar neles como definindo o valor de um
objeto indiretamente, por meio de sua implementação de comparação.

Como todos os tipos são subtipos (diretos ou indiretos) de *note object:
a96, eles herdam o comportamento de comparação padrão de *note object:
a96.  Os tipos podem personalizar seu comportamento de comparação
implementando 'métodos de comparação rica' como *note __lt__(): 12e2,
descrito em *note Personalização básica: 20ef.

O comportamento padrão para comparação de igualdade (‘==’ e ‘!=’) é
baseado na identidade dos objetos.  Consequentemente, a comparação da
igualdade de instâncias com a mesma identidade resulta em igualdade, e a
comparação da igualdade de instâncias com identidades diferentes resulta
em desigualdade.  Uma motivação para este comportamento padrão é o
desejo de que todos os objetos sejam reflexivos (ou seja, ‘x is y’
implica ‘x == y’).

Uma comparação de ordem padrão (‘<’, ‘>’, ‘<=’ e ‘>=’) não é fornecida;
uma tentativa levanta *note TypeError: 2c3.  Uma motivação para este
comportamento padrão é a falta de um invariante semelhante ao da
igualdade.

O comportamento da comparação de igualdade padrão, de que instâncias com
identidades diferentes são sempre desiguais, pode contrastar com o que
os tipos precisarão ter uma definição sensata de valor de objeto e
igualdade baseada em valor.  Esses tipos precisarão personalizar seu
comportamento de comparação e, de fato, vários tipos embutidos fizeram
isso.

A lista a seguir descreve o comportamento de comparação dos tipos
embutidos mais importantes.

   * Números de tipos numéricos embutidos (*note Tipos numéricos — int,
     float, complex: 1d75.) e dos tipos de biblioteca padrão *note
     fractions.Fraction: 1e7. e *note decimal.Decimal: 29d. podem ser
     comparados dentro e entre seus tipos, com a restrição que os
     números complexos não oferecem suporte a comparação de ordens.
     Dentro dos limites dos tipos envolvidos, eles comparam
     matematicamente (algoritmicamente) corretos sem perda de precisão.

     Os valores não numéricos ‘float('NaN')’ e ‘decimal.Decimal('NaN')’
     são especiais.  Qualquer comparação ordenada de um número com um
     valor que não é um número é falsa.  Uma implicação contraintuitiva
     é 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 *note NotImplemented: 7d3. são singletons.  PEP 8(1)
     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 *note bytes: 1c2. ou *note
     bytearray: 2ea.) podem ser comparadas dentro e entre seus tipos.
     Eles comparam lexicograficamente usando os valores numéricos de
     seus elementos.

   * Strings (instâncias de *note str: 44c.) são comparadas
     lexicograficamente usando os pontos de código Unicode numéricos (o
     resultado da função embutida *note ord(): 2080.) de seus
     caracteres.  (2)

     Strings e sequências binárias não podem ser comparadas diretamente.

   * Sequências (instâncias de *note tuple: 370, *note list: 611. ou
     *note range: 94a.) 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 *note TypeError: 2c3.

     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 comprimento 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 primeiros 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 *note dict: 256.) 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 *note
     TypeError: 2c3.

   * Conjuntos (instâncias de *note set: 5d9. ou *note frozenset: 5da.)
     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 argumentos
     apropriados para funções que dependem de ordenação total (por
     exemplo, *note min(): f3a, *note max(): f3b. e *note sorted(): be7.
     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 herdam 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:

   * 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’

          ‘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’

          ‘x < y and y <= z’ implica em ‘x < z’

   * A comparação inversa deve resultar na negação booleana.  Em outras
     palavras, as seguintes expressões devem ter o mesmo resultado:

          ‘x == y’ e ‘not x != y’

          ‘x < y’ e ‘not x >= y’ (pra classificação total)

          ‘x > y’ e ‘not x <= y’ (pra classificação total)

     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 *note total_ordering(): f75.

   * O resultado *note hash(): 5eb. 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.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0008/

   (2) 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
humanos.  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 *note unicodedata.normalize(): 6d5.


File: python.info,  Node: Operações de teste de pertinência,  Next: Comparações de identidade,  Prev: Comparações de valor,  Up: Comparações

4.6.10.2 Operações de teste de pertinência
..........................................

Os operadores *note in: 2f4. e *note not in: 62f. testam se um operando
é membro ou não de outro.  ‘x in s’ é avaliado como ‘True’ se 'x' for
membro de 's', e ‘False’ caso contrário.  ‘x not in s’ retorna a negação
de ‘x in s’.  Todas as sequências e tipos de conjuntos embutidos
oferecem suporte a isso, assim como o dicionário, para o qual ‘in’ testa
se o dicionário tem uma determinada chave.  Para tipos de contêiner como
list, tuple, set, frozenset, dict ou Collections.deque, a expressão ‘x
in y’ é equivalente a ‘any(x is e or x == e for e in y)’.

Para os tipos string e bytes, ‘x in y’ é ‘True’ se e somente se 'x' for
uma substring de 'y'.  Um teste equivalente é ‘y.find(x) != -1’.
Strings vazias são sempre consideradas uma substring de qualquer outra
string, então ‘"" in "abc"’ retornará ‘True’.

Para classes definidas pelo usuário que definem o método *note
__contains__(): 1400, ‘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 *note
__contains__(): 1400, mas definem *note __iter__(): c8a, ‘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 *note in: 2f4. tivesse
levantado essa exceção.

Por último, o protocolo de iteração de estilo antigo é tentado: se uma
classe define *note __getitem__(): 283, ‘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 *note
IndexError: 157e.  (Se qualquer outra exceção for levantada, é como se
*note in: 2f4. levantasse essa exceção).

O operador *note not in: 62f. é definido para ter o valor verdade
inverso de *note in: 2f4.


File: python.info,  Node: Comparações de identidade,  Prev: Operações de teste de pertinência,  Up: Comparações

4.6.10.3 Comparações de identidade
..................................

Os operadores *note is: 2f5. e *note is not: 220c. testam a identidade
de um objeto: ‘x is y’ é verdadeiro se, e somente se, 'x' e 'y' são o
mesmo objeto.  A identidade de um objeto é determinada usando a função
*note id(): 146a.  ‘x is not y’ produz o valor verdade inverso.  (1)

   ---------- Footnotes ----------

   (1) Devido à coleta de lixo automática, às listas livres e à natureza
dinâmica dos descritores, você pode notar um comportamento aparentemente
incomum em certos usos do operador *note is: 2f5, como aqueles que
envolvem comparações entre métodos de instância ou constantes.  Confira
a documentação para obter mais informações.


File: python.info,  Node: Operações booleanas,  Next: Expressões de atribuição<2>,  Prev: Comparações,  Up: Expressões

4.6.11 Operações booleanas
--------------------------

     or_test  ::= *note and_test: 2210. | *note or_test: 21bc. "or" *note and_test: 2210.
     and_test ::= *note not_test: 2211. | *note and_test: 2210. "and" *note not_test: 2211.
     not_test ::= *note comparison: 2207. | "not" *note not_test: 2211.

No contexto de operações booleanas, e também quando expressões são
usadas por instruções de fluxo de controle, os seguintes valores são
interpretados como falsos: ‘False’, ‘None’, zero numérico de todos os
tipos e strings e contêineres vazios (incluindo strings, tuplas, listas,
dicionários, conjuntos e frozensets).  Todos os outros valores são
interpretados como verdadeiros.  Objetos definidos pelo usuário podem
personalizar seu valor verdade fornecendo um método *note __bool__():
1318.

O operador *note not: 220f. produz ‘True’ se seu argumento for falso,
‘False’ caso contrário.

A expressão ‘x and y’ primeiro avalia 'x'; se 'x' for falso, seu valor
será retornado; caso contrário, 'y' será avaliado e o valor resultante
será retornado.

A expressão ‘x or y’ primeiro avalia 'x'; se 'x' for verdadeiro, seu
valor será retornado; caso contrário, 'y' será avaliado e o valor
resultante será retornado.

Observe que nem *note and: 2f1. nem *note or: 2f6. restringem o valor e
o tipo que retornam para ‘False’ e ‘True’, mas sim retornam o último
argumento avaliado.  Isso às vezes é útil, por exemplo, se ‘s’ é uma
string que deve ser substituída por um valor padrão se estiver vazia, a
expressão ‘s or 'foo'’ produz o valor desejado.  Como *note not: 220f.
precisa criar um novo valor, ele retorna um valor booleano independente
do tipo de seu argumento (por exemplo, ‘not 'foo'’ produz ‘False’ em vez
de ‘''’.)


File: python.info,  Node: Expressões de atribuição<2>,  Next: Expressões condicionais,  Prev: Operações booleanas,  Up: Expressões

4.6.12 Expressões de atribuição
-------------------------------

     assignment_expression ::= [*note identifier: 2023. ":="] *note expression: 21c8.

Uma expressão de atribuição (às vezes também chamada de “expressão
nomeada” ou “morsa”) atribui uma *note expression: 21c8. a um *note
identifier: 2023, ao mesmo tempo que retorna o valor de *note
expression: 21c8.

Um caso de uso comum é ao lidar com expressões regulares
correspondentes:

     if matching := pattern.search(data):
         do_something(matching)

Ou, ao processar um fluxo de arquivos em partes:

     while chunk := file.read(9000):
         process(chunk)

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(1) para mais detalhes sobre
expressões de atribuição.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0572/


File: python.info,  Node: Expressões condicionais,  Next: Lambdas,  Prev: Expressões de atribuição<2>,  Up: Expressões

4.6.13 Expressões condicionais
------------------------------

     conditional_expression ::= *note or_test: 21bc. ["if" *note or_test: 21bc. "else" *note expression: 21c8.]
     expression             ::= *note conditional_expression: 204f. | *note lambda_expr: 2216.

Uma expressão condicional (às vezes chamada de “operador ternário”) é
uma alternativa à instrução if-else.  Como é uma expressão, ela retorna
um valor e pode aparecer como uma subexpressão.

A expressão ‘x if C else y’ primeiro avalia a condição, 'C' em vez de
'x'.  Se 'C' for verdadeiro, 'x' é avaliado e seu valor é retornado;
caso contrário, 'y' será avaliado e seu valor será retornado.

Veja PEP 308(1) para mais detalhes sobre expressões condicionais.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0308/


File: python.info,  Node: Lambdas,  Next: Listas de expressões,  Prev: Expressões condicionais,  Up: Expressões

4.6.14 Lambdas
--------------

     lambda_expr ::= "lambda" [*note parameter_list: 2219.] ":" *note expression: 21c8.

Expressões lambda (às vezes chamadas de funções lambda) são usadas para
criar funções anônimas.  A expressão ‘lambda parameters: expression’
produz um objeto função.  O objeto sem nome se comporta como um objeto
de função definido com:

     def <lambda>(parâmetros):
         return expressão

Veja a seção *note Definições de função: 1db6. 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.


File: python.info,  Node: Listas de expressões,  Next: Ordem de avaliação,  Prev: Lambdas,  Up: Expressões

4.6.15 Listas de expressões
---------------------------

     starred_expression       ::= ["*"] *note or_expr: 2050.
     flexible_expression      ::= *note assignment_expression: 21b9. | *note starred_expression: 21b6.
     flexible_expression_list ::= *note flexible_expression: 221b. ("," *note flexible_expression: 221b.)* [","]
     starred_expression_list  ::= *note starred_expression: 21b6. ("," *note starred_expression: 21b6.)* [","]
     expression_list          ::= *note expression: 21c8. ("," *note expression: 21c8.)* [","]
     yield_list               ::= *note expression_list: 221d. | *note starred_expression: 21b6. "," [*note starred_expression_list: 221c.]

Exceto quando parte de uma sintaxe de criação de lista ou conjunto, uma
lista de expressões contendo pelo menos uma vírgula produz uma tupla.  O
comprimento da tupla é o número de expressões na lista.  As expressões
são avaliadas da esquerda para a direita.

Um asterisco ‘*’ denota 'desempacotamento de iterável'.  Seu operando
deve ser um *note iterável: 1268.  O iterável é expandido em uma
sequência de itens, que são incluídos na nova tupla, lista ou conjunto,
no local do desempacotamento.

Adicionado na versão 3.5: Desempacotamento de iterável em listas de
expressões, originalmente proposta pela PEP 448(1).

Adicionado na versão 3.11: Qualquer item em uma lista de expressões pode
ser estrelado.  Veja a PEP 646(2).

Uma vírgula final é necessária apenas para criar uma tupla de um item,
como ‘1,’; é opcional em todos os outros casos.  Uma única expressão sem
vírgula final não cria uma tupla, mas produz o valor dessa expressão.
(Para criar uma tupla vazia, use um par vazio de parênteses: ‘()’.)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0448/

   (2) https://peps.python.org/pep-0646/


File: python.info,  Node: Ordem de avaliação,  Next: Precedência de operadores,  Prev: Listas de expressões,  Up: Expressões

4.6.16 Ordem de avaliação
-------------------------

Python avalia expressões da esquerda para a direita.  Observe que ao
avaliar uma tarefa, o lado direito é avaliado antes do lado esquerdo.

Nas linhas a seguir, as expressões serão avaliadas na ordem aritmética
de seus sufixos:

     expr1, expr2, expr3, expr4
     (expr1, expr2, expr3, expr4)
     {expr1: expr2, expr3: expr4}
     expr1 + expr2 * (expr3 - expr4)
     expr1(expr2, expr3, *expr4, **expr5)
     expr3, expr4 = expr1, expr2


File: python.info,  Node: Precedência de operadores,  Prev: Ordem de avaliação,  Up: Expressões

4.6.17 Precedência de operadores
--------------------------------

A tabela a seguir resume a precedência de operadores no Python, da
precedência mais alta (mais vinculativa) à precedência mais baixa (menos
vinculativa).  Os operadores na mesma caixa têm a mesma precedência.  A
menos que a sintaxe seja fornecida explicitamente, os operadores são
binários.  Os operadores na mesma caixa agrupam-se da esquerda para a
direita (exceto exponenciação e expressões condicionais, que agrupam da
direita para a esquerda).

Observe que comparações, testes de pertinência e testes de identidade
têm todos a mesma precedência e possuem um recurso de encadeamento da
esquerda para a direita, conforme descrito na seção *note Comparações:
2205.

Operador                                            Descrição
                                                    
----------------------------------------------------------------------------------------------
                                                    
‘(expressions...)’,                                 Expressão entre parênteses ou de
                                                    ligação, sintaxe de criação de lista,
‘[expressões...]’, ‘{chave: valor...}’,             sintaxe de criação de dicionário,
‘{expressões...}’                                   sintaxe de criação de conjunto
                                                    
                                                    
‘x[índice]’, ‘x[índice:índice]’,                    subscrição, fatiamento, chamada,
‘x(argumentos...)’, ‘x.atributo’                    referência a atributo
                                                    
                                                    
*note await x: 1b9.                                 Expressão await
                                                    
                                                    
‘**’                                                Exponenciação (1)
                                                    
                                                    
‘+x’, ‘-x’, ‘~x’                                    positivo, negativo, NEGAÇÃO (NOT) bit a
                                                    bit
                                                    
                                                    
‘*’, ‘@’, ‘/’, ‘//’, ‘%’                            Multiplicação, multiplicação de
                                                    matrizes, divisão, divisão pelo piso,
                                                    resto (2)
                                                    
                                                    
‘+’, ‘-’                                            Adição e subtração
                                                    
                                                    
‘<<’, ‘>>’                                          Deslocamentos
                                                    
                                                    
‘&’                                                 E (AND) bit a bit
                                                    
                                                    
‘^’                                                 OU EXCLUSIVO (XOR) bit a bit
                                                    
                                                    
‘|’                                                 OU (OR) bit a bit
                                                    
                                                    
*note in: 2f4, *note not in: 62f, *note is: 2f5,    Comparações, incluindo testes de
*note is not: 220c, ‘<’, ‘<=’, ‘>’, ‘>=’, ‘!=’,     pertinência e testes de identidade
‘==’                                                

*note not x: 220f.                                  NEGAÇÃO (NOT) booleana
                                                    
                                                    
*note and: 2f1.                                     E (AND) booleano
                                                    
                                                    
*note or: 2f6.                                      OU (OR) booleano
                                                    
                                                    
*note if: 2215. – ‘else’                            Expressão condicional
                                                    
                                                    
*note lambda: 12df.                                 Expressão lambda
                                                    
                                                    
‘:=’                                                Expressão de atribuição
                                                    

   ---------- Footnotes ----------

   (1) 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’.

   (2) O operador ‘%’ também é usado para formatação de strings; a mesma
precedência se aplica.


File: python.info,  Node: Instruções simples,  Next: Instruções compostas,  Prev: Expressões,  Up: A Referência da Linguagem Python

4.7 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 é:

     simple_stmt ::= *note expression_stmt: 2227.
                     | *note assert_stmt: 2228.
                     | *note assignment_stmt: 2229.
                     | *note augmented_assignment_stmt: 222a.
                     | *note annotated_assignment_stmt: 222b.
                     | *note pass_stmt: 222c.
                     | *note del_stmt: 222d.
                     | *note return_stmt: 222e.
                     | *note yield_stmt: 222f.
                     | *note raise_stmt: 2230.
                     | *note break_stmt: 2231.
                     | *note continue_stmt: 2232.
                     | *note import_stmt: 2233.
                     | *note future_stmt: 2234.
                     | *note global_stmt: 2235.
                     | *note nonlocal_stmt: 2236.
                     | *note type_stmt: 2237.

* Menu:

* Instruções de expressão::
* Instruções de atribuição::
* A instrução assert::
* A instrução pass::
* A instrução del: A instrução del<2>.
* A instrução return::
* A instrução yield::
* A instrução raise::
* A instrução break::
* A instrução continue::
* A instrução import::
* A instrução global::
* A instrução nonlocal::
* A instrução type::


File: python.info,  Node: Instruções de expressão,  Next: Instruções de atribuição,  Up: Instruções simples

4.7.1 Instruções de expressão
-----------------------------

As instruções de expressão são usadas (principalmente interativamente)
para calcular e escrever um valor, ou (geralmente) para chamar um
procedimento (uma função que não retorna nenhum resultado significativo;
em Python, os procedimentos retornam o valor ‘None’).  Outros usos de
instruções de expressão são permitidos e ocasionalmente úteis.  A
sintaxe para uma instrução de expressão é:

     expression_stmt ::= *note starred_expression: 21b6.

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 *note repr(): 800. e a string
resultante será gravada na saída padrão em uma linha sozinha (exceto se
o resultado é ‘None’, de modo que as chamadas de procedimento não causam
nenhuma saída.)


File: python.info,  Node: Instruções de atribuição,  Next: A instrução assert,  Prev: Instruções de expressão,  Up: Instruções simples

4.7.2 Instruções de atribuição
------------------------------

As instruções de atribuição são usadas para (re)vincular nomes a valores
e modificar atributos ou itens de objetos mutáveis:

     assignment_stmt ::= (*note target_list: 21bb. "=")+ (*note starred_expression: 21b6. | *note yield_expression: 2051.)
     target_list     ::= *note target: 223b. ("," *note target: 223b.)* [","]
     target          ::= *note identifier: 2023.
                         | "(" [*note target_list: 21bb.] ")"
                         | "[" [*note target_list: 21bb.] "]"
                         | *note attributeref: 21da.
                         | *note subscription: 21db.
                         | *note slicing: 21dc.
                         | "*" *note target: 223b.

(Veja a seção *note Primárias: 21d8. para as definições de sintaxe de
'attributeref', 'subscription' e 'slicing'.)

Uma instrução de atribuição avalia a lista de expressões (lembre-se de
que pode ser uma única expressão ou uma lista separada por vírgulas, a
última produzindo uma tupla) e atribui o único objeto resultante a cada
uma das listas alvos, da esquerda para a direita.

A atribuição é definida recursivamente dependendo da forma do alvo
(lista).  Quando um alvo faz parte de um objeto mutável (uma referência
de atributo, assinatura ou divisão), o objeto mutável deve, em última
análise, executar a atribuição e decidir sobre sua validade e pode
levantar uma exceção se a atribuição for inaceitável.  As regras
observadas pelos vários tipos e as exceções levantadas são dadas com a
definição dos tipos de objetos (ver seção *note A hierarquia de tipos
padrão: 2075.).

A atribuição de um objeto a uma lista alvo, opcionalmente entre
parênteses ou colchetes, é definida recursivamente da maneira a seguir.

   * Se a lista alvo contiver um único alvo sem vírgula à direita,
     opcionalmente entre parênteses, o objeto será atribuído a esse
     alvo.

   * Senão:

        * Se a lista alvo contiver um alvo prefixado com um asterisco,
          chamado de alvo “com estrela” '(starred)': o objeto deve ser
          um iterável com pelo menos tantos itens quantos os alvos na
          lista alvo, menos um.  Os primeiros itens do iterável são
          atribuídos, da esquerda para a direita, aos alvos antes do
          alvo com estrela.  Os itens finais do iterável são atribuídos
          aos alvos após o alvo com estrela.  Uma lista dos itens
          restantes no iterável é então atribuída ao alvo com estrela (a
          lista pode estar vazia).

        * Senão: o objeto deve ser um iterável com o mesmo número de
          itens que existem alvos na lista alvos, e os itens são
          atribuídos, da esquerda para a direita, aos alvos
          correspondentes.

A atribuição de um objeto a um único alvo é definida recursivamente da
maneira a seguir.

   * Se o alvo for um identificador (nome):

        * Se o nome não ocorrer em uma instrução *note global: 18a. ou
          *note nonlocal: 12ea. no bloco de código atual: o nome está
          vinculado ao objeto no espaço de nomes local atual.

        * Caso contrário: o nome é vinculado ao objeto no espaço de
          nomes global global ou no espaço de nomes global externo
          determinado por *note nonlocal: 12ea, respectivamente.

     O nome é vinculado novamente se já estiver vinculado.  Isso pode
     fazer com que a contagem de referências para o objeto anteriormente
     vinculado ao nome chegue a zero, fazendo com que o objeto seja
     desalocado e seu destrutor (se houver) seja chamado.

   * Se o alvo for uma referência de atributo: a expressão primária na
     referência é avaliada.  Deve produzir um objeto com atributos
     atribuíveis; se este não for o caso, a exceção *note TypeError:
     2c3. é levanta.  Esse objeto é então 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 *note AttributeError: 34b.).  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 *note property(): 194.

   * 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 *note IndexError: 157e. 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 *note __setitem__():
     130e. é 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.

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 “simultâ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
..........

PEP 3132(1) - Desempacotamento estendido de iterável

     A especificação para o recurso ‘*target’.

* Menu:

* Instruções de atribuição aumentada::
* instruções de atribuição anotado::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3132/


File: python.info,  Node: Instruções de atribuição aumentada,  Next: instruções de atribuição anotado,  Up: Instruções de atribuição

4.7.2.1 Instruções de atribuição aumentada
..........................................

A atribuição aumentada é a combinação, em uma única instrução, de uma
operação binária e uma instrução de atribuição:

     augmented_assignment_stmt ::= *note augtarget: 223f. *note augop: 2240. (*note expression_list: 221d. | *note yield_expression: 2051.)
     augtarget                 ::= *note identifier: 2023. | *note attributeref: 21da. | *note subscription: 21db. | *note slicing: 21dc.
     augop                     ::= "+=" | "-=" | "*=" | "@=" | "/=" | "//=" | "%=" | "**="
                                   | ">>=" | "<<=" | "&=" | "^=" | "|="

(Veja a seção *note Primárias: 21d8. 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 *note advertência
sobre atributos de classe e instância: 223c. se aplica a atribuições
regulares.


File: python.info,  Node: instruções de atribuição anotado,  Prev: Instruções de atribuição aumentada,  Up: Instruções de atribuição

4.7.2.2 instruções de atribuição anotado
........................................

A atribuição de *note anotação: d79. é a combinação, em uma única
instrução, de uma anotação de variável ou atributo e uma instrução de
atribuição opcional:

     annotated_assignment_stmt ::= *note augtarget: 223f. ":" *note expression: 21c8.
                                   ["=" (*note starred_expression: 21b6. | *note yield_expression: 2051.)]

A diferença para as *note Instruções de atribuição: 2168. 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 *note
__setitem__(): 130e. ou *note __setattr__(): 20bf.

Ver também
..........

PEP 526(1) - Sintaxe para Anotações de Variáveis

     A proposta que adicionou sintaxe para anotar os tipos de variáveis
     (incluindo variáveis de classe e variáveis de instância), em vez de
     expressá-las por meio de comentários.

PEP 484(2) - Dicas de tipo

     A proposta que adicionou o módulo *note typing: 104. para fornecer
     uma sintaxe padrão para anotações de tipo que podem ser usadas em
     ferramentas de análise estática e IDEs.

Alterado na versão 3.8: Agora, as atribuições anotadas permitem as
mesmas expressões no lado direito que as atribuições regulares.
Anteriormente, algumas expressões (como expressões de tupla sem
parênteses) causavam um erro de sintaxe.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0526/

   (2) https://peps.python.org/pep-0484/


File: python.info,  Node: A instrução assert,  Next: A instrução pass,  Prev: Instruções de atribuição,  Up: Instruções simples

4.7.3 A instrução ‘assert’
--------------------------

As instruções assert são uma maneira conveniente de inserir asserções de
depuração em um programa:

     assert_stmt ::= "assert" *note expression: 21c8. ["," *note expression: 21c8.]

A forma simples, ‘assert expression’, é equivalente a

     if __debug__:
         if not expression: raise AssertionError

A forma estendida, ‘assert expression1, expression2’, é equivalente a

     if __debug__:
         if not expression1: raise AssertionError(expression2)

Essas equivalências presumem que *note __debug__: 7db. e *note
AssertionError: 6a9. 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 *note -O: ddd.).  O gerador de código atual não
emite código para uma instrução *note assert: 96f. 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 *note __debug__: 7db. são ilegais.  O valor da variável
embutida é determinado quando o interpretador é iniciado.


File: python.info,  Node: A instrução pass,  Next: A instrução del<2>,  Prev: A instrução assert,  Up: Instruções simples

4.7.4 A instrução ‘pass’
------------------------

     pass_stmt ::= "pass"

*note pass: 1d99. é 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:

     def f(arg): pass    # uma função que faz nada (ainda)

     class C: pass       # uma classe com nenhum método (ainda)


File: python.info,  Node: A instrução del<2>,  Next: A instrução return,  Prev: A instrução pass,  Up: Instruções simples

4.7.5 A instrução ‘del’
-----------------------

     del_stmt ::= "del" *note target_list: 21bb.

A exclusão é definida recursivamente de maneira muito semelhante à
maneira como a atribuição é definida.  Em vez de explicar em detalhes,
aqui estão algumas dicas.

A exclusão de uma lista alvo exclui recursivamente cada alvo, da
esquerda para a direita.

A exclusão de um nome remove a ligação desse nome do espaço de nomes
local ou global, dependendo se o nome ocorre em uma instrução *note
global: 18a. no mesmo bloco de código.  Tentar excluir um nome
desvinculado levanta uma exceção *note NameError: 43f.

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.


File: python.info,  Node: A instrução return,  Next: A instrução yield,  Prev: A instrução del<2>,  Up: Instruções simples

4.7.6 A instrução ‘return’
--------------------------

     return_stmt ::= "return" [*note expression_list: 221d.]

*note return: 9d6. só pode ocorrer sintaticamente aninhado em uma
definição de função, não em uma definição de classe aninhada.

Se uma lista de expressões estiver presente, ela será avaliada, caso
contrário, será usado o valor ‘None’.

*note return: 9d6. deixa a chamada da função atual com a lista de
expressões (ou ‘None’) como valor de retorno.

Quando *note return: 9d6. passa o controle de uma instrução *note try:
6e9. com uma cláusula *note finally: 9d2, essa cláusula ‘finally’ é
executada antes de realmente sair da função.

Em uma função geradora, a instrução *note return: 9d6. indica que o
gerador está pronto e fará com que uma exceção *note StopIteration: c15.
seja levantada.  O valor retornado (se houver) é usado como argumento
para construir *note StopIteration: c15. e se torna o atributo *note
StopIteration.value: 2157.

Em uma função de gerador assíncrono, uma instrução *note return: 9d6.
vazia indica que o gerador assíncrono está pronto e fará com que uma
exceção *note StopAsyncIteration: 1ba5. seja levantada.  Uma instrução
‘return’ não vazia é um erro de sintaxe em uma função de gerador
assíncrono.


File: python.info,  Node: A instrução yield,  Next: A instrução raise,  Prev: A instrução return,  Up: Instruções simples

4.7.7 A instrução ‘yield’
-------------------------

     yield_stmt ::= *note yield_expression: 2051.

Uma instrução *note yield: 9d5. é semanticamente equivalente a uma *note
expressão yield: 21cc.  A instrução ‘yield’ pode ser usada para omitir
os parênteses que, de outra forma, seriam necessários na instrução de
expressão yield equivalente.  Por exemplo, as instruções yield

     yield <expr>
     yield from <expr>

são equivalentes às instruções de expressão yield

     (yield <expr>)
     (yield from <expr>)

Expressões e instruções yield são usadas apenas ao definir uma função
*note geradora: 109a. e são usadas apenas no corpo da função geradora.
Usar *note yield: 9d5. 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 *note yield: 9d5, consulte a seção
*note Expressões yield: 21cc.


File: python.info,  Node: A instrução raise,  Next: A instrução break,  Prev: A instrução yield,  Up: Instruções simples

4.7.8 A instrução ‘raise’
-------------------------

     raise_stmt ::= "raise" [*note expression: 21c8. ["from" *note expression: 21c8.]]

Se nenhuma expressão estiver presente, *note raise: 5ed. reativa a
exceção em tratamento no momento, também conhecida como 'exceção ativa'.
Se não houver uma exceção ativa no momento, uma exceção *note
RuntimeError: 195. é levantada indicando que isso é um erro.

Caso contrário, *note raise: 5ed. avalia a primeira expressão como o
objeto de exceção.  Deve ser uma subclasse ou uma instância de *note
BaseException: 5bb.  Se for uma classe, a instância de exceção será
obtida quando necessário, instanciando a classe sem argumentos.

O 'tipo' da exceção é a classe da instância de exceção, o 'valor' é a
própria instância.

Um objeto traceback (situação da pilha de execução) normalmente é criado
automaticamente quando uma exceção é levantada e anexada a ele como o
atributo *note __traceback__: 1309.  Você pode criar uma exceção e
definir seu próprio traceback em uma etapa usando o método de exceção
*note with_traceback(): 2249. (que retorna a mesma instância de exceção,
com seu traceback definido para seu argumento), assim:

     raise Exception("ocorreu foo").with_traceback(tracebackobj)

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 *note __cause__: 130b. (que
é gravável).  Se a expressão for uma classe de exceção, a classe será
instanciada e a instância 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:

     Traceback (most recent call last):
       File "<stdin>", line 4, in <module>
         raise RuntimeError("Something bad happened") from exc
     RuntimeError: Something bad happened

Um mecanismo semelhante funciona implicitamente quando uma nova exceção
for levantada enquanto outra já estiver sendo tratada.  Uma exceção pode
ser tratada quando uma cláusula *note except: 18b. ou *note finally:
9d2, ou uma instrução *note with: 5d2, é usada.  A exceção anterior é
então anexada como o atributo *note __context__: 130a. da nova exceção:

     >>> try:
     ...     print(1 / 0)
     ... except:
     ...     raise RuntimeError("Something bad happened")
     ...
     Traceback (most recent call last):
       File "<stdin>", line 2, in <module>
         print(1 / 0)
               ~~^~~
     ZeroDivisionError: division by zero

     During handling of the above exception, another exception occurred:

     Traceback (most recent call last):
       File "<stdin>", line 4, in <module>
         raise RuntimeError("Something bad happened")
     RuntimeError: Something bad happened

O encadeamento de exceção pode ser explicitamente suprimido
especificando *note None: 675. 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
*note Exceções: 2173, e informações sobre como lidar com exceções estão
na seção *note A instrução try: 6e9.

Alterado na versão 3.3: *note None: 675. agora é permitido como ‘Y’ em
‘raise X from Y’.

Adicionado o atributo *note __suppress_context__: 224a. 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 *note except: 18b, 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.


File: python.info,  Node: A instrução break,  Next: A instrução continue,  Prev: A instrução raise,  Up: Instruções simples

4.7.9 A instrução ‘break’
-------------------------

     break_stmt ::= "break"

*note break: ab8. só pode ocorrer sintaticamente aninhado em um laço
*note for: 2f2. ou *note while: 1d82, mas não aninhado em uma função ou
definição de classe dentro desse laço.

Ele termina o laço de repetição mais próximo, pulando a cláusula
opcional ‘else’ se o laço tiver uma.

Se um laço *note for: 2f2. é encerrado por *note break: ab8, o alvo de
controle do laço mantém seu valor atual.

Quando *note break: ab8. passa o controle de uma instrução *note try:
6e9. com uma cláusula *note finally: 9d2, essa cláusula ‘finally’ é
executada antes de realmente sair do laço.


File: python.info,  Node: A instrução continue,  Next: A instrução import,  Prev: A instrução break,  Up: Instruções simples

4.7.10 A instrução ‘continue’
-----------------------------

     continue_stmt ::= "continue"

*note continue: 9d1. só pode ocorrer sintaticamente aninhado em um laço
*note for: 2f2. ou *note while: 1d82, mas não em uma função ou definição
de classe dentro desse laço.  Ele continua com o próximo ciclo do laço
de repetição mais próximo.

Quando *note continue: 9d1. passa o controle de uma instrução *note try:
6e9. com uma cláusula *note finally: 9d2, essa cláusula ‘finally’ é
executada antes de realmente iniciar o próximo ciclo do laço.


File: python.info,  Node: A instrução import,  Next: A instrução global,  Prev: A instrução continue,  Up: Instruções simples

4.7.11 A instrução ‘import’
---------------------------

     import_stmt     ::= "import" *note module: 224e. ["as" *note identifier: 2023.] ("," *note module: 224e. ["as" *note identifier: 2023.])*
                         | "from" *note relative_module: 224f. "import" *note identifier: 2023. ["as" *note identifier: 2023.]
                         ("," *note identifier: 2023. ["as" *note identifier: 2023.])*
                         | "from" *note relative_module: 224f. "import" "(" *note identifier: 2023. ["as" *note identifier: 2023.]
                         ("," *note identifier: 2023. ["as" *note identifier: 2023.])* [","] ")"
                         | "from" *note relative_module: 224f. "import" "*"
     module          ::= (*note identifier: 2023. ".")* *note identifier: 2023.
     relative_module ::= "."* *note module: 224e. | "."+

A instrução de importação básica (sem cláusula *note from: 12ee.) é
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 *note import: 5e2.

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 *note sistema de
importação: 20a3, 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 maneiras:

   * Se o nome do módulo é seguido pela palavra-chave ‘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 *note from: 12ee. usa um processo um pouco mais complexo:

  1. encontra o módulo especificado na cláusula *note from: 12ee,
     carregando e inicializando-o se necessário;

  2. para cada um dos identificadores especificados nas cláusulas *note
     import: 5e2.:

       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 *note ImportError:
          419. é 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:

     import foo                 # foo importado e vinculado localmente
     import foo.bar.baz         # foo, foo.bar e foo.bar.baz importados, foo vinculado localmente
     import foo.bar.baz as fbb  # foo, foo.bar e foo.bar.baz importados, foo.bar.baz vinculado como fbb
     from foo.bar import baz    # foo, foo.bar e foo.bar.baz importados, foo.bar.baz vinculado como baz
     from foo import attr       # foo importado e foo.attr vinculado como 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 *note import: 5e2.

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 *note SyntaxError: 18d.

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 *note from: 12ee. 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 ‘pkg.mod’.  Se você executar ‘from ..subpkg2
import mod’ de dentro de ‘pkg.subpkg1’ você irá importar
‘pkg.subpkg2.mod’.  A especificação para importações relativas está
contida na seção *note Importações relativas ao pacote: 2199.

*note importlib.import_module(): 518. é fornecida para dar suporte a
aplicações que determinam dinamicamente os módulos a serem carregados.

Levanta um *note evento de auditoria: 19fa. ‘import’ com os argumentos
‘module’, ‘filename’, ‘sys.path’, ‘sys.meta_path’, ‘sys.path_hooks’.

* Menu:

* Instruções future::


File: python.info,  Node: Instruções future,  Up: A instrução import

4.7.11.1 Instruções future
..........................

Uma 'instrução future' é uma diretiva para o compilador de que um
determinado módulo deve ser compilado usando sintaxe ou semântica que
estará disponível em uma versão futura especificada do Python, onde o
recurso se tornará padrão.

A instrução future destina-se a facilitar a migração para versões
futuras do Python que introduzem alterações incompatíveis na linguagem.
Ele permite o uso dos novos recursos por módulo antes do lançamento em
que o recurso se torna padrão.

     future_stmt ::= "from" "__future__" "import" *note feature: 2251. ["as" *note identifier: 2023.]
                     ("," *note feature: 2251. ["as" *note identifier: 2023.])*
                     | "from" "__future__" "import" "(" *note feature: 2251. ["as" *note identifier: 2023.]
                     ("," *note feature: 2251. ["as" *note identifier: 2023.])* [","] ")"
     feature     ::= *note identifier: 2023.

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),

   * comentários,

   * linhas vazias e

   * outras instruções future.

O único recurso que requer o uso da instrução future é ‘annotations’
(veja PEP 563(1)).

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 *note __future__: 0, 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:

     import __future__ [as name]

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 *note exec():
17f. e *note compile(): 192. 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 *note compile(): 192. – 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 *note -i: 1523, 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
..........

PEP 236(2) - De volta ao __future__

     A proposta original para o mecanismo do __future__.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0563/

   (2) https://peps.python.org/pep-0236/


File: python.info,  Node: A instrução global,  Next: A instrução nonlocal,  Prev: A instrução import,  Up: Instruções simples

4.7.12 A instrução ‘global’
---------------------------

     global_stmt ::= "global" *note identifier: 2023. ("," *note identifier: 2023.)*

A instrução *note global: 18a. faz com que os identificadores listados a
serem interpretados como globais.  Seria impossível atribuir a uma
variável global sem ‘global’, embora variáveis livres possam se referir
a globais sem serem declaradas globais.

A instrução ‘global’ se aplica a todo o escopo atual (módulo, corpo da
função ou definição de classe).  Uma exceção *note SyntaxError: 18d. é
levantada se uma variável for usada ou atribuída antes de sua declaração
global no escopo.

No nível do módulo, todas as variáveis são globais, portanto, uma
instrução ‘global’ não tem efeito.  No entanto, as variáveis ainda não
devem ser usadas ou atribuídas antes de sua declaração ‘global’.  Este
requisito é flexibilizado no prompt interativo (*note REPL: 16a.).

'Nota do programador:' *note global: 18a. é 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 *note
exec(): 17f. 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 *note eval(): 180. e *note compile(): 192.


File: python.info,  Node: A instrução nonlocal,  Next: A instrução type,  Prev: A instrução global,  Up: Instruções simples

4.7.13 A instrução ‘nonlocal’
-----------------------------

     nonlocal_stmt ::= "nonlocal" *note identifier: 2023. ("," *note identifier: 2023.)*

Quando a definição de uma função ou classe está aninhada (incluída) nas
definições de outras funções, seus escopos não locais são os escopos
locais das funções envolventes.  A instrução *note nonlocal: 12ea. faz
com que os identificadores listados se refiram a nomes previamente
vinculados a escopos não locais.  Ele permite que o código encapsulado
religue esses identificadores não locais.  Se um nome estiver ligado a
mais de um escopo não local, a ligação mais próxima será usada.  Se um
nome não estiver vinculado a nenhum escopo não local, ou se não houver
escopo não local, uma exceção *note SyntaxError: 18d. será levantada.

A instrução *note nonlocal: 12ea. se aplica a todo o escopo de uma
função ou corpo da classe.  Uma exceção *note SyntaxError: 18d. é
levantada se uma variável for usada ou atribuída antes de sua declaração
nonlocal no escopo.

Ver também
..........

PEP 3104(1) - Acesso a nomes em escopos externos

     A especificação para a instrução *note nonlocal: 12ea.

'Nota do programador:' *note nonlocal: 12ea. é 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 *note global: 18a.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3104/


File: python.info,  Node: A instrução type,  Prev: A instrução nonlocal,  Up: Instruções simples

4.7.14 A instrução ‘type’
-------------------------

     type_stmt ::= 'type' *note identifier: 2023. [*note type_params: 2255.] "=" *note expression: 21c8.

A instrução ‘type’ declara um apelido de tipo, que é uma instância de
*note typing.TypeAliasType: 455.

Por exemplo, a instrução a seguir cria um apelido de tipo:

     type Point = tuple[float, float]

Este código é aproximadamente equivalente a:

     annotation-def VALUE_OF_Point():
         return tuple[float, float]
     Point = typing.TypeAliasType("Point", VALUE_OF_Point())

‘annotation-def’ indica um *note escopo de anotação: 188, 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 *note
Avaliação preguiçosa: 457.).  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 *note lista
de parâmetros de tipo: 2b3. após o nome.  Veja *note Apelidos de tipo
genérico: 456. para mais.

‘type’ é uma *note palavra reservada contextual: 80f.

Adicionado na versão 3.12.

Ver também
..........

PEP 695(1) - Sintaxe de parâmetros de tipo

     Introduziu a instrução ‘type’ e sintaxe para classes e funções
     genéricas.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0695/


File: python.info,  Node: Instruções compostas,  Next: Componentes de Alto Nível,  Prev: Instruções simples,  Up: A Referência da Linguagem Python

4.8 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 *note if: 2f3, *note while: 1d82. e *note for: 2f2.
implementam construções tradicionais de controle do fluxo de execução.
*note try: 6e9. especifica tratadores de exceção e/ou código de limpeza
para uma instrução ou grupo de instruções, enquanto a palavra reservada
*note with: 5d2. permite a execução de código de inicialização e
finalização em volta de um bloco de código.  Definiçõ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 “conjunto”.  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 pontos.  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 *note if: 2f3. a seguinte cláusula *note else: 18c.
pertenceria:

     if test1: if test2: print(x)

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 *note print(): fa9. são executadas:

     if x < y < z: print(x); print(y); print(z)

Resumindo:

     compound_stmt ::= *note if_stmt: 225b.
                       | *note while_stmt: 225c.
                       | *note for_stmt: 225d.
                       | *note try_stmt: 225e.
                       | *note with_stmt: 225f.
                       | *note match_stmt: 2260.
                       | *note funcdef: 2261.
                       | *note classdef: 2262.
                       | *note async_with_stmt: 2263.
                       | *note async_for_stmt: 2264.
                       | *note async_funcdef: 2265.
     suite         ::= *note stmt_list: 2267. NEWLINE | NEWLINE INDENT *note statement: 2268.+ DEDENT
     statement     ::= *note stmt_list: 2267. NEWLINE | *note compound_stmt: 225a.
     stmt_list     ::= *note simple_stmt: 2226. (";" *note simple_stmt: 2226.)* [";"]

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
“*note else: 18c. pendurado” é resolvido em Python obrigando que
instruções *note if: 2f3. 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.
* Menu:

* A instrução if::
* A instrução while::
* A instrução for::
* A instrução try::
* A instrução with::
* A instrução match::
* Definições de função::
* Definições de classe::
* Corrotinas: Corrotinas<2>.
* Listas de parâmetros de tipo::


File: python.info,  Node: A instrução if,  Next: A instrução while,  Up: Instruções compostas

4.8.1 A instrução ‘if’
----------------------

A instrução *note if: 2f3. é usada para execução condicional:

     if_stmt ::= "if" *note assignment_expression: 21b9. ":" *note suite: 2266.
                 ("elif" *note assignment_expression: 21b9. ":" *note suite: 2266.)*
                 ["else" ":" *note suite: 2266.]

Ela seleciona exatamente um dos conjuntos 'suite' avaliando as
expressões 'assigment_expression' uma por uma até que uma seja
considerada verdadeira (veja a seção *note Operações booleanas: 220d.
para a definição de verdadeiro e falso); então esse conjunto é executado
(e nenhuma outra parte da instrução *note if: 2f3. é executada ou
avaliada).  Se todas as expressões forem falsas, o 'suite' da cláusula
*note else: 18c, se presente, é executado.


File: python.info,  Node: A instrução while,  Next: A instrução for,  Prev: A instrução if,  Up: Instruções compostas

4.8.2 A instrução ‘while’
-------------------------

A instrução *note while: 1d82. é usada para execução repetida desde que
uma expressão seja verdadeira:

     while_stmt ::= "while" *note assignment_expression: 21b9. ":" *note suite: 2266.
                    ["else" ":" *note suite: 2266.]

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 *note break: ab8. executada no primeiro conjunto termina o
laço sem executar o conjunto da cláusula ‘else’.  Uma instrução *note
continue: 9d1. executada no primeiro conjunto ignora o resto do conjunto
e volta a testar a expressão.


File: python.info,  Node: A instrução for,  Next: A instrução try,  Prev: A instrução while,  Up: Instruções compostas

4.8.3 A instrução ‘for’
-----------------------

A instrução *note for: 2f2. é usada para iterar sobre os elementos de
uma sequência (como uma string, tupla ou lista) ou outro objeto
iterável:

     for_stmt ::= "for" *note target_list: 21bb. "in" starred_list ":" *note suite: 2266.
                  ["else" ":" *note suite: 2266.]

A expressão ‘starred_list’ é avaliada uma vez; deve produzir um objeto
*note iterável: 1268.  Um *note iterador: 1ac. é 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 *note
Instruções de atribuição: 2168.), 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 *note break: ab8. executada no primeiro conjunto termina o
loop sem executar o conjunto da cláusula ‘else’.  Uma instrução *note
continue: 9d1. 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             # não afeta o laço for, porque i será
                           # substituída pelo índice seguinte no 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 *note range(): 94a. 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.


File: python.info,  Node: A instrução try,  Next: A instrução with,  Prev: A instrução for,  Up: Instruções compostas

4.8.4 A instrução ‘try’
-----------------------

A instrução ‘try’ especifica manipuladores de exceção e/ou código de
limpeza para um grupo de instruções:

     try_stmt  ::= *note try1_stmt: 226d. | *note try2_stmt: 226e. | *note try3_stmt: 226f.
     try1_stmt ::= "try" ":" *note suite: 2266.
                   ("except" [*note expression: 21c8. ["as" *note identifier: 2023.]] ":" *note suite: 2266.)+
                   ["else" ":" *note suite: 2266.]
                   ["finally" ":" *note suite: 2266.]
     try2_stmt ::= "try" ":" *note suite: 2266.
                   ("except" "*" *note expression: 21c8. ["as" *note identifier: 2023.] ":" *note suite: 2266.)+
                   ["else" ":" *note suite: 2266.]
                   ["finally" ":" *note suite: 2266.]
     try3_stmt ::= "try" ":" *note suite: 2266.
                   "finally" ":" *note suite: 2266.

Informações adicionais sobre exceções podem ser encontradas na seção
*note Exceções: 2173, e informações sobre como usar a instrução *note
raise: 5ed. para gerar exceções podem ser encontradas na seção *note A
instrução raise: 5ed.

* Menu:

* Cláusula except::
* Cláusula except*::
* Cláusula else::
* Cláusula finally::


File: python.info,  Node: Cláusula except,  Next: Cláusula except*,  Up: A instrução try

4.8.4.1 Cláusula ‘except’
.........................

As cláusulas ‘except’ especificam um ou mais manipuladores de exceção.
Quando nenhuma exceção ocorre na cláusula *note try: 6e9, nenhum
manipulador de exceção é executado.  Quando uma exceção ocorre no bloco
‘try’, uma busca por um manipulador de exceção é iniciada.  Essa busca
inspeciona as cláusulas ‘except’ por vez até encontrar uma que
corresponda à exceção.  Uma cláusula ‘except’ sem expressão, se
presente, deve ser a última; ela corresponde a qualquer exceção.

Para uma cláusula ‘except’ com uma expressão, a expressão deve ser
avaliada como um tipo de exceção ou uma tupla de tipos de exceção.  A
exceção levantada corresponde a uma cláusula ‘except’ cuja expressão é
avaliada como a classe ou uma *note classe base não virtual: 11f5. do
objeto exceção, ou como uma tupla que contém tal classe.

Se nenhuma cláusula ‘except’ corresponder à exceção, a busca por um
manipulador de exceção continua no código circundante e na pilha de
invocação.  (1)

Se a avaliação de uma expressão no cabeçalho de uma cláusula ‘except’
levantar uma exceção, a busca original por um manipulador será cancelada
e uma busca pela nova exceção será iniciada no código circundante e na
pilha de chamadas (ela é tratada como se toda a instrução *note try:
6e9. levantasse a exceção).

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 *note try: 6e9.  (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 é atribuída usando ‘as target’, ela é limpa no final
da cláusula ‘except’.  É como se

     except E as N:
         foo

fosse traduzido para

     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 ser referenciada 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,
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 *note sys: d9, onde pode ser acessada no corpo da
cláusula ‘except’ chamando *note sys.exception(): 68b.  Ao sair de um
manipulador de exceções, a exceção armazenada no módulo *note sys: d9. é
redefinida para seu valor anterior:

     >>> print(sys.exception())
     None
     >>> try:
     ...     raise TypeError
     ... except:
     ...     print(repr(sys.exception()))
     ...     try:
     ...          raise ValueError
     ...     except:
     ...         print(repr(sys.exception()))
     ...     print(repr(sys.exception()))
     ...
     TypeError()
     ValueError()
     TypeError()
     >>> print(sys.exception())
     None

   ---------- Footnotes ----------

   (1) A exceção é propagada para a pilha de invocação, a menos que haja
uma cláusula *note finally: 9d2. que por acaso levante outra exceção.
Essa nova exceção faz com que a antiga seja perdida.


File: python.info,  Node: Cláusula except*,  Next: Cláusula else,  Prev: Cláusula except,  Up: A instrução try

4.8.4.2 Cláusula ‘except*’
..........................

A cláusula ‘except*’ especifica um ou mais manipuladores para grupos de
exceções (instâncias de *note BaseExceptionGroup: 25f.).  Uma instrução
*note try: 6e9. pode ter cláusulas *note except: 18b. ou ‘except*’, mas
não ambas.  O tipo de exceção para correspondência é obrigatório no caso
de ‘except*’, portanto, ‘except*:’ resulta em um erro de sintaxe.  O
tipo é interpretado como no caso de ‘except’, mas a correspondência é
realizada com as exceções contidas no grupo que está sendo tratado.  Uma
exceção *note TypeError: 2c3. é levantada se um tipo correspondente for
uma subclasse de ‘BaseExceptionGroup’, pois isso teria uma semântica
ambígua.

Quando um grupo de exceções é levantado dentro de um bloco try, cada
cláusula ‘except*’ o divide (consulte *note split(): 1670.) em subgrupos
de exceções correspondentes e não correspondentes.  Se o subgrupo
correspondente não estiver vazio, ele se torna a exceção tratada (o
valor retornado por *note sys.exception(): 68b.) e é atribuído ao alvo
da cláusula ‘except*’ (se houver).  Em seguida, o corpo da cláusula
‘except*’ é executado.  Se o subgrupo não correspondente não estiver
vazio, ele é processado pela próxima cláusula ‘except*’ da mesma
maneira.  Isso continua até que todas as exceções do grupo tenham sido
tratadas ou até que a última cláusula ‘except*’ tenha sido executada.

Após a execução de todas as cláusulas ‘except*’, o grupo de exceções não
tratadas é mesclado com quaisquer exceções que foram levantadas uma ou
mais vezes em cláusulas ‘except*’.  Esse grupo de exceções mesclado se
propaga.

     >>> try:
     ...     raise ExceptionGroup("eg",
     ...         [ValueError(1), TypeError(2), OSError(3), OSError(4)])
     ... except* TypeError as e:
     ...     print(f'caught {type(e)} with nested {e.exceptions}')
     ... except* OSError as e:
     ...     print(f'caught {type(e)} with nested {e.exceptions}')
     ...
     caught <class 'ExceptionGroup'> with nested (TypeError(2),)
     caught <class 'ExceptionGroup'> with nested (OSError(3), OSError(4))
       + Exception Group Traceback (most recent call last):
       |   File "<doctest default[0]>", line 2, in <module>
       |     raise ExceptionGroup("eg",
       |         [ValueError(1), TypeError(2), OSError(3), OSError(4)])
       | ExceptionGroup: eg (1 sub-exception)
       +-+---------------- 1 ----------------
         | ValueError: 1
         +------------------------------------

Se a exceção levantada do bloco *note try: 6e9. 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.  Isso garante que o tipo do alvo ‘e’ seja *note
BaseExceptionGroup: 25f. de forma consistente:

     >>> try:
     ...     raise BlockingIOError
     ... except* BlockingIOError as e:
     ...     print(repr(e))
     ...
     ExceptionGroup('', (BlockingIOError(),))

*note break: ab8, *note continue: 9d1. e *note return: 9d6. não podem
aparecer em uma cláusula ‘except*’.


File: python.info,  Node: Cláusula else,  Next: Cláusula finally,  Prev: Cláusula except*,  Up: A instrução try

4.8.4.3 Cláusula ‘else’
.......................

A cláusula opcional ‘else’ é executada se o fluxo de controle deixar o
conjunto *note try: 6e9, nenhuma exceção foi levantada e nenhuma
instrução *note return: 9d6, *note continue: 9d1. ou *note break: ab8.
foi executada.  Exceções na cláusula ‘else’ não são manipuladas pelas
cláusulas *note except: 18b. precedentes.


File: python.info,  Node: Cláusula finally,  Prev: Cláusula else,  Up: A instrução try

4.8.4.4 Cláusula ‘finally’
..........................

If ‘finally’ is present, it specifies a ‘cleanup’ handler.  The *note
try: 6e9. clause is executed, including any *note except: 18b. and *note
else: 2273. clauses.  If an exception occurs in any of the clauses and
is not handled, the exception is temporarily saved.  The ‘finally’
clause is executed.  If there is a saved exception it is re-raised at
the end of the ‘finally’ clause.  If the ‘finally’ clause raises another
exception, the saved exception is set as the context of the new
exception.  If the ‘finally’ clause executes a *note return: 9d6, *note
break: ab8. or *note continue: 9d1. statement, the saved exception is
discarded:

     >>> def f():
     ...     try:
     ...         1/0
     ...     finally:
     ...         return 42
     ...
     >>> f()
     42

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 *note return: 9d6, *note break: ab8. ou *note
continue: 9d1. é executada no conjunto *note try: 6e9. 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
*note return: 9d6. executada.  Como a cláusula ‘finally’ sempre é
executada, uma instrução ‘return’ executada na cláusula ‘finally’ sempre
será a última executada:

     >>> def foo():
     ...     try:
     ...         return 'try'
     ...     finally:
     ...         return 'finally'
     ...
     >>> foo()
     'finally'

Alterado na versão 3.8: Antes do Python 3.8, uma instrução *note
continue: 9d1. era ilegal na cláusula ‘finally’ devido a um problema com
a implementação.


File: python.info,  Node: A instrução with,  Next: A instrução match,  Prev: A instrução try,  Up: Instruções compostas

4.8.5 A instrução ‘with’
------------------------

A instrução *note with: 5d2. envolve a execução de um bloco com métodos
definidos por um gerenciador de contexto (veja a seção *note
Gerenciadores de contexto da instrução with: 214c.).  Isso permite que
padrões comuns de uso de *note try: 6e9.…*note except: 18b.…*note
finally: 9d2. sejam encapsulados para reutilização conveniente.

     with_stmt          ::= "with" ( "(" *note with_stmt_contents: 2277. ","? ")" | *note with_stmt_contents: 2277. ) ":" *note suite: 2266.
     with_stmt_contents ::= *note with_item: 2278. ("," *note with_item: 2278.)*
     with_item          ::= *note expression: 21c8. ["as" *note target: 223b.]

A execução da instrução *note with: 5d2. com um “item” ocorre da
seguinte maneira:

  1. A expressão de contexto (a expressão fornecida em *note with_item:
     2278.) é avaliada para obter um gerenciador de contexto.

  2. O método *note __enter__(): 5c8. do gerenciador de contexto é
     carregado para uso posterior.

  3. O método *note __exit__(): 1344. do gerenciador de contexto é
     carregado para uso posterior.

  4. O método *note __enter__(): 5c8. do gerenciador de contexto é
     invocado.

  5. Se um alvo foi incluído na instrução *note with: 5d2, o valor de
     retorno de *note __enter__(): 5c8. é atribuído a esse alvo.

          Nota: A instrução *note with: 5d2. garante que, se o método
          *note __enter__(): 5c8. retornar sem erro, *note __exit__():
          1344. 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 'suite' é executado.

  7. O método *note __exit__(): 1344. 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 *note
     __exit__(): 1344.  Caso contrário, três argumentos *note None: 675.
     são fornecidos.

     Se o conjunto foi encerrado devido a uma exceção, e o valor de
     retorno do método *note __exit__(): 1344. for 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 *note with: 5d2.

     Se o conjunto foi encerrado por qualquer motivo diferente de uma
     exceção, o valor de retorno de *note __exit__(): 1344. é ignorado e
     a execução prossegue no local normal para o tipo de saída que foi
     gerada.

O seguinte código:

     with EXPRESSION as TARGET:
         SUITE

é 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 *note with: 5d2. estivessem aninhadas:

     with A() as a, B() as b:
         SUITE

é 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 parênteses.  Por exemplo:

     with (
         A() as a,
         B() as b,
     ):
         SUITE

Alterado na versão 3.1: Suporte para múltiplas expressões de contexto.

Alterado na versão 3.10: Suporte para usar parênteses de agrupamento
para dividir a instrução em várias linhas.

Ver também
..........

PEP 343(1) - A instrução “with”

     A especificação, o histórico e os exemplos para a instrução Python
     *note with: 5d2.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0343/


File: python.info,  Node: A instrução match,  Next: Definições de função,  Prev: A instrução with,  Up: Instruções compostas

4.8.6 A instrução ‘match’
-------------------------

Adicionado na versão 3.10.

A instrução match é usada para correspondência de padrões.  Sintaxe:

     match_stmt   ::= 'match' *note subject_expr: 227b. ":" NEWLINE INDENT *note case_block: 227c.+ DEDENT
     subject_expr ::= star_named_expression "," star_named_expressions?
                      | named_expression
     case_block   ::= 'case' *note patterns: 227d. [*note guard: 227e.] ":" block

     Nota: Esta seção usa aspas simples para denotar *note palavras
     reservadas contextuais: 80f.

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 *note palavras reservadas
contextuais: 80f.

Ver também
..........

   * PEP 634(1) – Structural Pattern Matching: Specification

   * PEP 636(2) – Correspondência de padrões estruturais: Tutorial

* Menu:

* Visão Geral::
* Guards::
* Blocos irrefutáveis de case::
* Padrões::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0634/

   (2) https://peps.python.org/pep-0636/


File: python.info,  Node: Visão Geral,  Next: Guards,  Up: A instrução match

4.8.6.1 Visão Geral
...................

Aqui está uma visão geral do fluxo lógico de uma instrução match:

  1. A expressão de sujeito ‘subject_expr’ é avaliada e um valor de
     sujeito resultante é obtido.  Se a expressão de sujeito contiver
     uma vírgula, uma tupla é construída usando *note as regras padrão:
     2280.

  2. Cada padrão em um ‘case_block’ é tentado para corresponder ao valor
     de sujeito.  As regras específicas para sucesso ou falha são
     descritas abaixo.  A tentativa de correspondência também pode
     vincular alguns ou todos os nomes autônomos dentro do padrão.  As
     regras precisas de vinculação de padrão variam por tipo de padrão e
     são especificadas abaixo.  'As vinculações de nome feitas durante
     uma correspondência de padrão bem-sucedida sobrevivem ao bloco
     executado e podem ser usadas após a instrução match'.

          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 implementaçõ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á executado.

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

Um exemplo de instrução match:

     >>> flag = False
     >>> match (100, 200):
     ...    case (100, 300):  # Não corresponde: 200 != 300
     ...        print('Case 1')
     ...    case (100, 200) if flag:  # Corresponde com sucesso, mas o guard falha...
             print('Case 2')
     ...    case (100, y):  # Corresponde e vincula y a 200
     ...        print(f'Case 3, y: {y}')
     ...    case _:  # Padrão não testado
     ...        print('Case 4, I match anything!')
     ...
     Case 3, y: 200

Neste caso, ‘if flag’ é um 'guard'.  Leia mais sobre isso na próxima
seção.


File: python.info,  Node: Guards,  Next: Blocos irrefutáveis de case,  Prev: Visão Geral,  Up: A instrução match

4.8.6.2 Guards
..............

     guard ::= "if" named_expression

Um ‘guard’ (que faz parte do ‘case’) deve ter sucesso para que o código
dentro do bloco ‘case’ seja executado.  Ele assume a forma: *note if:
2f3. seguido por uma expressão.

O fluxo lógico de um bloco ‘case’ com um ‘guard’ é o seguinte:

  1. Verifique se o padrão no bloco ‘case’ foi bem-sucedido.  Se o
     padrão falhou, o ‘guard’ não é avaliado e o próximo bloco ‘case’ é
     verificado.

  2. Se o padrão for bem-sucedido, avalia o ‘guard’.

        * Se a condição ‘guard’ for avaliada como verdadeira, o bloco de
          caso será selecionado.

        * Se a condição ‘guard’ for avaliada como falsa, o bloco de caso
          não será selecionado.

        * Se o ‘guard’ levantar uma exceção durante a avaliação, a
          exceção surgirá.

Guards podem ter efeitos colaterais, pois são expressões.  A avaliação
de guards deve prosseguir do primeiro ao último bloco de caso, um de
cada vez, pulando blocos de caso cujos padrões não são todos
bem-sucedidos.  (Isto é, a avaliação de guardas deve acontecer em
ordem.)  A avaliação de guards deve parar quando um bloco de caso for
selecionado.


File: python.info,  Node: Blocos irrefutáveis de case,  Next: Padrões,  Prev: Guards,  Up: A instrução match

4.8.6.3 Blocos irrefutáveis de case
...................................

Um bloco irrefutável de case é um bloco de case que corresponde a
qualquer valor.  Uma instrução match pode ter no máximo um bloco
irrefutável de case, e ele deve ser o último.

Um bloco de case é considerado irrefutável se não tiver guard e seu
padrão for irrefutável.  Um padrão é considerado irrefutável se pudermos
provar somente por sua sintaxe que ele sempre terá sucesso.  Somente os
seguintes padrões são irrefutáveis:

   * *note Padrões AS: 2284. cujo lado esquerdo é irrefutável

   * *note Padrões OR: 2285. contendo pelo menos um padrão irrefutável

   * *note Padrões de captura: 2286.

   * *note Padrões curingas: 811.

   * padrões irrefutáveis entre parêteses


File: python.info,  Node: Padrões,  Prev: Blocos irrefutáveis de case,  Up: A instrução match

4.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 ‘SEP.RULE+’ é uma abreviação para ‘RULE (SEP RULE)*’

        * a notação ‘!RULE’ é uma abreviação para uma asserção de
          negação antecipada.

Esta é a sintaxe de nível superior para ‘patterns’ (padrões):

     patterns       ::= *note open_sequence_pattern: 2288. | *note pattern: 2289.
     pattern        ::= *note as_pattern: 228a. | *note or_pattern: 228b.
     closed_pattern ::= | *note literal_pattern: 228d.
                        | *note capture_pattern: 228e.
                        | *note wildcard_pattern: 228f.
                        | *note value_pattern: 2290.
                        | *note group_pattern: 2291.
                        | *note sequence_pattern: 2292.
                        | *note mapping_pattern: 2293.
                        | *note class_pattern: 2294.

As descrições abaixo incluirão uma descrição “em termos simples” de o
que o padrão faz para fins ilustrativos (créditos a Raymond Hettinger
pelo documento que inspirou a maioria das descrições).  Note que essas
descrições são puramente para fins ilustrativos, e 'não necessariamente'
refletem a implementação subjacente.  Além disso, elas não cobrem todas
as formas válidas.

* Menu:

* Padrões OR::
* Padrões AS::
* Padrões literais::
* Padrões de captura::
* Padrões curingas::
* Padrões de valor::
* Padrões de grupo::
* Padrões de sequência::
* Padrões de mapeamento::
* Padrões de classe::


File: python.info,  Node: Padrões OR,  Next: Padrões AS,  Up: Padrões

4.8.6.5 Padrões OR
..................

Um padrão OR é composto por dois ou mais padrões separados por barras
verticais ‘|’.  Sintaxe:

     or_pattern ::= "|".*note closed_pattern: 228c.+

Somente o último subpadrão pode ser *note irrefutável: 2282, e cada
subpadrão deve vincular o mesmo conjunto de nomes para evitar
ambiguidades.

Um padrão OR testa a correspondência de cada um dos seus subpadrões, em
sequência, ao valor do sujeito, até que uma delas seja bem sucedida.  O
padrão OR é então considerado bem sucedido.  Caso contrário, se todas
elas falharam, o padrão OR falhou.

Em termos simples, ‘P1 | P2 | ...’ vai tentar fazer corresponder ‘P1’,
se falhar vai tentar ‘P2’, declarando sucesso se houver sucesso em
qualquer uma das tentativas, e falhando caso contrário.


File: python.info,  Node: Padrões AS,  Next: Padrões literais,  Prev: Padrões OR,  Up: Padrões

4.8.6.6 Padrões AS
..................

Um padrão AS corresponde a um padrão OR à esquerda da palavra reservada
*note as: 2275. de um assunto.  Sintaxe:

     as_pattern ::= *note or_pattern: 228b. "as" *note capture_pattern: 228e.

Se o padrão OR falhar, o padrão AS falhará.  Caso contrário, o padrão AS
vincula o assunto ao nome à direita da palavra-chave as e obtém sucesso.
‘capture_pattern’ não pode ser um ‘_’.

Em termos simples, ‘P as NAME’ corresponderá a ‘P’ e, em caso de
sucesso, definirá ‘NAME = <assunto>’.


File: python.info,  Node: Padrões literais,  Next: Padrões de captura,  Prev: Padrões AS,  Up: Padrões

4.8.6.7 Padrões literais
........................

Um padrão literal corresponde à maioria dos *note literais: 202f. em
Python.  Sintaxe:

     literal_pattern ::= *note signed_number: 2299.
                         | *note signed_number: 2299. "+" NUMBER
                         | *note signed_number: 2299. "-" NUMBER
                         | strings
                         | "None"
                         | "True"
                         | "False"
     signed_number   ::= ["-"] NUMBER

A regra ‘strings’ e o token ‘NUMBER’ são definidos na *note gramática
Python padrão: 229a.  Strings entre aspas triplas são suportadas.
Strings brutas e strings de bytes são suportadas.  *note f-strings: 9b1.
não são suportadas.

As formas ‘signed_number '+' NUMBER’ e ‘signed_number '-' NUMBER’ são
para expressar *note números complexos: 2068.; elas requerem um número
real à esquerda e um número imaginário à direita.  Por exemplo, ‘3 +
4j’.

Em termos simples, ‘LITERAL’ terá sucesso somente se ‘<assunto> ==
LITERAL’.  Para os singletons ‘None’, ‘True’ e ‘False’, o operador *note
is: 2f5. é usado.


File: python.info,  Node: Padrões de captura,  Next: Padrões curingas,  Prev: Padrões literais,  Up: Padrões

4.8.6.8 Padrões de captura
..........................

Um padrão de captura vincula o valor do assunto a um nome.  Sintaxe:

     capture_pattern ::= !'_' NAME

Um único sublinhado ‘_’ não é um padrão de captura (é o que ‘!'_'’
expressa).  Em vez disso, ele é tratado como um *note wildcard_pattern:
228f.

Em um determinado padrão, um determinado nome só pode ser vinculado uma
vez.  Por exemplo, ‘case x, x: ...’ é inválido enquanto ‘case [x] | x:
...’ é permitido.

Os padrões de captura sempre são bem-sucedidos.  A vinculação segue
regras de escopo estabelecidas pelo operador de expressão de atribuição
na PEP 572(1); o nome se torna uma variável local no escopo de função de
contenção mais próximo, a menos que haja uma instrução *note global:
18a. ou *note nonlocal: 12ea. aplicável.

Em termos simples, ‘NAME’ sempre terá sucesso e definirá ‘NAME =
<assunto>’.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0572/


File: python.info,  Node: Padrões curingas,  Next: Padrões de valor,  Prev: Padrões de captura,  Up: Padrões

4.8.6.9 Padrões curingas
........................

Um padrão curinga sempre tem sucesso (corresponde a qualquer coisa) e
não vincula nenhum nome.  Sintaxe:

     wildcard_pattern ::= '_'

‘_’ é uma *note palavra reservada contextual: 80f. dentro de qualquer
padrão, mas somente dentro de padrões.  É um identificador, como de
costume, mesmo dentro de expressões de assunto ‘match’s, ‘guard’s e
blocos ‘case’.

Em termos simples, ‘_’ sempre terá sucesso.


File: python.info,  Node: Padrões de valor,  Next: Padrões de grupo,  Prev: Padrões curingas,  Up: Padrões

4.8.6.10 Padrões de valor
.........................

Um padrão de valor representa um valor nomeado em Python.  Sintaxe:

     value_pattern ::= *note attr: 229f.
     attr          ::= *note name_or_attr: 22a0. "." NAME
     name_or_attr  ::= *note attr: 229f. | NAME

O nome pontilhado no padrão é pesquisado usando as *note regras de
resolução de nomes: 216b. padrão do Python.  O padrão é bem-sucedido se
o valor encontrado for comparado igual ao valor do assunto (usando o
operador de igualdade ‘==’).

Em termos simples, ‘NAME1.NAME2’ terá sucesso somente se ‘<assunto> ==
NAME1.NAME2’

     Nota: Se o mesmo valor ocorrer várias vezes na mesma instrução
     match, o interpretador pode armazenar em cache o primeiro valor
     encontrado e reutilizá-lo em vez de repetir a mesma pesquisa.  Esse
     cache é estritamente vinculado a uma determinada execução de uma
     determinada instrução match.


File: python.info,  Node: Padrões de grupo,  Next: Padrões de sequência,  Prev: Padrões de valor,  Up: Padrões

4.8.6.11 Padrões de grupo
.........................

Um padrão de grupo permite que os usuários adicionem parênteses em torno
de padrões para enfatizar o agrupamento pretendido.  Caso contrário, não
há sintaxe adicional.  Sintaxe:

     group_pattern ::= "(" *note pattern: 2289. ")"

Em termos simples, ‘(P)’ tem o mesmo efeito que ‘P’.


File: python.info,  Node: Padrões de sequência,  Next: Padrões de mapeamento,  Prev: Padrões de grupo,  Up: Padrões

4.8.6.12 Padrões de sequência
.............................

Um padrão de sequência contém vários subpadrões a serem correspondidos
com elementos de sequência.  A sintaxe é similar ao desempacotamento de
uma lista ou tupla.

     sequence_pattern       ::= "[" [*note maybe_sequence_pattern: 22a5.] "]"
                                | "(" [*note open_sequence_pattern: 2288.] ")"
     open_sequence_pattern  ::= *note maybe_star_pattern: 22a6. "," [*note maybe_sequence_pattern: 22a5.]
     maybe_sequence_pattern ::= ",".*note maybe_star_pattern: 22a6.+ ","?
     maybe_star_pattern     ::= *note star_pattern: 22a7. | *note pattern: 2289.
     star_pattern           ::= "*" (*note capture_pattern: 228e. | *note wildcard_pattern: 228f.)

Não há diferença se parênteses ou colchetes são usados para padrões de
sequência (por exemplo, ‘(...)’ vs ‘[...]’).

     Nota: Um único padrão entre parênteses sem uma vírgula final (por
     exemplo, ‘(3 | 4)’) é um *note padrão de grupo: 22a1.  Enquanto um
     único padrão entre colchetes (por exemplo, ‘[3 | 4]’) ainda é um
     padrão de sequência.

No máximo um subpadrão de estrela pode estar em um padrão de sequência.
O subpadrão de estrela pode ocorrer em qualquer posição.  Se nenhum
subpadrão de estrela estiver presente, o padrão de sequência é um padrão
de sequência de comprimento fixo; caso contrário, é um padrão de
sequência de comprimento variável.

A seguir está o fluxo lógico para corresponder um padrão de sequência
com um valor de assunto:

  1. Se o valor do assunto não for uma sequência (1), o padrão de
     sequência falhará.

  2. Se o valor do assunto for uma instância de ‘str’, ‘bytes’ ou
     ‘bytearray’, o padrão de sequência falhará.

  3. As etapas subsequentes dependem se o padrão de sequência é fixo ou
     de comprimento variável.

     Se o padrão de sequência for de comprimento fixo:

       1. Se o comprimento da sequência do assunto não for igual ao
          número de subpadrões, o padrão da sequência falha

       2. Subpadrões no padrão de sequência são correspondidos aos seus
          itens correspondentes na sequência de assunto da esquerda para
          a direita.  A correspondência para assim que um subpadrão
          falha.  Se todos os subpadrões tiverem sucesso em corresponder
          ao seu item correspondente, o padrão de sequência é
          bem-sucedido.

     Caso contrário, se o padrão de sequência for de comprimento
     variável:

       1. Se o comprimento da sequência do assunto for menor que o
          número de subpadrões não-estrela, o padrão da sequência falha.

       2. Os principais subpadrões não estelares são correspondidos aos
          seus itens correspondentes, como nas sequências de comprimento
          fixo.

       3. Se a etapa anterior for bem-sucedida, o subpadrão estrela
          corresponde a uma lista formada pelos itens de assunto
          restantes, excluindo os itens restantes correspondentes aos
          subpadrões não-estrela que seguem o subpadrão estrela.

       4. Os subpadrões não-estrela restantes são correspondidos aos
          seus itens de assunto correspondentes, como em uma sequência
          de comprimento fixo.

          Nota: O comprimento da sequência de assunto é obtido via *note
          len(): 62e. (ou seja, via protocolo ‘__len__()’).  Esse
          comprimento pode ser armazenado em cache pelo interpretador de
          forma similar a *note padrões de valor: 229e.

Em termos simples, ‘[P1, P2, P3,’ … ‘, P<N>]’ corresponde somente se
tudo o seguinte acontecer:

   * verifica se ‘<subject>’ é uma sequência

   * ‘len(subject) == <N>’

   * ‘P1’ corresponde a ‘<subject>[0]’ (observe que esta correspondência
     também pode vincular nomes)

   * ‘P2’ corresponde a ‘<subject>[1]’ (observe que esta correspondência
     também pode vincular nomes)

   * … e assim por diante para o padrão/elemento correspondente.

   ---------- Footnotes ----------

   (1) Na correspondência de padrões, uma sequência é definida como uma
das seguintes:

   * uma classe que herda de *note collections.abc.Sequence: 1204.

   * uma classe Python que foi registrada como *note
     collections.abc.Sequence: 1204.

   * uma classe embutida que tem seu bit *note Py_TPFLAGS_SEQUENCE:
     19e4. (CPython) definido

   * uma classe que herda de qualquer uma das anteriores

As seguintes classes de biblioteca padrão são sequências:

   * *note array.array: 1a0.

   * *note collections.deque: 5dc.

   * *note list: 611.

   * *note memoryview: 2eb.

   * *note range: 94a.

   * *note tuple: 370.

     Nota: Valores de assunto do tipo ‘str’, ‘bytes’ e ‘bytearray’ não
     correspondem aos padrões de sequência.


File: python.info,  Node: Padrões de mapeamento,  Next: Padrões de classe,  Prev: Padrões de sequência,  Up: Padrões

4.8.6.13 Padrões de mapeamento
..............................

Um padrão de mapeamento contém um ou mais padrões de chave-valor.  A
sintaxe é similar à construção de um dicionário.  Sintaxe:

     mapping_pattern     ::= "{" [*note items_pattern: 22aa.] "}"
     items_pattern       ::= ",".*note key_value_pattern: 22ab.+ ","?
     key_value_pattern   ::= (*note literal_pattern: 228d. | *note value_pattern: 2290.) ":" *note pattern: 2289.
                             | *note double_star_pattern: 22ac.
     double_star_pattern ::= "**" *note capture_pattern: 228e.

No máximo um padrão de estrela dupla pode estar em um padrão de
mapeamento.  O padrão de estrela dupla deve ser o último subpadrão no
padrão de mapeamento.

Chaves duplicadas em padrões de mapeamento não são permitidas.  Chaves
literais duplicadas levantarão um *note SyntaxError: 18d.  Duas chaves
que de outra forma têm o mesmo valor levantarão *note ValueError: 202.
em tempo de execução.

A seguir está o fluxo lógico para comparar um padrão de mapeamento com
um valor de assunto:

  1. Se o valor do assunto não for um mapeamento (1), o padrão de
     mapeamento falhará.

  2. Se cada chave fornecida no padrão de mapeamento estiver presente no
     mapeamento de assunto, e o padrão para cada chave corresponder ao
     item correspondente do mapeamento de assunto, o padrão de
     mapeamento será bem-sucedido.

  3. Se chaves duplicadas forem detectadas no padrão de mapeamento, o
     padrão será considerado inválido.  Uma exceção *note SyntaxError:
     18d. é levantada para valores literais duplicados; ou *note
     ValueError: 202. para chaves nomeadas do mesmo valor.

     Nota: Os pares de chave-valor são correspondidos usando o formato
     de dois argumentos do método ‘get()’ do assunto do mapeamento.  Os
     pares de chave-valor correspondidos já devem estar presentes no
     mapeamento e não devem ser criados em tempo de uso via *note
     __missing__(): 11fd. ou *note __getitem__(): 283.

Em termos simples, ‘{KEY1: P1, KEY2: P2, ... }’ corresponde somente se
tudo o seguinte acontecer:

   * verifica se ‘<assunto>’ é um mapeamento

   * ‘KEY1 in <assunto>’

   * ‘P1’ corresponde a ‘<assunto>[KEY1]’

   * … e assim por diante para o par KEY/elemento correspondente.

   ---------- Footnotes ----------

   (1) Na correspondência de padrões, um mapeamento é definido como uma
das seguintes:

   * uma classe que herda de *note collections.abc.Mapping: 8d0.

   * uma classe Python que foi registrada como *note
     collections.abc.Mapping: 8d0.

   * uma classe embutida que tem seu bit *note Py_TPFLAGS_MAPPING: 19e3.
     (CPython) definido

   * uma classe que herda de qualquer uma das anteriores

As classes de biblioteca padrão *note dict: 256. e *note
types.MappingProxyType: 46d. são mapeamentos.


File: python.info,  Node: Padrões de classe,  Prev: Padrões de mapeamento,  Up: Padrões

4.8.6.14 Padrões de classe
..........................

Um padrão de classe representa uma classe e seus argumentos nomeados e
posicionais (se houver).  Sintaxe:

     class_pattern       ::= *note name_or_attr: 22a0. "(" [*note pattern_arguments: 22af. ","?] ")"
     pattern_arguments   ::= *note positional_patterns: 22b0. ["," *note keyword_patterns: 22b1.]
                             | *note keyword_patterns: 22b1.
     positional_patterns ::= ",".*note pattern: 2289.+
     keyword_patterns    ::= ",".*note keyword_pattern: 22b2.+
     keyword_pattern     ::= NAME "=" *note pattern: 2289.

O mesmo argumento nomeado não deve ser repetido em padrões de classe.

A seguir está o fluxo lógico para corresponder a um padrão de classe com
um valor de assunto:

  1. Se ‘name_or_attr’ não for uma instância do tipo embutido *note
     type: d6b. , levanta *note TypeError: 2c3.

  2. Se o valor do assunto não for uma instância de ‘name_or_attr’
     (testado via *note isinstance(): 442.), o padrão de classe falhará.

  3. Se nenhum argumento de padrão estiver presente, o padrão é
     bem-sucedido.  Caso contrário, as etapas subsequentes dependem se
     os padrões de argumento posicional ou nomeado estão presentes.

     Para vários tipos embutidos (especificados abaixo), um único
     subpadrão posicional é aceito, o qual corresponderá a todo o
     assunto; para esses tipos, os padrões de argumentos nomeados também
     funcionam como para outros tipos.

     Se apenas padrões de argumentos nomeados estiverem presentes, eles
     serão processados da seguinte forma, um por um:

       1. A palavra reservada é procurada como um atributo no assunto.

             * Se isso levantar uma exceção diferente de *note
               AttributeError: 34b, a exceção será exibida.

             * Se isso levantar *note AttributeError: 34b, o padrão de
               classe falhou.

             * Caso contrário, o subpadrão associado ao padrão de
               argumento nomeado é correspondido ao valor de atributo do
               sujeito.  Se isso falhar, o padrão de classe falha; se
               isso for bem-sucedido, a correspondência prossegue para o
               próximo argumento nomeado.

       2. Se todos os padrões de argumento nomeado forem bem-sucedidos,
          o padrão de classe será bem-sucedido.

     Se houver algum padrão posicional presente, ele será convertido em
     padrões de argumento nomeado usando o atributo *note
     __match_args__: 1a01. na classe ‘name_or_attr’ antes da
     correspondência:

       1. O equivalente de ‘getattr(cls, "__match_args__", ())’ é
          chamado.

             * Se isso levantar uma exceção, a exceção surgirá.

             * Se o valor retornado não for uma tupla, a conversão
               falhará e *note TypeError: 2c3. será levantada.

             * Se houver mais padrões posicionais do que
               ‘len(cls.__match_args__)’, *note TypeError: 2c3. será
               levantada.

             * Caso contrário, o padrão posicional ‘i’ é convertido em
               um padrão de argumento nomeado usando ‘__match_args__[i]’
               como argumento nomeado.  ‘__match_args__[i]’ deve ser uma
               string; caso contrário, *note TypeError: 2c3. é
               levantada.

             * Se houver argumentos nomeados duplicados, *note
               TypeError: 2c3. será levantada.

          Ver também
          ..........

          *note Customizando argumentos posicionais na classe
          correspondência de padrão: 214f.

       2. Uma vez que todos os padrões posicionais foram convertidos em
          padrões de argumentos nomeados, a correspondência continua
          como se houvesse apenas padrões de palavras reservadas.

     Para os seguintes tipos embutidos, o tratamento de subpadrões
     posicionais é diferente:

        * *note bool: 468.

        * *note bytearray: 2ea.

        * *note bytes: 1c2.

        * *note dict: 256.

        * *note float: 2f7.

        * *note frozenset: 5da.

        * *note int: 257.

        * *note list: 611.

        * *note set: 5d9.

        * *note str: 44c.

        * *note tuple: 370.

     Essas classes aceitam um único argumento posicional, e o padrão ali
     é correspondido ao objeto inteiro em vez de um atributo.  Por
     exemplo, ‘int(0|1)’ corresponde ao valor ‘0’, mas não ao valor
     ‘0.0’.

Em termos simples, ‘CLS(P1, attr=P2)’ corresponde somente se o seguinte
acontecer:

   * ‘isinstance(<assunto>, CLS)’

   * converte ‘P1’ em um padrão de argumento nomeado usando
     ‘CLS.__match_args__’

   * Para cada argumento de palavra-chave ‘attr=P2’:

        * ‘hasattr(<assunto>, "attr")’

        * ‘P2’ corresponde a ‘<assunto>.attr’

   * … e assim por diante para o par argumento nomeado/elemento
     correspondente.

Ver também
..........

   * PEP 634(1) – Structural Pattern Matching: Specification

   * PEP 636(2) – Correspondência de padrões estruturais: Tutorial

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0634/

   (2) https://peps.python.org/pep-0636/


File: python.info,  Node: Definições de função,  Next: Definições de classe,  Prev: A instrução match,  Up: Instruções compostas

4.8.7 Definições de função
--------------------------

Uma definição de função define um objeto de função definido pelo usuário
(veja a seção *note A hierarquia de tipos padrão: 2075.):

     funcdef                   ::= [*note decorators: 22b4.] "def" *note funcname: 22b5. [*note type_params: 2255.] "(" [*note parameter_list: 2219.] ")"
                                   ["->" *note expression: 21c8.] ":" *note suite: 2266.
     decorators                ::= *note decorator: 22b6.+
     decorator                 ::= "@" *note assignment_expression: 21b9. NEWLINE
     parameter_list            ::= *note defparameter: 22b7. ("," *note defparameter: 22b7.)* "," "/" ["," [*note parameter_list_no_posonly: 22b8.]]
                                   | *note parameter_list_no_posonly: 22b8.
     parameter_list_no_posonly ::= *note defparameter: 22b7. ("," *note defparameter: 22b7.)* ["," [*note parameter_list_starargs: 22b9.]]
                                   | *note parameter_list_starargs: 22b9.
     parameter_list_starargs   ::= "*" [*note star_parameter: 22ba.] ("," *note defparameter: 22b7.)* ["," [*note parameter_star_kwargs: 22bb.]]
                                   | "*" ("," *note defparameter: 22b7.)+ ["," [*note parameter_star_kwargs: 22bb.]]
                                   | *note parameter_star_kwargs: 22bb.
     parameter_star_kwargs     ::= "**" *note parameter: 22bc. [","]
     parameter                 ::= *note identifier: 2023. [":" *note expression: 21c8.]
     star_parameter            ::= *note identifier: 2023. [":" ["*"] *note expression: 21c8.]
     defparameter              ::= *note parameter: 22bc. ["=" *note expression: 21c8.]
     funcname                  ::= *note identifier: 2023.

Uma definição de função é uma instrução executável.  Sua execução
vincula o nome da função no espaço de nomes local atual a um objeto
função (um invólucro em torno do código executável para a função).  Este
objeto função contém uma referência ao espaço de nomes global atual como
o espaço de nomes global a ser usado quando a função é chamada.

A definição da função não executa o corpo da função; ela é executada
somente quando a função é chamada.  (1)

Uma definição de função pode ser encapsulada por uma ou mais expressões
*note decoradoras: 731.  Expressões decoradoras são avaliadas quando a
função é definida, no escopo que contém a definição da função.  O
resultado deve ser um chamável, que é invocado com o objeto de função
como o único argumento.  O valor retornado é vinculado ao nome da função
em vez do objeto de função.  Vários decoradores são aplicados de forma
aninhada.  Por exemplo, o código a seguir

     @f1(arg)
     @f2
     def func(): pass

é aproximadamente equivalente a

     def func(): pass
     func = f1(arg)(f2(func))

exceto que a função original não está temporariamente vinculada ao nome
‘func’.

Alterado na versão 3.9: Funções podem ser decoradas com qualquer *note
assignment_expression: 21b9. válida.  Anteriormente, a gramática era
muito mais restritiva; veja PEP 614(2) para detalhes.

Uma lista de *note parâmetros de tipo: 2b3. pode ser dada entre
colchetes entre o nome da função e o parêntese de abertura para sua
lista de parâmetros.  Isso indica aos verificadores de tipo estático que
a função é genérica.  Em tempo de execução, os parâmetros de tipo podem
ser recuperados do atributo *note __type_params__: 2090. da função.
Veja *note Funções genéricas: 453. para mais.

Alterado na versão 3.12: Listas de parâmetros de tipo são novas no
Python 3.12.

Quando um ou mais *note parâmetros: 208f. têm a forma 'parameter' ‘=’
'expression', diz-se que a função tem “valores de parâmetro padrão”.
Para um parâmetro com um valor padrão, o *note argumento: 449.
correspondente pode ser omitido de uma chamada, em cujo caso o valor
padrão do parâmetro é substituído.  Se um parâmetro tiver um valor
padrão, todos os parâmetros seguintes até “‘*’” também devem ter um
valor padrão — esta é uma restrição sintática que não é expressa pela
gramática.

'Os valores de parâmetro padrão são avaliados da esquerda para a direita
quando a definição da função é executada.'  Isso significa que a
expressão é avaliada uma vez, quando a função é definida, e que o mesmo
valor “pré-calculado” é usado para cada chamada.  Isso é especialmente
importante para entender quando um valor de parâmetro padrão é um objeto
mutável, como uma lista ou um dicionário: se a função modifica o objeto
(por exemplo, anexando um item a uma lista), o valor de parâmetro padrão
é efetivamente modificado.  Isso geralmente não é o que se pretendia.
Uma maneira de contornar isso é usar ‘None’ como o padrão e testá-lo
explicitamente no corpo da função, por exemplo:

     def whats_on_the_telly(penguin=None):
         if penguin is None:
             penguin = []
         penguin.append("property of the zoo")
         return penguin

A semântica de chamada de função é descrita em mais detalhes na seção
*note Chamadas: da5.  Uma chamada de função sempre atribui valores a
todos os parâmetros mencionados na lista de parâmetros, seja de
argumentos posicionais, de argumentos nomeados ou de valores padrão.  Se
o formato “‘*identifier’” estiver presente, ele será inicializado para
uma tupla que recebe quaisquer parâmetros posicionais excedentes,
padronizando para a tupla vazia.  Se o formato “‘**identifier’” estiver
presente, ele será inicializado para um novo mapeamento ordenado que
recebe quaisquer argumentos nomeados excedentes, padronizando para um
novo mapeamento vazio do mesmo tipo.  Parâmetros após “‘*’” ou
“‘*identifier’” são parâmetros somente-nomeados e podem ser passados
somente por argumentos nomeados.  Parâmetros antes de “‘/’” são
parâmetros somente-posicionais e podem ser passados somente por
argumentos posicionais.

Alterado na versão 3.8: A sintaxe do parâmetro de função ‘/’ pode ser
usada para indicar parâmetros somente-posicionais.  Veja a PEP 570(3)
para detalhes.

Os parâmetros podem ter uma *note anotação: 1db7. do formato “‘:
expressão’” após o nome do parâmetro.  Qualquer parâmetro pode ter uma
anotação, mesmo aqueles do formato ‘*identificador’ ou
‘**identificador’.  (Como um caso especial, parâmetros do formato
‘*identificador’ podem ter uma anotação “‘: *expressão’”.)  As funções
podem ter uma anotação “return” do formato “‘-> expressão’” após a lista
de parâmetros.  Essas anotações podem ser qualquer expressão Python
válida.  A presença de anotações não altera a semântica de uma função.
Os valores de anotação estão disponíveis como valores de um dicionário
indexados pelos nomes dos parâmetros no atributo ‘__annotations__’ do
objeto função.  Se a importação de ‘annotations’ de *note __future__: 0.
for usada, as anotações serão preservadas como strings em tempo de
execução, o que permite avaliação adiada.  Caso contrário, elas são
avaliadas quando a definição da função é executada.  Nesse caso, as
anotações podem ser avaliadas em uma ordem diferente daquela em que
aparecem no código-fonte.

Alterado na versão 3.11: Parâmetros do formato “‘*identificador’” podem
ter uma anotação “‘: *expressão’”.  Veja PEP 646(4).

Também é possível criar funções anônimas (funções não vinculadas a um
nome), para uso imediato em expressões.  Isso usa expressões lambda,
descritas na seção *note Lambdas: 12df.  Observe que a expressão lambda
é meramente uma abreviação para uma definição de função simplificada;
uma função definida em uma instrução “*note def: 14a2.” pode ser passada
adiante ou atribuída a outro nome, assim como uma função definida por
uma expressão lambda.  O formato “‘def’” é, na verdade, mais poderoso,
pois permite a execução de várias instruções e anotações.

'Nota do programador:' Funções são objetos de primeira classe.  Uma
instrução “‘def’” executada dentro de uma definição de função define uma
função local que pode ser retornada ou passada adiante.  Variáveis
livres usadas na função aninhada podem acessar as variáveis locais da
função que contém o “def”.  Veja a seção *note Nomeação e ligação: 208a.
para detalhes.

Ver também
..........

PEP 3107(5) - Anotações de função

     A especificação original para anotações de funções.

PEP 484(6) - Dicas de tipo

     Definição de um significado padrão para anotações: dicas de tipo.

PEP 526(7) - Sintaxe para Anotações de Variáveis

     Capacidade de fornecer dica de tipo para declarações de variáveis,
     incluindo variáveis de classe e variáveis de instância.

PEP 563(8) - Avaliação postergada de anotações

     Suporte para referências futuras dentro de anotações, preservando
     anotações em um formato de string em tempo de execução em vez de
     avaliação antecipada.

PEP 318(9) - Decoradores para funções e métodos

     Decoradores de função e método foram introduzidos.  Decoradores de
     classe foram introduzidos na PEP 3129(10).

   ---------- Footnotes ----------

   (1) Um literal de string que aparece como a primeira instrução no
corpo da função é transformado no atributo *note __doc__: 1219. da
função e, portanto, no *note docstring: 22bd. da função.

   (2) https://peps.python.org/pep-0614/

   (3) https://peps.python.org/pep-0570/

   (4) https://peps.python.org/pep-0646/

   (5) https://peps.python.org/pep-3107/

   (6) https://peps.python.org/pep-0484/

   (7) https://peps.python.org/pep-0526/

   (8) https://peps.python.org/pep-0563/

   (9) https://peps.python.org/pep-0318/

   (10) https://peps.python.org/pep-3129/


File: python.info,  Node: Definições de classe,  Next: Corrotinas<2>,  Prev: Definições de função,  Up: Instruções compostas

4.8.8 Definições de classe
--------------------------

Uma definição de classe define um objeto classe (veja a seção *note A
hierarquia de tipos padrão: 2075.):

     classdef    ::= [*note decorators: 22b4.] "class" *note classname: 22bf. [*note type_params: 2255.] [*note inheritance: 22c0.] ":" *note suite: 2266.
     inheritance ::= "(" [*note argument_list: 21eb.] ")"
     classname   ::= *note identifier: 2023.

Uma definição de classe é uma instrução executável.  A lista de herança
geralmente fornece uma lista de classes base (veja *note Metaclasses:
2100. para usos mais avançados), então cada item na lista deve ser
executada como um objeto classe que permite extensão via subclasse.
Classes sem uma lista de herança herdam, por padrão, da classe base
*note object: a96.; portanto,

     class Foo:
         pass

equivale a

     class Foo(object):
         pass

O conjunto da classe é então executado em um novo quadro de execução
(veja *note Nomeação e ligação: 208a.), usando um espaço de nomes local
recém-criado e o espaço de nomes global original.  (Normalmente, o
conjunto contém principalmente definições de função.)  Quando o conjunto
da classe termina a execução, seu quadro de execução é descartado, mas
seu espaço de nomes local é salvo.  (1)  Um objeto classe é então criado
usando a lista de herança para as classes base e o espaço de nomes local
salvo para o dicionário de atributos.  O nome da classe é vinculado a
este objeto classe no espaço de nomes local original.

A ordem em que os atributos são definidos no corpo da classe é
preservada no *note __dict__: c78. da nova classe.  Observe que isso é
confiável somente logo após a classe ser criada e somente para classes
que foram definidas usando a sintaxe de definição.

A criação de classes pode ser bastante personalizada usando *note
metaclasses: 2100.

As classes também podem ser decoradas: assim como na decoração de
funções,

     @f1(arg)
     @f2
     class Foo: pass

é aproximadamente equivalente a

     class Foo: pass
     Foo = f1(arg)(f2(Foo))

As regras de execução para as expressões de decorador são as mesmas que
para decoradores de função.  O resultado é então vinculado ao nome da
classe.

Alterado na versão 3.9: Classes podem ser decoradas com qualquer *note
assignment_expression: 21b9. válida.  Anteriormente, a gramática era
muito mais restritiva; veja PEP 614(2) para detalhes.

Uma lista de *note parâmetros de tipo: 2b3. pode ser dada entre
colchetes imediatamente após o nome da classe.  Isso indica aos
verificadores de tipo estático que a classe é genérica.  Em tempo de
execução, os parâmetros de tipo podem ser recuperados do atributo *note
__type_params__: 20ba. da classe.  Veja *note Classes genéricas: 452.
para mais.

Alterado na versão 3.12: Listas de parâmetros de tipo são novas no
Python 3.12.

'Nota do programador:' Variáveis definidas na definição de classe são
atributos de classe; elas são compartilhadas por instâncias.  Atributos
de instância podem ser definidos em um método com ‘self.nome = valor’.
Atributos de classe e instância são acessíveis por meio da notação
“‘self.nome’”, e um atributo de instância oculta um atributo de classe
com o mesmo nome quando acessado dessa forma.  Atributos de classe podem
ser usados como padrões para atributos de instância, mas usar valores
mutáveis pode levar a resultados inesperados.  *note Descritores: c6a.
podem ser usados para criar variáveis de instância com diferentes
detalhes de implementação.

Ver também
..........

PEP 3115(3) - Metaclasses no Python 3000

     A proposta que alterou a declaração de metaclasses para a sintaxe
     atual e a semântica de como as classes com metaclasses são
     construídas.

PEP 3129(4) - Class Decorators

     A proposta que adicionou decoradores de classe.  Decoradores de
     função e método foram introduzidos na PEP 318(5).

   ---------- Footnotes ----------

   (1) Um literal de string que aparece como a primeira instrução no
corpo da classe é transformado no item *note __doc__: 1e35. do espaço de
nomes e, portanto, no *note docstring: 22bd. da classe.

   (2) https://peps.python.org/pep-0614/

   (3) https://peps.python.org/pep-3115/

   (4) https://peps.python.org/pep-3129/

   (5) https://peps.python.org/pep-0318/


File: python.info,  Node: Corrotinas<2>,  Next: Listas de parâmetros de tipo,  Prev: Definições de classe,  Up: Instruções compostas

4.8.9 Corrotinas
----------------

Adicionado na versão 3.5.

* Menu:

* Definição de função de corrotina::
* A instrução async for::
* A instrução async with::


File: python.info,  Node: Definição de função de corrotina,  Next: A instrução async for,  Up: Corrotinas<2>

4.8.9.1 Definição de função de corrotina
........................................

     async_funcdef ::= [*note decorators: 22b4.] "async" "def" *note funcname: 22b5. "(" [*note parameter_list: 2219.] ")"
                       ["->" *note expression: 21c8.] ":" *note suite: 2266.

A execução de corrotinas do Python pode ser suspensa e retomada em
muitos pontos (consulte *note coroutine: 491.).  As expressões *note
await: 1b9, *note async for: aba. e *note async with: 5d5. só podem ser
usadas no corpo de uma função de corrotina.

Funções definidas com a sintaxe ‘async def’ são sempre funções de
corrotina, mesmo que não contenham palavras reservadas ‘await’ ou
‘async’.

Ocorre uma *note SyntaxError: 18d. se usada uma expressão ‘yield from’
dentro do corpo de uma função de corrotina.

Um exemplo de uma função de corrotina:

     async def func(param1, param2):
         faz_algo()
         await alguma_corrotina()

Alterado na versão 3.7: ‘await’ e ‘async’ agora são palavras reservadas;
anteriormente, elas só eram tratadas como tal dentro do corpo de uma
função de corrotina.


File: python.info,  Node: A instrução async for,  Next: A instrução async with,  Prev: Definição de função de corrotina,  Up: Corrotinas<2>

4.8.9.2 A instrução ‘async for’
...............................

     async_for_stmt ::= "async" *note for_stmt: 225d.

Um *note iterável assíncrono: d9c. fornece um método ‘__aiter__’ que
retorna diretamente um *note iterador assíncrono: 1ab, que pode chamar
código assíncrono em seu método ‘__anext__’.

A instrução ‘async for’ permite iteração conveniente sobre iteráveis
assíncronos.

O seguinte código:

     async for TARGET in ITER:
         SUITE
     else:
         SUITE2

É semanticamente equivalente a:

     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

Veja também *note __aiter__(): c16. e *note __anext__(): 1659. para
detalhes.

Ocorre uma *note SyntaxError: 18d. se usada uma instrução ‘async for’
fora do corpo de uma função de corrotina.


File: python.info,  Node: A instrução async with,  Prev: A instrução async for,  Up: Corrotinas<2>

4.8.9.3 A instrução ‘async with’
................................

     async_with_stmt ::= "async" *note with_stmt: 225f.

Um *note gerenciador de contexto assíncrono: 5d7. é um *note gerenciador
de contexto: 5d4. que é capaz de suspender a execução em seus métodos
'enter' e 'exit'.

O seguinte código:

     async with EXPRESSÃO as ALVO:
         COMANDOS

é semanticamente equivalente a:

     manager = (EXPRESSÃO)
     aenter = type(manager).__aenter__
     aexit = type(manager).__aexit__
     value = await aenter(manager)
     hit_except = False

     try:
         ALVO = value
         COMANDOS
     except:
         hit_except = True
         if not await aexit(manager, *sys.exc_info()):
             raise
     finally:
         if not hit_except:
             await aexit(manager, None, None, None)

Veja também *note __aenter__(): 215e. e *note __aexit__(): 1716. para
detalhes.

Ocorre uma *note SyntaxError: 18d. se usada uma instrução ‘async with’
fora do corpo de uma função de corrotina.

Ver também
..........

PEP 492(1) - Corrotina com sintaxe de async e wait

     A proposta que tornou as corrotinas um conceito autônomo em Python
     e adicionou sintaxe de suporte.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0492/


File: python.info,  Node: Listas de parâmetros de tipo,  Prev: Corrotinas<2>,  Up: Instruções compostas

4.8.10 Listas de parâmetros de tipo
-----------------------------------

Adicionado na versão 3.12.

Alterado na versão 3.13: Foi adicionado suporte para valores padrão
(veja PEP 696(1)).

     type_params  ::= "[" *note type_param: 22c6. ("," *note type_param: 22c6.)* "]"
     type_param   ::= *note typevar: 22c7. | *note typevartuple: 22c8. | *note paramspec: 22c9.
     typevar      ::= *note identifier: 2023. (":" *note expression: 21c8.)? ("=" *note expression: 21c8.)?
     typevartuple ::= "*" *note identifier: 2023. ("=" *note expression: 21c8.)?
     paramspec    ::= "**" *note identifier: 2023. ("=" *note expression: 21c8.)?

*note Funções: 14a2. (incluindo *note corrotinas: 5d1.), *note classes:
131a. e *note apelidos de tipo: 438. podem conter uma lista de
parâmetros de tipo:

     def max[T](args: list[T]) -> T:
         ...

     async def amax[T](args: list[T]) -> T:
         ...

     class Bag[T]:
         def __iter__(self) -> Iterator[T]:
             ...

         def add(self, arg: T) -> None:
             ...

     type ListOrSet[T] = list[T] | set[T]

Semanticamente, isso indica que a função, classe ou apelido de tipo é
genérico sobre uma variável de tipo.  Essas informações são usadas
principalmente por verificadores de tipo estático e, em tempo de
execução, objetos genéricos se comportam muito como suas contrapartes
não genéricas.

Parâmetros de tipo são declarados entre colchetes (‘[]’) imediatamente
após o nome da função, classe ou apelido de tipo.  Os parâmetros de tipo
são acessíveis dentro do escopo do objeto genérico, mas não em outro
lugar.  Assim, após uma declaração ‘def func[T](): pass’, o nome ‘T’ não
está disponível no escopo do módulo.  Abaixo, a semântica de objetos
genéricos é descrita com mais precisão.  O escopo de parâmetros de tipo
é modelado com uma função especial (tecnicamente, um *note escopo de
anotação: 188.) que encapsula a criação do objeto genérico.

Funções genéricas, classes e apelidos de tipo têm um atributo *note
__type_params__: 22ca. listando seus parâmetros de tipo.

Existem três espécies de parâmetros de tipo:

   * *note typing.TypeVar: 15d, introduzido por um nome simples (por
     exemplo, ‘T’).  Semanticamente, isso representa um único tipo para
     um verificador de tipos.

   * *note typing.TypeVarTuple: 15f, introduzido por um nome prefixado
     com um único asterisco (por exemplo, ‘*Ts’).  Semanticamente, isso
     representa uma tupla de qualquer número de tipos.

   * *note typing.ParamSpec: 15e, introduzido por um nome prefixado com
     dois asteriscos (por exemplo, ‘**P’).  Semanticamente, isso
     representa os parâmetros de um chamável.

As declarações de *note typing.TypeVar: 15d. podem definir delimitações
('bounds') e restrições ('constraints') com dois pontos (‘:’) seguidos
por uma expressão.  Uma única expressão após os dois pontos indica uma
delimitação (por exemplo, ‘T: int’).  Semanticamente, isso significa que
o ‘typing.TypeVar’ pode representar apenas tipos que são um subtipo
desse limite.  Uma tupla de expressões entre parênteses após os dois
pontos indica um conjunto de restrições (por exemplo, ‘T: (str,
bytes)’).  Cada membro da tupla deve ser um tipo (novamente, isso não é
imposto em tempo de execução).  Variáveis de tipo restrito podem assumir
apenas um dos tipos na lista de restrições.

Para ‘typing.TypeVar’s declarados usando a sintaxe de lista de
parâmetros de tipo, a delimitação e as restrições não são avaliados
quando o objeto genérico é criado, mas somente quando o valor é acessado
explicitamente por meio dos atributos ‘__bound__’ e ‘__constraints__’.
Para fazer isso, as delimitações ou restrições são avaliados em um *note
escopo de anotação: 188. separado.

*note typing.TypeVarTuple: 15f.s e *note typing.ParamSpec: 15e.s não
pode ter delimitações e restrições.

Todas as três espécies de parâmetros de tipo também podem ter um 'valor
padrão', que é usado quando o parâmetro de tipo não é fornecido
explicitamente.  Isso é adicionado anexando um único sinal de igual
(‘=’) seguido por uma expressão.  Como os limites e restrições de tipos
variáveis, o valor padrão não é avaliado quando o objeto é criado, mas
apenas quando o atributo ‘__default__’ do parâmetro de tipo é acessado.
Para esse fim, o valor padrão é avaliado em um *note escopo de anotação:
188. separado.  Se nenhum valor padrão for especificado para um
parâmetro de tipo, o atributo ‘__default__’ é definido como o objeto
sinalizador especial *note typing.NoDefault: 262.

O exemplo a seguir indica o conjunto completo de declarações de
parâmetros de tipo permitidas:

     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,
     ): ...

* Menu:

* Funções genéricas::
* Classes genéricas::
* Apelidos de tipo genérico::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0696/


File: python.info,  Node: Funções genéricas,  Next: Classes genéricas,  Up: Listas de parâmetros de tipo

4.8.10.1 Funções genéricas
..........................

Funções genéricas são declaradas assim:

     def func[T](arg: T): ...

Essa sintaxe é equivalente a:

     annotation-def TYPE_PARAMS_OF_func():
         T = typing.TypeVar("T")
         def func(arg: T): ...
         func.__type_params__ = (T,)
         return func
     func = TYPE_PARAMS_OF_func()

Aqui, ‘annotation-def’ indica um *note escopo de anotação: 188, que não
é vinculado de verdade a nenhum nome em tempo de execução.  (Uma outra
liberdade foi tomada na tradução: essa sintaxe não faz ocorrer um acesso
de atributo no módulo *note typing: 104.; ao invés disso é criada uma
instância de *note typing.TypeVar: 15d. diretamente.)

As anotações das funções genéricas são lidas dentro do escopo de
anotação usado para declarar os parâmetros de tipo, mas os valores
padrão dos argumentos e decoradores da função não são.

Este exemplo ilustra as regras de escopo para estes casos, bem como para
outras espécies de parâmetros de tipo:

     @decorator
     def func[T: int, *Ts, **P](*args: *Ts, arg: Callable[P, T] = some_default):
         ...

Tirando a *note avaliação preguiçosa: 457. da delimitação da *note
TypeVar: 15d, isso é equivalente a:

     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 = typing.TypeVar("T", bound=BOUND_OF_T())

         Ts = typing.TypeVarTuple("Ts")
         P = typing.ParamSpec("P")

         def func(*args: *Ts, arg: Callable[P, T] = DEFAULT_OF_arg):
             ...

         func.__type_params__ = (T, Ts, P)
         return func
     func = decorator(TYPE_PARAMS_OF_func())

Os nomes com maiúsculas como ‘DEFAULT_OF_arg’ não são realmente
vinculados em tempo de execução.


File: python.info,  Node: Classes genéricas,  Next: Apelidos de tipo genérico,  Prev: Funções genéricas,  Up: Listas de parâmetros de tipo

4.8.10.2 Classes genéricas
..........................

Classes genéricas são declaradas assim:

     class Bag[T]: ...

Essa sintaxe é equivalente a:

     annotation-def TYPE_PARAMS_OF_Bag():
         T = typing.TypeVar("T")
         class Bag(typing.Generic[T]):
             __type_params__ = (T,)
             ...
         return Bag
     Bag = TYPE_PARAMS_OF_Bag()

Aqui novamente ‘annotation-def’ (não é uma palavra reservada real)
indica um *note escopo de anotação: 188, e o nome ‘TYPE_PARAMS_OF_Bag’
não é realmente vinculado em tempo de execução.

Classes genéricas herdam implicitamente de *note typing.Generic: 15d7.
As classes base e os argumentos nomeados de classes genéricas são
avaliados dentro do escopo de tipo para os parâmetros de tipo, e os
decoradores são avaliados fora desse escopo.  Isso é ilustrado por este
exemplo:

     @decorator
     class Bag(Base[T], arg=T): ...

Isso equivale a:

     annotation-def TYPE_PARAMS_OF_Bag():
         T = typing.TypeVar("T")
         class Bag(Base[T], typing.Generic[T], arg=T):
             __type_params__ = (T,)
             ...
         return Bag
     Bag = decorator(TYPE_PARAMS_OF_Bag())


File: python.info,  Node: Apelidos de tipo genérico,  Prev: Classes genéricas,  Up: Listas de parâmetros de tipo

4.8.10.3 Apelidos de tipo genérico
..................................

A instrução *note type: 438. também pode ser usada para criar um apelido
de tipo genérico:

     type ListOrSet[T] = list[T] | set[T]

Exceto pela *note avaliação preguiçosa: 457. do valor, isso é
equivalente a:

     annotation-def TYPE_PARAMS_OF_ListOrSet():
         T = typing.TypeVar("T")

         annotation-def VALUE_OF_ListOrSet():
             return list[T] | set[T]
         # Na realidade, o valor é avaliado preguiçosamente
         return typing.TypeAliasType("ListOrSet", VALUE_OF_ListOrSet(), type_params=(T,))
     ListOrSet = TYPE_PARAMS_OF_ListOrSet()

Aqui, ‘annotation-def’ (não é uma palavra reservada real) indica um
*note escopo de anotação: 188.  Os nomes em maiúsculas como
‘TYPE_PARAMS_OF_ListOrSet’ não são realmente vinculados em tempo de
execução.


File: python.info,  Node: Componentes de Alto Nível,  Next: Especificação completa da gramática,  Prev: Instruções compostas,  Up: A Referência da Linguagem Python

4.9 Componentes de Alto Nível
=============================

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.

* Menu:

* Programas Python completos::
* Entrada de arquivo::
* Entrada interativa::
* Entrada de expressão::


File: python.info,  Node: Programas Python completos,  Next: Entrada de arquivo,  Up: Componentes de Alto Nível

4.9.1 Programas Python completos
--------------------------------

Ainda que uma especificação de linguagem não precise prescrever como o
interpretador da linguagem é invocado, é útil ter uma noção de um
programa Python completo.  Um programa Python completo é executado em um
ambiente minimamente inicializado: todos os módulos embutidos e padrões
estão disponíveis, mas nenhum foi inicializado, exceto por *note sys:
d9. (serviços de sistema diversos), *note builtins: 12. (funções
embutidas, exceções e ‘None’) e *note __main__: 1.  O último é usado
para fornecer o espaço de nomes global e local para execução de um
programa completo.

A sintaxe para um programa Python completo é esta para uma entrada de
arquivo, descrita na próxima seção.

O interpretador também pode ser invocado no modo interativo; neste caso,
ele não lê e executa um programa completo, mas lê e executa uma
instrução (possivelmente composta) por vez.  O ambiente inicial é
idêntico àquele de um programa completo; cada instrução é executada no
espaço de nomes de *note __main__: 1.

Um programa completo pode ser passado ao interpretador de três formas:
com a opção de linha de comando *note -c: 5e0. 'string', como um arquivo
passado como o primeiro argumento da linha de comando, ou como uma
entrada padrão.  Se o arquivo ou a entrada padrão é um dispositivo tty,
o interpretador entra em modo interativo; caso contrário, ele executa o
arquivo como um programa completo.


File: python.info,  Node: Entrada de arquivo,  Next: Entrada interativa,  Prev: Programas Python completos,  Up: Componentes de Alto Nível

4.9.2 Entrada de arquivo
------------------------

Toda entrada lida de arquivos não-interativos têm a mesma forma:

     file_input ::= (NEWLINE | *note statement: 2268.)*

Essa sintaxe é usada nas seguintes situações:

   * quando analisando um programa Python completo (a partir de um
     arquivo ou de uma string);

   * quando analisando um módulo;

   * quando analisando uma string passada à função *note exec(): 17f.;


File: python.info,  Node: Entrada interativa,  Next: Entrada de expressão,  Prev: Entrada de arquivo,  Up: Componentes de Alto Nível

4.9.3 Entrada interativa
------------------------

A entrada em modo interativo é analisada usando a seguinte gramática:

     interactive_input ::= [*note stmt_list: 2267.] NEWLINE | *note compound_stmt: 225a. NEWLINE

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.


File: python.info,  Node: Entrada de expressão,  Prev: Entrada interativa,  Up: Componentes de Alto Nível

4.9.4 Entrada de expressão
--------------------------

A função *note eval(): 180. é usada para uma entrada de expressão.  Ela
ignora espaços à esquerda.  O argumento em string para *note eval():
180. deve ter a seguinte forma:

     eval_input ::= *note expression_list: 221d. NEWLINE*


File: python.info,  Node: Especificação completa da gramática,  Prev: Componentes de Alto Nível,  Up: A Referência da Linguagem Python

4.10 Especificação completa da gramática
========================================

Esta é a gramática completa do Python, derivada diretamente da gramática
usada para gerar o analisador sintático de CPython (consulte
Grammar/python.gram(1)).  A versão aqui omite detalhes relacionados à
geração de código e recuperação de erros.

A notação é uma mistura de EBNF(2) e GASE(3) (em inglês, PEG(4)). 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(5) para mais
detalhes sobre a sintaxe da gramática.

     # PEG grammar for Python

     @trailer '''
     void *
     _PyPegen_parse(Parser *p)
     {
         // Initialize keywords
         p->keywords = reserved_keywords;
         p->n_keyword_lists = n_keyword_lists;
         p->soft_keywords = soft_keywords;

         // Run parser
         void *result = NULL;
         if (p->start_rule == Py_file_input) {
             result = file_rule(p);
         } else if (p->start_rule == Py_single_input) {
             result = interactive_rule(p);
         } else if (p->start_rule == Py_eval_input) {
             result = eval_rule(p);
         } else if (p->start_rule == Py_func_type_input) {
             result = func_type_rule(p);
         }

         return result;
     }
     '''

     # ========================= START OF THE GRAMMAR =========================

     # General grammatical elements and rules:
     #
     # * Strings with double quotes (") denote SOFT KEYWORDS
     # * Strings with single quotes (') denote KEYWORDS
     # * Upper case names (NAME) denote tokens in the Grammar/Tokens file
     # * Rule names starting with "invalid_" are used for specialized syntax errors
     #     - These rules are NOT used in the first pass of the parser.
     #     - Only if the first pass fails to parse, a second pass including the invalid
     #       rules will be executed.
     #     - If the parser fails in the second phase with a generic syntax error, the
     #       location of the generic failure of the first pass will be used (this avoids
     #       reporting incorrect locations due to the invalid rules).
     #     - The order of the alternatives involving invalid rules matter
     #       (like any rule in PEG).
     #
     # Grammar Syntax (see PEP 617 for more information):
     #
     # rule_name: expression
     #   Optionally, a type can be included right after the rule name, which
     #   specifies the return type of the C or Python function corresponding to the
     #   rule:
     # rule_name[return_type]: expression
     #   If the return type is omitted, then a void * is returned in C and an Any in
     #   Python.
     # e1 e2
     #   Match e1, then match e2.
     # e1 | e2
     #   Match e1 or e2.
     #   The first alternative can also appear on the line after the rule name for
     #   formatting purposes. In that case, a | must be used before the first
     #   alternative, like so:
     #       rule_name[return_type]:
     #            | first_alt
     #            | second_alt
     # ( e )
     #   Match e (allows also to use other operators in the group like '(e)*')
     # [ e ] or e?
     #   Optionally match e.
     # e*
     #   Match zero or more occurrences of e.
     # e+
     #   Match one or more occurrences of e.
     # s.e+
     #   Match one or more occurrences of e, separated by s. The generated parse tree
     #   does not include the separator. This is otherwise identical to (e (s e)*).
     # &e
     #   Succeed if e can be parsed, without consuming any input.
     # !e
     #   Fail if e can be parsed, without consuming any input.
     # ~
     #   Commit to the current alternative, even if it fails to parse.
     # &&e
     #   Eager parse e. The parser will not backtrack and will immediately
     #   fail with SyntaxError if e cannot be parsed.
     #

     # STARTING RULES
     # ==============

     file[mod_ty]: a=[statements] ENDMARKER { _PyPegen_make_module(p, a) }
     interactive[mod_ty]: a=statement_newline { _PyAST_Interactive(a, p->arena) }
     eval[mod_ty]: a=expressions NEWLINE* ENDMARKER { _PyAST_Expression(a, p->arena) }
     func_type[mod_ty]: '(' a=[type_expressions] ')' '->' b=expression NEWLINE* ENDMARKER { _PyAST_FunctionType(a, b, p->arena) }

     # GENERAL STATEMENTS
     # ==================

     statements[asdl_stmt_seq*]: a=statement+ { (asdl_stmt_seq*)_PyPegen_seq_flatten(p, a) }

     statement[asdl_stmt_seq*]: a=compound_stmt { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a) } | a[asdl_stmt_seq*]=simple_stmts { a }

     statement_newline[asdl_stmt_seq*]:
         | a=compound_stmt NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a) }
         | simple_stmts
         | NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, CHECK(stmt_ty, _PyAST_Pass(EXTRA))) }
         | ENDMARKER { _PyPegen_interactive_exit(p) }

     simple_stmts[asdl_stmt_seq*]:
         | a=simple_stmt !';' NEWLINE { (asdl_stmt_seq*)_PyPegen_singleton_seq(p, a) } # Not needed, there for speedup
         | a[asdl_stmt_seq*]=';'.simple_stmt+ [';'] NEWLINE { a }

     # NOTE: assignment MUST precede expression, else parsing a simple assignment
     # will throw a SyntaxError.
     simple_stmt[stmt_ty] (memo):
         | assignment
         | &"type" type_alias
         | e=star_expressions { _PyAST_Expr(e, EXTRA) }
         | &'return' return_stmt
         | &('import' | 'from') import_stmt
         | &'raise' raise_stmt
         | 'pass' { _PyAST_Pass(EXTRA) }
         | &'del' del_stmt
         | &'yield' yield_stmt
         | &'assert' assert_stmt
         | 'break' { _PyAST_Break(EXTRA) }
         | 'continue' { _PyAST_Continue(EXTRA) }
         | &'global' global_stmt
         | &'nonlocal' nonlocal_stmt

     compound_stmt[stmt_ty]:
         | &('def' | '@' | 'async') function_def
         | &'if' if_stmt
         | &('class' | '@') class_def
         | &('with' | 'async') with_stmt
         | &('for' | 'async') for_stmt
         | &'try' try_stmt
         | &'while' while_stmt
         | match_stmt

     # SIMPLE STATEMENTS
     # =================

     # NOTE: annotated_rhs may start with 'yield'; yield_expr must start with 'yield'
     assignment[stmt_ty]:
         | a=NAME ':' b=expression c=['=' d=annotated_rhs { d }] {
             CHECK_VERSION(
                 stmt_ty,
                 6,
                 "Variable annotation syntax is",
                 _PyAST_AnnAssign(CHECK(expr_ty, _PyPegen_set_expr_context(p, a, Store)), b, c, 1, EXTRA)
             ) }
         | a=('(' b=single_target ')' { b }
              | single_subscript_attribute_target) ':' b=expression c=['=' d=annotated_rhs { d }] {
             CHECK_VERSION(stmt_ty, 6, "Variable annotations syntax is", _PyAST_AnnAssign(a, b, c, 0, EXTRA)) }
         | a[asdl_expr_seq*]=(z=star_targets '=' { z })+ b=(yield_expr | star_expressions) !'=' tc=[TYPE_COMMENT] {
              _PyAST_Assign(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA) }
         | a=single_target b=augassign ~ c=(yield_expr | star_expressions) {
              _PyAST_AugAssign(a, b->kind, c, EXTRA) }
         | invalid_assignment

     annotated_rhs[expr_ty]: yield_expr | star_expressions

     augassign[AugOperator*]:
         | '+=' { _PyPegen_augoperator(p, Add) }
         | '-=' { _PyPegen_augoperator(p, Sub) }
         | '*=' { _PyPegen_augoperator(p, Mult) }
         | '@=' { CHECK_VERSION(AugOperator*, 5, "The '@' operator is", _PyPegen_augoperator(p, MatMult)) }
         | '/=' { _PyPegen_augoperator(p, Div) }
         | '%=' { _PyPegen_augoperator(p, Mod) }
         | '&=' { _PyPegen_augoperator(p, BitAnd) }
         | '|=' { _PyPegen_augoperator(p, BitOr) }
         | '^=' { _PyPegen_augoperator(p, BitXor) }
         | '<<=' { _PyPegen_augoperator(p, LShift) }
         | '>>=' { _PyPegen_augoperator(p, RShift) }
         | '**=' { _PyPegen_augoperator(p, Pow) }
         | '//=' { _PyPegen_augoperator(p, FloorDiv) }

     return_stmt[stmt_ty]:
         | 'return' a=[star_expressions] { _PyAST_Return(a, EXTRA) }

     raise_stmt[stmt_ty]:
         | 'raise' a=expression b=['from' z=expression { z }] { _PyAST_Raise(a, b, EXTRA) }
         | 'raise' { _PyAST_Raise(NULL, NULL, EXTRA) }

     global_stmt[stmt_ty]: 'global' a[asdl_expr_seq*]=','.NAME+ {
         _PyAST_Global(CHECK(asdl_identifier_seq*, _PyPegen_map_names_to_ids(p, a)), EXTRA) }

     nonlocal_stmt[stmt_ty]: 'nonlocal' a[asdl_expr_seq*]=','.NAME+ {
         _PyAST_Nonlocal(CHECK(asdl_identifier_seq*, _PyPegen_map_names_to_ids(p, a)), EXTRA) }

     del_stmt[stmt_ty]:
         | 'del' a=del_targets &(';' | NEWLINE) { _PyAST_Delete(a, EXTRA) }
         | invalid_del_stmt

     yield_stmt[stmt_ty]: y=yield_expr { _PyAST_Expr(y, EXTRA) }

     assert_stmt[stmt_ty]: 'assert' a=expression b=[',' z=expression { z }] { _PyAST_Assert(a, b, EXTRA) }

     import_stmt[stmt_ty]:
         | invalid_import
         | import_name
         | import_from

     # Import statements
     # -----------------

     import_name[stmt_ty]: 'import' a=dotted_as_names { _PyAST_Import(a, EXTRA) }
     # note below: the ('.' | '...') is necessary because '...' is tokenized as ELLIPSIS
     import_from[stmt_ty]:
         | 'from' a=('.' | '...')* b=dotted_name 'import' c=import_from_targets {
             _PyPegen_checked_future_import(p, b->v.Name.id, c, _PyPegen_seq_count_dots(a), EXTRA) }
         | 'from' a=('.' | '...')+ 'import' b=import_from_targets {
             _PyAST_ImportFrom(NULL, b, _PyPegen_seq_count_dots(a), EXTRA) }
     import_from_targets[asdl_alias_seq*]:
         | '(' a=import_from_as_names [','] ')' { a }
         | import_from_as_names !','
         | '*' { (asdl_alias_seq*)_PyPegen_singleton_seq(p, CHECK(alias_ty, _PyPegen_alias_for_star(p, EXTRA))) }
         | invalid_import_from_targets
     import_from_as_names[asdl_alias_seq*]:
         | a[asdl_alias_seq*]=','.import_from_as_name+ { a }
     import_from_as_name[alias_ty]:
         | a=NAME b=['as' z=NAME { z }] { _PyAST_alias(a->v.Name.id,
                                                    (b) ? ((expr_ty) b)->v.Name.id : NULL,
                                                    EXTRA) }
     dotted_as_names[asdl_alias_seq*]:
         | a[asdl_alias_seq*]=','.dotted_as_name+ { a }
     dotted_as_name[alias_ty]:
         | a=dotted_name b=['as' z=NAME { z }] { _PyAST_alias(a->v.Name.id,
                                                           (b) ? ((expr_ty) b)->v.Name.id : NULL,
                                                           EXTRA) }
     dotted_name[expr_ty]:
         | a=dotted_name '.' b=NAME { _PyPegen_join_names_with_dot(p, a, b) }
         | NAME

     # COMPOUND STATEMENTS
     # ===================

     # Common elements
     # ---------------

     block[asdl_stmt_seq*] (memo):
         | NEWLINE INDENT a=statements DEDENT { a }
         | simple_stmts
         | invalid_block

     decorators[asdl_expr_seq*]: a[asdl_expr_seq*]=('@' f=named_expression NEWLINE { f })+ { a }

     # Class definitions
     # -----------------

     class_def[stmt_ty]:
         | a=decorators b=class_def_raw { _PyPegen_class_def_decorators(p, a, b) }
         | class_def_raw

     class_def_raw[stmt_ty]:
         | invalid_class_def_raw
         | 'class' a=NAME t=[type_params] b=['(' z=[arguments] ')' { z }] ':' c=block {
             _PyAST_ClassDef(a->v.Name.id,
                          (b) ? ((expr_ty) b)->v.Call.args : NULL,
                          (b) ? ((expr_ty) b)->v.Call.keywords : NULL,
                          c, NULL, t, EXTRA) }

     # Function definitions
     # --------------------

     function_def[stmt_ty]:
         | d=decorators f=function_def_raw { _PyPegen_function_def_decorators(p, d, f) }
         | function_def_raw

     function_def_raw[stmt_ty]:
         | invalid_def_raw
         | 'def' n=NAME t=[type_params] '(' params=[params] ')' a=['->' z=expression { z }] ':' tc=[func_type_comment] b=block {
             _PyAST_FunctionDef(n->v.Name.id,
                             (params) ? params : CHECK(arguments_ty, _PyPegen_empty_arguments(p)),
                             b, NULL, a, NEW_TYPE_COMMENT(p, tc), t, EXTRA) }
         | 'async' 'def' n=NAME t=[type_params] '(' params=[params] ')' a=['->' z=expression { z }] ':' tc=[func_type_comment] b=block {
             CHECK_VERSION(
                 stmt_ty,
                 5,
                 "Async functions are",
                 _PyAST_AsyncFunctionDef(n->v.Name.id,
                                 (params) ? params : CHECK(arguments_ty, _PyPegen_empty_arguments(p)),
                                 b, NULL, a, NEW_TYPE_COMMENT(p, tc), t, EXTRA)
             ) }

     # Function parameters
     # -------------------

     params[arguments_ty]:
         | invalid_parameters
         | parameters

     parameters[arguments_ty]:
         | a=slash_no_default b[asdl_arg_seq*]=param_no_default* c=param_with_default* d=[star_etc] {
             CHECK_VERSION(arguments_ty, 8, "Positional-only parameters are", _PyPegen_make_arguments(p, a, NULL, b, c, d)) }
         | a=slash_with_default b=param_with_default* c=[star_etc] {
             CHECK_VERSION(arguments_ty, 8, "Positional-only parameters are", _PyPegen_make_arguments(p, NULL, a, NULL, b, c)) }
         | a[asdl_arg_seq*]=param_no_default+ b=param_with_default* c=[star_etc] {
             _PyPegen_make_arguments(p, NULL, NULL, a, b, c) }
         | a=param_with_default+ b=[star_etc] { _PyPegen_make_arguments(p, NULL, NULL, NULL, a, b)}
         | a=star_etc { _PyPegen_make_arguments(p, NULL, NULL, NULL, NULL, a) }

     # Some duplication here because we can't write (',' | &')'),
     # which is because we don't support empty alternatives (yet).

     slash_no_default[asdl_arg_seq*]:
         | a[asdl_arg_seq*]=param_no_default+ '/' ',' { a }
         | a[asdl_arg_seq*]=param_no_default+ '/' &')' { a }
     slash_with_default[SlashWithDefault*]:
         | a=param_no_default* b=param_with_default+ '/' ',' { _PyPegen_slash_with_default(p, (asdl_arg_seq *)a, b) }
         | a=param_no_default* b=param_with_default+ '/' &')' { _PyPegen_slash_with_default(p, (asdl_arg_seq *)a, b) }

     star_etc[StarEtc*]:
         | invalid_star_etc
         | '*' a=param_no_default b=param_maybe_default* c=[kwds] {
             _PyPegen_star_etc(p, a, b, c) }
         | '*' a=param_no_default_star_annotation b=param_maybe_default* c=[kwds] {
             _PyPegen_star_etc(p, a, b, c) }
         | '*' ',' b=param_maybe_default+ c=[kwds] {
             _PyPegen_star_etc(p, NULL, b, c) }
         | a=kwds { _PyPegen_star_etc(p, NULL, NULL, a) }

     kwds[arg_ty]:
         | invalid_kwds
         | '**' a=param_no_default { a }

     # One parameter.  This *includes* a following comma and type comment.
     #
     # There are three styles:
     # - No default
     # - With default
     # - Maybe with default
     #
     # There are two alternative forms of each, to deal with type comments:
     # - Ends in a comma followed by an optional type comment
     # - No comma, optional type comment, must be followed by close paren
     # The latter form is for a final parameter without trailing comma.
     #

     param_no_default[arg_ty]:
         | a=param ',' tc=TYPE_COMMENT? { _PyPegen_add_type_comment_to_arg(p, a, tc) }
         | a=param tc=TYPE_COMMENT? &')' { _PyPegen_add_type_comment_to_arg(p, a, tc) }
     param_no_default_star_annotation[arg_ty]:
         | a=param_star_annotation ',' tc=TYPE_COMMENT? { _PyPegen_add_type_comment_to_arg(p, a, tc) }
         | a=param_star_annotation tc=TYPE_COMMENT? &')' { _PyPegen_add_type_comment_to_arg(p, a, tc) }
     param_with_default[NameDefaultPair*]:
         | a=param c=default ',' tc=TYPE_COMMENT? { _PyPegen_name_default_pair(p, a, c, tc) }
         | a=param c=default tc=TYPE_COMMENT? &')' { _PyPegen_name_default_pair(p, a, c, tc) }
     param_maybe_default[NameDefaultPair*]:
         | a=param c=default? ',' tc=TYPE_COMMENT? { _PyPegen_name_default_pair(p, a, c, tc) }
         | a=param c=default? tc=TYPE_COMMENT? &')' { _PyPegen_name_default_pair(p, a, c, tc) }
     param[arg_ty]: a=NAME b=annotation? { _PyAST_arg(a->v.Name.id, b, NULL, EXTRA) }
     param_star_annotation[arg_ty]: a=NAME b=star_annotation { _PyAST_arg(a->v.Name.id, b, NULL, EXTRA) }
     annotation[expr_ty]: ':' a=expression { a }
     star_annotation[expr_ty]: ':' a=star_expression { a }
     default[expr_ty]: '=' a=expression { a } | invalid_default

     # If statement
     # ------------

     if_stmt[stmt_ty]:
         | invalid_if_stmt
         | 'if' a=named_expression ':' b=block c=elif_stmt {
             _PyAST_If(a, b, CHECK(asdl_stmt_seq*, _PyPegen_singleton_seq(p, c)), EXTRA) }
         | 'if' a=named_expression ':' b=block c=[else_block] { _PyAST_If(a, b, c, EXTRA) }
     elif_stmt[stmt_ty]:
         | invalid_elif_stmt
         | 'elif' a=named_expression ':' b=block c=elif_stmt {
             _PyAST_If(a, b, CHECK(asdl_stmt_seq*, _PyPegen_singleton_seq(p, c)), EXTRA) }
         | 'elif' a=named_expression ':' b=block c=[else_block] { _PyAST_If(a, b, c, EXTRA) }
     else_block[asdl_stmt_seq*]:
         | invalid_else_stmt
         | 'else' &&':' b=block { b }

     # While statement
     # ---------------

     while_stmt[stmt_ty]:
         | invalid_while_stmt
         | 'while' a=named_expression ':' b=block c=[else_block] { _PyAST_While(a, b, c, EXTRA) }

     # For statement
     # -------------

     for_stmt[stmt_ty]:
         | invalid_for_stmt
         | 'for' t=star_targets 'in' ~ ex=star_expressions ':' tc=[TYPE_COMMENT] b=block el=[else_block] {
             _PyAST_For(t, ex, b, el, NEW_TYPE_COMMENT(p, tc), EXTRA) }
         | 'async' 'for' t=star_targets 'in' ~ ex=star_expressions ':' tc=[TYPE_COMMENT] b=block el=[else_block] {
             CHECK_VERSION(stmt_ty, 5, "Async for loops are", _PyAST_AsyncFor(t, ex, b, el, NEW_TYPE_COMMENT(p, tc), EXTRA)) }
         | invalid_for_target

     # With statement
     # --------------

     with_stmt[stmt_ty]:
         | invalid_with_stmt_indent
         | 'with' '(' a[asdl_withitem_seq*]=','.with_item+ ','? ')' ':' tc=[TYPE_COMMENT] b=block {
            _PyAST_With(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA) }
         | 'with' a[asdl_withitem_seq*]=','.with_item+ ':' tc=[TYPE_COMMENT] b=block {
             _PyAST_With(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA) }
         | 'async' 'with' '(' a[asdl_withitem_seq*]=','.with_item+ ','? ')' ':' b=block {
            CHECK_VERSION(stmt_ty, 5, "Async with statements are", _PyAST_AsyncWith(a, b, NULL, EXTRA)) }
         | 'async' 'with' a[asdl_withitem_seq*]=','.with_item+ ':' tc=[TYPE_COMMENT] b=block {
            CHECK_VERSION(stmt_ty, 5, "Async with statements are", _PyAST_AsyncWith(a, b, NEW_TYPE_COMMENT(p, tc), EXTRA)) }
         | invalid_with_stmt

     with_item[withitem_ty]:
         | e=expression 'as' t=star_target &(',' | ')' | ':') { _PyAST_withitem(e, t, p->arena) }
         | invalid_with_item
         | e=expression { _PyAST_withitem(e, NULL, p->arena) }

     # Try statement
     # -------------

     try_stmt[stmt_ty]:
         | invalid_try_stmt
         | 'try' &&':' b=block f=finally_block { _PyAST_Try(b, NULL, NULL, f, EXTRA) }
         | 'try' &&':' b=block ex[asdl_excepthandler_seq*]=except_block+ el=[else_block] f=[finally_block] { _PyAST_Try(b, ex, el, f, EXTRA) }
         | 'try' &&':' b=block ex[asdl_excepthandler_seq*]=except_star_block+ el=[else_block] f=[finally_block] {
             CHECK_VERSION(stmt_ty, 11, "Exception groups are",
                           _PyAST_TryStar(b, ex, el, f, EXTRA)) }


     # Except statement
     # ----------------

     except_block[excepthandler_ty]:
         | invalid_except_stmt_indent
         | 'except' e=expression t=['as' z=NAME { z }] ':' b=block {
             _PyAST_ExceptHandler(e, (t) ? ((expr_ty) t)->v.Name.id : NULL, b, EXTRA) }
         | 'except' ':' b=block { _PyAST_ExceptHandler(NULL, NULL, b, EXTRA) }
         | invalid_except_stmt
     except_star_block[excepthandler_ty]:
         | invalid_except_star_stmt_indent
         | 'except' '*' e=expression t=['as' z=NAME { z }] ':' b=block {
             _PyAST_ExceptHandler(e, (t) ? ((expr_ty) t)->v.Name.id : NULL, b, EXTRA) }
         | invalid_except_stmt
     finally_block[asdl_stmt_seq*]:
         | invalid_finally_stmt
         | 'finally' &&':' a=block { a }

     # Match statement
     # ---------------

     match_stmt[stmt_ty]:
         | "match" subject=subject_expr ':' NEWLINE INDENT cases[asdl_match_case_seq*]=case_block+ DEDENT {
             CHECK_VERSION(stmt_ty, 10, "Pattern matching is", _PyAST_Match(subject, cases, EXTRA)) }
         | invalid_match_stmt

     subject_expr[expr_ty]:
         | value=star_named_expression ',' values=star_named_expressions? {
             _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, value, values)), Load, EXTRA) }
         | named_expression

     case_block[match_case_ty]:
         | invalid_case_block
         | "case" pattern=patterns guard=guard? ':' body=block {
             _PyAST_match_case(pattern, guard, body, p->arena) }

     guard[expr_ty]: 'if' guard=named_expression { guard }

     patterns[pattern_ty]:
         | patterns[asdl_pattern_seq*]=open_sequence_pattern {
             _PyAST_MatchSequence(patterns, EXTRA) }
         | pattern

     pattern[pattern_ty]:
         | as_pattern
         | or_pattern

     as_pattern[pattern_ty]:
         | pattern=or_pattern 'as' target=pattern_capture_target {
             _PyAST_MatchAs(pattern, target->v.Name.id, EXTRA) }
         | invalid_as_pattern

     or_pattern[pattern_ty]:
         | patterns[asdl_pattern_seq*]='|'.closed_pattern+ {
             asdl_seq_LEN(patterns) == 1 ? asdl_seq_GET(patterns, 0) : _PyAST_MatchOr(patterns, EXTRA) }

     closed_pattern[pattern_ty] (memo):
         | literal_pattern
         | capture_pattern
         | wildcard_pattern
         | value_pattern
         | group_pattern
         | sequence_pattern
         | mapping_pattern
         | class_pattern

     # Literal patterns are used for equality and identity constraints
     literal_pattern[pattern_ty]:
         | value=signed_number !('+' | '-') { _PyAST_MatchValue(value, EXTRA) }
         | value=complex_number { _PyAST_MatchValue(value, EXTRA) }
         | value=strings { _PyAST_MatchValue(value, EXTRA) }
         | 'None' { _PyAST_MatchSingleton(Py_None, EXTRA) }
         | 'True' { _PyAST_MatchSingleton(Py_True, EXTRA) }
         | 'False' { _PyAST_MatchSingleton(Py_False, EXTRA) }

     # Literal expressions are used to restrict permitted mapping pattern keys
     literal_expr[expr_ty]:
         | signed_number !('+' | '-')
         | complex_number
         | strings
         | 'None' { _PyAST_Constant(Py_None, NULL, EXTRA) }
         | 'True' { _PyAST_Constant(Py_True, NULL, EXTRA) }
         | 'False' { _PyAST_Constant(Py_False, NULL, EXTRA) }

     complex_number[expr_ty]:
         | real=signed_real_number '+' imag=imaginary_number {
             _PyAST_BinOp(real, Add, imag, EXTRA) }
         | real=signed_real_number '-' imag=imaginary_number  {
             _PyAST_BinOp(real, Sub, imag, EXTRA) }

     signed_number[expr_ty]:
         | NUMBER
         | '-' number=NUMBER { _PyAST_UnaryOp(USub, number, EXTRA) }

     signed_real_number[expr_ty]:
         | real_number
         | '-' real=real_number { _PyAST_UnaryOp(USub, real, EXTRA) }

     real_number[expr_ty]:
         | real=NUMBER { _PyPegen_ensure_real(p, real) }

     imaginary_number[expr_ty]:
         | imag=NUMBER { _PyPegen_ensure_imaginary(p, imag) }

     capture_pattern[pattern_ty]:
         | target=pattern_capture_target { _PyAST_MatchAs(NULL, target->v.Name.id, EXTRA) }

     pattern_capture_target[expr_ty]:
         | !"_" name=NAME !('.' | '(' | '=') {
             _PyPegen_set_expr_context(p, name, Store) }

     wildcard_pattern[pattern_ty]:
         | "_" { _PyAST_MatchAs(NULL, NULL, EXTRA) }

     value_pattern[pattern_ty]:
         | attr=attr !('.' | '(' | '=') { _PyAST_MatchValue(attr, EXTRA) }

     attr[expr_ty]:
         | value=name_or_attr '.' attr=NAME {
             _PyAST_Attribute(value, attr->v.Name.id, Load, EXTRA) }

     name_or_attr[expr_ty]:
         | attr
         | NAME

     group_pattern[pattern_ty]:
         | '(' pattern=pattern ')' { pattern }

     sequence_pattern[pattern_ty]:
         | '[' patterns=maybe_sequence_pattern? ']' { _PyAST_MatchSequence(patterns, EXTRA) }
         | '(' patterns=open_sequence_pattern? ')' { _PyAST_MatchSequence(patterns, EXTRA) }

     open_sequence_pattern[asdl_seq*]:
         | pattern=maybe_star_pattern ',' patterns=maybe_sequence_pattern? {
             _PyPegen_seq_insert_in_front(p, pattern, patterns) }

     maybe_sequence_pattern[asdl_seq*]:
         | patterns=','.maybe_star_pattern+ ','? { patterns }

     maybe_star_pattern[pattern_ty]:
         | star_pattern
         | pattern

     star_pattern[pattern_ty] (memo):
         | '*' target=pattern_capture_target {
             _PyAST_MatchStar(target->v.Name.id, EXTRA) }
         | '*' wildcard_pattern {
             _PyAST_MatchStar(NULL, EXTRA) }

     mapping_pattern[pattern_ty]:
         | '{' '}' {
             _PyAST_MatchMapping(NULL, NULL, NULL, EXTRA) }
         | '{' rest=double_star_pattern ','? '}' {
             _PyAST_MatchMapping(NULL, NULL, rest->v.Name.id, EXTRA) }
         | '{' items=items_pattern ',' rest=double_star_pattern ','? '}' {
             _PyAST_MatchMapping(
                 CHECK(asdl_expr_seq*, _PyPegen_get_pattern_keys(p, items)),
                 CHECK(asdl_pattern_seq*, _PyPegen_get_patterns(p, items)),
                 rest->v.Name.id,
                 EXTRA) }
         | '{' items=items_pattern ','? '}' {
             _PyAST_MatchMapping(
                 CHECK(asdl_expr_seq*, _PyPegen_get_pattern_keys(p, items)),
                 CHECK(asdl_pattern_seq*, _PyPegen_get_patterns(p, items)),
                 NULL,
                 EXTRA) }

     items_pattern[asdl_seq*]:
         | ','.key_value_pattern+

     key_value_pattern[KeyPatternPair*]:
         | key=(literal_expr | attr) ':' pattern=pattern {
             _PyPegen_key_pattern_pair(p, key, pattern) }

     double_star_pattern[expr_ty]:
         | '**' target=pattern_capture_target { target }

     class_pattern[pattern_ty]:
         | cls=name_or_attr '(' ')' {
             _PyAST_MatchClass(cls, NULL, NULL, NULL, EXTRA) }
         | cls=name_or_attr '(' patterns=positional_patterns ','? ')' {
             _PyAST_MatchClass(cls, patterns, NULL, NULL, EXTRA) }
         | cls=name_or_attr '(' keywords=keyword_patterns ','? ')' {
             _PyAST_MatchClass(
                 cls, NULL,
                 CHECK(asdl_identifier_seq*, _PyPegen_map_names_to_ids(p,
                     CHECK(asdl_expr_seq*, _PyPegen_get_pattern_keys(p, keywords)))),
                 CHECK(asdl_pattern_seq*, _PyPegen_get_patterns(p, keywords)),
                 EXTRA) }
         | cls=name_or_attr '(' patterns=positional_patterns ',' keywords=keyword_patterns ','? ')' {
             _PyAST_MatchClass(
                 cls,
                 patterns,
                 CHECK(asdl_identifier_seq*, _PyPegen_map_names_to_ids(p,
                     CHECK(asdl_expr_seq*, _PyPegen_get_pattern_keys(p, keywords)))),
                 CHECK(asdl_pattern_seq*, _PyPegen_get_patterns(p, keywords)),
                 EXTRA) }
         | invalid_class_pattern

     positional_patterns[asdl_pattern_seq*]:
         | args[asdl_pattern_seq*]=','.pattern+ { args }

     keyword_patterns[asdl_seq*]:
         | ','.keyword_pattern+

     keyword_pattern[KeyPatternPair*]:
         | arg=NAME '=' value=pattern { _PyPegen_key_pattern_pair(p, arg, value) }

     # Type statement
     # ---------------

     type_alias[stmt_ty]:
         | "type" n=NAME t=[type_params] '=' b=expression {
             CHECK_VERSION(stmt_ty, 12, "Type statement is",
             _PyAST_TypeAlias(CHECK(expr_ty, _PyPegen_set_expr_context(p, n, Store)), t, b, EXTRA)) }

     # Type parameter declaration
     # --------------------------

     type_params[asdl_type_param_seq*]:
         | invalid_type_params
         | '[' t=type_param_seq ']' {
             CHECK_VERSION(asdl_type_param_seq *, 12, "Type parameter lists are", t) }

     type_param_seq[asdl_type_param_seq*]: a[asdl_type_param_seq*]=','.type_param+ [','] { a }

     type_param[type_param_ty] (memo):
         | a=NAME b=[type_param_bound] c=[type_param_default] { _PyAST_TypeVar(a->v.Name.id, b, c, EXTRA) }
         | '*' a=NAME colon=':' e=expression {
                 RAISE_SYNTAX_ERROR_STARTING_FROM(colon, e->kind == Tuple_kind
                     ? "cannot use constraints with TypeVarTuple"
                     : "cannot use bound with TypeVarTuple")
             }
         | '*' a=NAME b=[type_param_starred_default] { _PyAST_TypeVarTuple(a->v.Name.id, b, EXTRA) }
         | '**' a=NAME colon=':' e=expression {
                 RAISE_SYNTAX_ERROR_STARTING_FROM(colon, e->kind == Tuple_kind
                     ? "cannot use constraints with ParamSpec"
                     : "cannot use bound with ParamSpec")
             }
         | '**' a=NAME b=[type_param_default] { _PyAST_ParamSpec(a->v.Name.id, b, EXTRA) }

     type_param_bound[expr_ty]: ':' e=expression { e }
     type_param_default[expr_ty]: '=' e=expression {
         CHECK_VERSION(expr_ty, 13, "Type parameter defaults are", e) }
     type_param_starred_default[expr_ty]: '=' e=star_expression {
         CHECK_VERSION(expr_ty, 13, "Type parameter defaults are", e) }

     # EXPRESSIONS
     # -----------

     expressions[expr_ty]:
         | a=expression b=(',' c=expression { c })+ [','] {
             _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), Load, EXTRA) }
         | a=expression ',' { _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_singleton_seq(p, a)), Load, EXTRA) }
         | expression

     expression[expr_ty] (memo):
         | invalid_expression
         | invalid_legacy_expression
         | a=disjunction 'if' b=disjunction 'else' c=expression { _PyAST_IfExp(b, a, c, EXTRA) }
         | disjunction
         | lambdef

     yield_expr[expr_ty]:
         | 'yield' 'from' a=expression { _PyAST_YieldFrom(a, EXTRA) }
         | 'yield' a=[star_expressions] { _PyAST_Yield(a, EXTRA) }

     star_expressions[expr_ty]:
         | a=star_expression b=(',' c=star_expression { c })+ [','] {
             _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), Load, EXTRA) }
         | a=star_expression ',' { _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_singleton_seq(p, a)), Load, EXTRA) }
         | star_expression

     star_expression[expr_ty] (memo):
         | '*' a=bitwise_or { _PyAST_Starred(a, Load, EXTRA) }
         | expression

     star_named_expressions[asdl_expr_seq*]: a[asdl_expr_seq*]=','.star_named_expression+ [','] { a }

     star_named_expression[expr_ty]:
         | '*' a=bitwise_or { _PyAST_Starred(a, Load, EXTRA) }
         | named_expression

     assignment_expression[expr_ty]:
         | a=NAME ':=' ~ b=expression {
             CHECK_VERSION(expr_ty, 8, "Assignment expressions are",
             _PyAST_NamedExpr(CHECK(expr_ty, _PyPegen_set_expr_context(p, a, Store)), b, EXTRA)) }

     named_expression[expr_ty]:
         | assignment_expression
         | invalid_named_expression
         | expression !':='

     disjunction[expr_ty] (memo):
         | a=conjunction b=('or' c=conjunction { c })+ { _PyAST_BoolOp(
             Or,
             CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)),
             EXTRA) }
         | conjunction

     conjunction[expr_ty] (memo):
         | a=inversion b=('and' c=inversion { c })+ { _PyAST_BoolOp(
             And,
             CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)),
             EXTRA) }
         | inversion

     inversion[expr_ty] (memo):
         | 'not' a=inversion { _PyAST_UnaryOp(Not, a, EXTRA) }
         | comparison

     # Comparison operators
     # --------------------

     comparison[expr_ty]:
         | a=bitwise_or b=compare_op_bitwise_or_pair+ {
             _PyAST_Compare(
                 a,
                 CHECK(asdl_int_seq*, _PyPegen_get_cmpops(p, b)),
                 CHECK(asdl_expr_seq*, _PyPegen_get_exprs(p, b)),
                 EXTRA) }
         | bitwise_or

     compare_op_bitwise_or_pair[CmpopExprPair*]:
         | 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

     eq_bitwise_or[CmpopExprPair*]: '==' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, Eq, a) }
     noteq_bitwise_or[CmpopExprPair*]:
         | (tok='!=' { _PyPegen_check_barry_as_flufl(p, tok) ? NULL : tok}) a=bitwise_or {_PyPegen_cmpop_expr_pair(p, NotEq, a) }
     lte_bitwise_or[CmpopExprPair*]: '<=' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, LtE, a) }
     lt_bitwise_or[CmpopExprPair*]: '<' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, Lt, a) }
     gte_bitwise_or[CmpopExprPair*]: '>=' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, GtE, a) }
     gt_bitwise_or[CmpopExprPair*]: '>' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, Gt, a) }
     notin_bitwise_or[CmpopExprPair*]: 'not' 'in' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, NotIn, a) }
     in_bitwise_or[CmpopExprPair*]: 'in' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, In, a) }
     isnot_bitwise_or[CmpopExprPair*]: 'is' 'not' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, IsNot, a) }
     is_bitwise_or[CmpopExprPair*]: 'is' a=bitwise_or { _PyPegen_cmpop_expr_pair(p, Is, a) }

     # Bitwise operators
     # -----------------

     bitwise_or[expr_ty]:
         | a=bitwise_or '|' b=bitwise_xor { _PyAST_BinOp(a, BitOr, b, EXTRA) }
         | bitwise_xor

     bitwise_xor[expr_ty]:
         | a=bitwise_xor '^' b=bitwise_and { _PyAST_BinOp(a, BitXor, b, EXTRA) }
         | bitwise_and

     bitwise_and[expr_ty]:
         | a=bitwise_and '&' b=shift_expr { _PyAST_BinOp(a, BitAnd, b, EXTRA) }
         | shift_expr

     shift_expr[expr_ty]:
         | a=shift_expr '<<' b=sum { _PyAST_BinOp(a, LShift, b, EXTRA) }
         | a=shift_expr '>>' b=sum { _PyAST_BinOp(a, RShift, b, EXTRA) }
         | invalid_arithmetic
         | sum

     # Arithmetic operators
     # --------------------

     sum[expr_ty]:
         | a=sum '+' b=term { _PyAST_BinOp(a, Add, b, EXTRA) }
         | a=sum '-' b=term { _PyAST_BinOp(a, Sub, b, EXTRA) }
         | term

     term[expr_ty]:
         | a=term '*' b=factor { _PyAST_BinOp(a, Mult, b, EXTRA) }
         | a=term '/' b=factor { _PyAST_BinOp(a, Div, b, EXTRA) }
         | a=term '//' b=factor { _PyAST_BinOp(a, FloorDiv, b, EXTRA) }
         | a=term '%' b=factor { _PyAST_BinOp(a, Mod, b, EXTRA) }
         | a=term '@' b=factor { CHECK_VERSION(expr_ty, 5, "The '@' operator is", _PyAST_BinOp(a, MatMult, b, EXTRA)) }
         | invalid_factor
         | factor

     factor[expr_ty] (memo):
         | '+' a=factor { _PyAST_UnaryOp(UAdd, a, EXTRA) }
         | '-' a=factor { _PyAST_UnaryOp(USub, a, EXTRA) }
         | '~' a=factor { _PyAST_UnaryOp(Invert, a, EXTRA) }
         | power

     power[expr_ty]:
         | a=await_primary '**' b=factor { _PyAST_BinOp(a, Pow, b, EXTRA) }
         | await_primary

     # Primary elements
     # ----------------

     # Primary elements are things like "obj.something.something", "obj[something]", "obj(something)", "obj" ...

     await_primary[expr_ty] (memo):
         | 'await' a=primary { CHECK_VERSION(expr_ty, 5, "Await expressions are", _PyAST_Await(a, EXTRA)) }
         | primary

     primary[expr_ty]:
         | a=primary '.' b=NAME { _PyAST_Attribute(a, b->v.Name.id, Load, EXTRA) }
         | a=primary b=genexp { _PyAST_Call(a, CHECK(asdl_expr_seq*, (asdl_expr_seq*)_PyPegen_singleton_seq(p, b)), NULL, EXTRA) }
         | a=primary '(' b=[arguments] ')' {
             _PyAST_Call(a,
                      (b) ? ((expr_ty) b)->v.Call.args : NULL,
                      (b) ? ((expr_ty) b)->v.Call.keywords : NULL,
                      EXTRA) }
         | a=primary '[' b=slices ']' { _PyAST_Subscript(a, b, Load, EXTRA) }
         | atom

     slices[expr_ty]:
         | a=slice !',' { a }
         | a[asdl_expr_seq*]=','.(slice | starred_expression)+ [','] { _PyAST_Tuple(a, Load, EXTRA) }

     slice[expr_ty]:
         | a=[expression] ':' b=[expression] c=[':' d=[expression] { d }] { _PyAST_Slice(a, b, c, EXTRA) }
         | a=named_expression { a }

     atom[expr_ty]:
         | NAME
         | 'True' { _PyAST_Constant(Py_True, NULL, EXTRA) }
         | 'False' { _PyAST_Constant(Py_False, NULL, EXTRA) }
         | 'None' { _PyAST_Constant(Py_None, NULL, EXTRA) }
         | &(STRING|FSTRING_START) strings
         | NUMBER
         | &'(' (tuple | group | genexp)
         | &'[' (list | listcomp)
         | &'{' (dict | set | dictcomp | setcomp)
         | '...' { _PyAST_Constant(Py_Ellipsis, NULL, EXTRA) }

     group[expr_ty]:
         | '(' a=(yield_expr | named_expression) ')' { a }
         | invalid_group

     # Lambda functions
     # ----------------

     lambdef[expr_ty]:
         | 'lambda' a=[lambda_params] ':' b=expression {
             _PyAST_Lambda((a) ? a : CHECK(arguments_ty, _PyPegen_empty_arguments(p)), b, EXTRA) }

     lambda_params[arguments_ty]:
         | invalid_lambda_parameters
         | lambda_parameters

     # lambda_parameters etc. duplicates parameters but without annotations
     # or type comments, and if there's no comma after a parameter, we expect
     # a colon, not a close parenthesis.  (For more, see parameters above.)
     #
     lambda_parameters[arguments_ty]:
         | a=lambda_slash_no_default b[asdl_arg_seq*]=lambda_param_no_default* c=lambda_param_with_default* d=[lambda_star_etc] {
             CHECK_VERSION(arguments_ty, 8, "Positional-only parameters are", _PyPegen_make_arguments(p, a, NULL, b, c, d)) }
         | a=lambda_slash_with_default b=lambda_param_with_default* c=[lambda_star_etc] {
             CHECK_VERSION(arguments_ty, 8, "Positional-only parameters are", _PyPegen_make_arguments(p, NULL, a, NULL, b, c)) }
         | a[asdl_arg_seq*]=lambda_param_no_default+ b=lambda_param_with_default* c=[lambda_star_etc] {
             _PyPegen_make_arguments(p, NULL, NULL, a, b, c) }
         | a=lambda_param_with_default+ b=[lambda_star_etc] { _PyPegen_make_arguments(p, NULL, NULL, NULL, a, b)}
         | a=lambda_star_etc { _PyPegen_make_arguments(p, NULL, NULL, NULL, NULL, a) }

     lambda_slash_no_default[asdl_arg_seq*]:
         | a[asdl_arg_seq*]=lambda_param_no_default+ '/' ',' { a }
         | a[asdl_arg_seq*]=lambda_param_no_default+ '/' &':' { a }

     lambda_slash_with_default[SlashWithDefault*]:
         | a=lambda_param_no_default* b=lambda_param_with_default+ '/' ',' { _PyPegen_slash_with_default(p, (asdl_arg_seq *)a, b) }
         | a=lambda_param_no_default* b=lambda_param_with_default+ '/' &':' { _PyPegen_slash_with_default(p, (asdl_arg_seq *)a, b) }

     lambda_star_etc[StarEtc*]:
         | invalid_lambda_star_etc
         | '*' a=lambda_param_no_default b=lambda_param_maybe_default* c=[lambda_kwds] {
             _PyPegen_star_etc(p, a, b, c) }
         | '*' ',' b=lambda_param_maybe_default+ c=[lambda_kwds] {
             _PyPegen_star_etc(p, NULL, b, c) }
         | a=lambda_kwds { _PyPegen_star_etc(p, NULL, NULL, a) }

     lambda_kwds[arg_ty]:
         | invalid_lambda_kwds
         | '**' a=lambda_param_no_default { a }

     lambda_param_no_default[arg_ty]:
         | a=lambda_param ',' { a }
         | a=lambda_param &':' { a }
     lambda_param_with_default[NameDefaultPair*]:
         | a=lambda_param c=default ',' { _PyPegen_name_default_pair(p, a, c, NULL) }
         | a=lambda_param c=default &':' { _PyPegen_name_default_pair(p, a, c, NULL) }
     lambda_param_maybe_default[NameDefaultPair*]:
         | a=lambda_param c=default? ',' { _PyPegen_name_default_pair(p, a, c, NULL) }
         | a=lambda_param c=default? &':' { _PyPegen_name_default_pair(p, a, c, NULL) }
     lambda_param[arg_ty]: a=NAME { _PyAST_arg(a->v.Name.id, NULL, NULL, EXTRA) }

     # LITERALS
     # ========

     fstring_middle[expr_ty]:
         | fstring_replacement_field
         | t=FSTRING_MIDDLE { _PyPegen_constant_from_token(p, t) }
     fstring_replacement_field[expr_ty]:
         | '{' a=annotated_rhs debug_expr='='? conversion=[fstring_conversion] format=[fstring_full_format_spec] rbrace='}' {
             _PyPegen_formatted_value(p, a, debug_expr, conversion, format, rbrace, EXTRA) }
         | invalid_replacement_field
     fstring_conversion[ResultTokenWithMetadata*]:
         | conv_token="!" conv=NAME { _PyPegen_check_fstring_conversion(p, conv_token, conv) }
     fstring_full_format_spec[ResultTokenWithMetadata*]:
         | colon=':' spec=fstring_format_spec* { _PyPegen_setup_full_format_spec(p, colon, (asdl_expr_seq *) spec, EXTRA) }
     fstring_format_spec[expr_ty]:
         | t=FSTRING_MIDDLE { _PyPegen_decoded_constant_from_token(p, t) }
         | fstring_replacement_field
     fstring[expr_ty]:
         | a=FSTRING_START b=fstring_middle* c=FSTRING_END { _PyPegen_joined_str(p, a, (asdl_expr_seq*)b, c) }

     string[expr_ty]: s[Token*]=STRING { _PyPegen_constant_from_string(p, s) }
     strings[expr_ty] (memo): a[asdl_expr_seq*]=(fstring|string)+ { _PyPegen_concatenate_strings(p, a, EXTRA) }

     list[expr_ty]:
         | '[' a=[star_named_expressions] ']' { _PyAST_List(a, Load, EXTRA) }

     tuple[expr_ty]:
         | '(' a=[y=star_named_expression ',' z=[star_named_expressions] { _PyPegen_seq_insert_in_front(p, y, z) } ] ')' {
             _PyAST_Tuple(a, Load, EXTRA) }

     set[expr_ty]: '{' a=star_named_expressions '}' { _PyAST_Set(a, EXTRA) }

     # Dicts
     # -----

     dict[expr_ty]:
         | '{' a=[double_starred_kvpairs] '}' {
             _PyAST_Dict(
                 CHECK(asdl_expr_seq*, _PyPegen_get_keys(p, a)),
                 CHECK(asdl_expr_seq*, _PyPegen_get_values(p, a)),
                 EXTRA) }
         | '{' invalid_double_starred_kvpairs '}'

     double_starred_kvpairs[asdl_seq*]: a=','.double_starred_kvpair+ [','] { a }

     double_starred_kvpair[KeyValuePair*]:
         | '**' a=bitwise_or { _PyPegen_key_value_pair(p, NULL, a) }
         | kvpair

     kvpair[KeyValuePair*]: a=expression ':' b=expression { _PyPegen_key_value_pair(p, a, b) }

     # Comprehensions & Generators
     # ---------------------------

     for_if_clauses[asdl_comprehension_seq*]:
         | a[asdl_comprehension_seq*]=for_if_clause+ { a }

     for_if_clause[comprehension_ty]:
         | 'async' 'for' a=star_targets 'in' ~ b=disjunction c[asdl_expr_seq*]=('if' z=disjunction { z })* {
             CHECK_VERSION(comprehension_ty, 6, "Async comprehensions are", _PyAST_comprehension(a, b, c, 1, p->arena)) }
         | 'for' a=star_targets 'in' ~ b=disjunction c[asdl_expr_seq*]=('if' z=disjunction { z })* {
             _PyAST_comprehension(a, b, c, 0, p->arena) }
         | 'async'? 'for' (bitwise_or (',' bitwise_or)* [',']) !'in' {
             RAISE_SYNTAX_ERROR("'in' expected after for-loop variables") }
         | invalid_for_target

     listcomp[expr_ty]:
         | '[' a=named_expression b=for_if_clauses ']' { _PyAST_ListComp(a, b, EXTRA) }
         | invalid_comprehension

     setcomp[expr_ty]:
         | '{' a=named_expression b=for_if_clauses '}' { _PyAST_SetComp(a, b, EXTRA) }
         | invalid_comprehension

     genexp[expr_ty]:
         | '(' a=( assignment_expression | expression !':=') b=for_if_clauses ')' { _PyAST_GeneratorExp(a, b, EXTRA) }
         | invalid_comprehension

     dictcomp[expr_ty]:
         | '{' a=kvpair b=for_if_clauses '}' { _PyAST_DictComp(a->key, a->value, b, EXTRA) }
         | invalid_dict_comprehension

     # FUNCTION CALL ARGUMENTS
     # =======================

     arguments[expr_ty] (memo):
         | a=args [','] &')' { a }
         | invalid_arguments

     args[expr_ty]:
         | a[asdl_expr_seq*]=','.(starred_expression | ( assignment_expression | expression !':=') !'=')+ b=[',' k=kwargs {k}] {
             _PyPegen_collect_call_seqs(p, a, b, EXTRA) }
         | a=kwargs { _PyAST_Call(_PyPegen_dummy_name(p),
                               CHECK_NULL_ALLOWED(asdl_expr_seq*, _PyPegen_seq_extract_starred_exprs(p, a)),
                               CHECK_NULL_ALLOWED(asdl_keyword_seq*, _PyPegen_seq_delete_starred_exprs(p, a)),
                               EXTRA) }

     kwargs[asdl_seq*]:
         | a=','.kwarg_or_starred+ ',' b=','.kwarg_or_double_starred+ { _PyPegen_join_sequences(p, a, b) }
         | ','.kwarg_or_starred+
         | ','.kwarg_or_double_starred+

     starred_expression[expr_ty]:
         | invalid_starred_expression
         | '*' a=expression { _PyAST_Starred(a, Load, EXTRA) }
         | '*' { RAISE_SYNTAX_ERROR("Invalid star expression") }

     kwarg_or_starred[KeywordOrStarred*]:
         | invalid_kwarg
         | a=NAME '=' b=expression {
             _PyPegen_keyword_or_starred(p, CHECK(keyword_ty, _PyAST_keyword(a->v.Name.id, b, EXTRA)), 1) }
         | a=starred_expression { _PyPegen_keyword_or_starred(p, a, 0) }

     kwarg_or_double_starred[KeywordOrStarred*]:
         | invalid_kwarg
         | a=NAME '=' b=expression {
             _PyPegen_keyword_or_starred(p, CHECK(keyword_ty, _PyAST_keyword(a->v.Name.id, b, EXTRA)), 1) }
         | '**' a=expression { _PyPegen_keyword_or_starred(p, CHECK(keyword_ty, _PyAST_keyword(NULL, a, EXTRA)), 1) }

     # ASSIGNMENT TARGETS
     # ==================

     # Generic targets
     # ---------------

     # NOTE: star_targets may contain *bitwise_or, targets may not.
     star_targets[expr_ty]:
         | a=star_target !',' { a }
         | a=star_target b=(',' c=star_target { c })* [','] {
             _PyAST_Tuple(CHECK(asdl_expr_seq*, _PyPegen_seq_insert_in_front(p, a, b)), Store, EXTRA) }

     star_targets_list_seq[asdl_expr_seq*]: a[asdl_expr_seq*]=','.star_target+ [','] { a }

     star_targets_tuple_seq[asdl_expr_seq*]:
         | a=star_target b=(',' c=star_target { c })+ [','] { (asdl_expr_seq*) _PyPegen_seq_insert_in_front(p, a, b) }
         | a=star_target ',' { (asdl_expr_seq*) _PyPegen_singleton_seq(p, a) }

     star_target[expr_ty] (memo):
         | '*' a=(!'*' star_target) {
             _PyAST_Starred(CHECK(expr_ty, _PyPegen_set_expr_context(p, a, Store)), Store, EXTRA) }
         | target_with_star_atom

     target_with_star_atom[expr_ty] (memo):
         | a=t_primary '.' b=NAME !t_lookahead { _PyAST_Attribute(a, b->v.Name.id, Store, EXTRA) }
         | a=t_primary '[' b=slices ']' !t_lookahead { _PyAST_Subscript(a, b, Store, EXTRA) }
         | star_atom

     star_atom[expr_ty]:
         | a=NAME { _PyPegen_set_expr_context(p, a, Store) }
         | '(' a=target_with_star_atom ')' { _PyPegen_set_expr_context(p, a, Store) }
         | '(' a=[star_targets_tuple_seq] ')' { _PyAST_Tuple(a, Store, EXTRA) }
         | '[' a=[star_targets_list_seq] ']' { _PyAST_List(a, Store, EXTRA) }

     single_target[expr_ty]:
         | single_subscript_attribute_target
         | a=NAME { _PyPegen_set_expr_context(p, a, Store) }
         | '(' a=single_target ')' { a }

     single_subscript_attribute_target[expr_ty]:
         | a=t_primary '.' b=NAME !t_lookahead { _PyAST_Attribute(a, b->v.Name.id, Store, EXTRA) }
         | a=t_primary '[' b=slices ']' !t_lookahead { _PyAST_Subscript(a, b, Store, EXTRA) }

     t_primary[expr_ty]:
         | a=t_primary '.' b=NAME &t_lookahead { _PyAST_Attribute(a, b->v.Name.id, Load, EXTRA) }
         | a=t_primary '[' b=slices ']' &t_lookahead { _PyAST_Subscript(a, b, Load, EXTRA) }
         | a=t_primary b=genexp &t_lookahead {
             _PyAST_Call(a, CHECK(asdl_expr_seq*, (asdl_expr_seq*)_PyPegen_singleton_seq(p, b)), NULL, EXTRA) }
         | a=t_primary '(' b=[arguments] ')' &t_lookahead {
             _PyAST_Call(a,
                      (b) ? ((expr_ty) b)->v.Call.args : NULL,
                      (b) ? ((expr_ty) b)->v.Call.keywords : NULL,
                      EXTRA) }
         | a=atom &t_lookahead { a }

     t_lookahead: '(' | '[' | '.'

     # Targets for del statements
     # --------------------------

     del_targets[asdl_expr_seq*]: a[asdl_expr_seq*]=','.del_target+ [','] { a }

     del_target[expr_ty] (memo):
         | a=t_primary '.' b=NAME !t_lookahead { _PyAST_Attribute(a, b->v.Name.id, Del, EXTRA) }
         | a=t_primary '[' b=slices ']' !t_lookahead { _PyAST_Subscript(a, b, Del, EXTRA) }
         | del_t_atom

     del_t_atom[expr_ty]:
         | a=NAME { _PyPegen_set_expr_context(p, a, Del) }
         | '(' a=del_target ')' { _PyPegen_set_expr_context(p, a, Del) }
         | '(' a=[del_targets] ')' { _PyAST_Tuple(a, Del, EXTRA) }
         | '[' a=[del_targets] ']' { _PyAST_List(a, Del, EXTRA) }

     # TYPING ELEMENTS
     # ---------------

     # type_expressions allow */** but ignore them
     type_expressions[asdl_expr_seq*]:
         | a=','.expression+ ',' '*' b=expression ',' '**' c=expression {
             (asdl_expr_seq*)_PyPegen_seq_append_to_end(
                 p,
                 CHECK(asdl_seq*, _PyPegen_seq_append_to_end(p, a, b)),
                 c) }
         | a=','.expression+ ',' '*' b=expression { (asdl_expr_seq*)_PyPegen_seq_append_to_end(p, a, b) }
         | a=','.expression+ ',' '**' b=expression { (asdl_expr_seq*)_PyPegen_seq_append_to_end(p, a, b) }
         | '*' a=expression ',' '**' b=expression {
             (asdl_expr_seq*)_PyPegen_seq_append_to_end(
                 p,
                 CHECK(asdl_seq*, _PyPegen_singleton_seq(p, a)),
                 b) }
         | '*' a=expression { (asdl_expr_seq*)_PyPegen_singleton_seq(p, a) }
         | '**' a=expression { (asdl_expr_seq*)_PyPegen_singleton_seq(p, a) }
         | a[asdl_expr_seq*]=','.expression+ {a}

     func_type_comment[Token*]:
         | NEWLINE t=TYPE_COMMENT &(NEWLINE INDENT) { t }  # Must be followed by indented block
         | invalid_double_type_comments
         | TYPE_COMMENT

     # ========================= END OF THE GRAMMAR ===========================



     # ========================= START OF INVALID RULES =======================

     # From here on, there are rules for invalid syntax with specialised error messages
     invalid_arguments:
         | ((','.(starred_expression | ( assignment_expression | expression !':=') !'=')+ ',' kwargs) | kwargs) a=',' ','.(starred_expression !'=')+ {
             RAISE_SYNTAX_ERROR_STARTING_FROM(a, "iterable argument unpacking follows keyword argument unpacking") }
         | a=expression b=for_if_clauses ',' [args | expression for_if_clauses] {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, _PyPegen_get_last_comprehension_item(PyPegen_last_item(b, comprehension_ty)), "Generator expression must be parenthesized") }
         | a=NAME b='=' expression for_if_clauses {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "invalid syntax. Maybe you meant '==' or ':=' instead of '='?")}
         | (args ',')? a=NAME b='=' &(',' | ')') {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "expected argument value expression")}
         | a=args b=for_if_clauses { _PyPegen_nonparen_genexp_in_call(p, a, b) }
         | args ',' a=expression b=for_if_clauses {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, _PyPegen_get_last_comprehension_item(PyPegen_last_item(b, comprehension_ty)), "Generator expression must be parenthesized") }
         | a=args ',' args { _PyPegen_arguments_parsing_error(p, a) }
     invalid_kwarg:
         | a[Token*]=('True'|'False'|'None') b='=' {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "cannot assign to %s", PyBytes_AS_STRING(a->bytes)) }
         | a=NAME b='=' expression for_if_clauses {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "invalid syntax. Maybe you meant '==' or ':=' instead of '='?")}
         | !(NAME '=') a=expression b='=' {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(
                 a, b, "expression cannot contain assignment, perhaps you meant \"==\"?") }
         | a='**' expression '=' b=expression {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "cannot assign to keyword argument unpacking") }

     # IMPORTANT: Note that the "_without_invalid" suffix causes the rule to not call invalid rules under it
     expression_without_invalid[expr_ty]:
         | a=disjunction 'if' b=disjunction 'else' c=expression { _PyAST_IfExp(b, a, c, EXTRA) }
         | disjunction
         | lambdef
     invalid_legacy_expression:
         | a=NAME !'(' b=star_expressions {
             _PyPegen_check_legacy_stmt(p, a) ? RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b,
                 "Missing parentheses in call to '%U'. Did you mean %U(...)?", a->v.Name.id, a->v.Name.id) : NULL}

     invalid_expression:
         # !(NAME STRING) is not matched so we don't show this error with some invalid string prefixes like: kf"dsfsdf"
         # Soft keywords need to also be ignored because they can be parsed as NAME NAME
        | !(NAME STRING | SOFT_KEYWORD) a=disjunction b=expression_without_invalid {
             _PyPegen_check_legacy_stmt(p, a) ? NULL : p->tokens[p->mark-1]->level == 0 ? NULL :
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "invalid syntax. Perhaps you forgot a comma?") }
        | a=disjunction 'if' b=disjunction !('else'|':') { RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "expected 'else' after 'if' expression") }
        | a='lambda' [lambda_params] b=':' &FSTRING_MIDDLE  {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "f-string: lambda expressions are not allowed without parentheses") }

     invalid_named_expression(memo):
         | a=expression ':=' expression {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
                 a, "cannot use assignment expressions with %s", _PyPegen_get_expr_name(a)) }
         | a=NAME '=' b=bitwise_or !('='|':=') {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "invalid syntax. Maybe you meant '==' or ':=' instead of '='?") }
         | !(list|tuple|genexp|'True'|'None'|'False') a=bitwise_or b='=' bitwise_or !('='|':=') {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "cannot assign to %s here. Maybe you meant '==' instead of '='?",
                                               _PyPegen_get_expr_name(a)) }

     invalid_assignment:
         | a=invalid_ann_assign_target ':' expression {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
                 a,
                 "only single target (not %s) can be annotated",
                 _PyPegen_get_expr_name(a)
             )}
         | a=star_named_expression ',' star_named_expressions* ':' expression {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "only single target (not tuple) can be annotated") }
         | a=expression ':' expression {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "illegal target for annotation") }
         | (star_targets '=')* a=star_expressions '=' {
             RAISE_SYNTAX_ERROR_INVALID_TARGET(STAR_TARGETS, a) }
         | (star_targets '=')* a=yield_expr '=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "assignment to yield expression not possible") }
         | a=star_expressions augassign annotated_rhs {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(
                 a,
                 "'%s' is an illegal expression for augmented assignment",
                 _PyPegen_get_expr_name(a)
             )}
     invalid_ann_assign_target[expr_ty]:
         | list
         | tuple
         | '(' a=invalid_ann_assign_target ')' { a }
     invalid_del_stmt:
         | 'del' a=star_expressions {
             RAISE_SYNTAX_ERROR_INVALID_TARGET(DEL_TARGETS, a) }
     invalid_block:
         | NEWLINE !INDENT { RAISE_INDENTATION_ERROR("expected an indented block") }
     invalid_comprehension:
         | ('[' | '(' | '{') a=starred_expression for_if_clauses {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "iterable unpacking cannot be used in comprehension") }
         | ('[' | '{') a=star_named_expression ',' b=star_named_expressions for_if_clauses {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, PyPegen_last_item(b, expr_ty),
             "did you forget parentheses around the comprehension target?") }
         | ('[' | '{') a=star_named_expression b=',' for_if_clauses {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "did you forget parentheses around the comprehension target?") }
     invalid_dict_comprehension:
         | '{' a='**' bitwise_or for_if_clauses '}' {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "dict unpacking cannot be used in dict comprehension") }
     invalid_parameters:
         | a="/" ',' {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "at least one argument must precede /") }
         | (slash_no_default | slash_with_default) param_maybe_default* a='/' {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "/ may appear only once") }
         | slash_no_default? param_no_default* invalid_parameters_helper a=param_no_default {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "parameter without a default follows parameter with a default") }
         | param_no_default* a='(' param_no_default+ ','? b=')' {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "Function parameters cannot be parenthesized") }
         | (slash_no_default | slash_with_default)? param_maybe_default* '*' (',' | param_no_default) param_maybe_default* a='/' {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "/ must be ahead of *") }
         | param_maybe_default+ '/' a='*' {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expected comma between / and *") }
     invalid_default:
         | a='=' &(')'|',') { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expected default value expression") }
     invalid_star_etc:
         | a='*' (')' | ',' (')' | '**')) { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "named arguments must follow bare *") }
         | '*' ',' TYPE_COMMENT { RAISE_SYNTAX_ERROR("bare * has associated type comment") }
         | '*' param a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "var-positional argument cannot have default value") }
         | '*' (param_no_default | ',') param_maybe_default* a='*' (param_no_default | ',') {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "* argument may appear only once") }
     invalid_kwds:
         | '**' param a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "var-keyword argument cannot have default value") }
         | '**' param ',' a=param { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "arguments cannot follow var-keyword argument") }
         | '**' param ',' a[Token*]=('*'|'**'|'/') { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "arguments cannot follow var-keyword argument") }
     invalid_parameters_helper: # This is only there to avoid type errors
         | a=slash_with_default { _PyPegen_singleton_seq(p, a) }
         | param_with_default+
     invalid_lambda_parameters:
         | a="/" ',' {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "at least one argument must precede /") }
         | (lambda_slash_no_default | lambda_slash_with_default) lambda_param_maybe_default* a='/' {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "/ may appear only once") }
         | lambda_slash_no_default? lambda_param_no_default* invalid_lambda_parameters_helper a=lambda_param_no_default {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "parameter without a default follows parameter with a default") }
         | lambda_param_no_default* a='(' ','.lambda_param+ ','? b=')' {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "Lambda expression parameters cannot be parenthesized") }
         | (lambda_slash_no_default | lambda_slash_with_default)? lambda_param_maybe_default* '*' (',' | lambda_param_no_default) lambda_param_maybe_default* a='/' {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "/ must be ahead of *") }
         | lambda_param_maybe_default+ '/' a='*' {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expected comma between / and *") }
     invalid_lambda_parameters_helper:
         | a=lambda_slash_with_default { _PyPegen_singleton_seq(p, a) }
         | lambda_param_with_default+
     invalid_lambda_star_etc:
         | '*' (':' | ',' (':' | '**')) { RAISE_SYNTAX_ERROR("named arguments must follow bare *") }
         | '*' lambda_param a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "var-positional argument cannot have default value") }
         | '*' (lambda_param_no_default | ',') lambda_param_maybe_default* a='*' (lambda_param_no_default | ',') {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "* argument may appear only once") }
     invalid_lambda_kwds:
         | '**' lambda_param a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "var-keyword argument cannot have default value") }
         | '**' lambda_param ',' a=lambda_param { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "arguments cannot follow var-keyword argument") }
         | '**' lambda_param ',' a[Token*]=('*'|'**'|'/') { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "arguments cannot follow var-keyword argument") }
     invalid_double_type_comments:
         | TYPE_COMMENT NEWLINE TYPE_COMMENT NEWLINE INDENT {
             RAISE_SYNTAX_ERROR("Cannot have two type comments on def") }
     invalid_with_item:
         | expression 'as' a=expression &(',' | ')' | ':') {
             RAISE_SYNTAX_ERROR_INVALID_TARGET(STAR_TARGETS, a) }

     invalid_for_target:
         | 'async'? 'for' a=star_expressions {
             RAISE_SYNTAX_ERROR_INVALID_TARGET(FOR_TARGETS, a) }

     invalid_group:
         | '(' a=starred_expression ')' {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "cannot use starred expression here") }
         | '(' a='**' expression ')' {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "cannot use double starred expression here") }
     invalid_import:
         | a='import' ','.dotted_name+ 'from' dotted_name {
             RAISE_SYNTAX_ERROR_STARTING_FROM(a, "Did you mean to use 'from ... import ...' instead?") }
         | 'import' token=NEWLINE {
             RAISE_SYNTAX_ERROR_STARTING_FROM(token, "Expected one or more names after 'import'") }

     invalid_import_from_targets:
         | import_from_as_names ',' NEWLINE {
             RAISE_SYNTAX_ERROR("trailing comma not allowed without surrounding parentheses") }
         | token=NEWLINE {
             RAISE_SYNTAX_ERROR_STARTING_FROM(token, "Expected one or more names after 'import'") }

     invalid_with_stmt:
         | ['async'] 'with' ','.(expression ['as' star_target])+ NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") }
         | ['async'] 'with' '(' ','.(expressions ['as' star_target])+ ','? ')' NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") }
     invalid_with_stmt_indent:
         | ['async'] a='with' ','.(expression ['as' star_target])+ ':' NEWLINE !INDENT {
             RAISE_INDENTATION_ERROR("expected an indented block after 'with' statement on line %d", a->lineno) }
         | ['async'] a='with' '(' ','.(expressions ['as' star_target])+ ','? ')' ':' NEWLINE !INDENT {
             RAISE_INDENTATION_ERROR("expected an indented block after 'with' statement on line %d", a->lineno) }

     invalid_try_stmt:
         | a='try' ':' NEWLINE !INDENT {
             RAISE_INDENTATION_ERROR("expected an indented block after 'try' statement on line %d", a->lineno) }
         | 'try' ':' block !('except' | 'finally') { RAISE_SYNTAX_ERROR("expected 'except' or 'finally' block") }
         | 'try' ':' block* except_block+ a='except' b='*' expression ['as' NAME] ':' {
             RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "cannot have both 'except' and 'except*' on the same 'try'") }
         | 'try' ':' block* except_star_block+ a='except' [expression ['as' NAME]] ':' {
             RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "cannot have both 'except' and 'except*' on the same 'try'") }
     invalid_except_stmt:
         | 'except' '*'? a=expression ',' expressions ['as' NAME ] ':' {
             RAISE_SYNTAX_ERROR_STARTING_FROM(a, "multiple exception types must be parenthesized") }
         | a='except' '*'? expression ['as' NAME ] NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") }
         | a='except' NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") }
         | a='except' '*' (NEWLINE | ':') { RAISE_SYNTAX_ERROR("expected one or more exception types") }
     invalid_finally_stmt:
         | a='finally' ':' NEWLINE !INDENT {
             RAISE_INDENTATION_ERROR("expected an indented block after 'finally' statement on line %d", a->lineno) }
     invalid_except_stmt_indent:
         | a='except' expression ['as' NAME ] ':' NEWLINE !INDENT {
             RAISE_INDENTATION_ERROR("expected an indented block after 'except' statement on line %d", a->lineno) }
         | a='except' ':' NEWLINE !INDENT { RAISE_INDENTATION_ERROR("expected an indented block after 'except' statement on line %d", a->lineno) }
     invalid_except_star_stmt_indent:
         | a='except' '*' expression ['as' NAME ] ':' NEWLINE !INDENT {
             RAISE_INDENTATION_ERROR("expected an indented block after 'except*' statement on line %d", a->lineno) }
     invalid_match_stmt:
         | "match" subject_expr NEWLINE { CHECK_VERSION(void*, 10, "Pattern matching is", RAISE_SYNTAX_ERROR("expected ':'") ) }
         | a="match" subject=subject_expr ':' NEWLINE !INDENT {
             RAISE_INDENTATION_ERROR("expected an indented block after 'match' statement on line %d", a->lineno) }
     invalid_case_block:
         | "case" patterns guard? NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") }
         | a="case" patterns guard? ':' NEWLINE !INDENT {
             RAISE_INDENTATION_ERROR("expected an indented block after 'case' statement on line %d", a->lineno) }
     invalid_as_pattern:
         | or_pattern 'as' a="_" { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "cannot use '_' as a target") }
         | or_pattern 'as' !NAME a=expression { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "invalid pattern target") }
     invalid_class_pattern:
         | name_or_attr '(' a=invalid_class_argument_pattern  { RAISE_SYNTAX_ERROR_KNOWN_RANGE(
             PyPegen_first_item(a, pattern_ty),
             PyPegen_last_item(a, pattern_ty),
             "positional patterns follow keyword patterns") }
     invalid_class_argument_pattern[asdl_pattern_seq*]:
         | [positional_patterns ','] keyword_patterns ',' a=positional_patterns { a }
     invalid_if_stmt:
         | 'if' named_expression NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") }
         | a='if' a=named_expression ':' NEWLINE !INDENT {
             RAISE_INDENTATION_ERROR("expected an indented block after 'if' statement on line %d", a->lineno) }
     invalid_elif_stmt:
         | 'elif' named_expression NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") }
         | a='elif' named_expression ':' NEWLINE !INDENT {
             RAISE_INDENTATION_ERROR("expected an indented block after 'elif' statement on line %d", a->lineno) }
     invalid_else_stmt:
         | a='else' ':' NEWLINE !INDENT {
             RAISE_INDENTATION_ERROR("expected an indented block after 'else' statement on line %d", a->lineno) }
     invalid_while_stmt:
         | 'while' named_expression NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") }
         | a='while' named_expression ':' NEWLINE !INDENT {
             RAISE_INDENTATION_ERROR("expected an indented block after 'while' statement on line %d", a->lineno) }
     invalid_for_stmt:
         | ['async'] 'for' star_targets 'in' star_expressions NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") }
         | ['async'] a='for' star_targets 'in' star_expressions ':' NEWLINE !INDENT {
             RAISE_INDENTATION_ERROR("expected an indented block after 'for' statement on line %d", a->lineno) }
     invalid_def_raw:
         | ['async'] a='def' NAME [type_params] '(' [params] ')' ['->' expression] ':' NEWLINE !INDENT {
             RAISE_INDENTATION_ERROR("expected an indented block after function definition on line %d", a->lineno) }
         | ['async'] 'def' NAME [type_params] &&'(' [params] ')' ['->' expression] &&':' [func_type_comment] block
     invalid_class_def_raw:
         | 'class' NAME [type_params] ['(' [arguments] ')'] NEWLINE { RAISE_SYNTAX_ERROR("expected ':'") }
         | a='class' NAME [type_params] ['(' [arguments] ')'] ':' NEWLINE !INDENT {
             RAISE_INDENTATION_ERROR("expected an indented block after class definition on line %d", a->lineno) }

     invalid_double_starred_kvpairs:
         | ','.double_starred_kvpair+ ',' invalid_kvpair
         | expression ':' a='*' bitwise_or { RAISE_SYNTAX_ERROR_STARTING_FROM(a, "cannot use a starred expression in a dictionary value") }
         | expression a=':' &('}'|',') { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expression expected after dictionary key and ':'") }
     invalid_kvpair:
         | a=expression !(':') {
             RAISE_ERROR_KNOWN_LOCATION(p, PyExc_SyntaxError, a->lineno, a->end_col_offset - 1, a->end_lineno, -1, "':' expected after dictionary key") }
         | expression ':' a='*' bitwise_or { RAISE_SYNTAX_ERROR_STARTING_FROM(a, "cannot use a starred expression in a dictionary value") }
         | expression a=':' &('}'|',') {RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "expression expected after dictionary key and ':'") }
     invalid_starred_expression:
         | a='*' expression '=' b=expression { RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "cannot assign to iterable argument unpacking") }

     invalid_replacement_field:
         | '{' a='=' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "f-string: valid expression required before '='") }
         | '{' a='!' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "f-string: valid expression required before '!'") }
         | '{' a=':' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "f-string: valid expression required before ':'") }
         | '{' a='}' { RAISE_SYNTAX_ERROR_KNOWN_LOCATION(a, "f-string: valid expression required before '}'") }
         | '{' !annotated_rhs { RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("f-string: expecting a valid expression after '{'")}
         | '{' annotated_rhs !('=' | '!' | ':' | '}') {
             PyErr_Occurred() ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("f-string: expecting '=', or '!', or ':', or '}'") }
         | '{' annotated_rhs '=' !('!' | ':' | '}') {
             PyErr_Occurred() ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("f-string: expecting '!', or ':', or '}'") }
         | '{' annotated_rhs '='? invalid_conversion_character
         | '{' annotated_rhs '='? ['!' NAME] !(':' | '}') {
             PyErr_Occurred() ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("f-string: expecting ':' or '}'") }
         | '{' annotated_rhs '='? ['!' NAME] ':' fstring_format_spec* !'}' {
             PyErr_Occurred() ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("f-string: expecting '}', or format specs") }
         | '{' annotated_rhs '='? ['!' NAME] !'}' {
             PyErr_Occurred() ? NULL : RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("f-string: expecting '}'") }

     invalid_conversion_character:
         | '!' &(':' | '}') { RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("f-string: missing conversion character") }
         | '!' !NAME { RAISE_SYNTAX_ERROR_ON_NEXT_TOKEN("f-string: invalid conversion character") }

     invalid_arithmetic:
         | sum ('+'|'-'|'*'|'/'|'%'|'//'|'@') a='not' b=inversion { RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "'not' after an operator must be parenthesized") }
     invalid_factor:
         | ('+' | '-' | '~') a='not' b=factor { RAISE_SYNTAX_ERROR_KNOWN_RANGE(a, b, "'not' after an operator must be parenthesized") }

     invalid_type_params:
         | '[' token=']' {
             RAISE_SYNTAX_ERROR_STARTING_FROM(
                 token,
                 "Type parameter list cannot be empty")}

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Grammar/python.gram

   (2) https://pt.wikipedia.org/wiki/Formalismo_de_Backus-Naur_Estendido

   (3) 
https://pt.wikipedia.org/wiki/Gramática_de_análise_sintática_de_expressão

   (4) https://en.wikipedia.org/wiki/Parsing_expression_grammar

   (5) https://peps.python.org/pep-0617/


File: python.info,  Node: A Biblioteca Padrão do Python,  Next: Estendendo e incorporando o interpretador Python,  Prev: A Referência da Linguagem Python,  Up: Top

5 A Biblioteca Padrão do Python
*******************************

Enquanto *note A Referência da Linguagem Python: 145. descreve a sintaxe
e a semântica exatas da linguagem Python, este manual de referência de
bibliotecas descreve a biblioteca padrão que é distribuída com o Python.
Ele também descreve alguns dos componentes opcionais que são comumente
incluídos nas distribuições do Python.

A biblioteca padrão do Python é muito extensa, oferecendo uma ampla gama
de recursos, conforme indicado pelo longo índice listado abaixo.  A
biblioteca contém módulos embutidos (escritos em C) que fornecem acesso
à funcionalidade do sistema, como E/S de arquivos que de outra forma
seriam inacessíveis para programadores Python, bem como módulos escritos
em Python que fornecem soluções padronizadas para muitos problemas que
ocorrem em programação cotidiana.  Alguns desses módulos são
explicitamente projetados para incentivar e aprimorar a portabilidade de
programas em Python, abstraindo os detalhes da plataforma em APIs
neutras em plataforma.

Os instaladores do Python para a plataforma Windows geralmente incluem
toda a biblioteca padrão e muitas vezes também incluem muitos
componentes adicionais.  Para sistemas operacionais semelhantes a Unix,
o Python é normalmente fornecido como uma coleção de pacotes, portanto,
pode ser necessário usar as ferramentas de empacotamento fornecidas com
o sistema operacional para obter alguns ou todos os componentes
opcionais.

Além da biblioteca padrão, há uma coleção ativa de centenas de milhares
de componentes (de programas e módulos individuais a pacotes e
frameworks de desenvolvimento de aplicativos inteiros), disponíveis no
Python Package Index(1).

* Menu:

* Introdução: Introdução<6>.
* Funções embutidas: Funções embutidas<3>.
* Constantes embutidas::
* Tipos embutidos::
* Exceções embutidas::
* Serviços de Processamento de Texto::
* Serviços de Dados Binários::
* Tipos de Dados::
* Módulos Matemáticos e Numéricos::
* Módulos de Programação Funcional::
* Acesso a arquivos e diretórios::
* Persistência de Dados::
* Compressão de Dados e Arquivamento::
* Formatos de Arquivo::
* Serviços Criptográficos::
* Serviços Genéricos do Sistema Operacional::
* Bibliotecas de interface de linha de comando::
* Execução Concorrente::
* Comunicação em Rede e Interprocesso::
* Manuseio de Dados na Internet::
* Ferramentas de Processamento de Markup Estruturado::
* Protocolos de Internet e Suporte::
* Serviços Multimídia::
* Internacionalização::
* Interfaces gráficas de usuário com Tk::
* Ferramentas de Desenvolvimento::
* Depuração e perfilamento::
* Empacotamento e Distribuição de Software::
* Serviços de Tempo de Execução Python::
* Interpretadores Python Personalizados::
* Importando módulos::
* Serviços da Linguagem Python::
* Serviços Específicos do MS Windows::
* Serviços específicos do Unix::
* Interface de linha de comando (CLI) de módulos: Interface de linha de comando CLI de módulos.
* Módulos substituídos::
* Módulos removidos::
* Considerações de Segurança: Considerações de Segurança<3>.

   ---------- Footnotes ----------

   (1) https://pypi.org


File: python.info,  Node: Introdução<6>,  Next: Funções embutidas<3>,  Up: A Biblioteca Padrão do Python

5.1 Introdução
==============

A “biblioteca Python” contém vários tipos diferentes de componentes.

Ela contém tipos de dados que seriam normalmente considerados como parte
“central” de uma linguagem, tais como números e listas.  Para esses
tipos, o núcleo da linguagem Python define a forma de literais e coloca
algumas restrições em suas semânticas, mas não define completamente as
semânticas.  (Por outro lado, o núcleo da linguagem define propriedades
sintáticas como a ortografia e a prioridade de operadores.)

A biblioteca também contém exceções e funções embutidas — objetos que
podem ser usados por todo o código Python sem a necessidade de uma
instrução *note import: 5e2.  Alguns desses são definidos pelo núcleo da
linguagem, mas muitos não são essenciais para as semânticas principais e
são apenas descritos aqui.

A maior parte da biblioteca, entretanto, consiste em uma coleção de
módulos.  Há muitas formas de dissecar essa coleção.  Alguns módulos são
escritos em C e colocados no interpretador do Python; outros são
escritos em Python e importados na forma de código.  Alguns módulos
fornecem interfaces que são muito específicas do Python, como imprimir
um stack trace (situação da pilha de execução); alguns fornecem
interfaces que são específicas para um sistema operacional em
particular, tais como acessar hardware específico; outros fornecem
interfaces que são específicas de um domínio de aplicação em particular,
como a World Wide Web.  Alguns módulos estão disponíveis em todas as
versões do Python; outros estão apenas disponíveis quando o sistema
subjacente suporta ou necessita deles; e ainda outros estão disponíveis
apenas quando uma opção de configuração em particular foi escolhida no
momento em que o Python foi compilado e instalado.

Este manual está organizado “de dentro para fora”: ele primeiro descreve
as funções embutidas, tipos de dados e exceções, e finalmente os
módulos, agrupados em capítulos de módulos relacionados.

Isto significa que, se você começar a ler este manual do início, e pular
para o próximo capítulo quando estiver entediado, você terá uma visão
geral razoável dos módulos disponíveis e áreas de aplicação que são
suportadas pela biblioteca Python.  É claro, você não 'tem' que ler como
se fosse um romance — você também pode navegar pela tabela de conteúdos
(no início do manual), ou procurar por uma função, módulo ou termo
específicos no índice (na parte final).  E finalmente, se você gostar de
aprender sobre assuntos diversos, você pode escolher um número de página
aleatório (veja o módulo *note random: b8.) e leia uma seção ou duas.
Independente da ordem na qual você leia as seções deste manual, ajuda
iniciar pelo capítulo *note Funções embutidas: 129e, já que o resto do
manual requer familiaridade com este material.

E que o show comece!

* Menu:

* Observações sobre disponibilidade::


File: python.info,  Node: Observações sobre disponibilidade,  Up: Introdução<6>

5.1.1 Observações sobre disponibilidade
---------------------------------------

   * Uma observação “Disponibilidade: Unix” significa que essa função é
     comumente encontrada em sistemas Unix.  Não faz nenhuma
     reivindicação sobre sua existência em um sistema operacional
     específico.

   * Caso não seja definido separadamente, todas as funções que se
     definem como “Disponibilidade: Unix” são suportadas no macOS, IOS e
     Android, todas construídas em um Unix core.

   * Se uma nota de disponibilidade contiver uma versão mínima do Kernel
     e uma versão mínima da libc, ambas as condições deverão ser
     atendidas.  Por exemplo, um recurso com a observação
     'Disponibilidade: Linux >= 3.17 com glibc >= 2.27' requer Linux
     3.17 ou mais recente e glibc 2.27 ou mais recente.

* Menu:

* Plataformas WebAssembly::
* Plataformas móveis::


File: python.info,  Node: Plataformas WebAssembly,  Next: Plataformas móveis,  Up: Observações sobre disponibilidade

5.1.1.1 Plataformas WebAssembly
...............................

As plataformas WebAssembly(1) ‘wasm32-emscripten’ (Emscripten(2)) e
‘wasm32-wasi’ (WASI(3)) fornecem um subconjunto de APIs POSIX. Os tempos
de execução e navegadores do WebAssembly são colocados em área restrita
e têm acesso limitado ao host e aos recursos externos.  Qualquer módulo
de biblioteca padrão do Python que usa processos, encadeamento, rede,
sinais ou outras formas de comunicação entre processos (IPC) não está
disponível ou pode não funcionar como em outros sistemas semelhantes ao
Unix.  E/S de arquivo, sistema de arquivos e funções relacionadas à
permissão do Unix também são restritas.  Emscripten não permite bloqueio
de E/S. Outras operações de bloqueio como *note sleep(): 69d. bloqueiam
o laço de eventos do navegador.

As propriedades e o comportamento do Python em plataformas WebAssembly
dependem da versão Emscripten(4)-SDK ou WASI(5)-SDK, tempos de execução
WASM (navegador, NodeJS, wasmtime(6)) e sinalizadores de tempo de
construção do Python.  WebAssembly, Emscripten e WASI são padrões em
evolução; alguns recursos como rede podem ser suportados no futuro.

Para Python no navegador, os usuários devem considerar Pyodide(7) ou
PyScript(8).  O PyScript é construído sobre o Pyodide, que por sua vez é
construído sobre o CPython e o Emscripten.  O Pyodide fornece acesso às
APIs JavaScript e DOM dos navegadores, bem como recursos de rede
limitados com as APIs ‘XMLHttpRequest’ e ‘Fetch’ do JavaScript.

   * As APIs relacionadas a processo não estão disponíveis ou sempre
     falham com um erro.  Isso inclui APIs que geram novos processos
     (*note fork(): 197, *note execve(): 1138.), aguardam processos
     (*note waitpid(): dc2.), enviam sinais (*note kill(): 13ae.), ou
     interagir com processos.  O *note subprocess: d6. é importável, mas
     não funciona.

   * O módulo *note socket: cc. está disponível, mas é limitado e se
     comporta de maneira diferente de outras plataformas.  No
     Emscripten, os soquetes são sempre não bloqueantes e requerem
     código JavaScript adicional e auxiliares no servidor para
     intermediar TCP por meio de WebSockets; veja Emscripten
     Networking(9) para mais informações.  A primeira snapshot de
     preview do WASI permite apenas soquetes de um descritor de arquivo
     existente.

   * Algumas funções são esboço que não fazem nada e sempre retornam
     valores definidos no código.

   * As funções relacionadas a descritores de arquivo, permissões de
     arquivo, propriedade de arquivo e links são limitadas e não
     suportam algumas operações.  Por exemplo, WASI não permite links
     simbólicos com nomes de arquivo absolutos.

   ---------- Footnotes ----------

   (1) https://webassembly.org/

   (2) https://emscripten.org/

   (3) https://wasi.dev/

   (4) https://emscripten.org/

   (5) https://wasi.dev/

   (6) https://wasmtime.dev/

   (7) https://pyodide.org/

   (8) https://pyscript.net/

   (9) https://emscripten.org/docs/porting/networking.html


File: python.info,  Node: Plataformas móveis,  Prev: Plataformas WebAssembly,  Up: Observações sobre disponibilidade

5.1.1.2 Plataformas móveis
..........................

O Android e o IOS são em linhas gerais sistemas operacionais POSIX. File
I/O, socket handling, e threading se comportam como em qualquer sistema
operacional POSIX. Entretanto, existem diversas diferenças:

   * Plataformas móveis podem usar o Python apenas no modo
     “incorporado”.  Não existe um Python REPL, e não existe
     possibilidade para usar executáveis em separado como ‘python’ ou
     ‘pip’.  Para adicionar código Python para seu aplicativo móvel,
     você deve usar a *note API de incorporação do Python: 1fdd.  Para
     maiores detalhes veja *note Utilizando Python no Android: 1fdb. e
     *note Usando Python no iOS: 1fe3.

   * Subprocessos:

        * No Android, criar subprocessos é possível mas oficialmente sem
          suporte(1).  Em particular, Android não oferece suporte para
          nenhuma parte da API System V IPC, assim *note
          multiprocessing: 94. não está disponível.

        * Uma aplicação de iOS não pode usar qualquer forma de
          subprocessamento, multiprocessamento ou comunicação entre
          processos.  Se uma aplicação de iOS tentar criar um
          subprocesso, o processo que cria o subprocesso será travado ou
          encerrado abruptamente.  Uma aplicação de iOS não tem
          visibilidade de outras aplicações em execução, nem capacidade
          de comunicação com outras aplicações em execução, fora das
          APIs específicas do iOS que existem para essa finalidade.

   * Aplicativos móveis possuem acesso limitado a recursos do sistema
     (como o relógio do sistema).  Esses recursos serão em sua maioria
     apenas 'leitura', e tentativas de modificar esses recusos
     geralmente falhará.

   * Entrada e saída do console:

        * No Android, o ‘stdout’ e o ‘stderr’ nativos não estão
          conectados a nada, então o Python instala seus próprios fluxos
          que redirecionam mensagens para o log do sistema.  Esses podem
          ser vistos sob a tags ‘python.stdout’ e ‘python.stderr’,
          respectivamente.

        * As aplicações de iOS têm um conceito limitado de saída do
          console.  ‘stdout’ e ‘stderr’ 'existem', e o conteúdo escrito
          em ‘stdout’ e ‘stderr’ será visível nos registros (logs)
          quando executado no Xcode, mas este conteúdo 'não' será
          gravado no registro do sistema.  Se um usuário que instalou
          sua aplicação fornecer os registros da aplicação como ajuda de
          diagnóstico, eles não incluirão nenhum detalhe escrito em
          ‘stdout’ ou ‘stderr’.

        * As aplicações para dispositivos móveis não têm nenhum conceito
          de ‘stdin’.  Embora essas aplicações possam exibir um teclado
          na tele, este é um recurso de software, não algo anexado ao
          ‘stdin’.

          Como consequência, módulos Python que envolvem manipulação de
          console (como *note curses: 2b. e *note readline: ba.) não
          estão disponíveis em plataformas móveis.

   ---------- Footnotes ----------

   (1) https://issuetracker.google.com/issues/128554619#comment4


File: python.info,  Node: Funções embutidas<3>,  Next: Constantes embutidas,  Prev: Introdução<6>,  Up: A Biblioteca Padrão do Python

5.2 Funções embutidas
=====================

O interpretador do Python possui várias funções e tipos embutidos que
sempre estão disponíveis.  A seguir listamos todas as funções em ordem
alfabética.

Funções embutidas

--------------------------------------------------------------------------------------------------------------------
                                                                                      
     'A'                           'E'                         'L'                         'R'
     *note abs(): 1e2d.            *note enumerate(): 14c9.     *note len(): 62e.          *note range(): 22f1.
     *note aiter(): 7d6.           *note eval(): 180.          *note list(): 22ef.         *note repr(): 800.
     *note all(): 1469.            *note exec(): 17f.          *note locals(): 141.        *note reversed(): 869.
     *note anext(): 7d7.                                                                   *note round(): 131d.
     *note any(): 1468.            'F'                         'M'                         
     *note ascii(): 142d.          *note filter(): 868.        *note map(): 867.           'S'
                                   *note float(): 2f7.         *note max(): f3b.           *note set(): 22f2.
     'B'                           *note format(): 61f.        *note memoryview(): 22f0.     *note setattr(): 22f3.
     *note bin(): 12eb.            *note frozenset(): 22ee.     *note min(): f3a.          *note slice(): 469.
     *note bool(): 468.                                                                    *note sorted(): be7.
     *note breakpoint(): 234.      'G'                         'N'                         *note staticmethod(): 416.
     *note bytearray(): 1c34.      *note getattr(): bea.       *note next(): 7d9.          *note str(): 22f4.
     *note bytes(): 1c33.          *note globals(): 1993.                                  *note sum(): 46a.
                                                               'O'                         *note super(): 4db.
     'C'                           'H'                         *note object(): a96.        
     *note callable(): 1206.       *note hasattr(): 4d2.       *note oct(): 1311.          'T'
     *note chr(): 1768.            *note hash(): 5eb.          *note open(): 51c.          *note tuple(): 22f5.
     *note classmethod(): 166.     *note help(): 8dd.          *note ord(): 2080.          *note type(): d6b.
     *note compile(): 192.         *note hex(): 1312.                                      
     *note complex(): 2f8.                                     'P'                         'V'
                                   'I'                         *note pow(): 9da.           *note vars(): 1bba.
     'D'                           *note id(): 146a.           *note print(): fa9.         
     *note delattr(): 22ec.        *note input(): 131b.        *note property(): 194.      'Z'
     *note dict(): 22ed.           *note int(): 257.                                       *note zip(): 7d1.
     *note dir(): 632.             *note isinstance(): 442.                                
     *note divmod(): 9a9.          *note issubclass(): 7c2.                                '_'
                                   *note iter(): 7d8.                                      *note __import__(): 8da.
                                                                                      

 -- Função: abs (number, /)

     Retorna o valor absoluto de um número.  O argumento pode ser um
     inteiro, um número de ponto flutuante ou um objeto implementando
     *note __abs__(): 2146.  Se o argumento é um número complexo, sua
     magnitude é retornada.

 -- Função: aiter (async_iterable, /)

     Retorna um *note iterador assíncrono: 1ab. para um *note iterável
     assíncrono: d9c.  Equivalente a chamar ‘x.__aiter__()’.

     Nota: Ao contrário de *note iter(): 7d8, *note aiter(): 7d6. não
     tem uma variante de 2 argumentos.

     Adicionado na versão 3.10.

 -- Função: all (iterable, /)

     Retorna ‘True’ se todos os elementos de 'iterable' são verdadeiros
     (ou se 'iterable' estiver vazio).  Equivalente a:

          def all(iterable):
              for elemento in iterable:
                  if not elemento:
                      return False
              return True

 -- Função: awaitable anext (async_iterator, /)

 -- Função: awaitable anext (async_iterator, default, /)

     Quando aguardado, retorna o próximo item do *note iterador
     assíncrono: 1ab. fornecido, ou 'default' se fornecido e o iterador
     for esgotado.

     Esta é a variante assíncrona do *note next(): 7d9. embutido, e se
     comporta de forma semelhante.

     Isso chama o método *note __anext__(): 1659. de 'async_iterator',
     retornando um *note aguardável: 1ad.  Ao aguardar isso, retorna o
     próximo valor do iterador.  Se 'default' for fornecido, ele será
     retornado se o iterador for esgotado, caso contrário, a exceção
     *note StopAsyncIteration: 1ba5. será levantada.

     Adicionado na versão 3.10.

 -- Função: any (iterable, /)

     Retorna ‘True’ se algum elemento de 'iterable' for verdadeiro.  Se
     'iterable' estiver vazio, retorna ‘False’.  Equivalente a:

          def any(iterable):
              for elemento in iterable:
                  if elemento:
                      return True
              return False

 -- Função: ascii (object, /)

     Como *note repr(): 800, retorna uma string contendo uma
     representação imprimível de um objeto, mas faz escape de caracteres
     não-ASCII na string retornada por *note repr(): 800. usando
     sequências de escapes ‘\x’, ‘\u’ ou ‘\U’.  Isto gera uma string
     similar ao que é retornado por *note repr(): 800. no Python 2.

 -- Função: bin (integer, /)

     Converte um número inteiro para uma string de binários prefixada
     com “0b”.  O resultado é uma expressão Python válida.  Se 'integer'
     não é um objeto Python *note int: 257, ele tem que definir um
     método *note __index__(): 71d. que devolve um inteiro.  Alguns
     exemplos:

          >>> bin(3)
          '0b11'
          >>> bin(-10)
          '-0b1010'

     Se o prefixo “0b” é desejado ou não, você pode usar uma das
     seguintes maneiras.

          >>> format(14, '#b'), format(14, 'b')
          ('0b1110', '1110')
          >>> f'{14:#b}', f'{14:b}'
          ('0b1110', '1110')

     Veja também *note format(): 61f. para mais informações.

 -- Classe: bool (object=False, /)

     Retorna um valor Booleano, isto é, ‘True’ ou ‘False’.  O argumento
     é convertido usando o *note procedimento de teste de verdade: 162d.
     padrão.  Se o argumento for falso ou foi omitido, isso retorna
     ‘False’; senão ‘True’.  A classe *note bool: 468. é uma subclasse
     de *note int: 257. (veja *note Tipos numéricos — int, float,
     complex: 1d75.).  Ela não pode ser usada para criar outra
     subclasse.  Suas únicas instâncias são ‘False’ e ‘True’ (veja *note
     Tipo booleano - bool: 22f6.).

     Alterado na versão 3.7: O parâmetro agora é somente-posicional

 -- Função: breakpoint (*args, **kws)

     Esta função coloca você no depurador no local da chamada.
     Especificamente, ela chama *note sys.breakpointhook(): aea,
     passando ‘args’ e ‘kws’ diretamente.  Por padrão,
     ‘sys.breakpointhook()’ chama *note pdb.set_trace(): 235. não
     esperando nenhum argumento.  Neste caso, isso é puramente uma
     função de conveniência para você não precisar importar *note pdb:
     a5. explicitamente ou digitar mais código para entrar no depurador.
     Contudo, *note sys.breakpointhook(): aea. pode ser configurado para
     alguma outra função e *note breakpoint(): 234. irá automaticamente
     chamá-la, permitindo você ir para o depurador de sua escolha.  Se
     *note sys.breakpointhook(): aea. não estiver acessível, esta função
     vai levantar *note RuntimeError: 195.

     Por padrão, o comportamento de *note breakpoint(): 234. pode ser
     alterado com a variável de ambiente *note PYTHONBREAKPOINT: aeb.
     Veja *note sys.breakpointhook(): aea. para detalhes de uso.

     Observe que isso não é garantido se *note sys.breakpointhook():
     aea. tiver sido substituído.

     Levanta um *note evento de auditoria: 19fa. ‘builtins.breakpoint’
     com o argumento ‘breakpointhook’.

     Adicionado na versão 3.7.

 -- Classe: bytearray (source=b'')

 -- Classe: bytearray (source, encoding, errors='strict')

     Retorna um novo vetor de bytes.  A classe *note bytearray: 2ea. é
     uma sequência mutável de inteiros no intervalo 0 <= x < 256.  Ela
     tem a maior parte dos métodos mais comuns de sequências mutáveis,
     descritas em *note Tipos sequências mutáveis: 22f7, assim como a
     maior parte dos métodos que o tipo *note bytes: 1c2. tem, veja
     *note Operações com Bytes e Bytearray: 22f8.

     O parâmetro opcional 'source' pode ser usado para inicializar o
     vetor de algumas maneiras diferentes:

        * Se é uma 'string', você deve informar o parâmetro 'encoding'
          (e opcionalmente, 'errors'); *note bytearray(): 2ea. então
          converte a string para bytes usando *note str.encode(): 8db.

        * Se é um 'inteiro', o vetor terá esse tamanho e será
          inicializado com bytes nulos.

        * Se é um objeto em conformidade com a *note interface de
          buffer: 2e8, um buffer somente leitura do objeto será usado
          para inicializar o vetor de bytes.

        * Se é um 'iterável', deve ser um iterável de inteiros no
          intervalo ‘0 <= x < 256’, que serão usados como o conteúdo
          inicial do vetor.

     Sem nenhum argumento, um vetor de tamanho 0 é criado.

     Veja também *note Tipos de sequência binária — bytes, bytearray,
     memoryview: 22f9. e *note Objetos Bytearray: 22fa.

 -- Classe: bytes (source=b'')

 -- Classe: bytes (source, encoding, errors='strict')

     Retorna um novo objeto “bytes” que é uma sequência imutável de
     inteiros no intervalo ‘0 <= x < 256’.  *note bytes: 1c2. é uma
     versão imutável de *note bytearray: 2ea. – tem os mesmos métodos de
     objetos imutáveis e o mesmo comportamento de índices e fatiamento.

     Consequentemente, argumentos do construtor são interpretados como
     os de *note bytearray(): 2ea.

     Objetos bytes também podem ser criados com literais, veja *note
     Literais de string e bytes: 2031.

     Veja também *note Tipos de sequência binária — bytes, bytearray,
     memoryview: 22f9, *note Objetos bytes: 22fb, e *note Operações com
     Bytes e Bytearray: 22f8.

 -- Função: callable (object, /)

     Retorna *note True: c27. se o argumento 'object' parece ser
     chamável, *note False: b49. caso contrário.  Se retorna ‘True’,
     ainda é possível que a chamada falhe, mas se é ‘False’, chamar
     'object' nunca será bem sucedido.  Note que classes são chamáveis
     (chamar uma classe devolve uma nova instância); instâncias são
     chamáveis se suas classes possuem um método *note __call__(): 558.

     Adicionado na versão 3.2: Esta função foi removida na versão 3.0,
     mas retornou no Python 3.2.

 -- Função: chr (codepoint, /)

     Retorna a string representando um caractere com o ponto de código
     Unicode especificado.  Por exemplo, ‘chr(97)’ retorna a string
     ‘'a'’, enquanto ‘chr(8364)’ retorna a string ‘'€'’.  É o inverso de
     *note ord(): 2080.

     O intervalo válido para o argumento vai de 0 até 1.114.111
     (0x10FFFF na base 16).  Será lançada uma exceção *note ValueError:
     202. se ele estiver fora desse intervalo.

 -- Função: @classmethod

     Transforma um método em um método de classe.

     Um método de classe recebe a classe como um primeiro argumento
     implícito, exatamente como um método de instância recebe a
     instância.  Para declarar um método de classe, faça dessa forma:

          class C:
              @classmethod
              def f(cls, arg1, arg2): ...

     O termo ‘@classmethod’ é uma função *note decoradora: 731. – veja
     *note Definições de função: 1db6. para detalhes.

     Um método de classe pode ser chamado tanto da classe (como em
     ‘C.f()’) quanto da instância (como em ‘C().f()’).  A instância é
     ignorada, exceto por sua classe.  Se um método de classe é chamado
     por uma classe derivada, o objeto da classe derivada é passado como
     primeiro argumento implícito.

     Métodos de classe são diferentes de métodos estáticos em C++ ou
     Java.  Se você quer saber desses, veja *note staticmethod(): 416.
     nesta seção.  Para mais informações sobre métodos de classe,
     consulte *note A hierarquia de tipos padrão: 2075.

     Alterado na versão 3.9: Métodos de classe agora podem envolver
     outros *note descritores: 1658. tal como *note property(): 194.

     Alterado na versão 3.10: Métodos de classe agora herdam os
     atributos do método (*note __module__: 208e, *note __name__: 1317,
     *note __qualname__: 208d, *note __doc__: 1219. e *note
     __annotations__: 1218.) e têm um novo atributo ‘__wrapped__’.

     Descontinuado desde a versão 3.11, removido na versão 3.13: Métodos
     de classe não podem mais envolver outros *note descritores: 1658.
     tal como *note property(): 194.

 -- Função: compile (source, filename, mode, flags=0,
          dont_inherit=False, optimize=-1)

     Compila o argumento 'source' em código ou objeto AST. Objetos
     código podem ser executados por *note exec(): 17f. ou *note eval():
     180.  'source' pode ser uma string normal, uma string byte, ou um
     objeto AST. Consulte a documentação do módulo *note ast: 8. para
     saber como trabalhar com objetos AST.

     O argumento 'filename' deve ser o arquivo de onde o código será
     lido; passe algum valor reconhecível se isso não foi lido de um
     arquivo (‘'<string>'’ é comumente usado).

     O argumento 'mode' especifica qual o tipo de código deve ser
     compilado; pode ser ‘'exec'’ se 'source' consiste em uma sequência
     de instruções, ‘'eval'’ se consiste de uma única expressão, ou
     ‘'single'’ se consiste de uma única instrução interativa (neste
     último caso, instruções que são avaliadas para alguma coisa
     diferente de ‘None’ serão exibidas).

     Os argumentos opcionais 'flags' e 'dont_inherit' controlam quais
     *note opções do compilador: 22fc. devem ser ativadas e quais *note
     recursos futuros: 189. devem ser permitidos.  Se nenhum estiver
     presente (ou ambos forem zero), o código é compilado com os mesmos
     sinalizadores que afetam o código que está chamando *note
     compile(): 192.  Se o argumento 'flags' for fornecido e
     'dont_inherit' não for (ou for zero), as opções do compilador e as
     instruções futuras especificadas pelo argumento 'flags' são usadas
     além daquelas que seriam usadas de qualquer maneira.  Se
     'dont_inherit' for um inteiro diferente de zero, então o argumento
     'flags' é – os sinalizadores (recursos futuros e opções do
     compilador) no código circundante são ignorados.

     Opções de compilador e instruções futuras são especificadas por
     bits, assim pode ocorrer uma operação 'OU' bit a bit para
     especificar múltiplas instruções.  O sinalizador necessário para
     especificar um dado recurso futuro pode ser encontrado no atributo
     *note compiler_flag: 20d8. na instância *note _Feature: 22fd. do
     módulo *note __future__: 0.  *note Sinalizadores de compilador:
     22fc. podem ser encontrados no módulo *note ast: 8, com o prefixo
     ‘PyCF_’.

     O argumento 'optimize' especifica o nível de otimização do
     compilador; o valor padrão de ‘-1’ seleciona o nível de otimização
     do interpretador dado pela opção *note -O: ddd.  Níveis explícitos
     são ‘0’ (nenhuma otimização; ‘__debug__’ é verdadeiro), ‘1’
     (instruções ‘assert’ são removidas, ‘__debug__’ é falso) ou ‘2’
     (strings de documentação também são removidas).

     Essa função levanta *note SyntaxError: 18d. ou *note ValueError:
     202. se a fonte compilada for inválida.

     Se você quer analisar código Python em sua representação AST, veja
     *note ast.parse(): 1a8.

     Levanta um *note evento de auditoria: 19fa. ‘compile’ com os
     argumentos ‘source’, ‘filename’.  Esse evento pode também ser
     levantando por uma compilação implícita.

          Nota: Quando compilando uma string com código multi-linhas em
          modo ‘'single'’ ou ‘'eval'’, entrada deve ser terminada por ao
          menos um caractere de nova linhas.  Isso é para facilitar a
          detecção de instruções completas e incompletas no módulo *note
          code: 1a.

          Aviso: É possível quebrar o interpretador Python com uma
          string suficientemente grande/complexa ao compilar para um
          objeto AST, devido limitações do tamanho da pilha no
          compilador AST do Python.

     Alterado na versão 3.2: Permitido o uso de marcadores de novas
     linhas no estilo Windows e Mac.  Além disso, em modo ‘'exec'’ a
     entrada não precisa mais terminar com uma nova linha.  Também foi
     adicionado o parâmetro 'optimize'.

     Alterado na versão 3.5: Anteriormente, *note TypeError: 2c3. era
     levantada quando havia bytes nulos em 'source'.

     Adicionado na versão 3.8: ‘ast.PyCF_ALLOW_TOP_LEVEL_AWAIT’ agora
     pode ser passado em 'flags' para habilitar o suporte em nível
     superior a ‘await’, ‘async for’, e ‘async with’.

 -- Classe: complex (number=0, /)

 -- Classe: complex (string, /)

 -- Classe: complex (real=0, imag=0)

     Converte uma única string ou número para um número complexo, ou
     cria um número complexo a partir de partes real e imaginária.

     Exemplos:

          >>> complex('+1.23')
          (1.23+0j)
          >>> complex('-4.5j')
          -4.5j
          >>> complex('-1.23+4.5j')
          (-1.23+4.5j)
          >>> complex('\t( -1.23+4.5J )\n')
          (-1.23+4.5j)
          >>> complex('-Infinity+NaNj')
          (-inf+nanj)
          >>> complex(1.23)
          (1.23+0j)
          >>> complex(imag=-4.5)
          -4.5j
          >>> complex(-1.23, 4.5)
          (-1.23+4.5j)

     Se o argumento for uma string, ele deve conter ou a parte real (com
     o mesmo formato usado em *note float(): 2f7.) ou uma parte
     imaginária (com o mesmo formato, mas com um sufixo ‘'j'’ ou ‘'J'’),
     ou então ambas as partes real e imaginária (caso no qual o sinal da
     parte imaginária é obrigatório).  A string pode opcionalmente ser
     cercada por espaços em branco e parênteses ‘'('’ e ‘')'’, que são
     ignorados.  A string não deve conter espaços em branco entre os
     símbolos ‘'+'’, ‘'-'’, o sufixo ‘'j'’ ou ‘'J'’, e o número decimal.
     Por exemplo, ‘complex('1+2j')’ é ok, mas ‘complex('1 + 2j')’
     levanta *note ValueError: 202.  Mais precisamente, após descartar
     os parênteses e os espaços em branco do início e do final, a
     entrada deve ser conforme a regra de produção *note complexvalue:
     22fe. da gramática a seguir:

          complexvalue ::= *note floatvalue: 22ff. |
                           *note floatvalue: 22ff. ("j" | "J") |
                           *note floatvalue: 22ff. *note sign: 2300. *note absfloatvalue: 2301. ("j" | "J")

     Se o argumento for um número, o construtor serve como uma conversão
     numérica tal qual *note int: 257. e *note float: 2f7.  Para um
     objeto Python ‘x’ qualquer, ‘complex(x)’ delega para
     ‘x.__complex__()’.  Se *note __complex__(): 5e7. não está definido
     então a chamada é repassada para *note __float__(): 9d4.  Se
     ‘__float__()’ não está definido então a chamada é, novamente,
     repassada para *note __index__(): 71d.

     Se dois argumentos forem passados ou argumentos nomeados forem
     usados, cada argumento pode ser de qualquer tipo numérico
     (incluindo complexo).  Se ambos argumentos forem números reais, é
     retornado um número complexo com 'real' como parte real e 'imag'
     como parte imaginária.  Se ambos os argumentos forem números
     complexos, é retornado um número complexo com parte real
     ‘real.real-imag.imag’ e parte imaginária ‘real.imag+imag.real’.  Se
     um dos argumentos for um número real, somente a sua parte real é
     usada nas expressões anteriores.

     Se todos os argumentos forem omitidos, retorna ‘0j’.

     O tipo complexo está descrito em *note Tipos numéricos — int,
     float, complex: 1d75.

     Alterado na versão 3.6: Agrupar dígitos com sublinhados como em
     literais de código é permitido.

     Alterado na versão 3.8: Chamadas para *note __index__(): 71d. se
     *note __complex__(): 5e7. e *note __float__(): 9d4. não estão
     definidas.

 -- Função: delattr (object, name, /)

     Essa função está relacionada com *note setattr(): 22f3.  Os
     argumentos são um objeto e uma string.  A string deve ser o nome de
     um dos atributos do objeto.  A função remove o atributo indicado,
     desde que o objeto permita.  Por exemplo, ‘delattr(x, 'foobar')’ é
     equivalente a ‘del x.foobar’.  'name' não precisa ser um
     identificador Python (veja *note setattr(): 22f3.).

 -- Classe: dict (**kwargs)

 -- Classe: dict (mapping, /, **kwargs)

 -- Classe: dict (iterable, /, **kwargs)

     Cria um novo dicionário.  O objeto *note dict: 256. é a classe do
     dicionário.  Veja *note dict: 256. e *note Tipo mapeamento — dict:
     ad6. para documentação sobre esta classe.

     Para outros contêineres, consulte as classes embutidas *note list:
     611, *note set: 5d9. e *note tuple: 370, bem como o módulo *note
     collections: 1d.

 -- Função: dir ()

 -- Função: dir (object, /)

     Sem argumentos, devolve a lista de nomes no escopo local atual.
     Com um argumento, tentará devolver uma lista de atributos válidos
     para esse objeto.

     Se o objeto tiver um método chamado *note __dir__(): 15fe, esse
     método será chamado e deve devolver a lista de atributos.  Isso
     permite que objetos que implementam uma função personalizada *note
     __getattr__(): 4d3. ou *note __getattribute__(): beb. personalizem
     a maneira como *note dir(): 632. relata seus atributos.

     Se o objeto não fornecer ‘__dir__()’, a função tentará o melhor
     possível para coletar informações do atributo *note __dict__: 55b.
     do objeto, se definido, e do seu objeto de tipo.  A lista
     resultante não está necessariamente completa e pode ser imprecisa
     quando o objeto possui um *note __getattr__(): 4d3. personalizado.

     O mecanismo padrão *note dir(): 632. se comporta de maneira
     diferente com diferentes tipos de objetos, pois tenta produzir as
     informações mais relevantes e não completas:

        * Se o objeto for um objeto de módulo, a lista conterá os nomes
          dos atributos do módulo.

        * Se o objeto for um objeto de tipo ou classe, a lista conterá
          os nomes de seus atributos e recursivamente os atributos de
          suas bases.

        * Caso contrário, a lista conterá os nomes dos atributos do
          objeto, os nomes dos atributos da classe e recursivamente os
          atributos das classes base da classe.

     A lista resultante é alfabeticamente ordenada.  Por exemplo:

          >>> import struct
          >>> dir()   # show the names in the module namespace
          ['__builtins__', '__name__', 'struct']
          >>> dir(struct)   # show the names in the struct module
          ['Struct', '__all__', '__builtins__', '__cached__', '__doc__', '__file__',
           '__initializing__', '__loader__', '__name__', '__package__',
           '_clearcache', 'calcsize', 'error', 'pack', 'pack_into',
           'unpack', 'unpack_from']
          >>> class Shape:
          ...     def __dir__(self):
          ...         return ['area', 'perimeter', 'location']
          ...
          >>> s = Shape()
          >>> dir(s)
          ['area', 'location', 'perimeter']

          Nota: Como *note dir(): 632. é fornecido principalmente como
          uma conveniência para uso em um prompt interativo, ele tenta
          fornecer um conjunto interessante de nomes mais do que tenta
          fornecer um conjunto de nomes definido de forma rigorosa ou
          consistente, e seu comportamento detalhado pode mudar nos
          lançamentos.  Por exemplo, os atributos de metaclasse não
          estão na lista de resultados quando o argumento é uma classe.

 -- Função: divmod (a, b, /)

     Recebe dois números (não complexos) como argumentos e retorna um
     par de números que consiste em seu quociente e resto ao usar a
     divisão inteira.  Com tipos de operandos mistos, as regras para
     operadores aritméticos binários se aplicam.  Para números inteiros,
     o resultado é o mesmo que ‘(a // b, a % b)’.  Para números de ponto
     flutuante, o resultado é ‘(q, a % b)’, onde 'q' geralmente é
     ‘math.floor(a / b)’, mas pode ser 1 a menos que isso.  Em qualquer
     caso, ‘q * b + a % b’ está muito próximo de 'a', se ‘a % b’ é
     diferente de zero, tem o mesmo sinal que 'b' e ‘0 <= abs(a % b) <
     abs(b)’.

 -- Função: enumerate (iterable, start=0)

     Devolve um objeto enumerado.  'iterable' deve ser uma sequência, um
     *note iterador: 1ac. ou algum outro objeto que suporte a iteração.
     O método *note __next__(): 1310. do iterador retornado por *note
     enumerate(): 14c9. devolve uma tupla contendo uma contagem (a
     partir de 'start', cujo padrão é 0) e os valores obtidos na
     iteração sobre 'iterable'.

          >>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
          >>> list(enumerate(seasons))
          [(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
          >>> list(enumerate(seasons, start=1))
          [(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

     Equivalente a:

          def enumerate(iterable, start=0):
              n = start
              for elem in iterable:
                  yield n, elem
                  n += 1

 -- Função: eval (source, /, globals=None, locals=None)


     Parâmetros:

        * ‘source’ (*note str: 44c. | *note code object: 1d2.) – Uma
          expressão Python.

        * ‘globals’ (*note dict: 256. | ‘None’) – O espaço de nomes
          global (por padrão, ‘None’).

        * ‘locals’ (*note mapping: 11fb. | ‘None’) – O espaço de nomes
          local (por padrão, ‘None’).


     Retorna: O resultado da expressão avaliada.


     levanta: Erros de sintaxe são reportados como exceções.

          Aviso: Esta função executa código arbitrário.  Chamá-la com
          entrada fornecida pelo usuário pode levar a vulnerabilidades
          de segurança.

     O argumento 'source' é analisado e avaliado como uma expressão
     Python (tecnicamente, uma lista de condições), usando os
     dicionários 'globals' e 'locals' como espaço de nomes global e
     local.  Se o dicionário 'globals' estiver presente e não contiver
     um valor para a chave ‘__builtins__’, uma referência ao dicionário
     do módulo *note builtins: 12. é inserida sob essa chave antes de
     'source' ser analisado.  Dessa forma, pode controlar quais
     embutidos estão disponíveis para o código executado, inserindo o
     seu próprio dicionário ‘__builtins__’ em 'globals' antes de
     passá-lo à função *note eval(): 180.  Se o dicionário 'locals' for
     omitido, o valor predefinido é o dicionário 'globals'.  Se ambos os
     mapeamentos forem omitidos, 'source' é executado com os 'globals' e
     'locals' do ambiente em que *note eval(): 180. é chamada.  Note que
     'eval()' só terá acesso aos *note escopos aninhados: 20d0.
     ('non-locals') no ambiente que a contém se eles já estiverem
     referenciados no escopo que chama *note eval(): 180. (por exemplo,
     através de uma instrução *note nonlocal: 12ea.).

     Exemplo:

          >>> x = 1
          >>> eval('x+1')
          2

     Esta função também pode ser usada para executar objetos código
     arbitrários (como os criados por *note compile(): 192.).  Nesse
     caso, passe um objeto código em vez de uma string.  Se o objeto
     código foi compilado com ‘'exec'’ como o argumento 'mode', o valor
     de retorno de *note eval(): 180. será ‘None’.

     Dicas: a execução dinâmica de instruções é suportada pela função
     *note exec(): 17f.  As funções *note globals(): 1993. e *note
     locals(): 141. retornam o dicionário global e local atual,
     respectivamente, o que pode ser útil para ser usado por *note
     eval(): 180. ou *note exec(): 17f.

     Se a fonte fornecida for uma string, os espaços e tabulações à
     esquerda ou à direita serão removidos.

     Veja *note ast.literal_eval(): c32. para uma função que pode
     avaliar com segurança strings com expressões contendo apenas
     literais.

     Levanta um *note evento de auditoria: 19fa. ‘exec’ com o código
     objeto como argumento.  Eventos de compilação de código também
     podem ser levantados.

     Alterado na versão 3.13: Os argumentos 'globals' e 'locals' podem
     agora ser passados como argumentos nomeados.

     Alterado na versão 3.13: A forma de uso do espaço de nomes 'locals'
     padrão foi ajustado conforme descrito na função embutida *note
     locals(): 141.

 -- Função: exec (source, /, globals=None, locals=None, *, closure=None)

          Aviso: Esta função executa código arbitrário.  Chamá-la com
          entrada fornecida pelo usuário pode levar a vulnerabilidades
          de segurança.

     Esta função suporta a execução dinâmica de código Python.  O
     parâmetro 'source' deve ser ou uma string ou um objeto código.  Se
     for uma string, a mesma é analisada como um conjunto de instruções
     Python, o qual é então executado (exceto caso um erro de sintaxe
     ocorra).  (1)  Se for um objeto código, ele é simplesmente
     executado.  Em todos os casos, espera-se que o código a ser
     executado seja válido como um arquivo de entrada (veja a seção
     *note Entrada de arquivo: 22d3. no Manual de Referência).  Tenha
     cuidado, pois as instruções *note nonlocal: 12ea, *note yield: 9d5.
     e *note return: 9d6. não podem ser usadas fora das definições de
     funções mesmo dentro do contexto do código passado para a função
     *note exec(): 17f. .  O valor de retorno é sempre ‘None’.

     Em todos os casos, se os parâmetros opcionais são omitidos, o
     código é executado no escopo atual.  Se somente 'globals' é
     fornecido, deve ser um dicionário (e não uma subclasse de
     dicionário), que será usado tanto para as variáveis globais quanto
     para locais.  Se 'globals' e 'locals' são fornecidos, eles são
     usados para as variáveis globais e locais, respectivamente.  Se
     fornecido, 'locals' pode ser qualquer objeto de mapeamento.  Lembre
     que no nível de módulo, globais e locais são o mesmo dicionário.

          Nota: Quando or ‘exec’ recebe dois objetos separados como
          'globals' and 'locals', o código será executado como se
          estivesse embutido em uma definição de classe.  Isso significa
          que funções e classes definidas no código executado não
          poderão acessar variáveis que sofreram atribuições no escopo
          mais externo (pois, em uma definição de classe, tais variáveis
          seriam tratadas como variáveis de classe).

     Se o dicionário 'globals' não contém um valor para a chave
     ‘__builtins__’, a referência para o dicionário do módulo embutido
     *note builtins: 12. é inserido com essa chave.  A maneira que você
     pode controlar quais embutidos estão disponíveis para o código
     executado é inserindo seu próprio ‘__builtins__’ dicionário em
     'globals' antes de passar para *note exec(): 17f.

     O argumento 'closure' especifica uma clausura – uma tupla de
     cellvars.  Só é válido quando o 'objeto' é um objeto código
     contendo *note variáveis livres (de clausura): 20d1.  O comprimento
     da tupla deve corresponder exatamente ao comprimento do atributo
     *note co_freevars: 208b. do objeto código.

     Levanta um *note evento de auditoria: 19fa. ‘exec’ com o código
     objeto como argumento.  Eventos de compilação de código também
     podem ser levantados.

          Nota: As funções embutidas *note globals(): 1993. e *note
          locals(): 141. devolvem o espaço de nomes global e local,
          respectivamente, o que pode ser útil para passar adiante e
          usar como segundo ou terceiro argumento para *note exec():
          17f.

          Nota: 'locals' padrão atua como descrito pela função *note
          locals(): 141. abaixo.  Se você precisa ver efeitos do código
          em 'locals' depois da função *note exec(): 17f. retornar passe
          um dicionário 'locals' explícito.

     Alterado na versão 3.11: Adicionado o parâmetro 'closure'.

     Alterado na versão 3.13: Os argumentos 'globals' e 'locals' podem
     agora ser passados como argumentos nomeados.

     Alterado na versão 3.13: A forma de uso do espaço de nomes 'locals'
     padrão foi ajustado conforme descrito na função embutida *note
     locals(): 141.

 -- Função: filter (function, iterable, /)

     Constrói um iterador a partir dos elementos de 'iterable' para os
     quais 'function' é verdadeiro.  'iterable' pode ser uma sequência,
     um contêiner que com suporte a iteração, ou um iterador.  Se
     'function' for ‘None’, a função identidade será usada, isto é,
     todos os elementos de 'iterable' que são falsos são removidos.

     Note que ‘filter(function, iterable)’ é equivalente a expressão
     geradora ‘(item for item in iterable if function(item))’ se
     'function' não for ‘None’ e ‘(item for item in iterable if item)’
     se 'function' for ‘None’.

     Veja *note itertools.filterfalse(): 2303. para a função
     complementar que devolve elementos de 'iterable' para os quais
     'function' é falso.

 -- Classe: float (number=0.0, /)

 -- Classe: float (string, /)

     Retorna um número de ponto flutuante construído a partir de um
     número ou string.

     Exemplos:

          >>> float('+1.23')
          1.23
          >>> float('   -12345\n')
          -12345.0
          >>> float('1e-003')
          0.001
          >>> float('+1E6')
          1000000.0
          >>> float('-Infinity')
          -inf

     Se o argumento for uma string, ele deve conter um número decimal,
     opcionalmente precedido por um sinal e opcionalmente embutido em um
     espaço em branco.  O sinal opcional pode ser ‘'+'’ ou ‘'-'’; um
     sinal ‘'+'’ não tem efeito no valor produzido.  O argumento também
     pode ser uma string representando um NaN (não um número) ou
     infinito positivo ou negativo.  Mais precisamente, a entrada deve
     estar de acordo com a regra de produção *note floatvalue: 22ff. na
     seguinte gramática, depois que os espaços em branco iniciais e
     finais forem removidos:

          sign          ::= "+" | "-"
          infinity      ::= "Infinity" | "inf"
          nan           ::= "nan"
          digit         ::= <a Unicode decimal digit, i.e. characters in Unicode general category Nd>
          digitpart     ::= *note digit: 2306. (["_"] *note digit: 2306.)*
          number        ::= [*note digitpart: 2307.] "." *note digitpart: 2307. | *note digitpart: 2307. ["."]
          exponent      ::= ("e" | "E") [*note sign: 2300.] *note digitpart: 2307.
          floatnumber   ::= *note number: 2308. [*note exponent: 2309.]
          absfloatvalue ::= *note floatnumber: 230a. | *note infinity: 2304. | *note nan: 2305.
          floatvalue    ::= [*note sign: 2300.] *note absfloatvalue: 2301.

     O caso não é significativo, então, por exemplo, “inf”, “Inf”,
     “INFINITY” e “iNfINity” são todas grafias aceitáveis para o
     infinito positivo.

     Caso contrário, se o argumento é um inteiro ou um número de ponto
     flutuante, um número de ponto flutuante com o mesmo valor (com a
     precisão de ponto flutuante de Python) é retornado.  Se o argumento
     está fora do intervalo de um ponto flutuante Python, uma exceção
     *note OverflowError: 885. será lançada.

     Para um objeto Python genérico ‘x’, ‘float(x)’ delega para o método
     ‘x.__float__()’.  Se *note __float__(): 9d4. não estiver definido,
     então ele delega para o método *note __index__(): 71d.

     Se nenhum argumento for fornecido, será retornado ‘0.0’.

     O tipo float é descrito em *note Tipos numéricos — int, float,
     complex: 1d75.

     Alterado na versão 3.6: Agrupar dígitos com sublinhados como em
     literais de código é permitido.

     Alterado na versão 3.7: O parâmetro agora é somente-posicional

     Alterado na versão 3.8: Chamada para *note __index__(): 71d. se
     *note __float__(): 9d4. não está definido.

 -- Função: format (value, format_spec='', /)

     Converte um valor 'value' em uma representação “formatada”,
     controlado por 'format_spec'.  A interpretação de 'format_spec'
     dependerá do tipo do argumento 'value'; no entanto há uma sintaxe
     de formatação padrão usada pela maioria dos tipos embutidos: *note
     Minilinguagem de especificação de formato: 1e8.

     O 'format_spec' padrão é uma string vazia que geralmente produz o
     mesmo efeito que chamar *note str(value): 44c.

     Uma chamada de ‘format(value, format_spec)’ é convertida em
     ‘type(value).__format__(value, format_spec)’, que ignora o
     dicionário da instância ao pesquisar o método *note __format__():
     61e. de ‘value’.  Uma exceção *note TypeError: 2c3. é levantada se
     a pesquisa do método atingir *note object: a96. e o 'format_spec'
     não estiver vazio, ou se o 'format_spec' ou o valor de retorno não
     forem strings.

     Alterado na versão 3.4: ‘object().__format__(format_spec)’ levanta
     um *note TypeError: 2c3. se 'format_spec' não for uma string vazia.

 -- Classe: frozenset (iterable=(), /)

     Devolve um novo objeto *note frozenset: 5da, opcionalmente com
     elementos obtidos de 'iterable'.  ‘frozenset’ é uma classe
     embutida.  Veja *note frozenset: 5da. e *note Tipo conjuntos — set,
     frozenset: 1dcf. para documentação sobre essas classes.

     Para outros contêineres veja as classes embutidas *note set: 5d9,
     *note list: 611, *note tuple: 370, e *note dict: 256, assim como o
     módulo *note collections: 1d.

 -- Função: getattr (object, name, /)

 -- Função: getattr (object, name, default, /)

     Devolve o valor do atributo 'name' de 'object'.  'name' deve ser
     uma string.  Se a string é o nome de um dos atributos do objeto, o
     resultado é o valor de tal atributo.  Por exemplo, ‘getattr(x,
     'foobar')’ é equivalente a ‘x.foobar’.  Se o atributo não existir,
     'default' é devolvido se tiver sido fornecido, caso contrário a
     exceção *note AttributeError: 34b. é levantada.  'name' não precisa
     ser um identificador Python (veja *note setattr(): 22f3.).

          Nota: Uma vez que *note desfiguração de nome privado: 1e43.
          acontece em tempo de compilação, deve-se manualmente mutilar o
          nome de um atributo privado (atributos com dois sublinhados à
          esquerda) para recuperá-lo com *note getattr(): bea.

 -- Função: globals ()

     Retorna o dicionário implementando o espaço de nomes do módulo
     atual.  Para código dentro de funções, isso é definido quando a
     função é definida e permanece o mesmo, independentemente de onde a
     função é chamada.

 -- Função: hasattr (object, name, /)

     Os argumentos são um objeto e uma string.  O resultado é ‘True’ se
     a string é o nome de um dos atributos do objeto, e ‘False’ se ela
     não for.  (Isto é implementado chamando ‘getattr(object, name)’ e
     vendo se levanta um *note AttributeError: 34b. ou não.)

 -- Função: hash (object, /)

     Retorna o valor hash de um objeto (se houver um).  Valores hash são
     números inteiros.  Eles são usados para rapidamente comparar chaves
     de dicionários durante uma pesquisa em um dicionário.  Valores
     numéricos que ao serem comparados são iguais, possuem o mesmo valor
     hash (mesmo que eles sejam de tipos diferentes, como é o caso de 1
     e 1.0).

          Nota: Para objetos com métodos *note __hash__(): b0e.
          personalizados, fique atento que *note hash(): 5eb. trunca o
          valor devolvido baseado no comprimento de bits da máquina
          hospedeira.

 -- Função: help ()

 -- Função: help (request)

     Invoca o sistema de ajuda embutido.  (Esta função é destinada para
     uso interativo.)  Se nenhum argumento é passado, o sistema
     interativo de ajuda inicia no interpretador do console.  Se o
     argumento é uma string, então a string é pesquisada como o nome de
     um módulo, função, classe, método, palavra-chave, ou tópico de
     documentação, e a página de ajuda é exibida no console.  Se o
     argumento é qualquer outro tipo de objeto, uma página de ajuda para
     o objeto é gerada.

     Note que se uma barra(/) aparecer na lista de parâmetros de uma
     função, quando invocando *note help(): 8dd, significa que os
     parâmetros anteriores a barra são apenas posicionais.  Para mais
     informações, veja *note a entrada no FAQ sobre parâmetros
     somente-posicionais: 230b.

     Esta função é adicionada ao espaço de nomes embutido pelo módulo
     *note site: c7.

     Alterado na versão 3.4: Mudanças em *note pydoc: b5. e *note
     inspect: 7e. significam que as assinaturas reportadas para
     chamáveis agora são mais compreensíveis e consistentes.

 -- Função: hex (integer, /)

     Converte um número inteiro para uma string hexadecimal em letras
     minúsculas prefixada com “0x”.  Se 'integer' não é um objeto *note
     int: 257. do Python, ele tem que definir um método *note
     __index__(): 71d. que retorne um inteiro.  Alguns exemplos:

          >>> hex(255)
          '0xff'
          >>> hex(-42)
          '-0x2a'

     Se você quer converter um número inteiro para uma string
     hexadecimal em letras maiúsculas ou minúsculas, com prefixo ou sem,
     você pode usar qualquer uma das seguintes maneiras:

          >>> '%#x' % 255, '%x' % 255, '%X' % 255
          ('0xff', 'ff', 'FF')
          >>> format(255, '#x'), format(255, 'x'), format(255, 'X')
          ('0xff', 'ff', 'FF')
          >>> f'{255:#x}', f'{255:x}', f'{255:X}'
          ('0xff', 'ff', 'FF')

     Veja também *note format(): 61f. para mais informações.

     Veja também *note int(): 257. para converter uma string hexadecimal
     para um inteiro usando a base 16.

          Nota: Para obter uma string hexadecimal de um ponto flutuante,
          use o método *note float.hex(): 1e9b.

 -- Função: id (object, /)

     Devolve a “identidade” de um objeto.  Ele é um inteiro, o qual é
     garantido que será único e constante para este objeto durante todo
     o seu ciclo de vida.  Dois objetos com ciclos de vida não
     sobrepostos podem ter o mesmo valor para *note id(): 146a.

     Este é o endereço do objeto na memória.

     Levanta um *note evento de auditoria: 19fa. ‘builtins.id’ com o
     argumento ‘id’.

 -- Função: input ()

 -- Função: input (prompt, /)

     Se o argumento 'prompt' estiver presente, escreve na saída padrão
     sem uma nova linha ao final.  A função então lê uma linha da fonte
     de entrada, converte a mesma para uma string (removendo o caractere
     de nova linha ao final), e devolve isso.  Quando o final do arquivo
     (EOF / end-of-file) é encontrado, um erro *note EOFError: 131c. é
     levantado.  Exemplo:

          >>> s = input('--> ')
          --> Monty Python's Flying Circus
          >>> s
          "Monty Python's Flying Circus"

     Se o módulo *note readline: ba. foi carregado, então *note input():
     131b. usará ele para prover edição de linhas elaboradas e
     funcionalidades de histórico.

     Levanta um *note evento de auditoria: 19fa. ‘builtins.input’ com
     argumento ‘prompt’ antes de ler a entrada.

     Levanta um *note evento de auditoria: 19fa. ‘builtins.input/result’
     com o resultado depois de ler a entrada com sucesso.

 -- Classe: int (number=0, /)

 -- Classe: int (string, /, base=10)

     Retorna um objeto do tipo inteiro construído a partir de um número
     ou string, ou retorna ‘0’ caso nenhum argumento seja passado.

     Exemplos:

          >>> int(123.45)
          123
          >>> int('123')
          123
          >>> int('   -12_345\n')
          -12345
          >>> int('FACE', 16)
          64206
          >>> int('0xface', 0)
          64206
          >>> int('01110011', base=2)
          115

     Se o argumento definir um método *note __int__(): 71c, então
     ‘int(x)’ retorna ‘x.__int__()’.  Se 'x' definir um método *note
     __index__(): 71d, então ele retorna ‘x.__index__()’.  Se o
     argumento definir um método *note __trunc__(): 71b, então ele
     retorna ‘x.__trunc__()’.  Para números de ponto flutuante, isto
     trunca o número na direção do zero.

     Se o argumento não for um número ou se 'base' for fornecido, então
     o argumento deve ser uma instância de string, *note bytes: 1c2. ou
     *note bytearray: 2ea. representando um inteiro na base 'base'.
     Opcionalmente, a string pode ser precedida por ‘+’ ou ‘-’ (sem
     espaço entre eles), ter zeros à esquerda, estar entre espaços em
     branco e ter sublinhados simples intercalados entre os dígitos.

     Uma string de inteiro de base n contém dígitos, cada um
     representando um valor de 0 a n-1.  Os valores 0–9 podem ser
     representados por qualquer dígito decimal Unicode.  Os valores
     10–35 podem ser representados por ‘a’ a ‘z’ (ou ‘A’ a ‘Z’).  A
     'base' padrão é 10.  As bases permitidas são 0 e 2–36.  As strings
     base-2, -8 e -16 podem ser opcionalmente prefixadas com ‘0b’/‘0B’,
     ‘0o’/‘0O’ ou ‘0x’/‘0X’, como acontece com literais inteiros no
     código.  Para a base 0, a string é interpretada de maneira
     semelhante a um *note literal inteiro no código: 2055, em que a
     base real é 2, 8, 10 ou 16 conforme determinado pelo prefixo.  A
     base 0 também não permite zeros à esquerda: ‘int('010', 0)’ não é
     válido, enquanto ‘int('010')’ e ‘int('010', 8)’ são.

     O tipo inteiro está descrito em *note Tipos numéricos — int, float,
     complex: 1d75.

     Alterado na versão 3.4: Se 'base' não é uma instância de *note int:
     257. e o objeto 'base' tem um método *note base.__index__: 71d,
     então esse método é chamado para obter um inteiro para a base.
     Versões anteriores usavam *note base.__int__: 71c. ao invés de
     *note base.__index__: 71d.

     Alterado na versão 3.6: Agrupar dígitos com sublinhados como em
     literais de código é permitido.

     Alterado na versão 3.7: O primeiro parâmetro agora é
     somente-posicional.

     Alterado na versão 3.8: Chamada para *note __index__(): 71d. se
     *note __int__(): 71c. não está definido.

     Alterado na versão 3.11: A delegação de *note __trunc__(): 71b. foi
     descontinuada.

     Alterado na versão 3.11: Entradas de strings para *note int: 257. e
     representações em strings podem ser limitadas para ajudar a evitar
     ataques de negação de serviço.  Uma exceção *note ValueError: 202.
     é levantada quando o limite é excedido durante a conversão de uma
     string em um *note int: 257. ou quando a conversão de um *note int:
     257. em uma string excede o limite.  Consulte a documentação sobre
     *note limitação de comprimento de conversão de string em inteiro:
     5f5.

 -- Função: isinstance (object, classinfo, /)

     Retorna ‘True’ se o argumento 'object' é uma instância do argumento
     'classinfo', ou de uma subclasse dele (direta, indireta ou *note
     virtual: 11f5.).  Se 'object' não é um objeto do tipo dado, a
     função sempre devolve ‘False’.  Se 'classinfo' é uma tupla de tipos
     de objetos (ou recursivamente, como outras tuplas) ou um *note Tipo
     União: 7c3. de vários tipos, retorna ‘True’ se 'object' é uma
     instância de qualquer um dos tipos.  Se 'classinfo' não é um tipo
     ou tupla de tipos ou outras tuplas, é levantada uma exceção *note
     TypeError: 2c3.  *note TypeError: 2c3. pode não ser levantada por
     um tipo inválido se uma verificação anterior for bem-sucedida.

     Alterado na versão 3.10: 'classinfo' pode ser um *note Tipo União:
     7c3.

 -- Função: issubclass (class, classinfo, /)

     Retorna ‘True’ se 'class' for uma subclasse (direta, indireta ou
     *note virtual: 11f5.) de 'classinfo'.  Uma classe é considerada uma
     subclasse de si mesma.  'classinfo' pode ser uma tupla de objetos
     de classe (ou recursivamente, outras tuplas) ou um *note Tipo
     União: 7c3, caso em que retorna ‘True’ se 'class' for uma subclasse
     de qualquer entrada em 'classinfo'.  Em qualquer outro caso, é
     levantada uma exceção *note TypeError: 2c3.

     Alterado na versão 3.10: 'classinfo' pode ser um *note Tipo União:
     7c3.

 -- Função: iter (iterable, /)

 -- Função: iter (callable, sentinel, /)

     Retorna um objeto *note iterador: 1ac.  O primeiro argumento é
     interpretado muito diferentemente dependendo da presença do segundo
     argumento.  Sem um segundo argumento, o primeiro argumento deve ser
     uma coleção de objetos com suporte ao protocolo *note iterável:
     1268. (o método *note __iter__(): c8a.), ou ele deve ter suporte ao
     protocolo de sequência (o método *note __getitem__(): 283. com
     argumentos inteiros começando em ‘0’).  Se ele não tem suporte
     nenhum desses protocolos, uma *note TypeError: 2c3. é levantada.
     Se o segundo argumento, 'sentinel', é fornecido, então o primeiro
     argumento deve ser um objeto chamável.  O iterador criado neste
     caso irá chamar 'callable' sem nenhum argumento para cada chamada
     para o seu método *note __next__(): 1310.; se o valor devolvido é
     igual a 'sentinel', então *note StopIteration: c15. será levantado,
     caso contrário o valor será devolvido.

     Veja também *note Tipos iteradores: 230c.

     Uma aplicação útil da segunda forma de *note iter(): 7d8. é para
     construir um bloco de leitura.  Por exemplo, ler blocos de
     comprimento fixo de um arquivo binário de banco de dados até que o
     final do arquivo seja atingido:

          from functools import partial
          with open('meusdados.db', 'rb') as f:
              for bloco in iter(partial(f.read, 64), b''):
                  process_block(bloco)

 -- Função: len (object, /)

     Devolve o comprimento (o número de itens) de um objeto.  O
     argumento pode ser uma sequência (tal como uma string, bytes,
     tupla, lista, ou um intervalo) ou uma coleção (tal como um
     dicionário, conjunto, ou conjunto imutável).

     ‘len’ levanta *note OverflowError: 885. em tamanhos maiores que
     *note sys.maxsize: 1205, tal como *note range(2 ** 100): 94a.

 -- Classe: list (iterable=(), /)

     Ao invés de ser uma função, *note list: 611. é na verdade um tipo
     de sequência mutável, conforme documentado em *note Listas: 1dc0. e
     *note Tipos sequências — list, tuple, range: 1dcc.

 -- Função: locals ()

     Retorna um objeto de mapeamento representando a tabela de símbolos
     atual, com nomes de variáveis como as chaves, e as referências às
     quais cada variável está atrelada no momento como os valores.

     Em um escopo de módulo, assim como quando usando *note exec(): 17f.
     ou *note eval(): 180. com um único espaço de nomes, esta função
     retorna o mesmo espaço de nomes que *note globals(): 1993.

     Em um escopo de classe, ela retorna o espaço de nomes que será
     passado para o construtor da metaclasse.

     Quando usando ‘exec()’ ou ‘eval()’ com argumentos de espaço local e
     global distintos, ela retorna o espaço de nomes local passado na
     chamada.

     Em todos os casos acima, cada chamada a ‘locals()’ em um dado
     quadro de execução vai retornar o 'mesmo' objeto de mapeamento.
     Mudanças feitas através do objeto de mapeamento retornado por
     ‘locals()’ serão visíveis tal qual variáveis locais atribuídas,
     reatribuídas ou deletadas, e atribuir, reatribuir ou deletar
     variáveis locais afetará imediatamente o conteúdo do objeto de
     mapeamento retornado.

     Em contraste aos casos acima, em um *note escopo otimizado: 17e.
     (incluindo funções, geradores e corrotinas), cada chamada a
     ‘locals()’ retorna um dicionário novo contendo as ligações atuais
     das variáveis locais da função e de quaisquer células com
     referências não-locais.  Nesse caso, mudanças em ligações de nomes
     feitas através do dicionário retornado 'não' são escritas de volta
     nas variáveis locais correspondentes nem nas células com
     referências não-locais, e atribuir, reatribuir ou deletar variáveis
     locais e células com referências não-locais 'não' afeta o conteúdo
     dos dicionários que já foram retornados.

     Chamar a função ‘locals()’ como parte de uma compreensão em uma
     função, gerador ou corrotina é equivalente a chamá-la no escopo que
     contém a compreensão, exceto que as variáveis de iteração
     inicializadas da compreensão serão incluídas.  Em outros escopos,
     essa função se comporta como se a compreensão estivesse executando
     como uma função aninhada.

     Chamar a função ‘locals()’ como parte de uma expressão geradora é
     equivalente a chamá-la em uma função geradora aninhada.

     Alterado na versão 3.12: O comportamento de ‘locals()’ em uma
     compreensão foi atualizado conforme descrito na PEP 709(2).

     Alterado na versão 3.13: Como parte da PEP 667(3), o que acontece
     após a mutação de objetos de mapeamento retornados desta função
     está agora definido.  O comportamento em *note escopos otimizados:
     17e. agora é o descrito acima.  Além de estar definido, o
     comportamento em outros escopos não foi modificado em relação aos
     comportamentos em versões passadas.

 -- Função: map (function, iterable, *iterables)

     Devolve um iterador que aplica 'function' para cada item de
     'iterable', gerando os resultados.  Se argumentos 'iterables'
     adicionais são passados, 'function' deve ter a mesma quantidade de
     argumentos e ela é aplicada aos itens de todos os iteráveis em
     paralelo.  Com múltiplos iteráveis, o iterador para quando o
     iterador mais curto é encontrado.  Para casos onde os parâmetros de
     entrada da função já estão organizados em tuplas, veja *note
     itertools.starmap(): 1123.

 -- Função: max (iterable, /, *, key=None)

 -- Função: max (iterable, /, *, default, key=None)

 -- Função: max (arg1, arg2, /, *args, key=None)

     Devolve o maior item em um iterável ou o maior de dois ou mais
     argumentos.

     Se um argumento posicional é fornecido, ele deve ser um *note
     iterável: 1268.  O maior item no iterável é retornado.  Se dois ou
     mais argumentos posicionais são fornecidos, o maior dos argumentos
     posicionais é devolvido.

     Existem dois parâmetros somente-nomeados opcionais.  O parâmetro
     'key' especifica uma função de ordenamento de um argumento, como
     aquelas usadas por *note list.sort(): be8.  O parâmetro 'default'
     especifica um objeto a ser devolvido se o iterável fornecido
     estiver vazio.  Se o iterável estiver vazio, e 'default' não foi
     fornecido, uma exceção *note ValueError: 202. é levantada.

     Se múltiplos itens são máximos, a função devolve o primeiro
     encontrado.  Isto é consistente com outras ferramentas de
     ordenamento que preservam a estabilidade, tais como
     ‘sorted(iterable, key=keyfunc, reverse=True)[0]’ e
     ‘heapq.nlargest(1, iterable, key=keyfunc)’.

     Alterado na versão 3.4: Adicionado o parâmetro 'default'
     somente-nomeado.

     Alterado na versão 3.8: O valor de 'key' pode ser ‘None’.

 -- Classe: memoryview (object)

     Devolve um objeto de “visão da memória” criado a partir do
     argumento fornecido.  Veja *note Memory Views: 230d. para mais
     informações.

 -- Função: min (iterable, /, *, key=None)

 -- Função: min (iterable, /, *, default, key=None)

 -- Função: min (arg1, arg2, /, *args, key=None)

     Devolve o menor item de um iterável ou o menor de dois ou mais
     argumentos.

     Se um argumento posicional é fornecido, ele deve ser um *note
     iterável: 1268.  O menor item no iterável é devolvido.  Se dois ou
     mais argumentos posicionais são fornecidos, o menor dos argumentos
     posicionais é devolvido.

     Existem dois parâmetros somente-nomeados opcionais.  O parâmetro
     'key' especifica uma função de ordenamento de um argumento, como
     aquelas usadas por *note list.sort(): be8.  O parâmetro 'default'
     especifica um objeto a ser devolvido se o iterável fornecido
     estiver vazio.  Se o iterável estiver vazio, e 'default' não foi
     fornecido, uma exceção *note ValueError: 202. é levantada.

     Se múltiplos itens são mínimos, a função devolve o primeiro
     encontrado.  Isto é consistente com outras ferramentas de
     ordenamento que preservam a estabilidade, tais como
     ‘sorted(iterable, key=keyfunc)[0]’ e ‘heapq.nsmallest(1, iterable,
     key=keyfunc)’.

     Alterado na versão 3.4: Adicionado o parâmetro 'default'
     somente-nomeado.

     Alterado na versão 3.8: O valor de 'key' pode ser ‘None’.

 -- Função: next (iterator, /)

 -- Função: next (iterator, default, /)

     Recupera o próximo item do *note iterador: 1ac. chamando o seu
     método *note __next__(): 1310.  Se 'default' foi fornecido, ele é
     devolvido caso o iterável tenha sido percorrido por completo, caso
     contrário *note StopIteration: c15. é levantada.

 -- Classe: object

     Esta é a classe base definitiva de todas as outras classes.  Ela
     tem métodos que são comuns a todas as instâncias de classes Python.
     Quando o construtor é chamado, ele retorna um novo objeto sem
     características.  O construtor não aceita nenhum argumento.

          Nota: Instâncias de *note object: a96. 'não' têm atributos
          *note __dict__: 55b, então você não pode atribuir atributos
          arbitrários a uma instância de *note object: a96.

 -- Função: oct (integer, /)

     Converte um número inteiro para uma string em base octal, prefixada
     com “0o”.  O resultado é uma expressão Python válida.  Se 'integer'
     não for um objeto *note int: 257. Python, ele tem que definir um
     método *note __index__(): 71d. que devolve um inteiro.  Por
     exemplo:

          >>> oct(8)
          '0o10'
          >>> oct(-56)
          '-0o70'

     Se você quiser converter um número inteiro para uma string octal,
     com o prefixo “0o” ou não, você pode usar qualquer uma das formas a
     seguir.

          >>> '%#o' % 10, '%o' % 10
          ('0o12', '12')
          >>> format(10, '#o'), format(10, 'o')
          ('0o12', '12')
          >>> f'{10:#o}', f'{10:o}'
          ('0o12', '12')

     Veja também *note format(): 61f. para mais informações.

 -- Função: open (file, mode='r', buffering=-1, encoding=None,
          errors=None, newline=None, closefd=True, opener=None)

     Abre 'file' e retorna um *note objeto arquivo: 1203.
     correspondente.  Se o arquivo não puder ser aberto, uma *note
     OSError: 417. é levantada.  Veja *note Leitura e escrita de
     arquivos: 1e06. para mais exemplos de como usar esta função.

     'file' é um *note objeto caminho ou similar: 2a0. fornecendo o
     caminho (absoluto ou relativo ao diretório de trabalho atual) do
     arquivo que será aberto, ou de um inteiro descritor de arquivo a
     ser manipulado (Se um descritor de arquivo é fornecido, ele é
     fechado quando o objeto de I/O retornado é fechado, a não ser que
     'closefd' esteja marcado como ‘False’).

     'mode' é uma string opcional que especifica o modo no qual o
     arquivo é aberto.  O valor padrão é ‘'r'’, o qual significa abrir
     para leitura em modo texto.  Outros valores comuns são ‘'w'’ para
     escrever (truncando o arquivo se ele já existe), ‘'x'’ para criação
     exclusiva e ‘'a'’ para anexar (o qual em 'alguns' sistemas Unix,
     significa que 'todas' as escritas anexam ao final do arquivo
     independentemente da posição de busca atual).  No modo texto, se
     'encoding' não for especificada, a codificação usada depende da
     plataforma: *note locale.getencoding(): 2dc. é chamada para obter a
     codificação da localidade atual (Para ler e escrever bytes
     diretamente, use o modo binário e não especifique 'encoding').  Os
     modos disponíveis são:

     Caractere     Significado
                   
     ----------------------------------------------------------------------------------
                   
     ‘'r'’         abre para leitura (padrão)
                   
                   
     ‘'w'’         abre para escrita, truncando o arquivo primeiro (removendo tudo o
                   que estiver contido no mesmo)
                   
                   
     ‘'x'’         abre para criação exclusiva, falhando caso o arquivo exista
                   
                   
     ‘'a'’         abre para escrita, anexando ao final do arquivo caso o mesmo
                   exista
                   
                   
     ‘'b'’         modo binário
                   
                   
     ‘'t'’         modo texto (padrão)
                   
                   
     ‘'+'’         aberto para atualização (leitura e escrita)
                   

     O modo padrão é ‘'r'’ (abre para leitura de texto, um sinônimo de
     ‘'rt'’).  Modos ‘'w+'’ e ‘'w+b'’ abrem e truncam o arquivo.  Modos
     ‘'r+'’ e ‘'r+b'’ abrem o arquivo sem truncar o mesmo.

     Conforme mencionado em *note Visão Geral: 230f, Python diferencia
     entre entrada/saída binária e de texto.  Arquivos abertos em modo
     binário (incluindo ‘'b'’ no parâmetro 'mode') retornam o conteúdo
     como objetos *note bytes: 1c2. sem usar nenhuma decodificação.  No
     modo texto (o padrão, ou quando ‘'t'’ é incluído no parâmetro
     'mode'), o conteúdo do arquivo é retornado como *note str: 44c,
     sendo os bytes primeiramente decodificados usando uma codificação
     dependente da plataforma, ou usando a codificação definida em
     'encoding' se fornecida.

          Nota: Python não depende da noção básica do sistema
          operacional sobre arquivos de texto; todo processamento é
          feito pelo próprio Python, e é então independente de
          plataforma.

     'buffering' é um número inteiro opcional usado para definir a
     política de buffering.  Passe 0 para desativar o buffer (permitido
     apenas no modo binário), 1 para selecionar o buffer de linha
     (usável apenas ao gravar no modo de texto) e um inteiro > 1 para
     indicar o tamanho em bytes de um buffer de bloco de tamanho fixo.
     Observe que especificar um tamanho de buffer dessa maneira se
     aplica a E/S com buffer binário, mas ‘TextIOWrapper’ (ou seja,
     arquivos abertos com ‘mode='r+'’) teriam outro buffer.  Para
     desabilitar o buffer em ‘TextIOWrapper’, considere usar o
     sinalizador ‘write_through’ para *note
     io.TextIOWrapper.reconfigure(): b5e.  Quando nenhum argumento
     'buffering' é fornecido, a política de buffering padrão funciona da
     seguinte forma:

        * Arquivos binários são armazenados em pedaços de tamanho fixo;
          o tamanho do buffer é escolhido usando uma heurística que
          tenta determinar o “tamanho de bloco” subjacente do
          dispositivo, e usa *note io.DEFAULT_BUFFER_SIZE: 17ba. caso
          não consiga.  Em muitos sistemas, o buffer possuirá
          tipicamente 4096 ou 8192 bytes de comprimento.

        * Arquivos de texto “interativos” (arquivos para os quais *note
          isatty(): 1e09. retornam ‘True’) usam buffering de linha.
          Outros arquivos de texto usam a política descrita acima para
          arquivos binários.

     'encoding' é o nome da codificação usada para codificar ou
     decodificar o arquivo.  Isto deve ser usado apenas no modo texto.
     A codificação padrão depende da plataforma (seja qual valor *note
     locale.getencoding(): 2dc. retornar), mas qualquer *note
     codificador de texto: 2310. suportado pelo Python pode ser usada.
     Veja o módulo *note codecs: 1b. para a lista de codificações
     suportadas.

     'errors' é uma string opcional que especifica como erros de
     codificação e de decodificação devem ser tratados — isso não pode
     ser utilizado no modo binário.  Uma variedade de tratadores de erro
     padrão estão disponíveis (listados em *note Error Handlers: 18fa.),
     apesar que qualquer nome para tratamento de erro registrado com
     *note codecs.register_error(): 14e3. também é válido.  Os nomes
     padrões incluem:

        * ‘'strict'’ para levantar uma exceção *note ValueError: 202. se
          existir um erro de codificação.  O valor padrão ‘None’ tem o
          mesmo efeito.

        * ‘'ignore'’ ignora erros.  Note que ignorar erros de código
          pode levar à perda de dados.

        * ‘'replace'’ faz um marcador de substituição (tal como ‘'?'’)
          ser inserido onde existem dados malformados.

        * representará quaisquer bytes incorretos como unidades de
          código substituto baixo variando de U + DC80 a U + DCFF. Essas
          unidades de código substituto serão então transformadas de
          volta nos mesmos bytes quando o manipulador de erros for usado
          ao gravar dados.  Isso é útil para processar arquivos em uma
          codificação desconhecida.

        * ‘'xmlcharrefreplace'’ é suportado apenas ao gravar em um
          arquivo.  Os caracteres não suportados pela codificação são
          substituídos pela referência de caracteres XML apropriada
          ‘&#NNN;’.

        * ‘'backslashreplace'’ substitui dados malformados pela
          sequência de escape utilizando contrabarra do Python.

        * ‘'namereplace'’ (também é suportado somente quando estiver
          escrevendo) substitui caractere não suportados com sequências
          de escape ‘\N{...}’.

     'newline' determina como analisar caracteres de nova linha do
     fluxo.  Ele pode ser ‘None’, ‘''’, ‘'\n'’, ‘'\r'’ e ‘'\r\n'’.  Ele
     funciona da seguinte forma:

        * Ao ler a entrada do fluxo, se 'newline' for ‘None’, o modo
          universal de novas linhas será ativado.  As linhas na entrada
          podem terminar em ‘'\n'’, ‘'\r'’ ou ‘'\r\n'’, e são traduzidas
          para ‘'\n'’ antes de retornar ao chamador.  Se for ‘''’, o
          modo de novas linhas universais será ativado, mas as
          terminações de linha serão retornadas ao chamador sem
          tradução.  Se houver algum dos outros valores legais, as
          linhas de entrada são finalizadas apenas pela string
          especificada e a finalização da linha é retornada ao chamador
          sem tradução.

        * Ao gravar a saída no fluxo, se 'newline' for ‘None’, quaisquer
          caracteres ‘'\n'’ gravados serão traduzidos para o separador
          de linhas padrão do sistema, *note os.linesep: 2311.  Se
          'newline' for ‘''’ ou ‘'\n'’, nenhuma tradução ocorrerá.  Se
          'newline' for um dos outros valores legais, qualquer caractere
          ‘'\n'’ escrito será traduzido para a string especificada.

     Se 'closefd' for ‘False’ e um descritor de arquivo em vez de um
     nome de arquivo for fornecido, o descritor de arquivo subjacente
     será mantido aberto quando o arquivo for fechado.  Se um nome de
     arquivo for fornecido 'closefd' deve ser ‘True’ (o padrão), caso
     contrário, um erro será levantado.

     Um abridor personalizado pode ser usado passando um chamável como
     'opener'.  O descritor de arquivo subjacente para o objeto arquivo
     é obtido chamando 'opener' com ('file', 'flags').  'opener' deve
     retornar um descritor de arquivo aberto (passando *note os.open:
     dba. como 'opener' resulta em funcionalidade semelhante à passagem
     de ‘None’).

     O arquivo recém-criado é *note non-inheritable: f2b.

     O exemplo a seguir usa o parâmetro *note dir_fd: 1129. da função
     *note os.open(): dba. para abrir um arquivo relativo a um
     determinado diretório:

          >>> import os
          >>> dir_fd = os.open('algum_dir', os.O_RDONLY)
          >>> def opener(path, flags):
          ...     return os.open(path, flags, dir_fd=dir_fd)
          ...
          >>> with open('spamspam.txt', 'w', opener=opener) as f:
          ...     print('Isso será escrito para algum_dir/spamspam.txt', file=f)
          ...
          >>> os.close(dir_fd)  # não deixe vazar um descritor de arquivo

     O tipo de *note objeto arquivo: 1203. retornado pela função *note
     open(): 51c. depende do modo.  Quando *note open(): 51c. é usado
     para abrir um arquivo no modo texto (‘'w'’, ‘'r'’, ‘'wt'’, ‘'rt'’,
     etc.), retorna uma subclasse de *note io.TextIOBase: 695.
     (especificamente *note io.TextIOWrapper: 7bc.).  Quando usada para
     abrir um arquivo em modo binário com buffer, a classe retornada é
     uma subclasse de *note io.BufferedIOBase: 694.  A classe exata
     varia: no modo binário de leitura, ele retorna uma *note
     io.BufferedReader: 124e.; nos modos binário de gravação e binário
     anexado, ele retorna um *note io.BufferedWriter: 13f8. e, no modo
     leitura/gravação, retorna um *note io.BufferedRandom: 13f9.  Quando
     o buffer está desativado, o fluxo bruto, uma subclasse de *note
     io.RawIOBase: 110f, *note io.FileIO: 1354, é retornado.

     Veja também os módulos de para lidar com arquivos, tais como *note
     fileinput: 5b, *note io: 7f. (onde *note open(): 51c. é declarado),
     *note os: a1, *note os.path: a2, *note tempfile: e0. e *note
     shutil: c5.

     Levanta um *note evento de auditoria: 19fa. ‘open’ com os
     argumentos ‘path’, ‘mode’, ‘flags’.

     Os argumentos ‘mode’ e ‘flags’ podem ter sido modificados ou
     inferidos a partir da chamada original.

     Alterado na versão 3.3:

        * O parâmetro 'opener' foi adicionado.

        * O modo ‘'x'’ foi adicionado.

        * *note IOError: 108b. costumava ser levantada, agora ela é um
          apelido para *note OSError: 417.

        * *note FileExistsError: 1056. agora é levantado se o arquivo
          aberto no modo de criação exclusivo (‘'x'’) já existir.

     Alterado na versão 3.4:

        * O arquivo agora é não herdável.

     Alterado na versão 3.5:

        * Se a chamada de sistema é interrompida e o tratador de sinal
          não levanta uma exceção, a função agora tenta novamente a
          chamada de sistema em vez de levantar uma exceção *note
          InterruptedError: db0. (consulte PEP 475(4) para entender a
          justificativa).

        * O tratador de erros ‘'namereplace'’ foi adicionado.

     Alterado na versão 3.6:

        * Suporte adicionado para aceitar objetos implementados *note
          os.PathLike: c6c.

        * No Windows, a abertura de um buffer do console pode retornar
          uma subclasse de *note io.RawIOBase: 110f. que não seja *note
          io.FileIO: 1354.

     Alterado na versão 3.11: O modo ‘'U'’ foi removido.

 -- Função: ord (character, /)

     Retorna o valor ordinal de um caractere.

     Se o argumento for uma string de um caractere, retorna o ponto de
     código Unicode desse caractere..  Por exemplo, ‘ord('a')’ retorna o
     número inteiro ‘97’ e ‘ord('€')’ (sinal do Euro) retorna ‘8364’.
     Este é o inverso de *note chr(): 1768.

     Se o argumento for um objeto *note bytes: 1c2. ou *note bytearray:
     2ea. de comprimento 1, retorna seu valor de byte único.  Por
     exemplo, ‘ord(b'a')’ retorna o inteiro ‘97’.

 -- Função: pow (base, exp, mod=None)

     Retorna 'base' à potência de 'exp'; se 'mod' estiver presente,
     retorna 'base' à potência 'exp', módulo 'mod' (calculado com mais
     eficiência do que ‘pow(base, exp) % mod’).  A forma de dois
     argumentos ‘pow(base, exp)’ é equivalente a usar o operador de
     potência: ‘base**exp’.

     Quando argumentos são tipos numéricos embutidos com tipos de
     operandos mistos, aplicam-se as regras de coerção para operadores
     aritméticos binários.  Para operandos *note int: 257, o resultado
     tem o mesmo tipo que os operandos (após coerção), 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, ‘pow(10, 2)’ retorna ‘100’, mas ‘pow(10,
     -2)’ retorna ‘0.01’.  Para uma base negativa do tipo *note int:
     257. ou *note float: 2f7. e um expoente não integral, um resultado
     complexo é entregue.  Por exemplo, ‘pow(-9, 0.5)’ retorna um valor
     próximo a ‘3j’.  Enquanto isso, para uma base negativa do tipo
     *note int: 257. ou *note float: 2f7. com um expoente integral, um
     resultado de ponto flutuante é retornado.  Por exemplo, ‘pow(-9,
     2.0)’ retorna ‘81.0’.

     Para operandos *note int: 257. 'base' e 'exp', se 'mod' estiver
     presente, 'mod' também deve ser do tipo inteiro e 'mod' deve ser
     diferente de zero.  Se 'mod' estiver presente e 'exp' for negativo,
     'base' deve ser relativamente primo para 'mod'.  Nesse caso,
     ‘pow(inv_base, -exp, mod)’ é retornado, onde 'inv_base' é um
     inverso ao 'base' módulo 'mod'.

     Aqui está um exemplo de computação de um inverso para ‘38’ módulo
     ‘97’:

          >>> pow(38, -1, mod=97)
          23
          >>> 23 * 38 % 97 == 1
          True

     Alterado na versão 3.8: Para operandos *note int: 257, a forma de
     três argumentos de ‘pow’ agora permite que o segundo argumento seja
     negativo, permitindo o cálculo de inversos modulares.

     Alterado na versão 3.8: Permite argumentos de palavra reservada.
     Anteriormente, apenas argumentos posicionais eram suportados.

 -- Função: print (*objects, sep=' ', end='\n', file=None, flush=False)

     Exibe 'objects' no fluxo de texto 'arquivo', separado por 'sep' e
     seguido por 'end'.  'sep', 'end', 'file' e 'flush', se houver,
     devem ser fornecidos como argumentos nomeados.

     Todos os argumentos que não são nomeados são convertidos em strings
     como *note str(): 44c. faz e gravados no fluxo, separados por 'sep'
     e seguidos por 'end'.  'sep' e 'end' devem ser strings; eles também
     podem ser ‘None’, o que significa usar os valores padrão.  Se
     nenhum 'object' for fornecido, *note print(): fa9. escreverá apenas
     'end'.

     O argumento 'file' deve ser um objeto com um método
     ‘write(string)’; se ele não estiver presente ou ‘None’, então *note
     sys.stdout: ae6. será usado.  Como argumentos exibidos no console
     são convertidos para strings de texto, *note print(): fa9. não pode
     ser usado com objetos arquivo em modo binário.  Para esses casos,
     use ‘file.write(...)’ ao invés.

     O buffer de saída geralmente é determinado por 'arquivo'.  No
     entanto, se 'flush' for verdadeiro, o fluxo será descarregado à
     força.

     Alterado na versão 3.3: Adicionado o argumento nomeado 'flush'.

 -- Classe: property (fget=None, fset=None, fdel=None, doc=None)

     Retorna um atributo de propriedade.

     'fget' é uma função para obter o valor de um atributo.  'fset' é
     uma função para definir um valor para um atributo.  'fdel' é uma
     função para deletar um valor de um atributo.  E 'doc' cria um
     docstring para um atributo.

     Um uso comum é para definir um atributo gerenciável ‘x’:

          class C:
              def __init__(self):
                  self._x = None

              def getx(self):
                  return self._x

              def setx(self, valor):
                  self._x = valor

              def delx(self):
                  del self._x

              x = property(getx, setx, delx, "Eu sou a propriedade de 'x'.")

     Se 'c' é uma instância de 'C', ‘c.x’ irá invocar o método getter,
     ‘c.x = valor’ irá invocar o método setter, e ‘del c.x’ o método
     deleter.

     Se fornecido, 'doc' será a docstring do atributo definido por
     property.  Caso contrário, a property copiará a docstring de 'fget'
     (se ela existir).  Isso torna possível criar facilmente
     propriedades apenas para leitura usando *note property(): 194. como
     um *note decorador: 731.:

          class Parrot:
              def __init__(self):
                  self._voltagem = 100000

              @property
              def voltagem(self):
                  """Obtém a voltagem atual."""
                  return self._voltagem

     O decorador ‘@property’ transforma o método ‘voltage()’ em um
     “getter” para um atributo somente leitura com o mesmo nome, e
     define a docstring de 'voltage' para “Get the current voltage.”

      -- Função: @getter

      -- Função: @setter

      -- Função: @deleter

          Um objeto property possui métodos ‘getter’, ‘setter’ e
          ‘deleter’ usáveis como decoradores, que criam uma cópia da
          property com o assessor correspondente a função definida para
          a função com decorador.  Isso é explicado melhor com um
          exemplo:

               class C:
                   def __init__(self):
                       self._x = None

                   @property
                   def x(self):
                       """Sou a propriedade de 'x'."""
                       return self._x

                   @x.setter
                   def x(self, value):
                       self._x = value

                   @x.deleter
                   def x(self):
                       del self._x

          Esse código é exatamente equivalente ao primeiro exemplo.
          Tenha certeza de nas funções adicionais usar o mesmo nome que
          a property original (‘x’ neste caso).

          O objeto property retornado também tem os atributos ‘fget’,
          ‘fset’, e ‘fdel’ correspondendo aos argumentos do construtor.

     Alterado na versão 3.5: Agora é possível escrever nas docstrings de
     objetos property.

      -- Atributo: __name__

          Atributo que contém o nome da propriedade.  O nome da
          propriedade pode ser alterado em tempo de execução.

          Adicionado na versão 3.13.

 -- Classe: range (stop, /)

 -- Classe: range (start, stop, step=1, /)

     Em vez de ser uma função, *note range: 94a. é realmente um tipo de
     sequência imutável, conforme documentado em *note Intervalos: 2312.
     e *note Tipos sequências — list, tuple, range: 1dcc.

 -- Função: repr (object, /)

     Retorna uma string contendo uma representação imprimível de um
     objeto.  Para muitos tipos, essa função tenta retornar uma string
     que produziria um objeto com o mesmo valor quando passado para
     *note eval(): 180, caso contrário, a representação é uma string
     entre colchetes angulares que contém o nome do tipo do objeto
     juntamente com informações adicionais, geralmente incluindo o nome
     e o endereço do objeto.  Uma classe pode controlar o que essa
     função retorna para suas instâncias, definindo um método *note
     __repr__(): 61c.  Se *note sys.displayhook(): 1568. não estiver
     acessível, esta função vai levantar *note RuntimeError: 195.

     Esta classe possui uma representação personalizada que pode ser
     executada:

          class Pessoa:   def __init__(self, nome, idade):      self.nome = nome      self.idade = idade   def __repr__(self):      return f"Pessoa('{self.nome}', {self.idade})"

 -- Função: reversed (object, /)

     Retorna um *note iterador: 1ac. reverso.  'seq' deve ser um objeto
     que possui o método *note __reversed__(): ca7. ou suporta o
     protocolo de sequência (o método *note __len__(): 15b4. e o método
     *note __getitem__(): 283. com argumentos inteiros começando em
     ‘0’).

 -- Função: round (number, ndigits=None)

     Retorna 'number' arredondado para 'ndigits' precisão após o ponto
     decimal.  Se 'ndigits' for omitido ou for ‘None’, ele retornará o
     número inteiro mais próximo de sua entrada.

     Para os tipos embutidos com suporte a *note round(): 131d, os
     valores são arredondados para o múltiplo mais próximo de 10 para a
     potência de menos 'ndigit'; se dois múltiplos são igualmente
     próximos, o arredondamento é feito para a opção par (por exemplo,
     ‘round(0.5)’ e ‘round(-0.5)’ são ‘0’ e ‘round(1.5)’ é ‘2’).
     Qualquer valor inteiro é válido para 'ndigits' (positivo, zero ou
     negativo).  O valor de retorno é um número inteiro se 'ndigits' for
     omitido ou ‘None’.  Caso contrário, o valor de retorno tem o mesmo
     tipo que 'number'.

     Para um objeto Python geral ‘number’, ‘round’ delega para
     ‘number.__round__’.

          Nota: O comportamento de *note round(): 131d. para pontos
          flutuantes pode ser surpreendente: por exemplo, ‘round(2.675,
          2)’ fornece ‘2.67’ em vez do esperado ‘2.68’.  Isso não é um
          bug: é resultado do fato de que a maioria das frações decimais
          não pode ser representada exatamente como um ponto flutuante.
          Veja *note Aritmética de ponto flutuante; problemas e
          limitações: 1e99. para mais informações.

 -- Classe: set (iterable=(), /)

     Retorna um novo objeto *note set: 5d9, opcionalmente com elementos
     retirados de 'iterable'.  ‘set’ é uma classe embutida.  Veja *note
     set: 5d9. e *note Tipo conjuntos — set, frozenset: 1dcf. para
     documentação sobre esta classe.

     Para outros contêineres, consulte as classes embutidas *note
     frozenset: 5da, *note list: 611, *note tuple: 370. e *note dict:
     256, bem como o módulo *note collections: 1d.

 -- Função: setattr (object, name, value, /)

     Esta é a contrapartida de *note getattr(): bea.  Os argumentos são
     um objeto, uma string e um valor arbitrário.  A string pode nomear
     um atributo existente ou um novo atributo.  A função atribui o
     valor ao atributo, desde que o objeto permita.  Por exemplo,
     ‘setattr(x, 'foobar', 123)’ é equivalente a ‘x.foobar = 123’.

     'name' não precisa ser um identificador do Python conforme definido
     em *note Identificadores e palavras-chave: 2021. a menos que o
     objeto opte por impor isso, por exemplo, em um *note
     __getattribute__(): beb. personalizado ou via *note __slots__:
     1533.  Um atributo cujo nome não é um identificador não será
     acessível usando a notação de ponto, mas pode ser acessado através
     de *note getattr(): bea. etc.

          Nota: Uma vez que *note desfiguração de nome privado: 1e43.
          acontece em tempo de compilação, deve-se manualmente mutilar o
          nome de um atributo privado (atributos com dois sublinhados à
          esquerda) para defini-lo com *note setattr(): 22f3.

 -- Classe: slice (stop, /)

 -- Classe: slice (start, stop, step=None, /)

     Retorna um objeto *note fatia: 2313. representando o conjunto de
     índices especificados por ‘range(start, stop, step)’.  Os
     argumentos 'start' e 'step' têm o padrão ‘None’.

     Objetos fatia têm atributos de dados somente leitura ‘start’,
     ‘stop’ e ‘step’ que simplesmente retornam os valores dos argumentos
     (ou seus padrões).  Eles não possuem outra funcionalidade
     explícita; no entanto, eles são usados pelo NumPy e outros pacotes
     de terceiros.

      -- Atributo: start

      -- Atributo: stop

      -- Atributo: step

     Objetos fatia também são gerados quando a sintaxe de indexação
     estendida é usada.  Por exemplo: ‘a[start:stop:step]’ ou
     ‘a[start:stop, i]’.  Veja *note itertools.islice(): b61. para uma
     versão alternativa que retorna um *note iterador: 1ac.

     Alterado na versão 3.12: Os objetos slice agora são *note
     hasheáveis: 610. (desde que *note start: 20e8, *note stop: 20e9. e
     *note step: 20ea. sejam hasheáveis).

 -- Função: sorted (iterable, /, *, key=None, reverse=False)

     Retorna uma nova lista classificada dos itens em 'iterable'.

     Possui dois argumentos opcionais que devem ser especificados como
     argumentos nomeados.

     'key' especifica a função de um argumento usado para extrair uma
     chave de comparação de cada elemento em 'iterable' (por exemplo,
     ‘key=str.lower’).  O valor padrão é ‘None’ (compara os elementos
     diretamente).

     'reverse' é um valor booleano.  Se definido igual a ‘True’, então
     os elementos da lista são classificados como se cada comparação
     estivesse invertida.

     Usa *note functools.cmp_to_key(): 121a. para converter a função das
     antigas 'cmp' para uma função 'key'.

     A função embutida *note sorted(): be7. é garantida como estável.
     Uma ordenação é estável se garantir não alterar a ordem relativa
     dos elementos que se comparam da mesma forma — isso é útil para
     ordenar em várias passagens (por exemplo, ordenar por departamento
     e depois por nível de salário).

     O algoritmo de classificação usa apenas comparações ‘<’ entre
     itens.  Embora definir um método *note __lt__(): 12e2. seja
     suficiente para ordenação, PEP 8(5) recomenda que todas as seis
     *note comparações ricas: 2205. sejam implementadas.  Isso ajudará a
     evitar erros ao usar os mesmos dados com outras ferramentas de
     ordenação, como *note max(): f3b, que dependem de um método
     subjacente diferente.  Implementar todas as seis comparações também
     ajuda a evitar confusão para comparações de tipo misto que podem
     chamar o método espelhado *note __gt__(): 1350.

     Para exemplos de classificação e um breve tutorial de
     classificação, veja *note Técnicas de ordenação: 2314.

 -- Função: @staticmethod

     Transforma um método em método estático.

     Um método estático não recebe um primeiro argumento implícito.
     Para declarar um método estático, use este idioma:

          class C:
              @staticmethod
              def f(arg1, arg2, argN): ...

     A forma ‘@staticmethod’ é uma função de *note decorador: 731. –
     veja *note Definições de função: 1db6. para detalhes.

     Um método estático pode ser chamado na classe (tal como ‘C.f()’) ou
     em uma instância (tal como ‘C().f()’).  Além disso, o *note
     descritor: 1658. de método estático também é um chamável, então ele
     pode ser usado na definição de classe (como ‘f()’).

     Métodos estáticos em Python são similares àqueles encontrados em
     Java ou C++.  Veja também *note classmethod(): 166. para uma
     variante útil na criação de construtores de classe alternativos.

     Como todos os decoradores, também é possível chamar ‘staticmethod’
     como uma função regular e fazer algo com seu resultado.  Isso é
     necessário em alguns casos em que você precisa de uma referência
     para uma função de um corpo de classe e deseja evitar a
     transformação automática em método de instância.  Para esses casos,
     use este idioma:

          def função_comum():
              ...

          class C:
              método = staticmethod(função_comum)

     Para mais informações sobre métodos estáticos, consulte *note A
     hierarquia de tipos padrão: 2075.

     Alterado na versão 3.10: Métodos estáticos agora herdam os
     atributos do método (*note __module__: 208e, *note __name__: 1317,
     *note __qualname__: 208d, *note __doc__: 1219. e *note
     __annotations__: 1218.), têm um novo atributo ‘__wrapped__’ e são
     agora chamáveis como funções regulares.

 -- Classe: str (*, encoding='utf-8', errors='strict')

 -- Classe: str (object)

 -- Classe: str (object, encoding, errors='strict')

 -- Classe: str (object, *, errors)

     Retorna uma versão *note str: 44c. de 'object'.  Consulte *note
     str(): 44c. para detalhes.

     ‘str’ é uma *note classe: 1a8a. de string embutida.  Para
     informações gerais sobre strings, consulte *note Tipo sequência de
     texto — str: 1d7a.

 -- Função: sum (iterable, /, start=0)

     Soma 'start' e os itens de um 'iterable' da esquerda para a direita
     e retornam o total.  Os itens do 'iterable' são normalmente números
     e o valor inicial não pode ser uma string.

     Para alguns casos de uso, existem boas alternativas para *note
     sum(): 46a.  A maneira rápida e preferida de concatenar uma
     sequência de strings é chamando ‘''.join(sequence)’.  Para
     adicionar valores de ponto flutuante com precisão estendida,
     consulte *note math.fsum(): 141b.  Para concatenar uma série de
     iteráveis, considere usar *note itertools.chain(): 2315.

     Alterado na versão 3.8: O parâmetro 'start' pode ser especificado
     como um argumento nomeado.

     Alterado na versão 3.12: A soma dos pontos flutuantes foi alterada
     para um algoritmo que oferece maior precisão e melhor
     comutatividade na maioria das compilações.

 -- Classe: super

 -- Classe: super (type, object_or_type=None, /)

     Retorna um objeto proxy que delega chamadas de método a uma classe
     pai ou irmão do 'type'.  Isso é útil para acessar métodos herdados
     que foram substituídos em uma classe.

     O 'object_or_type' determina a *note ordem de resolução de métodos:
     2316. a ser pesquisada.  A pesquisa inicia a partir da classe logo
     após o 'type'.

     Por exemplo, se *note __mro__: 20bb. de 'object_or_type' é ‘D -> B
     -> C -> A -> object’ e o valor de 'type' é ‘B’, então *note
     super(): 4db. procura por ‘C -> A -> object’.

     O atributo *note __mro__: 20bb. da classe correspondente ao
     'object_or_type' lista a ordem de pesquisa de resolução de método
     usada por *note getattr(): bea. e *note super(): 4db.  O atributo é
     dinâmico e pode mudar sempre que a hierarquia da herança é
     atualizada.

     Se o segundo argumento for omitido, o objeto super retornado é
     desacoplado.  Se o segundo argumento é um objeto, ‘isinstance(obj,
     type)’ deve ser verdadeiro.  Se o segundo argumento é um tipo,
     ‘issubclass(type2, type)’ deve ser verdadeiro (isto é útil para
     classmethods).

     Quando chamado diretamente de dentro de um método comum de uma
     classe, pode-se omitir ambos os argumentos (”‘super()’ de zero
     argumentos”).  Neste caso, 'type' será a classe em questão, e 'obj'
     será o primeiro argumento da função que imediatamente chamou
     ‘super()’ (geralmente o ‘self’).  (Isso significa que o ‘super()’
     de zero argumentos não vai funcionar como esperado em funções
     aninhadas, incluindo expressões geradoras, que criam funções
     aninhadas implicitamente.)

     Existem dois casos de uso típicos para 'super'.  Em uma hierarquia
     de classes com herança única, 'super' pode ser usado para se
     referir a classes base sem nomeá-las explicitamente, tornando o
     código mais sustentável.  Esse uso é paralelo ao uso de 'super' em
     outras linguagens de programação.

     O segundo caso de uso é oferecer suporte à herança múltipla
     cooperativa em um ambiente de execução dinâmica.  Esse caso de uso
     é exclusivo do Python e não é encontrado em idiomas ou linguagens
     compiladas estaticamente que suportam apenas herança única.  Isso
     torna possível implementar “diagramas em losango”, onde várias
     classes base implementam o mesmo método.  Um bom design exige que
     tais implementações tenham a mesma assinatura de chamada em todos
     os casos (porque a ordem das chamadas é determinada em tempo de
     execução, porque essa ordem se adapta às alterações na hierarquia
     de classes e porque essa ordem pode incluir classes de irmãos
     desconhecidas antes do tempo de execução).

     Nos dois casos de uso, uma chamada típica de superclasse se parece
     com isso:

          class C(B):
              def método(self, arg):
                  super().método(arg)    # Isso faz o mesmo que:
                                         # super(C, self).método(arg)

     Além das pesquisas de método, *note super(): 4db. também funciona
     para pesquisas de atributo.  Um possível caso de uso para isso é
     chamar *note descritores: 1658. em uma classe pai ou irmã.

     Observe que *note super(): 4db. é implementada como parte do
     processo de vinculação para procura explícita de atributos com
     ponto, tal como ‘super().__getitem__(nome)’.  Ela faz isso
     implementando seu próprio método *note __getattribute__(): beb.
     para pesquisar classes em uma ordem predizível que possui suporte a
     herança múltipla cooperativa.  Logo, *note super(): 4db. não é
     definida para procuras implícitas usando instruções ou operadores
     como ‘super()[name]’.

     Observe também que, além da forma de argumento zero, *note super():
     4db. não se limita ao uso de métodos internos.  O formulário de
     dois argumentos especifica exatamente os argumentos e faz as
     referências apropriadas.  O formulário de argumento zero funciona
     apenas dentro de uma definição de classe, pois o compilador
     preenche os detalhes necessários para recuperar corretamente a
     classe que está sendo definida, além de acessar a instância atual
     para métodos comuns.

     Para sugestões práticas sobre como projetar classes cooperativas
     usando *note super(): 4db, consulte o guia para uso de super()(6).

 -- Classe: tuple (iterable=(), /)

     Ao invés de ser uma função, *note tuple: 370. é na verdade um tipo
     de sequência imutável, conforme documentado em *note Tuplas: 2280.
     e *note Tipos sequências — list, tuple, range: 1dcc.

 -- Classe: type (object, /)

 -- Classe: type (name, bases, dict, /, **kwargs)

     Com um argumento, retorna o tipo de um 'object'.  O valor de
     retorno é um tipo de objeto e geralmente o mesmo objeto retornado
     por *note object.__class__: 14f5.

     A função embutida *note isinstance(): 442. é recomendada para
     testar o tipo de um objeto, porque ela leva sub-classes em
     consideração.

     Com três argumentos, retorna um novo objeto type.  Esta é
     essencialmente a forma dinâmica da instrução *note class: 131a.  A
     string 'name' é o nome da classe e se torna o atributo *note
     __name__: 14f3.  A tupla 'bases' contém as classes bases e se torna
     o atributo *note __bases__: 14f4.; se vazio, *note object: a96, a
     base final de todas as classes é adicionada.  O dicionário 'dict'
     contém definições de atributo e método para o corpo da classe; ele
     pode ser copiado ou envolto antes de se tornar o atributo *note
     __dict__: c78.  As duas instruções a seguir criam objetos ‘type’
     idênticos:

          >>> class X:
          ...     a = 1
          ...
          >>> X = type('X', (), dict(a=1))

     Veja também:

        * *note Documentação sobre atributos e métodos em classes: 20b3.

        * *note Objetos tipo: 2317.

     Argumentos nomeados fornecidos para a forma de três argumentos são
     passados para a máquina metaclasse apropriada (geralmente *note
     __init_subclass__(): 631.) da mesma forma que palavras-chave em uma
     definição de classe (além de 'metaclasse') fariam.

     Veja também *note Personalizando a criação de classe: c66.

     Alterado na versão 3.6: Subclasses de ‘type’ que não substituem
     ‘type.__new__’ não podem mais usar a forma com apenas um argumento
     para obter o tipo de um objeto.

 -- Função: vars ()

 -- Função: vars (object, /)

     Retorna o atributo *note __dict__: 55b. para um módulo, classe,
     instância, or qualquer outro objeto com um atributo ‘__dict__’.

     Objetos como modelos e instâncias têm um atributo atualizável *note
     __dict__: 55b.; porém, outros projetos podem ter restrições de
     escrita em seus atributos ‘__dict__’ (por exemplo, classes usam um
     *note types.MappingProxyType: 46d. para prevenir atualizações
     diretas a dicionário).

     Sem nenhum argumento, *note vars(): 1bba. age como *note locals():
     141.

     Uma exceção *note TypeError: 2c3. é levantada se um objeto é
     especificado, mas ela não tem um atributo *note __dict__: 55b. (por
     exemplo, se sua classe define o atributo *note __slots__: 1533.).

     Alterado na versão 3.13: O resultado de chamar esta função sem um
     argumento foi atualizado conforme descrito na embutida *note
     locals(): 141.

 -- Função: zip (*iterables, strict=False)

     Itera sobre vários iteráveis em paralelo, produzindo tuplas com um
     item de cada um.

     Exemplo:

          >>> for item in zip([1, 2, 3], ['açúcar', 'tempero', 'tudo que há de bom']):
          ...     print(item)
          ...
          (1, 'açúcar')
          (2, 'tempero')
          (3, 'tudo que há de bom')

     Mais formalmente: *note zip(): 7d1. retorna um iterador de tuplas,
     onde a 'i'-ésima tupla contém o 'i'-ésimo elemento de cada um dos
     iteráveis do argumento.

     Outra maneira de pensar em *note zip(): 7d1. é que ela transforma
     linhas em colunas e colunas em linhas.  Isso é semelhante a
     transpor uma matriz(7).

     *note zip(): 7d1. é preguiçoso: Os elementos não serão processados
     até que o iterável seja iterado.  Por exemplo, por um loop ‘for’ ou
     por um *note list: 611.

     Uma coisa a considerar é que os iteráveis passados para *note
     zip(): 7d1. podem ter comprimentos diferentes; às vezes por design
     e às vezes por causa de um bug no código que preparou esses
     iteráveis.  Python oferece três abordagens diferentes para lidar
     com esse problema:

        * Por padrão, *note zip(): 7d1. para quando o iterável mais
          curto se esgota.  Ele irá ignorar os itens restantes nos
          iteráveis mais longos, cortando o resultado para o comprimento
          do iterável mais curto:

               >>> list(zip(range(3), ['fi', 'fa', 'fo', 'fum']))
               [(0, 'fi'), (1, 'fa'), (2, 'fo')]

        * *note zip(): 7d1. é frequentemente usado em casos onde os
          iteráveis são considerados de tamanho igual.  Nesses casos, é
          recomendado usar a opção ‘strict=True’.  Sua saída é a mesma
          do *note zip(): 7d1.:: normal

               >>> list(zip(('a', 'b', 'c'), (1, 2, 3), strict=True))
               [('a', 1), ('b', 2), ('c', 3)]

          Ao contrário do comportamento padrão, ele levanta uma exceção
          *note ValueError: 202. se um iterável for esgotado antes dos
          outros:

               >>> for item in zip(range(3), ['fee', 'fi', 'fo', 'fum'], strict=True):
               ...     print(item)
               ...
               (0, 'fee')
               (1, 'fi')
               (2, 'fo')
               Traceback (most recent call last):
                 ...
               ValueError: zip() argument 2 is longer than argument 1

          Sem o argumento ‘strict=True’, qualquer bug que resulte em
          iteráveis de diferentes comprimentos será silenciado,
          possivelmente se manifestando como um bug difícil de encontrar
          em outra parte do programa.

        * Iteráveis mais curtos podem ser preenchidos com um valor
          constante para fazer com que todos os iteráveis tenham o mesmo
          comprimento.  Isso é feito por *note itertools.zip_longest():
          12e0.

     Casos extremos: Com um único argumento iterável, *note zip(): 7d1.
     retorna um iterador de tuplas de um elemento.  Sem argumentos,
     retorna um iterador vazio.

     Dicas e truques:

        * A ordem de avaliação da esquerda para a direita dos iteráveis
          é garantida.  Isso torna possível um idioma para agrupar uma
          série de dados em grupos de comprimento n usando
          ‘zip(*[iter(s)]*n, strict=True)’.  Isso repete o 'mesmo'
          iterador ‘n’ vezes para que cada tupla de saída tenha o
          resultado de chamadas ‘n’ para o iterador.  Isso tem o efeito
          de dividir a entrada em pedaços de n comprimentos.

        * *note zip(): 7d1. em conjunto com o operador ‘*’ pode ser
          usado para descompactar uma lista:

               >>> x = [1, 2, 3]
               >>> y = [4, 5, 6]
               >>> list(zip(x, y))
               [(1, 4), (2, 5), (3, 6)]
               >>> x2, y2 = zip(*zip(x, y))
               >>> x == list(x2) and y == list(y2)
               True

     Alterado na versão 3.10: Adicionado o argumento ‘strict’.

 -- Função: __import__ (name, globals=None, locals=None, fromlist=(),
          level=0)

          Nota: Esta é uma função avançada que não é necessária na
          programação diária do Python, ao contrário de *note
          importlib.import_module(): 518.

     Esta função é chamada pela instrução *note import: 5e2.  Ela pode
     ser substituída (importando o módulo *note builtins: 12. e
     atribuindo a ‘builtins.__import__’) para alterar a semântica da
     instrução ‘import’, mas isso é 'fortemente' desencorajado, pois
     geralmente é mais simples usar ganchos de importação (consulte PEP
     302(8)) para atingir os mesmos objetivos e não causa problemas com
     o código que pressupõe que a implementação de importação padrão
     esteja em uso.  O uso direto de *note __import__(): 8da. também é
     desencorajado em favor de *note importlib.import_module(): 518.

     A função importa o módulo 'name', potencialmente usando os dados
     'globals' e 'locals' para determinar como interpretar o nome em um
     contexto de pacote.  O 'fromlist' fornece os nomes de objetos ou
     submódulos que devem ser importados do módulo, fornecidos por
     'name'.  A implementação padrão não usa seu argumento 'locals' e
     usa seus 'globals' apenas para determinar o contexto do pacote da
     instrução *note import: 5e2.

     'level' especifica se é necessário usar importações absolutas ou
     relativas.  ‘0’ (o padrão) significa apenas realizar importações
     absolutas.  Valores positivos para 'level' indicam o número de
     diretórios pai a serem pesquisados em relação ao diretório do
     módulo que chama *note __import__(): 8da. (consulte PEP 328(9) para
     obter detalhes).

     Quando a variável 'name' está no formato ‘pacote.módulo’,
     normalmente, o pacote de nível superior (o nome até o primeiro
     ponto) é retornado, 'não' o módulo nomeado por 'name'.  No entanto,
     quando um argumento 'fromlist' não vazio é fornecido, o módulo
     nomeado por 'name' é retornado.

     Por exemplo, a instrução ‘import spam’ resulta em bytecode
     semelhante ao seguinte código:

          spam = __import__('spam', globals(), locals(), [], 0)

     A instrução ‘import spam.presunto’ resulta nesta chamada:

          spam = __import__('spam.presunto', globals(), locals(), [], 0)

     Observe como *note __import__(): 8da. retorna o módulo de nível
     superior aqui, porque este é o objeto vinculado a um nome pela
     instrução *note import: 5e2.

     Por outro lado, a instrução ‘from spam.presunto import ovos,
     salsicha as sals’ resulta em

          _temp = __import__('spam.presunto', globals(), locals(), ['ovos', 'salsicha'], 0)
          ovos = _temp.ovos
          sals = _temp.salsicha

     Aqui, o módulo ‘spam.ham’ é retornado de *note __import__(): 8da.
     A partir desse objeto, os nomes a serem importados são recuperados
     e atribuídos aos seus respectivos nomes.

     Se você simplesmente deseja importar um módulo (potencialmente
     dentro de um pacote) pelo nome, use *note
     importlib.import_module(): 518.

     Alterado na versão 3.3: Valores negativos para 'level' não são mais
     suportados (o que também altera o valor padrão para 0).

     Alterado na versão 3.9: Quando as opções de linha de comando *note
     -E: 964. ou *note -I: 965. estão sendo usadas, a variável de
     ambiente *note PYTHONCASEOK: 963. é agora ignorada.

   ---------- Footnotes ----------

   (1) Observe que o analisador sintático aceita apenas a convenção de
fim de linha no estilo Unix.  Se você estiver lendo o código de um
arquivo, use o modo de conversão de nova linha para converter novas
linhas no estilo Windows ou Mac.

   (2) https://peps.python.org/pep-0709/

   (3) https://peps.python.org/pep-0667/

   (4) https://peps.python.org/pep-0475/

   (5) https://peps.python.org/pep-0008/

   (6) 
https://rhettinger.wordpress.com/2011/05/26/super-considered-super/

   (7) https://en.wikipedia.org/wiki/Transpose

   (8) https://peps.python.org/pep-0302/

   (9) https://peps.python.org/pep-0328/


File: python.info,  Node: Constantes embutidas,  Next: Tipos embutidos,  Prev: Funções embutidas<3>,  Up: A Biblioteca Padrão do Python

5.3 Constantes embutidas
========================

Um pequeno número de constantes são definidas no espaço de nomes
embutido da linguagem.  São elas:

 -- Dado: False

     O valor falso do tipo *note bool: 468.  As atribuições a ‘False’
     são ilegais e levantam *note SyntaxError: 18d.

 -- Dado: True

     O valor verdadeiro do tipo *note bool: 468.  As atribuições a
     ‘True’ são ilegais e levantam *note SyntaxError: 18d.

 -- Dado: None

     Um objeto frequentemente usado para representar a ausência de um
     valor, como quando os argumentos padrões não são passados para uma
     função.  As atribuições a ‘None’ são ilegais e levantam *note
     SyntaxError: 18d.  ‘None’ é a única instância do tipo *note
     NoneType: 855.

 -- Dado: NotImplemented

     Um valor especial que deve ser retornado pelos métodos binários
     especiais (por exemplo: *note __eq__(): b0d, *note __lt__(): 12e2,
     *note __add__(): 2121, *note __rsub__(): 2131, etc.)  não é
     implementado em relação ao outro tipo; pode ser retornado pelos
     métodos especiais binários no local (por exemplo: *note __imul__():
     2126, *note __iand__(): 2140, etc.)  para o mesmo propósito.  Ele
     não deve ser avaliado em um contexto booleano.  ‘NotImplemented’ é
     a única instância do tipo *note types.NotImplementedType: 856.

          Nota: Quando um método binário (ou local) retorna
          ‘NotImplemented’, o interpretador tentará a operação refletida
          no outro tipo (ou algum outro fallback, dependendo do
          operador).  Se todas as tentativas retornarem
          ‘NotImplemented’, o interpretador levantará uma exceção
          apropriada.  Retornar incorretamente ‘NotImplemented’
          resultará em uma mensagem de erro enganosa ou no valor
          ‘NotImplemented’ sendo retornado ao código Python.

          Consulte *note Implementando as operações aritméticas: 2078.
          para ver exemplos.

          Cuidado: ‘NotImplemented’ e ‘NotImplementedError’ não são
          intercambiáveis.  Esta constante deve ser usada somente
          conforme descrito acima; veja *note NotImplementedError: 228.
          para detalhes sobre o uso correto da exceção.

     Alterado na versão 3.9: A avaliação de ‘NotImplemented’ em um
     contexto booleano foi descontinuado.  Embora atualmente seja
     avaliado como verdadeiro, ele emitirá um *note DeprecationWarning:
     1a5.  Ele levantará uma *note TypeError: 2c3. em uma versão futura
     do Python.

 -- Dado: Ellipsis

     O mesmo que o literal de reticências “‘...’”, um objeto
     frequentemente usado para indicar que algo foi omitido.  A
     atribuição a ‘Ellipsis’ é possível, mas a atribuição a ‘...’
     levanta um *note SyntaxError: 18d.  ‘Ellipsis’ é a única instância
     do tipo *note types.EllipsisType: 854.

 -- Dado: __debug__

     Esta constante é verdadeira se o Python não foi iniciado com uma
     opção *note -O: ddd.  Veja também a instrução *note assert: 96f.

     Nota: Os nomes *note None: 675, *note False: b49, *note True: c27.
     e *note __debug__: 7db. não podem ser reatribuídos (atribuições a
     eles, mesmo como um nome de atributo, levantam *note SyntaxError:
     18d. ), para que possam ser consideradas “verdadeiras” constantes.

* Menu:

* Constantes adicionadas pelo módulo site::


File: python.info,  Node: Constantes adicionadas pelo módulo site,  Up: Constantes embutidas

5.3.1 Constantes adicionadas pelo módulo ‘site’
-----------------------------------------------

O módulo *note site: c7. (que é importado automaticamente durante a
inicialização, exceto se a opção de linha de comando *note -S: 11e7. for
fornecida) adiciona várias constantes ao espaço de nomes embutido.  Eles
são úteis para o console do interpretador interativo e não devem ser
usados em programas.

 -- Dado: quit (code=None)
 -- Dado: exit (code=None)

     Objetos que, quando exibidos, exibem uma mensagem como “Use quit()
     or Ctrl-D (i.e.  EOF) to exit” e, quando acessados diretamente no
     interpretador interativo ou chamados como funções, levantam *note
     SystemExit: d63. com o código de saída especificado.

 -- Dado: help

     Objeto que, quando exibido, exibe a mensagem “Type help() for
     interactive help, or help(object) for help about object.” e, quando
     acessado diretamente no interpretador interativo, invoca o sistema
     de ajuda embutido (veja *note help(): 8dd.).

 -- Dado: copyright
 -- Dado: credits

     Objetos que ao serem impressos ou chamados, imprimem o texto dos
     direitos autorais ou créditos, respectivamente.

 -- Dado: license

     Objeto que, quando impresso, imprime a mensagem “Type license() to
     see the full license text” e, quando chamado, exibe o texto
     completo da licença de maneira semelhante a um paginador (uma tela
     por vez).


File: python.info,  Node: Tipos embutidos,  Next: Exceções embutidas,  Prev: Constantes embutidas,  Up: A Biblioteca Padrão do Python

5.4 Tipos embutidos
===================

As seções a seguir descrevem os tipos padrão que são embutidos ao
interpretador.

Os principais tipos embutidos são numéricos, sequências, mapeamentos,
classes, instâncias e exceções.

Algumas classes de coleção são mutáveis.  Os métodos que adicionam,
subtraem ou reorganizam seus membros no lugar, e não retornam um item
específico, nunca retornam a instância da coleção propriamente dita, mas
um ‘None’.

Algumas operações são suportadas por vários tipos de objetos; em
particular, praticamente todos os objetos podem ser comparados em termos
de igualdade, testados quanto ao valor verdade e convertidos em uma
string (com a função *note repr(): 800. ou a função ligeiramente
diferente *note str(): 44c.).  A última função é implicitamente usada
quando um objeto é escrito pela função *note print(): fa9.

* Menu:

* Teste do valor verdade::
* Operações booleanas — and, or, not: Operações booleanas — and or not.
* Comparações: Comparações<2>.
* Tipos numéricos — int, float, complex: Tipos numéricos — int float complex.
* Tipo booleano - bool::
* Tipos iteradores::
* Tipos sequências — list, tuple, range: Tipos sequências — list tuple range.
* Tipo sequência de texto — str::
* Tipos de sequência binária — bytes, bytearray, memoryview: Tipos de sequência binária — bytes bytearray memoryview.
* Tipo conjuntos — set, frozenset: Tipo conjuntos — set frozenset.
* Tipo mapeamento — dict::
* Tipos de Gerenciador de Contexto::
* Tipos de anotação de tipo — Apelido genérico, União: Tipos de anotação de tipo — Apelido genérico União.
* Outros tipos embutidos::
* Atributos Especiais::
* Limitação de comprimento de string na conversão para inteiro::


File: python.info,  Node: Teste do valor verdade,  Next: Operações booleanas — and or not,  Up: Tipos embutidos

5.4.1 Teste do valor verdade
----------------------------

Qualquer objeto pode ser testado quanto ao valor verdade, para uso em
uma condição *note if: 2f3. ou *note while: 1d82. ou como operando das
operações booleanas abaixo.

Por padrão, um objeto é considerado verdadeiro, a menos que sua a classe
defina um método *note __bool__(): 1318. que retorne ‘False’ ou um
método *note __len__(): 15b4. que retorna zero, quando chamado com o
objeto.  (1)  Aqui estão a maioria dos objetos embutidos considerados
falsos:

   * constantes definidas para serem falsas: ‘None’ e ‘False’

   * zero de qualquer tipo numérico: ‘0’, ‘0.0’, ‘0j’, ‘Decimal(0)’,
     ‘Fraction(0, 1)’

   * sequências e coleções vazias: ‘''’, ‘()’, ‘[]’, ‘{}’, ‘set()’,
     ‘range(0)’

Operações e funções embutidas que têm um resultado Booleano retornam ‘0’
ou ‘False’ para falso e ‘1’ ou ‘True’ para verdadeiro, salvo indicações
ao contrário.  (Exceção importante: as operações Booleanas ‘or’ e ‘and’
sempre retornam um de seus operandos.)

   ---------- Footnotes ----------

   (1) Informações adicionais sobre esses métodos especiais podem ser
encontradas no Manual de Referência do Python (*note Customização
básica: 20ef.).


File: python.info,  Node: Operações booleanas — and or not,  Next: Comparações<2>,  Prev: Teste do valor verdade,  Up: Tipos embutidos

5.4.2 Operações booleanas — ‘and’, ‘or’, ‘not’
----------------------------------------------

Esses são as operações booleanas, ordenados por prioridade ascendente:

Operação          Resultado                             Notas
                                                        
--------------------------------------------------------------------
                                                        
‘x or y’          se 'x' é true, então 'x', do          (1)
                  contrário 'y'                         
                  
                                                        
‘x and y’         se 'x' é falso, então 'x', do         (2)
                  contrário 'y'                         
                  
                                                        
‘not x’           se 'x' é falso, então ‘True’, caso    (3)
                  contrário ‘False’                     
                  

Notas:

  1. Esse é um operador de curto-circuito, por isso só avalia o segundo
     argumento se o primeiro é falso.

  2. Este é um operador de curto-circuito, por isso só avalia o segundo
     argumento se o primeiro é verdadeiro.

  3. ‘not’ tem uma prioridade mais baixa do que operadores não
     booleanos, então ‘not a == b’ é interpretado como ‘not (a == b)’ e
     ‘a == not b’ é um erro de sintaxe.


File: python.info,  Node: Comparações<2>,  Next: Tipos numéricos — int float complex,  Prev: Operações booleanas — and or not,  Up: Tipos embutidos

5.4.3 Comparações
-----------------

Há oito operadores comparativos no Python.  Todos eles possuem a mesma
prioridade (que é maior do que aquela das operações Booleanas).
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 (porém em ambos os casos 'z' não é avaliado de todo quando ‘x <
y’ é sabido ser falso).

Esta tabela resume as operações de comparação:

Operação         Significado
                 
-----------------------------------------------
                 
‘<’              estritamente menor que
                 
                 
‘<=’             menor que ou igual
                 
                 
‘>’              estritamente maior que
                 
                 
‘>=’             maior que ou igual
                 
                 
‘==’             igual
                 
                 
‘!=’             não é igual
                 
                 
‘is’             identidade do objeto
                 
                 
‘is not’         identidade de objeto negada
                 

Unless stated otherwise, objects of different types never compare equal.
The ‘==’ operator is always defined but for some object types (for
example, class objects) is equivalent to *note is: 2f5.  The ‘<’, ‘<=’,
‘>’ and ‘>=’ operators are only defined where they make sense; for
example, they raise a *note TypeError: 2c3. exception when one of the
arguments is a complex number.

Instâncias não idênticas de uma classe normalmente comparam-se como
desiguais ao menos que a classe defina o método *note __eq__(): b0d.

Instâncias de uma classe não podem ser ordenadas com respeito a outras
instâncias da mesma classe, ou outros tipos de objeto, ao menos que a
classe defina o suficiente dos métodos *note __lt__(): 12e2, *note
__le__(): 134f, *note __gt__(): 1350. e *note __ge__(): 1351. (no geral,
*note __lt__(): 12e2. e *note __eq__(): b0d. são suficientes, se você
quiser o significado convencional dos operadores de comparação).

O comportamento dos operadores *note is: 2f5. e *note is not: 220c. não
pode ser personalizado; além disso eles podem ser aplicados a quaisquer
dois objetos e nunca levantam uma exceção.

Mais duas operações com a mesma prioridade sintática, *note in: 2f4. e
*note not in: 62f, são suportadas por tipos que são *note iteráveis:
1268. ou implementam o método *note __contains__(): 1400.


File: python.info,  Node: Tipos numéricos — int float complex,  Next: Tipo booleano - bool,  Prev: Comparações<2>,  Up: Tipos embutidos

5.4.4 Tipos numéricos — ‘int’, ‘float’, ‘complex’
-------------------------------------------------

Existem três tipos numéricos distintos: 'inteiros', 'números de ponto
flutuante' e 'números complexos'.  Além disso, os booleanos são um
subtipo de números inteiros.  Inteiros têm precisão ilimitada.  Números
de ponto flutuante são geralmente implementados usando double em C;
informações sobre a precisão e representação interna dos números de
ponto flutuante para a máquina na qual seu programa está sendo executado
estão disponíveis em *note sys.float_info: 1b62.  Números complexos têm
uma parte real e imaginária, cada um com um número de ponto flutuante.
Para extrair essas partes de um número complexo 'z', use ‘z.real’ e
‘z.imag’.  (A biblioteca padrão inclui os tipos numéricos adicionais
*note fractions.Fraction: 1e7, para racionais, e *note decimal.Decimal:
29d, para números de ponto flutuante com precisão definida pelo
usuário.)

Números são criados por literais numéricos ou como resultado de
operadores e funções embutidas.  Integrais literais planos (incluindo
números hexadecimais, octais e binários) culminam em integrais.
Literais numéricos contendo um ponto decimal ou um sinal exponencial
resultam em números de ponto flutuante.  Anexando ‘'j'’ ou ‘'J'’ para um
literal numérico resulta em um número imaginário (um número complexo com
uma parte real zero) com a qual você pode adicionar a um integral ou
flutuante para receber um número complexo com partes reais e
imaginárias.

Python suporta completamente aritmética mista: quando um operador de
aritmética binária tem operandos de tipos numéricos diferentes, o
operando com o tipo “mais estreito” é ampliado para o tipo do outro
operando, onde um inteiro é mais estreito do que um ponto flutuante, que
por sua vez é mais estreito que um número complexo.  Uma comparação
entre números de diferentes tipos se comporta como se os valores exatos
desses números estivessem sendo comparados.  (1)

Os construtores *note int(): 257, *note float(): 2f7, e *note complex():
2f8. podem ser usados para produzir números de um tipo específico.

Todos os tipos numéricos (exceto complexos) suportam as seguintes
operações (para prioridades das operações, consulte *note Precedência de
operadores: 2221.):

Operação                  Resultado                             Notas         Documentação completa
                                                                              
-------------------------------------------------------------------------------------------------------
                                                                              
‘x + y’                   soma de 'x' e 'y'
                          
                                                                              
‘x - y’                   diferença de 'x' e 'y'
                          
                                                                              
‘x * y’                   produto de 'x' e 'y'
                          
                                                                              
‘x / y’                   quociente de 'x' e 'y'
                          
                                                                              
‘x // y’                  piso do quociente de 'x' e 'y'        (1)(2)
                                                                
                                                                              
‘x % y’                   restante de ‘x / y’                   (2)
                                                                
                                                                              
‘-x’                      'x' negado
                          
                                                                              
‘+x’                      'x' inalterado
                          
                                                                              
‘abs(x)’                  valor absoluto ou magnitude de 'x'                  *note abs(): 1e2d.
                                                                              
                                                                              
‘int(x)’                  'x' convertido em inteiro             (3)(6)        *note int(): 257.
                                                                              
                                                                              
‘float(x)’                'x' convertido em ponto flutuante     (4)(6)        *note float(): 2f7.
                                                                              
                                                                              
‘complex(re, im)’         um número complexo com parte real     (6)           *note complex(): 2f8.
                          're', parte imaginária 'im'.  'im'                  
                          tem como padrão zero.
                          
                                                                              
‘c.conjugate()’           conjugado do número complexo 'c'
                          
                                                                              
‘divmod(x, y)’            o par ‘(x // y, x % y)’               (2)           *note divmod(): 9a9.
                                                                              
                                                                              
‘pow(x, y)’               'x' elevado a 'y'                     (5)           *note pow(): 9da.
                                                                              
                                                                              
‘x ** y’                  'x' elevado a 'y'                     (5)
                                                                

Notas:

  1. Também referido como uma divisão inteira.  Para operandos do tipo
     *note int: 257, o resultado tem o tipo *note int: 257.; Para
     operandos do tipo *note float: 2f7, o resultado tem o tipo *note
     float: 2f7.  Em geral o resultado é inteiro como todo, apesar do
     tipo do resultado não necessariamente ser *note int: 257.  O
     resultado é sempre arredondado para menos infinito: ‘1//2’ é ‘0’,
     ‘(-1)//2’ é ‘-1’, ‘1//(-2)’ é ‘-1’ e ‘(-1)//(-2)’ é ‘0’.

  2. Não para números complexos.  Ao invés disso, converte para pontos
     flutuantes usando *note abs(): 1e2d. se for apropriado.

  3. 
     Conversão de *note float: 2f7. para *note int: 257. trunca,
     descartando a parte fracionária.  Veja as funções *note
     math.floor(): 1404. e *note math.ceil(): 1405. para conversões
     alternativas.

  4. ponto flutuante também aceita a string “nan” e “inf” com um prefixo
     opcional “+” ou “-” a Não é um Número (NaN) e infinidade positiva
     ou negativa.

  5. Python define ‘pow(0, 0)’ e ‘0 ** 0’ sendo ‘1’, como é comum para
     linguagens de programação.

  6. Os literais numéricos aceitos incluem os dígitos de ‘0’ a ‘9’ ou
     qualquer equivalente Unicode (pontos de código com a propriedade
     ‘Nd’).

     Veja o Unicode Standard(2) para obter uma lista completa de pontos
     de código com a propriedade ‘Nd’.

Todos os tipos *note numbers.Real: 232b. (*note int: 257. e *note float:
2f7.) também incluem as seguintes operações.

Operação                 Resultado
                         
---------------------------------------------------------------------------
                         
*note math.trunc(x): 1406.'x' truncado para *note Integral: 214b.
                         
                         
*note round(x[, n]): 131d.'x' arredondado para 'n' dígitos, arredondando
                         metade para igualar.  Se 'n' é omitido, ele
                         toma o padrão de 0.
                         
                         
*note math.floor(x): 1404.o maior *note Integral: 214b. <= 'x'
                         
                         
*note math.ceil(x): 1405.pelo menos *note Integral: 214b. >= 'x'
                         

Para operações numéricas adicionais, consulte os módulos *note math: 8e.
e *note cmath: 18.

* Menu:

* Operações de bits em tipos inteiros::
* Métodos adicionais em tipos inteiros::
* Métodos adicionais em ponto flutuante::
* Hashing de tipos numéricos::

   ---------- Footnotes ----------

   (1) Como uma consequência, a lista ‘[1, 2]’ é considerada igual a
‘[1.0, 2.0]’, e similarmente para tuplas.

   (2) 
https://unicode.org/Public/UNIDATA/extracted/DerivedNumericType.txt


File: python.info,  Node: Operações de bits em tipos inteiros,  Next: Métodos adicionais em tipos inteiros,  Up: Tipos numéricos — int float complex

5.4.4.1 Operações de bits em tipos inteiros
...........................................

Operações bit a bit só fazem sentido para números inteiros.  O resultado
de operações bit a bit é calculado como se fosse realizado no
complemento de dois com um número infinito de bits de sinal.

As prioridades das operações bit a bit binárias são todas menores do que
as operações numéricas e maiores que as comparações; a operação unária
‘~’ tem a mesma prioridade que as outras operações numéricas unárias
(‘+’ e ‘-’).

Esta tabela lista as operações de bits classificadas em prioridade
ascendente:

Operação         Resultado                            Notas
                                                      
---------------------------------------------------------------------
                                                      
‘x | y’          'ou' bit a bit de 'x' e 'y'          (4)
                                                      
                                                      
‘x ^ y’          'ou exclusivo' bit a bit de 'x' e    (4)
                 'y'                                  
                 
                                                      
‘x & y’          'e' bit a bit de 'x' e 'y'           (4)
                                                      
                                                      
‘x << n’         'x' deslocado para a esquerda por    (1)(2)
                 'n' bits                             
                 
                                                      
‘x >> n’         'x' deslocado para a direita por     (1)(3)
                 'n' bits                             
                 
                                                      
‘~x’             os bits de 'x' invertidos
                 

Notas:

  1. Contagens de deslocamento negativo são ilegais e levantam uma *note
     ValueError: 202. .

  2. Um deslocamento à esquerda por 'n' bits é equivalente à
     multiplicação por ‘pow(2, n)’.

  3. Um deslocamento à direita por 'n' bits é equivalente à divisão pelo
     piso por ‘pow(2, n)’.

  4. Executar esses cálculos com pelo menos um bit extra de extensão de
     sinal na representação de complemento de dois finitos (uma largura
     de bit de trabalho ‘1 + max(x.bit_length(), y.bit_length())’ ou
     mais) é suficiente para obter o mesmo resultado como se houvesse um
     número infinito de bits de sinal.


File: python.info,  Node: Métodos adicionais em tipos inteiros,  Next: Métodos adicionais em ponto flutuante,  Prev: Operações de bits em tipos inteiros,  Up: Tipos numéricos — int float complex

5.4.4.2 Métodos adicionais em tipos inteiros
............................................

O tipo int implementa a *note classe base abstrata: 11f5. *note
numbers.Integral: 214b.  Além disso, ele provê mais alguns métodos:

 -- Método: int.bit_length ()

     Retorna o número de bits necessários para representar um inteiro em
     binário, excluindo o sinal e entrelinha zeros:

          >>> n = -37
          >>> bin(n)
          '-0b100101'
          >>> n.bit_length()
          6

     Mais precisamente, se ‘x’ for diferente de zero, então
     ‘x.bit_length()’ é o único positivo inteiro ‘k’ tal que ‘2**(k-1)
     <= abs(x) < 2**k’.  Equivalentemente, quando ‘abs(x)’ for pequeno o
     suficiente para ter um logaritmo corretamente arrendondado, então
     ‘k = 1 + int(log(abs(x), 2))’.  Se ‘x’ é zero, então
     ‘x.bit_length()’ retorna ‘0’.

     Equivalente a:

          def bit_length(self):
              s = bin(self)       # representação binária:  bin(-37) --> '-0b100101'
              s = s.lstrip('-0b') # remove zeros no início e sinal negativo
              return len(s)       # len('100101') --> 6

     Adicionado na versão 3.1.

 -- Método: int.bit_count ()

     Retorna o número de unidades na representação binária do valor
     absoluto do inteiro.  Isso também é conhecido como contagem da
     população.  Exemplo:

          >>> n = 19
          >>> bin(n)
          '0b10011'
          >>> n.bit_count()
          3
          >>> (-n).bit_count()
          3

     Equivalente a:

          def bit_count(self):
              return bin(self).count("1")

     Adicionado na versão 3.10.

 -- Método: int.to_bytes (length=1, byteorder='big', *, signed=False)

     Retorna um vetor de bytes representando um inteiro.

          >>> (1024).to_bytes(2, byteorder='big')
          b'\x04\x00'
          >>> (1024).to_bytes(10, byteorder='big')
          b'\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00'
          >>> (-1024).to_bytes(10, byteorder='big', signed=True)
          b'\xff\xff\xff\xff\xff\xff\xff\xff\xfc\x00'
          >>> x = 1000
          >>> x.to_bytes((x.bit_length() + 7) // 8, byteorder='little')
          b'\xe8\x03'

     O inteiro é representado usando 'length' bytes, e o padrão é 1.
     Uma *note OverflowError: 885. é levantada se um inteiro não é
     representável com o dado número de bytes.

     O argumento 'byteorder' determina a ordem de bytes usada para
     representar um inteiro, e o padrão é ‘"big"’.  Se o 'byteorder' é
     ‘"big"’, o byte mais significativo está no início do vetor de byte.
     Se 'byteorder' é ‘"little"’, o byte mais significativo está no
     final do vetor de byte.

     O argumento 'signed' determina aonde o modo de complemento de dois
     é usado para representar o inteiro.  Se 'signed' é ‘False’ e um
     inteiro negativo é dado, uma *note OverflowError: 885. é levantada.
     O valor padrão para 'signed' é ‘False’.

     Os valores padrão podem ser usados para transformar
     convenientemente um inteiro em um objeto de byte único:

          >>> (65).to_bytes()
          b'A'

     No entanto, ao usar os argumentos padrão, não tente converter um
     valor maior que 255 ou você obterá um *note OverflowError: 885.

     Equivalente a:

          def to_bytes(n, length=1, byteorder='big', signed=False):
              if byteorder == 'little':
                  order = range(length)
              elif byteorder == 'big':
                  order = reversed(range(length))
              else:
                  raise ValueError("byteorder must be either 'little' or 'big'")

              return bytes((n >> i*8) & 0xff for i in order)

     Adicionado na versão 3.2.

     Alterado na versão 3.11: Adicionados valores de argumento padrão
     para ‘length’ e ‘byteorder’.

 -- Método: classmethod int.from_bytes (bytes, byteorder='big', *,
          signed=False)

     Retorna o inteiro representado pelo vetor de bytes dado.

          >>> int.from_bytes(b'\x00\x10', byteorder='big')
          16
          >>> int.from_bytes(b'\x00\x10', byteorder='little')
          4096
          >>> int.from_bytes(b'\xfc\x00', byteorder='big', signed=True)
          -1024
          >>> int.from_bytes(b'\xfc\x00', byteorder='big', signed=False)
          64512
          >>> int.from_bytes([255, 0, 0], byteorder='big')
          16711680

     O argumento 'bytes' precisa ou ser um *note objeto bytes ou
     similar: d4f. ou um iterador produzindo bytes.

     O argumento 'byteorder' determina a ordem de bytes usada para
     representar um inteiro, e o padrão é ‘"big"’.  Se o 'byteorder' é
     ‘"big"’, o byte mais significativo está no início do vetor de byte.
     Se 'byteorder' é ‘"little"’, o byte mais significativo está no
     final do vetor de byte.  Para requisitar a ordem nativa de byte do
     sistema hospedeiro, use *note sys.byteorder: 2330. como o valor da
     ordem de byte.

     O argumento 'signed' indica quando o complemento de dois é usado
     para representar o inteiro.

     Equivalente a:

          def from_bytes(bytes, byteorder='big', signed=False):
              if byteorder == 'little':
                  little_ordered = list(bytes)
              elif byteorder == 'big':
                  little_ordered = list(reversed(bytes))
              else:
                  raise ValueError("byteorder must be either 'little' or 'big'")

              n = sum(b << i*8 for i, b in enumerate(little_ordered))
              if signed and little_ordered and (little_ordered[-1] & 0x80):
                  n -= 1 << 8*len(little_ordered)

              return n

     Adicionado na versão 3.2.

     Alterado na versão 3.11: Adicionado valor de argumento padrão para
     ‘byteorder’.

 -- Método: int.as_integer_ratio ()

     Retorna um par de números inteiros cuja razão é igual ao número
     inteiro original e tem um denominador positivo.  A proporção
     inteira de números inteiros (números inteiros) é sempre o número
     inteiro como numerador e ‘1’ como denominador.

     Adicionado na versão 3.8.

 -- Método: int.is_integer ()

     Retorna ‘True’.  Existe para compatibilidade com tipo pato com
     *note float.is_integer(): 2331.

     Adicionado na versão 3.12.


File: python.info,  Node: Métodos adicionais em ponto flutuante,  Next: Hashing de tipos numéricos,  Prev: Métodos adicionais em tipos inteiros,  Up: Tipos numéricos — int float complex

5.4.4.3 Métodos adicionais em ponto flutuante
.............................................

O tipo float implementa a *note classe base abstrata: 11f5. *note
numbers.Real: 232b.  float também possui os seguintes métodos
adicionais.

 -- Método: float.as_integer_ratio ()

     Retorna um par de inteiros dos quais a proporção é exatamente igual
     ao float original.  A proporção está em seus termos mais baixos e
     tem um denominador positivo.  Levanta um *note OverflowError: 885.
     em infinidades e um *note ValueError: 202. em NaNs.

 -- Método: float.is_integer ()

     Retorna ‘True’ se a instância do float for finita com o valor
     integral e ‘False’, caso contrário:

          >>> (-2.0).is_integer()
          True
          >>> (3.2).is_integer()
          False

Dois métodos suportam conversão para e de strings hexadecimais.  Uma vez
que os pontos flutuantes do Python são armazenados internamente como
números binários, a conversão de um ponto flutuante para ou de uma
string 'decimal' geralmente envolve um pequeno erro de arredondamento.
Em contraste, as strings hexadecimais permitem a representação exata e a
especificação de números de ponto flutuante.  Isso pode ser útil na
depuração e no trabalho numérico.

 -- Método: float.hex ()

     Retorna a representação de um número de ponto flutuante como uma
     string hexadecimal.  Para números de ponto flutuante finitos, essa
     representação vai sempre incluir um ‘0x’ inicial e um ‘p’ final e
     expoente.

 -- Método: classmethod float.fromhex (s)

     Método de classe para retornar um ponto flutuante representado por
     uma string hexadecimal 's'.  A string 's' pode ter espaços em
     branco iniciais e finais.

Note que *note float.hex(): 1e9b. é um método de instância, enquanto
*note float.fromhex(): 2333. é um método de classe.

Uma string hexadecimal toma a forma:

     [sign] ['0x'] integer ['.' fraction] ['p' exponent]

onde o sinal opcional ‘sign’ pode ser tanto ‘+’ or ‘-’, ‘integer’ e
‘fraction’ são strings de dígitos hexadecimais, e ‘exponent’ é um
inteiro decimal com um sinal opcional no início.  Maiúsculo ou minúsculo
não é significativo, e deve haver ao menos um dígito hexadecimal tanto
no inteiro ou na fração.  Essa sintaxe é similar à sintaxe especificada
na seção 6.4.4.2 do padrão C99, e também do da sintaxe usada no Java 1.5
em diante.  Em particular, a saída de *note float.hex(): 1e9b. é usável
como um literal hexadecimal de ponto flutuante em código C ou Java, e
strings hexadecimais produzidas pelo formato do caractere ‘%a’ do C ou
‘Double.toHexString’ do Java são aceitos pelo *note float.fromhex():
2333.

Note que o expoente é escrito em decimal ao invés de hexadecimal, e que
ele dá a potência de 2 pela qual se multiplica o coeficiente.  Por
exemplo, a string hexadecimal ‘0x3.a7p10’ representa o número de ponto
flutuante ‘(3 + 10./16 + 7./16**2) * 2.0**10’ ou ‘3740.0’:

     >>> float.fromhex('0x3.a7p10')
     3740.0

Aplicando a conversão inversa a ‘3740.0’ retorna uma string hexadecimal
diferente representada pelo mesmo número:

     >>> float.hex(3740.0)
     '0x1.d380000000000p+11'


File: python.info,  Node: Hashing de tipos numéricos,  Prev: Métodos adicionais em ponto flutuante,  Up: Tipos numéricos — int float complex

5.4.4.4 Hashing de tipos numéricos
..................................

Para números ‘x’ e ‘y’, possivelmente de diferentes tipos, é um
requisito que ‘hash(x) == hash(y)’ sempre que ‘x == y’ (veja a
documentação do método *note __hash__(): b0e. para mais detalhes).  Para
facilitar a implementação e eficiência através de uma variedade de tipos
numéricos (incluindo *note int: 257, *note float: 2f7, *note
decimal.Decimal: 29d. e *note fractions.Fraction: 1e7.), o hash do
Python para tipos numéricos é baseado em uma única função matemática que
é definida para qualquer número racional e, portanto, se aplica para
todas as instâncias de *note int: 257. e *note fractions.Fraction: 1e7,
e todas as instâncias finitas das classes *note float: 2f7. e *note
decimal.Decimal: 29d.  Essencialmente, essa função é dada pelo módulo de
redução ‘P’ para um primo fixado ‘P’.  O valor de ‘P’ é disponibilizado
ao Python como um atributo *note modulus: 2336. do *note sys.hash_info:
1035.

Atualmente, o primo usado é ‘P = 2**31 - 1’ em máquinas com longos de 32
bits do C e ‘P = 2**61 - 1’ em máquinas com longos de 64 bits do C.

Aqui estão as regras em detalhe:

   - Se ‘x = m / n’ é um número racional não negativo e ‘n’ não é
     divisível por ‘P’, define ‘hash(x)’ como ‘m * invmod(n, P) % P’,
     onde ‘invmod(n, P)’ retorna o inverso do módulo de ‘n’ com ‘P’.

   - Se ‘x = m / n’ é um número racional não negativo e ‘n’ é divisível
     por ‘P’ (porém ‘m’ não é) então ‘n’ não possui modulo ‘P’ inverso e
     a regra acima não se aplica; nesse caso defina ‘hash(x)’ para ser o
     valor constante ‘sys.hash_info.inf’.

   - Se ‘x = m / n’ é um número racional negativo, defina ‘hash(x)’ como
     ‘-hash(-x)’.  Se a hash resultante é ‘-1’, a substituo com ‘-2’.

   - Os valores particulares ‘sys.hash_info.inf’ e ‘-sys.hash_info.inf’
     são usados como valores de hash para infinidade positiva ou
     infinidade negativa (respectivamente).

   - Para número *note complex: 2f8. ‘z’, o valor da hash do número real
     partes imaginárias são combinados calculando ‘hash(z.real) +
     sys.hash_info.imag * hash(z.imag)’, módulo reduzido
     ‘2**sys.hash_info.width’ de modo que isto permaneça em
     ‘range(-2**(sys.hash_info.width - 1), 2**(sys.hash_info.width -
     1))’.  Novamente, se o resultado é ‘-1’, ele é substituído por
     ‘-2’.

Para esclarecer as regras acima, aqui estão alguns exemplos de código em
Python, equivalentes ao hash embutido, para calcular o hash de números
racionais, *note float: 2f7. ou *note complex: 2f8.:

     import sys, math

     def hash_fraction(m, n):
         """Calcula o hash de um número racional m / n.

         Presume que m e n são inteiros, com n positivo.
         Equivalente a hash(fractions.Fraction(m, n)).

         """
         P = sys.hash_info.modulus
         # Remove fatores comuns de P.  (Desnecessário se m e n são primos entre si.)
         while m % P == n % P == 0:
             m, n = m // P, n // P

         if n % P == 0:
             hash_value = sys.hash_info.inf
         else:
             # Pequeno teorema de Fermat: pow(n, P-1, P) é 1, então
             # pow(n, P-2, P) dá o inverso de n módulo P.
             hash_value = (abs(m) % P) * pow(n, P - 2, P) % P
         if m < 0:
             hash_value = -hash_value
         if hash_value == -1:
             hash_value = -2
         return hash_value

     def hash_float(x):
         """Calcula o hash de um ponto flutuante x."""

         if math.isnan(x):
             return object.__hash__(x)
         elif math.isinf(x):
             return sys.hash_info.inf if x > 0 else -sys.hash_info.inf
         else:
             return hash_fraction(*x.as_integer_ratio())

     def hash_complex(z):
         """Calcula o hash de um número complexo z."""

         hash_value = hash_float(z.real) + sys.hash_info.imag * hash_float(z.imag)
         # faz um módulo para redução de sinal 2**sys.hash_info.width
         M = 2**(sys.hash_info.width - 1)
         hash_value = (hash_value & (M - 1)) - (hash_value & M)
         if hash_value == -1:
             hash_value = -2
         return hash_value


File: python.info,  Node: Tipo booleano - bool,  Next: Tipos iteradores,  Prev: Tipos numéricos — int float complex,  Up: Tipos embutidos

5.4.5 Tipo booleano - ‘bool’
----------------------------

Booleanos representam valores verdade.  O tipo *note bool: 468. tem
exatamente duas instâncias constantes: ‘True’ e ‘False’.

A função embutida *note bool(): 468. converte qualquer valor em um
booleano, se o valor puder ser interpretado como um valor verdade
(consultar seção *note Teste do valor verdade: 162d. acima).

Para operações lógicas, use *note operadores booleanos: 2326. ‘and’,
‘or’ e ‘not’.  Ao aplicar operadores bit a bit ‘&’, ‘|’, ‘^’ a dois
booleanos, o resultado é um booleano equivalente às operações lógicas
“e”, “ou”, “xor”.  Entretanto, é preferível usar os operadores lógicos
‘and’, ‘or’ e ‘!=’ em relação aos ‘&’, ‘|’ e ‘^’.

Descontinuado desde a versão 3.12: O uso do operador de inversão bit a
bit ‘~’ foi descontinuado e levantará um erro no Python 3.16.

*note bool: 468. é uma subclasse *note int: 257. (veja *note Tipos
numéricos — int, float, complex: 1d75.).  Em diversos contextos
numéricos, ‘False’ e ‘True’ se comportam como 0 e 1, respectivamente.
Entretanto, basear-se somente nisso, é desencorajado; ao invés disso, a
conversão deve ser feita explicitamente usando *note int(): 257.


File: python.info,  Node: Tipos iteradores,  Next: Tipos sequências — list tuple range,  Prev: Tipo booleano - bool,  Up: Tipos embutidos

5.4.6 Tipos iteradores
----------------------

Python suporta o conceito de iteração por contêineres.  Isso é
implementado usando dois métodos distintos; estes são usados para
permitir classes definidas pelo usuário suportem iteração.  Sequências,
descritas abaixo em mais detalhes, sempre suportam os métodos de
iteração.

Um método necessita ser definido para objetos contêineres afim destes
proverem suporte a *note iterável: 1268.:

 -- Método: container.__iter__ ()

     Retorna um objeto *note iterador: 1ac.  O objeto deve suportar o
     protocolo iterador descrito abaixo.  Se um contêiner suporta
     diferentes tipos de iterador, métodos adicionais podem ser
     providenciados para requisitar especificamente iteradores para
     aqueles tipos de iterações.  (Um exemplo de um objeto suportando
     múltiplas formas de iteração seria uma estrutura em árvore a qual
     suporta ambas travessias de travessia em largura e em
     profundidade.)  Esse método corresponde ao slot *note tp_iter:
     1537. da estrutura de tipos para objetos Python na API Python/C.

Os próprios objetos iteradores são obrigados a suportarem os dois
métodos a seguir, que juntos formam o 'protocolo iterador':

 -- Método: iterator.__iter__ ()

     Retorna o próprio objeto *note iterador: 1ac. em si.  Isso é
     necessário para permitir que ambos os contêineres e iteradores
     sejam usados com as instruções *note for: 2f2. e *note in: 2f4.
     Este método corresponde ao slot *note tp_iter: 1537. da estrutura
     de tipos para objetos Python na API Python/C.

 -- Método: iterator.__next__ ()

     Retorna o próximo item do *note iterador: 1ac.  Se não houver itens
     além, a exceção *note StopIteration: c15. é levantada.  Esse método
     corresponde ao slot *note tp_iternext: 1538. da estrutura de tipos
     para objetos Python na API Python/C.

Python define diversos objetos iteradores para suportar iterações sobre
tipos de sequências gerais e específicas, dicionários, e outras formas
mais especializadas.  Os tipos específicos não são importantes além de
sua implementação do protocolo iterador.

Uma vez que o método *note __next__(): 1310. do iterador levantou *note
StopIteration: c15, ele deve continuar fazendo isso em chamadas
subsequentes.  Implementações que não obedecem essa propriedade são
consideradas quebradas.

* Menu:

* Tipos geradores::


File: python.info,  Node: Tipos geradores,  Up: Tipos iteradores

5.4.6.1 Tipos geradores
.......................

Os *note geradores: 109a. do Python proveem uma maneira conveniente para
implementar o protocolo iterador.  Se o método *note __iter__(): c8a. de
um objeto contêiner é implementado como um gerador, ele irá
automaticamente retornar um objeto iterador (tecnicamente, um objeto
gerador) fornecendo os métodos *note __iter__(): 1e4d. e *note
__next__(): 1e4e.  Mais informações sobre geradores podem ser
encontradas na *note documentação para a expressão yield: 21cc.


File: python.info,  Node: Tipos sequências — list tuple range,  Next: Tipo sequência de texto — str,  Prev: Tipos iteradores,  Up: Tipos embutidos

5.4.7 Tipos sequências — ‘list’, ‘tuple’, ‘range’
-------------------------------------------------

Existem três tipos básicos de sequência: listas, tuplas e objetos range.
Tipos de sequência adicionais adaptados para o processamento de *note
dados binários: 22f9. e *note strings de texto: 1d7a. são descritos em
seções dedicadas.

* Menu:

* Operações comuns de sequências::
* Tipos sequência imutáveis::
* Tipos sequências mutáveis::
* Listas: Listas<2>.
* Tuplas::
* Intervalos::


File: python.info,  Node: Operações comuns de sequências,  Next: Tipos sequência imutáveis,  Up: Tipos sequências — list tuple range

5.4.7.1 Operações comuns de sequências
......................................

As operações nas seguintes tabelas são suportadas pela maioria dos tipos
sequências, ambos mutáveis e imutáveis.  A classe ABC *note
collections.abc.Sequence: 1204. é fornecida para tornar fácil a correta
implementação desses operadores em tipos sequências personalizados.

Essa tabela lista as operações de sequência ordenadas em prioridade
ascendente.  Na tabela, 's' e 't' são sequências do mesmo tipo, 'n',
'i', 'j' e 'k' são inteiros e 'x' é um objeto arbitrário que atende a
qualquer restrição de valor e tipo imposta por 's'.

As operações ‘in’ e ‘not in’ têm as mesmas prioridades que as operações
de comparação.  As operações ‘+’ (concatenação) e ‘*’ (repetição) têm a
mesma prioridade que as operações numéricas correspondentes.  (1)

Operação                       Resultado                            Notas
                                                                    
-----------------------------------------------------------------------------------
                                                                    
‘x in s’                       ‘True’ caso um item de 's' seja      (1)
                               igual a 'x', caso contrário          
                               ‘False’
                               
                                                                    
‘x not in s’                   ‘False’ caso um item de 's' for      (1)
                               igual a 'x', caso contrário ‘True’   
                               
                                                                    
‘s + t’                        a concatenação de 's' e 't'          (6)(7)
                                                                    
                                                                    
‘s * n’ ou ‘n * s’             equivalente a adicionar 's' a si     (2)(7)
                               mesmo 'n' vezes                      
                               
                                                                    
‘s[i]’                         'i'-ésimo item de 's', origem 0      (3)(8)
                                                                    
                                                                    
‘s[i:j]’                       fatia de 's' de 'i' até 'j'          (3)(4)
                                                                    
                                                                    
‘s[i:j:k]’                     fatia de 's' de 'i' até 'j' com      (3)(5)
                               passo 'k'                            
                               
                                                                    
‘len(s)’                       comprimento de 's'
                               
                                                                    
‘min(s)’                       menor item de 's'
                               
                                                                    
‘max(s)’                       maior item de 's'
                               

Sequências do mesmo tipo também admitem comparações.  Em particular,
tuplas e listas são comparadas lexicograficamente por meio da comparação
de elementos correspondentes.  Isso significa que, para comparar
igualmente, cada elemento deve ser comparado igual e as duas sequências
devem ser do mesmo tipo e possuir o mesmo comprimento.  (Para detalhes
completos, veja *note Comparações: 2205. na referência da linguagem.)

Iteradores para frente e reversos sobre sequências mutáveis acessam
valores usando um índice.  Esse índice continuará avançando (ou
retrocedendo) mesmo que a sequência subjacente seja alterada.  O
iterador termina somente quando um *note IndexError: 157e. ou um *note
StopIteration: c15. é encontrado (ou quando o índice cai abaixo de
zero).

Notas:

  1. Enquanto as operações ‘in’ e ‘not in’ são usadas somente para
     testes de contenção simples em modo geral, algumas sequências
     especializadas (tais como *note str: 44c, *note bytes: 1c2. e *note
     bytearray: 2ea.) também usam-nas para testes de subsequências:

          >>> "gg" in "eggs"
          True

  2. Os valores de 'n' menos ‘0’ são tratados como ‘0’ (o que produz uma
     sequência vazia do mesmo tipo que 's').  Observe que os itens na
     sequência 's' não são copiados; eles são referenciados várias
     vezes.  Isso frequentemente assombra novos programadores Python;
     considere então que:

          >>> lists = [[]] * 3
          >>> lists
          [[], [], []]
          >>> lists[0].append(3)
          >>> lists
          [[3], [3], [3]]

     O que aconteceu é que ‘[[]]’ é uma lista de um elemento contendo
     uma lista vazia, então todos os três elementos de ‘[[]] * 3’ são
     referências a esta única lista vazia.  Modificar qualquer um dos
     elementos de ‘lists’ modifica a lista vazia.  Podemos criar uma
     lista de listas diferentes dessa maneira:

          >>> lists = [[] for i in range(3)]
          >>> lists[0].append(3)
          >>> lists[1].append(5)
          >>> lists[2].append(7)
          >>> lists
          [[3], [5], [7]]

     Mais explicação está disponível no FAQ *note Como faço para criar
     uma lista multidimensional?: 233f.

  3. Se 'i' ou 'j' for negativo, o índice será relativo ao fim da
     sequência 's': ‘len(s) + i’ ou ‘len(s) + j’ será substituído.  Mas
     note que ‘-0’ ainda será ‘0’.

  4. The slice of 's' from 'i' to 'j' is defined as the sequence of
     items with index 'k' such that ‘i <= k < j’.

        * If 'i' is omitted or ‘None’, use ‘0’.

        * If 'j' is omitted or ‘None’, use ‘len(s)’.

        * If 'i' or 'j' is less than ‘-len(s)’, use ‘0’.

        * If 'i' or 'j' is greater than ‘len(s)’, use ‘len(s)’.

        * If 'i' is greater than or equal to 'j', the slice is empty.

  5. A fatia 's' de 'i' até 'j' com passo 'k' é definida como sendo a
     sequência de itens com índice ‘x = i + n*k’ tal que ‘0 <= n <
     (j-i)/k’.  Em outras palavras, os índices são ‘i’, ‘i+k’, ‘i+2*k’,
     ‘i+3*k’ e assim por diante, parando quando 'j' for atingido (mas
     nunca incluindo 'j').  Quando 'k' for positivo, 'i' e 'j' serão
     reduzidos a ‘len(s)’ se forem maiores.  Quando 'k' for negativo,
     'i' e 'j' são reduzidos para ‘len(s) - 1’ se forem maiores.  Se 'i'
     ou 'j' forem omitidos ou ‘None’, eles se tornam valores “finais”
     (cujo final depende de 'k').  Nota: 'k' não pode ser zero.  Se 'k'
     for ‘None’, o mesmo será tratado como sendo igual a ‘1’.

  6. Concatenar sequências imutáveis sempre resulta em um novo objeto.
     Isso significa que a criação de uma sequência por concatenação
     repetida terá um custo quadrático de tempo de execução no
     comprimento total da sequência.  Para obter um custo de tempo de
     execução linear, devemos alternar para uma das alternativas abaixo:

        * Se estiver concatenando objetos *note str: 44c, você pode
          criar uma lista e usar *note str.join(): 2340. no final ou
          então escrever numa instância de *note io.StringIO: f59. e
          recuperar o seu valor ao final

        * Se estiver concatenando objetos *note bytes: 1c2, você também
          pode usar o método *note bytes.join(): 2341. ou *note
          io.BytesIO: ed3, ou você pode fazer concatenação interna com
          um objeto *note bytearray: 2ea.  A classe *note bytearray:
          2ea. são objetos mutáveis e possuem um eficiente mecanismo de
          superalocação

        * Se estiver concatenando objetos *note tuple: 370, estenda a
          classe *note list: 611. em vez disso

        * para outros tipos, busque na documentação relevante da classe

  7. Alguns tipos de sequências (como *note range: 94a.) apenas aceitam
     sequências de itens que seguem padrões específicos e, portanto, não
     implementam concatenação nem repetição de sequências.

  8. Uma *note IndexError: 157e. é levantada se 'i' estiver fora do
     intervalo da sequência.

Métodos de sequência
....................

Tipos de sequência também oferecem suporte aos seguintes métodos:

 -- Método: sequence.count (value, /)

     Retorna o número total de ocorrências de 'value' em 'sequence'.

 -- Método: sequence.index (value[, start[, stop])

     Retorna o índice da primeira ocorrência de 'value' em 'sequence'.

     Levanta *note ValueError: 202. se 'value' não for encontrado em
     'sequence'.

     Os argumentos 'start' ou 'stop' permitem uma busca eficiente de
     subseções da sequência, começando em 'start' e terminando em
     'stop'.  Isso é aproximadamente equivalente a ‘start +
     sequence[start:stop].index(value)’, só que sem copiar nenhum dado.

          Cuidado: Nem todos os tipos de sequência oferecem suporte a
          passagem dos argumentos 'start' e 'stop'.

   ---------- Footnotes ----------

   (1) Eles precisam ter, já que o analisador sintático não consegue
dizer o tipo dos operandos.


File: python.info,  Node: Tipos sequência imutáveis,  Next: Tipos sequências mutáveis,  Prev: Operações comuns de sequências,  Up: Tipos sequências — list tuple range

5.4.7.2 Tipos sequência imutáveis
.................................

A única operação que os tipos sequências imutáveis geralmente
implementam que também não é implementada pelos tipos sequências
mutáveis é suporte para a função embutida *note hash(): 5eb.

Esse suporte permite sequências imutáveis, tais como instâncias da
classe *note tuple: 370, serem usadas como chaves de dicionários *note
dict: 256. e armazenados em instâncias de *note set: 5d9. e de *note
frozenset: 5da.

A tentativa de obter um hash de uma sequência imutável que contém
valores desnecessários resultará em um erro *note TypeError: 2c3.


File: python.info,  Node: Tipos sequências mutáveis,  Next: Listas<2>,  Prev: Tipos sequência imutáveis,  Up: Tipos sequências — list tuple range

5.4.7.3 Tipos sequências mutáveis
.................................

As operações na tabela a seguir são definidas em tipos sequência
mutáveis.  A ABC *note collections.abc.MutableSequence: 1a1. é fornecida
para tornar mais fácil a implementação correta dessas operações em tipos
sequências personalizados.

Na tabela 's' é uma instância de um tipo de sequência mutável, 't' é
qualquer objeto iterável e 'x' é um objeto arbitrário que atende a
qualquer restrição de tipo e valor imposto por 's' (por exemplo *note
bytearray: 2ea. só aceita inteiros que atendam a restrição de valor ‘0
<= x <= 255’).

Operação                           Resultado                            Notas
                                                                        
--------------------------------------------------------------------------------------------------
                                                                        
‘s[i] = x’                         item 'i' de 's' é substituído por
                                   'x'
                                   
                                                                        
‘del s[i]’                         remove o item 'i' de 's'
                                   
                                                                        
‘s[i:j] = t’                       fatias de 's' de 'i' até 'j' são
                                   substituídas pelo conteúdo do
                                   iterável 't'
                                   
                                                                        
‘del s[i:j]’                       remove os elementos de ‘s[i:j]’ da
                                   lista (mesmo que ‘s[i:j] = []’)
                                   
                                                                        
‘s[i:j:k] = t’                     os elementos de ‘s[i:j:k]’ são       (1)
                                   substituídos por aqueles de 't'      
                                   
                                                                        
‘del s[i:j:k]’                     remove os elementos de ‘s[i:j:k]’
                                   desde a listas
                                   
                                                                        
‘s += t’                           estende 's' com o conteúdo de 't'
                                   (na maior parte do mesmo
                                   ‘s[len(s):len(s)] = t’)
                                   
                                                                        
‘s *= n’                           atualiza 's' com o seu conteúdo      (2)
                                   por 'n' vezes                        
                                   

Notas:

  1. se 'k' não for igual a ‘1’, 't' deve ter o mesmo comprimento que a
     fatia a qual ele está substituindo.

  2. O valor 'n' é um inteiro, ou um objeto implementando *note
     __index__(): 71d.  Valores zero e negativos de 'n' limparão a
     sequência.  Os itens na sequência não são copiados; eles são
     referenciados várias vezes, como explicado para ‘s * n’ em *note
     Operações comuns de sequências: 233e.

Métodos de sequências mutáveis
..............................

Tipos de sequências mutáveis também oferecem suporte aos seguintes
métodos:

 -- Método: sequence.append (value, /)

     Adiciona 'value' ao final da sequência.  Isso equivale a escrever
     ‘seq[len(seq):len(seq)] = [value]’.

 -- Método: sequence.clear ()

     Adicionado na versão 3.3.

     Remove todos os itens de 'sequence'.  Isso equivale a escrever ‘del
     sequence[:]’.

 -- Método: sequence.copy ()

     Adicionado na versão 3.3.

     Cria uma cópia rasa de 'sequence'.  Isso equivale a escrever
     ‘sequence[:]’.

          Dica: O método ‘copy()’ não faz parte de *note
          MutableSequence: 1a1. *note ABC: f49, mas a maioria dos tipos
          de sequências mutáveis concretas o fornecem.

 -- Método: sequence.extend (iterable, /)

     Estende 'sequence' com o conteúdo de 'iterable'.  Em geral, isso
     equivale a escrever ‘seq[len(seq):len(seq)] = iterable’.

 -- Método: sequence.insert (index, value, /)

     Insire 'value' em 'sequence' no 'index' fornecido.  Isso equivale a
     escrever ‘sequence[index:index] = [value]’.

 -- Método: sequence.pop (index=-1, /)

     Recupera o item em 'index' e também o remove de 'sequence'.  Por
     padrão, o último item em 'sequence' é removido e retornado.

 -- Método: sequence.remove (value, /)

     Remove o primeiro item de 'sequence' onde ‘sequence[i] == value’.

     Levanta *note ValueError: 202. se 'value' não for encontrado em
     'sequence'.

 -- Método: sequence.reverse ()

     Inverte os itens da 'sequence' no lugar.  Este método mantém a
     economia de espaço ao inverter uma sequência grande.  Para lembrar
     aos usuários que ele opera por efeito colateral, ele retorna
     ‘None’.


File: python.info,  Node: Listas<2>,  Next: Tuplas,  Prev: Tipos sequências mutáveis,  Up: Tipos sequências — list tuple range

5.4.7.4 Listas
..............

As listas são sequências mutáveis, normalmente usadas para armazenar
coleções de itens homogêneos (onde o grau preciso de similaridade
variará de acordo com a aplicação).

 -- Classe: list (iterable=(), /)

     As listas podem ser construídas de várias maneiras:

        * Usando um par de colchetes para denotar uma lista vazia: ‘[]’

        * Usando colchetes, separando itens por vírgulas: ‘[a]’, ‘[a, b,
          c]’

        * Usando uma compreensão de lista: ‘[x for x in iterable]’

        * Usando o construtor de tipo: ‘list()’ ou ‘list(iterable)’

     O construtor produz uma lista cujos itens são iguais e na mesma
     ordem que os itens de 'iterable'.  'iterable' pode ser uma
     sequência, um contêiner que suporte iteração ou um objeto iterador.
     Se 'iterable' já for uma lista, uma cópia será feita e retornada,
     semelhante a ‘iterable[:]’.  Por exemplo, ‘list('abc')’ retorna
     ‘['a', 'b', 'c']’ e ‘list( (1, 2, 3) )’ retorna ‘[1, 2, 3]’.  Se
     nenhum argumento for dado, o construtor criará uma nova lista vazia
     ‘[]’.

     Muitas outras operações também produzem listas, incluindo a função
     embutida *note sorted(): be7.

     Listas implementam todas as operações de sequências *note comuns:
     233e. e *note mutáveis: 22f7.  As listas também fornecem o seguinte
     método adicional:

      -- Método: sort (*, key=None, reverse=False)

          Esse método classifica a lista in-place, usando apenas
          comparações ‘<’ entre itens.  As exceções não são suprimidas –
          se qualquer operação de comparação falhar, toda a operação de
          ordenação falhará (e a lista provavelmente será deixada em um
          estado parcialmente modificado).

          *note sort(): be8. aceita 2 argumentos que só podem ser
          passados como *note argumentos somente-nomeados: 2a5.:

          'key' especifica uma função de um argumento que é usado para
          extrair uma chave de comparação de cada elemento da lista (por
          exemplo, ‘key=str.lower’).  A chave correspondente a cada item
          na lista é calculada uma vez e depois usada para todo o
          processo de classificação.  O valor padrão ‘None’ significa
          que os itens da lista são classificados diretamente sem
          calcular um valor de chave separado.

          A função utilitária *note functools.cmp_to_key(): 121a. está
          disponível para converter a função 'cmp' no estilo 2.x para
          uma função 'key'.

          'reverse' é um valor booleano.  Se definido igual a ‘True’,
          então os elementos da lista são classificados como se cada
          comparação estivesse invertida.

          Este método modifica a sequência in-place para economizar
          espaço ao classificar uma sequência grande.  Para lembrar aos
          usuários que os mesmos operam por efeito colateral, ele não
          retorna a sequência ordenada (utilize a função *note sorted():
          be7. para solicitar explicitamente uma nova instância da lista
          ordenada).

          O método *note sort(): be8. é garantido como sendo estável.
          Uma classificação é estável se ela garantir não alterar a
          ordem relativa de elementos que comparam igual – isso é útil
          para classificar em várias passagens (por exemplo, classificar
          por departamento, depois por nota salarial).

          Para exemplos de classificação e um breve tutorial de
          classificação, veja *note Técnicas de ordenação: 2314.

          No momento em que uma lista está sendo ordenada, o efeito de
          tentar alterar, ou mesmo inspecionar, a lista é indefinida.  A
          implementação C do Python faz com que a lista apareça vazia
          durante o tempo de processamento, e levanta a exceção *note
          ValueError: 202. se puder detectar que a lista foi alterada
          durante uma ordenação.


File: python.info,  Node: Tuplas,  Next: Intervalos,  Prev: Listas<2>,  Up: Tipos sequências — list tuple range

5.4.7.5 Tuplas
..............

Tuplas são sequências imutáveis, tipicamente usadas para armazenar
coleções de dados heterogêneos (como as tuplas de 2 elementos produzidas
pelo função embutida *note enumerate(): 14c9.).  Tuplas também são
usadas para casos em que seja necessária uma sequência imutável de dados
homogêneos (como permitir o armazenamento em uma instância *note set:
5d9. ou *note dict: 256.).

 -- Classe: tuple (iterable=(), /)

     As tuplas podem ser construídas de várias maneiras:

        * Usando um par de parênteses para denotar a tupla vazia: ‘()’

        * Usando uma vírgula à direita para uma tupla singleton: ‘a,’ ou
          ‘(a,)’

        * Separando os itens com vírgulas: ‘a, b, c’ ou ‘(a, b, c)’

        * Usando a função embutida *note tuple(): 370.: ‘tuple()’ ou
          ‘tuple(iterable)’

     O construtor constrói uma tupla cujos itens são iguais e na mesma
     ordem dos itens de 'iterable'.  'iterable' pode ser uma sequência,
     um contêiner que suporta iteração ou um objeto iterador.  Se
     'iterable' já for uma tupla, este será retornado inalterado.  Por
     exemplo, ‘tuple('abc')’ retorna ‘('a', 'b', 'c')’ e ‘tuple( [1, 2,
     3] )’ retorna ‘(1, 2, 3)’.  Se nenhum argumento for dado, o
     construtor criará uma tupla vazia, ‘()’.

     Observe que, na verdade, é a vírgula que faz uma tupla, e não os
     parênteses.  Os parênteses são opcionais, exceto no caso de tupla
     vazia, ou quando são necessários para evitar ambiguidades
     sintáticas.  Por exemplo, ‘f(a, b, c)’ é uma chamada da função com
     três argumentos, enquanto que ‘f((a, b, c))’ é uma chamada de
     função com uma tupla de 3 elementos com um único argumento.

     As tuplas implementam todas as operações *note comuns: 233e. de
     sequência.

Para coleções heterogêneas de dados onde o acesso pelo nome é mais claro
do que o acesso pelo índice, *note collections.namedtuple(): 1ca. pode
ser uma escolha mais apropriada do que um objeto tupla simples.


File: python.info,  Node: Intervalos,  Prev: Tuplas,  Up: Tipos sequências — list tuple range

5.4.7.6 Intervalos
..................

O tipo *note range: 94a. representa uma sequência imutável de números e
é comumente usado para percorrer um número determinado de vezes em um
laço *note for: 2f2.

 -- Classe: range (stop, /)

 -- Classe: range (start, stop, step=1, /)

     Os argumentos para o construtor de intervalo devem ser inteiros
     (*note int: 257. embutido ou qualquer objeto que implemente o
     método especial *note __index__(): 71d.).  Se o argumento 'step'
     for omitido, será usado o padrão ‘1’.  Se o argumento 'start' for
     omitido, será usado o padrão ‘0’.  Se 'step' for zero, uma exceção
     *note ValueError: 202. será levantada.

     Para um 'step' positivo, o conteúdo de um intervalo ‘r’ será
     determinado pela fórmula ‘r[i] = start + step*i’ onde ‘i >= 0’ e
     ‘r[i] < stop’.

     Para um 'step' negativo, o conteúdo do intervalo ainda será
     determinado pela fórmula ‘r[i] = start + step*i’, mas as restrições
     serão ‘i >= 0’ e ‘r[i] > stop’.

     Um objeto intervalo estará vazio se ‘r[0]’ não atender à restrição
     de valor.  Intervalos suportam índices negativos, mas estes são
     interpretados como indexadores partindo do final da sequência
     determinada pelos índices positivos.

     Intervalos contendo valores absolutos maiores que *note
     sys.maxsize: 1205. são permitidos, mas alguns recursos (como *note
     len(): 62e.) podem levantar *note OverflowError: 885.

     Exemplos de intervalos:

          >>> list(range(10))
          [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
          >>> list(range(1, 11))
          [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
          >>> list(range(0, 30, 5))
          [0, 5, 10, 15, 20, 25]
          >>> list(range(0, 10, 3))
          [0, 3, 6, 9]
          >>> list(range(0, -10, -1))
          [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]
          >>> list(range(0))
          []
          >>> list(range(1, 0))
          []

     Ranges implementam todas as operações *note comuns: 233e. de
     sequência, exceto a concatenação e a repetição (devido ao fato de
     que os objetos intervalos só podem representar sequências que
     seguem um padrão rígido.  e a repetição e a concatenação geralmente
     vão violar esse padrão).

      -- Atributo: start

          O valor do parâmetro 'start' (ou ‘0’ se o parâmetro não for
          fornecido)

      -- Atributo: stop

          O valor do parâmetro 'stop'

      -- Atributo: step

          O valor do parâmetro 'step' (ou ‘1’ se o parâmetro não for
          fornecido)

A vantagem do tipo *note range: 94a. sobre um *note list: 611. ou *note
tuple: 370. regular é que um objeto *note range: 94a. sempre terá a
mesma quantidade (pequena) de memória, não importa o tamanho do
intervalo o mesmo esteja representando (como ele apenas armazena os
valores ‘start’, ‘stop’ e ‘step’, calculando itens individuais e
subintervalos conforme necessário).

Objetos intervalos implementam a ABC *note collections.abc.Sequence:
1204, e fornecem recursos como testes de contenção, pesquisa de índice
de elemento, fatiamento e suporte a índices negativos (veja *note Tipos
sequências — list, tuple, range: 1dcc.):

     >>> r = range(0, 20, 2)
     >>> r
     range(0, 20, 2)
     >>> 11 in r
     False
     >>> 10 in r
     True
     >>> r.index(10)
     5
     >>> r[5]
     10
     >>> r[:5]
     range(0, 10, 2)
     >>> r[-1]
     18

Testar objetos intervalos por igualdade com ‘==’ e ‘!=’ os compara como
sequências.  Ou seja, dois objetos intervalos são considerados iguais se
representarem a mesma sequência de valores.  (Observe que dois objetos
intervalos considerados iguais podem ter diferentes atributos *note
start: 234d, *note stop: 234e. e *note step: 234f, por exemplo ‘range(0)
== range(2, 1, 3)’ ou ‘range(0, 3, 2) == range(0, 4, 2)’.)

Alterado na versão 3.2: Implementa a ABC Sequence.  Suporte a fatiamento
e a índices negativos.  Testa objetos *note int: 257. para associação em
tempo constante em vez de iterar através de todos os itens.

Alterado na versão 3.3: Define ‘==’ e ‘!=’ para comparar objetos
intervalos com base na sequência de valores que eles definem (em vez de
comparar com base na identidade do objeto).

Adicionados os atributos *note start: 234d, *note stop: 234e. e *note
step: 234f.

Ver também
..........

   * A receita de linspace(1) mostra como implementar uma versão
     preguiçosa de um intervalo adequado para aplicações de ponto
     flutuante.

   ---------- Footnotes ----------

   (1) 
https://code.activestate.com/recipes/579000-equally-spaced-numbers-linspace/


File: python.info,  Node: Tipo sequência de texto — str,  Next: Tipos de sequência binária — bytes bytearray memoryview,  Prev: Tipos sequências — list tuple range,  Up: Tipos embutidos

5.4.8 Tipo sequência de texto — ‘str’
-------------------------------------

Os dados textuais em Python são tratados com objetos *note str: 44c, ou
'strings'.  Strings são *note sequências: 1dcc. imutáveis de pontos de
código Unicode.  As strings literais são escritas de diversas maneiras:

   * Aspas simples: ‘'permitem aspas "duplas" internas'’

   * Aspas duplas: ‘"permitem aspas 'simples' internas"’

   * Aspas triplas: ‘'''Três aspas simples'''’, ‘"""Três aspas
     duplas"""’

Strings de aspas triplas podem expandir por várias linhas – todos os
espaços em branco associados serão incluídos em literal string.

Os literais strings que fazem parte de uma única expressão e têm apenas
espaços em branco entre eles serão implicitamente convertidos em um
único literal string.  Isso é, ‘("spam " "eggs") == "spam eggs"’.

Veja *note Literais de string e bytes: 2031. para mais informações sobre
as várias formas de literal de string, incluindo o suporte a *note
sequêncis de escape: 45a, e o prefixo ‘r’ (“raw”) que desabilita a
maioria dos processos de sequência de escape.

As strings também podem ser criadas a partir de outros objetos usando o
construtor *note str: 44c.

Uma vez que não há nenhum tipo de “caractere” separador, indexar uma
string produz strings de comprimento 1.  Ou seja, para uma string não
vazia 's', ‘s[0] == s[0:1]’.

Também não existe um tipo string mutável, mas o método *note str.join():
2340. ou a classe *note io.StringIO: f59. podem ser usados para
construir strings de forma eficiente a partir de vários partes
distintas.

Alterado na versão 3.3: Para a compatibilidade com versões anteriores do
Python 2, o prefixo ‘u’ foi mais uma vez permitido em literais strings.
Não possui quaisquer efeito sobre o significado de literais strings e
não pode ser combinado com o prefixo ‘r’.

 -- Classe: str (*, encoding='utf-8', errors='strict')

 -- Classe: str (object)

 -- Classe: str (object, encoding, errors='strict')

 -- Classe: str (object, *, errors)

     Retorna uma versão *note string: 1d7a. de 'object'.  Se 'object'
     não é fornecido, retorna uma string vazia.  Caso contrário, o
     comportamento de ‘str()’ dependerá se o 'encoding' ou 'errors' são
     fornecidos, da seguinte forma.

     Se nem 'encoding' nem 'errors' for fornecido, ‘str(object)’
     retornará *note type(object).__str__(object): 61d, que é a
     representação da string “informal” ou que pode ser facilmente
     imprimível  de 'object'.  Para objetos string, esta é a própria
     string.  Se 'object' não tiver um método:*note __str__(): 61d,
     então a função *note str(): 44c. retornará *note repr(object): 800.

     Se pelo menos um de 'encoding' ou 'errors' for fornecido, 'object'
     deve ser um *note objeto bytes ou similar: d4f. (por exemplo, *note
     bytes: 1c2. ou *note bytearray: 2ea.).  Nesse caso, se 'object' for
     um objeto *note bytes: 1c2. (ou *note bytearray: 2ea.), então
     ‘str(bytes, encoding, errors)’ equivale a *note
     bytes.decode(encoding, errors): 8dc.  Caso contrário, o objeto
     bytes subjacente ao objeto buffer é obtido antes de chamar *note
     bytes.decode(): 8dc.  Veja *note Tipos de sequência binária —
     bytes, bytearray, memoryview: 22f9. e *note Protocolo de buffer:
     2e8. para obter informações sobre objetos buffer.

     Passando um objeto *note bytes: 1c2. para *note str(): 44c. sem os
     argumentos 'encoding' ou 'errors' se enquadra no primeiro caso de
     retornar a representação informal de strings (consulte também a
     opção de linha de comando *note -b: 5e3. para Python).  Por
     exemplo:

          >>> str(b'Zoot!')
          "b'Zoot!'"

     Para mais informações sobre a classe ‘str’ e seus métodos, veja
     *note Tipo sequência de texto — str: 1d7a. e a seção *note String
     Methods: 1d7b. abaixo.  Para gerar strings formatadas, veja as
     seções *note f-strings: 9b1. e *note Sintaxe das strings de
     formato: 13e2.  Além disso, veja a seção *note Serviços de
     Processamento de Texto: 2351.

* Menu:

* String Methods: String Methods<2>.
* Strings literais formatadas (f-strings): Strings literais formatadas f-strings.
* Formatação de string no estilo printf::


File: python.info,  Node: String Methods<2>,  Next: Strings literais formatadas f-strings,  Up: Tipo sequência de texto — str

5.4.8.1 String Methods
......................

Strings implementam todas as operações *note comuns: 233e. de
sequências, juntamente com os métodos adicionais descritos abaixo.

Strings também possuem suporte para duas formas de formatação de string,
uma fornecendo uma ampla gama de flexibilidade e customização (veja
*note str.format(): 621, *note Sintaxe das strings de formato: 13e2. e
*note Formatação personalizada de strings: 2353.) e a outra baseada no
estilo de formatação ‘printf’ da linguagem C, que lida com uma gama
menor de tipos e é levemente mais difícil de utilizar corretamente, mas
é frequentemente mais rápida para os casos na qual ela consegue
manipular (*note Formatação de string no estilo printf: 6cc.).

A seção *note Serviços de Processamento de Texto: 2354. da biblioteca
padrão cobre um número de diversos outros módulos que fornecem vários
utilitários relacionados a texto (incluindo suporte a expressões
regulares no módulo *note re: b9.).

 -- Método: str.capitalize ()

     Retorna uma cópia da string com o seu primeiro caractere em
     maiúsculo e o restante em minúsculo.

     Alterado na versão 3.8: O primeiro caractere agora é colocado em
     'titlecase' ao invés de letras maiúsculas.  Isso significa que
     caracteres como dígrafos apenas terão sua primeira letra alterada
     para maiúscula, ao invés de todos os caracteres.

 -- Método: str.casefold ()

     Retorna uma cópia da string em 'casefolded'.  Strings em 'casefold'
     podem ser usadas para corresponder letras sem importar se são
     minúsculas ou maiúsculas.

     Casefolding is similar to lowercasing but more aggressive because
     it is intended to remove all case distinctions in a string.  For
     example, the German lowercase letter ‘'ß'’ is equivalent to ‘"ss"’.
     Since it is already lowercase, *note lower(): 1901. would do
     nothing to ‘'ß'’; *note casefold(): e00. converts it to ‘"ss"’.
     For example:

          >>> 'straße'.lower()
          'straße'
          >>> 'straße'.casefold()
          'strasse'

     O algoritmo 'casefolding' está descrito na seção 3.13 'Default Case
     Folding' do Padrão Unicode(1).

     Adicionado na versão 3.3.

 -- Método: str.center (width, fillchar=' ', /)

     Retorna um texto centralizado em uma string de comprimento 'width'.
     Preenchimento é feito usando o parâmetro 'fillchar' especificado
     (padrão é o caractere de espaço ASCII). A string original é
     retornada se 'width' é menor ou igual que ‘len(s)’.  Por exemplo:

          >>> 'Python'.center(10)
          '  Python  '
          >>> 'Python'.center(10, '-')
          '--Python--'
          >>> 'Python'.center(4)
          'Python'

 -- Método: str.count (sub[, start[, end]])

     Retorna o número de ocorrências da sub-string 'sub' que não se
     sobrepõem no intervalo ['start', 'end'].  Argumentos opcionais
     'start' e 'end' são interpretados como na notação de fatias.

     Se 'sub' estiver vazio, retorna o número de strings vazias entre os
     caracteres, que é o comprimento da string mais um.  Por exemplo:

          >>> 'spam, spam, spam'.count('spam')
          3
          >>> 'spam, spam, spam'.count('spam', 5)
          2
          >>> 'spam, spam, spam'.count('spam', 5, 10)
          1
          >>> 'spam, spam, spam'.count('eggs')
          0
          >>> 'spam, spam, spam'.count('')
          17

 -- Método: str.encode (encoding='utf-8', errors='strict')

     Retorna a string codificada para *note bytes: 1c2.

     'encoding' tem como padrão ‘'utf-8'’; veja *note Standard
     Encodings: de1. para valores possíveis.

     'errors' controla como os erros de codificação são tratados.  Se
     ‘'strict'’ (o padrão), uma exceção *note UnicodeError: 12e6. é
     levantada.  Outros valores possíveis são ‘'ignore'’, ‘'replace'’,
     ‘'xmlcharrefreplace'’, ‘'backslashreplace'’ e qualquer outro nome
     registrado via *note codecs.register_error(): 14e3.  Veja *note
     Error Handlers: 18fa. para detalhes.

     Por motivos de desempenho, o valor de 'errors' não é verificado
     quanto à validade, a menos que um erro de codificação realmente
     ocorra, *note Modo de Desenvolvimento do Python: 1f8. esteja
     ativado ou uma *note construção de depuração: 1f9. seja usada.  Por
     exemplo:

          >>> encoded_str_to_bytes = 'Python'.encode()
          >>> type(encoded_str_to_bytes)
          <class 'bytes'>
          >>> encoded_str_to_bytes
          b'Python'

     Alterado na versão 3.1: Adicionado suporte para argumentos
     nomeados.

     Alterado na versão 3.9: O valor do argumento 'errors' agora é
     verificado em *note Modo de Desenvolvimento do Python: 1f8. e no
     *note modo de depuração: 1f9.

 -- Método: str.endswith (suffix[, start[, end]])

     Retorna ‘True’ se a string terminar com o 'suffix' especificado,
     caso contrário retorna ‘False’.  'suffix' também pode ser uma tupla
     de sufixos para procurar.  Com o parâmetro opcional 'start',
     começamos a testar a partir daquela posição.  Com o parâmetro
     opcional 'end', devemos parar de comparar na posição especificada.
     Usar 'start' e 'end' equivale a ‘str[start:end].endswith(suffix)’.
     Por exemplo:

          >>> 'Python'.endswith('on')
          True
          >>> 'a tuple of suffixes'.endswith(('at', 'in'))
          False
          >>> 'a tuple of suffixes'.endswith(('at', 'es'))
          True
          >>> 'Python is amazing'.endswith('is', 0, 9)
          True

     Veja também *note startswith(): efa. e *note removesuffix(): 8d6.

 -- Método: str.expandtabs (tabsize=8)

     Retorna uma cópia da string onde todos os caracteres de tabulação
     são substituídos por um ou mais espaços, dependendo da coluna atual
     e do tamanho fornecido para a tabulação.  Posições de tabulação
     ocorrem a cada 'tabsize' caracteres (o padrão é 8, dada as posições
     de tabulação nas colunas 0, 8, 16 e assim por diante).  Para
     expandir a string, a coluna atual é definida como zero e a string é
     examinada caractere por caractere.  Se o caractere é uma tabulação
     (‘\t’), um ou mais caracteres de espaço são inseridos no resultado
     até que a coluna atual seja igual a próxima posição de tabulação.
     (O caractere de tabulação em si não é copiado.)  Se o caractere é
     um caractere de nova linha (‘\n’) ou de retorno (‘\r’), ele é
     copiado e a coluna atual é redefinida para zero.  Qualquer outro
     caractere é copiado sem ser modificado e a coluna atual é
     incrementada em uma unidade independentemente de como o caractere é
     representado quando é impresso.  Por exemplo:

          >>> '01\t012\t0123\t01234'.expandtabs()
          '01      012     0123    01234'
          >>> '01\t012\t0123\t01234'.expandtabs(4)
          '01  012 0123    01234'
          >>> print('01\t012\n0123\t01234'.expandtabs(4))
          01  012
          0123    01234

 -- Método: str.find (sub[, start[, end]])

     Retorna o índice mais baixo na string onde a substring 'sub' é
     encontrado dentro da fatia ‘s[start:end]’.  Argumentos opcionais
     como 'start' e 'end' são interpretados como na notação de
     fatiamento.  Retorna ‘-1’ se 'sub' não for localizado.  Por
     exemplo:

          >>> 'spam, spam, spam'.find('sp')
          0
          >>> 'spam, spam, spam'.find('sp', 5)
          6

     Veja também *note rfind(): ed8. e *note index(): 1733.

          Nota: O método *note find(): ed7. deve ser usado apenas se
          precisarmos conhecer a posição de 'sub'.  Para verificar se
          'sub' é ou não uma substring, use o operador *note in: 2f4.:

               >>> 'Py' in 'Python'
               True

 -- Método: str.format (*args, **kwargs)

     Executa uma operação de formatação de string.  A string na qual
     este método é chamado pode conter texto literal ou campos para
     substituição delimitados por chaves ‘{}’.  Cada campo de
     substituição contém um índice numérico de um argumento posicional
     ou o nome de um argumento nomeado.  Retorna a cópia da string onde
     cada campo para substituição é substituído com o valor da string do
     argumento correspondente.  Por exemplo:

          >>> "A soma de 1 + 2 é {0}".format(1+2)
          'A soma de 1 + 2 é 3'
          >>> "A soma de {a} + {b} é {answer}".format(answer=1+2, a=1, b=2)
          'A soma de 1 + 2 é 3'
          >>> "{1} espera a inquisição {0}!".format("espanhola", "Ninguém")
          'Ninguém espera a inquisição espanhola!'

     Veja *note Sintaxe das strings de formato: 13e2. para uma descrição
     das várias opções de formatação que podem ser especificadas em uma
     strings de formato.

          Nota: Ao formatar um número (*note int: 257, *note float: 2f7,
          *note complex: 2f8, *note decimal.Decimal: 29d. e sub-classes)
          com o tipo ‘n’ (ex: ‘'{:n}'.format(1234)’), a função define
          temporariamente a localidade ‘LC_CTYPE’ para a localidade
          ‘LC_NUMERIC’ a fim de decodificar campos ‘decimal_point’ e
          ‘thousands_sep’ de ‘localeconv()’ se eles são caracteres
          não-ASCII ou maiores que 1 byte, e a localidade ‘LC_NUMERIC’ é
          diferente da localidade ‘LC_CTYPE’.  Esta mudança temporária
          afeta outras threads.

     Alterado na versão 3.7: Ao formatar um número com o tipo ‘n’, a
     função define temporariamente a localidade ‘LC_CTYPE’ para a
     localidade ‘LC_NUMERIC’ em alguns casos.

 -- Método: str.format_map (mapping, /)

     Semelhante a ‘str.format(**mapping)’, exceto pelo fato de que
     ‘mapping’ é usado diretamente e não copiado para uma classe *note
     dict: 256.  Isso é útil se, por exemplo, ‘mapping’ é uma subclasse
     de dict:

          >>> class Default(dict):
          ...     def __missing__(self, key):
          ...         return key
          ...
          >>> '{name} was born in {country}'.format_map(Default(name='Guido'))
          'Guido was born in country'

     Adicionado na versão 3.2.

 -- Método: str.index (sub[, start[, end]])

     Like *note find(): ed7, but raise *note ValueError: 202. when the
     substring is not found.  For example:

          >>> 'spam, spam, spam'.index('eggs')
          Traceback (most recent call last):
            File "<python-input-0>", line 1, in <module>
              'spam, spam, spam'.index('eggs')
              ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^
          ValueError: substring not found

     See also *note rindex(): 1299.

 -- Método: str.isalnum ()

     Retorna ‘True’ se todos os caracteres na string são alfanuméricos e
     existe pelo menos um caractere, ou ‘False’ caso contrário.  Um
     caractere ‘c’ é alfanumérico se um dos seguintes retorna ‘True’:
     ‘c.isalpha()’, ‘c.isdecimal()’, ‘c.isdigit()’, ou ‘c.isnumeric()’.

 -- Método: str.isalpha ()

     Return ‘True’ if all characters in the string are alphabetic and
     there is at least one character, ‘False’ otherwise.  Alphabetic
     characters are those characters defined in the Unicode character
     database as “Letter”, i.e., those with general category property
     being one of “Lm”, “Lt”, “Lu”, “Ll”, or “Lo”.  Note that this is
     different from the Alphabetic property defined in the section 4.10
     'Letters, Alphabetic, and Ideographic' of the Unicode Standard(2).
     For example:

          >>> 'Letras e espaços'.isalpha()
          False
          >>> 'LetrasApenas'.isalpha()
          True
          >>> 'µ'.isalpha()  # Caracteres não-ASCII podem ser considerados alfabeticamente também
          True

     Consulte *note Propriedades Unicode: 2359.

 -- Método: str.isascii ()

     Retorna ‘True’ se a string é vazia ou se todos os caracteres na
     string são ASCII, ‘False’ caso contrário.  Caracteres ASCII têm
     pontos de código no intervalo U+0000-U+007F. Por exemplo:

          >>> 'Caracteres ASCII'.isascii()
          True
          >>> 'µ'.isascii()
          False

     Adicionado na versão 3.7.

 -- Método: str.isdecimal ()

     Retorna ‘True’ se todos os caracteres na string são caracteres
     decimais e existe pelo menos um caractere, ‘False’ caso contrário.
     Caracteres decimais são aqueles que podem ser usados para formar
     números na base 10, tal como U+0660, ou dígito zero para
     arábico-índico.  Formalmente, um caractere decimal é um caractere
     em Unicode cuja categoria geral é “Nd”.  Por exemplo:

          >>> '0123456789'.isdecimal()
          True
          >>> '٠١٢٣٤٥٦٧٨٩'.isdecimal()  # Dígitos árabe-índico zero até nove
          True
          >>> 'alfabético'.isdecimal()
          False

 -- Método: str.isdigit ()

     Retorna ‘True’ se todos os caracteres na string são dígitos e
     existe pelo menos um caractere, ‘False’ caso contrário.  Dígitos
     incluem caracteres decimais e dígitos que precisam de tratamento
     especial, tal como a compatibilidade com dígitos sobre-escritos.
     Isso inclui dígitos que não podem ser usados para formar números na
     base 10, como por exemplo os números de Kharosthi.  Formalmente, um
     dígito é um caractere que tem a propriedade com valor
     Numeric_Type=Digit ou Numeric_Type=Decimal.

 -- Método: str.isidentifier ()

     Retorna ‘True’ se a string é um identificador válido conforme a
     definição da linguagem, seção *note Identificadores e
     palavras-chave: 2021.

     *note keyword.iskeyword(): 235c. pode ser usada para testar se a
     string ‘s’ é uma palavra reservada, tal como *note def: 14a2. e
     *note class: 131a.

     Exemplo:

          >>> from keyword import iskeyword

          >>> 'olá.isidentifier(), iskeyword('olá')
          (True, False)
          >>> 'def'.isidentifier(), iskeyword('def')
          (True, True)

 -- Método: str.islower ()

     Retorna ‘True’ se todos os caracteres em caixa (que possuem
     maiúsculo e minúsculo) (3) na string são minúsculos e existe pelo
     menos um caractere em caixa, ‘False’ caso contrário.

 -- Método: str.isnumeric ()

     Return ‘True’ if all characters in the string are numeric
     characters, and there is at least one character, ‘False’ otherwise.
     Numeric characters include digit characters, and all characters
     that have the Unicode numeric value property, e.g.  U+2155, VULGAR
     FRACTION ONE FIFTH. Formally, numeric characters are those with the
     property value Numeric_Type=Digit, Numeric_Type=Decimal or
     Numeric_Type=Numeric.  For example:

          >>> '0123456789'.isnumeric()
          True
          >>> '٠١٢٣٤٥٦٧٨٩'.isnumeric()  # Arabic-indic digit zero to nine
          True
          >>> '⅕'.isnumeric()  # Vulgar fraction one fifth
          True
          >>> '²'.isdecimal(), '²'.isdigit(),  '²'.isnumeric()
          (False, True, True)

     See also *note isdecimal(): 235a. and *note isdigit(): 235b.
     Numeric characters are a superset of decimal numbers.

 -- Método: str.isprintable ()

     Retorna ‘True’ se todos os caracteres na string forem imprimíveis,
     ‘False’ se contiver pelo menos um caractere não imprimível.

     Aqui, “imprimíveis” significa que o caractere é adequado para *note
     repr(): 800. usar em sua saída; “não imprimível” significa que
     *note repr(): 800. em tipos embutidos fará o escape hexadecimal do
     caractere.  Não tem relação com o tratamento de strings escritas em
     *note sys.stdout: ae6. ou *note sys.stderr: 940.

     Os caracteres imprimíveis são aqueles que no banco de dados de
     caracteres Unicode (veja *note unicodedata: 105.) têm uma categoria
     geral no grupo Letra, Marca, Número, Pontuação ou Símbolo (L, M, N,
     P ou S); mais o espaço ASCII 0x20.  Caracteres não imprimíveis são
     aqueles no grupo Separador ou Outro (Z ou C), exceto o espaço
     ASCII.

     Por exemplo:

          >>> ''.isprintable(), ' '.isprintable()
          (True, True)
          >>> '\t'.isprintable(), '\n'.isprintable()
          (False, False)

 -- Método: str.isspace ()

     Retorna ‘True’ se existem apenas caracteres de espaço em branco na
     string e existe pelo menos um caractere, ‘False’ caso contrário.

     Um caractere é 'espaço em branco' se no banco de dados de
     caracteres Unicode (veja *note unicodedata: 105.), ou pertence a
     categoria geral ‘Zs’ (“Separador, espaço”), ou sua classe
     bidirecional é ‘WS’, ‘B’ ou ‘S’.

 -- Método: str.istitle ()

     Retorna ‘True’ se a string é titlecased e existe pelo menos um
     caractere, por exemplo caracteres maiúsculos somente podem proceder
     caracteres que não diferenciam maiúsculas/minúsculas, e caracteres
     minúsculos somente podem proceder caracteres que permitem ambos.
     Retorna ‘False’ caso contrário.

     Por exemplo:

          >>> 'Spam, Spam, Spam'.istitle()
          True
          >>> 'spam, spam, spam'.istitle()
          False
          >>> 'SPAM, SPAM, SPAM'.istitle()
          False

     Veja também *note title(): 2361.

 -- Método: str.isupper ()

     Retorna ‘True’ se todos os caracteres que permitem maiúsculas ou
     minúsculas (4) na string estão com letras maiúsculas, e existe pelo
     menos um caractere maiúsculo, ‘False’ caso contrário.

          >>> 'BANANA'.isupper()
          True
          >>> 'banana'.isupper()
          False
          >>> 'baNana'.isupper()
          False
          >>> ' '.isupper()
          False

 -- Método: str.join (iterable, /)

     Retorna a string que é a concatenação das strings no 'iterável'.
     Uma *note TypeError: 2c3. será levantada se existirem quaisquer
     valores que não sejam strings no 'iterável', incluindo objetos
     *note bytes: 1c2.  O separador entre elementos é a string que está
     fornecendo este método.  Por exemplo:

          >>> ', '.join(['spam', 'spam', 'spam'])
          'spam, spam, spam'
          >>> '-'.join('Python')
          'P-y-t-h-o-n'

     Veja também *note split(): ed9.

 -- Método: str.ljust (width, fillchar=' ', /)

     Retorna a string alinhada a esquerda em uma string de comprimento
     'width'.  Preenchimento é feito usando 'fillchar' que for
     especificado (o padrão é o caractere ASCII de espaço).  A string
     original é retornada se 'width' é menor ou igual que ‘len(s)’.

     Por exemplo:

          >>> 'Python'.ljust(10)
          'Python    '
          >>> 'Python'.ljust(10, '.')
          'Python....'
          >>> 'Monty Python'.ljust(10, '.')
          'Monty Python'

     See also *note rjust(): 1e01.

 -- Método: str.lower ()

     Return a copy of the string with all the cased characters (5)
     converted to lowercase.  For example:

          >>> 'Lower Method Example'.lower()
          'lower method example'

     O algoritmo de letras minúsculas está descrito na seção 3.13
     'Default Case Folding' do Padrão Unicode(6).

 -- Método: str.lstrip (chars=None, /)

     Retorna uma cópia da string com caracteres iniciais removidos.  O
     argumento 'chars' é uma string que especifica o conjunto de
     caracteres a serem removidos.  Se for omitido ou se for ‘None’, o
     argumento 'chars' será considerado como espaço em branco por padrão
     para a remoção.  O argumento 'chars' não é um prefixo; ao invés
     disso, todas as combinações dos seus valores são removidas:

          >>> '   spacious   '.lstrip()
          'spacious   '
          >>> 'www.example.com'.lstrip('cmowz.')
          'example.com'

     Consulte *note str.removeprefix(): 8d5. para um método que removerá
     uma única string de prefixo em vez de todo um conjunto de
     caracteres.  Por exemplo:

          >>> 'Arthur: three!'.lstrip('Arthur: ')
          'ee!'
          >>> 'Arthur: three!'.removeprefix('Arthur: ')
          'three!'

 -- Método: static str.maketrans (dict, /)

 -- Método: static str.maketrans (from, to, remove='', /)

     Este método estático retorna uma tabela de tradução usável para
     *note str.translate(): 2364.

     Se existe apenas um argumento, ele deve ser um dicionário mapeando
     números Unicode (inteiros) ou caracteres (strings de comprimento 1)
     para números Unicode, strings (de comprimento arbitrário) ou
     ‘None’.  Caracteres chave serão então convertidos para números
     ordinais.

     Se existirem dois argumentos, eles devem ser strings de igual
     comprimento, e no dicionário resultante, cada caractere em 'from'
     será mapeado para o caractere na mesma posição em 'to'.  Se existir
     um terceiro argumento, ele deve ser uma string, cujos caracteres
     serão mapeados para ‘None’ no resultado.

 -- Método: str.partition (sep, /)

     Quebra a string na primeira ocorrência de 'sep', e retorna uma
     tupla com 3 elementos contendo a parte antes do separador, o
     próprio separador, e a parte após o separador.  Se o separador não
     for encontrado, retorna uma tupla com 3 elementos contendo a
     string, seguido de duas strings vazias.

 -- Método: str.removeprefix (prefix, /)

     If the string starts with the 'prefix' string, return
     ‘string[len(prefix):]’.  Otherwise, return a copy of the original
     string:

          >>> 'TestHook'.removeprefix('Test')
          'Hook'
          >>> 'BaseTestCase'.removeprefix('Test')
          'BaseTestCase'

     Adicionado na versão 3.9.

     See also *note removesuffix(): 8d6. and *note startswith(): efa.

 -- Método: str.removesuffix (suffix, /)

     If the string ends with the 'suffix' string and that 'suffix' is
     not empty, return ‘string[:-len(suffix)]’.  Otherwise, return a
     copy of the original string:

          >>> 'MiscTests'.removesuffix('Tests')
          'Misc'
          >>> 'TmpDirMixin'.removesuffix('Tests')
          'TmpDirMixin'

     Adicionado na versão 3.9.

     See also *note removeprefix(): 8d5. and *note endswith(): efb.

 -- Método: str.replace (old, new, /, count=-1)

     Return a copy of the string with all occurrences of substring 'old'
     replaced by 'new'.  If 'count' is given, only the first 'count'
     occurrences are replaced.  If 'count' is not specified or ‘-1’,
     then all occurrences are replaced.  For example:

          >>> 'spam, spam, spam'.replace('spam', 'eggs')
          'eggs, eggs, eggs'
          >>> 'spam, spam, spam'.replace('spam', 'eggs', 1)
          'eggs, spam, spam'

     Alterado na versão 3.13: 'count' agora é suportado como um
     argumento nomeado.

 -- Método: str.rfind (sub[, start[, end]])

     Return the highest index in the string where substring 'sub' is
     found, such that 'sub' is contained within ‘s[start:end]’.
     Optional arguments 'start' and 'end' are interpreted as in slice
     notation.  Return ‘-1’ on failure.  For example:

          >>> 'spam, spam, spam'.rfind('sp')
          12
          >>> 'spam, spam, spam'.rfind('sp', 0, 10)
          6

     See also *note find(): ed7. and *note rindex(): 1299.

 -- Método: str.rindex (sub[, start[, end]])

     Similar a *note rfind(): ed8. mas levanta um *note ValueError: 202.
     quando a substring 'sub' não é encontrada.

 -- Método: str.rjust (width, fillchar=' ', /)

     Retorna a string alinhada à direita em uma string de comprimento
     'width'.  Preenchimento é feito usando o caractere 'fillchar'
     especificado (o padrão é um caractere de espaço ASCII). A string
     original é retornada se 'width' é menor que ou igual a ‘len(s)’.

 -- Método: str.rpartition (sep, /)

     Quebra a string na última ocorrência de 'sep', e retorna uma tupla
     com 3 elementos contendo a parte antes do separador, o próprio
     separador, e a parte após o separador.  Se o separador não for
     encontrado, retorna uma tupla com 3 elementos contendo duas strings
     vazias, seguido da própria string original.

     Por exemplo:

          >>> 'Monty Python'.rpartition(' ')
          ('Monty', ' ', 'Python')
          >>> "Monty Python's Flying Circus".rpartition(' ')
          ("Monty Python's Flying", ' ', 'Circus')
          >>> 'Monty Python'.rpartition('-')
          ('', '', 'Monty Python')

     See also *note partition(): eda.

 -- Método: str.rsplit (sep=None, maxsplit=-1)

     Retorna uma lista de palavras na string, usando 'sep' como a string
     delimitadora.  Se 'maxsplit' é fornecido, no máximo 'maxsplit'
     cortes são feitos, sendo estes mais 'à direita'.  Se 'sep' não foi
     especificado ou ‘None’ foi informado, qualquer string de espaço em
     branco é um separador.  Exceto pelo fato de separar pela direita,
     *note rsplit(): 1297. se comporta como *note split(): ed9, o qual é
     descrito em detalhes abaixo.

 -- Método: str.rstrip (chars=None, /)

     Retorna uma cópia da string com caracteres no final removidos.  O
     argumento 'chars' é uma string que especifica o conjunto de
     caracteres para serem removidos.  Se omitidos ou tiver o valor
     ‘None’, o argumento 'chars' considera como padrão a remoção dos
     espaços em branco.  O argumento 'chars' não é um sufixo; ao invés
     disso, todas as combinações dos seus valores são removidas:

          >>> '   spacious   '.rstrip()
          '   spacious'
          >>> 'mississippi'.rstrip('ipz')
          'mississ'

     Consulte *note str.removesuffix(): 8d6. para um método que removerá
     uma única string de sufixo em vez de todo um conjunto de
     caracteres.  Por exemplo:

          >>> 'Monty Python'.rstrip(' Python')
          'M'
          >>> 'Monty Python'.removesuffix(' Python')
          'Monty'

 -- Método: str.split (sep=None, maxsplit=-1)

     Retorna uma lista de palavras na string, usando 'sep' como a string
     delimitadora.  Se 'maxsplit' é fornecido, no máximo 'maxsplit'
     cortes são feitos (portando, a lista terá no máximo ‘maxsplit+1’
     elementos).  Se 'maxsplit' não foi especificado ou ‘-1’ foi
     informado, então não existe limite no número de cortes (todos os
     cortes possíveis são realizados).

     Se 'sep' é fornecido, delimitadores consecutivos não são agrupados
     juntos e eles são destinados para delimitar strings vazias (por
     exemplo, ‘'1,,2'.split(',')’ retorna ‘['1', '', '2']’).  O
     argumento 'sep' pode consistir em vários caracteres como um único
     delimitador (para separar com vários delimitadores, use *note
     re.split(): 2a2.).  Separar uma string vazia com um separador
     especificado retorna ‘['']’.

     Por exemplo:

          >>> '1,2,3'.split(',')
          ['1', '2', '3']
          >>> '1,2,3'.split(',', maxsplit=1)
          ['1', '2,3']
          >>> '1,2,,3,'.split(',')
          ['1', '2', '', '3', '']
          >>> '1<>2<>3<4'.split('<>')
          ['1', '2', '3<4']

     Se 'sep' não for especificado ou for ‘None’, um algoritmo diferente
     de separação é aplicado: ocorrências consecutivas de espaços em
     branco são consideradas como um separador único, e o resultado não
     conterá strings vazias no início ou no final, se a string tiver
     espaços em branco no início ou no final.  Consequentemente, separar
     uma string vazia ou uma string que consiste apenas de espaços em
     branco com o separador ‘None’, retorna ‘[]’.

     Por exemplo:

          >>> '1 2 3'.split()
          ['1', '2', '3']
          >>> '1 2 3'.split(maxsplit=1)
          ['1', '2 3']
          >>> '   1   2   3   '.split()
          ['1', '2', '3']

     Se 'sep' não for especificado ou for ‘None’ e 'maxsplit' for ‘0’,
     somente as sequências iniciais de espaços em branco consecutivos
     serão consideradas.

     Por exemplo:

          >>> "".split(None, 0)
          []
          >>> "   ".split(None, 0)
          []
          >>> "   foo   ".split(maxsplit=0)
          ['foo   ']

     Veja também *note join(): 2340.

 -- Método: str.splitlines (keepends=False)

     Retorna uma lista das linhas na string, quebrando a mesma nas
     fronteiras de cada linha.  Quebras de linhas não são incluídas na
     lista resultante a não ser que 'keepends' seja fornecido e seja
     verdadeiro.

     Este método divide nos seguintes limites das linhas.  Em
     particular, os limites são um superconjunto de *note novas linhas
     universais: d5c.

     Representação               Descrição
                                 
     --------------------------------------------------------------
                                 
     ‘\n’                        Feed de linha
                                 
                                 
     ‘\r’                        Retorno de Carro
                                 
                                 
     ‘\r\n’                      Retorno do Carro + Feed da
                                 Linha
                                 
                                 
     ‘\v’ ou ‘\x0b’              Tabulação de Linha
                                 
                                 
     ‘\f’ ou ‘\x0c’              Formulário de Feed
                                 
                                 
     ‘\x1c’                      Separador de Arquivos
                                 
                                 
     ‘\x1d’                      Separador de Grupo
                                 
                                 
     ‘\x1e’                      Separador de Registro
                                 
                                 
     ‘\x85’                      Próxima Linha (C1 Control Code)
                                 
                                 
     ‘\u2028’                    Separador de Linha
                                 
                                 
     ‘\u2029’                    Separador de Parágrafo
                                 

     Alterado na versão 3.2: ‘\v’ e ‘\f’ adicionado à lista de limites
     de linha.

     Por exemplo:

          >>> 'ab c\n\nde fg\rkl\r\n'.splitlines()
          ['ab c', '', 'de fg', 'kl']
          >>> 'ab c\n\nde fg\rkl\r\n'.splitlines(keepends=True)
          ['ab c\n', '\n', 'de fg\r', 'kl\r\n']

     Ao contrário do método *note split(): ed9. quando um delimitador de
     String 'sep' é fornecido, este método retorna uma lista vazia para
     a uma String vazia e uma quebra de linha de terminal não resulta
     numa linha extra:

          >>> "".splitlines()
          []
          >>> "Uma linha\n".splitlines()
          ['Uma linha']

     Para comparação, temos ‘split('\n')’:

          >>> ''.split('\n')
          ['']
          >>> 'Duas linhas\n'.split('\n')
          ['Duas linhas', '']

 -- Método: str.startswith (prefix[, start[, end]])

     Retorne ‘True’ se a String começar com o 'prefixo', caso contrário,
     retorna ‘False’.  'prefixo' também pode ser uma tupla de prefixos a
     serem procurados.  Com 'start' opcional, a String de teste começa
     nessa posição.  Com 'fim' opcional, interrompe a comparação de
     String nessa posição.

 -- Método: str.strip (chars=None, /)

     Retorna uma cópia da string com caracteres no início e no final
     removidos.  O argumento 'chars' é uma string que especifica o
     conjunto de caracteres a serem removidos.  Se for omitido ou for
     ‘None’, o argumento 'chars' irá remover por padrão os caracteres em
     branco.  O argumento 'chars' não é um prefixo, nem um sufixo; ao
     contrário disso, todas as combinações dos seus seus valores são
     removidas:

          >>> '   spacious   '.strip()
          'spacious'
          >>> 'www.example.com'.strip('cmowz.')
          'example'

     Os valores do argumento 'chars' são removidos dos extremos inicial
     e final da string.  Caracteres são removidos do extremo inicial até
     atingir um caractere da string que não está contido no conjunto de
     caracteres em 'chars'.  Uma ação similar acontece no extremo final
     da string.  Por exemplo:

          >>> comment_string = '#....... Section 3.2.1 Issue #32 .......'
          >>> comment_string.strip('.#! ')
          'Section 3.2.1 Issue #32'

 -- Método: str.swapcase ()

     Retorna uma cópia da string com caracteres maiúsculos convertidos
     para minúsculos e vice-versa.  Perceba que não é necessariamente
     verdade que ‘s.swapcase().swapcase() == s’.

 -- Método: str.title ()

     Retorna uma versão titlecased da string, onde palavras iniciam com
     um caractere com letra maiúscula e os caracteres restantes são em
     letras minúsculas.

     Por exemplo:

          >>> 'Olá mundo'.title()
          'Olá mundo'

     O algoritmo usa uma definição simples independente de idioma para
     uma palavra, como grupos de letras consecutivas.  A definição
     funciona em muitos contextos, mas isso significa que apóstrofes em
     contrações e possessivos formam limites de palavras, os quais podem
     não ser o resultado desejado:

          >>> "a caixa d'água do joe's bar está vazia".title()
          "A Caixa D'Água Do Joe'S Bar Está Vazia"

     A função *note string.capwords(): 2366. não tem esse problema, pois
     ela divide palavras apenas em espaços.

     Alternativamente, uma solução alternativa para os apóstrofes pode
     ser construída usando expressões regulares:

          >>> import re
          >>> def titlecase(s):
          ...     return re.sub(r"[A-Za-z]+('[A-Za-z]+)?",
          ...                   lambda mo: mo.group(0).capitalize(),
          ...                   s)
          ...
          >>> titlecase("o joe's bar está aberto")
          "O Joe's Bar Está Aberto"

     Veja também *note istitle(): 2360.

 -- Método: str.translate (table, /)

     Retorna uma cópia da string na qual cada caractere foi mapeado
     através da tabela de tradução fornecida.  A tabela deve ser um
     objeto que implementa indexação através de *note __getitem__():
     283, tipicamente um *note mapeamento: 11fb. ou uma *note sequência:
     4f1.  Quando indexada por um ordinal unicode (um inteiro), o objeto
     tabela pode fazer qualquer uma das seguintes ações: retornar um
     ordinal unicode ou uma string, para mapear o caractere para um ou
     mais caracteres; retornar ‘None’, para deletar o caractere da
     string de retorno; ou levantar uma exceção *note LookupError: 2367,
     para mapear o caractere para si mesmo.

     Você pode usar *note str.maketrans(): e03. para criar um mapa de
     tradução com mapeamentos caractere para caractere em diferentes
     formatos.

     Veja também o módulo *note codecs: 1b. para uma abordagem mais
     flexível para mapeamento de caractere customizado.

 -- Método: str.upper ()

     Retorna uma cópia da string com todos os caracteres que permitem
     maiúsculo e minúsculo (7) convertidos para letras maiúsculas.
     Perceba que ‘s.upper().isupper()’ pode ser ‘False’ se ‘s’ contiver
     caracteres que não possuem maiúsculas e minúsculas, ou se a
     categoria Unicode do(s) caractere(s) resultante(s) não for “Lu”
     (Letra maiúscula), mas por ex “Lt” (Letra em titlecase).

     O algoritmo de letras maiúsculas está descrito na seção 3.13
     'Default Case Folding' do Padrão Unicode(8).

 -- Método: str.zfill (width, /)

     Retorna uma cópia da String deixada preenchida com dígitos ASCII
     ‘'0'’ para fazer uma string de comprimento 'width'.  Um prefixo
     sinalizador principal (‘'+'’/‘'-'’) será tratado inserindo o
     preenchimento 'após' o caractere de sinal em vez de antes.  A
     String original será retornada se o 'width' for menor ou igual a
     ‘len(s)’.

     Por exemplo:

          >>> "42".zfill(5)
          '00042'
          >>> "-42".zfill(5)
          '-0042'

   ---------- Footnotes ----------

   (1) https://www.unicode.org/versions/Unicode15.1.0/ch03.pdf

   (2) https://www.unicode.org/versions/Unicode15.1.0/ch04.pdf

   (3) Caracteres que possuem maiúsculo e minúsculo são aqueles com a
propriedade de categoria geral igual a “Lu” (Letra, maiúscula), “Ll”
(Letra, minúscula), ou “Lt” (Letra, em formato de título).

   (4) Caracteres que possuem maiúsculo e minúsculo são aqueles com a
propriedade de categoria geral igual a “Lu” (Letra, maiúscula), “Ll”
(Letra, minúscula), ou “Lt” (Letra, em formato de título).

   (5) Caracteres que possuem maiúsculo e minúsculo são aqueles com a
propriedade de categoria geral igual a “Lu” (Letra, maiúscula), “Ll”
(Letra, minúscula), ou “Lt” (Letra, em formato de título).

   (6) https://www.unicode.org/versions/Unicode15.1.0/ch03.pdf

   (7) Caracteres que possuem maiúsculo e minúsculo são aqueles com a
propriedade de categoria geral igual a “Lu” (Letra, maiúscula), “Ll”
(Letra, minúscula), ou “Lt” (Letra, em formato de título).

   (8) https://www.unicode.org/versions/Unicode15.1.0/ch03.pdf


File: python.info,  Node: Strings literais formatadas f-strings,  Next: Formatação de string no estilo printf,  Prev: String Methods<2>,  Up: Tipo sequência de texto — str

5.4.8.2 Strings literais formatadas (f-strings)
...............................................

Adicionado na versão 3.6.

Alterado na versão 3.7: *note await: 1b9. e *note async for: aba. podem
ser usados em expressões dentro de f-strings.

Alterado na versão 3.8: Adicionado o operador de depuração (‘=’)

Alterado na versão 3.12: Muitas restrições a expressões dentro de
f-strings foram removidas.  Notavelmente, strings aninhadas, comentários
e contrabarras agora são permitidos.

Uma 'f-string' (formalmente uma 'literal de string formatada') é uma
literal de string prefixada com ‘f’ ou ‘F’.  Esse tipo de literal de
string permite incorporar expressões Python arbitrárias dentro de
'campos de substituição', delimitados por chaves (‘{}’).  Essas
expressões são avaliadas em tempo de execução, de forma semelhante a
*note str.format(): 621, e convertidas em objetos *note str: 44c.
regulares.  Por exemplo:

     >>> who = 'Ninguém'
     >>> nationality = 'Espanhola'
     >>> f'{who.title()} está à espera da Inquisição {nationality}!'
     'Ninguém está à espera da Inquisição Espanhola!'

Também é possível usar uma f-string de várias linhas:

     >>> f'''Esta é uma string
     ... em duas linhas'''
     'Esta é uma string\nem duas linhas'

Uma única chave de abertura, ‘'{'’, marca um 'campo de substituição' que
pode conter qualquer expressão Python:

     >>> nationality = 'Espanhola'
     >>> f'A Inquisição {nationality}!'
     'A Inquisição Espanhola!'

Para incluir um literal ‘{’ ou ‘}’, use chaves duplas:

     >>> x = 42
     >>> f'{{x}} is {x}'
     '{x} is 42'

Funções também podem ser usadas, como *note especificadores de formato:
13e2.:

     >>> from math import sqrt
     >>> f'√2 \N{ALMOST EQUAL TO} {sqrt(2):.5f}'
     '√2 ≈ 1.41421'

Qualquer expressão que não seja string é convertida usando *note str():
44c, por padrão:

     >>> from fractions import Fraction
     >>> f'{Fraction(1, 3)}'
     '1/3'

Para usar uma conversão explícita, use o operador ‘!’ (ponto de
exclamação), seguido por qualquer um dos formatos válidos, que são:

Conversão      Significado
               
----------------------------------
               
‘!a’           *note ascii(): 142d.
               
               
‘!r’           *note repr(): 800.
               
               
‘!s’           *note str(): 44c.
               

Por exemplo:

     >>> from fractions import Fraction
     >>> f'{Fraction(1, 3)!s}'
     '1/3'
     >>> f'{Fraction(1, 3)!r}'
     'Fraction(1, 3)'
     >>> question = '¿Dónde está el Presidente?'
     >>> print(f'{question!a}')
     '\xbfD\xf3nde est\xe1 el Presidente?'

Durante a depuração, pode ser útil visualizar tanto a expressão quanto
seu valor, usando o sinal de igual (‘=’) após a expressão.  Isso
preserva os espaços entre chaves e pode ser usado com um conversor.  Por
padrão, o operador de depuração usa a conversão *note repr(): 800.
(‘!r’).  Por exemplo:

     >>> from fractions import Fraction
     >>> calculation = Fraction(1, 3)
     >>> f'{calculation=}'
     'calculation=Fraction(1, 3)'
     >>> f'{calculation = }'
     'calculation = Fraction(1, 3)'
     >>> f'{calculation = !s}'
     'calculation = 1/3'

Após a avaliação da saída, ela pode ser formatada usando um *note
especificador de formato: 13e2. seguido de dois pontos (‘':'’).  Após a
avaliação da expressão e sua possível conversão para uma string, o
método ‘__format__()’ do resultado é chamado com o especificador de
formato, ou a string vazia, caso nenhum especificador de formato seja
fornecido.  O resultado formatado é então usado como o valor final para
o campo de substituição.  Por exemplo:

     >>> from fractions import Fraction
     >>> f'{Fraction(1, 7):.6f}'
     '0.142857'
     >>> f'{Fraction(1, 7):_^+10}'
     '___+1/7___'


File: python.info,  Node: Formatação de string no estilo printf,  Prev: Strings literais formatadas f-strings,  Up: Tipo sequência de texto — str

5.4.8.3 Formatação de string no estilo ‘printf’
...............................................

     Nota: As operações de formatação descritas aqui exibem uma
     variedade de peculiaridades que levam a diversos erros comuns (tais
     como não conseguir exibir tuplas e dicionários corretamente).  Usar
     o novo *note formatador de string literal (f-strings): 9b1, a
     interface *note str.format(): 621, ou *note templates de strings:
     236b. pode ajudar a evitar esses erros.  Cada uma dessas
     alternativas fornece seus próprios custos e benefícios de
     simplicidade, flexibilidade, e/ou extensibilidade.

Os objetos string possuem um único operador embutido: o operador ‘%’
(módulo).  O mesmo também é conhecido como o operador de 'formatação' ou
'interpolação'.  Dado ‘format % values’ (onde 'format' é uma string), as
especificações de conversão ‘%’ em 'format' são substituídas por zero ou
mais elementos de 'values'.  O efeito é semelhante ao uso da função
‘sprintf()’ na linguagem C. Por exemplo:

     >>> print('%s tem %d tipos de aspas.' % ('Python', 2))
     Python tem 2 tipos de aspas.

Se 'format' precisar de um único operador, 'valores' podem ser objetos
simples ou que não sejam uma tupla.  (1)  Caso contrário, 'valores'
precisarão ser uma tupla com exatamente o número de itens especificados
pela string de formatação, ou um único mapa de objetos (por exemplo, um
dicionário).

Um especificador de conversão contém dois ou mais caracteres e tem os
seguintes componentes, que devem aparecer nesta ordem:

  1. O caractere ‘'%'’, que determina o início do especificador.

  2. Mapeamento de chaves (opcional), consistindo de uma sequência entre
     parênteses de caracteres (por exemplo, ‘(algumnome)’).

  3. Flags de conversão (opcional), que afetam o resultado de alguns
     tipos de conversão.

  4. Largura mínima do campo (opcional).  Se for especificado como um
     ‘'*'’ (asterisco), a largura real será lida a partir do próximo
     elemento da tupla em 'values' e o objeto a converter virá após a
     largura mínima do campo e a precisão que é opcional.

  5. Precisão (opcional), fornecido como uma ‘'.'’ (ponto) seguido pela
     precisão.  Se determinado como um ‘'*'’ (um asterisco), a precisão
     real será lida a partir do próximo elemento da tupla em 'values', e
     o valor a converter virá após a precisão.

  6. Modificador de comprimento (opcional).

  7. Tipo de conversão.

Quando o argumento certo for um dicionário (ou outro tipo de
mapeamento), então os formatos na string 'deverão' incluir uma chave de
mapeamento entre parênteses nesse dicionário inserido imediatamente após
o caractere ‘'%'’.  A key de mapeamento seleciona o valor a ser
formatado a partir do mapeamento.  Por exemplo:

     >>> print('%(language)s has %(number)03d quote types.' %
     ...       {'language': "Python", "number": 2})
     Python has 002 quote types.

Nesse caso, nenhum especificador ‘*’ poderá ocorrer num formato (uma vez
que eles exigem uma lista de parâmetros sequenciais).

Os caracteres flags de conversão são:

Sinalizador   Significado
              
----------------------------------------------------------------------------------------
              
‘'#'’         A conversão de valor usará o “formulário alternativo” (conforme
              definido abaixo).
              
              
‘'0'’         A conversão será preenchida por zeros para valores numéricos.
              
              
‘'-'’         O valor convertido será ajustado à esquerda (substitui a conversão
              ‘'0'’ se ambos forem fornecidos).
              
              
‘' '’         (um espaço) Um espaço em branco deverá ser deixado antes de um número
              positivo (ou uma string vazia) produzido por uma conversão assinada.
              
              
‘'+'’         Um sinal de caractere (‘'+'’ ou ‘'-'’) precederá a conversão
              (substituindo o sinalizador de “espaço”).
              

Um modificador de comprimento (‘h’, ‘l’, ou ‘L’) pode estar presente,
mas será ignorado, pois o mesmo não é necessário para o Python – então,
por exemplo, ‘%ld’ é idêntico a ‘%d’.

Os tipos de conversão são:

Conversão        Significado                                               Notas
                                                                           
---------------------------------------------------------------------------------------
                                                                           
‘'d'’            Número decimal inteiro sinalizador.
                 
                                                                           
‘'i'’            Número decimal inteiro sinalizador.
                 
                                                                           
‘'o'’            Valor octal sinalizador.                                  (1)
                                                                           
                                                                           
‘'u'’            Tipo obsoleto – é idêntico a ‘'d'’.                       (6)
                                                                           
                                                                           
‘'x'’            Hexadecimal com sinal (minúsculo).                        (2)
                                                                           
                                                                           
‘'X'’            Hexadecimal com sinal (maiúsculo).                        (2)
                                                                           
                                                                           
‘'e'’            Formato exponencial de ponto flutuante (minúsculo).       (3)
                                                                           
                                                                           
‘'E'’            Formato exponencial de ponto flutuante (maiúsculo).       (3)
                                                                           
                                                                           
‘'f'’            Formato decimal de ponto flutuante.                       (3)
                                                                           
                                                                           
‘'F'’            Formato decimal de ponto flutuante.                       (3)
                                                                           
                                                                           
‘'g'’            O formato de ponto flutuante.  Usa o formato              (4)
                 exponencial em minúsculo se o expoente for inferior a     
                 -4 ou não inferior a precisão, formato decimal, caso
                 contrário.
                 
                                                                           
‘'G'’            Formato de ponto flutuante.  Usa o formato exponencial    (4)
                 em maiúsculo se o expoente for inferior a -4 ou não       
                 inferior que a precisão, formato decimal, caso
                 contrário.
                 
                                                                           
‘'c'’            Caractere único (aceita inteiro ou um único caractere
                 string).
                 
                                                                           
‘'r'’            String (converte qualquer objeto Python usando a função   (5)
                 *note repr(): 800.).                                      
                 
                                                                           
‘'s'’            String (converte qualquer objeto Python usando a função   (5)
                 *note str(): 44c.).                                       
                 
                                                                           
‘'a'’            String (converte qualquer objeto Python usando a função   (5)
                 *note ascii(): 142d.).                                    
                 
                                                                           
‘'%'’            Nenhum argumento é convertido, resultando em um
                 caractere ‘'%'’ no resultado.
                 

Notas:

  1. A forma alternativa faz com que um especificador octal principal
     (‘'0o'’) seja inserido antes do primeiro dígito.

  2. O formato alternativo produz um ‘'0x'’ ou ‘'0X'’ (dependendo se o
     formato ‘'x'’ or ‘'X'’ foi usado) para ser inserido antes do
     primeiro dígito.

  3. A forma alternativa faz com que o resultado sempre contenha um
     ponto decimal, mesmo que nenhum dígito o siga.

     A precisão determina o número de dígitos após o ponto decimal e o
     padrão é 6.

  4. A forma alternativa faz com que o resultado sempre contenha um
     ponto decimal e os zeros à direita não sejam removidos, como de
     outra forma seriam.

     A precisão determina o número de dígitos significativos antes e
     depois do ponto decimal e o padrão seja 6.

  5. Se a precisão for ‘N’, a saída será truncada em ‘N’ caracteres.

  6. Veja PEP 237(2).

Como as strings no Python possuem comprimento explícito, conversões de
‘%s’ não presumem que ‘'\0'’ seja o fim da string.

Alterado na versão 3.1: ‘%f’ as conversões para números cujo valor
absoluto é superior a 1e50 não são mais substituídas pela conversão
‘%g’.

   ---------- Footnotes ----------

   (1) Para formatar apenas uma tupla, você deve portanto fornecer uma
tupla com apenas um elemento, que é a tupla a ser formatada.

   (2) https://peps.python.org/pep-0237/


File: python.info,  Node: Tipos de sequência binária — bytes bytearray memoryview,  Next: Tipo conjuntos — set frozenset,  Prev: Tipo sequência de texto — str,  Up: Tipos embutidos

5.4.9 Tipos de sequência binária — ‘bytes’, ‘bytearray’, ‘memoryview’
---------------------------------------------------------------------

Os principais tipos embutidos para manipular dados binários são *note
bytes: 1c2. e *note bytearray: 2ea.  Eles são suportados por *note
memoryview: 2eb. a qual usa o *note protocolo buffer: 2e8. para acessar
a memória de outros objetos binários sem precisar fazer uma cópia.

O módulo *note array: 7. provê suporte a um armazenamento eficiente de
tipos de dados básicos como inteiros de 32 bits e valores de ponto
flutuante com precisão dupla IEEE754.

* Menu:

* Objetos bytes::
* Objetos Bytearray::
* Operações com Bytes e Bytearray::
* Estilo de Formatação de bytes printf-style::
* Memory Views::


File: python.info,  Node: Objetos bytes,  Next: Objetos Bytearray,  Up: Tipos de sequência binária — bytes bytearray memoryview

5.4.9.1 Objetos bytes
.....................

Objetos bytes são sequências imutáveis de bytes simples.  Como muitos
protocolos binários importantes são baseados em codificação ASCII de
texto, objetos bytes oferecem diversos métodos que são válidos apenas
quando trabalhamos com dados compatíveis com ASCII, e são proximamente
relacionados com objetos string em uma variedade de outros sentidos.

 -- Classe: bytes (source=b'')

 -- Classe: bytes (source, encoding, errors='strict')

     Em primeiro lugar, a sintaxe para literais de bytes é em grande
     parte a mesma para literais de string, exceto que um prefixo ‘b’ é
     adicionado:

        * Aspas simples: ‘b'ainda permite aspas "duplas" dentro'’

        * Aspas duplas: ‘b"ainda permite aspas 'simples' dentro"’

        * Aspas triplas: ‘b'''3 aspas simples'''’, ‘b"""3 aspas
          duplas"""’

     Apenas caracteres ASCII são permitidos em literais de bytes
     (independentemente da codificação declarada no código-fonte).
     Qualquer valor binário superior a 127 deverá ser inserido em
     literais de bytes usando a sequência de escape apropriada.

     Assim como string literais, bytes literais também podem usar um
     prefixo ‘r’ para desabilitar o processamento de sequências de
     escape.  Veja *note Literais de string e bytes: 2031. para mais
     sobre as várias formas de bytes literais, incluindo suporte a
     sequências de escape.

     Enquanto bytes literais e representações são baseados em texto
     ASCII, objetos bytes na verdade se comportam como sequências
     imutáveis de inteiros, com cada valor na sequência restrito aos
     limites ‘0 <= x < 256’ (tentativas de violar essa restrição irão
     disparar *note ValueError: 202.).  Isto é feito deliberadamente
     para enfatizar que enquanto muitos formatos binários incluem
     elementos baseados em ASCII e podem ser utilmente manipulados com
     alguns algoritmos orientados a texto, esse não é geralmente o caso
     para dados binários arbitrários (aplicar algoritmos de
     processamento de texto cegamente em formatos de dados binários que
     não são compatíveis com ASCII irá usualmente resultar em dados
     corrompidos).

     Além das formas literais, os objetos bytes podem ser criados de
     várias outras maneiras:

        * Um bytes preenchido com objetos zero com um comprimento
          especificado: ‘bytes(10)’

        * De um iterável de inteiros: ‘bytes(range(20))’

        * Copiando dados binários existentes através do protocolo de
          Buffer: ‘bytes(obj)’

     Veja também os embutidos *note bytes: 1c33.

     Como 2 dígitos hexadecimais correspondem precisamente a apenas um
     byte, números hexadecimais são um formato comumente usado para
     descrever dados binários.  Portanto, o tipo bytes tem um método de
     classe adicional para ler dados nesse formato:

      -- Método: classmethod fromhex (string, /)

          Este método de classe da classe *note bytes: 1c2. retorna um
          objeto bytes, decodificando o objeto string fornecido.  A
          string deve conter dois dígitos hexadecimais por byte, com
          espaço em branco ASCII sendo ignorado.

               >>> bytes.fromhex('2Ef0 F1f2  ')
               b'.\xf0\xf1\xf2'

          Alterado na versão 3.7: *note bytes.fromhex(): b02. agora
          ignora todos os espaços em branco em ASCII na string, não
          apenas espaços.

     Uma função de conversão reversa existe para transformar um objeto
     bytes na sua representação hexadecimal.

      -- Método: hex (*, bytes_per_sep=1)

      -- Método: hex (sep, bytes_per_sep=1)

          Retorna um objeto string contendo dois dígitos hexadecimais
          para cada byte na instância.

               >>> b'\xf0\xf1\xf2'.hex()
               'f0f1f2'

          Se você quiser tornar a string hexadecimal mais fácil de ler,
          você pode especificar um caractere separador através do
          parâmetro 'sep', que será incluído no resultado.  Por padrão,
          este separador será incluído entre cada byte.  Um segundo
          parâmetro opcional 'bytes_per_sep' controla o espaçamento.
          Valores positivos calculam a posição do separador a partir da
          direita, valores negativos calculam a partir da esquerda.

               >>> value = b'\xf0\xf1\xf2'
               >>> value.hex('-')
               'f0-f1-f2'
               >>> value.hex('_', 2)
               'f0_f1f2'
               >>> b'UUDDLRLRAB'.hex(' ', -4)
               '55554444 4c524c52 4142'

          Adicionado na versão 3.5.

          Alterado na versão 3.8: *note bytes.hex(): d8d. agora suporta
          os parâmetros opcionais 'sep' e 'bytes_per_sep' para inserir
          separadores entre bytes na saída hexadecimal.

Como objetos bytes são sequências de inteiros (certo parentesco a uma
tupla), para um objeto bytes 'b', ‘b[0]’ será um inteiro, enquanto
‘b[0:1]’ será um objeto bytes de comprimento 1.  (Isso contrasta com
strings de texto, onde tanto o uso por índice quanto por fatiamento irão
produzir uma string de comprimento 1)

A representação de objetos bytes utiliza o formato literal (‘b'...'’),
uma vez que ela é frequentemente mais útil do que, por exemplo,
‘bytes([46, 46, 46])’.  Você sempre pode converter um objeto bytes em
uma lista de inteiros usando ‘list(b)’.


File: python.info,  Node: Objetos Bytearray,  Next: Operações com Bytes e Bytearray,  Prev: Objetos bytes,  Up: Tipos de sequência binária — bytes bytearray memoryview

5.4.9.2 Objetos Bytearray
.........................

Objetos *note bytearray: 2ea. são mutáveis, em contrapartida a objetos
*note bytes: 1c2.

 -- Classe: bytearray (source=b'')

 -- Classe: bytearray (source, encoding, errors='strict')

     Não existe sintaxe literal dedicada para objetos de bytearray, ao
     invés disso eles sempre são criados através da chamada do
     construtor:

        * Criando uma instância vazia: ‘bytearray()’

        * Criando uma instância cheia de zero com um determinado
          comprimento: ‘bytearray(10)’

        * A partir de inteiros iteráveis: ‘bytearray(range(20))’

        * Copiando dados binários existentes através do protocolo de
          buffer: ‘bytearray(b'Hi!')’

     Como os objetos bytearray são mutáveis, os mesmos suportam as
     operações de sequência *note mutable: 22f7. além das operações
     comuns de bytes e bytearray descritas em *note Operações com Bytes
     e Bytearray: 22f8.

     Veja também o tipo embutido *note bytearray: 1c34.

     Uma vez que 2 dígitos hexadecimais correspondem precisamente a um
     único byte, os números hexadecimais são um formato comumente usado
     para descrever dados binários.  Consequentemente, o tipo de
     bytearray tem um método de classe adicional para ler dados nesse
     formato:

      -- Método: classmethod fromhex (string, /)

          Este método de classe da classe *note bytearray: 2ea. retorna
          um objeto bytearray, decodificando o objeto string fornecido.
          A string deve conter dois dígitos hexadecimais por byte, com
          espaços em branco ASCII sendo ignorados.

               >>> bytearray.fromhex('2Ef0 F1f2  ')
               bytearray(b'.\xf0\xf1\xf2')

          Alterado na versão 3.7: *note bytearray.fromhex(): b03. agora
          ignora todos os espaços em branco em ASCII na string, não
          apenas espaços.

     Existe uma função de conversão reversa para transformar um objeto
     bytearray em sua representação hexadecimal.

      -- Método: hex (*, bytes_per_sep=1)

      -- Método: hex (sep, bytes_per_sep=1)

          Retorna um objeto string contendo dois dígitos hexadecimais
          para cada byte na instância.

               >>> bytearray(b'\xf0\xf1\xf2').hex()
               'f0f1f2'

          Adicionado na versão 3.5.

          Alterado na versão 3.8: Similar a *note bytes.hex(): d8d,
          *note bytearray.hex(): d8e. agora suporta os parâmetros
          opcionais 'sep' e 'bytes_per_sep' para inserir separadores
          entre bytes na saída hexadecimal.

Como os objetos bytearray são sequências de inteiros (semelhante a uma
lista), para um objeto bytearray 'b', ‘b[0]’ será um inteiro, enquanto
que ‘b[0:1]’ será um objeto bytearray de comprimento 1.  (Isso contrasta
com as Strings de texto, onde tanto a indexação como o fatiamento
produzirão sequências de comprimento 1)

A representação de objetos bytearray utiliza o formato literal bytes
(‘bytearray(b'...')’), uma vez que muitas vezes é mais útil do que, por
exemplo, ‘bytearray([46, 46, 46])’.  Você sempre pode converter um
objeto bytearray em uma lista de inteiros usando ‘list(b)’.


File: python.info,  Node: Operações com Bytes e Bytearray,  Next: Estilo de Formatação de bytes printf-style,  Prev: Objetos Bytearray,  Up: Tipos de sequência binária — bytes bytearray memoryview

5.4.9.3 Operações com Bytes e Bytearray
.......................................

Ambos os tipos, bytes e objetos do tipo bytearray, aceitam as operações
de sequências *note comuns: 233e.  Os mesmos interagem não apenas com
operandos do mesmo tipo, mas também com qualquer *note objeto bytes ou
similar: d4f.  Devido a esta flexibilidade, os mesmos podem ser
misturados livremente em operações sem causar erros.  No entanto, o tipo
de retorno do resultado pode depender da ordem dos operandos.

     Nota: Os métodos em bytes e objetos Bytearray não aceitam Strings
     como argumentos, assim como os métodos de Strings não aceitam bytes
     como argumentos.  Por exemplo, devemos escrever:

          a = "abc"
          b = a.replace("a", "f")

     e:

          a = b"abc"
          b = a.replace(b"a", b"f")

Alguns operações com bytes e bytearray presumem o uso de formatos
binários compatíveis com ASCII e, portanto, devem ser evitados ao
trabalhar com dados binários arbitrários.  Essas restrições são
abordadas a seguir.

     Nota: O uso dessas operações baseadas em ASCII para manipular dados
     binários que não são armazenados num formato baseado em ASCII
     poderá resultar na corrupção de dados.

Os métodos a seguir em Bytes e Bytearray podem ser usados com dados
binários arbitrários.

 -- Método: bytes.count (sub[, start[, end]])
 -- Método: bytearray.count (sub[, start[, end]])

     Retorna o número de ocorrências não sobrepostas de subsequência
     'sub' no intervalo ['start', 'end'].  Os argumentos opcionais
     'start' e 'end' são interpretados como na notação de fatiamento.

     A subsequência a ser procurada poderá ser qualquer *note objeto
     bytes ou similar: d4f. ou um inteiro no intervalo de 0 a 255.

     Se 'sub' estiver vazio, retorna o número de fatias vazias entre os
     caracteres, que é o comprimento do objeto bytes mais um.

     Alterado na versão 3.3: Também aceita um número inteiro no
     intervalo de 0 a 255 como subsequência.

 -- Método: bytes.removeprefix (prefix, /)
 -- Método: bytearray.removeprefix (prefix, /)

     Se os dados binários começarem com a string 'prefix', retorna
     ‘bytes[len(prefix):]’.  Caso contrário, retorna uma cópia dos dados
     binários originais:

          >>> b'TestHook'.removeprefix(b'Test')
          b'Hook'
          >>> b'BaseTestCase'.removeprefix(b'Test')
          b'BaseTestCase'

     O 'prefix' pode ser qualquer *note objeto bytes ou similar: d4f.

          Nota: A versão Bytearray deste método 'não' opera no local – o
          mesmo sempre produz um novo objeto, mesmo que não tenha sido
          feitas alterações.

     Adicionado na versão 3.9.

 -- Método: bytes.removesuffix (suffix, /)
 -- Método: bytearray.removesuffix (suffix, /)

     Se os dados binários terminarem com a string 'suffix' e a 'suffix'
     não estiver vazia, retorna ‘bytes[:-len(suffix)]’.  Caso contrário,
     retorna uma cópia dos dados binários originais:

          >>> b'MiscTests'.removesuffix(b'Tests')
          b'Misc'
          >>> b'TmpDirMixin'.removesuffix(b'Tests')
          b'TmpDirMixin'

     O 'suffix' pode ser qualquer *note objeto bytes ou similar: d4f.

          Nota: A versão Bytearray deste método 'não' opera no local – o
          mesmo sempre produz um novo objeto, mesmo que não tenha sido
          feitas alterações.

     Adicionado na versão 3.9.

 -- Método: bytes.decode (encoding='utf-8', errors='strict')
 -- Método: bytearray.decode (encoding='utf-8', errors='strict')

     Retorna os bytes decodificados para uma *note str: 44c.

     'encoding' tem como padrão ‘'utf-8'’; veja *note Standard
     Encodings: de1. para valores possíveis.

     'errors' controla como os erros de decodificação são tratados.  Se
     ‘'strict'’ (o padrão), uma exceção *note UnicodeError: 12e6. é
     levantada.  Outros valores possíveis são ‘'ignore'’, ‘'replace'’ e
     qualquer outro nome registrado via *note codecs.register_error():
     14e3.  Veja *note Error Handlers: 18fa. para detalhes.

     Por motivos de desempenho, o valor de 'errors' não é verificado
     quanto à validade, a menos que um erro de decodificação realmente
     ocorra, *note Modo de Desenvolvimento do Python: 1f8. esteja
     ativado ou uma *note construção de depuração: 1f9. seja usada.

          Nota: Passar o argumento 'encoding' para *note str: 44c.
          permite decodificar qualquer objeto *note objeto bytes ou
          similar: d4f. diretamente, sem a necessidade de criar um
          objeto ‘bytes’ ou ‘bytearray’ temporário.

     Alterado na versão 3.1: Adicionado suporte para argumentos
     nomeados.

     Alterado na versão 3.9: O valor do argumento 'errors' agora é
     verificado em *note Modo de Desenvolvimento do Python: 1f8. e no
     *note modo de depuração: 1f9.

 -- Método: bytes.endswith (suffix[, start[, end]])
 -- Método: bytearray.endswith (suffix[, start[, end]])

     Retorna ‘True’ se os dados binários encerra com o parâmetro
     'suffix' especificado, caso contrário retorna ‘False’.  'suffix'
     também pode ser uma tupla de sufixos para averiguar.  Com o
     parâmetro opcional 'start', a procura começa naquela posição.  Com
     o parâmetro opcional 'end', o método encerra a comparação na
     posição fornecida.

     O sufixo(es) para buscas pode ser qualquer termos *note objeto
     bytes ou similar: d4f.

 -- Método: bytes.find (sub[, start[, end]])
 -- Método: bytearray.find (sub[, start[, end]])

     Retorna o índice mais baixo nos dados onde a sub-sequência 'sub' é
     encontrada, tal que 'sub' está contida na fatia ‘s[start:end]’.
     Argumentos opcionais 'start' e 'end' são interpretados como na
     notação de fatiamento.  Retorna ‘-1’ se 'sub' não for localizada.

     A subsequência a ser procurada poderá ser qualquer *note objeto
     bytes ou similar: d4f. ou um inteiro no intervalo de 0 a 255.

          Nota: O método *note find(): 195e. deve ser usado apenas se
          você precisa saber a posição de 'sub'.  Para verificar se
          'sub' é uma substring ou não, use o operador *note in: 2f4.:

               >>> b'Py' in b'Python'
               True

     Alterado na versão 3.3: Também aceita um número inteiro no
     intervalo de 0 a 255 como subsequência.

 -- Método: bytes.index (sub[, start[, end]])
 -- Método: bytearray.index (sub[, start[, end]])

     Como *note find(): 195e, mas levanta a exceção *note ValueError:
     202. quando a subsequência não for encontrada.

     A subsequência a ser procurada poderá ser qualquer *note objeto
     bytes ou similar: d4f. ou um inteiro no intervalo de 0 a 255.

     Alterado na versão 3.3: Também aceita um número inteiro no
     intervalo de 0 a 255 como subsequência.

 -- Método: bytes.join (iterable, /)
 -- Método: bytearray.join (iterable, /)

     Retorna um objeto bytes ou bytearray que é a concatenação das
     sequências de dados binários no iterável 'iterable'.  Uma exceção
     *note TypeError: 2c3. será levantada se existirem quaisquer valores
     que não sejam *note objeto bytes ou similar: d4f, no 'iterable',
     incluindo objetos *note str: 44c.  O separador entre elementos é o
     conteúdo do objeto bytes ou bytearray que está fornecendo este
     método.

 -- Método: static bytes.maketrans (from, to, /)
 -- Método: static bytearray.maketrans (from, to, /)

     Este método estático retorna uma tabela de tradução usável para
     *note bytes.translate(): 2379, que irá mapear cada caractere em
     'from' no caractere na mesma posição em 'to'; 'from' e 'to' devem
     ambos ser *note objetos bytes ou similares: d4f. e ter o mesmo
     comprimento.

     Adicionado na versão 3.1.

 -- Método: bytes.partition (sep, /)
 -- Método: bytearray.partition (sep, /)

     Quebra a sequência na primeira ocorrência de 'sep', e retorna uma
     tupla com 3 elementos contendo a parte antes do separador, o
     próprio separador, e a parte após o separador.  Se o separador não
     for encontrado, retorna uma tupla com 3 elementos contendo uma
     cópia da sequência original, seguido de dois bytes ou objetos
     bytearray vazios.

     O separador para buscar pode ser qualquer *note objeto bytes ou
     similar: d4f.

 -- Método: bytes.replace (old, new, count=-1, /)
 -- Método: bytearray.replace (old, new, count=-1, /)

     Retornar uma cópia da sequência com todas as ocorrências de
     subsequências 'antigas' substituídas por 'novo'.  Se o argumento
     opcional 'count' for fornecido, apenas as primeiras ocorrências de
     'count' serão substituídas.

     A subsequência para buscar e substituição pode ser qualquer termos
     *note objeto bytes ou similar: d4f.

          Nota: A versão Bytearray deste método 'não' opera no local – o
          mesmo sempre produz um novo objeto, mesmo que não tenha sido
          feitas alterações.

 -- Método: bytes.rfind (sub[, start[, end]])
 -- Método: bytearray.rfind (sub[, start[, end]])

     Retorna o índice mais alto na sequência onde a subsequência 'sub'
     foi encontrada, de modo que 'sub' esteja contido dentro de
     ‘s[start:end]’.  Os argumentos opcionais 'start' e 'end' são
     interpretados como na notação de fatiamento.  Caso ocorra algum
     problema será retornado ‘-1’.

     A subsequência a ser procurada poderá ser qualquer *note objeto
     bytes ou similar: d4f. ou um inteiro no intervalo de 0 a 255.

     Alterado na versão 3.3: Também aceita um número inteiro no
     intervalo de 0 a 255 como subsequência.

 -- Método: bytes.rindex (sub[, start[, end]])
 -- Método: bytearray.rindex (sub[, start[, end]])

     Semelhante a *note rfind(): 195f. mas levanta *note ValueError:
     202. quando a subsequência 'sub' não é encontrada.

     A subsequência a ser procurada poderá ser qualquer *note objeto
     bytes ou similar: d4f. ou um inteiro no intervalo de 0 a 255.

     Alterado na versão 3.3: Também aceita um número inteiro no
     intervalo de 0 a 255 como subsequência.

 -- Método: bytes.rpartition (sep, /)
 -- Método: bytearray.rpartition (sep, /)

     Quebra a sequência na primeira ocorrência de 'sep', e retorna uma
     tupla com 3 elementos contendo a parte antes do separador, o
     próprio separador, e a parte após o separador.  Se o separador não
     for encontrado, retorna uma tupla com 3 elementos contendo dois
     bytes ou objetos bytearray vazios, seguido por uma cópia da
     sequência original.

     O separador para buscar pode ser qualquer *note objeto bytes ou
     similar: d4f.

 -- Método: bytes.startswith (prefix[, start[, end]])
 -- Método: bytearray.startswith (prefix[, start[, end]])

     Retorna ‘True’ se os dados binários começam com o 'prefix'
     especificado, caso contrário retorna ‘False’.  'prefix' também pode
     ser uma tupla de prefixos para procurar.  Com o parâmetro opcional
     'start', começa a procura na posição indicada.  Com o parâmetro
     opcional 'end', encerra a procura na posição indicada.

     Os prefixos para pesquisar podem ser qualquer *note objeto bytes ou
     similar: d4f.

 -- Método: bytes.translate (table, /, delete=b'')
 -- Método: bytearray.translate (table, /, delete=b'')

     Retorna uma cópia dos bytes ou objeto bytearray, onde todas as
     ocorrências de bytes do argumento opcional 'delete' são removidas,
     e os bytes restantes foram mapeados através da tabela de tradução
     fornecida, a qual deve ser um objeto bytes de comprimento 256.

     Você pode usar o método *note bytes.maketrans(): 12b6. para criar
     uma tabela de tradução.

     Define o argumento 'table' como ‘None’ para traduções que excluem
     apenas caracteres:

          >>> b'leia este curto texto'.translate(None, b'aeiou')
          b'l st crt txt'

     Alterado na versão 3.6: 'delete' agora é suportado como um
     argumento nomeado.

Os seguintes métodos de objetos bytes e bytearray tem comportamentos
padrões que presumem o uso de formatos binários compatíveis com ASCII,
mas ainda podem ser usados com dados binários arbitrários através da
passagem argumentos apropriados.  Perceba que todos os métodos de
bytearray nesta seção 'não' alteram os argumentos, e ao invés disso
produzem novos objetos.

 -- Método: bytes.center (width, fillbyte=b' ', /)
 -- Método: bytearray.center (width, fillbyte=b' ', /)

     Retorna uma cópia do objeto centralizado em uma sequência de
     comprimento 'width'.  Preenchimento é feito usando o 'fillbyte'
     especificado (o padrão é um espaço ASCII). Para objetos *note
     bytes: 1c2, a sequência original é retornada se 'width' é menor que
     ou igual a ‘len(s)’.

          Nota: A versão Bytearray deste método 'não' opera no local – o
          mesmo sempre produz um novo objeto, mesmo que não tenha sido
          feitas alterações.

 -- Método: bytes.ljust (width, fillbyte=b' ', /)
 -- Método: bytearray.ljust (width, fillbyte=b' ', /)

     Retorna uma cópia do objeto alinhado a esquerda em uma sequência de
     comprimento 'width'.  Preenchimento é feito usando o 'fillbyte'
     especificado (o padrão é um espaço ASCII). Para objetos *note
     bytes: 1c2, a sequência original é retornada se 'width' é menor que
     ou igual a ‘len(s)’.

          Nota: A versão Bytearray deste método 'não' opera no local – o
          mesmo sempre produz um novo objeto, mesmo que não tenha sido
          feitas alterações.

 -- Método: bytes.lstrip (bytes=None, /)
 -- Método: bytearray.lstrip (bytes=None, /)

     Retorna uma cópia da sequência com bytes iniciais especificados
     removidos.  O argumento 'bytes' é uma sequência binária que
     especifica o conjunto de valores de bytes a serem removidos.  Se
     for omitido ou se for ‘None’, o argumento 'bytes' será considerado
     como espaço em branco ASCII por padrão para a remoção.  O argumento
     'bytes' não é um prefixo; ao invés disso, todas as combinações dos
     seus valores são removidas:

          >>> b'   spacious   '.lstrip()
          b'spacious   '
          >>> b'www.example.com'.lstrip(b'cmowz.')
          b'example.com'

     A sequência binária de valores de bytes a serem removidos pode ser
     *note objeto bytes ou similar: d4f.  Consulte *note removeprefix():
     2371. para um método que removerá uma única string de prefixo em
     vez de todo um conjunto de caracteres.  Por exemplo:

          >>> b'Arthur: three!'.lstrip(b'Arthur: ')
          b'ee!'
          >>> b'Arthur: three!'.removeprefix(b'Arthur: ')
          b'three!'

          Nota: A versão Bytearray deste método 'não' opera no local – o
          mesmo sempre produz um novo objeto, mesmo que não tenha sido
          feitas alterações.

 -- Método: bytes.rjust (width, fillbyte=b' ', /)
 -- Método: bytearray.rjust (width, fillbyte=b' ', /)

     Retorna uma cópia do objeto alinhado a direita em uma sequência de
     comprimento 'width'.  Preenchimento é feito usando o 'fillbyte'
     especificado (o padrão é um espaço ASCII). Para objetos *note
     bytes: 1c2, a sequência original é retornada se 'width' é menor que
     ou igual a ‘len(s)’.

          Nota: A versão Bytearray deste método 'não' opera no local – o
          mesmo sempre produz um novo objeto, mesmo que não tenha sido
          feitas alterações.

 -- Método: bytes.rsplit (sep=None, maxsplit=-1)
 -- Método: bytearray.rsplit (sep=None, maxsplit=-1)

     Divide a sequência binária em subsequência do mesmo tipo, usando
     'sep' como um delimitador de string.  Se 'maxsplit' é fornecido, no
     máximo 'maxsplit' divisões são feitas, aquelas que estão 'mais à
     direita'.  Se 'sep' não é especificado ou é ‘None’, qualquer
     subsequência consistindo unicamente de espaço em branco ASCII é um
     separador.  Exceto por dividir pela direita, *note rsplit(): 15bf.
     comporta-se como *note split(): 15be, o qual é descrito em detalhes
     abaixo.

 -- Método: bytes.rstrip (bytes=None, /)
 -- Método: bytearray.rstrip (bytes=None, /)

     Retorna uma cópia da sequência com bytes finais especificados
     removidos.  O argumento 'bytes' é uma sequência binária que
     especifica o conjunto de valores de bytes a serem removidos.  Se
     for omitido ou se for ‘None’, o argumento 'bytes' será considerado
     como espaço em branco ASCII por padrão para a remoção.  O argumento
     'bytes' não é um sufixo; ao invés disso, todas as combinações dos
     seus valores são removidas:

          >>> b'   spacious   '.rstrip()
          b'   spacious'
          >>> b'mississippi'.rstrip(b'ipz')
          b'mississ'

     A sequência binária de valores de bytes a serem removidos pode ser
     *note objeto bytes ou similar: d4f.  Consulte *note removesuffix():
     2373. para um método que removerá uma única string de sufixo em vez
     de todo um conjunto de caracteres.  Por exemplo:

          >>> b'Monty Python'.rstrip(b' Python')
          b'M'
          >>> b'Monty Python'.removesuffix(b' Python')
          b'Monty'

          Nota: A versão Bytearray deste método 'não' opera no local – o
          mesmo sempre produz um novo objeto, mesmo que não tenha sido
          feitas alterações.

 -- Método: bytes.split (sep=None, maxsplit=-1)
 -- Método: bytearray.split (sep=None, maxsplit=-1)

     Divide a sequência binária em subsequências do mesmo tipo, usando
     'sep' como o delimitador de string.  Se 'maxsplit' é fornecido e
     não-negativo, no máximo 'maxsplit' divisões são feitas (logo, a
     lista terá no máximo ‘maxsplit+1’ elementos).  Se 'maxsplit' não é
     especificado ou é ‘-1’, então não existe limite no número de
     divisões (todas as divisões possíveis são feitas).

     Se 'sep' é fornecido, delimitadores consecutivos não são agrupados
     juntos e eles são destinados para delimitar strings vazias (por
     exemplo, ‘b'1,,2'.split(b',')’ retorna ‘[b'1', b'', b'2']’).  O
     argumento 'sep' pode consistir de uma sequência de múltiplos bytes
     como um único delimitador.  Separar uma sequência vazia com um
     separador especificado retorna ‘[b'']’ ou ‘[bytearray(b'')]’
     dependendo do tipo do objeto que está sendo separado.  O argumento
     'sep' pode ser qualquer *note objeto bytes ou similar: d4f.

     Por exemplo:

          >>> b'1,2,3'.split(b',')
          [b'1', b'2', b'3']
          >>> b'1,2,3'.split(b',', maxsplit=1)
          [b'1', b'2,3']
          >>> b'1,2,,3,'.split(b',')
          [b'1', b'2', b'', b'3', b'']
          >>> b'1<>2<>3<4'.split(b'<>')
          [b'1', b'2', b'3<4']

     Se 'sep' não for especificado ou for ‘None’, um algoritmo diferente
     de separação é aplicado: ocorrências consecutivas de espaços em
     branco ASCII são consideradas como um separador único, e o
     resultado não conterá strings vazias no início ou no final, se a
     sequência tiver espaços em branco no início ou no final.
     Consequentemente, separar uma sequência vazia ou uma sequência que
     consiste apenas de espaços em branco ASCII sem um separador
     especificado, retorna ‘[]’.

     Por exemplo:

          >>> b'1 2 3'.split()
          [b'1', b'2', b'3']
          >>> b'1 2 3'.split(maxsplit=1)
          [b'1', b'2 3']
          >>> b'   1   2   3   '.split()
          [b'1', b'2', b'3']

 -- Método: bytes.strip (bytes=None, /)
 -- Método: bytearray.strip (bytes=None, /)

     Retorna uma cópia da sequência com bytes iniciais e finais
     especificados removidos.  O argumento 'bytes' é uma sequência
     binária que especifica o conjunto de valores de bytes a serem
     removidos.  Se for omitido ou se for ‘None’, o argumento 'bytes'
     será considerado como espaço em branco ASCII por padrão para a
     remoção.  O argumento 'bytes' não é um prefixo ou sufixo; ao invés
     disso, todas as combinações dos seus valores são removidas:

          >>> b'   spacious   '.strip()
          b'spacious'
          >>> b'www.example.com'.strip(b'cmowz.')
          b'example'

     A sequência binária de valores de bytes a serem removidos pode ser
     qualquer *note objeto bytes ou similar: d4f.

          Nota: A versão Bytearray deste método 'não' opera no local – o
          mesmo sempre produz um novo objeto, mesmo que não tenha sido
          feitas alterações.

O seguintes métodos de bytes e objetos bytearray presumem o uso de
formatos binários compatíveis com ASCII e não devem ser aplicados a
dados binários arbitrários.  Perceba que todos os métodos de bytearray
nesta seção 'não' alteram os argumentos, e ao invés disso produzem novos
objetos.

 -- Método: bytes.capitalize ()
 -- Método: bytearray.capitalize ()

     Retorna uma cópia da sequência com cada byte interpretado como um
     caractere ASCII, e o primeiro byte em letra maiúscula e o resto em
     letras minúsculas.  Valores de bytes que não são ASCII são passados
     adiante sem mudanças.

          Nota: A versão Bytearray deste método 'não' opera no local – o
          mesmo sempre produz um novo objeto, mesmo que não tenha sido
          feitas alterações.

 -- Método: bytes.expandtabs (tabsize=8)
 -- Método: bytearray.expandtabs (tabsize=8)

     Retorna uma cópia da sequência onde todos os caracteres de
     tabulação ASCII são substituídos por um ou mais espaços ASCII,
     dependendo da coluna atual e do tamanho fornecido para a tabulação.
     Posições de tabulação ocorrem a cada 'tabsize' bytes (o padrão é 8,
     dada as posições de tabulação nas colunas 0, 8, 16 e assim por
     diante).  Para expandir a sequência, a coluna atual é definida como
     zero e a sequência é examinada byte por byte.  Se o byte é um
     caractere ASCII de tabulação (‘b'\t'’), um ou mais caracteres de
     espaço são inseridos no resultado até que a coluna atual seja igual
     a próxima posição de tabulação.  (O caractere de tabulação em si
     não é copiado.)  Se o byte atual é um caractere ASCII de nova linha
     (‘b'\n'’) ou de retorno (‘b'\r'’), ele é copiado e a coluna atual é
     redefinida para zero.  Qualquer outro byte é copiado sem ser
     modificado e a coluna atual é incrementada em uma unidade
     independentemente de como o byte é representado quanto é impresso:

          >>> b'01\t012\t0123\t01234'.expandtabs()
          b'01      012     0123    01234'
          >>> b'01\t012\t0123\t01234'.expandtabs(4)
          b'01  012 0123    01234'

          Nota: A versão Bytearray deste método 'não' opera no local – o
          mesmo sempre produz um novo objeto, mesmo que não tenha sido
          feitas alterações.

 -- Método: bytes.isalnum ()
 -- Método: bytearray.isalnum ()

     Retorna ‘True’ se todos os bytes na sequência são caracteres
     alfabéticos ASCII ou dígitos decimais ASCII e a sequência não é
     vazia, ‘False’ caso contrário.  Caracteres alfabéticos ASCII são
     aqueles valores de byte na sequência
     ‘b'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'’.  Dígitos
     decimais ASCII são aqueles valores de byte na sequência
     ‘b'0123456789'’.

     Por exemplo:

          >>> b'ABCabc1'.isalnum()
          True
          >>> b'ABC abc1'.isalnum()
          False

 -- Método: bytes.isalpha ()
 -- Método: bytearray.isalpha ()

     Retorna ‘True’ se todos os bytes na sequência são caracteres
     alfabéticos ASCII e a sequência não é vazia, ‘False’ caso
     contrário.  Caracteres alfabéticos ASCII são aqueles cujo valor dos
     bytes estão na sequência
     ‘b'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'’.

     Por exemplo:

          >>> b'ABCabc'.isalpha()
          True
          >>> b'ABCabc1'.isalpha()
          False

 -- Método: bytes.isascii ()
 -- Método: bytearray.isascii ()

     Retorna ‘True’ se a sequência é vazia ou todos os bytes na
     sequência são ASCII, ‘False’ caso contrário.  Bytes ASCII estão no
     intervalo 0-0x7F.

     Adicionado na versão 3.7.

 -- Método: bytes.isdigit ()
 -- Método: bytearray.isdigit ()

     Retorna ‘True’ se todos os bytes na sequência são dígitos decimais
     ASCII e a sequência não é vazia, ‘False’ caso contrário.  Dígitos
     decimais ASCII são aqueles cujos valores dos bytes estão na
     sequência ‘b'0123456789'’.

     Por exemplo:

          >>> b'1234'.isdigit()
          True
          >>> b'1.23'.isdigit()
          False

 -- Método: bytes.islower ()
 -- Método: bytearray.islower ()

     Retorna ‘True’ se existe pelo menos um caractere minúsculo ASCII na
     sequência e nenhum caractere maiúsculo ASCII, ‘False’ caso
     contrário.

     Por exemplo:

          >>> b'hello world'.islower()
          True
          >>> b'Hello world'.islower()
          False

     Caracteres minúsculos ASCII são aqueles cujos valores de bytes
     estão na sequência ‘b'abcdefghijklmnopqrstuvwxyz'’.  Caracteres
     maiúsculos ASCII são aqueles cujos valores de bytes estão na
     sequência ‘b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'’.

 -- Método: bytes.isspace ()
 -- Método: bytearray.isspace ()

     Retorna ‘True’ se todos os bytes na sequência são espaço em branco
     ASCII e a sequência não é vazia, ‘False’ caso contrário.
     Caracteres de espaço em branco ASCII são aqueles cujos valores de
     bytes estão na sequência ‘b' \t\n\r\x0b\f'’ (espaço, tabulação,
     nova linha, retorno do cursor, tabulação vertical, formulário de
     entrada).

 -- Método: bytes.istitle ()
 -- Método: bytearray.istitle ()

     Retorna ‘True’ se a sequência é titlecased ASCII e a sequência não
     é vazia, ‘False’ caso contrário.  Veja *note bytes.title(): 23a2.
     para mais detalhes sobre a definição de “titlecased”.

     Por exemplo:

          >>> b'Hello World'.istitle()
          True
          >>> b'Hello world'.istitle()
          False

 -- Método: bytes.isupper ()
 -- Método: bytearray.isupper ()

     Retorna ‘True’ se existe pelo menos um caractere maiúsculo
     alfabético ASCII na sequência e nenhum caractere minúsculo ASCII,
     ‘False’ caso contrário.

     Por exemplo:

          >>> b'HELLO WORLD'.isupper()
          True
          >>> b'Hello world'.isupper()
          False

     Caracteres minúsculos ASCII são aqueles cujos valores de bytes
     estão na sequência ‘b'abcdefghijklmnopqrstuvwxyz'’.  Caracteres
     maiúsculos ASCII são aqueles cujos valores de bytes estão na
     sequência ‘b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'’.

 -- Método: bytes.lower ()
 -- Método: bytearray.lower ()

     Retorna uma cópia da sequência com todos os caracteres maiúsculos
     ASCII convertidos para os seus correspondentes caracteres
     minúsculos.

     Por exemplo:

          >>> b'Hello World'.lower()
          b'hello world'

     Caracteres minúsculos ASCII são aqueles cujos valores de bytes
     estão na sequência ‘b'abcdefghijklmnopqrstuvwxyz'’.  Caracteres
     maiúsculos ASCII são aqueles cujos valores de bytes estão na
     sequência ‘b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'’.

          Nota: A versão Bytearray deste método 'não' opera no local – o
          mesmo sempre produz um novo objeto, mesmo que não tenha sido
          feitas alterações.

 -- Método: bytes.splitlines (keepends=False)
 -- Método: bytearray.splitlines (keepends=False)

     Retorna uma lista das linhas na sequência binária, quebrando nos
     limites ASCII das linhas.  Este método usa a abordagem de *note
     novas linhas universais: d5c. para separar as linhas.  Quebras de
     linhas não são incluídas na lista resultante a não ser que
     'keepends' seja fornecido e verdadeiro.

     Por exemplo:

          >>> b'ab c\n\nde fg\rkl\r\n'.splitlines()
          [b'ab c', b'', b'de fg', b'kl']
          >>> b'ab c\n\nde fg\rkl\r\n'.splitlines(keepends=True)
          [b'ab c\n', b'\n', b'de fg\r', b'kl\r\n']

     Ao contrário de *note split(): 238d, quando uma string delimitadora
     'sep' é fornecida, este método retorna uma lista vazia para a
     string vazia, e uma quebra de linha terminal não resulta em uma
     linha extra:

          >>> b"".split(b'\n'), b"Two lines\n".split(b'\n')
          ([b''], [b'Two lines', b''])
          >>> b"".splitlines(), b"One line\n".splitlines()
          ([], [b'One line'])

 -- Método: bytes.swapcase ()
 -- Método: bytearray.swapcase ()

     Retorna uma cópia da sequência com todos os caracteres minúsculos
     ASCII convertidos para caracteres maiúsculos correspondentes, e
     vice-versa.

     Por exemplo:

          >>> b'Hello World'.swapcase()
          b'hELLO wORLD'

     Caracteres minúsculos ASCII são aqueles cujos valores de bytes
     estão na sequência ‘b'abcdefghijklmnopqrstuvwxyz'’.  Caracteres
     maiúsculos ASCII são aqueles cujos valores de bytes estão na
     sequência ‘b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'’.

     Ao contrário de *note str.swapcase(): 2365, é sempre fato que
     ‘bin.swapcase().swapcase() == bin’ para as versões binárias.
     Conversões maiúsculas/minúsculas são simétricas em ASCII, apesar
     que isso não é geralmente verdade para pontos de código arbitrários
     Unicode.

          Nota: A versão Bytearray deste método 'não' opera no local – o
          mesmo sempre produz um novo objeto, mesmo que não tenha sido
          feitas alterações.

 -- Método: bytes.title ()
 -- Método: bytearray.title ()

     Retorna uma versão titlecased da sequência binária, onde palavras
     iniciam com um caractere ASCII com letra maiúscula e os caracteres
     restantes são em letras minúsculas.  Bytes quem não possuem
     diferença entre maiúscula/minúscula não são alterados.

     Por exemplo:

          >>> b'Hello world'.title()
          b'Hello World'

     Caracteres minúsculos ASCII são aqueles cujos valores de byte estão
     na sequência ‘b'abcdefghijklmnopqrstuvwxyz'’.  Caracteres
     maiúsculos ASCII são aqueles cujos valores de byte estão na
     sequência ‘b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'’.  Todos os outros valores
     de bytes ignoram maiúsculas/minúsculas.

     O algoritmo usa uma definição simples independente de idioma para
     uma palavra, como grupos de letras consecutivas.  A definição
     funciona em muitos contextos, mas isso significa que apóstrofes em
     contrações e possessivos formam limites de palavras, os quais podem
     não ser o resultado desejado:

          >>> b"they're bill's friends from the UK".title()
          b"They'Re Bill'S Friends From The Uk"

     Uma solução alternativa para os apóstrofes pode ser construída
     usando expressões regulares:

          >>> import re
          >>> def titlecase(s):
          ...     return re.sub(rb"[A-Za-z]+('[A-Za-z]+)?",
          ...                   lambda mo: mo.group(0)[0:1].upper() +
          ...                              mo.group(0)[1:].lower(),
          ...                   s)
          ...
          >>> titlecase(b"they're bill's friends.")
          b"They're Bill's Friends."

          Nota: A versão Bytearray deste método 'não' opera no local – o
          mesmo sempre produz um novo objeto, mesmo que não tenha sido
          feitas alterações.

 -- Método: bytes.upper ()
 -- Método: bytearray.upper ()

     Retorna uma cópia da sequência com todos os caracteres minúsculos
     ASCII convertidos para sua contraparte maiúscula correspondente.

     Por exemplo:

          >>> b'Hello World'.upper()
          b'HELLO WORLD'

     Caracteres minúsculos ASCII são aqueles cujos valores de bytes
     estão na sequência ‘b'abcdefghijklmnopqrstuvwxyz'’.  Caracteres
     maiúsculos ASCII são aqueles cujos valores de bytes estão na
     sequência ‘b'ABCDEFGHIJKLMNOPQRSTUVWXYZ'’.

          Nota: A versão Bytearray deste método 'não' opera no local – o
          mesmo sempre produz um novo objeto, mesmo que não tenha sido
          feitas alterações.

 -- Método: bytes.zfill (width, /)
 -- Método: bytearray.zfill (width, /)

     Retorna uma cópia da sequência preenchida a esquerda com dígitos
     ‘b'0'’ ASCII para produzir uma sequência se comprimento 'width'.
     Um sinal de prefixo inicial (‘b'+'’/ ‘b'-'’) é controlado através
     da inserção de preenchimento 'depois' do caractere de sinal, ao
     invés de antes.  Para objetos *note bytes: 1c2, a sequência
     original é retornada se 'width' é menor que ou igual a ‘len(seq)’.

     Por exemplo:

          >>> b"42".zfill(5)
          b'00042'
          >>> b"-42".zfill(5)
          b'-0042'

          Nota: A versão Bytearray deste método 'não' opera no local – o
          mesmo sempre produz um novo objeto, mesmo que não tenha sido
          feitas alterações.


File: python.info,  Node: Estilo de Formatação de bytes printf-style,  Next: Memory Views,  Prev: Operações com Bytes e Bytearray,  Up: Tipos de sequência binária — bytes bytearray memoryview

5.4.9.4 Estilo de Formatação de bytes ‘printf’-style
....................................................

     Nota: As operações de formatação descritas aqui exibem uma
     variedade de peculiaridades que levam a uma série de erros comuns
     (como a falha na exibição de Tuplas e Dicionários corretamente).
     Se o valor que está sendo impresso puder ser uma tupla ou
     dicionário, envolva-o numa tupla.

Objetos Bytes (‘bytes’/‘bytearray’) possuem uma operação integrada
exclusiva: o operador ‘%’ (modulo).  Isso também é conhecido como o
bytes de 'formatação' ou o operador de 'interpolação'.  Dado ‘format %
values’ (onde 'format' é um objeto bytes), as especificações de
conversão ‘%’ em 'format' são substituídas por zero ou mais elementos de
'values'.  O efeito é semelhante ao uso da função ‘sprintf()’ na
linguagem C.

Se 'format' requer um único argumento, 'values' poderá ser um único
objeto não-tuple.  (1)  Caso contrário, 'values' deverá ser uma tupla
com exatamente o número de itens especificados pelo objeto de formatação
de Bytes, ou um único objeto de mapeamento (por exemplo, um dicionário).

Um especificador de conversão contém dois ou mais caracteres e tem os
seguintes componentes, que devem aparecer nesta ordem:

  1. O caractere ‘'%'’, que determina o início do especificador.

  2. Mapeamento de chaves (opcional), consistindo de uma sequência entre
     parênteses de caracteres (por exemplo, ‘(algumnome)’).

  3. Flags de conversão (opcional), que afetam o resultado de alguns
     tipos de conversão.

  4. Largura mínima do campo (opcional).  Se for especificado como um
     ‘'*'’ (asterisco), a largura real será lida a partir do próximo
     elemento da tupla em 'values' e o objeto a converter virá após a
     largura mínima do campo e a precisão que é opcional.

  5. Precisão (opcional), fornecido como uma ‘'.'’ (ponto) seguido pela
     precisão.  Se determinado como um ‘'*'’ (um asterisco), a precisão
     real será lida a partir do próximo elemento da tupla em 'values', e
     o valor a converter virá após a precisão.

  6. Modificador de comprimento (opcional).

  7. Tipo de conversão.

Quando o argumento a direita é um dicionário (ou outro tipo de
mapeamento), então o formato no objeto bytes 'deve' incluir um
mapeamento de chaves entre parêntesis neste dicionário inserido
imediatamente após o caractere ‘'%'’.  O mapeamento de chaves seleciona
o valor a ser formatado a partir do mapeamento.  Por exemplo:

     >>> print(b'%(language)s has %(number)03d quote types.' %
     ...       {b'language': b"Python", b"number": 2})
     b'Python has 002 quote types.'

Nesse caso, nenhum especificador ‘*’ poderá ocorrer num formato (uma vez
que eles exigem uma lista de parâmetros sequenciais).

Os caracteres flags de conversão são:

Sinalizador   Significado
              
----------------------------------------------------------------------------------------
              
‘'#'’         A conversão de valor usará o “formulário alternativo” (conforme
              definido abaixo).
              
              
‘'0'’         A conversão será preenchida por zeros para valores numéricos.
              
              
‘'-'’         O valor convertido será ajustado à esquerda (substitui a conversão
              ‘'0'’ se ambos forem fornecidos).
              
              
‘' '’         (um espaço) Um espaço em branco deverá ser deixado antes de um número
              positivo (ou uma string vazia) produzido por uma conversão assinada.
              
              
‘'+'’         Um sinal de caractere (‘'+'’ ou ‘'-'’) precederá a conversão
              (substituindo o sinalizador de “espaço”).
              

Um modificador de comprimento (‘h’, ‘l’, ou ‘L’) pode estar presente,
mas será ignorado, pois o mesmo não é necessário para o Python – então,
por exemplo, ‘%ld’ é idêntico a ‘%d’.

Os tipos de conversão são:

Conversão        Significado                                               Notas
                                                                           
---------------------------------------------------------------------------------------
                                                                           
‘'d'’            Número decimal inteiro sinalizador.
                 
                                                                           
‘'i'’            Número decimal inteiro sinalizador.
                 
                                                                           
‘'o'’            Valor octal sinalizador.                                  (1)
                                                                           
                                                                           
‘'u'’            Tipo obsoleto – é idêntico a ‘'d'’.                       (8)
                                                                           
                                                                           
‘'x'’            Hexadecimal com sinal (minúsculo).                        (2)
                                                                           
                                                                           
‘'X'’            Hexadecimal com sinal (maiúsculo).                        (2)
                                                                           
                                                                           
‘'e'’            Formato exponencial de ponto flutuante (minúsculo).       (3)
                                                                           
                                                                           
‘'E'’            Formato exponencial de ponto flutuante (maiúsculo).       (3)
                                                                           
                                                                           
‘'f'’            Formato decimal de ponto flutuante.                       (3)
                                                                           
                                                                           
‘'F'’            Formato decimal de ponto flutuante.                       (3)
                                                                           
                                                                           
‘'g'’            O formato de ponto flutuante.  Usa o formato              (4)
                 exponencial em minúsculo se o expoente for inferior a     
                 -4 ou não inferior a precisão, formato decimal, caso
                 contrário.
                 
                                                                           
‘'G'’            Formato de ponto flutuante.  Usa o formato exponencial    (4)
                 em maiúsculo se o expoente for inferior a -4 ou não       
                 inferior que a precisão, formato decimal, caso
                 contrário.
                 
                                                                           
‘'c'’            Byte simples (aceita objetos inteiros ou de byte
                 único).
                 
                                                                           
‘'b'’            Bytes (qualquer objeto que segue o                        (5)
                 *note buffer protocol: 2e8. o que possui                  
                 *note __bytes__(): 5e8.).
                 
                                                                           
‘'s'’            ‘'s'’ é um alias para ‘'b'’ e só deve ser usado para      (6)
                 bases de código Python2/3.                                
                 
                                                                           
‘'a'’            Bytes (converte qualquer objeto Python usando             (5)
                 ‘repr(obj).encode('ascii', 'backslashreplace')’).         
                 
                                                                           
‘'r'’            ‘'r'’ é um alias para ‘'a'’ e só deve ser usado para      (7)
                 bases de código Python2/3.                                
                 
                                                                           
‘'%'’            Nenhum argumento é convertido, resultando em um
                 caractere ‘'%'’ no resultado.
                 

Notas:

  1. A forma alternativa faz com que um especificador octal principal
     (‘'0o'’) seja inserido antes do primeiro dígito.

  2. O formato alternativo produz um ‘'0x'’ ou ‘'0X'’ (dependendo se o
     formato ‘'x'’ or ‘'X'’ foi usado) para ser inserido antes do
     primeiro dígito.

  3. A forma alternativa faz com que o resultado sempre contenha um
     ponto decimal, mesmo que nenhum dígito o siga.

     A precisão determina o número de dígitos após o ponto decimal e o
     padrão é 6.

  4. A forma alternativa faz com que o resultado sempre contenha um
     ponto decimal e os zeros à direita não sejam removidos, como de
     outra forma seriam.

     A precisão determina o número de dígitos significativos antes e
     depois do ponto decimal e o padrão seja 6.

  5. Se a precisão for ‘N’, a saída será truncada em ‘N’ caracteres.

  6. ‘b'%s'’ está descontinuado, mas não será removido durante a versão
     3.x.

  7. ‘b'%r'’ entrou em desuso, mas não serão removidos na versão 3.x.

  8. Veja PEP 237(2).

     Nota: A versão Bytearray deste método 'não' opera no local – o
     mesmo sempre produz um novo objeto, mesmo que não tenha sido feitas
     alterações.

Ver também
..........

PEP 461(3) - Adicionar formatação % para to bytes e bytearray

Adicionado na versão 3.5.

   ---------- Footnotes ----------

   (1) Para formatar apenas uma tupla, você deve portanto fornecer uma
tupla com apenas um elemento, que é a tupla a ser formatada.

   (2) https://peps.python.org/pep-0237/

   (3) https://peps.python.org/pep-0461/


File: python.info,  Node: Memory Views,  Prev: Estilo de Formatação de bytes printf-style,  Up: Tipos de sequência binária — bytes bytearray memoryview

5.4.9.5 Memory Views
....................

O objeto *note memoryview: 2eb. permite que o código Python acesse os
dados internos de um objeto que suporte o *note buffer protocol: 2e8.
sem copiá-lo.

 -- Classe: memoryview (object)

     Cria uma *note memoryview: 2eb. que referencia 'object'.  'object'
     deve ter suporte ao protocolo de buffer.  Objetos embutidos com
     suporte ao protocolo de buffer incluem: *note bytes: 1c2. e *note
     bytearray: 2ea.

     Uma *note memoryview: 2eb. tem a noção de um 'elemento', o qual é a
     unidade de memória atômica manipulada pelo objeto de origem
     'object'.  Para muitos tipos simples tais como *note bytes: 1c2. e
     *note bytearray: 2ea, um elemento é um byte único, mas outros tipos
     tais como *note array.array: 1a0. podem ter elementos maiores.

     ‘len(view)’ é igual ao comprimento de *note tolist: 23b2, que é a
     representação de lista aninhada da view.  Se ‘view.ndim = 1’, isso
     é igual ao número de elementos na visualização.

     Alterado na versão 3.12: Se ‘view.ndim == 0’, ‘len(view)’ agora
     levanta *note TypeError: 2c3. em vez de retornar 1.

     O atributo *note itemsize: 23b3. vai lhe dar um número de bytes em
     um único elemento.

     Um *note memoryview: 2eb. suporta fatiamento e indexação para expor
     seus dados.  Fatiamento unidimensional irá resultar em uma subview:

          >>> v = memoryview(b'abcefg')
          >>> v[1]
          98
          >>> v[-1]
          103
          >>> v[1:4]
          <memory at 0x7f3ddc9f4350>
          >>> bytes(v[1:4])
          b'bce'

     Se *note format: 23b4. é um dos especificadores de formatação
     nativos do módulo *note struct: d5, indexar com um inteiro ou uma
     tupla de inteiros também é suportado, e retorna um 'element' único
     com o tipo correto.  Memoryviews unidimensionais podem ser
     indexadas com um inteiro ou uma tupla contendo um inteiro.
     Memoryviews multi-dimensionais podem ser indexadas com tuplas de
     exatamente 'ndim' inteiros, onde 'ndim' é o número de dimensões.
     Memoryviews zero-dimensionais podem ser indexadas com uma tupla
     vazia.

     Aqui temos um exemplo usando um formato não-byte:

          >>> import array
          >>> a = array.array('l', [-11111111, 22222222, -33333333, 44444444])
          >>> m = memoryview(a)
          >>> m[0]
          -11111111
          >>> m[-1]
          44444444
          >>> m[::2].tolist()
          [-11111111, -33333333]

     Se o objeto subjacente é gravável, a memoryview suporta atribuição
     de fatias unidimensionais.  Redimensionamento não é permitido:

          >>> data = bytearray(b'abcefg')
          >>> v = memoryview(data)
          >>> v.readonly
          False
          >>> v[0] = ord(b'z')
          >>> data
          bytearray(b'zbcefg')
          >>> v[1:4] = b'123'
          >>> data
          bytearray(b'z123fg')
          >>> v[2:3] = b'spam'
          Traceback (most recent call last):
            File "<stdin>", line 1, in <module>
          ValueError: memoryview assignment: lvalue and rvalue have different structures
          >>> v[2:6] = b'spam'
          >>> data
          bytearray(b'z1spam')

     Memoryviews unidimensionais de tipos *note hasheáveis: 610.
     (somente leitura) com formatos ‘B’, ‘b’ ou ‘c’ também são
     hasheáveis.  O hash é definido como ‘hash(m) == hash(m.tobytes())’:

          >>> v = memoryview(b'abcefg')
          >>> hash(v) == hash(b'abcefg')
          True
          >>> hash(v[2:4]) == hash(b'ce')
          True
          >>> hash(v[::-2]) == hash(b'abcefg'[::-2])
          True

     Alterado na versão 3.3: Memoryviews unidimensionais agora podem ser
     fatiadas.  Memoryviews unidimensionais com formatos ‘B’, ‘b’ ou ‘c’
     agora são *note hasheáveis: 610.

     Alterado na versão 3.4: O memoryview agora é registrado
     automaticamente como uma classe *note collections.abc.Sequence:
     1204.

     Alterado na versão 3.5: Atualmente, os memoryvies podem ser
     indexadas com uma tupla de números inteiros.

     *note memoryview: 2eb. possui vários métodos:

      -- Método: __eq__ (exporter)

          Uma memoryview e um exportador PEP 3118(1) são iguais se as
          suas formas são equivalentes e se todos os valores
          correspondentes são iguais quando os códigos de formatação dos
          respectivos operadores são interpretados usando a sintaxe
          *note struct: d5.

          Para o subconjunto *note struct: d5. a formatação de Strings
          atualmente suportadas por *note tolist(): 23b2, ‘v’ e ‘w’ são
          iguais se ‘v.tolist() == w.tolist()’:

               >>> import array
               >>> a = array.array('I', [1, 2, 3, 4, 5])
               >>> b = array.array('d', [1.0, 2.0, 3.0, 4.0, 5.0])
               >>> c = array.array('b', [5, 3, 1])
               >>> x = memoryview(a)
               >>> y = memoryview(b)
               >>> x == a == y == b
               True
               >>> x.tolist() == a.tolist() == y.tolist() == b.tolist()
               True
               >>> z = y[::-2]
               >>> z == c
               True
               >>> z.tolist() == c.tolist()
               True

          Se qualquer string de formatação não for suportada pelo módulo
          *note struct: d5, então os objetos irão sempre comparar como
          diferentes (mesmo se as strings de formatação e o conteúdo do
          buffer são idênticos):

               >>> from ctypes import BigEndianStructure, c_long
               >>> class BEPoint(BigEndianStructure):
               ...     _fields_ = [("x", c_long), ("y", c_long)]
               ...
               >>> point = BEPoint(100, 200)
               >>> a = memoryview(point)
               >>> b = memoryview(point)
               >>> a == point
               False
               >>> a == b
               False

          Perceba que, assim como com números de ponto flutuante, ‘v is
          w’ 'não' implica em ‘v == w’ para objetos memoryview.

          Alterado na versão 3.3: Versões anteriores comparavam a
          memória bruta desconsiderando o formato do item e estrutura
          lógica do array.

      -- Método: tobytes (order='C')

          Retorna os dados no buffer como um bytestring.  Isso é
          equivalente a chamar o construtor de *note bytes: 1c2. na
          memoryview.

               >>> m = memoryview(b"abc")
               >>> m.tobytes()
               b'abc'
               >>> bytes(m)
               b'abc'

          Para arrays não contíguos, o resultado é igual a representação
          de lista achatada com todos os elementos convertidos para
          bytes.  *note tobytes(): 23b6. suporta todos os formatos de
          strings, incluindo aqueles que não estão na sintaxe do módulo
          *note struct: d5.

          Adicionado na versão 3.8: 'order' pode ser {‘C’, ‘F’, ‘A’}.
          Quando 'order' é ‘C’ ou ‘F’, os dados do array original são
          convertidos para a ordem de C our Fortran.  Para views
          contígua, ‘A’ retorna uma cópia exata da memória física.  Em
          particular, ordem de Fortran em memória é preservada.  Para
          views não contígua, os dados são convertidos primeiro para C.
          'order=None' é o mesmo que 'order=’C’'.

      -- Método: hex (*, bytes_per_sep=1)

      -- Método: hex (sep, bytes_per_sep=1)

          Retorna um objeto string contendo dois dígitos hexadecimais
          para cada byte no buffer.

               >>> m = memoryview(b"abc")
               >>> m.hex()
               '616263'

          Adicionado na versão 3.5.

          Alterado na versão 3.8: Similar a *note bytes.hex(): d8d,
          *note memoryview.hex(): d8f. agora suporta os parâmetros
          opcionais 'sep' e 'bytes_per_sep' para inserir separadores
          entre bytes na saída hexadecimal.

      -- Método: tolist ()

          Retorna os dados no buffer como uma lista de elementos.

               >>> memoryview(b'abc').tolist()
               [97, 98, 99]
               >>> import array
               >>> a = array.array('d', [1.1, 2.2, 3.3])
               >>> m = memoryview(a)
               >>> m.tolist()
               [1.1, 2.2, 3.3]

          Alterado na versão 3.3: *note tolist(): 23b2. agora suporta
          todos os formatos nativos de caracteres únicos na sintaxe do
          módulo *note struct: d5, assim como representações
          multi-dimensionais.

      -- Método: toreadonly ()

          Retorna uma versão somente leitura do objeto memoryview.  O
          objeto memoryview original não é alterado.

               >>> m = memoryview(bytearray(b'abc'))
               >>> mm = m.toreadonly()
               >>> mm.tolist()
               [97, 98, 99]
               >>> mm[0] = 42
               Traceback (most recent call last):
                 File "<stdin>", line 1, in <module>
               TypeError: cannot modify read-only memory
               >>> m[0] = 43
               >>> mm.tolist()
               [43, 98, 99]

          Adicionado na versão 3.8.

      -- Método: release ()

          Libera o buffer subjacente exposto pelo objeto memoryview.
          Muitos objetos aceitam ações especiais quando a view é mantida
          com eles (por exemplo, um *note bytearray: 2ea. iria
          temporariamente proibir o redimensionamento); portanto, chamar
          release() é útil para remover essas restrições (e liberar
          quaisquer recursos pendurados) o mais breve possível.

          Depois que este método foi chamado, qualquer operação
          posterior na visão levanta um *note ValueError: 202. (exceto
          *note release(): 11fe, o qual pode ser chamado múltiplas
          vezes):

               >>> m = memoryview(b'abc')
               >>> m.release()
               >>> m[0]
               Traceback (most recent call last):
                 File "<stdin>", line 1, in <module>
               ValueError: operation forbidden on released memoryview object

          O protocolo de gerenciamento de contexto pode ser usado para
          efeitos similares, usando a instrução ‘with’:

               >>> with memoryview(b'abc') as m:
               ...     m[0]
               ...
               97
               >>> m[0]
               Traceback (most recent call last):
                 File "<stdin>", line 1, in <module>
               ValueError: operation forbidden on released memoryview object

          Adicionado na versão 3.2.

      -- Método: cast (format, /)

      -- Método: cast (format, shape, /)

          Converte uma memoryview para um novo formato ou forma.
          'shape' por padrão é ‘[byte_length//new_itemsize]’, o que
          significa que a visão resultante será unidimensional.  O valor
          de retorno é uma nova memoryview, mas o buffer por si mesmo
          não é copiado.  Conversões suportadas são 1D -> C-*note
          contíguo: 23b9. r C-contíguo -> 1D.

          O formato de destino é restrito a um elemento em formato
          nativo na sintaxe *note struct: d5.  Um dos formatos deve ser
          um formato de byte (‘B’, ‘b’ ou ‘c’).  O comprimento de bytes
          do resultado deve ser o mesmo que o comprimento original.
          Observe que todos os comprimentos de bytes podem depender do
          sistema operacional.

          Converte de 1D/long para 1D/unsigned bytes:

               >>> import array
               >>> a = array.array('l', [1,2,3])
               >>> x = memoryview(a)
               >>> x.format
               'l'
               >>> x.itemsize
               8
               >>> len(x)
               3
               >>> x.nbytes
               24
               >>> y = x.cast('B')
               >>> y.format
               'B'
               >>> y.itemsize
               1
               >>> len(y)
               24
               >>> y.nbytes
               24

          Converte de 1D/unsigned bytes para 1D/char:

               >>> b = bytearray(b'zyz')
               >>> x = memoryview(b)
               >>> x[0] = b'a'
               Traceback (most recent call last):
                 ...
               TypeError: memoryview: invalid type for format 'B'
               >>> y = x.cast('c')
               >>> y[0] = b'a'
               >>> b
               bytearray(b'ayz')

          Converte de 1D/bytes para 3D/ints para 1D/signed char:

               >>> import struct
               >>> buf = struct.pack("i"*12, *list(range(12)))
               >>> x = memoryview(buf)
               >>> y = x.cast('i', shape=[2,2,3])
               >>> y.tolist()
               [[[0, 1, 2], [3, 4, 5]], [[6, 7, 8], [9, 10, 11]]]
               >>> y.format
               'i'
               >>> y.itemsize
               4
               >>> len(y)
               2
               >>> y.nbytes
               48
               >>> z = y.cast('b')
               >>> z.format
               'b'
               >>> z.itemsize
               1
               >>> len(z)
               48
               >>> z.nbytes
               48

          Converte 1D/unsigned long para 2D/unsigned long:

               >>> buf = struct.pack("L"*6, *list(range(6)))
               >>> x = memoryview(buf)
               >>> y = x.cast('L', shape=[2,3])
               >>> len(y)
               2
               >>> y.nbytes
               48
               >>> y.tolist()
               [[0, 1, 2], [3, 4, 5]]

          Adicionado na versão 3.3.

          Alterado na versão 3.5: O formato fonte não é mais restrito ao
          converter para uma visão de byte.

     Existem também diversos atributos somente leitura disponíveis:

      -- Atributo: obj

          O objeto subjacente da memoryview:

               >>> b  = bytearray(b'xyz')
               >>> m = memoryview(b)
               >>> m.obj is b
               True

          Adicionado na versão 3.3.

      -- Atributo: nbytes

          ‘nbytes == product(shape) * itemsize == len(m.tobytes())’.
          Este é a quantidade de espaço em bytes que o array deve usar
          em uma representação contígua.  Ela não é necessariamente
          igual a ‘len(m)’:

               >>> import array
               >>> a = array.array('i', [1,2,3,4,5])
               >>> m = memoryview(a)
               >>> len(m)
               5
               >>> m.nbytes
               20
               >>> y = m[::2]
               >>> len(y)
               3
               >>> y.nbytes
               12
               >>> len(y.tobytes())
               12

          Arrays Multi-dimensional:

               >>> import struct
               >>> buf = struct.pack("d"*12, *[1.5*x for x in range(12)])
               >>> x = memoryview(buf)
               >>> y = x.cast('d', shape=[3,4])
               >>> y.tolist()
               [[0.0, 1.5, 3.0, 4.5], [6.0, 7.5, 9.0, 10.5], [12.0, 13.5, 15.0, 16.5]]
               >>> len(y)
               3
               >>> y.nbytes
               96

          Adicionado na versão 3.3.

      -- Atributo: readonly

          Um bool que indica se a memória é somente leitura.

      -- Atributo: format

          Uma string contendo o formato (no estilo do módulo *note
          struct: d5.) para cada elemento na visão.  Uma memoryview pode
          ser criada a partir de exportadores com strings de formato
          arbitrário, mas alguns métodos (ex: *note tolist(): 23b2.) são
          restritos a formatos de elementos nativos.

          Alterado na versão 3.3: formato ‘'B'’ agora é tratado de
          acordo com a sintaxe do módulo struct.  Isso significa que
          ‘memoryview(b'abc')[0] == b'abc'[0] == 97’.

      -- Atributo: itemsize

          O tamanho em Bytes de cada elemento do memoryview:

               >>> import array, struct
               >>> m = memoryview(array.array('H', [32000, 32001, 32002]))
               >>> m.itemsize
               2
               >>> m[0]
               32000
               >>> struct.calcsize('H') == m.itemsize
               True

      -- Atributo: ndim

          Um número inteiro que indica quantas dimensões de uma matriz
          multidimensional a memória representa.

      -- Atributo: shape

          Uma tupla de inteiros de comprimento *note ndim: 23bd. dando a
          forma da memória como uma matriz N-dimensional.

          Alterado na versão 3.3: Uma tupla vazia ao invés de ‘None’
          quando ndim = 0.

      -- Atributo: strides

          Uma tupla de inteiros de comprimento de *note ndim: 23bd.
          dando o tamanho em bytes para acessar cada elemento de cada
          dimensão da matriz.

          Alterado na versão 3.3: Uma tupla vazia ao invés de ‘None’
          quando ndim = 0.

      -- Atributo: suboffsets

          Usado internamente para estilos de Arrays PIL. O valor é
          apenas informativo.

      -- Atributo: c_contiguous

          Um bool que indica se a memória é *note contígua: 23b9. C.

          Adicionado na versão 3.3.

      -- Atributo: f_contiguous

          Um bool que indica se a memória é *note contígua: 23b9.
          Fortran.

          Adicionado na versão 3.3.

      -- Atributo: contiguous

          Um bool que indica se a memória é *note contígua: 23b9.

          Adicionado na versão 3.3.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3118/


File: python.info,  Node: Tipo conjuntos — set frozenset,  Next: Tipo mapeamento — dict,  Prev: Tipos de sequência binária — bytes bytearray memoryview,  Up: Tipos embutidos

5.4.10 Tipo conjuntos — ‘set’, ‘frozenset’
------------------------------------------

Um objeto 'conjunto' é uma coleção não ordenada de objetos *note
hasheáveis: 610. distintos.  Usos comuns incluem testes de associação,
remover duplicatas de uma sequência e computar operações matemáticas
tais como interseção, união, diferença e diferença simétrica.  (Para
outros tipos de contêineres veja as classes embutidas *note dict: 256,
*note list: 611. e *note tuple: 370, e o módulo *note collections: 1d.)

Assim como outras coleções, conjuntos suportam ‘x in set’, ‘len(set)’ e
‘for x in set’.  Sendo uma coleção não ordenada, conjuntos não armazenam
posição de elementos ou ordem de inserção.  Portanto, conjuntos não
suportam indexação, fatiamento ou outros comportamentos de sequências ou
similares.

Existem atualmente dois tipos de conjuntos embutidos, *note set: 5d9. e
*note frozenset: 5da.  O tipo *note set: 5d9. é mutável – o conteúdo
pode ser alterado usando métodos como *note add(): 2083. e *note
remove(): 23c5.  Como ele é mutável, ele não tem valor hash e não pode
ser usado como chave de dicionário ou um elemento de um outro conjunto.
O tipo *note frozenset: 5da. é imutável e *note hasheável: 610. – seu
conteúdo não pode ser alterado depois de ter sido criado; ele pode então
ser usado como chave de dicionário ou como um elemento de outro
conjunto.

Conjuntos não vazios (que não sejam frozensets) podem ser criados
posicionando uma lista de elementos separados por vírgula dentro de
chaves, por exemplo: ‘{'jack', 'sjoerd'}’, além do construtor *note set:
5d9.

Os construtores de ambas as classes funcionam da mesma forma:

 -- Classe: set (iterable=(), /)
 -- Classe: frozenset (iterable=(), /)

     Retorna um novo objeto set ou frozenset, cujos elementos são
     obtidos a partir de um 'iterable'.  Os elementos de um conjunto
     devem ser *note hasheáveis: 610.  Para representar conjuntos de
     sets, os sets internos devem ser objetos *note frozenset: 5da.  Se
     'iterable' não for especificado, um novo conjunto vazio é
     retornado.

Conjuntos podem ser criados de várias formas:

   * Usar uma lista de elementos separados por vírgulas entre chaves:
     ‘{'jack', 'sjoerd'}’

   * Usar uma compreensão de conjunto: ‘{c for c in 'abracadabra' if c
     not in 'abc'}’

   * Usar o construtor da classe: ‘set()’, ‘set('foobar')’, ‘set(['a',
     'b', 'foo'])’

Instâncias de *note set: 5d9. e *note frozenset: 5da. fornecem as
seguintes operações:

 -- Describe: len(s)

     Retorna o número de elementos no set 's' (cardinalidade de 's').

 -- Describe: x in s

     Testa se 'x' pertence a 's'.

 -- Describe: x not in s

     Testa se 'x' não pertence a 's'.

 -- Método: frozenset.isdisjoint (other, /)
 -- Método: set.isdisjoint (other, /)

     Retorna ‘True’ se o conjunto não tem elementos em comum com
     'other'.  Conjuntos são disjuntos se e somente se a sua interseção
     é o conjunto vazio.

 -- Método: frozenset.issubset (other, /)
 -- Método: set.issubset (other, /)

 -- Describe: set <= other

     Testa se cada elemento do conjunto está contido em 'other'.

 -- Describe: set < other

     Testa se o conjunto é um subconjunto próprio de 'other', isto é,
     ‘set <= other and set != other’.

 -- Método: frozenset.issuperset (other, /)
 -- Método: set.issuperset (other, /)

 -- Describe: set >= other

     Testa se cada elemento em 'other' está contido no conjunto.

 -- Describe: set > other

     Testa se o conjunto é um superconjunto próprio de 'other', isto é,
     ‘set >= other and set != other’.

 -- Método: frozenset.union (*others)
 -- Método: set.union (*others)

 -- Describe: set | other | ...

     Retorna um novo conjunto com elementos do conjunto e de todos os
     outros.

 -- Método: frozenset.intersection (*others)
 -- Método: set.intersection (*others)

 -- Describe: set & other & ...

     Retorna um novo conjunto com elementos comuns do conjunto e de
     todos os outros.

 -- Método: frozenset.difference (*others)
 -- Método: set.difference (*others)

 -- Describe: set - other - ...

     Retorna um novo conjunto com elementos no conjunto que não estão
     nos outros.

 -- Método: frozenset.symmetric_difference (other, /)
 -- Método: set.symmetric_difference (other, /)

 -- Describe: set ^ other

     Retorna um novo conjunto com elementos estejam ou no conjunto ou em
     'other', mas não em ambos.

 -- Método: frozenset.copy ()
 -- Método: set.copy ()

     Retorna uma cópia rasa do conjunto.

Observe que, as versões não-operador dos métodos *note union(): 14cb,
*note intersection(): 14cc, *note difference(): 23cc, *note
symmetric_difference(): 23ce, *note issubset(): 23c8. e *note
issuperset(): 23ca. irão aceitar qualquer iterável como um argumento.
Em contraste, suas contrapartes baseadas em operadores exigem que seus
argumentos sejam conjuntos.  Isso impede construções suscetíveis a erros
como ‘set('abc') & 'cbs'’ e favorece a forma mais legível
‘set('abc').intersection('cbs')’.

Tanto *note set: 5d9. quanto *note frozenset: 5da. aceitam comparações
entre conjuntos.  Dois conjuntos são iguais se e somente se cada
elemento de um está contido no outro (cada um é um subconjunto do
outro).  Um conjunto é menor que outro se, e somente se, o primeiro
conjunto é um subconjunto adequado do segundo (é um subconjunto, mas não
é igual).  Um conjunto é maior que outro conjunto se, e somente se, o
primeiro conjunto é um superconjunto próprio do segundo conjunto (é um
superconjunto, mas não é igual).

Instâncias de *note set: 5d9. são comparadas a instâncias de *note
frozenset: 5da. baseados nos seus membros.  Por exemplo, ‘set('abc') ==
frozenset('abc')’ retorna ‘True’ e assim como ‘set('abc') in
set([frozenset('abc')])’.

O subconjunto e comparações de igualdade não generalizam para a função
de ordenamento total.  Por exemplo, quaisquer dois conjuntos deslocados
não vazios, não são iguais e não são subconjuntos um do outro, então
'todos' os seguintes retornam ‘False’: ‘a<b’, ‘a==b’ ou ‘a>b’.

Como conjuntos apenas definem ordenamento parcial (subconjunto de
relacionamentos), a saída do método *note list.sort(): be8. é indefinida
para listas e conjuntos.

Elementos de conjuntos, assim como chaves de dicionário, devem ser *note
hasheáveis: 610.

Operações binárias que misturam instâncias de *note set: 5d9. com *note
frozenset: 5da. retornam o tipo do primeiro operando.  Por exemplo:
‘frozenset('ab') | set('bc')’ retorna uma instância de *note frozenset:
5da.

A seguinte tabela lista operações disponíveis para *note set: 5d9. que
não se aplicam para instâncias imutáveis de *note frozenset: 5da.:

 -- Método: set.update (*others)

 -- Describe: set |= other | ...

     Atualiza o conjunto, adicionando elementos dos outros.

 -- Método: set.intersection_update (*others)

 -- Describe: set &= other & ...

     Atualiza o conjunto, mantendo somente elementos encontrados nele e
     em outros.

 -- Método: set.difference_update (*others)

 -- Describe: set -= other | ...

     Atualiza o conjunto, removendo elementos encontrados em outros.

 -- Método: set.symmetric_difference_update (other, /)

 -- Describe: set ^= other

     Atualiza o conjunto, mantendo somente elementos encontrados em
     qualquer conjunto, mas não em ambos.

 -- Método: set.add (elem, /)

     Adiciona o elemento 'elem' ao conjunto.

 -- Método: set.remove (elem, /)

     Remove o elemento 'elem' do conjunto.  Levanta *note KeyError: 344.
     se 'elem' não estiver contido no conjunto.

 -- Método: set.discard (elem, /)

     Remove o elemento 'elem' do conjunto se ele estiver presente.

 -- Método: set.pop ()

     Remove e retorna um elemento arbitrário do conjunto.  Levanta *note
     KeyError: 344. se o conjunto estiver vazio.

 -- Método: set.clear ()

     Remove todos os elementos do conjunto.

Perceba, as versões sem operador dos métodos *note update(): 23d2, *note
intersection_update(): 14cd, *note difference_update(): 23d3. e *note
symmetric_difference_update(): 14ce. irão aceitar qualquer iterável como
um argumento.

Perceba, o argumento 'elem' para os métodos *note __contains__(): 1400,
*note remove(): 23c5. e *note discard(): 23d4. pode ser um conjunto.
Para suportar pesquisas por um frozenset equivalente, um frozenset
temporário é criado a partir de 'elem'.


File: python.info,  Node: Tipo mapeamento — dict,  Next: Tipos de Gerenciador de Contexto,  Prev: Tipo conjuntos — set frozenset,  Up: Tipos embutidos

5.4.11 Tipo mapeamento — ‘dict’
-------------------------------

Um objeto *note mapeamento: 11fb. mapeia valores *note hasheáveis: 610.
para objetos arbitrários.  Mapeamentos são objetos mutáveis.  Existe no
momento apenas um tipo de mapeamento padrão, o 'dicionário'.  (Para
outros contêineres, veja as classes embutidas *note list: 611, *note
set: 5d9. e *note tuple: 370, e o módulo *note collections: 1d.)

As chaves de um dicionário são 'quase' valores arbitrários.  Valores que
não são *note hasheáveis: 610, ou seja, valores contendo listas,
dicionários ou outros tipos mutáveis (que são comparados por valor e não
por identidade de objeto) não podem ser usados como chaves.  Valores que
comparam iguais (como ‘1’, ‘1.0’ e ‘True’) podem ser usados
alternadamente para indexar a mesma entrada do dicionário.

 -- Classe: dict (**kwargs)

 -- Classe: dict (mapping, /, **kwargs)

 -- Classe: dict (iterable, /, **kwargs)

     Retorna um novo dicionário inicializado a partir de um argumento
     posicional opcional, e um conjunto de argumentos nomeados
     possivelmente vazio.

     Os dicionários podem ser criados de várias formas:

        * Usar uma lista de pares ‘key: value’ separados por vírgula com
          chaves: ‘{'jack': 4098, 'sjoerd': 4127}’ ou ‘{4098: 'jack',
          4127: 'sjoerd'}’

        * Usar uma compreensão de dicionário: ‘{}’, ‘{x: x ** 2 for x in
          range(10)}’

        * Usar o construtor de tipo: ‘dict()’, ‘dict([('foo', 100),
          ('bar', 200)])’, ‘dict(foo=100, bar=200)’

     Se nenhum argumento posicional é fornecido, um dicionário vazio é
     criado.  Se um argumento posicional é fornecido e ele define um
     método ‘keys()’, um dicionário é criado chamando *note
     __getitem__(): 283. no argumento com cada chave retornada pelo
     método.  Caso contrário, o argumento posicional deve ser um objeto
     *note iterável: 1268.  Cada item no iterável deve ser por si mesmo
     um iterável com exatamente dois elementos.  O primeiro elemento de
     cada item torna-se a chave no novo dicionário, e o segundo
     elemento, o valor correspondente.  Se a chave ocorrer mais do que
     uma vez, o último valor para aquela chave torna-se o valor
     correspondente no novo dicionário.

     Se argumentos nomeados são fornecidos, os argumentos nomeados e
     seus valores são adicionados ao dicionário criado a partir do
     argumento posicional.  Se uma chave sendo adicionada já está
     presente, o valor do argumento nomeado substitui o valor do
     argumento posicional.

     Dicionários são iguais se e somente se eles os mesmos pares ‘(key,
     value)’ (independente de ordem).  Comparações de ordem (‘<’, ‘<=’,
     ‘>=’, ‘>’) levantam *note TypeError: 2c3.  Para ilustrar a criação
     e igualdade de dicionários, os exemplos a seguir retornam um
     dicionário igual a ‘{"one": 1, "two": 2, "three": 3}’:

          >>> a = dict(one=1, two=2, three=3)
          >>> b = {'one': 1, 'two': 2, 'three': 3}
          >>> c = dict(zip(['one', 'two', 'three'], [1, 2, 3]))
          >>> d = dict([('two', 2), ('one', 1), ('three', 3)])
          >>> e = dict({'three': 3, 'one': 1, 'two': 2})
          >>> f = dict({'one': 1, 'three': 3}, two=2)
          >>> a == b == c == d == e == f
          True

     Fornecer argumentos nomeados conforme no primeiro exemplo somente
     funciona para chaves que são identificadores válidos no Python.
     Caso contrário, quaisquer chaves válidas podem ser usadas.

     Dicionários preservam a ordem de inserção.  Perceba que atualizar a
     chave não afeta a ordem.  Chaves adicionadas após a deleção são
     inseridas no final.

          >>> d = {"um": 1, "dois": 2, "três": 3, "quatro": 4}
          >>> d
          {'um': 1, 'dois': 2, 'três': 3, 'quatro': 4}
          >>> list(d)
          ['um', 'dois', 'três', 'quatro']
          >>> list(d.values())
          [1, 2, 3, 4]
          >>> d["um"] = 42
          >>> d
          {'um': 42, 'dois': 2, 'três': 3, 'quatro': 4}
          >>> del d["dois"]
          >>> d["dois"] = None
          >>> d
          {'um': 42, 'três': 3, 'quatro': 4, 'dois': None}

     Alterado na versão 3.7: Ordem do dicionário é garantida conforme a
     ordem de inserção.  Este comportamento era um detalhe de
     implementação do CPython a partir da versão 3.6.

     Estas são as operações que dicionários aceitam (e, portanto, tipos
     de mapeamento personalizados devem aceitar também):

      -- Describe: list(d)

          Retorna uma lista de todas as chaves usadas no dicionário 'd'.

      -- Describe: len(d)

          Retorna o número de itens no dicionário 'd'.

      -- Describe: d[key]

          Retorna o item de 'd' com a chave 'key'.  Levanta um *note
          KeyError: 344. se 'key' não estiver no mapeamento.

          Se uma subclasse de um dict define um método *note
          __missing__(): 11fd. e 'key' não estiver presente, a operação
          ‘d[key]’ chama aquele método com a chave 'key' como argumento.
          A operação ‘d[key]’ então retorna ou levanta o que é retornado
          ou levantado pela chamada de ‘__missing__(key)’.  Nenhuma
          operação ou métodos invocam *note __missing__(): 11fd.  Se
          *note __missing__(): 11fd. não for definido, então *note
          KeyError: 344. é levantada.  *note __missing__(): 11fd. deve
          ser um método; ele não pode ser uma variável de instância:

               >>> class Counter(dict):
               ...     def __missing__(self, key):
               ...         return 0
               ...
               >>> c = Counter()
               >>> c['red']
               0
               >>> c['red'] += 1
               >>> c['red']
               1

          O exemplo acima mostra parte da implementação de *note
          collections.Counter: 10d0.  Um método ‘__missing__()’
          diferente é usado para *note collections.defaultdict: 11fc.

      -- Describe: d[key] = value

          Define ‘d[key]’ para 'value'.

      -- Describe: del d[key]

          Remove ‘d[key]’ do 'd'.  Levanta uma exceção *note KeyError:
          344. se 'key' não estiver no mapeamento.

      -- Describe: key in d

          Retorna ‘True’ se 'd' tiver uma chave 'key', caso contrário
          ‘False’.

      -- Describe: key not in d

          Equivalente a ‘not key in d’.

      -- Describe: iter(d)

          Retorna um iterador para as chaves do dicionário.  Isso é um
          atalho para ‘iter(d.keys())’.

      -- Método: clear ()

          Remove todos os itens do dicionário.

      -- Método: copy ()

          Retorna uma cópia superficial do dicionário.

      -- Método: classmethod fromkeys (iterable, value=None, /)

          Cria um novo dicionário com chaves provenientes de 'iterable'
          e valores definidos como 'value'.

          *note fromkeys(): 1637. é um método de classe que retorna um
          novo dicionário.  'value' tem como valor padrão ‘None’.  Todos
          os valores referem-se a apenas uma única instância, então
          geralmente não faz sentido que 'value' seja um objeto mutável
          tal como uma lista vazia.  Para obter valores distintos, use
          uma *note compreensão de dicionário: da7. ao invés.

      -- Método: get (key, default=None, /)

          Retorna o valor para 'key' se 'key' está no dicionário, caso
          contrário 'default'.  Se 'default' não é fornecido, será usado
          o valor padrão ‘None’, de tal forma que este método nunca
          levanta um *note KeyError: 344.

      -- Método: items ()

          Retorna uma nova visão dos itens do dicionário (pares de
          ‘(key, value)’).  Veja a *note documentação de objetos de
          visão de dicionário: 23d8.

      -- Método: keys ()

          Retorna uma nova visão das chaves do dicionário.  Veja a *note
          documentação de objetos de visão de dicionário: 23d8.

      -- Método: pop (key, /)

      -- Método: pop (key, default, /)

          Se 'key' está no dicionário, remove a mesma e retorna o seu
          valor, caso contrário retorna 'default'.  Se 'default' não foi
          fornecido e 'key' não está no dicionário, um *note KeyError:
          344. é levantado.

      -- Método: popitem ()

          Remove e retorna um par ‘(key, value)’ do dicionário.  Pares
          são retornados como uma pilha, ou seja em ordem LIFO (last-in,
          first-out).

          *note popitem(): 156f. é útil para destrutivamente iterar
          sobre um dicionário, algo comumente usado em algoritmos de
          conjunto.  Se o dicionário estiver vazio, chamar *note
          popitem(): 156f. levanta um *note KeyError: 344.

          Alterado na versão 3.7: Ordem LIFO agora é garantida.  Em
          versões anteriores, *note popitem(): 156f. iria retornar um
          par chave/valor arbitrário.

      -- Describe: reversed(d)

          Retorna um iterador revertido sobre as chaves do dicionário.
          Isso é um atalho para ‘reversed(d.keys())’.

          Adicionado na versão 3.8.

      -- Método: setdefault (key, default=None, /)

          Se 'key' está no dicionário, retorna o seu valor.  Se não,
          insere 'key' com o valor 'default' e retorna 'default'.
          'default' por padrão usa o valor ‘None’.

      -- Método: update (**kwargs)

      -- Método: update (mapping, /, **kwargs)

      -- Método: update (iterable, /, **kwargs)

          Atualiza o dicionário com os pares chave/valor de 'mapping' ou
          'iterable' e 'kwargs', sobrescrevendo chaves existentes.
          Retorna ‘None’.

          *note update(): 14ad. aceita ou outro objeto com um método
          ‘keys()’ (em cada caso *note __getitem__(): 283. é chamado com
          cada chave retornada pelo método) ou um iterável de pares de
          chave/valor (como tuplas ou outros iteráveis de comprimento
          dois).  Se argumentos nomeados são especificados, o dicionário
          é então atualizado com esses pares de chave/valor:
          ‘d.update(red=1, blue=2)’.

      -- Método: values ()

          Retorna uma nova visão dos valores do dicionário.  Veja a
          *note documentação de objetos de visão de dicionário: 23d8.

          Uma comparação de igualdade entre uma visão de ‘dict.values()’
          e outra, sempre irá retornar ‘False’.  Isso também se aplica
          ao comparar ‘dict.values()’ entre si:

               >>> d = {'a': 1}
               >>> d.values() == d.values()
               False

      -- Describe: d | other

          Cria um novo dicionário com as chaves e os valores mesclados
          de 'd' e 'other', que devem ser dicionários.  Os valores de
          'other' têm prioridade quando 'd' e 'other' compartilham
          chaves.

          Adicionado na versão 3.9.

      -- Describe: d |= other

          Atualiza o dicionário 'd' com chaves e valores de 'other', que
          podem ser a *note mapeamento: 11fb. ou um *note iterável:
          1268. dos pares chave/valor.  Os valores de 'other' têm
          prioridade quando 'd' e 'other' compartilham chaves.

          Adicionado na versão 3.9.

     Dicionários e visões de dicionários são reversíveis.

          >>> d = {"um": 1, "dois": 2, "três": 3, "quatro": 4}
          >>> d
          {'um': 1, 'dois': 2, 'três': 3, 'quatro': 4}
          >>> list(reversed(d))
          ['quatro', 'três', 'dois', 'um']
          >>> list(reversed(d.values()))
          [4, 3, 2, 1]
          >>> list(reversed(d.items()))
          [('quatro', 4), ('três', 3), ('dois', 2), ('um', 1)]

     Alterado na versão 3.8: Dicionários agora são reversíveis.

Ver também
..........

*note types.MappingProxyType: 46d. podem ser usados para criar uma visão
somente leitura de um *note dict: 256.

* Menu:

* Objetos de visão de dicionário::


File: python.info,  Node: Objetos de visão de dicionário,  Up: Tipo mapeamento — dict

5.4.11.1 Objetos de visão de dicionário
.......................................

Os objetos retornados por *note dict.keys(): 7ce, *note dict.values():
7cf. e *note dict.items(): 7d0. são 'objetos de visão'.  Eles fornecem
uma visão dinâmica das entradas do dicionário, o que significa que
quando o dicionário muda, a visão reflete essas mudanças.

Visões de dicionários podem ser iteradas para apresentar seus
respectivos dados, e suportar testes de existência:

 -- Describe: len(dictview)

     Retorna o número de entradas no dicionário.

 -- Describe: iter(dictview)

     Retorna um iterador sobre as chaves, valores ou itens
     (representados como tuplas de ‘(key, value)’) no dicionário.

     Chaves e valores são iterados em ordem de inserção.  Isso permite a
     criação de pares ‘(value, key)’ usando *note zip(): 7d1.: ‘pairs =
     zip(d.values(), d.keys())’.  Outra maneira de criar a mesma lista é
     ‘pairs = [(v, k) for (k, v) in d.items()]’.

     Iterar sobre visões enquanto adiciona ou deleta entradas no
     dicionário pode levantar um *note RuntimeError: 195. ou falhar a
     iteração sobre todas as entradas.

     Alterado na versão 3.7: Ordem do dicionário é garantida como a
     ordem de inserção.

 -- Describe: x in dictview

     Retorna ‘True’ se 'x' está nas chaves, valores ou itens do
     dicionário subjacente (no último caso, 'x' deve ser uma tupla de
     ‘(key, value)’).

 -- Describe: reversed(dictview)

     Retorna um iterador reverso sobre as chaves, valores ou itens do
     dicionário.  A visão será iterada na ordem reversa de inserção.

     Alterado na versão 3.8: Visões de dicionário agora são reversíveis.

 -- Describe: dictview.mapping

     Retorna um *note types.MappingProxyType: 46d. que envolve o
     dicionário original ao qual a visão se refere.

     Adicionado na versão 3.10.

Visões chave são similar a conjunto, como suas entradas são únicas e
*note hasheáveis: 610.  As visões de itens também têm operações
semelhantes a conjuntos, uma vez que os pares (chave, valor) são únicos
e as chaves são hasheáveis.  Se todos os valores em uma visão de itens
também forem hasheáveis, a visão de itens poderá interoperar com outros
conjuntos.  (Visões de valores não são tratadas de como similar a
conjunto, pois as entradas geralmente não são únicas.)  Para visões
similares a conjunto, todas as operações definidas para a classe base
abstrata *note collections.abc.Set: 23da. estão disponíveis (por
exemplo, ‘==’, ‘<’ ou ‘^’).  Ao usar operadores de conjunto, visões de
conjunto ou similares aceitam qualquer iterável como outro operando, ao
contrário de conjuntos que aceitam apenas conjuntos como entrada.

Um exemplo da utilização da visualização de dicionário:

     >>> dishes = {'eggs': 2, 'sausage': 1, 'bacon': 1, 'spam': 500}
     >>> keys = dishes.keys()
     >>> values = dishes.values()

     >>> # iteration
     >>> n = 0
     >>> for val in values:
     ...     n += val
     ...
     >>> print(n)
     504

     >>> # a iteração sobre chaves e valores é feita na mesma ordem (ordem de inserção)
     >>> list(keys)
     ['eggs', 'sausage', 'bacon', 'spam']
     >>> list(values)
     [2, 1, 1, 500]

     >>> # objetos de visualização são dinâmicos e refletem mudanças no dicionário
     >>> del dishes['eggs']
     >>> del dishes['sausage']
     >>> list(keys)
     ['bacon', 'spam']

     >>> # operações de conjunto
     >>> keys & {'eggs', 'bacon', 'salad'}
     {'bacon'}
     >>> keys ^ {'sausage', 'juice'} == {'juice', 'sausage', 'bacon', 'spam'}
     True
     >>> keys | ['juice', 'juice', 'juice'] == {'bacon', 'spam', 'juice'}
     True

     >>> # recupera um proxy somente de leitura para o dicionário original
     >>> values.mapping
     mappingproxy({'bacon': 1, 'spam': 500})
     >>> values.mapping['spam']
     500


File: python.info,  Node: Tipos de Gerenciador de Contexto,  Next: Tipos de anotação de tipo — Apelido genérico União,  Prev: Tipo mapeamento — dict,  Up: Tipos embutidos

5.4.12 Tipos de Gerenciador de Contexto
---------------------------------------

A instrução *note with: 5d2. do Python suporta o conceito de um contexto
em tempo de execução definido por um gerenciador de contexto.  Isto é
implementado usando um par de métodos, que permitem que classes
definidas pelo usuário especifiquem um contexto em tempo de execução, o
qual é inicializado antes da execução das instruções, e encerrado quando
as instruções terminam:

 -- Método: contextmanager.__enter__ ()

     Entra no contexto em tempo de execução e retorna este objeto ou
     outro objeto relacionado ao contexto em tempo de execução.  O valor
     retornado por este método é ligado ao identificador na cláusula
     ‘as’ das instruções *note with: 5d2. usando este gerenciador de
     contexto.

     Um exemplo de gerenciador de contexto que retorna a si mesmo é um
     *note objeto arquivo: 1203.  Objeto arquivos retornam a si mesmos
     do método __enter__() para permitir que *note open(): 51c. seja
     usado como a expressão de contexto em uma instrução *note with:
     5d2.

     Um exemplo de gerenciador de contexto que retorna um objeto
     relacionado é aquele retornado por *note decimal.localcontext():
     13cd.  Esses gerenciadores definem o contexto decimal ativo para
     uma cópia do contexto decimal original, e então retornam a cópia.
     Isso permite que mudanças sejam feitas no contexto decimal atual,
     no corpo contido na instrução *note with: 5d2, sem afetar o código
     fora da instrução ‘with’.

 -- Método: contextmanager.__exit__ (exc_type, exc_val, exc_tb)

     Sai do contexto em tempo de execução e retorna um sinalizador
     booleano indicando se qualquer exceção que ocorreu deve ser
     suprimida.  Se uma exceção ocorreu enquanto era executado o corpo
     da instrução *note with: 5d2, os argumentos contêm o tipo da
     exceção, valor e informação da traceback (situação da pilha de
     execução).  Caso contrário, os três argumentos são ‘None’.

     Returning a true value from this method will cause the *note with:
     5d2. statement to suppress the exception and continue execution
     with the statement immediately following the ‘with’ statement.
     Otherwise the exception continues propagating after this method has
     finished executing.

     If this method raises an exception while handling an earlier
     exception from the *note with: 5d2. block, the new exception is
     raised, and the original exception is stored in its *note
     __context__: 130a. attribute.

     A exceção passada nunca deve ser re-levantada explicitamente - ao
     invés disso, este método deve retornar um valor falso para indicar
     que o método completou sua execução com sucesso, e não quer
     suprimir a exceção levantada.  Isso permite ao código do
     gerenciador de contexto facilmente detectar se um método *note
     __exit__(): 1344. realmente falhou ou não.

Python define diversos gerenciadores de contexto para suportar
facilmente sincronização de threads, solicita o fechamento de arquivos
ou outros objetos, e manipula de forma simples o contexto ativo de
aritmética decimal.  Os tipos especificados não são tratados de forma
especial além da sua implementação e do protocolo do gerenciador de
contexto.  Veja o módulo *note contextlib: 23. para alguns exemplos.

Os *note gerador: 109a.es do Python e o decorador *note
contextlib.contextmanager: 1242. fornecem uma maneira conveniente de
implementar esses protocolos.  Se uma função geradora for decorada com o
decorador *note contextlib.contextmanager: 1242, ela retornará um
gerenciador de contexto implementando os métodos necessários *note
__enter__(): 23dc. e *note __exit__(): 23dd, em vez de o iterador
produzido por uma função geradora não decorada.

Observe que não existe nenhum slot específico para qualquer um desses
métodos na estrutura de tipos para objetos Python na API Python/C. Tipos
de extensão que desejam definir estes métodos devem fornecê-los como um
método acessível normal do Python.  Comparado com a sobrecarga de
configurar o contexto em tempo de execução, a sobrecarga na pesquisa de
dicionário em uma única classe é negligenciável.


File: python.info,  Node: Tipos de anotação de tipo — Apelido genérico União,  Next: Outros tipos embutidos,  Prev: Tipos de Gerenciador de Contexto,  Up: Tipos embutidos

5.4.13 Tipos de anotação de tipo — Apelido genérico, União
----------------------------------------------------------

Os principais tipos embutidos para *note anotações de tipo: 458. são
*note Apelido genérico: 6b2. e *note União: 7c3.

* Menu:

* Tipo Generic Alias::
* Tipo União::


File: python.info,  Node: Tipo Generic Alias,  Next: Tipo União,  Up: Tipos de anotação de tipo — Apelido genérico União

5.4.13.1 Tipo Generic Alias
...........................

Objetos ‘GenericAlias’ são geralmente criados *note subscrevendo: 2110.
uma classe.  Eles são mais usados com *note classes contêineres: 2116,
como *note list: 611. ou *note dict: 256.  Por exemplo, ‘list[int]’ é um
objeto ‘GenericAlias’ criado pela subscrição da classe ‘list’ com o
argumento *note int: 257.  Objetos ‘GenericAlias’ são destinados
principalmente para uso com *note anotações de tipo: 458.

     Nota: Geralmente só é possível subscrever uma classe se a classe
     implementar o método especial *note __class_getitem__(): 73b.

Um objeto ‘GenericAlias’ atua como um proxy para um *note tipo genérico:
439, implementando 'genéricos parametrizados'.

Para uma classe contêiner, o(s) argumento(s) fornecido(s) para uma *note
subscrição: 2110. da classe pode indicar o(s) tipo(s) dos elementos que
um objeto contém.  Por exemplo, ‘set[bytes]’ pode ser usado em anotações
de tipo para significar um *note set: 5d9. em que todos os elementos são
do tipo *note bytes: 1c2.

Para uma classe que define *note __class_getitem__(): 73b, mas não é um
contêiner, o(s) argumento(s) fornecido(s) para uma subscrição da classe
geralmente indicará o(s) tipo(s) de retorno de um ou mais métodos
definidos em um objeto.  Por exemplo, *note expressões regulares: b9.
podem ser usadas tanto no tipo de dados *note str: 44c. quanto no tipo
de dados *note bytes: 1c2.:

   * Se ‘x = re.search('foo', 'foo')’, ‘x’ será um objeto *note
     re.Match: fbc. onde os valores de retorno de ‘x.group(0)’ e ‘x[0]’
     serão ambos do tipo *note str: 44c.  Podemos representar este tipo
     de objeto em anotações de tipo com o ‘GenericAlias’
     ‘re.Match[str]’.

   * Se ‘y = re.search(b'bar', b'bar')’ (observe o ‘b’ para *note bytes:
     1c2.), ‘y’ também será uma instância de ‘re.Match’, mas os valores
     de retorno de ‘y.group(0)’ e ‘y[0]’ serão ambos do tipo *note
     bytes: 1c2.  Em anotações de tipo, representaríamos esta variedade
     de objetos *note re.Match: fbc. com ‘re.Match[bytes]’.

Objetos ‘GenericAlias’ são instâncias da classe *note
types.GenericAlias: 7ed, que também podem ser usadas para criar objetos
‘GenericAlias’ diretamente.

 -- Describe: T[X, Y, ...]

     Cria um ‘GenericAlias’ representando um tipo ‘T’ parametrizado por
     tipos 'X', 'Y' e mais, dependendo do ‘T’ usados.  Por exemplo, uma
     função esperando uma *note list: 611. contendo elementos *note
     float: 2f7.:

          def average(values: list[float]) -> float:
              return sum(values) / len(values)

     Outro exemplo para *note mapeamento: 11fb. de objetos, usando um
     *note dict: 256, o qual é um tipo genérico esperando 2 tipos de
     parâmetros representando o tipo da chave e o tipo do valor.  Neste
     exemplo, a função espera um ‘dict’ com chaves do tipo *note str:
     44c. e valores do tipo *note int: 257.:

          def send_post_request(url: str, body: dict[str, int]) -> None:
              ...

As funções embutidas *note isinstance(): 442. e *note issubclass(): 7c2.
não aceitam tipos ‘GenericAlias’ para o seu segundo argumento:

     >>> isinstance([1, 2], list[str])
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: isinstance() argument 2 cannot be a parameterized generic

O runtime Python não obriga *note anotações de tipo: 458.  Isso se
aplica a tipos genéricos e seus parâmetros tipados.  Ao criar um objeto
contêiner a partir de um ‘GenericAlias’, os elementos no contêiner não
são verificados pelo seu tipo.  Por exemplo, o seguinte código é
desencorajado, mas irá executar sem erros:

     >>> t = list[str]
     >>> t([1, 2, 3])
     [1, 2, 3]

Além disso, genéricos parametrizados removem parâmetros tipados durante
a criação do objeto:

     >>> t = list[str]
     >>> type(t)
     <class 'types.GenericAlias'>

     >>> l = t()
     >>> type(l)
     <class 'list'>

Chamar *note repr(): 800. ou *note str(): 44c. sobre um genérico mostra
o tipo parametrizado:

     >>> repr(list[int])
     'list[int]'

     >>> str(list[int])
     'list[int]'

O método *note __getitem__(): 283. de contêineres genéricos irá levantar
uma exceção para não permitir erros como ‘dict[str][str]’:

     >>> dict[str][str]
     Traceback (most recent call last):
       ...
     TypeError: dict[str] is not a generic class

Entretanto, tais expressões são válidas quando *note type variáveis:
210b. são usadas.  O índice deve ter tantos elementos quantos forem os
itens de variável de tipo no objeto ‘GenericAlias’ *note __args__: 23e0.

     >>> from typing import TypeVar
     >>> Y = TypeVar('Y')
     >>> dict[str, Y][int]
     dict[str, int]

* Menu:

* Classes genéricas padrão::
* Atributos especiais de objetos GenericAlias::


File: python.info,  Node: Classes genéricas padrão,  Next: Atributos especiais de objetos GenericAlias,  Up: Tipo Generic Alias

5.4.13.2 Classes genéricas padrão
.................................

As seguintes classes de biblioteca padrão oferecem suporte a genéricos
parametrizados.  Esta lista não é exaustiva.

   * *note tuple: 370.

   * *note list: 611.

   * *note dict: 256.

   * *note set: 5d9.

   * *note frozenset: 5da.

   * *note type: d6b.

   * *note asyncio.Future: be6.

   * *note asyncio.Task: 1be.

   * *note collections.deque: 5dc.

   * *note collections.defaultdict: 11fc.

   * *note collections.OrderedDict: 5db.

   * *note collections.Counter: 10d0.

   * *note collections.ChainMap: c36.

   * *note collections.abc.Awaitable: e06.

   * *note collections.abc.Coroutine: e07.

   * *note collections.abc.AsyncIterable: e09.

   * *note collections.abc.AsyncIterator: e08.

   * *note collections.abc.AsyncGenerator: ca8.

   * *note collections.abc.Iterable: 23e2.

   * *note collections.abc.Iterator: 23e3.

   * *note collections.abc.Generator: e05.

   * *note collections.abc.Reversible: ca6.

   * *note collections.abc.Container: 23e4.

   * *note collections.abc.Collection: ca5.

   * *note collections.abc.Callable: 7ec.

   * *note collections.abc.Set: 23da.

   * *note collections.abc.MutableSet: 23e5.

   * *note collections.abc.Mapping: 8d0.

   * *note collections.abc.MutableMapping: 10eb.

   * *note collections.abc.Sequence: 1204.

   * *note collections.abc.MutableSequence: 1a1.

   * *note collections.abc.ByteString: 2e7.

   * *note collections.abc.MappingView: 23e6.

   * *note collections.abc.KeysView: 23e7.

   * *note collections.abc.ItemsView: 23e8.

   * *note collections.abc.ValuesView: 23e9.

   * *note contextlib.AbstractContextManager: cab.

   * *note contextlib.AbstractAsyncContextManager: b3d.

   * *note dataclasses.Field: 23ea.

   * *note functools.cached_property: 541.

   * *note functools.partialmethod: a85.

   * *note os.PathLike: c6c.

   * *note queue.LifoQueue: 23eb.

   * *note queue.Queue: 13db.

   * *note queue.PriorityQueue: 23ec.

   * *note queue.SimpleQueue: b80.

   * *note re.Pattern: fbb.

   * *note re.Match: fbc.

   * *note shelve.BsdDbShelf: 23ed.

   * *note shelve.DbfilenameShelf: 23ee.

   * *note shelve.Shelf: fcf.

   * *note types.MappingProxyType: 46d.

   * *note weakref.WeakKeyDictionary: 1ae6.

   * *note weakref.WeakMethod: 1025.

   * *note weakref.WeakSet: 5dd.

   * *note weakref.WeakValueDictionary: 1ae5.


File: python.info,  Node: Atributos especiais de objetos GenericAlias,  Prev: Classes genéricas padrão,  Up: Tipo Generic Alias

5.4.13.3 Atributos especiais de objetos ‘GenericAlias’
......................................................

Todos os genéricos parametrizados implementam atributos especiais
somente leitura.

 -- Atributo: genericalias.__origin__

     Este atributo aponta para a classe genérica não parametrizada:

          >>> list[int].__origin__
          <class 'list'>

 -- Atributo: genericalias.__args__

     Este atributo é uma *note tuple: 370. (possivelmente de comprimento
     1) de tipos genéricos passado para o método *note
     __class_getitem__(): 73b. original da classe genérica:

          >>> dict[str, list[int]].__args__
          (<class 'str'>, list[int])

 -- Atributo: genericalias.__parameters__

     O atributo é uma tupla computada preguiçosamente (possivelmente
     vazia) de variáveis de tipo único encontradas em ‘__args__’:

          >>> from typing import TypeVar

          >>> T = TypeVar('T')
          >>> list[T].__parameters__
          (~T,)

          Nota: Um objeto ‘GenericAlias’ com os parâmetros *note
          typing.ParamSpec: 15e. pode não ter ‘__parameters__’ correto
          após a substituição porque *note typing.ParamSpec: 15e. se
          destina principalmente à verificação de tipo estático.

 -- Atributo: genericalias.__unpacked__

     Um booleano que é true se o apelido foi desempacotado usando o
     operador ‘*’ (consulte *note TypeVarTuple: 15f.).

     Adicionado na versão 3.11.

Ver também
..........

PEP 484(1) - Dicas de tipo

     Apresentando a estrutura do Python para anotações de tipo.

PEP 585(2) - Sugestão de tipo para Genéricos em coleções padrão

     Apresentando a capacidade de parametrizar nativamente as classes da
     biblioteca padrão, desde que implementem o método de classe
     especial *note __class_getitem__(): 73b.

*note Genéricos: 210b, *note genéricos definidos pelo usuário: 4cf. e *note typing.Generic: 15d7.

     Documentação sobre como implementar classes genéricas que podem ser
     parametrizadas em tempo de execução e compreendidas por
     verificadores de tipo estático.

Adicionado na versão 3.9.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/

   (2) https://peps.python.org/pep-0585/


File: python.info,  Node: Tipo União,  Prev: Tipo Generic Alias,  Up: Tipos de anotação de tipo — Apelido genérico União

5.4.13.4 Tipo União
...................

Um objeto união contém o valor da operação ‘|’ (bit a bit ou) em vários
*note objetos tipo: 2317.  Esses tipos são destinados principalmente
para *note anotações de tipo: 458.  A expressão de tipo de união
habilita a sintaxe de sugestão de tipo mais limpo em comparação com
*note typing.Union: 63b.

 -- Describe: X | Y | ...

     Define um objeto união que contém os tipos 'X', 'Y' e assim por
     diante.  ‘X | Y’ significa X ou Y. É equivalente a ‘typing.Union[X,
     Y]’.  Por exemplo, a seguinte função espera um argumento do tipo
     *note int: 257. ou *note float: 2f7.:

          def square(number: int | float) -> int | float:
              return number ** 2

          Nota: O operando ‘|’ não pode ser usado em tempo de execução
          para definir uniões onde um ou mais membros são uma referência
          direta.  Por exemplo, ‘int | "Foo"’, onde ‘"Foo"’ é uma
          referência a uma classe ainda não definida, falhará em tempo
          de execução.  Para uniões que incluem referências futuras,
          apresente a expressão inteira como uma string, por exemplo.
          ‘"int | Foo"’.

 -- Describe: union_object == other

     Os objetos união podem ser testados quanto à igualdade com outros
     objetos união.  Detalhes:

        * Uniões de uniões são achatadas:

               (int | str) | float == int | str | float

        * Tipos redundantes são removidos:

               int | str | int == int | str

        * Ao comparar uniões, a ordem é ignorada:

               int | str == str | int

        * É compatível com *note typing.Union: 63b.:

               int | str == typing.Union[int, str]

        * Tipos opcionais podem ser escritos como uma união com ‘None’:

               str | None == typing.Optional[str]

 -- Describe: isinstance(obj, union_object)

 -- Describe: issubclass(obj, union_object)

     Chamadas para *note isinstance(): 442. e *note issubclass(): 7c2.
     também são suportados com um objeto união:

          >>> isinstance("", int | str)
          True

     No entanto, *note genéricos parametrizados: 6b2. em objetos de
     união não podem ser verificados:

          >>> isinstance(1, int | list[int])  # cálculo em curto-circuito
          True
          >>> isinstance([1], int | list[int])
          Traceback (most recent call last):
            ...
          TypeError: isinstance() argument 2 cannot be a parameterized generic

O tipo exposto ao usuário para o objeto união pode ser acessado a partir
de *note types.UnionType: 63a. e usado por verificações de *note
isinstance(): 442.  Um objeto não pode ser instanciado a partir do tipo:

     >>> import types
     >>> isinstance(int | str, types.UnionType)
     True
     >>> types.UnionType()
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: cannot create 'types.UnionType' instances

     Nota: O método ‘__or__()’ para objetos de tipo foi adicionado para
     suportar a sintaxe ‘X | Y’.  Se uma metaclasse implementa
     ‘__or__()’, a União pode substituí-la:

          >>> class M(type):
          ...     def __or__(self, other):
          ...         return "Hello"
          ...
          >>> class C(metaclass=M):
          ...     pass
          ...
          >>> C | int
          'Hello'
          >>> int | C
          int | C

Ver também
..........

PEP 604(1) – PEP propondo a sintaxe ‘X | Y’ e o tipo União.

Adicionado na versão 3.10.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0604/


File: python.info,  Node: Outros tipos embutidos,  Next: Atributos Especiais,  Prev: Tipos de anotação de tipo — Apelido genérico União,  Up: Tipos embutidos

5.4.14 Outros tipos embutidos
-----------------------------

O interpretador suporta diversos outros tipos de objetos.  Maior parte
desses, suporta apenas uma ou duas operações.

* Menu:

* Módulos: Módulos<4>.
* Classes e Instâncias de Classes::
* Funções::
* Métodos::
* Objetos código: Objetos código<2>.
* Objetos tipo::
* O objeto nulo::
* O Objeto Ellipsis::
* O Objeto NotImplemented::
* Objetos Internos::


File: python.info,  Node: Módulos<4>,  Next: Classes e Instâncias de Classes,  Up: Outros tipos embutidos

5.4.14.1 Módulos
................

A única operação especial em um módulo é o acesso a um atributo:
‘m.name’, onde 'm' é um módulo e 'name' acessa o nome defino na tabela
de símbolos de 'm'.  Atributos de módulo podem receber atribuição.
(Perceba que a instrução *note import: 5e2. não é, estritamente falando,
uma operação em um objeto do módulo; ‘import foo’ não requer que um
objeto do módulo chamado 'foo' exista, ao invés disso requer uma
'definição' (externa) de um módulo chamado 'foo' em algum lugar.)

Um atributo especial de cada módulo é *note __dict__: 55b.  Este é o
dicionário contendo a tabela de símbolos do modulo.  Modificar este
dicionário vai na verdade modificar a tabela de símbolos do módulo, mas
atribuição direta para o atributo *note __dict__: 55b. não é possível
(você pode escrever ‘m.__dict__['a'] = 1’, o qual define ‘m.a’ para ser
‘1’, mas você não consegue escrever ‘m.__dict__ = {}’).  Modificar *note
__dict__: 55b. diretamente não é recomendado.

Módulos embutidos no interpretador são escritos desta forma: ‘<module
'sys' (built-in)>’.  Se carregados a partir de um arquivo, eles são
escritos como ‘<module 'os' from '/usr/local/lib/pythonX.Y/os.pyc'>’.


File: python.info,  Node: Classes e Instâncias de Classes,  Next: Funções,  Prev: Módulos<4>,  Up: Outros tipos embutidos

5.4.14.2 Classes e Instâncias de Classes
........................................

Veja *note Objetos, valores e tipos: 2072. e *note Definições de classe:
131a. para estes.


File: python.info,  Node: Funções,  Next: Métodos,  Prev: Classes e Instâncias de Classes,  Up: Outros tipos embutidos

5.4.14.3 Funções
................

Objetos função são criados através da definição de funções.  A única
operação que pode ser feita em um objeto função é chamá-la:
‘func(lista-de-argumentos)’.

Existem na verdade duas possibilidades de objetos função: funções
embutidas e funções definidas pelo usuário.  Ambas suportam a mesma
operação (chamar a função), mas a implementação é diferente, portanto os
diferentes tipos de objetos.

Veja a função *note Definições de função: 1db6. para mais informações.


File: python.info,  Node: Métodos,  Next: Objetos código<2>,  Prev: Funções,  Up: Outros tipos embutidos

5.4.14.4 Métodos
................

Métodos são funções que são chamadas usando a notação de atributo.
Existem duas opções: *note métodos embutidos: 209d. (tal como *note
append(): 6cd. em listas) e *note métodos de instância de classe: 1e47.
Métodos embutidos são descritos com os tipos que os implementam.

Se você acessar um método (uma função definida em um espaço de nomes de
uma classe) através de uma instância, você obtém um objeto especial: um
objeto com 'método vinculado' (também chamado de *note método de
instância: 1e47.).  Quando chamado, ele irá adicionar o argumento ‘self’
para a lista de argumentos.  Métodos vinculados tem dois atributos
somente leitura especiais: *note m.__self__: 140f. é o objeto no qual o
método opera, e *note m.__func__: 1340. é a função que implementa o
método.  Chamar ‘m(arg-1, arg-2, ..., arg-n)’ é completamente
equivalente a chamar ‘m.__func__(m.__self__, arg-1, arg-2, ..., arg-n)’.

Assim como *note objetos função: 299, objetos de métodos vinculados tem
suporte para receber atributos arbitrários.  Entretanto, como atributos
de método na verdade são armazenados no objeto função subjacente (*note
method.__func__: 1340.), definir atributos de método em métodos
vinculados não é permitido.  Tentar definir um atributo em um método
resulta em um *note AttributeError: 34b. sendo levantado.  A fim de
definir um atributo de método, você precisa definir explicitamente ele
no objeto função subjacente:

     >>> class C:
     ...     def method(self):
     ...         pass
     ...
     >>> c = C()
     >>> c.method.whoami = 'my name is method'  # proibido atribuir diretamente no método
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     AttributeError: 'method' object has no attribute 'whoami'
     >>> c.method.__func__.whoami = 'my name is method'
     >>> c.method.whoami
     'my name is method'

Veja *note Métodos de instância: 1e47. para mais informações.


File: python.info,  Node: Objetos código<2>,  Next: Objetos tipo,  Prev: Métodos,  Up: Outros tipos embutidos

5.4.14.5 Objetos código
.......................

Objetos código são usados pela implementação para representar código
Python executável “pseudo-compilado”, tal como corpo de uma função.
Eles são diferentes de objetos função porque eles não contém uma
referência para os seus ambientes de execução global.  Objetos código
são retornados pela função embutida *note compile(): 192. e podem ser
extraídos de objetos função através do seu atributo *note __code__: 29a.
Veja também o módulo *note code: 1a.

Acessar *note __code__: 29a. levanta um *note evento de auditoria: 19fa.
‘object.__getattr__’ com os argumentos ‘obj’ e ‘"__code__"’.

Um objeto de código pode ser executado ou avaliado passando-o (ao invés
da string fonte) para as funções embutidas *note exec(): 17f. ou *note
eval(): 180.

Veja o tipo *note A hierarquia de tipos padrão: 2075. para maiores
informações.


File: python.info,  Node: Objetos tipo,  Next: O objeto nulo,  Prev: Objetos código<2>,  Up: Outros tipos embutidos

5.4.14.6 Objetos tipo
.....................

Objetos de tipos representam os vários tipos de objetos.  Um tipo de um
objeto é acessado pela função embutida *note type(): d6b.  Não existem
operações especiais sobre tipos.  O módulo padrão *note types: 103.
define nomes para todos os tipos padrão embutidos.

Tipos são escritos como isto: ‘<class 'int'>’.


File: python.info,  Node: O objeto nulo,  Next: O Objeto Ellipsis,  Prev: Objetos tipo,  Up: Outros tipos embutidos

5.4.14.7 O objeto nulo
......................

Este objeto é retornado por funções que não retornam um valor
explicitamente.  Ele não suporta operações especiais.  Existe exatamente
um objeto nulo, chamado de ‘None’ (um nome embutido).  ‘type(None)()’
produz o mesmo singleton.

Ele é escrito como ‘None’.


File: python.info,  Node: O Objeto Ellipsis,  Next: O Objeto NotImplemented,  Prev: O objeto nulo,  Up: Outros tipos embutidos

5.4.14.8 O Objeto Ellipsis
..........................

Este objeto é comumente usado para indicar que algo foi omitido.  Ela
não suporta operações especiais.  Existe exatamente um objeto ellipsis,
nomeado *note Ellipsis: 231c. (um nome embutido).  ‘type(Ellipsis)()’
produz o singleton *note Ellipsis: 231c.

Está escrito com ‘Ellipsis’ ou ‘...’.

No uso típico, ‘...’ como o objeto ‘Ellipsis’ aparece em alguns lugares
diferentes, por exemplo:

   - Em anotações de tipo, como *note argumentos chamáveis: 2404. ou
     *note elementos de tupla: 2405.

   - Como o corpo de uma função em vez de uma *note instrução pass:
     1d98.

   - Em bibliotecas de terceiros, como slicing e striding do Numpy(1).

Python também usa três pontos de maneiras que não são objetos
‘Ellipsis’, por exemplo:

   - *note ELLIPSIS: 14b6. do doctest, como um padrão para conteúdo
     ausente.

   - O prompt Python padrão do console *note interativo: 169. quando a
     entrada parcial está incompleta.

Por fim, a documentação do Python geralmente usa três pontos no uso
convencional do inglês para indicar conteúdo omitido, mesmo em exemplos
de código que também os usam como ‘Ellipsis’.

   ---------- Footnotes ----------

   (1) 
https://numpy.org/doc/stable/user/basics.indexing.html#slicing-and-striding


File: python.info,  Node: O Objeto NotImplemented,  Next: Objetos Internos,  Prev: O Objeto Ellipsis,  Up: Outros tipos embutidos

5.4.14.9 O Objeto NotImplemented
................................

Este objeto é retornado a partir de comparações e operações binárias
quando elas são solicitadas para operar em tipos nos quais eles não
suportam.  Veja *note Comparações: 2205. para mais informações.  Existe
exatamente um objeto *note NotImplemented: 7d3.
‘type(NotImplemented)()’ produz o mesmo valor.

Está escrito como ‘NotImplemented’.


File: python.info,  Node: Objetos Internos,  Prev: O Objeto NotImplemented,  Up: Outros tipos embutidos

5.4.14.10 Objetos Internos
..........................

Veja *note A hierarquia de tipos padrão: 2075. para esta informação.
Descreve *note objetos de quadro de pilha: 6e0, *note objetos traceback
(situação da pilha de execução): b07, e objetos fatia.


File: python.info,  Node: Atributos Especiais,  Next: Limitação de comprimento de string na conversão para inteiro,  Prev: Outros tipos embutidos,  Up: Tipos embutidos

5.4.15 Atributos Especiais
--------------------------

A implementação adiciona alguns atributos especiais somente leitura para
diversos tipos de objetos, onde eles são relevantes.  Alguns desses não
são reportados pela função embutida *note dir(): 632.

 -- Atributo: definition.__name__

     O nome da classe, função, método, descritor, ou instância geradora.

 -- Atributo: definition.__qualname__

     O *note nome qualificado: 1ab1. da classe, função, método,
     descritor, ou instância geradora.

     Adicionado na versão 3.3.

 -- Atributo: definition.__module__

     O nome do módulo no qual uma classe ou função foi definida.

 -- Atributo: definition.__doc__

     A string de documentação de uma classe ou função, ou ‘None’ se não
     definida.

 -- Atributo: definition.__type_params__

     Os *note parâmetros de tipo: 2b3. de classes genéricas, funções e
     *note apelidos de tipo: 454.  Para classes e funções que não são
     genéricas, isso será uma tupla vazia.

     Adicionado na versão 3.12.


File: python.info,  Node: Limitação de comprimento de string na conversão para inteiro,  Prev: Atributos Especiais,  Up: Tipos embutidos

5.4.16 Limitação de comprimento de string na conversão para inteiro
-------------------------------------------------------------------

CPython tem um limite global para conversão entre *note int: 257. e
*note str: 44c. para mitigar ataques de negação de serviço.  Esse limite
'somente' se aplica a bases numéricas decimais ou outras que não sejam
potência de dois.  As conversões hexadecimais, octais e binárias são
ilimitadas.  O limite pode ser configurado.

O tipo *note int: 257. no CPython é um número de comprimento arbitrário
armazenado em formato binário (comumente conhecido como “bignum”).  Não
existe nenhum algoritmo que possa converter uma string em um inteiro
binário ou um inteiro binário em uma string em tempo linear, 'a menos
que' a base seja uma potência de 2.  Mesmo os algoritmos mais conhecidos
para a base 10 têm complexidade subquadrática.  Converter um valor
grande como ‘int('1' * 500_000)’ pode levar mais de um segundo em uma
CPU rápida.

Limitar o tamanho da conversão oferece uma maneira prática de evitar CVE
2020-10735(1).

O limite é aplicado ao número de caracteres de dígitos na string de
entrada ou saída quando um algoritmo de conversão não linear estiver
envolvido.  Sublinhados e o sinal não são contados para o limite.

Quando uma operação excede o limite, uma exceção *note ValueError: 202.
é levantada:

     >>> import sys
     >>> sys.set_int_max_str_digits(4300)  # Illustrativo, este é o padrão.
     >>> _ = int('2' * 5432)
     Traceback (most recent call last):
     ...
     ValueError: Exceeds the limit (4300 digits) for integer string conversion: value has 5432 digits; use sys.set_int_max_str_digits() to increase the limit
     >>> i = int('2' * 4300)
     >>> len(str(i))
     4300
     >>> i_squared = i*i
     >>> len(str(i_squared))
     Traceback (most recent call last):
     ...
     ValueError: Exceeds the limit (4300 digits) for integer string conversion; use sys.set_int_max_str_digits() to increase the limit
     >>> len(hex(i_squared))
     7144
     >>> assert int(hex(i_squared), base=16) == i*i  # Conversão envolvendo hexadecimais é ilimitada.

O limite padrão é de 4300 dígitos conforme fornecido em *note
sys.int_info.default_max_str_digits: 12d5.  O limite mínimo que pode ser
configurado é de 640 dígitos conforme fornecido em *note
sys.int_info.str_digits_check_threshold: 12d5.

Verificação:

     >>> import sys
     >>> assert sys.int_info.default_max_str_digits == 4300, sys.int_info
     >>> assert sys.int_info.str_digits_check_threshold == 640, sys.int_info
     >>> msg = int('578966293710682886880994035146873798396722250538762761564'
     ...           '9252925514383915483333812743580549779436104706260696366600'
     ...           '571186405732').to_bytes(53, 'big')
     ...

Adicionado na versão 3.11.

* Menu:

* APIs afetadas::
* Configurando o limiter::
* Configuração recomendada::

   ---------- Footnotes ----------

   (1) https://www.cve.org/CVERecord?id=CVE-2020-10735


File: python.info,  Node: APIs afetadas,  Next: Configurando o limiter,  Up: Limitação de comprimento de string na conversão para inteiro

5.4.16.1 APIs afetadas
......................

A limitação só se aplica a conversões potencialmente lentas entre *note
int: 257. e *note str: 44c. ou *note bytes: 1c2.:

   * ‘int(string)’ com padrão sendo base 10.

   * ‘int(string, base)’ para todas as bases que não são uma potência de
     2.

   * ‘str(integer)’.

   * ‘repr(integer)’.

   * qualquer outra conversão de string para base 10 como, por exemplo,
     ‘f"{integer}"’, ‘"{}".format(integer)’ ou ‘b"%d" % integer’.

As limitações não se aplicam a funções com um algoritmo linear:

   * ‘int(string, base)’ com base 2, 4, 8, 16 ou 32.

   * *note int.from_bytes(): 1972. e *note int.to_bytes(): 19bd.

   * *note hex(): 1312, *note oct(): 1311, *note bin(): 12eb.

   * *note Minilinguagem de especificação de formato: 1e8. para números
     hexa, octal e binários

   * *note str: 44c. para *note float: 2f7.

   * *note str: 44c. para *note decimal.Decimal: 29d.


File: python.info,  Node: Configurando o limiter,  Next: Configuração recomendada,  Prev: APIs afetadas,  Up: Limitação de comprimento de string na conversão para inteiro

5.4.16.2 Configurando o limiter
...............................

Antes de iniciar o Python, você pode usar uma variável de ambiente ou um
sinalizador de linha de comando do interpretador para configurar o
limite:

   * *note PYTHONINTMAXSTRDIGITS: 18c2, por exemplo
     ‘PYTHONINTMAXSTRDIGITS=640 python3’ para definir o limite para 640
     ou ‘PYTHONINTMAXSTRDIGITS=0 python3’ para desabilitar a limitação.

   * *note -X int_max_str_digits: 176, por exemplo ‘python3 -X
     int_max_str_digits=640’

   * *note sys.flags.int_max_str_digits: 2410. contém o valor de *note
     PYTHONINTMAXSTRDIGITS: 18c2. ou *note -X int_max_str_digits: 176.
     Se a variável env e a opção ‘-X’ estiverem definidas, a opção ‘-X’
     terá precedência.  Um valor de '-1' indica que ambos não foram
     definidos, portanto, um valor de *note
     sys.int_info.default_max_str_digits: 2411. foi usado durante a
     inicialização.

A partir do código, você pode inspecionar o limite atual e definir um
novo usando estas APIs *note sys: d9.:

   * *note sys.get_int_max_str_digits(): 1614. e *note
     sys.set_int_max_str_digits(): 18c5. são um getter e um setter para
     o limite de todo o interpretador.  Os subinterpretadores têm seu
     próprio limite.

Informações sobre o padrão e o mínimo podem ser encontradas em *note
sys.int_info: 12d5.:

   * *note sys.int_info.default_max_str_digits: 12d5. é o limite padrão
     compilado.

   * *note sys.int_info.str_digits_check_threshold: 12d5. é o menor
     valor aceito para o limite (diferente de 0 que o desabilita).

Adicionado na versão 3.11.

     Cuidado: Definir um limite baixo 'pode' levar a problemas.  Embora
     raro, existe um código que contém constantes inteiras em decimal em
     sua origem que excedem o limite mínimo.  Uma consequência de
     definir o limite é que o código-fonte do Python contendo literais
     inteiros decimais maiores que o limite encontrará um erro durante a
     análise, geralmente no momento da inicialização ou no momento da
     importação ou até mesmo no momento da instalação – sempre que um
     ‘.pyc’ atualizado ainda não existe para o código.  Uma solução
     alternativa para source que contém tais constantes grandes é
     convertê-las para a forma hexadecimal ‘0x’, pois não há limite.

     Teste sua aplicação completamente se você usar um limite baixo.
     Certifique-se de que seus testes sejam executados com o limite
     definido anteriormente por meio do ambiente ou sinalizador para que
     ele seja aplicado durante a inicialização e até mesmo durante
     qualquer etapa de instalação que possa invocar o Python para
     pré-compilar fontes ‘.py’ para arquivos ‘.pyc’.


File: python.info,  Node: Configuração recomendada,  Prev: Configurando o limiter,  Up: Limitação de comprimento de string na conversão para inteiro

5.4.16.3 Configuração recomendada
.................................

Espera-se que o padrão *note sys.int_info.default_max_str_digits: 2411.
seja razoável para a maioria das aplicações.  Se sua aplicação exigir um
limite diferente, defina-o em seu ponto de entrada principal usando
código agnóstico de versão Python, pois essas APIs foram adicionadas em
lançamentos de patch de segurança em versões anteriores a 3.12.

Exemplo:

     >>> import sys
     >>> if hasattr(sys, "set_int_max_str_digits"):
     ...     upper_bound = 68000
     ...     lower_bound = 4004
     ...     current_limit = sys.get_int_max_str_digits()
     ...     if current_limit == 0 or current_limit > upper_bound:
     ...         sys.set_int_max_str_digits(upper_bound)
     ...     elif current_limit < lower_bound:
     ...         sys.set_int_max_str_digits(lower_bound)

Se você precisar desativá-lo totalmente, defina-o como ‘0’.


File: python.info,  Node: Exceções embutidas,  Next: Serviços de Processamento de Texto,  Prev: Tipos embutidos,  Up: A Biblioteca Padrão do Python

5.5 Exceções embutidas
======================

No Python, todas as exceções devem ser instâncias de uma classe derivada
de *note BaseException: 5bb.  Em uma instrução *note try: 6e9. com uma
cláusula *note except: 18b. que menciona uma classe específica, essa
cláusula também lida com qualquer classe de exceção derivada dessa
classe (mas não com as classes de exceção a partir das quais 'ela' é
derivada).  Duas classes de exceção que não são relacionadas por
subclasse nunca são equivalentes, mesmo que tenham o mesmo nome.

As exceções embutidas listadas neste capítulo podem ser geradas pelo
interpretador ou pelas funções embutidas.  Exceto onde mencionado, eles
têm um “valor associado” indicando a causa detalhada do erro.  Pode ser
uma string ou uma tupla de vários itens de informação (por exemplo, um
código de erro e uma string que explica o código).  O valor associado
geralmente é passado como argumentos para o construtor da classe de
exceção.

O código do usuário pode gerar exceções embutidas.  Isso pode ser usado
para testar um manipulador de exceções ou para relatar uma condição de
erro “exatamente como” a situação na qual o interpretador gera a mesma
exceção; mas lembre-se de que nada impede o código do usuário de gerar
um erro inadequado.

As classes de exceções embutidas podem ser usadas como subclasses para
definir novas exceções; Os programadores são incentivados a derivar
novas exceções da classe *note Exception: 9e2. ou de uma de suas
subclasses, e não de *note BaseException: 5bb.  Mais informações sobre a
definição de exceções estão disponíveis no Tutorial do Python em *note
Exceções definidas pelo usuário: 1e1c.

* Menu:

* Contexto da exceção::
* Herdando de exceções embutidas::
* Classes base::
* Exceções concretas::
* Avisos::
* Grupos de exceções::
* Hierarquia das exceções::


File: python.info,  Node: Contexto da exceção,  Next: Herdando de exceções embutidas,  Up: Exceções embutidas

5.5.1 Contexto da exceção
-------------------------

Três atributos em objetos exceções fornecem informações sobre o contexto
em que a exceção foi levantada.

 -- Atributo: BaseException.__context__
 -- Atributo: BaseException.__cause__
 -- Atributo: BaseException.__suppress_context__

     Ao levantar uma nova exceção enquanto outra exceção já está sendo
     tratada, o atributo ‘__context__’ da nova exceção é automaticamente
     definido para a exceção tratada.  Uma exceção pode ser tratada
     quando uma cláusula *note except: 18b. ou *note finally: 9d2, ou
     uma instrução *note with: 5d2, é usada.

     Esse contexto implícito da exceção pode ser complementado com uma
     causa explícita usando ‘from’ com *note raise: 5ed.:

          raise new_exc from original_exc

     A expressão a seguir *note from: 5ed. deve ser uma exceção ou
     ‘None’.  Ela será definida como ‘__cause__’ na exceção levantada.
     A definição de ‘__cause__’ também define implicitamente o atributo
     ‘__suppress_context__’ como ‘True’, de modo que o uso de ‘raise
     new_exc from None’ substitui efetivamente a exceção antiga pela
     nova para fins de exibição (por exemplo, convertendo *note
     KeyError: 344. para *note AttributeError: 34b.), deixando a exceção
     antiga disponível em ‘__context__’ para introspecção durante a
     depuração.

     O código de exibição padrão do traceback mostra essas exceções
     encadeadas, além do traceback da própria exceção.  Uma exceção
     explicitamente encadeada em ‘__cause__’ sempre é mostrada quando
     presente.  Uma exceção implicitamente encadeada em ‘__context__’ é
     mostrada apenas se ‘__cause__’ for *note None: 675. e
     ‘__suppress_context__’ for falso.

     Em qualquer um dos casos, a exceção em si sempre é mostrada após
     todas as exceções encadeadas, de modo que a linha final do
     traceback sempre mostre a última exceção que foi levantada.


File: python.info,  Node: Herdando de exceções embutidas,  Next: Classes base,  Prev: Contexto da exceção,  Up: Exceções embutidas

5.5.2 Herdando de exceções embutidas
------------------------------------

O código do usuário pode criar subclasses que herdam de um tipo de
exceção.  É recomendado criar subclasse de apenas um tipo de exceção por
vez para evitar possíveis conflitos entre como as bases tratam o
atributo ‘args’, bem como devido a possíveis incompatibilidades de
layout de memória.

A maioria das exceções embutidas são implementadas em C para eficiência,
veja: Objects/exceptions.c(1).  Algumas têm layouts de memória
personalizados, o que impossibilita a criação de uma subclasse que herda
de vários tipos de exceção.  O layout de memória de um tipo é um detalhe
de implementação e pode mudar entre as versões do Python, levando a
novos conflitos no futuro.  Portanto, é recomendável evitar criar
subclasses de vários tipos de exceção.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Objects/exceptions.c


File: python.info,  Node: Classes base,  Next: Exceções concretas,  Prev: Herdando de exceções embutidas,  Up: Exceções embutidas

5.5.3 Classes base
------------------

As seguintes exceções são usadas principalmente como classes base para
outras exceções.

 -- Exceção: BaseException

     A classe base para todas as exceções embutidas.  Não é para ser
     herdada diretamente por classes definidas pelo usuário (para isso,
     use *note Exception: 9e2.).  Se *note str(): 44c. for chamado em
     uma instância desta classe, a representação do(s) argumento(s) para
     a instância será retornada ou a string vazia quando não houver
     argumentos.

      -- Atributo: args

          A tupla de argumentos fornecidos ao construtor de exceções.
          Algumas exceções embutidas (como *note OSError: 417.) esperam
          um certo número de argumentos e atribuem um significado
          especial aos elementos dessa tupla, enquanto outras são
          normalmente chamadas apenas com uma única string que fornece
          uma mensagem de erro.

      -- Método: with_traceback (tb)

          Este método define 'tb' como o novo traceback (situação da
          pilha de execução) para a exceção e retorna o objeto exceção.
          Era mais comumente usado antes que os recursos de encadeamento
          de exceções de PEP 3134(1) se tornassem disponíveis.  O
          exemplo a seguir mostra como podemos converter uma instância
          de ‘SomeException’ em uma instância de ‘OtherException’
          enquanto preservamos o traceback.  Uma vez gerado, o quadro
          atual é empurrado para o traceback de ‘OtherException’, como
          teria acontecido com o traceback de ‘SomeException’ original
          se tivéssemos permitido que ele se propagasse para o chamador.

               try:
                   ...
               except SomeException:
                   tb = sys.exception().__traceback__
                   raise OtherException(...).with_traceback(tb)

      -- Atributo: __traceback__

          Um campo gravável que contém o *note objeto traceback: b07.
          associado a esta exceção.  Veja também: *note A instrução
          raise: 5ed.

      -- Método: add_note (note)

          Adiciona a string ‘note’ às notas da exceção que aparecem no
          traceback padrão após a string de exceção.  Uma exceção *note
          TypeError: 2c3. é levantada se ‘note’ não for uma string.

          Adicionado na versão 3.11.

      -- Atributo: __notes__

          Uma lista das notas desta exceção, que foram adicionadas com
          *note add_note(): 5ba.  Este atributo é criado quando *note
          add_note(): 5ba. é chamado.

          Adicionado na versão 3.11.

 -- Exceção: Exception

     Todas as exceções embutidas que não saem para o sistema são
     derivadas dessa classe.  Todas as exceções definidas pelo usuário
     também devem ser derivadas dessa classe.

 -- Exceção: ArithmeticError

     A classe base para as exceções embutidas levantadas para vários
     erros aritméticos: *note OverflowError: 885, *note
     ZeroDivisionError: 94c, *note FloatingPointError: 241b.

 -- Exceção: BufferError

     Levantado quando uma operação relacionada a *note buffer: 2e8. não
     puder ser realizada.

 -- Exceção: LookupError

     A classe base para as exceções levantadas quando uma chave ou
     índice usado em um mapeamento ou sequência é inválido: *note
     IndexError: 157e, *note KeyError: 344.  Isso pode ser levantado
     diretamente por *note codecs.lookup(): 96a.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3134/


File: python.info,  Node: Exceções concretas,  Next: Avisos,  Prev: Classes base,  Up: Exceções embutidas

5.5.4 Exceções concretas
------------------------

As seguintes exceções são as que geralmente são levantados.

 -- Exceção: AssertionError

     Levantado quando uma instrução *note assert: 96f. falha.

 -- Exceção: AttributeError

     Levantado quando uma referência de atributo (consulte *note
     Referências de atributo: 21de.) ou atribuição falha.  (Quando um
     objeto não oferece suporte a referências ou atribuições de
     atributos, *note TypeError: 2c3. é levantado.)

     O argumentos somente-nomeados opcionais 'name' e o 'obj' definem o
     atributos correspondente:

      -- Atributo: name

          O nome do atributo que tentou-se fazer o acesso.

      -- Atributo: obj

          O objeto que foi acessado para o atributo nomeado.

     Alterado na versão 3.10: Adicionado os atributos *note name: 241d.
     e *note obj: 241e.

 -- Exceção: EOFError

     Levantado quando a função *note input(): 131b. atinge uma condição
     de fim de arquivo (EOF) sem ler nenhum dado.  (Note: os métodos
     ‘io.IOBase.read()’ e *note io.IOBase.readline(): 241f. retornam uma
     string vazia quando pressionam o EOF.)

 -- Exceção: FloatingPointError

     Não usado atualmente.

 -- Exceção: GeneratorExit

     Levantado quando um *note gerador: 109a. ou uma *note corrotina:
     491. está fechado(a); veja *note generator.close(): 15b9. e *note
     coroutine.close(): 215b.  Herda diretamente de *note BaseException:
     5bb. em vez de *note Exception: 9e2, já que tecnicamente não é um
     erro.

 -- Exceção: ImportError

     Levantada quando a instrução *note import: 5e2. tem problemas ao
     tentar carregar um módulo.  Também é gerado quando o “from list” em
     ‘from ... import’ tem um nome que não pode ser encontrado.

     O argumentos somente-nomeados opcionais 'name' e o 'path' definem o
     atributos correspondente:

      -- Atributo: name

          O nome do módulo que tentou-se fazer a importação.

      -- Atributo: path

          O caminho para qualquer arquivo que acionou a exceção.

     Alterado na versão 3.3: Adicionados os atributos *note name: 2420.
     e *note path: 2421.

 -- Exceção: ModuleNotFoundError

     Uma subclasse de *note ImportError: 419. que é levantada por *note
     import: 5e2. quando um módulo não pôde ser localizado.  Também é
     levantada quando ‘None’ é encontrado em *note sys.modules: 1636.

     Adicionado na versão 3.6.

 -- Exceção: IndexError

     Levantada quando um índice de alguma sequência está fora do
     intervalo.  (Índices de fatia são truncados silenciosamente para
     cair num intervalo permitido; se um índice não for um inteiro,
     *note TypeError: 2c3. é levantada.)

 -- Exceção: KeyError

     Levantada quando uma chave de mapeamento (dicionário) não é
     encontrada no conjunto de chaves existentes.

 -- Exceção: KeyboardInterrupt

     Levantada quando um usuário aperta a tecla de interrupção
     (normalmente ‘Control’-‘C’ ou ‘Delete’).  Durante a execução, uma
     checagem de interrupção é feita regularmente.  A exceção herda de
     *note BaseException: 5bb. para que não seja capturada
     acidentalmente por códigos que tratam *note Exception: 9e2. e assim
     evita que o interpretador saia.

          Nota: Capturar uma *note KeyboardInterrupt: 9d9. requer
          consideração especial.  Como pode ser levantada em pontos
          imprevisíveis, pode, em algumas circunstâncias, deixar o
          programa em execução em um estado inconsistente.  Geralmente é
          melhor permitir que *note KeyboardInterrupt: 9d9. termine o
          programa o mais rápido possível ou evitar levantá-la de todo.
          (Veja *note Nota sobre manipuladores de sinais e exceções:
          2422.)

 -- Exceção: MemoryError

     Levantada quando uma operação fica sem memória mas a situação ainda
     pode ser recuperada (excluindo alguns objetos).  O valor associado
     é uma string que indica o tipo de operação (interna) que ficou sem
     memória.  Observe que, por causa da arquitetura de gerenciamento de
     memória subjacente (função ‘malloc()’ do C), o interpretador pode
     não ser capaz de se recuperar completamente da situação; no
     entanto, levanta uma exceção para que um traceback possa ser
     impresso, no caso de um outro programa ser a causa.

 -- Exceção: NameError

     Levantada quando um nome local ou global não é encontrado.  Isso se
     aplica apenas a nomes não qualificados.  O valor associado é uma
     mensagem de erro que inclui o nome que não pode ser encontrado.

     O argumento somente-nomeado opcional 'name' define o atributo:

      -- Atributo: name

          O nome do variável que tentou-se fazer o acesso.

     Alterado na versão 3.10: Adicionado o atributo *note name: 2423.

 -- Exceção: NotImplementedError

     Essa exceção é derivada da *note RuntimeError: 195.  Em classes
     base, definidas pelo usuário, os métodos abstratos devem gerar essa
     exceção quando requerem que classes derivadas substituam o método,
     ou enquanto a classe está sendo desenvolvida, para indicar que a
     implementação real ainda precisa ser adicionada.

          Nota: Não deve ser usada para indicar que um operador ou
          método não será mais suportado – nesse caso deixe o operador /
          método indefinido ou, se é uma subclasse, defina-o como *note
          None: 675.

          Cuidado: ‘NotImplementedError’ e ‘NotImplemented’ não são
          intercambiáveis.  Esta exceção deve ser usada somente conforme
          descrito acima; veja *note NotImplemented: 7d3. para detalhes
          sobre o uso correto da constante embutida.

 -- Exceção: OSError ([arg])

 -- Exceção: OSError (errno, strerror[, filename[, winerror[,
          filename2]]])

     Esta exceção é levantada quando uma função do sistema retorna um
     erro relacionado ao sistema, incluindo falhas do tipo E/S como
     “file not found” ou “disk full” (não para tipos de argumentos não
     permitidos ou outro erro acessório).

     A segunda forma do construtor definir os atributos correspondentes,
     descritos abaixo.  Os atributos usarão o valor padrão *note None:
     675. se não forem especificados.  Por compatibilidade com versões
     anteriores, se três argumentos são passados, o atributo *note args:
     56c. contêm somente uma tupla de 2 elementos, os dois primeiros
     argumentos do construtor.

     O construtor geralmente retorna uma subclasse de *note OSError:
     417, como descrito abaixo em *note OS exceptions: 2424. .  A
     subclasse particular depende do valor final de *note errno: 15d5.
     Este comportamento ocorre apenas durante a construção direta ou por
     meio de um apelido de *note OSError: 417, e não é herdado na
     criação de subclasses.

      -- Atributo: errno

          Um código de erro numérico da variável C ‘errno’.

      -- Atributo: winerror

          No Windows, isso fornece o código de erro nativo do Windows.
          O atributo *note errno: 15d5. é então uma tradução aproximada,
          em termos POSIX, desse código de erro nativo.

          No Windows, se o argumento de construtor 'winerror' for um
          inteiro, o atributo *note errno: 15d5. é determinado a partir
          do código de erro do Windows e o argumento 'errno' é ignorado.
          Em outras plataformas, o argumento 'winerror' é ignorado e o
          atributo *note winerror: 2425. não existe.

      -- Atributo: strerror

          A mensagem de erro correspondente, conforme fornecida pelo
          sistema operacional.  É formatada pelas funções C ‘perror()’
          no POSIX e ‘FormatMessage()’ no Windows.

      -- Atributo: filename
      -- Atributo: filename2

          Para exceções que envolvem um caminho do sistema de arquivos
          (como *note open(): 51c. ou *note os.unlink(): 1134.), *note
          filename: 2427. é o nome do arquivo passado para a função.
          Para funções que envolvem dois caminhos de sistema de arquivos
          (como *note os.rename(): 1130.), *note filename2: 2428.
          corresponde ao segundo nome de arquivo passado para a função.

     Alterado na versão 3.3: *note EnvironmentError: 108c, *note
     IOError: 108b, *note WindowsError: 108d, *note socket.error: 108e,
     *note select.error: 108f. e ‘mmap.error’ foram fundidos em *note
     OSError: 417, e o construtor pode retornar uma subclasse.

     Alterado na versão 3.4: O atributo *note filename: 2427. agora é o
     nome do arquivo original passado para a função, ao invés do nome
     codificado ou decodificado da *note tratador de erros e codificação
     do sistema de arquivos: 53b.  Além disso, o argumento e o atributo
     de construtor 'filename2' foi adicionado.

 -- Exceção: OverflowError

     Levantada quando o resultado de uma operação aritmética é muito
     grande para ser representada.  Isso não pode ocorrer para inteiros
     (que prefere levantar *note MemoryError: 15c5. a desistir).  No
     entanto, por motivos históricos, OverflowError às vezes é levantada
     para inteiros que estão fora de um intervalo obrigatório.  Devido à
     falta de padronização do tratamento de exceção de ponto flutuante
     em C, a maioria das operações de ponto flutuante não são
     verificadas.

 -- Exceção: PythonFinalizationError

     Este exceção é derivada de *note RuntimeError: 195.  É levantada
     quando uma operação é bloqueada durante o encerramento do
     interpretador e também conhecido como *note finalização do Python:
     14e.

     Exemplos de operações que podem ser bloqueadas com um *note
     PythonFinalizationError: 14d. durante a finalização do Python:

        * Criação de uma nova thread no Python.

        * *note os.fork(): 197.

     Veja também a função *note sys.is_finalizing(): a99.

     Adicionado na versão 3.13: Anteriormente, uma *note RuntimeError:
     195. simples era levantada.

 -- Exceção: RecursionError

     Esta exceção é derivada de *note RuntimeError: 195.  É levantada
     quando o interpretador detecta que a profundidade máxima de
     recursão (veja *note sys.getrecursionlimit(): 4c4.) foi excedida.

     Adicionado na versão 3.5: Anteriormente, uma *note RuntimeError:
     195. simples era levantada.

 -- Exceção: ReferenceError

     Esta exceção é levantada quando um intermediário de referência
     fraca, criado pela função *note weakref.proxy(): a5b, é usado para
     acessar um atributo do referente após ter sido coletado como lixo.
     Para mais informações sobre referências fracas, veja o módulo *note
     weakref: 114.

 -- Exceção: RuntimeError

     Levantada quando um erro é detectado e não se encaixa em nenhuma
     das outras categorias.  O valor associado é uma string indicando o
     que precisamente deu errado.

 -- Exceção: StopIteration

     Levantada pela função embutida *note next(): 7d9. e o método *note
     __next__(): 1310. de um *note iterador: 1ac. para sinalizar que não
     há mais itens produzidos pelo iterador.

      -- Atributo: value

          O objeto exceção tem um único atributo ‘value’, que é
          fornecido como um argumento ao construir a exceção, e o padrão
          é *note None: 675.

     Quando uma função *note geradora: 109a. ou *note corrotina: 491.
     retorna, uma nova instância *note StopIteration: c15. é levantada,
     e o valor retornado pela função é usado como o parâmetro *note
     value: 2157. para o construtor da exceção.

     Se um código gerador direta ou indiretamente levantar *note
     StopIteration: c15, ele é convertido em uma *note RuntimeError:
     195. (mantendo o *note StopIteration: c15. como a nova causa da
     exceção).

     Alterado na versão 3.3: Adicionado o atributo ‘value’ e a
     capacidade das funções geradoras de usá-lo para retornar um valor.

     Alterado na versão 3.5: Introduzida a transformação RuntimeError
     via ‘from __future__ import generator_stop’, consulte PEP 479(1).

     Alterado na versão 3.7: Habilita PEP 479(2) para todo o código por
     padrão: um erro *note StopIteration: c15. levantado em um gerador é
     transformado em uma *note RuntimeError: 195.

 -- Exceção: StopAsyncIteration

     Deve ser levantada pelo método *note __anext__(): 1659. de um
     objeto *note iterador assíncrono: 1ab. para parar a iteração.

     Adicionado na versão 3.5.

 -- Exceção: SyntaxError (message, details)

     Levantada quando o analisador encontra um erro de sintaxe.  Isso
     pode ocorrer em uma instrução *note import: 5e2, em uma chamada às
     funções embutidas *note compile(): 192, *note exec(): 17f. ou *note
     eval(): 180, ou ao ler o script inicial ou entrada padrão (também
     interativamente).

     A função *note str(): 44c. da instância de exceção retorna apenas a
     mensagem de erro.  Detalhes é uma tupla cujos membros também estão
     disponíveis como atributos separados.

      -- Atributo: filename

          O nome do arquivo em que ocorreu o erro de sintaxe.

      -- Atributo: lineno

          Em qual número de linha no arquivo o erro ocorreu.  Este é
          indexado em 1: a primeira linha no arquivo tem um ‘lineno’ de
          1.

      -- Atributo: offset

          A coluna da linha em que ocorreu o erro.  Este é indexado em
          1: o primeiro caractere na linha tem um ‘offset’ de 1.

      -- Atributo: text

          O texto do código-fonte envolvido no erro.

      -- Atributo: end_lineno

          Em qual número de linha no arquivo o erro ocorrido termina.
          Este é indexado em 1: a primeira linha no arquivo tem um
          ‘lineno’ de 1.

      -- Atributo: end_offset

          A coluna da linha final em que o erro ocorreu termina.  Este é
          indexado em 1: o primeiro caractere na linha tem um ‘offset’
          de 1.

     Para erros em campos de f-string, a mensagem é prefixada por
     “f-string: “ e os “offsets” são deslocamentos em um texto
     construído a partir da expressão de substituição.  Por exemplo,
     compilar o campo f’Bad {a b}’ resulta neste atributo de argumentos:
     (‘f-string: …’, (‘’, 1, 2, ‘(a b)n’, 1, 5)).

     Alterado na versão 3.10: Adicionados os atributos *note end_lineno:
     242d. e *note end_offset: 242e.

 -- Exceção: IndentationError

     Classe base para erros de sintaxe relacionados a indentação
     incorreta.  Esta é uma subclasse de *note SyntaxError: 18d.

 -- Exceção: TabError

     Levantada quando o indentação contém um uso inconsistente de
     tabulações e espaços.  Esta é uma subclasse de *note
     IndentationError: 7a9.

 -- Exceção: SystemError

     Levantada quando o interpretador encontra um erro interno, mas a
     situação não parece tão grave para fazer com que perca todas as
     esperanças.  O valor associado é uma string que indica o que deu
     errado (em termos de baixo nível).  Em *note CPython: 6f6, isso
     pode ser causado pelo uso incorreto da API C do Python, como
     retornar um valor ‘NULL’ sem um conjunto de exceções.

     Se você tem certeza de que essa exceção não foi culpa sua ou de um
     pacote que você está usando, você deve relatar isso ao autor ou
     mantenedor do seu interpretador Python.  Certifique-se de relatar a
     versão do interpretador Python (‘sys.version’; também é impresso no
     início de uma sessão Python interativa), a mensagem de erro exata
     (o valor associado da exceção) e se possível a fonte do programa
     que acionou o erro.

 -- Exceção: SystemExit

     Esta exceção é levantada pela função *note sys.exit(): 138e.  Ele
     herda de *note BaseException: 5bb. em vez de *note Exception: 9e2.
     para que não seja acidentalmente capturado pelo código que captura
     *note Exception: 9e2.  Isso permite que a exceção se propague
     corretamente e faça com que o interpretador saia.  Quando não é
     tratado, o interpretador Python sai; nenhum traceback (situação da
     pilha de execução) é impresso.  O construtor aceita o mesmo
     argumento opcional passado para *note sys.exit(): 138e.  Se o valor
     for um inteiro, ele especifica o status de saída do sistema
     (passado para a função C ‘exit()’); se for ‘None’, o status de
     saída é zero; se tiver outro tipo (como uma string), o valor do
     objeto é exibido e o status de saída é um.

     Uma chamada para *note sys.exit(): 138e. é traduzida em uma exceção
     para que os tratadores de limpeza (cláusulas *note finally: 9d2.
     das instruções *note try: 6e9.) possam ser executados, e para que
     um depurador possa executar um script sem correr o risco de perder
     o controle.  A função *note os._exit(): 242f. pode ser usada se for
     absolutamente necessário sair imediatamente (por exemplo, no
     processo filho após uma chamada para *note os.fork(): 197.).

      -- Atributo: code

          O status de saída ou mensagem de erro transmitida ao
          construtor.  (O padrão é ‘None’.)

 -- Exceção: TypeError

     Levantada quando uma operação ou função é aplicada a um objeto de
     tipo inadequado.  O valor associado é uma string que fornece
     detalhes sobre a incompatibilidade de tipo.

     Essa exceção pode ser levantada pelo código do usuário para indicar
     que uma tentativa de operação em um objeto não é suportada e não
     deveria ser.  Se um objeto deve ter suporte a uma dada operação,
     mas ainda não forneceu uma implementação, *note
     NotImplementedError: 228. é a exceção apropriada a ser levantada.

     Passar argumentos do tipo errado (por exemplo, passar uma *note
     list: 611. quando um *note int: 257. é esperado) deve resultar em
     uma *note TypeError: 2c3, mas passar argumentos com o valor errado
     (por exemplo, um número fora dos limites esperados) deve resultar
     em uma *note ValueError: 202.

 -- Exceção: UnboundLocalError

     Levantada quando uma referência é feita a uma variável local em uma
     função ou método, mas nenhum valor foi vinculado a essa variável.
     Esta é uma subclasse de *note NameError: 43f.

 -- Exceção: UnicodeError

     Levantada quando ocorre um erro de codificação ou decodificação
     relacionado ao Unicode.  É uma subclasse de *note ValueError: 202.

     *note UnicodeError: 12e6. possui atributos que descrevem o erro de
     codificação ou decodificação.  Por exemplo,
     ‘err.object[err.start:err.end]’ fornece a entrada inválida
     específica na qual o codec falhou.

      -- Atributo: encoding

          O nome da codificação que levantou o erro.

      -- Atributo: reason

          Uma string que descreve o erro de codec específico.

      -- Atributo: object

          O objeto que o codec estava tentando codificar ou decodificar.

      -- Atributo: start

          O primeiro índice de dados inválidos em *note object: a96.

      -- Atributo: end

          O índice após os últimos dados inválidos em *note object: a96.

 -- Exceção: UnicodeEncodeError

     Levantada quando ocorre um erro relacionado ao Unicode durante a
     codificação.  É uma subclasse de *note UnicodeError: 12e6.

 -- Exceção: UnicodeDecodeError

     Levantada quando ocorre um erro relacionado ao Unicode durante a
     decodificação.  É uma subclasse de *note UnicodeError: 12e6.

 -- Exceção: UnicodeTranslateError

     Levantada quando ocorre um erro relacionado ao Unicode durante a
     tradução.  É uma subclasse de *note UnicodeError: 12e6.

 -- Exceção: ValueError

     Levantada quando uma operação ou função recebe um argumento que tem
     o tipo certo, mas um valor inadequado, e a situação não é descrita
     por uma exceção mais precisa, como *note IndexError: 157e.

 -- Exceção: ZeroDivisionError

     Levantada quando o segundo argumento de uma divisão ou operação de
     módulo é zero.  O valor associado é uma string que indica o tipo
     dos operandos e a operação.

As seguintes exceções são mantidas para compatibilidade com versões
anteriores; a partir do Python 3.3, eles são apelidos de *note OSError:
417.

 -- Exceção: EnvironmentError

 -- Exceção: IOError

 -- Exceção: WindowsError

     Disponível apenas no Windows.

* Menu:

* Exceções de sistema operacional::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0479/

   (2) https://peps.python.org/pep-0479/


File: python.info,  Node: Exceções de sistema operacional,  Up: Exceções concretas

5.5.4.1 Exceções de sistema operacional
.......................................

As seguintes exceções são subclasses de *note OSError: 417, elas são
levantadas dependendo do código de erro do sistema.

 -- Exceção: BlockingIOError

     Levantada quando uma operação bloquearia em um objeto (por exemplo,
     soquete) definido para operação sem bloqueio.  Corresponde a
     ‘errno’ *note EAGAIN: 2435, *note EALREADY: 2436, *note
     EWOULDBLOCK: 2437. e *note EINPROGRESS: 2438.

     Além daquelas de *note OSError: 417, *note BlockingIOError: 1090.
     pode ter mais um atributo:

      -- Atributo: characters_written

          An integer containing the number of 'bytes' written to the
          stream before it blocked.  This attribute is available when
          using the buffered I/O classes from the *note io: 7f. module.

 -- Exceção: ChildProcessError

     Levantada quando uma operação em um processo filho falha.
     Corresponde a ‘errno’ *note ECHILD: 243a.

 -- Exceção: ConnectionError

     Uma classe base para problemas relacionados à conexão.

     Suas subclasses são *note BrokenPipeError: 1095, *note
     ConnectionAbortedError: 1096, *note ConnectionRefusedError: 1097. e
     *note ConnectionResetError: 1098.

 -- Exceção: BrokenPipeError

     Uma subclasse de *note ConnectionError: e36, levantada ao tentar
     escrever em um encadeamento, enquanto a outra extremidade foi
     fechada, ou ao tentar escrever em um soquete que foi desligado para
     escrita.  Corresponde a ‘errno’ *note EPIPE: 243b. e *note
     ESHUTDOWN: 243c.

 -- Exceção: ConnectionAbortedError

     Uma subclasse de *note ConnectionError: e36, levantada quando uma
     tentativa de conexão é cancelada pelo par.  Corresponde a ‘errno’
     *note ECONNABORTED: 243d.

 -- Exceção: ConnectionRefusedError

     Uma subclasse de *note ConnectionError: e36, levantada quando uma
     tentativa de conexão é recusada pelo par.  Corresponde a ‘errno’
     *note ECONNREFUSED: 243e.

 -- Exceção: ConnectionResetError

     Uma subclasse de *note ConnectionError: e36, levantada quando uma
     conexão é redefinida pelo par.  Corresponde a ‘errno’ *note
     ECONNRESET: 243f.

 -- Exceção: FileExistsError

     Levantada ao tentar criar um arquivo ou diretório que já existe.
     Corresponde a ‘errno’ *note EEXIST: 2440.

 -- Exceção: FileNotFoundError

     Levantada quando um arquivo ou diretório é solicitado, mas não
     existe.  Corresponde a ‘errno’ *note ENOENT: 2441.

 -- Exceção: InterruptedError

     Levantada quando uma chamada do sistema é interrompida por um sinal
     de entrada.  Corresponde a ‘errno’ *note EINTR: daf.

     Alterado na versão 3.5: Python agora tenta novamente chamadas de
     sistema quando uma 'syscall' é interrompida por um sinal, exceto se
     o tratador de sinal levanta uma exceção (veja PEP 475(1) para a
     justificativa), em vez de levantar *note InterruptedError: db0.

 -- Exceção: IsADirectoryError

     Levantada quando uma operação de arquivo (como *note os.remove():
     112f.) é solicitada em um diretório.  Corresponde a ‘errno’ *note
     EISDIR: 2442.

 -- Exceção: NotADirectoryError

     Levantada quando uma operação de diretório (como *note
     os.listdir(): 1139.) é solicitada em algo que não é um diretório.
     Na maioria das plataformas POSIX, ela também pode ser levantada se
     uma operação tentar abrir ou percorrer um arquivo não pertencente
     ao diretório como se fosse um diretório.  Corresponde a ‘errno’
     *note ENOTDIR: 2443.

 -- Exceção: PermissionError

     Levantada ao tentar executar uma operação sem os direitos de acesso
     adequados - por exemplo, permissões do sistema de arquivos.
     Corresponde a ‘errno’ *note EACCES: 2444, *note EPERM: 18e1, e
     *note ENOTCAPABLE: 18c8.

     Alterado na versão 3.11.1: *note ENOTCAPABLE: 18c8. do WASI agora é
     mapeado para *note PermissionError: d65.

 -- Exceção: ProcessLookupError

     Levantada quando um determinado processo não existe.  Corresponde a
     ‘errno’ *note ESRCH: 2445.

 -- Exceção: TimeoutError

     Levantada quando uma função do sistema expirou no nível do sistema.
     Corresponde a ‘errno’ *note ETIMEDOUT: 2446.

Adicionado na versão 3.3: Todas as subclasses de *note OSError: 417.
acima foram adicionadas.

Ver também
..........

PEP 3151(2) - Reworking the OS and IO exception hierarchy

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0475/

   (2) https://peps.python.org/pep-3151/


File: python.info,  Node: Avisos,  Next: Grupos de exceções,  Prev: Exceções concretas,  Up: Exceções embutidas

5.5.5 Avisos
------------

As seguintes exceções são usadas como categorias de aviso; veja a
documentação de *note Categorias de avisos: 2449. para mais detalhes.

 -- Exceção: Warning

     Classe base para categorias de aviso.

 -- Exceção: UserWarning

     Classe base para avisos gerados pelo código do usuário.

 -- Exceção: DeprecationWarning

     Classe base para avisos sobre recursos descontinuados destinados a
     outros desenvolvedores Python.

     Ignorado pelos filtros de aviso padrão, exceto no módulo ‘__main__’
     ( PEP 565(1)).  Habilitar o *note Modo de Desenvolvimento do
     Python: 1f8. exibe este aviso.

     A política de descontinuação está descrita na PEP 387(2).

 -- Exceção: PendingDeprecationWarning

     Classe base para avisos sobre recursos obsoletos que devem ser
     descontinuados no futuro, mas ainda não foram.

     Esta classe raramente é usada para emitir um aviso de possível
     descontinuação futura, é incomum, e *note DeprecationWarning: 1a5.
     é preferível para descontinuações já ativas.

     Ignorado pelos filtros de aviso padrão.  Habilitar o *note Modo de
     Desenvolvimento do Python: 1f8. exibe este aviso.

     A política de descontinuação está descrita na PEP 387(3).

 -- Exceção: SyntaxWarning

     Classe base para avisos sobre sintaxe duvidosa.

     Este aviso é tipicamente emitido ao compilar código-fonte Python e,
     normalmente, não será exibido ao executar código já compilado.

 -- Exceção: RuntimeWarning

     Classe base para avisos sobre comportamento duvidoso de tempo de
     execução.

 -- Exceção: FutureWarning

     Classe base para avisos sobre recursos descontinuados destinados a
     usuários finais de aplicações escritas em Python.

 -- Exceção: ImportWarning

     Classe base para avisos sobre prováveis erros na importação de
     módulos.

     Ignorado pelos filtros de aviso padrão.  Habilitar o *note Modo de
     Desenvolvimento do Python: 1f8. exibe este aviso.

 -- Exceção: UnicodeWarning

     Classe base para avisos relacionados a Unicode.

 -- Exceção: EncodingWarning

     Classe base para avisos relacionados a codificações.

     Veja *note Ativar EncodingWarning: 1ed9. para detalhes.

     Adicionado na versão 3.10.

 -- Exceção: BytesWarning

     Classe base para avisos relacionados a *note bytes: 1c2. e *note
     bytearray: 2ea.

 -- Exceção: ResourceWarning

     Classe base para avisos relacionados ao uso de recursos.

     Ignorado pelos filtros de aviso padrão.  Habilitar o *note Modo de
     Desenvolvimento do Python: 1f8. exibe este aviso.

     Adicionado na versão 3.2.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0565/

   (2) https://peps.python.org/pep-0387/

   (3) https://peps.python.org/pep-0387/


File: python.info,  Node: Grupos de exceções,  Next: Hierarquia das exceções,  Prev: Avisos,  Up: Exceções embutidas

5.5.6 Grupos de exceções
------------------------

Os itens a seguir são usados quando é necessário levantar várias
exceções não relacionadas.  Eles fazem parte da hierarquia de exceção,
portanto, podem ser tratados com *note except: 18b. como todas as outras
exceções.  Além disso, eles são reconhecidos por *note except*: 5b8, que
corresponde a seus subgrupos com base nos tipos de exceções contidas.

 -- Exceção: ExceptionGroup (msg, excs)

 -- Exceção: BaseExceptionGroup (msg, excs)

     Ambos os tipos de exceção agrupam as exceções na sequência ‘excs’.
     O parâmetro ‘msg’ deve ser uma string.  A diferença entre as duas
     classes é que *note BaseExceptionGroup: 25f. estende *note
     BaseException: 5bb. e pode envolver qualquer exceção, enquanto
     *note ExceptionGroup: 1b6. estende *note Exception: 9e2. e só pode
     agrupar subclasses de *note Exception: 9e2.  Este design é para que
     ‘except Exception’ capture um *note ExceptionGroup: 1b6. mas não
     *note BaseExceptionGroup: 25f.

     O construtor de *note BaseExceptionGroup: 25f. retorna uma *note
     ExceptionGroup: 1b6. ao invés de uma *note BaseExceptionGroup: 25f.
     se todas as exceções contidas forem instâncias *note Exception:
     9e2, então ela pode ser usada para tornar a seleção automática.  O
     construtor de *note ExceptionGroup: 1b6, por outro lado, levanta
     *note TypeError: 2c3. se qualquer exceção contida não for uma
     subclasse de *note Exception: 9e2.

     'Detalhes da implementação do CPython:' The ‘excs’ parameter may be
     any sequence, but lists and tuples are specifically processed more
     efficiently here.  For optimal performance, pass a tuple as ‘excs’.

      -- Atributo: message

          O argumento ‘msg’ para o construtor.  Este é um atributo
          somente leitura.

      -- Atributo: exceptions

          Uma tupla de exceções na sequência ‘excs’ dada ao construtor.
          Este é um atributo somente leitura.

      -- Método: subgroup (condition)

          Retorna um grupo de exceções que contém apenas as exceções do
          grupo atual que correspondem à condição 'condition' ou ‘None’
          se o resultado estiver vazio.

          A condição pode ser um tipo exceção ou tupla de tipos de
          exceção.  Nesse caso, cada exceção é verificada quanto a um
          match usando a mesma verificação que é usada em uma cláusula
          de ‘except’.  A condição também pode ser um chamável
          (diferente de um objeto de tipo) que aceita uma exceção como
          seu único argumento e retorna verdadeiro para a exceção que
          deve estar no subgrupo.

          A estrutura de aninhamento da exceção atual é preservada no
          resultado, assim como os valores de seus campos *note message:
          244e, *note __traceback__: 1309, *note __cause__: 130b, *note
          __context__: 130a. e *note __notes__: 2419.  Grupos aninhados
          vazios são omitidos do resultado.

          A condição é verificada para todas as exceções no grupo de
          exceções aninhadas, incluindo o nível superior e quaisquer
          grupos de exceções aninhadas.  Se a condição for verdadeira
          para tal grupo de exceções, ela será incluída no resultado por
          completo.

          Adicionado na versão 3.13: ‘condition’ pode ser qualquer
          chamável que não seja um objeto de tipo.

      -- Método: split (condition)

          Como *note subgroup(): 17b4, mas retorna o par ‘(match, rest)’
          onde ‘match’ é ‘subgroup(condition)’ e ‘rest’ é a parte
          restante não correspondente.

      -- Método: derive (excs)

          Retorna um grupo de exceções com o mesmo *note message: 244e,
          mas que agrupa as exceções em ‘excs’.

          Este método é usado por *note subgroup(): 17b4. e *note
          split(): 1670, que são usados em vários contextos para dividir
          um grupo de exceções.  Uma subclasse precisa substituí-la para
          fazer com que *note subgroup(): 17b4. e *note split(): 1670.
          retorne instâncias da subclasse em vez de *note
          ExceptionGroup: 1b6.

          *note subgroup(): 17b4. e *note split(): 1670. copiam os
          campos *note __traceback__: 1309, *note __cause__: 130b, *note
          __context__: 130a. e *note __notes__: 2419. do grupo de
          exceções original para o retornado por *note derive(): 17b3,
          então esses campos não precisam ser atualizados por *note
          derive(): 17b3.

               >>> class MyGroup(ExceptionGroup):
               ...     def derive(self, excs):
               ...         return MyGroup(self.message, excs)
               ...
               >>> e = MyGroup("eg", [ValueError(1), TypeError(2)])
               >>> e.add_note("a note")
               >>> e.__context__ = Exception("context")
               >>> e.__cause__ = Exception("cause")
               >>> try:
               ...    raise e
               ... except Exception as e:
               ...    exc = e
               ...
               >>> match, rest = exc.split(ValueError)
               >>> exc, exc.__context__, exc.__cause__, exc.__notes__
               (MyGroup('eg', [ValueError(1), TypeError(2)]), Exception('context'), Exception('cause'), ['a note'])
               >>> match, match.__context__, match.__cause__, match.__notes__
               (MyGroup('eg', [ValueError(1)]), Exception('context'), Exception('cause'), ['a note'])
               >>> rest, rest.__context__, rest.__cause__, rest.__notes__
               (MyGroup('eg', [TypeError(2)]), Exception('context'), Exception('cause'), ['a note'])
               >>> exc.__traceback__ is match.__traceback__ is rest.__traceback__
               True

     Observe que *note BaseExceptionGroup: 25f. define *note __new__():
     580, então subclasses que precisam de uma assinatura de construtor
     diferente precisam substituir isso ao invés de *note __init__():
     6b0.  Por exemplo, o seguinte define uma subclasse de grupo de
     exceções que aceita um exit_code e constrói a mensagem do grupo a
     partir dele.

          class Errors(ExceptionGroup):
             def __new__(cls, errors, exit_code):
                self = super().__new__(Errors, f"exit code: {exit_code}", errors)
                self.exit_code = exit_code
                return self

             def derive(self, excs):
                return Errors(excs, self.exit_code)

     Como *note ExceptionGroup: 1b6, qualquer subclasse de *note
     BaseExceptionGroup: 25f. que também é uma subclasse de *note
     Exception: 9e2. só pode agrupar instâncias de *note Exception: 9e2.

     Adicionado na versão 3.11.


File: python.info,  Node: Hierarquia das exceções,  Prev: Grupos de exceções,  Up: Exceções embutidas

5.5.7 Hierarquia das exceções
-----------------------------

A hierarquia de classes para exceções embutidas é:

     BaseException
      ├── BaseExceptionGroup
      ├── GeneratorExit
      ├── KeyboardInterrupt
      ├── SystemExit
      └── Exception
           ├── ArithmeticError
           │    ├── FloatingPointError
           │    ├── OverflowError
           │    └── ZeroDivisionError
           ├── AssertionError
           ├── AttributeError
           ├── BufferError
           ├── EOFError
           ├── ExceptionGroup [BaseExceptionGroup]
           ├── ImportError
           │    └── ModuleNotFoundError
           ├── LookupError
           │    ├── IndexError
           │    └── KeyError
           ├── MemoryError
           ├── NameError
           │    └── UnboundLocalError
           ├── OSError
           │    ├── BlockingIOError
           │    ├── ChildProcessError
           │    ├── ConnectionError
           │    │    ├── BrokenPipeError
           │    │    ├── ConnectionAbortedError
           │    │    ├── ConnectionRefusedError
           │    │    └── ConnectionResetError
           │    ├── FileExistsError
           │    ├── FileNotFoundError
           │    ├── InterruptedError
           │    ├── IsADirectoryError
           │    ├── NotADirectoryError
           │    ├── PermissionError
           │    ├── ProcessLookupError
           │    └── TimeoutError
           ├── ReferenceError
           ├── RuntimeError
           │    ├── NotImplementedError
           │    ├── PythonFinalizationError
           │    └── RecursionError
           ├── StopAsyncIteration
           ├── StopIteration
           ├── SyntaxError
           │    └── IndentationError
           │         └── TabError
           ├── SystemError
           ├── TypeError
           ├── ValueError
           │    └── UnicodeError
           │         ├── UnicodeDecodeError
           │         ├── UnicodeEncodeError
           │         └── UnicodeTranslateError
           └── Warning
                ├── BytesWarning
                ├── DeprecationWarning
                ├── EncodingWarning
                ├── FutureWarning
                ├── ImportWarning
                ├── PendingDeprecationWarning
                ├── ResourceWarning
                ├── RuntimeWarning
                ├── SyntaxWarning
                ├── UnicodeWarning
                └── UserWarning


File: python.info,  Node: Serviços de Processamento de Texto,  Next: Serviços de Dados Binários,  Prev: Exceções embutidas,  Up: A Biblioteca Padrão do Python

5.6 Serviços de Processamento de Texto
======================================

Os módulos descritos neste capítulo fornecem uma ampla variedade de
operações de manipulação de string e outros serviços de processamento de
texto.

O módulo *note codecs: 1b. descrito em *note Serviços de Dados Binários:
2454. também é altamente relevante para o processamento de texto.  Além
disso, consulte a documentação do tipo string do Python em *note Tipo
sequência de texto — str: 1d7a.

* Menu:

* string — Operações comuns de strings::
* re — Operações com expressões regulares::
* difflib — Helpers for computing deltas::
* textwrap — Quebra automática e preenchimento de texto::
* unicodedata — Banco de dados de Unicode::
* stringprep — Preparação de string para internet::
* readline — Interface para o GNU readline::
* rlcompleter — Função de autocomplemento para GNU readline::


File: python.info,  Node: string — Operações comuns de strings,  Next: re — Operações com expressões regulares,  Up: Serviços de Processamento de Texto

5.6.1 ‘string’ — Operações comuns de strings
--------------------------------------------

'Código-fonte:' Lib/string.py(1)

__________________________________________________________________

Ver também
..........

*note Tipo sequência de texto — str: 1d7a.

*note String Methods: 1d7b.

* Menu:

* Constantes de strings::
* Formatação personalizada de strings::
* Sintaxe das strings de formato::
* Strings template::
* Funções auxiliares::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/string.py


File: python.info,  Node: Constantes de strings,  Next: Formatação personalizada de strings,  Up: string — Operações comuns de strings

5.6.1.1 Constantes de strings
.............................

As constantes definidas neste módulo são:

 -- Dado: string.ascii_letters

     A concatenação das constantes *note ascii_lowercase: 2458. e *note
     ascii_uppercase: 2459. descritas abaixo.  Este valor não depende da
     localidade.

 -- Dado: string.ascii_lowercase

     As letras minúsculas ‘'abcdefghijklmnopqrstuvwxyz'’.  Este valor
     não depende da localidade e não mudará.

 -- Dado: string.ascii_uppercase

     As letras maiúsculas ‘'ABCDEFGHIJKLMNOPQRSTUVWXYZ'’.  Este valor
     não depende da localidade e não mudará.

 -- Dado: string.digits

     A string ‘'0123456789'’.

 -- Dado: string.hexdigits

     A string ‘'0123456789abcdefABCDEF'’.

 -- Dado: string.octdigits

     A string ‘'01234567'’.

 -- Dado: string.punctuation

     String de caracteres ASCII que são considerados caracteres de
     pontuação na localidade ‘C’: ‘!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~’.

 -- Dado: string.printable

     String de caracteres ASCII que são considerados imprimíveis pelo
     Python.  Esta é uma combinação de *note digits: 245a, *note
     ascii_letters: 1306, *note punctuation: 245d. e *note whitespace:
     245e.

          Nota: Por design, *note string.printable.isprintable(): e02.
          retorna *note False: b49.  Em particular, ‘string.printable’
          não é imprimível no sentido POSIX (veja ‘LC_CTYPE(1)’).

 -- Dado: string.whitespace

     Uma string contendo todos os caracteres ASCII que são considerados
     espaços em branco.  Isso inclui espaço de caracteres, tabulação,
     avanço de linha, retorno, avanço de formulário e tabulação
     vertical.

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/locale(5)


File: python.info,  Node: Formatação personalizada de strings,  Next: Sintaxe das strings de formato,  Prev: Constantes de strings,  Up: string — Operações comuns de strings

5.6.1.2 Formatação personalizada de strings
...........................................

A classe embutida de string fornece a capacidade de fazer substituições
de variáveis complexas e formatação de valor por meio do método *note
format(): 621. descrito na PEP 3101(1).  A classe *note Formatter: eec.
no módulo *note string: d3. permite que você crie e personalize seus
próprios comportamentos de formatação de strings usando a mesma
implementação que o método embutido *note format(): 621.

 -- Classe: string.Formatter

     A classe *note Formatter: eec. tem os seguintes métodos públicos:

      -- Método: format (format_string, /, *args, **kwargs)

          O método principal da API. Ele aceita uma string de formato e
          um conjunto arbitrário de argumentos posicionais e nomeados.
          É apenas um invólucro que chama *note vformat(): 2460.

          Alterado na versão 3.7: Um argumento de string de formato é
          agora *note somente-posicional: a8f.

      -- Método: vformat (format_string, args, kwargs)

          Esta função realiza o trabalho real de formatação.  Ela é
          exposta como uma função separada para casos onde você deseja
          passar um dicionário predefinido de argumentos, ao invés de
          desempacotar e empacotar novamente o dicionário como
          argumentos individuais usando a sintaxe ‘*args’ e ‘**kwargs’.
          *note vformat(): 2460. faz o trabalho de quebrar a string de
          formato em dados de caracteres e campos de substituição.  Ela
          chama os vários métodos descritos abaixo.

     Além disso, o *note Formatter: eec. define uma série de métodos que
     devem ser substituídos por subclasses:

      -- Método: parse (format_string)

          Percorre format_string e retorna um iterável de tuplas
          ('literal_text', 'field_name', 'format_spec', 'conversion').
          Isso é usado por *note vformat(): 2460. para quebrar a string
          em texto literal ou campos de substituição.

          Os valores na tupla representam conceitualmente um intervalo
          de texto literal seguido por um único campo de substituição.
          Se não houver texto literal (o que pode acontecer se dois
          campos de substituição ocorrerem consecutivamente), então
          'literal_text' será uma string de comprimento zero.  Se não
          houver campo de substituição, então os valores de
          'field_name', 'format_spec' e 'conversion' serão ‘None’.

      -- Método: get_field (field_name, args, kwargs)

          Dado 'field_name' conforme retornado por *note parse(): 2461.
          (veja acima), converte-o em um objeto a ser formatado.
          Retorna uma tupla (obj, used_key).  A versão padrão aceita
          strings no formato definido na PEP 3101(2), como “0[name]” ou
          “label.title”.  'args' e 'kwargs' são como passados para *note
          vformat(): 2460.  O valor de retorno 'used_key' tem o mesmo
          significado que o parâmetro 'key' para *note get_value():
          2463.

      -- Método: get_value (key, args, kwargs)

          Obtém um determinado valor de campo.  O argumento 'key' será
          um inteiro ou uma string.  Se for um inteiro, ele representa o
          índice do argumento posicional em 'args'; se for uma string,
          então representa um argumento nomeado em 'kwargs'.

          O parâmetro 'args' é definido para a lista de argumentos
          posicionais para *note vformat(): 2460, e o parâmetro 'kwargs'
          é definido para o dicionário de argumentos nomeados.

          Para nomes de campos compostos, essas funções são chamadas
          apenas para o primeiro componente do nome do campo; os
          componentes subsequentes são tratados por meio de operações
          normais de atributo e indexação.

          Então, por exemplo, a expressão de campo ‘0.name’ faria com
          que *note get_value(): 2463. fosse chamado com um argumento
          'key' de 0.  O atributo ‘name’ será pesquisado após *note
          get_value(): 2463. retorna chamando a função embutida *note
          getattr(): bea.

          Se o índice ou palavra-chave se referir a um item que não
          existe, um *note IndexError: 157e. ou *note KeyError: 344.
          deve ser levantada.

      -- Método: check_unused_args (used_args, args, kwargs)

          Implementa a verificação de argumentos não usados, se desejar.
          Os argumentos para esta função são o conjunto de todas as
          chaves de argumento que foram realmente referidas na string de
          formato (inteiros para argumentos posicionais e strings para
          argumentos nomeados) e uma referência a 'args' e 'kwargs' que
          foi passada para vformat.  O conjunto de argumentos não
          utilizados pode ser calculado a partir desses parâmetros.
          Presume-se que *note check_unused_args(): 2464. levata uma
          exceção se a verificação falhar.

      -- Método: format_field (value, format_spec)

          *note format_field(): 2465. simplesmente chama o global
          embutido *note format(): 61f.  O método é fornecido para que
          as subclasses possam substituí-lo.

      -- Método: convert_field (value, conversion)

          Converte o valor (retornado por *note get_field(): 2462.) dado
          um tipo de conversão (como na tupla retornada pelo método
          *note parse(): 2461.).  A versão padrão entende os tipos de
          conversão “s” (str), “r” (repr) e “a” (ascii).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3101/

   (2) https://peps.python.org/pep-3101/


File: python.info,  Node: Sintaxe das strings de formato,  Next: Strings template,  Prev: Formatação personalizada de strings,  Up: string — Operações comuns de strings

5.6.1.3 Sintaxe das strings de formato
......................................

O método *note str.format(): 621. e a classe *note Formatter: eec.
compartilham a mesma sintaxe para strings de formato (embora no caso de
*note Formatter: eec, as subclasses possam definir sua própria sintaxe
de string de formato).  A sintaxe é relacionada a *note literais de
string formatadas: 9b1, mas é menos sofisticada e, em especial, não tem
suporte a expressões arbitrárias.

As strings de formato contêm “campos de substituição” entre chaves ‘{}’.
Tudo o que não estiver entre chaves é considerado texto literal, que é
copiado inalterado para a saída.  Se você precisar incluir um caractere
de chave no texto literal, ele pode ser escapado duplicando: ‘{{’ e
‘}}’.

A gramática para um campo de substituição é a seguinte:

     replacement_field ::= "{" [*note field_name: 2469.] ["!" *note conversion: 246a.] [":" *note format_spec: 246b.] "}"
     field_name        ::= *note arg_name: 246c. ("." *note attribute_name: 246d. | "[" *note element_index: 246e. "]")*
     arg_name          ::= [*note identifier: 2023. | *note digit: 205c.+]
     attribute_name    ::= *note identifier: 2023.
     element_index     ::= *note digit: 205c.+ | *note index_string: 246f.
     index_string      ::= <any source character except "]"> +
     conversion        ::= "r" | "s" | "a"
     format_spec       ::= *note format-spec;format_spec: 2470.

Em termos menos formais, o campo de substituição pode começar com um
'field_name' que especifica o objeto cujo valor deve ser formatado e
inserido na saída em vez do campo de substituição.  O 'field_name' é
opcionalmente seguido por um campo 'conversion', que é precedido por um
ponto de exclamação ‘'!'’, e um 'format_spec', que é precedido por dois
pontos ‘':'’.  Eles especificam um formato não padrão para o valor de
substituição.

Veja também a seção *note Minilinguagem de especificação de formato:
1e8.

O próprio 'field_name' começa com um 'arg_name' que é um número ou uma
palavra-chave.  Se for um número, ele se refere a um argumento
posicional, e se for uma palavra-chave, ele se refere a um argumento
nomeado.  Um 'arg_name' é tratado como um número se uma chamada para
*note str.isdecimal(): 235a. na string retorna verdadeira.  Se os
arg_names numéricos em uma string de formato forem 0, 1, 2, … em
sequência, eles podem ser todos omitidos (não apenas alguns) e os
números 0, 1, 2, … serão inseridos automaticamente nessa ordem.  Como
'arg_name' não é delimitado por aspas, não é possível especificar chaves
de dicionário arbitrárias (por exemplo, as strings ‘'10'’ ou ‘':-]'’)
dentro de uma string de formato.  O 'arg_name' pode ser seguido por
qualquer número de expressões de índice ou atributo.  Uma expressão da
forma ‘'.name'’ seleciona o atributo nomeado usando *note getattr():
bea, enquanto uma expressão da forma ‘'[index]'’ faz uma pesquisa de
índice usando *note __getitem__(): 283.

Alterado na versão 3.1: Os especificadores de argumento posicional podem
ser omitidos para *note str.format(): 621, de forma que ‘'{}
{}'.format(a, b)’ é equivalente a ‘'{0} {1}'.format(a, b)’.

Alterado na versão 3.4: Os especificadores de argumento posicional podem
ser omitidos para *note Formatter: eec.

Alguns exemplos simples de string de formato:

     "Primeiro, tu deverás contar até {0}"  # Referencia o primeiro argumento posicional
     "Traga-me um {}"                       # Referencia implicitamente o primeiro argumento posicional
     "De {} para {}"                        # Mesmo que "De {0} para {1}"
     "Minha missão é {nome}"                # Referencia argumento nomeado 'nome'
     "Peso em toneladas {0.peso}"           # O atributo 'peso' do primeiro argumento posicional
     "Unidades destruídas: {jogadores[0]}"  # Primeiro elemento do argumento nomeado 'jogadores'.

O campo 'conversion' causa uma coerção de tipo antes da formatação.
Normalmente, o trabalho de formatação de um valor é feito pelo método
*note __format__(): 61e. do próprio valor.  No entanto, em alguns casos,
é desejável forçar um tipo a ser formatado como uma string, substituindo
sua própria definição de formatação.  Ao converter o valor em uma string
antes de chamar *note __format__(): 61e, a lógica de formatação normal é
contornada.

Três sinalizadores de conversão são atualmente suportados: ‘'!s'’, que
chama *note str(): 44c. no valor; ‘'!r'’, que chama *note repr(): 800.;
e ‘'!a'’, que chama *note ascii(): 142d.

Alguns exemplos:

     "Harold's a clever {0!s}"        # Chama str() no primeiro argumento
     "Bring out the holy {name!r}"    # Chama repr() no primeiro argumento
     "More {!a}"                      # Chama ascii() no primeiro argumento

O campo 'format_spec' contém uma especificação de como o valor deve ser
apresentado, incluindo detalhes como largura do campo, alinhamento,
preenchimento, precisão decimal e assim por diante.  Cada tipo de valor
pode definir sua própria “minilinguagem de formatação” ou interpretação
de 'format_spec'.

A maioria dos tipos embutidos oferece suporte a uma minilinguagem de
formatação comum, que é descrita na próxima seção.

Um campo 'format_spec' também pode incluir campos de substituição
aninhados dentro dele.  Esses campos de substituição aninhados podem
conter um nome de campo, sinalizador de conversão e especificação de
formato, mas um aninhamento mais profundo não é permitido.  Os campos de
substituição em format_spec são substituídos antes que a string
'format_spec' seja interpretada.  Isso permite que a formatação de um
valor seja especificada dinamicamente.

Veja a seção *note Exemplos de formato: 2471. para alguns exemplos.

* Menu:

* Minilinguagem de especificação de formato::
* Exemplos de formato::


File: python.info,  Node: Minilinguagem de especificação de formato,  Next: Exemplos de formato,  Up: Sintaxe das strings de formato

5.6.1.4 Minilinguagem de especificação de formato
.................................................

“Especificações de formato” são usadas nos campos de substituição
contidos em uma string de formato para definir como os valores
individuais são apresentados (consulte *note Sintaxe das strings de
formato: 13e2. e *note f-strings: 9b1.).  Elas também podem ser passadas
diretamente para a função embutida *note format(): 61f.  Cada tipo
formatável pode definir como a especificação do formato deve ser
interpretada.

A maioria dos tipos embutidos implementa as seguintes opções para
especificações de formato, embora algumas das opções de formatação sejam
suportadas apenas pelos tipos numéricos.

Uma convenção geral é que uma especificação de formato vazia produz o
mesmo resultado como se você tivesse chamado *note str(): 44c. no valor.
Uma especificação de formato não vazio normalmente modifica o resultado.

A forma geral de um 'especificador de formato padrão' é:

     format_spec ::= [*note options: 2473.][*note width: 2474.][*note grouping: 2475.]["." *note precision: 2476.][*note type: 2477.]
     options     ::= [[*note fill: 2478.]*note align: 2479.][*note sign: 247a.]["z"]["#"]["0"]
     fill        ::= <any character>
     align       ::= "<" | ">" | "=" | "^"
     sign        ::= "+" | "-" | " "
     width       ::= *note digit: 205c.+
     grouping    ::= "," | "_"
     precision   ::= *note digit: 205c.+
     type        ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g"
                     | "G" | "n" | "o" | "s" | "x" | "X" | "%"

Se um valor 'align' válido for especificado, ele pode ser precedido por
um caractere de preenchimento 'fill' que pode ser qualquer caractere e o
padrão é um espaço se omitido.  Não é possível usar uma chave literal
(”‘{’” ou “‘}’”) como o caractere 'fill' em uma *note string formatada
literal: 9b1. ou ao usar o método *note str.format(): 621.  No entanto,
é possível inserir uma chave com um campo de substituição aninhado.
Esta limitação não afeta a função *note format(): 61f.

O significado das várias opções de alinhamento é o seguinte:

Opção         Significado
              
-----------------------------------------------------------------------------
              
‘'<'’         Força o alinhamento à esquerda do campo dentro do espaço
              disponível (este é o padrão para a maioria dos objetos).
              
              
‘'>'’         Força o alinhamento à direita do campo dentro do espaço
              disponível (este é o padrão para números).
              
              
‘'='’         Força o preenchimento a ser colocado após o sinal (se
              houver), mas antes dos dígitos.  É usado para imprimir
              campos na forma “+000000120”.  Esta opção de alinhamento só
              é válida para tipos numéricos, excluindo *note complex: 2f8.
              Torna-se o padrão para números quando “0” precede
              imediatamente a largura do campo.
              
              
‘'^'’         Força a centralização do campo no espaço disponível.
              

Observe que, a menos que uma largura de campo mínima seja definida, a
largura do campo sempre será do mesmo tamanho que os dados para
preenchê-lo, de modo que a opção de alinhamento não tem significado
neste caso.

A opção 'sign' só é válida para tipos numéricos e pode ser um dos
seguintes:

Opção         Significado
              
-----------------------------------------------------------------------------
              
‘'+'’         indica que um sinal deve ser usado para números positivos e
              negativos.
              
              
‘'-'’         indica que um sinal deve ser usado apenas para números
              negativos (este é o comportamento padrão).
              
              
espaço        indica que um espaço inicial deve ser usado em números
              positivos e um sinal de menos em números negativos.
              

A opção ‘'z'’ força valores de ponto flutuante de zero negativo para
zero positivo após o arredondamento para a precisão do formato.  Esta
opção só é válida para tipos de apresentação de ponto flutuante.

Alterado na versão 3.11: Adicionada a opção ‘'z'’ (veja também PEP
682(1)).

A opção ‘'#'’ faz com que a “forma alternativa” seja usada para a
conversão.  A forma alternativa é definida de forma diferente para
diferentes tipos.  Esta opção é válida apenas para tipos inteiros,
pontos flutuantes e complexos.  Para inteiros, quando a saída binária,
octal ou hexadecimal é usada, esta opção adiciona o prefixo respectivo
‘'0b'’, ‘'0o'’, ‘'0x'’ ou ‘'0X'’ ao valor de saída.  Para pontos
flutuante e complexo, a forma alternativa faz com que o resultado da
conversão sempre contenha um caractere de ponto decimal, mesmo se nenhum
dígito o seguir.  Normalmente, um caractere de ponto decimal aparece no
resultado dessas conversões apenas se um dígito o seguir.  Além disso,
para conversões ‘'g'’ e ‘'G'’, os zeros finais não são removidos do
resultado.

O 'width' é um número inteiro decimal que define a largura total mínima
do campo, incluindo quaisquer prefixos, separadores e outros caracteres
de formatação.  Se não for especificado, a largura do campo será
determinada pelo conteúdo.

Quando nenhum alinhamento explícito é fornecido, preceder o campo
'width' com um caractere zero (‘'0'’) habilita o preenchimento por zero
com reconhecimento de sinal para tipos numéricos excluindo *note
complex: 2f8.  Isso é equivalente a um caractere de 'fill' de valor
‘'0'’ com um tipo de 'alignment' de ‘'='’.

Alterado na versão 3.10: Precedendo o campo 'width' com ‘'0'’ não afeta
mais o alinhamento padrão para strings.

A opção 'grouping' após o campo 'width' especifica um separador de grupo
de dígitos para a parte inteira de um número.  Pode ser um dos
seguintes:

Opção         Significado
              
-----------------------------------------------------------------------------
              
‘','’         Insere uma vírgula a cada 3 dígitos para tipos de
              apresentação inteiros ‘'d'’ e de ponto flutuante, excluindo
              ‘'n'’.  Para outros tipos de apresentação, esta opção não é
              suportada.
              
              
‘'_'’         Insere um sublinhado a cada 3 dígitos para tipos de
              apresentação inteiros ‘'d'’ e tipos de apresentação de ponto
              flutuante, excluindo ‘'n'’.  Para tipos de apresentação
              inteiros ‘'b'’, ‘'o'’, ‘'x'’ e ‘'X'’, os sublinhados são
              inseridos a cada 4 dígitos.  Para outros tipos de
              apresentação, esta opção não é suportada.
              

Para um separador com reconhecimento de localidade, usa o tipo de
apresentação ‘'n'’.

Alterado na versão 3.1: Adicionada a opção ‘','’ (veja também PEP
378(2)).

Alterado na versão 3.6: Adicionada a opção ‘'_'’ (veja também PEP
515(3)).

'precision' é um número decimal que indica quantos dígitos devem ser
exibidos depois do ponto decimal para um valor de ponto flutuante
formatado com ‘'f'’ e ‘'F'’, ou antes e depois do ponto decimal para um
valor de ponto flutuante formatado com ‘'g'’ ou ‘'G'’.  Para tipos não
numéricos, o campo indica o tamanho máximo do campo – em outras
palavras, quantos caracteres serão usados do conteúdo do campo.
'precision' não é permitido para valores inteiros.

Finalmente, o 'type' determina como os dados devem ser apresentados.

Os tipos de apresentação de string disponíveis são:

     Tipo          Significado
                   
     -----------------------------------------------------------------------------
                   
     ‘'s'’         Formato de string.  Este é o tipo padrão para strings e pode
                   ser omitido.
                   
                   
     None          O mesmo que ‘'s'’.
                   

Os tipos de apresentação inteira disponíveis são:

     Tipo          Significado
                   
     -----------------------------------------------------------------------------
                   
     ‘'b'’         Formato binário.  Exibe o número na base 2.
                   
                   
     ‘'c'’         Caractere.  Converte o inteiro no caractere Unicode
                   correspondente antes de imprimir.
                   
                   
     ‘'d'’         Inteiro decimal.  Exibe o número na base 10.
                   
                   
     ‘'o'’         Formato octal.  Exibe o número na base 8.
                   
                   
     ‘'x'’         Formato hexadecimal.  Produz o número na base 16, usando
                   letras minúsculas para os dígitos acima de 9.
                   
                   
     ‘'X'’         Formato hexadecimal.  Produz o número na base 16, usando
                   letras maiúsculas para os dígitos acima de 9.  No caso de
                   ‘'#'’ ser especificado, o prefixo ‘'0x'’ será maiúsculo para
                   ‘'0X'’ também.
                   
                   
     ‘'n'’         Número.  É o mesmo que ‘'d'’, exceto que usa a configuração
                   de localidade atual para inserir os separadores de grupo de
                   dígitos apropriados.
                   
                   
     None          O mesmo que ‘'d'’.
                   

Além dos tipos de apresentação acima, os inteiros podem ser formatados
com os tipos de apresentação de ponto flutuante listados abaixo (exceto
‘'n'’ e ‘None’).  Ao fazer isso, *note float(): 2f7. é usado para
converter o inteiro em um número de ponto flutuante antes da formatação.

Os tipos de apresentação disponíveis para *note float: 2f7. e *note
Decimal: 29d. valores são:

     Tipo          Significado
                   
     -----------------------------------------------------------------------------
                   
     ‘'e'’         Notação científica.  Para uma dada precisão ‘p’, formata o
                   número em notação científica com a letra “e” separando o
                   coeficiente do expoente.  O coeficiente tem um dígito antes
                   e ‘p’ dígitos depois do ponto decimal, para um total de ‘p +
                   1’ dígitos significativos.  Sem precisão fornecida, usa uma
                   precisão de ‘6’ dígitos após o ponto decimal para
                   *note float: 2f7, e mostra todos os dígitos de coeficiente
                   para *note Decimal: 29d.  Se ‘p=0’, o ponto decimal é
                   omitido a menos que a opção ‘#’ seja usada.
                   
                   For *note float: 2f7, the exponent always contains at least
                   two digits, and is zero if the value is zero.
                   
                   
     ‘'E'’         Notação científica.  O mesmo que ‘'e'’, exceto que usa um
                   ‘E’ maiúsculo como caractere separador.
                   
                   
     ‘'f'’         Notação de ponto fixo.  Para uma dada precisão ‘p’, formata
                   o número como um número decimal com exatamente os ‘p’
                   dígitos após o ponto decimal.  Sem precisão fornecida, usa
                   uma precisão de ‘6’ dígitos após o ponto decimal para
                   *note float: 2f7, e usa uma precisão grande o suficiente
                   para mostrar todos os dígitos de coeficiente para
                   *note Decimal: 29d.  Se ‘p=0’, o ponto decimal é omitido a
                   menos que a opção ‘#’ seja usada.
                   
                   
     ‘'F'’         Notação de ponto fixo.  O mesmo que ‘'f'’, mas converte
                   ‘nan’ para ‘NAN’ e ‘inf’ para ‘INF’.
                   
                   
     ‘'g'’         Formato geral.  Para uma determinada precisão ‘p >= 1’, isso
                   arredonda o número para ‘p’ dígitos significativos e então
                   formata o resultado em formato de ponto fixo ou em notação
                   científica, dependendo de sua magnitude.  Uma precisão de
                   ‘0’ é tratada como equivalente a uma precisão de ‘1’.
                   
                   As regras precisas são as seguintes: suponha que o resultado
                   formatado com tipo de apresentação ‘'e'’ e precisão ‘p-1’
                   teria o expoente ‘exp’.  Então, se ‘m <= exp < p’, onde ‘m’
                   é -4 para pontos flutuantes e -6 para *note Decimals: 29d, o
                   número é formatado com o tipo de apresentação ‘'f'’ e
                   precisão ‘p-1-exp’.  Caso contrário, o número é formatado
                   com tipo de apresentação ‘'e'’ e precisão ‘p-1’.  Em ambos
                   os casos, zeros à direita insignificantes são removidos do
                   significando, e o ponto decimal também é removido se não
                   houver dígitos restantes após ele, a menos que a opção ‘'#'’
                   seja usada.
                   
                   Sem precisão fornecida, usa uma precisão de ‘6’ dígitos
                   significativos para *note float: 2f7.  Para
                   *note Decimal: 29d, o coeficiente do resultado é formado a
                   partir dos dígitos do coeficiente do valor; a notação
                   científica é usada para valores menores que ‘1e-6’ em valor
                   absoluto e valores onde o valor posicional do dígito menos
                   significativo é maior que 1, e a notação de ponto fixo é
                   usada de outra forma.
                   
                   Infinito positivo e negativo, zero positivo e negativo e
                   nans, são formatados como ‘inf’, ‘-inf’, ‘0’, ‘-0’ e ‘nan’,
                   respectivamente, independentemente da precisão.
                   
                   
     ‘'G'’         Formato geral.  O mesmo que ‘'g'’, exceto muda para ‘'E'’ se
                   o número ficar muito grande.  As representações de infinito
                   e NaN também são maiúsculas.
                   
                   
     ‘'n'’         Número.  É o mesmo que ‘'g'’, exceto que usa a configuração
                   de localidade atual para inserir os separadores de grupo de
                   dígitos apropriados para a parte inteira de um número.
                   
                   
     ‘'%'’         Porcentagem.  Multiplica o número por 100 e exibe no formato
                   fixo (‘'f'’), seguido por um sinal de porcentagem.
                   
                   
     None          Para *note float: 2f7, é o como o tipo ‘'g'’, exceto que
                   quando a notação de ponto fixo é usada para formatar o
                   resultado, ela sempre inclui pelo menos um dígito após a
                   ponto decimal, e troca para a notação científica quando ‘exp
                   >= p - 1’.  Quando a precisão não é especificada, este
                   último será tão grande quanto necessário para representar o
                   valor fornecido fielmente.
                   
                   Para *note Decimal: 29d, é o mesmo que ‘'g'’ ou ‘'G'’
                   dependendo do valor de ‘context.capitals’ para o contexto
                   decimal atual.
                   
                   O efeito geral é combinar a saída de *note str(): 44c.
                   conforme alterada pelos outros modificadores de formato.
                   

O resultado deve ser arredondado corretamente para uma precisão dada ‘p’
de dígitos após o ponto decimal.  O modo de arredondamento para *note
float: 2f7. corresponde ao do builtin *note round(): 131d.  Para *note
Decimal: 29d, o modo de arredondamento do *note contexto: 247b. atual
será usado.

Os tipos de apresentação disponíveis para *note complex: 2f8. são os
mesmos que para *note float: 2f7. (‘'%'’ não é permitido).  Os
componentes real e imaginário de um número complexo são formatados como
números de ponto flutuante, de acordo com o tipo de apresentação
especificado.  Eles são separados pelo sinal obrigatório da parte
imaginária, sendo esta última terminada por um sufixo ‘j’.  Se o tipo de
apresentação estiver faltando, o resultado corresponderá à saída de
*note str(): 44c. (números complexos com uma parte real diferente de
zero também são cercados por parênteses), possivelmente alterados por
outros modificadores de formato.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0682/

   (2) https://peps.python.org/pep-0378/

   (3) https://peps.python.org/pep-0515/


File: python.info,  Node: Exemplos de formato,  Prev: Minilinguagem de especificação de formato,  Up: Sintaxe das strings de formato

5.6.1.5 Exemplos de formato
...........................

Esta seção contém exemplos da sintaxe de *note str.format(): 621. e
comparação com a antiga formatação ‘%’.

Na maioria dos casos a sintaxe é semelhante à antiga formatação de ‘%’,
com a adição de ‘{}’ e com ‘:’ usado em vez de ‘%’.  Por exemplo,
‘'%03.2f'’ pode ser traduzido para ‘'{:03.2f}'’.

A nova sintaxe de formato também oferece suporte a opções novas e
diferentes, mostradas nos exemplos a seguir.

Acessando os argumentos por posição:

     >>> '{0}, {1}, {2}'.format('a', 'b', 'c')
     'a, b, c'
     >>> '{}, {}, {}'.format('a', 'b', 'c')  # 3.1+ only
     'a, b, c'
     >>> '{2}, {1}, {0}'.format('a', 'b', 'c')
     'c, b, a'
     >>> '{2}, {1}, {0}'.format(*'abc')      # desempacotando sequência de argumentos
     'c, b, a'
     >>> '{0}{1}{0}'.format('abra', 'cad')   # índices dos argumentos podem ser repetidos
     'abracadabra'

Acessando os argumentos por nome:

     >>> 'Coordinates: {latitude}, {longitude}'.format(latitude='37.24N', longitude='-115.81W')
     'Coordinates: 37.24N, -115.81W'
     >>> coord = {'latitude': '37.24N', 'longitude': '-115.81W'}
     >>> 'Coordinates: {latitude}, {longitude}'.format(**coord)
     'Coordinates: 37.24N, -115.81W'

Acessando os atributos dos argumentos:

     >>> c = 3-5j
     >>> ('The complex number {0} is formed from the real part {0.real} '
     ...  'and the imaginary part {0.imag}.').format(c)
     'The complex number (3-5j) is formed from the real part 3.0 and the imaginary part -5.0.'
     >>> class Point:
     ...     def __init__(self, x, y):
     ...         self.x, self.y = x, y
     ...     def __str__(self):
     ...         return 'Point({self.x}, {self.y})'.format(self=self)
     ...
     >>> str(Point(4, 2))
     'Point(4, 2)'

Acessando os itens dos argumentos:

     >>> coord = (3, 5)
     >>> 'X: {0[0]};  Y: {0[1]}'.format(coord)
     'X: 3;  Y: 5'

Substituindo ‘%s’ e ‘%r’:

     >>> "repr() mostra aspas: {!r}; str() não mostra: {!s}".format('teste1', 'teste2')
     "repr() mostra aspas: 'teste1'; str() não mostra: teste2"

Alinhando o texto e especificando uma largura:

     >>> '{:<30}'.format('alinhado à esquerda')
     'alinhado à esquerda           '
     >>> '{:>30}'.format('alinhado à direita')
     '            alinhado à direita'
     >>> '{:^30}'.format('centralizado')
     '         centralizado         '
     >>> '{:*^30}'.format('centralizado')  # usa '*' como preenchimento
     '*********centralizado*********'

Substituindo ‘%+f’, ‘%-f’ e ‘% f’ e especificando um sinal:

     >>> '{:+f}; {:+f}'.format(3.14, -3.14)  # mostra sempre
     '+3.140000; -3.140000'
     >>> '{: f}; {: f}'.format(3.14, -3.14)  # mostra um espaço para números positivos
     ' 3.140000; -3.140000'
     >>> '{:-f}; {:-f}'.format(3.14, -3.14)  # mostra apenas o sinal de menos -- mesmo que '{:f}; {:f}'
     '3.140000; -3.140000'

Substituindo ‘%x’ e ‘%o’ e convertendo o valor para bases diferentes:

     >>> # format também tem suporte a números binários
     >>> "int: {0:d};  hex: {0:x};  oct: {0:o};  bin: {0:b}".format(42)
     'int: 42;  hex: 2a;  oct: 52;  bin: 101010'
     >>> # com 0x, 0o ou 0b como prefixo:
     >>> "int: {0:d};  hex: {0:#x};  oct: {0:#o};  bin: {0:#b}".format(42)
     'int: 42;  hex: 0x2a;  oct: 0o52;  bin: 0b101010'

Usando a vírgula ou o sublinhado como separador de grupos de dígitos:

     >>> '{:,}'.format(1234567890)
     '1,234,567,890'
     >>> '{:_}'.format(1234567890)
     '1_234_567_890'
     >>> '{:_b}'.format(1234567890)
     '100_1001_1001_0110_0000_0010_1101_0010'
     >>> '{:_x}'.format(1234567890)
     '4996_02d2'

Expressando uma porcentagem:

     >>> points = 19
     >>> total = 22
     >>> 'Correct answers: {:.2%}'.format(points/total)
     'Correct answers: 86.36%'

Usando formatação específica do tipo:

     >>> import datetime
     >>> d = datetime.datetime(2010, 7, 4, 12, 15, 58)
     >>> '{:%Y-%m-%d %H:%M:%S}'.format(d)
     '2010-07-04 12:15:58'

Argumentos de aninhamento e exemplos mais complexos:

     >>> for align, text in zip('<^>', ['left', 'center', 'right']):
     ...     '{0:{fill}{align}16}'.format(text, fill=align, align=align)
     ...
     'left<<<<<<<<<<<<'
     '^^^^^center^^^^^'
     '>>>>>>>>>>>right'
     >>>
     >>> octets = [192, 168, 0, 1]
     >>> '{:02X}{:02X}{:02X}{:02X}'.format(*octets)
     'C0A80001'
     >>> int(_, 16)
     3232235521
     >>>
     >>> width = 5
     >>> for num in range(5,12):
     ...     for base in 'dXob':
     ...         print('{0:{width}{base}}'.format(num, base=base, width=width), end=' ')
     ...     print()
     ...
         5     5     5   101
         6     6     6   110
         7     7     7   111
         8     8    10  1000
         9     9    11  1001
        10     A    12  1010
        11     B    13  1011


File: python.info,  Node: Strings template,  Next: Funções auxiliares,  Prev: Sintaxe das strings de formato,  Up: string — Operações comuns de strings

5.6.1.6 Strings template
........................

Strings template fornecem substituições de string mais simples, conforme
descrito em PEP 292(1).  Um caso de uso primário para strings template é
para internacionalização (i18n), uma vez que, nesse contexto, a sintaxe
e a funcionalidade mais simples tornam mais fácil traduzir do que outros
recursos embutidos de formatação de strings no Python.  Como um exemplo
de biblioteca construída sobre strings template para i18n, veja o pacote
flufl.i18n(2).

Strings template oferecem suporte a substituições baseadas em ‘$’,
usando as seguintes regras:

   * ‘$$’ é um escape; é substituído por um único ‘$’.

   * ‘$identifier’ nomeia um espaço reservado de substituição
     correspondendo a uma chave de mapeamento de ‘"identifier"’.  Por
     padrão, ‘"identifier"’ é restrito a qualquer string ASCII
     alfanumérica que não faz distinção entre maiúsculas e minúsculas
     (incluindo sublinhados) que começa com um sublinhado ou letra
     ASCII.  O primeiro caractere não identificador após o caractere ‘$’
     termina esta especificação de espaço reservado.

   * ‘${identifier}’ é equivalente a ‘$identifier’.  É necessário quando
     caracteres identificadores válidos seguem o marcador de posição,
     mas não fazem parte do marcador, como ‘"${noun}ification"’.

Qualquer outra ocorrência de ‘$’ na string resultará em uma *note
ValueError: 202. sendo levantada.

O módulo *note string: d3. fornece uma classe *note Template: 687. que
implementa essas regras.  Os métodos de *note Template: 687. são:

 -- Classe: string.Template (template)

     O construtor recebe um único argumento que é a string template

      -- Método: substitute (mapping={}, /, **kwds)

          Executa a substituição do modelo, retornando uma nova string.
          'mapping' é qualquer objeto dicionário ou similar com chaves
          que correspondem aos marcadores de posição no modelo.  Como
          alternativa, você pode fornecer argumentos nomeados, os quais
          são espaços reservados.  Quando 'mapping' e 'kwds' são
          fornecidos e há duplicatas, os marcadores de 'kwds' têm
          precedência.

      -- Método: safe_substitute (mapping={}, /, **kwds)

          Como *note substitute(): 247e, exceto que se os espaços
          reservados estiverem faltando em 'mapping' e 'kwds', em vez de
          levantar uma exceção *note KeyError: 344, o espaço reservado
          original aparecerá na string resultante intacta.  Além disso,
          ao contrário de *note substitute(): 247e, qualquer outra
          ocorrência de ‘$’ simplesmente retornará ‘$’ em vez de
          levantar *note ValueError: 202.

          Embora outras exceções ainda possam ocorrer, esse método é
          chamado de “seguro” porque sempre tenta retornar uma string
          utilizável em vez de levantar uma exceção.  Em outro sentido,
          *note safe_substitute(): 247f. pode ser qualquer coisa
          diferente de seguro, uma vez que irá ignorar silenciosamente
          modelos malformados contendo delimitadores pendentes, chaves
          não correspondidas ou espaços reservados que não são
          identificadores Python válidos.

      -- Método: is_valid ()

          Retorna ‘False’ se o modelo tiver espaços reservados inválidos
          que farão com que *note substitute(): 247e. levante *note
          ValueError: 202.

          Adicionado na versão 3.11.

      -- Método: get_identifiers ()

          Retorna uma lista dos identificadores válidos no modelo, na
          ordem em que aparecem pela primeira vez, ignorando quaisquer
          identificadores inválidos.

          Adicionado na versão 3.11.

     Instâncias de *note Template: 687. também fornecem um atributo de
     dados públicos:

      -- Atributo: template

          Este é o objeto passado para o argumento 'template' do
          construtor.  Em geral, você não deve alterá-lo, mas o acesso
          somente leitura não é obrigatório.

Aqui está um exemplo de como usar uma instância de Template:

     >>> from string import Template
     >>> s = Template('$who likes $what')
     >>> s.substitute(who='tim', what='kung pao')
     'tim likes kung pao'
     >>> d = dict(who='tim')
     >>> Template('Give $who $100').substitute(d)
     Traceback (most recent call last):
     ...
     ValueError: Invalid placeholder in string: line 1, col 11
     >>> Template('$who likes $what').substitute(d)
     Traceback (most recent call last):
     ...
     KeyError: 'what'
     >>> Template('$who likes $what').safe_substitute(d)
     'tim likes $what'

Uso avançado: você pode derivar subclasses de *note Template: 687. para
personalizar a sintaxe do espaço reservado, caractere delimitador ou
toda a expressão regular usada para analisar strings template.  Para
fazer isso, você pode substituir estes atributos de classe:

   * 'delimiter' – Este é a string literal que descreve um delimitador
     de introdução do espaço reservado.  O valor padrão é ‘$’.  Note que
     esta 'não' deve ser uma expressão regular, já que a implementação
     irá chamar *note re.escape(): c23. nesta string conforme
     necessário.  Observe também que você não pode alterar o delimitador
     após a criação da classe (ou seja, um delimitador diferente deve
     ser definido no espaço de nomes da classe da subclasse).

   * 'idpattern' – Esta é a expressão regular que descreve o padrão para
     espaço reservado sem envolto em chaves.  O valor padrão é a
     expressão regular ‘(?a:[_a-z][_a-z0-9]*)’.  Se for fornecido e
     'braceidpattern' for ‘None’, esse padrão também se aplicará o
     espaço reservado com chaves.

          Nota: Uma vez que 'flags' padrão é ‘re.IGNORECASE’, o padrão
          ‘[a-z]’ pode corresponder a alguns caracteres não ASCII. É por
          isso que usamos o sinalizador local ‘a’ aqui.

     Alterado na versão 3.7: 'braceidpattern' pode ser usado para
     definir padrões separados usados dentro e fora das chaves.

   * 'braceidpattern' – É como 'idpattern', mas descreve o padrão para
     espaços reservados com chaves.  O padrão é ‘None’, o que significa
     recorrer a 'idpattern' (ou seja, o mesmo padrão é usado dentro e
     fora das chaves).  Se fornecido, permite definir padrões diferentes
     para espaço reservado com e sem chaves.

     Adicionado na versão 3.7.

   * 'flags' – Os sinalizadores de expressão regular que serão aplicados
     ao compilar a expressão regular usada para reconhecer
     substituições.  O valor padrão é ‘re.IGNORECASE’.  Note que
     ‘re.VERBOSE’ sempre será adicionado aos sinalizadores, então
     'idpattern's personalizados devem seguir as convenções para
     expressões regulares verbosas.

     Adicionado na versão 3.2.

Como alternativa, você pode fornecer todo o padrão de expressão regular
substituindo o atributo 'pattern' de classe.  Se você fizer isso, o
valor deve ser um objeto de expressão regular com quatro grupos de
captura nomeados.  Os grupos de captura correspondem às regras
fornecidas acima, junto com a regra inválida do espaço reservado:

   * 'escaped' – Este grupo corresponde à sequência de escape, por
     exemplo ‘$$’, no padrão.

   * 'named' – Este grupo corresponde ao nome do espaço reservado sem
     chaves; não deve incluir o delimitador no grupo de captura.

   * 'braced' – Este grupo corresponde ao nome do espaço reservado entre
     chaves; ele não deve incluir o delimitador ou chaves no grupo de
     captura.

   * 'invalid' – Esse grupo corresponde a qualquer outro padrão de
     delimitador (geralmente um único delimitador) e deve aparecer por
     último na expressão regular.

Os métodos nesta classe irão levantar *note ValueError: 202. se o padrão
corresponder ao modelo sem que um desses grupos nomeados corresponda.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0292/

   (2) https://flufli18n.readthedocs.io/en/latest/


File: python.info,  Node: Funções auxiliares,  Prev: Strings template,  Up: string — Operações comuns de strings

5.6.1.7 Funções auxiliares
..........................

 -- Função: string.capwords (s, sep=None)

     Divide o argumento em palavras usando *note str.split(): ed9,
     coloca cada palavra em maiúscula usando *note str.capitalize():
     2355, e junte as palavras em maiúsculas usando *note str.join():
     2340.  Se o segundo argumento opcional 'sep' estiver ausente ou
     ‘None’, os caracteres de espaço em branco são substituídos por um
     único espaço e os espaços em branco à esquerda e à direita são
     removidos, caso contrário 'sep' é usado para dividir e unir as
     palavras.


File: python.info,  Node: re — Operações com expressões regulares,  Next: difflib — Helpers for computing deltas,  Prev: string — Operações comuns de strings,  Up: Serviços de Processamento de Texto

5.6.2 ‘re’ — Operações com expressões regulares
-----------------------------------------------

'Código-fonte:' Lib/re/(1)

__________________________________________________________________

Este módulo fornece operações para correspondência de expressões
regulares semelhantes às encontradas em Perl.  O nome do módulo vem das
iniciais do termo em inglês 'regular expressions', também frequentemente
chamadas de 'regex'.

Tanto os padrões quanto as strings a serem pesquisados podem ser strings
Unicode (*note str: 44c.) assim como strings de 8 bits (*note bytes:
1c2.).  No entanto, strings Unicode e strings de 8 bits não podem ser
misturadas: ou seja, você não pode corresponder uma string Unicode com
um padrão de bytes ou vice-versa; da mesma forma, ao solicitar uma
substituição, a string de substituição deve ser do mesmo tipo que o
padrão e a string de pesquisa.

Expressões regulares usam o caractere de contrabarra (‘'\'’) para
indicar formas especiais ou para permitir que caracteres especiais sejam
usados sem invocar seu significado especial.  Isso colide com o uso em
Python do mesmo caractere para o mesmo propósito em literais de string;
por exemplo, para corresponder a uma contrabarra literal, pode-se ter
que escrever ‘'\\\\'’ como a string do padrão, porque a expressão
regular deve ser ‘\\’, e cada contrabarra deve ser expressa como ‘\\’
dentro de um literal de string Python regular.  Além disso, observe que
quaisquer sequências de escape inválidas no uso do Python da contrabarra
em literais de string agora levantam uma exceção *note SyntaxWarning:
466. e no futuro isso se tornará um *note SyntaxError: 18d.  Esse
comportamento acontecerá mesmo se for uma sequência de escape válida
para uma expressão regular.

A solução é usar a notação de string bruta do Python para padrões de
expressão regular; as contrabarras não são tratadas de nenhuma maneira
especial em uma string literal com o prefixo ‘'r'’.  Portanto, ‘r"\n"’ é
uma string de dois caracteres contendo ‘'\'’ e ‘'n'’, enquanto ‘"\n"’ é
uma string de um caractere contendo uma nova linha.  Normalmente, os
padrões serão expressos em código Python usando esta notação de string
bruta.

É importante notar que a maioria das operações de expressão regular
estão disponíveis como funções e métodos em nível de módulo em *note
expressões regulares compiladas: fbb.  As funções são atalhos que não
exigem que você compile um objeto de expressão regular primeiro, mas
perdem-se alguns parâmetros de ajuste fino.

Ver também
..........

O módulo de terceiros regex(2) possui uma API compatível com o módulo da
biblioteca padrão *note re: b9, mas oferece funcionalidades adicionais e
um suporte mais completo a Unicode.

* Menu:

* Sintaxe de expressão regular::
* Conteúdo do módulo::
* Objetos expressão regular::
* Objetos correspondência::
* Exemplos de expressão regular::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/re/

   (2) https://pypi.org/project/regex/


File: python.info,  Node: Sintaxe de expressão regular,  Next: Conteúdo do módulo,  Up: re — Operações com expressões regulares

5.6.2.1 Sintaxe de expressão regular
....................................

Uma expressão regular (ou ER) especifica um conjunto de strings que
corresponde a ela; as funções neste módulo permitem que você verifique
se uma determinada string corresponde a uma determinada expressão
regular (ou se uma determinada expressão regular corresponde a uma
determinada string, o que resulta na mesma coisa).

As expressões regulares podem ser concatenadas para formar novas
expressões regulares; se 'A' e 'B' forem expressões regulares, então
'AB' também será uma expressão regular.  Em geral, se uma string 'p'
corresponder a 'A' e outra string 'q' corresponder a 'B', a string 'pq'
corresponderá a AB. Isso é válido, a menos que 'A' ou 'B' contenham
operações de baixa precedência; condições de contorno entre 'A' e 'B';
ou ter referências de grupo numeradas.  Assim, expressões complexas
podem ser facilmente construídas a partir de expressões primitivas mais
simples, como as descritas aqui.  Para obter detalhes sobre a teoria e
implementação de expressões regulares, consulte o livro de Friedl *note
[Frie09]: 2486, ou quase qualquer livro sobre construção de
compiladores.

Segue uma breve explicação do formato das expressões regulares.  Para
mais informações e uma apresentação mais suave, consulte o tutorial de
*note Expressões Regulares: 2487.

As expressões regulares podem conter caracteres especiais e comuns.  A
maioria dos caracteres comuns, como ‘'A'’, ‘'a'’ ou ‘'0'’, são as
expressões regulares mais simples; eles simplesmente se correspondem.
Você pode concatenar caracteres comuns, de forma que ‘último’
corresponda à string ‘'último'’.  (No restante desta seção, escreveremos
ERs ‘neste estilo especial’, geralmente sem aspas, e strings para serem
correspondidas ‘'entre aspas simples'’.)

Alguns caracteres, como ‘'|'’ ou ‘'('’, são especiais.  Os caracteres
especiais representam classes de caracteres comuns ou afetam como as
expressões regulares em torno deles são interpretadas.

Operadores de repetição ou quantificadores (‘*’, ‘+’, ‘?’, ‘{m,n}’ etc)
não podem ser aninhados diretamente.  Isso evita ambiguidade com o
sufixo modificador não guloso ‘?’, e com outros modificadores em outras
implementações.  Para aplicar uma segunda repetição a uma repetição
interna, podem ser usados parênteses.  Por exemplo, a expressão
‘(?:a{6})*’ corresponde a qualquer múltiplo de seis caracteres ‘'a'’.

Os caracteres especiais são:

‘.’

     (Ponto.)  No modo padrão, corresponde a qualquer caractere, exceto
     uma nova linha.  Se o sinalizador *note DOTALL: 2488. foi
     especificado, ele corresponde a qualquer caractere, incluindo uma
     nova linha.  ‘(?s:.)’ corresponde a qualquer caractere independente
     de sinalizadores.

‘^’

     (Sinal de circunflexo.)  Corresponde ao início da string, e no modo
     *note MULTILINE: 2489. também corresponde imediatamente após cada
     nova linha.

‘$’

     Corresponde ao final da string ou logo antes da nova linha no final
     da string, e no modo *note MULTILINE: 2489. também corresponde
     antes de uma nova linha.  ‘foo’ corresponde a ‘foo’ e ‘foobar’,
     enquanto a expressão regular ‘foo$’ corresponde apenas a ‘foo’.
     Mais interessante, pesquisar por ‘foo.$’ em ‘'foo1\nfoo2\n'’
     corresponde a ‘foo2’ normalmente, mas ‘foo1’ no modo *note
     MULTILINE: 2489.; procurando por um único ‘$’ em ‘'foo\n'’
     encontrará duas correspondências (vazias): uma logo antes da nova
     linha e uma no final da string.

‘*’

     Faz a ER resultante corresponder a 0 ou mais repetições da ER
     anterior, tantas repetições quantas forem possíveis.  ‘ab*’
     corresponderá a ‘a’, ‘ab’ ou ‘a’ seguido por uma quantidade
     qualquer de ‘b’s.

‘+’

     Faz com que a ER resultante corresponda a 1 ou mais repetições da
     ER anterior.  ‘ab+’ irá corresponder a ‘a’ seguido por qualquer
     número diferente de zero de ‘b’s; não corresponderá apenas a ‘a’.

‘?’

     Faz a ER resultante corresponder a 0 ou 1 repetição da ER anterior.
     ‘ab?’ irá corresponder a ‘a’ ou ‘ab’.

‘*?’, ‘+?’, ‘??’

     Os quantificadores ‘'*'’, ‘'+'’ e ‘'?'’ são todos 'gulosos'; eles
     correspondem ao máximo de texto possível.  Às vezes, esse
     comportamento não é desejado; se a ER ‘<.*>’ for correspondida com
     ‘'<a> b <c>'’, ela irá corresponder a toda a string, e não apenas
     ‘'<a>'’.  Adicionar ‘?’ após o quantificador faz com que ele
     execute a correspondência da maneira 'não gulosa' ou 'minimalista';
     tão 'poucos' caracteres quanto possível serão correspondidos.
     Usando a ER ‘<.*?>’ irá corresponder apenas ‘'<a>'’.

‘*+’, ‘++’, ‘?+’

     Como os quantificadores ‘'*'’, ‘'+'’ e ‘'?'’, aqueles em que ‘'+'’
     é anexado também correspondem tantas vezes quanto possível.  No
     entanto, ao contrário dos quantificadores realmente gulosos, eles
     não permitem retrocesso quando a expressão que o segue não
     corresponde.  Estes são conhecidos como quantificadores
     'possessivos'.  Por exemplo, ‘a*a’ corresponderá a ‘'aaaa'’ porque
     o ‘a*’ corresponderá a todos os 4 ‘'a'’s, mas, quando o final ‘'a'’
     for encontrado, a expressão é retrocedida para que no final o ‘a*’
     acabe correspondendo a 3 ‘'a'’s no total, e o quarto ‘'a'’ seja
     correspondido por o final ‘'a'’.  No entanto, quando ‘a*+a’ é usado
     para corresponder a ‘'aaaa'’, o ‘a*+’ corresponderá a todos os 4
     ‘'a'’, mas quando o ‘'a'’ final não encontrar mais caracteres para
     corresponder, a expressão não pode ser retrocedida e, portanto, não
     corresponderá.  ‘x*+’, ‘x++’ e ‘x?+’ são equivalentes a ‘(?>x*)’,
     ‘(?>x+)’ e ‘(?>x?)’ respectivamente.

     Adicionado na versão 3.11.

‘{m}’

     Especifica que exatamente 'm' cópias da ER anterior devem ser
     correspondidas; menos correspondências fazem com que toda a ER não
     seja correspondida.  Por exemplo, ‘a{6}’ irá corresponder
     exatamente a seis caracteres ‘'a'’, mas não a cinco.

‘{m,n}’

     Faz a ER resultante corresponder de 'm' a 'n' repetições da ER
     anterior, tentando corresponder ao máximo de repetições possível.
     Por exemplo, ‘a{3,5}’ irá corresponder de 3 a 5 caracteres ‘'a'’.
     A omissão de 'm' especifica um limite inferior de zero e a omissão
     de 'n' especifica um limite superior infinito.  Como exemplo,
     ‘a{4,}b’ irá corresponder a ‘'aaaab'’ ou mil caracteres ‘'a'’
     seguidos por um ‘'b'’, mas não ‘'aaab'’.  A vírgula não pode ser
     omitida ou o modificador será confundido com a forma descrita
     anteriormente.

‘{m,n}?’

     Faz a ER resultante corresponder de 'm' a 'n' repetições da ER
     anterior, tentando corresponder o 'mínimo' de repetições possível.
     Esta é a versão não gulosa do quantificador anterior.  Por exemplo,
     na string de 6 caracteres ‘'aaaaaa'’, ‘a{3,5}’ irá corresponder a 5
     caracteres ‘'a'’, enquanto ‘a{3,5}?’ corresponderá apenas a 3
     caracteres.

‘{m,n}+’

     Faz a ER resultante corresponder de 'm' a 'n' repetições da ER
     anterior, tentando corresponder o maior número possível de
     repetições 'sem' estabelecer nenhum ponto de retrocesso.  Esta é a
     versão possessiva do quantificador acima.  Por exemplo, na string
     de 6 caracteres ‘'aaaaaa'’, ‘a{3,5}+aa’ tenta corresponder 5
     caracteres ‘'a'’, então, requerer mais 2 ‘'a'’s, precisará de mais
     caracteres do que os disponíveis e, portanto, falhará, enquanto
     ‘a{3,5}aa’ corresponderá a ‘a{3,5}’ capturando 5, depois 4 ‘'a'’s
     por retrocesso e então os 2 ‘'a'’s finais são combinados com o ‘aa’
     final no padrão.  ‘x{m,n}+’ é equivalente a ‘(?>x{m,n})’.

     Adicionado na versão 3.11.

‘\’

     Ou anula o efeito de caracteres especiais (permitindo a você
     corresponder caracteres como ‘'*'’, ‘'?'’ e assim por diante), ou
     sinaliza uma sequência especial; sequências especiais são
     discutidas abaixo.

     Se você não estiver usando uma string bruta para expressar o
     padrão, lembre-se de que o Python também usa a contrabarra como uma
     sequência de escape em literais de string; se a sequência de escape
     não for reconhecida pelo analisador sintático do Python, a
     contrabarra e o caractere subsequente serão incluídos na string
     resultante.  No entanto, se Python reconhecer a sequência
     resultante, a contrabarra deve ser repetida duas vezes.  Isso é
     complicado e difícil de entender, portanto, é altamente
     recomendável que você use strings brutas para todas as expressões,
     exceto as mais simples.

‘[]’

     Usado para indicar um conjunto de caracteres.  Em um conjunto:

        * Caracteres podem ser listados individualmente, por exemplo,
          ‘[amk]’ vai corresponder a ‘'a'’, ‘'m'’ ou ‘'k'’.

        * Intervalos de caracteres podem ser indicados fornecendo dois
          caracteres e separando-os por ‘'-'’, por exemplo ‘[a-z]’ irá
          corresponder a qualquer letra ASCII minúscula, ‘[0-5][0-9]’
          irá corresponder a todos os números de dois dígitos de ‘00’ a
          ‘59’, e ‘[0-9A-Fa-f]’ irá corresponder a qualquer dígito
          hexadecimal.  Se ‘-’ for precedido de uma contrabarra (por
          exemplo, ‘[a\-z]’) ou se for colocado como o primeiro ou
          último caractere (por exemplo, ‘[-a]’ ou ‘[a-]’), ele
          corresponderá a um literal ‘'-'’.

        * Os caracteres especiais, exceto contrabarra, perdem seu
          significado especial dentro dos conjuntos.  Por exemplo,
          ‘[(+*)]’ vai corresponder a qualquer um dos caracteres
          literais ‘'('’, ‘'+'’, ‘'*'’ ou ‘')'’.

        * A contrabarra escapa caracteres que têm significado especial
          em um conjunto, como ‘'-'’, ‘']'’, ‘'^'’ e ‘'\\'’, ou sinaliza
          uma sequência especial que representa um único caractere, como
          ‘\xa0’ ou ‘\n’, ou uma classe de caracteres como ‘\w’ ou ‘\S’
          (definida abaixo).  Observe que ‘\b’ representa um único
          caractere de “backspace”, não um limite de palavra como fora
          de um conjunto, e escapes numéricos como ‘\1’ são sempre
          escapes octais, não referências de grupo.  Sequências
          especiais que não correspondem a um único caractere, como ‘\A’
          e ‘\Z’, não são permitidas.

        * Os caracteres que não estão dentro de um intervalo podem ser
          correspondidos 'complementando' o conjunto.  Se o primeiro
          caractere do conjunto for ‘'^'’, todos os caracteres que 'não'
          estiverem no conjunto serão correspondidos.  Por exemplo,
          ‘[^5]’ irá corresponder a qualquer caractere exceto ‘'5'’, e
          ‘[^^]’ irá corresponder a qualquer caractere exceto ‘'^'’.
          ‘^’ não tem nenhum significado especial se não for o primeiro
          caractere do conjunto.

        * Para corresponder a um ‘']'’ literal dentro de um conjunto,
          preceda-o com uma contrabarra ou coloque-o no início do
          conjunto.  Por exemplo, ‘[()[\]{}]’ e ‘[]()[{}]’ vai
          corresponder ao colchete à direita, assim como o colchete,
          chave ou parêntese à esquerda.

        * Suporte para conjuntos aninhados e operações de conjunto como
          no Padrão Técnico do Unicode #18(1) podem ser adicionados no
          futuro.  Isso mudaria a sintaxe, então para facilitar essa
          mudança uma *note FutureWarning: 415. será levantada em casos
          ambíguos por enquanto.  Isso inclui conjuntos que começam com
          um ‘'['’ literal ou contendo sequências de caracteres literais
          ‘'--'’, ‘'&&'’, ‘'~~'’ e ‘'||'’.  Para evitar um aviso, use
          uma contrabarra antes deles.

     Alterado na versão 3.7: *note FutureWarning: 415. é levantada se um
     conjunto de caracteres contém construções que mudarão
     semanticamente no futuro.

‘|’

     ‘A|B’, onde 'A' e 'B' podem ser ERs arbitrárias, cria uma expressão
     regular que corresponderá a 'A' ou 'B'. Um número arbitrário de ERs
     pode ser separado por ‘'|'’ desta forma.  Isso também pode ser
     usado dentro de grupos (veja abaixo).  Conforme a string alvo é
     percorrida, ERs separadas por ‘'|'’ são avaliadas da esquerda para
     a direita.  Quando um padrão corresponde completamente, essa
     ramificação é aceita.  Isso significa que, assim que 'A'
     corresponder, 'B' não será avaliado posteriormente, mesmo que
     produza uma correspondência geral mais longa.  Em outras palavras,
     o operador ‘'|'’ nunca é guloso.  Para corresponder a um ‘'|'’
     literal, use ‘\|’, ou coloque-o dentro de uma classe de caractere,
     como em ‘[|]’.

‘(...)’

     Corresponde a qualquer expressão regular que esteja entre
     parênteses e indica o início e o fim de um grupo; o conteúdo de um
     grupo pode ser recuperado após uma correspondência ter sido
     realizada e pode ser correspondido posteriormente na string com a
     sequência especial ‘\número’, descrita abaixo.  Para corresponder
     aos literais ‘'('’ ou ‘')'’, use ‘\(’ ou ‘\)’, ou coloque-os dentro
     de uma classe de caracteres: ‘[(]’, ‘[)]’.

‘(?...)’

     Esta é uma notação de extensão (um ‘'?'’ após um ‘'('’ não é
     significativo de outra forma).  O primeiro caractere após o ‘'?'’
     determina qual o significado e sintaxe posterior da construção.  As
     extensões normalmente não criam um novo grupo; ‘(?P<nome>...)’ é a
     única exceção a esta regra.  A seguir estão as extensões atualmente
     implementadas.

‘(?aiLmsux)’

     (Uma ou mais letras do conjunto ‘'a'’, ‘'i'’, ‘'L'’, ‘'m'’, ‘'s'’,
     ‘'u'’, ‘'x'’.)  O grupo corresponde à string vazia; as letras
     definem os sinalizadores correspondentes para toda a expressão
     regular:

        * *note re.A: 248a. (correspondência somente ASCII)

        * *note re.I: 248b. (ignorar maiúsculas/minúsculas)

        * *note re.L: 248c. (dependente da localidade)

        * *note re.M: 248d. (multi-linha)

        * *note re.S: 248e. (ponto corresponde a tudo)

        * *note re.U: 248f. (correspondência Unicode)

        * *note re.X: 2490. (verboso)

     (Os sinalizadores são descritos em *note Conteúdo do módulo: 2491.)
     Isso é útil se você deseja incluir os sinalizadores como parte da
     expressão regular, em vez de passar um argumento 'flag' para a
     função *note re.compile(): bee.  Os sinalizadores devem ser usados
     primeiro na string de expressão.

     Alterado na versão 3.11: Esta construção só pode ser usada no
     início da expressão.

‘(?:...)’

     Uma versão de não-captura de parênteses regulares.  Corresponde a
     qualquer expressão regular que esteja entre parênteses, mas a
     substring correspondida pelo grupo 'não pode' ser recuperada após
     realizar uma correspondência ou referenciada posteriormente no
     padrão.

‘(?aiLmsux-imsx:...)’

     (Zero ou mais letras do conjunto ‘'a'’, ‘'i'’, ‘'L'’, ‘'m'’, ‘'s'’,
     ‘'u'’, ‘'x'’, opcionalmente seguidas por ‘'-'’ seguido por uma ou
     mais letras do conjunto ‘'i'’, ‘'m'’, ‘'s'’, ‘'x'’.)  O conjunto de
     letras define ou remove os sinalizadores correspondentes para a
     parte da expressão:

        * *note re.A: 248a. (correspondência somente ASCII)

        * *note re.I: 248b. (ignorar maiúsculas/minúsculas)

        * *note re.L: 248c. (dependente da localidade)

        * *note re.M: 248d. (multi-linha)

        * *note re.S: 248e. (ponto corresponde a tudo)

        * *note re.U: 248f. (correspondência Unicode)

        * *note re.X: 2490. (verboso)

     (Os sinalizadores são descritos em *note Conteúdo do módulo: 2491.)

     As letras ‘'a'’, ‘'L'’ e ‘'u'’ são mutuamente exclusivas quando
     usadas como sinalizadores em linha, portanto, não podem ser
     combinadas ou seguir ‘'-'’.  Em vez disso, quando um deles aparece
     em um grupo embutido, ele substitui o modo de correspondência no
     grupo anexo.  Em padrões Unicode ‘(?a:...)’ muda para
     correspondência somente ASCII, e ‘(?u:...)’ muda para
     correspondência Unicode (padrão).  Em padrões de bytes ‘(?L:...)’
     muda para a correspondência dependente da localidade, e ‘(?a:...)’
     muda para correspondência apenas ASCII (padrão).  Esta substituição
     só tem efeito para o grupo estreito em linha e o modo de
     correspondência original é restaurado fora do grupo.

     Adicionado na versão 3.6.

     Alterado na versão 3.7: As letras ‘'a'’, ‘'L'’ e ‘'u'’ também podem
     ser usadas em um grupo.

‘(?>...)’

     Tenta corresponder ‘...’ como se fosse uma expressão regular
     separada e, se for bem-sucedida, continua correspondendo ao
     restante do padrão que a segue.  Se o padrão subsequente não
     corresponder, a pilha só pode ser desenrolada até um ponto 'antes'
     do ‘(?>...)’ porque, uma vez encerrada, a expressão, conhecida como
     'grupo atômico', jogou fora todos os pontos de pilha dentro de si.
     Assim, ‘(?>.*).’ nunca corresponderia a nada porque primeiro o ‘.*’
     corresponderia a todos os caracteres possíveis, então, não tendo
     mais nada para corresponder, o ‘.’ final falharia em corresponder.
     Como não há pontos de pilha salvos no Grupo Atômico e não há ponto
     de pilha antes dele, a expressão inteira não corresponderia.

     Adicionado na versão 3.11.

‘(?P<nome>...)’

     Semelhante aos parênteses regulares, mas a substring correspondida
     pelo grupo é acessível por meio do nome de grupo simbólico 'nome'.
     Os nomes de grupo devem ser identificadores Python válidos e em
     padrões *note bytes: 1c2. eles só podem conter bytes no intervalo
     ASCII. Cada nome de grupo deve ser definido apenas uma vez em uma
     expressão regular.  Um grupo simbólico também é um grupo numerado,
     como se o grupo não tivesse um nome.

     Grupos nomeados podem ser referenciados em três contextos.  Se o
     padrão for ‘(?P<citação>['"]).*?(?P=citação)’ (ou seja,
     corresponder a uma string entre aspas simples ou duplas):

     Contexto de referência ao grupo “citação”   Formas de referenciá-lo
                                                 
     -----------------------------------------------------------------------------------
                                                 
     no mesmo padrão                                * ‘(?P=citação)’ (como mostrado)
                                                 
                                                    * ‘\1’
                                                 
                                                 
     ao processar a correspondência do objeto       * ‘m.group('citação')’
     'm'                                         
                                                    * ‘m.end('citação')’ (etc.)
                                                 
                                                 
     em uma string passada para o argumento         * ‘\g<citação>’
     'repl' de ‘re.sub()’                        
                                                    * ‘\g<1>’
                                                 
                                                    * ‘\1’
                                                 

     Alterado na versão 3.12: Nos padrões *note bytes: 1c2, o grupo
     'nome' só pode conter bytes no intervalo ASCII
     (‘b'\x00'’-‘b'\x7f'’).

‘(?P=nome)’

     Uma referência anterior a um grupo nomeado; corresponde a qualquer
     texto que corresponda ao grupo anterior denominado 'nome'.

‘(?#...)’

     Um comentário; o conteúdo dos parênteses é simplesmente ignorado.

‘(?=...)’

     Corresponde se ‘...’ corresponder a próxima, mas não consome nada
     da string.  Isso é chamado de 'asserção preditiva'.  Por exemplo,
     ‘Isaac (?=Asimov)’ corresponderá a ‘'Isaac '’ apenas se for seguido
     por ‘'Asimov'’.

‘(?!...)’

     Corresponde se ‘...’ não corresponder a próxima.  Isso é uma
     'asserção preditiva negativa'.  Por exemplo, ‘Isaac (?!Asimov)’
     corresponderá a ‘'Isaac '’ apenas se 'não' for seguido por
     ‘'Asimov'’.

‘(?<=...)’

     Corresponde se a posição atual na string for precedida por uma
     correspondência para ‘...’ que termina na posição atual.  Isso é
     chamado de 'asserção retroativa positiva'.  ‘(?<=abc)def’ irá
     encontrar uma correspondência em ‘'abcdef'’, uma vez que a
     expressão regular vai voltar 3 caracteres e verificar se o padrão
     contido corresponde.  O padrão contido deve corresponder apenas a
     strings de algum comprimento fixo, o que significa que ‘abc’ ou
     ‘a|b’ são permitidos, mas ‘a*’ e ‘a{3,4}’ não são.  Observe que os
     padrões que começam com asserções retroativas positivas não
     corresponderão ao início da string que está sendo pesquisada; você
     provavelmente desejará usar a função *note search(): 126d. em vez
     da função *note match(): 126e.:

          >>> import re
          >>> m = re.search('(?<=abc)def', 'abcdef')
          >>> m.group(0)
          'def'

     Este exemplo procura por uma palavra logo após um hífen:

          >>> m = re.search(r'(?<=-)\w+', 'spam-egg')
          >>> m.group(0)
          'egg'

     Alterado na versão 3.5: Adicionado suporte para referências de
     grupo de comprimento fixo.

‘(?<!...)’

     Corresponde se a posição atual na string não for precedida por uma
     correspondência para ‘...’.  Isso é chamado de 'asserção retroativa
     negativa'.  Semelhante às asserções retroativas positivas, o padrão
     contido deve corresponder apenas a strings de algum comprimento
     fixo.  Os padrões que começam com asserções retroativas negativas
     podem corresponder ao início da string que está sendo pesquisada.

‘(?(id/nome)padrão-sim|padrão-não)’

     Tentará corresponder com ‘padrão-sim’ se o grupo com determinado
     'id' ou 'nome' existir, e com ‘padrão-não’ se não existir.
     ‘padrão-não’ é opcional e pode ser omitido.  Por exemplo,
     ‘(<)?(\w+@\w+(?:\.\w+)+)(?(1)>|$)’ é um padrão ruim de
     correspondência de e-mail, que corresponderá com
     ‘'<usuario@host.com>'’ bem como ‘'usuario@host.com'’, mas não com
     ‘'<usuario@host.com>'’ nem ‘'usuario@host.com>'’.

     Alterado na versão 3.12: O grupo 'id' só podem conter dígitos
     ASCII.  Nos padrões *note bytes: 1c2, o grupo 'nome' só pode conter
     bytes no intervalo ASCII (‘b'\x00'’-‘b'\x7f'’).

As sequências especiais consistem em ‘'\'’ e um caractere da lista
abaixo.  Se o caractere comum não for um dígito ASCII ou uma letra
ASCII, a ER resultante corresponderá ao segundo caractere.  Por exemplo,
‘\$’ corresponde ao caractere ‘'$'’.

‘\número’

     Corresponde ao conteúdo do grupo de mesmo número.  Os grupos são
     numerados a partir de 1.  Por exemplo, ‘(.+) \1’ corresponde a ‘'de
     de'’ ou ‘'55 55'’, mas não ‘'dede'’ (note o espaço após o grupo).
     Esta sequência especial só pode ser usada para corresponder a um
     dos primeiros 99 grupos.  Se o primeiro dígito de 'número' for 0,
     ou 'número' tiver 3 dígitos octais de comprimento, ele não será
     interpretado como uma correspondência de grupo, mas como o
     caractere com 'número' de valor octal.  Dentro de ‘'['’ e ‘']'’ de
     uma classe de caracteres, todos os escapes numéricos são tratados
     como caracteres.

‘\A’

     Corresponde apenas ao início da string.

‘\b’

     Corresponde à string vazia, mas apenas no início ou no final de uma
     palavra.  Uma palavra é definida como uma sequência de caracteres
     de palavras.  Observe que, formalmente, ‘\b’ é definido como a
     fronteira entre um caractere ‘\w’ e um ‘\W’ (ou vice-versa), ou
     entre ‘\w’ e o início/fim da string.  Isso significa que
     ‘r'\bat\b'’ corresponde a ‘'at'’, ‘'at.'’, ‘'(at)'’, ‘'as at ay'’,
     mas não a ‘'attempt'’ ou ‘'atlas'’.

     Os caracteres de palavras predefinidos em padrões Unicode (str) são
     alfanuméricos Unicode e o sublinhado, mas isso pode ser alterado
     usando o sinalizador *note ASCII: 62c.  Os limites das palavras são
     determinados pela localidade atual se o sinalizador *note LOCALE:
     b82. for usado.

          Nota: Dentro de um intervalo de caracteres, ‘\b’ representa o
          caractere backspace, para compatibilidade com strings literais
          do Python.

‘\B’

     Corresponde à string vazia, mas apenas quando 'não' estiver no
     início ou no final de uma palavra.  Isso significa que ‘r'at\B'’
     corresponde a ‘'athens'’, ‘'atom'’, ‘'attorney'’, mas não ‘'at'’,
     ‘'at.'’ ou ‘'at!'’.  ‘\B’ é exatamente o oposto de ‘\b’, então
     caracteres de palavras em padrões Unicode são alfanuméricos Unicode
     ou o sublinhado, embora isso possa ser alterado usando o
     sinalizador *note ASCII: 62c.  Os limites das palavras são
     determinados pela localidade atual se o sinalizador *note LOCALE:
     b82. for usado.

          Nota: Note que ‘\B’ não corresponde uma string vazia, o que
          difere das implementações de ER em outros linguagens de
          programação, como Perl.  Este comportamento é mantido por
          razões de compatibilidade.

‘\d’

     Para padrões Unicode (str):

          Corresponde a qualquer dígito decimal Unicode (ou seja,
          qualquer caractere na categoria de caractere Unicode [Nd](2)).
          Isso inclui ‘[0-9]’, e também muitos outros caracteres de
          dígitos.

          Se o sinalizador *note ASCII: 62c. for usado, apenas ‘[0-9]’
          será correspondido.

     Para padrões de 8 bits (isto é, bytes):

          Corresponde a qualquer dígito decimal no conjunto de
          caracteres ASCII; isso é equivalente a ‘[0-9]’.

‘\D’

     Corresponde a qualquer caractere que não seja um dígito decimal.
     Isso é o oposto de ‘\d’.

     Se o sinalizador *note ASCII: 62c. for usado, apenas ‘[^0-9]’ será
     correspondido.

‘\s’

     Para padrões Unicode (str):

          Corresponde a caracteres de espaço em branco Unicode (como
          definido por *note str.isspace(): 235f.) .  Isso inclui ‘[
          \t\n\r\f\v]’, e também muitos outros caracteres, como, por
          exemplo, os espaços não separáveis exigidos pelas regras de
          tipografia em muitos idiomas.

          Se o sinalizador *note ASCII: 62c. for usado, apenas ‘[
          \t\n\r\f\v]’ é correspondido.

     Para padrões de 8 bits (isto é, bytes):

          Corresponde a caracteres considerados espaços em branco no
          conjunto de caracteres ASCII; isso é equivalente a ‘[
          \t\n\r\f\v]’.

‘\S’

     Corresponde a qualquer caractere que não seja um espaço em branco.
     Isso é o oposto de ‘\s’.

     Se o sinalizador *note ASCII: 62c. for usado, apenas ‘[^
     \t\n\r\f\v]’ é correspondido.

‘\w’

     Para padrões Unicode (str):

          Corresponde a caracteres de palavras Unicode; isso inclui
          todos os caracteres alfanuméricos Unicode (conforme definido
          por *note str.isalnum(): 2357.), bem como o sublinhado (‘_’).

          Se o sinalizador *note ASCII: 62c. for usado, apenas
          ‘[a-zA-Z0-9_]’ será correspondido.

     Para padrões de 8 bits (isto é, bytes):

          Corresponde a caracteres considerados alfanuméricos no
          conjunto de caracteres ASCII; isso é equivalente a
          ‘[a-zA-Z0-9_]’.  Se o sinalizador *note LOCALE: b82. for
          usado, corresponde aos caracteres considerados alfanuméricos
          na localidade atual e o sublinhado.

‘\W’

     Corresponde a qualquer caractere que não seja um caractere de
     palavra.  Isso é o oposto de ‘\w’.  Por padrão, corresponde a
     caracteres que não são sublinhados (‘_’) para os quais *note
     str.isalnum(): 2357. retorna ‘False’.

     Se o sinalizador *note ASCII: 62c. for usado, apenas
     ‘[^a-zA-Z0-9_]’ será correspondido.

     Se o sinalizador *note LOCALE: b82. for usado, corresponde a
     caracteres que não são alfanuméricos na localidade atual nem ao
     sublinhado.

‘\Z’

     Corresponde apenas ao final da string.

A maioria das *note sequências de escape: 45a. com suporte das literais
de string Python também são aceitos pelo analisador sintático de
expressão regular:

     \a      \b      \f      \n
     \N      \r      \t      \u
     \U      \v      \x      \\

(Observe que ‘\b’ é usado para representar limites de palavras e
significa fazer “backspace” apenas dentro das classes de caracteres.)

As sequências de escape ‘'\u'’, ‘'\U'’ e ‘'\N'’ são reconhecidas apenas
em padrões Unicode (str).  Em padrões de bytes, eles são erros.  Escapes
desconhecidos de letras ASCII são reservados para uso futuro e tratados
como erros.

Os escapes octais são incluídos em um formulário limitado.  Se o
primeiro dígito for 0, ou se houver três dígitos octais, é considerado
um escape octal.  Caso contrário, é uma referência de grupo.  Quanto aos
literais de string, os escapes octais têm sempre no máximo três dígitos.

Alterado na versão 3.3: As sequências de escape ‘'\u'’ e ‘'\U'’ foram
adicionadas.

Alterado na versão 3.6: Escapes desconhecidos consistindo em ‘'\'’ e uma
letra ASCII agora são erros.

Alterado na versão 3.8: A sequência de escape ‘'\N{NAME}'’ foi
adicionada.  Como em literais de string, ela se expande para o caractere
Unicode nomeado (por exemplo, ‘'\N{EM DASH}'’).

   ---------- Footnotes ----------

   (1) https://unicode.org/reports/tr18/

   (2) https://www.unicode.org/versions/Unicode15.0.0/ch04.pdf#G134153


File: python.info,  Node: Conteúdo do módulo,  Next: Objetos expressão regular,  Prev: Sintaxe de expressão regular,  Up: re — Operações com expressões regulares

5.6.2.2 Conteúdo do módulo
..........................

O módulo define várias funções, constantes e uma exceção.  Algumas das
funções são versões simplificadas dos métodos completos para expressões
regulares compiladas.  A maioria das aplicações não triviais sempre usa
a forma compilada.

* Menu:

* Sinalizadores::
* Funções: Funções<2>.
* Exceções: Exceções<3>.


File: python.info,  Node: Sinalizadores,  Next: Funções<2>,  Up: Conteúdo do módulo

5.6.2.3 Sinalizadores
.....................

Alterado na versão 3.6: Constantes de sinalizadores agora são instâncias
de *note RegexFlag: 62d, que é uma subclasse de *note enum.IntFlag: cbb.

 -- Classe: re.RegexFlag

     Uma subclasse de *note enum.IntFlag: cbb. contendo as opções de
     expressão regular listadas abaixo.

     Adicionado na versão 3.11: - added to ‘__all__’

 -- Dado: re.A
 -- Dado: re.ASCII

     Faz com que ‘\w’, ‘\W’, ‘\b’, ‘\B’, ‘\d’, ‘\D’, ‘\s’ e ‘\S’
     executem a correspondência somente ASCII em vez da correspondência
     Unicode completa.  Isso é significativo apenas para padrões Unicode
     (str) e é ignorado para padrões de bytes.

     Corresponde ao sinalizador em linha ‘(?a)’.

          Nota: O sinalizador *note U: 248f. ainda existe para
          compatibilidade com versões anteriores, mas é redundante no
          Python 3, pois as correspondências são feitas em Unicode por
          padrão para padrões de ‘str’ e correspondência Unicode não é
          permitida para padrões de “bytes”.  *note UNICODE: b83. e o
          sinalizador em linha ‘(?u)’ são igualmente redundantes.

 -- Dado: re.DEBUG

     Exibe informações de depuração sobre a expressão compilada.

     Nenhum sinalizador em linha correspondente.

 -- Dado: re.I
 -- Dado: re.IGNORECASE

     Faz uma correspondência que não diferencia maiúsculas de
     minúsculas; expressões como ‘[A-Z]’ também corresponderão a letras
     minúsculas.  A correspondência Unicode completa (como ‘Ü’
     correspondendo a ‘ü’) também funciona, a menos que o sinalizador
     *note ASCII: 62c. seja usado para desabilitar correspondências não
     ASCII. A localidade atual não muda o efeito deste sinalizador a
     menos que o sinalizador *note LOCALE: b82. também seja usado.

     Corresponde ao sinalizador em linha ‘(?i)’.

     Observe que quando os padrões Unicode ‘[a-z]’ ou ‘[A-Z]’ são usados
     em combinação com o sinalizador *note IGNORECASE: 181a, eles
     corresponderão às 52 letras ASCII e 4 letras não-ASCII adicionais:
     ‘İ’ (U+0130, letra latina I maiúscula com ponto em cima), ‘ı’
     (U+0131, letra latina i minúscula sem ponto), ‘ſ’ (U+017F, letra
     latina s minúscula longa) e ‘K’ (U+212A, sinal de Kelvin).  Se o
     sinalizador *note ASCII: 62c. for usado, apenas as letras ‘a’ a ‘z’
     e ‘A’ a ‘Z’ serão correspondidas.

 -- Dado: re.L
 -- Dado: re.LOCALE

     Faz com que ‘\w’, ‘\W’, ‘\b’, ‘\B’ e a correspondência sem
     diferenciação de maiúsculas e minúsculas dependam da localidade
     atual.  Esse sinalizador só pode ser usado com padrões de bytes.

     Corresponde ao sinalizador em linha ‘(?L)’.

          Aviso: Este sinalizador é desencorajado; considere usar
          correspondência Unicode em vez disso.  O mecanismo de
          localidade é muito pouco confiável, pois só manipula uma
          “cultura” por vez e só funciona com localidades de 8 bits.  A
          correspondência Unicode é habilitada por padrão para padrões
          Unicode (str) e é capaz de manipular diferentes localidades e
          idiomas.

     Alterado na versão 3.6: *note LOCALE: b82. pode ser usado apenas
     com padrões de bytes e não é compatível com *note ASCII: 62c.

     Alterado na versão 3.7: Objetos de expressão regular compilados com
     o sinalizador *note LOCALE: b82. não dependem mais da localidade em
     tempo de compilação.  Apenas a localidade no momento da
     correspondência afeta o resultado da correspondência.

 -- Dado: re.M
 -- Dado: re.MULTILINE

     Quando especificado, o caractere padrão ‘'^'’ corresponde ao início
     da string e ao início de cada linha (imediatamente após cada nova
     linha); e o caractere padrão ‘'$'’ corresponde ao final da string e
     ao final de cada linha (imediatamente antes de cada nova linha).
     Por padrão, ‘'^'’ corresponde apenas no início da string, e ‘'$'’
     apenas no final da string e imediatamente antes da nova linha (se
     houver) no final da string.

     Corresponde ao sinalizador em linha ‘(?m)’.

 -- Dado: re.NOFLAG

     Indica que nenhum sinalizador está sendo aplicado, o valor é ‘0’.
     Este sinalizador pode ser usado como um valor padrão para um
     argumento nomeado de função ou como um valor base que será
     condicionalmente OU com outros sinalizadores.  Exemplo de uso como
     valor padrão:

          def minha_funcao(texto, sinalizador=re.NOFLAG):
              return re.match(texto, sinalizador)

     Adicionado na versão 3.11.

 -- Dado: re.S
 -- Dado: re.DOTALL

     Faz o caractere especial ‘'.'’ corresponder com qualquer caractere
     que seja, incluindo uma nova linha; sem este sinalizador, ‘'.'’ irá
     corresponder a qualquer coisa, 'exceto' uma nova linha.

     Corresponde ao sinalizador em linha ‘(?s)’.

 -- Dado: re.U
 -- Dado: re.UNICODE

     Em Python 3, os caracteres Unicode são correspondidos por padrão
     para padrões ‘str’.  Esse sinalizador é, portanto, redundante e
     'sem efeito', sendo mantido apenas para compatibilidade com versões
     anteriores.

     Veja *note ASCII: 62c. para restringir a correspondência apenas a
     caracteres ASCII.

 -- Dado: re.X
 -- Dado: re.VERBOSE

     Este sinalizador permite que você escreva expressões regulares que
     parecem mais agradáveis e são mais legíveis, permitindo que você
     separe visualmente seções lógicas do padrão e adicione comentários.
     O espaço em branco dentro do padrão é ignorado, exceto quando em
     uma classe de caractere, ou quando precedido por uma contrabarra
     sem escape, ou dentro de tokens como ‘*?’, ‘(?:’ ou ‘(?P<...>’.
     Por exemplo, ‘(? :’ e ‘* ?’ não são permitidos.  Quando uma linha
     contém um ‘#’ que não está em uma classe de caractere e não é
     precedido por uma contrabarra sem escape, todos os caracteres a
     partir do ‘#’ mais à esquerda até o final da linha são ignorados.

     Isso significa que os dois seguintes objetos expressão regular que
     correspondem a um número decimal são funcionalmente iguais:

          a = re.compile(r"""\d +  # a parte inteira
                             \.    # o ponto decimal
                             \d *  # alguns digitos fracionários""", re.X)
          b = re.compile(r"\d+\.\d*")

     Corresponde ao sinalizador em linha ‘(?x)’.


File: python.info,  Node: Funções<2>,  Next: Exceções<3>,  Prev: Sinalizadores,  Up: Conteúdo do módulo

5.6.2.4 Funções
...............

 -- Função: re.compile (pattern, flags=0)

     Compila um padrão de expressão regular em um *note objeto expressão
     regular: fbb, que pode ser usado para correspondência usando seu
     *note match(): 2499, *note search(): 249a. e outros métodos,
     descritos abaixo.

     O comportamento da expressão pode ser modificado especificando um
     valor para o parâmetro 'flags'.  Os valores podem ser qualquer um
     dos *note sinalizadores: 2494, combinados usando OU bit a bit (o
     operador ‘|’).

     A sequência

          prog = re.compile(pattern)
          result = prog.match(string)

     equivale a

          result = re.match(pattern, string)

     mas usar *note re.compile(): bee. e salvar o objeto expressão
     regular resultante para reutilização é mais eficiente quando a
     expressão será usada várias vezes em um único programa.

          Nota: As versões compiladas dos padrões mais recentes passados
          para *note re.compile(): bee. e as funções de correspondência
          em nível de módulo são armazenadas em cache, de modo que
          programas que usam apenas algumas expressões regulares por vez
          não precisam se preocupar em compilar expressões regulares.

 -- Função: re.search (pattern, string, flags=0)

     Percorre a 'string' procurando o primeiro local onde o padrão
     'pattern' de expressão regular produz uma correspondência e retorna
     um *note Match: ce8. correspondente.  Retorna ‘None’ se nenhuma
     posição na string corresponder ao padrão; observe que isso é
     diferente de encontrar uma correspondência de comprimento zero em
     algum ponto da string.

     O comportamento da expressão pode ser modificado especificando um
     valor para o parâmetro 'flags'.  Os valores podem ser qualquer um
     dos *note sinalizadores: 2494, combinados usando OU bit a bit (o
     operador ‘|’).

 -- Função: re.match (pattern, string, flags=0)

     Se zero ou mais caracteres no início da 'string' corresponderem ao
     padrão 'pattern' da expressão regular, retorna um *note Match: ce8.
     correspondente.  Retorna ‘None’ se a string não corresponder ao
     padrão; observe que isso é diferente de uma correspondência de
     comprimento zero.

     Observe que mesmo no modo *note MULTILINE: 2489, *note re.match():
     126e. irá corresponder apenas no início da string e não no início
     de cada linha.

     Se você quiser localizar uma correspondência em qualquer lugar em
     'string', use *note search(): 126d. (veja também *note search() vs.
     match(): 249b.).

     O comportamento da expressão pode ser modificado especificando um
     valor para o parâmetro 'flags'.  Os valores podem ser qualquer um
     dos *note sinalizadores: 2494, combinados usando OU bit a bit (o
     operador ‘|’).

 -- Função: re.fullmatch (pattern, string, flags=0)

     Se toda a 'string' corresponder ao padrão 'pattern' da expressão
     regular, retorna um *note Match: ce8. correspondente.  Retorna
     ‘None’ se a string não corresponder ao padrão; observe que isso é
     diferente de uma correspondência de comprimento zero.

     O comportamento da expressão pode ser modificado especificando um
     valor para o parâmetro 'flags'.  Os valores podem ser qualquer um
     dos *note sinalizadores: 2494, combinados usando OU bit a bit (o
     operador ‘|’).

     Adicionado na versão 3.4.

 -- Função: re.split (pattern, string, maxsplit=0, flags=0)

     Divide a 'string' pelas ocorrências do padrão 'pattern'.  Se
     parênteses de captura forem usados em 'pattern', o texto de todos
     os grupos no padrão também será retornado como parte da lista
     resultante.  Se 'maxsplit' for diferente de zero, no máximo
     'maxsplit' divisões ocorrerão e o restante da string será retornado
     como o elemento final da lista.

          >>> re.split(r'\W+', 'Palavras, palavras, palavras.')
          ['Palavras', 'palavras', 'palavras', '']
          >>> re.split(r'(\W+)', 'Palavras, palavras, palavras.')
          ['Palavras', ', ', 'palavras', ', ', 'palavras', '.', '']
          >>> re.split(r'\W+', 'Palavras, palavras, palavras.', maxsplit=1)
          ['Palavras', 'palavras, palavras.']
          >>> re.split('[a-f]+', '0a3B9', flags=re.IGNORECASE)
          ['0', '3', '9']

     Se houver grupos de captura no separador e ele corresponder ao
     início da string, o resultado começará com uma string vazia.  O
     mesmo vale para o final da string:

          >>> re.split(r'(\W+)', '...palavras, palavras...')
          ['', '...', 'palavras', ', ', 'palavras', '...', '']

     Dessa forma, os componentes do separador são sempre encontrados nos
     mesmos índices relativos na lista de resultados.

     Correspondências vazias adjacentes não são possíveis, mas uma
     correspondência vazia pode ocorrer imediatamente após uma
     correspondência não-vazia.

          >>> re.split(r'\b', 'Palavras, palavras, palavras.')
          ['', 'Palavras', ', ', 'palavras', ', ', 'palavras', '.']
          >>> re.split(r'\W*', '...palavras...')
          ['', '', 'p', 'a', 'l', 'a', 'v', 'r', 'a', 's', '', '']
          >>> re.split(r'(\W*)', '...palavras...')
          ['', '...', '', '', 'p', '', 'a', '', 'l', '', 'a', '', 'v', '', 'r', '', 'a', '', 's', '...', '', '', '']

     O comportamento da expressão pode ser modificado especificando um
     valor para o parâmetro 'flags'.  Os valores podem ser qualquer um
     dos *note sinalizadores: 2494, combinados usando OU bit a bit (o
     operador ‘|’).

     Alterado na versão 3.1: Adicionado o argumento de sinalizadores
     opcionais.

     Alterado na versão 3.7: Adicionado suporte de divisão em um padrão
     que pode corresponder a uma string vazia.

     Descontinuado desde a versão 3.13: Passar 'maxsplit' e 'flags' como
     argumentos posicionais foi descontinuado.  Nas versões futuras do
     Python eles serão *note parâmetros somente-nomeados: 2a5.

 -- Função: re.findall (pattern, string, flags=0)

     Retorna todas as correspondências não sobrepostas do padrão
     'pattern' em 'string', como uma lista de strings ou tuplas.  A
     'string' é verificada da esquerda para a direita e as
     correspondências são retornadas na ordem encontrada.
     Correspondências vazias são incluídas no resultado.

     O resultado depende do número de grupos de captura no padrão.  Se
     não houver grupos, retorna uma lista de strings que correspondem a
     todo o padrão.  Se houver exatamente um grupo, retorna uma lista de
     strings correspondentes a esse grupo.  Se vários grupos estiverem
     presentes, retorna uma lista de tuplas de strings correspondentes
     aos grupos.  Grupos de não-captura não afetam a forma do resultado.

          >>> re.findall(r'\bf[a-z]*', 'which foot or hand fell fastest')
          ['foot', 'fell', 'fastest']
          >>> re.findall(r'(\w+)=(\d+)', 'set width=20 and height=10')
          [('width', '20'), ('height', '10')]

     O comportamento da expressão pode ser modificado especificando um
     valor para o parâmetro 'flags'.  Os valores podem ser qualquer um
     dos *note sinalizadores: 2494, combinados usando OU bit a bit (o
     operador ‘|’).

     Alterado na versão 3.7: Correspondências não vazias agora podem
     começar logo após uma correspondência vazia anterior.

 -- Função: re.finditer (pattern, string, flags=0)

     Retorna um *note iterador: 1ac. produzindo objetos *note Match:
     ce8. sobre todas as correspondências não sobrepostas para o padrão
     'pattern' em 'string'.  A 'string' é percorrida da esquerda para a
     direita e as correspondências são retornadas na ordem encontrada.
     Correspondências vazias são incluídas no resultado.

     O comportamento da expressão pode ser modificado especificando um
     valor para o parâmetro 'flags'.  Os valores podem ser qualquer um
     dos *note sinalizadores: 2494, combinados usando OU bit a bit (o
     operador ‘|’).

     Alterado na versão 3.7: Correspondências não vazias agora podem
     começar logo após uma correspondência vazia anterior.

 -- Função: re.sub (pattern, repl, string, count=0, flags=0)

     Retorna a string obtida substituindo as ocorrências não sobrepostas
     da extremidade esquerda do padrão 'pattern' na 'string' por 'repl'.
     Se o padrão não for encontrado, 'string' será retornado inalterado.
     'repl' pode ser uma string ou uma função; se for uma string,
     qualquer escape de contrabarra será processado.  Ou seja, ‘\n’ é
     convertido em um único caractere de nova linha, ‘\r’ é convertido
     em um retorno de carro e assim por diante.  Escapes desconhecidos
     de letras ASCII são reservados para uso futuro e tratados como
     erros.  Outros escapes desconhecidos como ‘\&’ são deixados como
     estão.  Referências anteriores, como ‘\6’, são substituídos pela
     substring correspondida pelo grupo 6 no padrão.  Por exemplo:

          >>> re.sub(r'def\s+([a-zA-Z_][a-zA-Z_0-9]*)\s*\(\s*\):',
          ...        r'static PyObject*\npy_\1(void)\n{',
          ...        'def myfunc():')
          'static PyObject*\npy_myfunc(void)\n{'

     Se 'repl' for uma função, ela será chamada para cada ocorrência não
     sobreposta do padrão 'pattern'.  A função recebe um único argumento
     *note Match: ce8. e retorna a string de substituição.  Por exemplo:

          >>> def dashrepl(matchobj):
          ...     if matchobj.group(0) == '-': return ' '
          ...     else: return '-'
          ...
          >>> re.sub('-{1,2}', dashrepl, 'arquivos-de-pro----grama')
          'arquivos de pro--grama'
          >>> re.sub(r'\sE\s', ' & ', 'Feijões queimados e spam', flags=re.IGNORECASE)
          'Feijões queimados & spam'

     O padrão pode ser uma string ou um *note Pattern: 18f2.

     O argumento opcional ‘count’ é o número máximo de ocorrências do
     padrão a ser substituído; ‘count’ deve ser um número inteiro não
     negativo.  Se omitido ou igual a zero, todas as ocorrências serão
     substituídas.

     Correspondências vazias adjacentes não são possíveis, mas uma
     correspondência vazia pode ocorrer imediatamente após uma
     correspondência não-vazia.  Como resultado, ‘sub('x*', '-',
     'abxd')’ retorna ‘'-a-b--d-'’ invés de ‘'-a-b-d-'’.

     Em argumentos 'repl' do tipo string, além dos escapes de caractere
     e referências anteriores descritas acima, ‘\g<nome>’ usará a
     substring correspondida pelo grupo denominado ‘nome’, conforme
     definido pela sintaxe ‘(?P<nome>...)’.  ‘\g<número>’ usa o número
     do grupo correspondente; ‘\g<2>’ é portanto equivalente a ‘\2’, mas
     não é ambíguo em uma substituição como ‘\g<2>0’.  ‘\20’ seria
     interpretado como uma referência ao grupo 20, não uma referência ao
     grupo 2 seguida pelo caractere literal ‘'0'’.  A referência
     anterior ‘\g6’ substitui em toda a substring correspondida pela ER.

     O comportamento da expressão pode ser modificado especificando um
     valor para o parâmetro 'flags'.  Os valores podem ser qualquer um
     dos *note sinalizadores: 2494, combinados usando OU bit a bit (o
     operador ‘|’).

     Alterado na versão 3.1: Adicionado o argumento de sinalizadores
     opcionais.

     Alterado na versão 3.5: Grupos sem correspondência são substituídos
     por uma string vazia.

     Alterado na versão 3.6: Escapes desconhecidos no padrão 'pattern'
     consistindo em ‘'\'’ e uma letra ASCII agora são erros.

     Alterado na versão 3.7: Escapes desconhecidos em 'repl' consistindo
     em ‘'\'’ e uma letra ASCII agora são erros.  Uma correspondência
     vazia pode ocorrer imediatamente após uma correspondência
     não-vazia.

     Alterado na versão 3.12: O grupo 'id' só pode conter dígitos ASCII.
     Nas strings de substituição *note bytes: 1c2, o grupo 'name' só
     pode conter bytes no intervalo ASCII (‘b'\x00'’-‘b'\x7f'’).

     Descontinuado desde a versão 3.13: Passar 'count' e 'flags' como
     argumentos posicionais foi descontinuado.  Nas versões futuras do
     Python eles serão *note parâmetros somente-nomeados: 2a5.

 -- Função: re.subn (pattern, repl, string, count=0, flags=0)

     Executa a mesma operação que *note sub(): 2a3, mas retorna uma
     tupla ‘(nova_string, número_de_substituições_feitas)’.

     O comportamento da expressão pode ser modificado especificando um
     valor para o parâmetro 'flags'.  Os valores podem ser qualquer um
     dos *note sinalizadores: 2494, combinados usando OU bit a bit (o
     operador ‘|’).

 -- Função: re.escape (pattern)

     Escapa caracteres especiais no padrão 'pattern'.  Isso é útil se
     você deseja corresponder uma string literal arbitrária que pode
     conter metacaracteres de expressão regular.  Por exemplo:

          >>> print(re.escape('https://www.python.org'))
          https://www\.python\.org

          >>> legal_chars = string.ascii_lowercase + string.digits + "!#$%&'*+-.^_`|~:"
          >>> print('[%s]+' % re.escape(legal_chars))
          [abcdefghijklmnopqrstuvwxyz0123456789!\#\$%\&'\*\+\-\.\^_`\|\~:]+

          >>> operators = ['+', '-', '*', '/', '**']
          >>> print('|'.join(map(re.escape, sorted(operators, reverse=True))))
          /|\-|\+|\*\*|\*

     Esta função não deve ser usada para a string de substituição em
     *note sub(): 2a3. e *note subn(): 2a4, apenas contrabarras devem
     ser escapadas.  Por exemplo:

          >>> digits_re = r'\d+'
          >>> sample = '/usr/sbin/sendmail - 0 errors, 12 warnings'
          >>> print(re.sub(digits_re, digits_re.replace('\\', r'\\'), sample))
          /usr/sbin/sendmail - \d+ errors, \d+ warnings

     Alterado na versão 3.3: O caractere ‘'_'’ não é mais escapado.

     Alterado na versão 3.7: Somente caracteres que podem ter um
     significado especial em uma expressão regular são escapados.  Como
     resultado, ‘'!'’, ‘'"'’, ‘'%'’, ‘"'"’, ‘','’, ‘'/'’, ‘':'’, ‘';'’,
     ‘'<'’, ‘'='’, ‘'>'’, ‘'@'’, e ‘"`"’ não são mais escapados.

 -- Função: re.purge ()

     Limpa o cache da expressão regular.


File: python.info,  Node: Exceções<3>,  Prev: Funções<2>,  Up: Conteúdo do módulo

5.6.2.5 Exceções
................

 -- Exceção: re.PatternError (msg, pattern=None, pos=None)

     Exceção levantada quando uma string passada para uma das funções
     desde módulo não é uma expressão regular válida (por exemplo, ela
     pode conter parênteses não correspondentes) ou quando algum outro
     erro ocorre durante a compilação ou correspondência.  Nunca é um
     erro se uma string não contém correspondência para um padrão.  A
     instância de ‘PatternError’ possui os seguintes atributos
     adicionais:

      -- Atributo: msg

          A mensagem de erro não formatada.

      -- Atributo: pattern

          O padrão da expressão regular.

      -- Atributo: pos

          O índice no padrão 'pattern' no qual a compilação falhou (pode
          ser ‘None’).

      -- Atributo: lineno

          A linha correspondente a 'pos' (pode ser ‘None’).

      -- Atributo: colno

          A coluna correspondente a 'pos' (pode ser ‘None’).

     Alterado na versão 3.5: Adicionados os atributos adicionais.

     Alterado na versão 3.13: ‘PatternError’ era originalmente chamado
     de ‘error’; o último é mantido como um apelido para compatibilidade
     com versões anteriores.


File: python.info,  Node: Objetos expressão regular,  Next: Objetos correspondência,  Prev: Conteúdo do módulo,  Up: re — Operações com expressões regulares

5.6.2.6 Objetos expressão regular
.................................

 -- Classe: re.Pattern

     Objeto expressão regular compilado retornado por *note
     re.compile(): bee.

     Alterado na versão 3.9: *note re.Pattern: 18f2. tem suporte a ‘[]’
     para indicar um padrão Unicode (str) ou bytes.  Veja *note Tipo
     Generic Alias: 6b2.

 -- Método: Pattern.search (string[, pos[, endpos]])

     Percorre a 'string' procurando o primeiro local onde esta expressão
     regular produz uma correspondência e retorna um *note Match: ce8.
     correspondente.  Retorna ‘None’ se nenhuma posição na string
     corresponder ao padrão; observe que isso é diferente de encontrar
     uma correspondência de comprimento zero em algum ponto da string.

     O segundo parâmetro opcional 'pos' fornece um índice na string onde
     a pesquisa deve começar; o padrão é ‘0’.  Isso não é totalmente
     equivalente a fatiar a string; o caractere padrão ‘'^'’ corresponde
     no início real da string e nas posições logo após uma nova linha,
     mas não necessariamente no índice onde a pesquisa deve começar.

     O parâmetro opcional 'endpos' limita o quão longe a string será
     pesquisada; será como se a string tivesse 'endpos' caracteres,
     então apenas os caracteres de 'pos' a ‘endpos - 1’ serão procurados
     por uma correspondência.  Se 'endpos' for menor que 'pos', nenhuma
     correspondência será encontrada; caso contrário, se 'rx' é um
     objeto de expressão regular compilado, ‘rx.search(string, 0, 50)’ é
     equivalente a ‘rx.search(string[:50], 0)’.

          >>> pattern = re.compile("d")
          >>> pattern.search("dog")     # Correspondeu no índice 0
          <re.Match object; span=(0, 1), match='d'>
          >>> pattern.search("dog", 1)  # Não correspondeu; a busca não inclui "d"

 -- Método: Pattern.match (string[, pos[, endpos]])

     Se zero ou mais caracteres no início da 'string' corresponderem a
     esta expressão regular, retorna um *note Match: ce8.
     correspondente.  Retorna ‘None’ se a string não corresponder ao
     padrão; observe que isso é diferente de uma correspondência de
     comprimento zero.

     Os parâmetros opcionais 'pos' e 'endpos' têm o mesmo significado
     que para o método *note search(): 249a.

          >>> pattern = re.compile("o")
          >>> pattern.match("dog")      # Não correspondeu, pois "o" não é o início de "dog".
          >>> pattern.match("dog", 1)   # Correspondeu, pois "o" é o 2º caractere de "dog".
          <re.Match object; span=(1, 2), match='o'>

     Se você quiser localizar uma correspondência em qualquer lugar em
     'string', use *note search(): 249a. ao invés (veja também *note
     search() vs.  match(): 249b.).

 -- Método: Pattern.fullmatch (string[, pos[, endpos]])

     Se toda a 'string' corresponder a esta expressão regular, retorna
     um *note Match: ce8. correspondente.  Retorna ‘None’ se a string
     não corresponder ao padrão; observe que isso é diferente de uma
     correspondência de comprimento zero.

     Os parâmetros opcionais 'pos' e 'endpos' têm o mesmo significado
     que para o método *note search(): 249a.

          >>> pattern = re.compile("o[gh]")
          >>> pattern.fullmatch("dog")      # Não correspondeu, pois "o" não é o início de "dog".
          >>> pattern.fullmatch("ogre")     # Não correspondeu, pois não é uma correspondência da string inteira.
          >>> pattern.fullmatch("doggie", 1, 3)   # Corresponde dentro dos limites dados.
          <re.Match object; span=(1, 3), match='og'>

     Adicionado na versão 3.4.

 -- Método: Pattern.split (string, maxsplit=0)

     Idêntico à função *note split(): 2a2, usando o padrão compilado.

 -- Método: Pattern.findall (string[, pos[, endpos]])

     Semelhante à função *note findall(): 1060, usando o padrão
     compilado, mas também aceita os parâmetros 'pos' e 'endpos'
     opcionais que limitam a região de pesquisa como para *note
     search(): 126d.

 -- Método: Pattern.finditer (string[, pos[, endpos]])

     Semelhante à função *note finditer(): 1542, usando o padrão
     compilado, mas também aceita os parâmetros 'pos' e 'endpos'
     opcionais que limitam a região de pesquisa como para *note
     search(): 126d.

 -- Método: Pattern.sub (repl, string, count=0)

     Idêntico à função *note sub(): 2a3, usando o padrão compilado.

 -- Método: Pattern.subn (repl, string, count=0)

     Idêntico à função *note subn(): 2a4, usando o padrão compilado.

 -- Atributo: Pattern.flags

     Os sinalizadores de correspondência de expressões regulares.  Esta
     é uma combinação dos sinalizadores fornecidos para *note compile():
     bee, qualquer sinalizador em linha ‘(?...)’ no padrão e
     sinalizadores implícitos como *note UNICODE: b83. se o padrão for
     uma string Unicode.

 -- Atributo: Pattern.groups

     O número de grupos de captura no padrão.

 -- Atributo: Pattern.groupindex

     Um dicionário que mapeia qualquer nome de grupo simbólico definido
     por ‘(?P<id>)’ para números de grupo.  O dicionário estará vazio se
     nenhum grupo simbólico for usado no padrão.

 -- Atributo: Pattern.pattern

     A string de padrão da qual o objeto de padrão foi compilado.

Alterado na versão 3.7: Adicionado suporte de *note copy.copy(): 534. e
*note copy.deepcopy(): b84.  Os objetos expressão regular compilados são
considerados atômicos.


File: python.info,  Node: Objetos correspondência,  Next: Exemplos de expressão regular,  Prev: Objetos expressão regular,  Up: re — Operações com expressões regulares

5.6.2.7 Objetos correspondência
...............................

Objetos correspondência sempre têm um valor booleano de ‘True’.  Como
*note match(): 2499. e *note search(): 249a. retornam ‘None’ quando não
há correspondência, você pode testar se houve uma correspondência com
uma simples instrução ‘if’:

     match = re.search(pattern, string)
     if match:
         process(match)

 -- Classe: re.Match

     Objeto correspondência retornado por ‘match’s e ‘search’s bem
     sucedidos.

     Alterado na versão 3.9: *note re.Match: ce8. tem suporte a ‘[]’
     para indicar uma correspondência Unicode (str) ou bytes.  Veja
     *note Tipo Generic Alias: 6b2.

 -- Método: Match.expand (template)

     Retorna a string obtida fazendo a substituição da contrabarra na
     string template 'template', como feito pelo método *note sub():
     24a2.  Escapes como ‘\n’ são convertidos para os caracteres
     apropriados, e referências anteriores numéricas (‘\1’, ‘\2’) e
     referências anteriores nomeadas (‘\g<1>’, ‘\g<nome>’) são
     substituídas pelo conteúdo do grupo correspondente.  A referência
     anterior ‘\g<0>’ será substituída pela correspondência completa.

     Alterado na versão 3.5: Grupos sem correspondência são substituídos
     por uma string vazia.

 -- Método: Match.group ([group1, ...])

     Retorna um ou mais subgrupos da correspondência.  Se houver um
     único argumento, o resultado será uma única string; se houver
     vários argumentos, o resultado é uma tupla com um item por
     argumento.  Sem argumentos, 'group1' padroniza para zero (toda a
     correspondência é retornada).  Se um argumento 'groupN' for zero, o
     valor de retorno correspondente será toda a string correspondente;
     se estiver no intervalo inclusivo [1..99], é a string que
     corresponde ao grupo entre parênteses correspondente.  Se um número
     de grupo for negativo ou maior do que o número de grupos definidos
     no padrão, uma exceção *note IndexError: 157e. é levantada.  Se um
     grupo estiver contido em uma parte do padrão que não correspondeu,
     o resultado correspondente será ‘None’.  Se um grupo estiver
     contido em uma parte do padrão que correspondeu várias vezes, a
     última correspondência será retornada.

          >>> m = re.match(r"(\w+) (\w+)", "Isaac Newton, físico")
          >>> m.group(0)       # A correspondência inteira
          'Isaac Newton'
          >>> m.group(1)       # O primeiro subgrupo entre parênteses.
          'Isaac'
          >>> m.group(2)       # O segundo subgrupo entre parênteses.
          'Newton'
          >>> m.group(1, 2)    # Múltiplos argumentos retornam uma tupla.
          ('Isaac', 'Newton')

     Se a expressão regular usa a sintaxe ‘(?P<nome>...)’, os argumentos
     'groupN' também podem ser strings que identificam grupos por seus
     nomes de grupo.  Se um argumento string não for usado como um nome
     de grupo no padrão, uma exceção *note IndexError: 157e. é
     levantada.

     Um exemplo moderadamente complicado:

          >>> m = re.match(r"(?P<primeiro_nome>\w+) (?P<sobrenome>\w+)", "Malcolm Reynolds")
          >>> m.group('primeiro_nome')
          'Malcolm'
          >>> m.group('sobrenome')
          'Reynolds'

     Grupos nomeados também podem ser referidos por seu índice:

          >>> m.group(1)
          'Malcolm'
          >>> m.group(2)
          'Reynolds'

     Se um grupo corresponder várias vezes, apenas a última
     correspondência estará acessível:

          >>> m = re.match(r"(..)+", "a1b2c3")  # Corresponde 3 vezes.
          >>> m.group(1)                        # Retorna somente a última correspondência.
          'c3'

 -- Método: Match.__getitem__ (g)

     Isso é idêntico a ‘m.group(g)’.  Isso permite acesso mais fácil a
     um grupo individual de uma correspondência:

          >>> m = re.match(r"(\w+) (\w+)", "Isaac Newton, físico")
          >>> m[0]       # A correspondência inteira
          'Isaac Newton'
          >>> m[1]       # O primeiro subgrupo entre parênteses.
          'Isaac'
          >>> m[2]       # O segundo subgrupo entre parênteses.
          'Newton'

     Também há suporte para grupos nomeados:

          >>> m = re.match(r"(?P<primeiro_nome>\w+) (?P<sobrenome>\w+)", "Isaac Newton")
          >>> m['primeiro_nome']
          'Isaac'
          >>> m['sobrenome']
          'Newton'

     Adicionado na versão 3.6.

 -- Método: Match.groups (default=None)

     Retorna uma tupla contendo todos os subgrupos da correspondência,
     de 1 até quantos grupos estiverem no padrão.  O argumento 'default'
     é usado para grupos que não participaram da correspondência; o
     padrão é ‘None’.

     Por exemplo:

          >>> m = re.match(r"(\d+)\.(\d+)", "24.1632")
          >>> m.groups()
          ('24', '1632')

     Se colocarmos a casa decimal e tudo depois dela opcional, nem todos
     os grupos podem participar da correspondência.  Esses grupos serão
     padronizados como ‘None’, a menos que o argumento 'default' seja
     fornecido:

          >>> m = re.match(r"(\d+)\.?(\d+)?", "24")
          >>> m.groups()      # Segundo grupo padronizado para None.
          ('24', None)
          >>> m.groups('0')   # Agora, o segundo grupo é padronizado para '0'.
          ('24', '0')

 -- Método: Match.groupdict (default=None)

     Retorna um dicionário contendo todos os subgrupos 'nomeados' da
     correspondência, tendo como chave o nome do subgrupo.  O argumento
     'default' usado para grupos que não participaram da
     correspondência; o padrão é ‘None’.  Por exemplo:

          >>> m = re.match(r"(?P<primeiro_nome>\w+) (?P<sobrenome>\w+)", "Malcolm Reynolds")
          >>> m.groupdict()
          {'primeiro_nome': 'Malcolm', 'sobrenome': 'Reynolds'}

 -- Método: Match.start ([group])
 -- Método: Match.end ([group])

     Retorna os índices de início e fim da substring correspondida pelo
     grupo 'group'; 'group' tem como padrão zero (o que significa que
     toda a substring é correspondida).  Retorna ‘-1’ se 'group' existe,
     mas não contribuiu para a correspondência.  Para um objeto
     correspondência 'm' e um grupo 'g' que contribuiu para a
     correspondência, a substring correspondida pelo grupo 'g'
     (equivalente a ‘m.group(g)’) é

          m.string[m.start(g):m.end(g)]

     Observe que ‘m.start(group)’ será igual a ‘m.end(group)’ se 'group'
     correspondeu a uma string nula.  Por exemplo, após ‘m =
     re.search('b(c?)', 'cba')’, ‘m.start(0)’ é 1, ‘m.end(0)’ é 2,
     ‘m.start(1)’ e ‘m.end(1)’ são 2, e ‘m.start(2)’ levanta uma exceção
     *note IndexError: 157e.

     Um exemplo que removerá 'remova_isto' dos endereços de e-mail:

          >>> email = "tony@tiremova_istoger.net"
          >>> m = re.search("remova_isto", email)
          >>> email[:m.start()] + email[m.end():]
          'tony@tiger.net'

 -- Método: Match.span ([group])

     Para uma correspondência 'm', retorna a tupla com dois elementos
     ‘(m.start(group), m.end(group))’.  Observe que se 'group' não
     contribuiu para a correspondência, isso é ‘(-1, -1)’.  'group' tem
     como padrão zero, a correspondência inteira.

 -- Atributo: Match.pos

     O valor de 'pos' que foi passado para o método *note search():
     249a. ou *note match(): 2499. de um *note objeto expressão regular:
     fbb.  Este é o índice da string na qual o mecanismo de ER começou a
     procurar uma correspondência.

 -- Atributo: Match.endpos

     O valor de 'endpos' que foi passado para o método *note search():
     249a. ou *note match(): 2499. de um *note objeto expressão regular:
     fbb.  Este é o índice da string após o qual o mecanismo de ER não
     vai chegar.

 -- Atributo: Match.lastindex

     O índice em número inteiro do último grupo de captura
     correspondido, ou ‘None’ se nenhum grupo foi correspondido.  Por
     exemplo, as expressões ‘(a)b’, ‘((a)(b))’ e ‘((ab))’ terão
     ‘lastindex == 1’ se aplicadas à string ‘'ab'’, enquanto a expressão
     ‘(a)(b)’ terá ‘lastindex == 2’, se aplicada à mesma string.

 -- Atributo: Match.lastgroup

     O nome do último grupo de captura correspondido, ou ‘None’ se o
     grupo não tinha um nome, ou se nenhum grupo foi correspondido.

 -- Atributo: Match.re

     O *note objeto expressão regular: fbb. cujo método *note match():
     2499. ou *note search(): 249a. produziu esta instância de
     correspondência.

 -- Atributo: Match.string

     A string passada para *note match(): 2499. ou *note search(): 249a.

Alterado na versão 3.7: Adicionado suporte para *note copy.copy(): 534.
e *note copy.deepcopy(): b84.  Objetos correspondência são considerados
atômicos.


File: python.info,  Node: Exemplos de expressão regular,  Prev: Objetos correspondência,  Up: re — Operações com expressões regulares

5.6.2.8 Exemplos de expressão regular
.....................................

* Menu:

* Verificando por um par::
* Simulando scanf(): Simulando scanf.
* search() vs. match(): search vs match.
* Criando uma lista telefônica::
* Mastigando texto::
* Encontrando todos os advérbios::
* Encontrando todos os advérbios e suas posições::
* Notação de string bruta::
* Escrevendo um tokenizador::


File: python.info,  Node: Verificando por um par,  Next: Simulando scanf,  Up: Exemplos de expressão regular

5.6.2.9 Verificando por um par
..............................

Neste exemplo, usaremos a seguinte função auxiliar para exibir objetos
correspondência com um pouco mais de elegância:

     def displaymatch(match):
         if match is None:
             return None
         return '<Match: %r, groups=%r>' % (match.group(), match.groups())

Suponha que você esteja escrevendo um programa de pôquer onde a mão de
um jogador é representada como uma string de 5 caracteres com cada
caractere representando uma carta, “a” para ás, “k” para rei, “q” para
dama, “j” para valete, “t” para 10 e “2” a “9” representando a carta com
esse valor.

Para ver se uma determinada string é uma mão válida, pode-se fazer o
seguinte:

     >>> valid = re.compile(r"^[a2-9tjqk]{5}$")
     >>> displaymatch(valid.match("akt5q"))  # Válida.
     "<Match: 'akt5q', groups=()>"
     >>> displaymatch(valid.match("akt5e"))  # Inválida.
     >>> displaymatch(valid.match("akt"))    # Inválida.
     >>> displaymatch(valid.match("727ak"))  # Válida.
     "<Match: '727ak', groups=()>"

Essa última mão, ‘"727ak"’, continha um par, ou duas cartas com o mesmo
valor.  Para combinar isso com uma expressão regular, pode-se usar
referências anteriores como:

     >>> pair = re.compile(r".*(.).*\1")
     >>> displaymatch(pair.match("717ak"))     # Par de 7s.
     "<Match: '717', groups=('7',)>"
     >>> displaymatch(pair.match("718ak"))     # Sem pares.
     >>> displaymatch(pair.match("354aa"))     # Par de áses.
     "<Match: '354aa', groups=('a',)>"

Para descobrir em que carta o par consiste, pode-se usar o método *note
group(): 1061. do objeto correspondência da seguinte maneira:

     >>> pair = re.compile(r".*(.).*\1")
     >>> pair.match("717ak").group(1)
     '7'

     # Erro porque re.match() retorna None, que não tem um método group()::
     >>> pair.match("718ak").group(1)
     Traceback (most recent call last):
       File "<pyshell#23>", line 1, in <module>
         re.match(r".*(.).*\1", "718ak").group(1)
     AttributeError: 'NoneType' object has no attribute 'group'

     >>> pair.match("354aa").group(1)
     'a'


File: python.info,  Node: Simulando scanf,  Next: search vs match,  Prev: Verificando por um par,  Up: Exemplos de expressão regular

5.6.2.10 Simulando scanf()
..........................

Atualmente, Python não possui um equivalente a ‘scanf()’.  Expressões
regulares são geralmente mais poderosas, embora também mais prolixas, do
que strings de formato ‘scanf()’.  A tabela abaixo oferece alguns
mapeamentos mais ou menos equivalentes entre strings de formato
‘scanf()’ e expressões regulares.

Símbolo do ‘scanf()’                 Expressão regular
                                     
---------------------------------------------------------------------------------------
                                     
‘%c’                                 ‘.’
                                     
                                     
‘%5c’                                ‘.{5}’
                                     
                                     
‘%d’                                 ‘[-+]?\d+’
                                     
                                     
‘%e’, ‘%E’, ‘%f’, ‘%g’               ‘[-+]?(\d+(\.\d*)?|\.\d+)([eE][-+]?\d+)?’
                                     
                                     
‘%i’                                 ‘[-+]?(0[xX][\dA-Fa-f]+|0[0-7]*|\d+)’
                                     
                                     
‘%o’                                 ‘[-+]?[0-7]+’
                                     
                                     
‘%s’                                 ‘\S+’
                                     
                                     
‘%u’                                 ‘\d+’
                                     
                                     
‘%x’, ‘%X’                           ‘[-+]?(0[xX])?[\dA-Fa-f]+’
                                     

Para extrair um nome de arquivo e números de uma string como

     /usr/sbin/sendmail - 0 errors, 4 warnings

você usaria um formato ‘scanf()’ como

     %s - %d errors, %d warnings

A expressão regular equivalente seria

     (\S+) - (\d+) errors, (\d+) warnings


File: python.info,  Node: search vs match,  Next: Criando uma lista telefônica,  Prev: Simulando scanf,  Up: Exemplos de expressão regular

5.6.2.11 search() vs. match()
.............................

Python oferece diferentes operações primitivas baseadas em expressões
regulares:

   + *note re.match(): 126e. verifica uma correspondência apenas no
     início da string

   + *note re.search(): 126d. verifica uma correspondência em qualquer
     lugar na string (isso é o que o Perl faz por padrão)

   + *note re.fullmatch(): fb9. verifica toda a string para ser uma
     correspondência

Por exemplo:

     >>> re.match("c", "abcdef")    # Sem correspondência
     >>> re.search("c", "abcdef")   # Correspondência
     <re.Match object; span=(2, 3), match='c'>
     >>> re.fullmatch("p.*n", "python") # Correspondência
     <re.Match object; span=(0, 6), match='python'>
     >>> re.fullmatch("r.*n", "python") # Sem correspondência

Expressões regulares começando com ‘'^'’ podem ser usadas com *note
search(): 126d. para restringir a correspondência no início da string:

     >>> re.match("c", "abcdef")    # Sem correspondência
     >>> re.search("^c", "abcdef")  # Sem correspondência
     >>> re.search("^a", "abcdef")  # Correspondência
     <re.Match object; span=(0, 1), match='a'>

Observe, entretanto, que no modo *note MULTILINE: 2489. *note match():
126e. apenas corresponde ao início da string, enquanto que usar *note
search(): 126d. com uma expressão regular começando com ‘'^'’ irá
corresponder no início de cada linha.

     >>> re.match("X", "A\nB\nX", re.MULTILINE)  # Sem correspondência
     >>> re.search("^X", "A\nB\nX", re.MULTILINE)  # Correspondência
     <re.Match object; span=(4, 5), match='X'>


File: python.info,  Node: Criando uma lista telefônica,  Next: Mastigando texto,  Prev: search vs match,  Up: Exemplos de expressão regular

5.6.2.12 Criando uma lista telefônica
.....................................

*note split(): 2a2. divide uma string em uma lista delimitada pelo
padrão passado.  O método é inestimável para converter dados textuais em
estruturas de dados que podem ser facilmente lidas e modificadas pelo
Python, conforme demonstrado no exemplo a seguir que cria uma lista
telefônica.

Primeiro, aqui está a entrada.  Normalmente pode vir de um arquivo, aqui
estamos usando a sintaxe de string entre aspas triplas.

     >>> texto = """Ross McFluff: 834.345.1254 155 Elm Street
     ...
     ... Ronald Heathmore: 892.345.3428 436 Finley Avenue
     ... Frank Burger: 925.541.7625 662 South Dogwood Way
     ...
     ...
     ... Heather Albrecht: 548.326.4584 919 Park Place"""

Os registros são separados por uma ou mais novas linhas.  Agora,
convertemos a string em uma lista com cada linha não vazia tendo seu
próprio registro:

     >>> registros = re.split("\n+", texto)
     >>> registros
     ['Ross McFluff: 834.345.1254 155 Elm Street',
     'Ronald Heathmore: 892.345.3428 436 Finley Avenue',
     'Frank Burger: 925.541.7625 662 South Dogwood Way',
     'Heather Albrecht: 548.326.4584 919 Park Place']

Finalmente, divida cada registro em uma lista com nome, sobrenome,
número de telefone e endereço.  Usamos o parâmetro ‘maxsplit’ de *note
split(): 2a2. porque o endereço contém espaços, nosso padrão de divisão:

     >>> [re.split(":? ", registro, maxsplit=3) for registro in registros]
     [['Ross', 'McFluff', '834.345.1254', '155 Elm Street'],
     ['Ronald', 'Heathmore', '892.345.3428', '436 Finley Avenue'],
     ['Frank', 'Burger', '925.541.7625', '662 South Dogwood Way'],
     ['Heather', 'Albrecht', '548.326.4584', '919 Park Place']]

O padrão ‘:?’ corresponde ao caractere de dois pontos após o sobrenome,
de modo que não ocorre na lista de resultados.  Com um ‘maxsplit’ de
‘4’, podemos separar o número da casa do nome da rua:

     >>> [re.split(":? ", registro, maxsplit=4) for registro in registros]
     [['Ross', 'McFluff', '834.345.1254', '155', 'Elm Street'],
     ['Ronald', 'Heathmore', '892.345.3428', '436', 'Finley Avenue'],
     ['Frank', 'Burger', '925.541.7625', '662', 'South Dogwood Way'],
     ['Heather', 'Albrecht', '548.326.4584', '919', 'Park Place']]


File: python.info,  Node: Mastigando texto,  Next: Encontrando todos os advérbios,  Prev: Criando uma lista telefônica,  Up: Exemplos de expressão regular

5.6.2.13 Mastigando texto
.........................

*note sub(): 2a3. substitui cada ocorrência de um padrão por uma string
ou o resultado de uma função.  Este exemplo demonstra o uso de *note
sub(): 2a3. com uma função para “mastigar” o texto ou aleatorizar a
ordem de todos os caracteres em cada palavra de uma frase, exceto o
primeiro e o último caracteres:

     >>> def repl(m):
     ...     inner_word = list(m.group(2))
     ...     random.shuffle(inner_word)
     ...     return m.group(1) + "".join(inner_word) + m.group(3)
     ...
     >>> text = "Professor Masanori, favor comunicar suas ausências imediatamente."
     >>> re.sub(r"(\w)(\w+)(\w)", repl, text)
     'Psesforor Mranoasi, favor cmounacir suas acaêiusns idaaeemttnmie.'
     >>> re.sub(r"(\w)(\w+)(\w)", repl, text)
     'Prfseosor Monsaari, fovar camonucir saus acuêsains ientdaammetie.'


File: python.info,  Node: Encontrando todos os advérbios,  Next: Encontrando todos os advérbios e suas posições,  Prev: Mastigando texto,  Up: Exemplos de expressão regular

5.6.2.14 Encontrando todos os advérbios
.......................................

*note findall(): 1060. corresponde 'todas' as ocorrências de um padrão,
não apenas a primeira como *note search(): 126d. faz.  Por exemplo, se
uma pessoa deseja encontrar todos os advérbios em algum texto, ela pode
usar *note findall(): 1060. da seguinte maneira:

     >>> text = "Ele estava cuidadosamente disfarçado, mas foi rapidamente capturado pela polícia."
     >>> re.findall(r"\w+mente\b", text)
     ['cuidadosamente', 'rapidamente']


File: python.info,  Node: Encontrando todos os advérbios e suas posições,  Next: Notação de string bruta,  Prev: Encontrando todos os advérbios,  Up: Exemplos de expressão regular

5.6.2.15 Encontrando todos os advérbios e suas posições
.......................................................

Se alguém deseja obter mais informações sobre todas as correspondências
de um padrão além do texto correspondido, *note finditer(): 1542. é
útil, pois fornece objetos *note Match: ce8. em vez de strings.
Continuando com o exemplo anterior, se um escritor quisesse encontrar
todos os advérbios 'e suas posições' em algum texto, ele usaria *note
finditer(): 1542. da seguinte maneira:

     >>> text = "Ele estava cuidadosamente disfarçado, mas foi rapidamente capturado pela polícia."
     >>> for m in re.finditer(r"\w+mente\b", text):
     ... print('%02d-%02d: %s' % (m.start(), m.end(), m.group(0)))
     11-25: cuidadosamente
     46-57: rapidamente


File: python.info,  Node: Notação de string bruta,  Next: Escrevendo um tokenizador,  Prev: Encontrando todos os advérbios e suas posições,  Up: Exemplos de expressão regular

5.6.2.16 Notação de string bruta
................................

A notação de string bruta (‘r"texto"’) mantém as expressões regulares
sãs.  Sem ela, cada contrabarra (‘'\'’) em uma expressão regular teria
que ser prefixada com outra para ter seu efeito de caractere especial
anulado.  Por exemplo, as duas linhas de código a seguir são
funcionalmente idênticas:

     >>> re.match(r"\W(.)\1\W", " ff ")
     <re.Match object; span=(0, 4), match=' ff '>
     >>> re.match("\\W(.)\\1\\W", " ff ")
     <re.Match object; span=(0, 4), match=' ff '>

Quando se deseja corresponder a uma contrabarra literal, ela deve ser
prefixada com outra contrabarra na expressão regular.  Com a notação de
string bruta, isso significa ‘r"\\"’.  Sem a notação de string bruta,
deve-se usar ‘"\\\\"’, tornando as seguintes linhas de código
funcionalmente idênticas:

     >>> re.match(r"\\", r"\\")
     <re.Match object; span=(0, 1), match='\\'>
     >>> re.match("\\\\", r"\\")
     <re.Match object; span=(0, 1), match='\\'>


File: python.info,  Node: Escrevendo um tokenizador,  Prev: Notação de string bruta,  Up: Exemplos de expressão regular

5.6.2.17 Escrevendo um tokenizador
..................................

Um tokenizador ou scanner(1) analisa uma string para categorizar grupos
de caracteres.  Este é um primeiro passo útil para escrever um
compilador ou interpretador.

As categorias de texto são especificadas com expressões regulares.  A
técnica é combiná-las em uma única expressão regular mestre e fazer um
laço em correspondências sucessivas:

     from typing import NamedTuple
     import re

     class Token(NamedTuple):
         type: str
         value: str
         line: int
         column: int

     def tokenize(code):
         keywords = {'IF', 'THEN', 'ENDIF', 'FOR', 'NEXT', 'GOSUB', 'RETURN'}
         token_specification = [
             ('NUMBER',   r'\d+(\.\d*)?'),  # Número inteiro ou decimal
             ('ASSIGN',   r':='),           # Operador de atribuição
             ('END',      r';'),            # Fiinalizador de instrução
             ('ID',       r'[A-Za-z]+'),    # Identificadores
             ('OP',       r'[+\-*/]'),      # Operadores aritméticos
             ('NEWLINE',  r'\n'),           # Finais de linha
             ('SKIP',     r'[ \t]+'),       # Pula espaços e tabulações
             ('MISMATCH', r'.'),            # Qualquer outro caracter
         ]
         tok_regex = '|'.join('(?P<%s>%s)' % pair for pair in token_specification)
         line_num = 1
         line_start = 0
         for mo in re.finditer(tok_regex, code):
             kind = mo.lastgroup
             value = mo.group()
             column = mo.start() - line_start
             if kind == 'NUMBER':
                 value = float(value) if '.' in value else int(value)
             elif kind == 'ID' and value in keywords:
                 kind = value
             elif kind == 'NEWLINE':
                 line_start = mo.end()
                 line_num += 1
                 continue
             elif kind == 'SKIP':
                 continue
             elif kind == 'MISMATCH':
                 raise RuntimeError(f'{value!r} unexpected on line {line_num}')
             yield Token(kind, value, line_num, column)

     statements = '''
         IF quantity THEN
             total := total + price * quantity;
             tax := price * 0.05;
         ENDIF;
     '''

     for token in tokenize(statements):
         print(token)

O tokenizador produz a seguinte saída:

     Token(type='IF', value='IF', line=2, column=4)
     Token(type='ID', value='quantity', line=2, column=7)
     Token(type='THEN', value='THEN', line=2, column=16)
     Token(type='ID', value='total', line=3, column=8)
     Token(type='ASSIGN', value=':=', line=3, column=14)
     Token(type='ID', value='total', line=3, column=17)
     Token(type='OP', value='+', line=3, column=23)
     Token(type='ID', value='price', line=3, column=25)
     Token(type='OP', value='*', line=3, column=31)
     Token(type='ID', value='quantity', line=3, column=33)
     Token(type='END', value=';', line=3, column=41)
     Token(type='ID', value='tax', line=4, column=8)
     Token(type='ASSIGN', value=':=', line=4, column=12)
     Token(type='ID', value='price', line=4, column=15)
     Token(type='OP', value='*', line=4, column=21)
     Token(type='NUMBER', value=0.05, line=4, column=23)
     Token(type='END', value=';', line=4, column=27)
     Token(type='ENDIF', value='ENDIF', line=5, column=4)
     Token(type='END', value=';', line=5, column=9)

(Frie09) Friedl, Jeffrey.  Mastering Regular Expressions.  3ª ed.,
O’Reilly Media, 2009.  A terceira edição do livro não cobre mais o
Python, mas a primeira edição cobriu a escrita de bons padrões de
expressão regular em grandes detalhes.

   ---------- Footnotes ----------

   (1) https://pt.wikipedia.org/wiki/Análise_léxica


File: python.info,  Node: difflib — Helpers for computing deltas,  Next: textwrap — Quebra automática e preenchimento de texto,  Prev: re — Operações com expressões regulares,  Up: Serviços de Processamento de Texto

5.6.3 ‘difflib’ — Helpers for computing deltas
----------------------------------------------

'Código-fonte:' Lib/difflib.py(1)

__________________________________________________________________

This module provides classes and functions for comparing sequences.  It
can be used for example, for comparing files, and can produce
information about file differences in various formats, including HTML
and context and unified diffs.  For comparing directories and files, see
also, the *note filecmp: 5a. module.

 -- Classe: difflib.SequenceMatcher

     This is a flexible class for comparing pairs of sequences of any
     type, so long as the sequence elements are *note hashable: 610.
     The basic algorithm predates, and is a little fancier than, an
     algorithm published in the late 1980’s by Ratcliff and Obershelp
     under the hyperbolic name “gestalt pattern matching.” The idea is
     to find the longest contiguous matching subsequence that contains
     no “junk” elements; these “junk” elements are ones that are
     uninteresting in some sense, such as blank lines or whitespace.
     (Handling junk is an extension to the Ratcliff and Obershelp
     algorithm.)  The same idea is then applied recursively to the
     pieces of the sequences to the left and to the right of the
     matching subsequence.  This does not yield minimal edit sequences,
     but does tend to yield matches that “look right” to people.

     'Timing:' The basic Ratcliff-Obershelp algorithm is cubic time in
     the worst case and quadratic time in the expected case.  *note
     SequenceMatcher: 104f. is quadratic time for the worst case and has
     expected-case behavior dependent in a complicated way on how many
     elements the sequences have in common; best case time is linear.

     'Automatic junk heuristic:' *note SequenceMatcher: 104f. supports a
     heuristic that automatically treats certain sequence items as junk.
     The heuristic counts how many times each individual item appears in
     the sequence.  If an item’s duplicates (after the first one)
     account for more than 1% of the sequence and the sequence is at
     least 200 items long, this item is marked as “popular” and is
     treated as junk for the purpose of sequence matching.  This
     heuristic can be turned off by setting the ‘autojunk’ argument to
     ‘False’ when creating the *note SequenceMatcher: 104f.

     Alterado na versão 3.2: Added the 'autojunk' parameter.

 -- Classe: difflib.Differ

     This is a class for comparing sequences of lines of text, and
     producing human-readable differences or deltas.  Differ uses *note
     SequenceMatcher: 104f. both to compare sequences of lines, and to
     compare sequences of characters within similar (near-matching)
     lines.

     Each line of a *note Differ: 24c2. delta begins with a two-letter
     code:

     Código         Significado
                    
     ---------------------------------------------------------------
                    
     ‘'- '’         line unique to sequence 1
                    
                    
     ‘'+ '’         line unique to sequence 2
                    
                    
     ‘' '’          line common to both sequences
                    
                    
     ‘'? '’         line not present in either input sequence
                    

     Lines beginning with ‘‘?’’ attempt to guide the eye to intraline
     differences, and were not present in either input sequence.  These
     lines can be confusing if the sequences contain whitespace
     characters, such as spaces, tabs or line breaks.

 -- Classe: difflib.HtmlDiff

     This class can be used to create an HTML table (or a complete HTML
     file containing the table) showing a side by side, line by line
     comparison of text with inter-line and intra-line change
     highlights.  The table can be generated in either full or
     contextual difference mode.

     The constructor for this class is:

      -- Método: __init__ (tabsize=8, wrapcolumn=None, linejunk=None,
               charjunk=IS_CHARACTER_JUNK)

          Initializes instance of *note HtmlDiff: 1644.

          'tabsize' is an optional keyword argument to specify tab stop
          spacing and defaults to ‘8’.

          'wrapcolumn' is an optional keyword to specify column number
          where lines are broken and wrapped, defaults to ‘None’ where
          lines are not wrapped.

          'linejunk' and 'charjunk' are optional keyword arguments
          passed into *note ndiff(): 24c4. (used by *note HtmlDiff:
          1644. to generate the side by side HTML differences).  See
          *note ndiff(): 24c4. documentation for argument default values
          and descriptions.

     The following methods are public:

      -- Método: make_file (fromlines, tolines, fromdesc='', todesc='',
               context=False, numlines=5, *, charset='utf-8')

          Compares 'fromlines' and 'tolines' (lists of strings) and
          returns a string which is a complete HTML file containing a
          table showing line by line differences with inter-line and
          intra-line changes highlighted.

          'fromdesc' and 'todesc' are optional keyword arguments to
          specify from/to file column header strings (both default to an
          empty string).

          'context' and 'numlines' are both optional keyword arguments.
          Set 'context' to ‘True’ when contextual differences are to be
          shown, else the default is ‘False’ to show the full files.
          'numlines' defaults to ‘5’.  When 'context' is ‘True’
          'numlines' controls the number of context lines which surround
          the difference highlights.  When 'context' is ‘False’
          'numlines' controls the number of lines which are shown before
          a difference highlight when using the “next” hyperlinks
          (setting to zero would cause the “next” hyperlinks to place
          the next difference highlight at the top of the browser
          without any leading context).

               Nota: 'fromdesc' and 'todesc' are interpreted as
               unescaped HTML and should be properly escaped while
               receiving input from untrusted sources.

          Alterado na versão 3.5: 'charset' keyword-only argument was
          added.  The default charset of HTML document changed from
          ‘'ISO-8859-1'’ to ‘'utf-8'’.

      -- Método: make_table (fromlines, tolines, fromdesc='', todesc='',
               context=False, numlines=5)

          Compares 'fromlines' and 'tolines' (lists of strings) and
          returns a string which is a complete HTML table showing line
          by line differences with inter-line and intra-line changes
          highlighted.

          The arguments for this method are the same as those for the
          *note make_file(): e1b. method.

 -- Função: difflib.context_diff (a, b, fromfile='', tofile='',
          fromfiledate='', tofiledate='', n=3, lineterm='\n')

     Compare 'a' and 'b' (lists of strings); return a delta (a *note
     generator: 109a. generating the delta lines) in context diff
     format.

     Context diffs are a compact way of showing just the lines that have
     changed plus a few lines of context.  The changes are shown in a
     before/after style.  The number of context lines is set by 'n'
     which defaults to three.

     By default, the diff control lines (those with ‘***’ or ‘---’) are
     created with a trailing newline.  This is helpful so that inputs
     created from *note io.IOBase.readlines(): 24c7. result in diffs
     that are suitable for use with *note io.IOBase.writelines(): 15a1.
     since both the inputs and outputs have trailing newlines.

     For inputs that do not have trailing newlines, set the 'lineterm'
     argument to ‘""’ so that the output will be uniformly newline free.

     The context diff format normally has a header for filenames and
     modification times.  Any or all of these may be specified using
     strings for 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'.
     The modification times are normally expressed in the ISO 8601
     format.  If not specified, the strings default to blanks.

          >>> import sys
          >>> from difflib import *
          >>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
          >>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
          >>> sys.stdout.writelines(context_diff(s1, s2, fromfile='before.py',
          ...                        tofile='after.py'))
          *** before.py
          --- after.py
          ***************
          *** 1,4 ****
          ! bacon
          ! eggs
          ! ham
            guido
          --- 1,4 ----
          ! python
          ! eggy
          ! hamster
            guido

     See *note A command-line interface to difflib: 24c8. for a more
     detailed example.

 -- Função: difflib.get_close_matches (word, possibilities, n=3,
          cutoff=0.6)

     Return a list of the best “good enough” matches.  'word' is a
     sequence for which close matches are desired (typically a string),
     and 'possibilities' is a list of sequences against which to match
     'word' (typically a list of strings).

     Optional argument 'n' (default ‘3’) is the maximum number of close
     matches to return; 'n' must be greater than ‘0’.

     Optional argument 'cutoff' (default ‘0.6’) is a float in the range
     [0, 1].  Possibilities that don’t score at least that similar to
     'word' are ignored.

     The best (no more than 'n') matches among the possibilities are
     returned in a list, sorted by similarity score, most similar first.

          >>> get_close_matches('appel', ['ape', 'apple', 'peach', 'puppy'])
          ['apple', 'ape']
          >>> import keyword
          >>> get_close_matches('wheel', keyword.kwlist)
          ['while']
          >>> get_close_matches('pineapple', keyword.kwlist)
          []
          >>> get_close_matches('accept', keyword.kwlist)
          ['except']

 -- Função: difflib.ndiff (a, b, linejunk=None,
          charjunk=IS_CHARACTER_JUNK)

     Compare 'a' and 'b' (lists of strings); return a *note Differ:
     24c2.-style delta (a *note generator: 109a. generating the delta
     lines).

     Optional keyword parameters 'linejunk' and 'charjunk' are filtering
     functions (or ‘None’):

     'linejunk': A function that accepts a single string argument, and
     returns true if the string is junk, or false if not.  The default
     is ‘None’.  There is also a module-level function *note
     IS_LINE_JUNK(): 24ca, which filters out lines without visible
     characters, except for at most one hash character (‘'#'’) – however
     the underlying *note SequenceMatcher: 104f. class does a dynamic
     analysis of which lines are so frequent as to constitute noise, and
     this usually works better than using this function.

     'charjunk': A function that accepts a character (a string of length
     1), and returns if the character is junk, or false if not.  The
     default is module-level function *note IS_CHARACTER_JUNK(): 24cb,
     which filters out whitespace characters (a blank or tab; it’s a bad
     idea to include newline in this!).

          >>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
          ...              'ore\ntree\nemu\n'.splitlines(keepends=True))
          >>> print(''.join(diff), end="")
          - one
          ?  ^
          + ore
          ?  ^
          - two
          - three
          ?  -
          + tree
          + emu

 -- Função: difflib.restore (sequence, which)

     Return one of the two sequences that generated a delta.

     Given a 'sequence' produced by *note Differ.compare(): 24cd. or
     *note ndiff(): 24c4, extract lines originating from file 1 or 2
     (parameter 'which'), stripping off line prefixes.

     Exemplo:

          >>> diff = ndiff('one\ntwo\nthree\n'.splitlines(keepends=True),
          ...              'ore\ntree\nemu\n'.splitlines(keepends=True))
          >>> diff = list(diff) # materialize the generated delta into a list
          >>> print(''.join(restore(diff, 1)), end="")
          one
          two
          three
          >>> print(''.join(restore(diff, 2)), end="")
          ore
          tree
          emu

 -- Função: difflib.unified_diff (a, b, fromfile='', tofile='',
          fromfiledate='', tofiledate='', n=3, lineterm='\n')

     Compare 'a' and 'b' (lists of strings); return a delta (a *note
     generator: 109a. generating the delta lines) in unified diff
     format.

     Unified diffs are a compact way of showing just the lines that have
     changed plus a few lines of context.  The changes are shown in an
     inline style (instead of separate before/after blocks).  The number
     of context lines is set by 'n' which defaults to three.

     By default, the diff control lines (those with ‘---’, ‘+++’, or
     ‘@@’) are created with a trailing newline.  This is helpful so that
     inputs created from *note io.IOBase.readlines(): 24c7. result in
     diffs that are suitable for use with *note io.IOBase.writelines():
     15a1. since both the inputs and outputs have trailing newlines.

     For inputs that do not have trailing newlines, set the 'lineterm'
     argument to ‘""’ so that the output will be uniformly newline free.

     The unified diff format normally has a header for filenames and
     modification times.  Any or all of these may be specified using
     strings for 'fromfile', 'tofile', 'fromfiledate', and 'tofiledate'.
     The modification times are normally expressed in the ISO 8601
     format.  If not specified, the strings default to blanks.

          >>> s1 = ['bacon\n', 'eggs\n', 'ham\n', 'guido\n']
          >>> s2 = ['python\n', 'eggy\n', 'hamster\n', 'guido\n']
          >>> sys.stdout.writelines(unified_diff(s1, s2, fromfile='before.py', tofile='after.py'))
          --- before.py
          +++ after.py
          @@ -1,4 +1,4 @@
          -bacon
          -eggs
          -ham
          +python
          +eggy
          +hamster
           guido

     See *note A command-line interface to difflib: 24c8. for a more
     detailed example.

 -- Função: difflib.diff_bytes (dfunc, a, b, fromfile=b'', tofile=b'',
          fromfiledate=b'', tofiledate=b'', n=3, lineterm=b'\n')

     Compare 'a' and 'b' (lists of bytes objects) using 'dfunc'; yield a
     sequence of delta lines (also bytes) in the format returned by
     'dfunc'.  'dfunc' must be a callable, typically either *note
     unified_diff(): 24ce. or *note context_diff(): 24c6.

     Allows you to compare data with unknown or inconsistent encoding.
     All inputs except 'n' must be bytes objects, not str.  Works by
     losslessly converting all inputs (except 'n') to str, and calling
     ‘dfunc(a, b, fromfile, tofile, fromfiledate, tofiledate, n,
     lineterm)’.  The output of 'dfunc' is then converted back to bytes,
     so the delta lines that you receive have the same
     unknown/inconsistent encodings as 'a' and 'b'.

     Adicionado na versão 3.5.

 -- Função: difflib.IS_LINE_JUNK (line)

     Return ‘True’ for ignorable lines.  The line 'line' is ignorable if
     'line' is blank or contains a single ‘'#'’, otherwise it is not
     ignorable.  Used as a default for parameter 'linejunk' in *note
     ndiff(): 24c4. in older versions.

 -- Função: difflib.IS_CHARACTER_JUNK (ch)

     Return ‘True’ for ignorable characters.  The character 'ch' is
     ignorable if 'ch' is a space or tab, otherwise it is not ignorable.
     Used as a default for parameter 'charjunk' in *note ndiff(): 24c4.

Ver também
..........

Pattern Matching: The Gestalt Approach(2)

     Discussion of a similar algorithm by John W. Ratcliff and D. E.
     Metzener.  This was published in Dr.  Dobb’s Journal in July, 1988.

* Menu:

* SequenceMatcher Objects::
* SequenceMatcher Examples::
* Differ Objects::
* Differ Example::
* A command-line interface to difflib::
* ndiff example::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/difflib.py

   (2) 
https://jacobfilipp.com/DrDobbs/articles/DDJ/1988/8807/8807c/8807c.htm


File: python.info,  Node: SequenceMatcher Objects,  Next: SequenceMatcher Examples,  Up: difflib — Helpers for computing deltas

5.6.3.1 SequenceMatcher Objects
...............................

The *note SequenceMatcher: 104f. class has this constructor:

 -- Classe: difflib.SequenceMatcher (isjunk=None, a='', b='',
          autojunk=True)

     Optional argument 'isjunk' must be ‘None’ (the default) or a
     one-argument function that takes a sequence element and returns
     true if and only if the element is “junk” and should be ignored.
     Passing ‘None’ for 'isjunk' is equivalent to passing ‘lambda x:
     False’; in other words, no elements are ignored.  For example,
     pass:

          lambda x: x in " \t"

     if you’re comparing lines as sequences of characters, and don’t
     want to synch up on blanks or hard tabs.

     The optional arguments 'a' and 'b' are sequences to be compared;
     both default to empty strings.  The elements of both sequences must
     be *note hashable: 610.

     The optional argument 'autojunk' can be used to disable the
     automatic junk heuristic.

     Alterado na versão 3.2: Added the 'autojunk' parameter.

     SequenceMatcher objects get three data attributes: 'bjunk' is the
     set of elements of 'b' for which 'isjunk' is ‘True’; 'bpopular' is
     the set of non-junk elements considered popular by the heuristic
     (if it is not disabled); 'b2j' is a dict mapping the remaining
     elements of 'b' to a list of positions where they occur.  All three
     are reset whenever 'b' is reset with *note set_seqs(): 24d1. or
     *note set_seq2(): 24d2.

     Adicionado na versão 3.2: The 'bjunk' and 'bpopular' attributes.

     *note SequenceMatcher: 104f. objects have the following methods:

      -- Método: set_seqs (a, b)

          Set the two sequences to be compared.

     *note SequenceMatcher: 104f. computes and caches detailed
     information about the second sequence, so if you want to compare
     one sequence against many sequences, use *note set_seq2(): 24d2. to
     set the commonly used sequence once and call *note set_seq1():
     24d3. repeatedly, once for each of the other sequences.

      -- Método: set_seq1 (a)

          Set the first sequence to be compared.  The second sequence to
          be compared is not changed.

      -- Método: set_seq2 (b)

          Set the second sequence to be compared.  The first sequence to
          be compared is not changed.

      -- Método: find_longest_match (alo=0, ahi=None, blo=0, bhi=None)

          Find longest matching block in ‘a[alo:ahi]’ and ‘b[blo:bhi]’.

          If 'isjunk' was omitted or ‘None’, *note find_longest_match():
          1ad8. returns ‘(i, j, k)’ such that ‘a[i:i+k]’ is equal to
          ‘b[j:j+k]’, where ‘alo <= i <= i+k <= ahi’ and ‘blo <= j <=
          j+k <= bhi’.  For all ‘(i', j', k')’ meeting those conditions,
          the additional conditions ‘k >= k'’, ‘i <= i'’, and if ‘i ==
          i'’, ‘j <= j'’ are also met.  In other words, of all maximal
          matching blocks, return one that starts earliest in 'a', and
          of all those maximal matching blocks that start earliest in
          'a', return the one that starts earliest in 'b'.

               >>> s = SequenceMatcher(None, " abcd", "abcd abcd")
               >>> s.find_longest_match(0, 5, 0, 9)
               Match(a=0, b=4, size=5)

          If 'isjunk' was provided, first the longest matching block is
          determined as above, but with the additional restriction that
          no junk element appears in the block.  Then that block is
          extended as far as possible by matching (only) junk elements
          on both sides.  So the resulting block never matches on junk
          except as identical junk happens to be adjacent to an
          interesting match.

          Here’s the same example as before, but considering blanks to
          be junk.  That prevents ‘' abcd'’ from matching the ‘' abcd'’
          at the tail end of the second sequence directly.  Instead only
          the ‘'abcd'’ can match, and matches the leftmost ‘'abcd'’ in
          the second sequence:

               >>> s = SequenceMatcher(lambda x: x==" ", " abcd", "abcd abcd")
               >>> s.find_longest_match(0, 5, 0, 9)
               Match(a=1, b=0, size=4)

          If no blocks match, this returns ‘(alo, blo, 0)’.

          This method returns a *note named tuple: 64e. ‘Match(a, b,
          size)’.

          Alterado na versão 3.9: Added default arguments.

      -- Método: get_matching_blocks ()

          Return list of triples describing non-overlapping matching
          subsequences.  Each triple is of the form ‘(i, j, n)’, and
          means that ‘a[i:i+n] == b[j:j+n]’.  The triples are
          monotonically increasing in 'i' and 'j'.

          The last triple is a dummy, and has the value ‘(len(a),
          len(b), 0)’.  It is the only triple with ‘n == 0’.  If ‘(i, j,
          n)’ and ‘(i', j', n')’ are adjacent triples in the list, and
          the second is not the last triple in the list, then ‘i+n < i'’
          or ‘j+n < j'’; in other words, adjacent triples always
          describe non-adjacent equal blocks.

               >>> s = SequenceMatcher(None, "abxcd", "abcd")
               >>> s.get_matching_blocks()
               [Match(a=0, b=0, size=2), Match(a=3, b=2, size=2), Match(a=5, b=4, size=0)]

      -- Método: get_opcodes ()

          Return list of 5-tuples describing how to turn 'a' into 'b'.
          Each tuple is of the form ‘(tag, i1, i2, j1, j2)’.  The first
          tuple has ‘i1 == j1 == 0’, and remaining tuples have 'i1'
          equal to the 'i2' from the preceding tuple, and, likewise,
          'j1' equal to the previous 'j2'.

          The 'tag' values are strings, with these meanings:

          Valor               Significado
                              
          ----------------------------------------------------------------------
                              
          ‘'replace'’         ‘a[i1:i2]’ should be replaced by ‘b[j1:j2]’.
                              
                              
          ‘'delete'’          ‘a[i1:i2]’ should be deleted.  Note that ‘j1 ==
                              j2’ in this case.
                              
                              
          ‘'insert'’          ‘b[j1:j2]’ should be inserted at ‘a[i1:i1]’.
                              Note that ‘i1 == i2’ in this case.
                              
                              
          ‘'equal'’           ‘a[i1:i2] == b[j1:j2]’ (the sub-sequences are
                              equal).
                              

          Por exemplo:

               >>> a = "qabxcd"
               >>> b = "abycdf"
               >>> s = SequenceMatcher(None, a, b)
               >>> for tag, i1, i2, j1, j2 in s.get_opcodes():
               ...     print('{:7}   a[{}:{}] --> b[{}:{}] {!r:>8} --> {!r}'.format(
               ...         tag, i1, i2, j1, j2, a[i1:i2], b[j1:j2]))
               delete    a[0:1] --> b[0:0]      'q' --> ''
               equal     a[1:3] --> b[0:2]     'ab' --> 'ab'
               replace   a[3:4] --> b[2:3]      'x' --> 'y'
               equal     a[4:6] --> b[3:5]     'cd' --> 'cd'
               insert    a[6:6] --> b[5:6]       '' --> 'f'

      -- Método: get_grouped_opcodes (n=3)

          Return a *note generator: 109a. of groups with up to 'n' lines
          of context.

          Starting with the groups returned by *note get_opcodes():
          24d5, this method splits out smaller change clusters and
          eliminates intervening ranges which have no changes.

          The groups are returned in the same format as *note
          get_opcodes(): 24d5.

      -- Método: ratio ()

          Return a measure of the sequences’ similarity as a float in
          the range [0, 1].

          Where T is the total number of elements in both sequences, and
          M is the number of matches, this is 2.0*M / T. Note that this
          is ‘1.0’ if the sequences are identical, and ‘0.0’ if they
          have nothing in common.

          This is expensive to compute if *note get_matching_blocks():
          24d4. or *note get_opcodes(): 24d5. hasn’t already been
          called, in which case you may want to try *note quick_ratio():
          24d8. or *note real_quick_ratio(): 24d9. first to get an upper
          bound.

               Nota: Caution: The result of a *note ratio(): 24d7. call
               may depend on the order of the arguments.  For instance:

                    >>> SequenceMatcher(None, 'tide', 'diet').ratio()
                    0.25
                    >>> SequenceMatcher(None, 'diet', 'tide').ratio()
                    0.5

      -- Método: quick_ratio ()

          Return an upper bound on *note ratio(): 24d7. relatively
          quickly.

      -- Método: real_quick_ratio ()

          Return an upper bound on *note ratio(): 24d7. very quickly.

The three methods that return the ratio of matching to total characters
can give different results due to differing levels of approximation,
although *note quick_ratio(): 24d8. and *note real_quick_ratio(): 24d9.
are always at least as large as *note ratio(): 24d7.:

     >>> s = SequenceMatcher(None, "abcd", "bcde")
     >>> s.ratio()
     0.75
     >>> s.quick_ratio()
     0.75
     >>> s.real_quick_ratio()
     1.0


File: python.info,  Node: SequenceMatcher Examples,  Next: Differ Objects,  Prev: SequenceMatcher Objects,  Up: difflib — Helpers for computing deltas

5.6.3.2 SequenceMatcher Examples
................................

This example compares two strings, considering blanks to be “junk”:

     >>> s = SequenceMatcher(lambda x: x == " ",
     ...                     "private Thread currentThread;",
     ...                     "private volatile Thread currentThread;")

*note ratio(): 24d7. returns a float in [0, 1], measuring the similarity
of the sequences.  As a rule of thumb, a *note ratio(): 24d7. value over
0.6 means the sequences are close matches:

     >>> print(round(s.ratio(), 3))
     0.866

If you’re only interested in where the sequences match, *note
get_matching_blocks(): 24d4. is handy:

     >>> for block in s.get_matching_blocks():
     ...     print("a[%d] and b[%d] match for %d elements" % block)
     a[0] and b[0] match for 8 elements
     a[8] and b[17] match for 21 elements
     a[29] and b[38] match for 0 elements

Note that the last tuple returned by *note get_matching_blocks(): 24d4.
is always a dummy, ‘(len(a), len(b), 0)’, and this is the only case in
which the last tuple element (number of elements matched) is ‘0’.

If you want to know how to change the first sequence into the second,
use *note get_opcodes(): 24d5.:

     >>> for opcode in s.get_opcodes():
     ...     print("%6s a[%d:%d] b[%d:%d]" % opcode)
      equal a[0:8] b[0:8]
     insert a[8:8] b[8:17]
      equal a[8:29] b[17:38]

Ver também
..........

   * The *note get_close_matches(): 24c9. function in this module which
     shows how simple code building on *note SequenceMatcher: 104f. can
     be used to do useful work.

   * Simple version control recipe(1) for a small application built with
     *note SequenceMatcher: 104f.

   ---------- Footnotes ----------

   (1) 
https://code.activestate.com/recipes/576729-simple-version-control/


File: python.info,  Node: Differ Objects,  Next: Differ Example,  Prev: SequenceMatcher Examples,  Up: difflib — Helpers for computing deltas

5.6.3.3 Differ Objects
......................

Note that *note Differ: 24c2.-generated deltas make no claim to be
'minimal' diffs.  To the contrary, minimal diffs are often
counter-intuitive, because they synch up anywhere possible, sometimes
accidental matches 100 pages apart.  Restricting synch points to
contiguous matches preserves some notion of locality, at the occasional
cost of producing a longer diff.

The *note Differ: 24c2. class has this constructor:

 -- Classe: difflib.Differ (linejunk=None, charjunk=None)

     Optional keyword parameters 'linejunk' and 'charjunk' are for
     filter functions (or ‘None’):

     'linejunk': A function that accepts a single string argument, and
     returns true if the string is junk.  The default is ‘None’, meaning
     that no line is considered junk.

     'charjunk': A function that accepts a single character argument (a
     string of length 1), and returns true if the character is junk.
     The default is ‘None’, meaning that no character is considered
     junk.

     These junk-filtering functions speed up matching to find
     differences and do not cause any differing lines or characters to
     be ignored.  Read the description of the *note
     find_longest_match(): 1ad8. method’s 'isjunk' parameter for an
     explanation.

     *note Differ: 24c2. objects are used (deltas generated) via a
     single method:

      -- Método: compare (a, b)

          Compare two sequences of lines, and generate the delta (a
          sequence of lines).

          Each sequence must contain individual single-line strings
          ending with newlines.  Such sequences can be obtained from the
          *note readlines(): 24c7. method of file-like objects.  The
          delta generated also consists of newline-terminated strings,
          ready to be printed as-is via the *note writelines(): 15a1.
          method of a file-like object.


File: python.info,  Node: Differ Example,  Next: A command-line interface to difflib,  Prev: Differ Objects,  Up: difflib — Helpers for computing deltas

5.6.3.4 Differ Example
......................

This example compares two texts.  First we set up the texts, sequences
of individual single-line strings ending with newlines (such sequences
can also be obtained from the *note readlines(): 24c7. method of
file-like objects):

     >>> text1 = '''  1. Beautiful is better than ugly.
     ...   2. Explicit is better than implicit.
     ...   3. Simple is better than complex.
     ...   4. Complex is better than complicated.
     ... '''.splitlines(keepends=True)
     >>> len(text1)
     4
     >>> text1[0][-1]
     '\n'
     >>> text2 = '''  1. Beautiful is better than ugly.
     ...   3.   Simple is better than complex.
     ...   4. Complicated is better than complex.
     ...   5. Flat is better than nested.
     ... '''.splitlines(keepends=True)

Next we instantiate a Differ object:

     >>> d = Differ()

Note that when instantiating a *note Differ: 24c2. object we may pass
functions to filter out line and character “junk.” See the *note
Differ(): 24c2. constructor for details.

Finally, we compare the two:

     >>> result = list(d.compare(text1, text2))

‘result’ is a list of strings, so let’s pretty-print it:

     >>> from pprint import pprint
     >>> pprint(result)
     ['    1. Beautiful is better than ugly.\n',
      '-   2. Explicit is better than implicit.\n',
      '-   3. Simple is better than complex.\n',
      '+   3.   Simple is better than complex.\n',
      '?     ++\n',
      '-   4. Complex is better than complicated.\n',
      '?            ^                     ---- ^\n',
      '+   4. Complicated is better than complex.\n',
      '?           ++++ ^                      ^\n',
      '+   5. Flat is better than nested.\n']

As a single multi-line string it looks like this:

     >>> import sys
     >>> sys.stdout.writelines(result)
         1. Beautiful is better than ugly.
     -   2. Explicit is better than implicit.
     -   3. Simple is better than complex.
     +   3.   Simple is better than complex.
     ?     ++
     -   4. Complex is better than complicated.
     ?            ^                     ---- ^
     +   4. Complicated is better than complex.
     ?           ++++ ^                      ^
     +   5. Flat is better than nested.


File: python.info,  Node: A command-line interface to difflib,  Next: ndiff example,  Prev: Differ Example,  Up: difflib — Helpers for computing deltas

5.6.3.5 A command-line interface to difflib
...........................................

This example shows how to use difflib to create a ‘diff’-like utility.

     """ Command line interface to difflib.py providing diffs in four formats:

     * ndiff:    lists every line and highlights interline changes.
     * context:  highlights clusters of changes in a before/after format.
     * unified:  highlights clusters of changes in an inline format.
     * html:     generates side by side comparison with change highlights.

     """

     import sys, os, difflib, argparse
     from datetime import datetime, timezone

     def file_mtime(path):
         t = datetime.fromtimestamp(os.stat(path).st_mtime,
                                    timezone.utc)
         return t.astimezone().isoformat()

     def main():

         parser = argparse.ArgumentParser()
         parser.add_argument('-c', action='store_true', default=False,
                             help='Produce a context format diff (default)')
         parser.add_argument('-u', action='store_true', default=False,
                             help='Produce a unified format diff')
         parser.add_argument('-m', action='store_true', default=False,
                             help='Produce HTML side by side diff '
                                  '(can use -c and -l in conjunction)')
         parser.add_argument('-n', action='store_true', default=False,
                             help='Produce a ndiff format diff')
         parser.add_argument('-l', '--lines', type=int, default=3,
                             help='Set number of context lines (default 3)')
         parser.add_argument('fromfile')
         parser.add_argument('tofile')
         options = parser.parse_args()

         n = options.lines
         fromfile = options.fromfile
         tofile = options.tofile

         fromdate = file_mtime(fromfile)
         todate = file_mtime(tofile)
         with open(fromfile) as ff:
             fromlines = ff.readlines()
         with open(tofile) as tf:
             tolines = tf.readlines()

         if options.u:
             diff = difflib.unified_diff(fromlines, tolines, fromfile, tofile, fromdate, todate, n=n)
         elif options.n:
             diff = difflib.ndiff(fromlines, tolines)
         elif options.m:
             diff = difflib.HtmlDiff().make_file(fromlines,tolines,fromfile,tofile,context=options.c,numlines=n)
         else:
             diff = difflib.context_diff(fromlines, tolines, fromfile, tofile, fromdate, todate, n=n)

         sys.stdout.writelines(diff)

     if __name__ == '__main__':
         main()


File: python.info,  Node: ndiff example,  Prev: A command-line interface to difflib,  Up: difflib — Helpers for computing deltas

5.6.3.6 ndiff example
.....................

This example shows how to use *note difflib.ndiff(): 24c4.

     """ndiff [-q] file1 file2
         or
     ndiff (-r1 | -r2) < ndiff_output > file1_or_file2

     Print a human-friendly file difference report to stdout.  Both inter-
     and intra-line differences are noted.  In the second form, recreate file1
     (-r1) or file2 (-r2) on stdout, from an ndiff report on stdin.

     In the first form, if -q ("quiet") is not specified, the first two lines
     of output are

     -: file1
     +: file2

     Each remaining line begins with a two-letter code:

         "- "    line unique to file1
         "+ "    line unique to file2
         "  "    line common to both files
         "? "    line not present in either input file

     Lines beginning with "? " attempt to guide the eye to intraline
     differences, and were not present in either input file.  These lines can be
     confusing if the source files contain tab characters.

     The first file can be recovered by retaining only lines that begin with
     "  " or "- ", and deleting those 2-character prefixes; use ndiff with -r1.

     The second file can be recovered similarly, but by retaining only "  " and
     "+ " lines; use ndiff with -r2; or, on Unix, the second file can be
     recovered by piping the output through

         sed -n '/^[+ ] /s/^..//p'
     """

     __version__ = 1, 7, 0

     import difflib, sys

     def fail(msg):
         out = sys.stderr.write
         out(msg + "\n\n")
         out(__doc__)
         return 0

     # open a file & return the file object; gripe and return 0 if it
     # couldn't be opened
     def fopen(fname):
         try:
             return open(fname)
         except IOError as detail:
             return fail("couldn't open " + fname + ": " + str(detail))

     # open two files & spray the diff to stdout; return false iff a problem
     def fcompare(f1name, f2name):
         f1 = fopen(f1name)
         f2 = fopen(f2name)
         if not f1 or not f2:
             return 0

         a = f1.readlines(); f1.close()
         b = f2.readlines(); f2.close()
         for line in difflib.ndiff(a, b):
             print(line, end=' ')

         return 1

     # crack args (sys.argv[1:] is normal) & compare;
     # return false iff a problem

     def main(args):
         import getopt
         try:
             opts, args = getopt.getopt(args, "qr:")
         except getopt.error as detail:
             return fail(str(detail))
         noisy = 1
         qseen = rseen = 0
         for opt, val in opts:
             if opt == "-q":
                 qseen = 1
                 noisy = 0
             elif opt == "-r":
                 rseen = 1
                 whichfile = val
         if qseen and rseen:
             return fail("can't specify both -q and -r")
         if rseen:
             if args:
                 return fail("no args allowed with -r option")
             if whichfile in ("1", "2"):
                 restore(whichfile)
                 return 1
             return fail("-r value must be 1 or 2")
         if len(args) != 2:
             return fail("need 2 filename args")
         f1name, f2name = args
         if noisy:
             print('-:', f1name)
             print('+:', f2name)
         return fcompare(f1name, f2name)

     # read ndiff output from stdin, and print file1 (which=='1') or
     # file2 (which=='2') to stdout

     def restore(which):
         restored = difflib.restore(sys.stdin.readlines(), which)
         sys.stdout.writelines(restored)

     if __name__ == '__main__':
         main(sys.argv[1:])


File: python.info,  Node: textwrap — Quebra automática e preenchimento de texto,  Next: unicodedata — Banco de dados de Unicode,  Prev: difflib — Helpers for computing deltas,  Up: Serviços de Processamento de Texto

5.6.4 ‘textwrap’ — Quebra automática e preenchimento de texto
-------------------------------------------------------------

'Código-fonte:' Lib/textwrap.py(1)

__________________________________________________________________

O módulo *note textwrap: ec. fornece algumas funções convenientes, assim
como *note TextWrapper: 1003, a classe que faz todo o trabalho.  Se você
estiver apenas preenchendo ou fazendo quebra de linha de uma ou duas
strings, as funções de conveniência deverão ser boas o suficiente; caso
contrário, você deve usar uma instância de *note TextWrapper: 1003. para
eficiência.

 -- Função: textwrap.wrap (text, width=70, *, initial_indent='',
          subsequent_indent='', expand_tabs=True,
          replace_whitespace=True, fix_sentence_endings=False,
          break_long_words=True, drop_whitespace=True,
          break_on_hyphens=True, tabsize=8, max_lines=None,
          placeholder=' [...]')

     Quebra do parágrafo único em 'text' (uma string) para que cada
     linha tenha no máximo 'width' caracteres.  Retorna uma lista de
     linhas de saída, sem novas linhas ao final.

     Argumentos nomeados opcionais correspondem aos atributos de
     instância de *note TextWrapper: 1003, documentados abaixo.

     Veja o método *note TextWrapper.wrap(): 24e5. para detalhes
     adicionais sobre como *note wrap(): 150f. se comporta.

 -- Função: textwrap.fill (text, width=70, *, initial_indent='',
          subsequent_indent='', expand_tabs=True,
          replace_whitespace=True, fix_sentence_endings=False,
          break_long_words=True, drop_whitespace=True,
          break_on_hyphens=True, tabsize=8, max_lines=None,
          placeholder=' [...]')

     Quebra o parágrafo único em 'text' e retorna uma única string
     contendo o parágrafo quebrado.  *note fill(): 150e. é uma
     abreviação de

          "\n".join(wrap(text, ...))

     Em particular, *note fill(): 150e. aceita exatamente os mesmos
     argumentos nomeados que *note wrap(): 150f.

 -- Função: textwrap.shorten (text, width, *,
          fix_sentence_endings=False, break_long_words=True,
          break_on_hyphens=True, placeholder=' [...]')

     Recolhe e trunca o texto 'text' fornecido para caber na largura
     'width' fornecida.

     Primeiro, o espaço em branco em 'text' é recolhido (todos os
     espaços em branco são substituídos por espaços simples).  Se o
     resultado couber em 'width', ele será retornado.  Caso contrário,
     palavras suficientes serão eliminadas do final para que as palavras
     restantes mais o 'placeholder' caibam em 'largura':

          >>> textwrap.shorten("Olá  mundo!", width=12)
          'Olá mundo!'
          >>> textwrap.shorten("Olá  mundo!", width=11)
          'Olá [...]'
          >>> textwrap.shorten("Olá mundo", width=10, placeholder="...")
          'Olá...'

     Argumentos nomeados opcionais correspondem aos atributos de
     instância de *note TextWrapper: 1003, documentados abaixo.  Observe
     que o espaço em branco é recolhido antes do texto ser passado para
     a função *note TextWrapper: 1003. *note fill(): 150e, alterando
     assim o valor de *note tabsize: 24e6, *note expand_tabs: 24e7,
     *note drop_whitespace: 24e8. e *note replace_whitespace: 24e9. não
     terão efeito.

     Adicionado na versão 3.4.

 -- Função: textwrap.dedent (text)

     Remove qualquer espaço em branco inicial em comum de toda linha em
     'text'.

     Isso pode ser usado para alinhar strings entre aspas triplas com a
     borda esquerda da tela, enquanto ainda as apresenta no código-fonte
     em formato com indentação.

     Observe que tabulações e espaços são tratados como espaços em
     branco, mas não são iguais: as linhas ‘" hello"’ e ‘"\thello"’ são
     consideradas como não tendo espaços em branco iniciais comuns.

     Linhas contendo apenas espaços em branco são ignoradas na entrada e
     normalizadas para um único caractere de nova linha na saída.

     Por exemplo:

          def test():
              # fim da primeira linha com \ para evitar uma linha vazia!
              s = '''\
              olá
                mundo
              '''
              print(repr(s))          # exibe '    olá\n      mundo\n    '
              print(repr(dedent(s)))  # exibe 'olá\n  mundo\n'

 -- Função: textwrap.indent (text, prefix, predicate=None)

     Adiciona 'prefix' ao início das linhas selecionadas em 'text'.

     As linhas são separadas chamando ‘text.splitlines(True)’.

     Por padrão, 'prefix' é adicionado a todas as linhas que não
     consistem apenas em espaços em branco (incluindo quaisquer finais
     de linha).

     Por exemplo:

          >>> s = 'olá\n\n \nmundo'
          >>> indent(s, '  ')
          '  olá\n\n \n  mundo'

     O argumento opcional 'predicate' pode ser usado para controlar
     quais linhas têm indentação.  Por exemplo, é fácil adicionar
     'prefix' até mesmo em linhas vazias e apenas com espaços em branco:

          >>> print(indent(s, '+ ', lambda line: True))
          + olá
          +
          +
          + mundo

     Adicionado na versão 3.3.

*note wrap(): 150f, *note fill(): 150e. e *note shorten(): 1006.
funcionam criando uma instância *note TextWrapper: 1003. e chamando um
único método nela.  Essa instância não é reutilizada, então para
aplicações que processam muitas strings de texto usando *note wrap():
150f. e/ou *note fill(): 150e, pode ser mais eficiente criar seu próprio
objeto *note TextWrapper: 1003.

O texto é preferencialmente colocado em espaços em branco e logo após os
hífens nas palavras hifenizadas; somente então palavras longas serão
quebradas se necessário, a menos que *note TextWrapper.break_long_words:
24eb. seja definido como falso.

 -- Classe: textwrap.TextWrapper (**kwargs)

     O construtor *note TextWrapper: 1003. aceita vários argumentos
     nomeados opcionais.  Cada argumento nomeado corresponde a um
     atributo de instância, por exemplo:

          wrapper = TextWrapper(initial_indent="* ")

     é o mesmo que

          wrapper = TextWrapper()
          wrapper.initial_indent = "* "

     Você pode reutilizar o mesmo objeto *note TextWrapper: 1003. muitas
     vezes e pode alterar qualquer uma de suas opções através de
     atribuição direta a atributos de instância entre os usos.

     Os atributos de instância *note TextWrapper: 1003. (e argumentos
     nomeados para o construtor) são os seguintes:

      -- Atributo: width

          (padrão: ‘70’) O comprimento máximo das linhas quebradas.
          Contanto que não existam palavras individuais no texto de
          entrada maiores que *note width: 24ec, *note TextWrapper:
          1003. garante que nenhuma linha de saída será maior que *note
          width: 24ec. caracteres.

      -- Atributo: expand_tabs

          (padrão: ‘True’) Se verdadeiro, então todos os caracteres de
          tabulação em 'text' serão expandidos para espaços usando o
          método *note expandtabs(): 2356. de 'text'.

      -- Atributo: tabsize

          (padrão: ‘8’) Se *note expand_tabs: 24e7. for verdadeiro,
          então todos os caracteres de tabulação em 'text' serão
          expandidos para zero ou mais espaços, dependendo da coluna
          atual e do tamanho da tabulação fornecido.

          Adicionado na versão 3.3.

      -- Atributo: replace_whitespace

          (padrão: ‘True’) Se verdadeiro, após a expansão da tabulação,
          mas antes da quebra, o método *note wrap(): 150f. substituirá
          cada caractere de espaço em branco por um único espaço.  Os
          caracteres de espaço em branco substituídos são os seguintes:
          tabulação, nova linha, tabulação vertical, feed de formulário
          e retorno de carro (‘'\t\n\v\f\r'’).

               Nota: Se *note expand_tabs: 24e7. for falso e *note
               replace_whitespace: 24e9. for verdadeiro, cada caractere
               de tabulação será substituído por um único espaço, que
               'não' é o mesmo que expansão de tabulação.

               Nota: Se *note replace_whitespace: 24e9. for falso, novas
               linhas podem aparecer no meio de uma linha e causar uma
               saída estranha.  Por esta razão, o texto deve ser
               dividido em parágrafos (usando *note str.splitlines():
               1298. ou similar) que são agrupados separadamente.

      -- Atributo: drop_whitespace

          (padrão: ‘True’) Se verdadeiro, os espaços em branco no início
          e no final de cada linha (após quebra automática, mas antes do
          recuo) são eliminados.  O espaço em branco no início do
          parágrafo, entretanto, não será eliminado se não houver espaço
          em branco após ele.  Se o espaço em branco eliminado ocupar
          uma linha inteira, a linha inteira será eliminada.

      -- Atributo: initial_indent

          (padrão: ‘''’) String que será anexada à primeira linha da
          saída com quebra de linha.  Conta para o comprimento da
          primeira linha.  A string vazia não recebe indentação.

      -- Atributo: subsequent_indent

          (padrão: ‘''’) String que será anexada a todas as linhas da
          saída com quebra de linha, exceto a primeira.  Conta para o
          comprimento de cada linha, exceto a primeira.

      -- Atributo: fix_sentence_endings

          (padrão: ‘False’) Se verdadeiro, *note TextWrapper: 1003.
          tenta detectar finais de sentenças e garantir que as sentenças
          sejam sempre separadas por exatamente dois espaços.  Isso
          geralmente é desejado para texto em fonte monoespaçada.  No
          entanto, o algoritmo de detecção de frase é imperfeito: ele
          presume que o final de uma frase consiste em uma letra
          minúscula seguida por uma de ‘'.'’, ‘'!'’ ou ‘'?'’,
          possivelmente seguido por um de ‘'"'’ ou ‘"'"’, seguido por um
          espaço.  Um problema com este algoritmo é que ele é incapaz de
          detectar a diferença entre “Dr.” em

               [...] Dr. Frankenstein's monster [...]

          e “Spot.” em

               [...] See Spot. See Spot run [...]

          *note fix_sentence_endings: 24ef. é falso por padrão

          Como o algoritmo de detecção de frase depende de
          ‘string.lowercase’ para a definição de “letra minúscula” e de
          uma convenção de usar dois espaços após um ponto final para
          separar frases na mesma linha, ele é específico para textos em
          inglês.

      -- Atributo: break_long_words

          (padrão: ‘True’) Se verdadeiro, palavras maiores que *note
          width: 24ec. serão quebradas para garantir que nenhuma linha
          seja maior que *note width: 24ec.  Se for falso, palavras
          longas não serão quebradas e algumas linhas poderão ser
          maiores que *note width: 24ec.  (Palavras longas serão
          colocadas sozinhas em uma linha, a fim de minimizar o valor
          pelo qual *note width: 24ec. é excedido.)

      -- Atributo: break_on_hyphens

          (padrão: ‘True’) Se verdadeiro, a quebra ocorrerá
          preferencialmente em espaços em branco e logo após hífens em
          palavras compostas, como é habitual em inglês.  Se for falso,
          apenas os espaços em branco serão considerados locais
          potencialmente bons para quebras de linha, mas você precisa
          definir *note break_long_words: 24eb. como falso se quiser
          palavras verdadeiramente inseparáveis.  O comportamento padrão
          nas versões anteriores era sempre permitir a quebra de
          palavras hifenizadas.

      -- Atributo: max_lines

          (padrão: ‘None’) Se não for ‘None’, então a saída conterá no
          máximo 'max_lines' linhas, com 'placeholder' aparecendo no
          final da saída.

          Adicionado na versão 3.4.

      -- Atributo: placeholder

          (padrão: ‘' [...]'’) String que aparecerá no final do texto de
          saída se ele tiver sido truncado.

          Adicionado na versão 3.4.

     *note TextWrapper: 1003. também fornece alguns métodos públicos,
     análogos às funções de conveniência em nível de módulo:

      -- Método: wrap (text)

          Quebra o parágrafo único em 'text' (uma string) para que cada
          linha tenha no máximo *note width: 24ec. caracteres.  Todas as
          opções de quebra de linha são obtidas dos atributos da
          instância *note TextWrapper: 1003.  Retorna uma lista de
          linhas de saída, sem novas linhas finais.  Se a saída agrupada
          não tiver conteúdo, a lista retornada estará vazia.

      -- Método: fill (text)

          Quebra o parágrafo único em 'text' e retorna uma única string
          contendo o parágrafo quebrado.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/textwrap.py


File: python.info,  Node: unicodedata — Banco de dados de Unicode,  Next: stringprep — Preparação de string para internet,  Prev: textwrap — Quebra automática e preenchimento de texto,  Up: Serviços de Processamento de Texto

5.6.5 ‘unicodedata’ — Banco de dados de Unicode
-----------------------------------------------

__________________________________________________________________

This module provides access to the Unicode Character Database (UCD)
which defines character properties for all Unicode characters.  The data
contained in this database is compiled from the UCD version 15.1.0(1).

O módulo utiliza os mesmos nomes e símbolos definidos no Anexo 44 do
Padrão Unicode, "Unicode Character Database"(2).  Ele define as
seguintes funções:

Ver também
..........

O *note Unicode: 12e7. para mais informações sobre Unicode e como usar
este módulo.

 -- Função: unicodedata.lookup (name)

     Procurar personagem pelo nome.  Se um personagem com o nome
     fornecido for encontrado, retornar o personagem correspondente.  Se
     não for encontrado, *note KeyError: 344. é levantada.  Por exemplo:

          >>> unicodedata.lookup('LEFT CURLY BRACKET')
          '{'

     Os caracteres retornados por esta função são os mesmos produzidos
     pela sequência de escape ‘\N’ em literais de string.  Por exemplo:

          >>> unicodedata.lookup('MIDDLE DOT') == '\N{MIDDLE DOT}'
          True

     Alterado na versão 3.3: Foi adicionado suporte para apelidos de
     nomes (3) e sequências nomeadas (4).

 -- Função: unicodedata.name (chr, default=None, /)

     Retorna o nome atribuído ao caractere 'chr' como uma string.  Se
     nenhum nome for definido, 'default' será retornado ou, se não for
     fornecido, *note ValueError: 202. será levantada.  Por exemplo:

          >>> unicodedata.name('½')
          'VULGAR FRACTION ONE HALF'
          >>> unicodedata.name('\uFFFF', 'fallback')
          'fallback'

 -- Função: unicodedata.decimal (chr, default=None, /)

     Retorna o valor decimal atribuído ao caractere 'chr' como inteiro.
     Se nenhum valor for definido, 'default' será retornado ou, se não
     for fornecido, *note ValueError: 202. será levantada.  Por exemplo:

          >>> unicodedata.decimal('\N{ARABIC-INDIC DIGIT NINE}')
          9
          >>> unicodedata.decimal('\N{SUPERSCRIPT NINE}', -1)
          -1

 -- Função: unicodedata.digit (chr, default=None, /)

     Retorna o valor de dígito atribuído ao caractere 'chr' como
     inteiro.  Se nenhum valor for definido, 'default' será retornado
     ou, se não for fornecido, *note ValueError: 202. será levantada.

          >>> unicodedata.digit('\N{SUPERSCRIPT NINE}')
          9

 -- Função: unicodedata.numeric (chr, default=None, /)

     Retorna o valor numérico atribuído ao caractere 'chr' como float.
     Se nenhum valor for definido, 'default' será retornado ou, se não
     for fornecido, *note ValueError: 202. será levantada.

          >>> unicodedata.numeric('½')
          0.5

 -- Função: unicodedata.category (chr)

     Returns the general category assigned to the character 'chr' as
     string.  General category names consist of two letters.  See the
     General Category Values section of the Unicode Character Database
     documentation(5) for a list of category codes.  For example:

          >>> unicodedata.category('A')  # 'L'etter, 'u'ppercase
          'Lu'

 -- Função: unicodedata.bidirectional (chr)

     Returns the bidirectional class assigned to the character 'chr' as
     string.  If no such value is defined, an empty string is returned.
     See the Bidirectional Class Values section of the Unicode Character
     Database(6) documentation for a list of bidirectional codes.  For
     example:

          >>> unicodedata.bidirectional('\N{ARABIC-INDIC DIGIT SEVEN}') # 'A'rabic, 'N'umber
          'AN'

 -- Função: unicodedata.combining (chr)

     Returns the canonical combining class assigned to the character
     'chr' as integer.  Returns ‘0’ if no combining class is defined.
     See the Canonical Combining Class Values section of the Unicode
     Character Database(7) for more information.

 -- Função: unicodedata.east_asian_width (chr)

     Returns the east asian width assigned to the character 'chr' as
     string.  For a list of widths and or more information, see the
     Unicode Standard Annex #11(8).

 -- Função: unicodedata.mirrored (chr)

     Returns the mirrored property assigned to the character 'chr' as
     integer.  Returns ‘1’ if the character has been identified as a
     “mirrored” character in bidirectional text, ‘0’ otherwise.  For
     example:

          >>> unicodedata.mirrored('>')
          1

 -- Função: unicodedata.decomposition (chr)

     Returns the character decomposition mapping assigned to the
     character 'chr' as string.  An empty string is returned in case no
     such mapping is defined.  For example:

          >>> unicodedata.decomposition('Ã')
          '0041 0303'

 -- Função: unicodedata.normalize (form, unistr)

     Return the normal form 'form' for the Unicode string 'unistr'.
     Valid values for 'form' are ‘NFC’, ‘NFKC’, ‘NFD’, and ‘NFKD’.

     The Unicode standard defines various normalization forms of a
     Unicode string, based on the definition of canonical equivalence
     and compatibility equivalence.  In Unicode, several characters can
     be expressed in various way.  For example, the character U+00C7
     (LATIN CAPITAL LETTER C WITH CEDILLA) can also be expressed as the
     sequence U+0043 (LATIN CAPITAL LETTER C) U+0327 (COMBINING
     CEDILLA).

     For each character, there are two normal forms: normal form C and
     normal form D. Normal form D (NFD) is also known as canonical
     decomposition, and translates each character into its decomposed
     form.  Normal form C (NFC) first applies a canonical decomposition,
     then composes pre-combined characters again.

     In addition to these two forms, there are two additional normal
     forms based on compatibility equivalence.  In Unicode, certain
     characters are supported which normally would be unified with other
     characters.  For example, U+2160 (ROMAN NUMERAL ONE) is really the
     same thing as U+0049 (LATIN CAPITAL LETTER I). However, it is
     supported in Unicode for compatibility with existing character sets
     (for example, gb2312).

     The normal form KD (NFKD) will apply the compatibility
     decomposition, that is, replace all compatibility characters with
     their equivalents.  The normal form KC (NFKC) first applies the
     compatibility decomposition, followed by the canonical composition.

     Even if two unicode strings are normalized and look the same to a
     human reader, if one has combining characters and the other
     doesn’t, they may not compare equal.

 -- Função: unicodedata.is_normalized (form, unistr)

     Return whether the Unicode string 'unistr' is in the normal form
     'form'.  Valid values for 'form' are ‘NFC’, ‘NFKC’, ‘NFD’, and
     ‘NFKD’.

     Adicionado na versão 3.8.

In addition, the module exposes the following constant:

 -- Dado: unicodedata.unidata_version

     The version of the Unicode database used in this module.

 -- Dado: unicodedata.ucd_3_2_0

     This is an object that has the same methods as the entire module,
     but uses the Unicode database version 3.2 instead, for applications
     that require this specific version of the Unicode database (such as
     IDNA).

   ---------- Footnotes ----------

   (1) https://www.unicode.org/Public/15.1.0/ucd

   (2) https://www.unicode.org/reports/tr44/

   (3) ‘https://www.unicode.org/Public/15.1.0/ucd/NameAliases.txt’

   (4) ‘https://www.unicode.org/Public/15.1.0/ucd/NamedSequences.txt’

   (5) 
https://www.unicode.org/reports/tr44/tr44-30.html#General_Category_Values

   (6) 
https://www.unicode.org/reports/tr44/tr44-30.html#Bidi_Class_Values

   (7) 
https://www.unicode.org/reports/tr44/tr44-30.html#Canonical_Combining_Class_Values

   (8) https://www.unicode.org/reports/tr11/tr11-41.html


File: python.info,  Node: stringprep — Preparação de string para internet,  Next: readline — Interface para o GNU readline,  Prev: unicodedata — Banco de dados de Unicode,  Up: Serviços de Processamento de Texto

5.6.6 ‘stringprep’ — Preparação de string para internet
-------------------------------------------------------

'Código-fonte:' Lib/stringprep.py(1)

__________________________________________________________________

Ao identificar coisas (como nomes de host) na internet, muitas vezes é
necessário comparar tais identificações para “igualdade”.  Exatamente
como essa comparação é executada pode depender do domínio da aplicação,
por exemplo, se deve ser insensível a maiúsculas e minúsculas ou não.
Também pode ser necessário restringir as possíveis identificações, para
permitir apenas identificações consistindo de caracteres “imprimíveis”.

RFC 3454(2) define um procedimento para “preparar” strings Unicode em
protocolos de internet.  Antes de passar strings para o fio, elas são
processadas com o procedimento de preparação, após o qual elas têm uma
certa forma normalizada.  O RFC define um conjunto de tabelas, que podem
ser combinadas em perfis.  Cada perfil deve definir quais tabelas ele
usa, e quais outras partes opcionais do procedimento ‘stringprep’ são
parte do perfil.  Um exemplo de um perfil ‘stringprep’ é ‘nameprep’, que
é usado para nomes de domínio internacionalizados.

O módulo *note stringprep: d4. expõe apenas as tabelas do RFC 3454(3).
Como essas tabelas seriam muito grandes para representar como
dicionários ou listas, o módulo usa o banco de dados de caracteres
Unicode internamente.  O código-fonte do módulo em si foi gerado usando
o utilitário ‘mkstringprep.py’.

Como resultado, essas tabelas são expostas como funções, não como
estruturas de dados.  Existem dois tipos de tabelas no RFC: conjuntos e
mapeamentos.  Para um conjunto, *note stringprep: d4. fornece a “função
característica”, ou seja, uma função que retorna ‘True’ se o parâmetro
fizer parte do conjunto.  Para mapeamentos, ele fornece a função de
mapeamento: dada a chave, ele retorna o valor associado.  Abaixo está
uma lista de todas as funções disponíveis no módulo.

 -- Função: stringprep.in_table_a1 (code)

     Determina se 'code' está na tabela A.1 (pontos de código não
     atribuídos no Unicode 3.2).

 -- Função: stringprep.in_table_b1 (code)

     Determina se 'code' está na tabela B.1 (comumente mapeado para
     nada).

 -- Função: stringprep.map_table_b2 (code)

     Retorna o valor mapeado para 'code' de acordo com a tabela B.2
     (mapeamento para dobramento de casos usado com NFKC).

 -- Função: stringprep.map_table_b3 (code)

     Retorna o valor mapeado para 'code' de acordo com a tabela B.3
     (mapeamento para dobramento de casos usado com nenhuma
     normalização).

 -- Função: stringprep.in_table_c11 (code)

     Determina se 'code' está na tabela C.1.1 (caracteres de espaço
     ASCII).

 -- Função: stringprep.in_table_c12 (code)

     Determina se 'code' está na tabela C.1.2 (caracteres de espaço
     não-ASCII).

 -- Função: stringprep.in_table_c11_c12 (code)

     Determina se 'code' está na tabela C.1 (caracteres de espaço, união
     de C.1.1 e C.1.2).

 -- Função: stringprep.in_table_c21 (code)

     Determina se 'code' está na tabela C.2.1 (caracteres de controle
     ASCII).

 -- Função: stringprep.in_table_c22 (code)

     Determina se 'code' está na tabela C.2.2 (caracteres de controle
     não-ASCII).

 -- Função: stringprep.in_table_c21_c22 (code)

     Determina se 'code' está na tabela C.2 (caracteres de controle,
     união de C.2.1 e C.2.2).

 -- Função: stringprep.in_table_c3 (code)

     Determina se 'code' está na tabela C.3 (uso privado).

 -- Função: stringprep.in_table_c4 (code)

     Determina se 'code' está na tabela C.4 (pontos de código
     não-caracteres).

 -- Função: stringprep.in_table_c5 (code)

     Determina se 'code' está na tabela C.5 (códigos substitutos).

 -- Função: stringprep.in_table_c6 (code)

     Determina se 'code' está na tabela C.6 (inapropriado para texto
     simples).

 -- Função: stringprep.in_table_c7 (code)

     Determina se 'code' está na tabela C.7 (inapropriado para para
     representação canônica).

 -- Função: stringprep.in_table_c8 (code)

     Determina se 'code' está na tabela C.8 (alteram propriedades de
     exibição ou estão descontinuadas).

 -- Função: stringprep.in_table_c9 (code)

     Determina se 'code' está na tabela C.9 (caracteres de tag).

 -- Função: stringprep.in_table_d1 (code)

     Determina se 'code' está na tabela D.1 (Caracteres com propriedade
     bidirecional “R” ou “AL”).

 -- Função: stringprep.in_table_d2 (code)

     Determina se 'code' está na tabela D.2 (Caracteres com propriedade
     bidirecional “L”).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/stringprep.py

   (2) https://datatracker.ietf.org/doc/html/rfc3454.html

   (3) https://datatracker.ietf.org/doc/html/rfc3454.html


File: python.info,  Node: readline — Interface para o GNU readline,  Next: rlcompleter — Função de autocomplemento para GNU readline,  Prev: stringprep — Preparação de string para internet,  Up: Serviços de Processamento de Texto

5.6.7 ‘readline’ — Interface para o GNU readline
------------------------------------------------

__________________________________________________________________

O módulo *note readline: ba. define uma série de funções para facilitar
o autocomplemento e leitura/gravação de arquivos históricos do
interpretador Python.  Este módulo pode ser usado diretamente ou através
do módulo *note rlcompleter: bd, que provê o autocomplemento de
identificadores Python no prompt interativo.  As configurações feitas
usando este módulo afetam o comportamento do prompt interativo do
interpretador e dos prompts oferecidos pela função embutida *note
input(): 131b.

As combinações de teclas do Readline podem ser configuradas através de
um arquivo de inicialização, normalmente ‘.inputrc’ em seu diretório
inicial.  Consulte Readline Init File(1) no manual do GNU Readline para
obter informações sobre o formato e construções permitidas desse arquivo
e os recursos da biblioteca do Readline em geral.

*note Disponibilidade: 1ed8.: not Android, not iOS, not WASI.

Este módulo não tem suporte em *note plataformas móveis: 1fde. ou *note
plataformas WebAssembly: 18f5.

     Nota: A API da biblioteca subjacente do Readline pode ser
     implementada pela biblioteca ‘editline’ (‘libedit’) em vez do GNU
     readline.  No macOS, o módulo *note readline: ba. detecta qual
     biblioteca está sendo usada em tempo de execução.

     O arquivo de configuração do ‘editline’ é diferente daquele do GNU
     readline.  Se você carregar strings de configuração
     programaticamente, você pode usar *note backend: 17a3. para
     determinar qual biblioteca está sendo usada.

     Se você usar a emulação de readline do ‘editline’/‘libedit’ no
     macOS, o arquivo de inicialização localizado em seu diretório
     inicial será denominado ‘.editrc’.  Por exemplo, o seguinte
     conteúdo em ‘~/.editrc’ ativará os atalhos de teclado 'vi' e o
     autocomplemento de TAB:

          python:bind -v
          python:bind ^I rl_complete

     Observe também que bibliotecas diferentes podem usar formatos de
     arquivo de histórico diferentes.  Ao alternar a biblioteca
     subjacente, os arquivos de histórico existentes podem se tornar
     inutilizáveis.

 -- Dado: readline.backend

     O nome da biblioteca Readline subjacente que está sendo usada, seja
     ‘"readline"’ ou ‘"editline"’.

     Adicionado na versão 3.13.

* Menu:

* Arquivo init::
* Buffer de linha::
* Arquivo de histórico::
* Lista de histórico::
* Ganchos de inicialização::
* Autocomplemento::
* Exemplo::

   ---------- Footnotes ----------

   (1) 
https://tiswww.cwru.edu/php/chet/readline/rluserman.html#Readline-Init-File


File: python.info,  Node: Arquivo init,  Next: Buffer de linha,  Up: readline — Interface para o GNU readline

5.6.7.1 Arquivo init
....................

As seguintes funções estão relacionadas ao arquivo init e à configuração
do usuário:

 -- Função: readline.parse_and_bind (string)

     Executa a linha de init fornecida no argumento 'string'.  Isso
     chama ‘rl_parse_and_bind()’ na biblioteca subjacente.

 -- Função: readline.read_init_file ([filename])

     Executa um arquivo de inicialização do readline.  O nome de arquivo
     padrão é o último nome de arquivo usado.  Isso chama
     ‘rl_read_init_file()’ na biblioteca subjacente.


File: python.info,  Node: Buffer de linha,  Next: Arquivo de histórico,  Prev: Arquivo init,  Up: readline — Interface para o GNU readline

5.6.7.2 Buffer de linha
.......................

As seguintes funções operam no buffer de linha:

 -- Função: readline.get_line_buffer ()

     Retorna o conteúdo atual do buffer de linha (‘rl_line_buffer’ na
     biblioteca subjacente).

 -- Função: readline.insert_text (string)

     Insere texto no buffer de linha na posição do cursor.  Isso chama
     ‘rl_insert_text()’ na biblioteca subjacente, mas ignora o valor de
     retorno.

 -- Função: readline.redisplay ()

     Altera o que é exibido na tela para refletir o conteúdo atual do
     buffer de linha.  Isso chama ‘rl_redisplay()’ na biblioteca
     subjacente.


File: python.info,  Node: Arquivo de histórico,  Next: Lista de histórico,  Prev: Buffer de linha,  Up: readline — Interface para o GNU readline

5.6.7.3 Arquivo de histórico
............................

As seguintes funções operam em um arquivo histórico:

 -- Função: readline.read_history_file ([filename])

     Carrega um arquivo de histórico do readline e anexa-o à lista de
     histórico.  O nome do arquivo padrão é ‘~/.history’.  Isso chama
     ‘read_history()’ na biblioteca subjacente.

 -- Função: readline.write_history_file ([filename])

     Salva a lista de histórico em um arquivo de histórico readline,
     substituindo qualquer arquivo existente.  O nome do arquivo padrão
     é ‘~/.history’.  Isso chama ‘write_history()’ na biblioteca
     subjacente.

 -- Função: readline.append_history_file (nelements[, filename])

     Anexa os últimos 'nelements' itens do histórico a um arquivo.  O
     nome do arquivo padrão é ‘~/.history’.  O arquivo já deve existir.
     Isso chama ‘append_history()’ na biblioteca subjacente.  Esta
     função só existe se o Python foi compilado para uma versão da
     biblioteca que a suporta.

     Adicionado na versão 3.5.

 -- Função: readline.get_history_length ()
 -- Função: readline.set_history_length (length)

     Define ou retorna o número desejado de linhas para salvar no
     arquivo de histórico.  A função *note write_history_file(): 2520.
     usa este valor para truncar o arquivo de histórico, chamando
     ‘history_truncate_file()’ na biblioteca subjacente.  Valores
     negativos implicam tamanho ilimitado do arquivo de histórico.


File: python.info,  Node: Lista de histórico,  Next: Ganchos de inicialização,  Prev: Arquivo de histórico,  Up: readline — Interface para o GNU readline

5.6.7.4 Lista de histórico
..........................

As seguintes funções operam em uma lista de histórico global:

 -- Função: readline.clear_history ()

     Limpa o histórico atual.  Isso chama ‘clear_history()’ na
     biblioteca subjacente.  A função Python só existe se o Python foi
     compilado para uma versão da biblioteca que a suporta.

 -- Função: readline.get_current_history_length ()

     Retorna o número de itens atualmente no histórico.  (Isso é
     diferente de *note get_history_length(): 2521, que retorna o número
     máximo de linhas que serão gravadas em um arquivo de histórico.)

 -- Função: readline.get_history_item (index)

     Retorna o conteúdo atual do item do histórico em 'index'.  O índice
     do item é baseado em um.  Isso chama ‘history_get()’ na biblioteca
     subjacente.

 -- Função: readline.remove_history_item (pos)

     Remove o item de histórico especificado por sua posição do
     histórico.  A posição conta a partir de zero.  Isso chama
     ‘remove_history()’ na biblioteca subjacente.

 -- Função: readline.replace_history_item (pos, line)

     Substitui o item de histórico especificado pela sua posição por
     'linha'.  A posição conta a partir do zero.  Isso chama
     ‘replace_history_entry()’ na biblioteca subjacente.

 -- Função: readline.add_history (line)

     Acrescenta 'line' ao buffer do histórico, como se fosse a última
     linha digitada.  Isso chama ‘add_history()’ na biblioteca
     subjacente.

 -- Função: readline.set_auto_history (enabled)

     Habilita ou desabilita chamadas automáticas para ‘add_history()’ ao
     ler a entrada via readline.  O argumento 'enabled' deve ser um
     valor booleano que, quando verdadeiro, ativa o histórico automático
     e, quando falso, desativa o histórico automático.

     Adicionado na versão 3.6.

     O histórico automático está ativado por padrão e as alterações não
     persistem em várias sessões.


File: python.info,  Node: Ganchos de inicialização,  Next: Autocomplemento,  Prev: Lista de histórico,  Up: readline — Interface para o GNU readline

5.6.7.5 Ganchos de inicialização
................................

 -- Função: readline.set_startup_hook ([function])

     Define ou remove a função invocada pelo retorno de chamada
     ‘rl_startup_hook’ da biblioteca subjacente.  Se 'function' for
     especificada, ela será usada como a nova função de gancho; se
     omitido ou ‘None’, qualquer função já instalada será removida.  O
     gancho é chamado sem argumentos antes de readline imprimir o
     primeiro prompt.

 -- Função: readline.set_pre_input_hook ([function])

     Define ou remove a função invocada pelo retorno de chamada
     ‘rl_pre_input_hook’ da biblioteca subjacente.  Se 'function' for
     especificada, ela será usada como a nova função de gancho; se
     omitida ou ‘None’, qualquer função já instalada será removida.  O
     gancho é chamado sem argumentos após a impressão do primeiro prompt
     e pouco antes de readline começar a ler os caracteres de entrada.
     Esta função só existe se o Python foi compilado para uma versão da
     biblioteca que a suporta.


File: python.info,  Node: Autocomplemento,  Next: Exemplo,  Prev: Ganchos de inicialização,  Up: readline — Interface para o GNU readline

5.6.7.6 Autocomplemento
.......................

As funções a seguir estão relacionadas à implementação de uma função
personalizada de autocomplemento ou 'completion', em inglês, de
palavras.  Isso normalmente é operado pela tecla Tab e pode sugerir e
completar automaticamente uma palavra que está sendo digitada.  Por
padrão, Readline está configurado para ser usado por *note rlcompleter:
bd. para completar identificadores Python para o interpretador
interativo.  Se o módulo *note readline: ba. for usado com um
autocomplemento personalizado, um conjunto diferente de delimitadores de
palavras deverá ser definido.

 -- Função: readline.set_completer ([function])

     Define ou remove a função de autocomplemento.  Se 'function' for
     especificada, ela será usada como a nova função de autocomplemento;
     se omitido ou ‘None’, qualquer função de autocomplemento já
     instalada será removida.  A função de autocomplemento é chamada
     como ‘function(text, state)’, para 'state' em ‘0’, ‘1’, ‘2’, …, até
     retornar um valor que não seja string.  Deve retornar o próximo
     autocomplemento possível começando com 'text'.

     A função de autocomplemento instalada é invocada pelo retorno de
     chamada 'entry_func' passado para ‘rl_completion_matches()’ na
     biblioteca subjacente.  A string 'text' vem do primeiro parâmetro
     para o retorno de chamada ‘rl_attempted_completion_function’ da
     biblioteca subjacente.

 -- Função: readline.get_completer ()

     Obtém a função de autocomplemento ou ‘None’ se nenhuma função de
     autocomplemento tiver sido definida.

 -- Função: readline.get_completion_type ()

     Obtém o tipo de autocomplemento que está sendo tentado.  Isso
     retorna a variável ‘rl_completion_type’ na biblioteca subjacente
     como um número inteiro.

 -- Função: readline.get_begidx ()
 -- Função: readline.get_endidx ()

     Obtém o índice inicial ou final do escopo de autocomplemento.
     Esses índices são os argumentos 'start' e 'end' passados para o
     retorno de chamada ‘rl_attempted_completion_function’ da biblioteca
     subjacente.  Os valores podem ser diferentes no mesmo cenário de
     edição de entrada com base na implementação de C readline
     subjacente.  Por exemplo, sabe-se que o libedit se comporta de
     maneira diferente do libreadline.

 -- Função: readline.set_completer_delims (string)
 -- Função: readline.get_completer_delims ()

     Define ou obtém os delimitadores de palavras para autocomplemento.
     Estes determinam o início da palavra a ser considerada para
     autocomplemento (o escopo de autocomplemento).  Essas funções
     acessam a variável ‘rl_completer_word_break_characters’ na
     biblioteca subjacente.

 -- Função: readline.set_completion_display_matches_hook ([function])

     Define ou remove a função de exibição de autocomplemento.  Se
     'function' for especificada, ela será usada como a nova função de
     exibição de autocomplemento; se omitida ou ‘None’, qualquer função
     de exibição de autocomplemento já instalada será removida.  Isso
     define ou limpa o retorno de chamada
     ‘rl_completion_display_matches_hook’ na biblioteca subjacente.  A
     função de exibição de autocomplemento é chamada como
     ‘function(substitution, [matches], longest_match_length)’ uma vez
     que cada correspondência precisa ser exibida.


File: python.info,  Node: Exemplo,  Prev: Autocomplemento,  Up: readline — Interface para o GNU readline

5.6.7.7 Exemplo
...............

O exemplo a seguir demonstra como usar as funções de leitura e gravação
de histórico do módulo *note readline: ba. para carregar e salvar
automaticamente um arquivo de histórico chamado ‘.python_history’ do
diretório inicial do usuário.  O código abaixo normalmente seria
executado automaticamente durante sessões interativas do arquivo *note
PYTHONSTARTUP: ffe. do usuário.

     import atexit
     import os
     import readline

     histfile = os.path.join(os.path.expanduser("~"), ".python_history")
     try:
         readline.read_history_file(histfile)
         # comprimento padrão do histórico é -1 (infinito), que pode crescer sem controle
         readline.set_history_length(1000)
     except FileNotFoundError:
         pass

     atexit.register(readline.write_history_file, histfile)

Na verdade, este código é executado automaticamente quando o Python é
executado no *note modo interativo: ffc. (veja *note Configuração
Readline: fff.).

O exemplo a seguir atinge o mesmo objetivo, mas oferece suporte a
sessões interativas simultâneas, anexando apenas o novo histórico.

     import atexit
     import os
     import readline
     histfile = os.path.join(os.path.expanduser("~"), ".python_history")

     try:
         readline.read_history_file(histfile)
         h_len = readline.get_current_history_length()
     except FileNotFoundError:
         open(histfile, 'wb').close()
         h_len = 0

     def save(prev_h_len, histfile):
         new_h_len = readline.get_current_history_length()
         readline.set_history_length(1000)
         readline.append_history_file(new_h_len - prev_h_len, histfile)
     atexit.register(save, h_len, histfile)

O exemplo a seguir estende a classe *note code.InteractiveConsole: 2533.
para prover salvamento/restauração do histórico.

     import atexit
     import code
     import os
     import readline

     class HistoryConsole(code.InteractiveConsole):
         def __init__(self, locals=None, filename="<console>",
                      histfile=os.path.expanduser("~/.console-history")):
             code.InteractiveConsole.__init__(self, locals, filename)
             self.init_history(histfile)

         def init_history(self, histfile):
             readline.parse_and_bind("tab: complete")
             if hasattr(readline, "read_history_file"):
                 try:
                     readline.read_history_file(histfile)
                 except FileNotFoundError:
                     pass
                 atexit.register(self.save_history, histfile)

         def save_history(self, histfile):
             readline.set_history_length(1000)
             readline.write_history_file(histfile)

     Nota: O novo *note REPL: 16a. introduzido na versão 3.13 não
     oferece suporte a readline.  No entanto, readline ainda pode ser
     usado definindo a variável de ambiente *note PYTHON_BASIC_REPL:
     16e.


File: python.info,  Node: rlcompleter — Função de autocomplemento para GNU readline,  Prev: readline — Interface para o GNU readline,  Up: Serviços de Processamento de Texto

5.6.8 ‘rlcompleter’ — Função de autocomplemento para GNU readline
-----------------------------------------------------------------

'Código-fonte:' Lib/rlcompleter.py(1)

__________________________________________________________________

O módulo ‘rlcompleter’ define uma função de autocompletamento adequada
para ser passada para *note set_completer(): 252c. no módulo *note
readline: ba.

Quando este módulo é importado em uma plataforma Unix com o módulo *note
readline: ba. disponível, uma instância da classe *note Completer: 1ab8.
é criada automaticamente e seu método *note complete(): 2537. é definido
como o *note autocompletamento do readline: 252b.  O método fornece o
autocompletamento de *note identificadores e palavras-chaves: 2021.
válidas do Python.

Exemplo:

     >>> import rlcompleter
     >>> import readline
     >>> readline.parse_and_bind("tab: complete")
     >>> readline. <TAB PRESSED>
     readline.__doc__          readline.get_line_buffer(  readline.read_init_file(
     readline.__file__         readline.insert_text(      readline.set_completer(
     readline.__name__         readline.parse_and_bind(
     >>> readline.

O módulo ‘rlcompleter’ é projetado para uso com o *note modo interativo:
ffc. do Python.  A menos que Python seja executado com a opção *note -S:
11e7, o módulo é automaticamente importado e configurado (veja *note
Configuração Readline: fff.).

Em plataformas sem *note readline: ba, a classe *note Completer: 1ab8.
definida por este módulo ainda pode ser usada para propósitos
personalizados.

 -- Classe: rlcompleter.Completer

     Os objetos Completer têm o seguinte método:

      -- Método: complete (text, state)

          Retorna o próximo completamento possível para 'text'.

          Quando chamado pelo módulo *note readline: ba, este método é
          chamado sucessivamente com ‘state == 0, 1, 2, ...’ até que o
          método retorne ‘None’.

          Se chamado para 'text' que não inclui um caractere de ponto
          (‘'.'’), ele será completado a partir dos nomes atualmente
          definidos em *note __main__: 1, *note builtins: 12. e palavras
          reservadas (conforme definido pelo módulo *note keyword: 84.).

          Se chamado por um nome pontilhado, vai tentar avaliar qualquer
          coisa sem efeitos colaterais óbvios (as funções não serão
          avaliadas, mas pode levantar chamadas para *note
          __getattr__(): 4d3.) até a última parte e encontrar
          correspondências para o resto por meio da função *note dir():
          632.  Qualquer exceção levantada durante a avaliação da
          expressão é capturada, silenciada e *note None: 675. é
          retornado.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/rlcompleter.py


File: python.info,  Node: Serviços de Dados Binários,  Next: Tipos de Dados,  Prev: Serviços de Processamento de Texto,  Up: A Biblioteca Padrão do Python

5.7 Serviços de Dados Binários
==============================

Os módulos descritos neste capítulo fornecem algumas operações de
serviços básicos para manipulação de dados binários.  Outras operações
sobre dados binários, especificamente em relação a formatos de arquivo e
protocolos de rede, são descritas nas seções relevantes.

Algumas bibliotecas descritas em *note Serviços de Processamento de
Texto: 2354. também funcionam com formatos binários compatíveis com
ASCII (por exemplo *note re: b9.) ou com todos os dados binários (por
exemplo *note difflib: 37.).

Além disso, consulte a documentação dos tipos de dados binários
embutidos do Python em *note Tipos de sequência binária — bytes,
bytearray, memoryview: 22f9.

* Menu:

* struct — Interpreta bytes como dados binários empacotados::
* codecs — Codec registry and base classes::


File: python.info,  Node: struct — Interpreta bytes como dados binários empacotados,  Next: codecs — Codec registry and base classes,  Up: Serviços de Dados Binários

5.7.1 ‘struct’ — Interpreta bytes como dados binários empacotados
-----------------------------------------------------------------

'Código-fonte:' Lib/struct.py(1)

__________________________________________________________________

Este módulo converte entre valores Python e structs C representados como
objetos *note bytes: 1c2. do Python.  *note Strings de formato: 253e.
compactas descrevem as conversões pretendidas de/para valores Python.
As funções e objetos do módulo podem ser usados para duas aplicações
amplamente distintas, troca de dados com fontes externas (arquivos ou
conexões de rede) ou transferência de dados entre a aplicação Python e a
camada C.

     Nota: Quando nenhum caractere de prefixo é fornecido, o modo nativo
     é o padrão.  Ele empacota ou descompacta dados com base na
     plataforma e no compilador nos quais o interpretador Python foi
     construído.  O resultado do empacotamento de uma dada estrutura C
     inclui bytes de preenchimento que mantêm o alinhamento adequado
     para os tipos C envolvidos; similarmente, o alinhamento é levado em
     conta ao desempacotar.  Em contraste, ao comunicar dados entre
     fontes externas, o programador é responsável por definir a
     ordenação de bytes e o preenchimento entre os elementos.  Veja
     *note Byte Order, Size, and Alignment: 253f. para detalhes.

Várias funções *note struct: d5. (e métodos de *note Struct: 15a0.)
recebem um argumento 'buffer'.  Isso se refere a objetos que implementam
*note Protocolo de buffer: 2e8. e fornecem um buffer legível ou de
leitura-gravação.  Os tipos mais comuns usados para esse propósito são
*note bytes: 1c2. e *note bytearray: 2ea, mas muitos outros tipos que
podem ser vistos como uma matriz de bytes implementam o protocolo de
buffer, para que possam ser lidos/preenchidos sem cópia adicional de um
objeto *note bytes: 1c2.

* Menu:

* Funções e exceções::
* Format Strings::
* Applications::
* Classes: Classes<3>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/struct.py


File: python.info,  Node: Funções e exceções,  Next: Format Strings,  Up: struct — Interpreta bytes como dados binários empacotados

5.7.1.1 Funções e exceções
..........................

O módulo define as seguintes exceções e funções:

 -- Exceção: struct.error

     Exceção levantada em várias ocasiões; argumento é uma string que
     descreve o que está errado.

 -- Função: struct.pack (format, v1, v2, ...)

     Return a bytes object containing the values 'v1', 'v2', … packed
     according to the format string 'format'.  The arguments must match
     the values required by the format exactly.

 -- Função: struct.pack_into (format, buffer, offset, v1, v2, ...)

     Pack the values 'v1', 'v2', … according to the format string
     'format' and write the packed bytes into the writable buffer
     'buffer' starting at position 'offset'.  Note that 'offset' is a
     required argument.

 -- Função: struct.unpack (format, buffer)

     Unpack from the buffer 'buffer' (presumably packed by ‘pack(format,
     ...)’) according to the format string 'format'.  The result is a
     tuple even if it contains exactly one item.  The buffer’s size in
     bytes must match the size required by the format, as reflected by
     *note calcsize(): 1b3b.

 -- Função: struct.unpack_from (format, /, buffer, offset=0)

     Unpack from 'buffer' starting at position 'offset', according to
     the format string 'format'.  The result is a tuple even if it
     contains exactly one item.  The buffer’s size in bytes, starting at
     position 'offset', must be at least the size required by the
     format, as reflected by *note calcsize(): 1b3b.

 -- Função: struct.iter_unpack (format, buffer)

     Iteratively unpack from the buffer 'buffer' according to the format
     string 'format'.  This function returns an iterator which will read
     equally sized chunks from the buffer until all its contents have
     been consumed.  The buffer’s size in bytes must be a multiple of
     the size required by the format, as reflected by *note calcsize():
     1b3b.

     Each iteration yields a tuple as specified by the format string.

     Adicionado na versão 3.4.

 -- Função: struct.calcsize (format)

     Return the size of the struct (and hence of the bytes object
     produced by ‘pack(format, ...)’) corresponding to the format string
     'format'.


File: python.info,  Node: Format Strings,  Next: Applications,  Prev: Funções e exceções,  Up: struct — Interpreta bytes como dados binários empacotados

5.7.1.2 Format Strings
......................

Format strings describe the data layout when packing and unpacking data.
They are built up from *note format characters: 2544, which specify the
type of data being packed/unpacked.  In addition, special characters
control the *note byte order, size and alignment: 253f.  Each format
string consists of an optional prefix character which describes the
overall properties of the data and one or more format characters which
describe the actual data values and padding.

* Menu:

* Byte Order, Size, and Alignment: Byte Order Size and Alignment.
* Caracteres Formatados::
* Exemplos: Exemplos<2>.


File: python.info,  Node: Byte Order Size and Alignment,  Next: Caracteres Formatados,  Up: Format Strings

5.7.1.3 Byte Order, Size, and Alignment
.......................................

By default, C types are represented in the machine’s native format and
byte order, and properly aligned by skipping pad bytes if necessary
(according to the rules used by the C compiler).  This behavior is
chosen so that the bytes of a packed struct correspond exactly to the
memory layout of the corresponding C struct.  Whether to use native byte
ordering and padding or standard formats depends on the application.

Alternatively, the first character of the format string can be used to
indicate the byte order, size and alignment of the packed data,
according to the following table:

Caractere       Ordem de bytes               Tamanho        Alinhamento
                                                            
----------------------------------------------------------------------------
                                                            
‘@’             nativo                       nativo         nativo
                                                            
                                                            
‘=’             nativo                       padrão         nenhum
                                                            
                                                            
‘<’             little-endian                padrão         nenhum
                                                            
                                                            
‘>’             big-endian                   padrão         nenhum
                                                            
                                                            
‘!’             rede (= big-endian)          padrão         nenhum
                                                            

Se o primeiro caractere não for um destes, ‘'@'’ é presumido.

     Nota: The number 1023 (‘0x3ff’ in hexadecimal) has the following
     byte representations:

        * ‘03 ff’ in big-endian (‘>’)

        * ‘ff 03’ in little-endian (‘<’)

     Python example:

          >>> import struct
          >>> struct.pack('>h', 1023)
          b'\x03\xff'
          >>> struct.pack('<h', 1023)
          b'\xff\x03'

Native byte order is big-endian or little-endian, depending on the host
system.  For example, Intel x86, AMD64 (x86-64), and Apple M1 are
little-endian; IBM z and many legacy architectures are big-endian.  Use
*note sys.byteorder: 2330. to check the endianness of your system.

Native size and alignment are determined using the C compiler’s ‘sizeof’
expression.  This is always combined with native byte order.

Standard size depends only on the format character; see the table in the
*note Caracteres Formatados: 2544. section.

Note the difference between ‘'@'’ and ‘'='’: both use native byte order,
but the size and alignment of the latter is standardized.

The form ‘'!'’ represents the network byte order which is always
big-endian as defined in IETF RFC 1700(1).

There is no way to indicate non-native byte order (force byte-swapping);
use the appropriate choice of ‘'<'’ or ‘'>'’.

Notas:

  1. Padding is only automatically added between successive structure
     members.  No padding is added at the beginning or the end of the
     encoded struct.

  2. No padding is added when using non-native size and alignment, e.g.
     with ‘<’, ‘>’, ‘=’, and ‘!’.

  3. To align the end of a structure to the alignment requirement of a
     particular type, end the format with the code for that type with a
     repeat count of zero.  See *note Exemplos: 2546.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc1700


File: python.info,  Node: Caracteres Formatados,  Next: Exemplos<2>,  Prev: Byte Order Size and Alignment,  Up: Format Strings

5.7.1.4 Caracteres Formatados
.............................

Format characters have the following meaning; the conversion between C
and Python values should be obvious given their types.  The ‘Standard
size’ column refers to the size of the packed value in bytes when using
standard size; that is, when the format string starts with one of ‘'<'’,
‘'>'’, ‘'!'’ or ‘'='’.  When using native size, the size of the packed
value is platform-dependent.

Formatação   Tipo em C                      Tipo em Python           Standard size        Notas
                                                                                          
-----------------------------------------------------------------------------------------------------------
                                                                                          
‘x’          pad byte                       no value                                      (7)
                                                                                          
                                                                                          
‘c’          char                           bytes of length 1        1
                                                                     
                                                                                          
‘b’          signed char                    inteiro                  1                    (1), (2)
                                                                                          
                                                                                          
‘B’          unsigned char                  inteiro                  1                    (2)
                                                                                          
                                                                                          
‘?’          _Bool                          bool                     1                    (1)
                                                                                          
                                                                                          
‘h’          short                          inteiro                  2                    (2)
                                                                                          
                                                                                          
‘H’          unsigned short                 inteiro                  2                    (2)
                                                                                          
                                                                                          
‘i’          int                            inteiro                  4                    (2)
                                                                                          
                                                                                          
‘I’          unsigned int                   inteiro                  4                    (2)
                                                                                          
                                                                                          
‘l’          long                           inteiro                  4                    (2)
                                                                                          
                                                                                          
‘L’          unsigned long                  inteiro                  4                    (2)
                                                                                          
                                                                                          
‘q’          long long                      inteiro                  8                    (2)
                                                                                          
                                                                                          
‘Q’          unsigned long long             inteiro                  8                    (2)
                                                                                          
                                                                                          
‘n’          ‘ssize_t’                      inteiro                                       (3)
                                                                                          
                                                                                          
‘N’          ‘size_t’                       inteiro                                       (3)
                                                                                          
                                                                                          
‘e’          (6)                            ponto flutuante          2                    (4)
                                                                                          
                                                                                          
‘f’          float                          ponto flutuante          4                    (4)
                                                                                          
                                                                                          
‘d’          double                         ponto flutuante          8                    (4)
                                                                                          
                                                                                          
‘s’          char[]                         bytes                                         (9)
                                                                                          
                                                                                          
‘p’          char[]                         bytes                                         (8)
                                                                                          
                                                                                          
‘P’          void*                          inteiro                                       (5)
                                                                                          

Alterado na versão 3.3: Added support for the ‘'n'’ and ‘'N'’ formats.

Alterado na versão 3.6: Added support for the ‘'e'’ format.

Notas:

  1. 
     The ‘'?'’ conversion code corresponds to the _Bool type defined by
     C standards since C99.  In standard mode, it is represented by one
     byte.

  2. When attempting to pack a non-integer using any of the integer
     conversion codes, if the non-integer has a *note __index__(): 71d.
     method then that method is called to convert the argument to an
     integer before packing.

     Alterado na versão 3.2: Added use of the *note __index__(): 71d.
     method for non-integers.

  3. The ‘'n'’ and ‘'N'’ conversion codes are only available for the
     native size (selected as the default or with the ‘'@'’ byte order
     character).  For the standard size, you can use whichever of the
     other integer formats fits your application.

  4. For the ‘'f'’, ‘'d'’ and ‘'e'’ conversion codes, the packed
     representation uses the IEEE 754 binary32, binary64 or binary16
     format (for ‘'f'’, ‘'d'’ or ‘'e'’ respectively), regardless of the
     floating-point format used by the platform.

  5. The ‘'P'’ format character is only available for the native byte
     ordering (selected as the default or with the ‘'@'’ byte order
     character).  The byte order character ‘'='’ chooses to use little-
     or big-endian ordering based on the host system.  The struct module
     does not interpret this as native ordering, so the ‘'P'’ format is
     not available.

  6. The IEEE 754 binary16 “half precision” type was introduced in the
     2008 revision of the IEEE 754 standard(1).  It has a sign bit, a
     5-bit exponent and 11-bit precision (with 10 bits explicitly
     stored), and can represent numbers between approximately ‘6.1e-05’
     and ‘6.5e+04’ at full precision.  This type is not widely supported
     by C compilers: on a typical machine, an unsigned short can be used
     for storage, but not for math operations.  See the Wikipedia page
     on the half-precision floating-point format(2) for more
     information.

  7. When packing, ‘'x'’ inserts one NUL byte.

  8. The ‘'p'’ format character encodes a “Pascal string”, meaning a
     short variable-length string stored in a 'fixed number of bytes',
     given by the count.  The first byte stored is the length of the
     string, or 255, whichever is smaller.  The bytes of the string
     follow.  If the string passed in to *note pack(): 12b8. is too long
     (longer than the count minus 1), only the leading ‘count-1’ bytes
     of the string are stored.  If the string is shorter than ‘count-1’,
     it is padded with null bytes so that exactly count bytes in all are
     used.  Note that for *note unpack(): 18db, the ‘'p'’ format
     character consumes ‘count’ bytes, but that the string returned can
     never contain more than 255 bytes.

  9. For the ‘'s'’ format character, the count is interpreted as the
     length of the bytes, not a repeat count like for the other format
     characters; for example, ‘'10s'’ means a single 10-byte string
     mapping to or from a single Python byte string, while ‘'10c'’ means
     10 separate one byte character elements (e.g., ‘cccccccccc’)
     mapping to or from ten different Python byte objects.  (See *note
     Exemplos: 2546. for a concrete demonstration of the difference.)
     If a count is not given, it defaults to 1.  For packing, the string
     is truncated or padded with null bytes as appropriate to make it
     fit.  For unpacking, the resulting bytes object always has exactly
     the specified number of bytes.  As a special case, ‘'0s'’ means a
     single, empty string (while ‘'0c'’ means 0 characters).

A format character may be preceded by an integral repeat count.  For
example, the format string ‘'4h'’ means exactly the same as ‘'hhhh'’.

Whitespace characters between formats are ignored; a count and its
format must not contain whitespace though.

When packing a value ‘x’ using one of the integer formats (‘'b'’, ‘'B'’,
‘'h'’, ‘'H'’, ‘'i'’, ‘'I'’, ‘'l'’, ‘'L'’, ‘'q'’, ‘'Q'’), if ‘x’ is
outside the valid range for that format then *note struct.error: 1368.
is raised.

Alterado na versão 3.1: Previously, some of the integer formats wrapped
out-of-range values and raised *note DeprecationWarning: 1a5. instead of
*note struct.error: 1368.

For the ‘'?'’ format character, the return value is either *note True:
c27. or *note False: b49.  When packing, the truth value of the argument
object is used.  Either 0 or 1 in the native or standard bool
representation will be packed, and any non-zero value will be ‘True’
when unpacking.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/IEEE_754-2008_revision

   (2) 
https://en.wikipedia.org/wiki/Half-precision_floating-point_format


File: python.info,  Node: Exemplos<2>,  Prev: Caracteres Formatados,  Up: Format Strings

5.7.1.5 Exemplos
................

     Nota: Native byte order examples (designated by the ‘'@'’ format
     prefix or lack of any prefix character) may not match what the
     reader’s machine produces as that depends on the platform and
     compiler.

Pack and unpack integers of three different sizes, using big endian
ordering:

     >>> from struct import *
     >>> pack(">bhl", 1, 2, 3)
     b'\x01\x00\x02\x00\x00\x00\x03'
     >>> unpack('>bhl', b'\x01\x00\x02\x00\x00\x00\x03')
     (1, 2, 3)
     >>> calcsize('>bhl')
     7

Attempt to pack an integer which is too large for the defined field:

     >>> pack(">h", 99999)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     struct.error: 'h' format requires -32768 <= number <= 32767

Demonstrate the difference between ‘'s'’ and ‘'c'’ format characters:

     >>> pack("@ccc", b'1', b'2', b'3')
     b'123'
     >>> pack("@3s", b'123')
     b'123'

Unpacked fields can be named by assigning them to variables or by
wrapping the result in a named tuple:

     >>> record = b'raymond   \x32\x12\x08\x01\x08'
     >>> name, serialnum, school, gradelevel = unpack('<10sHHb', record)

     >>> from collections import namedtuple
     >>> Student = namedtuple('Student', 'name serialnum school gradelevel')
     >>> Student._make(unpack('<10sHHb', record))
     Student(name=b'raymond   ', serialnum=4658, school=264, gradelevel=8)

The ordering of format characters may have an impact on size in native
mode since padding is implicit.  In standard mode, the user is
responsible for inserting any desired padding.  Note in the first ‘pack’
call below that three NUL bytes were added after the packed ‘'#'’ to
align the following integer on a four-byte boundary.  In this example,
the output was produced on a little endian machine:

     >>> pack('@ci', b'#', 0x12131415)
     b'#\x00\x00\x00\x15\x14\x13\x12'
     >>> pack('@ic', 0x12131415, b'#')
     b'\x15\x14\x13\x12#'
     >>> calcsize('@ci')
     8
     >>> calcsize('@ic')
     5

The following format ‘'llh0l'’ results in two pad bytes being added at
the end, assuming the platform’s longs are aligned on 4-byte boundaries:

     >>> pack('@llh0l', 1, 2, 3)
     b'\x00\x00\x00\x01\x00\x00\x00\x02\x00\x03\x00\x00'

Ver também
..........

Module *note array: 7.

     Packed binary storage of homogeneous data.

Módulo *note json: 82.

     JSON encoder and decoder.

Módulo *note pickle: a6.

     Python object serialization.


File: python.info,  Node: Applications,  Next: Classes<3>,  Prev: Format Strings,  Up: struct — Interpreta bytes como dados binários empacotados

5.7.1.6 Applications
....................

Two main applications for the *note struct: d5. module exist, data
interchange between Python and C code within an application or another
application compiled using the same compiler (*note native formats:
254b.), and data interchange between applications using agreed upon data
layout (*note standard formats: 254c.).  Generally speaking, the format
strings constructed for these two domains are distinct.

* Menu:

* Native Formats::
* Standard Formats::


File: python.info,  Node: Native Formats,  Next: Standard Formats,  Up: Applications

5.7.1.7 Native Formats
......................

When constructing format strings which mimic native layouts, the
compiler and machine architecture determine byte ordering and padding.
In such cases, the ‘@’ format character should be used to specify native
byte ordering and data sizes.  Internal pad bytes are normally inserted
automatically.  It is possible that a zero-repeat format code will be
needed at the end of a format string to round up to the correct byte
boundary for proper alignment of consecutive chunks of data.

Consider these two simple examples (on a 64-bit, little-endian machine):

     >>> calcsize('@lhl')
     24
     >>> calcsize('@llh')
     18

Data is not padded to an 8-byte boundary at the end of the second format
string without the use of extra padding.  A zero-repeat format code
solves that problem:

     >>> calcsize('@llh0l')
     24

The ‘'x'’ format code can be used to specify the repeat, but for native
formats it is better to use a zero-repeat format like ‘'0l'’.

By default, native byte ordering and alignment is used, but it is better
to be explicit and use the ‘'@'’ prefix character.


File: python.info,  Node: Standard Formats,  Prev: Native Formats,  Up: Applications

5.7.1.8 Standard Formats
........................

When exchanging data beyond your process such as networking or storage,
be precise.  Specify the exact byte order, size, and alignment.  Do not
assume they match the native order of a particular machine.  For
example, network byte order is big-endian, while many popular CPUs are
little-endian.  By defining this explicitly, the user need not care
about the specifics of the platform their code is running on.  The first
character should typically be ‘<’ or ‘>’ (or ‘!’).  Padding is the
responsibility of the programmer.  The zero-repeat format character
won’t work.  Instead, the user must explicitly add ‘'x'’ pad bytes where
needed.  Revisiting the examples from the previous section, we have:

     >>> calcsize('<qh6xq')
     24
     >>> pack('<qh6xq', 1, 2, 3) == pack('@lhl', 1, 2, 3)
     True
     >>> calcsize('@llh')
     18
     >>> pack('@llh', 1, 2, 3) == pack('<qqh', 1, 2, 3)
     True
     >>> calcsize('<qqh6x')
     24
     >>> calcsize('@llh0l')
     24
     >>> pack('@llh0l', 1, 2, 3) == pack('<qqh6x', 1, 2, 3)
     True

The above results (executed on a 64-bit machine) aren’t guaranteed to
match when executed on different machines.  For example, the examples
below were executed on a 32-bit machine:

     >>> calcsize('<qqh6x')
     24
     >>> calcsize('@llh0l')
     12
     >>> pack('@llh0l', 1, 2, 3) == pack('<qqh6x', 1, 2, 3)
     False


File: python.info,  Node: Classes<3>,  Prev: Applications,  Up: struct — Interpreta bytes como dados binários empacotados

5.7.1.9 Classes
...............

The *note struct: d5. module also defines the following type:

 -- Classe: struct.Struct (format)

     Return a new Struct object which writes and reads binary data
     according to the format string 'format'.  Creating a ‘Struct’
     object once and calling its methods is more efficient than calling
     module-level functions with the same format since the format string
     is only compiled once.

          Nota: The compiled versions of the most recent format strings
          passed to the module-level functions are cached, so programs
          that use only a few format strings needn’t worry about reusing
          a single *note Struct: 15a0. instance.

     Compiled Struct objects support the following methods and
     attributes:

      -- Método: pack (v1, v2, ...)

          Identical to the *note pack(): 12b8. function, using the
          compiled format.  (‘len(result)’ will equal *note size: 2552.)

      -- Método: pack_into (buffer, offset, v1, v2, ...)

          Identical to the *note pack_into(): 2541. function, using the
          compiled format.

      -- Método: unpack (buffer)

          Identical to the *note unpack(): 18db. function, using the
          compiled format.  The buffer’s size in bytes must equal *note
          size: 2552.

      -- Método: unpack_from (buffer, offset=0)

          Identical to the *note unpack_from(): 2542. function, using
          the compiled format.  The buffer’s size in bytes, starting at
          position 'offset', must be at least *note size: 2552.

      -- Método: iter_unpack (buffer)

          Identical to the *note iter_unpack(): ff3. function, using the
          compiled format.  The buffer’s size in bytes must be a
          multiple of *note size: 2552.

          Adicionado na versão 3.4.

      -- Atributo: format

          The format string used to construct this Struct object.

          Alterado na versão 3.7: The format string type is now *note
          str: 44c. instead of *note bytes: 1c2.

      -- Atributo: size

          The calculated size of the struct (and hence of the bytes
          object produced by the *note pack(): 12b8. method)
          corresponding to *note format: 61f.

     Alterado na versão 3.13: The 'repr()' of structs has changed.  It
     is now:

          >>> Struct('i')
          Struct('i')


File: python.info,  Node: codecs — Codec registry and base classes,  Prev: struct — Interpreta bytes como dados binários empacotados,  Up: Serviços de Dados Binários

5.7.2 ‘codecs’ — Codec registry and base classes
------------------------------------------------

'Código-fonte:' Lib/codecs.py(1)

__________________________________________________________________

This module defines base classes for standard Python codecs (encoders
and decoders) and provides access to the internal Python codec registry,
which manages the codec and error handling lookup process.  Most
standard codecs are *note text encodings: 2310, which encode text to
bytes (and decode bytes to text), but there are also codecs provided
that encode text to text, and bytes to bytes.  Custom codecs may encode
and decode between arbitrary types, but some module features are
restricted to be used specifically with *note text encodings: 2310. or
with codecs that encode to *note bytes: 1c2.

The module defines the following functions for encoding and decoding
with any codec:

 -- Função: codecs.encode (obj, encoding='utf-8', errors='strict')

     Encodes 'obj' using the codec registered for 'encoding'.

     'Errors' may be given to set the desired error handling scheme.
     The default error handler is ‘'strict'’ meaning that encoding
     errors raise *note ValueError: 202. (or a more codec specific
     subclass, such as *note UnicodeEncodeError: 677.).  Refer to *note
     Codec Base Classes: 2559. for more information on codec error
     handling.

 -- Função: codecs.decode (obj, encoding='utf-8', errors='strict')

     Decodes 'obj' using the codec registered for 'encoding'.

     'Errors' may be given to set the desired error handling scheme.
     The default error handler is ‘'strict'’ meaning that decoding
     errors raise *note ValueError: 202. (or a more codec specific
     subclass, such as *note UnicodeDecodeError: a1d.).  Refer to *note
     Codec Base Classes: 2559. for more information on codec error
     handling.

 -- Função: codecs.charmap_build (string)

     Return a mapping suitable for encoding with a custom single-byte
     encoding.  Given a *note str: 44c. 'string' of up to 256 characters
     representing a decoding table, returns either a compact internal
     mapping object ‘EncodingMap’ or a *note dictionary: 256. mapping
     character ordinals to byte values.  Raises a *note TypeError: 2c3.
     on invalid input.

The full details for each codec can also be looked up directly:

 -- Função: codecs.lookup (encoding)

     Looks up the codec info in the Python codec registry and returns a
     *note CodecInfo: 17ee. object as defined below.

     Encodings are first looked up in the registry’s cache.  If not
     found, the list of registered search functions is scanned.  If no
     *note CodecInfo: 17ee. object is found, a *note LookupError: 2367.
     is raised.  Otherwise, the *note CodecInfo: 17ee. object is stored
     in the cache and returned to the caller.

 -- Classe: codecs.CodecInfo (encode, decode, streamreader=None,
          streamwriter=None, incrementalencoder=None,
          incrementaldecoder=None, name=None)

     Codec details when looking up the codec registry.  The constructor
     arguments are stored in attributes of the same name:

      -- Atributo: name

          The name of the encoding.

      -- Atributo: encode
      -- Atributo: decode

          The stateless encoding and decoding functions.  These must be
          functions or methods which have the same interface as the
          *note encode(): 255e. and *note decode(): 255f. methods of
          Codec instances (see *note Codec Interface: 2560.).  The
          functions or methods are expected to work in a stateless mode.

      -- Atributo: incrementalencoder
      -- Atributo: incrementaldecoder

          Incremental encoder and decoder classes or factory functions.
          These have to provide the interface defined by the base
          classes *note IncrementalEncoder: 2563. and *note
          IncrementalDecoder: 2564, respectively.  Incremental codecs
          can maintain state.

      -- Atributo: streamwriter
      -- Atributo: streamreader

          Stream writer and reader classes or factory functions.  These
          have to provide the interface defined by the base classes
          *note StreamWriter: 2567. and *note StreamReader: 2568,
          respectively.  Stream codecs can maintain state.

To simplify access to the various codec components, the module provides
these additional functions which use *note lookup(): 96a. for the codec
lookup:

 -- Função: codecs.getencoder (encoding)

     Look up the codec for the given encoding and return its encoder
     function.

     Raises a *note LookupError: 2367. in case the encoding cannot be
     found.

 -- Função: codecs.getdecoder (encoding)

     Look up the codec for the given encoding and return its decoder
     function.

     Raises a *note LookupError: 2367. in case the encoding cannot be
     found.

 -- Função: codecs.getincrementalencoder (encoding)

     Look up the codec for the given encoding and return its incremental
     encoder class or factory function.

     Raises a *note LookupError: 2367. in case the encoding cannot be
     found or the codec doesn’t support an incremental encoder.

 -- Função: codecs.getincrementaldecoder (encoding)

     Look up the codec for the given encoding and return its incremental
     decoder class or factory function.

     Raises a *note LookupError: 2367. in case the encoding cannot be
     found or the codec doesn’t support an incremental decoder.

 -- Função: codecs.getreader (encoding)

     Look up the codec for the given encoding and return its *note
     StreamReader: 2568. class or factory function.

     Raises a *note LookupError: 2367. in case the encoding cannot be
     found.

 -- Função: codecs.getwriter (encoding)

     Look up the codec for the given encoding and return its *note
     StreamWriter: 2567. class or factory function.

     Raises a *note LookupError: 2367. in case the encoding cannot be
     found.

Custom codecs are made available by registering a suitable codec search
function:

 -- Função: codecs.register (search_function)

     Register a codec search function.  Search functions are expected to
     take one argument, being the encoding name in all lower case
     letters with hyphens and spaces converted to underscores, and
     return a *note CodecInfo: 17ee. object.  In case a search function
     cannot find a given encoding, it should return ‘None’.

     Alterado na versão 3.9: Hyphens and spaces are converted to
     underscore.

 -- Função: codecs.unregister (search_function)

     Unregister a codec search function and clear the registry’s cache.
     If the search function is not registered, do nothing.

     Adicionado na versão 3.10.

While the builtin *note open(): 51c. and the associated *note io: 7f.
module are the recommended approach for working with encoded text files,
this module provides additional utility functions and classes that allow
the use of a wider range of codecs when working with binary files:

 -- Função: codecs.open (filename, mode='r', encoding=None,
          errors='strict', buffering=-1)

     Open an encoded file using the given 'mode' and return an instance
     of *note StreamReaderWriter: 2570, providing transparent
     encoding/decoding.  The default file mode is ‘'r'’, meaning to open
     the file in read mode.

          Nota: If 'encoding' is not ‘None’, then the underlying encoded
          files are always opened in binary mode.  No automatic
          conversion of ‘'\n'’ is done on reading and writing.  The
          'mode' argument may be any binary mode acceptable to the
          built-in *note open(): 51c. function; the ‘'b'’ is
          automatically added.

     'encoding' specifies the encoding which is to be used for the file.
     Any encoding that encodes to and decodes from bytes is allowed, and
     the data types supported by the file methods depend on the codec
     used.

     'errors' may be given to define the error handling.  It defaults to
     ‘'strict'’ which causes a *note ValueError: 202. to be raised in
     case an encoding error occurs.

     'buffering' has the same meaning as for the built-in *note open():
     51c. function.  It defaults to -1 which means that the default
     buffer size will be used.

     Alterado na versão 3.11: O modo ‘'U'’ foi removido.

 -- Função: codecs.EncodedFile (file, data_encoding, file_encoding=None,
          errors='strict')

     Return a *note StreamRecoder: 1b68. instance, a wrapped version of
     'file' which provides transparent transcoding.  The original file
     is closed when the wrapped version is closed.

     Data written to the wrapped file is decoded according to the given
     'data_encoding' and then written to the original file as bytes
     using 'file_encoding'.  Bytes read from the original file are
     decoded according to 'file_encoding', and the result is encoded
     using 'data_encoding'.

     If 'file_encoding' is not given, it defaults to 'data_encoding'.

     'errors' may be given to define the error handling.  It defaults to
     ‘'strict'’, which causes *note ValueError: 202. to be raised in
     case an encoding error occurs.

 -- Função: codecs.iterencode (iterator, encoding, errors='strict',
          **kwargs)

     Uses an incremental encoder to iteratively encode the input
     provided by 'iterator'.  'iterator' must yield *note str: 44c.
     objects.  This function is a *note generator: 109a.  The 'errors'
     argument (as well as any other keyword argument) is passed through
     to the incremental encoder.

     This function requires that the codec accept text *note str: 44c.
     objects to encode.  Therefore it does not support bytes-to-bytes
     encoders such as ‘base64_codec’.

 -- Função: codecs.iterdecode (iterator, encoding, errors='strict',
          **kwargs)

     Uses an incremental decoder to iteratively decode the input
     provided by 'iterator'.  'iterator' must yield *note bytes: 1c2.
     objects.  This function is a *note generator: 109a.  The 'errors'
     argument (as well as any other keyword argument) is passed through
     to the incremental decoder.

     This function requires that the codec accept *note bytes: 1c2.
     objects to decode.  Therefore it does not support text-to-text
     encoders such as ‘rot_13’, although ‘rot_13’ may be used
     equivalently with *note iterencode(): 2572.

 -- Função: codecs.readbuffer_encode (buffer, errors=None, /)

     Return a *note tuple: 370. containing the raw bytes of 'buffer', a
     *note buffer-compatible object: 2e8. or *note str: 44c. (encoded to
     UTF-8 before processing), and their length in bytes.

     The 'errors' argument is ignored.

          >>> codecs.readbuffer_encode(b"Zito")
          (b'Zito', 4)

The module also provides the following constants which are useful for
reading and writing to platform dependent files:

 -- Dado: codecs.BOM
 -- Dado: codecs.BOM_BE
 -- Dado: codecs.BOM_LE
 -- Dado: codecs.BOM_UTF8
 -- Dado: codecs.BOM_UTF16
 -- Dado: codecs.BOM_UTF16_BE
 -- Dado: codecs.BOM_UTF16_LE
 -- Dado: codecs.BOM_UTF32
 -- Dado: codecs.BOM_UTF32_BE
 -- Dado: codecs.BOM_UTF32_LE

     These constants define various byte sequences, being Unicode byte
     order marks (BOMs) for several encodings.  They are used in UTF-16
     and UTF-32 data streams to indicate the byte order used, and in
     UTF-8 as a Unicode signature.  *note BOM_UTF16: 2579. is either
     *note BOM_UTF16_BE: 257a. or *note BOM_UTF16_LE: 257b. depending on
     the platform’s native byte order, *note BOM: 2575. is an alias for
     *note BOM_UTF16: 2579, *note BOM_LE: 2577. for *note BOM_UTF16_LE:
     257b. and *note BOM_BE: 2576. for *note BOM_UTF16_BE: 257a.  The
     others represent the BOM in UTF-8 and UTF-32 encodings.

* Menu:

* Codec Base Classes::
* Encodings and Unicode::
* Standard Encodings::
* Python Specific Encodings::
* encodings — Encodings package::
* encodings.idna — Internationalized Domain Names in Applications: encodings idna — Internationalized Domain Names in Applications.
* encodings.mbcs — Windows ANSI codepage: encodings mbcs — Windows ANSI codepage.
* encodings.utf_8_sig — UTF-8 codec with BOM signature: encodings utf_8_sig — UTF-8 codec with BOM signature.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/codecs.py


File: python.info,  Node: Codec Base Classes,  Next: Encodings and Unicode,  Up: codecs — Codec registry and base classes

5.7.2.1 Codec Base Classes
..........................

The *note codecs: 1b. module defines a set of base classes which define
the interfaces for working with codec objects, and can also be used as
the basis for custom codec implementations.

Each codec has to define four interfaces to make it usable as codec in
Python: stateless encoder, stateless decoder, stream reader and stream
writer.  The stream reader and writers typically reuse the stateless
encoder/decoder to implement the file protocols.  Codec authors also
need to define how the codec will handle encoding and decoding errors.
* Menu:

* Error Handlers::
* Stateless Encoding and Decoding::
* Incremental Encoding and Decoding::
* Stream Encoding and Decoding::


File: python.info,  Node: Error Handlers,  Next: Stateless Encoding and Decoding,  Up: Codec Base Classes

5.7.2.2 Error Handlers
......................

To simplify and standardize error handling, codecs may implement
different error handling schemes by accepting the 'errors' string
argument:

     >>> 'German ß, ♬'.encode(encoding='ascii', errors='backslashreplace')
     b'German \\xdf, \\u266c'
     >>> 'German ß, ♬'.encode(encoding='ascii', errors='xmlcharrefreplace')
     b'German &#223;, &#9836;'

The following error handlers can be used with all Python *note Standard
Encodings: de1. codecs:

Valor                         Significado
                              
----------------------------------------------------------------------------------
                              
‘'strict'’                    Raise *note UnicodeError: 12e6. (or a subclass),
                              this is the default.  Implemented in
                              *note strict_errors(): 2582.
                              
                              
‘'ignore'’                    Ignore the malformed data and continue without
                              further notice.  Implemented in
                              *note ignore_errors(): 2583.
                              
                              
‘'replace'’                   Replace with a replacement marker.  On encoding,
                              use ‘?’ (ASCII character).  On decoding, use ‘�’
                              (U+FFFD, the official REPLACEMENT CHARACTER).
                              Implemented in *note replace_errors(): 2584.
                              
                              
‘'backslashreplace'’          Replace with backslashed escape sequences.  On
                              encoding, use hexadecimal form of Unicode code
                              point with formats ‘\xHH’ ‘\uXXXX’ ‘\UXXXXXXXX’.
                              On decoding, use hexadecimal form of byte value
                              with format ‘\xHH’.  Implemented in
                              *note backslashreplace_errors(): 2585.
                              
                              
‘'surrogateescape'’           On decoding, replace byte with individual
                              surrogate code ranging from ‘U+DC80’ to ‘U+DCFF’.
                              This code will then be turned back into the same
                              byte when the ‘'surrogateescape'’ error handler
                              is used when encoding the data.  (See PEP 383(1)
                              for more.)
                              

The following error handlers are only applicable to encoding (within
*note text encodings: 2310.):

Valor                         Significado
                              
----------------------------------------------------------------------------------
                              
‘'xmlcharrefreplace'’         Replace with XML/HTML numeric character
                              reference, which is a decimal form of Unicode
                              code point with format ‘&#NUM;’.  Implemented in
                              *note xmlcharrefreplace_errors(): 2586.
                              
                              
‘'namereplace'’               Replace with ‘\N{...}’ escape sequences, what
                              appears in the braces is the Name property from
                              Unicode Character Database.  Implemented in
                              *note namereplace_errors(): 2587.
                              

In addition, the following error handler is specific to the given
codecs:

Valor                   Codecs                       Significado
                                                     
-----------------------------------------------------------------------------------------------------
                                                     
‘'surrogatepass'’       utf-8, utf-16, utf-32,       Allow encoding and decoding surrogate code
                        utf-16-be, utf-16-le,        point (‘U+D800’ - ‘U+DFFF’) as normal code
                        utf-32-be, utf-32-le         point.  Otherwise these codecs treat the
                                                     presence of surrogate code point in
                                                     *note str: 44c. as an error.
                                                     

Adicionado na versão 3.1: The ‘'surrogateescape'’ and ‘'surrogatepass'’
error handlers.

Alterado na versão 3.4: The ‘'surrogatepass'’ error handler now works
with utf-16* and utf-32* codecs.

Adicionado na versão 3.5: The ‘'namereplace'’ error handler.

Alterado na versão 3.5: The ‘'backslashreplace'’ error handler now works
with decoding and translating.

The set of allowed values can be extended by registering a new named
error handler:

 -- Função: codecs.register_error (name, error_handler)

     Register the error handling function 'error_handler' under the name
     'name'.  The 'error_handler' argument will be called during
     encoding and decoding in case of an error, when 'name' is specified
     as the errors parameter.

     For encoding, 'error_handler' will be called with a *note
     UnicodeEncodeError: 677. instance, which contains information about
     the location of the error.  The error handler must either raise
     this or a different exception, or return a tuple with a replacement
     for the unencodable part of the input and a position where encoding
     should continue.  The replacement may be either *note str: 44c. or
     *note bytes: 1c2.  If the replacement is bytes, the encoder will
     simply copy them into the output buffer.  If the replacement is a
     string, the encoder will encode the replacement.  Encoding
     continues on original input at the specified position.  Negative
     position values will be treated as being relative to the end of the
     input string.  If the resulting position is out of bound an *note
     IndexError: 157e. will be raised.

     Decoding and translating works similarly, except *note
     UnicodeDecodeError: a1d. or *note UnicodeTranslateError: 2434. will
     be passed to the handler and that the replacement from the error
     handler will be put into the output directly.

Previously registered error handlers (including the standard error
handlers) can be looked up by name:

 -- Função: codecs.lookup_error (name)

     Return the error handler previously registered under the name
     'name'.

     Raises a *note LookupError: 2367. in case the handler cannot be
     found.

The following standard error handlers are also made available as module
level functions:

 -- Função: codecs.strict_errors (exception)

     Implementa a tratativa de erro ‘'strict'’.

     Each encoding or decoding error raises a *note UnicodeError: 12e6.

 -- Função: codecs.ignore_errors (exception)

     Implementa a tratativa de erro ‘'ignore'’.

     Malformed data is ignored; encoding or decoding is continued
     without further notice.

 -- Função: codecs.replace_errors (exception)

     Implementa a tratativa de erro ‘'replace'’.

     Substitutes ‘?’ (ASCII character) for encoding errors or ‘�’
     (U+FFFD, the official REPLACEMENT CHARACTER) for decoding errors.

 -- Função: codecs.backslashreplace_errors (exception)

     Implementa a tratativa de erro ‘'backslashreplace'’.

     Malformed data is replaced by a backslashed escape sequence.  On
     encoding, use the hexadecimal form of Unicode code point with
     formats ‘\xHH’ ‘\uXXXX’ ‘\UXXXXXXXX’.  On decoding, use the
     hexadecimal form of byte value with format ‘\xHH’.

     Alterado na versão 3.5: Works with decoding and translating.

 -- Função: codecs.xmlcharrefreplace_errors (exception)

     Implements the ‘'xmlcharrefreplace'’ error handling (for encoding
     within *note text encoding: 2310. only).

     The unencodable character is replaced by an appropriate XML/HTML
     numeric character reference, which is a decimal form of Unicode
     code point with format ‘&#NUM;’ .

 -- Função: codecs.namereplace_errors (exception)

     Implements the ‘'namereplace'’ error handling (for encoding within
     *note text encoding: 2310. only).

     The unencodable character is replaced by a ‘\N{...}’ escape
     sequence.  The set of characters that appear in the braces is the
     Name property from Unicode Character Database.  For example, the
     German lowercase letter ‘'ß'’ will be converted to byte sequence
     ‘\N{LATIN SMALL LETTER SHARP S}’ .

     Adicionado na versão 3.5.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0383/


File: python.info,  Node: Stateless Encoding and Decoding,  Next: Incremental Encoding and Decoding,  Prev: Error Handlers,  Up: Codec Base Classes

5.7.2.3 Stateless Encoding and Decoding
.......................................

The base *note Codec: 2589. class defines these methods which also
define the function interfaces of the stateless encoder and decoder:

 -- Classe: codecs.Codec

      -- Método: encode (input, errors='strict')

          Encodes the object 'input' and returns a tuple (output object,
          length consumed).  For instance, *note text encoding: 2310.
          converts a string object to a bytes object using a particular
          character set encoding (e.g., ‘cp1252’ or ‘iso-8859-1’).

          The 'errors' argument defines the error handling to apply.  It
          defaults to ‘'strict'’ handling.

          The method may not store state in the *note Codec: 2589.
          instance.  Use *note StreamWriter: 2567. for codecs which have
          to keep state in order to make encoding efficient.

          The encoder must be able to handle zero length input and
          return an empty object of the output object type in this
          situation.

      -- Método: decode (input, errors='strict')

          Decodes the object 'input' and returns a tuple (output object,
          length consumed).  For instance, for a *note text encoding:
          2310, decoding converts a bytes object encoded using a
          particular character set encoding to a string object.

          For text encodings and bytes-to-bytes codecs, 'input' must be
          a bytes object or one which provides the read-only buffer
          interface – for example, buffer objects and memory mapped
          files.

          The 'errors' argument defines the error handling to apply.  It
          defaults to ‘'strict'’ handling.

          The method may not store state in the *note Codec: 2589.
          instance.  Use *note StreamReader: 2568. for codecs which have
          to keep state in order to make decoding efficient.

          The decoder must be able to handle zero length input and
          return an empty object of the output object type in this
          situation.


File: python.info,  Node: Incremental Encoding and Decoding,  Next: Stream Encoding and Decoding,  Prev: Stateless Encoding and Decoding,  Up: Codec Base Classes

5.7.2.4 Incremental Encoding and Decoding
.........................................

The *note IncrementalEncoder: 2563. and *note IncrementalDecoder: 2564.
classes provide the basic interface for incremental encoding and
decoding.  Encoding/decoding the input isn’t done with one call to the
stateless encoder/decoder function, but with multiple calls to the *note
encode(): 258b./*note decode(): 258c. method of the incremental
encoder/decoder.  The incremental encoder/decoder keeps track of the
encoding/decoding process during method calls.

The joined output of calls to the *note encode(): 258b./*note decode():
258c. method is the same as if all the single inputs were joined into
one, and this input was encoded/decoded with the stateless
encoder/decoder.

* Menu:

* IncrementalEncoder Objects::
* IncrementalDecoder Objects::


File: python.info,  Node: IncrementalEncoder Objects,  Next: IncrementalDecoder Objects,  Up: Incremental Encoding and Decoding

5.7.2.5 IncrementalEncoder Objects
..................................

The *note IncrementalEncoder: 2563. class is used for encoding an input
in multiple steps.  It defines the following methods which every
incremental encoder must define in order to be compatible with the
Python codec registry.

 -- Classe: codecs.IncrementalEncoder (errors='strict')

     Constructor for an *note IncrementalEncoder: 2563. instance.

     All incremental encoders must provide this constructor interface.
     They are free to add additional keyword arguments, but only the
     ones defined here are used by the Python codec registry.

     The *note IncrementalEncoder: 2563. may implement different error
     handling schemes by providing the 'errors' keyword argument.  See
     *note Error Handlers: 18fa. for possible values.

     The 'errors' argument will be assigned to an attribute of the same
     name.  Assigning to this attribute makes it possible to switch
     between different error handling strategies during the lifetime of
     the *note IncrementalEncoder: 2563. object.

      -- Método: encode (object, final=False)

          Encodes 'object' (taking the current state of the encoder into
          account) and returns the resulting encoded object.  If this is
          the last call to *note encode(): f33. 'final' must be true
          (the default is false).

      -- Método: reset ()

          Reset the encoder to the initial state.  The output is
          discarded: call ‘.encode(object, final=True)’, passing an
          empty byte or text string if necessary, to reset the encoder
          and to get the output.

      -- Método: getstate ()

          Return the current state of the encoder which must be an
          integer.  The implementation should make sure that ‘0’ is the
          most common state.  (States that are more complicated than
          integers can be converted into an integer by
          marshaling/pickling the state and encoding the bytes of the
          resulting string into an integer.)

      -- Método: setstate (state)

          Set the state of the encoder to 'state'.  'state' must be an
          encoder state returned by *note getstate(): 2590.


File: python.info,  Node: IncrementalDecoder Objects,  Prev: IncrementalEncoder Objects,  Up: Incremental Encoding and Decoding

5.7.2.6 IncrementalDecoder Objects
..................................

The *note IncrementalDecoder: 2564. class is used for decoding an input
in multiple steps.  It defines the following methods which every
incremental decoder must define in order to be compatible with the
Python codec registry.

 -- Classe: codecs.IncrementalDecoder (errors='strict')

     Constructor for an *note IncrementalDecoder: 2564. instance.

     All incremental decoders must provide this constructor interface.
     They are free to add additional keyword arguments, but only the
     ones defined here are used by the Python codec registry.

     The *note IncrementalDecoder: 2564. may implement different error
     handling schemes by providing the 'errors' keyword argument.  See
     *note Error Handlers: 18fa. for possible values.

     The 'errors' argument will be assigned to an attribute of the same
     name.  Assigning to this attribute makes it possible to switch
     between different error handling strategies during the lifetime of
     the *note IncrementalDecoder: 2564. object.

      -- Método: decode (object, final=False)

          Decodes 'object' (taking the current state of the decoder into
          account) and returns the resulting decoded object.  If this is
          the last call to *note decode(): f34. 'final' must be true
          (the default is false).  If 'final' is true the decoder must
          decode the input completely and must flush all buffers.  If
          this isn’t possible (e.g.  because of incomplete byte
          sequences at the end of the input) it must initiate error
          handling just like in the stateless case (which might raise an
          exception).

      -- Método: reset ()

          Reset the decoder to the initial state.

      -- Método: getstate ()

          Return the current state of the decoder.  This must be a tuple
          with two items, the first must be the buffer containing the
          still undecoded input.  The second must be an integer and can
          be additional state info.  (The implementation should make
          sure that ‘0’ is the most common additional state info.)  If
          this additional state info is ‘0’ it must be possible to set
          the decoder to the state which has no input buffered and ‘0’
          as the additional state info, so that feeding the previously
          buffered input to the decoder returns it to the previous state
          without producing any output.  (Additional state info that is
          more complicated than integers can be converted into an
          integer by marshaling/pickling the info and encoding the bytes
          of the resulting string into an integer.)

      -- Método: setstate (state)

          Set the state of the decoder to 'state'.  'state' must be a
          decoder state returned by *note getstate(): 2595.


File: python.info,  Node: Stream Encoding and Decoding,  Prev: Incremental Encoding and Decoding,  Up: Codec Base Classes

5.7.2.7 Stream Encoding and Decoding
....................................

The *note StreamWriter: 2567. and *note StreamReader: 2568. classes
provide generic working interfaces which can be used to implement new
encoding submodules very easily.  See ‘encodings.utf_8’ for an example
of how this is done.

* Menu:

* StreamWriter Objects::
* StreamReader Objects::
* StreamReaderWriter Objects::
* StreamRecoder Objects::


File: python.info,  Node: StreamWriter Objects,  Next: StreamReader Objects,  Up: Stream Encoding and Decoding

5.7.2.8 StreamWriter Objects
............................

The *note StreamWriter: 2567. class is a subclass of *note Codec: 2589.
and defines the following methods which every stream writer must define
in order to be compatible with the Python codec registry.

 -- Classe: codecs.StreamWriter (stream, errors='strict')

     Constructor for a *note StreamWriter: 2567. instance.

     All stream writers must provide this constructor interface.  They
     are free to add additional keyword arguments, but only the ones
     defined here are used by the Python codec registry.

     The 'stream' argument must be a file-like object open for writing
     text or binary data, as appropriate for the specific codec.

     The *note StreamWriter: 2567. may implement different error
     handling schemes by providing the 'errors' keyword argument.  See
     *note Error Handlers: 18fa. for the standard error handlers the
     underlying stream codec may support.

     The 'errors' argument will be assigned to an attribute of the same
     name.  Assigning to this attribute makes it possible to switch
     between different error handling strategies during the lifetime of
     the *note StreamWriter: 2567. object.

      -- Método: write (object)

          Writes the object’s contents encoded to the stream.

      -- Método: writelines (list)

          Writes the concatenated iterable of strings to the stream
          (possibly by reusing the *note write(): 259a. method).
          Infinite or very large iterables are not supported.  The
          standard bytes-to-bytes codecs do not support this method.

      -- Método: reset ()

          Resets the codec buffers used for keeping internal state.

          Chamar este método deve garantir que os dados na saída estejam
          num estado limpo, que permite anexar novos dados sem ter que
          verificar novamente todo o fluxo para recuperar o estado.

In addition to the above methods, the *note StreamWriter: 2567. must
also inherit all other methods and attributes from the underlying
stream.


File: python.info,  Node: StreamReader Objects,  Next: StreamReaderWriter Objects,  Prev: StreamWriter Objects,  Up: Stream Encoding and Decoding

5.7.2.9 StreamReader Objects
............................

The *note StreamReader: 2568. class is a subclass of *note Codec: 2589.
and defines the following methods which every stream reader must define
in order to be compatible with the Python codec registry.

 -- Classe: codecs.StreamReader (stream, errors='strict')

     Constructor for a *note StreamReader: 2568. instance.

     All stream readers must provide this constructor interface.  They
     are free to add additional keyword arguments, but only the ones
     defined here are used by the Python codec registry.

     The 'stream' argument must be a file-like object open for reading
     text or binary data, as appropriate for the specific codec.

     The *note StreamReader: 2568. may implement different error
     handling schemes by providing the 'errors' keyword argument.  See
     *note Error Handlers: 18fa. for the standard error handlers the
     underlying stream codec may support.

     The 'errors' argument will be assigned to an attribute of the same
     name.  Assigning to this attribute makes it possible to switch
     between different error handling strategies during the lifetime of
     the *note StreamReader: 2568. object.

     The set of allowed values for the 'errors' argument can be extended
     with *note register_error(): 14e3.

      -- Método: read (size=-1, chars=-1, firstline=False)

          Decodes data from the stream and returns the resulting object.

          The 'chars' argument indicates the number of decoded code
          points or bytes to return.  The *note read(): 259f. method
          will never return more data than requested, but it might
          return less, if there is not enough available.

          The 'size' argument indicates the approximate maximum number
          of encoded bytes or code points to read for decoding.  The
          decoder can modify this setting as appropriate.  The default
          value -1 indicates to read and decode as much as possible.
          This parameter is intended to prevent having to decode huge
          files in one step.

          The 'firstline' flag indicates that it would be sufficient to
          only return the first line, if there are decoding errors on
          later lines.

          The method should use a greedy read strategy meaning that it
          should read as much data as is allowed within the definition
          of the encoding and the given size, e.g.  if optional encoding
          endings or state markers are available on the stream, these
          should be read too.

      -- Método: readline (size=None, keepends=True)

          Read one line from the input stream and return the decoded
          data.

          'size', if given, is passed as size argument to the stream’s
          *note read(): 259f. method.

          If 'keepends' is false line-endings will be stripped from the
          lines returned.

      -- Método: readlines (sizehint=None, keepends=True)

          Read all lines available on the input stream and return them
          as a list of lines.

          Line-endings are implemented using the codec’s *note decode():
          f34. method and are included in the list entries if 'keepends'
          is true.

          'sizehint', if given, is passed as the 'size' argument to the
          stream’s *note read(): 259f. method.

      -- Método: reset ()

          Resets the codec buffers used for keeping internal state.

          Note that no stream repositioning should take place.  This
          method is primarily intended to be able to recover from
          decoding errors.

In addition to the above methods, the *note StreamReader: 2568. must
also inherit all other methods and attributes from the underlying
stream.


File: python.info,  Node: StreamReaderWriter Objects,  Next: StreamRecoder Objects,  Prev: StreamReader Objects,  Up: Stream Encoding and Decoding

5.7.2.10 StreamReaderWriter Objects
...................................

The *note StreamReaderWriter: 2570. is a convenience class that allows
wrapping streams which work in both read and write modes.

The design is such that one can use the factory functions returned by
the *note lookup(): 96a. function to construct the instance.

 -- Classe: codecs.StreamReaderWriter (stream, Reader, Writer,
          errors='strict')

     Creates a *note StreamReaderWriter: 2570. instance.  'stream' must
     be a file-like object.  'Reader' and 'Writer' must be factory
     functions or classes providing the *note StreamReader: 2568. and
     *note StreamWriter: 2567. interface resp.  Error handling is done
     in the same way as defined for the stream readers and writers.

*note StreamReaderWriter: 2570. instances define the combined interfaces
of *note StreamReader: 2568. and *note StreamWriter: 2567. classes.
They inherit all other methods and attributes from the underlying
stream.


File: python.info,  Node: StreamRecoder Objects,  Prev: StreamReaderWriter Objects,  Up: Stream Encoding and Decoding

5.7.2.11 StreamRecoder Objects
..............................

The *note StreamRecoder: 1b68. translates data from one encoding to
another, which is sometimes useful when dealing with different encoding
environments.

The design is such that one can use the factory functions returned by
the *note lookup(): 96a. function to construct the instance.

 -- Classe: codecs.StreamRecoder (stream, encode, decode, Reader,
          Writer, errors='strict')

     Creates a *note StreamRecoder: 1b68. instance which implements a
     two-way conversion: 'encode' and 'decode' work on the frontend —
     the data visible to code calling *note read(): 259f. and *note
     write(): 259a, while 'Reader' and 'Writer' work on the backend —
     the data in 'stream'.

     You can use these objects to do transparent transcodings, e.g.,
     from Latin-1 to UTF-8 and back.

     The 'stream' argument must be a file-like object.

     The 'encode' and 'decode' arguments must adhere to the *note Codec:
     2589. interface.  'Reader' and 'Writer' must be factory functions
     or classes providing objects of the *note StreamReader: 2568. and
     *note StreamWriter: 2567. interface respectively.

     Error handling is done in the same way as defined for the stream
     readers and writers.

*note StreamRecoder: 1b68. instances define the combined interfaces of
*note StreamReader: 2568. and *note StreamWriter: 2567. classes.  They
inherit all other methods and attributes from the underlying stream.


File: python.info,  Node: Encodings and Unicode,  Next: Standard Encodings,  Prev: Codec Base Classes,  Up: codecs — Codec registry and base classes

5.7.2.12 Encodings and Unicode
..............................

Strings are stored internally as sequences of code points in range
‘U+0000’–‘U+10FFFF’.  (See PEP 393(1) for more details about the
implementation.)  Once a string object is used outside of CPU and
memory, endianness and how these arrays are stored as bytes become an
issue.  As with other codecs, serialising a string into a sequence of
bytes is known as 'encoding', and recreating the string from the
sequence of bytes is known as 'decoding'.  There are a variety of
different text serialisation codecs, which are collectivity referred to
as *note text encodings: 2310.

The simplest text encoding (called ‘'latin-1'’ or ‘'iso-8859-1'’) maps
the code points 0–255 to the bytes ‘0x0’–‘0xff’, which means that a
string object that contains code points above ‘U+00FF’ can’t be encoded
with this codec.  Doing so will raise a *note UnicodeEncodeError: 677.
that looks like the following (although the details of the error message
may differ): ‘UnicodeEncodeError: 'latin-1' codec can't encode character
'\u1234' in position 3: ordinal not in range(256)’.

There’s another group of encodings (the so called charmap encodings)
that choose a different subset of all Unicode code points and how these
code points are mapped to the bytes ‘0x0’–‘0xff’.  To see how this is
done simply open e.g.  ‘encodings/cp1252.py’ (which is an encoding that
is used primarily on Windows).  There’s a string constant with 256
characters that shows you which character is mapped to which byte value.

All of these encodings can only encode 256 of the 1114112 code points
defined in Unicode.  A simple and straightforward way that can store
each Unicode code point, is to store each code point as four consecutive
bytes.  There are two possibilities: store the bytes in big endian or in
little endian order.  These two encodings are called ‘UTF-32-BE’ and
‘UTF-32-LE’ respectively.  Their disadvantage is that if, for example,
you use ‘UTF-32-BE’ on a little endian machine you will always have to
swap bytes on encoding and decoding.  Python’s ‘UTF-16’ and ‘UTF-32’
codecs avoid this problem by using the platform’s native byte order when
no BOM is present.  Python follows prevailing platform practice, so
native-endian data round-trips without redundant byte swapping, even
though the Unicode Standard defaults to big-endian when the byte order
is unspecified.  When these bytes are read by a CPU with a different
endianness, the bytes have to be swapped.  To be able to detect the
endianness of a ‘UTF-16’ or ‘UTF-32’ byte sequence, a BOM (“Byte Order
Mark”) is used.  This is the Unicode character ‘U+FEFF’.  This character
can be prepended to every ‘UTF-16’ or ‘UTF-32’ byte sequence.  The byte
swapped version of this character (‘0xFFFE’) is an illegal character
that may not appear in a Unicode text.  When the first character of a
‘UTF-16’ or ‘UTF-32’ byte sequence is ‘U+FFFE’, the bytes have to be
swapped on decoding.

Unfortunately the character ‘U+FEFF’ had a second purpose as a ‘ZERO
WIDTH NO-BREAK SPACE’: a character that has no width and doesn’t allow a
word to be split.  It can e.g.  be used to give hints to a ligature
algorithm.  With Unicode 4.0 using ‘U+FEFF’ as a ‘ZERO WIDTH NO-BREAK
SPACE’ has been deprecated (with ‘U+2060’ (‘WORD JOINER’) assuming this
role).  Nevertheless Unicode software still must be able to handle
‘U+FEFF’ in both roles: as a BOM it’s a device to determine the storage
layout of the encoded bytes, and vanishes once the byte sequence has
been decoded into a string; as a ‘ZERO WIDTH NO-BREAK SPACE’ it’s a
normal character that will be decoded like any other.

There’s another encoding that is able to encode the full range of
Unicode characters: UTF-8.  UTF-8 is an 8-bit encoding, which means
there are no issues with byte order in UTF-8.  Each byte in a UTF-8 byte
sequence consists of two parts: marker bits (the most significant bits)
and payload bits.  The marker bits are a sequence of zero to four ‘1’
bits followed by a ‘0’ bit.  Unicode characters are encoded like this
(with x being payload bits, which when concatenated give the Unicode
character):

Range                                   Encoding
                                        
-------------------------------------------------------------------------------------------
                                        
‘U-00000000’ … ‘U-0000007F’             0xxxxxxx
                                        
                                        
‘U-00000080’ … ‘U-000007FF’             110xxxxx 10xxxxxx
                                        
                                        
‘U-00000800’ … ‘U-0000FFFF’             1110xxxx 10xxxxxx 10xxxxxx
                                        
                                        
‘U-00010000’ … ‘U-0010FFFF’             11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
                                        

The least significant bit of the Unicode character is the rightmost x
bit.

As UTF-8 is an 8-bit encoding no BOM is required and any ‘U+FEFF’
character in the decoded string (even if it’s the first character) is
treated as a ‘ZERO WIDTH NO-BREAK SPACE’.

Without external information it’s impossible to reliably determine which
encoding was used for encoding a string.  Each charmap encoding can
decode any random byte sequence.  However that’s not possible with
UTF-8, as UTF-8 byte sequences have a structure that doesn’t allow
arbitrary byte sequences.  To increase the reliability with which a
UTF-8 encoding can be detected, Microsoft invented a variant of UTF-8
(that Python calls ‘"utf-8-sig"’) for its Notepad program: Before any of
the Unicode characters is written to the file, a UTF-8 encoded BOM
(which looks like this as a byte sequence: ‘0xef’, ‘0xbb’, ‘0xbf’) is
written.  As it’s rather improbable that any charmap encoded file starts
with these byte values (which would e.g.  map to

          LATIN SMALL LETTER I WITH DIAERESIS
          RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
          INVERTED QUESTION MARK

in iso-8859-1), this increases the probability that a ‘utf-8-sig’
encoding can be correctly guessed from the byte sequence.  So here the
BOM is not used to be able to determine the byte order used for
generating the byte sequence, but as a signature that helps in guessing
the encoding.  On encoding the utf-8-sig codec will write ‘0xef’,
‘0xbb’, ‘0xbf’ as the first three bytes to the file.  On decoding
‘utf-8-sig’ will skip those three bytes if they appear as the first
three bytes in the file.  In UTF-8, the use of the BOM is discouraged
and should generally be avoided.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0393/


File: python.info,  Node: Standard Encodings,  Next: Python Specific Encodings,  Prev: Encodings and Unicode,  Up: codecs — Codec registry and base classes

5.7.2.13 Standard Encodings
...........................

Python comes with a number of codecs built-in, either implemented as C
functions or with dictionaries as mapping tables.  The following table
lists the codecs by name, together with a few common aliases, and the
languages for which the encoding is likely used.  Neither the list of
aliases nor the list of languages is meant to be exhaustive.  Notice
that spelling alternatives that only differ in case or use a hyphen
instead of an underscore are also valid aliases because they are
equivalent when normalized by *note normalize_encoding(): 7fe.  For
example, ‘'utf-8'’ is a valid alias for the ‘'utf_8'’ codec.

     Nota: The below table lists the most common aliases, for a complete
     list refer to the source aliases.py(1) file.

'Detalhes da implementação do CPython:' Some common encodings can bypass
the codecs lookup machinery to improve performance.  These optimization
opportunities are only recognized by CPython for a limited set of (case
insensitive) aliases: utf-8, utf8, latin-1, latin1, iso-8859-1,
iso8859-1, mbcs (Windows only), ascii, us-ascii, utf-16, utf16, utf-32,
utf32, and the same using underscores instead of dashes.  Using
alternative aliases for these encodings may result in slower execution.

Alterado na versão 3.6: Optimization opportunity recognized for
us-ascii.

Many of the character sets support the same languages.  They vary in
individual characters (e.g.  whether the EURO SIGN is supported or not),
and in the assignment of characters to code positions.  For the European
languages in particular, the following variants typically exist:

   * an ISO 8859 codeset

   * a Microsoft Windows code page, which is typically derived from an
     8859 codeset, but replaces control characters with additional
     graphic characters

   * an IBM EBCDIC code page

   * an IBM PC code page, which is ASCII compatible

Codec                 Aliases                              Idiomas
                                                           
------------------------------------------------------------------------------------------------
                                                           
ascii                 646, us-ascii                        Inglês
                                                           
                                                           
big5                  big5-tw, csbig5                      Traditional Chinese
                                                           
                                                           
big5hkscs             big5-hkscs, hkscs                    Traditional Chinese
                                                           
                                                           
cp037                 IBM037, IBM039                       Inglês
                                                           
                                                           
cp273                 273, IBM273, csIBM273                Alemão
                                                           
                                                           Adicionado na versão 3.4.
                                                           
                                                           
cp424                 EBCDIC-CP-HE, IBM424                 Hebraico
                                                           
                                                           
cp437                 437, IBM437                          Inglês
                                                           
                                                           
cp500                 EBCDIC-CP-BE, EBCDIC-CP-CH, IBM500   Western Europe
                                                           
                                                           
cp720                                                      Árabe
                                                           
                                                           
cp737                                                      Grego
                                                           
                                                           
cp775                 IBM775                               Baltic languages
                                                           
                                                           
cp850                 850, IBM850                          Western Europe
                                                           
                                                           
cp852                 852, IBM852                          Central and Eastern Europe
                                                           
                                                           
cp855                 855, IBM855                          Belarusian, Bulgarian, Macedonian,
                                                           Russian, Serbian
                                                           
                                                           
cp856                                                      Hebraico
                                                           
                                                           
cp857                 857, IBM857                          Turco
                                                           
                                                           
cp858                 858, IBM858                          Western Europe
                                                           
                                                           
cp860                 860, IBM860                          Português
                                                           
                                                           
cp861                 861, CP-IS, IBM861                   Islandês
                                                           
                                                           
cp862                 862, IBM862                          Hebraico
                                                           
                                                           
cp863                 863, IBM863                          Canadense
                                                           
                                                           
cp864                 IBM864                               Árabe
                                                           
                                                           
cp865                 865, IBM865                          Danish, Norwegian
                                                           
                                                           
cp866                 866, IBM866                          Russo
                                                           
                                                           
cp869                 869, CP-GR, IBM869                   Grego
                                                           
                                                           
cp874                                                      Tailandês
                                                           
                                                           
cp875                                                      Grego
                                                           
                                                           
cp932                 932, ms932, mskanji, ms-kanji,       Japonês
                      windows-31j                          
                      
                                                           
cp949                 949, ms949, uhc                      Coreano
                                                           
                                                           
cp950                 950, ms950                           Traditional Chinese
                                                           
                                                           
cp1006                                                     Urdu
                                                           
                                                           
cp1026                ibm1026                              Turco
                                                           
                                                           
cp1125                1125, ibm1125, cp866u, ruscii        Ucraniano
                                                           
                                                           Adicionado na versão 3.4.
                                                           
                                                           
cp1140                ibm1140                              Western Europe
                                                           
                                                           
cp1250                windows-1250                         Central and Eastern Europe
                                                           
                                                           
cp1251                windows-1251                         Belarusian, Bulgarian, Macedonian,
                                                           Russian, Serbian
                                                           
                                                           
cp1252                windows-1252                         Western Europe
                                                           
                                                           
cp1253                windows-1253                         Grego
                                                           
                                                           
cp1254                windows-1254                         Turco
                                                           
                                                           
cp1255                windows-1255                         Hebraico
                                                           
                                                           
cp1256                windows-1256                         Árabe
                                                           
                                                           
cp1257                windows-1257                         Baltic languages
                                                           
                                                           
cp1258                windows-1258                         Vietnamita
                                                           
                                                           
euc_jp                eucjp, ujis, u-jis                   Japonês
                                                           
                                                           
euc_jis_2004          jisx0213, eucjis2004                 Japonês
                                                           
                                                           
euc_jisx0213          eucjisx0213                          Japonês
                                                           
                                                           
euc_kr                euckr, korean, ksc5601, ks_c-5601,   Coreano
                      ks_c-5601-1987, ksx1001, ks_x-1001   
                      
                                                           
gb2312                chinese, csiso58gb231280, euc-cn,    Simplified Chinese
                      euccn, eucgb2312-cn, gb2312-1980,    
                      gb2312-80, iso-ir-58
                      
                                                           
gbk                   936, cp936, ms936                    Unified Chinese
                                                           
                                                           
gb18030               gb18030-2000                         Unified Chinese
                                                           
                                                           
hz                    hzgb, hz-gb, hz-gb-2312              Simplified Chinese
                                                           
                                                           
iso2022_jp            csiso2022jp, iso2022jp,              Japonês
                      iso-2022-jp                          
                      
                                                           
iso2022_jp_1          iso2022jp-1, iso-2022-jp-1           Japonês
                                                           
                                                           
iso2022_jp_2          iso2022jp-2, iso-2022-jp-2           Japanese, Korean, Simplified
                                                           Chinese, Western Europe, Greek
                                                           
                                                           
iso2022_jp_2004       iso2022jp-2004, iso-2022-jp-2004     Japonês
                                                           
                                                           
iso2022_jp_3          iso2022jp-3, iso-2022-jp-3           Japonês
                                                           
                                                           
iso2022_jp_ext        iso2022jp-ext, iso-2022-jp-ext       Japonês
                                                           
                                                           
iso2022_kr            csiso2022kr, iso2022kr,              Coreano
                      iso-2022-kr                          
                      
                                                           
latin_1               iso-8859-1, iso8859-1, 8859,         Western Europe
                      cp819, latin, latin1, L1             
                      
                                                           
iso8859_2             iso-8859-2, latin2, L2               Central and Eastern Europe
                                                           
                                                           
iso8859_3             iso-8859-3, latin3, L3               Esperanto, Maltese
                                                           
                                                           
iso8859_4             iso-8859-4, latin4, L4               Northern Europe
                                                           
                                                           
iso8859_5             iso-8859-5, cyrillic                 Belarusian, Bulgarian, Macedonian,
                                                           Russian, Serbian
                                                           
                                                           
iso8859_6             iso-8859-6, arabic                   Árabe
                                                           
                                                           
iso8859_7             iso-8859-7, greek, greek8            Grego
                                                           
                                                           
iso8859_8             iso-8859-8, hebrew                   Hebraico
                                                           
                                                           
iso8859_9             iso-8859-9, latin5, L5               Turco
                                                           
                                                           
iso8859_10            iso-8859-10, latin6, L6              Nordic languages
                                                           
                                                           
iso8859_11            iso-8859-11, thai                    Thai languages
                                                           
                                                           
iso8859_13            iso-8859-13, latin7, L7              Baltic languages
                                                           
                                                           
iso8859_14            iso-8859-14, latin8, L8              Celtic languages
                                                           
                                                           
iso8859_15            iso-8859-15, latin9, L9              Western Europe
                                                           
                                                           
iso8859_16            iso-8859-16, latin10, L10            South-Eastern Europe
                                                           
                                                           
johab                 cp1361, ms1361                       Coreano
                                                           
                                                           
koi8_r                                                     Russo
                                                           
                                                           
koi8_t                                                     Tajik
                                                           
                                                           Adicionado na versão 3.5.
                                                           
                                                           
koi8_u                                                     Ucraniano
                                                           
                                                           
kz1048                kz_1048, strk1048_2002, rk1048       Cazaque
                                                           
                                                           Adicionado na versão 3.5.
                                                           
                                                           
mac_cyrillic          maccyrillic                          Belarusian, Bulgarian, Macedonian,
                                                           Russian, Serbian
                                                           
                                                           
mac_greek             macgreek                             Grego
                                                           
                                                           
mac_iceland           maciceland                           Islandês
                                                           
                                                           
mac_latin2            maclatin2, maccentraleurope,         Central and Eastern Europe
                      mac_centeuro                         
                      
                                                           
mac_roman             macroman, macintosh                  Western Europe
                                                           
                                                           
mac_turkish           macturkish                           Turco
                                                           
                                                           
ptcp154               csptcp154, pt154, cp154,             Cazaque
                      cyrillic-asian                       
                      
                                                           
shift_jis             csshiftjis, shiftjis, sjis, s_jis    Japonês
                                                           
                                                           
shift_jis_2004        shiftjis2004, sjis_2004, sjis2004    Japonês
                                                           
                                                           
shift_jisx0213        shiftjisx0213, sjisx0213,            Japonês
                      s_jisx0213                           
                      
                                                           
utf_32                U32, utf32                           todas linguagens
                                                           
                                                           
utf_32_be             UTF-32BE                             todas linguagens
                                                           
                                                           
utf_32_le             UTF-32LE                             todas linguagens
                                                           
                                                           
utf_16                U16, utf16                           todas linguagens
                                                           
                                                           
utf_16_be             UTF-16BE                             todas linguagens
                                                           
                                                           
utf_16_le             UTF-16LE                             todas linguagens
                                                           
                                                           
utf_7                 U7, unicode-1-1-utf-7                todas linguagens
                                                           
                                                           
utf_8                 U8, UTF, utf8, cp65001               todas linguagens
                                                           
                                                           
utf_8_sig                                                  todas linguagens
                                                           

Alterado na versão 3.4: The utf-16* and utf-32* encoders no longer allow
surrogate code points (‘U+D800’–‘U+DFFF’) to be encoded.  The utf-32*
decoders no longer decode byte sequences that correspond to surrogate
code points.

Alterado na versão 3.8: ‘cp65001’ is now an alias to ‘utf_8’.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/encodings/aliases.py


File: python.info,  Node: Python Specific Encodings,  Next: encodings — Encodings package,  Prev: Standard Encodings,  Up: codecs — Codec registry and base classes

5.7.2.14 Python Specific Encodings
..................................

A number of predefined codecs are specific to Python, so their codec
names have no meaning outside Python.  These are listed in the tables
below based on the expected input and output types (note that while text
encodings are the most common use case for codecs, the underlying codec
infrastructure supports arbitrary data transforms rather than just text
encodings).  For asymmetric codecs, the stated meaning describes the
encoding direction.

* Menu:

* Text Encodings::
* Binary Transforms::
* Standalone Codec Functions::
* Text Transforms::


File: python.info,  Node: Text Encodings,  Next: Binary Transforms,  Up: Python Specific Encodings

5.7.2.15 Text Encodings
.......................

The following codecs provide *note str: 44c. to *note bytes: 1c2.
encoding and *note bytes-like object: d4f. to *note str: 44c. decoding,
similar to the Unicode text encodings.

Codec                    Aliases       Significado
                                       
-----------------------------------------------------------------------
                                       
idna                                   Implement RFC 3490(1), see
                                       also
                                       *note encodings.idna: 52.
                                       Only ‘errors='strict'’ is
                                       supported.
                                       
                                       
mbcs                     ansi, dbcs    Windows only: Encode the
                                       operand according to the ANSI
                                       codepage (CP_ACP).
                                       
                                       
oem                                    Windows only: Encode the
                                       operand according to the OEM
                                       codepage (CP_OEMCP).
                                       
                                       Adicionado na versão 3.6.
                                       
                                       
palmos                                 Encoding of PalmOS 3.5.
                                       
                                       
punycode                               Implement RFC 3492(2).
                                       Stateful codecs are not
                                       supported.
                                       
                                       
raw_unicode_escape                     Latin-1 encoding with
                                       ‘\uXXXX’ and ‘\UXXXXXXXX’ for
                                       other code points.  Existing
                                       backslashes are not escaped
                                       in any way.  It is used in
                                       the Python pickle protocol.
                                       
                                       
undefined                              This Codec should only be
                                       used for testing purposes.
                                       
                                       Raise an exception for all
                                       conversions, even empty
                                       strings.  The error handler
                                       is ignored.
                                       
                                       
unicode_escape                         Encoding suitable as the
                                       contents of a Unicode literal
                                       in ASCII-encoded Python
                                       source code, except that
                                       quotes are not escaped.
                                       Decode from Latin-1 source
                                       code.  Beware that Python
                                       source code actually uses
                                       UTF-8 by default.
                                       

Alterado na versão 3.8: “unicode_internal” codec is removed.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc3490.html

   (2) https://datatracker.ietf.org/doc/html/rfc3492.html


File: python.info,  Node: Binary Transforms,  Next: Standalone Codec Functions,  Prev: Text Encodings,  Up: Python Specific Encodings

5.7.2.16 Binary Transforms
..........................

The following codecs provide binary transforms: *note bytes-like object:
d4f. to *note bytes: 1c2. mappings.  They are not supported by *note
bytes.decode(): 8dc. (which only produces *note str: 44c. output).

Codec                      Aliases                Significado                        Encoder / decoder
                                                                                     
------------------------------------------------------------------------------------------------------------------------
                                                                                     
base64_codec (1)           base64, base_64        Convert the operand to multiline   *note base64.encodebytes(): 95a.
                                                  MIME base64 (the result always     /
                                                  includes a trailing ‘'\n'’).       *note base64.decodebytes(): 95b.
                                                                                     
                                                  Alterado na versão 3.4: accepts
                                                  any
                                                  *note bytes-like object: d4f. as
                                                  input for encoding and decoding
                                                  
                                                                                     
bz2_codec                  bz2                    Compress the operand using bz2.    *note bz2.compress(): 25ad. /
                                                                                     *note bz2.decompress(): 10cd.
                                                                                     
                                                                                     
hex_codec                  hex                    Convert the operand to             *note binascii.b2a_hex(): 25ae.
                                                  hexadecimal representation, with   /
                                                  two digits per byte.               *note binascii.a2b_hex(): 25af.
                                                                                     
                                                                                     
quopri_codec               quopri,                Convert the operand to MIME        *note quopri.encode(): 25b0.
                           quotedprintable,       quoted printable.                  with ‘quotetabs=True’ /
                           quoted_printable                                          *note quopri.decode(): 25b1.
                                                                                     
                                                                                     
uu_codec                   uu                     Convert the operand using
                                                  uuencode.
                                                  
                                                                                     
zlib_codec                 zip, zlib              Compress the operand using gzip.   *note zlib.compress(): 63f. /
                                                                                     *note zlib.decompress(): d2f.
                                                                                     

Adicionado na versão 3.2: Restoration of the binary transforms.

Alterado na versão 3.4: Restoration of the aliases for the binary
transforms.

   ---------- Footnotes ----------

   (1) In addition to *note bytes-like objects: d4f, ‘'base64_codec'’
also accepts ASCII-only instances of *note str: 44c. for decoding


File: python.info,  Node: Standalone Codec Functions,  Next: Text Transforms,  Prev: Binary Transforms,  Up: Python Specific Encodings

5.7.2.17 Standalone Codec Functions
...................................

The following functions provide encoding and decoding functionality
similar to codecs, but are not available as named codecs through *note
codecs.encode(): f33. or *note codecs.decode(): f34.  They are used
internally (for example, by *note pickle: a6.) and behave similarly to
the ‘string_escape’ codec that was removed in Python 3.

 -- Função: codecs.escape_encode (input, errors=None)

     Encode 'input' using escape sequences.  Similar to how *note
     repr(): 800. on bytes produces escaped byte values.

     'input' must be a *note bytes: 1c2. object.

     Returns a tuple ‘(output, length)’ where 'output' is a *note bytes:
     1c2. object and 'length' is the number of bytes consumed.

 -- Função: codecs.escape_decode (input, errors=None)

     Decode 'input' from escape sequences back to the original bytes.

     'input' must be a *note bytes-like object: d4f.

     Returns a tuple ‘(output, length)’ where 'output' is a *note bytes:
     1c2. object and 'length' is the number of bytes consumed.


File: python.info,  Node: Text Transforms,  Prev: Standalone Codec Functions,  Up: Python Specific Encodings

5.7.2.18 Text Transforms
........................

The following codec provides a text transform: a *note str: 44c. to
*note str: 44c. mapping.  It is not supported by *note str.encode():
8db. (which only produces *note bytes: 1c2. output).

Codec                    Aliases       Significado
                                       
-----------------------------------------------------------------------
                                       
rot_13                   rot13         Return the Caesar-cypher
                                       encryption of the operand.
                                       

Adicionado na versão 3.2: Restoration of the ‘rot_13’ text transform.

Alterado na versão 3.4: Restoration of the ‘rot13’ alias.


File: python.info,  Node: encodings — Encodings package,  Next: encodings idna — Internationalized Domain Names in Applications,  Prev: Python Specific Encodings,  Up: codecs — Codec registry and base classes

5.7.2.19 ‘encodings’ — Encodings package
........................................

This module implements the following functions:

 -- Função: encodings.normalize_encoding (encoding)

     Normalize encoding name 'encoding'.

     Normalization works as follows: all non-alphanumeric characters
     except the dot used for Python package names are collapsed and
     replaced with a single underscore, leading and trailing underscores
     are removed.  For example, ‘' -;#'’ becomes ‘'_'’.

     Note that 'encoding' should be ASCII only.

     Nota: The following function should not be used directly, except
     for testing purposes; *note codecs.lookup(): 96a. should be used
     instead.

 -- Função: encodings.search_function (encoding)

     Search for the codec module corresponding to the given encoding
     name 'encoding'.

     This function first normalizes the 'encoding' using *note
     normalize_encoding(): 7fe, then looks for a corresponding alias.
     It attempts to import a codec module from the encodings package
     using either the alias or the normalized name.  If the module is
     found and defines a valid ‘getregentry()’ function that returns a
     *note codecs.CodecInfo: 17ee. object, the codec is cached and
     returned.

     If the codec module defines a ‘getaliases()’ function any returned
     aliases are registered for future use.

This module implements the following exception:

 -- Exceção: encodings.CodecRegistryError

     Raised when a codec is invalid or incompatible.


File: python.info,  Node: encodings idna — Internationalized Domain Names in Applications,  Next: encodings mbcs — Windows ANSI codepage,  Prev: encodings — Encodings package,  Up: codecs — Codec registry and base classes

5.7.2.20 ‘encodings.idna’ — Internationalized Domain Names in Applications
..........................................................................

This module implements RFC 3490(1) (Internationalized Domain Names in
Applications) and RFC 3492(2) (Nameprep: A Stringprep Profile for
Internationalized Domain Names (IDN)). It builds upon the ‘punycode’
encoding and *note stringprep: d4.

If you need the IDNA 2008 standard from RFC 5891(3) and RFC 5895(4), use
the third-party idna(5) module.

These RFCs together define a protocol to support non-ASCII characters in
domain names.  A domain name containing non-ASCII characters (such as
‘www.Alliancefrançaise.nu’) is converted into an ASCII-compatible
encoding (ACE, such as ‘www.xn--alliancefranaise-npb.nu’).  The ACE form
of the domain name is then used in all places where arbitrary characters
are not allowed by the protocol, such as DNS queries, HTTP ‘Host’
fields, and so on.  This conversion is carried out in the application;
if possible invisible to the user: The application should transparently
convert Unicode domain labels to IDNA on the wire, and convert back ACE
labels to Unicode before presenting them to the user.

Python supports this conversion in several ways: the ‘idna’ codec
performs conversion between Unicode and ACE, separating an input string
into labels based on the separator characters defined in section 3.1 of
RFC 3490(6) and converting each label to ACE as required, and conversely
separating an input byte string into labels based on the ‘.’ separator
and converting any ACE labels found into unicode.  Furthermore, the
*note socket: cc. module transparently converts Unicode host names to
ACE, so that applications need not be concerned about converting host
names themselves when they pass them to the socket module.  On top of
that, modules that have host names as function parameters, such as *note
http.client: 6f. and *note ftplib: 5e, accept Unicode host names (*note
http.client: 6f. then also transparently sends an IDNA hostname in the
‘Host’ field if it sends that field at all).

When receiving host names from the wire (such as in reverse name
lookup), no automatic conversion to Unicode is performed: applications
wishing to present such host names to the user should decode them to
Unicode.

The module *note encodings.idna: 52. also implements the nameprep
procedure, which performs certain normalizations on host names, to
achieve case-insensitivity of international domain names, and to unify
similar characters.  The nameprep functions can be used directly if
desired.

 -- Função: encodings.idna.nameprep (label)

     Return the nameprepped version of 'label'.  The implementation
     currently assumes query strings, so ‘AllowUnassigned’ is true.

 -- Função: encodings.idna.ToASCII (label)

     Convert a label to ASCII, as specified in RFC 3490(7).
     ‘UseSTD3ASCIIRules’ is assumed to be false.

 -- Função: encodings.idna.ToUnicode (label)

     Convert a label to Unicode, as specified in RFC 3490(8).

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc3490.html

   (2) https://datatracker.ietf.org/doc/html/rfc3492.html

   (3) https://datatracker.ietf.org/doc/html/rfc5891.html

   (4) https://datatracker.ietf.org/doc/html/rfc5895.html

   (5) https://pypi.org/project/idna/

   (6) https://datatracker.ietf.org/doc/html/rfc3490.html#section-3.1

   (7) https://datatracker.ietf.org/doc/html/rfc3490.html

   (8) https://datatracker.ietf.org/doc/html/rfc3490.html


File: python.info,  Node: encodings mbcs — Windows ANSI codepage,  Next: encodings utf_8_sig — UTF-8 codec with BOM signature,  Prev: encodings idna — Internationalized Domain Names in Applications,  Up: codecs — Codec registry and base classes

5.7.2.21 ‘encodings.mbcs’ — Windows ANSI codepage
.................................................

This module implements the ANSI codepage (CP_ACP).

*note Disponibilidade: 1ed8.: Windows.

Alterado na versão 3.2: Before 3.2, the 'errors' argument was ignored;
‘'replace'’ was always used to encode, and ‘'ignore'’ to decode.

Alterado na versão 3.3: Support any error handler.


File: python.info,  Node: encodings utf_8_sig — UTF-8 codec with BOM signature,  Prev: encodings mbcs — Windows ANSI codepage,  Up: codecs — Codec registry and base classes

5.7.2.22 ‘encodings.utf_8_sig’ — UTF-8 codec with BOM signature
...............................................................

This module implements a variant of the UTF-8 codec.  On encoding, a
UTF-8 encoded BOM will be prepended to the UTF-8 encoded bytes.  For the
stateful encoder this is only done once (on the first write to the byte
stream).  On decoding, an optional UTF-8 encoded BOM at the start of the
data will be skipped.


File: python.info,  Node: Tipos de Dados,  Next: Módulos Matemáticos e Numéricos,  Prev: Serviços de Dados Binários,  Up: A Biblioteca Padrão do Python

5.8 Tipos de Dados
==================

Os módulos descritos neste capítulo fornecem uma variedade de tipos de
dados especializados, como datas e horas, vetores de tipo fixo, filas de
heap, filas de extremidade dupla e enumerações.

O Python também fornece alguns tipos de dados embutidos, em especial
*note dict: 256, *note list: 611, *note set: 5d9. e *note frozenset:
5da. e *note tuple: 370.  A classe *note str: 44c. é usada para
armazenar strings Unicode, e as classes *note bytes: 1c2. e *note
bytearray: 2ea. são usadas para armazenar dados binários.

Os seguintes módulos estão documentados neste capítulo:

* Menu:

* datetime — Tipos básicos de data e hora::
* zoneinfo — Suporte a fuso horário da IANA::
* calendar — Funções gerais relacionadas ao calendário::
* collections — Tipos de dados de contêineres::
* collections.abc — Classes Base Abstratas para Contêineres: collections abc — Classes Base Abstratas para Contêineres.
* heapq — Algoritmo de fila heap::
* bisect — Algoritmo de bisseção de vetor::
* array— Vetores eficientes de valores numéricos::
* weakref — Referências fracas::
* types — Criação de tipos dinâmicos e nomes para tipos embutidos::
* copy — Operações de cópia profunda e cópia rasa::
* pprint — Impressão bonita de dados::
* reprlib — Implementação alternativa à repr(): reprlib — Implementação alternativa à repr.
* enum — Suporte a enumerações::
* graphlib — Funcionalidade para operar com estruturas do tipo grafo::


File: python.info,  Node: datetime — Tipos básicos de data e hora,  Next: zoneinfo — Suporte a fuso horário da IANA,  Up: Tipos de Dados

5.8.1 ‘datetime’ — Tipos básicos de data e hora
-----------------------------------------------

'Código-fonte:' Lib/datetime.py(1)

__________________________________________________________________

O módulo ‘datetime’ fornece as classes para manipulação de datas e
horas.

Ainda que a aritmética de data e hora seja suportada, o foco da
implementação é na extração eficiente do atributo para formatação da
saída e manipulação.

     Dica: Pular para *note os códigos de formatação: 25c6.

Ver também
..........

Módulo *note calendar: 14.

     Funções gerais relacionadas ao calendário.

Módulo *note time: ee.

     Acesso de hora e conversões.

Módulo *note zoneinfo: 134.

     Fusos horários concretos representando o banco de dados de fusos
     horários IANA.

Pacote dateutil(2)

     Biblioteca de terceiros com fuso horário expandido e suporte à
     análise.

Pacote DateType(3)

     Biblioteca de terceiros que apresenta tipos estáticos distintos
     para, por exemplo, permitir que *note verificadores de tipo
     estático: 26d. diferenciem datas ingênuas e conscientes.

* Menu:

* Objetos Conscientes e Ingênuos::
* Constantes::
* Tipos disponíveis::
* Objetos timedelta::
* Objetos date::
* Objetos datetime::
* Objetos time::
* Objetos tzinfo::
* Objetos timezone::
* Comportamento de strftime() e strptime(): Comportamento de strftime e strptime.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/datetime.py

   (2) https://dateutil.readthedocs.io/en/stable/

   (3) https://pypi.org/project/DateType/


File: python.info,  Node: Objetos Conscientes e Ingênuos,  Next: Constantes,  Up: datetime — Tipos básicos de data e hora

5.8.1.1 Objetos Conscientes e Ingênuos
......................................

Objetos de data e hora podem ser categorizados como “consciente” ou
“ingênuo” dependendo se eles incluem ou não informação sobre fuso
horário.

Com conhecimento suficiente dos ajustes de tempo algorítmicos e
políticos aplicáveis, como informações de fuso horário e horário de
verão, um objeto 'consciente' pode se localizar em relação a outros
objetos conscientes.  Um objeto consciente representa um momento
específico no tempo que não está aberto à interpretação.  (1)

Um objeto 'ingênuo' não contém informações suficientes para se localizar
inequivocamente em relação a outros objetos de data/hora.  Se um objeto
ingênuo representa o Coordinated Universal Time (UTC), a hora local, ou
a hora em algum outro fuso horário, isso depende exclusivamente do
programa, assim como é tarefa do programa decidir se um número
específico representa metros, milhas ou massa.  Objetos ingênuos são
fáceis de entender e trabalhar, com o custo de ignorar alguns aspectos
da realidade.

Para aplicativos que requerem objetos conscientes, os objetos *note
datetime: 1cc. e *note time: 1ce. possuem um atributo opcional de
informações do fuso horário, ‘tzinfo’, que pode ser definido como uma
instância de uma subclasse da classe abstrata *note tzinfo: 5de.  Esses
objetos *note tzinfo: 5de. capturam informações sobre a diferença da
hora UTC, o nome do fuso horário e se o horário de verão está em vigor.

Somente uma classe concreta *note tzinfo: 5de, a classe *note timezone:
10fe, é fornecida pelo módulo ‘datetime’.  A classe ‘timezone’ pode
representar fusos horários simples com diferenças fixas do UTC, como o
próprio UTC, ou os fusos horários norte-americanos EST e EDT. O suporte
a fusos horários em níveis mais detalhados depende da aplicação.  As
regras para ajuste de tempo em todo o mundo são mais políticas do que
racionais, mudam com frequência e não há um padrão adequado para todas
as aplicações além da UTC.

   ---------- Footnotes ----------

   (1) Se, isto é, nós ignoramos os efeitos da Relatividade


File: python.info,  Node: Constantes,  Next: Tipos disponíveis,  Prev: Objetos Conscientes e Ingênuos,  Up: datetime — Tipos básicos de data e hora

5.8.1.2 Constantes
..................

O módulo ‘datetime’ exporta as seguintes constantes:

 -- Dado: datetime.MINYEAR

     O menor número de ano permitido em um objeto *note date: 1cd. ou
     *note datetime: 1cc.  *note MINYEAR: 25ca. é 1.

 -- Dado: datetime.MAXYEAR

     O maior número de ano permitido no objeto *note date: 1cd. ou *note
     datetime: 1cc.  *note MAXYEAR: 25cb. é 9999.

 -- Dado: datetime.UTC

     Apelido para o singleton de fuso horário UTC *note
     datetime.timezone.utc: 614.

     Adicionado na versão 3.11.


File: python.info,  Node: Tipos disponíveis,  Next: Objetos timedelta,  Prev: Constantes,  Up: datetime — Tipos básicos de data e hora

5.8.1.3 Tipos disponíveis
.........................

 -- Classe: datetime.date

     Uma data ingênua idealizada, presumindo que o atual calendário
     Gregoriano sempre foi, e sempre estará em vigor.  Atributos: *note
     year: 25cd, *note month: 25ce. e *note day: 25cf.

 -- Classe: datetime.time

     Um horário ideal, independente de qualquer dia em particular,
     presumindo que todos os dias tenham exatamente 24*60*60 segundos.
     (Não há noção de “segundos bissextos” aqui.)  Atributos: *note
     hour: 25d0, *note minute: 25d1, *note second: 25d2, *note
     microsecond: 25d3. e *note tzinfo: 25d4.

 -- Classe: datetime.datetime

     Uma combinação de uma data e uma hora.  Atributos: *note year:
     25d5, *note month: 25d6, *note day: 25d7, *note hour: 25d8, *note
     minute: 25d9, *note second: 25da, *note microsecond: 25db. e *note
     tzinfo: 25dc.

 -- Classe: datetime.timedelta

     Uma duração que expressa a diferença entre duas instâncias *note
     datetime: 1cc. ou *note date: 1cd. para resolução de
     microssegundos.

 -- Classe: datetime.tzinfo

     Uma classe base abstrata para objetos de informações de fuso
     horário.  Eles são usados pelas classes *note datetime: 1cc. e
     *note time: 1ce. para fornecer uma noção personalizável de ajuste
     de horário (por exemplo, para considerar o fuso horário e/ou o
     horário de verão).

 -- Classe: datetime.timezone

     Uma classe que implementa a classe base abstrata *note tzinfo: 5de.
     como uma diferença fixa do UTC.

     Adicionado na versão 3.2.

Objetos desse tipo são imutáveis.

Relacionamentos de subclasse:

     object
         timedelta
         tzinfo
             timezone
         time
         date
             datetime

* Menu:

* Propriedades Comuns::
* Determinando se um Objeto é Consciente ou Ingênuo::


File: python.info,  Node: Propriedades Comuns,  Next: Determinando se um Objeto é Consciente ou Ingênuo,  Up: Tipos disponíveis

5.8.1.4 Propriedades Comuns
...........................

Os tipos *note date: 1cd, *note datetime: 1cc, *note time: 1ce. e *note
timezone: 10fe. compartilham esses recursos comuns:

   - Objetos desse tipo são imutáveis.

   - Objetos desses tipos são *note hasheáveis: 610, o que significa que
     podem ser usados como chaves de dicionário.

   - Objetos desse tipo suportam decapagem eficiente através do módulo
     *note pickle: a6.


File: python.info,  Node: Determinando se um Objeto é Consciente ou Ingênuo,  Prev: Propriedades Comuns,  Up: Tipos disponíveis

5.8.1.5 Determinando se um Objeto é Consciente ou Ingênuo
.........................................................

Objetos do tipo *note date: 1cd. são sempre ingênuos.

Um objeto do tipo *note time: 1ce. ou *note datetime: 1cc. pode ser
consciente ou ingênuo.

O objeto *note datetime: 1cc. ‘d’ é consciente se ambos os seguintes
itens forem verdadeiros:

  1. ‘d.tzinfo’ não é ‘None’

  2. ‘d.tzinfo.utcoffset(d)’ não retorna ‘None’

Caso contrário, ‘d’ é ingênuo.

O objeto *note time: 1ce. ‘t’ é consciente, se os seguintes itens são
verdadeiros:

  1. ‘t.tzinfo’ não é ‘None’

  2. ‘t.tzinfo.utcoffset(None)’ não retorna ‘None’.

Caso contrário, ‘t’ é ingênuo.

A distinção entre consciente e ingênuo não se aplica a objetos *note
timedelta: 9d7.


File: python.info,  Node: Objetos timedelta,  Next: Objetos date,  Prev: Tipos disponíveis,  Up: datetime — Tipos básicos de data e hora

5.8.1.6 Objetos ‘timedelta’
...........................

O objeto *note timedelta: 9d7. representa uma duração, a diferença entre
duas instâncias *note datetime: 1cc. ou *note date: 1cd.

 -- Classe: datetime.timedelta (days=0, seconds=0, microseconds=0,
          milliseconds=0, minutes=0, hours=0, weeks=0)

     Todos os argumentos são opcionais e o padrão é 0.  Os argumentos
     podem ser números inteiros ou ponto flutuantes, e podem ser
     positivos ou negativos.

     Apenas 'days', 'seconds' e 'microseconds' são armazenados
     internamente.  Os argumentos são convertidos para essas unidades:

        * Um milissegundo é convertido em 1000 microssegundos.

        * Um minuto é convertido em 60 segundos.

        * Uma hora é convertida em 3600 segundos.

        * Uma semana é convertida para 7 dias.

     e dias, segundos e microssegundos são normalizados para que a
     representação seja única, com

        * ‘0 <= microseconds < 1000000’

        * ‘0 <= seconds < 3600*24’ (o número de segundos em um dia)

        * ‘-999999999 <= days <= 999999999’

     O exemplo a seguir ilustra como quaisquer argumentos além de
     'days', 'seconds' e 'microseconds' são “mesclados” e normalizados
     nos três atributos resultantes:

          >>> from datetime import timedelta
          >>> delta = timedelta(
          ...     days=50,
          ...     seconds=27,
          ...     microseconds=10,
          ...     milliseconds=29000,
          ...     minutes=5,
          ...     hours=8,
          ...     weeks=2
          ... )
          >>> # sá restam dias, segundos e microssegundos
          >>> delta
          datetime.timedelta(days=64, seconds=29156, microseconds=10)

     Se qualquer argumento for um ponto flutuante e houver
     microssegundos fracionários, os microssegundos fracionários
     restantes de todos os argumentos serão combinados e sua soma será
     arredondada para o microssegundo mais próximo usando o desempatador
     de metade da metade para o par.  Se nenhum argumento é ponto
     flutuante, os processos de conversão e normalização são exatos
     (nenhuma informação é perdida).

     Se o valor normalizado de dias estiver fora do intervalo indicado,
     a exceção *note OverflowError: 885. é levantada.

     Observe que a normalização de valores negativos pode ser
     surpreendente a princípio.  Por exemplo:

          >>> from datetime import timedelta
          >>> d = timedelta(microseconds=-1)
          >>> (d.days, d.seconds, d.microseconds)
          (-1, 86399, 999999)

     Como a representação de string dos objetos ‘timedelta’ pode ser
     confusa, use a seguinte receita para produzir um formato mais
     legível:

          >>> def pretty_timedelta(td):
          ...     if td.days >= 0:
          ...         return str(td)
          ...     return f'-({-td!s})'
          ...
          >>> d = timedelta(hours=-1)
          >>> str(d)  # not human-friendly
          '-1 day, 23:00:00'
          >>> pretty_timedelta(d)
          '-(1:00:00)'

Atributos de classe:

 -- Atributo: timedelta.min

     O mais negativo objeto *note timedelta: 9d7,
     ‘timedelta(-999999999)’.

 -- Atributo: timedelta.max

     O mais positivo objeto *note timedelta: 9d7,
     ‘timedelta(days=999999999, hours=23, minutes=59, seconds=59,
     microseconds=999999)’.

 -- Atributo: timedelta.resolution

     A menor diferença possível entre objetos não iguais *note
     timedelta: 9d7, ‘timedelta(microseconds=1)’.

Observe que, devido à normalização, ‘timedelta.max’ é maior que
‘-timedelta.min’.  ‘-timedelta.max’ não é representável como um objeto
*note timedelta: 9d7.

Atributos de instância (somente leitura):

 -- Atributo: timedelta.days

     Entre -999.999.999 e 999.999.999 inclusive

 -- Atributo: timedelta.seconds

     Entre 0 e 86.399 inclusive.

          Cuidado: É um bug relativamente comum utilizar este atributo
          de forma não intencional quando, na verdade, o objetivo é
          obter o valor de *note total_seconds(): 134a.:

               >>> from datetime import timedelta
               >>> duration = timedelta(seconds=11235813)
               >>> duration.days, duration.seconds
               (130, 3813)
               >>> duration.total_seconds()
               11235813.0

 -- Atributo: timedelta.microseconds

     Entre 0 e 999.999 inclusive.

Operações suportadas:

Operação                             Resultado
                                     
-----------------------------------------------------------------------------------------
                                     
‘t1 = t2 + t3’                       Soma de ‘t2’ e ‘t3’.  Depois ‘t1 - t2 == t3’ e
                                     ‘t1 - t3 == t2’ são verdadeiros.  (1)
                                     
                                     
‘t1 = t2 - t3’                       Diferença de ‘t2’ e ‘t3’.  Depois ‘t1 == t2 - t3’
                                     e ‘t2 == t1 + t3’ são verdadeiros (1)(6)
                                     
                                     
‘t1 = t2 * i or t1 = i * t2’         Delta multiplicado por um número inteiro.  Depois
                                     ‘t1 // i == t2’ é verdadeiro, desde que ‘i != 0’.
                                     
                                     
                                     Em geral, ‘t1 * i == t1 * (i-1) + t1’ é
                                     verdadeiro.  (1)
                                     
                                     
‘t1 = t2 * f or t1 = f * t2’         Delta multiplicado por um float, ponto flutuante.
                                     O resultado é arredondado para o múltiplo mais
                                     próximo de timedelta.resolution usando a metade
                                     da metade para o par.
                                     
                                     
‘f = t2 / t3’                        Divisão (3) da duração total ‘t2’ por unidade de
                                     intervalo ‘t3’.  Retorna um objeto
                                     *note float: 2f7.
                                     
                                     
‘t1 = t2 / f or t1 = t2 / i’         Delta dividido por um float ou um int.  O
                                     resultado é arredondado para o múltiplo mais
                                     próximo de timedelta.resolution usando a metade
                                     da metade para o par.
                                     
                                     
‘t1 = t2 // i’ ou ‘t1 = t2 // t3’    O piso é calculado e o restante (se houver) é
                                     jogado fora.  No segundo caso, um número inteiro
                                     é retornado.  (3)
                                     
                                     
‘t1 = t2 % t3’                       O restante é calculado como um objeto
                                     *note timedelta: 9d7.  (3)
                                     
                                     
‘q, r = divmod(t1, t2)’              Calcula o quociente e o resto: ‘q = t1 // t2’ (3)
                                     e ‘r = t1 % t2’.  ‘q’ é um inteiro e ‘r’ é um
                                     objeto *note timedelta: 9d7.
                                     
                                     
‘+t1’                                Retorna um objeto *note timedelta: 9d7. com o
                                     mesmo valor.  (2)
                                     
                                     
‘-t1’                                Equivalente a ‘timedelta(-t1.days, -t1.seconds,
                                     -t1.microseconds)’ e a ‘t1 * -1’.  (1)(4)
                                     
                                     
‘abs(t)’                             Equivalente a ‘+t’ quando ‘t.days >= 0’ e a ‘-t’
                                     quando ‘t.days < 0’.  (2)
                                     
                                     
‘str(t)’                             Retorna uma string no formato ‘[D day[s],
                                     ][H]H:MM:SS[.UUUUUU]’, onde D é negativo para ‘t’
                                     negativo.  (5)
                                     
                                     
‘repr(t)’                            Retorna uma representação em string do objeto
                                     *note timedelta: 9d7. como uma chamada do
                                     construtor com valores de atributos canônicos.
                                     

Notas:

  1. Isso é exato, mas pode transbordar.

  2. Isso é exato e não pode transbordar.

  3. A divisão por zero levanta *note ZeroDivisionError: 94c.

  4. ‘-timedelta.max’ não é representável como um objeto *note
     timedelta: 9d7.

  5. As representações de string de objetos *note timedelta: 9d7. são
     normalizadas de maneira semelhante à sua representação interna.
     Isso leva a resultados um tanto incomuns para timedeltas negativos.
     Por exemplo:

          >>> timedelta(hours=-5)
          datetime.timedelta(days=-1, seconds=68400)
          >>> print(_)
          -1 day, 19:00:00

  6. A expressão ‘t2 - t3’ sempre será igual à expressão ‘t2 + (-t3)’
     exceto quando t3 for igual a ‘timedelta.max’; nesse caso, o
     primeiro produzirá um resultado enquanto o último transbordará.

Além das operações listadas acima, os objetos *note timedelta: 9d7.
suportam certas adições e subtrações com os objetos *note date: 1cd. e
*note datetime: 1cc. (veja abaixo).

Alterado na versão 3.2: A divisão pelo piso e a divisão verdadeira de um
objeto *note timedelta: 9d7. por outro objeto *note timedelta: 9d7.
agora são suportadas, assim como as operações restantes e a função *note
divmod(): 9a9.  A divisão verdadeira e multiplicação de um objeto *note
timedelta: 9d7. por um objeto *note float: 2f7. agora são suportadas.

Objetos *note timedelta: 9d7. dão suporte a comparações de igualdade e
ordem.

Em contexto booleano, um objeto *note timedelta: 9d7. é considerado
verdadeiro se, e somente se, não for igual a ‘timedelta(0)’.

Métodos de instância:

 -- Método: timedelta.total_seconds ()

     Retorna o número total de segundos contidos na duração.
     Equivalente a ‘td / timedelta(seconds=1)’.  Para unidades de
     intervalo diferentes de segundos, use a forma de divisão
     diretamente (por exemplo ‘td / timedelta(microseconds=1)’).

     Observe que, em intervalos de tempo muito grandes (mais de 270 anos
     na maioria das plataformas), esse método perde a precisão de
     microssegundos.

     Adicionado na versão 3.2.

* Menu:

* Exemplos de uso; timedelta: Exemplos de uso timedelta.


File: python.info,  Node: Exemplos de uso timedelta,  Up: Objetos timedelta

5.8.1.7 Exemplos de uso: ‘timedelta’
....................................

Um exemplo adicional de normalização:

     >>> # Os componentes de outro_ano somam exatamente 365 dias
     >>> from datetime import timedelta
     >>> year = timedelta(days=365)
     >>> outro_ano = timedelta(weeks=40, days=84, hours=23,
     ...                       minutes=50, seconds=600)
     >>> year == outro_ano
     True
     >>> year.total_seconds()
     31536000.0

Exemplos de aritmética com *note timedelta: 9d7.:

     >>> from datetime import timedelta
     >>> ano = timedelta(days=365)
     >>> dez_anos = 10 * ano
     >>> dez_anos
     datetime.timedelta(days=3650)
     >>> dez_anos.days // 365
     10
     >>> nove_anos = dez_anos - ano
     >>> nove_anos
     datetime.timedelta(days=3285)
     >>> três_anos = nove_anos // 3
     >>> três_anos, três_anos.days // 365
     (datetime.timedelta(days=1095), 3)


File: python.info,  Node: Objetos date,  Next: Objetos datetime,  Prev: Objetos timedelta,  Up: datetime — Tipos básicos de data e hora

5.8.1.8 Objetos ‘date’
......................

O objeto *note date: 1cd. representa uma data (ano, mês e dia) em um
calendário idealizado, o atual calendário Gregoriano estendido
indefinidamente em ambas as direções.

1º de janeiro do ano 1 é chamado de dia número 1, 2º de janeiro do ano 1
é chamado de dia número 2, e assim por diante.  (1)

 -- Classe: datetime.date (year, month, day)

     Todos os argumentos são obrigatórios.  Os argumentos devem ser
     números inteiros, nos seguintes intervalos:

        * ‘MINYEAR <= year <= MAXYEAR’

        * ‘1 <= month <= 12’

        * ‘1 <= day <= número de dias no mês e ano fornecidos’

     Se um argumento fora desses intervalos for fornecido, a exceção
     *note ValueError: 202. é levantada.

Outros construtores, todos os métodos de classe.

 -- Método: classmethod date.today ()

     Retorna a data local atual.

     Isso é equivalente a ‘date.fromtimestamp(time.time())’.

 -- Método: classmethod date.fromtimestamp (timestamp)

     Retorna a data local correspondente ao registro de data e hora do
     POSIX, como é retornado por *note time.time(): 254.

     Isso pode levantar *note OverflowError: 885, se o registro de data
     e hora estiver fora do intervalo de valores suportados pela função
     C ‘localtime()’ da plataforma, e em caso de falha *note OSError:
     417. em ‘localtime()’.  É comum que isso seja restrito a anos de
     1970 a 2038.  Observe que, em sistemas não POSIX que incluem
     segundos bissextos na sua notação de registro de data e hora, os
     segundos bissextos são ignorados por *note fromtimestamp(): bed.

     Alterado na versão 3.3: Levanta *note OverflowError: 885. ao invés
     de *note ValueError: 202. se o registro de data e hora estiver fora
     do intervalo de valores suportados pela plataforma C ‘localtime()’
     função.  Levanta *note OSError: 417. ao invés de *note ValueError:
     202. em falha de ‘localtime()’ .

 -- Método: classmethod date.fromordinal (ordinal)

     Retorna a data correspondente ao ordinal proléptico gregoriano,
     considerando que 1º de janeiro do ano 1 tem o ordinal 1.

     *note ValueError: 202. é levantado a menos que ‘1 <= ordinal <=
     date.max.toordinal()’.  Para qualquer data ‘d’,
     ‘date.fromordinal(d.toordinal()) == d’.

 -- Método: classmethod date.fromisoformat (date_string)

     Retorna um *note date: 1cd. correspondendo a 'date_string' dada em
     qualquer formato válido de ISO 8601, com as seguintes exceções:

       1. Datas de precisão reduzida não são atualmente suportadas
          (‘YYYY-MM’, ‘YYYY’).

       2. Representações de data estendidas não são atualmente
          suportadas (‘±YYYYYY-MM-DD’).

       3. Atualmente, as datas ordinais não são suportadas (‘YYYY-OOO’).

     Exemplos:

          >>> from datetime import date
          >>> date.fromisoformat('2019-12-04')
          datetime.date(2019, 12, 4)
          >>> date.fromisoformat('20191204')
          datetime.date(2019, 12, 4)
          >>> date.fromisoformat('2021-W01-1')
          datetime.date(2021, 1, 4)

     Adicionado na versão 3.7.

     Alterado na versão 3.11: Anteriormente, este método tinha suporte
     apenas ao formato ‘YYYY-MM-DD’.

 -- Método: classmethod date.fromisocalendar (year, week, day)

     Retorna um objeto *note date: 1cd. correspondendo a data em
     calendário ISO especificada por year, week e day.  Esta é o inverso
     da função *note date.isocalendar(): 8fb.

     Adicionado na versão 3.8.

Atributos de classe:

 -- Atributo: date.min

     A data representável mais antiga, ‘date(MINYEAR, 1, 1)’.

 -- Atributo: date.max

     A data representável mais tardia, ‘date(MAXYEAR, 12, 31)’.

 -- Atributo: date.resolution

     A menor diferença possível entre objetos date não iguais,
     ‘timedelta(days=1)’.

Atributos de instância (somente leitura):

 -- Atributo: date.year

     Entre *note MINYEAR: 25ca. e *note MAXYEAR: 25cb. incluindo
     extremos.

 -- Atributo: date.month

     Entre 1 e 12 incluindo extremos.

 -- Atributo: date.day

     Entre 1 e o número de dias no mês especificado do ano especificado.

Operações suportadas:

Operação                            Resultado
                                    
---------------------------------------------------------------------------------------
                                    
‘date2 = date1 + timedelta’         ‘date2’ terá ‘timedelta.days’ dias após ‘date1’.
                                    (1)
                                    
                                    
‘date2 = date1 - timedelta’         Calcula ‘date2’ de modo que ‘date2 + timedelta
                                    == date1’.  (2)
                                    
                                    
‘timedelta = date1 - date2’         (3)
                                    
                                    
     ‘date1 == date2’               Comparação de igualdade.  (4)
     ‘date1 != date2’               

     ‘date1 < date2’                Comparação de ordem.  (5)
     ‘date1 > date2’                
     ‘date1 <= date2’
     ‘date1 >= date2’

Notas:

  1. 'date2' é movida para frente no tempo se ‘timedelta.days > 0’, ou
     para trás se ‘timedelta.days < 0’.  Posteriormente ‘date2 - date1
     == timedelta.days’.  ‘timedelta.seconds’ e ‘timedelta.microseconds’
     são ignorados.  A exceção *note OverflowError: 885. é levantada se
     ‘date2.year’ for menor que *note MINYEAR: 25ca. ou maior que *note
     MAXYEAR: 25cb.

  2. ‘timedelta.seconds’ e ‘timedelta.microseconds’ são ignoradas.

  3. Isso é exato e não pode estourar.  ‘timedelta.seconds’ e
     ‘timedelta.microseconds’ são 0, e ‘date2 + timedelta == date1’
     depois.

  4. Objetos *note date: 1cd. são iguais se representam a mesma data.

     Objetos ‘date’ que não são também instâncias *note datetime: 1cc.
     nunca são iguais a objetos ‘datetime’, mesmo que representem a
     mesma data.

  5. 'date1' é considerado menor que 'date2' quando 'date1' preceder
     'date2' no tempo.  Em outras palavras, ‘date1 < date2’ se e somente
     se ‘date1.toordinal() < date2.toordinal()’.

     A comparação de ordem entre um objeto ‘date’ que não é também uma
     instância *note datetime: 1cc. e um objeto ‘datetime’ levanta *note
     TypeError: 2c3.

Alterado na versão 3.13: A comparação entre o objeto *note datetime:
1cc. e uma instância da subclasse *note date: 1cd. que não é uma
subclasse ‘datetime’ não converte mais a última para ‘date’, ignorando o
parte horária e o fuso horário.  O comportamento padrão pode ser
alterado substituindo os métodos especiais de comparação nas subclasses.

Em contextos booleanos, todo objeto *note date: 1cd. é considerado
verdadeiro.

Métodos de instância:

 -- Método: date.replace (year=self.year, month=self.month,
          day=self.day)

     Retorna um novo objeto *note date: 1cd. com os mesmos valores, mas
     com os parâmetros especificados atualizados.

     Exemplo:

          >>> from datetime import date
          >>> d = date(2002, 12, 31)
          >>> d.replace(day=26)
          datetime.date(2002, 12, 26)

     A função genérica *note copy.replace(): 151. também oferece suporte
     a objetos *note date: 1cd.

 -- Método: date.timetuple ()

     Retorna uma *note time.struct_time: d0b. tal como retornado por
     *note time.localtime(): 1541.

     As horas, minutos e segundos são 0, e o sinalizador de horário de
     verão é -1.

     ‘d.timetuple()’ é equivalente a:

          time.struct_time((d.year, d.month, d.day, 0, 0, 0, d.weekday(), yday, -1))

     sendo ‘yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1’ o
     número do dia no ano atual, começando com 1 para 1º de janeiro.

 -- Método: date.toordinal ()

     Retorna o ordinal proléptico gregoriano da data, considerando que
     1º de janeiro do ano 1 tem o ordinal 1.  Para qualquer objeto *note
     date: 1cd. ‘d’, ‘date.fromordinal(d.toordinal()) == d’.

 -- Método: date.weekday ()

     Retorna o dia da semana como um inteiro, onde Segunda é 0 e Domingo
     é 6.  Por exemplo, ‘date(2002, 12, 4).weekday() == 2’, uma
     Quarta-feira.  Veja também *note isoweekday(): 25f0.

 -- Método: date.isoweekday ()

     Retorna o dia da semana como um inteiro, onde Segunda é 1 e Domingo
     é 7.  Por exemplo, ‘date(2002, 12, 4).isoweekday() == 3’, uma
     Quarta-feira.  Veja também *note weekday(): 25ef, *note
     isocalendar(): 8fb.

 -- Método: date.isocalendar ()

     Retorna um objeto *note tupla nomeada: 64e. com três componentes:
     ‘year’, ‘week’ e ‘weekday’.

     O calendário ISO é uma variação amplamente usada do calendário
     gregoriano.  (2)

     O ano ISO consiste de 52 ou 53 semanas completas, e onde uma semana
     começa na segunda-feira e termina no domingo.  A primeira semana de
     um ano ISO é a primeira semana no calendário (Gregoriano) de um ano
     contendo uma quinta-feira.  Isso é chamado de semana número 1, e o
     ano ISO dessa quinta-feira é o mesmo que o seu ano Gregoriano.

     Por exemplo, 2004 começa em uma quinta-feira, então a primeira
     semana do ano ISO 2004 começa na segunda-feira, 29 de dezembro de
     2003, e termina no domingo, 4 de janeiro de 2004:

          >>> from datetime import date
          >>> date(2003, 12, 29).isocalendar()
          datetime.IsoCalendarDate(year=2004, week=1, weekday=1)
          >>> date(2004, 1, 4).isocalendar()
          datetime.IsoCalendarDate(year=2004, week=1, weekday=7)

     Alterado na versão 3.9: Resultado alterado de uma tupla para uma
     *note tupla nomeada: 64e.

 -- Método: date.isoformat ()

     Retorna uma string representando a data no formato ISO 8601,
     ‘YYYY-MM-DD’:

          >>> from datetime import date
          >>> date(2002, 12, 4).isoformat()
          '2002-12-04'

 -- Método: date.__str__ ()

     Para um data ‘d’, ‘str(d)’ é equivalente a ‘d.isoformat()’.

 -- Método: date.ctime ()

     Retorna uma string representando a data:

          >>> from datetime import date
          >>> date(2002, 12, 4).ctime()
          'Wed Dec  4 00:00:00 2002'

     ‘d.ctime()’ é equivalente a:

          time.ctime(time.mktime(d.timetuple()))

     em plataformas em que a função C nativa ‘ctime()’ (que é invocada
     pela função *note time.ctime(): 25f4, mas não pelo método *note
     date.ctime(): 25f3.) se conforma com o padrão C.

 -- Método: date.strftime (format)

     Retorna uma string representando a data, controlado por uma string
     explícita de formatação.  Códigos de formatação referenciando
     horas, minutos ou segundos irão ver valores 0.  Veja também *note
     Comportamento de strftime() e strptime(): 18de. e *note
     date.isoformat(): 25f1.

 -- Método: date.__format__ (format)

     O mesmo que *note date.strftime(): cb0.  Isso torna possível
     especificar uma string de formatação para o objeto *note date: 1cd.
     em *note literais de string formatados: 9b1. e ao usar *note
     str.format(): 621.  Veja também *note Comportamento de strftime() e
     strptime(): 18de. e *note date.isoformat(): 25f1.

* Menu:

* Exemplos de uso; date: Exemplos de uso date.

   ---------- Footnotes ----------

   (1) Isso combina com a definição do calendário “proléptico
Gregoriano” no livro 'Cálculos Calendáricos' de Dershowitz e Reingold,
onde ele é o calendário base para todas as computações.  Veja o livro
para algoritmos para conversão entre ordinais proléptico Gregoriano e
muitos outros sistemas de calendário.

   (2) Veja O guia para a matemática de calendário ISO 8601
(https://web.archive.org/web/20220531051136/https://webspace.science.uu.nl/~gent0113/calendar/isocalendar.htm)
de R. H. van Gent para uma boa explicação.


File: python.info,  Node: Exemplos de uso date,  Up: Objetos date

5.8.1.9 Exemplos de uso: ‘date’
...............................

Exemplo de contagem de dias para um evento:

     >>> import time
     >>> from datetime import date
     >>> hoje = date.today()
     >>> hoje
     datetime.date(2007, 12, 5)
     >>> hoje == date.fromtimestamp(time.time())
     True
     >>> meu_aniversário = date(hoje.year, 6, 24)
     >>> if meu_aniversário < hoje:
     ...     meu_aniversário = meu_aniversário.replace(year=hoje.year + 1)
     ...
     >>> meu_aniversário
     datetime.date(2008, 6, 24)
     >>> tempo_até_aniversário = abs(meu_aniversário - hoje)
     >>> tempo_até_aniversário.days
     202

Mais exemplos de uso da classe *note date: 1cd.:

     >>> from datetime import date
     >>> d = date.fromordinal(730920) # 730920th day after 1. 1. 0001
     >>> d
     datetime.date(2002, 3, 11)

     >>> # Methods related to formatting string output
     >>> d.isoformat()
     '2002-03-11'
     >>> d.strftime("%d/%m/%y")
     '11/03/02'
     >>> d.strftime("%A %d. %B %Y")
     'Monday 11. March 2002'
     >>> d.ctime()
     'Mon Mar 11 00:00:00 2002'
     >>> 'The {1} is {0:%d}, the {2} is {0:%B}.'.format(d, "day", "month")
     'The day is 11, the month is March.'

     >>> # Methods for to extracting 'components' under different calendars
     >>> t = d.timetuple()
     >>> for i in t:
     ...     print(i)
     2002                # year
     3                   # month
     11                  # day
     0
     0
     0
     0                   # weekday (0 = Monday)
     70                  # 70th day in the year
     -1
     >>> ic = d.isocalendar()
     >>> for i in ic:
     ...     print(i)
     2002                # ISO year
     11                  # ISO week number
     1                   # ISO day number ( 1 = Monday )

     >>> # A date object is immutable; all operations produce a new object
     >>> d.replace(year=2005)
     datetime.date(2005, 3, 11)


File: python.info,  Node: Objetos datetime,  Next: Objetos time,  Prev: Objetos date,  Up: datetime — Tipos básicos de data e hora

5.8.1.10 Objetos ‘datetime’
...........................

Um objeto *note datetime: 1cc. é um único objeto contendo todas as
informações de um objeto *note date: 1cd. e um objeto *note time: 1ce.

Assim como um objeto *note date: 1cd, *note datetime: 1cc. presume o
atual calendário Gregoriano estendido em ambas as direções; assim como
um objeto *note time: 1ce, *note datetime: 1cc. presume que existem
exatamente 3600*24 segundos em cada dia.

Construtor:

 -- Classe: datetime.datetime (year, month, day, hour=0, minute=0,
          second=0, microsecond=0, tzinfo=None, *, fold=0)

     Os argumentos 'year', 'month' e 'day' são obrigatórios.  'tzinfo'
     pode ser ‘None’, ou uma instância de subclasse de *note tzinfo:
     5de.  Os argumentos remanescentes devem ser inteiros nos seguintes
     intervalos:

        * ‘MINYEAR <= year <= MAXYEAR’,

        * ‘1 <= month <= 12’,

        * ‘1 <= day <= número de dias no mês e ano fornecidos’,

        * ‘0 <= hour < 24’,

        * ‘0 <= minute < 60’,

        * ‘0 <= second < 60’,

        * ‘0 <= microsecond < 1000000’,

        * ‘fold in [0, 1]’.

     Se um argumento fora desses intervalos for fornecido, a exceção
     *note ValueError: 202. é levantada.

     Alterado na versão 3.6: Adicionado o parâmetro 'fold'.

Outros construtores, todos os métodos de classe.

 -- Método: classmethod datetime.today ()

     Retorna a data e hora local atual, com o atributo *note tzinfo:
     25dc. definido para ‘None’.

     Equivalente a:

          datetime.fromtimestamp(time.time())

     Veja também *note now(): 4ec, *note fromtimestamp(): 4ed.

     Este método é funcionalmente equivalente a *note now(): 4ec, mas
     sem um parâmetro ‘tz’.

 -- Método: classmethod datetime.now (tz=None)

     Retorna a data e hora local atual.

     Se o argumento opcional 'tz' é ‘None’ ou não especificado, isto é o
     mesmo que *note today(): 25f9, mas, se possível, fornece mais
     precisão do que pode ser obtido indo por um registro de data e hora
     da função *note time.time(): 254. (por exemplo, isto pode ser
     possível em plataformas que fornecem a função C ‘gettimeofday()’).

     Se 'tz' não for ‘None’, ele deve ser uma instância de uma subclasse
     de *note tzinfo: 5de, e a data e hora local atual são convertidas
     para o fuso horário de 'tz'.

     Esta função é preferida ao invés de *note today(): 25f9. e *note
     utcnow(): 2fc.

          Nota: Chamadas subsequentes para ‘datetime.now()’ podem
          retornar o mesmo instante, dependendo da precisão do relógio
          subjacente.

 -- Método: classmethod datetime.utcnow ()

     Retorna a data e hora atual em UTC, com *note tzinfo: 25dc. como
     ‘None’.

     Este é similar a *note now(): 4ec, mas retorna a data e hora atual
     em UTC, como um objeto *note datetime: 1cc. ingênuo.  Um datetime
     UTC consciente pode ser obtido chamando
     ‘datetime.now(timezone.utc)’.  Veja também *note now(): 4ec.

          Aviso: Devido ao fato de objetos ‘datetime’ ingênuos serem
          tratados por muitos métodos ‘datetime’ como hora local, é
          preferível usar datetimes conscientes para representar horas
          em UTC. De tal forma, a maneira recomendada para criar um
          objeto representando a hora local em UTC é chamando
          ‘datetime.now(timezone.utc)’.

     Descontinuado desde a versão 3.12: Use *note datetime.now(): 4ec.
     com *note UTC: 4ee.

 -- Método: classmethod datetime.fromtimestamp (timestamp, tz=None)

     Retorna a data e hora local correspondente ao registro de data e
     hora POSIX, como é retornado por *note time.time(): 254.  Se o
     argumento opcional 'tz' é ‘None’ ou não especificado, o registro de
     data e hora é convertido para a data e hora local da plataforma, e
     o objeto *note datetime: 1cc. retornado é ingênuo.

     Se 'tz' não for ‘None’, ela deve ser uma instância de uma subclasse
     de *note tzinfo: 5de, e o registro de data e hora é convertido para
     o fuso horário de 'tz'.

     *note fromtimestamp(): 4ed. pode levantar *note OverflowError: 885,
     se o registro de data e hora estiver fora do intervalo de valores
     suportados pelas funções em C ‘localtime()’ ou ‘gmtime()’ da
     plataforma, e ocorrer uma falha de *note OSError: 417. em
     ‘localtime()’ ou ‘gmtime()’.  É comum para isso ser restrito aos
     anos 1970 até 2038.  Perceba que em sistemas não-POSIX que incluem
     segundos bissextos na sua notação de registro de data e hora,
     segundos bissextos são ignorados por *note fromtimestamp(): 4ed, e
     então é possível ter dois registros de data e hora com diferença de
     um segundo que apresentam objetos *note datetime: 1cc. idênticos.
     Este método é preferido sobre *note utcfromtimestamp(): 2fd.

     Alterado na versão 3.3: Levanta um *note OverflowError: 885. ao
     invés de *note ValueError: 202. se o registro de data e hora
     estiver fora do intervalo dos valores suportados pelas funções C
     ‘localtime()’ ou ‘gmtime()’ da plataforma.  Levanta *note OSError:
     417. ao invés de *note ValueError: 202. em falhas de ‘localtime()’
     ou ‘gmtime()’.

     Alterado na versão 3.6: *note fromtimestamp(): 4ed. pode retornar
     instâncias com *note fold: c72. igual a 1.

 -- Método: classmethod datetime.utcfromtimestamp (timestamp)

     Retorna o *note datetime: 1cc. UTC correspondente ao registro de
     data e hora POSIX, com *note tzinfo: 25dc. setado para ‘None’.  (O
     objeto resultante é ingênuo.)

     Isso pode levantar *note OverflowError: 885, se o registro de data
     e hora estiver fora do intervalo de valores suportados pela função
     C ‘gmtime()’ da plataforma, e em caso de falha *note OSError: 417.
     em ‘gmtime()’.  É comum que isso seja restrito a anos de 1970 a
     2038.

     Para conseguir um objeto *note datetime: 1cc. consciente, chame
     *note fromtimestamp(): 4ed.:

          datetime.fromtimestamp(timestamp, timezone.utc)

     Nas plataformas compatíveis com POSIX, é equivalente à seguinte
     expressão:

          datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)

     com a exceção de que a última fórmula sempre dá suporte ao
     intervalo completo de anos: entre *note MINYEAR: 25ca. e *note
     MAXYEAR: 25cb. inclusive.

          Aviso: Devido ao fato de objetos ‘datetime’ ingênuos serem
          tratados por muitos métodos ‘datetime’ como hora local, é
          preferível usar datetimes conscientes para representar horas
          em UTC. De tal forma, a maneira recomendada para criar um
          objeto representando um registro de data e hora específico em
          UTC é chamando ‘datetime.fromtimestamp(timestamp,
          tz=timezone.utc)’.

     Alterado na versão 3.3: Levanta *note OverflowError: 885. ao invés
     de *note ValueError: 202. se o registro de data e hora estiver fora
     do intervalo de valores suportados pela função C ‘gmtime()’ da
     plataforma.  Levanta *note OSError: 417. ao invés de *note
     ValueError: 202. em caso de falha ‘gmtime()’.

     Descontinuado desde a versão 3.12: Use *note
     datetime.fromtimestamp(): 4ed. com *note UTC: 4ee.

 -- Método: classmethod datetime.fromordinal (ordinal)

     Retorna um *note datetime: 1cc. correspondente ao ordinal
     proléptico Gregoriano, onde 1º de janeiro do ano 1 tem ordinal 1.
     *note ValueError: 202. é levantado a não ser que ‘1 <= ordinal <=
     datetime.max.toordinal()’.  As horas, minutos, segundos e micro
     segundos do resultado são todos 0, e *note tzinfo: 25dc. é ‘None’.

 -- Método: classmethod datetime.combine (date, time,
          tzinfo=time.tzinfo)

     Retorna um novo objeto *note datetime: 1cc. no qual os componentes
     de data são iguais ao objeto *note date: 1cd. fornecido, e nos
     quais os componentes de hora são iguais ao do objeto *note time:
     1ce. fornecido.  Se o argumento 'tzinfo' é fornecido, seu valor é
     usado para definir o atributo *note tzinfo: 25dc. do resultado,
     caso contrário o atributo *note tzinfo: 25d4. do argumento 'time' é
     usado.  Se o argumento 'date' é um objeto *note datetime: 1cc, seus
     componentes de hora e atributos *note tzinfo: 25dc. são ignorados.

     Para qualquer objeto *note datetime: 1cc. ‘d’, ‘d ==
     datetime.combine(d.date(), d.time(), d.tzinfo)’.

     Alterado na versão 3.6: Adicionado o argumento 'tzinfo'.

 -- Método: classmethod datetime.fromisoformat (date_string)

     Retorna um *note datetime: 1cc. correspondendo a 'date_string' em
     qualquer formato válido de ISO 8601, com as seguintes exceções:

       1. Os deslocamentos de fuso horário podem ter segundos
          fracionários.

       2. O separador ‘T’ pode ser substituído por qualquer caractere
          unicode único.

       3. Horas e minutos fracionários não são suportados.

       4. Datas de precisão reduzida não são atualmente suportadas
          (‘YYYY-MM’, ‘YYYY’).

       5. Representações de data estendidas não são atualmente
          suportadas (‘±YYYYYY-MM-DD’).

       6. Atualmente, as datas ordinais não são suportadas (‘YYYY-OOO’).

     Exemplos:

          >>> from datetime import datetime
          >>> datetime.fromisoformat('2011-11-04')
          datetime.datetime(2011, 11, 4, 0, 0)
          >>> datetime.fromisoformat('20111104')
          datetime.datetime(2011, 11, 4, 0, 0)
          >>> datetime.fromisoformat('2011-11-04T00:05:23')
          datetime.datetime(2011, 11, 4, 0, 5, 23)
          >>> datetime.fromisoformat('2011-11-04T00:05:23Z')
          datetime.datetime(2011, 11, 4, 0, 5, 23, tzinfo=datetime.timezone.utc)
          >>> datetime.fromisoformat('20111104T000523')
          datetime.datetime(2011, 11, 4, 0, 5, 23)
          >>> datetime.fromisoformat('2011-W01-2T00:05:23.283')
          datetime.datetime(2011, 1, 4, 0, 5, 23, 283000)
          >>> datetime.fromisoformat('2011-11-04 00:05:23.283')
          datetime.datetime(2011, 11, 4, 0, 5, 23, 283000)
          >>> datetime.fromisoformat('2011-11-04 00:05:23.283+00:00')
          datetime.datetime(2011, 11, 4, 0, 5, 23, 283000, tzinfo=datetime.timezone.utc)
          >>> datetime.fromisoformat('2011-11-04T00:05:23+04:00')
          datetime.datetime(2011, 11, 4, 0, 5, 23,
              tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))

     Adicionado na versão 3.7.

     Alterado na versão 3.11: Anteriormente, este método suportava
     apenas formatos que podiam ser emitidos por *note date.isoformat():
     25f1. ou *note datetime.isoformat(): b42.

 -- Método: classmethod datetime.fromisocalendar (year, week, day)

     Retorna um *note datetime: 1cc. correspondente à data no calendário
     ISO especificada por 'year', 'week' e 'day'.  Os componentes
     não-data do datetime são preenchidos normalmente com seus valores
     padrões.  Isso é o inverso da função *note datetime.isocalendar():
     8fc.

     Adicionado na versão 3.8.

 -- Método: classmethod datetime.strptime (date_string, format)

     Retorna um *note datetime: 1cc. correspondente ao 'date_string',
     analisado de acordo com 'format'.

     Se 'format' não contiver microssegundos ou informações de fuso
     horário, isso é equivalente a:

          datetime(*(time.strptime(date_string, format)[0:6]))

     *note ValueError: 202. é levantado se o date_string e o format não
     puderem ser interpretados por *note time.strptime(): 1474. ou se
     ele retorna um valor o qual não é uma tupla temporal.  Veja também
     *note Comportamento de strftime() e strptime(): 18de. e *note
     datetime.fromisoformat(): 617.

     Alterado na versão 3.13: Se 'format' especificar um dia do mês sem
     um ano, um *note DeprecationWarning: 1a5. agora é emitido.  Isso é
     para evitar um bug de ano bissexto quadrienal no código que busca
     analisar apenas um mês e dia, pois o ano padrão usado na ausência
     de um no formato não é um ano bissexto.  Esses valores de 'format'
     podem gerar um erro a partir do Python 3.15.  A solução alternativa
     é sempre incluir um ano em seu 'format'.  Se estiver analisando
     valores de 'date_string' que não têm um ano, adicione
     explicitamente um ano que seja um ano bissexto antes da análise:

          >>> from datetime import datetime
          >>> date_string = "02/29"
          >>> when = datetime.strptime(f"{date_string};1984", "%m/%d;%Y")  # Avoids leap year bug.
          >>> when.strftime("%B %d")
          'February 29'

Atributos de classe:

 -- Atributo: datetime.min

     O primeiro *note datetime: 1cc. representável, ‘datetime(MINYEAR,
     1, 1, tzinfo=None)’.

 -- Atributo: datetime.max

     O último *note datetime: 1cc. representável, ‘datetime(MAXYEAR, 12,
     31, 23, 59, 59, 999999, tzinfo=None)’.

 -- Atributo: datetime.resolution

     A menor diferença possível entre objetos *note datetime: 1cc.
     diferentes, ‘timedelta(microseconds=1)’.

Atributos de instância (somente leitura):

 -- Atributo: datetime.year

     Entre *note MINYEAR: 25ca. e *note MAXYEAR: 25cb. incluindo
     extremos.

 -- Atributo: datetime.month

     Entre 1 e 12 incluindo extremos.

 -- Atributo: datetime.day

     Entre 1 e o número de dias no mês especificado do ano especificado.

 -- Atributo: datetime.hour

     No intervalo ‘range(24)’.

 -- Atributo: datetime.minute

     No intervalo ‘range(60)’.

 -- Atributo: datetime.second

     No intervalo ‘range(60)’.

 -- Atributo: datetime.microsecond

     No intervalo ‘range(1000000)’.

 -- Atributo: datetime.tzinfo

     O objeto passado como o argumento 'tzinfo' do construtor *note
     datetime: 1cc, ou ‘None’ se nada foi passado.

 -- Atributo: datetime.fold

     Entre ‘[0, 1]’.  Usado para desambiguar tempos reais durante um
     intervalo repetido.  (Um intervalo repetido ocorre quando relógios
     são atrasados ao final do horário de verão ou quando a diferença
     UTC para o fuso horário atual é reduzida por razões políticas.)  Os
     valores 0 e 1 representam, respectivamente, o primeiro e o segundo
     dos dois momentos com a mesma representação de tempo real.

     Adicionado na versão 3.6.

Operações suportadas:

Operação                                    Resultado
                                            
---------------------------------------------------------------------------------
                                            
‘datetime2 = datetime1 + timedelta’         (1)
                                            
                                            
‘datetime2 = datetime1 - timedelta’         (2)
                                            
                                            
‘timedelta = datetime1 - datetime2’         (3)
                                            
                                            
     ‘datetime1 == datetime2’               Comparação de igualdade.  (4)
     ‘datetime1 != datetime2’               

     ‘datetime1 < datetime2’                Comparação de ordem.  (5)
     ‘datetime1 > datetime2’                
     ‘datetime1 <= datetime2’
     ‘datetime1 >= datetime2’

  1. ‘datetime2’ representa a duração de ‘timedelta’ removido de
     ‘datetime1’, movendo o tempo para frente se ‘timedelta.days > 0’,
     ou para trás se ‘timedelta.days < 0’.  O resultado tem o mesmo
     atributo *note tzinfo: 25dc. que o datetime de entrada, e
     ‘datetime2 - datetime1 == timedelta’ após.  *note OverflowError:
     885. é levantada se ‘datetime2.year’ fosse menor que *note MINYEAR:
     25ca. ou maior que *note MAXYEAR: 25cb.  Perceba que nenhum ajuste
     no fuso horário é feito mesmo se a entrada é um objeto consciente
     disso.

  2. Computa o ‘datetime2’ tal que ‘datetime2 + timedelta == datetime1’.
     Assim como para adição, o resultado tem o mesmo atributo *note
     tzinfo: 25dc. que datetime de entrada, e nenhum ajuste de fuso
     horário é feito mesmo que a entrada seja consciente disso.

  3. Subtração de um *note datetime: 1cc. de outro *note datetime: 1cc.
     é definido apenas se ambos os operandos são ingênuos, ou se ambos
     são conscientes.  Se um deles é consciente e o outro é ingênuo,
     *note TypeError: 2c3. é levantado.

     Se ambos são ingênuos, ou ambos são conscientes e tiverem o mesmo
     atributo *note tzinfo: 25dc, os atributos *note tzinfo: 25dc. são
     ignorados, e o resultado é um objeto ‘t’ do tipo *note timedelta:
     9d7, tal que ‘datetime2 + t == datetime1’.  Nenhum ajuste de fuso
     horário é feito neste caso.

     Se ambas são conscientes e têm atributos *note tzinfo: 25dc.
     diferentes, ‘a-b’ age como se ‘a’ e ‘b’ tivessem sido primeiro
     convertidos para datetimes ingênuas em UTC. O resultado é
     ‘(a.replace(tzinfo=None) - a.utcoffset()) - (b.replace(tzinfo=None)
     - b.utcoffset())’ exceto que a implementação nunca estoura.

  4. Objetos *note datetime: 1cc. são iguais se representarem a mesma
     data e hora, levando em consideração o fuso horário.

     Objetos ‘datetime’ ingênuos e conscientes nunca são iguais.

     Se ambos os comparandos forem conscientes e tiverem o mesmo
     atributo ‘tzinfo’, os atributos ‘tzinfo’ e *note fold: c72. serão
     ignorados e os datetimes base serão comparados.  Se ambos os
     comparandos forem conscientes e tiverem atributos *note tzinfo:
     25dc. diferentes, a comparação atua como se os comparandos fossem
     primeiro convertidos para datetimes UTC, exceto que a implementação
     nunca estoura.  Instâncias ‘datetime’ em um intervalo repetido
     nunca são iguais a instâncias ‘datetime’ em outro fuso horário.

  5. 'datetime1' é considerado menor que 'datetime2' quando 'datetime1'
     precede 'datetime2' no tempo.  levando em consideração o fuso
     horário.

     A comparação de ordens entre objetos *note datetime: 1cc. ingênuos
     e conscientes levanta *note TypeError: 2c3.

     Se ambos os comparandos forem conscientes e tiverem o mesmo
     atributo ‘tzinfo’, os atributos ‘tzinfo’ e *note fold: c72. serão
     ignorados e os datetimes base serão comparados.  Se ambos os
     comparandos forem conscientes e tiverem atributos *note tzinfo:
     25dc. diferentes, a comparação atua como se os comparandos fossem
     primeiro convertidos para datetimes UTC, exceto que a implementação
     nunca estoura.

Alterado na versão 3.3: Comparações de igualdade entre instâncias de
*note datetime: 1cc. conscientes e nativas não levantam *note TypeError:
2c3.

Alterado na versão 3.13: A comparação entre o objeto *note datetime:
1cc. e uma instância da subclasse *note date: 1cd. que não é uma
subclasse ‘datetime’ não converte mais a última para ‘date’, ignorando o
parte horária e o fuso horário.  O comportamento padrão pode ser
alterado substituindo os métodos especiais de comparação nas subclasses.

Métodos de instância:

 -- Método: datetime.date ()

     Retorna um objeto *note date: 1cd. com o mesmo ano, mês e dia.

 -- Método: datetime.time ()

     Retorna um objeto *note time: 1ce. com a mesma hora, minuto,
     segundo, microssegundo e fold.  O atributo *note tzinfo: 25dc. é
     ‘None’.  Veja também o método *note timetz(): 25ff.

     Alterado na versão 3.6: O valor fold é copiado para o objeto *note
     time: 1ce. retornado.

 -- Método: datetime.timetz ()

     Retorna um objeto *note time: 1ce. com os mesmos atributos de hora,
     minuto, segundo, microssegundo, fold e tzinfo.  Veja também o
     método *note time(): ee.

     Alterado na versão 3.6: O valor fold é copiado para o objeto *note
     time: 1ce. retornado.

 -- Método: datetime.replace (year=self.year, month=self.month,
          day=self.day, hour=self.hour, minute=self.minute,
          second=self.second, microsecond=self.microsecond,
          tzinfo=self.tzinfo, *, fold=0)

     Retorna um novo objeto *note datetime: 30. com os mesmos atributos,
     mas com os parâmetros especificados atualizados.  Perceba que
     ‘tzinfo=None’ pode ser especificado para criar um datetime ingênuo
     a partir de um datetime consciente, sem conversão de dados da data
     ou hora.

     Objetos *note datetime: 1cc. também são suportados pela função
     genérica *note copy.replace(): 151.

     Alterado na versão 3.6: Adicionado o parâmetro 'fold'.

 -- Método: datetime.astimezone (tz=None)

     Retorna um objeto *note datetime: 1cc. com novo atributo *note
     tzinfo: 25dc. definido por 'tz', ajustando a data e hora de forma
     que o resultado seja o mesmo horário UTC que 'self', mas na hora
     local de 'tz'.

     Se fornecido, 'tz' deve ser uma instância de uma subclasse *note
     tzinfo: 5de, e seus métodos *note utcoffset(): 2600. e *note dst():
     2601. não devem retornar ‘None’.  Se 'self' for ingênuo, é
     presumido que ele representa o tempo no fuso horário do sistema.

     Se for chamado sem argumentos (ou com ‘tz=None’) o fuso horário do
     sistema local é presumido como o fuso horário desejado.  O atributo
     ‘.tzinfo’ da instância datetime convertida será definido para uma
     instância de *note timezone: 10fe. com o nome da zona e um
     deslocamento obtido a partir do sistema operacional.

     Se ‘self.tzinfo’ for 'tz', ‘self.astimezone(tz)’ é igual a 'self':
     nenhum ajuste nos dados de data ou hora é realizado.  Caso
     contrário o resultado é a hora local no fuso horário 'tz',
     representando a mesma hora UTC que 'self': depois ‘astz =
     dt.astimezone(tz)’, ‘astz - astz.utcoffset()’ terá os mesmos dados
     de data e hora que ‘dt - dt.utcoffset()’.

     Se você quer meramente anexar um objeto *note timezone: 10fe. 'tz'
     a um datetime 'dt' sem ajustes de dados de data e hora, use
     ‘dt.replace(tzinfo=tz)’.  Se você meramente quer remover o objeto
     ‘timezone’ de um datetime consciente 'dt' sem conversão de dados de
     data e hora, use ‘dt.replace(tzinfo=None)’.

     Perceba que o método padrão *note tzinfo.fromutc(): 2602. pode ser
     substituído em uma subclasse *note tzinfo: 5de. para afetar o
     resultado retornado por *note astimezone(): 9d8.  Ignorando erros
     de letras maiúsculas/minúsculas, *note astimezone(): 9d8. funciona
     como:

          def astimezone(self, tz):
              if self.tzinfo is tz:
                  return self
              # Converte self para UTC e anexa o novo objeto timezone.
              utc = (self - self.utcoffset()).replace(tzinfo=tz)
              # Converte o horário local de UTC para tz.
              return tz.fromutc(utc)

     Alterado na versão 3.3: 'tz' agora pode ser omitido.

     Alterado na versão 3.6: O método *note astimezone(): 9d8. agora
     pode ser chamado em instâncias ingênuas que presumidamente
     representam a hora local do sistema.

 -- Método: datetime.utcoffset ()

     Se *note tzinfo: 25dc. for ‘None’, retorna ‘None’, caso contrário
     retorna ‘self.tzinfo.utcoffset(self)’, e levanta uma exceção se o
     segundo não retornar ‘None’ ou um objeto *note timedelta: 9d7. com
     magnitude menor que um dia.

     Alterado na versão 3.7: A diferença UTC não é restrita a um número
     completo de minutos.

 -- Método: datetime.dst ()

     Se *note tzinfo: 25dc. for ‘None’, retorna ‘None’, caso contrário
     retorna ‘self.tzinfo.dst(self)’, e levanta uma exceção se o segundo
     não retornar ‘None’ ou um objeto *note timedelta: 9d7. com
     magnitude menor que um dia.

     Alterado na versão 3.7: A diferença de horário de verão não é
     restrita a um número completo de minutos.

 -- Método: datetime.tzname ()

     Se *note tzinfo: 25dc. for ‘None’, retorna ‘None’, caso contrário
     retorna ‘self.tzinfo.tzname(self)’, levanta uma exceção se o
     segundo não retornar ‘None’ ou um objeto string.

 -- Método: datetime.timetuple ()

     Retorna uma *note time.struct_time: d0b. tal como retornado por
     *note time.localtime(): 1541.

     ‘d.timetuple()’ é equivalente a:

          time.struct_time((d.year, d.month, d.day,
                            d.hour, d.minute, d.second,
                            d.weekday(), yday, dst))

     onde ‘yday = d.toordinal() - date(d.year, 1, 1).toordinal() + 1’ é
     o número de dias dentro do ano atual, começando com 1 para 1º de
     janeiro.  O sinalizador *note tm_isdst: 2605. do resultado é
     definido conforme o método *note dst(): 2601.: *note tzinfo: 25dc.
     é ‘None’ ou *note dst(): 2601. retorna ‘None’, ‘tm_isdst’ é
     definido para ‘-1’; caso contrário se *note dst(): 2601. retornar
     um valor diferente de zero, ‘tm_isdst’ é definido para 1; caso
     contrário ‘tm_isdst’ é definido para 0.

 -- Método: datetime.utctimetuple ()

     Se a instância *note datetime: 1cc. ‘d’ é ingênua, isto é o mesmo
     que ‘d.timetuple()’, exceto que *note tm_isdst: 2605. é forçado
     para 0, independentemente do que ‘d.dst()’ retornar.  O horário de
     verão nunca é afetado por um horário UTC.

     Se ‘d’ é consciente, ‘d’ é normalizado para horário UTC, subtraindo
     ‘d.utcoffset()’, e um *note time.struct_time: d0b. para o horário
     normalizado é retornado.  ‘tm_isdst’ é forçado para 0.  Observe que
     uma exceção *note OverflowError: 885. pode ser levantada se
     ‘d.year’ for ‘MINYEAR’ ou ‘MAXYEAR’ e os ajustes UTC ultrapassar o
     limite de um ano.

          Aviso: Por causa que objetos ‘datetime’ ingênuos são tratados
          por muitos métodos ‘datetime’ como hora local, é preferido
          usar datetimes conscientes para representar horários em UTC;
          como resultado, usar *note datetime.utctimetuple(): 2606. pode
          dar resultados enganosos.  Se você tem um ‘datetime’ ingênuo
          representando UTC, use ‘datetime.replace(tzinfo=timezone.utc)’
          para torná-lo consciente, ponto no qual você pode usar *note
          datetime.timetuple(): 2604.

 -- Método: datetime.toordinal ()

     Retorna o ordinal proléptico gregoriano da data.  o mesmo que
     ‘self.date().toordinal()’.

 -- Método: datetime.timestamp ()

     Retorna o registro de data e hora POSIX correspondente a instância
     *note datetime: 1cc.  O valor de retorno é um *note float: 2f7.
     similar aquele retornado por *note time.time(): 254.

     Presume-se que instâncias *note datetime: 1cc. ingênuas representam
     a hora local e este método depende da função C ‘mktime()’ da
     plataforma para realizar a conversão.  Como *note datetime: 1cc.
     suporta um intervalo maior de valores que ‘mktime()’ em muitas
     plataformas, este método pode levantar *note OverflowError: 885. ou
     *note OSError: 417. para horários longe no passado ou longe no
     futuro.

     Para instâncias conscientes de *note datetime: 1cc, o valor
     retornado é computado como:

          (dt - datetime(1970, 1, 1, tzinfo=timezone.utc)).total_seconds()

     Adicionado na versão 3.3.

     Alterado na versão 3.6: O método *note timestamp(): 10d9. usa o
     atributo *note fold: c72. para desambiguar os tempos durante um
     intervalo repetido.

          Nota: Não existe método para obter o timestamp POSIX
          diretamente de uma instância *note datetime: 1cc. ingênua
          representando tempo em UTC. Se a sua aplicação usa esta
          convenção e o fuso horário do seu sistema não está setado para
          UTC, você pode obter o registro de data e hora POSIX
          fornecendo ‘tzinfo=timezone.utc’:

               timestamp = dt.replace(tzinfo=timezone.utc).timestamp()

          ou calculando o registro de data e hora diretamente:

               timestamp = (dt - datetime(1970, 1, 1)) / timedelta(seconds=1)

 -- Método: datetime.weekday ()

     Retorna o dia da semana como um inteiro, em que segunda-feira é 0 e
     domingo é 6.  O mesmo que ‘self.date().weekday()’.  Veja também
     *note isoweekday(): 2609.

 -- Método: datetime.isoweekday ()

     Retorna o dia da semana como um inteiro, em que segunda-feira é 1 e
     domingo é 7.  O mesmo que ‘self.date().isoweekday()’.  Veja também
     *note weekday(): 2608, *note isocalendar(): 8fc.

 -- Método: datetime.isocalendar ()

     Retorna uma *note tupla nomeada: 64e. com três componentes: ‘year’,
     ‘week’ e ‘weekday’.  O mesmo que ‘self.date().isocalendar()’.

 -- Método: datetime.isoformat (sep='T', timespec='auto')

     Retorna uma string representando a data e o tempo no formato ISO
     8601:

        - ‘YYYY-MM-DDTHH:MM:SS.ffffff’, se *note microsecond: 25db. não
          é 0

        - ‘YYYY-MM-DDTHH:MM:SS’, se *note microsecond: 25db. é 0

     Se *note utcoffset(): 2600. não retorna ‘None’, uma string é
     adicionada com a diferença UTC:

        - ‘YYYY-MM-DDTHH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]’, se *note
          microsecond: 25db. não é 0

        - ‘YYYY-MM-DDTHH:MM:SS+HH:MM[:SS[.ffffff]]’, se *note
          microsecond: 25db. é 0

     Exemplos:

          >>> from datetime import datetime, timezone
          >>> datetime(2019, 5, 18, 15, 17, 8, 132263).isoformat()
          '2019-05-18T15:17:08.132263'
          >>> datetime(2019, 5, 18, 15, 17, tzinfo=timezone.utc).isoformat()
          '2019-05-18T15:17:00+00:00'

     O argumento opcional 'sep' (por padrão, ‘'T'’) é um separador de
     caractere único, colocado entre as porções de data e tempo do
     resultado.  Por exemplo:

          >>> from datetime import tzinfo, timedelta, datetime
          >>> class TZ(tzinfo):
          ...     """Um fuso horário com uma posição arbitrária constante de -06:39."""
          ...     def utcoffset(self, dt):
          ...         return timedelta(hours=-6, minutes=-39)
          ...
          >>> datetime(2002, 12, 25, tzinfo=TZ()).isoformat(' ')
          '2002-12-25 00:00:00-06:39'
          >>> datetime(2009, 11, 27, microsecond=100, tzinfo=TZ()).isoformat()
          '2009-11-27T00:00:00.000100-06:39'

     O argumento opcional 'timespec' especifica o número de componentes
     adicionais do tempo a incluir (o padrão é ‘'auto'’).  Pode ser uma
     das seguintes strings:

        - ‘'auto'’: O mesmo que ‘'seconds'’ se *note microsecond: 25db.
          é 0, o mesmo que ‘'microseconds'’ caso contrário.

        - ‘'hours'’: Inclui o atributo *note hour: 25d8. no formato de
          dois dígitos ‘HH’.

        - ‘'minutes'’: Inclui os atributos *note hour: 25d8. e *note
          minute: 25d9. no formato ‘HH:MM’.

        - ‘'seconds'’: Inclui os atributos *note hour: 25d8, *note
          minute: 25d9. e *note second: 25da. no formato ‘HH:MM:SS’.

        - ‘'milliseconds'’: Inclui o tempo completo, mas trunca a parte
          fracional dos segundos em milissegundos.  Formato
          ‘HH:MM:SS.sss’.

        - ‘'microseconds'’: Inclui o tempo completo no formato
          ‘HH:MM:SS.ffffff’.

          Nota: Componentes do tempo excluídos são truncados, não
          arredondados.

     A exceção *note ValueError: 202. vai ser levantada no caso de um
     argumento 'timespec' inválido:

          >>> from datetime import datetime
          >>> datetime.now().isoformat(timespec='minutes')
          '2002-12-25T00:00'
          >>> dt = datetime(2015, 1, 1, 12, 30, 59, 0)
          >>> dt.isoformat(timespec='microseconds')
          '2015-01-01T12:30:59.000000'

     Alterado na versão 3.6: Adicionado o parâmetro 'timespec'.

 -- Método: datetime.__str__ ()

     Para uma instância *note datetime: 1cc. ‘d’, ‘str(d)’ é equivalente
     a ‘d.isoformat(' ')’.

 -- Método: datetime.ctime ()

     Retorna uma string representando a data e hora:

          >>> from datetime import datetime
          >>> datetime(2002, 12, 4, 20, 30, 40).ctime()
          'Wed Dec  4 20:30:40 2002'

     A string de saída 'não' irá incluir informações de fuso horário,
     independente de a entrada ser consciente ou ingênua.

     ‘d.ctime()’ é equivalente a:

          time.ctime(time.mktime(d.timetuple()))

     em plataformas onde a função nativa em C ‘ctime()’ (a qual *note
     time.ctime(): 25f4. invoca, mas a qual *note datetime.ctime():
     260b. não invoca) conforma com o padrão C.

 -- Método: datetime.strftime (format)

     Retorna uma string representando a data e hora, controladas por uma
     string com formato explícito.  Veja também *note Comportamento de
     strftime() e strptime(): 18de. e *note datetime.isoformat(): b42.

 -- Método: datetime.__format__ (format)

     O mesmo que *note datetime.strftime(): caf.  Isso torna possível
     especificar uma string de formatação para o objeto *note datetime:
     1cc. em *note literais de string formatados: 9b1. e ao usar *note
     str.format(): 621.  Veja também *note Comportamento de strftime() e
     strptime(): 18de. e *note datetime.isoformat(): b42.

* Menu:

* Exemplos de uso; datetime: Exemplos de uso datetime.


File: python.info,  Node: Exemplos de uso datetime,  Up: Objetos datetime

5.8.1.11 Exemplos de uso: ‘datetime’
....................................

Exemplos para trabalhar com objetos *note datetime: 1cc.:

     >>> from datetime import datetime, date, time, timezone

     >>> # Usando datetime.combine()
     >>> d = date(2005, 7, 14)
     >>> t = time(12, 30)
     >>> datetime.combine(d, t)
     datetime.datetime(2005, 7, 14, 12, 30)

     >>> # Usando datetime.now()
     >>> datetime.now()
     datetime.datetime(2007, 12, 6, 16, 29, 43, 79043)   # GMT +1
     >>> datetime.now(timezone.utc)
     datetime.datetime(2007, 12, 6, 15, 29, 43, 79060, tzinfo=datetime.timezone.utc)

     >>> # Usando datetime.strptime()
     >>> dt = datetime.strptime("21/11/06 16:30", "%d/%m/%y %H:%M")
     >>> dt
     datetime.datetime(2006, 11, 21, 16, 30)

     >>> # Usando datetime.timetuple() para obter uma tupla de todos os atributos
     >>> tt = dt.timetuple()
     >>> for it in tt:
     ...     print(it)
     ...
     2006    # ano
     11      # mês
     21      # dia
     16      # hora
     30      # minuto
     0       # segundo
     1       # dia da semana (0 = Segunda-feira)
     325     # número de dias desde 1º de janeiro
     -1      # dst - método tzinfo.dst() retornou None

     >>> # Data em formato ISO
     >>> ic = dt.isocalendar()
     >>> for it in ic:
     ...     print(it)
     ...
     2006    # ano ISO
     47      # semana ISO
     2       # dia da semana ISO

     >>> # Formatando um datetime
     >>> dt.strftime("%A, %d. %B %Y %I:%M%p")
     'Tuesday, 21. November 2006 04:30PM'
     >>> 'O {1} é {0:%d}, o {2} é {0:%B}, a {3} é {0:%I:%M%p}.'.format(dt, "dia", "mês", "hora")
     'O dia é 21, o mês é November, a hora é 04:30PM.'

O exemplo abaixo define uma subclasse *note tzinfo: 5de. capturando
informações de fuso horário para Kabul, Afeganistão, o qual usou +4 UTC
até 1945 e depois +4:30 UTC após esse período:

     from datetime import timedelta, datetime, tzinfo, timezone

     class KabulTz(tzinfo):
         # Kabul usou +4 até 1945, quando eles moveram para +4:30
         UTC_MOVE_DATE = datetime(1944, 12, 31, 20, tzinfo=timezone.utc)

         def utcoffset(self, dt):
             if dt.year < 1945:
                 return timedelta(hours=4)
             elif (1945, 1, 1, 0, 0) <= dt.timetuple()[:5] < (1945, 1, 1, 0, 30):
                 # Um intervalo de meia hora ambíguo ("imaginário") representando
                 # um 'fold' no tempo por causa da troca de +4 para +4:30.
                 # Se dt cair no intervalo imaginário, usa a fold para decidir como
                 # para resolver. Veja PEP495.
                 return timedelta(hours=4, minutes=(30 if dt.fold else 0))
             else:
                 return timedelta(hours=4, minutes=30)

         def fromutc(self, dt):
             # Segue as mesmas validações como em datetime.tzinfo
             if not isinstance(dt, datetime):
                 raise TypeError("fromutc() requer um argumento datetime")
             if dt.tzinfo is not self:
                 raise ValueError("dt.tzinfo não é self")

             # Uma implementação personalizada é necessária para fromutc
             # como a entrada para esta função é um datetime com valores utc
             # mas com um tzinfo definido para self.
             # Veja datetime.astimezone ou fromtimestamp.
             if dt.replace(tzinfo=timezone.utc) >= self.UTC_MOVE_DATE:
                 return dt + timedelta(hours=4, minutes=30)
             else:
                 return dt + timedelta(hours=4)

         def dst(self, dt):
             # Kabul não tem horário de verão.
             return timedelta(0)

         def tzname(self, dt):
             if dt >= self.UTC_MOVE_DATE:
                 return "+04:30"
             return "+04"

Uso de ‘KabulTz’ mostrado acima:

     >>> tz1 = KabulTz()

     >>> # Datetime antes da alteração
     >>> dt1 = datetime(1900, 11, 21, 16, 30, tzinfo=tz1)
     >>> print(dt1.utcoffset())
     4:00:00

     >>> # Datetime após a alteração
     >>> dt2 = datetime(2006, 6, 14, 13, 0, tzinfo=tz1)
     >>> print(dt2.utcoffset())
     4:30:00

     >>> # Converte datetime para outro fuso horário
     >>> dt3 = dt2.astimezone(timezone.utc)
     >>> dt3
     datetime.datetime(2006, 6, 14, 8, 30, tzinfo=datetime.timezone.utc)
     >>> dt2
     datetime.datetime(2006, 6, 14, 13, 0, tzinfo=KabulTz())
     >>> dt2 == dt3
     True


File: python.info,  Node: Objetos time,  Next: Objetos tzinfo,  Prev: Objetos datetime,  Up: datetime — Tipos básicos de data e hora

5.8.1.12 Objetos ‘time’
.......................

Um objeto *note time: 1ce. representa a hora (local) do dia,
independente de qualquer dia em particular, e sujeito a ajustes através
de um objeto *note tzinfo: 5de.

 -- Classe: datetime.time (hour=0, minute=0, second=0, microsecond=0,
          tzinfo=None, *, fold=0)

     Todos os argumentos são opcionais.  'tzinfo' pode ser ‘None’, ou
     uma instância de uma subclasse de *note tzinfo: 5de.  Os argumentos
     remanescentes devem ser inteiros nos seguintes intervalos:

        * ‘0 <= hour < 24’,

        * ‘0 <= minute < 60’,

        * ‘0 <= second < 60’,

        * ‘0 <= microsecond < 1000000’,

        * ‘fold in [0, 1]’.

     Se um argumento fora desses intervalos é fornecido, *note
     ValueError: 202. é levantada.  Todos tem como padrão o valor 0
     exceto 'tzinfo', o qual tem o valor padrão ‘None’.

Atributos de classe:

 -- Atributo: time.min

     O *note time: 1ce. mais cedo que pode ser representado, ‘time(0, 0,
     0, 0)’.

 -- Atributo: time.max

     O *note time: 1ce. mais tardio que pode ser representado, ‘time(23,
     59, 59, 999999)’.

 -- Atributo: time.resolution

     A menor diferença possível entre objetos *note time: 1ce.
     diferentes, ‘timedelta(microseconds=1)’, embora perceba que
     aritmética sobre objetos *note time: 1ce. não é suportada.

Atributos de instância (somente leitura):

 -- Atributo: time.hour

     No intervalo ‘range(24)’.

 -- Atributo: time.minute

     No intervalo ‘range(60)’.

 -- Atributo: time.second

     No intervalo ‘range(60)’.

 -- Atributo: time.microsecond

     No intervalo ‘range(1000000)’.

 -- Atributo: time.tzinfo

     O objeto passado como argumento tzinfo para o construtor da classe
     *note time: 1ce, ou ‘None’ se nada foi passado.

 -- Atributo: time.fold

     Entre ‘[0, 1]’.  Usado para desambiguar tempos reais durante um
     intervalo repetido.  (Um intervalo repetido ocorre quando relógios
     são atrasados ao final do horário de verão ou quando a diferença
     UTC para o fuso horário atual é reduzida por razões políticas.)  Os
     valores 0 e 1 representam, respectivamente, o primeiro e o segundo
     dos dois momentos com a mesma representação de tempo real.

     Adicionado na versão 3.6.

Objetos *note time: 1ce. oferecem suporte para comparações de igualdade
e ordem, onde ‘a’ é considerado menor que ‘b’ quando ‘a’ precede ‘b’ no
tempo.

Objetos ‘time’ ingênuos e conscientes nunca são iguais.  A comparação de
ordem entre objetos ‘time’ ingênuos e conscientes levanta *note
TypeError: 2c3.

Se ambos os comparandos são conscientes, e tem o mesmo atributo *note
tzinfo: 25d4, os atributos ‘tzinfo’ e ‘fold’ são ignorados e os tempos
base são comparados.  Se ambos os comparandos são conscientes e tem
atributos ‘tzinfo’ diferentes, os comparandos são primeiro ajustados
subtraindo sua diferença em UTC (obtida através de ‘self.utcoffset()’).

Alterado na versão 3.3: Comparações de igualdade entre instâncias de
*note time: 1ce. conscientes e nativas não levantam *note TypeError:
2c3.

Em contextos Booleanos, um objeto *note time: 1ce. é sempre considerado
como verdadeiro.

Alterado na versão 3.5: Antes do Python 3.5, um objeto *note time: 1ce.
era considerado falso se ele representava meia-noite em UTC. Este
comportamento era considerado obscuro e suscetível a erros, e foi
removido no Python 3.5.  Veja bpo-13936(1) para todos os detalhes.

Outro construtor:

 -- Método: classmethod time.fromisoformat (time_string)

     Retorna um *note time: 1ce. correspondendo a 'time_string' em
     qualquer formato válido de ISO 8601, com as seguintes exceções:

       1. Os deslocamentos de fuso horário podem ter segundos
          fracionários.

       2. O ‘T’ inicial, normalmente exigido nos casos em que pode haver
          ambiguidade entre uma data e uma hora, não é necessário.

       3. Segundos fracionários podem ter qualquer número de dígitos
          (algo além de 6 será truncado).

       4. Horas e minutos fracionários não são suportados.

     Exemplos:

          >>> from datetime import time
          >>> time.fromisoformat('04:23:01')
          datetime.time(4, 23, 1)
          >>> time.fromisoformat('T04:23:01')
          datetime.time(4, 23, 1)
          >>> time.fromisoformat('T042301')
          datetime.time(4, 23, 1)
          >>> time.fromisoformat('04:23:01.000384')
          datetime.time(4, 23, 1, 384)
          >>> time.fromisoformat('04:23:01,000384')
          datetime.time(4, 23, 1, 384)
          >>> time.fromisoformat('04:23:01+04:00')
          datetime.time(4, 23, 1, tzinfo=datetime.timezone(datetime.timedelta(seconds=14400)))
          >>> time.fromisoformat('04:23:01Z')
          datetime.time(4, 23, 1, tzinfo=datetime.timezone.utc)
          >>> time.fromisoformat('04:23:01+00:00')
          datetime.time(4, 23, 1, tzinfo=datetime.timezone.utc)

     Adicionado na versão 3.7.

     Alterado na versão 3.11: Anteriormente, este método suportava
     apenas formatos que podiam ser emitidos por *note time.isoformat():
     2613.

Métodos de instância:

 -- Método: time.replace (hour=self.hour, minute=self.minute,
          second=self.second, microsecond=self.microsecond,
          tzinfo=self.tzinfo, *, fold=0)

     Retorna um novo *note time: 1ce. com os mesmos valores, mas com os
     parâmetros especificados atualizados.  Perceba que ‘tzinfo=None’
     pode ser especificado para criar um *note time: 1ce. ingênuo a
     partir de um *note time: 1ce. consciente, sem conversão de dados do
     tempo.

     Objetos *note time: 1ce. também são suportados pela função genérica
     *note copy.replace(): 151.

     Alterado na versão 3.6: Adicionado o parâmetro 'fold'.

 -- Método: time.isoformat (timespec='auto')

     Retorna uma string representando a hora em formato ISO 8601, um
     destes:

        - ‘HH:MM:SS.ffffff’, se *note microsecond: 25d3. não é 0

        - ‘HH:MM:SS’, se *note microsecond: 25d3. é 0

        - ‘HH:MM:SS.ffffff+HH:MM[:SS[.ffffff]]’, se *note utcoffset():
          2614. não retorna ‘None’

        - ‘HH:MM:SS+HH:MM[:SS[.ffffff]]’, se *note microsecond: 25d3. é
          0 e *note utcoffset(): 2614. não retorna ‘None’

     O argumento opcional 'timespec' especifica o número de componentes
     adicionais do tempo a incluir (o padrão é ‘'auto'’).  Pode ser uma
     das seguintes strings:

        - ‘'auto'’: O mesmo que ‘'seconds'’ se *note microsecond: 25d3.
          é 0, o mesmo que ‘'microseconds'’ caso contrário.

        - ‘'hours'’: Inclui o atributo *note hour: 25d0. no formato de
          dois dígitos ‘HH’.

        - ‘'minutes'’: Inclui os atributos *note hour: 25d0. e *note
          minute: 25d1. no formato ‘HH:MM’.

        - ‘'seconds'’: Inclui os atributos *note hour: 25d0, *note
          minute: 25d1. e *note second: 25d2. no formato ‘HH:MM:SS’.

        - ‘'milliseconds'’: Inclui o tempo completo, mas trunca a parte
          fracional dos segundos em milissegundos.  Formato
          ‘HH:MM:SS.sss’.

        - ‘'microseconds'’: Inclui o tempo completo no formato
          ‘HH:MM:SS.ffffff’.

          Nota: Componentes do tempo excluídos são truncados, não
          arredondados.

     *note ValueError: 202. será levantado com um argumento 'timespec'
     inválido.

     Exemplo:

          >>> from datetime import time
          >>> time(hour=12, minute=34, second=56, microsecond=123456).isoformat(timespec='minutes')
          '12:34'
          >>> dt = time(hour=12, minute=34, second=56, microsecond=0)
          >>> dt.isoformat(timespec='microseconds')
          '12:34:56.000000'
          >>> dt.isoformat(timespec='auto')
          '12:34:56'

     Alterado na versão 3.6: Adicionado o parâmetro 'timespec'.

 -- Método: time.__str__ ()

     Para um tempo ‘t’, ‘str(t)’ é equivalente a ‘t.isoformat()’.

 -- Método: time.strftime (format)

     Retorna uma string representando a hora, controladas por uma string
     com formato explícito.  Veja também *note Comportamento de
     strftime() e strptime(): 18de. e *note time.isoformat(): 2613.

 -- Método: time.__format__ (format)

     O mesmo que *note time.strftime(): 1880.  Isso torna possível
     especificar uma string de formatação para o objeto *note time: 1ce.
     em *note literais de string formatados: 9b1. e ao usar *note
     str.format(): 621.  Veja também *note Comportamento de strftime() e
     strptime(): 18de. e *note time.isoformat(): 2613.

 -- Método: time.utcoffset ()

     Se *note tzinfo: 25d4. for ‘None’, retorna ‘None’, caso contrário
     retorna ‘self.tzinfo.utcoffset(None)’, e levanta uma exceção se o
     segundo não retornar ‘None’ ou um objeto *note timedelta: 9d7. com
     magnitude menor que um dia.

     Alterado na versão 3.7: A diferença UTC não é restrita a um número
     completo de minutos.

 -- Método: time.dst ()

     Se *note tzinfo: 25d4. for ‘None’, retorna ‘None’, caso contrário
     retorna ‘self.tzinfo.dst(None)’, e levanta uma exceção se o segundo
     não retornar ‘None’, ou um objeto *note timedelta: 9d7. com
     magnitude menor que um dia.

     Alterado na versão 3.7: A diferença de horário de verão não é
     restrita a um número completo de minutos.

 -- Método: time.tzname ()

     Se *note tzinfo: 25d4. for ‘None’, retorna ‘None’, caso contrário
     retorna ‘self.tzinfo.tzname(None)’, ou levanta uma exceção se o
     último caso não retornar ‘None’ ou um objeto string.

* Menu:

* Exemplos de uso; time: Exemplos de uso time.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=13936


File: python.info,  Node: Exemplos de uso time,  Up: Objetos time

5.8.1.13 Exemplos de uso: ‘time’
................................

Exemplos para trabalhar com um objeto *note time: 1ce.:

     >>> from datetime import time, tzinfo, timedelta
     >>> class TZ1(tzinfo):
     ...     def utcoffset(self, dt):
     ...         return timedelta(hours=1)
     ...     def dst(self, dt):
     ...         return timedelta(0)
     ...     def tzname(self,dt):
     ...         return "+01:00"
     ...     def  __repr__(self):
     ...         return f"{self.__class__.__name__}()"
     ...
     >>> t = time(12, 10, 30, tzinfo=TZ1())
     >>> t
     datetime.time(12, 10, 30, tzinfo=TZ1())
     >>> t.isoformat()
     '12:10:30+01:00'
     >>> t.dst()
     datetime.timedelta(0)
     >>> t.tzname()
     '+01:00'
     >>> t.strftime("%H:%M:%S %Z")
     '12:10:30 +01:00'
     >>> 'A {} é {:%H:%M}.'.format("hora", t)
     'A hora é 12:10.'


File: python.info,  Node: Objetos tzinfo,  Next: Objetos timezone,  Prev: Objetos time,  Up: datetime — Tipos básicos de data e hora

5.8.1.14 Objetos ‘tzinfo’
.........................

 -- Classe: datetime.tzinfo

     Esta é uma classe base abstrata, o que significa que esta classe
     não deve ser instanciada diretamente.  Defina uma subclasse de
     *note tzinfo: 5de. para capturar informações sobre um fuso horário
     em particular.

     Uma instância de (uma subclasse concreta de) *note tzinfo: 5de.
     pode ser passada para os construtores de objetos *note datetime:
     1cc. e *note time: 1ce.  Os objetos time veem seus atributos como
     se estivessem em horário local, e o objeto *note tzinfo: 5de.
     suporta métodos revelando a diferença da hora local a partir de
     UTC, o nome do fuso horário, e diferença de horário em horário de
     verão, todos relativos ao objeto date ou time passado para eles.

     Você precisa derivar uma subclasse concreta, e (pelo menos)
     fornecer implementações dos métodos padrões de *note tzinfo: 5de.
     necessários pelos métodos *note datetime: 1cc. que você usa.  O
     módulo ‘datetime’ fornece *note timezone: 10fe, uma subclasse
     concreta simples de *note tzinfo: 5de, que pode representar fusos
     horários com diferença fixa a partir de UTC, tais como o próprio
     UTC, ou EST (Eastern Standard Time ou Horário padrão oriental) e
     EDT (Eastern Daylight Time ou Horário de verão oriental) na América
     do Norte.

     Requisito especial para preservação: uma subclasse *note tzinfo:
     5de. deve ter um método *note __init__(): 6b0. que pode ser chamado
     sem nenhum argumento, caso contrário ele pode ser conservado, mas
     não alterado novamente.  Isso é um requisito técnico que pode ser
     relaxado no futuro.

     Uma subclasse concreta de *note tzinfo: 5de. pode precisar
     implementar os seguintes métodos.  Exatamente quais métodos são
     necessários depende do uso feito de objetos ‘datetime’ conscientes.
     Se estiver em dúvida, simplesmente implemente todos eles.

 -- Método: tzinfo.utcoffset (dt)

     Retorna a diferença da hora local a partir do UTC, como um objeto
     *note timedelta: 9d7, que é positivo a leste do UTC. Se a hora
     local está a oeste do UTC, isto deve ser negativo.

     Isto representa a diferença 'total' a partir de UTC; por exemplo,
     se um objeto *note tzinfo: 5de. representa fuso horário e ajustes
     de horário de verão, *note utcoffset(): 261c. deve retornar a soma
     deles.  Se a diferença UTC não é conhecida, retorna ‘None’.  Caso
     contrário o valor retornado deve ser um objeto *note timedelta:
     9d7. estritamente contido entre ‘-timedelta(hours=24)’ e
     ‘timedelta(hours=24)’ (a magnitude da diferença deve ser menor que
     um dia).  A maior parte das implementações de *note utcoffset():
     261c. irá provavelmente parecer com um destes dois:

          return CONSTANT                 # classe de posição fixa
          return CONSTANT + self.dst(dt)  # classe consciente de horário de verão

     Se *note utcoffset(): 261c. não retorna ‘None’, *note dst(): 261d.
     também não deve retornar ‘None’.

     A implementação padrão de *note utcoffset(): 261c. levanta *note
     NotImplementedError: 228.

     Alterado na versão 3.7: A diferença UTC não é restrita a um número
     completo de minutos.

 -- Método: tzinfo.dst (dt)

     Retorna o ajuste para o horário de verão (DST - daylight saving
     time), como um objeto *note timedelta: 9d7. ou ‘None’ se informação
     para o horário de verão é desconhecida.

     Retorna ‘timedelta(0)’ se o horário de verão não estiver ativo.  Se
     o horário de verão estiver ativo, retorna a diferença como um
     objeto *note timedelta: 9d7. (veja *note utcoffset(): 261c. para
     detalhes).  Perceba que a diferença do horário de verão, se
     aplicável, já foi adicionada a diferença UTC retornada por *note
     utcoffset(): 261c, então não existe necessidade de consultar *note
     dst(): 261d. a não ser que você esteja interessado em obter a
     informação de horário de verão separadamente.  Por exemplo, *note
     datetime.timetuple(): 2604. chama o método *note dst(): 261d. do
     seu atributo *note tzinfo: 25dc. para determinar como o flag *note
     tm_isdst: 2605. deve ser definido, e *note tzinfo.fromutc(): 2602.
     chama *note dst(): 261d. para contabilizar as mudanças de horário
     de verão quando ocorrem mudanças de fuso horário.

     Uma instância 'tz' de uma subclasse *note tzinfo: 5de. que modela
     tanto horário padrão quanto horário de verão deve ser consistente
     neste sentido:

     ‘tz.utcoffset(dt) - tz.dst(dt)’

     deve retornar o mesmo resultado para cada *note datetime: 1cc. 'dt'
     com ‘dt.tzinfo == tz’ para subclasses *note tzinfo: 5de. sãs, esta
     expressão produz a “diferença padrão” do fuso horário, a qual não
     deve depender de data ou hora, mas apenas de localização
     geográfica.  A implementação de *note datetime.astimezone(): 9d8.
     depende disso, mas não pode detectar violações; é responsabilidade
     do programador garantir isso.  Se uma subclasse *note tzinfo: 5de.
     não pode garantir isso, ele pode ser capaz de substituir a
     implementação padrão de *note tzinfo.fromutc(): 2602. para
     funcionar corretamente com *note astimezone(): 9d8. independente
     disso.

     Maior parte das implementações de *note dst(): 261d. provavelmente
     irá parecer com um destes dois:

          def dst(self, dt):
              # uma classe de posição fixa: não levam em conta DST
              return timedelta(0)

     ou:

          def dst(self, dt):
              # Código para definir dston e dstoff para os horários
              # de transição do horário de versão com base
              # no dt.year de entrada e expresso no horário local padrão.

              if dston <= dt.replace(tzinfo=None) < dstoff:
                  return timedelta(hours=1)
              else:
                  return timedelta(0)

     A implementação padrão de *note dst(): 261d. levanta *note
     NotImplementedError: 228.

     Alterado na versão 3.7: A diferença de horário de verão não é
     restrita a um número completo de minutos.

 -- Método: tzinfo.tzname (dt)

     Retorna o nome do fuso horário correspondente ao objeto *note
     datetime: 1cc. 'dt', como uma string.  Nada sobre nomes de strings
     é definido pelo módulo ‘datetime’, e não há nenhuma exigência de
     que signifique algo em particular.  Por exemplo, ‘"GMT"’, ‘"UTC"’,
     ‘"-500"’, ‘"-5:00"’, ‘"EDT"’, ‘"US/Eastern"’, ‘"America/New York"’
     são todas respostas válidas.  Retorna ‘None’ se um nome de string
     não for conhecido.  Observe que este é um método em vez de uma
     string fixa, principalmente porque algumas subclasses *note tzinfo:
     5de. desejarão retornar nomes diferentes dependendo do valor
     específico de 'dt' passado, especialmente se a classe *note tzinfo:
     5de. estiver contabilizando o horário de verão.

     A implementação padrão de *note tzname(): 261e. levanta *note
     NotImplementedError: 228.

Estes métodos são chamados por um objeto *note datetime: 1cc. ou *note
time: 1ce, em resposta aos seus métodos de mesmo nome.  Um objeto *note
datetime: 1cc. passa a si mesmo como argumento, e um objeto *note time:
1ce. passa ‘None’ como o argumento.  Os métodos de uma subclasse *note
tzinfo: 5de. devem portanto estar preparados para aceitar um argumento
'dt' com valor ‘None’, ou uma classe *note datetime: 1cc.

Quando ‘None’ é passado, cabe ao projetista da classe decidir a melhor
resposta.  Por exemplo, retornar ‘None’ é apropriado se a classe deseja
dizer que objetos time não participam nos protocolos da classe *note
tzinfo: 5de.  Pode ser mais útil para ‘utcoffset(None)’ retornar a
diferença UTC padrão, como não existe outra convenção para descobrir a
diferença padrão.

Quando um objeto *note datetime: 1cc. é passado em resposta a um método
*note datetime: 1cc, ‘dt.tzinfo’ é o mesmo objeto que 'self'.  Os
métodos *note tzinfo: 5de. podem confiar nisso, a menos que o código do
usuário chame métodos *note tzinfo: 5de. diretamente.  A intenção é que
os métodos *note tzinfo: 5de. interpretem 'dt' como estando no horário
local, e não precisem se preocupar com objetos em outros fusos horários.

Existe mais um método *note tzinfo: 5de. que uma subclasse pode desejar
substituição:

 -- Método: tzinfo.fromutc (dt)

     Isto é chamado a partir do padrão implementação de *note
     datetime.astimezone(): 9d8.  Quando chamado a partir dele,
     ‘dt.tzinfo’ é 'self', e os dados de data e hora de 'dt' devem ser
     vistos como expressando um Horário Universal Coordenado (UTC). O
     propósito de *note fromutc(): 2602. é ajustar os dados de data e
     hora, retornando um 'datetime' equivalente na hora local de 'self'.

     A maioria das subclasses de *note tzinfo: 5de. deve ser capaz de
     herdar a implementação padrão de *note fromutc(): 2602. sem
     problemas.  Ela é robusta o suficiente para lidar com fusos
     horários de deslocamento fixo, e fusos horários que contabilizam
     tanto o horário padrão quanto o horário de verão, sendo que este
     último é tratado mesmo que os horários de transição do horário de
     verão sejam diferentes em anos distintos.  Um exemplo de fuso
     horário que a implementação padrão de *note fromutc(): 2602. pode
     não lidar corretamente em todos os casos é aquele onde o
     deslocamento padrão (de UTC) depende da data e hora específicas
     passadas, o que pode acontecer por razões políticas.  As
     implementações padrão de *note astimezone(): 9d8. e *note
     fromutc(): 2602. podem não produzir o resultado desejado se o
     resultado estiver entre as horas que abrangem o momento em que o
     deslocamento padrão muda.

     Ignorando o código para casos de erros, a implementação padrão
     *note fromutc(): 2602. funciona como:

          def fromutc(self, dt):
              # levanta o erro ValueError se dt.tzinfo não é o self
              dtoff = dt.utcoffset()
              dtdst = dt.dst()
              # levanta ValueError se dtoff é None ou dtdst é None
              delta = dtoff - dtdst  # este é o deslocamento padrão do self
              if delta:
                  dt += delta   # converter para hora local padrão
                  dtdst = dt.dst()
                  # levanta ValueError se dtdst é None
              if dtdst:
                  return dt + dtdst
              else:
                  return dt

No seguinte arquivo ‘tzinfo_examples.py’ existem alguns exemplos de
classes *note tzinfo: 5de.:

     from datetime import tzinfo, timedelta, datetime

     ZERO = timedelta(0)
     HOUR = timedelta(hours=1)
     SECOND = timedelta(seconds=1)

     # Uma classe que captura a ideia da plataforma sobre o horário local.
     # (Pode resultar em valores errados em horários históricos em fusos horários
     #  onde o deslocamento UTC e/ou as regras de horário de verão
     #  foram alteradas no passado.)
     import time as _time

     STDOFFSET = timedelta(seconds = -_time.timezone)
     if _time.daylight:
         DSTOFFSET = timedelta(seconds = -_time.altzone)
     else:
         DSTOFFSET = STDOFFSET

     DSTDIFF = DSTOFFSET - STDOFFSET

     class LocalTimezone(tzinfo):

         def fromutc(self, dt):
             assert dt.tzinfo is self
             stamp = (dt - datetime(1970, 1, 1, tzinfo=self)) // SECOND
             args = _time.localtime(stamp)[:6]
             dst_diff = DSTDIFF // SECOND
             # Detect fold
             fold = (args == _time.localtime(stamp - dst_diff))
             return datetime(*args, microsecond=dt.microsecond,
                             tzinfo=self, fold=fold)

         def utcoffset(self, dt):
             if self._isdst(dt):
                 return DSTOFFSET
             else:
                 return STDOFFSET

         def dst(self, dt):
             if self._isdst(dt):
                 return DSTDIFF
             else:
                 return ZERO

         def tzname(self, dt):
             return _time.tzname[self._isdst(dt)]

         def _isdst(self, dt):
             tt = (dt.year, dt.month, dt.day,
                   dt.hour, dt.minute, dt.second,
                   dt.weekday(), 0, 0)
             stamp = _time.mktime(tt)
             tt = _time.localtime(stamp)
             return tt.tm_isdst > 0

     Local = LocalTimezone()


     # Uma implementação completa das regras atuais do horário de verão para os principais fusos horários dos EUA.

     def first_sunday_on_or_after(dt):
         days_to_go = 6 - dt.weekday()
         if days_to_go:
             dt += timedelta(days_to_go)
         return dt


     # Regras do horário de verão dos EUA
     #
     # Este é um conjunto simplificado (ou seja, incorreto em alguns casos)
     # de regras para os horários de início e término do horário de verão dos EUA.
     # Para um conjunto completo e atualizado de regras de horário de verão
     # e definições de fuso horário, visite o Olson Database (ou tente pytz):
     # http://www.twinsun.com/tz/tz-link.htm
     # https://sourceforge.net/projects/pytz/ (pode não estar atualizado)
     #
     # Nos EUA, desde 2007, o horário de verão começa às 2h (horário padrão) no
     # segundo domingo de março, que é o primeiro domingo em ou após 8 de março.
     DSTSTART_2007 = datetime(1, 3, 8, 2)
     # e termina às 2h (horário de verão) no primeiro domingo de novembro.
     DSTEND_2007 = datetime(1, 11, 1, 2)
     # De 1987 a 2006, o horário de verão costumava começar às 2h
     # (horário padrão) no primeiro domingo de abril e terminar às 2h
     # (horário de verão) no último Domingo de outubro, que é o primeiro
     # domingo em ou após 25 de outubro.
     DSTSTART_1987_2006 = datetime(1, 4, 1, 2)
     DSTEND_1987_2006 = datetime(1, 10, 25, 2)
     # De 1967 a 1986, o horário de verão costumava começar às 2h
     # (horário padrão) no último domingo de abril (aquele em ou após
     # 24 de abril) e terminar às 2h (horário de verão) no último domingo
     # de outubro, que é o primeiro domingo em ou após 25 de outubro.
     DSTSTART_1967_1986 = datetime(1, 4, 24, 2)
     DSTEND_1967_1986 = DSTEND_1987_2006

     def us_dst_range(year):
         # Encontra os horários de início e fim do horário de verão dos EUA.
         # Para anos anteriores a 1967, retorne start = end para nenhum horário
         # de verão.
         if 2006 < year:
             dststart, dstend = DSTSTART_2007, DSTEND_2007
         elif 1986 < year < 2007:
             dststart, dstend = DSTSTART_1987_2006, DSTEND_1987_2006
         elif 1966 < year < 1987:
             dststart, dstend = DSTSTART_1967_1986, DSTEND_1967_1986
         else:
             return (datetime(year, 1, 1), ) * 2

         start = first_sunday_on_or_after(dststart.replace(year=year))
         end = first_sunday_on_or_after(dstend.replace(year=year))
         return start, end


     class USTimeZone(tzinfo):

         def __init__(self, hours, reprname, stdname, dstname):
             self.stdoffset = timedelta(hours=hours)
             self.reprname = reprname
             self.stdname = stdname
             self.dstname = dstname

         def __repr__(self):
             return self.reprname

         def tzname(self, dt):
             if self.dst(dt):
                 return self.dstname
             else:
                 return self.stdname

         def utcoffset(self, dt):
             return self.stdoffset + self.dst(dt)

         def dst(self, dt):
             if dt is None or dt.tzinfo is None:
                 # Uma exceção pode ser sensata aqui, em um ou ambos os casos.
                 # Depende de como você quer tratá-las. A implementação padrão
                 # fromutc() (chamada pela implementação padrão astimezone()) passa
                 # um datetime com dt.tzinfo é self.
                 return ZERO
             assert dt.tzinfo is self
             start, end = us_dst_range(dt.year)
             # Não é possível comparar objetos ingênuos com objetos conscientes,
             # então retira o fuso horário de dt primeiro.
             dt = dt.replace(tzinfo=None)
             if start + HOUR <= dt < end - HOUR:
                 # Horário de verão está em vigor.
                 return HOUR
             if end - HOUR <= dt < end:
                 # Fold (uma hora ambígua): usa dt.fold para desambiguar.
                 return ZERO if dt.fold else HOUR
             if start <= dt < start + HOUR:
                 # Intervalo (uma hora inexistente): inverta a regra da dobra.
                 return HOUR if dt.fold else ZERO
             # DST is off.
             return ZERO

         def fromutc(self, dt):
             assert dt.tzinfo is self
             start, end = us_dst_range(dt.year)
             start = start.replace(tzinfo=self)
             end = end.replace(tzinfo=self)
             std_time = dt + self.stdoffset
             dst_time = std_time + HOUR
             if end <= dst_time < end + HOUR:
                 # Hora repetida
                 return std_time.replace(fold=1)
             if std_time < start or dst_time >= end:
                 # Horário padrão
                 return std_time
             if start <= std_time < end - HOUR:
                 # Horário de verão
                 return dst_time


     Eastern  = USTimeZone(-5, "Eastern",  "EST", "EDT")
     Central  = USTimeZone(-6, "Central",  "CST", "CDT")
     Mountain = USTimeZone(-7, "Mountain", "MST", "MDT")
     Pacific  = USTimeZone(-8, "Pacific",  "PST", "PDT")

Perceba que existem sutilezas inevitáveis duas vezes por ano em uma
subclasse *note tzinfo: 5de. contabilizando tanto hora normal e horário
de verão, nos pontos de transição do horário de verão.  Para concretude,
considere a costa leste dos EUA (UTC -0500), onde o horário de verão EDT
começa no minuto após 1:59 (EST, hora padrão) no segundo domingo de
Março, e termina no minuto posterior a 1:59 (EDT, horário de verão) no
primeiro domingo de Novembro:

       UTC   3:MM  4:MM  5:MM  6:MM  7:MM  8:MM
       EST  22:MM 23:MM  0:MM  1:MM  2:MM  3:MM
       EDT  23:MM  0:MM  1:MM  2:MM  3:MM  4:MM

     start  22:MM 23:MM  0:MM  1:MM  3:MM  4:MM

       end  23:MM  0:MM  1:MM  1:MM  2:MM  3:MM

Quando o horário de verão inicia (a linha de “início”), o relógio de
parede local salta de 1:59 para 3:00.  Um horário de parede da forma
2:MM realmente não faz sentido nesse dia, então ‘astimezone(Eastern)’
não irá entregar um resultado com ‘hour == 2’ no dia que o horário de
verão começar.  Por exemplo, na primavera de transição para frente em
2016, nós tivemos:

     >>> from datetime import datetime, timezone
     >>> from tzinfo_examples import HOUR, Eastern
     >>> u0 = datetime(2016, 3, 13, 5, tzinfo=timezone.utc)
     >>> for i in range(4):
     ...     u = u0 + i*HOUR
     ...     t = u.astimezone(Eastern)
     ...     print(u.time(), 'UTC =', t.time(), t.tzname())
     ...
     05:00:00 UTC = 00:00:00 EST
     06:00:00 UTC = 01:00:00 EST
     07:00:00 UTC = 03:00:00 EDT
     08:00:00 UTC = 04:00:00 EDT

Quando o horário de verão termina (a linha “end”), há um problema
potencialmente pior: existe uma hora que não pode ser expressa de forma
inequívoca no horário local: a última hora do horário de verão.  No fuso
Eastern, isso corresponde a horários no formato 5:MM UTC no dia em que o
horário de verão termina.  O relógio de parede local salta de 1:59
(horário de verão) para 1:00 (horário padrão) novamente.  Horários
locais no formato 1:MM são ambíguos.  *note astimezone(): 9d8. imita o
comportamento do relógio local mapeando então duas horas UTC adjacentes
para a mesma hora local.  No exemplo do fuso Eastern, horários UTC no
formato 5:MM e 6:MM ambos se transformam em 1:MM quando convertidos para
o fuso Eastern, mas os horários anteriores têm o atributo *note fold:
c72. definido como 0 e os horários posteriores têm o atributo definido
como 1.  Por exemplo, na transição de retorno de 2016, obtemos:

     >>> u0 = datetime(2016, 11, 6, 4, tzinfo=timezone.utc)
     >>> for i in range(4):
     ...     u = u0 + i*HOUR
     ...     t = u.astimezone(Eastern)
     ...     print(u.time(), 'UTC =', t.time(), t.tzname(), t.fold)
     ...
     04:00:00 UTC = 00:00:00 EDT 0
     05:00:00 UTC = 01:00:00 EDT 0
     06:00:00 UTC = 01:00:00 EST 1
     07:00:00 UTC = 02:00:00 EST 0

Observe que as instâncias de *note datetime: 1cc. que diferem apenas
pelo valor do atributo *note fold: c72. são consideradas iguais nas
comparações.

Aplicações que não suportam ambiguidades de tempo devem verificar
explicitamente o valor do atributo *note fold: c72. ou evitar utilizar
subclasses híbridas *note tzinfo: 5de.; não há ambiguidades ao usar
*note timezone: 10fe. ou qualquer outra subclasse *note tzinfo: 5de. de
deslocamento fixo (como uma classe que representa apenas EST
(deslocamento fixo de -5 horas) ou apenas EDT (deslocamento fixo de -4
horas)).

Ver também
..........

     *note zoneinfo: 134.

          O módulo ‘datetime’ possui uma classe básica *note timezone:
          10fe. (para lidar com deslocamentos fixos arbitrários do UTC)
          e seu atributo *note timezone.utc: 614. (uma instância UTC
          ‘timezone’ ).

          ‘zoneinfo’ traz o 'banco de dados de fuso horário IANA'
          (também conhecido como banco de dados Olson) para Python, e
          seu uso é recomendado.

Banco de dados de fuso horário da IANA(1)

     O banco de dados de fuso horário (comumente chamado de tz, tzdata
     ou zoneinfo) contém código e dados que representam o histórico de
     hora local para muitas localizações representativas ao redor do
     globo.  Ele é atualizado periodicamente para refletir mudanças
     feitas por corpos políticos para limites de fuso horário,
     diferenças UTC, e regras de horário de verão.

   ---------- Footnotes ----------

   (1) https://www.iana.org/time-zones


File: python.info,  Node: Objetos timezone,  Next: Comportamento de strftime e strptime,  Prev: Objetos tzinfo,  Up: datetime — Tipos básicos de data e hora

5.8.1.15 Objetos ‘timezone’
...........................

A classe *note timezone: 10fe. é uma subclasse de *note tzinfo: 5de,
cada instância da qual representa um fuso horário definido por um
deslocamento fixo do UTC.

Objetos desta classe não podem ser usados para representar informações
de fuso horário em locais onde diferentes deslocamentos são usados em
diferentes dias do ano ou onde mudanças históricas foram feitas no
horário civil.

 -- Classe: datetime.timezone (offset, name=None)

     O argumento 'offset' deve ser especificado como um objeto *note
     timedelta: 9d7. representando a diferença entre o tempo local e o
     UTC. Ele deve estar estritamente entre ‘-timedelta(hours=24)’ e
     ‘timedelta(hous=24)’, caso contrário a exceção *note ValueError:
     202. será provocada.

     O argumento 'name' é opcional.  Se especificado, deve ser uma
     string que será usada como o valor retornado pelo método *note
     datetime.tzname(): 2603.

     Adicionado na versão 3.2.

     Alterado na versão 3.7: A diferença UTC não é restrita a um número
     completo de minutos.

 -- Método: timezone.utcoffset (dt)

     Retorna o valor fixo especificado quando a instância *note
     timezone: 10fe. é construída.

     O argumento 'dt' é ignorado.  O valor de retorno é uma instância
     *note timedelta: 9d7. equivalente à diferença entre o tempo local e
     o UTC.

     Alterado na versão 3.7: A diferença UTC não é restrita a um número
     completo de minutos.

 -- Método: timezone.tzname (dt)

     Retorna o valor fixo especificado quando a instância *note
     timezone: 10fe. é construída.

     Se 'name' não é passado ao construtor, o nome retornado por
     ‘tzname(dt)’ é gerado a partir do valor de ‘offset’ do seguinte
     modo: Se 'offset' é ‘timedelta(0)’, o nome é “UTC”, caso contrário
     é uma string no formato ‘UTC±HH:MM’, na qual ± é o sinal do
     ‘offset’, HH e MM são dois dígitos de ‘offset.hours’ e
     ‘offset.minutes’ respectivamente.

     Alterado na versão 3.6: Nome gerado de ‘offset=timedelta(0)’ é
     agora simplesmente ‘'UTC'’, não ‘'UTC+00:00'’.

 -- Método: timezone.dst (dt)

     Sempre retorna ‘None’.

 -- Método: timezone.fromutc (dt)

     Retorna ‘dt + offset’.  O argumento 'dt' deve ser uma instância
     *note datetime: 1cc. consciente, com ‘tzinfo’ definida para ‘self’.

Atributos de classe:

 -- Atributo: timezone.utc

     O fuso horário UTC, ‘timezone(timedelta(0))’.


File: python.info,  Node: Comportamento de strftime e strptime,  Prev: Objetos timezone,  Up: datetime — Tipos básicos de data e hora

5.8.1.16 Comportamento de ‘strftime()’ e ‘strptime()’
.....................................................

Todos os objetos *note date: 1cd, *note datetime: 1cc. e *note time:
1ce. dão suporte ao método ‘strftime(format)’, para criar uma string
representando o tempo sob o controle de uma string de formatação
explícita.

Em recíproca, o método de classe *note datetime.strptime(): 16f6. cria
um objeto *note datetime: 1cc. a partir de uma string representando a
data e a hora e uma string de formatação correspondente.

A tabela abaixo fornece uma comparação de alto nível entre *note
strftime(): caf. e *note strptime(): 16f6.:

                     ‘strftime’                                                   ‘strptime’
                                                                                  
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
                                                                                  
Uso                  Converte objeto para uma string conforme um formato          Interpreta uma string como um objeto *note datetime: 1cc. dado um formato
                     fornecido                                                    correspondente
                                                                                  
                                                                                  
Tipo de método       Método de instância                                          Método de classe
                                                                                  
                                                                                  
Método de            *note date: 1cd.; *note datetime: 1cc.; *note time: 1ce.     *note datetime: 1cc.
                                                                                  
                                                                                  
Assinatura           ‘strftime(format)’                                           ‘strptime(date_string, format)’
                                                                                  

* Menu:

* Códigos de formato strftime() e strptime(): Códigos de formato strftime e strptime.
* Detalhes técnicos::


File: python.info,  Node: Códigos de formato strftime e strptime,  Next: Detalhes técnicos,  Up: Comportamento de strftime e strptime

5.8.1.17 Códigos de formato ‘strftime()’ e ‘strptime()’
.......................................................

Esses métodos aceitam códigos de formato que podem ser usados para
analisar e formatar datas:

     >>> datetime.strptime('31/01/22 23:59:59.999999',
     ...                   '%d/%m/%y %H:%M:%S.%f')
     datetime.datetime(2022, 1, 31, 23, 59, 59, 999999)
     >>> _.strftime('%a %d %b %Y, %I:%M%p')
     'Mon 31 Jan 2022, 11:59PM'

A seguir é exibida uma lista de todos os códigos de formatação que o
padrão C de 1989 requer, e eles funcionam em todas as plataformas com
implementação padrão C.

Diretiva        Significado                          Exemplo                      Notas
                                                                                  
----------------------------------------------------------------------------------------------
                                                                                  
‘%a’            Dias da semana como nomes                 Sun, Mon, …, Sat (en_US);(1)
                abreviados da localidade.                 So, Mo, …, Sa (de_DE)   
                                                     
                                                                                  
‘%A’            Dia da semana como nome completo          Sunday, Monday, …, Saturday (en_US);(1)
                da localidade.                            Sonntag, Montag, …, Samstag (de_DE)
                                                     
                                                                                  
‘%w’            Dia da semana como um número         0, 1, …, 6
                decimal, onde 0 é domingo e 6 é      
                sábado.
                
                                                                                  
‘%d’            Dia do mês como um número decimal    01, 02, …, 31                (9)
                com zeros a esquerda.                                             
                
                                                                                  
‘%b’            Mês como nome da localidade               Jan, Feb, …, Dec (en_US);(1)
                abreviado.                                Jan, Feb, …, Dez (de_DE)
                                                     
                                                                                  
‘%B’            Mês como nome completo da                 January, February, …, December (en_US);(1)
                localidade.                               janeiro, fevereiro, …, dezembro (pt_BR)
                                                     
                                                                                  
‘%m’            Mês como um número decimal com       01, 02, …, 12                (9)
                zeros a esquerda.                                                 
                
                                                                                  
‘%y’            Ano sem século como um número        00, 01, …, 99                (9)
                decimal com zeros a esquerda.                                     
                
                                                                                  
‘%Y’            Ano com século como um número        0001, 0002, …, 2013, 2014,   (2)
                decimal.                             …, 9998, 9999                
                                                     
                                                                                  
‘%H’            Hora (relógio de 24 horas) como um   00, 01, …, 23                (9)
                número decimal com zeros a                                        
                esquerda.
                
                                                                                  
‘%I’            Hora (relógio de 12 horas) como um   01, 02, …, 12                (9)
                número decimal com zeros a                                        
                esquerda.
                
                                                                                  
‘%p’            Equivalente da localidade a AM ou         AM, PM (en_US);         (1), (3)
                PM.                                       am, pm (de_DE)          
                                                     
                                                                                  
‘%M’            Minutos como um número decimal,      00, 01, …, 59                (9)
                com zeros a esquerda.                                             
                
                                                                                  
‘%S’            Segundos como um número decimal,     00, 01, …, 59                (4), (9)
                com zeros a esquerda.                                             
                
                                                                                  
‘%f’            Microssegundos como um número        000000, 000001, …, 999999    (5)
                decimal, com zeros à esquerda até                                 
                completar 6 dígitos.
                
                                                                                  
‘%z’            Diferença UTC no formato             (vazio), +0000, -0400,       (6)
                ‘±HHMM[SS[.ffffff]]’ (string vazia   +1030, +063415,              
                se o objeto é ingênuo).              -030712.345216
                                                     
                                                                                  
‘%Z’            Nome do fuso horário (string vazia   (vazio), UTC, GMT            (6)
                se o objeto é ingênuo).                                           
                
                                                                                  
‘%j’            Dia do ano como um número decimal,   001, 002, …, 366             (9)
                com zeros a esquerda.                                             
                
                                                                                  
‘%U’            Número da semana do ano (Domingo     00, 01, …, 53                (7), (9)
                como o primeiro dia da semana)                                    
                como um número decimal, com zeros
                a esquerda.  Todos os dias em um
                ano novo precedendo o primeiro
                domingo são considerados como
                estando na semana 0.
                
                                                                                  
‘%W’            Número da semana do ano              00, 01, …, 53                (7), (9)
                (Segunda-feira como o primeiro dia                                
                da semana) como um número decimal,
                com zeros a esquerda.  Todos os
                dias em um ano novo precedendo a
                primeira segunda-feira são
                considerados como estando na
                semana 0.
                
                                                                                  
‘%c’            Representação de data e hora              Tue Aug 16 21:30:00 1988 (en_US);(1)
                apropriada da localidade.                 Di 16 Aug 21:30:00 1988 (de_DE)
                                                     
                                                                                  
‘%x’            Representação de data apropriada          08/16/88 (None);        (1)
                de localidade.                            08/16/1988 (en_US);     
                                                          16.08.1988 (de_DE)
                                                     
                                                                                  
‘%X’            Representação de hora apropriada          21:30:00 (en_US);       (1)
                da localidade.                            21:30:00 (de_DE)        
                                                     
                                                                                  
‘%%’            Um caractere literal ‘'%'’.          %
                                                     

Diversas diretivas adicionais não necessárias pelo padrão C89 são
incluídas para conveniência.  Estes parâmetros todos correspondem a
valores de datas na ISO 8601.

Diretiva        Significado                          Exemplo                      Notas
                                                                                  
----------------------------------------------------------------------------------------------
                                                                                  
‘%G’            Ano ISO 8601 com o século            0001, 0002, …, 2013, 2014,   (8)
                representando o ano que a maior      …, 9998, 9999                
                parte da semana ISO (‘%V’).          
                
                                                                                  
‘%u’            Dia de semana ISO 8601 como um       1, 2, …, 7
                número decimal onde 1 é              
                segunda-feira.
                
                                                                                  
‘%V’            Semana ISO 8601 como um número       01, 02, …, 53                (8), (9)
                decimal, com segunda-feira como o                                 
                primeiro dia da semana.  A semana
                01 é a semana contendo o dia 4 de
                Janeiro.
                
                                                                                  
‘%:z’           Diferença UTC no formato             (vazio), +00:00, -04:00,     (6)
                ‘±HH:MM[:SS[.ffffff]]’ (string       +10:30, +06:34:15,           
                vazia se o objeto é ingênuo).        -03:07:12.345216
                                                     

Eles podem não estar disponíveis em todas as plataformas quando usados
com o método *note strftime(): caf.  As diretivas de ano e semana da ISO
8601 e ISO 8601 não são intercambiáveis com as diretivas ano e número da
semana acima.  Chamar *note strptime(): 16f6. com diretivas ISO 8601
incompletas ou ambíguas levantará um *note ValueError: 202.

O conjunto completo de códigos de formato suportados varia entre as
plataformas, porque o Python chama a função ‘strftime()’ da biblioteca C
da plataforma, e variações de plataforma são comuns.  Para ver o
conjunto completo de códigos de formato suportados em sua plataforma,
consulte a documentação ‘strftime(3)(1)’.  Também existem diferenças
entre plataformas no tratamento de especificadores de formato não
suportados.

Adicionado na versão 3.6: ‘%G’, ‘%u’ e ‘%V’ foram adicionados.

Adicionado na versão 3.12: ‘%:z’ foi adicionado.

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/strftime(3)


File: python.info,  Node: Detalhes técnicos,  Prev: Códigos de formato strftime e strptime,  Up: Comportamento de strftime e strptime

5.8.1.18 Detalhes técnicos
..........................

Em termos gerais, ‘d.strftime(fmt)’ age como ‘time.strftime(fmt,
d.timetuple())’ do módulo *note time: ee, embora nem todos os objetos
suportem um método *note timetuple(): 25ed.

For the *note datetime.strptime(): 16f6. class method, the default value
is ‘1900-01-01T00:00:00.000’: any components not specified in the format
string will be pulled from the default value.

     Nota: When used to parse partial dates lacking a year, *note
     datetime.strptime(): 16f6. will raise when encountering February 29
     because the default year of 1900 is 'not' a leap year.  Always add
     a default leap year to partial date strings before parsing.

     >>> from datetime import datetime
     >>> value = "2/29"
     >>> datetime.strptime(value, "%m/%d")
     Traceback (most recent call last):
     ...
     ValueError: day 29 must be in range 1..28 for month 2 in year 1900
     >>> datetime.strptime(f"1904 {value}", "%Y %m/%d")
     datetime.datetime(1904, 2, 29, 0, 0)

Usar ‘datetime.strptime(date_string, format)’ é equivalente a:

     datetime(*(time.strptime(date_string, format)[0:6]))

exceto quando o formato inclui componentes de sub-segundos ou
informações de deslocamento de fuso horário, que são suportados em
‘datetime.strptime’ mas são descartados por ‘time.strptime’.

Para objetos *note time: 1ce, os códigos de formato para ano, mês e dia
não devem ser usados, pois objetos ‘time’ não têm tais valores.  Se
forem usados de qualquer forma, o ano é substituído por 1900, e o mês e
dia por 1.

Para objetos *note date: 1cd, os códigos de formato para horas, minutos,
segundos e microssegundos não devem ser usados, pois objetos *note date:
1cd. não têm tais valores.  Se forem usados de qualquer forma, são
substituídos por 0.

Pela mesma razão, o tratamento de formato de strings contendo pontos de
código Unicode que não podem ser representados no conjunto de caracteres
da localidade atual também é dependente da plataforma.  Em algumas
plataformas, tais pontos de código são preservados intactos na saída,
enquanto em outros ‘strftime’ pode levantar *note UnicodeError: 12e6. ou
retornar uma string vazia ao invés.

Notas:

  1. Como o formato depende da localidade atual, deve-se tomar cuidado
     ao fazer suposições sobre o valor de saída.  A ordenação dos campos
     irá variar (por exemplo, “mês/dia/ano” versus “dia/mês/ano”) e a
     saída pode conter caracteres não ASCII.

  2. O método *note strptime(): 16f6. pode analisar anos no intervalo
     completo de [1, 9999], mas anos < 1000 devem ser preenchidos com
     zeros até uma largura de 4 dígitos.

     Alterado na versão 3.2: Em versões anteriores, o método *note
     strftime(): caf. era limitado a anos >= 1900.

     Alterado na versão 3.3: Na versão 3.2, o método *note strftime():
     caf. era limitado a anos >= 1000.

  3. Quando usado com o método *note strptime(): 16f6, a diretiva ‘%p’
     afeta somente o campo de hora de saída se a diretiva ‘%I’ for usada
     para analisar a hora.

  4. Ao contrário do módulo *note time: ee, o módulo ‘datetime’ não
     oferece suporte para segundos intercalares.

  5. Quando usado com o método *note strptime(): 16f6, a diretiva ‘%f’
     aceita de um a seis dígitos e zeros à direita.  ‘%f’ é uma extensão
     do conjunto de caracteres de formato no padrão do C (mas
     implementado separadamente em objetos datetime e, portanto, sempre
     disponível).

  6. Para um objeto ingênuo, os códigos de formatação ‘%z’, ‘%:z’ e ‘%Z’
     são substituídos por strings vazias.

     Para um objeto consciente:

     ‘%z’

          *note utcoffset(): 2600. é transformado em uma string do
          formato ‘±HHMM[SS[.ffffff]]’, onde ‘HH’ é uma string de 2
          dígitos que fornece o número de horas de deslocamento UTC,
          ‘MM’ é uma string de 2 dígitos que fornece o número de minutos
          de deslocamento UTC, ‘SS’ é uma string de 2 dígitos que
          fornece o número de segundos de deslocamento UTC e ‘ffffff’ é
          uma string de 6 dígitos que fornece o número de microssegundos
          de deslocamento UTC. A parte ‘ffffff’ é omitida quando o
          deslocamento é um número inteiro de segundos e tanto a parte
          ‘ffffff’ quanto a parte ‘SS’ são omitidas quando o
          deslocamento é um número inteiro de minutos.  Por exemplo, se
          *note utcoffset(): 2600. retornar ‘timedelta(hours=-3,
          minutes=-30)’, ‘%z’ será substituído pela string ‘'-0330'’.

     Alterado na versão 3.7: A diferença UTC não é restrita a um número
     completo de minutos.

     Alterado na versão 3.7: Quando a diretiva ‘%z’ é fornecida ao
     método *note strptime(): 16f6, os deslocamentos UTC podem ter dois
     pontos como separador entre horas, minutos e segundos.  Por
     exemplo, ‘'+01:00:00'’ será analisado como um deslocamento de uma
     hora.  Além disso, fornecer ‘'Z'’ é idêntico a ‘'+00:00'’.

     ‘%:z’

          Comporta-se exatamente como ‘%z’, mas possui um separador de
          dois pontos adicionado entre horas, minutos e segundos.

     ‘%Z’

          Em *note strftime(): caf, ‘%Z’ é substituído por uma string
          vazia se *note tzname(): 2603. retornar ‘None’; caso
          contrário, ‘%Z’ é substituído pelo valor retornado, que deve
          ser uma string.

          *note strptime(): 16f6. aceita apenas certos valores para
          ‘%Z’:

            1. qualquer valor em ‘time.tzname’ para a localidade da sua
               máquina

            2. os valores codificados ‘UTC’ e ‘GMT’

          Então alguém vivendo no Japão pode ter ‘JST’, ‘UTC’, e ‘GMT’
          como valores válidos, mas provavelmente não ‘EST’.  Isso
          levantará ‘ValueError’ para valores inválidos.

     Alterado na versão 3.2: Quando a diretiva ‘%z’ é fornecida ao
     método *note strptime(): 16f6, um objeto *note datetime: 1cc.
     consciente será produzido.  O ‘tzinfo’ do resultado será definido
     para uma instância *note timezone: 10fe.

  7. Quando utilizados com o método *note strptime(): 16f6, ‘%U’ e ‘%W’
     são usados somente em cálculos quando o dia da semana e o ano
     (‘%Y’) são especificados.

  8. Semelhante a ‘%U’ e ‘%W’, ‘%V’ é usado apenas em cálculos quando o
     dia da semana e o ano ISO (‘%G’) são especificados em um formato de
     string *note strptime(): 16f6.  Observe também que ‘%G’ e ‘%Y’ não
     são intercambiáveis.

  9. Quando usado com o método *note strptime(): 16f6, o zero à esquerda
     é opcional para os formatos ‘%d’, ‘%m’, ‘%H’, ‘%I’, ‘%M’, ‘%S’,
     ‘%j’, ‘%U’, ‘%W’ e ‘%V’.  O formato ‘%y’ requer um zero à esquerda.

  10. When parsing a month and day using *note strptime(): 16f6, always
     include a year in the format.  If the value you need to parse lacks
     a year, append an explicit dummy leap year.  Otherwise your code
     will raise an exception when it encounters leap day because the
     default year used by the parser (1900) is not a leap year.  Users
     run into that bug every leap year.

          >>> month_day = "02/29"
          >>> datetime.strptime(f"{month_day};1984", "%m/%d;%Y")  # Sem bug de ano bissexto.
          datetime.datetime(1984, 2, 29, 0, 0)

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     Chamadas ao método *note strptime(): 16f6. usando uma string de
     formato contendo um dia do mês sem um ano agora emitem um *note
     DeprecationWarning: 1a5.  Na versão 3.15 ou posterior, podemos
     mudar isso para um erro ou mudar o ano padrão para um ano bissexto.
     Consulte gh-70647(1).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/70647


File: python.info,  Node: zoneinfo — Suporte a fuso horário da IANA,  Next: calendar — Funções gerais relacionadas ao calendário,  Prev: datetime — Tipos básicos de data e hora,  Up: Tipos de Dados

5.8.2 ‘zoneinfo’ — Suporte a fuso horário da IANA
-------------------------------------------------

Adicionado na versão 3.9.

'Código-fonte:' Lib/zoneinfo(1)

__________________________________________________________________

O módulo *note zoneinfo: 134. fornece uma implementação concreta de fuso
horário para oferecer suporte ao banco de dados de fuso horário da IANA,
conforme especificado originalmente na PEP 615(2).  Por padrão, *note
zoneinfo: 134. usa os dados de fuso horário do sistema, se disponíveis;
se nenhum dado de fuso horário do sistema estiver disponível, a
biblioteca voltará a usar o pacote original tzdata(3) disponível no
PyPI.

Ver também
..........

Módulo: *note datetime: 30.

     Fornece os tipos *note time: 1ce. e *note datetime: 1cc. com os
     quais a classe *note ZoneInfo: 8e5. foi projetada para ser usada.

Pacote tzdata(4)

     Pacote próprio mantido pelos desenvolvedores principais do CPython
     para fornecer dados de fuso horário via PyPI.

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

* Menu:

* Usando ZoneInfo::
* Fontes de dados::
* A classe ZoneInfo::
* Funções: Funções<3>.
* Globals::
* Exceptions and warnings::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/zoneinfo

   (2) https://peps.python.org/pep-0615/

   (3) https://pypi.org/project/tzdata/

   (4) https://pypi.org/project/tzdata/


File: python.info,  Node: Usando ZoneInfo,  Next: Fontes de dados,  Up: zoneinfo — Suporte a fuso horário da IANA

5.8.2.1 Usando ‘ZoneInfo’
.........................

*note ZoneInfo: 8e5. é uma implementação concreta da classe base
abstrata *note datetime.tzinfo: 5de. e deve ser anexada a ‘tzinfo’, por
meio do construtor, do método *note datetime.replace: 1513. ou *note
datetime.astimezone: 9d8.:

     >>> from zoneinfo import ZoneInfo
     >>> from datetime import datetime, timedelta

     >>> dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))
     >>> print(dt)
     2020-10-31 12:00:00-07:00

     >>> dt.tzname()
     'PDT'

Datas e horas construídas dessa maneira são compatíveis com a aritmética
de data e hora e lidam com transições de horário de verão sem
intervenção adicional:

     >>> dt_add = dt + timedelta(days=1)

     >>> print(dt_add)
     2020-11-01 12:00:00-08:00

     >>> dt_add.tzname()
     'PST'

Esses fusos horários também oferecem suporte ao atributo *note fold:
c72. introduzido em PEP 495(1).  Durante transições de deslocamento que
induzem horários ambíguos (como uma transição do horário de verão para o
horário padrão), o deslocamento 'anterior' à transição é usado quando
‘fold=0’, e o deslocamento 'posterior' à transição é usado quando
‘fold=1’, por exemplo:

     >>> dt = datetime(2020, 11, 1, 1, tzinfo=ZoneInfo("America/Los_Angeles"))
     >>> print(dt)
     2020-11-01 01:00:00-07:00

     >>> print(dt.replace(fold=1))
     2020-11-01 01:00:00-08:00

Ao converter de outro fuso horário, a dobra será definida para o valor
correto:

     >>> from datetime import timezone
     >>> LOS_ANGELES = ZoneInfo("America/Los_Angeles")
     >>> dt_utc = datetime(2020, 11, 1, 8, tzinfo=timezone.utc)

     >>> # Antes da transição PDT -> PST
     >>> print(dt_utc.astimezone(LOS_ANGELES))
     2020-11-01 01:00:00-07:00

     >>> # Após a transição PDT -> PST
     >>> print((dt_utc + timedelta(hours=1)).astimezone(LOS_ANGELES))
     2020-11-01 01:00:00-08:00

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0495/


File: python.info,  Node: Fontes de dados,  Next: A classe ZoneInfo,  Prev: Usando ZoneInfo,  Up: zoneinfo — Suporte a fuso horário da IANA

5.8.2.2 Fontes de dados
.......................

O módulo ‘zoneinfo’ não fornece dados de fuso horário diretamente, mas,
em vez disso, extrai informações de fuso horário do banco de dados de
fuso horário do sistema ou do pacote PyPI original tzdata(1), se
disponível.  Alguns sistemas, incluindo principalmente os Windows, não
possuem um banco de dados IANA disponível e, portanto, para projetos que
buscam compatibilidade multiplataforma e exigem dados de fuso horário,
recomenda-se declarar uma dependência em tzdata.  Se nem os dados do
sistema nem o tzdata estiverem disponíveis, todas as chamadas para *note
ZoneInfo: 8e5. levantarão *note ZoneInfoNotFoundError: 1611.

* Menu:

* Configurando as fontes de dados::

   ---------- Footnotes ----------

   (1) https://pypi.org/project/tzdata/


File: python.info,  Node: Configurando as fontes de dados,  Up: Fontes de dados

5.8.2.3 Configurando as fontes de dados
.......................................

Quando ‘ZoneInfo(key)’ é chamado, o construtor primeiro pesquisa nos
diretórios especificados em *note TZPATH: 1ef8. por um arquivo que
corresponda a ‘key’ e, em caso de falha, procura uma correspondência no
pacote tzdata.  Esse comportamento pode ser configurado de três
maneiras:

  1. O padrão *note TZPATH: 1ef8, quando não especificado de outra
     forma, pode ser configurado em *note tempo de compilação: 1ef9.

  2. *note TZPATH: 1ef8. pode ser configurado usando *note uma variável
     de ambiente: 262f.

  3. Em *note tempo de execução: 2630, o caminho de pesquisa pode ser
     manipulado usando a função *note reset_tzpath(): 15f5.

* Menu:

* Configuração em tempo de compilação::
* Configuração do ambiente::
* Configuração em tempo de execução::


File: python.info,  Node: Configuração em tempo de compilação,  Next: Configuração do ambiente,  Up: Configurando as fontes de dados

5.8.2.4 Configuração em tempo de compilação
...........................................

O *note TZPATH: 1ef8. padrão inclui vários locais de implantação comuns
para o banco de dados de fuso horário (exceto no Windows, onde não há
locais “conhecidos” para dados de fuso horário).  Em sistemas POSIX,
distribuidores downstream e aqueles que constroem o Python a partir do
código-fonte e que sabem onde os dados de fuso horário do sistema estão
implantados podem alterar o caminho do fuso horário padrão especificando
a opção de tempo de compilação ‘TZPATH’ (ou, mais provavelmente, o *note
sinalizador de configuração -with-tzpath: 1ef7.), que deve ser uma
string delimitada por *note os.pathsep: 1ecc.

Em todas as plataformas, o valor configurado está disponível como a
chave ‘TZPATH’ em *note sysconfig.get_config_var(): 1063.


File: python.info,  Node: Configuração do ambiente,  Next: Configuração em tempo de execução,  Prev: Configuração em tempo de compilação,  Up: Configurando as fontes de dados

5.8.2.5 Configuração do ambiente
................................

Ao inicializar *note TZPATH: 1ef8. (no momento da importação ou sempre
que *note reset_tzpath(): 15f5. for chamado sem argumentos), o módulo
‘zoneinfo’ usará a variável de ambiente ‘PYTHONTZPATH’, se existir, para
definir o caminho de pesquisa.

 -- Variável De Ambiente: PYTHONTZPATH

     Esta é uma string separada por *note os.pathsep: 1ecc. contendo o
     caminho de pesquisa de fuso horário a ser usado.  Ela deve
     consistir apenas em caminhos absolutos, e não relativos.
     Componentes relativos especificados em ‘PYTHONTZPATH’ não serão
     usados, mas, caso contrário, o comportamento quando um caminho
     relativo é especificado é definido pela implementação; o CPython
     levantará *note InvalidTZPathWarning: 2634, mas outras
     implementações podem ignorar silenciosamente o componente incorreto
     ou levantar uma exceção.

Para configurar o sistema para ignorar os dados do sistema e usar o
pacote tzdata, defina ‘PYTHONTZPATH=""’.


File: python.info,  Node: Configuração em tempo de execução,  Prev: Configuração do ambiente,  Up: Configurando as fontes de dados

5.8.2.6 Configuração em tempo de execução
.........................................

O caminho de busca TZ também pode ser configurado em tempo de execução
usando a função *note reset_tzpath(): 15f5.  Geralmente, essa não é uma
operação aconselhável, embora seja razoável usá-la em funções de teste
que exigem o uso de um caminho de fuso horário específico (ou que exijam
a desativação do acesso aos fusos horários do sistema).


File: python.info,  Node: A classe ZoneInfo,  Next: Funções<3>,  Prev: Fontes de dados,  Up: zoneinfo — Suporte a fuso horário da IANA

5.8.2.7 A classe ‘ZoneInfo’
...........................

 -- Classe: zoneinfo.ZoneInfo (key)

     Uma subclasse concreta de *note datetime.tzinfo: 5de. que
     representa um fuso horário IANA especificado pela string ‘key’.
     Chamadas ao construtor primário sempre retornarão objetos que sejam
     idênticos em comparação; em outras palavras, exceto pela
     invalidação de cache via *note ZoneInfo.clear_cache(): 2637, para
     todos os valores de ‘key’, a seguinte asserção será sempre
     verdadeira:

          a = ZoneInfo(key)
          b = ZoneInfo(key)
          assert a is b

     ‘key’ deve estar no formato de um caminho POSIX relativo e
     normalizado, sem referências de nível superior.  O construtor
     levantará *note ValueError: 202. se uma chave não conforme for
     passada.

     Se nenhum arquivo correspondente a ‘key’ for encontrado, o
     construtor levantará *note ZoneInfoNotFoundError: 1611.

A classe ‘ZoneInfo’ tem dois construtores alternativos:

 -- Método: classmethod ZoneInfo.from_file (file_obj, /, key=None)

     Constructs a ‘ZoneInfo’ object from a file-like object returning
     bytes (e.g.  a file opened in binary mode or an *note io.BytesIO:
     ed3. object).  Unlike the primary constructor, this always
     constructs a new object.

     The ‘key’ parameter sets the name of the zone for the purposes of
     *note __str__(): 61d. and *note __repr__(): 61c.

     Objects created via this constructor cannot be pickled (see *note
     pickling: 2638.).

     *note ValueError: 202. is raised if the data read from 'file_obj'
     is not a valid TZif file.

 -- Método: classmethod ZoneInfo.no_cache (key)

     An alternate constructor that bypasses the constructor’s cache.  It
     is identical to the primary constructor, but returns a new object
     on each call.  This is most likely to be useful for testing or
     demonstration purposes, but it can also be used to create a system
     with a different cache invalidation strategy.

     Objects created via this constructor will also bypass the cache of
     a deserializing process when unpickled.

          Cuidado: Using this constructor may change the semantics of
          your datetimes in surprising ways, only use it if you know
          that you need to.

The following class methods are also available:

 -- Método: classmethod ZoneInfo.clear_cache (*, only_keys=None)

     A method for invalidating the cache on the ‘ZoneInfo’ class.  If no
     arguments are passed, all caches are invalidated and the next call
     to the primary constructor for each key will return a new instance.

     If an iterable of key names is passed to the ‘only_keys’ parameter,
     only the specified keys will be removed from the cache.  Keys
     passed to ‘only_keys’ but not found in the cache are ignored.

          Aviso: Invoking this function may change the semantics of
          datetimes using ‘ZoneInfo’ in surprising ways; this modifies
          module state and thus may have wide-ranging effects.  Only use
          it if you know that you need to.

A classe possui um atributo:

 -- Atributo: ZoneInfo.key

     This is a read-only *note attribute: 263b. that returns the value
     of ‘key’ passed to the constructor, which should be a lookup key in
     the IANA time zone database (e.g.  ‘America/New_York’,
     ‘Europe/Paris’ or ‘Asia/Tokyo’).

     For zones constructed from file without specifying a ‘key’
     parameter, this will be set to ‘None’.

          Nota: Although it is a somewhat common practice to expose
          these to end users, these values are designed to be primary
          keys for representing the relevant zones and not necessarily
          user-facing elements.  Projects like CLDR (the Unicode Common
          Locale Data Repository) can be used to get more user-friendly
          strings from these keys.

* Menu:

* String representations::
* Pickle serialization::


File: python.info,  Node: String representations,  Next: Pickle serialization,  Up: A classe ZoneInfo

5.8.2.8 String representations
..............................

The string representation returned when calling *note str: 44c. on a
*note ZoneInfo: 8e5. object defaults to using the *note ZoneInfo.key:
263a. attribute (see the note on usage in the attribute documentation):

     >>> zone = ZoneInfo("Pacific/Kwajalein")
     >>> str(zone)
     'Pacific/Kwajalein'

     >>> dt = datetime(2020, 4, 1, 3, 15, tzinfo=zone)
     >>> f"{dt.isoformat()} [{dt.tzinfo}]"
     '2020-04-01T03:15:00+12:00 [Pacific/Kwajalein]'

For objects constructed from a file without specifying a ‘key’
parameter, ‘str’ falls back to calling *note repr(): 800.  ‘ZoneInfo’’s
‘repr’ is implementation-defined and not necessarily stable between
versions, but it is guaranteed not to be a valid ‘ZoneInfo’ key.


File: python.info,  Node: Pickle serialization,  Prev: String representations,  Up: A classe ZoneInfo

5.8.2.9 Pickle serialization
............................

Rather than serializing all transition data, ‘ZoneInfo’ objects are
serialized by key, and ‘ZoneInfo’ objects constructed from files (even
those with a value for ‘key’ specified) cannot be pickled.

The behavior of a ‘ZoneInfo’ file depends on how it was constructed:

  1. ‘ZoneInfo(key)’: When constructed with the primary constructor, a
     ‘ZoneInfo’ object is serialized by key, and when deserialized, the
     deserializing process uses the primary and thus it is expected that
     these are the same object as other references to the same time
     zone.  For example, if ‘europe_berlin_pkl’ is a string containing a
     pickle constructed from ‘ZoneInfo("Europe/Berlin")’, one would
     expect the following behavior:

          >>> a = ZoneInfo("Europe/Berlin")
          >>> b = pickle.loads(europe_berlin_pkl)
          >>> a is b
          True

  2. ‘ZoneInfo.no_cache(key)’: When constructed from the cache-bypassing
     constructor, the ‘ZoneInfo’ object is also serialized by key, but
     when deserialized, the deserializing process uses the cache
     bypassing constructor.  If ‘europe_berlin_pkl_nc’ is a string
     containing a pickle constructed from
     ‘ZoneInfo.no_cache("Europe/Berlin")’, one would expect the
     following behavior:

          >>> a = ZoneInfo("Europe/Berlin")
          >>> b = pickle.loads(europe_berlin_pkl_nc)
          >>> a is b
          False

  3. ‘ZoneInfo.from_file(file_obj, /, key=None)’: When constructed from
     a file, the ‘ZoneInfo’ object raises an exception on pickling.  If
     an end user wants to pickle a ‘ZoneInfo’ constructed from a file,
     it is recommended that they use a wrapper type or a custom
     serialization function: either serializing by key or storing the
     contents of the file object and serializing that.

This method of serialization requires that the time zone data for the
required key be available on both the serializing and deserializing
side, similar to the way that references to classes and functions are
expected to exist in both the serializing and deserializing
environments.  It also means that no guarantees are made about the
consistency of results when unpickling a ‘ZoneInfo’ pickled in an
environment with a different version of the time zone data.


File: python.info,  Node: Funções<3>,  Next: Globals,  Prev: A classe ZoneInfo,  Up: zoneinfo — Suporte a fuso horário da IANA

5.8.2.10 Funções
................

 -- Função: zoneinfo.available_timezones ()

     Get a set containing all the valid keys for IANA time zones
     available anywhere on the time zone path.  This is recalculated on
     every call to the function.

     This function only includes canonical zone names and does not
     include “special” zones such as those under the ‘posix/’ and
     ‘right/’ directories, or the ‘posixrules’ zone.

          Cuidado: This function may open a large number of files, as
          the best way to determine if a file on the time zone path is a
          valid time zone is to read the “magic string” at the
          beginning.

          Nota: These values are not designed to be exposed to
          end-users; for user facing elements, applications should use
          something like CLDR (the Unicode Common Locale Data
          Repository) to get more user-friendly strings.  See also the
          cautionary note on *note ZoneInfo.key: 263a.

 -- Função: zoneinfo.reset_tzpath (to=None)

     Sets or resets the time zone search path (*note TZPATH: 1ef8.) for
     the module.  When called with no arguments, *note TZPATH: 1ef8. is
     set to the default value.

     Calling ‘reset_tzpath’ will not invalidate the *note ZoneInfo: 8e5.
     cache, and so calls to the primary ‘ZoneInfo’ constructor will only
     use the new ‘TZPATH’ in the case of a cache miss.

     The ‘to’ parameter must be a *note sequence: 4f1. of strings or
     *note os.PathLike: c6c. and not a string, all of which must be
     absolute paths.  *note ValueError: 202. will be raised if something
     other than an absolute path is passed.


File: python.info,  Node: Globals,  Next: Exceptions and warnings,  Prev: Funções<3>,  Up: zoneinfo — Suporte a fuso horário da IANA

5.8.2.11 Globals
................

 -- Dado: zoneinfo.TZPATH

     A read-only sequence representing the time zone search path – when
     constructing a ‘ZoneInfo’ from a key, the key is joined to each
     entry in the ‘TZPATH’, and the first file found is used.

     ‘TZPATH’ may contain only absolute paths, never relative paths,
     regardless of how it is configured.

     The object that ‘zoneinfo.TZPATH’ points to may change in response
     to a call to *note reset_tzpath(): 15f5, so it is recommended to
     use ‘zoneinfo.TZPATH’ rather than importing ‘TZPATH’ from
     ‘zoneinfo’ or assigning a long-lived variable to ‘zoneinfo.TZPATH’.

     For more information on configuring the time zone search path, see
     *note Configurando as fontes de dados: 262e.


File: python.info,  Node: Exceptions and warnings,  Prev: Globals,  Up: zoneinfo — Suporte a fuso horário da IANA

5.8.2.12 Exceptions and warnings
................................

 -- Exceção: zoneinfo.ZoneInfoNotFoundError

     Raised when construction of a *note ZoneInfo: 8e5. object fails
     because the specified key could not be found on the system.  This
     is a subclass of *note KeyError: 344.

 -- Exceção: zoneinfo.InvalidTZPathWarning

     Raised when *note PYTHONTZPATH: 2633. contains an invalid component
     that will be filtered out, such as a relative path.


File: python.info,  Node: calendar — Funções gerais relacionadas ao calendário,  Next: collections — Tipos de dados de contêineres,  Prev: zoneinfo — Suporte a fuso horário da IANA,  Up: Tipos de Dados

5.8.3 ‘calendar’ — Funções gerais relacionadas ao calendário
------------------------------------------------------------

'Código-fonte:' Lib/calendar.py(1)

__________________________________________________________________

Este módulo permite que você exiba calendários como o programa Unix
‘cal’, e fornece funções adicionais úteis relacionadas ao calendário.
Por padrão, esses calendários têm a segunda-feira como o primeiro dia da
semana, e domingo como o último (a convenção europeia).  Use *note
setfirstweekday(): 2644. para colocar o primeiro dia da semana como
domingo (6) ou para qualquer outro dia da semana.  Parâmetros que
especificam datas são dados como inteiros.  Para funcionalidade
relacionada, veja também os módulos *note datetime: 30. e *note time:
ee.

As funções e classes definidas neste módulo usam um calendário
idealizado, o calendário Gregoriano atual estendido indefinidamente nas
duas direções.  Isso corresponde à definição do calendário “proleptic
Gregorian” (gregoriano proléptico) no livro “Calendrical Calculations”
de Dershowitz e Reingold, onde está o calendário base para todas os
cálculos.  Anos com zero ou negativos são interpretados e prescritos
pelo padrão ISO 8601.  Ano 0 é 1 A.C., ano -1 é 2 A.C, e de assim em
diante.

 -- Classe: calendar.Calendar (firstweekday=0)

     Cria um objeto *note Calendar: 2645.  'firstweekday' é um inteiro
     que especifica o primeiro dia da semana.  *note MONDAY: 2646. é ‘0’
     (o padrão), *note SUNDAY: 2647. é ‘6’.

     Um objeto *note Calendar: 2645. fornece vários métodos que podem
     ser usados para preparar os dados do calendário para formatação.
     Esta classe não realiza nenhuma formatação por si mesma.  Esse é o
     trabalho das subclasses.

     Instâncias de *note Calendar: 2645. têm os seguintes métodos e
     atributos:

      -- Atributo: firstweekday

          O primeiro dia da semana como um inteiro (0–6).

          Esta propriedade também pode ser definida e lida usando *note
          setfirstweekday(): 2649. e *note getfirstweekday(): 264a.
          respectivamente.

      -- Método: getfirstweekday ()

          Retorna um *note int: 257. correspondente ao primeiro dia da
          semana atual (0-6).

          Idêntico à leitura da propriedade *note firstweekday: 2648.

      -- Método: setfirstweekday (firstweekday)

          Define o primeiro dia da semana como 'firstweekday', passado
          como *note int: 257. (0–6)

          Idêntico à definição da propriedade *note firstweekday: 2648.

      -- Método: iterweekdays ()

          Retorna um iterador dos números dos dias da semana que serão
          usados em uma semana.  O primeiro valor do iterador será o
          mesmo que o da propriedade *note firstweekday: 2648.

      -- Método: itermonthdates (year, month)

          Retorna um iterador para o mês 'month' (1–12) no ano 'year'.
          Este iterador retornará todos os dias (como objetos *note
          datetime.date: 1cd.) do mês, bem como os dias antes do início
          do mês ou após o final do mês, necessários para obter uma
          semana completa.

      -- Método: itermonthdays (year, month)

          Retorna um iterador para o mês 'month' no ano 'year'
          semelhante a *note itermonthdates(): c33, mas não restrito
          pelo intervalo de *note datetime.date: 1cd.  Os dias
          retornados serão simplesmente os números dos dias do mês.
          Para os dias fora do mês especificado, o número do dia será
          ‘0’.

      -- Método: itermonthdays2 (year, month)

          Retorna um iterador para o mês 'month' no ano 'year'
          semelhante a *note itermonthdates(): c33, mas não restrito
          pelo intervalo de *note datetime.date: 1cd.  Os dias
          retornados serão tuplas consistindo de um número de dia do mês
          e um número de dia da semana.

      -- Método: itermonthdays3 (year, month)

          Retorna um iterador para o mês 'month' no ano 'year'
          semelhante a *note itermonthdates(): c33, mas não restrito
          pelo intervalo de *note datetime.date: 1cd.  Os dias
          retornados serão tuplas consistindo de números de um ano, um
          mês e um dia do mês.

          Adicionado na versão 3.7.

      -- Método: itermonthdays4 (year, month)

          Retorna um iterador para o mês 'month' no ano 'year'
          semelhante a *note itermonthdates(): c33, mas não restrito
          pelo intervalo de *note datetime.date: 1cd.  Os dias
          retornados serão tuplas consistindo de números de um ano, um
          mês, um dia do mês e um dia da semana.

          Adicionado na versão 3.7.

      -- Método: monthdatescalendar (year, month)

          Retorna uma lista das semanas do mês 'month' do 'year' como
          semanas completas.  As semanas são listas de sete objetos
          *note datetime.date: 1cd.

      -- Método: monthdays2calendar (year, month)

          Retorna uma lista das semanas do mês 'month' do ano 'year'
          como semanas completas.  As semanas são listas de sete tuplas
          de números dias e de dias de semanas.

      -- Método: monthdayscalendar (year, month)

          Retorna uma lista das semanas do mês 'month' do ano 'year'
          como semanas completas.  As semanas são listas de números de
          sete dias.

      -- Método: yeardatescalendar (year, width=3)

          Retorna os dados para o ano especificado prontos para
          formatação.  O valor de retorno é uma lista de linhas de
          meses.  Cada linha de mês contém até 'width' meses (padrão é
          3).  Cada mês contém entre 4 e 6 semanas, e cada semana contém
          1–7 dias.  Os dias são objetos *note datetime.date: 1cd.

      -- Método: yeardays2calendar (year, width=3)

          Retorna os dados para o ano especificado prontos para
          formatação (semelhante a *note yeardatescalendar(): 2651.).
          Entradas nas listas semanais são tuplas de números de dias e
          números de dias de semana.  Números de dias fora deste mês são
          zero.

      -- Método: yeardayscalendar (year, width=3)

          Retorna a data para o ano especificado prontos para formatação
          (semelhante a *note yeardatescalendar(): 2651.).  Entradas nas
          listas de semanas são números de dias.  Números de dias fora
          deste mês são zero.

 -- Classe: calendar.TextCalendar (firstweekday=0)

     Esta classe pode ser usada para gerar texto plano para calendários.

     Instâncias de *note TextCalendar: 2654. têm os seguintes métodos:

      -- Método: formatday (theday, weekday, width)

          Retorna uma string representando um único dia formatado com a
          largura fornecida em 'width'.  Se 'theday' for ‘0’, retorna
          uma string de espaços da largura especificada, representando
          um dia vazio.  O parâmetro 'weekday' não é usado.

      -- Método: formatweek (theweek, w=0)

          Retorna uma única semana em uma string sem nova linha.  Se 'w'
          for providenciado, isto especifica a largura das colunas de
          data, que são centrais.  Dependendo do primeiro dia da semana
          conforme especificado no construtor ou configurado pelo método
          *note setfirstweekday(): 2644.

      -- Método: formatweekday (weekday, width)

          Retorna uma string representando o nome de um único dia da
          semana formatado para a largura especificada em 'width'.  O
          parâmetro 'weekday' é um inteiro representando o dia da
          semana, onde ‘0’ é segunda-feira e ‘6’ é domingo.

      -- Método: formatweekheader (width)

          Retorna uma string contendo a linha de cabeçalho dos nomes dos
          dias da semana, formatada com a largura fornecida por 'width'
          para cada coluna.  Os nomes dependem das configurações de
          localidade e são preenchidos até a largura especificada.

      -- Método: formatmonth (theyear, themonth, w=0, l=0)

          Retorna o calendário do mês em uma string multilinha.  Se 'w'
          for providenciado, isto especifica a largura das colunas de
          data, que são centrais.  Se 'l' for dado, este especifica o
          número de linhas que cada semana vai usar.  Dependendo do
          primeiro dia da semana conforme especificado no construtor ou
          configurado pelo método *note setfirstweekday(): 2644.

      -- Método: formatmonthname (theyear, themonth, width=0,
               withyear=True)

          Retorna uma string representando o nome do mês centralizado
          dentro da largura especificada em 'width'.  Se 'withyear' for
          ‘True’, inclui o ano na saída.  Os parâmetros 'theyear' e
          'themonth' especificam o ano e o mês para o nome a ser
          formatado, respectivamente.

      -- Método: prmonth (theyear, themonth, w=0, l=0)

          Imprime um calendário do mês conforme retornado pelo *note
          formatmonth(): 2659.

      -- Método: formatyear (theyear, w=2, l=1, c=6, m=3)

          Retorna um calendário com 'm' colunas para um ano inteiro
          conforme uma string multilinha.  Parâmetros opcionais 'w', 'l'
          e 'c' definem a largura da coluna data, linhas por semana e
          números de espaços entre as colunas dos meses,
          respectivamente.  Depende do primeiro dia da semana conforme
          especificado no construtor ou definido pelo método *note
          setfirstweekday(): 2644.  O ano mais novo para o qual o
          calendário pode ser gerado depende da plataforma.

      -- Método: pryear (theyear, w=2, l=1, c=6, m=3)

          Imprime o calendário para um ano inteiro conforme retornado
          por *note formatyear(): 265c.

 -- Classe: calendar.HTMLCalendar (firstweekday=0)

     Esta classse pode ser usada para gerar calendários HTML.

     Instâncias de ‘HTMLCalendar’ têm os seguintes métodos:

      -- Método: formatmonth (theyear, themonth, withyear=True)

          Retorna um calendário do mês como uma tabela HTML. Se
          'withyear' for verdadeiro, o ano será incluído no cabeçalho,
          senão apenas o nome do mês será utilizado.

      -- Método: formatyear (theyear, width=3)

          Retorna um calendário do ano como uma tabela HTML. 'width'
          (padronizada para 3) especifica o número de meses por linha.

      -- Método: formatyearpage (theyear, width=3, css='calendar.css',
               encoding=None)

          Retorna o calendário de um ano como uma página HTML completa.
          'width' (padrão 3) especifica o número de meses por linha.
          'css' é o nome da folha de estilo em cascata a ser usada.
          *note None: 675. pode ser passado se nenhuma folha de estilo
          deve ser usada.  'encoding' especifica a codificação a ser
          usada para a saída (padrão para a codificação padrão do
          sistema).

      -- Método: formatmonthname (theyear, themonth, withyear=True)

          Retorna um nome de mês como uma linha de tabela HTML. Se
          'withyear' for verdadeiro, o ano será incluído na linha, senão
          apenas o nome do mês será utilizado.

     ‘HTMLCalendar’ tem os seguintes atributos que você pode substituir
     para personalizar as classes CSS usadas pelo calendário:

      -- Atributo: cssclasses

          Uma lista de classes CSS usadas para cada dia da semana.  A
          lista de classes padrão é:

               cssclasses = ["mon", "tue", "wed", "thu", "fri", "sat", "sun"]

          mais estilos podem ser adicionados para cada dia:

               cssclasses = ["mon text-bold", "tue", "wed", "thu", "fri", "sat", "sun red"]

          Observe que o comprimento desta lista deve ser de sete itens.

      -- Atributo: cssclass_noday

          A classe CSS para um dia da semana que ocorre no mês anterior
          ou seguinte.

          Adicionado na versão 3.7.

      -- Atributo: cssclasses_weekday_head

          Uma lista de classes CSS usadas para nomes de dias da semana
          na linha de cabeçalho.  O padrão é o mesmo que *note
          cssclasses: 2662.

          Adicionado na versão 3.7.

      -- Atributo: cssclass_month_head

          A classe CSS principal do mês (usada por *note
          formatmonthname(): 2661.).  O valor padrão é ‘"month"’.

          Adicionado na versão 3.7.

      -- Atributo: cssclass_month

          A classe CSS para a tabela do mês inteiro (usada por *note
          formatmonth(): 265e.).  O valor padrão é ‘"month"’.

          Adicionado na versão 3.7.

      -- Atributo: cssclass_year

          A classe CSS para a tabela de tabelas do ano inteiro (usada
          por *note formatyear(): 265f.).  O valor padrão é ‘"year"’.

          Adicionado na versão 3.7.

      -- Atributo: cssclass_year_head

          A classe CSS para o cabeçalho da tabela para o ano inteiro
          (usado por *note formatyear(): 265f.).  O valor padrão é
          ‘"year"’.

          Adicionado na versão 3.7.

     Observe que, embora a nomenclatura dos atributos de classe
     descritos acima seja singular (por exemplo, ‘cssclass_month’
     ‘cssclass_noday’), é possível substituir a única classe CSS por uma
     lista de classes CSS separadas por espaços, por exemplo:

          "text-bold text-red"

     Aqui está um exemplo de como ‘HTMLCalendar’ pode ser personalizado:

          class CustomHTMLCal(calendar.HTMLCalendar):
              cssclasses = [style + " text-nowrap" for style in
                            calendar.HTMLCalendar.cssclasses]
              cssclass_month_head = "text-center month-head"
              cssclass_month = "text-center month"
              cssclass_year = "text-italic lead"

 -- Classe: calendar.LocaleTextCalendar (firstweekday=0, locale=None)

     Esta subclasse de *note TextCalendar: 2654. pode receber um nome de
     localidade no construtor e retornará nomes de meses e dias da
     semana na localidade especificada.

 -- Classe: calendar.LocaleHTMLCalendar (firstweekday=0, locale=None)

     Esta subclasse de *note HTMLCalendar: b35. pode receber um nome de
     localidade no construtor e retornará nomes de meses e dias da
     semana na localidade especificada.

     Nota: Os métodos construtores ‘formatweekday()’ e
     ‘formatmonthname()’ dessas duas classes alteram temporariamente a
     localidade ‘LC_TIME’ para o 'locale' fornecido.  Como a localidade
     atual é uma configuração de todo o processo, eles não são seguros
     para threads.

Para calendários de texto simples, este módulo fornece as seguintes
funções.

 -- Função: calendar.setfirstweekday (weekday)

     Define o dia da semana (‘0’ é segunda-feira, ‘6’ é domingo) para
     começar cada semana.  Os valores *note MONDAY: 2646, *note TUESDAY:
     2669, *note WEDNESDAY: 266a, *note THURSDAY: 266b, *note FRIDAY:
     266c, *note SATURDAY: 266d. e *note SUNDAY: 2647. são fornecidos
     para conveniência.  Por exemplo, para definir o primeiro dia da
     semana como domingo:

          import calendar
          calendar.setfirstweekday(calendar.SUNDAY)

 -- Função: calendar.firstweekday ()

     Retorna a configuração atual para o dia da semana que inicia cada
     semana.

 -- Função: calendar.isleap (year)

     Retorna *note True: c27. se 'year' for um ano bissexto, caso
     contrário, *note False: b49.

 -- Função: calendar.leapdays (y1, y2)

     Retorna o número de anos bissextos no intervalo de 'y1' a 'y2'
     (exclusivo), onde 'y1' e 'y2' são anos.

     Esta função funciona para intervalos que abrangem uma mudança de
     século.

 -- Função: calendar.weekday (year, month, day)

     Retorna o dia da semana (‘0’ é segunda-feira) para 'year'
     (‘1970’–…), 'month' (‘1’–‘12’), 'day' (‘1’–‘31’).

 -- Função: calendar.weekheader (n)

     Retorna um cabeçalho contendo nomes abreviados de dias da semana.
     'n' especifica a largura em caracteres para um dia da semana.

 -- Função: calendar.monthrange (year, month)

     Retorna o dia da semana do primeiro dia do mês e o número de dias
     do mês, para o 'year' e 'month' especificados.

 -- Função: calendar.monthcalendar (year, month)

     Retorna uma matriz representando o calendário de um mês.  Cada
     linha representa uma semana; dias fora do mês são representados por
     zeros.  Cada semana começa com segunda-feira, a menos que seja
     definida por *note setfirstweekday(): 2644.

 -- Função: calendar.prmonth (theyear, themonth, w=0, l=0)

     Imprime um calendário do mês conforme retornado pelo *note month():
     1686.

 -- Função: calendar.month (theyear, themonth, w=0, l=0)

     Retorna o calendário de um mês em uma string de várias linhas
     usando *note formatmonth(): 2659. da classe *note TextCalendar:
     2654.

 -- Função: calendar.prcal (year, w=0, l=0, c=6, m=3)

     Imprime o calendário para um ano inteiro conforme retornado por
     *note calendar(): 14.

 -- Função: calendar.calendar (year, w=2, l=1, c=6, m=3)

     Retorna um calendário de 3 colunas para um ano inteiro como uma
     string de várias linhas usando *note formatyear(): 265c. da classe
     *note TextCalendar: 2654.

 -- Função: calendar.timegm (tuple)

     Uma função não relacionada, mas útil, que pega uma tupla de tempo,
     como a retornada pela função *note gmtime(): 1200. no módulo *note
     time: ee, e retorna o valor de registro de data e hora Unix
     correspondente, presumindo uma época de 1970 e a codificação POSIX.
     Na verdade, *note time.gmtime(): 1200. e *note timegm(): 2678. são
     inversos um do outro.

O módulo *note calendar: 14. exporta os seguintes atributos de dados:

 -- Dado: calendar.day_name

     Uma sequência que representa os dias da semana no local atual, onde
     Monday é o dia número 0.

          >>> import calendar
          >>> list(calendar.day_name)
          ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']

 -- Dado: calendar.day_abbr

     Uma sequência que representa os dias abreviados da semana no local
     atual, onde Mon é o dia número 0.

          >>> import calendar
          >>> list(calendar.day_abbr)
          ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']

 -- Dado: calendar.MONDAY
 -- Dado: calendar.TUESDAY
 -- Dado: calendar.WEDNESDAY
 -- Dado: calendar.THURSDAY
 -- Dado: calendar.FRIDAY
 -- Dado: calendar.SATURDAY
 -- Dado: calendar.SUNDAY

     Apelidos para os dias da semana, onde ‘MONDAY’ é ‘0’ e ‘SUNDAY’ é
     ‘6’.

     Adicionado na versão 3.12.

 -- Classe: calendar.Day

     Enumeração que define os dias da semana como constantes inteiras.
     Os membros dessa enumeração são exportados para o escopo do módulo
     como *note MONDAY: 2646. até *note SUNDAY: 2647.

     Adicionado na versão 3.12.

 -- Dado: calendar.month_name

     Uma sequência que representa os meses do ano na localidade atual.
     Isso segue a convenção normal de janeiro sendo o mês número 1,
     então tem um comprimento de 13 e ‘month_name[0]’ é a string vazia.

          >>> import calendar
          >>> list(calendar.month_name)
          ['', 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']

 -- Dado: calendar.month_abbr

     Uma sequência que representa os meses abreviados do ano na
     localidade atual.  Isso segue a convenção normal de janeiro sendo o
     mês número 1, então tem um comprimento de 13 e ‘month_abbr[0]’ é a
     string vazia.

          >>> import calendar
          >>> list(calendar.month_abbr)
          ['', 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

 -- Dado: calendar.JANUARY
 -- Dado: calendar.FEBRUARY
 -- Dado: calendar.MARCH
 -- Dado: calendar.APRIL
 -- Dado: calendar.MAY
 -- Dado: calendar.JUNE
 -- Dado: calendar.JULY
 -- Dado: calendar.AUGUST
 -- Dado: calendar.SEPTEMBER
 -- Dado: calendar.OCTOBER
 -- Dado: calendar.NOVEMBER
 -- Dado: calendar.DECEMBER

     Apelidos para os meses do ano, onde ‘JANUARY’ é ‘1’ e ‘DECEMBER’ é
     ‘12’.

     Adicionado na versão 3.12.

 -- Classe: calendar.Month

     Enumeração que define os meses do ano como constantes inteiras.  Os
     membros dessa enumeração são exportados para o escopo do módulo
     como *note JANUARY: 2f9. até *note DECEMBER: 2686.

     Adicionado na versão 3.12.

O módulo *note calendar: 14. define as seguintes exceções:

 -- Exceção: calendar.IllegalMonthError (month)

     Uma subclasse de *note ValueError: 202, levantada quando o número
     do mês fornecido está fora do intervalo de 1 a 12 (inclusive).

      -- Atributo: month

          O número de meses inválidos.

 -- Exceção: calendar.IllegalWeekdayError (weekday)

     Uma subclasse de *note ValueError: 202, levantada quando o número
     do dia da semana fornecido está fora do intervalo de 0 a 6
     (inclusive).

      -- Atributo: weekday

          O número de dias da semana inválidos.

Ver também
..........

Módulo *note datetime: 30.

     Interface orientada a objetos para datas e horas com funcionalidade
     semelhante ao módulo *note time: ee.

Módulo *note time: ee.

     Funções de baixo nível relacionadas ao tempo.

* Menu:

* Uso na linha de comando::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/calendar.py


File: python.info,  Node: Uso na linha de comando,  Up: calendar — Funções gerais relacionadas ao calendário

5.8.3.1 Uso na linha de comando
...............................

Adicionado na versão 2.5.

O módulo *note calendar: 14. pode ser executado como um script na linha
de comando para exibir um calendário interativamente.

     python -m calendar [-h] [-L LOCALE] [-e ENCODING] [-t {text,html}]                   [-w WIDTH] [-l LINES] [-s SPACING] [-m MONTHS] [-c CSS]                   [-f FIRST_WEEKDAY] [year] [month]

Por exemplo, para exibir um calendário para o ano 2000:

     $ python -m calendar 2000                                  2000      January                   February                   MarchMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su                1  2          1  2  3  4  5  6             1  2  3  4  5 3  4  5  6  7  8  9       7  8  9 10 11 12 13       6  7  8  9 10 11 1210 11 12 13 14 15 16      14 15 16 17 18 19 20      13 14 15 16 17 18 1917 18 19 20 21 22 23      21 22 23 24 25 26 27      20 21 22 23 24 25 2624 25 26 27 28 29 30      28 29                     27 28 29 30 3131       April                      May                       JuneMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su                1  2       1  2  3  4  5  6  7                1  2  3  4 3  4  5  6  7  8  9       8  9 10 11 12 13 14       5  6  7  8  9 10 1110 11 12 13 14 15 16      15 16 17 18 19 20 21      12 13 14 15 16 17 1817 18 19 20 21 22 23      22 23 24 25 26 27 28      19 20 21 22 23 24 2524 25 26 27 28 29 30      29 30 31                  26 27 28 29 30        July                     August                  SeptemberMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su                1  2          1  2  3  4  5  6                   1  2  3 3  4  5  6  7  8  9       7  8  9 10 11 12 13       4  5  6  7  8  9 1010 11 12 13 14 15 16      14 15 16 17 18 19 20      11 12 13 14 15 16 1717 18 19 20 21 22 23      21 22 23 24 25 26 27      18 19 20 21 22 23 2424 25 26 27 28 29 30      28 29 30 31               25 26 27 28 29 3031      October                   November                  DecemberMo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su      Mo Tu We Th Fr Sa Su                   1             1  2  3  4  5                   1  2  3 2  3  4  5  6  7  8       6  7  8  9 10 11 12       4  5  6  7  8  9 10 9 10 11 12 13 14 15      13 14 15 16 17 18 19      11 12 13 14 15 16 1716 17 18 19 20 21 22      20 21 22 23 24 25 26      18 19 20 21 22 23 2423 24 25 26 27 28 29      27 28 29 30               25 26 27 28 29 30 3130 31

As seguintes opções são aceitas:

 -- Option: --help, -h

     Mostra a mensagem de ajuda e sai.

 -- Option: --locale LOCALE, -L LOCALE

     A localidade a ser usada para nomes de meses e dias da semana.  O
     padrão é inglês.

 -- Option: --encoding ENCODING, -e ENCODING

     A codificação a ser usada na saída.  *note -encoding: 2690. é
     necessário se *note -locale: 268e. estiver definido.

 -- Option: --type {text,html}, -t {text,html}

     Exibe o calendário no terminal como texto ou como um documento
     HTML.

 -- Option: --first-weekday FIRST_WEEKDAY, -f FIRST_WEEKDAY

     O dia da semana para começar cada semana.  Deve ser um número entre
     0 (segunda-feira) e 6 (domingo).  O padrão é 0.

     Adicionado na versão 3.13.

 -- Option: year

     O ano para exibir o calendário.  O padrão é o ano atual.

 -- Option: month

     O mês do *note year: 2696. especificado para exibir o calendário.
     Deve ser um número entre 1 e 12 e pode ser usado somente no modo
     texto.  O padrão é exibir um calendário para todo o ano.

'Opções de modo texto:'

 -- Option: --width WIDTH, -w WIDTH

     A largura da coluna de data no terminal.  A data é exibida
     centralizada na coluna.  Qualquer valor inferior a 2 é ignorado.  O
     padrão é 2.

 -- Option: --lines LINES, -l LINES

     O número de linhas por semana no terminal.  A data é exibida
     alinhada no topo.  Qualquer valor inferior a 1 é ignorado.  O
     padrão é 1.

 -- Option: --spacing SPACING, -s SPACING

     O espaço entre os meses nas colunas.  Qualquer valor inferior a 2 é
     ignorado.  O padrão é 6.

 -- Option: --months MONTHS, -m MONTHS

     O número de meses exibidos por linha.  O padrão é 3.

'Opções do modo HTML:'

 -- Option: --css CSS, -c CSS

     O caminho de uma folha de estilo CSS a ser usada no calendário.
     Isso deve ser relativo ao HTML gerado ou a um HTTP absoluto ou a
     uma URL ‘file:///’.


File: python.info,  Node: collections — Tipos de dados de contêineres,  Next: collections abc — Classes Base Abstratas para Contêineres,  Prev: calendar — Funções gerais relacionadas ao calendário,  Up: Tipos de Dados

5.8.4 ‘collections’ — Tipos de dados de contêineres
---------------------------------------------------

'Código-fonte:' Lib/collections/__init__.py(1)

__________________________________________________________________

Este módulo implementa tipos de dados de contêineres especializados que
fornecem alternativas aos contêineres embutidos do Python, *note dict:
256, *note list: 611, *note set: 5d9. e *note tuple: 370.

*note namedtuple(): 1ca.  função fábrica ('factory function') para criar subclasses de tuplas
                          com campos nomeados
                          
                          
*note deque: 5dc.         contêiner lista ou similar com acréscimos e retiradas rápidas nas duas
                          extremidades
                          
                          
*note ChainMap: c36.      classe dict ou similar para criar uma visão única de vários
                          mapeamentos
                          
                          
*note Counter: 10d0.      subclasse de dict para contar objetos *note hasheáveis: 610.
                          
                          
*note OrderedDict: 5db.   subclasse de dict que lembra a ordem que as entradas foram adicionadas
                          
                          
*note defaultdict: 11fc.  subclasse de dict que chama uma função fábrica para fornecer valores
                          não encontrados
                          
                          
*note UserDict: 1b0c.     invólucro em torno de objetos dicionário para facilitar fazer
                          subclasse de dict
                          
                          
*note UserList: 152c.     invólucro em torno de objetos lista para facilitar criação de
                          subclasse de lista
                          
                          
*note UserString: dfd.    invólucro em torno de objetos string para uma facilitar criação de
                          subclasse de string
                          

* Menu:

* Objetos ChainMap::
* Objetos Counter::
* Objetos deque::
* Objetos defaultdict::
* Função de fábrica para tuplas com campos nomeados namedtuple(): Função de fábrica para tuplas com campos nomeados namedtuple.
* Objetos OrderedDict::
* Objetos UserDict::
* Objetos UserList::
* Objetos UserString::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/collections/__init__.py


File: python.info,  Node: Objetos ChainMap,  Next: Objetos Counter,  Up: collections — Tipos de dados de contêineres

5.8.4.1 Objetos ‘ChainMap’
..........................

Adicionado na versão 3.3.

Uma classe *note ChainMap: c36. é fornecida para ligar rapidamente uma
série de mapeamentos de forma que possam ser tratados como um só.  O que
é frequentemente mais rápido do que criar um novo dicionário e executar
múltiplas chamadas de *note update(): 14ad.

A classe pode ser usada para simular escopos aninhados e é útil em
modelos.

 -- Classe: collections.ChainMap (*maps)

     *note ChainMap: c36. agrupa múltiplos dicts ou outros mapeamentos
     para criar uma única vista atualizável.  Se nenhum 'maps' for
     especificado, um dicionário vazio será fornecido para que uma nova
     cadeia tenha sempre pelo menos um mapeamento.

     Os mapeamentos subjacentes são armazenados em uma lista.  Essa
     lista é pública e pode ser acessada ou atualizada usando o atributo
     'maps'.  Não existe outro estado.

     Faz uma busca nos mapeamentos subjacentes sucessivamente até que
     uma chave seja encontrada.  Em contraste, escrita, atualizações e
     remoções operam apenas no primeiro mapeamento.

     Uma *note ChainMap: c36. incorpora os mapeamentos subjacentes por
     referência.  Então, se um dos mapeamentos subjacentes for
     atualizado, essas alterações serão refletidas na *note ChainMap:
     c36.

     Todos os métodos usuais do dicionário são suportados.  Além disso,
     existe um atributo 'maps', um método para criar novos subcontextos
     e uma propriedade para acessar todos, exceto o primeiro mapeamento:

      -- Atributo: maps

          Uma lista de mapeamentos atualizáveis pelo usuário.  A lista é
          ordenada desde o primeiro pesquisado até a última pesquisado.
          É o único estado armazenado e pode ser modificado para alterar
          quais mapeamentos são pesquisados.  A lista deve sempre conter
          pelo menos um mapeamento.

      -- Método: new_child (m=None, **kwargs)

          Retorna uma nova *note ChainMap: c36. contendo um novo mapa
          seguido de todos os mapas na instância atual.  Se ‘m’ for
          especificado, torna-se o novo mapa na frente da lista de
          mapeamentos; Se não especificado, é usado um dicionário vazio,
          de modo que chamar ‘d.new_child()’ é equivalente a:
          ‘ChainMap({}, *d.maps)’.  Se algum argumento nomeado for
          especificado, ele atualizará o mapa passado ou o novo
          dicionário vazio.  Esse método é usado para criar subcontextos
          que podem ser atualizados sem alterar valores em nenhum dos
          mapeamentos pai.

          Alterado na versão 3.4: O parâmetro opcional ‘m’ foi
          adicionado.

          Alterado na versão 3.10: Suporte a argumentos nomeados foi
          adicionado.

      -- Atributo: parents

          Propriedade que retorna um novo *note ChainMap: c36. contendo
          todos os mapas da instância atual, exceto o primeiro.  Isso é
          útil para pular o primeiro mapa da pesquisa.  Os casos de uso
          são semelhantes aos do argumento nomeado *note nonlocal: 12ea.
          usada em *note escopos aninhados: 20d0.  Os casos de uso
          também são paralelos aos da função embutida *note super():
          4db.  Uma referência a ‘d.parents’ é equivalente a:
          ‘ChainMap(*d.maps[1:])’.

     Observe, a ordem de iteração de um *note ChainMap: c36. é
     determinada pela varredura dos mapeamentos do último ao primeiro:

          >>> baseline = {'music': 'bach', 'art': 'rembrandt'}
          >>> adjustments = {'art': 'van gogh', 'opera': 'carmen'}
          >>> list(ChainMap(adjustments, baseline))
          ['music', 'art', 'opera']

     Isso dá a mesma ordem de uma série de chamadas de *note
     dict.update(): 14ad. começando com o último mapeamento:

          >>> combined = baseline.copy()
          >>> combined.update(adjustments)
          >>> list(combined)
          ['music', 'art', 'opera']

     Alterado na versão 3.9: Adicionado suporte para os operadores ‘|’ e
     ‘|=’, especificados na PEP 584(1).

Ver também
..........

   * A classe MultiContext(2) no pacote CodeTools(3) de Enthought tem
     opções para oferecer suporte à escrita em qualquer mapeamento na
     cadeia.

   * A classe Context(4) do Django para modelos é uma cadeia de
     mapeamentos somente leitura.  Ela também oferece o recurso de push
     e pop (inserir e retirar) contextos semelhantes ao método
     ‘new_child()’ e a propriedade ‘parents’.

   * A receita de Contextos Aninhados(5) possui opções para controlar se
     escritas e outras mutações se aplicam a apenas o primeiro
     mapeamento ou para qualquer mapeamento na cadeia.

   * Uma versão muito simplificada somente leitura do Chainmap(6).

* Menu:

* Exemplos e Receitas de ChainMap::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0584/

   (2) 
https://github.com/enthought/codetools/blob/4.0.0/codetools/contexts/multi_context.py

   (3) https://github.com/enthought/codetools

   (4) 
https://github.com/django/django/blob/main/django/template/context.py

   (5) 
https://code.activestate.com/recipes/577434-nested-contexts-a-chain-of-mapping-objects/

   (6) https://code.activestate.com/recipes/305268/


File: python.info,  Node: Exemplos e Receitas de ChainMap,  Up: Objetos ChainMap

5.8.4.2 Exemplos e Receitas de ‘ChainMap’
.........................................

Esta seção mostra várias abordagens para trabalhar com mapas encadeados.

Exemplo de simulação da cadeia de busca interna do Python:

     import builtins
     pylookup = ChainMap(locals(), globals(), vars(builtins))

Exemplo de como permitir que os argumentos de linha de comando
especificados pelo usuário tenham precedência sobre as variáveis de
ambiente que, por sua vez, têm precedência sobre os valores padrão:

     import os, argparse

     defaults = {'color': 'red', 'user': 'guest'}

     parser = argparse.ArgumentParser()
     parser.add_argument('-u', '--user')
     parser.add_argument('-c', '--color')
     namespace = parser.parse_args()
     command_line_args = {k: v for k, v in vars(namespace).items() if v is not None}

     combined = ChainMap(command_line_args, os.environ, defaults)
     print(combined['color'])
     print(combined['user'])

Padrões de exemplo para utilização da classe *note ChainMap: c36. para
simular contextos aninhados:

     c = ChainMap()        # Cria o contexto raiz
     d = c.new_child()     # Cria um contexto filho aninhado
     e = c.new_child()     # Filho de c, independente de d
     e.maps[0]             # Dicionário do contexto atual -- como locals() do Python
     e.maps[-1]            # Contexto raiz -- como globals() do Python
     e.parents             # Envolvendo cadeia de contexto -- como os nonlocals do Python

     d['x'] = 1            # Define valor no contexto atual
     d['x']                # Obtém a primeira chave na cadeia de contextos
     del d['x']            # Exclui do contexto atual
     list(d)               # Todos os valores aninhados
     k in d                # Verifica todos os valores aninhados
     len(d)                # Número de valores aninhados
     d.items()             # Todos os itens aninhados
     dict(d)               # Achata em um dicionário comum

A classe *note ChainMap: c36. só faz atualizações (escritas e remoções)
no primeiro mapeamento na cadeia, enquanto as pesquisas irão buscar em
toda a cadeia.  Contudo, se há o desejo de escritas e remoções
profundas, é fácil fazer uma subclasse que atualiza chaves encontradas
mais a fundo na cadeia:

     class DeepChainMap(ChainMap):
         'Variant of ChainMap that allows direct updates to inner scopes'

         def __setitem__(self, key, value):
             for mapping in self.maps:
                 if key in mapping:
                     mapping[key] = value
                     return
             self.maps[0][key] = value

         def __delitem__(self, key):
             for mapping in self.maps:
                 if key in mapping:
                     del mapping[key]
                     return
             raise KeyError(key)

     >>> d = DeepChainMap({'zebra': 'black'}, {'elephant': 'blue'}, {'lion': 'yellow'})
     >>> d['lion'] = 'orange'         # atualiza uma chave existente dois níveis abaixo
     >>> d['snake'] = 'red'           # novas chaves são adicionadas ao dict mais acima
     >>> del d['elephant']            # remove uma chave existente um nível abaixo
     >>> d                            # exibe o resultado
     DeepChainMap({'zebra': 'black', 'snake': 'red'}, {}, {'lion': 'orange'})


File: python.info,  Node: Objetos Counter,  Next: Objetos deque,  Prev: Objetos ChainMap,  Up: collections — Tipos de dados de contêineres

5.8.4.3 Objetos ‘Counter’
.........................

Uma ferramenta de contagem é fornecida para apoiar contas rápidas e
convenientes.  Por exemplo:

     >>> # Conta ocorrências de palavras em uma lista
     >>> cnt = Counter()
     >>> for word in ['red', 'blue', 'red', 'green', 'blue', 'blue']:
     ...     cnt[word] += 1
     ...
     >>> cnt
     Counter({'blue': 3, 'red': 2, 'green': 1})

     >>> # Encontra as dez palavras mais comuns em Hamlet
     >>> import re
     >>> words = re.findall(r'\w+', open('hamlet.txt').read().lower())
     >>> Counter(words).most_common(10)
     [('the', 1143), ('and', 966), ('to', 762), ('of', 669), ('i', 631),
      ('you', 554),  ('a', 546), ('my', 514), ('hamlet', 471), ('in', 451)]

 -- Classe: collections.Counter ([iterable-or-mapping])

     Um *note Counter: 10d0. é uma subclasse de *note dict: 256.
     subclass para contagem de objetos *note hasheáveis: 610.  É uma
     coleção na qual elementos são armazenados como chaves de dicionário
     e suas contagens são armazenadas como valores de dicionário.
     Contagens podem ser qualquer valor inteiro incluindo zero e
     contagens negativas.  A classe *note Counter: 10d0. é similar a
     sacos ou multiconjuntos em outras linguagens.

     Os elementos são contados a partir de um iterável 'iterable' ou
     inicializado a partir de um outro mapeamento 'mapping' (ou
     contador):

          >>> c = Counter()                           # a new, empty counter
          >>> c = Counter('gallahad')                 # a new counter from an iterable
          >>> c = Counter({'red': 4, 'blue': 2})      # a new counter from a mapping
          >>> c = Counter(cats=4, dogs=8)             # a new counter from keyword args

     Objetos Counter tem uma interface de dicionário, com a diferença
     que devolvem uma contagem zero para itens que não estão presentes
     em vez de levantar a exceção *note KeyError: 344.:

          >>> c = Counter(['eggs', 'ham'])
          >>> c['bacon']                              # count of a missing element is zero
          0

     Definir uma contagem como zero não remove um elemento do contador.
     Use ‘del’ para o remover completamente.

          >>> c['sausage'] = 0                        # counter entry with a zero count
          >>> del c['sausage']                        # del actually removes the entry

     Adicionado na versão 3.1.

     Alterado na versão 3.7: Como uma subclasse de *note dict: 256,
     *note Counter: 10d0. herda a capacidade de lembrar a ordem de
     inserção.  Operações matemáticas em objetos 'Counter' também
     preservam ordem.  Os resultados são ordenados de acordo com o
     momento que um elemento é encontrado pela primeira vez no operando
     da esquerda e, em seguida, pela ordem encontrada no operando da
     direita.

     Objetos Counter têm suporte a métodos adicionais além daqueles que
     já estão disponíveis para todos os dicionários:

      -- Método: elements ()

          Retorna um iterador sobre os elementos, repetindo cada um
          tantas vezes quanto sua contagem.  Os elementos são retornados
          na ordem em que foram encontrados pela primeira vez.  Se a
          contagem de um elemento é menor que um, ele será ignorado por
          *note elements(): 1348. .

               >>> c = Counter(a=4, b=2, c=0, d=-2)
               >>> sorted(c.elements())
               ['a', 'a', 'a', 'a', 'b', 'b']

      -- Método: most_common ([n])

          Retorna uma lista dos 'n' elementos mais comuns e suas
          contagens, do mais comum para o menos comum.  Se 'n' for
          omitido ou igual a ‘None’, *note most_common(): 1347. retorna
          'todos' os elementos no contador.  Elementos com contagens
          iguais são ordenados na ordem em que foram encontrados pela
          primeira vez:

               >>> Counter('abracadabra').most_common(3)
               [('a', 5), ('b', 2), ('r', 2)]

      -- Método: subtract ([iterable-or-mapping])

          Os elementos são subtraídos de um iterável 'iterable' ou de
          outro mapeamento 'mapping' (ou contador).  Funciona como *note
          dict.update(): 14ad, mas subtraindo contagens ao invés de
          substituí-las.  Tanto as entradas quanto as saídas podem ser
          zero ou negativas.

               >>> c = Counter(a=4, b=2, c=0, d=-2)
               >>> d = Counter(a=1, b=2, c=3, d=4)
               >>> c.subtract(d)
               >>> c
               Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})

          Adicionado na versão 3.2.

      -- Método: total ()

          Calcula a soma das contagens.

               >>> c = Counter(a=10, b=5, c=0)
               >>> c.total()
               15

          Adicionado na versão 3.10.

     Os métodos usuais de dicionário estão disponíveis para objetos
     *note Counter: 10d0, exceto por dois que funcionam de forma
     diferente para contadores.

      -- Método: fromkeys (iterable)

          Este método de classe não está implementado para objetos *note
          Counter: 10d0.

      -- Método: update ([iterable-or-mapping])

          Elementos são contados a partir de um iterável 'iterable' ou
          adicionados de outro mapeamento 'mapping' (ou contador).
          Funciona como *note dict.update(): 14ad, mas adiciona
          contagens em vez de substituí-las.  Além disso, é esperado que
          o 'iterable' seja uma sequência de elementos, e não uma
          sequência de pares ‘(key, value)’.

Os contadores oferecem suporte a operadores de comparação rica para
relacionamentos de igualdade, subconjunto e superconjunto: ‘==’, ‘!=’,
‘<’, ‘<=’, ‘>’, ‘>=’.  Todos esses testes tratam os elementos ausentes
como tendo contagens zero para que ‘Counter(a=1) == Counter(a=1, b=0)’
retorne verdadeiro.

Alterado na versão 3.10: Foram adicionadas operações de rica comparação.

Alterado na versão 3.10: Em testes de igualdade, os elementos ausentes
são tratados como tendo contagens zero.  Anteriormente, ‘Counter(a=3)’ e
‘Counter(a=3, b=0)’ eram considerados distintos.

Padrões comuns para trabalhar com objetos *note Counter: 10d0.:

     c.total()                       # total de todas as contagens
     c.clear()                       # redefine todas as contagens
     list(c)                         # lista elementos únicos
     set(c)                          # converte para um conjunto
     dict(c)                         # converte para um dicionário comum
     c.items()                       # acessa os pares (elem, cnt)
     Counter(dict(list_of_pairs))    # converte de uma lista de pares (elem, cnt)
     c.most_common()[:-n-1:-1]       # n últimos elementos comuns
     +c                              # remove zero e contagens negativas

Diversas operações matemáticas são fornecidas combinando objetos do tipo
*note Counter: 10d0. afim de se produzir multiconjuntos (Counters que
possuem contagens maiores que 0).  Adição e subtração combinam
contadores adicionando ou subtraindo o contagem do elemento
correspondente.  Intersecção ou união retorna o mínimo e máximo da
contagem correspondente.  Igualdade e inclusão compara as contagens
correspondentes.  Cada operação aceita entradas com contagens assinadas,
mas a saída vai excluir resultados com contagens de zero ou menos.

     >>> c = Counter(a=3, b=1)
     >>> d = Counter(a=1, b=2)
     >>> c + d                       # adiciona dois contadores juntos:  c[x] + d[x]
     Counter({'a': 4, 'b': 3})
     >>> c - d                       # subtrai (mantendo apenas contagens positivas)
     Counter({'a': 2})
     >>> c & d                       # interseção:  min(c[x], d[x])
     Counter({'a': 1, 'b': 1})
     >>> c | d                       # união:  max(c[x], d[x])
     Counter({'a': 3, 'b': 2})
     >>> c == d                      # igualdade:  c[x] == d[x]
     False
     >>> c <= d                      # inclusão:  c[x] <= d[x]
     False

A adição e subtração unárias são atalhos para adicionar um contador
vazio ou subtrair de um contador vazio.

     >>> c = Counter(a=2, b=-4)
     >>> +c
     Counter({'a': 2})
     >>> -c
     Counter({'b': 4})

Adicionado na versão 3.3: Adicionado suporte para operador unário mais,
unário menos e operações 'in-place' em multiconjuntos.

     Nota: Os contadores foram projetados principalmente para funcionar
     com números inteiros positivos para representar contagens
     contínuas; no entanto, foi tomado cuidado para não impedir
     desnecessariamente os casos de uso que precisassem de outros tipos
     ou valores negativos.  Para ajudar nesses casos de uso, esta seção
     documenta o intervalo mínimo e as restrições de tipo.

        * A própria classe *note Counter: 10d0. é uma subclasse de
          dicionário sem restrições em suas chaves e valores.  Os
          valores pretendem ser números que representam contagens, mas
          você 'pode' armazenar qualquer coisa no campo de valor.

        * O método *note most_common(): 1347. requer apenas que os
          valores sejam ordenáveis.

        * Para operações in-place, como ‘c[key] += 1’, o tipo de valor
          precisa oferecer suporte a apenas adição e subtração.
          Portanto, frações, números de ponto flutuante e decimais
          funcionariam e os valores negativos são suportados.  O mesmo
          também é verdadeiro para *note update(): 15a4. e *note
          subtract(): 121e. que permitem valores negativos e zero para
          entradas e saídas.

        * Os métodos de multiconjuntos são projetados apenas para casos
          de uso com valores positivos.  As entradas podem ser negativas
          ou zero, mas apenas saídas com valores positivos são criadas.
          Não há restrições de tipo, mas o tipo de valor precisa
          suportar adição, subtração e comparação.

        * O método *note elements(): 1348. requer contagens de inteiros.
          Ele ignora contagens zero e negativas.

Ver também
..........

   * Classe Bag(1) do Smalltalk.

   * Entrada da Wikipédia para Multiconjuntos(2).

   * Tutorial com exemplos de multiconjuntos no C++(3).

   * Para operações matemáticas em multiconjuntos e seus casos de uso,
     consulte 'Knuth, Donald.  The Art of Computer Programming Volume
     II, Seção 4.6.3, Exercício 19'.

   * Para enumerar todos os multiconjuntos distintos de um determinado
     tamanho em um determinado conjunto de elementos, consulte *note
     itertools.combinations_with_replacement(): 12c3.:

          map(Counter, combinations_with_replacement('ABC', 2)) # --> AA AB AC BB BC CC

   ---------- Footnotes ----------

   (1) 
https://www.gnu.org/software/smalltalk/manual-base/html_node/Bag.html

   (2) https://pt.wikipedia.org/wiki/Multiconjunto

   (3) 
http://www.java2s.com/Tutorial/Cpp/0380__set-multiset/Catalog0380__set-multiset.htm


File: python.info,  Node: Objetos deque,  Next: Objetos defaultdict,  Prev: Objetos Counter,  Up: collections — Tipos de dados de contêineres

5.8.4.4 Objetos ‘deque’
.......................

 -- Classe: collections.deque ([iterable[, maxlen]])

     Retorna um novo objeto deque inicializado da esquerda para a
     direita (usando *note append(): 26ad.) com dados do iterável
     'iterable'.  Se 'iterable' não for especificado, o novo deque
     estará vazio.

     Deques são uma generalização de pilhas e filas (o nome é
     pronunciado “deck” e é abreviação de “double-ended queue”, e
     conhecida como “fila duplamente terminada” em português).  O Deques
     oferece suporte para acréscimos e retiradas seguros para thread e
     eficientes em uso memória de ambos os lados do deque com
     aproximadamente o mesmo desempenho 'O'(1) em qualquer direção.

     Embora os objetos *note list: 611. ofereçam suporte a operações
     semelhantes, eles são otimizados para operações rápidas de
     comprimento fixo e sujeitam em custos de movimentação de memória
     'O'('n') para as operações ‘pop(0)’ e ‘insert(0, v)’ que alteram o
     tamanho e a posição da representação de dados subjacente.

     Se 'maxlen' não for especificado ou for ‘None’, deques podem
     crescer para um comprimento arbitrário.  Caso contrário, o deque é
     limitado ao comprimento máximo especificado.  Quando um deque de
     comprimento limitado está cheio, quando novos itens são
     adicionados, um número correspondente de itens é descartado da
     extremidade oposta.  Deques de comprimento limitado fornecem
     funcionalidade semelhante ao filtro ‘tail’ no Unix.  Eles também
     são úteis para rastrear transações e outras pools de dados onde
     apenas a atividade mais recente é de interesse.

     Os objetos Deque oferecem suporte aos seguintes métodos:

      -- Método: append (x)

          Adiciona 'x' ao lado direito do deque.

      -- Método: appendleft (x)

          Adiciona 'x' ao lado esquerdo do deque

      -- Método: clear ()

          Remove todos os elementos do deque deixando-o com comprimento
          0.

      -- Método: copy ()

          Cria uma cópia rasa do deque.

          Adicionado na versão 3.5.

      -- Método: count (x)

          Conta o número de elementos deque igual a 'x'.

          Adicionado na versão 3.2.

      -- Método: extend (iterable)

          Estende o lado direito do deque anexando elementos do
          argumento iterável.

      -- Método: extendleft (iterable)

          Estende o lado esquerdo do deque anexando elementos de
          'iterable'.  Observe que a série de acréscimos à esquerda
          resulta na reversão da ordem dos elementos no argumento
          iterável.

      -- Método: index (x[, start[, stop]])

          Retorna a posição de 'x' no deque (no ou após o índice 'start'
          e antes do índice 'stop').  Retorna a primeira correspondência
          ou levanta *note ValueError: 202. se não for encontrado.

          Adicionado na versão 3.5.

      -- Método: insert (i, x)

          Insere 'x' no deque na posição 'i'.

          Se a inserção fizer com que um deque limitado cresça além de
          'maxlen', uma *note IndexError: 157e. é levantada.

          Adicionado na versão 3.5.

      -- Método: pop ()

          Remove e devolve um elemento do lado direito do deque.  Se
          nenhum elemento estiver presente, levanta um *note IndexError:
          157e.

      -- Método: popleft ()

          Remove e devolve um elemento do lado esquerdo do deque.  Se
          nenhum elemento estiver presente, levanta um *note IndexError:
          157e.

      -- Método: remove (value)

          Remove a primeira ocorrência de 'value'.  Se não for
          encontrado, levanta um *note ValueError: 202.

      -- Método: reverse ()

          Inverte os elementos do deque no local e, em seguida, retorna
          ‘None’.

          Adicionado na versão 3.2.

      -- Método: rotate (n=1)

          Gira o deque 'n' passos para a direita.  Se 'n' for negativo,
          gire para a esquerda.

          Quando o deque não está vazio, girar um passo para a direita é
          equivalente a ‘d.appendleft(d.pop())’ e girar um passo para a
          esquerda é equivalente a ‘d.append(d.popleft())’.

     Os objetos Deque também fornecem um atributo somente leitura:

      -- Atributo: maxlen

          Tamanho máximo de um deque ou ‘None’ se ilimitado.

          Adicionado na versão 3.1.

Além do acima, deques oferece suporte a iteração, serialização com
pickle, ‘len(d)’, ‘reversed(d)’, ‘copy.copy(d)’, ‘copy.deepcopy(d)’ e
teste de associação com o operador *note in: 2f4. e referências
subscritas, como ‘d[0]’ para acessar o primeiro elemento.  O acesso
indexado é 'O'(1) em ambas as extremidades, mas diminui para 'O'('n') no
meio.  Para acesso aleatório rápido, use listas.

A partir da versão 3.5, deques oferecem suporte a
‘__add__()’,''__mul__()'' e ‘__imul__()’.

Exemplo:

     >>> from collections import deque
     >>> d = deque('ghi')                 # torna um novo deque com três itens
     >>> for elem in d:                   # itera os elementos do deque
     ...     print(elem.upper())
     G
     H
     I

     >>> d.append('j')                    # adiciona uma nova entrada ao lado direito
     >>> d.appendleft('f')                # adiciona uma nova entrada ao lado esquerdo
     >>> d                                # mostra a representação do deque
     deque(['f', 'g', 'h', 'i', 'j'])

     >>> d.pop()                          # retorna e remove o item mais à direita
     'j'
     >>> d.popleft()                      # retorna e remove o item mais à esquerda
     'f'
     >>> list(d)                          # lista o conteúdo do deque
     ['g', 'h', 'i']
     >>> d[0]                             # exibe o item mais à esquerda
     'g'
     >>> d[-1]                            # exibe o item mais à direita
     'i'

     >>> list(reversed(d))                # lista o conteúdo de um deque ao inverso
     ['i', 'h', 'g']
     >>> 'h' in d                         # pesquisa no deque
     True
     >>> d.extend('jkl')                  # adiciona vários elementos de uma só vez
     >>> d
     deque(['g', 'h', 'i', 'j', 'k', 'l'])
     >>> d.rotate(1)                      # rotação para direita
     >>> d
     deque(['l', 'g', 'h', 'i', 'j', 'k'])
     >>> d.rotate(-1)                     # rotação para esquerda
     >>> d
     deque(['g', 'h', 'i', 'j', 'k', 'l'])

     >>> deque(reversed(d))               # cria um novo deque na ordem inversa
     deque(['l', 'k', 'j', 'i', 'h', 'g'])
     >>> d.clear()                        # esvazia o deque
     >>> d.pop()                          # não é possível retirar um item de um deque vazio
     Traceback (most recent call last):
         File "<pyshell#6>", line 1, in -toplevel-
             d.pop()
     IndexError: pop from an empty deque

     >>> d.extendleft('abc')              # extendleft() inverte a ordem da entrada
     >>> d
     deque(['c', 'b', 'a'])

* Menu:

* Receitas de deque::


File: python.info,  Node: Receitas de deque,  Up: Objetos deque

5.8.4.5 Receitas de ‘deque’
...........................

Esta seção mostra várias abordagens para trabalhar com deques.

Deques de comprimento limitado fornecem funcionalidade semelhante ao
filtro ‘tail’ em Unix:

     def tail(filename, n=10):
         'Return the last n lines of a file'
         with open(filename) as f:
             return deque(f, n)

Outra abordagem para usar deques é manter uma sequência de elementos
adicionados recentemente, acrescentando à direita e clicando à esquerda:

     def moving_average(iterable, n=3):
         # moving_average([40, 30, 50, 46, 39, 44]) --> 40.0 42.0 45.0 43.0
         # https://en.wikipedia.org/wiki/Moving_average
         it = iter(iterable)
         d = deque(itertools.islice(it, n-1))
         d.appendleft(0)
         s = sum(d)
         for elem in it:
             s += elem - d.popleft()
             d.append(elem)
             yield s / n

Um escalonador round robin(1) pode ser implementado com iteradores de
entrada armazenados em um *note deque: 5dc.  Os valores são produzidos a
partir do iterador ativo na posição zero.  Se esse iterador estiver
esgotado, ele pode ser removido com *note popleft(): 26b3.; caso
contrário, ele pode voltar ao fim com o método *note rotate(): 1a1c.:

     def roundrobin(*iterables):
         "roundrobin('ABC', 'D', 'EF') --> A D E B F C"
         iterators = deque(map(iter, iterables))
         while iterators:
             try:
                 while True:
                     yield next(iterators[0])
                     iterators.rotate(-1)
             except StopIteration:
                 # Remove um iterador esgotado.
                 iterators.popleft()

O método *note rotate(): 1a1c. fornece uma maneira de implementar o
fatiamento e exclusão *note deque: 5dc.  Por exemplo, uma implementação
Python pura de ‘del d[n]’ depende do método ‘rotate()’ para posicionar
os elementos a serem retirados:

     def delete_nth(d, n):
         d.rotate(-n)
         d.popleft()
         d.rotate(n)

Para implementar o fatiamento de *note deque: 5dc, use uma abordagem
semelhante aplicando *note rotate(): 1a1c. para trazer um elemento alvo
para o lado esquerdo do deque.  Remova as entradas antigas com *note
popleft(): 26b3, adicione novas entradas com *note extend(): 26b0, e,
então, inverta a rotação.  Com pequenas variações dessa abordagem, é
fácil implementar manipulações de pilha de estilo Forth, como ‘dup’,
‘drop’, ‘swap’, ‘over’, ‘pick’, ‘rot’ e ‘roll’.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Round-robin_scheduling


File: python.info,  Node: Objetos defaultdict,  Next: Função de fábrica para tuplas com campos nomeados namedtuple,  Prev: Objetos deque,  Up: collections — Tipos de dados de contêineres

5.8.4.6 Objetos ‘defaultdict’
.............................

 -- Classe: collections.defaultdict (default_factory=None, /[, ...])

     Retorna um novo objeto dicionário ou similar.  *note defaultdict:
     11fc. é uma subclasse da classe embutida *note dict: 256.  Ele
     substitui um método e adiciona uma variável de instância gravável.
     A funcionalidade restante é a mesma da classe *note dict: 256. e
     não está documentada aqui.

     O primeiro argumento fornece o valor inicial para o atributo *note
     default_factory: 26b6.; o padrão é ‘None’.  Todos os argumentos
     restantes são tratados da mesma forma como se fossem passados para
     o construtor *note dict: 256, incluindo argumentos nomeados.

     Os objetos *note defaultdict: 11fc. oferecem suporta ao seguinte
     método além das operações padrão *note dict: 256.:

      -- Método: __missing__ (key)

          Se o atributo *note default_factory: 26b6. for ‘None’, isso
          levanta uma exceção *note KeyError: 344. com 'key' como
          argumento.

          Se *note default_factory: 26b6. não for ‘None’, ele é chamado
          sem argumentos para fornecer um valor padrão para a chave
          'key' fornecida, este valor é inserido no dicionário para
          'key' e retornado.

          Se chamar *note default_factory: 26b6. levanta uma exceção,
          esta exceção é propagada inalterada.

          Este método é chamado pelo método *note __getitem__(): 283. da
          classe *note dict: 256. quando a chave solicitada não é
          encontrada; tudo o que ele retorna ou levanta é então
          retornado ou levantado por *note __getitem__(): 283.

          Observe que *note __missing__(): 26b7. 'não' é chamado para
          nenhuma operação além de *note __getitem__(): 283.  Isso
          significa que *note get(): 1dd2. irá, como dicionários
          normais, retornar ‘None’ como padrão ao invés de usar *note
          default_factory: 26b6.

     Objetos *note defaultdict: 11fc. permitem a seguinte variável de
     instância:

      -- Atributo: default_factory

          Este atributo é usado pelo método *note __missing__(): 26b7.;
          ele é inicializado a partir do primeiro argumento para o
          construtor, se presente, ou para ‘None’, se ausente.

     Alterado na versão 3.9: Adicionado operadores de mesclagem (‘|’) e
     de atualização (‘|=’), especificados na PEP 584(1).

* Menu:

* Exemplos de defaultdict::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0584/


File: python.info,  Node: Exemplos de defaultdict,  Up: Objetos defaultdict

5.8.4.7 Exemplos de ‘defaultdict’
.................................

Usando *note list: 611. como *note default_factory: 26b6, se for fácil
agrupar a sequencia dos pares chave-valores num dicionário de listas

     >>> s = [('yellow', 1), ('blue', 2), ('yellow', 3), ('blue', 4), ('red', 1)]
     >>> d = defaultdict(list)
     >>> for k, v in s:
     ...     d[k].append(v)
     ...
     >>> sorted(d.items())
     [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

Quando cada chave é encontrada pela primeira vez, ela ainda não está no
mapeamento; então uma entrada é criada automaticamente usando a função
*note default_factory: 26b6. que retorna uma *note list: 611. vazia.  A
operação *note list.append(): 6cd. então anexa o valor à nova lista.
Quando as chaves são encontradas novamente, a pesquisa prossegue
normalmente (retornando a lista daquela chave) e a operação *note
list.append(): 6cd. adiciona outro valor à lista.  Esta técnica é mais
simples e rápida que uma técnica equivalente usando *note
dict.setdefault(): 10b2.:

     >>> d = {}
     >>> for k, v in s:
     ...     d.setdefault(k, []).append(v)
     ...
     >>> sorted(d.items())
     [('blue', [2, 4]), ('red', [1]), ('yellow', [1, 3])]

Definir *note default_factory: 26b6. como *note int: 257. torna *note
defaultdict: 11fc. útil para contagem (como um multiconjunto em outras
linguagens):

     >>> s = 'mississippi'
     >>> d = defaultdict(int)
     >>> for k in s:
     ...     d[k] += 1
     ...
     >>> sorted(d.items())
     [('i', 4), ('m', 1), ('p', 2), ('s', 4)]

Quando uma letra é encontrada pela primeira vez, ela está ausente no
mapeamento, então a função *note default_factory: 26b6. chama *note
int(): 257. para fornecer uma contagem padrão de zero.  A operação de
incremento então cria a contagem para cada letra.

A função *note int(): 257. que sempre retorna zero é apenas um caso
especial de funções constantes.  Uma maneira mais rápida e flexível de
criar funções constantes é usar uma função lambda que pode fornecer
qualquer valor constante (não apenas zero):

     >>> def constant_factory(value):
     ...     return lambda: value
     ...
     >>> d = defaultdict(constant_factory('<missing>'))
     >>> d.update(name='John', action='ran')
     >>> '%(name)s %(action)s to %(object)s' % d
     'John ran to <missing>'

Definir *note default_factory: 26b6. como *note set: 5d9. torna *note
defaultdict: 11fc. útil para construir um dicionário de conjuntos:

     >>> s = [('red', 1), ('blue', 2), ('red', 3), ('blue', 4), ('red', 1), ('blue', 4)]
     >>> d = defaultdict(set)
     >>> for k, v in s:
     ...     d[k].add(v)
     ...
     >>> sorted(d.items())
     [('blue', {2, 4}), ('red', {1, 3})]


File: python.info,  Node: Função de fábrica para tuplas com campos nomeados namedtuple,  Next: Objetos OrderedDict,  Prev: Objetos defaultdict,  Up: collections — Tipos de dados de contêineres

5.8.4.8 Função de fábrica para tuplas com campos nomeados ‘namedtuple()’
........................................................................

Tuplas nomeadas determinam o significado de cada posição numa tupla e
permitem um código mais legível e autodocumentado.  Podem ser usadas
sempre que tuplas regulares forem utilizadas, e adicionam a
possibilidade de acessar campos pelo nome ao invés da posição do índice.

 -- Função: collections.namedtuple (typename, field_names, *,
          rename=False, defaults=None, module=None)

     Retorna uma nova subclasse de tupla chamada 'typename'.  A nova
     subclasse é usada para criar objetos tupla ou similares que possuem
     campos acessíveis por pesquisa de atributos, além de serem
     indexáveis e iteráveis.  As instâncias da subclasse também possuem
     uma docstring útil (com 'typename' e 'field_names') e um método
     útil *note __repr__(): 61c. que lista o conteúdo da tupla em um
     formato ‘nome=valor’.

     'field_names' são uma sequência de strings como ‘['x', 'y']’.
     Alternativamente, 'field_names' pode ser uma única string com cada
     nome de campo separado por espaços em branco e/ou vírgulas como,
     por exemplo, ‘'x y'’ ou ‘'x, y'’.

     Qualquer identificador Python válido pode ser usado para um nome de
     campo, exceto para nomes que começam com um sublinhado.
     Identificadores válidos consistem em letras, dígitos e sublinhados,
     mas não começam com um dígito ou sublinhado e não podem ser uma
     *note keyword: 84. como 'class', 'for', 'return', 'global', 'pass'
     ou 'raise'.

     Se 'rename' for verdadeiro, nomes de campos inválidos serão
     automaticamente substituídos por nomes posicionais.  Por exemplo,
     ‘['abc', 'def', 'ghi', 'abc']’ é convertido para ‘['abc', '_1',
     'ghi', '_3']’, eliminando a palavra reservada ‘def’ e o nome de
     campo duplicado ‘abc’.

     'defaults' pode ser ‘None’ ou um *note iterável: 1268. de valores
     padrão.  Como os campos com valor padrão devem vir depois de
     qualquer campo sem padrão, os 'padrões' são aplicados aos
     parâmetros mais à direita.  Por exemplo, se os nomes dos campos
     forem ‘['x', 'y', 'z']’ e os padrões forem ‘(1, 2)’, então ‘x’ será
     um argumento obrigatório, ‘y’ será o padrão ‘1’, e ‘z’ será o
     padrão ‘2’.

     Se 'module' for definido, o atributo *note __module__: 374. da
     tupla nomeada será definido com esse valor.

     As instâncias de tuplas nomeadas não possuem dicionários por
     instância, portanto são leves e não requerem mais memória do que as
     tuplas normais.

     Para prover suporte para a serialização com pickle, a classe de
     tupla nomeada deve ser atribuída a uma variável que corresponda a
     'typename'.

     Alterado na versão 3.1: Adicionado suporte a 'rename'.

     Alterado na versão 3.6: Os parâmetros 'verbose' e 'rename'
     tornaram-se *note argumentos somente-nomeados: 2a5.

     Alterado na versão 3.6: Adicionado o parâmetro 'module'.

     Alterado na versão 3.7: Removido o parâmetro 'verbose' e o atributo
     ‘_source’.

     Alterado na versão 3.7: Adicionado o parâmetro 'defaults' e o
     atributo *note _field_defaults: 26ba.

     >>> # Exemplo básico
     >>> Point = namedtuple('Point', ['x', 'y'])
     >>> p = Point(11, y=22)     # instancia com argumentos nomeados ou posicionais
     >>> p[0] + p[1]             # indexável como a tupla plana (11, 22)
     33
     >>> x, y = p                # desempacota como uma tupla normal
     >>> x, y
     (11, 22)
     >>> p.x + p.y               # campos também acessíveis pelo nome
     33
     >>> p                       # __repr__ legível com o estilo nome=valor
     Point(x=11, y=22)

Tuplas nomeadas são especialmente úteis para atribuir nomes de campos a
tuplas de resultados retornadas pelos módulos *note csv: 29. ou *note
sqlite3: cf.:

     EmployeeRecord = namedtuple('EmployeeRecord', 'name, age, title, department, paygrade')

     import csv
     for emp in map(EmployeeRecord._make, csv.reader(open("employees.csv", "rb"))):
         print(emp.name, emp.title)

     import sqlite3
     conn = sqlite3.connect('/companydata')
     cursor = conn.cursor()
     cursor.execute('SELECT name, age, title, department, paygrade FROM employees')
     for emp in map(EmployeeRecord._make, cursor.fetchall()):
         print(emp.name, emp.title)

Além dos métodos herdados das tuplas, as tuplas nomeadas oferecem
suporte a três métodos adicionais e dois atributos.  Para evitar
conflitos com nomes de campos, os nomes de métodos e atributos começam
com um sublinhado.

 -- Método: classmethod somenamedtuple._make (iterable)

     Método de classe que cria uma nova instância a partir de uma
     sequência existente ou iterável.

          >>> t = [11, 22]
          >>> Point._make(t)
          Point(x=11, y=22)

 -- Método: somenamedtuple._asdict ()

     Retorna um novo *note dict: 256. que mapeia nomes de campo para
     seus respectivos valores:

          >>> p = Point(x=11, y=22)
          >>> p._asdict()
          {'x': 11, 'y': 22}

     Alterado na versão 3.1: Retorna um *note OrderedDict: 5db. em vez
     de um *note dict: 256. normal.

     Alterado na versão 3.8: Retorna um *note dict: 256. regular em vez
     de um *note OrderedDict: 5db.  A partir do Python 3.7, é garantido
     que os dicionários regulares sejam ordenados.  Se os recursos
     extras de *note OrderedDict: 5db. forem necessários, a correção
     sugerida é converter o resultado para o tipo desejado:
     ‘OrderedDict(nt._asdict())’.

 -- Método: somenamedtuple._replace (**kwargs)

     Retorna uma nova instância da tupla nomeada substituindo os campos
     especificados por novos valores:

          >>> p = Point(x=11, y=22)
          >>> p._replace(x=33)
          Point(x=33, y=22)

          >>> for partnum, record in inventory.items():
          ...     inventory[partnum] = record._replace(price=newprices[partnum], timestamp=time.now())

     Tuplas nomeadas também são suportados pela função genérica *note
     copy.replace(): 151.

     Alterado na versão 3.13: Levanta *note TypeError: 2c3. em vez de
     *note ValueError: 202. para argumentos nomeados inválidos.

 -- Atributo: somenamedtuple._fields

     Tupla de strings listando os nomes dos campos.  Útil para
     introspecção e para criar novos tipos de tuplas nomeadas a partir
     de tuplas nomeadas existentes.

          >>> p._fields            # exibe os nomes de campos
          ('x', 'y')

          >>> Color = namedtuple('Color', 'red green blue')
          >>> Pixel = namedtuple('Pixel', Point._fields + Color._fields)
          >>> Pixel(11, 22, 128, 255, 0)
          Pixel(x=11, y=22, red=128, green=255, blue=0)

 -- Atributo: somenamedtuple._field_defaults

     Dicionário mapeando nomes de campos para valores padrão.

          >>> Account = namedtuple('Account', ['type', 'balance'], defaults=[0])
          >>> Account._field_defaults
          {'balance': 0}
          >>> Account('premium')
          Account(type='premium', balance=0)

Para recuperar um campo cujo nome está armazenado em uma string, use a
função *note getattr(): bea.:

     >>> getattr(p, 'x')
     11

Para converter um dicionário em uma tupla nomeada, use o operador
estrela dupla (conforme descrito em *note Desempacotando listas de
argumentos: 1daf.):

     >>> d = {'x': 11, 'y': 22}
     >>> Point(**d)
     Point(x=11, y=22)

Como uma tupla nomeada é uma classe regular do Python, é fácil adicionar
ou alterar funcionalidades com uma subclasse.  Veja como adicionar um
campo calculado e um formato de impressão de largura fixa:

     >>> class Point(namedtuple('Point', ['x', 'y'])):
     ...     __slots__ = ()
     ...     @property
     ...     def hypot(self):
     ...         return (self.x ** 2 + self.y ** 2) ** 0.5
     ...     def __str__(self):
     ...         return 'Point: x=%6.3f  y=%6.3f  hypot=%6.3f' % (self.x, self.y, self.hypot)

     >>> for p in Point(3, 4), Point(14, 5/7):
     ...     print(p)
     Point: x= 3.000  y= 4.000  hypot= 5.000
     Point: x=14.000  y= 0.714  hypot=14.018

A subclasse mostrada acima define ‘__slots__’ como uma tupla vazia.
Isso ajuda a manter baixos os requisitos de memória, evitando a criação
de dicionários de instância.

A criação de subclasse não é útil para adicionar novos campos
armazenados.  Em vez disso, simplesmente crie um novo tipo de tupla
nomeado a partir do atributo *note _fields: 26bd.:

     >>> Point3D = namedtuple('Point3D', Point._fields + ('z',))

Docstrings podem ser personalizados fazendo atribuições diretas aos
campos ‘__doc__’:

     >>> Book = namedtuple('Book', ['id', 'title', 'authors'])
     >>> Book.__doc__ += ': Hardcover book in active collection'
     >>> Book.id.__doc__ = '13-digit ISBN'
     >>> Book.title.__doc__ = 'Title of first printing'
     >>> Book.authors.__doc__ = 'List of authors sorted by last name'

Alterado na versão 3.5: Os docstrings de propriedade tornaram-se
graváveis.

Ver também
..........

   * Veja *note typing.NamedTuple: 2b0. para uma maneira de adicionar
     dicas de tipo para tuplas nomeadas.  Ele também fornece uma notação
     elegante usando a palavra reservada *note class: 131a.:

          class Component(NamedTuple):
              part_number: int
              weight: float
              description: Optional[str] = None

   * Veja *note types.SimpleNamespace(): 1d1. para um espaço de nomes
     mutável baseado em um dicionário subjacente em vez de uma tupla.

   * O módulo *note dataclasses: 2f. fornece um decorador e funções para
     adicionar automaticamente métodos especiais gerados a classes
     definidas pelo usuário.


File: python.info,  Node: Objetos OrderedDict,  Next: Objetos UserDict,  Prev: Função de fábrica para tuplas com campos nomeados namedtuple,  Up: collections — Tipos de dados de contêineres

5.8.4.9 Objetos ‘OrderedDict’
.............................

Os dicionários ordenados são como os dicionários normais, mas possuem
alguns recursos extras relacionados às operações de pedido.  Eles se
tornaram menos importantes agora que a classe embutida *note dict: 256.
ganhou a capacidade de lembrar a ordem de inserção (esse novo
comportamento foi garantido no Python 3.7).

Algumas diferenças de *note dict: 256. ainda permanecem:

   * O *note dict: 256. regular foi projetado para ser muito bom em
     operações de mapeamento.  O rastreamento do pedido de inserção era
     secundário.

   * O *note OrderedDict: 5db. foi projetado para ser bom em operações
     de reordenação.  A eficiência de espaço, a velocidade de iteração e
     o desempenho das operações de atualização eram secundários.

   * O algoritmo *note OrderedDict: 5db. pode lidar com operações de
     reordenação frequentes melhor do que *note dict: 256.  Conforme
     mostrado nas receitas abaixo, isso o torna adequado para
     implementar vários tipos de caches LRU.

   * A operação de igualdade para *note OrderedDict: 5db. verifica a
     ordem correspondente.

     Um *note dict: 256. regular pode emular o teste de igualdade
     sensível à ordem com ‘p == q and all(k1 == k2 for k1, k2 in zip(p,
     q))’.

   * O método *note popitem(): 1331. de *note OrderedDict: 5db. tem uma
     assinatura diferente.  Ele aceita um argumento opcional para
     especificar qual item será exibido.

     Um *note dict: 256. normal pode emular o ‘od.popitem(last=True)’ do
     OrderedDict com ‘d.popitem()’ que é garantido para exibir o
     (último) item mais à direita.

     Um *note dict: 256. normal pode emular o ‘od.popitem(last=False)’
     do OrderedDict com ‘(k := next(iter(d)), d.pop(k))’ que retornará e
     remova o item mais à esquerda (primeiro), se existir.

   * *note OrderedDict: 5db. possui um método *note move_to_end(): 121f.
     para reposicionar eficientemente um elemento em um endpoint.

     Um *note dict: 256. normal pode emular o ‘od.move_to_end(k,
     last=True)’ do OrderedDict com ‘d[k] = d.pop(k)’ que moverá a chave
     e seu valor associado para a posição mais à direita (última).

     Um *note dict: 256. regular não tem um equivalente eficiente para o
     ‘od.move_to_end(k, last=False)’ do OrderedDict, que move a chave e
     seu valor associado para a posição mais à esquerda (primeira).

   * Até o Python 3.8, *note dict: 256. não tinha um método *note
     __reversed__(): ca7.

 -- Classe: collections.OrderedDict ([items])

     Retorna uma instância de uma subclasse *note dict: 256. que possui
     métodos especializados para reorganizar a ordem do dicionário.

     Adicionado na versão 3.1.

      -- Método: popitem (last=True)

          O método *note popitem(): 1331. para dicionários ordenados
          retorna e remove um par (chave, valor).  Os pares são
          retornados na ordem LIFO se 'last' for verdadeiro ou na ordem
          FIFO (primeiro a entrar, primeiro a sair) se for falso.

      -- Método: move_to_end (key, last=True)

          Move uma chave 'key' existente para qualquer extremidade de um
          dicionário ordenado.  O item é movido para a extremidade
          direita se 'last' for verdadeiro (o padrão) ou para o início
          se 'último' for falso.  Levanta *note KeyError: 344. se a
          'key' não existir:

               >>> d = OrderedDict.fromkeys('abcde')
               >>> d.move_to_end('b')
               >>> ''.join(d)
               'acdeb'
               >>> d.move_to_end('b', last=False)
               >>> ''.join(d)
               'bacde'

          Adicionado na versão 3.2.

Além dos métodos usuais de mapeamento, dicionários ordenados também
oferecem suporte a iteração reversa usando a função *note reversed():
869.  Testes de igualdade entre objetos *note OrderedDict: 5db. são
sensíveis à ordem e são aproximadamente equivalentes a
‘list(od1.items())==list(od2.items())’.

Testes de igualdade entre objetos *note OrderedDict: 5db. e outros
objetos *note Mapping: 8d0. não diferenciam a ordem como dicionários
regulares.  Isso permite que objetos *note OrderedDict: 5db. sejam
substituídos em qualquer lugar que um dicionário regular seja usado.

Alterado na versão 3.5: Os itens, chaves e valores de *note visões:
26bf. de *note OrderedDict: 5db. agora oferecem suporte a iteração
reversa usando *note reversed(): 869.

Alterado na versão 3.6: Com a aceitação da PEP 468(1), a ordem é mantida
para argumentos nomeados passados para o construtor *note OrderedDict:
5db. e seu método *note update(): 14ad.

Alterado na versão 3.9: Adicionado operadores de mesclagem (‘|’) e de
atualização (‘|=’), especificados na PEP 584(2).

* Menu:

* Exemplos e receitas de OrderedDict::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0468/

   (2) https://peps.python.org/pep-0584/


File: python.info,  Node: Exemplos e receitas de OrderedDict,  Up: Objetos OrderedDict

5.8.4.10 Exemplos e receitas de ‘OrderedDict’
.............................................

É simples criar uma variante de dicionário ordenado que lembre a ordem
em que as chaves foram inseridas pela 'última' vez.  Se uma nova entrada
substituir uma entrada existente, a posição de inserção original será
alterada e movida para o final:

     class LastUpdatedOrderedDict(OrderedDict):
         'Store items in the order the keys were last added'

         def __setitem__(self, key, value):
             super().__setitem__(key, value)
             self.move_to_end(key)

Um *note OrderedDict: 5db. também seria útil para implementar variantes
de *note functools.lru_cache(): 9f7.:

     from collections import OrderedDict
     from time import time

     class TimeBoundedLRU:
         "LRU Cache that invalidates and refreshes old entries."

         def __init__(self, func, maxsize=128, maxage=30):
             self.cache = OrderedDict()      # { args : (timestamp, result)}
             self.func = func
             self.maxsize = maxsize
             self.maxage = maxage

         def __call__(self, *args):
             if args in self.cache:
                 self.cache.move_to_end(args)
                 timestamp, result = self.cache[args]
                 if time() - timestamp <= self.maxage:
                     return result
             result = self.func(*args)
             self.cache[args] = time(), result
             if len(self.cache) > self.maxsize:
                 self.cache.popitem(last=False)
             return result

     class MultiHitLRUCache:
         """ LRU cache that defers caching a result until
             it has been requested multiple times.

             To avoid flushing the LRU cache with one-time requests,
             we don't cache until a request has been made more than once.

         """

         def __init__(self, func, maxsize=128, maxrequests=4096, cache_after=1):
             self.requests = OrderedDict()   # { uncached_key : request_count }
             self.cache = OrderedDict()      # { cached_key : function_result }
             self.func = func
             self.maxrequests = maxrequests  # max number of uncached requests
             self.maxsize = maxsize          # max number of stored return values
             self.cache_after = cache_after

         def __call__(self, *args):
             if args in self.cache:
                 self.cache.move_to_end(args)
                 return self.cache[args]
             result = self.func(*args)
             self.requests[args] = self.requests.get(args, 0) + 1
             if self.requests[args] <= self.cache_after:
                 self.requests.move_to_end(args)
                 if len(self.requests) > self.maxrequests:
                     self.requests.popitem(last=False)
             else:
                 self.requests.pop(args, None)
                 self.cache[args] = result
                 if len(self.cache) > self.maxsize:
                     self.cache.popitem(last=False)
             return result


File: python.info,  Node: Objetos UserDict,  Next: Objetos UserList,  Prev: Objetos OrderedDict,  Up: collections — Tipos de dados de contêineres

5.8.4.11 Objetos ‘UserDict’
...........................

A classe *note UserDict: 1b0c. atua como um invólucro em torno de
objetos dicionário.  A necessidade desta classe foi parcialmente
suplantada pela capacidade de criar subclasses diretamente de *note
dict: 256.; entretanto, essa classe pode ser mais fácil de trabalhar
porque o dicionário subjacente é acessível como um atributo.

 -- Classe: collections.UserDict ([initialdata])

     Classe que simula um dicionário.  O conteúdo da instância é mantido
     em um dicionário regular, que é acessível através do atributo *note
     data: 26c2. das instâncias *note UserDict: 1b0c.  Se 'initialdata'
     for fornecido, *note data: 26c2. é inicializado com seu conteúdo;
     observe que a referência a 'initialdata' não será mantida,
     permitindo sua utilização para outros fins.

     Além de prover suporte aos métodos e operações de mapeamentos, as
     instâncias *note UserDict: 1b0c. fornecem o seguinte atributo:

      -- Atributo: data

          Um dicionário real usado para armazenar o conteúdo da classe
          *note UserDict: 1b0c.


File: python.info,  Node: Objetos UserList,  Next: Objetos UserString,  Prev: Objetos UserDict,  Up: collections — Tipos de dados de contêineres

5.8.4.12 Objetos ‘UserList’
...........................

Esta classe atua como um invólucro em torno de objetos de lista.  É uma
classe base útil para suas próprias classes semelhantes a listas, que
podem herdar delas e substituir métodos existentes ou adicionar novos.
Desta forma, é possível adicionar novos comportamentos às listas.

A necessidade desta classe foi parcialmente suplantada pela capacidade
de criar subclasses diretamente de *note list: 611.; no entanto, pode
ser mais fácil trabalhar com essa classe porque a lista subjacente pode
ser acessada como um atributo.

 -- Classe: collections.UserList ([list])

     Classe que simula uma lista.  O conteúdo da instância é mantido em
     uma lista regular, que é acessível através do atributo *note data:
     26c4. das instâncias *note UserList: 152c.  O conteúdo da instância
     é inicialmente definido como uma cópia de 'list', padronizando a
     lista vazia ‘[]’.  'list' pode ser qualquer iterável, por exemplo,
     uma lista Python real ou um objeto *note UserList: 152c.

     Além de prover suporte aos métodos e operações de sequências
     mutáveis, as instâncias *note UserList: 152c. fornecem o seguinte
     atributo:

      -- Atributo: data

          Um objeto *note list: 611. real usado para armazenar o
          conteúdo da classe *note UserList: 152c.

'Requisitos para criar subclasse:' Espera-se que as subclasses de *note
UserList: 152c. ofereçam um construtor que pode ser chamado sem
argumentos ou com um argumento.  Listar operações que retornam uma nova
sequência tenta criar uma instância da classe de implementação real.
Para isso, presume que o construtor pode ser chamado com um único
parâmetro, que é um objeto de sequência usado como fonte de dados.

Se uma classe derivada não desejar atender a este requisito, todos os
métodos especiais suportados por esta classe precisarão ser
substituídos; consulte as fontes para obter informações sobre os métodos
que precisam ser fornecidos nesse caso.


File: python.info,  Node: Objetos UserString,  Prev: Objetos UserList,  Up: collections — Tipos de dados de contêineres

5.8.4.13 Objetos ‘UserString’
.............................

A classe *note UserString: dfd. atua como um invólucro em torno de
objetos string.  A necessidade desta classe foi parcialmente suplantada
pela capacidade de criar subclasses diretamente de *note str: 44c.;
entretanto, essa classe pode ser mais fácil de trabalhar porque a string
subjacente é acessível como um atributo.

 -- Classe: collections.UserString (seq)

     Classe que simula um objeto string.  O conteúdo da instância é
     mantido em um objeto string regular, que é acessível através do
     atributo *note data: 26c6. das instâncias *note UserString: dfd.  O
     conteúdo da instância é inicialmente definido como uma cópia de
     'seq'.  O argumento 'seq' pode ser qualquer objeto que possa ser
     convertido em uma string usando a função embutida *note str(): 44c.

     Além de prover suporte aos métodos e operações de strings, as
     instâncias *note UserString: dfd. fornecem o seguinte atributo:

      -- Atributo: data

          Um objeto *note str: 44c. real usado para armazenar o conteúdo
          da classe *note UserString: dfd.

     Alterado na versão 3.5: Novos métodos ‘__getnewargs__’, ‘__rmod__’,
     ‘casefold’, ‘format_map’, ‘isprintable’ e ‘maketrans’.


File: python.info,  Node: collections abc — Classes Base Abstratas para Contêineres,  Next: heapq — Algoritmo de fila heap,  Prev: collections — Tipos de dados de contêineres,  Up: Tipos de Dados

5.8.5 ‘collections.abc’ — Classes Base Abstratas para Contêineres
-----------------------------------------------------------------

Adicionado na versão 3.3: Anteriormente, esse módulo fazia parte do
módulo *note collections: 1d.

'Código-fonte:' Lib/_collections_abc.py(1)

__________________________________________________________________

Esse módulo fornece *note classes base abstratas: 11f5. que podem ser
usadas para testar se uma classe fornece uma interface específica; por
exemplo, se é *note hasheável: 610. ou se é um *note mapeamento: 11fb.

Um teste *note issubclass(): 7c2. ou *note isinstance(): 442. para uma
interface funciona em uma das três formas.

  1. Uma classe recém-escrita pode herdar diretamente de uma das classes
     base abstratas.  A classe deve fornecer os métodos abstratos
     necessários.  Os métodos mixin restantes vêm da herança e podem ser
     substituídos se desejado.  Outros métodos podem ser adicionados
     conforme necessário:

          class C(Sequence):                      # Herança direta
              def __init__(self): ...             # Método extra não exigido pela ABC
              def __getitem__(self, index):  ...  # Método abstrato exigido
              def __len__(self):  ...             # Método abstrato exigido
              def count(self, value): ...         # Opcionalmente substitui um método mixin

          >>> issubclass(C, Sequence)
          True
          >>> isinstance(C(), Sequence)
          True

  2. Classes existentes e classes embutidas podem ser registradas como
     “subclasses virtuais” dos ABCs.  Essas classes devem definir a API
     completa, incluindo todos os métodos abstratos e todos os métodos
     mixin.  Isso permite que os usuários confiem nos testes *note
     issubclass(): 7c2. ou *note isinstance(): 442. para determinar se a
     interface completa é suportada.  A exceção a essa regra é para
     métodos que são automaticamente inferidos do restante da API:

          class D:                                 # Sem herança
              def __init__(self): ...              # Método extra exigido pela ABC
              def __getitem__(self, index):  ...   # Método abstrato
              def __len__(self):  ...              # Método abstrato
              def count(self, value): ...          # Método mixin
              def index(self, value): ...          # Método mixin

          Sequence.register(D)                     # Registra ao invés de herdar

          >>> issubclass(D, Sequence)
          True
          >>> isinstance(D(), Sequence)
          True

     Neste exemplo, a classe ‘D’ não precisa definir ‘__contains__’,
     ‘__iter__’ e ‘__reversed__’ porque o *note operador in: 2205, a
     lógica *note iteration: 1268. e a função *note reversed(): 869.
     retornam automaticamente para o uso de ‘__getitem__’ e ‘__len__’.

  3. Algumas interfaces simples são diretamente reconhecíveis pela
     presença dos métodos necessários (a menos que esses métodos tenham
     sido definidos como *note None: 675.):

          class E:
              def __iter__(self): ...
              def __next__(self): ...

          >>> issubclass(E, Iterable)
          True
          >>> isinstance(E(), Iterable)
          True

     Interfaces complexas não oferecem suporte a esta última técnica
     porque uma interface é mais do que apenas a presença de nomes de
     métodos.  Interfaces especificam semântica e relacionamentos entre
     métodos que não podem ser inferidos somente da presença de nomes de
     métodos específicos.  Por exemplo, saber que uma classe fornece
     ‘__getitem__’, ‘__len__’ e ‘__iter__’ é insuficiente para
     distinguir uma *note Sequence: 1204. de uma *note Mapping: 8d0.

Adicionado na versão 3.9: Essas classes abstratas agora oferecem suporte
a ‘[]’.  Veja *note Tipo Generic Alias: 6b2. e PEP 585(2).

* Menu:

* Classes Base Abstratas de Coleções::
* Classes Base Abstrata de Coleções – Descrições Detalhadas::
* Exemplos e receitas::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/_collections_abc.py

   (2) https://peps.python.org/pep-0585/


File: python.info,  Node: Classes Base Abstratas de Coleções,  Next: Classes Base Abstrata de Coleções – Descrições Detalhadas,  Up: collections abc — Classes Base Abstratas para Contêineres

5.8.5.1 Classes Base Abstratas de Coleções
..........................................

O módulo de coleções oferece o seguinte *note ABCs: 11f5.:

ABC                                Herda de                   Métodos abstratos           Métodos mixin
                                                                                          
---------------------------------------------------------------------------------------------------------------------------------------------------
                                                                                          
*note Container: 23e4. (1)                                    ‘__contains__’
                                                              
                                                                                          
*note Hashable: 4f5. (2)                                      ‘__hash__’
                                                              
                                                                                          
*note Iterable: 23e2. (3) (4)                                 ‘__iter__’
                                                              
                                                                                          
*note Iterator: 23e3. (5)          *note Iterable: 23e2.      ‘__next__’                  ‘__iter__’
                                                                                          
                                                                                          
*note Reversible: ca6. (6)         *note Iterable: 23e2.      ‘__reversed__’
                                                              
                                                                                          
*note Generator: e05. (7)          *note Iterator: 23e3.      ‘send’, ‘throw’             ‘close’, ‘__iter__’, ‘__next__’
                                                                                          
                                                                                          
*note Sized: 4f6. (8)                                         ‘__len__’
                                                              
                                                                                          
*note Callable: 7ec. (9)                                      ‘__call__’
                                                              
                                                                                          
*note Collection: ca5. (10)        *note Sized: 4f6,          ‘__contains__’,
                                   *note Iterable: 23e2,      ‘__iter__’, ‘__len__’
                                   *note Container: 23e4.     
                                   
                                                                                          
*note Sequence: 1204.              *note Reversible: ca6,     ‘__getitem__’, ‘__len__’    ‘__contains__’, ‘__iter__’, ‘__reversed__’, ‘index’,
                                   *note Collection: ca5.                                 and ‘count’
                                                                                          
                                                                                          
*note MutableSequence: 1a1.        *note Sequence: 1204.      ‘__getitem__’,              Herdados métodos de *note Sequence: 1204. e ‘append’,
                                                              ‘__setitem__’,              ‘clear’, ‘reverse’, ‘extend’, ‘pop’, ‘remove’ e
                                                              ‘__delitem__’, ‘__len__’,   ‘__iadd__’
                                                              ‘insert’                    
                                                              
                                                                                          
*note ByteString: 2e7.             *note Sequence: 1204.      ‘__getitem__’, ‘__len__’    Métodos herdados de *note Sequence: 1204.
                                                                                          
                                                                                          
*note Set: 23da.                   *note Collection: ca5.     ‘__contains__’,             ‘__le__’, ‘__lt__’, ‘__eq__’, ‘__ne__’, ‘__gt__’,
                                                              ‘__iter__’, ‘__len__’       ‘__ge__’, ‘__and__’, ‘__or__’, ‘__sub__’, ‘__rsub__’,
                                                                                          ‘__xor__’, ‘__rxor__’ e ‘isdisjoint’
                                                                                          
                                                                                          
*note MutableSet: 23e5.            *note Set: 23da.           ‘__contains__’,             Herdado *note Set: 23da. métodos e ‘clear’, ‘pop’,
                                                              ‘__iter__’, ‘__len__’,      ‘remove’, ‘__ior__’, ‘__iand__’, ‘__ixor__’, e
                                                              ‘add’, ‘discard’            ‘__isub__’
                                                                                          
                                                                                          
*note Mapping: 8d0.                *note Collection: ca5.     ‘__getitem__’,              ‘__contains__’, ‘keys’, ‘items’, ‘values’, ‘get’,
                                                              ‘__iter__’, ‘__len__’       ‘__eq__’, e ‘__ne__’
                                                                                          
                                                                                          
*note MutableMapping: 10eb.        *note Mapping: 8d0.        ‘__getitem__’,              Herdado *note Mapping: 8d0. métodos e ‘pop’,
                                                              ‘__setitem__’,              ‘popitem’, ‘clear’, ‘update’, e ‘setdefault’
                                                              ‘__delitem__’,              
                                                              ‘__iter__’, ‘__len__’
                                                              
                                                                                          
*note MappingView: 23e6.           *note Sized: 4f6.                                      ‘__init__’, ‘__len__’ e ‘__repr__’
                                                                                          
                                                                                          
*note ItemsView: 23e8.             *note MappingView: 23e6,                               ‘__contains__’, ‘__iter__’
                                   *note Set: 23da.                                       
                                   
                                                                                          
*note KeysView: 23e7.              *note MappingView: 23e6,                               ‘__contains__’, ‘__iter__’
                                   *note Set: 23da.                                       
                                   
                                                                                          
*note ValuesView: 23e9.            *note MappingView: 23e6,                               ‘__contains__’, ‘__iter__’
                                   *note Collection: ca5.                                 
                                   
                                                                                          
*note Awaitable: e06. (11)                                    ‘__await__’
                                                              
                                                                                          
*note Coroutine: e07. (12)         *note Awaitable: e06.      ‘send’, ‘throw’             ‘close’
                                                                                          
                                                                                          
*note AsyncIterable: e09. (13)                                ‘__aiter__’
                                                              
                                                                                          
*note AsyncIterator: e08. (14)     *note AsyncIterable: e09.  ‘__anext__’                 ‘__aiter__’
                                                                                          
                                                                                          
*note AsyncGenerator: ca8. (15)    *note AsyncIterator: e08.  ‘asend’, ‘athrow’           ‘aclose’, ‘__aiter__’, ‘__anext__’
                                                                                          
                                                                                          
*note Buffer: 2e9. (16)                                       ‘__buffer__’
                                                              

   ---------- Footnotes ----------

   (1) Essas ABCs substituem *note __subclasshook__(): 26cb. para dar
suporte ao teste de uma interface verificando se os métodos necessários
estão presentes e não foram definidos como *note None: 675.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (2) Essas ABCs substituem *note __subclasshook__(): 26cb. para dar
suporte ao teste de uma interface verificando se os métodos necessários
estão presentes e não foram definidos como *note None: 675.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (3) Essas ABCs substituem *note __subclasshook__(): 26cb. para dar
suporte ao teste de uma interface verificando se os métodos necessários
estão presentes e não foram definidos como *note None: 675.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (4) A verificação ‘isinstance(obj, Iterable)’ detecta classes que são
registradas como *note Iterable: 23e2. ou que possuem um método *note
__iter__(): 1e4a, mas que não detecta classes que iteram com o método
*note __getitem__(): 283.  A única maneira confiável de determinar se um
objeto é *note iterável: 1268. é chamar ‘iter(obj)’.

   (5) Essas ABCs substituem *note __subclasshook__(): 26cb. para dar
suporte ao teste de uma interface verificando se os métodos necessários
estão presentes e não foram definidos como *note None: 675.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (6) Essas ABCs substituem *note __subclasshook__(): 26cb. para dar
suporte ao teste de uma interface verificando se os métodos necessários
estão presentes e não foram definidos como *note None: 675.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (7) Essas ABCs substituem *note __subclasshook__(): 26cb. para dar
suporte ao teste de uma interface verificando se os métodos necessários
estão presentes e não foram definidos como *note None: 675.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (8) Essas ABCs substituem *note __subclasshook__(): 26cb. para dar
suporte ao teste de uma interface verificando se os métodos necessários
estão presentes e não foram definidos como *note None: 675.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (9) Essas ABCs substituem *note __subclasshook__(): 26cb. para dar
suporte ao teste de uma interface verificando se os métodos necessários
estão presentes e não foram definidos como *note None: 675.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (10) Essas ABCs substituem *note __subclasshook__(): 26cb. para dar
suporte ao teste de uma interface verificando se os métodos necessários
estão presentes e não foram definidos como *note None: 675.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (11) Essas ABCs substituem *note __subclasshook__(): 26cb. para dar
suporte ao teste de uma interface verificando se os métodos necessários
estão presentes e não foram definidos como *note None: 675.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (12) Essas ABCs substituem *note __subclasshook__(): 26cb. para dar
suporte ao teste de uma interface verificando se os métodos necessários
estão presentes e não foram definidos como *note None: 675.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (13) Essas ABCs substituem *note __subclasshook__(): 26cb. para dar
suporte ao teste de uma interface verificando se os métodos necessários
estão presentes e não foram definidos como *note None: 675.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (14) Essas ABCs substituem *note __subclasshook__(): 26cb. para dar
suporte ao teste de uma interface verificando se os métodos necessários
estão presentes e não foram definidos como *note None: 675.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (15) Essas ABCs substituem *note __subclasshook__(): 26cb. para dar
suporte ao teste de uma interface verificando se os métodos necessários
estão presentes e não foram definidos como *note None: 675.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.

   (16) Essas ABCs substituem *note __subclasshook__(): 26cb. para dar
suporte ao teste de uma interface verificando se os métodos necessários
estão presentes e não foram definidos como *note None: 675.  Isso só
funciona para interfaces simples.  Interfaces mais complexas exigem
registro ou subclassificação direta.


File: python.info,  Node: Classes Base Abstrata de Coleções – Descrições Detalhadas,  Next: Exemplos e receitas,  Prev: Classes Base Abstratas de Coleções,  Up: collections abc — Classes Base Abstratas para Contêineres

5.8.5.2 Classes Base Abstrata de Coleções – Descrições Detalhadas
.................................................................

 -- Classe: collections.abc.Container

     ABC para classes que fornecem o método *note __contains__(): 1400.

 -- Classe: collections.abc.Hashable

     ABC para classes que fornecem o método *note __hash__(): b0e.

 -- Classe: collections.abc.Sized

     ABC para classes que fornecem o método *note __len__(): 15b4.

 -- Classe: collections.abc.Callable

     ABC para classes que fornecem o método *note __call__(): 558.

     Veja *note Anotações de objetos chamáveis: 2404. para detalhes
     sobre como usar ‘Callable’ em anotações de tipos.

 -- Classe: collections.abc.Iterable

     ABC para classes que fornecem o método *note __iter__(): 1e4a.

     A verificação ‘isinstance(obj, Iterable)’ detecta classes que são
     registradas como *note Iterable: 23e2. ou que possuem um método
     *note __iter__(): 1e4a, mas que não detecta classes que iteram com
     o método *note __getitem__(): 283.  A única maneira confiável de
     determinar se um objeto é *note iterável: 1268. é chamar
     ‘iter(obj)’.

 -- Classe: collections.abc.Collection

     ABC para classes de contêiner iterável de tamanho.

     Adicionado na versão 3.6.

 -- Classe: collections.abc.Iterator

     ABC para classes que fornecem os métodos *note __iter__(): 1e4d. e
     métodos *note __next__(): 1310.  Veja também a definição de *note
     iterator: 1ac.

 -- Classe: collections.abc.Reversible

     ABC para classes iteráveis que também fornecem o método *note
     __reversed__(): ca7.

     Adicionado na versão 3.6.

 -- Classe: collections.abc.Generator

     ABC para classes *note geradores: 109a. que implementam o protocolo
     definido em PEP 342(1) que estende os *note iteradores: 1ac. com os
     métodos *note send(): 215a, *note throw(): 4f8. e *note close():
     15b9.

     Consulte *note Anotando geradores e corrotinas: 26cd. para obter
     detalhes sobre como usar ‘Generator’ em anotações de tipos.

     Adicionado na versão 3.5.

 -- Classe: collections.abc.Sequence
 -- Classe: collections.abc.MutableSequence
 -- Classe: collections.abc.ByteString

     ABCs para *note sequências: 4f1. somente de leitura e mutáveis.

     Nota de implementação: Alguns métodos mixin, como *note __iter__():
     1e4a, *note __reversed__(): ca7. e *note index(): 211c, fazem
     chamadas repetidas ao método subjacente *note __getitem__(): 283.
     Consequentemente, se *note __getitem__(): 283. for implementado com
     velocidade de acesso constante, os métodos mixin terão desempenho
     linear; no entanto, se o método subjacente for linear (como seria
     com uma lista encadeada), os mixins terão desempenho quadrático e
     provavelmente precisarão ser substituídos.

      -- Método: index (value, start=0, stop=None)

          Retorna o primeiro índice de 'valor'.

          Levanta *note ValueError: 202. se o valor não estiver
          presente.

          Suporte aos argumentos 'start' e 'stop' é opcional, mas
          recomendado.

          Alterado na versão 3.5: O método *note index(): 211c. ganhou
          suporte para os argumentos 'stop' e 'start'.

     Descontinuado desde a versão 3.12, será removido na versão 3.17: A
     ABC *note ByteString: 2e7. foi descontinuada.

     Use ‘isinstance(obj, collections.abc.Buffer)’ para testar se ‘obj’
     implementa o *note protocolo de buffer: 2e8. em tempo de execução.
     Para uso em anotações de tipo, use *note Buffer: 2e9. ou uma união
     que especifique explicitamente os tipos suportados pelo seu código
     (por exemplo, ‘bytes | bytearray | memoryview’).

     ‘ByteString’ foi originalmente concebido para ser uma classe
     abstrata que serviria como um supertipo de *note bytes: 1c2. e
     *note bytearray: 2ea.  No entanto, como o ABC nunca teve métodos,
     saber que um objeto era uma instância de ‘ByteString’ nunca lhe
     dizia nada de útil sobre o objeto.  Outros tipos comuns de buffer,
     como *note memoryview: 2eb, também nunca foram entendidos como
     subtipos de ‘ByteString’ (seja em tempo de execução ou por
     verificadores de tipo estáticos).

     See PEP 688(2) for more details.

 -- Classe: collections.abc.Set
 -- Classe: collections.abc.MutableSet

     ABCs para *note conjuntos: 1dcf. somente leitura e mutáveis.

 -- Classe: collections.abc.Mapping
 -- Classe: collections.abc.MutableMapping

     ABCs para somente leitura e mutável *note mappings: 11fb.

 -- Classe: collections.abc.MappingView
 -- Classe: collections.abc.ItemsView
 -- Classe: collections.abc.KeysView
 -- Classe: collections.abc.ValuesView

     ABCs para mapeamento, itens, chaves e valores *note views: 26bf.

 -- Classe: collections.abc.Awaitable

     ABC para objetos *note aguardáveis: 1ad, que podem ser usados em
     expressões de *note await: 1b9.  Implementações personalizadas
     devem fornecer o método *note __await__(): d9d.

     Objetos e instâncias de *note corrotina: 491. da ABC *note
     Coroutine: e07. são todas instâncias dessa ABC.

          Nota: No CPython, as corrotinas baseados em gerador (*note
          geradores: 109a. decorados com *note @types.coroutine: eb7.)
          são 'aguardáveis', embora não possuam o método *note
          __await__(): d9d.  Usar ‘isinstance(gencoro, Awaitable)’ para
          eles retornará ‘False’.  Use *note inspect.isawaitable(): e43.
          para detectá-los.

     Adicionado na versão 3.5.

 -- Classe: collections.abc.Coroutine

     ABC para classes compatíveis com *note corrotina: 491.  Eles
     implementam os seguintes métodos, definidos em *note Objetos
     corrotina: 2099.: *note send(): 2159, *note throw(): 4f7, e *note
     close(): 215b.  Implementações personalizadas também devem
     implementar *note __await__(): d9d.  Todas as instâncias *note
     Coroutine: e07. também são instâncias de *note Awaitable: e06.

          Nota: No CPython, as corrotinas baseados em gerador (*note
          geradores: 109a. decorados com *note @types.coroutine: eb7.)
          são 'aguardáveis', embora não possuam o método *note
          __await__(): d9d.  Usar ‘isinstance(gencoro, Coroutine)’ para
          eles retornará ‘False’.  Use *note inspect.isawaitable(): e43.
          para detectá-los.

     Consulte *note Anotando geradores e corrotinas: 26cd. para obter
     detalhes sobre como usar ‘Coroutine’ em anotações de tipos.  A
     variância e a ordem dos parâmetros de tipo correspondem às de *note
     Generator: e05.

     Adicionado na versão 3.5.

 -- Classe: collections.abc.AsyncIterable

     ABC para classes que fornecem um método ‘__aiter__’.  Veja também a
     definição de *note iterável assíncrono: d9c.

     Adicionado na versão 3.5.

 -- Classe: collections.abc.AsyncIterator

     ABC para classes que fornecem os métodos ‘__aiter__’ e ‘__anext__’.
     Veja também a definição de *note iterador assíncrono: 1ab.

     Adicionado na versão 3.5.

 -- Classe: collections.abc.AsyncGenerator

     ABC para classes de *note gerador assíncrono: 21cf. que implementam
     o protocolo definido em PEP 525(3) e PEP 492(4).

     Consulte *note Anotando geradores e corrotinas: 26cd. para obter
     detalhes sobre como usar ‘AsyncGenerator’ em anotações de tipos.

     Adicionado na versão 3.6.

 -- Classe: collections.abc.Buffer

     ABC para classes que fornecem o método *note __buffer__(): 45f,
     implementando o *note protocolo buffer: 2e8.  Veja PEP 688(5).

     Adicionado na versão 3.12.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0342/

   (2) https://peps.python.org/pep-0688/#current-options

   (3) https://peps.python.org/pep-0525/

   (4) https://peps.python.org/pep-0492/

   (5) https://peps.python.org/pep-0688/


File: python.info,  Node: Exemplos e receitas,  Prev: Classes Base Abstrata de Coleções – Descrições Detalhadas,  Up: collections abc — Classes Base Abstratas para Contêineres

5.8.5.3 Exemplos e receitas
...........................

ABCs nos permitem perguntar a classes ou instâncias se elas fornecem
funcionalidades específicas, por exemplo:

     size = None
     if isinstance(myvar, collections.abc.Sized):
         size = len(myvar)

Vários ABCs também são também úteis como mixins que facilitam o
desenvolvimento de classes que suportam APIs de contêiner.  Por exemplo,
para escrever uma classe que suporte toda a API *note Set: 23da. , é
necessário fornecer apenas os três métodos abstratos subjacentes: *note
__contains__(): 1400, *note __iter__(): 1e4a, e *note __len__(): 15b4.
O ABC fornece os métodos restantes, como ‘__and__()’ e *note
isdisjoint(): 23c6.:

     class ListBasedSet(collections.abc.Set):
         ''' Alternate set implementation favoring space over speed
             and not requiring the set elements to be hashable. '''
         def __init__(self, iterable):
             self.elements = lst = []
             for value in iterable:
                 if value not in lst:
                     lst.append(value)

         def __iter__(self):
             return iter(self.elements)

         def __contains__(self, value):
             return value in self.elements

         def __len__(self):
             return len(self.elements)

     s1 = ListBasedSet('abcdef')
     s2 = ListBasedSet('defghi')
     overlap = s1 & s2            # O método __and__() é automaticamente suportado

Notas sobre o uso de *note Set: 23da. e *note MutableSet: 23e5. como um
mixin:

  1. Como algumas operações de conjunto criam novos conjuntos, os
     métodos de mixin padrão precisam de uma maneira de criar novas
     instâncias a partir de um *note iterável: 1268.  Supõe-se que a
     classe construtor tenha uma assinatura no formato
     ‘ClassName(iterable)’.  Essa suposição é fatorada em um *note
     classmethod: 166. interno chamado ‘_from_iterable()’ que chama
     ‘cls(iterable)’ para produzir um novo conjunto.  Se o mixin *note
     Set: 23da. estiver sendo usado em uma classe com uma assinatura de
     construtor diferente, você precisará substituir ‘_from_iterable()’
     por um método de classe ou um método regular que possa construir
     novas instâncias a partir de um argumento iterável.

  2. Para substituir as comparações (presumivelmente para velocidade, já
     que a semântica é fixa), redefina *note __le__(): 134f. e *note
     __ge__(): 1351, então as outras operações seguirão o exemplo
     automaticamente.

  3. O mixin *note Set: 23da. fornece um método ‘_hash()’ para calcular
     um valor de hash para o conjunto; no entanto, *note __hash__():
     b0e. não é definido porque nem todos os conjuntos são *note
     hasheáveis: 610. ou imutáveis.  Para adicionar hasheabilidade em
     conjuntos usando mixin, herde de ambos *note Set(): 23da. e *note
     Hashable(): 4f5, e então defina ‘__hash__ = Set._hash’.

Ver também
..........

   * OrderedSet receita(1) para um exemplo baseado em *note MutableSet:
     23e5.

   * Para mais informações sobre ABCs, consulte o módulo *note abc: 4. e
     PEP 3119(2).

   ---------- Footnotes ----------

   (1) https://code.activestate.com/recipes/576694/

   (2) https://peps.python.org/pep-3119/


File: python.info,  Node: heapq — Algoritmo de fila heap,  Next: bisect — Algoritmo de bisseção de vetor,  Prev: collections abc — Classes Base Abstratas para Contêineres,  Up: Tipos de Dados

5.8.6 ‘heapq’ — Algoritmo de fila heap
--------------------------------------

'Código-fonte:' Lib/heapq.py(1)

__________________________________________________________________

Este módulo fornece uma implementação do algoritmo de fila heap, também
conhecido como algoritmo de fila de prioridade.

Heaps são árvores binárias para as quais cada nó pai tem um valor menor
ou igual a qualquer um de seus filhos.  Chamamos essa condição de
invariante de heap.

Esta implementação usa arrays para os quais ‘heap[k] <= heap[2*k+1]’ e
‘heap[k] <= heap[2*k+2]’ para todos 'k', contando elementos de zero.
Para efeito de comparação, os elementos inexistentes são considerados
infinitos.  A propriedade interessante de um heap é que seu menor
elemento é sempre a raiz, ‘heap[0]’.

A API abaixo difere dos algoritmos de heap de livros didáticos em dois
aspectos: (a) Usamos indexação baseada em zero.  Isso torna o
relacionamento entre o índice de um nó e os índices de seus filhos um
pouco menos óbvio, mas é mais adequado, pois o Python usa indexação
baseada em zero.  (b) Nosso método pop retorna o menor item, não o maior
(chamado de “min heap” em livros didáticos; um “max heap” é mais comum
em textos devido à sua adequação para classificação no local).

Esses dois tornam possível visualizar o heap como uma lista regular do
Python sem surpresas: ‘heap[0]’ é o menor item, e ‘heap.sort()’ mantém o
invariante de heap!

Para criar um heap, use uma lista inicializada com ‘[]’, ou você pode
transformar uma lista preenchida em um heap através da função *note
heapify(): 26d3.

As seguintes funções são fornecidas:

 -- Função: heapq.heapify (x)

     Transforma a lista 'x' em um heap, no local, em tempo linear.

 -- Função: heapq.heappush (heap, item)

     Coloca o valor 'item' no 'heap', mantendo o invariante de heap.

 -- Função: heapq.heappop (heap)

     Retira e retorna o menor item do 'heap', mantendo o invariante de
     heap.  Se o heap estiver vazio, a exceção *note IndexError: 157e.
     será levantada.  Para acessar o menor item sem retirá-lo, use
     ‘heap[0]’.

 -- Função: heapq.heappushpop (heap, item)

     Coloca 'item' no heap, depois retira e retorna o menor item do
     'heap'.  A ação combinada é executada com mais eficiência do que
     *note heappush(): 1504. seguida por uma chamada separada para *note
     heappop(): 1505.

 -- Função: heapq.heapreplace (heap, item)

     Abre e retorna o menor item da 'heap' e também coloca o novo
     'item'.  O tamanho do heap não muda.  Se o heap estiver vazio, a
     exceção *note IndexError: 157e. será levantada.

     Esta operação de uma etapa é mais eficiente que *note heappop():
     1505. seguida por *note heappush(): 1504. e pode ser mais
     apropriada ao usar um heap de tamanho fixo.  A combinação de
     retirar/colocar sempre retorna um elemento do heap e o substitui
     por 'item'.

     O valor retornado pode ser maior que o 'item' adicionado.  Se isso
     não for desejado, considere usar *note heappushpop(): 26d4.  Sua
     combinação de retirar/colocar retorna o menor dos dois valores,
     deixando o valor maior no heap.

O módulo também oferece três funções de propósito geral baseadas em
heaps.

 -- Função: heapq.merge (*iterables, key=None, reverse=False)

     Mescla diversas entradas classificadas em uma única saída
     classificada (por exemplo, mescla entradas com registro de data e
     hora de vários arquivos de log).  Retorna um *note iterador: 1ac.
     sobre os valores classificados.

     Semelhante a ‘sorted(itertools.chain(*iterables))’ mas retorna um
     iterável, não puxa os dados para a memória todos de uma vez e
     presume que cada um dos fluxos de entrada já está classificado (do
     menor para o maior).

     Possui dois argumentos opcionais que devem ser especificados como
     argumentos nomeados.

     'key' especifica uma *note função chave: e31. de um argumento que é
     usado para extrair uma chave de comparação de cada elemento de
     entrada.  O valor padrão é ‘None’ (compare os elementos
     diretamente).

     'reverse' é um valor booleano.  Se definido como ‘True’, então os
     elementos de entrada serão mesclados como se cada comparação fosse
     invertida.  Para obter um comportamento semelhante a
     ‘sorted(itertools.chain(*iterables), reverse=True)’, todos os
     iteráveis devem ser classificados do maior para o menor.

     Alterado na versão 3.5: Adicionados os parâmetros opcionais 'key' e
     'reverse'.

 -- Função: heapq.nlargest (n, iterable, key=None)

     Retorna uma lista com os 'n' maiores elementos do conjunto de dados
     definido por 'iterable'.  'key', se fornecido, especifica uma
     função de um argumento que é usado para extrair uma chave de
     comparação de cada elemento em 'iterable' (por exemplo,
     ‘key=str.lower’).  Equivalente a: ‘sorted(iterable, key=key,
     reverse=True)[:n]’.

 -- Função: heapq.nsmallest (n, iterable, key=None)

     Retorna uma lista com os 'n' menores elementos do conjunto de dados
     definido por 'iterable'.  'key', se fornecido, especifica uma
     função de um argumento que é usado para extrair uma chave de
     comparação de cada elemento em 'iterable' (por exemplo,
     ‘key=str.lower’).  Equivalente a: ‘sorted(iterable, key=key)[:n]’.

As duas últimas funções têm melhor desempenho para valores menores de
'n'.  Para valores maiores, é mais eficiente usar a função *note
sorted(): be7.  Além disso, quando ‘n==1’, é mais eficiente usar as
funções embutidas *note min(): f3a. e *note max(): f3b.  Se for
necessário o uso repetido dessas funções, considere transformar o
iterável em um heap real.

* Menu:

* Exemplos básicos::
* Notas de implementação da fila de prioridade::
* Teoria::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/heapq.py


File: python.info,  Node: Exemplos básicos,  Next: Notas de implementação da fila de prioridade,  Up: heapq — Algoritmo de fila heap

5.8.6.1 Exemplos básicos
........................

Um heapsort(1) pode ser implementado colocando todos os valores em um
heap e, em seguida, retirando os menores valores, um de cada vez:

     >>> def heapsort(iterable):
     ...     h = []
     ...     for value in iterable:
     ...         heappush(h, value)
     ...     return [heappop(h) for i in range(len(h))]
     ...
     >>> heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
     [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Isto é semelhante a ‘sorted(iterable)’, mas diferente de *note sorted():
be7, esta implementação não é estável.

Os elementos de heap podem ser tuplas.  Isto é útil para atribuir
valores de comparação (como prioridades de tarefas) juntamente com o
registro principal que está sendo rastreado:

     >>> h = []
     >>> heappush(h, (5, 'write code'))
     >>> heappush(h, (7, 'release product'))
     >>> heappush(h, (1, 'write spec'))
     >>> heappush(h, (3, 'create tests'))
     >>> heappop(h)
     (1, 'write spec')

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Heapsort


File: python.info,  Node: Notas de implementação da fila de prioridade,  Next: Teoria,  Prev: Exemplos básicos,  Up: heapq — Algoritmo de fila heap

5.8.6.2 Notas de implementação da fila de prioridade
....................................................

Uma fila de prioridade(1) é de uso comum para um heap e apresenta vários
desafios de implementação:

   * Estabilidade de classificação: como fazer com que duas tarefas com
     prioridades iguais sejam retornadas na ordem em que foram
     adicionadas originalmente?

   * A comparação de tuplas quebra para pares (prioridade, tarefa) se as
     prioridades forem iguais e as tarefas não tiverem uma ordem de
     comparação padrão.

   * Se a prioridade de uma tarefa mudar, como movê-la para uma nova
     posição no heap?

   * Ou se uma tarefa pendente precisar ser excluída, como encontrá-la e
     removê-la da fila?

Uma solução para os dois primeiros desafios é armazenar as entradas como
uma lista de 3 elementos, incluindo a prioridade, uma contagem de
entradas e a tarefa.  A contagem de entradas serve de desempate para que
duas tarefas com a mesma prioridade sejam retornadas na ordem em que
foram adicionadas.  E como não há duas contagens de entradas iguais, a
comparação de tuplas nunca tentará comparar diretamente duas tarefas.

Outra solução para o problema de tarefas não comparáveis é criar uma
classe wrapper que ignore o item da tarefa e compare apenas o campo de
prioridade:

     from dataclasses import dataclass, field
     from typing import Any

     @dataclass(order=True)
     class PrioritizedItem:
         priority: int
         item: Any=field(compare=False)

Os desafios restantes giram em torno de encontrar uma tarefa pendente e
fazer alterações em sua prioridade ou removê-la totalmente.  Encontrar
uma tarefa pode ser feito com um dicionário apontando para uma entrada
na fila.

Remover a entrada ou alterar sua prioridade é mais difícil porque
quebraria os invariantes da estrutura de heap.  Assim, uma possível
solução é marcar a entrada como removida e adicionar uma nova entrada
com a prioridade revisada:

     pq = []                         # lista de entradas organizadas em uma heap
     entry_finder = {}               # mapeamentos de tarefas para entradas
     REMOVED = '<removed-task>'      # espaço reservado para uma tarefa removida
     counter = itertools.count()     # contagem de sequência única

     def add_task(task, priority=0):
         'Adiciona uma nova tarefa ou atualiza a prioridade de uma tarefa existente'
         if task in entry_finder:
             remove_task(task)
         count = next(counter)
         entry = [priority, count, task]
         entry_finder[task] = entry
         heappush(pq, entry)

     def remove_task(task):
         'Marca uma tarefa existente com REMOVED (removida). Levanta KeyError se não encontrada.'
         entry = entry_finder.pop(task)
         entry[-1] = REMOVED

     def pop_task():
         'Remove e retorna a tarefa de mais baixa prioridade. Levanta KeyError se vazio.'
         while pq:
             priority, count, task = heappop(pq)
             if task is not REMOVED:
                 del entry_finder[task]
                 return task
         raise KeyError('pop from an empty priority queue')

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Priority_queue


File: python.info,  Node: Teoria,  Prev: Notas de implementação da fila de prioridade,  Up: heapq — Algoritmo de fila heap

5.8.6.3 Teoria
..............

Heaps são arrays para os quais ‘a[k] <= a[2*k+1]’ e ‘a[k] <= a[2*k+2]’
para todos 'k', contando elementos de 0.  Para fins de comparação, os
elementos inexistentes são considerados infinitos.  A propriedade
interessante de um heap é que ‘a[0]’ é sempre seu menor elemento.

O estranho invariante acima pretende ser uma representação de memória
eficiente para um torneio.  Os números abaixo são 'k', não ‘a[k]’:

                                    0

                   1                                 2

           3               4                5               6

       7       8       9       10      11      12      13      14

     15 16   17 18   19 20   21 22   23 24   25 26   27 28   29 30

Na árvore acima, cada célula 'k' está no topo de ‘2*k+1’ e ‘2*k+2’.  Num
torneio binário normal que vemos nos desportos, cada célula é a
vencedora das duas células que está no topo, e podemos rastrear o
vencedor na árvore para ver todos os adversários que teve.  Contudo, em
muitas aplicações informáticas de tais torneios, não precisamos de
traçar a história de um vencedor.  Para sermos mais eficientes em termos
de memória, quando um vencedor é promovido, tentamos substituí-lo por
algo de nível inferior, e a regra passa a ser que uma célula e as duas
células que ela cobre contêm três itens diferentes, mas a célula de cima
“ganha” sobre as duas células superiores.

Se esse invariante de heap estiver protegido o tempo todo, o índice 0 é
claramente o vencedor geral.  A maneira algorítmica mais simples de
removê-lo e encontrar o “próximo” vencedor é mover algum perdedor
(digamos a célula 30 no diagrama acima) para a posição 0 e, em seguida,
filtrar esse novo 0 pela árvore, trocando valores, até que o invariante
é restabelecido.  Isto é claramente logarítmico do número total de itens
na árvore.  Ao iterar todos os itens, você obtém uma classificação
'O'('n' log 'n').

Um recurso interessante desse tipo é que você pode inserir novos itens
com eficiência enquanto a classificação está em andamento, desde que os
itens inseridos não sejam “melhores” que o último 0º elemento extraído.
Isto é especialmente útil em contextos de simulação, onde a árvore
contém todos os eventos recebidos e a condição “vitória” significa o
menor tempo programado.  Quando um evento agenda outros eventos para
execução, eles são agendados para o futuro, para que possam entrar
facilmente no heap.  Portanto, um heap é uma boa estrutura para
implementar escalonadores (foi isso que usei no meu sequenciador MIDI
:-).

Várias estruturas para implementação de escalonadores foram
extensivamente estudadas, e os heaps são bons para isso, pois são
razoavelmente rápidos, a velocidade é quase constante e o pior caso não
é muito diferente do caso médio.  No entanto, existem outras
representações que são globalmente mais eficientes, embora os piores
casos possam ser terríveis.

Heaps também são muito úteis em classificações de discos grandes.
Provavelmente todos vocês sabem que uma classificação grande implica a
produção de “execuções” (que são sequências pré-classificadas, cujo
tamanho geralmente está relacionado à quantidade de memória da CPU),
seguidas de passagens de fusão para essas execuções, cuja fusão
geralmente é muito inteligente.  organizado (1).  É muito importante que
a classificação inicial produza as execuções mais longas possíveis.  Os
torneios são uma boa maneira de conseguir isso.  Se, usando toda a
memória disponível para realizar um torneio, você substituir e filtrar
itens que se encaixem na corrida atual, você produzirá corridas que têm
o dobro do tamanho da memória para entradas aleatórias e muito melhores
para entradas ordenadas de maneira imprecisa.

Além disso, se você gerar o 0º item no disco e obter uma entrada que
pode não caber no torneio atual (porque o valor “ganha” sobre o último
valor de saída), ele não poderá caber no heap, então o tamanho do heap
diminui.  A memória liberada poderia ser reutilizada de maneira
inteligente e imediata para a construção progressiva de um segundo heap,
que cresce exatamente na mesma proporção que o primeiro heap está
derretendo.  Quando o primeiro heap desaparece completamente, você troca
os heaps e inicia uma nova execução.  Inteligente e bastante eficaz!

Em uma palavra, heaps são estruturas de memória úteis para conhecer.  Eu
os uso em alguns aplicativos e acho bom manter um módulo “heap” por
perto.  :-)

   ---------- Footnotes ----------

   (1) Os algoritmos de balanceamento de disco atuais, hoje em dia, são
mais incômodos do que inteligentes, e isso é consequência da capacidade
de busca dos discos.  Em dispositivos que não são capazes de buscar,
como grandes drives de fita, a história era bem diferente, e era preciso
ser muito inteligente para garantir (com muita antecedência) que cada
movimento da fita seria o mais eficaz possível (isto é, participaria
melhor na “progressão” da fusão).  Algumas fitas podiam até ser lidas de
trás para frente, o que também era usado para evitar o tempo de
rebobinar.  Acredite em mim, fitas realmente boas eram espetaculares de
assistir!  Desde sempre, ordenar sempre foi uma Grande Arte!  :-)


File: python.info,  Node: bisect — Algoritmo de bisseção de vetor,  Next: array— Vetores eficientes de valores numéricos,  Prev: heapq — Algoritmo de fila heap,  Up: Tipos de Dados

5.8.7 ‘bisect’ — Algoritmo de bisseção de vetor
-----------------------------------------------

'Código-fonte:' Lib/bisect.py(1)

__________________________________________________________________

Este módulo fornece suporte para manter uma lista em ordem de
classificação sem ter que classificar a lista após cada inserção.  Para
longas listas de itens com operações de comparação caras, isso pode ser
uma melhoria em relação a pesquisas lineares ou recorrência frequente.

O módulo é chamado de *note bisect: 11. porque usa um algoritmo básico
de bisseção para fazer seu trabalho.  Ao contrário de outras ferramentas
de bisseção que buscam um valor específico, as funções neste módulo são
projetadas para localizar um ponto de inserção.  Da mesma forma, as
funções nunca chamam um método *note __eq__(): b0d. para determinar se
um valor foi encontrado.  Em vez disso, as funções apenas chamam o
método *note __lt__(): 12e2. e retornarão um ponto de inserção entre
valores em um vetor.

     Nota: As funções neste módulo não são seguras para thread.  Se
     várias threads usarem funções de *note bisect: 11. simultaneamente
     na mesma sequência, isso poderá resultar em um comportamento
     indefinido.  Da mesma forma, se a sequência fornecida for mutada
     por uma thread diferente enquanto uma função de *note bisect: 11.
     estiver operando nela, o resultado será indefinido.  Por exemplo,
     usar *note insort_left(): 26de. na mesma lista de várias threads
     pode fazer com que a lista fique desordenada.
As seguintes funções são fornecidas:

 -- Função: bisect.bisect_left (a, x, lo=0, hi=len(a), *, key=None)

     Localiza o ponto de inserção de 'x' em 'a' para manter a ordem de
     classificação.  Os parâmetros 'lo' e 'hi' podem ser usados para
     especificar um subconjunto da lista que deve ser considerado; por
     padrão, toda a lista é usada.  Se 'x' já estiver presente em 'a', o
     ponto de inserção estará antes (à esquerda) de qualquer entrada
     existente.  O valor de retorno é adequado para uso como o primeiro
     parâmetro para ‘list.insert()’ supondo que 'a' já esteja ordenado.

     O ponto de inserção retornado 'ip' particiona o vetor 'a' em duas
     fatias de forma que ‘all(elem < x for elem in a[lo : ip])’ seja
     verdadeiro para a fatia esquerda e ‘all(elem >= x for elem in a[ip
     : hi])’ é verdadeiro para a fatia certa.

     'key' especifica uma *note função chave: e31. de um argumento que é
     usado para extrair uma chave de comparação de cada elemento no
     vetor.  Para oferecer suporte à pesquisa de registros complexos, a
     função chave não é aplicada ao valor 'x'.

     Se 'key' for ‘None’, os elementos serão comparados diretamente e
     nenhuma função chave será chamada.

     Alterado na versão 3.10: Adicionado o parâmetro 'key'.

 -- Função: bisect.bisect_right (a, x, lo=0, hi=len(a), *, key=None)
 -- Função: bisect.bisect (a, x, lo=0, hi=len(a), *, key=None)

     Semelhante a *note bisect_left(): 26e0, mas retorna um ponto de
     inserção que vem depois (à direita de) qualquer entrada existente
     de 'x' em 'a'.

     O ponto de inserção retornado 'ip' particiona o vetor 'a' em duas
     fatias de forma que ‘all(elem <= x for elem in a[lo : ip])’ seja
     verdadeiro para a fatia esquerda e ‘all(elem > x for elem in a[ip :
     hi])’ é verdadeiro para a fatia certa.

     Alterado na versão 3.10: Adicionado o parâmetro 'key'.

 -- Função: bisect.insort_left (a, x, lo=0, hi=len(a), *, key=None)

     Insere 'x' em 'a' na ordem de classificação.

     Esta função primeiro executa *note bisect_left(): 26e0. para
     localizar um ponto de inserção.  Em seguida, executa o método *note
     insert(): 211d. em 'a' para inserir 'x' na posição apropriada para
     manter a ordem de classificação.

     Para oferecer suporte à inserção de registros em uma tabela, a
     função 'key' (se houver) é aplicada a 'x' para a etapa de pesquisa,
     mas não para a etapa de inserção.

     Tenha em mente que a busca 'O'(log 'n') é dominada pelo etapa de
     inserção lenta O(n).

     Alterado na versão 3.10: Adicionado o parâmetro 'key'.

 -- Função: bisect.insort_right (a, x, lo=0, hi=len(a), *, key=None)
 -- Função: bisect.insort (a, x, lo=0, hi=len(a), *, key=None)

     Semelhante a *note insort_left(): 26de, mas inserindo 'x' em 'a'
     após qualquer entrada existente de 'x'.

     Esta função primeiro executa *note bisect_right(): 26e1. para
     localizar um ponto de inserção.  Em seguida, executa o método *note
     insert(): 211d. em 'a' para inserir 'x' na posição apropriada para
     manter a ordem de classificação.

     Para oferecer suporte à inserção de registros em uma tabela, a
     função 'key' (se houver) é aplicada a 'x' para a etapa de pesquisa,
     mas não para a etapa de inserção.

     Tenha em mente que a busca 'O'(log 'n') é dominada pelo etapa de
     inserção lenta O(n).

     Alterado na versão 3.10: Adicionado o parâmetro 'key'.

* Menu:

* Observações sobre desempenho::
* Buscando em listas ordenadas::
* Exemplos: Exemplos<3>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/bisect.py


File: python.info,  Node: Observações sobre desempenho,  Next: Buscando em listas ordenadas,  Up: bisect — Algoritmo de bisseção de vetor

5.8.7.1 Observações sobre desempenho
....................................

Ao escrever um código sensível ao tempo usando 'bisect()' e 'insort()',
lembre-se do seguinte:

   * A bisseção é eficaz para pesquisar intervalos de valores.  Para
     localizar valores específicos, os dicionários são mais eficientes.

   * As funções 'insort()' são 'O'('n') porque a etapa de busca
     logarítmica é dominada pela etapa de inserção de tempo linear.

   * As funções de busca são stateless e descartam os resultados da
     função chave depois que são usadas.  Consequentemente, se as
     funções de busca forem usadas em um laço, a função chave pode ser
     chamada repetidamente nos mesmos elementos do vetor.  Se a função
     chave não for rápida, considere envolvê-la com *note
     functools.cache(): 1607. para evitar cálculos duplicados.  Como
     alternativa, considere buscar um vetor de chaves pré-calculadas
     para localizar o ponto de inserção (conforme mostrado na seção de
     exemplos abaixo).

Ver também
..........

   * Sorted Collections(1) é um módulo de alto desempenho que usa
     bisseção para gerenciar coleções de dados classificadas.

   * A receita de SortedCollection(2) usa bisseção para construir uma
     classe de coleção completa com métodos de busca diretos e suporte
     para uma função chave.  As chaves são pré-calculadas para
     economizar em chamadas desnecessárias para a função chave durante
     as buscas.

   ---------- Footnotes ----------

   (1) https://grantjenks.com/docs/sortedcollections/

   (2) https://code.activestate.com/recipes/577197-sortedcollection/


File: python.info,  Node: Buscando em listas ordenadas,  Next: Exemplos<3>,  Prev: Observações sobre desempenho,  Up: bisect — Algoritmo de bisseção de vetor

5.8.7.2 Buscando em listas ordenadas
....................................

As *note funções de bisseção: 26df. acima são úteis para encontrar
pontos de inserção, mas podem ser complicadas ou difíceis de usar para
tarefas comuns de busca.  As cinco funções a seguir mostram como
transformá-las nas buscas padrão para listas ordenadas:

     def index(a, x):
         'Encontra o valor mais à esquerda exatamente igual a x'
         i = bisect_left(a, x)
         if i != len(a) and a[i] == x:
             return i
         raise ValueError

     def find_lt(a, x):
         'Encontra o valor mais à direita menor que x'
         i = bisect_left(a, x)
         if i:
             return a[i-1]
         raise ValueError

     def find_le(a, x):
         'Encontra o valor mais à direita menor ou igual a x'
         i = bisect_right(a, x)
         if i:
             return a[i-1]
         raise ValueError

     def find_gt(a, x):
         'Encontra o valor mais à esquerda maior que x'
         i = bisect_right(a, x)
         if i != len(a):
             return a[i]
         raise ValueError

     def find_ge(a, x):
         'Encontra o item mais à esquerda maior ou igual a x'
         i = bisect_left(a, x)
         if i != len(a):
             return a[i]
         raise ValueError


File: python.info,  Node: Exemplos<3>,  Prev: Buscando em listas ordenadas,  Up: bisect — Algoritmo de bisseção de vetor

5.8.7.3 Exemplos
................

A função *note bisect(): 26e2. pode ser útil para buscas em tabelas
numéricas.  Este exemplo usa *note bisect(): 26e2. para buscar uma nota
em letra para uma pontuação de exame (digamos) com base em um conjunto
de pontos de interrupção numéricos ordenados: 90 e acima é um “A”, 80 a
89 é um “B” e por aí vai:

     >>> def grade(score, breakpoints=[60, 70, 80, 90], grades='FDCBA'):
     ...     i = bisect(breakpoints, score)
     ...     return grades[i]
     ...
     >>> [grade(score) for score in [33, 99, 77, 70, 89, 90, 100]]
     ['F', 'A', 'C', 'C', 'B', 'A', 'A']

As funções *note bisect(): 26e2. e *note insort(): 26e4. também
funcionam com listas de tuplas.  O argumento 'key' pode servir para
extrair o campo usado para ordenar registros em uma tabela:

     >>> from collections import namedtuple
     >>> from operator import attrgetter
     >>> from bisect import bisect, insort
     >>> from pprint import pprint

     >>> Movie = namedtuple('Movie', ('name', 'released', 'director'))

     >>> movies = [
     ...     Movie('Jaws', 1975, 'Spielberg'),
     ...     Movie('Titanic', 1997, 'Cameron'),
     ...     Movie('The Birds', 1963, 'Hitchcock'),
     ...     Movie('Aliens', 1986, 'Cameron')
     ... ]

     >>> # Encontra o primeiro filme lançado após 1960
     >>> by_year = attrgetter('released')
     >>> movies.sort(key=by_year)
     >>> movies[bisect(movies, 1960, key=by_year)]
     Movie(name='The Birds', released=1963, director='Hitchcock')

     >>> # Insere um filme enquanto mantém a ordem de classificação
     >>> romance = Movie('Love Story', 1970, 'Hiller')
     >>> insort(movies, romance, key=by_year)
     >>> pprint(movies)
     [Movie(name='The Birds', released=1963, director='Hitchcock'),
      Movie(name='Love Story', released=1970, director='Hiller'),
      Movie(name='Jaws', released=1975, director='Spielberg'),
      Movie(name='Aliens', released=1986, director='Cameron'),
      Movie(name='Titanic', released=1997, director='Cameron')]

Se a função chave for custosa, é possível evitar chamadas de função
repetidas buscando uma lista de chaves pré-calculadas para encontrar o
índice de um registro:

     >>> data = [('red', 5), ('blue', 1), ('yellow', 8), ('black', 0)]
     >>> data.sort(key=lambda r: r[1])       # Ou use operator.itemgetter(1).
     >>> keys = [r[1] for r in data]         # Pré-calcula uma lista de chaves.
     >>> data[bisect_left(keys, 0)]
     ('black', 0)
     >>> data[bisect_left(keys, 1)]
     ('blue', 1)
     >>> data[bisect_left(keys, 5)]
     ('red', 5)
     >>> data[bisect_left(keys, 8)]
     ('yellow', 8)


File: python.info,  Node: array— Vetores eficientes de valores numéricos,  Next: weakref — Referências fracas,  Prev: bisect — Algoritmo de bisseção de vetor,  Up: Tipos de Dados

5.8.8 ‘array’— Vetores eficientes de valores numéricos
------------------------------------------------------

__________________________________________________________________

This module defines an object type which can compactly represent an
array of basic values: characters, integers, floating-point numbers.
Arrays are mutable *note sequence: 4f1. types and behave very much like
lists, except that the type of objects stored in them is constrained.
The type is specified at object creation time by using a 'type code',
which is a single character.  The following type codes are defined:

Código de       Tipo em C                Tipo em Python          Tamanho mínimo em bytes     Notas
tipo                                                                                         

---------------------------------------------------------------------------------------------------------
                                                                                             
‘'b'’           signed char              int                     1
                                                                 
                                                                                             
‘'B'’           unsigned char            int                     1
                                                                 
                                                                                             
‘'u'’           wchar_t                  Caractere unicode       2                           (1)
                                                                                             
                                                                                             
‘'w'’           Py_UCS4                  Caractere unicode       4                           (2)
                                                                                             
                                                                                             
‘'h'’           signed short             int                     2
                                                                 
                                                                                             
‘'H'’           unsigned short           int                     2
                                                                 
                                                                                             
‘'i'’           signed int               int                     2
                                                                 
                                                                                             
‘'I'’           unsigned int             int                     2
                                                                 
                                                                                             
‘'l'’           signed long              int                     4
                                                                 
                                                                                             
‘'L'’           unsigned long            int                     4
                                                                 
                                                                                             
‘'q'’           signed long long         int                     8
                                                                 
                                                                                             
‘'Q'’           unsigned long long       int                     8
                                                                 
                                                                                             
‘'f'’           ponto flutuante          ponto flutuante         4
                                                                 
                                                                                             
‘'d'’           double                   ponto flutuante         8
                                                                 

Notas:

  1. Pode ser de 16 ou 32 bits dependendo da plataforma.

     Alterado na versão 3.9: ‘array('u')’ agora usa ‘wchar_t’ como tipo
     C no lugar do descontinuado ‘Py_UNICODE’.  Essa mudança não afeta o
     comportamento pois ‘Py_UNICODE’ é um apelido para ‘wchar_t’ desde
     Python 3.3.

     Descontinuado desde a versão 3.3, será removido na versão 3.16: Por
     favor, migre para o código de tipo ‘'w'’.

  2. 
     Adicionado na versão 3.13.

A representação dos valores é definida pela arquitetura da máquina, mais
especificamente da implementação do C. O tamanho real pode ser acessado
pelo atributo *note array.itemsize: 26ec.

O módulo define o seguinte item:

 -- Dado: array.typecodes

     String com todos os códigos de tipo disponíveis.

O módulo define o seguinte tipo:

 -- Classe: array.array (typecode[, initializer])

     Um novo vetor cujos itens são restritos por 'typecode' e
     inicializados a partir do valor opcional 'initializer', que deve
     ser um objeto *note bytes: 1c2. ou *note bytearray: 2ea, uma string
     Unicode ou iterável sobre elementos do tipo apropriado.

     Se for fornecido um objeto *note bytes: 1c2. ou *note bytearray:
     2ea, o inicializador é passado para o método *note frombytes():
     12b3. do novo vetor; se for fornecida uma string Unicode, o
     inicializador é passado para o método *note fromunicode(): 26ee.;
     caso contrário, o iterador do inicializador é passado para o método
     *note extend(): 26ef. para adicionar itens iniciais ao vetor.

     Array objects support the ordinary *note mutable: 22f7. *note
     sequence: 4f1. operations of indexing, slicing, concatenation, and
     multiplication.  When using slice assignment, the assigned value
     must be an array object with the same type code; in all other
     cases, *note TypeError: 2c3. is raised.  Array objects also
     implement the buffer interface, and may be used wherever *note
     bytes-like objects: d4f. are supported.

     Levanta um *note evento de auditoria: 19fa. ‘array.__new__’ com os
     argumentos ‘typecode’, ‘initializer’.

      -- Atributo: typecode

          O caractere de código de tipo usado para criar o vetor.

      -- Atributo: itemsize

          O tamanho em bytes de um item do vetor em representação
          interna.

      -- Método: append (x)

          Adiciona um novo item com valor 'x' ao final do vetor.

      -- Método: buffer_info ()

          Retorna uma tupla ‘(address, length)’ com o endereço corrente
          da memória e o tamanho em elementos do buffer usado para
          armazenar conteúdos do vetor.  O tamanho do buffer da memória
          em bytes pode ser computado como ‘array.buffer_info()[1] *
          array.itemsize’.  Isso é ocasionalmente útil quando se está
          trabalhando com interfaces I/O de baixo nível (inerentemente
          inseguras) que precisam de endereços de memória, como algumas
          operações ‘ioctl()’.  Os números retornados são válidos
          enquanto o vetor existir e nenhuma operação de alteração de
          tamanho for aplicada a ele.

               Nota: Quando se está usando vetores de código escrito em
               C ou C++ (o único jeito efetivo de usar essa informação),
               faz mais sentido usar a interface do buffer suportada
               pelos vetores.  Esse método é mantido para
               retrocompatibilidade e deve ser evitado em código novo.
               A interface de buffers está documentada em *note
               Protocolo de buffer: 2e8.

      -- Método: byteswap ()

          “Byteswap” todos os itens do vetor.  Isso é somente suportado
          para valores de 1, 2, 4 ou 8 bytes de tamanho; para outros
          tipos de valores é levantada *note RuntimeError: 195.  Isso é
          útil quando estamos lendo dados de um arquivo para serem
          escritos em um arquivo de outra máquina de ordem de bytes
          diferente.

      -- Método: count (x)

          Retorna a quantidade de ocorrências de 'x' no vetor.

      -- Método: extend (iterable)

          Acrescenta os itens de 'iterable' ao final do vetor.  Se
          'iterable' for outro vetor, ele deve ter 'exatamente' o mesmo
          código de tipo; senão, ocorrerá uma *note TypeError: 2c3.  Se
          'iterable' não for um vetor, ele deve ser iterável e seus
          elementos devem ser do tipo correto para ser acrescentado ao
          vetor.

      -- Método: frombytes (buffer)

          Adiciona itens do *note objeto bytes ou similar: d4f,
          interpretando seu conteúdo como um vetor de valores de máquina
          (como se tivesse sido lido de um arquivo usando o método *note
          fromfile(): 1303.).

          Adicionado na versão 3.2: ‘fromstring()’ foi renomeado para
          *note frombytes(): 12b3. para maior clareza.

      -- Método: fromfile (f, n)

          Lê 'n' itens (como valores de máquinas) do *note objeto
          arquivo: 1203. 'f' e adiciona-os ao fim do vetor.  Se estão
          disponíveis menos de 'n' itens, *note EOFError: 131c. é
          levantada, mas os itens disponíveis ainda são inseridos ao
          final do vetor.

      -- Método: fromlist (list)

          Adiciona itens de 'list'.  Isso é equivalente a ‘for x in
          list: a.append(x)’ exceto que se ocorrer um erro de tipo, o
          vetor não é alterado.

      -- Método: fromunicode (s)

          Estende este vetor com dados da string Unicode fornecida.  O
          vetor deve ter o código de tipo ‘'u'’ ou ‘'w'’; caso
          contrário, uma *note ValueError: 202. é levantada.  Use
          ‘array.frombytes(unicodestring.encode(enc))’ para anexar dados
          Unicode a um vetor de algum outro tipo.

      -- Método: index (x[, start[, stop]])

          Retorna o menor 'i' tal que 'i' seja o índice da primeira
          ocorrência de 'x' no vetor.  Os argumentos opcionais 'start' e
          'stop' podem ser especificados para procurar por 'x' dentro de
          uma subseção do vetor.  Levanta *note ValueError: 202. se 'x'
          não for encontrado.

          Alterado na versão 3.10: Adicionados os parâmetros opcionais
          'start e *stop'.

      -- Método: insert (i, x)

          Insere um novo item com o valor 'x' no vetor antes da posição
          'i'.  Valores negativos são tratados como sendo em relação ao
          fim do vetor.

      -- Método: pop ([i])

          Remove o item com o índice 'i' do vetor e retorna este item.
          O valor padrão do argumento opcional é ‘-1’, assim por padrão
          o último item é removido e retornado.

      -- Método: remove (x)

          Remove a primeira ocorrência de 'x' do vetor.

      -- Método: clear ()

          Remove todos os elementos do vetor.

          Adicionado na versão 3.13.

      -- Método: reverse ()

          Inverte a ordem dos itens no vetor.

      -- Método: tobytes ()

          Devolve os itens do vetor como um vetor de valores de máquina
          com a representação em bytes (a mesma sequência de bytes que
          seria escrita pelo método *note tofile(): 1304.)

          Adicionado na versão 3.2: ‘tostring()’ foi nomeado para *note
          tobytes(): 12b2. para maior clareza.

      -- Método: tofile (f)

          Escreve todos os itens (como valores de máquinas) para o *note
          objeto arquivo: 1203. 'f'.

      -- Método: tolist ()

          Devolve os itens do vetor como uma lista comum.

      -- Método: tounicode ()

          Devolve os itens do vetor como uma string Unicode.  O vetor
          deve ser do tipo ‘'u'’ ou ‘'w'’; caso contrário *note
          ValueError: 202. é levantada.  Use
          ‘array.tobytes().decode(enc)’ para obter uma string Unicode de
          um vetor de outros tipos.

A representação em string de objetos vetor tem o formato
‘array(typecode, initializer)’.  O 'initializer' é omitido se o vetor
estiver vazio; caso contrário, é uma string Unicode se o 'typecode' for
‘'u'’ ou ‘'w'’; caso contrário, é uma lista de números.  A representação
em string pode ser convertida novamente para um array com o mesmo tipo e
valor usando *note eval(): 180, desde que a classe *note array: 1a0.
tenha sido importada usando ‘from array import array’.  As variáveis
‘inf’ e ‘nan’ também devem ser definidas se contiverem valores de ponto
flutuante correspondentes.  Exemplos:

     array('l')
     array('w', 'hello \u2641')
     array('l', [1, 2, 3, 4, 5])
     array('d', [1.0, 2.0, 3.14, -inf, nan])

Ver também
..........

Módulo *note struct: d5.

     Empacotamento e desempacotamento de dados binários heterogêneos.

NumPy(1)

     O pacote NumPy define outro tipo de vetor.

   ---------- Footnotes ----------

   (1) https://numpy.org/


File: python.info,  Node: weakref — Referências fracas,  Next: types — Criação de tipos dinâmicos e nomes para tipos embutidos,  Prev: array— Vetores eficientes de valores numéricos,  Up: Tipos de Dados

5.8.9 ‘weakref’ — Referências fracas
------------------------------------

'Código-fonte:' Lib/weakref.py(1)

__________________________________________________________________

O módulo *note weakref: 114. permite ao programador Python criar
'referências fracas' para objetos.

A seguir, o termo 'referente' significa o objeto ao qual é referido por
uma referência fraca.

Uma referência fraca a um objeto não é suficiente para mantê-lo vivo:
quando as únicas referências restantes a um referente são referências
fracas, a *note coleta de lixo: 1a69. está livre para destruir o
referente e reutilizar sua memória para outra coisa.  Entretanto, até
que o objeto seja realmente destruído, a referência fraca poderá
retornar o objeto mesmo que não haja referências fortes a ele.

Um uso principal para referências fracas é implementar caches ou
mapeamentos contendo objetos grandes, onde é desejado que um objeto
grande não seja mantido ativo apenas porque aparece em um cache ou
mapeamento.

Por exemplo, se você tiver vários objetos de imagem binária grandes,
poderá associar um nome a cada um.  Se você usasse um dicionário Python
para mapear nomes para imagens, ou imagens para nomes, os objetos de
imagem permaneceriam vivos apenas porque apareceriam como valores ou
chaves nos dicionários.  As classes *note WeakKeyDictionary: 1ae6. e
*note WeakValueDictionary: 1ae5. fornecidas pelo módulo *note weakref:
114. são uma alternativa, usando referências fracas para construir
mapeamentos que não mantêm objetos vivos apenas porque aparecem nos
objetos de mapeamento.  Se, por exemplo, um objeto de imagem for um
valor em um *note WeakValueDictionary: 1ae5, então quando as últimas
referências restantes a esse objeto de imagem forem as referências
fracas mantidas por mapeamentos fracos, a coleta de lixo poderá
recuperar o objeto e suas entradas correspondentes em mapeamentos fracos
são simplesmente excluídos.

*note WeakKeyDictionary: 1ae6. e *note WeakValueDictionary: 1ae5. usam
referências fracas em sua implementação, configurando funções de retorno
de chamada nas referências fracas que notificam os dicionários fracos
quando uma chave ou valor foi recuperado pela coleta de lixo.  *note
WeakSet: 5dd. implementa a interface *note set: 5d9, mas mantém
referências fracas aos seus elementos, assim como *note
WeakKeyDictionary: 1ae6. faz.

*note finalize: a86. fornece uma maneira direta de registrar uma função
de limpeza a ser chamada quando um objeto é coletado como lixo.  Isso é
mais simples de usar do que configurar uma função de retorno de chamada
em uma referência fraca não tratada, pois o módulo garante
automaticamente que o finalizador permaneça ativo até que o objeto seja
coletado.

A maioria dos programas deve descobrir que usar um desses tipos de
contêineres fracos ou *note finalize: a86. é tudo que eles precisam –
geralmente não é necessário criar suas próprias referências fracas
diretamente.  O maquinário de baixo nível é exposto pelo módulo *note
weakref: 114. para benefício de usos avançados.

Nem todos os objetos podem ser referenciados de maneira fraca.  Objetos
que oferecem suporte a referências fracas incluem instâncias de classe,
funções escritas em Python (mas não em C), métodos de instância,
conjuntos, frozensets, alguns *note objetos arquivos: 1203, *note
geradores: 109a, objetos tipo, sockets, arrays, deques, objetos padrão
de expressão regular e objetos código.

Alterado na versão 3.2: Adicionado suporte para thread.lock,
threading.Lock e objetos código.

Vários tipos embutidos como *note list: 611. e *note dict: 256. não
oferecem suporta diretamente a referências fracas, mas podem adicionar
suporte através de subclasses:

     class Dict(dict):
         pass

     obj = Dict(red=1, green=2, blue=3)   # este objeto é potencialmente fracamente referenciável

Outros tipos embutidos como *note tuple: 370. e *note int: 257. não
oferecem suporte a referências fracas mesmo em subclasses.

Os tipos de extensão podem ser facilmente criados para oferecer suporte
a referências fracas; veja *note Weak Reference Support: 26ff.

Quando ‘__slots__’ são definidos para um determinado tipo, o suporte a
referência fraca é desativado a menos que uma string ‘'__weakref__'’
também esteja presente na sequência de strings na declaração de
‘__slots__’.  Veja a *note documentação de __slots__: 20c2. para
detalhes.

 -- Classe: weakref.ref (object[, callback])

     Retorna uma referência fraca para 'object'.  O objeto original pode
     ser recuperado chamando o objeto referência se o referente ainda
     estiver ativo; se o referente não estiver mais ativo, chamar o
     objeto referência fará com que *note None: 675. seja retornado.  Se
     'callback' for fornecido e não for *note None: 675, e o objeto
     referência fraca retornado ainda estiver ativo, o função de retorno
     será chamada quando o objeto estiver prestes a ser finalizado; o
     objeto referência fraca será passado como único parâmetro para a
     função de retorno; o referente não estará mais disponível.

     É permitido que muitas referências fracas sejam construídas para o
     mesmo objeto.  As funções de retorno registradas para cada
     referência fraca serão chamadas da função de retorno registrada
     mais recentemente para a função de retorno registrada mais antiga.

     As exceções levantadas pela função de retorno serão anotadas na
     saída de erro padrão, mas não poderão ser propagadas; elas são
     tratadas exatamente da mesma maneira que as exceções levantadas
     pelo método *note __del__(): 1033. de um objeto.

     Referências fracas são *note hasheáveis: 610. se o 'object' for
     hasheável.  Elas manterão seu valor de hash mesmo depois que
     'object' for excluído.  Se *note hash(): 5eb. for chamada pela
     primeira vez somente após o 'object' ter sido excluído, a chamada
     vai levantar *note TypeError: 2c3.

     Referências fracas oferecem suporte a testes de igualdade, mas não
     de ordenação.  Se os referentes ainda estiverem vivos, duas
     referências terão a mesma relação de igualdade que seus referentes
     (independentemente do 'callback').  Se um dos referentes tiver sido
     excluído, as referências serão iguais somente se os objetos
     referência forem o mesmo objeto.

     Este é um tipo do qual pode ser feita subclasse em vez de uma
     função de fábrica.

      -- Atributo: __callback__

          Este atributo somente leitura retorna a função de retorno
          atualmente associada à referência fraca.  Se não houver função
          de retorno ou se o referente da referência fraca não estiver
          mais ativo, então este atributo terá o valor ‘None’.

     Alterado na versão 3.4: Adicionado o atributo *note __callback__:
     1027.

 -- Função: weakref.proxy (object[, callback])

     Retorna um intermediário (proxy, em inglês) para 'object' que usa
     uma referência fraca.  Isto provê suporte ao uso do intermediário
     na maioria dos contextos, em vez de exigir a desreferenciação
     explícita usada com objetos de referência fraca.  O objeto
     retornado terá um tipo ‘ProxyType’ ou ‘CallableProxyType’,
     dependendo se 'object' é chamável.  Objetos intermediários não são
     *note hasheáveis: 610. independentemente do referente; isso evita
     uma série de problemas relacionados à sua natureza fundamentalmente
     mutável e impede seu uso como chaves de dicionário.  'callback' é
     igual ao parâmetro de mesmo nome da função *note ref(): 1026.

     Acessar um atributo do objeto intermediário depois que o referente
     é coletado como lixo levanta *note ReferenceError: 1556.

     Alterado na versão 3.8: Estendeu o suporte ao operador em objetos
     intermediários para incluir os operadores ‘@’ e ‘@=’ para
     multiplicação de matrizes.

 -- Função: weakref.getweakrefcount (object)

     Retorna o número de referências fracas e intermediários que fazem
     referência a 'object'.

 -- Função: weakref.getweakrefs (object)

     Retorna uma lista de todos os objetos intermediários e de
     referência fraca que fazem referência a 'object'.

 -- Classe: weakref.WeakKeyDictionary ([dict])

     Classe de mapeamento que faz referência fraca a chaves.  Entradas
     no dicionário serão descartadas quando não houver mais uma
     referência forte à chave.  Isso pode ser usado para associar dados
     adicionais a um objeto de propriedade de outras partes de uma
     aplicação sem adicionar atributos a esses objetos.  Isso pode ser
     especialmente útil com objetos que substituem acessos de atributos.

     Note que quando uma chave com valor igual a uma chave existente
     (mas não identidade igual) é inserida no dicionário, ela substitui
     o valor, mas não substitui a chave existente.  Devido a isso,
     quando a referência à chave original é excluída, ela também exclui
     a entrada no dicionário:

          >>> class T(str): pass
          ...
          >>> k1, k2 = T(), T()
          >>> d = weakref.WeakKeyDictionary()
          >>> d[k1] = 1   # d = {k1: 1}
          >>> d[k2] = 2   # d = {k1: 2}
          >>> del k1      # d = {}

     Uma solução alternativa seria remover a chave antes da
     reatribuição:

          >>> class T(str): pass
          ...
          >>> k1, k2 = T(), T()
          >>> d = weakref.WeakKeyDictionary()
          >>> d[k1] = 1   # d = {k1: 1}
          >>> del d[k1]
          >>> d[k2] = 2   # d = {k2: 2}
          >>> del k1      # d = {k2: 2}

     Alterado na versão 3.9: Adicionado suporte para operadores ‘|’ e
     ‘|=’, conforme especificado na PEP 584(2).

Objetos *note WeakKeyDictionary: 1ae6. têm um método adicional que expõe
as referências internas diretamente.  Não há garantia de que as
referências estejam “ativas” no momento em que são usadas, então o
resultado da chamada das referências precisa ser verificado antes de ser
usado.  Isso pode ser usado para evitar a criação de referências que
farão com que o coletor de lixo mantenha as chaves por mais tempo do que
o necessário.

 -- Método: WeakKeyDictionary.keyrefs ()

     Retorna um iterável das referências fracas às chaves.

 -- Classe: weakref.WeakValueDictionary ([dict])

     Classe de mapeamento que faz referência fraca a valores.  Entradas
     no dicionário serão descartadas quando nenhuma referência forte ao
     valor existir mais.

     Alterado na versão 3.9: Adicionado suporte para operadores ‘|’ e
     ‘|=’, conforme especificado na PEP 584(3).

Os objetos *note WeakValueDictionary: 1ae5. têm um método adicional que
apresenta os mesmos problemas que o método *note
WeakKeyDictionary.keyrefs(): 2702.

 -- Método: WeakValueDictionary.valuerefs ()

     Retorna um iterável das referências fracas aos valores.

 -- Classe: weakref.WeakSet ([elements])

     Define a classe que mantém referências fracas para seus elementos.
     Um elemento será descartado quando nenhuma referência forte a ele
     existir mais.

 -- Classe: weakref.WeakMethod (method[, callback])

     Uma subclasse personalizada de *note ref: 1026. que simula uma
     referência fraca a um método vinculado (ou seja, um método definido
     em uma classe e pesquisado em uma instância).  Como um método
     vinculado é efêmero, uma referência fraca padrão não pode mantê-lo.
     *note WeakMethod: 1025. tem um código especial para recriar o
     método vinculado até que o objeto ou a função original morra:

          >>> class C:
          ...     def method(self):
          ...         print("method called!")
          ...
          >>> c = C()
          >>> r = weakref.ref(c.method)
          >>> r()
          >>> r = weakref.WeakMethod(c.method)
          >>> r()
          <bound method C.method of <__main__.C object at 0x7fc859830220>>
          >>> r()()
          method called!
          >>> del c
          >>> gc.collect()
          0
          >>> r()
          >>>

     'callback' é o mesmo que o parâmetro de mesmo nome da função *note
     ref(): 1026.

     Adicionado na versão 3.4.

 -- Classe: weakref.finalize (obj, func, /, *args, **kwargs)

     Retorna um objeto finalizador chamável que será chamado quando
     'obj' for coletado como lixo.  Diferentemente de uma referência
     fraca comum, um finalizador sempre sobreviverá até que o objeto
     referência seja coletado, simplificando muito o gerenciamento do
     ciclo de vida.

     Um finalizador é considerado 'alive' (vivo) até ser chamado
     (explicitamente ou na coleta de lixo), e depois disso ele é 'dead'
     (morto).  Chamar um finalizador vivo retorna o resultado da
     avaliação de ‘func(*arg, **kwargs)’, enquanto chamar um finalizador
     morto retorna *note None: 675.

     Exceções levantadas por funções de retorno do finalizador durante a
     coleta de lixo serão mostradas na saída de erro padrão, mas não
     podem ser propagadas.  Elas são tratadas da mesma forma que
     exceções levantadas de um método *note __del__(): 1033. de um
     objeto ou de uma função de retorno da referência fraca.

     Quando o programa é encerrado, cada finalizador vivo restante é
     chamado, a menos que seu atributo *note atexit: c. tenha sido
     definido como falso.  Eles são chamados na ordem reversa da
     criação.

     Um finalizador nunca vai invocar sua função de retorno durante a
     parte posterior do *note desligamento do interpretador: 14e. quando
     os globais do módulo podem ter sido substituídos por *note None:
     675.

      -- Método: __call__ ()

          Se 'self' estiver vivo, marca-o como morto e retorna o
          resultado da chamada ‘func(*args, **kwargs)’.  Se 'self'
          estiver morto, retorna *note None: 675.

      -- Método: detach ()

          Se 'self' estiver vivo, marca-o como morto e retorna a tupla
          ‘(obj, func, args, kwargs)’.  Se 'self' estiver morto, retorna
          *note None: 675.

      -- Método: peek ()

          Se 'self' estiver vivo, retorna a tupla ‘(obj, func, args,
          kwargs)’.  Se 'self' estiver morto, retorna *note None: 675.

      -- Atributo: alive

          Propriedade que é verdadeiro se o finalizador estiver ativo,
          falsa caso contrário.

      -- Atributo: atexit

          Uma propriedade booleana gravável que por padrão é verdadeiro.
          Quando o programa sai, ele chama todos os finalizadores vivos
          restantes para os quais *note atexit: 2708. é verdadeiro.
          Eles são chamados na ordem reversa da criação.

          Nota: É importante garantir que 'func', 'args' e 'kwargs' não
          possuam nenhuma referência a 'obj', direta ou indiretamente,
          pois, caso contrário, 'obj' nunca será coletado como lixo.  Em
          particular, 'func' não deve ser um método vinculado de 'obj'.

     Adicionado na versão 3.4.

 -- Dado: weakref.ReferenceType

     O objeto tipo para objetos referências fracas.

 -- Dado: weakref.ProxyType

     O tipo de objeto para intermediários de objetos que não são
     chamáveis.

 -- Dado: weakref.CallableProxyType

     O objeto de tipo para intermediários de objetos chamáveis.

 -- Dado: weakref.ProxyTypes

     Sequência contendo todos os objetos de tipo para intermediários.
     Isso pode tornar mais simples testar se um objeto é um
     intermediário sem depender da nomeação de ambos os tipos de
     intermediário.

Ver também
..........

PEP 205(4) - Weak References

     A proposta e a justificativa para esse recurso, incluindo links
     para implementações anteriores e informações sobre recursos
     semelhantes em outras linguagens.

* Menu:

* Objetos referência fraca::
* Exemplo: Exemplo<2>.
* Objetos finalizadores::
* Comparando finalizadores com métodos __del__(): Comparando finalizadores com métodos __del__.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/weakref.py

   (2) https://peps.python.org/pep-0584/

   (3) https://peps.python.org/pep-0584/

   (4) https://peps.python.org/pep-0205/


File: python.info,  Node: Objetos referência fraca,  Next: Exemplo<2>,  Up: weakref — Referências fracas

5.8.9.1 Objetos referência fraca
................................

Objetos referência fraca não têm métodos nem atributos além de *note
ref.__callback__: 1027.  Um objeto referência fraca permite que o
referente seja obtido, se ele ainda existir, chamando-o:

     >>> import weakref
     >>> class Object:
     ...     pass
     ...
     >>> o = Object()
     >>> r = weakref.ref(o)
     >>> o2 = r()
     >>> o is o2
     True

Se o referente não existir mais, chamar o objeto referência retornará
*note None: 675.:

     >>> del o, o2
     >>> print(r())
     None

O teste de se um objeto referência fraca ainda está vivo deve ser feito
usando a expressão ‘ref() is not None’.  Normalmente, o código da
aplicação que precisa usar um objeto de referência deve seguir este
padrão:

     # r é um objeto referência fraca
     o = r()
     if o is None:
         # referente foi coletado como lixo
         print("O objeto foi desalocado; não é possível mexer com ele.")
     else:
         print("O objeto ainda está vivo!")
         o.faz_algo_útil()

Usar um teste separado para “vivacidade” cria condições de corrida em
aplicações que usam mais de uma thread; uma outra thread pode fazer com
que uma referência fraca seja invalidada antes que a referência fraca
seja chamada; o idioma mostrado acima é seguro em aplicações que usam
mais de uma thread, bem como em aplicações de thread única.

Versões especializadas de objetos *note ref: 1026. podem ser criadas por
meio de subclasse.  Isso é usado na implementação do *note
WeakValueDictionary: 1ae5. para reduzir a sobrecarga de memória para
cada entrada no mapeamento.  Isso pode ser mais útil para associar
informações adicionais a uma referência, mas também pode ser usado para
inserir processamento adicional em chamadas para recuperar o referente.

Este exemplo mostra como uma subclasse de *note ref: 1026. pode ser
usada para armazenar informações adicionais sobre um objeto e afetar o
valor retornado quando o referente é acessado:

     import weakref

     class ExtendedRef(weakref.ref):
         def __init__(self, ob, callback=None, /, **annotations):
             super().__init__(ob, callback)
             self.__counter = 0
             for k, v in annotations.items():
                 setattr(self, k, v)

         def __call__(self):
             """Retorna um par contendo o referente e o número de
             vezes que a referência foi chamada.
             """
             ob = super().__call__()
             if ob is not None:
                 self.__counter += 1
                 ob = (ob, self.__counter)
             return ob


File: python.info,  Node: Exemplo<2>,  Next: Objetos finalizadores,  Prev: Objetos referência fraca,  Up: weakref — Referências fracas

5.8.9.2 Exemplo
...............

Este exemplo simples mostra como uma aplicação pode usar IDs de objeto
para recuperar objetos que ele viu antes.  Os IDs dos objetos podem
então ser usados em outras estruturas de dados sem forçar os objetos a
permanecerem vivos, mas os objetos ainda podem ser recuperados por ID se
o fizerem.

     import weakref

     _id2obj_dict = weakref.WeakValueDictionary()

     def remember(obj):
         oid = id(obj)
         _id2obj_dict[oid] = obj
         return oid

     def id2obj(oid):
         return _id2obj_dict[oid]


File: python.info,  Node: Objetos finalizadores,  Next: Comparando finalizadores com métodos __del__,  Prev: Exemplo<2>,  Up: weakref — Referências fracas

5.8.9.3 Objetos finalizadores
.............................

O principal benefício de usar *note finalize: a86. é que ele simplifica
o registro de um retorno de chamada sem precisar preservar o objeto
finalizador retornado.  Por exemplo

     >>> import weakref
     >>> class Object:
     ...     pass
     ...
     >>> kenny = Object()
     >>> weakref.finalize(kenny, print, "You killed Kenny!")
     <finalize object at ...; for 'Object' at ...>
     >>> del kenny
     You killed Kenny!

O finalizador pode ser chamado diretamente também.  No entanto, o
finalizador vai invocar a função de retorno no máximo uma vez.

     >>> def callback(x, y, z):
     ...     print("CALLBACK")
     ...     return x + y + z
     ...
     >>> obj = Object()
     >>> f = weakref.finalize(obj, callback, 1, 2, z=3)
     >>> assert f.alive
     >>> assert f() == 6
     CALLBACK
     >>> assert not f.alive
     >>> f()                     # callback not called because finalizer dead
     >>> del obj                 # callback not called because finalizer dead

Você pode desfazer o registro de um finalizador usando seu método *note
detach(): 2705.  Isso elimina o finalizador e retorna os argumentos
passados ao construtor quando ele foi criado.

     >>> obj = Object()
     >>> f = weakref.finalize(obj, callback, 1, 2, z=3)
     >>> f.detach()
     (<...Object object ...>, <function callback ...>, (1, 2), {'z': 3})
     >>> newobj, func, args, kwargs = _
     >>> assert not f.alive
     >>> assert newobj is obj
     >>> assert func(*args, **kwargs) == 6
     CALLBACK

A menos que você defina o atributo *note atexit: 2708. como *note False:
b49, um finalizador será chamado quando o programa sair se ele ainda
estiver vivo.  Por exemplo

     >>> obj = Object()
     >>> weakref.finalize(obj, print, "obj dead or exiting")
     <finalize object at ...; for 'Object' at ...>
     >>> exit()
     obj dead or exiting


File: python.info,  Node: Comparando finalizadores com métodos __del__,  Prev: Objetos finalizadores,  Up: weakref — Referências fracas

5.8.9.4 Comparando finalizadores com métodos ‘__del__()’
........................................................

Suponha que queremos criar uma classe cujas instâncias representam
diretórios temporários.  Os diretórios devem ser excluídos com seus
conteúdos quando o primeiro dos seguintes eventos ocorrer:

   * o objeto é um lixo coletado,

   * o método ‘remove()’ do objeto é chamado, ou

   * o programa finaliza.

Podemos tentar implementar a classe usando um método *note __del__():
1033. da seguinte maneira:

     class TempDir:
         def __init__(self):
             self.name = tempfile.mkdtemp()

         def remove(self):
             if self.name is not None:
                 shutil.rmtree(self.name)
                 self.name = None

         @property
         def removed(self):
             return self.name is None

         def __del__(self):
             self.remove()

A partir do Python 3.4, os métodos *note __del__(): 1033. não impedem
mais que os ciclos de referência sejam coletados como lixo, e os módulos
globais não são mais forçados a *note None: 675. durante *note
desligamento do interpretador: 14e.  Então, esse código deve funcionar
sem problemas no CPython.

Entretanto, o tratamento dos métodos *note __del__(): 1033. é
notoriamente específico da implementação, pois depende de detalhes
internos da implementação do coletor de lixo do interpretador.

Uma alternativa mais robusta pode ser definir um finalizador que faça
referência apenas às funções e objetos específicos de que necessita, em
vez de ter acesso ao estado completo do objeto:

     class TempDir:
         def __init__(self):
             self.name = tempfile.mkdtemp()
             self._finalizer = weakref.finalize(self, shutil.rmtree, self.name)

         def remove(self):
             self._finalizer()

         @property
         def removed(self):
             return not self._finalizer.alive

Definido assim, nosso finalizador recebe apenas uma referência aos
detalhes que ele precisa para limpar o diretório apropriadamente.  Se o
objeto nunca for coletado como lixo, o finalizador ainda será chamado na
saída.

A outra vantagem dos finalizadores baseados em referências fracas é que
eles podem ser usados para registrar finalizadores para classes onde a
definição é controlada por terceiros, como executar código quando um
módulo é descarregado:

     import weakref, sys
     def unloading_module():
         # referência implícita aos globais do módulo do corpo da função
     weakref.finalize(sys.modules[__name__], unloading_module)

     Nota: Se você criar um objeto finalizador em uma thread em um
     daemon assim que o programa sair, então há a possibilidade de que o
     finalizador não seja chamado na saída.  No entanto, em um thread em
     um daemon *note atexit.register(): 882, ‘try: ... finally: ...’ e
     ‘with: ...’ não garantem que a limpeza ocorra também.


File: python.info,  Node: types — Criação de tipos dinâmicos e nomes para tipos embutidos,  Next: copy — Operações de cópia profunda e cópia rasa,  Prev: weakref — Referências fracas,  Up: Tipos de Dados

5.8.10 ‘types’ — Criação de tipos dinâmicos e nomes para tipos embutidos
------------------------------------------------------------------------

'Código-fonte:' Lib/types.py(1)

__________________________________________________________________

Este módulo define funções utilitárias para auxiliar na criação dinâmica
de novos tipos.

Também define nomes para alguns tipos de objetos usados pelo
interpretador Python padrão, mas não expostos como componentes embutidos
como *note int: 257. ou *note str: 44c. são.

Por fim, fornece algumas classes e funções adicionais relacionadas ao
tipo que não são fundamentais o suficiente para serem incorporadas.

* Menu:

* Criação de tipos dinâmicos::
* Tipos padrão do interpretador::
* Classes e funções de utilidades adicionais::
* Funções de utilidade de corrotina::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/types.py


File: python.info,  Node: Criação de tipos dinâmicos,  Next: Tipos padrão do interpretador,  Up: types — Criação de tipos dinâmicos e nomes para tipos embutidos

5.8.10.1 Criação de tipos dinâmicos
...................................

 -- Função: types.new_class (name, bases=(), kwds=None, exec_body=None)

     Cria um objeto de classe dinamicamente usando a metaclasse
     apropriada.

     Os três primeiros argumentos são os componentes que compõem um
     cabeçalho de definição de classe: o nome da classe, as classes base
     (em ordem), os argumentos nomeados (como ‘metaclass’).

     O argumento 'exec_body' é um retorno de chamada usado para
     preencher o espaço para nome da classe recém-criado.  Ele deve
     aceitar o espaço para nome da classe como seu único argumento e
     atualizar o espaço para nome diretamente com o conteúdo da classe.
     Se nenhum retorno de chamada for fornecido, ele terá o mesmo efeito
     que passar em ‘lambda ns: None’.

     Adicionado na versão 3.3.

 -- Função: types.prepare_class (name, bases=(), kwds=None)

     Calcula a metaclasse apropriada e cria o espaço de nomes da classe.

     Os argumentos são os componentes que compõem um cabeçalho de
     definição de classe: o nome da classe, as classes base (em ordem) e
     os argumentos nomeados (como ‘metaclass’).

     O valor de retorno é uma tupla de 3: ‘metaclass, namespace, kwds’

     'metaclass' é a metaclasse apropriada, 'namespace' é o espaço de
     nomes da classe preparada e 'kwds' é uma cópia atualizada do
     argumento passado no 'kwds' com qualquer entrada ‘'metaclass'’
     removida.  Se nenhum argumento 'kwds' for passado, este será um
     ditado vazio.

     Adicionado na versão 3.3.

     Alterado na versão 3.6: O valor padrão para o elemento ‘namespace’
     da tupla retornada foi alterado.  Agora, um mapeamento
     preservando-ordem-inserção é usado quando a metaclasse não possui
     um método ‘__prepare__’.

Ver também
..........

*note Metaclasses: 2100.

     Detalhes completos do processo de criação de classe suportado por
     essas funções

PEP 3115(1) - Metaclasses no Python 3000

     Introduzido o gancho de espaço de nomes ‘__prepare__’

 -- Função: types.resolve_bases (bases)

     Resolve entradas MRO dinamicamente, conforme especificado pela PEP
     560(2).

     Esta função procura por itens em 'bases' que não sejam instâncias
     de *note type: d6b. e retorna uma tupla onde cada objeto que possui
     um método *note __mro_entries__(): afc. é substituído por um
     resultado desempacotado da chamada desse método.  Se um item
     'bases' é uma instância de *note type: d6b, ou não possui o método
     ‘__mro_entries__()’, ele é incluído na tupla de retorno inalterada.

     Adicionado na versão 3.7.

 -- Função: types.get_original_bases (cls, /)

     Retorna a tupla de objetos originalmente dados como as bases de
     'cls' antes do método *note __mro_entries__(): afc. ter sido
     chamado em qualquer base (seguindo os mecanismos apresentados na
     PEP 560(3)).  Isso é útil para introspecção de *note Generics: 4cf.

     Para classes que possuem um atributo ‘__orig_bases__’, esta função
     retorna o valor de ‘cls.__orig_bases__’.  Para classes sem o
     atributo ‘__orig_bases__’, *note cls.__bases__: 14f4. é retornado.

     Exemplos:

          from typing import TypeVar, Generic, NamedTuple, TypedDict

          T = TypeVar("T")
          class Foo(Generic[T]): ...
          class Bar(Foo[int], float): ...
          class Baz(list[str]): ...
          Eggs = NamedTuple("Eggs", [("a", int), ("b", str)])
          Spam = TypedDict("Spam", {"a": int, "b": str})

          assert Bar.__bases__ == (Foo, float)
          assert get_original_bases(Bar) == (Foo[int], float)

          assert Baz.__bases__ == (list,)
          assert get_original_bases(Baz) == (list[str],)

          assert Eggs.__bases__ == (tuple,)
          assert get_original_bases(Eggs) == (NamedTuple,)

          assert Spam.__bases__ == (dict,)
          assert get_original_bases(Spam) == (TypedDict,)

          assert int.__bases__ == (object,)
          assert get_original_bases(int) == (object,)

     Adicionado na versão 3.12.

Ver também
..........

PEP 560(4) - Suporte básico para módulo typing e tipos genéricos

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3115/

   (2) https://peps.python.org/pep-0560/

   (3) https://peps.python.org/pep-0560/

   (4) https://peps.python.org/pep-0560/


File: python.info,  Node: Tipos padrão do interpretador,  Next: Classes e funções de utilidades adicionais,  Prev: Criação de tipos dinâmicos,  Up: types — Criação de tipos dinâmicos e nomes para tipos embutidos

5.8.10.2 Tipos padrão do interpretador
......................................

Este módulo fornece nomes para muitos dos tipos necessários para
implementar um interpretador Python.  Evita deliberadamente incluir
alguns dos tipos que surgem apenas incidentalmente durante o
processamento, como o tipo ‘listiterator’.

O uso típico desses nomes é para verificações *note isinstance(): 442.
ou *note issubclass(): 7c2.

Se você instanciar algum desses tipos, observe que as assinaturas podem
variar entre as versões do Python.

Os nomes padrão são definidos para os seguintes tipos:

 -- Dado: types.NoneType

     O tipo de *note None: 675.

     Adicionado na versão 3.10.

 -- Dado: types.FunctionType
 -- Dado: types.LambdaType

     O tipo de funções definidas pelo usuário e funções criadas por
     expressões *note lambda: 12df.

     Levanta um *note evento de auditoria: 19fa. ‘function.__new__’ com
     o argumento ‘code’.

     O evento de auditoria ocorre apenas para instanciação direta de
     objetos de função e não é levantado para compilação normal.

 -- Dado: types.GeneratorType

     O tipo de objetos de iterador *note gerador: 109a, criados pelas
     funções de gerador.

 -- Dado: types.CoroutineType

     O tipo de objetos de *note corrotina: 491, criado por funções de
     *note async def: 5d1.

     Adicionado na versão 3.5.

 -- Dado: types.AsyncGeneratorType

     O tipo de objetos de iterador *note gerador assíncrono: 21cf,
     criados pelas funções do gerador assíncrono.

     Adicionado na versão 3.6.

 -- Classe: types.CodeType (**kwargs)

     O tipo de *note objetos código: 1d2. retornados por *note
     compile(): 192.

     Levanta um ‘code.__new__’ de *note evento de auditoria: 19fa. com
     os argumentos ‘code’, ‘filename’, ‘name’, ‘argcount’,
     ‘posonlyargcount’, ‘kwonlyargcount’, ‘nlocals’, ‘stacksize’,
     ‘flags’.

     Observe que os argumentos auditados podem não corresponder aos
     nomes ou posições exigidos pelo inicializador.  O evento de
     auditoria ocorre apenas para instanciação direta de objetos de
     código e não é levantado para compilação normal.

 -- Dado: types.CellType

     O tipo para objetos de célula: tais objetos são usados como
     contêineres para as *note variáveis de clausura: 20d1. de uma
     função.

     Adicionado na versão 3.8.

 -- Dado: types.MethodType

     O tipo de método de instâncias de classe definidas pelo usuário.

 -- Dado: types.BuiltinFunctionType
 -- Dado: types.BuiltinMethodType

     O tipo de funções embutidas como *note len(): 62e. ou *note
     sys.exit(): 138e, e métodos de classes embutidas.  (Aqui, o termo
     “embutidas” significa “escrito em C”.)

 -- Dado: types.WrapperDescriptorType

     O tipo de método de alguns tipos de dados embutidos e classes base,
     como *note object.__init__(): 6b0. ou *note object.__lt__(): 12e2.

     Adicionado na versão 3.7.

 -- Dado: types.MethodWrapperType

     O tipo de métodos 'vinculados' de alguns tipos de dados embutidos e
     classes base.  Por exemplo, é o tipo de ‘object().__str__’.

     Adicionado na versão 3.7.

 -- Dado: types.NotImplementedType

     O tipo de *note NotImplemented: 7d3.

     Adicionado na versão 3.10.

 -- Dado: types.MethodDescriptorType

     O tipo de método de alguns tipos de dados embutidos, como *note
     str.join(): 2340.

     Adicionado na versão 3.7.

 -- Dado: types.ClassMethodDescriptorType

     O tipo de métodos de classe 'não vinculados' de alguns tipos de
     dados embutidos, como ‘dict.__dict__['fromkeys']’.

     Adicionado na versão 3.7.

 -- Classe: types.ModuleType (name, doc=None)

     O tipo de *note módulos: 1755.  O construtor aceita o nome do
     módulo a ser criado e, opcionalmente, seu *note docstring: 22bd.

     Ver também
     ..........

     *note Documentação em objetos de módulo: 20a1.

          Fornece detalhes sobre os atributos especiais que podem ser
          encontrados em instâncias de ‘ModuleType’.

     *note importlib.util.module_from_spec(): e3e.

          Módulos criados usando o construtor ‘ModuleType’ são criados
          com muitos de seus atributos especiais não definidos ou
          definidos com valores padrão.  ‘module_from_spec()’ fornece
          uma maneira mais robusta de criar instâncias ‘ModuleType’, o
          que garante que os vários atributos sejam definidos
          adequadamente.

 -- Dado: types.EllipsisType

     O tipo de *note Ellipsis: 231c.

     Adicionado na versão 3.10.

 -- Classe: types.GenericAlias (t_origin, t_args)

     O tipo dos *note genéricos parametrizados: 6b2. como ‘list[int]’.

     ‘t_origin’ deve ser uma classe genérica não parametrizada, como
     ‘list’, ‘tuple’ ou ‘dict’.  ‘t_args’ deve ser uma *note tuple: 370.
     (possivelmente com comprimento 1) de tipos que parametrizam
     ‘t_origin’:

          >>> from types import GenericAlias

          >>> list[int] == GenericAlias(list, (int,))
          True
          >>> dict[str, int] == GenericAlias(dict, (str, int))
          True

     Adicionado na versão 3.9.

     Alterado na versão 3.9.2: Este tipo pode agora ter uma subclasse.

     Ver também
     ..........

     *note Tipos Generic Alias: 6b2.

          Documentação detalhada sobre instâncias de
          ‘types.GenericAlias’

     PEP 585(1) - Sugestão de tipo para Genéricos em coleções padrão

          Apresentação da classe ‘types.GenericAlias’

 -- Classe: types.UnionType

     The type of *note union type expressions: 7c3.

     Adicionado na versão 3.10.

 -- Classe: types.TracebackType (tb_next, tb_frame, tb_lasti, tb_lineno)

     O tipo de objetos traceback, como encontrados em
     ‘sys.exception().__traceback__’.

     Veja *note a referência de linguagem: b07. para detalhes dos
     atributos e operações disponíveis, e orientação sobre como criar
     tracebacks dinamicamente.

 -- Dado: types.FrameType

     O tipo de *note objetos de quadro: 6e0. como encontrado em *note
     tb.tb_frame: 20e4. se ‘tb’ é um objeto traceback.

 -- Dado: types.GetSetDescriptorType

     O tipo de objetos definidos em módulos de extensão com
     ‘PyGetSetDef’, como *note FrameType.f_locals: 182. ou
     ‘array.array.typecode’.  Este tipo é usado como descritor para
     atributos de objeto; tem o mesmo propósito que o tipo *note
     property: 194, mas para classes definidas em módulos de extensão.

 -- Dado: types.MemberDescriptorType

     O tipo de objetos definidos em módulos de extensão com
     ‘PyMemberDef’, como ‘datetime.timedelta.days’.  Este tipo é usado
     como descritor para membros de dados C simples que usam funções de
     conversão padrão; tem o mesmo propósito que o tipo *note property:
     194, mas para classes definidas em módulos de extensão.

     Além disso, quando uma classe é definida com um atributo *note
     __slots__: 1533, então para cada atributo, uma instância de
     ‘MemberDescriptorType’ será adicionada como um atributo na classe.
     Isso permite que o atributo apareça no *note __dict__: c78. da
     classe.

     Em outras implementações de Python, este tipo pode ser idêntico a
     ‘GetSetDescriptorType’.

 -- Classe: types.MappingProxyType (mapping)

     Proxy somente leitura de um mapeamento.  Ele fornece uma visão
     dinâmica das entradas do mapeamento, o que significa que quando o
     mapeamento muda, a visão reflete essas mudanças.

     Adicionado na versão 3.3.

     Alterado na versão 3.9: Atualizado para ter suporte ao novo
     operador de união (‘|’) da PEP 584(2), que simplesmente delega para
     o mapeamento subjacente.

      -- Describe: key in proxy

          Retorna ‘True’ se o mapeamento subjacente tiver uma chave
          'key', senão ‘False’.

      -- Describe: proxy[key]

          Retorna e o item do mapeamento subjacente com a chave 'key'.
          Levanta um *note KeyError: 344. se 'key' não estiver no
          mapeamento subjacente.

      -- Describe: iter(proxy)

          Retorna um iterador sobre as chaves do mapeamento subjacente.
          Este é um atalho para ‘iter(proxy.keys())’.

      -- Describe: len(proxy)

          Retorna o número de itens no mapeamento subjacente.

      -- Método: copy ()

          Retorna uma cópia rasa do mapeamento subjacente.

      -- Método: get (key[, default])

          Retorna o valor para 'key' se 'key' estiver no mapeamento
          subjacente, caso contrário, 'default'.  Se 'default' não for
          fornecido, o padrão é ‘None’, de forma que este método nunca
          levante uma *note KeyError: 344.

      -- Método: items ()

          Retorna uma nova visão dos itens do mapeamento subjacente
          (pares ‘(chave, valor)’).

      -- Método: keys ()

          Retorna uma nova visão das chaves do mapeamento subjacente.

      -- Método: values ()

          Retorna uma nova visão dos valores do mapeamento subjacente.

      -- Describe: reversed(proxy)

          Retorna um iterador reverso sobre as chaves do mapeamento
          subjacente.

          Adicionado na versão 3.9.

      -- Describe: hash(proxy)

          Retorna um hash do mapeamento subjacente.

          Adicionado na versão 3.12.

 -- Classe: types.CapsuleType

     O tipo de *note objetos cápsula: 2723.

     Adicionado na versão 3.13.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0585/

   (2) https://peps.python.org/pep-0584/


File: python.info,  Node: Classes e funções de utilidades adicionais,  Next: Funções de utilidade de corrotina,  Prev: Tipos padrão do interpretador,  Up: types — Criação de tipos dinâmicos e nomes para tipos embutidos

5.8.10.3 Classes e funções de utilidades adicionais
...................................................

 -- Classe: types.SimpleNamespace

     Uma subclasse *note object: a96. simples que fornece acesso de
     atributo ao seu espaço de nomes, bem como um repr significativo.

     Ao contrário de *note object: a96, com ‘SimpleNamespace’ você pode
     adicionar e remover atributos.

     Objetos *note SimpleNamespace: 1d1. podem ser inicializados da
     mesma forma que *note dict: 256.: ou com argumentos nomeados, com
     um único argumento posicional, ou com ambos.  Quando inicializados
     com argumentos nomeados, eles são adicionados diretamente ao espaço
     de nomes subjacente.  Alternativamente, quando inicializado com um
     argumento posicional, o espaço de nomes subjacente será atualizado
     com pares de valores-chave desse argumento (um objeto mapeamento ou
     um objeto *note iterável: 1268. produzindo pares de valores-chave).
     Todas essas chaves devem ser strings.

     O tipo é aproximadamente equivalente ao seguinte código:

          class SimpleNamespace:
              def __init__(self, mapping_or_iterable=(), /, **kwargs):
                  self.__dict__.update(mapping_or_iterable)
                  self.__dict__.update(kwargs)

              def __repr__(self):
                  items = (f"{k}={v!r}" for k, v in self.__dict__.items())
                  return "{}({})".format(type(self).__name__, ", ".join(items))

              def __eq__(self, other):
                  if isinstance(self, SimpleNamespace) and isinstance(other, SimpleNamespace):
                     return self.__dict__ == other.__dict__
                  return NotImplemented

     ‘SimpleNamespace’ pode ser útil como um substituto para ‘class NS:
     pass’.  No entanto, para um tipo de registro estruturado, use *note
     namedtuple(): 1ca.

     Objetos ‘SimpleNamespace’ são suportados por *note copy.replace():
     151.

     Adicionado na versão 3.3.

     Alterado na versão 3.9: A ordem dos atributos no repr mudou de
     alfabética para inserção (como no ‘dict’).

     Alterado na versão 3.13: Adicionado suporte para um argumento
     posicional opcional.

 -- Função: types.DynamicClassAttribute (fget=None, fset=None,
          fdel=None, doc=None)

     Roteia o acesso ao atributo em uma classe para __getattr__.

     Este é um descritor, usado para definir atributos que atuam de
     forma diferente quando acessados por meio de uma instância e por
     meio de uma classe.  O acesso à instância permanece normal, mas o
     acesso a um atributo por meio de uma classe será roteado para o
     método __getattr__ da classe; isso é feito levantando
     AttributeError.

     Isso permite ter propriedades ativas em uma instância, e ter
     atributos virtuais na classe com o mesmo nome (veja *note
     enum.Enum: 630. para um exemplo).

     Adicionado na versão 3.4.


File: python.info,  Node: Funções de utilidade de corrotina,  Prev: Classes e funções de utilidades adicionais,  Up: types — Criação de tipos dinâmicos e nomes para tipos embutidos

5.8.10.4 Funções de utilidade de corrotina
..........................................

 -- Função: types.coroutine (gen_func)

     Esta função transforma uma função *note geradora: 109a. em uma
     *note função de corrotina: d9b. que retorna uma corrotina baseada
     em gerador.  A corrotina baseada em gerador ainda é um *note
     iterador gerador: bf9, mas também é considerada um objeto *note
     corrotina: 491. e é *note aguardável: 1ad.  No entanto, pode não
     necessariamente implementar o método *note __await__(): d9d.

     Se 'gen_func' for uma função geradora, ela será modificada no
     local.

     Se 'gen_func' não for uma função geradora, ela será envolta.  Se
     ele retornar uma instância de ‘Collections.abc.Generator’, a
     instância será envolvida em um objeto proxy 'aguardável'.  Todos os
     outros tipos de objetos serão retornados como estão.

     Adicionado na versão 3.5.


File: python.info,  Node: copy — Operações de cópia profunda e cópia rasa,  Next: pprint — Impressão bonita de dados,  Prev: types — Criação de tipos dinâmicos e nomes para tipos embutidos,  Up: Tipos de Dados

5.8.11 ‘copy’ — Operações de cópia profunda e cópia rasa
--------------------------------------------------------

'Código-fonte:' Lib/copy.py(1)

__________________________________________________________________

As instruções de atribuição no Python não copiam objetos; elas criam
ligações entre um destino e um objeto.  Para coleções mutáveis ou que
contêm itens mutáveis, às vezes é necessária uma cópia para que seja
possível alterar uma sem alterar a outra.  Este módulo fornece operações
genéricas de cópia profunda e rasa (explicadas abaixo).

Resumo da interface:

 -- Função: copy.copy (obj)

     Retorna uma cópia rasa de 'obj'.

 -- Função: copy.deepcopy (obj[, memo])

     Retorna uma cópia profunda de 'obj'.

 -- Função: copy.replace (obj, /, **changes)

     Cria um novo objeto do mesmo tipo que 'obj', substituindo os campos
     pelos valores de 'changes'.

     Adicionado na versão 3.13.

 -- Exceção: copy.Error

     Levantada para erros específicos do módulo.
A diferença entre cópia profunda e rasa é relevante apenas para objetos
compostos (objetos que contêm outros objetos, como listas ou instâncias
de classe):

   * Uma 'cópia rasa' constrói um novo objeto composto e, na medida do
     possível, insere nele 'referências' aos objetos encontrados no
     original.

   * Uma 'cópia profunda' constrói um novo objeto composto e então,
     recursivamente, insere nele 'cópias' dos objetos encontrados no
     original.

Frequentemente, existem dois problemas com operações de cópia profunda
que não existem com operações de cópia rasa:

   * Objetos recursivos (objetos compostos que, direta ou indiretamente,
     contêm uma referência a si mesmos) podem causar um laço recursivo.

   * Como a cópia profunda copia tudo, ela pode copiar muito, incluindo
     dados que devem ser compartilhados entre as cópias.

A função *note deepcopy(): b84. evita esses problemas:

   * mantendo um dicionário ‘memo’ de objetos já copiados durante a
     passagem de cópia atual; e

   * permitindo que as classes definidas pelo usuário substituam a
     operação de cópia ou o conjunto de componentes copiados.

Este módulo não copia tipos como módulo, método, stack trace (situação
da pilha de execução), quadro de empilhamento, arquivo, soquete, janela
ou outros tipos semelhantes.  Ele “copia” funções e classes (rasas e
profundamente), devolvendo o objeto original inalterado; isso é
compatível com a maneira como estes itens são tratados pelo módulo *note
pickle: a6.

Cópias rasas de dicionários podem ser feitas usando *note dict.copy():
be9, e de listas, atribuindo uma fatia de toda a lista, por exemplo:
‘lista_copiada = lista_original[:]’.

As classes podem usar as mesmas interfaces para controlar a cópia que
usam para controlar a serialização com pickle.  Veja a descrição do
módulo *note pickle: a6. para obter informações sobre esses métodos.  Na
verdade, o módulo *note copy: 25. usa as funções pickle registradas do
módulo *note copyreg: 26.

Para que uma classe defina sua própria implementação de cópia, ela pode
definir métodos especiais *note __copy__(): 15fc. e *note
__deepcopy__(): 15fd.

 -- Método: object.__copy__ (self)

     Chamado para implementar a operação de cópia rasa; não é fornecido
     nenhum argumento adicional.

 -- Método: object.__deepcopy__ (self, memo)

     Chamado para implementar a operação de cópia profunda; é passado um
     argumento, o dicionário 'memo'.  Se a implementação ‘__deepcopy__’
     precisar fazer uma cópia profunda de um componente, ela deve chamar
     a função *note deepcopy(): b84. com o componente como primeiro
     argumento e o dicionário 'memo' como segundo argumento.  O
     dicionário 'memo' deve ser tratado como um objeto opaco.

A função ‘copy.replace()’ é mais limitada que *note copy(): 534. e *note
deepcopy(): b84, e tem suporte apenas a tuplas nomeadas criadas por
*note namedtuple(): 1ca, *note dataclasses: 2f. e outras classes que
definem o método *note __replace__(): 152.

 -- Método: object.__replace__ (self, /, **changes)

     Este método deve criar um novo objeto do mesmo tipo, substituindo
     os campos pelos valores de 'changes'.

     Adicionado na versão 3.13.

Ver também
..........

Módulo *note pickle: a6.

     Discussão dos métodos especiais usados para dar suporte à
     recuperação e à restauração do estado do objeto.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/copy.py


File: python.info,  Node: pprint — Impressão bonita de dados,  Next: reprlib — Implementação alternativa à repr,  Prev: copy — Operações de cópia profunda e cópia rasa,  Up: Tipos de Dados

5.8.12 ‘pprint’ — Impressão bonita de dados
-------------------------------------------

'Código-fonte:' Lib/pprint.py(1)

__________________________________________________________________

O módulo *note pprint: ae. fornece a capacidade de “imprimir de forma
bonita” estruturas de dados Python arbitrárias em um formato que pode
ser usado como entrada para o interpretador.  Se as estruturas
formatadas incluírem objetos que não sejam tipos fundamentais do Python,
a representação poderá não ser carregável.  Este pode ser o caso se
objetos como arquivos, soquetes ou classes forem incluídos, bem como
muitos outros objetos que não são representáveis como literais do
Python.

A representação formatada mantém os objetos em uma única linha, se
possível, e os divide em múltiplas linhas se eles não couberem na
largura permitida, ajustável pelo parâmetro 'width' padrão para 80
caracteres.

Alterado na versão 3.9: Adicionado suporte para impressão bonita de
*note types.SimpleNamespace: 1d1.

Alterado na versão 3.10: Adicionado suporte para impressão bonita de
*note dataclasses.dataclass: 1cb.

* Menu:

* Funções: Funções<4>.
* Objetos PrettyPrinter::
* Exemplo: Exemplo<3>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/pprint.py


File: python.info,  Node: Funções<4>,  Next: Objetos PrettyPrinter,  Up: pprint — Impressão bonita de dados

5.8.12.1 Funções
................

 -- Função: pprint.pp (object, stream=None, indent=1, width=80,
          depth=None, *, compact=False, sort_dicts=False,
          underscore_numbers=False)

     Imprime a representação formatada de 'object', seguida por uma nova
     linha.  Esta função pode ser usado no interpretador interativo em
     vez da função *note print(): fa9. para inspecionar valores.  Dica:
     você pode reatribuir ‘print = pprint.pp’ para uso dentro de um
     escopo.


     Parâmetros:

        * ‘object’ – O objeto a ser impresso.

        * ‘stream’ (*note file-like object: 15cf. | None) – Um objeto
          arquivo ou similar no qual a saída será gravada chamando seu
          método ‘write()’.  Se ‘None’ (o padrão), *note sys.stdout:
          ae6. será usado.

        * ‘indent’ (*note int: 257.) – A quantidade de indentação
          adicionado para cada nível de aninhamento.

        * ‘width’ (*note int: 257.) – O número máximo desejado de
          caracteres por linha na saída.  Se uma estrutura não puder ser
          formatada dentro da restrição de largura, será feito o melhor
          esforço.

        * ‘depth’ (*note int: 257.‘ | ’‘None’) – O número de níveis de
          aninhamento que podem ser impressos.  Se a estrutura de dados
          que está sendo impressa for muito profunda, o próximo nível
          contido será substituído por ‘...’.  Se ‘None’ (o padrão), não
          há restrição na profundidade dos objetos que estão sendo
          formatados.

        * ‘compact’ (*note bool: 468.) – Controla a forma como *note
          sequências: 4f1. são formatadas.  Se ‘False’ (o padrão), cada
          item de uma sequência será formatado em uma linha separada,
          caso contrário, tantos itens quantos couberem na 'largura'
          serão formatados em cada linha de saída.

        * ‘sort_dicts’ (*note bool: 468.) – Se ‘True’, os dicionários
          serão formatados com suas chaves classificadas, caso
          contrário, serão exibidos na ordem de inserção (o padrão).

        * ‘underscore_numbers’ (*note bool: 468.) – Se ‘True’, os
          números inteiros serão formatados com o caractere ‘_’ para um
          separador de milhares, caso contrário, os sublinhados não
          serão exibidos (o padrão).

          >>> import pprint
          >>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']
          >>> stuff.insert(0, stuff)
          >>> pprint.pp(stuff)
          [<Recursion on list with id=...>,
           'spam',
           'eggs',
           'lumberjack',
           'knights',
           'ni']

     Adicionado na versão 3.8.

 -- Função: pprint.pprint (object, stream=None, indent=1, width=80,
          depth=None, *, compact=False, sort_dicts=True,
          underscore_numbers=False)

     Apelido para *note pp(): a2d. com 'sort_dicts' definido como ‘True’
     por padrão, o que classificaria automaticamente as chaves dos
     dicionários, você pode querer usar *note pp(): a2d. em vez disso,
     onde é ‘False’ por padrão.

 -- Função: pprint.pformat (object, indent=1, width=80, depth=None, *,
          compact=False, sort_dicts=True, underscore_numbers=False)

     Retorna a representação formatada de 'object' como uma string.
     'indent', 'width', 'depth', 'compact', 'sort_dicts' e
     'underscore_numbers' são passados para o construtor de *note
     PrettyPrinter: fb3. como parâmetros de formatação e seus
     significados são descritos na documentação acima.

 -- Função: pprint.isreadable (object)

     Determina se a representação formatada de 'object' é “legível” ou
     pode ser usada para reconstruir o valor usando *note eval(): 180.
     Isso sempre retorna ‘False’ para objetos recursivos.

          >>> pprint.isreadable(stuff)
          False

 -- Função: pprint.isrecursive (object)

     Determina se 'object' requer uma representação recursiva.  Esta
     função está sujeita às mesmas limitações mencionadas em *note
     saferepr(): 2731. abaixo e pode levantar uma exceção *note
     RecursionError: d90. se falhar em detectar um objeto recursivo.

 -- Função: pprint.saferepr (object)

     Retorna uma representação de string de 'object', protegida contra
     recursão em algumas estruturas de dados comuns, nomeadamente
     instâncias de *note dict: 256, *note list: 611. e *note tuple: 370.
     ou subclasses cujo ‘__repr__’ não foi substituído.  Se a
     representação do objeto expõe uma entrada recursiva, a referência
     recursiva será representada como ‘<Recursion on typename with
     id=number>’.  A representação não é formatada de outra forma.

          >>> pprint.saferepr(stuff)
          "[<Recursion on list with id=...>, 'spam', 'eggs', 'lumberjack', 'knights', 'ni']"


File: python.info,  Node: Objetos PrettyPrinter,  Next: Exemplo<3>,  Prev: Funções<4>,  Up: pprint — Impressão bonita de dados

5.8.12.2 Objetos PrettyPrinter
..............................

 -- Classe: pprint.PrettyPrinter (indent=1, width=80, depth=None,
          stream=None, *, compact=False, sort_dicts=True,
          underscore_numbers=False)

     Constrói uma instância *note PrettyPrinter: fb3.

     Os argumentos têm o mesmo significado que para *note pp(): a2d.
     Observe que eles estão em uma ordem diferente e que o padrão
     'sort_dicts' é ‘True’.

          >>> import pprint
          >>> stuff = ['spam', 'eggs', 'lumberjack', 'knights', 'ni']
          >>> stuff.insert(0, stuff[:])
          >>> pp = pprint.PrettyPrinter(indent=4)
          >>> pp.pprint(stuff)
          [   ['spam', 'eggs', 'lumberjack', 'knights', 'ni'],
              'spam',
              'eggs',
              'lumberjack',
              'knights',
              'ni']
          >>> pp = pprint.PrettyPrinter(width=41, compact=True)
          >>> pp.pprint(stuff)
          [['spam', 'eggs', 'lumberjack',
            'knights', 'ni'],
           'spam', 'eggs', 'lumberjack', 'knights',
           'ni']
          >>> tup = ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead',
          ... ('parrot', ('fresh fruit',))))))))
          >>> pp = pprint.PrettyPrinter(depth=6)
          >>> pp.pprint(tup)
          ('spam', ('eggs', ('lumberjack', ('knights', ('ni', ('dead', (...)))))))

     Alterado na versão 3.4: Adicionado o parâmetro 'compact'.

     Alterado na versão 3.8: Adicionado o parâmetro 'sort_dicts'.

     Alterado na versão 3.10: Adicionado o parâmetro
     'underscore_numbers'.

     Alterado na versão 3.11: Não tenta mais escrever em ‘sys.stdout’ se
     for ‘None’.

Instâncias *note PrettyPrinter: fb3. contêm os seguintes métodos:

 -- Método: PrettyPrinter.pformat (object)

     Retorna a representação formatada de 'object'.  Isso leva em
     consideração as opções passadas para o construtor *note
     PrettyPrinter: fb3.

 -- Método: PrettyPrinter.pprint (object)

     Exibe a representação formatada de 'object' no fluxo configurado,
     seguida por uma nova linha.

Os métodos a seguir fornecem as implementações para as funções
correspondentes com os mesmos nomes.  Usar esses métodos em uma
instância é um pouco mais eficiente já que novos objetos *note
PrettyPrinter: fb3. não precisam ser criados.

 -- Método: PrettyPrinter.isreadable (object)

     Determina se a representação formatada do objeto é “legível” ou
     pode ser usada para reconstruir o valor usando *note eval(): 180.
     Observe que isso retorna ‘False’ para objetos recursivos.  Se o
     parâmetro 'depth' de *note PrettyPrinter: fb3. estiver definido e o
     objeto for mais profundo que o permitido, isso retornará ‘False’.

 -- Método: PrettyPrinter.isrecursive (object)

     Determina se o objeto requer uma representação recursiva.

Este método é fornecido como um gancho para permitir que as subclasses
modifiquem a maneira como os objetos são convertidos em strings.  A
implementação padrão usa os componentes internos da implementação de
*note saferepr(): 2731.

 -- Método: PrettyPrinter.format (object, context, maxlevels, level)

     Retorna três valores: a versão formatada de 'object' como uma
     string, um sinalizador indicando se o resultado é legível e um
     sinalizador indicando se a recursão foi detectada.  O primeiro
     argumento é o objeto a ser apresentado.  O segundo é um dicionário
     que contém o *note id(): 146a. de objetos que fazem parte do
     contexto de apresentação atual (contêineres diretos e indiretos
     para 'objects' que estão afetando a apresentação) como chaves; se
     for necessário apresentar um objeto que já esteja representado em
     'context', o terceiro valor de retorno deverá ser ‘True’.  Chamadas
     recursivas ao método *note format(): 1a74. devem adicionar entradas
     adicionais para contêineres neste dicionário.  O terceiro
     argumento, 'maxlevels', fornece o limite solicitado para recursão;
     será ‘0’ se não houver limite solicitado.  Este argumento deve ser
     passado sem modificações para chamadas recursivas.  O quarto
     argumento, 'level', fornece o nível atual; chamadas recursivas
     devem receber um valor menor que o da chamada atual.


File: python.info,  Node: Exemplo<3>,  Prev: Objetos PrettyPrinter,  Up: pprint — Impressão bonita de dados

5.8.12.3 Exemplo
................

Para demonstrar vários usos da função *note pp(): a2d. e seus
parâmetros, vamos buscar informações sobre um projeto no PyPI(1):

     >>> import json
     >>> import pprint
     >>> from urllib.request import urlopen
     >>> with urlopen('https://pypi.org/pypi/sampleproject/1.2.0/json') as resp:
     ...     project_info = json.load(resp)['info']

Em sua forma básica, *note pp(): a2d. mostra o objeto inteiro:

     >>> pprint.pp(project_info)
     {'author': 'The Python Packaging Authority',
      'author_email': 'pypa-dev@googlegroups.com',
      'bugtrack_url': None,
      'classifiers': ['Development Status :: 3 - Alpha',
                      'Intended Audience :: Developers',
                      'License :: OSI Approved :: MIT License',
                      'Programming Language :: Python :: 2',
                      'Programming Language :: Python :: 2.6',
                      'Programming Language :: Python :: 2.7',
                      'Programming Language :: Python :: 3',
                      'Programming Language :: Python :: 3.2',
                      'Programming Language :: Python :: 3.3',
                      'Programming Language :: Python :: 3.4',
                      'Topic :: Software Development :: Build Tools'],
      'description': 'A sample Python project\n'
                     '=======================\n'
                     '\n'
                     'This is the description file for the project.\n'
                     '\n'
                     'The file should use UTF-8 encoding and be written using '
                     'ReStructured Text. It\n'
                     'will be used to generate the project webpage on PyPI, and '
                     'should be written for\n'
                     'that purpose.\n'
                     '\n'
                     'Typical contents for this file would include an overview of '
                     'the project, basic\n'
                     'usage examples, etc. Generally, including the project '
                     'changelog in here is not\n'
                     'a good idea, although a simple "What\'s New" section for the '
                     'most recent version\n'
                     'may be appropriate.',
      'description_content_type': None,
      'docs_url': None,
      'download_url': 'UNKNOWN',
      'downloads': {'last_day': -1, 'last_month': -1, 'last_week': -1},
      'home_page': 'https://github.com/pypa/sampleproject',
      'keywords': 'sample setuptools development',
      'license': 'MIT',
      'maintainer': None,
      'maintainer_email': None,
      'name': 'sampleproject',
      'package_url': 'https://pypi.org/project/sampleproject/',
      'platform': 'UNKNOWN',
      'project_url': 'https://pypi.org/project/sampleproject/',
      'project_urls': {'Download': 'UNKNOWN',
                       'Homepage': 'https://github.com/pypa/sampleproject'},
      'release_url': 'https://pypi.org/project/sampleproject/1.2.0/',
      'requires_dist': None,
      'requires_python': None,
      'summary': 'A sample Python project',
      'version': '1.2.0'}

O resultado pode ser limitado a uma certa 'depth' (reticências são
usadas para conteúdos mais profundos):

     >>> pprint.pp(project_info, depth=1)
     {'author': 'The Python Packaging Authority',
      'author_email': 'pypa-dev@googlegroups.com',
      'bugtrack_url': None,
      'classifiers': [...],
      'description': 'A sample Python project\n'
                     '=======================\n'
                     '\n'
                     'This is the description file for the project.\n'
                     '\n'
                     'The file should use UTF-8 encoding and be written using '
                     'ReStructured Text. It\n'
                     'will be used to generate the project webpage on PyPI, and '
                     'should be written for\n'
                     'that purpose.\n'
                     '\n'
                     'Typical contents for this file would include an overview of '
                     'the project, basic\n'
                     'usage examples, etc. Generally, including the project '
                     'changelog in here is not\n'
                     'a good idea, although a simple "What\'s New" section for the '
                     'most recent version\n'
                     'may be appropriate.',
      'description_content_type': None,
      'docs_url': None,
      'download_url': 'UNKNOWN',
      'downloads': {...},
      'home_page': 'https://github.com/pypa/sampleproject',
      'keywords': 'sample setuptools development',
      'license': 'MIT',
      'maintainer': None,
      'maintainer_email': None,
      'name': 'sampleproject',
      'package_url': 'https://pypi.org/project/sampleproject/',
      'platform': 'UNKNOWN',
      'project_url': 'https://pypi.org/project/sampleproject/',
      'project_urls': {...},
      'release_url': 'https://pypi.org/project/sampleproject/1.2.0/',
      'requires_dist': None,
      'requires_python': None,
      'summary': 'A sample Python project',
      'version': '1.2.0'}

Além disso, a largura 'width' máxima do caractere pode ser sugerida.  Se
um objeto longo não puder ser dividido, a largura especificada será
excedida:

     >>> pprint.pp(project_info, depth=1, width=60)
     {'author': 'The Python Packaging Authority',
      'author_email': 'pypa-dev@googlegroups.com',
      'bugtrack_url': None,
      'classifiers': [...],
      'description': 'A sample Python project\n'
                     '=======================\n'
                     '\n'
                     'This is the description file for the '
                     'project.\n'
                     '\n'
                     'The file should use UTF-8 encoding and be '
                     'written using ReStructured Text. It\n'
                     'will be used to generate the project '
                     'webpage on PyPI, and should be written '
                     'for\n'
                     'that purpose.\n'
                     '\n'
                     'Typical contents for this file would '
                     'include an overview of the project, '
                     'basic\n'
                     'usage examples, etc. Generally, including '
                     'the project changelog in here is not\n'
                     'a good idea, although a simple "What\'s '
                     'New" section for the most recent version\n'
                     'may be appropriate.',
      'description_content_type': None,
      'docs_url': None,
      'download_url': 'UNKNOWN',
      'downloads': {...},
      'home_page': 'https://github.com/pypa/sampleproject',
      'keywords': 'sample setuptools development',
      'license': 'MIT',
      'maintainer': None,
      'maintainer_email': None,
      'name': 'sampleproject',
      'package_url': 'https://pypi.org/project/sampleproject/',
      'platform': 'UNKNOWN',
      'project_url': 'https://pypi.org/project/sampleproject/',
      'project_urls': {...},
      'release_url': 'https://pypi.org/project/sampleproject/1.2.0/',
      'requires_dist': None,
      'requires_python': None,
      'summary': 'A sample Python project',
      'version': '1.2.0'}

   ---------- Footnotes ----------

   (1) https://pypi.org


File: python.info,  Node: reprlib — Implementação alternativa à repr,  Next: enum — Suporte a enumerações,  Prev: pprint — Impressão bonita de dados,  Up: Tipos de Dados

5.8.13 ‘reprlib’ — Implementação alternativa à ‘repr()’
-------------------------------------------------------

'Código-fonte:' Lib/reprlib.py(1)

__________________________________________________________________

O módulo ‘reprlib’ fornece um meio de produzir representações de objetos
com limites no tamanho das strings resultantes.  Isso é usado no
depurador Python e pode ser útil em outros contextos também.

Este módulo fornece uma classe, uma instância e uma função.

 -- Classe: reprlib.Repr (*, maxlevel=6, maxtuple=6, maxlist=6,
          maxarray=5, maxdict=4, maxset=6, maxfrozenset=6, maxdeque=6,
          maxstring=30, maxlong=40, maxother=30, fillvalue='...',
          indent=None)

     Classe que fornece serviços de formatação úteis na implementação de
     funções semelhantes à embutida *note repr(): 800.; limites de
     tamanho para diferentes tipos de objetos são adicionados para
     evitar a geração de representações excessivamente longas.

     Os argumentos nomeados do construtor podem ser usados como um
     atalho para definir os atributos da instância de *note Repr: 273d.
     O que significa que a inicialização a seguir:

          aRepr = reprlib.Repr(maxlevel=3)

     É equivalente a:

          aRepr = reprlib.Repr()
          aRepr.maxlevel = 3

     Consulte a seção *note Objetos Repr: 273e. para obter mais
     informações sobre atributos *note Repr: 273d.

     Alterado na versão 3.12: Permite que atributos sejam definidos por
     meio de argumentos nomeados.

 -- Dado: reprlib.aRepr

     Esta é uma instância de *note Repr: 273d. que é usada para fornecer
     a função *note repr(): 2740. descrita abaixo.  Alterar os atributos
     deste objeto afetará os limites de tamanho usados por *note repr():
     2740. e pelo depurador Python.

 -- Função: reprlib.repr (obj)

     Este é o método *note repr(): 2741. de ‘aRepr’.  Ele retorna uma
     string semelhante à retornada pela função embutida de mesmo nome,
     mas com limites na maioria dos tamanhos.

Além das ferramentas de limitação de tamanho, o módulo também fornece um
decorador para detectar chamadas recursivas para *note __repr__(): 61c.
e substituir uma string de espaço reservado.

 -- Função: @reprlib.recursive_repr (fillvalue='...')

     Decorador para métodos *note __repr__(): 61c. para detectar
     chamadas recursivas dentro da mesma thread.  Se uma chamada
     recursiva for feita, o 'fillvalue' é retornado; caso contrário, a
     chamada usual ‘__repr__()’ é feita.  Por exemplo:

          >>> from reprlib import recursive_repr
          >>> class MyList(list):
          ...     @recursive_repr()
          ...     def __repr__(self):
          ...         return '<' + '|'.join(map(repr, self)) + '>'
          ...
          >>> m = MyList('abc')
          >>> m.append(m)
          >>> m.append('x')
          >>> print(m)
          <'a'|'b'|'c'|...|'x'>

     Adicionado na versão 3.2.

* Menu:

* Objetos Repr::
* Estendendo objetos Repr::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/reprlib.py


File: python.info,  Node: Objetos Repr,  Next: Estendendo objetos Repr,  Up: reprlib — Implementação alternativa à repr

5.8.13.1 Objetos Repr
.....................

Instâncias *note Repr: 273d. fornecem vários atributos que podem ser
usados para fornecer limites de tamanho para as representações de
diferentes tipos de objetos e métodos que formatam tipos de objetos
específicos.

 -- Atributo: Repr.fillvalue

     Esta string é exibida para referências recursivas.  O padrão é
     ‘...’.

     Adicionado na versão 3.11.

 -- Atributo: Repr.maxlevel

     Limite de profundidade na criação de representações recursivas.  O
     padrão é ‘6’.

 -- Atributo: Repr.maxdict
 -- Atributo: Repr.maxlist
 -- Atributo: Repr.maxtuple
 -- Atributo: Repr.maxset
 -- Atributo: Repr.maxfrozenset
 -- Atributo: Repr.maxdeque
 -- Atributo: Repr.maxarray

     Limites no número de entradas representadas para o tipo de objeto
     nomeado.  O padrão é ‘4’ para *note maxdict: 2745, ‘5’ para *note
     maxarray: 274b. e ‘6’ para os demais.

 -- Atributo: Repr.maxlong

     Número máximo de caracteres na representação para um inteiro.  Os
     dígitos são omitidos a partir do meio.  O padrão é ‘40’.

 -- Atributo: Repr.maxstring

     Limite no número de caracteres na representação da string.  Observe
     que a representação “normal” da string é usada como fonte de
     caracteres: se sequências de escape forem necessárias na
     representação, elas poderão ser distorcidas quando a representação
     for encurtada.  O padrão é ‘30’.

 -- Atributo: Repr.maxother

     Este limite é usado para controlar o tamanho de tipos de objetos
     para os quais nenhum método de formatação específico está
     disponível no objeto *note Repr: 273d.  Ele é aplicado de maneira
     semelhante a *note maxstring: 274d.  O padrão é ‘20’.

 -- Atributo: Repr.indent

     Se este atributo for definido como ‘None’ (o padrão), a saída será
     formatada sem quebras de linha ou recuo, como o padrão *note
     repr(): 800.  Por exemplo:

          >>> example = [
          ...     1, 'spam', {'a': 2, 'b': 'spam eggs', 'c': {3: 4.5, 6: []}}, 'ham']
          >>> import reprlib
          >>> aRepr = reprlib.Repr()
          >>> print(aRepr.repr(example))
          [1, 'spam', {'a': 2, 'b': 'spam eggs', 'c': {3: 4.5, 6: []}}, 'ham']

     Se *note indent: 274f. for definido como uma string, cada nível de
     recursão será colocado em sua própria linha, recuado por essa
     string:

          >>> aRepr.indent = '-->'
          >>> print(aRepr.repr(example))
          [
          -->1,
          -->'spam',
          -->{
          -->-->'a': 2,
          -->-->'b': 'spam eggs',
          -->-->'c': {
          -->-->-->3: 4.5,
          -->-->-->6: [],
          -->-->},
          -->},
          -->'ham',
          ]

     Definir *note indent: 274f. como um valor inteiro positivo se
     comporta como se fosse definido como uma string com esse número de
     espaços:

          >>> aRepr.indent = 4
          >>> print(aRepr.repr(example))
          [
              1,
              'spam',
              {
                  'a': 2,
                  'b': 'spam eggs',
                  'c': {
                      3: 4.5,
                      6: [],
                  },
              },
              'ham',
          ]

     Adicionado na versão 3.12.

 -- Método: Repr.repr (obj)

     O equivalente ao *note repr(): 800. embutido que usa a formatação
     imposta pela instância.

 -- Método: Repr.repr1 (obj, level)

     Implementação recursiva usada por *note repr(): 2741.  Esta usa o
     tipo de 'obj' para determinar qual método de formatação chamar,
     passando 'obj' e 'level'.  Os métodos específicos de tipo devem
     chamar *note repr1(): 2750. para realizar a formatação recursiva,
     com ‘level - 1’ para o valor de 'level' na chamada recursiva.

 -- Método: Repr.repr_TYPE (obj, level)

     Métodos de formatação para tipos específicos são implementados como
     métodos com um nome baseado no nome do tipo.  No nome do método,
     'TYPE' é substituído por ‘'_'.join(type(obj).__name__.split())’.  O
     despacho para esses métodos é tratado por *note repr1(): 2750.
     Métodos específicos de tipo que precisam formatar um valor
     recursivamente devem chamar ‘self.repr1(subobj, level - 1)’.


File: python.info,  Node: Estendendo objetos Repr,  Prev: Objetos Repr,  Up: reprlib — Implementação alternativa à repr

5.8.13.2 Estendendo objetos Repr
................................

O uso de despacho dinâmico por *note Repr.repr1(): 2750. permite que
subclasses de *note Repr: 273d. adicionem suporte para tipos de objetos
embutidos adicionais ou modifiquem o tratamento de tipos já suportados.
Este exemplo mostra como suporte especial para objetos arquivo pode ser
adicionado:

     import reprlib
     import sys

     class MyRepr(reprlib.Repr):

         def repr_TextIOWrapper(self, obj, level):
             if obj.name in {'<stdin>', '<stdout>', '<stderr>'}:
                 return obj.name
             return repr(obj)

     aRepr = MyRepr()
     print(aRepr.repr(sys.stdin))         # exibe '<stdin>'

     <stdin>


File: python.info,  Node: enum — Suporte a enumerações,  Next: graphlib — Funcionalidade para operar com estruturas do tipo grafo,  Prev: reprlib — Implementação alternativa à repr,  Up: Tipos de Dados

5.8.14 ‘enum’ — Suporte a enumerações
-------------------------------------

Adicionado na versão 3.4.

'Código-fonte:' Lib/enum.py(1)

Important
.........

Esta página contêm informação de referência da API. Para tutorial e
discussão de tópicos mais avançados, consulte

   * *note Tutorial básico: 2756.

   * *note Tutorial avançado: 2757.

   * *note Livro de receitas de enum: 2758.

__________________________________________________________________

Uma enumeração:

   * é um conjunto de nomes simbólicos (membros) vinculados a valores
     únicos

   * pode ser iterado para retornar seus membros canônicos (ou seja, não
     incluindo apelidos) na ordem de definição

   * usa a sintaxe 'call' para retornar membros por valor

   * usa a sintaxe 'index' para retornar membros por nome

As enumerações são criadas usando a sintaxe de *note class: 131a. ou
usando a sintaxe de chamada de função:

     >>> from enum import Enum

     >>> # sintaxe de classe
     >>> class Color(Enum):
     ...     RED = 1
     ...     GREEN = 2
     ...     BLUE = 3

     >>> # sintaxe funcional
     >>> Color = Enum('Color', [('RED', 1), ('GREEN', 2), ('BLUE', 3)])

Embora possamos usar a sintaxe *note class: 131a. para criar Enums,
Enums não são classes Python normais.  Veja *note Como Enums são
diferentes?: 2759. para mais detalhes.

     Nota: Nomenclatura

        - A classe ‘Color’ é uma 'enumeração' (ou 'enum')

        - Os atributos ‘Color.RED’, ‘Color.GREEN’, etc., são 'membros de
          enumeração' (ou 'membros') e são constantes funcionalmente.

        - Os membros enum têm 'nomes' e 'valores' (o nome de ‘Color.RED’
          é ‘RED’, o valor de ‘Color.BLUE’ é ‘3’, etc.)

__________________________________________________________________

* Menu:

* Conteúdo do módulo: Conteúdo do módulo<2>.
* Tipos de Dados: Tipos de Dados<2>.
* Utilities and Decorators::
* Notas::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/enum.py


File: python.info,  Node: Conteúdo do módulo<2>,  Next: Tipos de Dados<2>,  Up: enum — Suporte a enumerações

5.8.14.1 Conteúdo do módulo
...........................

     *note EnumType: 1e5.

          O ‘type’ para Enum e suas subclasses.

     *note Enum: 630.

          Classe base para criação de constantes enumeradas.

     *note IntEnum: d00.

          Classe base para criar constantes enumeradas que também são
          subclasses de *note int: 257.  (*note Notas: 275b.)

     *note StrEnum: 61a.

          Classe base para criar constantes enumeradas que também são
          subclasses de *note str: 44c.  (*note Notas: 275b.)

     *note Flag: 623.

          Classe base para criar constantes enumeradas que podem ser
          combinadas usando operações bit a bit sem perder sua
          associação *note Flag: 623.

     *note IntFlag: cbb.

          Classe base para criar constantes enumeradas que podem ser
          combinadas usando operadores bit a bit sem perder sua
          associação *note IntFlag: cbb.  Membros de *note IntFlag: cbb.
          também são subclasses de *note int: 257.  (*note Notas: 275b.)

     *note ReprEnum: 61b.

          Usado por *note IntEnum: d00, *note StrEnum: 61a. e *note
          IntFlag: cbb. para manter o *note str(): 44c. do tipo misto.

     *note EnumCheck: 626.

          Uma enumeração com os valores ‘CONTINUOUS’, ‘NAMED_FLAGS’ e
          ‘UNIQUE’, para uso com *note verify(): 625. para garantir que
          várias restrições sejam atendidas por uma determinada
          enumeração.

     *note FlagBoundary: 624.

          Uma enumeração com os valores ‘STRICT’, ‘CONFORM’, ‘EJECT’ e
          ‘KEEP’ que permite um controle mais refinado sobre como
          valores inválidos são tratados em uma enumeração.

     *note EnumDict: 1e4.

          Uma subclasse de *note dict: 256. para uso ao criar subclasse
          de *note EnumType: 1e5.

     *note auto: cbc.

          As instâncias são substituídas por um valor apropriado para
          membros Enum.  *note StrEnum: 61a. assume como padrão a versão
          em minúsculas do nome do membro, enquanto outros Enums assumem
          como padrão 1 e aumentam a partir daí.

     *note property(): 629.

          Permite que membros *note Enum: 630. tenham atributos sem
          conflitar com nomes de membros.  Os atributos ‘value’ e ‘name’
          são implementados dessa forma.

     *note unique(): 275c.

          Decorador de classe Enum que garante que apenas um nome seja
          vinculado a cada valor.

     *note verify(): 625.

          Decorador de classe Enum que verifica restrições selecionáveis
          pelo usuário em uma enumeração.

     *note member(): 627.

          Torna ‘obj’ um membro.  Pode ser usado como um decorador.

     *note nonmember(): 628.

          Não torna ‘obj’ um membro.  Pode ser usado como um decorador.

     *note global_enum(): 62b.

          Modifica *note str(): 44c. e *note repr(): 800. de uma
          enumeração para mostrar seus membros como pertencentes ao
          módulo em vez de sua classe, e exporta os membros da
          enumeração para o espaço de nomes global.

     *note show_flag_values(): 275d.

          Retorna uma lista de todos os inteiros de potência de dois
          contidos em um sinalizador.

Adicionado na versão 3.6: ‘Flag’, ‘IntFlag’, ‘auto’

Adicionado na versão 3.11: ‘StrEnum’, ‘EnumCheck’, ‘ReprEnum’,
‘FlagBoundary’, ‘property’, ‘member’, ‘nonmember’, ‘global_enum’,
‘show_flag_values’

Adicionado na versão 3.13: ‘EnumDict’

__________________________________________________________________


File: python.info,  Node: Tipos de Dados<2>,  Next: Utilities and Decorators,  Prev: Conteúdo do módulo<2>,  Up: enum — Suporte a enumerações

5.8.14.2 Tipos de Dados
.......................

 -- Classe: enum.EnumType

     'EnumType' é a *note metaclasse: 2112. para enumerações 'enum'.  É
     possível criar subclasse de 'EnumType' – veja *note Criando
     subclasses de EnumType: 275f. para detalhes.

     ‘EnumType’ é responsável por definir os métodos ‘__repr__()’,
     ‘__str__()’, ‘__format__()’ e ‘__reduce__()’ corretos no 'enum'
     final, bem como criar os membros do enum, manipular adequadamente
     as duplicatas, fornecer iteração sobre a classe do enum, etc.

     Adicionado na versão 3.11: Antes da versão 3.11, ‘EnumType’ era
     chamado de ‘EnumMeta’, que ainda está disponível como um apelido.

      -- Método: __call__ (cls, value, names=None, *, module=None,
               qualname=None, type=None, start=1, boundary=None)

          Este método é chamado de formas diferentes:

             * para procurar um membro existente:


                    cls: A classe enum sendo chamada.


                    valor: O valor para procurar.

             * para usar a enumeração ‘cls’ para criar uma nova
               enumeração (somente se a enumeração existente não tiver
               nenhum membro):


                    cls: A classe enum sendo chamada.


                    valor: O nome do novo Enum para criar.


                    nomes: Os nomes/valores dos membros para o novo
                    Enum.


                    módulo: O nome do módulo no qual o novo Enum é
                    criado.


                    qualname: O local real no módulo onde este Enum pode
                    ser encontrado.


                    tipo: Um tipo de mix-in para o novo Enum.


                    start: O primeiro valor inteiro para o Enum (usado
                    por *note auto: cbc.).


                    boundary: Como lidar com valores fora do intervalo
                    de operações de bits (somente *note Flag: 623.).

      -- Método: __contains__ (cls, member)

          Retorna ‘True’ se o membro pertencer a ‘cls’:

               >>> some_var = Color.RED
               >>> some_var in Color
               True
               >>> Color.RED.value in Color
               True

          Alterado na versão 3.12: Antes do Python 3.12, um ‘TypeError’
          era levantado se um membro não Enum fosse usado em uma
          verificação de contenção.

      -- Método: __dir__ (cls)

          Retorna ‘['__class__', '__doc__', '__members__',
          '__module__']’ e os nomes dos membros em 'cls':

               >>> dir(Color)
               ['BLUE', 'GREEN', 'RED', '__class__', '__contains__', '__doc__', '__getitem__', '__init_subclass__', '__iter__', '__len__', '__members__', '__module__', '__name__', '__qualname__']

      -- Método: __getitem__ (cls, name)

          Retorna o membro Enum em 'cls' correspondente a 'name' ou
          levanta *note KeyError: 344.:

               >>> Color['BLUE']
               <Color.BLUE: 3>

      -- Método: __iter__ (cls)

          Retorna cada membro em 'cls' na ordem de definição:

               >>> list(Color)
               [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 3>]

      -- Método: __len__ (cls)

          Retorna o número de membros em 'cls':

               >>> len(Color)
               3

      -- Atributo: __members__

          Retorna um mapeamento de cada nome de enumeração para seu
          membro, incluindo apelidos

      -- Método: __reversed__ (cls)

          Retorna cada membro em 'cls' na ordem inversa de definição:

               >>> list(reversed(Color))
               [<Color.BLUE: 3>, <Color.GREEN: 2>, <Color.RED: 1>]

 -- Classe: enum.Enum

     'Enum' é a classe base para todas as enumerações 'enum'.

      -- Atributo: name

          O nome usado para definir o membro ‘Enum’:

               >>> Color.BLUE.name
               'BLUE'

      -- Atributo: value

          O valor dado ao membro ‘Enum’:

               >>> Color.RED.value
               1

          O valor do membro pode ser definido em *note __new__(): 276a.

               Nota: Valores de membros de Enum

               Os valores dos membros podem ser qualquer coisa: *note
               int: 257, *note str: 44c, etc.  Se o valor exato não for
               importante, você pode usar instâncias de *note auto: cbc.
               e um valor apropriado será escolhido para você.  Consulte
               *note auto: cbc. para obter detalhes.

               Embora valores mutáveis/não hasheáveis, como *note dict:
               256, *note list: 611. ou um mutável *note dataclass: 1cb,
               possam ser usados, eles terão um impacto quadrático no
               desempenho durante a criação em relação ao número total
               de valores mutáveis/não hasheáveis na enumeração.

      -- Atributo: _name_

          Nome do membro.

      -- Atributo: _value_

          O valor do membro pode ser definido em *note __new__(): 276a.

      -- Atributo: _order_

          Não é mais usado, mantido para compatibilidade com versões
          anteriores.  (atributo de classe, removido durante a criação
          da classe).

      -- Atributo: _ignore_

          ‘_ignore_’ é usado somente durante a criação e é removido da
          enumeração quando a criação é concluída.

          ‘_ignore_’ é uma lista de nomes que não se tornarão membros e
          cujos nomes também serão removidos da enumeração concluída.
          Veja *note TimePeriod: 276f. para um exemplo.

      -- Método: __dir__ (self)

          Retorna ‘['__class__', '__doc__', '__module__', 'name',
          'value']’ e quaisquer métodos públicos definidos em
          'self.__class__':

               >>> from enum import Enum
               >>> from datetime import date
               >>> class Weekday(Enum):
               ...     MONDAY = 1
               ...     TUESDAY = 2
               ...     WEDNESDAY = 3
               ...     THURSDAY = 4
               ...     FRIDAY = 5
               ...     SATURDAY = 6
               ...     SUNDAY = 7
               ...     @classmethod
               ...     def today(cls):
               ...         print('today is %s' % cls(date.today().isoweekday()).name)
               ...
               >>> dir(Weekday.SATURDAY)
               ['__class__', '__doc__', '__eq__', '__hash__', '__module__', 'name', 'today', 'value']

      -- Método: _generate_next_value_ (name, start, count, last_values)


               nome: O nome do membro que está sendo definido (por
               exemplo, ‘RED’).


               start: O valor inicial do Enum; o padrão é 1.


               count: O número de membros atualmente definido, sem
               incluir este.


               last_values: Uma lista de valores anteriores.

          Um 'staticmethod' que é usado para determinar o próximo valor
          retornado por *note auto: cbc.:

               >>> from enum import auto, Enum
               >>> class PowersOfThree(Enum):
               ...     @staticmethod
               ...     def _generate_next_value_(name, start, count, last_values):
               ...         return 3 ** (count + 1)
               ...     FIRST = auto()
               ...     SECOND = auto()
               ...
               >>> PowersOfThree.SECOND.value
               9

      -- Método: __init__ (self, *args, **kwds)

          Por padrão, não faz nada.  Se vários valores forem fornecidos
          na atribuição de membro, esses valores se tornarão argumentos
          separados para ‘__init__’; por exemplo.:

               >>> from enum import Enum
               >>> class Weekday(Enum):
               ...     MONDAY = 1, 'Mon'

          ‘Weekday.__init__()’ seria chamado como
          ‘Weekday.__init__(self, 1, 'Mon')’

      -- Método: __init_subclass__ (cls, **kwds)

          Um 'classmethod' usado para configurar subclasses
          subsequentes.  Por padrão, não faz nada.

      -- Método: _missing_ (cls, value)

          Um 'classmethod' para procurar valores não encontrados em
          'cls'.  Por padrão, ele não faz nada, mas pode ser substituído
          para implementar um comportamento de pesquisa personalizado:

               >>> from enum import auto, StrEnum
               >>> class Build(StrEnum):
               ...     DEBUG = auto()
               ...     OPTIMIZED = auto()
               ...     @classmethod
               ...     def _missing_(cls, value):
               ...         value = value.lower()
               ...         for member in cls:
               ...             if member.value == value:
               ...                 return member
               ...         return None
               ...
               >>> Build.DEBUG.value
               'debug'
               >>> Build('deBUG')
               <Build.DEBUG: 'debug'>

      -- Método: __new__ (cls, *args, **kwds)

          By default, doesn’t exist.  If specified, either in the enum
          class definition or in a mixin class (such as ‘int’), all
          values given in the member assignment will be passed; e.g.

               >>> from enum import Enum
               >>> class MyIntEnum(int, Enum):
               ...     TWENTYSIX = '1a', 16

          results in the call ‘int('1a', 16)’ and a value of ‘26’ for
          the member.

               Nota: When writing a custom ‘__new__’, do not use
               ‘super().__new__’ – call the appropriate ‘__new__’
               instead.

      -- Método: __repr__ (self)

          Returns the string used for 'repr()' calls.  By default,
          returns the 'Enum' name, member name, and value, but can be
          overridden:

               >>> from enum import auto, Enum
               >>> class OtherStyle(Enum):
               ...     ALTERNATE = auto()
               ...     OTHER = auto()
               ...     SOMETHING_ELSE = auto()
               ...     def __repr__(self):
               ...         cls_name = self.__class__.__name__
               ...         return f'{cls_name}.{self.name}'
               ...
               >>> OtherStyle.ALTERNATE, str(OtherStyle.ALTERNATE), f"{OtherStyle.ALTERNATE}"
               (OtherStyle.ALTERNATE, 'OtherStyle.ALTERNATE', 'OtherStyle.ALTERNATE')

      -- Método: __str__ (self)

          Returns the string used for 'str()' calls.  By default,
          returns the 'Enum' name and member name, but can be
          overridden:

               >>> from enum import auto, Enum
               >>> class OtherStyle(Enum):
               ...     ALTERNATE = auto()
               ...     OTHER = auto()
               ...     SOMETHING_ELSE = auto()
               ...     def __str__(self):
               ...         return f'{self.name}'
               ...
               >>> OtherStyle.ALTERNATE, str(OtherStyle.ALTERNATE), f"{OtherStyle.ALTERNATE}"
               (<OtherStyle.ALTERNATE: 1>, 'ALTERNATE', 'ALTERNATE')

      -- Método: __format__ (self)

          Returns the string used for 'format()' and 'f-string' calls.
          By default, returns *note __str__(): 622. return value, but
          can be overridden:

               >>> from enum import auto, Enum
               >>> class OtherStyle(Enum):
               ...     ALTERNATE = auto()
               ...     OTHER = auto()
               ...     SOMETHING_ELSE = auto()
               ...     def __format__(self, spec):
               ...         return f'{self.name}'
               ...
               >>> OtherStyle.ALTERNATE, str(OtherStyle.ALTERNATE), f"{OtherStyle.ALTERNATE}"
               (<OtherStyle.ALTERNATE: 1>, 'OtherStyle.ALTERNATE', 'ALTERNATE')

          Nota: Using *note auto: cbc. with *note Enum: 630. results in
          integers of increasing value, starting with ‘1’.

     Alterado na versão 3.12: Added *note Suporte a dataclass: 1881.

      -- Método: _add_alias_ ()

          Adds a new name as an alias to an existing member:

               >>> Color.RED._add_alias_("ERROR")
               >>> Color.ERROR
               <Color.RED: 1>

          Raises a *note NameError: 43f. if the name is already assigned
          to a different member.

          Adicionado na versão 3.13.

      -- Método: _add_value_alias_ ()

          Adds a new value as an alias to an existing member:

               >>> Color.RED._add_value_alias_(42)
               >>> Color(42)
               <Color.RED: 1>

          Raises a *note ValueError: 202. if the value is already linked
          with a different member.

          Adicionado na versão 3.13.

 -- Classe: enum.IntEnum

     'IntEnum' is the same as *note Enum: 630, but its members are also
     integers and can be used anywhere that an integer can be used.  If
     any integer operation is performed with an 'IntEnum' member, the
     resulting value loses its enumeration status.

          >>> from enum import IntEnum
          >>> class Number(IntEnum):
          ...     ONE = 1
          ...     TWO = 2
          ...     THREE = 3
          ...
          >>> Number.THREE
          <Number.THREE: 3>
          >>> Number.ONE + Number.TWO
          3
          >>> Number.THREE + 5
          8
          >>> Number.THREE == 3
          True

          Nota: Using *note auto: cbc. with *note IntEnum: d00. results
          in integers of increasing value, starting with ‘1’.

     Alterado na versão 3.11: *note __str__(): 61d. is now
     ‘int.__str__()’ to better support the 'replacement of existing
     constants' use-case.  *note __format__(): 61e. was already
     ‘int.__format__()’ for that same reason.

 -- Classe: enum.StrEnum

     'StrEnum' is the same as *note Enum: 630, but its members are also
     strings and can be used in most of the same places that a string
     can be used.  The result of any string operation performed on or
     with a 'StrEnum' member is not part of the enumeration.

          >>> from enum import StrEnum, auto
          >>> class Color(StrEnum):
          ...     RED = 'r'
          ...     GREEN = 'g'
          ...     BLUE = 'b'
          ...     UNKNOWN = auto()
          ...
          >>> Color.RED
          <Color.RED: 'r'>
          >>> Color.UNKNOWN
          <Color.UNKNOWN: 'unknown'>
          >>> str(Color.UNKNOWN)
          'unknown'

          Nota: There are places in the stdlib that check for an exact
          *note str: 44c. instead of a *note str: 44c. subclass (i.e.
          ‘type(unknown) == str’ instead of ‘isinstance(unknown, str)’),
          and in those locations you will need to use
          ‘str(MyStrEnum.MY_MEMBER)’.

          Nota: Using *note auto: cbc. with *note StrEnum: 61a. results
          in the lower-cased member name as the value.

          Nota: *note __str__(): 61d. is ‘str.__str__()’ to better
          support the 'replacement of existing constants' use-case.
          *note __format__(): 61e. is likewise ‘str.__format__()’ for
          that same reason.

     Adicionado na versão 3.11.

 -- Classe: enum.Flag

     ‘Flag’ is the same as *note Enum: 630, but its members support the
     bitwise operators ‘&’ ('AND'), ‘|’ ('OR'), ‘^’ ('XOR'), and ‘~’
     ('INVERT'); the results of those operations are (aliases of)
     members of the enumeration.

      -- Método: __contains__ (self, value)

          Returns 'True' if value is in self:

               >>> from enum import Flag, auto
               >>> class Color(Flag):
               ...     RED = auto()
               ...     GREEN = auto()
               ...     BLUE = auto()
               ...
               >>> purple = Color.RED | Color.BLUE
               >>> white = Color.RED | Color.GREEN | Color.BLUE
               >>> Color.GREEN in purple
               False
               >>> Color.GREEN in white
               True
               >>> purple in white
               True
               >>> white in purple
               False

      -- Método: __iter__(self):

          Returns all contained non-alias members:

               >>> list(Color.RED)
               [<Color.RED: 1>]
               >>> list(purple)
               [<Color.RED: 1>, <Color.BLUE: 4>]

          Adicionado na versão 3.11.

      -- Método: __len__(self):

          Returns number of members in flag:

               >>> len(Color.GREEN)
               1
               >>> len(white)
               3

          Adicionado na versão 3.11.

      -- Método: __bool__(self):

          Returns 'True' if any members in flag, 'False' otherwise:

               >>> bool(Color.GREEN)
               True
               >>> bool(white)
               True
               >>> black = Color(0)
               >>> bool(black)
               False

      -- Método: __or__ (self, other)

          Returns current flag binary or’ed with other:

               >>> Color.RED | Color.GREEN
               <Color.RED|GREEN: 3>

      -- Método: __and__ (self, other)

          Returns current flag binary and’ed with other:

               >>> purple & white
               <Color.RED|BLUE: 5>
               >>> purple & Color.GREEN
               <Color: 0>

      -- Método: __xor__ (self, other)

          Returns current flag binary xor’ed with other:

               >>> purple ^ white
               <Color.GREEN: 2>
               >>> purple ^ Color.GREEN
               <Color.RED|GREEN|BLUE: 7>

      -- Método: __invert__(self):

          Returns all the flags in 'type(self)' that are not in 'self':

               >>> ~white
               <Color: 0>
               >>> ~purple
               <Color.GREEN: 2>
               >>> ~Color.RED
               <Color.GREEN|BLUE: 6>

      -- Método: _numeric_repr_ ()

          Function used to format any remaining unnamed numeric values.
          Default is the value’s repr; common choices are *note hex():
          1312. and *note oct(): 1311.

          Nota: Using *note auto: cbc. with *note Flag: 623. results in
          integers that are powers of two, starting with ‘1’.

     Alterado na versão 3.11: The 'repr()' of zero-valued flags has
     changed.  It is now::

          >>> Color(0)
          <Color: 0>

 -- Classe: enum.IntFlag

     ‘IntFlag’ is the same as *note Flag: 623, but its members are also
     integers and can be used anywhere that an integer can be used.

          >>> from enum import IntFlag, auto
          >>> class Color(IntFlag):
          ...     RED = auto()
          ...     GREEN = auto()
          ...     BLUE = auto()
          ...
          >>> Color.RED & 2
          <Color: 0>
          >>> Color.RED | 2
          <Color.RED|GREEN: 3>

     If any integer operation is performed with an 'IntFlag' member, the
     result is not an 'IntFlag':

          >>> Color.RED + 2
          3

     If a *note Flag: 623. operation is performed with an 'IntFlag'
     member and:

        * the result is a valid 'IntFlag': an 'IntFlag' is returned

        * the result is not a valid 'IntFlag': the result depends on the
          *note FlagBoundary: 624. setting

     The *note repr(): 800. of unnamed zero-valued flags has changed.
     It is now:

          >>> Color(0)
          <Color: 0>

          Nota: Using *note auto: cbc. with *note IntFlag: cbb. results
          in integers that are powers of two, starting with ‘1’.

     Alterado na versão 3.11: *note __str__(): 61d. is now
     ‘int.__str__()’ to better support the 'replacement of existing
     constants' use-case.  *note __format__(): 61e. was already
     ‘int.__format__()’ for that same reason.

     Inversion of an ‘IntFlag’ now returns a positive value that is the
     union of all flags not in the given flag, rather than a negative
     value.  This matches the existing *note Flag: 623. behavior.

 -- Classe: enum.ReprEnum

     ‘ReprEnum’ uses the *note repr(): 1882. of *note Enum: 630, but the
     *note str(): 44c. of the mixed-in data type:

        * ‘int.__str__()’ for *note IntEnum: d00. and *note IntFlag:
          cbb.

        * ‘str.__str__()’ for *note StrEnum: 61a.

     Inherit from ‘ReprEnum’ to keep the *note str(): 44c. / *note
     format(): 61f. of the mixed-in data type instead of using the *note
     Enum: 630.-default *note str(): 622.

     Adicionado na versão 3.11.

 -- Classe: enum.EnumCheck

     'EnumCheck' contains the options used by the *note verify(): 625.
     decorator to ensure various constraints; failed constraints result
     in a *note ValueError: 202.

      -- Atributo: UNIQUE

          Ensure that each value has only one name:

               >>> from enum import Enum, verify, UNIQUE
               >>> @verify(UNIQUE)
               ... class Color(Enum):
               ...     RED = 1
               ...     GREEN = 2
               ...     BLUE = 3
               ...     CRIMSON = 1
               Traceback (most recent call last):
               ...
               ValueError: aliases found in <enum 'Color'>: CRIMSON -> RED

      -- Atributo: CONTINUOUS

          Ensure that there are no missing values between the
          lowest-valued member and the highest-valued member:

               >>> from enum import Enum, verify, CONTINUOUS
               >>> @verify(CONTINUOUS)
               ... class Color(Enum):
               ...     RED = 1
               ...     GREEN = 2
               ...     BLUE = 5
               Traceback (most recent call last):
               ...
               ValueError: invalid enum 'Color': missing values 3, 4

      -- Atributo: NAMED_FLAGS

          Ensure that any flag groups/masks contain only named flags –
          useful when values are specified instead of being generated by
          *note auto(): cbc.:

               >>> from enum import Flag, verify, NAMED_FLAGS
               >>> @verify(NAMED_FLAGS)
               ... class Color(Flag):
               ...     RED = 1
               ...     GREEN = 2
               ...     BLUE = 4
               ...     WHITE = 15
               ...     NEON = 31
               Traceback (most recent call last):
               ...
               ValueError: invalid Flag 'Color': aliases WHITE and NEON are missing combined values of 0x18 [use enum.show_flag_values(value) for details]

          Nota: CONTINUOUS and NAMED_FLAGS are designed to work with
          integer-valued members.

     Adicionado na versão 3.11.

 -- Classe: enum.FlagBoundary

     ‘FlagBoundary’ controls how out-of-range values are handled in
     *note Flag: 623. and its subclasses.

      -- Atributo: STRICT

          Out-of-range values cause a *note ValueError: 202. to be
          raised.  This is the default for *note Flag: 623.:

               >>> from enum import Flag, STRICT, auto
               >>> class StrictFlag(Flag, boundary=STRICT):
               ...     RED = auto()
               ...     GREEN = auto()
               ...     BLUE = auto()
               ...
               >>> StrictFlag(2**2 + 2**4)
               Traceback (most recent call last):
               ...
               ValueError: <flag 'StrictFlag'> invalid value 20
                   given 0b0 10100
                 allowed 0b0 00111

      -- Atributo: CONFORM

          Out-of-range values have invalid values removed, leaving a
          valid *note Flag: 623. value:

               >>> from enum import Flag, CONFORM, auto
               >>> class ConformFlag(Flag, boundary=CONFORM):
               ...     RED = auto()
               ...     GREEN = auto()
               ...     BLUE = auto()
               ...
               >>> ConformFlag(2**2 + 2**4)
               <ConformFlag.BLUE: 4>

      -- Atributo: EJECT

          Out-of-range values lose their *note Flag: 623. membership and
          revert to *note int: 257.

               >>> from enum import Flag, EJECT, auto
               >>> class EjectFlag(Flag, boundary=EJECT):
               ...     RED = auto()
               ...     GREEN = auto()
               ...     BLUE = auto()
               ...
               >>> EjectFlag(2**2 + 2**4)
               20

      -- Atributo: KEEP

          Out-of-range values are kept, and the *note Flag: 623.
          membership is kept.  This is the default for *note IntFlag:
          cbb.:

               >>> from enum import Flag, KEEP, auto
               >>> class KeepFlag(Flag, boundary=KEEP):
               ...     RED = auto()
               ...     GREEN = auto()
               ...     BLUE = auto()
               ...
               >>> KeepFlag(2**2 + 2**4)
               <KeepFlag.BLUE|16: 20>

     Adicionado na versão 3.11.

 -- Classe: enum.EnumDict

     'EnumDict' is a subclass of *note dict: 256. that is used as the
     namespace for defining enum classes (see *note Preparando o espaço
     de nomes da classe: c79.).  It is exposed to allow subclasses of
     *note EnumType: 1e5. with advanced behavior like having multiple
     values per member.  It should be called with the name of the enum
     class being created, otherwise private names and internal classes
     will not be handled correctly.

     Note that only the *note MutableMapping: 10eb. interface (*note
     __setitem__(): 130e. and *note update(): 14ad.) is overridden.  It
     may be possible to bypass the checks using other ‘dict’ operations
     like *note |=: 2142.

      -- Atributo: member_names

          A list of member names.

     Adicionado na versão 3.13.

__________________________________________________________________

* Menu:

* Nomes __dunder__ suportados::
* Nomes _sunder_ suportados::


File: python.info,  Node: Nomes __dunder__ suportados,  Next: Nomes _sunder_ suportados,  Up: Tipos de Dados<2>

5.8.14.3 Nomes ‘__dunder__’ suportados
......................................

*note __members__: 2766. is a read-only ordered mapping of
‘member_name’:‘member’ items.  It is only available on the class.

*note __new__(): 276a, if specified, must create and return the enum
members; it is also a very good idea to set the member’s ‘_value_’
appropriately.  Once all the members are created it is no longer used.


File: python.info,  Node: Nomes _sunder_ suportados,  Prev: Nomes __dunder__ suportados,  Up: Tipos de Dados<2>

5.8.14.4 Nomes ‘_sunder_’ suportados
....................................

   - *note _name_: 276b. – name of the member

   - *note _value_: 276c. – value of the member; can be set in ‘__new__’

   - *note _missing_(): 2773. – a lookup function used when a value is
     not found; may be overridden

   - *note _ignore_: 276e. – a list of names, either as a *note list:
     611. or a *note str: 44c, that will not be transformed into
     members, and will be removed from the final class

   - *note _order_: 276d. – no longer used, kept for backward
     compatibility (class attribute, removed during class creation)

   - *note _generate_next_value_(): 2770. – used to get an appropriate
     value for an enum member; may be overridden

          Nota: For standard *note Enum: 630. classes the next value
          chosen is the highest value seen incremented by one.

          For *note Flag: 623. classes the next value chosen will be the
          next highest power-of-two.

   - *note _add_alias_(): 2774. – adds a new name as an alias to an
     existing member.

   - *note _add_value_alias_(): 2775. – adds a new value as an alias to
     an existing member.

   - While ‘_sunder_’ names are generally reserved for the further
     development of the *note Enum: 630. class and can not be used, some
     are explicitly allowed:

        - ‘_repr_*’ (e.g.  ‘_repr_html_’), as used in IPython's rich
          display(1)

Adicionado na versão 3.6: ‘_missing_’, ‘_order_’,
‘_generate_next_value_’

Adicionado na versão 3.7: ‘_ignore_’

Adicionado na versão 3.13: ‘_add_alias_’, ‘_add_value_alias_’, ‘_repr_*’

__________________________________________________________________

   ---------- Footnotes ----------

   (1) 
https://ipython.readthedocs.io/en/stable/config/integrating.html#rich-display


File: python.info,  Node: Utilities and Decorators,  Next: Notas,  Prev: Tipos de Dados<2>,  Up: enum — Suporte a enumerações

5.8.14.5 Utilities and Decorators
.................................

 -- Classe: enum.auto

     'auto' can be used in place of a value.  If used, the 'Enum'
     machinery will call an *note Enum: 630.’s *note
     _generate_next_value_(): 2770. to get an appropriate value.  For
     *note Enum: 630. and *note IntEnum: d00. that appropriate value
     will be the last value plus one; for *note Flag: 623. and *note
     IntFlag: cbb. it will be the first power-of-two greater than the
     highest value; for *note StrEnum: 61a. it will be the lower-cased
     version of the member’s name.  Care must be taken if mixing
     'auto()' with manually specified values.

     'auto' instances are only resolved when at the top level of an
     assignment, either by itself or as part of a tuple:

        * ‘FIRST = auto()’ will work (auto() is replaced with ‘1’);

        * ‘SECOND = auto(), -2’ will work (auto is replaced with ‘2’, so
          ‘2, -2’ is used to create the ‘SECOND’ enum member;

        * ‘THREE = [auto(), -3]’ will 'not' work (‘[<auto instance>,
          -3]’ is used to create the ‘THREE’ enum member)

     Alterado na versão 3.11.1: In prior versions, ‘auto()’ had to be
     the only thing on the assignment line to work properly.

     ‘_generate_next_value_’ can be overridden to customize the values
     used by 'auto'.

          Nota: in 3.13 the default ‘_generate_next_value_’ will always
          return the highest member value incremented by 1, and will
          fail if any member is an incompatible type.

 -- Função: @enum.property

     A decorator similar to the built-in 'property', but specifically
     for enumerations.  It allows member attributes to have the same
     names as members themselves.

          Nota: the 'property' and the member must be defined in
          separate classes; for example, the 'value' and 'name'
          attributes are defined in the 'Enum' class, and 'Enum'
          subclasses can define members with the names ‘value’ and
          ‘name’.

     Adicionado na versão 3.11.

 -- Função: @enum.unique

     A *note class: 131a. decorator specifically for enumerations.  It
     searches an enumeration’s *note __members__: 2766, gathering any
     aliases it finds; if any are found *note ValueError: 202. is raised
     with the details:

          >>> from enum import Enum, unique
          >>> @unique
          ... class Errado(Enum):
          ...     UM = 1
          ...     DOIS = 2
          ...     TRES = 3
          ...     QUATRO = 3
          ...
          Traceback (most recent call last):
          ...
          ValueError: duplicate values found in <enum 'Errado'>: QUATRO -> TRES

 -- Função: @enum.verify

     A *note class: 131a. decorator specifically for enumerations.
     Members from *note EnumCheck: 626. are used to specify which
     constraints should be checked on the decorated enumeration.

     Adicionado na versão 3.11.

 -- Função: @enum.member

     A decorator for use in enums: its target will become a member.

     Adicionado na versão 3.11.

 -- Função: @enum.nonmember

     A decorator for use in enums: its target will not become a member.

     Adicionado na versão 3.11.

 -- Função: @enum.global_enum

     A decorator to change the *note str(): 44c. and *note repr(): 800.
     of an enum to show its members as belonging to the module instead
     of its class.  Should only be used when the enum members are
     exported to the module global namespace (see *note re.RegexFlag:
     62d. for an example).

     Adicionado na versão 3.11.

 -- Função: enum.show_flag_values (value)

     Return a list of all power-of-two integers contained in a flag
     'value'.

     Adicionado na versão 3.11.

__________________________________________________________________


File: python.info,  Node: Notas,  Prev: Utilities and Decorators,  Up: enum — Suporte a enumerações

5.8.14.6 Notas
..............

*note IntEnum: d00, *note StrEnum: 61a, and *note IntFlag: cbb.

     These three enum types are designed to be drop-in replacements for
     existing integer- and string-based values; as such, they have extra
     limitations:

        - ‘__str__’ uses the value and not the name of the enum member

        - ‘__format__’, because it uses ‘__str__’, will also use the
          value of the enum member instead of its name

     If you do not need/want those limitations, you can either create
     your own base class by mixing in the ‘int’ or ‘str’ type yourself:

          >>> from enum import Enum
          >>> class MyIntEnum(int, Enum):
          ...     pass

     or you can reassign the appropriate *note str(): 44c, etc., in your
     enum:

          >>> from enum import Enum, IntEnum
          >>> class MyIntEnum(IntEnum):
          ...     __str__ = Enum.__str__


File: python.info,  Node: graphlib — Funcionalidade para operar com estruturas do tipo grafo,  Prev: enum — Suporte a enumerações,  Up: Tipos de Dados

5.8.15 ‘graphlib’ — Funcionalidade para operar com estruturas do tipo grafo
---------------------------------------------------------------------------

'Código-fonte:' Lib/graphlib.py(1)

__________________________________________________________________

 -- Classe: graphlib.TopologicalSorter (graph=None)

     Fornece funcionalidade para classificar topologicamente um grafo de
     nós *note hasheáveis: 610.

     Uma ordem topológica é uma ordenação linear dos vértices em um
     grafo, de modo que para cada aresta direcionada u -> v do vértice u
     ao vértice v, o vértice u vem antes do vértice v na ordenação.  Por
     exemplo, os vértices do grafo podem representar tarefas a serem
     executadas e as arestas podem representar restrições de que uma
     tarefa deve ser executada antes de outra; neste exemplo, uma ordem
     topológica é apenas uma sequência válida para as tarefas.  Uma
     ordenação topológica completa é possível se e somente se o grafo
     não tiver ciclos direcionados, ou seja, se for um grafo acíclico
     direcionado.

     Se o argumento opcional 'graph' for fornecido, ele deverá ser um
     dicionário que represente um grafo acíclico direcionado no qual as
     chaves sejam nós e os valores sejam iteráveis de todos os
     predecessores desse nó no grafo (os nós que possuem bordas que
     apontam para o valor na chave).  Nós adicionais podem ser
     adicionados ao grafo usando o método *note add(): 278a.

     No caso geral, as etapas necessárias para executar a classificação
     de um determinado grafo são as seguintes:

        * Cria uma instância da classe *note TopologicalSorter: 8e7. com
          um grafo inicial opcional.

        * Adiciona nós adicionais ao grafo.

        * Chama o método *note prepare(): 278b. no grafo.

        * Enquanto *note is_active(): 278c. é ‘True’, itera pelos nós
          retornados por *note get_ready(): 278d. e os processa.  Chama
          *note done(): 278e. em cada nó na medida em que finaliza o
          processamento.

     Caso apenas uma classificação imediata dos nós no grafo seja
     necessária e nenhum paralelismo esteja envolvido, o método de
     conveniência *note TopologicalSorter.static_order(): 278f. pode ser
     usado diretamente:

          >>> graph = {"D": {"B", "C"}, "C": {"A"}, "B": {"A"}}
          >>> ts = TopologicalSorter(graph)
          >>> tuple(ts.static_order())
          ('A', 'C', 'B', 'D')

     A classe foi projetada para suportar facilmente o processamento
     paralelo dos nós à medida que eles se tornam prontos.  Por exemplo:

          topological_sorter = TopologicalSorter()

          # Adiciona nodos para 'topological_sorter'...

          topological_sorter.prepare()
          while topological_sorter.is_active():
              for node in topological_sorter.get_ready():
                  # Processos ou threads de workers obtém nós para
                  # trabalhar na fila 'task_queue'.
                  task_queue.put(node)

              # Quando o trabalho para um nó é feito, os workers colocam o
              # nó em 'finalized_tasks_queue' para que possamos obter mais
              # nós para trabalhar. A definição de 'is_active()' garante que,
              # neste ponto, pelo menos um nó foi colocado em 'task_queue'
              # que ainda não foi passado para 'done()', então este 'get()' de
              # bloqueio deve (eventualmente) ter sucesso. Depois de chamar
              # 'done()', fazemos um laço de volta para chamar 'get_ready()'
              # novamente, então colocamos nós recém-liberados em
              # 'task_queue' o mais rápido possível.
              node = finalized_tasks_queue.get()
              topological_sorter.done(node)

      -- Método: add (node, *predecessors)

          Adiciona um novo nó e seus predecessores ao grafo.  O 'node' e
          todos os elementos em 'predecessors' devem ser *note
          hasheáveis: 610.

          Se chamado várias vezes com o mesmo argumento do nó, o
          conjunto de dependências será a união de todas as dependências
          transmitidas.

          É possível adicionar um nó sem dependências ('predecessors'
          não são fornecidos) ou fornecer uma dependência duas vezes.
          Se um nó que não foi fornecido anteriormente for incluído
          entre os 'predecessors', ele será automaticamente adicionado
          ao grafo sem predecessores próprios.

          Levanta *note ValueError: 202. se chamado após *note
          prepare(): 278b.

      -- Método: prepare ()

          Marca o grafo como concluído e verifica os ciclos no grafo.
          Se qualquer ciclo for detectado, *note CycleError: 2790. será
          gerado, mas *note get_ready(): 278d. ainda poderá ser usado
          para obter o maior número possível de nós até que os ciclos
          bloqueiem mais progressos.  Após uma chamada para esta função,
          o grafo não pode ser modificado e, portanto, nenhum nó pode
          ser adicionado usando *note add(): 278a.

      -- Método: is_active ()

          Retorna ‘True’ se mais progresso puder ser feito e ‘False’
          caso contrário.  É possível progredir se os ciclos não
          bloquearem a resolução e ainda houver nós prontos que ainda
          não foram retornados por *note TopologicalSorter.get_ready():
          278d. ou o número de nós marcados *note
          TopologicalSorter.done(): 278e. é menor que o número retornado
          por *note TopologicalSorter.get_ready(): 278d.

          O método *note __bool__(): 1318. desta classe adia para essa
          função, então, em vez de:

               if ts.is_active():
                   ...

          é possível simplesmente fazer:

               if ts:
                   ...

          Levanta *note ValueError: 202. se chamado sem chamar *note
          prepare(): 278b. anteriormente.

      -- Método: done (*nodes)

          Marca um conjunto de nós retornados por *note
          TopologicalSorter.get_ready(): 278d. como processado,
          desbloqueando qualquer sucessor de cada nó em 'nodes' para ser
          retornado no futuro por uma chamada para *note
          TopologicalSorter.get_ready(): 278d.

          Levanta *note ValueError: 202. se algum nó em 'nodes' já foi
          marcado como processado por uma chamada anterior a este método
          ou se um nó não foi adicionado ao grafo usando *note
          TopologicalSorter.add(): 278a, se chamado sem chamar
          ‘prepare()’ ou se o nó ainda não foi retornado por *note
          get_ready(): 278d.

      -- Método: get_ready ()

          Retorna uma ‘tupla’ com todos os nós que estão prontos.
          Inicialmente, ele retorna todos os nós sem predecessores e,
          uma vez marcados como processados, chamando *note
          TopologicalSorter.done(): 278e, novas chamadas retornarão
          todos os novos nós que já tenham seus antecessores já
          processados.  Quando não for possível fazer mais progresso, as
          tuplas vazias serão retornadas.

          Levanta *note ValueError: 202. se chamado sem chamar *note
          prepare(): 278b. anteriormente.

      -- Método: static_order ()

          Retorna um objeto iterador que irá iterar sobre os nós em uma
          ordem topológica.  Ao usar este método, *note prepare(): 278b.
          e *note done(): 278e. não devem ser chamados.  Este método é
          equivalente a:

               def static_order(self):
                   self.prepare()
                   while self.is_active():
                       node_group = self.get_ready()
                       yield from node_group
                       self.done(*node_group)

          A ordem específica retornada pode depender da ordem específica
          em que os itens foram inseridos no grafo.  Por exemplo:

               >>> ts = TopologicalSorter()
               >>> ts.add(3, 2, 1)
               >>> ts.add(1, 0)
               >>> print([*ts.static_order()])
               [2, 0, 1, 3]

               >>> ts2 = TopologicalSorter()
               >>> ts2.add(1, 0)
               >>> ts2.add(3, 2, 1)
               >>> print([*ts2.static_order()])
               [0, 2, 1, 3]

          Isso se deve ao fato de que “0” e “2” estão no mesmo nível no
          grafo (eles teriam sido retornados na mesma chamada para *note
          get_ready(): 278d.) e a ordem entre eles é determinada pela
          ordem de inserção.

          Se qualquer ciclo for detectado, *note CycleError: 2790. será
          levantada.

     Adicionado na versão 3.9.

* Menu:

* Exceções: Exceções<4>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/graphlib.py


File: python.info,  Node: Exceções<4>,  Up: graphlib — Funcionalidade para operar com estruturas do tipo grafo

5.8.15.1 Exceções
.................

O módulo *note graphlib: 65. define as seguintes classes de exceção:

 -- Exceção: graphlib.CycleError

     Subclasse de *note ValueError: 202. levantada por *note
     TopologicalSorter.prepare(): 278b. se houver ciclos no grafo de
     trabalho.  Se existirem vários ciclos, apenas uma opção indefinida
     entre eles será relatada e incluída na exceção.

     O ciclo detectado pode ser acessado através do segundo elemento no
     atributo *note args: 56c. da instância de exceção e consiste em uma
     lista de nós, de modo que cada nó seja, no grafo, um predecessor
     imediato do próximo nó na lista.  Na lista relatada, o primeiro e o
     último nó serão os mesmos, para deixar claro que é cíclico.


File: python.info,  Node: Módulos Matemáticos e Numéricos,  Next: Módulos de Programação Funcional,  Prev: Tipos de Dados,  Up: A Biblioteca Padrão do Python

5.9 Módulos Matemáticos e Numéricos
===================================

Os módulos descritos neste capítulo fornecem funções e tipos de dados
relacionados com o numérico e matemática.  O módulo *note numbers: 9e.
define uma hierarquia abstrata de tipos numéricos.  Os módulos *note
math: 8e. e *note cmath: 18. contêm várias funções matemáticas para
números de ponto flutuante e números complexos.  O módulo *note decimal:
36. suporta representações exatas de números decimais, usando aritmética
de precisão arbitrária.

Os seguintes módulos estão documentados neste capítulo:

* Menu:

* numbers — Classes base abstratas numéricas::
* math — Funções matemáticas::
* cmath — Funções matemáticas para números complexos::
* decimal — Aritmética de ponto fixo decimal e ponto flutuante::
* fractions — Números racionais::
* random — Gera números pseudoaleatórios::
* statistics — Funções estatísticas::


File: python.info,  Node: numbers — Classes base abstratas numéricas,  Next: math — Funções matemáticas,  Up: Módulos Matemáticos e Numéricos

5.9.1 ‘numbers’ — Classes base abstratas numéricas
--------------------------------------------------

'Código-fonte:' Lib/numbers.py(1)

__________________________________________________________________

O módulo ‘numbers’ ( PEP 3141(2)) define uma hierarquia de *note classes
base abstratas: 11f5. que progressivamente definem mais operações.
Nenhum dos tipos definidos neste módulo se destina a ser instanciado.

 -- Classe: numbers.Number

     A raiz da hierarquia numérica.  Se você quiser apenas verificar se
     um argumento 'x' é um número, sem se importar com o tipo, use
     ‘isinstance(x, Number)’.

* Menu:

* A torre numérica::
* Notas para implementadores de tipos::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/numbers.py

   (2) https://peps.python.org/pep-3141/


File: python.info,  Node: A torre numérica,  Next: Notas para implementadores de tipos,  Up: numbers — Classes base abstratas numéricas

5.9.1.1 A torre numérica
........................

 -- Classe: numbers.Complex

     As subclasses deste tipo descrevem números complexos e incluem as
     operações que funcionam no tipo embutido *note complex: 2f8.  Elas
     são: conversões para *note complex: 2f8. e *note bool: 468, *note
     real: 279b, *note imag: 279c, ‘+’, ‘-’, ‘*’, ‘/’, ‘**’, *note
     abs(): 1e2d, *note conjugate(): 279d, ‘==’ e ‘!=’.  Todos exceto
     ‘-’ e ‘!=’ são abstratos.

      -- Atributo: real

          Abstrata.  Obtém o componente real deste número.

      -- Atributo: imag

          Abstrata.  Obtém o componente imaginário deste número.

      -- Método: abstractmethod conjugate ()

          Abstrata.  Retorna o conjugado complexo.  Por exemplo,
          ‘(1+3j).conjugate() == (1-3j)’.

 -- Classe: numbers.Real

     Para *note Complex: 279a, ‘Real’ adiciona as operações que
     funcionam em números reais.

     Em suma, são: uma conversão para *note float: 2f7, *note
     math.trunc(): 1406, *note round(): 131d, *note math.floor(): 1404,
     *note math.ceil(): 1405, *note divmod(): 9a9, ‘//’, ‘%’, ‘<’, ‘<=’,
     ‘>’ e ‘>=’.

     Real também fornece padrão para *note complex(): 2f8, *note real:
     279b, *note imag: 279c. e *note conjugate(): 279d.

 -- Classe: numbers.Rational

     Estende *note Real: 232b. e adiciona as propriedades *note
     numerator: 279e. e *note denominator: 279f.  Ele fornece um padrão
     para *note float(): 2f7.

     Os valores *note numerator: 279e. e *note denominator: 279f. devem
     ser instâncias de *note Integral: 214b. e devem estar nos termos
     mais baixos com *note denominator: 279f. positivo.

      -- Atributo: numerator

          Abstrato.  O numerador deste número racional.

      -- Atributo: denominator

          Abstrato.  O denominador deste número racional.

 -- Classe: numbers.Integral

     Estende *note Rational: 1301. e adiciona uma conversão para *note
     int: 257.  Fornece padrões para *note float(): 2f7, *note
     numerator: 279e. e *note denominator: 279f.  Adiciona métodos
     abstratos para *note pow(): 9da. com operações de módulo e de
     string de bits: ‘<<’, ‘>>’, ‘&’, ‘^’, ‘|’, ‘~’.


File: python.info,  Node: Notas para implementadores de tipos,  Prev: A torre numérica,  Up: numbers — Classes base abstratas numéricas

5.9.1.2 Notas para implementadores de tipos
...........................................

Os implementadores devem ter o cuidado de tornar iguais números iguais e
fazer hash deles com os mesmos valores.  Isso pode ser sutil se houver
duas extensões diferentes dos números reais.  Por exemplo, *note
fractions.Fraction: 1e7. implementa *note hash(): 5eb. desta forma:

     def __hash__(self):
         if self.denominator == 1:
             # Obtém inteiros corretamente.
             return hash(self.numerator)
         # Verificação custosa, mas certamente correta.
         if self == float(self):
             return hash(float(self))
         else:
             # Use o hash da tupla para evitar uma alta taxa de colisão
             # em frações simples.
             return hash((self.numerator, self.denominator))

* Menu:

* Adicionando mais ABCs numéricas::
* Implementando as operações aritméticas::


File: python.info,  Node: Adicionando mais ABCs numéricas,  Next: Implementando as operações aritméticas,  Up: Notas para implementadores de tipos

5.9.1.3 Adicionando mais ABCs numéricas
.......................................

Existem, é claro, mais ABCs possíveis para números, e isso seria uma
hierarquia pobre se excluísse a possibilidade de adicioná-los.  Você
pode adicionar ‘MyFoo’ entre *note Complex: 279a. e *note Real: 232b.
com:

     class MyFoo(Complex): ...
     MyFoo.register(Real)


File: python.info,  Node: Implementando as operações aritméticas,  Prev: Adicionando mais ABCs numéricas,  Up: Notas para implementadores de tipos

5.9.1.4 Implementando as operações aritméticas
..............................................

Queremos implementar as operações aritméticas de forma que as operações
de modo misto chamem uma implementação cujo autor conhecia os tipos de
ambos os argumentos ou convertam ambos para o tipo embutido mais próximo
e façam a operação lá.  Para subtipos de *note Integral: 214b, isso
significa que *note __add__(): 2121. e *note __radd__(): 2122. devem ser
definidos com:

     class MyIntegral(Integral):

         def __add__(self, other):
             if isinstance(other, MyIntegral):
                 return do_my_adding_stuff(self, other)
             elif isinstance(other, OtherTypeIKnowAbout):
                 return do_my_other_adding_stuff(self, other)
             else:
                 return NotImplemented

         def __radd__(self, other):
             if isinstance(other, MyIntegral):
                 return do_my_adding_stuff(other, self)
             elif isinstance(other, OtherTypeIKnowAbout):
                 return do_my_other_adding_stuff(other, self)
             elif isinstance(other, Integral):
                 return int(other) + int(self)
             elif isinstance(other, Real):
                 return float(other) + float(self)
             elif isinstance(other, Complex):
                 return complex(other) + complex(self)
             else:
                 return NotImplemented

Existem 5 casos diferentes para uma operação de tipo misto em subclasses
de *note Complex: 279a.  Vou me referir a todo o código acima que não se
refere a ‘MyIntegral’ e ‘OtherTypeIKnowAbout’ com um “modelo”.  ‘a’ será
uma instância de ‘A’, que é um subtipo de *note Complex: 279a. (‘a : A
<: Complex’) e ‘b : B <: Complex’.  Vou considerar ‘a + b’:

  1. Se ‘A’ define um *note __add__(): 2121, que aceita ‘b’, está tudo
     bem.

  2. Se ‘A’ voltar ao código padrão e tivesse que retornar um valor de
     *note __add__(): 2121, perderíamos a possibilidade de que ‘B’
     definisse um *note __radd__(): 2122. mais inteligente, então o
     código padrão deve retornar *note NotImplemented: 7d3. de
     ‘__add__()’.  (Ou ‘A’ pode não implementar ‘__add__()’.)

  3. Então, *note __radd__(): 2122. do ‘B’ consegue uma chance.  Se ele
     aceitar ‘a’, está tudo bem.

  4. Se ele recorrer ao padrão, não há mais métodos possíveis para
     tentar, então é aqui que a implementação padrão deve residir.

  5. Se ‘B <: A’, Python tenta ‘B.__radd__’ antes de ‘A.__add__’.  Isso
     está ok, porque foi implementado com conhecimento de ‘A’, então ele
     pode lidar com essas instâncias antes de delegar para *note
     Complex: 279a.

Se ‘A <: Complex’ e ‘B <: Real’ sem compartilhar nenhum outro
conhecimento, então a operação compartilhada apropriada é aquela
envolvendo a *note complex: 2f8. embutida, e *note __radd__(): 2122. de
ambos chegam lá, de forma que ‘a+b == b+a’.

Como a maioria das operações em qualquer tipo será muito semelhante,
pode ser útil definir uma função auxiliar que gera as instâncias de
avanço e reversão de qualquer operador.  Por exemplo, *note
fractions.Fraction: 1e7. usa:

     def _operator_fallbacks(monomorphic_operator, fallback_operator):
         def forward(a, b):
             if isinstance(b, (int, Fraction)):
                 return monomorphic_operator(a, b)
             elif isinstance(b, float):
                 return fallback_operator(float(a), b)
             elif isinstance(b, complex):
                 return fallback_operator(complex(a), b)
             else:
                 return NotImplemented
         forward.__name__ = '__' + fallback_operator.__name__ + '__'
         forward.__doc__ = monomorphic_operator.__doc__

         def reverse(b, a):
             if isinstance(a, Rational):
                 # Inclui ints.
                 return monomorphic_operator(a, b)
             elif isinstance(a, Real):
                 return fallback_operator(float(a), float(b))
             elif isinstance(a, Complex):
                 return fallback_operator(complex(a), complex(b))
             else:
                 return NotImplemented
         reverse.__name__ = '__r' + fallback_operator.__name__ + '__'
         reverse.__doc__ = monomorphic_operator.__doc__

         return forward, reverse

     def _add(a, b):
         """a + b"""
         return Fraction(a.numerator * b.denominator +
                         b.numerator * a.denominator,
                         a.denominator * b.denominator)

     __add__, __radd__ = _operator_fallbacks(_add, operator.add)

     # ...


File: python.info,  Node: math — Funções matemáticas,  Next: cmath — Funções matemáticas para números complexos,  Prev: numbers — Classes base abstratas numéricas,  Up: Módulos Matemáticos e Numéricos

5.9.2 ‘math’ — Funções matemáticas
----------------------------------

__________________________________________________________________

Este módulo fornece acesso à constantes e funções matemáticas comuns,
incluindo aquelas definidas pelo padrão C.

Essas funções não podem ser usadas com números complexos; use as funções
de mesmo nome do módulo *note cmath: 18. se você precisar de suporte
para números complexos.  A distinção entre funções que suportam números
complexos e aquelas que não suportam é feita uma vez que a maioria dos
usuários não quer aprender a matemática necessária para entender números
complexos.  Receber uma exceção em vez de um resultado complexo permite
a detecção antecipada do número complexo inesperado usado como
parâmetro, para que o programador possa determinar como e por que ele
foi gerado em primeiro lugar.

As funções a seguir são fornecidas por este módulo.  Exceto quando
explicitamente indicado de outra forma, todos os valores de retorno são
pontos flutuantes.

'Funções de teoria dos números'

*note comb(n, k): 6d0.                                   Número de maneiras de escolher 'k' itens a partir de 'n' itens sem repetição e sem ordem
                                                         
                                                         
*note factorial(n): 94e.                                 Fatorial de 'n'
                                                         
                                                         
*note gcd(*integers): 916.                               Máximo divisor comum dos argumentos inteiros
                                                         
                                                         
*note isqrt(n): a0d.                                     Raiz quadrada inteira de um inteiro não negativo 'n'
                                                         
                                                         
*note lcm(*integers): 917.                               Mínimo múltiplo comum dos argumentos inteiros
                                                         
                                                         
*note perm(n, k): 6d1.                                   Número de maneiras de escolher 'k' itens de 'n' itens sem repetição e com ordem
                                                         
                                                         
'Arimética de ponto flutuante'

*note ceil(x): 1405.                                     Teto de 'x', o menor número inteiro maior ou igual a 'x'
                                                         
                                                         
*note fabs(x): 27a6.                                     Valor absoluto de 'x'
                                                         
                                                         
*note floor(x): 1404.                                    Piso de 'x', o maior inteiro menor ou igual a 'x'
                                                         
                                                         
*note fma(x, y, z): 205.                                 Operação de multiplicação e adição combinadas: ‘(x * y) + z’
                                                         
                                                         
*note fmod(x, y): 21fd.                                  Resto da divisão ‘x / y’
                                                         
                                                         
*note modf(x): 27a7.                                     Partes fracionárias e inteiras de 'x'
                                                         
                                                         
*note remainder(x, y): b68.                              Resto de 'x' em relação a 'y'
                                                         
                                                         
*note trunc(x): 1406.                                    Parte inteira de 'x'
                                                         
                                                         
'Funções de manipulação de ponto flutuante'

*note copysign(x, y): 141a.                              Magnitude (valor absoluto) de 'x' com o sinal de 'y'
                                                         
                                                         
*note frexp(x): 27a8.                                    Mantissa e expoente de 'x'
                                                         
                                                         
*note isclose(a, b, rel_tol, abs_tol): dd8.              Verifica se os valores 'a' e 'b' estão próximos um do outro
                                                         
                                                         
*note isfinite(x): 122b.                                 Verifica se 'x' não é infinito e nem um NaN
                                                         
                                                         
*note isinf(x): 1418.                                    Verifica se 'x' é um infinito positivo ou negativo
                                                         
                                                         
*note isnan(x): 1419.                                    Verifica se 'x' é um NaN (não um número)
                                                         
                                                         
*note ldexp(x, i): 162b.                                 ‘x * (2**i)’, inverso da função *note frexp(): 27a8.
                                                         
                                                         
*note nextafter(x, y, steps): 498.                       Valor de ponto flutuante de 'steps' passos depois de 'x' em direção a 'y'
                                                         
                                                         
*note ulp(x): 918.                                       Valor do bit menos significativo de 'x'
                                                         
                                                         
'Funções de potências, exponenciais e logarítmicas'

*note cbrt(x): 661.                                      Raiz cúbica de 'x'
                                                         
                                                         
*note exp(x): 1358.                                      'e' elevado à potência 'x'
                                                         
                                                         
*note exp2(x): 660.                                      '2' elevado a potência de 'x'
                                                         
                                                         
*note expm1(x): 122c.                                    'e' elevado a potência de 'x', menos 1
                                                         
                                                         
*note log(x, base): 1508.                                Logaritmo de 'x' para a base fornecida ('e' por padrão)
                                                         
                                                         
*note log1p(x): 141f.                                    Logaritmo natural de '1+x' (base 'e')
                                                         
                                                         
*note log2(x): 111a.                                     Logaritmo de base 2 de 'x'
                                                         
                                                         
*note log10(x): 27a9.                                    Logaritmo de base 10 de 'x'
                                                         
                                                         
*note pow(x, y): 662.                                    'x' elevado à potência 'y'
                                                         
                                                         
*note sqrt(x): a0e.                                      Raiz quadrada de 'x'
                                                         
                                                         
'Funções de soma e produto'

*note dist(p, q): a0a.                                   Distância euclidiana entre dois pontos 'p' e 'q' dada como um iterável de coordenadas
                                                         
                                                         
*note fsum(iterable): 141b.                              Soma dos valores na entrada 'iterable'
                                                         
                                                         
*note hypot(*coordinates): a0b.                          Norma euclidiana de um iterável de coordenadas
                                                         
                                                         
*note prod(iterable, start): a0c.                        Produto de elementos da entrada 'iterable' com um valor 'start'
                                                         
                                                         
*note sumprod(p, q): 497.                                Soma dos produtos de dois iteráveis 'p' e 'q'
                                                         
                                                         
'Conversão angular'

*note degrees(x): 27aa.                                  Converte o ângulo 'x' de radianos para graus
                                                         
                                                         
*note radians(x): 27ab.                                  Converte o ângulo 'x' de graus para radianos
                                                         
                                                         
'Funções trigonométricas'

*note acos(x): 27ac.                                     Arco cosseno de 'x'
                                                         
                                                         
*note asin(x): 27ad.                                     Arco seno de 'x'/
                                                         
                                                         
*note atan(x): 27ae.                                     Arco tangente de 'x'
                                                         
                                                         
*note atan2(y, x): 27af.                                 ‘atan(y / x)’
                                                         
                                                         
*note cos(x): 1507.                                      Cosseno de 'x'
                                                         
                                                         
*note sin(x): 1506.                                      Seno de 'x'
                                                         
                                                         
*note tan(x): 27b0.                                      Tangente de 'x'
                                                         
                                                         
'Funções hiperbólicas'

*note acosh(x): 141c.                                    Cosseno hiperbólico inverso de 'x'
                                                         
                                                         
*note asinh(x): 141d.                                    Seno hiperbólico inverso de 'x'
                                                         
                                                         
*note atanh(x): 141e.                                    Tangente hiperbólico inverso de 'x'
                                                         
                                                         
*note cosh(x): 27b1.                                     Cosseno hiperbólico de 'x'
                                                         
                                                         
*note sinh(x): 27b2.                                     Seno hiperbólico de 'x'
                                                         
                                                         
*note tanh(x): 27b3.                                     Tangente hiperbólico de 'x'
                                                         
                                                         
'Funções especiais'

*note erf(x): bf3.                                       Função erro(1) em 'x'
                                                         
                                                         
*note erfc(x): bf4.                                      Função erro complementar(2) em 'x'
                                                         
                                                         
*note gamma(x): 122d.                                    Função gama(3) em 'x'
                                                         
                                                         
*note lgamma(x): 122e.                                   Logaritmo natural do valor absoluto da função gama(4) em 'x'
                                                         
                                                         
'Constantes'

*note pi: 27b4.                                          'π' = 3.141592…
                                                         
                                                         
*note e: 27b5.                                           'e' = 2.718281…
                                                         
                                                         
*note tau: 27b6.                                         'τ' = 2'π' = 6.283185…
                                                         
                                                         
*note inf: ca1.                                          Infinito positivo
                                                         
                                                         
*note nan: 663.                                          “Not a number” (NaN)
                                                         

* Menu:

* Funções de teoria dos números::
* Arimética de ponto flutuante::
* Funções de manipulação de ponto flutuante::
* Funções de potências, exponenciais e logarítmicas: Funções de potências exponenciais e logarítmicas.
* Funções de soma e produto::
* Conversão angular::
* Funções trigonométricas::
* Funções hiperbólicas::
* Funções especiais::
* Constantes: Constantes<2>.

   ---------- Footnotes ----------

   (1) https://pt.wikipedia.org/wiki/Função_erro

   (2) https://pt.wikipedia.org/wiki/Função_erro

   (3) https://pt.wikipedia.org/wiki/Função_gama

   (4) https://pt.wikipedia.org/wiki/Função_gama


File: python.info,  Node: Funções de teoria dos números,  Next: Arimética de ponto flutuante,  Up: math — Funções matemáticas

5.9.2.1 Funções de teoria dos números
.....................................

 -- Função: math.comb (n, k)

     Retorna o número de maneiras de escolher 'k' itens de 'n' itens sem
     repetição e sem ordem.

     Avalia para ‘n! / (k! * (n - k)!)’ quando ‘k <= n’ e avalia para
     zero quando ‘k > n’.

     Também conhecido como coeficiente binomial pois equivale ao
     coeficiente do k-ésimo termo na expansão polinomial ‘(1 + x)ⁿ’

     Levanta *note TypeError: 2c3. se algum dos argumentos não for
     inteiro.  Levanta *note ValueError: 202. se algum dos argumentos
     for negativo.

     Adicionado na versão 3.8.

 -- Função: math.factorial (n)

     Retorna fatorial do inteiro não negativo 'n'.

     Alterado na versão 3.10: Números de ponto flutuate com valor
     integral (como ‘5.0’) não são mais aceitos.

 -- Função: math.gcd (*integers)

     Retorna o maior divisor comum dos argumentos inteiros
     especificados.  Se algum dos argumentos for diferente de zero, o
     valor retornado será o maior inteiro positivo que é um divisor de
     todos os argumentos.  Se todos os argumentos forem zero, o valor
     retornado será ‘0’.  ‘gcd()’ sem argumentos retorna ‘0’.

     Adicionado na versão 3.5.

     Alterado na versão 3.9: Adicionado suporte para um número
     arbitrário de argumentos.  Anteriormente, apenas dois argumentos
     eram suportados.

 -- Função: math.isqrt (n)

     Retorna a raiz quadrada inteira do inteiro não negativo 'n'.  Este
     é o piso da raiz quadrada exata de 'n', ou equivalentemente o maior
     inteiro 'a' tal que 'a'² ≤ 'n'.

     Para algumas aplicações, pode ser mais conveniente ter o menor
     número inteiro 'a' tal que 'n' ≤ 'a'² ou, em outras palavras, o
     teto da raiz quadrada exata de 'n'.  Para 'n' positivo, isso pode
     ser calculado usando ‘a = 1 + isqrt(n - 1)’.

     Adicionado na versão 3.8.

 -- Função: math.lcm (*integers)

     Retorna o mínimo múltiplo comum dos argumentos inteiros
     especificados.  Se todos os argumentos forem diferentes de zero, o
     valor retornado será o menor inteiro positivo que é um múltiplo de
     todos os argumentos.  Se algum dos argumentos for zero, o valor
     retornado será ‘0’.  ‘lcm()’ sem argumentos retorna ‘1’.

     Adicionado na versão 3.9.

 -- Função: math.perm (n, k=None)

     Retorna o número de maneiras de escolher 'k' itens de 'n' itens sem
     repetição e com ordem.

     Avalia para ‘n! / (n - k)!’ quando ‘k <= n’ e avalia para zero
     quando ‘k > n’.

     Se 'k' não for especificado ou for ‘None’, 'k' usará o padrão 'n' e
     a função retornará ‘n!’.

     Levanta *note TypeError: 2c3. se algum dos argumentos não for
     inteiro.  Levanta *note ValueError: 202. se algum dos argumentos
     for negativo.

     Adicionado na versão 3.8.


File: python.info,  Node: Arimética de ponto flutuante,  Next: Funções de manipulação de ponto flutuante,  Prev: Funções de teoria dos números,  Up: math — Funções matemáticas

5.9.2.2 Arimética de ponto flutuante
....................................

 -- Função: math.ceil (x)

     Retorna o teto de 'x', o menor inteiro maior ou igual que 'x'.  Se
     'x' não é um float, delega para *note x.__ceil__: 214a, que deve
     retornar um valor do tipo *note Integral: 214b.

 -- Função: math.fabs (x)

     Retorna o valor absoluto de 'x'.

 -- Função: math.floor (x)

     Retorna o chão de 'x', o maior inteiro menor ou igual a 'x'.  Se
     'x' não é um ponto flutuante, delega para *note x.__floor__: 2149,
     que deve retornar um valor do tipo *note Integral: 214b.

 -- Função: math.fma (x, y, z)

     Operação de multiplicação-adição combinada.  Retorna ‘(x * y) + z’,
     calculado de forma a obter o mesmo resultado que seria obtido se o
     cálculo desfrutasse de precisão e limites infinitos, seguido de um
     único arredondamento para o formato ‘float’.  Esta operação
     frequentemente oferece acurácia melhor do que a expressão direta
     ‘(x * y) + z’ ofereceria.

     Esta função segue a especificação da operação fusedMultiplyAdd
     descrita no padrão IEEE 754.  O padrão deixa um caso a ser definido
     pela implementação, que são os resultados de ‘fma(0, inf, nan)’ e
     ‘fma(inf, 0, nan)’.  Nestes casos, ‘math.fma’ retorna NaN, e não
     levanta nenhuma exceção.

     Adicionado na versão 3.13.

 -- Função: math.fmod (x, y)

     Retorna o resto ponto flutuante de ‘x / y’, conforme definido pela
     função ‘fmod(x, y)’ da biblioteca C da plataforma.  Observe que a
     expressão Python ‘x % y’ pode não retornar o mesmo resultado.  A
     intenção do padrão C é que ‘fmod(x, y)’ seja exatamente
     (matematicamente; com precisão infinita) igual a ‘x - n*y’ para
     algum inteiro 'n' de modo que o resultado tenha o mesmo sinal que
     'x' e magnitude menor que ‘abs(y)’.  O ‘x % y’ do Python retorna um
     resultado com o sinal de 'y', e pode não ser exatamente computável
     para argumentos de ponto flutuante.  Por exemplo, ‘fmod(-1e-100,
     1e100)’ é ‘-1e-100’, mas o resultado de ‘-1e-100 % 1e100’ do Python
     é ‘1e100-1e-100’, que não pode ser representado exatamente como um
     ponto flutuante, e é arredondado para o surpreendente ‘1e100’.  Por
     esta razão, a função *note fmod(): 21fd. é geralmente preferida ao
     trabalhar com pontos flutuantes, enquanto o ‘x % y’ do Python é
     preferido ao trabalhar com inteiros.

 -- Função: math.modf (x)

     Retorna as partes fracionárias e inteiras de 'x'.  Ambos os
     resultados carregam o sinal de 'x' e são pontos flutuantes.

     Observe que *note modf(): 27a7. tem um padrão de chamada/retorno
     diferente de seu equivalente C: elas pegam um único argumento e
     retornam um par de valores, ao invés de retornar seu segundo valor
     de retorno por meio de um “parâmetro de saída” (não existe tal
     coisa em Python).

 -- Função: math.remainder (x, y)

     Retorna o resto no estilo IEEE 754 de 'x' em relação a 'y'.  Para o
     finito 'x' e o finito diferente de zero 'y', esta é a diferença ‘x
     - n*y’, onde ‘n’ é o número inteiro mais próximo do valor exato do
     quociente ‘x / y’ .  Se ‘x / y’ está exatamente no meio do caminho
     entre dois inteiros consecutivos, o inteiro 'par' mais próximo é
     usado para ‘n’.  O resto ‘r = remainder(x, y)’ assim sempre
     satisfaz ‘abs(r) <= 0.5 * abs(y)’.

     Casos especiais seguem IEEE 754: em particular, ‘remainder(x,
     math.inf)’ é 'x' para qualquer 'x' finito, e ‘remainder(x, 0)’ e
     ‘remainder(math.inf, x)’ levantam *note ValueError: 202. para
     qualquer 'x' não NaN. Se o resultado da operação ‘remainder’ for
     zero, esse zero terá o mesmo sinal de 'x'.

     Em plataformas que usam ponto flutuante binário do IEEE 754, o
     resultado dessa operação é sempre exatamente representável: nenhum
     erro de arredondamento é introduzido.

     Adicionado na versão 3.7.

 -- Função: math.trunc (x)

     Retorna 'x' com a parte fracionária removida, deixando a parte
     inteira.  Isso arredonda para 0: ‘trunc()’ é equivalente a *note
     floor(): 1404. para 'x' positivos, e equivalentes a *note ceil():
     1405. para 'x' negativos.  Se 'x' não é um ponto flutuante, então
     delega para *note x.__trunc__: 71b, cujo qual deve retornar um
     valor do tipo *note Integral: 214b.

Para as funções *note ceil(): 1405, *note floor(): 1404. e *note modf():
27a7, observe que 'todos' os números de ponto flutuante de magnitude
suficientemente grande são inteiros exatos.  Os pontos flutuantes do
Python normalmente não carregam mais do que 53 bits de precisão (o mesmo
que o tipo duplo da plataforma C), caso em que qualquer ponto flutuante
'x' com ‘abs(x) >= 2**52’ necessariamente não tem bits fracionários.


File: python.info,  Node: Funções de manipulação de ponto flutuante,  Next: Funções de potências exponenciais e logarítmicas,  Prev: Arimética de ponto flutuante,  Up: math — Funções matemáticas

5.9.2.3 Funções de manipulação de ponto flutuante
.................................................

 -- Função: math.copysign (x, y)

     Retorna um ponto flutuante com a magnitude (valor absoluto) de 'x',
     mas o sinal de 'y'.  Em plataformas que suportam zeros com sinal,
     ‘copysign(1.0, -0.0)’ retorna '-1.0'.

 -- Função: math.frexp (x)

     Retorna a mantissa e o expoente de 'x' como o par ‘(m, e)’.  'm' é
     um ponto flutuante e 'e' é um inteiro tal que ‘x == m * 2**e’
     exatamente.  Se 'x' for zero, retorna ‘(0.0, 0)’, caso contrário,
     ‘0.5 <= abs(m) < 1’.  Isso é usado para “separar” a representação
     interna de um ponto flutuante de forma portátil.

     Observe que *note frexp(): 27a8. tem um padrão de chamada/retorno
     diferente de seu equivalente C: elas pegam um único argumento e
     retornam um par de valores, ao invés de retornar seu segundo valor
     de retorno por meio de um “parâmetro de saída” (não existe tal
     coisa em Python).

 -- Função: math.isclose (a, b, *, rel_tol=1e-09, abs_tol=0.0)

     Retorna ‘True’ se os valores 'a' e 'b' estiverem próximos e ‘False’
     caso contrário.

     Se dois valores são considerados próximos ou não é determinado de
     acordo com tolerâncias absolutas e relativas fornecidas.  Se nenhum
     erro ocorrer, o resultado será: ‘abs(a-b) <= max(rel_tol *
     max(abs(a), abs(b)), abs_tol)’.

     'rel_tol' é a tolerância relativa – é a diferença máxima permitida
     entre 'a' e 'b', em relação ao maior valor absoluto de 'a' ou 'b'.
     Por exemplo, para definir uma tolerância de 5%, passe
     ‘rel_tol=0.05’.  A tolerância padrão é ‘1e-09’, o que garante que
     os dois valores sejam iguais em cerca de 9 dígitos decimais.
     'rel_tol' deve ser não negativo e menor que ‘1.0’.

     'abs_tol' é a tolerância absoluta; o padrão é ‘0.0’ e deve ser não
     negativo.  Ao comparar ‘x’ com ‘0.0’, ‘isclose(x, 0)’ é computado
     como ‘abs(x) <= rel_tol * abs(x)’, que é ‘False’ para qualquer ‘x’
     não zero e 'rel_tol' menor que ‘1.0’.  Então adicione um argumento
     'abs_tol' positivo apropriado à chamada.

     Os valores especiais do IEEE 754 de ‘NaN’, ‘inf’ e ‘-inf’ serão
     tratados de acordo com as regras do IEEE. Especificamente, ‘NaN’
     não é considerado próximo a qualquer outro valor, incluindo ‘NaN’.
     ‘inf’ e ‘-inf’ são considerados apenas próximos a si mesmos.

     Adicionado na versão 3.5.

     Ver também
     ..........

     PEP 485(1) – Uma função para testar igualdade aproximada

 -- Função: math.isfinite (x)

     Retorna ‘True’ se 'x' não for um infinito nem um NaN, e ‘False’
     caso contrário.  (Observe que ‘0.0’ 'é' considerado finito.)

     Adicionado na versão 3.2.

 -- Função: math.isinf (x)

     Retorna ‘True’ se 'x' for um infinito positivo ou negativo, e
     ‘False’ caso contrário.

 -- Função: math.isnan (x)

     Retorna ‘True’ se 'x' for um NaN (não um número), e ‘False’ caso
     contrário.

 -- Função: math.ldexp (x, i)

     Retorna ‘x * (2**i)’.  Este é essencialmente o inverso da função
     *note frexp(): 27a8.

 -- Função: math.nextafter (x, y, steps=1)

     Retorna o valor de ponto flutuante com 'steps' passos após 'x' em
     direção a 'y'.

     Se 'x' for igual a 'y', retorna 'y', a menos que 'steps' seja zero.

     Exemplos:

        * ‘math.nextafter(x, math.inf)’ sobe: em direção ao infinito
          positivo.

        * ‘math.nextafter(x, -math.inf)’ desce: em direção ao menos
          infinito.

        * ‘math.nextafter(x, 0.0)’ vai em direção a zero.

        * ‘math.nextafter(x, math.copysign(math.inf, x))’ se afasta do
          zero.

     Veja também ‘math.ulp.()’

     Adicionado na versão 3.9.

     Alterado na versão 3.12: Adicionado o argumento 'steps'.

 -- Função: math.ulp (x)

     Retorna o valor do bit menos significativo do ponto flutuante 'x':

        * Se 'x' for um NaN (não um número), retorna 'x'.

        * Se 'x' for negativo, retorna ‘ulp(-x)’.

        * Se 'x' for um infinito positivo, retorna 'x'.

        * Se 'x' for igual a zero, retorna o menor valor flutuante
          positivo 'desnormalizado' representável (menor que o ponto
          flutuante de valor mínimo positivo 'normalizado', *note
          sys.float_info.min: 1b62.).

        * Se 'x' for igual ao maior ponto flutuante positivo
          representável, retorna o valor do bit menos significativo de
          'x', tal que o primeiro ponto flutuante menor que 'x' seja ‘x
          - ulp(x)’.

        * Caso contrário ('x' é um número finito positivo), retorna o
          valor do bit menos significativo de 'x', de modo que o
          primeiro ponto flutuante maior que 'x' seja ‘x + ulp(x)’.

     ULP significa “Unit in the Last Place” ou, em português, unidade na
     última posição.

     Veja também *note math.nextafter(): 498. e *note
     sys.float_info.epsilon: 1b62.

     Adicionado na versão 3.9.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0485/


File: python.info,  Node: Funções de potências exponenciais e logarítmicas,  Next: Funções de soma e produto,  Prev: Funções de manipulação de ponto flutuante,  Up: math — Funções matemáticas

5.9.2.4 Funções de potências, exponenciais e logarítmicas
.........................................................

 -- Função: math.cbrt (x)

     Retorna a raiz cúbica de 'x'.

     Adicionado na versão 3.11.

 -- Função: math.exp (x)

     Retorna 'e' elevado à potência 'x', onde 'e' = 2.718281… é a base
     dos logaritmos naturais.  Isso geralmente é mais preciso do que
     ‘math.e ** x’ ou ‘pow(math.e, x)’.

 -- Função: math.exp2 (x)

     Retorna '2' elevado a 'x'

     Adicionado na versão 3.11.

 -- Função: math.expm1 (x)

     Retorna 'e' elevado à potência 'x', menos 1.  Aqui 'e' é a base dos
     logaritmos naturais.  Para pequenos pontos flutuantes 'x', a
     subtração em ‘exp(x) - 1’ pode resultar em uma perda significativa
     de precisão(1); a função *note expm1(): 122c. fornece uma maneira
     de calcular essa quantidade com precisão total:

          >>> from math import exp, expm1
          >>> exp(1e-5) - 1  # gives result accurate to 11 places
          1.0000050000069649e-05
          >>> expm1(1e-5)    # result accurate to full precision
          1.0000050000166668e-05

     Adicionado na versão 3.2.

 -- Função: math.log (x[, base])

     Com um argumento, retorna o logaritmo natural de 'x' (para base
     'e').

     Com dois argumentos, retorna o logaritmo de 'x' para a 'base'
     fornecida, calculada como ‘log(x)/log(base)’.

 -- Função: math.log1p (x)

     Retorna o logaritmo natural de '1+x' (base 'e').  O resultado é
     calculado de forma precisa para 'x' próximo a zero.

 -- Função: math.log2 (x)

     Retorna o logaritmo de base 2 de 'x'.  Isso geralmente é mais
     preciso do que ‘log(x, 2)’.

     Adicionado na versão 3.3.

     Ver também
     ..........

     *note int.bit_length(): 232f. retorna o número de bits necessários
     para representar um inteiro em binário, excluindo o sinal e os
     zeros à esquerda.

 -- Função: math.log10 (x)

     Retorna o logaritmo de base 10 de 'x'.  Isso geralmente é mais
     preciso do que ‘log(x, 10)’.

 -- Função: math.pow (x, y)

     Retorna 'x' elevado a potência de 'y'.  Exceções seguem o padrão
     IEEE 754 o máximo possível.  ‘pow(1.0, x)’ e ‘pow(x, 0.0)’ em
     particular sempre retornam ‘1.0’, mesmo quando 'x' é ZERO ou NaN.
     Se ambos 'x' e 'y' são números finitos, 'x' é negativo, e 'y' não é
     um inteiro então ‘pow(x, y)’ é indefinido e levanta *note
     ValueError: 202.

     Ao contrário do operador embutido ‘**’, *note math.pow(): 662.
     converte ambos os seus argumentos para o tipo *note float: 2f7.
     Use ‘**’ ou a função embutida *note pow(): 9da. para calcular
     potências inteiras exatas.

     Alterado na versão 3.11: Os casos especiais ‘pow(0.0, -inf)’ e
     ‘pow(-0.0, -inf)’ foram alterados para retornar ‘inf’ ao invés de
     levantar *note ValueError: 202, para ter consistência com a IEEE
     754.

 -- Função: math.sqrt (x)

     Retorna a raiz quadrada de 'x'.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Loss_of_significance


File: python.info,  Node: Funções de soma e produto,  Next: Conversão angular,  Prev: Funções de potências exponenciais e logarítmicas,  Up: math — Funções matemáticas

5.9.2.5 Funções de soma e produto
.................................

 -- Função: math.dist (p, q)

     Retorna a distância euclidiana entre dois pontos 'p' e 'q', cada um
     dado como uma sequência (ou iterável) de coordenadas.  Os dois
     pontos devem ter a mesma dimensão.

     Aproximadamente equivalente a:

          sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q)))

     Adicionado na versão 3.8.

 -- Função: math.fsum (iterable)

     Retorna uma soma precisa dos valores de ponto flutuante no
     iterável.  Evita perda de precisão rastreando várias somas parciais
     intermediárias.

     A precisão do algoritmo depende das garantias aritméticas do
     IEEE-754 e do caso típico em que o modo de arredondamento é meio
     par.  Em algumas compilações que não são do Windows, a biblioteca C
     subjacente usa adição de precisão estendida e pode ocasionalmente
     arredondar uma soma intermediária fazendo com que ela introduza um
     erro no bit menos significativo.

     Para uma discussão mais aprofundada e duas abordagens alternativas,
     consulte o ASPN cookbook recipes for accurate floating point
     summation(1).

 -- Função: math.hypot (*coordinates)

     Retorna a norma euclidiana, ‘sqrt(sum(x**2 for x in coordinates))’.
     Este é o comprimento do vetor da origem até o ponto dado pelas
     coordenadas.

     Para um ponto bidimensional ‘(x, y)’, isso é equivalente a calcular
     a hipotenusa de um triângulo retângulo usando o teorema de
     Pitágoras, ‘sqrt(x*x + y*y)’.

     Alterado na versão 3.8: Adicionado suporte para pontos
     n-dimensionais.  Anteriormente, apenas o caso bidimensional era
     suportado.

     Alterado na versão 3.10: Melhorou a precisão do algoritmo para que
     o erro máximo seja inferior a 1 ulp (unidade no último lugar).
     Mais tipicamente, o resultado é quase sempre arredondado
     corretamente para 1/2 ulp.

 -- Função: math.prod (iterable, *, start=1)

     Calcula o produto de todos os elementos na entrada 'iterable'.  O
     valor 'start' padrão para o produto é ‘1’.

     Quando o iterável estiver vazio, retorna o valor de start.  Esta
     função deve ser usada especificamente com valores numéricos e pode
     rejeitar tipos não numéricos.

     Adicionado na versão 3.8.

 -- Função: math.sumprod (p, q)

     Retorna a soma dos produtos dos valores de dois iteráveis 'p' e
     'q'.

     Levanta *note ValueError: 202. se as entradas não tiverem o mesmo
     comprimento.

     Aproximadamente equivalente a:

          sum(itertools.starmap(operator.mul, zip(p, q, strict=True)))

     Para entradas float e mistas int/float, os produtos intermediários
     e as somas são calculados com precisão estendida.

     Adicionado na versão 3.12.

   ---------- Footnotes ----------

   (1) 
https://code.activestate.com/recipes/393090-binary-floating-point-summation-accurate-to-full-p/


File: python.info,  Node: Conversão angular,  Next: Funções trigonométricas,  Prev: Funções de soma e produto,  Up: math — Funções matemáticas

5.9.2.6 Conversão angular
.........................

 -- Função: math.degrees (x)

     Converte o ângulo 'x' de radianos para graus.

 -- Função: math.radians (x)

     Converte o ângulo 'x' de graus para radianos.


File: python.info,  Node: Funções trigonométricas,  Next: Funções hiperbólicas,  Prev: Conversão angular,  Up: math — Funções matemáticas

5.9.2.7 Funções trigonométricas
...............................

 -- Função: math.acos (x)

     Retorna o arco cosseno de 'x', em radianos.  O resultado está entre
     ‘0’ e ‘pi’.

 -- Função: math.asin (x)

     Retorna o arco seno de 'x', em radianos.  O resultado está entre
     ‘-pi/2’ e ‘pi/2’.

 -- Função: math.atan (x)

     Retorna o arco tangente de 'x', em radianos.  O resultado está
     entre ‘-pi/2’ e ‘pi/2’.

 -- Função: math.atan2 (y, x)

     Retorna ‘atan(y / x)’, em radianos.  O resultado está entre ‘-pi’ e
     ‘pi’.  O vetor no plano da origem ao ponto ‘(x, y)’ faz este ângulo
     com o eixo X positivo.  O ponto de *note atan2(): 27af. é que os
     sinais de ambas as entradas são conhecidos por ele, então ele pode
     calcular o quadrante correto para o ângulo.  Por exemplo, ‘atan(1)’
     e ‘atan2(1, 1)’ são ambos ‘pi/4’, mas ‘atan2(-1, -1)’ é ‘-3*pi/4’.

 -- Função: math.cos (x)

     Retorna o cosseno de 'x' radianos.

 -- Função: math.sin (x)

     Retorna o seno de 'x' radianos.

 -- Função: math.tan (x)

     Retorna o tangente de 'x' radianos.


File: python.info,  Node: Funções hiperbólicas,  Next: Funções especiais,  Prev: Funções trigonométricas,  Up: math — Funções matemáticas

5.9.2.8 Funções hiperbólicas
............................

Funções hiperbólicas(1) são análogas às funções trigonométricas baseadas
em hipérboles em vez de círculos.

 -- Função: math.acosh (x)

     Retorna o cosseno hiperbólico inverso de 'x'.

 -- Função: math.asinh (x)

     Retorna o seno hiperbólico inverso de 'x'.

 -- Função: math.atanh (x)

     Retorna a tangente hiperbólica inversa de 'x'.

 -- Função: math.cosh (x)

     Retorna o cosseno hiperbólico de 'x'.

 -- Função: math.sinh (x)

     Retorna o seno hiperbólico de 'x'.

 -- Função: math.tanh (x)

     Retorna a tangente hiperbólica de 'x'.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Hyperbolic_functions


File: python.info,  Node: Funções especiais,  Next: Constantes<2>,  Prev: Funções hiperbólicas,  Up: math — Funções matemáticas

5.9.2.9 Funções especiais
.........................

 -- Função: math.erf (x)

     Retorna a função erro(1) em 'x'.

     A função *note erf(): bf3. pode ser usada para calcular funções
     estatísticas tradicionais, como a distribuição normal padrão
     cumulativa(2):

          def phi(x):
              'Função de distribuição cumulativa para a distribuição normal padrão.'
              return (1.0 + erf(x / sqrt(2.0))) / 2.0

     Adicionado na versão 3.2.

 -- Função: math.erfc (x)

     Retorna a função erro complementar em 'x'.  A função erro
     complementar(3) é definida como ‘1.0 - erf(x)’.  É usado para
     grandes valores de 'x' onde uma subtração de um causaria uma perda
     de significância(4).

     Adicionado na versão 3.2.

 -- Função: math.gamma (x)

     Retorna a função gama(5) em 'x'.

     Adicionado na versão 3.2.

 -- Função: math.lgamma (x)

     Retorna o logaritmo natural do valor absoluto da função gama em
     'x'.

     Adicionado na versão 3.2.

   ---------- Footnotes ----------

   (1) https://pt.wikipedia.org/wiki/Função_erro

   (2) https://en.wikipedia.org/wiki/Cumulative_distribution_function

   (3) https://en.wikipedia.org/wiki/Error_function

   (4) https://en.wikipedia.org/wiki/Loss_of_significance

   (5) https://pt.wikipedia.org/wiki/Função_gama


File: python.info,  Node: Constantes<2>,  Prev: Funções especiais,  Up: math — Funções matemáticas

5.9.2.10 Constantes
...................

 -- Dado: math.pi

     A constante matemática 'π' = 3.141592…, para a precisão disponível.

 -- Dado: math.e

     A constante matemática 'e' = 2.718281…, para a precisão disponível.

 -- Dado: math.tau

     A constante matemática 'τ' = 6.283185…, para a precisão disponível.
     Tau é uma constante de círculo igual a 2'π', a razão entre a
     circunferência de um círculo e seu raio.  Para saber mais sobre
     Tau, confira o vídeo Pi is (still) Wrong(1) de Vi Hart, e comece a
     comemorar o dia do Tau(2) comendo duas vezes mais torta!

     Adicionado na versão 3.6.

 -- Dado: math.inf

     Um infinito positivo de ponto flutuante.  (Para infinito negativo,
     use ‘-math.inf’.)  Equivalente à saída de ‘float('inf')’.

     Adicionado na versão 3.5.

 -- Dado: math.nan

     Um valor de ponto flutuante “não é um número” (NaN). Equivalente à
     saída de ‘float('nan')’.  Devido aos requisitos do padrão
     IEEE-754(3), ‘math.nan’ e ‘float('nan')’ não são considerados para
     ser igual a qualquer outro valor numérico, incluindo eles próprios.
     Para verificar se um número é NaN, use a função *note isnan():
     1419. para testar NaNs em vez de ‘is’ ou ‘==’.  Exemplo:

          >>> import math
          >>> math.nan == math.nan
          False
          >>> float('nan') == float('nan')
          False
          >>> math.isnan(math.nan)
          True
          >>> math.isnan(float('nan'))
          True

     Adicionado na versão 3.5.

     Alterado na versão 3.11: Agora está sempre disponível

O módulo *note math: 8e. consiste principalmente em invólucros finos em
torno das funções da biblioteca matemática C da plataforma.  O
comportamento em casos excepcionais segue o Anexo F da norma C99 quando
apropriado.  A implementação atual levantará *note ValueError: 202. para
operações inválidas como ‘sqrt(-1.0)’ ou ‘log(0.0)’ (onde C99 Anexo F
recomenda sinalizar operação inválida ou divisão por zero), e *note
OverflowError: 885. para resultados que estouram (por exemplo,
‘exp(1000.0)’).  Um NaN não será retornado de nenhuma das funções acima,
a menos que um ou mais dos argumentos de entrada sejam um NaN; nesse
caso, a maioria das funções retornará um NaN, mas (novamente seguindo
C99 Anexo F) há algumas exceções a esta regra, por exemplo,
‘pow(float('nan'), 0.0)’ ou ‘hypot(float('nan'), float('inf'))’.

Observe que o Python não faz nenhum esforço para distinguir NaNs de
sinalização de NaNs silenciosos, e o comportamento para NaNs de
sinalização permanece não especificado.  O comportamento típico é tratar
todos os NaNs como se estivessem quietos.

Ver também
..........

Módulo *note cmath: 18.

     Versões de números complexos de muitas dessas funções.

   ---------- Footnotes ----------

   (1) https://vimeo.com/147792667

   (2) https://tauday.com/

   (3) https://en.wikipedia.org/wiki/IEEE_754


File: python.info,  Node: cmath — Funções matemáticas para números complexos,  Next: decimal — Aritmética de ponto fixo decimal e ponto flutuante,  Prev: math — Funções matemáticas,  Up: Módulos Matemáticos e Numéricos

5.9.3 ‘cmath’ — Funções matemáticas para números complexos
----------------------------------------------------------

__________________________________________________________________

Este módulo fornece acesso a funções matemáticas para números complexos.
As funções neste módulo aceitam inteiros, números de ponto flutuante ou
números complexos como argumentos.  Eles também aceitarão qualquer
objeto Python que tenha um método *note __complex__(): 5e7. ou *note
__float__(): 9d4.: esses métodos são usados para converter o objeto em
um número complexo ou de ponto flutuante, respectivamente, e a função é
então aplicada ao resultado da conversão.

     Nota: Para funções que envolvem cortes de ramificação, temos o
     problema de decidir como definir essas funções no próprio corte.
     Seguindo o artigo de Kahan intitulado “Branch cuts for complex
     elementary functions” (em tradução livre, “Cortes de ramificação
     para funções complexas elementares”), bem como o Anexo G do C99 e
     padrões C posteriores, usamos o sinal de zero para distinguir um
     lado do outro no corte de ramificação: para um corte de ramificação
     ao longo (de uma porção) do eixo real olhamos para o sinal da parte
     imaginária, enquanto para um corte de ramificação ao longo do eixo
     imaginário olhamos para o sinal da parte real.

     Por exemplo, a função *note cmath.sqrt(): 27c4. tem um corte de
     ramificação ao longo do eixo real negativo.  Um argumento de
     ‘complex(-2.0, -0.0)’ é tratado como se estivesse 'abaixo' do corte
     de ramificação, e assim dá um resultado no eixo imaginário
     negativo:

          >>> cmath.sqrt(complex(-2.0, -0.0))
          -1.4142135623730951j

     Mas um argumento de ‘complex(-2.0, 0.0)’ é tratado como se
     estivesse acima do corte de ramificação:

          >>> cmath.sqrt(complex(-2.0, 0.0))
          1.4142135623730951j

'Conversões de e para coordenadas polares'

*note phase(z): 27c5.                                    Retorna a fase de 'z'
                                                         
                                                         
*note polar(z): 27c6.                                    Retorna a representação de 'z' em coordenadas polares
                                                         
                                                         
*note rect(r, phi): 27c7.                                Retorna o número complexo 'z' com coordenadas polares 'r' e 'phi'
                                                         
                                                         
'Funções de potência e logarítmicas'

*note exp(z): 27c8.                                      Retorna 'e' elevado à potência 'z'
                                                         
                                                         
*note log(z[, base]): 27c9.                              Retorna o logaritmo de 'z' para a 'base' fornecida ('e' por padrão)
                                                         
                                                         
*note log10(z): 27ca.                                    Retorna o logaritmo de base 10 de 'z'
                                                         
                                                         
*note sqrt(z): 27c4.                                     Retorna a raiz quadrada de 'z'
                                                         
                                                         
'Funções trigonométricas'

*note acos(z): 27cb.                                     Retorna o arco cosseno de 'z'
                                                         
                                                         
*note asin(z): 27cc.                                     Retorna o arco seno de 'z'
                                                         
                                                         
*note atan(z): 27cd.                                     Retorna o arco tangente de 'z'
                                                         
                                                         
*note cos(z): 27ce.                                      Retorna o cosseno de 'z'
                                                         
                                                         
*note sin(z): 27cf.                                      Retorna o seno de 'z'
                                                         
                                                         
*note tan(z): 27d0.                                      Retorna a tangente de 'z'
                                                         
                                                         
'Funções hiperbólicas'

*note acosh(z): 27d1.                                    Retorna o cosseno hiperbólico inverso de 'z'
                                                         
                                                         
*note asinh(z): 27d2.                                    Retorna o seno hiperbólico inverso de 'z'
                                                         
                                                         
*note atanh(z): 27d3.                                    Retorna a tangente hiperbólica inversa de 'z'
                                                         
                                                         
*note cosh(z): 27d4.                                     Retorna o cosseno hiperbólico de 'z'
                                                         
                                                         
*note sinh(z): 27d5.                                     Retorna o seno hiperbólico de 'z'
                                                         
                                                         
*note tanh(z): 27d6.                                     Retorna a tangente hiperbólica de 'z'
                                                         
                                                         
'Funções de classificação'

*note isfinite(z): 27d7.                                 Verifica se todos os componentes de 'z' são finitos
                                                         
                                                         
*note isinf(z): 27d8.                                    Verifica se algum componente de 'z' é infinito
                                                         
                                                         
*note isnan(z): 27d9.                                    Verifica se algum componente de 'z' é NaN
                                                         
                                                         
*note isclose(a, b, *, rel_tol, abs_tol): dd9.           Verifica se os valores 'a' e 'b' estão próximos um do outro
                                                         
                                                         
'Constantes'

*note pi: 27da.                                          'π' = 3.141592…
                                                         
                                                         
*note e: 27db.                                           'e' = 2.718281…
                                                         
                                                         
*note tau: c9e.                                          'τ' = 2'π' = 6.283185…
                                                         
                                                         
*note inf: c9f.                                          Infinito positivo
                                                         
                                                         
*note infj: ca2.                                         Infinito imaginário puro
                                                         
                                                         
*note nan: ca0.                                          “Not a number” (NaN)
                                                         
                                                         
*note nanj: ca3.                                         NaN imaginário puro
                                                         

* Menu:

* Conversões de e para coordenadas polares::
* Funções de potência e logarítmicas::
* Funções trigonométricas: Funções trigonométricas<2>.
* Funções hiperbólicas: Funções hiperbólicas<2>.
* Funções de classificação::
* Constantes: Constantes<3>.


File: python.info,  Node: Conversões de e para coordenadas polares,  Next: Funções de potência e logarítmicas,  Up: cmath — Funções matemáticas para números complexos

5.9.3.1 Conversões de e para coordenadas polares
................................................

Um número complexo Python ‘z’ é armazenado internamente usando
coordenadas 'retangulares' ou 'cartesianas'.  É completamente
determinado por sua 'parte real' ‘z.real’ e sua 'parte imaginária'
‘z.imag’.

'Coordenadas polares' fornecem uma forma alternativa de representar um
número complexo.  Em coordenadas polares, um número complexo 'z' é
definido pelo módulo 'r' e pelo ângulo de fase 'phi'.  O módulo 'r' é a
distância de 'z' à origem, enquanto a fase 'phi' é o ângulo
anti-horário, medido em radianos, do eixo x positivo ao segmento de reta
que une a origem a 'z'.

As funções a seguir podem ser usadas para converter coordenadas
retangulares nativas em coordenadas polares e vice-versa.

 -- Função: cmath.phase (z)

     Retorna a fase de 'z' (também conhecido como 'argumento' de 'z'),
     como um ponto flutuante.  ‘phase(z)’ equivale a ‘math.atan2(z.imag,
     z.real)’.  O resultado está no intervalo [-'π', 'π'], e o corte de
     ramificação para esta operação está ao longo do eixo real negativo.
     O sinal do resultado é igual ao sinal de ‘z.imag’, mesmo quando
     ‘z.imag’ é zero:

          >>> phase(complex(-1.0, 0.0))
          3.141592653589793
          >>> phase(complex(-1.0, -0.0))
          -3.141592653589793

     Nota: O módulo (valor absoluto) de um número complexo 'z' pode ser
     calculado usando a função embutida *note abs(): 1e2d.  Não há
     função do módulo *note cmath: 18. separada para esta operação.

 -- Função: cmath.polar (z)

     Retorna a representação de 'z' em coordenadas polares.  Retorna um
     par ‘(r, phi)’ onde 'r' é o módulo de 'z' e phi é a fase de 'z'.
     ‘polar(z)’ equivale a ‘(abs(z), phase(z))’.

 -- Função: cmath.rect (r, phi)

     Retorna o número complexo 'z' com coordenadas polares 'r' e 'phi'.
     Equivale a ‘complex(r * math.cos(phi), r * math.sin(phi))’.


File: python.info,  Node: Funções de potência e logarítmicas,  Next: Funções trigonométricas<2>,  Prev: Conversões de e para coordenadas polares,  Up: cmath — Funções matemáticas para números complexos

5.9.3.2 Funções de potência e logarítmicas
..........................................

 -- Função: cmath.exp (z)

     Retorna 'e' elevado à potência 'z', onde 'e' é a base de logaritmos
     naturais.

 -- Função: cmath.log (z[, base])

     Retorna o logaritmo de 'z' para a 'base' fornecida.  Se a 'base'
     não for especificada, retorna o logaritmo natural de 'z'.  Há um
     corte de ramificação, de 0 ao longo do eixo real negativo até -∞.

 -- Função: cmath.log10 (z)

     Retorna o logaritmo de 'z' na base 10.  Este tem o mesmo corte de
     ramificação que *note log(): 27c9.

 -- Função: cmath.sqrt (z)

     Retorna a raiz quadrada de 'z'.  Este tem o mesmo corte de
     ramificação que *note log(): 27c9.


File: python.info,  Node: Funções trigonométricas<2>,  Next: Funções hiperbólicas<2>,  Prev: Funções de potência e logarítmicas,  Up: cmath — Funções matemáticas para números complexos

5.9.3.3 Funções trigonométricas
...............................

 -- Função: cmath.acos (z)

     Retorna o arco cosseno de 'z'.  Existem dois cortes de ramificação:
     um se estende desde 1 ao longo do eixo real até ∞.  O outro se
     estende para a esquerda de -1 ao longo do eixo real até -∞.

 -- Função: cmath.asin (z)

     Retorna o arco seno de 'z'.  Tem os mesmos cortes de ramificação
     que *note acos(): 27cb.

 -- Função: cmath.atan (z)

     Retorna o arco tangente de 'z'.  Existem dois cortes de
     ramificação: Um se estende de ‘1j’ ao longo do eixo imaginário até
     ‘∞j’.  O outro se estende de ‘-1j’ ao longo do eixo imaginário até
     ‘-∞j’.

 -- Função: cmath.cos (z)

     Retorna o cosseno de 'z'.

 -- Função: cmath.sin (z)

     Retorna o seno de 'z'.

 -- Função: cmath.tan (z)

     Retorna a tangente de 'z'.


File: python.info,  Node: Funções hiperbólicas<2>,  Next: Funções de classificação,  Prev: Funções trigonométricas<2>,  Up: cmath — Funções matemáticas para números complexos

5.9.3.4 Funções hiperbólicas
............................

 -- Função: cmath.acosh (z)

     Retorna o cosseno hiperbólico inverso de 'z'.  Há um corte de
     ramificação, estendendo-se para a esquerda de 1 ao longo do eixo
     real até -∞.

 -- Função: cmath.asinh (z)

     Retorna o seno hiperbólico inverso de 'z'.  Existem dois cortes de
     ramificação: Um se estende de ‘1j’ ao longo do eixo imaginário até
     ‘∞j’.  O outro se estende de ‘-1j’ ao longo do eixo imaginário até
     ‘-∞j’.

 -- Função: cmath.atanh (z)

     Retorna a tangente hiperbólica inversa de 'z'.  Existem dois cortes
     de ramificação: Um se estende de ‘1’ ao longo do eixo real até ‘∞’.
     O outro se estende de ‘-1’ ao longo do eixo real até ‘-∞’.

 -- Função: cmath.cosh (z)

     Retorna o cosseno hiperbólico de 'z'.

 -- Função: cmath.sinh (z)

     Retorna o seno hiperbólico de 'z'.

 -- Função: cmath.tanh (z)

     Retorna a tangente hiperbólica de 'z'.


File: python.info,  Node: Funções de classificação,  Next: Constantes<3>,  Prev: Funções hiperbólicas<2>,  Up: cmath — Funções matemáticas para números complexos

5.9.3.5 Funções de classificação
................................

 -- Função: cmath.isfinite (z)

     Retorna ‘True’ se ambas as partes real e imaginária de 'z' forem
     finitas, e ‘False’ caso contrário.

     Adicionado na versão 3.2.

 -- Função: cmath.isinf (z)

     Retorna ‘True’ se ou a parte real ou a imaginária de 'z' for
     infinita, e ‘False’ caso contrário.

 -- Função: cmath.isnan (z)

     Retorna ‘True’ se ou a parte real ou a imaginária de 'z' for NaN, e
     ‘False’ caso contrário.

 -- Função: cmath.isclose (a, b, *, rel_tol=1e-09, abs_tol=0.0)

     Retorna ‘True’ se os valores 'a' e 'b' estiverem próximos e ‘False’
     caso contrário.

     Se dois valores são considerados próximos ou não é determinado de
     acordo com tolerâncias absolutas e relativas fornecidas.  Se nenhum
     erro ocorrer, o resultado será: ‘abs(a-b) <= max(rel_tol *
     max(abs(a), abs(b)), abs_tol)’.

     'rel_tol' é a tolerância relativa – é a diferença máxima permitida
     entre 'a' e 'b', em relação ao maior valor absoluto de 'a' ou 'b'.
     Por exemplo, para definir uma tolerância de 5%, passe
     ‘rel_tol=0.05’.  A tolerância padrão é ‘1e-09’, o que garante que
     os dois valores sejam iguais em cerca de 9 dígitos decimais.
     'rel_tol' deve ser não negativo e menor que ‘1.0’.

     'abs_tol' é a tolerância absoluta; o padrão é ‘0.0’ e deve ser não
     negativo.  Ao comparar ‘x’ com ‘0.0’, ‘isclose(x, 0)’ é computado
     como ‘abs(x) <= rel_tol * abs(x)’, que é ‘False’ para qualquer ‘x’
     e rel_tol menor que ‘1.0’.  Então adicione um argumento abs_tol
     positivo apropriado à chamada.

     Os valores especiais do IEEE 754 de ‘NaN’, ‘inf’ e ‘-inf’ serão
     tratados de acordo com as regras do IEEE. Especificamente, ‘NaN’
     não é considerado próximo a qualquer outro valor, incluindo ‘NaN’.
     ‘inf’ e ‘-inf’ são considerados apenas próximos a si mesmos.

     Adicionado na versão 3.5.

     Ver também
     ..........

     PEP 485(1) – Uma função para testar igualdade aproximada

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0485/


File: python.info,  Node: Constantes<3>,  Prev: Funções de classificação,  Up: cmath — Funções matemáticas para números complexos

5.9.3.6 Constantes
..................

 -- Dado: cmath.pi

     A constante matemática 'π', como um ponto flutuante.

 -- Dado: cmath.e

     A constante matemática 'e', como um ponto flutuante.

 -- Dado: cmath.tau

     A constante matemática 'τ', como um ponto flutuante.

     Adicionado na versão 3.6.

 -- Dado: cmath.inf

     Infinito positivo de ponto flutuante.  Equivale a ‘float('inf')’.

     Adicionado na versão 3.6.

 -- Dado: cmath.infj

     Número complexo com parte real zero e parte imaginária infinita
     positiva.  Equivale a ‘complex(0.0, float('inf'))’.

     Adicionado na versão 3.6.

 -- Dado: cmath.nan

     Um valor de ponto flutuante “não um número” (NaN). Equivale a
     ‘float('nan')’.  Veja também *note math.nan: 663.

     Adicionado na versão 3.6.

 -- Dado: cmath.nanj

     Número complexo com parte real zero e parte imaginária NaN.
     Equivale a ‘complex(0.0, float('nan'))’.

     Adicionado na versão 3.6.

Observe que a seleção de funções é semelhante, mas não idêntica, àquela
no módulo *note math: 8e.  A razão para ter dois módulos é que alguns
usuários não estão interessados em números complexos e talvez nem saibam
o que são.  Eles preferem que ‘math.sqrt(-1)’ gere uma exceção do que
retorne um número complexo.  Observe também que as funções definidas em
*note cmath: 18. sempre retornam um número complexo, mesmo que a
resposta possa ser expressa como um número real (nesse caso o número
complexo tem uma parte imaginária de zero).

Uma nota sobre cortes de ramificação: são curvas ao longo das quais a
função dada não é contínua.  Eles são um recurso necessário de muitas
funções complexas.  Presume-se que se você precisar calcular com funções
complexas, você entenderá sobre cortes de ramificação.  Consulte quase
qualquer livro (não muito elementar) sobre variáveis complexas para
obter esclarecimento.  Para informações sobre a escolha adequada dos
cortes de ramificação para fins numéricos, uma boa referência deve ser a
seguinte:

Ver também
..........

Kahan, W: Branch cuts for complex elementary functions; or, Much ado
about nothing’s sign bit.  Em Iserles, A. e Powell, M. (eds.), The state
of the art in numerical analysis.  Clarendon Press (1987) pp165–211.


File: python.info,  Node: decimal — Aritmética de ponto fixo decimal e ponto flutuante,  Next: fractions — Números racionais,  Prev: cmath — Funções matemáticas para números complexos,  Up: Módulos Matemáticos e Numéricos

5.9.4 ‘decimal’ — Aritmética de ponto fixo decimal e ponto flutuante
--------------------------------------------------------------------

'Código-fonte:' Lib/decimal.py(1)

__________________________________________________________________

O módulo *note decimal: 36. fornece suporte a aritmética rápida de ponto
flutuante decimal corretamente arredondado.  Oferece várias vantagens
sobre o tipo de dados *note float: 2f7.:

   * Decimal “is based on a floating-point model(2) which was designed
     with people in mind, and necessarily has a paramount guiding
     principle – computers must provide an arithmetic that works in the
     same way as the arithmetic that people learn at school.” – excerpt
     from the decimal arithmetic specification.

   * Os números decimais podem ser representados exatamente.  Por outro
     lado, números como ‘1.1’ e ‘2.2’ não possuem representações exatas
     em ponto flutuante binário.  Os usuários finais normalmente não
     esperam que ‘1.1 + 2.2’ sejam exibidos como ‘3.3000000000000003’,
     como acontece com o ponto flutuante binário.

   * A exatidão transita para a aritmética.  No ponto flutuante decimal,
     ‘0.1 + 0.1 + 0.1 - 0.3’ é exatamente igual a zero.  No ponto
     flutuante binário, o resultado é ‘5.5511151231257827e-017’.  Embora
     próximas de zero, as diferenças impedem o teste de igualdade
     confiável e as diferenças podem se acumular.  Por esse motivo, o
     decimal é preferido em aplicações de contabilidade que possuem
     invariáveis estritos de igualdade.

   * O módulo decimal incorpora uma noção de casas significativas para
     que ‘1.30 + 1.20’ seja ‘2.50’.  O zero à direita é mantido para
     indicar significância.  Esta é a apresentação habitual para
     aplicações monetárias.  Para multiplicação, a abordagem “livro
     escolar” usa todas as figuras nos multiplicandos.  Por exemplo,
     ‘1.3 * 1.2’ é igual a ‘1.56’ enquanto ‘1.30 * 1.20’ é igual a
     ‘1.5600’.

   * Diferentemente do ponto flutuante binário baseado em hardware, o
     módulo decimal possui uma precisão alterável pelo usuário (padrão
     de 28 casas), que pode ser tão grande quanto necessário para um
     determinado problema:

          >>> from decimal import *
          >>> getcontext().prec = 6
          >>> Decimal(1) / Decimal(7)
          Decimal('0.142857')
          >>> getcontext().prec = 28
          >>> Decimal(1) / Decimal(7)
          Decimal('0.1428571428571428571428571429')

   * O ponto flutuante binário e decimal é implementado em termos de
     padrões publicados.  Enquanto o tipo ponto flutuante embutido expõe
     apenas uma parte modesta de seus recursos, o módulo decimal expõe
     todas as partes necessárias do padrão.  Quando necessário, o
     programador tem controle total sobre o arredondamento e o manuseio
     do sinal.  Isso inclui uma opção para impor aritmética exata usando
     exceções para bloquear quaisquer operações inexatas.

   * O módulo decimal foi projetado para dar suporte, “sem prejuízo, a
     aritmética decimal não arredondada exata (às vezes chamada
     aritmética de ponto fixo) e aritmética arredondada de ponto
     flutuante”.  – trecho da especificação aritmética decimal.

O design do módulo é centrado em torno de três conceitos: o número
decimal, o contexto da aritmética e os sinais.

Um número decimal é imutável.  Possui um sinal, dígitos de coeficiente e
um expoente.  Para preservar a significância, os dígitos do coeficiente
não truncam zeros à direita.  Os decimais também incluem valores
especiais, tais como ‘Infinity’, ‘-Infinity’ e ‘NaN’.  O padrão também
diferencia ‘-0’ de ‘+0’.

O contexto da aritmética é um ambiente que especifica precisão, regras
de arredondamento, limites de expoentes, sinalizadores indicando os
resultados das operações e ativadores de interceptação que determinam se
os sinais são tratados como exceções.  As opções de arredondamento
incluem *note ROUND_CEILING: 27e5, *note ROUND_DOWN: 27e6, *note
ROUND_FLOOR: 27e7, *note ROUND_HALF_DOWN: 27e8, *note ROUND_HALF_EVEN:
27e9, *note ROUND_HALF_UP: 27ea, *note ROUND_UP: 27eb. e *note
ROUND_05UP: 27ec.

Sinais são grupos de condições excepcionais que surgem durante o curso
da computação.  Dependendo das necessidades da aplicação, os sinais
podem ser ignorados, considerados informativos ou tratados como
exceções.  Os sinais no módulo decimal são: *note Clamped: 27ed, *note
InvalidOperation: 10e7, *note DivisionByZero: 27ee, *note Inexact: 27ef,
*note Rounded: 27f0, *note Subnormal: 27f1, *note Overflow: 27f2, *note
Underflow: 27f3. e *note FloatOperation: 10dc.

Para cada sinal, há um sinalizador e um ativador de interceptação.
Quando um sinal é encontrado, seu sinalizador é definido como um e, se o
ativador de interceptação estiver definido como um, uma exceção será
gerada.  Os sinalizadores são fixos; portanto, o usuário precisa
redefini-los antes de monitorar um cálculo.

Ver também
..........

   * A especificação geral aritmética decimal da IBM, The General
     Decimal Arithmetic Specification(3).

* Menu:

* Tutorial de início rápido::
* Objetos de Decimal::
* Objetos de contexto::
* Constantes: Constantes<4>.
* Modos de arredondamento::
* Sinais::
* Observações sobre ponto flutuante::
* Trabalhando com threads::
* Receitas::
* FAQ sobre Decimal::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/decimal.py

   (2) https://speleotrove.com/decimal/damodel.html#refnumber

   (3) https://speleotrove.com/decimal/decarith.html


File: python.info,  Node: Tutorial de início rápido,  Next: Objetos de Decimal,  Up: decimal — Aritmética de ponto fixo decimal e ponto flutuante

5.9.4.1 Tutorial de início rápido
.................................

O início usual do uso de decimais é importar o módulo, exibir o contexto
atual com *note getcontext(): 16be. e, se necessário, definir novos
valores para precisão, arredondamento ou armadilhas ativados:

     >>> from decimal import *
     >>> getcontext()
     Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,
             capitals=1, clamp=0, flags=[], traps=[Overflow, DivisionByZero,
             InvalidOperation])

     >>> getcontext().prec = 7       # Define uma nova precisão

Instâncias decimais podem ser construídas a partir de números inteiros,
strings, pontos flutuantes ou tuplas.  A construção de um número inteiro
ou de um ponto flutuante realiza uma conversão exata do valor desse
número inteiro ou ponto flutuante.  Os números decimais incluem valores
especiais como ‘NaN’, que significa “Não é um número”, ‘Infinity’
positivo e negativo e ‘-0’:

     >>> getcontext().prec = 28
     >>> Decimal(10)
     Decimal('10')
     >>> Decimal('3.14')
     Decimal('3.14')
     >>> Decimal(3.14)
     Decimal('3.140000000000000124344978758017532527446746826171875')
     >>> Decimal((0, (3, 1, 4), -2))
     Decimal('3.14')
     >>> Decimal(str(2.0 ** 0.5))
     Decimal('1.4142135623730951')
     >>> Decimal(2) ** Decimal('0.5')
     Decimal('1.414213562373095048801688724')
     >>> Decimal('NaN')
     Decimal('NaN')
     >>> Decimal('-Infinity')
     Decimal('-Infinity')

Se o sinal *note FloatOperation: 10dc. for capturado na armadilha, a
mistura acidental de decimais e pontos flutuantes em construtores ou
comparações de ordenação levanta uma exceção:

     >>> c = getcontext()
     >>> c.traps[FloatOperation] = True
     >>> Decimal(3.14)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     decimal.FloatOperation: [<class 'decimal.FloatOperation'>]
     >>> Decimal('3.5') < 3.7
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     decimal.FloatOperation: [<class 'decimal.FloatOperation'>]
     >>> Decimal('3.5') == 3.5
     True

Adicionado na versão 3.3.

O significado de um novo decimal é determinado apenas pelo número de
dígitos inseridos.  A precisão e o arredondamento do contexto só entram
em jogo durante operações aritméticas.

     >>> getcontext().prec = 6
     >>> Decimal('3.0')
     Decimal('3.0')
     >>> Decimal('3.1415926535')
     Decimal('3.1415926535')
     >>> Decimal('3.1415926535') + Decimal('2.7182818285')
     Decimal('5.85987')
     >>> getcontext().rounding = ROUND_UP
     >>> Decimal('3.1415926535') + Decimal('2.7182818285')
     Decimal('5.85988')

Se os limites internos da versão C forem excedidos, a construção de um
decimal levanta *note InvalidOperation: 10e7.:

     >>> Decimal("1e9999999999999999999")
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     decimal.InvalidOperation: [<class 'decimal.InvalidOperation'>]

Alterado na versão 3.3.

Os decimais interagem bem com grande parte do resto do Python.  Aqui
está um pequeno circo voador de ponto flutuante decimal:

     >>> data = list(map(Decimal, '1.34 1.87 3.45 2.35 1.00 0.03 9.25'.split()))
     >>> max(data)
     Decimal('9.25')
     >>> min(data)
     Decimal('0.03')
     >>> sorted(data)
     [Decimal('0.03'), Decimal('1.00'), Decimal('1.34'), Decimal('1.87'),
      Decimal('2.35'), Decimal('3.45'), Decimal('9.25')]
     >>> sum(data)
     Decimal('19.29')
     >>> a,b,c = data[:3]
     >>> str(a)
     '1.34'
     >>> float(a)
     1.34
     >>> round(a, 1)
     Decimal('1.3')
     >>> int(a)
     1
     >>> a * 5
     Decimal('6.70')
     >>> a * b
     Decimal('2.5058')
     >>> c % a
     Decimal('0.77')

Decimals can be formatted (with *note format(): 61f. built-in or *note
f-strings: 9b1.) in fixed-point or scientific notation, using the same
formatting syntax (see *note Minilinguagem de especificação de formato:
1e8.) as builtin *note float: 2f7. type:

     >>> format(Decimal('2.675'), "f")
     '2.675'
     >>> format(Decimal('2.675'), ".2f")
     '2.68'
     >>> f"{Decimal('2.675'):.2f}"
     '2.68'
     >>> format(Decimal('2.675'), ".2e")
     '2.68e+0'
     >>> with localcontext() as ctx:
     ...     ctx.rounding = ROUND_DOWN
     ...     print(format(Decimal('2.675'), ".2f"))
     ...
     2.67

E algumas funções matemáticas também estão disponíveis no Decimal:

     >>> getcontext().prec = 28
     >>> Decimal(2).sqrt()
     Decimal('1.414213562373095048801688724')
     >>> Decimal(1).exp()
     Decimal('2.718281828459045235360287471')
     >>> Decimal('10').ln()
     Decimal('2.302585092994045684017991455')
     >>> Decimal('10').log10()
     Decimal('1')

O método *note quantize(): 10ef. arredonda um número para um expoente
fixo.  Esse método é útil para aplicações monetárias que geralmente
arredondam os resultados para um número fixo de locais:

     >>> Decimal('7.325').quantize(Decimal('.01'), rounding=ROUND_DOWN)
     Decimal('7.32')
     >>> Decimal('7.325').quantize(Decimal('1.'), rounding=ROUND_UP)
     Decimal('8')

Como mostrado acima, a função *note getcontext(): 16be. acessa o
contexto atual e permite que as configurações sejam alteradas.  Essa
abordagem atende às necessidades da maioria das aplicações.

Para trabalhos mais avançados, pode ser útil criar contextos
alternativos usando o construtor *note Context(): 10ee.  Para ativar uma
alternativa, use a função *note setcontext(): 27f6.

De acordo com o padrão, o módulo *note decimal: 36. fornece dois
contextos padrão prontos para uso, *note BasicContext: 10e3. e *note
ExtendedContext: 10e4.  O primeiro é especialmente útil para depuração
porque muitas das armadilhas estão ativadas:

     >>> myothercontext = Context(prec=60, rounding=ROUND_HALF_DOWN)
     >>> setcontext(myothercontext)
     >>> Decimal(1) / Decimal(7)
     Decimal('0.142857142857142857142857142857142857142857142857142857142857')

     >>> ExtendedContext
     Context(prec=9, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,
             capitals=1, clamp=0, flags=[], traps=[])
     >>> setcontext(ExtendedContext)
     >>> Decimal(1) / Decimal(7)
     Decimal('0.142857143')
     >>> Decimal(42) / Decimal(0)
     Decimal('Infinity')

     >>> setcontext(BasicContext)
     >>> Decimal(42) / Decimal(0)
     Traceback (most recent call last):
       File "<pyshell#143>", line 1, in -toplevel-
         Decimal(42) / Decimal(0)
     DivisionByZero: x / 0

Os contextos também possuem sinalizadores para monitorar condições
excepcionais encontradas durante os cálculos.  Os sinalizadores
permanecem definidos até que sejam explicitamente limpos, portanto, é
melhor limpar os sinalizadores antes de cada conjunto de cálculos
monitorados usando o método *note clear_flags(): 27f7.

     >>> setcontext(ExtendedContext)
     >>> getcontext().clear_flags()
     >>> Decimal(355) / Decimal(113)
     Decimal('3.14159292')
     >>> getcontext()
     Context(prec=9, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999,
             capitals=1, clamp=0, flags=[Inexact, Rounded], traps=[])

A entrada 'flags' mostra que a aproximação racional de pi foi
arredondada (dígitos além da precisão do contexto foram descartados) e
que o resultado é inexato (alguns dos dígitos descartados eram
diferentes de zero).

As armadilhas individuais são definidas usando o dicionário no atributo
*note traps: 10ed. de um contexto:

     >>> setcontext(ExtendedContext)
     >>> Decimal(1) / Decimal(0)
     Decimal('Infinity')
     >>> getcontext().traps[DivisionByZero] = 1
     >>> Decimal(1) / Decimal(0)
     Traceback (most recent call last):
       File "<pyshell#112>", line 1, in -toplevel-
         Decimal(1) / Decimal(0)
     DivisionByZero: x / 0

A maioria dos programas ajusta o contexto atual apenas uma vez, no
início do programa.  E, em muitas aplicações, os dados são convertidos
para *note Decimal: 29d. com uma única conversão dentro de um loop.  Com
o conjunto de contextos e decimais criados, a maior parte do programa
manipula os dados de maneira diferente do que com outros tipos numéricos
do Python.


File: python.info,  Node: Objetos de Decimal,  Next: Objetos de contexto,  Prev: Tutorial de início rápido,  Up: decimal — Aritmética de ponto fixo decimal e ponto flutuante

5.9.4.2 Objetos de Decimal
..........................

 -- Classe: decimal.Decimal (value='0', context=None)

     Constrói um novo objeto de *note Decimal: 29d. com base em 'value'.

     'value' pode ser um inteiro, string, tupla, *note float: 2f7. ou
     outro objeto de *note Decimal: 29d.  Se nenhum 'value' for
     fornecido, retornará ‘Decimal('0')’.  Se 'value' for uma string,
     ele deverá estar em conformidade com a sintaxe da string numérica
     decimal após caracteres de espaço em branco à esquerda e à direita,
     bem como sublinhados em toda parte, serem removidos:

          sign           ::=  '+' | '-'
          digit          ::=  '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9'
          indicator      ::=  'e' | 'E'
          digits         ::=  digit [digit]...
          decimal-part   ::=  digits '.' [digits] | ['.'] digits
          exponent-part  ::=  indicator [sign] digits
          infinity       ::=  'Infinity' | 'Inf'
          nan            ::=  'NaN' [digits] | 'sNaN' [digits]
          numeric-value  ::=  decimal-part [exponent-part] | infinity
          numeric-string ::=  [sign] numeric-value | [sign] nan

     Outros dígitos decimais Unicode também são permitidos onde ‘digit’
     aparece acima.  Isso inclui dígitos decimais de vários outros
     alfabetos (por exemplo, dígitos em árabes-índicos e devanágaris),
     além dos dígitos de largura total ‘'\uff10'’ a ‘'\uff19'’.  A
     capitalização não é significativa, então, por exemplo, ‘inf’,
     ‘Inf’, ‘INFINITY’ e ‘iNfINity’ são todas grafias aceitáveis para
     infinito positivo.

     Se 'value' for um *note tuple: 370, ele deverá ter três
     componentes, um sinal (‘0’ para positivo ou ‘1’ para negativo), um
     *note tuple: 370. de dígitos e um expoente inteiro.  Por exemplo,
     ‘Decimal((0, (1, 4, 1, 4), -3))’ returna ‘Decimal('1.414')’.

     Se 'value' é um *note float: 2f7, o valor do ponto flutuante
     binário é convertido sem perdas no seu equivalente decimal exato.
     Essa conversão geralmente requer 53 ou mais dígitos de precisão.
     Por exemplo, ‘Decimal(float('1.1'))’ converte para
     ‘Decimal('1.100000000000000088817841970012523233890533447265625')’.

     A precisão 'context' não afeta quantos dígitos estão armazenados.
     Isso é determinado exclusivamente pelo número de dígitos em
     'value'.  Por exemplo, ‘Decimal('3.00000')’ registra todos os cinco
     zeros, mesmo que a precisão do contexto seja apenas três.

     O objetivo do argumento 'context' é determinar o que fazer se
     'value' for uma string malformada.  Se o contexto capturar *note
     InvalidOperation: 10e7, uma exceção será levantada; caso contrário,
     o construtor retornará um novo decimal com o valor de ‘NaN’.

     Uma vez construídos, objetos de *note Decimal: 29d. são imutáveis.

     Alterado na versão 3.2: O argumento para o construtor agora pode
     ser uma instância de *note float: 2f7.

     Alterado na versão 3.3: Os argumentos de *note float: 2f7. levantam
     uma exceção se a armadilha *note FloatOperation: 10dc. estiver
     definida.  Por padrão, a armadilha está desativada.

     Alterado na versão 3.6: Sublinhados são permitidos para
     agrupamento, como nos literais de ponto flutuante e integral no
     código.

     Objetos decimais de ponto flutuante compartilham muitas
     propriedades com outros tipos numéricos embutidos, como *note
     float: 2f7. e *note int: 257.  Todas as operações matemáticas
     usuais e métodos especiais se aplicam.  Da mesma forma, objetos
     decimais podem ser copiados, separados, impressos, usados como
     chaves de dicionário, usados como elementos de conjunto,
     comparados, classificados e convertidos a outro tipo (como *note
     float: 2f7. ou *note int: 257.).

     Existem algumas pequenas diferenças entre aritmética em objetos
     decimais e aritmética em números inteiros e flutuantes.  Quando o
     operador de resto ‘%’ é aplicado a objetos decimais, o sinal do
     resultado é o sinal do 'dividend' em vez do sinal do divisor:

          >>> (-7) % 4
          1
          >>> Decimal(-7) % Decimal(4)
          Decimal('-3')

     O operador de divisão inteira ‘//’ se comporta de maneira análoga,
     retornando a parte inteira do quociente verdadeiro (truncando em
     direção a zero) em vez de seu resto, de modo a preservar a
     identidade usual ‘x == (x // y) * y + x % y’:

          >>> -7 // 4
          -2
          >>> Decimal(-7) // Decimal(4)
          Decimal('-1')

     Os operadores ‘%’ e ‘//’ implementam as operações de ‘remainder’ e
     ‘divide-integer’ (respectivamente) como descrito na especificação.

     Objetos decimais geralmente não podem ser combinados com pontos
     flutuantes ou instâncias de *note fractions.Fraction: 1e7. em
     operações aritméticas: uma tentativa de adicionar um *note Decimal:
     29d. a um *note float: 2f7, por exemplo, vai levantar um *note
     TypeError: 2c3.  No entanto, é possível usar os operadores de
     comparação do Python para comparar uma instância de *note Decimal:
     29d. ‘x’ com outro número ‘y’.  Isso evita resultados confusos ao
     fazer comparações de igualdade entre números de tipos diferentes.

     Alterado na versão 3.2: As comparações de tipos mistos entre
     instâncias de *note Decimal: 29d. e outros tipos numéricos agora
     são totalmente suportadas.

     Além das propriedades numéricas padrões, os objetos de ponto
     flutuante decimal também possuem vários métodos especializados:

      -- Método: adjusted ()

          Retorna o expoente ajustado depois de deslocar os dígitos mais
          à direita do coeficiente até restar apenas o dígito principal:
          ‘Decimal('321e+5').adjusted()’ retorna sete.  Usado para
          determinar a posição do dígito mais significativo em relação
          ao ponto decimal.

      -- Método: as_integer_ratio ()

          Retorna um par ‘(n, d)’ de números inteiros que representam a
          instância dada *note Decimal: 29d. como uma fração, nos termos
          mais baixos e com um denominador positivo:

               >>> Decimal('-3.14').as_integer_ratio()
               (-157, 50)

          A conversão é exata.  Levanta OverflowError em infinitos e
          ValueError em NaNs.

     Adicionado na versão 3.6.

      -- Método: as_tuple ()

          Retorna uma representação de *note tupla nomeada: 64e. do
          número: ‘DecimalTuple(sign, digits, exponent)’.

      -- Método: canonical ()

          Retorna a codificação canônica do argumento.  Atualmente, a
          codificação de uma instância de *note Decimal: 29d. é sempre
          canônica, portanto, esta operação retorna seu argumento
          inalterado.

      -- Método: compare (other, context=None)

          Compara os valores de duas instâncias decimais.  *note
          compare(): 27fd. retorna uma instância decimal, e se qualquer
          operando for um NaN, o resultado será um NaN:

               a or b is a NaN  ==> Decimal('NaN')
               a < b            ==> Decimal('-1')
               a == b           ==> Decimal('0')
               a > b            ==> Decimal('1')

      -- Método: compare_signal (other, context=None)

          Esta operação é idêntica ao método *note compare(): 27fd,
          exceto que todos os NaNs sinalizam.  Ou seja, se nenhum
          operando for um NaN sinalizador, qualquer operando NaN
          silencioso será tratado como se fosse um NaN sinalizador.

      -- Método: compare_total (other, context=None)

          Compara dois operandos usando sua representação abstrata em
          vez de seu valor numérico.  Semelhante ao método *note
          compare(): 27fd, mas o resultado fornece uma ordem total nas
          instâncias de *note Decimal: 29d.  Duas instâncias de *note
          Decimal: 29d. com o mesmo valor numérico, mas diferentes
          representações, se comparam desiguais nesta ordem:

               >>> Decimal('12.0').compare_total(Decimal('12'))
               Decimal('-1')

          Os NaNs silenciosos e sinalizadores também estão incluídos no
          pedido total.  O resultado dessa função é ‘Decimal('0')’ se os
          dois operandos tiverem a mesma representação, ‘Decimal('-1')’
          se o primeiro operando for menor na ordem total que o segundo
          e ‘Decimal('1')’ se o primeiro operando for maior na ordem
          total que o segundo operando.  Veja a especificação para
          detalhes da ordem total.

          Esta operação não é afetada pelo contexto e é silenciosa:
          nenhum sinalizador é alterado e nenhum arredondamento é
          executado.  Como uma exceção, a versão C pode levantar
          InvalidOperation se o segundo operando não puder ser
          convertido exatamente.

      -- Método: compare_total_mag (other, context=None)

          Compara dois operandos usando sua representação abstrata em
          vez de seu valor, como em *note compare_total(): 27ff, mas
          ignorando o sinal de cada operando.  ‘x.compare_total_mag(y)’
          é equivalente a ‘x.copy_abs().compare_total(y.copy_abs())’.

          Esta operação não é afetada pelo contexto e é silenciosa:
          nenhum sinalizador é alterado e nenhum arredondamento é
          executado.  Como uma exceção, a versão C pode levantar
          InvalidOperation se o segundo operando não puder ser
          convertido exatamente.

      -- Método: conjugate ()

          Apenas retorna a si próprio, sendo esse método apenas para
          atender à Especificação de Decimal.

      -- Método: copy_abs ()

          Retorna o valor absoluto do argumento.  Esta operação não é
          afetada pelo contexto e é silenciosa: nenhum sinalizador é
          alterado e nenhum arredondamento é executado.

      -- Método: copy_negate ()

          Retorna a negação do argumento.  Esta operação não é afetada
          pelo contexto e é silenciosa: nenhum sinalizador é alterado e
          nenhum arredondamento é executado.

      -- Método: copy_sign (other, context=None)

          Retorna uma cópia do primeiro operando com o sinal definido
          para ser o mesmo que o sinal do segundo operando.  Por
          exemplo:

               >>> Decimal('2.3').copy_sign(Decimal('-1.5'))
               Decimal('-2.3')

          Esta operação não é afetada pelo contexto e é silenciosa:
          nenhum sinalizador é alterado e nenhum arredondamento é
          executado.  Como uma exceção, a versão C pode levantar
          InvalidOperation se o segundo operando não puder ser
          convertido exatamente.

      -- Método: exp (context=None)

          Retorna o valor da função exponencial (natural) ‘e**x’ no
          número especificado.  O resultado é arredondado corretamente
          usando o modo de arredondamento *note ROUND_HALF_EVEN: 27e9.

               >>> Decimal(1).exp()
               Decimal('2.718281828459045235360287471')
               >>> Decimal(321).exp()
               Decimal('2.561702493119680037517373933E+139')

      -- Método: classmethod from_float (f, /)

          Construtor alternativo que aceita apenas instâncias de *note
          float: 2f7. ou *note int: 257.

          Observe que ‘Decimal.from_float(0.1)’ não é o mesmo que
          ‘Decimal('0.1')’.  Como 0.1 não é exatamente representável no
          ponto flutuante binário, o valor é armazenado como o valor
          representável mais próximo que é ‘0x1.999999999999ap-4’.; Esse
          valor equivalente em decimal é
          ‘0.1000000000000000055511151231257827021181583404541015625’.

               Nota: A partir do Python 3.2 em diante, uma instância de
               *note Decimal: 29d. também pode ser construída
               diretamente a partir de um *note float: 2f7.

               >>> Decimal.from_float(0.1)
               Decimal('0.1000000000000000055511151231257827021181583404541015625')
               >>> Decimal.from_float(float('nan'))
               Decimal('NaN')
               >>> Decimal.from_float(float('inf'))
               Decimal('Infinity')
               >>> Decimal.from_float(float('-inf'))
               Decimal('-Infinity')

          Adicionado na versão 3.1.

      -- Método: fma (other, third, context=None)

          Multiplicação e adição fundidos.  Retorna self*other+third sem
          arredondamento do produto intermediário self*other.

               >>> Decimal(2).fma(3, 5)
               Decimal('11')

      -- Método: is_canonical ()

          Retorna *note True: c27. se o argumento for canônico e *note
          False: b49. caso contrário.  Atualmente, uma instância de
          *note Decimal: 29d. é sempre canônica, portanto, esta operação
          sempre retorna *note True: c27.

      -- Método: is_finite ()

          Retorna *note True: c27. se o argumento for um número finito e
          *note False: b49. se o argumento for um infinito ou um NaN.

      -- Método: is_infinite ()

          Retorna *note True: c27. se o argumento for infinito positivo
          ou negativo e *note False: b49. caso contrário.

      -- Método: is_nan ()

          Retorna *note True: c27. se o argumento for NaN (silencioso ou
          sinalizador) e *note False: b49. caso contrário.

      -- Método: is_normal (context=None)

          Retorna *note True: c27. se o argumento for um número finito
          'normal'.  Retorna *note False: b49. se o argumento for zero,
          subnormal, infinito ou NaN.

      -- Método: is_qnan ()

          Retorna *note True: c27. se o argumento for um NaN silencioso,
          e *note False: b49. caso contrário.

      -- Método: is_signed ()

          Retorna *note True: c27. se o argumento tiver um sinal
          negativo e *note False: b49. caso contrário.  Observe que
          zeros e NaNs podem carregar sinais.

      -- Método: is_snan ()

          Retorna *note True: c27. se o argumento for um sinal NaN e
          *note False: b49. caso contrário.

      -- Método: is_subnormal (context=None)

          Retorna *note True: c27. se o argumento for subnormal e *note
          False: b49. caso contrário.

      -- Método: is_zero ()

          Retorna *note True: c27. se o argumento for um zero (positivo
          ou negativo) e *note False: b49. caso contrário.

      -- Método: ln (context=None)

          Retorna o logaritmo (base e) natural do operando.  O resultado
          é arredondado corretamente usando o modo de arredondamento
          *note ROUND_HALF_EVEN: 27e9.

      -- Método: log10 (context=None)

          Retorna o logaritmo da base dez do operando.  O resultado é
          arredondado corretamente usando o modo de arredondamento *note
          ROUND_HALF_EVEN: 27e9.

      -- Método: logb (context=None)

          Para um número diferente de zero, retorna o expoente ajustado
          de seu operando como uma instância de *note Decimal: 29d.  Se
          o operando é zero, ‘Decimal('-Infinity')’ é retornado e o
          sinalizador *note DivisionByZero: 27ee. é levantado.  Se o
          operando for um infinito, ‘Decimal('Infinity')’ será
          retornado.

      -- Método: logical_and (other, context=None)

          *note logical_and(): 2812. é uma operação lógica que leva dois
          'operandos lógicos' (consulte *note Operandos lógicos: 2813.).
          O resultado é o ‘and’ dígito a dígito dos dois operandos.

      -- Método: logical_invert (context=None)

          *note logical_invert(): 2814. é uma operação lógica.  O
          resultado é a inversão dígito a dígito do operando.

      -- Método: logical_or (other, context=None)

          *note logical_or(): 2815. é uma operação lógica que leva dois
          'operandos lógicos' (consulte *note Operandos lógicos: 2813.).
          O resultado é o ‘or’ dígito a dígito dos dois operandos.

      -- Método: logical_xor (other, context=None)

          *note logical_xor(): 2816. é uma operação lógica que leva dois
          'operandos lógicos' (consulte *note Operandos lógicos: 2813.).
          O resultado é o “ou exclusivo” dígito a dígito ou dos dois
          operandos.

      -- Método: max (other, context=None)

          Como ‘max(self, other)’, exceto que a regra de arredondamento
          de contexto é aplicada antes de retornar e que os valores
          ‘NaN’ são sinalizados ou ignorados (dependendo do contexto e
          se estão sinalizando ou silenciosos).

      -- Método: max_mag (other, context=None)

          Semelhante ao método *note max(): 2817, mas a comparação é
          feita usando os valores absolutos dos operandos.

      -- Método: min (other, context=None)

          Como ‘min(self, other)’, exceto que a regra de arredondamento
          de contexto é aplicada antes de retornar e que os valores
          ‘NaN’ são sinalizados ou ignorados (dependendo do contexto e
          se estão sinalizando ou silenciosos).

      -- Método: min_mag (other, context=None)

          Semelhante ao método *note min(): 2819, mas a comparação é
          feita usando os valores absolutos dos operandos.

      -- Método: next_minus (context=None)

          Retorna o maior número representável no contexto fornecido (ou
          no contexto atual da thread, se nenhum contexto for fornecido)
          que seja menor que o operando especificado.

      -- Método: next_plus (context=None)

          Retorna o menor número representável no contexto fornecido (ou
          no contexto atual da thread, se nenhum contexto for fornecido)
          que seja maior que o operando fornecido.

      -- Método: next_toward (other, context=None)

          Se os dois operandos forem desiguais, retorna o número mais
          próximo ao primeiro operando na direção do segundo operando.
          Se os dois operandos forem numericamente iguais, retorna uma
          cópia do primeiro operando com o sinal configurado para ser o
          mesmo que o sinal do segundo operando.

      -- Método: normalize (context=None)

          Usado para produzir valores canônicos de uma classe de
          equivalência no contexto atual ou no contexto especificado.

          Esta tem a mesma semântica que a operação unária mais, exceto
          que se o resultado final for finito, ele será reduzido à sua
          forma mais simples, com todos os zeros à direita removidos e
          seu sinal preservado.  Ou seja, enquanto o coeficiente for
          diferente de zero e múltiplo de dez, o coeficiente é dividido
          por dez e o expoente é incrementado em 1.  Caso contrário (o
          coeficiente é zero), o expoente é definido como 0.  Em todos
          os casos, o sinal permanece inalterado.  .

          Por exemplo, ‘Decimal('32.100')’ e ‘Decimal('0.321000e+2')’
          ambos normalizam para o valor equivalente ‘Decimal('32.1')’.

          Observe que o arredondamento é aplicado 'antes' de reduzir
          para a forma mais simples.

          Nas versões mais recentes da especificação, esta operação
          também é conhecida como ‘reduce’.

      -- Método: number_class (context=None)

          Retorna uma string descrevendo a 'classe' do operando.  O
          valor retornado é uma das dez sequências a seguir.

             * ‘"-Infinity"’, indicando que o operando é infinito
               negativo.

             * ‘"-Normal"’, indicando que o operando é um número normal
               negativo.

             * ‘"-Subnormal"’, indicando que o operando é negativo e
               subnormal.

             * ‘"-Zero"’, indicando que o operando é um zero negativo.

             * ‘"+Zero"’, indicando que o operando é um zero positivo.

             * ‘"+Subnormal"’, indicando que o operando é positivo e
               subnormal.

             * ‘"+Normal"’, indicando que o operando é um número normal
               positivo.

             * ‘"+Infinity"’, indicando que o operando é infinito
               positivo.

             * ‘"NaN"’, indicando que o operando é um NaN (“Not a
               Number”) silencioso.

             * ‘"sNaN"’, indicando que o operando é um NaN sinalizador.

      -- Método: quantize (exp, rounding=None, context=None)

          Retorna um valor igual ao primeiro operando após o
          arredondamento e com o expoente do segundo operando.

               >>> Decimal('1.41421356').quantize(Decimal('1.000'))
               Decimal('1.414')

          Diferentemente de outras operações, se o comprimento do
          coeficiente após a operação de quantização for maior que a
          precisão, então *note InvalidOperation: 10e7. é sinalizado.
          Isso garante que, a menos que haja uma condição de erro, o
          expoente quantizado é sempre igual ao do operando do lado
          direito.

          Também, diferentemente de outras operações, a quantização
          nunca sinaliza Underflow, mesmo que o resultado seja subnormal
          e inexato.

          Se o expoente do segundo operando for maior que o do primeiro,
          o arredondamento poderá ser necessário.  Nesse caso, o modo de
          arredondamento é determinado pelo argumento ‘rounding’, se
          fornecido, ou pelo argumento ‘context’ fornecido; se nenhum
          argumento for fornecido, o modo de arredondamento do contexto
          da thread atual será usado.

          Um erro é retornado sempre que o expoente resultante for maior
          que *note Emax: 10e5. ou menor que *note Etiny(): 2820.

      -- Método: radix ()

          Retorna ‘Decimal(10)’, a raiz (base) na qual a classe *note
          Decimal: 29d. faz toda a sua aritmética.  Incluído para
          compatibilidade com a especificação.

      -- Método: remainder_near (other, context=None)

          Retorna o resto da divisão de 'self' por 'other'.  Isso é
          diferente de ‘self % other’, pois o sinal do resto é escolhido
          para minimizar seu valor absoluto.  Mais precisamente, o valor
          de retorno é ‘self - n * other’, onde ‘n’ é o número inteiro
          mais próximo do valor exato de ‘self / other’, e se dois
          números inteiros estiverem igualmente próximos, o par será é
          escolhido.

          Se o resultado for zero, seu sinal será o sinal de 'self'.

               >>> Decimal(18).remainder_near(Decimal(10))
               Decimal('-2')
               >>> Decimal(25).remainder_near(Decimal(10))
               Decimal('5')
               >>> Decimal(35).remainder_near(Decimal(10))
               Decimal('-5')

      -- Método: rotate (other, context=None)

          Retorna o resultado da rotação dos dígitos do primeiro
          operando em uma quantidade especificada pelo segundo operando.
          O segundo operando deve ser um número inteiro no intervalo -
          precisão através da precisão.  O valor absoluto do segundo
          operando fornece o número de locais a serem rotacionados.  Se
          o segundo operando for positivo, a rotação será para a
          esquerda; caso contrário, a rotação será para a direita.  O
          coeficiente do primeiro operando é preenchido à esquerda com
          zeros na precisão do comprimento, se necessário.  O sinal e o
          expoente do primeiro operando não são alterados.

      -- Método: same_quantum (other, context=None)

          Testa se “self” e “other” têm o mesmo expoente ou se ambos são
          ‘NaN’.

          Esta operação não é afetada pelo contexto e é silenciosa:
          nenhum sinalizador é alterado e nenhum arredondamento é
          executado.  Como uma exceção, a versão C pode levantar
          InvalidOperation se o segundo operando não puder ser
          convertido exatamente.

      -- Método: scaleb (other, context=None)

          Retorna o primeiro operando com o expoente ajustado pelo
          segundo.  Da mesma forma, retorna o primeiro operando
          multiplicado por ‘10**other’.  O segundo operando deve ser um
          número inteiro.

      -- Método: shift (other, context=None)

          Retorna o resultado da troca dos dígitos do primeiro operando
          em uma quantidade especificada pelo segundo operando.  O
          segundo operando deve ser um número inteiro no intervalo -
          precisão através da precisão.  O valor absoluto do segundo
          operando fornece o número de locais a serem deslocados.  Se o
          segundo operando for positivo, o deslocamento será para a
          esquerda; caso contrário, a mudança é para a direita.  Os
          dígitos deslocados para o coeficiente são zeros.  O sinal e o
          expoente do primeiro operando não são alterados.

      -- Método: sqrt (context=None)

          Retorna a raiz quadrada do argumento para a precisão total.

      -- Método: to_eng_string (context=None)

          Converte em uma string, usando notação de engenharia, se for
          necessário um expoente.

          A notação de engenharia possui um expoente que é múltiplo de
          3.  Isso pode deixar até 3 dígitos à esquerda da casa decimal
          e pode exigir a adição de um ou dois zeros à direita.

          Por exemplo, isso converte ‘Decimal('123E+1')’ para
          ‘Decimal('1.23E+3')’.

      -- Método: to_integral (rounding=None, context=None)

          Idêntico ao método *note to_integral_value(): 282a.  O nome
          ‘to_integral’ foi mantido para compatibilidade com versões
          mais antigas.

      -- Método: to_integral_exact (rounding=None, context=None)

          Arredonda para o número inteiro mais próximo, sinalizando
          *note Inexact: 27ef. ou *note Rounded: 27f0, conforme
          apropriado, se o arredondamento ocorrer.  O modo de
          arredondamento é determinado pelo parâmetro ‘rounding’, se
          fornecido, ou pelo ‘context’ especificado.  Se nenhum
          parâmetro for fornecido, o modo de arredondamento do contexto
          atual será usado.

      -- Método: to_integral_value (rounding=None, context=None)

          Arredonda para o número inteiro mais próximo sem sinalizar
          *note Inexact: 27ef. ou ‘Rounding’.  Se fornecido, aplica
          'rounding'; caso contrário, usa o método de arredondamento no
          'context' especificado ou no contexto atual.

     Os números decimais podem ser arredondados usando a função *note
     round(): 131d.:

      -- Describe: round(number)

      -- Describe: round(number, ndigits)

          Se 'ndigits' não for fornecido ou ‘None’, retorna o *note int:
          257. de 'number' mais próximo, arredondando até chegar em par,
          e ignorando o modo de arredondamento do contexto *note
          Decimal: 29d.  Levanta *note OverflowError: 885. se 'number'
          for um infinito ou *note ValueError: 202. se for um NaN
          (silencioso ou de sinalização).

          Se 'ndigits' for um *note int: 257, o modo de arredondamento
          do contexto é respeitado e um *note Decimal: 29d.
          representando 'número' arredondado para o múltiplo mais
          próximo de ‘Decimal('1E-ndigits')’ é retornado; neste caso,
          ‘round(number, ndigits)’ é equivalente a
          ‘self.quantize(Decimal('1E-ndigits'))’.  Retorna
          ‘Decimal('NaN')’ se 'number' for um NaN silencioso.  Levanta
          *note InvalidOperation: 10e7. se 'number' for um infinito, uma
          sinalização NaN, ou se o comprimento do coeficiente após a
          operação de quantização for maior que a precisão do contexto
          atual.  Em outras palavras, para os situações comuns:

             * se 'ndigits' for positivo, retorna 'number' arredondado
               para 'ndigits' casas decimais;

             * se 'ndigits' for zero, retorna 'number' arredondado para
               o número inteiro mais próximo;

             * se 'ndigits' for negativo, retorna 'number' arredondado
               para o múltiplo mais próximo de ‘10**abs(ndigits)’.

          Por exemplo:

               >>> from decimal import Decimal, getcontext, ROUND_DOWN
               >>> getcontext().rounding = ROUND_DOWN
               >>> round(Decimal('3.75'))     # arredondamento de contexto ignorado
               4
               >>> round(Decimal('3.5'))      # arredondamento para par mais próximo
               4
               >>> round(Decimal('3.75'), 0)  # usa o arredondamento de contexto
               Decimal('3')
               >>> round(Decimal('3.75'), 1)
               Decimal('3.7')
               >>> round(Decimal('3.75'), -1)
               Decimal('0E+1')

* Menu:

* Operandos lógicos::


File: python.info,  Node: Operandos lógicos,  Up: Objetos de Decimal

5.9.4.3 Operandos lógicos
.........................

Os métodos *note logical_and(): 2812, *note logical_invert(): 2814,
*note logical_or(): 2815. e *note logical_xor(): 2816. esperam que seus
argumentos sejam 'operandos lógicos'.  Um 'operando lógico' é uma
instância de *note Decimal: 29d. cujo expoente e sinal são zero e cujos
dígitos são todos ‘0’ ou ‘1’.


File: python.info,  Node: Objetos de contexto,  Next: Constantes<4>,  Prev: Objetos de Decimal,  Up: decimal — Aritmética de ponto fixo decimal e ponto flutuante

5.9.4.4 Objetos de contexto
...........................

Contextos são ambientes para operações aritméticas.  Eles governam a
precisão, estabelecem regras para arredondamento, determinam quais
sinais são tratados como exceções e limitam o intervalo dos expoentes.

Cada thread possui seu próprio contexto atual que é acessado ou alterado
usando as funções *note getcontext(): 16be. e *note setcontext(): 27f6.:

 -- Função: decimal.getcontext ()

     Retorna o contexto atual para a thread ativa.

 -- Função: decimal.setcontext (c, /)

     Define o contexto atual para a thread ativa como 'C'.

Você também pode usar a instrução *note with: 5d2. e a função *note
localcontext(): 13cd. para alterar temporariamente o contexto ativo.

 -- Função: decimal.localcontext (ctx=None, **kwargs)

     Retorna um gerenciador de contexto que vai definir o contexto atual
     da thread ativa para uma cópia de 'ctx' na entrada da instrução
     “with” e restaurar o contexto anterior ao sair da instrução “with”.
     Se nenhum contexto for especificado, uma cópia do contexto atual
     será usada.  O argumento 'kwargs' é usado para definir os atributos
     do novo contexto.

     Por exemplo, o código a seguir define a precisão decimal atual para
     42 casas, executa um cálculo e restaura automaticamente o contexto
     anterior:

          from decimal import localcontext

          with localcontext() as ctx:
              ctx.prec = 42   # Efetua um cálculo de alta precisão
              s = calculate_something()
          s = +s  # Arredonda o resultado final de volta para a precisão padrão

     Usando argumentos nomeados, o código seria o seguinte:

          from decimal import localcontext

          with localcontext(prec=42) as ctx:
              s = calculate_something()
          s = +s

     Levanta *note TypeError: 2c3. se 'kwargs' fornecer um atributo que
     *note Context: 10ee. não oferecer suporte.  Levanta *note
     TypeError: 2c3. ou *note ValueError: 202. se 'kwargs' fornecer um
     valor inválido para um atributo.

     Alterado na versão 3.11: *note localcontext(): 13cd. agora tem
     suporte à configuração de atributos de contexto através do uso de
     argumentos nomeados.

Novos contextos também podem ser criados usando o construtor *note
Context: 10ee. descrito abaixo.  Além disso, o módulo fornece três
contextos pré-criados:

 -- Dado: decimal.BasicContext

     Este é um contexto padrão definido pela Especificação Aritmética
     Decimal Geral.  A precisão está definida como nove.  O
     arredondamento está definido como *note ROUND_HALF_UP: 27ea.  Todos
     os sinalizadores estão limpos.  Todos as armadilhas estão ativadas
     (tratadas como exceções), exceto por *note Inexact: 27ef, *note
     Rounded: 27f0. e *note Subnormal: 27f1.

     Como muitas das armadilhas estão ativadas, esse contexto é útil
     para depuração.

 -- Dado: decimal.ExtendedContext

     Este é um contexto padrão definido pela Especificação Aritmética
     Decimal Geral.  A precisão está definida como nove.  O
     arredondamento está definido como *note ROUND_HALF_EVEN: 27e9.
     Todos os sinalizadores estão limpos.  Nenhuma armadilha está
     ativada (de forma que exceções não são levantadas durante os
     cálculos).

     Como as armadilhas estão desativadas, esse contexto é útil para
     aplicativos que preferem ter o valor de resultado de ‘NaN’ ou
     ‘Infinity’ em vez de levantar exceções.  Isso permite que uma
     aplicação conclua uma execução na presença de condições que
     interromperiam o programa.

 -- Dado: decimal.DefaultContext

     Este contexto é usado pelo construtor *note Context: 10ee. como um
     protótipo para novos contextos.  Alterar um campo (tal como
     precisão) tem o efeito de alterar o padrão para novos contextos
     criados pelo construtor *note Context: 10ee.

     Esse contexto é mais útil em ambientes multithread.  A alteração de
     um dos campos antes do início das threads tem o efeito de definir
     os padrões para todo o sistema.  Não é recomendável alterar os
     campos após o início das threads, pois exigiria sincronização de
     threads para evitar condições de corrida.

     Em ambientes de thread única, é preferível não usar esse contexto.
     Em vez disso, basta criar contextos explicitamente, conforme
     descrito abaixo.

     Os valores padrão são *note Context.prec: 282e.=‘28’, *note
     Context.rounding: 282f.=*note ROUND_HALF_EVEN: 27e9. e armadilhas
     ativadas para *note Overflow: 27f2, *note InvalidOperation: 10e7. e
     *note DivisionByZero: 27ee.

Além dos três contextos fornecidos, novos contextos podem ser criados
com o construtor *note Context: 10ee.

 -- Classe: decimal.Context (prec=None, rounding=None, Emin=None,
          Emax=None, capitals=None, clamp=None, flags=None, traps=None)

     Cria um novo contexto.  Se um campo não for especificado ou for
     *note None: 675, os valores padrão serão copiados de *note
     DefaultContext: 10e2.  Se o campo 'flags' não for especificado ou
     for *note None: 675, todos os sinalizadores serão limpados.

      -- Atributo: prec

          Um inteiro no intervalo [‘1’, *note MAX_PREC: 10df.] que
          define a precisão para operações aritméticas no contexto.

      -- Atributo: rounding

          Uma das constantes listadas na seção *note Modos de
          arredondamento: 2830.

      -- Atributo: traps
      -- Atributo: flags

          Listas de todos os sinais a serem configurados.  Geralmente,
          novos contextos devem apenas definir armadilhas e deixar os
          sinalizadores limpos.

      -- Atributo: Emin
      -- Atributo: Emax

          Números inteiros que especificam os limites externos
          permitidos para expoentes.  'Emin' deve estar no intervalo
          [*note MIN_EMIN: 10e1, ‘0’], 'Emax' no intervalo [‘0’, *note
          MAX_EMAX: 10e0.].

      -- Atributo: capitals

          Assume ‘0’ ou ‘1’ (o padrão).  Se definido como ‘1’, os
          expoentes serão impressos com um ‘E’ maiúsculo; caso
          contrário, um ‘e’ minúsculo é usado: ‘Decimal('6.02e+23')’.

      -- Atributo: clamp

          Assume ‘0’ (o padrão) ou ‘1’.  Se definido como ‘1’, o
          expoente ‘e’ de uma instância de *note Decimal: 29d.
          representável nesse contexto é estritamente limitado ao
          intervalo ‘Emin - prec + 1 <= e <= Emax - prec + 1’.  Se
          'clamp' for ‘0’, uma condição mais fraca será mantida: o
          expoente ajustado da instância de *note Decimal: 29d. é no
          máximo *note Emax: 10e5.  Quando 'clamp' é ‘1’, um grande
          número normal terá, sempre que possível, seu expoente reduzido
          e um número correspondente de zeros adicionado ao seu
          coeficiente, para ajustar as restrições do expoente; isso
          preserva o valor do número, mas perde informações sobre zeros
          à direita significativos.  Por exemplo:

               >>> Context(prec=6, Emax=999, clamp=1).create_decimal('1.23e999')
               Decimal('1.23000E+999')

          Um valor de 'clamp' de ‘1’ permite compatibilidade com os
          formatos de intercâmbio decimal de largura fixa especificados
          na IEEE 754.

     A classe *note Context: 10ee. define vários métodos de uso geral,
     bem como um grande número de métodos para fazer aritmética
     diretamente em um determinado contexto.  Além disso, para cada um
     dos métodos de *note Decimal: 29d. descritos acima (com exceção dos
     métodos *note adjusted(): 27fa. e *note as_tuple(): 27fb.) existe
     um método correspondente em *note Context: 10ee.  Por exemplo, para
     uma instância ‘C’ de *note Context: 10ee. e uma instância ‘x’ de
     *note Decimal: 29d, ‘C.exp(x)’ é equivalente a ‘x.exp(context=C)’.
     Cada método de *note Context: 10ee. aceita um número inteiro do
     Python (uma instância de *note int: 257.) em qualquer lugar em que
     uma instância de Decimal seja aceita.

      -- Método: clear_flags ()

          Redefine todos os sinalizadores para ‘0’.

      -- Método: clear_traps ()

          Redefine todas as armadilhas para ‘0’.

          Adicionado na versão 3.3.

      -- Método: copy ()

          Retorna uma duplicata do contexto.

      -- Método: copy_decimal (num, /)

          Retorna uma cópia da instância de Decimal 'num'.

      -- Método: create_decimal (num='0', /)

          Cria uma nova instância decimal a partir de 'num', mas usando
          'self' como contexto.  Diferentemente do construtor de *note
          Decimal: 29d, a precisão do contexto, o método de
          arredondamento, os sinalizadores e as armadilhas são aplicadas
          à conversão.

          Isso é útil porque as constantes geralmente são fornecidas com
          uma precisão maior do que a necessária pela aplicação.  Outro
          benefício é que o arredondamento elimina imediatamente os
          efeitos indesejados dos dígitos além da precisão atual.  No
          exemplo a seguir, o uso de entradas não arredondadas significa
          que adicionar zero a uma soma pode alterar o resultado:

               >>> getcontext().prec = 3
               >>> Decimal('3.4445') + Decimal('1.0023')
               Decimal('4.45')
               >>> Decimal('3.4445') + Decimal(0) + Decimal('1.0023')
               Decimal('4.44')

          Este método implementa a operação “to-number” da especificação
          IBM. Se o argumento for uma string, nenhum espaço em branco à
          esquerda ou à direita ou sublinhado serão permitidos.

      -- Método: create_decimal_from_float (f, /)

          Cria uma nova instância de Decimal a partir de um ponto
          flutuante 'f', mas arredondando usando 'self' como contexto.
          Diferentemente do método da classe *note Decimal.from_float():
          1244, a precisão do contexto, o método de arredondamento, os
          sinalizadores e as armadilhas são aplicados à conversão.

               >>> context = Context(prec=5, rounding=ROUND_DOWN)
               >>> context.create_decimal_from_float(math.pi)
               Decimal('3.1415')
               >>> context = Context(prec=5, traps=[Inexact])
               >>> context.create_decimal_from_float(math.pi)
               Traceback (most recent call last):
                   ...
               decimal.Inexact: None

          Adicionado na versão 3.1.

      -- Método: Etiny ()

          Retorna um valor igual a ‘Emin - prec + 1’, que é o valor
          mínimo do expoente para resultados subnormais.  Quando ocorre
          o estouro negativo, o expoente é definido como *note Etiny:
          2820.

      -- Método: Etop ()

          Retorna um valor igual a ‘Emax - prec + 1’.

     A abordagem usual para trabalhar com decimais é criar instâncias de
     *note Decimal: 29d. e depois aplicar operações aritméticas que
     ocorrem no contexto atual da thread ativa.  Uma abordagem
     alternativa é usar métodos de contexto para calcular dentro de um
     contexto específico.  Os métodos são semelhantes aos da classe
     *note Decimal: 29d. e são contados apenas brevemente aqui.

      -- Método: abs (x, /)

          Retorna o valor absoluto de 'x'.

      -- Método: add (x, y, /)

          Retorna a soma de 'x' e 'y'.

      -- Método: canonical (x, /)

          Retorna o mesmo objeto de Decimal 'x'.

      -- Método: compare (x, y, /)

          Compara 'x' e 'y' numericamente.

      -- Método: compare_signal (x, y, /)

          Compara os valores dos dois operandos numericamente.

      -- Método: compare_total (x, y, /)

          Compara dois operandos usando sua representação abstrata.

      -- Método: compare_total_mag (x, y, /)

          Compara dois operandos usando sua representação abstrata,
          ignorando o sinal.

      -- Método: copy_abs (x, /)

          Retorna uma cópia de 'x' com o sinal definido para 0.

      -- Método: copy_negate (x, /)

          Retorna uma cópia de 'x' com o sinal invertido.

      -- Método: copy_sign (x, y, /)

          Copia o sinal de 'y' para 'x'.

      -- Método: divide (x, y, /)

          Retorna 'x' dividido por 'y'.

      -- Método: divide_int (x, y, /)

          Retorna 'x' dividido por 'y', truncado para um inteiro.

      -- Método: divmod (x, y, /)

          Divide dois números e retorna a parte inteira do resultado.

      -- Método: exp (x, /)

          Retorna ‘e ** x’.

      -- Método: fma (x, y, z, /)

          Retorna 'x' multiplicado por 'y', mais 'z'.

      -- Método: is_canonical (x, /)

          Retorna ‘True’ se 'x' for canonical; caso contrário, retorna
          ‘False’.

      -- Método: is_finite (x, /)

          Retorna ‘True’ se 'x' for finito; caso contrário, retorna
          ‘False’.

      -- Método: is_infinite (x, /)

          Retorna ‘True’ se 'x' for infinito; caso contrário, retorna
          ‘False’.

      -- Método: is_nan (x, /)

          Retorna ‘True’ se 'x' for qNaN ou sNaN; caso contrário,
          retorna ‘False’.

      -- Método: is_normal (x, /)

          Retorna ‘True’ se 'x' for um número normal; caso contrário,
          retorna ‘False’.

      -- Método: is_qnan (x, /)

          Retorna ‘True’ se 'x' for um NaN silencioso; caso contrário,
          retorna ‘False’.

      -- Método: is_signed (x, /)

          Retorna ‘True’ se 'x' for negativo; caso contrário, retorna
          ‘False’.

      -- Método: is_snan (x, /)

          Retorna ‘True’ se 'x' for um NaN sinalizador; caso contrário,
          retorna ‘False’.

      -- Método: is_subnormal (x, /)

          Retorna ‘True’ se 'x' for subnormal; caso contrário, retorna
          ‘False’.

      -- Método: is_zero (x, /)

          Retorna ‘True’ se 'x' for zero; caso contrário, retorna
          ‘False’.

      -- Método: ln (x, /)

          Retorna o logaritmo natural (base e) de 'x'.

      -- Método: log10 (x, /)

          Retorna o logaritmo de base 10 de 'x'.

      -- Método: logb (x, /)

          Retorna o expoente da magnitude do MSD do operando.

      -- Método: logical_and (x, y, /)

          Aplica a operação lógica 'e' entre cada dígito do operando.

      -- Método: logical_invert (x, /)

          Inverte todos os dígitos em 'x'.

      -- Método: logical_or (x, y, /)

          Aplica a operação lógica 'ou' entre cada dígito do operando.

      -- Método: logical_xor (x, y, /)

          Aplica a operação lógica 'ou exclusivo' entre cada dígito do
          operando.

      -- Método: max (x, y, /)

          Compara dois valores numericamente e retorna o máximo.

      -- Método: max_mag (x, y, /)

          Compara dois valores numericamente com seu sinal ignorado.

      -- Método: min (x, y, /)

          Compara dois valores numericamente e retorna o mínimo.

      -- Método: min_mag (x, y, /)

          Compara dois valores numericamente com seu sinal ignorado.

      -- Método: minus (x, /)

          Minus corresponde ao operador de subtração de prefixo unário
          no Python.

      -- Método: multiply (x, y, /)

          Retorna o produto de 'x' e 'y'.

      -- Método: next_minus (x, /)

          Retorna o maior número representável menor que 'x'.

      -- Método: next_plus (x, /)

          Retorna o menor número representável maior que 'x'.

      -- Método: next_toward (x, y, /)

          Retorna o número mais próximo a 'x', em direção a 'y'.

      -- Método: normalize (x, /)

          Reduz 'x' para sua forma mais simples.

      -- Método: number_class (x, /)

          Retorna uma indicação da classe de 'x'.

      -- Método: plus (x, /)

          Plus corresponde ao operador de soma de prefixo unário no
          Python.  Esta operação aplica a precisão e o arredondamento do
          contexto, portanto 'não' é uma operação de identidade.

      -- Método: power (x, y, modulo=None)

          Retorna ‘x’ à potência de ‘y’, com a redução de módulo
          ‘modulo’ se fornecido.

          Com dois argumentos, calcula ‘x**y’.  Se ‘x’ for negativo, ‘y’
          deve ser inteiro.  O resultado será inexato, a menos que ‘y’
          seja inteiro e o resultado seja finito e possa ser expresso
          exatamente em “precisão” dígitos.  O modo de arredondamento do
          contexto é usado.  Os resultados são sempre arredondados
          corretamente na versão Python.

          ‘Decimal(0) ** Decimal(0)’ resulta em ‘InvalidOperation’, e se
          ‘InvalidOperation’ não for capturado, resulta em
          ‘Decimal('NaN')’.

          Alterado na versão 3.3: O módulo C calcula *note power():
          2861. em termos das funções corretamente arredondadas *note
          exp(): 2843. e *note ln(): 284e.  O resultado é bem definido,
          mas apenas “quase sempre corretamente arredondado”.

          Com três argumentos, calcula ‘(x**y) % modulo’.  Para o
          formulário de três argumentos, as seguintes restrições nos
          argumentos são válidas:

             - todos os três argumentos devem ser inteiros

             - ‘y’ não pode ser negativo

             - pelo menos um de ‘x’ ou ‘y’ não pode ser negativo

             - ‘modulo’ não pode ser zero e deve ter pelo menos
               “precisão” dígitos

          O valor resultante de ‘Context.power(x, y, modulo)’ é igual ao
          valor que seria obtido ao computar ‘(x**y) % modulo’ com
          precisão ilimitada, mas é calculado com mais eficiência .  O
          expoente do resultado é zero, independentemente dos expoentes
          de ‘x’, ‘y’ e ‘modulo’.  O resultado é sempre exato.

      -- Método: quantize (x, y, /)

          Retorna um valor igual a 'x' (arredondado), com o expoente de
          'y'.

      -- Método: radix ()

          Só retorna 10, já que isso é Decimal, :)

      -- Método: remainder (x, y, /)

          Retorna o resto da divisão inteira.

          O sinal do resultado, se diferente de zero, é o mesmo que o do
          dividendo original.

      -- Método: remainder_near (x, y, /)

          Retorna ‘x - y * n’, onde 'n' é o número inteiro mais próximo
          do valor exato de ‘x / y’ (se o resultado for 0, seu sinal
          será o sinal de 'x').

      -- Método: rotate (x, y, /)

          Retorna uma cópia re de 'x', 'y' vezes.

      -- Método: same_quantum (x, y, /)

          Retorna ‘True’ se os dois operandos tiverem o mesmo expoente.

      -- Método: scaleb (x, y, /)

          Retorna o primeiro operando após adicionar o segundo valor seu
          exp.

      -- Método: shift (x, y, /)

          Retorna uma cópia deslocada de 'x', 'y' vezes.

      -- Método: sqrt (x, /)

          Raiz quadrada de um número não negativo para precisão do
          contexto.

      -- Método: subtract (x, y, /)

          Retorna a diferença entre 'x' e 'y'.

      -- Método: to_eng_string (x, /)

          Converte em uma string, usando notação de engenharia, se for
          necessário um expoente.

          A notação de engenharia possui um expoente que é múltiplo de
          3.  Isso pode deixar até 3 dígitos à esquerda da casa decimal
          e pode exigir a adição de um ou dois zeros à direita.

      -- Método: to_integral_exact (x, /)

          Arredonda para um número inteiro.

      -- Método: to_sci_string (x, /)

          Converte um número em uma string usando notação científica.


File: python.info,  Node: Constantes<4>,  Next: Modos de arredondamento,  Prev: Objetos de contexto,  Up: decimal — Aritmética de ponto fixo decimal e ponto flutuante

5.9.4.5 Constantes
..................

As constantes nesta seção são relevantes apenas para o módulo C. Eles
também estão incluídos na versão pura do Python para compatibilidade.

                          32 bits                   64 bits
                                                    
----------------------------------------------------------------------------------------
                                                    
 -- Dado:                 ‘425000000’               ‘999999999999999999’
          decimal.MAX_PREC                          

 -- Dado:                 ‘425000000’               ‘999999999999999999’
          decimal.MAX_EMAX                          

 -- Dado:                 ‘-425000000’              ‘-999999999999999999’
          decimal.MIN_EMIN                          

 -- Dado:                 ‘-849999999’              ‘-1999999999999999997’
          decimal.MIN_ETINY                         

 -- Dado: decimal.HAVE_THREADS

     O valor é ‘True’.  Descontinuado porque o Python agora sempre tem
     threads.

     Descontinuado desde a versão 3.9.

 -- Dado: decimal.HAVE_CONTEXTVAR

     O valor padrão é ‘True’.  Se o Python for *note configurado usando
     a opção -without-decimal-contextvar: 1efa, a versão C usará um
     contexto local de thread em vez de local de corrotina e o valor
     será ‘False’.  Isso é um pouco mais rápido em alguns cenários de
     contexto aninhados.

     Adicionado na versão 3.8.3.


File: python.info,  Node: Modos de arredondamento,  Next: Sinais,  Prev: Constantes<4>,  Up: decimal — Aritmética de ponto fixo decimal e ponto flutuante

5.9.4.6 Modos de arredondamento
...............................

 -- Dado: decimal.ROUND_CEILING

     Arredonda para ‘Infinity’.

 -- Dado: decimal.ROUND_DOWN

     Arredonda para zero.

 -- Dado: decimal.ROUND_FLOOR

     Arredonda para ‘-Infinity’.

 -- Dado: decimal.ROUND_HALF_DOWN

     Arrendonda para o mais próximo com empates tendendo a zero.

 -- Dado: decimal.ROUND_HALF_EVEN

     Arredonda para o mais próximo com empates indo para o mais próximo
     inteiro par.

 -- Dado: decimal.ROUND_HALF_UP

     Arrendonda para o mais próximo com empates se afastando de zero.

 -- Dado: decimal.ROUND_UP

     Arredonda se afastando de zero.

 -- Dado: decimal.ROUND_05UP

     Arredonda se afastando de zero se o último dígito após o
     arredondamento para zero fosse 0 ou 5; caso contrário, arredonda
     para zero.


File: python.info,  Node: Sinais,  Next: Observações sobre ponto flutuante,  Prev: Modos de arredondamento,  Up: decimal — Aritmética de ponto fixo decimal e ponto flutuante

5.9.4.7 Sinais
..............

Sinais representam condições que surgem durante o cálculo.  Cada um
corresponde a um sinalizador de contexto e um ativador de armadilha de
contexto.

O sinalizador de contexto é definido sempre que a condição é encontrada.
Após o cálculo, os sinalizadores podem ser verificados para fins
informativos (por exemplo, para determinar se um cálculo era exato).
Depois de verificar os sinalizadores, certifique-se de limpar todos os
sinalizadores antes de iniciar o próximo cálculo.

Se o ativador de armadilha de contexto estiver definido para o sinal, a
condição fará com que uma exceção Python seja levantada.  Por exemplo,
se a armadilha *note DivisionByZero: 27ee. for configurada, uma exceção
*note DivisionByZero: 27ee. será levantada ao encontrar a condição.

 -- Classe: decimal.Clamped

     Altera um expoente para ajustar as restrições de representação.

     Normalmente, 'clamping' ocorre quando um expoente fica fora dos
     limites do contexto *note Emin: 10e6. e *note Emax: 10e5.  Se
     possível, o expoente é reduzido para caber adicionando zeros ao
     coeficiente.

 -- Classe: decimal.DecimalException

     Classe base para outros sinais e uma subclasse de *note
     ArithmeticError: 241a.

 -- Classe: decimal.DivisionByZero

     Sinaliza a divisão de um número não infinito por zero.

     Pode ocorrer com divisão, divisão de módulo ou ao elevar um número
     a uma potência negativa.  Se este sinal não for capturado,
     retornará ‘Infinity’ ou ‘-Infinity’ com o sinal determinado pelas
     entradas do cálculo.

 -- Classe: decimal.Inexact

     Indica que o arredondamento ocorreu e o resultado não é exato.

     Sinaliza quando dígitos diferentes de zero foram descartados
     durante o arredondamento.  O resultado arredondado é retornado.  O
     sinalizador ou armadilha de sinal é usado para detectar quando os
     resultados são inexatos.

 -- Classe: decimal.InvalidOperation

     Uma operação inválida foi realizada.

     Indica que uma operação foi solicitada que não faz sentido.  Se não
     for capturado, retorna ‘NaN’.  As possíveis causas incluem:

          Infinity - Infinity
          0 * Infinity
          Infinity / Infinity
          x % 0
          Infinity % x
          sqrt(-x) and x > 0
          0 ** 0
          x ** (non-integer)
          x ** Infinity

 -- Classe: decimal.Overflow

     Estouro numérico.

     Indica que o expoente é maior que *note Context.Emax: 10e5. após o
     arredondamento ocorrer.  Se não for capturado, o resultado depende
     do modo de arredondamento, puxando para dentro para o maior número
     finito representável ou arredondando para fora para ‘Infinity’.
     Nos dois casos, *note Inexact: 27ef. e *note Rounded: 27f0. também
     são sinalizados.

 -- Classe: decimal.Rounded

     O arredondamento ocorreu, embora possivelmente nenhuma informação
     tenha sido perdida.

     Sinalizado sempre que o arredondamento descarta dígitos; mesmo que
     esses dígitos sejam zero (como arredondamento ‘5.00’ a ‘5.0’).  Se
     não for capturado, retorna o resultado inalterado.  Este sinal é
     usado para detectar a perda de dígitos significativos.

 -- Classe: decimal.Subnormal

     O expoente foi menor que *note Emin: 10e6. antes do arredondamento.

     Ocorre quando um resultado da operação é subnormal (o expoente é
     muito pequeno).  Se não for capturado, retorna o resultado
     inalterado.

 -- Classe: decimal.Underflow

     Estouro negativo numérico com resultado arredondado para zero.

     Ocorre quando um resultado subnormal é empurrado para zero
     arredondando.  *note Inexact: 27ef. e *note Subnormal: 27f1. também
     são sinalizados.

 -- Classe: decimal.FloatOperation

     Ativa semânticas mais rigorosas para misturar objetos de float com
     de Decimal.

     Se o sinal não for capturado (padrão), a mistura de tipos float e
     Decimal será permitida no construtor *note Decimal: 29d, *note
     create_decimal(): 10e8. e em todos os operadores de comparação.
     Tanto a conversão quanto as comparações são exatas.  Qualquer
     ocorrência de uma operação mista é registrada silenciosamente pela
     configuração *note FloatOperation: 10dc. nos sinalizadores de
     contexto.  Conversões explícitas com *note from_float(): 1244. ou
     *note create_decimal_from_float(): 2835. não definem o sinalizador.

     Caso contrário (o sinal é capturado), apenas comparações de
     igualdade e conversões explícitas são silenciosas.  Todas as outras
     operações mistas levantam *note FloatOperation: 10dc.

A tabela a seguir resume a hierarquia de sinais:

     exceptions.ArithmeticError(exceptions.Exception)
         DecimalException
             Clamped
             DivisionByZero(DecimalException, exceptions.ZeroDivisionError)
             Inexact
                 Overflow(Inexact, Rounded)
                 Underflow(Inexact, Rounded, Subnormal)
             InvalidOperation
             Rounded
             Subnormal
             FloatOperation(DecimalException, exceptions.TypeError)


File: python.info,  Node: Observações sobre ponto flutuante,  Next: Trabalhando com threads,  Prev: Sinais,  Up: decimal — Aritmética de ponto fixo decimal e ponto flutuante

5.9.4.8 Observações sobre ponto flutuante
.........................................

* Menu:

* Atenuando o erro de arredondamento com maior precisão::
* Valores especiais::


File: python.info,  Node: Atenuando o erro de arredondamento com maior precisão,  Next: Valores especiais,  Up: Observações sobre ponto flutuante

5.9.4.9 Atenuando o erro de arredondamento com maior precisão
.............................................................

O uso do ponto flutuante decimal elimina o erro de representação decimal
(possibilitando representar ‘0.1’ de forma exata); no entanto, algumas
operações ainda podem sofrer erros de arredondamento quando dígitos
diferentes de zero excederem a precisão fixa.

Os efeitos do erro de arredondamento podem ser amplificados pela adição
ou subtração de quantidades quase compensadoras, resultando em perda de
significância.  Knuth fornece dois exemplos instrutivos em que a
aritmética de ponto flutuante arredondado com precisão insuficiente
causa a quebra das propriedades associativas e distributivas da adição:

     # exemplos de Seminumerical Algorithms, Section 4.2.2.
     >>> from decimal import Decimal, getcontext
     >>> getcontext().prec = 8

     >>> u, v, w = Decimal(11111113), Decimal(-11111111), Decimal('7.51111111')
     >>> (u + v) + w
     Decimal('9.5111111')
     >>> u + (v + w)
     Decimal('10')

     >>> u, v, w = Decimal(20000), Decimal(-6), Decimal('6.0000003')
     >>> (u*v) + (u*w)
     Decimal('0.01')
     >>> u * (v+w)
     Decimal('0.0060000')

O módulo *note decimal: 36. permite restaurar as identidades expandindo
a precisão o suficiente para evitar perda de significância:

     >>> getcontext().prec = 20
     >>> u, v, w = Decimal(11111113), Decimal(-11111111), Decimal('7.51111111')
     >>> (u + v) + w
     Decimal('9.51111111')
     >>> u + (v + w)
     Decimal('9.51111111')
     >>>
     >>> u, v, w = Decimal(20000), Decimal(-6), Decimal('6.0000003')
     >>> (u*v) + (u*w)
     Decimal('0.0060000')
     >>> u * (v+w)
     Decimal('0.0060000')


File: python.info,  Node: Valores especiais,  Prev: Atenuando o erro de arredondamento com maior precisão,  Up: Observações sobre ponto flutuante

5.9.4.10 Valores especiais
..........................

O sistema numérico para o módulo *note decimal: 36. fornece valores
especiais, incluindo ‘NaN’, ‘sNaN’, ‘-Infinity’, ‘Infinity’, e dois
zeros, ‘+0’ e ‘-0’.

Os infinitos podem ser construídos diretamente com:
‘Decimal('Infinity')’.  Além disso, eles podem resultar da divisão por
zero quando o sinal *note DivisionByZero: 27ee. não é capturado.  Da
mesma forma, quando o sinal *note Overflow: 27f2. não é capturado, o
infinito pode resultar do arredondamento além dos limites do maior
número representável.

Os infinitos contêm sinais (afins) e podem ser usados em operações
aritméticas, onde são tratados como números muito grandes e
indeterminados.  Por exemplo, adicionar uma constante ao infinito
fornece outro resultado infinito.

Algumas operações são indeterminadas e retornam ‘NaN’ ou, se o sinal
*note InvalidOperation: 10e7. for capturado, levanta uma exceção.  Por
exemplo, ‘0/0’ retorna ‘NaN’, que significa “não é um número” em inglês.
Esta variação de ‘NaN’ é silenciosa e, uma vez criada, fluirá através de
outros cálculos sempre resultando em outra ‘NaN’.  Esse comportamento
pode ser útil para uma série de cálculos que ocasionalmente têm entradas
ausentes — ele permite que o cálculo continue enquanto sinaliza
resultados específicos como inválidos.

Uma variante é ‘sNaN’, que sinaliza em vez de permanecer em silêncio
após cada operação.  Esse é um valor de retorno útil quando um resultado
inválido precisa interromper um cálculo para tratamento especial.

O comportamento dos operadores de comparação do Python pode ser um pouco
surpreendente onde um ‘NaN’ está envolvido.  Um teste de igualdade em
que um dos operandos é um ‘NaN’ silencioso ou sinalizador sempre retorna
*note False: b49. (mesmo ao fazer ‘Decimal('NaN')==Decimal('NaN')’),
enquanto um teste de desigualdade sempre retorna *note True: c27.  Uma
tentativa de comparar dois decimais usando qualquer um dos operadores
‘<’, ‘<=’, ‘>’ ou ‘>=’ levantará o sinal *note InvalidOperation: 10e7.
se um dos operandos for um ‘NaN’ e retorna *note False: b49. se esse
sinal não for capturado.  Observe que a especificação aritmética decimal
geral não especifica o comportamento das comparações diretas; estas
regras para comparações envolvendo a ‘NaN’ foram retiradas do padrão
IEEE 854 (consulte a Tabela 3 na seção 5.7).  Para garantir uma rígida
conformidade com os padrões, use os métodos *note compare(): 27fd. e
*note compare_signal(): 27fe.

Os zeros com sinais podem resultar de cálculos insuficientes.  Eles
mantêm o sinal que teria resultado se o cálculo tivesse sido realizado
com maior precisão.  Como sua magnitude é zero, os zeros positivos e
negativos são tratados como iguais e seu sinal é informacional.

Além dos dois zeros com sinais que são distintos e iguais, existem
várias representações de zero com diferentes precisões e ainda com valor
equivalente.  Isso leva um pouco de tempo para se acostumar.  Para um
olho acostumado a representações de ponto flutuante normalizadas, não é
imediatamente óbvio que o seguinte cálculo retorne um valor igual a
zero:

     >>> 1 / Decimal('Infinity')
     Decimal('0E-1000026')


File: python.info,  Node: Trabalhando com threads,  Next: Receitas,  Prev: Observações sobre ponto flutuante,  Up: decimal — Aritmética de ponto fixo decimal e ponto flutuante

5.9.4.11 Trabalhando com threads
................................

A função *note getcontext(): 16be. acessa um objeto *note Context: 10ee.
diferente para cada thread.  Ter contextos de threads separadas
significa que as threads podem fazer alterações (como
‘getcontext().prec=10’) sem interferir em outras threads.

Da mesma forma, a função *note setcontext(): 27f6. atribui
automaticamente seu alvo à thread atual.

Se *note setcontext(): 27f6. não tiver sido chamado antes de *note
getcontext(): 16be, então *note getcontext(): 16be. criará
automaticamente um novo contexto para uso na thread atual.

O novo contexto é copiado de um contexto protótipo chamado
'DefaultContext'.  Para controlar os padrões para que cada thread, use
os mesmos valores em todo a aplicação, modifique diretamente o objeto
'DefaultContext'.  Isso deve ser feito 'antes' de qualquer thread ser
iniciada, para que não haja uma condição de corrida entre as threads
chamando *note getcontext(): 16be.  Por exemplo:

     # Define padrões para todo a aplicação para todas as threads prestes a serem iniciadas
     DefaultContext.prec = 12
     DefaultContext.rounding = ROUND_DOWN
     DefaultContext.traps = ExtendedContext.traps.copy()
     DefaultContext.traps[InvalidOperation] = 1
     setcontext(DefaultContext)

     # Depois, as threads podem ser iniciadas
     t1.start()
     t2.start()
     t3.start()
      . . .


File: python.info,  Node: Receitas,  Next: FAQ sobre Decimal,  Prev: Trabalhando com threads,  Up: decimal — Aritmética de ponto fixo decimal e ponto flutuante

5.9.4.12 Receitas
.................

Aqui estão algumas receitas que servem como funções utilitárias e que
demonstram maneiras de trabalhar com a classe *note Decimal: 29d.:

     def moneyfmt(value, places=2, curr='', sep=',', dp='.',
                  pos='', neg='-', trailneg=''):
         """Converte Decimal para uma string formatada de moeda.

         places:  número obrigatório de casas após o ponto decimal
         curr:    símbolo de moeda opcional antes do sinal (pode estar em branco)
         sep:     separador de agrupamento opcional (vírgula, ponto, espaço ou espaço em branco)
         dp:      indicador de ponto decimal (vírgula ou ponto)
                  especificar como espaço em branco somente quando places for zero
         pos:     sinal opcional para números positivos: '+', espaço ou espaço em branco
         neg:     sinal opcional para números negativos: '-', '(', espaço ou espaço em branco
         trailneg:indicador de menos final opcional: '-', ')', espaço ou espaço em branco

         >>> d = Decimal('-1234567.8901')
         >>> moneyfmt(d, curr='$')
         '-$1,234,567.89'
         >>> moneyfmt(d, places=0, sep='.', dp='', neg='', trailneg='-')
         '1.234.568-'
         >>> moneyfmt(d, curr='$', neg='(', trailneg=')')
         '($1,234,567.89)'
         >>> moneyfmt(Decimal(123456789), sep=' ')
         '123 456 789.00'
         >>> moneyfmt(Decimal('-0.02'), neg='<', trailneg='>')
         '<0.02>'

         """
         q = Decimal(10) ** -places      # 2 casas --> '0.01'
         sign, digits, exp = value.quantize(q).as_tuple()
         result = []
         digits = list(map(str, digits))
         build, next = result.append, digits.pop
         if sign:
             build(trailneg)
         for i in range(places):
             build(next() if digits else '0')
         if places:
             build(dp)
         if not digits:
             build('0')
         i = 0
         while digits:
             build(next())
             i += 1
             if i == 3 and digits:
                 i = 0
                 build(sep)
         build(curr)
         build(neg if sign else pos)
         return ''.join(reversed(result))

     def pi():
         """Calcula Pi com a precisão atual.

         >>> print(pi())
         3.141592653589793238462643383

         """
         getcontext().prec += 2  # dígitos extras para casas intermediárias
         three = Decimal(3)      # substitui "three=3.0" para pontos flutuantes regulares
         lasts, t, s, n, na, d, da = 0, three, 3, 1, 0, 0, 24
         while s != lasts:
             lasts = s
             n, na = n+na, na+8
             d, da = d+da, da+32
             t = (t * n) / d
             s += t
         getcontext().prec -= 2
         return +s               # unário com mais aplica a nova precisão

     def exp(x):
         """Retorna e elevado à potência de x. O tipo de resultado corresponde ao tipo de entrada.

         >>> print(exp(Decimal(1)))
         2.718281828459045235360287471
         >>> print(exp(Decimal(2)))
         7.389056098930650227230427461
         >>> print(exp(2.0))
         7.38905609893
         >>> print(exp(2+0j))
         (7.38905609893+0j)

         """
         getcontext().prec += 2
         i, lasts, s, fact, num = 0, 0, 1, 1, 1
         while s != lasts:
             lasts = s
             i += 1
             fact *= i
             num *= x
             s += num / fact
         getcontext().prec -= 2
         return +s

     def cos(x):
         """Retorna o cosseno de x medido em radianos.

         A aproximação da série de Taylor funciona melhor para um valor pequeno de x.
         Para valores maiores, primeiro calcule x = x % (2 * pi).

         >>> print(cos(Decimal('0.5')))
         0.8775825618903727161162815826
         >>> print(cos(0.5))
         0.87758256189
         >>> print(cos(0.5+0j))
         (0.87758256189+0j)

         """
         getcontext().prec += 2
         i, lasts, s, fact, num, sign = 0, 0, 1, 1, 1, 1
         while s != lasts:
             lasts = s
             i += 2
             fact *= i * (i-1)
             num *= x * x
             sign *= -1
             s += num / fact * sign
         getcontext().prec -= 2
         return +s

     def sin(x):
         """Retorna o seno de x medido em radianos.

         A aproximação da série de Taylor funciona melhor para um valor pequeno de x.
         Para valores maiores, primeiro calcule x = x % (2 * pi).

         >>> print(sin(Decimal('0.5')))
         0.4794255386042030002732879352
         >>> print(sin(0.5))
         0.479425538604
         >>> print(sin(0.5+0j))
         (0.479425538604+0j)

         """
         getcontext().prec += 2
         i, lasts, s, fact, num, sign = 1, 0, x, 1, x, 1
         while s != lasts:
             lasts = s
             i += 2
             fact *= i * (i-1)
             num *= x * x
             sign *= -1
             s += num / fact * sign
         getcontext().prec -= 2
         return +s


File: python.info,  Node: FAQ sobre Decimal,  Prev: Receitas,  Up: decimal — Aritmética de ponto fixo decimal e ponto flutuante

5.9.4.13 FAQ sobre Decimal
..........................

P: É complicado digitar ‘decimal.Decimal('1234.5')’.  Existe uma maneira
de minimizar a digitação ao usar o interpretador interativo?

R: Alguns usuários abreviam o construtor para apenas uma única letra:

     >>> D = decimal.Decimal
     >>> D('1.23') + D('3.45')
     Decimal('4.68')

P: Em uma aplicação de ponto fixo com duas casas decimais, algumas
entradas têm muitas casas e precisam ser arredondadas.  Outros não devem
ter dígitos em excesso e precisam ser validados.  Quais métodos devem
ser usados?

R: O método *note quantize(): 10ef. arredonda para um número fixo de
casas decimais.  Se a armadilha *note Inexact: 27ef. estiver
configurada, também será útil para validação:

     >>> TWOPLACES = Decimal(10) ** -2       # same as Decimal('0.01')

     >>> # Round to two places
     >>> Decimal('3.214').quantize(TWOPLACES)
     Decimal('3.21')

     >>> # Validate that a number does not exceed two places
     >>> Decimal('3.21').quantize(TWOPLACES, context=Context(traps=[Inexact]))
     Decimal('3.21')

     >>> Decimal('3.214').quantize(TWOPLACES, context=Context(traps=[Inexact]))
     Traceback (most recent call last):
        ...
     Inexact: None

P: Assim que eu tiver entradas de duas casas válidas, como mantenho essa
invariante em uma aplicação?

R: Algumas operações como adição, subtração e multiplicação por um
número inteiro preservam automaticamente o ponto fixo.  Outras
operações, como divisão e multiplicação não inteira, alteram o número de
casas decimais e precisam ser seguidas com uma etapa *note quantize():
10ef.:

     >>> a = Decimal('102.72')           # Initial fixed-point values
     >>> b = Decimal('3.17')
     >>> a + b                           # Addition preserves fixed-point
     Decimal('105.89')
     >>> a - b
     Decimal('99.55')
     >>> a * 42                          # So does integer multiplication
     Decimal('4314.24')
     >>> (a * b).quantize(TWOPLACES)     # Must quantize non-integer multiplication
     Decimal('325.62')
     >>> (b / a).quantize(TWOPLACES)     # And quantize division
     Decimal('0.03')

No desenvolvimento de aplicações de ponto fixo, é conveniente definir
funções para manipular a etapa *note quantize(): 10ef.:

     >>> def mul(x, y, fp=TWOPLACES):
     ...     return (x * y).quantize(fp)
     ...
     >>> def div(x, y, fp=TWOPLACES):
     ...     return (x / y).quantize(fp)

     >>> mul(a, b)                       # Automatically preserve fixed-point
     Decimal('325.62')
     >>> div(b, a)
     Decimal('0.03')

P: Existem várias maneiras de expressar o mesmo valor.  Os números
‘200’, ‘200.000’, ‘2E2’ e ‘.02E+4’ têm todos o mesmo valor em várias
precisões.  Existe uma maneira de transformá-los em um único valor
canônico reconhecível?

R: O método *note normalize(): 281e. mapeia todos os valores
equivalentes para um único representativo:

     >>> values = map(Decimal, '200 200.000 2E2 .02E+4'.split())
     >>> [v.normalize() for v in values]
     [Decimal('2E+2'), Decimal('2E+2'), Decimal('2E+2'), Decimal('2E+2')]

P: Quando ocorre o arredondamento em um cálculo?

R: Ocorre 'após' o cálculo.  A filosofia da especificação decimal é que
os números são considerados exatos e criados independentemente do
contexto atual.  Eles podem até ter maior precisão do que o contexto
atual.  O processo de cálculo com essas entradas exatas e, em seguida, o
arredondamento (ou outras operações de contexto) é aplicado ao
'resultado' do cálculo:

     >>> getcontext().prec = 5
     >>> pi = Decimal('3.1415926535')   # Mais de 5 dígitos
     >>> pi                             # Todos os dígitos são retidos
     Decimal('3.1415926535')
     >>> pi + 0                         # Arredondado após uma adição
     Decimal('3.1416')
     >>> pi - Decimal('0.00005')        # Subtrai números não arredondados e depois arredonda
     Decimal('3.1415')
     >>> pi + 0 - Decimal('0.00005').   # Os valores intermediários são arredondados
     Decimal('3.1416')

P: Alguns valores decimais sempre são exibidas com notação exponencial.
Existe uma maneira de obter uma representação não exponencial?

R: Para alguns valores, a notação exponencial é a única maneira de
expressar o número de casas significativas no coeficiente.  Por exemplo,
expressar ‘5.0E+3’ como ‘5000’ mantém o valor constante, mas não pode
mostrar a significância de duas casa do original.

Se uma aplicação não se importa com o rastreamento da significância, é
fácil remover o expoente e os zeros à direita, perdendo a significância,
mas mantendo o valor inalterado:

     >>> def remove_exponent(d):
     ...     return d.quantize(Decimal(1)) if d == d.to_integral() else d.normalize()

     >>> remove_exponent(Decimal('5E+3'))
     Decimal('5000')

P: Existe uma maneira de converter um float comum em um *note Decimal:
29d.?

R: Sim, qualquer número de ponto flutuante binário pode ser expresso
exatamente como um Decimal, embora uma conversão exata possa exigir mais
precisão do que a intuição sugere:

     >>> Decimal(math.pi)
     Decimal('3.141592653589793115997963468544185161590576171875')

P: Em um cálculo complexo, como posso ter certeza de que não obtive um
resultado falso devido à precisão insuficiente ou a anomalias de
arredondamento.

R: O módulo decimal facilita o teste de resultados.  Uma boa prática é
executar novamente os cálculos usando maior precisão e com vários modos
de arredondamento.  Resultados amplamente diferentes indicam precisão
insuficiente, problemas no modo de arredondamento, entradas mal
condicionadas ou um algoritmo numericamente instável.

P: Notei que a precisão do contexto é aplicada aos resultados das
operações, mas não às entradas.  Há algo a observar ao misturar valores
de diferentes precisões?

R: Sim.  O princípio é que todos os valores são considerados exatos,
assim como a aritmética desses valores.  Somente os resultados são
arredondados.  A vantagem das entradas é que “o que você vê é o que você
obtém”.  Uma desvantagem é que os resultados podem parecer estranhos se
você esquecer que as entradas não foram arredondadas:

     >>> getcontext().prec = 3
     >>> Decimal('3.104') + Decimal('2.104')
     Decimal('5.21')
     >>> Decimal('3.104') + Decimal('0.000') + Decimal('2.104')
     Decimal('5.20')

A solução é aumentar a precisão ou forçar o arredondamento das entradas
usando a operação unária de mais:

     >>> getcontext().prec = 3
     >>> +Decimal('1.23456789')      # unary plus triggers rounding
     Decimal('1.23')

Como alternativa, as entradas podem ser arredondadas na criação usando o
método *note Context.create_decimal(): 10e8.:

     >>> Context(prec=5, rounding=ROUND_DOWN).create_decimal('1.2345678')
     Decimal('1.2345')

P: A implementação do CPython é rápida para números grandes?

A: Sim.  Nas implementações CPython e PyPy3, as versões C/CFFI do módulo
decimal integram a biblioteca de alta velocidade libmpdec(1) para
precisão arbitrária de aritmética de ponto flutuante decimal
corretamente arredondado (2).  ‘libmpdec’ usa a multiplicação de
Karatsuba(3) para números com tamanho médio e a Transformada Numérica de
Fourier(4) para números muito grandes.

O contexto deve ser adaptado para uma aritmética exata de precisão
arbitrária.  *note Emin: 10e6. e *note Emax: 10e5. devem sempre ser
configurados com os valores máximos, *note clamp: 11dd. deve sempre ser
0 (o padrão).  A configuração de *note prec: 282e. requer alguns
cuidados.

A abordagem mais fácil para testar a aritmética do bignum é usar o valor
máximo para *note prec: 282e. também (5):

     >>> setcontext(Context(prec=MAX_PREC, Emax=MAX_EMAX, Emin=MIN_EMIN))
     >>> x = Decimal(2) ** 256
     >>> x / 128
     Decimal('904625697166532776746648320380374280103671755200316906558262375061821325312')

Para resultados inexatos, *note MAX_PREC: 10df. é muito grande em
plataformas de 64 bits e a memória disponível será insuficiente:

     >>> Decimal(1) / 3
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     MemoryError

Em sistemas com alocação excessiva (por exemplo, Linux), uma abordagem
mais sofisticada é ajustar *note prec: 282e. à quantidade de RAM
disponível.  Suponha que você tenha 8 GB de RAM e espere 10 operandos
simultâneos usando no máximo 500 MB cada:

     >>> import sys
     >>>
     >>> # Número máximo de dígitos para um único operando usando 500 MB
     >>> # em palavras de 8 bytes com 19 dígitos por palavra (4 bytes e 9 dígitos
     >>> # para a construção de 32 bits):
     >>> maxdigits = 19 * ((500 * 1024**2) // 8)
     >>>
     >>> # Confere que isso funciona:
     >>> c = Context(prec=maxdigits, Emax=MAX_EMAX, Emin=MIN_EMIN)
     >>> c.traps[Inexact] = True
     >>> setcontext(c)
     >>>
     >>> # Preenche a precisão disponível com noves:
     >>> x = Decimal(0).logical_invert() * 9
     >>> sys.getsizeof(x)
     524288112
     >>> x + 2
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
       decimal.Inexact: [<class 'decimal.Inexact'>]

Em geral (e especialmente em sistemas sem alocação excessiva),
recomenda-se estimar limites ainda mais apertados e definir a armadilha
*note Inexact: 27ef. se for esperado que todos os cálculos sejam mais
precisos.

   ---------- Footnotes ----------

   (1) https://www.bytereef.org/mpdecimal/doc/libmpdec/index.html

   (2) 
Adicionado na versão 3.3.

   (3) https://pt.wikipedia.org/wiki/Algoritmo_de_Karatsuba

   (4) 
https://en.wikipedia.org/wiki/Discrete_Fourier_transform_(general)#Number-theoretic_transform

   (5) 
Alterado na versão 3.9: Esta abordagem agora funciona para todos os
resultados exatos, exceto para potências de números que não sejam
inteiros.


File: python.info,  Node: fractions — Números racionais,  Next: random — Gera números pseudoaleatórios,  Prev: decimal — Aritmética de ponto fixo decimal e ponto flutuante,  Up: Módulos Matemáticos e Numéricos

5.9.5 ‘fractions’ — Números racionais
-------------------------------------

'Código-fonte:' Lib/fractions.py(1)

__________________________________________________________________

O módulo *note fractions: 5d. fornece suporte para aritmética de números
racionais.

Uma instância de Fraction pode ser construída a partir de um par de
números racionais, de um único número ou de uma string.

 -- Classe: fractions.Fraction (numerator=0, denominator=1)

 -- Classe: fractions.Fraction (other_fraction)

 -- Classe: fractions.Fraction (float)

 -- Classe: fractions.Fraction (decimal)

 -- Classe: fractions.Fraction (string)

     A primeira versão requer que 'numerator' e 'denominator' sejam
     instâncias de *note numbers.Rational: 1301. e retorna uma nova
     instância de *note Fraction: 1e7. com um valor igual a
     ‘numerator/denominator’.  Se 'denominator' for zero, ele levanta
     uma *note ZeroDivisionError: 94c.  A segunda versão requer que
     'other_fraction' seja uma instância de *note numbers.Rational:
     1301. e retorna uma instância de *note Fraction: 1e7. com o mesmo
     valor.  As próximas duas versões aceitam uma instância de *note
     float: 2f7. ou *note decimal.Decimal: 29d. e retornam uma instância
     de *note Fraction: 1e7. com exatamente o mesmo valor.  Note que
     devido aos problemas usuais com ponto flutuante binário (veja *note
     Aritmética de ponto flutuante; problemas e limitações: 1e99.), o
     argumento para ‘Fraction(1.1)’ não é exatamente igual a 11/10, e
     então ‘Fraction(1.1)’ 'não' retorna ‘Fraction(11, 10)’ como seria
     de se esperar.  (Mas veja a documentação para o método *note
     limit_denominator(): 2882. abaixo.)  A última versão do construtor
     espera uma instância de string ou unicode.  A forma usual para esta
     instância é:

          [sinal] numerador ['/' denominador]

     onde o ‘sign’ opcional pode ser ‘+’ ou ‘-’ e ‘numerator’ e
     ‘denominator’ (se presente) são strings de dígitos decimais
     (sublinhados podem ser usados para delimitar dígitos como com
     literais integrais no código).  Além disso, qualquer string que
     represente um valor finito e seja aceita pelo construtor *note
     float: 2f7. também é aceita pelo construtor *note Fraction: 1e7.
     Em qualquer forma, a string de entrada também pode ter espaços em
     branco à esquerda e/ou à direita.  Aqui estão alguns exemplos:

          >>> from fractions import Fraction
          >>> Fraction(16, -10)
          Fraction(-8, 5)
          >>> Fraction(123)
          Fraction(123, 1)
          >>> Fraction()
          Fraction(0, 1)
          >>> Fraction('3/7')
          Fraction(3, 7)
          >>> Fraction(' -3/7 ')
          Fraction(-3, 7)
          >>> Fraction('1.414213 \t\n')
          Fraction(1414213, 1000000)
          >>> Fraction('-.125')
          Fraction(-1, 8)
          >>> Fraction('7e-6')
          Fraction(7, 1000000)
          >>> Fraction(2.25)
          Fraction(9, 4)
          >>> Fraction(1.1)
          Fraction(2476979795053773, 2251799813685248)
          >>> from decimal import Decimal
          >>> Fraction(Decimal('1.1'))
          Fraction(11, 10)

     A classe *note Fraction: 1e7. herda da classe base abstrata *note
     numbers.Rational: 1301. e implementa todos os métodos e operações
     dessa classe.  As instâncias de *note Fraction: 1e7. são *note
     hasheável: 610. e devem ser tratadas como imutáveis.  Além disso,
     *note Fraction: 1e7. tem as seguintes propriedades e métodos:

     Alterado na versão 3.2: O construtor *note Fraction: 1e7. agora
     aceita instâncias *note float: 2f7. e *note decimal.Decimal: 29d.

     Alterado na versão 3.9: A função *note math.gcd(): 916. agora é
     usada para normalizar o 'numerator' e o 'denominator'.  *note
     math.gcd(): 916. sempre retorna um tipo *note int: 257.
     Anteriormente, o tipo GCD dependia do 'numerator' e do
     'denominator'.

     Alterado na versão 3.11: Sublinhados agora são permitidos ao criar
     uma instância *note Fraction: 1e7. a partir de uma string, seguindo
     as regras PEP 515(2).

     Alterado na versão 3.11: *note Fraction: 1e7. implementa ‘__int__’
     agora para satisfazer verificações de instância
     ‘typing.SupportsInt’.

     Alterado na versão 3.12: É permitido espaço ao redor da barra para
     entradas de string: ‘Fraction('2 / 3')’.

     Alterado na versão 3.12: Instâncias de *note Fraction: 1e7. agora
     oferecem suporte à formatação no estilo float, com tipos de
     apresentação ‘"e"’, ‘"E"’, ‘"f"’, ‘"F"’, ‘"g"’, ‘"G"’ e ‘"%""’.

     Alterado na versão 3.13: A formatação de instâncias *note Fraction:
     1e7. sem um tipo de apresentação agora oferece suporte a
     preenchimento, alinhamento, tratamento de sinais, largura mínima e
     agrupamento.

      -- Atributo: numerator

          Numerador de Fraction no menor termo.

      -- Atributo: denominator

          Denominador de Fraction em termos mínimos.  Garantidamente
          positivo.

      -- Método: as_integer_ratio ()

          Retorna uma tupla de dois inteiros, cuja razão é igual a
          Fraction original.  A razão está em termos mais baixos e tem
          um denominador positivo.

          Adicionado na versão 3.8.

      -- Método: is_integer ()

          Retorna ‘True’ se a Fraction for um inteiro.

          Adicionado na versão 3.12.

      -- Método: classmethod from_float (f)

          Construtor alternativo que aceita apenas instâncias de *note
          float: 2f7. ou *note numbers.Integral: 214b.  Esteja ciente de
          que ‘Fraction.from_float(0.3)’ não é o mesmo valor que
          ‘Fraction(3, 10)’.

               Nota: A partir do Python 3.2, você também pode construir
               uma instância *note Fraction: 1e7. diretamente de um
               *note float: 2f7.

      -- Método: classmethod from_decimal (dec)

          Construtor alternativo que aceita somente instâncias de *note
          decimal.Decimal: 29d. ou *note numbers.Integral: 214b.

               Nota: A partir do Python 3.2, você também pode construir
               uma instância *note Fraction: 1e7. diretamente de uma
               instância de *note decimal.Decimal: 29d.

      -- Método: limit_denominator (max_denominator=1000000)

          Encontra e retorna o *note Fraction: 1e7. mais próximo de
          ‘self’ que tem denominador no máximo max_denominator.  Este
          método é útil para encontrar aproximações racionais para um
          dado número de ponto flutuante:

               >>> from fractions import Fraction
               >>> Fraction('3.1415926535897932').limit_denominator(1000)
               Fraction(355, 113)

          ou para recuperar um número racional que é representado como
          um ponto flutuante:

               >>> from math import pi, cos
               >>> Fraction(cos(pi/3))
               Fraction(4503599627370497, 9007199254740992)
               >>> Fraction(cos(pi/3)).limit_denominator()
               Fraction(1, 2)
               >>> Fraction(1.1).limit_denominator()
               Fraction(11, 10)

      -- Método: __floor__ ()

          Retorna o maior *note int: 257. ‘<= self’.  Este método também
          pode ser acessado por meio da função *note math.floor():
          1404.:

               >>> from math import floor
               >>> floor(Fraction(355, 113))
               3

      -- Método: __ceil__ ()

          Retorna o menor *note int: 257. ‘>= self’.  Este método também
          pode ser acessado por meio da função *note math.ceil(): 1405.

      -- Método: __round__ ()

      -- Método: __round__ (ndigits)

          A primeira versão retorna o *note int: 257. mais próximo de
          ‘self’, arredondando a metade para par.  A segunda versão
          arredonda ‘self’ para o múltiplo mais próximo de ‘Fraction(1,
          10**ndigits)’ (logicamente, se ‘ndigits’ for negativo),
          novamente arredondando a metade para par.  Este método também
          pode ser acessado por meio da função *note round(): 131d.

      -- Método: __format__ (format_spec, /)

          Fornece suporte para formatação de instâncias de *note
          Fraction: 1e7. por meio do método *note str.format(): 621, da
          função embutida *note format(): 61f. ou *note literais de
          strings formatadas: 9b1.

          Se a string de especificação de formato ‘format_spec’ não
          terminar com um dos tipos de apresentação ‘'e'’, ‘'E'’, ‘'f'’,
          ‘'F'’, ‘'g'’, ‘'G'’ ou ‘'%'’, então a formatação segue as
          regras gerais para preenchimento, alinhamento, tratamento de
          sinais, largura mínima e agrupamento, conforme descrito na
          *note minilinguagem de especificação de formato: 1e8.  O
          sinalizador de “formato alternativo” ‘'#'’ é suportado: se
          presente, ele força a string de saída a sempre incluir um
          denominador explícito, mesmo quando o valor que está sendo
          formatado é um inteiro exato.  O sinalizador de preenchimento
          de zeros ‘'0'’ não é suportado.

          Se a string de especificação de formato ‘format_spec’ terminar
          com um dos tipos de apresentação ‘'e'’, ‘'E'’, ‘'f'’, ‘'F'’,
          ‘'g'’, ‘'G'’ ou ‘'%'’, então a formatação segue as regras
          descritas para o tipo *note float: 2f7. na seção *note
          Minilinguagem de especificação de formato: 1e8.

          Veja alguns exemplos:

               >>> from fractions import Fraction
               >>> format(Fraction(103993, 33102), '_')
               '103_993/33_102'
               >>> format(Fraction(1, 7), '.^+10')
               '...+1/7...'
               >>> format(Fraction(3, 1), '')
               '3'
               >>> format(Fraction(3, 1), '#')
               '3/1'
               >>> format(Fraction(1, 7), '.40g')
               '0.1428571428571428571428571428571428571429'
               >>> format(Fraction('1234567.855'), '_.2f')
               '1_234_567.86'
               >>> f"{Fraction(355, 113):*>20.6e}"
               '********3.141593e+00'
               >>> old_price, new_price = 499, 672
               >>> "{:.2%} price increase".format(Fraction(new_price, old_price) - 1)
               '34.67% price increase'

Ver também
..........

Módulo *note numbers: 9e.

     As classes base abstratas que compõem a torre numérica.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/fractions.py

   (2) https://peps.python.org/pep-0515/


File: python.info,  Node: random — Gera números pseudoaleatórios,  Next: statistics — Funções estatísticas,  Prev: fractions — Números racionais,  Up: Módulos Matemáticos e Numéricos

5.9.6 ‘random’ — Gera números pseudoaleatórios
----------------------------------------------

'Código-fonte:' Lib/random.py(1)

__________________________________________________________________

Este módulo implementa geradores de números pseudoaleatórios para várias
distribuições.

Para números inteiros, há uma seleção uniforme de um intervalo.  Para
sequências, há uma seleção uniforme de um elemento aleatório, uma função
para gerar uma permutação aleatória de uma lista localmente e uma função
para amostragem aleatória sem substituição.

Na linha real, existem funções para calcular distribuições uniforme,
normal (gaussiana), log-normal, exponencial negativa, gama e beta.  Para
gerar distribuições de ângulos, a distribuição de von Mises está
disponível.

Quase todas as funções do módulo dependem da função básica *note
random(): 748, que gera um ponto flutuante aleatório uniformemente no
intervalo semiaberto ‘0.0 <= X < 1.0’.  Python usa o Mersenne Twister
como gerador de núcleo.  Produz pontos flutuantes de precisão de 53 bits
e possui um período de 2**19937-1.  A implementação subjacente em C é
rápida e segura para threads.  O Mersenne Twister é um dos geradores de
números aleatórios mais amplamente testados existentes.  No entanto,
sendo completamente determinístico, não é adequado para todos os fins e
é totalmente inadequado para fins criptográficos.

As funções fornecidas por este módulo são, na verdade, métodos
vinculados de uma instância oculta da classe *note random.Random: 19e7.
Você pode instanciar suas próprias instâncias de *note Random: 19e7.
para obter geradores que não compartilham estado.

A classe *note Random: 19e7. também pode ser subclassificada se você
quiser usar um gerador básico diferente de sua própria criação: veja a
documentação dessa classe para mais detalhes.

O módulo *note random: b8. também fornece a classe *note SystemRandom:
288b. que usa a função do sistema *note os.urandom(): 523. para gerar
números aleatórios a partir de fontes fornecidas pelo sistema
operacional.

     Aviso: Os geradores pseudoaleatórios deste módulo não devem ser
     usados para fins de segurança.  Para segurança ou uso
     criptográfico, veja o módulo *note secrets: c0.

Ver também
..........

M. Matsumoto and T. Nishimura, “Mersenne Twister: A 623-dimensionally
equidistributed uniform pseudorandom number generator”, ACM Transactions
on Modeling and Computer Simulation Vol.  8, No.  1, January pp.3–30
1998.

Receita de Complementary-Multiply-with-Carry(2) para um gerador de
números aleatórios alternativo compatível com um longo período e
operações de atualização comparativamente simples.

     Nota: O gerador global de números aleatórios e as instâncias de
     *note Random: 19e7. são seguros para thread.  No entanto, na
     construção com threads livres, chamadas simultâneas ao gerador
     global ou à mesma instância de *note Random: 19e7. podem encontrar
     contenção e baixo desempenho.  Considere usar instâncias separadas
     de *note Random: 19e7. por thread.

* Menu:

* Funções de contabilidade::
* Funções para bytes::
* Funções para inteiros::
* Funções para sequências::
* Distribuições discretas::
* Distribuições com valor real::
* Gerador alternativo::
* Notas sobre reprodutibilidade::
* Exemplos: Exemplos<4>.
* Receitas: Receitas<2>.
* Uso na linha de comando: Uso na linha de comando<2>.
* Exemplos na linha de comando::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/random.py

   (2) 
https://code.activestate.com/recipes/576707-long-period-random-number-generator/


File: python.info,  Node: Funções de contabilidade,  Next: Funções para bytes,  Up: random — Gera números pseudoaleatórios

5.9.6.1 Funções de contabilidade
................................

 -- Função: random.seed (a=None, version=2)

     Inicializa o gerador de números aleatórios.

     Se 'a' for omitido ou ‘None’, a hora atual do sistema será usada.
     Se fontes de aleatoriedade são fornecidas pelo sistema operacional,
     elas são usadas no lugar da hora do sistema (consulte a função
     *note os.urandom(): 523. para detalhes sobre disponibilidade).

     If 'a' is an int, its absolute value is used directly.

     Com a versão 2 (o padrão), o objeto a *note str: 44c, *note bytes:
     1c2. ou *note bytearray: 2ea. é convertido em um objeto *note int:
     257. e todos os seus bits são usados.

     Com a versão 1 (fornecida para reproduzir sequências aleatórias de
     versões mais antigas do Python), o algoritmo para *note str: 44c. e
     *note bytes: 1c2. gera um intervalo mais restrito de sementes.

     Alterado na versão 3.2: Movido para o esquema da versão 2, que usa
     todos os bits em uma semente de strings.

     Alterado na versão 3.11: 'seed' deve ser um dos seguintes tipos:
     ‘None’, *note int: 257, *note float: 2f7, *note str: 44c, *note
     bytes: 1c2. ou *note bytearray: 2ea.

 -- Função: random.getstate ()

     Retorna um objeto capturando o estado interno atual do gerador.
     Este objeto pode ser passado para *note setstate(): 288e. para
     restaurar o estado.

 -- Função: random.setstate (state)

     'state' deveria ter sido obtido de uma chamada anterior para *note
     getstate(): 288d, e *note setstate(): 288e. restaura o estado
     interno do gerador para o que era no momento que *note getstate():
     288d. foi chamado.


File: python.info,  Node: Funções para bytes,  Next: Funções para inteiros,  Prev: Funções de contabilidade,  Up: random — Gera números pseudoaleatórios

5.9.6.2 Funções para bytes
..........................

 -- Função: random.randbytes (n)

     Gera 'n' bytes aleatórios.

     Este método não deve ser usado para gerar tokens de segurança.  Use
     *note secrets.token_bytes(): 2890.

     Adicionado na versão 3.9.


File: python.info,  Node: Funções para inteiros,  Next: Funções para sequências,  Prev: Funções para bytes,  Up: random — Gera números pseudoaleatórios

5.9.6.3 Funções para inteiros
.............................

 -- Função: random.randrange (stop)

 -- Função: random.randrange (start, stop[, step])

     Retorna um elemento selecionado aleatoriamente de ‘range(start,
     stop, step)’.

     Isso é aproximadamente equivalente a ‘choice(range(start, stop,
     step))’ mas provê suporte a intervalos arbitrariamente grandes e é
     otimizado para casos comuns.

     O padrão de argumento posicional corresponde à função *note
     range(): 94a.

     Argumentos nomeados não devem ser usados porque podem ser
     interpretados de maneiras inesperadas.  Por exemplo
     ‘randrange(start=100)’ é interpretado como ‘randrange(0, 100, 1)’.

     Alterado na versão 3.2: *note randrange(): 86f. é mais sofisticado
     em produzir valores igualmente distribuídos.  Anteriormente, usava
     um estilo como ‘int(random()*n)’, que poderia produzir
     distribuições ligeiramente desiguais.

     Alterado na versão 3.12: A conversão automática de tipos não
     inteiros não é mais suportada.  Chamadas como ‘randrange(10.0)’ e
     ‘randrange(Fraction(10, 1))’ agora levantam uma *note TypeError:
     2c3.

 -- Função: random.randint (a, b)

     Retorna um inteiro aleatório 'N' de forma que ‘a <= N <= b’.
     Apelido para ‘randrange(a, b+1)’.

 -- Função: random.getrandbits (k)

     Retorna um número inteiro Python não-negativo com bits aleatórios
     'k'.  Este método é fornecido com o gerador Mersenne Twister e
     alguns outros geradores também podem fornecê-lo como uma parte
     opcional da API. Quando disponível, *note getrandbits(): 1043.
     permite que *note randrange(): 86f. manipule intervalos
     arbitrariamente grandes.

     Alterado na versão 3.9: Este método agora aceita zero em 'k'.


File: python.info,  Node: Funções para sequências,  Next: Distribuições discretas,  Prev: Funções para inteiros,  Up: random — Gera números pseudoaleatórios

5.9.6.4 Funções para sequências
...............................

 -- Função: random.choice (seq)

     Retorna um elemento aleatório da sequência não vazia 'seq'.  Se
     'seq' estiver vazio, levanta *note IndexError: 157e.

 -- Função: random.choices (population, weights=None, *,
          cum_weights=None, k=1)

     Retorna uma lista do tamanho de 'k' de elementos escolhidos da
     'population' com substituição.  Se a 'population' estiver vazio,
     levanta *note IndexError: 157e.

     Se uma sequência 'weights' for especificada, as seleções serão
     feitas de acordo com os pesos relativos.  Alternativamente, se uma
     sequência 'cum_weights' for fornecida, as seleções serão feitas de
     acordo com os pesos cumulativos (talvez calculados usando *note
     itertools.accumulate(): a05.).  Por exemplo, os pesos relativos
     ‘[10, 5, 30, 5]’ são equivalentes aos pesos cumulativos ‘[10, 15,
     45, 50]’.  Internamente, os pesos relativos são convertidos em
     pesos acumulados antes de fazer seleções, portanto, fornecer pesos
     cumulativos economiza trabalho.

     Se nem 'weights' nem 'cum_weights' forem especificados, as seleções
     serão feitas com igual probabilidade.  Se uma sequência de pesos
     for fornecida, ela deverá ter o mesmo comprimento que a sequência
     'population'.  É um *note TypeError: 2c3. para especificar ambos os
     'weights' e 'cum_weights'.

     'weights' ou 'cum_weights' pode usar qualquer tipo numérico que
     interopera com os valores *note float: 2f7. retornados por *note
     random(): b8. (que inclui inteiros, pontos flutuantes, e frações
     mas exclui decimais).  Presume-se que pesos serão não-negativos e
     finitos.  Uma *note ValueError: 202. é levantada se todos os pesos
     forem zero.

     Para uma dada semente, a função *note choices(): ce6. com igual
     peso normalmente produz uma sequência diferente das chamadas
     repetidas para *note choice(): 1271.  O algoritmo usado por *note
     choice(): 1271. usa aritmética de ponto flutuante para consistência
     e velocidade internas.  O algoritmo usado por *note choice(): 1271.
     assume como padrão aritmética inteira com seleções repetidas para
     evitar pequenos vieses de erro de arredondamento.

     Adicionado na versão 3.6.

     Alterado na versão 3.9: Levanta uma *note ValueError: 202. se todos
     os pesos forem zero.

 -- Função: random.shuffle (x)

     Embaralha a sequência 'x' internamente.

     Para embaralhar uma sequência imutável e retornar uma nova lista
     embaralhada, use ‘sample(x, k=len(x))’.

     Observe que, mesmo para pequenos ‘len(x)’, o número total de
     permutações de 'x' pode crescer rapidamente maior que o período da
     maioria dos geradores de números aleatórios.  Isso implica que a
     maioria das permutações de uma longa sequência nunca pode ser
     gerada.  Por exemplo, uma sequência de comprimento 2080 é a maior
     que pode caber no período do gerador de números aleatórios Mersenne
     Twister.

     Alterado na versão 3.11: Removido o parâmetro opcional 'random'.

 -- Função: random.sample (population, k, *, counts=None)

     Retorna uma lista de comprimento 'k' de elementos únicos escolhidos
     na sequência populacional.  Usado para amostragem aleatória sem
     reposição.

     Retorna uma nova lista contendo elementos da população, mantendo a
     população original inalterada.  A lista resultante está na ordem de
     seleção, para que todas as subfatias também sejam amostras
     aleatórias válidas.  Isso permite que os vencedores do sorteio (a
     amostra) sejam divididos em grandes prêmios e vencedores de segundo
     lugar (as subfatias).

     Os membros da população não precisam ser *note hasheáveis: 610. ou
     únicos.  Se a população contiver repetições, cada ocorrência é uma
     seleção possível na amostra.

     Elementos repetidos podem ser especificados um de cada vez ou com o
     parâmetro somente-nomeado opcional 'count'.  Por exemplo,
     ‘sample(['red', 'blue'], counts=[4, 2], k=5)’ é equivalente a
     ‘sample(['red', 'red', 'red', 'red', 'blue', 'blue'], k=5)’.

     Para escolher uma amostra de um intervalo de números inteiros, use
     um objeto *note range(): 94a. como argumento.  Isso é especialmente
     rápido e com eficiência de espaço para amostragem de uma grande
     população: ‘sample(range(10000000), k=60)’.

     Se o tamanho da amostra for maior que o tamanho da população, uma
     *note ValueError: 202. é levantada.

     Alterado na versão 3.9: Adicionado o parâmetro 'counts'.

     Alterado na versão 3.11: 'population' deve ser uma sequência.  A
     conversão automática de conjuntos em listas não é mais suportada.


File: python.info,  Node: Distribuições discretas,  Next: Distribuições com valor real,  Prev: Funções para sequências,  Up: random — Gera números pseudoaleatórios

5.9.6.5 Distribuições discretas
...............................

A função a seguir gera uma distribuição discreta.

 -- Função: random.binomialvariate (n=1, p=0.5)

     Distribuição binomial(1).  Retorna o número de sucessos para 'n'
     tentativas independentes com a probabilidade de sucesso em cada
     tentativa sendo 'p':

     Matematicamente equivalente a:

          sum(random() < p for i in range(n))

     O número de tentativas 'n' deve ser um número inteiro não negativo.
     A probabilidade de sucesso 'p' deve estar entre ‘0.0 <= p <= 1.0’.
     O resultado é um número inteiro no intervalo ‘0 <= X <= n’.

     Adicionado na versão 3.12.

   ---------- Footnotes ----------

   (1) https://mathworld.wolfram.com/BinomialDistribution.html


File: python.info,  Node: Distribuições com valor real,  Next: Gerador alternativo,  Prev: Distribuições discretas,  Up: random — Gera números pseudoaleatórios

5.9.6.6 Distribuições com valor real
....................................

As funções a seguir geram distribuições específicas com valor real.  Os
parâmetros de função são nomeados após as variáveis correspondentes na
equação da distribuição, conforme usadas na prática matemática comum; a
maioria dessas equações pode ser encontrada em qualquer texto
estatístico.

 -- Função: random.random ()

     Retorna o próximo número aleatório de ponto flutuante no intervalo
     ‘0.0 <= X < 1.0’.

 -- Função: random.uniform (a, b)

     Retorna um número de ponto flutuante aleatório 'N' de forma que ‘a
     <= N <= b’ para ‘a <= b’ e ‘b <= N <= a’ para ‘b < a’.

     O valor final ‘b’ pode ou não ser incluído no intervalo dependendo
     do arredondamento de ponto flutuante na expressão ‘a + (b-a) *
     random()’.

 -- Função: random.triangular (low, high, mode)

     Retorna um número de ponto flutuante aleatório 'N' de forma que
     ‘low <= N <= high’ e com o 'mode' especificado entre esses limites.
     Os limites 'low' e 'high' são padronizados como zero e um.  O
     argumento 'mode' assume como padrão o ponto médio entre os limites,
     fornecendo uma distribuição simétrica.

 -- Função: random.betavariate (alpha, beta)

     Distribuição beta.  As condições nos parâmetros são ‘alpha > 0’ e
     ‘beta > 0’.  Os valores retornados variam entre 0 e 1.

 -- Função: random.expovariate (lambd=1.0)

     Distribuição exponencial.  'lambd' é 1.0 dividido pela média
     desejada.  Deve ser diferente de zero.  (O parâmetro seria chamado
     “lambda”, mas é uma palavra reservada em Python.)  Os valores
     retornados variam de 0 a infinito positivo se 'lambd' for positivo
     e de infinito negativo a 0 se 'lambd' for negativo.

     Alterado na versão 3.12: Adicionado o valor padrão para ‘lambd’.

 -- Função: random.gammavariate (alpha, beta)

     Distribuição gama.  ('Não' a função gama!)  Os parâmetros de forma
     e escala, 'alfa' e 'beta', devem ter valores positivos.  (As
     convenções de chamada variam e algumas fontes definem ‘beta’ como o
     inverso da escala).

     A função de distribuição de probabilidade é:

                    x ** (alpha - 1) * math.exp(-x / beta)
          pdf(x) =  --------------------------------------
                      math.gamma(alpha) * beta ** alpha

 -- Função: random.gauss (mu=0.0, sigma=1.0)

     Distribuição normal, também chamada de distribuição gaussiana.
     'mu' é a média e 'sigma' é o desvio padrão.  Isto é um pouco mais
     rápido que a função *note normalvariate(): 1963. definida abaixo.

     Nota sobre multithreading: quando duas threads chamam esta função
     simultaneamente, é possível que recebam o mesmo valor de retorno.
     Isso pode ser evitado de três maneiras.  1) Fazer com que cada
     thread use uma instância diferente do gerador de números
     aleatórios.  2) Colocar travas em todas as chamadas.  3) Usar a
     função mais lenta, mas segura para thread *note normalvariate():
     1963.

     Alterado na versão 3.11: 'mu' e 'sigma' agora têm argumentos
     padrão.

 -- Função: random.lognormvariate (mu, sigma)

     Distribuição log normal.  Se você usar o logaritmo natural dessa
     distribuição, obterá uma distribuição normal com média 'mu' e
     desvio padrão 'sigma'.  'mu' pode ter qualquer valor e 'sigma' deve
     ser maior que zero.

 -- Função: random.normalvariate (mu=0.0, sigma=1.0)

     Distribuição normal.  'mu' é a média e 'sigma' é o desvio padrão.

     Alterado na versão 3.11: 'mu' e 'sigma' agora têm argumentos
     padrão.

 -- Função: random.vonmisesvariate (mu, kappa)

     'mu' é o ângulo médio, expresso em radianos entre 0 e 2*'pi', e
     'kappa' é o parâmetro de concentração, que deve ser maior ou igual
     a zero.  Se 'kappa' for igual a zero, essa distribuição será
     reduzida para um ângulo aleatório uniforme no intervalo de 0 a
     2*'pi'.

 -- Função: random.paretovariate (alpha)

     Distribuição de Pareto.  'alpha' é o parâmetro de forma.

 -- Função: random.weibullvariate (alpha, beta)

     Distribuição Weibull.  'alpha' é o parâmetro de escala e 'beta' é o
     parâmetro de forma.


File: python.info,  Node: Gerador alternativo,  Next: Notas sobre reprodutibilidade,  Prev: Distribuições com valor real,  Up: random — Gera números pseudoaleatórios

5.9.6.7 Gerador alternativo
...........................

 -- Classe: random.Random ([seed])

     Classe que implementa o gerador de números pseudoaleatórios padrão
     usado pelo módulo *note random: b8.

     Alterado na versão 3.11: Anteriormente, o 'seed' poderia ser
     qualquer objeto hasheável.  Agora está limitado a: ‘None’, *note
     int: 257, *note float: 2f7, *note str: 44c, *note bytes: 1c2. ou
     *note bytearray: 2ea.

     Subclasses de ‘Random’ devem substituir os seguintes métodos se
     desejarem fazer uso de um gerador básico diferente:

      -- Método: seed (a=None, version=2)

          Substitua este método nas subclasses para personalizar o
          comportamento de *note seed(): 12b5. das instâncias de
          ‘Random’.

      -- Método: getstate ()

          Substitua este método nas subclasses para personalizar o
          comportamento de *note getstate(): 288d. das instâncias de
          ‘Random’.

      -- Método: setstate (state)

          Substitua este método nas subclasses para personalizar o
          comportamento de *note setstate(): 288e. das instâncias de
          ‘Random’.

      -- Método: random ()

          Substitua este método nas subclasses para personalizar o
          comportamento de *note random(): 748. das instâncias de
          ‘Random’.

     Opcionalmente, uma subclasse geradora personalizada também pode
     fornecer o seguinte método:

      -- Método: getrandbits (k)

          Substitua este método nas subclasses para personalizar o
          comportamento de *note getrandbits(): 1043. das instâncias de
          ‘Random’.

      -- Método: randbytes (n)

          Substitua este método nas subclasses para personalizar o
          comportamento de *note randbytes(): 1629. das instâncias de
          ‘Random’.

 -- Classe: random.SystemRandom ([seed])

     Classe que usa a função *note os.urandom(): 523. para gerar números
     aleatórios a partir de fontes fornecidas pelo sistema operacional.
     Não disponível em todos os sistemas.  Não depende do estado do
     software e as sequências não são reproduzíveis.  Assim, o método
     *note seed(): 12b5. não tem efeito e é ignorado.  Os métodos *note
     getstate(): 288d. e *note setstate(): 288e. levantam *note
     NotImplementedError: 228. se chamados.


File: python.info,  Node: Notas sobre reprodutibilidade,  Next: Exemplos<4>,  Prev: Gerador alternativo,  Up: random — Gera números pseudoaleatórios

5.9.6.8 Notas sobre reprodutibilidade
.....................................

Às vezes, é útil poder reproduzir as sequências fornecidas por um
gerador de números pseudoaleatórios.  Reutilizando um valor inicial, a
mesma sequência deve ser reproduzível de execução para execução, desde
que mais de uma thread não estejam em execução.

A maioria dos algoritmos e funções de propagação do módulo aleatório
está sujeita a alterações nas versões de Python, mas dois aspectos são
garantidos para não serem alterados:

   * Se um novo método de semeadura for adicionado, será oferecida um
     semeador compatível com versões anteriores.

   * O método *note random(): 28a1. do gerador continuará produzindo a
     mesma sequência quando o semeador compatível receber a mesma
     semente.


File: python.info,  Node: Exemplos<4>,  Next: Receitas<2>,  Prev: Notas sobre reprodutibilidade,  Up: random — Gera números pseudoaleatórios

5.9.6.9 Exemplos
................

Exemplos básicos:

     >>> random()                          # Ponto flutuante aleatório:  0.0 <= x < 1.0
     0.37444887175646646

     >>> uniform(2.5, 10.0)                # Ponto flutuante aleatório:  2.5 <= x <= 10.0
     3.1800146073117523

     >>> expovariate(1 / 5)                # Intervalo entre chegadas com médias de 5 segundos
     5.148957571865031

     >>> randrange(10)                     # Inteiro de 0 até 9 inclusivo
     7

     >>> randrange(0, 101, 2)              # Inteiro par entre 0 até 100 inclusivo
     26

     >>> choice(['win', 'lose', 'draw'])   # Um único elemento aleatório de uma sequência
     'draw'

     >>> deck = 'ace two three four'.split()
     >>> shuffle(deck)                     # Embaralha uma lista
     >>> deck
     ['four', 'two', 'ace', 'three']

     >>> sample([10, 20, 30, 40, 50], k=4) # Quatro amostras sem substitutos
     [40, 10, 50, 30]

Simulações:

     >>> # Seis giros da roleta (amostragem ponderada com substituição)
     >>> choices(['red', 'black', 'green'], [18, 18, 2], k=6)
     ['red', 'green', 'black', 'black', 'red', 'black']

     >>> # Distribui 20 cartas sem reposição de um baralho de
     >>> # 52 cartas e determine a proporção de cartas com
     >>> # valor dez: dez, valete, rainha ou rei.
     >>> deal = sample(['tens', 'low cards'], counts=[16, 36], k=20)
     >>> deal.count('tens') / 20
     0.15

     >>> # Estima a probabilidade de obter 5 ou mais caras em 7 giros
     >>> # de uma moeda viciada que cai em cara 60% das vezes.
     >>> sum(binomialvariate(n=7, p=0.6) >= 5 for i in range(10_000)) / 10_000
     0.4169

     >>> # Probabilidade da mediana de 5 amostras estar nos dois quartis do meio
     >>> def trial():
     ...     return 2_500 <= sorted(choices(range(10_000), k=5))[2] < 7_500
     ...
     >>> sum(trial() for i in range(10_000)) / 10_000
     0.7958

Exemplo de bootstrapping estatístico(1) usando reamostragem com
substituição para estimar um intervalo de confiança para a média de uma
amostra:

     # https://www.thoughtco.com/example-of-bootstrapping-3126155
     from statistics import fmean as mean
     from random import choices

     data = [41, 50, 29, 37, 81, 30, 73, 63, 20, 35, 68, 22, 60, 31, 95]
     means = sorted(mean(choices(data, k=len(data))) for i in range(100))
     print(f'The sample mean of {mean(data):.1f} has a 90% confidence '
           f'interval from {means[5]:.1f} to {means[94]:.1f}')

Exemplo de um teste de permutação de reamostragem(2) para determinar a
significância estatística ou valor-p(3) de uma diferença observada entre
os efeitos de uma droga em comparação com um placebo:

     # Exemplo de "Statistics is Easy" de Dennis Shasha e Manda Wilson
     from statistics import fmean as mean
     from random import shuffle

     drug = [54, 73, 53, 70, 73, 68, 52, 65, 65]
     placebo = [54, 51, 58, 44, 55, 52, 42, 47, 58, 46]
     observed_diff = mean(drug) - mean(placebo)

     n = 10_000
     count = 0
     combined = drug + placebo
     for i in range(n):
         shuffle(combined)
         new_diff = mean(combined[:len(drug)]) - mean(combined[len(drug):])
         count += (new_diff >= observed_diff)

     print(f'{n} label reshufflings produced only {count} instances with a difference')
     print(f'at least as extreme as the observed difference of {observed_diff:.1f}.')
     print(f'The one-sided p-value of {count / n:.4f} leads us to reject the null')
     print(f'hypothesis that there is no difference between the drug and the placebo.')

Simulação de tempos de chegada e entregas de serviços para uma fila
multisservidor:

     from heapq import heapify, heapreplace
     from random import expovariate, gauss
     from statistics import mean, quantiles

     average_arrival_interval = 5.6
     average_service_time = 15.0
     stdev_service_time = 3.5
     num_servers = 3

     waits = []
     arrival_time = 0.0
     servers = [0.0] * num_servers  # hora em que cada servidor fica disponível
     heapify(servers)
     for i in range(1_000_000):
         arrival_time += expovariate(1.0 / average_arrival_interval)
         next_server_available = servers[0]
         wait = max(0.0, next_server_available - arrival_time)
         waits.append(wait)
         service_duration = max(0.0, gauss(average_service_time, stdev_service_time))
         service_completed = arrival_time + wait + service_duration
         heapreplace(servers, service_completed)

     print(f'Mean wait: {mean(waits):.1f}   Max wait: {max(waits):.1f}')
     print('Quartiles:', [round(q, 1) for q in quantiles(waits)])

Ver também
..........

Statistics for Hackers(4) um tutorial em vídeo por Jake Vanderplas(5)
sobre análise estatística usando apenas alguns conceitos fundamentais,
incluindo simulação, amostragem, embaralhamento e validação cruzada.

Economics Simulation(6) uma simulação de um mercado por Peter Norvig(7)
que mostra o uso eficaz de muitas das ferramentas e distribuições
fornecidas por este módulo (gauss, uniform, sample, betavariate, choice,
triangular e randrange).

A Concrete Introduction to Probability (using Python)(8) um tutorial de
Peter Norvig(9) cobrindo os fundamentos da teoria das probabilidades,
como escrever simulações e como realizar análises de dados usando
Python.

   ---------- Footnotes ----------

   (1) https://pt.wikipedia.org/wiki/Bootstrapping_(estatística)

   (2) 
https://en.wikipedia.org/wiki/Resampling_(statistics)#Permutation_tests

   (3) https://pt.wikipedia.org/wiki/Valor-p

   (4) https://www.youtube.com/watch?v=Iq9DzN6mvYA

   (5) https://us.pycon.org/2016/speaker/profile/295/

   (6) https://nbviewer.org/url/norvig.com/ipython/Economics.ipynb

   (7) https://norvig.com/bio.html

   (8) https://nbviewer.org/url/norvig.com/ipython/Probability.ipynb

   (9) https://norvig.com/bio.html


File: python.info,  Node: Receitas<2>,  Next: Uso na linha de comando<2>,  Prev: Exemplos<4>,  Up: random — Gera números pseudoaleatórios

5.9.6.10 Receitas
.................

Estas receitas mostram como fazer seleções aleatórias de forma eficiente
a partir dos iteradores combinatórios no módulo *note itertools: 81.:

     import random

     def random_product(*iterables, repeat=1):
         "Random selection from itertools.product(*iterables, repeat=repeat)"
         pools = tuple(map(tuple, iterables)) * repeat
         return tuple(map(random.choice, pools))

     def random_permutation(iterable, r=None):
         "Random selection from itertools.permutations(iterable, r)"
         pool = tuple(iterable)
         r = len(pool) if r is None else r
         return tuple(random.sample(pool, r))

     def random_combination(iterable, r):
         "Random selection from itertools.combinations(iterable, r)"
         pool = tuple(iterable)
         n = len(pool)
         indices = sorted(random.sample(range(n), r))
         return tuple(pool[i] for i in indices)

     def random_combination_with_replacement(iterable, r):
         "Choose r elements with replacement.  Order the result to match the iterable."
         # Result will be in set(itertools.combinations_with_replacement(iterable, r)).
         pool = tuple(iterable)
         n = len(pool)
         indices = sorted(random.choices(range(n), k=r))
         return tuple(pool[i] for i in indices)

     def random_derangement(iterable):
         "Choose a permutation where no element stays in its original position."
         seq = tuple(iterable)
         if len(seq) < 2:
             if not seq:
                 return ()
             raise IndexError('No derangments to choose from')
         perm = list(range(len(seq)))
         start = tuple(perm)
         while True:
             random.shuffle(perm)
             if all(p != q for p, q in zip(start, perm)):
                 return tuple([seq[i] for i in perm])

O padrão de *note random(): 748. é retornar múltiplos de 2⁻⁵³ no
intervalo '0.0 ≤ x < 1.0'.  Todos esses números são espaçados
uniformemente e são representáveis exatamente como pontos flutuantes
Python.  No entanto, muitos outros pontos flutuantes representados nesse
intervalo não são seleções possíveis.  Por exemplo,
‘0.05954861408025609’ não é um múltiplo inteiro de 2⁻⁵³.

A receita a seguir tem uma abordagem diferente.  Todos os pontos
flutuantes no intervalo são seleções possíveis.  A mantissa vem de uma
distribuição uniforme de inteiros no intervalo '2⁵² ≤ mantissa < 2⁵³'.
O expoente vem de uma distribuição geométrica onde expoentes menores que
'-53' ocorrem com metade da frequência do próximo expoente maior.

     from random import Random
     from math import ldexp

     class FullRandom(Random):

         def random(self):
             mantissa = 0x10_0000_0000_0000 | self.getrandbits(52)
             exponent = -53
             x = 0
             while not x:
                 x = self.getrandbits(32)
                 exponent += x.bit_length() - 32
             return ldexp(mantissa, exponent)

Todas as *note distribuições reais valoradas: 2895. na classe usarão o
novo método:

     >>> fr = FullRandom()
     >>> fr.random()
     0.05954861408025609
     >>> fr.expovariate(0.25)
     8.87925541791544

A receita é conceitualmente equivalente a um algoritmo que escolhe entre
todos os múltiplos de 2⁻¹⁰⁷⁴ no intervalo '0.0 ≤ x < 1.0'.  Todos esses
números são espaçados uniformemente, mas a maioria deve ser arredondada
para o ponto flutuante Python representável mais próximo.  (O valor
2⁻¹⁰⁷⁴ é o menor ponto flutuante positivo não normalizado e é igual a
‘math.ulp(0.0)’.)

Ver também
..........

Generating Pseudo-random Floating-Point Values(1) um artigo de Allen B.
Downey descrevendo formas de gerar pontos flutuantes mais refinados do
que normalmente gerados por *note random(): 748.

   ---------- Footnotes ----------

   (1) https://allendowney.com/research/rand/downey07randfloat.pdf


File: python.info,  Node: Uso na linha de comando<2>,  Next: Exemplos na linha de comando,  Prev: Receitas<2>,  Up: random — Gera números pseudoaleatórios

5.9.6.11 Uso na linha de comando
................................

Adicionado na versão 3.13.

O módulo ‘random’ pode ser invocado como um script na linha de comando:

     python -m random [-h] [-c ESCOLHA [ESCOLHA ...] | -i N | -f N] [entrada ...]

As seguintes opções são aceitas:

 -- Option: -h, --help

     Mostra a mensagem de ajuda e sai.

 -- Option: -c CHOICE [CHOICE ...]
 -- Option: --choice CHOICE [CHOICE ...]

     Imprime uma escolha aleatória, usando *note choice(): 1271.

 -- Option: -i <N>
 -- Option: --integer <N>

     Imprime um inteiro aleatório entre 1 e N inclusive, usando *note
     randint(): 1270.

 -- Option: -f <N>
 -- Option: --float <N>

     Imprime um número de ponto flutuante aleatório entre 0 e N
     inclusive, usando *note uniform(): 2896.

Se nenhuma opção for fornecida, a saída dependerá da entrada:

   * String ou vários: mesmo que *note -choice: 28aa.

   * Inteiro mesmo que *note -integer: 28ac.

   * Ponto flutuante: mesmo que *note -float: 28ae.


File: python.info,  Node: Exemplos na linha de comando,  Prev: Uso na linha de comando<2>,  Up: random — Gera números pseudoaleatórios

5.9.6.12 Exemplos na linha de comando
.....................................

Aqui estão alguns exemplos da interface de linha de comando ‘random’:

     $ # Escolhe um aleatório
     $ python -m random egg bacon sausage spam "Lobster Thermidor aux crevettes with a Mornay sauce"
     Lobster Thermidor aux crevettes with a Mornay sauce

     $ # Inteiro aleatório
     $ python -m random 6
     6

     $ # Número de ponto flutuante aleatório
     $ python -m random 1.8
     1.7080016272295635

     $ # Com argumentos explícitos
     $ python  -m random --choice egg bacon sausage spam "Lobster Thermidor aux crevettes with a Mornay sauce"
     egg

     $ python -m random --integer 6
     3

     $ python -m random --float 1.8
     1.5666339105010318

     $ python -m random --integer 6
     5

     $ python -m random --float 6
     3.1942323316565915


File: python.info,  Node: statistics — Funções estatísticas,  Prev: random — Gera números pseudoaleatórios,  Up: Módulos Matemáticos e Numéricos

5.9.7 ‘statistics’ — Funções estatísticas
-----------------------------------------

Adicionado na versão 3.4.

'Código-fonte:' Lib/statistics.py(1)

__________________________________________________________________

Esse módulo fornece funções para o cálculo de estatísticas matemáticas
de dados numéricos (para valores do tipo *note Real: 232b.).

O módulo não tem a intenção de competir com bibliotecas de terceiros
como NumPy(2), SciPy(3), ou pacotes proprietários de estatísticas com
todos os recursos destinados a estatísticos profissionais como Minitab,
SAS e Matlab.  Ela destina-se ao nível de calculadoras gráficas e
científicas.

A menos que seja explicitamente indicado, essas funções suportam *note
int: 257, *note float: 2f7, *note Decimal: 29d. e *note Fraction: 1e7.
O uso com outros tipos (sejam numéricos ou não) não é atualmente
suportado.  Coleções com uma mistura de tipos também são indefinidas e
dependentes da implementação.  Se os seus dados de entrada consistem de
tipos misturados, você pode usar *note map(): 867. para garantir um
resultado consistente, por exemplo ‘map(float, dado_entrada)’.

Alguns conjuntos de dados usam valores ‘NaN’ (não um número) para
representar dados ausentes.  Como os NaNs possuem semântica de
comparação incomum, eles causam comportamentos surpreendentes ou
indefinidos nas funções estatísticas que classificam dados ou contam
ocorrências.  As funções afetadas são ‘median()’, ‘median_low()’,
‘median_high()’, ‘median_grouped()’, ‘mode()’, ‘multimode()’ e
‘quantiles()’.  Os valores ‘NaN’ devem ser removidos antes de chamar
estas funções:

     >>> from statistics import median
     >>> from math import isnan
     >>> from itertools import filterfalse

     >>> data = [20.7, float('NaN'),19.2, 18.3, float('NaN'), 14.4]
     >>> sorted(data)  # Isso tem um comportamento surpreendente
     [20.7, nan, 14.4, 18.3, 19.2, nan]
     >>> median(data)  # Este resultado é inesperado
     16.35

     >>> sum(map(isnan, data))    # Número de valores em falta
     2
     >>> clean = list(filterfalse(isnan, data))  # Remove valores NaN
     >>> clean
     [20.7, 19.2, 18.3, 14.4]
     >>> sorted(clean)  # A classificação agora funciona como esperado
     [14.4, 18.3, 19.2, 20.7]
     >>> median(clean)       # Este resultado é agora bem definido
     18.75

* Menu:

* Médias e medidas de valor central::
* Medidas de espalhamento::
* Estatísticas para relações entre duas entradas::
* Detalhes das funções::
* Exceções: Exceções<5>.
* Objetos NormalDist::
* Exemplos e receitas: Exemplos e receitas<2>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/statistics.py

   (2) https://numpy.org

   (3) https://scipy.org/


File: python.info,  Node: Médias e medidas de valor central,  Next: Medidas de espalhamento,  Up: statistics — Funções estatísticas

5.9.7.1 Médias e medidas de valor central
.........................................

Essas funções calculam a média ou o valor típico de uma população ou
amostra.

*note mean(): 6d2.          Média aritmética dos dados.
                            
                            
*note fmean(): a3e.         Média aritmética rápida de ponto flutuante, com ponderação
                            opcional.
                            
                            
*note geometric_mean(): a3f.Média geométrica dos dados.
                            
                            
*note harmonic_mean(): d02. Média harmônica dos dados.
                            
                            
*note kde(): 24a.           Estima a distribuição de densidade de probabilidade dos dados.
                            
                            
*note kde_random(): 24b.    Amostragem aleatória do PDF gerado por kde().
                            
                            
*note median(): 28b5.       Mediana (valor do meio) dos dados.
                            
                            
*note median_low(): 28b6.   Mediana inferior dos dados.
                            
                            
*note median_high(): 28b7.  Mediana superior dos dados.
                            
                            
*note median_grouped(): 28b8.Mediana (50º percentil) dos dados agrupados.
                            
                            
*note mode(): 28b9.         Moda (valor mais comum) de dados discretos ou nominais.
                            
                            
*note multimode(): 28ba.    Lista de modas (valores mais comuns) de dados discretos ou
                            nominais.
                            
                            
*note quantiles(): a40.     Divide os dados em intervalos com probabilidade igual.
                            


File: python.info,  Node: Medidas de espalhamento,  Next: Estatísticas para relações entre duas entradas,  Prev: Médias e medidas de valor central,  Up: statistics — Funções estatísticas

5.9.7.2 Medidas de espalhamento
...............................

Essas funções calculam o quanto a população ou amostra tendem a desviar
dos valores típicos ou médios.

*note pstdev(): 15d3.       Desvio padrão populacional dos dados.
                            
                            
*note pvariance(): 28bc.    Variância populacional dos dados.
                            
                            
*note stdev(): 6d4.         Desvio padrão amostral dos dados.
                            
                            
*note variance(): 6d3.      Variância amostral dos dados.
                            


File: python.info,  Node: Estatísticas para relações entre duas entradas,  Next: Detalhes das funções,  Prev: Medidas de espalhamento,  Up: statistics — Funções estatísticas

5.9.7.3 Estatísticas para relações entre duas entradas
......................................................

Essas funções calculam estatísticas sobre relações entre duas entradas.

*note covariance(): 833.      Covariância amostral para duas variáveis.
                              
                              
*note correlation(): 4bc.     Coeficientes de correlação de Pearson e Spearman.
                              
                              
*note linear_regression(): 834.Inclinação e intersecção para regressão linear simples.
                              


File: python.info,  Node: Detalhes das funções,  Next: Exceções<5>,  Prev: Estatísticas para relações entre duas entradas,  Up: statistics — Funções estatísticas

5.9.7.4 Detalhes das funções
............................

Nota: as funções não exigem que os dados estejam ordenados.  No entanto,
para conveniência do leitor, a maioria dos exemplos mostrará sequências
ordenadas.

 -- Função: statistics.mean (data)

     Retorna a média aritmética amostral de 'data' que pode ser uma
     sequência ou iterável.

     A média aritmética é a soma dos dados dividida pela quantidade de
     dados.  É comumente chamada apenas de “média”, apesar de ser uma
     das diversas médias matemáticas.  Ela representa uma medida da
     localização central dos dados.

     Se 'data' for vazio, uma exceção do tipo *note StatisticsError:
     28bf. será levantada.

     Alguns exemplos de uso:

          >>> mean([1, 2, 3, 4, 4])
          2.8
          >>> mean([-1.0, 2.5, 3.25, 5.75])
          2.625

          >>> from fractions import Fraction as F
          >>> mean([F(3, 7), F(1, 21), F(5, 3), F(1, 3)])
          Fraction(13, 21)

          >>> from decimal import Decimal as D
          >>> mean([D("0.5"), D("0.75"), D("0.625"), D("0.375")])
          Decimal('0.5625')

          Nota: A média é fortemente afetada por outliers(1) (valor
          atípico) e não é necessariamente um exemplo típico dos pontos
          de dados.  Para uma medida mais robusta, embora menos
          eficiente, de tendência central(2), veja *note median(): 28b5.

          A média amostral fornece uma estimativa não enviesada da média
          populacional verdadeira, ou seja, quando a média é obtida para
          todas as possíveis amostras, ‘mean(sample)’ converge para a
          média verdadeira de toda população.  Se 'data' representa toda
          população ao invés de uma amostra, então ‘mean(data)’ é
          equivalente a calcular a verdadeira média populacional μ.

 -- Função: statistics.fmean (data, weights=None)

     Converte valores em 'data' para ponto flutuante e calcula a média
     aritmética.

     Essa função executa mais rapidamente do que a função *note mean():
     6d2. e sempre retorna um *note float: 2f7.  'data' pode ser uma
     sequência ou iterável.  Se o conjunto de dados de entrada estiver
     vazio, levanta uma exceção *note StatisticsError: 28bf.

          >>> fmean([3.5, 4.0, 5.25])
          4.25

     A ponderação opcional é suportada.  Por exemplo, um professor
     atribui uma nota para um curso ponderando questionários em 20%,
     trabalhos de casa em 20%, um exame de meio de período em 30% e um
     exame final em 30%:

          >>> grades = [85, 92, 83, 91]
          >>> weights = [0.20, 0.20, 0.30, 0.30]
          >>> fmean(grades, weights)
          87.6

     Se 'weights' for fornecido, deve ter o mesmo comprimento que 'data'
     ou uma *note ValueError: 202. será levantada.

     Adicionado na versão 3.8.

     Alterado na versão 3.11: Adicionado suporte a 'weights'.

 -- Função: statistics.geometric_mean (data)

     Converte valores em 'data' para ponto flutuante e calcula a média
     geométrica.

     A média geométrica indica a tendência central ou valor típico de
     'data' usando o produto dos valores (em oposição à média aritmética
     que usa a soma deles).

     Levanta uma exceção *note StatisticsError: 28bf. se a entrada do
     conjunto de dados for vazia, contiver um zero ou um valor negativo.
     'data' pode ser uma sequência ou iterável.

     Nenhum esforço especial é feito para alcançar resultados exatos.
     (Mas, isso pode mudar no futuro).

          >>> round(geometric_mean([54, 24, 36]), 1)
          36.0

     Adicionado na versão 3.8.

 -- Função: statistics.harmonic_mean (data, weights=None)

     Retorna a média harmônica de 'data', uma sequência ou iterável de
     números de valor real.  Se 'weights' for omitido ou ‘None’, então a
     ponderação igual é presumida.

     A média harmônica é a recíproca da média arimética calculada pela
     função *note mean(): 6d2. dos recíprocos dos dados.  Por exemplo, a
     média harmônica de três valores 'a', 'b' e 'c' será equivalente a
     ‘3/(1/a + 1/b + 1/c)’.  Se um dos valores for zero, o resultado
     também será zero.

     A média harmônica é um tipo de média, uma medida de localização
     central dos dados.  Ela é geralmente apropriada quando se está
     calculando a média de razões e taxas; por exemplo, velocidades.

     Suponha que um carro viaje 10 km a 40 km/h, e em seguida viaje mais
     10 km a 60 km/h.  Qual é a velocidade média?

          >>> harmonic_mean([40, 60])
          48.0

     Suponha que um carro viaja a 40 km/h por 5 km e, quando o trânsito
     melhora, acelera para 60 km/h pelos 30 km restantes da viagem.
     Qual é a velocidade média?

          >>> harmonic_mean([40, 60], weights=[5, 30])
          56.0

     *note StatisticsError: 28bf. é levantada se 'data' for vazio,
     qualquer elemento for menor que zero, ou se a soma ponderada não
     for positiva.

     O algoritmo atual tem uma saída antecipada quando encontra um zero
     na entrada.  Isso significa que as entradas subsequentes não tem a
     validade testada.  (Esse comportamento pode mudar no futuro.)

     Adicionado na versão 3.6.

     Alterado na versão 3.10: Adicionado suporte a 'weights'.

 -- Função: statistics.kde (data, h, kernel='normal', *,
          cumulative=False)

     Estimativa de densidade por Kernel (KDE)(3): Cria uma função de
     densidade de probabilidade contínua ou uma função de distribuição
     cumulativa a partir de amostras discretas.

     A ideia básica é suavizar os dados usando uma função kernel(4).
     para ajudar a tirar inferências sobre uma população a partir de uma
     amostra.

     O grau de suavização é controlado pelo parâmetro de escala 'h', que
     é chamado de largura de banda.  Valores menores enfatizam
     características locais, enquanto valores maiores dão resultados
     mais suaves.

     O 'kernel' determina os pesos relativos dos pontos de dados da
     amostra.  Geralmente, a escolha do formato de kernel não importa
     tanto quanto o parâmetro de suavização de largura de banda mais
     influente.

     Os kernels que dão algum peso a cada ponto de amostra incluem
     'normal' ('gauss'), 'logistic' e 'sigmoid'.

     Os kernels que apenas dão peso aos pontos de amostra dentro da
     largura de banda incluem 'rectangular' ('uniform'), 'triangular',
     'parabolic' ('epanechnikov'), 'quartic' ('biweight'), 'triweight' e
     'cosine'.

     Se 'cumulative' for verdadeiro, retornará uma função de
     distribuição cumulativa.

     Uma *note StatisticsError: 28bf. será levantada se a sequência de
     dados em 'data' estiver vazia.

     A Wikipédia tem um exemplo(5) onde podemos usar *note kde(): 24a.
     para gerar e plotar uma função de densidade de probabilidade
     estimada a partir de uma pequena amostra:

          >>> sample = [-2.1, -1.3, -0.4, 1.9, 5.1, 6.2]
          >>> f_hat = kde(sample, h=1.5)
          >>> xarr = [i/100 for i in range(-750, 1100)]
          >>> yarr = [f_hat(x) for x in xarr]

     Os pontos em ‘xarr’ e ‘yarr’ podem ser usados para fazer um gráfico
     PDF:

[image src="python-figures/kde_example.png" alt="Gráfico de dispersão da função de densidade de probabilidade estimada."]


     Adicionado na versão 3.13.

 -- Função: statistics.kde_random (data, h, kernel='normal', *,
          seed=None)

     Retorna uma função que faz uma seleção aleatória da função de
     densidade de probabilidade estimada produzida por ‘kde(data, h,
     kernel)’.

     Fornecer uma 'seed' permite seleções reproduzíveis.  No futuro, os
     valores podem mudar um pouco conforme estimativas de funções de
     distribuição acumulada (CDF) inversas de kernel mais precisas forem
     implementadas.  'seed' pode ser um inteiro, float, str ou bytes.

     Uma *note StatisticsError: 28bf. será levantada se a sequência de
     dados em 'data' estiver vazia.

     Continuando o exemplo de *note kde(): 24a, podemos usar *note
     kde_random(): 24b. para gerar novas seleções aleatórias a partir de
     uma função de densidade de probabilidade estimada:

          >>> data = [-2.1, -1.3, -0.4, 1.9, 5.1, 6.2]
          >>> rand = kde_random(data, h=1.5, seed=8675309)
          >>> new_selections = [rand() for i in range(10)]
          >>> [round(x, 1) for x in new_selections]
          [0.7, 6.2, 1.2, 6.9, 7.0, 1.8, 2.5, -0.5, -1.8, 5.6]

     Adicionado na versão 3.13.

 -- Função: statistics.median (data)

     Retorna a mediana (o valor do meio) de dados numéricos, usando o
     método comum de “média entre os dois do meio”.  Se 'data' for
     vazio, é levantada uma exceção *note StatisticsError: 28bf.  'data'
     pode ser uma sequência ou um iterável.

     A mediana é uma medida robusta de localização central e é menos
     afetada por valores discrepantes.  Quando a quantidade de pontos de
     dados for ímpar, o valor de meio é retornado:

          >>> median([1, 3, 5])
          3

     Quando o número de elementos for par, a mediana é calculada
     tomando-se a média entre os dois valores no meio:

          >>> median([1, 3, 5, 7])
          4.0

     Isso serve quando seus dados forem discretos e você não se importa
     que a média possa não ser um valor que de fato ocorre nos seus
     dados.

     Caso os dados sejam ordinais (oferecem suporte para operações de
     ordenação) mas não são numéricos (não oferecem suporte para
     adição), considere usar a função *note median_low(): 28b6. ou *note
     median_high(): 28b7. no lugar.

 -- Função: statistics.median_low (data)

     Retorna a mediana inferior de dados numéricos.  Se 'data' for
     vazio, a exceção *note StatisticsError: 28bf. é levantada.  'data'
     pode ser uma sequência ou um iterável.

     A mediana inferior sempre é um membro do conjunto de dados.  Quando
     o número de elementos for ímpar, o valor intermediário é retornado.
     Se houver um número par de elementos, o menor entre os dois valores
     centrais é retornado.

          >>> median_low([1, 3, 5])
          3
          >>> median_low([1, 3, 5, 7])
          3

     Use a mediana inferior caso seus dados forem discretos e você
     prefira que a mediana seja um valor que de fato existe nos seus
     dados ao invés de um valor interpolado.

 -- Função: statistics.median_high (data)

     Retorna a mediana superior de dados numéricos.  Se 'data' for
     vazio, a exceção *note StatisticsError: 28bf. é levantada.  'data'
     pode ser uma sequência ou um iterável.

     A mediana superior sempre é um membro do conjunto de dados.  Quando
     o número de elementos for ímpar, o valor intermediário é retornado.
     Se houver um número par de elementos, o maior entre os dois valores
     centrais é retornado.

          >>> median_high([1, 3, 5])
          3
          >>> median_high([1, 3, 5, 7])
          5

     Use a mediana superior caso seus dados forem discretos e você
     prefira que a mediana seja um valor que de fato existe nos seus
     dados ao invés de um valor interpolado.

 -- Função: statistics.median_grouped (data, interval=1.0)

     Estima a mediana para dados numéricos que foram agrupados ou
     "binned"(6) em torno dos pontos médios de intervalos consecutivos
     de largura fixa.

     'data' pode ser qualquer iterável de dados numéricos com cada valor
     sendo exatamente o ponto médio de um bin.  Pelo menos um valor deve
     estar presente.

     'interval' é a largura de cada compartimento.

     Por exemplo, as informações demográficas podem ter sido resumidas
     em grupos etários consecutivos de dez anos, com cada grupo sendo
     representado pelos pontos médios de cinco anos dos intervalos:

          >>> from collections import Counter
          >>> demographics = Counter({
          ...    25: 172,   # 20 to 30 years old
          ...    35: 484,   # 30 to 40 years old
          ...    45: 387,   # 40 to 50 years old
          ...    55:  22,   # 50 to 60 years old
          ...    65:   6,   # 60 to 70 years old
          ... })
          ...

     O 50º percentil (mediana) é a 536ª pessoa de 1071 membros.  Essa
     pessoa está na faixa etária de 30 a 40 anos.

     A função regular *note median(): 28b5. iria presumir que todos na
     faixa etária tricenariana tinham exatamente 35 anos.  Uma suposição
     mais sustentável é que os 484 membros dessa faixa etária estão
     distribuídos uniformemente entre 30 e 40.  Para isso, usamos *note
     median_grouped(): 28b8.:

          >>> data = list(demographics.elements())
          >>> median(data)
          35
          >>> round(median_grouped(data, interval=10), 1)
          37.5

     O chamador é responsável por garantir que os pontos de dados sejam
     separados por múltiplos exatos de 'intervalo'.  Isso é essencial
     para obter um resultado correto.  A função não verifica essa
     pré-condição.

     As entradas podem ser qualquer tipo numérico que possa ser
     convertido para um ponto flutuante durante a etapa de interpolação.

 -- Função: statistics.mode (data)

     Retorna o valor mais comum dos dados discretos ou nominais em
     'data'.  A moda (quando existe) é o valor mais típico e serve como
     uma medida de localização central.

     Se existirem múltiplas modas com a mesma frequência, retorna a
     primeira encontrada em 'data'.  Se ao invés disso se desejar a
     menor ou a maior dentre elas, use ‘min(multimode(data))’ ou
     ‘max(multimode(data))’.  Se a entrada 'data' é vazia, a exceção
     *note StatisticsError: 28bf. é levantada.

     ‘mode’ presume que os dados são discretos e retorna um único valor.
     Esse é o tratamento padrão do conceito de moda normalmente ensinado
     nas escolas:

          >>> mode([1, 1, 2, 3, 3, 3, 3, 4])
          3

     A moda é única no sentido que é a única medida estatística nesse
     módulo que também se aplica a dados nominais (não-numéricos):

          >>> mode(["red", "blue", "blue", "red", "green", "red", "red"])
          'red'

     Somente entradas hasheáveis são suportadas.  Para manipular o tipo
     *note set: 5d9, considere fazer a conversão para *note frozenset:
     5da.  Para manipular o tipo *note list: 611, considere fazer a
     conversão para *note tuple: 370.  Para entradas mistas ou
     aninhadas, considere usar este algoritmo quadrático mais lento que
     depende apenas de testes de igualdade: ‘max(data, key=data.count)’.

     Alterado na versão 3.8: Agora lida com conjunto de dados
     multimodais retornando a primeira moda encontrada.  Anteriormente,
     ela levantava a exceção *note StatisticsError: 28bf. quando mais do
     que uma moda era encontrada.

 -- Função: statistics.multimode (data)

     Retorna uma lista dos valores mais frequentes na ordem em que eles
     foram encontrados em 'data'.  Irá retornar mais do que um resultado
     se houver múltiplas modas ou uma lista vazia se 'data' for vazio.

          >>> multimode('aabbbbccddddeeffffgg')
          ['b', 'd', 'f']
          >>> multimode('')
          []

     Adicionado na versão 3.8.

 -- Função: statistics.pstdev (data, mu=None)

     Retorna o desvio padrão populacional (a raiz quadrada da variância
     populacional).  Veja os argumentos e outros detalhes em *note
     pvariance(): 28bc.

          >>> pstdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
          0.986893273527251

 -- Função: statistics.pvariance (data, mu=None)

     Retorna a variância populacional de 'data', que deve ser uma
     sequência ou iterável não-vazio de números reais.  A variância, o
     segundo momento estatístico a partir da média, é uma medida da
     variabilidade (espalhamento ou dispersão) dos dados.  Uma variância
     grande indica que os dados são espalhados; uma variância menor
     indica que os dados estão agrupado em volta da média.

     Se o segundo argumento opcional 'mu' for fornecido, ele deve ser a
     média da 'população' dos dados em 'data'.  Ele também pode ser
     usado para calcular o segundo momento em torno de um ponto que não
     é a média.  Se estiver faltando ou for ‘None’ (o padrão), a média
     aritmética é calculada automaticamente.

     Use essa função para calcular a variância de toda a população.
     Para estimar a variância de uma amostra, a função *note variance():
     6d3. costuma ser uma escolha melhor.

     Levanta *note StatisticsError: 28bf. se 'data' for vazio.

     Exemplos:

          >>> data = [0.0, 0.25, 0.25, 1.25, 1.5, 1.75, 2.75, 3.25]
          >>> pvariance(data)
          1.25

     Se você já calculou a média dos seus dados, você pode passar o
     valor no segundo argumento opcional 'mu' para evitar recálculos:

          >>> mu = mean(data)
          >>> pvariance(data, mu)
          1.25

     Decimais e frações são suportadas:

          >>> from decimal import Decimal as D
          >>> pvariance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")])
          Decimal('24.815')

          >>> from fractions import Fraction as F
          >>> pvariance([F(1, 4), F(5, 4), F(1, 2)])
          Fraction(13, 72)

          Nota: Quando os dados de entrada representarem toda a
          população, ele retorna a variância populacional σ².  Se em vez
          disso, amostras forem usadas, então a variância amostral
          enviesada s², também conhecida como variância com N graus de
          liberdade é retornada.

          Se de alguma forma você souber a verdadeira média populacional
          μ, você pode usar essa função para calcular a variância de uma
          amostra, fornecendo a média populacional conhecida como
          segundo argumento.  Caso seja fornecido um conjunto de
          amostras aleatórias da população, o resultado será um
          estimador não enviesado da variância populacional.

 -- Função: statistics.stdev (data, xbar=None)

     Retorna o desvio padrão amostral (a raiz quadrada da variância
     amostral).  Veja *note variance(): 6d3. para argumentos e outros
     detalhes.

          >>> stdev([1.5, 2.5, 2.5, 2.75, 3.25, 4.75])
          1.0810874155219827

 -- Função: statistics.variance (data, xbar=None)

     Retorna a variância amostral de 'data', que deve ser um iterável
     com pelo menos dois números reais.  Variância, ou o segundo momento
     estatístico a partir da média, é uma medida de variabilidade
     (espalhamento ou dispersão) dos dados.  Uma variância grande indica
     que os dados são espalhados, uma variância menor indica que os
     dados estão agrupados em volta da média.

     Se o segundo argumento opcional 'xbar' for dado, ele deve a média
     'sample' de 'data'.  Se ele não estiver presente ou for ‘None’
     (valor padrão), a média é automaticamente calculada.

     Use essa função quando seus dados representarem uma amostra da
     população.  Para calcular a variância de toda população veja *note
     pvariance(): 28bc.

     Levanta a exceção *note StatisticsError: 28bf. se 'data' tiver
     menos do que dois valores.

     Exemplos:

          >>> data = [2.75, 1.75, 1.25, 0.25, 0.5, 1.25, 3.5]
          >>> variance(data)
          1.3720238095238095

     Se você já calculou a média amostral dos seus dados, você pode
     passar o valor no segundo argumento opcional 'xbar' para evitar
     recálculos:

          >>> m = mean(data)
          >>> variance(data, m)
          1.3720238095238095

     Essa função não verifica se você passou a média verdadeira como
     'xbar'.  Usar valores arbitrários para 'xbar' pode levar a
     resultados inválidos ou impossíveis.

     Decimais e frações são suportados.

          >>> from decimal import Decimal as D
          >>> variance([D("27.5"), D("30.25"), D("30.25"), D("34.5"), D("41.75")])
          Decimal('31.01875')

          >>> from fractions import Fraction as F
          >>> variance([F(1, 6), F(1, 2), F(5, 3)])
          Fraction(67, 108)

          Nota: Essa é a variância amostral s² com a correção de Bessel,
          também conhecida como variância com N-1 graus de liberdade.
          Desde que os pontos de dados sejam representativos (por
          exemplo, independentes e distribuídos de forma idêntica), o
          resultado deve ser uma estimativa não enviesada da verdadeira
          variação populacional.

          Caso você de alguma forma saiba a verdadeira média
          populacional μ você deveria passar para a função *note
          pvariance(): 28bc. como o parâmetro 'mu' para obter a
          variância da amostra.

 -- Função: statistics.quantiles (data, *, n=4, method='exclusive')

     Divide 'data' em 'n' intervalos contínuos com igual probabilidade.
     Retorna uma lista de ‘n - 1’ pontos de corte separando os
     intervalos.

     Defina 'n' como 4 para quartis (o padrão).  Defina 'n' como 10 para
     decis.  Defina 'n' como 100 para percentis, o que fornece os 99
     pontos de corte que separam 'data' em 100 grupos de tamanhos
     iguais.  Levanta a exceção *note StatisticsError: 28bf. se 'n' não
     for pelo menos 1.

     'data' pode ser qualquer iterável contendo dados amostrais.  Para
     resultados significativos, a quantidade de dados em 'data' deve ser
     maior do que 'n'.  Levanta a exceção *note StatisticsError: 28bf.
     se não houver pelo menos um ponto de dados.

     Os pontos de corte são linearmente interpolados a partir dos dois
     pontos mais próximos.  Por exemplo, se um ponto de corte cair em um
     terço da distância entre dois valores, ‘100’ e ‘112’, o ponto de
     corte será avaliado como ‘104’.

     O 'method' para computar quantis pode variar dependendo se 'data'
     incluir ou excluir os menores e maiores valores possíveis da
     população.

     O valor padrão do parâmetro 'method' é “exclusive” e é usado para
     dados amostrados de uma população que pode ter valores mais
     extremos do que os encontrados nas amostras.  A porção da população
     que fica abaixo do 'i-ésimo' item de 'm' pontos ordenados é
     calculada como ‘i / (m + 1)’.  Dados nove valores, o método os
     ordena e atribui a eles os seguintes percentis: 10%, 20%, 30%, 40%,
     50%, 60%, 70%, 80%, 90%.

     Definimos o parâmetro 'method' para “inclusive” para descrever
     dados da população ou para amostras que são conhecidas por incluir
     os valores mais extremos da população.  O mínimo valor em 'data' é
     tratado como o percentil 0 e o máximo valor é tratado como
     percentil 100.  A porção da população que fica abaixo do 'i-ésimo'
     item de 'm' pontos ordenados é calculada como ‘(i - 1) / (m - 1)’.
     Dados 11 valores, o método os ordena e atribui a eles os seguintes
     percentis: 0%, 10%, 20%, 30%, 40%, 50%, 60%, 70%, 80%, 90%, 100%.

          # Pontos de corte de decil para dados amostrados empiricamente
          >>> data = [105, 129, 87, 86, 111, 111, 89, 81, 108, 92, 110,
          ...         100, 75, 105, 103, 109, 76, 119, 99, 91, 103, 129,
          ...         106, 101, 84, 111, 74, 87, 86, 103, 103, 106, 86,
          ...         111, 75, 87, 102, 121, 111, 88, 89, 101, 106, 95,
          ...         103, 107, 101, 81, 109, 104]
          >>> [round(q, 1) for q in quantiles(data, n=10)]
          [81.0, 86.2, 89.0, 99.4, 102.5, 103.6, 106.0, 109.8, 111.0]

     Adicionado na versão 3.8.

     Alterado na versão 3.13: Não levanta mais uma exceção para uma
     entrada com apenas um único ponto de dados.  Isso permite que
     estimativas de quantil sejam construídas um ponto de amostra por
     vez, tornando-se gradualmente mais refinadas com cada novo ponto de
     dados.

 -- Função: statistics.covariance (x, y, /)

     Retorna a covariância da amostra de duas entradas 'x' e 'y'.
     Covariância é uma medida da variabilidade conjunta de duas
     entradas.

     Ambas as entradas devem ter o mesmo comprimento (não menos que
     dois), caso contrário, *note StatisticsError: 28bf. será levantada.

     Exemplos:

          >>> x = [1, 2, 3, 4, 5, 6, 7, 8, 9]
          >>> y = [1, 2, 3, 1, 2, 3, 1, 2, 3]
          >>> covariance(x, y)
          0.75
          >>> z = [9, 8, 7, 6, 5, 4, 3, 2, 1]
          >>> covariance(x, z)
          -7.5
          >>> covariance(z, x)
          -7.5

     Adicionado na versão 3.10.

 -- Função: statistics.correlation (x, y, /, *, method='linear')

     Retorna o coeficiente de correlação de Pearson(7) para duas
     entradas.  O coeficiente de correlação de Pearson 'r' assume
     valores entre -1 e +1.  Ele mede a força e a direção de uma relação
     linear.

     Se 'method' for “ranked”, calcula coeficiente de correlação de
     classificação de Spearman(8) para duas entradas.  Os dados são
     substituídos por classificações.  Os empates são calculados em
     média para que valores iguais recebam a mesma classificação.  O
     coeficiente resultante mede a força de um relacionamento
     monotônico.

     O coeficiente de correlação de Spearman é apropriado para dados
     ordinais ou para dados contínuos que não atendem ao requisito de
     proporção linear para o coeficiente de correlação de Pearson.

     Ambas as entradas devem ter o mesmo comprimento (não menos que
     dois) e não precisam ser constantes, caso contrário, *note
     StatisticsError: 28bf. será levantada.

     Exemplo com leis de Kepler do movimento planetário(9):

          >>> # Mercúrio, Venus, Terra, Marte, Jupiter, Saturno, Urano e Netuno
          >>> orbital_period = [88, 225, 365, 687, 4331, 10_756, 30_687, 60_190]    # dias
          >>> dist_from_sun = [58, 108, 150, 228, 778, 1_400, 2_900, 4_500] # milhões de km

          >>> # Mostra que existe uma perfeita relação monótona
          >>> correlation(orbital_period, dist_from_sun, method='ranked')
          1.0

          >>> # Observe que uma relação linear é imperfeita
          >>> round(correlation(orbital_period, dist_from_sun), 4)
          0.9882

          >>> # Demonstra a terceira lei de Kepler: Há uma correlação linear
          >>> # entre o quadrado do período orbital e o cubo da
          >>> # distância a partir do sol.
          >>> period_squared = [p * p for p in orbital_period]
          >>> dist_cubed = [d * d * d for d in dist_from_sun]
          >>> round(correlation(period_squared, dist_cubed), 4)
          1.0

     Adicionado na versão 3.10.

     Alterado na versão 3.12: Adicionado suporte para o coeficiente de
     correlação de classificação de Spearman.

 -- Função: statistics.linear_regression (x, y, /, *,
          proportional=False)

     Retorna a inclinação e a interceptação dos parâmetros de regressão
     linear simples(10) estimados usando mínimos quadrados ordinários.
     A regressão linear simples descreve a relação entre uma variável
     independente 'x' e uma variável dependente 'y' em termos desta
     função linear:

          'y = slope * x + intercept + noise'

     onde ‘slope’ e ‘intercept’ são os parâmetros de regressão que são
     estimados, e ‘noise’ representa a variabilidade dos dados que não
     foi explicada pela regressão linear (é igual à diferença entre os
     valores previstos e reais da variável dependente).

     Ambas as entradas devem ter o mesmo comprimento (não menos que
     dois) e a variável independente 'x' não pode ser constante; caso
     contrário, um *note StatisticsError: 28bf. será levantada.

     Por exemplo, podemos usar as datas de lançamento dos filmes do
     Monty Python(11) para prever o número cumulativo de filmes do Monty
     Python que teriam sido produzidos até 2019, supondo que eles
     tivessem mantido o ritmo.

          >>> year = [1971, 1975, 1979, 1982, 1983]
          >>> films_total = [1, 2, 3, 4, 5]
          >>> slope, intercept = linear_regression(year, films_total)
          >>> round(slope * 2019 + intercept)
          16

     Se 'proportional' for verdadeiro, a variável independente 'x' e a
     variável dependente 'y' são assumidas como diretamente
     proporcionais.  Os dados são ajustados a uma linha que passa pela
     origem.  Como o 'intercept' sempre será 0,0, a função linear
     subjacente simplifica para:

          'y = slope * x + noise'

     Continuando o exemplo de *note correlation(): 4bc, vamos ver o quão
     bem um modelo baseado em planetas principais pode prever as
     distâncias orbitais de planetas anões:

          >>> model = linear_regression(period_squared, dist_cubed, proportional=True)
          >>> slope = model.slope

          >>> # Planetas anões:   Pluto,  Eris,    Makemake, Haumea, Ceres
          >>> orbital_periods = [90_560, 204_199, 111_845, 103_410, 1_680]  # dias
          >>> predicted_dist = [math.cbrt(slope * (p * p)) for p in orbital_periods]
          >>> list(map(round, predicted_dist))
          [5912, 10166, 6806, 6459, 414]

          >>> [5_906, 10_152, 6_796, 6_450, 414]  # distância real em milhões de km
          [5906, 10152, 6796, 6450, 414]

     Adicionado na versão 3.10.

     Alterado na versão 3.11: Adicionado suporte a 'proportional'.

   ---------- Footnotes ----------

   (1) https://pt.wikipedia.org/wiki/Outlier

   (2) https://pt.m.wikipedia.org/wiki/Tendência_central

   (3) 
https://www.itm-conferences.org/articles/itmconf/pdf/2018/08/itmconf_sam2018_00037.pdf

   (4) https://en.wikipedia.org/wiki/Kernel_(statistics)

   (5) 
hhttps://pt.wikipedia.org/wiki/Estimativa_de_densidade_kernel#Exemplo

   (6) https://en.wikipedia.org/wiki/Data_binning

   (7) https://en.wikipedia.org/wiki/Pearson_correlation_coefficient

   (8) 
https://en.wikipedia.org/wiki/Spearman%27s_rank_correlation_coefficient

   (9) https://en.wikipedia.org/wiki/Kepler's_laws_of_planetary_motion

   (10) https://en.wikipedia.org/wiki/Simple_linear_regression

   (11) https://en.wikipedia.org/wiki/Monty_Python#Films


File: python.info,  Node: Exceções<5>,  Next: Objetos NormalDist,  Prev: Detalhes das funções,  Up: statistics — Funções estatísticas

5.9.7.5 Exceções
................

Uma única exceção é definida:

 -- Exceção: statistics.StatisticsError

     Subclasse de *note ValueError: 202. para exceções relacionadas a
     estatísticas.


File: python.info,  Node: Objetos NormalDist,  Next: Exemplos e receitas<2>,  Prev: Exceções<5>,  Up: statistics — Funções estatísticas

5.9.7.6 Objetos ‘NormalDist’
............................

*note NormalDist: a41. é uma ferramenta para criar e manipular
distribuições normais de uma variável aleatória(1).  É uma classe que
trata a média e o desvio padrão das medições de dados como uma entidade
única.

Distribuições normais surgem do Teorema Central do Limite(2) e possuem
uma gama de aplicações em estatísticas.

 -- Classe: statistics.NormalDist (mu=0.0, sigma=1.0)

     Retorna um novo objeto 'NormalDist' onde 'mu' representa a média
     aritmética(3) e 'sigma' representa o desvio padrão(4).

     Se 'sigma' for negativo, levanta a exceção *note StatisticsError:
     28bf.

      -- Atributo: mean

          Uma propriedade somente leitura para a média aritmética(5) de
          uma distribuição normal.

      -- Atributo: median

          Uma propriedade somente leitura para a mediana(6) de uma
          distribuição normal.

      -- Atributo: mode

          Uma propriedade somente leitura para a moda(7) de uma
          distribuição normal.

      -- Atributo: stdev

          Uma propriedade somente leitura para o desvio padrão(8) de uma
          distribuição normal.

      -- Atributo: variance

          Uma propriedade somente leitura para a variância(9) de uma
          distribuição normal.  Igual ao quadrado do desvio padrão.

      -- Método: classmethod from_samples (data)

          Faz uma instância da distribuição normal com os parâmetros
          'mu' e 'sigma' estimados a partir de 'data' usando *note
          fmean(): a3e. e *note stdev(): 6d4.

          'data' pode ser qualquer *note iterável: 1268. e deve
          consistir de valores que pode ser convertidos para o tipo
          *note float: 2f7.  Se 'data' não contém pelo menos dois
          elementos, levanta a exceção *note StatisticsError: 28bf.
          porque é preciso pelo menos um ponto para estimar um valor
          central e pelo menos dois pontos para estimar a dispersão.

      -- Método: samples (n, *, seed=None)

          Gera 'n' amostras aleatórias para uma dada média e desvio
          padrão.  Retorna uma *note list: 611. de valores *note float:
          2f7.

          Se o parâmetro 'seed' for fornecido, cria uma nova instância
          do gerador de número aleatório subjacente.  Isso é útil para
          criar resultados reproduzíveis, mesmo em um contexto
          multithreading.

          Alterado na versão 3.13.

          Alterado para um algoritmo mais rápido.  Para reproduzir
          amostras de versões anteriores, use *note random.seed(): 12b5.
          e *note random.gauss(): 1962.

      -- Método: pdf (x)

          Usando uma função densidade de probabilidade (fdp)(10),
          calcula a probabilidade relativa que uma variável aleatória
          'X' estará perto do valor dado 'x'.  Matematicamente, é o
          limite da razão ‘P(x <= X < x+dx) / dx’ quando 'dx' se
          aproxima de zero.

          A probabilidade relativa é calculada como a probabilidade de
          uma amostra ocorrer em um intervalo estreito dividida pela
          largura do intervalo (daí a palavra “densidade”).  Como a
          probabilidade é relativa a outros pontos, seu valor pode ser
          maior que ‘1.0’.

      -- Método: cdf (x)

          Usando uma função distribuição acumulada (fda)(11), calcula a
          probabilidade de que uma variável aleatória 'X' seja menor ou
          igual a 'x'.  Matematicamente, é representada da seguinte
          maneira: ‘P(X <= x)’.

      -- Método: inv_cdf (p)

          Calcula a função distribuição acumulada inversa, também
          conhecida como função quantil(12) ou o função ponto
          percentual(13).  Matematicamente, é representada como ‘x : P(X
          <= x) = p’.

          Encontra o valor 'x' da variável aleatória 'X' de tal forma
          que a probabilidade da variável ser menor ou igual a esse
          valor seja igual à probabilidade dada 'p'.

      -- Método: overlap (other)

          Mede a concordância entre duas distribuições de probabilidade
          normais.  Retorna um valor entre 0,0 e 1,0 fornecendo a área
          de sobreposição para as duas funções de densidade de
          probabilidade(14).

      -- Método: quantiles (n=4)

          Divide a distribuição normal em 'n' intervalos contínuos com
          probabilidade igual.  Retorna uma lista de (n - 1) pontos de
          corte separando os intervalos.

          Defina 'n' como 4 para quartis (o padrão).  Defina 'n' como 10
          para decis.  Defina 'n' como 100 para percentis, o que dá os
          99 pontos de corte que separam a distribuição normal em 100
          grupos de tamanhos iguais.

      -- Método: zscore (x)

          Calcula a Pontuação Padrão (z-score)(15) descrevendo 'x' em
          termos do número de desvios padrão acima ou abaixo da média da
          distribuição normal: ‘(x - mean) / stdev’.

          Adicionado na versão 3.9.

     Instâncias de *note NormalDist: a41. suportam adição, subtração,
     multiplicação e divisão por uma constante.  Essas operações são
     usadas para translação e dimensionamento.  Por exemplo:

          >>> temperature_february = NormalDist(5, 2.5)             # Celsius
          >>> temperature_february * (9/5) + 32                     # Fahrenheit
          NormalDist(mu=41.0, sigma=4.5)

     A divisão de uma constante por uma instância de *note NormalDist:
     a41. não é suportada porque o resultado não seria distribuído
     normalmente.

     Uma vez que distribuições normais surgem de efeitos aditivos de
     variáveis independentes, é possível adicionar e subtrair duas
     variáveis aleatórias independentes normalmente distribuídas(16)
     representadas como instâncias de *note NormalDist: a41.  Por
     exemplo:

          >>> birth_weights = NormalDist.from_samples([2.5, 3.1, 2.1, 2.4, 2.7, 3.5])
          >>> drug_effects = NormalDist(0.4, 0.15)
          >>> combined = birth_weights + drug_effects
          >>> round(combined.mean, 1)
          3.1
          >>> round(combined.stdev, 1)
          0.5

     Adicionado na versão 3.8.

   ---------- Footnotes ----------

   (1) https://pt.wikipedia.org/wiki/Variável_aleatória

   (2) https://pt.wikipedia.org/wiki/Teorema_central_do_limite

   (3) https://pt.wikipedia.org/wiki/Média_aritmética

   (4) https://pt.wikipedia.org/wiki/Desvio_padrão

   (5) https://pt.wikipedia.org/wiki/Média_aritmética

   (6) https://pt.wikipedia.org/wiki/Mediana_(estatística)

   (7) https://pt.wikipedia.org/wiki/Moda_(estatística)

   (8) https://pt.wikipedia.org/wiki/Desvio_padrão

   (9) https://pt.wikipedia.org/wiki/Variáncia

   (10) https://pt.wikipedia.org/wiki/Função_densidade

   (11) https://pt.wikipedia.org/wiki/Função_distribuição_acumulada

   (12) https://pt.wikipedia.org/wiki/Quantil

   (13) 
https://web.archive.org/web/20190203145224/https://www.statisticshowto.datasciencecentral.com/inverse-distribution-function/

   (14) https://www.rasch.org/rmt/rmt101r.htm

   (15) 
https://www.statisticshowto.com/probability-and-statistics/z-score/

   (16) 
https://en.wikipedia.org/wiki/Sum_of_normally_distributed_random_variables


File: python.info,  Node: Exemplos e receitas<2>,  Prev: Objetos NormalDist,  Up: statistics — Funções estatísticas

5.9.7.7 Exemplos e receitas
...........................

* Menu:

* Problemas clássicos de probabilidade::
* Entradas de Monte Carlo para simulações::
* Aproximação de distribuições binomiais::
* Classificador bayesiano ingênuo::


File: python.info,  Node: Problemas clássicos de probabilidade,  Next: Entradas de Monte Carlo para simulações,  Up: Exemplos e receitas<2>

5.9.7.8 Problemas clássicos de probabilidade
............................................

*note NormalDist: a41. facilmente resolve problemas de probabilidade
clássicos.

Por exemplo, considerando os dados históricos para exames SAT(1)
mostrando que as pontuações são normalmente distribuídas com média de
1060 e desvio padrão de 195, determine o percentual de alunos com
pontuações de teste entre 1100 e 1200, após arredondar para o número
inteiro mais próximo:

     >>> sat = NormalDist(1060, 195)
     >>> fraction = sat.cdf(1200 + 0.5) - sat.cdf(1100 - 0.5)
     >>> round(fraction * 100.0, 1)
     18.4

Encontrar os quartis(2) e decis(3) para as pontuações SAT:

     >>> list(map(round, sat.quantiles()))
     [928, 1060, 1192]
     >>> list(map(round, sat.quantiles(n=10)))
     [810, 896, 958, 1011, 1060, 1109, 1162, 1224, 1310]

   ---------- Footnotes ----------

   (1) https://nces.ed.gov/programs/digest/d17/tables/dt17_226.40.asp

   (2) https://pt.wikipedia.org/wiki/Quartil

   (3) https://pt.wikipedia.org/wiki/Decil


File: python.info,  Node: Entradas de Monte Carlo para simulações,  Next: Aproximação de distribuições binomiais,  Prev: Problemas clássicos de probabilidade,  Up: Exemplos e receitas<2>

5.9.7.9 Entradas de Monte Carlo para simulações
...............................................

Para estimar a distribuição de um modelo que não seja fácil de resolver
analiticamente, *note NormalDist: a41. pode gerar amostras de entrada
para uma simulação Monte Carlo(1):

     >>> def model(x, y, z):
     ...     return (3*x + 7*x*y - 5*y) / (11 * z)
     ...
     >>> n = 100_000
     >>> X = NormalDist(10, 2.5).samples(n, seed=3652260728)
     >>> Y = NormalDist(15, 1.75).samples(n, seed=4582495471)
     >>> Z = NormalDist(50, 1.25).samples(n, seed=6582483453)
     >>> quantiles(map(model, X, Y, Z))
     [1.4591308524824727, 1.8035946855390597, 2.175091447274739]

   ---------- Footnotes ----------

   (1) https://pt.wikipedia.org/wiki/Método_de_Monte_Carlo


File: python.info,  Node: Aproximação de distribuições binomiais,  Next: Classificador bayesiano ingênuo,  Prev: Entradas de Monte Carlo para simulações,  Up: Exemplos e receitas<2>

5.9.7.10 Aproximação de distribuições binomiais
...............................................

As distribuições normais podem ser usadas para aproximar distribuições
binomiais(1) quando o tamanho da amostra é grande e quando a
probabilidade de um teste bem-sucedido é próximo a 50%.

Por exemplo, uma conferência de código aberto tem 750 participantes e
duas salas com capacidade para 500 pessoas.  Há uma palestra sobre
Python e outra sobre Ruby.  Em conferências anteriores, 65% dos
participantes preferiram ouvir palestras sobre Python.  Supondo que as
preferências da população não tenham mudado, qual é a probabilidade da
sala de Python permanecer dentro de seus limites de capacidade?

     >>> n = 750             # Tamanho da amostra
     >>> p = 0.65            # Preferência para Python
     >>> q = 1.0 - p         # Preferência para Ruby
     >>> k = 500             # Capacidade

     >>> # Aproximação usando a distribuição normal cumulativa
     >>> from math import sqrt
     >>> round(NormalDist(mu=n*p, sigma=sqrt(n*p*q)).cdf(k + 0.5), 4)
     0.8402

     >>> # Solução exata usando a distribuição binomial cumulativa
     >>> from math import comb, fsum
     >>> round(fsum(comb(n, r) * p**r * q**(n-r) for r in range(k+1)), 4)
     0.8402

     >>> # Aproximação usando uma simulação
     >>> from random import seed, binomialvariate
     >>> seed(8675309)
     >>> mean(binomialvariate(n, p) <= k for i in range(10_000))
     0.8406

   ---------- Footnotes ----------

   (1) https://mathworld.wolfram.com/BinomialDistribution.html


File: python.info,  Node: Classificador bayesiano ingênuo,  Prev: Aproximação de distribuições binomiais,  Up: Exemplos e receitas<2>

5.9.7.11 Classificador bayesiano ingênuo
........................................

Distribuições normais geralmente surgem em problemas de aprendizado de
máquina.

A Wikipedia tem um bom exemplo de um Classificador Bayesiano Ingênuo(1).
O desafio é prever o sexo de uma pessoa a partir de medidas de
características normalmente distribuídas, incluindo altura, peso e
tamanho do pé.

Recebemos um conjunto de dados de treinamento com medições para oito
pessoas.  As medidas são consideradas normalmente distribuídas, então
resumimos os dados com *note NormalDist: a41.:

     >>> height_male = NormalDist.from_samples([6, 5.92, 5.58, 5.92])
     >>> height_female = NormalDist.from_samples([5, 5.5, 5.42, 5.75])
     >>> weight_male = NormalDist.from_samples([180, 190, 170, 165])
     >>> weight_female = NormalDist.from_samples([100, 150, 130, 150])
     >>> foot_size_male = NormalDist.from_samples([12, 11, 12, 10])
     >>> foot_size_female = NormalDist.from_samples([6, 8, 7, 9])

Em seguida, encontramos uma nova pessoa cujas características de medidas
são conhecidas, mas cujo gênero é desconhecido:

     >>> ht = 6.0        # altura
     >>> wt = 130        # peso
     >>> fs = 8          # tamanho do pé

Começando com uma probabilidade a priori(2) de 50% de ser homem ou
mulher, calculamos a posteriori como a priori vezes o produto das
probabilidade para as características de medidas dado o gênero:

     >>> prior_male = 0.5
     >>> prior_female = 0.5
     >>> posterior_male = (prior_male * height_male.pdf(ht) *
     ...                   weight_male.pdf(wt) * foot_size_male.pdf(fs))

     >>> posterior_female = (prior_female * height_female.pdf(ht) *
     ...                     weight_female.pdf(wt) * foot_size_female.pdf(fs))

A previsão final vai para a probabilidade posterior maior.  Isso é
conhecido como máximo a posteriori(3) ou MAP:

     >>> 'male' if posterior_male > posterior_female else 'female'
     'female'

   ---------- Footnotes ----------

   (1) 
https://en.wikipedia.org/wiki/Naive_Bayes_classifier#Person_classification

   (2) https://pt.wikipedia.org/wiki/Probabilidade_a_priori

   (3) https://en.wikipedia.org/wiki/Maximum_a_posteriori_estimation


File: python.info,  Node: Módulos de Programação Funcional,  Next: Acesso a arquivos e diretórios,  Prev: Módulos Matemáticos e Numéricos,  Up: A Biblioteca Padrão do Python

5.10 Módulos de Programação Funcional
=====================================

Os módulos descritos neste capítulo fornecem funções e classes que
suportam um estilo de programação funcional e operações gerais em
chamáveis.

Os seguintes módulos estão documentados neste capítulo:

* Menu:

* itertools — Funções que criam iteradores para laços eficientes::
* functools — Funções e operações de ordem superior em objetos chamáveis::
* operator — Operadores padrões como funções::


File: python.info,  Node: itertools — Funções que criam iteradores para laços eficientes,  Next: functools — Funções e operações de ordem superior em objetos chamáveis,  Up: Módulos de Programação Funcional

5.10.1 ‘itertools’ — Funções que criam iteradores para laços eficientes
-----------------------------------------------------------------------

__________________________________________________________________

Esse módulo implementa diversos blocos de instruções com *note
iteradores: 1ac, inspirados por construções de APL, Haskell, e SML. Cada
uma foi adequadamente reformulada para Python.

Esse módulo padroniza um conjunto central de ferramentas rápidas e de
uso eficiente da memória, que podem ser utilizadas sozinhas ou
combinadas.  Juntas, eles formam uma “álgebra de iteradores” tornando
possível construir ferramentas sucintas e eficientes em Python puro.

Por exemplo, SML fornece uma ferramenta para tabulação: ‘tabulate(f)’
que produz uma sequência ‘f(0), f(1), ...’.  O mesmo efeito pode ser
obtido em Python combinando *note map(): 867. e *note count(): 12c5.
para formar ‘map(f, count())’.

'Iteradores infinitos:'

Iterador               Argumentos            Resultado                                             Exemplo
                                                                                                   
-------------------------------------------------------------------------------------------------------------------------------------------------
                                                                                                   
*note count(): 12c5.   [start[, step]]       start, start+step, start+2*step, …                    ‘count(10) → 10 11 12 13 14 ...’
                                                                                                   
                                                                                                   
*note cycle(): 28d9.   p                     p0, p1, … ultimo elemento de p, p0, p1, …             ‘cycle('ABCD') → A B C D A B C D ...’
                                                                                                   
                                                                                                   
*note repeat(): 28da.  elem [,n]             elem, elem, elem, … repete infinitamente ou até n     ‘repeat(10, 3) → 10 10 10’
                                             vezes                                                 
                                             

'Iteradores terminando na sequencia de entrada mais curta:'

Iterador                         Argumentos                       Resultado                                             Exemplo
                                                                                                                        
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
                                                                                                                        
*note accumulate(): a05.         p [,func]                        p0, p0+p1, p0+p1+p2, …                                ‘accumulate([1,2,3,4,5]) → 1 3 6 10 15’
                                                                                                                        
                                                                                                                        
*note batched(): 201.            p, n                             (p0, p1, …, p_n-1), …                                 ‘batched('ABCDEFG', n=3) → ABC DEF G’
                                                                                                                        
                                                                                                                        
*note chain(): 2315.             p, q, …                          p0, p1, … último elemento de p, q0, q1, …             ‘chain('ABC', 'DEF') → A B C D E F’
                                                                                                                        
                                                                                                                        
*note chain.from_iterable(): 28db.iterável                        p0, p1, … último elemento de p, q0, q1, …             ‘chain.from_iterable(['ABC', 'DEF']) → A B C D E F’
                                                                                                                        
                                                                                                                        
*note compress(): 12c4.          data, selectors                  (d[0] if s[0]), (d[1] if s[1]), …                     ‘compress('ABCDEF', [1,0,1,0,1,1]) → A C E F’
                                                                                                                        
                                                                                                                        
*note dropwhile(): 28dc.         predicate, seq                   seq[n], seq[n+1], começando quando o predicate        ‘dropwhile(lambda x: x<5, [1,4,6,3,8]) → 6 3 8’
                                                                  falha                                                 
                                                                  
                                                                                                                        
*note filterfalse(): 2303.       predicate, seq                   elementos de seq onde predicate(elem) falha           ‘filterfalse(lambda x: x<5, [1,4,6,3,8]) → 6 8’
                                                                                                                        
                                                                                                                        
*note groupby(): 28dd.           iterable[, key]                  sub-iteradores agrupados pelo valor de key(v)         ‘groupby(['A','B','DEF'], len) → (1, A B) (3, DEF)’
                                                                                                                        
                                                                                                                        
*note islice(): b61.             seq, [start,] stop [, step]      elementos de seq[start:stop:step]                     ‘islice('ABCDEFG', 2, None) → C D E F G’
                                                                                                                        
                                                                                                                        
*note pairwise(): 818.           iterável                         (p[0], p[1]), (p[1], p[2])                            ‘pairwise('ABCDEFG') → AB BC CD DE EF FG’
                                                                                                                        
                                                                                                                        
*note starmap(): 1123.           func, seq                        func(*seq[0]), func(*seq[1]), …                       ‘starmap(pow, [(2,5), (3,2), (10,3)]) → 32 9 1000’
                                                                                                                        
                                                                                                                        
*note takewhile(): 28de.         predicate, seq                   seq[0], seq[1], até predicate falhar                  ‘takewhile(lambda x: x<5, [1,4,6,3,8]) → 1 4’
                                                                                                                        
                                                                                                                        
*note tee(): 28df.               it, n                            n iteradores it independentes
                                                                  
                                                                                                                        
*note zip_longest(): 12e0.       p, q, …                          (p[0], q[0]), (p[1], q[1]), …                         ‘zip_longest('ABCD', 'xy', fillvalue='-') → Ax By C- D-’
                                                                                                                        

'Iteradores combinatórios:'

Iterador                                           Argumentos               Resultado
                                                                            
----------------------------------------------------------------------------------------------------------------------------------------------
                                                                            
*note product(): 1357.                             p, q, … [repeat=1]       produto cartesiano, equivalente a laços ‘for’ aninhados
                                                                            
                                                                            
*note permutations(): 1a6a.                        p[, r]                   tuplas de tamanho r, com todas ordenações possíveis, sem
                                                                            elementos repetidos
                                                                            
                                                                            
*note combinations(): 1356.                        p, r                     tuplas de tamanho r, ordenadas, sem elementos repetidos
                                                                            
                                                                            
*note combinations_with_replacement(): 12c3.       p, r                     tuplas de tamanho r, ordenadas, com elementos repetidos
                                                                            

Exemplos                                           Resultado
                                                   
---------------------------------------------------------------------------------------------------------------------
                                                   
‘product('ABCD', repeat=2)’                        ‘AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD’
                                                   
                                                   
‘permutations('ABCD', 2)’                          ‘AB AC AD BA BC BD CA CB CD DA DB DC’
                                                   
                                                   
‘combinations('ABCD', 2)’                          ‘AB AC AD BC BD CD’
                                                   
                                                   
‘combinations_with_replacement('ABCD', 2)’         ‘AA AB AC AD BB BC BD CC CD DD’
                                                   

* Menu:

* Funções do intertools::
* Receitas com itertools::


File: python.info,  Node: Funções do intertools,  Next: Receitas com itertools,  Up: itertools — Funções que criam iteradores para laços eficientes

5.10.1.1 Funções do intertools
..............................

Todas as funções a seguir constroem e retornam iteradores.  Algumas
fornecem fluxos de comprimento infinito, então elas devem ser acessadas
somente por funções ou laços que truncam o fluxo.

 -- Função: itertools.accumulate (iterable[, function, *, initial=None])

     Constrói um iterador que retorna somas acumuladas, ou resultados
     acumulados de outras funções binárias.

     A função 'function' assume como padrão a adição.  'function' deve
     aceitar dois argumentos, um total acumulado e um valor de
     'iterable'.

     Se um valor inicial 'initial' for fornecido, o acúmulo começará com
     esse valor e a saída terá um elemento a mais que o iterável de
     entrada.

     Aproximadamente equivalente a:

          def accumulate(iterable, function=operator.add, *, initial=None):
              'Retorna totais atuais'
              # accumulate([1,2,3,4,5]) → 1 3 6 10 15
              # accumulate([1,2,3,4,5], initial=100) → 100 101 103 106 110 115
              # accumulate([1,2,3,4,5], operator.mul) → 1 2 6 24 120

              iterator = iter(iterable)
              total = initial
              if initial is None:
                  try:
                      total = next(iterator)
                  except StopIteration:
                      return

              yield total
              for element in iterator:
                  total = function(total, element)
                  yield total

     Para calcular um mínimo atual, defina 'function' como *note min():
     f3a.  Para um máximo atual, defina 'function' como *note max():
     f3b.  Ou para um produto atual, defina 'function' como *note
     operator.mul(): 28e2.  Para construir uma tabela de amortização(1),
     acumular os juros e aplicar os pagamentos:

          >>> data = [3, 4, 6, 2, 1, 9, 0, 7, 5, 8]
          >>> list(accumulate(data, max))              # máximo atual
          [3, 4, 6, 6, 6, 9, 9, 9, 9, 9]
          >>> list(accumulate(data, operator.mul))     # produto atual
          [3, 12, 72, 144, 144, 1296, 0, 0, 0, 0]

          # Amortiza um empréstimo de 5% de 1000 com 10 pagamentos anuais de 90
          >>> update = lambda balance, payment: round(balance * 1.05) - payment
          >>> list(accumulate(repeat(90, 10), update, initial=1_000))
          [1000, 960, 918, 874, 828, 779, 728, 674, 618, 559, 497]

     Veja *note functools.reduce(): 131f. para uma função similar que
     devolve apenas o valor acumulado final.

     Adicionado na versão 3.2.

     Alterado na versão 3.3: Adicionado o parâmetro opcional 'function'.

     Alterado na versão 3.8: Adicionado o parâmetro opcional 'initial'.

 -- Função: itertools.batched (iterable, n, *, strict=False)

     Dados de lote do 'iterable' em tuplas de comprimento 'n'.  O último
     lote pode ser menor que 'n'.

     Se 'strict' for verdadeiro, será levantada uma *note ValueError:
     202. se o lote final for menor que 'n'.

     Faz um laço sobre o iterável de entrada e acumula dados em tuplas
     de até o tamanho 'n'.  A entrada é consumida preguiçosamente,
     apenas o suficiente para preencher um lote.  O resultado é
     produzido assim que o lote estiver cheio ou quando o iterável de
     entrada estiver esgotado:

          >>> flattened_data = ['roses', 'red', 'violets', 'blue', 'sugar', 'sweet']
          >>> unflattened = list(batched(flattened_data, 2))
          >>> unflattened
          [('roses', 'red'), ('violets', 'blue'), ('sugar', 'sweet')]

     Aproximadamente equivalente a:

          def batched(iterable, n, *, strict=False):
              # batched('ABCDEFG', 3) → ABC DEF G
              if n < 1:
                  raise ValueError('n must be at least one')
              iterator = iter(iterable)
              while batch := tuple(islice(iterator, n)):
                  if strict and len(batch) != n:
                      raise ValueError('batched(): incomplete batch')
                  yield batch

     Adicionado na versão 3.12.

     Alterado na versão 3.13: Adicionada a opção 'strict'.

 -- Função: itertools.chain (*iterables)

     Cria um iterador que devolve elementos do primeiro iterável até o
     esgotamento, então prossiga para o próximo iterável, até que todos
     os iteráveis sejam esgotados Isso combina várias fontes de dados em
     um único iterador.  Aproximadamente equivalente a:

          def chain(*iterables):
              # chain('ABC', 'DEF') → A B C D E F
              for iterable in iterables:
                  yield from iterable

 -- Método: classmethod chain.from_iterable (iterable)

     Construtor alternativo para *note chain(): 2315.  Obtém entradas
     encadeadas a partir de um único argumento iterável que avaliado
     preguiçosamente.  Aproximadamente equivalente a:

          def from_iterable(iterables):
              # chain.from_iterable(['ABC', 'DEF']) → A B C D E F
              for iterable in iterables:
                  yield from iterable

 -- Função: itertools.combinations (iterable, r)

     Devolve subsequências de elementos com comprimento 'r' a partir da
     entrada 'iterável'

     A saída é uma subsequência de *note product(): 1357. mantendo
     apenas entradas que são subsequências do 'iterable'.  O comprimento
     da saída é dado por *note math.comb(): 6d0. que calcula ‘n! / r! /
     (n - r)!’ quando ‘0 ≤ r ≤ n’ ou zero quando ‘r > n’.

     As tuplas das combinações são emitidas em ordem lexicográfica de
     acordo com a ordem do iterável de entrada.  Se o iterável estiver
     ordenado, as tuplas de combinação serão produzidas em sequência
     ordenada.

     Os elementos são tratados como únicos baseado em suas posições, não
     em seus valores.  Se os elementos de entrada são únicos, não haverá
     repetição de valores nas sucessivas combinações.

     Aproximadamente equivalente a:

          def combinations(iterable, r):
              # combinations('ABCD', 2) → AB AC AD BC BD CD
              # combinations(range(4), 3) → 012 013 023 123

              pool = tuple(iterable)
              n = len(pool)
              if r > n:
                  return
              indices = list(range(r))

              yield tuple(pool[i] for i in indices)
              while True:
                  for i in reversed(range(r)):
                      if indices[i] != i + n - r:
                          break
                  else:
                      return
                  indices[i] += 1
                  for j in range(i+1, r):
                      indices[j] = indices[j-1] + 1
                  yield tuple(pool[i] for i in indices)

 -- Função: itertools.combinations_with_replacement (iterable, r)

     Devolve subsequências de comprimento 'r' de elementos do 'iterável'
     de entrada permitindo que elementos individuais sejam repetidos
     mais de uma vez.

     A saída é uma subsequência de *note product(): 1357. que mantém
     apenas entradas que são subsequências (com possíveis elementos
     repetidos) do 'iterable'.  O número de subsequências retornadas é
     ‘(n + r - 1)! / r! / (n - 1)!’ quando ‘n > 0’.

     As tuplas das combinações são emitidas em ordem lexicográfica de
     acordo com a ordem do iterável de entrada.  Se o iterável estiver
     ordenado, as tuplas de combinação serão produzidas em sequência
     ordenada.

     Os elementos são tratados como únicos baseado em suas posições, não
     em seus valores.  Se os elementos de entrada forem únicos, não
     haverá repetição de valores nas combinações geradas.

     Aproximadamente equivalente a:

          def combinations_with_replacement(iterable, r):
              # combinations_with_replacement('ABC', 2) → AA AB AC BB BC CC

              pool = tuple(iterable)
              n = len(pool)
              if not n and r:
                  return
              indices = [0] * r

              yield tuple(pool[i] for i in indices)
              while True:
                  for i in reversed(range(r)):
                      if indices[i] != n - 1:
                          break
                  else:
                      return
                  indices[i:] = [indices[i] + 1] * (r - i)
                  yield tuple(pool[i] for i in indices)

     Adicionado na versão 3.1.

 -- Função: itertools.compress (data, selectors)

     Cria um iterador que retorne elementos de 'data' onde o elemento
     correspondente em 'selectors' é verdadeiro.  Para quando os
     iteráveis 'data' ou 'selectors' forem esgotados.  Aproximadamente
     equivalente a:

          def compress(data, selectors):
              # compress('ABCDEF', [1,0,1,0,1,1]) → A C E F
              return (datum for datum, selector in zip(data, selectors) if selector)

     Adicionado na versão 3.1.

 -- Função: itertools.count (start=0, step=1)

     Cria um iterador que retorne valores uniformemente espaçados
     começando com 'start'.  Pode ser usado com *note map(): 867. para
     gerar pontos de dados consecutivos ou com *note zip(): 7d1. para
     adicionar números de sequência.  Aproximadamente equivalente a:

          def count(start=0, step=1):
              # count(10) → 10 11 12 13 14 ...
              # count(2.5, 0.5) → 2.5 3.0 3.5 ...
              n = start
              while True:
                  yield n
                  n += step

     Quando é feita uma contagem usando números de ponto flutuante, é
     possível ter melhor precisão substituindo código multiplicativo
     como ‘(start + step * i for i in count())’.

     Alterado na versão 3.1: Adicionou argumento 'step' e permitiu
     argumentos não-inteiros.

 -- Função: itertools.cycle (iterable)

     Crie um iterador que devolve elementos do 'iterable' assim como
     salva uma cópia de cada um.  Quando o iterável é esgotado, devolve
     elementos da cópia salva.  Repete indefinidamente.  Aproximadamente
     equivalente a:

          def cycle(iterable):
              # cycle('ABCD') → A B C D A B C D A B C D ...

              saved = []
              for element in iterable:
                  yield element
                  saved.append(element)

              while saved:
                  for element in saved:
                      yield element

     Esta itertool pode exigir armazenamento auxiliar significativo
     (dependendo do comprimento do iterável).

 -- Função: itertools.dropwhile (predicate, iterable)

     Cria um iterador que remove elementos do 'iterable' enquanto o
     'predicate' for verdadeiro e, em seguida, retorna todos os
     elementos.  Equivalente a:

          def dropwhile(predicate, iterable):
              # dropwhile(lambda x: x<5, [1,4,6,3,8]) → 6 3 8

              iterator = iter(iterable)
              for x in iterator:
                  if not predicate(x):
                      yield x
                      break

              for x in iterator:
                  yield x

     Observe que isso não produz 'nenhuma' saída até que o predicado se
     torne falso, portanto, esta itertool pode ter um longo tempo de
     inicialização.

 -- Função: itertools.filterfalse (predicate, iterable)

     Cria um iterador que filtre elementos do 'iterable', retornando
     apenas aqueles para os quais o 'predicate' retorna um valor falso.
     Se o 'predicate' for ‘None’, retorna os itens que são falsos.
     Equivalente aproximadamente a:

          def filterfalse(predicate, iterable):
              # filterfalse(lambda x: x<5, [1,4,6,3,8]) → 6 8

              if predicate is None:
                  predicate = bool

              for x in iterable:
                  if not predicate(x):
                      yield x

 -- Função: itertools.groupby (iterable, key=None)

     Cria um iterador que retorna chaves e grupos consecutivos do
     'iterable'.  A 'key' é uma função que calcula um valor-chave para
     cada elemento.  Se não for especificado ou for ‘None’, 'key' assume
     como padrão uma função de identidade e retorna o elemento
     inalterado.  Geralmente, o iterável precisa já estar ordenado na
     mesma função chave.

     O funcionamento de *note groupby(): 28dd. é semelhante ao filtro
     ‘uniq’ no Unix.  Ele gera uma quebra ou um novo grupo sempre que o
     valor da função da tecla muda (razão pela qual geralmente é
     necessário ordenar os dados usando a mesma função da tecla).  Esse
     comportamento difere do GROUP BY do SQL, que agrega elementos
     comuns independentemente da ordem de entrada.

     O grupo retornado é, ele próprio, um iterador que compartilha o
     iterável subjacente com *note groupby(): 28dd.  Como a origem é
     compartilhada, quando o objeto *note groupby(): 28dd. avança, o
     grupo anterior não fica mais visível.  Portanto, se esses dados
     forem necessários posteriormente, eles devem ser armazenados como
     uma lista:

          groups = []
          uniquekeys = []
          data = sorted(data, key=keyfunc)
          for k, g in groupby(data, keyfunc):
              groups.append(list(g))      # armazena um iterador de grupo como uma lista
              uniquekeys.append(k)

     *note groupby(): 28dd. é aproximadamente equivalente a:

          def groupby(iterable, key=None):
              # [k for k, g in groupby('AAAABBBCCDAABBB')] → A B C D A B
              # [list(g) for k, g in groupby('AAAABBBCCD')] → AAAA BBB CC D

              keyfunc = (lambda x: x) if key is None else key
              iterator = iter(iterable)
              exhausted = False

              def _grouper(target_key):
                  nonlocal curr_value, curr_key, exhausted
                  yield curr_value
                  for curr_value in iterator:
                      curr_key = keyfunc(curr_value)
                      if curr_key != target_key:
                          return
                      yield curr_value
                  exhausted = True

              try:
                  curr_value = next(iterator)
              except StopIteration:
                  return
              curr_key = keyfunc(curr_value)

              while not exhausted:
                  target_key = curr_key
                  curr_group = _grouper(target_key)
                  yield curr_key, curr_group
                  if curr_key == target_key:
                      for _ in curr_group:
                          pass

 -- Função: itertools.islice (iterable, stop)

 -- Função: itertools.islice (iterable, start, stop[, step])

     Cria um iterador que retorna os elementos selecionados do iterável.
     Funciona como o fatiamento de sequência, mas não oferece suporte a
     valores negativos para 'start', 'stop' ou 'step'.

     Se 'start' for zero ou ‘None’, a iteração começa em zero.  Caso
     contrário, os elementos do iterável são pulados até que 'start'
     seja alcançado.

     Se 'stop' for ‘None’, a iteração continua até que a entrada se
     esgote, se for o caso.  Caso contrário, ela para na posição
     especificada.

     Se 'step' for ‘None’, o padrão do passo é 1.  Os elementos são
     retornados consecutivamente, a menos que 'step' seja definido como
     maior que um, o que resulta na omissão de itens.

     Aproximadamente equivalente a:

          def islice(iterable, *args):
              # islice('ABCDEFG', 2) → A B
              # islice('ABCDEFG', 2, 4) → C D
              # islice('ABCDEFG', 2, None) → C D E F G
              # islice('ABCDEFG', 0, None, 2) → A C E G

              s = slice(*args)
              start = 0 if s.start is None else s.start
              stop = s.stop
              step = 1 if s.step is None else s.step
              if start < 0 or (stop is not None and stop < 0) or step <= 0:
                  raise ValueError

              indices = count() if stop is None else range(max(start, stop))
              next_i = start
              for i, element in zip(indices, iterable):
                  if i == next_i:
                      yield element
                      next_i += step

     Se a entrada for um iterador, o consumo total do 'islice' avança o
     iterador de entrada em ‘max(start, stop)’ passos, independentemente
     do valor do 'step'.

 -- Função: itertools.pairwise (iterable)

     Return successive overlapping pairs taken from the input
     'iterable'.

     The number of 2-tuples in the output iterator will be one fewer
     than the number of inputs.  It will be empty if the input iterable
     has fewer than two values.

     Aproximadamente equivalente a:

          def pairwise(iterable):
              # pairwise('ABCDEFG') → AB BC CD DE EF FG

              iterator = iter(iterable)
              a = next(iterator, None)

              for b in iterator:
                  yield a, b
                  a = b

     Adicionado na versão 3.10.

 -- Função: itertools.permutations (iterable, r=None)

     Return successive 'r' length permutations of elements(2) from the
     'iterable'.

     If 'r' is not specified or is ‘None’, then 'r' defaults to the
     length of the 'iterable' and all possible full-length permutations
     are generated.

     The output is a subsequence of *note product(): 1357. where entries
     with repeated elements have been filtered out.  The length of the
     output is given by *note math.perm(): 6d1. which computes ‘n! / (n
     - r)!’ when ‘0 ≤ r ≤ n’ or zero when ‘r > n’.

     The permutation tuples are emitted in lexicographic order according
     to the order of the input 'iterable'.  If the input 'iterable' is
     sorted, the output tuples will be produced in sorted order.

     Elements are treated as unique based on their position, not on
     their value.  If the input elements are unique, there will be no
     repeated values within a permutation.

     Aproximadamente equivalente a:

          def permutations(iterable, r=None):
              # permutations('ABCD', 2) → AB AC AD BA BC BD CA CB CD DA DB DC
              # permutations(range(3)) → 012 021 102 120 201 210

              pool = tuple(iterable)
              n = len(pool)
              r = n if r is None else r
              if r > n:
                  return

              indices = list(range(n))
              cycles = list(range(n, n-r, -1))
              yield tuple(pool[i] for i in indices[:r])

              while n:
                  for i in reversed(range(r)):
                      cycles[i] -= 1
                      if cycles[i] == 0:
                          indices[i:] = indices[i+1:] + indices[i:i+1]
                          cycles[i] = n - i
                      else:
                          j = cycles[i]
                          indices[i], indices[-j] = indices[-j], indices[i]
                          yield tuple(pool[i] for i in indices[:r])
                          break
                  else:
                      return

 -- Função: itertools.product (*iterables, repeat=1)

     Cartesian product(3) of the input iterables.

     Aproximadamente equivalente a laços for aninhados em uma expressão
     geradora.  Por exemplo, ‘product(A, B)’ devolve o mesmo que ‘((x,y)
     for x in A for y in B)’.

     Os laços aninhados circulam como um hodômetro com o elemento mais à
     direita avançando a cada iteração.  Este padrão cria uma ordenação
     lexicográfica de maneira que se os iteráveis de entrada estiverem
     ordenados, as tuplas produzidas são emitidas de maneira ordenada.

     To compute the product of an iterable with itself, specify the
     number of repetitions with the optional 'repeat' keyword argument.
     For example, ‘product(A, repeat=4)’ means the same as ‘product(A,
     A, A, A)’.

     This function is roughly equivalent to the following code, except
     that the actual implementation does not build up intermediate
     results in memory:

          def product(*iterables, repeat=1):
              # product('ABCD', 'xy') → Ax Ay Bx By Cx Cy Dx Dy
              # product(range(2), repeat=3) → 000 001 010 011 100 101 110 111

              if repeat < 0:
                  raise ValueError('repeat argument cannot be negative')
              pools = [tuple(pool) for pool in iterables] * repeat

              result = [[]]
              for pool in pools:
                  result = [x+[y] for x in result for y in pool]

              for prod in result:
                  yield tuple(prod)

     Before *note product(): 1357. runs, it completely consumes the
     input iterables, keeping pools of values in memory to generate the
     products.  Accordingly, it is only useful with finite inputs.

 -- Função: itertools.repeat (object[, times])

     Make an iterator that returns 'object' over and over again.  Runs
     indefinitely unless the 'times' argument is specified.

     Aproximadamente equivalente a:

          def repeat(object, times=None):
              # repeat(10, 3) → 10 10 10
              if times is None:
                  while True:
                      yield object
              else:
                  for i in range(times):
                      yield object

     Um uso comum de 'repeat' é para fornecer um fluxo de valores
     constantes para 'map' ou 'zip'.

          >>> list(map(pow, range(10), repeat(2)))
          [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

 -- Função: itertools.starmap (function, iterable)

     Make an iterator that computes the 'function' using arguments
     obtained from the 'iterable'.  Used instead of *note map(): 867.
     when argument parameters have already been “pre-zipped” into
     tuples.

     The difference between *note map(): 867. and *note starmap(): 1123.
     parallels the distinction between ‘function(a,b)’ and
     ‘function(*c)’.  Roughly equivalent to:

          def starmap(function, iterable):
              # starmap(pow, [(2,5), (3,2), (10,3)]) → 32 9 1000
              for args in iterable:
                  yield function(*args)

 -- Função: itertools.takewhile (predicate, iterable)

     Make an iterator that returns elements from the 'iterable' as long
     as the 'predicate' is true.  Roughly equivalent to:

          def takewhile(predicate, iterable):
              # takewhile(lambda x: x<5, [1,4,6,3,8]) → 1 4
              for x in iterable:
                  if not predicate(x):
                      break
                  yield x

     Note, the element that first fails the predicate condition is
     consumed from the input iterator and there is no way to access it.
     This could be an issue if an application wants to further consume
     the input iterator after 'takewhile' has been run to exhaustion.
     To work around this problem, consider using more-itertools
     before_and_after()(4) instead.

 -- Função: itertools.tee (iterable, n=2)

     Return 'n' independent iterators from a single iterable.

     Aproximadamente equivalente a:

          def tee(iterable, n=2):
              if n < 0:
                  raise ValueError
              if n == 0:
                  return ()
              iterator = _tee(iterable)
              result = [iterator]
              for _ in range(n - 1):
                  result.append(_tee(iterator))
              return tuple(result)

          class _tee:

              def __init__(self, iterable):
                  it = iter(iterable)
                  if isinstance(it, _tee):
                      self.iterator = it.iterator
                      self.link = it.link
                  else:
                      self.iterator = it
                      self.link = [None, None]

              def __iter__(self):
                  return self

              def __next__(self):
                  link = self.link
                  if link[1] is None:
                      link[0] = next(self.iterator)
                      link[1] = [None, None]
                  value, self.link = link
                  return value

     When the input 'iterable' is already a tee iterator object, all
     members of the return tuple are constructed as if they had been
     produced by the upstream *note tee(): 28df. call.  This “flattening
     step” allows nested *note tee(): 28df. calls to share the same
     underlying data chain and to have a single update step rather than
     a chain of calls.

     The flattening property makes tee iterators efficiently peekable:

          def lookahead(tee_iterator):
               "Return the next value without moving the input forward"
               [forked_iterator] = tee(tee_iterator, 1)
               return next(forked_iterator)

          >>> iterator = iter('abcdef')
          >>> [iterator] = tee(iterator, 1)   # Make the input peekable
          >>> next(iterator)                  # Move the iterator forward
          'a'
          >>> lookahead(iterator)             # Check next value
          'b'
          >>> next(iterator)                  # Continue moving forward
          'b'

     ‘tee’ iterators are not threadsafe.  A *note RuntimeError: 195. may
     be raised when simultaneously using iterators returned by the same
     *note tee(): 28df. call, even if the original 'iterable' is
     threadsafe.

     This itertool may require significant auxiliary storage (depending
     on how much temporary data needs to be stored).  In general, if one
     iterator uses most or all of the data before another iterator
     starts, it is faster to use *note list(): 611. instead of *note
     tee(): 28df.

 -- Função: itertools.zip_longest (*iterables, fillvalue=None)

     Make an iterator that aggregates elements from each of the
     'iterables'.

     If the iterables are of uneven length, missing values are filled-in
     with 'fillvalue'.  If not specified, 'fillvalue' defaults to
     ‘None’.

     Iteration continues until the longest iterable is exhausted.

     Aproximadamente equivalente a:

          def zip_longest(*iterables, fillvalue=None):
              # zip_longest('ABCD', 'xy', fillvalue='-') → Ax By C- D-

              iterators = list(map(iter, iterables))
              num_active = len(iterators)
              if not num_active:
                  return

              while True:
                  values = []
                  for i, iterator in enumerate(iterators):
                      try:
                          value = next(iterator)
                      except StopIteration:
                          num_active -= 1
                          if not num_active:
                              return
                          iterators[i] = repeat(fillvalue)
                          value = fillvalue
                      values.append(value)
                  yield tuple(values)

     If one of the iterables is potentially infinite, then the *note
     zip_longest(): 12e0. function should be wrapped with something that
     limits the number of calls (for example *note islice(): b61. or
     *note takewhile(): 28de.).

   ---------- Footnotes ----------

   (1) https://www.ramseysolutions.com/real-estate/amortization-schedule

   (2) https://www.britannica.com/science/permutation

   (3) https://en.wikipedia.org/wiki/Cartesian_product

   (4) 
https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.before_and_after


File: python.info,  Node: Receitas com itertools,  Prev: Funções do intertools,  Up: itertools — Funções que criam iteradores para laços eficientes

5.10.1.2 Receitas com itertools
...............................

Esta seção mostra receitas para criação de um ferramental ampliado
usando as ferramentas existentes de itertools como elementos
construtivos.

The primary purpose of the itertools recipes is educational.  The
recipes show various ways of thinking about individual tools — for
example, that ‘chain.from_iterable’ is related to the concept of
flattening.  The recipes also give ideas about ways that the tools can
be combined — for example, how ‘starmap()’ and ‘repeat()’ can work
together.  The recipes also show patterns for using itertools with the
*note operator: 9f. and *note collections: 1d. modules as well as with
the built-in itertools such as ‘map()’, ‘filter()’, ‘reversed()’, and
‘enumerate()’.

A secondary purpose of the recipes is to serve as an incubator.  The
‘accumulate()’, ‘compress()’, and ‘pairwise()’ itertools started out as
recipes.  Currently, the ‘sliding_window()’, ‘iter_index()’, and
‘sieve()’ recipes are being tested to see whether they prove their
worth.

Substantially all of these recipes and many, many others can be
installed from the more-itertools(1) project found on the Python Package
Index:

     python -m pip install more-itertools

Many of the recipes offer the same high performance as the underlying
toolset.  Superior memory performance is kept by processing elements one
at a time rather than bringing the whole iterable into memory all at
once.  Code volume is kept small by linking the tools together in a
functional style(2).  High speed is retained by preferring “vectorized”
building blocks over the use of for-loops and *note generators: 109a.
which incur interpreter overhead.

     from collections import Counter, deque
     from contextlib import suppress
     from functools import reduce
     from math import comb, prod, sumprod, isqrt
     from operator import itemgetter, getitem, mul, neg

     def take(n, iterable):
         "Return first n items of the iterable as a list."
         return list(islice(iterable, n))

     def prepend(value, iterable):
         "Prepend a single value in front of an iterable."
         # prepend(1, [2, 3, 4]) → 1 2 3 4
         return chain([value], iterable)

     def tabulate(function, start=0):
         "Return function(0), function(1), ..."
         return map(function, count(start))

     def repeatfunc(function, times=None, *args):
         "Repeat calls to a function with specified arguments."
         if times is None:
             return starmap(function, repeat(args))
         return starmap(function, repeat(args, times))

     def flatten(list_of_lists):
         "Flatten one level of nesting."
         return chain.from_iterable(list_of_lists)

     def ncycles(iterable, n):
         "Returns the sequence elements n times."
         return chain.from_iterable(repeat(tuple(iterable), n))

     def loops(n):
         "Loop n times. Like range(n) but without creating integers."
         # for _ in loops(100): ...
         return repeat(None, n)

     def tail(n, iterable):
         "Return an iterator over the last n items."
         # tail(3, 'ABCDEFG') → E F G
         return iter(deque(iterable, maxlen=n))

     def consume(iterator, n=None):
         "Advance the iterator n-steps ahead. If n is None, consume entirely."
         # Use functions that consume iterators at C speed.
         if n is None:
             deque(iterator, maxlen=0)
         else:
             next(islice(iterator, n, n), None)

     def nth(iterable, n, default=None):
         "Returns the nth item or a default value."
         return next(islice(iterable, n, None), default)

     def quantify(iterable, predicate=bool):
         "Given a predicate that returns True or False, count the True results."
         return sum(map(predicate, iterable))

     def first_true(iterable, default=False, predicate=None):
         "Returns the first true value or the *default* if there is no true value."
         # first_true([a,b,c], x) → a or b or c or x
         # first_true([a,b], x, f) → a if f(a) else b if f(b) else x
         return next(filter(predicate, iterable), default)

     def all_equal(iterable, key=None):
         "Returns True if all the elements are equal to each other."
         # all_equal('4٤௪౪໔', key=int) → True
         return len(take(2, groupby(iterable, key))) <= 1

     def unique_justseen(iterable, key=None):
         "Yield unique elements, preserving order. Remember only the element just seen."
         # unique_justseen('AAAABBBCCDAABBB') → A B C D A B
         # unique_justseen('ABBcCAD', str.casefold) → A B c A D
         if key is None:
             return map(itemgetter(0), groupby(iterable))
         return map(next, map(itemgetter(1), groupby(iterable, key)))

     def unique_everseen(iterable, key=None):
         "Yield unique elements, preserving order. Remember all elements ever seen."
         # unique_everseen('AAAABBBCCDAABBB') → A B C D
         # unique_everseen('ABBcCAD', str.casefold) → A B c D
         seen = set()
         if key is None:
             for element in filterfalse(seen.__contains__, iterable):
                 seen.add(element)
                 yield element
         else:
             for element in iterable:
                 k = key(element)
                 if k not in seen:
                     seen.add(k)
                     yield element

     def unique(iterable, key=None, reverse=False):
        "Yield unique elements in sorted order. Supports unhashable inputs."
        # unique([[1, 2], [3, 4], [1, 2]]) → [1, 2] [3, 4]
        sequenced = sorted(iterable, key=key, reverse=reverse)
        return unique_justseen(sequenced, key=key)

     def sliding_window(iterable, n):
         "Collect data into overlapping fixed-length chunks or blocks."
         # sliding_window('ABCDEFG', 4) → ABCD BCDE CDEF DEFG
         iterator = iter(iterable)
         window = deque(islice(iterator, n - 1), maxlen=n)
         for x in iterator:
             window.append(x)
             yield tuple(window)

     def grouper(iterable, n, *, incomplete='fill', fillvalue=None):
         "Collect data into non-overlapping fixed-length chunks or blocks."
         # grouper('ABCDEFG', 3, fillvalue='x') → ABC DEF Gxx
         # grouper('ABCDEFG', 3, incomplete='strict') → ABC DEF ValueError
         # grouper('ABCDEFG', 3, incomplete='ignore') → ABC DEF
         iterators = [iter(iterable)] * n
         match incomplete:
             case 'fill':
                 return zip_longest(*iterators, fillvalue=fillvalue)
             case 'strict':
                 return zip(*iterators, strict=True)
             case 'ignore':
                 return zip(*iterators)
             case _:
                 raise ValueError('Expected fill, strict, or ignore')

     def roundrobin(*iterables):
         "Visit input iterables in a cycle until each is exhausted."
         # roundrobin('ABC', 'D', 'EF') → A D E B F C
         # Algorithm credited to George Sakkis
         iterators = map(iter, iterables)
         for num_active in range(len(iterables), 0, -1):
             iterators = cycle(islice(iterators, num_active))
             yield from map(next, iterators)

     def subslices(seq):
         "Return all contiguous non-empty subslices of a sequence."
         # subslices('ABCD') → A AB ABC ABCD B BC BCD C CD D
         slices = starmap(slice, combinations(range(len(seq) + 1), 2))
         return map(getitem, repeat(seq), slices)

     def iter_index(iterable, value, start=0, stop=None):
         "Return indices where a value occurs in a sequence or iterable."
         # iter_index('AABCADEAF', 'A') → 0 1 4 7
         seq_index = getattr(iterable, 'index', None)
         if seq_index is None:
             iterator = islice(iterable, start, stop)
             for i, element in enumerate(iterator, start):
                 if element is value or element == value:
                     yield i
         else:
             stop = len(iterable) if stop is None else stop
             i = start
             with suppress(ValueError):
                 while True:
                     yield (i := seq_index(value, i, stop))
                     i += 1

     def iter_except(function, exception, first=None):
         "Convert a call-until-exception interface to an iterator interface."
         # iter_except(d.popitem, KeyError) → non-blocking dictionary iterator
         with suppress(exception):
             if first is not None:
                 yield first()
             while True:
                 yield function()

The following recipes have a more mathematical flavor:

     def multinomial(*counts):
         "Number of distinct arrangements of a multiset."
         # Counter('abracadabra').values() → 5 2 2 1 1
         # multinomial(5, 2, 2, 1, 1) → 83160
         return prod(map(comb, accumulate(counts), counts))

     def powerset(iterable):
         "Subsequences of the iterable from shortest to longest."
         # powerset([1,2,3]) → () (1,) (2,) (3,) (1,2) (1,3) (2,3) (1,2,3)
         s = list(iterable)
         return chain.from_iterable(combinations(s, r) for r in range(len(s)+1))

     def sum_of_squares(iterable):
         "Add up the squares of the input values."
         # sum_of_squares([10, 20, 30]) → 1400
         return sumprod(*tee(iterable))

     def reshape(matrix, columns):
         "Reshape a 2-D matrix to have a given number of columns."
         # reshape([(0, 1), (2, 3), (4, 5)], 3) →  (0, 1, 2), (3, 4, 5)
         return batched(chain.from_iterable(matrix), columns, strict=True)

     def transpose(matrix):
         "Swap the rows and columns of a 2-D matrix."
         # transpose([(1, 2, 3), (11, 22, 33)]) → (1, 11) (2, 22) (3, 33)
         return zip(*matrix, strict=True)

     def matmul(m1, m2):
         "Multiply two matrices."
         # matmul([(7, 5), (3, 5)], [(2, 5), (7, 9)]) → (49, 80), (41, 60)
         n = len(m2[0])
         return batched(starmap(sumprod, product(m1, transpose(m2))), n)

     def convolve(signal, kernel):
         """Discrete linear convolution of two iterables.
         Equivalent to polynomial multiplication.

         Convolutions are mathematically commutative; however, the inputs are
         evaluated differently.  The signal is consumed lazily and can be
         infinite. The kernel is fully consumed before the calculations begin.

         Article:  https://betterexplained.com/articles/intuitive-convolution/
         Video:    https://www.youtube.com/watch?v=KuXjwB4LzSA
         """
         # convolve([1, -1, -20], [1, -3]) → 1 -4 -17 60
         # convolve(data, [0.25, 0.25, 0.25, 0.25]) → Moving average (blur)
         # convolve(data, [1/2, 0, -1/2]) → 1st derivative estimate
         # convolve(data, [1, -2, 1]) → 2nd derivative estimate
         kernel = tuple(kernel)[::-1]
         n = len(kernel)
         padded_signal = chain(repeat(0, n-1), signal, repeat(0, n-1))
         windowed_signal = sliding_window(padded_signal, n)
         return map(sumprod, repeat(kernel), windowed_signal)

     def polynomial_from_roots(roots):
         """Compute a polynomial's coefficients from its roots.

            (x - 5) (x + 4) (x - 3)  expands to:   x³ -4x² -17x + 60
         """
         # polynomial_from_roots([5, -4, 3]) → [1, -4, -17, 60]
         factors = zip(repeat(1), map(neg, roots))
         return list(reduce(convolve, factors, [1]))

     def polynomial_eval(coefficients, x):
         """Evaluate a polynomial at a specific value.

         Computes with better numeric stability than Horner's method.
         """
         # Evaluate x³ -4x² -17x + 60 at x = 5
         # polynomial_eval([1, -4, -17, 60], x=5) → 0
         n = len(coefficients)
         if not n:
             return type(x)(0)
         powers = map(pow, repeat(x), reversed(range(n)))
         return sumprod(coefficients, powers)

     def polynomial_derivative(coefficients):
         """Compute the first derivative of a polynomial.

            f(x)  =  x³ -4x² -17x + 60
            f'(x) = 3x² -8x  -17
         """
         # polynomial_derivative([1, -4, -17, 60]) → [3, -8, -17]
         n = len(coefficients)
         powers = reversed(range(1, n))
         return list(map(mul, coefficients, powers))

     def sieve(n):
         "Primes less than n."
         # sieve(30) → 2 3 5 7 11 13 17 19 23 29
         if n > 2:
             yield 2
         data = bytearray((0, 1)) * (n // 2)
         for p in iter_index(data, 1, start=3, stop=isqrt(n) + 1):
             data[p*p : n : p+p] = bytes(len(range(p*p, n, p+p)))
         yield from iter_index(data, 1, start=3)

     def factor(n):
         "Prime factors of n."
         # factor(99) → 3 3 11
         # factor(1_000_000_000_000_007) → 47 59 360620266859
         # factor(1_000_000_000_000_403) → 1000000000000403
         for prime in sieve(isqrt(n) + 1):
             while not n % prime:
                 yield prime
                 n //= prime
                 if n == 1:
                     return
         if n > 1:
             yield n

     def is_prime(n):
         "Return True if n is prime."
         # is_prime(1_000_000_000_000_403) → True
         return n > 1 and next(factor(n)) == n

     def totient(n):
         "Count of natural numbers up to n that are coprime to n."
         # https://mathworld.wolfram.com/TotientFunction.html
         # totient(12) → 4 because len([1, 5, 7, 11]) == 4
         for prime in set(factor(n)):
             n -= n // prime
         return n

   ---------- Footnotes ----------

   (1) https://pypi.org/project/more-itertools/

   (2) https://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf


File: python.info,  Node: functools — Funções e operações de ordem superior em objetos chamáveis,  Next: operator — Operadores padrões como funções,  Prev: itertools — Funções que criam iteradores para laços eficientes,  Up: Módulos de Programação Funcional

5.10.2 ‘functools’ — Funções e operações de ordem superior em objetos chamáveis
-------------------------------------------------------------------------------

'Código-fonte:' Lib/functools.py(1)

__________________________________________________________________

O módulo *note functools: 5f. é para funções de ordem superior: funções
que atuam ou retornam outras funções.  Em geral, qualquer objeto
chamável pode ser tratado como uma função para os propósitos deste
módulo.

O módulo *note functools: 5f. define as seguintes funções:

 -- Função: @functools.cache (user_function)

     Cache simples e leve de funções sem vínculo.  Às vezes chamado de
     "memoizar"(2).

     Retorna o mesmo que ‘lru_cache(maxsize=None)’, criando um invólucro
     fino em torno de uma pesquisa de dicionário para os argumentos da
     função.  Como nunca precisa remover valores antigos, isso é menor e
     mais rápido do que *note lru_cache(): 9f7. com um limite de
     tamanho.

     Por exemplo:

          @cache
          def factorial(n):
              return n * factorial(n-1) if n else 1

          >>> factorial(10)   # sem nenhum resultado previamente armazenado em cache, faz 11 chamadas recursivas.
          3628800
          >>> factorial(5)    # sem novas chamadas, apenas retorna o resultado em cache.
          120
          >>> factorial(12)   # duas novas chamadas recursivas, factorial(10) é armazenado em cache
          479001600

     O cache é seguro para thread, permitindo que a função encapsulada
     seja usada em múltiplas threads.  Isso significa que a estrutura de
     dados subjacente permanecerá coerente durante atualizações
     simultâneas.

     É possível que a função encapsulada seja chamada mais de uma vez se
     outra thread fizer uma chamada adicional antes que a chamada
     inicial seja concluída e armazenada em cache.

     Adicionado na versão 3.9.

 -- Função: @functools.cached_property (func)

     Transforma um método de uma classe em uma propriedade cujo valor é
     calculado uma vez e, em seguida, armazenado em cache como um
     atributo normal para a vida útil da instância.  Semelhante a *note
     property(): 194, com a adição de armazenamento em cache.  Útil para
     propriedades computadas caras de instâncias que são efetivamente
     imutáveis.

     Exemplo:

          class DataSet:

              def __init__(self, sequence_of_numbers):
                  self._data = tuple(sequence_of_numbers)

              @cached_property
              def stdev(self):
                  return statistics.stdev(self._data)

     A mecânica de *note cached_property(): 541. difere um pouco da de
     *note property(): 194.  Uma propriedade comum bloqueia a escrita de
     atributos, a menos que um método setter seja definido.  Em
     contraste, uma 'cached_property' permite escritas.

     O decorador 'cached_property' só é executado em pesquisas e apenas
     quando um atributo com o mesmo nome não existe.  Quando executado,
     o 'cached_property' escreve no atributo com o mesmo nome.  Leituras
     e escritas subsequentes do atributo têm precedência sobre o método
     'cached_property' e ele funciona como um atributo normal.

     O valor em cache pode ser apagado excluindo o atributo.  Isso
     permite que o método 'cached_property' seja executado novamente.

     A propriedade 'cached_property' não impede uma possível condição de
     corrida em uso multithread.  A função getter pode ser executada
     mais de uma vez na mesma instância, com a última execução definindo
     o valor em cache.  Se a propriedade em cache for idempotente ou não
     causar problemas ao ser executada mais de uma vez em uma instância,
     isso não será um problema.  Caso seja necessária sincronização,
     implemente a trava necessária dentro da função getter decorada ou
     em torno do acesso à propriedade em cache.

     Observe que este decorador interfere com a operação dos dicionários
     que compartilham chaves da PEP 412(3).  Isso significa que os
     dicionários de instância podem ocupar mais espaço do que o normal.

     Also, this decorator requires that the ‘__dict__’ attribute on each
     instance be a mutable mapping.  This means it will not work with
     some types, such as metaclasses (since the ‘__dict__’ attributes on
     type instances are read-only proxies for the class namespace), and
     those that specify ‘__slots__’ without including ‘__dict__’ as one
     of the defined slots (as such classes don’t provide a ‘__dict__’
     attribute at all).

     If a mutable mapping is not available or if space-efficient key
     sharing is desired, an effect similar to *note cached_property():
     541. can also be achieved by stacking *note property(): 194. on top
     of *note lru_cache(): 9f7.  See *note Como faço para armazenar em
     cache as chamadas de um método?: 28e7. for more details on how this
     differs from *note cached_property(): 541.

     Adicionado na versão 3.8.

     Alterado na versão 3.12: Prior to Python 3.12, ‘cached_property’
     included an undocumented lock to ensure that in multi-threaded
     usage the getter function was guaranteed to run only once per
     instance.  However, the lock was per-property, not per-instance,
     which could result in unacceptably high lock contention.  In Python
     3.12+ this locking is removed.

 -- Função: functools.cmp_to_key (func)

     Transforma uma função de comparação de estilo antigo para um *note
     função chave: e31.  Usado com ferramentas que aceitam funções chave
     (como *note sorted(): be7, *note min(): f3a, *note max(): f3b,
     *note heapq.nlargest(): 26d6, *note heapq.nsmallest(): 26d7, *note
     itertools.groupby(): 28dd.).  Esta função é usada principalmente
     como uma ferramenta de transição para programas que estão sendo
     convertidos a partir do Python 2, que suportou o uso de funções de
     comparação.

     A comparison function is any callable that accepts two arguments,
     compares them, and returns a negative number for less-than, zero
     for equality, or a positive number for greater-than.  A key
     function is a callable that accepts one argument and returns
     another value to be used as the sort key.

     Exemplo:

          sorted(iterable, key=cmp_to_key(locale.strcoll))  # locale-aware sort order

     Para exemplos de classificação e um breve tutorial de
     classificação, veja *note Técnicas de ordenação: 2314.

     Adicionado na versão 3.2.

 -- Função: @functools.lru_cache (user_function)

 -- Função: @functools.lru_cache (maxsize=128, typed=False)

     Decorador para embrulhar uma função com um chamável memoizável que
     economiza até as chamadas mais recentes 'maxsize'.  Pode economizar
     tempo quando uma função cara ou E/S é periodicamente chamada com os
     mesmos argumentos.

     O cache é seguro para thread, permitindo que a função encapsulada
     seja usada em múltiplas threads.  Isso significa que a estrutura de
     dados subjacente permanecerá coerente durante atualizações
     simultâneas.

     É possível que a função encapsulada seja chamada mais de uma vez se
     outra thread fizer uma chamada adicional antes que a chamada
     inicial seja concluída e armazenada em cache.

     Since a dictionary is used to cache results, the positional and
     keyword arguments to the function must be *note hashable: 610.

     Distinct argument patterns may be considered to be distinct calls
     with separate cache entries.  For example, ‘f(a=1, b=2)’ and
     ‘f(b=2, a=1)’ differ in their keyword argument order and may have
     two separate cache entries.

     Se 'user_function' especificado, deve ser um chamável.  Isso
     permite que o decorador 'lru_cache' seja aplicado diretamente a uma
     função do usuário, deixando 'maxsize' em seu valor padrão de 128:

          @lru_cache
          def count_vowels(sentence):
              return sum(sentence.count(vowel) for vowel in 'AEIOUaeiou')

     Se 'maxsize' for definido como ‘None’, o recurso LRU é desabilitado
     e o cache pode crescer sem limites.

     If 'typed' is set to true, function arguments of different types
     will be cached separately.  If 'typed' is false, the implementation
     will usually regard them as equivalent calls and only cache a
     single result.  (Some types such as 'str' and 'int' may be cached
     separately even when 'typed' is false.)

     Note, type specificity applies only to the function’s immediate
     arguments rather than their contents.  The scalar arguments,
     ‘Decimal(42)’ and ‘Fraction(42)’ are be treated as distinct calls
     with distinct results.  In contrast, the tuple arguments
     ‘('answer', Decimal(42))’ and ‘('answer', Fraction(42))’ are
     treated as equivalent.

     The wrapped function is instrumented with a ‘cache_parameters()’
     function that returns a new *note dict: 256. showing the values for
     'maxsize' and 'typed'.  This is for information purposes only.
     Mutating the values has no effect.

     To help measure the effectiveness of the cache and tune the
     'maxsize' parameter, the wrapped function is instrumented with a
     ‘cache_info()’ function that returns a *note named tuple: 64e.
     showing 'hits', 'misses', 'maxsize' and 'currsize'.

     The decorator also provides a ‘cache_clear()’ function for clearing
     or invalidating the cache.

     A função subjacente original é acessível através do atributo
     ‘__wrapped__’.  Isso é útil para introspecção, para ignorar o
     cache, ou para reinstalar a função com um cache diferente.

     The cache keeps references to the arguments and return values until
     they age out of the cache or until the cache is cleared.

     If a method is cached, the ‘self’ instance argument is included in
     the cache.  See *note Como faço para armazenar em cache as chamadas
     de um método?: 28e7.

     An LRU (least recently used) cache(4) works best when the most
     recent calls are the best predictors of upcoming calls (for
     example, the most popular articles on a news server tend to change
     each day).  The cache’s size limit assures that the cache does not
     grow without bound on long-running processes such as web servers.

     In general, the LRU cache should only be used when you want to
     reuse previously computed values.  Accordingly, it doesn’t make
     sense to cache functions with side-effects, functions that need to
     create distinct mutable objects on each call (such as generators
     and async functions), or impure functions such as time() or
     random().

     Exemplo de um cache LRU para conteúdo web estático:

          @lru_cache(maxsize=32)
          def get_pep(num):
              'Retrieve text of a Python Enhancement Proposal'
              resource = f'https://peps.python.org/pep-{num:04d}'
              try:
                  with urllib.request.urlopen(resource) as s:
                      return s.read()
              except urllib.error.HTTPError:
                  return 'Not Found'

          >>> for n in 8, 290, 308, 320, 8, 218, 320, 279, 289, 320, 9991:
          ...     pep = get_pep(n)
          ...     print(n, len(pep))

          >>> get_pep.cache_info()
          CacheInfo(hits=3, misses=8, maxsize=32, currsize=8)

     Exemplo de computação eficiente dos números Fibonacci(5) usando um
     cache para implementar uma programação dinâmica(6) técnica:

          @lru_cache(maxsize=None)
          def fib(n):
              if n < 2:
                  return n
              return fib(n-1) + fib(n-2)

          >>> [fib(n) for n in range(16)]
          [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610]

          >>> fib.cache_info()
          CacheInfo(hits=28, misses=16, maxsize=None, currsize=16)

     Adicionado na versão 3.2.

     Alterado na versão 3.3: Adicionada a opção 'typed'.

     Alterado na versão 3.8: Adicionada a opção 'user_function'.

     Alterado na versão 3.9: Added the function ‘cache_parameters()’

 -- Função: @functools.total_ordering

     Given a class defining one or more rich comparison ordering
     methods, this class decorator supplies the rest.  This simplifies
     the effort involved in specifying all of the possible rich
     comparison operations:

     The class must define one of *note __lt__(): 12e2, *note __le__():
     134f, *note __gt__(): 1350, or *note __ge__(): 1351.  In addition,
     the class should supply an *note __eq__(): b0d. method.

     Por exemplo:

          @total_ordering
          class Student:
              def _is_valid_operand(self, other):
                  return (hasattr(other, "lastname") and
                          hasattr(other, "firstname"))
              def __eq__(self, other):
                  if not self._is_valid_operand(other):
                      return NotImplemented
                  return ((self.lastname.lower(), self.firstname.lower()) ==
                          (other.lastname.lower(), other.firstname.lower()))
              def __lt__(self, other):
                  if not self._is_valid_operand(other):
                      return NotImplemented
                  return ((self.lastname.lower(), self.firstname.lower()) <
                          (other.lastname.lower(), other.firstname.lower()))

          Nota: While this decorator makes it easy to create well
          behaved totally ordered types, it 'does' come at the cost of
          slower execution and more complex stack traces for the derived
          comparison methods.  If performance benchmarking indicates
          this is a bottleneck for a given application, implementing all
          six rich comparison methods instead is likely to provide an
          easy speed boost.

          Nota: This decorator makes no attempt to override methods that
          have been declared in the class 'or its superclasses'.
          Meaning that if a superclass defines a comparison operator,
          'total_ordering' will not implement it again, even if the
          original method is abstract.

     Adicionado na versão 3.2.

     Alterado na versão 3.4: Returning ‘NotImplemented’ from the
     underlying comparison function for unrecognised types is now
     supported.

 -- Função: functools.partial (func, /, *args, **keywords)

     Return a new *note partial object: 28ea. which when called will
     behave like 'func' called with the positional arguments 'args' and
     keyword arguments 'keywords'.  If more arguments are supplied to
     the call, they are appended to 'args'.  If additional keyword
     arguments are supplied, they extend and override 'keywords'.
     Roughly equivalent to:

          def partial(func, /, *args, **keywords):
              def newfunc(*fargs, **fkeywords):
                  newkeywords = {**keywords, **fkeywords}
                  return func(*args, *fargs, **newkeywords)
              newfunc.func = func
              newfunc.args = args
              newfunc.keywords = keywords
              return newfunc

     The *note partial(): 414. is used for partial function application
     which “freezes” some portion of a function’s arguments and/or
     keywords resulting in a new object with a simplified signature.
     For example, *note partial(): 414. can be used to create a callable
     that behaves like the *note int(): 257. function where the 'base'
     argument defaults to two:

          >>> from functools import partial
          >>> basetwo = partial(int, base=2)
          >>> basetwo.__doc__ = 'Convert base 2 string to an int.'
          >>> basetwo('10010')
          18

 -- Classe: functools.partialmethod (func, /, *args, **keywords)

     Return a new *note partialmethod: a85. descriptor which behaves
     like *note partial: 414. except that it is designed to be used as a
     method definition rather than being directly callable.

     'func' must be a *note descriptor: 1658. or a callable (objects
     which are both, like normal functions, are handled as descriptors).

     When 'func' is a descriptor (such as a normal Python function,
     *note classmethod(): 166, *note staticmethod(): 416, *note
     abstractmethod(): 10c4. or another instance of *note partialmethod:
     a85.), calls to ‘__get__’ are delegated to the underlying
     descriptor, and an appropriate *note partial object: 28ea. returned
     as the result.

     When 'func' is a non-descriptor callable, an appropriate bound
     method is created dynamically.  This behaves like a normal Python
     function when used as a method: the 'self' argument will be
     inserted as the first positional argument, even before the 'args'
     and 'keywords' supplied to the *note partialmethod: a85.
     constructor.

     Exemplo:

          >>> class Cell:
          ...     def __init__(self):
          ...         self._alive = False
          ...     @property
          ...     def alive(self):
          ...         return self._alive
          ...     def set_state(self, state):
          ...         self._alive = bool(state)
          ...     set_alive = partialmethod(set_state, True)
          ...     set_dead = partialmethod(set_state, False)
          ...
          >>> c = Cell()
          >>> c.alive
          False
          >>> c.set_alive()
          >>> c.alive
          True

     Adicionado na versão 3.4.

 -- Função: functools.reduce (function, iterable[, initial], /)

     Apply 'function' of two arguments cumulatively to the items of
     'iterable', from left to right, so as to reduce the iterable to a
     single value.  For example, ‘reduce(lambda x, y: x+y, [1, 2, 3, 4,
     5])’ calculates ‘((((1+2)+3)+4)+5)’.  The left argument, 'x', is
     the accumulated value and the right argument, 'y', is the update
     value from the 'iterable'.  If the optional 'initial' is present,
     it is placed before the items of the iterable in the calculation,
     and serves as a default when the iterable is empty.  If 'initial'
     is not given and 'iterable' contains only one item, the first item
     is returned.

     Aproximadamente equivalente a:

          initial_missing = object()

          def reduce(function, iterable, initial=initial_missing, /):
              it = iter(iterable)
              if initial is initial_missing:
                  value = next(it)
              else:
                  value = initial
              for element in it:
                  value = function(value, element)
              return value

     See *note itertools.accumulate(): a05. for an iterator that yields
     all intermediate values.

 -- Função: @functools.singledispatch

     Transform a function into a *note single-dispatch: 9fa. *note
     generic function: 9f9.

     To define a generic function, decorate it with the
     ‘@singledispatch’ decorator.  When defining a function using
     ‘@singledispatch’, note that the dispatch happens on the type of
     the first argument:

          >>> from functools import singledispatch
          >>> @singledispatch
          ... def fun(arg, verbose=False):
          ...     if verbose:
          ...         print("Let me just say,", end=" ")
          ...     print(arg)

     To add overloaded implementations to the function, use the
     ‘register()’ attribute of the generic function, which can be used
     as a decorator.  For functions annotated with types, the decorator
     will infer the type of the first argument automatically:

          >>> @fun.register
          ... def _(arg: int, verbose=False):
          ...     if verbose:
          ...         print("Strength in numbers, eh?", end=" ")
          ...     print(arg)
          ...
          >>> @fun.register
          ... def _(arg: list, verbose=False):
          ...     if verbose:
          ...         print("Enumerate this:")
          ...     for i, elem in enumerate(arg):
          ...         print(i, elem)

     *note types.UnionType: 63a. and *note typing.Union: 63b. can also
     be used:

          >>> @fun.register
          ... def _(arg: int | float, verbose=False):
          ...     if verbose:
          ...         print("Strength in numbers, eh?", end=" ")
          ...     print(arg)
          ...
          >>> from typing import Union
          >>> @fun.register
          ... def _(arg: Union[list, set], verbose=False):
          ...     if verbose:
          ...         print("Enumerate this:")
          ...     for i, elem in enumerate(arg):
          ...         print(i, elem)
          ...

     For code which doesn’t use type annotations, the appropriate type
     argument can be passed explicitly to the decorator itself:

          >>> @fun.register(complex)
          ... def _(arg, verbose=False):
          ...     if verbose:
          ...         print("Better than complicated.", end=" ")
          ...     print(arg.real, arg.imag)
          ...

     For code that dispatches on a collections type (e.g., ‘list’), but
     wants to typehint the items of the collection (e.g., ‘list[int]’),
     the dispatch type should be passed explicitly to the decorator
     itself with the typehint going into the function definition:

          >>> @fun.register(list)
          ... def _(arg: list[int], verbose=False):
          ...     if verbose:
          ...         print("Enumerate this:")
          ...     for i, elem in enumerate(arg):
          ...         print(i, elem)

          Nota: At runtime the function will dispatch on an instance of
          a list regardless of the type contained within the list i.e.
          ‘[1,2,3]’ will be dispatched the same as ‘["foo", "bar",
          "baz"]’.  The annotation provided in this example is for
          static type checkers only and has no runtime impact.

     To enable registering *note lambdas: 28ec. and pre-existing
     functions, the *note register(): 28eb. attribute can also be used
     in a functional form:

          >>> def nothing(arg, verbose=False):
          ...     print("Nothing.")
          ...
          >>> fun.register(type(None), nothing)

     The *note register(): 28eb. attribute returns the undecorated
     function.  This enables decorator stacking, *note pickling: a6, and
     the creation of unit tests for each variant independently:

          >>> @fun.register(float)
          ... @fun.register(Decimal)
          ... def fun_num(arg, verbose=False):
          ...     if verbose:
          ...         print("Half of your number:", end=" ")
          ...     print(arg / 2)
          ...
          >>> fun_num is fun
          False

     When called, the generic function dispatches on the type of the
     first argument:

          >>> fun("Hello, world.")
          Hello, world.
          >>> fun("test.", verbose=True)
          Let me just say, test.
          >>> fun(42, verbose=True)
          Strength in numbers, eh? 42
          >>> fun(['spam', 'spam', 'eggs', 'spam'], verbose=True)
          Enumerate this:
          0 spam
          1 spam
          2 eggs
          3 spam
          >>> fun(None)
          Nothing.
          >>> fun(1.23)
          0.615

     Where there is no registered implementation for a specific type,
     its method resolution order is used to find a more generic
     implementation.  The original function decorated with
     ‘@singledispatch’ is registered for the base *note object: a96.
     type, which means it is used if no better implementation is found.

     If an implementation is registered to an *note abstract base class:
     11f5, virtual subclasses of the base class will be dispatched to
     that implementation:

          >>> from collections.abc import Mapping
          >>> @fun.register
          ... def _(arg: Mapping, verbose=False):
          ...     if verbose:
          ...         print("Keys & Values")
          ...     for key, value in arg.items():
          ...         print(key, "=>", value)
          ...
          >>> fun({"a": "b"})
          a => b

     To check which implementation the generic function will choose for
     a given type, use the ‘dispatch()’ attribute:

          >>> fun.dispatch(float)
          <function fun_num at 0x1035a2840>
          >>> fun.dispatch(dict)    # note: default implementation
          <function fun at 0x103fe0000>

     To access all registered implementations, use the read-only
     ‘registry’ attribute:

          >>> fun.registry.keys()
          dict_keys([<class 'NoneType'>, <class 'int'>, <class 'object'>,
                    <class 'decimal.Decimal'>, <class 'list'>,
                    <class 'float'>])
          >>> fun.registry[float]
          <function fun_num at 0x1035a2840>
          >>> fun.registry[object]
          <function fun at 0x103fe0000>

     Adicionado na versão 3.4.

     Alterado na versão 3.7: The *note register(): 28eb. attribute now
     supports using type annotations.

     Alterado na versão 3.11: The *note register(): 28eb. attribute now
     supports *note types.UnionType: 63a. and *note typing.Union: 63b.
     as type annotations.

 -- Classe: functools.singledispatchmethod (func)

     Transform a method into a *note single-dispatch: 9fa. *note generic
     function: 9f9.

     To define a generic method, decorate it with the
     ‘@singledispatchmethod’ decorator.  When defining a method using
     ‘@singledispatchmethod’, note that the dispatch happens on the type
     of the first non-'self' or non-'cls' argument:

          class Negator:
              @singledispatchmethod
              def neg(self, arg):
                  raise NotImplementedError("Cannot negate a")

              @neg.register
              def _(self, arg: int):
                  return -arg

              @neg.register
              def _(self, arg: bool):
                  return not arg

     ‘@singledispatchmethod’ supports nesting with other decorators such
     as *note @classmethod: 166.  Note that to allow for
     ‘dispatcher.register’, ‘singledispatchmethod’ must be the 'outer
     most' decorator.  Here is the ‘Negator’ class with the ‘neg’
     methods bound to the class, rather than an instance of the class:

          class Negator:
              @singledispatchmethod
              @classmethod
              def neg(cls, arg):
                  raise NotImplementedError("Cannot negate a")

              @neg.register
              @classmethod
              def _(cls, arg: int):
                  return -arg

              @neg.register
              @classmethod
              def _(cls, arg: bool):
                  return not arg

     The same pattern can be used for other similar decorators: *note
     @staticmethod: 416, *note @~abc.abstractmethod: 10c4, and others.

     Adicionado na versão 3.8.

 -- Função: functools.update_wrapper (wrapper, wrapped,
          assigned=WRAPPER_ASSIGNMENTS, updated=WRAPPER_UPDATES)

     Update a 'wrapper' function to look like the 'wrapped' function.
     The optional arguments are tuples to specify which attributes of
     the original function are assigned directly to the matching
     attributes on the wrapper function and which attributes of the
     wrapper function are updated with the corresponding attributes from
     the original function.  The default values for these arguments are
     the module level constants ‘WRAPPER_ASSIGNMENTS’ (which assigns to
     the wrapper function’s *note __module__: 208e, *note __name__:
     1317, *note __qualname__: 208d, *note __annotations__: 1218, *note
     __type_params__: 2090, and *note __doc__: 1219, the documentation
     string) and ‘WRAPPER_UPDATES’ (which updates the wrapper function’s
     *note __dict__: 1315, i.e.  the instance dictionary).

     To allow access to the original function for introspection and
     other purposes (e.g.  bypassing a caching decorator such as *note
     lru_cache(): 9f7.), this function automatically adds a
     ‘__wrapped__’ attribute to the wrapper that refers to the function
     being wrapped.

     The main intended use for this function is in *note decorator: 731.
     functions which wrap the decorated function and return the wrapper.
     If the wrapper function is not updated, the metadata of the
     returned function will reflect the wrapper definition rather than
     the original function definition, which is typically less than
     helpful.

     *note update_wrapper(): 1058. may be used with callables other than
     functions.  Any attributes named in 'assigned' or 'updated' that
     are missing from the object being wrapped are ignored (i.e.  this
     function will not attempt to set them on the wrapper function).
     *note AttributeError: 34b. is still raised if the wrapper function
     itself is missing any attributes named in 'updated'.

     Alterado na versão 3.2: The ‘__wrapped__’ attribute is now
     automatically added.  The *note __annotations__: 1218. attribute is
     now copied by default.  Missing attributes no longer trigger an
     *note AttributeError: 34b.

     Alterado na versão 3.4: The ‘__wrapped__’ attribute now always
     refers to the wrapped function, even if that function defined a
     ‘__wrapped__’ attribute.  (see bpo-17482(7))

     Alterado na versão 3.12: The *note __type_params__: 2090. attribute
     is now copied by default.

 -- Função: @functools.wraps (wrapped, assigned=WRAPPER_ASSIGNMENTS,
          updated=WRAPPER_UPDATES)

     This is a convenience function for invoking *note update_wrapper():
     1058. as a function decorator when defining a wrapper function.  It
     is equivalent to ‘partial(update_wrapper, wrapped=wrapped,
     assigned=assigned, updated=updated)’.  For example:

          >>> from functools import wraps
          >>> def my_decorator(f):
          ...     @wraps(f)
          ...     def wrapper(*args, **kwds):
          ...         print('Calling decorated function')
          ...         return f(*args, **kwds)
          ...     return wrapper
          ...
          >>> @my_decorator
          ... def example():
          ...     """Docstring"""
          ...     print('Called example function')
          ...
          >>> example()
          Calling decorated function
          Called example function
          >>> example.__name__
          'example'
          >>> example.__doc__
          'Docstring'

     Without the use of this decorator factory, the name of the example
     function would have been ‘'wrapper'’, and the docstring of the
     original ‘example()’ would have been lost.

* Menu:

* Objetos partial::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/functools.py

   (2) https://en.wikipedia.org/wiki/Memoization

   (3) https://peps.python.org/pep-0412/

   (4) 
https://en.wikipedia.org/wiki/Cache_replacement_policies#Least_Recently_Used_(LRU)

   (5) https://pt.wikipedia.org/wiki/Sequência_de_Fibonacci

   (6) https://pt.wikipedia.org/wiki/Programação_dinâmica

   (7) https://bugs.python.org/issue?@action=redirect&bpo=17482


File: python.info,  Node: Objetos partial,  Up: functools — Funções e operações de ordem superior em objetos chamáveis

5.10.2.1 Objetos ‘partial’
..........................

*note partial: 414. objects are callable objects created by *note
partial(): 414.  They have three read-only attributes:

 -- Atributo: partial.func

     A callable object or function.  Calls to the *note partial: 414.
     object will be forwarded to *note func: 28ee. with new arguments
     and keywords.

 -- Atributo: partial.args

     The leftmost positional arguments that will be prepended to the
     positional arguments provided to a *note partial: 414. object call.

 -- Atributo: partial.keywords

     The keyword arguments that will be supplied when the *note partial:
     414. object is called.

*note partial: 414. objects are like *note function objects: 299. in
that they are callable, weak referenceable, and can have attributes.
There are some important differences.  For instance, the *note __name__:
1317. and *note function.__doc__: 1219. attributes are not created
automatically.  Also, *note partial: 414. objects defined in classes
behave like static methods and do not transform into bound methods
during instance attribute look-up.


File: python.info,  Node: operator — Operadores padrões como funções,  Prev: functools — Funções e operações de ordem superior em objetos chamáveis,  Up: Módulos de Programação Funcional

5.10.3 ‘operator’ — Operadores padrões como funções
---------------------------------------------------

'Código-fonte:' Lib/operator.py(1)

__________________________________________________________________

O módulo *note operator: 9f. exporta um conjunto de funções eficientes
correspondentes aos operadores intrínsecos do Python.  Por exemplo,
‘operator.add(x,y)’ é equivalente à expressão ‘x+y’.  Muitos nomes de
função são aqueles usados para métodos especiais, sem os sublinhados
duplos.  Para compatibilidade com versões anteriores, muitos deles têm
uma variante com os sublinhados duplos mantidos.  As variantes sem os
sublinhados duplos são preferenciais para maior clareza.

As funções se enquadram em categorias que realizam comparações de
objetos, operações lógicas, operações matemáticas e operações de
sequência.

As funções de comparação de objetos são úteis para todos os objetos e
são nomeadas conforme os operadores de comparação que os mesmos
suportam:

 -- Função: operator.lt (a, b)
 -- Função: operator.le (a, b)
 -- Função: operator.eq (a, b)
 -- Função: operator.ne (a, b)
 -- Função: operator.ge (a, b)
 -- Função: operator.gt (a, b)
 -- Função: operator.__lt__ (a, b)
 -- Função: operator.__le__ (a, b)
 -- Função: operator.__eq__ (a, b)
 -- Função: operator.__ne__ (a, b)
 -- Função: operator.__ge__ (a, b)
 -- Função: operator.__gt__ (a, b)

     Executam “comparações ricas” entre 'a' e 'b'.  Especialmente,
     ‘lt(a, b)’ é equivalente a ‘a < b’, ‘le(a, b)’ é equivalente a ‘a
     <= b’, ‘eq(a, b)’ é equivalente a ‘a == b’, ‘ne(a, b)’ é
     equivalente a ‘a != b’, ‘gt(a, b)’ é equivalente a ‘a > b’ e ‘ge(a,
     b)’ é equivalente a ‘a >= b’.  Observe que essas funções podem
     retornar qualquer valor, que pode ou não ser interpretável como um
     valor booleano.  Consulte *note Comparações: 2205. para obter mais
     informações sobre comparações ricas.

As operações lógicas também são geralmente aplicáveis a todos os objetos
e tem suporte para testes de verdade, testes de identidade e operações
booleanas:

 -- Função: operator.not_ (obj)
 -- Função: operator.__not__ (obj)

     Retorna o resultado de *note not: 220f. 'obj'.  (Veja que não
     existe nenhum método ‘__not__()’ para instâncias de objetos; apenas
     o núcleo do interpretador definirá esta operação.  O resultado será
     afetado pelos métodos *note __bool__(): 1318. e *note __len__():
     15b4.)

 -- Função: operator.truth (obj)

     Retorna *note True: c27. se o 'obj' for verdadeiro, e *note False:
     b49. caso contrário.  Isso é equivalente a utilizar a construção
     *note bool: 468.

 -- Função: operator.is_ (a, b)

     Retorna ‘a is b’.  Testa a identidade do objeto.

 -- Função: operator.is_not (a, b)

     Retorna ‘a is not b’.  Testa a identidade do objeto.

As operações matemáticas bit a bit são as mais numerosas:

 -- Função: operator.abs (obj)
 -- Função: operator.__abs__ (obj)

     Retorna o valor absoluto de 'obj'.

 -- Função: operator.add (a, b)
 -- Função: operator.__add__ (a, b)

     Retorna ‘a + b’, onde 'a' e 'b' são números.

 -- Função: operator.and_ (a, b)
 -- Função: operator.__and__ (a, b)

     Retorna bit a bit de 'a' e 'b'.

 -- Função: operator.floordiv (a, b)
 -- Função: operator.__floordiv__ (a, b)

     Retorna ‘a // b’.

 -- Função: operator.index (a)
 -- Função: operator.__index__ (a)

     Retorna 'a' convertendo para um inteiro.  Equivalente a
     ‘a.__index__()’.

     Alterado na versão 3.10: O resultado sempre tem o tipo exato *note
     int: 257.  Anteriormente, o resultado poderia ter sido uma
     instância de uma subclasse de ‘int’.

 -- Função: operator.inv (obj)
 -- Função: operator.invert (obj)
 -- Função: operator.__inv__ (obj)
 -- Função: operator.__invert__ (obj)

     Retorna o inverso bit a bit do número 'obj'.  Isso equivale a
     ‘~obj’.

 -- Função: operator.lshift (a, b)
 -- Função: operator.__lshift__ (a, b)

     Retorna 'a' deslocado para a esquerda por 'b'.

 -- Função: operator.mod (a, b)
 -- Função: operator.__mod__ (a, b)

     Retorna ‘a % b’.

 -- Função: operator.mul (a, b)
 -- Função: operator.__mul__ (a, b)

     Retorna ‘a * b’, onde 'a' e 'b' são números.

 -- Função: operator.matmul (a, b)
 -- Função: operator.__matmul__ (a, b)

     Retorna ‘a @ b’.

     Adicionado na versão 3.5.

 -- Função: operator.neg (obj)
 -- Função: operator.__neg__ (obj)

     Retorna 'obj' negado (‘-obj’).

 -- Função: operator.or_ (a, b)
 -- Função: operator.__or__ (a, b)

     Retorna bit a bit de 'a' e 'b'.

 -- Função: operator.pos (obj)
 -- Função: operator.__pos__ (obj)

     Retorna 'obj' positivo (‘+obj’).

 -- Função: operator.pow (a, b)
 -- Função: operator.__pow__ (a, b)

     Retorna ‘a ** b’, onde 'a' e 'b' são números.

 -- Função: operator.rshift (a, b)
 -- Função: operator.__rshift__ (a, b)

     Retorna 'a' deslocado para a direita por 'b'.

 -- Função: operator.sub (a, b)
 -- Função: operator.__sub__ (a, b)

     Retorna ‘a - b’.

 -- Função: operator.truediv (a, b)
 -- Função: operator.__truediv__ (a, b)

     Retorna ‘a / b’ onde 2/3 é .66 em vez de 0.  Isso também é
     conhecido como divisão “verdadeira”.

 -- Função: operator.xor (a, b)
 -- Função: operator.__xor__ (a, b)

     Retorna o OU exclusivo bit a bit de 'a' e 'b'.

Operações que funcionam com sequências (algumas delas com mapas também)
incluem:

 -- Função: operator.concat (a, b)
 -- Função: operator.__concat__ (a, b)

     Retorna ‘a + b’ para as sequências 'a' e 'b'.

 -- Função: operator.contains (a, b)
 -- Função: operator.__contains__ (a, b)

     Retorna o resultado do teste ‘b in a’.  Observe os operandos
     invertidos.

 -- Função: operator.countOf (a, b)

     Retorna o número de ocorrências de 'b' em 'a'.

 -- Função: operator.delitem (a, b)
 -- Função: operator.__delitem__ (a, b)

     Remove de 'a' o valor no índice 'b'.

 -- Função: operator.getitem (a, b)
 -- Função: operator.__getitem__ (a, b)

     Retorna de 'a' o valor no índice 'b'.

 -- Função: operator.indexOf (a, b)

     Retorna o índice da primeira ocorrência de 'b' em 'a'.

 -- Função: operator.setitem (a, b, c)
 -- Função: operator.__setitem__ (a, b, c)

     Define em 'a' o valor no índice 'b' para 'c'.

 -- Função: operator.length_hint (obj, default=0)

     Retorna um comprimento estimado para o objeto 'obj'.  Primeiro
     tenta retornar o seu comprimento real, em seguida, uma estimativa
     utilizando *note object.__length_hint__(): f3d, e finalmente
     retorna o valor padrão.

     Adicionado na versão 3.4.

Os operadores seguintes funcionam com chamáveis:

 -- Função: operator.call (obj, /, *args, **kwargs)
 -- Função: operator.__call__ (obj, /, *args, **kwargs)

     Retorna ‘obj(*args, **kwargs)’.

     Adicionado na versão 3.11.

O módulo *note operator: 9f. também define ferramentas para procura de
itens e atributos generalizados.  Estes são úteis para fazer extração de
campo rapidamente como argumentos para as funções *note map(): 867,
*note sorted(): be7, *note itertools.groupby(): 28dd, ou outra função
que espera uma função como argumento.

 -- Função: operator.attrgetter (attr)

 -- Função: operator.attrgetter (*attrs)

     Retorna um objeto chamável que pode buscar o 'attr' do seu
     operando.  Caso seja solicitado mais de um atributo, retorna uma
     tupla de atributos.  Os nomes dos atributos também podem conter
     pontos.  Por exemplo:

        * Depois de ‘f = attrgetter('name')’, a chamada a ‘f(b)’ retorna
          ‘b.name’.

        * Depois de ‘f = attrgetter('name', 'date')’, a chamada a ‘f(b)’
          retorna ‘(b.name, b.date)’.

        * Depois de ‘f = attrgetter('name.first', 'name.last')’, a
          chamada a ‘f(b)’ retorna ‘(b.name.first, b.name.last)’.

     Equivalente a:

          def attrgetter(*items):
              if any(not isinstance(item, str) for item in items):
                  raise TypeError('attribute name must be a string')
              if len(items) == 1:
                  attr = items[0]
                  def g(obj):
                      return resolve_attr(obj, attr)
              else:
                  def g(obj):
                      return tuple(resolve_attr(obj, attr) for attr in items)
              return g

          def resolve_attr(obj, attr):
              for name in attr.split("."):
                  obj = getattr(obj, name)
              return obj

 -- Função: operator.itemgetter (item)

 -- Função: operator.itemgetter (*items)

     Retorna um objeto chamável que busca 'item' de seu operando usando
     o método *note __getitem__(): 283. do operando.  Se vários itens
     forem especificados, retorna um tupla de valores de pesquisa.  Por
     exemplo:

        * Depois de ‘f = itemgetter(2)’, a chamada a ‘f(r)’ retorna
          ‘r[2]’.

        * Depois de ‘g = itemgetter(2, 5, 3)’, a chamada a ‘g(r)’
          retorna ‘(r[2], r[5], r[3])’.

     Equivalente a:

          def itemgetter(*items):
              if len(items) == 1:
                  item = items[0]
                  def g(obj):
                      return obj[item]
              else:
                  def g(obj):
                      return tuple(obj[item] for item in items)
              return g

     Os itens podem ser de qualquer tipo aceito pelo método *note
     __getitem__(): 283. do operando.  Dicionários aceitam qualquer
     valor *note hasheável: 610. .  Listas, tuplas e strings aceitam um
     índice ou um fatiamento:

          >>> itemgetter(1)('ABCDEFG')
          'B'
          >>> itemgetter(1, 3, 5)('ABCDEFG')
          ('B', 'D', 'F')
          >>> itemgetter(slice(2, None))('ABCDEFG')
          'CDEFG'
          >>> soldier = dict(rank='captain', name='dotterbart')
          >>> itemgetter('rank')(soldier)
          'captain'

     Exemplo de uso *note itemgetter(): a6b. para recuperar campos
     específicos de um registro de tupla:

          >>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
          >>> getcount = itemgetter(1)
          >>> list(map(getcount, inventory))
          [3, 2, 5, 1]
          >>> sorted(inventory, key=getcount)
          [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]

 -- Função: operator.methodcaller (name, /, *args, **kwargs)

     Retorna um objeto chamável que invoca o método 'name' em seu
     operando.  Se argumentos adicionais e/ou argumentos nomeados forem
     fornecidos, os mesmos serão passados para o método.  Por exemplo:

        * Depois de ‘f = methodcaller('name')’, a chamada a ‘f(b)’
          retorna ‘b.name()’.

        * Depois de ‘f = methodcaller('name', 'foo', bar=1)’, a chamada
          ‘f(b)’ retorna ‘b.name('foo', bar=1)’.

     Equivalente a:

          def methodcaller(name, /, *args, **kwargs):
              def caller(obj):
                  return getattr(obj, name)(*args, **kwargs)
              return caller

* Menu:

* Mapeando os operadores para suas respectivas funções::
* Operadores in-place::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/operator.py


File: python.info,  Node: Mapeando os operadores para suas respectivas funções,  Next: Operadores in-place,  Up: operator — Operadores padrões como funções

5.10.3.1 Mapeando os operadores para suas respectivas funções
.............................................................

Esta tabela mostra como as operações abstratas correspondem aos símbolos
do operador na sintaxe Python e às funções no módulo *note operator: 9f.

Operação                    Sintaxe                       Função
                                                          
------------------------------------------------------------------------------------------------------
                                                          
Adição                      ‘a + b’                       ‘add(a, b)’
                                                          
                                                          
Concatenação                ‘seq1 + seq2’                 ‘concat(seq1, seq2)’
                                                          
                                                          
Teste de pertinência        ‘obj in seq’                  ‘contains(seq, obj)’
                                                          
                                                          
Divisão                     ‘a / b’                       ‘truediv(a, b)’
                                                          
                                                          
Divisão                     ‘a // b’                      ‘floordiv(a, b)’
                                                          
                                                          
E bit a bit                 ‘a & b’                       ‘and_(a, b)’
                                                          
                                                          
Ou exclusivo bit a bit      ‘a ^ b’                       ‘xor(a, b)’
                                                          
                                                          
Inversão bit a bit          ‘~ a’                         ‘invert(a)’
                                                          
                                                          
Ou bit a bit                ‘a | b’                       ‘or_(a, b)’
                                                          
                                                          
Exponenciação               ‘a ** b’                      ‘pow(a, b)’
                                                          
                                                          
Identidade                  ‘a is b’                      ‘is_(a, b)’
                                                          
                                                          
Identidade                  ‘a is not b’                  ‘is_not(a, b)’
                                                          
                                                          
Atribuição Indexada         ‘obj[k] = v’                  ‘setitem(obj, k, v)’
                                                          
                                                          
Eliminação indexada         ‘del obj[k]’                  ‘delitem(obj, k)’
                                                          
                                                          
Indexação                   ‘obj[k]’                      ‘getitem(obj, k)’
                                                          
                                                          
Deslocamento à esquerda     ‘a << b’                      ‘lshift(a, b)’
                                                          
                                                          
Módulo                      ‘a % b’                       ‘mod(a, b)’
                                                          
                                                          
Multiplicação               ‘a * b’                       ‘mul(a, b)’
                                                          
                                                          
Multiplicação de matrizes   ‘a @ b’                       ‘matmul(a, b)’
                                                          
                                                          
Negação (aritmética)        ‘- a’                         ‘neg(a)’
                                                          
                                                          
Negação (lógica)            ‘not a’                       ‘not_(a)’
                                                          
                                                          
Positivo                    ‘+ a’                         ‘pos(a)’
                                                          
                                                          
Deslocamento à direita      ‘a >> b’                      ‘rshift(a, b)’
                                                          
                                                          
Atribuição de fatia         ‘seq[i:j] = values’           ‘setitem(seq, slice(i, j), values)’
                                                          
                                                          
Remoção de fatia            ‘del seq[i:j]’                ‘delitem(seq, slice(i, j))’
                                                          
                                                          
Fatiamento                  ‘seq[i:j]’                    ‘getitem(seq, slice(i, j))’
                                                          
                                                          
Formatação de strings       ‘s % obj’                     ‘mod(s, obj)’
                                                          
                                                          
Subtração                   ‘a - b’                       ‘sub(a, b)’
                                                          
                                                          
Teste verdadeiro            ‘obj’                         ‘truth(obj)’
                                                          
                                                          
Ordenação                   ‘a < b’                       ‘lt(a, b)’
                                                          
                                                          
Ordenação                   ‘a <= b’                      ‘le(a, b)’
                                                          
                                                          
Igualdade                   ‘a == b’                      ‘eq(a, b)’
                                                          
                                                          
Diferença                   ‘a != b’                      ‘ne(a, b)’
                                                          
                                                          
Ordenação                   ‘a >= b’                      ‘ge(a, b)’
                                                          
                                                          
Ordenação                   ‘a > b’                       ‘gt(a, b)’
                                                          


File: python.info,  Node: Operadores in-place,  Prev: Mapeando os operadores para suas respectivas funções,  Up: operator — Operadores padrões como funções

5.10.3.2 Operadores in-place
............................

Muitas operações possuem uma versão “in-place”.  Listadas abaixo, as
funções fornecem um acesso mais primitivo aos operadores locais do que a
sintaxe usual; por exemplo, a *note instrução: 2935. ‘x += y’ é
equivalente a ‘x = operator.iadd(x, y)’.  Outra maneira de colocá-lo é
dizendo que ‘z = operator.iadd(x, y)’ é equivalente à instrução composta
‘z = x; z += y’.

Nesses exemplos, note que, quando um método in-place é invocado, a
computação e a atribuição são realizadas em duas etapas separadas.  As
funções in-place listadas abaixo apenas fazem o primeiro passo,
invocando o método in-place.  O segundo passo, a atribuição, não é
tratado.

Para os casos imutáveis, como as strings, números e tuplas, o valor
atualizado será calculado, mas não será atribuído de volta à variável de
entrada:

     >>> a = 'hello'
     >>> iadd(a, ' world')
     'hello world'
     >>> a
     'hello'

Para alvos mutáveis tal como listas e dicionários, o método in-place vai
realizar a atualização, então nenhuma atribuição subsequente é
necessária:

     >>> s = ['h', 'e', 'l', 'l', 'o']
     >>> iadd(s, [' ', 'w', 'o', 'r', 'l', 'd'])
     ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
     >>> s
     ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']

 -- Função: operator.iadd (a, b)
 -- Função: operator.__iadd__ (a, b)

     ‘a = iadd(a, b)’ é equivalente a ‘a += b’.

 -- Função: operator.iand (a, b)
 -- Função: operator.__iand__ (a, b)

     ‘a = iand(a, b)’ é equivalente a ‘a &= b’.

 -- Função: operator.iconcat (a, b)
 -- Função: operator.__iconcat__ (a, b)

     ‘a = iconcat(a, b)’ é equivalente a ‘a += b’ onde 'a' e 'b' são
     sequências.

 -- Função: operator.ifloordiv (a, b)
 -- Função: operator.__ifloordiv__ (a, b)

     ‘a = ifloordiv(a, b)’ é equivalente a ‘a //= b’.

 -- Função: operator.ilshift (a, b)
 -- Função: operator.__ilshift__ (a, b)

     ‘a = ilshift(a, b)’ é equivalente a ‘a <<= b’.

 -- Função: operator.imod (a, b)
 -- Função: operator.__imod__ (a, b)

     ‘a = imod(a, b)’ é equivalente a ‘a %= b’.

 -- Função: operator.imul (a, b)
 -- Função: operator.__imul__ (a, b)

     ‘a = imul(a, b)’ é equivalente a ‘a *= b’.

 -- Função: operator.imatmul (a, b)
 -- Função: operator.__imatmul__ (a, b)

     ‘a = imatmul(a, b)’ é equivalente a ‘a @= b’.

     Adicionado na versão 3.5.

 -- Função: operator.ior (a, b)
 -- Função: operator.__ior__ (a, b)

     ‘a = ior(a, b)’ é equivalente a ‘a |= b’.

 -- Função: operator.ipow (a, b)
 -- Função: operator.__ipow__ (a, b)

     ‘a = ipow(a, b)’ é equivalente a ‘a **= b’.

 -- Função: operator.irshift (a, b)
 -- Função: operator.__irshift__ (a, b)

     ‘a = irshift(a, b)’ é equivalente a ‘a >>= b’.

 -- Função: operator.isub (a, b)
 -- Função: operator.__isub__ (a, b)

     ‘a = isub(a, b)’ é equivalente a ‘a -= b’.

 -- Função: operator.itruediv (a, b)
 -- Função: operator.__itruediv__ (a, b)

     ‘a = itruediv(a, b)’ é equivalente a ‘a /= b’.

 -- Função: operator.ixor (a, b)
 -- Função: operator.__ixor__ (a, b)

     ‘a = ixor(a, b)’ é equivalente a ‘a ^= b’.


File: python.info,  Node: Acesso a arquivos e diretórios,  Next: Persistência de Dados,  Prev: Módulos de Programação Funcional,  Up: A Biblioteca Padrão do Python

5.11 Acesso a arquivos e diretórios
===================================

Os módulos descritos neste capítulo dizem respeito aos arquivos e
diretórios no disco.  Por exemplo, existem módulos para ler as
propriedades dos arquivos, manipular o caminhos de forma multiplataforma
e para criar arquivos temporários.  A lista completa de módulos neste
capítulo é:

* Menu:

* pathlib — Caminhos do sistema de arquivos orientados a objetos::
* os.path — Manipulações comuns de nomes de caminhos: os path — Manipulações comuns de nomes de caminhos.
* stat — Interpretando resultados de stat(): stat — Interpretando resultados de stat.
* filecmp — Comparações de arquivos e diretórios::
* tempfile — Generate temporary files and directories::
* glob — Expansão de padrão de nome de arquivo no estilo Unix::
* fnmatch — Correspondência de padrões de nome de arquivo Unix::
* linecache — Acesso aleatório a linhas de texto::
* shutil — Operações de arquivo de alto nível::


File: python.info,  Node: pathlib — Caminhos do sistema de arquivos orientados a objetos,  Next: os path — Manipulações comuns de nomes de caminhos,  Up: Acesso a arquivos e diretórios

5.11.1 ‘pathlib’ — Caminhos do sistema de arquivos orientados a objetos
-----------------------------------------------------------------------

Adicionado na versão 3.4.

'Código-fonte:' Lib/pathlib/(1)

__________________________________________________________________

Este módulo oferece classes que representam caminhos de sistema de
arquivos com semântica apropriada para diferentes sistemas operacionais.
As classes de caminho são divididas entre *note caminhos puros: 2957,
que fornecem operações puramente computacionais sem E/S, e *note
caminhos concretos: 2958, que herdam de caminhos puros, mas também
fornecem operações de E/S.

[image src="python-figures/pathlib-inheritance.png" alt="Diagrama de herança mostrando as classes disponíveis em pathlib. A classe mais básica é PurePath, que tem três subclasses diretas: PurePosixPath, PureWindowsPath e Path. Além dessas quatro classes, há duas classes que usam herança múltipla: subclasses de PosixPath chamadas PurePosixPath e Path, e subclasses de WindowsPath chamadas PureWindowsPath e Path."]


Se você nunca usou este módulo antes ou apenas não tem certeza de qual
classe é a certa para sua tarefa, provavelmente *note Path: 229. é o que
você precisa.  Esta classe instancia um *note caminho concreto: 2958.
para a plataforma em que o código está sendo executado.

Caminhos puros são úteis em alguns casos especiais.  Por exemplo:

  1. Se você deseja manipular os caminhos do Windows em uma máquina Unix
     (ou vice-versa).  Você não pode instanciar *note WindowsPath: 2959.
     quando está no Unix, mas você pode instanciar *note
     PureWindowsPath: 17f7.

  2. Você quer ter certeza de que seu código apenas manipula caminhos,
     sem realmente acessar o sistema operacional.  Nesse caso,
     instanciar uma das classes puras pode ser útil, pois elas
     simplesmente não têm nenhuma operação de acesso ao sistema
     operacional.

Ver também
..........

PEP 428(2): O módulo pathlib – caminhos de sistema de arquivos
orientados a objetos.

Ver também
..........

Para manipulação de caminho de baixo nível em strings, você também pode
usar o módulo *note os.path: a2.

* Menu:

* Uso básico::
* Exceções: Exceções<6>.
* Caminhos puros::
* Caminhos concretos::
* Linguagem de padrões::
* Comparação com o módulo glob::
* Comparação com os módulos os e os.path: Comparação com os módulos os e os path.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/pathlib/

   (2) https://peps.python.org/pep-0428/


File: python.info,  Node: Uso básico,  Next: Exceções<6>,  Up: pathlib — Caminhos do sistema de arquivos orientados a objetos

5.11.1.1 Uso básico
...................

Importando a classe principal:

     >>> from pathlib import Path

Listando os subdiretórios:

     >>> p = Path('.')
     >>> [x for x in p.iterdir() if x.is_dir()]
     [PosixPath('.hg'), PosixPath('docs'), PosixPath('dist'),
      PosixPath('__pycache__'), PosixPath('build')]

Listando os arquivos fontes do Python e sua árvore de diretórios:

     >>> list(p.glob('**/*.py'))
     [PosixPath('test_pathlib.py'), PosixPath('setup.py'),
      PosixPath('pathlib.py'), PosixPath('docs/conf.py'),
      PosixPath('build/lib/pathlib.py')]

Navegando dentro da árvore de diretórios:

     >>> p = Path('/etc')
     >>> q = p / 'init.d' / 'reboot'
     >>> q
     PosixPath('/etc/init.d/reboot')
     >>> q.resolve()
     PosixPath('/etc/rc.d/init.d/halt')

Consultando as propriedades do path:

     >>> q.exists()
     True
     >>> q.is_dir()
     False

Abrindo um arquivo:

     >>> with q.open() as f: f.readline()
     ...
     '#!/bin/bash\n'


File: python.info,  Node: Exceções<6>,  Next: Caminhos puros,  Prev: Uso básico,  Up: pathlib — Caminhos do sistema de arquivos orientados a objetos

5.11.1.2 Exceções
.................

 -- Exceção: pathlib.UnsupportedOperation

     Uma exceção herdada de *note NotImplementedError: 228. que é
     levantada quando uma operação não suportada é chamada em um objeto
     caminho.

     Adicionado na versão 3.13.


File: python.info,  Node: Caminhos puros,  Next: Caminhos concretos,  Prev: Exceções<6>,  Up: pathlib — Caminhos do sistema de arquivos orientados a objetos

5.11.1.3 Caminhos puros
.......................

Objetos de caminho puro fornecem operações de manipulação de caminho
que, na verdade, não acessam um sistema de arquivos.  Existem três
maneiras de acessar essas classes, que também chamamos de 'sabores':

 -- Classe: pathlib.PurePath (*pathsegments)

     Uma classe genérica que representa o tipo de caminho do sistema (ao
     instanciá-la, cria-se uma *note PurePosixPath: 295d. ou uma *note
     PureWindowsPath: 17f7.):

          >>> PurePath('setup.py')      # Executando em uma máquina Unix
          PurePosixPath('setup.py')

     Cada elemento de 'pathsegments' pode ser uma string representando
     um segmento de caminho, um objeto que implementa a interface que
     retorna uma string ou um objeto implementando a interface *note
     os.PathLike: c6c, onde o método *note __fspath__(): c6d. retorna
     uma string, como outro objeto caminho:

          >>> PurePath('foo', 'algum/caminho', 'bar')
          PurePosixPath('foo/algum/caminho/bar')
          >>> PurePath(Path('foo'), Path('bar'))
          PurePosixPath('foo/bar')

     Quando 'pathsegments' está vazio, o diretório atual é presumido:

          >>> PurePath()
          PurePosixPath('.')

     Se um segmento for um caminho absoluto, todos os segmentos
     anteriores serão ignorados (como *note os.path.join(): 171f.):

          >>> PurePath('/etc', '/usr', 'lib64')
          PurePosixPath('/usr/lib64')
          >>> PureWindowsPath('c:/Windows', 'd:bar')
          PureWindowsPath('d:bar')

     No Windows, a unidade não é redefinida quando um segmento de
     caminho relativo enraizado (por exemplo, ‘r'\foo'’) é encontrado:

          >>> PureWindowsPath('c:/Windows', '/Program Files')
          PureWindowsPath('c:/Program Files')

     Barras espúrias e pontos simples são recolhidos, mas pontos duplos
     (‘'..'’) e barras duplas iniciais (‘'//'’) não são, pois isso
     mudaria o significado de um caminho por vários motivos (por
     exemplo, links simbólicos, caminhos UNC):

          >>> PurePath('foo//bar')
          PurePosixPath('foo/bar')
          >>> PurePath('//foo/bar')
          PurePosixPath('//foo/bar')
          >>> PurePath('foo/./bar')
          PurePosixPath('foo/bar')
          >>> PurePath('foo/../bar')
          PurePosixPath('foo/../bar')

     (uma abordagem ingênua seria criar ‘PurePosixPath('foo/../bar')’
     equivalente a ‘PurePosixPath('bar')’, o que é errado se ‘foo’ for
     um link simbólico para outro diretório)

     Objetos caminho puro implementam a interface *note os.PathLike:
     c6c, permitindo que sejam usados em qualquer lugar em que a
     interface seja aceita.

     Alterado na versão 3.6: Adicionado suporte para a interface *note
     os.PathLike: c6c.

 -- Classe: pathlib.PurePosixPath (*pathsegments)

     Uma subclasse de *note PurePath: 4a6, este tipo de caminho
     representa caminhos de sistema de arquivos não Windows:

          >>> PurePosixPath('/etc/hosts')
          PurePosixPath('/etc/hosts')

     'pathsegments' é especificado de forma similar para *note PurePath:
     4a6.

 -- Classe: pathlib.PureWindowsPath (*pathsegments)

     Uma subclasse de *note PurePath: 4a6, este tipo de caminho
     representa os caminhos do sistema de arquivos do Windows, incluindo
     Caminhos UNC(1):

          >>> PureWindowsPath('c:/', 'Users', 'Ximénez')
          PureWindowsPath('c:/Users/Ximénez')
          >>> PureWindowsPath('//servidor/compartilhamento/arquivo')
          PureWindowsPath('//servidor/compartilhamento/arquivo')

     'pathsegments' é especificado de forma similar para *note PurePath:
     4a6.

Independentemente do sistema em que você está usando, você pode
instanciar todas essas classes, uma vez que elas não fornecem nenhuma
operação que faça chamadas de sistema.

* Menu:

* Propriedades gerais::
* Operadores: Operadores<2>.
* Acessando partes individuais::
* Métodos e propriedades::

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Path_(computing)#UNC


File: python.info,  Node: Propriedades gerais,  Next: Operadores<2>,  Up: Caminhos puros

5.11.1.4 Propriedades gerais
............................

Os caminhos são imutáveis e *note hasheáveis: 610.  Os caminhos do mesmo
sabor são comparáveis e ordenáveis.  Essas propriedades respeitam a
semântica de caixa alta e baixa do sabor:

     >>> PurePosixPath('foo') == PurePosixPath('FOO')
     False
     >>> PureWindowsPath('foo') == PureWindowsPath('FOO')
     True
     >>> PureWindowsPath('FOO') in { PureWindowsPath('foo') }
     True
     >>> PureWindowsPath('C:') < PureWindowsPath('d:')
     True

Caminhos de um sabor diferente são comparados de forma desigual e não
podem ser ordenados:

     >>> PureWindowsPath('foo') == PurePosixPath('foo')
     False
     >>> PureWindowsPath('foo') < PurePosixPath('foo')
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: '<' not supported between instances of 'PureWindowsPath' and 'PurePosixPath'


File: python.info,  Node: Operadores<2>,  Next: Acessando partes individuais,  Prev: Propriedades gerais,  Up: Caminhos puros

5.11.1.5 Operadores
...................

O operador barra ajuda a criar caminhos filhos, como *note
os.path.join(): 171f.  Se o argumento for um caminho absoluto, o caminho
anterior será ignorado.  No Windows, a unidade não é redefinida quando o
argumento é um caminho relativo enraizado (por exemplo, ‘r'\foo'’):

     >>> p = PurePath('/etc')
     >>> p
     PurePosixPath('/etc')
     >>> p / 'init.d' / 'apache2'
     PurePosixPath('/etc/init.d/apache2')
     >>> q = PurePath('bin')
     >>> '/usr' / q
     PurePosixPath('/usr/bin')
     >>> p / '/um_caminho_absoluto'
     PurePosixPath('/um_caminho_absoluto')
     >>> PureWindowsPath('c:/Windows', '/Program Files')
     PureWindowsPath('c:/Program Files')

Um objeto de caminho pode ser usado em qualquer lugar em que um objeto
implementando *note os.PathLike: c6c. seja aceito:

     >>> import os
     >>> p = PurePath('/etc')
     >>> os.fspath(p)
     '/etc'

A representação de string de um caminho é o próprio caminho do sistema
de arquivos bruto (na forma nativa, por exemplo, com contrabarras no
Windows), que você pode passar para qualquer função usando um caminho de
arquivo como uma string:

     >>> p = PurePath('/etc')
     >>> str(p)
     '/etc'
     >>> p = PureWindowsPath('c:/Program Files')
     >>> str(p)
     'c:\\Program Files'

Da mesma forma, chamar *note bytes: 1c2. em um caminho fornece o caminho
do sistema de arquivos bruto como um objeto bytes, codificado por *note
os.fsencode(): c70.:

     >>> bytes(p)
     b'/etc'

     Nota: A chamada de *note bytes: 1c2. só é recomendada no Unix.  No
     Windows, a forma Unicode é a representação canônica dos caminhos do
     sistema de arquivos.


File: python.info,  Node: Acessando partes individuais,  Next: Métodos e propriedades,  Prev: Operadores<2>,  Up: Caminhos puros

5.11.1.6 Acessando partes individuais
.....................................

Para acessar as “partes” individuais (componentes) de um caminho, use a
seguinte propriedade:

 -- Atributo: PurePath.parts

     Uma tupla que dá acesso aos vários componentes do caminho:

          >>> p = PurePath('/usr/bin/python3')
          >>> p.parts
          ('/', 'usr', 'bin', 'python3')

          >>> p = PureWindowsPath('c:/Program Files/PSF')
          >>> p.parts
          ('c:\\', 'Program Files', 'PSF')

     (observe como a unidade e a raiz local são reagrupadas em uma única
     parte)


File: python.info,  Node: Métodos e propriedades,  Prev: Acessando partes individuais,  Up: Caminhos puros

5.11.1.7 Métodos e propriedades
...............................

Caminhos puros fornecem os seguintes métodos e propriedades:

 -- Atributo: PurePath.parser

     A implementação do módulo *note os.path: a2. usado para análise e
     junção de caminhos de baixo nível: ‘posixpath’ ou ‘ntpath’.

     Adicionado na versão 3.13.

 -- Atributo: PurePath.drive

     Uma string que representa a letra ou nome da unidade, se houver:

          >>> PureWindowsPath('c:/Program Files/').drive
          'c:'
          >>> PureWindowsPath('/Program Files/').drive
          ''
          >>> PurePosixPath('/etc').drive
          ''

     Os compartilhamentos UNC também são considerados unidades:

          >>> PureWindowsPath('//host/compartilhamento/foo.txt').drive
          '\\\\host\\compartilhamento'

 -- Atributo: PurePath.root

     Uma string que representa a raiz (local ou global), se houver:

          >>> PureWindowsPath('c:/Program Files/').root
          '\\'
          >>> PureWindowsPath('c:Program Files/').root
          ''
          >>> PurePosixPath('/etc').root
          '/'

     Os compartilhamentos UNC sempre têm uma raiz:

          >>> PureWindowsPath('//host/compartilhamento').root
          '\\'

     Se o caminho começa com mais de duas barras sucessivas, *note
     PurePosixPath: 295d. as recolhe:

          >>> PurePosixPath('//etc').root
          '//'
          >>> PurePosixPath('///etc').root
          '/'
          >>> PurePosixPath('////etc').root
          '/'

          Nota: Este comportamento está em conformidade com o parágrafo
          4.11 Pathname Resolution(1) do 'The Open Group Base
          Specifications Issue 6':

          '“Um nome de caminho que começa com duas barras sucessivas
          pode ser interpretado de maneira definida pela implementação,
          embora mais de duas barras iniciais devam ser tratadas como
          uma única barra.”'

 -- Atributo: PurePath.anchor

     A concatenação da unidade e da raiz:

          >>> PureWindowsPath('c:/Program Files/').anchor
          'c:\\'
          >>> PureWindowsPath('c:Program Files/').anchor
          'c:'
          >>> PurePosixPath('/etc').anchor
          '/'
          >>> PureWindowsPath('//host/compartilhamento').anchor
          '\\\\host\\compartilhamento\\'

 -- Atributo: PurePath.parents

     Uma sequência imutável que fornece acesso aos ancestrais lógicos do
     caminho:

          >>> p = PureWindowsPath('c:/foo/bar/setup.py')
          >>> p.parents[0]
          PureWindowsPath('c:/foo/bar')
          >>> p.parents[1]
          PureWindowsPath('c:/foo')
          >>> p.parents[2]
          PureWindowsPath('c:/')

     Alterado na versão 3.10: A sequência pai agora tem suporte *note
     fatias: 2313. e valores de índice negativos.

 -- Atributo: PurePath.parent

     O pai lógico do caminho:

          >>> p = PurePosixPath('/a/b/c/d')
          >>> p.parent
          PurePosixPath('/a/b/c')

     Você não pode passar por uma âncora ou caminho vazio:

          >>> p = PurePosixPath('/')
          >>> p.parent
          PurePosixPath('/')
          >>> p = PurePosixPath('.')
          >>> p.parent
          PurePosixPath('.')

          Nota: Esta é uma operação puramente lexical, daí o seguinte
          comportamento:

               >>> p = PurePosixPath('foo/..')
               >>> p.parent
               PurePosixPath('foo')

          Se você deseja percorrer um caminho arbitrário do sistema de
          arquivos para cima, é recomendável primeiro chamar *note
          Path.resolve(): 17ef. para resolver os links simbólicos e
          eliminar os componentes ‘".."’.

 -- Atributo: PurePath.name

     Uma string que representa o componente do caminho final, excluindo
     a unidade e a raiz, se houver:

          >>> PurePosixPath('minha/biblioteca/setup.py').name
          'setup.py'

     Nomes de unidades UNC não são considerados::

          >>> PureWindowsPath('//algum/compartilhamento/setup.py').name
          'setup.py'
          >>> PureWindowsPath('//algum/compartilhamento').name
          ''

 -- Atributo: PurePath.suffix

     A última parte separada por pontos do componente final, se houver:

          >>> PurePosixPath('minha/biblioteca/setup.py').suffix
          '.py'
          >>> PurePosixPath('minha/biblioteca.tar.gz').suffix
          '.gz'
          >>> PurePosixPath('minha/biblioteca').suffix
          ''

     Isso é comumente chamado de extensão de arquivo.

 -- Atributo: PurePath.suffixes

     Uma lista dos sufixos do caminho, com frequência chamados de
     extensões de arquivo:

          >>> PurePosixPath('minha/biblioteca.tar.gar').suffixes
          ['.tar', '.gar']
          >>> PurePosixPath('minha/biblioteca.tar.gz').suffixes
          ['.tar', '.gz']
          >>> PurePosixPath('minha/biblioteca').suffixes
          []

 -- Atributo: PurePath.stem

     O componente final do caminho, sem seu sufixo:

          >>> PurePosixPath('minha/biblioteca.tar.gz').stem
          'library.tar'
          >>> PurePosixPath('minha/biblioteca.tar').stem
          'library'
          >>> PurePosixPath('minha/biblioteca').stem
          'library'

 -- Método: PurePath.as_posix ()

     Retorna uma representação de string do caminho com barras (‘/’):

          >>> p = PureWindowsPath('c:\\windows')
          >>> str(p)
          'c:\\windows'
          >>> p.as_posix()
          'c:/windows'

 -- Método: PurePath.is_absolute ()

     Retorna se o caminho é absoluto ou não.  Um caminho é considerado
     absoluto se tiver uma raiz e (se o tipo permitir) uma unidade:

          >>> PurePosixPath('/a/b').is_absolute()
          True
          >>> PurePosixPath('a/b').is_absolute()
          False

          >>> PureWindowsPath('c:/a/b').is_absolute()
          True
          >>> PureWindowsPath('/a/b').is_absolute()
          False
          >>> PureWindowsPath('c:').is_absolute()
          False
          >>> PureWindowsPath('//some/share').is_absolute()
          True

 -- Método: PurePath.is_relative_to (other)

     Retorna se este caminho é ou não relativo a outro caminho,
     representado por 'other'.

          >>> p = PurePath('/etc/passwd')
          >>> p.is_relative_to('/etc')
          True
          >>> p.is_relative_to('/usr')
          False

     Este método é baseado em string; ele não acessa o sistema de
     arquivos nem trata segmentos “‘..’” especialmente.  O código a
     seguir é equivalente:

          >>> u = PurePath('/usr')
          >>> u == p or u in p.parents
          False

     Adicionado na versão 3.9.

     Descontinuado desde a versão 3.12, será removido na versão 3.14: A
     passagem de argumentos adicionais está descontinuada; se
     fornecidos, eles são unidos com 'other'.

 -- Método: PurePath.is_reserved ()

     Com *note PureWindowsPath: 17f7, retorna ‘True’ se o caminho é
     considerado reservado no Windows, ‘False’ caso contrário.  Com
     *note PurePosixPath: 295d, ‘False’ é sempre retornado.

     Alterado na versão 3.13: Nomes de caminho do Windows que contêm
     dois pontos, ou terminam com um ponto ou um espaço, são
     considerados reservados.  Caminhos UNC podem ser reservados.

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     Este método está descontinuado; use *note os.path.isreserved():
     223. para detectar caminhos reservados no Windows.

 -- Método: PurePath.joinpath (*pathsegments)

     Chamar este método é equivalente a combinar o caminho com cada um
     dos 'pathsegments' por vez:

          >>> PurePosixPath('/etc').joinpath('passwd')
          PurePosixPath('/etc/passwd')
          >>> PurePosixPath('/etc').joinpath(PurePosixPath('passwd'))
          PurePosixPath('/etc/passwd')
          >>> PurePosixPath('/etc').joinpath('init.d', 'apache2')
          PurePosixPath('/etc/init.d/apache2')
          >>> PureWindowsPath('c:').joinpath('/Program Files')
          PureWindowsPath('c:/Program Files')

 -- Método: PurePath.full_match (pattern, *, case_sensitive=None)

     Compara esse caminho com o padrão de estilo glob fornecido.
     Retorna ‘True’ se a correspondência for bem-sucedida, ‘False’ caso
     contrário.  Por exemplo:

          >>> PurePath('a/b.py').full_match('a/*.py')
          True
          >>> PurePath('a/b.py').full_match('*.py')
          False
          >>> PurePath('/a/b/c.py').full_match('/a/**')
          True
          >>> PurePath('/a/b/c.py').full_match('**/*.py')
          True

     Ver também
     ..........

     Documentação de *note Linguagem de padrões: 296c.

     Tal como acontece com outros métodos, a distinção entre maiúsculas
     e minúsculas segue os padrões da plataforma:

          >>> PurePosixPath('b.py').full_match('*.PY')
          False
          >>> PureWindowsPath('b.py').full_match('*.PY')
          True

     Defina 'case_sensitive' como ‘True’ ou ‘False’ para substituir esse
     comportamento.

     Adicionado na versão 3.13.

 -- Método: PurePath.match (pattern, *, case_sensitive=None)

     Compara esse caminho com o padrão no recursivo de estilo glob
     fornecido.  Retorna ‘True’ se a correspondência for bem-sucedida,
     ‘False’ caso contrário.

     Este método é semelhante a *note full_match(): 22b, mas padrões
     vazios não são permitidos (*note ValueError: 202. é levantada), o
     curinga recursivo “‘**’” não é suportado (ele age como o “‘*’” não
     recursivo) e, se um padrão relativo for fornecido, a
     correspondência será feita da direita:

          >>> PurePath('a/b.py').match('*.py')
          True
          >>> PurePath('/a/b/c.py').match('b/*.py')
          True
          >>> PurePath('/a/b/c.py').match('a/*.py')
          False

     Alterado na versão 3.12: O parâmetro 'pattern' aceita um *note
     objeto caminho ou similar: 2a0.

     Alterado na versão 3.12: O parâmetro 'case_sensitive' foi
     adicionado.

 -- Método: PurePath.relative_to (other, walk_up=False)

     Calcula uma versão deste caminho em relação ao caminho representado
     por 'other'.  Se for impossível, *note ValueError: 202. é
     levantada:

          >>> p = PurePosixPath('/etc/passwd')
          >>> p.relative_to('/')
          PurePosixPath('etc/passwd')
          >>> p.relative_to('/etc')
          PurePosixPath('passwd')
          >>> p.relative_to('/usr')
          Traceback (most recent call last):
            File "<stdin>", line 1, in <module>
            File "pathlib.py", line 941, in relative_to
              raise ValueError(error_message.format(str(self), str(formatted)))
          ValueError: '/etc/passwd' is not in the subpath of '/usr' OR one path is relative and the other is absolute.

     Quando 'walk_up' é falso (o padrão), o caminho deve começar com
     'other'.  Quando o argumento é verdadeiro, entradas ‘..’ podem ser
     adicionadas para formar o caminho relativo.  Em todos os outros
     casos, como os caminhos que fazem referência a unidades diferentes,
     *note ValueError: 202. é levantada.:

          >>> p.relative_to('/usr', walk_up=True)
          PurePosixPath('../etc/passwd')
          >>> p.relative_to('foo', walk_up=True)
          Traceback (most recent call last):
            File "<stdin>", line 1, in <module>
            File "pathlib.py", line 941, in relative_to
              raise ValueError(error_message.format(str(self), str(formatted)))
          ValueError: '/etc/passwd' is not on the same drive as 'foo' OR one path is relative and the other is absolute.

          Aviso: Esta função faz parte de *note PurePath: 4a6. e
          funciona com strings.  Ela não verifica ou acessa a estrutura
          do arquivo subjacente.  Isso pode impactar a opção 'walk_up',
          pois ela presume que não há links simbólicos presentes no
          caminho; chame *note resolve(): 17ef. primeiro se necessário
          para resolver links simbólicos.

     Alterado na versão 3.12: O parâmetro 'walk_up' foi adicionado (o
     comportamento antigo é o mesmo de ‘walk_up=False’).

     Descontinuado desde a versão 3.12, será removido na versão 3.14: A
     passagem de argumentos posicionais adicionais está descontinuada;
     se fornecidos, eles são unidos com 'other'.

 -- Método: PurePath.with_name (name)

     Retorna um novo caminho com o *note name: 2966. alterado.  Se o
     caminho original não tiver um nome, ValueError é levantada:

          >>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')
          >>> p.with_name('setup.py')
          PureWindowsPath('c:/Downloads/setup.py')
          >>> p = PureWindowsPath('c:/')
          >>> p.with_name('setup.py')
          Traceback (most recent call last):
            File "<stdin>", line 1, in <module>
            File "/home/antoine/cpython/default/Lib/pathlib.py", line 751, in with_name
              raise ValueError("%r has an empty name" % (self,))
          ValueError: PureWindowsPath('c:/') has an empty name

 -- Método: PurePath.with_stem (stem)

     Retorna um novo caminho com o *note stem: 2969. alterado.  Se o
     caminho original não tiver um nome, ValueError é levantada:

          >>> p = PureWindowsPath('c:/Downloads/draft.txt')
          >>> p.with_stem('final')
          PureWindowsPath('c:/Downloads/final.txt')
          >>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')
          >>> p.with_stem('lib')
          PureWindowsPath('c:/Downloads/lib.gz')
          >>> p = PureWindowsPath('c:/')
          >>> p.with_stem('')
          Traceback (most recent call last):
            File "<stdin>", line 1, in <module>
            File "/home/antoine/cpython/default/Lib/pathlib.py", line 861, in with_stem
              return self.with_name(stem + self.suffix)
            File "/home/antoine/cpython/default/Lib/pathlib.py", line 851, in with_name
              raise ValueError("%r has an empty name" % (self,))
          ValueError: PureWindowsPath('c:/') has an empty name

     Adicionado na versão 3.9.

 -- Método: PurePath.with_suffix (suffix)

     Retorna um novo caminho com o *note suffix: 2967. alterado.  Se o
     caminho original não tiver um sufixo, o novo 'suffixo' será
     anexado.  Se o 'suffix' for uma string vazia, o sufixo original
     será removido:

          >>> p = PureWindowsPath('c:/Downloads/pathlib.tar.gz')
          >>> p.with_suffix('.bz2')
          PureWindowsPath('c:/Downloads/pathlib.tar.bz2')
          >>> p = PureWindowsPath('README')
          >>> p.with_suffix('.txt')
          PureWindowsPath('README.txt')
          >>> p = PureWindowsPath('README.txt')
          >>> p.with_suffix('')
          PureWindowsPath('README')

 -- Método: PurePath.with_segments (*pathsegments)

     Cria um novo objeto caminho do mesmo tipo combinando os
     'pathsegments' fornecidos.  Este método é chamado sempre que um
     caminho derivado é criado, como de *note parent: 1821. e *note
     relative_to(): 2ca.  Subclasses podem substituir este método para
     passar informações para caminhos derivados, por exemplo:

          from pathlib import PurePosixPath

          class MyPath(PurePosixPath):
              def __init__(self, *pathsegments, session_id):
                  super().__init__(*pathsegments)
                  self.session_id = session_id

              def with_segments(self, *pathsegments):
                  return type(self)(*pathsegments, session_id=self.session_id)

          etc = MyPath('/etc', session_id=42)
          hosts = etc / 'hosts'
          print(hosts.session_id)  # 42

     Adicionado na versão 3.12.

   ---------- Footnotes ----------

   (1) 
https://pubs.opengroup.org/onlinepubs/009695399/basedefs/xbd_chap04.html#tag_04_11


File: python.info,  Node: Caminhos concretos,  Next: Linguagem de padrões,  Prev: Caminhos puros,  Up: pathlib — Caminhos do sistema de arquivos orientados a objetos

5.11.1.8 Caminhos concretos
...........................

Caminhos concretos são subclasses das classes de caminho puro.  Além das
operações fornecidas por este último, eles também fornecem métodos para
fazer chamadas de sistema em objetos de caminho.  Existem três maneiras
de instanciar caminhos concretos:

 -- Classe: pathlib.Path (*pathsegments)

     Uma subclasse de *note PurePath: 4a6, esta classe representa
     caminhos concretos do tipo de caminho do sistema (instanciando-o
     cria uma *note PosixPath: 296e. ou uma *note WindowsPath: 2959.):

          >>> Path('setup.py')
          PosixPath('setup.py')

     'pathsegments' é especificado de forma similar para *note PurePath:
     4a6.

 -- Classe: pathlib.PosixPath (*pathsegments)

     Uma subclasse de *note Path: 229. e *note PurePosixPath: 295d, esta
     classe representa caminhos concretos de sistemas de arquivos
     não-Windows:

          >>> PosixPath('/etc/hosts')
          PosixPath('/etc/hosts')

     'pathsegments' é especificado de forma similar para *note PurePath:
     4a6.

     Alterado na versão 3.13: Levanta *note UnsupportedOperation: 227.
     no Windows.  Em versões anteriores, *note NotImplementedError: 228.
     era levantada em vez disso.

 -- Classe: pathlib.WindowsPath (*pathsegments)

     Uma subclasse de *note Path: 229. e *note PureWindowsPath: 17f7,
     esta classe representa caminhos concretos de sistemas de arquivos
     do Windows:

          >>> WindowsPath('c:/', 'Users', 'Ximénez')
          WindowsPath('c:/Users/Ximénez')

     'pathsegments' é especificado de forma similar para *note PurePath:
     4a6.

     Alterado na versão 3.13: Levanta *note UnsupportedOperation: 227.
     em plataformas não-Windows.  Em versões anteriores, *note
     NotImplementedError: 228. era levantada em vez disso.

Você só pode instanciar o tipo de classe que corresponde ao seu sistema
(permitir chamadas de sistema em tipos de caminho não compatíveis pode
levar a bugs ou falhas em sua aplicação):

     >>> import os
     >>> os.name
     'posix'
     >>> Path('setup.py')
     PosixPath('setup.py')
     >>> PosixPath('setup.py')
     PosixPath('setup.py')
     >>> WindowsPath('setup.py')
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
       File "pathlib.py", line 798, in __new__
         % (cls.__name__,))
     UnsupportedOperation: cannot instantiate 'WindowsPath' on your system

Alguns métodos de caminho concretos podem levantar um *note OSError:
417. se uma chamada de sistema falhar (por exemplo, porque o caminho não
existe).

* Menu:

* Analisando e gerando URIs::
* Expandindo e resolvendo caminhos::
* Consultando tipo de arquivo e status::
* Lendo e escrevendo arquivos::
* Lendo diretórios::
* Criando arquivos e diretórios::
* Renomeando e excluindo::
* Permissões e propriedade::


File: python.info,  Node: Analisando e gerando URIs,  Next: Expandindo e resolvendo caminhos,  Up: Caminhos concretos

5.11.1.9 Analisando e gerando URIs
..................................

Objetos caminho concretos podem ser criados e representados como URIs de
‘file’ em conformidade com RFC 8089(1).

     Nota: URIs de arquivos não são portáteis entre máquinas com
     diferentes *note codificações de sistema de arquivos: 2970.

 -- Método: classmethod Path.from_uri (uri)

     Retorna um novo objeto de caminho a partir da análise sintática de
     um URI ‘file’.  Por exemplo:

          >>> p = Path.from_uri('file:///etc/hosts')
          PosixPath('/etc/hosts')

     No Windows, os caminhos do dispositivo DOS e UNC podem ser
     analisados a partir de URIs:

          >>> p = Path.from_uri('file:///c:/windows')
          WindowsPath('c:/windows')
          >>> p = Path.from_uri('file://servidor/compartilhamento')
          WindowsPath('//servidor/compartilhamento')

     Várias formas variantes são suportadas:

          >>> p = Path.from_uri('file:////servidor/compartilhamento')
          WindowsPath('//servidor/compartilhamento')
          >>> p = Path.from_uri('file://///servidor/compartilhamento')
          WindowsPath('//servidor/compartilhamento')
          >>> p = Path.from_uri('file:c:/windows')
          WindowsPath('c:/windows')
          >>> p = Path.from_uri('file:/c|/windows')
          WindowsPath('c:/windows')

     *note ValueError: 202. é levantada se o URI não começar com ‘file:’
     ou se o caminho analisado não for absoluto.

     Adicionado na versão 3.13.

 -- Método: Path.as_uri ()

     Representa o caminho como um URI ‘file’.  *note ValueError: 202. é
     levantada se o caminho não for absoluto.

          >>> p = PosixPath('/etc/passwd')
          >>> p.as_uri()
          'file:///etc/passwd'
          >>> p = WindowsPath('c:/Windows')
          >>> p.as_uri()
          'file:///c:/Windows'

     Por razões históricas, esse método também está disponível em
     objetos *note PurePath: 4a6.  No entanto, seu uso de *note
     os.fsencode(): c70. o torna estritamente impuro.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc8089.html


File: python.info,  Node: Expandindo e resolvendo caminhos,  Next: Consultando tipo de arquivo e status,  Prev: Analisando e gerando URIs,  Up: Caminhos concretos

5.11.1.10 Expandindo e resolvendo caminhos
..........................................

 -- Método: classmethod Path.home ()

     Retorna um novo objeto caminho representando o diretório pessoal do
     usuário (conforme retornado por *note os.path.expanduser(): a1e.
     com a construção ‘~’).  Se o diretório pessoal não puder ser
     resolvido, *note RuntimeError: 195. é levantada.

          >>> Path.home()
          PosixPath('/home/antoine')

     Adicionado na versão 3.5.

 -- Método: Path.expanduser ()

     Retorna um novo caminho com as construções ‘~’ e ‘~user’
     expandidas, como retornado por *note os.path.expanduser(): a1e.  Se
     um diretório pessoal não puder ser resolvido, *note RuntimeError:
     195. é levantada.

          >>> p = PosixPath('~/filmes/Monty Python')
          >>> p.expanduser()
          PosixPath('/home/eric/filmes/Monty Python')

     Adicionado na versão 3.5.

 -- Método: classmethod Path.cwd ()

     Retorna um novo objeto caminho que representa o diretório atual
     (conforme retornado por *note os.getcwd(): 1682.):

          >>> Path.cwd()
          PosixPath('/home/antoine/pathlib')

 -- Método: Path.absolute ()

     Torna o caminho absoluto, sem normalização ou resolução de links
     simbólicos.  Retorna um novo objeto de caminho:

          >>> p = Path('tests')
          >>> p
          PosixPath('tests')
          >>> p.absolute()
          PosixPath('/home/antoine/pathlib/tests')

 -- Método: Path.resolve (strict=False)

     Torna o caminho absoluto, resolvendo quaisquer links simbólicos.
     Um novo objeto de caminho é retornado:

          >>> p = Path()
          >>> p
          PosixPath('.')
          >>> p.resolve()
          PosixPath('/home/antoine/pathlib')

     Componentes “‘..’” também são eliminados (este é o único método
     para fazer isso):

          >>> p = Path('docs/../setup.py')
          >>> p.resolve()
          PosixPath('/home/antoine/pathlib/setup.py')

     Se um caminho não existe ou um laço de link simbólico é encontrado,
     e 'strict' é ‘True’, *note OSError: 417. é levantada.  Se 'strict'
     for ‘False’, o caminho será resolvido tanto quanto possível e
     qualquer resto é anexado sem verificar se existe.

     Alterado na versão 3.6: O parâmetro 'strict' foi adicionado
     (comportamento pré-3.6 é estrito).

     Alterado na versão 3.13: Os laços em link simbólico são tratados
     como outros erros: *note OSError: 417. é levantada no modo estrito,
     e nenhuma exceção é levantada no modo não estrito.  Em versões
     anteriores, *note RuntimeError: 195. é levantada não importando o
     valor de 'strict'.

 -- Método: Path.readlink ()

     Retorna o caminho para o qual o link simbólico aponta (conforme
     retornado por *note os.readlink(): 926.):

          >>> p = Path('meulink')
          >>> p.symlink_to('setup.py')
          >>> p.readlink()
          PosixPath('setup.py')

     Adicionado na versão 3.9.

     Alterado na versão 3.13: Levanta *note UnsupportedOperation: 227.
     se *note os.readlink(): 926. não estiver disponível.  Em versões
     anteriores, *note NotImplementedError: 228. era levantada.


File: python.info,  Node: Consultando tipo de arquivo e status,  Next: Lendo e escrevendo arquivos,  Prev: Expandindo e resolvendo caminhos,  Up: Caminhos concretos

5.11.1.11 Consultando tipo de arquivo e status
..............................................

Alterado na versão 3.8: *note exists(): a20, *note is_dir(): 230, *note
is_file(): 22f, *note is_mount(): a21, *note is_symlink(): a22, *note
is_block_device(): a23, *note is_char_device(): a24, *note is_fifo():
a25, *note is_socket(): a26. agora retornam ‘False’ em vez de levantar
uma exceção para caminhos que contêm caracteres não representáveis no
nível do sistema operacional.

 -- Método: Path.stat (*, follow_symlinks=True)

     Retorna um objeto *note os.stat_result: 1509. contendo informações
     sobre este caminho, como *note os.stat(): 4a0.  O resultado é
     consultado em cada chamada para este método.

     Este método normalmente segue links simbólicos; para obter estado
     de um link simbólico, adicione o argumento ‘follow_symlinks=False’,
     ou use *note lstat(): 2974.

          >>> p = Path('setup.py')
          >>> p.stat().st_size
          956
          >>> p.stat().st_mtime
          1327883547.852554

     Alterado na versão 3.10: O parâmetro 'follow_symlinks' foi
     adicionado.

 -- Método: Path.lstat ()

     Como *note Path.stat(): 826, mas, se o caminho apontar para um link
     simbólico, retorna as informações do link simbólico ao invés de seu
     alvo.

 -- Método: Path.exists (*, follow_symlinks=True)

     Retorna ‘True’ se o caminho aponta para um arquivo ou diretório
     existente.

     Este método normalmente segue links simbólicos; para verificar se
     um link simbólico existe, adicione o argumento
     ‘follow_symlinks=False’.

          >>> Path('.').exists()
          True
          >>> Path('setup.py').exists()
          True
          >>> Path('/etc').exists()
          True
          >>> Path('arquivoienxistente').exists()
          False

     Alterado na versão 3.12: O parâmetro 'follow_symlinks' foi
     adicionado.

 -- Método: Path.is_file (*, follow_symlinks=True)

     Retorna ‘True’ se o caminho aponta para um arquivo regular, ‘False’
     se aponta para outro tipo de arquivo.

     ‘False’ também é retornado se o caminho não existir ou se for um
     link simbólico quebrado; outros erros (como erros de permissão) são
     propagados.

     Este método normalmente segue links simbólicos; para excluir links
     simbólicos, adicione o argumento ‘follow_symlinks=False’.

     Alterado na versão 3.13: O parâmetro 'follow_symlinks' foi
     adicionado.

 -- Método: Path.is_dir (*, follow_symlinks=True)

     Retorna ‘True’ se o caminho aponta para um diretório, ‘False’ se
     aponta para outro tipo de arquivo.

     ‘False’ também é retornado se o caminho não existir ou se for um
     link simbólico quebrado; outros erros (como erros de permissão) são
     propagados.

     Este método normalmente segue links simbólicos; para excluir links
     simbólicos para diretórios, adicione o argumento
     ‘follow_symlinks=False’.

     Alterado na versão 3.13: O parâmetro 'follow_symlinks' foi
     adicionado.

 -- Método: Path.is_symlink ()

     Retorna ‘True’ se o caminho apontar para um link simbólico, ‘False’
     caso contrário.

     ‘False’ também é retornado se o caminho não existir; outros erros
     (como erros de permissão) são propagados.

 -- Método: Path.is_junction ()

     Retorna ‘True’ se o caminho apontar para uma junção, e ‘False’ para
     qualquer outro tipo de arquivo.  Atualmente, apenas o Windows dá
     suporte a junções.

     Adicionado na versão 3.12.

 -- Método: Path.is_mount ()

     Retorna ‘True’ se o caminho for um 'ponto de montagem': um ponto em
     um sistema de arquivos onde um sistema de arquivos diferente foi
     montado.  No POSIX, a função verifica se o pai do 'path',
     ‘path/..’, está em um dispositivo diferente de 'path', ou se
     ‘path/..’ e 'path' apontam para o mesmo nó-i no mesmo dispositivo –
     isso deve detectar pontos de montagem para todas as variantes Unix
     e POSIX. No Windows, um ponto de montagem é considerado uma raiz de
     letra de unidade (por exemplo, ‘c:\’), um compartilhamento UNC (por
     exemplo, ‘\\server\share’) ou um diretório de sistema de arquivos
     montado.

     Adicionado na versão 3.7.

     Alterado na versão 3.12: Suporte ao Windows foi adicionado.

 -- Método: Path.is_socket ()

     Retorna ‘True’ se o caminho apontar para um soquete Unix (ou um
     link simbólico apontando para um soquete Unix), ‘False’ se apontar
     para outro tipo de arquivo.

     ‘False’ também é retornado se o caminho não existir ou se for um
     link simbólico quebrado; outros erros (como erros de permissão) são
     propagados.

 -- Método: Path.is_fifo ()

     Retorna ‘True’ se o caminho apontar para um FIFO (ou um link
     simbólico apontando para um FIFO), ‘False’ se apontar para outro
     tipo de arquivo.

     ‘False’ também é retornado se o caminho não existir ou se for um
     link simbólico quebrado; outros erros (como erros de permissão) são
     propagados.

 -- Método: Path.is_block_device ()

     Retorna ‘True’ se o caminho apontar para um dispositivo de bloco
     (ou um link simbólico apontando para um dispositivo de bloco),
     ‘False’ se apontar para outro tipo de arquivo.

     ‘False’ também é retornado se o caminho não existir ou se for um
     link simbólico quebrado; outros erros (como erros de permissão) são
     propagados.

 -- Método: Path.is_char_device ()

     Retorna ‘True’ se o caminho apontar para um dispositivo de
     caractere (ou um link simbólico apontando para um dispositivo de
     caractere), ‘False’ se apontar para outro tipo de arquivo.

     ‘False’ também é retornado se o caminho não existir ou se for um
     link simbólico quebrado; outros erros (como erros de permissão) são
     propagados.

 -- Método: Path.samefile (other_path)

     Retorna se este path apontar para o mesmo arquivo como
     'other_path', que pode ser um objeto PATH ou uma String.  A
     semântica é semelhante a função *note os.path.samefile(): fa5. e a
     função *note os.path.samestat(): fa4.

     Um *note OSError: 417. poderá ser levantado caso algum arquivo não
     puder ser acessado por alguma razão.

          >>> p = Path('spam')
          >>> q = Path('eggs')
          >>> p.samefile(q)
          False
          >>> p.samefile('spam')
          True

     Adicionado na versão 3.5.


File: python.info,  Node: Lendo e escrevendo arquivos,  Next: Lendo diretórios,  Prev: Consultando tipo de arquivo e status,  Up: Caminhos concretos

5.11.1.12 Lendo e escrevendo arquivos
.....................................

 -- Método: Path.open (mode='r', buffering=-1, encoding=None,
          errors=None, newline=None)

     Abre o arquivo apontado pelo caminho, como a função embutida *note
     open(): 51c. faz:

          >>> p = Path('setup.py')
          >>> with p.open() as f:
          ...     f.readline()
          ...
          '#!/usr/bin/env python3\n'

 -- Método: Path.read_text (encoding=None, errors=None, newline=None)

     Retorna o conteúdo decodificado do arquivo apontado como uma
     string:

          >>> p = Path('meu_arquivo_texto')
          >>> p.write_text('Conteúdo de arquivo texto')
          18
          >>> p.read_text()
          'Conteúdo de arquivo texto'

     O arquivo é aberto e, então, fechado.  Os parâmetros opcionais têm
     o mesmo significado que em *note open(): 51c.

     Adicionado na versão 3.5.

     Alterado na versão 3.13: O parâmetro 'newline' foi adicionado.

 -- Método: Path.read_bytes ()

     Retorna o conteúdo binário do arquivo apontado como um objeto
     bytes:

          >>> p = Path('meu_arquivo_binário')
          >>> p.write_bytes(b'meu_arquivo_binário')
          20
          >>> p.read_bytes()
          b'Binary file contents'

     Adicionado na versão 3.5.

 -- Método: Path.write_text (data, encoding=None, errors=None,
          newline=None)

     Abre o arquivo apontado no modo de texto, escreve 'data' e fecha o
     arquivo:

          >>> p = Path('meu_arquivo_texto')
          >>> p.write_text('Conteúdo de arquivo texto')
          18
          >>> p.read_text()
          'Conteúdo de arquivo texto'

     Um arquivo existente com o mesmo nome é sobrescrito.  Os parâmetros
     opcionais têm o mesmo significado que em *note open(): 51c.

     Adicionado na versão 3.5.

     Alterado na versão 3.10: O parâmetro 'newline' foi adicionado.

 -- Método: Path.write_bytes (data)

     Abre o arquivo apontado no modo bytes, escreve 'data' e fecha o
     arquivo:

          >>> p = Path('meu_arquivo_binário')
          >>> p.write_bytes(b'meu_arquivo_binário')
          20
          >>> p.read_bytes()
          b'Binary file contents'

     Um arquivo existente de mesmo nome será substituído.

     Adicionado na versão 3.5.


File: python.info,  Node: Lendo diretórios,  Next: Criando arquivos e diretórios,  Prev: Lendo e escrevendo arquivos,  Up: Caminhos concretos

5.11.1.13 Lendo diretórios
..........................

 -- Método: Path.iterdir ()

     Quando o caminho aponta para um diretório, produz objetos caminho
     do conteúdo do diretório:

          >>> p = Path('docs')
          >>> for child in p.iterdir(): child
          ...
          PosixPath('docs/conf.py')
          PosixPath('docs/_templates')
          PosixPath('docs/make.bat')
          PosixPath('docs/index.rst')
          PosixPath('docs/_build')
          PosixPath('docs/_static')
          PosixPath('docs/Makefile')

     Os filhos são gerados em ordem arbitrária e as entradas especiais
     ‘'.'’ e ‘'..'’ não são incluídas.  Se um arquivo for removido ou
     adicionado ao diretório após a criação do iterador, não está
     especificado se um objeto caminho para esse arquivo é incluído.

     Se o caminho não for um diretório ou estiver inacessível, *note
     OSError: 417. será levantada.

 -- Método: Path.glob (pattern, *, case_sensitive=None,
          recurse_symlinks=False)

     Faz o glob do 'pattern' relativo fornecido no diretório
     representado por este caminho, produzindo todos os arquivos
     correspondentes (de qualquer tipo):

          >>> sorted(Path('.').glob('*.py'))
          [PosixPath('pathlib.py'), PosixPath('setup.py'), PosixPath('test_pathlib.py')]
          >>> sorted(Path('.').glob('*/*.py'))
          [PosixPath('docs/conf.py')]
          >>> sorted(Path('.').glob('**/*.py'))
          [PosixPath('build/lib/pathlib.py'),
           PosixPath('docs/conf.py'),
           PosixPath('pathlib.py'),
           PosixPath('setup.py'),
           PosixPath('test_pathlib.py')]

          Nota: The paths are returned in no particular order.  If you
          need a specific order, sort the results.

     Ver também
     ..........

     Documentação de *note Linguagem de padrões: 296c.

     Por padrão, ou quando o argumento somente-nomeado 'case_sensitive'
     é definido como ‘None’, esse método corresponde a caminhos usando
     regras de capitalização específicas da plataforma: normalmente,
     diferencia maiúsculas de minúsculas no POSIX e não diferencia
     maiúsculas de minúsculas no Windows.  Defina 'case_sensitive' como
     ‘True’ ou ‘False’ para substituir esse comportamento.

     Por padrão, ou quando o argumento somente-nomeado
     'recurse_symlinks' é definido como ‘False’, este método segue links
     simbólicos, exceto ao expandir curingas “‘**’”.  Defina
     'recurse_symlinks' como ‘True’ para sempre seguir links simbólicos.

     Levanta um *note evento de auditoria: 19fa. ‘pathlib.Path.glob’ com
     os argumentos ‘self’, ‘pattern’.

     Alterado na versão 3.12: O parâmetro 'case_sensitive' foi
     adicionado.

     Alterado na versão 3.13: O parâmetro 'recurse_symlinks' foi
     adicionado.

     Alterado na versão 3.13: O parâmetro 'pattern' aceita um *note
     objeto caminho ou similar: 2a0.

     Alterado na versão 3.13: Quaisquer exceções *note OSError: 417.
     levantadas pela varredura do sistema de arquivos são suprimidas.
     Em versões anteriores, tais exceções são suprimidas em muitos
     casos, mas não em todos.

 -- Método: Path.rglob (pattern, *, case_sensitive=None,
          recurse_symlinks=False)

     Faz um glob no 'pattern' relativo dado recursivamente.  Isso é como
     chamar *note Path.glob(): 22d. com “‘**/’” adicionado na frente do
     'pattern'.

          Nota: The paths are returned in no particular order.  If you
          need a specific order, sort the results.

     Ver também
     ..........

     Documentação de *note Linguagem de padrões: 296c. e *note
     Path.glob(): 22d.

     Levanta um *note evento de auditoria: 19fa. ‘pathlib.Path.rglob’
     com argumentos ‘self’, ‘pattern’.

     Alterado na versão 3.12: O parâmetro 'case_sensitive' foi
     adicionado.

     Alterado na versão 3.13: O parâmetro 'recurse_symlinks' foi
     adicionado.

     Alterado na versão 3.13: O parâmetro 'pattern' aceita um *note
     objeto caminho ou similar: 2a0.

 -- Método: Path.walk (top_down=True, on_error=None,
          follow_symlinks=False)

     Gera os nomes de arquivos em uma árvore de diretórios percorrendo a
     árvore de cima para baixo ou de baixo para cima.

     Para cada diretório na árvore de diretórios com raiz em 'self'
     (incluindo 'self', mas excluindo ‘.’ e ‘..’), o método produz uma
     tupla de 3 elementos de ‘(dirpath, dirnames, filenames)’.

     'dirpath' é um *note Path: 229. para o diretório que está sendo
     percorrido no momento, 'dirnames' é uma lista de strings para os
     nomes dos subdiretórios em 'dirpath' (excluindo ‘'.'’ e ‘'..'’), e
     'filenames' é uma lista de strings para os nomes dos arquivos não
     diretório em 'dirpath'.  Para obter um caminho completo (que começa
     com 'self') para um arquivo ou diretório em 'dirpath', faça
     ‘dirpath / name’.  Se as listas são ou não classificadas depende do
     sistema de arquivos.

     Se o argumento opcional 'top_down' for verdadeiro (que é o padrão),
     o trio para um diretório é gerado antes dos trios para qualquer um
     de seus subdiretórios (os diretórios são percorridos de cima para
     baixo).  Se 'top_down' for falso, o trio para um diretório é gerado
     após os trios para todos os seus subdiretórios (os diretórios são
     percorridos de baixo para cima).  Não importa o valor de
     'top_down', a lista de subdiretórios é recuperada antes que os
     trios para o diretório e seus subdiretórios sejam percorridos.

     Quando 'top_down' é verdadeiro, o chamador pode modificar a lista
     'dirnames' no local (por exemplo, usando *note del: 18a7. ou
     atribuição de fatias), e *note Path.walk(): 4a8. só recursivamente
     nos subdiretórios cujos nomes permanecem em 'dirnames'.  Isso pode
     ser usado para podar a pesquisa, ou para impor uma ordem específica
     de visita, ou mesmo para informar *note Path.walk(): 4a8. sobre
     diretórios que o chamador cria ou renomeia antes de retomar *note
     Path.walk(): 4a8. novamente.  Modificar 'dirnames' quando
     'top_down' é false não tem efeito no comportamento de *note
     Path.walk(): 4a8, pois os diretórios em 'dirnames' já foram gerados
     no momento em que 'dirnames' é cedido ao chamador.

     Por padrão, os erros de *note os.scandir(): a68. são ignorados.  Se
     o argumento opcional 'on_error' for especificado, deve ser um
     chamável; ela será chamado com um argumento, uma instância da
     exceção *note OSError: 417.  O chamável pode tratar do erro para
     continuar a caminhada ou levantá-la novamente para parar a
     caminhada.  Observe que o nome do arquivo está disponível como o
     atributo ‘filename’ do objeto de exceção.

     Por padrão, *note Path.walk(): 4a8. não segue links simbólicos e,
     em vez disso, os adiciona à lista 'filenames'.  Defina
     'follow_symlinks' como true para resolver links simbólicos e
     colocá-los em 'dirnames' e 'filenames' conforme apropriado para
     seus alvos e, consequentemente, visitar diretórios apontados por
     links simbólicos (quando suportado).

          Nota: Esteja ciente de que definir 'follow_symlinks' como true
          pode levar a uma recursão infinita se um link apontar para um
          diretório pai dele mesmo.  *note Path.walk(): 4a8. não
          rastreia os diretórios que já visitou.

          Nota: *note Path.walk(): 4a8. presume que os diretórios que
          percorre não sejam modificados durante a execução.  Por
          exemplo, se um diretório de 'dirnames' tiver sido substituído
          por um link simbólico e 'follow_symlinks' for falso, *note
          Path.walk(): 4a8. ainda tentará descer até ele.  Para evitar
          esse comportamento, remova os diretórios de 'dirnames'
          conforme apropriado.

          Nota: Diferentemente de *note os.walk(): 4a9, *note
          Path.walk(): 4a8. lista links simbólicos para diretórios em
          'filenames' se 'follow_symlinks' for falso.

     Esse exemplo mostra o número de bytes usados por todos os arquivos
     em cada diretório, ignorando diretórios ‘__pycache__’:

          from pathlib import Path
          for root, dirs, files in Path("cpython/Lib/concurrent").walk(on_error=print):
            print(
                root,
                "consumes",
                sum((root / file).stat().st_size for file in files),
                "bytes in",
                len(files),
                "non-directory files"
            )
            if '__pycache__' in dirs:
                  dirs.remove('__pycache__')

     O próximo exemplo é uma implementação simples de *note
     shutil.rmtree(): 301.  Percorrer a árvore de baixo para cima é
     essencial, pois *note rmdir(): 2978. não permite excluir um
     diretório antes que ele esteja vazio.

          # Exclui tudo o que estiver acessível no diretório "top".
          # CUIDADO: Isso é perigoso! Por exemplo, se top == Path('/'),
          # todos os seus arquivos poderão ser excluídos.
          for root, dirs, files in top.walk(top_down=False):
              for name in files:
                  (root / name).unlink()
              for name in dirs:
                  (root / name).rmdir()

     Adicionado na versão 3.12.


File: python.info,  Node: Criando arquivos e diretórios,  Next: Renomeando e excluindo,  Prev: Lendo diretórios,  Up: Caminhos concretos

5.11.1.14 Criando arquivos e diretórios
.......................................

 -- Método: Path.touch (mode=0o666, exist_ok=True)

     Cria um arquivo neste caminho especifico.  Caso o 'modo' for dado,
     ele será combinado com o valor do processo ‘umask’ para determinar
     o modo de arquivo e as flags de acesso.  Se o arquivo já existir, a
     função será bem-sucedida quando 'exist_ok' for verdadeiro (e o
     tempo de modificação for atualizado para a hora atual), caso
     contrário a exceção *note FileExistsError: 1056. será levantada.

     Ver também
     ..........

     Os métodos *note open(): 2976, *note write_text(): e71. e *note
     write_bytes(): e73. são frequentemente usados para criar arquivos.

 -- Método: Path.mkdir (mode=0o777, parents=False, exist_ok=False)

     Cria um novo diretório neste caminho fornecido.  Se 'mode' for
     fornecido, ele é combinado com o valor ‘umask’ do processo para
     determinar o modo do arquivo e os sinalizadores de acesso.  Se o
     caminho já existe, *note FileExistsError: 1056. é levantada.

     Se 'parents' for verdadeiro, quaisquer pais ausentes neste caminho
     serão criados conforme necessário; eles são criados com as
     permissões padrão sem levar o 'mode' em consideração (imitando o
     comando POSIX ‘mkdir -p’).

     Se 'parents' for falso (o padrão), um pai ausente levanta *note
     FileNotFoundError: 42b.

     Se 'exist_ok' for falso (o padrão), *note FileExistsError: 1056.
     será levantada se o diretório alvo já existir.

     Se 'exist_ok' for verdadeiro, a exceção *note FileExistsError:
     1056. não será levantada, a menos que o caminho fornecido já exista
     no sistema de arquivos e não seja um diretório (mesmo comportamento
     do comando POSIX ‘mkdir -p’).

     Alterado na versão 3.5: O parâmetro 'exist_ok' foi adicionado.

 -- Método: Path.symlink_to (target, target_is_directory=False)

     Faça desse path um symbolic link apontando para um 'target'

     No Windows, um link simbólico representa um arquivo ou um diretório
     e não se transforma no destino dinamicamente.  Se o alvo estiver
     presente, será criado um link simbólico de mesmo tipo.  Caso
     contrário, o link simbólico será criado como um diretório se
     'target_is_directory' for verdadeiro ou um link simbólico de
     arquivo (o padrão) caso contrário.  Em plataformas não Windows,
     'target_is_directory' é ignorado.

          >>> p = Path('meulink')
          >>> p.symlink_to('setup.py')
          >>> p.resolve()
          PosixPath('/home/antoine/pathlib/setup.py')
          >>> p.stat().st_size
          956
          >>> p.lstat().st_size
          8

          Nota: A ordem dos argumentos (link, target) é o inverso da
          função *note os.symlink(): 1133.’s.

     Alterado na versão 3.13: Levanta *note UnsupportedOperation: 227.
     se *note os.symlink(): 1133. não estiver disponível.  Em versões
     anteriores, *note NotImplementedError: 228. era levantada.

 -- Método: Path.hardlink_to (target)

     Faz deste caminho um link físico para o mesmo arquivo que 'target'.

          Nota: A ordem dos argumentos (link, target) é o inverso da
          função *note os.link(): 112e.’s.

     Adicionado na versão 3.10.

     Alterado na versão 3.13: Levanta *note UnsupportedOperation: 227.
     se *note os.link(): 112e. não estiver disponível.  Em versões
     anteriores, *note NotImplementedError: 228. era levantada.


File: python.info,  Node: Renomeando e excluindo,  Next: Permissões e propriedade,  Prev: Criando arquivos e diretórios,  Up: Caminhos concretos

5.11.1.15 Renomeando e excluindo
................................

 -- Método: Path.rename (target)

     Renomeia este arquivo ou diretório para o 'target' fornecido e
     retorna uma nova instância de ‘Path’ apontando para 'target'.  No
     Unix, se 'target' existir e for um arquivo, ele será substituído
     silenciosamente se o usuário tiver permissão.  No Windows, se
     'target' existir, a exceção *note FileExistsError: 1056. será
     levantada.  'target' pode ser uma string ou outro objeto caminho:

          >>> p = Path('foo')
          >>> p.open('w').write('algum texto')
          9
          >>> target = Path('bar')
          >>> p.rename(target)
          PosixPath('bar')
          >>> target.open().read()
          'algum texto'

     O caminho de destino pode ser absoluto ou relativo.  Caminhos
     relativos são interpretados em relação ao diretório de trabalho
     atual, 'não' ao diretório do objeto ‘Path’.

     Está implementada em termos de *note os.rename(): 1130. e fornece
     as mesmas garantias.

     Alterado na versão 3.8: Adicionado valor de retorno, retorna a nova
     instância de ‘Path’.

 -- Método: Path.replace (target)

     Renomeia este arquivo ou diretório para o 'target' fornecido e
     retorna uma nova instância de ‘Path’ apontando para 'target'.  Se
     'target' apontar para um arquivo ou diretório vazio, ele será
     substituído incondicionalmente.

     O caminho de destino pode ser absoluto ou relativo.  Caminhos
     relativos são interpretados em relação ao diretório de trabalho
     atual, 'não' ao diretório do objeto ‘Path’.

     Alterado na versão 3.8: Adicionado valor de retorno, retorna a nova
     instância de ‘Path’.

 -- Método: Path.unlink (missing_ok=False)

     Remova esse arquivo ou link simbólico.  Caso o caminho aponte para
     um diretório, use a função *note Path.rmdir(): 2978. em vez disso.

     Se 'missing_ok' for falso (o padrão), *note FileNotFoundError: 42b.
     é levantada se o caminho não existir.

     Se 'missing_ok' for verdadeiro, exceções de *note
     FileNotFoundError: 42b. serão ignoradas (mesmo comportamento que o
     comando POSIX ‘rm -f’).

     Alterado na versão 3.8: O parâmetro 'missing_ok' foi adicionado.

 -- Método: Path.rmdir ()

     Remove este diretório.  O diretório deve estar vazio.


File: python.info,  Node: Permissões e propriedade,  Prev: Renomeando e excluindo,  Up: Caminhos concretos

5.11.1.16 Permissões e propriedade
..................................

 -- Método: Path.owner (*, follow_symlinks=True)

     Retorna o nome do usuário que possui o arquivo.  *note KeyError:
     344. é levantada caso o identificador de usuário (UID) não for
     encontrado no banco de dados do sistema.

     Esse método normalmente segue links simbólicos; para retornar o
     dono do link simbólico, adicione o argumento
     ‘follow_symlinks=False’.

     Alterado na versão 3.13: Levanta *note UnsupportedOperation: 227.
     se o módulo *note pwd: b2. não estiver disponível.  Em versões
     anteriores, *note NotImplementedError: 228. era levantada.

     Alterado na versão 3.13: O parâmetro 'follow_symlinks' foi
     adicionado.

 -- Método: Path.group (*, follow_symlinks=True)

     Retorna o nome do usuário que possui o grupo.  *note KeyError: 344.
     é levantada caso o identificador de grupo (GID) não for encontrado
     no banco de dados do sistema.

     Esse método normalmente segue links simbólicos; para retornar o
     grupo do link simbólico, adicione o argumento
     ‘follow_symlinks=False’.

     Alterado na versão 3.13: Levanta *note UnsupportedOperation: 227.
     se o módulo *note grp: 66. não estiver disponível.  Em versões
     anteriores, *note NotImplementedError: 228. era levantada.

     Alterado na versão 3.13: O parâmetro 'follow_symlinks' foi
     adicionado.

 -- Método: Path.chmod (mode, *, follow_symlinks=True)

     Altera o modo de arquivo e as permissões, como *note os.chmod():
     21b.

     This method normally follows symlinks.  Some Unix flavours support
     changing permissions on the symlink itself; on these platforms you
     may add the argument ‘follow_symlinks=False’, or use *note
     lchmod(): 297f.

          >>> p = Path('setup.py')
          >>> p.stat().st_mode
          33277
          >>> p.chmod(0o444)
          >>> p.stat().st_mode
          33060

     Alterado na versão 3.10: O parâmetro 'follow_symlinks' foi
     adicionado.

 -- Método: Path.lchmod (mode)

     Como *note Path.chmod(): 827, mas, se o caminho apontar para um
     link simbólico, o modo do link simbólico é alterado ao invés de seu
     alvo.


File: python.info,  Node: Linguagem de padrões,  Next: Comparação com o módulo glob,  Prev: Caminhos concretos,  Up: pathlib — Caminhos do sistema de arquivos orientados a objetos

5.11.1.17 Linguagem de padrões
..............................

Os seguintes curingas são suportados em padrões para *note full_match():
22b, *note glob(): 22d. e *note rglob(): 22e.:

‘**’ (todo o segmento)

     Corresponde a qualquer número de segmentos de arquivo ou diretório,
     incluindo zero.

‘*’ (todo o segmento)

     Corresponde a um segmento de arquivo ou diretório.

‘*’ (parte de um segmento)

     Corresponde a qualquer número de caracteres não separadores,
     incluindo zero.

‘?’

     Corresponde a um caractere não separador.

‘[seq]’

     Corresponde a um caractere em 'seq', onde 'seq' é uma sequência de
     caracteres.  Expressões de intervalo são suportadas; por exemplo,
     ‘[a-z]’ corresponde a qualquer letra ASCII minúscula.  Vários
     intervalos podem ser combinados: ‘[a-zA-Z0-9_]’ corresponde a
     qualquer letra, dígito ou sublinhado ASCII.

‘[!seq]’

     Corresponde a um caractere que não está em 'seq', onde 'seq' segue
     as mesmas regras acima.

Para uma correspondência literal, coloque os metacaracteres entre
colchetes.  Por exemplo, ‘"[?]"’ corresponde ao caractere ‘"?"’.

O curinga “‘**’” habilita fazer glob recursivo.  Alguns exemplos:

Padrão                        Significado
                              
--------------------------------------------------------------------------------------------------------
                              
“‘**/*’”                      Qualquer caminho com pelo menos um segmento.
                              
                              
“‘**/*.py’”                   Qualquer caminho com um segmento final terminando em “‘.py’”.
                              
                              
“‘assets/**’”                 Qualquer caminho que comece com “‘assets/’”.
                              
                              
“‘assets/**/*’”               Qualquer caminho que comece com “‘assets/’”, excluindo o próprio
                              “‘assets/’”.
                              

     Nota: Fazer globs com o curinga “‘**’” visita todos os diretórios
     da árvore.  Árvores de diretórios grandes podem levar muito tempo
     para serem pesquisadas.

Alterado na versão 3.13: Fazer glob com um padrão que termina com “‘**’”
retorna arquivos e diretórios.  Em versões anteriores, apenas diretórios
eram retornados.

Em *note Path.glob(): 22d. e *note rglob(): 22e, uma barra final pode
ser adicionada ao padrão para corresponder apenas aos diretórios.

Alterado na versão 3.11: Fazer glob com um padrão que termina com um
separador de componentes de caminho (*note sep: 66a. ou *note altsep:
66b.) retorna apenas diretórios.


File: python.info,  Node: Comparação com o módulo glob,  Next: Comparação com os módulos os e os path,  Prev: Linguagem de padrões,  Up: pathlib — Caminhos do sistema de arquivos orientados a objetos

5.11.1.18 Comparação com o módulo ‘glob’
........................................

Os padrões aceitos e os resultados gerados por *note Path.glob(): 22d. e
*note Path.rglob(): 22e. diferem ligeiramente daqueles pelo módulo *note
glob: 64.:

  1. Arquivos que começam com um ponto não são especiais em pathlib.
     Isso é como passar ‘include_hidden=True’ para *note glob.glob():
     29f.

  2. Os componentes do padrão “‘**’” são sempre recursivos em pathlib.
     Isso é como passar ‘recursive=True’ para *note glob.glob(): 29f.

  3. Os componentes do padrão “‘**’” não seguem links simbólicos por
     padrão em pathlib.  Esse comportamento não tem equivalente em *note
     glob.glob(): 29f, mas você pode passar ‘recurse_symlinks=True’ para
     *note Path.glob(): 22d. para obter um comportamento compatível.

  4. Como todos os objetos *note PurePath: 4a6. e *note Path: 229, os
     valores retornados de *note Path.glob(): 22d. e *note Path.rglob():
     22e. não incluem barras finais.

  5. Os valores retornados de ‘path.glob()’ e ‘path.rglob()’ do pathlib
     incluem o 'path' como prefixo, diferente dos resultados de
     ‘glob.glob(root_dir=path)’.

  6. Os valores retornados de ‘path.glob()’ e ‘path.rglob()’ do pathlib
     podem incluir o próprio 'path', por exemplo, ao globar “‘**’”,
     enquanto os resultados de ‘glob.glob(root_dir=path)’ nunca incluem
     uma string vazia que corresponderia a 'path'.


File: python.info,  Node: Comparação com os módulos os e os path,  Prev: Comparação com o módulo glob,  Up: pathlib — Caminhos do sistema de arquivos orientados a objetos

5.11.1.19 Comparação com os módulos ‘os’ e ‘os.path’
....................................................

pathlib implementa operações de caminho usando os objetos *note
PurePath: 4a6. e *note Path: 229, e por isso é considerado 'orientado a
objetos'.  Por outro lado, os módulos *note os: a1. e *note os.path: a2.
fornecem funções que funcionam com objetos de baixo nível ‘str’ e
‘bytes’, o que é uma abordagem mais 'procedimental'.  Alguns usuários
consideram o estilo orientado a objetos mais legível.

Muitas funções em *note os: a1. e *note os.path: a2. oferecem suporte a
caminhos ‘bytes’ e *note caminhos relativos aos descritores de
diretório: 1129.  Esses recursos não estão disponíveis em pathlib.

Os tipos ‘str’ e ‘bytes’ do Python e partes dos módulos *note os: a1. e
*note os.path: a2. são escritos em C e são muito rápidos.  pathlib é
escrito em Python puro e geralmente é mais lento, mas raramente lento o
suficiente para fazer diferença.

A normalização de caminho do pathlib é um pouco mais opinativa e
consistente do que a do *note os.path: a2.  Por exemplo, enquanto *note
os.path.abspath(): 135f. elimina segmentos “‘..’” de um caminho, o que
pode alterar seu significado se links simbólicos estiverem envolvidos,
*note Path.absolute(): 17a2. preserva esses segmentos para maior
segurança.

A normalização de caminho do pathlib pode torná-lo inadequado para
algumas aplicações:

  1. pathlib normaliza ‘Path("minha_pasta/")’ para
     ‘Path("minha_pasta")’, o que altera o significado de um caminho
     quando fornecido a diversas APIs de sistemas operacionais e
     utilitários de linha de comando.  Especificamente, a ausência de um
     separador final pode permitir que o caminho seja resolvido como um
     arquivo ou diretório, em vez de apenas um diretório.

  2. pathlib normaliza ‘Path("./meu_programa")’ para
     ‘Path("meu_programa")’, o que altera o significado de um caminho
     quando usado como um caminho de pesquisa executável, como em um
     shell ou ao gerar um processo filho.  Especificamente, a ausência
     de um separador no caminho pode forçar a busca em ‘PATH’ em vez do
     diretório atual.

Como consequência dessas diferenças, pathlib não é um substituto
imediato para *note os.path: a2.

* Menu:

* Ferramentas correspondentes::


File: python.info,  Node: Ferramentas correspondentes,  Up: Comparação com os módulos os e os path

5.11.1.20 Ferramentas correspondentes
.....................................

Abaixo está uma tabela mapeando várias funções *note os: a1. a sua *note
PurePath: 4a6./*note Path: 229. equivalente.

*note os: a1. e *note os.path: a2.        *note pathlib: a4.
                                          
---------------------------------------------------------------------------------------------
                                          
*note os.path.dirname(): 2984.            *note PurePath.parent: 1821.
                                          
                                          
*note os.path.basename(): 2985.           *note PurePath.name: 2966.
                                          
                                          
*note os.path.splitext(): 2986.           *note PurePath.stem: 2969,
                                          *note PurePath.suffix: 2967.
                                          
                                          
*note os.path.join(): 171f.               *note PurePath.joinpath(): 296b.
                                          
                                          
*note os.path.isabs(): 224.               *note PurePath.is_absolute(): 1820.
                                          
                                          
*note os.path.relpath(): 4aa.             *note PurePath.relative_to(): 2ca. (1)
                                          
                                          
*note os.path.expanduser(): a1e.          *note Path.expanduser(): e6f. (2)
                                          
                                          
*note os.path.realpath(): 225.            *note Path.resolve(): 17ef.
                                          
                                          
*note os.path.abspath(): 135f.            *note Path.absolute(): 17a2. (3)
                                          
                                          
*note os.path.exists(): a18.              *note Path.exists(): a20.
                                          
                                          
*note os.path.isfile(): a1b.              *note Path.is_file(): 22f.
                                          
                                          
*note os.path.isdir(): a1a.               *note Path.is_dir(): 230.
                                          
                                          
*note os.path.islink(): a16.              *note Path.is_symlink(): a22.
                                          
                                          
*note os.path.isjunction(): 4a3.          *note Path.is_junction(): 4ab.
                                          
                                          
*note os.path.ismount(): a1c.             *note Path.is_mount(): a21.
                                          
                                          
*note os.path.samefile(): fa5.            *note Path.samefile(): e6d.
                                          
                                          
*note os.getcwd(): 1682.                  *note Path.cwd(): 181f.
                                          
                                          
*note os.stat(): 4a0.                     *note Path.stat(): 826.
                                          
                                          
*note os.lstat(): 4a1.                    *note Path.lstat(): 2974.
                                          
                                          
*note os.listdir(): 1139.                 *note Path.iterdir(): 171d.
                                          
                                          
*note os.walk(): 4a9.                     *note Path.walk(): 4a8. (4)
                                          
                                          
*note os.mkdir(): 21d,                    *note Path.mkdir(): e6e.
*note os.makedirs(): 21e.                 

*note os.link(): 112e.                    *note Path.hardlink_to(): 824.
                                          
                                          
*note os.symlink(): 1133.                 *note Path.symlink_to(): 825.
                                          
                                          
*note os.readlink(): 926.                 *note Path.readlink(): 925.
                                          
                                          
*note os.rename(): 1130.                  *note Path.rename(): 297c.
                                          
                                          
*note os.replace(): 1131.                 *note Path.replace(): 297d.
                                          
                                          
*note os.remove(): 112f,                  *note Path.unlink(): 1b69.
*note os.unlink(): 1134.                  

*note os.rmdir(): 1132.                   *note Path.rmdir(): 2978.
                                          
                                          
*note os.chmod(): 21b.                    *note Path.chmod(): 827.
                                          
                                          
*note os.lchmod(): 21a.                   *note Path.lchmod(): 297f.
                                          

   ---------- Footnotes ----------

   (1) *note os.path.relpath(): 4aa. chama *note abspath(): 135f. para
tornar os caminhos absolutos e remover partes “‘..’”, enquanto *note
PurePath.relative_to(): 2ca. é uma operação lexical que levanta *note
ValueError: 202. quando as âncoras de suas entradas são diferentes (por
exemplo, se um caminho for absoluto e o outro relativo).

   (2) *note os.path.expanduser(): a1e. retorna o caminho inalterado se
o diretório inicial não puder ser resolvido, enquanto *note
Path.expanduser(): e6f. levanta *note RuntimeError: 195.

   (3) *note os.path.abspath(): 135f. remove componentes “‘..’” sem
resolver links simbólicos, o que pode alterar o significado do caminho,
enquanto *note Path.absolute(): 17a2. deixa quaisquer componentes “‘..’”
no caminho.

   (4) *note os.walk(): 4a9. sempre segue links simbólicos ao
categorizar caminhos em 'dirnames' e 'filenames', enquanto *note
Path.walk(): 4a8. categoriza todos os links simbólicos em 'filenames'
quando 'follow_symlinks' é falso (o padrão).


File: python.info,  Node: os path — Manipulações comuns de nomes de caminhos,  Next: stat — Interpretando resultados de stat,  Prev: pathlib — Caminhos do sistema de arquivos orientados a objetos,  Up: Acesso a arquivos e diretórios

5.11.2 ‘os.path’ — Manipulações comuns de nomes de caminhos
-----------------------------------------------------------

'Código-fonte:' Lib/genericpath.py(1), Lib/posixpath.py(2) (para POSIX)
e Lib/ntpath.py(3) (para Windows).

__________________________________________________________________

Este módulo implementa algumas funções úteis em nomes de caminho.  Para
ler ou escrever arquivos veja *note open(): 51c, e para acessar o
sistema de arquivos veja o módulo *note os: a1.  Os parâmetros de
caminho podem ser passados como strings, ou bytes, ou qualquer objeto
que implemente o protocolo *note os.PathLike: c6c.

Ao contrário de um shell Unix, Python não faz nenhuma expansão
'automática' de caminho.  Funções como *note expanduser(): a1e. e *note
expandvars(): 1420. podem ser invocadas explicitamente quando uma
aplicação deseja uma expansão de caminho no estilo do shell.  (Veja
também o módulo *note glob: 64.)

Ver também
..........

O módulo *note pathlib: a4. oferece objetos de caminho de alto nível.

     Nota: Todas essas funções aceitam apenas bytes ou apenas objetos de
     string como seus parâmetros.  O resultado é um objeto do mesmo
     tipo, se um caminho ou nome de arquivo for retornado.

     Nota: Uma vez que diferentes sistemas operacionais têm diferentes
     convenções de nome de caminho, existem várias versões deste módulo
     na biblioteca padrão.  O módulo *note os.path: a2. é sempre o
     módulo de caminho adequado para o sistema operacional em que o
     Python está sendo executado e, portanto, pode ser usado para
     caminhos locais.  No entanto, você também pode importar e usar os
     módulos individuais se quiser manipular um caminho que esteja
     'sempre' em um dos diferentes formatos.  Todos eles têm a mesma
     interface:

        * ‘posixpath’ para caminhos no estilo UNIX

        * ‘ntpath’ para caminhos do Windows

Alterado na versão 3.8: *note exists(): a18, *note lexists(): a19, *note
isdir(): a1a, *note isfile(): a1b, *note islink(): a16. e *note
ismount(): a1c. agora retornam ‘False’ em vez de levantar uma exceção
para caminhos que contêm caracteres ou bytes não representáveis no nível
de sistema de operacional.

 -- Função: os.path.abspath (path)

     Return a normalized absolutized version of the pathname 'path'.  On
     most platforms, this is equivalent to calling
     ‘normpath(join(os.getcwd(), path))’.

     Ver também
     ..........

     *note os.path.join(): 171f. and *note os.path.normpath(): 135e.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.basename (path, /)

     Retorna o nome base do caminho 'path'.  Este é o segundo elemento
     do par retornado pela passagem de 'path' para a função *note
     split(): 298a.  Observe que o resultado desta função é diferente do
     programa Unix ‘basename’; onde ‘basename’ para ‘'/foo/bar/'’
     retorna ‘'bar'’, a função *note basename(): 2985. retorna uma
     string vazia (‘''’).

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.commonpath (paths)

     Retorna o subcaminho comum mais longo de cada nome de caminho no
     iterável 'paths'.  Levanta *note ValueError: 202. se 'paths'
     contiverem nomes de caminho absolutos e relativos, os 'paths'
     estiverem em unidades diferentes ou se 'paths' estiverem vazios.
     Ao contrário de *note commonprefix(): e6b, retorna um caminho
     válido.

     Adicionado na versão 3.5.

     Alterado na versão 3.6: Aceita uma sequência de *note objetos
     caminho ou similares: 2a0.

     Alterado na versão 3.13: Qualquer iterável agora pode ser passado,
     em vez de apenas sequências.

 -- Função: os.path.commonprefix (list, /)

     Retorna o prefixo de caminho mais longo (obtido caractere por
     caractere) que é um prefixo de todos os caminhos em 'list'.  Se
     'list' estiver vazia, retorna a string vazia (‘''’).

          Nota: Esta função pode retornar caminhos inválidos porque
          funciona um caractere por vez.  Para obter um caminho válido,
          consulte *note commonpath(): e6a.

               >>> os.path.commonprefix(['/usr/lib', '/usr/local/lib'])
               '/usr/l'

               >>> os.path.commonpath(['/usr/lib', '/usr/local/lib'])
               '/usr'

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.dirname (path, /)

     Retorna o nome do diretório do nome de caminho 'path'.  Este é o
     primeiro elemento do par retornado passando 'path' para a função
     *note split(): 298a.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.exists (path)

     Retorna ‘True’ se 'path' se referir a um caminho existente ou um
     descritor de arquivo aberto.  Retorna ‘False’ para links simbólicos
     quebrados.  Em algumas plataformas, esta função pode retornar
     ‘False’ se a permissão não for concedida para executar *note
     os.stat(): 4a0. no arquivo solicitado, mesmo se o 'path' existir
     fisicamente.

     Alterado na versão 3.3: 'path' agora pode ser um inteiro: ‘True’ é
     retornado se for um descritor de arquivo aberto, ‘False’ caso
     contrário.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.lexists (path)

     Retorna ‘True’ se 'path' se referir a um caminho existente,
     incluindo links simbólicos quebrados.  Equivalente a *note
     exists(): a18. em plataformas sem *note os.lstat(): 4a1.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.expanduser (path)

     No Unix e no Windows, retorna o argumento com um componente inicial
     de ‘~’ ou ‘~user’ substituído pelo diretório inicial daquele
     usuário 'user'.

     No Unix, um ‘~’ no início é substituído pela variável de ambiente
     ‘HOME’ se estiver definida; caso contrário, o diretório pessoal do
     usuário atual é procurado no diretório de senha através do módulo
     embutido *note pwd: b2.  Um ‘~user’ no início é procurado
     diretamente no diretório de senhas.

     No Windows, ‘USERPROFILE’ será usada se definida; caso contrário,
     uma combinação de ‘HOMEPATH’ e ‘HOMEDRIVE’ será usada.  Um ‘~user’
     inicial é tratado verificando se o último componente do diretório
     home do usuário atual corresponde a ‘USERNAME’, e substituindo-o se
     for o caso.

     Se a expansão falhar ou se o caminho não começar com um til, o
     caminho será retornado inalterado.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

     Alterado na versão 3.8: Não usa mais ‘HOME’ no Windows.

 -- Função: os.path.expandvars (path)

     Retorna o argumento com as variáveis de ambiente expandidas.
     Substrings da forma ‘$name’ ou ‘${name}’ são substituídas pelo
     valor da variável de ambiente 'name'.  Nomes de variáveis
     malformados e referências a variáveis não existentes permanecem
     inalterados.

     No Windows, expansões ‘%name%’ são suportadas juntamente a ‘$name’
     e ‘${name}’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.getatime (path, /)

     Retorna a hora do último acesso de 'path'.  O valor de retorno é um
     número de ponto flutuante dando o número de segundos desde a Era
     Unix (veja o módulo *note time: ee.).  Levanta *note OSError: 417.
     se o arquivo não existe ou está inacessível.

 -- Função: os.path.getmtime (path, /)

     Retorna a hora da última modificação de 'path'.  O valor de retorno
     é um número de ponto flutuante dando o número de segundos desde a
     Era Unix (veja o módulo *note time: ee.).  Levanta *note OSError:
     417. se o arquivo não existe ou está inacessível.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.getctime (path, /)

     Retorna o ctime do sistema que, em alguns sistemas (como Unix) é a
     hora da última alteração de metadados, e, em outros (como Windows),
     é a hora de criação de 'path'.  O valor de retorno é um número que
     fornece o número de segundos desde a Era Unix (veja o módulo *note
     time: ee.).  Levanta *note OSError: 417. se o arquivo não existe ou
     está inacessível.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.getsize (path, /)

     Retorna o tamanho, em bytes, de 'path'.  Levanta *note OSError:
     417. se o arquivo não existe ou está inacessível.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.isabs (path, /)

     Retorna ‘True’ se 'path' for um nome de caminho absoluto.  No Unix,
     isso significa que começa com uma barra, no Windows começa com duas
     (contra)barras ou uma letra de unidade, caractere de dois pontos e
     (contra)barra juntos.

     Ver também
     ..........

     *note abspath(): 135f.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

     Alterado na versão 3.13: No Windows, retorna ‘False’ se o caminho
     fornecido começar com exatamente uma (contra)barra.

 -- Função: os.path.isfile (path)

     Retorna ‘True’ se 'path' for um arquivo regular *note existente:
     a18.  Isso segue links simbólicos, então *note islink(): a16. e
     *note isfile(): a1b. podem ser verdadeiros para o mesmo caminho.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.isdir (path, /)

     Retorna ‘True’ se 'path' for um diretório *note existente: a18.
     Isso segue links simbólicos, então *note islink(): a16. e *note
     isdir(): a1a. podem ser verdadeiros para o mesmo caminho.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.isjunction (path)

     Retorna ‘True’ se 'path' se referir a uma entrada de diretório
     *note existente: a19. que é uma junção.  Sempre retorna ‘False’ se
     junções não forem suportados na plataforma atual.

     Adicionado na versão 3.12.

 -- Função: os.path.islink (path)

     Retorna ‘True’ se 'path' se referir a uma entrada de diretório
     *note existente: a18. que é um link simbólico.  Sempre ‘False’ se
     links simbólicos não forem suportados pelo tempo de execução
     Python.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.ismount (path)

     Retorna ‘True’ se o nome de caminho 'path' for um 'ponto de
     montagem': um ponto em um sistema de arquivos onde um sistema de
     arquivos diferente foi montado.  No POSIX, a função verifica se o
     pai de 'path', ‘`path'/..’, está em um dispositivo diferente de
     'path', ou se ‘`path'/..’ e 'path' apontam para o mesmo nó-i no
     mesmo dispositivo – isso deve detectar pontos de montagem para
     todas as variantes Unix e POSIX. Não é capaz de detectar
     confiavelmente montagens bind no mesmo sistema de arquivos.  Em
     sistemas Linux, sempre vai retornar ‘True’ para subvolumes btrfs,
     mesmo se eles não forem pontos de montagem.  No Windows, uma raiz
     de letra de unidade e um UNC de compartilhamento são sempre pontos
     de montagem e, para qualquer outro caminho, ‘GetVolumePathName’ é
     chamado para ver se é diferente do caminho de entrada.

     Alterado na versão 3.4: Adicionado suporte para detecção de pontos
     de montagem não raiz no Windows.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.isdevdrive (path)

     Retorna ‘True’ se o nome do caminho 'path' estiver localizado em um
     Windows Dev Drive.  Um Dev Drive é otimizado para cenários de
     desenvolvedor e oferece desempenho mais rápido para leitura e
     gravação de arquivos.  É recomendado para uso em código-fonte,
     diretórios de construção temporários, caches de pacotes e outras
     operações com uso intensivo de ES.

     Pode levantar um erro para um caminho inválido, por exemplo, um sem
     uma unidade reconhecível, mas retorna ‘False’ em plataformas que
     não provêm suporte a Dev Drives.  Consulte a documentação do
     Windows(4) para obter informações sobre como habilitar e criar Dev
     Drives.

     Adicionado na versão 3.12.

     Alterado na versão 3.13: A função já está disponível em todas as
     plataformas, e sempre retornará ‘False’ naquelas que não possuem
     suporte para Dev Drives

 -- Função: os.path.isreserved (path)

     Retorna ‘True’ se 'path' for um caminho reservado no sistema atual.

     No Windows, os nomes de arquivos reservados incluem aqueles que
     terminam com espaço ou ponto; aqueles que contêm dois pontos (ou
     seja, fluxos de arquivos como “nome:fluxo”), caracteres curinga (ou
     seja, ‘'*?"<>'’), encadeamento (pipe) ou caracteres de controle
     ASCII; bem como nomes de dispositivos DOS, como “NUL”, “CON”,
     “CONIN$”, “CONOUT$”, “AUX”, “PRN”, “COM1” e “LPT1”.

          Nota: Esta função aproxima regras para caminhos reservados na
          maioria dos sistemas Windows.  Essas regras mudam com o tempo
          em diversas versões do Windows.  Esta função pode ser
          atualizada em versões futuras do Python à medida que as
          alterações nas regras se tornarem amplamente disponíveis.

     *note Disponibilidade: 1ed8.: Windows.

     Adicionado na versão 3.13.

 -- Função: os.path.join (path, /, *paths)

     Join one or more path segments intelligently.  The return value is
     the concatenation of 'path' and all members of '*paths', with
     exactly one directory separator following each non-empty part,
     except the last.  That is, the result will only end in a separator
     if the last part is either empty or ends in a separator.

     If a segment is an absolute path (which on Windows requires both a
     drive and a root), then all previous segments are ignored and
     joining continues from the absolute path segment.  On Linux, for
     example:

          >>> os.path.join('/home/foo', 'bar')
          '/home/foo/bar'
          >>> os.path.join('/home/foo', '/home/bar')
          '/home/bar'

     On Windows, the drive is not reset when a rooted path segment
     (e.g., ‘r'\foo'’) is encountered.  If a segment is on a different
     drive or is an absolute path, all previous segments are ignored and
     the drive is reset.  For example:

          >>> os.path.join('c:\\', 'foo')
          'c:\\foo'
          >>> os.path.join('c:\\foo', 'd:\\bar')
          'd:\\bar'

     Note that since there is a current directory for each drive,
     ‘os.path.join("c:", "foo")’ represents a path relative to the
     current directory on drive ‘C:’ (‘c:foo’), not ‘c:\foo’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0. para 'path' e 'paths'.

 -- Função: os.path.normcase (path, /)

     Normaliza o estado de letras maiúsculas/minúsculas de um nome de
     caminho.  No Windows, converte todos os caracteres do nome do
     caminho em minúsculas e também converte barras normais em barras
     invertidas.  Em outros sistemas operacionais, retorna o caminho
     inalterado.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.normpath (path)

     Normaliza um nome de caminho retirando separadores redundantes e
     referências de nível superior para que ‘A//B’, ‘A/B/’, ‘A/./B’ e
     ‘A/foo/../B’ todos se tornem ‘A/B’.  Essa manipulação de string
     pode mudar o significado de um caminho que contém links simbólicos.
     No Windows, ele converte barras normais em barras invertidas.  Para
     normalizar o estado de letras maiúsculas/minúsculas, use *note
     normcase(): 298f.

          Nota: Em sistemas POSIX, de acordo com IEEE Std 1003.1 2013
          Edition; 4.13 Pathname Resolution(5), se um nome de caminho
          começa com exatamente duas barras, o primeiro componente após
          os caracteres iniciais pode ser interpretado em um forma
          definida pela implementação, embora mais de dois caracteres
          iniciais devam ser tratados como um único caractere.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.realpath (path, /, *, strict=False)

     Retorna o caminho canônico do nome de arquivo especificado,
     eliminando quaisquer links simbólicos encontrados no caminho (se
     forem suportados pelo sistema operacional).  No Windows, esta
     função também resolverá nomes de estilo do MS-DOS (também chamado
     de 8.3), como ‘C:\\PROGRA~1’ para ‘C:\\Program Files’.

     Por padrão, o caminho é avaliado até o primeiro componente que não
     existe, é um laço de link simbólico ou cuja avaliação levanta *note
     OSError: 417.  Todos esses componentes são anexados inalterados à
     parte existente do caminho.

     Alguns erros tratados dessa forma incluem “acesso negado”, “não é
     um diretório” ou “argumento inválido para função interna”.  Assim,
     o caminho resultante pode estar ausente ou inacessível, ainda pode
     conter links ou laços e pode passar por diretórios não
     especificados.

     Esse comportamento pode ser modificado por argumentos nomeados:

     Se 'strict' for ‘True’, o primeiro erro encontrado ao avaliar o
     caminho será levantado novamente.  Em particular, *note
     FileNotFoundError: 42b. é levantada se 'path' não existir, ou outro
     *note OSError: 417. se ele estiver inacessível.

     Se 'strict' for *note os.path.ALLOW_MISSING: 42a, erros diferentes
     de *note FileNotFoundError: 42b. serão levantados novamente (como
     em ‘strict=True’).  Portanto, o caminho retornado não conterá
     nenhum link simbólico, mas o arquivo nomeado e alguns de seus
     diretórios pais podem estar ausentes.

          Nota: Esta função emula o procedimento do sistema operacional
          para tornar um caminho canônico, que difere ligeiramente entre
          o Windows e o UNIX em relação a como links e componentes de
          caminho subsequentes interagem.

          As APIs do sistema operacional tornam os caminhos canônicos
          conforme necessário, portanto, normalmente não é necessário
          chamar esta função.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

     Alterado na versão 3.8: Links simbólicos e junções agora são
     resolvidos no Windows.

     Alterado na versão 3.10: O parâmetro 'strict' foi adicionado.

     Alterado na versão 3.13.4: O valor *note ALLOW_MISSING: 42a. para o
     parâmetro 'strict' foi adicionado.

 -- Dado: os.path.ALLOW_MISSING

     Valor especial usado para o argumento 'strict' em *note realpath():
     225.

     Adicionado na versão 3.13.4.

 -- Função: os.path.relpath (path, start=os.curdir)

     Retorna um caminho de arquivo relativo a 'caminho' do diretório
     atual ou de um diretório 'start' opcional.  Este é um cálculo de
     caminho: o sistema de arquivos não é acessado para confirmar a
     existência ou natureza de 'path' ou 'start'.  No Windows, *note
     ValueError: 202. é levantada quando 'path' e 'start' estão em
     unidades diferentes.

     'start' tem como padrão *note os.curdir: 2990.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.samefile (path1, path2, /)

     Retorna ‘True’ se ambos os argumentos de nome de caminho se referem
     ao mesmo arquivo ou diretório.  Isso é determinado pelo número do
     dispositivo e número do nó-i e levanta uma exceção se uma chamada
     *note os.stat(): 4a0. em qualquer um dos caminhos falhar.

     Alterado na versão 3.2: Adicionado suporte ao Windows.

     Alterado na versão 3.4: O Windows agora usa a mesma implementação
     que todas as outras plataformas.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.sameopenfile (fp1, fp2)

     Retorna ‘True’ se os descritores de arquivo 'fp1' e 'fp2' fazem
     referência ao mesmo arquivo.

     Alterado na versão 3.2: Adicionado suporte ao Windows.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.samestat (stat1, stat2, /)

     Retorna ‘True’ se as tuplas de estatísticas 'stat1' e 'stat2' fazem
     referência ao mesmo arquivo.  Essas estruturas podem ter sido
     retornadas por *note os.fstat(): db4, *note os.lstat(): 4a1. ou
     *note os.stat(): 4a0.  Esta função implementa a comparação
     subjacente usada por *note samefile(): fa5. e *note sameopenfile():
     2991.

     Alterado na versão 3.4: Adicionado suporte ao Windows.

 -- Função: os.path.split (path, /)

     Split the pathname 'path' into a pair, ‘(head, tail)’ where 'tail'
     is the last pathname component and 'head' is everything leading up
     to that.  The 'tail' part will never contain a slash; if 'path'
     ends in a slash, 'tail' will be empty.  If there is no slash in
     'path', 'head' will be empty.  If 'path' is empty, both 'head' and
     'tail' are empty.  Trailing slashes are stripped from 'head' unless
     it is the root (one or more slashes only).  In all cases,
     ‘join(head, tail)’ returns a path to the same location as 'path'
     (but the strings may differ).  Also see the functions *note join():
     171f, *note dirname(): 2984. and *note basename(): 2985.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.splitdrive (path, /)

     Divide o nome do caminho 'path' em um par ‘(unidade, rabo)’ onde
     'unidade' é um ponto de montagem ou uma string vazia.  Em sistemas
     que não usam especificações de unidade, 'unidade' sempre será a
     string vazia.  Em todos os casos, ‘unidade + rabo’ será o mesmo que
     'path'.

     No Windows, divide um nome de caminho em unidade/ponto de
     compartilhamento UNC e caminho relativo.

     Se o caminho contiver uma letra de unidade, a unidade conterá tudo,
     incluindo os dois pontos:

          >>> splitdrive("c:/dir")
          ("c:", "/dir")

     Se o caminho contiver um caminho UNC, a unidade conterá o nome do
     host e o compartilhamento:

          >>> splitdrive("//host/computador/diretório")
          ("//host/computador", "/diretório")

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.path.splitroot (path, /)

     Divide o nome de caminho 'path' em uma tupla de 3 itens ‘(drive,
     root, tail)’ onde 'drive' é um nome de dispositivo ou ponto de
     montagem, 'root' é uma string de separadores após a unidade e
     'tail' é tudo depois da raiz.  Qualquer um desses itens pode ser
     uma string vazia.  Em todos os casos, ‘drive + root + tail’ será
     igual a 'path'.

     Em sistemas POSIX, 'drive' está sempre vazio.  A 'root' pode estar
     vazia (se 'path' for relativo), uma única barra (se 'path' for
     absoluto) ou duas barras (definidas pela implementação de acordo
     com IEEE Std 1003.1-2017; 4.13 Pathname Resolution(6).)  Por
     exemplo:

          >>> splitroot('/home/sam')
          ('', '/', 'home/sam')
          >>> splitroot('//home/sam')
          ('', '//', 'home/sam')
          >>> splitroot('///home/sam')
          ('', '/', '//home/sam')

     No Windows, 'drive' pode estar vazio, ser um nome de letra de
     unidade, um compartilhamento UNC ou um nome de dispositivo.  'root'
     pode estar vazio, ser uma barra ou uma barra invertida.  Por
     exemplo:

          >>> splitroot('C:/Users/Sam')
          ('C:', '/', 'Users/Sam')
          >>> splitroot('//Server/Share/Users/Sam')
          ('//Server/Share', '/', 'Users/Sam')

     Adicionado na versão 3.12.

 -- Função: os.path.splitext (path, /)

     Divida o nome do caminho 'path' em um par ‘(root, ext)’ de modo que
     ‘root + ext == path’, e a extensão, 'ext', esteja vazia ou comece
     com um ponto e contenha no máximo um período.

     Se o caminho não contiver extensão, 'ext' será ‘''’:

          >>> splitext('bar')
          ('bar', '')

     Se o caminho contiver uma extensão, 'ext' será definido para esta
     extensão, incluindo o ponto inicial.  Observe que os períodos
     anteriores serão ignorados:

          >>> splitext('foo.bar.exe')
          ('foo.bar', '.exe')
          >>> splitext('/foo/bar.exe')
          ('/foo/bar', '.exe')

     Os períodos iniciais do último componente do caminho são
     considerados parte da raiz:

          >>> splitext('.cshrc')
          ('.cshrc', '')
          >>> splitext('/foo/....jpg')
          ('/foo/....jpg', '')

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Dado: os.path.supports_unicode_filenames

     ‘True’ se strings Unicode arbitrárias podem ser usadas como nomes
     de arquivo (dentro das limitações impostas pelo sistema de
     arquivos).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/genericpath.py

   (2) https://github.com/python/cpython/tree/3.13/Lib/posixpath.py

   (3) https://github.com/python/cpython/tree/3.13/Lib/ntpath.py

   (4) https://learn.microsoft.com/windows/dev-drive/

   (5) 
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13

   (6) 
https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13


File: python.info,  Node: stat — Interpretando resultados de stat,  Next: filecmp — Comparações de arquivos e diretórios,  Prev: os path — Manipulações comuns de nomes de caminhos,  Up: Acesso a arquivos e diretórios

5.11.3 ‘stat’ — Interpretando resultados de ‘stat()’
----------------------------------------------------

'Código-fonte:' Lib/stat.py(1)

__________________________________________________________________

O módulo *note stat: d1. define constantes e funções para interpretar os
resultados de *note os.stat(): 4a0, *note os.fstat(): db4. e *note
os.lstat(): 4a1. (se existirem).  Para detalhes completos sobre chamadas
‘stat()’, ‘fstat()’ e ‘lstat()’, consulte a documentação do seu sistema.

Alterado na versão 3.4: O módulo stat é apoiado por uma implementação C.

O módulo *note stat: d1. define as seguintes funções para testar tipos
de arquivos específicos:

 -- Função: stat.S_ISDIR (mode)

     Retorna diferente de zero se o modo for de um diretório.

 -- Função: stat.S_ISCHR (mode)

     Retorna diferente de zero se o modo for de um arquivo de
     dispositivo especial de caractere.

 -- Função: stat.S_ISBLK (mode)

     Retorna diferente de zero se o modo for de um arquivo de
     dispositivo especial de bloco.

 -- Função: stat.S_ISREG (mode)

     Retorna diferente de zero se o modo for de um arquivo regular.

 -- Função: stat.S_ISFIFO (mode)

     Retorna diferente de zero se o modo for de um FIFO (encadeamento
     nomeado).

 -- Função: stat.S_ISLNK (mode)

     Retorna diferente de zero se o modo for de um link simbólico.

 -- Função: stat.S_ISSOCK (mode)

     Retorna diferente de zero se o modo for de um soquete.

 -- Função: stat.S_ISDOOR (mode)

     Retorna diferente de zero se o modo for de uma porta.

     Adicionado na versão 3.4.

 -- Função: stat.S_ISPORT (mode)

     Retorna diferente de zero se o modo for de uma porta de eventos.

     Adicionado na versão 3.4.

 -- Função: stat.S_ISWHT (mode)

     Retorna diferente de zero se o modo for de um apagamento.

     Adicionado na versão 3.4.

Duas funções adicionais são definidas para manipulação mais geral do
modo do arquivo:

 -- Função: stat.S_IMODE (mode)

     Retorna a parte do modo do arquivo que pode ser definido por *note
     os.chmod(): 21b. — ou seja, os bits de permissão do arquivo, mais
     os bits sticky bit, set-group-id e set-user-id (em sistemas que têm
     suporte a eles).

 -- Função: stat.S_IFMT (mode)

     Retorna a parte do modo do arquivo que descreve o tipo de arquivo
     (usado pelas funções ‘S_IS*()’ acima).

Normalmente, você usaria as funções ‘os.path.is*()’ para testar o tipo
de um arquivo; as funções aqui são úteis quando você está fazendo vários
testes do mesmo arquivo e deseja evitar a sobrecarga da chamada de
sistema ‘stat()’ para cada teste.  Eles também são úteis ao verificar
informações sobre um arquivo que não é manipulado por *note os.path: a2,
como os testes para dispositivos de blocos e caracteres.

Exemplo:

     import os, sys
     from stat import *

     def walktree(top, callback):
         '''desce recursivamente a árvore de diretórios com raiz no topo,
          chamando a função de retorno de chamada para cada arquivo regular'''

         for f in os.listdir(top):
             pathname = os.path.join(top, f)
             mode = os.lstat(pathname).st_mode
             if S_ISDIR(mode):
                 # É um diretório, percorre recursivamente nele
                 walktree(pathname, callback)
             elif S_ISREG(mode):
                 # É um arquivo, chama a função de retorno
                 callback(pathname)
             else:
                 # Tipo de arquivo desconhecido, imprime uma mensagem
                 print('Pulando %s' % pathname)

     def visitfile(file):
         print('visitando, file)

     if __name__ == '__main__':
         walktree(sys.argv[1], visitfile)

Uma função utilitária adicional é fornecida para converter o modo de um
arquivo em uma string legível por humanos:

 -- Função: stat.filemode (mode)

     Converte o modo de um arquivo em uma string no formato
     ‘-rwxrwxrwx’.

     Adicionado na versão 3.3.

     Alterado na versão 3.4: A função tem suporte a *note S_IFDOOR: fef,
     *note S_IFPORT: ff0. e *note S_IFWHT: ff1.

Todas as variáveis abaixo são simplesmente índices simbólicos nas 10
tuplas retornadas por *note os.stat(): 4a0, *note os.fstat(): db4. ou
*note os.lstat(): 4a1.

 -- Dado: stat.ST_MODE

     Modo de proteção de nó-i.

 -- Dado: stat.ST_INO

     Número de nó-i.

 -- Dado: stat.ST_DEV

     Nó-i em que o dispositivo reside.

 -- Dado: stat.ST_NLINK

     Número de links para o nó-i.

 -- Dado: stat.ST_UID

     O ID de usuário para o proprietário.

 -- Dado: stat.ST_GID

     O ID de grupo para o proprietário.

 -- Dado: stat.ST_SIZE

     Tamanho em bytes de um arquivo simples; quantidade de dados
     aguardando em alguns arquivos especiais.

 -- Dado: stat.ST_ATIME

     Hora do último acesso.

 -- Dado: stat.ST_MTIME

     Hora da última modificação.

 -- Dado: stat.ST_CTIME

     O “ctime” conforme relatado pelo sistema operacional.  Em alguns
     sistemas (como Unix) é o horário da última alteração de metadados
     e, em outros (como Windows), é o horário de criação (consulte a
     documentação da plataforma para obter detalhes).

A interpretação do “tamanho do arquivo” muda de acordo com o tipo de
arquivo.  Para arquivos simples, este é o tamanho do arquivo em bytes.
Para FIFOs e soquetes na maioria dos tipos de Unix (incluindo Linux em
particular), o “tamanho” é o número de bytes aguardando para serem lidos
no momento da chamada para *note os.stat(): 4a0, *note os.fstat(): db4.
ou *note os.lstat(): 4a1.; isso às vezes pode ser útil, especialmente
para pesquisar um desses arquivos especiais após uma abertura sem
bloqueio.  O significado do campo de tamanho para outros dispositivos de
caracteres e blocos varia mais, dependendo da implementação da chamada
de sistema subjacente.

As variáveis abaixo definem os sinalizadores utilizadas no campo *note
ST_MODE: fee.

O uso das funções acima é mais portátil do que o uso do primeiro
conjunto de sinalizadores:

 -- Dado: stat.S_IFSOCK

     Soquete.

 -- Dado: stat.S_IFLNK

     Link simbólico.

 -- Dado: stat.S_IFREG

     Arquivo regular.

 -- Dado: stat.S_IFBLK

     Dispositivo de bloco.

 -- Dado: stat.S_IFDIR

     Diretório.

 -- Dado: stat.S_IFCHR

     Dispositivo de caracteres.

 -- Dado: stat.S_IFIFO

     FIFO.

 -- Dado: stat.S_IFDOOR

     Porta.

     Adicionado na versão 3.4.

 -- Dado: stat.S_IFPORT

     Porta de eventos.

     Adicionado na versão 3.4.

 -- Dado: stat.S_IFWHT

     Apagamento.

     Adicionado na versão 3.4.

     Nota: *note S_IFDOOR: fef, *note S_IFPORT: ff0. ou *note S_IFWHT:
     ff1. são definidos como 0 quando a plataforma não possui suporte
     para os tipos de arquivo.

Os seguintes sinalizadores também podem ser usados no argumento 'mode'
de *note os.chmod(): 21b.:

 -- Dado: stat.S_ISUID

     Define o bit de UID.

 -- Dado: stat.S_ISGID

     Bit de set-group-ID. Este bit tem vários usos especiais.  Para um
     diretório, indica que a semântica BSD deve ser usada para esse
     diretório: os arquivos criados lá herdam seu ID de grupo do
     diretório, não do ID de grupo efetivo do processo de criação, e os
     diretórios criados lá também receberão o conjunto de bits *note
     S_ISGID: 29af.  Para um arquivo que não possui o bit de execução de
     grupo (*note S_IXGRP: 29b0.) definido, o bit de set-group-ID indica
     trava obrigatória de arquivo/registro (veja também *note S_ENFMT:
     29b1.).

 -- Dado: stat.S_ISVTX

     Sticky bit.  Quando este bit é definido em um diretório, significa
     que um arquivo nesse diretório pode ser renomeado ou excluído
     apenas pelo proprietário do arquivo, pelo proprietário do diretório
     ou por um processo privilegiado.

 -- Dado: stat.S_IRWXU

     Máscara para permissões de proprietário de arquivo.

 -- Dado: stat.S_IRUSR

     Proprietário tem permissão de leitura.

 -- Dado: stat.S_IWUSR

     Proprietário tem permissão de escrita.

 -- Dado: stat.S_IXUSR

     Proprietário tem permissão de execução.

 -- Dado: stat.S_IRWXG

     Máscara para permissões de grupo.

 -- Dado: stat.S_IRGRP

     Grupo tem permissão de leitura.

 -- Dado: stat.S_IWGRP

     Grupo tem permissão de escrita.

 -- Dado: stat.S_IXGRP

     Grupo tem permissão de execução.

 -- Dado: stat.S_IRWXO

     Máscara para permissões para outros (não no grupo).

 -- Dado: stat.S_IROTH

     Outros têm permissão de leitura.

 -- Dado: stat.S_IWOTH

     Outros têm permissão de escrita.

 -- Dado: stat.S_IXOTH

     Outros têm permissão de execução.

 -- Dado: stat.S_ENFMT

     Aplicação de trava de arquivo do System V. Este sinalizador é
     compartilhada com *note S_ISGID: 29af.: a trava de arquivo/registro
     é aplicada em arquivos que não possuem o bit de execução de grupo
     (*note S_IXGRP: 29b0.) definido.

 -- Dado: stat.S_IREAD

     Sinônimo Unix V7 para *note S_IRUSR: 29b4.

 -- Dado: stat.S_IWRITE

     Sinônimo Unix V7 para *note S_IWUSR: 29b5.

 -- Dado: stat.S_IEXEC

     Sinônimo Unix V7 para *note S_IXUSR: 29b6.

Os seguintes sinalizadores podem ser usados no argumento 'flags' de
*note os.chflags(): 112c.:

 -- Dado: stat.UF_SETTABLE

     Todos os sinalizadores definíveis pelo usuário

     Adicionado na versão 3.13.

 -- Dado: stat.UF_NODUMP

     Não despeja o arquivo.

 -- Dado: stat.UF_IMMUTABLE

     O arquivo não pode ser alterado.

 -- Dado: stat.UF_APPEND

     O arquivo só pode sofrer acréscimos.

 -- Dado: stat.UF_OPAQUE

     O diretório é opaco quando visualizado por meio de uma pilha de
     união.

 -- Dado: stat.UF_NOUNLINK

     O arquivo não pode ser renomeado ou excluído.

 -- Dado: stat.UF_COMPRESSED

     O arquivo é armazenado compactado (macOS 10.6+).

 -- Dado: stat.UF_TRACKED

     Usado para manipular IDs de documentos (macOS)

     Adicionado na versão 3.13.

 -- Dado: stat.UF_DATAVAULT

     O arquivo precisa de direito para leitura ou gravação (macOS
     10.13+)

     Adicionado na versão 3.13.

 -- Dado: stat.UF_HIDDEN

     O arquivo não deve ser exibido em uma GUI (macOS 10.5+).

 -- Dado: stat.SF_SETTABLE

     Todos os sinalizadores mutáveis de superusuário

     Adicionado na versão 3.13.

 -- Dado: stat.SF_SUPPORTED

     Todos os sinalizadores válidos de superusuário

     *note Disponibilidade: 1ed8.: macOS

     Adicionado na versão 3.13.

 -- Dado: stat.SF_SYNTHETIC

     Todos os sinalizadores sintéticos de somente leitura de
     superusuário

     *note Disponibilidade: 1ed8.: macOS

     Adicionado na versão 3.13.

 -- Dado: stat.SF_ARCHIVED

     O arquivo não pode ser arquivado.

 -- Dado: stat.SF_IMMUTABLE

     O arquivo não pode ser alterado.

 -- Dado: stat.SF_APPEND

     O arquivo só pode sofrer acréscimos.

 -- Dado: stat.SF_RESTRICTED

     O arquivo precisa de um direito para ser escrito (macOS 10.13+)

     Adicionado na versão 3.13.

 -- Dado: stat.SF_NOUNLINK

     O arquivo não pode ser renomeado ou excluído.

 -- Dado: stat.SF_SNAPSHOT

     O arquivo é um arquivo de captura (snapshot).

 -- Dado: stat.SF_FIRMLINK

     O arquivo é um firmlink (macOS 10.15+)

     Adicionado na versão 3.13.

 -- Dado: stat.SF_DATALESS

     O arquivo é um objeto sem dados (macOS 10.15+)

     Adicionado na versão 3.13.

Consulte a página man dos sistemas *BSD ou macOS ‘chflags(2)(2)’ para
obter mais informações.

No Windows, as seguintes constantes de atributos de arquivo estão
disponíveis para uso ao testar bits no membro ‘st_file_attributes’
retornado por *note os.stat(): 4a0.  Consulte a documentação da API do
Windows(3) para obter mais detalhes sobre o significado dessas
constantes.

 -- Dado: stat.FILE_ATTRIBUTE_ARCHIVE
 -- Dado: stat.FILE_ATTRIBUTE_COMPRESSED
 -- Dado: stat.FILE_ATTRIBUTE_DEVICE
 -- Dado: stat.FILE_ATTRIBUTE_DIRECTORY
 -- Dado: stat.FILE_ATTRIBUTE_ENCRYPTED
 -- Dado: stat.FILE_ATTRIBUTE_HIDDEN
 -- Dado: stat.FILE_ATTRIBUTE_INTEGRITY_STREAM
 -- Dado: stat.FILE_ATTRIBUTE_NORMAL
 -- Dado: stat.FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
 -- Dado: stat.FILE_ATTRIBUTE_NO_SCRUB_DATA
 -- Dado: stat.FILE_ATTRIBUTE_OFFLINE
 -- Dado: stat.FILE_ATTRIBUTE_READONLY
 -- Dado: stat.FILE_ATTRIBUTE_REPARSE_POINT
 -- Dado: stat.FILE_ATTRIBUTE_SPARSE_FILE
 -- Dado: stat.FILE_ATTRIBUTE_SYSTEM
 -- Dado: stat.FILE_ATTRIBUTE_TEMPORARY
 -- Dado: stat.FILE_ATTRIBUTE_VIRTUAL

     Adicionado na versão 3.5.

No Windows, as seguintes constantes estão disponíveis para comparação
com o membro ‘st_reparse_tag’ retornado por *note os.lstat(): 4a1.
Estas são constantes bem conhecidas, mas não são uma lista exaustiva.

 -- Dado: stat.IO_REPARSE_TAG_SYMLINK
 -- Dado: stat.IO_REPARSE_TAG_MOUNT_POINT
 -- Dado: stat.IO_REPARSE_TAG_APPEXECLINK

     Adicionado na versão 3.8.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/stat.py

   (2) https://manpages.debian.org/chflags(2)

   (3) 
https://msdn.microsoft.com/en-us/library/windows/desktop/gg258117.aspx


File: python.info,  Node: filecmp — Comparações de arquivos e diretórios,  Next: tempfile — Generate temporary files and directories,  Prev: stat — Interpretando resultados de stat,  Up: Acesso a arquivos e diretórios

5.11.4 ‘filecmp’ — Comparações de arquivos e diretórios
-------------------------------------------------------

'Código-fonte:' Lib/filecmp.py(1)

__________________________________________________________________

O módulo *note filecmp: 5a. define funções para comparar arquivos e
diretórios, com várias compensações opcionais de tempo/correção.  Para
comparar arquivos, veja também o módulo *note difflib: 37.

O módulo *note filecmp: 5a. define as seguintes funções:

 -- Função: filecmp.cmp (f1, f2, shallow=True)

     Compara os arquivos chamados 'f1' e 'f2', retornando ‘True’ se eles
     parecerem iguais, ‘False’ caso contrário.

     Se 'shallow' for verdadeiro e as assinaturas de *note os.stat():
     4a0. (tipo de arquivo, tamanho e hora de modificação) de ambos os
     arquivos forem idênticas, os arquivos serão considerados iguais.

     Caso contrário, os arquivos serão tratados como diferentes se seus
     tamanhos ou conteúdos forem diferentes.

     Observe que nenhum programa externo é chamado a partir desta
     função, o que lhe confere portabilidade e eficiência.

     Esta função usa um cache para comparações passadas e os resultados,
     com entradas de cache invalidadas se as informações de *note
     os.stat(): 4a0. para o arquivo mudarem.  O cache inteiro pode ser
     limpo usando *note clear_cache(): f71.

 -- Função: filecmp.cmpfiles (dir1, dir2, common, shallow=True)

     Compara os arquivos nos dois diretórios 'dir1' e 'dir2' cujos nomes
     são dados por 'common'.

     Retorna três listas de nomes de arquivos: 'match', 'mismatch',
     'errors'.  'match' contém a lista de arquivos que correspondem,
     'mismatch' contém os nomes daqueles que não correspondem e 'errors'
     lista os nomes dos arquivos que não puderam ser comparados.  Os
     arquivos são listados em 'errors' se não existirem em um dos
     diretórios, o usuário não tiver permissão para lê-los ou se a
     comparação não puder ser feita por algum outro motivo.

     O parâmetro 'shallow' tem o mesmo significado e valor padrão que
     *note filecmp.cmp(): 1754.

     Por exemplo, ‘cmpfiles('a', 'b', ['c', 'd/e'])’ comparará ‘a/c’ com
     ‘b/c’ e ‘a/d/e’ com ‘b/d/e’.  ‘'c'’ e ‘'d/e'’ estarão cada um em
     uma das três listas retornadas.

 -- Função: filecmp.clear_cache ()

     Limpa o cache do filecmp.  Isso pode ser útil se um arquivo for
     comparado tão rapidamente após ser modificado que ele esteja dentro
     da resolução de mtime do sistema de arquivos subjacente.

     Adicionado na versão 3.4.

* Menu:

* A classe dircmp::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/filecmp.py


File: python.info,  Node: A classe dircmp,  Up: filecmp — Comparações de arquivos e diretórios

5.11.4.1 A classe ‘dircmp’
..........................

 -- Classe: filecmp.dircmp (a, b, ignore=None, hide=None, *,
          shallow=True)

     Constrói um novo objeto de comparação de diretórios para comparar
     os diretórios 'a' e 'b'.  'ignore' é uma lista de nomes a serem
     ignorados e o padrão é *note filecmp.DEFAULT_IGNORES: f72.  'hide'
     é uma lista de nomes a serem ocultados e o padrão é ‘[os.curdir,
     os.pardir]’.

     A classe *note dircmp: f73. compara arquivos fazendo comparações
     rasas, isto é, 'shallow' conforme descrito para *note
     filecmp.cmp(): 1754. por padrão usando o parâmetro 'shallow'.

     Alterado na versão 3.13: Adicionado o parâmetro 'shallow'.

     A classe *note dircmp: f73. fornece os seguintes métodos:

      -- Método: report ()

          Exibe (para *note sys.stdout: ae6.) uma comparação entre 'a' e
          'b'.

      -- Método: report_partial_closure ()

          Exibe uma comparação entre 'a' e 'b' e subdiretórios imediatos
          comuns.

      -- Método: report_full_closure ()

          Exibe uma comparação entre 'a' e 'b' e subdiretórios comuns
          (recursivamente).

     A classe *note dircmp: f73. oferece uma série de atributos
     interessantes que podem ser usados para obter várias informações
     sobre as árvores de diretórios que estão sendo comparadas.

     Observe que, por meio dos ganchos *note __getattr__(): 4d3, todos
     os atributos são computados preguiçosamente, portanto, não há perda
     de velocidade se apenas os atributos que são leves para computar
     forem usados.

      -- Atributo: left

          O diretório 'a'.

      -- Atributo: right

          O diretório 'b'.

      -- Atributo: left_list

          Arquivos e subdiretórios em 'a', filtrados por 'hide' e
          'ignore'.

      -- Atributo: right_list

          Arquivos e subdiretórios em 'b', filtrados por 'hide' e
          'ignore'.

      -- Atributo: common

          Arquivos e subdiretórios em 'a' e 'b'.

      -- Atributo: left_only

          Arquivos e subdiretórios em apenas 'a'.

      -- Atributo: right_only

          Arquivos e subdiretórios em apenas 'b'.

      -- Atributo: common_dirs

          Subdiretórios em 'a' e 'b'.

      -- Atributo: common_files

          Arquivos em 'a' e 'b'.

      -- Atributo: common_funny

          Nomes em 'a' e 'b', de modo que o tipo difere entre os
          diretórios, ou nomes para os quais *note os.stat(): 4a0.
          relata um erro.

      -- Atributo: same_files

          Arquivos que são idênticos em 'a' e 'b', usando o operador de
          comparação de arquivos da classe.

      -- Atributo: diff_files

          Arquivos que estão em 'a' e 'b', cujos conteúdos diferem de
          acordo com o operador de comparação de arquivos da classe.

      -- Atributo: funny_files

          Arquivos que estão em 'a' e 'b', mas não puderam ser
          comparados.

      -- Atributo: subdirs

          Um dicionário que mapeia nomes em *note common_dirs: 29f9.
          para instâncias *note dircmp: f73. (ou instâncias MyDirCmp se
          esta instância for do tipo MyDirCmp, uma subclasse de *note
          dircmp: f73.).

          Alterado na versão 3.10: Anteriormente, as entradas eram
          sempre instâncias de *note dircmp: f73.  Agora, as entradas
          são do mesmo tipo que 'self', se 'self' for uma subclasse de
          *note dircmp: f73.

 -- Dado: filecmp.DEFAULT_IGNORES

     Adicionado na versão 3.4.

     Lista de diretórios ignorados por *note dircmp: f73. por padrão.

Aqui está um exemplo simplificado do uso do atributo ‘subdirs’ para
pesquisar recursivamente em dois diretórios para mostrar arquivos
diferentes em comum:

     >>> from filecmp import dircmp
     >>> def print_diff_files(dcmp):
     ...     for name in dcmp.diff_files:
     ...         print("diff_file %s found in %s and %s" % (name, dcmp.left,
     ...               dcmp.right))
     ...     for sub_dcmp in dcmp.subdirs.values():
     ...         print_diff_files(sub_dcmp)
     ...
     >>> dcmp = dircmp('dir1', 'dir2')
     >>> print_diff_files(dcmp)


File: python.info,  Node: tempfile — Generate temporary files and directories,  Next: glob — Expansão de padrão de nome de arquivo no estilo Unix,  Prev: filecmp — Comparações de arquivos e diretórios,  Up: Acesso a arquivos e diretórios

5.11.5 ‘tempfile’ — Generate temporary files and directories
------------------------------------------------------------

'Código-fonte:' Lib/tempfile.py(1)

__________________________________________________________________

This module creates temporary files and directories.  It works on all
supported platforms.  *note TemporaryFile: 2a02, *note
NamedTemporaryFile: 4c6, *note TemporaryDirectory: 1275, and *note
SpooledTemporaryFile: 693. are high-level interfaces which provide
automatic cleanup and can be used as *note context managers: 5d4.  *note
mkstemp(): 2a03. and *note mkdtemp(): 21f. are lower-level functions
which require manual cleanup.

All the user-callable functions and constructors take additional
arguments which allow direct control over the location and name of
temporary files and directories.  Files names used by this module
include a string of random characters which allows those files to be
securely created in shared temporary directories.  To maintain backward
compatibility, the argument order is somewhat odd; it is recommended to
use keyword arguments for clarity.

The module defines the following user-callable items:

 -- Função: tempfile.TemporaryFile (mode='w+b', buffering=-1,
          encoding=None, newline=None, suffix=None, prefix=None,
          dir=None, *, errors=None)

     Return a *note file-like object: 15cf. that can be used as a
     temporary storage area.  The file is created securely, using the
     same rules as *note mkstemp(): 2a03.  It will be destroyed as soon
     as it is closed (including an implicit close when the object is
     garbage collected).  Under Unix, the directory entry for the file
     is either not created at all or is removed immediately after the
     file is created.  Other platforms do not support this; your code
     should not rely on a temporary file created using this function
     having or not having a visible name in the file system.

     The resulting object can be used as a *note context manager: 5d4.
     (see *note Exemplos: 2a04.).  On completion of the context or
     destruction of the file object the temporary file will be removed
     from the filesystem.

     The 'mode' parameter defaults to ‘'w+b'’ so that the file created
     can be read and written without being closed.  Binary mode is used
     so that it behaves consistently on all platforms without regard for
     the data that is stored.  'buffering', 'encoding', 'errors' and
     'newline' are interpreted as for *note open(): 51c.

     The 'dir', 'prefix' and 'suffix' parameters have the same meaning
     and defaults as with *note mkstemp(): 2a03.

     The returned object is a true file object on POSIX platforms.  On
     other platforms, it is a file-like object whose ‘file’ attribute is
     the underlying true file object.

     The *note os.O_TMPFILE: fa7. flag is used if it is available and
     works (Linux-specific, requires Linux kernel 3.11 or later).

     On platforms that are neither Posix nor Cygwin, TemporaryFile is an
     alias for NamedTemporaryFile.

     Levanta um *note evento de auditoria: 19fa. ‘tempfile.mkstemp’ com
     o argumento ‘fullpath’.

     Alterado na versão 3.5: The *note os.O_TMPFILE: fa7. flag is now
     used if available.

     Alterado na versão 3.8: Parâmetro 'errors' foi adicionado.

 -- Função: tempfile.NamedTemporaryFile (mode='w+b', buffering=-1,
          encoding=None, newline=None, suffix=None, prefix=None,
          dir=None, delete=True, *, errors=None, delete_on_close=True)

     This function operates exactly as *note TemporaryFile(): 2a02.
     does, except the following differences:

        * This function returns a file that is guaranteed to have a
          visible name in the file system.

        * To manage the named file, it extends the parameters of *note
          TemporaryFile(): 2a02. with 'delete' and 'delete_on_close'
          parameters that determine whether and how the named file
          should be automatically deleted.

     The returned object is always a *note file-like object: 15cf. whose
     ‘file’ attribute is the underlying true file object.  This
     file-like object can be used in a *note with: 5d2. statement, just
     like a normal file.  The name of the temporary file can be
     retrieved from the ‘name’ attribute of the returned file-like
     object.  On Unix, unlike with the *note TemporaryFile(): 2a02, the
     directory entry does not get unlinked immediately after the file
     creation.

     If 'delete' is true (the default) and 'delete_on_close' is true
     (the default), the file is deleted as soon as it is closed.  If
     'delete' is true and 'delete_on_close' is false, the file is
     deleted on context manager exit only, or else when the *note
     file-like object: 15cf. is finalized.  Deletion is not always
     guaranteed in this case (see *note object.__del__(): 1033.).  If
     'delete' is false, the value of 'delete_on_close' is ignored.

     Therefore to use the name of the temporary file to reopen the file
     after closing it, either make sure not to delete the file upon
     closure (set the 'delete' parameter to be false) or, in case the
     temporary file is created in a *note with: 5d2. statement, set the
     'delete_on_close' parameter to be false.  The latter approach is
     recommended as it provides assistance in automatic cleaning of the
     temporary file upon the context manager exit.

     Opening the temporary file again by its name while it is still open
     works as follows:

        * On POSIX the file can always be opened again.

        * On Windows, make sure that at least one of the following
          conditions are fulfilled:

             * 'delete' is false

             * additional open shares delete access (e.g.  by calling
               *note os.open(): dba. with the flag ‘O_TEMPORARY’)

             * 'delete' is true but 'delete_on_close' is false.  Note,
               that in this case the additional opens that do not share
               delete access (e.g.  created via builtin *note open():
               51c.) must be closed before exiting the context manager,
               else the *note os.unlink(): 1134. call on context manager
               exit will fail with a *note PermissionError: d65.

     On Windows, if 'delete_on_close' is false, and the file is created
     in a directory for which the user lacks delete access, then the
     *note os.unlink(): 1134. call on exit of the context manager will
     fail with a *note PermissionError: d65.  This cannot happen when
     'delete_on_close' is true because delete access is requested by the
     open, which fails immediately if the requested access is not
     granted.

     On POSIX (only), a process that is terminated abruptly with SIGKILL
     cannot automatically delete any NamedTemporaryFiles it created.

     Levanta um *note evento de auditoria: 19fa. ‘tempfile.mkstemp’ com
     o argumento ‘fullpath’.

     Alterado na versão 3.8: Parâmetro 'errors' foi adicionado.

     Alterado na versão 3.12: Added 'delete_on_close' parameter.

 -- Classe: tempfile.SpooledTemporaryFile (max_size=0, mode='w+b',
          buffering=-1, encoding=None, newline=None, suffix=None,
          prefix=None, dir=None, *, errors=None)

     This class operates exactly as *note TemporaryFile(): 2a02. does,
     except that data is spooled in memory until the file size exceeds
     'max_size', or until the file’s *note fileno(): 15d0. method is
     called, at which point the contents are written to disk and
     operation proceeds as with *note TemporaryFile(): 2a02.

      -- Método: rollover ()

          The resulting file has one additional method, ‘rollover()’,
          which causes the file to roll over to an on-disk file
          regardless of its size.

     The returned object is a file-like object whose ‘_file’ attribute
     is either an *note io.BytesIO: ed3. or *note io.TextIOWrapper: 7bc.
     object (depending on whether binary or text 'mode' was specified)
     or a true file object, depending on whether *note rollover(): 2a05.
     has been called.  This file-like object can be used in a *note
     with: 5d2. statement, just like a normal file.

     Alterado na versão 3.3: the truncate method now accepts a 'size'
     argument.

     Alterado na versão 3.8: Parâmetro 'errors' foi adicionado.

     Alterado na versão 3.11: Fully implements the *note
     io.BufferedIOBase: 694. and *note io.TextIOBase: 695. abstract base
     classes (depending on whether binary or text 'mode' was specified).

 -- Classe: tempfile.TemporaryDirectory (suffix=None, prefix=None,
          dir=None, ignore_cleanup_errors=False, *, delete=True)

     This class securely creates a temporary directory using the same
     rules as *note mkdtemp(): 21f.  The resulting object can be used as
     a *note context manager: 5d4. (see *note Exemplos: 2a04.).  On
     completion of the context or destruction of the temporary directory
     object, the newly created temporary directory and all its contents
     are removed from the filesystem.

      -- Atributo: name

          The directory name can be retrieved from the ‘name’ attribute
          of the returned object.  When the returned object is used as a
          *note context manager: 5d4, the ‘name’ will be assigned to the
          target of the ‘as’ clause in the *note with: 5d2. statement,
          if there is one.

      -- Método: cleanup ()

          The directory can be explicitly cleaned up by calling the
          ‘cleanup()’ method.  If 'ignore_cleanup_errors' is true, any
          unhandled exceptions during explicit or implicit cleanup (such
          as a *note PermissionError: d65. removing open files on
          Windows) will be ignored, and the remaining removable items
          deleted on a “best-effort” basis.  Otherwise, errors will be
          raised in whatever context cleanup occurs (the ‘cleanup()’
          call, exiting the context manager, when the object is
          garbage-collected or during interpreter shutdown).

     The 'delete' parameter can be used to disable cleanup of the
     directory tree upon exiting the context.  While it may seem unusual
     for a context manager to disable the action taken when exiting the
     context, it can be useful during debugging or when you need your
     cleanup behavior to be conditional based on other logic.

     Levanta um *note evento de auditoria: 19fa. ‘tempfile.mkdtemp’ com
     o argumento ‘fullpath’.

     Adicionado na versão 3.2.

     Alterado na versão 3.10: Added 'ignore_cleanup_errors' parameter.

     Alterado na versão 3.12: Added the 'delete' parameter.

 -- Função: tempfile.mkstemp (suffix=None, prefix=None, dir=None,
          text=False)

     Creates a temporary file in the most secure manner possible.  There
     are no race conditions in the file’s creation, assuming that the
     platform properly implements the *note os.O_EXCL: 2a08. flag for
     *note os.open(): dba.  The file is readable and writable only by
     the creating user ID. If the platform uses permission bits to
     indicate whether a file is executable, the file is executable by no
     one.

     The file descriptor is *note not inherited by child processes: f2b.

     Unlike *note TemporaryFile(): 2a02, the user of *note mkstemp():
     2a03. is responsible for deleting the temporary file when done with
     it.

     If 'suffix' is not ‘None’, the file name will end with that suffix,
     otherwise there will be no suffix.  *note mkstemp(): 2a03. does not
     put a dot between the file name and the suffix; if you need one,
     put it at the beginning of 'suffix'.

     If 'prefix' is not ‘None’, the file name will begin with that
     prefix; otherwise, a default prefix is used.  The default is the
     return value of *note gettempprefix(): 2a09. or *note
     gettempprefixb(): 2a0a, as appropriate.

     If 'dir' is not ‘None’, the file will be created in that directory;
     otherwise, a default directory is used.  The default directory is
     chosen from a platform-dependent list, but the user of the
     application can control the directory location by setting the
     'TMPDIR', 'TEMP' or 'TMP' environment variables.  There is thus no
     guarantee that the generated filename will have any nice
     properties, such as not requiring quoting when passed to external
     commands via ‘os.popen()’.

     If any of 'suffix', 'prefix', and 'dir' are not ‘None’, they must
     be the same type.  If they are bytes, the returned name will be
     bytes instead of str.  If you want to force a bytes return value
     with otherwise default behavior, pass ‘suffix=b''’.

     If 'text' is specified and true, the file is opened in text mode.
     Otherwise, (the default) the file is opened in binary mode.

     *note mkstemp(): 2a03. returns a tuple containing an OS-level
     handle to an open file (as would be returned by *note os.open():
     dba.) and the absolute pathname of that file, in that order.

     Levanta um *note evento de auditoria: 19fa. ‘tempfile.mkstemp’ com
     o argumento ‘fullpath’.

     Alterado na versão 3.5: 'suffix', 'prefix', and 'dir' may now be
     supplied in bytes in order to obtain a bytes return value.  Prior
     to this, only str was allowed.  'suffix' and 'prefix' now accept
     and default to ‘None’ to cause an appropriate default value to be
     used.

     Alterado na versão 3.6: The 'dir' parameter now accepts a *note
     path-like object: 2a0.

 -- Função: tempfile.mkdtemp (suffix=None, prefix=None, dir=None)

     Creates a temporary directory in the most secure manner possible.
     There are no race conditions in the directory’s creation.  The
     directory is readable, writable, and searchable only by the
     creating user ID.

     The user of *note mkdtemp(): 21f. is responsible for deleting the
     temporary directory and its contents when done with it.

     The 'prefix', 'suffix', and 'dir' arguments are the same as for
     *note mkstemp(): 2a03.

     *note mkdtemp(): 21f. returns the absolute pathname of the new
     directory.

     Levanta um *note evento de auditoria: 19fa. ‘tempfile.mkdtemp’ com
     o argumento ‘fullpath’.

     Alterado na versão 3.5: 'suffix', 'prefix', and 'dir' may now be
     supplied in bytes in order to obtain a bytes return value.  Prior
     to this, only str was allowed.  'suffix' and 'prefix' now accept
     and default to ‘None’ to cause an appropriate default value to be
     used.

     Alterado na versão 3.6: The 'dir' parameter now accepts a *note
     path-like object: 2a0.

     Alterado na versão 3.12: *note mkdtemp(): 21f. now always returns
     an absolute path, even if 'dir' is relative.

 -- Função: tempfile.gettempdir ()

     Return the name of the directory used for temporary files.  This
     defines the default value for the 'dir' argument to all functions
     in this module.

     Python searches a standard list of directories to find one which
     the calling user can create files in.  The list is:

       1. The directory named by the ‘TMPDIR’ environment variable.

       2. The directory named by the ‘TEMP’ environment variable.

       3. The directory named by the ‘TMP’ environment variable.

       4. Uma localização específica por plataforma:

             * On Windows, the directories ‘C:\TEMP’, ‘C:\TMP’, ‘\TEMP’,
               and ‘\TMP’, in that order.

             * On all other platforms, the directories ‘/tmp’,
               ‘/var/tmp’, and ‘/usr/tmp’, in that order.

       5. As a last resort, the current working directory.

     The result of this search is cached, see the description of *note
     tempdir: 1a1e. below.

     Alterado na versão 3.10: Always returns a str.  Previously it would
     return any *note tempdir: 1a1e. value regardless of type so long as
     it was not ‘None’.

 -- Função: tempfile.gettempdirb ()

     Same as *note gettempdir(): 1a1f. but the return value is in bytes.

     Adicionado na versão 3.5.

 -- Função: tempfile.gettempprefix ()

     Return the filename prefix used to create temporary files.  This
     does not contain the directory component.

 -- Função: tempfile.gettempprefixb ()

     Same as *note gettempprefix(): 2a09. but the return value is in
     bytes.

     Adicionado na versão 3.5.

The module uses a global variable to store the name of the directory
used for temporary files returned by *note gettempdir(): 1a1f.  It can
be set directly to override the selection process, but this is
discouraged.  All functions in this module take a 'dir' argument which
can be used to specify the directory.  This is the recommended approach
that does not surprise other unsuspecting code by changing global API
behavior.

 -- Dado: tempfile.tempdir

     When set to a value other than ‘None’, this variable defines the
     default value for the 'dir' argument to the functions defined in
     this module, including its type, bytes or str.  It cannot be a
     *note path-like object: 2a0.

     If ‘tempdir’ is ‘None’ (the default) at any call to any of the
     above functions except *note gettempprefix(): 2a09. it is
     initialized following the algorithm described in *note
     gettempdir(): 1a1f.

          Nota: Beware that if you set ‘tempdir’ to a bytes value, there
          is a nasty side effect: The global default return type of
          *note mkstemp(): 2a03. and *note mkdtemp(): 21f. changes to
          bytes when no explicit ‘prefix’, ‘suffix’, or ‘dir’ arguments
          of type str are supplied.  Please do not write code expecting
          or depending on this.  This awkward behavior is maintained for
          compatibility with the historical implementation.

* Menu:

* Exemplos: Exemplos<5>.
* Deprecated functions and variables::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/tempfile.py


File: python.info,  Node: Exemplos<5>,  Next: Deprecated functions and variables,  Up: tempfile — Generate temporary files and directories

5.11.5.1 Exemplos
.................

Here are some examples of typical usage of the *note tempfile: e0.
module:

     >>> import tempfile

     # create a temporary file and write some data to it
     >>> fp = tempfile.TemporaryFile()
     >>> fp.write(b'Hello world!')
     # read data from file
     >>> fp.seek(0)
     >>> fp.read()
     b'Hello world!'
     # close the file, it will be removed
     >>> fp.close()

     # create a temporary file using a context manager
     >>> with tempfile.TemporaryFile() as fp:
     ...     fp.write(b'Hello world!')
     ...     fp.seek(0)
     ...     fp.read()
     b'Hello world!'
     >>>
     # file is now closed and removed

     # create a temporary file using a context manager
     # close the file, use the name to open the file again
     >>> with tempfile.NamedTemporaryFile(delete_on_close=False) as fp:
     ...     fp.write(b'Hello world!')
     ...     fp.close()
     ... # the file is closed, but not removed
     ... # open the file again by using its name
     ...     with open(fp.name, mode='rb') as f:
     ...         f.read()
     b'Hello world!'
     >>>
     # file is now removed

     # create a temporary directory using the context manager
     >>> with tempfile.TemporaryDirectory() as tmpdirname:
     ...     print('created temporary directory', tmpdirname)
     >>>
     # directory and contents have been removed


File: python.info,  Node: Deprecated functions and variables,  Prev: Exemplos<5>,  Up: tempfile — Generate temporary files and directories

5.11.5.2 Deprecated functions and variables
...........................................

A historical way to create temporary files was to first generate a file
name with the *note mktemp(): 19bb. function and then create a file
using this name.  Unfortunately this is not secure, because a different
process may create a file with this name in the time between the call to
*note mktemp(): 19bb. and the subsequent attempt to create the file by
the first process.  The solution is to combine the two steps and create
the file immediately.  This approach is used by *note mkstemp(): 2a03.
and the other functions described above.

 -- Função: tempfile.mktemp (suffix='', prefix='tmp', dir=None)

     Descontinuado desde a versão 2.3: Use *note mkstemp(): 2a03.

     Return an absolute pathname of a file that did not exist at the
     time the call is made.  The 'prefix', 'suffix', and 'dir' arguments
     are similar to those of *note mkstemp(): 2a03, except that bytes
     file names, ‘suffix=None’ and ‘prefix=None’ are not supported.

          Aviso: Use of this function may introduce a security hole in
          your program.  By the time you get around to doing anything
          with the file name it returns, someone else may have beaten
          you to the punch.  *note mktemp(): 19bb. usage can be replaced
          easily with *note NamedTemporaryFile(): 4c6, passing it the
          ‘delete=False’ parameter:

               >>> f = NamedTemporaryFile(delete=False)
               >>> f.name
               '/tmp/tmptjujjt'
               >>> f.write(b"Hello World!\n")
               13
               >>> f.close()
               >>> os.unlink(f.name)
               >>> os.path.exists(f.name)
               False


File: python.info,  Node: glob — Expansão de padrão de nome de arquivo no estilo Unix,  Next: fnmatch — Correspondência de padrões de nome de arquivo Unix,  Prev: tempfile — Generate temporary files and directories,  Up: Acesso a arquivos e diretórios

5.11.6 ‘glob’ — Expansão de padrão de nome de arquivo no estilo Unix
--------------------------------------------------------------------

'Código-fonte:' Lib/glob.py(1)

__________________________________________________________________

O módulo ‘glob’ encontra caminhos usando regras de correspondência de
padrões semelhante a do shell Unix.  Nenhuma expansão de til é feita,
mas ‘*’, ‘?’ e os intervalos de caracteres expressos com ‘[]’ serão
correspondidos corretamente.  Isso é feito usando as funções *note
os.scandir(): a68. e *note fnmatch.fnmatch(): 19df. em conjunto, e não
invocando realmente um subshell.

     Nota: Os caminhos são retornados sem uma ordem específica.  Se
     precisar de uma ordem específica, classifique os resultados.

Arquivos iniciando com um ponto (‘.’) só podem ser correspondidos com
padrões que também iniciam com um ponto, ao contrário de *note
fnmatch.fnmatch(): 19df. ou *note pathlib.Path.glob(): 22d.  Para
expansão de til e variável de shell, use *note os.path.expanduser():
a1e. e *note os.path.expandvars(): 1420.

Para uma correspondência literal, coloque os metacaracteres entre
colchetes.  Por exemplo, ‘'[?]'’ corresponde ao caractere ‘'?'’.

O módulo ‘glob’ define as seguintes funções:

 -- Função: glob.glob (pathname, *, root_dir=None, dir_fd=None,
          recursive=False, include_hidden=False)

     Retorna uma lista possivelmente vazia de nomes de caminho que
     correspondem a 'pathname', que deve ser uma string contendo uma
     especificação de caminho.  'pathname' pode ser absoluto (como
     ‘/usr/src/Python-1.5/Makefile’) ou relativo (como
     ‘../../Tools/*/*.gif’) e pode conter curingas no estilo shell.
     Links simbólicos quebrados são incluídos nos resultados (como no
     shell).  Se os resultados são classificados ou não depende do
     sistema de arquivos.  Se um arquivo que satisfaz as condições for
     removido ou adicionado durante a chamada desta função, não é
     especificado se um nome de caminho para esse arquivo será incluído.

     Se 'root_dir' não for ‘None’, deve ser um *note objeto caminho ou
     similar: 2a0. especificando o diretório raiz para pesquisa.  Tem o
     mesmo efeito em ‘glob()’ que alterar o diretório atual antes de
     chamá-lo.  Se 'pathname' for relativo, o resultado conterá caminhos
     relativos a 'root_dir'.

     Esta função oferece suporte para *note caminhos relativos aos
     descritores de diretório: 1129. com o parâmetro 'dir_fd'.

     Se 'recursive' for verdadeiro, o padrão “‘**’” corresponderá a
     qualquer arquivo e zero ou mais diretórios, subdiretórios e links
     simbólicos para diretórios.  Se o padrão for seguido por um *note
     os.sep: 66a. ou *note os.altsep: 66b, então os arquivos não irão
     corresponder.

     Se 'include_hidden' for verdadeiro, o padrão “‘**’” corresponderá
     aos diretórios ocultos.

     Levanta um *note evento de auditoria: 19fa. ‘glob.glob’ com os
     argumentos ‘pathname’, ‘recursive’.

     Levanta um *note evento de auditoria: 19fa. ‘glob.glob/2’ com os
     argumentos ‘pathname’, ‘recursive’, ‘root_dir’, ‘dir_fd’.

          Nota: Usar o padrão “‘**’” em grandes árvores de diretório
          pode consumir uma quantidade excessiva de tempo.

          Nota: Esta função pode retornar nomes de caminhos duplicados
          se 'pathname' contiver vários padrões “‘**’” e 'recursive' for
          verdadeiro.

     Alterado na versão 3.5: Suporte a globs recursivos usando “‘**’”.

     Alterado na versão 3.10: Adicionados os parâmetros 'root_dir' e
     'dir_fd'.

     Alterado na versão 3.11: Adicionado o parâmetro 'include_hidden'.

 -- Função: glob.iglob (pathname, *, root_dir=None, dir_fd=None,
          recursive=False, include_hidden=False)

     Retorna um *note iterador: 1ac. que produz os mesmos valores que
     *note glob(): 64. sem realmente armazená-los todos simultaneamente.

     Levanta um *note evento de auditoria: 19fa. ‘glob.glob’ com os
     argumentos ‘pathname’, ‘recursive’.

     Levanta um *note evento de auditoria: 19fa. ‘glob.glob/2’ com os
     argumentos ‘pathname’, ‘recursive’, ‘root_dir’, ‘dir_fd’.

          Nota: Esta função pode retornar nomes de caminhos duplicados
          se 'pathname' contiver vários padrões “‘**’” e 'recursive' for
          verdadeiro.

     Alterado na versão 3.5: Suporte a globs recursivos usando “‘**’”.

     Alterado na versão 3.10: Adicionados os parâmetros 'root_dir' e
     'dir_fd'.

     Alterado na versão 3.11: Adicionado o parâmetro 'include_hidden'.

 -- Função: glob.escape (pathname)

     Escapa todos os caracteres especiais (‘'?'’, ‘'*'’ e ‘'['’).  Isso
     é útil se você deseja corresponder a uma string literal arbitrária
     que pode conter caracteres especiais.  Os caracteres especiais nos
     pontos de compartilhamento de unidade/UNC não têm escape, por
     exemplo, no Windows ‘escape('//?/c:/Quo vadis?.txt')’ retorna
     ‘'//?/c:/Quo vadis[?].txt'’.

     Adicionado na versão 3.4.

 -- Função: glob.translate (pathname, *, recursive=False,
          include_hidden=False, seps=None)

     Converte a especificação de caminho dada para uma expressão regular
     para uso com *note re.match(): 126e.  A especificação de caminho
     pode conter curingas no estilo shell.

     Por exemplo:

          >>> import glob, re
          >>>
          >>> regex = glob.translate('**/*.txt', recursive=True, include_hidden=True)
          >>> regex
          '(?s:(?:.+/)?[^/]*\\.txt)\\Z'
          >>> reobj = re.compile(regex)
          >>> reobj.match('foo/bar/baz.txt')
          <re.Match object; span=(0, 15), match='foo/bar/baz.txt'>

     Separadores de caminho e segmentos são significativos para esta
     função, diferentemente de *note fnmatch.translate(): 1bbe.  Por
     padrão, curingas não correspondem a separadores de caminho, e
     segmentos de padrão ‘*’ correspondem precisamente a um segmento de
     caminho.

     Se 'recursive' for verdadeiro, o segmento de padrão “‘**’”
     corresponderá a qualquer número de segmentos de caminho.

     Se 'include_hidden' for verdadeiro, os curingas poderão
     corresponder a segmentos de caminho que começam com um ponto (‘.’).

     Uma sequência de separadores de caminho pode ser fornecida ao
     argumento 'seps'.  Se não for fornecido, *note os.sep: 66a. e *note
     altsep: 66b. (se disponível) são usados.

     Ver também
     ..........

     Os métodos *note pathlib.PurePath.full_match(): 22b. e *note
     pathlib.Path.glob(): 22d, que chamam esta função para implementar
     correspondência de padrões e globbing.

     Adicionado na versão 3.13.

* Menu:

* Exemplos: Exemplos<6>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/glob.py


File: python.info,  Node: Exemplos<6>,  Up: glob — Expansão de padrão de nome de arquivo no estilo Unix

5.11.6.1 Exemplos
.................

Considere um diretório contendo os seguintes arquivos: ‘1.gif’, ‘2.txt’,
‘card.gif’ e um subdiretório ‘sub’ que contém apenas o arquivo ‘3.txt’.
*note glob(): 64. produzirá os seguintes resultados.  Observe como todos
os componentes principais do caminho são preservados.

     >>> import glob
     >>> glob.glob('./[0-9].*')
     ['./1.gif', './2.txt']
     >>> glob.glob('*.gif')
     ['1.gif', 'card.gif']
     >>> glob.glob('?.gif')
     ['1.gif']
     >>> glob.glob('**/*.txt', recursive=True)
     ['2.txt', 'sub/3.txt']
     >>> glob.glob('./**/', recursive=True)
     ['./', './sub/']

Se o diretório contém arquivos começando com ‘.’ eles não serão
correspondidos por padrão.  Por exemplo, considere um diretório contendo
‘card.gif’ e ‘.card.gif’

     >>> import glob
     >>> glob.glob('*.gif')
     ['card.gif']
     >>> glob.glob('.c*')
     ['.card.gif']

Ver também
..........

O módulo *note fnmatch: 5c. oferece expansão de nome de arquivo (não
caminho) no estilo shell.

Ver também
..........

O módulo *note pathlib: a4. oferece objetos de caminho de alto nível.


File: python.info,  Node: fnmatch — Correspondência de padrões de nome de arquivo Unix,  Next: linecache — Acesso aleatório a linhas de texto,  Prev: glob — Expansão de padrão de nome de arquivo no estilo Unix,  Up: Acesso a arquivos e diretórios

5.11.7 ‘fnmatch’ — Correspondência de padrões de nome de arquivo Unix
---------------------------------------------------------------------

'Código-fonte:' Lib/fnmatch.py(1)

__________________________________________________________________

Este módulo fornece suporte para curingas no estilo shell do Unix, que
'não' são iguais às expressões regulares (documentadas no módulo *note
re: b9.).  Os caracteres especiais usados nos curingas no estilo de
shell são:

Padrão           Significado
                 
----------------------------------------------------------
                 
‘*’              corresponde a tudo
                 
                 
‘?’              Corresponde a qualquer caractere único
                 
                 
‘[seq]’          corresponde a qualquer caractere em
                 'seq'
                 
                 
‘[!seq]’         corresponde a qualquer caractere
                 ausente em 'seq'
                 

Para uma correspondência literal, coloque os metacaracteres entre
colchetes.  Por exemplo, ‘'[?]'’ corresponde ao caractere ‘'?'’.

Note que o separador de nome de arquivo (‘'/'’ no Unix) 'não' é especial
para este módulo.  Veja o módulo *note glob: 64. para expansão do nome
do caminho (*note glob: 64. usa *note filter(): 19e1. para corresponder
aos segmentos do nome do caminho).  Da mesma forma, os nomes de arquivos
que começam com um ponto final não são especiais para este módulo e são
correspondidos pelos padrões ‘*’ e ‘?’.

A menos que indicado de outra forma, “string de nome de arquivo” e
“string de padrão” referem-se a objetos *note str: 44c. ou *note bytes:
1c2. codificados em ‘ISO-8859-1’.  Observe que as funções documentadas
abaixo não permitem misturar um padrão ‘bytes’ com um nome de arquivo
‘str’ e vice-versa.

Finalmente, observe também que *note functools.lru_cache(): 9f7. com um
'maxsize' de 32768 é usado para armazenar em cache os padrões de regex
compilados (tipados) nas seguintes funções: *note fnmatch(): 5c, *note
fnmatchcase(): 19e0, *note filter(): 19e1.

 -- Função: fnmatch.fnmatch (name, pat)

     Testa se a string do nome de arquivo 'name' corresponde à string de
     padrão 'pat', retornando ‘True’ ou ‘False’.  Ambos os parâmetros
     são normalizados em maiúsculas e minúsculas usando *note
     os.path.normcase(): 298f.  *note fnmatchcase(): 19e0. pode ser
     usado para realizar uma comparação com distinção entre maiúsculas e
     minúsculas, independentemente de ser padrão para o sistema
     operacional.

     Este exemplo vai exibir todos os nomes de arquivos no diretório
     atual com a extensão ‘.txt’:

          import fnmatch
          import os

          for arquivo in os.listdir('.'):
              if fnmatch.fnmatch(arquivo, '*.txt'):
                  print(arquivo)

 -- Função: fnmatch.fnmatchcase (name, pat)

     Testa se a string do nome de arquivo 'name' corresponde à string de
     padrão 'pat', retornando ‘True’ ou ‘False’; a comparação diferencia
     maiúsculas de minúsculas e não se aplica a *note
     os.path.normcase(): 298f.

 -- Função: fnmatch.filter (names, pat)

     Constrói uma lista a partir daqueles elementos do *note iterável:
     1268. de strings de nome de arquivo 'names' que correspondem à
     string de padrão 'pat'.  É o mesmo que ‘[n for n in names if
     fnmatch(n, pat)]’, mas implementado com mais eficiência.

 -- Função: fnmatch.translate (pat)

     Retorna o padrão 'pat' no estilo shell convertido em uma expressão
     regular para usar com *note re.match(): 126e.  O padrão é esperado
     ser um *note str: 44c.

     Exemplo:

          >>> import fnmatch, re
          >>>
          >>> regex = fnmatch.translate('*.txt')
          >>> regex
          '(?s:.*\\.txt)\\Z'
          >>> reobj = re.compile(regex)
          >>> reobj.match('foobar.txt')
          <re.Match object; span=(0, 10), match='foobar.txt'>

Ver também
..........

Módulo *note glob: 64.

     Expansão de caminho no estilo shell do Unix.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/fnmatch.py


File: python.info,  Node: linecache — Acesso aleatório a linhas de texto,  Next: shutil — Operações de arquivo de alto nível,  Prev: fnmatch — Correspondência de padrões de nome de arquivo Unix,  Up: Acesso a arquivos e diretórios

5.11.8 ‘linecache’ — Acesso aleatório a linhas de texto
-------------------------------------------------------

'Código-fonte:' Lib/linecache.py(1)

__________________________________________________________________

O módulo *note linecache: 85. permite obter qualquer linha de um arquivo
fonte Python, enquanto tenta otimizar internamente, usando um cache, o
caso comum em que muitas linhas são lidas em um único arquivo.  Isso é
usado pelo módulo *note traceback: fe. para recuperar as linhas de
origem para inclusão no traceback (situação da pilha de execução)
formatado.

A função *note tokenize.open(): 2a18. é usada para abrir arquivos.  Esta
função usa *note tokenize.detect_encoding(): 2a19. para obter a
codificação do arquivo; na ausência de um token de codificação, o padrão
de codificação do arquivo é UTF-8.

O módulo *note linecache: 85. define as seguintes funções:

 -- Função: linecache.getline (filename, lineno, module_globals=None)

     Obtém a linha 'lineno' do arquivo chamado 'filename'.  Essa função
     nunca levanta uma exceção — ela retornará ‘''’ em erros (o
     caractere de nova linha final será incluído para as linhas
     encontradas).

     Se um arquivo chamado 'filename' não for encontrado, a função
     primeiro verifica por um ‘__loader__’ da PEP 302(2) em
     'module_globals'.  Se existe um carregador e ele define um método
     ‘get_source’, isso determina as linhas fonte (se ‘get_source()’
     retornar ‘None’, então ‘''’ será retornado).  Por fim, se
     'filename' for um nome de arquivo relativo, ele será procurado em
     relação às entradas no caminho de pesquisa do módulo, ‘sys.path’.

 -- Função: linecache.clearcache ()

     Limpa o cache.  Use esta função se você não precisar mais de linhas
     de arquivos lidos anteriormente usando *note getline(): e50.

 -- Função: linecache.checkcache (filename=None)

     Verifica a validade do cache.  Use esta função se os arquivos no
     cache tiverem sido alterados no disco e você precisar da versão
     atualizada.  Se 'filename' for omitido, ele verificará todas as
     entradas no cache.

 -- Função: linecache.lazycache (filename, module_globals)

     Captura detalhes suficientes sobre um módulo não baseado em arquivo
     para permitir obter suas linhas posteriormente via *note getline():
     e50. mesmo se 'module_globals' for ‘None’ na chamada posterior.
     Isso evita a execução de E/S até que uma linha seja realmente
     necessária, sem ter que carregar o módulo global indefinidamente.

     Adicionado na versão 3.5.

Exemplo:

     >>> import linecache
     >>> linecache.getline(linecache.__file__, 8)
     'import sys\n'

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/linecache.py

   (2) https://peps.python.org/pep-0302/


File: python.info,  Node: shutil — Operações de arquivo de alto nível,  Prev: linecache — Acesso aleatório a linhas de texto,  Up: Acesso a arquivos e diretórios

5.11.9 ‘shutil’ — Operações de arquivo de alto nível
----------------------------------------------------

'Código-fonte:' Lib/shutil.py(1)

__________________________________________________________________

O módulo *note shutil: c5. oferece várias operações de alto nível em
arquivos e coleções de arquivos.  Em particular, são fornecidas funções
que possuem suporte a cópia e remoção de arquivos.  Para operações em
arquivos individuais, veja também o módulo *note os: a1.

     Aviso: Mesmo as funções de cópia de arquivos de nível mais alto
     (*note shutil.copy(): a64, *note shutil.copy2(): a65.) não podem
     copiar todos os metadados do arquivo.

     Nas plataformas POSIX, isso significa que o proprietário e o grupo
     do arquivo são perdidos, bem como as ACLs.  No Mac OS, a bifurcação
     de recursos e outros metadados não são usados.  Isso significa que
     os recursos serão perdidos e o tipo de arquivo e os códigos do
     criador não estarão corretos.  No Windows, os proprietários de
     arquivos, ACLs e fluxos de dados alternativos não são copiados.

* Menu:

* Operações de diretório e arquivos::
* Operações de arquivamento::
* Consultando o tamanho do terminal de saída::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/shutil.py


File: python.info,  Node: Operações de diretório e arquivos,  Next: Operações de arquivamento,  Up: shutil — Operações de arquivo de alto nível

5.11.9.1 Operações de diretório e arquivos
..........................................

 -- Função: shutil.copyfileobj (fsrc, fdst[, length])

     Copia o conteúdo do *note objeto arquivo ou similar: 1203. 'fsrc'
     para o objeto arquivo ou similar 'fdst'.  O número inteiro
     'length', se fornecido, é o tamanho do buffer.  Em particular, um
     valor negativo 'length' significa copiar os dados sem repetir os
     dados de origem em pedaços; por padrão, os dados são lidos em
     pedaços para evitar o consumo descontrolado de memória.  Observe
     que, se a posição atual do arquivo do objeto 'fsrc' não for 0,
     apenas o conteúdo da posição atual do arquivo até o final do
     arquivo será copiado.

 -- Função: shutil.copyfile (src, dst, *, follow_symlinks=True)

     Copia o conteúdo (sem metadados) do arquivo chamado 'src' para um
     arquivo chamado 'dst' e retorna 'dst' da maneira mais eficiente
     possível.  'src' e 'dst' são *note objetos caminho ou similares:
     2a0. ou nomes de caminhos dados como strings.

     'dst' deve ser o nome completo do arquivo de destino; veja *note
     copy(): a64. para uma cópia que aceita um caminho de diretório de
     destino.  Se 'src' e 'dst' especificarem o mesmo arquivo, *note
     SameFileError: fd2. será levantada.

     O local de destino deve ser gravável; caso contrário, uma exceção
     *note OSError: 417. será levantada.  Se o 'dst' já existir, ele
     será substituído.  Arquivos especiais como dispositivos de
     caractere ou bloco e encadeamentos (pipe) não podem ser copiados
     com esta função.

     Se 'follow_symlinks' for falso e 'src' for um link simbólico, um
     novo link simbólico será criado em vez de copiar o arquivo 'src'
     para o qual o arquivo aponta.

     Levanta um *note evento de auditoria: 19fa. ‘shutil.copyfile’ com
     os argumentos ‘src’, ‘dst’.

     Alterado na versão 3.3: *note IOError: 108b. costumava ser
     levantada em vez de *note OSError: 417.  Adicionado argumento
     'follow_symlinks'.  Agora retorna 'dst'.

     Alterado na versão 3.4: Levanta *note SameFileError: fd2. em vez de
     *note Error: fd1.  Como a primeira é uma subclasse da última, essa
     alteração é compatível com versões anteriores.

     Alterado na versão 3.8: As chamadas de sistema de cópia rápida
     específicas da plataforma podem ser usadas internamente para copiar
     o arquivo com mais eficiência.  Veja a seção *note Operações de
     cópia eficientes dependentes da plataforma: a67.

 -- Exceção: shutil.SpecialFileError

     Esta exceção é levantada quando *note copyfile(): a63. ou *note
     copytree(): a33. tenta copiar um pipe nomeado.

     Adicionado na versão 2.7.

 -- Exceção: shutil.SameFileError

     Essa exceção é levantada se a origem e o destino em *note
     copyfile(): a63. forem o mesmo arquivo.

     Adicionado na versão 3.4.

 -- Função: shutil.copymode (src, dst, *, follow_symlinks=True)

     Copia os bits de permissão de 'src' para 'dst'.  O conteúdo do
     arquivo, o proprietário e o grupo não são afetados.  'src' e 'dst'
     são *note objetos caminho ou similares: 2a0. ou nomes de caminhos
     dados como strings.  Se 'follow_symlinks' for falso e 'src' e 'dst'
     forem links simbólicos, *note copymode(): 179f. tentará modificar o
     modo do 'dst' (e não o arquivo para o qual ele aponta).  Essa
     funcionalidade não está disponível em todas as plataformas; veja
     *note copystat(): 116d. para mais informações.  Se *note
     copymode(): 179f. não puder modificar links simbólicos na
     plataforma local, e for solicitado a fazê-lo, não fará nada e
     retornará.

     Levanta um *note evento de auditoria: 19fa. ‘shutil.copymode’ com
     os argumentos ‘src’, ‘dst’.

     Alterado na versão 3.3: Adicionado argumento 'follow_symlinks'.

 -- Função: shutil.copystat (src, dst, *, follow_symlinks=True)

     Copia os bits de permissão, hora do último acesso, hora da última
     modificação e sinalizadores de 'src' para 'dst'.  No Linux, *note
     copystat(): 116d. também copia os “atributos estendidos” sempre que
     possível.  O conteúdo do arquivo, o proprietário e o grupo não são
     afetados.  'src' e 'dst' são *note objetos caminho ou similares:
     2a0. ou nomes de caminhos dados como strings.

     Se 'follow_symlinks' for falso e 'src' e 'dst' se referirem a links
     simbólicos, *note copystat(): 116d. operará nos próprios links
     simbólicos, e não nos arquivos aos quais os links simbólicos se
     referem - lendo as informações do link simbólico 'src' e gravando
     as informações no link simbólico 'dst'.

          Nota: Nem todas as plataformas oferecem a capacidade de
          examinar e modificar links simbólicos.  O próprio Python pode
          dizer qual funcionalidade está disponível localmente.

             * Se ‘os.chmod in os.supports_follow_symlinks’ for ‘True’,
               *note copystat(): 116d. pode modificar os bits de
               permissão de um link simbólico.

             * Se ‘os.utime in os.supports_follow_symlinks’ for ‘True’,
               *note copystat(): 116d. pode modificar as horas da última
               modificação e do último acesso de um link simbólico.

             * Se ‘os.chflags in os.supports_follow_symlinks’ for
               ‘True’, *note copystat(): 116d. pode modificar os
               sinalizadores de um link simbólico.  (‘os.chflags’ não
               está disponível em todas as plataformas.)

          Nas plataformas em que algumas ou todas essas funcionalidades
          não estão disponíveis, quando solicitado a modificar um link
          simbólico, *note copystat(): 116d. copiará tudo o que puder.
          *note copystat(): 116d. nunca retorna falha.

          Por favor, veja *note os.supports_follow_symlinks: 1137. para
          mais informações.

     Levanta um *note evento de auditoria: 19fa. ‘shutil.copystat’ com
     os argumentos ‘src’, ‘dst’.

     Alterado na versão 3.3: Adicionado argumento 'follow_symlinks' e
     suporte a atributos estendidos do Linux.

 -- Função: shutil.copy (src, dst, *, follow_symlinks=True)

     Copia o arquivo 'src' para o arquivo ou diretório 'dst'.  'src' e
     'dst' devem ser *note objetos arquivo ou similares: 2a0. ou
     strings.  Se 'dst' especificar um diretório, o arquivo será copiado
     para 'dst' usando o nome de arquivo base de 'src'.  Se 'dst'
     especifica um arquivo que já existe, ele será substituído.  Retorna
     o caminho para o arquivo recém-criado.

     Se 'follow_symlinks' for falso e 'src' for um link simbólico, 'dst'
     será criado como um link simbólico.  Se 'follow_symlinks' for
     verdadeiro e 'src' for um link simbólico, 'dst' será uma cópia do
     arquivo ao qual 'src' se refere.

     *note copy(): a64. copia os dados do arquivo e o modo de permissão
     do arquivo (consulte *note os.chmod(): 21b.).  Outros metadados,
     como os tempos de criação e modificação do arquivo, não são
     preservados.  Para preservar todos os metadados do arquivo do
     original, use *note copy2(): a65.

     Levanta um *note evento de auditoria: 19fa. ‘shutil.copyfile’ com
     os argumentos ‘src’, ‘dst’.

     Levanta um *note evento de auditoria: 19fa. ‘shutil.copymode’ com
     os argumentos ‘src’, ‘dst’.

     Alterado na versão 3.3: Adicionado argumento 'follow_symlinks'.
     Agora retorna o caminho para o arquivo recém-criado.

     Alterado na versão 3.8: As chamadas de sistema de cópia rápida
     específicas da plataforma podem ser usadas internamente para copiar
     o arquivo com mais eficiência.  Veja a seção *note Operações de
     cópia eficientes dependentes da plataforma: a67.

 -- Função: shutil.copy2 (src, dst, *, follow_symlinks=True)

     Idêntico a *note copy(): a64, exceto que *note copy2(): a65. também
     tenta preservar os metadados do arquivo.

     Quando 'follow_symlinks' for falso e 'src' for um link simbólico,
     *note copy2(): a65. tenta copiar todos os metadados do link
     simbólico 'src' para o link simbólico 'dst' recém-criado.  No
     entanto, essa funcionalidade não está disponível em todas as
     plataformas.  Nas plataformas em que algumas ou todas essas
     funcionalidades não estão disponíveis, *note copy2(): a65.
     preservará todos os metadados que puder; *note copy2(): a65. nunca
     levanta uma exceção porque não pode preservar os metadados do
     arquivo.

     *note copy2(): a65. usa *note copystat(): 116d. para copiar os
     metadados do arquivo.  Por favor, veja *note copystat(): 116d. para
     obter mais informações sobre o suporte da plataforma para modificar
     os metadados do link simbólico.

     Levanta um *note evento de auditoria: 19fa. ‘shutil.copyfile’ com
     os argumentos ‘src’, ‘dst’.

     Levanta um *note evento de auditoria: 19fa. ‘shutil.copystat’ com
     os argumentos ‘src’, ‘dst’.

     Alterado na versão 3.3: Adicionado argumento 'follow_symlinks',
     tenta copiar também atributos estendidos do sistema de arquivos
     (atualmente apenas no Linux).  Agora retorna o caminho para o
     arquivo recém-criado.

     Alterado na versão 3.8: As chamadas de sistema de cópia rápida
     específicas da plataforma podem ser usadas internamente para copiar
     o arquivo com mais eficiência.  Veja a seção *note Operações de
     cópia eficientes dependentes da plataforma: a67.

 -- Função: shutil.ignore_patterns (*patterns)

     Esta função de fábrica cria uma função que pode ser usada como um
     chamável para o argumento 'ignore' de *note copytree(): a33,
     ignorando arquivos e diretórios que correspondem a um dos padrões
     'patterns' de estilo glob fornecidos.  Veja o exemplo abaixo.

 -- Função: shutil.copytree (src, dst, symlinks=False, ignore=None,
          copy_function=copy2, ignore_dangling_symlinks=False,
          dirs_exist_ok=False)

     Copia recursivamente uma árvore de diretórios inteira com raiz em
     'src' para um diretório chamado 'dst' e retorna o diretório de
     destino.  Todos os diretórios intermediários necessários para
     conter 'dst' também serão criados por padrão.

     Permissões e horas dos diretórios são copiados com *note
     copystat(): 116d, arquivos individuais são copiados usando *note
     copy2(): a65.

     Se 'symlinks' for verdadeiro, os links simbólicos na árvore de
     origem são representados como links simbólicos na nova árvore e os
     metadados dos links originais serão copiados na medida do permitido
     pela plataforma; se falso ou omitido, o conteúdo e os metadados dos
     arquivos vinculados são copiados para a nova árvore.

     Quando 'symlinks' for falso, se o arquivo apontado pelo link
     simbólico não existir, uma exceção será adicionada na lista de
     erros levantada em uma exceção *note Error: fd1. no final do
     processo de cópia.  Você pode definir o sinalizador opcional
     'ignore_dangling_symlinks' como true se desejar silenciar esta
     exceção.  Observe que esta opção não tem efeito em plataformas que
     não possuem suporte a *note os.symlink(): 1133.

     Se 'ignore' for fornecido, deve ser um chamável que receberá como
     argumento o diretório que está sendo visitado por *note copytree():
     a33, e uma lista de seu conteúdo, retornada por *note os.listdir():
     1139.  Como *note copytree(): a33. é chamada recursivamente, o
     chamável 'ignore' será chamado uma vez para cada diretório que é
     copiado.  O chamável deve retornar uma sequência de nomes de
     diretório e arquivo em relação ao diretório atual (ou seja, um
     subconjunto dos itens em seu segundo argumento); esses nomes serão
     ignorados no processo de cópia.  *note ignore_patterns(): 2a20.
     pode ser usado para criar um chamável que ignore nomes com base em
     padrões de estilo glob.

     Se uma ou mais exceções ocorrerem, uma *note Error: fd1. é
     levantada com uma lista dos motivos.

     Se 'copy_function' for fornecida, deverá ser um chamável que será
     usado para copiar cada arquivo.  Ele será chamado com o caminho de
     origem e o caminho de destino como argumentos.  Por padrão, *note
     copy2(): a65. é usada, mas qualquer função que possua suporte à
     mesma assinatura (como *note copy(): a64.) pode ser usada.

     Se 'dirs_exist_ok' for false (o padrão) e 'dst' já existir, uma
     *note FileExistsError: 1056. será levantada.  Se 'dirs_exist_ok'
     for true, a operação de cópia continuará se encontrar diretórios
     existentes, e os arquivos dentro da árvore 'dst' serão sobrescritos
     pelos arquivos correspondentes da árvore 'src'.

     Levanta um *note evento de auditoria: 19fa. ‘shutil.copytree’ com
     os argumentos ‘src’, ‘dst’.

     Alterado na versão 3.2: Adicionado o argumento 'copy_function' para
     poder fornecer uma função de cópia personalizada.  Adicionado o
     argumento 'ignore_dangling_symlinks' para silenciar erros de links
     simbólicos quando 'symlinks' for falso.

     Alterado na versão 3.3: Copia metadados quando 'symlinks' for
     falso.  Agora, retorna 'dst'.

     Alterado na versão 3.8: As chamadas de sistema de cópia rápida
     específicas da plataforma podem ser usadas internamente para copiar
     o arquivo com mais eficiência.  Veja a seção *note Operações de
     cópia eficientes dependentes da plataforma: a67.

     Alterado na versão 3.8: Adicionado o parâmetro 'dirs_exist_ok'.

 -- Função: shutil.rmtree (path, ignore_errors=False, onerror=None, *,
          onexc=None, dir_fd=None)

     Exclui uma árvore de diretório inteira; 'path' deve apontar para um
     diretório (mas não um link simbólico para um diretório).  Se
     'ignore_errors' for verdadeiro, os erros resultantes de remoções
     com falha serão ignorados; se falso ou omitido, tais erros são
     tratados chamando um manipulador especificado por 'onexc' ou
     'onerror' ou, se ambos forem omitidos, exceções são propagadas para
     o chamador.

     Esta função tem suporte a *note caminhos relativos para descritores
     de diretório: 1129.

          Nota: Em plataformas que suportam as funções baseadas em
          descritores de arquivo necessárias, uma versão resistente a
          ataques de links simbólicos de *note rmtree(): 301. é usada
          por padrão.  Em outras plataformas, a implementação *note
          rmtree(): 301. é suscetível a um ataque de link simbólico:
          dados o tempo e as circunstâncias apropriados, os invasores
          podem manipular links simbólicos no sistema de arquivos para
          excluir arquivos que eles não seriam capazes de acessar de
          outra forma.  Os aplicativos podem usar o atributo de função
          *note rmtree.avoids_symlink_attacks: 2a21. para determinar
          qual caso se aplica.

     Se 'onexc' for fornecido, deve ser um chamável que aceite três
     parâmetros: 'function', 'path', e 'excinfo'.

     O primeiro parâmetro, 'function', é a função que levantou a
     exceção; depende da plataforma e da implementação.  O segundo
     parâmetro, 'path', será o nome do caminho passado para a 'função'.
     O terceiro parâmetro, 'excinfo', é a exceção que foi levantada.
     Exceções levantadas por 'onexc' não serão capturadas.

     O descontinuado 'onerror' é semelhante ao 'onexc', exceto que o
     terceiro parâmetro que ele recebe é a tupla retornada de *note
     sys.exc_info(): 68a.

     Ver também
     ..........

     *note exemplo rmtree: 2a22. para um exemplo de tratamento da
     remoção de uma árvore de diretórios que contém arquivos somente
     leitura.

     Levanta um *note evento de auditoria: 19fa. ‘shutil.rmtree’ com os
     argumentos ‘path’, ‘dir_fd’.

     Alterado na versão 3.3: Adicionada uma versão resistente a ataques
     de link simbólico que é usada automaticamente se a plataforma
     suportar funções baseadas em descritor de arquivo.

     Alterado na versão 3.8: No Windows, não excluirá mais o conteúdo de
     uma junção de diretório antes de remover a junção.

     Alterado na versão 3.11: Adicionado o parâmetro 'dir_fd'.

     Alterado na versão 3.12: Adicionado o parâmetro 'onexc',
     descontinuado 'onerror'.

     Alterado na versão 3.13: ‘rmtree()’ agora ignora exceções *note
     FileNotFoundError: 42b. para todos, exceto o caminho de nível
     superior.  Exceções diferentes de *note OSError: 417. e subclasses
     de ‘OSError’ agora são sempre propagadas para o chamador.

      -- Atributo: rmtree.avoids_symlink_attacks

          Indica se a plataforma e implementação atuais fornecem uma
          versão resistente a ataques de link simbólico de *note
          rmtree(): 301.  Atualmente, isso só é verdade para plataformas
          que suportam funções de acesso ao diretório baseadas em
          descritor de arquivo.

          Adicionado na versão 3.3.

 -- Função: shutil.move (src, dst, copy_function=copy2)

     Move recursivamente um arquivo ou diretório ('src') para outro
     local e retorna ao destino.

     Se 'dst' for um diretório existente ou um symlink para um
     diretório, então 'src' é movido para dentro desse diretório.  O
     caminho de destino nesse diretório não deve existir ainda.

     Se 'dst' já existir, mas não for um diretório, ele poderá ser
     substituído dependendo da semântica de *note os.rename(): 1130.

     Se o destino está no sistema de arquivos atual, então *note
     os.rename(): 1130. é usado.  Caso contrário, 'src' é copiado para o
     destino usando 'copy_function' e depois removido.  No caso de links
     simbólicos, um novo link simbólico apontando para o destino de
     'src' será criado como o destino e 'src' serão removidos.

     Se 'copy_function' for fornecido, deve ser um chamável que leva
     dois argumentos 'src' e a destinação, e será usado para copiar
     'src' para a destinação se *note os.rename(): 1130. não puder ser
     usado.  Se a fonte for um diretório, *note copytree(): a33. é
     chamado, passando 'copy_function'.  A 'copy_function' padrão é
     *note copy2(): a65.  Usar *note copy(): a64. como 'copy_function'
     permite que a movimentação seja bem-sucedida quando não é possível
     copiar também os metadados, às custas de não copiar nenhum dos
     metadados.

     Levanta um *note evento de auditoria: 19fa. ‘shutil.move’ com os
     argumentos ‘src’, ‘dst’.

     Alterado na versão 3.3: Adicionada manipulação de links simbólicos
     explícitos para sistemas de arquivos externos, adaptando-os ao
     comportamento do GNU ‘mv’.  Agora retorna 'dst'.

     Alterado na versão 3.5: Adicionado o argumento nomeado
     'copy_function'.

     Alterado na versão 3.8: As chamadas de sistema de cópia rápida
     específicas da plataforma podem ser usadas internamente para copiar
     o arquivo com mais eficiência.  Veja a seção *note Operações de
     cópia eficientes dependentes da plataforma: a67.

     Alterado na versão 3.9: Aceita um *note objeto caminho ou similar:
     2a0. para 'src' e 'dst'.

 -- Função: shutil.disk_usage (path)

     Retorna estatísticas de uso de disco sobre o caminho fornecido como
     *note tupla nomeada: 64e. com os atributos 'total', 'used' e
     'free', que são a quantidade de espaço total, usado e livre, em
     bytes.  'path' pode ser um arquivo ou diretório.

          Nota: Em sistemas de arquivos Unix, 'path' deve apontar para
          um caminho dentro de uma partição de sistema de arquivos
          'montada'.  Nessas plataformas, o CPython não tenta recuperar
          informações de uso de disco de sistemas de arquivos não
          montados.

     Adicionado na versão 3.3.

     Alterado na versão 3.8: No Windows, 'path' pode agora ser um
     arquivo ou diretório.

     *note Disponibilidade: 1ed8.: Unix, Windows.

 -- Função: shutil.chown (path, user=None, group=None, *, dir_fd=None,
          follow_symlinks=True)

     Altera o proprietário 'usuário' e/ou 'group' do 'path' fornecido.

     'user' pode ser um nome de usuário do sistema ou um uid; o mesmo se
     aplica ao 'group'.  É necessário pelo menos um argumento.

     Veja também *note os.chown(): 112d, a função subjacente.

     Levanta um *note evento de auditoria: 19fa. ‘shutil.chown’ com os
     argumentos ‘path’, ‘user’, ‘group’.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

     Alterado na versão 3.13: Adicionados os parâmetros 'dir_fd' e
     'follow_symlinks'.

 -- Função: shutil.which (cmd, mode=os.F_OK | os.X_OK, path=None)

     Retorna o caminho para um executável que seria executado se o 'cmd'
     fornecido fosse chamado.  Se nenhum 'cmd' for chamado, retorna
     ‘None’.

     'mode' é uma máscara de permissão passada para *note os.access():
     112b, por padrão determinando se o arquivo existe e é executável.

     'path' é uma “string ‘PATH’” que especifica os diretórios a serem
     procurados, delimitados por *note os.pathsep: 1ecc.  Quando nenhum
     'path' é especificado, a variável de ambiente ‘PATH’ é lida de
     *note os.environ: 11f9, retornando para *note os.defpath: 1b79. se
     não estiver definida.

     Se 'cmd' contiver um componente de diretório, ‘which()’ verificará
     apenas o caminho especificado diretamente e não pesquisará os
     diretórios listados em 'path' ou na variável de ambiente ‘PATH’ do
     sistema.

     No Windows, o diretório atual é prefixado ao 'path' se o 'mode' não
     incluir ‘os.X_OK’.  Quando o 'mode' inclui ‘os.X_OK’, a API do
     Windows ‘NeedCurrentDirectoryForExePathW’ será consultada para
     determinar se o diretório atual deve ser prefixado ao 'path'.  Para
     evitar consultar o diretório de trabalho atual para executáveis:
     defina a variável de ambiente ‘NoDefaultCurrentDirectoryInExePath’.

     Também no Windows, a variável de ambiente ‘PATHEXT’ é usada para
     resolver comandos que podem não incluir uma extensão.  Por exemplo,
     se você chamar ‘shutil.which("python")’, *note which(): 4b4.
     pesquisará ‘PATHEXT’ para saber que deve procurar por ‘python.exe’
     dentro dos diretórios 'path'.  Por exemplo, no Windows:

          >>> shutil.which("python")
          'C:\\Python33\\python.EXE'

     Isso também se aplica quando 'cmd' é um caminho que contém um
     componente de diretório:

          >>> shutil.which("C:\\Python33\\python")
          'C:\\Python33\\python.EXE'

     Adicionado na versão 3.3.

     Alterado na versão 3.8: O tipo *note bytes: 1c2. é agora aceitado.
     Se o tipo de 'cmd' é *note bytes: 1c2, o tipo resultante também é
     *note bytes: 1c2.

     Alterado na versão 3.12: No Windows, o diretório atual não é mais
     adicionado ao caminho de pesquisa se 'mode' incluir ‘os.X_OK’ e
     WinAPI ‘NeedCurrentDirectoryForExePathW(cmd)’ for falso, caso
     contrário, o diretório atual será adicionado mesmo se já estiver no
     caminho de pesquisa; ‘PATHEXT’ agora é usado mesmo quando 'cmd'
     inclui um componente de diretório ou termina com uma extensão que
     está em ‘PATHEXT’; e nomes de arquivos que não têm extensão agora
     podem ser encontrados.

 -- Exceção: shutil.Error

     Esta exceção coleta exceções que são levantadas durante uma
     operação de vários arquivos.  Para *note copytree(): a33, o
     argumento de exceção é uma lista de tuplas de 3 elementos
     ('srcname', 'dstname', 'exception').

* Menu:

* Operações de cópia eficientes dependentes da plataforma::
* Exemplo de copytree::
* exemplo rmtree::


File: python.info,  Node: Operações de cópia eficientes dependentes da plataforma,  Next: Exemplo de copytree,  Up: Operações de diretório e arquivos

5.11.9.2 Operações de cópia eficientes dependentes da plataforma
................................................................

A partir do Python 3.8, todas as funções envolvendo uma cópia de arquivo
(*note copyfile(): a63, *note copy(): a64, *note copy2(): a65, *note
copytree(): a33. e *note move(): e82. ) podem usar chamadas do sistema
de “cópia rápida” específicas da plataforma para copiar o arquivo de
forma mais eficiente (veja bpo-33671(1)).  “cópia rápida” significa que
a operação de cópia ocorre dentro do kernel, evitando o uso de buffers
de espaço de usuário em Python como em “‘outfd.write(infd.read())’”.

No macOS, fcopyfile(2) é usado para copiar o conteúdo do arquivo (não
metadados).

No Linux, *note os.sendfile(): b21. é usado.

No Windows, *note shutil.copyfile(): a63. usa um tamanho de buffer
padrão maior (1 MiB ao invés de 64 KiB) e uma variante de *note
shutil.copyfileobj(): a66. baseada em *note memoryview(): 2eb. é usada.

Se a operação de cópia rápida falhar e nenhum dado foi escrito no
arquivo de destino, o shutil irá silenciosamente voltar a usar a função
menos eficiente *note copyfileobj(): a66. internamente.

Alterado na versão 3.8.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33671

   (2) http://www.manpagez.com/man/3/copyfile/


File: python.info,  Node: Exemplo de copytree,  Next: exemplo rmtree,  Prev: Operações de cópia eficientes dependentes da plataforma,  Up: Operações de diretório e arquivos

5.11.9.3 Exemplo de copytree
............................

Um exemplo que usa o auxiliar *note ignore_patterns(): 2a20.:

     from shutil import copytree, ignore_patterns

     copytree(source, destination, ignore=ignore_patterns('*.pyc', 'tmp*'))

Isso irá copiar tudo, exceto os arquivos ‘.pyc’ e arquivos ou diretórios
cujo nome começa com ‘tmp’.

Outro exemplo que usa o argumento 'ignore' para adicionar uma chamada de
registro:

     from shutil import copytree
     import logging

     def _logpath(path, names):
         logging.info('Working in %s', path)
         return []   # nada será ignorado

     copytree(source, destination, ignore=_logpath)


File: python.info,  Node: exemplo rmtree,  Prev: Exemplo de copytree,  Up: Operações de diretório e arquivos

5.11.9.4 exemplo rmtree
.......................

Este exemplo mostra como remover uma árvore de diretório no Windows onde
alguns dos arquivos têm seu conjunto de bits somente leitura.  Ele usa a
função de retorno onexc para limpar o bit somente leitura e tentar
remover novamente.  Qualquer falha subsequente se propagará.

     import os, stat
     import shutil

     def remove_readonly(func, path, _):
         "Clear the readonly bit and reattempt the removal"
         os.chmod(path, stat.S_IWRITE)
         func(path)

     shutil.rmtree(directory, onexc=remove_readonly)


File: python.info,  Node: Operações de arquivamento,  Next: Consultando o tamanho do terminal de saída,  Prev: Operações de diretório e arquivos,  Up: shutil — Operações de arquivo de alto nível

5.11.9.5 Operações de arquivamento
..................................

Adicionado na versão 3.2.

Alterado na versão 3.5: Adicionado suporte ao formato 'xztar'.

Utilitários de alto nível para criar e ler arquivos compactados e
arquivados também são fornecidos.  Eles contam com os módulos *note
zipfile: 131. e *note tarfile: de.

 -- Função: shutil.make_archive (base_name, format[, root_dir[,
          base_dir[, verbose[, dry_run[, owner[, group[, logger]]]]]]])

     Cria um arquivo compactado (como zip ou tar) e retorna seu nome.

     'base_name' é o nome do arquivo a ser criado, incluindo o caminho,
     menos qualquer extensão específica do formato.

     'format' é o formato do arquivo: um de “zip” (se o módulo *note
     zlib: 133. estiver disponível), “tar”, “gztar” (se o módulo *note
     zlib: 133. estiver disponível), “bztar” (se o módulo *note bz2: 13.
     estiver disponível) ou “xztar” (se o módulo *note lzma: 8a. estiver
     disponível).

     'root_dir' é um diretório que será o diretório raiz do arquivo,
     todos os caminhos no arquivo serão relativos a ele; por exemplo,
     normalmente chdir em 'root_dir' antes de criar o arquivo.

     'base_dir' é o diretório de onde iniciamos o arquivamento; ou seja,
     'base_dir' será o prefixo comum de todos os arquivos e diretórios
     no arquivo.  'base_dir' deve ser fornecido em relação a 'root_dir'.
     Veja *note Exemplo de arquivamento com base_dir: 2a28. para como
     usar 'base_dir' e 'root_dir' juntos.

     'root_dir' e 'base_dir' têm com padrão o diretório atual.

     Se 'dry_run' for verdadeiro, nenhum arquivo é criado, mas as
     operações que seriam executadas são registradas no 'logger'.

     'owner' e 'group' são usados ao criar um arquivo tar.  Por padrão,
     usa o proprietário e grupo atuais.

     'logger' deve ser um objeto compatível com a PEP 282(1), geralmente
     uma instância de *note logging.Logger: b64.

     O argumento 'verbose' não é usado e foi descontinuado.

     Levanta um *note evento de auditoria: 19fa. ‘shutil.make_archive’
     com os argumentos ‘base_name’, ‘format’, ‘root_dir’, ‘base_dir’.

          Nota: Esta função não é segura para thread quando arquivadores
          personalizados registrados com *note
          register_archive_format(): 2a29. não suportam o argumento
          'root_dir'.  Neste caso, ele altera temporariamente o
          diretório de trabalho atual do processo para 'root_dir' para
          executar o arquivamento.

     Alterado na versão 3.8: O formato pax moderno (POSIX.1-2001) agora
     é usado em vez do formato GNU legado para arquivos criados com
     ‘format="tar"’.

     Alterado na versão 3.10.6: Esta função agora é segura para thread
     durante a criação de arquivos ‘.zip’ e tar padrão.

 -- Função: shutil.get_archive_formats ()

     Retorna uma lista de formatos suportados para arquivamento.  Cada
     elemento da sequência retornada é uma tupla ‘(nome, descrição)’.

     Por padrão, *note shutil: c5. fornece estes formatos:

        - 'zip': arquivo ZIP (se o módulo *note zlib: 133. estiver
          disponível).

        - 'tar': Arquivo tar não compactado.  Usa o formato POSIX.1-2001
          pax para novos arquivos.

        - 'gztar': arquivo tar compactado com gzip (se o módulo *note
          zlib: 133. estiver disponível).

        - 'bztar': arquivo tar compactado com bzip2 (se o módulo *note
          bz2: 13. estiver disponível).

        - 'xztar': Arquivo tar compactado com xz (se o módulo *note
          lzma: 8a. estiver disponível).

     Você pode registrar novos formatos ou fornecer seu próprio
     arquivador para quaisquer formatos existentes, usando *note
     register_archive_format(): 2a29.

 -- Função: shutil.register_archive_format (name, function[,
          extra_args[, description]])

     Registra um arquivador para o formato 'name'.

     'function' é o chamável que será usado para desempacotar arquivos.
     O chamável receberá o 'base_name' do arquivo a ser criado, seguido
     pelo 'base_dir' (cujo padrão é *note os.curdir: 2990.) para iniciar
     o arquivamento.  Outros argumentos são passados como argumentos
     nomeados 'owner', 'group', 'dry_run' e 'logger' (como passado em
     *note make_archive(): 4b3.).

     Se 'function' tiver o atributo personalizado
     ‘function.supports_root_dir’ definido como ‘True’, o argumento
     'root_dir' será passado como um argumento nomeado.  Caso contrário,
     o diretório de trabalho atual do processo será temporariamente
     alterado para 'root_dir' antes de chamar 'function'.  Nesse caso,
     *note make_archive(): 4b3. não é segura para thread.

     Se fornecido, 'extra_args' é uma sequência de pares ‘(nome, valor)’
     que serão usados como argumentos nomeados extras quando o
     arquivador chamável for usado.

     'description' é usado por *note get_archive_formats(): 2a2a. que
     retorna a lista de arquivadores.  O padrão é uma string vazia.

     Alterado na versão 3.12: Adicionado suporte para funções que
     suportam o argumento 'root_dir'.

 -- Função: shutil.unregister_archive_format (name)

     Remove o formato de arquivo 'name' da lista de formatos suportados.

 -- Função: shutil.unpack_archive (filename[, extract_dir[, format[,
          filter]]])

     Desempacota um arquivo.  'filename' é o caminho completo do
     arquivo.

     'extract_dir' é o nome do diretório de destino onde o arquivo é
     desempacotado.  Se não for fornecido, o diretório de trabalho atual
     será usado.

     'format' é o formato do arquivo: um de “zip”, “tar”, “gztar”,
     “bztar” ou “xztar”.  Ou qualquer outro formato registrado com *note
     register_unpack_format(): 2a2c.  Se não for fornecido, *note
     unpack_archive(): 46b. irá usar a extensão do nome do arquivo e ver
     se um desempacotador foi registrado para essa extensão.  Caso
     nenhum seja encontrado, uma *note ValueError: 202. é levantada.

     O argumento somente-nomeado 'filter' é passado para a função de
     desempacotamento subjacente.  Para arquivos zip, 'filter' não é
     aceito.  Para arquivos tar, é recomendado defini-lo como ‘'data'’,
     a menos que esteja usando recursos específicos para tar e sistemas
     de arquivos do tipo UNIX. (Veja *note Filtros de extração: 46c.
     para detalhes.)  O filtro ‘'data'’ se tornará o padrão para
     arquivos tar no Python 3.14.

     Levanta um *note evento de auditoria: 19fa. ‘shutil.unpack_archive’
     com os argumentos ‘filename’, ‘extract_dir’, ‘format’.

          Aviso: Nunca extrai arquivos de fontes não confiáveis sem
          inspeção prévia.  É possível que arquivos sejam criados fora
          do caminho especificado no argumento 'extract_dir', por
          exemplo, membros que têm nomes de arquivo absolutos começando
          com “/” ou nomes de arquivo com dois pontos “..”.

     Alterado na versão 3.7: Aceita um *note objeto caminho ou similar:
     2a0. para 'filename' e 'extract_dir'.

     Alterado na versão 3.12: Adicionado o argumento 'filter'.

 -- Função: shutil.register_unpack_format (name, extensions, function[,
          extra_args[, description]])

     Registra um formato de desempacotamento.  'name' é o nome do
     formato e 'extensions' é uma lista de extensões correspondentes ao
     formato, como ‘.zip’ para arquivos Zip.

     'function' é o chamável que será usado para desempacotar arquivos.
     O chamável receberá:

        - o caminho do arquivo, como argumento posicional;

        - o diretório para o qual o arquivo deve ser extraído, como um
          argumento posicional;

        - possivelmente um argumento nomeado 'filter', se foi dado a
          *note unpack_archive(): 46b.;

        - argumentos nomeados adicionais, especificados por 'extra_args'
          como uma sequência de tuplas ‘(nome, valor)’.

     'description' pode ser fornecido para descrever o formato e será
     devolvido pela função *note get_unpack_formats(): 2a2d.

 -- Função: shutil.unregister_unpack_format (name)

     Cancela o registro de um formato de desempacotamento.  'name' é o
     nome do formato.

 -- Função: shutil.get_unpack_formats ()

     Retorna uma lista de todos os formatos registrados para
     desempacotamento.  Cada elemento da sequência retornada é uma tupla
     ‘(name, extensions, description)’.

     Por padrão, *note shutil: c5. fornece estes formatos:

        - 'zip': arquivo ZIP (desempacotar arquivos compactados funciona
          apenas se o módulo correspondente estiver disponível).

        - 'tar': arquivo tar não comprimido.

        - 'gztar': arquivo tar compactado com gzip (se o módulo *note
          zlib: 133. estiver disponível).

        - 'bztar': arquivo tar compactado com bzip2 (se o módulo *note
          bz2: 13. estiver disponível).

        - 'xztar': Arquivo tar compactado com xz (se o módulo *note
          lzma: 8a. estiver disponível).

     Você pode registrar novos formatos ou fornecer seu próprio
     desempacotador para quaisquer formatos existentes, usando *note
     register_unpack_format(): 2a2c.

* Menu:

* Exemplo de arquivo::
* Exemplo de arquivamento com base_dir::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0282/


File: python.info,  Node: Exemplo de arquivo,  Next: Exemplo de arquivamento com base_dir,  Up: Operações de arquivamento

5.11.9.6 Exemplo de arquivo
...........................

Neste exemplo, criamos um arquivo tar compactado com gzip contendo todos
os arquivos encontrados no diretório ‘.ssh’ do usuário:

     >>> from shutil import make_archive
     >>> import os
     >>> archive_name = os.path.expanduser(os.path.join('~', 'meuarquivo'))
     >>> root_dir = os.path.expanduser(os.path.join('~', '.ssh'))
     >>> make_archive(archive_name, 'gztar', root_dir)
     '/Users/tarek/meuarquivo.tar.gz'

O arquivo resultante contém:

     $ tar -tzvf /Users/tarek/meuarquivo.tar.gz
     drwx------ tarek/staff       0 2010-02-01 16:23:40 ./
     -rw-r--r-- tarek/staff     609 2008-06-09 13:26:54 ./authorized_keys
     -rwxr-xr-x tarek/staff      65 2008-06-09 13:26:54 ./config
     -rwx------ tarek/staff     668 2008-06-09 13:26:54 ./id_dsa
     -rwxr-xr-x tarek/staff     609 2008-06-09 13:26:54 ./id_dsa.pub
     -rw------- tarek/staff    1675 2008-06-09 13:26:54 ./id_rsa
     -rw-r--r-- tarek/staff     397 2008-06-09 13:26:54 ./id_rsa.pub
     -rw-r--r-- tarek/staff   37192 2010-02-06 18:23:10 ./known_hosts


File: python.info,  Node: Exemplo de arquivamento com base_dir,  Prev: Exemplo de arquivo,  Up: Operações de arquivamento

5.11.9.7 Exemplo de arquivamento com 'base_dir'
...............................................

Neste exemplo, semelhante ao *note acima: 2a30, mostramos como usar
*note make_archive(): 4b3, mas desta vez com o uso de 'base_dir'.  Agora
temos a seguinte estrutura de diretório:

     $ tree tmp
     tmp
     └── root
         └── estrutura
             ├── conteudo
                 └── por_favor_adicionar.txt
             └── nao_adicionar.txt

No arquivo final, ‘please_add.txt’ deve ser incluído, mas
‘do_not_add.txt’ não deve.  Portanto, usamos o seguinte:

     >>> from shutil import make_archive
     >>> import os
     >>> archive_name = os.path.expanduser(os.path.join('~', 'meuarquivo'))
     >>> make_archive(
     ...     archive_name,
     ...     'tar',
     ...     root_dir='tmp/root',
     ...     base_dir='estrutura/conteudo',
     ... )
     '/Users/tarek/meu_arquivo.tar'

Listar os arquivos no arquivo resultante nos dá:

     $ python -m tarfile -l /Users/tarek/meuarquivo.tar
     estrutura/conteudo/
     estrutura/conteudo/por_favor_adicionar.txt


File: python.info,  Node: Consultando o tamanho do terminal de saída,  Prev: Operações de arquivamento,  Up: shutil — Operações de arquivo de alto nível

5.11.9.8 Consultando o tamanho do terminal de saída
...................................................

 -- Função: shutil.get_terminal_size (fallback=(columns, lines))

     Obtém o tamanho da janela do terminal.

     Para cada uma das duas dimensões, a variável de ambiente, ‘COLUMNS’
     e ‘LINES’ respectivamente, é verificada.  Se a variável estiver
     definida e o valor for um número inteiro positivo, ela será usada.

     Quando ‘COLUMNS’ ou ‘LINES’ não está definida, que é o caso comum,
     o terminal conectado a *note sys.__stdout__: 2a33. é consultado
     invocando *note os.get_terminal_size(): 1141.

     Se o tamanho do terminal não pode ser consultado com sucesso, ou
     porque o sistema não tem suporte a consultas, ou porque não estamos
     conectados a um terminal, o valor dado no parâmetro ‘fallback’ é
     usado.  O padrão de ‘fallback’ é ‘(80, 24)’, que é o tamanho padrão
     usado por muitos emuladores de terminal.

     O valor retornado é uma tupla nomeada do tipo *note
     os.terminal_size: 2a34.

     Veja também: The Single UNIX Specification, Versão 2, Other
     Environment Variables(1).

     Adicionado na versão 3.3.

     Alterado na versão 3.11: Os valores ‘fallback’ também são usados se
     *note os.get_terminal_size(): 1141. retornar zeros.

Ver também
..........

Módulo *note os: a1.

     Interfaces do sistema operacional, incluindo funções para trabalhar
     com arquivos num nível inferior a *note objetos arquivos: 1203. do
     Python.

Módulo *note io: 7f.

     A biblioteca embutida de E/S do Python, incluindo as classes
     abstratas e algumas classes concretas, como E/S de arquivos.

Função embutida *note open(): 51c.

     A maneira padrão de abrir arquivos para ler e escrever em Python.

   ---------- Footnotes ----------

   (1) 
https://pubs.opengroup.org/onlinepubs/7908799/xbd/envvar.html#tag_002_003


File: python.info,  Node: Persistência de Dados,  Next: Compressão de Dados e Arquivamento,  Prev: Acesso a arquivos e diretórios,  Up: A Biblioteca Padrão do Python

5.12 Persistência de Dados
==========================

Os módulos descritos neste capítulo possuem suporte ao armazenamento de
dados do Python em um formato persistente no disco.  Os módulos *note
pickle: a6. e *note marshal: 8d. podem transformar muitos tipos de dados
do Python em um fluxo de bytes e então recriar os objetos a partir dos
bytes.  Os vários módulos relacionados ao DBM possuem suporte a uma
família de formatos de arquivo baseados em hash que armazenam um
mapeamento de strings para outras strings.

A lista de módulos descritos neste capítulo é:

* Menu:

* pickle — Serialização de objetos Python::
* copyreg — Registra funções de suporte pickle::
* shelve — Python object persistence::
* marshal — Serialização interna de objetos Python::
* dbm — Interfaces para “banco de dados” Unix::
* sqlite3 —- interface DB-API 2.0 interface para bancos de dados SQLite: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite.


File: python.info,  Node: pickle — Serialização de objetos Python,  Next: copyreg — Registra funções de suporte pickle,  Up: Persistência de Dados

5.12.1 ‘pickle’ — Serialização de objetos Python
------------------------------------------------

'Código-fonte:' Lib/pickle.py(1)

__________________________________________________________________

O módulo *note pickle: a6. implementa protocolos binários para
serializar e desserializar uma estrutura de objeto Python.  '“Pickling”'
é o processo pelo qual uma hierarquia de objetos Python é convertida em
um fluxo de bytes, e '“unpickling”' é a operação inversa, em que um
fluxo de bytes (de um *note arquivo binário: 1e0e. ou *note objeto bytes
ou similar: d4f.) é convertido de volta em uma hierarquia de objetos.
Pickling (e unpickling) com pickle é alternativamente conhecido como
“serialização”, “marshalling” (2) ou “flattening”; no entanto, para
evitar confusão, usa-se is termos “pickling” e “unpickling”.  Nesta
documentação traduzida, usaremos “serialização com pickle” e
“desserialização com pickle”, respectivamente.

     Aviso: O módulo ‘pickle’ 'não é seguro'.  Desserialize com pickle
     apenas os dados em que você confia.

     É possível construir dados maliciosos em pickle que irão 'executar
     código arbitrário durante o processo de desserialização com
     pickle'.  Nunca desserialize com pickle os dados que possam vir de
     uma fonte não confiável ou que possam ter sido adulterados.

     Considere assinar dados com *note hmac: 6a. se você precisar
     garantir que eles não foram adulterados.

     Formatos de serialização mais seguros como *note json: 82. podem
     ser mais apropriados se você estiver processando dados não
     confiáveis.  Vejo *note Comparação com json: 2a3b.

* Menu:

* Relacionamento com outros módulos Python::
* Formato de fluxo de dados::
* Interface do módulo::
* O que pode ser serializado e desserializado com pickle?::
* Serializando com pickle instâncias de classes::
* Redução personalizada para tipos, funções e outros objetos: Redução personalizada para tipos funções e outros objetos.
* Buffers fora da banda::
* Restringindo globais::
* Desempenho: Desempenho<2>.
* Exemplos: Exemplos<7>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/pickle.py

   (2) Não confunda isso com o módulo *note marshal: 8d.


File: python.info,  Node: Relacionamento com outros módulos Python,  Next: Formato de fluxo de dados,  Up: pickle — Serialização de objetos Python

5.12.1.1 Relacionamento com outros módulos Python
.................................................

* Menu:

* Comparação com marshal::
* Comparação com json::


File: python.info,  Node: Comparação com marshal,  Next: Comparação com json,  Up: Relacionamento com outros módulos Python

5.12.1.2 Comparação com ‘marshal’
.................................

Python tem um módulo de serialização mais primitivo chamado *note
marshal: 8d, mas em geral *note pickle: a6. deve ser sempre a forma
preferida de serializar objetos Python.  *note marshal: 8d. existe
principalmente para oferecer suporte a arquivos ‘.pyc’ do Python.

O módulo *note pickle: a6. difere do *note marshal: 8d. de várias
maneiras significativas:

   * *note marshal: 8d. não pode ser usado para serializar classes
     definidas pelo usuário e suas instâncias.  *note pickle: a6. pode
     salvar e restaurar instâncias de classe de forma transparente, no
     entanto, a definição de classe deve ser importável e viver no mesmo
     módulo de quando o objeto foi armazenado.

   * O formato de serialização do *note marshal: 8d. não tem garantia de
     portabilidade entre as versões do Python.  Como sua principal
     tarefa em vida é oferecer suporte a arquivos ‘.pyc’, os
     implementadores do Python se reservam o direito de alterar o
     formato de serialização de maneiras não compatíveis com versões
     anteriores, caso haja necessidade.  O formato de serialização do
     *note pickle: a6. tem a garantia de ser compatível com versões
     anteriores em todas as versões do Python, desde que um protocolo
     pickle compatível seja escolhido e o código de serialização e
     desserialização com pickle lide com diferenças de tipo Python 2 a
     Python 3 se seus dados estiverem cruzando aquele limite de mudança
     de linguagem exclusivo.


File: python.info,  Node: Comparação com json,  Prev: Comparação com marshal,  Up: Relacionamento com outros módulos Python

5.12.1.3 Comparação com ‘json’
..............................

Existem diferenças fundamentais entre os protocolos pickle e JSON
(JavaScript Object Notation)(1):

   * JSON é um formato de serialização de texto (ele produz texto
     unicode, embora na maioria das vezes seja codificado para ‘utf-8’),
     enquanto pickle é um formato de serialização binário;

   * JSON é legível por humanos, enquanto pickle não é;

   * JSON é interoperável e amplamente usado fora do ecossistema Python,
     enquanto pickle é específico para Python;

   * JSON, por padrão, só pode representar um subconjunto dos tipos
     embutidos do Python, e nenhuma classe personalizada; pickle pode
     representar um número extremamente grande de tipos Python (muitos
     deles automaticamente, pelo uso inteligente dos recursos de
     introspecção do Python; casos complexos podem ser resolvidos
     implementando *note APIs de objetos específicos: 2a3f.);

   * Ao contrário do pickle, a desserialização não confiável do JSON não
     cria, por si só, uma vulnerabilidade de execução de código
     arbitrário.

Ver também
..........

O módulo *note json: 82.: um módulo de biblioteca padrão que permite a
serialização e desserialização JSON.

   ---------- Footnotes ----------

   (1) https://json.org


File: python.info,  Node: Formato de fluxo de dados,  Next: Interface do módulo,  Prev: Relacionamento com outros módulos Python,  Up: pickle — Serialização de objetos Python

5.12.1.4 Formato de fluxo de dados
..................................

O formato de dados usado pelo *note pickle: a6. é específico do Python.
Isso tem a vantagem de não haver restrições impostas por padrões
externos, como JSON (que não pode representar o compartilhamento de
ponteiros); no entanto, isso significa que programas não Python podem
não ser capazes de reconstruir objetos Python serializados com pickle.

Por padrão, o formato de dados do *note pickle: a6. usa uma
representação binária relativamente compacta.  Se você precisa de
características de tamanho ideal, pode com eficiência *note comprimir:
2a41. dados processados com pickle.

O módulo *note pickletools: a7. contém ferramentas para analisar fluxos
de dados gerados por *note pickle: a6.  O código-fonte do *note
pickletools: a7. tem extensos comentários sobre códigos de operações
usados por protocolos de pickle.

Existem atualmente 6 protocolos diferentes que podem ser usados para a
serialização com pickle.  Quanto mais alto o protocolo usado, mais
recente é a versão do Python necessária para ler o pickle produzido.

   * A versão 0 do protocolo é o protocolo original “legível por
     humanos” e é compatível com versões anteriores do Python.

   * A versão 1 do protocolo é um formato binário antigo que também é
     compatível com versões anteriores do Python.

   * A versão 2 do protocolo foi introduzida no Python 2.3.  Ela fornece
     uma serialização com pickle muito mais eficiente de *note classes
     estilo novo: 2a42.  Consulte PEP 307(1) para obter informações
     sobre as melhorias trazidas pelo protocolo 2.

   * A versão 3 do protocolo foi adicionada ao Python 3.0.  Ela tem
     suporte explícito a objetos *note bytes: 1c2. e não é possível
     desserializar com pickle a partir do Python 2.x.  Este era o
     protocolo padrão no Python 3.0–3.7.

   * A versão 4 do protocolo foi adicionada ao Python 3.4.  Ela adiciona
     suporte para objetos muito grandes, serialização com pickle de mais
     tipos de objetos e algumas otimizações de formato de dados.  É o
     protocolo padrão a partir do Python 3.8.  Consulte PEP 3154(2) para
     obter informações sobre as melhorias trazidas pelo protocolo 4.

   * A versão 5 do protocolo foi adicionada ao Python 3.8.  Ela adiciona
     suporte a dados fora da banda e aumento de velocidade para dados
     dentro da banda.  Consulte PEP 574(3) para obter informações sobre
     as melhorias trazidas pelo protocolo 5.

     Nota: A serialização é uma noção mais primitiva do que a
     persistência; embora o *note pickle: a6. leia e escreva objetos
     arquivo, ele não lida com a questão de nomear objetos persistentes,
     nem a questão (ainda mais complicada) de acesso simultâneo a
     objetos persistentes.  O módulo *note pickle: a6. pode transformar
     um objeto complexo em um fluxo de bytes e pode transformar o fluxo
     de bytes em um objeto com a mesma estrutura interna.  Talvez a
     coisa mais óbvia a fazer com esses fluxos de bytes seja escrevê-los
     em um arquivo, mas também é concebível enviá-los através de uma
     rede ou armazená-los em um banco de dados.  O módulo *note shelve:
     c3. fornece uma interface simples para serializar e desserializar
     com pickle os objetos em arquivos de banco de dados no estilo DBM.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0307/

   (2) https://peps.python.org/pep-3154/

   (3) https://peps.python.org/pep-0574/


File: python.info,  Node: Interface do módulo,  Next: O que pode ser serializado e desserializado com pickle?,  Prev: Formato de fluxo de dados,  Up: pickle — Serialização de objetos Python

5.12.1.5 Interface do módulo
............................

Para serializar uma hierarquia de objeto, você simplesmente chama a
função *note dumps(): 14ec.  Da mesma forma, para desserializar um fluxo
de dados, você chama a função *note loads(): d33.  No entanto, se você
quiser mais controle sobre a serialização e desserialização, pode criar
um objeto *note Pickler: a28. ou *note Unpickler: 159f, respectivamente.

O módulo *note pickle: a6. fornece as seguintes constantes:

 -- Dado: pickle.HIGHEST_PROTOCOL

     Um inteiro, a mais alta *note versão de protocolo: ce1. disponível.
     Este valor pode ser passado como um valor de 'protocol' para as
     funções *note dump(): 2a44. e *note dumps(): 14ec, bem como o
     construtor de *note Pickler: a28.

 -- Dado: pickle.DEFAULT_PROTOCOL

     Um inteiro, a *note versão de protocolo: ce1. padrão usada para a
     serialização com pickle.  Pode ser menor que *note
     HIGHEST_PROTOCOL: 14ed.  Atualmente, o protocolo padrão é 4,
     introduzido pela primeira vez no Python 3.4 e incompatível com as
     versões anteriores.

     Alterado na versão 3.0: O protocolo padrão é 3.

     Alterado na versão 3.8: O protocolo padrão é 4.

O módulo *note pickle: a6. fornece as seguintes funções para tornar o
processo de serialização com pickle mais conveniente:

 -- Função: pickle.dump (obj, file, protocol=None, *, fix_imports=True,
          buffer_callback=None)

     Escreve a representação após a serialização com pickle do objeto
     'obj' no *note objeto arquivo: 1203. aberto 'file'.  Isso é
     equivalente a ‘Pickler(file, protocol).dump(obj)’.

     Os argumentos 'file', 'protocol', 'fix_imports' e 'buffer_callback'
     têm o mesmo sentido que no construtor de *note Pickler: a28.

     Alterado na versão 3.8: O argumento 'buffer_callback' foi
     adicionado.

 -- Função: pickle.dumps (obj, protocol=None, *, fix_imports=True,
          buffer_callback=None)

     Retorna a representação em após a serialização com pickle do objeto
     'obj' como um objeto *note bytes: 1c2, ao invés de escrevê-lo em um
     arquivo.

     Os argumentos 'protocol', 'fix_imports' e 'buffer_callback' têm o
     mesmo sentido que no construtor de *note Pickler: a28.

     Alterado na versão 3.8: O argumento 'buffer_callback' foi
     adicionado.

 -- Função: pickle.load (file, *, fix_imports=True, encoding='ASCII',
          errors='strict', buffers=None)

     Lê a representação serializada com pickle de um objeto a partir de
     *note objeto arquivo: 1203. aberto 'file' e retorna a hierarquia de
     objeto reconstituído especificada nele.  Isso é equivalente a
     ‘Unpickler(file).load()’.

     A versão do protocolo pickle é detectada automaticamente, portanto,
     nenhum argumento de protocolo é necessário.  Bytes após a
     representação serializada com pickle do objeto são ignorados.

     Os argumentos 'file', 'fix_imports', 'encoding', 'errors', 'strict'
     e 'buffers' têm o mesmo significado que no construtor construtor
     *note Unpickler: 159f.

     Alterado na versão 3.8: O argumento 'buffers' foi adicionado.

 -- Função: pickle.loads (data, /, *, fix_imports=True,
          encoding='ASCII', errors='strict', buffers=None)

     Retorna a hierarquia de objeto reconstituído da representação
     serializada com pickle 'data' de um objeto.  'data' deve ser um
     *note objeto bytes ou similar: d4f.

     A versão do protocolo pickle é detectada automaticamente, portanto,
     nenhum argumento de protocolo é necessário.  Bytes após a
     representação serializada com pickle do objeto são ignorados.

     Os argumentos 'fix_imports', 'encoding', 'errors', 'strict' e
     'buffers' têm o mesmo significado que no construtor construtor
     *note Unpickler: 159f.

     Alterado na versão 3.8: O argumento 'buffers' foi adicionado.

O módulo *note pickle: a6. define três exceções:

 -- Exceção: pickle.PickleError

     Classe base comum para as outras exceções de serialização com
     pickle.  Herda de *note Exception: 9e2.

 -- Exceção: pickle.PicklingError

     Erro levantado quando um objeto não serializável com pickle é
     encontrado por *note Pickler: a28.  Herda de *note PickleError:
     2a45.

     Consulte *note O que pode ser serializado e desserializado com
     pickle?: 2a47. para saber quais tipos de objetos podem ser
     serializados com pickle.

 -- Exceção: pickle.UnpicklingError

     Erro levantado quando há um problema ao desserializar com pickle um
     objeto, como dados corrompidos ou violação de segurança.  Herda de
     *note PickleError: 2a45.

     Observe que outras exceções também podem ser levantadas durante a
     desserialização com pickle, incluindo (mas não necessariamente
     limitado a) AttributeError, EOFError, ImportError e IndexError.

O módulo *note pickle: a6. exporta três classes, *note Pickler: a28,
*note Unpickler: 159f. e *note PickleBuffer: 15a2.:

 -- Classe: pickle.Pickler (file, protocol=None, *, fix_imports=True,
          buffer_callback=None)

     Isso leva um arquivo binário a escrever um fluxo de dados pickle.

     O argumento opcional 'protocol', um inteiro, diz ao pickler para
     usar o protocolo fornecido; os protocolos suportados são de 0 a
     *note HIGHEST_PROTOCOL: 14ed.  Se não for especificado, o padrão é
     *note DEFAULT_PROTOCOL: 831.  Se um número negativo for
     especificado, *note HIGHEST_PROTOCOL: 14ed. é selecionado.

     O argumento 'file' deve ter um método write() que aceite um
     argumento de um único byte.  Portanto, pode ser um arquivo em disco
     aberto para escrita binária, uma instância *note io.BytesIO: ed3.
     ou qualquer outro objeto personalizado que atenda a esta interface.

     Se 'fix_imports' for verdadeiro e 'protocolo' for menor que 3,
     pickle tentará mapear os novos nomes do Python 3 para os nomes dos
     módulos antigos usados no Python 2, de modo que o fluxo de dados
     pickle seja legível com o Python 2.

     Se 'buffer_callback' for ‘None’ (o padrão), as visualizações de
     buffer são serializadas em 'file' como parte do fluxo pickle.

     Se 'buffer_callback' não for ‘None’, ele pode ser chamado qualquer
     número de vezes com uma visualização de buffer.  Se essa chamada
     retornar um valor falso (tal como ‘None’), o buffer fornecido é
     *note fora da banda: 2a49.; caso contrário, o buffer é serializado
     dentro da banda, ou seja, dentro do fluxo pickle.

     É um erro se 'buffer_callback' não for ‘None’ e 'protocol' for
     ‘None’ ou menor que 5.

     Alterado na versão 3.8: O argumento 'buffer_callback' foi
     adicionado.

      -- Método: dump (obj)

          Escreve a representação serializada em pickle de 'obj' no
          objeto arquivo aberto fornecido no construtor.

      -- Método: persistent_id (obj)

          Não faz nada por padrão.  Isso existe para que uma subclasse
          possa substituí-lo.

          Se *note persistent_id(): 1687. retornar ‘None’, 'obj' é
          serializado com pickle como de costume.  Qualquer outro valor
          faz com que *note Pickler: a28. emita o valor retornado como
          um ID persistente para 'obj'.  O significado deste ID
          persistente deve ser definido por *note
          Unpickler.persistent_load(): 168e.  Observe que o valor
          retornado por *note persistent_id(): 1687. não pode ter um ID
          persistente.

          Consulte *note Persistência de objetos externos: 2a4a. para
          detalhes e exemplos de usos.

          Alterado na versão 3.13: Foi adicionada a implementação padrão
          desse método na implementação em C da ‘Pickler’.

      -- Atributo: dispatch_table

          A tabela de despacho de um objeto pickler é um registro de
          'funções de redução' do tipo que pode ser declarado usando
          *note copyreg.pickle(): 2a4b.  É um mapeamento cujas chaves
          são classes e cujos valores são funções de redução.  Uma
          função de redução leva um único argumento da classe associada
          e deve estar de acordo com a mesma interface de um método
          *note __reduce__(): 9db.

          Por padrão, um objeto pickler não terá um atributo *note
          dispatch_table: 1161, e em vez disso usará a tabela de
          despacho global gerenciada pelo módulo *note copyreg: 26.  No
          entanto, para personalizar a serialização com pickle de um
          objeto pickler específico, pode-se definir o atributo *note
          dispatch_table: 1161. para um objeto do tipo dict.
          Alternativamente, se uma subclasse de *note Pickler: a28. tem
          um atributo *note dispatch_table: 1161. então ele será usado
          como a tabela de despacho padrão para instâncias daquela
          classe.

          Consulte *note Tabelas de despacho: 2a4c. para exemplos de
          uso.

          Adicionado na versão 3.3.

      -- Método: reducer_override (obj)

          Redutor especial que pode ser definido em subclasses de *note
          Pickler: a28.  Este método tem prioridade sobre qualquer
          redutor em *note dispatch_table: 1161.  Ele deve estar de
          acordo com a mesma interface que um método *note __reduce__():
          9db. e pode opcionalmente retornar *note NotImplemented: 7d3.
          como alternativa em redutores registrados em *note
          dispatch_table: 1161. para serializar com pickle ‘obj’.

          Para exemplo detalhado, consulte *note Redução personalizada
          para tipos, funções e outros objetos: 2a4d.

          Adicionado na versão 3.8.

      -- Atributo: fast

          Descontinuado.  Ative o modo rápido se definido como um valor
          verdadeiro.  O modo rápido desabilita o uso de memo, portanto,
          agilizando o processo de serialização com pickle por não gerar
          códigos de operação PUT supérfluos.  Ele não deve ser usado
          com objetos autorreferenciais, fazer o contrário fará com que
          *note Pickler: a28. recorra infinitamente.

          Use *note pickletools.optimize(): 2a4f. se você precisar de
          serializações com pickle mais compactas.

 -- Classe: pickle.Unpickler (file, *, fix_imports=True,
          encoding='ASCII', errors='strict', buffers=None)

     Recebe um arquivo binário para ler um fluxo de dados pickle.

     A versão do protocolo do pickle é detectada automaticamente,
     portanto, nenhum argumento de protocolo é necessário.

     O argumento 'file' deve ter três métodos: um método read() que
     recebe um argumento inteiro, um método readinto() que recebe um
     argumento buffer e um método readline() que não requer argumentos,
     como na interface *note io.BufferedIOBase: 694.  Assim, 'file' pode
     ser um arquivo em disco aberto para leitura binária, um objeto
     *note io.BytesIO: ed3. ou qualquer outro objeto personalizado que
     atenda a esta interface.

     Os argumentos opcionais 'fix_imports', 'encoding' e 'errors' são
     usados para controlar o suporte de compatibilidade ao fluxo pickle
     gerado pelo Python 2.  Se 'fix_imports' for verdadeiro, pickle
     tentará mapear os nomes antigos do Python 2 para os novos nomes
     usados no Python 3.  Os 'encoding' e 'erros' dizem ao pickle como
     decodificar instâncias de string de 8 bits capturadas pelo Python
     2; o padrão é ‘ASCII’ e ‘strict’, respectivamente.  O argumento
     'encoding' pode ser ‘bytes’ para ler essas instâncias de string de
     8 bits como objetos de bytes.  Usar ‘encoding='latin1'’ é
     necessário para a desserialização com pickle de vetores NumPy e
     instâncias de *note datetime: 1cc, *note date: 1cd. e *note time:
     1ce. serializadas com pickle pelo Python 2.

     Se 'buffers' for ‘None’ (o padrão), todos os dados necessários para
     desserialização devem estar contidos no fluxo pickle.  Isso
     significa que o argumento 'buffer_callback' era ‘None’ quando um
     *note Pickler: a28. foi instanciado (ou quando *note dump(): 2a44.
     ou *note dumps(): 14ec. foi chamado).

     Se 'buffers' for ‘None’, deve ser um iterável de objetos
     habilitados para buffer que é consumido cada vez que o fluxo de
     serialização com pickle faz referência a uma visualização de buffer
     *note fora da banda: 2a49.  Esses buffers foram fornecidos em ordem
     para o 'buffer_callback' de um objeto Pickler.

     Alterado na versão 3.8: O argumento 'buffers' foi adicionado.

      -- Método: load ()

          Lê a representação serializada com pickle de um objeto a
          partir do objeto arquivo aberto fornecido no construtor e
          retorna a hierarquia de objeto reconstituído especificada
          nele.  Os bytes após a representação serializada com pickle do
          objeto são ignorados.

      -- Método: persistent_load (pid)

          Levanta um *note UnpicklingError: 2a48. por padrão.

          Se definido, *note persistent_load(): 168e. deve retornar o
          objeto especificado pelo ID persistente 'pid'.  Se um ID
          persistente inválido for encontrado, uma *note
          UnpicklingError: 2a48. deve ser levantada.

          Consulte *note Persistência de objetos externos: 2a4a. para
          detalhes e exemplos de usos.

          Alterado na versão 3.13: Foi adicionada a implementação padrão
          desse método na implementação em C da ‘Unpickler’.

      -- Método: find_class (module, name)

          Importa 'module' se necessário e retorna o objeto chamado
          'name' dele, onde os argumentos 'module' e 'name' são objetos
          *note str: 44c.  Observe, ao contrário do que seu nome sugere,
          *note find_class(): 2a51. também é usado para encontrar
          funções.

          As subclasses podem substituir isso para obter controle sobre
          quais tipos de objetos e como eles podem ser carregados,
          reduzindo potencialmente os riscos de segurança.  Confira
          *note Restringindo globais: 2a52. para detalhes.

          Levanta um *note evento de auditoria: 19fa.
          ‘pickle.find_class’ com os argumentos ‘module’, ‘name’.

 -- Classe: pickle.PickleBuffer (buffer)

     Um invólucro para um buffer que representa dados serializáveis com
     pickle.  'buffer' deve ser um objeto *note provedor de buffer: 2e8,
     como um *note objeto bytes ou similar: d4f. ou um vetor
     N-dimensional.

     *note PickleBuffer: 15a2. é ele próprio um provedor de buffer, de
     forma que é possível passá-lo para outras APIs que esperam um
     objeto provedor de buffer, como *note memoryview: 2eb.

     Objetos *note PickleBuffer: 15a2. só podem ser serializados usando
     o protocolo pickle 5 ou superior.  Eles são elegíveis para *note
     serialização fora de banda: 2a49.

     Adicionado na versão 3.8.

      -- Método: raw ()

          Retorna um *note memoryview: 2eb. da área de memória
          subjacente a este buffer.  O objeto retornado é um memoryview
          unidimensional, contíguo C com formato ‘B’ (bytes não
          assinados).  *note BufferError: 15bd. é levantada se o buffer
          não for contíguo C nem Fortran.

      -- Método: release ()

          Libera o buffer subjacente exposto pelo objeto PickleBuffer.


File: python.info,  Node: O que pode ser serializado e desserializado com pickle?,  Next: Serializando com pickle instâncias de classes,  Prev: Interface do módulo,  Up: pickle — Serialização de objetos Python

5.12.1.6 O que pode ser serializado e desserializado com pickle?
................................................................

Os seguintes tipos podem ser serializados com pickle:

   * constantes embutidas (‘None’, ‘True’, ‘False’, ‘Ellipsis’ e *note
     NotImplemented: 7d3.);

   * inteiros, números de ponto flutuante, números complexos;

   * strings, bytes, bytearrays;

   * tuplas, listas, conjuntos e dicionários contendo apenas objetos
     serializáveis com pickle;

   * funções (embutidas ou definidas pelo usuário) acessíveis no nível
     superior de um módulo (usando *note def: 14a2, não *note lambda:
     12df.);

   * classes acessíveis no nível superior de um módulo;

   * instâncias de classes cujo o resultado da chamada de *note
     __getstate__(): 5d8. seja serializável com pickle (veja a seção
     *note Serializando com pickle instâncias de classes: 2a3f. para
     detalhes).

As tentativas de serializar objetos não serializáveis com pickle vão
levantar a exceção *note PicklingError: 2a46.; quando isso acontece, um
número não especificado de bytes pode já ter sido escrito no arquivo
subjacente.  Tentar serializar com pickle uma estrutura de dados
altamente recursiva pode exceder a profundidade máxima de recursão, a
*note RecursionError: d90. será levantada neste caso.  Você pode
aumentar este limite cuidadosamente com *note sys.setrecursionlimit():
4c3.

Observe que as funções (embutidas e definidas pelo usuário) são
serializadas com pickle pelo *note nome qualificado: 1ab1, não pelo
valor.  (1)  Isso significa que apenas o nome da função é serializado
com pickle, junto com o nome do módulo e das classes contidos.  Nem o
código da função, nem qualquer um de seus atributos de função são
serializados com pickle.  Assim, o módulo de definição deve ser
importável no ambiente de desserialização com pickle, e o módulo deve
conter o objeto nomeado, caso contrário, uma exceção será levantada.
(2)

Da mesma forma, as classes são serializadas com pickle pelo nome
qualificado, portanto, aplicam-se as mesmas restrições no ambiente de
desserialização com pickle.  Observe que nenhum código ou dado da classe
é coletado, portanto, no exemplo a seguir, o atributo de classe ‘attr’
não é restaurado no ambiente de desserialização com pickle:

     class Foo:
         attr = 'A class attribute'

     picklestring = pickle.dumps(Foo)

Essas restrições são a razão pela qual as funções e classes
serializáveis com pickle devem ser definidas no nível superior de um
módulo.

Da mesma forma, quando as instâncias da classe são serializadas com
pickle, o código e os dados de sua classe não são serializados junto com
elas.  Apenas os dados da instância são serializados com pickle.  Isso é
feito de propósito para que você possa corrigir bugs em uma classe ou
adicionar métodos à classe e ainda carregar objetos que foram criados
com uma versão anterior da classe.  Se você planeja ter objetos de longa
duração que verão muitas versões de uma classe, pode valer a pena
colocar um número de versão nos objetos para que as conversões adequadas
possam ser feitas pelo método *note __setstate__(): 9dc. da classe.

   ---------- Footnotes ----------

   (1) É por isso que funções *note lambda: 12df. não podem ser
serializadas com pickle: todas as funções ‘lambda’ compartilham o mesmo
nome: ‘<lambda>’.

   (2) A exceção levantada provavelmente será uma *note ImportError:
419. ou uma *note AttributeError: 34b, mas poderia ser outra coisa.


File: python.info,  Node: Serializando com pickle instâncias de classes,  Next: Redução personalizada para tipos funções e outros objetos,  Prev: O que pode ser serializado e desserializado com pickle?,  Up: pickle — Serialização de objetos Python

5.12.1.7 Serializando com pickle instâncias de classes
......................................................

Nesta seção, descrevemos os mecanismos gerais disponíveis para você
definir, personalizar e controlar como as instâncias de classe são
serializadas e desserializadas com pickle.

Na maioria dos casos, nenhum código adicional é necessário para tornar
as instâncias serializáveis com pickle.  Por padrão, o pickle recuperará
a classe e os atributos de uma instância por meio de introspecção.
Quando uma instância de classe não está serializada com pickle, seu
método *note __init__(): 6b0. geralmente 'não' é invocado.  O
comportamento padrão primeiro cria uma instância não inicializada e, em
seguida, restaura os atributos salvos.  O código a seguir mostra uma
implementação desse comportamento:

     def save(obj):
         return (obj.__class__, obj.__dict__)

     def restore(cls, attributes):
         obj = cls.__new__(cls)
         obj.__dict__.update(attributes)
         return obj

As classes podem alterar o comportamento padrão, fornecendo um ou vários
métodos especiais:

 -- Método: object.__getnewargs_ex__ ()

     Nos protocolos 2 e mais recentes, as classes que implementam o
     método *note __getnewargs_ex__(): 2a57. podem ditar os valores
     passados para o método *note __new__(): 580. após a desserialização
     com pickle.  O método deve retornar um par ‘(args, kwargs)’ onde
     'args' é uma tupla de argumentos posicionais e 'kwargs' um
     dicionário de argumentos nomeados para construir o objeto.  Esses
     serão passados para o método *note __new__(): 580. após a
     desserialização com pickle.

     Você deve implementar este método se o método *note __new__(): 580.
     de sua classe requer argumentos somente-nomeados.  Caso contrário,
     é recomendado para compatibilidade implementar *note
     __getnewargs__(): dfe.

     Alterado na versão 3.6: *note __getnewargs_ex__(): 2a57. é agora
     usado em protocolos 2 e 3.

 -- Método: object.__getnewargs__ ()

     Este método serve a um propósito semelhante ao de *note
     __getnewargs_ex__(): 2a57, mas tem suporte apenas a argumentos
     posicionais.  Ele deve retornar uma tupla de argumentos ‘args’ que
     serão passados para o método *note __new__(): 580. após a
     desserialização com pickle.

     *note __getnewargs__(): dfe. não será chamado se *note
     __getnewargs_ex__(): 2a57. estiver definido.

     Alterado na versão 3.6: Antes do Python 3.6, *note
     __getnewargs__(): dfe. era chamado em vez de *note
     __getnewargs_ex__(): 2a57. nos protocolos 2 e 3.

 -- Método: object.__getstate__ ()

     Classes podem influenciar ainda mais como suas instâncias são
     serializadas com pickle, substituindo o método *note
     __getstate__(): 5d8.  Ele é chamado e o objeto retornado é
     serializado com pickle como o conteúdo da instância, em vez de um
     estado padrão.  Existem vários casos:

        * Para uma classe que não possui instância *note __dict__: 55b.
          e não possui *note __slots__: 1533, o estado padrão é ‘None’.

        * Para uma classe que não uma possui instância *note __dict__:
          55b. nem *note __slots__: 1533, o estado padrão é
          ‘self.__dict__’.

        * Para uma classe que possui uma instância *note __dict__: 55b.
          e *note __slots__: 1533, o estado padrão é uma tupla
          consistindo de dois dicionários: ‘self.__dict__’, e um
          dicionário de mapeamento de nomes de slot para valores de
          slot.  Apenas os slots que possuem um valor são incluídos
          neste último.

        * Para uma classe que possui *note __slots__: 1533. e nenhuma
          *note __dict__: 55b. de instância, o estado padrão é uma tupla
          cujo primeiro item é ‘None’ e cujo segundo item é um
          dicionário mapeando os nomes dos slots para os valores dos
          slots descritos no tópico anterior.

     Alterado na versão 3.11: Adicionada a implementação padrão do
     método ‘__getstate__()’ na classe ‘objeto’.

 -- Método: object.__setstate__ (state)

     Ao desserializar com pickle, se a classe define *note
     __setstate__(): 9dc, ela é chamada com o estado não desserializado.
     Nesse caso, não há nenhum requisito para que o objeto de estado
     seja um dicionário.  Caso contrário, o estado serializado com
     pickle deve ser um dicionário e seus itens são atribuídos ao
     dicionário da nova instância.

          Nota: Se *note __reduce__(): 9db. retorna um estado com valor
          ‘None’ na serialização com pickle, o método *note
          __setstate__(): 9dc. não será chamado quando da
          desserialização com pickle.

Confira a seção *note Manipulação de objetos com estado: 2a58. para mais
informações sobre como usar os métodos *note __getstate__(): 5d8. e
*note __setstate__(): 9dc.

     Nota: Quando da desserialização com pickle, alguns métodos, como
     *note __getattr__(): 4d3, *note __getattribute__(): beb. ou *note
     __setattr__(): 20bf, podem ser chamados na instância.  No caso
     desses métodos dependerem de alguma invariante interna ser
     verdadeira, o tipo deve ser implementado *note __new__(): 580. para
     estabelecer tal invariante, pois *note __init__(): 6b0. não é
     chamada quando da desserialização com pickle em uma instância.

Como veremos, o pickle não usa diretamente os métodos descritos acima.
Na verdade, esses métodos são parte do protocolo de cópia que implementa
o método especial *note __reduce__(): 9db.  O protocolo de cópia fornece
uma interface unificada para recuperar os dados necessários para
serialização com pickle e cópia de objetos.  (1)

Apesar de poderoso, implementar *note __reduce__(): 9db. diretamente em
sua classe é algo propenso a erro.  Por este motivo, designers de classe
devem usar a interface de alto nível (ou seja, *note
__getnewargs_ex__(): 2a57, *note __getstate__(): 5d8. e *note
__setstate__(): 9dc.) sempre que possível.  Vamos mostrar, porém, casos
em que o uso de ‘__reduce__()’ é a única opção ou leva a uma
serialização com pickle mais eficiente, ou as ambas.

 -- Método: object.__reduce__ ()

     A interface está atualmente definida da seguinte maneira.  O método
     *note __reduce__(): 9db. não aceita nenhum argumento e deve
     retornar uma string ou preferencialmente uma tupla (o objeto
     retornado é frequentemente referido como o “valor de redução”).

     Se uma string é retornada, ela deve ser interpretada como o nome de
     uma variável global.  Deve ser o nome local do objeto relativo ao
     seu módulo; o módulo pickle pesquisa o espaço de nomes do módulo
     para determinar o módulo do objeto.  Esse comportamento é
     normalmente útil para singletons.

     Quando uma tupla é retornada, ela deve ter entre dois e seis itens.
     Os itens opcionais podem ser omitidos ou ‘None’ pode ser fornecido
     como seu valor.  A semântica de cada item está em ordem:

        * Um objeto chamável que será chamado para criar a versão
          inicial do objeto.

        * Uma tupla de argumentos para o objeto chamável.  Uma tupla
          vazia deve ser fornecida se o chamável não aceitar nenhum
          argumento.

        * Opcionalmente, o estado do objeto, que será passado para o
          método *note __setstate__(): 9dc. do objeto conforme descrito
          anteriormente.  Se o objeto não tiver tal método, o valor deve
          ser um dicionário e será adicionado ao atributo *note
          __dict__: 55b. do objeto.

        * Opcionalmente, um iterador (e não uma sequência) produzindo
          itens sucessivos.  Esses itens serão anexados ao objeto usando
          ‘obj.append(item)’ ou, em lote, usando
          ‘obj.extend(list_of_items)’.  Isso é usado principalmente para
          subclasses de lista, mas pode ser usado por outras classes,
          desde que tenham os métodos *note append(): 2118. e *note
          extend(): 211b. com a assinatura apropriada.  (Se ‘append()’
          ou ‘extend()’ é usado depende de qual versão do protocolo
          pickle é usada, bem como o número de itens a anexar, então
          ambos devem ser suportados.)

        * Opcionalmente, um iterador (não uma sequência) produzindo
          pares de valor-chave sucessivos.  Esses itens serão
          armazenados no objeto usando ‘obj[chave]=valor’.  Isso é usado
          principalmente para subclasses de dicionário, mas pode ser
          usado por outras classes, desde que implementem *note
          __setitem__(): 130e.

        * Opcionalmente, um chamável com uma assinatura ‘(obj, estado)’.
          Este chamável permite ao usuário controlar programaticamente o
          comportamento de atualização de estado de um objeto
          específico, ao invés de usar o método estático *note
          __setstate__(): 9dc. de ‘obj’.  Se não for ‘None’, este
          chamável terá prioridade sobre o *note __setstate__(): 9dc. de
          ‘obj’.

          Adicionado na versão 3.8: O sexto item opcional de tupla,
          ‘(obj, estado)’, foi adicionado.

 -- Método: object.__reduce_ex__ (protocol)

     Alternativamente, um método *note __reduce_ex__(): 16a1. pode ser
     definido.  A única diferença é que este método deve ter um único
     argumento inteiro, a versão do protocolo.  Quando definido, pickle
     irá preferir isso ao método *note __reduce__(): 9db.  Além disso,
     *note __reduce__(): 9db. automaticamente se torna um sinônimo para
     a versão estendida.  O principal uso desse método é fornecer
     valores de redução com compatibilidade reversa para versões mais
     antigas do Python.

* Menu:

* Persistência de objetos externos::
* Tabelas de despacho::
* Manipulação de objetos com estado::

   ---------- Footnotes ----------

   (1) O módulo *note copy: 25. usa este protocolo para operações de
cópia rasa e cópia profunda.


File: python.info,  Node: Persistência de objetos externos,  Next: Tabelas de despacho,  Up: Serializando com pickle instâncias de classes

5.12.1.8 Persistência de objetos externos
.........................................

Para o benefício da persistência do objeto, o módulo *note pickle: a6.
tem suporte à noção de uma referência a um objeto fora do fluxo de dados
serializados com pickle.  Esses objetos são referenciados por um ID
persistente, que deve ser uma string de caracteres alfanuméricos (para o
protocolo 0) (1) ou apenas um objeto arbitrário (para qualquer protocolo
mais recente).

A resolução de tais IDs persistentes não é definida pelo módulo *note
pickle: a6.; ele vai delegar esta resolução aos métodos definidos pelo
usuário no selecionador e no separador, *note persistent_id(): 1687. e
*note persistent_load(): 168e. respectivamente.

Para serializar com pickle objetos que têm um ID externo persistente, o
pickler deve ter um método *note persistent_id(): 1687. personalizado
que recebe um objeto como um argumento e retorna ‘None’ ou o ID
persistente para esse objeto.  Quando ‘None’ é retornado, o pickler
simplesmente serializa o objeto normalmente.  Quando uma string de ID
persistente é retornada, o pickler serializa aquele objeto, junto com um
marcador para que o unpickler o reconheça como um ID persistente.

Para desserializar com pickle objetos externos, o unpickler deve ter um
método *note persistent_load(): 168e. personalizado que recebe um objeto
de ID persistente e retorna o objeto referenciado.

Aqui está um exemplo abrangente que apresenta como o ID persistente pode
ser usado para serializar com pickle objetos externos por referência.

     # Exemplo simples que mostra como o ID persistente pode ser usado
     # serializar com pickle objetos externos por referência.

     import pickle
     import sqlite3
     from collections import namedtuple

     # Classe simples que representa um registro em nosso banco de dados.
     MemoRecord = namedtuple("MemoRecord", "key, task")

     class DBPickler(pickle.Pickler):

         def persistent_id(self, obj):
             # Em vez de conservar MemoRecord como uma instância de classe regular,
             # emitimos um ID persistente.
             if isinstance(obj, MemoRecord):
                 # Aqui, nosso ID persistente é simplesmente uma tupla, contendo
                 # uma tag e uma chave, que se refere a um registro específico
                 # no banco de dados.
                 return ("MemoRecord", obj.key)
             else:
                 # Se obj não tiver um ID persistente, retorna None. Significa que
                 # obj precisa ser conservado como de costume.
                 return None


     class DBUnpickler(pickle.Unpickler):

         def __init__(self, file, connection):
             super().__init__(file)
             self.connection = connection

         def persistent_load(self, pid):
             # Este método é invocado sempre que um ID persistente é encontrado.
             # Aqui, pid é a tupla retornada por DBPickler.
             cursor = self.connection.cursor()
             type_tag, key_id = pid
             if type_tag == "MemoRecord":
                 # Busca o registro referenciado no banco de dados e retorna-o.
                 cursor.execute("SELECT * FROM memos WHERE key=?", (str(key_id),))
                 key, task = cursor.fetchone()
                 return MemoRecord(key, task)
             else:
                 # Sempre levanta um erro se você puder retornar o objeto correto.
                 # Caso contrário, a desserialização com pickle considerará que
                 # None é o objeto referenciado pelo ID persistente.
                 raise pickle.UnpicklingError("unsupported persistent object")


     def main():
         import io
         import pprint

         # Inicializa e popula nosso banco de dados.
         conn = sqlite3.connect(":memory:")
         cursor = conn.cursor()
         cursor.execute("CREATE TABLE memos(key INTEGER PRIMARY KEY, task TEXT)")
         tasks = (
             'give food to fish',
             'prepare group meeting',
             'fight with a zebra',
             )
         for task in tasks:
             cursor.execute("INSERT INTO memos VALUES(NULL, ?)", (task,))

         # Busca os registros a serem serializados com pickle.
         cursor.execute("SELECT * FROM memos")
         memos = [MemoRecord(key, task) for key, task in cursor]
         # Salva os registros usando nosso DBPickler personalizado.
         file = io.BytesIO()
         DBPickler(file).dump(memos)

         print("Pickled records:")
         pprint.pprint(memos)

         # Atualiza um registro, só por precaução.
         cursor.execute("UPDATE memos SET task='learn italian' WHERE key=1")

         # Carrega os registros do fluxo de dados pickle.
         file.seek(0)
         memos = DBUnpickler(file, conn).load()

         print("Unpickled records:")
         pprint.pprint(memos)


     if __name__ == '__main__':
         main()

   ---------- Footnotes ----------

   (1) A limitação de caracteres alfanuméricos se deve ao fato de que os
IDs persistentes, no protocolo 0, serem delimitados pelo caractere de
nova linha.  Portanto, se qualquer tipo de caractere de nova linha
ocorrer em IDs persistentes, os dados resultantes da serialização com
pickle se tornarão ilegíveis.


File: python.info,  Node: Tabelas de despacho,  Next: Manipulação de objetos com estado,  Prev: Persistência de objetos externos,  Up: Serializando com pickle instâncias de classes

5.12.1.9 Tabelas de despacho
............................

Se alguém quiser personalizar a serialização com pickle de algumas
classes sem perturbar nenhum outro código que dependa da serialização,
pode-se criar um pickler com uma tabela de despacho privada.

A tabela de despacho global gerenciada pelo módulo *note copyreg: 26.
está disponível como ‘copyreg.dispatch_table’.  Portanto, pode-se
escolher usar uma cópia modificada de ‘copyreg.dispatch_table’ como uma
tabela de despacho privada.

Por exemplo

     f = io.BytesIO()
     p = pickle.Pickler(f)
     p.dispatch_table = copyreg.dispatch_table.copy()
     p.dispatch_table[SomeClass] = reduce_SomeClass

cria uma instância de *note pickle.Pickler: a28. com uma tabela de
despacho privada que trata a classe ‘SomeClass’ especialmente.
Alternativamente, o código

     class MyPickler(pickle.Pickler):
         dispatch_table = copyreg.dispatch_table.copy()
         dispatch_table[SomeClass] = reduce_SomeClass
     f = io.BytesIO()
     p = MyPickler(f)

faz o mesmo, mas todas as instâncias de ‘MyPickler’ compartilharão por
padrão a tabela de despacho privada.  Por outro lado, o código

     copyreg.pickle(SomeClass, reduce_SomeClass)
     f = io.BytesIO()
     p = pickle.Pickler(f)

modifica a tabela de despacho global compartilhada por todos os usuários
do módulo *note copyreg: 26.


File: python.info,  Node: Manipulação de objetos com estado,  Prev: Tabelas de despacho,  Up: Serializando com pickle instâncias de classes

5.12.1.10 Manipulação de objetos com estado
...........................................

Aqui está um exemplo que mostra como modificar o comportamento de
serialização com pickle de uma classe.  A classe ‘TextReader’ abaixo
abre um arquivo texto e retorna o número da linha e o conteúdo da linha
cada vez que seu método ‘readline()’ é chamado.  Se uma instância de
‘TextReader’ for selecionada, todos os atributos 'exceto' o membro do
objeto arquivo são salvos.  Quando a instância é removida, o arquivo é
reaberto e a leitura continua a partir do último local.  Os métodos
‘__setstate__()’ e ‘__getstate__()’ são usados para implementar este
comportamento.

     class TextReader:
         """Exibe e numera linhas em um arquivo texto."""

         def __init__(self, filename):
             self.filename = filename
             self.file = open(filename)
             self.lineno = 0

         def readline(self):
             self.lineno += 1
             line = self.file.readline()
             if not line:
                 return None
             if line.endswith('\n'):
                 line = line[:-1]
             return "%i: %s" % (self.lineno, line)

         def __getstate__(self):
             # Copia o estado do objeto de self.__dict__, que
             # contém todos os nossos atributos de instância.
             # Sempre use o método dict.copy() para evitar
             # modificar o estado original.
             state = self.__dict__.copy()
             # Remove as entradas não serializáveis com pickle.
             del state['file']
             return state

         def __setstate__(self, state):
             # Restaura os atributos da instância (isto é, filename e lineno).
             self.__dict__.update(state)
             # Restaura o estado do arquivo aberto anteriormente.
             # Para fazer isso, precisamos reabri-lo e ler dele até
             # a contagem de linha ser restaurada.
             file = open(self.filename)
             for _ in range(self.lineno):
                 file.readline()
             # Ao final, salva o arquivo.
             self.file = file

Um exemplo de uso pode ser algo assim:

     >>> reader = TextReader("hello.txt")
     >>> reader.readline()
     '1: Hello world!'
     >>> reader.readline()
     '2: I am line number two.'
     >>> new_reader = pickle.loads(pickle.dumps(reader))
     >>> new_reader.readline()
     '3: Goodbye!'


File: python.info,  Node: Redução personalizada para tipos funções e outros objetos,  Next: Buffers fora da banda,  Prev: Serializando com pickle instâncias de classes,  Up: pickle — Serialização de objetos Python

5.12.1.11 Redução personalizada para tipos, funções e outros objetos
....................................................................

Adicionado na versão 3.8.

Às vezes, *note dispatch_table: 1161. pode não ser flexível o
suficiente.  Em particular, podemos querer personalizar a serialização
com pickle com base em outro critério que não o tipo do objeto, ou
podemos personalizar a serialização com pickle de funções e classes.

Para esses casos, é possível criar uma subclasse da classe *note
Pickler: a28. e implementar um método *note reducer_override(): a29.
Este método pode retornar uma tupla de redução arbitrária (veja *note
__reduce__(): 9db.).  Ele pode, alternativamente, retornar *note
NotImplemented: 7d3. para retornar ao comportamento tradicional.

Se *note dispatch_table: 1161. e *note reducer_override(): a29. forem
definidos, o método *note reducer_override(): a29. tem prioridade.

     Nota: Por motivos de desempenho, *note reducer_override(): a29. não
     pode ser chamado para os seguintes objetos: ‘None’, ‘True’,
     ‘False’, e as instâncias exatas de *note int: 257, *note float:
     2f7, *note bytes: 1c2, *note str: 44c, *note dict: 256, *note set:
     5d9, *note frozenset: 5da, *note list: 611. e *note tuple: 370.

Aqui está um exemplo simples onde permitimos serialização com pickle e
reconstrução de uma determinada classe:

     import io
     import pickle

     class MyClass:
         my_attribute = 1

     class MyPickler(pickle.Pickler):
         def reducer_override(self, obj):
             """Redutor personalizado para MyClass."""
             if getattr(obj, "__name__", None) == "MyClass":
                 return type, (obj.__name__, obj.__bases__,
                               {'my_attribute': obj.my_attribute})
             else:
                 # Para qualquer outro objeto, recorre à redução de costume
                 return NotImplemented

     f = io.BytesIO()
     p = MyPickler(f)
     p.dump(MyClass)

     del MyClass

     unpickled_class = pickle.loads(f.getvalue())

     assert isinstance(unpickled_class, type)
     assert unpickled_class.__name__ == "MyClass"
     assert unpickled_class.my_attribute == 1


File: python.info,  Node: Buffers fora da banda,  Next: Restringindo globais,  Prev: Redução personalizada para tipos funções e outros objetos,  Up: pickle — Serialização de objetos Python

5.12.1.12 Buffers fora da banda
...............................

Adicionado na versão 3.8.

Em alguns contextos, o módulo *note pickle: a6. é usado para transferir
grandes quantidades de dados.  Portanto, pode ser importante minimizar o
número de cópias de memória para preservar o desempenho e o consumo de
recursos.  No entanto, a operação normal do módulo *note pickle: a6, à
medida que transforma uma estrutura semelhante a um gráfico de objetos
em um fluxo sequencial de bytes, envolve intrinsecamente a cópia de
dados de e para o fluxo pickle.

Esta restrição pode ser evitada se tanto o 'fornecedor' (a implementação
dos tipos de objetos a serem transferidos) e o 'consumidor' (a
implementação do sistema de comunicações) tiverem suporte aos recursos
de transferência fora de banda fornecidos pelo protocolo pickle 5 e
superior.

* Menu:

* API de provedor::
* API de consumidor::
* Exemplo: Exemplo<4>.


File: python.info,  Node: API de provedor,  Next: API de consumidor,  Up: Buffers fora da banda

5.12.1.13 API de provedor
.........................

Os grandes objetos de dados a serem serializados com pickle devem
implementar um método *note __reduce_ex__(): 16a1. especializado para o
protocolo 5 e superior, que retorna uma instância *note PickleBuffer:
15a2. (em vez de, por exemplo, um objeto *note bytes: 1c2.) para
quaisquer dados grandes.

Um objeto *note PickleBuffer: 15a2. 'sinaliza' que o buffer subjacente é
elegível para transferência de dados fora de banda.  Esses objetos
permanecem compatíveis com o uso normal do módulo *note pickle: a6.  No
entanto, os consumidores também podem optar por dizer ao *note pickle:
a6. que eles irão lidar com esses buffers por conta própria.


File: python.info,  Node: API de consumidor,  Next: Exemplo<4>,  Prev: API de provedor,  Up: Buffers fora da banda

5.12.1.14 API de consumidor
...........................

Um sistema de comunicação pode permitir o manuseio personalizado dos
objetos *note PickleBuffer: 15a2. gerados ao serializar um grafo de
objeto.

No lado emissor, é necessário passar um argumento 'buffer_callback' para
*note Pickler: a28. (ou para a função *note dump(): 2a44. ou *note
dumps(): 14ec.), que será chamada com cada *note PickleBuffer: 15a2.
gerado durante a serialização com pickle do grafo do objeto.  Os buffers
acumulados pelo 'buffer_callback' não verão seus dados copiados no fluxo
pickle, apenas um marcador barato será inserido.

No lado receptor, é necessário passar um argumento 'buffers' para *note
Unpickler: 159f. (ou para a função *note load(): d32. ou *note load():
d32.), que é um iterável dos buffers que foram passado para
'buffer_callback'.  Esse iterável deve produzir buffers na mesma ordem
em que foram passados para 'buffer_callback'.  Esses buffers fornecerão
os dados esperados pelos reconstrutores dos objetos cuja serialização
com pickle produziu os objetos *note PickleBuffer: 15a2. originais.

Entre o lado emissor e o lado receptor, o sistema de comunicações está
livre para implementar seu próprio mecanismo de transferência para
buffers fora de banda.  As otimizações potenciais incluem o uso de
memória compartilhada ou compactação dependente do tipo de dados.


File: python.info,  Node: Exemplo<4>,  Prev: API de consumidor,  Up: Buffers fora da banda

5.12.1.15 Exemplo
.................

Aqui está um exemplo trivial onde implementamos uma subclasse de *note
bytearray: 2ea. capaz de participar de serialização com pickle de buffer
fora de banda:

     class ZeroCopyByteArray(bytearray):

         def __reduce_ex__(self, protocol):
             if protocol >= 5:
                 return type(self)._reconstruct, (PickleBuffer(self),), None
             else:
                 # PickleBuffer é proibido no pickle nos protocolos <= 4.
                 return type(self)._reconstruct, (bytearray(self),)

         @classmethod
         def _reconstruct(cls, obj):
             with memoryview(obj) as m:
                 # Obtém um controle sobre o objeto buffer original
                 obj = m.obj
                 if type(obj) is cls:
                     # O objeto do buffer original é um ZeroCopyByteArray,
                     # retorna-o como está.
                     return obj
                 else:
                     return cls(obj)

O reconstrutor (o método de classe ‘_reconstruct’) retorna o objeto de
fornecimento do buffer se ele tiver o tipo correto.  Esta é uma maneira
fácil de simular o comportamento de cópia zero neste exemplo de
brinquedo.

Do lado consumidor, podemos serializar com pickle esses objetos da
maneira usual, que quando não serializados nos dará uma cópia do objeto
original:

     b = ZeroCopyByteArray(b"abc")
     data = pickle.dumps(b, protocol=5)
     new_b = pickle.loads(data)
     print(b == new_b)  # True
     print(b is new_b)  # False: uma cópia foi feita

Mas se passarmos um 'buffer_callback' e, em seguida, retornarmos os
buffers acumulados ao desserializar, seremos capazes de recuperar o
objeto original:

     b = ZeroCopyByteArray(b"abc")
     buffers = []
     data = pickle.dumps(b, protocol=5, buffer_callback=buffers.append)
     new_b = pickle.loads(data, buffers=buffers)
     print(b == new_b)  # True
     print(b is new_b)  # True: nenhuma cópia foi feita

Este exemplo é limitado pelo fato de que *note bytearray: 2ea. aloca sua
própria memória: você não pode criar uma instância de *note bytearray:
2ea. que é apoiada pela memória de outro objeto.  No entanto, tipos de
dados de terceiros, como arrays de NumPy, não têm essa limitação e
permitem o uso de serialização com pickle de cópia zero (ou fazer o
mínimo de cópias possível) ao transferir entre processos ou sistemas
distintos.

Ver também
..........

PEP 574(1) – Protocolo de Pickle 5 com buffers de dados fora da banda

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0574/


File: python.info,  Node: Restringindo globais,  Next: Desempenho<2>,  Prev: Buffers fora da banda,  Up: pickle — Serialização de objetos Python

5.12.1.16 Restringindo globais
..............................

Por padrão, a desserialização com pickle importará qualquer classe ou
função que encontrar nos dados pickle.  Para muitos aplicativos, esse
comportamento é inaceitável, pois permite que o unpickler importe e
invoque código arbitrário.  Basta considerar o que este fluxo de dados
pickle feito à mão faz quando carregado:

     >>> import pickle
     >>> pickle.loads(b"cos\nsystem\n(S'echo hello world'\ntR.")
     hello world
     0

Neste exemplo, o unpickler importa a função *note os.system(): 14a5. e
então aplica o argumento string “echo hello world”.  Embora este exemplo
seja inofensivo, não é difícil imaginar um que possa danificar seu
sistema.

Por esta razão, você pode querer controlar o que é desserializado com
pickle personalizando *note Unpickler.find_class(): 2a51.  Ao contrário
do que seu nome sugere, *note Unpickler.find_class(): 2a51. é chamado
sempre que um global (ou seja, uma classe ou uma função) é solicitado.
Assim, é possível proibir completamente os globais ou restringi-los a um
subconjunto seguro.

Aqui está um exemplo de um unpickler que permite que apenas algumas
classes seguras do módulo *note builtins: 12. sejam carregadas:

     import builtins
     import io
     import pickle

     safe_builtins = {
         'range',
         'complex',
         'set',
         'frozenset',
         'slice',
     }

     class RestrictedUnpickler(pickle.Unpickler):

         def find_class(self, module, name):
             # Só permite classes seguras de bultins.
             if module == "builtins" and name in safe_builtins:
                 return getattr(builtins, name)
             # Proíbe todo o resto.
             raise pickle.UnpicklingError("global '%s.%s' is forbidden" %
                                          (module, name))

     def restricted_loads(s):
         """Função auxiliar análoga a pickle.loads()."""
         return RestrictedUnpickler(io.BytesIO(s)).load()

Um exemplo de uso do nosso unpickler funcionando como esperado:

     >>> restricted_loads(pickle.dumps([1, 2, range(15)]))
     [1, 2, range(0, 15)]
     >>> restricted_loads(b"cos\nsystem\n(S'echo hello world'\ntR.")
     Traceback (most recent call last):
       ...
     pickle.UnpicklingError: global 'os.system' is forbidden
     >>> restricted_loads(b'cbuiltins\neval\n'
     ...                  b'(S\'getattr(__import__("os"), "system")'
     ...                  b'("echo hello world")\'\ntR.')
     Traceback (most recent call last):
       ...
     pickle.UnpicklingError: global 'builtins.eval' is forbidden

Como nossos exemplos mostram, você deve ter cuidado com o que permite
que seja desserializado com pickle.  Portanto, se a segurança é uma
preocupação, você pode querer considerar alternativas como a API de
marshalling em *note xmlrpc.client: 12e. ou soluções de terceiros.


File: python.info,  Node: Desempenho<2>,  Next: Exemplos<7>,  Prev: Restringindo globais,  Up: pickle — Serialização de objetos Python

5.12.1.17 Desempenho
....................

Versões recentes do protocolo pickle (do protocolo 2 em diante)
apresentam codificações binárias eficientes para vários recursos comuns
e tipos embutidos.  Além disso, o módulo *note pickle: a6. tem um
otimizador transparente escrito em C.


File: python.info,  Node: Exemplos<7>,  Prev: Desempenho<2>,  Up: pickle — Serialização de objetos Python

5.12.1.18 Exemplos
..................

Para código mais simples, use as funções *note dump(): 2a44. e *note
load(): d32.

     import pickle

     # Uma coleção arbitrária de objetos aceitos por pickle.
     data = {
         'a': [1, 2.0, 3+4j],
         'b': ("character string", b"byte string"),
         'c': {None, True, False}
     }

     with open('data.pickle', 'wb') as f:
         # Serializa com pickle o dicionário 'data' usando
         # o protocolo mais alto disponível.
         pickle.dump(data, f, pickle.HIGHEST_PROTOCOL)

O exemplo a seguir lê os dados resultantes em serializados com pickle.

     import pickle

     with open('data.pickle', 'rb') as f:
         # A versão do protocolo utilizada é detectada automaticamente,
         # portanto não precisamos especificá-la.
         data = pickle.load(f)

Ver também
..........

Módulo *note copyreg: 26.

     Registro de construtor de interface Pickle para tipos de extensão.

Módulo *note pickletools: a7.

     Ferramentas para trabalhar e analisar dados serializados com
     pickle.

Módulo *note shelve: c3.

     Banco de dados indexado de objetos; usa *note pickle: a6.

Módulo *note copy: 25.

     Cópia rasa e cópia profunda de objeto.

Módulo *note marshal: 8d.

     Serialização de alto desempenho de tipos embutidos.


File: python.info,  Node: copyreg — Registra funções de suporte pickle,  Next: shelve — Python object persistence,  Prev: pickle — Serialização de objetos Python,  Up: Persistência de Dados

5.12.2 ‘copyreg’ — Registra funções de suporte ‘pickle’
-------------------------------------------------------

'Código-fonte:' Lib/copyreg.py(1)

__________________________________________________________________

O módulo *note copyreg: 26. oferece uma maneira de definir as funções
usadas durante a remoção de objetos específicos.  Os módulos *note
pickle: a6. e *note copy: 25. usam essas funções ao selecionar/copiar
esses objetos.  O módulo fornece informações de configuração sobre
construtores de objetos que não são classes.  Esses construtores podem
ser funções de fábrica ou instâncias de classes.

 -- Função: copyreg.constructor (object)

     Declara 'object' para ser um construtor válido.  Se 'object' não
     for chamável (e, portanto, não for válido como um construtor),
     levanta *note TypeError: 2c3.

 -- Função: copyreg.pickle (type, function, constructor_ob=None)

     Declara que a 'function' deve ser usada como uma função de
     “redução” para objetos do tipo 'type'.  'function' deve retornar
     uma string ou uma tupla contendo entre dois e seis elementos.  Veja
     *note dispatch_table: 1161. para mais detalhes sobre a interface da
     'function'.

     O parâmetro 'constructor_ob' é um recurso herdado e agora é
     ignorado, mas se passado deve ser UM chamável.

     Note que o atributo *note dispatch_table: 1161. de um objeto
     pickler ou subclasse de *note pickle.Pickler: a28. também podem ser
     usados para declarar funções de redução.

* Menu:

* Exemplo: Exemplo<5>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/copyreg.py


File: python.info,  Node: Exemplo<5>,  Up: copyreg — Registra funções de suporte pickle

5.12.2.1 Exemplo
................

O exemplo abaixo gostaria de mostrar como registrar uma função de pickle
e como ela será usada:

     >>> import copyreg, copy, pickle
     >>> class C:
     ...     def __init__(self, a):
     ...         self.a = a
     ...
     >>> def pickle_c(c):
     ...     print("pickling a C instance...")
     ...     return C, (c.a,)
     ...
     >>> copyreg.pickle(C, pickle_c)
     >>> c = C(1)
     >>> d = copy.copy(c)
     pickling a C instance...
     >>> p = pickle.dumps(c)
     pickling a C instance...


File: python.info,  Node: shelve — Python object persistence,  Next: marshal — Serialização interna de objetos Python,  Prev: copyreg — Registra funções de suporte pickle,  Up: Persistência de Dados

5.12.3 ‘shelve’ — Python object persistence
-------------------------------------------

'Código-fonte:' Lib/shelve.py(1)

__________________________________________________________________

A “shelf” is a persistent, dictionary-like object.  The difference with
“dbm” databases is that the values (not the keys!)  in a shelf can be
essentially arbitrary Python objects — anything that the *note pickle:
a6. module can handle.  This includes most class instances, recursive
data types, and objects containing lots of shared sub-objects.  The keys
are ordinary strings.

 -- Função: shelve.open (filename, flag='c', protocol=None,
          writeback=False)

     Open a persistent dictionary.  The filename specified is the base
     filename for the underlying database.  As a side-effect, an
     extension may be added to the filename and more than one file may
     be created.  By default, the underlying database file is opened for
     reading and writing.  The optional 'flag' parameter has the same
     interpretation as the 'flag' parameter of *note dbm.open(): f5c.

     By default, pickles created with *note pickle.DEFAULT_PROTOCOL:
     831. are used to serialize values.  The version of the pickle
     protocol can be specified with the 'protocol' parameter.

     Because of Python semantics, a shelf cannot know when a mutable
     persistent-dictionary entry is modified.  By default modified
     objects are written 'only' when assigned to the shelf (see *note
     Exemplo: 2a6d.).  If the optional 'writeback' parameter is set to
     ‘True’, all entries accessed are also cached in memory, and written
     back on *note sync(): 2a6e. and *note close(): 2a6f.; this can make
     it handier to mutate mutable entries in the persistent dictionary,
     but, if many entries are accessed, it can consume vast amounts of
     memory for the cache, and it can make the close operation very slow
     since all accessed entries are written back (there is no way to
     determine which accessed entries are mutable, nor which ones were
     actually mutated).

     Alterado na versão 3.10: *note pickle.DEFAULT_PROTOCOL: 831. is now
     used as the default pickle protocol.

     Alterado na versão 3.11: Aceita um *note objeto caminho ou similar:
     2a0. como nome de arquivo.

          Nota: Do not rely on the shelf being closed automatically;
          always call *note close(): 2a6f. explicitly when you don’t
          need it any more, or use *note shelve.open(): 17f3. as a
          context manager:

               with shelve.open('spam') as db:
                   db['eggs'] = 'eggs'
     Aviso: Because the *note shelve: c3. module is backed by *note
     pickle: a6, it is insecure to load a shelf from an untrusted
     source.  Like with pickle, loading a shelf can execute arbitrary
     code.

Shelf objects support most of methods and operations supported by
dictionaries (except copying, constructors and operators ‘|’ and ‘|=’).
This eases the transition from dictionary based scripts to those
requiring persistent storage.

Two additional methods are supported:

 -- Método: Shelf.sync ()

     Write back all entries in the cache if the shelf was opened with
     'writeback' set to *note True: c27.  Also empty the cache and
     synchronize the persistent dictionary on disk, if feasible.  This
     is called automatically when the shelf is closed with *note
     close(): 2a6f.

 -- Método: Shelf.close ()

     Synchronize and close the persistent 'dict' object.  Operations on
     a closed shelf will fail with a *note ValueError: 202.

Ver também
..........

Persistent dictionary recipe(2) with widely supported storage formats
and having the speed of native dictionaries.

* Menu:

* Restrições::
* Exemplo: Exemplo<6>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/shelve.py

   (2) 
https://code.activestate.com/recipes/576642-persistent-dict-with-multiple-standard-file-format/


File: python.info,  Node: Restrições,  Next: Exemplo<6>,  Up: shelve — Python object persistence

5.12.3.1 Restrições
...................

   * The choice of which database package will be used (such as *note
     dbm.ndbm: 34. or *note dbm.gnu: 33.) depends on which interface is
     available.  Therefore it is not safe to open the database directly
     using *note dbm: 31.  The database is also (unfortunately) subject
     to the limitations of *note dbm: 31, if it is used — this means
     that (the pickled representation of) the objects stored in the
     database should be fairly small, and in rare cases key collisions
     may cause the database to refuse updates.

   * The *note shelve: c3. module does not support 'concurrent'
     read/write access to shelved objects.  (Multiple simultaneous read
     accesses are safe.)  When a program has a shelf open for writing,
     no other program should have it open for reading or writing.  Unix
     file locking can be used to solve this, but this differs across
     Unix versions and requires knowledge about the database
     implementation used.

   * On macOS *note dbm.ndbm: 34. can silently corrupt the database file
     on updates, which can cause hard crashes when trying to read from
     the database.

 -- Classe: shelve.Shelf (dict, protocol=None, writeback=False,
          keyencoding='utf-8')

     A subclass of *note collections.abc.MutableMapping: 10eb. which
     stores pickled values in the 'dict' object.

     By default, pickles created with *note pickle.DEFAULT_PROTOCOL:
     831. are used to serialize values.  The version of the pickle
     protocol can be specified with the 'protocol' parameter.  See the
     *note pickle: a6. documentation for a discussion of the pickle
     protocols.

     If the 'writeback' parameter is ‘True’, the object will hold a
     cache of all entries accessed and write them back to the 'dict' at
     sync and close times.  This allows natural operations on mutable
     entries, but can consume much more memory and make sync and close
     take a long time.

     The 'keyencoding' parameter is the encoding used to encode keys
     before they are used with the underlying dict.

     A *note Shelf: fcf. object can also be used as a context manager,
     in which case it will be automatically closed when the *note with:
     5d2. block ends.

     Alterado na versão 3.2: Added the 'keyencoding' parameter;
     previously, keys were always encoded in UTF-8.

     Alterado na versão 3.4: Adicionado suporte a gerenciador de
     contexto.

     Alterado na versão 3.10: *note pickle.DEFAULT_PROTOCOL: 831. is now
     used as the default pickle protocol.

 -- Classe: shelve.BsdDbShelf (dict, protocol=None, writeback=False,
          keyencoding='utf-8')

     A subclass of *note Shelf: fcf. which exposes ‘first()’, ‘next()’,
     ‘previous()’, ‘last()’ and ‘set_location()’ methods.  These are
     available in the third-party ‘bsddb’ module from pybsddb(1) but not
     in other database modules.  The 'dict' object passed to the
     constructor must support those methods.  This is generally
     accomplished by calling one of ‘bsddb.hashopen()’, ‘bsddb.btopen()’
     or ‘bsddb.rnopen()’.  The optional 'protocol', 'writeback', and
     'keyencoding' parameters have the same interpretation as for the
     *note Shelf: fcf. class.

 -- Classe: shelve.DbfilenameShelf (filename, flag='c', protocol=None,
          writeback=False)

     A subclass of *note Shelf: fcf. which accepts a 'filename' instead
     of a dict-like object.  The underlying file will be opened using
     *note dbm.open(): f5c.  By default, the file will be created and
     opened for both read and write.  The optional 'flag' parameter has
     the same interpretation as for the *note open(): 17f3. function.
     The optional 'protocol' and 'writeback' parameters have the same
     interpretation as for the *note Shelf: fcf. class.

   ---------- Footnotes ----------

   (1) https://www.jcea.es/programacion/pybsddb.htm


File: python.info,  Node: Exemplo<6>,  Prev: Restrições,  Up: shelve — Python object persistence

5.12.3.2 Exemplo
................

To summarize the interface (‘key’ is a string, ‘data’ is an arbitrary
object):

     import shelve

     d = shelve.open(filename)  # open -- file may get suffix added by low-level
                                # library

     d[key] = data              # store data at key (overwrites old data if
                                # using an existing key)
     data = d[key]              # retrieve a COPY of data at key (raise KeyError
                                # if no such key)
     del d[key]                 # delete data stored at key (raises KeyError
                                # if no such key)

     flag = key in d            # true if the key exists
     klist = list(d.keys())     # a list of all existing keys (slow!)

     # as d was opened WITHOUT writeback=True, beware:
     d['xx'] = [0, 1, 2]        # this works as expected, but...
     d['xx'].append(3)          # *this doesn't!* -- d['xx'] is STILL [0, 1, 2]!

     # having opened d without writeback=True, you need to code carefully:
     temp = d['xx']             # extracts the copy
     temp.append(5)             # mutates the copy
     d['xx'] = temp             # stores the copy right back, to persist it

     # or, d=shelve.open(filename,writeback=True) would let you just code
     # d['xx'].append(5) and have it work as expected, BUT it would also
     # consume more memory and make the d.close() operation slower.

     d.close()                  # close it

Ver também
..........

Módulo *note dbm: 31.

     Generic interface to ‘dbm’-style databases.

Módulo *note pickle: a6.

     Object serialization used by *note shelve: c3.


File: python.info,  Node: marshal — Serialização interna de objetos Python,  Next: dbm — Interfaces para “banco de dados” Unix,  Prev: shelve — Python object persistence,  Up: Persistência de Dados

5.12.4 ‘marshal’ — Serialização interna de objetos Python
---------------------------------------------------------

__________________________________________________________________

Este módulo contém funções que podem ler e gravar valores Python em
formato binário.  O formato é específico para Python, mas independente
dos problemas de arquitetura da máquina (por exemplo, você pode gravar
um valor Python em um arquivo em um PC, transportar o arquivo para um
Mac e lê-lo de volta lá).  Os detalhes do formato não são documentados
propositalmente; ele pode mudar entre as versões do Python (embora
raramente mude).  (1)

Este não é um módulo de “persistência” geral.  Para persistência geral e
transferência de objetos Python através de chamadas RPC, veja os módulos
*note pickle: a6. e *note shelve: c3.  O módulo *note marshal: 8d.
existe principalmente para ter suporte à leitura e escrita do código
“pseudocompilado” para módulos Python de arquivos ‘.pyc’.  Portanto, os
mantenedores do Python se reservam o direito de modificar o formato do
marshal de maneiras incompatíveis com versões anteriores, caso seja
necessário.  O formato dos objetos código não é compatível entre as
versões do Python, mesmo que a versão do formato seja a mesma.
Desserializar um objeto código na versão incorreta do Python tem um
comportamento indefinido.  Se você estiver serializando e
desserializando objetos Python, use o módulo *note pickle: a6. – o
desempenho é comparável, a independência de versão é garantida e pickle
tem suporte a uma gama substancialmente maior de objetos do que marshal.

     Aviso: O módulo *note marshal: 8d. não se destina a ser seguro
     contra dados errôneos ou construídos de forma maliciosa.  Nunca
     faça o unmarshalling de dados recebidos de uma fonte não confiável
     ou não autenticada.

Nem todos os tipos de objetos Python são manipuláveis com marshal; em
geral, apenas objetos cujo valor é independente de uma invocação
particular de Python podem ser escritos e lidos por este módulo.  Os
seguintes tipos são suportados: booleanos, inteiros, números de ponto
flutuante, números complexos, strings, bytes, bytearrays, tuplas,
listas, conjuntos, conjuntos congelados, dicionários e objetos código
(se 'allow_code' for verdadeiro), onde deve ser entendido que tuplas,
listas, conjuntos, conjuntos congelados e os dicionários são suportados
apenas enquanto os próprios valores contidos neles forem suportados.  Os
valores únicos *note None: 675, *note Ellipsis: 231c. e *note
StopIteration: c15. também podem ser serializados e dessarializados com
marshal.  Para formato 'version' inferior a 3, listas recursivas,
conjuntos e dicionários não podem ser escritos (veja abaixo).

Existem funções que leem/gravam arquivos, bem como funções que operam em
objetos bytes ou similares.

O módulo define estas funções:

 -- Função: marshal.dump (value, file, version=version, /, *,
          allow_code=True)

     Grava o valor no arquivo aberto.  O valor deve ser um tipo
     compatível.  O arquivo deve ser *note arquivo binário: 1e0e.
     gravável.

     Se o valor tem (ou contém um objeto que tem) um tipo não suportado,
     uma exceção *note ValueError: 202. é levantada – mas dados de lixo
     também serão gravados no arquivo.  O objeto não será lido
     corretamente por *note load(): 1b8b.  Há suporte a *note objetos
     código: 1d2. somente se 'allow_code' for verdadeiro.

     O argumento 'version' indica o formato de dados que o ‘dump’ deve
     usar (veja abaixo).

     Levanta um *note evento de auditoria: 19fa. ‘marshal.dumps’ com os
     argumentos ‘value’, ‘version’.

     Alterado na versão 3.13: Adicionado o parâmetro 'allow_code'.

 -- Função: marshal.load (file, /, *, allow_code=True)

     Lê um valor do arquivo aberto e retorna-o.  Se nenhum valor válido
     for lido (por exemplo, porque os dados têm um formato de
     empacotamento incompatível com uma versão diferente do Python),
     levanta *note EOFError: 131c, *note ValueError: 202. ou *note
     TypeError: 2c3.  Há suporte a *note objetos código: 1d2. somente se
     'allow_code' for verdadeiro.  O arquivo deve ser um *note arquivo
     binário: 1e0e. legível.

     Levanta um *note evento de auditoria: 19fa. ‘marshal.load’ sem
     argumentos.

          Nota: Se um objeto contendo um tipo não suportado foi
          empacotado com *note dump(): 2a76, *note load(): 1b8b. irá
          substituir ‘None’ pelo tipo não empacotável.

     Alterado na versão 3.10: Esta chamada costumava levantar um evento
     de auditoria ‘code.__new__’ para cada objeto código.  Agora, ele
     levanta um único evento ‘marshal.load’ para toda a operação de
     carregamento.

     Alterado na versão 3.13: Adicionado o parâmetro 'allow_code'.

 -- Função: marshal.dumps (value, version=version, /, *,
          allow_code=True)

     Retorna o objeto bytes que seria escrito em um arquivo por
     ‘dump(value, file)’.  O valor deve ser um tipo compatível.  Levanta
     uma exceção *note ValueError: 202. se o valor tem (ou contém um
     objeto que tem) um tipo não suportado.  Há suporte a *note objetos
     código: 1d2. somente se 'allow_code' for verdadeiro.

     O argumento 'version' indica o formato de dados que ‘dumps’ deve
     usar (veja abaixo).

     Levanta um *note evento de auditoria: 19fa. ‘marshal.dumps’ com os
     argumentos ‘value’, ‘version’.

     Alterado na versão 3.13: Adicionado o parâmetro 'allow_code'.

 -- Função: marshal.loads (bytes, /, *, allow_code=True)

     Converte o *note objeto bytes ou similar: d4f. em um valor.  Se
     nenhum valor válido for encontrado, levanta *note EOFError: 131c,
     *note ValueError: 202. ou *note TypeError: 2c3.  Há suporte a *note
     objetos código: 1d2. somente se 'allow_code' for verdadeiro.  Bytes
     extras na entrada são ignorados.

     Levanta um *note evento de auditoria: 19fa. ‘marshal.loads’ com o
     argumento ‘bytes’.

     Alterado na versão 3.10: Esta chamada costumava levantar um evento
     de auditoria ‘code.__new__’ para cada objeto código.  Agora, ele
     levanta um único evento ‘marshal.loads’ para toda a operação de
     carregamento.

     Alterado na versão 3.13: Adicionado o parâmetro 'allow_code'.

Além disso, as seguintes constantes são definidas:

 -- Dado: marshal.version

     Indica o formato que o módulo usa.  A versão 0 é o formato
     histórico, a versão 1 compartilha strings internas e a versão 2 usa
     um formato binário para números de ponto flutuante.  A versão 3
     adiciona suporte para instanciação e recursão de objetos.  A versão
     atual é a 4.

   ---------- Footnotes ----------

   (1) O nome deste módulo deriva de um pouco da terminologia usada
pelos designers do Modula-3 (entre outros), que usam o termo
“marshalling” para enviar dados em um formato independente.
Estritamente falando, “to marshal” significa converter alguns dados da
forma interna para a externa (em um buffer RPC, por exemplo) e
“unmarshalling” para o processo reverso.


File: python.info,  Node: dbm — Interfaces para “banco de dados” Unix,  Next: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite,  Prev: marshal — Serialização interna de objetos Python,  Up: Persistência de Dados

5.12.5 ‘dbm’ — Interfaces para “banco de dados” Unix
----------------------------------------------------

'Código-fonte:' Lib/dbm/__init__.py(1)

__________________________________________________________________

*note dbm: 31. é uma interface genérica para variantes do banco de dados
DBM:

   * *note dbm.sqlite3: 35.

   * *note dbm.gnu: 33.

   * *note dbm.ndbm: 34.

Se nenhum desses módulos estiverem instalados, a implementação lenta,
mas simples, no módulo *note dbm.dumb: 32. será usada.  Há uma interface
de terceiros(2) para o Oracle Berkeley DB.

 -- Exceção: dbm.error

     Uma tupla contendo as exceções que podem ser levantadas por cada um
     dos módulos suportados, com a única exceção também chamada *note
     dbm.error: 2a7c. como o primeiro item — o último é usado quando
     *note dbm.error: 2a7c. é levantada.

 -- Função: dbm.whichdb (filename)

     Esta função tenta adivinhar qual dos vários módulos de banco de
     dados simples disponíveis — *note dbm.sqlite3: 35, *note dbm.gnu:
     33, *note dbm.ndbm: 34. ou *note dbm.dumb: 32. — deve ser usado
     para abrir o arquivo fornecido.

     Retorna um dos seguintes valores:

        * ‘None’ se o arquivo não puder ser aberto porque está ilegível
          ou não existe

        * a string vazia (‘''’) se o formato do arquivo não puder ser
          adivinhado

        * uma string contendo o nome do módulo necessário, tal como
          ‘'dbm.ndbm'’ ou ‘'dbm.gnu'’

     Alterado na versão 3.11: 'filename' aceita um *note objeto caminho
     ou similar: 2a0.

 -- Função: dbm.open (file, flag='r', mode=0o666)

     Abre um banco de dados e retorna o objeto banco de dados
     correspondendo.


     Parâmetros:

        * ‘file’ (*note path-like object: 2a0.) – O arquivo de banco de
          dados para abrir.  Se o arquivo de banco de dados já existe, a
          função *note whichdb(): 2a7d. é usada para determinar seu tipo
          e o módulo apropriado é usado; se ele não existir, o primeiro
          submódulo listado acima que pode ser importado é usado.

        * ‘flag’ (*note str: 44c.) –

             * ‘'r'’ (padrão): Open existing database for reading only.

             * ‘'w'’: Open existing database for reading and writing.

             * ‘'c'’: Open database for reading and writing, creating it
               if it doesn’t exist.

             * ‘'n'’: Always create a new, empty database, open for
               reading and writing.

        * ‘mode’ (*note int: 257.) – The Unix file access mode of the
          file (default: octal ‘0o666’), used only when the database has
          to be created.

     Alterado na versão 3.11: 'file' aceita um *note objeto caminho ou
     similar: 2a0.

O objeto retornado por *note open(): f5c. oferece suporte à
funcionalidade básica de *note mapeamentos: 11fb. mutáveis; chaves e
seus valores correspondentes podem ser armazenados, recuperados e
excluídos, e iteração, o operador *note in: 2f4. e os métodos ‘keys()’,
‘get()’, ‘setdefault()’ e ‘clear()’ estão disponíveis.  O método
‘keys()’ retorna uma lista em vez de um objeto de visualização.  O
método ‘setdefault()’ requer dois argumentos.

Chaves e valores são sempre armazenados como *note bytes: 1c2.  Isso
significa que quando strings são usadas, elas são implicitamente
convertidas para a codificação padrão antes de serem armazenadas.

Estes objetos também oferecem suporte a serem usados em uma instrução
*note with: 5d2, que vai fechá-los automaticamente quando estiver
concluída.

Alterado na versão 3.2: O métodos ‘get()’ e ‘setdefault()’ estão agora
disponíveis para todos os backends do *note dbm: 31.

Alterado na versão 3.4: Adicionado suporte nativo para o protocolo de
gerenciamento de contexto para os objetos retornados por *note open():
f5c.

Alterado na versão 3.8: Excluir uma chave de um banco de dados somente
leitura levanta uma exceção de banco de dados específica do módulo em
vez de *note KeyError: 344.

Alterado na versão 3.13: Os métodos ‘clear()’ estão agora disponíveis
para todos os backends do *note dbm: 31.

Os seguintes exemplos registram alguns hostnames e um título
correspondente, e então exibe o conteúdo do banco de dados:

     import dbm

     # Abre o banco de dados, criando-o se necessário.
     with dbm.open('cache', 'c') as db:

         # Registra alguns valores
         db[b'hello'] = b'there'
         db['www.python.org'] = 'Python Website'
         db['www.cnn.com'] = 'Cable News Network'

         # Note que as chaves são consideradas bytes agora.
         assert db[b'www.python.org'] == b'Python Website'
         # Observe como o valor é agora em bytes.
         assert db['www.cnn.com'] == b'Cable News Network'

         # Métodos geralmente usados da interface dict funcionam também.
         print(db.get('python.org', b'not present'))

         # Armazenar uma chave não-string ou valor  vai levantar uma exceção
         # (provavelmente uma TypeError).
         db['www.yahoo.com'] = 4

     # db é automaticamente fechado a sair da instrução with.

Ver também
..........

Módulo *note shelve: c3.

     Módulo persistente que armazena dados não-string.

Os submódulos individuais são descritos nas seções a seguir.

* Menu:

* dbm.sqlite3 — Backend de SQLite para dbm: dbm sqlite3 — Backend de SQLite para dbm.
* dbm.gnu — Gerenciador de banco de dados do GNU: dbm gnu — Gerenciador de banco de dados do GNU.
* dbm.ndbm — New Database Manager: dbm ndbm — New Database Manager.
* dbm.dumb — Implementação portátil do DBM: dbm dumb — Implementação portátil do DBM.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/dbm/__init__.py

   (2) https://www.jcea.es/programacion/pybsddb.htm


File: python.info,  Node: dbm sqlite3 — Backend de SQLite para dbm,  Next: dbm gnu — Gerenciador de banco de dados do GNU,  Up: dbm — Interfaces para “banco de dados” Unix

5.12.5.1 ‘dbm.sqlite3’ — Backend de SQLite para dbm
...................................................

Adicionado na versão 3.13.

'Código-fonte:' Lib/dbm/sqlite3.py(1)

__________________________________________________________________

Este módulo usa o módulo da biblioteca padrão *note sqlite3: cf. para
fornecer um backend de SQLite para o módulo *note dbm: 31.  Os arquivos
criados por *note dbm.sqlite3: 35. podem então ser abertos por *note
sqlite3: cf. ou quaisquer outros navegadores de SQLite, incluindo CLI do
SQLite.

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

 -- Função: dbm.sqlite3.open (filename, /, flag='r', mode=0o666)

     Abre um banco de dados SQLite.


     Parâmetros:

        * ‘filename’ (*note path-like object: 2a0.) – O caminho para o
          banco de dados a ser aberta.

        * ‘flag’ (*note str: 44c.) –

             * ‘'r'’ (padrão): Open existing database for reading only.

             * ‘'w'’: Open existing database for reading and writing.

             * ‘'c'’: Open database for reading and writing, creating it
               if it doesn’t exist.

             * ‘'n'’: Always create a new, empty database, open for
               reading and writing.

        * ‘mode’ – O modo de acesso a arquivos do Unix do arquivo
          (padrão: octal ‘0o666’), usado apenas quando o banco de dados
          tem que ser criado.

     O objeto de banco de dados retornado se comporta de forma
     semelhante a um *note mapeamento: 11fb. mutável, mas o método
     ‘keys()’ retorna uma lista e o método ‘setdefault()’ requer dois
     argumentos.  Ele também oferece suporte a um gerenciador de
     contexto de “fechamento” por meio da palavra reservada *note with:
     5d2.

     O seguinte método também é fornecido:

      -- Método: sqlite3.close ()

          Fecha o banco de dados SQLite.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/dbm/sqlite3.py


File: python.info,  Node: dbm gnu — Gerenciador de banco de dados do GNU,  Next: dbm ndbm — New Database Manager,  Prev: dbm sqlite3 — Backend de SQLite para dbm,  Up: dbm — Interfaces para “banco de dados” Unix

5.12.5.2 ‘dbm.gnu’ — Gerenciador de banco de dados do GNU
.........................................................

'Código-fonte:' Lib/dbm/gnu.py(1)

__________________________________________________________________

O módulo *note dbm.gnu: 33. fornece uma interface para a biblioteca GDBM
(GNU dbm), semelhante ao módulo *note dbm.ndbm: 34, mas com
funcionalidades adicionais, como tolerância a falhas.

     Nota: Os formatos de arquivo criados por *note dbm.gnu: 33. e *note
     dbm.ndbm: 34. são incompatíveis e não podem ser usados de forma
     intercambiável.

*note Disponibilidade: 1ed8.: not Android, not iOS, not WASI.

Este módulo não tem suporte em *note plataformas móveis: 1fde. ou *note
plataformas WebAssembly: 18f5.

 -- Exceção: dbm.gnu.error

     Levantada em erros específicos do *note dbm.gnu: 33, como erros de
     E/S. *note KeyError: 344. é levantada para erros gerais de
     mapeamento, como especificar uma chave incorreta.

 -- Dado: dbm.gnu.open_flags

     Uma sequência de caracteres que o parâmetro 'flag' de *note open():
     1bb7. suporta.

 -- Função: dbm.gnu.open (filename, flag='r', mode=0o666, /)

     Abre um banco de dados GDBM e retorna um objeto ‘gdbm’.


     Parâmetros:

        * ‘filename’ (*note path-like object: 2a0.) – O arquivo de banco
          de dados para abrir.

        * ‘flag’ (*note str: 44c.) –

             * ‘'r'’ (padrão): Open existing database for reading only.

             * ‘'w'’: Open existing database for reading and writing.

             * ‘'c'’: Open database for reading and writing, creating it
               if it doesn’t exist.

             * ‘'n'’: Always create a new, empty database, open for
               reading and writing.

          Os seguintes caracteres adicionais podem ser acrescentados
          para controlar como o banco de dados é aberto:

             * ‘'f'’: Abre o banco de dados em modo rápido.  As
               gravações no banco de dados não serão sincronizadas.

             * ‘'s'’: Modo sincronizado.  Alterações no banco de dados
               serão gravadas imediatamente no arquivo.

             * ‘'u'’: Não trava o banco de dados.

          Nem todos os sinalizadores são válidos para todas as versões
          do GDBM. Veja o membro *note open_flags: 2a82. para uma lista
          de caracteres de sinalizadores suportados.

        * ‘mode’ (*note int: 257.) – The Unix file access mode of the
          file (default: octal ‘0o666’), used only when the database has
          to be created.


     Levanta: *note error: aa9. – Se um argumento 'flag' inválido for
     passado.

     Alterado na versão 3.11: 'filename' aceita um *note objeto caminho
     ou similar: 2a0.

     Objetos ‘gdbm’ se comportam de forma semelhante aos *note
     mapeamentos: 11fb. mutáveis, mas os métodos ‘items()’, ‘values()’,
     ‘pop()’, ‘popitem()’ e ‘update()’ não são suportados, ‘keys()’
     retorna uma lista e o método ‘setdefault()’ requer dois argumentos.
     Ele também oferece suporte a um gerenciador de contexto de
     “fechamento” por meio da palavra reservada *note with: 5d2.

     Alterado na versão 3.2: Adiciionados os métodos ‘get()’ e
     ‘setdefault()’.

     Alterado na versão 3.13: Adicionado o método ‘clear()’.

     Os seguintes métodos também são fornecidos:

      -- Método: gdbm.close ()

          Fecha o banco de dados GDBM.

      -- Método: gdbm.firstkey ()

          É possível fazer um laço em cada chave no banco de dados
          usando este método e o método *note nextkey(): 2a85.  A
          travessia é ordenada pelos valores de hash internos do GDBM e
          não será classificada pelos valores de chave.  Este método
          retorna a chave inicial.

      -- Método: gdbm.nextkey (key)

          Retorna a chave que segue 'key' na travessia.  O código a
          seguir imprime cada chave no banco de dados ‘db’, sem precisar
          criar uma lista na memória que contenha todas elas:

               k = db.firstkey()
               while k is not None:
                   print(k)
                   k = db.nextkey(k)

      -- Método: gdbm.reorganize ()

          Se você realizou muitas exclusões e gostaria de reduzir o
          espaço usado pelo arquivo GDBM, esta rotina reorganizará o
          banco de dados.  Objetos ‘gdbm’ não reduzirão o tamanho de um
          arquivo de banco de dados, exceto usando esta reorganização;
          caso contrário, o espaço de arquivo excluído será mantido e
          reutilizado à medida que novos pares (chave, valor) forem
          adicionados.

      -- Método: gdbm.sync ()

          Quando o banco de dados é aberto no modo rápido, esse método
          força a gravação de todos os dados não gravados no disco.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/dbm/gnu.py


File: python.info,  Node: dbm ndbm — New Database Manager,  Next: dbm dumb — Implementação portátil do DBM,  Prev: dbm gnu — Gerenciador de banco de dados do GNU,  Up: dbm — Interfaces para “banco de dados” Unix

5.12.5.3 ‘dbm.ndbm’ — New Database Manager
..........................................

'Código-fonte:' Lib/dbm/ndbm.py(1)

__________________________________________________________________

O módulo *note dbm.ndbm: 34. fornece uma interface para a biblioteca
NDBM (New Database Manager).  Este módulo pode ser usado com a interface
NDBM “clássica” ou a interface de compatibilidade GDBM.

     Nota: Os formatos de arquivo criados por *note dbm.gnu: 33. e *note
     dbm.ndbm: 34. são incompatíveis e não podem ser usados de forma
     intercambiável.

     Aviso: A biblioteca NDBM enviada como parte do macOS tem uma
     limitação não documentada no tamanho dos valores, o que pode
     resultar em arquivos de banco de dados corrompidos ao armazenar
     valores maiores que esse limite.  Ler esses arquivos corrompidos
     pode resultar em uma falha grave (falha de segmentação).

*note Disponibilidade: 1ed8.: not Android, not iOS, not WASI.

Este módulo não tem suporte em *note plataformas móveis: 1fde. ou *note
plataformas WebAssembly: 18f5.

 -- Exceção: dbm.ndbm.error

     Levantada em erros específicos de *note dbm.ndbm: 34, como erros de
     E/S. *note KeyError: 344. é levantada para erros gerais de
     mapeamento, como especificar uma chave incorreta.

 -- Dado: dbm.ndbm.library

     Nome da biblioteca de implementação NDBM usada.

 -- Função: dbm.ndbm.open (filename, flag='r', mode=0o666, /)

     Abre um banco de dados NDBM e retorna um objeto ‘ndbm’.


     Parâmetros:

        * ‘filename’ (*note path-like object: 2a0.) – O nome base do
          arquivo de banco de dados (sem as extensões ‘.dir’ ou ‘.pag’).

        * ‘flag’ (*note str: 44c.) –

             * ‘'r'’ (padrão): Open existing database for reading only.

             * ‘'w'’: Open existing database for reading and writing.

             * ‘'c'’: Open database for reading and writing, creating it
               if it doesn’t exist.

             * ‘'n'’: Always create a new, empty database, open for
               reading and writing.

        * ‘mode’ (*note int: 257.) – The Unix file access mode of the
          file (default: octal ‘0o666’), used only when the database has
          to be created.

     Alterado na versão 3.11: Aceita um *note objeto caminho ou similar:
     2a0. como nome de arquivo.

     Objetos ‘ndbm’ se comportam de forma semelhante aos *note
     mapeamentos: 11fb. mutáveis, mas os métodos ‘items()’, ‘values()’,
     ‘pop()’, ‘popitem()’ e ‘update()’ não são suportados, ‘keys()’
     retorna uma lista e o método ‘setdefault()’ requer dois argumentos.
     Ele também oferece suporte a um gerenciador de contexto de
     “fechamento” por meio da palavra reservada *note with: 5d2.

     Alterado na versão 3.2: Adiciionados os métodos ‘get()’ e
     ‘setdefault()’.

     Alterado na versão 3.13: Adicionado o método ‘clear()’.

     O seguinte método também é fornecido:

      -- Método: ndbm.close ()

          Fecha o banco de dados NDBM.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/dbm/ndbm.py


File: python.info,  Node: dbm dumb — Implementação portátil do DBM,  Prev: dbm ndbm — New Database Manager,  Up: dbm — Interfaces para “banco de dados” Unix

5.12.5.4 ‘dbm.dumb’ — Implementação portátil do DBM
...................................................

'Código-fonte:' Lib/dbm/dumb.py(1)

     Nota: O módulo *note dbm.dumb: 32. é pensado como um último recurso
     alternativo para o módulo *note dbm: 31. quando um módulo mais
     robusto não está disponível.  O módulo *note dbm.dumb: 32. não é
     escrito para velocidade e não é tão usado quanto os outros módulos
     de banco de dados.

__________________________________________________________________

O módulo *note dbm.dumb: 32. fornece uma interface persistente do tipo
*note dict: 256. que é escrita inteiramente em Python.  Ao contrário de
outros backends *note dbm: 31, como *note dbm.gnu: 33, nenhuma
biblioteca externa é necessária.

O módulo ‘dbm.dumb’ define o seguinte:

 -- Exceção: dbm.dumb.error

     Levantada em erros específicos de *note dbm.dumb: 32, como erros de
     E/S. *note KeyError: 344. é levantada para erros gerais de
     mapeamento, como especificar uma chave incorreta.

 -- Função: dbm.dumb.open (filename, flag='c', mode=0o666)

     Abre um banco de dados ‘dbm.dumb’.


     Parâmetros:

        * ‘filename’ – O nome base do arquivo do banco de dados (sem
          extensões).  Um novo banco de dados cria os seguintes
          arquivos: - ‘`filename'.dat’ - ‘`filename'.dir’

        * ‘flag’ (*note str: 44c.) –

             * ‘'r'’: Open existing database for reading only.

             * ‘'w'’: Open existing database for reading and writing.

             * ‘'c'’ (padrão): Open database for reading and writing,
               creating it if it doesn’t exist.

             * ‘'n'’: Always create a new, empty database, open for
               reading and writing.

        * ‘mode’ (*note int: 257.) – The Unix file access mode of the
          file (default: octal ‘0o666’), used only when the database has
          to be created.

          Aviso: É possível travar o interpretador Python ao carregar um
          banco de dados com uma entrada suficientemente grande/complexa
          devido a limitações de profundidade de pilha no compilador AST
          do Python.

     Alterado na versão 3.5: *note open(): aa5. sempre cria um novo
     banco de dados quando 'flag' é ‘'n'’.

     Alterado na versão 3.8: Um banco de dados aberto somente leitura se
     'flag' for ‘'r'’.  Um banco de dados não é criado se não existir se
     'flag' for ‘'r'’ ou ‘'w'’.

     Alterado na versão 3.11: 'filename' aceita um *note objeto caminho
     ou similar: 2a0.

     O objeto de banco de dados retornado se comporta de forma
     semelhante a um *note mapeamento: 11fb. mutável, mas os métodos
     ‘keys()’ e ‘items()’ retornam uma lista e o método ‘setdefault()’
     requer dois argumentos.  Ele também oferece suporte a um
     gerenciador de contexto de “fechamento” por meio da palavra
     reservada *note with: 5d2.

     Os seguintes métodos também são fornecidos:

      -- Método: dumbdbm.close ()

          Fecha o banco de dados.

      -- Método: dumbdbm.sync ()

          Sincroniza o diretório no disco e os arquivos de dados.  Este
          método é chamado pelo método *note shelve.Shelf.sync(): 2a6e.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/dbm/dumb.py


File: python.info,  Node: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite,  Prev: dbm — Interfaces para “banco de dados” Unix,  Up: Persistência de Dados

5.12.6 ‘sqlite3’ —- interface DB-API 2.0 interface para bancos de dados SQLite
------------------------------------------------------------------------------

'Código-fonte:' Lib/sqlite3/(1)

SQLite é uma biblioteca C que fornece um banco de dados leve baseado em
disco que não requer um processo de servidor separado e permite acessar
o banco de dados usando uma variante não padrão da linguagem de consulta
SQL. Algumas aplicações podem usar SQLite para armazenamento interno de
dados.  Também é possível prototipar um aplicativo usando SQLite e, em
seguida, portar o código para um banco de dados maior, como PostgreSQL
ou Oracle.

O módulo ‘sqlite3’ foi escrito por Gerhard Häring.  Ele oferece uma
interface SQL compatível com a especificação DB-API 2.0 descrita pela
PEP 249(2) e requer o SQLite 3.15.2 ou o mais recente.

Esse documento inclui quatro seções principais:

   * *note Tutorial: 2a92. ensina como usar o módulo ‘sqlite3’.

   * *note Referência: 2a93. descreve as classes e funções que este
     módulo define.

   * *note Guias de como fazer: 2a94. detalha como lidar com tarefas
     específicas.

   * *note Explicação: 2a95. fornece informações detalhadas sobre
     controle de transações.

Ver também
..........

‘https://www.sqlite.org’

     A página web do SQLite; a documentação descreve a sintaxe e os
     tipos de dados disponíveis para o dialeto SQL suportado.

‘https://www.w3schools.com/sql/’

     Tutoriais, referências e exemplos para aprender a sintaxe SQL.

PEP 249(3) - Especificação 2.0 da API de banco de dados

     PEP escrita por Marc-André Lemburg.

* Menu:

* Tutorial::
* Referência::
* Guias de como fazer::
* Explicação::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/sqlite3/

   (2) https://peps.python.org/pep-0249/

   (3) https://peps.python.org/pep-0249/


File: python.info,  Node: Tutorial,  Next: Referência,  Up: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite

5.12.6.1 Tutorial
.................

Neste tutorial, você criará um banco de dados de filmes do Monty Python
usando a funcionalidade básica ‘sqlite3’.  Ele pressupõe uma compreensão
fundamental dos conceitos de banco de dados, incluindo cursores(1) e
transações(2).

Primeiro, precisamos criar um novo banco de dados e abrir uma conexão
com o banco de dados para permitir que ‘sqlite3’ funcione com ele.
Chame *note sqlite3.connect(): 2a8. para criar uma conexão com o banco
de dados ‘tutorial.db’ no diretório de trabalho atual, criando-o
implicitamente se ele não existir:

     import sqlite3
     con = sqlite3.connect("tutorial.db")

O objeto *note Connection: 245. ‘con’ retornado representa a conexão com
o banco de dados em disco.

Para executar instruções SQL e buscar resultados de consultas SQL,
precisaremos usar um cursor de banco de dados.  Chame *note
con.cursor(): 2a97. para criar o *note Cursor: 2a98.:

     cur = con.cursor()

Agora que temos uma conexão com o banco de dados e um cursor, podemos
criar uma tabela de banco de dados ‘movie’ com colunas para título, ano
de lançamento e pontuação da revisão.  Para simplificar, podemos apenas
usar nomes de colunas na declaração da tabela - graças ao recurso
tipagem flexível(3) do SQLite, especificar os tipos de dados é opcional.
Execute a instrução ‘CREATE TABLE’ chamando *note cur.execute(...):
2d1.:

     cur.execute("CREATE TABLE movie(title, year, score)")

Podemos verificar se a nova tabela foi criada consultando a tabela
embutida ‘sqlite_master’ no SQLite, que agora deve conter uma entrada
para a definição da tabela ‘movie’ (veja The Schema Table(4) para
detalhes).  Execute essa consulta chamando *note cur.execute(...): 2d1,
atribua o resultado a ‘res’ e chame *note res.fetchone(): 2a99. para
buscar a linha resultante:

     >>> res = cur.execute("SELECT name FROM sqlite_master")
     >>> res.fetchone()
     ('movie',)

Podemos ver que a tabela foi criada, pois a consulta retorna *note
tuple: 370. contendo o nome da tabela.  Se fizermos uma consulta
‘sqlite_master’ para uma tabela inexistente ‘spam’, ‘res.fetchone()’ ela
retornará ‘None’:

     >>> res = cur.execute("SELECT name FROM sqlite_master WHERE name='spam'")
     >>> res.fetchone() is None
     True

Agora, adicione duas linhas de dados fornecidos como literais SQL
executando uma instrução ‘INSERT’, mais uma vez chamando *note
cur.execute(...): 2d1.:

     cur.execute("""
         INSERT INTO movie VALUES
             ('Monty Python and the Holy Grail', 1975, 8.2),
             ('And Now for Something Completely Different', 1971, 7.5)
     """)

A instrução ‘INSERT’ abre implicitamente uma transação, que precisa ser
confirmada antes que as alterações sejam salvas no banco de dados (veja
*note Controle de transações: 2a9a. para detalhes).  Chame *note
con.commit(): 2a9b. no objeto de conexão para confirmar a transação:

     con.commit()

Podemos verificar que os dados foram inseridos corretamente executando
uma consulta ‘SELECT’.  Use o já conhecido *note cur.execute(...): 2d1.
para atribuir o resultado a ‘res’ e chame *note res.fetchall(): 2a9c.
para retornar todas as linhas resultantes.

     >>> res = cur.execute("SELECT score FROM movie")
     >>> res.fetchall()
     [(8.2,), (7.5,)]

O resultado é uma *note list: 611. de duas ‘tuple’s, uma por linha, cada
uma contendo o valor ‘score’ dessa linha.

Agora, insira mais três linhas chamando *note cur.executemany(...):
2d2.:

     data = [
         ("Monty Python Live at the Hollywood Bowl", 1982, 7.9),
         ("Monty Python's The Meaning of Life", 1983, 7.5),
         ("Monty Python's Life of Brian", 1979, 8.0),
     ]
     cur.executemany("INSERT INTO movie VALUES(?, ?, ?)", data)
     con.commit()  # Lembre-sede executar a transação após o INSERT.

Observe que espaços reservados ‘?’ são usados para vincular ‘data’ à
consulta.  Sempre use espaços reservados em vez de *note formatação de
string: 1dfa. para vincular valores Python a instruções SQL, para evitar
ataques de injeção de SQL(5) (consulte *note How to use placeholders to
bind values in SQL queries: 2d3. para mais detalhes).

Podemos verificar que as novas linhas foram inseridas executando uma
consulta ‘SELECT’, desta vez iterando sobre os resultados da consulta.

     >>> for row in cur.execute("SELECT year, title FROM movie ORDER BY year"):
     ...     print(row)
     (1971, 'And Now for Something Completely Different')
     (1975, 'Monty Python and the Holy Grail')
     (1979, "Monty Python's Life of Brian")
     (1982, 'Monty Python Live at the Hollywood Bowl')
     (1983, "Monty Python's The Meaning of Life")

Cada linha é uma *note tuple: 370. de dois itens ‘(year, title)’,
correspondendo às colunas selecionadas na consulta.

Finalmente, verifique se o banco de dados foi gravado no disco chamando
*note con.close(): 246. para fechar a conexão existente, abrir uma nova,
criar um novo cursor e, em seguida, consultar o banco de dados.

     >>> con.close()
     >>> new_con = sqlite3.connect("tutorial.db")
     >>> new_cur = new_con.cursor()
     >>> res = new_cur.execute("SELECT title, year FROM movie ORDER BY score DESC")
     >>> title, year = res.fetchone()
     >>> print(f'The highest scoring Monty Python movie is {title!r}, released in {year}')
     The highest scoring Monty Python movie is 'Monty Python and the Holy Grail', released in 1975
     >>> new_con.close()

Você agora criou um banco de dados SQLite usando o módulo ‘sqlite3’,
inseriu dados e recuperou valores dele de várias maneiras.

Ver também
..........

   * *note Guias de como fazer: 2a94. para leitura adicional:

        * *note How to use placeholders to bind values in SQL queries:
          2d3.

        * *note How to adapt custom Python types to SQLite values: 2a9d.

        * *note How to convert SQLite values to custom Python types:
          2a9e.

        * *note How to use the connection context manager: 18f7.

        * *note How to create and use row factories: 2a9f.

   * *note Explicação: 2a95. para obter informações detalhadas sobre o
     controle de transações.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Cursor_(databases)

   (2) https://en.wikipedia.org/wiki/Database_transaction

   (3) https://www.sqlite.org/flextypegood.html

   (4) https://www.sqlite.org/schematab.html

   (5) https://en.wikipedia.org/wiki/SQL_injection


File: python.info,  Node: Referência,  Next: Guias de como fazer,  Prev: Tutorial,  Up: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite

5.12.6.2 Referência
...................

* Menu:

* Funções do módulo::
* Constantes do módulo::
* Connection objects::
* Cursor objects::
* Row objects::
* Blob objects::
* PrepareProtocol objects::
* Exceções: Exceções<7>.
* SQLite and Python types::
* Default adapters and converters (deprecated): Default adapters and converters deprecated.
* Interface de linha de comando::


File: python.info,  Node: Funções do módulo,  Next: Constantes do módulo,  Up: Referência

5.12.6.3 Funções do módulo
..........................

 -- Função: sqlite3.connect (database, timeout=5.0, detect_types=0,
          isolation_level='DEFERRED', check_same_thread=True,
          factory=sqlite3.Connection, cached_statements=128, uri=False,
          *, autocommit=sqlite3.LEGACY_TRANSACTION_CONTROL)

     Abra uma conexão com um banco de dados SQLite.


     Parâmetros:

        * ‘database’ (*note path-like object: 2a0.) – O caminho para o
          arquivo do banco de dados a ser aberto.  Você pode passar
          ‘":memory:"’ para criar um banco de dados SQLite que existirá
          apenas na memória(1), e abrir uma conexão com ele.

        * ‘timeout’ (*note float: 2f7.) – Quantos segundos a conexão
          deve aguardar antes de levantar uma exceção *note
          OperationalError: 19dd. quando uma tabela estiver bloqueada.
          Se outra conexão abrir uma transação para modificar uma
          tabela, essa tabela permanecerá bloqueada até que a transação
          seja confirmada.  O padrão é cinco segundos.

        * ‘detect_types’ (*note int: 257.) – Control whether and how
          data types not *note natively supported by SQLite: 2aa4. are
          looked up to be converted to Python types, using the
          converters registered with *note register_converter(): 2aa5.
          Set it to any combination (using ‘|’, bitwise or) of *note
          PARSE_DECLTYPES: 2aa6. and *note PARSE_COLNAMES: 2aa7. to
          enable this.  Column names takes precedence over declared
          types if both flags are set.  By default (‘0’), type detection
          is disabled.

        * ‘isolation_level’ (*note str: 44c.‘ | ’‘None’) – Control
          legacy transaction handling behaviour.  See *note
          Connection.isolation_level: 2aa8. and *note Controle de
          transação através do atributo isolation_level: 2aa9. for more
          information.  Can be ‘"DEFERRED"’ (default), ‘"EXCLUSIVE"’ or
          ‘"IMMEDIATE"’; or ‘None’ to disable opening transactions
          implicitly.  Has no effect unless *note Connection.autocommit:
          4b6. is set to *note LEGACY_TRANSACTION_CONTROL: 2aaa. (the
          default).

        * ‘check_same_thread’ (*note bool: 468.) – If ‘True’ (default),
          *note ProgrammingError: 4f2. will be raised if the database
          connection is used by a thread other than the one that created
          it.  If ‘False’, the connection may be accessed in multiple
          threads; write operations may need to be serialized by the
          user to avoid data corruption.  See *note threadsafety: 67c.
          for more information.

        * ‘factory’ (*note Connection: 245.) – A custom subclass of
          *note Connection: 245. to create the connection with, if not
          the default *note Connection: 245. class.

        * ‘cached_statements’ (*note int: 257.) – The number of
          statements that ‘sqlite3’ should internally cache for this
          connection, to avoid parsing overhead.  By default, 128
          statements.

        * ‘uri’ (*note bool: 468.) – If set to ‘True’, 'database' is
          interpreted as a URI (Uniform Resource Identifier) with a file
          path and an optional query string.  The scheme part 'must' be
          ‘"file:"’, and the path can be relative or absolute.  The
          query string allows passing parameters to SQLite, enabling
          various *note How to work with SQLite URIs: 2aab.

        * ‘autocommit’ (*note bool: 468.) – Control PEP 249(2)
          transaction handling behaviour.  See *note
          Connection.autocommit: 4b6. and *note Controle de transações
          através do atributo autocommit: 4b7. for more information.
          'autocommit' currently defaults to *note
          LEGACY_TRANSACTION_CONTROL: 2aaa.  The default will change to
          ‘False’ in a future Python release.


     Tipo de retorno: *note Connection: 245.

     Levanta um *note evento de auditoria: 19fa. ‘sqlite3.connect’ com o
     argumento ‘database’.

     Levanta um *note evento de auditoria: 19fa.
     ‘sqlite3.connect/handle’ com o argumento ‘connection_handle’.

     Alterado na versão 3.4: Adicionado o parâmetro 'uri'.

     Alterado na versão 3.7: 'database' can now also be a *note
     path-like object: 2a0, not only a string.

     Alterado na versão 3.10: Added the ‘sqlite3.connect/handle’
     auditing event.

     Alterado na versão 3.12: Added the 'autocommit' parameter.

     Alterado na versão 3.13: Positional use of the parameters
     'timeout', 'detect_types', 'isolation_level', 'check_same_thread',
     'factory', 'cached_statements', and 'uri' is deprecated.  They will
     become keyword-only parameters in Python 3.15.

 -- Função: sqlite3.complete_statement (statement)

     Return ‘True’ if the string 'statement' appears to contain one or
     more complete SQL statements.  No syntactic verification or parsing
     of any kind is performed, other than checking that there are no
     unclosed string literals and the statement is terminated by a
     semicolon.

     Por exemplo:

          >>> sqlite3.complete_statement("SELECT foo FROM bar;")
          True
          >>> sqlite3.complete_statement("SELECT foo")
          False

     This function may be useful during command-line input to determine
     if the entered text seems to form a complete SQL statement, or if
     additional input is needed before calling *note execute(): 2d1.

     See ‘runsource()’ in Lib/sqlite3/__main__.py(3) for real-world use.

 -- Função: sqlite3.enable_callback_tracebacks (flag, /)

     Enable or disable callback tracebacks.  By default you will not get
     any tracebacks in user-defined functions, aggregates, converters,
     authorizer callbacks etc.  If you want to debug them, you can call
     this function with 'flag' set to ‘True’.  Afterwards, you will get
     tracebacks from callbacks on *note sys.stderr: 940.  Use ‘False’ to
     disable the feature again.

          Nota: Errors in user-defined function callbacks are logged as
          unraisable exceptions.  Use an *note unraisable hook handler:
          1f7. for introspection of the failed callback.

 -- Função: sqlite3.register_adapter (type, adapter, /)

     Register an 'adapter' *note callable: 2aaf. to adapt the Python
     type 'type' into an SQLite type.  The adapter is called with a
     Python object of type 'type' as its sole argument, and must return
     a value of a *note type that SQLite natively understands: 2aa4.

 -- Função: sqlite3.register_converter (typename, converter, /)

     Register the 'converter' *note callable: 2aaf. to convert SQLite
     objects of type 'typename' into a Python object of a specific type.
     The converter is invoked for all SQLite values of type 'typename';
     it is passed a *note bytes: 1c2. object and should return an object
     of the desired Python type.  Consult the parameter 'detect_types'
     of *note connect(): 2a8. for information regarding how type
     detection works.

     Note: 'typename' and the name of the type in your query are matched
     case-insensitively.

   ---------- Footnotes ----------

   (1) https://sqlite.org/inmemorydb.html

   (2) https://peps.python.org/pep-0249/

   (3) 
https://github.com/python/cpython/tree/3.13/Lib/sqlite3/__main__.py


File: python.info,  Node: Constantes do módulo,  Next: Connection objects,  Prev: Funções do módulo,  Up: Referência

5.12.6.4 Constantes do módulo
.............................

 -- Dado: sqlite3.LEGACY_TRANSACTION_CONTROL

     Set *note autocommit: 4b6. to this constant to select old style
     (pre-Python 3.12) transaction control behaviour.  See *note
     Controle de transação através do atributo isolation_level: 2aa9.
     for more information.

 -- Dado: sqlite3.PARSE_DECLTYPES

     Pass this flag value to the 'detect_types' parameter of *note
     connect(): 2a8. to look up a converter function using the declared
     types for each column.  The types are declared when the database
     table is created.  ‘sqlite3’ will look up a converter function
     using the first word of the declared type as the converter
     dictionary key.  For example:

          CREATE TABLE test(
             i integer primary key,  ! will look up a converter named "integer"
             p point,                ! will look up a converter named "point"
             n number(10)            ! will look up a converter named "number"
           )

     This flag may be combined with *note PARSE_COLNAMES: 2aa7. using
     the ‘|’ (bitwise or) operator.

          Nota: Generated fields (for example ‘MAX(p)’) are returned as
          *note str: 44c.  Use ‘PARSE_COLNAMES’ to enforce types for
          such queries.

 -- Dado: sqlite3.PARSE_COLNAMES

     Pass this flag value to the 'detect_types' parameter of *note
     connect(): 2a8. to look up a converter function by using the type
     name, parsed from the query column name, as the converter
     dictionary key.  The query column name must be wrapped in double
     quotes (‘"’) and the type name must be wrapped in square brackets
     (‘[]’).

          SELECT MAX(p) as "p [point]" FROM test;  ! will look up converter "point"

     This flag may be combined with *note PARSE_DECLTYPES: 2aa6. using
     the ‘|’ (bitwise or) operator.

 -- Dado: sqlite3.SQLITE_OK
 -- Dado: sqlite3.SQLITE_DENY
 -- Dado: sqlite3.SQLITE_IGNORE

     Flags that should be returned by the 'authorizer_callback' *note
     callable: 2aaf. passed to *note Connection.set_authorizer(): 2ab,
     to indicate whether:

        * Access is allowed (‘SQLITE_OK’),

        * The SQL statement should be aborted with an error
          (‘SQLITE_DENY’)

        * The column should be treated as a ‘NULL’ value
          (‘SQLITE_IGNORE’)

 -- Dado: sqlite3.apilevel

     String constant stating the supported DB-API level.  Required by
     the DB-API. Hard-coded to ‘"2.0"’.

 -- Dado: sqlite3.paramstyle

     String constant stating the type of parameter marker formatting
     expected by the ‘sqlite3’ module.  Required by the DB-API.
     Hard-coded to ‘"qmark"’.

          Nota: The ‘named’ DB-API parameter style is also supported.

 -- Dado: sqlite3.sqlite_version

     Version number of the runtime SQLite library as a *note string:
     44c.

 -- Dado: sqlite3.sqlite_version_info

     Version number of the runtime SQLite library as a *note tuple: 370.
     of *note integers: 257.

 -- Dado: sqlite3.threadsafety

     Integer constant required by the DB-API 2.0, stating the level of
     thread safety the ‘sqlite3’ module supports.  This attribute is set
     based on the default threading mode(1) the underlying SQLite
     library is compiled with.  The SQLite threading modes are:

       1. 'Single-thread': In this mode, all mutexes are disabled and
          SQLite is unsafe to use in more than a single thread at once.

       2. 'Multi-thread': In this mode, SQLite can be safely used by
          multiple threads provided that no single database connection
          is used simultaneously in two or more threads.

       3. 'Serialized': In serialized mode, SQLite can be safely used by
          multiple threads with no restriction.

     The mappings from SQLite threading modes to DB-API 2.0 threadsafety
     levels are as follows:

     SQLite threading       threadsafety(2)            SQLITE_THREADSAFE(3)       DB-API 2.0 meaning
     mode                                                                         

     -----------------------------------------------------------------------------------------------------------------
                                                                                  
     single-thread          0                          0                          Threads may not share the module
                                                                                  
                                                                                  
     multi-thread           1                          2                          Threads may share the module, but
                                                                                  not connections
                                                                                  
                                                                                  
     serialized             3                          1                          Threads may share the module,
                                                                                  connections and cursors
                                                                                  

     Alterado na versão 3.11: Set 'threadsafety' dynamically instead of
     hard-coding it to ‘1’.

 -- Dado: sqlite3.version

     Version number of this module as a *note string: 44c.  This is not
     the version of the SQLite library.

     Descontinuado desde a versão 3.12, será removido na versão 3.14:
     This constant used to reflect the version number of the ‘pysqlite’
     package, a third-party library which used to upstream changes to
     ‘sqlite3’.  Today, it carries no meaning or practical value.

 -- Dado: sqlite3.version_info

     Version number of this module as a *note tuple: 370. of *note
     integers: 257.  This is not the version of the SQLite library.

     Descontinuado desde a versão 3.12, será removido na versão 3.14:
     This constant used to reflect the version number of the ‘pysqlite’
     package, a third-party library which used to upstream changes to
     ‘sqlite3’.  Today, it carries no meaning or practical value.

 -- Dado: sqlite3.SQLITE_DBCONFIG_DEFENSIVE
 -- Dado: sqlite3.SQLITE_DBCONFIG_DQS_DDL
 -- Dado: sqlite3.SQLITE_DBCONFIG_DQS_DML
 -- Dado: sqlite3.SQLITE_DBCONFIG_ENABLE_FKEY
 -- Dado: sqlite3.SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER
 -- Dado: sqlite3.SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION
 -- Dado: sqlite3.SQLITE_DBCONFIG_ENABLE_QPSG
 -- Dado: sqlite3.SQLITE_DBCONFIG_ENABLE_TRIGGER
 -- Dado: sqlite3.SQLITE_DBCONFIG_ENABLE_VIEW
 -- Dado: sqlite3.SQLITE_DBCONFIG_LEGACY_ALTER_TABLE
 -- Dado: sqlite3.SQLITE_DBCONFIG_LEGACY_FILE_FORMAT
 -- Dado: sqlite3.SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE
 -- Dado: sqlite3.SQLITE_DBCONFIG_RESET_DATABASE
 -- Dado: sqlite3.SQLITE_DBCONFIG_TRIGGER_EQP
 -- Dado: sqlite3.SQLITE_DBCONFIG_TRUSTED_SCHEMA
 -- Dado: sqlite3.SQLITE_DBCONFIG_WRITABLE_SCHEMA

     These constants are used for the *note Connection.setconfig(): 4ba.
     and *note getconfig(): 4b9. methods.

     The availability of these constants varies depending on the version
     of SQLite Python was compiled with.

     Adicionado na versão 3.12.

     Ver também
     ..........

     ‘https://www.sqlite.org/c3ref/c_dbconfig_defensive.html’

          SQLite docs: Database Connection Configuration Options

   ---------- Footnotes ----------

   (1) https://sqlite.org/threadsafe.html

   (2) https://peps.python.org/pep-0249/#threadsafety

   (3) https://sqlite.org/compile.html#threadsafe


File: python.info,  Node: Connection objects,  Next: Cursor objects,  Prev: Constantes do módulo,  Up: Referência

5.12.6.5 Connection objects
...........................

 -- Classe: sqlite3.Connection

     Each open SQLite database is represented by a ‘Connection’ object,
     which is created using *note sqlite3.connect(): 2a8.  Their main
     purpose is creating *note Cursor: 2a98. objects, and *note Controle
     de transações: 2a9a.

     Ver também
     ..........

        * *note How to use connection shortcut methods: 2acc.

        * *note How to use the connection context manager: 18f7.

     Alterado na versão 3.13: A *note ResourceWarning: 244. is emitted
     if *note close(): 246. is not called before a ‘Connection’ object
     is deleted.

     An SQLite database connection has the following attributes and
     methods:

      -- Método: cursor (factory=Cursor)

          Create and return a *note Cursor: 2a98. object.  The cursor
          method accepts a single optional parameter 'factory'.  If
          supplied, this must be a *note callable: 2aaf. returning an
          instance of *note Cursor: 2a98. or its subclasses.

      -- Método: blobopen (table, column, rowid, /, *, readonly=False,
               name='main')

          Open a *note Blob: 682. handle to an existing BLOB (Binary
          Large OBject).


          Parâmetros:

             * ‘table’ (*note str: 44c.) – The name of the table where
               the blob is located.

             * ‘column’ (*note str: 44c.) – The name of the column where
               the blob is located.

             * ‘rowid’ (*note int: 257.) – The row id where the blob is
               located.

             * ‘readonly’ (*note bool: 468.) – Set to ‘True’ if the blob
               should be opened without write permissions.  Defaults to
               ‘False’.

             * ‘name’ (*note str: 44c.) – The name of the database where
               the blob is located.  Defaults to ‘"main"’.


          Levanta: *note OperationalError: 19dd. – When trying to open a
          blob in a ‘WITHOUT ROWID’ table.


          Tipo de retorno: *note Blob: 682.

               Nota: The blob size cannot be changed using the *note
               Blob: 682. class.  Use the SQL function ‘zeroblob’ to
               create a blob with a fixed size.

          Adicionado na versão 3.11.

      -- Método: commit ()

          Commit any pending transaction to the database.  If *note
          autocommit: 4b6. is ‘True’, or there is no open transaction,
          this method does nothing.  If ‘autocommit’ is ‘False’, a new
          transaction is implicitly opened if a pending transaction was
          committed by this method.

      -- Método: rollback ()

          Roll back to the start of any pending transaction.  If *note
          autocommit: 4b6. is ‘True’, or there is no open transaction,
          this method does nothing.  If ‘autocommit’ is ‘False’, a new
          transaction is implicitly opened if a pending transaction was
          rolled back by this method.

      -- Método: close ()

          Close the database connection.  If *note autocommit: 4b6. is
          ‘False’, any pending transaction is implicitly rolled back.
          If ‘autocommit’ is ‘True’ or *note LEGACY_TRANSACTION_CONTROL:
          2aaa, no implicit transaction control is executed.  Make sure
          to *note commit(): 2a9b. before closing to avoid losing
          pending changes.

      -- Método: execute (sql, parameters=(), /)

          Create a new *note Cursor: 2a98. object and call *note
          execute(): 2d1. on it with the given 'sql' and 'parameters'.
          Return the new cursor object.

      -- Método: executemany (sql, parameters, /)

          Create a new *note Cursor: 2a98. object and call *note
          executemany(): 2d2. on it with the given 'sql' and
          'parameters'.  Return the new cursor object.

      -- Método: executescript (sql_script, /)

          Create a new *note Cursor: 2a98. object and call *note
          executescript(): 2ad1. on it with the given 'sql_script'.
          Return the new cursor object.

      -- Método: create_function (name, narg, func, *,
               deterministic=False)

          Create or remove a user-defined SQL function.


          Parâmetros:

             * ‘name’ (*note str: 44c.) – O nome da função SQL.

             * ‘narg’ (*note int: 257.) – The number of arguments the
               SQL function can accept.  If ‘-1’, it may take any number
               of arguments.

             * ‘func’ (*note callback: 2ad2. | None) – A *note callable:
               2aaf. that is called when the SQL function is invoked.
               The callable must return *note a type natively supported
               by SQLite: 2aa4.  Set to ‘None’ to remove an existing SQL
               function.

             * ‘deterministic’ (*note bool: 468.) – If ‘True’, the
               created SQL function is marked as deterministic(1), which
               allows SQLite to perform additional optimizations.

          Alterado na versão 3.8: Added the 'deterministic' parameter.

          Exemplo:

               >>> import hashlib
               >>> def md5sum(t):
               ...     return hashlib.md5(t).hexdigest()
               >>> con = sqlite3.connect(":memory:")
               >>> con.create_function("md5", 1, md5sum)
               >>> for row in con.execute("SELECT md5(?)", (b"foo",)):
               ...     print(row)
               ('acbd18db4cc2f85cedef654fccc4a4d8',)
               >>> con.close()

          Alterado na versão 3.13: Passing 'name', 'narg', and 'func' as
          keyword arguments is deprecated.  These parameters will become
          positional-only in Python 3.15.

      -- Método: create_aggregate (name, n_arg, aggregate_class)

          Create or remove a user-defined SQL aggregate function.


          Parâmetros:

             * ‘name’ (*note str: 44c.) – The name of the SQL aggregate
               function.

             * ‘n_arg’ (*note int: 257.) – The number of arguments the
               SQL aggregate function can accept.  If ‘-1’, it may take
               any number of arguments.

             * ‘aggregate_class’ (*note class: 1a8a. | None) – Uma
               classe deve implementar os seguintes métodos:

                  * ‘step()’: Add a row to the aggregate.

                  * ‘finalize()’: Return the final result of the
                    aggregate as *note a type natively supported by
                    SQLite: 2aa4.

               The number of arguments that the ‘step()’ method must
               accept is controlled by 'n_arg'.

               Set to ‘None’ to remove an existing SQL aggregate
               function.

          Exemplo:

               class MySum:
                   def __init__(self):
                       self.count = 0

                   def step(self, value):
                       self.count += value

                   def finalize(self):
                       return self.count

               con = sqlite3.connect(":memory:")
               con.create_aggregate("mysum", 1, MySum)
               cur = con.execute("CREATE TABLE test(i)")
               cur.execute("INSERT INTO test(i) VALUES(1)")
               cur.execute("INSERT INTO test(i) VALUES(2)")
               cur.execute("SELECT mysum(i) FROM test")
               print(cur.fetchone()[0])

               con.close()

          Alterado na versão 3.13: Passing 'name', 'n_arg', and
          'aggregate_class' as keyword arguments is deprecated.  These
          parameters will become positional-only in Python 3.15.

      -- Método: create_window_function (name, num_params,
               aggregate_class, /)

          Create or remove a user-defined aggregate window function.


          Parâmetros:

             * ‘name’ (*note str: 44c.) – The name of the SQL aggregate
               window function to create or remove.

             * ‘num_params’ (*note int: 257.) – The number of arguments
               the SQL aggregate window function can accept.  If ‘-1’,
               it may take any number of arguments.

             * ‘aggregate_class’ (*note class: 1a8a. | None) – Uma
               classe que deve implementar os seguintes métodos:

                  * ‘step()’: Add a row to the current window.

                  * ‘value()’: Return the current value of the
                    aggregate.

                  * ‘inverse()’: Remove a row from the current window.

                  * ‘finalize()’: Return the final result of the
                    aggregate as *note a type natively supported by
                    SQLite: 2aa4.

               The number of arguments that the ‘step()’ and ‘value()’
               methods must accept is controlled by 'num_params'.

               Set to ‘None’ to remove an existing SQL aggregate window
               function.


          Levanta: *note NotSupportedError: 2ad3. – If used with a
          version of SQLite older than 3.25.0, which does not support
          aggregate window functions.

          Adicionado na versão 3.11.

          Exemplo:

               # Example taken from https://www.sqlite.org/windowfunctions.html#udfwinfunc
               class WindowSumInt:
                   def __init__(self):
                       self.count = 0

                   def step(self, value):
                       """Add a row to the current window."""
                       self.count += value

                   def value(self):
                       """Return the current value of the aggregate."""
                       return self.count

                   def inverse(self, value):
                       """Remove a row from the current window."""
                       self.count -= value

                   def finalize(self):
                       """Return the final value of the aggregate.

                       Any clean-up actions should be placed here.
                       """
                       return self.count


               con = sqlite3.connect(":memory:")
               cur = con.execute("CREATE TABLE test(x, y)")
               values = [
                   ("a", 4),
                   ("b", 5),
                   ("c", 3),
                   ("d", 8),
                   ("e", 1),
               ]
               cur.executemany("INSERT INTO test VALUES(?, ?)", values)
               con.create_window_function("sumint", 1, WindowSumInt)
               cur.execute("""
                   SELECT x, sumint(y) OVER (
                       ORDER BY x ROWS BETWEEN 1 PRECEDING AND 1 FOLLOWING
                   ) AS sum_y
                   FROM test ORDER BY x
               """)
               print(cur.fetchall())
               con.close()

      -- Método: create_collation (name, callable, /)

          Create a collation named 'name' using the collating function
          'callable'.  'callable' is passed two *note string: 44c.
          arguments, and it should return an *note integer: 257.:

             * ‘1’ if the first is ordered higher than the second

             * ‘-1’ if the first is ordered lower than the second

             * ‘0’ if they are ordered equal

          The following example shows a reverse sorting collation:

               def collate_reverse(string1, string2):
                   if string1 == string2:
                       return 0
                   elif string1 < string2:
                       return 1
                   else:
                       return -1

               con = sqlite3.connect(":memory:")
               con.create_collation("reverse", collate_reverse)

               cur = con.execute("CREATE TABLE test(x)")
               cur.executemany("INSERT INTO test(x) VALUES(?)", [("a",), ("b",)])
               cur.execute("SELECT x FROM test ORDER BY x COLLATE reverse")
               for row in cur:
                   print(row)
               con.close()

          Remove a collation function by setting 'callable' to ‘None’.

          Alterado na versão 3.11: The collation name can contain any
          Unicode character.  Earlier, only ASCII characters were
          allowed.

      -- Método: interrupt ()

          Call this method from a different thread to abort any queries
          that might be executing on the connection.  Aborted queries
          will raise an *note OperationalError: 19dd.

      -- Método: set_authorizer (authorizer_callback)

          Register *note callable: 2aaf. 'authorizer_callback' to be
          invoked for each attempt to access a column of a table in the
          database.  The callback should return one of *note SQLITE_OK:
          2ab2, *note SQLITE_DENY: 2ab3, or *note SQLITE_IGNORE: 2ab4.
          to signal how access to the column should be handled by the
          underlying SQLite library.

          The first argument to the callback signifies what kind of
          operation is to be authorized.  The second and third argument
          will be arguments or ‘None’ depending on the first argument.
          The 4th argument is the name of the database (“main”, “temp”,
          etc.)  if applicable.  The 5th argument is the name of the
          inner-most trigger or view that is responsible for the access
          attempt or ‘None’ if this access attempt is directly from
          input SQL code.

          Please consult the SQLite documentation about the possible
          values for the first argument and the meaning of the second
          and third argument depending on the first one.  All necessary
          constants are available in the ‘sqlite3’ module.

          Passing ‘None’ as 'authorizer_callback' will disable the
          authorizer.

          Alterado na versão 3.11: Added support for disabling the
          authorizer using ‘None’.

          Alterado na versão 3.13: Passing 'authorizer_callback' as a
          keyword argument is deprecated.  The parameter will become
          positional-only in Python 3.15.

      -- Método: set_progress_handler (progress_handler, n)

          Register *note callable: 2aaf. 'progress_handler' to be
          invoked for every 'n' instructions of the SQLite virtual
          machine.  This is useful if you want to get called from SQLite
          during long-running operations, for example to update a GUI.

          If you want to clear any previously installed progress
          handler, call the method with ‘None’ for 'progress_handler'.

          Returning a non-zero value from the handler function will
          terminate the currently executing query and cause it to raise
          a *note DatabaseError: 2ad5. exception.

          Alterado na versão 3.13: Passing 'progress_handler' as a
          keyword argument is deprecated.  The parameter will become
          positional-only in Python 3.15.

      -- Método: set_trace_callback (trace_callback)

          Register *note callable: 2aaf. 'trace_callback' to be invoked
          for each SQL statement that is actually executed by the SQLite
          backend.

          The only argument passed to the callback is the statement (as
          *note str: 44c.) that is being executed.  The return value of
          the callback is ignored.  Note that the backend does not only
          run statements passed to the *note Cursor.execute(): 2d1.
          methods.  Other sources include the *note transaction
          management: 2a9a. of the ‘sqlite3’ module and the execution of
          triggers defined in the current database.

          Passing ‘None’ as 'trace_callback' will disable the trace
          callback.

               Nota: Exceptions raised in the trace callback are not
               propagated.  As a development and debugging aid, use
               *note enable_callback_tracebacks(): 2aad. to enable
               printing tracebacks from exceptions raised in the trace
               callback.

          Adicionado na versão 3.3.

          Alterado na versão 3.13: Passing 'trace_callback' as a keyword
          argument is deprecated.  The parameter will become
          positional-only in Python 3.15.

      -- Método: enable_load_extension (enabled, /)

          Enable the SQLite engine to load SQLite extensions from shared
          libraries if 'enabled' is ‘True’; else, disallow loading
          SQLite extensions.  SQLite extensions can define new
          functions, aggregates or whole new virtual table
          implementations.  One well-known extension is the
          fulltext-search extension distributed with SQLite.

               Nota: The ‘sqlite3’ module is not built with loadable
               extension support by default, because some platforms
               (notably macOS) have SQLite libraries which are compiled
               without this feature.  To get loadable extension support,
               you must pass the *note
               -enable-loadable-sqlite-extensions: 1ef4. option to
               ‘configure’.

          Levanta um *note evento de auditoria: 19fa.
          ‘sqlite3.enable_load_extension’ com os argumentos
          ‘connection’, ‘enabled’.

          Adicionado na versão 3.2.

          Alterado na versão 3.10: Added the
          ‘sqlite3.enable_load_extension’ auditing event.

               con.enable_load_extension(True)

               # Load the fulltext search extension
               con.execute("select load_extension('./fts3.so')")

               # alternatively you can load the extension using an API call:
               # con.load_extension("./fts3.so")

               # disable extension loading again
               con.enable_load_extension(False)

               # example from SQLite wiki
               con.execute("CREATE VIRTUAL TABLE recipe USING fts3(name, ingredients)")
               con.executescript("""
                   INSERT INTO recipe (name, ingredients) VALUES('broccoli stew', 'broccoli peppers cheese tomatoes');
                   INSERT INTO recipe (name, ingredients) VALUES('pumpkin stew', 'pumpkin onions garlic celery');
                   INSERT INTO recipe (name, ingredients) VALUES('broccoli pie', 'broccoli cheese onions flour');
                   INSERT INTO recipe (name, ingredients) VALUES('pumpkin pie', 'pumpkin sugar flour butter');
                   """)
               for row in con.execute("SELECT rowid, name, ingredients FROM recipe WHERE name MATCH 'pie'"):
                   print(row)

      -- Método: load_extension (path, /, *, entrypoint=None)

          Load an SQLite extension from a shared library.  Enable
          extension loading with *note enable_load_extension(): 841.
          before calling this method.


          Parâmetros:

             * ‘path’ (*note str: 44c.) – The path to the SQLite
               extension.

             * ‘entrypoint’ (*note str: 44c.‘ | ’‘None’) – Entry point
               name.  If ‘None’ (the default), SQLite will come up with
               an entry point name of its own; see the SQLite docs
               Loading an Extension(2) for details.

          Levanta um *note evento de auditoria: 19fa.
          ‘sqlite3.load_extension’ com os argumentos ‘connection’,
          ‘path’.

          Adicionado na versão 3.2.

          Alterado na versão 3.10: Added the ‘sqlite3.load_extension’
          auditing event.

          Alterado na versão 3.12: Added the 'entrypoint' parameter.

      -- Método: iterdump (*, filter=None)

          Return an *note iterator: 1ac. to dump the database as SQL
          source code.  Useful when saving an in-memory database for
          later restoration.  Similar to the ‘.dump’ command in the
          ‘sqlite3’ shell.


          Parâmetros: ‘filter’ (*note str: 44c.‘ | ’‘None’) – An
          optional ‘LIKE’ pattern for database objects to dump, e.g.
          ‘prefix_%’.  If ‘None’ (the default), all database objects
          will be included.

          Exemplo:

               # Convert file example.db to SQL dump file dump.sql
               con = sqlite3.connect('example.db')
               with open('dump.sql', 'w') as f:
                   for line in con.iterdump():
                       f.write('%s\n' % line)
               con.close()

          Ver também
          ..........

          *note How to handle non-UTF-8 text encodings: 2ad6.

          Alterado na versão 3.13: Adicionado o parâmetro 'filter'.

      -- Método: backup (target, *, pages=-1, progress=None,
               name='main', sleep=0.250)

          Create a backup of an SQLite database.

          Works even if the database is being accessed by other clients
          or concurrently by the same connection.


          Parâmetros:

             * ‘target’ (*note Connection: 245.) – The database
               connection to save the backup to.

             * ‘pages’ (*note int: 257.) – The number of pages to copy
               at a time.  If equal to or less than ‘0’, the entire
               database is copied in a single step.  Defaults to ‘-1’.

             * ‘progress’ (*note callback: 2ad2. | None) – If set to a
               *note callable: 2aaf, it is invoked with three integer
               arguments for every backup iteration: the 'status' of the
               last iteration, the 'remaining' number of pages still to
               be copied, and the 'total' number of pages.  Defaults to
               ‘None’.

             * ‘name’ (*note str: 44c.) – The name of the database to
               back up.  Either ‘"main"’ (the default) for the main
               database, ‘"temp"’ for the temporary database, or the
               name of a custom database as attached using the ‘ATTACH
               DATABASE’ SQL statement.

             * ‘sleep’ (*note float: 2f7.) – The number of seconds to
               sleep between successive attempts to back up remaining
               pages.

          Example 1, copy an existing database into another:

               def progress(status, remaining, total):
                   print(f'Copied {total-remaining} of {total} pages...')

               src = sqlite3.connect('example.db')
               dst = sqlite3.connect('backup.db')
               with dst:
                   src.backup(dst, pages=1, progress=progress)
               dst.close()
               src.close()

          Example 2, copy an existing database into a transient copy:

               src = sqlite3.connect('example.db')
               dst = sqlite3.connect(':memory:')
               src.backup(dst)
               dst.close()
               src.close()

          Adicionado na versão 3.7.

          Ver também
          ..........

          *note How to handle non-UTF-8 text encodings: 2ad6.

      -- Método: getlimit (category, /)

          Get a connection runtime limit.


          Parâmetros: ‘category’ (*note int: 257.) – The SQLite limit
          category(3) to be queried.


          Tipo de retorno: *note int: 257.


          Levanta: *note ProgrammingError: 4f2. – If 'category' is not
          recognised by the underlying SQLite library.

          Example, query the maximum length of an SQL statement for
          *note Connection: 245. ‘con’ (the default is 1000000000):

               >>> con.getlimit(sqlite3.SQLITE_LIMIT_SQL_LENGTH)
               1000000000

          Adicionado na versão 3.11.

      -- Método: setlimit (category, limit, /)

          Set a connection runtime limit.  Attempts to increase a limit
          above its hard upper bound are silently truncated to the hard
          upper bound.  Regardless of whether or not the limit was
          changed, the prior value of the limit is returned.


          Parâmetros:

             * ‘category’ (*note int: 257.) – The SQLite limit
               category(4) to be set.

             * ‘limit’ (*note int: 257.) – The value of the new limit.
               If negative, the current limit is unchanged.


          Tipo de retorno: *note int: 257.


          Levanta: *note ProgrammingError: 4f2. – If 'category' is not
          recognised by the underlying SQLite library.

          Example, limit the number of attached databases to 1 for *note
          Connection: 245. ‘con’ (the default limit is 10):

               >>> con.setlimit(sqlite3.SQLITE_LIMIT_ATTACHED, 1)
               10
               >>> con.getlimit(sqlite3.SQLITE_LIMIT_ATTACHED)
               1

          Adicionado na versão 3.11.

      -- Método: getconfig (op, /)

          Query a boolean connection configuration option.


          Parâmetros: ‘op’ (*note int: 257.) – A *note SQLITE_DBCONFIG
          code: 2ab9.


          Tipo de retorno: *note bool: 468.

          Adicionado na versão 3.12.

      -- Método: setconfig (op, enable=True, /)

          Set a boolean connection configuration option.


          Parâmetros:

             * ‘op’ (*note int: 257.) – A *note SQLITE_DBCONFIG code:
               2ab9.

             * ‘enable’ (*note bool: 468.) – ‘True’ if the configuration
               option should be enabled (default); ‘False’ if it should
               be disabled.

          Adicionado na versão 3.12.

      -- Método: serialize (*, name='main')

          Serialize a database into a *note bytes: 1c2. object.  For an
          ordinary on-disk database file, the serialization is just a
          copy of the disk file.  For an in-memory database or a “temp”
          database, the serialization is the same sequence of bytes
          which would be written to disk if that database were backed up
          to disk.


          Parâmetros: ‘name’ (*note str: 44c.) – The database name to be
          serialized.  Defaults to ‘"main"’.


          Tipo de retorno: *note bytes: 1c2.

               Nota: This method is only available if the underlying
               SQLite library has the serialize API.

          Adicionado na versão 3.11.

      -- Método: deserialize (data, /, *, name='main')

          Deserialize a *note serialized: 67e. database into a *note
          Connection: 245.  This method causes the database connection
          to disconnect from database 'name', and reopen 'name' as an
          in-memory database based on the serialization contained in
          'data'.


          Parâmetros:

             * ‘data’ (*note bytes: 1c2.) – A serialized database.

             * ‘name’ (*note str: 44c.) – The database name to
               deserialize into.  Defaults to ‘"main"’.


          Levanta:

             * *note OperationalError: 19dd. – If the database
               connection is currently involved in a read transaction or
               a backup operation.

             * *note DatabaseError: 2ad5. – If 'data' does not contain a
               valid SQLite database.

             * *note OverflowError: 885. – If *note len(data): 62e. is
               larger than ‘2**63 - 1’.

               Nota: This method is only available if the underlying
               SQLite library has the deserialize API.

          Adicionado na versão 3.11.

      -- Atributo: autocommit

          This attribute controls PEP 249(5)-compliant transaction
          behaviour.  ‘autocommit’ has three allowed values:

             * ‘False’: Select PEP 249(6)-compliant transaction
               behaviour, implying that ‘sqlite3’ ensures a transaction
               is always open.  Use *note commit(): 2a9b. and *note
               rollback(): 2acd. to close transactions.

               This is the recommended value of ‘autocommit’.

             * ‘True’: Use SQLite’s autocommit mode(7).  *note commit():
               2a9b. and *note rollback(): 2acd. have no effect in this
               mode.

             * *note LEGACY_TRANSACTION_CONTROL: 2aaa.: Pre-Python 3.12
               (non- PEP 249(8)-compliant) transaction control.  See
               *note isolation_level: 2aa8. for more details.

               This is currently the default value of ‘autocommit’.

          Changing ‘autocommit’ to ‘False’ will open a new transaction,
          and changing it to ‘True’ will commit any pending transaction.

          See *note Controle de transações através do atributo
          autocommit: 4b7. for more details.

               Nota: The *note isolation_level: 2aa8. attribute has no
               effect unless *note autocommit: 4b6. is *note
               LEGACY_TRANSACTION_CONTROL: 2aaa.

          Adicionado na versão 3.12.

      -- Atributo: in_transaction

          This read-only attribute corresponds to the low-level SQLite
          autocommit mode(9).

          ‘True’ if a transaction is active (there are uncommitted
          changes), ‘False’ otherwise.

          Adicionado na versão 3.2.

      -- Atributo: isolation_level

          Controls the *note legacy transaction handling mode: 2aa9. of
          ‘sqlite3’.  If set to ‘None’, transactions are never
          implicitly opened.  If set to one of ‘"DEFERRED"’,
          ‘"IMMEDIATE"’, or ‘"EXCLUSIVE"’, corresponding to the
          underlying SQLite transaction behaviour(10), *note implicit
          transaction management: 2aa9. is performed.

          If not overridden by the 'isolation_level' parameter of *note
          connect(): 2a8, the default is ‘""’, which is an alias for
          ‘"DEFERRED"’.

               Nota: Using *note autocommit: 4b6. to control transaction
               handling is recommended over using ‘isolation_level’.
               ‘isolation_level’ has no effect unless *note autocommit:
               4b6. is set to *note LEGACY_TRANSACTION_CONTROL: 2aaa.
               (the default).

      -- Atributo: row_factory

          The initial *note row_factory: 2ad8. for *note Cursor: 2a98.
          objects created from this connection.  Assigning to this
          attribute does not affect the ‘row_factory’ of existing
          cursors belonging to this connection, only new ones.  Is
          ‘None’ by default, meaning each row is returned as a *note
          tuple: 370.

          Consulte *note How to create and use row factories: 2a9f. para
          mais detalhes.

      -- Atributo: text_factory

          A *note callable: 2aaf. that accepts a *note bytes: 1c2.
          parameter and returns a text representation of it.  The
          callable is invoked for SQLite values with the ‘TEXT’ data
          type.  By default, this attribute is set to *note str: 44c.

          Consulte *note How to handle non-UTF-8 text encodings: 2ad6.
          para mais detalhes.

      -- Atributo: total_changes

          Return the total number of database rows that have been
          modified, inserted, or deleted since the database connection
          was opened.

   ---------- Footnotes ----------

   (1) https://sqlite.org/deterministic.html

   (2) https://www.sqlite.org/loadext.html#loading_an_extension

   (3) https://www.sqlite.org/c3ref/c_limit_attached.html

   (4) https://www.sqlite.org/c3ref/c_limit_attached.html

   (5) https://peps.python.org/pep-0249/

   (6) https://peps.python.org/pep-0249/

   (7) 
https://www.sqlite.org/lang_transaction.html#implicit_versus_explicit_transactions

   (8) https://peps.python.org/pep-0249/

   (9) 
https://www.sqlite.org/lang_transaction.html#implicit_versus_explicit_transactions

   (10) 
https://www.sqlite.org/lang_transaction.html#deferred_immediate_and_exclusive_transactions


File: python.info,  Node: Cursor objects,  Next: Row objects,  Prev: Connection objects,  Up: Referência

5.12.6.6 Cursor objects
.......................

     A ‘Cursor’ object represents a database cursor(1) which is used to
     execute SQL statements, and manage the context of a fetch
     operation.  Cursors are created using *note Connection.cursor():
     2a97, or by using any of the *note connection shortcut methods:
     2acc.

     Cursor objects are *note iterators: 1ac, meaning that if you *note
     execute(): 2d1. a ‘SELECT’ query, you can simply iterate over the
     cursor to fetch the resulting rows:

          for row in cur.execute("SELECT t FROM data"):
              print(row)

 -- Classe: sqlite3.Cursor

     A *note Cursor: 2a98. instance has the following attributes and
     methods.

      -- Método: execute (sql, parameters=(), /)

          Execute a single SQL statement, optionally binding Python
          values using *note placeholders: 2d3.


          Parâmetros:

             * ‘sql’ (*note str: 44c.) – A single SQL statement.

             * ‘parameters’ (*note dict: 256. | *note sequence: 4f1.) –
               Python values to bind to placeholders in 'sql'.  A ‘dict’
               if named placeholders are used.  A sequence if unnamed
               placeholders are used.  See *note How to use placeholders
               to bind values in SQL queries: 2d3.


          Levanta: *note ProgrammingError: 4f2. – If 'sql' contains more
          than one SQL statement.

          If *note autocommit: 4b6. is *note LEGACY_TRANSACTION_CONTROL:
          2aaa, *note isolation_level: 2aa8. is not ‘None’, 'sql' is an
          ‘INSERT’, ‘UPDATE’, ‘DELETE’, or ‘REPLACE’ statement, and
          there is no open transaction, a transaction is implicitly
          opened before executing 'sql'.

          Descontinuado desde a versão 3.12, será removido na versão
          3.14: *note DeprecationWarning: 1a5. is emitted if *note named
          placeholders: 2d3. are used and 'parameters' is a sequence
          instead of a *note dict: 256.  Starting with Python 3.14,
          *note ProgrammingError: 4f2. will be raised instead.

          Use *note executescript(): 2ad1. to execute multiple SQL
          statements.

      -- Método: executemany (sql, parameters, /)

          For every item in 'parameters', repeatedly execute the *note
          parameterized: 2d3. DML (Data Manipulation Language) SQL
          statement 'sql'.

          Uses the same implicit transaction handling as *note
          execute(): 2d1.


          Parâmetros:

             * ‘sql’ (*note str: 44c.) – A single SQL DML statement.

             * ‘parameters’ (*note iterable: 1268.) – An iterable of
               parameters to bind with the placeholders in 'sql'.  See
               *note How to use placeholders to bind values in SQL
               queries: 2d3.


          Levanta: *note ProgrammingError: 4f2. – If 'sql' contains more
          than one SQL statement, or is not a DML statement.

          Exemplo:

               rows = [
                   ("row1",),
                   ("row2",),
               ]
               # cur is an sqlite3.Cursor object
               cur.executemany("INSERT INTO data VALUES(?)", rows)

               Nota: Any resulting rows are discarded, including DML
               statements with RETURNING clauses(2).

          Descontinuado desde a versão 3.12, será removido na versão
          3.14: *note DeprecationWarning: 1a5. is emitted if *note named
          placeholders: 2d3. are used and the items in 'parameters' are
          sequences instead of *note dict: 256.s.  Starting with Python
          3.14, *note ProgrammingError: 4f2. will be raised instead.

      -- Método: executescript (sql_script, /)

          Execute the SQL statements in 'sql_script'.  If the *note
          autocommit: 4b6. is *note LEGACY_TRANSACTION_CONTROL: 2aaa.
          and there is a pending transaction, an implicit ‘COMMIT’
          statement is executed first.  No other implicit transaction
          control is performed; any transaction control must be added to
          'sql_script'.

          'sql_script' must be a *note string: 44c.

          Exemplo:

               # cur is an sqlite3.Cursor object
               cur.executescript("""
                   BEGIN;
                   CREATE TABLE person(firstname, lastname, age);
                   CREATE TABLE book(title, author, published);
                   CREATE TABLE publisher(name, address);
                   COMMIT;
               """)

      -- Método: fetchone ()

          If *note row_factory: 2ad8. is ‘None’, return the next row
          query result set as a *note tuple: 370.  Else, pass it to the
          row factory and return its result.  Return ‘None’ if no more
          data is available.

      -- Método: fetchmany (size=cursor.arraysize)

          Return the next set of rows of a query result as a *note list:
          611.  Return an empty list if no more rows are available.

          The number of rows to fetch per call is specified by the
          'size' parameter.  If 'size' is not given, *note arraysize:
          15f1. determines the number of rows to be fetched.  If fewer
          than 'size' rows are available, as many rows as are available
          are returned.

          Note there are performance considerations involved with the
          'size' parameter.  For optimal performance, it is usually best
          to use the arraysize attribute.  If the 'size' parameter is
          used, then it is best for it to retain the same value from one
          *note fetchmany(): 15f0. call to the next.

          Alterado na versão 3.13.8: Negative 'size' values are rejected
          by raising *note ValueError: 202.

      -- Método: fetchall ()

          Return all (remaining) rows of a query result as a *note list:
          611.  Return an empty list if no rows are available.  Note
          that the *note arraysize: 15f1. attribute can affect the
          performance of this operation.

      -- Método: close ()

          Close the cursor now (rather than whenever ‘__del__’ is
          called).

          The cursor will be unusable from this point forward; a *note
          ProgrammingError: 4f2. exception will be raised if any
          operation is attempted with the cursor.

      -- Método: setinputsizes (sizes, /)

          Required by the DB-API. Does nothing in ‘sqlite3’.

      -- Método: setoutputsize (size, column=None, /)

          Required by the DB-API. Does nothing in ‘sqlite3’.

      -- Atributo: arraysize

          Read/write attribute that controls the number of rows returned
          by *note fetchmany(): 15f0.  The default value is 1 which
          means a single row would be fetched per call.

          Alterado na versão 3.13.8: Negative values are rejected by
          raising *note ValueError: 202.

      -- Atributo: connection

          Read-only attribute that provides the SQLite database *note
          Connection: 245. belonging to the cursor.  A *note Cursor:
          2a98. object created by calling *note con.cursor(): 2a97. will
          have a *note connection: 2ae0. attribute that refers to 'con':

               >>> con = sqlite3.connect(":memory:")
               >>> cur = con.cursor()
               >>> cur.connection == con
               True
               >>> con.close()

      -- Atributo: description

          Read-only attribute that provides the column names of the last
          query.  To remain compatible with the Python DB API, it
          returns a 7-tuple for each column where the last six items of
          each tuple are ‘None’.

          It is set for ‘SELECT’ statements without any matching rows as
          well.

      -- Atributo: lastrowid

          Read-only attribute that provides the row id of the last
          inserted row.  It is only updated after successful ‘INSERT’ or
          ‘REPLACE’ statements using the *note execute(): 2d1. method.
          For other statements, after *note executemany(): 2d2. or *note
          executescript(): 2ad1, or if the insertion failed, the value
          of ‘lastrowid’ is left unchanged.  The initial value of
          ‘lastrowid’ is ‘None’.

               Nota: Inserts into ‘WITHOUT ROWID’ tables are not
               recorded.

          Alterado na versão 3.6: Added support for the ‘REPLACE’
          statement.

      -- Atributo: rowcount

          Read-only attribute that provides the number of modified rows
          for ‘INSERT’, ‘UPDATE’, ‘DELETE’, and ‘REPLACE’ statements; is
          ‘-1’ for other statements, including CTE (Common Table
          Expression) queries.  It is only updated by the *note
          execute(): 2d1. and *note executemany(): 2d2. methods, after
          the statement has run to completion.  This means that any
          resulting rows must be fetched in order for ‘rowcount’ to be
          updated.

      -- Atributo: row_factory

          Control how a row fetched from this ‘Cursor’ is represented.
          If ‘None’, a row is represented as a *note tuple: 370.  Can be
          set to the included *note sqlite3.Row: ea0.; or a *note
          callable: 2aaf. that accepts two arguments, a *note Cursor:
          2a98. object and the ‘tuple’ of row values, and returns a
          custom object representing an SQLite row.

          Defaults to what *note Connection.row_factory: 171a. was set
          to when the ‘Cursor’ was created.  Assigning to this attribute
          does not affect *note Connection.row_factory: 171a. of the
          parent connection.

          Consulte *note How to create and use row factories: 2a9f. para
          mais detalhes.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Cursor_(databases)

   (2) https://www.sqlite.org/lang_returning.html


File: python.info,  Node: Row objects,  Next: Blob objects,  Prev: Cursor objects,  Up: Referência

5.12.6.7 Row objects
....................

 -- Classe: sqlite3.Row

     A ‘Row’ instance serves as a highly optimized *note row_factory:
     171a. for *note Connection: 245. objects.  It supports iteration,
     equality testing, *note len(): 62e, and *note mapping: 11fb. access
     by column name and index.

     Two ‘Row’ objects compare equal if they have identical column names
     and values.

     Consulte *note How to create and use row factories: 2a9f. para mais
     detalhes.

      -- Método: keys ()

          Return a *note list: 611. of column names as *note strings:
          44c.  Immediately after a query, it is the first member of
          each tuple in *note Cursor.description: 1649.

     Alterado na versão 3.5: Added support of slicing.


File: python.info,  Node: Blob objects,  Next: PrepareProtocol objects,  Prev: Row objects,  Up: Referência

5.12.6.8 Blob objects
.....................

 -- Classe: sqlite3.Blob

     Adicionado na versão 3.11.

     A *note Blob: 682. instance is a *note file-like object: 15cf. that
     can read and write data in an SQLite BLOB.  Call *note len(blob):
     62e. to get the size (number of bytes) of the blob.  Use indices
     and *note slices: 2313. for direct access to the blob data.

     Use the *note Blob: 682. as a *note context manager: 5d4. to ensure
     that the blob handle is closed after use.

          con = sqlite3.connect(":memory:")
          con.execute("CREATE TABLE test(blob_col blob)")
          con.execute("INSERT INTO test(blob_col) VALUES(zeroblob(13))")

          # Write to our blob, using two write operations:
          with con.blobopen("test", "blob_col", 1) as blob:
              blob.write(b"hello, ")
              blob.write(b"world.")
              # Modify the first and last bytes of our blob
              blob[0] = ord("H")
              blob[-1] = ord("!")

          # Read the contents of our blob
          with con.blobopen("test", "blob_col", 1) as blob:
              greeting = blob.read()

          print(greeting)  # outputs "b'Hello, world!'"
          con.close()

      -- Método: close ()

          Close the blob.

          The blob will be unusable from this point onward.  An *note
          Error: 19ae. (or subclass) exception will be raised if any
          further operation is attempted with the blob.

      -- Método: read (length=-1, /)

          Read 'length' bytes of data from the blob at the current
          offset position.  If the end of the blob is reached, the data
          up to EOF (End of File) will be returned.  When 'length' is
          not specified, or is negative, *note read(): 2ae8. will read
          until the end of the blob.

      -- Método: write (data, /)

          Write 'data' to the blob at the current offset.  This function
          cannot change the blob length.  Writing beyond the end of the
          blob will raise *note ValueError: 202.

      -- Método: tell ()

          Return the current access position of the blob.

      -- Método: seek (offset, origin=os.SEEK_SET, /)

          Set the current access position of the blob to 'offset'.  The
          'origin' argument defaults to *note os.SEEK_SET: 12cf.
          (absolute blob positioning).  Other values for 'origin' are
          *note os.SEEK_CUR: 12d0. (seek relative to the current
          position) and *note os.SEEK_END: 12d1. (seek relative to the
          blob’s end).


File: python.info,  Node: PrepareProtocol objects,  Next: Exceções<7>,  Prev: Blob objects,  Up: Referência

5.12.6.9 PrepareProtocol objects
................................

 -- Classe: sqlite3.PrepareProtocol

     The PrepareProtocol type’s single purpose is to act as a PEP 246(1)
     style adaption protocol for objects that can *note adapt
     themselves: 2aed. to *note native SQLite types: 2aa4.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0246/


File: python.info,  Node: Exceções<7>,  Next: SQLite and Python types,  Prev: PrepareProtocol objects,  Up: Referência

5.12.6.10 Exceções
..................

The exception hierarchy is defined by the DB-API 2.0 ( PEP 249(1)).

 -- Exceção: sqlite3.Warning

     This exception is not currently raised by the ‘sqlite3’ module, but
     may be raised by applications using ‘sqlite3’, for example if a
     user-defined function truncates data while inserting.  ‘Warning’ is
     a subclass of *note Exception: 9e2.

 -- Exceção: sqlite3.Error

     The base class of the other exceptions in this module.  Use this to
     catch all errors with one single *note except: 18b. statement.
     ‘Error’ is a subclass of *note Exception: 9e2.

     If the exception originated from within the SQLite library, the
     following two attributes are added to the exception:

      -- Atributo: sqlite_errorcode

          The numeric error code from the SQLite API(2)

          Adicionado na versão 3.11.

      -- Atributo: sqlite_errorname

          The symbolic name of the numeric error code from the SQLite
          API(3)

          Adicionado na versão 3.11.

 -- Exceção: sqlite3.InterfaceError

     Exception raised for misuse of the low-level SQLite C API. In other
     words, if this exception is raised, it probably indicates a bug in
     the ‘sqlite3’ module.  ‘InterfaceError’ is a subclass of *note
     Error: 19ae.

 -- Exceção: sqlite3.DatabaseError

     Exception raised for errors that are related to the database.  This
     serves as the base exception for several types of database errors.
     It is only raised implicitly through the specialised subclasses.
     ‘DatabaseError’ is a subclass of *note Error: 19ae.

 -- Exceção: sqlite3.DataError

     Exception raised for errors caused by problems with the processed
     data, like numeric values out of range, and strings which are too
     long.  ‘DataError’ is a subclass of *note DatabaseError: 2ad5.

 -- Exceção: sqlite3.OperationalError

     Exception raised for errors that are related to the database’s
     operation, and not necessarily under the control of the programmer.
     For example, the database path is not found, or a transaction could
     not be processed.  ‘OperationalError’ is a subclass of *note
     DatabaseError: 2ad5.

 -- Exceção: sqlite3.IntegrityError

     Exception raised when the relational integrity of the database is
     affected, e.g.  a foreign key check fails.  It is a subclass of
     *note DatabaseError: 2ad5.

 -- Exceção: sqlite3.InternalError

     Exception raised when SQLite encounters an internal error.  If this
     is raised, it may indicate that there is a problem with the runtime
     SQLite library.  ‘InternalError’ is a subclass of *note
     DatabaseError: 2ad5.

 -- Exceção: sqlite3.ProgrammingError

     Exception raised for ‘sqlite3’ API programming errors, for example
     supplying the wrong number of bindings to a query, or trying to
     operate on a closed *note Connection: 245.  ‘ProgrammingError’ is a
     subclass of *note DatabaseError: 2ad5.

 -- Exceção: sqlite3.NotSupportedError

     Exception raised in case a method or database API is not supported
     by the underlying SQLite library.  For example, setting
     'deterministic' to ‘True’ in *note create_function(): 2a9, if the
     underlying SQLite library does not support deterministic functions.
     ‘NotSupportedError’ is a subclass of *note DatabaseError: 2ad5.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0249/

   (2) https://sqlite.org/rescode.html

   (3) https://sqlite.org/rescode.html


File: python.info,  Node: SQLite and Python types,  Next: Default adapters and converters deprecated,  Prev: Exceções<7>,  Up: Referência

5.12.6.11 SQLite and Python types
.................................

SQLite natively supports the following types: ‘NULL’, ‘INTEGER’, ‘REAL’,
‘TEXT’, ‘BLOB’.

The following Python types can thus be sent to SQLite without any
problem:

Tipo em Python                      Tipo em SQLite
                                    
------------------------------------------------------
                                    
‘None’                              ‘NULL’
                                    
                                    
*note int: 257.                     ‘INTEGER’
                                    
                                    
*note float: 2f7.                   ‘REAL’
                                    
                                    
*note str: 44c.                     ‘TEXT’
                                    
                                    
*note bytes: 1c2.                   ‘BLOB’
                                    

This is how SQLite types are converted to Python types by default:

Tipo em SQLite    Tipo em Python
                  
---------------------------------------------------------------------
                  
‘NULL’            ‘None’
                  
                  
‘INTEGER’         *note int: 257.
                  
                  
‘REAL’            *note float: 2f7.
                  
                  
‘TEXT’            depends on *note text_factory: 2ad9,
                  *note str: 44c. by default
                  
                  
‘BLOB’            *note bytes: 1c2.
                  

The type system of the ‘sqlite3’ module is extensible in two ways: you
can store additional Python types in an SQLite database via *note object
adapters: 2a9d, and you can let the ‘sqlite3’ module convert SQLite
types to Python types via *note converters: 2a9e.


File: python.info,  Node: Default adapters and converters deprecated,  Next: Interface de linha de comando,  Prev: SQLite and Python types,  Up: Referência

5.12.6.12 Default adapters and converters (deprecated)
......................................................

     Nota: The default adapters and converters are deprecated as of
     Python 3.12.  Instead, use the *note Adapter and converter recipes:
     4f0. and tailor them to your needs.

The deprecated default adapters and converters consist of:

   * An adapter for *note datetime.date: 1cd. objects to *note strings:
     44c. in ISO 8601(1) format.

   * An adapter for *note datetime.datetime: 1cc. objects to strings in
     ISO 8601 format.

   * A converter for *note declared: 2a9e. “date” types to *note
     datetime.date: 1cd. objects.

   * A converter for declared “timestamp” types to *note
     datetime.datetime: 1cc. objects.  Fractional parts will be
     truncated to 6 digits (microsecond precision).

     Nota: The default “timestamp” converter ignores UTC offsets in the
     database and always returns a naive *note datetime.datetime: 1cc.
     object.  To preserve UTC offsets in timestamps, either leave
     converters disabled, or register an offset-aware converter with
     *note register_converter(): 2aa5.

Descontinuado desde a versão 3.12.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/ISO_8601


File: python.info,  Node: Interface de linha de comando,  Prev: Default adapters and converters deprecated,  Up: Referência

5.12.6.13 Interface de linha de comando
.......................................

The ‘sqlite3’ module can be invoked as a script, using the interpreter’s
*note -m: 5e1. switch, in order to provide a simple SQLite shell.  The
argument signature is as follows:

     python -m sqlite3 [-h] [-v] [filename] [sql]

Type ‘.quit’ or CTRL-D to exit the shell.

 -- Option: -h, --help

     Print CLI help.

 -- Option: -v, --version

     Print underlying SQLite library version.

Adicionado na versão 3.12.


File: python.info,  Node: Guias de como fazer,  Next: Explicação,  Prev: Referência,  Up: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite

5.12.6.14 Guias de como fazer
.............................

* Menu:

* How to use placeholders to bind values in SQL queries::
* How to adapt custom Python types to SQLite values::
* How to convert SQLite values to custom Python types::
* Adapter and converter recipes::
* How to use connection shortcut methods::
* How to use the connection context manager::
* How to work with SQLite URIs::
* How to create and use row factories::
* How to handle non-UTF-8 text encodings::


File: python.info,  Node: How to use placeholders to bind values in SQL queries,  Next: How to adapt custom Python types to SQLite values,  Up: Guias de como fazer

5.12.6.15 How to use placeholders to bind values in SQL queries
...............................................................

SQL operations usually need to use values from Python variables.
However, beware of using Python’s string operations to assemble queries,
as they are vulnerable to SQL injection attacks(1).  For example, an
attacker can simply close the single quote and inject ‘OR TRUE’ to
select all rows:

     >>> # Never do this -- insecure!
     >>> symbol = input()
     ' OR TRUE; --
     >>> sql = "SELECT * FROM stocks WHERE symbol = '%s'" % symbol
     >>> print(sql)
     SELECT * FROM stocks WHERE symbol = '' OR TRUE; --'
     >>> cur.execute(sql)

Instead, use the DB-API’s parameter substitution.  To insert a variable
into a query string, use a placeholder in the string, and substitute the
actual values into the query by providing them as a *note tuple: 370. of
values to the second argument of the cursor’s *note execute(): 2d1.
method.

An SQL statement may use one of two kinds of placeholders: question
marks (qmark style) or named placeholders (named style).  For the qmark
style, 'parameters' must be a *note sequence: 4f1. whose length must
match the number of placeholders, or a *note ProgrammingError: 4f2. is
raised.  For the named style, 'parameters' must be an instance of a
*note dict: 256. (or a subclass), which must contain keys for all named
parameters; any extra items are ignored.  Here’s an example of both
styles:

     con = sqlite3.connect(":memory:")
     cur = con.execute("CREATE TABLE lang(name, first_appeared)")

     # This is the named style used with executemany():
     data = (
         {"name": "C", "year": 1972},
         {"name": "Fortran", "year": 1957},
         {"name": "Python", "year": 1991},
         {"name": "Go", "year": 2009},
     )
     cur.executemany("INSERT INTO lang VALUES(:name, :year)", data)

     # This is the qmark style used in a SELECT query:
     params = (1972,)
     cur.execute("SELECT * FROM lang WHERE first_appeared = ?", params)
     print(cur.fetchall())
     con.close()

     Nota: PEP 249(2) numeric placeholders are 'not' supported.  If
     used, they will be interpreted as named placeholders.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/SQL_injection

   (2) https://peps.python.org/pep-0249/


File: python.info,  Node: How to adapt custom Python types to SQLite values,  Next: How to convert SQLite values to custom Python types,  Prev: How to use placeholders to bind values in SQL queries,  Up: Guias de como fazer

5.12.6.16 How to adapt custom Python types to SQLite values
...........................................................

SQLite supports only a limited set of data types natively.  To store
custom Python types in SQLite databases, 'adapt' them to one of the
*note Python types SQLite natively understands: 2aa4.

There are two ways to adapt Python objects to SQLite types: letting your
object adapt itself, or using an 'adapter callable'.  The latter will
take precedence above the former.  For a library that exports a custom
type, it may make sense to enable that type to adapt itself.  As an
application developer, it may make more sense to take direct control by
registering custom adapter functions.

* Menu:

* How to write adaptable objects::
* How to register adapter callables::


File: python.info,  Node: How to write adaptable objects,  Next: How to register adapter callables,  Up: How to adapt custom Python types to SQLite values

5.12.6.17 How to write adaptable objects
........................................

Suppose we have a ‘Point’ class that represents a pair of coordinates,
‘x’ and ‘y’, in a Cartesian coordinate system.  The coordinate pair will
be stored as a text string in the database, using a semicolon to
separate the coordinates.  This can be implemented by adding a
‘__conform__(self, protocol)’ method which returns the adapted value.
The object passed to 'protocol' will be of type *note PrepareProtocol:
18f6.

     class Point:
         def __init__(self, x, y):
             self.x, self.y = x, y

         def __conform__(self, protocol):
             if protocol is sqlite3.PrepareProtocol:
                 return f"{self.x};{self.y}"

     con = sqlite3.connect(":memory:")
     cur = con.cursor()

     cur.execute("SELECT ?", (Point(4.0, -3.2),))
     print(cur.fetchone()[0])
     con.close()


File: python.info,  Node: How to register adapter callables,  Prev: How to write adaptable objects,  Up: How to adapt custom Python types to SQLite values

5.12.6.18 How to register adapter callables
...........................................

The other possibility is to create a function that converts the Python
object to an SQLite-compatible type.  This function can then be
registered using *note register_adapter(): 2aae.

     class Point:
         def __init__(self, x, y):
             self.x, self.y = x, y

     def adapt_point(point):
         return f"{point.x};{point.y}"

     sqlite3.register_adapter(Point, adapt_point)

     con = sqlite3.connect(":memory:")
     cur = con.cursor()

     cur.execute("SELECT ?", (Point(1.0, 2.5),))
     print(cur.fetchone()[0])
     con.close()


File: python.info,  Node: How to convert SQLite values to custom Python types,  Next: Adapter and converter recipes,  Prev: How to adapt custom Python types to SQLite values,  Up: Guias de como fazer

5.12.6.19 How to convert SQLite values to custom Python types
.............................................................

Writing an adapter lets you convert 'from' custom Python types 'to'
SQLite values.  To be able to convert 'from' SQLite values 'to' custom
Python types, we use 'converters'.

Let’s go back to the ‘Point’ class.  We stored the x and y coordinates
separated via semicolons as strings in SQLite.

First, we’ll define a converter function that accepts the string as a
parameter and constructs a ‘Point’ object from it.

     Nota: Converter functions are 'always' passed a *note bytes: 1c2.
     object, no matter the underlying SQLite data type.

     def convert_point(s):
         x, y = map(float, s.split(b";"))
         return Point(x, y)

We now need to tell ‘sqlite3’ when it should convert a given SQLite
value.  This is done when connecting to a database, using the
'detect_types' parameter of *note connect(): 2a8.  There are three
options:

   * Implicit: set 'detect_types' to *note PARSE_DECLTYPES: 2aa6.

   * Explicit: set 'detect_types' to *note PARSE_COLNAMES: 2aa7.

   * Both: set 'detect_types' to ‘sqlite3.PARSE_DECLTYPES |
     sqlite3.PARSE_COLNAMES’.  Column names take precedence over
     declared types.

The following example illustrates the implicit and explicit approaches:

     class Point:
         def __init__(self, x, y):
             self.x, self.y = x, y

         def __repr__(self):
             return f"Point({self.x}, {self.y})"

     def adapt_point(point):
         return f"{point.x};{point.y}"

     def convert_point(s):
         x, y = list(map(float, s.split(b";")))
         return Point(x, y)

     # Register the adapter and converter
     sqlite3.register_adapter(Point, adapt_point)
     sqlite3.register_converter("point", convert_point)

     # 1) Parse using declared types
     p = Point(4.0, -3.2)
     con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_DECLTYPES)
     cur = con.execute("CREATE TABLE test(p point)")

     cur.execute("INSERT INTO test(p) VALUES(?)", (p,))
     cur.execute("SELECT p FROM test")
     print("with declared types:", cur.fetchone()[0])
     cur.close()
     con.close()

     # 2) Parse using column names
     con = sqlite3.connect(":memory:", detect_types=sqlite3.PARSE_COLNAMES)
     cur = con.execute("CREATE TABLE test(p)")

     cur.execute("INSERT INTO test(p) VALUES(?)", (p,))
     cur.execute('SELECT p AS "p [point]" FROM test')
     print("with column names:", cur.fetchone()[0])
     cur.close()
     con.close()


File: python.info,  Node: Adapter and converter recipes,  Next: How to use connection shortcut methods,  Prev: How to convert SQLite values to custom Python types,  Up: Guias de como fazer

5.12.6.20 Adapter and converter recipes
.......................................

This section shows recipes for common adapters and converters.

     import datetime
     import sqlite3

     def adapt_date_iso(val):
         """Adapt datetime.date to ISO 8601 date."""
         return val.isoformat()

     def adapt_datetime_iso(val):
         """Adapt datetime.datetime to timezone-naive ISO 8601 date."""
         return val.replace(tzinfo=None).isoformat()

     def adapt_datetime_epoch(val):
         """Adapt datetime.datetime to Unix timestamp."""
         return int(val.timestamp())

     sqlite3.register_adapter(datetime.date, adapt_date_iso)
     sqlite3.register_adapter(datetime.datetime, adapt_datetime_iso)
     sqlite3.register_adapter(datetime.datetime, adapt_datetime_epoch)

     def convert_date(val):
         """Convert ISO 8601 date to datetime.date object."""
         return datetime.date.fromisoformat(val.decode())

     def convert_datetime(val):
         """Convert ISO 8601 datetime to datetime.datetime object."""
         return datetime.datetime.fromisoformat(val.decode())

     def convert_timestamp(val):
         """Convert Unix epoch timestamp to datetime.datetime object."""
         return datetime.datetime.fromtimestamp(int(val))

     sqlite3.register_converter("date", convert_date)
     sqlite3.register_converter("datetime", convert_datetime)
     sqlite3.register_converter("timestamp", convert_timestamp)


File: python.info,  Node: How to use connection shortcut methods,  Next: How to use the connection context manager,  Prev: Adapter and converter recipes,  Up: Guias de como fazer

5.12.6.21 How to use connection shortcut methods
................................................

Using the *note execute(): 2ace, *note executemany(): 2acf, and *note
executescript(): 2ad0. methods of the *note Connection: 245. class, your
code can be written more concisely because you don’t have to create the
(often superfluous) *note Cursor: 2a98. objects explicitly.  Instead,
the *note Cursor: 2a98. objects are created implicitly and these
shortcut methods return the cursor objects.  This way, you can execute a
‘SELECT’ statement and iterate over it directly using only a single call
on the *note Connection: 245. object.

     # Create and fill the table.
     con = sqlite3.connect(":memory:")
     con.execute("CREATE TABLE lang(name, first_appeared)")
     data = [
         ("C++", 1985),
         ("Objective-C", 1984),
     ]
     con.executemany("INSERT INTO lang(name, first_appeared) VALUES(?, ?)", data)

     # Print the table contents
     for row in con.execute("SELECT name, first_appeared FROM lang"):
         print(row)

     print("I just deleted", con.execute("DELETE FROM lang").rowcount, "rows")

     # close() is not a shortcut method and it's not called automatically;
     # the connection object should be closed manually
     con.close()


File: python.info,  Node: How to use the connection context manager,  Next: How to work with SQLite URIs,  Prev: How to use connection shortcut methods,  Up: Guias de como fazer

5.12.6.22 How to use the connection context manager
...................................................

A *note Connection: 245. object can be used as a context manager that
automatically commits or rolls back open transactions when leaving the
body of the context manager.  If the body of the *note with: 5d2.
statement finishes without exceptions, the transaction is committed.  If
this commit fails, or if the body of the ‘with’ statement raises an
uncaught exception, the transaction is rolled back.  If *note
autocommit: 4b6. is ‘False’, a new transaction is implicitly opened
after committing or rolling back.

If there is no open transaction upon leaving the body of the ‘with’
statement, or if *note autocommit: 4b6. is ‘True’, the context manager
does nothing.

     Nota: The context manager neither implicitly opens a new
     transaction nor closes the connection.  If you need a closing
     context manager, consider using *note contextlib.closing(): 13d0.

     con = sqlite3.connect(":memory:")
     con.execute("CREATE TABLE lang(id INTEGER PRIMARY KEY, name VARCHAR UNIQUE)")

     # Successful, con.commit() is called automatically afterwards
     with con:
         con.execute("INSERT INTO lang(name) VALUES(?)", ("Python",))

     # con.rollback() is called after the with block finishes with an exception,
     # the exception is still raised and must be caught
     try:
         with con:
             con.execute("INSERT INTO lang(name) VALUES(?)", ("Python",))
     except sqlite3.IntegrityError:
         print("couldn't add Python twice")

     # Connection object used as context manager only commits or rollbacks transactions,
     # so the connection object should be closed manually
     con.close()


File: python.info,  Node: How to work with SQLite URIs,  Next: How to create and use row factories,  Prev: How to use the connection context manager,  Up: Guias de como fazer

5.12.6.23 How to work with SQLite URIs
......................................

Some useful URI tricks include:

   * Open a database in read-only mode:

     >>> con = sqlite3.connect("file:tutorial.db?mode=ro", uri=True)
     >>> con.execute("CREATE TABLE readonly(data)")
     Traceback (most recent call last):
     OperationalError: attempt to write a readonly database
     >>> con.close()

   * Do not implicitly create a new database file if it does not already
     exist; will raise *note OperationalError: 19dd. if unable to create
     a new file:

     >>> con = sqlite3.connect("file:nosuchdb.db?mode=rw", uri=True)
     Traceback (most recent call last):
     OperationalError: unable to open database file

   * Create a shared named in-memory database:

     db = "file:mem1?mode=memory&cache=shared"
     con1 = sqlite3.connect(db, uri=True)
     con2 = sqlite3.connect(db, uri=True)
     with con1:
         con1.execute("CREATE TABLE shared(data)")
         con1.execute("INSERT INTO shared VALUES(28)")
     res = con2.execute("SELECT data FROM shared")
     assert res.fetchone() == (28,)

     con1.close()
     con2.close()

More information about this feature, including a list of parameters, can
be found in the SQLite URI documentation(1).

   ---------- Footnotes ----------

   (1) https://www.sqlite.org/uri.html


File: python.info,  Node: How to create and use row factories,  Next: How to handle non-UTF-8 text encodings,  Prev: How to work with SQLite URIs,  Up: Guias de como fazer

5.12.6.24 How to create and use row factories
.............................................

By default, ‘sqlite3’ represents each row as a *note tuple: 370.  If a
‘tuple’ does not suit your needs, you can use the *note sqlite3.Row:
ea0. class or a custom *note row_factory: 2ad8.

While ‘row_factory’ exists as an attribute both on the *note Cursor:
2a98. and the *note Connection: 245, it is recommended to set *note
Connection.row_factory: 171a, so all cursors created from the connection
will use the same row factory.

‘Row’ provides indexed and case-insensitive named access to columns,
with minimal memory overhead and performance impact over a ‘tuple’.  To
use ‘Row’ as a row factory, assign it to the ‘row_factory’ attribute:

     >>> con = sqlite3.connect(":memory:")
     >>> con.row_factory = sqlite3.Row

Queries now return ‘Row’ objects:

     >>> res = con.execute("SELECT 'Earth' AS name, 6378 AS radius")
     >>> row = res.fetchone()
     >>> row.keys()
     ['name', 'radius']
     >>> row[0]         # Access by index.
     'Earth'
     >>> row["name"]    # Access by name.
     'Earth'
     >>> row["RADIUS"]  # Column names are case-insensitive.
     6378
     >>> con.close()

     Nota: The ‘FROM’ clause can be omitted in the ‘SELECT’ statement,
     as in the above example.  In such cases, SQLite returns a single
     row with columns defined by expressions, e.g.  literals, with the
     given aliases ‘expr AS alias’.

You can create a custom *note row_factory: 2ad8. that returns each row
as a *note dict: 256, with column names mapped to values:

     def dict_factory(cursor, row):
         fields = [column[0] for column in cursor.description]
         return {key: value for key, value in zip(fields, row)}

Using it, queries now return a ‘dict’ instead of a ‘tuple’:

     >>> con = sqlite3.connect(":memory:")
     >>> con.row_factory = dict_factory
     >>> for row in con.execute("SELECT 1 AS a, 2 AS b"):
     ...     print(row)
     {'a': 1, 'b': 2}
     >>> con.close()

The following row factory returns a *note named tuple: 64e.:

     from collections import namedtuple

     def namedtuple_factory(cursor, row):
         fields = [column[0] for column in cursor.description]
         cls = namedtuple("Row", fields)
         return cls._make(row)

‘namedtuple_factory()’ can be used as follows:

     >>> con = sqlite3.connect(":memory:")
     >>> con.row_factory = namedtuple_factory
     >>> cur = con.execute("SELECT 1 AS a, 2 AS b")
     >>> row = cur.fetchone()
     >>> row
     Row(a=1, b=2)
     >>> row[0]  # Indexed access.
     1
     >>> row.b   # Attribute access.
     2
     >>> con.close()

With some adjustments, the above recipe can be adapted to use a *note
dataclass: 1cb, or any other custom class, instead of a *note
namedtuple: 1ca.


File: python.info,  Node: How to handle non-UTF-8 text encodings,  Prev: How to create and use row factories,  Up: Guias de como fazer

5.12.6.25 How to handle non-UTF-8 text encodings
................................................

By default, ‘sqlite3’ uses *note str: 44c. to adapt SQLite values with
the ‘TEXT’ data type.  This works well for UTF-8 encoded text, but it
might fail for other encodings and invalid UTF-8.  You can use a custom
*note text_factory: 2ad9. to handle such cases.

Because of SQLite’s flexible typing(1), it is not uncommon to encounter
table columns with the ‘TEXT’ data type containing non-UTF-8 encodings,
or even arbitrary data.  To demonstrate, let’s assume we have a database
with ISO-8859-2 (Latin-2) encoded text, for example a table of
Czech-English dictionary entries.  Assuming we now have a *note
Connection: 245. instance ‘con’ connected to this database, we can
decode the Latin-2 encoded text using this *note text_factory: 2ad9.:

     con.text_factory = lambda data: str(data, encoding="latin2")

For invalid UTF-8 or arbitrary data in stored in ‘TEXT’ table columns,
you can use the following technique, borrowed from the *note Unicode:
12e7.:

     con.text_factory = lambda data: str(data, errors="surrogateescape")

     Nota: The ‘sqlite3’ module API does not support strings containing
     surrogates.

Ver também
..........

*note Unicode: 12e7.

   ---------- Footnotes ----------

   (1) https://www.sqlite.org/flextypegood.html


File: python.info,  Node: Explicação,  Prev: Guias de como fazer,  Up: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite

5.12.6.26 Explicação
....................

* Menu:

* Controle de transações::


File: python.info,  Node: Controle de transações,  Up: Explicação

5.12.6.27 Controle de transações
................................

‘sqlite3’ oferece vários métodos para controlar se, quando e como as
transações do banco de dados são abertas e fechadas.  *note Controle de
transações através do atributo autocommit: 4b7. é recomendado, enquanto
*note Controle de transação através do atributo isolation_level: 2aa9.
mantém o comportamento pré-Python 3.12.

* Menu:

* Controle de transações através do atributo autocommit::
* Controle de transação através do atributo isolation_level::


File: python.info,  Node: Controle de transações através do atributo autocommit,  Next: Controle de transação através do atributo isolation_level,  Up: Controle de transações

5.12.6.28 Controle de transações através do atributo ‘autocommit’
.................................................................

A forma recomendada de controlar o comportamento da transação é através
do atributo *note Connection.autocommit: 4b6, que deve ser
preferencialmente definido usando o parâmetro 'autocommit' de *note
connect(): 2a8.

É sugerido definir 'autocommit' como ‘False’, o que implica controle de
transação compatível com a PEP 249(1).  Isso significa:

   * ‘sqlite3’ garante que uma transação esteja sempre aberta, então
     *note connect(): 2a8, *note Connection.commit(): 2a9b. e *note
     Connection.rollback(): 2acd. abrirão implicitamente uma nova
     transação (imediatamente após fechando a pendência, para as duas
     últimas).  ‘sqlite3’ usa instruções ‘BEGIN DEFERRED’ ao abrir
     transações.

   * Transações devem ser executadas explicitamente usando ‘commit()’.

   * Transações devem ser revertidas explicitamente usando ‘rollback()’.

   * Uma reversão implícita é executada se o banco de dados estiver em
     estado *note close(): 246. com alterações pendentes.

Defina 'autocommit' como ‘True’ para ativar o modo autocommit(2) do
SQLite.  Neste modo, *note Connection.commit(): 2a9b. e *note
Connection.rollback(): 2acd. não têm efeito.  Observe que o modo
autocommit do SQLite é distinto do atributo *note Connection.autocommit:
4b6. compatível com PEP 249(3); use *note Connection.in_transaction:
2ad7. para consultar o modo de confirmação automática do SQLite de baixo
nível.

Defina 'autocommit' como *note LEGACY_TRANSACTION_CONTROL: 2aaa. para
deixar o comportamento de controle de transação para o atributo *note
Connection.isolation_level: 2aa8.  Veja *note Controle de transação
através do atributo isolation_level: 2aa9. para mais informações.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0249/

   (2) 
https://www.sqlite.org/lang_transaction.html#implicit_versus_explicit_transactions

   (3) https://peps.python.org/pep-0249/


File: python.info,  Node: Controle de transação através do atributo isolation_level,  Prev: Controle de transações através do atributo autocommit,  Up: Controle de transações

5.12.6.29 Controle de transação através do atributo ‘isolation_level’
.....................................................................

     Nota: A forma recomendada de controlar transações é através do
     atributo *note autocommit: 4b6.  Veja *note Controle de transações
     através do atributo autocommit: 4b7.

Se *note Connection.autocommit: 4b6. estiver definido como *note
LEGACY_TRANSACTION_CONTROL: 2aaa. (o padrão), o comportamento da
transação é controlado usando o atributo *note
Connection.isolation_level: 2aa8.  Caso contrário, ‘isolation_level’ não
tem efeito.

Se o atributo de conexão *note isolation_level: 2aa8. não for ‘None’,
novas transações são abertas implicitamente antes de *note execute():
2d1. e *note executemany(): 2d2. executa instruções ‘INSERT’, ‘UPDATE’,
‘DELETE’ ou ‘REPLACE’; para outras instruções, nenhuma manipulação de
transação implícita é executada.  Use os métodos *note commit(): 2a9b. e
*note rollback(): 2acd. para fazer commit e reverter respectivamente
transações pendentes.  Você pode escolher o comportamento subjacente de
transação do SQLite(1) – isto é, se e que tipo de instruções ‘BEGIN’ do
‘sqlite3’ são executadas implicitamente – através do atributo *note
isolation_level: 2aa8.

Se *note isolation_level: 2aa8. estiver definido como ‘None’, nenhuma
transação será aberta implicitamente.  Isso deixa a biblioteca SQLite
subjacente no modo autocommit(2), mas também permite que o usuário
execute sua própria manipulação de transações usando instruções SQL
explícitas.  O modo de autocommit da biblioteca SQLite subjacente pode
ser consultado usando o atributo *note in_transaction: 2ad7.

O método *note executescript(): 2ad1. compromete implicitamente qualquer
transação pendente antes da execução do script SQL fornecido,
independentemente do valor de *note isolation_level: 2aa8.

Alterado na versão 3.6: ‘sqlite3’ costumava fazer commit de forma
implícita de uma transação aberta antes das instruções DDL. Este não é
mais o caso.

Alterado na versão 3.12: A forma recomendada de controlar transações
agora é através do atributo *note autocommit: 4b6.

   ---------- Footnotes ----------

   (1) 
https://www.sqlite.org/lang_transaction.html#deferred_immediate_and_exclusive_transactions

   (2) 
https://www.sqlite.org/lang_transaction.html#implicit_versus_explicit_transactions


File: python.info,  Node: Compressão de Dados e Arquivamento,  Next: Formatos de Arquivo,  Prev: Persistência de Dados,  Up: A Biblioteca Padrão do Python

5.13 Compressão de Dados e Arquivamento
=======================================

Os módulos descritos neste capítulo suportam a compressão de dados com
os algoritmos zlib, gzip, bzip2 e lzma e a criação de arquivos ZIP e
tar.  Consulte também *note Operações de arquivamento: 1259. fornecido
pelo módulo *note shutil: c5.

* Menu:

* zlib — Compactação compatível com gzip::
* gzip — Suporte para arquivos gzip::
* bz2 — Suporte para compressão bzip2::
* lzma — Compressão usando o algoritmo LZMA::
* zipfile — Trabalha com arquivos ZIP::
* tarfile — Ler e gravar arquivos do tipo tar::


File: python.info,  Node: zlib — Compactação compatível com gzip,  Next: gzip — Suporte para arquivos gzip,  Up: Compressão de Dados e Arquivamento

5.13.1 ‘zlib’ — Compactação compatível com ‘gzip’
-------------------------------------------------

__________________________________________________________________

Para aplicações que exigem compactação de dados, as funções deste módulo
permitem a compactação e a descompactação, usando a biblioteca zlib.  A
biblioteca zlib tem sua própria página em ‘https://www.zlib.net’.
Existem algumas incompatibilidades conhecidas entre o Python módulo e as
versões da biblioteca zlib anteriores à 1.1.3; a 1.1.3 tem uma
vulnerabilidade de segurança(1), portanto, recomendamos o uso da 1.1.4
ou posterior.

As funções do zlib têm muitas opções e geralmente precisam ser usadas em
uma ordem específica.  Esta documentação não tenta cobrir todas as
permutações; consulte o manual do zlib(2) para obter informações
oficiais.

Para leitura e escrita de arquivos ‘.gz’, consulte o módulo *note gzip:
67.

A exceção e as funções disponíveis neste módulo são:

 -- Exceção: zlib.error

     Exceção levantada em erros de compactação e descompactação.

 -- Função: zlib.adler32 (data[, value])

     Calcula uma soma de verificação Adler-32 de 'data'.  (Uma soma de
     verificação Adler-32 é quase tão confiável quanto uma CRC32, mas
     pode ser calculada muito mais rapidamente.)  O resultado é um
     número inteiro sem sinal de 32 bits.  Se 'value' estiver presente,
     ele será usado como o valor inicial da soma de verificação; caso
     contrário, um valor padrão de 1 é usado.  A passagem de 'value'
     permite calcular uma soma de verificação em execução através da
     concatenação de várias entradas.  O algoritmo não é
     criptograficamente forte e não deve ser usado para autenticação ou
     assinaturas digitais.  Como o algoritmo foi projetado para uso como
     um algoritmo de soma de verificação, não é adequado para uso como
     um algoritmo de hash geral.

     Alterado na versão 3.0: O resultado é sempre sem sinal.

 -- Função: zlib.compress (data, /, level=Z_DEFAULT_COMPRESSION,
          wbits=MAX_WBITS)

     Compacta os bytes em 'data', retornando um objeto bytes contendo
     dados compactados.  'level' é um inteiro de ‘0’ a ‘9’ ou ‘-1’ que
     controla o nível de compactação; Consulte *note Z_BEST_SPEED: 2b10.
     (‘1’), *note Z_BEST_COMPRESSION: 2b11. (‘9’), *note
     Z_NO_COMPRESSION: 2b12. (‘0’) e o padrão, *note
     Z_DEFAULT_COMPRESSION: 2b13. (‘-1’) para obter mais informações
     sobre esses valores.  O argumento 'wbits' controla o tamanho do
     buffer do histórico (ou o “tamanho da janela”) usado ao compactar
     dados e se um cabeçalho e um trailer estão incluídos na saída.
     Pode levar vários intervalos de valores, padronizando para ‘15’
     (*note MAX_WBITS: 2b15.):

        * +9 a +15: o logaritmo de base dois do tamanho da janela, que
          varia entre 512 e 32768.  Valores maiores produzem melhor
          compactação às custas de maior uso de memória.  A saída
          resultante incluirá um cabeçalho e uma sequência específicos
          para zlib.

        * -9 a -15: Usa o valor absoluto de 'wbits' como o logaritmo do
          tamanho da janela, enquanto produz um fluxo de saída bruto sem
          cabeçalho ou soma de verificação à direita.

        * +25 a +31 = 16 + (9 a 15): Usa os 4 bits baixos do valor como
          logaritmo do tamanho da janela, incluindo um cabeçalho básico
          ‘gzip’ e a soma de verificação à direita na saída.

     Levanta uma exceção do tipo *note error: 2b0f, se ocorrer algum
     erro.

     Alterado na versão 3.6: 'level' pode agora ser usado como um
     palavra reservada nomeada.

     Alterado na versão 3.11: O parâmetro 'wbits' agora está disponível
     para definir janelas de bits e tipo de compactação.

 -- Função: zlib.compressobj (level=Z_DEFAULT_COMPRESSION,
          method=DEFLATED, wbits=MAX_WBITS, memLevel=DEF_MEM_LEVEL,
          strategy=Z_DEFAULT_STRATEGY[, zdict])

     Retorna um objeto de compactação, a ser usado para compactar fluxos
     de dados que não cabem na memória de uma só vez.

     'level' é um nível de compactação – um inteiro de ‘0’ a ‘9’ ou
     ‘-1’.  Consulte *note Z_BEST_SPEED: 2b10. (‘1’), *note
     Z_BEST_COMPRESSION: 2b11. (‘9’), *note Z_NO_COMPRESSION: 2b12.
     (‘0’) e o padrão, *note Z_DEFAULT_COMPRESSION: 2b13. (‘-1’) para
     obter mais informações sobre esses valores.

     'method' é o algoritmo de compactação.  Atualmente, o único valor
     suportado é *note DEFLATED: 2b17.

     O parâmetro 'wbits' controla o tamanho do histórico buffer (ou o
     “tamanho da janela do buffer”) e qual o formato do cabeçalho e do
     trailer serão usados.  Ele tem o mesmo significado que o *note
     descrito para compress(): 2b14.

     O argumento 'memLevel' controla a quantidade de memória usada para
     o estado de compactação interno.  Os valores válidos variam de ‘1’
     a ‘9’.  Valores mais altos usam mais memória, mas são mais rápidos
     e produzem uma saída menor.

     'strategy' é usado para ajustar o algoritmo de compactação.  Os
     valores possíveis são *note Z_DEFAULT_STRATEGY: 2b18, *note
     Z_FILTERED: 2b19, *note Z_HUFFMAN_ONLY: 2b1a, *note Z_RLE: 2b1b. e
     *note Z_FIXED: 2b1c.

     'zdict' é um dicionário de compactação predefinido.  Esta é uma
     sequência de bytes (como um objeto *note bytes: 1c2.) que contém
     subsequências que se espera que ocorram com frequência nos dados a
     serem compactados.  As subsequências que se espera serem mais
     comuns devem aparecer no final do dicionário.

     Alterado na versão 3.3: Adicionado o suporte ao parâmetro e
     argumento nomeado 'zdict'.

 -- Função: zlib.crc32 (data[, value])

     Calcula uma soma de verificação CRC (Cyclic Redundancy Check) de
     'data'.  O resultado é um número inteiro sem sinal de 32 bits.  Se
     'value' estiver presente, ele será usado como o valor inicial da
     soma de verificação; caso contrário, um valor padrão de 1 é usado.
     A passagem de 'value' permite calcular uma soma de verificação em
     execução através da concatenação de várias entradas.  O algoritmo
     não é criptograficamente forte e não deve ser usado para
     autenticação ou assinaturas digitais.  Como o algoritmo foi
     projetado para uso como um algoritmo de soma de verificação, não é
     adequado para uso como um algoritmo de hash geral.

     Alterado na versão 3.0: O resultado é sempre sem sinal.

 -- Função: zlib.decompress (data, /, wbits=MAX_WBITS,
          bufsize=DEF_BUF_SIZE)

     Descompacta os bytes em 'data', retornando um objeto de bytes que
     contém os dados não compactados.  O parâmetro 'wbits' depende do
     formato de 'data' e é discutido mais abaixo.  Se 'bufsize' for
     fornecido, ele será usado como o tamanho inicial do buffer de
     saída.  Levanta a exceção *note error: 2b0f. se ocorrer algum erro.
     O parâmetro 'wbits' controla o tamanho do buffer do histórico (ou
     “tamanho da janela”) e qual formato de cabeçalho e sequência é
     esperado.  É semelhante ao parâmetro para *note compressobj():
     2b16, mas aceita mais intervalos de valores:

        * +8 a +15: O logaritmo de base dois do tamanho da janela.  A
          entrada deve incluir um cabeçalho e uma sequência de zlib.

        * 0: Determina automaticamente o tamanho da janela no cabeçalho
          zlib.  Suportado apenas desde o zlib 1.2.3.5.

        * −8 a −15: Usa o valor absoluto de 'wbits' como o logaritmo do
          tamanho da janela.  A entrada deve ser um fluxo bruto sem
          cabeçalho ou sequência.

        * +24 a +31 = 16 + (8 a 15): Usa os 4 bits baixos do valor como
          logaritmo do tamanho da janela.  A entrada deve incluir um
          cabeçalho e sequência de gzip.

        * +40 a +47 = 32 + (8 a 15): Usa os 4 bits baixos do valor como
          logaritmo do tamanho da janela e aceita automaticamente o
          formato zlib ou gzip.

     Ao descompactar um fluxo, o tamanho da janela não deve ser menor
     que o tamanho originalmente usado para compactar o fluxo; o uso de
     um valor muito pequeno pode resultar em uma exceção *note error:
     2b0f.  O valor padrão 'wbits' corresponde ao maior tamanho da
     janela e requer que um cabeçalho e uma sequência de zlib sejam
     incluídos.

     'bufsize' é o tamanho inicial do buffer usado para armazenar dados
     descompactados.  Se for necessário mais espaço, o tamanho do buffer
     será aumentado conforme necessário, para que você não precise obter
     esse valor exatamente correto; sintonizando, apenas algumas
     chamadas serão salvas em ‘malloc()’.

     Alterado na versão 3.6: 'wbits' e 'bufsize' podem ser usados como
     argumentos nomeados.

 -- Função: zlib.decompressobj (wbits=MAX_WBITS[, zdict])

     Retorna um objeto descompactado, a ser usado para descompactar
     fluxos de dados que não cabem na memória de uma só vez.

     O parâmetro 'wbits' controla o tamanho do histórico do buffer (ou o
     “tamanho da janela do buffer”) e qual formato do cabeçalho e
     trailer são esperados.  Ele tem o mesmo significado que o *note
     descrito para decompress(): 2b1d.

     O parâmetro 'zdict' especifica uma dicionário predefinido de
     compactação.  Se fornecido, deve ser o mesmo dicionário usado pelo
     compactador que produziu os dados a serem descompactados.

          Nota: Se 'zdict' for um objeto mutável (como um *note
          bytearray: 2ea.), você não deve modificar seu conteúdo entre a
          chamada de *note decompressobj(): 2b1e. e a primeira chamada
          para o método de descompatação ‘decompress()’.

     Alterado na versão 3.3: Adicionado o parâmetro 'zdict'.

Um objeto do tipo Compress oferece suporte aos seguintes métodos:

 -- Método: Compress.compress (data)

     Comprime 'data', retornando um objeto de bytes que contém dados
     compactados para pelo menos parte dos dados em 'data'.  Esses dados
     devem ser concatenados à saída produzida por quaisquer chamadas
     anteriores ao método *note compress(): 63f.  Algumas entradas podem
     ser mantidas em buffers internos para processamento posterior.

 -- Método: Compress.flush ([mode])

     Toda a entrada pendente é processada e um objeto de bytes contendo
     a saída compactada restante é retornado.  O 'mode' pode ser
     selecionado entre constantes *note Z_NO_FLUSH: 2b21. , *note
     Z_PARTIAL_FLUSH: 2b22, *note Z_SYNC_FLUSH: 2b23, *note
     Z_FULL_FLUSH: 2b24, *note Z_BLOCK: 2b25. ou *note Z_FINISH: 2b26,
     com o padrão sendo *note Z_FINISH: 2b26.  Exceto *note Z_FINISH:
     2b26, todas as demais constantes permitem a compactação de mais
     bytestrings de dados, enquanto *note Z_FINISH: 2b26. finaliza o
     fluxo compactado e impede a compactação de mais dados.  Depois de
     chamar *note flush(): 2b20. com 'mode' definido como *note
     Z_FINISH: 2b26, o método *note compress(): 63f. não pode ser
     chamado novamente; a única ação restante possível é excluir o
     objeto.

 -- Método: Compress.copy ()

     Retorna uma cópia do objeto de compactação.  Isso pode ser usado
     para compactar com eficiência um conjunto de dados que compartilham
     um prefixo inicial comum.

Alterado na versão 3.8: As funções *note copy.copy(): 534. e *note
copy.deepcopy(): b84. foram adicionadas como suporte para a compactação
de objetos.

Um objeto de descompactação oferece suporte aos seguintes métodos:

 -- Atributo: Decompress.unused_data

     Um objeto de bytes que contém todos os bytes após o final dos dados
     compactados.  Ou seja, ele permanece ‘b""’ até que o último byte
     que contém dados compactados esteja disponível.  Se todo o
     bytestring contiver dados compactados, este será ‘b""’, um objeto
     de bytes vazio.

 -- Atributo: Decompress.unconsumed_tail

     Um objeto de bytes que contém todos os dados que não foram
     consumidos pela última chamada *note decompress(): d2f. porque
     excederam o limite dos dados não compactados no buffer.  Esses
     dados ainda não foram vistos pela zlib, portanto, você deve
     alimentá-los (possivelmente com outros dados concatenados a eles)
     em uma chamada subsequente para o método *note decompress(): d2f.
     e, com isso, obter a saída correta.

 -- Atributo: Decompress.eof

     Um booleano indicando se o fim do fluxo de dados compactados foi
     alcançado.

     Isso permite distinguir entre um fluxo compactado formado
     corretamente e um fluxo incompleto ou truncado.

     Adicionado na versão 3.3.

 -- Método: Decompress.decompress (data, max_length=0)

     Descompacta 'data', retornando um objeto de bytes que contém os
     dados não compactados correspondentes a pelo menos uma parte dos
     dados em 'string'.  Esses dados devem ser concatenados com a saída
     produzida por quaisquer chamadas anteriores ao método *note
     decompress(): d2f. .  Alguns dos dados de entrada podem ser
     preservados em buffers internos para processamento posterior.

     Se o parâmetro opcional 'max_length' for diferente de zero, o valor
     retornado não será maior que 'max_length'.  Isso pode significar
     que nem toda a entrada compactada poderá ser processada, e os dados
     não consumidos serão armazenados no atributo *note unconsumed_tail:
     2b29. .  Esse bytestring deve ser passado para uma chamada
     subsequente a *note decompress(): d2f. se a descompactação tiver
     que continuar.  Se 'max_length' for zero, toda a entrada será
     descompactada e *note unconsumed_tail: 2b29. ficará vazio.

     Alterado na versão 3.6: 'max_length' pode ser usado como argumento
     nomeado.

 -- Método: Decompress.flush ([length])

     Toda a entrada que estiver pendente é processada e um objeto de
     bytes contendo a saída descompactada restante é retornado.  Depois
     de chamar *note flush(): 2b2b, o método *note decompress(): d2f.
     não pode ser chamado novamente; a única ação possível é excluir o
     objeto.

     O parâmetro opcional 'comprimento' define o tamanho inicial da
     saída do buffer.

 -- Método: Decompress.copy ()

     Retorna uma cópia do objeto de descompactação.  Isso pode ser usado
     para salvar o estado do descompactador no meio do fluxo de dados, a
     fim de acelerar as buscas aleatórias no fluxo em um ponto futuro.

Alterado na versão 3.8: As funções *note copy.copy(): 534. e *note
copy.deepcopy(): b84. foram adicionadas como suporte para a objetos de
descompactação.

As constantes a seguir estão disponíveis para configurar o comportamento
de compactação e descompactação:

 -- Dado: zlib.DEFLATED

     O método de compactação de deflação.

 -- Dado: zlib.MAX_WBITS

     O tamanho máximo da janela, expresso como uma potência de 2.  Por
     exemplo, se ‘MAX_WBITS’ for ‘15’, isso resultará em um tamanho de
     janela de ‘32 KiB’.

 -- Dado: zlib.DEF_MEM_LEVEL

     O nível de memória padrão para objetos de compactação.

 -- Dado: zlib.DEF_BUF_SIZE

     O tamanho padrão do buffer para operações de descompactação.

 -- Dado: zlib.Z_NO_COMPRESSION

     Nível de compactação ‘0’; sem compactação.

     Adicionado na versão 3.6.

 -- Dado: zlib.Z_BEST_SPEED

     Nível de compactação ‘1’; mais rápido e produz a menor compactação.

 -- Dado: zlib.Z_BEST_COMPRESSION

     Nível de compactação ‘9’; mais lento e produz a maior compactação.

 -- Dado: zlib.Z_DEFAULT_COMPRESSION

     Nível de compactação padrão (‘-1’); um meio-termo entre velocidade
     e compactação.  Atualmente equivalente ao nível de compactação ‘6’.

 -- Dado: zlib.Z_DEFAULT_STRATEGY

     Estratégia de compactação padrão, para dados normais.

 -- Dado: zlib.Z_FILTERED

     Estratégia de compactação para dados produzidos por um filtro (ou
     preditor).

 -- Dado: zlib.Z_HUFFMAN_ONLY

     Estratégia de compactação que força codificação Huffman apenas.

 -- Dado: zlib.Z_RLE

     Estratégia de compactação que limita distâncias de correspondência
     a um (codificação run-length).

     Esta constante só estará disponível se o Python foi construído com
     zlib 1.2.0.1 ou superior.

     Adicionado na versão 3.6.

 -- Dado: zlib.Z_FIXED

     Estratégia de compactação que impede o uso de códigos dinâmicos de
     Huffman.

     Esta constante só estará disponível se o Python foi construído com
     zlib 1.2.2.2 ou superior.

     Adicionado na versão 3.6.

 -- Dado: zlib.Z_NO_FLUSH

     Modo de saída ‘0’.  Nenhum comportamento especial de saída.

     Adicionado na versão 3.6.

 -- Dado: zlib.Z_PARTIAL_FLUSH

     Modo de saída ‘1’.  Emite o máximo de saída possível.

 -- Dado: zlib.Z_SYNC_FLUSH

     Modo de saída ‘2’.  Toda saída é emitida e é alinhada a um limite
     de bytes.

 -- Dado: zlib.Z_FULL_FLUSH

     Modo de saída ‘3’.  Toda a saída é emitida e o estado de
     compactação é redefinido.

 -- Dado: zlib.Z_FINISH

     Modo de saída ‘4’.  Toda entrada pendente é processada, nenhuma
     outra entrada é esperada.

 -- Dado: zlib.Z_BLOCK

     Modo de saída ‘5’.  Um bloco de deflação é concluído e emitido.

     Esta constante só estará disponível se o Python foi construído com
     zlib 1.2.2.2 ou superior.

     Adicionado na versão 3.6.

 -- Dado: zlib.Z_TREES

     Modo de saída ‘6’, para operações de inflação.  Instrui a inflação
     a retornar ao atingir o próximo limite do bloco de desinflação.

     Esta constante está disponível apenas se o Python foi compilado com
     zlib 1.2.3.4 ou superior.

     Adicionado na versão 3.6.

As informações sobre o versão da biblioteca zlib em uso estão
disponíveis no seguinte constantes:

 -- Dado: zlib.ZLIB_VERSION

     Uma string com a versão da biblioteca zlib que foi usada para
     construir o módulo.  Isso pode ser diferente da biblioteca zlib
     realmente usada no tempo de execução, que está disponível como
     *note ZLIB_RUNTIME_VERSION: 11ad.

 -- Dado: zlib.ZLIB_RUNTIME_VERSION

     Uma string com a versão da biblioteca zlib atualmente utilizada
     pelo interpretador.

     Adicionado na versão 3.3.

Ver também
..........

módulo *note gzip: 67.

     Leia e escreva arquivos no formato ‘gzip’

‘https://www.zlib.net’

     A página inicial da biblioteca zlib.

‘https://www.zlib.net/manual.html’

     O manual da zlib explica a semântica e uso de diversas funções
     desta biblioteca.

Caso a (des)compactação do gzip seja um gargalo, o pacote python-isal(3)
acelera a (des)compactação com uma API quase sempre compatível.

   ---------- Footnotes ----------

   (1) https://zlib.net/zlib_faq.html#faq33

   (2) https://www.zlib.net/manual.html

   (3) https://github.com/pycompression/python-isal


File: python.info,  Node: gzip — Suporte para arquivos gzip,  Next: bz2 — Suporte para compressão bzip2,  Prev: zlib — Compactação compatível com gzip,  Up: Compressão de Dados e Arquivamento

5.13.2 ‘gzip’ — Suporte para arquivos ‘gzip’
--------------------------------------------

'Código-fonte:' Lib/gzip.py(1)

__________________________________________________________________

Esse módulo disponibiliza uma interface simples para comprimir e extrair
arquivos como os programas GNU ‘gzip’ e ‘gunzip’ fazem.

A compressão de dados é realizada pelo módulo *note zlib: 133.

O módulo *note gzip: 67. fornece a classe *note GzipFile: 41a, bem como
as funções de conveniência *note open(): 2b34, *note compress(): 63e. e
*note decompress(): 124d.  A classe *note GzipFile: 41a. lê e grava
arquivos no formato ‘gzip’, compactando ou descompactando
automaticamente os dados para que se pareçam com um *note objeto
arquivo: 1203. comum.

Observe que formatos de arquivo adicionais que podem ser descompactados
pelos programas ‘gzip’ e ‘gunzip’, como aqueles produzidos por
‘compress’ e ‘pack’, não são suportados por este módulo.

Este módulo define os seguintes itens:

 -- Função: gzip.open (filename, mode='rb', compresslevel=9,
          encoding=None, errors=None, newline=None)

     Abre um arquivo comprimido com gzip em modo binário ou texto,
     retornando *note objeto arquivo: 1203.

     O argumento 'filename' pode ser um nome de arquivo real (um objeto
     *note str: 44c. ou *note bytes: 1c2.), ou um objeto arquivo
     existente para ler ou gravar.

     O argumento 'mode' pode ser qualquer um de ‘'r'’, ‘'rb'’, ‘'a'’,
     ‘'ab'’, ‘'w'’, ‘'wb'’, ‘'x'’ ou ‘'xb'’ para modo binário, ou
     ‘'rt'’, ‘'at'’, ‘'wt'’ ou ‘'xt'’ para modo texto.  O padrão é
     ‘'rb'’.

     O argumento 'compresslevel' é um inteiro de 0 a 9, como para o
     construtor de *note GzipFile: 41a.

     Para o modo binário, esta função equivale ao construtor de *note
     GzipFile: 41a.: ‘GzipFile(filename, mode, compresslevel)’.  Neste
     caso, os argumentos 'encoding', 'errors' e 'newline' não devem ser
     fornecidos.

     Para o modo texto, um objeto *note GzipFile: 41a. é criado e
     encapsulado em uma instância *note io.TextIOWrapper: 7bc. com a
     codificação especificada, comportamento de tratamento de erros e
     final(is) de linha.

     Alterado na versão 3.3: Adicionado suporte para 'filename' ser um
     objeto arquivo, suporte para modo texto e os argumentos 'encoding',
     'errors' e 'newline'.

     Alterado na versão 3.4: Adicionado suporte para os modos ‘'x'’,
     ‘'xb'’ e ‘'xt'’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Exceção: gzip.BadGzipFile

     Uma exceção levantada para arquivos gzip inválidos.  Herda de *note
     OSError: 417.  *note EOFError: 131c. e *note zlib.error: 2b0f.
     também podem ser levantadas para arquivos gzip inválidos.

     Adicionado na versão 3.8.

 -- Classe: gzip.GzipFile (filename=None, mode=None, compresslevel=9,
          fileobj=None, mtime=None)

     Construtor para a classe *note GzipFile: 41a, que simula a maioria
     dos métodos de um *note objeto arquivo: 1203, com exceção do método
     *note truncate(): 1355.  Pelo menos um dos métodos 'fileobj' e
     'filename' deve receber um valor não trivial.

     A nova instância de classe é baseada em 'fileobj', que pode ser um
     arquivo comum, um objeto *note io.BytesIO: ed3. ou qualquer outro
     objeto que simule um arquivo.  O padrão é ‘None’, caso em que
     'filename' é aberto para fornecer um objeto arquivo.

     Quando 'fileobj' não é ‘None’, o argumento 'filename' é usado
     apenas para ser incluído no cabeçalho do arquivo ‘gzip’, que pode
     incluir o nome original do arquivo descompactado.  O padrão é o
     nome de arquivo 'fileobj', se discernível; caso contrário, o padrão
     é a string vazia e, neste caso, o nome original do arquivo não é
     incluído no cabeçalho.

     O argumento 'mode' pode ser qualquer um dos seguintes: ‘'r'’,
     ‘'rb'’, ‘'a'’, ‘'ab'’, ‘'w'’, ‘'wb'’, ‘'x'’ ou ‘'xb'’, dependendo
     se o arquivo será lido ou escrito.  O padrão é o modo de 'fileobj',
     se discernível; caso contrário, o padrão é ‘'rb'’.  Em versões
     futuras do Python, o modo de 'fileobj' não será usado.  É melhor
     sempre especificar 'mode' para escrita.

     Observe que o arquivo é sempre aberto em modo binário.  Para abrir
     um arquivo compactado em modo texto, use *note open(): 2b34. (ou
     envolva seu *note GzipFile: 41a. com um *note io.TextIOWrapper:
     7bc.).

     O argumento 'compresslevel' é um inteiro de ‘0’ a ‘9’ que controla
     o nível de compressão; ‘1’ é o mais rápido e produz a menor
     compressão, e ‘9’ é o mais lento e produz a maior compressão.  ‘0’
     significa sem compressão.  O padrão é ‘9’.

     O argumento opcional 'mtime' é o registro de data e hora solicitado
     pelo gzip.  O horário está no formato Unix, ou seja, segundos desde
     00:00:00 UTC, 1º de janeiro de 1970.  Se 'mtime' for omitido ou
     definido como ‘None’, o horário atual será usado.  Use 'mtime' = 0
     para gerar um fluxo compactado que não depende do horário de
     criação.

     Veja abaixo o atributo *note mtime: 2b35. que é definido durante a
     descompactação.

     Chamar o método ‘close()’ de um objeto *note GzipFile: 41a. não
     fecha 'fileobj', pois você pode querer adicionar mais material após
     os dados compactados.  Isso também permite que você passe um objeto
     *note io.BytesIO: ed3. aberto para escrita como 'fileobj' e
     recupere o buffer de memória resultante usando o método *note
     getvalue(): 2b36. do objeto *note io.BytesIO: ed3.

     *note GzipFile: 41a. suporta a interface *note io.BufferedIOBase:
     694, incluindo iteração e a instrução *note with: 5d2.  Apenas o
     método *note truncate(): 1355. não é implementado.

     *note GzipFile: 41a. também disponibiliza os seguintes métodos e
     atributos:

      -- Método: peek (n)

          Lê 'n' bytes não compactados sem avançar a posição do arquivo.
          O número de bytes retornados pode ser maior ou menor que o
          solicitado.

               Nota: Embora chamar *note peek(): 124c. não altere a
               posição do arquivo *note GzipFile: 41a, ele pode alterar
               a posição do objeto arquivo subjacente (por exemplo, se o
               *note GzipFile: 41a. foi construído com o parâmetro
               'fileobj').

          Adicionado na versão 3.2.

      -- Atributo: mode

          ‘'rb'’ para leitura e ‘'wb'’ para escrita.

          Alterado na versão 3.13: Em versões anteriores era um inteiro
          ‘1’ ou ‘2’.

      -- Atributo: mtime

          Ao descompactar, este atributo é definido como o último
          registro de data e hora no cabeçalho lido mais recentemente.
          É um inteiro que contém o número de segundos desde a era Unix
          (00:00:00 UTC, 1º de janeiro de 1970).  O valor inicial antes
          da leitura de qualquer cabeçalho é ‘None’.

      -- Atributo: name

          O caminho para o arquivo gzip no disco, como *note str: 44c.
          ou *note bytes: 1c2.  Equivalente à saída de *note
          os.fspath(): c6e. no caminho de entrada original, sem nenhuma
          outra normalização, resolução ou expansão.

     Alterado na versão 3.1: Foi adicionado suporte para a instrução
     *note with: 5d2, juntamente com o argumento do construtor 'mtime' e
     o atributo *note mtime: 2b35.

     Alterado na versão 3.2: Foi adicionado suporte para arquivos
     preenchidos com zeros e não pesquisáveis.

     Alterado na versão 3.3: O método *note io.BufferedIOBase.read1():
     2b38. agora está implementado.

     Alterado na versão 3.4: Adicionado suporte para os modos ‘'x'’ e
     ‘'xb'’.

     Alterado na versão 3.5: Adicionado suporte para escrever *note
     objetos bytes ou similares: d4f. arbitrários.  O método *note
     read(): 136d. agora aceita o argumento ‘None’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

     Descontinuado desde a versão 3.9: Abrir *note GzipFile: 41a. para
     escrita sem especificar o argumento 'mode' está descontinuado.

     Alterado na versão 3.12: Remove o atributo ‘filename’ e usa o
     atributo *note name: 50d.

 -- Função: gzip.compress (data, compresslevel=9, *, mtime=None)

     Compacta 'data', retornando um objeto *note bytes: 1c2. contendo os
     dados compactados.  'compresslevel' e 'mtime' têm o mesmo
     significado que no construtor de *note GzipFile: 41a. acima.

     Adicionado na versão 3.2.

     Alterado na versão 3.8: Adicionado o parâmetro 'mtime' para saída
     reproduzível.

     Alterado na versão 3.11: A velocidade é melhorada pela compactação
     de todos os dados de uma só vez, em vez de em fluxo contínuo.
     Chamadas com 'mtime' definido como ‘0’ são delegadas a *note
     zlib.compress(): 63f. para maior velocidade.  Nessa situação, a
     saída pode conter um valor de byte “OS” no cabeçalho gzip diferente
     de 255 “unknown”, conforme fornecido pela implementação subjacente
     do zlib.

     Alterado na versão 3.13: O byte do cabeçalho gzip do sistema
     operacional tem a garantia de ser definido como 255 quando esta
     função é usada, como era o caso na versão 3.10 e anteriores.

 -- Função: gzip.decompress (data)

     Descompacta 'data', retornando um objeto *note bytes: 1c2. contendo
     os dados descompactados.  Esta função é capaz de descompactar dados
     de gzip de vários membros (vários blocos gzip concatenados).
     Quando é certo que os dados contêm apenas um membro, a função *note
     zlib.decompress(): d2f. com 'wbits' definido como 31 é mais rápida.

     Adicionado na versão 3.2.

     Alterado na versão 3.11: A velocidade é melhorada ao descompactar
     os membros de uma só vez na memória, em vez de fazê-lo de forma
     contínua.

* Menu:

* Exemplos de uso::
* Interface de linha de comando: Interface de linha de comando<2>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/gzip.py


File: python.info,  Node: Exemplos de uso,  Next: Interface de linha de comando<2>,  Up: gzip — Suporte para arquivos gzip

5.13.2.1 Exemplos de uso
........................

Exemplo de como ler um arquivo comprimido:

     import gzip
     with gzip.open('/home/joe/arquivo.txt.gz', 'rb') as f:
         file_content = f.read()

Exemplo de como criar um arquivo comprimido com GZIP:

     import gzip
     content = b"Muito conteúdo aqui"
     with gzip.open('/home/joe/arquivo.txt.gz', 'wb') as f:
         f.write(content)

Exemplo de como comprimir um arquivo existente com GZIP:

     import gzip
     import shutil
     with open('/home/joe/arquivo.txt', 'rb') as f_in:
         with gzip.open('/home/joe/arquivo.txt.gz', 'wb') as f_out:
             shutil.copyfileobj(f_in, f_out)

Exemplo de como comprimir uma string binária com compressão GZIP:

     import gzip
     s_in = b"Muito conteúdo aqui"
     s_out = gzip.compress(s_in)

Ver também
..........

Módulo *note zlib: 133.

     O módulo básico de compactação de dados necessário para dar suporte
     ao formato de arquivo do ‘gzip’.

Caso a (des)compactação do gzip seja um gargalo, o pacote python-isal(1)
acelera a (des)compactação com uma API quase sempre compatível.

   ---------- Footnotes ----------

   (1) https://github.com/pycompression/python-isal


File: python.info,  Node: Interface de linha de comando<2>,  Prev: Exemplos de uso,  Up: gzip — Suporte para arquivos gzip

5.13.2.2 Interface de linha de comando
......................................

O módulo *note gzip: 67. fornece uma interface de linha de comando
simples para compactar ou descompactar arquivos.

Uma vez executado, o módulo *note gzip: 67. mantém o(s) arquivo(s) de
entrada.

Alterado na versão 3.8: Adiciona uma nova interface de linha de comando
com um mensagem de uso.  Por padrão, ao executar a CLI, o nível de
compactação padrão é 6.

* Menu:

* Opções de linha de comando::


File: python.info,  Node: Opções de linha de comando,  Up: Interface de linha de comando<2>

5.13.2.3 Opções de linha de comando
...................................

 -- Option: file

     Se o 'arquivo' não for especificado, ler de *note sys.stdin: 53d.

 -- Option: --fast

     Indica o método mais rápido de compressão (menor compressão)

 -- Option: --best

     Indica o método mais lento de compressão (melhor compressão).

 -- Option: -d, --decompress

     Descompacta o arquivo dado.

 -- Option: -h, --help

     Exibe a mensagem de ajuda.


File: python.info,  Node: bz2 — Suporte para compressão bzip2,  Next: lzma — Compressão usando o algoritmo LZMA,  Prev: gzip — Suporte para arquivos gzip,  Up: Compressão de Dados e Arquivamento

5.13.3 ‘bz2’ — Suporte para compressão ‘bzip2’
----------------------------------------------

'Código-fonte:' Lib/bz2.py(1)

__________________________________________________________________

Este módulo fornece uma interface abrangente para compactar e
descompactar dados usando o algoritmo de compactação bzip2.

O módulo *note bz2: 13. contém:

   * A função *note open(): 10cc. e a classe *note BZ2File: 86a. para
     leitura e escrita de arquivos compactados.

   * As classes *note BZ2Compressor: 1856. e *note BZ2Decompressor:
     1854. para (des)compressão incremental.

   * As funções *note compress(): 25ad. e *note decompress(): 10cd. para
     (des)compactação de uma só vez.

* Menu:

* (Des)compressão de arquivos: Des compressão de arquivos.
* (Des)compressão incremental: Des compressão incremental.
* (De)compressão de uma só vez (one-shot): De compressão de uma só vez one-shot.
* Exemplos de uso: Exemplos de uso<2>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/bz2.py


File: python.info,  Node: Des compressão de arquivos,  Next: Des compressão incremental,  Up: bz2 — Suporte para compressão bzip2

5.13.3.1 (Des)compressão de arquivos
....................................

 -- Função: bz2.open (filename, mode='rb', compresslevel=9,
          encoding=None, errors=None, newline=None)

     Abre um arquivo compactado com bzip2 no modo binário ou texto,
     retornando um *note objeto arquivo: 1203.

     Assim como no construtor para *note BZ2File: 86a, o argumento
     'filename' pode ser um nome de arquivo real (um objeto *note str:
     44c. ou *note bytes: 1c2.), ou um objeto arquivo existente para ler
     ou gravar.

     O argumento 'mode' pode ser qualquer um de ‘'r'’, ‘'rb'’, ‘'w'’,
     ‘'wb'’, ‘'x'’, ‘'xb'’, ‘'a'’ ou ‘'ab'’ para modo binário, ou
     ‘'rt'’, ‘'wt'’, ‘'xt'’ ou ‘'at'’ para modo texto.  O padrão é
     ‘'rb'’.

     O argumento 'compresslevel' é um inteiro de 1 a 9, como para o
     construtor *note BZ2File: 86a.

     Para o modo binário, esta função é equivalente ao construtor de
     *note BZ2File: 86a.: ‘BZ2File(filename, mode,
     compresslevel=compresslevel)’.  Neste caso, os argumentos
     'encoding', 'errors' e 'newline' não devem ser fornecidos.

     Para o modo texto, um objeto *note BZ2File: 86a. é criado e envolto
     em uma instância *note io.TextIOWrapper: 7bc. com a codificação
     especificada, comportamento de tratamento de erros e final(is) de
     linha.

     Adicionado na versão 3.3.

     Alterado na versão 3.4: O modo ‘'x'’ (criação exclusiva) foi
     adicionado.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Classe: bz2.BZ2File (filename, mode='r', *, compresslevel=9)

     Abre um arquivo compactado com bzip2 no modo binário.

     Se 'filename' for um objeto *note str: 44c. ou *note bytes: 1c2,
     abra o arquivo nomeado diretamente.  Caso contrário, 'filename'
     deve ser um *note objeto arquivo: 1203, que será usado para ler ou
     gravar os dados compactados.

     O argumento 'mode' pode ser ‘'r'’ para leitura (padrão), ‘'w'’ para
     substituição, ‘'x'’ para criação exclusiva ou ‘'a'’ para anexar.
     Estes podem ser equivalentemente dados como ‘'rb'’, ‘'wb'’, ‘'xb'’
     e ‘'ab'’ respectivamente.

     Se 'filename' for um objeto arquivo (ao invés de um nome de arquivo
     real), um modo de ‘'w'’ não truncará o arquivo e será equivalente a
     ‘'a'’.

     Se 'mode' for ‘'w'’ ou ‘'a'’, 'compresslevel' pode ser um inteiro
     entre ‘1’ e ‘9’ especificando o nível de compressão: ‘1’ produz a
     menor compressão e ‘9’ (padrão) produz a maior compactação.

     Se 'mode' for ‘'r'’, o arquivo de entrada pode ser a concatenação
     de vários fluxos compactados.

     *note BZ2File: 86a. fornece todos os membros especificados pelo
     *note io.BufferedIOBase: 694, exceto *note detach(): 2b49. e *note
     truncate(): 1355.  Iteração e a instrução *note with: 5d2. são
     suportadas.

     *note BZ2File: 86a. também fornece os seguintes métodos e
     atributos:

      -- Método: peek ([n])

          Retorna dados armazenados em buffer sem avançar a posição do
          arquivo.  Pelo menos um byte de dados será retornado (a menos
          que em EOF). O número exato de bytes retornados não é
          especificado.

               Nota: Enquanto chamar *note peek(): 2b4a. não altera a
               posição do arquivo de *note BZ2File: 86a, pode alterar a
               posição do objeto arquivo subjacente (por exemplo, se o
               *note BZ2File: 86a. foi construído passando um objeto
               arquivo para 'filename').

          Adicionado na versão 3.3.

      -- Método: fileno ()

          Retorna o endereço descritor de arquivo do arquivo subjacente.

          Adicionado na versão 3.3.

      -- Método: readable ()

          Retorna se o arquivo foi aberto para leitura.

          Adicionado na versão 3.3.

      -- Método: seekable ()

          Retorna se o arquivo suporta a busca.

          Adicionado na versão 3.3.

      -- Método: writable ()

          Retorna se o arquivo foi aberto para gravação.

          Adicionado na versão 3.3.

      -- Método: read1 (size=-1)

          Lê até o tamanho 'size' de bytes não compactados, tentando
          evitar várias leituras do fluxo subjacente.  Lê até um valor
          buffer de dados se o tamanho for negativo.

          Retorna ‘b''’ se o arquivo tiver atingido EOF, ou seja, o fim
          do arquivo.

          Adicionado na versão 3.3.

      -- Método: readinto (b)

          Lê bytes para 'b'.

          Retorna o número de bytes lidos (0 para EOF).

          Adicionado na versão 3.3.

      -- Atributo: mode

          ‘'rb'’ para leitura e ‘'wb'’ para escrita.

          Adicionado na versão 3.13.

      -- Atributo: name

          O nome do arquivo bzip2.  Equivalente ao atributo *note name:
          2b53. do *note objeto arquivo: 1203. subjacente.

          Adicionado na versão 3.13.

     Alterado na versão 3.1: Suporte para a instrução *note with: 5d2.
     foi adicionado.

     Alterado na versão 3.3: Foi adicionado suporte para 'filename' ser
     um *note objeto arquivo: 1203. em vez de um nome de arquivo real.

     O modo ‘'a'’ (anexar) foi adicionado, juntamente com suporte para
     leitura de arquivos multifluxo.

     Alterado na versão 3.4: O modo ‘'x'’ (criação exclusiva) foi
     adicionado.

     Alterado na versão 3.5: O método *note read(): 136d. agora aceita
     um argumento de ‘None’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

     Alterado na versão 3.9: O parâmetro 'buffering' foi removido.  Foi
     ignorado e descontinuado desde o Python 3.0.  Passe um objeto
     arquivo aberto para controlar como o arquivo é aberto.

     O parâmetro 'compresslevel' tornou-se somente-nomeado.

     Alterado na versão 3.10: Esta classe não é segura para threads
     diante de vários leitores ou escritores simultâneos, assim como
     suas classes equivalentes em *note gzip: 67. e *note lzma: 8a.
     sempre foram.


File: python.info,  Node: Des compressão incremental,  Next: De compressão de uma só vez one-shot,  Prev: Des compressão de arquivos,  Up: bz2 — Suporte para compressão bzip2

5.13.3.2 (Des)compressão incremental
....................................

 -- Classe: bz2.BZ2Compressor (compresslevel=9)

     Cria um novo objeto compressor.  Este objeto pode ser usado para
     compactar dados de forma incremental.  Para compactação única, use
     a função *note compress(): 25ad.

     'compresslevel', se fornecido, deve ser um inteiro entre ‘1’ e ‘9’.
     O padrão é ‘9’.

      -- Método: compress (data)

          Fornece dados para o objeto compressor.  Retorna um pedaço de
          dados compactados, se possível, ou uma string de bytes vazia,
          caso contrário.

          Quando você terminar de fornecer dados ao compactador, chame o
          método *note flush(): 2b56. para finalizar o processo de
          compressão.

      -- Método: flush ()

          Finaliza o processo de compactação.  Retorna os dados
          compactados deixados em buffers internos.

          O objeto compactador não pode ser usado após a chamada deste
          método.

 -- Classe: bz2.BZ2Decompressor

     Cria um novo objeto descompactador.  Este objeto pode ser usado
     para descompactar dados de forma incremental.  Para compactação
     única, use a função *note decompress(): 10cd.

          Nota: Esta classe não trata de forma transparente entradas
          contendo múltiplos fluxos compactados, ao contrário de *note
          decompress(): 10cd. e *note BZ2File: 86a.  Se você precisar
          descompactar uma entrada multifluxo com *note BZ2Decompressor:
          1854, você deve usar um novo descompactador para cada fluxo.

      -- Método: decompress (data, max_length=-1)

          Descomprime dados 'data' (um *note objeto bytes ou similar:
          d4f.), retornando dados não comprimidos como bytes.  Alguns
          dos 'data' podem ser armazenados em buffer internamente, para
          uso em chamadas posteriores para *note decompress(): 10cd.  Os
          dados retornados devem ser concatenados com a saída de
          qualquer chamada anterior para *note decompress(): 10cd.

          Se 'max_length' for não negativo, retornará no máximo
          'max_length' bytes de dados descomprimidos.  Se este limite
          for atingido e mais saída puder ser produzida, o atributo
          *note needs_input: 2b57. será definido como ‘False’.  Neste
          caso, a próxima chamada para *note decompress(): df4. pode
          fornecer 'data' como ‘b''’ para obter mais saída.

          Se todos os dados de entrada foram descomprimidos e retornados
          (seja porque era menor que 'max_length' bytes, ou porque
          'max_length' era negativo), o atributo *note needs_input:
          2b57. será definido como ‘True’ .

          A tentativa de descomprimir os dados após o final do fluxo ser
          atingido gera um *note EOFError: 131c.  Quaisquer dados
          encontrados após o final do fluxo são ignorados e salvos no
          atributo *note unused_data: 2b58.

          Alterado na versão 3.5: Adicionado o parâmetro 'max_length'.

      -- Atributo: eof

          ‘True’ se o marcador de fim de fluxo foi atingido.

          Adicionado na versão 3.3.

      -- Atributo: unused_data

          Dados encontrados após o término do fluxo comprimido.

          Se este atributo for acessado antes do final do fluxo ser
          alcançado, seu valor será ‘b''’.

      -- Atributo: needs_input

          ‘False’ se o método *note decompress(): df4. puder fornecer
          mais dados descomprimidos antes de exigir uma nova entrada não
          comprimida.

          Adicionado na versão 3.5.


File: python.info,  Node: De compressão de uma só vez one-shot,  Next: Exemplos de uso<2>,  Prev: Des compressão incremental,  Up: bz2 — Suporte para compressão bzip2

5.13.3.3 (De)compressão de uma só vez (one-shot)
................................................

 -- Função: bz2.compress (data, compresslevel=9)

     Compacta 'data', um *note objeto bytes ou similar: d4f.

     'compresslevel', se fornecido, deve ser um inteiro entre ‘1’ e ‘9’.
     O padrão é ‘9’.

     Para compressão incremental, use um *note BZ2Compressor: 1856.

 -- Função: bz2.decompress (data)

     Descompacta 'data', um *note objeto bytes ou similar: d4f.

     Se 'data' for a concatenação de vários fluxos compactados,
     descompacta todos os fluxos.

     Para descompressão incremental, use um *note BZ2Decompressor: 1854.

     Alterado na versão 3.3: Suporte para entradas multifluxo foi
     adicionado.


File: python.info,  Node: Exemplos de uso<2>,  Prev: De compressão de uma só vez one-shot,  Up: bz2 — Suporte para compressão bzip2

5.13.3.4 Exemplos de uso
........................

Abaixo estão alguns exemplos de uso típico do módulo *note bz2: 13.

Usando *note compress(): 25ad. e *note decompress(): 10cd. para
demonstrar a compactação de ida e volta:

     >>> import bz2
     >>> data = b"""\
     ... Donec rhoncus quis sapien sit amet molestie. Fusce scelerisque vel augue
     ... nec ullamcorper. Nam rutrum pretium placerat. Aliquam vel tristique lorem,
     ... sit amet cursus ante. In interdum laoreet mi, sit amet ultrices purus
     ... pulvinar a. Nam gravida euismod magna, non varius justo tincidunt feugiat.
     ... Aliquam pharetra lacus non risus vehicula rutrum. Maecenas aliquam leo
     ... felis. Pellentesque semper nunc sit amet nibh ullamcorper, ac elementum
     ... dolor luctus. Curabitur lacinia mi ornare consectetur vestibulum."""
     >>> c = bz2.compress(data)
     >>> len(data) / len(c)  # Data compression ratio
     1.513595166163142
     >>> d = bz2.decompress(c)
     >>> data == d  # Check equality to original object after round-trip
     True

Usando *note BZ2Compressor: 1856. para compressão incremental:

     >>> import bz2
     >>> def gen_data(chunks=10, chunksize=1000):
     ...     """Yield incremental blocks of chunksize bytes."""
     ...     for _ in range(chunks):
     ...         yield b"z" * chunksize
     ...
     >>> comp = bz2.BZ2Compressor()
     >>> out = b""
     >>> for chunk in gen_data():
     ...     # Provide data to the compressor object
     ...     out = out + comp.compress(chunk)
     ...
     >>> # Finish the compression process.  Call this once you have
     >>> # finished providing data to the compressor.
     >>> out = out + comp.flush()

O exemplo acima usa um fluxo de dados muito “não aleatório” (um fluxo de
partes ‘b"z"’).  Dados aleatórios tendem a compactar mal, enquanto dados
ordenados e repetitivos geralmente produzem uma alta taxa de
compactação.

Escrevendo e lendo um arquivo compactado com bzip2 no modo binário:

     >>> import bz2
     >>> data = b"""\
     ... Donec rhoncus quis sapien sit amet molestie. Fusce scelerisque vel augue
     ... nec ullamcorper. Nam rutrum pretium placerat. Aliquam vel tristique lorem,
     ... sit amet cursus ante. In interdum laoreet mi, sit amet ultrices purus
     ... pulvinar a. Nam gravida euismod magna, non varius justo tincidunt feugiat.
     ... Aliquam pharetra lacus non risus vehicula rutrum. Maecenas aliquam leo
     ... felis. Pellentesque semper nunc sit amet nibh ullamcorper, ac elementum
     ... dolor luctus. Curabitur lacinia mi ornare consectetur vestibulum."""
     >>> with bz2.open("myfile.bz2", "wb") as f:
     ...     # Write compressed data to file
     ...     unused = f.write(data)
     ...
     >>> with bz2.open("myfile.bz2", "rb") as f:
     ...     # Decompress data from file
     ...     content = f.read()
     ...
     >>> content == data  # Check equality to original object after round-trip
     True


File: python.info,  Node: lzma — Compressão usando o algoritmo LZMA,  Next: zipfile — Trabalha com arquivos ZIP,  Prev: bz2 — Suporte para compressão bzip2,  Up: Compressão de Dados e Arquivamento

5.13.4 ‘lzma’ — Compressão usando o algoritmo LZMA
--------------------------------------------------

Adicionado na versão 3.3.

'Código-fonte:' Lib/lzma.py(1)

__________________________________________________________________

Este módulo fornece classes e funções de conveniência para comprimir e
descomprimir dados usando o algoritmo de compressão LZMA. Também está
incluída uma interface de arquivo que oferece suporte aos formatos de
arquivo ‘.xz’ e legado ‘.lzma’ usados pelo utilitário ‘xz’, bem como
fluxos brutos comprimidos.

A interface fornecida por este módulo é muito semelhante à do módulo
*note bz2: 13.  Observe que *note LZMAFile: 1042. e *note bz2.BZ2File:
86a. 'não' são seguro para thread, portanto, se você precisar usar uma
única instância *note LZMAFile: 1042. de vários threads, é necessário
protegê-la com uma trava.

 -- Exceção: lzma.LZMAError

     Essa exceção é levantada quando ocorre um erro durante a compressão
     ou descompressão ou durante a inicialização do estado
     compressor/descompressor.

* Menu:

* Lendo e escrevendo arquivos comprimidos::
* Comprimindo e descomprimindo dados na memória::
* Diversos: Diversos<3>.
* Especificando cadeias de filtros personalizadas::
* Exemplos: Exemplos<8>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/lzma.py


File: python.info,  Node: Lendo e escrevendo arquivos comprimidos,  Next: Comprimindo e descomprimindo dados na memória,  Up: lzma — Compressão usando o algoritmo LZMA

5.13.4.1 Lendo e escrevendo arquivos comprimidos
................................................

 -- Função: lzma.open (filename, mode='rb', *, format=None, check=-1,
          preset=None, filters=None, encoding=None, errors=None,
          newline=None)

     Abre um arquivo comprimido com LZMA no modo binário ou texto,
     retornando um *note objeto arquivo: 1203.

     O argumento 'filename' pode ser um nome de arquivo real (dado como
     um objeto *note str: 44c, *note bytes: 1c2. ou *note caminho ou
     similar: 2a0.), neste caso o arquivo nomeado é aberto , ou pode ser
     um objeto arquivo existente para leitura ou escrita.

     O argumento 'mode' pode ser qualquer um de ‘"r"’, ‘"rb"’, ‘"w"’,
     ‘"wb"’, ‘"x"’, ‘"xb"’, ‘"a"’ ou ‘"ab"’ para modo binário, ou
     ‘"rt"’, ‘"wt"’, ‘"xt"’ , ou ‘"at"’ para o modo de texto.  O padrão
     é ‘"rb"’.

     Ao abrir um arquivo para leitura, os argumentos 'format' e
     'filters' têm os mesmos significados que em *note LZMADecompressor:
     1853.  Neste caso, os argumentos 'check' e 'preset' não devem ser
     usados.

     Ao abrir um arquivo para escrita, os argumentos 'format', 'check',
     'preset' e 'filters' têm os mesmos significados que em *note
     LZMACompressor: 1855.

     Para o modo binário, esta função é equivalente ao construtor *note
     LZMAFile: 1042.: ‘LZMAFile(filename, mode, ...)’.  Nesse caso, os
     argumentos 'encoding', 'errors' e 'newline' não devem ser
     fornecidos.

     Para o modo texto, um objeto *note LZMAFile: 1042. é criado e
     encapsulado em uma instância *note io.TextIOWrapper: 7bc. com a
     codificação especificada, comportamento de tratamento de erros e
     final(is) de linha.

     Alterado na versão 3.4: Adicionado suporte para os modos ‘"x"’,
     ‘"xb"’ e ‘"xt"’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Classe: lzma.LZMAFile (filename=None, mode='r', *, format=None,
          check=-1, preset=None, filters=None)

     Abre um arquivo comprimido com LZMA no modo binário.

     Um *note LZMAFile: 1042. pode envolver um *note objeto arquivo:
     1203. já aberto, ou operar diretamente em um arquivo nomeado.  O
     argumento 'filename' especifica o objeto arquivo a ser encapsulado
     ou o nome do arquivo a ser aberto (como um objeto *note str: 44c,
     *note bytes: 1c2. ou *note objeto caminho ou similar: 2a0.).  Ao
     agrupar um objeto arquivo existente, o arquivo agrupado não será
     fechado quando o *note LZMAFile: 1042. for fechado.

     O argumento 'mode' pode ser ‘"r"’ para leitura (padrão), ‘"w"’ para
     substituição, ‘"x"’ para criação exclusiva ou ‘"a"’ para anexar.
     Estes podem ser equivalentemente dados como ‘"rb"’, ‘"wb"’, ‘"xb"’
     e ‘"ab"’ respectivamente.

     Se 'filename' for um objeto arquivo (em vez de um nome de arquivo
     real), um modo de ‘"w"’ não truncará o arquivo e será equivalente a
     ‘"a"’.

     Ao abrir um arquivo para leitura, o arquivo de entrada pode ser a
     concatenação de vários fluxos comprimidos separados.  Estes são
     decodificados de forma transparente como um único fluxo lógico.

     Ao abrir um arquivo para leitura, os argumentos 'format' e
     'filters' têm os mesmos significados que em *note LZMADecompressor:
     1853.  Neste caso, os argumentos 'check' e 'preset' não devem ser
     usados.

     Ao abrir um arquivo para escrita, os argumentos 'format', 'check',
     'preset' e 'filters' têm os mesmos significados que em *note
     LZMACompressor: 1855.

     *note LZMAFile: 1042. suporta todos os membros especificados por
     *note io.BufferedIOBase: 694, exceto *note detach(): 2b49. e *note
     truncate(): 1355.  Iteração e a instrução *note with: 5d2. são
     suportadas.

     O método e os atributos a seguir também são fornecidos:

      -- Método: peek (size=-1)

          Retorna dados armazenados em buffer sem avançar a posição do
          arquivo.  Pelo menos um byte de dados será retornado, a menos
          que o EOF tenha sido atingido.  O número exato de bytes
          retornados não é especificado (o argumento 'size' é ignorado).

               Nota: Enquanto chamar *note peek(): 2b63. não altera a
               posição do arquivo de *note LZMAFile: 1042, pode alterar
               a posição do objeto arquivo subjacente (por exemplo, se o
               *note LZMAFile: 1042. foi construído passando um objeto
               arquivo para 'nome do arquivo').

      -- Atributo: mode

          ‘'rb'’ para leitura e ‘'wb'’ para escrita.

          Adicionado na versão 3.13.

      -- Atributo: name

          O nome do arquivo lzma.  Equivalente ao atributo *note name:
          2b53. do *note objeto arquivo: 1203. subjacente.

          Adicionado na versão 3.13.

     Alterado na versão 3.4: Adicionado suporte para os modos ‘"x"’ e
     ‘"xb"’.

     Alterado na versão 3.5: O método *note read(): 136d. agora aceita
     um argumento de ‘None’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.


File: python.info,  Node: Comprimindo e descomprimindo dados na memória,  Next: Diversos<3>,  Prev: Lendo e escrevendo arquivos comprimidos,  Up: lzma — Compressão usando o algoritmo LZMA

5.13.4.2 Comprimindo e descomprimindo dados na memória
......................................................

 -- Classe: lzma.LZMACompressor (format=FORMAT_XZ, check=-1,
          preset=None, filters=None)

     Cria um objeto compressão, que pode ser usado para comprimir dados
     de forma incremental.

     Para uma maneira mais conveniente de comprimir um único bloco de
     dados, consulte *note compress(): 2b67.

     O argumento 'format' especifica qual formato de contêiner deve ser
     usado.  Os valores possíveis são:

        * 
          ‘FORMAT_XZ’: O formato de contêiner ‘.xz’.

               Este é o formato padrão.

        * 
          ‘FORMAT_ALONE’: O formato de contêiner legado ‘.lzma’.

               Este formato é mais limitado que ‘.xz’ – ele não oferece
               suporte a verificações de integridade ou filtros
               múltiplos.

        * 
          ‘FORMAT_RAW’: Um fluxo de dados brutos, que não usa nenhum formato de contêiner.

               Esse especificador de formato não oferece suporte a
               verificações de integridade e exige que você sempre
               especifique uma cadeia de filtros personalizada (para
               compressão e descompressão).  Além disso, dados
               comprimidos dessa maneira não podem ser descomprimidos
               usando ‘FORMAT_AUTO’ (veja *note LZMADecompressor:
               1853.).

     O argumento 'check' especifica o tipo de verificação de integridade
     a ser incluída nos dados comprimidos.  Essa verificação é usada ao
     descomprimir, para garantir que os dados não foram corrompidos.  Os
     valores possíveis são:

        * ‘CHECK_NONE’: Sem verificação de integridade.  Este é o padrão
          (e o único valor aceitável) para ‘FORMAT_ALONE’ e
          ‘FORMAT_RAW’.

        * ‘CHECK_CRC32’: Verificação de redundância cíclica de 32 bits.

        * ‘CHECK_CRC64’: Verificação de redundância cíclica de 64 bits.
          Este é o padrão para ‘FORMAT_XZ’.

        * ‘CHECK_SHA256’: Algoritmo de hash seguro de 256 bits.

     Se a verificação especificada não for suportada, uma exceção *note
     LZMAError: 2b60. será levantada.

     As configurações de compressão podem ser especificadas como um
     nível de compressão predefinido (com o argumento 'preset') ou em
     detalhes como uma cadeia de filtros personalizada (com o argumento
     'filters').

     O argumento 'preset' (se fornecido) deve ser um inteiro entre ‘0’ e
     ‘9’ (inclusive), opcionalmente com OR com a constante
     ‘PRESET_EXTREME’.  Se nem 'preset' nem 'filters' forem fornecidos,
     o comportamento padrão é usar ‘PRESET_DEFAULT’ (nível predefinido
     ‘6’).  Predefinições mais altas produzem uma saída menor, mas
     tornam o processo de compressão mais lento.

          Nota: Além de consumir mais CPU, a compressão com
          predefinições mais altas também requer muito mais memória (e
          produz uma saída que precisa de mais memória para
          descompressão).  Com a predefinição ‘9’ por exemplo, a
          sobrecarga para um objeto *note LZMACompressor: 1855. pode
          chegar a 800 MiB. Por esse motivo, geralmente é melhor ficar
          com a predefinição padrão.

     O argumento 'filters' (se fornecido) deve ser um especificador de
     cadeia de filtros.  Veja *note Especificando cadeias de filtros
     personalizadas: 2b68. para detalhes.

      -- Método: compress (data)

          Comprime 'data' (um objeto *note bytes: 1c2.), retornando um
          objeto *note bytes: 1c2. contendo dados comprimidos para pelo
          menos parte da entrada.  Alguns dos 'data' podem ser
          armazenados internamente, para uso em chamadas posteriores
          para *note compress(): 2b67. e *note flush(): 2b6a.  Os dados
          retornados devem ser concatenados com a saída de quaisquer
          chamadas anteriores para *note compress(): 2b67.

      -- Método: flush ()

          Conclui o processo de compressão, retornando um objeto *note
          bytes: 1c2. contendo todos os dados armazenados nos buffers
          internos do compressor.

          O compressor não pode ser usado após a chamada deste método.

 -- Classe: lzma.LZMADecompressor (format=FORMAT_AUTO, memlimit=None,
          filters=None)

     Cria um objeto descompressor, que pode ser usado para descomprimir
     dados de forma incremental.

     Para uma maneira mais conveniente de descomprimir um fluxo
     comprimido inteiro de uma só vez, consulte *note decompress():
     2b6b.

     O argumento 'format' especifica o formato do contêiner que deve ser
     usado.  O padrão é ‘FORMAT_AUTO’, que pode descomprimir os arquivos
     ‘.xz’ e ‘.lzma’.  Outros valores possíveis são ‘FORMAT_XZ’,
     ‘FORMAT_ALONE’ e ‘FORMAT_RAW’.

     O argumento 'memlimit' especifica um limite (em bytes) na
     quantidade de memória que o descompressor pode usar.  Quando esse
     argumento é usado, a descompressão falhará com um *note LZMAError:
     2b60. se não for possível descomprimir a entrada dentro do limite
     de memória fornecido.

     O argumento 'filters' especifica a cadeia de filtros que foi usada
     para criar o fluxo que está sendo descomprimido.  Este argumento é
     necessário se 'format' for ‘FORMAT_RAW’, mas não deve ser usado
     para outros formatos.  Veja *note Especificando cadeias de filtros
     personalizadas: 2b68. para mais informações sobre cadeias de
     filtros.

          Nota: Esta classe não manipula de forma transparente entradas
          contendo múltiplos fluxos comprimidos, diferentemente de *note
          decompress(): 2b6b. e *note LZMAFile: 1042.  Para descomprimir
          uma entrada multi-fluxo com *note LZMADecompressor: 1853, você
          deve criar um novo descompactador para cada fluxo.

      -- Método: decompress (data, max_length=-1)

          Descomprime dados 'data' (um *note objeto bytes ou similar:
          d4f.), retornando dados não comprimidos como bytes.  Alguns
          dos 'data' podem ser armazenados em buffer internamente, para
          uso em chamadas posteriores para *note decompress(): 2b6b.  Os
          dados retornados devem ser concatenados com a saída de
          qualquer chamada anterior para *note decompress(): 2b6b.

          Se 'max_length' for não negativo, retornará no máximo
          'max_length' bytes de dados descomprimidos.  Se este limite
          for atingido e mais saída puder ser produzida, o atributo
          *note needs_input: 2b6c. será definido como ‘False’.  Neste
          caso, a próxima chamada para *note decompress(): e5b. pode
          fornecer 'data' como ‘b''’ para obter mais saída.

          Se todos os dados de entrada foram descomprimidos e retornados
          (seja porque era menor que 'max_length' bytes, ou porque
          'max_length' era negativo), o atributo *note needs_input:
          2b6c. será definido como ‘True’ .

          A tentativa de descomprimir os dados após o final do fluxo ser
          atingido gera um *note EOFError: 131c.  Quaisquer dados
          encontrados após o final do fluxo são ignorados e salvos no
          atributo *note unused_data: 2b6d.

          Alterado na versão 3.5: Adicionado o parâmetro 'max_length'.

      -- Atributo: check

          O ID da verificação de integridade usada pelo fluxo de
          entrada.  Pode ser ‘CHECK_UNKNOWN’ até que o suficiente da
          entrada tenha sido decodificado para determinar qual
          verificação de integridade ela usa.

      -- Atributo: eof

          ‘True’ se o marcador de fim de fluxo foi atingido.

      -- Atributo: unused_data

          Dados encontrados após o término do fluxo comprimido.

          Antes do final do fluxo ser alcançado, isso será ‘b""’.

      -- Atributo: needs_input

          ‘False’ se o método *note decompress(): e5b. puder fornecer
          mais dados descomprimidos antes de exigir uma nova entrada não
          comprimida.

          Adicionado na versão 3.5.

 -- Função: lzma.compress (data, format=FORMAT_XZ, check=-1,
          preset=None, filters=None)

     Comprime 'data' (um objeto *note bytes: 1c2.), retornando os dados
     comprimidos como um objeto *note bytes: 1c2.

     Veja *note LZMACompressor: 1855. acima para uma descrição dos
     argumentos 'format', 'check', 'preset' e 'filters'.

 -- Função: lzma.decompress (data, format=FORMAT_AUTO, memlimit=None,
          filters=None)

     Descomprime 'data' (um objeto *note bytes: 1c2.), retornando os
     dados não comprimidos como um objeto *note bytes: 1c2.

     Se 'data' forem a concatenação de vários fluxos comprimidos
     distintos, descomprime todos esses fluxos e retorna a concatenação
     dos resultados.

     Veja *note LZMADecompressor: 1853. acima para uma descrição dos
     argumentos 'format', 'memlimit' e 'filters'.


File: python.info,  Node: Diversos<3>,  Next: Especificando cadeias de filtros personalizadas,  Prev: Comprimindo e descomprimindo dados na memória,  Up: lzma — Compressão usando o algoritmo LZMA

5.13.4.3 Diversos
.................

 -- Função: lzma.is_check_supported (check)

     Retorna ‘True’ se a verificação de integridade fornecida for
     suportada neste sistema.

     ‘CHECK_NONE’ e ‘CHECK_CRC32’ são sempre suportados.  ‘CHECK_CRC64’
     e ‘CHECK_SHA256’ podem não estar disponíveis se você estiver usando
     uma versão do ‘liblzma’ que foi compilada com um conjunto de
     recursos limitado.


File: python.info,  Node: Especificando cadeias de filtros personalizadas,  Next: Exemplos<8>,  Prev: Diversos<3>,  Up: lzma — Compressão usando o algoritmo LZMA

5.13.4.4 Especificando cadeias de filtros personalizadas
........................................................

Um especificador de cadeia de filtros é uma sequência de dicionários,
onde cada dicionário contém o ID e as opções para um único filtro.  Cada
dicionário deve conter a chave ‘"id"’ e pode conter chaves adicionais
para especificar opções dependentes do filtro.  Os IDs de filtro válidos
são os seguintes:

   * Filtro Compression:

        * ‘FILTER_LZMA1’ (para ser usado com ‘FORMAT_ALONE’)

        * ‘FILTER_LZMA2’ (para ser utilizado com ‘FORMAT_XZ’ and
          ‘FORMAT_RAW’)

   * Filtro delta:

        * ‘FILTER_DELTA’

   * Filtros Branch-Call-Jump (BCJ):

        * ‘FILTER_X86’

        * ‘FILTER_IA64’

        * ‘FILTER_ARM’

        * ‘FILTER_ARMTHUMB’

        * ‘FILTER_POWERPC’

        * ‘FILTER_SPARC’

Uma cadeia de filtros pode consistir em até 4 filtros e não pode estar
vazia.  O último filtro na cadeia deve ser um filtro de compressão e
quaisquer outros filtros devem ser filtros delta ou BCJ.

Os filtros de compressão suportam as seguintes opções (especificadas
como entradas adicionais no dicionário que representa o filtro):

   * ‘preset’: Uma predefinição de compressão para usar como fonte de
     valores padrão para opções que não são especificadas
     explicitamente.

   * ‘dict_size’: Tamanho do dicionário em bytes.  Deve estar entre 4
     KiB e 1,5 GiB (inclusive).

   * ‘lc’: Número de bits de contexto literal.

   * ‘lp’: Número de bits de posição literal.  A soma ‘lc + lp’ deve ser
     no máximo 4.

   * ‘pb’: Número de bits de posição; deve ser no máximo 4.

   * ‘mode’: ‘MODE_FAST’ ou ‘MODE_NORMAL’.

   * ‘nice_len’: O que deve ser considerado um “tamanho agradável” para
     uma correspondência.  Deve ser 273 ou menos.

   * ‘mf’: Qual localizador de correspondências usar – ‘MF_HC3’,
     ‘MF_HC4’, ‘MF_BT2’, ‘MF_BT3’ ou ‘MF_BT4’.

   * ‘depth’: Profundidade máxima de pesquisa usada pelo localizador de
     correspondências.  0 (padrão) significa selecionar automaticamente
     com base em outras opções de filtro.

O filtro delta armazena as diferenças entre bytes, produzindo uma
entrada mais repetitiva para o compressor em certas circunstâncias.  Ele
suporta uma opção, ‘dist’.  Isso indica a distância entre bytes a ser
subtraída.  O padrão é 1, ou seja, pega as diferenças entre bytes
adjacentes.

Os filtros BCJ são destinados a serem aplicados ao código de máquina.
Eles convertem ramificações relativas, chamadas e saltos no código para
usar endereçamento absoluto, com o objetivo de aumentar a redundância
que pode ser explorada pelo compressor.  Esses filtros suportam uma
opção, ‘start_offset’.  Isso especifica o endereço que deve ser mapeado
para o início dos dados de entrada.  O padrão é 0.


File: python.info,  Node: Exemplos<8>,  Prev: Especificando cadeias de filtros personalizadas,  Up: lzma — Compressão usando o algoritmo LZMA

5.13.4.5 Exemplos
.................

Lendo em um arquivo comprimido:

     import lzma
     with lzma.open("file.xz") as f:
         file_content = f.read()

Criando um arquivo comprimido:

     import lzma
     data = b"Insira dados aqui"
     with lzma.open("file.xz", "w") as f:
         f.write(data)

Comprimindo dados na memória:

     import lzma
     data_in = b"Insert Data Here"
     data_out = lzma.compress(data_in)

Compressão incremental:

     import lzma
     lzc = lzma.LZMACompressor()
     out1 = lzc.compress(b"Alguns dados\n")
     out2 = lzc.compress(b"Outro pedaço de dados\n")
     out3 = lzc.compress(b"Ainda mais dados\n")
     out4 = lzc.flush()
     # Concatena todos os resultados parciais:
     result = b"".join([out1, out2, out3, out4])

Escrevendo dados comprimidos em um arquivo já aberto:

     import lzma
     with open("file.xz", "wb") as f:
         f.write(b"Este dados serão comprimidos\n")
         with lzma.open(f, "w") as lzf:
             lzf.write(b"Isso *vai* ser comprimidos\n")
         f.write(b"Não comprimidos\n")

Criando um arquivo comprimido usando uma cadeia de filtros
personalizada:

     import lzma
     my_filters = [
         {"id": lzma.FILTER_DELTA, "dist": 5},
         {"id": lzma.FILTER_LZMA2, "preset": 7 | lzma.PRESET_EXTREME},
     ]
     with lzma.open("file.xz", "w", filters=my_filters) as f:
         f.write(b"blá blá blá")


File: python.info,  Node: zipfile — Trabalha com arquivos ZIP,  Next: tarfile — Ler e gravar arquivos do tipo tar,  Prev: lzma — Compressão usando o algoritmo LZMA,  Up: Compressão de Dados e Arquivamento

5.13.5 ‘zipfile’ — Trabalha com arquivos ZIP
--------------------------------------------

'Código-fonte:' Lib/zipfile/(1)

__________________________________________________________________

O formato de arquivo ZIP é um padrão de compactação e arquivamento.
Este módulo fornece ferramentas para criar, ler, escrever, adicionar, e
listar um arquivo ZIP. Qualquer uso avançado deste módulo vai exigir um
entendimento do formato, como definido nas Notas de Aplicação do
PKZIP(2).

Esse módulo não trata arquivos ZIP multiparte.  Ele pode manipular
arquivos ZIP que usam as extensões ZIP64 (ou seja arquivos ZIP com
tamanho maior do que 4 Gb).  Ele suporta descriptografia de arquivos
criptografados dentro do ZIP, mas atualmente não pode criar um arquivo
criptografado.  A descriptografia é extremamente lenta pois é
implementada em Python nativo ao invés de C.

Este módulo define os seguintes itens:

 -- Exceção: zipfile.BadZipFile

     Este erro é levantado para arquivos ZIP corrompidos.

     Adicionado na versão 3.2.

 -- Exceção: zipfile.BadZipfile

     Alias para *note BadZipFile: 18f3, para compatibilidade com versões
     mais antigas de Python.

     Descontinuado desde a versão 3.2.

 -- Exceção: zipfile.LargeZipFile

     Este erro é levantado quando um arquivo ZIP precisa da
     funcionalidade ZIP64 que não está habilitada.

 -- Classe: zipfile.ZipFile

     A classe para ler e escrever arquivos ZIP. Veja a seção *note
     Objetos ZipFile: 2b79. para detalhes do construtor.

 -- Classe: zipfile.Path

     Classe que implementa um subconjunto da interface fornecida por
     *note pathlib.Path: 229, incluindo a interface completa *note
     importlib.resources.abc.Traversable: 1f3.

     Adicionado na versão 3.8.

 -- Classe: zipfile.PyZipFile

     Classe para criar arquivos ZIP contendo bibliotecas Python.

 -- Classe: zipfile.ZipInfo (filename='NoName', date_time=(1980, 1, 1,
          0, 0, 0))

     Classe usada para representar informação sobre um membro de um
     archive.  Instâncias desta classe são retornadas pelos métodos
     *note getinfo(): 2b7a. e *note infolist(): 2b7b. de objetos da
     classe *note ZipFile: 6c4.  A maioria dos usuários do módulo *note
     zipfile: 131. não vai precisar criar, mas apenas usar objetos
     criados pelo módulo.  'filename' deveria ser o caminho completo do
     membro do arquivo, e 'date_time' deveria ser uma tupla contendo
     seis campos que descrevem o momento da última modificação no
     arquivo; os campos são descritos na seção *note Objetos ZipInfo:
     2b7c.

     Alterado na versão 3.13: Um atributo público ‘compress_level’ foi
     adicionado para expor o ‘_compresslevel’ anteriormente protegido.
     O nome protegido mais antigo continua a funcionar como uma
     propriedade para compatibilidade com versões anteriores.

 -- Função: zipfile.is_zipfile (filename)

     Retorna ‘True’ se 'filename' é um arquivo ZIP válido baseado no seu
     “magic number”, caso contrário retorna ‘False’.  'filename' pode
     ser um arquivo ou um objeto arquivo ou similar também.

     Alterado na versão 3.1: Suporte para arquivo e objetos arquivo ou
     similares.

 -- Dado: zipfile.ZIP_STORED

     Código numérico para um membro de um arquivo descompactado

 -- Dado: zipfile.ZIP_DEFLATED

     Código numérico para o método de compactação usual.  Requer o
     módulo *note zlib: 133. .

 -- Dado: zipfile.ZIP_BZIP2

     Código numérico para o método de compactação BZIP2.  Requer o
     módulo *note bz2: 13.

     Adicionado na versão 3.3.

 -- Dado: zipfile.ZIP_LZMA

     Código numérico para o método de compactação LZMA. Requer o módulo
     *note lzma: 8a.

     Adicionado na versão 3.3.

          Nota: A especificação do formato ZIP incluiu suporte para
          compactação bzip2 desde 2001, e para compactação LZMA desde
          2006.  Porém, algumas ferramentas (incluindo versões mais
          antigas de Python) não suportam esses métodos de compactação,
          e podem recusar processar o arquivo ZIP como um todo, ou
          falhar em extrair arquivos individuais.

Ver também
..........

Notas da Aplicação do PKZIP(3)

     Documentação do formato de arquivo ZIP feita por Phil Katz, criador
     do formato e dos algoritmos usados.

Site do Info-ZIP(4)

     Informações sobre o programas de arquivamento e desenvolvimento de
     bibliotecas do projeto Info-ZIP.

* Menu:

* Objetos ZipFile::
* Objetos Path::
* Objetos PyZipFile::
* Objetos ZipInfo::
* Interface de linha de comando: Interface de linha de comando<3>.
* Armadilhas de descompressão::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/zipfile/

   (2) https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT

   (3) https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT

   (4) https://infozip.sourceforge.net/


File: python.info,  Node: Objetos ZipFile,  Next: Objetos Path,  Up: zipfile — Trabalha com arquivos ZIP

5.13.5.1 Objetos ZipFile
........................

 -- Classe: zipfile.ZipFile (file, mode='r', compression=ZIP_STORED,
          allowZip64=True, compresslevel=None, *,
          strict_timestamps=True, metadata_encoding=None)

     Abre um arquivo ZIP, onde 'file' pode ser um caminho para um
     arquivo (uma string), um objeto arquivo ou similar, ou um *note
     objeto caminho ou similar: 2a0.

     O parâmetro 'mode' deve ser ‘'r'’ para ler um arquivo existente,
     ‘'w'’ para truncar e gravar um novo arquivo, ‘'a'’ para adicionar a
     um arquivo existente, ou ‘'x'’ exclusivamente para criar e gravar
     um novo arquivo.  Se o 'mode' é ‘'x'’ e 'file' se refere a um
     arquivo existente, um *note FileExistsError: 1056. vai ser
     levantado.  Se o 'mode' é ‘'a'’ e 'file' se refere a um arquivo ZIP
     existente, então arquivos adicionais são adicionados ao mesmo.  Se
     'file' não se refere a um arquivo ZIP, então um novo arquivo ZIP é
     adicionado ao arquivo.  Isso diz respeito a adicionar um arquivo
     ZIP a um outro arquivo (como por exemplo ‘python.exe’).  Se o
     'mode' é ‘'a'’ e o arquivo não existe, ele será criado.  Se o
     'mode' é ‘'r'’ ou ‘'a'’, o arquivo deve ser percorrível.

     'compression' é o método de compactação ZIP para usar ao escrever o
     arquivo, e deve ser *note ZIP_STORED: 2b7d, *note ZIP_DEFLATED:
     2b7e, *note ZIP_BZIP2: 2b7f. ou *note ZIP_LZMA: 2b80.; valores
     desconhecidos devem causar o levantamento de *note
     NotImplementedError: 228.  Se *note ZIP_DEFLATED: 2b7e, *note
     ZIP_BZIP2: 2b7f. ou *note ZIP_LZMA: 2b80. for especificado mas o
     módulo correspondente (*note zlib: 133, *note bz2: 13. ou *note
     lzma: 8a.) não estiver disponível, é levado um *note RuntimeError:
     195.  O valor padrão é *note ZIP_STORED: 2b7d.

     Se 'allowZip64' é ‘True’ (valor padrão), então zipfile vai criar
     arquivos ZIP que usem as extensões ZIP64 quando o arquivo ZIP é
     maior do que 4 GiB. Se é ‘false’, *note zipfile: 131. levanta uma
     exceção quando o arquivo ZIP precisaria das extensões ZIP64.

     O parâmetro 'compresslevel' controla o nível de compactação para
     usar ao gravar no arquivo ZIP. Quando usado *note ZIP_STORED: 2b7d.
     ou *note ZIP_LZMA: 2b80. não tem efeito.  Quando usado *note
     ZIP_DEFLATED: 2b7e. inteiros de ‘0’ a ‘9’ são aceitos (veja *note
     zlib: 2b16. para mais informações).  Quando usado *note ZIP_BZIP2:
     2b7f. inteiros de ‘1’ a ‘9’ são aceitos (veja *note bz2: 86a. para
     mais informações).

     O argumento 'strict_timestamps', quando definido como ‘False’,
     permite compactar arquivos anteriores a 1980-01-01 com o custo de
     definir o carimbo de data/hora para 1980-01-01.  Comportamento
     semelhante ocorre com arquivos mais recentes que 2107-12-31, o
     carimbo de data/hora também é definido como o limite.

     Quando o modo é ‘'r'’, 'metadata_encoding' pode ser definido como o
     nome de um codec, que será usado para decodificar metadados, como
     os nomes dos membros e comentários ZIP.

     Se o arquivo é criado com modo ‘'w'’, ‘'x'’ ou ‘'a'’ e então
     ‘closed()’ sem adicionar nada ao arquivo, a estrutura própria para
     um arquivo vazio será escrita no arquivo.

     ZipFile também é um gerenciador de contexto e portanto suporta a
     instrução *note with: 5d2.  Neste exemplo, 'myzip' é fechado ao
     final da execução da instrução ‘with’ – mesmo que ocorra uma
     exceção:

          with ZipFile('spam.zip', 'w') as myzip:
              myzip.write('eggs.txt')

          Nota: 'metadata_encoding' é uma configuração em toda a
          instância para o ZipFile.  Não é possível definir isso em uma
          base por membro.

          Este atributo é uma solução alternativa para implementações
          legadas que produzem arquivos com nomes na codificação da
          localidade atual ou página de código (principalmente no
          Windows).  De acordo com o padrão .ZIP, a codificação dos
          metadados pode ser especificada como página de código IBM
          (padrão) ou UTF-8 por meio de um sinalizador no cabeçalho do
          arquivo.  Esse sinalizador tem precedência sobre
          'metadata_encoding', que é uma extensão específica do Python.

     Alterado na versão 3.2: Adicionado o uso de *note ZipFile: 6c4.
     como um gerenciador de contexto.

     Alterado na versão 3.3: Adicionado suporte para compactação *note
     bzip2: 13. e *note lzma: 8a.

     Alterado na versão 3.4: Extensões ZIP64 são habilitadas por padrão.

     Alterado na versão 3.5: Adicionado suporte para escrever em streams
     não percorríveis.  Adicionado suporte ao modo ‘'x'’.

     Alterado na versão 3.6: Anteriormente, um simples *note
     RuntimeError: 195. era levantado para valores de compactação
     desconhecidos.

     Alterado na versão 3.6.2: O parâmetro 'file' aceita um *note objeto
     caminho ou similar: 2a0.

     Alterado na versão 3.7: Adicionado o parâmetro 'compresslevel'.

     Alterado na versão 3.8: O parâmetro somente-nomeado
     'strict_timestamps'.

     Alterado na versão 3.11: Adicionado suporte para especificar a
     codificação do nome do membro ao ler metadados no diretório e
     cabeçalhos de arquivo do arquivo zip.

 -- Método: ZipFile.close ()

     Fecha o arquivo.  Você deve chamar *note close(): 2b82. antes de
     sair do seu programa ou registros essenciais não serão gravados.

 -- Método: ZipFile.getinfo (name)

     Retorna um objeto *note ZipInfo: d2c. com informações sobre o
     'name' do membro do arquivo.  Chamar *note getinfo(): 2b7a. para um
     nome não encontrado no arquivo levanta um *note KeyError: 344.

 -- Método: ZipFile.infolist ()

     Retorna uma lista contendo um objeto *note ZipInfo: d2c. para cada
     membro do arquivo.  Os objetos estão na mesma ordem das entradas no
     arquivo ZIP em disco se um arquivo existente foi aberto.

 -- Método: ZipFile.namelist ()

     Retorna uma lista de membros do arquivo por nome.

 -- Método: ZipFile.open (name, mode='r', pwd=None, *,
          force_zip64=False)

     Acessa um membro do arquivo como um objeto binário arquivo ou
     similar.  'name' pode ser o nome de um arquivo membro ou um objeto
     *note ZipInfo: d2c.  O parâmetro 'mode', se informado, deve ser
     ‘'r'’ (valor padrão) or ‘'w'’.  'pwd' é a senha usada para
     descriptografar arquivos ZIP criptografados como um objeto *note
     bytes: 1c2.

     *note open(): 41b. também é um gerenciador de contexto e, portanto,
     suporta a instrução *note with: 5d2.:

          with ZipFile('spam.zip') as myzip:
              with myzip.open('eggs.txt') as myfile:
                  print(myfile.read())

     Com 'mode' ‘'r'’ o objeto arquivo ou similar (‘ZipExtFile’) é
     somente leitura e fornece os seguintes métodos: *note read(): 136d,
     *note readline(): 241f, *note readlines(): 24c7, *note seek():
     12ce, *note tell(): 13f3, *note __iter__(): 1e4a, *note __next__():
     1310.  Esses objetos podem operar independentemente do ZipFile.

     Com ‘mode='w'’, é retornado um manipulador de arquivo, que suporta
     o método *note write(): cfc.  Quando um manipulador de arquivo
     modificável é aberto, tentativas de ler ou gravar outros arquivos
     no arquivo ZIP levanta um *note ValueError: 202.

     Em ambos os casos o objeto arquivo ou similar também possui
     atributos ‘name’, que é equivalente ao nome de um arquivo dentro do
     arquivo, e ‘mode’, que é ‘'rb'’ ou ‘'wb'’ dependendo do modo de
     entrada.

     Ao gravar um arquivo, se o tamanho do arquivo não é conhecido mas
     pode exceder 2 GiB, passe ‘force_zip64=True’ para assegurar que o
     formato do header é capaz de suportar arquivos grandes.  Se o
     tamanho do arquivo é conhecido, construa um objeto *note ZipInfo:
     d2c. com *note file_size: 2b84. informado, então use-o como
     parâmetro 'name'.

          Nota: Os métodos *note open(): 41b, *note read(): 2b85. e
          *note extract(): 2b86. podem receber um nome de arquivo ou um
          objeto *note ZipInfo: d2c.  Você vai gostar disso quando
          tentar ler um arquivo ZIP que contém membros com nomes
          duplicados.

     Alterado na versão 3.6: Removido suporte ao ‘mode='U'’.  Uso de
     *note io.TextIOWrapper: 7bc. para leitura de arquivos texto
     compactados em modo de *note novas linhas universais: d5c.

     Alterado na versão 3.6: *note ZipFile.open(): 41b. agora pode ser
     usado para escrever arquivos no aquivo compactado com a opção
     ‘mode='w'’.

     Alterado na versão 3.6: Chama *note open(): 41b. em um ZipFile
     fechado levanta um *note ValueError: 202.  Anteriormente, um *note
     RuntimeError: 195. era levantado.

     Alterado na versão 3.13: Adicionados atributos ‘name’ e ‘mode’ para
     o objeto arquivo ou similar gravável.  O valor do atributo ‘mode’
     para o objeto arquivo ou similar legível foi alterado de ‘'r'’ para
     ‘'rb'’.

 -- Método: ZipFile.extract (member, path=None, pwd=None)

     Extrai um membro do arquivo para o diretório atual; 'member' deve
     ser o nome completo ou um objeto *note ZipInfo: d2c.  A informação
     do arquivo é extraída com maior precisão possível.  'path'
     especifica um outro diretório em que deve ser gravado.  'member'
     pode ser um nome de arquivo ou um objeto *note ZipInfo: d2c.  'pwd'
     é a senha usada para criptografar arquivos como um objeto *note
     bytes: 1c2.

     Retorna o caminho normalizado criado (um diretório ou novo
     arquivo).

          Nota: Se um nome de arquivo membro é um caminho absoluto, o
          drive/UNC e (contra)barras no início serão removidos, por
          exemplo: ‘///foo/bar’ se torna ‘foo/bar’ no Unix, e
          ‘C:\foo\bar’ vira ‘foo\bar’ no Windows.  E todos os
          componentes ‘".."’ no nome de um arquivo membro serão
          removidos, por exemplo: ‘../../foo../../ba..r’ vira
          ‘foo../ba..r’.  No Windows caracteres ilegais (‘:’, ‘<’, ‘>’,
          ‘|’, ‘"’, ‘?’, and ‘*’) são substituídos por underscore (‘_’).

     Alterado na versão 3.6: Chama *note extract(): 2b86. em um ZipFile
     fechado levanto um *note ValueError: 202.  Anteriormente, um *note
     RuntimeError: 195. era levantado.

     Alterado na versão 3.6.2: O parâmetro 'path' aceita um *note objeto
     caminho ou similar: 2a0.

 -- Método: ZipFile.extractall (path=None, members=None, pwd=None)

     Extrai todos os membros de um arquivo para o diretório atual.
     'path' especifica um diretório diferente para gravar os arquivos
     extraídos.  'members' é opcional e deve ser um sub-conjunto da
     lista retornada por *note namelist(): 2b83.  'pwd' é uma senha
     usada para criptografar arquivos como um objeto *note bytes: 1c2.

          Aviso: Nunca extrai arquivos de fontes não confiáveis sem
          inspeção prévia.  É possível que os arquivos sejam criados
          fora do 'path', por exemplo membros que tem nomes absolutos de
          arquivos começando com ‘"/"’ ou nomes com dois pontos ‘".."’.
          Este módulo tenta prevenir isto.  Veja nota em *note
          extract(): 2b86.

     Alterado na versão 3.6: Chama *note extractall(): 2b87. em um
     ZipFile fechado levanta um *note ValueError: 202.  Anteriormente,
     um *note RuntimeError: 195. era levantado.

     Alterado na versão 3.6.2: O parâmetro 'path' aceita um *note objeto
     caminho ou similar: 2a0.

 -- Método: ZipFile.printdir ()

     Imprime a tabela de conteúdos de um arquivo para ‘sys.stdout’.

 -- Método: ZipFile.setpassword (pwd)

     Define 'pwd' (um objeto *note bytes: 1c2.) como senha padrão para
     extrair arquivos criptografados.

 -- Método: ZipFile.read (name, pwd=None)

     Retorna os bytes do arquivo 'name' no arquivo compactado.  'name' é
     o nome do arquivo no arquivo compactado, ou um objeto *note
     ZipInfo: d2c.  O arquivo compactado deve estar aberto para leitura
     ou acréscimo.  'pwd' é a senha usada para arquivos criptografados
     como um objeto *note bytes: 1c2. e, se especificada, vai sobrepor a
     senha padrão configurada com *note setpassword(): 2b89.  Chamar
     *note read(): 2b85. em um ZipFile que use um método de compactação
     diferente de *note ZIP_STORED: 2b7d, *note ZIP_DEFLATED: 2b7e,
     *note ZIP_BZIP2: 2b7f. ou *note ZIP_LZMA: 2b80. levanta um *note
     NotImplementedError: 228.  Um erro também é levantado se o módulo
     de compactação correspondente não está disponível.

     Alterado na versão 3.6: Chama *note read(): 2b85. em um ZipFile
     fechado levanta um *note ValueError: 202.  Anteriormente, um *note
     RuntimeError: 195. era levantado.

 -- Método: ZipFile.testzip ()

     Lê todos os arquivos no arquivo compactado e verifica seus CRC’s e
     cabeçalhos de arquivo.  Retorna o nome do primeiro arquivo
     corrompido, or então retorna ‘None’.

     Alterado na versão 3.6: Chama *note testzip(): 2b8a. em um ZipFile
     fechado levanta um *note ValueError: 202.  Anteriormente, um *note
     RuntimeError: 195. era levantado.

 -- Método: ZipFile.write (filename, arcname=None, compress_type=None,
          compresslevel=None)

     Grava o arquivo chamado 'filename' no arquivo compactado, dando ao
     arquivo compactado o nome 'arcname' (por padrão, este é o mesmo de
     'filename', mas sem a letra do drive e com separadores removidos do
     início do nome).  Se informado, 'compress_type' sobrescreve o valor
     dado ao parâmetro 'compression' do construtor para a nova entrada.
     Da mesma forma, 'compresslevel' vai sobrescrever o construtor se
     informado.  O arquivo compactado deve ser aberto em modo ‘'w'’,
     ‘'x'’ ou ‘'a'’.

          Nota: O padrão de arquivo ZIP historicamente não especificava
          uma codificação de metadados, mas recomendava fortemente o
          CP437 (a codificação original do PC da IBM) para
          interoperabilidade.  Versões recentes permitem o uso de
          (somente) UTF-8.  Neste módulo, o UTF-8 será automaticamente
          usado para escrever os nomes dos membros se eles contiverem
          caracteres não ASCII. Não é possível escrever nomes de membros
          em qualquer codificação que não seja ASCII ou UTF-8.

          Nota: Nomes de arquivo compactado devem ser relativos a raiz
          do mesmo, isto é, não devem começar com um separador de
          caminho.

          Nota: Se ‘arcname’ (ou ‘filename’, se ‘arcname’ não for
          informado) contém um byte nulo, o nome do arquivo no arquivo
          compactado será truncado no byte nulo.

          Nota: Uma barra inicial no nome do arquivo pode fazer com que
          o arquivo seja impossível de abrir em alguns programas zip em
          sistemas Windows.

     Alterado na versão 3.6: Chama *note write(): d70. em um ZipFile
     criado com modo ‘'r'’ ou em um ZipFile fechado levanta um *note
     ValueError: 202.  Anteriormente, um *note RuntimeError: 195. era
     levantado

 -- Método: ZipFile.writestr (zinfo_or_arcname, data,
          compress_type=None, compresslevel=None)

     Grava um arquivo no arquivo compactado.  O conteúdo é 'data', que
     pode ser uma instância de *note str: 44c. ou de *note bytes: 1c2.;
     Se é uma *note str: 44c, ela é encodada como UTF-8 primeiro.
     'zinfo_or_arcname' é o nome que será dado ao arquivo no arquivo
     compactado, ou uma instância de *note ZipInfo: d2c.  Se é uma
     instância, pelo menos o nome do arquivo, a data, e a hora devem ser
     informados.  Se é um nome, a data e hora recebem a data e hora
     atual.  O arquivo compactado deve ser aberto em modo ‘'w'’, ‘'x'’
     ou ‘'a'’.

     Se informado, 'compress_type' sobrescreve o valor do parâmetro
     'compression' do construtor para a nova entrada, ou no
     'zinfo_or_arcname' (se é uma instância de *note ZipInfo: d2c.).  Da
     mesma forma, 'compresslevel' vai sobrescrever o construtor se
     informado.

          Nota: Quando é passada uma instância de *note ZipInfo: d2c. ou
          o parâmetro 'zinfo_or_arcname', o método de compactação usado
          será aquele especificado no 'compress_type' da instância de
          *note ZipInfo: d2c.  Por padrão, o construtor da classe *note
          ZipInfo: d2c. seta este membro para *note ZIP_STORED: 2b7d.

     Alterado na versão 3.2: O argumento 'compress_type'.

     Alterado na versão 3.6: Chama *note writestr(): 136f. em um ZipFile
     criado com modo ‘'r'’ ou em um ZipFile fechado levanta um *note
     ValueError: 202.  Anteriormente, um *note RuntimeError: 195. era
     levantado.

 -- Método: ZipFile.mkdir (zinfo_or_directory, mode=511)

     Cria um diretório dentro do arquivo.  Se 'zinfo_or_directory' for
     uma string, um diretório é criado dentro do arquivo com o modo
     especificado no argumento 'mode'.  No entanto, se
     'zinfo_or_directory' for uma instância *note ZipInfo: d2c, o
     argumento 'mode' é ignorado.

     O arquivo deve ser aberto com o modo ‘'w'’, ‘'x'’ ou ‘'a'’.

     Adicionado na versão 3.11.

Os seguintes atributos de dados também estão disponíveis:

 -- Atributo: ZipFile.filename

     Nome do arquivo ZIP.

 -- Atributo: ZipFile.debug

     O nível de saída de debug para usar.  Pode ser setado de ‘0’ (valor
     padrão, sem nenhuma saída) a ‘3’ (com mais saída).  A informação de
     debug é escrita em ‘sys.stdout’.

 -- Atributo: ZipFile.comment

     O comentário associado ao arquivo ZIP como um objeto *note bytes:
     1c2.  Se atribuir um comentário a uma instância *note ZipFile: 6c4.
     criada com o modo ‘'w'’, ‘'x'’ ou ‘'a'’, não deve ser maior que
     65535 bytes.  Comentários mais longos do que isso serão truncados.


File: python.info,  Node: Objetos Path,  Next: Objetos PyZipFile,  Prev: Objetos ZipFile,  Up: zipfile — Trabalha com arquivos ZIP

5.13.5.2 Objetos Path
.....................

 -- Classe: zipfile.Path (root, at='')

     Construir um objeto Path a partir de um arquivo zip ‘root’ (que
     pode ser uma instância *note ZipFile: 6c4. ou ‘file’ adequado para
     passar para o construtor *note ZipFile: 6c4.).

     ‘at’ especifica a localização deste caminho dentro do arquivo zip,
     por exemplo, “dir/arquivo.txt”, “dir/” ou “”.  O padrão é a string
     vazia, indicando a raiz.

          Nota: A classe *note Path: 6c9. não sanitiza nomes de arquivos
          dentro do arquivo ZIP. Ao contrário dos métodos *note
          ZipFile.extract(): 2b86. e *note ZipFile.extractall(): 2b87, é
          responsabilidade do chamador validar ou sanitizar nomes de
          arquivos para evitar vulnerabilidades de travessia de caminho
          (por exemplo, nomes de arquivos contendo “..” ou caminhos
          absolutos).  Ao lidar com arquivos não confiáveis, considere
          resolver nomes de arquivos usando *note os.path.abspath():
          135f. e verificar o diretório de destino com *note
          os.path.commonpath(): e6a.

Objetos Path expõem os seguintes recursos de objetos *note pathlib.Path:
229.:

Objetos Path podem ser percorridos usando o operador ‘/’ ou ‘joinpath’.

 -- Atributo: Path.name

     O componente final do caminho.

 -- Método: Path.open (mode='r', *, pwd, **)

     Invoca *note ZipFile.open(): 41b. no caminho atual.  Permite a
     abertura para leitura ou escrita, texto ou binário através dos
     modos suportados: “r”, “w”, “rb”, “wb”.  Argumentos posicionais e
     argumentos nomeados são passados para *note io.TextIOWrapper: 7bc.
     quando abertos como texto e ignorados caso contrário.  ‘pwd’ é o
     parâmetro ‘pwd’ para *note ZipFile.open(): 41b.

     Alterado na versão 3.9: Adicionado suporte para modos de texto e
     binários para aberto.  O modo padrão agora é texto.

     Alterado na versão 3.11.2: O parâmetro ‘encoding’ pode ser
     fornecido como um argumento posicional sem causar um *note
     TypeError: 2c3.  Como poderia em 3.9.  O código que precisa ser
     compatível com as versões 3.10 e 3.11 não corrigidas deve passar
     todos os argumentos de *note io.TextIOWrapper: 7bc, incluindo
     ‘encoding’, como palavras reservadas.

 -- Método: Path.iterdir ()

     Enumera os filhos do diretório atual.

 -- Método: Path.is_dir ()

     Retorna ‘True’ se o contexto atual fizer referência a um diretório.

 -- Método: Path.is_file ()

     Retorna ‘True’ se o contexto atual fizer referência a um arquivo.

 -- Método: Path.is_symlink ()

     Retorna ‘True’ se o contexto atual fizer referência a um link
     simbólico.

     Adicionado na versão 3.12.

     Alterado na versão 3.13: Anteriormente, ‘is_symlink’ retornava
     ‘False’ incondicionalmente.

 -- Método: Path.exists ()

     Retorna ‘True’ se o contexto atual fizer referência a um arquivo ou
     diretório no arquivo zip.

 -- Dado: Path.suffix

     A última parte separada por pontos do componente final, se houver.
     Isso é comumente chamado de extensão de arquivo.

     Adicionado na versão 3.11: Adicionada a propriedade *note
     Path.suffix: 6c7.

 -- Dado: Path.stem

     O componente final do caminho, sem seu sufixo.

     Adicionado na versão 3.11: Adicionada a propriedade *note
     Path.stem: 6c6.

 -- Dado: Path.suffixes

     Uma lista dos sufixos do caminho, comumente chamados de extensões
     de arquivo.

     Adicionado na versão 3.11: Adicionada a propriedade *note
     Path.suffixes: 6c8.

 -- Método: Path.read_text (*, **)

     Leia o arquivo atual como texto Unicode.  Argumentos posicionais e
     argumentos nomeados são passados para *note io.TextIOWrapper: 7bc.
     (exceto ‘buffer’, que está implícito no contexto).

     Alterado na versão 3.11.2: O parâmetro ‘encoding’ pode ser
     fornecido como um argumento posicional sem causar um *note
     TypeError: 2c3.  Como poderia em 3.9.  O código que precisa ser
     compatível com as versões 3.10 e 3.11 não corrigidas deve passar
     todos os argumentos de *note io.TextIOWrapper: 7bc, incluindo
     ‘encoding’, como palavras reservadas.

 -- Método: Path.read_bytes ()

     Lê o arquivo atual como bytes.

 -- Método: Path.joinpath (*other)

     Retorna um novo objeto Path com cada um dos 'outros' argumentos
     unidos.  Os seguintes são equivalentes:

          >>> Path(...).joinpath('child').joinpath('grandchild')
          >>> Path(...).joinpath('child', 'grandchild')
          >>> Path(...) / 'child' / 'grandchild'

     Alterado na versão 3.10: Antes de 3.10, ‘joinpath’ não estava
     documentado e aceitava exatamente um parâmetro.

O projeto zipp(1) fornece backports da funcionalidade mais recente de
objeto caminho para versões mais antigas do Pythons.  Use ‘zipp.Path’
internamente de ‘zipfile.Path’ para acesso antecipado às alterações.

   ---------- Footnotes ----------

   (1) https://pypi.org/project/zipp/


File: python.info,  Node: Objetos PyZipFile,  Next: Objetos ZipInfo,  Prev: Objetos Path,  Up: zipfile — Trabalha com arquivos ZIP

5.13.5.3 Objetos PyZipFile
..........................

O construtor *note PyZipFile: 102f. usa os mesmos parâmetros que o
construtor *note ZipFile: 6c4, e um parâmetro adicional, 'otimize'.

 -- Classe: zipfile.PyZipFile (file, mode='r', compression=ZIP_STORED,
          allowZip64=True, optimize=-1)

     Alterado na versão 3.2: Adicionado o parâmetro 'optimize'.

     Alterado na versão 3.4: Extensões ZIP64 são habilitadas por padrão.

     As instâncias têm um método além daqueles dos objetos *note
     ZipFile: 6c4.:

      -- Método: writepy (pathname, basename='', filterfunc=None)

          Pesquisa por arquivos ‘*.py’ e adiciona o arquivo
          correspondente ao arquivo.

          Se o parâmetro 'optimize' para *note PyZipFile: 102f. não foi
          fornecido ou ‘-1’, o arquivo correspondente é um arquivo
          ‘*.pyc’, compilando se necessário.

          Se o parâmetro 'Optimize' para *note PyZipFile: 102f. era ‘0’,
          ‘1’ ou ‘2’, apenas arquivos com esse nível de otimização (ver
          *note compile(): 192.) são adicionados ao o arquivo,
          compilando se necessário.

          Se 'pathname' for um arquivo, o nome do arquivo deverá
          terminar com ‘.py’, e apenas o arquivo (‘*.pyc’
          correspondente) será adicionado no nível superior (sem
          informações do caminho).  Se 'pathname' for um arquivo que não
          termine com ‘.py’, um *note RuntimeError: 195. será levantado.
          Se for um diretório, e o diretório não for um diretório de
          pacotes, todos os arquivos ‘*.pyc’ serão adicionados no nível
          superior.  Se o diretório for um diretório de pacotes, todos
          ‘*.pyc’ serão adicionados sob o nome do pacote como um caminho
          de arquivo e, se algum subdiretório for um diretório de
          pacotes, todos serão adicionados recursivamente na ordem de
          classificação.

          'basename' destina-se apenas a uso interno.

          'filterfunc', se fornecido, deve ser uma função que recebe um
          único argumento de string.  Cada caminho será passado
          (incluindo cada caminho de arquivo completo individual) antes
          de ser adicionado ao arquivo.  Se 'filterfunc' retornar um
          valor falso, o caminho não será adicionado e, se for um
          diretório, seu conteúdo será ignorado.  Por exemplo, se nossos
          arquivos de teste estão todos nos diretórios ‘test’ ou começam
          com a string ‘test_’, podemos usar um 'filterfunc' para
          excluí-los:

               >>> zf = PyZipFile('myprog.zip')
               >>> def notests(s):
               ...     fn = os.path.basename(s)
               ...     return (not (fn == 'test' or fn.startswith('test_')))
               ...
               >>> zf.writepy('myprog', filterfunc=notests)

          O método *note writepy(): 102e. faz arquivos com nomes de
          arquivo como este:

               string.pyc                   # Nome de nível superior
               test/__init__.pyc            # Diretório do pacote
               test/testall.pyc             # Módulo test.testall
               test/bogus/__init__.pyc      # Diretório do subpacote
               test/bogus/myfile.pyc        # Submódulo test.bogus.myfile

          Alterado na versão 3.4: Adicionado o parâmetro 'filterfunc'.

          Alterado na versão 3.6.2: O parâmetro 'pathname' aceita um
          *note objeto caminho ou similar: 2a0.

          Alterado na versão 3.7: A recursão classifica as entradas de
          diretório.


File: python.info,  Node: Objetos ZipInfo,  Next: Interface de linha de comando<3>,  Prev: Objetos PyZipFile,  Up: zipfile — Trabalha com arquivos ZIP

5.13.5.4 Objetos ZipInfo
........................

Instâncias da classe *note ZipInfo: d2c. são retornadas pelos métodos
*note getinfo(): 2b7a. e *note infolist(): 2b7b. dos objetos *note
ZipFile: 6c4.  Cada objeto armazena informações sobre um único membro do
arquivo ZIP.

Existe um método de classe para fazer uma instância *note ZipInfo: d2c.
para um arquivo de sistema de arquivos:

 -- Método: classmethod ZipInfo.from_file (filename, arcname=None, *,
          strict_timestamps=True)

     Constrói uma instância *note ZipInfo: d2c. para um arquivo no
     sistema de arquivos, em preparação para adicioná-lo a um arquivo
     zip.

     'filename' deve ser o caminho para um arquivo ou diretório no
     sistema de arquivos.

     Se 'arcname' for especificado, ele será usado como o nome dentro do
     arquivo.  Se 'arcname' não for especificado, o nome será igual a
     'filename', mas com qualquer letra de unidade e separadores de
     caminho removidos.

     O argumento 'strict_timestamps', quando definido como ‘False’,
     permite compactar arquivos anteriores a 1980-01-01 com o custo de
     definir o carimbo de data/hora para 1980-01-01.  Comportamento
     semelhante ocorre com arquivos mais recentes que 2107-12-31, o
     carimbo de data/hora também é definido como o limite.

     Adicionado na versão 3.6.

     Alterado na versão 3.6.2: O parâmetro 'filename' aceita um *note
     objeto caminho ou similar: 2a0.

     Alterado na versão 3.8: Adicionado o parâmetro somente-nomeado
     'strict_timestamps'.

As instâncias têm os seguintes métodos e atributos:

 -- Método: ZipInfo.is_dir ()

     Retorna ‘True’ se este membro do arquivo for um diretório.

     Isso usa o nome da entrada: os diretórios devem sempre terminar com
     ‘/’.

     Adicionado na versão 3.6.

 -- Atributo: ZipInfo.filename

     Nome do arquivo no pacote.

 -- Atributo: ZipInfo.date_time

     A hora e a data da última modificação no membro do arquivo.  Esta é
     uma tupla de seis valores que representam os campos “last
     [modified] file time” (última hora [de modificado] do arquivo) e
     “last [modified] file date” (última data [de modificação] do
     arquivo) do diretório central do arquivo ZIP.

     A tupla contém:

     Índice      Valor
                 
     -------------------------------------------
                 
     ‘0’         Ano (>= 1980)
                 
                 
     ‘1’         Mês (iniciado em 1)
                 
                 
     ‘2’         Dia do mês (iniciado em 1)
                 
                 
     ‘3’         Horas (iniciado em 0)
                 
                 
     ‘4’         Minutos (base zero)
                 
                 
     ‘5’         Segundos (iniciado em 0)
                 

          Nota: O formato ZIP oferece suporte a vários campos de
          registro de data e hora em diferentes locais (diretório
          central, campos extras para sistemas NTFS/UNIX, etc.).  Este
          atributo retorna especificamente o registro de data e hora do
          diretório central.  O formato de registro de data e hora do
          diretório central em arquivos ZIP não oferece suporte a
          registros de data e hora anteriores a 1980.  Embora alguns
          formatos de campos extras (como registros de data e hora do
          UNIX) possam representar datas anteriores, este atributo
          retorna apenas o registro de data e hora do diretório central.

          O registro de data e hora do diretório central é interpretado
          como representando a hora local, em vez da hora UTC, para
          corresponder ao comportamento de outras ferramentas zip.

 -- Atributo: ZipInfo.compress_type

     Tipo de compressão do membro do pacote.

 -- Atributo: ZipInfo.comment

     Comentário para o membro individual do pacote como um objeto *note
     bytes: 1c2.

 -- Atributo: ZipInfo.extra

     Dados do campo de expansão.  O PKZIP Application Note(1) contém
     alguns comentários sobre a estrutura interna dos dados contidos
     neste objeto *note bytes: 1c2.

 -- Atributo: ZipInfo.create_system

     O sistema que criou o pacote ZIP.

 -- Atributo: ZipInfo.create_version

     A versão do PKZIP que criou o pacote ZIP.

 -- Atributo: ZipInfo.extract_version

     A versão do PKZIP necessária para extrair o pacote.

 -- Atributo: ZipInfo.reserved

     Deve ser zero

 -- Atributo: ZipInfo.flag_bits

     Bits de sinalizador do ZIP.

 -- Atributo: ZipInfo.volume

     Número de volume do cabeçalho do arquivo.

 -- Atributo: ZipInfo.internal_attr

     Atributos internos.

 -- Atributo: ZipInfo.external_attr

     Atributos de arquivo externo.

 -- Atributo: ZipInfo.header_offset

     Deslocamento de byte para o cabeçalho do arquivo.

 -- Atributo: ZipInfo.CRC

     CRC-32 do arquivo não comprimido.

 -- Atributo: ZipInfo.compress_size

     Tamanho dos dados comprimidos.

 -- Atributo: ZipInfo.file_size

     Tamanho do arquivo não comprimido.

   ---------- Footnotes ----------

   (1) https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT


File: python.info,  Node: Interface de linha de comando<3>,  Next: Armadilhas de descompressão,  Prev: Objetos ZipInfo,  Up: zipfile — Trabalha com arquivos ZIP

5.13.5.5 Interface de linha de comando
......................................

O módulo *note zipfile: 131. fornece uma interface de linha de comando
simples para interagir com arquivos ZIP.

Se você deseja criar um novo arquivo ZIP, especifique seu nome após a
opção *note -c: 2bad. e, em seguida, liste os nomes dos arquivos que
devem ser incluídos:

     $ python -m zipfile -c monty.zip spam.txt eggs.txt

Passar um diretório também é aceitável:

     $ python -m zipfile -c monty.zip life-of-brian_1979/

Se você deseja extrair um arquivo ZIP para o diretório especificado, use
a opção *note -e: 2bae.:

     $ python -m zipfile -e monty.zip target-dir/

Para obter uma lista dos arquivos em um arquivo ZIP, use a opção *note
-l: 2baf.:

     $ python -m zipfile -l monty.zip

* Menu:

* Opções de linha de comando: Opções de linha de comando<2>.


File: python.info,  Node: Opções de linha de comando<2>,  Up: Interface de linha de comando<3>

5.13.5.6 Opções de linha de comando
...................................

 -- Option: -l <zipfile>
 -- Option: --list <zipfile>

     Lista arquivos em um arquivo zip.

 -- Option: -c <zipfile> <source1> ... <sourceN>
 -- Option: --create <zipfile> <source1> ... <sourceN>

     Cria um arquivo zip a partir dos arquivos fonte.

 -- Option: -e <zipfile> <output_dir>
 -- Option: --extract <zipfile> <output_dir>

     Extrai um arquivo zip para um diretório de destino.

 -- Option: -t <zipfile>
 -- Option: --test <zipfile>

     Testa se o arquivo zip é válido ou não.

 -- Option: --metadata-encoding <encoding>

     Especifica a codificação dos nomes dos membros para *note -l: 2baf,
     *note -e: 2bae. e *note -t: 2bb4.

     Adicionado na versão 3.11.


File: python.info,  Node: Armadilhas de descompressão,  Prev: Interface de linha de comando<3>,  Up: zipfile — Trabalha com arquivos ZIP

5.13.5.7 Armadilhas de descompressão
....................................

A extração no módulo zipfile pode falhar devido a algumas armadilhas
listadas abaixo.

* Menu:

* Do próprio arquivo::
* Limitações do sistema de arquivos::
* Limitações de recursos::
* Interrupção::
* Comportamentos padrão da extração::


File: python.info,  Node: Do próprio arquivo,  Next: Limitações do sistema de arquivos,  Up: Armadilhas de descompressão

5.13.5.8 Do próprio arquivo
...........................

A descompactação pode falhar devido a senha / soma de verificação CRC /
formato ZIP incorretos ou método de compactação / descriptografia não
compatível.


File: python.info,  Node: Limitações do sistema de arquivos,  Next: Limitações de recursos,  Prev: Do próprio arquivo,  Up: Armadilhas de descompressão

5.13.5.9 Limitações do sistema de arquivos
..........................................

Exceder as limitações em sistemas de arquivos diferentes pode causar
falha na descompactação.  Como caracteres permitidos nas entradas do
diretório, comprimento do nome do arquivo, comprimento do caminho,
tamanho de um único arquivo e número de arquivos, etc.


File: python.info,  Node: Limitações de recursos,  Next: Interrupção,  Prev: Limitações do sistema de arquivos,  Up: Armadilhas de descompressão

5.13.5.10 Limitações de recursos
................................

A falta de memória ou volume de disco levaria a uma falha de
descompactação.  Por exemplo, bombas de descompressão (também conhecidas
como ZIP bomb(1)) aplicam-se à biblioteca de arquivos zip que podem
causar o esgotamento do volume do disco.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Zip_bomb


File: python.info,  Node: Interrupção,  Next: Comportamentos padrão da extração,  Prev: Limitações de recursos,  Up: Armadilhas de descompressão

5.13.5.11 Interrupção
.....................

A interrupção durante a descompressão, como pressionar Control-C ou
interromper o processo de descompressão pode resultar na descompressão
incompleta do arquivo.


File: python.info,  Node: Comportamentos padrão da extração,  Prev: Interrupção,  Up: Armadilhas de descompressão

5.13.5.12 Comportamentos padrão da extração
...........................................

Não saber os comportamentos de extração padrão pode causar resultados de
descompressão inesperados.  Por exemplo, ao extrair o mesmo arquivo duas
vezes, ele sobrescreve os arquivos sem perguntar.


File: python.info,  Node: tarfile — Ler e gravar arquivos do tipo tar,  Prev: zipfile — Trabalha com arquivos ZIP,  Up: Compressão de Dados e Arquivamento

5.13.6 ‘tarfile’ — Ler e gravar arquivos do tipo tar
----------------------------------------------------

'Código-fonte:' Lib/tarfile.py(1)

__________________________________________________________________

O módulo *note tarfile: de. possibilita a leitura e gravação de arquivos
tar, incluindo aqueles que utilizam compactação gzip, bz2 e lzma.  Use o
módulo *note zipfile: 131. para ler ou gravar arquivos ‘.zip’ ou as
funções de nível mais alto em *note shutil: 1259.

Alguns fatos e números:

   * lê e grava arquivos compactados *note gzip: 67, *note bz2: 13. e
     *note lzma: 8a. se os respectivos módulos estiverem disponíveis.

   * suporte de leitura/gravação para o formato POSIX.1-1988 (ustar).

   * suporte de leitura/gravação para o formato GNU tar, incluindo
     extensões 'longname' e 'longlink', suporte somente leitura para
     todas as variantes da extensão 'sparse', incluindo restauração de
     arquivos esparsos.

   * suporte de leitura/gravação para o formato POSIX.1-2001 (pax).

   * manipula diretórios, arquivos regulares, links físicos, links
     simbólicos, fifos, dispositivos de caracteres e dispositivos de
     bloco e é capaz de adquirir e restaurar informações de arquivo,
     como registro de data e hora, permissões de acesso e proprietário.

Alterado na versão 3.3: Adicionado suporte para compactação *note lzma:
8a.

Alterado na versão 3.12: Archives are extracted using a *note filter:
46c, which makes it possible to either limit surprising/dangerous
features, or to acknowledge that they are expected and the archive is
fully trusted.  By default, archives are fully trusted, but this default
is deprecated and slated to change in Python 3.14.

 -- Função: tarfile.open (name=None, mode='r', fileobj=None,
          bufsize=10240, **kwargs)

     Retorna um objeto *note TarFile: 1250. para o caminho 'name'.  Para
     obter informações detalhadas sobre objetos *note TarFile: 1250. e
     os argumentos nomeados permitidos, consulte *note Objetos TarFile:
     2bc1.

     'mode' deve ser uma string no formato ‘'filemode[:compression]'’, o
     padrão é ‘'r'’.  Aqui está uma lista completa de combinações de
     modos:

     mode                   ação
                            
     -------------------------------------------------------------------------
                            
     ‘'r'’ ou ‘'r:*'’       Abre para leitura com compactação transparente
                            (recomendado).
                            
                            
     ‘'r:'’                 Abre para leitura exclusivamente sem
                            compactação.
                            
                            
     ‘'r:gz'’               Abre para leitura com compactação gzip.
                            
                            
     ‘'r:bz2'’              Abre para leitura com compactação bzip2.
                            
                            
     ‘'r:xz'’               Abre para leitura com compactação lzma.
                            
                            
     ‘'x'’ ou ‘'x:'’        Cria um arquivo tar exclusivamente sem
                            compactação.  Levanta uma exceção
                            *note FileExistsError: 1056. se ele já existir.
                            
                            
     ‘'x:gz'’               Cria um arquivo tar com compactação gzip.
                            Levanta uma exceção
                            *note FileExistsError: 1056. se ele já existir.
                            
                            
     ‘'x:bz2'’              Cria um arquivo tar com compactação bzip2.
                            Levanta uma exceção
                            *note FileExistsError: 1056. se ele já existir.
                            
                            
     ‘'x:xz'’               Cria um arquivo tar com compactação lzma.
                            Levanta uma exceção
                            *note FileExistsError: 1056. se ele já existir.
                            
                            
     ‘'a'’ ou ‘'a:'’        Aberto para acrescentar conteúdo sem
                            compactação.  O arquivo é criado se não
                            existir.
                            
                            
     ‘'w'’ ou ‘'w:'’        Abre para gravação descompactada.
                            
                            
     ‘'w:gz'’               Abre para gravação compactada com gzip.
                            
                            
     ‘'w:bz2'’              Abre para gravação compactada com bzip2.
                            
                            
     ‘'w:xz'’               Abre para gravação compactada com lzma.
                            

     Observe que ‘'a:gz'’, ‘'a:bz2'’ ou ‘'a:xz'’ não são possíveis.  Se
     o 'mode' não for adequado para abrir um determinado arquivo
     (compactado) para leitura, *note ReadError: 19da. será levantada.
     Use o 'mode' ‘'r'’ para evitar isso.  Se um método de compactação
     não for suportado, *note CompressionError: 2bc2. será levantada.

     Se 'fileobj' for especificado, ele será usado como alternativa a um
     *note objeto arquivo: 1203. aberto em modo binário para 'name'.
     Ele deve estar na posição 0.

     Para os modos ‘'w:gz'’, ‘'x:gz'’, ‘'w|gz'’, ‘'w:bz2'’, ‘'x:bz2'’,
     ‘'w|bz2'’, *note tarfile.open(): ea6. aceita o argumento nomeado
     'compresslevel' (padrão ‘9’) para especificar o nível de
     compactação do arquivo.

     For modes ‘'w:xz'’ and ‘'x:xz'’, *note tarfile.open(): ea6. accepts
     the keyword argument 'preset' to specify the compression level of
     the file.

     Para fins especiais, existe um segundo formato para 'mode':
     ‘'filemode|[compression]'’.  *note tarfile.open(): ea6. retornará
     um objeto *note TarFile: 1250. que processa seus dados como um
     fluxo de blocos.  Nenhuma busca aleatória será realizada no
     arquivo.  Se fornecido, 'fileobj' pode ser qualquer objeto que
     tenha um método *note read(): e48. ou *note write(): 13f2.
     (dependendo do 'mode') que funcione com bytes.  'bufsize'
     especifica o tamanho do bloco e o padrão é ‘20 * 512’ bytes.  Use
     esta variante em combinação com, por exemplo, ‘sys.stdin.buffer’,
     um *note objeto arquivo: 1203. de soquete ou um dispositivo de
     fita.  No entanto, tal objeto *note TarFile: 1250. é limitado, pois
     não permite acesso aleatório; consulte *note Exemplos: 2bc3.  Os
     modos atualmente possíveis:

     Modo              Ação
                       
     -------------------------------------------------------------------
                       
     ‘'r|*'’           Abre um 'stream' de blocos tar para leitura
                       com compactação transparente.
                       
                       
     ‘'r|'’            Abre um 'stream' de blocos tar não compactados
                       para leitura.
                       
                       
     ‘'r|gz'’          Abre um 'stream' compactado com gzip para
                       leitura.
                       
                       
     ‘'r|bz2'’         Abre um 'stream' compactado com bzip2 para
                       leitura.
                       
                       
     ‘'r|xz'’          Abre um 'stream' compactado com lzma para
                       leitura.
                       
                       
     ‘'w|'’            Abre um 'stream' descompactado para gravação.
                       
                       
     ‘'w|gz'’          Abre um 'stream' compactado com gzip para
                       gravação.
                       
                       
     ‘'w|bz2'’         Abre um 'stream' compactado com bzip2 para
                       gravação.
                       
                       
     ‘'w|xz'’          Abre um 'stream' compactado com lzma para
                       gravação.
                       

     Alterado na versão 3.5: O modo ‘'x'’ (criação exclusiva) foi
     adicionado.

     Alterado na versão 3.6: O parâmetro 'name' aceita um *note objeto
     caminho ou similar: 2a0.

     Alterado na versão 3.12: O argumento nomeado 'compresslevel' também
     funciona para fluxos.

 -- Classe: tarfile.TarFile

     Classe para ler e escrever arquivos tar.  Não use esta classe
     diretamente: use *note tarfile.open(): ea6. em vez disso.  Veja
     *note Objetos TarFile: 2bc1.

 -- Função: tarfile.is_tarfile (name)

     Retorna *note True: c27. se 'name' for um arquivo tar que o módulo
     *note tarfile: de. possa ler.  'name' pode ser uma *note str: 44c,
     objeto arquivo ou similar.

     Alterado na versão 3.9: Suporte para arquivo e objetos arquivo ou
     similares.

O módulo *note tarfile: de. define as seguintes exceções:

 -- Exceção: tarfile.TarError

     Classe base para todas as exceções de *note tarfile: de.

 -- Exceção: tarfile.ReadError

     É levantada quando um arquivo tar é aberto e não pode ser
     manipulado pelo módulo *note tarfile: de. ou é inválido de alguma
     forma.

 -- Exceção: tarfile.CompressionError

     É levantada quando um método de compactação não é suportado ou
     quando os dados não podem ser decodificados corretamente.

 -- Exceção: tarfile.StreamError

     É levantada para as limitações típicas de objetos *note TarFile:
     1250. do tipo fluxo.

 -- Exceção: tarfile.ExtractError

     É levantada para erros 'não fatais' ao usar *note
     TarFile.extract(): 42f, mas somente se *note TarFile.errorlevel:
     431.‘== 2’.

 -- Exceção: tarfile.HeaderError

     É levantada por *note TarInfo.frombuf(): 2bc8. se o buffer obtido
     for inválido.

 -- Exceção: tarfile.FilterError

     Classe base para membros *note recusados: 2bca. por filtros.

      -- Atributo: tarinfo

          Informações sobre o membro que o filtro se recusou a extrair,
          como *note TarInfo: 2bcc.

 -- Exceção: tarfile.AbsolutePathError

     Levantada para recusar a extração de um membro com um caminho
     absoluto.

 -- Exceção: tarfile.OutsideDestinationError

     Levantada para recusar a extração de um membro fora do diretório de
     destino.

 -- Exceção: tarfile.SpecialFileError

     Levantada para recusar a extração de um arquivo especial (por
     exemplo, um dispositivo ou encadeamento).

 -- Exceção: tarfile.AbsoluteLinkError

     Levantada para recusar a extração de um link simbólico com um
     caminho absoluto.

 -- Exceção: tarfile.LinkOutsideDestinationError

     Levantada para recusar a extração de um link simbólico apontando
     para fora do diretório de destino.

 -- Exceção: tarfile.LinkFallbackError

     Levantada para recusar a emulação de um link (físico ou simbólico)
     extraindo outro membro do arquivo, quando esse membro seria
     rejeitado pelo local do filtro.  A exceção levantada para rejeitar
     o membro substituto está disponível como
     ‘BaseException.__context__’.

     Adicionado na versão 3.13.4.

As seguintes constantes estão disponíveis a nível de módulo:

 -- Dado: tarfile.ENCODING

     A codificação de caracteres padrão: ‘'utf-8'’ no Windows, o valor
     retornado por *note sys.getfilesystemencoding(): c74, caso
     contrário.

 -- Dado: tarfile.REGTYPE
 -- Dado: tarfile.AREGTYPE

     Um arquivo normal *note type: 2bd5.

 -- Dado: tarfile.LNKTYPE

     Um link (dentro do arquivo tar) *note type: 2bd5.

 -- Dado: tarfile.SYMTYPE

     Um link simbólico *note type: 2bd5.

 -- Dado: tarfile.CHRTYPE

     Um dispositivo especial de caracteres *note type: 2bd5.

 -- Dado: tarfile.BLKTYPE

     Um dispositivo especial de bloco *note type: 2bd5.

 -- Dado: tarfile.DIRTYPE

     Um diretório *note type: 2bd5.

 -- Dado: tarfile.FIFOTYPE

     Um dispositivo especial de FIFO *note type: 2bd5.

 -- Dado: tarfile.CONTTYPE

     Um arquivo contíguo *note type: 2bd5.

 -- Dado: tarfile.GNUTYPE_LONGNAME

     Um *note type: 2bd5. de longname de GNU tar.

 -- Dado: tarfile.GNUTYPE_LONGLINK

     Um *note type: 2bd5. de longlink de GNU tar.

 -- Dado: tarfile.GNUTYPE_SPARSE

     Um *note type: 2bd5. de arquivo esparso de GNU tar.

Cada uma das constantes a seguir define um formato de arquivo tar que o
módulo *note tarfile: de. é capaz de criar.  Consulte a seção *note
Formatos tar suportados: 2be0. para obter detalhes.

 -- Dado: tarfile.USTAR_FORMAT

     formato POSIX.1-1988 (ustar).

 -- Dado: tarfile.GNU_FORMAT

     Formato tar GNU

 -- Dado: tarfile.PAX_FORMAT

     formato POSIX.1-2001 (pax).

 -- Dado: tarfile.DEFAULT_FORMAT

     O formato padrão para criação de arquivos.  Atualmente, é *note
     PAX_FORMAT: 2be3.

     Alterado na versão 3.8: O formato padrão para novos arquivos foi
     alterado de *note GNU_FORMAT: 2be2. para *note PAX_FORMAT: 2be3.

Ver também
..........

Módulo *note zipfile: 131.

     Documentação do módulo padrão *note zipfile: 131.

*note Operações de arquivamento: 1259.

     Documentação das funcionalidades de arquivamento de nível mais alto
     fornecidas pelo módulo padrão *note shutil: c5.

Manual do GNU tar, Formato Básico do Tar(2)

     Documentação para arquivos tar, incluindo extensões GNU tar.

* Menu:

* Objetos TarFile::
* Objetos TarInfo::
* Filtros de extração::
* Interface de linha de comando: Interface de linha de comando<4>.
* Exemplos: Exemplos<9>.
* Formatos tar suportados::
* Problemas de Unicode::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/tarfile.py

   (2) https://www.gnu.org/software/tar/manual/html_node/Standard.html


File: python.info,  Node: Objetos TarFile,  Next: Objetos TarInfo,  Up: tarfile — Ler e gravar arquivos do tipo tar

5.13.6.1 Objetos TarFile
........................

O objeto *note TarFile: 1250. fornece uma interface para um arquivo tar.
Um arquivo tar é uma sequência de blocos.  Um membro do arquivo (um
arquivo armazenado) é composto por um bloco de cabeçalho seguido por
blocos de dados.  É possível armazenar um arquivo em um arquivo tar
várias vezes.  Cada membro do arquivo é representado por um objeto *note
TarInfo: 1251, veja *note Objetos TarInfo: 2bcc. para mais detalhes.

Um objeto *note TarFile: 1250. pode ser usado como gerenciador de
contexto em uma instrução *note with: 5d2.  Ele será fechado
automaticamente quando o bloco for concluído.  Observe que, em caso de
exceção, um arquivo aberto para gravação não será finalizado; apenas o
objeto arquivo usado internamente será fechado.  Consulte a seção *note
Exemplos: 2bc3. para um exemplo de uso.

Adicionado na versão 3.2: Adicionado suporte para o protocolo de
gerenciamento de contexto.

 -- Classe: tarfile.TarFile (name=None, mode='r', fileobj=None,
          format=DEFAULT_FORMAT, tarinfo=TarInfo, dereference=False,
          ignore_zeros=False, encoding=ENCODING,
          errors='surrogateescape', pax_headers=None, debug=0,
          errorlevel=1, stream=False)

     Todos os argumentos a seguir são opcionais e também podem ser
     acessados como atributos de instância.

     'name' é o caminho do arquivo.  'name' pode ser um *note objeto
     caminho ou similar: 2a0.  Pode ser omitido se 'fileobj' for
     fornecido.  Nesse caso, o atributo ‘name’ do objeto arquivo será
     usado, se existir.

     O parâmetro 'mode' pode ser ‘'r'’ para ler de um arquivo existente,
     ‘'a'’ para adicionar dados a um arquivo existente, ‘'w'’ para criar
     um novo arquivo sobrescrevendo um existente ou ‘'x'’ para criar um
     novo arquivo somente se ele ainda não existir.

     Se 'fileobj' for fornecido, ele será usado para leitura ou gravação
     de dados.  Se for possível determinar, 'mode' será substituído pelo
     modo de 'fileobj'.  'fileobj' será usado a partir da posição 0.

          Nota: 'fileobj' não é fechado quando *note TarFile: 1250. é
          fechado.

     'format' controla o formato de gravação do arquivo.  Deve ser uma
     das constantes *note USTAR_FORMAT: 2be1, *note GNU_FORMAT: 2be2. ou
     *note PAX_FORMAT: 2be3. definidas no nível do módulo.  Durante a
     leitura, o formato será detectado automaticamente, mesmo que
     diferentes formatos estejam presentes em um único arquivo.

     O argumento 'tarinfo' pode ser usado para substituir a classe
     padrão *note TarInfo: 1251. por uma diferente.

     Se 'dereference' for *note False: b49, adiciona links físicos e
     simbólicos ao arquivo.  Se for *note True: c27, adiciona o conteúdo
     dos arquivos de destino ao arquivo.  Isso não tem efeito em
     sistemas que não oferecem suporte a links simbólicos.

     Se 'ignore_zeros' for *note False: b49, trata um bloco vazio como o
     fim do arquivo.  Se for *note True: c27, ignora blocos vazios (e
     inválidos) e tenta obter o máximo de membros possível.  Isso só é
     útil para ler arquivos concatenados ou corrompidos.

     O parâmetro 'debug' pode ser configurado de ‘0’ (nenhuma mensagem
     de depuração) até ‘3’ (todas as mensagens de depuração).  As
     mensagens são gravadas em ‘sys.stderr’.

     'errorlevel' controla como os erros de extração são tratados, veja
     *note o atributo correspondente: 431.

     Os argumentos 'encoding' e 'errors' definem a codificação de
     caracteres a ser usada para leitura ou gravação do arquivo e como
     os erros de conversão serão tratados.  As configurações padrão
     funcionarão para a maioria dos usuários.  Consulta a seção *note
     Problemas de Unicode: 2be6. para obter informações detalhadas.

     O argumento 'pax_headers' é um dicionário opcional de strings que
     será adicionado como um cabeçalho global pax se 'format' for *note
     PAX_FORMAT: 2be3.

     Se 'stream' estiver definido como *note True: c27, então, durante a
     leitura do arquivo, as informações sobre os arquivos no arquivo não
     serão armazenadas em cache, economizando memória.

     Alterado na versão 3.2: Usa ‘'surrogateescape'’ como padrão para o
     argumento 'errors'.

     Alterado na versão 3.5: O modo ‘'x'’ (criação exclusiva) foi
     adicionado.

     Alterado na versão 3.6: O parâmetro 'name' aceita um *note objeto
     caminho ou similar: 2a0.

     Alterado na versão 3.13: Adiciona o parâmetro 'stream'.

 -- Método: classmethod TarFile.open (...)

     Construtor alternativo.  A função *note tarfile.open(): ea6. é, na
     verdade, um atalho para este método de classe.

 -- Método: TarFile.getmember (name)

     Retorna um objeto *note TarInfo: 1251. para o membro 'name'.  Se
     'name' não for encontrado no arquivo, uma exceção *note KeyError:
     344. será levantada.

          Nota: Se um membro aparecer mais de uma vez no arquivo,
          presume-se que sua última ocorrência seja a versão mais
          atualizada.

 -- Método: TarFile.getmembers ()

     Retorna os membros do arquivo como uma lista de objetos *note
     TarInfo: 1251.  A lista tem a mesma ordem que os membros no
     arquivo.

 -- Método: TarFile.getnames ()

     Retorna os membros como uma lista com seus nomes.  A lista está na
     mesma ordem que a lista retornada por *note getmembers(): ea8.

 -- Método: TarFile.list (verbose=True, *, members=None)

     Envia um índice para ‘sys.stdout’.  Se 'verbose' for *note False:
     b49, apenas os nomes dos membros serão exibidos.  Se for *note
     True: c27, a saída será semelhante à do comando ‘ls -l’.  Se o
     parâmetro opcional 'members' for fornecido, ele deverá ser um
     subconjunto da lista retornada pelo método *note getmembers(): ea8.

     Alterado na versão 3.5: Adicionado o parâmetro 'members'.

 -- Método: TarFile.next ()

     Retorna o próximo membro do arquivo como um objeto *note TarInfo:
     1251, quando *note TarFile: 1250. é aberto para leitura.  Retorna
     *note None: 675. se não houver mais nenhum disponível.

 -- Método: TarFile.extractall (path='.', members=None, *,
          numeric_owner=False, filter=None)

     Extract all members from the archive to the current working
     directory or directory 'path'.  If optional 'members' is given, it
     must be a subset of the list returned by *note getmembers(): ea8.
     Directory information like owner, modification time and permissions
     are set after all members have been extracted.  This is done to
     work around two problems: A directory’s modification time is reset
     each time a file is created in it.  And, if a directory’s
     permissions do not allow writing, extracting files to it will fail.

     If 'numeric_owner' is *note True: c27, the uid and gid numbers from
     the tarfile are used to set the owner/group for the extracted
     files.  Otherwise, the named values from the tarfile are used.

     The 'filter' argument specifies how ‘members’ are modified or
     rejected before extraction.  See *note Filtros de extração: 46c.
     for details.  It is recommended to set this explicitly depending on
     which 'tar' features you need to support.

          Aviso: Never extract archives from untrusted sources without
          prior inspection.  It is possible that files are created
          outside of 'path', e.g.  members that have absolute filenames
          starting with ‘"/"’ or filenames with two dots ‘".."’.

          Set ‘filter='data'’ to prevent the most dangerous security
          issues, and read the *note Filtros de extração: 46c. section
          for details.

     Alterado na versão 3.5: Adicionado o parâmetro 'numeric_owner'.

     Alterado na versão 3.6: O parâmetro 'path' aceita um *note objeto
     caminho ou similar: 2a0.

     Alterado na versão 3.12: Adicionado o parâmetro 'filter'.

 -- Método: TarFile.extract (member, path='', set_attrs=True, *,
          numeric_owner=False, filter=None)

     Extract a member from the archive to the current working directory,
     using its full name.  Its file information is extracted as
     accurately as possible.  'member' may be a filename or a *note
     TarInfo: 1251. object.  You can specify a different directory using
     'path'.  'path' may be a *note path-like object: 2a0.  File
     attributes (owner, mtime, mode) are set unless 'set_attrs' is
     false.

     The 'numeric_owner' and 'filter' arguments are the same as for
     *note extractall(): 42e.

          Nota: The *note extract(): 42f. method does not take care of
          several extraction issues.  In most cases you should consider
          using the *note extractall(): 42e. method.

          Aviso: See the warning for *note extractall(): 42e.

          Set ‘filter='data'’ to prevent the most dangerous security
          issues, and read the *note Filtros de extração: 46c. section
          for details.

     Alterado na versão 3.2: Added the 'set_attrs' parameter.

     Alterado na versão 3.5: Adicionado o parâmetro 'numeric_owner'.

     Alterado na versão 3.6: O parâmetro 'path' aceita um *note objeto
     caminho ou similar: 2a0.

     Alterado na versão 3.12: Adicionado o parâmetro 'filter'.

 -- Método: TarFile.extractfile (member)

     Extract a member from the archive as a file object.  'member' may
     be a filename or a *note TarInfo: 1251. object.  If 'member' is a
     regular file or a link, an *note io.BufferedReader: 124e. object is
     returned.  For all other existing members, *note None: 675. is
     returned.  If 'member' does not appear in the archive, *note
     KeyError: 344. is raised.

     Alterado na versão 3.3: Return an *note io.BufferedReader: 124e.
     object.

     Alterado na versão 3.13: The returned *note io.BufferedReader:
     124e. object has the ‘mode’ attribute which is always equal to
     ‘'rb'’.

 -- Atributo: TarFile.errorlevel: *note int: 257.

     Se 'errorlevel' for ‘0’, os erros serão ignorados ao usar *note
     TarFile.extract(): 42f. e *note TarFile.extractall(): 42e.  No
     entanto, eles aparecem como mensagens de erro na saída de depuração
     quando 'debug' for maior que 0.  Se ‘1’ (o padrão), todos os erros
     'fatais' serão levantados como exceções *note OSError: 417. ou
     *note FilterError: 2bc9.  Se ‘2’, todos os erros 'não fatais'
     também serão levantados como exceções *note TarError: 2bc4.

     Some exceptions, e.g.  ones caused by wrong argument types or data
     corruption, are always raised.

     Custom *note extraction filters: 46c. should raise *note
     FilterError: 2bc9. for 'fatal' errors and *note ExtractError: 2bc6.
     for 'non-fatal' ones.

     Note that when an exception is raised, the archive may be partially
     extracted.  It is the user’s responsibility to clean up.

 -- Atributo: TarFile.extraction_filter

     Adicionado na versão 3.12.

     O *note filtro de extração: 46c. usado como um padrão para o
     argumento 'filter' de *note extract(): 42f. e *note extractall():
     42e.

     The attribute may be ‘None’ or a callable.  String names are not
     allowed for this attribute, unlike the 'filter' argument to *note
     extract(): 42f.

     If ‘extraction_filter’ is ‘None’ (the default), calling an
     extraction method without a 'filter' argument will raise a
     ‘DeprecationWarning’, and fall back to the *note fully_trusted:
     2beb. filter, whose dangerous behavior matches previous versions of
     Python.

     In Python 3.14+, leaving ‘extraction_filter=None’ will cause
     extraction methods to use the *note data: 42d. filter by default.

     The attribute may be set on instances or overridden in subclasses.
     It also is possible to set it on the ‘TarFile’ class itself to set
     a global default, although, since it affects all uses of 'tarfile',
     it is best practice to only do so in top-level applications or
     *note site configuration: c7.  To set a global default this way, a
     filter function needs to be wrapped in *note staticmethod(): 416.
     to prevent injection of a ‘self’ argument.

 -- Método: TarFile.add (name, arcname=None, recursive=True, *,
          filter=None)

     Add the file 'name' to the archive.  'name' may be any type of file
     (directory, fifo, symbolic link, etc.).  If given, 'arcname'
     specifies an alternative name for the file in the archive.
     Directories are added recursively by default.  This can be avoided
     by setting 'recursive' to *note False: b49.  Recursion adds entries
     in sorted order.  If 'filter' is given, it should be a function
     that takes a *note TarInfo: 1251. object argument and returns the
     changed *note TarInfo: 1251. object.  If it instead returns *note
     None: 675. the *note TarInfo: 1251. object will be excluded from
     the archive.  See *note Exemplos: 2bc3. for an example.

     Alterado na versão 3.2: Adicionado o parâmetro 'filter'.

     Alterado na versão 3.7: Recursion adds entries in sorted order.

 -- Método: TarFile.addfile (tarinfo, fileobj=None)

     Add the *note TarInfo: 1251. object 'tarinfo' to the archive.  If
     'tarinfo' represents a non zero-size regular file, the 'fileobj'
     argument should be a *note binary file: 1e0e, and ‘tarinfo.size’
     bytes are read from it and added to the archive.  You can create
     *note TarInfo: 1251. objects directly, or by using *note
     gettarinfo(): 2bec.

     Alterado na versão 3.13: 'fileobj' must be given for non-zero-sized
     regular files.

 -- Método: TarFile.gettarinfo (name=None, arcname=None, fileobj=None)

     Create a *note TarInfo: 1251. object from the result of *note
     os.stat(): 4a0. or equivalent on an existing file.  The file is
     either named by 'name', or specified as a *note file object: 1203.
     'fileobj' with a file descriptor.  'name' may be a *note path-like
     object: 2a0.  If given, 'arcname' specifies an alternative name for
     the file in the archive, otherwise, the name is taken from
     'fileobj'’s *note name: 2b53. attribute, or the 'name' argument.
     The name should be a text string.

     You can modify some of the *note TarInfo: 1251.’s attributes before
     you add it using *note addfile(): 171c.  If the file object is not
     an ordinary file object positioned at the beginning of the file,
     attributes such as *note size: 2bed. may need modifying.  This is
     the case for objects such as *note GzipFile: 41a.  The *note name:
     2bee. may also be modified, in which case 'arcname' could be a
     dummy string.

     Alterado na versão 3.6: O parâmetro 'name' aceita um *note objeto
     caminho ou similar: 2a0.

 -- Método: TarFile.close ()

     Close the *note TarFile: 1250.  In write mode, two finishing zero
     blocks are appended to the archive.

 -- Atributo: TarFile.pax_headers: *note dict: 256.

     Um dicionário contendo pares de chave-valor de cabeçalhos globais
     pax.


File: python.info,  Node: Objetos TarInfo,  Next: Filtros de extração,  Prev: Objetos TarFile,  Up: tarfile — Ler e gravar arquivos do tipo tar

5.13.6.2 Objetos TarInfo
........................

A *note TarInfo: 1251. object represents one member in a *note TarFile:
1250.  Aside from storing all required attributes of a file (like file
type, size, time, permissions, owner etc.), it provides some useful
methods to determine its type.  It does 'not' contain the file’s data
itself.

*note TarInfo: 1251. objects are returned by *note TarFile: 1250.’s
methods *note getmember(): 1979, *note getmembers(): ea8. and *note
gettarinfo(): 2bec.

Modifying the objects returned by *note getmember(): 1979. or *note
getmembers(): ea8. will affect all subsequent operations on the archive.
For cases where this is unwanted, you can use *note copy.copy(): 25. or
call the *note replace(): 2bf2. method to create a modified copy in one
step.

Several attributes can be set to ‘None’ to indicate that a piece of
metadata is unused or unknown.  Different *note TarInfo: 1251. methods
handle ‘None’ differently:

   - The *note extract(): 42f. or *note extractall(): 42e. methods will
     ignore the corresponding metadata, leaving it set to a default.

   - *note addfile(): 171c. falhará.

   - *note list(): ea7. imprimirá uma string como um espaço reservado.

 -- Classe: tarfile.TarInfo (name='')

     Cria um objeto *note TarInfo: 1251.

 -- Método: classmethod TarInfo.frombuf (buf, encoding, errors)

     Cria e retorna um objeto *note TarInfo: 1251. a partir do buffer de
     string do parâmetro 'buf'.

     Levanta *note HeaderError: 2bc7. se o buffer for inválido.

 -- Método: classmethod TarInfo.fromtarfile (tarfile)

     Read the next member from the *note TarFile: 1250. object 'tarfile'
     and return it as a *note TarInfo: 1251. object.

 -- Método: TarInfo.tobuf (format=DEFAULT_FORMAT, encoding=ENCODING,
          errors='surrogateescape')

     Create a string buffer from a *note TarInfo: 1251. object.  For
     information on the arguments see the constructor of the *note
     TarFile: 1250. class.

     Alterado na versão 3.2: Usa ‘'surrogateescape'’ como padrão para o
     argumento 'errors'.

A ‘TarInfo’ object has the following public data attributes:

 -- Atributo: TarInfo.name: *note str: 44c.

     Nome do arquivo.

 -- Atributo: TarInfo.size: *note int: 257.

     Tamanho em bytes.

 -- Atributo: TarInfo.mtime: *note int: 257. | *note float: 2f7.

     Time of last modification in seconds since the *note epoch: 2bf6,
     as in *note os.stat_result.st_mtime: 2bf7.

     Alterado na versão 3.12: Can be set to ‘None’ for *note extract():
     42f. and *note extractall(): 42e, causing extraction to skip
     applying this attribute.

 -- Atributo: TarInfo.mode: *note int: 257.

     Permission bits, as for *note os.chmod(): 21b.

     Alterado na versão 3.12: Can be set to ‘None’ for *note extract():
     42f. and *note extractall(): 42e, causing extraction to skip
     applying this attribute.

 -- Atributo: TarInfo.type

     File type.  'type' is usually one of these constants: *note
     REGTYPE: 2bd3, *note AREGTYPE: 2bd4, *note LNKTYPE: 2bd6, *note
     SYMTYPE: 2bd7, *note DIRTYPE: 2bda, *note FIFOTYPE: 2bdb, *note
     CONTTYPE: 2bdc, *note CHRTYPE: 2bd8, *note BLKTYPE: 2bd9, *note
     GNUTYPE_SPARSE: 2bdf.  To determine the type of a *note TarInfo:
     1251. object more conveniently, use the ‘is*()’ methods below.

 -- Atributo: TarInfo.linkname: *note str: 44c.

     Name of the target file name, which is only present in *note
     TarInfo: 1251. objects of type *note LNKTYPE: 2bd6. and *note
     SYMTYPE: 2bd7.

     For symbolic links (‘SYMTYPE’), the 'linkname' is relative to the
     directory that contains the link.  For hard links (‘LNKTYPE’), the
     'linkname' is relative to the root of the archive.

 -- Atributo: TarInfo.uid: *note int: 257.

     ID do usuário do usuário que originalmente armazenou este membro.

     Alterado na versão 3.12: Can be set to ‘None’ for *note extract():
     42f. and *note extractall(): 42e, causing extraction to skip
     applying this attribute.

 -- Atributo: TarInfo.gid: *note int: 257.

     ID do grupo do usuário que originalmente armazenou este membro.

     Alterado na versão 3.12: Can be set to ‘None’ for *note extract():
     42f. and *note extractall(): 42e, causing extraction to skip
     applying this attribute.

 -- Atributo: TarInfo.uname: *note str: 44c.

     Nome do usuário.

     Alterado na versão 3.12: Can be set to ‘None’ for *note extract():
     42f. and *note extractall(): 42e, causing extraction to skip
     applying this attribute.

 -- Atributo: TarInfo.gname: *note str: 44c.

     Nome do grupo.

     Alterado na versão 3.12: Can be set to ‘None’ for *note extract():
     42f. and *note extractall(): 42e, causing extraction to skip
     applying this attribute.

 -- Atributo: TarInfo.chksum: *note int: 257.

     Cabeçalho de soma de verificação.

 -- Atributo: TarInfo.devmajor: *note int: 257.

     Número principal do dispositivo.

 -- Atributo: TarInfo.devminor: *note int: 257.

     Número menor do dispositivo.

 -- Atributo: TarInfo.offset: *note int: 257.

     O cabeçalho do tar começa aqui.

 -- Atributo: TarInfo.offset_data: *note int: 257.

     Os dados do arquivo começam aqui.

 -- Atributo: TarInfo.sparse

     Sparse member information.

 -- Atributo: TarInfo.pax_headers: *note dict: 256.

     A dictionary containing key-value pairs of an associated pax
     extended header.

 -- Método: TarInfo.replace (name=..., mtime=..., mode=...,
          linkname=..., uid=..., gid=..., uname=..., gname=...,
          deep=True)

     Adicionado na versão 3.12.

     Return a 'new' copy of the ‘TarInfo’ object with the given
     attributes changed.  For example, to return a ‘TarInfo’ with the
     group name set to ‘'staff'’, use:

          new_tarinfo = old_tarinfo.replace(gname='staff')

     By default, a deep copy is made.  If 'deep' is false, the copy is
     shallow, i.e.  ‘pax_headers’ and any custom attributes are shared
     with the original ‘TarInfo’ object.

A *note TarInfo: 1251. object also provides some convenient query
methods:

 -- Método: TarInfo.isfile ()

     Return *note True: c27. if the *note TarInfo: 1251. object is a
     regular file.

 -- Método: TarInfo.isreg ()

     Igual a *note isfile(): 2c05.

 -- Método: TarInfo.isdir ()

     Retorna *note True: c27. se for um diretório.

 -- Método: TarInfo.issym ()

     Retorna *note True: c27. se for um link simbólico.

 -- Método: TarInfo.islnk ()

     Retorna *note True: c27. se for um link físico.

 -- Método: TarInfo.ischr ()

     Retorna *note True: c27. se for um caractere.

 -- Método: TarInfo.isblk ()

     Return *note True: c27. if it is a block device.

 -- Método: TarInfo.isfifo ()

     Retorna *note True: c27. se for um FIFO.

 -- Método: TarInfo.isdev ()

     Return *note True: c27. if it is one of character device, block
     device or FIFO.


File: python.info,  Node: Filtros de extração,  Next: Interface de linha de comando<4>,  Prev: Objetos TarInfo,  Up: tarfile — Ler e gravar arquivos do tipo tar

5.13.6.3 Filtros de extração
............................

Adicionado na versão 3.12.

The 'tar' format is designed to capture all details of a UNIX-like
filesystem, which makes it very powerful.  Unfortunately, the features
make it easy to create tar files that have unintended – and possibly
malicious – effects when extracted.  For example, extracting a tar file
can overwrite arbitrary files in various ways (e.g.  by using absolute
paths, ‘..’ path components, or symlinks that affect later members).

In most cases, the full functionality is not needed.  Therefore,
'tarfile' supports extraction filters: a mechanism to limit
functionality, and thus mitigate some of the security issues.

Ver também
..........

PEP 706(1)

     Contém a motivação e lógica escolhida para este design.

The 'filter' argument to *note TarFile.extract(): 42f. or *note
extractall(): 42e. can be:

   * the string ‘'fully_trusted'’: Honor all metadata as specified in
     the archive.  Should be used if the user trusts the archive
     completely, or implements their own complex verification.

   * the string ‘'tar'’: Honor most 'tar'-specific features (i.e.
     features of UNIX-like filesystems), but block features that are
     very likely to be surprising or malicious.  See *note tar_filter():
     2c0f. for details.

   * the string ‘'data'’: Ignore or block most features specific to
     UNIX-like filesystems.  Intended for extracting cross-platform data
     archives.  See *note data_filter(): 42d. for details.

   * ‘None’ (default): Use *note TarFile.extraction_filter: 2bea.

     If that is also ‘None’ (the default), raise a ‘DeprecationWarning’,
     and fall back to the ‘'fully_trusted'’ filter, whose dangerous
     behavior matches previous versions of Python.

     In Python 3.14, the ‘'data'’ filter will become the default
     instead.  It’s possible to switch earlier; see *note
     TarFile.extraction_filter: 2bea.

   * A callable which will be called for each extracted member with a
     *note TarInfo: 2bcc. describing the member and the destination path
     to where the archive is extracted (i.e.  the same path is used for
     all members):

          filter(member: TarInfo, path: str, /) -> TarInfo | None

     The callable is called just before each member is extracted, so it
     can take the current state of the disk into account.  It can:

        - return a *note TarInfo: 1251. object which will be used
          instead of the metadata in the archive, or

        - return ‘None’, in which case the member will be skipped, or

        - raise an exception to abort the operation or skip the member,
          depending on *note errorlevel: 431.  Note that when extraction
          is aborted, *note extractall(): 42e. may leave the archive
          partially extracted.  It does not attempt to clean up.

* Menu:

* Default named filters::
* Filter errors::
* Dicas para verificação adicional::
* Suporte a versões mais antigas do Python::
* Stateful extraction filter example::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0706/


File: python.info,  Node: Default named filters,  Next: Filter errors,  Up: Filtros de extração

5.13.6.4 Default named filters
..............................

The pre-defined, named filters are available as functions, so they can
be reused in custom filters:

 -- Função: tarfile.fully_trusted_filter (member, path)

     Retorna 'member' inalterado.

     This implements the ‘'fully_trusted'’ filter.

 -- Função: tarfile.tar_filter (member, path)

     Implements the ‘'tar'’ filter.

        - Strip leading slashes (‘/’ and *note os.sep: 66a.) from
          filenames.

        - *note Refuse: 2bca. to extract files with absolute paths (in
          case the name is absolute even after stripping slashes, e.g.
          ‘C:/foo’ on Windows).  This raises *note AbsolutePathError:
          2bcd.

        - *note Refuse: 2bca. to extract files whose absolute path
          (after following symlinks) would end up outside the
          destination.  This raises *note OutsideDestinationError: 2bce.

        - Clear high mode bits (setuid, setgid, sticky) and group/other
          write bits (*note S_IWGRP: 29b9. | *note S_IWOTH: 29bc.).

     Return the modified ‘TarInfo’ member.

 -- Função: tarfile.data_filter (member, path)

     Implements the ‘'data'’ filter.  In addition to what ‘tar_filter’
     does:

        - Normalize link targets (*note TarInfo.linkname: 2bf9.) using
          *note os.path.normpath(): 135e.  Note that this removes
          internal ‘..’ components, which may change the meaning of the
          link if the path in ‘TarInfo.linkname’ traverses symbolic
          links.

        - *note Refuse: 2bca. to extract links (hard or soft) that link
          to absolute paths, or ones that link outside the destination.

          This raises *note AbsoluteLinkError: 2bd0. or *note
          LinkOutsideDestinationError: 2bd1.

          Note that such files are refused even on platforms that do not
          support symbolic links.

        - *note Refuse: 2bca. to extract device files (including pipes).
          This raises *note SpecialFileError: 2bcf.

        - Para arquivos comuns, incluindo links físicos:

             - Set the owner read and write permissions (*note S_IRUSR:
               29b4. | *note S_IWUSR: 29b5.).

             - Remove the group & other executable permission (*note
               S_IXGRP: 29b0. | *note S_IXOTH: 29bd.) if the owner
               doesn’t have it (*note S_IXUSR: 29b6.).

        - For other files (directories), set ‘mode’ to ‘None’, so that
          extraction methods skip applying permission bits.

        - Set user and group info (‘uid’, ‘gid’, ‘uname’, ‘gname’) to
          ‘None’, so that extraction methods skip setting it.

     Return the modified ‘TarInfo’ member.

     Alterado na versão 3.13.4: Link targets are now normalized.


File: python.info,  Node: Filter errors,  Next: Dicas para verificação adicional,  Prev: Default named filters,  Up: Filtros de extração

5.13.6.5 Filter errors
......................

When a filter refuses to extract a file, it will raise an appropriate
exception, a subclass of *note FilterError: 2bc9.  This will abort the
extraction if *note TarFile.errorlevel: 431. is 1 or more.  With
‘errorlevel=0’ the error will be logged and the member will be skipped,
but extraction will continue.


File: python.info,  Node: Dicas para verificação adicional,  Next: Suporte a versões mais antigas do Python,  Prev: Filter errors,  Up: Filtros de extração

5.13.6.6 Dicas para verificação adicional
.........................................

Even with ‘filter='data'’, 'tarfile' is not suited for extracting
untrusted files without prior inspection.  Among other issues, the
pre-defined filters do not prevent denial-of-service attacks.  Users
should do additional checks.

Aqui está uma lista incompleta de itens a serem considerados:

   * Extract to a *note new temporary directory: 21f. to prevent e.g.
     exploiting pre-existing links, and to make it easier to clean up
     after a failed extraction.

   * Disallow symbolic links if you do not need the functionality.

   * When working with untrusted data, use external (e.g.  OS-level)
     limits on disk, memory and CPU usage.

   * Check filenames against an allow-list of characters (to filter out
     control characters, confusables, foreign path separators, etc.).

   * Check that filenames have expected extensions (discouraging files
     that execute when you “click on them”, or extension-less files like
     Windows special device names).

   * Limit the number of extracted files, total size of extracted data,
     filename length (including symlink length), and size of individual
     files.

   * Check for files that would be shadowed on case-insensitive
     filesystems.

Observe também que:

   * Tar files may contain multiple versions of the same file.  Later
     ones are expected to overwrite any earlier ones.  This feature is
     crucial to allow updating tape archives, but can be abused
     maliciously.

   * 'tarfile' does not protect against issues with “live” data, e.g.
     an attacker tinkering with the destination (or source) directory
     while extraction (or archiving) is in progress.


File: python.info,  Node: Suporte a versões mais antigas do Python,  Next: Stateful extraction filter example,  Prev: Dicas para verificação adicional,  Up: Filtros de extração

5.13.6.7 Suporte a versões mais antigas do Python
.................................................

Extraction filters were added to Python 3.12, but may be backported to
older versions as security updates.  To check whether the feature is
available, use e.g.  ‘hasattr(tarfile, 'data_filter')’ rather than
checking the Python version.

The following examples show how to support Python versions with and
without the feature.  Note that setting ‘extraction_filter’ will affect
any subsequent operations.

   * Fully trusted archive:

          my_tarfile.extraction_filter = (lambda member, path: member)
          my_tarfile.extractall()

   * Use the ‘'data'’ filter if available, but revert to Python 3.11
     behavior (‘'fully_trusted'’) if this feature is not available:

          my_tarfile.extraction_filter = getattr(tarfile, 'data_filter',
                                                 (lambda member, path: member))
          my_tarfile.extractall()

   * Use o filtro ‘'data'’; 'fail' se ele não estiver disponível:

          my_tarfile.extractall(filter=tarfile.data_filter)

     ou:

          my_tarfile.extraction_filter = tarfile.data_filter
          my_tarfile.extractall()

   * Use o filtro ‘'data'’; 'warn' se ele não estiver disponível:

          if hasattr(tarfile, 'data_filter'):
              my_tarfile.extractall(filter='data')
          else:
              # remove this when no longer needed
              warn_the_user('Extracting may be unsafe; consider updating Python')
              my_tarfile.extractall()


File: python.info,  Node: Stateful extraction filter example,  Prev: Suporte a versões mais antigas do Python,  Up: Filtros de extração

5.13.6.8 Stateful extraction filter example
...........................................

While 'tarfile'’s extraction methods take a simple 'filter' callable,
custom filters may be more complex objects with an internal state.  It
may be useful to write these as context managers, to be used like this:

     with StatefulFilter() as filter_func:
         tar.extractall(path, filter=filter_func)

Such a filter can be written as, for example:

     class StatefulFilter:
         def __init__(self):
             self.file_count = 0

         def __enter__(self):
             return self

         def __call__(self, member, path):
             self.file_count += 1
             return member

         def __exit__(self, *exc_info):
             print(f'{self.file_count} files extracted')


File: python.info,  Node: Interface de linha de comando<4>,  Next: Exemplos<9>,  Prev: Filtros de extração,  Up: tarfile — Ler e gravar arquivos do tipo tar

5.13.6.9 Interface de linha de comando
......................................

Adicionado na versão 3.4.

The *note tarfile: de. module provides a simple command-line interface
to interact with tar archives.

If you want to create a new tar archive, specify its name after the
*note -c: 2c16. option and then list the filename(s) that should be
included:

     $ python -m tarfile -c monty.tar  spam.txt eggs.txt

Passar um diretório também é aceitável:

     $ python -m tarfile -c monty.tar life-of-brian_1979/

If you want to extract a tar archive into the current directory, use the
*note -e: 2c17. option:

     $ python -m tarfile -e monty.tar

You can also extract a tar archive into a different directory by passing
the directory’s name:

     $ python -m tarfile -e monty.tar  other-dir/

For a list of the files in a tar archive, use the *note -l: 2c18.
option:

     $ python -m tarfile -l monty.tar

* Menu:

* Opções de linha de comando: Opções de linha de comando<3>.


File: python.info,  Node: Opções de linha de comando<3>,  Up: Interface de linha de comando<4>

5.13.6.10 Opções de linha de comando
....................................

 -- Option: -l <tarfile>
 -- Option: --list <tarfile>

     Lista os arquivos em um arquivo tar.

 -- Option: -c <tarfile> <source1> ... <sourceN>
 -- Option: --create <tarfile> <source1> ... <sourceN>

     Cria um arquivo tar a partir dos arquivos de origem.

 -- Option: -e <tarfile> [<output_dir>]
 -- Option: --extract <tarfile> [<output_dir>]

     Extract tarfile into the current directory if 'output_dir' is not
     specified.

 -- Option: -t <tarfile>
 -- Option: --test <tarfile>

     Test whether the tarfile is valid or not.

 -- Option: -v, --verbose

     Saída detalhada.

 -- Option: --filter <filtername>

     Specifies the 'filter' for ‘--extract’.  See *note Filtros de
     extração: 46c. for details.  Only string names are accepted (that
     is, ‘fully_trusted’, ‘tar’, and ‘data’).


File: python.info,  Node: Exemplos<9>,  Next: Formatos tar suportados,  Prev: Interface de linha de comando<4>,  Up: tarfile — Ler e gravar arquivos do tipo tar

5.13.6.11 Exemplos
..................

* Menu:

* Reading examples::
* Writing examples::


File: python.info,  Node: Reading examples,  Next: Writing examples,  Up: Exemplos<9>

5.13.6.12 Reading examples
..........................

How to extract an entire tar archive to the current working directory:

     import tarfile
     tar = tarfile.open("sample.tar.gz")
     tar.extractall(filter='data')
     tar.close()

How to extract a subset of a tar archive with *note
TarFile.extractall(): 42e. using a generator function instead of a list:

     import os
     import tarfile

     def py_files(members):
         for tarinfo in members:
             if os.path.splitext(tarinfo.name)[1] == ".py":
                 yield tarinfo

     tar = tarfile.open("sample.tar.gz")
     tar.extractall(members=py_files(tar))
     tar.close()

How to read a gzip compressed tar archive and display some member
information:

     import tarfile
     tar = tarfile.open("sample.tar.gz", "r:gz")
     for tarinfo in tar:
         print(tarinfo.name, "is", tarinfo.size, "bytes in size and is ", end="")
         if tarinfo.isreg():
             print("a regular file.")
         elif tarinfo.isdir():
             print("a directory.")
         else:
             print("something else.")
     tar.close()


File: python.info,  Node: Writing examples,  Prev: Reading examples,  Up: Exemplos<9>

5.13.6.13 Writing examples
..........................

How to create an uncompressed tar archive from a list of filenames:

     import tarfile
     tar = tarfile.open("sample.tar", "w")
     for name in ["foo", "bar", "quux"]:
         tar.add(name)
     tar.close()

The same example using the *note with: 5d2. statement:

     import tarfile
     with tarfile.open("sample.tar", "w") as tar:
         for name in ["foo", "bar", "quux"]:
             tar.add(name)

How to create and write an archive to stdout using *note
sys.stdout.buffer: ae6. in the 'fileobj' parameter in *note
TarFile.add(): c0e.:

     import sys
     import tarfile
     with tarfile.open("sample.tar.gz", "w|gz", fileobj=sys.stdout.buffer) as tar:
         for name in ["foo", "bar", "quux"]:
             tar.add(name)

How to create an archive and reset the user information using the
'filter' parameter in *note TarFile.add(): c0e.:

     import tarfile
     def reset(tarinfo):
         tarinfo.uid = tarinfo.gid = 0
         tarinfo.uname = tarinfo.gname = "root"
         return tarinfo
     tar = tarfile.open("sample.tar.gz", "w:gz")
     tar.add("foo", filter=reset)
     tar.close()


File: python.info,  Node: Formatos tar suportados,  Next: Problemas de Unicode,  Prev: Exemplos<9>,  Up: tarfile — Ler e gravar arquivos do tipo tar

5.13.6.14 Formatos tar suportados
.................................

There are three tar formats that can be created with the *note tarfile:
de. module:

   * The POSIX.1-1988 ustar format (*note USTAR_FORMAT: 2be1.).  It
     supports filenames up to a length of at best 256 characters and
     linknames up to 100 characters.  The maximum file size is 8 GiB.
     This is an old and limited but widely supported format.

   * The GNU tar format (*note GNU_FORMAT: 2be2.).  It supports long
     filenames and linknames, files bigger than 8 GiB and sparse files.
     It is the de facto standard on GNU/Linux systems.  *note tarfile:
     de. fully supports the GNU tar extensions for long names, sparse
     file support is read-only.

   * The POSIX.1-2001 pax format (*note PAX_FORMAT: 2be3.).  It is the
     most flexible format with virtually no limits.  It supports long
     filenames and linknames, large files and stores pathnames in a
     portable way.  Modern tar implementations, including GNU tar,
     bsdtar/libarchive and star, fully support extended 'pax' features;
     some old or unmaintained libraries may not, but should treat 'pax'
     archives as if they were in the universally supported 'ustar'
     format.  It is the current default format for new archives.

     It extends the existing 'ustar' format with extra headers for
     information that cannot be stored otherwise.  There are two
     flavours of pax headers: Extended headers only affect the
     subsequent file header, global headers are valid for the complete
     archive and affect all following files.  All the data in a pax
     header is encoded in 'UTF-8' for portability reasons.

There are some more variants of the tar format which can be read, but
not created:

   * The ancient V7 format.  This is the first tar format from Unix
     Seventh Edition, storing only regular files and directories.  Names
     must not be longer than 100 characters, there is no user/group name
     information.  Some archives have miscalculated header checksums in
     case of fields with non-ASCII characters.

   * The SunOS tar extended format.  This format is a variant of the
     POSIX.1-2001 pax format, but is not compatible.


File: python.info,  Node: Problemas de Unicode,  Prev: Formatos tar suportados,  Up: tarfile — Ler e gravar arquivos do tipo tar

5.13.6.15 Problemas de Unicode
..............................

The tar format was originally conceived to make backups on tape drives
with the main focus on preserving file system information.  Nowadays tar
archives are commonly used for file distribution and exchanging archives
over networks.  One problem of the original format (which is the basis
of all other formats) is that there is no concept of supporting
different character encodings.  For example, an ordinary tar archive
created on a 'UTF-8' system cannot be read correctly on a 'Latin-1'
system if it contains non-'ASCII' characters.  Textual metadata (like
filenames, linknames, user/group names) will appear damaged.
Unfortunately, there is no way to autodetect the encoding of an archive.
The pax format was designed to solve this problem.  It stores non-ASCII
metadata using the universal character encoding 'UTF-8'.

The details of character conversion in *note tarfile: de. are controlled
by the 'encoding' and 'errors' keyword arguments of the *note TarFile:
1250. class.

'encoding' defines the character encoding to use for the metadata in the
archive.  The default value is *note sys.getfilesystemencoding(): c74.
or ‘'ascii'’ as a fallback.  Depending on whether the archive is read or
written, the metadata must be either decoded or encoded.  If 'encoding'
is not set appropriately, this conversion may fail.

The 'errors' argument defines how characters are treated that cannot be
converted.  Possible values are listed in section *note Error Handlers:
18fa.  The default scheme is ‘'surrogateescape'’ which Python also uses
for its file system calls, see *note Nomes de arquivos, argumentos de
linha de comando e variáveis de ambiente: 2c27.

For *note PAX_FORMAT: 2be3. archives (the default), 'encoding' is
generally not needed because all the metadata is stored using 'UTF-8'.
'encoding' is only used in the rare cases when binary pax headers are
decoded or when strings with surrogate characters are stored.


File: python.info,  Node: Formatos de Arquivo,  Next: Serviços Criptográficos,  Prev: Compressão de Dados e Arquivamento,  Up: A Biblioteca Padrão do Python

5.14 Formatos de Arquivo
========================

Os módulos descritos neste capítulo analisam vários formatos de arquivo
diversos que não são linguagens de marcação e não estão relacionados ao
e-mail.

* Menu:

* csv — Leitura e escrita de arquivos CSV::
* configparser — Analisador sintático de arquivo de configuração::
* tomllib — Analisa arquivos TOML::
* netrc — Arquivo de processamento netrc::
* plistlib — Gera e analisa arquivos Apple .plist: plistlib — Gera e analisa arquivos Apple plist.


File: python.info,  Node: csv — Leitura e escrita de arquivos CSV,  Next: configparser — Analisador sintático de arquivo de configuração,  Up: Formatos de Arquivo

5.14.1 ‘csv’ — Leitura e escrita de arquivos CSV
------------------------------------------------

'Código-fonte:' Lib/csv.py(1)

__________________________________________________________________

O chamado formato CSV (Comma Separated Values) é o formato mais comum de
importação e exportação de planilhas e bancos de dados.  O formato CSV
foi usado por muitos anos antes das tentativas de descrever o formato de
maneira padronizada em RFC 4180(2).  A falta de um padrão bem definido
significa que existem diferenças sutis nos dados produzidos e consumidos
por diferentes aplicativos.  Essas diferenças podem tornar irritante o
processamento de arquivos CSV de várias fontes.  Ainda assim, enquanto
os delimitadores e os caracteres de citação variam, o formato geral é
semelhante o suficiente para que seja possível escrever um único módulo
que possa manipular eficientemente esses dados, ocultando os detalhes da
leitura e gravação dos dados do programador.

O módulo *note csv: 29. implementa classes para ler e gravar dados
tabulares no formato CSV. Ele permite que os programadores digam
“escreva esses dados no formato preferido pelo Excel” ou “leia os dados
desse arquivo gerado pelo Excel”, sem conhecer os detalhes precisos do
formato CSV usado pelo Excel.  Os programadores também podem descrever
os formatos CSV entendidos por outros aplicativos ou definir seus
próprios formatos CSV para fins especiais.

Os objetos de *note reader: 486. e *note writer: 487. do módulo *note
csv: 29. leem e escrevem sequências.  Os programadores também podem ler
e gravar dados no formato de dicionário usando as classes *note
DictReader: 9ed. e *note DictWriter: 123e.

Ver também
..........

PEP 305(3) - CSV File API

     A proposta de melhoria do Python que propôs essa adição ao Python.

* Menu:

* Conteúdo do módulo: Conteúdo do módulo<3>.
* Dialetos e parâmetros de formatação::
* Objetos Reader::
* Objetos Writer::
* Exemplos: Exemplos<10>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/csv.py

   (2) https://datatracker.ietf.org/doc/html/rfc4180.html

   (3) https://peps.python.org/pep-0305/


File: python.info,  Node: Conteúdo do módulo<3>,  Next: Dialetos e parâmetros de formatação,  Up: csv — Leitura e escrita de arquivos CSV

5.14.1.1 Conteúdo do módulo
...........................

O módulo *note csv: 29. define as seguintes funções:

 -- Função: csv.reader (csvfile, /, dialect='excel', **fmtparams)

     Retorna um *note objeto leitor: 2c30. que irá iterar sobre as
     linhas no 'csvfile' fornecido.  Um csvfile deve ser um iterável de
     strings, cada uma no formato csv definido pelo leitor.  Um csvfile
     é muito comumente um objeto similar a arquivo ou uma lista.  Se
     'csvfile' for um objeto arquivo, ele deverá ser aberto com
     ‘newline=''’.  (1)  Pode ser fornecido um parâmetro opcional
     'dialect', usado para definir um conjunto de parâmetros específicos
     para um dialeto CSV específico.  Pode ser uma instância de uma
     subclasse da classe *note Dialect: 1771. ou uma das strings
     retornadas pela função *note list_dialects(): 191f.  Os outros
     argumentos nomeados opcionais 'fmtparams' podem ser dados para
     substituir parâmetros de formatação individuais no dialeto atual.
     Para detalhes completos sobre os parâmetros de dialeto e
     formatação, consulte a seção *note Dialetos e parâmetros de
     formatação: 2c31.

     Cada linha lida no arquivo csv é retornada como uma lista de
     strings.  Nenhuma conversão automática de tipo de dados é
     executada, a menos que a opção de formato *note QUOTE_NONNUMERIC:
     16d7. seja especificada (nesse caso, os campos não citados são
     transformados em pontos flutuantes).

     Um pequeno exemplo de uso:

          >>> import csv
          >>> with open('eggs.csv', newline='') as csvfile:
          ...     spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
          ...     for row in spamreader:
          ...         print(', '.join(row))
          Spam, Spam, Spam, Spam, Spam, Baked Beans
          Spam, Lovely Spam, Wonderful Spam

 -- Função: csv.writer (csvfile, /, dialect='excel', **fmtparams)

     Retorna um objeto de escrita responsável por converter os dados de
     usuário em strings delimitadas no objeto arquivo ou similar.
     'csvfile' pode ser qualquer objeto com um método *note write():
     1dfb.  Se 'csvfile' for um objeto arquivo, ele deverá ser aberto
     com ‘newline=''’ (2).  Pode ser fornecido um parâmetro opcional
     'dialect', usado para definir um conjunto de parâmetros específicos
     para um dialeto CSV específico.  Pode ser uma instância de uma
     subclasse da classe *note Dialect: 1771. ou uma das strings
     retornadas pela função *note list_dialects(): 191f.  Os outros
     argumentos nomeados opcionais 'fmtparams' podem ser dados para
     substituir parâmetros de formatação individuais no dialeto atual.
     Para detalhes completos sobre os parâmetros de dialeto e
     formatação, consulte a seção *note Dialetos e parâmetros de
     formatação: 2c31.  Para tornar o mais fácil possível a interface
     com os módulos que implementam a API do DB, o valor *note None:
     675. é escrito como uma string vazia.  Embora isso não seja uma
     transformação reversível, torna mais fácil despejar valores de
     dados SQL NULL em arquivos CSV sem preprocessar os dados retornados
     de uma chamada ‘cursor.fetch*’.  Todos os outros dados que não são
     de strings são codificados com *note str(): 44c. antes de serem
     escritos.

     Um pequeno exemplo de uso:

          import csv
          with open('eggs.csv', 'w', newline='') as csvfile:
              spamwriter = csv.writer(csvfile, delimiter=' ',
                                      quotechar='|', quoting=csv.QUOTE_MINIMAL)
              spamwriter.writerow(['Spam'] * 5 + ['Baked Beans'])
              spamwriter.writerow(['Spam', 'Lovely Spam', 'Wonderful Spam'])

 -- Função: csv.register_dialect (name, /, dialect='excel', **fmtparams)

     Associa 'dialect' a 'name'.  'name' deve ser uma string.  O dialeto
     pode ser especificado passando uma subclasse de *note Dialect:
     1771. ou por 'fmtparams' argumentos nomeados, ou ambos, com
     argumentos nomeados substituindo os parâmetros do dialeto.  Para
     detalhes completos sobre os parâmetros de dialeto e formatação,
     consulte a seção *note Dialetos e parâmetros de formatação: 2c31.

 -- Função: csv.unregister_dialect (name)

     Exclui o dialeto associado ao 'name' do registro do dialeto.  Um
     *note Error: 2c33. é levantado se 'name' não for um nome de dialeto
     registrado.

 -- Função: csv.get_dialect (name)

     Retorna o dialeto associado a 'name'.  Um *note Error: 2c33. é
     levantado se 'name' não for um nome de dialeto registrado.  Esta
     função retorna uma classe *note Dialect: 1771. imutável.

 -- Função: csv.list_dialects ()

     Retorna os nomes de todos os dialetos registrados

 -- Função: csv.field_size_limit ()

 -- Função: csv.field_size_limit (new_limit)

     Retorna o tamanho máximo atual do campo permitido pelo analisador
     sintático.  Se 'new_limit' for fornecido, este se tornará o novo
     limite.

O módulo *note csv: 29. define as seguintes classes:

 -- Classe: csv.DictReader (f, fieldnames=None, restkey=None,
          restval=None, dialect='excel', *args, **kwds)

     Cria um objeto que funcione como um leitor comum, mas mapeia as
     informações em cada linha para *note dict: 256. cujas chaves são
     fornecidas pelo parâmetro opcional 'fieldnames'.

     O parâmetro 'fieldnames' é uma *note sequência: 4f1.  Se
     'fieldnames' for omitido, os valores na primeira linha do arquivo
     'f' serão usados como nomes de campo e serão omitidos dos
     resultados.  Se 'fieldnames' for fornecido, eles serão usados e a
     primeira linha será incluída nos resultados.  Independentemente de
     como os nomes de campo são determinados, o dicionário preserva sua
     ordem original.

     Se uma linha tiver mais campos que nomes de campo, os dados
     restantes serão colocados em uma lista e armazenados com o nome do
     campo especificado por 'restkey' (o padrão é ‘None’).  Se uma linha
     que não estiver em branco tiver menos campos que nomes de campo, os
     valores ausentes serão preenchidos com o valor 'restval' (o padrão
     é ‘None’).

     Todos os outros argumentos nomeados ou opcionais são passados para
     a instância subjacente de *note reader: 486.

     Se o argumento passado para 'fieldnames' for um iterador, ele será
     convertido para uma *note list: 611.

     Alterado na versão 3.6: Linhas retornadas agora são do tipo
     ‘OrderedDict’.

     Alterado na versão 3.8: As linhas retornadas agora são do tipo
     *note dict: 256.

     Um pequeno exemplo de uso:

          >>> import csv
          >>> with open('names.csv', newline='') as csvfile:
          ...     reader = csv.DictReader(csvfile)
          ...     for row in reader:
          ...         print(row['first_name'], row['last_name'])
          ...
          Eric Idle
          John Cleese

          >>> print(row)
          {'first_name': 'John', 'last_name': 'Cleese'}

 -- Classe: csv.DictWriter (f, fieldnames, restval='',
          extrasaction='raise', dialect='excel', *args, **kwds)

     Cria um objeto que funcione como um de escrita comum, mas mapeia
     dicionários nas linhas de saída.  O parâmetro 'fieldnames' é uma
     *note sequência: 1e. de chaves que identificam a ordem na qual os
     valores no dicionário transmitidos para o método *note writerow():
     e14. são escritos no arquivo 'f'.  O parâmetro opcional 'restval'
     especifica o valor a ser escrito se o dicionário estiver com falta
     de uma chave em 'fieldnames'.  Se o dicionário transmitido para o
     método *note writerow(): e14. contiver uma chave não encontrada em
     'fieldnames', o parâmetro opcional 'extrasaction' indica qual ação
     executar.  Se estiver definido como ‘'raise'’, o valor padrão, a
     *note ValueError: 202. é levantada.  Se estiver definido como
     ‘'ignore'’, valores extras no dicionário serão ignorados.
     Quaisquer outros argumentos nomeados ou opcionais são passados para
     a instância subjacente de *note writer: 487.

     Observe que, diferentemente da classe *note DictReader: 9ed, o
     parâmetro 'fieldnames' da classe *note DictWriter: 123e. não é
     opcional.

     Se o argumento passado para 'fieldnames' for um iterador, ele será
     convertido para uma *note list: 611.

     Um pequeno exemplo de uso:

          import csv

          with open('names.csv', 'w', newline='') as csvfile:
              fieldnames = ['first_name', 'last_name']
              writer = csv.DictWriter(csvfile, fieldnames=fieldnames)

              writer.writeheader()
              writer.writerow({'first_name': 'Baked', 'last_name': 'Beans'})
              writer.writerow({'first_name': 'Lovely', 'last_name': 'Spam'})
              writer.writerow({'first_name': 'Wonderful', 'last_name': 'Spam'})

 -- Classe: csv.Dialect

     A classe *note Dialect: 1771. é uma classe de contêiner cujos
     atributos contêm informações sobre como lidar com aspas duplas,
     espaços em branco, delimitadores, etc.  Devido à falta de uma
     especificação CSV estrita, diferentes aplicativos produzem dados
     CSV sutilmente diferentes.  As instâncias de *note Dialect: 1771.
     definem como as instâncias *note reader: 486. e *note writer: 487.
     se comportam.

     Todos os nomes de *note Dialect: 1771. disponíveis são retornados
     por *note list_dialects(): 191f, e eles podem ser registrados com
     classes *note reader: 486. e *note writer: 487. específicas através
     de suas funções inicializadoras (‘__init__’) como esta:

          import csv

          with open('students.csv', 'w', newline='') as csvfile:
              writer = csv.writer(csvfile, dialect='unix')

 -- Classe: csv.excel

     A classe *note excel: 2c34. define as propriedades usuais de um
     arquivo CSV gerado pelo Excel.  Ele é registrado com o nome do
     dialeto ‘'excel'’.

 -- Classe: csv.excel_tab

     A classe *note excel_tab: 2c35. define as propriedades usuais de um
     arquivo delimitado por TAB gerado pelo Excel.  Ela é registrado com
     o nome do dialeto ‘'excel-tab'’.

 -- Classe: csv.unix_dialect

     A classe *note unix_dialect: 123d. define as propriedades usuais de
     um arquivo CSV gerado em sistemas UNIX, ou seja, usando ‘'\n'’ como
     terminador de linha e citando todos os campos.  É registrado com o
     nome do dialeto ‘'unix'’.

     Adicionado na versão 3.2.

 -- Classe: csv.Sniffer

     A classe *note Sniffer: 2c36. é usada para deduzir o formato de um
     arquivo CSV.

     A classe *note Sniffer: 2c36. fornece dois métodos:

      -- Método: sniff (sample, delimiters=None)

          Analisa a 'sample' fornecida e retorna uma subclasse *note
          Dialect: 1771, refletindo os parâmetros encontrados.  Se o
          parâmetro opcional 'delimiters' for fornecido, ele será
          interpretado como uma string contendo possíveis caracteres
          válidos de delimitador.

      -- Método: has_header (sample)

          Analisa o texto de amostra (presume-se que esteja no formato
          CSV) e retorne *note True: c27. se a primeira linha parecer
          uma série de cabeçalhos de coluna.  Inspecionando cada coluna,
          um dos dois critérios principais será considerado para estimar
          se a amostra contém um cabeçalho:

             - da segunda até a enésima linha contém valores numéricos

             - da segunda até a enésima linha contém strings em que pelo
               menos o comprimento de um valor difere daquele do
               cabeçalho putativo dessa coluna.

          Vinte e uma linhas após a linha de cabeçalho são amostradas;
          se mais da metade das colunas + linhas atenderem aos
          critérios, *note True: c27. será retornado.

          Nota: Este método é uma heurística aproximada e pode produzir
          falsos positivos e negativos.

Um exemplo para uso de *note Sniffer: 2c36.:

     with open('example.csv', newline='') as csvfile:
         dialect = csv.Sniffer().sniff(csvfile.read(1024))
         csvfile.seek(0)
         reader = csv.reader(csvfile, dialect)
         # ... processa conteúdo do arquivo CSV aqui ...
O módulo *note csv: 29. define as seguintes constantes:

 -- Dado: csv.QUOTE_ALL

     Instrui objetos *note writer: 487. a colocar aspas em todos os
     campos.

 -- Dado: csv.QUOTE_MINIMAL

     Instrui objetos *note writer: 487. a colocar aspas apenas nos
     campos que contêm caracteres especiais como 'delimiters',
     'quotechar', ‘'\r'’, ‘'\n'’ ou qualquer um dos caracteres em
     'lineterminator'.

 -- Dado: csv.QUOTE_NONNUMERIC

     Instrui objetos *note writer: 487. a colocar aspas em todos os
     campos não numéricos.

     Instrui objetos *note reader: 486. a converter todos os campos não
     envoltos por aspas no tipo *note float: 2f7.

          Nota: Alguns tipos numéricos, como *note bool: 468, *note
          Fraction: 1e7. ou *note IntEnum: d00, têm uma representação de
          string que não pode ser convertida para *note float: 2f7.
          Eles não podem ser lidos nos modos *note QUOTE_NONNUMERIC:
          16d7. e *note QUOTE_STRINGS: 485.

 -- Dado: csv.QUOTE_NONE

     Instrui objetos *note writer: 487. a nunca colocar aspas nos
     campos.  Quando o 'delimiter', 'quotechar', 'escapechar', ‘'\r'’,
     ‘'\n'’ ou qualquer um dos caracteres em 'lineterminator' ocorre nos
     dados de saída, é precedido pelo caractere 'escapechar' atual.  Se
     'escapeechar' não estiver definido, o escritor levantará *note
     Error: 2c33. se algum caractere que exija escape for encontrado.
     Defina 'quotechar' para ‘None’ para evitar seu escape.

     Instrui objetos *note reader: 486. a não executar nenhum
     processamento especial de caracteres de aspas.

 -- Dado: csv.QUOTE_NOTNULL

     Instrui objetos *note writer: 487. a coloca entre aspas os campos
     que não são ‘None’.  Isso é semelhante a *note QUOTE_ALL: 2c39,
     exceto que se o valor de um campo for ‘None’, uma string vazia (sem
     aspas) é escrita.

     Instrui objetos *note reader: 486. a interpretar um campo vazio
     (sem aspas) como ‘None’ e a se comportar de outra forma como *note
     QUOTE_ALL: 2c39.

     Adicionado na versão 3.12.

 -- Dado: csv.QUOTE_STRINGS

     Instrui objetos *note writer: 487. a sempre coloca aspas em volta
     dos campos que são strings.  Isso é semelhante a *note
     QUOTE_NONNUMERIC: 16d7, exceto que se o valor de um campo for
     ‘None’, uma string vazia (sem aspas) é escrita.

     Instrui objetos *note reader: 486. a interpretar uma string vazia
     (sem aspas) como ‘None’ e a se comportar de outra forma como *note
     QUOTE_NONNUMERIC: 16d7.

     Adicionado na versão 3.12.

O módulo *note csv: 29. define a seguinte exceção:

 -- Exceção: csv.Error

     Levantada por qualquer uma das funções quando um erro é detectado.

   ---------- Footnotes ----------

   (1) Se ‘newline=''’ não for especificado, quebras de linha inseridas
em campos entre aspas não serão interpretadas corretamente e, em
plataformas que usam terminações de linha ‘\r\n’ na gravação, um ‘\r’
extra será adicionado.  É sempre seguro especificar ‘newline=''’, já que
o módulo csv faz seu próprio tratamento de quebra de linha (*note
universal: d5c.).

   (2) Se ‘newline=''’ não for especificado, quebras de linha inseridas
em campos entre aspas não serão interpretadas corretamente e, em
plataformas que usam terminações de linha ‘\r\n’ na gravação, um ‘\r’
extra será adicionado.  É sempre seguro especificar ‘newline=''’, já que
o módulo csv faz seu próprio tratamento de quebra de linha (*note
universal: d5c.).


File: python.info,  Node: Dialetos e parâmetros de formatação,  Next: Objetos Reader,  Prev: Conteúdo do módulo<3>,  Up: csv — Leitura e escrita de arquivos CSV

5.14.1.2 Dialetos e parâmetros de formatação
............................................

Para facilitar a especificação do formato dos registros de entrada e
saída, parâmetros específicos de formatação são agrupados em dialetos.
Um dialeto é uma subclasse da classe *note Dialect: 1771. contendo
vários atributos descrevendo o formato do arquivo CSV. Ao criar objetos
*note reader: 486. ou *note writer: 487, o programador pode especificar
uma string ou uma subclasse da classe *note Dialect: 1771. como
parâmetro de dialeto.  Além do parâmetro 'dialect', ou em vez do
parâmetro 'dialect', o programador também pode especificar parâmetros de
formatação individuais, com os mesmos nomes dos atributos definidos
abaixo para a classe *note Dialect: 1771.

Os dialetos possuem suporte aos seguintes atributos:

 -- Atributo: Dialect.delimiter

     Uma string de um caractere usada para separar campos.  O padrão é
     ‘','’.

 -- Atributo: Dialect.doublequote

     Controla como as instâncias de 'quotechar' que aparecem dentro de
     um campo devem estar entre aspas.  Quando *note True: c27, o
     caractere é dobrado.  Quando *note False: b49, o 'escapechar' é
     usado como um prefixo para o 'quotechar'.  O padrão é *note True:
     c27.

     Na saída, se 'doublequote' for *note False: b49. e não
     'escapeechar' for definido, *note Error: 2c33. é levantada se um
     'quotechar' é encontrado em um campo.

 -- Atributo: Dialect.escapechar

     Uma string de caracteres de um caractere usada pelo escritor para
     escapar caracteres que exigem escape:

             * o 'delimiter', o 'quotechar', ‘'\r'’, ‘'\n'’ e qualquer
               um dos caracteres em 'lineterminator' são escapados se
               'quoting' estiver definido como *note QUOTE_NONE: 2c3b.;

             * o 'quotechar' é escapado se 'doublequote' for *note
               False: b49.;

             * o 'escapechar' em si.

     Na leitura, o 'escapechar' remove qualquer significado especial do
     caractere seguinte.  O padrão é *note None: 675, o que desabilita o
     escape.

     Alterado na versão 3.11: Um 'escapechar' vazio não é permitido.

 -- Atributo: Dialect.lineterminator

     A string usada para terminar as linhas produzidas pelo *note
     writer: 487.  O padrão é ‘'\r\n'’.

          Nota: A *note reader: 486. é codificada para reconhecer ‘'\r'’
          ou ‘'\n'’ como fim de linha e ignora 'lineterminator'.  Esse
          comportamento pode mudar no futuro.

 -- Atributo: Dialect.quotechar

     Uma string de um caractere usada para colocar entre aspas campos
     que contêm caracteres especiais, como o 'delimiter' ou o
     'quotechar', ou que contêm caracteres de nova linha (‘'\r'’, ‘'\n'’
     ou qualquer um dos caracteres em 'lineterminator').  O padrão é
     ‘'"'’.  Pode ser definido como ‘None’ para evitar o escape de ‘'"'’
     se 'aspas' estiver definido como *note QUOTE_NONE: 2c3b.

     Alterado na versão 3.11: Um 'quotechar' vazio não é permitido.

 -- Atributo: Dialect.quoting

     Controla quando as aspas devem ser geradas pelo escritor e
     reconhecidas pelo leitor.  Ele pode assumir qualquer uma das
     constantes *note QUOTE_* constants: 2c38. e o padrão é *note
     QUOTE_MINIMAL: 2c3a.  se 'quotechar' não for ‘None’ e, do
     contrário, *note QUOTE_NONE: 2c3b.

 -- Atributo: Dialect.skipinitialspace

     Quando *note True: c27, os espaços imediatamente após o
     'delimitador' são ignorados.  O padrão é *note False: b49.  Ao
     combinar ‘delimiter=' '’ com ‘skipinitialspace=True’, campos vazios
     sem aspas não são permitidos.

 -- Atributo: Dialect.strict

     Quando ‘True’, levanta a exceção *note Error: 2c33. em uma entrada
     CSV ruim.  O padrão é ‘False’.


File: python.info,  Node: Objetos Reader,  Next: Objetos Writer,  Prev: Dialetos e parâmetros de formatação,  Up: csv — Leitura e escrita de arquivos CSV

5.14.1.3 Objetos Reader
.......................

Os objetos Reader (instâncias *note DictReader: 9ed. e objetos
retornados pela função *note reader(): 486.) têm os seguintes métodos
públicos:

 -- Método: csvreader.__next__ ()

     Retorna a próxima linha do objeto iterável do leitor como uma lista
     (se o objeto foi retornado de ‘leitor()’) ou um dict (se for uma
     instância de *note DictReader: 9ed.), analisado de acordo com a
     *note Dialect: 1771. atual.  Normalmente, você deve chamar isso de
     ‘next(reader)’.

Os objetos Reader possuem os seguintes atributos públicos:

 -- Atributo: csvreader.dialect

     Uma descrição somente leitura do dialeto em uso pelo analisador
     sintático.

 -- Atributo: csvreader.line_num

     O número de linhas lidas no iterador de origem.  Não é o mesmo que
     o número de registros retornados, pois os registros podem abranger
     várias linhas.

Os objetos DictReader têm o seguinte atributo público:

 -- Atributo: DictReader.fieldnames

     Se não for passado como parâmetro ao criar o objeto, esse atributo
     será inicializado no primeiro acesso ou quando o primeiro registro
     for lido no arquivo.


File: python.info,  Node: Objetos Writer,  Next: Exemplos<10>,  Prev: Objetos Reader,  Up: csv — Leitura e escrita de arquivos CSV

5.14.1.4 Objetos Writer
.......................

Objetos *note writer: 487. (instâncias e objetos *note DictWriter: 123e.
retornados pela função *note writer(): 487.) possuem os seguintes
métodos públicos.  Uma 'row' deve ser iterável de strings ou números
para objetos *note writer: 487. e um dicionário mapeando nomes de campos
para strings ou números (passando-os por *note str(): 44c. primeiro)
para *note DictWriter: 123e.  Observe que números complexos são escritos
cercados por parênteses.  Isso pode causar alguns problemas para outros
programas que leem arquivos CSV (supondo que eles aceitem números
complexos).

 -- Método: csvwriter.writerow (row, /)

     Escreve o parâmetro 'row' no objeto arquivo do escritor, formatado
     de acordo com a *note Dialect: 1771. atual.  Retorna o valor de
     retorno da chamada ao método 'write' do objeto arquivo subjacente.

     Alterado na versão 3.5: Adicionado suporte a iteráveis arbitrários.

 -- Método: csvwriter.writerows (rows, /)

     Escreve todos os elementos em 'rows' (um iterável de objetos 'row',
     conforme descrito acima) no objeto arquivo do escritor, formatado
     de acordo com o dialeto atual.

Os objetos Writer têm o seguinte atributo público:

 -- Atributo: csvwriter.dialect

     Uma descrição somente leitura do dialeto em uso pelo escritor.

Os objetos DictWriter têm o seguinte método público:

 -- Método: DictWriter.writeheader ()

     Escreve uma linha com os nomes dos campos (conforme especificado no
     construtor) no objeto arquivo do escritor, formatado de acordo com
     o dialeto atual.  Retorna o valor de retorno da chamada *note
     csvwriter.writerow(): e14. usada internamente.

     Adicionado na versão 3.2.

     Alterado na versão 3.8: *note writeheader(): 123f. agora também
     retorna o valor retornado pelo método *note csvwriter.writerow():
     e14. que ele usa internamente.


File: python.info,  Node: Exemplos<10>,  Prev: Objetos Writer,  Up: csv — Leitura e escrita de arquivos CSV

5.14.1.5 Exemplos
.................

O exemplo mais simples de leitura de um arquivo CSV:

     import csv
     with open('some.csv', newline='') as f:
         reader = csv.reader(f)
         for row in reader:
             print(row)

Lendo um arquivo com um formato alternativo:

     import csv
     with open('passwd', newline='') as f:
         reader = csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE)
         for row in reader:
             print(row)

O exemplo de escrita possível mais simples possível é:

     import csv
     with open('some.csv', 'w', newline='') as f:
         writer = csv.writer(f)
         writer.writerows(someiterable)

Como *note open(): 51c. é usado para abrir um arquivo CSV para leitura,
o arquivo será decodificado por padrão em unicode usando a codificação
padrão do sistema (consulte *note locale.getencoding(): 2dc.).  Para
decodificar um arquivo usando uma codificação diferente, use o argumento
‘encoding’ do open:

     import csv
     with open('some.csv', newline='', encoding='utf-8') as f:
         reader = csv.reader(f)
         for row in reader:
             print(row)

O mesmo se aplica à escrita em algo diferente da codificação padrão do
sistema: especifique o argumento de codificação ao abrir o arquivo de
saída.

Registrando um novo dialeto:

     import csv
     csv.register_dialect('unixpwd', delimiter=':', quoting=csv.QUOTE_NONE)
     with open('passwd', newline='') as f:
         reader = csv.reader(f, 'unixpwd')

Um uso um pouco mais avançado do leitor — capturando e relatando erros:

     import csv, sys
     filename = 'some.csv'
     with open(filename, newline='') as f:
         reader = csv.reader(f)
         try:
             for row in reader:
                 print(row)
         except csv.Error as e:
             sys.exit(f'file {filename}, line {reader.line_num}: {e}')

E embora o módulo não tenha suporte diretamente à análise sintática de
strings, isso pode ser feito facilmente:

     import csv
     for row in csv.reader(['one,two,three']):
         print(row)


File: python.info,  Node: configparser — Analisador sintático de arquivo de configuração,  Next: tomllib — Analisa arquivos TOML,  Prev: csv — Leitura e escrita de arquivos CSV,  Up: Formatos de Arquivo

5.14.2 ‘configparser’ — Analisador sintático de arquivo de configuração
-----------------------------------------------------------------------

'Código-fonte:' Lib/configparser.py(1)

__________________________________________________________________

Este módulo fornece a classe *note ConfigParser: 1c8, que implementa uma
linguagem de configuração básica, com uma estrutura semelhante à
encontrada nos arquivos INI do Microsoft Windows.  Você pode usar isso
para escrever programas em Python que podem ser facilmente
personalizados pelos usuários finais.

     Nota: Esta biblioteca 'não' interpreta nem escreve os prefixos de
     tipo de valor usados na versão estendida da sintaxe INI do Registro
     do Windows.

Ver também
..........

Módulo *note tomllib: fc.

     TOML é um formato bem especificado para arquivos de configuração de
     aplicações.  Ele foi projetado especificamente para ser uma versão
     melhorada do INI.

Módulo *note shlex: c4.

     Suporte para criação de minilinguagens semelhantes a shell Unix que
     também podem ser usadas para arquivos de configuração de
     aplicações.

Módulo *note json: 82.

     O módulo ‘json’ implementa um subconjunto de sintaxe JavaScript que
     às vezes é usado para configuração, mas não suporta comentários.

* Menu:

* Início rápido::
* Tipos de dados suportados::
* Valores reservas::
* Estrutura dos arquivos INI::
* Seções não nomeadas::
* Interpolação de valores::
* Acesso através do protocolo de mapeamento::
* Personalizando o comportamento do analisador sintático::
* Exemplos de APIs legadas::
* Objetos ConfigParser::
* Objetos RawConfigParser::
* Exceções: Exceções<8>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/configparser.py


File: python.info,  Node: Início rápido,  Next: Tipos de dados suportados,  Up: configparser — Analisador sintático de arquivo de configuração

5.14.2.1 Início rápido
......................

Vamos pegar um arquivo de configuração bem básico parecido com este:

     [DEFAULT]
     ServerAliveInterval = 45
     Compression = yes
     CompressionLevel = 9
     ForwardX11 = yes

     [forge.example]
     User = hg

     [topsecret.server.example]
     Port = 50022
     ForwardX11 = no

A estrutura dos arquivos INI é descrita *note na seção seguinte: 2c53.
Essencialmente, o arquivo consiste em seções, cada uma contendo chaves
com valores.  As classes *note configparser: 22. podem ler e escrever
tais arquivos.  Vamos começar criando o arquivo de configuração acima
programaticamente.

     >>> import configparser
     >>> config = configparser.ConfigParser()
     >>> config['DEFAULT'] = {'ServerAliveInterval': '45',
     ...                      'Compression': 'yes',
     ...                      'CompressionLevel': '9'}
     >>> config['forge.example'] = {}
     >>> config['forge.example']['User'] = 'hg'
     >>> config['topsecret.server.example'] = {}
     >>> topsecret = config['topsecret.server.example']
     >>> topsecret['Port'] = '50022'     # mutates the parser
     >>> topsecret['ForwardX11'] = 'no'  # same here
     >>> config['DEFAULT']['ForwardX11'] = 'yes'
     >>> with open('example.ini', 'w') as configfile:
     ...   config.write(configfile)
     ...

Como você pode ver, podemos tratar um analisador sintático de
configuração como um dicionário.  Existem diferenças, *note descritas
posteriormente: 2c54, mas o comportamento é muito próximo do que você
esperaria de um dicionário.

Agora que criamos e salvamos um arquivo de configuração, vamos lê-lo e
explorar os dados que ele contém.

     >>> config = configparser.ConfigParser()
     >>> config.sections()
     []
     >>> config.read('example.ini')
     ['example.ini']
     >>> config.sections()
     ['forge.example', 'topsecret.server.example']
     >>> 'forge.example' in config
     True
     >>> 'python.org' in config
     False
     >>> config['forge.example']['User']
     'hg'
     >>> config['DEFAULT']['Compression']
     'yes'
     >>> topsecret = config['topsecret.server.example']
     >>> topsecret['ForwardX11']
     'no'
     >>> topsecret['Port']
     '50022'
     >>> for key in config['forge.example']:
     ...     print(key)
     user
     compressionlevel
     serveraliveinterval
     compression
     forwardx11
     >>> config['forge.example']['ForwardX11']
     'yes'

Como podemos ver acima, a API é bastante simples.  A única mágica
envolve a seção ‘DEFAULT’ que fornece valores padrão para todas as
outras seções (1).  Observe também que as chaves nas seções não
diferenciam maiúsculas de minúsculas e são armazenadas em letras
minúsculas (2).

É possível ler diversas configurações para um único *note ConfigParser:
1c8, onde a configuração adicionada mais recentemente terá a maior
prioridade.  Para quaisquer chaves repetidas serão usados os valores da
configuração mais recente, enquanto os valores das chaves anteriores
serão ignorados.  O exemplo a seguir lê um arquivo chamado
‘override.ini’, que irá substituir chaves repetidas do arquivo
‘example.ini’.

     [DEFAULT]
     ServerAliveInterval = -1

     >>> config_override = configparser.ConfigParser()
     >>> config_override['DEFAULT'] = {'ServerAliveInterval': '-1'}
     >>> with open('override.ini', 'w') as configfile:
     ...     config_override.write(configfile)
     ...
     >>> config_override = configparser.ConfigParser()
     >>> config_override.read(['example.ini', 'override.ini'])
     ['example.ini', 'override.ini']
     >>> print(config_override.get('DEFAULT', 'ServerAliveInterval'))
     -1

Este comportamento é equivalente a uma chamada *note
ConfigParser.read(): 14b0. com vários arquivos passados para o parâmetro
'filenames'.

   ---------- Footnotes ----------

   (1) Os analisadores sintáticos de configuração permitem muitas
personalizações.  Caso você tenha interesse em alterar o comportamento
descrito na referência da nota de rodapé, consulte a seção *note
Personalizando o comportamento do analisador sintático: 2c55.

   (2) Os analisadores sintáticos de configuração permitem muitas
personalizações.  Caso você tenha interesse em alterar o comportamento
descrito na referência da nota de rodapé, consulte a seção *note
Personalizando o comportamento do analisador sintático: 2c55.


File: python.info,  Node: Tipos de dados suportados,  Next: Valores reservas,  Prev: Início rápido,  Up: configparser — Analisador sintático de arquivo de configuração

5.14.2.2 Tipos de dados suportados
..................................

Os analisadores sintáticos de configuração não adivinham os tipos de
dados dos valores nos arquivos de configuração, sempre os armazenando
internamente como strings.  Isso significa que se você precisar de
outros tipos de dados, deverá converter por conta própria:

     >>> int(topsecret['Port'])
     50022
     >>> float(topsecret['CompressionLevel'])
     9.0

Como essa tarefa é tão comum, os analisadores sintáticos de configuração
fornecem uma variedade de métodos getter úteis para manipular com
números inteiros, pontos flutuantes e booleanos.  O último é o mais
interessante porque simplesmente passar o valor para ‘bool()’ não
adiantaria nada já que ‘bool('False')’ ainda é ‘True’.  É por isso que
os analisadores sintáticos de configuração também fornecem *note
getboolean(): 2c57.  Este método não diferencia maiúsculas de minúsculas
e reconhece valores booleanos de ‘'yes'’/‘'no'’, ‘'on'’/‘'off'’,
‘'true'’ /‘'false'’ e ‘'1'’/‘'0'’ (1).  Por exemplo:

     >>> topsecret.getboolean('ForwardX11')
     False
     >>> config['forge.example'].getboolean('ForwardX11')
     True
     >>> config.getboolean('forge.example', 'Compression')
     True

Além de *note getboolean(): 2c57, os analisadores sintáticos de
configuração também fornecem métodos *note getint(): 2c58. e *note
getfloat(): 2c59. equivalentes.  Você pode registrar seus próprios
conversores e personalizar os fornecidos.  (2)

   ---------- Footnotes ----------

   (1) Os analisadores sintáticos de configuração permitem muitas
personalizações.  Caso você tenha interesse em alterar o comportamento
descrito na referência da nota de rodapé, consulte a seção *note
Personalizando o comportamento do analisador sintático: 2c55.

   (2) Os analisadores sintáticos de configuração permitem muitas
personalizações.  Caso você tenha interesse em alterar o comportamento
descrito na referência da nota de rodapé, consulte a seção *note
Personalizando o comportamento do analisador sintático: 2c55.


File: python.info,  Node: Valores reservas,  Next: Estrutura dos arquivos INI,  Prev: Tipos de dados suportados,  Up: configparser — Analisador sintático de arquivo de configuração

5.14.2.3 Valores reservas
.........................

Assim como acontece com um dicionário, você pode usar o método *note
get(): 12ad. de uma seção para fornecer valores reservas (fallback):

     >>> topsecret.get('Port')
     '50022'
     >>> topsecret.get('CompressionLevel')
     '9'
     >>> topsecret.get('Cipher')
     >>> topsecret.get('Cipher', '3des-cbc')
     '3des-cbc'

Observe que os valores padrão têm precedência sobre os valores
substitutos.  Por exemplo, em nosso exemplo a chave ‘'CompressionLevel'’
foi especificada apenas na seção ‘'DEFAULT'’.  Se tentarmos obtê-lo na
seção ‘'topsecret.server.example'’, sempre obteremos o padrão, mesmo se
especificarmos um substituto:

     >>> topsecret.get('CompressionLevel', '3')
     '9'

Mais uma coisa a ter em conta é que o método *note get(): 12ad. no nível
do analisador fornece uma interface personalizada e mais complexa,
mantida para compatibilidade com versões anteriores.  Ao usar este
método, um valor substituto pode ser fornecido através do argumento
somente-nomeado ‘fallback’:

     >>> config.get('forge.example', 'monster',
     ...            fallback='No such things as monsters')
     'No such things as monsters'

O mesmo argumento ‘fallback’ pode ser usado com os métodos *note
getint(): 2c58, *note getfloat(): 2c59. e *note getboolean(): 2c57, por
exemplo:

     >>> 'BatchMode' in topsecret
     False
     >>> topsecret.getboolean('BatchMode', fallback=True)
     True
     >>> config['DEFAULT']['BatchMode'] = 'no'
     >>> topsecret.getboolean('BatchMode', fallback=True)
     False


File: python.info,  Node: Estrutura dos arquivos INI,  Next: Seções não nomeadas,  Prev: Valores reservas,  Up: configparser — Analisador sintático de arquivo de configuração

5.14.2.4 Estrutura dos arquivos INI
...................................

Um arquivo de configuração consiste em seções, cada uma liderada por um
cabeçalho ‘[section]’, seguido por entradas de chave/valor separadas por
uma string específica (‘=’ ou ‘:’ por padrão (1)) .  Por padrão, os
nomes das seções diferenciam maiúsculas de minúsculas, mas as chaves não
(2).  Os espaços em branco à esquerda e à direita são removidos das
chaves e dos valores.  Os valores podem ser omitidos se o analisador
sintático estiver configurado para permitir (3), caso em que o
delimitador chave/valor também pode ser omitido.  Os valores também
podem abranger várias linhas, desde que sejam indentados de forma mais
profunda que a primeira linha do valor.  Dependendo do modo do
analisador sintático, as linhas em branco podem ser tratadas como partes
de valores multilinhas ou ignoradas.

Por padrão, um nome de seção válido pode ser qualquer string que não
contenha ‘\n’.  Para alterar isso, consulte *note ConfigParser.SECTCRE:
2c5b.

O nome da primeira seção pode ser omitido se o analisador sintático
estiver configurado para permitir uma seção de nível superior sem nome
com ‘allow_unnamed_section=True’.  Neste caso, as chaves/valores podem
ser recuperadas por *note UNNAMED_SECTION: 2c5c. como em
‘config[UNNAMED_SECTION]’.

Os arquivos de configuração podem incluir comentários, prefixados por
caracteres específicos (‘#’ e ‘;’ por padrão (4)).  Os comentários podem
aparecer sozinhos em uma linha vazia, possivelmente indentados.  (5)

Por exemplo:

     [Valores Simples]
     chave=valor
     espaços nas chaves=permitidos
     espaços nos valores=permitidos também
     espaços em volta do delimitador = obviamente
     você também pode usar : para delimitar chaves de valores

     [Todos Valores São Strings]
     valores como este: 1000000
     ou este: 3.14159265359
     são tratados como números? : não
     inteiros, pontos flutuantes e booleanos são considerados: strings
     pode usar a API para obter valores convertidos diretamente: verdadeiro

     [Valores multilinha]
     chorus: Eu sou um lenhador e estou bem
         Durmo a noite toda e trabalho o dia inteiro

     [Sem valores]
     chave_sem_valor
     valor string vazia aqui =

     [Você pode usar comentários]
     # como este
     ; ou este

     # Por padrão, apenas em uma linha vazia.
     # Comentários em linha podem ser prejudiciais porque eles
     # impedem os usuários de usar os caracteres delimitadores
     # como partes dos valores.
     # Isto posto, isso pode ser personalizado.

         [Seções Podem Ser Indentadas]
             podem_ser_valores_também = True
             isso_significa_algo_especial = False
             propósito = formatação para legibilidade
             valores_multilinha = são
                 tratados sem problemas desde
                 que eles estejam indentados
                 mais profundamente do que a
                 primeira linha de um valor
             # Mencionamos que também podemos indentar comentários?

   ---------- Footnotes ----------

   (1) Os analisadores sintáticos de configuração permitem muitas
personalizações.  Caso você tenha interesse em alterar o comportamento
descrito na referência da nota de rodapé, consulte a seção *note
Personalizando o comportamento do analisador sintático: 2c55.

   (2) Os analisadores sintáticos de configuração permitem muitas
personalizações.  Caso você tenha interesse em alterar o comportamento
descrito na referência da nota de rodapé, consulte a seção *note
Personalizando o comportamento do analisador sintático: 2c55.

   (3) Os analisadores sintáticos de configuração permitem muitas
personalizações.  Caso você tenha interesse em alterar o comportamento
descrito na referência da nota de rodapé, consulte a seção *note
Personalizando o comportamento do analisador sintático: 2c55.

   (4) Os analisadores sintáticos de configuração permitem muitas
personalizações.  Caso você tenha interesse em alterar o comportamento
descrito na referência da nota de rodapé, consulte a seção *note
Personalizando o comportamento do analisador sintático: 2c55.

   (5) Os analisadores sintáticos de configuração permitem muitas
personalizações.  Caso você tenha interesse em alterar o comportamento
descrito na referência da nota de rodapé, consulte a seção *note
Personalizando o comportamento do analisador sintático: 2c55.


File: python.info,  Node: Seções não nomeadas,  Next: Interpolação de valores,  Prev: Estrutura dos arquivos INI,  Up: configparser — Analisador sintático de arquivo de configuração

5.14.2.5 Seções não nomeadas
............................

O nome da primeira seção (ou único) pode ser omitido e os valores
recuperados pelo atributo *note UNNAMED_SECTION: 2c5c.

     >>> config = """
     ... option = value
     ...
     ... [  Section 2  ]
     ... another = val
     ... """
     >>> unnamed = configparser.ConfigParser(allow_unnamed_section=True)
     >>> unnamed.read_string(config)
     >>> unnamed.get(configparser.UNNAMED_SECTION, 'option')
     'value'


File: python.info,  Node: Interpolação de valores,  Next: Acesso através do protocolo de mapeamento,  Prev: Seções não nomeadas,  Up: configparser — Analisador sintático de arquivo de configuração

5.14.2.6 Interpolação de valores
................................

Além da funcionalidade principal, *note ConfigParser: 1c8. oferece
suporte a interpolação.  Isso significa que os valores podem ser
pré-processados antes de retorná-los das chamadas ‘get()’.

 -- Classe: configparser.BasicInterpolation

     A implementação padrão usada por *note ConfigParser: 1c8.  Ele
     permite que os valores contenham strings de formato que se referem
     a outros valores na mesma seção ou valores na seção padrão especial
     (1).  Valores padrão adicionais podem ser fornecidos na
     inicialização.

     Por exemplo:

          [Paths]
          home_dir: /Users
          my_dir: %(home_dir)s/lumberjack
          my_pictures: %(my_dir)s/Pictures

          [Escape]
          # use um %% para escapar o sinal de % (% é o único caractere que precisa ser escapado):
          gain: 80%%

     No exemplo acima, *note ConfigParser: 1c8. com 'interpolation'
     definido como ‘BasicInterpolation()’ resolveria ‘%(home_dir)s’ para
     o valor de ‘home_dir’ (‘/Users’ neste caso).  ‘%(my_dir)s’ na
     verdade resolveria para ‘/Users/lumberjack’.  Todas as
     interpolações são feitas sob demanda, portanto as chaves usadas na
     cadeia de referências não precisam ser especificadas em nenhuma
     ordem específica no arquivo de configuração.

     Com ‘interpolation’ definido como ‘None’, o analisador sintático
     simplesmente retornaria ‘%(my_dir)s/Pictures’ como o valor de
     ‘my_pictures’ e ‘%(home_dir)s/lumberjack’ como o valor de ‘my_dir’.

 -- Classe: configparser.ExtendedInterpolation

     Um manipulador alternativo para interpolação que implementa uma
     sintaxe mais avançada, usada, por exemplo, em ‘zc.buildout’.  A
     interpolação estendida usa ‘${section:option}’ para denotar um
     valor de uma seção estrangeira.  A interpolação pode abranger
     vários níveis.  Por conveniência, se a parte ‘section:’ for
     omitida, a interpolação será padronizada para a seção atual (e
     possivelmente para os valores padrão da seção especial).

     Por exemplo, a configuração especificada acima com interpolação
     básica ficaria assim com interpolação estendida:

          [Paths]
          home_dir: /Users
          my_dir: ${home_dir}/lumberjack
          my_pictures: ${my_dir}/Pictures

          [Escape]
          # use a $$ para escapar o sinal de $ ($ é o único caractere que precisa ser escapado):
          cost: $$80

     Valores de outras seções também podem ser obtidos:

          [Common]
          home_dir: /Users
          library_dir: /Library
          system_dir: /System
          macports_dir: /opt/local

          [Frameworks]
          Python: 3.2
          path: ${Common:system_dir}/Library/Frameworks/

          [Arthur]
          nickname: Two Sheds
          last_name: Jackson
          my_dir: ${Common:home_dir}/twosheds
          my_pictures: ${my_dir}/Pictures
          python_dir: ${Frameworks:path}/Python/Versions/${Frameworks:Python}

   ---------- Footnotes ----------

   (1) Os analisadores sintáticos de configuração permitem muitas
personalizações.  Caso você tenha interesse em alterar o comportamento
descrito na referência da nota de rodapé, consulte a seção *note
Personalizando o comportamento do analisador sintático: 2c55.


File: python.info,  Node: Acesso através do protocolo de mapeamento,  Next: Personalizando o comportamento do analisador sintático,  Prev: Interpolação de valores,  Up: configparser — Analisador sintático de arquivo de configuração

5.14.2.7 Acesso através do protocolo de mapeamento
..................................................

Adicionado na versão 3.2.

Acesso através do protocolo de mapeamento é um nome genérico para
funcionalidade que permite usar objetos personalizados como se fossem
dicionários.  No caso de *note configparser: 22, a implementação da
interface de mapeamento está usando a notação
‘parser['section']['option']’.

‘parser['section']’ em particular retorna um intermediário para os dados
da seção no analisador sintático.  Isso significa que os valores não são
copiados, mas obtidos do analisador sintático original sob demanda.  O
que é ainda mais importante é que quando os valores são alterados em um
intermediário de seção, eles são, na verdade, modificados no analisador
sintático original.

Os objetos *note configparser: 22. se comportam o mais próximo possível
dos dicionários reais.  A interface de mapeamento é completa e segue a
ABC *note MutableMapping: 10eb.  No entanto, existem algumas diferenças
que devem ser levadas em consideração:

   * Por padrão, todas as chaves nas seções são acessíveis sem distinção
     entre maiúsculas e minúsculas (1).  Por exemplo.  ‘for option in
     parser["section"]’ produz apenas nomes de chaves de opção
     ‘optionxform’ada.  Isso significa chaves em letras minúsculas por
     padrão.  Ao mesmo tempo, para uma seção que contém a chave ‘'a'’,
     ambas as expressões retornam ‘True’:

          "a" in parser["section"]
          "A" in parser["section"]

   * Todas as seções também incluem valores ‘DEFAULTSECT’, o que
     significa que ‘.clear()’ em uma seção não pode deixá-la
     visivelmente vazia.  Isso ocorre porque os valores padrão não podem
     ser excluídos da seção (porque tecnicamente eles não estão lá).  Se
     eles forem substituídos na seção, a exclusão fará com que o valor
     padrão fique visível novamente.  Tentar excluir um valor padrão
     causa um *note KeyError: 344.

   * ‘DEFAULTSECT’ não pode ser removido do analisador sintático:

        * tentar excluí-lo levanta *note ValueError: 202,

        * ‘parser.clear()’ deixa-o intacto,

        * ‘parser.popitem()’ nunca o retorna.

   * ‘parser.get(section, option, **kwargs)’ - o segundo argumento 'não'
     é um valor substituto.  Observe, entretanto, que os métodos ‘get()’
     em nível de seção são compatíveis tanto com o protocolo de
     mapeamento quanto com a API clássica do configparser.

   * ‘parser.items()’ é compatível com o protocolo de mapeamento
     (retorna uma lista de pares 'section_name', 'section_proxy'
     incluindo o DEFAULTSECT). Entretanto, este método também pode ser
     invocado com argumentos: ‘parser.items(section, raw, vars)’.  A
     última chamada retorna uma lista de pares 'option', 'value' para
     uma ‘section’ especificada, com todas as interpolações expandidas
     (a menos que ‘raw=True’ seja fornecido).

O protocolo de mapeamento é implementado sobre a API legada existente
para que as subclasses que substituem a interface original ainda tenham
mapeamentos funcionando conforme o esperado.

   ---------- Footnotes ----------

   (1) Os analisadores sintáticos de configuração permitem muitas
personalizações.  Caso você tenha interesse em alterar o comportamento
descrito na referência da nota de rodapé, consulte a seção *note
Personalizando o comportamento do analisador sintático: 2c55.


File: python.info,  Node: Personalizando o comportamento do analisador sintático,  Next: Exemplos de APIs legadas,  Prev: Acesso através do protocolo de mapeamento,  Up: configparser — Analisador sintático de arquivo de configuração

5.14.2.8 Personalizando o comportamento do analisador sintático
...............................................................

Existem quase tantas variantes de formato INI quanto aplicações que o
utilizam.  *note configparser: 22. percorre um longo caminho para
fornecer suporte para o maior conjunto sensato de estilos INI
disponíveis.  A funcionalidade padrão é determinada principalmente pelo
histórico e é muito provável que você queira personalizar alguns dos
recursos.

A maneira mais comum de alterar a forma como um analisador sintático de
configuração específico funciona é usar as opções ‘__init__()’:

   * 'defaults', valor padrão: ‘None’

     Esta opção aceita um dicionário de pares chave-valor que será
     inicialmente colocado na seção ‘DEFAULT’.  Isso é uma maneira
     elegante de oferecer suporte a arquivos de configuração concisos
     que não especificam valores iguais ao padrão documentado.

     Dica: se você deseja especificar valores padrão para uma seção
     específica, use *note read_dict(): 2c60. antes de ler o arquivo
     real.

   * 'dict_type', valor padrão: *note dict: 256.

     Esta opção tem um grande impacto no comportamento do protocolo de
     mapeamento e na aparência dos arquivos de configuração gravados.
     Com o dicionário padrão, cada seção é armazenada na ordem em que
     foram adicionadas ao analisador sintático.  O mesmo vale para
     opções dentro das seções.

     Um tipo de dicionário alternativo pode ser usado, por exemplo, para
     ordenar as seções e opções ao fazer 'write-back'.

     Observação: existem maneiras de adicionar um conjunto de pares de
     valores-chave em uma única operação.  Quando você usa um dicionário
     regular nessas operações, a classificação das chaves será ordenada.
     Por exemplo:

          >>> parser = configparser.ConfigParser()
          >>> parser.read_dict({'seção1': {'chave1': 'valor1',
          ...                                'chave2': 'valor2',
          ...                                'chave3': 'valor3'},
          ...                   'seção2': {'chaveA': 'valorA',
          ...                                'chaveB': 'valorB',
          ...                                'chaveC': 'valorC'},
          ...                   'seção3': {'foo': 'x',
          ...                                'bar': 'y',
          ...                                'baz': 'z'}
          ... })
          >>> parser.sections()
          ['seção1', 'seção2', 'seção3']
          >>> [option for option in parser['seção3']]
          ['foo', 'bar', 'baz']

   * 'allow_no_value', valor padrão: ‘False’

     Alguns arquivos de configuração são conhecidos por incluir
     configurações sem valores, mas que de outra forma estão em
     conformidade com a sintaxe suportada por *note configparser: 22.  O
     parâmetro 'allow_no_value' para o construtor pode ser usado para
     indicar que tais valores devem ser aceitos:

          >>> import configparser

          >>> sample_config = """
          ... [mysqld]
          ...   user = mysql
          ...   pid-file = /var/run/mysqld/mysqld.pid
          ...   skip-external-locking
          ...   old_passwords = 1
          ...   skip-bdb
          ...   # não precisamos de ACID hoje
          ...   skip-innodb
          ... """
          >>> config = configparser.ConfigParser(allow_no_value=True)
          >>> config.read_string(sample_config)

          >>> # Configurações com valores são tratados como antes:
          >>> config["mysqld"]["user"]
          'mysql'

          >>> # Configurações sem valores fornecem None:
          >>> config["mysqld"]["skip-bdb"]

          >>> # Configurações que não são especificadas ainda levantam um erro:
          >>> config["mysqld"]["não-existe"]
          Traceback (most recent call last):
            ...
          KeyError: 'não-existe'

   * 'delimiters', valor padrão: ‘('=', ':')’

     Delimitadores são substrings que delimitam chaves de valores dentro
     de uma seção.  A primeira ocorrência de uma substring delimitadora
     em uma linha é considerada um delimitador.  Isso significa que os
     valores (mas não as chaves) podem conter os delimitadores.

     Veja também o argumento 'space_around_delimiters' para *note
     ConfigParser.write(): 2c61.

   * 'comment_prefixes', valor padrão: ‘('#', ';')’

   * 'inline_comment_prefixes', valor padrão: ‘None’

     Prefixos de comentários são strings que indicam o início de um
     comentário válido em um arquivo de configuração.
     'comment_prefixes' são usados apenas em linhas vazias
     (opcionalmente indentadas), enquanto 'inline_comment_prefixes' pode
     ser usado após cada valor válido (por exemplo, nomes de seções,
     opções e linhas vazias também).  Por padrão, os comentários
     embutidos estão desabilitados e ‘'#'’ e ‘';'’ são usados como
     prefixos para comentários de linha inteira.

     Alterado na versão 3.2: Nas versões anteriores do *note
     configparser: 22, o comportamento correspondia a
     ‘comment_prefixes=('#',';')’ e ‘inline_comment_prefixes=(';',)’.

     Observe que os analisadores sintáticos de configuração não oferecem
     suporte a escape de prefixos de comentários, portanto, usar
     'inline_comment_prefixes' pode impedir que os usuários especifiquem
     valores de opção com caracteres usados como prefixos de
     comentários.  Em caso de dúvida, evite definir
     'inline_comment_prefixes'.  Em qualquer circunstância, a única
     maneira de armazenar caracteres de prefixo de comentário no início
     de uma linha em valores multilinha é interpolar o prefixo, por
     exemplo:

          >>> from configparser import ConfigParser, ExtendedInterpolation
          >>> parser = ConfigParser(interpolation=ExtendedInterpolation())
          >>> # the default BasicInterpolation could be used as well
          >>> parser.read_string("""
          ... [DEFAULT]
          ... hash = #
          ...
          ... [hashes]
          ... shebang =
          ...   ${hash}!/usr/bin/env python
          ...   ${hash} -*- coding: utf-8 -*-
          ...
          ... extensions =
          ...   enabled_extension
          ...   another_extension
          ...   #disabled_by_comment
          ...   yet_another_extension
          ...
          ... interpolation not necessary = if # is not at line start
          ... even in multiline values = line #1
          ...   line #2
          ...   line #3
          ... """)
          >>> print(parser['hashes']['shebang'])

          #!/usr/bin/env python
          # -*- coding: utf-8 -*-
          >>> print(parser['hashes']['extensions'])

          enabled_extension
          another_extension
          yet_another_extension
          >>> print(parser['hashes']['interpolation not necessary'])
          if # is not at line start
          >>> print(parser['hashes']['even in multiline values'])
          line #1
          line #2
          line #3

   * 'strict', valor padrão: ‘True’

     Ao definir como ‘True’, o analisador sintático não permitirá
     nenhuma seção ou opção duplicada durante a leitura de uma única
     fonte (usando *note read_file(): 506, *note read_string(): 2c62. ou
     *note read_dict(): 2c60.).  Recomenda-se usar analisadores
     sintáticos estritos em novas aplicações.

     Alterado na versão 3.2: Nas versões anteriores do *note
     configparser: 22, o comportamento correspondia a ‘strict=False’.

   * 'empty_lines_in_values', valor padrão: ‘True’

     Em analisadores sintáticos de configuração, os valores podem
     abranger várias linhas, desde que sejam mais indentados do que a
     chave que os contém.  Por padrão, os analisadores sintáticos também
     permitem que linhas vazias façam parte de valores.  Ao mesmo tempo,
     as chaves podem ser indentados arbitrariamente para melhorar a
     legibilidade.  Consequentemente, quando os arquivos de configuração
     ficam grandes e complexos, é fácil para o usuário perder o controle
     da estrutura do arquivo.  Tomemos por exemplo:

          [Seção]
          chave = multilinha
            valor com uma pegadinha

           esta = ainda é parte do valor multilinha de 'chave'

     Isso pode ser especialmente problemático para o usuário ver se está
     usando uma fonte proporcional para editar o arquivo.  É por isso
     que quando sua aplicação não precisa de valores com linhas vazias,
     você deve considerar proibi-los.  Isso fará com que as linhas
     vazias dividam as chaves sempre.  No exemplo acima, seriam
     produzidas duas chaves, ‘key’ e ‘this’.

   * 'default_section', valor padrão: ‘configparser.DEFAULTSECT’ (isto
     é: ‘"DEFAULT"’)

     A convenção de permitir uma seção especial de valores padrão para
     outras seções ou fins de interpolação é um conceito poderoso desta
     biblioteca, permitindo aos usuários criar configurações
     declarativas complexas.  Esta seção normalmente é chamada de
     ‘"DEFAULT"’, mas pode ser personalizada para apontar para qualquer
     outro nome de seção válido.  Alguns valores típicos incluem:
     ‘"general"’ ou ‘"common"’.  O nome fornecido é usado para
     reconhecer seções padrão ao ler de qualquer fonte e é usado ao
     gravar a configuração em um arquivo.  Seu valor atual pode ser
     recuperado usando o atributo ‘parser_instance.default_section’ e
     pode ser modificado em tempo de execução (ou seja, para converter
     arquivos de um formato para outro).

   * 'interpolation', valor padrão: ‘configparser.BasicInterpolation’

     O comportamento de interpolação pode ser personalizado fornecendo
     um manipulador personalizado por meio do argumento 'interpolation'.
     ‘None’ pode ser usado para desligar completamente a interpolação,
     ‘ExtendedInterpolation()’ fornece uma variante mais avançada
     inspirada em ‘zc.buildout’.  Mais sobre o assunto na *note seção de
     documentação dedicada: 2c5f.  *note RawConfigParser: f98. tem um
     valor padrão de ‘None’.

   * 'converters', valor padrão: não definido

     Os analisadores sintáticos de configuração fornecem getters de
     valor de opção que realizam conversão de tipo.  Por padrão, *note
     getint(): 2c58, *note getfloat(): 2c59. e *note getboolean(): 2c57.
     são implementados.  Caso outros getters sejam desejáveis, os
     usuários podem defini-los em uma subclasse ou passar um dicionário
     onde cada chave é um nome do conversor e cada valor é um chamável
     que implementa a referida conversão.  Por exemplo, passar
     ‘{'decimal': decimal.Decimal}’ adicionaria ‘getdecimal()’ no objeto
     analisador sintático e em todos os proxies de seção.  Em outras
     palavras, será possível escrever
     ‘parser_instance.getdecimal('section', 'key', fallback=0)’ e
     ‘parser_instance['section'].getdecimal('key', 0)’.

     Se o conversor precisar acessar o estado do analisador sintático,
     ele poderá ser implementado como um método em uma subclasse do
     analisador sintático de configuração.  Se o nome deste método
     começar com ‘get’, ele estará disponível em todos os intermediários
     de seção, na forma compatível com dict (veja o exemplo
     ‘getdecimal()’ acima).

Uma personalização mais avançada pode ser obtida substituindo os valores
padrão desses atributos do analisador sintático.  Os padrões são
definidos nas classes, portanto podem ser substituídos por subclasses ou
por atribuição de atributos.

 -- Atributo: ConfigParser.BOOLEAN_STATES

     Por padrão, ao usar *note getboolean(): 2c57, os analisadores
     sintáticos de configuração consideram os seguintes valores ‘True’:
     ‘'1'’, ‘'yes'’, ‘'true'’, ‘'on'’ e os seguintes valores ‘False’:
     ‘'0'’, ‘'no'’, ‘'false'’, ‘'off'’.  Você pode substituir isso
     especificando um dicionário personalizado de strings e seus
     resultados booleanos.  Por exemplo:

          >>> custom = configparser.ConfigParser()
          >>> custom['seção1'] = {'funky': 'nope'}
          >>> custom['seção1'].getboolean('funky')
          Traceback (most recent call last):
          ...
          ValueError: Not a boolean: nope
          >>> custom.BOOLEAN_STATES = {'sure': True, 'nope': False}
          >>> custom['seção1'].getboolean('funky')
          False

     Outros pares booleanos típicos incluem ‘accept’/‘reject’ ou
     ‘enabled’/‘disabled’.

 -- Método: ConfigParser.optionxform (option)

     Este método transforma nomes de opções em cada operação de leitura,
     obtenção ou definição.  O padrão converte o nome em letras
     minúsculas.  Isso também significa que quando um arquivo de
     configuração for gravado, todas as chaves estarão em letras
     minúsculas.  Substitua esse método se for inadequado.  Por exemplo:

          >>> config = """
          ... [Seção1]
          ... Chave = Valor
          ...
          ... [Seção2]
          ... OutraChave = Valor
          ... """
          >>> typical = configparser.ConfigParser()
          >>> typical.read_string(config)
          >>> list(typical['Seção1'].keys())
          ['chave']
          >>> list(typical['Seção2'].keys())
          ['outrachave']
          >>> custom = configparser.RawConfigParser()
          >>> custom.optionxform = lambda option: option
          >>> custom.read_string(config)
          >>> list(custom['Seção1'].keys())
          ['Chave']
          >>> list(custom['Seção2'].keys())
          ['OutraChave']

          Nota: A função optionxform transforma nomes de opções em um
          formato canônico.  Esta deve ser uma função idempotente: se o
          nome já estiver na forma canônica, deverá ser retornado
          inalterado.

 -- Atributo: ConfigParser.SECTCRE

     Uma expressão regular compilada usada para analisar cabeçalhos de
     seção.  O padrão corresponde a ‘[section]’ para o nome ‘"section"’.
     O espaço em branco é considerado parte do nome da seção, portanto
     ‘[ larch ]’ será lido como uma seção de nome ‘" larch "’.
     Substitua esse atributo se for inadequado.  Por exemplo:

          >>> import re
          >>> config = """
          ... [Seção 1]
          ... opção = valor
          ...
          ... [  Seção 2  ]
          ... outro = valor
          ... """
          >>> typical = configparser.ConfigParser()
          >>> typical.read_string(config)
          >>> typical.sections()
          ['Seção 1', '  Seção 2  ']
          >>> custom = configparser.ConfigParser()
          >>> custom.SECTCRE = re.compile(r"\[ *(?P<header>[^]]+?) *\]")
          >>> custom.read_string(config)
          >>> custom.sections()
          ['Seção 1', 'Seção 2']

          Nota: Embora os objetos ConfigParser também usem um atributo
          ‘OPTCRE’ para reconhecer linhas de opção, não é recomendado
          substituí-lo porque isso interferiria nas opções do construtor
          'allow_no_value' e 'delimiters'.


File: python.info,  Node: Exemplos de APIs legadas,  Next: Objetos ConfigParser,  Prev: Personalizando o comportamento do analisador sintático,  Up: configparser — Analisador sintático de arquivo de configuração

5.14.2.9 Exemplos de APIs legadas
.................................

Principalmente por questões de compatibilidade com versões anteriores,
*note configparser: 22. fornece também uma API legada com métodos
‘get’/‘set’ explícitos.  Embora existam casos de uso válidos para os
métodos descritos abaixo, o acesso ao protocolo de mapeamento é
preferido para novos projetos.  A API legada é às vezes mais avançada,
de baixo nível e totalmente contraintuitiva.

Um exemplo de escrita em um arquivo de configuração:

     import configparser

     config = configparser.RawConfigParser()

     # Observe que usando as funções set do RawConfigParser, você pode atribuir
     # valores não string a chaves internamente, mas receberá um erro ao tentar
     # gravar em um arquivo ou quando obtê-lo em modo não bruta. Definir valores
     # usando o protocolo de mapeamento ou set() do ConfigParser não permite que
     # tais atribuições ocorram.
     config.add_section('Seção1')
     config.set('Seção1', 'an_int', '15')
     config.set('Seção1', 'a_bool', 'true')
     config.set('Seção1', 'a_float', '3.1415')
     config.set('Seção1', 'baz', 'divertido')
     config.set('Seção1', 'bar', 'Python')
     config.set('Seção1', 'foo', '%(bar)s é %(baz)s!')

     # Escrevendo nosso arquivo de configuração em 'example.cfg'
     with open('example.cfg', 'w') as configfile:
         config.write(configfile)

Um exemplo de leitura do arquivo de configuração novamente:

     import configparser

     config = configparser.RawConfigParser()
     config.read('example.cfg')

     # getfloat() levanta uma exceção se o valor não for um ponto flutuante
     # getint() e getboolean() também fazem isso para seus respectivos tipos
     a_float = config.getfloat('Seção1', 'a_float')
     an_int = config.getint('Seção1', 'an_int')
     print(a_float + an_int)

     # Note que a próxima saída não interpola '%(bar)s' ou '%(baz)s'.
     # Isso ocorre porque estamos usando RawConfigParser().
     if config.getboolean('Seção1', 'a_bool'):
         print(config.get('Seção1', 'foo'))

Para obter interpolação, use *note ConfigParser: 1c8.:

     import configparser

     cfg = configparser.ConfigParser()
     cfg.read('example.cfg')

     # Defina o argumento *raw* opcional de get() para True se você quiser desabilitar
     # interpolação em uma única operação de get.
     print(cfg.get('Seção1', 'foo', raw=False))  # -> "Python é divertido!"
     print(cfg.get('Seção1', 'foo', raw=True))   # -> "%(bar)s é %(baz)s!"

     # O argumento opcional *vars* é um dicionário com membros que vão aceitar
     # precedência na interpolação.
     print(cfg.get('Seção1', 'foo', vars={'bar': 'Documentação',
                                            'baz': 'maligna'}))

     # The optional *fallback* argument can be used to provide a fallback value
     print(cfg.get('Seção1', 'foo'))
           # -> "Python é divertido!"

     print(cfg.get('Seção1', 'foo', fallback='Monty não é.'))
           # -> "Python é divertido!"

     print(cfg.get('Seção1', 'monstro', fallback='Não existem monstros.'))
           # -> "Não existem monstros."

     # Um print(cfg.get('Seção1', 'monster')) levantaria NoOptionError,
     # mas nós também podemos usar:

     print(cfg.get('Seção1', 'mosntro', fallback=None))
           # -> None

Os valores padrão estão disponíveis em ambos os tipos de ConfigParsers.
Eles são usados em interpolação se uma opção usada não estiver definida
em outro lugar.

     import configparser

     # Nova instância com 'bar' e 'baz' padrão para 'A vida' e 'difícil' cada
     config = configparser.ConfigParser({'bar': 'A vida', 'baz': 'difícil'})
     config.read('example.cfg')

     print(config.get('Seção1', 'foo'))     # -> "Python é divertido!"
     config.remove_option('Seção1', 'bar')
     config.remove_option('Seção1', 'baz')
     print(config.get('Seção1', 'foo'))     # -> "A vida é difícil!"


File: python.info,  Node: Objetos ConfigParser,  Next: Objetos RawConfigParser,  Prev: Exemplos de APIs legadas,  Up: configparser — Analisador sintático de arquivo de configuração

5.14.2.10 Objetos ConfigParser
..............................

 -- Classe: configparser.ConfigParser (defaults=None, dict_type=dict,
          allow_no_value=False, *, delimiters=('=', ':'),
          comment_prefixes=('#', ';'), inline_comment_prefixes=None,
          strict=True, empty_lines_in_values=True,
          default_section=configparser.DEFAULTSECT,
          interpolation=BasicInterpolation(), converters={},
          allow_unnamed_section=False)

     O principal analisador sintático de configuração.  Quando
     'defaults' é fornecido, ele é inicializado no dicionário de padrões
     intrínsecos.  Quando 'dict_type' for fornecido, ele será usado para
     criar os objetos dicionário para a lista de seções, para as opções
     dentro de uma seção e para os valores padrão.

     Quando 'delimiters' são fornecidos, eles são usados como o conjunto
     de substrings que dividem chaves de valores.  Quando
     'comment_prefixes' for fornecido, ele será usado como o conjunto de
     substrings que prefixam comentários em linhas vazias.  Os
     comentários podem ser indentados.  Quando 'inline_comment_prefixes'
     for fornecido, ele será usado como o conjunto de substrings que
     prefixam comentários em linhas não vazias.

     Quando 'strict' for ‘True’ (o padrão), o analisador sintático não
     permitirá nenhuma seção ou opção duplicada durante a leitura de uma
     única fonte (arquivo, string ou dicionário), levantando *note
     DuplicateSectionError: 12b0. ou *note DuplicateOptionError: 12b1.
     Quando 'empty_lines_in_values' é ‘False’ (padrão: ‘True’), cada
     linha vazia marca o fim de uma opção.  Caso contrário, as linhas
     vazias internas de uma opção multilinha serão mantidas como parte
     do valor.  Quando 'allow_no_value' for ‘True’ (padrão: ‘False’),
     opções sem valores serão aceitas; o valor mantido para estes é
     ‘None’ e eles são serializados sem o delimitador final.

     Quando 'default_section' é fornecido, ele especifica o nome da
     seção especial que contém valores padrão para outras seções e
     propósitos de interpolação (normalmente chamada de ‘"DEFAULT"’).
     Este valor pode ser recuperado e alterado em tempo de execução
     usando o atributo de instância ‘default_section’.  Isso não
     reavaliará um arquivo de configuração já analisado, mas será usado
     ao escrever configurações analisadas em um novo arquivo de
     configuração.

     O comportamento de interpolação pode ser personalizado fornecendo
     um manipulador personalizado por meio do argumento 'interpolation'.
     ‘None’ pode ser usado para desligar completamente a interpolação,
     ‘ExtendedInterpolation()’ fornece uma variante mais avançada
     inspirada em ‘zc.buildout’.  Mais sobre o assunto na *note seção de
     documentação dedicada: 2c5f.

     Todos os nomes de opções usados na interpolação serão passados
     através do método *note optionxform(): 2c67. assim como qualquer
     outra referência de nome de opção.  Por exemplo, usando a
     implementação padrão de *note optionxform(): 2c67. (que converte
     nomes de opções para letras minúsculas), os valores ‘foo %(bar)s’ e
     ‘foo %(BAR)s’ são equivalentes.

     Quando 'converters' é fornecido, deve ser um dicionário onde cada
     chave representa o nome de um conversor de tipo e cada valor é um
     chamável implementando a conversão de string para o tipo de dados
     desejado.  Cada conversor obtém seu próprio método ‘get*()’
     correspondente no objeto analisador sintático e nos intermediários
     de seção.

     Quando 'allow_unnamed_section' é ‘True’ (padrão: ‘False’), o
     primeiro nome da seção pode ser omitido.  Veja a seção *note
     "Seções não nomeadas": 2c5e.

     É possível ler diversas configurações para um único *note
     ConfigParser: 1c8, onde a configuração adicionada mais recentemente
     terá a maior prioridade.  Para quaisquer chaves repetidas serão
     usados os valores da configuração mais recente, enquanto os valores
     das chaves anteriores serão ignorados.  O exemplo a seguir lê um
     arquivo chamado ‘override.ini’, que irá substituir chaves repetidas
     do arquivo ‘example.ini’.

          [DEFAULT]
          ServerAliveInterval = -1

          >>> config_override = configparser.ConfigParser()
          >>> config_override['DEFAULT'] = {'ServerAliveInterval': '-1'}
          >>> with open('override.ini', 'w') as configfile:
          ...     config_override.write(configfile)
          ...
          >>> config_override = configparser.ConfigParser()
          >>> config_override.read(['example.ini', 'override.ini'])
          ['example.ini', 'override.ini']
          >>> print(config_override.get('DEFAULT', 'ServerAliveInterval'))
          -1

     Alterado na versão 3.1: O padrão 'dict_type' é *note
     collections.OrderedDict: 5db.

     Alterado na versão 3.2: 'allow_no_value', 'delimiters',
     'comment_prefixes', 'strict', 'empty_lines_in_values',
     'default_section' e 'interpolation' foram adicionados.

     Alterado na versão 3.5: O argumento 'converters' foi adicionado.

     Alterado na versão 3.7: O argumento 'defaults' é lido com *note
     read_dict(): 2c60, fornecendo um comportamento consistente em todo
     o analisador: chaves e valores que não são de string são
     convertidos implicitamente em strings.

     Alterado na versão 3.8: O 'dict_type' padrão é *note dict: 256,
     pois agora preserva a ordem de inserção.

     Alterado na versão 3.13: Levanta *note MultilineContinuationError:
     2c68. quando 'allow_no_value' for ‘True’, e uma chave sem valor
     continua com uma linha indentada.

     Alterado na versão 3.13: O argumento 'allow_unnamed_section' foi
     adicionado.

      -- Método: defaults ()

          Retorna um dicionário contendo os padrões de toda a instância.

      -- Método: sections ()

          Retorna uma lista das seções disponíveis; a 'seção padrão' não
          está incluída na lista.

      -- Método: add_section (section)

          Adiciona uma seção de nome 'section' à instância.  Se já
          existir uma seção com o nome fornecido, *note
          DuplicateSectionError: 12b0. será levantada.  Se o nome da
          'seção padrão' for passado, *note ValueError: 202. será
          levantada.  O nome da seção deve ser uma string; caso
          contrário, *note TypeError: 2c3. será levantada.

          Alterado na versão 3.2: Nomes de seções sem string levantam
          *note TypeError: 2c3.

      -- Método: has_section (section)

          Indica se a 'section' nomeada está presente na configuração.
          A 'seção padrão' não é reconhecida.

      -- Método: options (section)

          Retorna uma lista de opções disponíveis na 'section'
          especificada.

      -- Método: has_option (section, option)

          Se a 'section' fornecida existir e contiver a 'option'
          fornecida, retorna *note True: c27.; caso contrário, retorna
          *note False: b49.  Se a 'section' especificada for *note None:
          675. ou uma string vazia, DEFAULT será presumido.

      -- Método: read (filenames, encoding=None)

          Tenta ler e analisar um iterável de nomes de arquivos,
          retornando uma lista de nomes de arquivos que foram analisados
          com sucesso.

          Se 'filenames' for uma string, um objeto *note bytes: 1c2. ou
          um *note objeto caminho ou similar: 2a0, este parâmetro será
          tratado como um único nome de arquivo.  Se um arquivo nomeado
          em 'filenames' não puder ser aberto, esse arquivo será
          ignorado.  Isso foi projetado para que você possa especificar
          um iterável de possíveis locais de arquivo de configuração
          (por exemplo, o diretório atual, o diretório inicial do
          usuário e algum diretório de todo o sistema) e todos os
          arquivos de configuração existentes no iterável serão lidos.

          Se nenhum dos arquivos nomeados existir, a instância *note
          ConfigParser: 1c8. conterá um conjunto de dados vazio.  Uma
          aplicação que requer que valores iniciais sejam carregados de
          um arquivo deve carregar o arquivo ou arquivos necessários
          usando *note read_file(): 506. antes de chamar *note read():
          14b0. para quaisquer arquivos opcionais:

               import configparser, os

               config = configparser.ConfigParser()
               config.read_file(open('defaults.cfg'))
               config.read(['site.cfg', os.path.expanduser('~/.myapp.cfg')],
                           encoding='cp1250')

          Alterado na versão 3.2: Adicionado o parâmetro 'encoding'.
          Anteriormente, todos os arquivos eram lidos usando a
          codificação padrão para *note open(): 51c.

          Alterado na versão 3.6.1: O parâmetro 'filenames' aceita um
          *note objeto caminho ou similar: 2a0.

          Alterado na versão 3.7: O parâmetro 'filenames' aceita um
          objeto *note bytes: 1c2.

      -- Método: read_file (f, source=None)

          Lê e analisa dados de configuração de 'f' que devem ser
          iteráveis, produzindo strings Unicode (por exemplo, arquivos
          abertos em modo texto).

          O argumento opcional 'source' especifica o nome do arquivo que
          está sendo lido.  Se não for fornecido e 'f' tiver um atributo
          ‘name’, que é usado para 'source'; o padrão é ‘'<???>'’.

          Adicionado na versão 3.2: Substitui ‘readfp()’.

      -- Método: read_string (string, source='<string>')

          Analisa dados de configuração de uma string.

          O argumento opcional 'source' especifica um nome específico do
          contexto da string passada.  Se não for fornecido,
          ‘'<string>'’ será usado.  Geralmente deve ser um caminho do
          sistema de arquivos ou uma URL.

          Adicionado na versão 3.2.

      -- Método: read_dict (dictionary, source='<dict>')

          Carrega a configuração de qualquer objeto que forneça um
          método ‘items()’ dict ou similar.  Chaves são nomes de seções,
          valores são dicionários com chaves e valores que devem estar
          presentes na seção.  Se o tipo de dicionário usado preservar a
          ordem, as seções e suas chaves serão adicionadas em ordem.  Os
          valores são convertidos automaticamente em strings.

          O argumento opcional 'source' especifica um nome específico do
          contexto do dicionário passado.  Se não for fornecido,
          ‘<dict>’ será usado.

          Este método pode ser usado para copiar o estado entre
          analisadores sintáticos.

          Adicionado na versão 3.2.

      -- Método: get (section, option, *, raw=False, vars=None[,
               fallback])

          Obtém um valor de 'option' para a 'section' nomeada.  Se
          'vars' for fornecido, deverá ser um dicionário.  A 'option' é
          pesquisada em 'vars' (se fornecido), 'section' e em
          'DEFAULTSECT' nesta ordem.  Se a chave não for encontrada e
          'fallback' for fornecido, ele será usado como um valor
          alternativo.  ‘None’ pode ser fornecido como um valor
          'fallback'.

          Todas as interpolações ‘'%'’ são expandidas nos valores de
          retorno, a menos que o argumento 'raw' seja verdadeiro.  Os
          valores das chaves de interpolação são consultados da mesma
          maneira que a opção.

          Alterado na versão 3.2: Os argumentos 'raw', 'vars' e
          'fallback' são palavras somente-nomeadas para proteger os
          usuários de tentarem usar o terceiro argumento como substituto
          'fallback' (especialmente ao usar o protocolo de mapeamento).

      -- Método: getint (section, option, *, raw=False, vars=None[,
               fallback])

          Um método de conveniência que força a 'option' na 'section'
          especificada ser um número inteiro.  Veja *note get(): 12ad.
          para explicação de 'raw', 'vars' e 'fallback'.

      -- Método: getfloat (section, option, *, raw=False, vars=None[,
               fallback])

          Um método de conveniência que força a 'option' na 'section'
          especificada ser um número de ponto flutuante.  Veja *note
          get(): 12ad. para explicação de 'raw', 'vars' e 'fallback'.

      -- Método: getboolean (section, option, *, raw=False, vars=None[,
               fallback])

          Um método de conveniência que força a 'option' na 'section'
          especificada a um valor booleano.  Observe que os valores
          aceitos para a opção são ‘'1'’, ‘'yes'’, ‘'true'’, e ‘'on'’, o
          que fazem com que este método retorne ‘True’, e ‘'0'’, ‘'no'’,
          ‘'false'’, e ‘'off'’, o que fazem com que ele retorne ‘False’.
          Esses valores de string são verificados sem distinção entre
          maiúsculas e minúsculas.  Qualquer outro valor fará com que
          ele levante *note ValueError: 202.  Veja *note get(): 12ad.
          para explicação de 'raw', 'vars' e 'fallback'.

      -- Método: items (raw=False, vars=None)

      -- Método: items (section, raw=False, vars=None)

          Quando 'section' não é fornecido, retorna uma lista de pares
          'section_name', 'section_proxy', incluindo DEFAULTSECT.

          Caso contrário, retorna uma lista de pares 'name', 'value'
          para as opções na 'section' fornecida.  Argumentos opcionais
          têm o mesmo significado do método *note get(): 12ad.

          Alterado na versão 3.8: Os itens presentes em 'vars' não
          aparecem mais no resultado.  O comportamento anterior
          misturava opções reais do analisador sintático com variáveis
          fornecidas para interpolação.

      -- Método: set (section, option, value)

          Se a seção fornecida existir, defina a opção fornecida com o
          valor especificado; caso contrário, levanta *note
          NoSectionError: 2c6f.  'option' e 'value' devem ser strings;
          caso contrário, *note TypeError: 2c3. será levantada.

      -- Método: write (fileobject, space_around_delimiters=True)

          Escreve uma representação da configuração no *note objeto
          arquivo: 1203. especificado, que deve ser aberto em modo texto
          (aceitando strings).  Esta representação pode ser analisada
          por uma futura chamada *note read(): 14b0.  Se
          'space_around_delimiters' for verdadeiro, os delimitadores
          entre chaves e valores serão envoltos por espaços.

          Nota: Os comentários no arquivo de configuração original não
          são preservados ao escrever a configuração.  O que é
          considerado um comentário depende dos valores fornecidos para
          'comment_prefix' e 'inline_comment_prefix'.

      -- Método: remove_option (section, option)

          Remove a 'option' especificada da 'section' especificada.  Se
          a seção não existir, levanta *note NoSectionError: 2c6f.  Se
          existisse a opção de ser removida, retorna *note True: c27.;
          caso contrário, retorna *note False: b49.

      -- Método: remove_section (section)

          Remove a 'section' especificada da configuração.  Se a seção
          de fato existiu, retorna ‘True’.  Caso contrário, retorna
          ‘False’.

      -- Método: optionxform (option)

          Transforma o nome da opção 'option' conforme encontrado em um
          arquivo de entrada ou conforme passado pelo código do cliente
          no formato que deve ser usado nas estruturas internas.  A
          implementação padrão retorna uma versão em minúsculas de
          'option'; subclasses podem substituir isso ou o código do
          cliente pode definir um atributo com esse nome nas instâncias
          para afetar esse comportamento.

          Você não precisa criar uma subclasse do analisador sintático
          para usar esse método; você também pode configurá-lo em uma
          instância, para uma função que recebe um argumento de string e
          retorna uma string.  Definir como ‘str’, por exemplo, faria
          com que sejam diferenciadas as letras maiúsculas das
          minúsculas nos nomes das opções:

               cfgparser = ConfigParser()
               cfgparser.optionxform = str

          Observe que ao ler arquivos de configuração, os espaços em
          branco ao redor dos nomes das opções são removidos antes de
          *note optionxform(): 2c67. ser chamado.

 -- Dado: configparser.UNNAMED_SECTION

     Um objeto especial que representa um nome de seção usado para
     referenciar a seção sem nome (veja *note Seções não nomeadas:
     2c5e.).

 -- Dado: configparser.MAX_INTERPOLATION_DEPTH

     A profundidade máxima para interpolação recursiva para *note get():
     12ad. quando o parâmetro 'raw' é falso.  Isso é relevante apenas
     quando a 'interpolation' padrão é usada.


File: python.info,  Node: Objetos RawConfigParser,  Next: Exceções<8>,  Prev: Objetos ConfigParser,  Up: configparser — Analisador sintático de arquivo de configuração

5.14.2.11 Objetos RawConfigParser
.................................

 -- Classe: configparser.RawConfigParser (defaults=None, dict_type=dict,
          allow_no_value=False, *, delimiters=('=', ':'),
          comment_prefixes=('#', ';'), inline_comment_prefixes=None,
          strict=True, empty_lines_in_values=True,
          default_section=configparser.DEFAULTSECT,
          interpolation=BasicInterpolation(), converters={},
          allow_unnamed_section=False)

     Variante legada do *note ConfigParser: 1c8.  Ela tem a interpolação
     desabilitada por padrão e permite nomes de seções não-string, nomes
     de opções e valores através de seus métodos inseguros ‘add_section’
     e ‘set’, bem como o tratamento de argumentos nomeados legados
     ‘defaults=’ .

     Alterado na versão 3.2: 'allow_no_value', 'delimiters',
     'comment_prefixes', 'strict', 'empty_lines_in_values',
     'default_section' e 'interpolation' foram adicionados.

     Alterado na versão 3.5: O argumento 'converters' foi adicionado.

     Alterado na versão 3.8: O 'dict_type' padrão é *note dict: 256,
     pois agora preserva a ordem de inserção.

     Alterado na versão 3.13: O argumento 'allow_unnamed_section' foi
     adicionado.

          Nota: Considere usar *note ConfigParser: 1c8, que verifica os
          tipos de valores a serem armazenados internamente.  Se você
          não quiser interpolação, você pode usar
          ‘ConfigParser(interpolation=None)’.

      -- Método: add_section (section)

          Adiciona uma seção chamada 'section' à instância.  Se já
          existir uma seção com o nome fornecido, *note
          DuplicateSectionError: 12b0. será levantada.  Se o nome da
          'seção padrão' for passado, *note ValueError: 202. será
          levantada.

          O tipo da 'section' não está marcado, o que permite aos
          usuários criar seções nomeadas sem string.  Este comportamento
          não é compatível e pode causar erros internos.

      -- Método: set (section, option, value)

          Se a seção fornecida existir, defina a opção fornecida com o
          valor especificado; caso contrário, levanta *note
          NoSectionError: 2c6f.  Embora seja possível usar *note
          RawConfigParser: f98. (ou *note ConfigParser: 1c8. com
          parâmetros 'raw' definidos como verdadeiro) para armazenamento
          'interno' de valores não-string, funcionalidade completa
          (incluindo interpolação e saída para arquivos) só pode ser
          alcançado usando valores de string.

          Este método permite que os usuários atribuam valores
          não-string às chaves internamente.  Este comportamento não é
          suportado e causará erros ao tentar escrever em um arquivo ou
          obtê-lo no modo não bruto.  'Use a API do protocolo de
          mapeamento' que não permite que tais atribuições ocorram.


File: python.info,  Node: Exceções<8>,  Prev: Objetos RawConfigParser,  Up: configparser — Analisador sintático de arquivo de configuração

5.14.2.12 Exceções
..................

 -- Exceção: configparser.Error

     Classe base para todas as outras exceções do *note configparser:
     22.

 -- Exceção: configparser.NoSectionError

     Exceção levantada quando uma seção especificada não é encontrada.

 -- Exceção: configparser.DuplicateSectionError

     Exceção levantada se *note add_section(): 12af. for chamado com o
     nome de uma seção que já está presente ou em analisadores
     sintáticos estritos quando uma seção for encontrada mais de uma vez
     em um único arquivo de entrada, string ou dicionário.

     Alterado na versão 3.2: Adicionados os atributos e parâmetros
     opcionais 'source' e 'lineno' a ‘__init__()’.

 -- Exceção: configparser.DuplicateOptionError

     Exceção levantada por analisadores sintáticos estritos se uma única
     opção aparecer duas vezes durante a leitura de um único arquivo,
     string ou dicionário.  Isso detecta erros ortográficos e erros
     relacionados a diferenciação de letras maiúsculas e minúsculas
     como, p.  ex., um dicionário pode ter duas chaves representando a
     mesma chave de configuração que não diferencia maiúsculas de
     minúsculas.

 -- Exceção: configparser.NoOptionError

     Exceção levantada quando uma opção especificada não é encontrada na
     seção especificada.

 -- Exceção: configparser.InterpolationError

     Classe base para exceções levantadas quando ocorrem problemas ao
     executar a interpolação de strings.

 -- Exceção: configparser.InterpolationDepthError

     Exceção levantada quando a interpolação de string não pode ser
     concluída porque o número de iterações excede *note
     MAX_INTERPOLATION_DEPTH: 2c72.  Subclasse de *note
     InterpolationError: 2c7a.

 -- Exceção: configparser.InterpolationMissingOptionError

     Exceção levantada quando uma opção referenciada a partir de um
     valor não existe.  Subclasse de *note InterpolationError: 2c7a.

 -- Exceção: configparser.InterpolationSyntaxError

     Exceção levantada quando o texto fonte no qual são feitas as
     substituições não está em conformidade com a sintaxe exigida.
     Subclasse de *note InterpolationError: 2c7a.

 -- Exceção: configparser.MissingSectionHeaderError

     Exceção levantada ao tentar analisar um arquivo que não possui
     cabeçalhos de seção.

 -- Exceção: configparser.ParsingError

     Exceção levantada quando ocorrem erros ao tentar analisar um
     arquivo.

     Alterado na versão 3.12: O atributo ‘filename’ e o argumento do
     construtor ‘__init__()’ foram removidos.  Eles estiveram
     disponíveis usando o nome ‘source’ desde 3.2.

 -- Exceção: configparser.MultilineContinuationError

     Exceção levantada quando uma chave sem valor correspondente
     continua com uma linha indentada.

     Adicionado na versão 3.13.


File: python.info,  Node: tomllib — Analisa arquivos TOML,  Next: netrc — Arquivo de processamento netrc,  Prev: configparser — Analisador sintático de arquivo de configuração,  Up: Formatos de Arquivo

5.14.3 ‘tomllib’ — Analisa arquivos TOML
----------------------------------------

Adicionado na versão 3.11.

'Código-fonte:' Lib/tomllib(1)

__________________________________________________________________

Este módulo fornece uma interface para analisar TOML 1.0.0 (Tom’s
Obvious Minimal Language, https://toml.io(2)).  Este módulo não oferece
suporte para escrever TOML.

Ver também
..........

O pacote Tomli-W(3) é um editor de TOML que pode ser usado em conjunto
com este módulo, fornecendo uma API de escrita familiar aos usuários da
biblioteca padrão: módulos *note marshal: 8d. e *note pickle: a6.

Ver também
..........

O pacote TOML Kit(4) é uma biblioteca TOML de preservação de estilo com
capacidade de leitura e escrita.  É uma substituição recomendada para
este módulo para edição de arquivos TOML já existentes.

Este módulo define as seguintes funções:

 -- Função: tomllib.load (fp, /, *, parse_float=float)

     Lê um arquivo TOML. O primeiro argumento deve ser um objeto arquivo
     binário e legível.  Retorna um *note dict: 256.  Converte tipos
     TOML para Python usando esta *note tabela de conversão: 2c83.

     'parse_float' será chamado com a string de cada ponto flutuante
     (float) do TOML a ser decodificado.  Por padrão, isso é equivalente
     a ‘float(num_str)’.  Isso pode ser usado para usar outro tipo de
     dados ou analisador sintático para pontos flutuantes do TOML (por
     exemplo, *note decimal.Decimal: 29d.).  O chamável não deve
     retornar um *note dict: 256. ou um *note list: 611, senão uma
     exceção *note ValueError: 202. é levantada.

     Uma exceção *note TOMLDecodeError: 2c84. será levantada no caso de
     um documento TOML inválido.

 -- Função: tomllib.loads (s, /, *, parse_float=float)

     Carrega TOML de um objeto *note str: 44c.  Retorna um *note dict:
     256.  Converte tipos TOML para Python usando esta *note tabela de
     conversão: 2c83.  O argumento 'parse_float' tem o mesmo significado
     que em *note load(): 2c82.

     Uma exceção *note TOMLDecodeError: 2c84. será levantada no caso de
     um documento TOML inválido.

As seguintes exceções estão disponíveis:

 -- Exceção: tomllib.TOMLDecodeError

     Subclasse de *note ValueError: 202.

* Menu:

* Exemplos: Exemplos<11>.
* Tabela de conversão::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/tomllib

   (2) https://toml.io/pt/

   (3) https://pypi.org/project/tomli-w/

   (4) https://pypi.org/project/tomlkit/


File: python.info,  Node: Exemplos<11>,  Next: Tabela de conversão,  Up: tomllib — Analisa arquivos TOML

5.14.3.1 Exemplos
.................

Analisando um arquivo TOML:

     import tomllib

     with open("pyproject.toml", "rb") as f:
         data = tomllib.load(f)

Analisando uma string TOML:

     import tomllib

     toml_str = """
     python-version = "3.11.0"
     python-implementation = "CPython"
     """

     data = tomllib.loads(toml_str)


File: python.info,  Node: Tabela de conversão,  Prev: Exemplos<11>,  Up: tomllib — Analisa arquivos TOML

5.14.3.2 Tabela de conversão
............................

TOML                   Python
                       
------------------------------------------------------------------------------------------------------------------
                       
documento TOML         dict
                       
                       
string                 str
                       
                       
inteiro                int
                       
                       
ponto flutuante        ponto flutuante (configurável com 'parse_float')
                       
                       
booleano               bool
                       
                       
deslocamento de        datetime.datetime (atributo de ‘tzinfo’ definido com uma instância de
data-hora              ‘datetime.timezone’)
                       
                       
data-hora local        datetime.datetime (atributo de ‘tzinfo’ definido com ‘None’)
                       
                       
data local             datetime.date
                       
                       
hora local             datetime.time
                       
                       
array                  lista
                       
                       
tabela                 dict
                       
                       
tabela inline          dict
                       
                       
array de tabelas       lista de dicionários
                       


File: python.info,  Node: netrc — Arquivo de processamento netrc,  Next: plistlib — Gera e analisa arquivos Apple plist,  Prev: tomllib — Analisa arquivos TOML,  Up: Formatos de Arquivo

5.14.4 ‘netrc’ — Arquivo de processamento netrc
-----------------------------------------------

'Código-fonte:' Lib/netrc.py(1)

__________________________________________________________________

A classe *note netrc: 1a05. analisa e encapsula o formato do arquivo
netrc usado pelo programa Unix ‘ftp’ e outros clientes FTP.

 -- Classe: netrc.netrc ([file])

     Uma instância ou instância de subclasse de *note netrc: 1a05.
     encapsula dados de um arquivo netrc.  O argumento de inicialização,
     se presente, especifica o arquivo a ser analisado.  Se nenhum
     argumento for fornecido, o arquivo ‘.netrc’ no diretório inicial do
     usuário – conforme determinado por *note os.path.expanduser(): a1e.
     – será lido.  Caso contrário, uma exceção *note FileNotFoundError:
     42b. será levantada.  Os erros de análise levantam *note
     NetrcParseError: 2c8b. com informações de diagnóstico, incluindo o
     nome do arquivo, o número da linha e o token final.

     Se nenhum argumento for especificado em um sistema POSIX, a
     presença de senhas no arquivo ‘.netrc’ levantará um *note
     NetrcParseError: 2c8b. se a propriedade ou as permissões do arquivo
     forem inseguras (pertencentes a um usuário que não seja o usuário
     executando o processo ou acessível para leitura ou gravação por
     qualquer outro usuário).  Isso implementa um comportamento de
     segurança equivalente ao do ftp e de outros programas que usam
     ‘.netrc’.  Essas verificações de segurança não estão disponíveis em
     plataformas que não oferecem suporte a *note os.getuid(): 1612.

     Alterado na versão 3.4: Adicionada a verificação de permissão
     POSIX.

     Alterado na versão 3.7: *note os.path.expanduser(): a1e. é usado
     para encontrar a localização do arquivo ‘.netrc’ quando 'file' não
     é passado como argumento.

     Alterado na versão 3.10: *note netrc: 9b. tenta a codificação UTF-8
     antes de usar a codificação específica da localidade.  A entrada no
     arquivo netrc não precisa mais conter todos os tokens.  O valor
     padrão dos tokens ausentes é uma string vazia.  Todos os tokens e
     seus valores agora podem conter caracteres arbitrários, como
     espaços em branco e caracteres não ASCII. Se o nome de login for
     anônimo, ele não acionará a verificação de segurança.

 -- Exceção: netrc.NetrcParseError

     Exceção levantada pela classe *note netrc: 1a05. quando erros
     sintáticos são encontrados no texto fonte.  As instâncias desta
     exceção fornecem três atributos interessantes:

      -- Atributo: msg

          Explicação textual do erro.

      -- Atributo: filename

          O nome do arquivo de origem.

      -- Atributo: lineno

          O número da linha em que o erro foi encontrado.

* Menu:

* Objetos netrc::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/netrc.py


File: python.info,  Node: Objetos netrc,  Up: netrc — Arquivo de processamento netrc

5.14.4.1 Objetos netrc
......................

Uma instância da classe *note netrc: 1a05. tem os seguintes métodos:

 -- Método: netrc.authenticators (host)

     Retorna uma tupla de 3 elementos ‘(login, conta, senha)’ dos
     autenticadores do 'host'.  Se o arquivo netrc não contém uma
     entrada para o host dado, retorna a tupla associada com a entrada
     padrão.  Se não houver nenhum host correspondente nem uma entrada
     padrão estiver disponível, retorna ‘None’.

 -- Método: netrc.__repr__ ()

     Despeja os dados da classe como uma string no formato de um arquivo
     netrc.  (Isso descarta os comentários e pode reordenar as
     entradas.)

Instâncias de *note netrc: 1a05. possuem variáveis de instância
públicas:

 -- Atributo: netrc.hosts

     Dicionário mapeando nomes de host para tuplas ‘(login, conta,
     senha)’.  A entrada 'default', se houver, é representada como um
     pseudo-host por esse nome.

 -- Atributo: netrc.macros

     Dicionário mapeando nomes de macros para listas de strings.


File: python.info,  Node: plistlib — Gera e analisa arquivos Apple plist,  Prev: netrc — Arquivo de processamento netrc,  Up: Formatos de Arquivo

5.14.5 ‘plistlib’ — Gera e analisa arquivos Apple ‘.plist’
----------------------------------------------------------

'Código-fonte:' Lib/plistlib.py(1)

__________________________________________________________________

Este módulo fornece uma interface para ler e escrever os arquivos
“property listas (lista de propriedades) usados pela Apple,
principalmente no macOS e iOS. Este módulo tem suporte a arquivos plist
binários e XML.

O formato de arquivo de lista de propriedades (‘.plist’) é uma
serialização simples que oferece suporte a tipos básicos de objetos,
como dicionários, listas, números e strings.  Normalmente, o objeto de
nível superior é um dicionário.

Para escrever e analisar um arquivo plist, use as funções *note dump():
958. e *note load(): 956.

Para trabalhar com dados plist em objetos bytes ou string, use *note
dumps(): 959. e *note loads(): 957.

Os valores podem ser strings, inteiros, floats, booleanos, tuplas,
listas, dicionários (mas somente com chaves de string), objetos *note
bytes: 1c2, *note bytearray: 2ea. ou *note datetime.datetime: 1cc.

Alterado na versão 3.4: Nova API, API antiga descontinuada.  Suporte
para plists de formato binário adicionado.

Alterado na versão 3.8: Adicionado suporte para leitura e escrita de
tokens *note UID: a2b. em plists binários, conforme usado por
NSKeyedArchiver e NSKeyedUnarchiver.

Alterado na versão 3.9: API antiga removida.

Ver também
..........

Pagina de manual de PList(2)

     Documentação da Apple sobre o formato de arquivo.

Este módulo define as seguintes funções:

 -- Função: plistlib.load (fp, *, fmt=None, dict_type=dict,
          aware_datetime=False)

     Lê um arquivo plist.  'fp' deve ser um objeto arquivo binário e
     legível.  Retorna o objeto raiz desempacotado (que geralmente é um
     dicionário).

     'fmt' é o formato do arquivo e os seguintes valores são válidos:

        * *note None: 675.: Detecta automaticamente o formato do arquivo

        * *note FMT_XML: fad.: Formato de arquivo XML

        * *note FMT_BINARY: fae.: Formato binário plist

     O 'dict_type' é o tipo usado para dicionários que são lidos do
     arquivo plist.

     Quando 'aware_datetime' for verdadeiro, campos com o tipo
     ‘datetime.datetime’ serão criados como *note objeto conscientes:
     25c8, com ‘tzinfo’ como *note datetime.UTC: 4ee.

     Dados XML para o formato *note FMT_XML: fad. são analisados usando
     o analisador sintático Expat de *note xml.parsers.expat: 126. –
     veja sua documentação para possíveis exceções em XML malformado.
     Elementos desconhecidos serão simplesmente ignorados pelo
     analisador de plist.

     O analisador sintático levanta *note InvalidFileException: 1a87.
     quando o arquivo não pode ser analisado.

     Adicionado na versão 3.4.

     Alterado na versão 3.13: O parâmetro somente-nomeado
     'aware_datetime' foi adicionado.

 -- Função: plistlib.loads (data, *, fmt=None, dict_type=dict,
          aware_datetime=False)

     Carrega um plist de um objeto bytes ou string.  Veja *note load():
     956. para uma explicação dos argumentos nomeados.

     Adicionado na versão 3.4.

     Alterado na versão 3.13: 'data' pode ser uma string quando 'fmt' é
     igual a *note FMT_XML: fad.

 -- Função: plistlib.dump (value, fp, *, fmt=FMT_XML, sort_keys=True,
          skipkeys=False, aware_datetime=False)

     Escreve 'value' em um arquivo plist.  'fp' deve ser um objeto
     arquivo binário gravável.

     O argumento 'fmt' especifica o formato do arquivo plist e pode ser
     um dos seguintes valores:

        * *note FMT_XML: fad.: Arquivo plist formatado em XML

        * *note FMT_BINARY: fae.: Arquivo plist formatado em binário

     Quando 'sort_keys' é verdadeiro (o padrão), as chaves dos
     dicionários serão escritas ordenadas no plist, caso contrário, elas
     serão escritas na ordem de iteração do dicionário.

     Quando 'skipkeys' é falso (o padrão), a função levanta *note
     TypeError: 2c3. quando uma chave de um dicionário não é uma string,
     caso contrário, tais chaves são ignoradas.

     Quando 'aware_datetime' é verdadeiro e qualquer campo com o tipo
     ‘datetime.datetime’ é definido como um *note objeto consciente:
     25c8, ele será convertido para o fuso horário UTC antes de
     escrevê-lo.

     Uma *note TypeError: 2c3. será levantada se o objeto for de um tipo
     não suportado ou um contêiner que contém objetos de tipos não
     suportados.

     Uma *note OverflowError: 885. será levantada para valores inteiros
     que não podem ser representados em arquivos plist (binários).

     Adicionado na versão 3.4.

     Alterado na versão 3.13: O parâmetro somente-nomeado
     'aware_datetime' foi adicionado.

 -- Função: plistlib.dumps (value, *, fmt=FMT_XML, sort_keys=True,
          skipkeys=False, aware_datetime=False)

     Retorna 'value' como um objeto bytes formatado em plist.  Veja a
     documentação para *note dump(): 958. para uma explicação dos
     argumentos nomeados desta função.

     Adicionado na versão 3.4.

As seguintes classes estão disponíveis:

 -- Classe: plistlib.UID (data)

     Envolve um *note int: 257.  Isso é usado ao ler ou escrever dados
     codificados NSKeyedArchiver, que contém UID (veja o manual de
     PList).

      -- Atributo: data

          Valor inteiro do UID. Deve estar no intervalo ‘0 <= data <
          2**64’.

     Adicionado na versão 3.8.

As seguintes constantes estão disponíveis:

 -- Dado: plistlib.FMT_XML

     O formato XML para arquivos plist.

     Adicionado na versão 3.4.

 -- Dado: plistlib.FMT_BINARY

     O formato binário para arquivos plist

     Adicionado na versão 3.4.

O módulo define as seguintes exceções:

 -- Exceção: plistlib.InvalidFileException

     Levantada quando um arquivo não puder ser analisado.

     Adicionado na versão 3.4.

* Menu:

* Exemplos: Exemplos<12>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/plistlib.py

   (2) 
https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/PropertyLists/


File: python.info,  Node: Exemplos<12>,  Up: plistlib — Gera e analisa arquivos Apple plist

5.14.5.1 Exemplos
.................

Gerando um plist:

     import datetime
     import plistlib

     pl = dict(
         aString = "Doodah",
         aList = ["A", "B", 12, 32.1, [1, 2, 3]],
         aFloat = 0.1,
         anInt = 728,
         aDict = dict(
             anotherString = "<hello & hi there!>",
             aThirdString = "M\xe4ssig, Ma\xdf",
             aTrueValue = True,
             aFalseValue = False,
         ),
         someData = b"<binary gunk>",
         someMoreData = b"<lots of binary gunk>" * 10,
         aDate = datetime.datetime.now()
     )
     print(plistlib.dumps(pl).decode())

Analisando um plist:

     import plistlib

     plist = b"""<plist version="1.0">
     <dict>
         <key>foo</key>
         <string>bar</string>
     </dict>
     </plist>"""
     pl = plistlib.loads(plist)
     print(pl["foo"])


File: python.info,  Node: Serviços Criptográficos,  Next: Serviços Genéricos do Sistema Operacional,  Prev: Formatos de Arquivo,  Up: A Biblioteca Padrão do Python

5.15 Serviços Criptográficos
============================

Os módulos descritos neste capítulo implementam vários algoritmos de uma
natureza criptográfica.  Eles estão disponíveis a critério da
instalação.  Aqui está uma visão geral:

* Menu:

* hashlib — Resumos de mensagens e hashes seguros::
* hmac — Código de autenticação de mensagem com chave hash::
* secrets — Gera números aleatórios seguros para gerenciar segredos::


File: python.info,  Node: hashlib — Resumos de mensagens e hashes seguros,  Next: hmac — Código de autenticação de mensagem com chave hash,  Up: Serviços Criptográficos

5.15.1 ‘hashlib’ — Resumos de mensagens e hashes seguros
--------------------------------------------------------

'Código-fonte:' Lib/hashlib.py(1)

__________________________________________________________________

Este módulo implementa uma interface comum para diversos algoritmos de
hash.  Estão incluídos os algoritmos de hash seguros FIPS SHA224,
SHA256, SHA384 e SHA512 (definidos no padrão FIPS 180-4(2)), a série
SHA-3 (definida no padrão FIPS 202(3)), bem como os algoritmos legados
SHA1 (anteriormente parte do FIPS(4)) e o algoritmo MD5 (definido em
internet RFC 1321(5)).

     Nota: Se você quiser as funções de hash adler32 ou crc32, elas
     estão disponíveis no módulo *note zlib: 133.

* Menu:

* Algoritmos de hash::
* Uso::
* Construtores::
* Atributos::
* Objetos hash::
* Resumos de comprimento variável de SHAKE::
* Hash de arquivo::
* Derivação de chave::
* BLAKE2::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/hashlib.py

   (2) https://csrc.nist.gov/pubs/fips/180-4/upd1/final

   (3) https://csrc.nist.gov/pubs/fips/202/final

   (4) https://csrc.nist.gov/news/2023/decision-to-revise-fips-180-4

   (5) https://datatracker.ietf.org/doc/html/rfc1321.html


File: python.info,  Node: Algoritmos de hash,  Next: Uso,  Up: hashlib — Resumos de mensagens e hashes seguros

5.15.1.1 Algoritmos de hash
...........................

Há um método construtor nomeado para cada tipo de 'hash'.  Todos
retornam um objeto hash com a mesma interface simples.  Por exemplo: use
*note sha256(): 164a. para criar um objeto hash SHA-256.  Agora você
pode alimentar este objeto com *note objetos bytes ou similares: d4f.
(normalmente *note bytes: 1c2.) usando o método *note update: 2ca2.  A
qualquer momento, você pode solicitar o 'digest' da concatenação dos
dados alimentados até o momento usando os métodos *note digest(): 2ca3.
ou *note hexdigest(): 2ca4.

Para permitir multithreading, a *note GIL: 159. do Python é liberada ao
calcular um hash fornecido com mais de 2047 bytes de dados de uma só vez
em seu construtor ou método *note .update: 2ca2.

Os construtores para algoritmos de hash sempre presentes neste módulo
são *note sha1(): 2ca5, *note sha224(): 2ca6, *note sha256(): 164a,
*note sha384(): 2ca7, *note sha512(): 2ca8, *note sha3_224(): cc2, *note
sha3_256(): cc3, *note sha3_384(): cc4, *note sha3_512(): cc5, *note
shake_128(): cc6, *note shake_256(): cc7, *note blake2b(): 642. e *note
blake2s(): 643.  *note md5(): 1626. normalmente também está disponível,
embora possa estar ausente ou bloqueado se você estiver usando uma
construção rara do Python “compatível com FIPS”.  Eles correspondem a
*note algorithms_guaranteed: 13ba.

Algoritmos adicionais também podem estar disponíveis se o *note hashlib:
68. da sua distribuição Python tiver sido vinculado a uma construção do
OpenSSL que forneça outros algoritmos.  Outros 'não têm garantia de
disponibilidade' em todas as instalações e só serão acessíveis pelo nome
via *note new(): 1abb.  Consulte *note algorithms_available: 13bb.

     Aviso: Alguns algoritmos apresentam vulnerabilidades conhecidas em
     colisões de hash (incluindo MD5 e SHA1).  Consulte Ataques a
     algoritmos de hash criptográficos(1) e a seção *note
     hashlib-seealso: 2ca9. no final deste documento.

Adicionado na versão 3.6: Os construtores SHA3 (Keccak) e SHAKE *note
sha3_224(): cc2, *note sha3_256(): cc3, *note sha3_384(): cc4, *note
sha3_512(): cc5, *note shake_128(): cc6, *note shake_256(): cc7. foram
adicionados.  *note blake2b(): 642. e *note blake2s(): 643. foram
adicionados.

Alterado na versão 3.9: Todos os construtores de hashlib aceitam um
argumento somente-nomeado 'usedforsecurity' com o valor padrão ‘True’.
Um valor falso permite o uso de algoritmos de hash inseguros e
bloqueados em ambientes restritos.  ‘False’ indica que o algoritmo de
hash não é usado em um contexto de segurança, por exemplo, como uma
função de compressão unidirecional não criptográfica.

Alterado na versão 3.9: O hashlib agora usa SHA3 e SHAKE do OpenSSL, se
ele os fornecer.

Alterado na versão 3.12: Para qualquer um dos algoritmos MD5, SHA1, SHA2
ou SHA3 que o OpenSSL vinculado não fornece, recorremos a uma
implementação verificada do projeto HACL*(2).

   ---------- Footnotes ----------

   (1) 
https://en.wikipedia.org/wiki/Cryptographic_hash_function#Attacks_on_cryptographic_hash_algorithms

   (2) https://github.com/hacl-star/hacl-star


File: python.info,  Node: Uso,  Next: Construtores,  Prev: Algoritmos de hash,  Up: hashlib — Resumos de mensagens e hashes seguros

5.15.1.2 Uso
............

Para obter o resumo da string de bytes ‘b"Nobody inspects the spammish
repetition"’:

     >>> import hashlib
     >>> m = hashlib.sha256()
     >>> m.update(b"Nobody inspects")
     >>> m.update(b" the spammish repetition")
     >>> m.digest()
     b'\x03\x1e\xdd}Ae\x15\x93\xc5\xfe\\\x00o\xa5u+7\xfd\xdf\xf7\xbcN\x84:\xa6\xaf\x0c\x95\x0fK\x94\x06'
     >>> m.hexdigest()
     '031edd7d41651593c5fe5c006fa5752b37fddff7bc4e843aa6af0c950f4b9406'

Mais condensado:

     >>> hashlib.sha256(b"Nobody inspects the spammish repetition").hexdigest()
     '031edd7d41651593c5fe5c006fa5752b37fddff7bc4e843aa6af0c950f4b9406'


File: python.info,  Node: Construtores,  Next: Atributos,  Prev: Uso,  Up: hashlib — Resumos de mensagens e hashes seguros

5.15.1.3 Construtores
.....................

 -- Função: hashlib.new (name[, data], *, usedforsecurity=True)

     É um construtor genérico que recebe a string 'name' do algoritmo
     desejado como seu primeiro parâmetro.  Ele também existe para
     permitir acesso aos hashes listados acima, bem como a quaisquer
     outros algoritmos que sua biblioteca OpenSSL possa oferecer.

Usando *note new(): 1abb. com um nome de algoritmo:

     >>> h = hashlib.new('sha256')
     >>> h.update(b"Nobody inspects the spammish repetition")
     >>> h.hexdigest()
     '031edd7d41651593c5fe5c006fa5752b37fddff7bc4e843aa6af0c950f4b9406'

 -- Função: hashlib.md5 ([data], *, usedforsecurity=True)

 -- Função: hashlib.sha1 ([data], *, usedforsecurity=True)

 -- Função: hashlib.sha224 ([data], *, usedforsecurity=True)

 -- Função: hashlib.sha256 ([data], *, usedforsecurity=True)

 -- Função: hashlib.sha384 ([data], *, usedforsecurity=True)

 -- Função: hashlib.sha512 ([data], *, usedforsecurity=True)

 -- Função: hashlib.sha3_224 ([data], *, usedforsecurity=True)

 -- Função: hashlib.sha3_256 ([data], *, usedforsecurity=True)

 -- Função: hashlib.sha3_384 ([data], *, usedforsecurity=True)

 -- Função: hashlib.sha3_512 ([data], *, usedforsecurity=True)

Construtores nomeados como esses são mais rápidos do que passar um nome
de algoritmo para *note new(): 1abb.


File: python.info,  Node: Atributos,  Next: Objetos hash,  Prev: Construtores,  Up: hashlib — Resumos de mensagens e hashes seguros

5.15.1.4 Atributos
..................

O hashlib fornece os seguintes atributos de módulo constantes:

 -- Dado: hashlib.algorithms_guaranteed

     Um conjunto contendo os nomes dos algoritmos de hash com suporte
     garantido por este módulo em todas as plataformas.  Observe que
     “md5” está nesta lista, apesar de alguns fornecedores originais
     oferecerem uma estranha construção Python “compatível com FIPS” que
     o exclui.

     Adicionado na versão 3.2.

 -- Dado: hashlib.algorithms_available

     Um conjunto contendo os nomes dos algoritmos de hash disponíveis no
     interpretador Python em execução.  Esses nomes serão reconhecidos
     quando passados para *note new(): 1abb.  *note
     algorithms_guaranteed: 13ba. sempre será um subconjunto.  O mesmo
     algoritmo pode aparecer várias vezes neste conjunto com nomes
     diferentes (graças ao OpenSSL).

     Adicionado na versão 3.2.


File: python.info,  Node: Objetos hash,  Next: Resumos de comprimento variável de SHAKE,  Prev: Atributos,  Up: hashlib — Resumos de mensagens e hashes seguros

5.15.1.5 Objetos hash
.....................

Os seguintes valores são fornecidos como atributos constantes dos
objetos hash retornados pelos construtores:

 -- Dado: hash.digest_size

     O tamanho do hash resultante em bytes.

 -- Dado: hash.block_size

     O tamanho do bloco interna do algoritmo de hash em bytes.

Um objeto hash tem os seguintes atributos:

 -- Atributo: hash.name

     O nome canônico deste hash, sempre em minúsculas e sempre adequado
     como parâmetro para *note new(): 1abb. para criar outro hash deste
     tipo.

     Alterado na versão 3.4: O atributo name está presente no CPython
     desde o seu início, mas até o Python 3.4 não era especificado
     formalmente, então pode não existir em algumas plataformas.

Um objeto hash tem os seguintes métodos:

 -- Método: hash.update (data)

     Atualiza o objeto hash com o *note objeto bytes ou similar: d4f.
     Chamadas repetidas são equivalentes a uma única chamada com a
     concatenação de todos os argumentos: ‘m.update(a); m.update(b)’ é
     equivalente a ‘m.update(a+b)’.

 -- Método: hash.digest ()

     Retorna o resumo dos dados passados ao método *note update(): 2ca2.
     até o momento.  Este é um objeto bytes de tamanho *note
     digest_size: 2caf. que pode conter bytes em todo o intervalo de 0 a
     255.

 -- Método: hash.hexdigest ()

     Similar a *note digest(): 2ca3, exceto que o resumo é retornado
     como um objeto string de comprimento duplo, contendo apenas dígitos
     hexadecimais.  Isso pode ser usado para trocar o valor com
     segurança em e-mails ou outros ambientes não binários.

 -- Método: hash.copy ()

     Retorna uma cópia (“clone”) do objeto hash.  Isso pode ser usado
     para calcular com eficiência os resumos de dados que compartilham
     uma substring inicial comum.


File: python.info,  Node: Resumos de comprimento variável de SHAKE,  Next: Hash de arquivo,  Prev: Objetos hash,  Up: hashlib — Resumos de mensagens e hashes seguros

5.15.1.6 Resumos de comprimento variável de SHAKE
.................................................

 -- Função: hashlib.shake_128 ([data], *, usedforsecurity=True)

 -- Função: hashlib.shake_256 ([data], *, usedforsecurity=True)

Os algoritmos *note shake_128(): cc6. e *note shake_256(): cc7. fornecem
resumos de comprimento variável com length_in_bits//2 de até 128 ou 256
bits de segurança.  Portanto, seus métodos de resumo exigem um
comprimento.  O comprimento máximo não é limitado pelo algoritmo SHAKE.

 -- Método: shake.digest (length)

     Retorna o resumo dos dados passados ao método *note update(): 2ca2.
     até o momento.  Este é um objeto bytes de tamanho 'length' que pode
     conter bytes em todo o intervalo de 0 a 255.

 -- Método: shake.hexdigest (length)

     Similar a *note digest(): 1bb1, exceto que o resumo é retornado
     como um objeto string de comprimento duplo, contendo apenas dígitos
     hexadecimais.  Isso pode ser usado para trocar o valor em e-mails
     ou outros ambientes não binários.

Exemplo de uso:

     >>> h = hashlib.shake_256(b'Nobody inspects the spammish repetition')
     >>> h.hexdigest(20)
     '44709d6fcb83d92a76dcb0b668c98e1b1d3dafe7'


File: python.info,  Node: Hash de arquivo,  Next: Derivação de chave,  Prev: Resumos de comprimento variável de SHAKE,  Up: hashlib — Resumos de mensagens e hashes seguros

5.15.1.7 Hash de arquivo
........................

O módulo hashlib fornece uma função auxiliar para hash eficiente de um
objeto arquivo ou similar.

 -- Função: hashlib.file_digest (fileobj, digest, /)

     Retorna um objeto resumo que foi atualizado com o conteúdo do
     objeto arquivo.

     'fileobj' deve ser um objeto arquivo ou similar aberto para leitura
     em modo binário.  Ele aceita objetos arquivo da *note open(): 51c.
     embutida, instâncias de *note BytesIO: ed3, objetos SocketIO de
     *note socket.socket.makefile(): 11de. e similares.  'fileobj' deve
     ser aberto em modo bloqueante, caso contrário, uma exceção *note
     BlockingIOError: 1090. pode ser levantada.

     A função pode ignorar a E/S do Python e usar o descritor de arquivo
     de *note fileno(): 15d0. diretamente.  'fileobj' deve ser presumido
     como sendo um estado desconhecido após o retorno ou o levantamento
     desta função.  Cabe a quem a chamou fechar 'fileobj'.

     'digest' deve ser um nome de algoritmo de hash como 'str', um
     construtor de hash ou um chamável que retorna um objeto de hash.

     Exemplo:

          >>> import io, hashlib, hmac
          >>> with open("library/hashlib.rst", "rb") as f:
          ...     digest = hashlib.file_digest(f, "sha256")
          ...
          >>> digest.hexdigest()
          '...'

          >>> buf = io.BytesIO(b"somedata")
          >>> mac1 = hmac.HMAC(b"key", digestmod=hashlib.sha512)
          >>> digest = hashlib.file_digest(buf, lambda: mac1)

          >>> digest is mac1
          True
          >>> mac2 = hmac.HMAC(b"key", b"somedata", digestmod=hashlib.sha512)
          >>> mac1.digest() == mac2.digest()
          True

     Adicionado na versão 3.11.

     Alterado na versão 3.13.4: Agora levanta uma *note BlockingIOError:
     1090. se o arquivo for aberto em modo não-bloqueante.
     Anteriormente, bytes nulos espúrios eram adicionados ao resumo.


File: python.info,  Node: Derivação de chave,  Next: BLAKE2,  Prev: Hash de arquivo,  Up: hashlib — Resumos de mensagens e hashes seguros

5.15.1.8 Derivação de chave
...........................

Algoritmos de alongamento de chave e derivação de chave são projetados
para criar hashes de senhas seguros.  Algoritmos ingênuos como
‘sha1(password)’ não são resistentes a ataques de força bruta.  Uma boa
função de hashing de senhas deve ser ajustável, lenta e incluir um
salt(1).

 -- Função: hashlib.pbkdf2_hmac (hash_name, password, salt, iterations,
          dklen=None)

     A função fornece a função 2 de derivação de chave baseada em senha
     PKCS#5.  Ela usa HMAC como função pseudoaleatória.

     A string 'hash_name' é o nome desejado do algoritmo de resumo de
     hash para HMAC, por exemplo, ‘sha1’ ou ‘sha256’.  'password' e
     'salt' são interpretados como buffers de bytes.  Aplicações e
     bibliotecas devem limitar 'password' a um comprimento razoável (por
     exemplo, 1024).  'salt' deve ter cerca de 16 bytes ou mais de uma
     fonte adequada, por exemplo, *note os.urandom(): 523.

     O número de 'iterations' deve ser escolhido com base no algoritmo
     de hash e no poder computacional.  A partir de 2022, centenas de
     milhares de iterações do SHA-256 são sugeridas.  Para entender por
     que e como escolher o que é melhor para sua aplicação, leia o
     'Appendix A.2.2' do NIST-SP-800-132(2).  As respostas à pergunta
     sobre iterações de pbkdf2 no StackExchange(3) explicam em detalhes.

     'dklen' é o comprimento da chave derivada em bytes.  Se 'dklen' for
     ‘None’, o tamanho do resumo do algoritmo de hash 'hash_name' será
     usado, por exemplo, 64 para SHA-512.

          >>> from hashlib import pbkdf2_hmac
          >>> our_app_iters = 500_000  # Application specific, read above.
          >>> dk = pbkdf2_hmac('sha256', b'password', b'bad salt' * 2, our_app_iters)
          >>> dk.hex()
          '15530bba69924174860db778f2c6f8104d3aaf9d26241840c8c4a641c8d000a9'

     Função disponível somente quando Python é compilado com OpenSSL.

     Adicionado na versão 3.4.

     Alterado na versão 3.12: Função agora disponível apenas quando o
     Python é criado com OpenSSL. A implementação lenta do Python puro
     foi removida.

 -- Função: hashlib.scrypt (password, *, salt, n, r, p, maxmem=0,
          dklen=64)

     A função fornece a função de derivação de chave baseada em senha
     scrypt, conforme definido em RFC 7914(4).

     'password' e 'salt' devem ser *note objetos bytes ou similares:
     d4f.  Aplicações e bibliotecas devem limitar 'password' a um
     tamanho razoável (por exemplo, 1024).  'salt' deve ter cerca de 16
     bytes ou mais de uma fonte adequada, por exemplo, *note
     os.urandom(): 523.

     'n' é o fator de custo de CPU/memória, 'r' o tamanho do bloco, 'p'
     o fator de paralelismo e 'maxmem' limita a memória (o padrão do
     OpenSSL 1.1.0 é 32 MiB). 'dklen' é o comprimento da chave derivada
     em bytes.

     Adicionado na versão 3.6.

   ---------- Footnotes ----------

   (1) https://pt.wikipedia.org/wiki/Sal_(criptografia)

   (2) 
https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf

   (3) 
https://security.stackexchange.com/questions/3959/recommended-of-iterations-when-using-pbkdf2-sha256/

   (4) https://datatracker.ietf.org/doc/html/rfc7914.html


File: python.info,  Node: BLAKE2,  Prev: Derivação de chave,  Up: hashlib — Resumos de mensagens e hashes seguros

5.15.1.9 BLAKE2
...............

BLAKE2(1) é uma função hash criptográfica definida em RFC 7693(2) que
vem em dois sabores:

   * 'BLAKE2b', otimizado para plataformas de 64 bits e produz resumos
     de qualquer tamanho entre 1 e 64 bytes,

   * 'BLAKE2s', otimizado para plataformas de 8 a 32 bits e produz
     resumos de qualquer tamanho entre 1 e 32 bytes.

BLAKE2 supports 'keyed mode' (a faster and simpler replacement for
HMAC(3)), 'salted hashing', 'personalization', and 'tree hashing'.

Os objetos hash deste módulo seguem a API dos objetos *note hashlib: 68.
da biblioteca padrão.

* Menu:

* Criando objetos hash::
* Constantes: Constantes<5>.
* Exemplos: Exemplos<13>.
* Credits::

   ---------- Footnotes ----------

   (1) https://www.blake2.net

   (2) https://datatracker.ietf.org/doc/html/rfc7693.html

   (3) 
https://en.wikipedia.org/wiki/Hash-based_message_authentication_code


File: python.info,  Node: Criando objetos hash,  Next: Constantes<5>,  Up: BLAKE2

5.15.1.10 Criando objetos hash
..............................

Novos objetos hash são criados chamando funções construtoras:

 -- Função: hashlib.blake2b (data=b'', *, digest_size=64, key=b'',
          salt=b'', person=b'', fanout=1, depth=1, leaf_size=0,
          node_offset=0, node_depth=0, inner_size=0, last_node=False,
          usedforsecurity=True)

 -- Função: hashlib.blake2s (data=b'', *, digest_size=32, key=b'',
          salt=b'', person=b'', fanout=1, depth=1, leaf_size=0,
          node_offset=0, node_depth=0, inner_size=0, last_node=False,
          usedforsecurity=True)

Essas funções retornam os objetos hash correspondentes para calcular
BLAKE2b ou BLAKE2s.  Opcionalmente, elas aceitam estes parâmetros
gerais:

   * 'data': pedaço inicial de dados para hash, que deve ser *note
     objeto bytes ou similar: d4f.  Pode ser passado apenas como
     argumento posicional.

   * 'digest_size': tamanho do resumo de saída em bytes.

   * 'key': chave para hash com chave (até 64 bytes para BLAKE2b, até 32
     bytes para BLAKE2s).

   * 'salt': sal para hash aleatório (até 16 bytes para BLAKE2b, até 8
     bytes para BLAKE2s).

   * 'person': string de personalização (até 16 bytes para BLAKE2b, até
     8 bytes para BLAKE2s).

A tabela a seguir mostra os limites para parâmetros gerais (em bytes):

Hash        digest_size     len(key)     len(salt)     len(person)
                                                       
-----------------------------------------------------------------------
                                                       
BLAKE2b     64              64           16            16
                                                       
                                                       
BLAKE2s     32              32           8             8
                                                       

     Nota: BLAKE2 specification defines constant lengths for salt and
     personalization parameters, however, for convenience, this
     implementation accepts byte strings of any size up to the specified
     length.  If the length of the parameter is less than specified, it
     is padded with zeros, thus, for example, ‘b'salt'’ and
     ‘b'salt\x00'’ is the same value.  (This is not the case for 'key'.)

These sizes are available as module *note constants: 2cb7. described
below.

Constructor functions also accept the following tree hashing parameters:

   * 'fanout': fanout (0 to 255, 0 if unlimited, 1 in sequential mode).

   * 'depth': maximal depth of tree (1 to 255, 255 if unlimited, 1 in
     sequential mode).

   * 'leaf_size': maximal byte length of leaf (0 to ‘2**32-1’, 0 if
     unlimited or in sequential mode).

   * 'node_offset': node offset (0 to ‘2**64-1’ for BLAKE2b, 0 to
     ‘2**48-1’ for BLAKE2s, 0 for the first, leftmost, leaf, or in
     sequential mode).

   * 'node_depth': node depth (0 to 255, 0 for leaves, or in sequential
     mode).

   * 'inner_size': inner digest size (0 to 64 for BLAKE2b, 0 to 32 for
     BLAKE2s, 0 in sequential mode).

   * 'last_node': boolean indicating whether the processed node is the
     last one (‘False’ for sequential mode).

[image src="python-figures/hashlib-blake2-tree.png" alt="Explanation of tree mode parameters."]


Figure
See section 2.10 in BLAKE2 specification(1) for comprehensive review of
tree hashing.

   ---------- Footnotes ----------

   (1) https://www.blake2.net/blake2_20130129.pdf


File: python.info,  Node: Constantes<5>,  Next: Exemplos<13>,  Prev: Criando objetos hash,  Up: BLAKE2

5.15.1.11 Constantes
....................

 -- Dado: blake2b.SALT_SIZE

 -- Dado: blake2s.SALT_SIZE

Salt length (maximum length accepted by constructors).

 -- Dado: blake2b.PERSON_SIZE

 -- Dado: blake2s.PERSON_SIZE

Personalization string length (maximum length accepted by constructors).

 -- Dado: blake2b.MAX_KEY_SIZE

 -- Dado: blake2s.MAX_KEY_SIZE

Maximum key size.

 -- Dado: blake2b.MAX_DIGEST_SIZE

 -- Dado: blake2s.MAX_DIGEST_SIZE

Maximum digest size that the hash function can output.


File: python.info,  Node: Exemplos<13>,  Next: Credits,  Prev: Constantes<5>,  Up: BLAKE2

5.15.1.12 Exemplos
..................

* Menu:

* Simple hashing::
* Using different digest sizes::
* Keyed hashing::
* Randomized hashing::
* Personalization::
* Modo árvore::


File: python.info,  Node: Simple hashing,  Next: Using different digest sizes,  Up: Exemplos<13>

5.15.1.13 Simple hashing
........................

To calculate hash of some data, you should first construct a hash object
by calling the appropriate constructor function (*note blake2b(): 642.
or *note blake2s(): 643.), then update it with the data by calling *note
update(): 2ca2. on the object, and, finally, get the digest out of the
object by calling *note digest(): 2ca3. (or *note hexdigest(): 2ca4. for
hex-encoded string).

     >>> from hashlib import blake2b
     >>> h = blake2b()
     >>> h.update(b'Hello world')
     >>> h.hexdigest()
     '6ff843ba685842aa82031d3f53c48b66326df7639a63d128974c5c14f31a0f33343a8c65551134ed1ae0f2b0dd2bb495dc81039e3eeb0aa1bb0388bbeac29183'

As a shortcut, you can pass the first chunk of data to update directly
to the constructor as the positional argument:

     >>> from hashlib import blake2b
     >>> blake2b(b'Hello world').hexdigest()
     '6ff843ba685842aa82031d3f53c48b66326df7639a63d128974c5c14f31a0f33343a8c65551134ed1ae0f2b0dd2bb495dc81039e3eeb0aa1bb0388bbeac29183'

You can call *note hash.update(): 2ca2. as many times as you need to
iteratively update the hash:

     >>> from hashlib import blake2b
     >>> items = [b'Hello', b' ', b'world']
     >>> h = blake2b()
     >>> for item in items:
     ...     h.update(item)
     ...
     >>> h.hexdigest()
     '6ff843ba685842aa82031d3f53c48b66326df7639a63d128974c5c14f31a0f33343a8c65551134ed1ae0f2b0dd2bb495dc81039e3eeb0aa1bb0388bbeac29183'


File: python.info,  Node: Using different digest sizes,  Next: Keyed hashing,  Prev: Simple hashing,  Up: Exemplos<13>

5.15.1.14 Using different digest sizes
......................................

BLAKE2 has configurable size of digests up to 64 bytes for BLAKE2b and
up to 32 bytes for BLAKE2s.  For example, to replace SHA-1 with BLAKE2b
without changing the size of output, we can tell BLAKE2b to produce
20-byte digests:

     >>> from hashlib import blake2b
     >>> h = blake2b(digest_size=20)
     >>> h.update(b'Replacing SHA1 with the more secure function')
     >>> h.hexdigest()
     'd24f26cf8de66472d58d4e1b1774b4c9158b1f4c'
     >>> h.digest_size
     20
     >>> len(h.digest())
     20

Hash objects with different digest sizes have completely different
outputs (shorter hashes are 'not' prefixes of longer hashes); BLAKE2b
and BLAKE2s produce different outputs even if the output length is the
same:

     >>> from hashlib import blake2b, blake2s
     >>> blake2b(digest_size=10).hexdigest()
     '6fa1d8fcfd719046d762'
     >>> blake2b(digest_size=11).hexdigest()
     'eb6ec15daf9546254f0809'
     >>> blake2s(digest_size=10).hexdigest()
     '1bf21a98c78a1c376ae9'
     >>> blake2s(digest_size=11).hexdigest()
     '567004bf96e4a25773ebf4'


File: python.info,  Node: Keyed hashing,  Next: Randomized hashing,  Prev: Using different digest sizes,  Up: Exemplos<13>

5.15.1.15 Keyed hashing
.......................

Keyed hashing can be used for authentication as a faster and simpler
replacement for Hash-based message authentication code(1) (HMAC). BLAKE2
can be securely used in prefix-MAC mode thanks to the
indifferentiability property inherited from BLAKE.

This example shows how to get a (hex-encoded) 128-bit authentication
code for message ‘b'message data'’ with key ‘b'pseudorandom key'’:

     >>> from hashlib import blake2b
     >>> h = blake2b(key=b'pseudorandom key', digest_size=16)
     >>> h.update(b'message data')
     >>> h.hexdigest()
     '3d363ff7401e02026f4a4687d4863ced'

As a practical example, a web application can symmetrically sign cookies
sent to users and later verify them to make sure they weren’t tampered
with:

     >>> from hashlib import blake2b
     >>> from hmac import compare_digest
     >>>
     >>> SECRET_KEY = b'pseudorandomly generated server secret key'
     >>> AUTH_SIZE = 16
     >>>
     >>> def sign(cookie):
     ...     h = blake2b(digest_size=AUTH_SIZE, key=SECRET_KEY)
     ...     h.update(cookie)
     ...     return h.hexdigest().encode('utf-8')
     >>>
     >>> def verify(cookie, sig):
     ...     good_sig = sign(cookie)
     ...     return compare_digest(good_sig, sig)
     >>>
     >>> cookie = b'user-alice'
     >>> sig = sign(cookie)
     >>> print("{0},{1}".format(cookie.decode('utf-8'), sig))
     user-alice,b'43b3c982cf697e0c5ab22172d1ca7421'
     >>> verify(cookie, sig)
     True
     >>> verify(b'user-bob', sig)
     False
     >>> verify(cookie, b'0102030405060708090a0b0c0d0e0f00')
     False

Even though there’s a native keyed hashing mode, BLAKE2 can, of course,
be used in HMAC construction with *note hmac: 6a. module:

     >>> import hmac, hashlib
     >>> m = hmac.new(b'secret key', digestmod=hashlib.blake2s)
     >>> m.update(b'message')
     >>> m.hexdigest()
     'e3c8102868d28b5ff85fc35dda07329970d1a01e273c37481326fe0c861c8142'

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/HMAC


File: python.info,  Node: Randomized hashing,  Next: Personalization,  Prev: Keyed hashing,  Up: Exemplos<13>

5.15.1.16 Randomized hashing
............................

By setting 'salt' parameter users can introduce randomization to the
hash function.  Randomized hashing is useful for protecting against
collision attacks on the hash function used in digital signatures.

     Randomized hashing is designed for situations where one party, the
     message preparer, generates all or part of a message to be signed
     by a second party, the message signer.  If the message preparer is
     able to find cryptographic hash function collisions (i.e., two
     messages producing the same hash value), then they might prepare
     meaningful versions of the message that would produce the same hash
     value and digital signature, but with different results (e.g.,
     transferring $1,000,000 to an account, rather than $10).
     Cryptographic hash functions have been designed with collision
     resistance as a major goal, but the current concentration on
     attacking cryptographic hash functions may result in a given
     cryptographic hash function providing less collision resistance
     than expected.  Randomized hashing offers the signer additional
     protection by reducing the likelihood that a preparer can generate
     two or more messages that ultimately yield the same hash value
     during the digital signature generation process — even if it is
     practical to find collisions for the hash function.  However, the
     use of randomized hashing may reduce the amount of security
     provided by a digital signature when all portions of the message
     are prepared by the signer.

     (NIST SP-800-106 "Randomized Hashing for Digital Signatures"(1))

In BLAKE2 the salt is processed as a one-time input to the hash function
during initialization, rather than as an input to each compression
function.

     Aviso: 'Salted hashing' (or just hashing) with BLAKE2 or any other
     general-purpose cryptographic hash function, such as SHA-256, is
     not suitable for hashing passwords.  See BLAKE2 FAQ(2) for more
     information.

     >>> import os
     >>> from hashlib import blake2b
     >>> msg = b'some message'
     >>> # Calculate the first hash with a random salt.
     >>> salt1 = os.urandom(blake2b.SALT_SIZE)
     >>> h1 = blake2b(salt=salt1)
     >>> h1.update(msg)
     >>> # Calculate the second hash with a different random salt.
     >>> salt2 = os.urandom(blake2b.SALT_SIZE)
     >>> h2 = blake2b(salt=salt2)
     >>> h2.update(msg)
     >>> # The digests are different.
     >>> h1.digest() != h2.digest()
     True

   ---------- Footnotes ----------

   (1) https://csrc.nist.gov/pubs/sp/800/106/final

   (2) https://www.blake2.net/#qa


File: python.info,  Node: Personalization,  Next: Modo árvore,  Prev: Randomized hashing,  Up: Exemplos<13>

5.15.1.17 Personalization
.........................

Sometimes it is useful to force hash function to produce different
digests for the same input for different purposes.  Quoting the authors
of the Skein hash function:

     We recommend that all application designers seriously consider
     doing this; we have seen many protocols where a hash that is
     computed in one part of the protocol can be used in an entirely
     different part because two hash computations were done on similar
     or related data, and the attacker can force the application to make
     the hash inputs the same.  Personalizing each hash function used in
     the protocol summarily stops this type of attack.

     (The Skein Hash Function Family(1), p.  21)

BLAKE2 can be personalized by passing bytes to the 'person' argument:

     >>> from hashlib import blake2b
     >>> FILES_HASH_PERSON = b'MyApp Files Hash'
     >>> BLOCK_HASH_PERSON = b'MyApp Block Hash'
     >>> h = blake2b(digest_size=32, person=FILES_HASH_PERSON)
     >>> h.update(b'the same content')
     >>> h.hexdigest()
     '20d9cd024d4fb086aae819a1432dd2466de12947831b75c5a30cf2676095d3b4'
     >>> h = blake2b(digest_size=32, person=BLOCK_HASH_PERSON)
     >>> h.update(b'the same content')
     >>> h.hexdigest()
     'cf68fb5761b9c44e7878bfb2c4c9aea52264a80b75005e65619778de59f383a3'

Personalization together with the keyed mode can also be used to derive
different keys from a single one.

     >>> from hashlib import blake2s
     >>> from base64 import b64decode, b64encode
     >>> orig_key = b64decode(b'Rm5EPJai72qcK3RGBpW3vPNfZy5OZothY+kHY6h21KM=')
     >>> enc_key = blake2s(key=orig_key, person=b'kEncrypt').digest()
     >>> mac_key = blake2s(key=orig_key, person=b'kMAC').digest()
     >>> print(b64encode(enc_key).decode('utf-8'))
     rbPb15S/Z9t+agffno5wuhB77VbRi6F9Iv2qIxU7WHw=
     >>> print(b64encode(mac_key).decode('utf-8'))
     G9GtHFE1YluXY1zWPlYk1e/nWfu0WSEb0KRcjhDeP/o=

   ---------- Footnotes ----------

   (1) https://www.schneier.com/wp-content/uploads/2016/02/skein.pdf


File: python.info,  Node: Modo árvore,  Prev: Personalization,  Up: Exemplos<13>

5.15.1.18 Modo árvore
.....................

Here’s an example of hashing a minimal tree with two leaf nodes:

       10
      /  \
     00  01

This example uses 64-byte internal digests, and returns the 32-byte
final digest:

     >>> from hashlib import blake2b
     >>>
     >>> FANOUT = 2
     >>> DEPTH = 2
     >>> LEAF_SIZE = 4096
     >>> INNER_SIZE = 64
     >>>
     >>> buf = bytearray(6000)
     >>>
     >>> # Left leaf
     ... h00 = blake2b(buf[0:LEAF_SIZE], fanout=FANOUT, depth=DEPTH,
     ...               leaf_size=LEAF_SIZE, inner_size=INNER_SIZE,
     ...               node_offset=0, node_depth=0, last_node=False)
     >>> # Right leaf
     ... h01 = blake2b(buf[LEAF_SIZE:], fanout=FANOUT, depth=DEPTH,
     ...               leaf_size=LEAF_SIZE, inner_size=INNER_SIZE,
     ...               node_offset=1, node_depth=0, last_node=True)
     >>> # Root node
     ... h10 = blake2b(digest_size=32, fanout=FANOUT, depth=DEPTH,
     ...               leaf_size=LEAF_SIZE, inner_size=INNER_SIZE,
     ...               node_offset=0, node_depth=1, last_node=True)
     >>> h10.update(h00.digest())
     >>> h10.update(h01.digest())
     >>> h10.hexdigest()
     '3ad2a9b37c6070e374c7a8c508fe20ca86b6ed54e286e93a0318e95e881db5aa'


File: python.info,  Node: Credits,  Prev: Exemplos<13>,  Up: BLAKE2

5.15.1.19 Credits
.................

BLAKE2(1) was designed by 'Jean-Philippe Aumasson', 'Samuel Neves',
'Zooko Wilcox-O’Hearn', and 'Christian Winnerlein' based on SHA-3(2)
finalist BLAKE(3) created by 'Jean-Philippe Aumasson', 'Luca Henzen',
'Willi Meier', and 'Raphael C.-W. Phan'.

It uses core algorithm from ChaCha(4) cipher designed by 'Daniel J.
Bernstein'.

The stdlib implementation is based on pyblake2(5) module.  It was
written by 'Dmitry Chestnykh' based on C implementation written by
'Samuel Neves'.  The documentation was copied from pyblake2(6) and
written by 'Dmitry Chestnykh'.

The C code was partly rewritten for Python by 'Christian Heimes'.

The following public domain dedication applies for both C hash function
implementation, extension code, and this documentation:

     To the extent possible under law, the author(s) have dedicated all
     copyright and related and neighboring rights to this software to
     the public domain worldwide.  This software is distributed without
     any warranty.

     You should have received a copy of the CC0 Public Domain Dedication
     along with this software.  If not, see
     ‘https://creativecommons.org/publicdomain/zero/1.0/’.

The following people have helped with development or contributed their
changes to the project and the public domain according to the Creative
Commons Public Domain Dedication 1.0 Universal:

   * 'Alexandr Sokolovskiy'

Ver também
..........

Module *note hmac: 6a.

     A module to generate message authentication codes using hashes.

Módulo *note base64: e.

     Another way to encode binary hashes for non-binary environments.

‘https://nvlpubs.nist.gov/nistpubs/fips/nist.fips.180-4.pdf’

     The FIPS 180-4 publication on Secure Hash Algorithms.

‘https://csrc.nist.gov/pubs/fips/202/final’

     The FIPS 202 publication on the SHA-3 Standard.

‘https://www.blake2.net/’

     Official BLAKE2 website.

‘https://en.wikipedia.org/wiki/Cryptographic_hash_function’

     Wikipedia article with information on which algorithms have known
     issues and what that means regarding their use.

‘https://www.ietf.org/rfc/rfc8018.txt’

     PKCS #5: Password-Based Cryptography Specification Version 2.1

‘https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-132.pdf’

     NIST Recommendation for Password-Based Key Derivation.

   ---------- Footnotes ----------

   (1) https://www.blake2.net

   (2) https://en.wikipedia.org/wiki/Secure_Hash_Algorithms

   (3) 
https://web.archive.org/web/20200918190133/https://131002.net/blake/

   (4) https://cr.yp.to/chacha.html

   (5) https://pythonhosted.org/pyblake2/

   (6) https://pythonhosted.org/pyblake2/


File: python.info,  Node: hmac — Código de autenticação de mensagem com chave hash,  Next: secrets — Gera números aleatórios seguros para gerenciar segredos,  Prev: hashlib — Resumos de mensagens e hashes seguros,  Up: Serviços Criptográficos

5.15.2 ‘hmac’ — Código de autenticação de mensagem com chave hash
-----------------------------------------------------------------

'Código-fonte:' Lib/hmac.py(1)

__________________________________________________________________

Este módulo implementa o algoritmo HMAC conforme descrito por RFC
2104(2).  A interface permite o uso de qualquer função hash com um
tamanho de resumo 'fixo'.  Em particular, funções de saída extensíveis
como SHAKE-128 ou SHAKE-256 não podem ser usadas com HMAC.

 -- Função: hmac.new (key, msg=None, digestmod)

     Retorna um novo objeto hmac.  'key' é um objeto bytes ou bytearray
     que fornece a chave secreta.  Se 'msg' estiver presente, a chamada
     de método ‘update(msg)’ é feita.  'digestmod' é o nome do resumo,
     construtor do resumo ou módulo para o objeto HMAC usar.  Pode ser
     qualquer nome adequado para *note hashlib.new(): 1abb.  Apesar da
     posição do argumento, é obrigatório.

     Alterado na versão 3.4: O parâmetro 'key' pode ser um objeto bytes
     ou bytearray.  O parâmetro 'msg' pode ser de qualquer tipo
     suportado por *note hashlib: 68.  O parâmetro 'digestmod' pode ser
     o nome de um algoritmo hash.

     Alterado na versão 3.8: O argumento 'digestmod' agora é
     obrigatório.  Passe-o como um argumento nomeado para evitar
     constrangimentos quando você não tiver uma 'msg' inicial.

 -- Função: hmac.digest (key, msg, digest)

     Retorna o resumo de 'msg' para o segredo 'key' e 'digest'
     fornecidos.  A função equivale a ‘HMAC(key, msg, digest).digest()’,
     mas usa uma implementação C otimizada ou inline, que é mais rápida
     para mensagens que cabem na memória.  Os parâmetros 'key', 'msg' e
     'digest' têm o mesmo significado que em *note new(): aae.

     Detalhe da implementação do CPython: a implementação otimizada do C
     é usada somente quando 'digest' é uma string e o nome de um
     algoritmo de resumo, que é suportado pelo OpenSSL.

     Adicionado na versão 3.7.

 -- Classe: hmac.HMAC

     Um objeto HMAC tem os seguintes métodos:

 -- Método: HMAC.update (msg)

     Atualiza o objeto hmac com 'msg'.  Chamadas repetidas são
     equivalentes a uma única chamada com a concatenação de todos os
     argumentos: ‘m.update(a); m.update(b)’ equivale a ‘m.update(a +
     b)’.

     Alterado na versão 3.4: O parâmetro 'msg' pode ser de qualquer tipo
     suportado por *note hashlib: 68.

 -- Método: HMAC.digest ()

     Retorna o resumo dos bytes passados para o método *note update():
     f7d. até o momento.  Este objeto bytes terá o mesmo comprimento que
     o 'digest_size' do resumo dado ao construtor.  Ele pode conter
     bytes não-ASCII, incluindo bytes NUL.

          Aviso: Ao comparar a saída de *note digest(): b50. com um
          resumo fornecido externamente durante uma rotina de
          verificação, é recomendável usar a função *note
          compare_digest(): 1108. em vez do operador ‘==’ para reduzir a
          vulnerabilidade a ataques de temporização.

 -- Método: HMAC.hexdigest ()

     Como *note digest(): b50. exceto que o resumo é retornado como uma
     string com o dobro do comprimento contendo apenas dígitos
     hexadecimais.  Isso pode ser usado para trocar o valor com
     segurança em e-mail ou outros ambientes não binários.

          Aviso: Ao comparar a saída de *note hexdigest(): 2ccc. com um
          resumo fornecido externamente durante uma rotina de
          verificação, é recomendável usar a função *note
          compare_digest(): 1108. em vez do operador ‘==’ para reduzir a
          vulnerabilidade a ataques de temporização.

 -- Método: HMAC.copy ()

     Retorna uma cópia (“clone”) do objeto hmac.  Isso pode ser usado
     para calcular eficientemente os resumos de strings que compartilham
     uma substring inicial comum.

Um objeto hash tem os seguintes atributos:

 -- Atributo: HMAC.digest_size

     O tamanho do resumo HMAC resultante em bytes.

 -- Atributo: HMAC.block_size

     O tamanho do bloco interna do algoritmo de hash em bytes.

     Adicionado na versão 3.4.

 -- Atributo: HMAC.name

     O nome canônico deste HMAC, sempre em letras minúsculas, por
     exemplo, ‘hmac-md5’.

     Adicionado na versão 3.4.

Alterado na versão 3.10: Foram removidos os atributos não documentados
‘HMAC.digest_cons’, ‘HMAC.inner’ e ‘HMAC.outer’.

Este módulo também fornece a seguinte função auxiliar:

 -- Função: hmac.compare_digest (a, b)

     Retorna ‘a == b’.  Esta função usa uma abordagem projetada para
     evitar análise de tempo evitando comportamento de curto-circuito
     baseado em conteúdo, tornando-a apropriada para criptografia.  'a'
     e 'b' devem ser ambos do mesmo tipo: *note str: 44c. (somente
     ASCII, como, por exemplo, retornado por *note HMAC.hexdigest():
     2ccc.), ou um *note objeto bytes ou similar: d4f.

          Nota: Se 'a' e 'b' tiverem comprimentos diferentes, ou se
          ocorrer um erro, um ataque de temporização poderia
          teoricamente revelar informações sobre os tipos e comprimentos
          de 'a' e 'b', mas não seus valores.

     Adicionado na versão 3.3.

     Alterado na versão 3.10: A função usa ‘CRYPTO_memcmp()’ do OpenSSL
     internamente quando disponível.

Ver também
..........

Módulo *note hashlib: 68.

     O módulo Python que fornece funções hash seguras.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/hmac.py

   (2) https://datatracker.ietf.org/doc/html/rfc2104.html


File: python.info,  Node: secrets — Gera números aleatórios seguros para gerenciar segredos,  Prev: hmac — Código de autenticação de mensagem com chave hash,  Up: Serviços Criptográficos

5.15.3 ‘secrets’ — Gera números aleatórios seguros para gerenciar segredos
--------------------------------------------------------------------------

Adicionado na versão 3.6.

'Código-fonte:' Lib/secrets.py(1)

__________________________________________________________________

O módulo *note secrets: c0. é usado para gerar números aleatórios
criptograficamente fortes, adequados para o gerenciamento de dados, como
senhas, autenticação de conta, tokens de segurança e segredos
relacionados.

Em particular, *note secrets: c0. deve ser usado em preferência ao
gerador de números pseudoaleatórios padrão no módulo *note random: b8,
que é projetado para modelagem e simulação, não segurança ou
criptografia.

Ver também
..........

PEP 506(2)

* Menu:

* Números aleatórios::
* Gerando tokens::
* Outras funções::
* Receitas e melhores práticas::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/secrets.py

   (2) https://peps.python.org/pep-0506/


File: python.info,  Node: Números aleatórios,  Next: Gerando tokens,  Up: secrets — Gera números aleatórios seguros para gerenciar segredos

5.15.3.1 Números aleatórios
...........................

O módulo *note secrets: c0. fornece acesso à fonte mais segura de
aleatoriedade que seu sistema operacional fornece.

 -- Classe: secrets.SystemRandom

     Uma classe para gerar números aleatórios usando as fontes da mais
     alta qualidade fornecidas pelo sistema operacional.  Veja *note
     random.SystemRandom: 288b. para detalhes adicionais.

 -- Função: secrets.choice (seq)

     Retorna um elemento escolhido aleatoriamente de uma sequência não
     vazia.

 -- Função: secrets.randbelow (exclusive_upper_bound)

     Retorna um int aleatório no intervalo [0, 'exclusive_upper_bound').

 -- Função: secrets.randbits (k)

     Retorna um int não negativo com 'k' bits aleatórios.


File: python.info,  Node: Gerando tokens,  Next: Outras funções,  Prev: Números aleatórios,  Up: secrets — Gera números aleatórios seguros para gerenciar segredos

5.15.3.2 Gerando tokens
.......................

O módulo *note secrets: c0. fornece funções para gerar tokens seguros,
adequados para aplicativos como redefinições de senha, URLs difíceis de
adivinhar e semelhantes.

 -- Função: secrets.token_bytes ([nbytes=None])

     Retorna uma string de byte aleatória contendo 'nbytes' número de
     bytes.  Se 'nbytes' for ‘None’ ou não fornecido, um padrão razoável
     é usado.

          >>> token_bytes(16)
          b'\xebr\x17D*t\xae\xd4\xe3S\xb6\xe2\xebP1\x8b'

 -- Função: secrets.token_hex ([nbytes=None])

     Retorna uma string de texto aleatória, em hexadecimal.  A string
     tem 'nbytes' bytes aleatórios, cada byte convertido em dois dígitos
     hexadecimais.  Se 'nbytes' for ‘None’ ou não fornecido, um padrão
     razoável é usado.

          >>> token_hex(16)
          'f9bf78b9a18ce6d46a0cd2b0b86df9da'

 -- Função: secrets.token_urlsafe ([nbytes=None])

     Retorna uma string de texto segura para URL aleatória, contendo
     'nbytes' bytes aleatórios.  O texto é codificado em Base64,
     portanto, em média, cada byte resulta em aproximadamente 1,3
     caracteres.  Se 'nbytes' for ‘None’ ou não fornecido, um padrão
     razoável é usado.

          >>> token_urlsafe(16)
          'Drmhze6EPcv0fN_81Bj-nA'

* Menu:

* Quantos bytes os tokens devem usar?::


File: python.info,  Node: Quantos bytes os tokens devem usar?,  Up: Gerando tokens

5.15.3.3 Quantos bytes os tokens devem usar?
............................................

Para estar seguro contra ataques de força bruta(1), os tokens precisam
ter aleatoriedade suficiente.  Infelizmente, o que é considerado
suficiente necessariamente aumentará à medida que os computadores
ficarem mais poderosos e capazes de fazer mais suposições em um período
mais curto.  A partir de 2015, acredita-se que 32 bytes (256 bits) de
aleatoriedade são suficientes para o caso de uso típico esperado para o
módulo *note secrets: c0.

Para aqueles que desejam gerenciar seu próprio comprimento de token,
você pode especificar explicitamente quanta aleatoriedade é usada para
tokens, fornecendo um argumento *note int: 257. para as várias funções
‘token_*’.  Esse argumento é considerado o número de bytes de
aleatoriedade a serem usados.

Caso contrário, se nenhum argumento for fornecido, ou se o argumento for
‘None’, as funções ‘token_*’ usarão um padrão razoável.

     Nota: Esse padrão está sujeito a alterações a qualquer momento,
     inclusive durante as versões de manutenção.

   ---------- Footnotes ----------

   (1) https://pt.wikipedia.org/wiki/Ataque_de_força_bruta


File: python.info,  Node: Outras funções,  Next: Receitas e melhores práticas,  Prev: Gerando tokens,  Up: secrets — Gera números aleatórios seguros para gerenciar segredos

5.15.3.4 Outras funções
.......................

 -- Função: secrets.compare_digest (a, b)

     Retorna ‘True’ se as strings ou *note objetos tipo arquivo: d4f.
     'a' e 'b' forem iguais, caso contrário, ‘False’, usando uma
     “comparação de tempo constante” para reduzir o risco de ataques de
     temporização(1).  Veja *note hmac.compare_digest(): 1108. para
     detalhes adicionais.

   ---------- Footnotes ----------

   (1) https://codahale.com/a-lesson-in-timing-attacks/


File: python.info,  Node: Receitas e melhores práticas,  Prev: Outras funções,  Up: secrets — Gera números aleatórios seguros para gerenciar segredos

5.15.3.5 Receitas e melhores práticas
.....................................

Esta seção mostra as receitas e melhores práticas para usar *note
secrets: c0. para gerenciar um nível básico de segurança.

Gerar uma senha alfanumérica de oito caracteres:

     import string
     import secrets
     alphabet = string.ascii_letters + string.digits
     password = ''.join(secrets.choice(alphabet) for i in range(8))

     Nota: As aplicações não devem armazenar senhas em um formato
     recuperável(1), seja em texto simples ou criptografado.  Elas devem
     ser salgadas e transformadas em hash usando uma função hash de
     sentido único criptograficamente forte (irreversível).

Gerar uma senha alfanumérica de dez caracteres com pelo menos um
caractere minúsculo, pelo menos um caractere maiúsculo e pelo menos três
dígitos:

     import string
     import secrets
     alphabet = string.ascii_letters + string.digits
     while True:
         password = ''.join(secrets.choice(alphabet) for i in range(10))
         if (any(c.islower() for c in password)
                 and any(c.isupper() for c in password)
                 and sum(c.isdigit() for c in password) >= 3):
             break

Gerar uma senha longa do estilo XKCD(2):

     import secrets
     # Em sistemas Linux padrão, use um arquivo de dicionário conveniente.
     # Outras plataformas podem precisar fornecer sua própria lista de palavras.
     with open('/usr/share/dict/words') as f:
         words = [word.strip() for word in f]
         password = ' '.join(secrets.choice(words) for i in range(4))

Gerar uma URL temporária difícil de adivinhação contendo um token de
segurança adequado para aplicativos de recuperação de senha:

     import secrets
     url = 'https://example.com/reset=' + secrets.token_urlsafe()

   ---------- Footnotes ----------

   (1) https://cwe.mitre.org/data/definitions/257.html

   (2) https://xkcd.com/936/


File: python.info,  Node: Serviços Genéricos do Sistema Operacional,  Next: Bibliotecas de interface de linha de comando,  Prev: Serviços Criptográficos,  Up: A Biblioteca Padrão do Python

5.16 Serviços Genéricos do Sistema Operacional
==============================================

Os módulos descritos neste capítulo fornecem interfaces aos recursos do
sistema operacional e que estão disponíveis em (quase) todos os sistemas
operacionais, como arquivos e um relógio.  As interfaces geralmente são
modeladas após as interfaces Unix ou C, mas elas também estão
disponíveis na maioria dos outros sistemas.  Aqui temos uma visão geral:

* Menu:

* os — Diversas interfaces de sistema operacional::
* io — Ferramentas essenciais para trabalhar com fluxos::
* time — Acesso ao horário e conversões::
* logging — Recursos de registro de eventos para Python::
* logging.config — Configuração do módulo logging: logging config — Configuração do módulo logging.
* logging.handlers — Manipuladores de logging: logging handlers — Manipuladores de logging.
* platform — Acesso aos dados de identificação da plataforma subjacente::
* errno — Símbolos padrão do sistema errno::
* ctypes — Uma biblioteca de funções externas para Python::


File: python.info,  Node: os — Diversas interfaces de sistema operacional,  Next: io — Ferramentas essenciais para trabalhar com fluxos,  Up: Serviços Genéricos do Sistema Operacional

5.16.1 ‘os’ — Diversas interfaces de sistema operacional
--------------------------------------------------------

'Código-fonte:' Lib/os.py(1)

__________________________________________________________________

Este módulo fornece uma maneira simples de usar funcionalidades que são
dependentes de sistema operacional.  Se você quiser ler ou escrever um
arquivo, veja *note open(): 51c.; se o que quer é manipular estruturas
de diretórios, veja o módulo *note os.path: a2.; e se quiser ler todas
as linhas, de todos os arquivos na linha de comando, veja o módulo *note
fileinput: 5b.  Para criar arquivos e diretórios temporários, veja o
módulo *note tempfile: e0.; e, para manipulação em alto nível de
arquivos e diretórios, veja o módulo *note shutil: c5.

Notas sobre a disponibilidade dessas funções:

   * O modelo dos módulos embutidos dependentes do sistema operacional
     no Python é tal que, desde que a mesma funcionalidade esteja
     disponível, a mesma interface é usada; por exemplo, a função
     ‘os.stat(path)’ retorna informações estatísticas sobre 'path' no
     mesmo formato (que é originado com a interface POSIX).

   * Extensões específicas a um sistema operacional também estão
     disponíveis através do módulo *note os: a1, mas usá-las é,
     naturalmente, uma ameaça à portabilidade.

   * Todas as funções que aceitam nomes de caminhos ou arquivos, aceitam
     objetos bytes e string, e resultam em um objeto do mesmo tipo, se
     um caminho ou nome de arquivo for retornado.

   * Em VxWorks, os.popen, os.fork, os.execv e os.spawn*p* não são
     suportados.

   * Nas plataformas WebAssembly, Android e iOS, grandes partes do
     módulo *note os: a1. não estão disponíveis ou se comportam de
     maneira diferente.  APIs relacionadas a processos (por exemplo,
     *note fork(): 197, *note execve(): 1138.) e recursos (por exemplo,
     *note nice(): 1140.) não estão disponíveis.  Outros como *note
     getuid(): 1612. e *note getpid(): 2ce1. são emulados ou esboços.
     As plataformas WebAssembly também não possuem suporte para sinais
     (por exemplo, *note kill(): 13ae, *note wait(): dc0.).

     Nota: Todas as funções neste módulo levantam *note OSError: 417.
     (ou suas subclasses) no caso de nomes e caminhos de arquivos
     inválidos ou inacessíveis, ou outros argumentos que possuem o tipo
     correto, mas não são aceitos pelo sistema operacional.

 -- Exceção: os.error

     Um apelido para a exceção embutida *note OSError: 417.

 -- Dado: os.name

     O nome do módulo importado, dependente do sistema operacional.
     Atualmente, os seguintes nomes foram registrados: ‘'posix'’,
     ‘'nt'’, ‘'java'’.

     Ver também
     ..........

     *note sys.platform: a97. tem uma granularidade mais fina.  *note
     os.uname(): 1155. fornece informações de versão específicas do
     sistema.

     O módulo *note platform: aa. fornece verificações detalhadas sobre
     a identificação do sistema.

* Menu:

* Nomes de arquivos, argumentos de linha de comando e variáveis de ambiente: Nomes de arquivos argumentos de linha de comando e variáveis de ambiente.
* Modo UTF-8 do Python::
* Parâmetros de processo::
* Criação de objetos arquivos::
* Operações dos descritores de arquivos::
* Arquivos e diretórios::
* Gerenciamento de processo::
* Interface do agendador::
* Diversas informações de sistema::
* Números aleatórios: Números aleatórios<2>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/os.py


File: python.info,  Node: Nomes de arquivos argumentos de linha de comando e variáveis de ambiente,  Next: Modo UTF-8 do Python,  Up: os — Diversas interfaces de sistema operacional

5.16.1.1 Nomes de arquivos, argumentos de linha de comando e variáveis de ambiente
..................................................................................

No Python, nomes de arquivos, argumentos da linha de comando, e
variáveis de ambiente são representadas usando o tipo string.  Em alguns
sistemas, decodificar essas strings de e para bytes é necessário antes
de passá-las para o sistema operacional.  Python usa o *note tratador de
erros e codificação do sistema de arquivos: 53b. para realizar essa
conversão (veja *note sys.getfilesystemencoding(): c74.).

O *note tratador de erros e codificação do sistema de arquivos: 53b. são
configurados na inicialização do Python pela função *note
PyConfig_Read(): 790.: veja os membros *note filesystem_encoding: 3e8. e
*note filesystem_errors: 3e9. do *note PyConfig: 3a6.

Alterado na versão 3.1: Em alguns sistemas a conversão, usando a
codificação do sistema de arquivos, pode falhar.  Neste caso, Python usa
o *note manipulador de erro de codificação surrogateescape: 2580, o que
significa que bytes não decodificados são substituídos por um caractere
Unicode U+DC'xx' na decodificação, e estes são novamente traduzidos para
o byte original na codificação.

A *note codificação de sistema de arquivos: 53b. precisa garantir que
todos os bytes abaixo de 128 serão decodificados com sucesso.  Se a
codificação do sistemas de arquivos falhar em garantir isso, funções de
API podem levantar *note UnicodeError: 12e6.

Veja também *note codificação da localidade: 242.


File: python.info,  Node: Modo UTF-8 do Python,  Next: Parâmetros de processo,  Prev: Nomes de arquivos argumentos de linha de comando e variáveis de ambiente,  Up: os — Diversas interfaces de sistema operacional

5.16.1.2 Modo UTF-8 do Python
.............................

Adicionado na versão 3.7: Veja PEP 540(1) para mais detalhes.

O Modo UTF-8 do Python ignora a *note codificação da localidade: 242. e
força o uso da codificação UTF-8:

   * Usa UTF-8 como a *note codificação do sistema de arquivos: 53b.

   * *note sys.getfilesystemencoding(): c74. retorna ‘'utf-8'’.

   * *note locale.getpreferredencoding(): 53a. retorna ‘'utf-8'’ (o
     argumento 'do_setlocale' não causa efeito).

   * *note sys.stdin: 53d, *note sys.stdout: ae6. e *note sys.stderr:
     940. usam UTF-8 como codificação de texto, com o *note tratador de
     erros: 18fa. ‘surrogateescape’ sendo habilitado para *note
     sys.stdin: 53d. e *note sys.stdout: ae6. (*note sys.stderr: 940.
     continua a usar ‘backslashreplace’ como faz no modo padrão com
     reconhecimento de localidade)

   * No Unix, *note os.device_encoding(): 19c0. retorna ‘'utf-8'’ invés
     da codificação do dispositivo.

Observe que as configurações de fluxo padrão no modo UTF-8 podem ser
substituídas por *note PYTHONIOENCODING: 1040. (assim como podem estar
no modo com reconhecimento de localidade padrão).

Como consequência das mudanças nessas APIs de baixo nível, outras APIs
de alto nível também exibem comportamentos padrões diferentes:

   * Argumentos de linha de comando, variáveis de ambiente e nomes de
     arquivos são decodificados em texto usando a codificação UTF-8.

   * *note os.fsdecode(): c6f. e *note os.fsencode(): c70. usam a
     codificação UTF-8.

   * *note open(): 51c, *note io.open(): 51d. e *note codecs.open():
     740. usam a codificação UTF-8 por padrão.  No entanto, elas ainda
     usam o tratador de erros estrito por padrão, de modo que a
     tentativa de abrir um arquivo binário no modo de texto
     provavelmente levantará uma exceção em vez de produzir dados sem
     sentido.

O *note Modo UTF-8 do Python: 656. está habilitado se a localidade
LC_CTYPE for ‘C’ ou ‘POSIX’ na inicialização do Python (veja a função
*note PyConfig_Read(): 790.).

Ele pode ser habilitado ou desabilitado utilizando a opção *note -X
utf8: 176. da linha de comando e a variável de ambiente *note
PYTHONUTF8: ae8.

Se a variável de ambiente *note PYTHONUTF8: ae8. não está com valor
definido, então o interpretador usa por padrão a configuração de
localidade atual, 'a menos que' a localidade atual esteja identificada
como uma localidade legada baseada em ASCII (como descrita para *note
PYTHONCOERCECLOCALE: ae5.), e a coerção de localidade estiver
desabilitada ou falhar.  Nessas localidades legadas, o interpretador irá
habilitar por padrão o modo UTF-8 a menos que seja explicitamente
instruído para não fazer isso.

O Modo UTF-8 do Python só pode ser ativado na inicialização do Python.
Seu valor pode ser lido de *note sys.flags.utf8_mode: 68c.

Veja também o *note modo UTF-8 no Windows: 1fa8. e o *note tratador de
erros e codificação do sistema de arquivos: 53b.

Ver também
..........

PEP 686(2)

     Python 3.15 utilizará *note Modo UTF-8 do Python: 656. por padrão.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0540/

   (2) https://peps.python.org/pep-0686/


File: python.info,  Node: Parâmetros de processo,  Next: Criação de objetos arquivos,  Prev: Modo UTF-8 do Python,  Up: os — Diversas interfaces de sistema operacional

5.16.1.3 Parâmetros de processo
...............................

Essas funções e itens de dados fornecem informações e operam no processo
e usuário atuais.

 -- Função: os.ctermid ()

     Retorna o nome do arquivo correspondente ao terminal de controle do
     processo.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Dado: os.environ

     Um objeto *note mapeamento: 11fb. onde as chaves e valores são
     strings que representam o ambiente do processo.  Por exemplo,
     ‘environ['HOME']’ é o nome do caminho do seu diretório pessoal (em
     algumas plataformas), e é equivalente a ‘getenv("HOME")’ em C.

     Este mapeamento é capturado na primeira vez que o módulo *note os:
     a1. é importado, normalmente durante a inicialização do Python,
     como parte do processamento do arquivo ‘site.py’.  Mudanças no
     ambiente feitas após esse momento não são refletidas em *note
     os.environ: 11f9, exceto pelas mudanças feitas modificando *note
     os.environ: 11f9. diretamente.

     Este mapeamento pode ser usado para modificar o ambiente, além de
     consultá-lo.  *note putenv(): 922. será chamado automaticamente
     quando o mapeamento for modificado.

     No Unix, chaves e valores usam *note sys.getfilesystemencoding():
     c74. e o tratador de erros ‘'surrogateescape'’.  Use *note
     environb: 1257. se quiser usar uma codificação diferente.

     No Windows, as chaves são convertidas em maiúsculas.  Isso também
     se aplica ao obter, definir ou excluir um item.  Por exemplo,
     ‘environ['monty'] = 'python'’ mapeia a chave ‘'MONTY'’ para o valor
     ‘'python'’.

          Nota: Chamar a função *note putenv(): 922. diretamente não
          muda *note os.environ: 11f9, por isso é melhor modificar *note
          os.environ: 11f9.

          Nota: Em algumas plataformas, incluindo FreeBSD e Mac OS X, a
          modificação de ‘environ’ pode causar vazamentos de memória.
          Consulte a documentação do sistema para ‘putenv()’.

     Você pode excluir itens neste mapeamento para remover definição de
     variáveis de ambiente.  *note unsetenv(): 921. será chamado
     automaticamente quando um item é excluído de *note os.environ:
     11f9, e quando um dos métodos ‘pop()’ ou ‘clear()’ é chamado.

     Alterado na versão 3.9: Atualizado para ter suporte aos operadores
     de mesclagem (‘|’) e de atualização (‘|=’) da PEP 584(1).

 -- Dado: os.environb

     Versão bytes de *note environ: 11f9.: um objeto de *note
     mapeamento: 11fb. onde as chaves e valores são objetos *note bytes:
     1c2. representando o ambiente do processo.  *note environ: 11f9. e
     *note environb: 1257. são sincronizados (modificar *note environb:
     1257. atualiza *note environ: 11f9, e vice versa).

     *note environb: 1257. está disponível somente se *note
     supports_bytes_environ: 1255. for ‘True’.

     Adicionado na versão 3.2.

     Alterado na versão 3.9: Atualizado para ter suporte aos operadores
     de mesclagem (‘|’) e de atualização (‘|=’) da PEP 584(2).

 -- Função: os.chdir (path)

 -- Função: os.fchdir (fd)

 -- Função: os.getcwd ()

     Essas funções são descritas em: *note Arquivos e diretórios: 2ce9.

 -- Função: os.fsencode (filename)

     Codifica o 'filename' *note caminho ou similar: 2a0. para *note
     tratador de erros e codificação do sistema de arquivos: 53b.;
     retorna *note bytes: 1c2. inalterados.

     *note fsdecode(): c6f. é a função inversa.

     Adicionado na versão 3.2.

     Alterado na versão 3.6: Adicionado suporte para aceitar objetos que
     implementam a interface *note os.PathLike: c6c.

 -- Função: os.fsdecode (filename)

     Decodifica o *note objeto caminho ou similar: 2a0. 'filename' do
     *note tratador de erros e codificação do sistema de arquivos: 53b.;
     retorna *note str: 44c. inalterada.

     *note fsencode(): c70. é a função inversa.

     Adicionado na versão 3.2.

     Alterado na versão 3.6: Adicionado suporte para aceitar objetos que
     implementam a interface *note os.PathLike: c6c.

 -- Função: os.fspath (path)

     Retorna a representação do sistema de arquivos do caminho
     (argumento 'path').

     Se um objeto *note str: 44c. ou *note bytes: 1c2. é passado, é
     retornado inalterado.  Caso contrário, o método *note __fspath__():
     c6d. é chamado, e seu valor é retornado, desde que seja um objeto
     *note str: 44c. ou *note bytes: 1c2.  Em todos os outros casos,
     *note TypeError: 2c3. é levantada.

     Adicionado na versão 3.6.

 -- Classe: os.PathLike

     Uma *note classe base abstrata: 11f5. para objetos representando um
     caminho do sistema de arquivos, como, por exemplo, *note
     pathlib.PurePath: 4a6.

     Adicionado na versão 3.6.

      -- Método: abstractmethod __fspath__ ()

          Retorna a representação do caminho do sistema de arquivos do
          objeto.

          O método deverá retornar somente objetos *note str: 44c. ou
          *note bytes: 1c2, preferencialmente *note str: 44c.

 -- Função: os.getenv (key, default=None)

     Retorna o valor da variável de ambiente 'key' como uma string se
     existir, ou 'default' se não existir.  'key' é uma string.  Note
     que uma vez que *note getenv(): 2cea. utiliza *note os.environ:
     11f9, o mapeamento de *note getenv(): 2cea. é também similarmente
     capturado na importação, e a função pode não refletir futuras
     mudanças no ambiente.

     No Unix, chaves e valores são decodificados com a função *note
     sys.getfilesystemencoding(): c74. e o o manipulador de erros
     ‘'surrogateescape'’.  Use *note os.getenvb(): 1256. se quiser usar
     uma codificação diferente.

     *note Disponibilidade: 1ed8.: Unix, Windows.

 -- Função: os.getenvb (key, default=None)

     Retorna o valor da variável de ambiente 'key' como bytes se
     existir, ou 'default' se não existir.  'key' deve ser bytes.  Note
     que uma vez que *note getenvb(): 1256. utiliza *note os.environb:
     1257, o mapeamento de *note getenvb(): 1256. é também similarmente
     capturado na importação, e a função pode não refletir futuras
     mudanças no ambiente.

     *note getenvb(): 1256. está disponível somente se *note
     supports_bytes_environ: 1255. for ‘True’.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.2.

 -- Função: os.get_exec_path (env=None)

     Retorna a lista de diretórios que serão buscados por um executável
     nomeado, semelhante a um shell, ao iniciar um processo.  'env',
     quando especificado, deve ser um dicionário de variáveis de
     ambiente para procurar o PATH. Por padrão, quando 'env' é ‘None’,
     *note environ: 11f9. é usado.

     Adicionado na versão 3.2.

 -- Função: os.getegid ()

     Retorna o ID do grupo efetivo do processo atual.  Isso corresponde
     ao bit “set id” no arquivo que está sendo executado no processo
     atual.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Função: os.geteuid ()

     Retorna o ID de usuário efetivo do processo atual.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Função: os.getgid ()

     Retorna o ID do grupo real do processo atual.

     *note Disponibilidade: 1ed8.: Unix.

     A função é uma simulação em WASI, veja *note Plataformas
     WebAssembly: 18f5. para mais informações.

 -- Função: os.getgrouplist (user, group, /)

     Retorna a lista de IDs de grupo aos quais 'user' pertence.  Se
     'group' não estiver na lista, ele será incluído; normalmente,
     'group' é especificado como o campo de ID de grupo do registro de
     senha para 'user', porque esse ID de grupo será potencialmente
     omitido.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Adicionado na versão 3.3.

 -- Função: os.getgroups ()

     Retorna a lista de IDs de grupos suplementares associados ao
     processo atual.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

          Nota: No Mac OS, o comportamento da função *note getgroups():
          2cee. difere um pouco de outras plataformas Unix.  Se o
          interpretador Python foi compilado para distribuição na versão
          ‘10.5’, ou anterior, *note getgroups(): 2cee. retorna a lista
          de IDs de grupos efetivos, associados ao processo do usuário
          atual; esta lista é limitada a um número de entradas definido
          pelo sistema, tipicamente 16, e pode ser modificada por
          chamadas para *note setgroups(): 2cef. se tiver o privilégio
          adequado.  Se foi compilado para distribuição na versão maior
          que ‘10.5’, *note getgroups(): 2cee. retorna a lista de acesso
          de grupo atual para o usuário associado ao ID de usuário
          efetivo do processo; a lista de acesso de grupo pode mudar
          durante a vida útil do processo, e ela não é afetada por
          chamadas para *note setgroups(): 2cef, e seu comprimento não é
          limitado a 16.  O valor da constante
          ‘MACOSX_DEPLOYMENT_TARGET’, pode ser obtido com *note
          sysconfig.get_config_var(): 1063.

 -- Função: os.getlogin ()

     Retorna o nome do usuário conectado no terminal de controle do
     processo.  Para a maioria dos propósitos, é mais útil usar *note
     getpass.getuser(): 418, já que esse último verifica as variáveis de
     ambiente ‘LOGNAME’ ou ‘USERNAME’ para descobrir quem é o usuário, e
     retorna para ‘pwd.getpwuid(os.getuid())[0]’ para obter o nome de
     login do ID do usuário real atual.

     *note Disponibilidade: 1ed8.: Unix, Windows, not WASI.

 -- Função: os.getpgid (pid)

     Retorna o ID do grupo de processo com 'pid'.  Se 'pid' for 0, o ID
     do grupo do processos do processo atual é retornado.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Função: os.getpgrp ()

     Retorna o ID do grupo do processo atual.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Função: os.getpid ()

     Retorna o ID do processo atual.

     A função é uma simulação em WASI, veja *note Plataformas
     WebAssembly: 18f5. para mais informações.

 -- Função: os.getppid ()

     Retorna o ID do processo pai.  Quando o processo pai é encerrado,
     no Unix, o ID retornado é o do processo init (1); no Windows, ainda
     é o mesmo ID, que pode já estar sendo reutilizado por outro
     processo.

     *note Disponibilidade: 1ed8.: Unix, Windows, not WASI.

     Alterado na versão 3.2: Adicionado suporte para Windows.

 -- Função: os.getpriority (which, who)

     Obtém prioridade de agendamento de programa.  O valor 'which' é um
     entre *note PRIO_PROCESS: 2cf2, *note PRIO_PGRP: 2cf3. ou *note
     PRIO_USER: 2cf4, e 'who' é interpretado em relação a 'which' (um
     identificador de processo para *note PRIO_PROCESS: 2cf2,
     identificador do grupo de processos para *note PRIO_PGRP: 2cf3. e
     um ID de usuário para *note PRIO_USER: 2cf4.).  Um valor zero para
     'who' indica (respectivamente) o processo de chamada, o grupo de
     processos do processo de chamada ou o ID do usuário real do
     processo de chamada.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Adicionado na versão 3.3.

 -- Dado: os.PRIO_PROCESS
 -- Dado: os.PRIO_PGRP
 -- Dado: os.PRIO_USER

     Parâmetros para as funções *note getpriority(): 113e. e *note
     setpriority(): 113f.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Adicionado na versão 3.3.

 -- Dado: os.PRIO_DARWIN_THREAD
 -- Dado: os.PRIO_DARWIN_PROCESS
 -- Dado: os.PRIO_DARWIN_BG
 -- Dado: os.PRIO_DARWIN_NONUI

     Parâmetros para as funções *note getpriority(): 113e. e *note
     setpriority(): 113f.

     *note Disponibilidade: 1ed8.: macOS

     Adicionado na versão 3.12.

 -- Função: os.getresuid ()

     Retorna uma tupla (ruid, euid, suid) indicando os IDs de usuário
     real, efetivo e salvo do processo atual.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Adicionado na versão 3.2.

 -- Função: os.getresgid ()

     Retorna uma tupla (rgid, egid, sgid) indicando os IDs de grupos
     real, efetivo e salvo do processo atual.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Adicionado na versão 3.2.

 -- Função: os.getuid ()

     Retorna o ID de usuário real do processo atual.

     *note Disponibilidade: 1ed8.: Unix.

     A função é uma simulação em WASI, veja *note Plataformas
     WebAssembly: 18f5. para mais informações.

 -- Função: os.initgroups (username, gid, /)

     Chama o ‘initgroups()’ do sistema para inicializar a lista de
     acesso ao grupo com todos os grupos dos quais o nome de usuário
     especificado é membro, mais o ID do grupo especificado.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android.

     Adicionado na versão 3.2.

 -- Função: os.putenv (key, value, /)

     Define a variável de ambiente denominada 'key' como a string
     'value'.  Tais mudanças no ambiente afetam os subprocessos
     iniciados com *note os.system(): 14a5, *note popen(): a91. ou *note
     fork(): 197. e *note execv(): 2cf9.

     Atribuições a itens em *note os.environ: 11f9. são automaticamente
     traduzidas em chamadas correspondentes para *note putenv(): 922.;
     entretanto, chamadas para *note putenv(): 922. não atualizam *note
     os.environ: 11f9, então é preferível atribuir itens de *note
     os.environ: 11f9.  Isso também se aplica a *note getenv(): 2cea. e
     *note getenvb(): 1256, que usam respectivamente *note os.environ:
     11f9. e *note os.environb: 1257. em suas implementações.

          Nota: Em algumas plataformas, incluindo FreeBSD e Mac OS X, a
          modificação de ‘environ’ pode causar vazamentos de memória.
          Consulte a documentação do sistema para ‘putenv()’.

     Levanta um *note evento de auditoria: 19fa. ‘os.putenv’ com os
     argumentos ‘key’, ‘value’.

     Alterado na versão 3.9: A função está agora sempre disponível.

 -- Função: os.setegid (egid, /)

     Define o ID do grupo efetivo do processo atual.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android.

 -- Função: os.seteuid (euid, /)

     Define o ID do usuário efetivo do processo atual.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android.

 -- Função: os.setgid (gid, /)

     Define o ID do grupo do processo atual.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android.

 -- Função: os.setgroups (groups, /)

     Define a lista de IDs de grupo suplementares associados ao processo
     atual como 'groups'.  'groups' deve ser uma sequência e cada
     elemento deve ser um número inteiro identificando um grupo.  Esta
     operação normalmente está disponível apenas para o superusuário.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

          Nota: No Mac OS X, o comprimento de 'groups' não pode exceder
          o número máximo definido pelo sistema de IDs de grupo
          efetivos, normalmente 16.  Consulte a documentação de *note
          getgroups(): 2cee. para casos em que ele pode não retornar o
          mesmo grupo de listas definido chamando setgroups().

 -- Função: os.setns (fd, nstype=0)

     Reassocia a thread atual com um espaço de nomes do Linux.  Veja as
     páginas man ‘setns(2)(3)’ e ‘namespaces(7)(4)’ para mais detalhes.

     Se 'fd' se refere a um link ‘/proc/`pid'/ns/’, ‘setns()’ reassocia
     a thread de chamada com o espaço de nomes associado a esse link, e
     'nstype' pode ser definido como uma das *note constantes
     CLONE_NEW*: 2cfd. para impor restrições na operação (‘0’ significa
     sem restrições).

     Desde o Linux 5.8, 'fd' pode se referir a um descritor de arquivo
     PID obtido de *note pidfd_open(): 47a.  Neste caso, ‘setns()’
     reassocia a thread chamadora em um ou mais dos mesmos espaços de
     nomes que o thread referenciado por 'fd'.  Isso está sujeito a
     quaisquer restrições impostas por 'nstype', que é uma máscara de
     bits que combina uma ou mais das *note constantes CLONE_NEW*: 2cfd,
     por exemplo ‘setns(fd, os.CLONE_NEWUTS | os.CLONE_NEWPID)’.  As
     associações do chamador em espaços de nomes não especificados
     permanecem inalteradas.

     'fd' pode ser qualquer objeto com um método *note fileno(): 15d0.
     ou um descritor de arquivo bruto.

     Este exemplo reassocia a thread com o espaço de nomes de rede do
     processo ‘init’:

          fd = os.open("/proc/1/ns/net", os.O_RDONLY)
          os.setns(fd, os.CLONE_NEWNET)
          os.close(fd)

     *note Disponibilidade: 1ed8.: Linux >= 3.0 with glibc >= 2.14.

     Adicionado na versão 3.12.

     Ver também
     ..........

     A função *note unshare(): 18cb.

 -- Função: os.setpgrp ()

     Executa a chamada de sistema ‘setpgrp()’ ou ‘setpgrp(0, 0)’
     dependendo da versão implementada (se houver).  Veja o manual do
     Unix para a semântica.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Função: os.setpgid (pid, pgrp, /)

     Executa a chamada de sistema ‘setpgid()’ para definir o ID do grupo
     do processo com 'pid' para o grupo de processos com o id 'pgrp'.
     Veja o manual do Unix para a semântica.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Função: os.setpriority (which, who, priority)

     Define a prioridade de agendamento de programa.  O valor 'which' é
     um entre *note PRIO_PROCESS: 2cf2, *note PRIO_PGRP: 2cf3. ou *note
     PRIO_USER: 2cf4, e 'who' é interpretado em relação a 'which' (um
     identificador de processo para *note PRIO_PROCESS: 2cf2,
     identificador do grupo de processos para *note PRIO_PGRP: 2cf3. e
     um ID de usuário para *note PRIO_USER: 2cf4.).  Um valor zero para
     'who' indica (respectivamente) o processo de chamada, o grupo de
     processos do processo de chamada ou o ID do usuário real do
     processo de chamada.  'priority' é um valor na faixa de -20 a 19.
     A prioridade padrão é 0; prioridades menores resultam em um
     agendamento mais favorável.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Adicionado na versão 3.3.

 -- Função: os.setregid (rgid, egid, /)

     Define os IDs de grupo real e efetivo do processo atual.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android.

 -- Função: os.setresgid (rgid, egid, sgid, /)

     Define os IDs de grupo real, efetivo e salvo do processo atual.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android.

     Adicionado na versão 3.2.

 -- Função: os.setresuid (ruid, euid, suid, /)

     Define os IDs de usuário real, efetivo e salvo do processo atual.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android.

     Adicionado na versão 3.2.

 -- Função: os.setreuid (ruid, euid, /)

     Define os IDs de usuário real e efetivo do processo atual.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android.

 -- Função: os.getsid (pid, /)

     Executa a chamada de sistema ‘getsid()’.  Veja o manual do Unix
     para semântica.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Função: os.setsid ()

     Executa a chamada de sistema ‘setsid()’.  Veja o manual do Unix
     para semântica.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Função: os.setuid (uid, /)

     Define o ID de usuário do processo atual.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android.

 -- Função: os.strerror (code, /)

     Retorna a mensagem de erro correspondente ao código de erro em
     'code'.  Nas plataformas em que ‘strerror()’ retorna ‘NULL’ quando
     recebe um número de erro desconhecido, *note ValueError: 202. é
     levantada.

 -- Dado: os.supports_bytes_environ

     ‘True’ se o tipo de sistema operacional nativo do ambiente estiver
     em bytes (por exemplo, ‘False’ no Windows).

     Adicionado na versão 3.2.

 -- Função: os.umask (mask, /)

     Define o umask numérico atual e retorna o umask anterior.

     A função é uma simulação em WASI, veja *note Plataformas
     WebAssembly: 18f5. para mais informações.

 -- Função: os.uname ()

     Retorna informações identificando o sistema operacional atual.  O
     valor retornado é um objeto com cinco atributos:

        * ‘sysname’ - nome do sistema operacional

        * ‘nodename’ - nome da máquina na rede (definido pela
          implementação)

        * ‘release’ - lançamento do sistema operacional

        * ‘version’ - versão do sistema operacional

        * ‘machine’ - identificador de hardware

     Para compatibilidade com versões anteriores, esse objeto também é
     iterável, comportando-se como uma tupla de 5 elementos contendo
     ‘sysname’, ‘nodename’, ‘release’, ‘version’ e ‘machine’ nessa
     ordem.

     Alguns sistemas truncam ‘nodename’ para 8 caracteres ou para o
     componente principal; uma maneira melhor de obter o nome do host é
     *note socket.gethostname(): 2d06. ou até mesmo
     ‘socket.gethostbyaddr(socket.gethostname())’.

     No macOS, iOS e Android, retorna o nome e a versão do 'kernel' (ou
     seja, ‘'Darwin'’ no macOS e iOS; ‘'Linux'’ no Android).  *note
     platform.uname(): 1baa. pode ser usada para obter o nome e a versão
     do sistema operacional voltado para o usuário no iOS e Android.

     *note Disponibilidade: 1ed8.: Unix.

     Alterado na versão 3.3: Tipo de retorno foi alterado de uma tupla
     para um objeto tupla ou similar com atributos nomeados.

 -- Função: os.unsetenv (key, /)

     Cancela (exclui) a variável de ambiente denominada 'key'.  Tais
     mudanças no ambiente afetam subprocessos iniciados com *note
     os.system(): 14a5, *note popen(): a91. ou *note fork(): 197. e
     *note execv(): 2cf9.

     A exclusão de itens em *note os.environ: 11f9. é automaticamente
     traduzida para uma chamada correspondente a *note unsetenv(): 921.;
     no entanto, chamadas a *note unsetenv(): 921. não atualizam *note
     os.environ: 11f9, por isso, na verdade é preferível excluir itens
     de *note os.environ: 11f9.

     Levanta um *note evento de auditoria: 19fa. ‘os.unsetenv’ com o
     argumento ‘key’.

     Alterado na versão 3.9: A função está agora sempre disponível e
     também está disponível no Windows.

 -- Função: os.unshare (flags)

     Desassocia partes do contexto de execução do processo e move-as
     para um espaço de nomes recém-criado.  Veja a página man
     ‘unshare(2)(5)’ para mais detalhes.  O argumento 'flags' é uma
     máscara de bits, combinando zero ou mais *note constantes CLONE_*:
     2cfd, que especifica quais partes do contexto de execução devem ser
     descompartilhadas de suas associações existentes e movidas para um
     novo espaço de nomes.  Se o argumento 'flags' for ‘0’, nenhuma
     alteração será feita no contexto de execução do processo de
     chamada.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.16.

     Adicionado na versão 3.12.

     Ver também
     ..........

     A função *note setns(): 18ca.

Sinalizações para a função *note unshare(): 18cb, se a implementação
oferecer suporte.  Veja ‘unshare(2)(6)’ no manual do Linux para seu
exato efeito e disponibilidade.

 -- Dado: os.CLONE_FILES
 -- Dado: os.CLONE_FS
 -- Dado: os.CLONE_NEWCGROUP
 -- Dado: os.CLONE_NEWIPC
 -- Dado: os.CLONE_NEWNET
 -- Dado: os.CLONE_NEWNS
 -- Dado: os.CLONE_NEWPID
 -- Dado: os.CLONE_NEWTIME
 -- Dado: os.CLONE_NEWUSER
 -- Dado: os.CLONE_NEWUTS
 -- Dado: os.CLONE_SIGHAND
 -- Dado: os.CLONE_SYSVSEM
 -- Dado: os.CLONE_THREAD
 -- Dado: os.CLONE_VM

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0584/

   (2) https://peps.python.org/pep-0584/

   (3) https://manpages.debian.org/setns(2)

   (4) https://manpages.debian.org/namespaces(7)

   (5) https://manpages.debian.org/unshare(2)

   (6) https://manpages.debian.org/unshare(2)


File: python.info,  Node: Criação de objetos arquivos,  Next: Operações dos descritores de arquivos,  Prev: Parâmetros de processo,  Up: os — Diversas interfaces de sistema operacional

5.16.1.4 Criação de objetos arquivos
....................................

Estas funções criam novos *note objetos arquivos: 1203.  (Veja também
*note open(): dba. para abrir os descritores de arquivos.)

 -- Função: os.fdopen (fd, *args, **kwargs)

     Retorna um objeto arquivo aberto conectado ao descritor de arquivo
     'fd'.  Este é um apelido para a função embutida *note open(): 51c.
     e aceita os mesmos argumentos.  A única diferença é que o primeiro
     argumento de *note fdopen(): 20c4. deve ser sempre um inteiro.


File: python.info,  Node: Operações dos descritores de arquivos,  Next: Arquivos e diretórios,  Prev: Criação de objetos arquivos,  Up: os — Diversas interfaces de sistema operacional

5.16.1.5 Operações dos descritores de arquivos
..............................................

Estas funções operam em fluxos de E/S referenciados usando descritores
de arquivos.

Descritores de arquivos são pequenos números inteiros correspondentes a
um arquivo que foi aberto pelo processo atual.  Por exemplo, a entrada
padrão geralmente é o descritor de arquivo 0, a saída padrão 1 e erro
padrão 2.  Outros arquivos abertos por um processo serão então
atribuídos 3, 4, 5, e assim por diante.  O nome “descritor de arquivo” é
um pouco enganoso; em plataformas UNIX, sockets e pipes também são
referenciados como descritores de arquivos.

O método *note fileno(): 15d0. pode ser usado para obter o descritor de
arquivo associado a um *note objeto arquivo: 1203. quando solicitado.
Note-se que usar o descritor de arquivo diretamente ignorará os métodos
do objeto arquivo, ignorando aspectos como buffer interno de dados.

 -- Função: os.close (fd)

     Fecha o descritor de arquivo 'fd'.

          Nota: Esta função destina-se a E/S de baixo nível e deve ser
          aplicada a um descritor de arquivo retornado por *note
          os.open(): dba. ou *note pipe(): 18ef.  Para fechar um “objeto
          arquivo” retornado pela função embutida *note open(): 51c. ou
          por *note popen(): a91. ou *note fdopen(): 20c4, use seu
          método *note close(): 1f6.

 -- Função: os.closerange (fd_low, fd_high, /)

     Fecha todos os descritores de arquivos de 'fd_low' (inclusivo) a
     'fd_high' (exclusivo), ignorando erros.  Equivalente a (mas muito
     mais rápido do que):

          for fd in range(fd_low, fd_high):
              try:
                  os.close(fd)
              except OSError:
                  pass

 -- Função: os.copy_file_range (src, dst, count, offset_src=None,
          offset_dst=None)

     Copia 'count' bytes do descritor de arquivo 'src', começando no
     deslocamento 'offset_src', para o descritor de arquivo 'dst',
     começando no deslocamento 'offset_dst'.  Se 'offset_src' for
     ‘None’, 'src' será lido a partir da posição atual; respectivamente
     para 'offset_dst'.

     No kernel Linux anterior a 5.3, os arquivos apontados por 'src' e
     'dst' devem residir no mesmo sistema de arquivos, caso contrário,
     uma exceção *note OSError: 417. é levantada com *note errno: 15d5.
     definido como *note errno.EXDEV: 2d1b.

     Essa cópia é feita sem o custo adicional de transferência de dados
     do kernel para o espaço do usuário e depois de volta para o kernel.
     Além disso, alguns sistemas de arquivos podem implementar
     otimizações extras, como o uso de reflinks (ou seja, dois ou mais
     nós-i que compartilham ponteiros para os mesmos blocos de disco
     copy-on-write; os sistemas de arquivos suportados incluem btrfs e
     XFS) e cópia do lado do servidor (no caso de NFS).

     A função copia bytes entre dois descritores de arquivo.  As opções
     de texto, como a codificação e o final da linha, são ignoradas.

     O valor de retorno é a quantidade de bytes copiados.  Ele pode ser
     inferior à quantidade solicitada.

          Nota: No Linux, *note os.copy_file_range(): 2d1a. não deve ser
          usada para copiar um intervalo de um pseudo arquivo de um
          sistema de arquivos especial como procfs e sysfs.  Ele nunca
          copiará byte algum e retornará 0 como se o arquivo estivesse
          vazio devido a um problema conhecido do kernel do Linux.

     *note Disponibilidade: 1ed8.: Linux >= 4.5 with glibc >= 2.27.

     Adicionado na versão 3.8.

 -- Função: os.device_encoding (fd)

     Retorna uma string descrevendo a codificação do dispositivo
     associado a 'fd' se estiver conectado a um terminal; senão retorna
     *note None: 675.

     No Unix, se o *note Modo UTF-8 do Python: 656. estiver habilitado,
     retorna ‘'UTF-8'’ ao invés da codificação do dispositivo.

     Alterado na versão 3.10: No Unix, a função agora implementa o Modo
     UTF-8 do Python.

 -- Função: os.dup (fd, /)

     Retorna uma cópia do descritor de arquivo 'fd'.  O novo descritor
     de arquivo é *note não-herdável: f2b.

     No Windows, ao duplicar um fluxo padrão (0: stdin, 1: stdout, 2:
     stderr), o novo descritor de arquivo é *note herdável: f2b.

     *note Disponibilidade: 1ed8.: not WASI.

     Alterado na versão 3.4: O novo descritor de arquivo agora é
     não-hereditário.

 -- Função: os.dup2 (fd, fd2, inheritable=True)

     Duplica o descritor de arquivo 'fd' como 'fd2', fechando o último
     antes disso, se necessário.  Retorna 'fd2'.  O novo descritor de
     arquivo é *note herdável: f2b. por padrão ou não-herdável se
     'inheritable' for ‘False’.

     *note Disponibilidade: 1ed8.: not WASI.

     Alterado na versão 3.4: Adicionado o parâmetro opcional
     'inheritable'.

     Alterado na versão 3.7: Retorna 'fd2' em caso de sucesso.
     Anteriormente, retornava sempre ‘None’.

 -- Função: os.fchmod (fd, mode)

     Altera o modo do arquivo dado por 'fd' ao 'mode' numérico.  Veja a
     documentação de *note chmod(): 21b. para valores possíveis de
     'mode'.  A partir do Python 3.3, isto é equivalente a ‘os.chmod(fd,
     mode)’.

     Levanta um *note evento de auditoria: 19fa. ‘os.chmod’ com os
     argumentos ‘path’, ‘mode’, ‘dir_fd’.

     *note Disponibilidade: 1ed8.: Unix, Windows.

     A função é limitada em WASI, veja *note Plataformas WebAssembly:
     18f5. para mais informações.

     Alterado na versão 3.13: Adicionado suporte no Windows.

 -- Função: os.fchown (fd, uid, gid)

     Altera o ID do proprietário e do grupo do arquivo dado por 'fd'
     para o 'uid' e 'gid' numérico.  Para deixar um dos IDs inalteradas,
     defina-o como -1.  Veja *note chown(): 112d.  A partir do Python
     3.3, isto é equivalente a ‘os.chown(fd, uid, gid)’.

     Levanta um *note evento de auditoria: 19fa. ‘os.chown’ com os
     argumentos ‘path’, ‘uid’, ‘gid’, ‘dir_fd’.

     *note Disponibilidade: 1ed8.: Unix.

     A função é limitada em WASI, veja *note Plataformas WebAssembly:
     18f5. para mais informações.

 -- Função: os.fdatasync (fd)

     Força a gravação do arquivo com descritor de arquivo 'fd' no disco.
     Não força a atualização de metadados.

     *note Disponibilidade: 1ed8.: Unix.

          Nota: Esta função não está disponível no MacOS.

 -- Função: os.fpathconf (fd, name, /)

     Retorna informações de configuração de sistema relevantes para um
     arquivo aberto.  'name' especifica o valor de configuração para
     recuperar; pode ser uma string que é o nome de um valor do sistema
     definido; estes nomes são especificados em uma série de padrões
     (POSIX.1, Unix 95, Unix 98 e outros).  Algumas plataformas definem
     nomes adicionais também.  Os nomes conhecidos do sistema
     operacional hospedeiro são dadas no dicionário ‘pathconf_names’.
     Para variáveis de configuração não incluídas neste mapeamento,
     também é aceito passar um número inteiro para 'name'.

     Se 'name' for uma string e não for conhecida, uma exceção *note
     ValueError: 202. é levantada.  Se um valor específico para 'name'
     não for compatível com o sistema hospedeiro, mesmo que seja
     incluído no ‘pathconf_names’, uma exceção *note OSError: 417. é
     levantada com *note errno.EINVAL: 1b66. como número do erro.

     A partir do Python 3.3, é equivalente a ‘os.pathconf(fd, name)’.

     *note Disponibilidade: 1ed8.: Unix.

 -- Função: os.fstat (fd)

     Captura o estado do descritor de arquivo 'fd'.  Retorna um objeto
     *note stat_result: 1509.

     A partir do Python 3.3, é equivalente a ‘os.stat(fd)’.

     Ver também
     ..........

     A função *note stat(): 4a0.

 -- Função: os.fstatvfs (fd, /)

     Retorna informações sobre o sistema de arquivos que contém o
     arquivo associado com descritor de arquivo 'fd', como *note
     statvfs(): 113b.  A partir do Python 3.3, isso equivale a
     ‘os.statvfs(fd)’.

     *note Disponibilidade: 1ed8.: Unix.

 -- Função: os.fsync (fd)

     Força a gravação no disco de arquivo com descritor de arquivo 'fd'.
     No Unix, isto chama a função nativa ‘fsync()’; no Windows, a função
     de MS ‘_commit()’.

     Se você estiver começando com um *note objeto arquivo: 1203. 'f' em
     buffer do Python, primeiro use ‘f.flush()’, e depois use
     ‘os.fsync(f.fileno())’, para garantir que todos os buffers internos
     associados com 'f' sejam gravados no disco.

     *note Disponibilidade: 1ed8.: Unix, Windows.

 -- Função: os.ftruncate (fd, length, /)

     Trunca o arquivo correspondente ao descritor de arquivo 'fd', de
     modo que tenha no máximo 'length' bytes de tamanho.  A partir do
     Python 3.3, isto é equivalente a ‘os.truncate(fd, length)’.

     Levanta *note evento de auditoria: 19fa. ‘os.truncate’ com os
     argumentos ‘fd’, ‘length’.

     *note Disponibilidade: 1ed8.: Unix, Windows.

     Alterado na versão 3.5: Adicionado suporte para o Windows.

 -- Função: os.get_blocking (fd, /)

     Obtém o modo de bloqueio do descritor de arquivo: ‘False’ se o
     sinalizador *note O_NONBLOCK: e68. estiver marcado, ‘True’ se o
     sinalizador estiver desmarcado.

     Veja também *note set_blocking(): e67. e *note
     socket.socket.setblocking(): 2d1d.

     *note Disponibilidade: 1ed8.: Unix, Windows.

     A função é limitada em WASI, veja *note Plataformas WebAssembly:
     18f5. para mais informações.

     No Windows, esta função é limitada a encadeamentos.

     Adicionado na versão 3.5.

     Alterado na versão 3.12: Adicionado suporte a encadeamentos no
     Windows.

 -- Função: os.grantpt (fd, /)

     Concede acesso ao dispositivo pseudoterminal secundário associado
     ao dispositivo pseudoterminal principal ao qual o descritor de
     arquivo 'fd' se refere.  O descritor de arquivo 'fd' não é fechado
     em caso de falha.

     Chama a função ‘grantpt()’ da biblioteca padrão C.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Adicionado na versão 3.13.

 -- Função: os.isatty (fd, /)

     Retorna ‘True’ se o descritor de arquivo 'fd' estiver aberto e
     conectado a um dispositivo do tipo tty, senão ‘False’.

 -- Função: os.lockf (fd, cmd, len, /)

     Aplica, testa ou remove uma trava POSIX em um descritor de arquivo
     aberto.  'fd' é um descritor de arquivo aberto.  'cmd' especifica o
     comando a ser usado - um dentre *note F_LOCK: 2d1e, *note F_TLOCK:
     2d1f, *note F_ULOCK: 2d20. ou *note F_TEST: 2d21.  'len' especifica
     a seção do arquivo para travar.

     Levanta um *note evento de auditoria: 19fa. ‘os.lockf’ com os
     argumentos ‘fd’, ‘cmd’, ‘len’.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

 -- Dado: os.F_LOCK
 -- Dado: os.F_TLOCK
 -- Dado: os.F_ULOCK
 -- Dado: os.F_TEST

     Sinalizadores que especificam qual ação *note lockf(): 1152. vai
     executar.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

 -- Função: os.login_tty (fd, /)

     Prepara o tty do qual fd é um descritor de arquivo para uma nova
     sessão de login.  Faz do processo de chamada um líder de sessão;
     torna o tty o tty de controle, o stdin, o stdout e o stderr do
     processo de chamada; fecha o fd.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Adicionado na versão 3.11.

 -- Função: os.lseek (fd, pos, whence, /)

     Define a posição atual do descritor de arquivo 'fd' para a posição
     'pos', modificada por 'whence', e retorna a nova posição em bytes
     relativa ao início do arquivo.  Os valores válidos de 'whence' são:

        * *note SEEK_SET: 12cf. ou ‘0’ – define 'pos' em relação ao
          início do arquivo

        * *note SEEK_CUR: 12d0. ou ‘1’ – define 'pos' em relação à
          posição atual do arquivo

        * *note SEEK_END: 12d1. ou ‘2’ – define 'pos' em relação ao
          final do arquivo

        * *note SEEK_HOLE: 2d22. – define 'pos' para o próximo local de
          dados, em relação a 'pos'

        * *note SEEK_DATA: 2d23. – define 'pos' para o próximo buraco de
          dados, em relação a 'pos'

     Alterado na versão 3.3: Adicionado suporte para ‘SEEK_HOLE’ e
     ‘SEEK_DATA’.

 -- Dado: os.SEEK_SET
 -- Dado: os.SEEK_CUR
 -- Dado: os.SEEK_END

     Parâmetros para a função *note lseek(): 1156. e o método *note
     seek(): 12ce. em *note objetos arquivo ou similares: 1203, para
     onde ajustar o indicador de posição do arquivo.

     *note SEEK_SET: 12cf.

          Ajusta a posição do arquivo em relação ao início do arquivo.

     *note SEEK_CUR: 12d0.

          Ajusta a posição do arquivo em relação a sua posição atual.

     *note SEEK_END: 12d1.

          Ajusta a posição do arquivo em relação ao fim do arquivo.

     Seus valores são 0, 1 e 2, respectivamente.

 -- Dado: os.SEEK_HOLE
 -- Dado: os.SEEK_DATA

     Parâmetros para a função *note lseek(): 1156. e o método *note
     seek(): 12ce. em *note objetos arquivo ou similares: 1203, para
     para buscar dados de arquivos e buracos em arquivos alocados de
     forma esparsa.

     ‘SEEK_DATA’

          Ajusta o deslocamento do arquivo para o próximo local contendo
          dados, em relação à posição de busca.

     ‘SEEK_HOLE’

          Ajusta o deslocamento do arquivo para o próximo local contendo
          um buraco, em relação à posição de busca.  Um buraco é
          definido como uma sequência de zeros.

          Nota: Essas operações só fazem sentido para sistemas de
          arquivos que as suportam.

     *note Disponibilidade: 1ed8.: Linux >= 3.1, macOS, Unix

     Adicionado na versão 3.3.

 -- Função: os.open (path, flags, mode=0o777, *, dir_fd=None)

     Abre o arquivo 'path' e define vários sinalizadores de acordo com
     'flags' e, possivelmente, seu modo, de acordo com 'mode'.  Ao
     computar 'mode', o valor atual de umask é primeiro mascarado.
     Retorna o descritor de arquivo para o arquivo recém-aberto.  O novo
     descritor de arquivo é *note não-herdável: f2b.

     Para ler uma descrição dos valores de sinalizadores e modos, veja a
     documentação de C; constantes de sinalizador (como *note O_RDONLY:
     2d24. e *note O_WRONLY: 2d25.) são definidas no módulo *note os:
     a1.  Em particular, no Windows é necessário adicionar *note
     O_BINARY: 2d26. para abrir arquivos em modo binário.

     Esta função oferece suporte para *note caminhos relativos aos
     descritores de diretório: 1129. com o parâmetro 'dir_fd'.

     Levanta um *note evento de auditoria: 19fa. ‘open’ com os
     argumentos ‘path’, ‘mode’, ‘flags’.

     Alterado na versão 3.4: O novo descritor de arquivo agora é
     não-hereditário.

          Nota: Esta função é destinada a E/S de baixo nível.  Para uso
          normal, use a função embutida *note open(): 51c, que retorna
          um *note objeto arquivo: 1203. com os métodos ‘read()’ e
          ‘write()’ (e muitos mais).  Para envolver um descritor de
          arquivo em um objeto arquivo, use *note fdopen(): 20c4.

     Alterado na versão 3.3: Adicionado o parâmetro 'dir_fd'.

     Alterado na versão 3.5: Se a chamada de sistema é interrompida e o
     tratador de sinal não levanta uma exceção, a função agora tenta
     novamente a chamada de sistema em vez de levantar uma exceção *note
     InterruptedError: db0. (consulte PEP 475(1) para entender a
     justificativa).

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

As seguintes constantes são opções para o parâmetro 'flags' da função
*note open(): dba.  Elas podem ser combinadas usando o operador bit a
bit OU ‘|’.  Algumas delas não estão disponíveis em todas as
plataformas.  Para obter descrições de sua disponibilidade e uso,
consulte a página de manual ‘open(2)(2)’ para Unix ou o MSDN(3) para
Windows.

 -- Dado: os.O_RDONLY
 -- Dado: os.O_WRONLY
 -- Dado: os.O_RDWR
 -- Dado: os.O_APPEND
 -- Dado: os.O_CREAT
 -- Dado: os.O_EXCL
 -- Dado: os.O_TRUNC

     As constantes acima estão disponíveis no Unix e Windows.

 -- Dado: os.O_DSYNC
 -- Dado: os.O_RSYNC
 -- Dado: os.O_SYNC
 -- Dado: os.O_NDELAY
 -- Dado: os.O_NONBLOCK
 -- Dado: os.O_NOCTTY
 -- Dado: os.O_CLOEXEC

     As constantes acima estão disponíveis apenas no Unix.

     Alterado na versão 3.3: Adicionada a constante *note O_CLOEXEC:
     10b5.

 -- Dado: os.O_BINARY
 -- Dado: os.O_NOINHERIT
 -- Dado: os.O_SHORT_LIVED
 -- Dado: os.O_TEMPORARY
 -- Dado: os.O_RANDOM
 -- Dado: os.O_SEQUENTIAL
 -- Dado: os.O_TEXT

     As constantes acima estão disponíveis apenas no Windows.

 -- Dado: os.O_EVTONLY
 -- Dado: os.O_FSYNC
 -- Dado: os.O_SYMLINK
 -- Dado: os.O_NOFOLLOW_ANY

     As constantes acima estão disponíveis apenas no macOS.

     Alterado na versão 3.10: Adicionadas as constantes *note O_EVTONLY:
     81d, *note O_FSYNC: 81e, *note O_SYMLINK: 81f. e *note
     O_NOFOLLOW_ANY: 820.

 -- Dado: os.O_ASYNC
 -- Dado: os.O_DIRECT
 -- Dado: os.O_DIRECTORY
 -- Dado: os.O_NOFOLLOW
 -- Dado: os.O_NOATIME
 -- Dado: os.O_PATH
 -- Dado: os.O_TMPFILE
 -- Dado: os.O_SHLOCK
 -- Dado: os.O_EXLOCK

     As constantes acima são extensões e não estarão presentes, se não
     forem definidos pela biblioteca C.

     Alterado na versão 3.4: Adicionada *note O_PATH: fa6. em sistemas
     que oferecem suporte.  Adicionada *note O_TMPFILE: fa7, somente
     disponível no kernel Linux 3.11 ou mais recente.

 -- Função: os.openpty ()

     Abre um novo par de pseudo-terminal.  Retorna um par de descritores
     de arquivos ‘(master, slave)’ para o pty e o tty, respectivamente.
     Os novos descritores de arquivos são *note não-herdáveis: f2b.
     Para uma abordagem (ligeiramente) mais portável, use o módulo *note
     pty: b1.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Alterado na versão 3.4: Os novos descritores de arquivos agora são
     não-herdáveis.

 -- Função: os.pipe ()

     Cria um encadeamento (pipe).  Retorna um par de descritores de
     arquivos ‘(r, w)’ usáveis para leitura e escrita, respectivamente.
     O novo descritor de arquivo é *note não-herdável: f2b.

     *note Disponibilidade: 1ed8.: Unix, Windows.

     Alterado na versão 3.4: Os novos descritores de arquivos agora são
     não-herdáveis.

 -- Função: os.pipe2 (flags, /)

     Cria um encadeamento (pipe) com 'flags' definidos atomicamente.
     'flags' podem ser construídos por aplicação de OU junto a um ou
     mais destes valores: *note O_NONBLOCK: e68, *note O_CLOEXEC: 10b5.
     Retorna um par de descritores de arquivos ‘(r, w)’ utilizáveis para
     leitura e gravação, respectivamente.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Adicionado na versão 3.3.

 -- Função: os.posix_fallocate (fd, offset, len, /)

     Garante que um espaço em disco suficiente seja alocado para o
     arquivo especificado por 'fd' iniciando em 'offset' e continuando
     por 'len' bytes.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

 -- Função: os.posix_fadvise (fd, offset, len, advice, /)

     Anuncia a intenção de acessar dados em um padrão específico,
     permitindo assim que o kernel faça otimizações.  O conteúdo em
     'advice' se aplica à região do arquivo especificado por 'fd',
     iniciando em 'offset' e continuando por 'len' bytes.  'advice' é um
     entre *note POSIX_FADV_NORMAL: 2d3c, *note POSIX_FADV_SEQUENTIAL:
     2d3d, *note POSIX_FADV_RANDOM: 2d3e, *note POSIX_FADV_NOREUSE:
     2d3f, *note POSIX_FADV_WILLNEED: 2d40. ou *note
     POSIX_FADV_DONTNEED: 2d41.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

 -- Dado: os.POSIX_FADV_NORMAL
 -- Dado: os.POSIX_FADV_SEQUENTIAL
 -- Dado: os.POSIX_FADV_RANDOM
 -- Dado: os.POSIX_FADV_NOREUSE
 -- Dado: os.POSIX_FADV_WILLNEED
 -- Dado: os.POSIX_FADV_DONTNEED

     Sinalizadores que podem ser usados em 'advice' em *note
     posix_fadvise(): dbb. que especificam o padrão de acesso que
     provavelmente será usado.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

 -- Função: os.pread (fd, n, offset, /)

     Lê no máximo 'n' bytes do descritor de arquivo 'fd' na posição
     'offset', mantendo o deslocamento do arquivo inalterado.

     Retorna uma bytestring contendo os bytes lidos.  Se o final do
     arquivo referido por 'fd' for atingido, um objeto de bytes vazio
     será retornado.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

 -- Função: os.posix_openpt (oflag, /)

     Abre e retorna um descritor de arquivo para um dispositivo
     pseudoterminal mestre.

     Chama a função ‘posix_openpt()’ da biblioteca padrão C. O argumento
     'oflag' é usado para definir sinalizadores de status de arquivo e
     modos de acesso a arquivos conforme especificado na página de
     manual da ‘posix_openpt()’ do seu sistema.

     O descritor de arquivo retornado é *note não herdável: f2b.  Se o
     valor *note O_CLOEXEC: 10b5. estiver disponível no sistema, ele é
     adicionado a 'oflag'.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Adicionado na versão 3.13.

 -- Função: os.preadv (fd, buffers, offset, flags=0, /)

     Lê de um descritor de arquivo 'fd' na posição de 'offset' em
     'buffers' mutáveis de *note objetos bytes ou similares: d4f,
     deixando o deslocamento do arquivo inalterado.  Transfere os dados
     para cada buffer até ficar cheio e depois passa para o próximo
     buffer na sequência para armazenar o restante dos dados.

     O argumento 'flags' contém um OR bit a bit de zero ou mais dos
     seguintes sinalizadores:

        - *note RWF_HIPRI: 2d42.

        - *note RWF_NOWAIT: 2d43.

     Retorna o número total de bytes realmente lidos, que pode ser menor
     que a capacidade total de todos os objetos.

     O sistema operacional pode definir um limite (*note sysconf():
     1651. valor ‘'SC_IOV_MAX'’) no número de buffers que podem ser
     usados.

     Combina a funcionalidade de *note os.readv(): b74. e *note
     os.pread(): b75.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.30, FreeBSD >= 6.0,
     OpenBSD >= 2.7, AIX >= 7.1.

     O uso de sinalizadores requer Linux >= 4.6.

     Adicionado na versão 3.7.

 -- Dado: os.RWF_NOWAIT

     Não aguarda por dados que não estão disponíveis imediatamente.  Se
     esse sinalizador for especificado, a chamada do sistema retorna
     instantaneamente se for necessário ler dados do armazenamento de
     backup ou aguardar uma trava.

     Se alguns dados foram lidos com sucesso, ele retorna o número de
     bytes lidos.  Se nenhum bytes foi lido, ele retornará ‘-1’ e
     definirá errno como *note errno.EAGAIN: 2435.

     *note Disponibilidade: 1ed8.: Linux >= 4.14.

     Adicionado na versão 3.7.

 -- Dado: os.RWF_HIPRI

     Alta prioridade de leitura/gravação.  Permite sistemas de arquivos
     baseados em blocos para usar a consulta do dispositivo, que fornece
     latência inferior, mas pode usar recursos adicionais.

     Atualmente, no Linux, esse recurso é usável apenas em um descritor
     de arquivo aberto usando o sinalizador *note O_DIRECT: 2d37.

     *note Disponibilidade: 1ed8.: Linux >= 4.6.

     Adicionado na versão 3.7.

 -- Função: os.ptsname (fd, /)

     Retorna o nome do dispositivo pseudoterminal secundário associado
     ao dispositivo pseudoterminal principal ao qual o descritor de
     arquivo 'fd' se refere.  O descritor de arquivo 'fd' não é fechado
     em caso de falha.

     Chama a função reentrante ‘ptsname_r()’ da biblioteca padrão C se
     estiver disponível; caso contrário, a função ‘ptsname()’ da
     biblioteca padrão C, que não é garantida como sendo segura para
     thread, é chamada.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Adicionado na versão 3.13.

 -- Função: os.pwrite (fd, str, offset, /)

     Escreve a bytestring in 'str' no descritor de arquivo 'fd' na
     posição 'offset', mantendo o deslocamento do arquivo inalterado.

     Retorna o número de bytes realmente escritos.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

 -- Função: os.pwritev (fd, buffers, offset, flags=0, /)

     Escreve o conteúdo de 'buffers' no descritor de arquivo 'fd' com um
     deslocamento 'offset', deixando o deslocamento do arquivo
     inalterado.  'buffers' deve ser uma sequência de *note objetos
     bytes ou similares: d4f.  Os buffers são processados em ordem de
     vetor.  Todo o conteúdo do primeiro buffer é gravado antes de
     prosseguir para o segundo, e assim por diante.

     O argumento 'flags' contém um OR bit a bit de zero ou mais dos
     seguintes sinalizadores:

        - *note RWF_DSYNC: 2d44.

        - *note RWF_SYNC: 2d45.

        - *note RWF_APPEND: 1aba.

     Retorna o número total de bytes realmente escritos.

     O sistema operacional pode definir um limite (*note sysconf():
     1651. valor ‘'SC_IOV_MAX'’) no número de buffers que podem ser
     usados.

     Combina a funcionalidade de *note os.writev(): b77. e *note
     os.pwrite(): b78.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.30, FreeBSD >= 6.0,
     OpenBSD >= 2.7, AIX >= 7.1.

     O uso de sinalizadores requer Linux >= 4.6.

     Adicionado na versão 3.7.

 -- Dado: os.RWF_DSYNC

     Fornece um equivalente para gravação do sinalizador *note O_DSYNC:
     2d2b. da função *note os.open(): dba.  Este efeito de sinalizador
     se aplica apenas ao intervalo de dados escrito pela chamada de
     sistema.

     *note Disponibilidade: 1ed8.: Linux >= 4.7.

     Adicionado na versão 3.7.

 -- Dado: os.RWF_SYNC

     Fornece um equivalente para gravação do sinalizador *note O_SYNC:
     2d2d. da função *note os.open(): dba.  Este efeito de sinalizador
     se aplica apenas ao intervalo de dados escrito pela chamada de
     sistema.

     *note Disponibilidade: 1ed8.: Linux >= 4.7.

     Adicionado na versão 3.7.

 -- Dado: os.RWF_APPEND

     Fornece um equivalente para gravação do sinalizador *note O_APPEND:
     2d28. da função *note os.open(): dba.  Esse sinalizador é
     significante apenas para *note os.pwritev(): b76, e seu efeito se
     aplica apenas ao intervalo de dados escrito pela chamada de
     sistema.  O argumento 'offset' não afeta a operação de escrita; o
     dado é sempre adicionado ao fim do arquivo.  Contudo, se o
     argumento 'offset' for ‘-1’, o 'offset' do arquivo atual é
     atualizado.

     *note Disponibilidade: 1ed8.: Linux >= 4.16.

     Adicionado na versão 3.10.

 -- Função: os.read (fd, n, /)

     Lê no máximo 'n' bytes do descritor de arquivos 'fd'.

     Retorna uma bytestring contendo os bytes lidos.  Se o final do
     arquivo referido por 'fd' for atingido, um objeto de bytes vazio
     será retornado.

          Nota: Esta função destina-se a E/S de baixo nível e deve ser
          aplicada a um descritor de arquivo retornado por *note
          os.open(): dba. ou *note pipe(): 18ef.  Para ler um “objeto
          arquivo” retornado pela função embutida *note open(): 51c. ou
          por *note popen(): a91. ou *note fdopen(): 20c4, ou *note
          sys.stdin: 53d, use seus métodos ‘read()’ ou ‘readline()’.

     Alterado na versão 3.5: Se a chamada de sistema é interrompida e o
     tratador de sinal não levanta uma exceção, a função agora tenta
     novamente a chamada de sistema em vez de levantar uma exceção *note
     InterruptedError: db0. (consulte PEP 475(4) para entender a
     justificativa).

 -- Função: os.sendfile (out_fd, in_fd, offset, count)

 -- Função: os.sendfile (out_fd, in_fd, offset, count, headers=(),
          trailers=(), flags=0)

     Copia 'count' bytes do descritor de arquivo 'in_fd' para o
     descritor de arquivo 'out_fd' começando em 'offset'.  Retorna o
     número de bytes enviados.  Quando o EOF é alcançado, retorna ‘0’.

     A primeira notação da função está disponível por todas as
     plataformas que definem *note sendfile(): b21.

     No Linux, se 'offset' for fornecido como ‘None’, os bytes são lidos
     da posição atual de 'in_fd' e a posição de 'in_fd' é atualizada.

     O segundo caso pode ser usado no macOS e FreeBSD onde 'headers' e
     'trailers' são sequências arbitrárias de buffers que são escritos
     antes e depois dos dados de 'in_fd' ser escrito.  Retorna o mesmo
     que no primeiro caso.

     No macOS e FreeBSD, um valor de ‘0’ para 'count' especifica enviar
     até o fim de 'in_fd' ser alcançado.

     Todas as plataformas tem suporte a soquetes como descritor de
     arquivo 'out_fd', e algumas plataformas permitem outros tipos (por
     exemplo, arquivo regular, encadeamento) também.

     Aplicativos de plataforma cruzada não devem usar os argumentos
     'headers', 'trailers' e 'flags'.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

          Nota: Para um invólucro de nível mais alto de *note
          sendfile(): b21, consulte *note socket.socket.sendfile(): e8c.

     Adicionado na versão 3.3.

     Alterado na versão 3.9: Os parâmetros 'out' e 'in' foram renomeados
     para 'out_fd' e 'in_fd'.

 -- Dado: os.SF_NODISKIO
 -- Dado: os.SF_MNOWAIT
 -- Dado: os.SF_SYNC

     Parâmetros para a função *note sendfile(): b21, se a implementação
     tiver suporte a eles.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Adicionado na versão 3.3.

 -- Dado: os.SF_NOCACHE

     Parâmetro para a função *note sendfile(): b21, se a implementação
     tiver suporte a isso.  Os dados não serão armazenados em cache na
     memória virtual e serão liberados posteriormente.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Adicionado na versão 3.11.

 -- Função: os.set_blocking (fd, blocking, /)

     Define o modo de bloqueio do descritor de arquivo especificado.
     Define o sinalizador *note O_NONBLOCK: e68. se blocking for
     ‘False’; do contrário, limpa o sinalizador.

     Veja também *note get_blocking(): e66. e *note
     socket.socket.setblocking(): 2d1d.

     *note Disponibilidade: 1ed8.: Unix, Windows.

     A função é limitada em WASI, veja *note Plataformas WebAssembly:
     18f5. para mais informações.

     No Windows, esta função é limitada a encadeamentos.

     Adicionado na versão 3.5.

     Alterado na versão 3.12: Adicionado suporte a encadeamentos no
     Windows.

 -- Função: os.splice (src, dst, count, offset_src=None,
          offset_dst=None)

     Transfere 'count' bytes do descritor de arquivo 'src', começando do
     'offset_src', para o descritor de arquivo 'dst', começando do
     'offset_dst'.  Pelo menos um dos descritores de arquivo deve se
     referir a um encadeamento.  Se 'offset_src' é ‘None’, então 'src' é
     lido a partir da posição atual; o mesmo para 'offset_dst'.  O
     deslocamento associado a um descritor de arquivo que se refere a um
     encadeamento deve ser ‘None’.  Os arquivos apontados por 'src' e
     'dst' devem residir no mesmo sistema de arquivos, de outra forma
     uma *note OSError: 417. é levantada com *note errno: 15d5. definido
     para *note errno.EXDEV: 2d1b.

     Essa cópia é feita sem o custo adicional de transferência de dados
     do kernel para o espaço do usuário e, em seguida, volta para o
     kernel.  Além disso, alguns sistemas de arquivos poderiam
     implementar otimizações extras.  A cópia é feita como se ambos os
     arquivos estivessem abertos como binários.

     Após a conclusão bem-sucedida, retorna o número de bytes unidos ao
     encadeamento ou a partir dele.  Um valor de retorno de 0 significa
     o fim da entrada.  Se 'src' se refere a um encadeamento, isso
     significa que não havia dados para transferir, e não faria sentido
     bloquear porque não há escritores conectados ao fim da escrita do
     encadeamento.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.17 with glibc >= 2.5

     Adicionado na versão 3.10.

 -- Dado: os.SPLICE_F_MOVE
 -- Dado: os.SPLICE_F_NONBLOCK
 -- Dado: os.SPLICE_F_MORE

     Adicionado na versão 3.10.

 -- Função: os.readv (fd, buffers, /)

     Lê de um descritor de arquivo 'fd' em um número de 'buffers' *note
     objetos bytes ou similares: d4f. mutáveis.  Transfere os dados para
     cada buffer até que esteja cheio e, a seguir, vai para o próximo
     buffer na sequência para armazenar o restante dos dados.

     Retorna o número total de bytes realmente lidos, que pode ser menor
     que a capacidade total de todos os objetos.

     O sistema operacional pode definir um limite (*note sysconf():
     1651. valor ‘'SC_IOV_MAX'’) no número de buffers que podem ser
     usados.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

 -- Função: os.tcgetpgrp (fd, /)

     Retorna o grupo de processos associado ao terminal fornecido por
     'fd' (um descritor de arquivo aberto retornado por *note os.open():
     dba.).

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Função: os.tcsetpgrp (fd, pg, /)

     Define o grupo de processos associado ao terminal fornecido por
     'fd' (um descritor de arquivo aberto retornado por *note os.open():
     dba.) para 'pg'.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Função: os.ttyname (fd, /)

     Retorna uma string que especifica o dispositivo de terminal
     associado ao descritor de arquivo 'fd'.  Se 'fd' não estiver
     associado a um dispositivo de terminal, uma exceção é levantada.

     *note Disponibilidade: 1ed8.: Unix.

 -- Função: os.unlockpt (fd, /)

     Destrava o dispositivo pseudoterminal secundário associado ao
     dispositivo pseudoterminal principal ao qual o descritor de arquivo
     'fd' se refere.  O descritor de arquivo 'fd' não é fechado em caso
     de falha.

     Chama a função ‘unlockpt()’ da biblioteca padrão C.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Adicionado na versão 3.13.

 -- Função: os.write (fd, str, /)

     Escreve a string de bytes em 'str' no descritor de arquivo 'fd'.

     Retorna o número de bytes realmente escritos.

          Nota: Esta função destina-se a E/S de baixo nível e deve ser
          aplicada a um descritor de arquivo retornado por *note
          os.open(): dba. ou *note pipe(): 18ef.  Para escrever um
          “objeto arquivo” retornado pela função embutida *note open():
          51c. ou por *note popen(): a91. ou *note fdopen(): 20c4, ou
          *note sys.stdout: ae6. ou *note sys.stderr: 940, use seu
          método ‘write()’.

     Alterado na versão 3.5: Se a chamada de sistema é interrompida e o
     tratador de sinal não levanta uma exceção, a função agora tenta
     novamente a chamada de sistema em vez de levantar uma exceção *note
     InterruptedError: db0. (consulte PEP 475(5) para entender a
     justificativa).

 -- Função: os.writev (fd, buffers, /)

     Escreve o conteúdo de 'buffers' no descritor de arquivo 'fd'.
     'buffers' deve ser uma sequência de *note objetos bytes ou
     similares: d4f.  Os buffers são processados na ordem em que estão.
     Todo o conteúdo do primeiro buffer é gravado antes de prosseguir
     para o segundo, e assim por diante.

     Retorna o número total de bytes realmente escritos.

     O sistema operacional pode definir um limite (*note sysconf():
     1651. valor ‘'SC_IOV_MAX'’) no número de buffers que podem ser
     usados.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

* Menu:

* Consultando o tamanho de um terminal::
* Herança de descritores de arquivos::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0475/

   (2) https://manpages.debian.org/open(2)

   (3) https://msdn.microsoft.com/en-us/library/z0kc8e3z.aspx

   (4) https://peps.python.org/pep-0475/

   (5) https://peps.python.org/pep-0475/


File: python.info,  Node: Consultando o tamanho de um terminal,  Next: Herança de descritores de arquivos,  Up: Operações dos descritores de arquivos

5.16.1.6 Consultando o tamanho de um terminal
.............................................

Adicionado na versão 3.3.

 -- Função: os.get_terminal_size (fd=STDOUT_FILENO, /)

     Retorna o tamanho da janela do terminal como ‘(columns, lines)’,
     tupla do tipo *note terminal_size: 2a34.

     O argumento opcional ‘fd’ (padrão ‘STDOUT_FILENO’, ou saída padrão)
     especifica qual descritor de arquivo deve ser consultado.

     Se o descritor de arquivo não estiver conectado a um terminal, uma
     exceção *note OSError: 417. é levantada.

     *note shutil.get_terminal_size(): 1142. é a função de alto nível
     que normalmente deve ser usada, ‘os.get_terminal_size’ é a
     implementação de baixo nível.

     *note Disponibilidade: 1ed8.: Unix, Windows.

 -- Classe: os.terminal_size

     Uma subclasse de tupla, contendo ‘(columns, lines)’ do tamanho da
     janela do terminal.

      -- Atributo: columns

          Largura da janela do terminal em caracteres.

      -- Atributo: lines

          Altura da janela do terminal em caracteres.


File: python.info,  Node: Herança de descritores de arquivos,  Prev: Consultando o tamanho de um terminal,  Up: Operações dos descritores de arquivos

5.16.1.7 Herança de descritores de arquivos
...........................................

Adicionado na versão 3.4.

Um descritor de arquivo tem um sinalizador “herdável” que indica se o
descritor de arquivo pode ser herdado por processos filho.  A partir do
Python 3.4, os descritores de arquivo criados pelo Python não são
herdáveis por padrão.

On UNIX, non-inheritable file descriptors are closed in child processes
at the execution of a new program, other file descriptors are inherited.
Note that non-inheritable file descriptors are still 'inherited' by
child processes on *note os.fork(): 197.

No Windows, identificadores não herdáveis e descritores de arquivo são
fechados em processos filho, exceto para fluxos padrão (descritores de
arquivo 0, 1 e 2: stdin, stdout e stderr), que são sempre herdados.
Usando as funções *note spawn*: 1826, todos os identificadores herdáveis
e todos os descritores de arquivo herdáveis são herdados.  Usando o
módulo *note subprocess: d6, todos os descritores de arquivo, exceto
fluxos padrão, são fechados, e os manipuladores herdáveis são herdados
apenas se o parâmetro 'close_fds' for ‘False’.

Nas plataformas WebAssembly, o descritor de arquivo não pode ser
modificado.

 -- Função: os.get_inheritable (fd, /)

     Obtém o sinalizador “herdável” do descritor de arquivo especificado
     (um booleano).

 -- Função: os.set_inheritable (fd, inheritable, /)

     Define o sinalizador “herdável” do descritor de arquivo
     especificado.

 -- Função: os.get_handle_inheritable (handle, /)

     Obtém o sinalizador “herdável” do manipulador especificado (um
     booleano).

     *note Disponibilidade: 1ed8.: Windows.

 -- Função: os.set_handle_inheritable (handle, inheritable, /)

     Define o sinalizador “herdável” do manipulador especificado.

     *note Disponibilidade: 1ed8.: Windows.


File: python.info,  Node: Arquivos e diretórios,  Next: Gerenciamento de processo,  Prev: Operações dos descritores de arquivos,  Up: os — Diversas interfaces de sistema operacional

5.16.1.8 Arquivos e diretórios
..............................

Em algumas plataformas Unix, muitas dessas funções oferecem suporte para
um ou mais destes recursos:

   * 'especificar um descritor de arquivo:' normalmente o argumento
     'path' fornecido para funções no módulo *note os: a1. deve ser uma
     string especificando um caminho de arquivo.  No entanto, algumas
     funções agora aceitam alternativamente um descritor de arquivo
     aberto para seu argumento 'path'.  A função então operará no
     arquivo referido pelo descritor.  (Para sistemas POSIX, Python irá
     chamar a variante da função prefixada com ‘f’ (por exemplo, chamar
     ‘fchdir’ em vez de ‘chdir’).

     Você pode verificar se 'path' pode ser especificado ou não como um
     descritor de arquivo para uma função particular em sua plataforma
     usando *note os.supports_fd: 113c.  Se esta funcionalidade não
     estiver disponível, usá-la levantará uma *note NotImplementedError:
     228.

     Se a função também oferecer suporte para os argumentos 'dir_fd' ou
     'follow_symlinks', é um erro especificar um deles ao fornecer
     'path' como um descritor de arquivo.

   * 'caminhos relativos aos descritores de diretório:' se 'dir_fd' não
     for ‘None’, deve ser um descritor de arquivo referindo-se a um
     diretório, e o caminho para operar deve ser relativo; o caminho
     será relativo a esse diretório.  Se o caminho for absoluto,
     'dir_fd' será ignorado.  Para sistemas POSIX, Python irá chamar a
     variante da função com um sufixo ‘at’ e possivelmente prefixado com
     ‘f’ (por exemplo, chamar ‘faccessat’ ao invés de ‘access’).

     Você pode verificar se há ou não suporte para 'dir_fd' em uma
     função particular em sua plataforma usando *note
     os.supports_dir_fd: 1136.  Se não estiver disponível, usá-lo
     levantará uma *note NotImplementedError: 228.

   * 'não seguir links simbólicos:' se 'follow_symlinks' for ‘False’, e
     o último elemento do caminho para operar for um link simbólico, a
     função irá operar no próprio link simbólico ao invés do arquivo
     apontado pelo link.  Para sistemas POSIX, Python irá chamar a
     variante ‘l...’ da função.

     Você pode verificar se há ou não suporte para 'follow_symlinks' em
     uma função particular em sua plataforma usando *note
     os.supports_follow_symlinks: 1137.  Se não estiver disponível,
     usá-lo levantará uma *note NotImplementedError: 228.

 -- Função: os.access (path, mode, *, dir_fd=None, effective_ids=False,
          follow_symlinks=True)

     Usa o uid/gid real para testar o acesso ao 'path'.  Observe que a
     maioria das operações usará o uid/gid efetivo, portanto, essa
     rotina pode ser usada em um ambiente suid/sgid para testar se o
     usuário da chamada tem o acesso especificado ao 'path'.  'mode'
     deve ser *note F_OK: 2d56. para testar a existência de 'path', ou
     pode ser o OU inclusivo de um ou mais dos *note R_OK: 2d57, *note
     W_OK: 2d58, e *note X_OK: 2d59. para testar as permissões.  Retorna
     *note True: c27. se o acesso for permitido, *note False: b49. se
     não for.  Veja a página man do Unix ‘access(2)(1)’ para mais
     informações.

     Esta função pode oferecer suporte a especificação de *note caminhos
     relativos aos descritores de diretório: 1129. e *note não seguir os
     links simbólicos: 112a.

     Se 'effective_ids' for ‘True’, *note access(): 112b. irá realizar
     suas verificações de acesso usando o uid/gid efetivo ao invés do
     uid/gid real.  'effective_ids' pode não ser compatível com sua
     plataforma; você pode verificar se está ou não disponível usando
     *note os.supports_effective_ids: 113d.  Se não estiver disponível,
     usá-lo levantará uma *note NotImplementedError: 228.

          Nota: Usar *note access(): 112b. para verificar se um usuário
          está autorizado a, por exemplo, abrir um arquivo antes de
          realmente fazer isso usando *note open(): 51c. cria uma brecha
          de segurança, porque o usuário pode explorar o curto intervalo
          de tempo entre a verificação e a abertura do arquivo para
          manipulá-lo.  É preferível usar as técnicas *note EAFP: 2d5a.
          Por exemplo:

               if os.access("meuarquivo", os.R_OK):
                   with open("meuarquivo") as fp:
                       return fp.read()
               return "algum dado padrão"

          é melhor escrito como:

               try:
                   fp = open("meuarquivo")
               except PermissionError:
                   return "algum dado padrão"
               else:
                   with fp:
                       return fp.read()

          Nota: As operações de E/S podem falhar mesmo quando *note
          access(): 112b. indica que elas teriam sucesso,
          particularmente para operações em sistemas de arquivos de rede
          que podem ter semântica de permissões além do modelo de bits
          de permissão POSIX usual.

     Alterado na versão 3.3: Adicionados os parâmetros 'dir_fd',
     'effective_ids' e 'follow_symlinks'.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Dado: os.F_OK
 -- Dado: os.R_OK
 -- Dado: os.W_OK
 -- Dado: os.X_OK

     Valores a serem passados como o parâmetro 'mode' de *note access():
     112b. para testar a existência, legibilidade, capacidade de escrita
     e executabilidade de 'path', respectivamente.

 -- Função: os.chdir (path)

     Altera o diretório de trabalho atual para 'path'.

     Esta função pode oferecer suporte a *note especificar um descritor
     de arquivo: b72.  O descritor deve fazer referência a um diretório
     aberto, não a um arquivo aberto.

     Esta função pode levantar *note OSError: 417. e subclasses como
     *note FileNotFoundError: 42b, *note PermissionError: d65. e *note
     NotADirectoryError: 1093.

     Levanta um *note evento de auditoria: 19fa. ‘os.chdir’ com o
     argumento ‘path’.

     Alterado na versão 3.3: Adicionado suporte para especificar 'path'
     como um descritor de arquivo em algumas plataformas.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.chflags (path, flags, *, follow_symlinks=True)

     Define os sinalizadores de 'path' para os 'flags' numéricos.
     'flags' podem assumir uma combinação (OU bit a bit) dos seguintes
     valores (conforme definido no módulo *note stat: d1.):

        * *note stat.UF_NODUMP: 29c2.

        * *note stat.UF_IMMUTABLE: 29c3.

        * *note stat.UF_APPEND: 29c4.

        * *note stat.UF_OPAQUE: 29c5.

        * *note stat.UF_NOUNLINK: 29c6.

        * *note stat.UF_COMPRESSED: 29c7.

        * *note stat.UF_HIDDEN: 29ca.

        * *note stat.SF_ARCHIVED: 29ce.

        * *note stat.SF_IMMUTABLE: 29cf.

        * *note stat.SF_APPEND: 29d0.

        * *note stat.SF_NOUNLINK: 29d2.

        * *note stat.SF_SNAPSHOT: 29d3.

     Esta função pode oferecer suporte a *note não seguir links
     simbólicos: 112a.

     Levanta um *note evento de auditoria: 19fa. ‘os.chflags’ com os
     argumentos ‘path’, ‘flags’.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Alterado na versão 3.3: Adicionado o parâmetro 'follow_symlinks'.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.chmod (path, mode, *, dir_fd=None, follow_symlinks=True)

     Altera o modo de 'path' para o 'mode' numérico.  'mode' pode
     assumir um dos seguintes valores (conforme definido no módulo *note
     stat: d1.) ou combinações de OU bit a bit deles:

        * *note stat.S_ISUID: 29ae.

        * *note stat.S_ISGID: 29af.

        * *note stat.S_ENFMT: 29b1.

        * *note stat.S_ISVTX: 29b2.

        * *note stat.S_IREAD: 29be.

        * *note stat.S_IWRITE: 29bf.

        * *note stat.S_IEXEC: 29c0.

        * *note stat.S_IRWXU: 29b3.

        * *note stat.S_IRUSR: 29b4.

        * *note stat.S_IWUSR: 29b5.

        * *note stat.S_IXUSR: 29b6.

        * *note stat.S_IRWXG: 29b7.

        * *note stat.S_IRGRP: 29b8.

        * *note stat.S_IWGRP: 29b9.

        * *note stat.S_IXGRP: 29b0.

        * *note stat.S_IRWXO: 29ba.

        * *note stat.S_IROTH: 29bb.

        * *note stat.S_IWOTH: 29bc.

        * *note stat.S_IXOTH: 29bd.

     Esta função pode oferecer suporte a *note especificar um descritor
     de arquivo: b72, *note caminhos relativos aos descritores de
     diretório: 1129. e *note não seguir os links simbólicos: 112a.

          Nota: Embora o Windows ofereça suporte ao *note chmod(): 21b,
          você só pode definir o sinalizador de somente leitura do
          arquivo (através das constantes ‘stat.S_IWRITE’ e
          ‘stat.S_IREAD’ ou um valor inteiro correspondente).  Todos os
          outros bits são ignorados.  O valor padrão de
          'follow_symlinks' é ‘False’ no Windows.

          A função é limitada em WASI, veja *note Plataformas
          WebAssembly: 18f5. para mais informações.

     Levanta um *note evento de auditoria: 19fa. ‘os.chmod’ com os
     argumentos ‘path’, ‘mode’, ‘dir_fd’.

     Alterado na versão 3.3: Adicionado suporte para especificar 'path'
     como um descritor de arquivo aberto e os argumentos 'dir_fd' e
     'follow_symlinks'.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

     Alterado na versão 3.13: Adicionado suporte para um descritor de
     arquivo e o argumento 'follow_symlinks' no Windows.

 -- Função: os.chown (path, uid, gid, *, dir_fd=None,
          follow_symlinks=True)

     Altera o proprietário e o id de grupo de 'path' para 'uid' e 'gid'
     numéricos.  Para deixar um dos ids inalterado, defina-o como -1.

     Esta função pode oferecer suporte a *note especificar um descritor
     de arquivo: b72, *note caminhos relativos aos descritores de
     diretório: 1129. e *note não seguir os links simbólicos: 112a.

     Consulte *note shutil.chown(): 240. para uma função de alto nível
     que aceita nomes além de ids numéricos.

     Levanta um *note evento de auditoria: 19fa. ‘os.chown’ com os
     argumentos ‘path’, ‘uid’, ‘gid’, ‘dir_fd’.

     *note Disponibilidade: 1ed8.: Unix.

     A função é limitada em WASI, veja *note Plataformas WebAssembly:
     18f5. para mais informações.

     Alterado na versão 3.3: Adicionado suporte para especificar 'path'
     como um descritor de arquivo aberto e os argumentos 'dir_fd' e
     'follow_symlinks'.

     Alterado na versão 3.6: Oferece suporte para um *note objeto
     caminho ou similar: 2a0.

 -- Função: os.chroot (path)

     Altera o diretório raiz do processo atual para 'path'

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.fchdir (fd)

     Altera o diretório de trabalho atual para o diretório representado
     pelo descritor de arquivo 'fd'.  O descritor deve se referir a um
     diretório aberto, não a um arquivo aberto.  No Python 3.3, isso é
     equivalente a ‘os.chdir(fd)’.

     Levanta um *note evento de auditoria: 19fa. ‘os.chdir’ com o
     argumento ‘path’.

     *note Disponibilidade: 1ed8.: Unix.

 -- Função: os.getcwd ()

     Retorna uma string representando o diretório de trabalho atual.

 -- Função: os.getcwdb ()

     Retorna uma bytestring representando o diretório de trabalho atual.

     Alterado na versão 3.8: A função agora usa a codificação UTF-8 no
     Windows, em vez da página de código ANSI: consulte a PEP 529(2)
     para a justificativa.  A função não está mais descontinuada no
     Windows.

 -- Função: os.lchflags (path, flags)

     Define os sinalizadores de 'path' para os 'flags' numéricos, como
     *note chflags(): 112c, mas não segue links simbólicos.  No Python
     3.3, isso é equivalente a ‘os.chflags(path, flags,
     follow_symlinks=False)’.

     Levanta um *note evento de auditoria: 19fa. ‘os.chflags’ com os
     argumentos ‘path’, ‘flags’.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.lchmod (path, mode)

     Altera o modo de 'path' para o 'mode' numérico.  Se o caminho for
     um link simbólico, isso afetará o link simbólico em vez do destino.
     Veja a documentação de *note chmod(): 21b. para valores possíveis
     de 'mode'.  No Python 3.3, isso é equivalente a ‘os.chmod(path,
     mode, follow_symlinks=False)’.

     ‘lchmod()’ não faz parte do POSIX, mas as implementações Unix podem
     tê-lo se houver suporte para alterar o modo de links simbólicos.

     Levanta um *note evento de auditoria: 19fa. ‘os.chmod’ com os
     argumentos ‘path’, ‘mode’, ‘dir_fd’.

     *note Disponibilidade: 1ed8.: Unix, Windows, not Linux, FreeBSD >=
     1.3, NetBSD >= 1.3, not OpenBSD

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

     Alterado na versão 3.13: Adicionado suporte no Windows.

 -- Função: os.lchown (path, uid, gid)

     Altera o proprietário e o id de grupo de 'path' para 'uid' e 'gid'
     numéricos.  Esta função não seguirá links simbólicos.  No Python
     3.3, isso é equivalente a ‘os.chown(path, uid, gid,
     follow_symlinks=False)’.

     Levanta um *note evento de auditoria: 19fa. ‘os.chown’ com os
     argumentos ‘path’, ‘uid’, ‘gid’, ‘dir_fd’.

     *note Disponibilidade: 1ed8.: Unix.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.link (src, dst, *, src_dir_fd=None, dst_dir_fd=None,
          follow_symlinks=True)

     Cria um link físico apontando para 'src' chamado 'dst'.

     Esta função pode permitir a especificação de 'src_dir_fd' e/ou
     'dst_dir_fd' para fornecer *note caminhos relativos a descritores
     de diretório: 1129. e *note não seguir links simbólicos: 112a.

     Levanta um *note evento de auditoria: 19fa. ‘os.link’ com os
     argumentos ‘src’, ‘dst’, ‘src_dir_fd’, ‘dst_dir_fd’.

     *note Disponibilidade: 1ed8.: Unix, Windows.

     Alterado na versão 3.2: Adicionado suporte ao Windows.

     Alterado na versão 3.3: Adicionados os parâmetros 'src_dir_fd',
     'dst_dir_fd' e 'follow_symlinks'.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0. para 'src' e 'dst'.

 -- Função: os.listdir (path='.')

     Retorna uma lista contendo os nomes das entradas no diretório
     fornecido por 'path'.  A lista está em ordem arbitrária e não
     inclui as entradas especiais ‘'.'’ e ‘'..'’ mesmo se estiverem
     presentes no diretório.  Se um arquivo for removido ou adicionado
     ao diretório durante a chamada desta função, não é especificado se
     um nome para esse arquivo deve ser incluído.

     'path' pode ser um *note objeto caminho ou similar: 2a0.  Se 'path'
     for do tipo ‘bytes’ (direta ou indiretamente por meio da interface
     *note PathLike: c6c.), os nomes de arquivo retornados também serão
     do tipo ‘bytes’; em todas as outras circunstâncias, eles serão do
     tipo ‘str’.

     Esta função também pode ter suporte a *note especificar um
     descritor de arquivo: b72.; o descritor de arquivo deve fazer
     referência a um diretório.

     Levanta um *note evento de auditoria: 19fa. ‘os.listdir’ com o
     argumento ‘path’.

          Nota: Para codificar nomes de arquivos ‘str’ para ‘bytes’, use
          *note fsencode(): c70.

     Ver também
     ..........

     A função *note scandir(): a68. retorna entradas de diretório junto
     com informações de atributo de arquivo, dando melhor desempenho
     para muitos casos de uso comuns.

     Alterado na versão 3.2: O parâmetro 'path' tornou-se opcional.

     Alterado na versão 3.3: Adicionado suporte para especificar 'path'
     como um descritor de arquivo aberto.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.listdrives ()

     Retorna uma lista contendo os nomes das unidades em um sistema
     Windows.

     Um nome de unidade geralmente se parece com ‘'C:\\'’.  Nem todo
     nome de unidade estará associado a um volume e alguns podem estar
     inacessíveis por vários motivos, incluindo permissões,
     conectividade de rede ou mídia ausente.  Esta função não testa o
     acesso.

     Pode levantar *note OSError: 417. se ocorrer um erro ao coletar os
     nomes das unidades.

     Levanta um *note evento de auditoria: 19fa. ‘os.listdrives’ sem
     argumentos.

     *note Disponibilidade: 1ed8.: Windows

     Adicionado na versão 3.12.

 -- Função: os.listmounts (volume)

     Retorna uma lista contendo os pontos de montagem para um volume em
     um sistema Windows.

     'volume' deve ser representado como um caminho GUID, como aqueles
     retornados por *note os.listvolumes(): 49e.  Os volumes podem ser
     montados em vários locais ou não.  No último caso, a lista estará
     vazia.  Os pontos de montagem que não estão associados a um volume
     não serão retornados por esta função.

     Os pontos de montagem retornados por esta função serão caminhos
     absolutos e podem ser mais longos que o nome da unidade.

     Levanta *note OSError: 417. se o volume não for reconhecido ou se
     ocorrer um erro ao coletar os caminhos.

     Levanta um *note evento de auditoria: 19fa. ‘os.listmounts’ com o
     argumento ‘volume’.

     *note Disponibilidade: 1ed8.: Windows

     Adicionado na versão 3.12.

 -- Função: os.listvolumes ()

     Retorna uma lista contendo os volumes no sistema.

     Volumes são normalmente representados como um caminho GUID que se
     parece com ‘\\?\Volume{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}\’.  Os
     arquivos geralmente podem ser acessados por meio de um caminho
     GUID, permitindo permissões.  No entanto, os usuários geralmente
     não estão familiarizados com eles e, portanto, o uso recomendado
     desta função é recuperar pontos de montagem usando *note
     os.listmounts(): 49f.

     Pode levantar *note OSError: 417. se ocorrer um erro ao coletar os
     volumes.

     Levanta um *note evento de auditoria: 19fa. ‘os.listvolumes’ sem
     argumentos.

     *note Disponibilidade: 1ed8.: Windows

     Adicionado na versão 3.12.

 -- Função: os.lstat (path, *, dir_fd=None)

     Executa o equivalente a uma chamada de sistema ‘lstat()’ no caminho
     fornecido.  Semelhante a *note stat(): 4a0, mas não segue links
     simbólicos.  Retorna um objeto *note stat_result: 1509.

     Em plataformas que não têm suporte a links simbólicos, este é um
     apelido para *note stat(): 4a0.

     No Python 3.3, isso é equivalente a ‘os.stat(path, dir_fd=dir_fd,
     follow_symlinks=False)’.

     Esta função também pode ter suporte a *note caminhos relativos a
     descritores de diretório: 1129.

     Ver também
     ..........

     A função *note stat(): 4a0.

     Alterado na versão 3.2: Adicionado suporte para links simbólicos do
     Windows 6.0 (Vista).

     Alterado na versão 3.3: Adicionado o parâmetro 'dir_fd'.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

     Alterado na versão 3.8: No Windows, agora abre pontos de nova
     análise que representam outro caminho (substitutos de nome),
     incluindo links simbólicos e junções de diretório.  Outros tipos de
     pontos de nova análise são resolvidos pelo sistema operacional como
     para *note stat(): 4a0.

 -- Função: os.mkdir (path, mode=0o777, *, dir_fd=None)

     Cria um diretório chamado 'path' com o modo numérico 'mode'.

     Se o diretório já existe, uma exceção *note FileExistsError: 1056.
     é levantada.  Se um diretório pai no caminho não existir, uma
     exceção *note FileNotFoundError: 42b. será levantada.  Em alguns
     sistemas, 'mode' é ignorado.  Onde ele é usado, o valor atual do
     umask é primeiro mascarado.  Se bits diferentes dos últimos 9 (ou
     seja, os últimos 3 dígitos da representação octal do 'mode') são
     definidos, seu significado depende da plataforma.  Em algumas
     plataformas, eles são ignorados e você deve chamar *note chmod():
     21b. explicitamente para defini-los.

     No Windows, um modo 'mode' de ‘0o700’ é tratado especificamente
     para aplicar controle de acesso ao novo diretório de forma que
     apenas o usuário atual e os administradores tenham acesso.  Outros
     valores de 'mode' são ignorados.

     Esta função também pode ter suporte a *note caminhos relativos a
     descritores de diretório: 1129.

     Também é possível criar diretórios temporários; veja a função *note
     tempfile.mkdtemp(): 21f. do módulo *note tempfile: e0.

     Levanta um *note evento de auditoria: 19fa. ‘os.mkdir’ com os
     argumentos ‘path’, ‘mode’, ‘dir_fd’.

     Alterado na versão 3.3: Adicionado o parâmetro 'dir_fd'.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

     Alterado na versão 3.13: O Windows agora lida com um 'mode' de
     ‘0o700’.

 -- Função: os.makedirs (name, mode=0o777, exist_ok=False)

     Função de criação recursiva de diretório.  Como *note mkdir(): 21d,
     mas cria todos os diretórios de nível intermediário necessários
     para conter o diretório folha.

     O parâmetro 'mode' é passado para *note mkdir(): 21d. para criar o
     diretório folha; veja *note a descrição do mkdir(): 2d5d. para como
     é interpretado.  Para definir os bits de permissão de arquivo de
     qualquer diretório pai recém-criado, você pode definir o umask
     antes de invocar *note makedirs(): 21e.  Os bits de permissão de
     arquivo dos diretórios pais existentes não são alterados.

     Se 'exist_ok' for ‘False’ (o padrão), uma *note FileExistsError:
     1056. é levantada se o diretório alvo já existir.

          Nota: *note makedirs(): 21e. ficará confuso se os elementos do
          caminho a serem criados incluírem *note pardir: 2d5e. (por
          exemplo, “..” em sistemas UNIX).

     Esta função trata os caminhos UNC corretamente.

     Levanta um *note evento de auditoria: 19fa. ‘os.mkdir’ com os
     argumentos ‘path’, ‘mode’, ‘dir_fd’.

     Alterado na versão 3.2: Adicionado o parâmetro 'exist_ok'.

     Alterado na versão 3.4.1: Antes do Python 3.4.1, se 'exist_ok'
     fosse ‘True’ e o diretório existisse, *note makedirs(): 21e. ainda
     levantaria um erro se 'mode' não correspondesse ao modo do
     diretório existente.  Como esse comportamento era impossível de
     implementar com segurança, ele foi removido no Python 3.4.1.
     Consulte bpo-21082(3).

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

     Alterado na versão 3.7: O argumento 'mode' não afeta mais os bits
     de permissão de arquivo de diretórios de nível intermediário
     recém-criados.

 -- Função: os.mkfifo (path, mode=0o666, *, dir_fd=None)

     Cria um FIFO (um encadeamento nomeado) chamado 'path' com o modo
     numérico 'mode'.  O valor atual de umask é primeiro mascarado do
     modo.

     Esta função também pode ter suporte a *note caminhos relativos a
     descritores de diretório: 1129.

     FIFOs são canais que podem ser acessados como arquivos regulares.
     FIFOs existem até que sejam excluídos (por exemplo, com *note
     os.unlink(): 1134.).  Geralmente, os FIFOs são usados como ponto de
     encontro entre os processos do tipo “cliente” e “servidor”: o
     servidor abre o FIFO para leitura e o cliente para escrita.
     Observe que *note mkfifo(): db8. não abre o FIFO – apenas cria o
     ponto de encontro.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Alterado na versão 3.3: Adicionado o parâmetro 'dir_fd'.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.mknod (path, mode=0o600, device=0, *, dir_fd=None)

     Cria um nó de sistema de arquivos (arquivo, arquivo especial de
     dispositivo ou canal nomeado) chamado 'path'.  'mode' especifica as
     permissões de uso e o tipo de nó a ser criado, sendo combinado (OU
     bit a bit) com um de ‘stat.S_IFREG’, ‘stat.S_IFCHR’, ‘stat.S_IFBLK’
     , e ‘stat.S_IFIFO’ (essas constantes estão disponíveis em *note
     stat: d1.).  Para ‘stat.S_IFCHR’ e ‘stat.S_IFBLK’, 'device' define
     o arquivo especial do dispositivo recém-criado (provavelmente
     usando *note os.makedev(): 1706.), caso contrário, ele será
     ignorado.

     Esta função também pode ter suporte a *note caminhos relativos a
     descritores de diretório: 1129.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Alterado na versão 3.3: Adicionado o parâmetro 'dir_fd'.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.major (device, /)

     Extrai o número principal de dispositivo de um número bruto de
     dispositivo (normalmente o campo ‘st_dev’ ou ‘st_rdev’ de ‘stat’).

 -- Função: os.minor (device, /)

     Extrai o número menor de dispositivo de um número bruto de
     dispositivo (normalmente o campo ‘st_dev’ ou ‘st_rdev’ de ‘stat’).

 -- Função: os.makedev (major, minor, /)

     Compõe um número de dispositivo bruto a partir dos números de
     dispositivo principais e secundários.

 -- Função: os.pathconf (path, name)

     Retorna informações de configuração do sistema relevantes para um
     arquivo nomeado.  'name' especifica o valor de configuração a ser
     recuperado; pode ser uma string que é o nome de um valor de sistema
     definido; esses nomes são especificados em vários padrões (POSIX.1,
     Unix 95, Unix 98 e outros).  Algumas plataformas também definem
     nomes adicionais.  Os nomes conhecidos do sistema operacional do
     host são fornecidos no dicionário ‘pathconf_names’.  Para variáveis
     de configuração não incluídas nesse mapeamento, passar um número
     inteiro para 'name' também é aceito.

     Se 'name' for uma string e não for conhecida, uma exceção *note
     ValueError: 202. é levantada.  Se um valor específico para 'name'
     não for compatível com o sistema hospedeiro, mesmo que seja
     incluído no ‘pathconf_names’, uma exceção *note OSError: 417. é
     levantada com *note errno.EINVAL: 1b66. como número do erro.

     Esta função tem suporte a *note especificar um descritor de
     arquivo: b72.

     *note Disponibilidade: 1ed8.: Unix.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Dado: os.pathconf_names

     Nomes de mapeamento de dicionário aceitos por *note pathconf():
     113a. e *note fpathconf(): 2d1c. para os valores inteiros definidos
     para esses nomes pelo sistema operacional do host.  Isso pode ser
     usado para determinar o conjunto de nomes conhecidos pelo sistema.

     *note Disponibilidade: 1ed8.: Unix.

 -- Função: os.readlink (path, *, dir_fd=None)

     Retorna uma string representando o caminho para o qual o link
     simbólico aponta.  O resultado pode ser um nome de caminho absoluto
     ou relativo; se for relativo, pode ser convertido para um caminho
     absoluto usando ‘os.path.join(os.path.dirname(path), result)’.

     Se o 'path' for um objeto string (direta ou indiretamente por meio
     de uma interface *note PathLike: c6c.), o resultado também será um
     objeto string e a chamada pode levantar um UnicodeDecodeError.  Se
     o 'path' for um objeto de bytes (direto ou indireto), o resultado
     será um objeto de bytes.

     Esta função também pode ter suporte a *note caminhos relativos a
     descritores de diretório: 1129.

     Ao tentar resolver um caminho que pode conter links, use *note
     realpath(): 225. para lidar corretamente com a recursão e as
     diferenças de plataforma.

     *note Disponibilidade: 1ed8.: Unix, Windows.

     Alterado na versão 3.2: Adicionado suporte para links simbólicos do
     Windows 6.0 (Vista).

     Alterado na versão 3.3: Adicionado o parâmetro 'dir_fd'.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0. no Unix.

     Alterado na versão 3.8: Aceita um *note objeto caminho ou similar:
     2a0. e um objeto bytes no Windows.

     Adicionado suporte para junções de diretório e alterado para
     retornar o caminho de substituição (que normalmente inclui o
     prefixo ‘\\?\’) ao invés do campo opcional “print name” que era
     retornado anteriormente.

 -- Função: os.remove (path, *, dir_fd=None)

     Remove (exclui) o arquivo 'path'.  Se 'path' for um diretório, uma
     *note OSError: 417. é levantada.  Use *note rmdir(): 1132. para
     remover diretórios.  Se o arquivo não existir, uma *note
     FileNotFoundError: 42b. é levantada.

     Esta função tem suporte a *note caminhos relativos para descritores
     de diretório: 1129.

     No Windows, a tentativa de remover um arquivo que está em uso causa
     o surgimento de uma exceção; no Unix, a entrada do diretório é
     removida, mas o armazenamento alocado para o arquivo não é
     disponibilizado até que o arquivo original não esteja mais em uso.

     Esta função é semanticamente idêntica a *note unlink(): 1134.

     Levanta um *note evento de auditoria: 19fa. ‘os.remove’ com os
     argumentos ‘path’, ‘dir_fd’.

     Alterado na versão 3.3: Adicionado o parâmetro 'dir_fd'.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.removedirs (name)

     Remove os diretórios recursivamente.  Funciona como *note rmdir():
     1132, exceto que, se o diretório folha for removido com sucesso,
     *note removedirs(): 2d60. tenta remover sucessivamente todos os
     diretórios pai mencionados em 'path' até que um erro seja levantado
     (que é ignorado, porque geralmente significa que um diretório pai
     não está vazio).  Por exemplo, ‘os.removedirs('foo/bar/baz')’
     primeiro removerá o diretório ‘'foo/bar/baz'’, e então removerá
     ‘'foo/bar'’ e ‘'foo'’ se estiverem vazios.  Levanta *note OSError:
     417. se o diretório folha não pôde ser removido com sucesso.

     Levanta um *note evento de auditoria: 19fa. ‘os.remove’ com os
     argumentos ‘path’, ‘dir_fd’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.rename (src, dst, *, src_dir_fd=None, dst_dir_fd=None)

     Renomeia o arquivo ou diretório 'src' para 'dst'.  Se 'dst'
     existir, a operação falhará com uma subclasse de *note OSError:
     417. em vários casos:

     No Windows, se 'dst' existe então uma exceção *note
     FileExistsError: 1056. será levantada.  A operação pode falar se
     'src' e 'dst' são de sistemas de arquivos diferentes.  Use *note
     shutil.move(): e82. para mover arquivos entre sistemas de arquivos
     diferentes.

     No Unix, se 'src' é um arquivo e 'dst' é um diretório ou
     vice-versa, uma *note IsADirectoryError: 1092. ou uma *note
     NotADirectoryError: 1093. será levantada respectivamente.  Se ambos
     forem diretórios e 'dst' estiver vazio, 'dst' será substituído
     silenciosamente.  Se 'dst' for um diretório não vazio, uma *note
     OSError: 417. é levantada.  Se ambos forem arquivos, 'dst' será
     substituído silenciosamente se o usuário tiver permissão.  A
     operação pode falhar em alguns tipos de Unix se 'src' e 'dst'
     estiverem em sistemas de arquivos diferentes.  Se for bem-sucedido,
     a renomeação será uma operação atômica (este é um requisito POSIX).

     Esta função permite especificar 'src_dir_fd' e/ou 'dst_dir_fd' para
     fornecer *note caminhos relativos a descritores de diretório: 1129.

     Se você quiser sobrescrita multiplataforma do destino, use *note
     replace(): 1131.

     Levanta um *note evento de auditoria: 19fa. ‘os.rename’ com os
     argumentos ‘src’, ‘dst’, ‘src_dir_fd’, ‘dst_dir_fd’.

     Alterado na versão 3.3: Adicionados os parâmetros 'src_dir_fd' e
     'dst_dir_fd'.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0. para 'src' e 'dst'.

 -- Função: os.renames (old, new)

     Função de renomeação de arquivo ou diretório recursiva.  Funciona
     como *note rename(): 1130, exceto que a criação de qualquer
     diretório intermediário necessário para tornar o novo nome de
     caminho possível é tentada primeiro.  Após a renomeação, os
     diretórios correspondentes aos segmentos de caminho mais à direita
     do nome antigo serão removidos usando *note removedirs(): 2d60.

          Nota: Esta função pode falhar com a nova estrutura de
          diretório criada se você não tiver as permissões necessárias
          para remover o arquivo ou diretório folha.

     Levanta um *note evento de auditoria: 19fa. ‘os.rename’ com os
     argumentos ‘src’, ‘dst’, ‘src_dir_fd’, ‘dst_dir_fd’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0. para 'old' e 'new'.

 -- Função: os.replace (src, dst, *, src_dir_fd=None, dst_dir_fd=None)

     Renomeia o arquivo ou diretório 'src' para 'dst'.  Se 'dst' for um
     diretório não vazio, *note OSError: 417. será levantada.  Se 'dst'
     existir e for um arquivo, ele será substituído silenciosamente se o
     usuário tiver permissão.  A operação pode falhar se 'src' e 'dst'
     estiverem em sistemas de arquivos diferentes.  Se for bem-sucedido,
     a renomeação será uma operação atômica (este é um requisito POSIX).

     Esta função permite especificar 'src_dir_fd' e/ou 'dst_dir_fd' para
     fornecer *note caminhos relativos a descritores de diretório: 1129.

     Levanta um *note evento de auditoria: 19fa. ‘os.rename’ com os
     argumentos ‘src’, ‘dst’, ‘src_dir_fd’, ‘dst_dir_fd’.

     Adicionado na versão 3.3.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0. para 'src' e 'dst'.

 -- Função: os.rmdir (path, *, dir_fd=None)

     Remove (exclui) o diretório 'path'.  Se o diretório não existe ou
     não está vazio, uma *note FileNotFoundError: 42b. ou uma *note
     OSError: 417. é levantada respectivamente.  Para remover árvores de
     diretório inteiras, pode ser usada *note shutil.rmtree(): 301.

     Esta função tem suporte a *note caminhos relativos para descritores
     de diretório: 1129.

     Levanta um *note evento de auditoria: 19fa. ‘os.rmdir’ com os
     argumentos ‘path’, ‘dir_fd’.

     Alterado na versão 3.3: Adicionado o parâmetro 'dir_fd'.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.scandir (path='.')

     Retorna um iterador de objetos *note os.DirEntry: 49b.
     correspondentes às entradas no diretório fornecido por 'path'.  As
     entradas são produzidas em ordem arbitrária, e as entradas
     especiais ‘'.'’ e ‘'..'’ não são incluídas.  Se um arquivo for
     removido ou adicionado ao diretório após a criação do iterador, não
     é especificado se uma entrada para esse arquivo deve ser incluída.

     Usar *note scandir(): a68. em vez de *note listdir(): 1139. pode
     aumentar significativamente o desempenho do código que também
     precisa de tipo de arquivo ou informações de atributo de arquivo,
     porque os objetos *note os.DirEntry: 49b. expõem essas informações
     se o sistema operacional fornecer ao percorrer um diretório.  Todos
     os métodos de *note os.DirEntry: 49b. podem realizar uma chamada de
     sistema, mas *note is_dir(): 2d62. e *note is_file(): dac.
     normalmente requerem apenas uma chamada de sistema para links
     simbólicos; *note os.DirEntry.stat(): 17ed. sempre requer uma
     chamada de sistema no Unix, mas requer uma apenas para links
     simbólicos no Windows.

     'path' pode ser um *note objeto caminho ou similar: 2a0.  Se 'path'
     for do tipo ‘bytes’ (direta ou indiretamente por meio da interface
     *note PathLike: c6c.), o tipo dos atributos *note name: 2d63. e
     *note path: 1772. de cada *note os.DirEntry: 49b. serão ‘bytes’; em
     todas as outras circunstâncias, eles serão do tipo ‘str’.

     Esta função também pode ter suporte a *note especificar um
     descritor de arquivo: b72.; o descritor de arquivo deve fazer
     referência a um diretório.

     Levanta um *note evento de auditoria: 19fa. ‘os.scandir’ com o
     argumento ‘path’.

     O iterador *note scandir(): a68. implementa o protocolo *note
     gerenciador de contexto: 5d4. e tem o seguinte método:

      -- Método: scandir.close ()

          Fecha o iterador e libera os recursos alocados.

          Isso é chamado automaticamente quando o iterador se esgota ou
          é coletado como lixo, ou quando ocorre um erro durante a
          iteração.  No entanto, é aconselhável chamá-lo explicitamente
          ou usar a instrução *note with: 5d2.

          Adicionado na versão 3.6.

     O exemplo a seguir mostra um uso simples de *note scandir(): a68.
     para exibir todos os arquivos (excluindo diretórios) no 'path'
     fornecido que não começa com ‘'.'’.  A chamada ‘entrada.is_file()’
     geralmente não fará uma chamada de sistema adicional:

          with os.scandir(caminho) as coisa:
              for entrada in coisa:
                  if not entrada.name.startswith('.') and entrada.is_file():
                      print(entrada.name)

          Nota: Em sistemas baseados no Unix, *note scandir(): a68. usa
          o sistema opendir()(4) e as funções readdir()(5).  No Windows,
          ela usa os funções FindFirstFileW(6) e FindNextFileW(7) do
          Win32.

     Adicionado na versão 3.5.

     Alterado na versão 3.6: Adicionado suporte para o protocolo de
     *note gerenciador de contexto: 5d4. e o método *note close(): cdc.
     Se um iterador *note scandir(): a68. não estiver esgotado nem
     explicitamente fechado, uma *note ResourceWarning: 244. será
     emitida em seu destrutor.

     A função aceita um *note objeto caminho ou similar: 2a0.

     Alterado na versão 3.7: Adicionado suporte para *note descritores
     de arquivo: b72. no Unix.

 -- Classe: os.DirEntry

     Objeto produzido por *note scandir(): a68. para expor o caminho do
     arquivo e outros atributos de arquivo de uma entrada de diretório.

     *note scandir(): a68. fornecerá o máximo possível dessas
     informações sem fazer chamadas de sistema adicionais.  Quando uma
     chamada de sistema ‘stat()’ ou ‘lstat()’ é feita, o objeto
     ‘os.DirEntry’ irá armazenar o resultado em cache.

     As instâncias de ‘os.DirEntry’ não devem ser armazenadas em
     estruturas de dados de longa duração; se você sabe que os metadados
     do arquivo foram alterados ou se passou muito tempo desde a chamada
     de *note scandir(): a68, chame ‘os.stat(entry.path)’ para obter
     informações atualizadas.

     Como os métodos ‘os.DirEntry’ podem fazer chamadas ao sistema
     operacional, eles também podem levantar *note OSError: 417.  Se
     você precisa de um controle muito refinado sobre os erros, você
     pode pegar *note OSError: 417. ao chamar um dos métodos
     ‘os.DirEntry’ e manipular conforme apropriado.

     Para ser diretamente utilizável como um *note objeto caminho ou
     similar: 2a0, ‘os.DirEntry’ implementa a interface *note PathLike:
     c6c.

     Atributos e métodos em uma instância de ‘os.DirEntry’ são os
     seguintes:

      -- Atributo: name

          O nome do arquivo base da entrada, relativo ao argumento
          'path' de *note scandir(): a68.

          O atributo *note name: 2ce3. será ‘bytes’ se o argumento
          'path' de *note scandir(): a68. for do tipo ‘bytes’ e, caso
          contrário, ‘str’.  Usa *note fsdecode(): c6f. para decodificar
          nomes de arquivos de bytes.

      -- Atributo: path

          O nome do caminho completo da entrada: equivalente a
          ‘os.path.join(scandir_path, entry.name)’ onde 'scandir_path' é
          o argumento 'path' de *note scandir(): a68.  O caminho só é
          absoluto se o argumento 'path' de *note scandir(): a68. for
          absoluto.  Se o argumento 'path' de *note scandir(): a68. era
          um *note descritor de arquivo: b72, o atributo *note path: a2.
          é o mesmo que o atributo *note name: 2ce3.

          O atributo *note path: a2. será ‘bytes’ se o argumento 'path'
          de *note scandir(): a68. for do tipo ‘bytes’ e, caso
          contrário, ‘str’.  Usa *note fsdecode(): c6f. para decodificar
          nomes de arquivos de bytes.

      -- Método: inode ()

          Retorna o número de nó-i da entrada.

          O resultado é armazenado em cache no objeto ‘os.DirEntry’.
          Use ‘os.stat(entry.path, follow_symlinks=False).st_ino’ para
          obter informações atualizadas.

          Na primeira chamada sem cache, uma chamada de sistema é
          necessária no Windows, mas não no Unix.

      -- Método: is_dir (*, follow_symlinks=True)

          Retorna ‘True’ se esta entrada for um diretório ou um link
          simbólico apontando para um diretório; retorna ‘False’ se a
          entrada é ou aponta para qualquer outro tipo de arquivo, ou se
          ele não existe mais.

          Se 'follow_symlinks' for ‘False’, retorna ‘True’ apenas se
          esta entrada for um diretório (sem seguir os links
          simbólicos); retorna ‘False’ se a entrada for qualquer outro
          tipo de arquivo ou se ele não existe mais.

          O resultado é armazenado em cache no objeto ‘os.DirEntry’, com
          um cache separado para 'follow_symlinks' ‘True’ e ‘False’.
          Chama *note os.stat(): 4a0. junto com *note stat.S_ISDIR():
          2995. para buscar informações atualizadas.

          Na primeira chamada sem cache, nenhuma chamada do sistema é
          necessária na maioria dos casos.  Especificamente, para links
          não simbólicos, nem o Windows nem o Unix requerem uma chamada
          de sistema, exceto em certos sistemas de arquivos Unix, como
          sistemas de arquivos de rede, que retornam ‘dirent.d_type ==
          DT_UNKNOWN’.  Se a entrada for um link simbólico, uma chamada
          de sistema será necessária para seguir o link simbólico, a
          menos que 'follow_symlinks' seja ‘False’.

          Este método pode levantar *note OSError: 417, tal como *note
          PermissionError: d65, mas *note FileNotFoundError: 42b. é
          capturada e não levantada.

      -- Método: is_file (*, follow_symlinks=True)

          Retorna ‘True’ se esta entrada for um arquivo ou um link
          simbólico apontando para um arquivo; retorna ‘False’ se a
          entrada é ou aponta para um diretório ou outra entrada que não
          seja de arquivo, ou se ela não existe mais.

          Se 'follow_symlinks' for ‘False’, retorna ‘True’ apenas se
          esta entrada for um arquivo (sem seguir os links simbólicos);
          retorna ‘False’ se a entrada for um diretório ou outra entrada
          que não seja um arquivo, ou se ela não existir mais.

          O resultado é armazenado em cache no objeto ‘os.DirEntry’.
          Chamadas de sistema em cache feitas e exceções levantadas são
          conforme *note is_dir(): 2d62.

      -- Método: is_symlink ()

          Retorna ‘True’ se esta entrada for um link simbólico (mesmo se
          quebrado); retorna ‘False’ se a entrada apontar para um
          diretório ou qualquer tipo de arquivo, ou se ele não existir
          mais.

          O resultado é armazenado em cache no objeto ‘os.DirEntry’.
          Chama *note os.path.islink(): a16. para buscar informações
          atualizadas.

          Na primeira chamada sem cache, nenhuma chamada do sistema é
          necessária na maioria dos casos.  Especificamente, nem o
          Windows nem o Unix exigem uma chamada de sistema, exceto em
          certos sistemas de arquivos Unix, como sistemas de arquivos de
          rede, que retornam ‘dirent.d_type == DT_UNKNOWN’.

          Este método pode levantar *note OSError: 417, tal como *note
          PermissionError: d65, mas *note FileNotFoundError: 42b. é
          capturada e não levantada.

      -- Método: is_junction ()

          Retorna ‘True’ se esta entrada for uma junção (mesmo se
          quebrado); retorna ‘False’ se a entrada apontar para um
          diretório regular, ou qualquer tipo de arquivo, um link
          simbólico ou se ele não existir mais.

          O resultado é armazenado em cache no objeto ‘os.DirEntry’.
          Chama *note os.path.isjunction(): 4a3. para buscar informações
          atualizadas.

          Adicionado na versão 3.12.

      -- Método: stat (*, follow_symlinks=True)

          Retorna um objeto *note stat_result: 1509. para esta entrada.
          Este método segue links simbólicos por padrão; para
          estabelecer um link simbólico, adicione o argumento
          ‘follow_symlinks=False’.

          No Unix, esse método sempre requer uma chamada de sistema.  No
          Windows, ele só requer uma chamada de sistema se
          'follow_symlinks' for ‘True’ e a entrada for um ponto de nova
          análise (por exemplo, um link simbólico ou junção de
          diretório).

          No Windows, os atributos ‘st_ino’, ‘st_dev’ e ‘st_nlink’ da
          *note stat_result: 1509. são sempre definidos como zero.
          Chame *note os.stat(): 4a0. para obter esses atributos.

          O resultado é armazenado em cache no objeto ‘os.DirEntry’, com
          um cache separado para 'follow_symlinks' ‘True’ e ‘False’.
          Chame *note os.stat(): 4a0. para buscar informações
          atualizadas.

     Note que há uma boa correspondência entre vários atributos e
     métodos de ‘os.DirEntry’ e de *note pathlib.Path: 229.  Em
     particular, o atributo ‘name’ tem o mesmo significado, assim como
     os métodos ‘is_dir()’, ‘is_file()’, ‘is_symlink()’, ‘is_junction()’
     e ‘stat()’.

     Adicionado na versão 3.5.

     Alterado na versão 3.6: Adicionado suporte para a interface *note
     PathLike: c6c.  Adicionado suporte para caminhos *note bytes: 1c2.
     no Windows.

     Alterado na versão 3.12: O atributo ‘st_ctime’ do resultado de stat
     foi descontinuado no Windows.  A hora de criação do arquivo está
     devidamente disponível como ‘st_birthtime’, e no futuro ‘st_ctime’
     pode ser alterada para retornar zero ou a hora de alteração dos
     metadados, se disponível.

 -- Função: os.stat (path, *, dir_fd=None, follow_symlinks=True)

     Obtém o status de um arquivo ou um descritor de arquivo.  Executa o
     equivalente a uma chamada de sistema ‘stat()’ no caminho fornecido.
     'path' pode ser especificado como uma string ou bytes – direta ou
     indiretamente através da interface *note PathLike: c6c. – ou como
     um descritor de arquivo aberto.  Retorna um objeto *note
     stat_result: 1509.

     Esta função normalmente segue links simbólicos; para obter o status
     do link simbólico, adicione o argumento ‘follow_symlinks=False’, ou
     use *note lstat(): 4a1.

     Esta função tem suporte a *note especificar um descritor de
     arquivo: b72. e *note não seguir links simbólicos: 112a.

     No Windows, ao definir ‘follow_symlinks=False’ é desativado o
     recurso de seguir todos os pontos de nova análise, que incluem
     links simbólicos e junções de diretório.  Outros tipos de pontos de
     nova análise que não se parecem com links ou que o sistema
     operacional não pode seguir serão abertos diretamente.  Ao seguir
     uma cadeia de vários links, isso pode resultar no retorno do link
     original em vez do não-link que impediu o percurso completo.  Para
     obter resultados de 'stat' para o caminho final neste caso, use a
     função *note os.path.realpath(): 225. para resolver o nome do
     caminho tanto quanto possível e chame *note lstat(): 4a1. no
     resultado.  Isso não se aplica a links simbólicos pendentes ou
     pontos de junção, que levantam as exceções usuais.

     Exemplo:

          >>> import os
          >>> statinfo = os.stat('algumarquivo.txt')
          >>> statinfo
          os.stat_result(st_mode=33188, st_ino=7876932, st_dev=234881026,
          st_nlink=1, st_uid=501, st_gid=501, st_size=264, st_atime=1297230295,
          st_mtime=1297230027, st_ctime=1297230027)
          >>> statinfo.st_size
          264

     Ver também
     ..........

     As funções *note fstat(): db4. e *note lstat(): 4a1.

     Alterado na versão 3.3: Adicionados os parâmetros 'dir_fd' e
     'follow_symlinks', especificando um descritor de arquivo em vez de
     um caminho.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

     Alterado na versão 3.8: No Windows, todos os pontos de nova análise
     que podem ser resolvidos pelo sistema operacional agora são
     seguidos, e passar ‘follow_symlinks=False’ desativa seguir todos os
     pontos de nova análise substitutos de nome.  Se o sistema
     operacional atingir um ponto de nova análise que não é capaz de
     seguir, 'stat' agora retorna as informações do caminho original
     como se ‘follow_symlinks=False’ tivesse sido especificado em vez de
     levantar um erro.

 -- Classe: os.stat_result

     Objeto cujos atributos correspondem aproximadamente aos membros da
     estrutura ‘stat’.  É usado para o resultado de *note os.stat():
     4a0, *note os.fstat(): db4. e *note os.lstat(): 4a1.

     Atributos:

      -- Atributo: st_mode

          Modo de arquivo: tipo de arquivo e bits de modo de arquivo
          (permissões).

      -- Atributo: st_ino

          Dependente da plataforma, mas se diferente de zero, identifica
          exclusivamente o arquivo para um determinado valor de
          ‘st_dev’.  Tipicamente:

             * o número do nó-i no Unix,

             * o índice de arquivo(8) no Windows

      -- Atributo: st_dev

          Identificador do dispositivo no qual este arquivo reside.

      -- Atributo: st_nlink

          Número de links físicos.

      -- Atributo: st_uid

          Identificador de usuário do proprietário do arquivo.

      -- Atributo: st_gid

          Identificador de grupo do proprietário do arquivo.

      -- Atributo: st_size

          Tamanho do arquivo em bytes, se for um arquivo normal ou um
          link simbólico.  O tamanho de um link simbólico é o
          comprimento do nome do caminho que ele contém, sem um byte
          nulo final.

     Registros de data e hora:

      -- Atributo: st_atime

          Hora do acesso mais recente expressa em segundos.

      -- Atributo: st_mtime

          Hora da modificação de conteúdo mais recente expressa em
          segundos.

      -- Atributo: st_ctime

          Hora da alteração de metadados mais recente expressa em
          segundos.

          Alterado na versão 3.12: ‘st_ctime’ foi descontinuado no
          Windows.  Use ‘st_birthtime’ para o tempo de criação do
          arquivo.  No futuro, ‘st_ctime’ conterá a hora da alteração de
          metadados mais recente, como em outras plataformas.

      -- Atributo: st_atime_ns

          Hora do acesso mais recente expresso em nanossegundos como um
          número inteiro.

          Adicionado na versão 3.3.

      -- Atributo: st_mtime_ns

          Hora da modificação de conteúdo mais recente expressa em
          nanossegundos como um número inteiro.

          Adicionado na versão 3.3.

      -- Atributo: st_ctime_ns

          Hora do alteração de metadados mais recente expresso em
          nanossegundos como um número inteiro.

          Adicionado na versão 3.3.

          Alterado na versão 3.12: ‘st_ctime_ns’ foi descontinuado no
          Windows.  Use ‘st_birthtime_ns’ para o tempo de criação do
          arquivo.  No futuro, ‘st_ctime’ conterá a hora da alteração de
          metadados mais recente, como em outras plataformas.

      -- Atributo: st_birthtime

          Hora de criação do arquivo expressa em segundos.  Este
          atributo nem sempre está disponível e pode levantar *note
          AttributeError: 34b.

          Alterado na versão 3.12: ‘st_birthtime’ está agora disponível
          no Windows.

      -- Atributo: st_birthtime_ns

          Hora de criação do arquivo expressa em nanossegundos em um
          inteiro.  Este atributo nem sempre está disponível e pode
          levantar *note AttributeError: 34b.

          Adicionado na versão 3.12.

          Nota: O significado e resolução exatos dos atributos *note
          st_atime: 2d6b, *note st_mtime: 2bf7, *note st_ctime: 2d6c. e
          *note st_birthtime: 2d70. dependem do sistema operacional e do
          sistema de arquivos.  Por exemplo, em sistemas Windows que
          usam os sistemas de arquivos FAT32, *note st_mtime: 2bf7. tem
          resolução de 2 segundos, e *note st_atime: 2d6b. tem resolução
          de apenas 1 dia.  Consulte a documentação do sistema
          operacional para obter detalhes.

          Da mesma forma, embora *note st_atime_ns: 2d6d, *note
          st_mtime_ns: 2d6e, *note st_ctime_ns: 2d6f. e *note
          st_birthtime_ns: 2d71. sejam sempre expressos em
          nanossegundos, muitos sistemas não fornecem precisão de
          nanossegundos.  Em sistemas que fornecem precisão de
          nanossegundos, o objeto de ponto flutuante usado para
          armazenar *note st_atime: 2d6b, *note st_mtime: 2bf7, *note
          st_ctime: 2d6c. e *note st_birthtime: 2d70. não pode preservar
          tudo, e como tal será ligeiramente inexato.  Se você precisa
          dos carimbos de data/hora exatos, sempre deve usar *note
          st_atime_ns: 2d6d, *note st_mtime_ns: 2d6e, *note st_ctime_ns:
          2d6f. e *note st_birthtime_ns: 2d71.

     Em alguns sistemas Unix (como Linux), os seguintes atributos também
     podem estar disponíveis:

      -- Atributo: st_blocks

          Número de blocos de 512 bytes alocados para o arquivo.  Isso
          pode ser menor que *note st_size: 2d6a./512 quando o arquivo
          possuir lacunas.

      -- Atributo: st_blksize

          Tamanho de bloco “preferido” para E/S eficiente do sistema de
          arquivos.  Gravar em um arquivo em partes menores pode causar
          uma leitura-modificação-reescrita ineficiente.

      -- Atributo: st_rdev

          Tipo de dispositivo, se for um dispositivo nó-i.

      -- Atributo: st_flags

          Sinalizadores definidos pelo usuário para o arquivo.

     Em outros sistemas Unix (como o FreeBSD), os seguintes atributos
     podem estar disponíveis (mas só podem ser preenchidos se o root
     tentar usá-los):

      -- Atributo: st_gen

          Número de geração do arquivo.

     No Solaris e derivados, os seguintes atributos também podem estar
     disponíveis:

      -- Atributo: st_fstype

          String que identifica exclusivamente o tipo de sistema de
          arquivos que contém o arquivo.

     Em sistemas macOS, os seguintes atributos também podem estar
     disponíveis:

      -- Atributo: st_rsize

          Tamanho real do arquivo.

      -- Atributo: st_creator

          Criador do arquivo.

      -- Atributo: st_type

          Tipo de arquivo.

     Em sistemas Windows, os seguintes atributos também estão
     disponíveis:

      -- Atributo: st_file_attributes

          Atributos de arquivos no Windows: membro ‘dwFileAttributes’ da
          estrutura ‘BY_HANDLE_FILE_INFORMATION’ retornada por
          ‘GetFileInformationByHandle()’.  Veja as constantes
          ‘FILE_ATTRIBUTE_* <stat.FILE_ATTRIBUTE_ARCHIVE>’ no módulo
          *note stat: d1.

          Adicionado na versão 3.5.

      -- Atributo: st_reparse_tag

          Quando *note st_file_attributes: e65. tem *note
          FILE_ATTRIBUTE_REPARSE_POINT: 29e2. definido, este campo
          contém uma tag identificando o tipo do ponto de nova análise.
          Veja as constantes *note IO_REPARSE_TAG_*: 29e7. no módulo
          *note stat: d1.

     O módulo padrão *note stat: d1. define funções e constantes que são
     úteis para extrair informações de uma estrutura ‘stat’.  (No
     Windows, alguns itens são preenchidos com valores fictícios.)

     Para compatibilidade com versões anteriores, uma instância de *note
     stat_result: 1509. também é acessível como uma tupla de pelo menos
     10 inteiros, fornecendo os membros mais importantes (e portáveis)
     da estrutura ‘stat’, na ordem *note st_mode: a14, *note st_ino:
     2d65, *note st_dev: 2d66, *note st_nlink: 2d67, *note st_uid: 2d68,
     *note st_gid: 2d69, *note st_size: 2d6a, *note st_atime: 2d6b,
     *note st_mtime: 2bf7, *note st_ctime: 2d6c.  Mais itens podem ser
     adicionados no final por algumas implementações.  Para
     compatibilidade com versões mais antigas do Python, acessar *note
     stat_result: 1509. como uma tupla sempre retorna inteiros.

     Alterado na versão 3.5: Windows agora retorna o arquivo de índice
     como *note st_ino: 2d65. quando disponível.

     Alterado na versão 3.7: Adicionado o membro *note st_fstype: b7a.
     ao Solaris/derivados.

     Alterado na versão 3.8: Adicionado o membro *note st_reparse_tag:
     a15. no Windows.

     Alterado na versão 3.8: No Windows, o membro *note st_mode: a14.
     agora identifica arquivos especiais como ‘S_IFCHR’, ‘S_IFIFO’ ou
     ‘S_IFBLK’ conforme apropriado.

     Alterado na versão 3.12: No Windows, *note st_ctime: 2d6c. foi
     descontinuado.  Eventualmente, ele conterá a hora da última
     alteração de metadados, para fins de consistência com outras
     plataformas, mas por enquanto ainda contém a hora de criação.  Use
     *note st_birthtime: 2d70. para a hora de criação.

     No Windows, o *note st_ino: 2d65. agora pode ter até 128 bits,
     dependendo do sistema de arquivos.  Anteriormente, não era possível
     ter mais de 64 bits, e identificadores de arquivo maiores seriam
     compactados arbitrariamente.

     No Windows, *note st_rdev: 15f4. não retorna mais um valor.
     Anteriormente, ele continha o mesmo que *note st_dev: 2d66, o que
     era incorreto.

     Adicionado o membro *note st_birthtime: 2d70. no Windows.

 -- Função: os.statvfs (path)

     Executa uma chamada de sistema ‘statvfs()’ no caminho fornecido.  O
     valor de retorno é um objeto cujos atributos descrevem o sistema de
     arquivos no caminho fornecido e correspondem aos membros da
     estrutura ‘statvfs’, a saber: ‘f_bsize’, ‘f_frsize’, ‘f_blocks’,
     ‘f_bfree’, ‘f_bavail’, ‘f_files’, ‘f_ffree’, ‘f_favail’, ‘f_flag’,
     ‘f_namemax’, ‘f_fsid’.

     Duas constantes em nível de módulo são definidas para os
     sinalizadores de bit do atributo ‘f_flag’: se ‘ST_RDONLY’ estiver
     definido, o sistema de arquivos é montado somente leitura, e se
     ‘ST_NOSUID’ estiver definido, a semântica dos bits setuid/setgid é
     desabilitada ou não é implementada.

     Constantes de nível de módulo adicionais são definidas para
     sistemas baseados em GNU/glibc.  São elas ‘ST_NODEV’ (impede o
     acesso aos arquivos especiais do dispositivo), ‘ST_NOEXEC’ (não
     permite a execução do programa), ‘ST_SYNCHRONOUS’ (as escritas são
     sincronizadas de uma vez), ‘ST_MANDLOCK’ (permitir travas
     obrigatórias em um sistema de arquivos), ‘ST_WRITE’ (escrever no
     arquivo/diretório/link simbólico), ‘ST_APPEND’ (arquivo somente
     anexado), ‘ST_IMMUTABLE’ (arquivo imutável), ‘ST_NOATIME’ (não
     atualiza os tempos de acesso), ‘ST_NODIRATIME’ (não atualiza os
     tempos de acesso ao diretório), ‘ST_RELATIME’ (atualiza o atime
     relativo ao mtime/ctime).

     Esta função tem suporte a *note especificar um descritor de
     arquivo: b72.

     *note Disponibilidade: 1ed8.: Unix.

     Alterado na versão 3.2: As constantes ‘ST_RDONLY’ e ‘ST_NOSUID’
     foram adicionadas.

     Alterado na versão 3.3: Adicionado suporte para especificar 'path'
     como um descritor de arquivo aberto.

     Alterado na versão 3.4: As constantes ‘ST_NODEV’, ‘ST_NOEXEC’,
     ‘ST_SYNCHRONOUS’, ‘ST_MANDLOCK’, ‘ST_WRITE’, ‘ST_APPEND’,
     ‘ST_IMMUTABLE’, ‘ST_NOATIME’, ‘ST_NODIRATIME’ e ‘ST_RELATIME’ foram
     adicionadas.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

     Alterado na versão 3.7: Adicionado o atributo ‘f_fsid’.

 -- Dado: os.supports_dir_fd

     Um objeto *note set: 5d9. indicando quais funções no módulo *note
     os: a1. aceitam um descritor de arquivo aberto para seu parâmetro
     'dir_fd'.  Plataformas diferentes fornecem recursos diferentes, e a
     funcionalidade subjacente que o Python usa para implementar o
     parâmetro 'dir_fd' não está disponível em todas as plataformas que
     o Python provê suporte.  Para fins de consistência, as funções que
     podem implementar 'dir_fd' sempre permitem especificar o parâmetro,
     mas lançarão uma exceção se a funcionalidade for usada quando não
     estiver disponível localmente.  (Especificar ‘None’ para 'dir_fd' é
     sempre válido em todas as plataformas.)

     Para verificar se uma função particular aceita um descritor de
     arquivo aberto para seu parâmetro 'dir_fd', use o operador ‘in’ em
     ‘supports_dir_fd’.  Como exemplo, esta expressão é avaliada como
     ‘True’ se *note os.stat(): 4a0. aceita descritores de arquivo
     abertos para 'dir_fd' na plataforma local:

          os.stat in os.supports_dir_fd

     Atualmente os parâmetros 'dir_fd' funcionam apenas em plataformas
     Unix; nenhum deles funciona no Windows.

     Adicionado na versão 3.3.

 -- Dado: os.supports_effective_ids

     Um objeto *note set: 5d9. que indica se *note os.access(): 112b.
     permite especificar ‘True’ para seu parâmetro 'effective_ids' na
     plataforma local.  (Especificar ‘False’ para 'effective_ids' é
     sempre válido em todas as plataformas.)  Se a plataforma local
     oferecer suporte, a coleção conterá *note os.access(): 112b.; caso
     contrário, ficará vazio.

     Esta expressão é avaliada como ‘True’ se *note os.access(): 112b.
     oferecer suporte a ‘effective_ids=True’ na plataforma local:

          os.access in os.supports_effective_ids

     Atualmente, 'effective_ids' funciona apenas em plataformas Unix;
     não funciona no Windows.

     Adicionado na versão 3.3.

 -- Dado: os.supports_fd

     Um objeto *note set: 5d9. que indica quais funções no módulo *note
     os: a1. permitem especificar seu parâmetro 'path' como um descritor
     de arquivo aberto na plataforma local.  Plataformas diferentes
     fornecem recursos diferentes, e a funcionalidade subjacente que o
     Python usa para aceitar descritores de arquivos abertos como
     argumentos 'path' não está disponível em todas as plataformas que o
     Python provê suporte.

     Para determinar se uma função particular permite especificar um
     descritor de arquivo aberto para seu parâmetro 'path', use o
     operador ‘in’ em ‘supports_fd’.  Como exemplo, esta expressão é
     avaliada como ‘True’ se *note os.chdir(): 60d. aceita descritores
     de arquivo abertos para 'path' em sua plataforma local:

          os.chdir in os.supports_fd

     Adicionado na versão 3.3.

 -- Dado: os.supports_follow_symlinks

     Um objeto *note set: 5d9. que indica quais funções no módulo *note
     os: a1. aceitam ‘False’ para seu parâmetro 'follow_symlinks' na
     plataforma local.  Plataformas diferentes fornecem recursos
     diferentes, e a funcionalidade subjacente que o Python usa para
     implementar 'follow_symlinks' não está disponível em todas as
     plataformas às quais o Python tem suporte.  Para fins de
     consistência, as funções que podem ter suporte a 'follow_symlinks'
     sempre permitem especificar o parâmetro, mas irão lançar uma
     exceção se a funcionalidade for usada quando não estiver disponível
     localmente.  (Especificar ‘True’ para 'follow_symlinks' é sempre
     aceito em todas as plataformas.)

     Para verificar se uma função em particular aceita ‘False’ para seu
     parâmetro 'follow_symlinks', use o operador ‘in’ em
     ‘supports_follow_symlinks’.  Como exemplo, esta expressão é
     avaliada como ‘True’ se você pode especificar
     ‘follow_symlinks=False’ ao chamar *note os.stat(): 4a0. na
     plataforma local:

          os.stat in os.supports_follow_symlinks

     Adicionado na versão 3.3.

 -- Função: os.symlink (src, dst, target_is_directory=False, *,
          dir_fd=None)

     Cria um link simbólico apontando para 'src' chamado 'dst'.

     O parâmetro 'src' refere-se ao destino do link (o arquivo ou
     diretório para o qual o link está sendo criado), e 'dst' é o nome
     do link que está sendo criado.

     No Windows, um link simbólico representa um arquivo ou um diretório
     e não se transforma no destino dinamicamente.  Se o alvo estiver
     presente, será criado um link simbólico de mesmo tipo.  Caso
     contrário, o link simbólico será criado como um diretório se
     'target_is_directory' for ‘True’ ou um link simbólico de arquivo (o
     padrão) caso contrário.  Em plataformas não Windows,
     'target_is_directory' é ignorado.

     Esta função tem suporte a *note caminhos relativos para descritores
     de diretório: 1129.

          Nota: Em versões mais recentes do Windows 10, contas sem
          privilégios podem criar links simbólicos se o Modo de
          Desenvolvedor estiver habilitado.  Quando o modo de
          desenvolvedor não está disponível/ativado, o privilégio
          'SeCreateSymbolicLinkPrivilege' é necessário ou o processo
          deve ser executado como um administrador.

          A exceção *note OSError: 417. é levantada quando a função é
          chamada por um usuário sem privilégios.

     Levanta um *note evento de auditoria: 19fa. ‘os.symlink’ com os
     argumentos ‘src’, ‘dst’ e ‘dir_fd’.

     *note Disponibilidade: 1ed8.: Unix, Windows.

     A função é limitada em WASI, veja *note Plataformas WebAssembly:
     18f5. para mais informações.

     Alterado na versão 3.2: Adicionado suporte para links simbólicos do
     Windows 6.0 (Vista).

     Alterado na versão 3.3: Adicionado o parâmetro 'dir_fd', e agora
     permite 'target_is_directory' em plataformas não Windows.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0. para 'src' e 'dst'.

     Alterado na versão 3.8: Adicionado suporte para links simbólicos
     não elevados no Windows com Modo de Desenvolvedor.

 -- Função: os.sync ()

     Força a escrita de tudo para o disco.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

 -- Função: os.truncate (path, length)

     Trunca o arquivo correspondente ao 'path', de modo que tenha no
     máximo 'length' bytes.

     Esta função tem suporte a *note especificar um descritor de
     arquivo: b72.

     Levanta um *note evento de auditoria: 19fa. ‘os.truncate’ com os
     argumentos ‘path’ e ‘length’.

     *note Disponibilidade: 1ed8.: Unix, Windows.

     Adicionado na versão 3.3.

     Alterado na versão 3.5: Adicionado suporte para o Windows.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.unlink (path, *, dir_fd=None)

     Remove (exclui) o arquivo 'path'.  Esta função é semanticamente
     idêntica à *note remove(): 112f.; o nome ‘unlink’ é seu nome Unix
     tradicional.  Por favor, veja a documentação de *note remove():
     112f. para mais informações.

     Levanta um *note evento de auditoria: 19fa. ‘os.remove’ com os
     argumentos ‘path’, ‘dir_fd’.

     Alterado na versão 3.3: Adicionado o parâmetro 'dir_fd'.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.utime (path, times=None, *[, ns], dir_fd=None,
          follow_symlinks=True)

     Define os tempos de acesso e modificação do arquivo especificado
     por 'path'.

     *note utime(): 1135. aceita dois parâmetros opcionais, 'times' e
     'ns'.  Eles especificam os horários definidos no 'path' e são
     usados da seguinte forma:

        - Se 'ns' for especificado, deve ser uma tupla de 2 elementos na
          forma ‘(atime_ns, mtime_ns)’ onde cada membro é um inteiro
          expressando nanossegundos.

        - Se 'times' não for ‘None’, deve ser uma tupla de 2 elementos
          na forma ‘(atime, mtime)’ onde cada membro é um inteiro ou
          ponto flutuante expressando segundos.

        - Se 'times' for ‘None’ e 'ns' não for especificado, isso é
          equivalente a especificar ‘ns=(atime_ns, mtime_ns)’ onde ambos
          os tempos são a hora atual.

     É um erro especificar tuplas para ambos 'times' e 'ns'.

     Observe que os tempos exatos que você definiu aqui podem não ser
     retornados por uma chamada subsequente de *note stat(): 4a0,
     dependendo da resolução com a qual seu sistema operacional registra
     os tempos de acesso e modificação; veja *note stat(): 4a0.  A
     melhor maneira de preservar os tempos exatos é usar os campos
     'st_atime_ns' e 'st_mtime_ns' do objeto de resultado *note
     os.stat(): 4a0. com o parâmetro 'ns' para *note utime(): 1135.

     Esta função pode oferecer suporte a *note especificar um descritor
     de arquivo: b72, *note caminhos relativos aos descritores de
     diretório: 1129. e *note não seguir os links simbólicos: 112a.

     Levanta um *note evento de auditoria: 19fa. ‘os.utime’ com os
     argumentos ‘path’, ‘times’, ‘ns’ e ‘dir_fd’.

     Alterado na versão 3.3: Adicionado suporte para especificar 'path'
     como um descritor de arquivo aberto e os parâmetros 'dir_fd',
     'follow_symlinks' e 'ns'.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.walk (top, topdown=True, onerror=None, followlinks=False)

     Gera os nomes dos arquivos em uma árvore de diretório percorrendo a
     árvore de cima para baixo ou de baixo para cima.  Para cada
     diretório na árvore com raiz no diretório 'top' (incluindo o
     próprio 'top'), ele produz uma tupla de 3 elementos ‘(dirpath,
     dirnames, filenames)’.

     'dirpath' é uma string, o caminho para o diretório.  'dirnames' é
     uma lista dos nomes dos subdiretórios em 'dirpath' (incluindo links
     simbólicos para diretórios e excluindo ‘'.'’ e ‘'..'’).
     'filenames' é uma lista dos nomes dos arquivos não pertencentes ao
     diretório em 'dirpath'.  Observe que os nomes nas listas não contêm
     componentes de caminho.  Para obter um caminho completo (que começa
     com 'top') para um arquivo ou diretório em 'dirpath', execute
     ‘os.path.join(dirpath, name)’.  Se as listas são ou não ordenadas
     depende do sistema de arquivos.  Se um arquivo for removido ou
     adicionado ao diretório 'dirpath' durante a geração das listas, não
     é especificado se um nome para esse arquivo deve ser incluído.

     Se o argumento opcional 'topdown' for ‘True’ ou não especificado, o
     triplo para um diretório é gerado antes dos triplos para qualquer
     um de seus subdiretórios (os diretórios são gerados de cima para
     baixo).  Se 'topdown' for ‘False’, o triplo para um diretório é
     gerado após os triplos para todos os seus subdiretórios (os
     diretórios são gerados de baixo para cima).  Não importa o valor de
     'topdown', a lista de subdiretórios é recuperada antes que as
     tuplas para o diretório e seus subdiretórios sejam geradas.

     Quando 'topdown' é ‘True’, o chamador pode modificar a lista de
     'dirnames' internamente (talvez usando *note del: 18a7. ou
     atribuição de fatia), e *note walk(): 4a9. só recursará nos
     subdiretórios cujos nomes permanecem em 'dirnames'; isso pode ser
     usado para podar a busca, impor uma ordem específica de visita, ou
     mesmo informar à função *note walk(): 4a9. sobre os diretórios que
     o chamador cria ou renomeia antes de retomar *note walk(): 4a9.
     novamente.  Modificar 'dirnames' quando 'topdown' for ‘False’ não
     tem efeito no comportamento da caminhada, porque no modo de baixo
     para cima os diretórios em 'dirnames' são gerados antes do próprio
     'dirpath' ser gerado.

     Por padrão, os erros da chamada de *note scandir(): a68. são
     ignorados.  Se o argumento opcional 'onerror' for especificado,
     deve ser uma função; ela será chamado com um argumento, uma
     instância da exceção *note OSError: 417.  Ele pode relatar o erro
     para continuar com a caminhada ou levantar a exceção para abortar a
     caminhada.  Observe que o nome do arquivo está disponível como o
     atributo ‘filename’ do objeto de exceção.

     Por padrão, a função *note walk(): 4a9. não vai seguir links
     simbólicos que resolvem para diretórios.  Defina 'followlinks' como
     ‘True’ para visitar diretórios apontados por links simbólicos, em
     sistemas que oferecem suporte a eles.

          Nota: Esteja ciente de que definir 'followlinks' para ‘True’
          pode levar a recursão infinita se um link apontar para um
          diretório pai de si mesmo.  *note walk(): 4a9. não mantém
          registro dos diretórios que já visitou.

          Nota: Se você passar um nome de caminho relativo, não mude o
          diretório de trabalho atual entre as continuações de *note
          walk(): 4a9.  *note walk(): 4a9. nunca muda o diretório atual,
          e presume que seu chamador também não.

     Este exemplo exibe o número total de bytes dos arquivos
     não-diretório em cada diretório no diretório inicial, exceto que
     ele não olha em nenhum subdiretório chamado ‘__pycache__’:

          import os
          from os.path import join, getsize
          for root, dirs, files in os.walk('python/Lib/xml'):
              print(root, "consome", end=" ")
              print(sum(getsize(join(root, name)) for name in files), end=" ")
              print("bytes em", len(files), "arquivos que não são diretórios")
              if '__pycache__' in dirs:
                  dirs.remove('__pycache__')  # não visita diretórios de __pycache__

     No próximo exemplo (implementação simples de *note shutil.rmtree():
     301.), andar na árvore de baixo para cima é essencial, *note
     rmdir(): 1132. não permite excluir um diretório antes que o
     diretório esteja vazio:

          # Exclui tudo que for acessível do diretório nomeado em "top",
          # presumindo que não há links simbólicos.
          # CUIDADO: Isso é perigoso! Por exemplo, se top == '/',
          # ele pode excluir todos os seus arquivos de disco.
          import os
          for root, dirs, files in os.walk(top, topdown=False):
              for name in files:
                  os.remove(os.path.join(root, name))
              for name in dirs:
                  os.rmdir(os.path.join(root, name))
          os.rmdir(top)

     Levanta um *note evento de auditoria: 19fa. ‘os.walk’ com os
     argumentos ‘top’, ‘topdown’, ‘onerror’ e ‘followlinks’.

     Alterado na versão 3.5: Esta função agora chama *note os.scandir():
     a68. em vez de *note os.listdir(): 1139, tornando-a mais rápida
     reduzindo o número de chamadas a *note os.stat(): 4a0.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.fwalk (top='.', topdown=True, onerror=None, *,
          follow_symlinks=False, dir_fd=None)

     Se comporta exatamente como *note walk(): 4a9, exceto que produz um
     tupla de 4 elementos ‘(dirpath, dirnames, filenames, dirfd)’, e tem
     suporte a ‘dir_fd’.

     'dirpath', 'dirnames' e 'filenames' são idênticos à saída de *note
     walk(): 4a9. e 'dirfd' é um descritor de arquivo que faz referência
     ao diretório 'dirpath'.

     Esta função sempre tem suporte a *note caminhos relativos aos
     descritores de diretório: 1129. e *note não seguir links
     simbólicos: 112a.  Observe, entretanto, que, ao contrário de outras
     funções, o valor padrão *note fwalk(): b71. para 'follow_symlinks'
     é ‘False’.

          Nota: Uma vez que *note fwalk(): b71. produz descritores de
          arquivo, eles só são válidos até a próxima etapa de iteração,
          então você deve duplicá-los (por exemplo, com *note dup():
          1b54.) se quiser mantê-los por mais tempo.

     Este exemplo exibe o número total de bytes dos arquivos
     não-diretório em cada diretório no diretório inicial, exceto que
     ele não olha em nenhum subdiretório chamado ‘__pycache__’:

          import os
          for root, dirs, files, rootfd in os.fwalk('python/Lib/xml'):
              print(root, "consome", end=" ")
              print(sum([os.stat(name, dir_fd=rootfd).st_size for name in files]),
                    end=" ")
              print("bytes em", len(files), "arquivos que não são diretórios")
              if '__pycache__' in dirs:
                  dirs.remove('__pycache__')  # não visita diretórios de __pycache__

     No próximo exemplo, percorrer a árvore de baixo para cima é
     essencial: *note rmdir(): 1132. não permite excluir um diretório
     antes que o diretório esteja vazio:

          # Exclui tudo que for acessível do diretório nomeado em "top",
          # presumindo que não há links simbólicos.
          # CUIDADO: Isso é perigoso! Por exemplo, se top == '/',
          # ele pode excluir todos os seus arquivos de disco.
          import os
          for root, dirs, files, rootfd in os.fwalk(top, topdown=False):
              for name in files:
                  os.unlink(name, dir_fd=rootfd)
              for name in dirs:
                  os.rmdir(name, dir_fd=rootfd)

     Levanta um *note evento de auditoria: 19fa. ‘os.fwalk’ com os
     argumentos ‘top’, ‘topdown’, ‘onerror’, ‘follow_symlinks’ e
     ‘dir_fd’.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

     Alterado na versão 3.7: Adicionado suporte para caminhos em *note
     bytes: 1c2.

 -- Função: os.memfd_create (name[, flags=os.MFD_CLOEXEC])

     Cria um arquivo anônimo e retorna um descritor de arquivo que faça
     referência a ele.  'flags' deve ser uma das constantes ‘os.MFD_*’
     disponíveis no sistema (ou uma combinação de OU bit a bit delas).
     Por padrão, o novo descritor de arquivo é *note não herdável: f2b.

     O nome fornecido em 'name' é usado como um nome de arquivo e será
     exibido como o destino do link simbólico correspondente no
     diretório ‘/proc/self/fd/’.  O nome exibido é sempre prefixado com
     ‘memfd:’ e serve apenas para fins de depuração.  Os nomes não
     afetam o comportamento do descritor de arquivo e, como tal, vários
     arquivos podem ter o mesmo nome sem quaisquer efeitos colaterais.

     *note Disponibilidade: 1ed8.: Linux >= 3.17 with glibc >= 2.27.

     Adicionado na versão 3.8.

 -- Dado: os.MFD_CLOEXEC
 -- Dado: os.MFD_ALLOW_SEALING
 -- Dado: os.MFD_HUGETLB
 -- Dado: os.MFD_HUGE_SHIFT
 -- Dado: os.MFD_HUGE_MASK
 -- Dado: os.MFD_HUGE_64KB
 -- Dado: os.MFD_HUGE_512KB
 -- Dado: os.MFD_HUGE_1MB
 -- Dado: os.MFD_HUGE_2MB
 -- Dado: os.MFD_HUGE_8MB
 -- Dado: os.MFD_HUGE_16MB
 -- Dado: os.MFD_HUGE_32MB
 -- Dado: os.MFD_HUGE_256MB
 -- Dado: os.MFD_HUGE_512MB
 -- Dado: os.MFD_HUGE_1GB
 -- Dado: os.MFD_HUGE_2GB
 -- Dado: os.MFD_HUGE_16GB

     Esses sinalizadores podem ser passados para *note memfd_create():
     a13.

     *note Disponibilidade: 1ed8.: Linux >= 3.17 with glibc >= 2.27

     Os sinalizadores ‘MFD_HUGE*’ estão disponíveis somente a partir do
     Linux 4.14.

     Adicionado na versão 3.8.

 -- Função: os.eventfd (initval[, flags=os.EFD_CLOEXEC])

     Cria e retorna um descritor de arquivo de evento.  Os descritores
     de arquivo implementam *note read(): dbd. e *note write(): dc3.
     brutos com um tamanho de buffer de 8, *note select(): dc8, *note
     poll(): 2d8a. e similares.  Veja a página man ‘eventfd(2)(9)’ para
     mais informações.  Por padrão, o novo descritor de arquivo é *note
     não herdável: f2b.

     'initval' é o valor inicial do contador de evento.  O valor inicial
     deve ser um inteiro sem sinal de 32 bits.  Observe que o valor
     inicial é limitado a um inteiro sem sinal de 32 bits ainda que o
     contador de evento seja um inteiro de 64 bits com um valor máximo
     de 2^64-2.

     'flags' podem ser construídas a partir de *note EFD_CLOEXEC: 18e3,
     *note EFD_NONBLOCK: 18e4. e *note EFD_SEMAPHORE: 18e5.

     Se *note EFD_SEMAPHORE: 18e5. for especificado e o contador de
     evento for diferente de zero, *note eventfd_read(): 2d8b. retorna 1
     e decrementa o contador em um.

     Se *note EFD_SEMAPHORE: 18e5. não for especificado e o contador de
     evento for diferente de zero, *note eventfd_read(): 2d8b. retorna o
     valor atual do contador de evento e zera o contador.

     Se o contador de evento for zero e *note EFD_NONBLOCK: 18e4. não
     for especificado, *note eventfd_read(): 2d8b. bloqueia.

     *note eventfd_write(): 2d8c. incrementa o contador de evento.  A
     escrita bloqueia se a operação de escrita incrementar o contador
     para um valor maior que 2^64-2.

     Exemplo:

          import os

          # semaphore with start value '1'
          fd = os.eventfd(1, os.EFD_SEMAPHORE | os.EFD_CLOEXEC)
          try:
              # acquire semaphore
              v = os.eventfd_read(fd)
              try:
                  do_work()
              finally:
                  # release semaphore
                  os.eventfd_write(fd, v)
          finally:
              os.close(fd)

     *note Disponibilidade: 1ed8.: Linux >= 2.6.27 with glibc >= 2.8

     Adicionado na versão 3.10.

 -- Função: os.eventfd_read (fd)

     Lê um valor de um descritor de arquivo *note eventfd(): 81b. e
     retorna um inteiro sem sinal de 64 bits.  A função não verifica se
     'fd' é um *note eventfd(): 81b.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.27

     Adicionado na versão 3.10.

 -- Função: os.eventfd_write (fd, value)

     Adiciona 'value' a um descritor de arquivo *note eventfd(): 81b.
     'value' deve ser um inteiro sem sinal de 64 bits.  A função não
     verifica se 'fd' é um *note eventfd(): 81b.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.27

     Adicionado na versão 3.10.

 -- Dado: os.EFD_CLOEXEC

     Define sinalizador close-on-exec para o novo descritor de arquivo
     *note eventfd(): 81b.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.27

     Adicionado na versão 3.10.

 -- Dado: os.EFD_NONBLOCK

     Define sinalizador de status *note O_NONBLOCK: e68. para um novo
     descritor de arquivo *note eventfd(): 81b.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.27

     Adicionado na versão 3.10.

 -- Dado: os.EFD_SEMAPHORE

     Fornece semântica de semáforo ou similar para leitura de um
     descritor de arquivo *note eventfd(): 81b.  Na leitura o contador
     interno é decrementado em um.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.30

     Adicionado na versão 3.10.

* Menu:

* Descritores de arquivo de temporizador::
* Atributos estendidos do Linux::

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/access(2)

   (2) https://peps.python.org/pep-0529/

   (3) https://bugs.python.org/issue?@action=redirect&bpo=21082

   (4) 
https://pubs.opengroup.org/onlinepubs/009695399/functions/opendir.html

   (5) 
https://pubs.opengroup.org/onlinepubs/009695399/functions/readdir_r.html

   (6) 
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364418(v=vs.85).aspx

   (7) 
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364428(v=vs.85).aspx

   (8) https://msdn.microsoft.com/en-us/library/aa363788

   (9) https://manpages.debian.org/eventfd(2)


File: python.info,  Node: Descritores de arquivo de temporizador,  Next: Atributos estendidos do Linux,  Up: Arquivos e diretórios

5.16.1.9 Descritores de arquivo de temporizador
...............................................

Adicionado na versão 3.13.

Essas funções fornecem suporte para a API de 'descritores de arquivo de
temporizador'.

 -- Função: os.timerfd_create (clockid, /, *, flags=0)

     Cria e retorna um descritor de arquivo de temporizador ('timerfd').

     O descritor de arquivo retornado por *note timerfd_create(): 211.
     implementa:

        - *note read(): dbd.

        - *note select(): dc8.

        - *note poll(): 2d8a.

     O método *note read(): dbd. do descritor de arquivo pode ser
     chamado com um buffer de tamanho 8.  Se o temporizador já expirou
     uma ou mais vezes, *note read(): dbd. retorna o número de vezes que
     o descritor expirou com a ordem dos bytes no formato do hospedeiro,
     que pode ser convertido para um *note int: 257. com
     ‘int.from_bytes(x, byteorder=sys.byteorder)’.

     *note select(): dc8. e *note poll(): 2d8a. pode ser usado para
     esperar até que o temporizador expire e o descritor de arquivo
     possa ser lido.

     'clockid' deve ser um *note ID de relógio: 2d8e. válido, conforme
     definido no módulo *note time: ee.:

        - *note time.CLOCK_REALTIME: 69a.

        - *note time.CLOCK_MONOTONIC: 699.

        - *note time.CLOCK_BOOTTIME: ba6. (A partir de Linux 3.15 para
          timerfd_create)

     Se 'clockid' é *note time.CLOCK_REALTIME: 69a, é usado um relógio
     em tempo real definido em todo o sistema.  Se o relógio do sistema
     muda, a configuração do temporizador precisa ser atualizado.  Para
     cancelar o temporizador quando o relógio do sistema é alterado,
     veja *note TFD_TIMER_CANCEL_ON_SET: 219.

     Se 'clockid' é *note time.CLOCK_MONOTONIC: 699, é usado um relógio
     monotonicamente não estável.  Mesmo se o relógio do sistema é
     alterado, a configuração do temporizador não será afetada.

     Se 'clockid' é *note time.CLOCK_BOOTTIME: ba6, é idêntica a *note
     time.CLOCK_MONOTONIC: 699. exceto por incluir qualquer tempo que o
     sistema está suspenso.

     O comportamento do descritor de arquivo pode ser modificado
     especificando um valor para 'flags'.  Qualquer um dos seguintes
     valores pode ser usado, combinadas usando OU (OR) bit a bit (o
     operador ‘|’):

        - *note TFD_NONBLOCK: 216.

        - *note TFD_CLOEXEC: 217.

     Se *note TFD_NONBLOCK: 216. não está definido como um sinalizador,
     *note read(): dbd. bloqueia até o temporizador expirar.  Se está
     definido como um sinalizador, *note read(): dbd. não bloqueia, mas
     se não expirou desde a última chamada, *note read(): dbd. levanta
     *note OSError: 417. com ‘errno’ definido como *note errno.EAGAIN:
     2435.

     *note TFD_CLOEXEC: 217. é sempre definido pelo Python
     automaticamente.

     O descritor de arquivo deve ser fechado com *note os.close(): b8a.
     quando não é mais necessário, caso contrário o descritor de arquivo
     será vazado.

     Ver também
     ..........

     A página man ‘timerfd_create(2)(1)’.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.27 with glibc >= 2.8

     Adicionado na versão 3.13.

 -- Função: os.timerfd_settime (fd, /, *, flags=flags, initial=0.0,
          interval=0.0)

     Altera um temporizador interno do descritor de arquivo de
     temporizador.  Essa função opera no mesmo intervalo do temporizador
     definido com *note timerfd_settime_ns(): 213.

     'fd' deve ser um descritor de arquivo de temporizador válido.

     O comportamento do temporizador pode ser modificado especificando
     um valor para 'flags'.  Qualquer um dos seguintes valores pode ser
     usado, combinados usando OU (OR) bit a bit (o operador ‘|’):

        - *note TFD_TIMER_ABSTIME: 218.

        - *note TFD_TIMER_CANCEL_ON_SET: 219.

     O temporizador é desabilitado definindo 'initial' para zero (‘0’).
     Se 'initial' é igual ou maior que zero, o temporizador é
     habilitado.  Se 'initial' é menor que zero, uma exceção *note
     OSError: 417. é levantada com ‘errno’ definido como *note
     errno.EINVAL: 1b66.

     Por padrão, o temporizador vai disparar quando passarem 'initial'
     segundos.  (Se 'initial' é zero, o temporizador dispara
     imediatamente.)

     Contudo, se o sinalizador *note TFD_TIMER_ABSTIME: 218. está
     definido, o temporizador dispara quando o relógio do temporizador
     (definido por 'clockid' em *note timerfd_create(): 211.) atingir
     'initial' segundos.

     O intervalor do temporizador é definido pelo *note float: 2f7.
     'interval'.  Se 'interval' é zero, o temporizador irá disparar
     apenas uma vez, no disparo inicial.  Se 'interval' é maior que
     zero, o temporizador vai disparar a cada 'interval' segundos a
     partir do disparo anterior.  Se 'interval' é menor que zero, uma
     exceção *note OSError: 417. será levantada com ‘errno’ definido
     como *note errno.EINVAL: 1b66.

     Se o sinalizador *note TFD_TIMER_CANCEL_ON_SET: 219. é definido com
     *note TFD_TIMER_ABSTIME: 218. e o relógio para o temporizador é
     *note time.CLOCK_REALTIME: 69a, o temporizador é marcado como
     cancelável se o relógio em tempo real é alterado
     descontinuadamente.  Leitura do descritor é abortada com o erro
     ECANCELED.

     Linux gerencia relógio do sistema como UTC. A transição do horário
     de verão é feita apenas pela alteração da compensação de horário e
     não causa alteração descontínua do relógio do sistema.

     A alteração descontínua do relógio do sistema será causada pelos
     seguintes eventos:

        - ‘settimeofday’

        - ‘clock_settime’

        - definir hora e data do sistema com o comando ‘date’

     Retorna uma tupla com dois elementos (‘next_expiration’,
     ‘interval’) do estado anterior do temporizador, antes da execução
     dessa função.

     Ver também
     ..........

     ‘timerfd_create(2)(2)’, ‘timerfd_settime(2)(3)’,
     ‘settimeofday(2)(4)’, ‘clock_settime(2)(5)’, e ‘date(1)(6)’.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.27 with glibc >= 2.8

     Adicionado na versão 3.13.

 -- Função: os.timerfd_settime_ns (fd, /, *, flags=0, initial=0,
          interval=0)

     Similar a *note timerfd_settime(): 212, mas usa nanossegundos.
     Essa função opera no mesmo intervalo do temporizador definido com
     *note timerfd_settime(): 212.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.27 with glibc >= 2.8

     Adicionado na versão 3.13.

 -- Função: os.timerfd_gettime (fd, /)

     Retorna uma tupla de ponto flutuante com dois elementos
     (‘next_expiration’, ‘interval’).

     ‘next_expiration’ indica o tempo relativo até o próximo disparo do
     cronômetro, independentemente do sinalizador *note
     TFD_TIMER_ABSTIME: 218. estar definido.

     ‘interval’ indica o intervalo do cronômetro.  Se for zero, o
     cronômetro será acionado apenas uma vez, após terem passados
     ‘next_expiration’ segundos.

     Ver também
     ..........

     ‘timerfd_gettime(2)(7)’

     *note Disponibilidade: 1ed8.: Linux >= 2.6.27 with glibc >= 2.8

     Adicionado na versão 3.13.

 -- Função: os.timerfd_gettime_ns (fd, /)

     Similar a *note timerfd_gettime(): 214, mas retorna o tempo em
     nanossegundos.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.27 with glibc >= 2.8

     Adicionado na versão 3.13.

 -- Dado: os.TFD_NONBLOCK

     Um sinalizador para a função *note timerfd_create(): 211, que
     define o estado do sinalizador *note O_NONBLOCK: e68. para o novo
     descritor de arquivo de temporizador.  Se *note TFD_NONBLOCK: 216.
     não for definido como sinalizador, *note read(): dbd. bloqueia.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.27 with glibc >= 2.8

     Adicionado na versão 3.13.

 -- Dado: os.TFD_CLOEXEC

     Um sinalizador para a função *note timerfd_create(): 211.  Se *note
     TFD_CLOEXEC: 217. for definido como um sinalizador, define o
     sinalizador close-on-exec para o novo descritor de arquivo.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.27 with glibc >= 2.8

     Adicionado na versão 3.13.

 -- Dado: os.TFD_TIMER_ABSTIME

     Um sinalizador para as funções *note timerfd_settime(): 212. e
     *note timerfd_settime_ns(): 213.  Se esse sinalizador for definido,
     'initial' será intepretador como um valor absoluto no relógio do
     temporizador (em segundos UTC ou nanossegundos da Era Unix).

     *note Disponibilidade: 1ed8.: Linux >= 2.6.27 with glibc >= 2.8

     Adicionado na versão 3.13.

 -- Dado: os.TFD_TIMER_CANCEL_ON_SET

     Um sinalizador para as funções *note timerfd_settime(): 212. e
     *note timerfd_settime_ns(): 213. juntamente com *note
     TFD_TIMER_ABSTIME: 218.  O cronômetro é cancelado quando a hora do
     relógio subjacente muda de forma descontínua.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.27 with glibc >= 2.8

     Adicionado na versão 3.13.

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/timerfd_create(2)

   (2) https://manpages.debian.org/timerfd_create(2)

   (3) https://manpages.debian.org/timerfd_settime(2)

   (4) https://manpages.debian.org/settimeofday(2)

   (5) https://manpages.debian.org/clock_settime(2)

   (6) https://manpages.debian.org/date(1)

   (7) https://manpages.debian.org/timerfd_gettime(2)


File: python.info,  Node: Atributos estendidos do Linux,  Prev: Descritores de arquivo de temporizador,  Up: Arquivos e diretórios

5.16.1.10 Atributos estendidos do Linux
.......................................

Adicionado na versão 3.3.

Estas funções estão todas disponíveis apenas no Linux.

 -- Função: os.getxattr (path, attribute, *, follow_symlinks=True)

     Retorna o valor do atributo estendido do sistema de arquivos
     'attribute' para 'path'.  'attribute' pode ser bytes ou str (direta
     ou indiretamente por meio da interface *note PathLike: c6c.).  Se
     for str, ele é codificado com a codificação do sistema de arquivos.

     Esta função tem suporte a *note especificar um descritor de
     arquivo: b72. e *note não seguir links simbólicos: 112a.

     Levanta um *note evento de auditoria: 19fa. ‘os.getxattr’ com os
     argumentos ‘path’ e ‘attribute’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0. para 'path' e 'attribute'.

 -- Função: os.listxattr (path=None, *, follow_symlinks=True)

     Retorna uma lista dos atributos estendidos do sistema de arquivos
     em 'path'.  Os atributos na lista são representados como strings
     decodificadas com a codificação do sistema de arquivos.  Se 'path'
     for ‘None’, *note listxattr(): 1144. irá examinar o diretório
     atual.

     Esta função tem suporte a *note especificar um descritor de
     arquivo: b72. e *note não seguir links simbólicos: 112a.

     Levanta um *note evento de auditoria: 19fa. ‘os.listxattr’ com o
     argumento ‘path’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os.removexattr (path, attribute, *, follow_symlinks=True)

     Remove o atributo 'attribute' do sistema de arquivos estendido do
     'path'.  'attribute' deve ser bytes ou str (direta ou indiretamente
     através da interface *note PathLike: c6c.).  Se for uma string, é
     codificada com o *note tratador de erros e codificação do sistema
     de arquivos: 53b.

     Esta função tem suporte a *note especificar um descritor de
     arquivo: b72. e *note não seguir links simbólicos: 112a.

     Levanta um *note evento de auditoria: 19fa. ‘os.removexattr’ com os
     argumentos ‘path’ e ‘attribute’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0. para 'path' e 'attribute'.

 -- Função: os.setxattr (path, attribute, value, flags=0, *,
          follow_symlinks=True)

     Define o atributo de sistema de arquivos estendido 'attribute' em
     'path' como 'value'.  'attribute' deve ser um bytes ou str sem NULs
     embutidos (direta ou indiretamente por meio da interface *note
     PathLike: c6c.).  Se for um str, ele é codificado com *note
     tratador de erros e codificação do sistema de arquivos: 53b.
     'flags' podem ser *note XATTR_REPLACE: 2d90. ou *note XATTR_CREATE:
     2d91.  Se *note XATTR_REPLACE: 2d90. for fornecido e o atributo não
     existe, ‘ENODATA’ será levantada.  Se *note XATTR_CREATE: 2d91. for
     fornecido e o atributo já existir, o atributo não será criado e
     ‘EEXISTS’ será levantada.

     Esta função tem suporte a *note especificar um descritor de
     arquivo: b72. e *note não seguir links simbólicos: 112a.

          Nota: Um bug nas versões do kernel Linux inferiores a 2.6.39
          fez com que o argumento 'flags' fosse ignorado em alguns
          sistemas de arquivos.

     Levanta um *note evento de auditoria: 19fa. ‘os.setxattr’ com os
     argumentos ‘path’, ‘attribute’, ‘value’ e ‘flags’.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0. para 'path' e 'attribute'.

 -- Dado: os.XATTR_SIZE_MAX

     O tamanho máximo que o valor de um atributo estendido pode ter.
     Atualmente, são 64 KiB no Linux.

 -- Dado: os.XATTR_CREATE

     Este é um valor possível para o argumento 'flags' em *note
     setxattr(): 1146.  Indica que a operação deve criar um atributo.

 -- Dado: os.XATTR_REPLACE

     Este é um valor possível para o argumento 'flags' em *note
     setxattr(): 1146.  Indica que a operação deve substituir um
     atributo existente.


File: python.info,  Node: Gerenciamento de processo,  Next: Interface do agendador,  Prev: Arquivos e diretórios,  Up: os — Diversas interfaces de sistema operacional

5.16.1.11 Gerenciamento de processo
...................................

Estas funções podem ser usadas para criar e gerenciar processos.

As várias funções *note exec*: 2d95. recebem uma lista de argumentos
para o novo programa carregado no processo.  Em cada caso, o primeiro
desses argumentos é passado para o novo programa como seu próprio nome,
e não como um argumento que um usuário pode ter digitado em uma linha de
comando.  Para o programador C, este é o ‘argv[0]’ passado para um
programa ‘main()’.  Por exemplo, ‘os.execv('/bin/echo', ['foo', 'bar'])’
exibirá apenas ‘bar’ na saída padrão; ‘foo’ parecerá ser ignorado.

 -- Função: os.abort ()

     Gera um sinal ‘SIGABRT’ para o processo atual.  No Unix, o
     comportamento padrão é produzir um despejo de memória; no Windows,
     o processo retorna imediatamente um código de saída ‘3’.  Esteja
     ciente de que chamar esta função não chamará o manipulador de sinal
     Python registrado para ‘SIGABRT’ com *note signal.signal(): 1173.

 -- Função: os.add_dll_directory (path)

     Adiciona um caminho ao caminho de pesquisa de DLL.

     Este caminho de pesquisa é usado ao resolver dependências para
     módulos de extensão importados (o próprio módulo é resolvido por
     meio de *note sys.path: 3b4.), e também por *note ctypes: 2a.

     Remove o diretório chamando 'close()' no objeto retornado ou
     usando-o em uma instrução *note with: 5d2.

     Consulte a documentação da Microsoft(1) para obter mais informações
     sobre como as DLLs são carregadas.

     Levanta um *note evento de auditoria: 19fa. ‘os.add_dll_directory’
     com o argumento ‘path’.

     *note Disponibilidade: 1ed8.: Windows.

     Adicionado na versão 3.8: As versões anteriores do CPython
     resolveriam DLLs usando o comportamento padrão para o processo
     atual.  Isso levou a inconsistências, como apenas às vezes
     pesquisar ‘PATH’ ou o diretório de trabalho atual, e funções do
     sistema operacional como ‘AddDllDirectory’ sem efeito.

     No 3.8, as duas maneiras principais de carregar as DLLs agora
     substituem explicitamente o comportamento de todo o processo para
     garantir a consistência.  Veja as *note notas de portabilidade:
     aad. para informações sobre atualização de bibliotecas.

 -- Função: os.execl (path, arg0, arg1, ...)
 -- Função: os.execle (path, arg0, arg1, ..., env)
 -- Função: os.execlp (file, arg0, arg1, ...)
 -- Função: os.execlpe (file, arg0, arg1, ..., env)
 -- Função: os.execv (path, args)
 -- Função: os.execve (path, args, env)
 -- Função: os.execvp (file, args)
 -- Função: os.execvpe (file, args, env)

     Todas essas funções executam um novo programa, substituindo o
     processo atual; elas não retornam.  No Unix, o novo executável é
     carregado no processo atual e terá a mesma identificação de
     processo do chamador.  Os erros serão relatados como exceções de
     *note OSError: 417.

     O processo atual é substituído imediatamente.  Objetos arquivo
     abertos e descritores não são descarregados, então se houver dados
     em buffer nesses arquivos abertos, você deve descarregá-los usando
     ‘sys.stdout.flush()’ ou *note os.fsync(): db6. antes de chamar uma
     função *note exec*: 2d95.

     As variantes “l” e “v” das funções *note exec*: 2d95. diferem em
     como os argumentos da linha de comando são passados.  As variantes
     “l” são talvez as mais fáceis de trabalhar se o número de
     parâmetros for fixo quando o código for escrito; os parâmetros
     individuais simplesmente se tornam parâmetros adicionais para as
     funções ‘execl*()’.  As variantes “v” são boas quando o número de
     parâmetros é variável, com os argumentos sendo passados em uma
     lista ou tupla como o parâmetro 'args'.  Em qualquer caso, os
     argumentos para o processo filho devem começar com o nome do
     comando que está sendo executado, mas isso não é obrigatório.

     As variantes que incluem um “p” próximo ao final (*note execlp():
     2d98, *note execlpe(): 2d99, *note execvp(): 2d9a. e *note
     execvpe(): 2d9b.) usarão a variável de ambiente ‘PATH’ para
     localizar o programa 'file'.  Quando o ambiente está sendo
     substituído (usando uma das variantes *note exec*e: 2d95,
     discutidas no próximo parágrafo), o novo ambiente é usado como
     fonte da variável ‘PATH’.  As outras variantes, *note execl():
     2d95, *note execle(): 2d97, *note execv(): 2cf9. e *note execve():
     1138, não usarão a variável ‘PATH’ para localizar o executável;
     'path' deve conter um caminho absoluto ou relativo apropriado.
     Caminhos relativos devem incluir pelo menos uma barra, mesmo no
     Windows, pois nomes simples não serão resolvidos.

     Para *note execle(): 2d97, *note execlpe(): 2d99, *note execve():
     1138. e *note execvpe(): 2d9b. (observe que todos eles terminam em
     “e”), o parâmetro 'env' deve ser um mapeamento que é usado para
     definir as variáveis de ambiente para o novo processo (elas são
     usadas no lugar do ambiente do processo atual); as funções *note
     execl(): 2d95, *note execlp(): 2d98, *note execv(): 2cf9. e *note
     execvp(): 2d9a. fazem com que o novo processo herde o ambiente do
     processo atual.

     Para *note execve(): 1138. em algumas plataformas, 'path' também
     pode ser especificado como um descritor de arquivo aberto.  Esta
     funcionalidade pode não ser compatível com sua plataforma; você
     pode verificar se está ou não disponível usando *note
     os.supports_fd: 113c.  Se não estiver disponível, usá-lo vai
     levantar uma *note NotImplementedError: 228.

     Levanta um *note evento de auditoria: 19fa. ‘os.exec’ com os
     argumentos ‘path’, ‘args’ e ‘env’.

     *note Disponibilidade: 1ed8.: Unix, Windows, not WASI, not Android,
     not iOS.

     Alterado na versão 3.3: Adicionado suporte para especificar 'path'
     como um descritor de arquivo aberto para *note execve(): 1138.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: os._exit (n)

     Sai do processo com status 'n', sem chamar manipuladores de
     limpeza, liberando buffers de entrada e saída padrões etc.

          Nota: A forma padrão de sair é *note sys.exit(n): 138e.
          ‘_exit()’ normalmente só deve ser usado no processo filho após
          uma função *note fork(): 197.

Os seguintes códigos de saída são definidos e podem ser usados com *note
_exit(): 242f, embora não sejam obrigatórios.  Eles são normalmente
usados para programas de sistema escritos em Python, como um programa de
entrega de comando externo de servidor de e-mail.

     Nota: Alguns deles podem não estar disponíveis em todas as
     plataformas Unix, pois há algumas variações.  Essas constantes
     estão definidas onde elas são definidas pela plataforma subjacente.

 -- Dado: os.EX_OK

     Código de saída que significa que não ocorreu nenhum erro.  Pode
     ser obtido do valor definido de ‘EXIT_SUCCESS’ em algumas
     plataformas.  Geralmente tem um valor de zero.

     *note Disponibilidade: 1ed8.: Unix, Windows.

 -- Dado: os.EX_USAGE

     Código de saída que significa que o comando foi usado
     incorretamente, como quando o número errado de argumentos é
     fornecido.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Dado: os.EX_DATAERR

     Código de saída que significa que os dados inseridos estavam
     incorretos.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Dado: os.EX_NOINPUT

     Código de saída que significa que um arquivo de entrada não existe
     ou não pôde ser lido.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Dado: os.EX_NOUSER

     Código de saída que significa que um usuário especificado não
     existe.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Dado: os.EX_NOHOST

     Código de saída que significa que um host especificado não existe.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Dado: os.EX_UNAVAILABLE

     Código de saída que significa que um serviço necessário está
     indisponível.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Dado: os.EX_SOFTWARE

     Código de saída que significa que um erro interno do software foi
     detectado.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Dado: os.EX_OSERR

     Código de saída que significa que um erro do sistema operacional
     foi detectado, como a incapacidade de criar um fork ou um
     encadeamento.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Dado: os.EX_OSFILE

     Código de saída que significa que algum arquivo do sistema não
     existia, não pôde ser aberto ou teve algum outro tipo de erro.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Dado: os.EX_CANTCREAT

     Código de saída que significa que um arquivo de saída especificado
     pelo usuário não pôde ser criado.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Dado: os.EX_IOERR

     Código de saída que significa que ocorreu um erro ao fazer E/S em
     algum arquivo.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Dado: os.EX_TEMPFAIL

     Código de saída que significa que ocorreu uma falha temporária.
     Isso indica algo que pode não ser realmente um erro, como uma
     conexão de rede que não pôde ser feita durante uma operação de nova
     tentativa.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Dado: os.EX_PROTOCOL

     Código de saída que significa que uma troca de protocolo foi
     ilegal, inválida ou não compreendida.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Dado: os.EX_NOPERM

     Código de saída que significa que não havia permissões suficientes
     para executar a operação (mas sem intenção de causar problemas do
     sistema de arquivos).

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Dado: os.EX_CONFIG

     Código de saída que significa que ocorreu algum tipo de erro de
     configuração.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Dado: os.EX_NOTFOUND

     Código de saída que significa algo como “uma entrada não foi
     encontrada”.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Função: os.fork ()

     Cria um processo filho.  Retorna ‘0’ no filho e o ID de processo do
     filho no pai.  Se ocorrer um erro, uma exceção *note OSError: 417.
     é levantada.

     Note que algumas plataformas incluindo FreeBSD <= 6.3 e Cygwin têm
     problemas conhecidos ao usar ‘fork()’ a partir de um thread.

     Levanta um *note evento de auditoria: 19fa. ‘os.fork’ sem
     argumentos.

          Aviso: Se você usa soquetes TLS em um aplicação chamando
          ‘fork()’, consulte alerta na documentação do módulo *note ssl:
          d0.

          Aviso: No macOS, o uso desta função é inseguro quando
          combinado com o uso de APIs de sistema de nível mais alto, e
          isso inclui o uso de *note urllib.request: 10b.

     Alterado na versão 3.8: Chamar ‘fork()’ em um subinterpretador não
     é mais possível (*note RuntimeError: 195. é levantada).

     Alterado na versão 3.12: Se o Python for capaz de detectar que o
     seu processar tem várias threads, o *note os.fork(): 197. agora
     levanta uma exceção *note DeprecationWarning: 1a5.

     Optamos por apresentar isso como um alerta, quando detectável, para
     informar melhor aos desenvolvedores sobre um problema de design que
     a plataforma POSIX indica especificamente como sem suporte.  Mesmo
     em códigos que 'aparentem' funcionar, nunca foi seguro misturar
     threading com *note os.fork(): 197. em plataformas POSIX. O próprio
     ambiente de execução do CPython sempre fez chamadas à API que não
     são seguras para uso no processo filho quando existiam threads no
     pai (como ‘malloc’ e ‘free’).

     Os usuários do macOS ou usuários de implementações de libc ou
     malloc diferentes daquelas normalmente encontradas no glibc até o
     momento estão entre os que já têm maior probabilidade de sofrer com
     impasses ('deadlocks') ao executar esse código.

     Consulte esta discussão sobre fork ser incompatível com threads(2)
     para obter detalhes técnicos sobre o motivo pelo qual estamos
     revelando aos desenvolvedores esse problema de longa data de
     compatibilidade da plataforma.

     *note Disponibilidade: 1ed8.: POSIX, not WASI, not Android, not
     iOS.

 -- Função: os.forkpty ()

     Cria um processo filho, usando um novo pseudoterminal como o
     terminal de controle do filho.  Retorna um par de ‘(pid, fd)’, onde
     'pid' é ‘0’ no filho, o novo ID de processo do filho no pai e 'fd'
     é o descritor de arquivo do lado mestre do pseudoterminal.  Para
     uma abordagem mais portátil, use o módulo *note pty: b1.  Se
     ocorrer um erro, *note OSError: 417. é levantada.

     Levanta um *note evento de auditoria: 19fa. ‘os.forkpty’ sem
     argumentos.

          Aviso: No macOS, o uso desta função é inseguro quando
          combinado com o uso de APIs de sistema de nível mais alto, e
          isso inclui o uso de *note urllib.request: 10b.

     Alterado na versão 3.8: Chamar ‘forkpty()’ em um subinterpretador
     não é mais permitido (*note RuntimeError: 195. é levantada).

     Alterado na versão 3.12: Se o Python for capaz de detectar que o
     seu processo tem vários threads, isso agora levanta uma exceção
     *note DeprecationWarning: 1a5.  Veja a explicação mais longa em
     *note os.fork(): 197.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

 -- Função: os.kill (pid, sig, /)

     Envia o sinal 'sig' para o processo 'pid'.  Constantes dos sinais
     específicos disponíveis na plataforma host são definidas no módulo
     *note signal: c6.

     Windows: os sinais *note signal.CTRL_C_EVENT: 13af. e *note
     signal.CTRL_BREAK_EVENT: 13b0. são sinais especiais que só podem
     ser enviados para processos de console que compartilham uma janela
     de console comum, por exemplo, alguns subprocessos.  Qualquer outro
     valor para 'sig' fará com que o processo seja encerrado
     incondicionalmente pela API TerminateProcess e o código de saída
     será definido como 'sig'.

     Veja também *note signal.pthread_kill(): 1170.

     Levanta um *note evento de auditoria: 19fa. ‘os.kill’ com os
     argumentos ‘pid’ e ‘sig’.

     *note Disponibilidade: 1ed8.: Unix, Windows, not WASI, not iOS.

     Alterado na versão 3.2: Adicionado suporte ao Windows.

 -- Função: os.killpg (pgid, sig, /)

     Envia o sinal 'sig' para o grupo de processos 'pgid'.

     Levanta um *note evento de auditoria: 19fa. ‘os.killpg’ com os
     argumentos ‘pgid’ e ‘sig’.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not iOS.

 -- Função: os.nice (increment, /)

     Adiciona 'increment' ao nível de “nice” do processo.  Retorna um
     novo nível de “nice”.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

 -- Função: os.pidfd_open (pid, flags=0)

     Retorna um descritor de arquivo referente ao processo 'pid' com as
     'flags' definidas.  Este descritor pode ser usado para gerenciar o
     processo sem corridas e sinais.

     Veja a página man ‘pidfd_open(2)(3)’ para mais detalhes.

     *note Disponibilidade: 1ed8.: Linux >= 5.3, Android >= *note
     build-time: ba2. API level 31

     Adicionado na versão 3.9.

      -- Dado: os.PIDFD_NONBLOCK

          Este sinalizador indica que o descritor de arquivo será
          não-bloqueante.  Se o processo referenciado pelo descritor de
          arquivo ainda não tiver terminado, então uma tentativa de
          aguardar no descritor de arquivo usando ‘waitid(2)(4)’
          retornará imediatamente o erro *note EAGAIN: 2435. em vez de
          bloquear.

     *note Disponibilidade: 1ed8.: Linux >= 5.10

     Adicionado na versão 3.12.

 -- Função: os.plock (op, /)

     Trava os segmentos do programa na memória.  O valor de 'op'
     (definido em ‘<sys/lock.h>’) determina quais segmentos são
     travados.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not iOS.

 -- Função: os.popen (cmd, mode='r', buffering=-1)

     Abre um encadeamento, também conhecido como “pipe”, de ou para o
     comando 'cmd'.  O valor de retorno é um objeto arquivo aberto
     conectado ao encadeamento, que pode ser lido ou escrito dependendo
     se 'mode' é ‘'r'’ (padrão) ou ‘'w'’.  O argumento 'buffering' tem o
     mesmo significado que o argumento correspondente para a função
     embutida *note open(): 51c.  O objeto arquivo retornado lê ou
     escreve strings de texto em vez de bytes.

     O método ‘close’ retorna *note None: 675. se o subprocesso foi
     encerrado com sucesso, ou o código de retorno do subprocesso se
     houve um erro.  Em sistemas POSIX, se o código de retorno for
     positivo, ele representa o valor de retorno do processo deslocado
     para a esquerda em um byte.  Se o código de retorno for negativo, o
     processo foi encerrado pelo sinal dado pelo valor negado do código
     de retorno.  (Por exemplo, o valor de retorno pode ser ‘-
     signal.SIGKILL’ se o subprocesso foi eliminado.)  Em sistemas
     Windows, o valor de retorno contém o código de retorno inteiro com
     sinal do processo filho.

     No Unix, *note waitstatus_to_exitcode(): 923. pode ser usado para
     converter o resultado do método ‘close’ (status de saída) em um
     código de saída se não for ‘None’.  No Windows, o resultado do
     método ‘close’ é diretamente o código de saída (ou ‘None’).

     Isso é implementado usando *note subprocess.Popen: 199.; consulte a
     documentação desta classe para maneiras mais poderosas de gerenciar
     e se comunicar com subprocessos.

     *note Disponibilidade: 1ed8.: not WASI, not Android, not iOS.

          Nota: O *note Modo UTF-8 do Python: 656. afeta as codificações
          usadas para 'cmd' e conteúdo de encadeamento.

          *note popen(): a91. é um wrapper simples em torno de *note
          subprocess.Popen: 199.  Use *note subprocess.Popen: 199. ou
          *note subprocess.run(): b9e. para controlar opções como
          codificações.

 -- Função: os.posix_spawn (path, argv, env, *, file_actions=None,
          setpgroup=None, resetids=False, setsid=False, setsigmask=(),
          setsigdef=(), scheduler=None)

     Envolve a API da biblioteca C ‘posix_spawn()’ para uso em Python.

     A maioria dos usuários deveria usar *note subprocess.run(): b9e. em
     vez de *note posix_spawn(): 220.

     Os argumentos somente-posicional 'path', 'args', e 'env' são
     similares a *note execve(): 1138.  'env' pode ser ‘None’, caso em
     que o ambiente do processo atual é usado.

     O parâmetro 'path' é o caminho para o arquivo executável.  O 'path'
     deve conter um diretório.  Use *note posix_spawnp(): 1ba7. para
     passar um arquivo executável sem diretório.

     O argumento 'file_actions' pode ser uma sequência de tuplas
     descrevendo ações a serem tomadas em descritores de arquivo
     específicos no processo filho entre as etapas ‘fork()’ e ‘exec()’
     de implementação da biblioteca C. O primeiro item em cada tupla
     deve ser um dos três indicadores de tipo listados abaixo,
     descrevendo os elementos restantes da tupla:

      -- Dado: os.POSIX_SPAWN_OPEN

          (‘os.POSIX_SPAWN_OPEN’, 'fd', 'path', 'flags', 'mode')

          Efetua ‘os.dup2(os.open(path, flags, mode), fd)’.

      -- Dado: os.POSIX_SPAWN_CLOSE

          (‘os.POSIX_SPAWN_CLOSE’, 'fd')

          Efetua ‘os.close(fd)’.

      -- Dado: os.POSIX_SPAWN_DUP2

          (‘os.POSIX_SPAWN_DUP2’, 'fd', 'new_fd')

          Efetua ‘os.dup2(fd, new_fd)’.

      -- Dado: os.POSIX_SPAWN_CLOSEFROM

          (‘os.POSIX_SPAWN_CLOSEFROM’, 'fd')

          Efetua ‘os.closerange(fd, INF)’.

     Estas tuplas correspondem a chamadas de API da biblioteca C de
     ‘posix_spawn_file_actions_addopen()’,
     ‘posix_spawn_file_actions_addclose()’,
     ‘posix_spawn_file_actions_adddup2()’ e
     ‘posix_spawn_file_actions_addclosefrom_np()’ usadas para preparar
     para a chamada de ‘posix_spawn()’ em si.

     O argumento 'setpgroup' definirá o grupo de processos do filho para
     o valor especificado.  Se o valor especificado for 0, o ID do grupo
     de processo filho será igual ao ID do processo.  Se o valor de
     'setpgroup' não for definido, o filho herdará o ID do grupo de
     processos do pai.  Este argumento corresponde ao sinalizador
     ‘POSIX_SPAWN_SETPGROUP’ da biblioteca C.

     Se o argumento 'resetids' for ‘True’, ele irá reconfigurar o UID e
     GID efetivos do filho para o UID e GID reais do processo pai.  Se o
     argumento for ‘False’, então o filho retém o UID e GID efetivos do
     pai.  Em ambos os casos, se os bits de permissão set-user-ID e
     set-group-ID estiverem habilitados no arquivo executável, seu
     efeito vai substituir a configuração do UID e GID efetivos.  Este
     argumento corresponde ao sinalizador ‘POSIX_SPAWN_RESETIDS’ da
     biblioteca C.

     Se o argumento 'setsid' for ‘True’, ele criará um novo ID de sessão
     para ‘posix_spawn’.  'setsid' requer ‘POSIX_SPAWN_SETSID’ ou
     ‘POSIX_SPAWN_SETSID_NP’.  Caso contrário, *note
     NotImplementedError: 228. é levantada.

     O argumento 'setsigmask' definirá a máscara de sinal para o
     conjunto de sinais especificado.  Se o parâmetro não for usado, o
     filho herda a máscara de sinal do pai.  Este argumento corresponde
     ao sinalizador ‘POSIX_SPAWN_SETSIGMASK’ da biblioteca C.

     O argumento 'sigdef' redefinirá a disposição de todos os sinais no
     conjunto especificado.  Este argumento corresponde ao sinalizador
     ‘POSIX_SPAWN_SETSIGDEF’ da biblioteca C.

     O argumento 'scheduler' deve ser uma tupla contendo a política do
     agendador (opcional) e uma instância de *note sched_param: 168a.
     com os parâmetros do agendador.  Um valor ‘None’ no lugar da
     política do agendador indica que a política não está sendo
     fornecido.  Este argumento é uma combinação dos sinalizadores
     ‘POSIX_SPAWN_SETSCHEDPARAM’ e ‘POSIX_SPAWN_SETSCHEDULER’ da
     biblioteca C.

     Levanta um *note evento de auditoria: 19fa. ‘os.posix_spawn’ com os
     argumentos ‘path’, ‘argv’ e ‘env’.

     Adicionado na versão 3.8.

     Alterado na versão 3.13: o parâmetro 'env' pode ser ‘None’.
     ‘os.POSIX_SPAWN_CLOSEFROM’ está disponível nas plataformas onde
     ‘posix_spawn_file_actions_addclosefrom_np()’ existe.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

 -- Função: os.posix_spawnp (path, argv, env, *, file_actions=None,
          setpgroup=None, resetids=False, setsid=False, setsigmask=(),
          setsigdef=(), scheduler=None)

     Envolve a API da biblioteca C ‘posix_spawnp()’ para uso em Python.

     Semelhante a *note posix_spawn(): 220. exceto que o sistema procura
     o arquivo 'executable' na lista de diretórios especificados pela
     variável de ambiente ‘PATH’ (da mesma forma que para ‘execvp(3)’).

     Levanta um *note evento de auditoria: 19fa. ‘os.posix_spawn’ com os
     argumentos ‘path’, ‘argv’ e ‘env’.

     Adicionado na versão 3.8.

     *note Disponibilidade: 1ed8.: POSIX, not WASI, not Android, not
     iOS.

     Veja a documentação de *note posix_spawn(): 220.

 -- Função: os.register_at_fork (*, before=None, after_in_parent=None,
          after_in_child=None)

     Registra chamáveis a serem executados quando um novo processo filho
     é criado usando *note os.fork(): 197. ou APIs de clonagem de
     processos semelhantes.  Os parâmetros são opcionais e
     somente-nomeados.  Cada um especifica um ponto de chamada
     diferente.

        * 'before' é uma função chamada antes de criar um processo
          filho.

        * 'after_in_parent' é uma função chamada a partir do processo
          pai após criar um processo filho.

        * 'after_in_child' é uma função chamada a partir do processo
          filho.

     Essas chamadas são feitas apenas se o controle deve retornar ao
     interpretador Python.  Um lançamento típico de *note subprocess:
     d6. não irá acioná-los, pois o filho não entrará novamente no
     interpretador.

     As funções registradas para execução antes de criar um processo
     filho são chamadas na ordem de registro reversa.  As funções
     registradas para execução após o processo filho ser criado (no pai
     ou no filho) são chamadas na ordem de registro.

     Note que chamadas a ‘fork()’ feitas por código C de terceiros podem
     não chamar estas funções, a menos que ele explicitamente chamem
     *note PyOS_BeforeFork(): bd8, *note PyOS_AfterFork_Parent(): bd9. e
     *note PyOS_AfterFork_Child(): 3fb.

     Não há uma forma de desfazer o registro de uma função.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

     Adicionado na versão 3.7.

 -- Função: os.spawnl (mode, path, ...)
 -- Função: os.spawnle (mode, path, ..., env)
 -- Função: os.spawnlp (mode, file, ...)
 -- Função: os.spawnlpe (mode, file, ..., env)
 -- Função: os.spawnv (mode, path, args)
 -- Função: os.spawnve (mode, path, args, env)
 -- Função: os.spawnvp (mode, file, args)
 -- Função: os.spawnvpe (mode, file, args, env)

     Executa o programa 'path' em um novo processo.

     (Observe que o módulo *note subprocess: d6. fornece recursos mais
     poderosos para gerar novos processos e recuperar seus resultados;
     usar esse módulo é preferível a usar essas funções.  Verifique
     especialmente a seção *note Replacing Older Functions with the
     subprocess Module: 11c7.)

     Se 'mode' for *note P_NOWAIT: 2db8, esta função retorna o id do
     processo do novo processo; se 'mode' for *note P_WAIT: 2db9,
     retorna o código de saída do processo se ele sair normalmente, ou
     ‘-signal’, onde 'signal' é o sinal que matou o processo.  No
     Windows, o id do processo será na verdade o manipulador do
     processo, portanto, pode ser usado com a função *note waitpid():
     dc2.

     Nota sobre VxWorks: esta função não retorna ‘-signal’ se o novo
     processo é interrompido.  Em vez disso, ele levanta a exceção
     OSError.

     As variantes “l” e “v” das funções *note spawn*: 1826. diferem em
     como os argumentos de linha de comando são passados.  As variantes
     “l” são talvez as mais fáceis de trabalhar se o número de
     parâmetros for fixo quando o código for escrito; os parâmetros
     individuais simplesmente se tornam parâmetros adicionais para as
     funções ‘spawnl*()’.  As variantes “v” são boas quando o número de
     parâmetros é variável, com os argumentos sendo passados em uma
     lista ou tupla como o parâmetro 'args'.  Em ambos os casos, os
     argumentos para o processo filho devem começar com o nome do
     comando que está sendo executado.

     As variantes que incluem um segundo “p” próximo ao final (*note
     spawnlp(): 2db2, *note spawnlpe(): 2db3, *note spawnvp(): 2db6. e
     *note spawnvpe(): 2db7.) usarão a variável de ambiente ‘PATH’ para
     localizar o programa 'file'.  Quando o ambiente está sendo
     substituído (usando uma das variantes *note spawn*e: 1826,
     discutidas no próximo parágrafo), o novo ambiente é usado como
     fonte da variável ‘PATH’.  As outras variantes, *note spawnl():
     1826, *note spawnle(): 2db1, *note spawnv(): 2db4. e *note
     spawnve(): 2db5, não usarão a variável ‘PATH’ para localizar o
     executável; 'path' deve conter um caminho absoluto ou relativo
     apropriado.

     Para *note spawnle(): 2db1, *note spawnlpe(): 2db3, *note
     spawnve(): 2db5. e *note spawnvpe(): 2db7. (observe que todos eles
     terminam em “e”), o parâmetro 'env' deve ser um mapeamento que é
     usado para definir as variáveis de ambiente para o novo processo
     (elas são usadas no lugar do ambiente do processo atual); as
     funções *note spawnl(): 1826, *note spawnlp(): 2db2, *note
     spawnv(): 2db4. e *note spawnvp(): 2db6. fazem com que o novo
     processo herde o ambiente do processo atual.  Note que as chaves e
     os valores no dicionário 'env' devem ser strings; chaves ou valores
     inválidos farão com que a função falhe, com um valor de retorno de
     ‘127’.

     Como exemplo, as seguintes chamadas a *note spawnlp(): 2db2. e
     *note spawnvpe(): 2db7. são equivalentes:

          import os
          os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null')

          L = ['cp', 'index.html', '/dev/null']
          os.spawnvpe(os.P_WAIT, 'cp', L, os.environ)

     Levanta um *note evento de auditoria: 19fa. ‘os.spawn’ com os
     argumentos ‘mode’, ‘path’, ‘args’ e ‘env’.

     *note Disponibilidade: 1ed8.: Unix, Windows, not WASI, not Android,
     not iOS.

     *note spawnlp(): 2db2, *note spawnlpe(): 2db3, *note spawnvp():
     2db6. e *note spawnvpe(): 2db7. não estão disponíveis no Windows.
     *note spawnle(): 2db1. e *note spawnve(): 2db5. não são seguros
     para thread no Windows; recomendamos que você use o módulo *note
     subprocess: d6.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Dado: os.P_NOWAIT
 -- Dado: os.P_NOWAITO

     Valores possíveis para o parâmetro 'mode' para a família de funções
     *note spawn*: 1826.  Se qualquer um desses valores for fornecido,
     as funções *note spawn*: 1826. retornarão assim que o novo processo
     for criado, com o id do processo como o valor de retorno.

     *note Disponibilidade: 1ed8.: Unix, Windows.

 -- Dado: os.P_WAIT

     Valor possível para o parâmetro 'mode' para a família de funções
     *note spawn*: 1826.  Se for fornecido como 'mode', as funções *note
     spawn*: 1826. não retornarão até que o novo processo seja executado
     até a conclusão e retornará o código de saída do processo em que a
     execução foi bem-sucedida, ou ‘-signal’ se um sinal interromper o
     processo.

     *note Disponibilidade: 1ed8.: Unix, Windows.

 -- Dado: os.P_DETACH
 -- Dado: os.P_OVERLAY

     Valores possíveis para o parâmetro 'mode' para a família de funções
     *note spawn*: 1826.  Eles são menos portáveis do que os listados
     acima.  *note P_DETACH: 2dbb. é semelhante a *note P_NOWAIT: 2db8,
     mas o novo processo é separado do console do processo de chamada.
     Se *note P_OVERLAY: 2dbc. for usado, o processo atual será
     substituído; a função *note spawn*: 1826. não retornará.

     *note Disponibilidade: 1ed8.: Windows.

 -- Função: os.startfile (path[, operation][, arguments][, cwd][,
          show_cmd])

     Inicia um arquivo com sua aplicação associada.

     Quando 'operation' não é especificado, isso atua como um clique
     duplo no arquivo no Windows Explorer, ou como fornecer o nome do
     arquivo como um argumento para o comando ‘start’ do console
     interativo de comandos: o arquivo é aberto com qualquer aplicação
     (se houver) com a extensão associada.

     Quando outra 'operation' é fornecida, ela deve ser um “verbo de
     comando” que especifica o que deve ser feito com o arquivo.  Verbos
     comuns documentados pela Microsoft são ‘'open'’, ‘'print'’ e
     ‘'edit'’ (para serem usados em arquivos), bem como ‘'explore'’ e
     ‘'find'’ (para serem usados em diretórios).

     Ao iniciar uma aplicação, especifique 'arguments' a serem passados
     como uma única string.  Este argumento pode não ter efeito quando
     esta função é usada para iniciar um documento.

     O diretório de trabalho padrão é herdado, mas pode ser substituído
     pelo argumento 'cwd'.  Este deve ser um caminho absoluto.  Um
     'path' relativo será resolvido levando em consideração este
     argumento.

     Use 'show_cmd' para substituir o estilo de janela padrão.  Se isso
     terá algum efeito irá depender da aplicação sendo iniciada.  Os
     valores são inteiros conforme implementado pela função Win32
     ‘ShellExecute()’.

     *note startfile(): 1a0f. retorna assim que a aplicação associada é
     iniciada.  Não há opção de aguardar o fechamento da aplicação, e
     nenhuma maneira de recuperar o status de saída da aplicação.  O
     parâmetro 'path' é relativo ao diretório atual ou ao 'cwd'.  Se
     você quiser usar um caminho absoluto, certifique-se que o primeiro
     caractere não seja uma barra (‘'/'’).  Use *note pathlib: a4. ou a
     função *note os.path.normpath(): 135e. para garantir que os
     caminhos sejam codificados corretamente para Win32.

     Para reduzir a sobrecarga de inicialização do interpretador, a
     função Win32 ‘ShellExecute()’ não é resolvida até que esta função
     seja chamada pela primeira vez.  Se a função não puder ser
     resolvida, uma exceção *note NotImplementedError: 228. será
     levantada.

     Levanta um *note evento de auditoria: 19fa. ‘os.startfile’ com os
     argumentos ‘path’ e ‘operation’.

     Levanta um *note evento de auditoria: 19fa. ‘os.startfile/2’ com os
     argumentos ‘path’, ‘operation’, ‘arguments’, ‘cwd’ e ‘show_cmd’.

     *note Disponibilidade: 1ed8.: Windows.

     Alterado na versão 3.10: Adicionados os argumentos 'arguments',
     'cwd' e 'show_cmd', e o evento de auditoria ‘os.startfile/2’.

 -- Função: os.system (command)

     Executa o comando (uma string) em um subshell.  Isso é implementado
     chamando a função C padrão ‘system()’, e tem as mesmas limitações.
     Alterações em *note sys.stdin: 53d. etc.  não são refletidas no
     ambiente do comando executado.  Se 'command' gerar qualquer saída,
     ela será enviada ao fluxo de saída padrão do interpretador.  O
     padrão C não especifica o significado do valor de retorno da função
     C, então o valor de retorno da função Python depende do sistema.

     No Unix, o valor de retorno é o status de saída do processo
     codificado no formato especificado para *note wait(): dc0.

     No Windows, o valor de retorno é aquele retornado pelo shell do
     sistema após a execução de 'command'.  O shell é fornecido pela
     variável de ambiente Windows ‘COMSPEC’: normalmente é ‘cmd.exe’,
     que retorna o status de saída da execução do comando; em sistemas
     que usam um shell não nativo, consulte a documentação do shell.

     O módulo *note subprocess: d6. fornece recursos mais poderosos para
     gerar novos processos e recuperar seus resultados; usar esse módulo
     é preferível a usar esta função.  Veja a seção *note Replacing
     Older Functions with the subprocess Module: 11c7. na documentação
     do *note subprocess: d6. para algumas receitas úteis.

     No Unix, *note waitstatus_to_exitcode(): 923. pode ser usada para
     converter o resultado (status de saída) em um código de saída.  No
     Windows, o resultado é diretamente o código de saída.

     Levanta um *note evento de auditoria: 19fa. ‘os.system’ com o
     argumento ‘command’.

     *note Disponibilidade: 1ed8.: Unix, Windows, not WASI, not Android,
     not iOS.

 -- Função: os.times ()

     Retorna os tempos do processo global atual.  O valor de retorno é
     um objeto com cinco atributos:

        * ‘user’ - tempo do usuário

        * ‘system’ - tempo do sistema

        * ‘children_user’ - tempo do usuário de todos os processos
          filhos

        * ‘children_system’ - tempo do sistema de todos os processos
          filhos

        * ‘elapsed’ - tempo real decorrido desde um ponto fixo no
          passado

     Para compatibilidade com versões anteriores, esse objeto também se
     comporta como uma tupla de 5 elementos contendo ‘user’, ‘system’,
     ‘children_user’, ‘children_system’ e ‘elapsed’ nessa ordem.

     Consulte as páginas de manual ‘times(2)(5)’ e times(3)(6) no Unix
     ou o GetProcessTimes MSDN(7) no Windows.  No Windows, apenas ‘user’
     e ‘system’ são conhecidos; os outros atributos são zero.

     *note Disponibilidade: 1ed8.: Unix, Windows.

     Alterado na versão 3.3: Tipo de retorno foi alterado de uma tupla
     para um objeto tupla ou similar com atributos nomeados.

 -- Função: os.wait ()

     Aguarda a conclusão de um processo filho e retorna uma tupla
     contendo seu pid e indicação de status de saída: um número de 16
     bits, cujo byte baixo é o número do sinal que interrompeu o
     processo e cujo byte alto é o status de saída (se o número do sinal
     é zero); o bit alto do byte baixo é definido se um arquivo
     principal foi produzido.

     Se não houver filhos que possam ser aguardados, uma exceção *note
     ChildProcessError: 1091. é levantada.

     *note waitstatus_to_exitcode(): 923. pode ser usado para converter
     o status de saída em um código de saída.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

     Ver também
     ..........

     As outras funções ‘wait*()’ documentadas abaixo podem ser usadas
     para aguardar a conclusão de um processo filho específico e ter
     mais opções.  *note waitpid(): dc2. é o único também disponível no
     Windows.

 -- Função: os.waitid (idtype, id, options, /)

     Aguarda a conclusão de um processo filho.

     'idtype' pode ser *note P_PID: 2dbd, *note P_PGID: 2dbe, *note
     P_ALL: 2dbf. ou (no Linux) *note P_PIDFD: 920.  A interpretação de
     'id' depende disso; veja suas descrições individuais.

     'options' é uma combinação OU de sinalizadores.  Pelo menos um
     entre *note WEXITED: 2dc0, *note WSTOPPED: 2dc1. ou *note
     WCONTINUED: 2dc2. é obrigatório; *note WNOHANG: 2dc3. e *note
     WNOWAIT: 2dc4. são sinalizadores opcionais adicionais.

     O valor de retorno é um objeto que representa os dados contidos na
     estrutura ‘siginfo_t’ com os seguintes atributos:

        * ‘si_pid’ (ID do processo)

        * ‘si_uid’ (ID de usuário real do filho)

        * ‘si_signo’ (sempre *note SIGCHLD: 2dc5.)

        * ‘si_status’ (o status de saída ou número do sinal, dependendo
          de ‘si_code’)

        * ‘si_code’ (veja *note CLD_EXITED: 2dc6. para possíveis
          valores)

     Se *note WNOHANG: 2dc3. for especificado e não houver filhos
     correspondentes no estado solicitado, ‘None’ será retornado.  Caso
     contrário, se não houver filhos correspondentes que possam ser
     esperados, *note ChildProcessError: 1091. será levantada.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

     Adicionado na versão 3.3.

     Alterado na versão 3.13: Esta função agora também está disponível
     no MacOS.

 -- Função: os.waitpid (pid, options, /)

     Os detalhes desta função diferem no Unix e no Windows.

     No Unix: aguarda a conclusão de um processo filho dado pelo id de
     processo 'pid' e retorna uma tupla contendo seu id de processo e
     indicação de status de saída (codificado como para *note wait():
     dc0.).  A semântica da chamada é afetada pelo valor do inteiro
     'options', que deve ser ‘0’ para operação normal.

     Se 'pid' for maior que ‘0’, *note waitpid(): dc2. solicita
     informações de status para aquele processo específico.  Se 'pid'
     for ‘0’, a solicitação é para o status de qualquer filho no grupo
     de processos do processo atual.  Se 'pid' for ‘-1’, a solicitação
     pertence a qualquer filho do processo atual.  Se 'pid' for menor
     que ‘-1’, o status é solicitado para qualquer processo no grupo de
     processos ‘-pid’ (o valor absoluto de 'pid').

     'options' é uma combinação OU de sinalizadores.  Se contiver *note
     WNOHANG: 2dc3. e não houver filhos correspondentes no estado
     solicitado, ‘(0, 0)’ será retornado.  Caso contrário, se não houver
     filhos correspondentes que possam ser esperados, *note
     ChildProcessError: 1091. será levantada.  Outras opções que podem
     ser usadas são *note WUNTRACED: 2dc7. e *note WCONTINUED: 2dc2.

     No Windows: aguarda a conclusão de um processo fornecido pelo
     identificador de processo 'pid' e retorna uma tupla contendo 'pid',
     e seu status de saída deslocado 8 bits para a esquerda (o
     deslocamento torna o uso da função em várias plataformas mais
     fácil).  Um 'pid' menor ou igual a ‘0’ não tem nenhum significado
     especial no Windows e levanta uma exceção.  O valor de inteiros
     'options' não tem efeito.  'pid' pode se referir a qualquer
     processo cujo id é conhecido, não necessariamente um processo
     filho.  As funções *note spawn*: 1826. chamadas com *note P_NOWAIT:
     2db8. retornam manipuladores de processo adequados.

     *note waitstatus_to_exitcode(): 923. pode ser usado para converter
     o status de saída em um código de saída.

     *note Disponibilidade: 1ed8.: Unix, Windows, not WASI, not Android,
     not iOS.

     Alterado na versão 3.5: Se a chamada de sistema é interrompida e o
     tratador de sinal não levanta uma exceção, a função agora tenta
     novamente a chamada de sistema em vez de levantar uma exceção *note
     InterruptedError: db0. (consulte PEP 475(8) para entender a
     justificativa).

 -- Função: os.wait3 (options)

     Semelhante a *note waitpid(): dc2, exceto que nenhum argumento de
     id de processo é fornecido e uma tupla de 3 elementos contendo o id
     do processo filho, indicação de status de saída e informações de
     uso de recursos é retornada.  Consulte *note resource.getrusage():
     1478. para obter detalhes sobre as informações de uso de recursos.
     O argumento 'option' é o mesmo fornecido para *note waitpid(): dc2.
     e *note wait4(): dbf.

     *note waitstatus_to_exitcode(): 923. pode ser usado para converter
     o status de saída em um código de saída.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

 -- Função: os.wait4 (pid, options)

     Semelhante a *note waitpid(): dc2, exceto uma tupla de 3 elementos,
     contendo o id do processo filho, indicação de status de saída e
     informações de uso de recursos é retornada.  Consulte *note
     resource.getrusage(): 1478. para obter detalhes sobre as
     informações de uso de recursos.  Os argumentos para *note wait4():
     dbf. são os mesmos que aqueles fornecidos a *note waitpid(): dc2.

     *note waitstatus_to_exitcode(): 923. pode ser usado para converter
     o status de saída em um código de saída.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

 -- Dado: os.P_PID
 -- Dado: os.P_PGID
 -- Dado: os.P_ALL
 -- Dado: os.P_PIDFD

     Estes são os valores possíveis para 'idtype' em *note waitid():
     dc1.  Eles afetam como 'id' é interpretado:

        * ‘P_PID’ - espera pelo filho cujo PID é 'id'.

        * ‘P_PGID’ - espera por qualquer filho cujo ID do grupo de
          progresso seja 'id'.

        * ‘P_ALL’ - espera por qualquer filho; 'id' é ignorado.

        * ‘P_PIDFD’ - espera pelo filho identificado pelo descritor de
          arquivo 'id' (um descritor de arquivo de processo criado com
          *note pidfd_open(): 47a.).

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

          Nota: ‘P_PIDFD’ só está disponível no Linux >= 5.4.

     Adicionado na versão 3.3.

     Adicionado na versão 3.9: A constante ‘P_PIDFD’.

 -- Dado: os.WCONTINUED

     Este sinalizador 'options' para *note waitpid(): dc2, *note
     wait3(): dbe, *note wait4(): dbf. e *note waitid(): dc1. faz com
     que os processos filhos sejam reportados se eles tiverem continuado
     de uma parada de controle de trabalho desde que foram reportados
     pela última vez.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

 -- Dado: os.WEXITED

     Este sinalizador 'options' para *note waitid(): dc1. faz com que os
     processos filhos que terminaram sejam reportados.

     As outras funções ‘wait*’ sempre reportam filhos que terminaram,
     então esta opção não está disponível para eles.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

     Adicionado na versão 3.3.

 -- Dado: os.WSTOPPED

     Este sinalizador 'options' para *note waitid(): dc1. faz com que os
     processos filhos que foram parados pela entrega de um sinal sejam
     reportados.

     Esta opção não está disponível para as outras funções ‘wait*’.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

     Adicionado na versão 3.3.

 -- Dado: os.WUNTRACED

     Este sinalizador de 'options' para *note waitpid(): dc2, *note
     wait3(): dbe. e *note wait4(): dbf. faz com que os processos filho
     também sejam reportados se eles foram interrompidos, mas seu estado
     atual não foi reportado desde que foram parados.

     Esta opção não está disponível para *note waitid(): dc1.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

 -- Dado: os.WNOHANG

     Este sinalizador 'options' faz com que *note waitpid(): dc2, *note
     wait3(): dbe, *note wait4(): dbf. e *note waitid(): dc1. retornem
     imediatamente se nenhum status de processo filho estiver disponível
     imediatamente.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

 -- Dado: os.WNOWAIT

     Este sinalizador 'options' faz com que *note waitid(): dc1. deixe o
     filho em um estado de espera, para que uma chamada ‘wait*()’
     posterior possa ser usada para recuperar as informações de status
     do filho novamente.

     Esta opção não está disponível para as outras funções ‘wait*’.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

 -- Dado: os.CLD_EXITED
 -- Dado: os.CLD_KILLED
 -- Dado: os.CLD_DUMPED
 -- Dado: os.CLD_TRAPPED
 -- Dado: os.CLD_STOPPED
 -- Dado: os.CLD_CONTINUED

     Estes são os valores possíveis para ‘si_code’ no resultado
     retornado por *note waitid(): dc1.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

     Adicionado na versão 3.3.

     Alterado na versão 3.9: Adicionados os valores *note CLD_KILLED:
     91e. e *note CLD_STOPPED: 91f.

 -- Função: os.waitstatus_to_exitcode (status)

     Converte um status de espera em um código de saída.

     No Unix:

        * Se o processo saiu normalmente (se ‘WIFEXITED(status)’ for
          verdadeiro), retorna o status de saída do processo (retorna
          ‘WEXITSTATUS(status)’): resultado maior ou igual a 0.

        * Se o processo foi encerrado por um sinal (se
          ‘WIFSIGNALED(status)’ for verdadeiro), retorna ‘-signum’ onde
          'signum' é o número do sinal que causou o encerramento do
          processo (retorna ‘-WTERMSIG(status)’): resultado menor que 0.

        * Do contrário, levanta uma exceção *note ValueError: 202.

     No Windows, retorna 'status' deslocado para a direita em 8 bits.

     No Unix, se o processo está sendo rastreado ou se *note waitpid():
     dc2. foi chamado com a opção *note WUNTRACED: 2dc7, o chamador deve
     primeiro verificar se ‘WIFSTOPPED(status)’ é verdadeiro.  Esta
     função não deve ser chamada se ‘WIFSTOPPED(status)’ for verdadeiro.

     Ver também
     ..........

     As funções *note WIFEXITED(): 2dcb, *note WEXITSTATUS(): 2dcc,
     *note WIFSIGNALED(): 2dcd, *note WTERMSIG(): 2dce, *note
     WIFSTOPPED(): 2dcf, *note WSTOPSIG(): 2dd0.

     *note Disponibilidade: 1ed8.: Unix, Windows, not WASI, not Android,
     not iOS.

     Adicionado na versão 3.9.

As funções a seguir recebem um código de status do processo conforme
retornado por *note system(): 14a5, *note wait(): dc0. ou *note
waitpid(): dc2. como parâmetro.  Eles podem ser usados para determinar a
disposição de um processo.

 -- Função: os.WCOREDUMP (status, /)

     Retorna ‘True’ se um despejo de memória '(core dump)' foi gerado
     para o processo; caso contrário, retorna ‘False’.

     Esta função deve ser empregada apenas se *note WIFSIGNALED(): 2dcd.
     for verdadeira.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

 -- Função: os.WIFCONTINUED (status)

     Retorna ‘True’ se um filho interrompido foi retomado pela entrega
     de *note SIGCONT: 2dd3. (se o processo foi continuado de uma parada
     de controle de trabalho); caso contrário, retorna ‘False’.

     Veja a opção *note WCONTINUED: 2dc2.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

 -- Função: os.WIFSTOPPED (status)

     Retorna ‘True’ se o processo foi interrompido pela entrega de um
     sinal; caso contrário, retorna ‘False’.

     *note WIFSTOPPED(): 2dcf. só retorna ‘True’ se a chamada de *note
     waitpid(): dc2. foi feita usando a opção *note WUNTRACED: 2dc7. ou
     quando o processo está sendo rastreado (veja ‘ptrace(2)(9)’).

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

 -- Função: os.WIFSIGNALED (status)

     Retorna ‘True’ se o processo foi encerrado por um sinal; caso
     contrário, retorna ‘False’.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

 -- Função: os.WIFEXITED (status)

     Retorna ‘True’ se o processo foi encerrado normalmente, isto é,
     chamando ‘exit()’ ou ‘_exit()’, ou retornando de ‘main()’; caso
     contrário, retorna ‘False’.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

 -- Função: os.WEXITSTATUS (status)

     Retorna o status de saída do processo.

     Esta função deve ser empregada apenas se *note WIFEXITED(): 2dcb.
     for verdadeira.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

 -- Função: os.WSTOPSIG (status)

     Retorna o sinal que causou a interrupção do processo.

     Esta função deve ser empregada apenas se *note WIFSTOPPED(): 2dcf.
     for verdadeira.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

 -- Função: os.WTERMSIG (status)

     Retorna o número do sinal que causou o encerramento do processo.

     Esta função deve ser empregada apenas se *note WIFSIGNALED(): 2dcd.
     for verdadeira.

     *note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

   ---------- Footnotes ----------

   (1) https://msdn.microsoft.com/44228cf2-6306-466c-8f16-f513cd3ba8b5

   (2) https://discuss.python.org/t/33555

   (3) https://manpages.debian.org/pidfd_open(2)

   (4) https://manpages.debian.org/waitid(2)

   (5) https://manpages.debian.org/times(2)

   (6) https://man.freebsd.org/cgi/man.cgi?time(3)

   (7) 
https://docs.microsoft.com/windows/win32/api/processthreadsapi/nf-processthreadsapi-getprocesstimes

   (8) https://peps.python.org/pep-0475/

   (9) https://manpages.debian.org/ptrace(2)


File: python.info,  Node: Interface do agendador,  Next: Diversas informações de sistema,  Prev: Gerenciamento de processo,  Up: os — Diversas interfaces de sistema operacional

5.16.1.12 Interface do agendador
................................

Essas funções controlam como o tempo de CPU de um processo é alocado
pelo sistema operacional.  Eles estão disponíveis apenas em algumas
plataformas Unix.  Para informações mais detalhadas, consulte suas
páginas man do Unix.

Adicionado na versão 3.3.

As políticas de agendamento a seguir serão expostas se houver suporte
pelo sistema operacional.

 -- Dado: os.SCHED_OTHER

     A política de agendamento padrão.

 -- Dado: os.SCHED_BATCH

     Política de agendamento para processos com uso intensivo de CPU que
     tenta preservar a interatividade no resto do computador.

 -- Dado: os.SCHED_IDLE

     Política de agendamento para tarefas em segundo plano de prioridade
     extremamente baixa.

 -- Dado: os.SCHED_SPORADIC

     Política de agendamento para programas de servidor esporádicos.

 -- Dado: os.SCHED_FIFO

     Uma política de agendamento Primeiro a Entrar, Primeiro a Sair
     (First In First Out - FIFO).

 -- Dado: os.SCHED_RR

     Uma política de agendamento round-robin.

 -- Dado: os.SCHED_RESET_ON_FORK

     Este sinalizador pode ser operado em OU com qualquer outra política
     de agendamento.  Quando um processo com este sinalizador definido
     bifurca, a política de agendamento e a prioridade de seu filho são
     redefinidas para o padrão.

 -- Classe: os.sched_param (sched_priority)

     Esta classe representa parâmetros de agendamento ajustáveis usados
     em *note sched_setparam(): 114e, *note sched_setscheduler(): 114f.
     e *note sched_getparam(): 114a.  É imutável.

     Neste momento, há somente um único parâmetro possível:

      -- Atributo: sched_priority

          A prioridade de agendamento para uma política de agendamento.

 -- Função: os.sched_get_priority_min (policy)

     Obtém o valor mínimo de prioridade para 'policy'.  'policy' é uma
     das constantes de política de agendamento acima.

 -- Função: os.sched_get_priority_max (policy)

     Obtém o valor máximo de prioridade para 'policy'.  'policy' é uma
     das constantes de política de agendamento acima.

 -- Função: os.sched_setscheduler (pid, policy, param, /)

     Define a política de agendamento para o processo com PID 'pid'.  Um
     'pid' de 0 significa o processo de chamada.  'policy' é uma das
     constantes de política de agendamento acima.  'param' é uma
     instância de *note sched_param: 168a.

 -- Função: os.sched_getscheduler (pid, /)

     Retorna a política de agendamento para o processo com PID 'pid'.
     Um 'pid' de 0 significa o processo de chamada.  O resultado é uma
     das constantes de política de agendamento acima.

 -- Função: os.sched_setparam (pid, param, /)

     Define os parâmetros de agendamento para o processo com PID 'pid'.
     Um 'pid' de 0 significa o processo de chamada.  'param' é uma
     instância de *note sched_param: 168a.

 -- Função: os.sched_getparam (pid, /)

     Retorna os parâmetros de agendamento como uma instância de *note
     sched_param: 168a. para o processo com PID 'pid'.  Um 'pid' de 0
     significa o processo de chamada.

 -- Função: os.sched_rr_get_interval (pid, /)

     Retorna o quantum round-robin em segundos para o processo com PID
     'pid'.  Um 'pid' de 0 significa o processo de chamada.

 -- Função: os.sched_yield ()

     Abandona voluntariamente a CPU. Veja ‘sched_yield(2)(1)’ para
     detalhes.

 -- Função: os.sched_setaffinity (pid, mask, /)

     Restringe o processo com PID 'pid' (ou o processo atual se zero)
     para um conjunto de CPUs.  'mask' é um iterável de inteiros que
     representam o conjunto de CPUs às quais o processo deve ser
     restrito.

 -- Função: os.sched_getaffinity (pid, /)

     Retorna o conjunto de CPUs ao qual o processo com PID 'pid' está
     restrito.

     Se 'pid' for zero, retorna o conjunto de CPUs às quais a thread
     chamadora do processo atual está restrita.

     Veja também a função *note process_cpu_count(): 1c4.

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/sched_yield(2)


File: python.info,  Node: Diversas informações de sistema,  Next: Números aleatórios<2>,  Prev: Interface do agendador,  Up: os — Diversas interfaces de sistema operacional

5.16.1.13 Diversas informações de sistema
.........................................

 -- Função: os.confstr (name, /)

     Retorna valores de configuração do sistema com valor de string.
     'name' especifica o valor de configuração a ser recuperado; pode
     ser uma string que é o nome de um valor de sistema definido; esses
     nomes são especificados em vários padrões (POSIX, Unix 95, Unix 98
     e outros).  Algumas plataformas também definem nomes adicionais.
     Os nomes conhecidos pelo sistema operacional são fornecidos como as
     chaves do dicionário ‘confstr_names’.  Para variáveis de
     configuração não incluídas nesse mapeamento, passar um número
     inteiro para 'name' também é aceito.

     Se o valor de configuração especificado por 'name' não for
     definido, retorna ‘None’.

     Se 'name' for uma string e não for conhecida, *note ValueError:
     202. é levantada.  Se um valor específico para 'name' não for
     compatível com o sistema operacional do computador, mesmo que seja
     incluído em ‘confstr_names’, uma *note OSError: 417. é levantada
     com *note errno.EINVAL: 1b66. como número do erro.

     *note Disponibilidade: 1ed8.: Unix.

 -- Dado: os.confstr_names

     Nomes de mapeamento de dicionário aceitos por *note confstr():
     1650. para os valores inteiros definidos para esses nomes pelo
     sistema operacional do computador.  Isso pode ser usado para
     determinar o conjunto de nomes conhecidos pelo sistema.

     *note Disponibilidade: 1ed8.: Unix.

 -- Função: os.cpu_count ()

     Retorna o número de CPUs lógicas do 'sistema'.  Retorna ‘None’ se
     não determinado.

     A função *note process_cpu_count(): 1c4. pode ser usada para obter
     o número de CPUs lógicas utilizáveis pela thread de chamada do
     'processo atual'.

     Adicionado na versão 3.4.

     Alterado na versão 3.13: If *note -X cpu_count: 176. is given or
     *note PYTHON_CPU_COUNT: 210. is set, *note cpu_count(): 1c5.
     returns the override value 'n'.

 -- Função: os.getloadavg ()

     Retorna o número de processos na fila de execução do sistema em
     média nos últimos 1, 5 e 15 minutos ou levanta *note OSError: 417.
     se a média de carga não foi obtida.

     *note Disponibilidade: 1ed8.: Unix.

 -- Função: os.process_cpu_count ()

     Obtém o número de CPUs lógicas utilizáveis pelo thread de chamada
     do 'processo atual'.  Retorna ‘None’ se indeterminado.  Pode ser
     menor que *note cpu_count(): 1c5. dependendo da afinidade da CPU.

     A função *note cpu_count(): 1c5. pode ser usada para obter o número
     de CPUs lógicas no 'sistema'.

     If *note -X cpu_count: 176. is given or *note PYTHON_CPU_COUNT:
     210. is set, *note process_cpu_count(): 1c4. returns the override
     value 'n'.

     Veja também a função *note sched_getaffinity(): 1149.

     Adicionado na versão 3.13.

 -- Função: os.sysconf (name, /)

     Retorna valores de configuração do sistema com valor inteiro.  Se o
     valor de configuração especificado por 'name' não estiver definido,
     ‘-1’ é retornado.  Os comentários sobre o parâmetro 'name' para
     *note confstr(): 1650. se aplicam aqui também; o dicionário que
     fornece informações sobre os nomes conhecidos é fornecido por
     ‘sysconf_names’.

     *note Disponibilidade: 1ed8.: Unix.

 -- Dado: os.sysconf_names

     Nomes de mapeamento de dicionário aceitos por *note sysconf():
     1651. para os valores inteiros definidos para esses nomes pelo
     sistema operacional.  Isso pode ser usado para determinar o
     conjunto de nomes conhecidos pelo sistema.

     *note Disponibilidade: 1ed8.: Unix.

     Alterado na versão 3.11: Adiciona o nome ‘'SC_MINSIGSTKSZ'’.

Os dados a seguir são usados para operações de manipulação de caminhos
de arquivos e diretórios.  Estão definidos e disponíveis para todas as
plataformas.

Operações de nível mais alto em nomes de caminho são definidos no módulo
*note os.path: a2.

 -- Dado: os.curdir

     A string constante usada pelo sistema operacional para se referir
     ao diretório atual.  Isso é ‘'.'’ para Windows e POSIX. Também
     disponível via *note os.path: a2.

 -- Dado: os.pardir

     A string constante usada pelo sistema operacional para se referir
     ao diretório pai.  Isso é ‘'..'’ para Windows e POSIX. Também
     disponível via *note os.path: a2.

 -- Dado: os.sep

     O caractere usado pelo sistema operacional para separar os
     componentes do nome do caminho.  Este é ‘'/'’ para POSIX e ‘'\\'’
     para Windows.  Observe que saber disso não é suficiente para ser
     capaz de analisar ou concatenar nomes de caminho – use *note
     os.path.split(): 298a. e *note os.path.join(): 171f. – mas
     ocasionalmente é útil.  Também disponível via *note os.path: a2.

 -- Dado: os.altsep

     Um caractere alternativo usado pelo sistema operacional para
     separar os componentes do nome de caminho, ou ‘None’ se apenas um
     caractere separador existir.  Isso é definido como ‘'/'’ em
     sistemas Windows onde ‘sep’ é uma contrabarra.  Também disponível
     via *note os.path: a2.

 -- Dado: os.extsep

     O caractere que separa o nome do arquivo base da extensão; por
     exemplo, o ‘'.'’ em ‘os.py’.  Também disponível via *note os.path:
     a2.

 -- Dado: os.pathsep

     O caractere convencionalmente usado pelo sistema operacional para
     separar os componentes do caminho de pesquisa (como em ‘PATH’),
     como ‘':'’ para POSIX ou ‘';'’ para Windows.  Também disponível via
     *note os.path: a2.

 -- Dado: os.defpath

     O caminho de pesquisa padrão usado por *note exec*p*: 2d95. e *note
     spawn*p*: 1826. se o ambiente não tiver uma chave ‘'PATH'’.  Também
     disponível via *note os.path: a2.

 -- Dado: os.linesep

     A string usada para separar (ou melhor, encerrar) linhas na
     plataforma atual.  Pode ser um único caractere, como ‘'\n'’ para
     POSIX, ou múltiplos caracteres, por exemplo, ‘'\r\n'’ para Windows.
     Não use 'os.linesep' como terminador de linha ao escrever arquivos
     abertos em modo de texto (o padrão); use um único ‘'\n'’ ao invés,
     em todas as plataformas.

 -- Dado: os.devnull

     O caminho do arquivo do dispositivo nulo.  Por exemplo:
     ‘'/dev/null'’ para POSIX, ‘'nul'’ para Windows.  Também disponível
     via *note os.path: a2.

 -- Dado: os.RTLD_LAZY
 -- Dado: os.RTLD_NOW
 -- Dado: os.RTLD_GLOBAL
 -- Dado: os.RTLD_LOCAL
 -- Dado: os.RTLD_NODELETE
 -- Dado: os.RTLD_NOLOAD
 -- Dado: os.RTLD_DEEPBIND

     Sinalizadores para uso com as funções *note setdlopenflags(): 115e.
     e *note getdlopenflags(): 1557.  Veja a página man do Unix
     ‘dlopen(3)(1)’ para saber o que significam os diferentes
     sinalizadores.

     Adicionado na versão 3.3.

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/dlopen(3)


File: python.info,  Node: Números aleatórios<2>,  Prev: Diversas informações de sistema,  Up: os — Diversas interfaces de sistema operacional

5.16.1.14 Números aleatórios
............................

 -- Função: os.getrandom (size, flags=0)

     Obtém até 'size' bytes aleatórios.  Esta função pode retornar menos
     bytes que a quantia requisitada.

     Esses bytes podem ser usados para propagar geradores de número
     aleatório no espaço do usuário ou para fins criptográficos.

     ‘getrandom()’ depende da entropia obtida de drivers de dispositivos
     e outras fontes de ruído ambiental.  A leitura desnecessária de
     grandes quantidades de dados terá um impacto negativo sobre outros
     usuários dos dispositivos ‘/dev/random’ e ‘/dev/urandom’.

     O argumento 'flags' é uma máscara de bits que pode conter zero ou
     mais dos seguintes valores operados com OU: *note os.GRND_RANDOM:
     2de4. e *note GRND_NONBLOCK: 2de5.

     Veja também a página de manual do getrandom()(1) do Linux.

     *note Disponibilidade: 1ed8.: Linux >= 3.17.

     Adicionado na versão 3.6.

 -- Função: os.urandom (size, /)

     Retorna uma sequência de bytes de tamanho 'size' aleatórios
     próprios para uso criptográfico.

     Esta função retorna bytes aleatórios de uma fonte de aleatoriedade
     específica do sistema operacional.  Os dados retornados devem ser
     imprevisíveis o suficiente para aplicações criptográficos, embora
     sua qualidade exata dependa da implementação do sistema
     operacional.

     No Linux, se a chamada de sistema ‘getrandom()’ estiver disponível,
     ela é usada no modo bloqueante: bloqueia até que o pool de entropia
     urandom do sistema seja inicializado (128 bits de entropia são
     coletados pelo kernel).  Veja a PEP 524(2) para a justificativa.
     No Linux, a função *note getrandom(): cdd. pode ser usada para
     obter bytes aleatórios no modo não bloqueante (usando a sinalização
     *note GRND_NONBLOCK: 2de5.) ou para pesquisar até que o pool de
     entropia urandom do sistema seja inicializado.

     Em um sistema semelhante ao Unix, bytes aleatórios são lidos do
     dispositivo ‘/dev/urandom’.  Se o dispositivo ‘/dev/urandom’ não
     estiver disponível ou não for legível, a exceção *note
     NotImplementedError: 228. é levantada.

     No Windows, ainda vai usar ‘BCryptGenRandom()’.

     Ver também
     ..........

     O módulo *note secrets: c0. fornece funções de nível mais alto.
     Para uma interface fácil de usar para o gerador de números
     aleatórios fornecido por sua plataforma, consulte *note
     random.SystemRandom: 288b.

     Alterado na versão 3.5: No Linux 3.17 e mais recente, a chamada de
     sistema ‘getrandom()’ agora é usada quando disponível.  No OpenBSD
     5.6 e mais recentes, a função C ‘getentropy()’ agora é usada.
     Essas funções evitam o uso de um descritor de arquivo interno.

     Alterado na versão 3.5.2: No Linux, se a chamada de sistema
     ‘getrandom()’ bloqueia (o pool de entropia urandom ainda não foi
     inicializado), recorre à leitura ‘/dev/urandom’.

     Alterado na versão 3.6: No Linux, ‘getrandom()’ é usado agora no
     modo de bloqueio para aumentar a segurança.

     Alterado na versão 3.11: No Windows, ‘BCryptGenRandom()’ é usado em
     vez de ‘CryptGenRandom()’, o qual foi descontinuado.

 -- Dado: os.GRND_NONBLOCK

     Por padrão, ao ler de ‘/dev/random’, *note getrandom(): cdd.
     bloqueia se nenhum byte aleatório estiver disponível, e ao ler de
     ‘/dev/urandom’, ele bloqueia se o pool de entropia ainda não foi
     inicializado.

     Se o sinalizador *note GRND_NONBLOCK: 2de5. estiver definido, então
     *note getrandom(): cdd. não bloqueia nesses casos, mas, em vez
     disso, levanta *note BlockingIOError: 1090. imediatamente.

     Adicionado na versão 3.6.

 -- Dado: os.GRND_RANDOM

     Se este bit é definido os bytes aleatórios são sorteados a partir
     de ‘/dev/random’ ao invés de ‘/dev/urandom’.

     Adicionado na versão 3.6.

   ---------- Footnotes ----------

   (1) https://man7.org/linux/man-pages/man2/getrandom.2.html

   (2) https://peps.python.org/pep-0524/


File: python.info,  Node: io — Ferramentas essenciais para trabalhar com fluxos,  Next: time — Acesso ao horário e conversões,  Prev: os — Diversas interfaces de sistema operacional,  Up: Serviços Genéricos do Sistema Operacional

5.16.2 ‘io’ — Ferramentas essenciais para trabalhar com fluxos
--------------------------------------------------------------

'Código-fonte:' Lib/io.py(1)

__________________________________________________________________

* Menu:

* Visão Geral: Visão Geral<2>.
* Codificação do texto::
* Interface de alto nível do módulo::
* hierarquia de classe::
* Desempenho: Desempenho<3>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/io.py


File: python.info,  Node: Visão Geral<2>,  Next: Codificação do texto,  Up: io — Ferramentas essenciais para trabalhar com fluxos

5.16.2.1 Visão Geral
....................

O módulo *note io: 7f. fornece os principais recursos do Python para
lidar com vários tipos de E/S. Existem três tipos principais de E/S:
'E/S de texto', 'E/S binária' e 'E/S bruta'.  Essas são categorias
genéricas, e vários repositórios de apoio podem ser usados para cada uma
delas.  Um objeto concreto pertencente a qualquer uma dessas categorias
é chamado de *note objeto arquivo: 1203.  Outros termos comuns são
'fluxo' e 'objeto arquivo ou similar'.

Independentemente de sua categoria, cada objeto de fluxo concreto também
terá vários recursos: pode ser somente leitura, somente escrita ou
leitura e escrita.  Também pode permitir acesso aleatório arbitrário
(buscando para frente ou para trás em qualquer local) ou apenas acesso
sequencial (por exemplo, no caso de um soquete ou encadeamento).

Todos os fluxos são cuidadosos com o tipo de dados que você fornece a
eles.  Por exemplo, atribuir um objeto *note str: 44c. ao método
‘write()’ de um fluxo binário levantará uma *note TypeError: 2c3.  O
mesmo ocorrerá com um objeto *note bytes: 1c2. ao método ‘write()’ de um
fluxo de texto.

Alterado na versão 3.3: Operações que costumavam levantar *note IOError:
108b. agora levantam *note OSError: 417, já que *note IOError: 108b.
agora é um apelido de *note OSError: 417.

* Menu:

* E/S de texto::
* E/S binária::
* E/S bruta::


File: python.info,  Node: E/S de texto,  Next: E/S binária,  Up: Visão Geral<2>

5.16.2.2 E/S de texto
.....................

A E/S de texto espera e produz objetos *note str: 44c.  Isso significa
que sempre que o armazenamento de apoio for composto nativamente por
bytes (como no caso de um arquivo), a codificação e a decodificação dos
dados são feitas de forma transparente, bem como a tradução opcional de
caracteres de quebra de linha específicos da plataforma.

A maneira mais fácil de criar um fluxo de texto é com *note open(): 51c,
especificando opcionalmente uma codificação:

     f = open("myfile.txt", "r", encoding="utf-8")

Os fluxos de texto na memória também estão disponíveis como objetos
*note StringIO: f59.:

     f = io.StringIO("alguns dados em texto iniciais")

A API de fluxo de texto é descrita em detalhes na documentação de *note
TextIOBase: 695.


File: python.info,  Node: E/S binária,  Next: E/S bruta,  Prev: E/S de texto,  Up: Visão Geral<2>

5.16.2.3 E/S binária
....................

E/S binária (também chamada de 'E/S com buffer') espera *note objeto
bytes ou similar: d4f. e produz objetos *note bytes: 1c2.  Nenhuma
codificação, decodificação ou tradução de quebra de linha é realizada.
Esta categoria de fluxos pode ser usada para todos os tipos de dados não
textuais e também quando se deseja controle manual sobre o tratamento de
dados textuais.

A maneira mais fácil de criar um fluxo binário é com *note open(): 51c.
com ‘'b'’ na string de modo:

     f = open("meuarquivo.jpg", "rb")

Os fluxos binários na memória também estão disponíveis como objetos
*note BytesIO: ed3.:

     f = io.BytesIO(b"alguns dados bin\xe1rios iniciais: \x00\x01")

A API de fluxo binário é descrita em detalhes na documentação de *note
BufferedIOBase: 694.

Outros módulos de biblioteca podem fornecer maneiras adicionais de criar
fluxos de texto ou binários.  Veja *note socket.socket.makefile(): 11de.
como exemplo.


File: python.info,  Node: E/S bruta,  Prev: E/S binária,  Up: Visão Geral<2>

5.16.2.4 E/S bruta
..................

A E/S bruta (também chamada de 'E/S sem buffer') é geralmente usada como
um bloco de construção de baixo nível para fluxos binários e de texto;
raramente é útil manipular diretamente um fluxo bruto a partir do código
do usuário.  No entanto, você pode criar um fluxo bruto abrindo um
arquivo em modo binário com o buffer desabilitado:

     f = open("meuarquivo.jpg", "rb", buffering=0)

A API de fluxo bruto é descrita em detalhes na documentação de *note
RawIOBase: 110f.


File: python.info,  Node: Codificação do texto,  Next: Interface de alto nível do módulo,  Prev: Visão Geral<2>,  Up: io — Ferramentas essenciais para trabalhar com fluxos

5.16.2.5 Codificação do texto
.............................

A codificação padrão de *note TextIOWrapper: 7bc. e *note open(): 51c. é
específica da localidade (*note locale.getencoding(): 2dc.).

No entanto, muitos desenvolvedores esquecem de especificar a codificação
ao abrir arquivos de texto codificados em UTF-8 (por exemplo, JSON,
TOML, Markdown, etc.), já que a maioria das plataformas Unix usa a
localidade UTF-8 por padrão.  Isso causa bugs porque a codificação de
localidade não é UTF-8 para a maioria dos usuários do Windows.  Por
exemplo:

     # Pode não funcionar no Windows quando há caracteres não ASCII no arquivo.
     with open("README.md") as f:
         long_description = f.read()

Portanto, é altamente recomendável que você especifique a codificação
explicitamente ao abrir arquivos de texto.  Se quiser usar UTF-8, passe
‘encoding="utf-8"’.  Para usar a codificação da localidade atual,
‘encoding="locale"’ é suportado desde o Python 3.10.

Ver também
..........

*note Modo UTF-8 do Python: 656.

     O modo Python UTF-8 pode ser usado para alterar a codificação
     padrão para UTF-8 a partir da codificação específica de localidade.

PEP 686(1)

     Python 3.15 utilizará *note Modo UTF-8 do Python: 656. por padrão.

* Menu:

* Ativar EncodingWarning::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0686/


File: python.info,  Node: Ativar EncodingWarning,  Up: Codificação do texto

5.16.2.6 Ativar EncodingWarning
...............................

Adicionado na versão 3.10: Veja a PEP 597(1) para mais detalhes.

Para descobrir onde a codificação da localidade padrão é usada, você
pode habilitar a opção de linha de comando *note -X
warn_default_encoding: 176. ou definir a variável de ambiente *note
PYTHONWARNDEFAULTENCODING: 7bd, que emitirá um *note EncodingWarning:
1ec5. quando a codificação padrão for usada.

Se você estiver fornecendo uma API que usa *note open(): 51c. ou *note
TextIOWrapper: 7bc. e passa ‘encoding=None’ como parâmetro, você pode
usar *note text_encoding(): 17b9. para que os chamadores da API emitam
um *note EncodingWarning: 1ec5. se não passarem um ‘encoding’.  No
entanto, considere usar UTF-8 por padrão (ou seja, ‘encoding="utf-8"’)
para novas APIs.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0597/


File: python.info,  Node: Interface de alto nível do módulo,  Next: hierarquia de classe,  Prev: Codificação do texto,  Up: io — Ferramentas essenciais para trabalhar com fluxos

5.16.2.7 Interface de alto nível do módulo
..........................................

 -- Dado: io.DEFAULT_BUFFER_SIZE

     Um inteiro contendo o tamanho padrão do buffer usado pelas classes
     de E/S com buffer do módulo.  *note open(): 51c. usa o tamanho do
     bloco (blksize) do arquivo (obtido por *note os.stat(): 4a0.), se
     possível.

 -- Função: io.open (file, mode='r', buffering=-1, encoding=None,
          errors=None, newline=None, closefd=True, opener=None)

     Este é um apelido para a função embutida *note open(): 51c.

     Esta função levanta um *note evento de auditoria: 19fa. ‘open’ com
     os argumentos 'path', 'mode' e 'flags'.  Os argumentos 'mode' e
     'flags' podem ter sido modificados ou inferidos da chamada
     original.

 -- Função: io.open_code (path)

     Opens the provided file with mode ‘'rb'’.  This function should be
     used when the intent is to treat the contents as executable code.

     'path' should be a *note str: 44c. and an absolute path.

     The behavior of this function may be overridden by an earlier call
     to the *note PyFile_SetOpenCodeHook(): 181e.  However, assuming
     that 'path' is a *note str: 44c. and an absolute path,
     ‘open_code(path)’ should always behave the same as ‘open(path,
     'rb')’.  Overriding the behavior is intended for additional
     validation or preprocessing of the file.

     Adicionado na versão 3.8.

 -- Função: io.text_encoding (encoding, stacklevel=2, /)

     This is a helper function for callables that use *note open(): 51c.
     or *note TextIOWrapper: 7bc. and have an ‘encoding=None’ parameter.

     This function returns 'encoding' if it is not ‘None’.  Otherwise,
     it returns ‘"locale"’ or ‘"utf-8"’ depending on *note UTF-8 Mode:
     656.

     This function emits an *note EncodingWarning: 1ec5. if *note
     sys.flags.warn_default_encoding: 68c. is true and 'encoding' is
     ‘None’.  'stacklevel' specifies where the warning is emitted.  For
     example:

          def read_text(path, encoding=None):
              encoding = io.text_encoding(encoding)  # stacklevel=2
              with open(path, encoding) as f:
                  return f.read()

     In this example, an *note EncodingWarning: 1ec5. is emitted for the
     caller of ‘read_text()’.

     Veja *note Codificação do texto: 7be. para mais informações.

     Adicionado na versão 3.10.

     Alterado na versão 3.11: *note text_encoding(): 17b9. returns
     “utf-8” when UTF-8 mode is enabled and 'encoding' is ‘None’.

 -- Exceção: io.BlockingIOError

     This is a compatibility alias for the builtin *note
     BlockingIOError: 1090. exception.

 -- Exceção: io.UnsupportedOperation

     An exception inheriting *note OSError: 417. and *note ValueError:
     202. that is raised when an unsupported operation is called on a
     stream.

Ver também
..........

*note sys: d9.

     contains the standard IO streams: *note sys.stdin: 53d, *note
     sys.stdout: ae6, and *note sys.stderr: 940.


File: python.info,  Node: hierarquia de classe,  Next: Desempenho<3>,  Prev: Interface de alto nível do módulo,  Up: io — Ferramentas essenciais para trabalhar com fluxos

5.16.2.8 hierarquia de classe
.............................

The implementation of I/O streams is organized as a hierarchy of
classes.  First *note abstract base classes: 11f5. (ABCs), which are
used to specify the various categories of streams, then concrete classes
providing the standard stream implementations.

     Nota: The abstract base classes also provide default
     implementations of some methods in order to help implementation of
     concrete stream classes.  For example, *note BufferedIOBase: 694.
     provides unoptimized implementations of ‘readinto()’ and
     ‘readline()’.

At the top of the I/O hierarchy is the abstract base class *note IOBase:
1f5.  It defines the basic interface to a stream.  Note, however, that
there is no separation between reading and writing to streams;
implementations are allowed to raise *note UnsupportedOperation: 1b0e.
if they do not support a given operation.

The *note RawIOBase: 110f. ABC extends *note IOBase: 1f5.  It deals with
the reading and writing of bytes to a stream.  *note FileIO: 1354.
subclasses *note RawIOBase: 110f. to provide an interface to files in
the machine’s file system.

The *note BufferedIOBase: 694. ABC extends *note IOBase: 1f5.  It deals
with buffering on a raw binary stream (*note RawIOBase: 110f.).  Its
subclasses, *note BufferedWriter: 13f8, *note BufferedReader: 124e, and
*note BufferedRWPair: 13fa. buffer raw binary streams that are writable,
readable, and both readable and writable, respectively.  *note
BufferedRandom: 13f9. provides a buffered interface to seekable streams.
Another *note BufferedIOBase: 694. subclass, *note BytesIO: ed3, is a
stream of in-memory bytes.

The *note TextIOBase: 695. ABC extends *note IOBase: 1f5.  It deals with
streams whose bytes represent text, and handles encoding and decoding to
and from strings.  *note TextIOWrapper: 7bc, which extends *note
TextIOBase: 695, is a buffered text interface to a buffered raw stream
(*note BufferedIOBase: 694.).  Finally, *note StringIO: f59. is an
in-memory stream for text.

Argument names are not part of the specification, and only the arguments
of *note open(): 51c. are intended to be used as keyword arguments.

The following table summarizes the ABCs provided by the *note io: 7f.
module:

ABC                           Inherits               Stub Methods                 Mixin Methods and Properties
                                                                                  
-----------------------------------------------------------------------------------------------------------------------------------------
                                                                                  
*note IOBase: 1f5.                                   ‘fileno’, ‘seek’, and        ‘close’, ‘closed’, ‘__enter__’, ‘__exit__’, ‘flush’,
                                                     ‘truncate’                   ‘isatty’, ‘__iter__’, ‘__next__’, ‘readable’,
                                                                                  ‘readline’, ‘readlines’, ‘seekable’, ‘tell’,
                                                                                  ‘writable’, and ‘writelines’
                                                                                  
                                                                                  
*note RawIOBase: 110f.        *note IOBase: 1f5.     ‘readinto’ and ‘write’       Inherited *note IOBase: 1f5. methods, ‘read’, and
                                                                                  ‘readall’
                                                                                  
                                                                                  
*note BufferedIOBase: 694.    *note IOBase: 1f5.     ‘detach’, ‘read’, ‘read1’,   Inherited *note IOBase: 1f5. methods, ‘readinto’,
                                                     and ‘write’                  and ‘readinto1’
                                                                                  
                                                                                  
*note TextIOBase: 695.        *note IOBase: 1f5.     ‘detach’, ‘read’,            Inherited *note IOBase: 1f5. methods, ‘encoding’,
                                                     ‘readline’, and ‘write’      ‘errors’, and ‘newlines’
                                                                                  

* Menu:

* I/O Base Classes::
* Raw File I/O::
* Buffered Streams::
* E/S de texto: E/S de texto<2>.


File: python.info,  Node: I/O Base Classes,  Next: Raw File I/O,  Up: hierarquia de classe

5.16.2.9 I/O Base Classes
.........................

 -- Classe: io.IOBase

     The abstract base class for all I/O classes.

     This class provides empty abstract implementations for many methods
     that derived classes can override selectively; the default
     implementations represent a file that cannot be read, written or
     seeked.

     Even though *note IOBase: 1f5. does not declare ‘read()’ or
     ‘write()’ because their signatures will vary, implementations and
     clients should consider those methods part of the interface.  Also,
     implementations may raise a *note ValueError: 202. (or *note
     UnsupportedOperation: 1b0e.) when operations they do not support
     are called.

     The basic type used for binary data read from or written to a file
     is *note bytes: 1c2.  Other *note bytes-like objects: d4f. are
     accepted as method arguments too.  Text I/O classes work with *note
     str: 44c. data.

     Note that calling any method (even inquiries) on a closed stream is
     undefined.  Implementations may raise *note ValueError: 202. in
     this case.

     *note IOBase: 1f5. (and its subclasses) supports the iterator
     protocol, meaning that an *note IOBase: 1f5. object can be iterated
     over yielding the lines in a stream.  Lines are defined slightly
     differently depending on whether the stream is a binary stream
     (yielding bytes), or a text stream (yielding character strings).
     See *note readline(): 241f. below.

     *note IOBase: 1f5. is also a context manager and therefore supports
     the *note with: 5d2. statement.  In this example, 'file' is closed
     after the ‘with’ statement’s suite is finished—even if an exception
     occurs:

          with open('spam.txt', 'w') as file:
              file.write('Spam and eggs!')

     *note IOBase: 1f5. provides these data attributes and methods:

      -- Método: close ()

          Flush and close this stream.  This method has no effect if the
          file is already closed.  Once the file is closed, any
          operation on the file (e.g.  reading or writing) will raise a
          *note ValueError: 202.

          As a convenience, it is allowed to call this method more than
          once; only the first call, however, will have an effect.

      -- Atributo: closed

          ‘True’ if the stream is closed.

      -- Método: fileno ()

          Return the underlying file descriptor (an integer) of the
          stream if it exists.  An *note OSError: 417. is raised if the
          IO object does not use a file descriptor.

      -- Método: flush ()

          Flush the write buffers of the stream if applicable.  This
          does nothing for read-only and non-blocking streams.

      -- Método: isatty ()

          Return ‘True’ if the stream is interactive (i.e., connected to
          a terminal/tty device).

      -- Método: readable ()

          Return ‘True’ if the stream can be read from.  If ‘False’,
          ‘read()’ will raise *note OSError: 417.

      -- Método: readline (size=-1, /)

          Read and return one line from the stream.  If 'size' is
          specified, at most 'size' bytes will be read.

          The line terminator is always ‘b'\n'’ for binary files; for
          text files, the 'newline' argument to *note open(): 51c. can
          be used to select the line terminator(s) recognized.

      -- Método: readlines (hint=-1, /)

          Read and return a list of lines from the stream.  'hint' can
          be specified to control the number of lines read: no more
          lines will be read if the total size (in bytes/characters) of
          all lines so far exceeds 'hint'.

          'hint' values of ‘0’ or less, as well as ‘None’, are treated
          as no hint.

          Note that it’s already possible to iterate on file objects
          using ‘for line in file: ...’ without calling
          ‘file.readlines()’.

      -- Método: seek (offset, whence=os.SEEK_SET, /)

          Change the stream position to the given byte 'offset',
          interpreted relative to the position indicated by 'whence',
          and return the new absolute position.  Values for 'whence'
          are:

             * *note os.SEEK_SET: 12cf. or ‘0’ – start of the stream
               (the default); 'offset' should be zero or positive

             * *note os.SEEK_CUR: 12d0. or ‘1’ – current stream
               position; 'offset' may be negative

             * *note os.SEEK_END: 12d1. or ‘2’ – end of the stream;
               'offset' is usually negative

          Adicionado na versão 3.1: The ‘SEEK_*’ constants.

          Adicionado na versão 3.3: Some operating systems could support
          additional values, like *note os.SEEK_HOLE: 2d22. or *note
          os.SEEK_DATA: 2d23.  The valid values for a file could depend
          on it being open in text or binary mode.

      -- Método: seekable ()

          Return ‘True’ if the stream supports random access.  If
          ‘False’, *note seek(): 12ce, *note tell(): 13f3. and *note
          truncate(): 1355. will raise *note OSError: 417.

      -- Método: tell ()

          Return the current stream position.

      -- Método: truncate (size=None, /)

          Resize the stream to the given 'size' in bytes (or the current
          position if 'size' is not specified).  The current stream
          position isn’t changed.  This resizing can extend or reduce
          the current file size.  In case of extension, the contents of
          the new file area depend on the platform (on most systems,
          additional bytes are zero-filled).  The new file size is
          returned.

          Alterado na versão 3.5: Windows will now zero-fill files when
          extending.

      -- Método: writable ()

          Return ‘True’ if the stream supports writing.  If ‘False’,
          ‘write()’ and *note truncate(): 1355. will raise *note
          OSError: 417.

      -- Método: writelines (lines, /)

          Write a list of lines to the stream.  Line separators are not
          added, so it is usual for each of the lines provided to have a
          line separator at the end.

      -- Método: __del__ ()

          Prepare for object destruction.  *note IOBase: 1f5. provides a
          default implementation of this method that calls the
          instance’s *note close(): 1f6. method.

 -- Classe: io.RawIOBase

     Base class for raw binary streams.  It inherits from *note IOBase:
     1f5.

     Raw binary streams typically provide low-level access to an
     underlying OS device or API, and do not try to encapsulate it in
     high-level primitives (this functionality is done at a higher-level
     in buffered binary streams and text streams, described later in
     this page).

     *note RawIOBase: 110f. provides these methods in addition to those
     from *note IOBase: 1f5.:

      -- Método: read (size=-1, /)

          Read up to 'size' bytes from the object and return them.  As a
          convenience, if 'size' is unspecified or -1, all bytes until
          EOF are returned.  Otherwise, only one system call is ever
          made.  Fewer than 'size' bytes may be returned if the
          operating system call returns fewer than 'size' bytes.

          If 0 bytes are returned, and 'size' was not 0, this indicates
          end of file.  If the object is in non-blocking mode and no
          bytes are available, ‘None’ is returned.

          The default implementation defers to *note readall(): 2df5.
          and *note readinto(): e49.

      -- Método: readall ()

          Read and return all the bytes from the stream until EOF, using
          multiple calls to the stream if necessary.

      -- Método: readinto (b, /)

          Read bytes into a pre-allocated, writable *note bytes-like
          object: d4f. 'b', and return the number of bytes read.  For
          example, 'b' might be a *note bytearray: 2ea.  If the object
          is in non-blocking mode and no bytes are available, ‘None’ is
          returned.

      -- Método: write (b, /)

          Write the given *note bytes-like object: d4f, 'b', to the
          underlying raw stream, and return the number of bytes written.
          This can be less than the length of 'b' in bytes, depending on
          specifics of the underlying raw stream, and especially if it
          is in non-blocking mode.  ‘None’ is returned if the raw stream
          is set not to block and no single byte could be readily
          written to it.  The caller may release or mutate 'b' after
          this method returns, so the implementation should only access
          'b' during the method call.

 -- Classe: io.BufferedIOBase

     Base class for binary streams that support some kind of buffering.
     It inherits from *note IOBase: 1f5.

     The main difference with *note RawIOBase: 110f. is that methods
     *note read(): 136d, *note readinto(): 2df6. and *note write(): cfc.
     will try (respectively) to read as much input as requested or to
     emit all provided data.

     In addition, if the underlying raw stream is in non-blocking mode,
     when the system returns would block *note write(): cfc. will raise
     *note BlockingIOError: 1090. with *note
     BlockingIOError.characters_written: 2439. and *note read(): 136d.
     will return data read so far or ‘None’ if no data is available.

     Besides, the *note read(): 136d. method does not have a default
     implementation that defers to *note readinto(): 2df6.

     A typical *note BufferedIOBase: 694. implementation should not
     inherit from a *note RawIOBase: 110f. implementation, but wrap one,
     like *note BufferedWriter: 13f8. and *note BufferedReader: 124e.
     do.

     *note BufferedIOBase: 694. provides or overrides these data
     attributes and methods in addition to those from *note IOBase:
     1f5.:

      -- Atributo: raw

          The underlying raw stream (a *note RawIOBase: 110f. instance)
          that *note BufferedIOBase: 694. deals with.  This is not part
          of the *note BufferedIOBase: 694. API and may not exist on
          some implementations.

      -- Método: detach ()

          Separate the underlying raw stream from the buffer and return
          it.

          After the raw stream has been detached, the buffer is in an
          unusable state.

          Some buffers, like *note BytesIO: ed3, do not have the concept
          of a single raw stream to return from this method.  They raise
          *note UnsupportedOperation: 1b0e.

          Adicionado na versão 3.1.

      -- Método: read (size=-1, /)

          Read and return up to 'size' bytes.  If the argument is
          omitted, ‘None’, or negative read as much as possible.

          Fewer bytes may be returned than requested.  An empty *note
          bytes: 1c2. object is returned if the stream is already at
          EOF.  More than one read may be made and calls may be retried
          if specific errors are encountered, see *note os.read(): dbd.
          and PEP 475(1) for more details.  Less than size bytes being
          returned does not imply that EOF is imminent.

          When reading as much as possible the default implementation
          will use ‘raw.readall’ if available (which should implement
          *note RawIOBase.readall(): 2df5.), otherwise will read in a
          loop until read returns ‘None’, an empty *note bytes: 1c2, or
          a non-retryable error.  For most streams this is to EOF, but
          for non-blocking streams more data may become available.

               Nota: When the underlying raw stream is non-blocking,
               implementations may either raise *note BlockingIOError:
               1090. or return ‘None’ if no data is available.  *note
               io: 7f. implementations return ‘None’.

      -- Método: read1 (size=-1, /)

          Read and return up to 'size' bytes, calling *note readinto():
          e49. which may retry if *note EINTR: daf. is encountered per
          PEP 475(2).  If 'size' is ‘-1’ or not provided, the
          implementation will choose an arbitrary value for 'size'.

               Nota: When the underlying raw stream is non-blocking,
               implementations may either raise *note BlockingIOError:
               1090. or return ‘None’ if no data is available.  *note
               io: 7f. implementations return ‘None’.

      -- Método: readinto (b, /)

          Read bytes into a pre-allocated, writable *note bytes-like
          object: d4f. 'b' and return the number of bytes read.  For
          example, 'b' might be a *note bytearray: 2ea.

          Like *note read(): 136d, multiple reads may be issued to the
          underlying raw stream, unless the latter is interactive.

          A *note BlockingIOError: 1090. is raised if the underlying raw
          stream is in non blocking-mode, and has no data available at
          the moment.

      -- Método: readinto1 (b, /)

          Read bytes into a pre-allocated, writable *note bytes-like
          object: d4f. 'b', using at most one call to the underlying raw
          stream’s *note read(): e48. (or *note readinto(): e49.)
          method.  Return the number of bytes read.

          A *note BlockingIOError: 1090. is raised if the underlying raw
          stream is in non blocking-mode, and has no data available at
          the moment.

          Adicionado na versão 3.5.

      -- Método: write (b, /)

          Write the given *note bytes-like object: d4f, 'b', and return
          the number of bytes written (always equal to the length of 'b'
          in bytes, since if the write fails an *note OSError: 417. will
          be raised).  Depending on the actual implementation, these
          bytes may be readily written to the underlying stream, or held
          in a buffer for performance and latency reasons.

          When in non-blocking mode, a *note BlockingIOError: 1090. is
          raised if the data needed to be written to the raw stream but
          it couldn’t accept all the data without blocking.

          The caller may release or mutate 'b' after this method
          returns, so the implementation should only access 'b' during
          the method call.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0475/

   (2) https://peps.python.org/pep-0475/


File: python.info,  Node: Raw File I/O,  Next: Buffered Streams,  Prev: I/O Base Classes,  Up: hierarquia de classe

5.16.2.10 Raw File I/O
......................

 -- Classe: io.FileIO (name, mode='r', closefd=True, opener=None)

     A raw binary stream representing an OS-level file containing bytes
     data.  It inherits from *note RawIOBase: 110f.

     The 'name' can be one of two things:

        * a character string or *note bytes: 1c2. object representing
          the path to the file which will be opened.  In this case
          closefd must be ‘True’ (the default) otherwise an error will
          be raised.

        * an integer representing the number of an existing OS-level
          file descriptor to which the resulting *note FileIO: 1354.
          object will give access.  When the FileIO object is closed
          this fd will be closed as well, unless 'closefd' is set to
          ‘False’.

     The 'mode' can be ‘'r'’, ‘'w'’, ‘'x'’ or ‘'a'’ for reading
     (default), writing, exclusive creation or appending.  The file will
     be created if it doesn’t exist when opened for writing or
     appending; it will be truncated when opened for writing.  *note
     FileExistsError: 1056. will be raised if it already exists when
     opened for creating.  Opening a file for creating implies writing,
     so this mode behaves in a similar way to ‘'w'’.  Add a ‘'+'’ to the
     mode to allow simultaneous reading and writing.

     The *note read(): e48. (when called with a positive argument),
     *note readinto(): e49. and *note write(): 13f2. methods on this
     class will only make one system call.

     A custom opener can be used by passing a callable as 'opener'.  The
     underlying file descriptor for the file object is then obtained by
     calling 'opener' with ('name', 'flags').  'opener' must return an
     open file descriptor (passing *note os.open: dba. as 'opener'
     results in functionality similar to passing ‘None’).

     O arquivo recém-criado é *note non-inheritable: f2b.

     See the *note open(): 51c. built-in function for examples on using
     the 'opener' parameter.

     Alterado na versão 3.3: The 'opener' parameter was added.  The
     ‘'x'’ mode was added.

     Alterado na versão 3.4: O arquivo agora é não herdável.

     *note FileIO: 1354. provides these data attributes in addition to
     those from *note RawIOBase: 110f. and *note IOBase: 1f5.:

      -- Atributo: mode

          The mode as given in the constructor.

      -- Atributo: name

          The file name.  This is the file descriptor of the file when
          no name is given in the constructor.


File: python.info,  Node: Buffered Streams,  Next: E/S de texto<2>,  Prev: Raw File I/O,  Up: hierarquia de classe

5.16.2.11 Buffered Streams
..........................

Buffered I/O streams provide a higher-level interface to an I/O device
than raw I/O does.

 -- Classe: io.BytesIO (initial_bytes=b'')

     A binary stream using an in-memory bytes buffer.  It inherits from
     *note BufferedIOBase: 694.  The buffer is discarded when the *note
     close(): 1f6. method is called.

     The optional argument 'initial_bytes' is a *note bytes-like object:
     d4f. that contains initial data.

     *note BytesIO: ed3. provides or overrides these methods in addition
     to those from *note BufferedIOBase: 694. and *note IOBase: 1f5.:

      -- Método: getbuffer ()

          Return a readable and writable view over the contents of the
          buffer without copying them.  Also, mutating the view will
          transparently update the contents of the buffer:

               >>> b = io.BytesIO(b"abcdef")
               >>> view = b.getbuffer()
               >>> view[2:4] = b"56"
               >>> b.getvalue()
               b'ab56ef'

               Nota: As long as the view exists, the *note BytesIO: ed3.
               object cannot be resized or closed.

          Adicionado na versão 3.2.

      -- Método: getvalue ()

          Return *note bytes: 1c2. containing the entire contents of the
          buffer.

      -- Método: read1 (size=-1, /)

          In *note BytesIO: ed3, this is the same as *note read(): 136d.

          Alterado na versão 3.7: The 'size' argument is now optional.

      -- Método: readinto1 (b, /)

          In *note BytesIO: ed3, this is the same as *note readinto():
          2df6.

          Adicionado na versão 3.5.

 -- Classe: io.BufferedReader (raw, buffer_size=DEFAULT_BUFFER_SIZE)

     A buffered binary stream providing higher-level access to a
     readable, non seekable *note RawIOBase: 110f. raw binary stream.
     It inherits from *note BufferedIOBase: 694.

     When reading data from this object, a larger amount of data may be
     requested from the underlying raw stream, and kept in an internal
     buffer.  The buffered data can then be returned directly on
     subsequent reads.

     The constructor creates a *note BufferedReader: 124e. for the given
     readable 'raw' stream and 'buffer_size'.  If 'buffer_size' is
     omitted, *note DEFAULT_BUFFER_SIZE: 17ba. is used.

     *note BufferedReader: 124e. provides or overrides these methods in
     addition to those from *note BufferedIOBase: 694. and *note IOBase:
     1f5.:

      -- Método: peek (size=0, /)

          Return bytes from the stream without advancing the position.
          The number of bytes returned may be less or more than
          requested.  If the underlying raw stream is non-blocking and
          the operation would block, returns empty bytes.

      -- Método: read (size=-1, /)

          In *note BufferedReader: 124e. this is the same as *note
          io.BufferedIOBase.read(): 136d.

      -- Método: read1 (size=-1, /)

          In *note BufferedReader: 124e. this is the same as *note
          io.BufferedIOBase.read1(): 2b38.

          Alterado na versão 3.7: The 'size' argument is now optional.

 -- Classe: io.BufferedWriter (raw, buffer_size=DEFAULT_BUFFER_SIZE)

     A buffered binary stream providing higher-level access to a
     writeable, non seekable *note RawIOBase: 110f. raw binary stream.
     It inherits from *note BufferedIOBase: 694.

     When writing to this object, data is normally placed into an
     internal buffer.  The buffer will be written out to the underlying
     *note RawIOBase: 110f. object under various conditions, including:

        * when the buffer gets too small for all pending data;

        * when *note flush(): 2dff. is called;

        * when a *note seek(): 12ce. is requested (for *note
          BufferedRandom: 13f9. objects);

        * when the *note BufferedWriter: 13f8. object is closed or
          destroyed.

     The constructor creates a *note BufferedWriter: 13f8. for the given
     writeable 'raw' stream.  If the 'buffer_size' is not given, it
     defaults to *note DEFAULT_BUFFER_SIZE: 17ba.

     *note BufferedWriter: 13f8. provides or overrides these methods in
     addition to those from *note BufferedIOBase: 694. and *note IOBase:
     1f5.:

      -- Método: flush ()

          Force bytes held in the buffer into the raw stream.  A *note
          BlockingIOError: 1090. should be raised if the raw stream
          blocks.

      -- Método: write (b, /)

          Write the *note bytes-like object: d4f, 'b', and return the
          number of bytes written.  When in non-blocking mode, a *note
          BlockingIOError: 1090. with *note
          BlockingIOError.characters_written: 2439. set is raised if the
          buffer needs to be written out but the raw stream blocks.

 -- Classe: io.BufferedRandom (raw, buffer_size=DEFAULT_BUFFER_SIZE)

     A buffered binary stream providing higher-level access to a
     seekable *note RawIOBase: 110f. raw binary stream.  It inherits
     from *note BufferedReader: 124e. and *note BufferedWriter: 13f8.

     The constructor creates a reader and writer for a seekable raw
     stream, given in the first argument.  If the 'buffer_size' is
     omitted it defaults to *note DEFAULT_BUFFER_SIZE: 17ba.

     *note BufferedRandom: 13f9. is capable of anything *note
     BufferedReader: 124e. or *note BufferedWriter: 13f8. can do.  In
     addition, *note seek(): 12ce. and *note tell(): 13f3. are
     guaranteed to be implemented.

 -- Classe: io.BufferedRWPair (reader, writer,
          buffer_size=DEFAULT_BUFFER_SIZE, /)

     A buffered binary stream providing higher-level access to two non
     seekable *note RawIOBase: 110f. raw binary streams—one readable,
     the other writeable.  It inherits from *note BufferedIOBase: 694.

     'reader' and 'writer' are *note RawIOBase: 110f. objects that are
     readable and writeable respectively.  If the 'buffer_size' is
     omitted it defaults to *note DEFAULT_BUFFER_SIZE: 17ba.

     *note BufferedRWPair: 13fa. implements all of *note BufferedIOBase:
     694.'s methods except for *note detach(): 2b49, which raises *note
     UnsupportedOperation: 1b0e.

          Aviso: *note BufferedRWPair: 13fa. does not attempt to
          synchronize accesses to its underlying raw streams.  You
          should not pass it the same object as reader and writer; use
          *note BufferedRandom: 13f9. instead.


File: python.info,  Node: E/S de texto<2>,  Prev: Buffered Streams,  Up: hierarquia de classe

5.16.2.12 E/S de texto
......................

 -- Classe: io.TextIOBase

     Base class for text streams.  This class provides a character and
     line based interface to stream I/O. It inherits from *note IOBase:
     1f5.

     *note TextIOBase: 695. provides or overrides these data attributes
     and methods in addition to those from *note IOBase: 1f5.:

      -- Atributo: encoding

          The name of the encoding used to decode the stream’s bytes
          into strings, and to encode strings into bytes.

      -- Atributo: errors

          The error setting of the decoder or encoder.

      -- Atributo: newlines

          A string, a tuple of strings, or ‘None’, indicating the
          newlines translated so far.  Depending on the implementation
          and the initial constructor flags, this may not be available.

      -- Atributo: buffer

          The underlying binary buffer (a *note BufferedIOBase: 694. or
          *note RawIOBase: 110f. instance) that *note TextIOBase: 695.
          deals with.  This is not part of the *note TextIOBase: 695.
          API and may not exist in some implementations.

      -- Método: detach ()

          Separate the underlying binary buffer from the *note
          TextIOBase: 695. and return it.

          After the underlying buffer has been detached, the *note
          TextIOBase: 695. is in an unusable state.

          Some *note TextIOBase: 695. implementations, like *note
          StringIO: f59, may not have the concept of an underlying
          buffer and calling this method will raise *note
          UnsupportedOperation: 1b0e.

          Adicionado na versão 3.1.

      -- Método: read (size=-1, /)

          Read and return at most 'size' characters from the stream as a
          single *note str: 44c.  If 'size' is negative or ‘None’, reads
          until EOF.

      -- Método: readline (size=-1, /)

          Read until newline or EOF and return a single *note str: 44c.
          If the stream is already at EOF, an empty string is returned.

          If 'size' is specified, at most 'size' characters will be
          read.

      -- Método: seek (offset, whence=SEEK_SET, /)

          Change the stream position to the given 'offset'.  Behaviour
          depends on the 'whence' parameter.  The default value for
          'whence' is ‘SEEK_SET’.

             * ‘SEEK_SET’ or ‘0’: seek from the start of the stream (the
               default); 'offset' must either be a number returned by
               *note TextIOBase.tell(): 2e05, or zero.  Any other
               'offset' value produces undefined behaviour.

             * ‘SEEK_CUR’ or ‘1’: “seek” to the current position;
               'offset' must be zero, which is a no-operation (all other
               values are unsupported).

             * ‘SEEK_END’ or ‘2’: seek to the end of the stream;
               'offset' must be zero (all other values are unsupported).

          Return the new absolute position as an opaque number.

          Adicionado na versão 3.1: The ‘SEEK_*’ constants.

      -- Método: tell ()

          Return the current stream position as an opaque number.  The
          number does not usually represent a number of bytes in the
          underlying binary storage.

      -- Método: write (s, /)

          Write the string 's' to the stream and return the number of
          characters written.

 -- Classe: io.TextIOWrapper (buffer, encoding=None, errors=None,
          newline=None, line_buffering=False, write_through=False)

     A buffered text stream providing higher-level access to a *note
     BufferedIOBase: 694. buffered binary stream.  It inherits from
     *note TextIOBase: 695.

     'encoding' gives the name of the encoding that the stream will be
     decoded or encoded with.  In *note UTF-8 Mode: 656, this defaults
     to UTF-8.  Otherwise, it defaults to *note locale.getencoding():
     2dc.  ‘encoding="locale"’ can be used to specify the current
     locale’s encoding explicitly.  See *note Codificação do texto: 7be.
     for more information.

     'errors' is an optional string that specifies how encoding and
     decoding errors are to be handled.  Pass ‘'strict'’ to raise a
     *note ValueError: 202. exception if there is an encoding error (the
     default of ‘None’ has the same effect), or pass ‘'ignore'’ to
     ignore errors.  (Note that ignoring encoding errors can lead to
     data loss.)  ‘'replace'’ causes a replacement marker (such as
     ‘'?'’) to be inserted where there is malformed data.
     ‘'backslashreplace'’ causes malformed data to be replaced by a
     backslashed escape sequence.  When writing, ‘'xmlcharrefreplace'’
     (replace with the appropriate XML character reference) or
     ‘'namereplace'’ (replace with ‘\N{...}’ escape sequences) can be
     used.  Any other error handling name that has been registered with
     *note codecs.register_error(): 14e3. is also valid.

     'newline' controls how line endings are handled.  It can be ‘None’,
     ‘''’, ‘'\n'’, ‘'\r'’, and ‘'\r\n'’.  It works as follows:

        * When reading input from the stream, if 'newline' is ‘None’,
          *note universal newlines: d5c. mode is enabled.  Lines in the
          input can end in ‘'\n'’, ‘'\r'’, or ‘'\r\n'’, and these are
          translated into ‘'\n'’ before being returned to the caller.
          If 'newline' is ‘''’, universal newlines mode is enabled, but
          line endings are returned to the caller untranslated.  If
          'newline' has any of the other legal values, input lines are
          only terminated by the given string, and the line ending is
          returned to the caller untranslated.

        * Ao gravar a saída no fluxo, se 'newline' for ‘None’, quaisquer
          caracteres ‘'\n'’ gravados serão traduzidos para o separador
          de linhas padrão do sistema, *note os.linesep: 2311.  Se
          'newline' for ‘''’ ou ‘'\n'’, nenhuma tradução ocorrerá.  Se
          'newline' for um dos outros valores legais, qualquer caractere
          ‘'\n'’ escrito será traduzido para a string especificada.

     If 'line_buffering' is ‘True’, *note flush(): 2df3. is implied when
     a call to write contains a newline character or a carriage return.

     If 'write_through' is ‘True’, calls to *note write(): cfc. are
     guaranteed not to be buffered: any data written on the *note
     TextIOWrapper: 7bc. object is immediately handled to its underlying
     binary 'buffer'.

     Alterado na versão 3.3: The 'write_through' argument has been
     added.

     Alterado na versão 3.3: The default 'encoding' is now
     ‘locale.getpreferredencoding(False)’ instead of
     ‘locale.getpreferredencoding()’.  Don’t change temporary the locale
     encoding using *note locale.setlocale(): 2db, use the current
     locale encoding instead of the user preferred encoding.

     Alterado na versão 3.10: The 'encoding' argument now supports the
     ‘"locale"’ dummy encoding name.

     *note TextIOWrapper: 7bc. provides these data attributes and
     methods in addition to those from *note TextIOBase: 695. and *note
     IOBase: 1f5.:

      -- Atributo: line_buffering

          Whether line buffering is enabled.

      -- Atributo: write_through

          Whether writes are passed immediately to the underlying binary
          buffer.

          Adicionado na versão 3.7.

      -- Método: reconfigure (*, encoding=None, errors=None,
               newline=None, line_buffering=None, write_through=None)

          Reconfigure this text stream using new settings for
          'encoding', 'errors', 'newline', 'line_buffering' and
          'write_through'.

          Parameters not specified keep current settings, except
          ‘errors='strict'’ is used when 'encoding' is specified but
          'errors' is not specified.

          It is not possible to change the encoding or newline if some
          data has already been read from the stream.  On the other
          hand, changing encoding after write is possible.

          This method does an implicit stream flush before setting the
          new parameters.

          Adicionado na versão 3.7.

          Alterado na versão 3.11: The method supports
          ‘encoding="locale"’ option.

      -- Método: seek (cookie, whence=os.SEEK_SET, /)

          Set the stream position.  Return the new stream position as an
          *note int: 257.

          Four operations are supported, given by the following argument
          combinations:

             * ‘seek(0, SEEK_SET)’: Rewind to the start of the stream.

             * ‘seek(cookie, SEEK_SET)’: Restore a previous position;
               'cookie' 'must be' a number returned by *note tell():
               15d4.

             * ‘seek(0, SEEK_END)’: Fast-forward to the end of the
               stream.

             * ‘seek(0, SEEK_CUR)’: Leave the current stream position
               unchanged.

          Any other argument combinations are invalid, and may raise
          exceptions.

          Ver também
          ..........

          *note os.SEEK_SET: 12cf, *note os.SEEK_CUR: 12d0, and *note
          os.SEEK_END: 12d1.

      -- Método: tell ()

          Return the stream position as an opaque number.  The return
          value of ‘tell()’ can be given as input to *note seek(): 2e08,
          to restore a previous stream position.

 -- Classe: io.StringIO (initial_value='', newline='\n')

     A text stream using an in-memory text buffer.  It inherits from
     *note TextIOBase: 695.

     The text buffer is discarded when the *note close(): 1f6. method is
     called.

     The initial value of the buffer can be set by providing
     'initial_value'.  If newline translation is enabled, newlines will
     be encoded as if by *note write(): 1dfb.  The stream is positioned
     at the start of the buffer which emulates opening an existing file
     in a ‘w+’ mode, making it ready for an immediate write from the
     beginning or for a write that would overwrite the initial value.
     To emulate opening a file in an ‘a+’ mode ready for appending, use
     ‘f.seek(0, io.SEEK_END)’ to reposition the stream at the end of the
     buffer.

     The 'newline' argument works like that of *note TextIOWrapper: 7bc,
     except that when writing output to the stream, if 'newline' is
     ‘None’, newlines are written as ‘\n’ on all platforms.

     *note StringIO: f59. provides this method in addition to those from
     *note TextIOBase: 695. and *note IOBase: 1f5.:

      -- Método: getvalue ()

          Return a *note str: 44c. containing the entire contents of the
          buffer.  Newlines are decoded as if by *note read(): 1e0c,
          although the stream position is not changed.

     Exemplo de uso:

          import io

          output = io.StringIO()
          output.write('First line.\n')
          print('Second line.', file=output)

          # Retrieve file contents -- this will be
          # 'First line.\nSecond line.\n'
          contents = output.getvalue()

          # Close object and discard memory buffer --
          # .getvalue() will now raise an exception.
          output.close()

 -- Classe: io.IncrementalNewlineDecoder

     A helper codec that decodes newlines for *note universal newlines:
     d5c. mode.  It inherits from *note codecs.IncrementalDecoder: 2564.


File: python.info,  Node: Desempenho<3>,  Prev: hierarquia de classe,  Up: io — Ferramentas essenciais para trabalhar com fluxos

5.16.2.13 Desempenho
....................

This section discusses the performance of the provided concrete I/O
implementations.

* Menu:

* E/S binária: E/S binária<2>.
* E/S de texto: E/S de texto<3>.
* Multi-threading: Multi-threading<3>.
* Reentrancy::


File: python.info,  Node: E/S binária<2>,  Next: E/S de texto<3>,  Up: Desempenho<3>

5.16.2.14 E/S binária
.....................

By reading and writing only large chunks of data even when the user asks
for a single byte, buffered I/O hides any inefficiency in calling and
executing the operating system’s unbuffered I/O routines.  The gain
depends on the OS and the kind of I/O which is performed.  For example,
on some modern OSes such as Linux, unbuffered disk I/O can be as fast as
buffered I/O. The bottom line, however, is that buffered I/O offers
predictable performance regardless of the platform and the backing
device.  Therefore, it is almost always preferable to use buffered I/O
rather than unbuffered I/O for binary data.


File: python.info,  Node: E/S de texto<3>,  Next: Multi-threading<3>,  Prev: E/S binária<2>,  Up: Desempenho<3>

5.16.2.15 E/S de texto
......................

Text I/O over a binary storage (such as a file) is significantly slower
than binary I/O over the same storage, because it requires conversions
between unicode and binary data using a character codec.  This can
become noticeable handling huge amounts of text data like large log
files.  Also, *note tell(): 2e05. and *note seek(): 2e04. are both quite
slow due to the reconstruction algorithm used.

*note StringIO: f59, however, is a native in-memory unicode container
and will exhibit similar speed to *note BytesIO: ed3.


File: python.info,  Node: Multi-threading<3>,  Next: Reentrancy,  Prev: E/S de texto<3>,  Up: Desempenho<3>

5.16.2.16 Multi-threading
.........................

*note FileIO: 1354. objects are thread-safe to the extent that the
operating system calls (such as ‘read(2)(1)’ under Unix) they wrap are
thread-safe too.

Binary buffered objects (instances of *note BufferedReader: 124e, *note
BufferedWriter: 13f8, *note BufferedRandom: 13f9. and *note
BufferedRWPair: 13fa.) protect their internal structures using a lock;
it is therefore safe to call them from multiple threads at once.

*note TextIOWrapper: 7bc. objects are not thread-safe.

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/read(2)


File: python.info,  Node: Reentrancy,  Prev: Multi-threading<3>,  Up: Desempenho<3>

5.16.2.17 Reentrancy
....................

Binary buffered objects (instances of *note BufferedReader: 124e, *note
BufferedWriter: 13f8, *note BufferedRandom: 13f9. and *note
BufferedRWPair: 13fa.) are not reentrant.  While reentrant calls will
not happen in normal situations, they can arise from doing I/O in a
*note signal: c6. handler.  If a thread tries to re-enter a buffered
object which it is already accessing, a *note RuntimeError: 195. is
raised.  Note this doesn’t prohibit a different thread from entering the
buffered object.

The above implicitly extends to text files, since the *note open(): 51c.
function will wrap a buffered object inside a *note TextIOWrapper: 7bc.
This includes standard streams and therefore affects the built-in *note
print(): fa9. function as well.


File: python.info,  Node: time — Acesso ao horário e conversões,  Next: logging — Recursos de registro de eventos para Python,  Prev: io — Ferramentas essenciais para trabalhar com fluxos,  Up: Serviços Genéricos do Sistema Operacional

5.16.3 ‘time’ — Acesso ao horário e conversões
----------------------------------------------

__________________________________________________________________

Esse módulo provê várias funções relacionadas à tempo.  Para
funcionalidades relacionadas veja também os módulos *note datetime: 30.
e *note calendar: 14.

Apesar desse módulo sempre estar disponível, nem todas as suas funções
estão disponíveis em todas as plataformas.  A maioria das funções
definidas nesse módulo chamam funções da biblioteca da plataforma de C
com mesmo nome.  Pode ser útil consultar a documentação da plataforma,
pois da semântica dessas funções variam a depender da plataforma.

A seguir, uma explicação de algumas terminologias e convenções.

   * O 'era' ('epoch') é o ponto onde o tempo começa, o valor de retorno
     de ‘time.gmtime(0)’.  É 1º de janeiro de 1970, 00:00:00 (UTC) em
     todas as plataformas.

   * O termo 'segundos desde a era' refere-se ao número total de
     segundos decorrido desde a era, tipicamente excluindo-se os
     segundos bissextos(1).  Segundos bissextos são excluídos desse
     total em todas as plataformas compatíveis com POSIX.

   * As funções desse módulo podem não conseguir tratar de datas e
     horários antes do *note epoch: 2bf6. ou muito distantes no futuro.
     O limite no futuro é determinado pela biblioteca C; para sistemas
     de 32 bit, geralmente é 2038.

   * A função *note strptime(): 1474. pode analisar anos de 2 dígitos
     quando é passado o código de formato ‘%y’.  Quando anos de 2
     dígitos são analisados, eles são convertidos de acordo com os
     padrões POSIX e ISO C: valores 69–99 são mapeados para 1969–1999, e
     valores 0–68 são mapeados para 2000–2068.

   * UTC é Coordinated Universal Time(2) (em português, Horário
     Universal Coordenado) e substituiu o GMT ou Greenwich Mean Time(3)
     (em português, Horário Médio de Greenwich) como base da
     cronometragem internacional.  A sigla UTC não é um erro, mas está
     em conformidade com um esquema de nomenclatura anterior,
     independente de idioma, para padrões de tempo como UT0, UT1 e UT2.

   * DST é Daylight Saving Time (Horário de Verão), um ajuste de fuso
     horário por (normalmente) uma hora durante parte do ano.  As regras
     de Horário de Verão são mágicas (determinadas por leis locais) e
     podem mudar de ano a ano.  A biblioteca C possui uma tabela
     contendo as regras locais (normalmente lidas de um arquivo de
     sistema por flexibilidade) e nesse contexto é a única fonte de
     Conhecimento Verdadeiro.

   * A precisão de várias funções em tempo real podem ser menores do que
     o que pode estar sugerido pelas unidades nas quais seu valor ou
     argumento estão expressos.  Por exemplo, na maioria dos sistemas
     Unix, o relógio “conta” apenas 50 ou 100 vezes por segundo.

   * Por outro lado, a precisão de *note time(): 254. e *note sleep():
     69d. é melhor do que suas equivalentes Unix: tempos são expressos
     como números em ponto flutuante, *note time(): 254. retorna o tempo
     mais preciso disponível (utilizando ‘gettimeofday()’ do Unix,
     quando disponível) e *note sleep(): 69d. irá aceitar qualquer tempo
     como uma fração não zero (‘select()’ do Unix é utilizada para
     implementar isto, quando disponível).

   * O valor de tempo conforme retornado pelas *note gmtime(): 1200,
     *note localtime(): 1541, e *note strptime(): 1474, e aceito pelas
     *note asctime(): 1227, *note mktime(): 1228. e *note strftime():
     1229, é uma sequência de 9 inteiros.  Os valores retornados das
     *note gmtime(): 1200, *note localtime(): 1541, e *note strptime():
     1474. também oferecem nomes de atributo para campos individuais.

     Veja *note struct_time: d0b. para a descrição desses objetos.

     Alterado na versão 3.3: O tipo *note struct_time: d0b. foi
     estendido para prover os atributos *note tm_gmtoff: 2e12. e *note
     tm_zone: 2e13. quando a plataforma suporta os membros ‘struct tm’
     correspondentes

     Alterado na versão 3.6: Os atributos *note tm_gmtoff: 2e12. e *note
     tm_zone: 2e13. da classe *note struct_time: d0b. estão disponíveis
     em todas as plataformas agora.

   * Utilize as seguintes funções para converter entre representações de
     tempo:

     De                            Para                          Utilize
                                                                 
     ------------------------------------------------------------------------------------------
                                                                 
     segundos desde a era          *note struct_time: d0b. em    *note gmtime(): 1200.
                                   UTC                           
                                   
                                                                 
     segundos desde a era          *note struct_time: d0b. em    *note localtime(): 1541.
                                   tempo local                   
                                   
                                                                 
     *note struct_time: d0b. em    segundos desde a era          *note calendar.timegm(): 2678.
     UTC                                                         

     *note struct_time: d0b. em    segundos desde a era          *note mktime(): 1228.
     tempo local                                                 

* Menu:

* Funções: Funções<5>.
* Constantes de ID de Relógio::
* Constantes de Fuso Horário::

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Leap_second

   (2) https://en.wikipedia.org/wiki/Coordinated_Universal_Time

   (3) https://en.wikipedia.org/wiki/Greenwich_Mean_Time


File: python.info,  Node: Funções<5>,  Next: Constantes de ID de Relógio,  Up: time — Acesso ao horário e conversões

5.16.3.1 Funções
................

 -- Função: time.asctime ([t])

     Converte a tupla ou *note struct_time: d0b. representando um tempo
     como retornado pela *note gmtime(): 1200. ou *note localtime():
     1541. para uma string com o seguinte formato: ‘'Sun Jun 20 23:21:05
     1993'’.  O campo dia contém dois caracteres e possui espaçamento se
     o dia é de apenas um dígito.  Por exemplo, ‘'Wed Jun 9 04:26:40
     1993'’.

     Se 't' não é fornecido, o tempo atual como retornado por *note
     localtime(): 1541. é utilizado.  Informação de localidade não é
     utilizada por *note asctime(): 1227.

          Nota: Diferentemente da função em C de mesmo nome, *note
          asctime(): 1227. não adiciona uma nova linha em seguida.

 -- Função: time.pthread_getcpuclockid (thread_id)

     Retorna o 'clk_id' do relógio de tempo de CPU específico da thread
     para a 'thread_id' especificada.

     Utilize a *note threading.get_ident(): 1199. ou o atributo *note
     ident: 2e16. dos objetos *note threading.Thread: 953. para obter um
     valor adequado para 'thread_id'.

          Aviso: Passando um 'thread_id' inválido ou expirado pode
          resultar em um comportamento indefinido, como, por exemplo,
          falha de segmentação.

     *note Disponibilidade: 1ed8.: Unix

     Veja a página man para ‘pthread_getcpuclockid(3)(1)’ para mais
     informações.

     Adicionado na versão 3.7.

 -- Função: time.clock_getres (clk_id)

     Retorna a resolução (precisão) do relógio 'clk_id' especificado.
     Confira *note Constantes de ID de Relógio: 2d8e. para uma lista de
     valores aceitos para 'clk_id'

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

 -- Função: time.clock_gettime (clk_id) -> float

     Retorna o tempo to relógio 'clk_id' especificado.  Confira *note
     Constantes de ID de Relógio: 2d8e. para uma lista de valores
     aceitos para 'clk_id'.

     Use *note clock_gettime_ns(): af4. para evitar perda de precisão
     causada pelo tipo *note float: 2f7.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

 -- Função: time.clock_gettime_ns (clk_id) -> int

     Semelhante à *note clock_gettime(): 119d, mas retorna o tempo em
     nanossegundos.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.7.

 -- Função: time.clock_settime (clk_id, time: float)

     Define o tempo do relógio 'clk_id' especificado.  Atualmente, *note
     CLOCK_REALTIME: 69a. é o único valor aceito para 'clk_id'.

     Use *note clock_settime_ns(): af5. para evitar perda de precisão
     causada pelo tipo *note float: 2f7.

     *note Disponibilidade: 1ed8.: Unix, not Android, not iOS.

     Adicionado na versão 3.3.

 -- Função: time.clock_settime_ns (clk_id, time: int)

     Semelhante à *note clock_settime(): 119e, mas define o tempo em
     nanossegundos.

     *note Disponibilidade: 1ed8.: Unix, not Android, not iOS.

     Adicionado na versão 3.7.

 -- Função: time.ctime ([secs])

     Converte um tempo expresso em segundos desde o *note epoch: 2bf6.
     para uma string de forma: ‘'Sun Jun 20 23:21:05 1993'’
     representando tempo local.  O campo dia tem comprimento de dois
     caracteres e é deslocado por um espaço se o dia tem um único
     dígito.  Por exemplo, ‘'Wed Jun 9 04:26:40 1993'’.

     Se 'secs' não é fornecido ou *note None: 675, o tempo atual como
     retornado por *note time(): 254. é utilizado.  ‘ctime(secs)’ é
     equivalente a ‘asctime(localtime(secs))’.  Informação de localidade
     não é utilizada por *note ctime(): 25f4.

 -- Função: time.get_clock_info (name)

     Obtém informação do relógio específico como um objeto espaço de
     nomes.  Nomes de relógios suportados e as funções correspondentes
     para ler seus valores são:

        * ‘'monotonic'’: *note time.monotonic(): 253.

        * ‘'perf_counter'’: *note time.perf_counter(): a92.

        * ‘'process_time'’: *note time.process_time(): a93.

        * ‘'thread_time'’: *note time.thread_time(): 93d.

        * ‘'time'’: *note time.time(): 254.

     O resultado tem os seguintes atributos:

        - 'adjustable': ‘True’ se o relógio puder ser configurado para
          avançar ou retroceder no tempo, ‘False’ caso contrário.  Não
          se refere a ajustes graduais da taxa NTP.

        - 'implementation': O nome da função C subjacente utilizada para
          obter o valor do relógio.  Confira *note Constantes de ID de
          Relógio: 2d8e. para valores possíveis.

        - 'monotonic': ‘True’ se o relógio não pode retornar a valores
          anteriores, backward, ‘False’ contrário

        - 'resolution': A resolução do relógio em segundos (*note float:
          2f7.)

     Adicionado na versão 3.3.

 -- Função: time.gmtime ([secs])

     Converte um tempo expresso em segundos desde o *note epoch: 2bf6.
     para uma *note struct_time: d0b. em UTC onde o sinalizador de
     horário de verão é sempre zero.  Se 'secs' não é fornecido ou *note
     None: 675, o tempo atual como retornado por *note time(): 254. é
     utilizado.  Frações de segundo são ignoradas.  Veja acima para uma
     descrição do objeto *note struct_time: d0b.  Veja *note
     calendar.timegm(): 2678. para o inverso desta função.

 -- Função: time.localtime ([secs])

     Como *note gmtime(): 1200, mas converte para o tempo local.  Se
     'secs' não é fornecido ou *note None: 675, o tempo atual como
     retornado por *note time(): 254. é utilizado.  O sinalizador de
     horário de verão é definido como ‘1’ quando o Horário de verão for
     aplicável para o tempo fornecido.

     *note localtime(): 1541. pode levantar *note OverflowError: 885, se
     o registro de data e hora estiver fora de valores suportados pelas
     funções ‘localtime()’ or ‘gmtime()’ da plataforma C, e *note
     OSError: 417. no caso de ‘localtime()’ ou ‘gmtime()’ falharem.  É
     comum É comum que isso seja restrito a anos de 1970 a 2038.

 -- Função: time.mktime (t)

     Esta é a função inversa de *note localtime(): 1541.  Seu argumento
     é a *note struct_time: d0b. ou uma tupla com 9 itens (sendo o
     sinalizador de horário de verão necessário; utilize ‘-1’ como
     sinalizador de horário de verão quando este for desconhecido) que
     expressa o tempo em tempo 'local', não UTC. Retorna um número em
     ponto flutuante, para ter compatibilidade com *note time(): 254.
     Se o valor de entrada não puder ser representado como um tempo
     válido, ou *note OverflowError: 885. ou *note ValueError: 202.
     serão levantadas (o que irá depender se o valor inválido é
     capturado pelo Python ou por bibliotecas C subjacentes).  A data
     mais recente para qual um tempo pode ser gerado é dependente da
     plataforma.

 -- Função: time.monotonic () -> float

     Retorna o valor (em frações de segundos) de um relógio monotônico,
     i.e.  um relógio que não pode voltar a valores anteriores.  O
     relógio não é afetado por atualizações do relógio do sistema.  O
     ponto de referência do valor retornado é indefinido, portanto
     apenas a diferença entre os resultados de duas chamadas é válida.

     Relógio:

        * No Windows, chama ‘QueryPerformanceCounter()’ e
          ‘QueryPerformanceFrequency()’.

        * No macOS, chama ‘mach_absolute_time()’ e
          ‘mach_timebase_info()’.

        * No HP-UX, chama ‘gethrtime()’.

        * Chama ‘clock_gettime(CLOCK_HIGHRES)’ se disponível.

        * Do contrário, chama ‘clock_gettime(CLOCK_MONOTONIC)’.

     Use *note monotonic_ns(): af6. para evitar perda de precisão
     causada pelo tipo *note float: 2f7.

     Adicionado na versão 3.3.

     Alterado na versão 3.5: A função agora está sempre disponível e o
     relógio agora é o mesmo para todos os processos.

     Alterado na versão 3.10: No macOS, o relógio agora é o mesmo para
     todos os processos.

 -- Função: time.monotonic_ns () -> int

     Semelhante à *note monotonic(): 253, mas retorna tempo em
     nanossegundos.

     Adicionado na versão 3.7.

 -- Função: time.perf_counter () -> float

     Retorna o valor (em frações de segundo) de um contador de
     desempenho, i.e.  um relógio com a maior resolução disponível para
     medir uma duração curta.  Inclui o tempo decorrido durante a pausa.
     O relógio é o mesmo para todos os processos.  O ponto de referência
     é do valor retornado é indefinido, portanto apenas a diferença
     entre resultados de duas chamadas é válida.

     No CPython, use o mesmo relógio que *note time.monotonic(): 253. e
     é um relógio monotônico, ou seja, um relógio que não pode
     retroceder.

     Use *note perf_counter_ns(): af7. para evitar perda de precisão
     causada pelo tipo *note float: 2f7.

     Adicionado na versão 3.3.

     Alterado na versão 3.10: No Windows, o relógio agora é o mesmo para
     todos os processos.

     Alterado na versão 3.13: Usa o mesmo relógio que *note
     time.monotonic(): 253.

 -- Função: time.perf_counter_ns () -> int

     Semelhante à *note perf_counter(): a92, mas retorna o tempo em
     nanossegundos.

     Adicionado na versão 3.7.

 -- Função: time.process_time () -> float

     Retorna o valor (em frações de segundo) da soma dos tempos do
     sistema e CPU de usuário do processo atual.  Não inclui o tempo
     decorrido durante a pausa.  É de todo o processo por definição.  O
     ponto de referência do valor retornado é indefinido, então apenas a
     diferença dos resultados de duas chamadas é válida.

     Use *note process_time_ns(): af8. para evitar perda de precisão
     causada pelo tipo *note float: 2f7.

     Adicionado na versão 3.3.

 -- Função: time.process_time_ns () -> int

     Semelhante à *note process_time(): a93, mas retorna o tempo em
     nanossegundos.

     Adicionado na versão 3.7.

 -- Função: time.sleep (secs)

     Suspende a execução da thread de chamada por um determinado número
     de segundos.  O argumento pode ser um número de ponto flutuante
     para indicar um tempo de pausa mais preciso.

     Se a pausa for interrompida por um sinal e nenhuma exceção for
     levantada pelo manipulador de sinal, a pausa será reiniciada com um
     tempo limite recalculado.

     O tempo de suspensão pode ser maior do que o solicitado por um
     valor arbitrário, devido ao agendamento de outras atividades no
     sistema.

     Implementação no Windows
     ........................

     No Windows, se 'secs' é zero, a thread renuncia ao restante de sua
     fatia de tempo para qualquer outra thread que esteja pronto para
     executar.  Se nenhuma outra thread estiver pronta pra ser
     executada, a função retorna imediatamente, e a thread continua a
     execução.  No Windows 8.1 e mais novos a implementação usa um
     temporizador de alta resolução(2) que provê uma resolução de 100
     nanossegundos.  Se 'secs' é zero, é usado ‘Sleep(0)’.

     Implementação no Unix
     .....................

        * Usa ‘clock_nanosleep()’ se disponível (resolução: 1
          nanossegundo);

        * Ou usa ‘nanosleep()’ se disponível (resolução: 1
          nanossegunda);

        * Ou usa ‘select()’ (resolução: 1 microssegundo).

          Nota: Para emular um “no-op”, use *note pass: 1d99. em vez de
          ‘time.sleep(0)’.

          Para abrir mão voluntariamente da CPU, especifique uma *note
          política de agendamento: 2dd5. em tempo real e use *note
          os.sched_yield(): 1150. em seu lugar.

     Levanta um *note evento de auditoria: 19fa. ‘time.sleep’ com o
     argumento ‘secs’.

     Alterado na versão 3.5: A função agora pausa por pelo menos 'secs'
     mesmo se a pausa é interrompido por um sinal, exceto se o tratador
     de sinal levanta uma exceção (veja PEP 475(3) para a explicação).

     Alterado na versão 3.11: No Unix, as funções ‘clock_nanosleep()’ e
     ‘nanosleep()’ são agora usadas se estiverem disponíveis.  No
     Windows, um temporizador aguardável é agora usado.

     Alterado na versão 3.13: Levanta um evento de auditoria.

 -- Função: time.strftime (format[, t])

     Converte a tupla ou *note struct_time: d0b. representando um tempo
     como retornado por *note gmtime(): 1200. ou *note localtime():
     1541. para uma string como especificado pelo argumento 'format'.
     Se 't' não é fornecido, o tempo atual como retornado pela *note
     localtime(): 1541. é utilizado.  'format' deve ser uma string.  A
     exceção *note ValueError: 202. é levantada se qualquer campo em 't'
     está fora do intervalo permitido.

     0 é um argumento legal para qualquer posição na tupla de tempo; se
     é normalmente ilegal, o valor é formado a um valor correto.

     As diretivas a seguir podem ser incorporadas na string 'format'.
     Elas estão mostradas sem os campos de comprimento e especificação
     de precisão opcionais, e estão substituídos pelos caracteres
     indicados no resultado da *note strftime(): 1229.:

     Diretiva        Significado                                          Notas
                                                                          
     ---------------------------------------------------------------------------------
                                                                          
     ‘%a’            Nome abreviado do dia da semana da localidade.
                     
                                                                          
     ‘%A’            Nome completo do dia da semana da localidade.
                     
                                                                          
     ‘%b’            Nome abreviado do mês da localidade.
                     
                                                                          
     ‘%B’            Nome completo do mês da localidade.
                     
                                                                          
     ‘%c’            Representação de data e hora apropriada da
                     localidade.
                     
                                                                          
     ‘%d’            Dia do mês como um número decimal [01,31].
                     
                                                                          
     ‘%f’            Microssegundos como um número decimal                (1)
                                                                          
                          [000000,999999].
                     
                                                                          
     ‘%H’            Hora (relógio 24 horas) como um número decimal
                     [00,23].
                     
                                                                          
     ‘%I’            Hora (relógio 12 horas) como um número decimal
                     [01,12].
                     
                                                                          
     ‘%j’            Dia do ano como um número decimal [001,366].
                     
                                                                          
     ‘%m’            Mês como um número decimal [01,12].
                     
                                                                          
     ‘%M’            Minuto como um número decimal [00,59].
                     
                                                                          
     ‘%p’            Equivalente da localidade a AM ou PM.                (2)
                                                                          
                                                                          
     ‘%S’            Segundo como um número decimal [00,61].              (3)
                                                                          
                                                                          
     ‘%U’            Número da semana do ano (domingo como primeiro dia   (4)
                     da semana) como um número decimal [00,53].  Todos    
                     os dias em um ano novo que precedem o primeiro
                     domingo são considerados como estando na semana 0.
                     
                                                                          
     ‘%u’            Dia da semana (segunda-feira é 1; domingo é 7)
                     como um número decimal [1, 7].
                     
                                                                          
     ‘%w’            Dia da semana como um número decimal
                     [0(Domingo),6]
                     
                                                                          
     ‘%W’            Número da semana do ano (segunda-feira como o        (4)
                     primeiro dia da semana) como um número decimal       
                     [00,53].  Todos os dias do ano que precedem o
                     primeiro domingo serão considerados como estando
                     na semana 0.
                     
                                                                          
     ‘%x’            Representação de data apropriada de localidade.
                     
                                                                          
     ‘%X’            Representação de hora apropriada da localidade.
                     
                                                                          
     ‘%y’            Ano sem século como um número decimal [00,99].
                     
                                                                          
     ‘%Y’            Ano com século como um número decimal.
                     
                                                                          
     ‘%z’            Deslocamento de fuso horário indicando uma
                     diferença de tempo positiva ou negativa de UTC/GMT
                     formatado como +HHMM ou -HHMM, onde H representa
                     os dígitos decimais de hora e M representa os
                     dígitos decimais de minuto [-23:59, +23:59].  (4)
                     
                                                                          
     ‘%Z’            Nome do fuso horário (nenhum caractere se nenhum
                     fuso horário existe).  Descontinuado.  (5)
                     
                                                                          
     ‘%G’            Ano ISO 8601 (semelhante a ‘%Y’, mas segue as
                     regras para o ano calendário ISO 8601).  O ano
                     começa com a semana que contém a primeira
                     quinta-feira do ano calendário.
                     
                                                                          
     ‘%V’            Número da semana ISO 8601 (como um número decimal
                     [01,53]).  A primeira semana do ano é aquela que
                     contém a primeira quinta-feira do ano.  As semanas
                     começam na segunda-feira.
                     
                                                                          
     ‘%%’            Um caractere literal ‘'%'’.
                     

     Notas:

       1. A diretiva de formatação ‘%f’ é somente aplicada para *note
          strptime(): 1474, não para *note strftime(): 1229.  Contudo,
          veja também *note datetime.datetime.strptime(): 16f6. e *note
          datetime.datetime.strftime(): caf. onde a diretiva de
          formatação ‘%f’ *note é aplicada para microssegundos: 25c6.

       2. Quando utilizado com a função *note strptime(): 1474, a
          diretiva ‘%p’ apenas afeta a saída do campo se a diretiva ‘%I’
          é utilizada para analisar a hora.

       3. O intervalo é realmente ‘0’ até ‘61’; o valor ‘60’ é válido em
          registros de data e hora representando segundos bissextos(6) e
          o valor ‘61’ é suportado por razões históricas.

       4. Quando utilizado co a função *note strptime(): 1474, ‘%U’ e
          ‘%W’ são utilizados em cálculos apenas quando o dia da semana
          e ano são especificados.

     Veja este exemplo, um formato para datas compatível com as
     especificações dos padrões de e-mail RFC 5322(7).  (8)

          >>> from time import gmtime, strftime
          >>> strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime())
          'Thu, 28 Jun 2001 14:17:15 +0000'

     Diretivas adicionais podem ser suportadas por algumas plataformas,
     mas apenas as listadas aqui possuem significado padronizado por
     ANSI C. Para ver a lista completa de códigos de formato suportados
     na sua plataforma, consulte a documentação ‘strftime(3)(9)’.

     Em algumas plataformas, um campo adicional de comprimento e
     especificação de precisão podem seguir imediatamente após ‘'%'’
     como uma diretiva da seguinte ordem; isto também não é portátil.  O
     campo comprimento normalmente é 2 exceto para ‘%j’ quando é 3.

 -- Função: time.strptime (string[, format])

     Analisa a string representando um tempo de acordo com um formato.
     O valor retornado é um *note struct_time: d0b. como retornado por
     *note gmtime(): 1200. ou *note localtime(): 1541.

     O parâmetro 'format' utiliza as mesmas diretivas das utilizadas por
     *note strftime(): 1229.; é definido por padrão para ‘"%a %b %d
     %H:%M:%S %Y"’ que corresponde com a formatação retornada por *note
     ctime(): 25f4.  Se 'string' não puder ser analisada de acordo com
     'format', ou se possui excesso de dados após analisar, *note
     ValueError: 202. é levantado.  Os valores padrão utilizados para
     preencher quaisquer dados faltantes quando valores mais precisos
     não puderem ser inferidos são ‘(1900, 1, 1, 0, 0, 0, 0, 1, -1)’.
     Ambos 'string' e 'format' devem ser strings.

     Por exemplo:

          >>> import time
          >>> time.strptime("30 Nov 00", "%d %b %y")
          time.struct_time(tm_year=2000, tm_mon=11, tm_mday=30, tm_hour=0, tm_min=0,
                           tm_sec=0, tm_wday=3, tm_yday=335, tm_isdst=-1)

     Suporte para a diretiva ‘%Z’ é baseado nos valores contidos em
     ‘tzname’ e se ‘daylight’ é verdade.  Por causa disso, é específico
     de plataforma exceto por reconhecer UTC e GMT, que são sempre
     conhecidos (e considerados fuso horários sem horários de verão).

     Apenas as diretivas especificadas na documentação são suportadas.
     Como ‘strftime()’ é implementada por plataforma, esta pode apenas
     as vezes oferecer mais diretivas do que as listadas aqui.  Mas
     ‘strptime()’ é independente de quaisquer plataformas e portanto não
     necessariamente suporta todas as diretivas disponíveis que não
     estão documentadas como suportadas.

 -- Classe: time.struct_time

     O tipo da sequência de valor de tempo retornado por *note gmtime():
     1200, *note localtime(): 1541, e *note strptime(): 1474.  É um
     objeto com uma interface *note named tuple: 64e.: os valores podem
     ser acessados por um índice e por um nome de atributo.  Os
     seguintes valores estão presentes:

     Índice                                Atributo                              Valores
                                                                                 
                                                                                 
     0                                      -- Atributo: tm_year                 (por exemplo, 1993)
                                                                                 
                                                                                 
     1                                      -- Atributo: tm_mon                  intervalo [1,12]
                                                                                 
                                                                                 
     2                                      -- Atributo: tm_mday                 intervalo [1,31]
                                                                                 
                                                                                 
     3                                      -- Atributo: tm_hour                 intervalo [0,23]
                                                                                 
                                                                                 
     4                                      -- Atributo: tm_min                  intervalo [0,59]
                                                                                 
                                                                                 
     5                                      -- Atributo: tm_sec                  intervalo [0, 61]; veja
                                                                                 *note Nota (2): 2e17. em
                                                                                 *note strftime(): 1229.
                                                                                 
                                                                                 
     6                                      -- Atributo: tm_wday                 intervalo [0, 6]; segunda-feira é 0
                                                                                 
                                                                                 
     7                                      -- Atributo: tm_yday                 intervalo [1, 366]
                                                                                 
                                                                                 
     8                                      -- Atributo: tm_isdst                0, 1 ou -1; veja abaixo
                                                                                 
                                                                                 
     N/D                                    -- Atributo: tm_zone                 abreviação do nome do fuso horário
                                                                                 
                                                                                 
     N/D                                    -- Atributo: tm_gmtoff               deslocamento a leste de UTC em
                                                                                 segundos
                                                                                 

     Note que diferentemente da estrutura C, o valor do mês é um
     intervalo [1,12] e não [0,11].

     Em chamadas para *note mktime(): 1228, *note tm_isdst: 2605. pode
     ser definido como 1 quando o horário de verão estiver em efeito, e
     0 quando não.  Um valor de -1 indica que esta informação não é
     conhecida, e geralmente resultará no preenchimento do estado
     correto.

     Quando uma tupla com comprimento incorreto é passada para uma
     função que espera por um *note struct_time: d0b, ou por possuir
     elementos do tipo errado, um *note TypeError: 2c3. é levantado.

 -- Função: time.time () -> float

     Retorna o tempo em segundos desde o *note epoch: 2bf6. como um
     número em ponto flutuante.  A manipulação de segundos bissextos(10)
     é dependente da plataforma.  No Windows e na maioria dos sistemas
     Unix, o segundo bissexto não é contado para o tempo desde o *note
     epoch: 2bf6.  Isso é comumente referido como epoch ou era Unix(11).

     Note que mesmo o tempo sendo retornado sempre como um número em
     ponto flutuante, nem todos os sistemas fornecem o tempo com
     precisão melhor que 1 segundo.  Enquanto esta função normalmente
     retorna valores não decrescentes, pode retornar valores menores do
     que os de uma chamada anterior se o relógio do sistema foi
     redefinido entre duas chamadas.

     O número retornado por *note time(): 254. pode ser convertido a um
     formato de tempo mais comum (i.e.  ano, mês, dia, hora etc…) em UTC
     por passá-lo para a função *note gmtime(): 1200. ou em tempo local
     por passar para a função *note localtime(): 1541.  Em ambos os
     casos, o objeto *note struct_time: d0b. é retornado, por onde os
     componentes de data do calendário podem ser acessados ou
     atribuídos.

     Relógio:

        * No Windows, chama ‘GetSystemTimePreciseAsFileTime()’.

        * Chama ‘clock_gettime(CLOCK_REALTIME)’ se disponível.

        * Caso contrário, chama ‘gettimeofday()’.

     Use *note time_ns(): af9. para evitar perda de precisão causada
     pelo tipo *note float: 2f7.

Alterado na versão 3.13: No Windows, chama
‘GetSystemTimePreciseAsFileTime()’ em vez de
‘GetSystemTimeAsFileTime()’.

 -- Função: time.time_ns () -> int

     Semelhante à *note time(): 254, mas retorna o tempo como um número
     inteiro de nanossegundos desde o *note epoch: 2bf6.

     Adicionado na versão 3.7.

 -- Função: time.thread_time () -> float

     Retorna o valor (em fração de segundos) da soma dos tempos de
     sistema e CPU de usuário para a thread atual.  Não inclui o tempo
     decorrido durante a pausa.  É específico a thread por definição.  O
     ponto de referência do valor retornado é indefinido, então apenas a
     diferença dos resultados de duas chamadas é válida.

     Use *note thread_time_ns(): ba9. para evitar perda de precisão
     causada pelo tipo *note float: 2f7.

     *note Disponibilidade: 1ed8.: Linux, Unix, Windows.

     Sistemas Unix possuem suporte para ‘CLOCK_THREAD_CPUTIME_ID’.

     Adicionado na versão 3.7.

 -- Função: time.thread_time_ns () -> int

     Semelhante à *note thread_time(): 93d, mas retorna o tempo em
     nanossegundos.

     Adicionado na versão 3.7.

 -- Função: time.tzset ()

     Redefine as regras de conversão utilizadas pelas rotinas da
     biblioteca.  A variável de ambiente ‘TZ’ especifica como isto é
     feito.  Também irá redefinir as variáveis ‘tzname’ (da variável de
     ambiente ‘TZ’), ‘timezone’ (segundos sem horário de verão a oeste
     de UTC), ‘altzone’ (segundos com horário de verão a oeste de UTC) e
     ‘daylight’ (para 0 se este fuso horário não possui nenhuma regra de
     horário de verão, ou diferente de zero se há um tempo, no presente,
     passado ou futuro quando o horário de verão se aplica).

     *note Disponibilidade: 1ed8.: Unix.

          Nota: Embora em vários casos, alterar a variável de sistema
          ‘TZ’ pode afetar a saída de funções como *note localtime():
          1541. sem chamar *note tzset(): 2e1f, este comportamento não
          deve ser confiado.

          A variável de sistema ‘TZ’ não deve conter espaços em branco.

     O formato padrão da variável de sistema ‘TZ’ é (espaços foram
     adicionados por motivos de clareza):

          std offset [dst [offset [,start[/time], end[/time]]]]

     Onde os componentes são:

     ‘std’ e ‘dst’

          Três ou mais alfanuméricos fornecendo a abreviação do fuso
          horário.  Estes serão propagados para time.tzname

     ‘offset’

          O deslocamento tem a forma: ‘± hh[:mm[:ss]]’.  Isso indica que
          o valor adicionado adicionou o horário local para chegar a
          UTC.  Se precedido por um ‘-’, o fuso horário está a leste do
          Meridiano Primário; do contrário, está a oeste.  Se nenhum
          deslocamento segue o horário de verão, o tempo no verão é
          presumido como estando uma hora a frente do horário padrão.

     ‘start[/time], end[/time]’

          Indica quando mudar e voltar do Horário de Verão.  O formato
          das datas de início e fim é um dos seguintes:

          ‘JN’

               I dia juliano 'n' (1 <= 'n' <= 365).  Os dias bissextos
               não são contados, então, em todos os anos, 28 de
               fevereiro é o dia 59 e 1 de março é o dia 60.

          ‘N’

               O dia juliano baseado em zero (0 <= 'n' <= 365).  Dias
               bissextos são contados, e é possível fazer referência a
               29 de fevereiro.

          ‘MM.N.D’

               O 'd'-ésimo dia (0 <= 'd' <= 6) da semana 'n' do mês 'm'
               do ano (1 <= 'n' <= 5, 1 <= 'm' <= 12, onde semana 5
               significa “o último dia 'd' no mês 'm'” que pode ocorrer
               tanto na quarta como quinta semana).  Semana 1 é a
               primeira semana na qual o 'd'-ésimo dia ocorre.  Dia zero
               é o domingo.

          ‘time’ tem o mesmo formato que ‘offset’, exceto que nenhum
          sinal no início é permitido (‘-’ ou ‘+’).  O padrão, se o
          tempo não é dado, é 02:00:00.

          >>> os.environ['TZ'] = 'EST+05EDT,M4.1.0,M10.5.0'
          >>> time.tzset()
          >>> time.strftime('%X %x %Z')
          '02:07:36 05/08/03 EDT'
          >>> os.environ['TZ'] = 'AEST-10AEDT-11,M10.5.0,M3.5.0'
          >>> time.tzset()
          >>> time.strftime('%X %x %Z')
          '16:08:12 05/08/03 AEST'

     Em muitos sistemas Unix (incluindo *BSD, Linux, Solaris, e Darwin),
     é mais conveniente utilizar o banco de dados de informação de fuso
     do sistema (‘tzfile(5)(12)’) para especificar as regras de fuso
     horário.  Para fazer isso, defina a variável de sistema ‘TZ’ ao
     path do arquivo de dados requerido de fuso horários, relativo à
     raiz do banco de dados de fuso horário ‘zoneinfo’ do sistema,
     geralmente encontrado em ‘/usr/share/zoneinfo’.  Por exemplo,
     ‘'US/Eastern'’, ‘'Australia/Melbourne'’, ‘'Egypt'’ ou
     ‘'Europe/Amsterdam'’.

          >>> os.environ['TZ'] = 'US/Eastern'
          >>> time.tzset()
          >>> time.tzname
          ('EST', 'EDT')
          >>> os.environ['TZ'] = 'Egypt'
          >>> time.tzset()
          >>> time.tzname
          ('EET', 'EEST')

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/pthread_getcpuclockid(3)

   (2) 
https://learn.microsoft.com/windows/win32/api/synchapi/nf-synchapi-createwaitabletimerexw

   (3) https://peps.python.org/pep-0475/

   (4) A utilização de ‘%Z’ está descontinuada, mas o escape ‘%z’ que
expande para um deslocamento hora/minuto preferido não é suportado por
todas as bibliotecas ANSI C. Além disso, a leitura do padrão original
RFC 822 (https://datatracker.ietf.org/doc/html/rfc822.html) de 1982
mostra que este pede um ano com dois dígitos (‘%y’ em vez de ‘%Y’), mas
a prática consolidou a utilização de anos com 4 dígitos mesmo antes dos
anos 2000.  Após isso, o RFC 822
(https://datatracker.ietf.org/doc/html/rfc822.html) tornou-se obsoleto e
o ano de 4 dígitos foi primeiro recomendado por RFC 1123
(https://datatracker.ietf.org/doc/html/rfc1123.html) e depois
obrigatório por RFC 2822
(https://datatracker.ietf.org/doc/html/rfc2822.html), com RFC 5322
(https://datatracker.ietf.org/doc/html/rfc5322.html) continuando este
requisito.

   (5) A utilização de ‘%Z’ está descontinuada, mas o escape ‘%z’ que
expande para um deslocamento hora/minuto preferido não é suportado por
todas as bibliotecas ANSI C. Além disso, a leitura do padrão original
RFC 822 (https://datatracker.ietf.org/doc/html/rfc822.html) de 1982
mostra que este pede um ano com dois dígitos (‘%y’ em vez de ‘%Y’), mas
a prática consolidou a utilização de anos com 4 dígitos mesmo antes dos
anos 2000.  Após isso, o RFC 822
(https://datatracker.ietf.org/doc/html/rfc822.html) tornou-se obsoleto e
o ano de 4 dígitos foi primeiro recomendado por RFC 1123
(https://datatracker.ietf.org/doc/html/rfc1123.html) e depois
obrigatório por RFC 2822
(https://datatracker.ietf.org/doc/html/rfc2822.html), com RFC 5322
(https://datatracker.ietf.org/doc/html/rfc5322.html) continuando este
requisito.

   (6) https://en.wikipedia.org/wiki/Leap_second

   (7) https://datatracker.ietf.org/doc/html/rfc5322.html

   (8) A utilização de ‘%Z’ está descontinuada, mas o escape ‘%z’ que
expande para um deslocamento hora/minuto preferido não é suportado por
todas as bibliotecas ANSI C. Além disso, a leitura do padrão original
RFC 822 (https://datatracker.ietf.org/doc/html/rfc822.html) de 1982
mostra que este pede um ano com dois dígitos (‘%y’ em vez de ‘%Y’), mas
a prática consolidou a utilização de anos com 4 dígitos mesmo antes dos
anos 2000.  Após isso, o RFC 822
(https://datatracker.ietf.org/doc/html/rfc822.html) tornou-se obsoleto e
o ano de 4 dígitos foi primeiro recomendado por RFC 1123
(https://datatracker.ietf.org/doc/html/rfc1123.html) e depois
obrigatório por RFC 2822
(https://datatracker.ietf.org/doc/html/rfc2822.html), com RFC 5322
(https://datatracker.ietf.org/doc/html/rfc5322.html) continuando este
requisito.

   (9) https://manpages.debian.org/strftime(3)

   (10) https://en.wikipedia.org/wiki/Leap_second

   (11) https://en.wikipedia.org/wiki/Unix_time

   (12) https://manpages.debian.org/tzfile(5)


File: python.info,  Node: Constantes de ID de Relógio,  Next: Constantes de Fuso Horário,  Prev: Funções<5>,  Up: time — Acesso ao horário e conversões

5.16.3.2 Constantes de ID de Relógio
....................................

Essas constantes são utilizadas como parâmetros para *note
clock_getres(): 119c. e *note clock_gettime(): 119d.

 -- Dado: time.CLOCK_BOOTTIME

     Idêntica a *note CLOCK_MONOTONIC: 699, exceto por também incluir
     qualquer tempo que o sistema está suspenso.

     Isto permite que aplicações recebam um relógio monotônico
     consciente suspenso sem precisar lidar com as complicações de *note
     CLOCK_REALTIME: 69a, que pode conter descontinuidades se o tempo é
     alterado utilizando ‘settimeofday()’ ou algo semelhante.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.39.

     Adicionado na versão 3.7.

 -- Dado: time.CLOCK_HIGHRES

     O Solaris OS possui um timer ‘CLOCK_HIGHRES’ que tenta utilizar
     recursos otimizados do hardware, e pode fornecer resolução perto de
     nanossegundos.  ‘CLOCK_HIGHRES’ é o relógio nanoajustável de alta
     resolução.

     *note Disponibilidade: 1ed8.: Solaris.

     Adicionado na versão 3.3.

 -- Dado: time.CLOCK_MONOTONIC

     Relógio que não pode ser definido e representa um tempo monotônico
     desde um ponto de início não especificado.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

 -- Dado: time.CLOCK_MONOTONIC_RAW

     Semelhante à *note CLOCK_MONOTONIC: 699, mas fornece acesso a um
     tempo bruto baseado em hardware que não está sujeito a ajustes NTP.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.28, macOS >= 10.12.

     Adicionado na versão 3.3.

 -- Dado: time.CLOCK_MONOTONIC_RAW_APPROX

     Semelhante a *note CLOCK_MONOTONIC_RAW: 2e22, mas lê um armazenado
     pelo sistema no gerenciador de contexto e, portanto, tem menor
     precisão.

     *note Disponibilidade: 1ed8.: macOS >= 10.12.

     Adicionado na versão 3.13.

 -- Dado: time.CLOCK_PROCESS_CPUTIME_ID

     Timer de alta resolução por processo no CPU.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

 -- Dado: time.CLOCK_PROF

     Timer de alta resolução por processo no CPU.

     *note Disponibilidade: 1ed8.: FreeBSD, NetBSD >= 7, OpenBSD.

     Adicionado na versão 3.7.

 -- Dado: time.CLOCK_TAI

     Tempo Atômico Internacional(1)

     O sistema deve ter uma tabela de segundos bissextos para que possa
     fornecer a resposta correta.  Softwares PTP ou NTP podem manter uma
     tabela de segundos bissextos.

     *note Disponibilidade: 1ed8.: Linux.

     Adicionado na versão 3.9.

 -- Dado: time.CLOCK_THREAD_CPUTIME_ID

     Relógio de tempo de CPU específico a thread.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

 -- Dado: time.CLOCK_UPTIME

     Tempo cujo valor absoluto é o tempo que o sistema está sendo
     executado e não suspenso, fornecendo medidas de tempo de atividade
     precisas, tanto em valor absoluto quanto intervalo.

     *note Disponibilidade: 1ed8.: FreeBSD, OpenBSD >= 5.5.

     Adicionado na versão 3.7.

 -- Dado: time.CLOCK_UPTIME_RAW

     Relógio que incrementa de forma monotônica, contando o tempo desde
     um ponto arbitrário, não afetado pela frequência ou ajustes de
     tempo e não incrementado enquanto o sistema está dormindo.

     *note Disponibilidade: 1ed8.: macOS >= 10.12.

     Adicionado na versão 3.8.

 -- Dado: time.CLOCK_UPTIME_RAW_APPROX

     Semelhante a *note CLOCK_UPTIME_RAW: a4c, mas o valor é armazenado
     pelo sistema no gerenciador de contexto e, portanto, tem menor
     precisão.

     *note Disponibilidade: 1ed8.: macOS >= 10.12.

     Adicionado na versão 3.13.

A constante a seguir é o único parâmetro que pode ser enviado para *note
clock_settime(): 119e.

 -- Dado: time.CLOCK_REALTIME

     Relógio em tempo real.  Configurar este relógio requer privilégios
     apropriados.  O relógio é o mesmo para todos os processos.

     *note Disponibilidade: 1ed8.: Unix.

     Adicionado na versão 3.3.

   ---------- Footnotes ----------

   (1) 
https://www.nist.gov/pml/time-and-frequency-division/how-utcnist-related-coordinated-universal-time-utc-international


File: python.info,  Node: Constantes de Fuso Horário,  Prev: Constantes de ID de Relógio,  Up: time — Acesso ao horário e conversões

5.16.3.3 Constantes de Fuso Horário
...................................

 -- Dado: time.altzone

     O deslocamento do fuso horário DST local, em segundos a oeste de
     UTC, se algum for fornecido.  É negativo se o fuso horário DST
     local está a leste de UTC (como na Europa Ocidental, incluindo o
     Reino Unido).  Somente utilize se ‘daylight’ for diferente de zero.
     Veja a nota abaixo.

 -- Dado: time.daylight

     Diferente de zero se um fuso horário DST é definido.  Veja nota
     abaixo.

 -- Dado: time.timezone

     O deslocamento para o fuso horário local (não DST), em segundos a
     oeste de UTC (negativo na maior parte da Europa Ocidental, positivo
     nos Estados Unidos e Brasil, zero no Reino Unido).  Ver nota
     abaixo.

 -- Dado: time.tzname

     A tupla de duas strings: A primeira é o nome do fuso horário local
     não DST, a segunda é o nome do fuso horário local DST. Se nenhum
     fuso horário DST for definido, a segunda string é usada.  Veja nota
     abaixo.

     Nota: Para as constantes de Fuso Horário acima (*note altzone:
     2e29, *note daylight: 2e2a, *note timezone: 2e2b, e *note tzname:
     2e2c.), o valor é determinado pelas regras de fuso horário em
     efeito no módulo de carregamento de tempo ou a última vez que *note
     tzset(): 2e1f. é chamada e pode estar incorreto para tempos no
     passado.  É recomendado utilizar os resultados *note tm_gmtoff:
     2e12. e *note tm_zone: 2e13. da *note localtime(): 1541. para obter
     informação de fuso horário.

Ver também
..........

Módulo *note datetime: 30.

     Mais interfaces orientada a objetos para datas e tempos.

Módulo *note locale: 86.

     Serviços de internacionalização.  A configuração de localidade
     afeta a interpretação de muitos especificadores de formato em *note
     strftime(): 1229. e *note strptime(): 1474.

Módulo *note calendar: 14.

     Funções gerais relacionadas a calendários.  *note timegm(): 2678. é
     a função inversa de *note gmtime(): 1200. deste módulo.


File: python.info,  Node: logging — Recursos de registro de eventos para Python,  Next: logging config — Configuração do módulo logging,  Prev: time — Acesso ao horário e conversões,  Up: Serviços Genéricos do Sistema Operacional

5.16.4 ‘logging’ — Recursos de registro de eventos para Python
--------------------------------------------------------------

'Código-fonte:' Lib/logging/__init__.py(1)

Important
.........

Esta página contêm informação de referência da API. Para tutorial e
discussão de tópicos mais avançados, consulte

   * *note Tutorial básico: 1235.

   * *note Tutorial avançado: 1236.

   * *note Livro de receitas de logging: 1237.

__________________________________________________________________

Este módulo define funções e classes que implementam um registro
flexível de eventos de sistema para aplicações e bibliotecas.

O principal benefício de ter a API de registro de eventos a partir de um
módulo da biblioteca padrão é que todos os módulos Python podem
participar no registro de eventos, de forma que sua aplicação pode
incluir suas próprias mensagens, integradas com mensagens de módulos de
terceiros.

Aqui está um exemplo simples de uso idiomático:

     # myapp.py
     import logging
     import mylib
     logger = logging.getLogger(__name__)

     def main():
         logging.basicConfig(filename='myapp.log', level=logging.INFO)
         logger.info('Started')
         mylib.do_something()
         logger.info('Finished')

     if __name__ == '__main__':
         main()

     # mylib.py
     import logging
     logger = logging.getLogger(__name__)

     def do_something():
         logger.info('Doing something')

Se você executar 'myapp.py', deverá ver isso em 'myapp.log':

     INFO:__main__:Started
     INFO:mylib:Doing something
     INFO:__main__:Finished

O ponto chave desse modo de uso idiomático é que a maior parte do código
está simplesmente criando um registrador de nível de módulo com
‘getLogger(__name__)’ e usando esse registrador para fazer qualquer
registro necessário.  Isso é conciso e, ao mesmo tempo, permite o
controle refinado do código subjacente, se necessário.  As mensagens
registradas pelo registrador de nível de módulo são encaminhadas para
tratadores de registradores em nível de módulo mais alto, até o
registrador de nível mais alto conhecido como registrador raiz; essa
abordagem é conhecida como registro hierárquico.

Para que o registro de eventos seja útil, ele precisa ser configurado:
definir os níveis e os destinos de cada registrador, possivelmente
alterando a forma como módulos específico fazem seus registros,
geralmente com base em argumentos de linha de comando ou configuração da
aplicação.  Na maioria dos casos, como o descrito acima, somente o
registrador raiz precisa ser configurado dessa forma, já que todos os
registradores de nível inferior no nível módulo acabam encaminhando suas
mensagens para seus tratadores.  *note basicConfig(): a08. oferece uma
maneira rápida de configurar o registrador raiz que lida com muitos
casos de uso.

O módulo provê várias funcionalidades e flexibilidade.  Se você não está
familiarizado com registro de eventos, a melhor maneira para se ter uma
noção sobre é ver os tutoriais ('veja os links acima e à direita').

As classes básicas definidas pelo módulo, juntamente com seus atributos
e métodos, estão listadas nas seções abaixo.

   * Loggers expõem a interface que o código da aplicação usa
     diretamente.

   * Handlers enviam os registros do evento (criados por loggers) aos
     destinos apropriados.

   * Filters fornecem uma facilidade granular para determinar quais
     registros de eventos enviar à saída.

   * Formatters especificam o layout dos registros de eventos na saída
     final.

* Menu:

* Objetos Logger::
* Níveis de Logging::
* Objetos Handler::
* Formatter Objects::
* Filter Objects::
* LogRecord Objects::
* Atributos LogRecord::
* LoggerAdapter Objects::
* Thread Safety::
* Funções de nível de módulo::
* Module-Level Attributes::
* Integration with the warnings module::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/logging/__init__.py


File: python.info,  Node: Objetos Logger,  Next: Níveis de Logging,  Up: logging — Recursos de registro de eventos para Python

5.16.4.1 Objetos Logger
.......................

Registradores têm os atributos e métodos a seguir.  Observem que
registradores 'NUNCA' devem ser instanciados diretamente, mas sempre
através da função ‘logging.getLogger(name)’.  Múltiplas chamadas à
função *note getLogger(): 967. com o mesmo nome sempre retornará uma
referência para o mesmo objeto Logger.

The ‘name’ is potentially a period-separated hierarchical value, like
‘foo.bar.baz’ (though it could also be just plain ‘foo’, for example).
Loggers that are further down in the hierarchical list are children of
loggers higher up in the list.  For example, given a logger with a name
of ‘foo’, loggers with names of ‘foo.bar’, ‘foo.bar.baz’, and ‘foo.bam’
are all descendants of ‘foo’.  In addition, all loggers are descendants
of the root logger.  The logger name hierarchy is analogous to the
Python package hierarchy, and identical to it if you organise your
loggers on a per-module basis using the recommended construction
‘logging.getLogger(__name__)’.  That’s because in a module, ‘__name__’
is the module’s name in the Python package namespace.

 -- Classe: logging.Logger

      -- Atributo: name

          This is the logger’s name, and is the value that was passed to
          *note getLogger(): 967. to obtain the logger.

               Nota: Este atributo deve ser tratado como somente
               leitura.

      -- Atributo: level

          The threshold of this logger, as set by the *note setLevel():
          14db. method.

               Nota: Do not set this attribute directly - always use
               *note setLevel(): 14db, which has checks for the level
               passed to it.

      -- Atributo: parent

          The parent logger of this logger.  It may change based on
          later instantiation of loggers which are higher up in the
          namespace hierarchy.

               Nota: Este valor deve ser tratado como somente leitura.

      -- Atributo: propagate

          Se este atributo for verdadeiro, os eventos registrados nesse
          registrador serão transmitidos aos tratadores dos
          registradores de nível mais alto (ancestrais), além de
          quaisquer tratadores anexados a esse registrador.  As
          mensagens são passadas diretamente para os tratadores dos
          registradores ancestrais - nem o nível nem os filtros dos
          registradores ancestrais em questão são considerados.

          Se o valor for falso, as mensagens de registro não serão
          passadas para os tratadores de registradores ancestrais.

          Explicando com um exemplo: se o atributo propagate do
          registrador chamado ‘A.B.C’ for avaliado como verdadeiro,
          qualquer evento registrado em ‘A.B.C’ pela chamada de métodos
          como ‘logging.getLogger('A.B.C').error(...)’ será [sujeito à
          passagem das configurações de filtro e nível do registrador]
          passado por sua vez para qualquer tratador ligado aos
          registradores nomeados ‘A.B’, ‘A’ e ao registrador raiz, após
          ser passado para qualquer tratador ligado ao ‘A.B.C’.  Se
          qualquer registrador na cadeia ‘A.B.C’, ‘A.B’, ‘A’ tem o
          atributo ‘propagate’ definido como falso, então esse será o
          último registrador cujos tratadores terão os eventos
          oferecidos para serem tratados e a propagação terminará
          naquele ponto.

          O construtor atribui este valor como ‘True’.

               Nota: Se você configurar um tratador para o registrador
               'e' um ou mais dos ancestrais, pode acontecer que a mesma
               mensagem seja registrada várias vezes.  Em geral, você
               não precisa configurar saídas para mais que um
               registrador - se você configurar apenas para o
               registrador principal da hierarquia, então todos os
               eventos dos registradores descendentes serão visualizados
               ali, fornecido pela configuração de propagação, cujo
               padrão é ‘True’.  Um cenário comum é configurar as saídas
               somente no registrador raiz, e deixar a propagação tomar
               conta do resto.

      -- Atributo: handlers

          The list of handlers directly attached to this logger
          instance.

               Nota: This attribute should be treated as read-only; it
               is normally changed via the *note addHandler(): 2e36. and
               *note removeHandler(): 2e37. methods, which use locks to
               ensure thread-safe operation.

      -- Atributo: disabled

          This attribute disables handling of any events.  It is set to
          ‘False’ in the initializer, and only changed by logging
          configuration code.

               Nota: Este atributo deve ser tratado como somente
               leitura.

      -- Método: setLevel (level)

          Ajuste o limite para este logger para 'level'.  Mensagens de
          registro de eventos que forem menos severas que este 'level'
          serão ignoradas; mensagens que tenham nível de severidade
          igual ou maior que 'level' serão emitidas para os destinos de
          saída configurados para o logger, a menos que o nível da saída
          tenha sido configurado para uma severidade ainda maior.

          Quando um logger é criado, o nível é definido como *note
          NOTSET: 2e39. (que faz com que todas as mensagens sejam
          processadas quando o logger for o logger raiz, ou delegação
          para o pai quando o logger não for um logger raiz).  Observe
          que o logger raiz é criado com nível *note WARNING: 2e3a.

          O termo “delegação ao pai” significa que o logger possui um
          nível de NOTSET, e a sua cadeia de loggers ancestrais será
          percorrida até que um ancestral com o nível diferente de
          NOTSET seja encontrado ou até a raiz ser alcançada.

          Se um ancestral for achado com um nível diferente de NOTSET,
          então o nível daquele ancestral será tratado como o nível
          efetivo do logger que começou a busca por ancestrais, e é
          usado para determinar como um registro de evento será
          manipulado.

          Se a raiz é alcançada e o seu nível é NOTSET, então todas as
          mensagens serão processadas.  Caso contrário, o nível da raiz
          será usada como o nível efetivo.

          Veja *note Níveis de Logging: 65a. para uma lista de níveis.

          Alterado na versão 3.2: O parâmetro 'level' agora é aceito
          como uma string representando o nível tal qual ‘INFO’, como
          uma alternativa as constantes inteiras tal qual *note INFO:
          2e3b.  Note, entretanto, que os níveis são guardados
          internamente como inteiros e os métodos como, por exemplo,
          *note getEffectiveLevel(): 2e3c. e *note isEnabledFor(): 133a.
          retornarão/esperarão que sejam passados inteiros.

      -- Método: isEnabledFor (level)

          Indica se a mensagem com gravidade 'level' seria processada
          por esse logger.  Esse método checa primeiro o nível à nível
          de módulo definido por ‘logging.disable(level)’ e então o
          nível efetivo do logger como determinado por *note
          getEffectiveLevel(): 2e3c.

      -- Método: getEffectiveLevel ()

          Indica o nível efeito para esse logger.  Se um valor diferente
          de *note NOTSET: 2e39. foi definido usando *note setLevel():
          14db, ele é retornado.  Caso contrário, a hierarquia é
          percorrida em direção a raiz até um valor diferente de *note
          NOTSET: 2e39. ser encontrado e então esse valor é retornado.
          O valor retornado é um inteiro, tipicamento um entre *note
          logging.DEBUG: 2e3d, *note logging.INFO: 2e3b. etc

      -- Método: getChild (suffix)

          Retorna um logger que é descendente deste logger, como
          determinado pelo sufixo.  Portanto,
          ‘logging.getLogger('abc').getChild('def.ghi')’ retornaria o
          mesmo logger que seria retornado por
          ‘logging.getLogger('abc.def.ghi')’.  Esse é um método de
          conveniência, útil quando o logger pai é nomeado usando, por
          exemplo ‘__name__’ ao invés de uma string literal.

          Adicionado na versão 3.2.

      -- Método: getChildren ()

          Returns a set of loggers which are immediate children of this
          logger.  So for example ‘logging.getLogger().getChildren()’
          might return a set containing loggers named ‘foo’ and ‘bar’,
          but a logger named ‘foo.bar’ wouldn’t be included in the set.
          Likewise, ‘logging.getLogger('foo').getChildren()’ might
          return a set including a logger named ‘foo.bar’, but it
          wouldn’t include one named ‘foo.bar.baz’.

          Adicionado na versão 3.12.

      -- Método: debug (msg, *args, **kwargs)

          Logs a message with level *note DEBUG: 2e3d. on this logger.
          The 'msg' is the message format string, and the 'args' are the
          arguments which are merged into 'msg' using the string
          formatting operator.  (Note that this means that you can use
          keywords in the format string, together with a single
          dictionary argument.)  No % formatting operation is performed
          on 'msg' when no 'args' are supplied.

          Existem quatro argumentos nomeados em 'kwargs' que serão
          inspecionados: 'exc_info', 'stack_info', 'stacklevel' e
          'extra'.

          If 'exc_info' does not evaluate as false, it causes exception
          information to be added to the logging message.  If an
          exception tuple (in the format returned by *note
          sys.exc_info(): 68a.) or an exception instance is provided, it
          is used; otherwise, *note sys.exc_info(): 68a. is called to
          get the exception information.

          The second optional keyword argument is 'stack_info', which
          defaults to ‘False’.  If true, stack information is added to
          the logging message, including the actual logging call.  Note
          that this is not the same stack information as that displayed
          through specifying 'exc_info': The former is stack frames from
          the bottom of the stack up to the logging call in the current
          thread, whereas the latter is information about stack frames
          which have been unwound, following an exception, while
          searching for exception handlers.

          You can specify 'stack_info' independently of 'exc_info', e.g.
          to just show how you got to a certain point in your code, even
          when no exceptions were raised.  The stack frames are printed
          following a header line which says:

               Stack (most recent call last):

          Isso imita o ‘Traceback (most recent call last):’ que é usado
          ao exibir quadros de exceção.

          The third optional keyword argument is 'stacklevel', which
          defaults to ‘1’.  If greater than 1, the corresponding number
          of stack frames are skipped when computing the line number and
          function name set in the *note LogRecord: 101c. created for
          the logging event.  This can be used in logging helpers so
          that the function name, filename and line number recorded are
          not the information for the helper function/method, but rather
          its caller.  The name of this parameter mirrors the equivalent
          one in the *note warnings: 112. module.

          The fourth keyword argument is 'extra' which can be used to
          pass a dictionary which is used to populate the *note
          __dict__: 55b. of the *note LogRecord: 101c. created for the
          logging event with user-defined attributes.  These custom
          attributes can then be used as you like.  For example, they
          could be incorporated into logged messages.  For example:

               FORMAT = '%(asctime)s %(clientip)-15s %(user)-8s %(message)s'
               logging.basicConfig(format=FORMAT)
               d = {'clientip': '192.168.0.1', 'user': 'fbloggs'}
               logger = logging.getLogger('tcpserver')
               logger.warning('Protocol problem: %s', 'connection reset', extra=d)

          imprimiria algo como

               2006-02-08 22:20:02,165 192.168.0.1 fbloggs  Protocol problem: connection reset

          The keys in the dictionary passed in 'extra' should not clash
          with the keys used by the logging system.  (See the section on
          *note Atributos LogRecord: 2e3e. for more information on which
          keys are used by the logging system.)

          If you choose to use these attributes in logged messages, you
          need to exercise some care.  In the above example, for
          instance, the *note Formatter: 14df. has been set up with a
          format string which expects ‘clientip’ and ‘user’ in the
          attribute dictionary of the *note LogRecord: 101c.  If these
          are missing, the message will not be logged because a string
          formatting exception will occur.  So in this case, you always
          need to pass the 'extra' dictionary with these keys.

          While this might be annoying, this feature is intended for use
          in specialized circumstances, such as multi-threaded servers
          where the same code executes in many contexts, and interesting
          conditions which arise are dependent on this context (such as
          remote client IP address and authenticated user name, in the
          above example).  In such circumstances, it is likely that
          specialized *note Formatter: 14df.s would be used with
          particular *note Handler: 14de.s.

          If no handler is attached to this logger (or any of its
          ancestors, taking into account the relevant *note
          Logger.propagate: 14dd. attributes), the message will be sent
          to the handler set on *note lastResort: 123a.

          Alterado na versão 3.2: O parâmetro 'stack_info' foi
          adicionado.

          Alterado na versão 3.5: The 'exc_info' parameter can now
          accept exception instances.

          Alterado na versão 3.8: O parâmetro 'stacklevel' foi
          adicionado.

      -- Método: info (msg, *args, **kwargs)

          Logs a message with level *note INFO: 2e3b. on this logger.
          The arguments are interpreted as for *note debug(): 2e40.

      -- Método: warning (msg, *args, **kwargs)

          Logs a message with level *note WARNING: 2e3a. on this logger.
          The arguments are interpreted as for *note debug(): 2e40.

               Nota: There is an obsolete method ‘warn’ which is
               functionally identical to ‘warning’.  As ‘warn’ is
               deprecated, please do not use it - use ‘warning’ instead.

      -- Método: error (msg, *args, **kwargs)

          Logs a message with level *note ERROR: 2e42. on this logger.
          The arguments are interpreted as for *note debug(): 2e40.

      -- Método: critical (msg, *args, **kwargs)

          Logs a message with level *note CRITICAL: 2e43. on this
          logger.  The arguments are interpreted as for *note debug():
          2e40.

      -- Método: log (level, msg, *args, **kwargs)

          Logs a message with integer level 'level' on this logger.  The
          other arguments are interpreted as for *note debug(): 2e40.

      -- Método: exception (msg, *args, **kwargs)

          Logs a message with level *note ERROR: 2e42. on this logger.
          The arguments are interpreted as for *note debug(): 2e40.
          Exception info is added to the logging message.  This method
          should only be called from an exception handler.

      -- Método: addFilter (filter)

          Adds the specified filter 'filter' to this logger.

      -- Método: removeFilter (filter)

          Removes the specified filter 'filter' from this logger.

      -- Método: filter (record)

          Apply this logger’s filters to the record and return ‘True’ if
          the record is to be processed.  The filters are consulted in
          turn, until one of them returns a false value.  If none of
          them return a false value, the record will be processed
          (passed to handlers).  If one returns a false value, no
          further processing of the record occurs.

      -- Método: addHandler (hdlr)

          Adiciona o tratador especificado por 'hdlr' deste logger.

      -- Método: removeHandler (hdlr)

          Remove o tratador especificado por 'hdlr' deste logger.

      -- Método: findCaller (stack_info=False, stacklevel=1)

          Finds the caller’s source filename and line number.  Returns
          the filename, line number, function name and stack information
          as a 4-element tuple.  The stack information is returned as
          ‘None’ unless 'stack_info' is ‘True’.

          The 'stacklevel' parameter is passed from code calling the
          *note debug(): 2e40. and other APIs.  If greater than 1, the
          excess is used to skip stack frames before determining the
          values to be returned.  This will generally be useful when
          calling logging APIs from helper/wrapper code, so that the
          information in the event log refers not to the helper/wrapper
          code, but to the code that calls it.

      -- Método: handle (record)

          Handles a record by passing it to all handlers associated with
          this logger and its ancestors (until a false value of
          'propagate' is found).  This method is used for unpickled
          records received from a socket, as well as those created
          locally.  Logger-level filtering is applied using *note
          filter(): 2e46.

      -- Método: makeRecord (name, level, fn, lno, msg, args, exc_info,
               func=None, extra=None, sinfo=None)

          This is a factory method which can be overridden in subclasses
          to create specialized *note LogRecord: 101c. instances.

      -- Método: hasHandlers ()

          Checks to see if this logger has any handlers configured.
          This is done by looking for handlers in this logger and its
          parents in the logger hierarchy.  Returns ‘True’ if a handler
          was found, else ‘False’.  The method stops searching up the
          hierarchy whenever a logger with the ‘propagate’ attribute set
          to false is found - that will be the last logger which is
          checked for the existence of handlers.

          Adicionado na versão 3.2.

     Alterado na versão 3.7: Loggers can now be pickled and unpickled.


File: python.info,  Node: Níveis de Logging,  Next: Objetos Handler,  Prev: Objetos Logger,  Up: logging — Recursos de registro de eventos para Python

5.16.4.2 Níveis de Logging
..........................

Os valores numéricos dos níveis de logging estão listados na tabela
abaixo.  Eles são principalmente de interesse se você quiser definir
seus próprios níveis, e precisa deles para definir seus valores
específicos relativos aos níveis predefinidos.  Se você define um nível
com o mesmo valor numérico, ele sobrescreve o valor predefinido; o nome
predefinido é perdido.

Nível                       Valor numérico      What it means / When to use it
                                                
------------------------------------------------------------------------------------------
                                                
 -- Dado: logging.NOTSET    0                   When set on a logger, indicates that
                                                ancestor loggers are to be consulted to
                                                determine the effective level.  If that
                                                still resolves to ‘NOTSET’, then all
                                                events are logged.  When set on a
                                                handler, all events are handled.
                                                
                                                
 -- Dado: logging.DEBUG     10                  Detailed information, typically only of
                                                interest to a developer trying to
                                                diagnose a problem.
                                                
                                                
 -- Dado: logging.INFO      20                  Confirmação de que as coisas estão
                                                funcionando como esperado.
                                                
                                                
 -- Dado: logging.WARNING   30                  An indication that something unexpected
                                                happened, or that a problem might occur
                                                in the near future (e.g.  ‘disk space
                                                low’).  The software is still working
                                                as expected.
                                                
                                                
 -- Dado: logging.ERROR     40                  Por conta de um problema mais grave, o
                                                software não conseguiu executar alguma
                                                função.
                                                
                                                
 -- Dado:                   50                  Um erro grave, indicando que o programa
          logging.CRITICAL                      pode não conseguir continuar rodando.
                                                


File: python.info,  Node: Objetos Handler,  Next: Formatter Objects,  Prev: Níveis de Logging,  Up: logging — Recursos de registro de eventos para Python

5.16.4.3 Objetos Handler
........................

Handlers have the following attributes and methods.  Note that *note
Handler: 14de. is never instantiated directly; this class acts as a base
for more useful subclasses.  However, the ‘__init__()’ method in
subclasses needs to call *note Handler.__init__(): 2e4e.

 -- Classe: logging.Handler

      -- Método: __init__ (level=NOTSET)

          Initializes the *note Handler: 14de. instance by setting its
          level, setting the list of filters to the empty list and
          creating a lock (using *note createLock(): 2e4f.) for
          serializing access to an I/O mechanism.

      -- Método: createLock ()

          Initializes a thread lock which can be used to serialize
          access to underlying I/O functionality which may not be
          threadsafe.

      -- Método: acquire ()

          Acquires the thread lock created with *note createLock():
          2e4f.

      -- Método: release ()

          Releases the thread lock acquired with *note acquire(): 2e50.

      -- Método: setLevel (level)

          Sets the threshold for this handler to 'level'.  Logging
          messages which are less severe than 'level' will be ignored.
          When a handler is created, the level is set to *note NOTSET:
          2e39. (which causes all messages to be processed).

          Veja *note Níveis de Logging: 65a. para uma lista de níveis.

          Alterado na versão 3.2: The 'level' parameter now accepts a
          string representation of the level such as ‘INFO’ as an
          alternative to the integer constants such as *note INFO: 2e3b.

      -- Método: setFormatter (fmt)

          Sets the formatter for this handler to 'fmt'.  The 'fmt'
          argument must be a *note Formatter: 14df. instance or ‘None’.

      -- Método: addFilter (filter)

          Adds the specified filter 'filter' to this handler.

      -- Método: removeFilter (filter)

          Removes the specified filter 'filter' from this handler.

      -- Método: filter (record)

          Apply this handler’s filters to the record and return ‘True’
          if the record is to be processed.  The filters are consulted
          in turn, until one of them returns a false value.  If none of
          them return a false value, the record will be emitted.  If one
          returns a false value, the handler will not emit the record.

      -- Método: flush ()

          Ensure all logging output has been flushed.  This version does
          nothing and is intended to be implemented by subclasses.

      -- Método: close ()

          Tidy up any resources used by the handler.  This version does
          no output but removes the handler from an internal map of
          handlers, which is used for handler lookup by name.

          Subclasses should ensure that this gets called from overridden
          *note close(): 2e58. methods.

      -- Método: handle (record)

          Conditionally emits the specified logging record, depending on
          filters which may have been added to the handler.  Wraps the
          actual emission of the record with acquisition/release of the
          I/O thread lock.

      -- Método: handleError (record)

          This method should be called from handlers when an exception
          is encountered during an *note emit(): 2e5b. call.  If the
          module-level attribute *note raiseExceptions: 1239. is
          ‘False’, exceptions get silently ignored.  This is what is
          mostly wanted for a logging system - most users will not care
          about errors in the logging system, they are more interested
          in application errors.  You could, however, replace this with
          a custom handler if you wish.  The specified record is the one
          which was being processed when the exception occurred.  (The
          default value of *note raiseExceptions: 1239. is ‘True’, as
          that is more useful during development).

      -- Método: format (record)

          Do formatting for a record - if a formatter is set, use it.
          Otherwise, use the default formatter for the module.

      -- Método: emit (record)

          Do whatever it takes to actually log the specified logging
          record.  This version is intended to be implemented by
          subclasses and so raises a *note NotImplementedError: 228.

               Aviso: This method is called after a handler-level lock
               is acquired, which is released after this method returns.
               When you override this method, note that you should be
               careful when calling anything that invokes other parts of
               the logging API which might do locking, because that
               might result in a deadlock.  Specifically:

                  * Logging configuration APIs acquire the module-level
                    lock, and then individual handler-level locks as
                    those handlers are configured.

                  * Many logging APIs lock the module-level lock.  If
                    such an API is called from this method, it could
                    cause a deadlock if a configuration call is made on
                    another thread, because that thread will try to
                    acquire the module-level lock 'before' the
                    handler-level lock, whereas this thread tries to
                    acquire the module-level lock 'after' the
                    handler-level lock (because in this method, the
                    handler-level lock has already been acquired).

For a list of handlers included as standard, see *note logging.handlers:
89.


File: python.info,  Node: Formatter Objects,  Next: Filter Objects,  Prev: Objetos Handler,  Up: logging — Recursos de registro de eventos para Python

5.16.4.4 Formatter Objects
..........................

 -- Classe: logging.Formatter (fmt=None, datefmt=None, style='%',
          validate=True, *, defaults=None)

     Responsible for converting a *note LogRecord: 101c. to an output
     string to be interpreted by a human or external system.


     Parâmetros:

        * ‘fmt’ (*note str: 44c.) – A format string in the given 'style'
          for the logged output as a whole.  The possible mapping keys
          are drawn from the *note LogRecord: 101c. object’s *note
          Atributos LogRecord: 2e3e.  If not specified, ‘'%(message)s'’
          is used, which is just the logged message.

        * ‘datefmt’ (*note str: 44c.) – A format string for the
          date/time portion of the logged output.  If not specified, the
          default described in *note formatTime(): 2e5f. is used.

        * ‘style’ (*note str: 44c.) – Can be one of ‘'%'’, ‘'{'’ or
          ‘'$'’ and determines how the format string will be merged with
          its data: using one of *note Formatação de string no estilo
          printf: 6cc. (‘%’), *note str.format(): 621. (‘{’) or *note
          string.Template: 687. (‘$’).  This only applies to 'fmt' (e.g.
          ‘'%(message)s'’ versus ‘'{message}'’), not to the actual log
          messages passed to the logging methods.  However, there are
          *note other ways: 2e60. to use ‘{’- and ‘$’-formatting for log
          messages.

        * ‘validate’ (*note bool: 468.) – If ‘True’ (the default),
          incorrect or mismatched 'fmt' and 'style' will raise a *note
          ValueError: 202.; for example, ‘logging.Formatter('%(asctime)s
          - %(message)s', style='{')’.

        * ‘defaults’ (*note dict: 256.‘[’*note str: 44c.‘, ’‘Any’‘]’) –
          A dictionary with default values to use in custom fields.  For
          example, ‘logging.Formatter('%(ip)s %(message)s',
          defaults={"ip": None})’

     Alterado na versão 3.2: Adicionado o parâmetro 'style'.

     Alterado na versão 3.8: Adicionado o parâmetro 'validate'.

     Alterado na versão 3.10: Adicionado o parâmetro 'defaults'.

      -- Método: format (record)

          The record’s attribute dictionary is used as the operand to a
          string formatting operation.  Returns the resulting string.
          Before formatting the dictionary, a couple of preparatory
          steps are carried out.  The 'message' attribute of the record
          is computed using 'msg' % 'args'.  If the formatting string
          contains ‘'(asctime)'’, *note formatTime(): 2e5f. is called to
          format the event time.  If there is exception information, it
          is formatted using *note formatException(): 2e62. and appended
          to the message.  Note that the formatted exception information
          is cached in attribute 'exc_text'.  This is useful because the
          exception information can be pickled and sent across the wire,
          but you should be careful if you have more than one *note
          Formatter: 14df. subclass which customizes the formatting of
          exception information.  In this case, you will have to clear
          the cached value (by setting the 'exc_text' attribute to
          ‘None’) after a formatter has done its formatting, so that the
          next formatter to handle the event doesn’t use the cached
          value, but recalculates it afresh.

          If stack information is available, it’s appended after the
          exception information, using *note formatStack(): 2e63. to
          transform it if necessary.

      -- Método: formatTime (record, datefmt=None)

          This method should be called from *note format(): 61f. by a
          formatter which wants to make use of a formatted time.  This
          method can be overridden in formatters to provide for any
          specific requirement, but the basic behavior is as follows: if
          'datefmt' (a string) is specified, it is used with *note
          time.strftime(): 1229. to format the creation time of the
          record.  Otherwise, the format ‘%Y-%m-%d %H:%M:%S,uuu’ is
          used, where the uuu part is a millisecond value and the other
          letters are as per the *note time.strftime(): 1229.
          documentation.  An example time in this format is ‘2003-01-23
          00:29:50,411’.  The resulting string is returned.

          This function uses a user-configurable function to convert the
          creation time to a tuple.  By default, *note time.localtime():
          1541. is used; to change this for a particular formatter
          instance, set the ‘converter’ attribute to a function with the
          same signature as *note time.localtime(): 1541. or *note
          time.gmtime(): 1200.  To change it for all formatters, for
          example if you want all logging times to be shown in GMT, set
          the ‘converter’ attribute in the ‘Formatter’ class.

          Alterado na versão 3.3: Previously, the default format was
          hard-coded as in this example: ‘2010-09-06 22:38:15,292’ where
          the part before the comma is handled by a strptime format
          string (‘'%Y-%m-%d %H:%M:%S'’), and the part after the comma
          is a millisecond value.  Because strptime does not have a
          format placeholder for milliseconds, the millisecond value is
          appended using another format string, ‘'%s,%03d'’ — and both
          of these format strings have been hardcoded into this method.
          With the change, these strings are defined as class-level
          attributes which can be overridden at the instance level when
          desired.  The names of the attributes are
          ‘default_time_format’ (for the strptime format string) and
          ‘default_msec_format’ (for appending the millisecond value).

          Alterado na versão 3.9: The ‘default_msec_format’ can be
          ‘None’.

      -- Método: formatException (exc_info)

          Formats the specified exception information (a standard
          exception tuple as returned by *note sys.exc_info(): 68a.) as
          a string.  This default implementation just uses *note
          traceback.print_exception(): 852.  The resulting string is
          returned.

      -- Método: formatStack (stack_info)

          Formats the specified stack information (a string as returned
          by *note traceback.print_stack(): eb5, but with the last
          newline removed) as a string.  This default implementation
          just returns the input value.

 -- Classe: logging.BufferingFormatter (linefmt=None)

     A base formatter class suitable for subclassing when you want to
     format a number of records.  You can pass a *note Formatter: 14df.
     instance which you want to use to format each line (that
     corresponds to a single record).  If not specified, the default
     formatter (which just outputs the event message) is used as the
     line formatter.

      -- Método: formatHeader (records)

          Return a header for a list of 'records'.  The base
          implementation just returns the empty string.  You will need
          to override this method if you want specific behaviour, e.g.
          to show the count of records, a title or a separator line.

      -- Método: formatFooter (records)

          Return a footer for a list of 'records'.  The base
          implementation just returns the empty string.  You will need
          to override this method if you want specific behaviour, e.g.
          to show the count of records or a separator line.

      -- Método: format (records)

          Return formatted text for a list of 'records'.  The base
          implementation just returns the empty string if there are no
          records; otherwise, it returns the concatenation of the
          header, each record formatted with the line formatter, and the
          footer.


File: python.info,  Node: Filter Objects,  Next: LogRecord Objects,  Prev: Formatter Objects,  Up: logging — Recursos de registro de eventos para Python

5.16.4.5 Filter Objects
.......................

‘Filters’ can be used by ‘Handlers’ and ‘Loggers’ for more sophisticated
filtering than is provided by levels.  The base filter class only allows
events which are below a certain point in the logger hierarchy.  For
example, a filter initialized with ‘A.B’ will allow events logged by
loggers ‘A.B’, ‘A.B.C’, ‘A.B.C.D’, ‘A.B.D’ etc.  but not ‘A.BB’, ‘B.A.B’
etc.  If initialized with the empty string, all events are passed.

 -- Classe: logging.Filter (name='')

     Returns an instance of the *note Filter: 123b. class.  If 'name' is
     specified, it names a logger which, together with its children,
     will have its events allowed through the filter.  If 'name' is the
     empty string, allows every event.

      -- Método: filter (record)

          Is the specified record to be logged?  Returns false for no,
          true for yes.  Filters can either modify log records in-place
          or return a completely different record instance which will
          replace the original log record in any future processing of
          the event.

Note that filters attached to handlers are consulted before an event is
emitted by the handler, whereas filters attached to loggers are
consulted whenever an event is logged (using *note debug(): 2e40, *note
info(): 2e6b, etc.), before sending an event to handlers.  This means
that events which have been generated by descendant loggers will not be
filtered by a logger’s filter setting, unless the filter has also been
applied to those descendant loggers.

You don’t actually need to subclass ‘Filter’: you can pass any instance
which has a ‘filter’ method with the same semantics.

Alterado na versão 3.2: You don’t need to create specialized ‘Filter’
classes, or use other classes with a ‘filter’ method: you can use a
function (or other callable) as a filter.  The filtering logic will
check to see if the filter object has a ‘filter’ attribute: if it does,
it’s assumed to be a ‘Filter’ and its *note filter(): 2e6a. method is
called.  Otherwise, it’s assumed to be a callable and called with the
record as the single parameter.  The returned value should conform to
that returned by *note filter(): 2e6a.

Alterado na versão 3.12: You can now return a *note LogRecord: 101c.
instance from filters to replace the log record rather than modifying it
in place.  This allows filters attached to a *note Handler: 14de. to
modify the log record before it is emitted, without having side effects
on other handlers.

Although filters are used primarily to filter records based on more
sophisticated criteria than levels, they get to see every record which
is processed by the handler or logger they’re attached to: this can be
useful if you want to do things like counting how many records were
processed by a particular logger or handler, or adding, changing or
removing attributes in the *note LogRecord: 101c. being processed.
Obviously changing the LogRecord needs to be done with some care, but it
does allow the injection of contextual information into logs (see *note
Using Filters to impart contextual information: 2e6c.).


File: python.info,  Node: LogRecord Objects,  Next: Atributos LogRecord,  Prev: Filter Objects,  Up: logging — Recursos de registro de eventos para Python

5.16.4.6 LogRecord Objects
..........................

*note LogRecord: 101c. instances are created automatically by the *note
Logger: b64. every time something is logged, and can be created manually
via *note makeLogRecord(): 2e6f. (for example, from a pickled event
received over the wire).

 -- Classe: logging.LogRecord (name, level, pathname, lineno, msg, args,
          exc_info, func=None, sinfo=None)

     Contains all the information pertinent to the event being logged.

     The primary information is passed in 'msg' and 'args', which are
     combined using ‘msg % args’ to create the ‘message’ attribute of
     the record.


     Parâmetros:

        * ‘name’ (*note str: 44c.) – The name of the logger used to log
          the event represented by this ‘LogRecord’.  Note that the
          logger name in the ‘LogRecord’ will always have this value,
          even though it may be emitted by a handler attached to a
          different (ancestor) logger.

        * ‘level’ (*note int: 257.) – The *note numeric level: 65a. of
          the logging event (such as ‘10’ for ‘DEBUG’, ‘20’ for ‘INFO’,
          etc).  Note that this is converted to 'two' attributes of the
          LogRecord: ‘levelno’ for the numeric value and ‘levelname’ for
          the corresponding level name.

        * ‘pathname’ (*note str: 44c.) – The full string path of the
          source file where the logging call was made.

        * ‘lineno’ (*note int: 257.) – The line number in the source
          file where the logging call was made.

        * ‘msg’ (*note Any: 6ac.) – The event description message, which
          can be a %-format string with placeholders for variable data,
          or an arbitrary object (see *note Usando objetos arbitrários
          como mensagens: 2e70.).

        * ‘args’ (*note tuple: 370.‘ | ’*note dict: 256.‘[’*note str:
          44c.‘, ’*note Any: 6ac.‘]’) – Variable data to merge into the
          'msg' argument to obtain the event description.

        * ‘exc_info’ (*note tuple: 370.‘[’*note type: d6b.‘[’*note
          BaseException: 5bb.‘]’‘, ’*note BaseException: 5bb.‘, ’*note
          types.TracebackType: b05.‘] ’‘| ’‘None’) – An exception tuple
          with the current exception information, as returned by *note
          sys.exc_info(): 68a, or ‘None’ if no exception information is
          available.

        * ‘func’ (*note str: 44c.‘ | ’‘None’) – The name of the function
          or method from which the logging call was invoked.

        * ‘sinfo’ (*note str: 44c.‘ | ’‘None’) – A text string
          representing stack information from the base of the stack in
          the current thread, up to the logging call.

      -- Método: getMessage ()

          Returns the message for this *note LogRecord: 101c. instance
          after merging any user-supplied arguments with the message.
          If the user-supplied message argument to the logging call is
          not a string, *note str(): 44c. is called on it to convert it
          to a string.  This allows use of user-defined classes as
          messages, whose ‘__str__’ method can return the actual format
          string to be used.

     Alterado na versão 3.2: The creation of a *note LogRecord: 101c.
     has been made more configurable by providing a factory which is
     used to create the record.  The factory can be set using *note
     getLogRecordFactory(): 2e72. and *note setLogRecordFactory(): 2e73.
     (see this for the factory’s signature).

     This functionality can be used to inject your own values into a
     *note LogRecord: 101c. at creation time.  You can use the following
     pattern:

          old_factory = logging.getLogRecordFactory()

          def record_factory(*args, **kwargs):
              record = old_factory(*args, **kwargs)
              record.custom_attribute = 0xdecafbad
              return record

          logging.setLogRecordFactory(record_factory)

     With this pattern, multiple factories could be chained, and as long
     as they don’t overwrite each other’s attributes or unintentionally
     overwrite the standard attributes listed above, there should be no
     surprises.


File: python.info,  Node: Atributos LogRecord,  Next: LoggerAdapter Objects,  Prev: LogRecord Objects,  Up: logging — Recursos de registro de eventos para Python

5.16.4.7 Atributos LogRecord
............................

The LogRecord has a number of attributes, most of which are derived from
the parameters to the constructor.  (Note that the names do not always
correspond exactly between the LogRecord constructor parameters and the
LogRecord attributes.)  These attributes can be used to merge data from
the record into the format string.  The following table lists (in
alphabetical order) the attribute names, their meanings and the
corresponding placeholder in a %-style format string.

If you are using {}-formatting (*note str.format(): 621.), you can use
‘{attrname}’ as the placeholder in the format string.  If you are using
$-formatting (*note string.Template: 687.), use the form ‘${attrname}’.
In both cases, of course, replace ‘attrname’ with the actual attribute
name you want to use.

In the case of {}-formatting, you can specify formatting flags by
placing them after the attribute name, separated from it with a colon.
For example: a placeholder of ‘{msecs:03.0f}’ would format a millisecond
value of ‘4’ as ‘004’.  Refer to the *note str.format(): 621.
documentation for full details on the options available to you.

Attribute name       Formatação                    Descrição
                                                   
-------------------------------------------------------------------------------------------------------
                                                   
args                 You shouldn’t need to         The tuple of arguments merged into ‘msg’ to
                     format this yourself.         produce ‘message’, or a dict whose values are
                                                   used for the merge (when there is only one
                                                   argument, and it is a dictionary).
                                                   
                                                   
asctime              ‘%(asctime)s’                 Human-readable time when the
                                                   *note LogRecord: 101c. was created.  By default
                                                   this is of the form ‘2003-07-08 16:49:45,896’
                                                   (the numbers after the comma are millisecond
                                                   portion of the time).
                                                   
                                                   
created              ‘%(created)f’                 Time when the *note LogRecord: 101c. was created
                                                   (as returned by *note time.time_ns(): af9. /
                                                   1e9).
                                                   
                                                   
exc_info             You shouldn’t need to         Exception tuple (à la ‘sys.exc_info’) or, if no
                     format this yourself.         exception has occurred, ‘None’.
                                                   
                                                   
exc_text             You shouldn’t need to         Exception information formatted as a string.
                     format this yourself.         This is set when *note Formatter.format(): 2e61.
                                                   is invoked, or ‘None’ if no exception has
                                                   occurred.
                                                   
                                                   
filename             ‘%(filename)s’                Filename portion of ‘pathname’.
                                                   
                                                   
funcName             ‘%(funcName)s’                Name of function containing the logging call.
                                                   
                                                   
levelname            ‘%(levelname)s’               Text logging level for the message (‘'DEBUG'’,
                                                   ‘'INFO'’, ‘'WARNING'’, ‘'ERROR'’, ‘'CRITICAL'’).
                                                   
                                                   
levelno              ‘%(levelno)s’                 Numeric logging level for the message
                                                   (*note DEBUG: 2e3d, *note INFO: 2e3b,
                                                   *note WARNING: 2e3a, *note ERROR: 2e42,
                                                   *note CRITICAL: 2e43.).
                                                   
                                                   
lineno               ‘%(lineno)d’                  Source line number where the logging call was
                                                   issued (if available).
                                                   
                                                   
message              ‘%(message)s’                 The logged message, computed as ‘msg % args’.
                                                   This is set when *note Formatter.format(): 2e61.
                                                   is invoked.
                                                   
                                                   
módulo               ‘%(module)s’                  Module (name portion of ‘filename’).
                                                   
                                                   
msecs                ‘%(msecs)d’                   Millisecond portion of the time when the
                                                   *note LogRecord: 101c. was created.
                                                   
                                                   
msg                  You shouldn’t need to         The format string passed in the original logging
                     format this yourself.         call.  Merged with ‘args’ to produce ‘message’,
                                                   or an arbitrary object (see
                                                   *note Usando objetos arbitrários como mensagens: 2e70.).
                                                   
                                                   
nome                 ‘%(name)s’                    Name of the logger used to log the call.
                                                   
                                                   
pathname             ‘%(pathname)s’                Full pathname of the source file where the
                                                   logging call was issued (if available).
                                                   
                                                   
processo             ‘%(process)d’                 Process ID (if available).
                                                   
                                                   
processName          ‘%(processName)s’             Process name (if available).
                                                   
                                                   
relativeCreated      ‘%(relativeCreated)d’         Time in milliseconds when the LogRecord was
                                                   created, relative to the time the logging module
                                                   was loaded.
                                                   
                                                   
stack_info           You shouldn’t need to         Stack frame information (where available) from
                     format this yourself.         the bottom of the stack in the current thread, up
                                                   to and including the stack frame of the logging
                                                   call which resulted in the creation of this
                                                   record.
                                                   
                                                   
thread               ‘%(thread)d’                  Thread ID (if available).
                                                   
                                                   
threadName           ‘%(threadName)s’              Thread name (if available).
                                                   
                                                   
taskName             ‘%(taskName)s’                *note asyncio.Task: 1be. name (if available).
                                                   

Alterado na versão 3.1: 'processName' was added.

Alterado na versão 3.12: 'taskName' was added.


File: python.info,  Node: LoggerAdapter Objects,  Next: Thread Safety,  Prev: Atributos LogRecord,  Up: logging — Recursos de registro de eventos para Python

5.16.4.8 LoggerAdapter Objects
..............................

*note LoggerAdapter: 1339. instances are used to conveniently pass
contextual information into logging calls.  For a usage example, see the
section on *note adding contextual information to your logging output:
2e77.

 -- Classe: logging.LoggerAdapter (logger, extra=None,
          merge_extra=False)

     Returns an instance of *note LoggerAdapter: 1339. initialized with
     an underlying *note Logger: b64. instance, an optional dict-like
     object ('extra'), and an optional boolean ('merge_extra')
     indicating whether or not the 'extra' argument of individual log
     calls should be merged with the *note LoggerAdapter: 1339. extra.
     The default behavior is to ignore the 'extra' argument of
     individual log calls and only use the one of the *note
     LoggerAdapter: 1339. instance

      -- Método: process (msg, kwargs)

          Modifies the message and/or keyword arguments passed to a
          logging call in order to insert contextual information.  This
          implementation takes the object passed as 'extra' to the
          constructor and adds it to 'kwargs' using key ‘extra’.  The
          return value is a ('msg', 'kwargs') tuple which has the
          (possibly modified) versions of the arguments passed in.

      -- Atributo: manager

          Delegates to the underlying ‘manager’ on 'logger'.

      -- Atributo: _log

          Delegates to the underlying ‘_log()’ method on 'logger'.

     In addition to the above, *note LoggerAdapter: 1339. supports the
     following methods of *note Logger: b64.: *note debug(): e57, *note
     info(): 2e3f, *note warning(): 17f6, *note error(): 2e41, *note
     exception(): e55, *note critical(): e56, *note log(): e54, *note
     isEnabledFor(): 133a, *note getEffectiveLevel(): 2e3c, *note
     setLevel(): 14db. and *note hasHandlers(): 2e4a.  These methods
     have the same signatures as their counterparts in *note Logger:
     b64, so you can use the two types of instances interchangeably.

     Alterado na versão 3.2: The *note isEnabledFor(): 133a, *note
     getEffectiveLevel(): 2e3c, *note setLevel(): 14db. and *note
     hasHandlers(): 2e4a. methods were added to *note LoggerAdapter:
     1339.  These methods delegate to the underlying logger.

     Alterado na versão 3.6: Attribute ‘manager’ and method ‘_log()’
     were added, which delegate to the underlying logger and allow
     adapters to be nested.

     Alterado na versão 3.10: The 'extra' argument is now optional.

     Alterado na versão 3.13: The 'merge_extra' parameter was added.


File: python.info,  Node: Thread Safety,  Next: Funções de nível de módulo,  Prev: LoggerAdapter Objects,  Up: logging — Recursos de registro de eventos para Python

5.16.4.9 Thread Safety
......................

The logging module is intended to be thread-safe without any special
work needing to be done by its clients.  It achieves this through using
threading locks; there is one lock to serialize access to the module’s
shared data, and each handler also creates a lock to serialize access to
its underlying I/O.

If you are implementing asynchronous signal handlers using the *note
signal: c6. module, you may not be able to use logging from within such
handlers.  This is because lock implementations in the *note threading:
ed. module are not always re-entrant, and so cannot be invoked from such
signal handlers.


File: python.info,  Node: Funções de nível de módulo,  Next: Module-Level Attributes,  Prev: Thread Safety,  Up: logging — Recursos de registro de eventos para Python

5.16.4.10 Funções de nível de módulo
....................................

In addition to the classes described above, there are a number of
module-level functions.

 -- Função: logging.getLogger (name=None)

     Return a logger with the specified name or, if name is ‘None’,
     return the root logger of the hierarchy.  If specified, the name is
     typically a dot-separated hierarchical name like '‘a’', '‘a.b’' or
     '‘a.b.c.d’'.  Choice of these names is entirely up to the developer
     who is using logging, though it is recommended that ‘__name__’ be
     used unless you have a specific reason for not doing that, as
     mentioned in *note Objetos Logger: 2e30.

     All calls to this function with a given name return the same logger
     instance.  This means that logger instances never need to be passed
     between different parts of an application.

 -- Função: logging.getLoggerClass ()

     Return either the standard *note Logger: b64. class, or the last
     class passed to *note setLoggerClass(): 2e7e.  This function may be
     called from within a new class definition, to ensure that
     installing a customized *note Logger: b64. class will not undo
     customizations already applied by other code.  For example:

          class MyLogger(logging.getLoggerClass()):
              # ... override behaviour here

 -- Função: logging.getLogRecordFactory ()

     Return a callable which is used to create a *note LogRecord: 101c.

     Adicionado na versão 3.2: This function has been provided, along
     with *note setLogRecordFactory(): 2e73, to allow developers more
     control over how the *note LogRecord: 101c. representing a logging
     event is constructed.

     See *note setLogRecordFactory(): 2e73. for more information about
     the how the factory is called.

 -- Função: logging.debug (msg, *args, **kwargs)

     This is a convenience function that calls *note Logger.debug():
     e57, on the root logger.  The handling of the arguments is in every
     way identical to what is described in that method.

     The only difference is that if the root logger has no handlers,
     then *note basicConfig(): a08. is called, prior to calling ‘debug’
     on the root logger.

     For very short scripts or quick demonstrations of ‘logging’
     facilities, ‘debug’ and the other module-level functions may be
     convenient.  However, most programs will want to carefully and
     explicitly control the logging configuration, and should therefore
     prefer creating a module-level logger and calling *note
     Logger.debug(): e57. (or other level-specific methods) on it, as
     described at the beginnning of this documentation.

 -- Função: logging.info (msg, *args, **kwargs)

     Logs a message with level *note INFO: 2e3b. on the root logger.
     The arguments and behavior are otherwise the same as for *note
     debug(): 2e40.

 -- Função: logging.warning (msg, *args, **kwargs)

     Logs a message with level *note WARNING: 2e3a. on the root logger.
     The arguments and behavior are otherwise the same as for *note
     debug(): 2e40.

          Nota: There is an obsolete function ‘warn’ which is
          functionally identical to ‘warning’.  As ‘warn’ is deprecated,
          please do not use it - use ‘warning’ instead.

 -- Função: logging.error (msg, *args, **kwargs)

     Logs a message with level *note ERROR: 2e42. on the root logger.
     The arguments and behavior are otherwise the same as for *note
     debug(): 2e40.

 -- Função: logging.critical (msg, *args, **kwargs)

     Logs a message with level *note CRITICAL: 2e43. on the root logger.
     The arguments and behavior are otherwise the same as for *note
     debug(): 2e40.

 -- Função: logging.exception (msg, *args, **kwargs)

     Logs a message with level *note ERROR: 2e42. on the root logger.
     The arguments and behavior are otherwise the same as for *note
     debug(): 2e40.  Exception info is added to the logging message.
     This function should only be called from an exception handler.

 -- Função: logging.log (level, msg, *args, **kwargs)

     Logs a message with level 'level' on the root logger.  The
     arguments and behavior are otherwise the same as for *note debug():
     2e40.

 -- Função: logging.disable (level=CRITICAL)

     Provides an overriding level 'level' for all loggers which takes
     precedence over the logger’s own level.  When the need arises to
     temporarily throttle logging output down across the whole
     application, this function can be useful.  Its effect is to disable
     all logging calls of severity 'level' and below, so that if you
     call it with a value of INFO, then all INFO and DEBUG events would
     be discarded, whereas those of severity WARNING and above would be
     processed according to the logger’s effective level.  If
     ‘logging.disable(logging.NOTSET)’ is called, it effectively removes
     this overriding level, so that logging output again depends on the
     effective levels of individual loggers.

     Note that if you have defined any custom logging level higher than
     ‘CRITICAL’ (this is not recommended), you won’t be able to rely on
     the default value for the 'level' parameter, but will have to
     explicitly supply a suitable value.

     Alterado na versão 3.7: The 'level' parameter was defaulted to
     level ‘CRITICAL’.  See bpo-28524(1) for more information about this
     change.

 -- Função: logging.addLevelName (level, levelName)

     Associates level 'level' with text 'levelName' in an internal
     dictionary, which is used to map numeric levels to a textual
     representation, for example when a *note Formatter: 14df. formats a
     message.  This function can also be used to define your own levels.
     The only constraints are that all levels used must be registered
     using this function, levels should be positive integers and they
     should increase in increasing order of severity.

          Nota: If you are thinking of defining your own levels, please
          see the section on *note Níveis personalizados: 2e84.

 -- Função: logging.getLevelNamesMapping ()

     Returns a mapping from level names to their corresponding logging
     levels.  For example, the string “CRITICAL” maps to *note CRITICAL:
     2e43.  The returned mapping is copied from an internal mapping on
     each call to this function.

     Adicionado na versão 3.11.

 -- Função: logging.getLevelName (level)

     Returns the textual or numeric representation of logging level
     'level'.

     If 'level' is one of the predefined levels *note CRITICAL: 2e43,
     *note ERROR: 2e42, *note WARNING: 2e3a, *note INFO: 2e3b. or *note
     DEBUG: 2e3d. then you get the corresponding string.  If you have
     associated levels with names using *note addLevelName(): 2e83. then
     the name you have associated with 'level' is returned.  If a
     numeric value corresponding to one of the defined levels is passed
     in, the corresponding string representation is returned.

     The 'level' parameter also accepts a string representation of the
     level such as ‘INFO’.  In such cases, this functions returns the
     corresponding numeric value of the level.

     If no matching numeric or string value is passed in, the string
     ‘Level %s’ % level is returned.

          Nota: Levels are internally integers (as they need to be
          compared in the logging logic).  This function is used to
          convert between an integer level and the level name displayed
          in the formatted log output by means of the ‘%(levelname)s’
          format specifier (see *note Atributos LogRecord: 2e3e.), and
          vice versa.

     Alterado na versão 3.4: In Python versions earlier than 3.4, this
     function could also be passed a text level, and would return the
     corresponding numeric value of the level.  This undocumented
     behaviour was considered a mistake, and was removed in Python 3.4,
     but reinstated in 3.4.2 due to retain backward compatibility.

 -- Função: logging.getHandlerByName (name)

     Returns a handler with the specified 'name', or ‘None’ if there is
     no handler with that name.

     Adicionado na versão 3.12.

 -- Função: logging.getHandlerNames ()

     Returns an immutable set of all known handler names.

     Adicionado na versão 3.12.

 -- Função: logging.makeLogRecord (attrdict)

     Creates and returns a new *note LogRecord: 101c. instance whose
     attributes are defined by 'attrdict'.  This function is useful for
     taking a pickled *note LogRecord: 101c. attribute dictionary, sent
     over a socket, and reconstituting it as a *note LogRecord: 101c.
     instance at the receiving end.

 -- Função: logging.basicConfig (**kwargs)

     Does basic configuration for the logging system by creating a *note
     StreamHandler: 1238. with a default *note Formatter: 14df. and
     adding it to the root logger.  The functions *note debug(): 2e40,
     *note info(): 2e6b, *note warning(): 2ff, *note error(): 2e7f. and
     *note critical(): 2e80. will call *note basicConfig(): a08.
     automatically if no handlers are defined for the root logger.

     This function does nothing if the root logger already has handlers
     configured, unless the keyword argument 'force' is set to ‘True’.

          Nota: This function should be called from the main thread
          before other threads are started.  In versions of Python prior
          to 2.7.1 and 3.2, if this function is called from multiple
          threads, it is possible (in rare circumstances) that a handler
          will be added to the root logger more than once, leading to
          unexpected results such as messages being duplicated in the
          log.

     The following keyword arguments are supported.

     Formatação         Descrição
                        
     ---------------------------------------------------------------------
                        
     'filename'         Specifies that a *note FileHandler: 19de. be
                        created, using the specified filename, rather
                        than a *note StreamHandler: 1238.
                        
                        
     'filemode'         If 'filename' is specified, open the file in
                        this *note mode: 230e.  Defaults to ‘'a'’.
                        
                        
     'format'           Use the specified format string for the
                        handler.  Defaults to attributes ‘levelname’,
                        ‘name’ and ‘message’ separated by colons.
                        
                        
     'datefmt'          Use the specified date/time format, as accepted
                        by *note time.strftime(): 1229.
                        
                        
     'style'            If 'format' is specified, use this style for
                        the format string.  One of ‘'%'’, ‘'{'’ or
                        ‘'$'’ for *note printf-style: 6cc,
                        *note str.format(): 621. or
                        *note string.Template: 687. respectively.
                        Defaults to ‘'%'’.
                        
                        
     'level'            Set the root logger level to the specified
                        *note level: 65a.
                        
                        
     'stream'           Use the specified stream to initialize the
                        *note StreamHandler: 1238.  Note that this
                        argument is incompatible with 'filename' - if
                        both are present, a ‘ValueError’ is raised.
                        
                        
     'handlers'         If specified, this should be an iterable of
                        already created handlers to add to the root
                        logger.  Any handlers which don’t already have
                        a formatter set will be assigned the default
                        formatter created in this function.  Note that
                        this argument is incompatible with 'filename'
                        or 'stream' - if both are present, a
                        ‘ValueError’ is raised.
                        
                        
     'force'            If this keyword argument is specified as true,
                        any existing handlers attached to the root
                        logger are removed and closed, before carrying
                        out the configuration as specified by the other
                        arguments.
                        
                        
     'encoding'         If this keyword argument is specified along
                        with 'filename', its value is used when the
                        *note FileHandler: 19de. is created, and thus
                        used when opening the output file.
                        
                        
     'errors'           If this keyword argument is specified along
                        with 'filename', its value is used when the
                        *note FileHandler: 19de. is created, and thus
                        used when opening the output file.  If not
                        specified, the value ‘backslashreplace’ is
                        used.  Note that if ‘None’ is specified, it
                        will be passed as such to *note open(): 51c,
                        which means that it will be treated the same as
                        passing ‘errors’.
                        

     Alterado na versão 3.2: O argumento 'style' foi adicionado.

     Alterado na versão 3.3: The 'handlers' argument was added.
     Additional checks were added to catch situations where incompatible
     arguments are specified (e.g.  'handlers' together with 'stream' or
     'filename', or 'stream' together with 'filename').

     Alterado na versão 3.8: O argumento 'force' foi adicionado.

     Alterado na versão 3.9: Os argumentos 'encoding' e 'errors' foram
     adicionados.

 -- Função: logging.shutdown ()

     Informs the logging system to perform an orderly shutdown by
     flushing and closing all handlers.  This should be called at
     application exit and no further use of the logging system should be
     made after this call.

     When the logging module is imported, it registers this function as
     an exit handler (see *note atexit: c.), so normally there’s no need
     to do that manually.

 -- Função: logging.setLoggerClass (klass)

     Tells the logging system to use the class 'klass' when
     instantiating a logger.  The class should define ‘__init__()’ such
     that only a name argument is required, and the ‘__init__()’ should
     call ‘Logger.__init__()’.  This function is typically called before
     any loggers are instantiated by applications which need to use
     custom logger behavior.  After this call, as at any other time, do
     not instantiate loggers directly using the subclass: continue to
     use the *note logging.getLogger(): 967. API to get your loggers.

 -- Função: logging.setLogRecordFactory (factory)

     Set a callable which is used to create a *note LogRecord: 101c.


     Parâmetros: ‘factory’ – The factory callable to be used to
     instantiate a log record.

     Adicionado na versão 3.2: This function has been provided, along
     with *note getLogRecordFactory(): 2e72, to allow developers more
     control over how the *note LogRecord: 101c. representing a logging
     event is constructed.

     The factory has the following signature:

     ‘factory(name, level, fn, lno, msg, args, exc_info, func=None,
     sinfo=None, **kwargs)’


          nome: The logger name.


          level: The logging level (numeric).


          fn: The full pathname of the file where the logging call was
          made.


          lno: The line number in the file where the logging call was
          made.


          msg: The logging message.


          args: The arguments for the logging message.


          exc_info: An exception tuple, or ‘None’.


          func: The name of the function or method which invoked the
          logging call.


          sinfo: A stack traceback such as is provided by *note
          traceback.print_stack(): eb5, showing the call hierarchy.


          kwargs: Additional keyword arguments.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=28524


File: python.info,  Node: Module-Level Attributes,  Next: Integration with the warnings module,  Prev: Funções de nível de módulo,  Up: logging — Recursos de registro de eventos para Python

5.16.4.11 Module-Level Attributes
.................................

 -- Dado: logging.lastResort

     A “handler of last resort” is available through this attribute.
     This is a *note StreamHandler: 1238. writing to ‘sys.stderr’ with a
     level of ‘WARNING’, and is used to handle logging events in the
     absence of any logging configuration.  The end result is to just
     print the message to ‘sys.stderr’.  This replaces the earlier error
     message saying that “no handlers could be found for logger XYZ”.
     If you need the earlier behaviour for some reason, ‘lastResort’ can
     be set to ‘None’.

     Adicionado na versão 3.2.

 -- Dado: logging.raiseExceptions

     Used to see if exceptions during handling should be propagated.

     Padrão: ‘True’.

     If *note raiseExceptions: 1239. is ‘False’, exceptions get silently
     ignored.  This is what is mostly wanted for a logging system - most
     users will not care about errors in the logging system, they are
     more interested in application errors.


File: python.info,  Node: Integration with the warnings module,  Prev: Module-Level Attributes,  Up: logging — Recursos de registro de eventos para Python

5.16.4.12 Integration with the warnings module
..............................................

The *note captureWarnings(): 2e89. function can be used to integrate
*note logging: 87. with the *note warnings: 112. module.

 -- Função: logging.captureWarnings (capture)

     This function is used to turn the capture of warnings by logging on
     and off.

     If 'capture' is ‘True’, warnings issued by the *note warnings: 112.
     module will be redirected to the logging system.  Specifically, a
     warning will be formatted using *note warnings.formatwarning():
     1b8d. and the resulting string logged to a logger named
     ‘'py.warnings'’ with a severity of *note WARNING: 2e3a.

     If 'capture' is ‘False’, the redirection of warnings to the logging
     system will stop, and warnings will be redirected to their original
     destinations (i.e.  those in effect before ‘captureWarnings(True)’
     was called).

Ver também
..........

Módulo *note logging.config: 88.

     API de configuração para o módulo logging.

Módulo *note logging.handlers: 89.

     Tratadores úteis incluídos no módulo logging.

PEP 282(1) - A Logging System

     The proposal which described this feature for inclusion in the
     Python standard library.

Original Python logging package(2)

     This is the original source for the *note logging: 87. package.
     The version of the package available from this site is suitable for
     use with Python 1.5.2, 2.1.x and 2.2.x, which do not include the
     *note logging: 87. package in the standard library.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0282/

   (2) https://old.red-dove.com/python_logging.html


File: python.info,  Node: logging config — Configuração do módulo logging,  Next: logging handlers — Manipuladores de logging,  Prev: logging — Recursos de registro de eventos para Python,  Up: Serviços Genéricos do Sistema Operacional

5.16.5 ‘logging.config’ — Configuração do módulo logging
--------------------------------------------------------

'Código-fonte:' Lib/logging/config.py(1)

Important
.........

Esta página contém apenas informações de referência.  Para tutoriais,
por favor consulte

   * *note Tutorial básico: 1235.

   * *note Tutorial avançado: 1236.

   * *note Livro de receitas de logging: 1237.

__________________________________________________________________

Esta seção descreve a API para configuração do módulo logging.

* Menu:

* Funções de configuração::
* Considerações de segurança::
* Esquema do Dicionário de Configuração::
* Formato do arquivo de configuração::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/logging/config.py


File: python.info,  Node: Funções de configuração,  Next: Considerações de segurança,  Up: logging config — Configuração do módulo logging

5.16.5.1 Funções de configuração
................................

As funções a seguir configuram o módulo logging.  Elas estão localizadas
no módulo *note logging.config: 88.  Seu uso é opcional — você pode
configurar o módulo logging usando essas funções ou fazendo chamadas
para a API principal (definido no próprio *note logging: 87.) e
definindo manipuladores que são declarados em *note logging: 87. ou em
*note logging.handlers: 89.

 -- Função: logging.config.dictConfig (config)

     Obtém a configuração de logging de um dicionário.  Os conteúdos
     desse dicionário estão descritos abaixo em *note Esquema do
     Dicionário de Configuração: 2e8e.

     Se um erro for encontrado durante a configuração, esta função
     levantará uma exceção *note ValueError: 202, *note TypeError: 2c3,
     *note AttributeError: 34b. ou *note ImportError: 419. com uma
     mensagem adequadamente descritiva.  A seguir está uma lista
     (possivelmente incompleta) de condições que levantarão um erro:

        * Um ‘level’ que não seja uma string ou que seja uma string que
          não corresponda a um nível de logging atual

        * Um valor ‘propagate’ que não seja um booleano.

        * Um id que não tenha um destino correspondente.

        * Um id de manipulador inexistente encontrado durante uma
          chamada incremental.

        * Um nome de logger inválido.

        * Incapacidade de resolver para um objeto interno ou externo.

     A análise é realizada pela classe ‘DictConfigurator’, cujo
     construtor recebe o dicionário usado para a configuração e possui
     um método ‘configure()’.  O módulo *note logging.config: 88. tem um
     atributo chamável ‘dictConfigClass’ que é inicialmente definido
     como ‘DictConfigurator’.  Você pode substituir o valor de
     ‘dictConfigClass’ por uma implementação adequada de sua autoria.

     A função *note dictConfig(): 11ef. chama ‘dictConfigClass’ passando
     o dicionário especificado e, em seguida, chama o método
     ‘configure()’ no objeto devolvido para colocar a configuração em
     efeito:

          def dictConfig(config):
              dictConfigClass(config).configure()

     Por exemplo, uma subclasse de ‘DictConfigurator’ poderia chamar
     ‘DictConfigurator.__init__()’ no seu próprio ‘__init__()’, em
     seguida, configurar prefixos personalizados que seriam utilizáveis
     na chamada ‘configure()’ subsequente.  ‘dictConfigClass’ seria
     ligado a esta nova subclasse, e então *note dictConfig(): 11ef.
     poderia ser chamado exatamente como no estado padrão, sem
     personalização.

     Adicionado na versão 3.2.

 -- Função: logging.config.fileConfig (fname, defaults=None,
          disable_existing_loggers=True, encoding=None)

     Lê a configuração de logging de um arquivo no formato *note
     configparser: 22.  O formato do arquivo deve ser como descrito em
     *note Formato do arquivo de configuração: 2e8f.  Esta função pode
     ser chamada várias vezes a partir de uma aplicação, permitindo que
     um usuário final selecione entre várias configurações pré-prontas
     (se o desenvolvedor fornecer um mecanismo para apresentar as
     escolhas e carregar a configuração escolhida).

     A função levantará uma exceção *note FileNotFoundError: 42b. se o
     arquivo não existir e *note RuntimeError: 195. se o arquivo for
     inválido ou vazio.


     Parâmetros:

        * ‘fname’ – Um nome de arquivo, ou um objeto arquivo, ou uma
          instância derivada de *note RawConfigParser: f98.  Se uma
          instância derivada de ‘RawConfigParser’ for passada, ela é
          usada como está.  Caso contrário, uma instância de *note
          ConfigParser: 1c8. é criada, e a configuração é lida por ela a
          partir do objeto passado em ‘fname’.  Se esse objeto tiver um
          método *note readline(): ba, ele é presumido como um objeto
          arquivo ou similar e lido usando *note read_file(): 506.; caso
          contrário, é presumido como um nome de arquivo e passado para
          *note read(): 14b0.

        * ‘defaults’ – Os defaults a serem passados para o
          ‘ConfigParser’ podem ser especificados nesse argumento.

        * ‘disable_existing_loggers’ – Se especificado como ‘False’, os
          loggers que existem quando esta chamada é feita são deixados
          habilitados.  O padrão é ‘True’ porque isso habilita o
          comportamento antigo de forma retrocompatível.  Este
          comportamento é para desabilitar quaisquer loggers não-raiz
          existentes, a menos que eles ou seus ancestrais sejam
          explicitamente nomeados na configuração de logging.

        * ‘encoding’ – A codificação usada para abrir o arquivo quando
          fname é um nome de arquivo.

     Alterado na versão 3.4: Uma instância de uma subclasse de *note
     RawConfigParser: f98. agora é aceita como um valor para ‘fname’.
     Isso facilita:

             * Uso de um arquivo de configuração onde a configuração de
               logging é apenas parte da configuração geral da
               aplicação.

             * Uso de uma configuração lida de um arquivo, e então
               modificada pela aplicação que a usa (por exemplo, baseada
               em parâmetros de linha de comando ou outros aspectos do
               ambiente de tempo de execução) antes de ser passada para
               ‘fileConfig’.

     Alterado na versão 3.10: Adicionado o parâmetro encoding.

     Alterado na versão 3.12: Uma exceção será levantada se o arquivo
     fornecido não existir ou for inválido ou for vazio.

 -- Função: logging.config.listen (port=DEFAULT_LOGGING_CONFIG_PORT,
          verify=None)

     Inicia um servidor soquete na porta especificada e escuta por novas
     configurações.  Se nenhuma porta for especificada, o padrão do
     módulo ‘DEFAULT_LOGGING_CONFIG_PORT’ é usado.  As configurações de
     logging serão enviadas como um arquivo adequado para processamento
     por *note dictConfig(): 11ef. ou por *note fileConfig(): b66.
     Retorna uma instância de *note Thread: 953. na qual você pode
     chamar *note start(): 2e90. para iniciar o servidor, e à qual você
     pode *note join(): 1224. quando apropriado.  Para interromper o
     servidor, chame *note stopListening(): 2e91.

     O argumento ‘verify’, se especificado, deve ser um chamável que
     verifique se os bytes recebidos através do soquete são válidos e
     devem ser processados.  Isso pode ser feito criptografando e/ou
     assinando o que é enviado através do soquete, de modo que o
     chamável ‘verify’ possa realizar a verificação de assinatura e/ou a
     descriptografia.  O chamável ‘verify’ é chamado com um único
     argumento – os bytes recebidos através do soquete – e deve retornar
     os bytes a serem processados, ou ‘None’ para indicar que os bytes
     devem ser descartados.  Os bytes devolvidos podem ser os mesmos que
     os bytes passados (por exemplo, quando apenas a verificação é
     feita), ou podem ser completamente diferentes (talvez se a
     descriptografia for realizada).

     Para enviar uma configuração para o soquete, leia o arquivo de
     configuração e o envie para o soquete como uma sequência de bytes
     precedida por uma string de comprimento de quatro bytes empacotada
     em binário usando ‘struct.pack('>L', n)’.
          Nota: Como partes da configuração são passadas por *note
          eval(): 180, o uso dessa função pode expor seus usuários a um
          risco de segurança.  Embora a função apenas se vincule a um
          soquete em ‘localhost’ e, portanto, não aceite conexões de
          máquinas remotas, existem cenários em que código não confiável
          pode ser executado sob a conta do processo que chama *note
          listen(): f99.  Especificamente, se o processo que chama *note
          listen(): f99. estiver sendo executado em uma máquina
          multiusuário onde os usuários não confiam uns nos outros, um
          usuário malicioso pode conseguir executar essencialmente
          código arbitrário no processo de um usuário vítima,
          simplesmente conectando-se ao soquete *note listen(): f99. da
          vítima e enviando uma configuração que execute qualquer código
          que o atacante queira que seja executado no processo da
          vítima.  Isso é especialmente fácil de fazer se a porta padrão
          for usada, mas não é difícil mesmo se uma porta diferente for
          utilizada.  Para evitar o risco de isso acontecer, use o
          argumento ‘verify’ de *note listen(): f99. para prevenir que
          configurações não reconhecidas sejam aplicadas.

     Alterado na versão 3.4: O argumento ‘verify’ foi adicionado.

          Nota: Se você deseja enviar configurações para o listener que
          não desabilitem os loggers existentes, você precisará usar um
          formato JSON para a configuração, que usará *note
          dictConfig(): 11ef. para configuração.  Este método permite
          que você especifique ‘disable_existing_loggers’ como ‘False’
          na configuração que você envia.

 -- Função: logging.config.stopListening ()

     Interrompe o servidor de escuta que foi criado com uma chamada para
     *note listen(): f99.  Essa função é tipicamente chamada antes de
     chamar ‘join()’ no valor de retorno de *note listen(): f99.


File: python.info,  Node: Considerações de segurança,  Next: Esquema do Dicionário de Configuração,  Prev: Funções de configuração,  Up: logging config — Configuração do módulo logging

5.16.5.2 Considerações de segurança
...................................

A funcionalidade de configuração de logging tenta oferecer conveniência,
e em parte isso é feito ao oferecer a capacidade de converter texto
presente em arquivos de configuração em objetos Python usados na
configuração de logging — por exemplo, conforme descrito em *note
Objetos definidos pelo usuário: 2e94.  No entanto, esses mesmos
mecanismos (importar chamáveis de módulos definidos pelo usuário e
chamá-los com parâmetros da configuração) poderiam ser usados para
invocar qualquer código que você desejar, e por essa razão você deve
tratar arquivos de configuração de fontes não confiáveis com extrema
cautela e certificar-se de que nada de ruim pode acontecer se você
carregá-los, antes de realmente carregá-los.


File: python.info,  Node: Esquema do Dicionário de Configuração,  Next: Formato do arquivo de configuração,  Prev: Considerações de segurança,  Up: logging config — Configuração do módulo logging

5.16.5.3 Esquema do Dicionário de Configuração
..............................................

Descrever uma configuração de logging requer listar os vários objetos a
serem criados e as conexões entre eles; por exemplo, você pode criar um
manipulador nomeado ‘console’ e, em seguida, dizer que o logger nomeado
‘startup’ enviará suas mensagens para o manipulador ‘console’.  Estes
objetos não se limitam àqueles fornecidos pelo módulo *note logging: 87,
pois você pode escrever sua própria classe de formatador ou de
manipulador.  Os parâmetros para essas classes também podem precisar
incluir objetos externos, como ‘sys.stderr’.  A sintaxe para descrever
esses objetos e conexões é definida abaixo em *note Conexões de objeto:
2e96.

* Menu:

* Detalhes do Esquema de Dicionário::
* Configuração Incremental::
* Conexões de objeto::
* Objetos definidos pelo usuário::
* Ordem de configuração de manipuladores::
* Acesso a objetos externos::
* Acesso a objetos internos::
* Resolução de importações e importadores personalizados::
* Configurando QueueHandler e QueueListener::


File: python.info,  Node: Detalhes do Esquema de Dicionário,  Next: Configuração Incremental,  Up: Esquema do Dicionário de Configuração

5.16.5.4 Detalhes do Esquema de Dicionário
..........................................

O dicionário passado para *note dictConfig(): 11ef. deve conter as
chaves a seguir:

   * version - deve ser definido como um valor inteiro representando a
     versão do esquema.  O único valor válido atualmente é 1, mas ter
     esta chave permite que o esquema evolua, preservando ainda a
     retrocompatibilidade.

Todas as outras chaves são opcionais, mas se estiverem presentes, serão
interpretadas conforme descrito abaixo.  Em todos os casos abaixo onde
um ‘dicionário de configuração’ é mencionado, ele será verificado quanto
à chave especial ‘'()'’ para consultar se uma instanciação personalizada
é necessária.  Se for o caso, o mecanismo descrito em *note Objetos
definidos pelo usuário: 2e94. abaixo é usado para criar uma instância;
caso contrário, o contexto é usado para determinar o que instanciar.

   * formatters - o valor correspondente será um dicionário em que cada
     chave é um id de formatador e cada valor é um dicionário que
     descreve como configurar a instância correspondente de *note
     Formatter: 14df.

     O dicionário de configuração é buscado pelas chaves opcionais a
     seguir que correspondem aos argumentos passados para criar um
     objeto *note Formatter: 14df.:

        * ‘format’

        * ‘datefmt’

        * ‘style’

        * ‘validate’ (desde a versão >=3.8)

        * ‘defaults’ (desde versão >=3.12)

     Uma chave opcional ‘class’ indica o nome da classe do formatador
     (como um módulo pontilhado e nome da classe).  Os argumentos de
     instanciação são os mesmos que para *note Formatter: 14df.
     portanto, esta chave é mais útil para instanciar uma subclasse
     personalizada de :*note Formatter: 14df.  Por exemplo, a classe
     alternativa pode apresentar tracebacks de exceção em um formato
     expandido ou condensado.  Se o seu formatter exigir chaves de
     configuração diferentes ou extras, você deve usar *note Objetos
     definidos pelo usuário: 2e94.

   * filters - o valor correspondente será um dicionário no qual cada
     chave é um id de filter e cada valor é um dicionário que descreve
     como configurar a instância Filter correspondente.

     O dicionário de configuração é pesquisado pela chave ‘name’ (que
     assume como padrão a string vazia) e esta é usada para construir
     uma instância de *note logging.Filter: 123b.

   * handlers - o valor correspondente será um dicionário no qual cada
     chave é um id de manipulador e cada valor é um dicionário que
     descreve como configurar a instância de Manipulador correspondente.

     O dicionário de configuração é pesquisado para as chaves a seguir:

        * ‘class’ (obrigatório).  Esse é o nome qualificado completo da
          classe do handler.

        * ‘level’ (opcional).  O nível do manipulador.

        * ‘formatter’ (opcional).  O id do formatador para esse
          manipulador.

        * ‘filters’ (opcional).  Uma lista de ids dos filtros para esse
          manipulador.

          Alterado na versão 3.11: ‘filters’ podem receber instâncias de
          filtro além de ids.

     Todas as 'outras' chaves são transmitidas como argumento nomeado
     para o construtor do manipulador.  Por exemplo, dado o trecho:

          handlers:
            console:
              class : logging.StreamHandler
              formatter: brief
              level   : INFO
              filters: [allow_foo]
              stream  : ext://sys.stdout
            file:
              class : logging.handlers.RotatingFileHandler
              formatter: precise
              filename: logconfig.log
              maxBytes: 1024
              backupCount: 3

     o manipulador com o id ‘console’ é instanciado como um *note
     logging.StreamHandler: 1238, usando ‘sys.stdout’ como o fluxo
     subjacente.  O manipulador com o id ‘file’ é instanciado como um
     *note logging.handlers.RotatingFileHandler: 16c2. com os argumentos
     nomeados ‘filename='logconfig.log', maxBytes=1024, backupCount=3’.

   * 'loggers' - o valor correspondente será um dicionário no qual cada
     chave é o nome de um registradores e cada valor é um dicionário que
     descreve como configurar a instância de Registrador correspondente.

     O dicionário de configuração é pesquisado para as chaves a seguir:

        * ‘level’ (opcional).  O nível do logger.

        * ‘propagate’ (opcional).  A configuração de propagação do
          logger.

        * ‘filters’ (opcional).  Uma lista de ids dos filtros para esse
          logger.

          Alterado na versão 3.11: ‘filters’ podem receber instâncias de
          filtro além de ids.

        * ‘handlers’ (opcional).  Uma lista de ids dos manipuladores
          para esse logger.

     Os loggers especificados serão configurados de acordo com o nível,
     a propagação, os filtros e os manipuladores especificados.

   * 'root' - essa será a configuração para o logger raiz.  O
     processamento da configuração será igual ao de qualquer logger,
     exceto pelo fato de que a configuração ‘propagate’ não será
     aplicável.

   * 'incremental' - se a configuração deve ser interpretada como
     incremental à configuração existente.  O padrão deste valor é
     ‘False’, o que significa que a configuração especificada substitui
     a configuração existente com a mesma semântica usada pela
     configuração da API existente *note fileConfig(): b66.

     Se o valor especificado for ‘True’, a configuração será processada
     conforme descrito na seção *note Configuração Incremental: 2e99.

   * 'disable_existing_loggers' - se quaisquer loggers não raiz
     existentes devem ser desabilitados.  Essa configuração reflete o
     parâmetro de mesmo nome em *note fileConfig(): b66.  Se ausente, o
     padrão deste parâmetro é ‘True’.  Este valor é ignorado se
     'incremental' for ‘True’.


File: python.info,  Node: Configuração Incremental,  Next: Conexões de objeto,  Prev: Detalhes do Esquema de Dicionário,  Up: Esquema do Dicionário de Configuração

5.16.5.5 Configuração Incremental
.................................

É difícil oferecer total flexibilidade para a configuração incremental.
Por exemplo, como objetos, assim como filtros e formatadores, são
anônimos, depois que uma configuração é definida, não é possível fazer
referência a esse objeto anônimo ao ampliar uma configuração.

Além disso, não há um argumento convincente para alterar arbitrariamente
o grafo de objetos de loggers, manipuladores, filtros e formatadores em
tempo de execução, depois que uma configuração é definida; a verbosidade
de loggers e manipuladores pode ser controlada simplesmente ajustando os
níveis (e, no caso de loggers, os sinalizadores de propagação).  Alterar
o grafo de objetos arbitrariamente de forma segura é problemático em um
ambiente multithread; embora não seja impossível, os benefícios não
compensam a complexidade que isso acrescentaria à implementação.

Assim, quando a chave ‘incremental’ de um dicionário de configuração
estiver presente e for ‘True’, o sistema ignorará completamente
quaisquer entradas ‘formatters’ e ‘filters’, e processará apenas as
configurações de ‘level’ nas entradas ‘handlers’, e as configurações de
‘level’ e ‘propagate’ nas entradas ‘loggers’ e ‘root’.

Usar um valor no dicionário de configuração permite que configurações
sejam enviadas pela rede como dicionários pickled para um listener
soquete.  Assim, a verbosidade de logging de uma aplicação de longa
execução pode ser alterada ao longo do tempo sem a necessidade de parar
e reiniciar a aplicação.


File: python.info,  Node: Conexões de objeto,  Next: Objetos definidos pelo usuário,  Prev: Configuração Incremental,  Up: Esquema do Dicionário de Configuração

5.16.5.6 Conexões de objeto
...........................

O esquema descreve um conjunto de objetos de logging — loggers,
manipuladores, formatadores, filtros — que são conectados uns aos outros
em um grafo de objetos.  Assim, o esquema precisa representar conexões
entre os objetos.  Por exemplo, suponha que, após configurado, um
determinado logger tenha anexado a si um determinado manipulador.  Para
os propósitos desta discussão, podemos dizer que o logger representa a
origem e o manipulador representa o destino de uma conexão entre os
dois.  É claro que, nos objetos configurados, isso é representado pelo
logger mantendo uma referência ao manipulador.  No dicionário de
configuração, isso é feito atribuindo a cada objeto de destino um id que
o identifica de forma inequívoca e, em seguida, usando esse id na
configuração do objeto de origem para indicar que existe uma conexão
entre o objeto de origem e o objeto de destino com aquele id.

Então, por exemplo, considere o seguinte trecho de YAML:

     formatters:
       brief:
         # configuration for formatter with id 'brief' goes here
       precise:
         # configuration for formatter with id 'precise' goes here
     handlers:
       h1: #This is an id
        # configuration of handler with id 'h1' goes here
        formatter: brief
       h2: #This is another id
        # configuration of handler with id 'h2' goes here
        formatter: precise
     loggers:
       foo.bar.baz:
         # other configuration for logger 'foo.bar.baz'
         handlers: [h1, h2]

(Observação: o YAML é usado aqui porque é um pouco mais legível do que o
formulário de origem Python equivalente para o dicionário.)

Os ids para loggers são os nomes dos loggers que seriam usados
programaticamente para obter uma referência a esses loggers, por
exemplo, ‘foo.bar.baz’.  Os ids para Formatadores e Filtros podem ser
qualquer valor de string (como ‘brief’, ‘precise’ acima) e são
transitórios, no sentido de que só têm significado durante o
processamento do dicionário de configuração e são usados para determinar
conexões entre objetos, não sendo persistidos em nenhum lugar após a
conclusão da chamada de configuração.

O trecho acima indica que o logger nomeado ‘foo.bar.baz’ deve ter dois
manipuladores anexados a ele, que são descritos pelos IDs de manipulador
‘h1’ e ‘h2’.  O formatador para ‘h1’ é o descrito pelo id ‘brief’, e o
formatador para ‘h2’ é o descrito pelo id ‘precise’.


File: python.info,  Node: Objetos definidos pelo usuário,  Next: Ordem de configuração de manipuladores,  Prev: Conexões de objeto,  Up: Esquema do Dicionário de Configuração

5.16.5.7 Objetos definidos pelo usuário
.......................................

O esquema oferece suporte a objetos definidos pelo usuário para
manipuladores, filtros e formatadores.  (Os loggers não precisam ter
tipos diferentes para instâncias diferentes, portanto este esquema de
configuração não provê suporte às classes de loggers definidas pelo
usuário.)

Objetos a serem configurados são descritos por dicionários que detalham
sua configuração.  Em alguns casos, o sistema de logging consegue
inferir pelo contexto como um objeto deve ser instanciado, mas, quando
se trata de um objeto definido pelo usuário, o sistema não saberá como
fazer isso.  Para oferecer total flexibilidade na instanciação desses
objetos definidos pelo usuário, é necessário fornecer uma factory — um
chamável que recebe um dicionário de configuração e retorna o objeto
instanciado.  Isso é sinalizado por um caminho de importação absoluto
para a factory, disponibilizado sob a chave especial ‘'()'’.  Aqui está
um exemplo concreto:

     formatters:
       brief:
         format: '%(message)s'
       default:
         format: '%(asctime)s %(levelname)-8s %(name)-15s %(message)s'
         datefmt: '%Y-%m-%d %H:%M:%S'
       custom:
           (): my.package.customFormatterFactory
           bar: baz
           spam: 99.9
           answer: 42

O trecho YAML acima define três formatadores.  O primeiro, com id
‘brief’, é uma instância padrão de *note logging.Formatter: 14df. com a
string de formato especificado.  O segundo, com id ‘default’, tem um
formato mais longo e também define explicitamente o formato de tempo, e
resultará em um *note logging.Formatter: 14df. inicializado com essas
duas strings de formatação.  Em código-fonte Python, os formatadores
‘brief’ e ‘default’ têm subdicionários de configuração:

     {
       'format' : '%(message)s'
     }

e:

     {
       'format' : '%(asctime)s %(levelname)-8s %(name)-15s %(message)s',
       'datefmt' : '%Y-%m-%d %H:%M:%S'
     }

respectivamente; e como esses dicionários não contêm a chave especial
‘'()'’, a instanciação é inferida pelo contexto.  Como resultado, são
criadas instâncias padrão de *note logging.Formatter: 14df.  O
subdicionário de configuração do terceiro formatador, com o id ‘custom’,
é:

     {
       '()' : 'my.package.customFormatterFactory',
       'bar' : 'baz',
       'spam' : 99.9,
       'answer' : 42
     }

e isso contém a chave especial ‘'()'’, o que significa que se deseja uma
instanciação definida pelo usuário.  Nesse caso, a função factory
especificada será usada.  Se for um chamável real, ele será usado
diretamente — caso contrário, se você especificar uma string (como no
exemplo), o chamável real será localizado usando os mecanismos normais
de importação.  O callable será chamado com os itens restantes no
subdicionário de configuração como argumentos nomeados.  No exemplo
acima, assume-se que o formatter com id ‘custom’ seja retornado pela
chamada:

     my.package.customFormatterFactory(bar='baz', spam=99.9, answer=42)

     Aviso: Os valores de chaves como ‘bar’, ‘spam’ e ‘answer’ no
     exemplo acima não devem ser dicionários de configuração nem
     referências como ‘cfg://foo’, ou ‘ext://bar’ porque eles não serão
     processados pelo maquinário de configuração — serão simplesmente
     passados para a função callable como estão.

A chave ‘'()'’ foi usada como chave especial porque não é um nome válido
de parâmetro nomeado e, portanto, não conflita com os nomes dos
argumentos nomeados usados na chamada.  O ‘'()'’ também serve como um
mnemônico de que o valor correspondente é um chamável.

Alterado na versão 3.11: O membro ‘filters’ de ‘handlers’ e ‘loggers’
pode receber instâncias de filtro, além de ids.

Você também pode especificar uma chave especial ‘'.'’ cujo valor é um
mapeamento de nomes de atributos para valores.  Se essa chave for
encontrada, os atributos especificados serão definidos no objeto
definido pelo usuário antes que ele seja retornado.  Assim, com a
seguinte configuração:

     {
       '()' : 'my.package.customFormatterFactory',
       'bar' : 'baz',
       'spam' : 99.9,
       'answer' : 42,
       '.' {
         'foo': 'bar',
         'baz': 'bozz'
       }
     }

o formatador retornado terá o atributo ‘foo’ definido como ‘'bar'’ e o
atributo ‘baz’ definido como ‘'bozz'’.

     Aviso: Os valores de atributos como ‘foo’ e ‘baz’ no exemplo acima
     não devem ser dicionários de configuração nem referências como
     ‘cfg://foo’ ou ‘ext://bar’ porque eles não serão processados pelo
     maquinário de configuração, mas definidos como valores de atributo
     exatamente como foram fornecidos.


File: python.info,  Node: Ordem de configuração de manipuladores,  Next: Acesso a objetos externos,  Prev: Objetos definidos pelo usuário,  Up: Esquema do Dicionário de Configuração

5.16.5.8 Ordem de configuração de manipuladores
...............................................

Os manipuladores são configurados em ordem alfabética de suas chaves, e
um manipulador configurado substitui o dicionário de configuração no
(cópia de trabalho do) dicionário ‘handlers’ no esquema.  Se você usar
uma construção como ‘cfg://handlers.foo’, então inicialmente
‘handlers['foo']’ aponta para o dicionário de configuração do
manipulador nomeado ‘foo’ e, posteriormente (quando esse manipulador
tiver sido configurado), passa a apontar para a instância configurada do
manipulador.  Assim, ‘cfg://handlers.foo’ pode ser resolvido tanto como
um dicionário quanto como uma instância de manipulador.  Em geral, é
prudente nomear os manipuladores de modo que os manipuladores
dependentes sejam configurados depois de quaisquer manipuladores dos
quais dependam; isso permite que algo como ‘cfg://handlers.foo’ seja
usado na configuração de um manipulador que depende do handler ‘foo’.
Se esse manipulador dependente fosse nomeado ‘bar’, surgiriam problemas,
pois a configuração de ‘bar’ seria tentada antes da de ‘foo’, e ‘foo’
ainda não teria sido configurado.  No entanto, se o manipulador
dependente fosse nomeado ‘foobar’, ele seria configurado após ‘foo’, com
o resultado de que ‘cfg://handlers.foo’ seria resolvido para o
manipulador ‘foo’ configurado, e não para o seu dicionário de
configuração.


File: python.info,  Node: Acesso a objetos externos,  Next: Acesso a objetos internos,  Prev: Ordem de configuração de manipuladores,  Up: Esquema do Dicionário de Configuração

5.16.5.9 Acesso a objetos externos
..................................

Há momentos em que uma configuração precisa se referir a objetos
externos à configuração, por exemplo ‘sys.stderr’.  Se o dicionário de
configuração for construído usando código Python, isso é simples, mas
surge um problema quando a configuração é fornecida por meio de um
arquivo texto (por exemplo, JSON, YAML). Em um arquivo texto, não há uma
forma padrão de distinguir ‘sys.stderr’ da string literal
‘'sys.stderr'’.  Para facilitar essa distinção, o sistema de
configuração procura por determinados prefixos especiais em valores de
string e os trata de forma especial.  Por exemplo, se a string literal
‘'ext://sys.stderr'’ for fornecida como um valor na configuração, então
o prefixo ‘ext://’ será removido e o restante do valor será processado
usando os mecanismos normais de importação.

O tratamento desses prefixos é feito de forma análoga ao tratamento de
protocolos: existe um mecanismo genérico para procurar prefixos que
correspondam à expressão regular ^(?P<prefix>[a-z]+)://(?P<suffix>.*),
de modo que, se o ‘prefix’ for reconhecido, o ‘suffix’ é processado de
uma forma dependente do prefixo e o resultado desse processamento
substitui o valor da string.  Se o prefixo não for reconhecido, então o
valor da string é mantido como está.


File: python.info,  Node: Acesso a objetos internos,  Next: Resolução de importações e importadores personalizados,  Prev: Acesso a objetos externos,  Up: Esquema do Dicionário de Configuração

5.16.5.10 Acesso a objetos internos
...................................

Além de objetos externos, às vezes também é necessário fazer referência
a objetos na configuração.  Isso será feito de forma implícita pelo
sistema de configuração para coisas que ele conhece.  Por exemplo, o
valor em forma de string ‘'DEBUG'’ para um ‘level’ em um logger ou
manipulador será automaticamente convertido para o valor
‘logging.DEBUG’, e as entradas ‘handlers’, ‘filters’ e ‘formatter’
receberão um identificador de objeto e o resolverão para o objeto de
destino apropriado.

No entanto, é necessário um mecanismo mais genérico para objetos
definidos pelo usuário que não são conhecidos pelo módulo *note logging:
87.  Por exemplo, considere *note logging.handlers.MemoryHandler: 2ea3,
que recebe um argumento ‘target’ que é outro manipulador para o qual
delegar.  Como o sistema já conhece essa classe, então, na configuração,
o ‘target’ fornecido só precisa ser o id do objeto do manipulador de
destino relevante, e o sistema resolverá esse id para o manipulador
correspondente.  Se, porém, um usuário definir um ‘my.package.MyHandler’
que tenha um manipulador ‘alternate’, o sistema de configuração não
saberia que ‘alternate’ se refere a um manipulador.  Para atender a esse
caso, um sistema genérico de resolução permite que o usuário
especifique:

     handlers:
       file:
         # configuration of file handler goes here

       custom:
         (): my.package.MyHandler
         alternate: cfg://handlers.file

A cadeia literal ‘'cfg://handlers.file'’ será resolvida de maneira
análoga às strings com o prefixo ‘ext://’ mas procurando na própria
configuração em vez do espaço de nomes de importação.  O mecanismo
permite acesso por ponto ou por índice, de forma semelhante ao que é
fornecido por ‘str.format’.  Assim, dado o seguinte trecho:

     handlers:
       email:
         class: logging.handlers.SMTPHandler
         mailhost: localhost
         fromaddr: my_app@domain.tld
         toaddrs:
           - support_team@domain.tld
           - dev_team@domain.tld
         subject: Houston, we have a problem.

in the configuration, the string ‘'cfg://handlers'’ would resolve to the
dict with key ‘handlers’, the string ‘'cfg://handlers.email’ would
resolve to the dict with key ‘email’ in the ‘handlers’ dict, and so on.
The string ‘'cfg://handlers.email.toaddrs[1]’ would resolve to
‘'dev_team@domain.tld'’ and the string
‘'cfg://handlers.email.toaddrs[0]'’ would resolve to the value
‘'support_team@domain.tld'’.  The ‘subject’ value could be accessed
using either ‘'cfg://handlers.email.subject'’ or, equivalently,
‘'cfg://handlers.email[subject]'’.  The latter form only needs to be
used if the key contains spaces or non-alphanumeric characters.  Please
note that the characters ‘[’ and ‘]’ are not allowed in the keys.  If an
index value consists only of decimal digits, access will be attempted
using the corresponding integer value, falling back to the string value
if needed.

Dada uma string ‘cfg://handlers.myhandler.mykey.123’, ela será resolvida
como ‘config_dict['handlers']['myhandler']['mykey']['123']’.  Se a
string for especificada como ‘cfg://handlers.myhandler.mykey[123]’, o
sistema tentará obter o valor de
‘config_dict['handlers']['myhandler']['mykey'][123]’ e, caso isso falhe,
recorrerá a ‘config_dict['handlers']['myhandler']['mykey']['123']’.


File: python.info,  Node: Resolução de importações e importadores personalizados,  Next: Configurando QueueHandler e QueueListener,  Prev: Acesso a objetos internos,  Up: Esquema do Dicionário de Configuração

5.16.5.11 Resolução de importações e importadores personalizados
................................................................

Import resolution, by default, uses the builtin *note __import__(): 8da.
function to do its importing.  You may want to replace this with your
own importing mechanism: if so, you can replace the ‘importer’ attribute
of the ‘DictConfigurator’ or its superclass, the ‘BaseConfigurator’
class.  However, you need to be careful because of the way functions are
accessed from classes via descriptors.  If you are using a Python
callable to do your imports, and you want to define it at class level
rather than instance level, you need to wrap it with *note
staticmethod(): 416.  For example:

     from importlib import import_module
     from logging.config import BaseConfigurator

     BaseConfigurator.importer = staticmethod(import_module)

Você não precisa envolver com *note staticmethod(): 416. se estiver
definindo o chamável de importação em uma 'instância' do configurador.


File: python.info,  Node: Configurando QueueHandler e QueueListener,  Prev: Resolução de importações e importadores personalizados,  Up: Esquema do Dicionário de Configuração

5.16.5.12 Configurando QueueHandler e QueueListener
...................................................

If you want to configure a *note QueueHandler: 18ec, noting that this is
normally used in conjunction with a *note QueueListener: e59, you can
configure both together.  After the configuration, the ‘QueueListener’
instance will be available as the *note listener: 2ea7. attribute of the
created handler, and that in turn will be available to you using *note
getHandlerByName(): 18ed. and passing the name you have used for the
‘QueueHandler’ in your configuration.  The dictionary schema for
configuring the pair is shown in the example YAML snippet below.

     handlers:
       qhand:
         class: logging.handlers.QueueHandler
         queue: my.module.queue_factory
         listener: my.package.CustomListener
         handlers:
           - hand_name_1
           - hand_name_2
           ...

As chaves ‘queue’ e ‘listener’ são opcionais.

Se a chave ‘queue’ estiver presente, o valor correspondente pode ser um
dos seguintes:

   * An object implementing the *note Queue.put_nowait: 2ea8. and *note
     Queue.get: 2ea9. public API. For instance, this may be an actual
     instance of *note queue.Queue: 13db. or a subclass thereof, or a
     proxy obtained by *note
     multiprocessing.managers.SyncManager.Queue(): 2eaa.

     É claro que isso só é possível se você estiver construindo ou
     modificando o dicionário de configuração no código.

   * Uma string que é resolvida para um chamável que, quando chamado sem
     argumentos, retorna a instância de fila a ser usada.  Esse chamável
     pode ser uma subclasse de *note queue.Queue: 13db. ou uma função
     que retorna uma instância de fila adequada, como
     ‘my.module.queue_factory()’.

   * Um dicionário com a chave ‘'()'’ que é construído da forma usual
     discutida em *note Objetos definidos pelo usuário: 2e94. O
     resultado dessa construção deve ser uma instância de *note
     queue.Queue: 13db.

Se a chave ‘queue’ estiver ausente, uma instância padrão e não limitada
de *note queue.Queue: 13db. será criada e usada.

Se a chave ‘listener’ estiver presente, o valor correspondente pode ser
um dos seguintes:

   * Uma subclasse de *note logging.handlers.QueueListener: e59.  Isso,
     naturalmente, só é possível se você estiver construindo ou
     modificando o dicionário de configuração em código.

   * Uma string que é resolvida para uma classe que seja uma subclasse
     de ‘QueueListener’ como ‘'my.package.CustomListener'’.

   * Um dicionário com a chave ‘'()'’, construído da maneira usual
     conforme discutido em *note Objetos definidos pelo usuário: 2e94. O
     resultado dessa construção deve ser um chamável com a mesma
     assinatura do inicializador de ‘QueueListener’.

Se a chave ‘listener’ estiver ausente, será usada *note
logging.handlers.QueueListener: e59.

Os valores sob a chave ‘handlers’ são os nomes de outros manipuladores
na configuração (não mostrados no trecho acima) que serão passados ao
queue listener.

Quaisquer classes personalizadas de manipulador de filas e de listener
precisarão ser definidas com as mesmas assinaturas de inicialização que
*note QueueHandler: 18ec. e *note QueueListener: e59.

Adicionado na versão 3.12.


File: python.info,  Node: Formato do arquivo de configuração,  Prev: Esquema do Dicionário de Configuração,  Up: logging config — Configuração do módulo logging

5.16.5.13 Formato do arquivo de configuração
............................................

The configuration file format understood by *note fileConfig(): b66. is
based on *note configparser: 22. functionality.  The file must contain
sections called ‘[loggers]’, ‘[handlers]’ and ‘[formatters]’ which
identify by name the entities of each type which are defined in the
file.  For each such entity, there is a separate section which
identifies how that entity is configured.  Thus, for a logger named
‘log01’ in the ‘[loggers]’ section, the relevant configuration details
are held in a section ‘[logger_log01]’.  Similarly, a handler called
‘hand01’ in the ‘[handlers]’ section will have its configuration held in
a section called ‘[handler_hand01]’, while a formatter called ‘form01’
in the ‘[formatters]’ section will have its configuration specified in a
section called ‘[formatter_form01]’.  The root logger configuration must
be specified in a section called ‘[logger_root]’.

     Nota: The *note fileConfig(): b66. API is older than the *note
     dictConfig(): 11ef. API and does not provide functionality to cover
     certain aspects of logging.  For example, you cannot configure
     *note Filter: 123b. objects, which provide for filtering of
     messages beyond simple integer levels, using *note fileConfig():
     b66.  If you need to have instances of *note Filter: 123b. in your
     logging configuration, you will need to use *note dictConfig():
     11ef.  Note that future enhancements to configuration functionality
     will be added to *note dictConfig(): 11ef, so it’s worth
     considering transitioning to this newer API when it’s convenient to
     do so.

Exemplos dessas seções no arquivo são fornecidos abaixo.

     [loggers]
     keys=root,log02,log03,log04,log05,log06,log07

     [handlers]
     keys=hand01,hand02,hand03,hand04,hand05,hand06,hand07,hand08,hand09

     [formatters]
     keys=form01,form02,form03,form04,form05,form06,form07,form08,form09

O logger raiz deve especificar um nível e uma lista de manipuladores.
Um exemplo de seção de logger raiz é dado abaixo.

     [logger_root]
     level=NOTSET
     handlers=hand01

The ‘level’ entry can be one of ‘DEBUG, INFO, WARNING, ERROR, CRITICAL’
or ‘NOTSET’.  For the root logger only, ‘NOTSET’ means that all messages
will be logged.  Level values are *note evaluated: 2302. in the context
of the ‘logging’ package’s namespace.

A entrada ‘handlers’ é uma lista separada por vírgulas com os nomes dos
manipuladores, que devem aparecer na seção ‘[handlers]’.  Esses nomes
precisam aparecer na seção ‘[handlers]’ e ter seções correspondentes no
arquivo de configuração.

Para loggers que não sejam o logger raiz, são necessárias algumas
informações adicionais.  Isso é ilustrado pelo exemplo a seguir.

     [logger_parser]
     level=DEBUG
     handlers=hand01
     propagate=1
     qualname=compiler.parser

As entradas ‘level’ e ‘handlers’ são interpretadas da mesma forma que o
logger raiz, exceto que, se o nível de um logger não raiz for
especificado como ‘NOTSET’, o sistema consulta os loggers situados acima
na hierarquia para determinar o nível efetivo do logger.  O item
‘propagate’ é definido como 1 para indicar que as mensagens devem ser
propagadas para os manipuladores acima na hierarquia de loggers a partir
deste logger, ou 0 para indicar que as mensagens não são propagadas para
manipuladores acima na hierarquia.  O item ‘qualname’ é o nome de canal
hierárquico do logger, ou seja, o nome usado pela aplicação para obter o
logger.

As seções que especificam a configuração de manipuladores são
exemplificadas pelo seguinte.

     [handler_hand01]
     class=StreamHandler
     level=NOTSET
     formatter=form01
     args=(sys.stdout,)

A entrada ‘class’ indica a classe do manipulador (conforme determinada
por *note eval(): 180. no espaço de nomes do pacote ‘logging’).  O
‘level’ é interpretado da mesma forma que para loggers, e ‘NOTSET’ é
entendido como “registrar tudo”.

A entrada ‘formatter’ indica o nome da chave do formatador para esse
manipulador.  Se estiver em branco, um formatador padrão
(‘logging._defaultFormatter’) será usado.  Se um nome for especificado,
ele deve aparecer na seção ‘[formatters]’ e ter uma seção correspondente
no arquivo de configuração.

The ‘args’ entry, when *note evaluated: 2302. in the context of the
‘logging’ package’s namespace, is the list of arguments to the
constructor for the handler class.  Refer to the constructors for the
relevant handlers, or to the examples below, to see how typical entries
are constructed.  If not provided, it defaults to ‘()’.

The optional ‘kwargs’ entry, when *note evaluated: 2302. in the context
of the ‘logging’ package’s namespace, is the keyword argument dict to
the constructor for the handler class.  If not provided, it defaults to
‘{}’.

     [handler_hand02]
     class=FileHandler
     level=DEBUG
     formatter=form02
     args=('python.log', 'w')

     [handler_hand03]
     class=handlers.SocketHandler
     level=INFO
     formatter=form03
     args=('localhost', handlers.DEFAULT_TCP_LOGGING_PORT)

     [handler_hand04]
     class=handlers.DatagramHandler
     level=WARN
     formatter=form04
     args=('localhost', handlers.DEFAULT_UDP_LOGGING_PORT)

     [handler_hand05]
     class=handlers.SysLogHandler
     level=ERROR
     formatter=form05
     args=(('localhost', handlers.SYSLOG_UDP_PORT), handlers.SysLogHandler.LOG_USER)

     [handler_hand06]
     class=handlers.NTEventLogHandler
     level=CRITICAL
     formatter=form06
     args=('Python Application', '', 'Application')

     [handler_hand07]
     class=handlers.SMTPHandler
     level=WARN
     formatter=form07
     args=('localhost', 'from@abc', ['user1@abc', 'user2@xyz'], 'Logger Subject')
     kwargs={'timeout': 10.0}

     [handler_hand08]
     class=handlers.MemoryHandler
     level=NOTSET
     formatter=form08
     target=
     args=(10, ERROR)

     [handler_hand09]
     class=handlers.HTTPHandler
     level=NOTSET
     formatter=form09
     args=('localhost:9022', '/log', 'GET')
     kwargs={'secure': True}

As seções que especificam a configuração do formatador são
caracterizadas pelo seguinte.

     [formatter_form01]
     format=F1 %(asctime)s %(levelname)s %(message)s %(customfield)s
     datefmt=
     style=%
     validate=True
     defaults={'customfield': 'defaultvalue'}
     class=logging.Formatter

The arguments for the formatter configuration are the same as the keys
in the dictionary schema *note formatters section: 2e98.

The ‘defaults’ entry, when *note evaluated: 2302. in the context of the
‘logging’ package’s namespace, is a dictionary of default values for
custom formatting fields.  If not provided, it defaults to ‘None’.

     Nota: Devido ao uso de *note eval(): 180. conforme descrito acima,
     há riscos de segurança potenciais decorrentes do uso de *note
     listen(): f99. para enviar e receber configurações por meio de
     soquetes.  Os riscos se limitam a situações em que vários usuários
     sem confiança mútua executam código na mesma máquina; consulte a
     documentação de *note listen(): f99. para mais informações.

Ver também
..........

Módulo *note logging: 87.

     Referência da API para o módulo de logging.

Módulo *note logging.handlers: 89.

     Tratadores úteis incluídos no módulo logging.


File: python.info,  Node: logging handlers — Manipuladores de logging,  Next: platform — Acesso aos dados de identificação da plataforma subjacente,  Prev: logging config — Configuração do módulo logging,  Up: Serviços Genéricos do Sistema Operacional

5.16.6 ‘logging.handlers’ — Manipuladores de logging
----------------------------------------------------

'Código-fonte:' Lib/logging/handlers.py(1)

Important
.........

Esta página contém apenas informações de referência.  Para tutoriais,
por favor consulte

   * *note Tutorial básico: 1235.

   * *note Tutorial avançado: 1236.

   * *note Livro de receitas de logging: 1237.

__________________________________________________________________

Os seguintes tratadores úteis são fornecidos neste pacote.  Observe que
três dos tratadores (*note StreamHandler: 1238, *note FileHandler: 19de.
e *note NullHandler: 12c6.) são, na verdade, definidos no próprio módulo
*note logging: 87, mas foram documentados aqui junto com os outros
tratadores.

* Menu:

* StreamHandler::
* FileHandler::
* NullHandler::
* WatchedFileHandler::
* BaseRotatingHandler::
* RotatingFileHandler::
* TimedRotatingFileHandler::
* SocketHandler::
* DatagramHandler::
* SysLogHandler::
* NTEventLogHandler::
* SMTPHandler::
* MemoryHandler::
* HTTPHandler::
* QueueHandler::
* QueueListener::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/logging/handlers.py


File: python.info,  Node: StreamHandler,  Next: FileHandler,  Up: logging handlers — Manipuladores de logging

5.16.6.1 StreamHandler
......................

A classe *note StreamHandler: 1238. localizada no pacote principal *note
logging: 87, envia a saída de log para fluxos como 'sys.stdout',
'sys.stderr' ou qualquer objeto arquivo ou similar (ou, mais
precisamente, qualquer objeto que provê os métodos ‘write()’ e
‘flush()’).

 -- Classe: logging.StreamHandler (stream=None)

     Retorna uma nova instância da classe *note StreamHandler: 1238. Se
     'stream' for especificado, a instância irá utilizá-lo para a saída
     de log; caso contrário, 'sys.stderr' será usado.

      -- Método: emit (record)

          Se um formatador for especificado, ele será usado para
          formatar o registro.  Em seguida, o registro é escrito no
          fluxo, seguido por *note terminator: 2eb2. Se houver
          informações de exceção, elas são formatadas usando *note
          traceback.print_exception(): 852. e anexadas ao fluxo.

      -- Método: flush ()

          Esvazia o fluxo chamando seu método *note flush(): 2eb3.
          Observe que o método ‘close()’ é herdado de *note Handler:
          14de. e, portanto, não produz nenhuma saída, de modo que uma
          chamada explícita a *note flush(): 2eb3. pode ser necessária
          em alguns casos.

      -- Método: setStream (stream)

          Define o fluxo da instância para o valor especificado, caso
          seja diferente.  O fluxo antigo é esvaziado antes que o novo
          fluxo seja definido.


          Parâmetros: ‘stream’ – O fluxo que o manipulador deve usar.


          Retorna: o fluxo antigo, se o fluxo tiver sido alterado, ou
          ‘None’, se não tiver sido.

          Adicionado na versão 3.7.

      -- Atributo: terminator

          String usada como terminador ao gravar um registro formatado
          em um fluxo.  O valor padrão é ‘'\n'’.

          Se você não quiser uma terminação com nova linha, pode definir
          o atributo ‘terminator’ da instância do manipulador como uma
          string vazia.

          Nas versões anteriores, o terminador era codificado
          diretamente como ‘'\n'’.

          Adicionado na versão 3.2.


File: python.info,  Node: FileHandler,  Next: NullHandler,  Prev: StreamHandler,  Up: logging handlers — Manipuladores de logging

5.16.6.2 FileHandler
....................

A classe *note FileHandler: 19de, localizada no pacote principal *note
logging: 87, envia a saída de logging para um arquivo em disco.  Ela
herda a funcionalidade de saída da classe *note StreamHandler: 1238.

 -- Classe: logging.FileHandler (filename, mode='a', encoding=None,
          delay=False, errors=None)

     Retorna uma nova instância da classe *note FileHandler: 19de.  O
     arquivo especificado é aberto e usado como o fluxo para logging.
     Se 'mode' não for especificado, ‘'a'’ é usado.  Se 'encoding' não
     for ‘None’, ele é usado para abrir o arquivo com essa codificação.
     Se 'delay' for verdadeiro, então a abertura do arquivo é adiada até
     a primeira chamada de *note emit(): 2eb6. Por padrão, o arquivo
     cresce indefinidamente.  Se 'errors' for especificado, ele é usado
     para determinar como os erros de codificação serão tratados.

     Alterado na versão 3.6: Além de valores do tipo string, objetos
     *note Path: 229. também são aceitos para o argumento 'filename'.

     Alterado na versão 3.9: O parâmetro 'errors' foi adicionado.

      -- Método: close ()

          Fecha o arquivo.

      -- Método: emit (record)

          Envia o registro para o arquivo.

          Observe que, se o arquivo tiver sido fechado devido ao
          encerramento do sistema de logging na saída e o modo do
          arquivo for ‘w’, o registro não será emitido (veja
          bpo-42378(1)).

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=42378


File: python.info,  Node: NullHandler,  Next: WatchedFileHandler,  Prev: FileHandler,  Up: logging handlers — Manipuladores de logging

5.16.6.3 NullHandler
....................

Adicionado na versão 3.1.

A classe *note NullHandler: 12c6, localizada no pacote principal *note
logging: 87, não realiza qualquer formatação ou saída.  Ela é
essencialmente um manipulador ‘no-op’, destinado ao uso por
desenvolvedores de bibliotecas.

 -- Classe: logging.NullHandler

     Retorna uma nova instância da classe *note NullHandler: 12c6.

      -- Método: emit (record)

          Esse método não faz nada.

      -- Método: handle (record)

          Esse método não faz nada.

      -- Método: createLock ()

          Este método retorna ‘None’ para a trava, pois não há E/S
          subjacente cujo acesso precise ser serializado.

Consulte *note Configurando logging para uma biblioteca: 2ebd. para
obter mais informações sobre como usar *note NullHandler: 12c6.


File: python.info,  Node: WatchedFileHandler,  Next: BaseRotatingHandler,  Prev: NullHandler,  Up: logging handlers — Manipuladores de logging

5.16.6.4 WatchedFileHandler
...........................

A classe *note WatchedFileHandler: 2ec0, localizada no módulo *note
logging.handlers: 89, é um ‘FileHandler’ que monitora o arquivo no qual
está registrando logs.  Se o arquivo for alterado, ele é fechado e
reaberto usando o nome do arquivo.

Uma alteração no arquivo pode ocorrer devido ao modo de usar de
programas como 'newsyslog' e 'logrotate', que realizam a rotação de
arquivos de log.  Este manipulador, destinado ao uso em Unix/Linux,
monitora o arquivo para verificar se ele foi alterado desde a última
chamada a emit.  (Considera-se que um arquivo foi alterado se o seu
dispositivo ou nó-i tiverem mudado.)  Se o arquivo tiver sido alterado,
o fluxo do arquivo antigo é fechado, e o arquivo é aberto novamente para
obter um novo fluxo.

Este manipulador não é apropriado para uso no Windows, porque, nesse
sistema, arquivos de log abertos não podem ser movidos ou renomeados — o
logging abre os arquivos com travas exclusivas — e, portanto, não há
necessidade desse tipo de manipulador.  Além disso, 'ST_INO' não é
suportado no Windows; *note stat(): 4a0. sempre retorna zero para esse
valor.

 -- Classe: logging.handlers.WatchedFileHandler (filename, mode='a',
          encoding=None, delay=False, errors=None)

     Retorna uma nova instância da classe *note WatchedFileHandler:
     2ec0.  O arquivo especificado é aberto e usado como o fluxo para
     registro de logs.  Se 'mode' não for especificado, ‘'a'’ será
     usado.  Se encoding não for ‘None’, ele será usado para abrir o
     arquivo com essa codificação.  Se 'delay' for verdadeiro, a
     abertura do arquivo é adiada até a primeira chamada a *note emit():
     2ec1.  Por padrão, o arquivo cresce indefinidamente.  Se 'errors'
     for fornecido, ele determina como erros de codificação são
     tratados.

     Alterado na versão 3.6: Além de valores do tipo string, objetos
     *note Path: 229. também são aceitos para o argumento 'filename'.

     Alterado na versão 3.9: O parâmetro 'errors' foi adicionado.

      -- Método: reopenIfNeeded ()

          Verifica se o arquivo foi alterado.  Se tiver sido, o fluxo
          existente é descarregado e fechado, e o arquivo é aberto
          novamente, normalmente como um passo preliminar antes de
          enviar o registro para o arquivo.

          Adicionado na versão 3.6.

      -- Método: emit (record)

          Emite o registro para o arquivo, mas antes chama *note
          reopenIfNeeded(): cd6. para reabrir o arquivo caso ele tenha
          sido alterado.


File: python.info,  Node: BaseRotatingHandler,  Next: RotatingFileHandler,  Prev: WatchedFileHandler,  Up: logging handlers — Manipuladores de logging

5.16.6.5 BaseRotatingHandler
............................

A classe *note BaseRotatingHandler: 2ec4, localizada no módulo *note
logging.handlers: 89, é a classe base para os tratadores de arquivos com
rotação, *note RotatingFileHandler: 16c2. e *note
TimedRotatingFileHandler: f95. Em geral, não é necessário instanciar
essa classe, mas ela possui atributos e métodos que podem precisar ser
substituídos.

 -- Classe: logging.handlers.BaseRotatingHandler (filename, mode,
          encoding=None, delay=False, errors=None)

     Os parâmetros são os mesmos de ‘FileHandler’.  Os atributos são:

      -- Atributo: namer

          Se esse atributo for definido como um chamável, o método *note
          rotation_filename(): 2ec6. delega a ele.  Os parâmetros
          passados ao chamável são os mesmos passados para *note
          rotation_filename(): 2ec6.

               Nota: A função namer é chamada muitas vezes durante a
               rotação, portanto deve ser a mais simples e rápida
               possível.  Ela também deve retornar sempre o mesmo
               resultado para uma dada entrada; caso contrário, o
               comportamento da rotação pode não funcionar como
               esperado.

               Também vale observar que é preciso ter cuidado ao usar um
               namer para preservar certos atributo no nome do arquivo
               que são usados durante a rotação.  Por exemplo, *note
               RotatingFileHandler: 16c2. espera ter um conjunto de
               arquivos de log cujos nomes contenham inteiros
               sucessivos, para que a rotação funcione como esperado, e
               *note TimedRotatingFileHandler: f95. remova arquivos de
               log antigos (com base no parâmetro ‘backupCount’ passado
               ao inicializador do manipulador) determinando quais são
               os arquivos mais antigos a serem excluídos.  Para que
               isso funcione, os nomes dos arquivos devem ser ordenáveis
               usando a porção de data/hora do nome, e um namer precisa
               respeitar isso.  (Se for desejado um namer que não
               respeite esse esquema, ele deverá ser usado em uma
               subclasse de *note TimedRotatingFileHandler: f95. que
               substitua o método *note getFilesToDelete(): 2ec7. para
               se adequar ao esquema de nomeação personalizado.)

          Adicionado na versão 3.3.

      -- Atributo: rotator

          Se este atributo estiver definido como um chamável, o método
          *note rotate(): 2ec9. delega a esse chamável.  Os parâmetros
          passados ao chamável são os mesmos passados para *note
          rotate(): 2ec9.

          Adicionado na versão 3.3.

      -- Método: rotation_filename (default_name)

          Modifica o nome do arquivo de log durante a rotação.

          Isso é fornecido para que um nome de arquivo personalizado
          possa ser providenciado.

          A implementação padrão chama o atributo namer do manipulador,
          se ele for chamável, passando o nome padrão para ele.  Se o
          atributo não for chamável (o padrão é ‘None’), o nome é
          devolvido sem alterações.


          Parâmetros: ‘default_name’ – O nome padrão para o arquivo de
          log.

          Adicionado na versão 3.3.

      -- Método: rotate (source, dest)

          Quando ocorre a rotação, rotaciona o log atual.

          A implementação padrão chama o atributo rotator do
          manipulador, se ele for chamável, passando os argumentos
          source e dest para ele.  Se o atributo não for chamável (o
          padrão é ‘None’), o arquivo de origem é simplesmente renomeado
          para o destino.


          Parâmetros:

             * ‘source’ – O nome do arquivo de origem.  Normalmente,
               este é o nome base do arquivo, por exemplo, ‘test.log’.

             * ‘dest’ – O nome do arquivo de destino.  Normalmente, é
               para onde o arquivo de origem é rotacionado, por exemplo,
               ‘test.log.1’.

          Adicionado na versão 3.3.

O motivo da existência desses atributos é evitar que você precise criar
subclasses — é possível usar os mesmos chamáveis para instâncias de
*note RotatingFileHandler: 16c2. e *note TimedRotatingFileHandler: f95.
Se o chamável namer ou rotator levantar uma exceção, ela será tratada da
mesma forma que qualquer outra exceção durante uma chamada a ‘emit()’,
isto é, por meio do método ‘handleError()’ do manipulador.

Se precisar fazer alterações mais significativas no processamento de
rotação, você pode substituir os métodos.

Para um exemplo, consulte *note Using a rotator and namer to customize
log rotation processing: 2eca.


File: python.info,  Node: RotatingFileHandler,  Next: TimedRotatingFileHandler,  Prev: BaseRotatingHandler,  Up: logging handlers — Manipuladores de logging

5.16.6.6 RotatingFileHandler
............................

A classe *note RotatingFileHandler: 16c2, localizada no módulo *note
logging.handlers: 89, oferece suporte à rotação de arquivos de log em
disco.

 -- Classe: logging.handlers.RotatingFileHandler (filename, mode='a',
          maxBytes=0, backupCount=0, encoding=None, delay=False,
          errors=None)

     Retorna uma nova instância da classe *note RotatingFileHandler:
     16c2.  O arquivo especificado é aberto e usado como o stream para
     logging.  Se 'mode' não for especificado, ‘'a'’ é usado.  Se
     'encoding' não for ‘None’, ele é usado para abrir o arquivo com
     essa codificação.  Se 'delay' for verdadeiro, a abertura do arquivo
     é adiada até a primeira chamada a *note emit(): 2ecd.  Por padrão,
     o arquivo cresce indefinidamente.  Se 'errors' for fornecido, ele é
     usado para determinar como erros de codificação são tratados.

     Você pode usar os valores 'maxBytes' e 'backupCount' para permitir
     que o arquivo faça 'rollover' em um tamanho predeterminado.  Quando
     o tamanho está prestes a ser excedido, o arquivo é fechado e um
     novo arquivo é aberto silenciosamente para saída.  A rotação ocorre
     sempre que o arquivo de log atual está próximo de 'maxBytes' em
     comprimento; mas, se 'maxBytes' ou 'backupCount' for zero, a
     rotação nunca ocorre, portanto, em geral, você deve definir
     'backupCount' como pelo menos 1 e usar um 'maxBytes' diferente de
     zero.  Quando 'backupCount' é diferente de zero, o sistema salva
     arquivos de log antigos acrescentando as extensões ‘.1’, ‘.2’ etc.
     ao nome do arquivo.  Por exemplo, com um 'backupCount' de 5 e um
     nome de arquivo base ‘app.log’, você terá ‘app.log’, ‘app.log.1’,
     ‘app.log.2’, até ‘app.log.5’.  O arquivo no qual se escreve é
     sempre ‘app.log’.  Quando esse arquivo é preenchido, ele é fechado
     e renomeado para ‘app.log.1’ e, se existirem os arquivos
     ‘app.log.1’, ‘app.log.2’ etc., eles são renomeados para
     ‘app.log.2’, ‘app.log.3’ etc., respectivamente.

     Alterado na versão 3.6: Além de valores do tipo string, objetos
     *note Path: 229. também são aceitos para o argumento 'filename'.

     Alterado na versão 3.9: O parâmetro 'errors' foi adicionado.

      -- Método: doRollover ()

          Realiza uma rotação, conforme descrito acima.

      -- Método: emit (record)

          Grava o registro no arquivo, tratando a rotação conforme
          descrito anteriormente.

      -- Método: shouldRollover (record)

          Verifica se o registro fornecido faria o arquivo exceder o
          limite de tamanho configurado.


File: python.info,  Node: TimedRotatingFileHandler,  Next: SocketHandler,  Prev: RotatingFileHandler,  Up: logging handlers — Manipuladores de logging

5.16.6.7 TimedRotatingFileHandler
.................................

A classe *note TimedRotatingFileHandler: f95, localizada no módulo *note
logging.handlers: 89, oferece suporte à rotação de arquivos de log em
disco em intervalos de tempo determinados.

 -- Classe: logging.handlers.TimedRotatingFileHandler (filename,
          when='h', interval=1, backupCount=0, encoding=None,
          delay=False, utc=False, atTime=None, errors=None)

     Retorna uma nova instância da classe *note
     TimedRotatingFileHandler: f95.  O arquivo especificado é aberto e
     usado como fluxo para o logging.  Durante a rotação, o sufixo do
     nome do arquivo também é definido.  A rotação ocorre com base no
     produto de 'when' e 'interval'.

     Você pode usar o 'when' para especificar o tipo de 'intervalo'.  A
     lista de possíveis valores está abaixo.  Observe que eles não
     diferenciam maiúsculas de minúsculas.

     Valor                Tipo de intervalo                Se/como 'atTime' é usado
                                                           
     ------------------------------------------------------------------------------------
                                                           
     ‘'S'’                Segundos                         Ignorado
                                                           
                                                           
     ‘'M'’                Minutos                          Ignorado
                                                           
                                                           
     ‘'H'’                Horas                            Ignorado
                                                           
                                                           
     ‘'D'’                Dias                             Ignorado
                                                           
                                                           
     ‘'W0'-'W6'’          Dia da semana (0=Segunda)        Usado para calcular o tempo
                                                           inicial de rotação
                                                           
                                                           
     ‘'midnight'’         Faz a rotação à meia-noite, se   Usado para calcular o tempo
                          'atTime' não for especificado;   inicial de rotação
                          caso contrário, no horário       
                          'atTime'.
                          

     Ao usar rotação baseada em dia da semana, especifique ‘W0’ para
     segunda-feira, ‘W1’ para terça-feira, e assim por diante até ‘W6’
     para domingo.  Nesse caso, o valor passado para 'interval' não é
     utilizado.

     O sistema salvará arquivos de log antigos acrescentando extensões
     ao nome do arquivo.  As extensões são baseadas em data e hora,
     usando o formato strftime ‘%Y-%m-%d_%H-%M-%S’ ou uma porção inicial
     dele, dependendo do intervalo de rollover.

     Quando a próximo rotação é calculada pela primeira vez (no momento
     em que o manipulador é criado), o tempo da última modificação de um
     arquivo de log existente — ou, caso contrário, o tempo atual — é
     usado para determinar quando a próxima rotação ocorrerá.

     Se o argumento 'utc' for verdadeiro, serão usados horários em
     Horário Universal Coordenado (UTC); caso contrário, será usado o
     horário local.

     Se 'backupCount' for diferente de zero, no máximo 'backupCount'
     arquivos serão mantidos, e, se mais arquivos fossem criados quando
     ocorrer a rotação, o mais antigo será excluído.  A lógica de
     exclusão usa o interval para determinar quais arquivos devem ser
     removidos; assim, alterar o intervalo pode deixar arquivos antigos
     remanescentes.

     Se 'delay' for verdadeiro, a abertura do arquivo será adiada até a
     primeira chamada para *note emit(): 2ed2.

     Se 'atTime' não for ‘None’, ele deve ser uma instância de
     ‘datetime.time’ que especifica a hora do dia em que ocorre a
     rotação, nos casos em que a rotação está configurada para acontecer
     “à meia-noite” ou “em um determinado dia da semana”.  Observe que,
     nesses casos, o valor de 'atTime' é efetivamente usado para
     calcular a rotação inicial, e as rotações subsequentes são
     calculadas por meio do cálculo normal do intervalo.

     Se 'erros' for especificado, ele será usado para determinar como
     erros de codificação são tratados.

          Nota: O cálculo do tempo da rotação inicial é feito quando o
          manipulador é inicializado.  O cálculo dos tempos de rotações
          subsequentes é feito apenas quando ocorre uma rotação, e a
          rotação ocorre somente quando há emissão de saída.  Se isso
          não for levado em consideração, pode causar alguma confusão.
          Por exemplo, se for definido um intervalo de “a cada minuto”,
          isso não significa que você sempre verá arquivos de log com
          horários (no nome do arquivo) separados por um minuto; se,
          durante a execução da aplicação, a saída de log for gerada com
          maior frequência do que uma vez por minuto, então você pode
          esperar observar arquivos de log com horários separados por um
          minuto.  Se, por outro lado, as mensagens de log forem
          emitidas apenas uma vez a cada cinco minutos (por exemplo),
          então haverá lacunas nos horários dos arquivos correspondentes
          aos minutos em que não houve saída (e, portanto, nenhuma
          rotação).

     Alterado na versão 3.4: parâmetro 'atTime' foi adicionado.

     Alterado na versão 3.6: Além de valores do tipo string, objetos
     *note Path: 229. também são aceitos para o argumento 'filename'.

     Alterado na versão 3.9: O parâmetro 'errors' foi adicionado.

      -- Método: doRollover ()

          Realiza uma rotação, conforme descrito acima.

      -- Método: emit (record)

          Emite o registro para o arquivo, com a preparação para a
          rotação, conforme descrito acima.

      -- Método: getFilesToDelete ()

          Retorna uma lista de nomes de arquivos que devem ser excluídos
          como parte da rotação.  Esses são os caminhos absolutos dos
          arquivos de log de backup mais antigos gravados pelo
          manipulador.

      -- Método: shouldRollover (record)

          Verifica se passou tempo suficiente para que a rotação ocorra
          e, se for o caso, calcula o próximo horário da rotação.


File: python.info,  Node: SocketHandler,  Next: DatagramHandler,  Prev: TimedRotatingFileHandler,  Up: logging handlers — Manipuladores de logging

5.16.6.8 SocketHandler
......................

A classe *note SocketHandler: f96, localizada no módulo *note
logging.handlers: 89, envia a saída de logging para um soquete de rede.
A classe base utiliza um soquete TCP.

 -- Classe: logging.handlers.SocketHandler (host, port)

     Retorna uma nova instância da classe *note SocketHandler: f96,
     destinada a se comunicar com uma máquina remota cujo endereço é
     fornecido por 'host' e 'port'.

     Alterado na versão 3.4: Se ‘port’ for especificado como ‘None’, um
     Soquete de domínio Unix será criado usando o valor em ‘host’ - caso
     contrário, um soquete TCP será criado.

      -- Método: close ()

          Fecha o soquete.

      -- Método: emit ()

          Serializa com pickle o dicionário de atributos do registro e o
          grava no soquete em formato binário.  Se houver um erro com o
          soquete, o pacote é descartado silenciosamente.  Se a conexão
          tiver sido perdida anteriormente, ela é restabelecida.  Para
          desserializar com pickle o registro no lado receptor em um
          *note LogRecord: 101c, use a função *note makeLogRecord():
          2e6f.

      -- Método: handleError ()

          Trata um erro ocorrido durante *note emit(): 2ed8.  A causa
          mais provável é a perda da conexão.  Fecha o soquete para que
          seja possível tentar novamente no próximo evento.

      -- Método: makeSocket ()

          Este é um método de fábrica que permite que subclasses definam
          o tipo exato de soquete que desejam.  A implementação padrão
          cria um soquete TCP (*note socket.SOCK_STREAM: 1337.).

      -- Método: makePickle (record)

          Serializa com pickle o dicionário de atributos do registro em
          formato binário com um prefixo de comprimento e o retorna
          pronto para transmissão através do socket.  Os detalhes dessa
          operação são equivalentes a:

               data = pickle.dumps(record_attr_dict, 1)
               datalen = struct.pack('>L', len(data))
               return datalen + data

          Observe que os pickles não são completamente seguros.  Se você
          estiver preocupado com a segurança, pode ser necessário
          substituir este método para implementar um mecanismo mais
          seguro.  Por exemplo, você pode assinar os pickles usando HMAC
          e depois verificá-los no lado receptor, ou alternativamente
          pode desativar a desserialização com pickle de objetos globais
          no lado receptor.

      -- Método: send (packet)

          Envia para o soquete uma string de bytes serializada com
          pickle denominada 'packet'.  O formato da string de bytes
          enviada é o descrito na documentação de *note makePickle():
          2edb.

          Este função permite envios parciais, que podem ocorrer quando
          a rede está ocupada.

      -- Método: createSocket ()

          Tenta criar um soquete; em caso de falha, utiliza um algoritmo
          de back-off exponencial.  Na falha inicial, o manipulador
          descarta a mensagem que estava tentando enviar.  Quando
          mensagens subsequentes são tratadas pela mesma instância, ela
          não tentará se reconectar até que algum tempo tenha passado.
          Os parâmetros padrão são tais que o atraso inicial é de um
          segundo e, se após esse atraso a conexão ainda não puder ser
          estabelecida, o manipulador dobrará o atraso a cada tentativa,
          até um máximo de 30 segundos.

          Este comportamento é controlado pelo seguintes atributos do
          manipulador:

             * ‘retryStart’ (atraso inicial, padrão de 1,0 segundo).

             * ‘retryFactor’ (multiplicador, com padrão de 2,0).

             * ‘retryMax’ (atraso máximo, padrão de 30,0 segundos).

          Isso significa que, se o ouvinte remoto iniciar após o
          manipulador já ter sido utilizado, mensagens podem ser
          perdidas (pois o manipulador nem sequer tentará estabelecer
          uma conexão até que o atraso tenha decorrido, apenas
          descartando silenciosamente as mensagens durante esse período
          de atraso).


File: python.info,  Node: DatagramHandler,  Next: SysLogHandler,  Prev: SocketHandler,  Up: logging handlers — Manipuladores de logging

5.16.6.9 DatagramHandler
........................

A classe *note DatagramHandler: f97, localizada no módulo *note
logging.handlers: 89, herda de *note SocketHandler: f96. para oferecer
suporte ao envio de mensagens de log por meio de soquetes UDP.

 -- Classe: logging.handlers.DatagramHandler (host, port)

     Retorna uma nova instância da classe *note DatagramHandler: f97,
     destinada a se comunicar com uma máquina remota cujo endereço é
     fornecido por 'host' e 'port'.

          Nota: Como o UDP não é um protocolo de fluxo contínuo, não há
          uma conexão persistente entre uma instância deste manipulador
          e host.  Por esse motivo, ao usar um soquete de rede, pode ser
          necessário realizar uma consulta DNS a cada vez que um evento
          é registrado, o que pode introduzir alguma latência no
          sistema.  Se isso for um problema para você, pode realizar a
          consulta manualmente e inicializar este manipulador usando o
          endereço IP obtido, em vez do nome do host.

     Alterado na versão 3.4: Se ‘port’ for especificado como ‘None’, um
     soquete de domínio Unix é criado usando o valor de ‘host’; caso
     contrário, é criado um soquete UDP.

      -- Método: emit ()

          Serializa com pickle o dicionário de atributos do registro e o
          grava no soquete em formato binário.  Se houver um erro com o
          soquete, o pacote é descartado silenciosamente.  Para
          desserializar com pickle o registro no lado receptor em um
          *note LogRecord: 101c, use a função *note makeLogRecord():
          2e6f.

      -- Método: makeSocket ()

          A método de fábrica de *note SocketHandler: f96. aqui é
          substituído para criar um soquete UDP (*note
          socket.SOCK_DGRAM: 1336.).

      -- Método: send (s)

          Envia uma sequência de bytes serializada com pickle para um
          soquete.  O formato da sequência de bytes enviada é conforme
          descrito na documentação de *note SocketHandler.makePickle():
          2edb.


File: python.info,  Node: SysLogHandler,  Next: NTEventLogHandler,  Prev: DatagramHandler,  Up: logging handlers — Manipuladores de logging

5.16.6.10 SysLogHandler
.......................

A classe *note SysLogHandler: 65c, localizada no módulo *note
logging.handlers: 89, oferece suporte ao envio de mensagens de log para
um syslog Unix remoto ou local.

 -- Classe: logging.handlers.SysLogHandler (address=('localhost',
          SYSLOG_UDP_PORT), facility=LOG_USER,
          socktype=socket.SOCK_DGRAM)

     Returns a new instance of the *note SysLogHandler: 65c. class
     intended to communicate with a remote Unix machine whose address is
     given by 'address' in the form of a ‘(host, port)’ tuple.  If
     'address' is not specified, ‘('localhost', 514)’ is used.  The
     address is used to open a socket.  An alternative to providing a
     ‘(host, port)’ tuple is providing an address as a string, for
     example ‘/dev/log’.  In this case, a Unix domain socket is used to
     send the message to the syslog.  If 'facility' is not specified,
     ‘LOG_USER’ is used.  The type of socket opened depends on the
     'socktype' argument, which defaults to *note socket.SOCK_DGRAM:
     1336. and thus opens a UDP socket.  To open a TCP socket (for use
     with the newer syslog daemons such as rsyslog), specify a value of
     *note socket.SOCK_STREAM: 1337.

     Observe que, se o seu servidor não estiver escutando na porta UDP
     514, o *note SysLogHandler: 65c. pode parecer não funcionar.  Nesse
     caso, verifique qual endereço deve ser usado para um soquete de
     domínio — isso depende do sistema.  Por exemplo, no Linux
     geralmente é ‘/dev/log’, enquanto no OS/X é ‘/var/run/syslog’.
     Será necessário verificar a sua plataforma e usar o endereço
     apropriado (talvez seja preciso fazer essa verificação em tempo de
     execução se a aplicação precisar rodar em várias plataformas).  No
     Windows, praticamente é necessário usar a opção UDP.

          Nota: No macOS 12.x (Monterey), a Apple alterou o
          comportamento do daemon syslog — ele não escuta mais em um
          soquete de domínio.  Portanto, não é possível esperar que
          *note SysLogHandler: 65c. funcione nesse sistema.

          Consulte gh-91070(1) para obter mais informações.

     Alterado na versão 3.2: 'socktype' foi adicionado.

      -- Método: close ()

          Fecha o soquete para o host remoto.

      -- Método: createSocket ()

          Tenta criar um soquete e, se ele não for um soquete de
          datagrama, conectá-lo à outra extremidade.  Este método é
          chamado durante a inicialização do manipulador, mas não é
          considerado um erro se a outra extremidade não estiver
          escutando nesse momento — o método será chamado novamente ao
          emitir um evento, caso não haja um soquete nesse ponto.

          Adicionado na versão 3.11.

      -- Método: emit (record)

          O registro é formatado e, em seguida, enviado ao servidor
          syslog.  Se houver informações de exceção, elas 'não' são
          enviadas ao servidor.

          Alterado na versão 3.2.1: (Veja: bpo-12168(2).)  Em versões
          anteriores, a mensagem enviada aos daemons syslog era sempre
          terminada com um byte NUL, porque versões antigas desses
          daemons esperavam uma mensagem terminada em NUL — embora isso
          não conste na especificação relevante ( RFC 5424(3)).  Versões
          mais recentes desses daemons não esperam o byte NUL, mas o
          removem caso esteja presente, e daemons ainda mais recentes
          (que aderem mais de perto à RFC 5424) repassam o byte NUL como
          parte da mensagem.

          Para facilitar o tratamento de mensagens do syslog diante de
          todos esses comportamentos distintos dos daemons, a adição do
          byte NUL tornou-se configurável por meio de um atributo em
          nível de classe, ‘append_nul’ O valor padrão é ‘True’
          (preservando o comportamento existente), mas pode ser definido
          como ‘False’ em uma instância de ‘SysLogHandler’ para que essa
          instância não acrescente o terminador NUL.

          Alterado na versão 3.3: (Consulte: bpo-12419(4)) Em versões
          anteriores, não havia uma instalação para um prefixo “ident”
          ou “tag” para identificar a origem da mensagem.  Isso agora
          pode ser especificado usando um atributo de nível de classe,
          que por padrão é ‘""’ para preservar o comportamento
          existente, mas pode ser substituído em uma instância de
          ‘SysLogHandler’ para que essa instância adicione o ident a
          cada mensagem manipulada.  Observe que o ident fornecido deve
          ser texto, não bytes, e é adicionado à mensagem exatamente
          como está.

      -- Método: encodePriority (facility, priority)

          Codifica a instalação e a prioridade em um inteiro.  Você pode
          passar strings ou inteiros — se strings forem passadas,
          dicionários de mapeamento internos são usados para
          convertê-las em inteiros.

          Os valores simbólicos ‘LOG_’ são definidos em *note
          SysLogHandler: 65c. e espelham os valores definidos no arquivo
          de cabeçalho ‘sys/syslog.h’.

          'Prioridades'

          Nome (string)                  Valor simbólico
                                         
          ---------------------------------------------------
                                         
          ‘alert’                        LOG_ALERT
                                         
                                         
          ‘crit’ ou ‘critical’           LOG_CRIT
                                         
                                         
          ‘debug’                        LOG_DEBUG
                                         
                                         
          ‘emerg’ or ‘panic’             LOG_EMERG
                                         
                                         
          ‘err’ ou ‘error’               LOG_ERR
                                         
                                         
          ‘info’                         LOG_INFO
                                         
                                         
          ‘notice’                       LOG_NOTICE
                                         
                                         
          ‘warn’ or ‘warning’            LOG_WARNING
                                         

          'Facilities'

          Nome (string)       Valor simbólico
                              
          ----------------------------------------
                              
          ‘auth’              LOG_AUTH
                              
                              
          ‘authpriv’          LOG_AUTHPRIV
                              
                              
          ‘cron’              LOG_CRON
                              
                              
          ‘daemon’            LOG_DAEMON
                              
                              
          ‘ftp’               LOG_FTP
                              
                              
          ‘kern’              LOG_KERN
                              
                              
          ‘lpr’               LOG_LPR
                              
                              
          ‘mail’              LOG_MAIL
                              
                              
          ‘news’              LOG_NEWS
                              
                              
          ‘syslog’            LOG_SYSLOG
                              
                              
          ‘user’              LOG_USER
                              
                              
          ‘uucp’              LOG_UUCP
                              
                              
          ‘local0’            LOG_LOCAL0
                              
                              
          ‘local1’            LOG_LOCAL1
                              
                              
          ‘local2’            LOG_LOCAL2
                              
                              
          ‘local3’            LOG_LOCAL3
                              
                              
          ‘local4’            LOG_LOCAL4
                              
                              
          ‘local5’            LOG_LOCAL5
                              
                              
          ‘local6’            LOG_LOCAL6
                              
                              
          ‘local7’            LOG_LOCAL7
                              

      -- Método: mapPriority (levelname)

          Maps a logging level name to a syslog priority name.  You may
          need to override this if you are using custom levels, or if
          the default algorithm is not suitable for your needs.  The
          default algorithm maps ‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’ and
          ‘CRITICAL’ to the equivalent syslog names, and all other level
          names to ‘warning’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/91070

   (2) https://bugs.python.org/issue?@action=redirect&bpo=12168

   (3) https://datatracker.ietf.org/doc/html/rfc5424.html

   (4) https://bugs.python.org/issue?@action=redirect&bpo=12419


File: python.info,  Node: NTEventLogHandler,  Next: SMTPHandler,  Prev: SysLogHandler,  Up: logging handlers — Manipuladores de logging

5.16.6.11 NTEventLogHandler
...........................

The *note NTEventLogHandler: 2eea. class, located in the *note
logging.handlers: 89. module, supports sending logging messages to a
local Windows NT, Windows 2000 or Windows XP event log.  Before you can
use it, you need Mark Hammond’s Win32 extensions for Python installed.

 -- Classe: logging.handlers.NTEventLogHandler (appname, dllname=None,
          logtype='Application')

     Returns a new instance of the *note NTEventLogHandler: 2eea. class.
     The 'appname' is used to define the application name as it appears
     in the event log.  An appropriate registry entry is created using
     this name.  The 'dllname' should give the fully qualified pathname
     of a .dll or .exe which contains message definitions to hold in the
     log (if not specified, ‘'win32service.pyd'’ is used - this is
     installed with the Win32 extensions and contains some basic
     placeholder message definitions.  Note that use of these
     placeholders will make your event logs big, as the entire message
     source is held in the log.  If you want slimmer logs, you have to
     pass in the name of your own .dll or .exe which contains the
     message definitions you want to use in the event log).  The
     'logtype' is one of ‘'Application'’, ‘'System'’ or ‘'Security'’,
     and defaults to ‘'Application'’.

      -- Método: close ()

          At this point, you can remove the application name from the
          registry as a source of event log entries.  However, if you do
          this, you will not be able to see the events as you intended
          in the Event Log Viewer - it needs to be able to access the
          registry to get the .dll name.  The current version does not
          do this.

      -- Método: emit (record)

          Determines the message ID, event category and event type, and
          then logs the message in the NT event log.

      -- Método: getEventCategory (record)

          Returns the event category for the record.  Override this if
          you want to specify your own categories.  This version returns
          0.

      -- Método: getEventType (record)

          Returns the event type for the record.  Override this if you
          want to specify your own types.  This version does a mapping
          using the handler’s typemap attribute, which is set up in
          ‘__init__()’ to a dictionary which contains mappings for
          ‘DEBUG’, ‘INFO’, ‘WARNING’, ‘ERROR’ and ‘CRITICAL’.  If you
          are using your own levels, you will either need to override
          this method or place a suitable dictionary in the handler’s
          'typemap' attribute.

      -- Método: getMessageID (record)

          Returns the message ID for the record.  If you are using your
          own messages, you could do this by having the 'msg' passed to
          the logger being an ID rather than a format string.  Then, in
          here, you could use a dictionary lookup to get the message ID.
          This version returns 1, which is the base message ID in
          ‘win32service.pyd’.


File: python.info,  Node: SMTPHandler,  Next: MemoryHandler,  Prev: NTEventLogHandler,  Up: logging handlers — Manipuladores de logging

5.16.6.12 SMTPHandler
.....................

The *note SMTPHandler: 164e. class, located in the *note
logging.handlers: 89. module, supports sending logging messages to an
email address via SMTP.

 -- Classe: logging.handlers.SMTPHandler (mailhost, fromaddr, toaddrs,
          subject, credentials=None, secure=None, timeout=1.0)

     Returns a new instance of the *note SMTPHandler: 164e. class.  The
     instance is initialized with the from and to addresses and subject
     line of the email.  The 'toaddrs' should be a list of strings.  To
     specify a non-standard SMTP port, use the (host, port) tuple format
     for the 'mailhost' argument.  If you use a string, the standard
     SMTP port is used.  If your SMTP server requires authentication,
     you can specify a (username, password) tuple for the 'credentials'
     argument.

     To specify the use of a secure protocol (TLS), pass in a tuple to
     the 'secure' argument.  This will only be used when authentication
     credentials are supplied.  The tuple should be either an empty
     tuple, or a single-value tuple with the name of a keyfile, or a
     2-value tuple with the names of the keyfile and certificate file.
     (This tuple is passed to the *note smtplib.SMTP.starttls(): 1177.
     method.)

     A timeout can be specified for communication with the SMTP server
     using the 'timeout' argument.

     Alterado na versão 3.3: Added the 'timeout' parameter.

      -- Método: emit (record)

          Formats the record and sends it to the specified addressees.

      -- Método: getSubject (record)

          If you want to specify a subject line which is
          record-dependent, override this method.


File: python.info,  Node: MemoryHandler,  Next: HTTPHandler,  Prev: SMTPHandler,  Up: logging handlers — Manipuladores de logging

5.16.6.13 MemoryHandler
.......................

The *note MemoryHandler: 2ea3. class, located in the *note
logging.handlers: 89. module, supports buffering of logging records in
memory, periodically flushing them to a 'target' handler.  Flushing
occurs whenever the buffer is full, or when an event of a certain
severity or greater is seen.

*note MemoryHandler: 2ea3. is a subclass of the more general *note
BufferingHandler: 2ef6, which is an abstract class.  This buffers
logging records in memory.  Whenever each record is added to the buffer,
a check is made by calling ‘shouldFlush()’ to see if the buffer should
be flushed.  If it should, then ‘flush()’ is expected to do the
flushing.

 -- Classe: logging.handlers.BufferingHandler (capacity)

     Initializes the handler with a buffer of the specified capacity.
     Here, 'capacity' means the number of logging records buffered.

      -- Método: emit (record)

          Append the record to the buffer.  If *note shouldFlush():
          2ef8. returns true, call *note flush(): 2ef9. to process the
          buffer.

      -- Método: flush ()

          For a *note BufferingHandler: 2ef6. instance, flushing means
          that it sets the buffer to an empty list.  This method can be
          overwritten to implement more useful flushing behavior.

      -- Método: shouldFlush (record)

          Return ‘True’ if the buffer is up to capacity.  This method
          can be overridden to implement custom flushing strategies.

 -- Classe: logging.handlers.MemoryHandler (capacity, flushLevel=ERROR,
          target=None, flushOnClose=True)

     Returns a new instance of the *note MemoryHandler: 2ea3. class.
     The instance is initialized with a buffer size of 'capacity'
     (number of records buffered).  If 'flushLevel' is not specified,
     ‘ERROR’ is used.  If no 'target' is specified, the target will need
     to be set using *note setTarget(): 2efa. before this handler does
     anything useful.  If 'flushOnClose' is specified as ‘False’, then
     the buffer is 'not' flushed when the handler is closed.  If not
     specified or specified as ‘True’, the previous behaviour of
     flushing the buffer will occur when the handler is closed.

     Alterado na versão 3.6: The 'flushOnClose' parameter was added.

      -- Método: close ()

          Calls *note flush(): 2efc, sets the target to ‘None’ and
          clears the buffer.

      -- Método: flush ()

          For a *note MemoryHandler: 2ea3. instance, flushing means just
          sending the buffered records to the target, if there is one.
          The buffer is also cleared when buffered records are sent to
          the target.  Override if you want different behavior.

      -- Método: setTarget (target)

          Sets the target handler for this handler.

      -- Método: shouldFlush (record)

          Checks for buffer full or a record at the 'flushLevel' or
          higher.


File: python.info,  Node: HTTPHandler,  Next: QueueHandler,  Prev: MemoryHandler,  Up: logging handlers — Manipuladores de logging

5.16.6.14 HTTPHandler
.....................

The *note HTTPHandler: e58. class, located in the *note
logging.handlers: 89. module, supports sending logging messages to a web
server, using either ‘GET’ or ‘POST’ semantics.

 -- Classe: logging.handlers.HTTPHandler (host, url, method='GET',
          secure=False, credentials=None, context=None)

     Returns a new instance of the *note HTTPHandler: e58. class.  The
     'host' can be of the form ‘host:port’, should you need to use a
     specific port number.  If no 'method' is specified, ‘GET’ is used.
     If 'secure' is true, a HTTPS connection will be used.  The
     'context' parameter may be set to a *note ssl.SSLContext: 294.
     instance to configure the SSL settings used for the HTTPS
     connection.  If 'credentials' is specified, it should be a 2-tuple
     consisting of userid and password, which will be placed in a HTTP
     ‘Authorization’ header using Basic authentication.  If you specify
     credentials, you should also specify secure=True so that your
     userid and password are not passed in cleartext across the wire.

     Alterado na versão 3.5: The 'context' parameter was added.

      -- Método: mapLogRecord (record)

          Provides a dictionary, based on ‘record’, which is to be
          URL-encoded and sent to the web server.  The default
          implementation just returns ‘record.__dict__’.  This method
          can be overridden if e.g.  only a subset of *note LogRecord:
          101c. is to be sent to the web server, or if more specific
          customization of what’s sent to the server is required.

      -- Método: emit (record)

          Sends the record to the web server as a URL-encoded
          dictionary.  The *note mapLogRecord(): 2f00. method is used to
          convert the record to the dictionary to be sent.

          Nota: Since preparing a record for sending it to a web server
          is not the same as a generic formatting operation, using *note
          setFormatter(): 2e53. to specify a *note Formatter: 14df. for
          a *note HTTPHandler: e58. has no effect.  Instead of calling
          *note format(): 2e5c, this handler calls *note mapLogRecord():
          2f00. and then *note urllib.parse.urlencode(): ec4. to encode
          the dictionary in a form suitable for sending to a web server.


File: python.info,  Node: QueueHandler,  Next: QueueListener,  Prev: HTTPHandler,  Up: logging handlers — Manipuladores de logging

5.16.6.15 QueueHandler
......................

Adicionado na versão 3.2.

The *note QueueHandler: 18ec. class, located in the *note
logging.handlers: 89. module, supports sending logging messages to a
queue, such as those implemented in the *note queue: b6. or *note
multiprocessing: 94. modules.

Along with the *note QueueListener: e59. class, *note QueueHandler:
18ec. can be used to let handlers do their work on a separate thread
from the one which does the logging.  This is important in web
applications and also other service applications where threads servicing
clients need to respond as quickly as possible, while any potentially
slow operations (such as sending an email via *note SMTPHandler: 164e.)
are done on a separate thread.

 -- Classe: logging.handlers.QueueHandler (queue)

     Returns a new instance of the *note QueueHandler: 18ec. class.  The
     instance is initialized with the queue to send messages to.  The
     'queue' can be any queue-like object; it’s used as-is by the *note
     enqueue(): 2f04. method, which needs to know how to send messages
     to it.  The queue is not 'required' to have the task tracking API,
     which means that you can use *note SimpleQueue: b80. instances for
     'queue'.

          Nota: If you are using *note multiprocessing: 94, you should
          avoid using *note SimpleQueue: b80. and instead use *note
          multiprocessing.Queue: 1914.

          Aviso: The *note multiprocessing: 94. module uses an internal
          logger created and accessed via *note get_logger(): 2f05.
          *note multiprocessing.Queue: 1914. will log ‘DEBUG’ level
          messages upon items being queued.  If those log messages are
          processed by a *note QueueHandler: 18ec. using the same *note
          multiprocessing.Queue: 1914. instance, it will cause a
          deadlock or infinite recursion.

      -- Método: emit (record)

          Enqueues the result of preparing the LogRecord.  Should an
          exception occur (e.g.  because a bounded queue has filled up),
          the *note handleError(): 2e5a. method is called to handle the
          error.  This can result in the record silently being dropped
          (if *note logging.raiseExceptions: 1239. is ‘False’) or a
          message printed to ‘sys.stderr’ (if *note
          logging.raiseExceptions: 1239. is ‘True’).

      -- Método: prepare (record)

          Prepares a record for queuing.  The object returned by this
          method is enqueued.

          The base implementation formats the record to merge the
          message, arguments, exception and stack information, if
          present.  It also removes unpickleable items from the record
          in-place.  Specifically, it overwrites the record’s ‘msg’ and
          ‘message’ attributes with the merged message (obtained by
          calling the handler’s *note format(): 61f. method), and sets
          the ‘args’, ‘exc_info’ and ‘exc_text’ attributes to ‘None’.

          You might want to override this method if you want to convert
          the record to a dict or JSON string, or send a modified copy
          of the record while leaving the original intact.

               Nota: The base implementation formats the message with
               arguments, sets the ‘message’ and ‘msg’ attributes to the
               formatted message and sets the ‘args’ and ‘exc_text’
               attributes to ‘None’ to allow pickling and to prevent
               further attempts at formatting.  This means that a
               handler on the *note QueueListener: e59. side won’t have
               the information to do custom formatting, e.g.  of
               exceptions.  You may wish to subclass ‘QueueHandler’ and
               override this method to e.g.  avoid setting ‘exc_text’ to
               ‘None’.  Note that the ‘message’ / ‘msg’ / ‘args’ changes
               are related to ensuring the record is pickleable, and you
               might or might not be able to avoid doing that depending
               on whether your ‘args’ are pickleable.  (Note that you
               may have to consider not only your own code but also code
               in any libraries that you use.)

      -- Método: enqueue (record)

          Enqueues the record on the queue using ‘put_nowait()’; you may
          want to override this if you want to use blocking behaviour,
          or a timeout, or a customized queue implementation.

      -- Atributo: listener

          When created via configuration using *note dictConfig(): 11ef,
          this attribute will contain a *note QueueListener: e59.
          instance for use with this handler.  Otherwise, it will be
          ‘None’.

          Adicionado na versão 3.12.


File: python.info,  Node: QueueListener,  Prev: QueueHandler,  Up: logging handlers — Manipuladores de logging

5.16.6.16 QueueListener
.......................

Adicionado na versão 3.2.

The *note QueueListener: e59. class, located in the *note
logging.handlers: 89. module, supports receiving logging messages from a
queue, such as those implemented in the *note queue: b6. or *note
multiprocessing: 94. modules.  The messages are received from a queue in
an internal thread and passed, on the same thread, to one or more
handlers for processing.  While *note QueueListener: e59. is not itself
a handler, it is documented here because it works hand-in-hand with
*note QueueHandler: 18ec.

Along with the *note QueueHandler: 18ec. class, *note QueueListener:
e59. can be used to let handlers do their work on a separate thread from
the one which does the logging.  This is important in web applications
and also other service applications where threads servicing clients need
to respond as quickly as possible, while any potentially slow operations
(such as sending an email via *note SMTPHandler: 164e.) are done on a
separate thread.

 -- Classe: logging.handlers.QueueListener (queue, *handlers,
          respect_handler_level=False)

     Returns a new instance of the *note QueueListener: e59. class.  The
     instance is initialized with the queue to send messages to and a
     list of handlers which will handle entries placed on the queue.
     The queue can be any queue-like object; it’s passed as-is to the
     *note dequeue(): 2f0a. method, which needs to know how to get
     messages from it.  The queue is not 'required' to have the task
     tracking API (though it’s used if available), which means that you
     can use *note SimpleQueue: b80. instances for 'queue'.

          Nota: If you are using *note multiprocessing: 94, you should
          avoid using *note SimpleQueue: b80. and instead use *note
          multiprocessing.Queue: 1914.

     If ‘respect_handler_level’ is ‘True’, a handler’s level is
     respected (compared with the level for the message) when deciding
     whether to pass messages to that handler; otherwise, the behaviour
     is as in previous Python versions - to always pass each message to
     each handler.

     Alterado na versão 3.5: The ‘respect_handler_level’ argument was
     added.

      -- Método: dequeue (block)

          Dequeues a record and return it, optionally blocking.

          The base implementation uses ‘get()’.  You may want to
          override this method if you want to use timeouts or work with
          custom queue implementations.

      -- Método: prepare (record)

          Prepare a record for handling.

          This implementation just returns the passed-in record.  You
          may want to override this method if you need to do any custom
          marshalling or manipulation of the record before passing it to
          the handlers.

      -- Método: handle (record)

          Handle a record.

          This just loops through the handlers offering them the record
          to handle.  The actual object passed to the handlers is that
          which is returned from *note prepare(): 2f0b.

      -- Método: start ()

          Starts the listener.

          This starts up a background thread to monitor the queue for
          LogRecords to process.

          Alterado na versão 3.13.4: Raises *note RuntimeError: 195. if
          called and the listener is already running.

      -- Método: stop ()

          Stops the listener.

          This asks the thread to terminate, and then waits for it to do
          so.  Note that if you don’t call this before your application
          exits, there may be some records still left on the queue,
          which won’t be processed.

      -- Método: enqueue_sentinel ()

          Writes a sentinel to the queue to tell the listener to quit.
          This implementation uses ‘put_nowait()’.  You may want to
          override this method if you want to use timeouts or work with
          custom queue implementations.

          Adicionado na versão 3.3.

Ver também
..........

Módulo *note logging: 87.

     Referência da API para o módulo de logging.

Módulo *note logging.config: 88.

     API de configuração para o módulo logging.


File: python.info,  Node: platform — Acesso aos dados de identificação da plataforma subjacente,  Next: errno — Símbolos padrão do sistema errno,  Prev: logging handlers — Manipuladores de logging,  Up: Serviços Genéricos do Sistema Operacional

5.16.7 ‘platform’ — Acesso aos dados de identificação da plataforma subjacente
------------------------------------------------------------------------------

'Código-fonte:' Lib/platform.py(1)

__________________________________________________________________

     Nota: Plataformas específicas listadas em ordem alfabética, com
     Linux incluído na seção Unix.

* Menu:

* Multiplataforma::
* Plataforma Java::
* Plataforma Windows::
* Plataforma macOS::
* Plataforma iOS::
* Plataformas Unix::
* Plataformas Linux::
* Plataforma Android::
* Uso na linha de comando: Uso na linha de comando<3>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/platform.py


File: python.info,  Node: Multiplataforma,  Next: Plataforma Java,  Up: platform — Acesso aos dados de identificação da plataforma subjacente

5.16.7.1 Multiplataforma
........................

 -- Função: platform.architecture (executable=sys.executable, bits='',
          linkage='')

     Consulta o executável fornecido (o padrão é o binário do
     interpretador Python) para obter várias informações de arquitetura.

     Retorna uma tupla ‘(bits, linkage)’ que contém informações sobre a
     arquitetura de bits e o formato de linkage usado para o executável.
     Ambos os valores são retornados como strings.

     Valores que não podem ser determinados são retornados como
     fornecidos pelas predefinições de parâmetros.  Se bits for
     fornecido como ‘''’, o ‘sizeof(pointer)’ (ou ‘sizeof(long)’ na
     versão Python < 1.5.2) é usado como indicador para o tamanho de
     ponteiro suportado.

     A função depende do comando ‘file’ do sistema para fazer o trabalho
     real.  Isso está disponível na maioria, se não em todas as
     plataformas Unix e algumas plataformas não Unix e somente se o
     executável apontar para o interpretador Python.  Padrões razoáveis
     são usados quando as necessidades acima não são atendidas.

          Nota: No macOS (e talvez em outras plataformas), arquivos
          executáveis podem ser arquivos universais contendo diversas
          arquiteturas.

          Para obter a “característica de 64 bits” do interpretador
          atual, é mais confiável consultar o atributo *note
          sys.maxsize: 1205.:

               is_64bits = sys.maxsize > 2**32

 -- Função: platform.machine ()

     Retorna o tipo de máquina, por exemplo, ‘'AMD64'’.  Uma string
     vazia é retornada se o valor não puder ser determinado.

     A saída depende da plataforma e pode diferir nas convenções de
     nomenclatura e uso de maiúsculas e minúsculas.

 -- Função: platform.node ()

     Retorna o nome de rede do computador (pode não ser totalmente
     qualificado!).  Uma string vazia é retornada se o valor não puder
     ser determinado.

 -- Função: platform.platform (aliased=False, terse=False)

     Retorna uma única string identificando a plataforma subjacente com
     o máximo de informações úteis possível.

     A saída é pretendida para ser 'legível por humanos' em vez de
     analisável por máquinas.  Pode parecer diferente em diferentes
     plataformas e isso é intencional.

     Se 'aliased' for true, a função usará apelidos para várias
     plataformas que relatam nomes de sistemas que diferem de seus nomes
     comuns, por exemplo, SunOS será relatado como Solaris.  A função
     *note system_alias(): 2f15. é usada para implementar isso.

     Definir 'terse' como true faz com que a função retorne apenas o
     mínimo absoluto de informações necessárias para identificar a
     plataforma.

     Alterado na versão 3.8: No macOS, a função agora usa *note
     mac_ver(): 1bac, se retornar uma string de versão não vazia, para
     obter a versão do macOS em vez da versão do darwin.

 -- Função: platform.processor ()

     Retorna o nome (real) do processador, por exemplo ‘'amdk6'’.

     Uma string vazia é retornada se o valor não puder ser determinado.
     Note que muitas plataformas não fornecem essas informações ou
     simplesmente retornam o mesmo valor que para *note machine(): 2f13.
     O NetBSD faz isso.

 -- Função: platform.python_build ()

     Retorna uma tupla ‘(buildno, builddate)’ informando o número e a
     data da construção do Python como strings.

 -- Função: platform.python_compiler ()

     Retorna uma string identificando o compilador usado para compilar
     Python.

 -- Função: platform.python_branch ()

     Retorna uma string identificando a branch SCM da implementação do
     Python.

 -- Função: platform.python_implementation ()

     Retorna uma string identificando a implementação do Python.  Os
     valores de retorno possíveis são: ‘CPython’, ‘IronPython’,
     ‘Jython’, ‘PyPy’.

 -- Função: platform.python_revision ()

     Retorna uma string que identifica a revisão do SCM da implementação
     Python.

 -- Função: platform.python_version ()

     Retorna a versão do Python como string ‘'major.minor.patchlevel'’.

     Observe que, diferentemente do ‘sys.version’ do Python, o valor
     retornado sempre incluirá o patchlevel (o padrão é 0).

 -- Função: platform.python_version_tuple ()

     Retorna a versão do Python como tupla ‘(major, minor, patchlevel)’
     de strings.

     Observe que, diferentemente do ‘sys.version’ do Python, o valor
     retornado sempre incluirá o patchlevel (o padrão é ‘'0'’).

 -- Função: platform.release ()

     Retorna a versão do sistema, por exemplo, ‘'2.2.0'’ ou ‘'NT'’.  Uma
     string vazia é retornada se o valor não puder ser determinado.

 -- Função: platform.system ()

     Retorna o nome do sistema/SO, como ‘'Linux'’, ‘'Darwin'’, ‘'Java'’,
     ‘'Windows'’.  Uma string vazia é retornada se o valor não puder ser
     determinado.

     No iOS e Android, isso retorna o nome do SO voltado para o usuário
     (por exemplo, ‘'iOS’, ‘'iPadOS'’ ou ‘'Android'’).  Para obter o
     nome do kernel (‘'Darwin'’ ou ‘'Linux'’), use *note os.uname():
     1155.

 -- Função: platform.system_alias (system, release, version)

     Retorna ‘(sistema, release, versão)’ com apelido para nomes comuns
     de marketing usados para alguns sistemas.  Ele também faz alguma
     reordenação das informações em alguns casos em que, de outra forma,
     causaria confusão.

 -- Função: platform.version ()

     Retorna a versão de lançamento do sistema, por exemplo, ‘'#3 on
     degas'’.  Uma string vazia é retornada se o valor não puder ser
     determinado.

     No iOS e Android, esta é a versão do SO voltada para o usuário.
     Para obter a versão do kernel Darwin ou Linux, use *note
     os.uname(): 1155.

 -- Função: platform.uname ()

     Interface para uname razoavelmente portátil.  Retorna um *note
     namedtuple(): 1ca. contendo seis atributos: *note system: 1fe9,
     *note node: 2f14, *note release: 2f1e, *note version: 2f1f, *note
     machine: 2f13. e *note processor: 2f16.

     *note processor: 2f16. é resolvido tardiamente, sob demanda.

     Nota: os dois primeiros nomes de atributos diferem dos nomes
     apresentados por *note os.uname(): 1155, onde são chamados
     ‘sysname’ e ‘nodename’.

     As entradas que não podem ser determinadas são definidas como ‘''’.

     Alterado na versão 3.3: O resultado mudou de uma tupla para *note
     namedtuple(): 1ca.

     Alterado na versão 3.9: *note processor: 2f16. é resolvido tarde em
     vez de imediatamente.


File: python.info,  Node: Plataforma Java,  Next: Plataforma Windows,  Prev: Multiplataforma,  Up: platform — Acesso aos dados de identificação da plataforma subjacente

5.16.7.2 Plataforma Java
........................

 -- Função: platform.java_ver (release='', vendor='', vminfo=('', '',
          ''), osinfo=('', '', ''))

     Interface de versão para Jython.

     Retorna uma tupla ‘(release, vendor, vminfo, osinfo)’ com 'vminfo'
     sendo uma tupla ‘(vm_name, vm_release, vm_vendor)’ e 'osinfo' sendo
     uma tupla ‘(os_name, os_version, os_arch)’.  Valores que não podem
     ser determinados são definidos para os padrões fornecidos como
     parâmetros (que são todos padrão para ‘''’).

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     Ele não foi testado em grande parte, tinha uma API confusa e só era
     útil para suporte ao Jython.


File: python.info,  Node: Plataforma Windows,  Next: Plataforma macOS,  Prev: Plataforma Java,  Up: platform — Acesso aos dados de identificação da plataforma subjacente

5.16.7.3 Plataforma Windows
...........................

 -- Função: platform.win32_ver (release='', version='', csd='',
          ptype='')

     Obtém informações adicionais sobre a versão do Registro do Windows
     e retorna uma tupla ‘(release, version, csd, ptype)’ referente à
     versão do SO, número da versão, nível do CSD (service pack) e tipo
     de sistema operacional (processador múltiplo/único).  Os valores
     que não podem ser determinados são definidos para os padrões
     fornecidos como parâmetros (que são todos padrão para uma string
     vazia).

     Como dica: 'ptype' é ‘'Uniprocessor Free'’ em máquinas NT de
     processador único e ‘'Multiprocessor Free'’ em máquinas de
     multiprocessador.  O ‘'Free'’ se refere à versão do sistema
     operacional que está livre de código de depuração.  Ele também pode
     declarar ‘'Checked'’, o que significa que a versão do sistema
     operacional usa código de depuração, ou seja, código que verifica
     argumentos, intervalos, etc.

 -- Função: platform.win32_edition ()

     Retorna uma string representando a edição atual do Windows, ou
     ‘None’ se o valor não puder ser determinado.  Os valores possíveis
     incluem, mas não estão limitados a ‘'Enterprise'’, ‘'IoTUAP'’,
     ‘'ServerStandard'’ e ‘'nanoserver'’.

     Adicionado na versão 3.8.

 -- Função: platform.win32_is_iot ()

     Retorna ‘True’ se a edição do Windows retornada por *note
     win32_edition(): 2f22. for reconhecida como uma edição IoT.

     Adicionado na versão 3.8.


File: python.info,  Node: Plataforma macOS,  Next: Plataforma iOS,  Prev: Plataforma Windows,  Up: platform — Acesso aos dados de identificação da plataforma subjacente

5.16.7.4 Plataforma macOS
.........................

 -- Função: platform.mac_ver (release='', versioninfo=('', '', ''),
          machine='')

     Obtém informações sobre a versão do macOS e retorna-as como tupla
     ‘(release, versioninfo, machine)’, sendo 'versioninfo' uma tupla
     ‘(version, dev_stage, non_release_version)’.

     Entradas que não podem ser determinadas são definidas como ‘''’.
     Todas as entradas de tupla são strings.


File: python.info,  Node: Plataforma iOS,  Next: Plataformas Unix,  Prev: Plataforma macOS,  Up: platform — Acesso aos dados de identificação da plataforma subjacente

5.16.7.5 Plataforma iOS
.......................

 -- Função: platform.ios_ver (system='', release='', model='',
          is_simulator=False)

     Obtém informações sobre a versão do iOS e retorna-as como *note
     namedtuple(): 1ca. com os seguintes atributos:

        * ‘system’ é o nome do sistema operacional; ‘'iOS'’ ou
          ‘'iPadOS'’.

        * ‘release’ é o número da versão do iOS como uma string (por
          exemplo, ‘'17.2'’).

        * ‘model’ é o identificador do modelo do dispositivo; será uma
          string como ‘'iPhone13,2'’ para um dispositivo físico ou
          ‘'iPhone'’ em um simulador.

        * ‘is_simulator’ é um booleano que descreve se o aplicativo está
          sendo executado em um simulador ou em um dispositivo físico.

     As entradas que não podem ser determinadas são definidas para os
     padrões fornecidos como parâmetros.


File: python.info,  Node: Plataformas Unix,  Next: Plataformas Linux,  Prev: Plataforma iOS,  Up: platform — Acesso aos dados de identificação da plataforma subjacente

5.16.7.6 Plataformas Unix
.........................

 -- Função: platform.libc_ver (executable=sys.executable, lib='',
          version='', chunksize=16384)

     Tenta determinar a versão libc contra a qual o executável do
     arquivo (padrão para o interpretador Python) está vinculado.
     Retorna uma tupla de strings ‘(lib, version)’ que tem como padrão
     os parâmetros fornecidos caso a pesquisa falhe.

     Observe que esta função tem conhecimento profundo de como
     diferentes versões da libc adicionam símbolos ao executável e
     provavelmente só pode ser usada para executáveis compilados usando
     ‘gcc’.

     O arquivo é lido e escaneado em blocos de 'chunksize' bytes.


File: python.info,  Node: Plataformas Linux,  Next: Plataforma Android,  Prev: Plataformas Unix,  Up: platform — Acesso aos dados de identificação da plataforma subjacente

5.16.7.7 Plataformas Linux
..........................

 -- Função: platform.freedesktop_os_release ()

     Obtém a identificação do sistema operacional do arquivo
     ‘os-release’ e retorna-a como um dict.  O arquivo ‘os-release’ é um
     padrão freedesktop.org(1) e está disponível na maioria das
     distribuições Linux.  Uma exceção notável é o Android e as
     distribuições baseadas em Android.

     Levanta *note OSError: 417. ou subclasse quando nem
     ‘/etc/os-release’ nem ‘/usr/lib/os-release’ podem ser lidos.

     Em caso de sucesso, a função retorna um dicionário onde chaves e
     valores são strings.  Valores têm seus caracteres especiais como
     ‘"’ e ‘$’ sem aspas.  Os campos ‘NAME’, ‘ID’ e ‘PRETTY_NAME’ são
     sempre definidos de acordo com o padrão.  Todos os outros campos
     são opcionais.  Os fornecedores podem incluir campos adicionais.

     Note que campos como ‘NAME’, ‘VERSION’ e ‘VARIANT’ são strings
     adequadas para apresentação aos usuários.  Os programas devem usar
     campos como ‘ID’, ‘ID_LIKE’, ‘VERSION_ID’ ou ‘VARIANT_ID’ para
     identificar distribuições Linux.

     Exemplo:

          def get_like_distro():
              info = platform.freedesktop_os_release()
              ids = [info["ID"]]
              if "ID_LIKE" in info:
                  # ids são separados por espaço e ordenado por precedência
                  ids.extend(info["ID_LIKE"].split())
              return ids

     Adicionado na versão 3.10.

   ---------- Footnotes ----------

   (1) https://www.freedesktop.org/software/systemd/man/os-release.html


File: python.info,  Node: Plataforma Android,  Next: Uso na linha de comando<3>,  Prev: Plataformas Linux,  Up: platform — Acesso aos dados de identificação da plataforma subjacente

5.16.7.8 Plataforma Android
...........................

 -- Função: platform.android_ver (release='', api_level=0,
          manufacturer='', model='', device='', is_emulator=False)

     Obtém informações do dispositivo Android.  Retorna um *note
     namedtuple(): 1ca. com os seguintes atributos.  Valores que não
     podem ser determinados são definidos para os padrões fornecidos
     como parâmetros.

        * ‘release’ - Versão do Android, como uma string (por exemplo,
          ‘"14"’).

        * ‘api_level’ - Nível de API do dispositivo em execução, como um
          inteiro (por exemplo, ‘34’ para Android 14).  Para obter o
          nível de API contra o qual o Python foi criado, consulte *note
          sys.getandroidapilevel(): ba2.

        * ‘manufacturer’ - Nome do fabricante(1).

        * ‘model’ - Nome do modelo(2) – normalmente o nome de marketing
          ou o número do modelo.

        * ‘device’ - Nome do dispositivo(3) – normalmente o número do
          modelo ou um codinome.

        * ‘is_emulator’ - ‘True’ se o dispositivo for um emulador;
          ‘False’ se for um dispositivo físico.

     O Google mantém uma lista de nomes de modelos e dispositivos
     conhecidos(4).

     Adicionado na versão 3.13.

   ---------- Footnotes ----------

   (1) 
https://developer.android.com/reference/android/os/Build#MANUFACTURER

   (2) https://developer.android.com/reference/android/os/Build#MODEL

   (3) https://developer.android.com/reference/android/os/Build#DEVICE

   (4) https://storage.googleapis.com/play_public/supported_devices.html


File: python.info,  Node: Uso na linha de comando<3>,  Prev: Plataforma Android,  Up: platform — Acesso aos dados de identificação da plataforma subjacente

5.16.7.9 Uso na linha de comando
................................

*note platform: aa. também pode ser invocado diretamente usando a opção
*note -m: 5e1. do interpretador:

     python -m platform [--terse] [--nonaliased] [{nonaliased,terse} ...]

As seguintes opções são aceitas:

 -- Option: --terse

     Exibe informações concisas sobre a plataforma.  Isso equivale a
     chamar *note platform.platform(): 184e. com o argumento 'terse'
     definido como ‘True’.

 -- Option: --nonaliased

     Exibe informações da plataforma sem alias de nome do sistema/SO.
     Isso equivale a chamar *note platform.platform(): 184e. com o
     argumento 'aliased' definido como ‘True’.

Você também pode passar um ou mais argumentos posicionais (‘terse’,
‘nonaliased’) para controlar explicitamente o formato de saída.  Eles se
comportam de forma semelhante às suas opções correspondentes.


File: python.info,  Node: errno — Símbolos padrão do sistema errno,  Next: ctypes — Uma biblioteca de funções externas para Python,  Prev: platform — Acesso aos dados de identificação da plataforma subjacente,  Up: Serviços Genéricos do Sistema Operacional

5.16.8 ‘errno’ — Símbolos padrão do sistema errno
-------------------------------------------------

__________________________________________________________________

Este módulo disponibiliza símbolos de sistema padrão ‘errno’.  O valor
de cada símbolo é o valor inteiro correspondente.  Os nomes e descrições
são emprestados de ‘linux/include/errno.h’, que deve ser tudo inclusivo.

 -- Dado: errno.errorcode

     Dicionário que fornece um mapeamento do valor errno para o nome da
     string no sistema subjacente.  Por exemplo,
     ‘errno.errorcode[errno.EPERM]’ mapeia para ‘'EPERM'’.

Para traduzir um código de erro numérico em uma mensagem de erro, use
*note os.strerror(): 2d04.

Da lista a seguir, símbolos que não são usados na plataforma atual não
são definidos pelo módulo.  A lista específica de símbolos definidos
está disponível como ‘errno.errorcode.keys()’.  Os símbolos disponíveis
podem incluir:

 -- Dado: errno.EPERM

     Operação não permitida.  Este erro é mapeado para a exceção *note
     PermissionError: d65.

 -- Dado: errno.ENOENT

     Arquivo ou diretório inexistente.  Este erro é mapeado para a
     exceção *note FileNotFoundError: 42b.

 -- Dado: errno.ESRCH

     Processo inexistente.  Este erro é mapeado para a exceção *note
     ProcessLookupError: 1094.

 -- Dado: errno.EINTR

     Chamada de sistema interrompida.  Este erro é mapeado para a
     exceção *note InterruptedError: db0.

 -- Dado: errno.EIO

     Erro de E/S

 -- Dado: errno.ENXIO

     Endereço ou dispositivo inexistente

 -- Dado: errno.E2BIG

     Lista de argumentos muito longa

 -- Dado: errno.ENOEXEC

     Erro no formato exec

 -- Dado: errno.EBADF

     Descritor de arquivo inválido

 -- Dado: errno.ECHILD

     Não há processos filhos.  Este erro é mapeado para a exceção *note
     ChildProcessError: 1091.

 -- Dado: errno.EAGAIN

     Tente novamente.  Este erro é mapeado para a exceção *note
     BlockingIOError: 1090.

 -- Dado: errno.ENOMEM

     Memória insuficiente

 -- Dado: errno.EACCES

     Permissão negada.  Este erro é mapeado para a exceção *note
     PermissionError: d65.

 -- Dado: errno.EFAULT

     Endereço inválido

 -- Dado: errno.ENOTBLK

     Dispositivo de bloco requerido

 -- Dado: errno.EBUSY

     Dispositivo ou recurso ocupado

 -- Dado: errno.EEXIST

     Arquivo existe.  Este erro é mapeado para a exceção *note
     FileExistsError: 1056.

 -- Dado: errno.EXDEV

     Link entre dispositivos inválido

 -- Dado: errno.ENODEV

     Dispositivo inexistente

 -- Dado: errno.ENOTDIR

     Não é um diretório.  Este erro é mapeado para a exceção *note
     NotADirectoryError: 1093.

 -- Dado: errno.EISDIR

     É um diretório.  Este erro é mapeado para a exceção *note
     IsADirectoryError: 1092.

 -- Dado: errno.EINVAL

     Argumento inválido

 -- Dado: errno.ENFILE

     Estouro de tabela de arquivos

 -- Dado: errno.EMFILE

     Muitos arquivos abertos

 -- Dado: errno.ENOTTY

     Not a typewriter

 -- Dado: errno.ETXTBSY

     Arquivo texto ocupado

 -- Dado: errno.EFBIG

     Arquivo muito grande

 -- Dado: errno.ENOSPC

     Não há espaço disponível no dispositivo

 -- Dado: errno.ESPIPE

     Procura ilegal

 -- Dado: errno.EROFS

     Sistema de arquivos de somente leitura

 -- Dado: errno.EMLINK

     Muitos links

 -- Dado: errno.EPIPE

     Pipe quebrado.  Este erro é mapeado para a exceção *note
     BrokenPipeError: 1095.

 -- Dado: errno.EDOM

     Argumento matemático fora do domínio da função

 -- Dado: errno.ERANGE

     Resultado matemático não representável

 -- Dado: errno.EDEADLK

     Ocorreria um impasse (deadlock) de recursos

 -- Dado: errno.ENAMETOOLONG

     Nome de arquivo muito longo

 -- Dado: errno.ENOLCK

     Nenhuma trava de registro disponível

 -- Dado: errno.ENOSYS

     Função não implementada

 -- Dado: errno.ENOTEMPTY

     Diretório não vazio

 -- Dado: errno.ELOOP

     Foram encontrados muitos links simbólicos

 -- Dado: errno.EWOULDBLOCK

     Operation causaria bloqueio.  Este erro é mapeado para a exceção
     *note BlockingIOError: 1090.

 -- Dado: errno.ENOMSG

     Nenhuma mensagem do tipo desejado

 -- Dado: errno.EIDRM

     Identificador removido

 -- Dado: errno.ECHRNG

     Número do canal fora do intervalo

 -- Dado: errno.EL2NSYNC

     Não sincronizado nível 2

 -- Dado: errno.EL3HLT

     Parada de sistema nível 3

 -- Dado: errno.EL3RST

     Reinicialização nível 3

 -- Dado: errno.ELNRNG

     Número de link fora da faixa

 -- Dado: errno.EUNATCH

     Driver de protocolo não anexado

 -- Dado: errno.ENOCSI

     Não há estrutura CSI disponível

 -- Dado: errno.EL2HLT

     Parada de sistema nível 2

 -- Dado: errno.EBADE

     Troca inválida

 -- Dado: errno.EBADR

     Descritor de requisição inválido

 -- Dado: errno.EXFULL

     Troca completa

 -- Dado: errno.ENOANO

     Sem anode

 -- Dado: errno.EBADRQC

     Código de requisição inválido

 -- Dado: errno.EBADSLT

     Slot inválido

 -- Dado: errno.EDEADLOCK

     Erro de impasse em travamento de arquivo

 -- Dado: errno.EBFONT

     Formato inválido do arquivo de fonte

 -- Dado: errno.ENOSTR

     Dispositivo não é um stream

 -- Dado: errno.ENODATA

     Não há dados disponíveis

 -- Dado: errno.ETIME

     Temporizador expirado

 -- Dado: errno.ENOSR

     Sem recursos de streams

 -- Dado: errno.ENONET

     A máquina não está na rede

 -- Dado: errno.ENOPKG

     Pacote não instalado

 -- Dado: errno.EREMOTE

     O objeto é remoto

 -- Dado: errno.ENOLINK

     A conexão foi rompida

 -- Dado: errno.EADV

     Erro de anúncio

 -- Dado: errno.ESRMNT

     Erro Srmount

 -- Dado: errno.ECOMM

     Erro de comunicação ao enviar

 -- Dado: errno.EPROTO

     Erro de Protocolo

 -- Dado: errno.EMULTIHOP

     Tentativa de hops múltiplos

 -- Dado: errno.EDOTDOT

     Erro específico de RFS

 -- Dado: errno.EBADMSG

     Não é uma mensagem de dados

 -- Dado: errno.EOVERFLOW

     Valor muito grande para o tipo de dados definido

 -- Dado: errno.ENOTUNIQ

     O nome não é único na rede

 -- Dado: errno.EBADFD

     Descritor de arquivo em mal estado

 -- Dado: errno.EREMCHG

     Endereço remoto mudou

 -- Dado: errno.ELIBACC

     Não é possível acessar uma biblioteca compartilhada necessária

 -- Dado: errno.ELIBBAD

     Acessando uma biblioteca compartilhado corrompida

 -- Dado: errno.ELIBSCN

     Seção .lib corrompida em a.out

 -- Dado: errno.ELIBMAX

     Tentando ligar em muitas bibliotecas compartilhadas

 -- Dado: errno.ELIBEXEC

     Não é possível executar uma biblioteca compartilhada diretamente

 -- Dado: errno.EILSEQ

     Sequência de bytes ilegal

 -- Dado: errno.ERESTART

     Chamada de sistema interrompida deve ser reiniciada

 -- Dado: errno.ESTRPIPE

     Erro de fluxos de pipe

 -- Dado: errno.EUSERS

     Muitos usuários

 -- Dado: errno.ENOTSOCK

     Operação socket em um arquivo não-socket

 -- Dado: errno.EDESTADDRREQ

     Endereço de destino necessário

 -- Dado: errno.EMSGSIZE

     Mensagem muito longa

 -- Dado: errno.EPROTOTYPE

     Tipo errado de protocolo para socket

 -- Dado: errno.ENOPROTOOPT

     Protocolo não disponível

 -- Dado: errno.EPROTONOSUPPORT

     Protocolo sem suporte

 -- Dado: errno.ESOCKTNOSUPPORT

     Tipo socket sem suporte

 -- Dado: errno.EOPNOTSUPP

     Operação sem suporte na extremidade do transporte

 -- Dado: errno.ENOTSUP

     Operação sem suporte

     Adicionado na versão 3.2.

 -- Dado: errno.EPFNOSUPPORT

     Família de protocolo sem suporte

 -- Dado: errno.EAFNOSUPPORT

     Família de endereços sem suporte pelo protocolo

 -- Dado: errno.EADDRINUSE

     Endereço já em uso

 -- Dado: errno.EADDRNOTAVAIL

     Não é possível acessar o endereço requisitado

 -- Dado: errno.ENETDOWN

     A rede não responde

 -- Dado: errno.ENETUNREACH

     A rede está fora de alcance

 -- Dado: errno.ENETRESET

     A rede desconectou-se ao reiniciar

 -- Dado: errno.ECONNABORTED

     O software causou a interrupção da conexão.  Este erro é mapeado
     para a exceção *note ConnectionAbortedError: 1096.

 -- Dado: errno.ECONNRESET

     Conexão fechada pela outra ponta.  Este erro é mapeado para a
     exceção *note ConnectionResetError: 1098.

 -- Dado: errno.ENOBUFS

     Não há espaço de buffer disponível

 -- Dado: errno.EISCONN

     A extremidade do transporte já está conectada

 -- Dado: errno.ENOTCONN

     A extremidade do transporte não está conectada

 -- Dado: errno.ESHUTDOWN

     Cannot send after transport endpoint shutdown.  This error is
     mapped to the exception *note BrokenPipeError: 1095.

 -- Dado: errno.ETOOMANYREFS

     Too many references: cannot splice

 -- Dado: errno.ETIMEDOUT

     Connection timed out.  This error is mapped to the exception *note
     TimeoutError: 838.

 -- Dado: errno.ECONNREFUSED

     Connection refused.  This error is mapped to the exception *note
     ConnectionRefusedError: 1097.

 -- Dado: errno.EHOSTDOWN

     Host is down

 -- Dado: errno.EHOSTUNREACH

     No route to host

 -- Dado: errno.EALREADY

     Operation already in progress.  This error is mapped to the
     exception *note BlockingIOError: 1090.

 -- Dado: errno.EINPROGRESS

     Operation now in progress.  This error is mapped to the exception
     *note BlockingIOError: 1090.

 -- Dado: errno.ESTALE

     Stale NFS file handle

 -- Dado: errno.EUCLEAN

     Structure needs cleaning

 -- Dado: errno.ENOTNAM

     Not a XENIX named type file

 -- Dado: errno.ENAVAIL

     No XENIX semaphores available

 -- Dado: errno.EISNAM

     É um arquivo de tipo nomeado

 -- Dado: errno.EREMOTEIO

     Erro de E/S remoto

 -- Dado: errno.EDQUOT

     Quota exceeded

 -- Dado: errno.EQFULL

     Interface output queue is full

     Adicionado na versão 3.11.

 -- Dado: errno.ENOMEDIUM

     No medium found

 -- Dado: errno.EMEDIUMTYPE

     Wrong medium type

 -- Dado: errno.ENOKEY

     Required key not available

 -- Dado: errno.EKEYEXPIRED

     Key has expired

 -- Dado: errno.EKEYREVOKED

     Key has been revoked

 -- Dado: errno.EKEYREJECTED

     Key was rejected by service

 -- Dado: errno.ERFKILL

     Operation not possible due to RF-kill

 -- Dado: errno.ELOCKUNMAPPED

     Locked lock was unmapped

 -- Dado: errno.ENOTACTIVE

     Facility is not active

 -- Dado: errno.EAUTH

     Authentication error

     Adicionado na versão 3.2.

 -- Dado: errno.EBADARCH

     Bad CPU type in executable

     Adicionado na versão 3.2.

 -- Dado: errno.EBADEXEC

     Bad executable (or shared library)

     Adicionado na versão 3.2.

 -- Dado: errno.EBADMACHO

     Malformed Mach-o file

     Adicionado na versão 3.2.

 -- Dado: errno.EDEVERR

     Device error

     Adicionado na versão 3.2.

 -- Dado: errno.EFTYPE

     Inappropriate file type or format

     Adicionado na versão 3.2.

 -- Dado: errno.ENEEDAUTH

     Need authenticator

     Adicionado na versão 3.2.

 -- Dado: errno.ENOATTR

     Attribute not found

     Adicionado na versão 3.2.

 -- Dado: errno.ENOPOLICY

     Policy not found

     Adicionado na versão 3.2.

 -- Dado: errno.EPROCLIM

     Too many processes

     Adicionado na versão 3.2.

 -- Dado: errno.EPROCUNAVAIL

     Bad procedure for program

     Adicionado na versão 3.2.

 -- Dado: errno.EPROGMISMATCH

     Program version wrong

     Adicionado na versão 3.2.

 -- Dado: errno.EPROGUNAVAIL

     RPC prog.  not avail

     Adicionado na versão 3.2.

 -- Dado: errno.EPWROFF

     Device power is off

     Adicionado na versão 3.2.

 -- Dado: errno.EBADRPC

     RPC struct is bad

     Adicionado na versão 3.2.

 -- Dado: errno.ERPCMISMATCH

     RPC version wrong

     Adicionado na versão 3.2.

 -- Dado: errno.ESHLIBVERS

     Shared library version mismatch

     Adicionado na versão 3.2.

 -- Dado: errno.ENOTCAPABLE

     Capabilities insufficient.  This error is mapped to the exception
     *note PermissionError: d65.

     *note Disponibilidade: 1ed8.: WASI, FreeBSD

     Adicionado na versão 3.11.1.

 -- Dado: errno.ECANCELED

     Operation canceled

     Adicionado na versão 3.2.

 -- Dado: errno.EOWNERDEAD

     Owner died

     Adicionado na versão 3.2.

 -- Dado: errno.ENOTRECOVERABLE

     State not recoverable

     Adicionado na versão 3.2.


File: python.info,  Node: ctypes — Uma biblioteca de funções externas para Python,  Prev: errno — Símbolos padrão do sistema errno,  Up: Serviços Genéricos do Sistema Operacional

5.16.9 ‘ctypes’ — Uma biblioteca de funções externas para Python
----------------------------------------------------------------

'Código-fonte:' Lib/ctypes(1)

__________________________________________________________________

*note ctypes: 2a. é uma biblioteca de funções externas para Python.  Ela
fornece tipos de dados compatíveis com C e permite funções de chamada em
DLLs ou bibliotecas compartilhadas.  Ela pode ser usada para agrupar
essas bibliotecas em Python puro.

* Menu:

* Tutorial ctypes::
* Referência ctypes::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/ctypes


File: python.info,  Node: Tutorial ctypes,  Next: Referência ctypes,  Up: ctypes — Uma biblioteca de funções externas para Python

5.16.9.1 Tutorial ctypes
........................

Nota: Os exemplos de código neste tutorial usam *note doctest: 3a. para
garantir que eles realmente funcionem.  Como algumas amostras de código
se comportam de maneira diferente no Linux, Windows ou macOS, elas
contêm diretrizes de doctest nos comentários.

Nota: Alguns exemplos de código fazem referência ao tipo ctypes *note
c_int: 2fb5.  Em plataformas onde ‘sizeof(long) == sizeof(int)’ é um
apelido para *note c_long: 2fb6.  Então, você não deve ficar confuso se
*note c_long: 2fb6. for impresso se você esperaria *note c_int: 2fb5. —
eles são, na verdade, o mesmo tipo.

* Menu:

* Carregando bibliotecas de links dinâmicos::
* Acessando funções de dlls carregadas::
* Chamando funções::
* Tipos de dados fundamentais::
* Chamando funções, continuação: Chamando funções continuação.
* Chamando funções variadas::
* Chamando funções com seus próprios tipos de dados personalizados::
* Especificando os tipos de argumentos necessários (protótipos de função): Especificando os tipos de argumentos necessários protótipos de função.
* Tipos de Retorno::
* Passando ponteiros (ou; passando parâmetros por referência): Passando ponteiros ou passando parâmetros por referência.
* Estruturas e uniões::
* Structure/union alignment and byte order::
* Campos de bit em estruturas e uniões::
* Vetores::
* Ponteiros::
* Conversão de Tipos::
* Tipos Incompletos::
* Funções Callbacks::
* Acessando valores exportados de dlls::
* Surpresas::
* Tipos de dados de tamanho variável::


File: python.info,  Node: Carregando bibliotecas de links dinâmicos,  Next: Acessando funções de dlls carregadas,  Up: Tutorial ctypes

5.16.9.2 Carregando bibliotecas de links dinâmicos
..................................................

*note ctypes: 2a. exporta o 'cdll' e, no Windows, os objetos 'windll' e
'oledll' para carregar bibliotecas de vínculo dinâmico.

Você carrega bibliotecas acessando-as como atributos desses objetos.
'cdll' carrega bibliotecas que exportam funções usando a convenção de
chamada padrão ‘cdecl’, enquanto bibliotecas 'windll' chamam funções
usando a convenção de chamada ‘stdcall’.  'oledll' também usa a
convenção de chamada ‘stdcall’ e assume que as funções retornam um
código de erro do Windows ‘HRESULT’.  O código de erro é usado para
levantar automaticamente uma exceção *note OSError: 417. quando a
chamada da função falha.

Alterado na versão 3.3: Erros do Windows costumavam levantar *note
WindowsError: 108d, que agora é um apelido de *note OSError: 417.

Veja alguns exemplos para Windows.  Note que ‘msvcrt’ é a biblioteca C
padrão da MS que contém a maioria das funções C padrão e usa a convenção
de chamada ‘cdecl’:

     >>> from ctypes import *
     >>> print(windll.kernel32)
     <WinDLL 'kernel32', handle ... at ...>
     >>> print(cdll.msvcrt)
     <CDLL 'msvcrt', handle ... at ...>
     >>> libc = cdll.msvcrt
     >>>

O Windows acrescenta automaticamente o sufixo de arquivo ‘.dll’ usual.

     Nota: Acessar a biblioteca padrão C por meio de ‘cdll.msvcrt’ usará
     uma versão desatualizada da biblioteca que pode ser incompatível
     com a que está sendo usada pelo Python.  Onde possível, use a
     funcionalidade nativa do Python ou então importe e use o módulo
     ‘msvcrt’.

No Linux, é necessário especificar o nome do arquivo 'incluindo' a
extensão para carregar uma biblioteca, então o acesso de atributo não
pode ser usado para carregar bibliotecas.  O método *note LoadLibrary():
2fb9. dos carregadores de dll deve ser usado, ou você deve carregar a
biblioteca criando uma instância de CDLL chamando o construtor:

     >>> cdll.LoadLibrary("libc.so.6")
     <CDLL 'libc.so.6', handle ... at ...>
     >>> libc = CDLL("libc.so.6")
     >>> libc
     <CDLL 'libc.so.6', handle ... at ...>
     >>>


File: python.info,  Node: Acessando funções de dlls carregadas,  Next: Chamando funções,  Prev: Carregando bibliotecas de links dinâmicos,  Up: Tutorial ctypes

5.16.9.3 Acessando funções de dlls carregadas
.............................................

Funções são acessadas como atributos de objetos dll:

     >>> libc.printf
     <_FuncPtr object at 0x...>
     >>> print(windll.kernel32.GetModuleHandleA)
     <_FuncPtr object at 0x...>
     >>> print(windll.kernel32.MyOwnFunction)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
       File "ctypes.py", line 239, in __getattr__
         func = _StdcallFuncPtr(name, self)
     AttributeError: function 'MyOwnFunction' not found
     >>>

Observe que DLLs de sistema do Win32, como ‘kernel32’ e ‘user32’,
frequentemente exportam versões ANSI e UNICODE de uma função.  A versão
UNICODE é exportada com um ‘W’ anexado ao nome, enquanto a versão ANSI é
exportada com um ‘A’ anexado ao nome.  A função ‘GetModuleHandle’ do
Win32, que retorna um 'identificador de módulo' para um determinado nome
de módulo, tem o seguinte protótipo em C, e uma macro é usada para expor
um deles como ‘GetModuleHandle’, dependendo se UNICODE está definido ou
não:

     /* versão ANSI */
     HMODULE GetModuleHandleA(LPCSTR lpModuleName);
     /* versão UNICODE */
     HMODULE GetModuleHandleW(LPCWSTR lpModuleName);

'windll' não tenta selecionar um deles magicamente, você deve acessar a
versão necessária especificando ‘GetModuleHandleA’ ou ‘GetModuleHandleW’
explicitamente e então chamá-lo com objetos bytes ou string,
respectivamente.

Às vezes, DLLs exportam funções com nomes que não são identificadores
Python válidos, como ‘"??2@YAPAXI@Z"’.  Nesse caso, você precisa usar
*note getattr(): bea. para recuperar a função:

     >>> getattr(cdll.msvcrt, "??2@YAPAXI@Z")
     <_FuncPtr object at 0x...>
     >>>

No Windows, algumas dlls exportam funções não por nome, mas por ordinal.
Essas funções podem ser acessadas indexando o objeto dll com o número
ordinal:

     >>> cdll.kernel32[1]
     <_FuncPtr object at 0x...>
     >>> cdll.kernel32[0]
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
       File "ctypes.py", line 310, in __getitem__
         func = _StdcallFuncPtr(name, self)
     AttributeError: function ordinal 0 not found
     >>>


File: python.info,  Node: Chamando funções,  Next: Tipos de dados fundamentais,  Prev: Acessando funções de dlls carregadas,  Up: Tutorial ctypes

5.16.9.4 Chamando funções
.........................

Você pode chamar essas funções como qualquer outro chamável do Python.
Este exemplo usa a função ‘rand()’, que não aceita argumentos e retorna
um inteiro pseudoaleatório:

     >>> print(libc.rand())
     1804289383

No Windows, você pode chamar a função ‘GetModuleHandleA()’, que retorna
um identificador de módulo win32 (passando ‘None’ como único argumento
para chamá-lo com um ponteiro ‘NULL’):

     >>> print(hex(windll.kernel32.GetModuleHandleA(None)))
     0x1d000000
     >>>

*note ValueError: 202. é gerado quando você chama uma função ‘stdcall’
com a convenção de chamada ‘cdecl’, ou vice-versa:

     >>> cdll.kernel32.GetModuleHandleA(None)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     ValueError: Procedure probably called with not enough arguments (4 bytes missing)
     >>>

     >>> windll.msvcrt.printf(b"spam")
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     ValueError: Procedure probably called with too many arguments (4 bytes in excess)
     >>>

Para descobrir a convenção de chamada correta, você precisa consultar o
arquivo de cabeçalho C ou a documentação da função que deseja chamar.

No Windows, *note ctypes: 2a. usa o tratamento de exceções estruturado
do win32 para evitar travamentos devido a falhas gerais de proteção
quando funções são chamadas com valores de argumentos inválidos:

     >>> windll.kernel32.GetModuleHandleA(32)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     OSError: exception: access violation reading 0x00000020
     >>>

No entanto, existem maneiras suficientes de travar o Python com *note
ctypes: 2a, então você deve ter cuidado de qualquer maneira.  O módulo
*note faulthandler: 58. pode ser útil na depuração de travamentos (por
exemplo, de falhas de segmentação produzidas por chamadas errôneas da
biblioteca C).

‘None’, inteiros, objetos bytes e strings (unicode) são os únicos
objetos nativos do Python que podem ser usados diretamente como
parâmetros nessas chamadas de função.  ‘None’ é passado como um ponteiro
‘NULL’ em C, objetos bytes e strings são passados como ponteiros para o
bloco de memória que contém seus dados (char* ou wchar_t*).  Inteiros em
Python são passados como o tipo padrão da plataforma em C int, e seu
valor é mascarado para se encaixar no tipo em C.

Antes de prosseguirmos com a chamada de funções com outros tipos de
parâmetros, precisamos aprender mais sobre os tipos de dados *note
ctypes: 2a.


File: python.info,  Node: Tipos de dados fundamentais,  Next: Chamando funções continuação,  Prev: Chamando funções,  Up: Tutorial ctypes

5.16.9.5 Tipos de dados fundamentais
....................................

*note ctypes: 2a. define uma série de tipos de dados primitivos
compatíveis com C:

Tipo ctypes                Tipo em C                                      Tipo em Python
                                                                          
-----------------------------------------------------------------------------------------------------------
                                                                          
*note c_bool: 2fc0.        _Bool                                          bool (1)
                                                                          
                                                                          
*note c_char: 2fc1.        char                                           objeto bytes de 1 caractere
                                                                          
                                                                          
*note c_wchar: 2fc2.       ‘wchar_t’                                      string de 1 caractere
                                                                          
                                                                          
*note c_byte: 1868.        char                                           int
                                                                          
                                                                          
*note c_ubyte: 1869.       unsigned char                                  int
                                                                          
                                                                          
*note c_short: 2fc3.       short                                          int
                                                                          
                                                                          
*note c_ushort: 2fc4.      unsigned short                                 int
                                                                          
                                                                          
*note c_int: 2fb5.         int                                            int
                                                                          
                                                                          
*note c_int8: 2fc5.        ‘int8_t’                                       int
                                                                          
                                                                          
*note c_int16: 2fc6.       ‘int16_t’                                      int
                                                                          
                                                                          
*note c_int32: 2fc7.       ‘int32_t’                                      int
                                                                          
                                                                          
*note c_int64: 2fc8.       ‘int64_t’                                      int
                                                                          
                                                                          
*note c_uint: 2fc9.        unsigned int                                   int
                                                                          
                                                                          
*note c_uint8: 2fca.       ‘uint8_t’                                      int
                                                                          
                                                                          
*note c_uint16: 2fcb.      ‘uint16_t’                                     int
                                                                          
                                                                          
*note c_uint32: 2fcc.      ‘uint32_t’                                     int
                                                                          
                                                                          
*note c_uint64: 2fcd.      ‘uint64_t’                                     int
                                                                          
                                                                          
*note c_long: 2fb6.        long                                           int
                                                                          
                                                                          
*note c_ulong: 2fce.       unsigned long                                  int
                                                                          
                                                                          
*note c_longlong: 2fcf.    __int64 ou long long                           int
                                                                          
                                                                          
*note c_ulonglong: 2fd0.   unsigned __int64 ou unsigned long long         int
                                                                          
                                                                          
*note c_size_t: 2fd1.      ‘size_t’                                       int
                                                                          
                                                                          
*note c_ssize_t: 127d.     ‘ssize_t’ ou *note Py_ssize_t: a69.            int
                                                                          
                                                                          
*note c_time_t: 18ee.      ‘time_t’                                       int
                                                                          
                                                                          
*note c_float: 2fd2.       float                                          ponto flutuante
                                                                          
                                                                          
*note c_double: 1a44.      double                                         ponto flutuante
                                                                          
                                                                          
*note c_longdouble: 1a45.  long double                                    ponto flutuante
                                                                          
                                                                          
*note c_char_p: 17d9.      char* (finalizado com NUL)                     objeto bytes ou ‘None’
                                                                          
                                                                          
*note c_wchar_p: 17da.     wchar_t* (finalizado com NUL)                  String ou ‘None’
                                                                          
                                                                          
*note c_void_p: 17db.      void*                                          int ou ‘None’
                                                                          

  1. O construtor aceita qualquer objeto com um valor verdade.

Todos esses tipos podem ser criados chamando-os com um inicializador
opcional do tipo e valor corretos:

     >>> c_int()
     c_long(0)
     >>> c_wchar_p("Olá, mundo")
     c_wchar_p(139878537078816)
     >>> c_ushort(-3)
     c_ushort(65533)
     >>>

Como esses tipos são mutáveis, seus valores também podem ser alterados
posteriormente:

     >>> i = c_int(42)
     >>> print(i)
     c_long(42)
     >>> print(i.value)
     42
     >>> i.value = -99
     >>> print(i.value)
     -99
     >>>

Atribuir um novo valor a instâncias dos tipos de ponteiro *note
c_char_p: 17d9, *note c_wchar_p: 17da. e *note c_void_p: 17db. altera o
'local de memória' para o qual eles apontam, 'não o conteúdo' do bloco
de memória (claro que não, porque objetos string do Python são
imutáveis):

     >>> s = "Olá, mundo"
     >>> c_s = c_wchar_p(s)
     >>> print(c_s)
     c_wchar_p(139878542513936)
     >>> print(c_s.value)
     Olá, mundo
     >>> c_s.value = "Opa, beleza?"
     >>> print(c_s)              # o local da memória foi alterado
     c_wchar_p(139878536944240)
     >>> print(c_s.value)
     Opa, beleza?
     >>> print(s)                # primeiro objeto está inalterado
     Olá, mundo
     >>>

No entanto, tome cuidado para não passá-los para funções que esperam
ponteiros para memória mutável.  Se precisar de blocos de memória
mutáveis, o ctypes possui uma função *note create_string_buffer(): 2fd3.
que os cria de várias maneiras.  O conteúdo do bloco de memória atual
pode ser acessado (ou alterado) com a propriedade ‘raw’; se quiser
acessá-lo como uma string terminada em NUL, use a propriedade ‘value’:

     >>> from ctypes import *
     >>> p = create_string_buffer(3)            # cria um buffer de 3 bytes, inicializado para NUL bytes
     >>> print(sizeof(p), repr(p.raw))
     3 b'\x00\x00\x00'
     >>> p = create_string_buffer(b"Opa")       # cria um buffer contendo uma string terminando com NUL
     >>> print(sizeof(p), repr(p.raw))
     4 b'Opa\x00'
     >>> print(repr(p.value))
     b'Opa'
     >>> p = create_string_buffer(b"Oi", 10)    # cria um buffer de 10 bytes
     >>> print(sizeof(p), repr(p.raw))
     10 b'Oi\x00\x00\x00\x00\x00\x00\x00\x00'
     >>> p.value = b"Oi"
     >>> print(sizeof(p), repr(p.raw))
     10 b'Oi\x00\x00\x00\x00\x00\x00\x00\x00'
     >>>

A função *note create_string_buffer(): 2fd3. substitui a antiga função
‘c_buffer()’ (que ainda está disponível como um apelido).  Para criar um
bloco de memória mutável contendo caracteres Unicode do tipo C
‘wchar_t’, use a função *note create_unicode_buffer(): 1b46.


File: python.info,  Node: Chamando funções continuação,  Next: Chamando funções variadas,  Prev: Tipos de dados fundamentais,  Up: Tutorial ctypes

5.16.9.6 Chamando funções, continuação
......................................

Observe que printf imprime no canal de saída padrão real, 'não' em *note
sys.stdout: ae6, então esses exemplos só funcionarão no prompt do
console, não de dentro do 'IDLE' ou 'PythonWin':

     >>> printf = libc.printf
     >>> printf(b"Hello, %s\n", b"World!")
     Hello, World!
     14
     >>> printf(b"Hello, %S\n", "World!")
     Hello, World!
     14
     >>> printf(b"%d bottles of beer\n", 42)
     42 bottles of beer
     19
     >>> printf(b"%f bottles of beer\n", 42.5)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     ctypes.ArgumentError: argument 2: TypeError: Don't know how to convert parameter 2
     >>>

Como mencionado anteriormente, todos os tipos do Python, exceto
inteiros, strings e objetos bytes, precisam ser encapsulados em seu tipo
correspondente de *note ctypes: 2a, para que possam ser convertidos para
o tipo de dado C necessário:

     >>> printf(b"An int %d, a double %f\n", 1234, c_double(3.14))
     An int 1234, a double 3.140000
     31
     >>>


File: python.info,  Node: Chamando funções variadas,  Next: Chamando funções com seus próprios tipos de dados personalizados,  Prev: Chamando funções continuação,  Up: Tutorial ctypes

5.16.9.7 Chamando funções variadas
..................................

Em muitas plataformas chamar funções variádicas por meio do ctypes é
exatamente o mesmo que chamar funções com um número fixo de parâmetros.
Em algumas plataformas, em particular no ARM64 para plataformas Apple, a
convenção de chamada para funções variádicas é diferente daquela usada
para funções regulares.

Nessas plataformas é necessário especificar o atributo *note argtypes:
15f6. para os argumentos de função regulares (não variádicos):

     libc.printf.argtypes = [ctypes.c_char_p]

Já que especificar o atributo não impede a portabilidade, recomenda-se
sempre especificar o *note argtypes: 15f6. para todas as funções
variádicas.


File: python.info,  Node: Chamando funções com seus próprios tipos de dados personalizados,  Next: Especificando os tipos de argumentos necessários protótipos de função,  Prev: Chamando funções variadas,  Up: Tutorial ctypes

5.16.9.8 Chamando funções com seus próprios tipos de dados personalizados
.........................................................................

Você também pode personalizar a conversão de argumentos do *note ctypes:
2a. para permitir que instâncias das suas próprias classes sejam usadas
como argumento de função.  O *note ctypes: 2a. procura um atributo
‘_as_parameter_’ e o utiliza como o argumento da função.  O atributo
deve ser um inteiro, string, bytes, uma instância de *note ctypes: 2a,
ou um objeto com um atributo ‘_as_parameter_’:

     >>> class Bottles:
     ...     def __init__(self, number):
     ...         self._as_parameter_ = number
     ...
     >>> bottles = Bottles(42)
     >>> printf(b"%d bottles of beer\n", bottles)
     42 bottles of beer
     19
     >>>

Se você não quiser armazenar os dados da instância na variável de
instância ‘_as_parameter_’, você pode definir uma *note property: 194.
que disponibilize o atributo mediante solicitação.


File: python.info,  Node: Especificando os tipos de argumentos necessários protótipos de função,  Next: Tipos de Retorno,  Prev: Chamando funções com seus próprios tipos de dados personalizados,  Up: Tutorial ctypes

5.16.9.9 Especificando os tipos de argumentos necessários (protótipos de função)
................................................................................

É possível especificar os tipos de argumentos necessários de funções
exportadas de DLLs definindo o atributo *note argtypes: 15f6.

*note argtypes: 15f6. deve ser uma sequência de tipos de dados C (a
função ‘printf()’ provavelmente não é um bom exemplo nesse caso, pois
ela aceita um número variável e diferentes tipos de parâmetros
dependendo da string de formato; por outro lado, ela é bastante útil
para experimentar esse recurso):

     >>> printf.argtypes = [c_char_p, c_char_p, c_int, c_double]
     >>> printf(b"String '%s', Int %d, Double %f\n", b"Hi", 10, 2.2)
     String 'Hi', Int 10, Double 2.200000
     37
     >>>

Especificar um formato protege contra tipos de argumentos incompatíveis
(assim como um protótipo para uma função em C), e tenta converter os
argumentos para tipos válidos:

     >>> printf(b"%d %d %d", 1, 2, 3)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     ctypes.ArgumentError: argument 2: TypeError: 'int' object cannot be interpreted as ctypes.c_char_p
     >>> printf(b"%s %d %f\n", b"X", 2, 3)
     X 2 3.000000
     13
     >>>

Se você definiu suas próprias classes que serão passadas em chamadas de
função, é necessário implementar um método de classe *note from_param():
2fdc. para que elas possam ser usadas na sequência *note argtypes: 15f6.
O método de classe *note from_param(): 2fdc. recebe o objeto Python
passado para a chamada de função; ele deve realizar um typecheck ou o
que for necessário para garantir que esse objeto seja aceitável, e então
retornar o próprio objeto, seu atributo ‘_as_parameter_’ ou qualquer
valor que você queira passar como argumento da função C nesse caso.
Novamente, o resultado deve ser um inteiro, string, bytes, uma instância
de *note ctypes: 2a. ou um objeto com um atributo ‘_as_parameter_’.


File: python.info,  Node: Tipos de Retorno,  Next: Passando ponteiros ou passando parâmetros por referência,  Prev: Especificando os tipos de argumentos necessários protótipos de função,  Up: Tutorial ctypes

5.16.9.10 Tipos de Retorno
..........................

Por padrão, as funções são presumidas como retornando o tipo C int.
Outros retornos podem ser especificados definindo o atributo *note
restype: 2fdf. do objeto função.

O protótipo C de ‘time()’ é ‘time_t time(time_t *)’.  Porque ‘time_t’
pode ser de um tipo diferente do tipo de retorno padrão int, você deve
especificar o atributo ‘restype’.

     >>> libc.time.restype = c_time_t

Os tipos de argumentos podem ser especificados usando *note argtypes:
15f6.:

     >>> libc.time.argtypes = (POINTER(c_time_t),)

Para chamar uma função com um ponteiro ‘NULL’ como primeiro argumento,
use ‘None’:

     >>> print(libc.time(None))
     1150640792

Aqui está um exemplo mais avançado, ele usa a função ‘strchr()’, que
espera um ponteiro de string e um char, e retorna um ponteiro para uma
string:

     >>> strchr = libc.strchr
     >>> strchr(b"abcdef", ord("d"))
     8059983
     >>> strchr.restype = c_char_p    # c_char_p is a pointer to a string
     >>> strchr(b"abcdef", ord("d"))
     b'def'
     >>> print(strchr(b"abcdef", ord("x")))
     None
     >>>

If you want to avoid the *note ord("x"): 2080. calls above, you can set
the *note argtypes: 15f6. attribute, and the second argument will be
converted from a single character Python bytes object into a C char:

     >>> strchr.restype = c_char_p
     >>> strchr.argtypes = [c_char_p, c_char]
     >>> strchr(b"abcdef", b"d")
     b'def'
     >>> strchr(b"abcdef", b"def")
     Traceback (most recent call last):
     ctypes.ArgumentError: argument 2: TypeError: one character bytes, bytearray or integer expected
     >>> print(strchr(b"abcdef", b"x"))
     None
     >>> strchr(b"abcdef", b"d")
     b'def'
     >>>

Você também pode usar um objeto Python chamável (uma função ou uma
classe, por exemplo) como o atributo *note restype: 2fdf, se a função
externa retornar um inteiro.  O objeto chamável será chamado com o
'inteiro' que a função C retorna, e o resultado desta chamada será usado
como o resultado da sua chamada de função.  Isso é útil para verificar
valores de retorno de erro e levantar uma exceção automaticamente:

     >>> GetModuleHandle = windll.kernel32.GetModuleHandleA
     >>> def ValidHandle(value):
     ...     if value == 0:
     ...         raise WinError()
     ...     return value
     ...
     >>>
     >>> GetModuleHandle.restype = ValidHandle
     >>> GetModuleHandle(None)
     486539264
     >>> GetModuleHandle("something silly")
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
       File "<stdin>", line 3, in ValidHandle
     OSError: [Errno 126] The specified module could not be found.
     >>>

‘WinError’ é uma função que chamará a API ‘FormatMessage()’ do Windows
para obter a representação em string de um código de erro, e 'retorna'
uma exceção.  ‘WinError’ aceita um parâmetro de código de erro opcional,
se nenhum for usado, ela chama *note GetLastError(): 2fe0. para
recuperá-lo.

Por favor, repare que um mecanismo de checagem de erro muito mais
poderoso está disponível através do atributo *note errcheck: 2fe1.;
consulte o manual de referência para mais detalhes.


File: python.info,  Node: Passando ponteiros ou passando parâmetros por referência,  Next: Estruturas e uniões,  Prev: Tipos de Retorno,  Up: Tutorial ctypes

5.16.9.11 Passando ponteiros (ou: passando parâmetros por referência)
.....................................................................

Às vezes, uma função da API C espera um 'ponteiro' para um tipo de dado
como parâmetro, provavelmente para escrever no local correspondente, ou
se os dados forem muito grandes para serem passados por valor.  Isso
também é conhecido como 'passar parâmetros por referência'.

O *note ctypes: 2a. exporta a função *note byref(): 2fe4. que é usada
para passar parâmetros por referência.  O mesmo efeito pode ser
alcançado com a função *note pointer(): 17d7, embora *note pointer():
17d7. faça muito mais trabalho, já que ela constrói um objeto ponteiro
real, então é mais rápido usar *note byref(): 2fe4. se você não precisar
do objeto ponteiro no próprio Python:

     >>> i = c_int()
     >>> f = c_float()
     >>> s = create_string_buffer(b'\000' * 32)
     >>> print(i.value, f.value, repr(s.value))
     0 0.0 b''
     >>> libc.sscanf(b"1 3.14 Hello", b"%d %f %s",
     ...             byref(i), byref(f), s)
     3
     >>> print(i.value, f.value, repr(s.value))
     1 3.1400001049 b'Hello'
     >>>


File: python.info,  Node: Estruturas e uniões,  Next: Structure/union alignment and byte order,  Prev: Passando ponteiros ou passando parâmetros por referência,  Up: Tutorial ctypes

5.16.9.12 Estruturas e uniões
.............................

Estruturas e uniões devem derivar das classes base *note Structure: 1d4.
e *note Union: 1777. que são definidas no módulo *note ctypes: 2a.  Cada
subclasse deve definir um atributo *note _fields_: 2fe7.  ‘_fields_’
deve ser uma lista de 'tuplas de 2 itens', contendo um 'nome de campo' e
um 'tipo de campo'.

O tipo do campo deve ser um tipo *note ctypes: 2a. como *note c_int:
2fb5, ou qualquer outro tipo *note ctypes: 2a. derivado: estrutura,
união, vetor, ponteiro.

Aqui está um exemplo simples de uma estrutura POINT, que contém dois
inteiros nomeados 'x' e 'y', e também mostra como inicializar uma
estrutura no construtor:

     >>> from ctypes import *
     >>> class POINT(Structure):
     ...     _fields_ = [("x", c_int),
     ...                 ("y", c_int)]
     ...
     >>> point = POINT(10, 20)
     >>> print(point.x, point.y)
     10 20
     >>> point = POINT(y=5)
     >>> print(point.x, point.y)
     0 5
     >>> POINT(1, 2, 3)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: too many initializers
     >>>

Você pode, no entanto, construir estruturas muito mais complicadas.  Uma
estrutura pode conter outras estruturas, usando uma estrutura como um
tipo de campo.

Aqui está uma estrutura RECT que contém dois POINTs nomeados 'upperleft'
e 'lowerright':

     >>> class RECT(Structure):
     ...     _fields_ = [("upperleft", POINT),
     ...                 ("lowerright", POINT)]
     ...
     >>> rc = RECT(point)
     >>> print(rc.upperleft.x, rc.upperleft.y)
     0 5
     >>> print(rc.lowerright.x, rc.lowerright.y)
     0 0
     >>>

Estruturas aninhadas também podem ser inicializadas no construtor de
várias maneiras:

     >>> r = RECT(POINT(1, 2), POINT(3, 4))
     >>> r = RECT((1, 2), (3, 4))

Field *note descriptor: 1658.s can be retrieved from the 'class', they
are useful for debugging because they can provide useful information:

     >>> print(POINT.x)
     <Field type=c_long, ofs=0, size=4>
     >>> print(POINT.y)
     <Field type=c_long, ofs=4, size=4>
     >>>
     Aviso: O *note ctypes: 2a. não permite passar uniões ou estruturas
     com campos de bits para funções por valor.  Embora isso possa
     funcionar em x86 de 32 bits, a biblioteca não garante que funcione
     em geral.  Uniões e estruturas com campos de bits devem sempre ser
     passadas para funções por ponteiro.


File: python.info,  Node: Structure/union alignment and byte order,  Next: Campos de bit em estruturas e uniões,  Prev: Estruturas e uniões,  Up: Tutorial ctypes

5.16.9.13 Structure/union alignment and byte order
..................................................

By default, Structure and Union fields are aligned in the same way the C
compiler does it.  It is possible to override this behavior by
specifying a *note _pack_: 2fea. class attribute in the subclass
definition.  This must be set to a positive integer and specifies the
maximum alignment for the fields.  This is what ‘#pragma pack(n)’ also
does in MSVC. It is also possible to set a minimum alignment for how the
subclass itself is packed in the same way ‘#pragma align(n)’ works in
MSVC. This can be achieved by specifying a *note _align_: 1d5. class
attribute in the subclass definition.

*note ctypes: 2a. usa a ordem de bytes nativa para estruturas e uniões.
Para construir estruturas com ordem de bytes não nativa, você pode usar
classes base *note BigEndianStructure: 2feb, *note
LittleEndianStructure: 2fec, *note BigEndianUnion: 1941. e *note
LittleEndianUnion: 1942.  Essas classes não podem conter campos de
ponteiros.


File: python.info,  Node: Campos de bit em estruturas e uniões,  Next: Vetores,  Prev: Structure/union alignment and byte order,  Up: Tutorial ctypes

5.16.9.14 Campos de bit em estruturas e uniões
..............................................

É possível criar estruturas e uniões contendo campos de bits.  Campos de
bits só são possíveis para campos de inteiros, a largura do bit é
especificada como o terceiro item nas tuplas *note _fields_: 2fe7.:

     >>> class Int(Structure):
     ...     _fields_ = [("first_16", c_int, 16),
     ...                 ("second_16", c_int, 16)]
     ...
     >>> print(Int.first_16)
     <Field type=c_long, ofs=0:0, bits=16>
     >>> print(Int.second_16)
     <Field type=c_long, ofs=0:16, bits=16>
     >>>


File: python.info,  Node: Vetores,  Next: Ponteiros,  Prev: Campos de bit em estruturas e uniões,  Up: Tutorial ctypes

5.16.9.15 Vetores
.................

Vetores são sequências que contêm um número fixo de instâncias do mesmo
tipo.

A maneira recomendada de criar tipos vetor é multiplicando um tipo de
dado por um inteiro positivo:

     TenPointsArrayType = POINT * 10

Aqui está um exemplo de um tipo de dado um tanto artificial, uma
estrutura contendo 4 POINTs entre outras coisas:

     >>> from ctypes import *
     >>> class POINT(Structure):
     ...     _fields_ = ("x", c_int), ("y", c_int)
     ...
     >>> class MyStruct(Structure):
     ...     _fields_ = [("a", c_int),
     ...                 ("b", c_float),
     ...                 ("point_array", POINT * 4)]
     >>>
     >>> print(len(MyStruct().point_array))
     4
     >>>

Instâncias são criadas da maneira usual, chamando a classe:

     arr = TenPointsArrayType()
     for pt in arr:
         print(pt.x, pt.y)

O código acima exibe uma série de linhas ‘0 0’, pois o conteúdo do vetor
é inicializado com zeros.

Inicializadores do tipo correto também podem ser especificados:

     >>> from ctypes import *
     >>> TenIntegers = c_int * 10
     >>> ii = TenIntegers(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
     >>> print(ii)
     <c_long_Array_10 object at 0x...>
     >>> for i in ii: print(i, end=" ")
     ...
     1 2 3 4 5 6 7 8 9 10
     >>>


File: python.info,  Node: Ponteiros,  Next: Conversão de Tipos,  Prev: Vetores,  Up: Tutorial ctypes

5.16.9.16 Ponteiros
...................

Instâncias de ponteiro são criadas chamando a função *note pointer():
17d7. em um tipo *note ctypes: 2a.:

     >>> from ctypes import *
     >>> i = c_int(42)
     >>> pi = pointer(i)
     >>>

Instâncias de ponteiros têm um atributo *note contents: 2ff3. que
retorna o objeto para qual o ponteiro aponta, o objeto ‘i’ acima:

     >>> pi.contents
     c_long(42)
     >>>

Note que o *note ctypes: 2a. não possui OOR (retorno de objeto
original), ele constrói um objeto novo e equivalente cada vez que você
recupera um atributo:

     >>> pi.contents is i
     False
     >>> pi.contents is pi.contents
     False
     >>>

Atribuir outra instância *note c_int: 2fb5. ao atributo do conteúdo do
ponteiro faria com que o ponteiro apontasse para o local de memória onde
ela está armazenada:

     >>> i = c_int(99)
     >>> pi.contents = i
     >>> pi.contents
     c_long(99)
     >>>

Instâncias de ponteiro também podem ser indexadas com inteiros:

     >>> pi[0]
     99
     >>>

Atribuir a um índice inteiro altera o valor apontado:

     >>> print(i)
     c_long(99)
     >>> pi[0] = 22
     >>> print(i)
     c_long(22)
     >>>

Também é possível usar índices diferentes de 0, mas você deve saber o
que está fazendo, assim como em C: Você pode acessar ou alterar locais
arbitrários da memória.  Geralmente, você só usa este recurso se receber
um ponteiro de uma função C, e você 'sabe' que o ponteiro na verdade
aponta para um vetor em vez de um único item.

Nos bastidores, a função *note pointer(): 17d7. faz mais do que
simplesmente criar instâncias de ponteiro, ela precisa criar 'tipos' de
ponteiro primeiro.  Isso é feito com a função *note POINTER(): 17d8, que
aceita qualquer tipo *note ctypes: 2a, e retorna um novo tipo:

     >>> PI = POINTER(c_int)
     >>> PI
     <class 'ctypes.LP_c_long'>
     >>> PI(42)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: expected c_long instead of int
     >>> PI(c_int(42))
     <ctypes.LP_c_long object at 0x...>
     >>>

Chamar o tipo ponteiro sem um argumento cria um ponteiro ‘NULL’.
Ponteiros ‘NULL’ possuem o valor booleano ‘False’:

     >>> null_ptr = POINTER(c_int)()
     >>> print(bool(null_ptr))
     False
     >>>

O *note ctypes: 2a. verifica por ‘NULL’ ao desreferenciar ponteiros (mas
desreferenciar ponteiros inválidos que não sejam ‘NULL’ travaria o
Python):

     >>> null_ptr[0]
     Traceback (most recent call last):
         ....
     ValueError: NULL pointer access
     >>>

     >>> null_ptr[0] = 1234
     Traceback (most recent call last):
         ....
     ValueError: NULL pointer access
     >>>


File: python.info,  Node: Conversão de Tipos,  Next: Tipos Incompletos,  Prev: Ponteiros,  Up: Tutorial ctypes

5.16.9.17 Conversão de Tipos
............................

Normalmente, o ctypes faz uma verificação de tipos estrita.  Isso
significa que, se você tiver ‘POINTER(c_int)’ na lista *note argtypes:
15f6. de uma função ou como o tipo de um campo membro em uma definição
de estrutura, apenas instâncias de exatamente o mesmo tipo são aceitas.
Existem algumas exceções a esta regra, onde o ctypes aceita outros
objetos.  Por exemplo, você pode passar instâncias de vetor compatíveis
em vez de tipos de ponteiro.  Assim, para ‘POINTER(c_int)’, o ctypes
aceita um vetor de c_int:

     >>> class Bar(Structure):
     ...     _fields_ = [("count", c_int), ("values", POINTER(c_int))]
     ...
     >>> bar = Bar()
     >>> bar.values = (c_int * 3)(1, 2, 3)
     >>> bar.count = 3
     >>> for i in range(bar.count):
     ...     print(bar.values[i])
     ...
     1
     2
     3
     >>>

Além disso, se um argumento de função for explicitamente declarado como
um tipo ponteiro (como ‘POINTER(c_int)’) em *note argtypes: 15f6, um
objeto do tipo apontado (‘c_int’ neste caso) pode ser passado para a
função.  O ctypes aplicará a conversão *note byref(): 2fe4. necessária
neste caso automaticamente.

Para definir um campo do tipo PONTEIRO como ‘NULL’, você pode atribuir
‘None’:

     >>> bar.values = None
     >>>

Às vezes, você tem instâncias de tipos incompatíveis.  Em C, você pode
converter um tipo em outro tipo.  O *note ctypes: 2a. fornece uma função
*note cast(): 2ff6. que pode ser usada da mesma maneira.  A estrutura
‘Bar’ definida acima aceita ponteiros ‘POINTER(c_int)’ ou vetores *note
c_int: 2fb5. para seu campo ‘values’, mas não instâncias de outros
tipos:

     >>> bar.values = (c_byte * 4)()
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: incompatible types, c_byte_Array_4 instance instead of LP_c_long instance
     >>>

Para esses casos, a função *note cast(): 2ff6. é útil.

A função *note cast(): 2ff6. pode ser usada para converter uma instância
ctypes em um ponteiro para um diferente tipo de dado ctypes.  *note
cast(): 2ff6. recebe dois parâmetros, um objeto ctypes que é ou pode ser
convertido para um ponteiro de algum tipo, e um tipo ponteiro ctypes.
Ela retorna uma instância do segundo argumento, que referencia o mesmo
bloco de memória que o primeiro argumento:

     >>> a = (c_byte * 4)()
     >>> cast(a, POINTER(c_int))
     <ctypes.LP_c_long object at ...>
     >>>

Então, *note cast(): 2ff6. pode ser usada para atribuir ao campo
‘values’ da estrutura ‘Bar’:

     >>> bar = Bar()
     >>> bar.values = cast((c_byte * 4)(), POINTER(c_int))
     >>> print(bar.values[0])
     0
     >>>


File: python.info,  Node: Tipos Incompletos,  Next: Funções Callbacks,  Prev: Conversão de Tipos,  Up: Tutorial ctypes

5.16.9.18 Tipos Incompletos
...........................

'Tipos Incompletos' são estruturas, uniões ou vetores, cujos membros
ainda não foram especificados.  Em C, eles são especificados por
declarações antecipadas, que são definidas posteriormente:

     struct cell; /* forward declaration */

     struct cell {
         char *name;
         struct cell *next;
     };

A tradução direta para código ctypes seria esta, mas não funciona:

     >>> class cell(Structure):
     ...     _fields_ = [("name", c_char_p),
     ...                 ("next", POINTER(cell))]
     ...
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
       File "<stdin>", line 2, in cell
     NameError: name 'cell' is not defined
     >>>

por que a nova ‘class cell’ não está disponível na própria declaração da
classe.  Em *note ctypes: 2a, podemos definir a classe ‘cell’ e definir
o atributo *note _fields_: 2fe7. posteriormente, após a declaração da
classe:

     >>> from ctypes import *
     >>> class cell(Structure):
     ...     pass
     ...
     >>> cell._fields_ = [("name", c_char_p),
     ...                  ("next", POINTER(cell))]
     >>>

Vamos tentar.  Criamos duas instâncias de ‘cell’, e deixamos que elas
apontem uma para a outra, e finalmente seguimos a cadeia de ponteiros
algumas vezes:

     >>> c1 = cell()
     >>> c1.name = b"foo"
     >>> c2 = cell()
     >>> c2.name = b"bar"
     >>> c1.next = pointer(c2)
     >>> c2.next = pointer(c1)
     >>> p = c1
     >>> for i in range(8):
     ...     print(p.name, end=" ")
     ...     p = p.next[0]
     ...
     foo bar foo bar foo bar foo bar
     >>>


File: python.info,  Node: Funções Callbacks,  Next: Acessando valores exportados de dlls,  Prev: Tipos Incompletos,  Up: Tutorial ctypes

5.16.9.19 Funções Callbacks
...........................

*note ctypes: 2a. permite criar ponteiros de função C chamáveis a partir
de chamáveis Python.  Estas são às vezes chamadas de 'funções de
retorno'.

Primeiro, você deve criar uma classe para função de retorno.  A classe
sabe a convenção de chamada , o tipo de retorno, e o número e tipos de
argumentos que essa função irá receber.

A função de fábrica *note CFUNCTYPE(): 2ffb. cria tipos para funções de
retorno usando a convenção de chamada ‘cdecl’.  No Windows, a função de
fábrica *note WINFUNCTYPE(): 2ffc. cria tipos para funções de retorno
usando a convenção de chamada ‘stdcall’.

Ambas estas funções de fábrica são chamadas com o tipo de resultado como
primeiro argumento, e os tipos de argumento esperados da função de
retorno como os argumentos restantes.

I will present an example here which uses the standard C library’s
‘qsort()’ function, that is used to sort items with the help of a
callback function.  ‘qsort()’ will be used to sort an array of integers:

     >>> IntArray5 = c_int * 5
     >>> ia = IntArray5(5, 1, 7, 33, 99)
     >>> qsort = libc.qsort
     >>> qsort.restype = None
     >>>

A ‘qsort()’ deve ser chamada com um ponteiro para os dados a serem
ordenados, o número de itens no vetor de dados, o tamanho de um item, e
um ponteiro para a função de comparação, a função de retorno (callback).
A função de retorno será então chamada com dois ponteiros para itens, e
ela deve retornar um inteiro negativo se o primeiro item for menor que o
segundo, um zero se eles forem iguais, e um inteiro positivo caso
contrário.

Então, nossa função de retorno (callback function) recebe ponteiros para
inteiros, e deve retornar um inteiro.  Primeiro criamos o ‘type’ para a
função de retorno:

     >>> CMPFUNC = CFUNCTYPE(c_int, POINTER(c_int), POINTER(c_int))
     >>>

Para começar, aqui está uma função de retorno (callback) simples que
mostra os valores que lhe são passados:

     >>> def py_cmp_func(a, b):
     ...     print("py_cmp_func", a[0], b[0])
     ...     return 0
     ...
     >>> cmp_func = CMPFUNC(py_cmp_func)
     >>>

O resultado:

     >>> qsort(ia, len(ia), sizeof(c_int), cmp_func)
     py_cmp_func 5 1
     py_cmp_func 33 99
     py_cmp_func 7 33
     py_cmp_func 5 7
     py_cmp_func 1 7
     >>>

Agora podemos realmente comparar os dois itens e retornar um resultado
útil:

     >>> def py_cmp_func(a, b):
     ...     print("py_cmp_func", a[0], b[0])
     ...     return a[0] - b[0]
     ...
     >>>
     >>> qsort(ia, len(ia), sizeof(c_int), CMPFUNC(py_cmp_func))
     py_cmp_func 5 1
     py_cmp_func 33 99
     py_cmp_func 7 33
     py_cmp_func 1 7
     py_cmp_func 5 7
     >>>

Como podemos verificar facilmente, nosso vetor está ordenado agora:

     >>> for i in ia: print(i, end=" ")
     ...
     1 5 7 33 99
     >>>

As fábricas de funções podem ser usadas como fábricas de decoradores,
então também podemos escrever:

     >>> @CFUNCTYPE(c_int, POINTER(c_int), POINTER(c_int))
     ... def py_cmp_func(a, b):
     ...     print("py_cmp_func", a[0], b[0])
     ...     return a[0] - b[0]
     ...
     >>> qsort(ia, len(ia), sizeof(c_int), py_cmp_func)
     py_cmp_func 5 1
     py_cmp_func 33 99
     py_cmp_func 7 33
     py_cmp_func 1 7
     py_cmp_func 5 7
     >>>

     Nota: Certifique-se de manter referências aos objetos *note
     CFUNCTYPE(): 2ffb. enquanto eles forem usados a partir do código C.
     O *note ctypes: 2a. não faz isso, e se você não o fizer, eles podem
     ser coletados pelo coletor de lixo, travando seu programa quando
     uma função de retorno é chamada.

     Além disso, note que se a função de retorno for chamada em uma
     thread criada fora do controle do Python (por exemplo, pelo código
     externo que chama a função de retorno), o ctypes cria uma nova
     thread Python “dummy” (fictícia) em cada invocação.  Este
     comportamento é correto para a maioria dos propósitos, mas
     significa que os valores armazenados com *note threading.local:
     1631. 'não' sobreviverão entre diferentes funções de retorno, mesmo
     quando essas chamadas são feitas a partir da mesma thread C.


File: python.info,  Node: Acessando valores exportados de dlls,  Next: Surpresas,  Prev: Funções Callbacks,  Up: Tutorial ctypes

5.16.9.20 Acessando valores exportados de dlls
..............................................

Algumas bibliotecas compartilhadas não exportam apenas funções, elas
também exportam variáveis.  Um exemplo na própria biblioteca Python é a
*note Py_Version: 756, o número da versão de tempo de execução do Python
codificado em um único inteiro constante.

*note ctypes: 2a. pode acessar valores como este com os métodos de
classe *note in_dll(): 2fff. do tipo.  'pythonapi' é um símbolo
predefinido que dá acesso à API C do Python:

     >>> version = ctypes.c_int.in_dll(ctypes.pythonapi, "Py_Version")
     >>> print(hex(version.value))
     0x30c00a0

Um exemplo estendido que também demonstra o uso de ponteiros acessa o
ponteiro *note PyImport_FrozenModules: 3000. exportado pelo Python.

Citando a documentação para esse valor:

     Este ponteiro é inicializado para apontar para um vetor de
     registros de *note _frozen: 775, terminado por um cujos membros são
     todos ‘NULL’ ou zero.  Quando um módulo congelado é importado, ele
     é pesquisado nesta tabela.  O código de terceiros pode fazer
     truques com isso para fornecer uma coleção criada dinamicamente de
     módulos congelados.

Então, manipular este ponteiro pode até ser útil.  Para restringir o
tamanho do exemplo, mostramos apenas como esta tabela pode ser lida com
*note ctypes: 2a.:

     >>> from ctypes import *
     >>>
     >>> class struct_frozen(Structure):
     ...     _fields_ = [("name", c_char_p),
     ...                 ("code", POINTER(c_ubyte)),
     ...                 ("size", c_int),
     ...                 ("get_code", POINTER(c_ubyte)),  # Function pointer
     ...                ]
     ...
     >>>

Nós definimos tipo de dado *note _frozen: 775, para que possamos obter o
ponteiro para a tabela:

     >>> FrozenTable = POINTER(struct_frozen)
     >>> table = FrozenTable.in_dll(pythonapi, "_PyImport_FrozenBootstrap")
     >>>

Como ‘table’ é um ‘pointer’ para o vetor de registros ‘struct_frozen’,
nós podemos iterar sobre ele, mas só temos que nos certificar de que
nosso loop termine, porque ponteiros não têm tamanho.  Cedo ou tarde,
ele provavelmente travaria com uma violação de acesso ou algo assim,
então é melhor sair do loop quando atingirmos a entrada ‘NULL’:

     >>> for item in table:
     ...     if item.name is None:
     ...         break
     ...     print(item.name.decode("ascii"), item.size)
     ...
     _frozen_importlib 31764
     _frozen_importlib_external 41499
     zipimport 12345
     >>>

O fato de que o Python padrão tem um módulo congelado e um pacote
congelado (indicado pelo membro ‘size’ negativo) não é bem conhecido, é
usado apenas para testes.  Experimente com ‘import __hello__’ por
exemplo.


File: python.info,  Node: Surpresas,  Next: Tipos de dados de tamanho variável,  Prev: Acessando valores exportados de dlls,  Up: Tutorial ctypes

5.16.9.21 Surpresas
...................

Existem algumas pontos limites no *note ctypes: 2a. onde você pode
esperar algo diferente do que realmente ocorre.

Considere o exemplo a seguir:

     >>> from ctypes import *
     >>> class POINT(Structure):
     ...     _fields_ = ("x", c_int), ("y", c_int)
     ...
     >>> class RECT(Structure):
     ...     _fields_ = ("a", POINT), ("b", POINT)
     ...
     >>> p1 = POINT(1, 2)
     >>> p2 = POINT(3, 4)
     >>> rc = RECT(p1, p2)
     >>> print(rc.a.x, rc.a.y, rc.b.x, rc.b.y)
     1 2 3 4
     >>> # now swap the two points
     >>> rc.a, rc.b = rc.b, rc.a
     >>> print(rc.a.x, rc.a.y, rc.b.x, rc.b.y)
     3 4 3 4
     >>>

Hm.  Nós com certeza esperávamos que a última instrução exibisse ‘3 4 1
2’.  O que aconteceu?  Aqui estão os passos da linha ‘rc.a, rc.b = rc.b,
rc.a’ acima:

     >>> temp0, temp1 = rc.b, rc.a
     >>> rc.a = temp0
     >>> rc.b = temp1
     >>>

Observe que ‘temp0’ e ‘temp1’ ainda são objetos que utilizam o buffer
interno do objeto ‘rc’ acima.  Portanto, executar ‘rc.a = temp0’ copia o
conteúdo do buffer de ‘temp0’ para o buffer de ‘rc’.  Isso, por sua vez,
altera o conteúdo de ‘temp1’.  Assim, a última atribuição ‘rc.b = temp1’
não produz o efeito esperado.

Tenha em mente que obter sub-objetos de estruturas, uniões e vetores não
copia o sub-objeto; em vez disso, recupera um objeto de encapsulamento
(wrapper) que acessa o buffer subjacente do objeto raiz.

Outro exemplo que pode se comportar de maneira diferente do que alguém
poderia esperar é o seguinte:

     >>> s = c_char_p()
     >>> s.value = b"abc def ghi"
     >>> s.value
     b'abc def ghi'
     >>> s.value is s.value
     False
     >>>

     Nota: Objetos instanciados a partir de *note c_char_p: 17d9. só
     podem ter seu valor definido para bytes ou inteiros.

Por que está imprimindo ‘False’?  Instâncias de ctypes são objetos que
contêm um bloco de memória, além de alguns *note descriptor: 1658.s que
acessam o conteúdo dessa memória.  Armazenar um objeto Python no bloco
de memória não armazena o próprio objeto; em vez disso, armazena-se o
seu atributo ‘contents’.  Acessar o contents novamente constrói um novo
objeto Python a cada vez!


File: python.info,  Node: Tipos de dados de tamanho variável,  Prev: Surpresas,  Up: Tutorial ctypes

5.16.9.22 Tipos de dados de tamanho variável
............................................

O *note ctypes: 2a. fornece algum suporte para vetores e estruturas de
tamanhos variável.

A função *note resize(): 3005. pode ser usada para redimensionar o
buffer de memória de um objeto ctypes existente.  A função recebe o
objeto como primeiro argumento, e o tamanho solicitado em bytes como o
segundo argumento.  O bloco de memória não pode ser tornado menor do que
o bloco de memória natural especificado pelo tipo do objeto, um *note
ValueError: 202. é levantado se isso for tentado:

     >>> short_array = (c_short * 4)()
     >>> print(sizeof(short_array))
     8
     >>> resize(short_array, 4)
     Traceback (most recent call last):
         ...
     ValueError: minimum size is 8
     >>> resize(short_array, 32)
     >>> sizeof(short_array)
     32
     >>> sizeof(type(short_array))
     8
     >>>

Isso é bom e funcional, mas como alguém acessaria os elementos contidos
neste vetor?  Já que o tipo ainda sabe apenas sobre 4 elementos, obtemos
erros ao acessar outros elementos:

     >>> short_array[:]
     [0, 0, 0, 0]
     >>> short_array[7]
     Traceback (most recent call last):
         ...
     IndexError: invalid index
     >>>

Outra maneira de usar tipos de dados de tamanho variável com o *note
ctypes: 2a. é usar a natureza dinâmica do Python, e (re)definir o tipo
de dados depois que o tamanho necessário já for conhecido, caso a caso.


File: python.info,  Node: Referência ctypes,  Prev: Tutorial ctypes,  Up: ctypes — Uma biblioteca de funções externas para Python

5.16.9.23 Referência ctypes
...........................

* Menu:

* Encontrando bibliotecas compartilhadas::
* Loading shared libraries::
* Foreign functions::
* Function prototypes::
* Funções utilitárias::
* Data types::
* Tipos de dados fundamentais: Tipos de dados fundamentais<2>.
* Tipos de dados estruturados::
* Arrays and pointers::


File: python.info,  Node: Encontrando bibliotecas compartilhadas,  Next: Loading shared libraries,  Up: Referência ctypes

5.16.9.24 Encontrando bibliotecas compartilhadas
................................................

Ao programar em uma linguagem compilada, bibliotecas compartilhadas são
acessadas ao compilar/linkar (compiling/linking) um programa, e quando o
programa é executado.

O propósito da função *note find_library(): d6c. é localizar uma
biblioteca de forma semelhante ao que o compilador ou o carregador de
tempo de execução (runtime loader) faz (em plataformas com várias
versões de uma biblioteca compartilhada, a mais recente deve ser
carregada), enquanto os carregadores de biblioteca do ctypes agem como
quando um programa é executado, e chamam o carregador de tempo de
execução diretamente.

O módulo ‘ctypes.util’ fornece uma função que pode ajudar a determinar a
biblioteca a ser carregada.

 -- Dado: ctypes.util.find_library (name)

     Try to find a library and return a pathname.  'name' is the library
     name without any prefix like 'lib', suffix like ‘.so’, ‘.dylib’ or
     version number (this is the form used for the posix linker option
     ‘-l’).  If no library can be found, returns ‘None’.

The exact functionality is system dependent.

On Linux, *note find_library(): d6c. tries to run external programs
(‘/sbin/ldconfig’, ‘gcc’, ‘objdump’ and ‘ld’) to find the library file.
It returns the filename of the library file.

Note that if the output of these programs does not correspond to the
dynamic linker used by Python, the result of this function may be
misleading.

Alterado na versão 3.6: On Linux, the value of the environment variable
‘LD_LIBRARY_PATH’ is used when searching for libraries, if a library
cannot be found by any other means.

Veja alguns exemplos:

     >>> from ctypes.util import find_library
     >>> find_library("m")
     'libm.so.6'
     >>> find_library("c")
     'libc.so.6'
     >>> find_library("bz2")
     'libbz2.so.1.0'
     >>>

On macOS and Android, *note find_library(): d6c. uses the system’s
standard naming schemes and paths to locate the library, and returns a
full pathname if successful:

     >>> from ctypes.util import find_library
     >>> find_library("c")
     '/usr/lib/libc.dylib'
     >>> find_library("m")
     '/usr/lib/libm.dylib'
     >>> find_library("bz2")
     '/usr/lib/libbz2.dylib'
     >>> find_library("AGL")
     '/System/Library/Frameworks/AGL.framework/AGL'
     >>>

On Windows, *note find_library(): d6c. searches along the system search
path, and returns the full pathname, but since there is no predefined
naming scheme a call like ‘find_library("c")’ will fail and return
‘None’.

If wrapping a shared library with *note ctypes: 2a, it 'may' be better
to determine the shared library name at development time, and hardcode
that into the wrapper module instead of using *note find_library(): d6c.
to locate the library at runtime.


File: python.info,  Node: Loading shared libraries,  Next: Foreign functions,  Prev: Encontrando bibliotecas compartilhadas,  Up: Referência ctypes

5.16.9.25 Loading shared libraries
..................................

There are several ways to load shared libraries into the Python process.
One way is to instantiate one of the following classes:

 -- Classe: ctypes.CDLL (name, mode=DEFAULT_MODE, handle=None,
          use_errno=False, use_last_error=False, winmode=None)

     Instances of this class represent loaded shared libraries.
     Functions in these libraries use the standard C calling convention,
     and are assumed to return int.

     On Windows creating a *note CDLL: 9f1. instance may fail even if
     the DLL name exists.  When a dependent DLL of the loaded DLL is not
     found, a *note OSError: 417. error is raised with the message
     '“[WinError 126] The specified module could not be found”.'  This
     error message does not contain the name of the missing DLL because
     the Windows API does not return this information making this error
     hard to diagnose.  To resolve this error and determine which DLL is
     not found, you need to find the list of dependent DLLs and
     determine which one is not found using Windows debugging and
     tracing tools.

     Alterado na versão 3.12: The 'name' parameter can now be a *note
     path-like object: 2a0.

Ver também
..........

Microsoft DUMPBIN tool(1) – A tool to find DLL dependents.

 -- Classe: ctypes.OleDLL (name, mode=DEFAULT_MODE, handle=None,
          use_errno=False, use_last_error=False, winmode=None)

     Instâncias desta classe representam bibliotecas compartilhadas
     carregadas, funções nessas bibliotecas usam a convenção de chamada
     ‘stdcall’ e é presumido que retornam o código *note HRESULT: 300c.
     específico do Windows.  Valores *note HRESULT: 300c. contêm
     informações especificando se a chamada da função falhou ou foi
     bem-sucedida, juntamente com um código de erro adicional.  Se o
     valor de retorno sinalizar uma falha, um *note OSError: 417. é
     automaticamente levantado.

     *note Disponibilidade: 1ed8.: Windows

     Alterado na versão 3.3: Costumava-se levantar *note WindowsError:
     108d, que agora é um apelido de *note OSError: 417.

     Alterado na versão 3.12: The 'name' parameter can now be a *note
     path-like object: 2a0.

 -- Classe: ctypes.WinDLL (name, mode=DEFAULT_MODE, handle=None,
          use_errno=False, use_last_error=False, winmode=None)

     Instâncias desta classe representam bibliotecas compartilhadas
     carregadas, as funções nessa biblioteca usam a convenção de chamada
     ‘stdcall’ e, por padrão, é presumido que retornam int.

     *note Disponibilidade: 1ed8.: Windows

     Alterado na versão 3.12: The 'name' parameter can now be a *note
     path-like object: 2a0.

The Python *note global interpreter lock: 148. is released before
calling any function exported by these libraries, and reacquired
afterwards.

 -- Classe: ctypes.PyDLL (name, mode=DEFAULT_MODE, handle=None)

     Instâncias desta classe se comportam como instâncias *note CDLL:
     9f1, exceto que o GIL do Python 'não' é liberado durante a chamada
     da função e, após a execução da função, o sinalizador de erro do
     Python é verificado.  Se o sinalizador de erro estiver definido,
     uma exceção Python é levantada.

     Portanto, isso só é útil para chamar funções da api C do Python
     diretamente.

     Alterado na versão 3.12: The 'name' parameter can now be a *note
     path-like object: 2a0.

Todas essas classes podem ser instanciadas chamando-as com pelo menos um
argumento, o nome do caminho da biblioteca compartilhada.  Se você tiver
um identificador existente para uma biblioteca compartilhada já
carregada, ele pode ser passado como o parâmetro nomeado ‘handle’.  Caso
contrário, a função ‘dlopen()’ ou ‘LoadLibrary()’ da plataforma
subjacente é usada para carregar a biblioteca no processo e para obter
um identificador para ela.

O parâmetro 'mode' pode ser utilizado para especificar como a biblioteca
é carregada.  Para detalhes, consulte a página de manual ‘dlopen(3)(2)’.
No Windows, 'mode' é ignorado.  Em sistemas posix, RTLD_NOW é sempre
adicionado e, não é configurável.

The 'use_errno' parameter, when set to true, enables a ctypes mechanism
that allows accessing the system *note errno: 57. error number in a safe
way.  *note ctypes: 2a. maintains a thread-local copy of the system’s
*note errno: 57. variable; if you call foreign functions created with
‘use_errno=True’ then the *note errno: 57. value before the function
call is swapped with the ctypes private copy, the same happens
immediately after the function call.

The function *note ctypes.get_errno(): 300d. returns the value of the
ctypes private copy, and the function *note ctypes.set_errno(): 300e.
changes the ctypes private copy to a new value and returns the former
value.

The 'use_last_error' parameter, when set to true, enables the same
mechanism for the Windows error code which is managed by the *note
GetLastError(): 2fe0. and ‘SetLastError()’ Windows API functions; *note
ctypes.get_last_error(): 300f. and *note ctypes.set_last_error(): 3010.
are used to request and change the ctypes private copy of the windows
error code.

The 'winmode' parameter is used on Windows to specify how the library is
loaded (since 'mode' is ignored).  It takes any value that is valid for
the Win32 API ‘LoadLibraryEx’ flags parameter.  When omitted, the
default is to use the flags that result in the most secure DLL load,
which avoids issues such as DLL hijacking.  Passing the full path to the
DLL is the safest way to ensure the correct library and dependencies are
loaded.

Alterado na versão 3.8: Added 'winmode' parameter.

 -- Dado: ctypes.RTLD_GLOBAL

     Flag to use as 'mode' parameter.  On platforms where this flag is
     not available, it is defined as the integer zero.

 -- Dado: ctypes.RTLD_LOCAL

     Flag to use as 'mode' parameter.  On platforms where this is not
     available, it is the same as 'RTLD_GLOBAL'.

 -- Dado: ctypes.DEFAULT_MODE

     The default mode which is used to load shared libraries.  On OSX
     10.3, this is 'RTLD_GLOBAL', otherwise it is the same as
     'RTLD_LOCAL'.

Instances of these classes have no public methods.  Functions exported
by the shared library can be accessed as attributes or by index.  Please
note that accessing the function through an attribute caches the result
and therefore accessing it repeatedly returns the same object each time.
On the other hand, accessing it through an index returns a new object
each time:

     >>> from ctypes import CDLL
     >>> libc = CDLL("libc.so.6")  # On Linux
     >>> libc.time == libc.time
     True
     >>> libc['time'] == libc['time']
     False

The following public attributes are available, their name starts with an
underscore to not clash with exported function names:

 -- Atributo: PyDLL._handle

     The system handle used to access the library.

 -- Atributo: PyDLL._name

     The name of the library passed in the constructor.

Shared libraries can also be loaded by using one of the prefabricated
objects, which are instances of the *note LibraryLoader: 3013. class,
either by calling the *note LoadLibrary(): 2fb9. method, or by
retrieving the library as attribute of the loader instance.

 -- Classe: ctypes.LibraryLoader (dlltype)

     Class which loads shared libraries.  'dlltype' should be one of the
     *note CDLL: 9f1, *note PyDLL: 186c, *note WinDLL: 186b, or *note
     OleDLL: 186a. types.

     ‘__getattr__()’ has special behavior: It allows loading a shared
     library by accessing it as attribute of a library loader instance.
     The result is cached, so repeated attribute accesses return the
     same library each time.

      -- Método: LoadLibrary (name)

          Load a shared library into the process and return it.  This
          method always returns a new instance of the library.

These prefabricated library loaders are available:

 -- Dado: ctypes.cdll

     Creates *note CDLL: 9f1. instances.

 -- Dado: ctypes.windll

     Creates *note WinDLL: 186b. instances.

     *note Disponibilidade: 1ed8.: Windows

 -- Dado: ctypes.oledll

     Creates *note OleDLL: 186a. instances.

     *note Disponibilidade: 1ed8.: Windows

 -- Dado: ctypes.pydll

     Creates *note PyDLL: 186c. instances.

For accessing the C Python api directly, a ready-to-use Python shared
library object is available:

 -- Dado: ctypes.pythonapi

     An instance of *note PyDLL: 186c. that exposes Python C API
     functions as attributes.  Note that all these functions are assumed
     to return C int, which is of course not always the truth, so you
     have to assign the correct ‘restype’ attribute to use these
     functions.

Carregar uma biblioteca através de qualquer um desses objetos levanta um
*note evento de auditoria: 19fa. ‘ctypes.dlopen’ com o argumento string
‘name’, o nome usado para carregar a biblioteca.

Accessing a function on a loaded library raises an auditing event
‘ctypes.dlsym’ with arguments ‘library’ (the library object) and ‘name’
(the symbol’s name as a string or integer).

In cases when only the library handle is available rather than the
object, accessing a function raises an auditing event
‘ctypes.dlsym/handle’ with arguments ‘handle’ (the raw library handle)
and ‘name’.

   ---------- Footnotes ----------

   (1) https://docs.microsoft.com/cpp/build/reference/dependents

   (2) https://manpages.debian.org/dlopen(3)


File: python.info,  Node: Foreign functions,  Next: Function prototypes,  Prev: Loading shared libraries,  Up: Referência ctypes

5.16.9.26 Foreign functions
...........................

As explained in the previous section, foreign functions can be accessed
as attributes of loaded shared libraries.  The function objects created
in this way by default accept any number of arguments, accept any ctypes
data instances as arguments, and return the default result type
specified by the library loader.

They are instances of a private local class ‘_FuncPtr’ (not exposed in
‘ctypes’) which inherits from the private *note _CFuncPtr: 3016. class:

     >>> import ctypes
     >>> lib = ctypes.CDLL(None)
     >>> issubclass(lib._FuncPtr, ctypes._CFuncPtr)
     True
     >>> lib._FuncPtr is ctypes._CFuncPtr
     False

 -- Classe: ctypes._CFuncPtr

     Base class for C callable foreign functions.

     Instances of foreign functions are also C compatible data types;
     they represent C function pointers.

     This behavior can be customized by assigning to special attributes
     of the foreign function object.

      -- Atributo: restype

          Assign a ctypes type to specify the result type of the foreign
          function.  Use ‘None’ for void, a function not returning
          anything.

          It is possible to assign a callable Python object that is not
          a ctypes type, in this case the function is assumed to return
          a C int, and the callable will be called with this integer,
          allowing further processing or error checking.  Using this is
          deprecated, for more flexible post processing or error
          checking use a ctypes data type as ‘restype’ and assign a
          callable to the *note errcheck: 2fe1. attribute.

      -- Atributo: argtypes

          Assign a tuple of ctypes types to specify the argument types
          that the function accepts.  Functions using the ‘stdcall’
          calling convention can only be called with the same number of
          arguments as the length of this tuple; functions using the C
          calling convention accept additional, unspecified arguments as
          well.

          When a foreign function is called, each actual argument is
          passed to the *note from_param(): 2fdc. class method of the
          items in the *note argtypes: 15f6. tuple, this method allows
          adapting the actual argument to an object that the foreign
          function accepts.  For example, a *note c_char_p: 17d9. item
          in the *note argtypes: 15f6. tuple will convert a string
          passed as argument into a bytes object using ctypes conversion
          rules.

          New: It is now possible to put items in argtypes which are not
          ctypes types, but each item must have a *note from_param():
          2fdc. method which returns a value usable as argument
          (integer, string, ctypes instance).  This allows defining
          adapters that can adapt custom objects as function parameters.

      -- Atributo: errcheck

          Assign a Python function or another callable to this
          attribute.  The callable will be called with three or more
          arguments:

           -- Função: callable (result, func, arguments)

               'result' is what the foreign function returns, as
               specified by the ‘restype’ attribute.

               'func' is the foreign function object itself, this allows
               reusing the same callable object to check or post process
               the results of several functions.

               'arguments' is a tuple containing the parameters
               originally passed to the function call, this allows
               specializing the behavior on the arguments used.

          The object that this function returns will be returned from
          the foreign function call, but it can also check the result
          value and raise an exception if the foreign function call
          failed.

 -- Exceção: ctypes.ArgumentError

     This exception is raised when a foreign function call cannot
     convert one of the passed arguments.

On Windows, when a foreign function call raises a system exception (for
example, due to an access violation), it will be captured and replaced
with a suitable Python exception.  Further, an auditing event
‘ctypes.set_exception’ with argument ‘code’ will be raised, allowing an
audit hook to replace the exception with its own.

Some ways to invoke foreign function calls may raise an auditing event
‘ctypes.call_function’ with arguments ‘function pointer’ and
‘arguments’.


File: python.info,  Node: Function prototypes,  Next: Funções utilitárias,  Prev: Foreign functions,  Up: Referência ctypes

5.16.9.27 Function prototypes
.............................

Foreign functions can also be created by instantiating function
prototypes.  Function prototypes are similar to function prototypes in
C; they describe a function (return type, argument types, calling
convention) without defining an implementation.  The factory functions
must be called with the desired result type and the argument types of
the function, and can be used as decorator factories, and as such, be
applied to functions through the ‘@wrapper’ syntax.  See *note Funções
Callbacks: 2ffa. for examples.

 -- Função: ctypes.CFUNCTYPE (restype, *argtypes, use_errno=False,
          use_last_error=False)

     The returned function prototype creates functions that use the
     standard C calling convention.  The function will release the GIL
     during the call.  If 'use_errno' is set to true, the ctypes private
     copy of the system *note errno: 57. variable is exchanged with the
     real *note errno: 57. value before and after the call;
     'use_last_error' does the same for the Windows error code.

 -- Função: ctypes.WINFUNCTYPE (restype, *argtypes, use_errno=False,
          use_last_error=False)

     The returned function prototype creates functions that use the
     ‘stdcall’ calling convention.  The function will release the GIL
     during the call.  'use_errno' and 'use_last_error' have the same
     meaning as above.

     *note Disponibilidade: 1ed8.: Windows

 -- Função: ctypes.PYFUNCTYPE (restype, *argtypes)

     The returned function prototype creates functions that use the
     Python calling convention.  The function will 'not' release the GIL
     during the call.

Function prototypes created by these factory functions can be
instantiated in different ways, depending on the type and number of the
parameters in the call:

 -- Função: prototype (address)

     Returns a foreign function at the specified address which must be
     an integer.

 -- Função: prototype (callable)

     Create a C callable function (a callback function) from a Python
     'callable'.

 -- Função: prototype (func_spec[, paramflags])

     Returns a foreign function exported by a shared library.
     'func_spec' must be a 2-tuple ‘(name_or_ordinal, library)’.  The
     first item is the name of the exported function as string, or the
     ordinal of the exported function as small integer.  The second item
     is the shared library instance.

 -- Função: prototype (vtbl_index, name[, paramflags[, iid]])

     Returns a foreign function that will call a COM method.
     'vtbl_index' is the index into the virtual function table, a small
     non-negative integer.  'name' is name of the COM method.  'iid' is
     an optional pointer to the interface identifier which is used in
     extended error reporting.

     COM methods use a special calling convention: They require a
     pointer to the COM interface as first argument, in addition to
     those parameters that are specified in the ‘argtypes’ tuple.

The optional 'paramflags' parameter creates foreign function wrappers
with much more functionality than the features described above.

'paramflags' must be a tuple of the same length as *note argtypes: 15f6.

Each item in this tuple contains further information about a parameter,
it must be a tuple containing one, two, or three items.

The first item is an integer containing a combination of direction flags
for the parameter:

     1

          Specifies an input parameter to the function.

     2

          Output parameter.  The foreign function fills in a value.

     4

          Input parameter which defaults to the integer zero.

The optional second item is the parameter name as string.  If this is
specified, the foreign function can be called with named parameters.

The optional third item is the default value for this parameter.

The following example demonstrates how to wrap the Windows ‘MessageBoxW’
function so that it supports default parameters and named arguments.
The C declaration from the windows header file is this:

     WINUSERAPI int WINAPI
     MessageBoxW(
         HWND hWnd,
         LPCWSTR lpText,
         LPCWSTR lpCaption,
         UINT uType);

Here is the wrapping with *note ctypes: 2a.:

     >>> from ctypes import c_int, WINFUNCTYPE, windll
     >>> from ctypes.wintypes import HWND, LPCWSTR, UINT
     >>> prototype = WINFUNCTYPE(c_int, HWND, LPCWSTR, LPCWSTR, UINT)
     >>> paramflags = (1, "hwnd", 0), (1, "text", "Hi"), (1, "caption", "Hello from ctypes"), (1, "flags", 0)
     >>> MessageBox = prototype(("MessageBoxW", windll.user32), paramflags)

The ‘MessageBox’ foreign function can now be called in these ways:

     >>> MessageBox()
     >>> MessageBox(text="Spam, spam, spam")
     >>> MessageBox(flags=2, text="foo bar")

A second example demonstrates output parameters.  The win32
‘GetWindowRect’ function retrieves the dimensions of a specified window
by copying them into ‘RECT’ structure that the caller has to supply.
Here is the C declaration:

     WINUSERAPI BOOL WINAPI
     GetWindowRect(
          HWND hWnd,
          LPRECT lpRect);

Here is the wrapping with *note ctypes: 2a.:

     >>> from ctypes import POINTER, WINFUNCTYPE, windll, WinError
     >>> from ctypes.wintypes import BOOL, HWND, RECT
     >>> prototype = WINFUNCTYPE(BOOL, HWND, POINTER(RECT))
     >>> paramflags = (1, "hwnd"), (2, "lprect")
     >>> GetWindowRect = prototype(("GetWindowRect", windll.user32), paramflags)
     >>>

Functions with output parameters will automatically return the output
parameter value if there is a single one, or a tuple containing the
output parameter values when there are more than one, so the
GetWindowRect function now returns a RECT instance, when called.

Output parameters can be combined with the *note errcheck: 2fe1.
protocol to do further output processing and error checking.  The win32
‘GetWindowRect’ api function returns a ‘BOOL’ to signal success or
failure, so this function could do the error checking, and raises an
exception when the api call failed:

     >>> def errcheck(result, func, args):
     ...     if not result:
     ...         raise WinError()
     ...     return args
     ...
     >>> GetWindowRect.errcheck = errcheck
     >>>

If the *note errcheck: 2fe1. function returns the argument tuple it
receives unchanged, *note ctypes: 2a. continues the normal processing it
does on the output parameters.  If you want to return a tuple of window
coordinates instead of a ‘RECT’ instance, you can retrieve the fields in
the function and return them instead, the normal processing will no
longer take place:

     >>> def errcheck(result, func, args):
     ...     if not result:
     ...         raise WinError()
     ...     rc = args[1]
     ...     return rc.left, rc.top, rc.bottom, rc.right
     ...
     >>> GetWindowRect.errcheck = errcheck
     >>>


File: python.info,  Node: Funções utilitárias,  Next: Data types,  Prev: Function prototypes,  Up: Referência ctypes

5.16.9.28 Funções utilitárias
.............................

 -- Função: ctypes.addressof (obj)

     Returns the address of the memory buffer as integer.  'obj' must be
     an instance of a ctypes type.

     Levanta um *note evento de auditoria: 19fa. ‘ctypes.addressof’ com
     o argumento ‘obj’.

 -- Função: ctypes.alignment (obj_or_type)

     Returns the alignment requirements of a ctypes type.  'obj_or_type'
     must be a ctypes type or instance.

 -- Função: ctypes.byref (obj[, offset])

     Returns a light-weight pointer to 'obj', which must be an instance
     of a ctypes type.  'offset' defaults to zero, and must be an
     integer that will be added to the internal pointer value.

     ‘byref(obj, offset)’ corresponds to this C code:

          (((char *)&obj) + offset)

     The returned object can only be used as a foreign function call
     parameter.  It behaves similar to ‘pointer(obj)’, but the
     construction is a lot faster.

 -- Função: ctypes.cast (obj, type)

     This function is similar to the cast operator in C. It returns a
     new instance of 'type' which points to the same memory block as
     'obj'.  'type' must be a pointer type, and 'obj' must be an object
     that can be interpreted as a pointer.

 -- Função: ctypes.create_string_buffer (init, size=None)

 -- Função: ctypes.create_string_buffer (size)

     This function creates a mutable character buffer.  The returned
     object is a ctypes array of *note c_char: 2fc1.

     If 'size' is given (and not ‘None’), it must be an *note int: 257.
     It specifies the size of the returned array.

     If the 'init' argument is given, it must be *note bytes: 1c2.  It
     is used to initialize the array items.  Bytes not initialized this
     way are set to zero (NUL).

     If 'size' is not given (or if it is ‘None’), the buffer is made one
     element larger than 'init', effectively adding a NUL terminator.

     If both arguments are given, 'size' must not be less than
     ‘len(init)’.

          Aviso: If 'size' is equal to ‘len(init)’, a NUL terminator is
          not added.  Do not treat such a buffer as a C string.

     Por exemplo:

          >>> bytes(create_string_buffer(2))
          b'\x00\x00'
          >>> bytes(create_string_buffer(b'ab'))
          b'ab\x00'
          >>> bytes(create_string_buffer(b'ab', 2))
          b'ab'
          >>> bytes(create_string_buffer(b'ab', 4))
          b'ab\x00\x00'
          >>> bytes(create_string_buffer(b'abcdef', 2))
          Traceback (most recent call last):
             ...
          ValueError: byte string too long

     Levanta um *note evento de auditoria: 19fa.
     ‘ctypes.create_string_buffer’ com os argumentos ‘init’, ‘size’.

 -- Função: ctypes.create_unicode_buffer (init, size=None)

 -- Função: ctypes.create_unicode_buffer (size)

     This function creates a mutable unicode character buffer.  The
     returned object is a ctypes array of *note c_wchar: 2fc2.

     The function takes the same arguments as *note
     create_string_buffer(): 2fd3. except 'init' must be a string and
     'size' counts *note c_wchar: 2fc2.

     Levanta um *note evento de auditoria: 19fa.
     ‘ctypes.create_unicode_buffer’ com os argumentos ‘init’, ‘size’.

 -- Função: ctypes.DllCanUnloadNow ()

     This function is a hook which allows implementing in-process COM
     servers with ctypes.  It is called from the DllCanUnloadNow
     function that the _ctypes extension dll exports.

     *note Disponibilidade: 1ed8.: Windows

 -- Função: ctypes.DllGetClassObject ()

     This function is a hook which allows implementing in-process COM
     servers with ctypes.  It is called from the DllGetClassObject
     function that the ‘_ctypes’ extension dll exports.

     *note Disponibilidade: 1ed8.: Windows

 -- Função: ctypes.util.find_library (name)

     Try to find a library and return a pathname.  'name' is the library
     name without any prefix like ‘lib’, suffix like ‘.so’, ‘.dylib’ or
     version number (this is the form used for the posix linker option
     ‘-l’).  If no library can be found, returns ‘None’.

     The exact functionality is system dependent.

     See *note Encontrando bibliotecas compartilhadas: 3008. for
     complete documentation.

 -- Função: ctypes.util.find_msvcrt ()

     Returns the filename of the VC runtime library used by Python, and
     by the extension modules.  If the name of the library cannot be
     determined, ‘None’ is returned.

     If you need to free memory, for example, allocated by an extension
     module with a call to the ‘free(void *)’, it is important that you
     use the function in the same library that allocated the memory.

     *note Disponibilidade: 1ed8.: Windows

 -- Função: ctypes.FormatError ([code])

     Returns a textual description of the error code 'code'.  If no
     error code is specified, the last error code is used by calling the
     Windows api function GetLastError.

     *note Disponibilidade: 1ed8.: Windows

 -- Função: ctypes.GetLastError ()

     Returns the last error code set by Windows in the calling thread.
     This function calls the Windows ‘GetLastError()’ function directly,
     it does not return the ctypes-private copy of the error code.

     *note Disponibilidade: 1ed8.: Windows

 -- Função: ctypes.get_errno ()

     Returns the current value of the ctypes-private copy of the system
     *note errno: 57. variable in the calling thread.

     Levanta um *note evento de auditoria: 19fa. ‘ctypes.get_errno’ sem
     argumentos.

 -- Função: ctypes.get_last_error ()

     Returns the current value of the ctypes-private copy of the system
     ‘LastError’ variable in the calling thread.

     *note Disponibilidade: 1ed8.: Windows

     Levanta um *note evento de auditoria: 19fa. ‘ctypes.get_last_error’
     sem argumentos.

 -- Função: ctypes.memmove (dst, src, count)

     Same as the standard C memmove library function: copies 'count'
     bytes from 'src' to 'dst'.  'dst' and 'src' must be integers or
     ctypes instances that can be converted to pointers.

 -- Função: ctypes.memset (dst, c, count)

     Same as the standard C memset library function: fills the memory
     block at address 'dst' with 'count' bytes of value 'c'.  'dst' must
     be an integer specifying an address, or a ctypes instance.

 -- Função: ctypes.POINTER (type, /)

     Create and return a new ctypes pointer type.  Pointer types are
     cached and reused internally, so calling this function repeatedly
     is cheap.  'type' must be a ctypes type.

 -- Função: ctypes.pointer (obj, /)

     Create a new pointer instance, pointing to 'obj'.  The returned
     object is of the type ‘POINTER(type(obj))’.

     Note: If you just want to pass a pointer to an object to a foreign
     function call, you should use ‘byref(obj)’ which is much faster.

 -- Função: ctypes.resize (obj, size)

     This function resizes the internal memory buffer of 'obj', which
     must be an instance of a ctypes type.  It is not possible to make
     the buffer smaller than the native size of the objects type, as
     given by ‘sizeof(type(obj))’, but it is possible to enlarge the
     buffer.

 -- Função: ctypes.set_errno (value)

     Set the current value of the ctypes-private copy of the system
     *note errno: 57. variable in the calling thread to 'value' and
     return the previous value.

     Levanta um *note evento de auditoria: 19fa. ‘ctypes.set_errno’ com
     o argumento ‘errno’.

 -- Função: ctypes.set_last_error (value)

     Sets the current value of the ctypes-private copy of the system
     ‘LastError’ variable in the calling thread to 'value' and return
     the previous value.

     *note Disponibilidade: 1ed8.: Windows

     Levanta um *note evento de auditoria: 19fa. ‘ctypes.set_last_error’
     com o argumento ‘error’.

 -- Função: ctypes.sizeof (obj_or_type)

     Returns the size in bytes of a ctypes type or instance memory
     buffer.  Does the same as the C ‘sizeof’ operator.

 -- Função: ctypes.string_at (ptr, size=-1)

     Return the byte string at 'void *ptr'.  If 'size' is specified, it
     is used as size, otherwise the string is assumed to be
     zero-terminated.

     Levanta um *note evento de auditoria: 19fa. ‘ctypes.string_at’ com
     os argumentos ‘ptr’, ‘size’.

 -- Função: ctypes.WinError (code=None, descr=None)

     This function is probably the worst-named thing in ctypes.  It
     creates an instance of *note OSError: 417.  If 'code' is not
     specified, ‘GetLastError’ is called to determine the error code.
     If 'descr' is not specified, *note FormatError(): 3022. is called
     to get a textual description of the error.

     *note Disponibilidade: 1ed8.: Windows

     Alterado na versão 3.3: An instance of *note WindowsError: 108d.
     used to be created, which is now an alias of *note OSError: 417.

 -- Função: ctypes.wstring_at (ptr, size=-1)

     Return the wide-character string at 'void *ptr'.  If 'size' is
     specified, it is used as the number of characters of the string,
     otherwise the string is assumed to be zero-terminated.

     Levanta um *note evento de auditoria: 19fa. ‘ctypes.wstring_at’ com
     os argumentos ‘ptr’, ‘size’.


File: python.info,  Node: Data types,  Next: Tipos de dados fundamentais<2>,  Prev: Funções utilitárias,  Up: Referência ctypes

5.16.9.29 Data types
....................

 -- Classe: ctypes._CData

     This non-public class is the common base class of all ctypes data
     types.  Among other things, all ctypes type instances contain a
     memory block that hold C compatible data; the address of the memory
     block is returned by the *note addressof(): 301d. helper function.
     Another instance variable is exposed as *note _objects: 302c.; this
     contains other Python objects that need to be kept alive in case
     the memory block contains pointers.

     Common methods of ctypes data types, these are all class methods
     (to be exact, they are methods of the *note metaclass: 2112.):

      -- Método: from_buffer (source[, offset])

          This method returns a ctypes instance that shares the buffer
          of the 'source' object.  The 'source' object must support the
          writeable buffer interface.  The optional 'offset' parameter
          specifies an offset into the source buffer in bytes; the
          default is zero.  If the source buffer is not large enough a
          *note ValueError: 202. is raised.

          Levanta um *note evento de auditoria: 19fa.
          ‘ctypes.cdata/buffer’ com os argumentos ‘pointer’, ‘size’,
          ‘offset’.

      -- Método: from_buffer_copy (source[, offset])

          This method creates a ctypes instance, copying the buffer from
          the 'source' object buffer which must be readable.  The
          optional 'offset' parameter specifies an offset into the
          source buffer in bytes; the default is zero.  If the source
          buffer is not large enough a *note ValueError: 202. is raised.

          Levanta um *note evento de auditoria: 19fa.
          ‘ctypes.cdata/buffer’ com os argumentos ‘pointer’, ‘size’,
          ‘offset’.

      -- Método: from_address (address)

          This method returns a ctypes type instance using the memory
          specified by 'address' which must be an integer.

          Este método, e outros que indiretamente chamam este método,
          levantam um *note evento de auditoria: 19fa. ‘ctypes.cdata’
          com o argumento ‘address’.

      -- Método: from_param (obj)

          This method adapts 'obj' to a ctypes type.  It is called with
          the actual object used in a foreign function call when the
          type is present in the foreign function’s *note argtypes:
          15f6. tuple; it must return an object that can be used as a
          function call parameter.

          All ctypes data types have a default implementation of this
          classmethod that normally returns 'obj' if that is an instance
          of the type.  Some types accept other objects as well.

      -- Método: in_dll (library, name)

          This method returns a ctypes type instance exported by a
          shared library.  'name' is the name of the symbol that exports
          the data, 'library' is the loaded shared library.

     Common instance variables of ctypes data types:

      -- Atributo: _b_base_

          Sometimes ctypes data instances do not own the memory block
          they contain, instead they share part of the memory block of a
          base object.  The *note _b_base_: 3030. read-only member is
          the root ctypes object that owns the memory block.

      -- Atributo: _b_needsfree_

          This read-only variable is true when the ctypes data instance
          has allocated the memory block itself, false otherwise.

      -- Atributo: _objects

          This member is either ‘None’ or a dictionary containing Python
          objects that need to be kept alive so that the memory block
          contents is kept valid.  This object is only exposed for
          debugging; never modify the contents of this dictionary.


File: python.info,  Node: Tipos de dados fundamentais<2>,  Next: Tipos de dados estruturados,  Prev: Data types,  Up: Referência ctypes

5.16.9.30 Tipos de dados fundamentais
.....................................

 -- Classe: ctypes._SimpleCData

     This non-public class is the base class of all fundamental ctypes
     data types.  It is mentioned here because it contains the common
     attributes of the fundamental ctypes data types.  *note
     _SimpleCData: 3034. is a subclass of *note _CData: 302b, so it
     inherits their methods and attributes.  ctypes data types that are
     not and do not contain pointers can now be pickled.

     Instances have a single attribute:

      -- Atributo: value

          This attribute contains the actual value of the instance.  For
          integer and pointer types, it is an integer, for character
          types, it is a single character bytes object or string, for
          character pointer types it is a Python bytes object or string.

          When the ‘value’ attribute is retrieved from a ctypes
          instance, usually a new object is returned each time.  *note
          ctypes: 2a. does 'not' implement original object return,
          always a new object is constructed.  The same is true for all
          other ctypes object instances.

Fundamental data types, when returned as foreign function call results,
or, for example, by retrieving structure field members or array items,
are transparently converted to native Python types.  In other words, if
a foreign function has a *note restype: 2fdf. of *note c_char_p: 17d9,
you will always receive a Python bytes object, 'not' a *note c_char_p:
17d9. instance.

Subclasses of fundamental data types do 'not' inherit this behavior.
So, if a foreign functions ‘restype’ is a subclass of *note c_void_p:
17db, you will receive an instance of this subclass from the function
call.  Of course, you can get the value of the pointer by accessing the
‘value’ attribute.

These are the fundamental ctypes data types:

 -- Classe: ctypes.c_byte

     Represents the C signed char datatype, and interprets the value as
     small integer.  The constructor accepts an optional integer
     initializer; no overflow checking is done.

 -- Classe: ctypes.c_char

     Represents the C char datatype, and interprets the value as a
     single character.  The constructor accepts an optional string
     initializer, the length of the string must be exactly one
     character.

 -- Classe: ctypes.c_char_p

     Represents the C char* datatype when it points to a zero-terminated
     string.  For a general character pointer that may also point to
     binary data, ‘POINTER(c_char)’ must be used.  The constructor
     accepts an integer address, or a bytes object.

 -- Classe: ctypes.c_double

     Represents the C double datatype.  The constructor accepts an
     optional float initializer.

 -- Classe: ctypes.c_longdouble

     Represents the C long double datatype.  The constructor accepts an
     optional float initializer.  On platforms where ‘sizeof(long
     double) == sizeof(double)’ it is an alias to *note c_double: 1a44.

 -- Classe: ctypes.c_float

     Represents the C float datatype.  The constructor accepts an
     optional float initializer.

 -- Classe: ctypes.c_int

     Represents the C signed int datatype.  The constructor accepts an
     optional integer initializer; no overflow checking is done.  On
     platforms where ‘sizeof(int) == sizeof(long)’ it is an alias to
     *note c_long: 2fb6.

 -- Classe: ctypes.c_int8

     Represents the C 8-bit signed int datatype.  It is an alias for
     *note c_byte: 1868.

 -- Classe: ctypes.c_int16

     Represents the C 16-bit signed int datatype.  Usually an alias for
     *note c_short: 2fc3.

 -- Classe: ctypes.c_int32

     Represents the C 32-bit signed int datatype.  Usually an alias for
     *note c_int: 2fb5.

 -- Classe: ctypes.c_int64

     Represents the C 64-bit signed int datatype.  Usually an alias for
     *note c_longlong: 2fcf.

 -- Classe: ctypes.c_long

     Represents the C signed long datatype.  The constructor accepts an
     optional integer initializer; no overflow checking is done.

 -- Classe: ctypes.c_longlong

     Represents the C signed long long datatype.  The constructor
     accepts an optional integer initializer; no overflow checking is
     done.

 -- Classe: ctypes.c_short

     Represents the C signed short datatype.  The constructor accepts an
     optional integer initializer; no overflow checking is done.

 -- Classe: ctypes.c_size_t

     Represents the C ‘size_t’ datatype.

 -- Classe: ctypes.c_ssize_t

     Represents the C ‘ssize_t’ datatype.

     Adicionado na versão 3.2.

 -- Classe: ctypes.c_time_t

     Represents the C ‘time_t’ datatype.

     Adicionado na versão 3.12.

 -- Classe: ctypes.c_ubyte

     Represents the C unsigned char datatype, it interprets the value as
     small integer.  The constructor accepts an optional integer
     initializer; no overflow checking is done.

 -- Classe: ctypes.c_uint

     Represents the C unsigned int datatype.  The constructor accepts an
     optional integer initializer; no overflow checking is done.  On
     platforms where ‘sizeof(int) == sizeof(long)’ it is an alias for
     *note c_ulong: 2fce.

 -- Classe: ctypes.c_uint8

     Represents the C 8-bit unsigned int datatype.  It is an alias for
     *note c_ubyte: 1869.

 -- Classe: ctypes.c_uint16

     Represents the C 16-bit unsigned int datatype.  Usually an alias
     for *note c_ushort: 2fc4.

 -- Classe: ctypes.c_uint32

     Represents the C 32-bit unsigned int datatype.  Usually an alias
     for *note c_uint: 2fc9.

 -- Classe: ctypes.c_uint64

     Represents the C 64-bit unsigned int datatype.  Usually an alias
     for *note c_ulonglong: 2fd0.

 -- Classe: ctypes.c_ulong

     Represents the C unsigned long datatype.  The constructor accepts
     an optional integer initializer; no overflow checking is done.

 -- Classe: ctypes.c_ulonglong

     Represents the C unsigned long long datatype.  The constructor
     accepts an optional integer initializer; no overflow checking is
     done.

 -- Classe: ctypes.c_ushort

     Represents the C unsigned short datatype.  The constructor accepts
     an optional integer initializer; no overflow checking is done.

 -- Classe: ctypes.c_void_p

     Represents the C void* type.  The value is represented as integer.
     The constructor accepts an optional integer initializer.

 -- Classe: ctypes.c_wchar

     Represents the C ‘wchar_t’ datatype, and interprets the value as a
     single character unicode string.  The constructor accepts an
     optional string initializer, the length of the string must be
     exactly one character.

 -- Classe: ctypes.c_wchar_p

     Represents the C wchar_t* datatype, which must be a pointer to a
     zero-terminated wide character string.  The constructor accepts an
     integer address, or a string.

 -- Classe: ctypes.c_bool

     Represent the C bool datatype (more accurately, _Bool from C99).
     Its value can be ‘True’ or ‘False’, and the constructor accepts any
     object that has a truth value.

 -- Classe: ctypes.HRESULT

     Represents a ‘HRESULT’ value, which contains success or error
     information for a function or method call.

     *note Disponibilidade: 1ed8.: Windows

 -- Classe: ctypes.py_object

     Represents the C *note PyObject: 339.* datatype.  Calling this
     without an argument creates a ‘NULL’ *note PyObject: 339.* pointer.

The ‘ctypes.wintypes’ module provides quite some other Windows specific
data types, for example ‘HWND’, ‘WPARAM’, or ‘DWORD’.  Some useful
structures like ‘MSG’ or ‘RECT’ are also defined.


File: python.info,  Node: Tipos de dados estruturados,  Next: Arrays and pointers,  Prev: Tipos de dados fundamentais<2>,  Up: Referência ctypes

5.16.9.31 Tipos de dados estruturados
.....................................

 -- Classe: ctypes.Union (*args, **kw)

     Classe base abstrata para uniões em ordem de bytes nativa.

 -- Classe: ctypes.BigEndianUnion (*args, **kw)

     Abstract base class for unions in 'big endian' byte order.

     Adicionado na versão 3.11.

 -- Classe: ctypes.LittleEndianUnion (*args, **kw)

     Abstract base class for unions in 'little endian' byte order.

     Adicionado na versão 3.11.

 -- Classe: ctypes.BigEndianStructure (*args, **kw)

     Abstract base class for structures in 'big endian' byte order.

 -- Classe: ctypes.LittleEndianStructure (*args, **kw)

     Abstract base class for structures in 'little endian' byte order.

Structures and unions with non-native byte order cannot contain pointer
type fields, or any other data types containing pointer type fields.

 -- Classe: ctypes.Structure (*args, **kw)

     Abstract base class for structures in 'native' byte order.

     Concrete structure and union types must be created by subclassing
     one of these types, and at least define a *note _fields_: 2fe7.
     class variable.  *note ctypes: 2a. will create *note descriptor:
     1658.s which allow reading and writing the fields by direct
     attribute accesses.  These are the

      -- Atributo: _fields_

          A sequence defining the structure fields.  The items must be
          2-tuples or 3-tuples.  The first item is the name of the
          field, the second item specifies the type of the field; it can
          be any ctypes data type.

          For integer type fields like *note c_int: 2fb5, a third
          optional item can be given.  It must be a small positive
          integer defining the bit width of the field.

          Field names must be unique within one structure or union.
          This is not checked, only one field can be accessed when names
          are repeated.

          It is possible to define the *note _fields_: 2fe7. class
          variable 'after' the class statement that defines the
          Structure subclass, this allows creating data types that
          directly or indirectly reference themselves:

               class List(Structure):
                   pass
               List._fields_ = [("pnext", POINTER(List)),
                                ...
                               ]

          The *note _fields_: 2fe7. class variable must, however, be
          defined before the type is first used (an instance is created,
          *note sizeof(): 3025. is called on it, and so on).  Later
          assignments to the *note _fields_: 2fe7. class variable will
          raise an AttributeError.

          It is possible to define sub-subclasses of structure types,
          they inherit the fields of the base class plus the *note
          _fields_: 2fe7. defined in the sub-subclass, if any.

      -- Atributo: _pack_

          An optional small integer that allows overriding the alignment
          of structure fields in the instance.  *note _pack_: 2fea. must
          already be defined when *note _fields_: 2fe7. is assigned,
          otherwise it will have no effect.  Setting this attribute to 0
          is the same as not setting it at all.

      -- Atributo: _align_

          An optional small integer that allows overriding the alignment
          of the structure when being packed or unpacked to/from memory.
          Setting this attribute to 0 is the same as not setting it at
          all.

          Adicionado na versão 3.13.

      -- Atributo: _anonymous_

          An optional sequence that lists the names of unnamed
          (anonymous) fields.  *note _anonymous_: 3038. must be already
          defined when *note _fields_: 2fe7. is assigned, otherwise it
          will have no effect.

          The fields listed in this variable must be structure or union
          type fields.  *note ctypes: 2a. will create descriptors in the
          structure type that allows accessing the nested fields
          directly, without the need to create the structure or union
          field.

          Here is an example type (Windows):

               class _U(Union):
                   _fields_ = [("lptdesc", POINTER(TYPEDESC)),
                               ("lpadesc", POINTER(ARRAYDESC)),
                               ("hreftype", HREFTYPE)]

               class TYPEDESC(Structure):
                   _anonymous_ = ("u",)
                   _fields_ = [("u", _U),
                               ("vt", VARTYPE)]

          The ‘TYPEDESC’ structure describes a COM data type, the ‘vt’
          field specifies which one of the union fields is valid.  Since
          the ‘u’ field is defined as anonymous field, it is now
          possible to access the members directly off the TYPEDESC
          instance.  ‘td.lptdesc’ and ‘td.u.lptdesc’ are equivalent, but
          the former is faster since it does not need to create a
          temporary union instance:

               td = TYPEDESC()
               td.vt = VT_PTR
               td.lptdesc = POINTER(some_type)
               td.u.lptdesc = POINTER(some_type)

     It is possible to define sub-subclasses of structures, they inherit
     the fields of the base class.  If the subclass definition has a
     separate *note _fields_: 2fe7. variable, the fields specified in
     this are appended to the fields of the base class.

     Structure and union constructors accept both positional and keyword
     arguments.  Positional arguments are used to initialize member
     fields in the same order as they are appear in *note _fields_:
     2fe7.  Keyword arguments in the constructor are interpreted as
     attribute assignments, so they will initialize *note _fields_:
     2fe7. with the same name, or create new attributes for names not
     present in *note _fields_: 2fe7.


File: python.info,  Node: Arrays and pointers,  Prev: Tipos de dados estruturados,  Up: Referência ctypes

5.16.9.32 Arrays and pointers
.............................

 -- Classe: ctypes.Array (*args)

     Abstract base class for arrays.

     The recommended way to create concrete array types is by
     multiplying any *note ctypes: 2a. data type with a non-negative
     integer.  Alternatively, you can subclass this type and define
     *note _length_: 303b. and *note _type_: 303c. class variables.
     Array elements can be read and written using standard subscript and
     slice accesses; for slice reads, the resulting object is 'not'
     itself an *note Array: 1ba2.

      -- Atributo: _length_

          A positive integer specifying the number of elements in the
          array.  Out-of-range subscripts result in an *note IndexError:
          157e.  Will be returned by *note len(): 62e.

      -- Atributo: _type_

          Specifies the type of each element in the array.

     Array subclass constructors accept positional arguments, used to
     initialize the elements in order.

 -- Função: ctypes.ARRAY (type, length)

     Create an array.  Equivalent to ‘type * length’, where 'type' is a
     *note ctypes: 2a. data type and 'length' an integer.

     This function is *note soft deprecated: 209. in favor of
     multiplication.  There are no plans to remove it.

 -- Classe: ctypes._Pointer

     Private, abstract base class for pointers.

     Concrete pointer types are created by calling *note POINTER():
     17d8. with the type that will be pointed to; this is done
     automatically by *note pointer(): 17d7.

     If a pointer points to an array, its elements can be read and
     written using standard subscript and slice accesses.  Pointer
     objects have no size, so *note len(): 62e. will raise *note
     TypeError: 2c3.  Negative subscripts will read from the memory
     'before' the pointer (as in C), and out-of-range subscripts will
     probably crash with an access violation (if you’re lucky).

      -- Atributo: _type_

          Specifies the type pointed to.

      -- Atributo: contents

          Returns the object to which to pointer points.  Assigning to
          this attribute changes the pointer to point to the assigned
          object.


File: python.info,  Node: Bibliotecas de interface de linha de comando,  Next: Execução Concorrente,  Prev: Serviços Genéricos do Sistema Operacional,  Up: A Biblioteca Padrão do Python

5.17 Bibliotecas de interface de linha de comando
=================================================

Os módulos descritos neste capítulo ajudam a implementar as interfaces
de linha de comando e de terminal para aplicações.

Veja aqui uma visão geral:

* Menu:

* argparse — Analisador sintático para opções de linha de comando, argumentos e subcomandos: argparse — Analisador sintático para opções de linha de comando argumentos e subcomandos.
* optparse — Analisador sintático para opções de linha de comando::
* getpass — Entrada de senha portátil::
* fileinput — Itera sobre linhas de múltiplos fluxos de entrada::
* curses — Gerenciador de terminal para visualizadores de células de caracteres.: curses — Gerenciador de terminal para visualizadores de células de caracteres.
* curses.textpad — Text input widget for curses programs: curses textpad — Text input widget for curses programs.
* curses.ascii — Utilitários para caracteres ASCII: curses ascii — Utilitários para caracteres ASCII.
* curses.panel — Uma extensão de pilha de painéis para o curses: curses panel — Uma extensão de pilha de painéis para o curses.
* cmd — Suporte para interpretadores de comando orientado a linhas::


File: python.info,  Node: argparse — Analisador sintático para opções de linha de comando argumentos e subcomandos,  Next: optparse — Analisador sintático para opções de linha de comando,  Up: Bibliotecas de interface de linha de comando

5.17.1 ‘argparse’ — Analisador sintático para opções de linha de comando, argumentos e subcomandos
--------------------------------------------------------------------------------------------------

Adicionado na versão 3.2.

'Código-fonte:' Lib/argparse.py(1)

     Nota: Embora o *note argparse: 6. seja o módulo de biblioteca
     padrão recomendado para implementar aplicações básicas de linha de
     comando, autores com requisitos mais rigorosos sobre como
     exatamente suas aplicações de linha de comando se comportam podem
     descobrir que ele não fornece o nível de controle necessário.
     Consulte *note Escolhendo uma biblioteca de análise de linha de
     comando: 3044. para alternativas a serem consideradas quando
     ‘argparse’ não suporta comportamentos que a aplicação requer (como
     desabilitar completamente o suporte para opções intercaladas e
     argumentos posicionais, ou aceitar valores de parâmetros de opção
     que começam com ‘-’ mesmo quando correspondem a outra opção
     definida).

__________________________________________________________________

Tutorial
........

Esta página contém informações da API de Referência.  Para uma
introdução mais prática para o parser de linha de comando Python, acesse
o *note tutorial do argparse: 3045.

O módulo ‘argparse’ torna fácil a escrita de interfaces de linha de
comando amigáveis.  O programa define quais argumentos são necessários e
‘argparse’ descobrirá como analisá-lo e interpretá-los a partir do *note
sys.argv: 12a6.  O módulo ‘argparse’ também gera automaticamente o texto
ajuda e mensagens de uso.  O módulo também vai emitir erros quando o
usuário prover argumentos inválidos para o programa.

O suporte do módulo ‘argparse’ para interfaces de linha de comando é
construído em torno de uma instância de *note argparse.ArgumentParser:
539.  É um contêiner para especificações de argumentos e possui opções
que se aplicam ao analisador sintático como um todo:

     parser = argparse.ArgumentParser(
                         prog='NomePrograma',
                         description='O que o programa faz',
                         epilog='Texto na parte inferior da memsagem de ajuda')

O método *note ArgumentParser.add_argument(): 19e. anexa especificações
de argumentos individuais ao analisador.  Ele oferece suporte a
argumentos posicionais, opções que aceitam valores e sinalizadores de
ligar/desligar:

     parser.add_argument('filename')           # argumento posicional
     parser.add_argument('-c', '--count')      # a opção recebe um valor
     parser.add_argument('-v', '--verbose',
                         action='store_true')  # sinalizador de ligar/desligar

O método *note ArgumentParser.parse_args(): 3046. executa o analisador e
coloca os dados extraídos em um objeto *note argparse.Namespace: 3047.:

     args = parser.parse_args()
     print(args.filename, args.count, args.verbose)

     Nota: Se você estiver procurando um guia sobre como atualizar um
     código *note optparse: a0. para ‘argparse’, veja *note Atualizando
     código optparse: 11ed.

* Menu:

* Objetos ArgumentParser::
* O método add_argument(): O método add_argument.
* O método parse_args(): O método parse_args.
* Outros utilitários::
* Exceções: Exceções<9>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/argparse.py


File: python.info,  Node: Objetos ArgumentParser,  Next: O método add_argument,  Up: argparse — Analisador sintático para opções de linha de comando argumentos e subcomandos

5.17.1.1 Objetos ArgumentParser
...............................

 -- Classe: argparse.ArgumentParser (prog=None, usage=None,
          description=None, epilog=None, parents=[],
          formatter_class=argparse.HelpFormatter, prefix_chars='-',
          fromfile_prefix_chars=None, argument_default=None,
          conflict_handler='error', add_help=True, allow_abbrev=True,
          exit_on_error=True)

     Cria um novo objeto *note ArgumentParser: 539.  Todos os parâmetros
     devem ser passados como argumentos nomeados.  Cada parâmetro tem
     sua própria descrição mais detalhada abaixo, mas em resumo eles
     são:

        * *note prog: 3049. - O nome do programa (padrão:
          ‘os.path.basename(sys.argv[0])’)

        * *note usage: 304a. - A string que descreve o uso do programa
          (padrão: gerado a partir de argumentos adicionados ao
          analisador sintático)

        * *note description: 304b. - Texto para exibir antes da ajuda
          dos argumentos (por padrão, nenhum texto)

        * *note epilog: 304c. - Texto para exibir após da ajuda dos
          argumentos (por padrão, nenhum texto)

        * *note parents: 304d. - Uma lista de objetos *note
          ArgumentParser: 539. cujos argumentos também devem ser
          incluídos

        * *note formatter_class: 304e. - Uma classe para personalizar a
          saída de ajuda

        * *note prefix_chars: 304f. - O conjunto de caracteres que
          prefixam argumentos opcionais (padrão: “-“)

        * *note fromfile_prefix_chars: 3050. - O conjunto de caracteres
          que prefixam os arquivos dos quais os argumentos adicionais
          devem ser lidos (padrão: ‘None’)

        * *note argument_default: 3051. - O valor padrão global para
          argumentos (padrão: ‘None’)

        * *note conflict_handler: 3052. - A estratégia para resolver
          opcionais conflitantes (geralmente desnecessário)

        * *note add_help: 3053. - Adiciona uma opção ‘-h/--help’ para o
          analisador sintático (padrão: ‘True’)

        * *note allow_abbrev: de8. - Permite que opções longas sejam
          abreviadas se a abreviação não for ambígua.  (padrão: ‘True’)

        * *note exit_on_error: 3054. - Determina se ‘ArgumentParser’ sai
          ou não com informações de erro quando ocorre um erro.
          (padrão: ‘True’)

     Alterado na versão 3.5: O parâmetro 'allow_abbrev' foi adicionado.

     Alterado na versão 3.8: Em versões anteriores, 'allow_abbrev'
     também desabilitava o agrupamento de sinalizadores curtos, como
     ‘-vv’ para significar ‘-v -v’.

     Alterado na versão 3.9: O parâmetro 'exit_on_error' foi adicionado.

As seções a seguir descrevem como cada um deles é usado.

* Menu:

* prog::
* usage::
* description::
* epilog::
* parents::
* formatter_class::
* prefix_chars::
* fromfile_prefix_chars::
* argument_default::
* allow_abbrev::
* conflict_handler::
* add_help::
* exit_on_error::


File: python.info,  Node: prog,  Next: usage,  Up: Objetos ArgumentParser

5.17.1.2 prog
.............

Por padrão, *note ArgumentParser: 539. calcula o nome do programa a ser
exibido nas mensagens de ajuda dependendo da maneira como o
interpretador Python foi executado:

   * O *note nome base: 2985. de ‘sys.argv[0]’ se um arquivo foi passado
     como argumento.

   * O nome do interpretador Python seguido por ‘sys.argv[0]’ se um
     diretório ou um arquivo zip foi passado como argumento.

   * O nome do interpretador Python seguido por ‘-m’ seguido pelo nome
     do módulo ou pacote se a opção *note -m: 5e1. foi usada.

Este padrão é quase sempre desejável porque fará com que as mensagens de
ajuda correspondam à string que foi usada para invocar o programa na
linha de comando.  No entanto, para alterar esse comportamento padrão,
outro valor pode ser fornecido usando o argumento ‘prog=’ para *note
ArgumentParser: 539.:

     >>> parser = argparse.ArgumentParser(prog='meuprograma')
     >>> parser.print_help()
     usage: meuprograma [-h]

     options:
      -h, --help  show this help message and exit

Observe que o nome do programa, seja determinado a partir de
‘sys.argv[0]’ ou do argumento ‘prog=’, está disponível para mensagens de
ajuda usando o especificador de formato ‘%(prog)s’.

     >>> parser = argparse.ArgumentParser(prog='meuprograma')>>> parser.add_argument('--foo', help='foo do programa %(prog)s')>>> parser.print_help()usage: meuprograma [-h] [--foo FOO]options: -h, --help  show this help message and exit --foo FOO   foo do programa meuprograma


File: python.info,  Node: usage,  Next: description,  Prev: prog,  Up: Objetos ArgumentParser

5.17.1.3 usage
..............

Por padrão, *note ArgumentParser: 539. calcula a mensagem de uso a
partir dos argumentos que contém.  A mensagem padrão pode ser
substituída pelo argumento nomeado ‘usage=’:

     >>> parser = argparse.ArgumentParser(prog='PROG', usage='%(prog)s [options]')
     >>> parser.add_argument('--foo', nargs='?', help='foo help')
     >>> parser.add_argument('bar', nargs='+', help='bar help')
     >>> parser.print_help()
     usage: PROG [options]

     positional arguments:
      bar          bar help

     options:
      -h, --help   show this help message and exit
      --foo [FOO]  foo help

O especificador de formato ‘%(prog)s’ está disponível para preencher o
nome do programa em suas mensagens de uso.


File: python.info,  Node: description,  Next: epilog,  Prev: usage,  Up: Objetos ArgumentParser

5.17.1.4 description
....................

A maioria das chamadas para o construtor *note ArgumentParser: 539.
usará o argumento nomeado ‘description=’.  Este argumento fornece uma
breve descrição do que o programa faz e como funciona.  Nas mensagens de
ajuda, a descrição é exibida entre a string de uso da linha de comando e
as mensagens de ajuda para os vários argumentos.

Por padrão, a descrição terá sua linha quebrada para que se encaixe no
espaço fornecido.  Para alterar esse comportamento, consulte o argumento
*note formatter_class: 304e.


File: python.info,  Node: epilog,  Next: parents,  Prev: description,  Up: Objetos ArgumentParser

5.17.1.5 epilog
...............

Alguns programas gostam de exibir uma descrição adicional do programa
após a descrição dos argumentos.  Esse texto pode ser especificado
usando o argumento ‘epilog=’ para *note ArgumentParser: 539.:

     >>> parser = argparse.ArgumentParser(
     ...     description='Um foo que faz bars',
     ...     epilog="E é assim que você faria foo de bar")
     >>> parser.print_help()
     usage: argparse.py [-h]

     Um foo que faz bars

     options:
      -h, --help  show this help message and exit

     E é assim que você faria foo de bar

Tal como acontece com o argumento *note description: 304b, o texto de
‘epilog=’ tem sua quebra de linha habilitada por padrão, mas este
comportamento pode ser ajustado com o argumento *note formatter_class:
304e. para *note ArgumentParser: 539.


File: python.info,  Node: parents,  Next: formatter_class,  Prev: epilog,  Up: Objetos ArgumentParser

5.17.1.6 parents
................

Às vezes, vários analisadores sintáticos compartilham um conjunto comum
de argumentos.  Ao invés de repetir as definições desses argumentos, um
único analisador com todos os argumentos compartilhados e passado para o
argumento ‘parents=’ para *note ArgumentParser: 539. pode ser usado.  O
argumento ‘parents=’ pega uma lista de objetos *note ArgumentParser:
539, coleta todas as ações posicionais e opcionais deles, e adiciona
essas ações ao objeto *note ArgumentParser: 539. sendo construído:

     >>> parent_parser = argparse.ArgumentParser(add_help=False)>>> parent_parser.add_argument('--parent', type=int)>>> foo_parser = argparse.ArgumentParser(parents=[parent_parser])>>> foo_parser.add_argument('foo')>>> foo_parser.parse_args(['--parent', '2', 'XXX'])Namespace(foo='XXX', parent=2)>>> bar_parser = argparse.ArgumentParser(parents=[parent_parser])>>> bar_parser.add_argument('--bar')>>> bar_parser.parse_args(['--bar', 'YYY'])Namespace(bar='YYY', parent=None)

Observe que a maioria dos analisadores sintáticos pais especificará
‘add_help=False’.  Caso contrário, o *note ArgumentParser: 539. verá
duas opções ‘-h/--help’ (uma no pai e outra no filho) e levantará um
erro.

     Nota: Você deve inicializar totalmente os analisadores sintáticos
     antes de passá-los via ‘parents=’.  Se você alterar os analisadores
     pais após o analisador filho, essas mudanças não serão refletidas
     no filho.


File: python.info,  Node: formatter_class,  Next: prefix_chars,  Prev: parents,  Up: Objetos ArgumentParser

5.17.1.7 formatter_class
........................

Objetos *note ArgumentParser: 539. permitem que a formação do texto de
ajuda seja personalizada por meio da especificação de uma classe de
formatação alternativa.  Atualmente, há quatro dessas classes:

 -- Classe: argparse.RawDescriptionHelpFormatter
 -- Classe: argparse.RawTextHelpFormatter
 -- Classe: argparse.ArgumentDefaultsHelpFormatter
 -- Classe: argparse.MetavarTypeHelpFormatter

*note RawDescriptionHelpFormatter: 3058. e *note RawTextHelpFormatter:
3059. dão mais controle sobre como as descrições textuais são exibidas.
Por padrão, objetos *note ArgumentParser: 539. quebram em linha os
textos *note description: 304b. e *note epilog: 304c. nas mensagens de
ajuda da linha de comando:

     >>> parser = argparse.ArgumentParser(
     ...     prog='PROG',
     ...     description='''esta descrição
     ...         foi indentada de forma estranha,
     ...             mas está tudo bem''',
     ...     epilog='''
     ...             da mesma forma para este epílogo, cujos espaços vão
     ...         ser apagados e cujas palavras serão quebradas
     ...         em algumas linhas''')
     >>> parser.print_help()
     usage: PROG [-h]

     esta descrição foi indentada de forma estranha, mas está tudo bem

     options:
      -h, --help  show this help message and exit

     da mesma forma para este epílogo, cujos espaços vão ser apagados e
     cujas palavras serão quebradas em algumas linhas

Passar *note RawDescriptionHelpFormatter: 3058. como ‘formatter_class=’
indica que *note description: 304b. e *note epilog: 304c. já estão
formatados corretamente e não devem ter suas linhas quebradas:

     >>> parser = argparse.ArgumentParser(
     ...     prog='PROG',
     ...     formatter_class=argparse.RawDescriptionHelpFormatter,
     ...     description=textwrap.dedent('''\
     ...         Por favor, não bagunce este texto!
     ...         --------------------------------
     ...             Eu indentei o texto
     ...             exatamente na forma
     ...             que quero que fique
     ...         '''))
     >>> parser.print_help()
     usage: PROG [-h]

     Por favor, não bagunce este texto!
     --------------------------------
        Eu indentei o texto
        exatamente na forma
        que quero que fique

     options:
      -h, --help  show this help message and exit

*note RawTextHelpFormatter: 3059. mantém espaços em branco para todos os
tipos de texto de ajuda, incluindo descrições de argumentos.  No
entanto, várias novas linhas são substituídas por uma.  Se você deseja
preservar várias linhas em branco, adicione espaços entre as novas
linhas.

*note ArgumentDefaultsHelpFormatter: 19db. adiciona automaticamente
informações sobre os valores padrão para cada uma das mensagens de ajuda
do argumento:

     >>> parser = argparse.ArgumentParser(
     ...     prog='PROG',
     ...     formatter_class=argparse.ArgumentDefaultsHelpFormatter)
     >>> parser.add_argument('--foo', type=int, default=42, help='FOO!')
     >>> parser.add_argument('bar', nargs='*', default=[1, 2, 3], help='BAR!')
     >>> parser.print_help()
     usage: PROG [-h] [--foo FOO] [bar ...]

     positional arguments:
      bar         BAR! (default: [1, 2, 3])

     options:
      -h, --help  show this help message and exit
      --foo FOO   FOO! (default: 42)

*note MetavarTypeHelpFormatter: 305a. usa o nome de argumento *note
type: 305b. para cada argumento como o nome de exibição para seus
valores (em vez de usar o *note dest: 305c. como o formatador regular
faz):

     >>> parser = argparse.ArgumentParser(
     ...     prog='PROG',
     ...     formatter_class=argparse.MetavarTypeHelpFormatter)
     >>> parser.add_argument('--foo', type=int)
     >>> parser.add_argument('bar', type=float)
     >>> parser.print_help()
     usage: PROG [-h] [--foo int] float

     positional arguments:
       float

     options:
       -h, --help  show this help message and exit
       --foo int


File: python.info,  Node: prefix_chars,  Next: fromfile_prefix_chars,  Prev: formatter_class,  Up: Objetos ArgumentParser

5.17.1.8 prefix_chars
.....................

A maioria das opções de linha de comando usará ‘-’ como prefixo, por
exemplo, ‘-f/--foo’.  Analisadores sintáticos que precisam ter suporte a
caracteres de prefixo diferentes ou adicionais, por exemplo, para opções
como ‘+f’ ou ‘/foo’, podem especificá-las usando o argumento
‘prefix_chars=’ para o construtor *note ArgumentParser: 539.:

     >>> parser = argparse.ArgumentParser(prog='PROG', prefix_chars='-+')
     >>> parser.add_argument('+f')
     >>> parser.add_argument('++bar')
     >>> parser.parse_args('+f X ++bar Y'.split())
     Namespace(bar='Y', f='X')

O argumento ‘prefix_chars=’ é padronizado como ‘'-'’.  Fornecer um
conjunto de caracteres que não inclua ‘-’ fará com que as opções
‘-f/--foo’ não sejam permitidas.


File: python.info,  Node: fromfile_prefix_chars,  Next: argument_default,  Prev: prefix_chars,  Up: Objetos ArgumentParser

5.17.1.9 fromfile_prefix_chars
..............................

Às vezes ao lidar com uma lista de argumentos particularmente longa,
pode fazer sentido manter a lista de argumentos em um arquivo em vez de
digitá-la na linha de comando.  Se o argumento ‘fromfile_prefix_chars=’
for dado ao construtor *note ArgumentParser: 539, então os argumentos
que começam com qualquer um dos caracteres especificados serão tratados
como arquivos e serão substituídos pelos argumentos que eles contêm.
Por exemplo:

     >>> with open('args.txt', 'w', encoding=sys.getfilesystemencoding()) as fp:
     ...     fp.write('-f\nbar')
     ...
     >>> parser = argparse.ArgumentParser(fromfile_prefix_chars='@')
     >>> parser.add_argument('-f')
     >>> parser.parse_args(['-f', 'foo', '@args.txt'])
     Namespace(f='bar')

Por padrão, os argumentos lidos de um arquivo devem ser um por linha
(mas veja também *note convert_arg_line_to_args(): 305d.) e são tratados
como se estivessem no mesmo lugar que o argumento original que faz
referência ao arquivo na linha de comando.  Portanto, no exemplo acima,
a expressão ‘['-f', 'foo', '@args.txt']’ é considerada equivalente à
expressão ‘['-f', 'foo', '-f', 'bar']’.

     Nota: Linhas vazias são tratadas como strings vazias (‘''’), que
     são permitidas como valores, mas não como argumentos.  Linhas
     vazias lidas como argumentos resultarão em um erro de “unrecognized
     arguments” (“argumentos não reconhecidos”).

*note ArgumentParser: 539. usa *note tratador de erros e codificação do
sistema de arquivos: 53b. para ler o arquivo que contém argumentos.

O argumento ‘fromfile_prefix_chars=’ é padronizado como ‘None’,
significando que os argumentos nunca serão tratados como referências de
arquivo.

Alterado na versão 3.12: *note ArgumentParser: 539. alterou a
codificação e os erros para ler arquivos de argumentos do padrão (por
exemplo, *note locale.getpreferredencoding(False): 53a. e ‘"strict"’)
para *note tratador de erros e codificação do sistema de arquivos: 53b.
O arquivo de argumentos deve ser codificado em UTF-8 em vez de página de
código ANSI no Windows.


File: python.info,  Node: argument_default,  Next: allow_abbrev,  Prev: fromfile_prefix_chars,  Up: Objetos ArgumentParser

5.17.1.10 argument_default
..........................

Geralmente, os padrões dos argumentos são especificados passando um
padrão para *note add_argument(): 19e. ou chamando os métodos *note
set_defaults(): 305e. com um conjunto específico de pares nome-valor.
Às vezes, no entanto, pode ser útil especificar um único padrão para
argumentos, válido em todo o analisador.  Isso pode ser feito passando o
argumento nomeado ‘argument_default=’ para *note ArgumentParser: 539.
Por exemplo, para suprimir globalmente a criação de atributos em
chamadas *note parse_args(): 3046, fornecemos
‘argument_default=SUPPRESS’:

     >>> parser = argparse.ArgumentParser(argument_default=argparse.SUPPRESS)
     >>> parser.add_argument('--foo')
     >>> parser.add_argument('bar', nargs='?')
     >>> parser.parse_args(['--foo', '1', 'BAR'])
     Namespace(bar='BAR', foo='1')
     >>> parser.parse_args([])
     Namespace()


File: python.info,  Node: allow_abbrev,  Next: conflict_handler,  Prev: argument_default,  Up: Objetos ArgumentParser

5.17.1.11 allow_abbrev
......................

Normalmente, quando você passa uma lista de argumentos para o método
*note parse_args(): 3046. de um *note ArgumentParser: 539, ele *note
reconhece as abreviações: de7. de opções longas.

Este recurso pode ser desabilitado configurando ‘allow_abbrev’ para
‘False’:

     >>> parser = argparse.ArgumentParser(prog='PROG', allow_abbrev=False)
     >>> parser.add_argument('--foobar', action='store_true')
     >>> parser.add_argument('--foonley', action='store_false')
     >>> parser.parse_args(['--foon'])
     usage: PROG [-h] [--foobar] [--foonley]
     PROG: error: unrecognized arguments: --foon

Adicionado na versão 3.5.


File: python.info,  Node: conflict_handler,  Next: add_help,  Prev: allow_abbrev,  Up: Objetos ArgumentParser

5.17.1.12 conflict_handler
..........................

Objetos *note ArgumentParser: 539. não permitem duas ações com a mesma
string de opções.  Por padrão, objetos *note ArgumentParser: 539.
levantam uma exceção se for feita uma tentativa de criar um argumento
com uma string de opção que já esteja em uso:

     >>> parser = argparse.ArgumentParser(prog='PROG')>>> parser.add_argument('-f', '--foo', help='ajuda antiga de foo')>>> parser.add_argument('--foo', help='nova ajuda de foo')Traceback (most recent call last): ..ArgumentError: argument --foo: conflicting option string(s): --foo

Às vezes (por exemplo, ao usar os *note parents: 304d.) pode ser útil
simplesmente substituir quaisquer argumentos mais antigos com a mesma
string de opções.  Para obter este comportamento, o valor ‘'resolve'’
pode ser fornecido ao argumento ‘conflict_handler=’ de *note
ArgumentParser: 539.:

     >>> parser = argparse.ArgumentParser(prog='PROG', conflict_handler='resolve')>>> parser.add_argument('-f', '--foo', help='ajuda antiga de foo')>>> parser.add_argument('--foo', help='nova ajuda de foo')>>> parser.print_help()usage: PROG [-h] [-f FOO] [--foo FOO]options: -h, --help  show this help message and exit -f FOO      ajuda antiga de foo --foo FOO   nova ajuda de foo

Observe que os objetos *note ArgumentParser: 539. só removem uma ação se
todas as suas strings de opção forem substituídas.  Assim, no exemplo
acima, a antiga ação ‘-f/--foo’ é mantida como ‘-f’, pois apenas a
string de opção ‘--foo’ foi substituída.


File: python.info,  Node: add_help,  Next: exit_on_error,  Prev: conflict_handler,  Up: Objetos ArgumentParser

5.17.1.13 add_help
..................

Por padrão, os objetos *note ArgumentParser: 539. adicionam uma opção
que simplesmente exibe a mensagem de ajuda do analisador sintático.  Se
‘-h’ ou ‘--help’ for fornecido na linha de comando, a ajuda do
‘ArgumentParser’ será exibida.

Às vezes, pode ser útil desabilitar o acréscimo desta opção de ajuda.
Isto pode ser feito passando ‘False’ como o argumento ‘add_help=’ para a
classe *note ArgumentParser: 539.:

     >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False)
     >>> parser.add_argument('--foo', help='ajuda de foo')
     >>> parser.print_help()
     usage: PROG [--foo FOO]

     options:
      --foo FOO  ajuda de foo

A opção de ajuda é normalmente ‘-h/--help’.  A exceção a isso é se o
‘prefix_chars=’ for especificado e não incluir ‘-’, neste caso ‘-h’ e
‘--help’ não são opções válidas.  Neste caso, o primeiro caractere em
‘prefix_chars’ é usado para prefixar as opções de ajuda:

     >>> parser = argparse.ArgumentParser(prog='PROG', prefix_chars='+/')
     >>> parser.print_help()
     usage: PROG [+h]

     options:
       +h, ++help  show this help message and exit


File: python.info,  Node: exit_on_error,  Prev: add_help,  Up: Objetos ArgumentParser

5.17.1.14 exit_on_error
.......................

Normalmente, quando você passa uma lista de argumentos inválidos para o
método *note parse_args(): 3046. de uma instância de *note
ArgumentParser: 539, ele vai exibir uma 'message' para *note sys.stderr:
940. e vai sair com o código de status de 2.

Se o usuário quiser detectar erros manualmente, o recurso pode ser
habilitado configurando ‘exit_on_error’ para ‘False’:

     >>> parser = argparse.ArgumentParser(exit_on_error=False)
     >>> parser.add_argument('--integers', type=int)
     _StoreAction(option_strings=['--integers'], dest='integers', nargs=None, const=None, default=None, type=<class 'int'>, choices=None, help=None, metavar=None)
     >>> try:
     ...     parser.parse_args('--integers a'.split())
     ... except argparse.ArgumentError:
     ...     print('Capturando um argumentError')
     ...
     Capturando um argumentError

Adicionado na versão 3.9.


File: python.info,  Node: O método add_argument,  Next: O método parse_args,  Prev: Objetos ArgumentParser,  Up: argparse — Analisador sintático para opções de linha de comando argumentos e subcomandos

5.17.1.15 O método add_argument()
.................................

 -- Método: ArgumentParser.add_argument (name or flags..., *[, action][,
          nargs][, const][, default][, type][, choices][, required][,
          help][, metavar][, dest][, deprecated])

     Define como um único argumento de linha de comando deve ser
     analisado.  Cada parâmetro tem sua própria descrição mais detalhada
     abaixo, mas resumidamente são eles:

        * *note name ou flags: 3061. - Um nome ou uma lista de strings
          de opções, por exemplo.  ‘'foo'’ ou ‘'-f', '--foo'’.

        * *note action: 3062. - O tipo básico de ação a ser executada
          quando esse argumento é encontrado na linha de comando.

        * *note nargs: 1692. - O número de argumentos de linha de
          comando que devem ser consumidos.

        * *note const: 3063. - Um valor constante exigido por algumas
          seleções *note action: 3062. e *note nargs: 1692.

        * *note default: 3064. - O valor produzido se o argumento
          estiver ausente da linha de comando e se estiver ausente do
          objeto espaço de nomes.

        * *note type: 305b. - O tipo para o qual o argumento de linha de
          comando deve ser convertido.

        * *note choices: 168f. - Uma sequência dos valores permitidos
          para o argumento.

        * *note required: 3065. - Se a opção de linha de comando pode ou
          não ser omitida (somente opcionais).

        * *note help: 3066. - Uma breve descrição do que o argumento
          faz.

        * *note metavar: 3067. - Um nome para o argumento nas mensagens
          de uso.

        * *note dest: 305c. - O nome do atributo a ser adicionado ao
          objeto retornado por *note parse_args(): 3046.

        * *note deprecated: 3068. - Se o uso do argumento foi
          descontinuado ou não.

As seções a seguir descrevem como cada um deles é usado.

* Menu:

* name ou flags::
* ação::
* nargs::
* const::
* default::
* tipo::
* choices::
* required::
* help::
* metavar::
* dest::
* deprecated::
* Classes de ação::


File: python.info,  Node: name ou flags,  Next: ação,  Up: O método add_argument

5.17.1.16 name ou flags
.......................

O método *note add_argument(): 19e. deve saber se um argumento opcional,
como ‘-f’ ou ‘--foo’, ou um argumento posicional, como uma lista de
nomes de arquivos, é esperado.  Os primeiros argumentos passados para
*note add_argument(): 19e. devem, portanto, ser uma série de
sinalizadores ou um simples nome de argumento.

Por exemplo, um argumento opcional poderia ser criado como:

     >>> parser.add_argument('-f', '--foo')

enquanto um argumento posicional pode ser criado como:

     >>> parser.add_argument('bar')

Quando *note parse_args(): 3046. é chamado, argumentos opcionais serão
identificados pelo prefixo ‘-’, e os argumentos restantes serão
considerados posicionais:

     >>> parser = argparse.ArgumentParser(prog='PROG')
     >>> parser.add_argument('-f', '--foo')
     >>> parser.add_argument('bar')
     >>> parser.parse_args(['BAR'])
     Namespace(bar='BAR', foo=None)
     >>> parser.parse_args(['BAR', '--foo', 'FOO'])
     Namespace(bar='BAR', foo='FOO')
     >>> parser.parse_args(['--foo', 'FOO'])
     usage: PROG [-h] [-f FOO] bar
     PROG: error: the following arguments are required: bar


File: python.info,  Node: ação,  Next: nargs,  Prev: name ou flags,  Up: O método add_argument

5.17.1.17 ação
..............

Objetos *note ArgumentParser: 539. associam argumentos de linha de
comando com ações.  Essas ações podem fazer praticamente qualquer coisa
com os argumentos de linha de comando associados a elas, embora a
maioria das ações simplesmente adicione um atributo ao objeto retornado
por *note parse_args(): 3046.  O argumento nomeado ‘action’ especifica
como os argumentos da linha de comando devem ser tratados.  As ações
fornecidas são:

   * ‘'store'’ - Isso apenas armazena o valor do argumento.  Esta é a
     ação padrão.

   * ‘'store_const'’ - Isso armazena o valor especificado pelo argumento
     nomeado *note const: 3063.; observe que o argumento nomeado *note
     const: 3063. tem como padrão ‘None’.  A ação ‘'store_const'’ é mais
     comumente usada com argumentos opcionais que especificam algum tipo
     de sinalizador.  Por exemplo:

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('--foo', action='store_const', const=42)
          >>> parser.parse_args(['--foo'])
          Namespace(foo=42)

   * ‘'store_true'’ e ‘'store_false'’ - Estes são casos especiais de
     ‘'store_const'’ que armazenam respectivamente os valores ‘True’ e
     ‘False’ e com valores padrão de ‘False’ e ‘True’:

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('--foo', action='store_true')
          >>> parser.add_argument('--bar', action='store_false')
          >>> parser.add_argument('--baz', action='store_false')
          >>> parser.parse_args('--foo --bar'.split())
          Namespace(foo=True, bar=False, baz=True)

   * ‘'append'’ - Isso anexa cada valor de argumento a uma lista.  É
     útil permitir para permitir que uma opção seja especificada várias
     vezes.  Se o valor padrão for uma lista não-vazia, o valor
     analisado vai iniciar com os elementos padrão da lista e quaisquer
     valores da linha de comando serão anexados após os valores padrão.
     Exemplo de uso:

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('--foo', action='append', default=['0'])
          >>> parser.parse_args('--foo 1 --foo 2'.split())
          Namespace(foo=['0', '1', '2'])

   * ‘'append_const'’ - Isso anexa o valor especificado pelo argumento
     nomeado *note const: 3063. a uma lista; observe que o argumento
     nomeado *note const: 3063. tem como padrão ‘None’.  A ação
     ‘'append_const'’ é normalmente útil quando vários argumentos
     precisam armazenar constantes na mesma lista.  Por exemplo:

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('--str', dest='types', action='append_const', const=str)
          >>> parser.add_argument('--int', dest='types', action='append_const', const=int)
          >>> parser.parse_args('--str --int'.split())
          Namespace(types=[<class 'str'>, <class 'int'>])

   * ‘'extend'’ - Isso anexa cada item de um argumento multivalorado a
     uma lista.  A ação ‘'extend'’ é normalmente usada com o valor do
     argumento nomeado *note nargs: 1692. ‘'+'’ ou ‘'*'’.  Observe que
     quando *note nargs: 1692. é ‘None’ (o padrão) ou ‘'?'’, cada
     caractere da string do argumento será anexado à lista.  Exemplo de
     uso:

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument("--foo", action="extend", nargs="+", type=str)
          >>> parser.parse_args(["--foo", "f1", "--foo", "f2", "f3", "f4"])
          Namespace(foo=['f1', 'f2', 'f3', 'f4'])

     Adicionado na versão 3.8.

   * ‘'count'’ - Isso conta o número de vezes que um argumento ocorre.
     Por exemplo, isso é útil para aumentar os níveis de verbosidade:

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('--verbose', '-v', action='count', default=0)
          >>> parser.parse_args(['-vvv'])
          Namespace(verbose=3)

     Observe que o 'padrão' será ‘None’, a menos que seja explicitamente
     definido como '0'.

   * ‘'help'’ - Isso imprime uma mensagem de ajuda completa para todas
     as opções no analisador sintático atual e sai.  Por padrão, uma
     ação de ajuda é adicionada automaticamente ao analisador sintático.
     Veja *note ArgumentParser: 539. para detalhes de como a saída é
     criada.

   * ‘'version'’ - Isso espera um argumento nomeado ‘version=’ na
     chamada *note add_argument(): 19e. e imprime informações de versão
     e sai quando invocado:

          >>> import argparse
          >>> parser = argparse.ArgumentParser(prog='PROG')
          >>> parser.add_argument('--version', action='version', version='%(prog)s 2.0')
          >>> parser.parse_args(['--version'])
          PROG 2.0

Você também pode especificar uma ação arbitrária passando uma subclasse
*note Action: 1917. (por exemplo, *note BooleanOptionalAction: 197b.) ou
outro objeto que implemente a mesma interface.  Somente ações que
consomem argumentos de linha de comando (por exemplo, ‘'store'’,
‘'append'’, ‘'extend'’ ou ações personalizadas com ‘nargs’ diferentes de
zero) podem ser usadas com argumentos posicionais.

A maneira recomendada de criar uma ação personalizada é estender *note
Action: 1917, substituindo o método ‘__call__()’ e opcionalmente os
métodos ‘__init__()’ e ‘format_usage()’.  Você também pode registrar
ações personalizadas usando o método *note register(): 306b. e
referenciá-las pelo nome registrado.

Um exemplo de uma ação personalizada:

     >>> class FooAction(argparse.Action):
     ...     def __init__(self, option_strings, dest, nargs=None, **kwargs):
     ...         if nargs is not None:
     ...             raise ValueError("nargs not allowed")
     ...         super().__init__(option_strings, dest, **kwargs)
     ...     def __call__(self, parser, namespace, values, option_string=None):
     ...         print('%r %r %r' % (namespace, values, option_string))
     ...         setattr(namespace, self.dest, values)
     ...
     >>> parser = argparse.ArgumentParser()
     >>> parser.add_argument('--foo', action=FooAction)
     >>> parser.add_argument('bar', action=FooAction)
     >>> args = parser.parse_args('1 --foo 2'.split())
     Namespace(bar=None, foo=None) '1' None
     Namespace(bar='1', foo=None) '2' '--foo'
     >>> args
     Namespace(bar='1', foo='2')

Para mais detalhes, veja *note Action: 1917.


File: python.info,  Node: nargs,  Next: const,  Prev: ação,  Up: O método add_argument

5.17.1.18 nargs
...............

Os objetos *note ArgumentParser: 539. geralmente associam um único
argumento de linha de comando a uma única ação a ser executada.  O
argumento nomeado ‘nargs’ associa um número diferente de argumentos de
linha de comando com uma única ação.  Veja também *note Especificando
argumentos ambíguos: 306d.  Os valores suportados são:

   * ‘N’ (um inteiro).  Os argumentos ‘N’ da linha de comando serão
     reunidos em uma lista.  Por exemplo:

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('--foo', nargs=2)
          >>> parser.add_argument('bar', nargs=1)
          >>> parser.parse_args('c --foo a b'.split())
          Namespace(bar=['c'], foo=['a', 'b'])

     Observe que ‘nargs=1’ produz uma lista de um item.  Isso é
     diferente do padrão, em que o item é produzido sozinho.

   * ‘'?'’.  Um argumento será consumido da linha de comando, se
     possível, e produzido como um único item.  Se nenhum argumento de
     linha de comando estiver presente, o valor de *note default: 3064.
     será produzido.  Observe que, para argumentos opcionais, há um caso
     adicional - a string de opções está presente, mas não é seguida por
     um argumento de linha de comando.  Neste caso o valor de *note
     const: 3063. será produzido.  Alguns exemplos para ilustrar isso:

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('--foo', nargs='?', const='c', default='d')
          >>> parser.add_argument('bar', nargs='?', default='d')
          >>> parser.parse_args(['XX', '--foo', 'YY'])
          Namespace(bar='XX', foo='YY')
          >>> parser.parse_args(['XX', '--foo'])
          Namespace(bar='XX', foo='c')
          >>> parser.parse_args([])
          Namespace(bar='d', foo='d')

     Um dos usos mais comuns de ‘nargs='?'’ é permitir arquivos de
     entrada e saída opcionais:

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('infile', nargs='?', type=argparse.FileType('r'),
          ...                     default=sys.stdin)
          >>> parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'),
          ...                     default=sys.stdout)
          >>> parser.parse_args(['input.txt', 'output.txt'])
          Namespace(infile=<_io.TextIOWrapper name='input.txt' encoding='UTF-8'>,
                    outfile=<_io.TextIOWrapper name='output.txt' encoding='UTF-8'>)
          >>> parser.parse_args([])
          Namespace(infile=<_io.TextIOWrapper name='<stdin>' encoding='UTF-8'>,
                    outfile=<_io.TextIOWrapper name='<stdout>' encoding='UTF-8'>)

   * ‘'*'’.  Todos os argumentos de linha de comando presentes são
     reunidos em uma lista.  Note que geralmente não faz muito sentido
     ter mais de um argumento posicional com ‘nargs='*'’, mas vários
     argumentos opcionais com ‘nargs='*'’ são possíveis.  Por exemplo:

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('--foo', nargs='*')
          >>> parser.add_argument('--bar', nargs='*')
          >>> parser.add_argument('baz', nargs='*')
          >>> parser.parse_args('a b --foo x y --bar 1 2'.split())
          Namespace(bar=['1', '2'], baz=['a', 'b'], foo=['x', 'y'])

   * ‘'+'’.  Assim como ‘'*'’, todos os argumentos de linha de comando
     presentes são reunidos em uma lista.  Além disso, uma mensagem de
     erro será gerada se não houver pelo menos um argumento de linha de
     comando presente.  Por exemplo:

          >>> parser = argparse.ArgumentParser(prog='PROG')
          >>> parser.add_argument('foo', nargs='+')
          >>> parser.parse_args(['a', 'b'])
          Namespace(foo=['a', 'b'])
          >>> parser.parse_args([])
          usage: PROG [-h] foo [foo ...]
          PROG: error: the following arguments are required: foo

Se o argumento nomeado ‘nargs’ não for fornecido, o número de argumentos
consumidos é determinado por *note action: 3062.  Geralmente, isso
significa que um único argumento de linha de comando será usado e um
único item (não uma lista) será produzido.  Ações que não fazem uso de
argumentos da linha de comando (por exemplo, ‘'store_const'’) definem
‘nargs=0’.


File: python.info,  Node: const,  Next: default,  Prev: nargs,  Up: O método add_argument

5.17.1.19 const
...............

O argumento ‘const’ de *note add_argument(): 19e. é usado para manter
valores constantes que não são lidos da linha de comando, mas são
necessários para as várias ações *note ArgumentParser: 539.  Os dois
usos mais comuns são:

   * Quando *note add_argument(): 19e. é chamado com
     ‘action='store_const'’ ou ‘action='append_const'’.  Essas ações
     adicionam o valor ‘const’ a um dos atributos do objeto retornado
     por *note parse_args(): 3046.  Consulte a descrição da *note
     action: 3062. para obter exemplos.  Se ‘const’ não for fornecido
     *note add_argument(): 19e, será recebido um valor padrão de ‘None’.

   * Quando *note add_argument(): 19e. é chamado com strings de opções
     (como ‘-f’ ou ‘--foo’) e ‘nargs='?'’.  Isso cria um argumento
     opcional que pode ser seguido por zero ou um argumento de linha de
     comando.  Ao analisar a linha de comando, se a string de opções for
     encontrada sem nenhum argumento de linha de comando seguindo, o
     valor de ‘const’ será usado.  Veja a descrição de *note nargs:
     1692. para exemplos.

Alterado na versão 3.11: ‘const=None’ por padrão, incluindo quando
‘action='append_const'’ ou ‘action='store_const'’.


File: python.info,  Node: default,  Next: tipo,  Prev: const,  Up: O método add_argument

5.17.1.20 default
.................

Todos os argumentos opcionais e alguns argumentos posicionais podem ser
omitidos na linha de comando.  O argumento nomeado ‘default’ de *note
add_argument(): 19e, cujo valor padrão é ‘None’, especifica qual valor
deve ser usado se o argumento de linha de comando não estiver presente.
Para argumentos opcionais, o valor ‘default’ é usado quando a string de
opção não estava presente na linha de comando:

     >>> parser = argparse.ArgumentParser()
     >>> parser.add_argument('--foo', default=42)
     >>> parser.parse_args(['--foo', '2'])
     Namespace(foo='2')
     >>> parser.parse_args([])
     Namespace(foo=42)

Se o espaço de nomes de destino já tiver um atributo definido, a ação
'default' não o substituirá:

     >>> parser = argparse.ArgumentParser()
     >>> parser.add_argument('--foo', default=42)
     >>> parser.parse_args([], namespace=argparse.Namespace(foo=101))
     Namespace(foo=101)

Se o valor ‘default’ for uma string, o analisador analisa o valor como
se fosse um argumento de linha de comando.  Em particular, o analisador
aplica qualquer argumento de conversão *note type: 305b, se fornecido,
antes de definir o atributo no valor de retorno *note Namespace: 3047.
Caso contrário, o analisador usa o valor como está:

     >>> parser = argparse.ArgumentParser()
     >>> parser.add_argument('--length', default='10', type=int)
     >>> parser.add_argument('--width', default=10.5, type=int)
     >>> parser.parse_args()
     Namespace(length=10, width=10.5)

Para argumentos posicionais com *note nargs: 1692. igual a ‘?’ ou ‘*’, o
valor ‘default’ é usado quando nenhum argumento de linha de comando
estava presente:

     >>> parser = argparse.ArgumentParser()
     >>> parser.add_argument('foo', nargs='?', default=42)
     >>> parser.parse_args(['a'])
     Namespace(foo='a')
     >>> parser.parse_args([])
     Namespace(foo=42)

Para argumentos obrigatórios, isto é, marcados com *note required: 3065,
o valor ‘default’ é ignorado.  Por exemplo, isso se aplica a argumentos
posicionais com valores de *note nargs: 1692. diferentes de ‘?’ ou ‘*’,
ou argumentos opcionais marcados como ‘required=True’.

Fornecer ‘default=argparse.SUPPRESS’ faz com que nenhum atributo seja
adicionado se o argumento da linha de comando não estiver presente:

     >>> parser = argparse.ArgumentParser()
     >>> parser.add_argument('--foo', default=argparse.SUPPRESS)
     >>> parser.parse_args([])
     Namespace()
     >>> parser.parse_args(['--foo', '1'])
     Namespace(foo='1')


File: python.info,  Node: tipo,  Next: choices,  Prev: default,  Up: O método add_argument

5.17.1.21 tipo
..............

Por padrão, o analisador sintático lê argumentos de linha de comando
como strings simples.  No entanto, muitas vezes a string da linha de
comando deve ser interpretada como outro tipo, como *note float: 2f7. ou
*note int: 257.  O argumento nomeado ‘type’ para *note add_argument():
19e. permite que qualquer verificação de tipo e conversões de tipo
necessárias sejam realizadas.

Se o argumento nomeado *note type: 305b. for usado com *note default:
3064, o conversor de tipo só será aplicado se o padrão for uma string.

O argumento para ‘type’ pode ser um chamável que aceite uma única string
ou o nome de um tipo registrado (veja *note register(): 306b.).  Se a
função levantar *note ArgumentTypeError: 3071, *note TypeError: 2c3. ou
*note ValueError: 202, a exceção será capturada e uma mensagem de erro
bem formatada será exibida.  Nenhum outro tipo de exceção é tratado.

Tipos e funções embutidas comuns podem ser usados como conversores de
tipo:

     import argparse
     import pathlib

     parser = argparse.ArgumentParser()
     parser.add_argument('count', type=int)
     parser.add_argument('distance', type=float)
     parser.add_argument('street', type=ascii)
     parser.add_argument('code_point', type=ord)
     parser.add_argument('dest_file', type=argparse.FileType('w', encoding='latin-1'))
     parser.add_argument('datapath', type=pathlib.Path)

Funções definidas pelo usuário também podem ser usadas:

     >>> def hyphenated(string):
     ...     return '-'.join([word[:4] for word in string.casefold().split()])
     ...
     >>> parser = argparse.ArgumentParser()
     >>> _ = parser.add_argument('short_title', type=hyphenated)
     >>> parser.parse_args(['"Um conto de duas cidades"'])
     Namespace(short_title='"um-cont-de-duas-cida')

A função *note bool(): 468. não é recomendada como conversor de tipo.
Tudo o que ele faz é converter strings vazias em ‘False’ e strings não
vazias em ‘True’.  Geralmente não é isso que se deseja.

Em geral, o argumento nomeado ‘type’ é uma conveniência que só deve ser
usada para conversões simples que só podem gerar uma das três exceções
suportadas.  Qualquer coisa com tratamento de erros ou gerenciamento de
recursos mais interessante deve ser feita posteriormente, após a análise
dos argumentos.

Por exemplo, conversões JSON ou YAML têm casos de erros complexos que
exigem relatórios melhores do que os fornecidos pelo argumento nomeado
‘type’.  Um *note JSONDecodeError: e4d. não seria bem formatado e uma
exceção *note FileNotFoundError: 42b. não seria tratada.

Mesmo *note FileType: f4d. tem suas limitações para uso com o argumento
nomeado ‘type’.  Se um argumento usar *note FileType: f4d. e um
argumento subsequente falhar, um erro será relatado, mas o arquivo não
será fechado automaticamente.  Neste caso, seria melhor esperar até que
o analisador tenha sido executado e então usar a instrução *note with:
5d2. para gerenciar os arquivos.

Para verificadores de tipo que simplesmente verificam um conjunto fixo
de valores, considere usar o argumento nomeado *note choices: 168f.


File: python.info,  Node: choices,  Next: required,  Prev: tipo,  Up: O método add_argument

5.17.1.22 choices
.................

Alguns argumentos de linha de comando devem ser selecionados em um
conjunto restrito de valores.  Eles podem ser tratados passando um
objeto sequência como o argumento nomeado 'choices' para *note
add_argument(): 19e.  Quando a linha de comando for analisada, os
valores dos argumentos serão verificados e uma mensagem de erro será
exibida se o argumento não for um dos valores aceitáveis:

     >>> parser = argparse.ArgumentParser(prog='game.py')
     >>> parser.add_argument('move', choices=['pedra', 'papel', 'tesoura'])
     >>> parser.parse_args(['padra'])
     Namespace(move='padr')
     >>> parser.parse_args(['fogo'])
     usage: game.py [-h] {pedra,papel,tesoura}
     game.py: error: argument move: invalid choice: 'fogo' (choose from 'pedra',
     'papel', 'tesoura')

Qualquer sequência pode ser passada como o valor 'choices', portanto
objetos *note list: 611, objetos *note tuple: 370. e sequências
personalizadas são todos suportados.

O uso de *note enum.Enum: 630. não é recomendado porque é difícil
controlar sua aparência no uso, na ajuda e nas mensagens de erro.

Observe que 'choices' são verificadas após a realização de quaisquer
conversões de *note type: 305b, portanto, os objetos em 'choices' devem
corresponder ao *note type: 305b. especificado.  Isso pode fazer com que
'choices' pareçam estranhos no uso, na ajuda ou em mensagens de erro.

Para manter 'choices' fácel de usar, considere um invólucro de tipo
personalizado que converta e formate valores, ou omita *note type: 305b.
e lide com a conversão no código da sua aplicação.

As opções formatadas substituem o 'metavar' padrão que normalmente é
derivado de 'dest'.  Geralmente é isso que você deseja porque o usuário
nunca vê o parâmetro 'dest'.  Se esta exibição não for desejável (talvez
porque haja muitas opções), basta especificar um *note metavar: 3067.
explícito.


File: python.info,  Node: required,  Next: help,  Prev: choices,  Up: O método add_argument

5.17.1.23 required
..................

Em geral, o módulo ‘argparse’ presume que sinalizadores como ‘-f’ e
‘--bar’ indicam argumentos 'opcionais', que sempre podem ser omitidos na
linha de comando.  Para tornar uma opção obrigatória, ‘True’ pode ser
especificado para o argumento nomeado ‘required=’ para *note
add_argument(): 19e.:

     >>> parser = argparse.ArgumentParser()
     >>> parser.add_argument('--foo', required=True)
     >>> parser.parse_args(['--foo', 'BAR'])
     Namespace(foo='BAR')
     >>> parser.parse_args([])
     usage: [-h] --foo FOO
     : error: the following arguments are required: --foo

Como mostra o exemplo, se uma opção estiver marcada como ‘required’,
*note parse_args(): 3046. reportará um erro se essa opção não estiver
presente na linha de comando.

     Nota: As opções obrigatórias são geralmente consideradas
     inadequadas porque os usuários esperam que as 'opções' sejam
     'opcionais' e, portanto, devem ser evitadas quando possível.


File: python.info,  Node: help,  Next: metavar,  Prev: required,  Up: O método add_argument

5.17.1.24 help
..............

O valor ‘help’ é uma string contendo uma breve descrição do argumento.
Quando um usuário solicita ajuda (geralmente usando ‘-h’ ou ‘--help’ na
linha de comando), estas descrições de ‘help’ serão exibidas com cada
argumento.

As strings ‘help’ podem incluir vários especificadores de formato para
evitar a repetição de coisas como o nome do programa ou o argumento
*note default: 3064.  Os especificadores disponíveis incluem o nome do
programa, ‘%(prog)s’ e a maioria dos argumentos nomeados para *note
add_argument(): 19e, por exemplo.  ‘%(default)s’, ‘%(type)s’, etc.:

     >>> parser = argparse.ArgumentParser(prog='frobble')
     >>> parser.add_argument('bar', nargs='?', type=int, default=42,
     ...                     help='the bar to %(prog)s (default: %(default)s)')
     >>> parser.print_help()
     usage: frobble [-h] [bar]

     positional arguments:
      bar     the bar to frobble (default: 42)

     options:
      -h, --help  show this help message and exit

Como a string de ajuda oferece suporte à formatação com %, se você
quiser que um literal ‘%’ apareça na string de ajuda, você deve
escapá-lo como ‘%%’.

‘argparse’ oferece suporte a silenciar a entrada de ajuda para certas
opções, definindo o valor ‘help’ como ‘argparse.SUPPRESS’:

     >>> parser = argparse.ArgumentParser(prog='frobble')
     >>> parser.add_argument('--foo', help=argparse.SUPPRESS)
     >>> parser.print_help()
     usage: frobble [-h]

     options:
       -h, --help  show this help message and exit


File: python.info,  Node: metavar,  Next: dest,  Prev: help,  Up: O método add_argument

5.17.1.25 metavar
.................

Quando *note ArgumentParser: 539. gera mensagens de ajuda, ele precisa
de alguma forma de se referir a cada argumento esperado.  Por padrão, os
objetos ‘ArgumentParser’ usam o valor *note dest: 305c. como o “nome” de
cada objeto.  Por padrão, para ações de argumentos posicionais, o valor
*note dest: 305c. é usado diretamente, e para ações de argumentos
opcionais, o valor *note dest: 305c. é maiúsculo.  Portanto, um único
argumento posicional com ‘dest='bar'’ será referido como ‘bar’.  Um
único argumento opcional ‘--foo’ que deve ser seguido por um único
argumento de linha de comando será referido como ‘FOO’.  Um exemplo:

     >>> parser = argparse.ArgumentParser()
     >>> parser.add_argument('--foo')
     >>> parser.add_argument('bar')
     >>> parser.parse_args('X --foo Y'.split())
     Namespace(bar='X', foo='Y')
     >>> parser.print_help()
     usage:  [-h] [--foo FOO] bar

     positional arguments:
      bar

     options:
      -h, --help  show this help message and exit
      --foo FOO

Um nome alternativo pode ser especificado com ‘metavar’:

     >>> parser = argparse.ArgumentParser()
     >>> parser.add_argument('--foo', metavar='YYY')
     >>> parser.add_argument('bar', metavar='XXX')
     >>> parser.parse_args('X --foo Y'.split())
     Namespace(bar='X', foo='Y')
     >>> parser.print_help()
     usage:  [-h] [--foo YYY] XXX

     positional arguments:
      XXX

     options:
      -h, --help  show this help message and exit
      --foo YYY

Observe que ‘metavar’ apenas altera o nome 'exibido' - o nome do
atributo no objeto *note parse_args(): 3046. ainda é determinado pelo
valor *note dest: 305c.

Valores diferentes de ‘nargs’ podem fazer com que o metavar seja usado
múltiplas vezes.  Fornecer uma tupla para ‘metavar’ especifica uma
exibição diferente para cada um dos argumentos:

     >>> parser = argparse.ArgumentParser(prog='PROG')
     >>> parser.add_argument('-x', nargs=2)
     >>> parser.add_argument('--foo', nargs=2, metavar=('bar', 'baz'))
     >>> parser.print_help()
     usage: PROG [-h] [-x X X] [--foo bar baz]

     options:
      -h, --help     show this help message and exit
      -x X X
      --foo bar baz


File: python.info,  Node: dest,  Next: deprecated,  Prev: metavar,  Up: O método add_argument

5.17.1.26 dest
..............

A maioria das ações *note ArgumentParser: 539. adiciona algum valor como
um atributo do objeto retornado por *note parse_args(): 3046.  O nome
deste atributo é determinado pelo argumento nomeado ‘dest’ de *note
add_argument(): 19e.  Para ações de argumento posicional, ‘dest’ é
normalmente fornecido como o primeiro argumento para *note
add_argument(): 19e.:

     >>> parser = argparse.ArgumentParser()
     >>> parser.add_argument('bar')
     >>> parser.parse_args(['XXX'])
     Namespace(bar='XXX')

Para ações de argumentos opcionais, o valor de ‘dest’ é normalmente
inferido das strings de opções.  *note ArgumentParser: 539. gera o valor
de ‘dest’ pegando a primeira string de opção longa e removendo a string
inicial ‘--’.  Se nenhuma string de opção longa for fornecida, ‘dest’
será derivado da primeira string de opção curta removendo o caractere
‘-’ inicial.  Quaisquer caracteres ‘-’ internos serão convertidos em
caracteres ‘_’ para garantir que a string seja um nome de atributo
válido.  Os exemplos abaixo ilustram esse comportamento:

     >>> parser = argparse.ArgumentParser()
     >>> parser.add_argument('-f', '--foo-bar', '--foo')
     >>> parser.add_argument('-x', '-y')
     >>> parser.parse_args('-f 1 -x 2'.split())
     Namespace(foo_bar='1', x='2')
     >>> parser.parse_args('--foo 1 -y 2'.split())
     Namespace(foo_bar='1', x='2')

‘dest’ permite que um nome de atributo personalizado seja fornecido:

     >>> parser = argparse.ArgumentParser()
     >>> parser.add_argument('--foo', dest='bar')
     >>> parser.parse_args('--foo XXX'.split())
     Namespace(bar='XXX')


File: python.info,  Node: deprecated,  Next: Classes de ação,  Prev: dest,  Up: O método add_argument

5.17.1.27 deprecated
....................

Durante a vida de um projeto, alguns argumentos podem precisar ser
removidos da linha de comando.  Antes de removê-los, você deve informar
aos seus usuários que os argumentos estão descontinuados e serão
removidos.  O argumento nomeado ‘deprecated’ de *note add_argument():
19e, cujo padrão é ‘False’, especifica se o argumento está descontinuado
e será removido no futuro.  Para argumentos, se ‘deprecated’ for ‘True’,
então um aviso será enviado para *note sys.stderr: 940. (saída de erro)
quando o argumento for usado:

     >>> import argparse
     >>> parser = argparse.ArgumentParser(prog='snake.py')
     >>> parser.add_argument('--legs', default=0, type=int, deprecated=True)
     >>> parser.parse_args([])
     Namespace(legs=0)
     >>> parser.parse_args(['--legs', '4'])
     snake.py: warning: option '--legs' is deprecated
     Namespace(legs=4)

Adicionado na versão 3.13.


File: python.info,  Node: Classes de ação,  Prev: deprecated,  Up: O método add_argument

5.17.1.28 Classes de ação
.........................

As classes ‘Action’ implementam a API de Action, um chamável que retorna
um chamável que processa argumentos da linha de comando.  Qualquer
objeto que siga esta API pode ser passado como parâmetro ‘action’ para
*note add_argument(): 19e.

 -- Classe: argparse.Action (option_strings, dest, nargs=None,
          const=None, default=None, type=None, choices=None,
          required=False, help=None, metavar=None)

     Objetos ‘Action’ são usados por um *note ArgumentParser: 539. para
     representar as informações necessárias para analisar um único
     argumento de uma ou mais strings da linha de comando.  A classe
     ‘Action’ deve aceitar os dois argumentos posicionais mais quaisquer
     argumentos nomeados passados para *note
     ArgumentParser.add_argument(): 19e, exceto o próprio ‘action’.

     Instâncias de ‘Action’ (ou valor de retorno de qualquer chamável
     para o parâmetro ‘action’) devem ter atributos ‘dest’,
     ‘option_strings’, ‘default’, ‘type’, ‘required’, ‘help’, etc.
     definidos.  A maneira mais fácil de garantir que esses atributos
     sejam definidos é chamar ‘Action.__init__()’.

      -- Método: __call__ (parser, namespace, values,
               option_string=None)

          As instâncias de ‘Action’ devem ser chamáveis, portanto, as
          subclasses devem substituir o método ‘__call__()’, que deve
          aceitar quatro parâmetros:

             * 'parser' - O objeto *note ArgumentParser: 539. que contém
               esta ação.

             * 'namespace' - O objeto *note Namespace: 3047. que será
               retornado por *note parse_args(): 3046.  A maioria das
               ações adicionam um atributo a este objeto usando *note
               setattr(): 22f3.

             * 'values' - Os argumentos de linha de comando associados,
               com qualquer conversões de tipo aplicadas.  Conversões de
               tipo são especificadas com o argumento nomeado *note
               type: 305b. para *note add_argument(): 19e.

             * 'option_string' - A string da opção que foi usada para
               invocar esta ação.  O argumento ‘option_string’ é
               opcional e estará ausente se a ação estiver associada a
               um argumento posicional.

          O método ‘__call__()’ pode executar ações arbitrárias, mas
          normalmente definirá atributos em ‘namespace’ com base em
          ‘dest’ e ‘values’.

      -- Método: format_usage ()

          As subclasses de ‘Action’ podem definir um método
          ‘format_usage()’ que não recebe argumento e retorna uma string
          que será usada ao exibir a mensagem de uso do programa.  Se
          tal método não for fornecido, um padrão sensato será usado.

 -- Classe: argparse.BooleanOptionalAction

     Uma subclasse de *note Action: 1917. para manipular sinalizadores
     booleanos com opções positivas e negativas.  Adicionar um único
     argumento, como ‘--foo’, cria automaticamente as opções ‘--foo’ e
     ‘--no-foo’, armazenando ‘True’ e ‘False’ respectivamente:

          >>> import argparse
          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('--foo', action=argparse.BooleanOptionalAction)
          >>> parser.parse_args(['--no-foo'])
          Namespace(foo=False)

     Adicionado na versão 3.9.


File: python.info,  Node: O método parse_args,  Next: Outros utilitários,  Prev: O método add_argument,  Up: argparse — Analisador sintático para opções de linha de comando argumentos e subcomandos

5.17.1.29 O método parse_args()
...............................

 -- Método: ArgumentParser.parse_args (args=None, namespace=None)

     Converte strings de argumento em objetos e os atribui como
     atributos do espaço de nomes.  Retorna o espaço de nomes
     preenchido.

     Chamadas anteriores para *note add_argument(): 19e. determinam
     exatamente quais objetos são criados e como eles são atribuídos.
     Veja a documentação de ‘add_argument()’ para detalhes.

        * *note args: 307c. - Lista de strings para analisar.  O padrão
          é obtido de *note sys.argv: 12a6.

        * *note namespace: 307d. - Um objeto para receber os atributos.
          O padrão é um novo objeto *note Namespace: 3047. vazio.

* Menu:

* Sintaxe de valores da opção::
* Argumentos inválidos::
* Argumentos contendo -::
* Abreviações de argumento (correspondência de prefixo): Abreviações de argumento correspondência de prefixo.
* Além do sys.argv: Além do sys argv.
* O objeto Namespace::


File: python.info,  Node: Sintaxe de valores da opção,  Next: Argumentos inválidos,  Up: O método parse_args

5.17.1.30 Sintaxe de valores da opção
.....................................

O método *note parse_args(): 3046. provê várias maneiras de especificar
o valor de uma opção (se ele pegar uma).  No caso mais simples, a opção
e seu valor são passados como dois argumentos separados:

     >>> parser = argparse.ArgumentParser(prog='PROG')
     >>> parser.add_argument('-x')
     >>> parser.add_argument('--foo')
     >>> parser.parse_args(['-x', 'X'])
     Namespace(foo=None, x='X')
     >>> parser.parse_args(['--foo', 'FOO'])
     Namespace(foo='FOO', x=None)

Para opções longas (opções com nomes maiores que um único caractere), a
opção e o valor também podem ser passados como um único argumento de
linha de comando, usando ‘=’ para separá-los:

     >>> parser.parse_args(['--foo=FOO'])
     Namespace(foo='FOO', x=None)

Para opções curtas (opções com apenas um caractere), a opção e seu valor
podem ser concatenados:

     >>> parser.parse_args(['-xX'])
     Namespace(foo=None, x='X')

Várias opções curtas podem ser unidas, usando apenas um único prefixo
‘-’, desde que apenas a última opção (ou nenhuma delas) exija um valor:

     >>> parser = argparse.ArgumentParser(prog='PROG')
     >>> parser.add_argument('-x', action='store_true')
     >>> parser.add_argument('-y', action='store_true')
     >>> parser.add_argument('-z')
     >>> parser.parse_args(['-xyzZ'])
     Namespace(x=True, y=True, z='Z')


File: python.info,  Node: Argumentos inválidos,  Next: Argumentos contendo -,  Prev: Sintaxe de valores da opção,  Up: O método parse_args

5.17.1.31 Argumentos inválidos
..............................

Ao analisar a linha de comando, *note parse_args(): 3046. verifica uma
variedade de erros, incluindo opções ambíguas, tipos inválidos, opções
inválidas, número incorreto de argumentos posicionais, etc.  Quando
encontra tal erro, ele sai e imprime o erro junto com uma mensagem de
uso:

     >>> parser = argparse.ArgumentParser(prog='PROG')
     >>> parser.add_argument('--foo', type=int)
     >>> parser.add_argument('bar', nargs='?')

     >>> # tipo inválido
     >>> parser.parse_args(['--foo', 'spam'])
     usage: PROG [-h] [--foo FOO] [bar]
     PROG: error: argument --foo: invalid int value: 'spam'

     >>> # opção inválida
     >>> parser.parse_args(['--bar'])
     usage: PROG [-h] [--foo FOO] [bar]
     PROG: error: no such option: --bar

     >>> # número errado de argumentos
     >>> parser.parse_args(['spam', 'badger'])
     usage: PROG [-h] [--foo FOO] [bar]
     PROG: error: extra arguments found: badger


File: python.info,  Node: Argumentos contendo -,  Next: Abreviações de argumento correspondência de prefixo,  Prev: Argumentos inválidos,  Up: O método parse_args

5.17.1.32 Argumentos contendo ‘-’
.................................

O método *note parse_args(): 3046. tenta mostrar erros sempre que o
usuário claramente cometeu um erro, mas algumas situações são
inerentemente ambíguas.  Por exemplo, o argumento de linha de comando
‘-1’ pode ser uma tentativa de especificar uma opção ou uma tentativa de
fornecer um argumento posicional.  O método *note parse_args(): 3046. é
cauteloso aqui: argumentos posicionais só podem começar com ‘-’ se eles
se parecerem com números negativos e não houver opções no analisador
sintático que se pareçam com números negativos:

     >>> parser = argparse.ArgumentParser(prog='PROG')
     >>> parser.add_argument('-x')
     >>> parser.add_argument('foo', nargs='?')

     >>> # nenhuma opção de número negativo, então -1 é um argumento posicional
     >>> parser.parse_args(['-x', '-1'])
     Namespace(foo=None, x='-1')

     >>> # nenhuma opção de número negativo, então -1 e -5 são argumentos posicionais
     >>> parser.parse_args(['-x', '-1', '-5'])
     Namespace(foo='-5', x='-1')

     >>> parser = argparse.ArgumentParser(prog='PROG')
     >>> parser.add_argument('-1', dest='one')
     >>> parser.add_argument('foo', nargs='?')

     >>> # opção de número negativo presente, então -1 é uma opção
     >>> parser.parse_args(['-1', 'X'])
     Namespace(foo=None, one='X')

     >>> # opção de número negativo presente, então -2 é uma opção
     >>> parser.parse_args(['-2'])
     usage: PROG [-h] [-1 ONE] [foo]
     PROG: error: no such option: -2

     >>> # opções de número negativo presentes, então ambos -1s são opções
     >>> parser.parse_args(['-1', '-1'])
     usage: PROG [-h] [-1 ONE] [foo]
     PROG: error: argument -1: expected one argument

Se você tiver argumentos posicionais que devem começar com ‘-’ e não se
parecem com números negativos, você pode inserir o pseudoargumento
‘'--'’ que informa *note parse_args(): 3046. que tudo depois disso é um
argumento posicional:

     >>> parser.parse_args(['--', '-f'])
     Namespace(foo='-f', one=None)

Veja também *note o tutorial do argparse sobre argumentos ambíguos:
306d. para mais detalhes.


File: python.info,  Node: Abreviações de argumento correspondência de prefixo,  Next: Além do sys argv,  Prev: Argumentos contendo -,  Up: O método parse_args

5.17.1.33 Abreviações de argumento (correspondência de prefixo)
...............................................................

O método *note parse_args(): 3046. *note por padrão: de8. permite que
opções longas sejam abreviadas para um prefixo, se a abreviação não for
ambígua (o prefixo corresponde a uma opção única):

     >>> parser = argparse.ArgumentParser(prog='PROG')
     >>> parser.add_argument('-bacon')
     >>> parser.add_argument('-badger')
     >>> parser.parse_args('-bac MMM'.split())
     Namespace(bacon='MMM', badger=None)
     >>> parser.parse_args('-bad WOOD'.split())
     Namespace(bacon=None, badger='WOOD')
     >>> parser.parse_args('-ba BA'.split())
     usage: PROG [-h] [-bacon BACON] [-badger BADGER]
     PROG: error: ambiguous option: -ba could match -badger, -bacon

Um erro é produzido para argumentos que podem produzir mais de uma
opção.  Este recurso pode ser desabilitado definindo *note allow_abbrev:
de8. como ‘False’.


File: python.info,  Node: Além do sys argv,  Next: O objeto Namespace,  Prev: Abreviações de argumento correspondência de prefixo,  Up: O método parse_args

5.17.1.34 Além do ‘sys.argv’
............................

Às vezes, pode ser útil ter uma instância de *note ArgumentParser: 539.
analisando argumentos diferentes daqueles de *note sys.argv: 12a6.  Isso
pode ser feito passando uma lista de strings para *note parse_args():
3046.  Isso é útil para testar no prompt interativo:

     >>> parser = argparse.ArgumentParser()
     >>> parser.add_argument(
     ...     'integers', metavar='int', type=int, choices=range(10),
     ...     nargs='+', help='an integer in the range 0..9')
     >>> parser.add_argument(
     ...     '--sum', dest='accumulate', action='store_const', const=sum,
     ...     default=max, help='sum the integers (default: find the max)')
     >>> parser.parse_args(['1', '2', '3', '4'])
     Namespace(accumulate=<built-in function max>, integers=[1, 2, 3, 4])
     >>> parser.parse_args(['1', '2', '3', '4', '--sum'])
     Namespace(accumulate=<built-in function sum>, integers=[1, 2, 3, 4])


File: python.info,  Node: O objeto Namespace,  Prev: Além do sys argv,  Up: O método parse_args

5.17.1.35 O objeto Namespace
............................

 -- Classe: argparse.Namespace

     Classe simples usada por padrão por *note parse_args(): 3046. para
     criar um objeto contendo atributos e retorná-lo.

     Esta classe é deliberadamente simples, apenas uma subclasse *note
     object: a96. com uma representação de string legível.  Se você
     preferir ter uma visão dos atributos do tipo dict, você pode usar o
     idioma padrão do Python, *note vars(): 1bba.:

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('--foo')
          >>> args = parser.parse_args(['--foo', 'BAR'])
          >>> vars(args)
          {'foo': 'BAR'}

     Também pode ser útil ter um *note ArgumentParser: 539. atribuindo
     atributos a um objeto já existente, em vez de um novo objeto *note
     Namespace: 3047.  Isso pode ser obtido especificando o argumento
     nomeado ‘namespace=’:

          >>> class C:
          ...     pass
          ...
          >>> c = C()
          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('--foo')
          >>> parser.parse_args(args=['--foo', 'BAR'], namespace=c)
          >>> c.foo
          'BAR'


File: python.info,  Node: Outros utilitários,  Next: Exceções<9>,  Prev: O método parse_args,  Up: argparse — Analisador sintático para opções de linha de comando argumentos e subcomandos

5.17.1.36 Outros utilitários
............................

* Menu:

* Subcomandos::
* Objetos FileType::
* Grupos de argumentos::
* Exclusão mútua::
* Padrões do analisador sintático::
* Imprimindo a ajuda::
* Análise parcial::
* Personalizando a análise de arquivos::
* Métodos de saída::
* Análise misturada::
* Registrando ações e tipos personalizados::


File: python.info,  Node: Subcomandos,  Next: Objetos FileType,  Up: Outros utilitários

5.17.1.37 Subcomandos
.....................

 -- Método: ArgumentParser.add_subparsers (*[, title][, description][,
          prog][, parser_class][, action][, dest][, required][, help][,
          metavar])

     Muitos programas dividem sua funcionalidade em vários subcomandos,
     por exemplo, o programa ‘svn’ pode invocar subcomandos como ‘svn
     checkout’, ‘svn update’ e ‘svn commit’.  Dividir a funcionalidade
     dessa forma pode ser uma ideia particularmente boa quando um
     programa executa várias funções diferentes que exigem diferentes
     tipos de argumentos de linha de comando.  *note ArgumentParser:
     539. oferece suporte à criação de tais subcomandos por meio do
     método ‘add_subparsers()’.  O método ‘add_subparsers()’ é
     normalmente chamado sem argumentos e retorna um objeto de ação
     especial.  Este objeto tem um único método, ‘add_parser()’, que
     recebe um nome de comando e quaisquer argumentos do construtor
     ‘ArgumentParser’ e retorna um objeto ‘ArgumentParser’ que pode ser
     modificado normalmente.

     Descrição de parâmetros:

        * 'title' - título para o grupo de subanalisadores na saída de
          ajuda; por padrão “subcomandos” se a descrição for fornecida,
          caso contrário, usa o título para argumentos posicionais

        * 'description' - descrição para o grupo de subanalisadores na
          saída de ajuda, por padrão ‘None’

        * 'prog' - informações de uso que serão exibidas com a ajuda do
          subcomando, por padrão o nome do programa e quaisquer
          argumentos posicionais antes do argumento do subanalisador

        * 'parser_class' - classe que será usada para criar instâncias
          de subanalisadores, por padrão a classe do analisador atual
          (por exemplo, *note ArgumentParser: 539.)

        * *note action: 3062. - o tipo básico de ação a ser executada
          quando esse argumento é encontrado na linha de comando

        * *note dest: 305c. - nome do atributo sob o qual o nome do
          subcomando será armazenado; por padrão ‘None’ e nenhum valor é
          armazenado

        * *note required: 3065. - Se um subcomando deve ou não ser
          fornecido, por padrão ‘False’ (adicionado em 3.7)

        * *note help: 3066. - ajuda para o grupo de subanalisadores na
          saída de ajuda, por padrão ‘None’

        * *note metavar: 3067. - string que apresenta os subcomandos
          disponíveis na ajuda; por padrão é ‘None’ e apresenta os
          subcomandos no formato {cmd1, cmd2, ..}

     Alguns exemplos de uso:

          >>> # cria o analisador de nível superior>>> parser = argparse.ArgumentParser(prog='PROG')>>> parser.add_argument('--foo', action='store_true', help='foo help')>>> subparsers = parser.add_subparsers(help='subcommand help')>>>>>> # cria o analisador para o comando "a">>> parser_a = subparsers.add_parser('a', help='a help')>>> parser_a.add_argument('bar', type=int, help='bar help')>>>>>> # cria o analisador para o comando "b">>> parser_b = subparsers.add_parser('b', help='b help')>>> parser_b.add_argument('--baz', choices=('X', 'Y', 'Z'), help='baz help')>>>>>> # analisa algumas listas de argumentos>>> parser.parse_args(['a', '12'])Namespace(bar=12, foo=False)>>> parser.parse_args(['--foo', 'b', '--baz', 'Z'])Namespace(baz='Z', foo=True)

     Note que o objeto retornado por *note parse_args(): 3046. conterá
     apenas atributos para o analisador principal e para o subanalisador
     selecionado pela linha de comando (e não para quaisquer outros
     subanalisadores).  Então, no exemplo acima, quando o comando ‘a’ é
     especificado, apenas os atributos ‘foo’ e ‘bar’ estão presentes, e
     quando o comando ‘b’ é especificado, apenas os atributos ‘foo’ e
     ‘baz’ estão presentes.

     Similarmente, quando uma mensagem de ajuda é solicitada de um
     subanalisador, apenas a ajuda para aquele parser em particular será
     exibida.  A mensagem de ajuda não incluirá mensagens do analisador
     sintático pai nem do analisador sintático irmão.  (Uma mensagem de
     ajuda para cada comando do subanalisador pode, entretanto, ser
     fornecida passando o argumento ‘help=’ para ‘add_parser()’, como
     acima.)

          >>> parser.parse_args(['--help'])usage: PROG [-h] [--foo] {a,b} ...positional arguments:  {a,b}   subcommand help    a     a help    b     b helpoptions:  -h, --help  show this help message and exit  --foo   foo help>>> parser.parse_args(['a', '--help'])usage: PROG a [-h] barpositional arguments:  bar     bar helpoptions:  -h, --help  show this help message and exit>>> parser.parse_args(['b', '--help'])usage: PROG b [-h] [--baz {X,Y,Z}]options:  -h, --help     show this help message and exit  --baz {X,Y,Z}  baz help

     O método *note add_subparsers(): c31. também aceita os argumentos
     nomeados ‘title’ e ‘description’.  Quando qualquer um deles estiver
     presente, os comandos do subanalisador aparecerão em seu próprio
     grupo na saída de ajuda.  Por exemplo:

          >>> parser = argparse.ArgumentParser()>>> subparsers = parser.add_subparsers(title='subcommands',...                                    description='valid subcommands',...                                    help='additional help')>>> subparsers.add_parser('foo')>>> subparsers.add_parser('bar')>>> parser.parse_args(['-h'])usage:  [-h] {foo,bar} ...options:  -h, --help  show this help message and exitsubcommands:  valid subcommands  {foo,bar}   additional help

     Além disso, ‘add_parser()’ oferece suporte a um argumento 'aliases'
     adicional, que permite que múltiplas strings se refiram ao mesmo
     subanalisador.  Este exemplo, como ‘svn’, alias ‘co’ como uma
     abreviação para ‘checkout’:

          >>> parser = argparse.ArgumentParser()>>> subparsers = parser.add_subparsers()>>> checkout = subparsers.add_parser('checkout', aliases=['co'])>>> checkout.add_argument('foo')>>> parser.parse_args(['co', 'bar'])Namespace(foo='bar')

     ‘add_parser()’ também aceita um argumento adicional 'deprecated',
     que permite descontinuar o subanalisador.

          >>> import argparse
          >>> parser = argparse.ArgumentParser(prog='chicken.py')
          >>> subparsers = parser.add_subparsers()
          >>> run = subparsers.add_parser('run')
          >>> fly = subparsers.add_parser('fly', deprecated=True)
          >>> parser.parse_args(['fly'])
          chicken.py: warning: command 'fly' is deprecated
          Namespace()

     Adicionado na versão 3.13.

     Uma maneira particularmente eficaz de lidar com subcomandos é
     combinar o uso do método *note add_subparsers(): c31. com chamadas
     ao método *note set_defaults(): 305e, para que cada subanalisador
     saiba qual função Python deve executar.  Por exemplo:

          >>> # funções do subanalisador functions>>> def foo(args):...     print(args.x * args.y)...>>> def bar(args):...     print('((%s))' % args.z)...>>> # cria o analisador de nível superior>>> parser = argparse.ArgumentParser()>>> subparsers = parser.add_subparsers(required=True)>>>>>> # cria o analisador do comando "foo">>> parser_foo = subparsers.add_parser('foo')>>> parser_foo.add_argument('-x', type=int, default=1)>>> parser_foo.add_argument('y', type=float)>>> parser_foo.set_defaults(func=foo)>>>>>> # cria o analisador do comando "foo">>> parser_bar = subparsers.add_parser('bar')>>> parser_bar.add_argument('z')>>> parser_bar.set_defaults(func=bar)>>>>>> # analisa os argumentos e chama a função que for selecionada>>> args = parser.parse_args('foo 1 -x 2'.split())>>> args.func(args)2.0>>>>>> # analisa os argumentos e chama a função que foi selecionada>>> args = parser.parse_args('bar XYZYX'.split())>>> args.func(args)((XYZYX))

     Dessa forma, você pode deixar *note parse_args(): 3046. fazer o
     trabalho de chamar a função apropriada após a análise sintática do
     argumento ser concluída.  Associar funções a ações como essa é,
     normalmente, a maneira mais fácil de lidar com as diferentes ações
     de cada um dos seus subanalisadores.  No entanto, se for necessário
     verificar o nome do subanalisador que foi invocado, o argumento
     nomeado ‘dest’ para a chamada *note add_subparsers(): c31.
     funcionará:

          >>> parser = argparse.ArgumentParser()>>> subparsers = parser.add_subparsers(dest='subparser_name')>>> subparser1 = subparsers.add_parser('1')>>> subparser1.add_argument('-x')>>> subparser2 = subparsers.add_parser('2')>>> subparser2.add_argument('y')>>> parser.parse_args(['2', 'frobble'])Namespace(subparser_name='2', y='frobble')

     Alterado na versão 3.7: Novo parâmetro somente-nomeado 'required'.


File: python.info,  Node: Objetos FileType,  Next: Grupos de argumentos,  Prev: Subcomandos,  Up: Outros utilitários

5.17.1.38 Objetos FileType
..........................

 -- Classe: argparse.FileType (mode='r', bufsize=-1, encoding=None,
          errors=None)

     A fábrica *note FileType: f4d. cria objetos que podem ser passados
     para o argumento de tipo de *note ArgumentParser.add_argument():
     19e.  Argumentos que têm objetos *note FileType: f4d. como seu tipo
     abrirão argumentos de linha de comando como arquivos com os modos
     solicitados, tamanhos de buffer, codificações e tratamento de erros
     (veja a função *note open(): 51c. para mais detalhes):

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('--raw', type=argparse.FileType('wb', 0))
          >>> parser.add_argument('out', type=argparse.FileType('w', encoding='UTF-8'))
          >>> parser.parse_args(['--raw', 'raw.dat', 'file.txt'])
          Namespace(out=<_io.TextIOWrapper name='file.txt' mode='w' encoding='UTF-8'>, raw=<_io.FileIO name='raw.dat' mode='wb'>)

     Objetos FileType entendem o pseudoargumento ‘'-'’ e o convertem
     automaticamente em *note sys.stdin: 53d. para objetos *note
     FileType: f4d. legíveis e *note sys.stdout: ae6. para objetos *note
     FileType: f4d. graváveis:

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('infile', type=argparse.FileType('r'))
          >>> parser.parse_args(['-'])
          Namespace(infile=<_io.TextIOWrapper name='<stdin>' encoding='UTF-8'>)

     Alterado na versão 3.4: Adicionados os parâmetros 'encodings' e
     'errors'.


File: python.info,  Node: Grupos de argumentos,  Next: Exclusão mútua,  Prev: Objetos FileType,  Up: Outros utilitários

5.17.1.39 Grupos de argumentos
..............................

 -- Método: ArgumentParser.add_argument_group (title=None,
          description=None, *[, argument_default][, conflict_handler])

     Por padrão, *note ArgumentParser: 539. agrupa argumentos de linha
     de comando em “argumentos posicionais” e “opções” ao exibir
     mensagens de ajuda.  Quando há um melhor agrupamento conceitual de
     argumentos do que este padrão, grupos apropriados podem ser criados
     usando o método ‘add_argument_group()’:

          >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False)
          >>> group = parser.add_argument_group('grupo')
          >>> group.add_argument('--foo', help='ajuda de foo')
          >>> group.add_argument('bar', help='ajuda de bar')
          >>> parser.print_help()
          usage: PROG [--foo FOO] bar

          grupo:
            bar    ajuda de bar
            --foo FOO  ajuda de foo

     O método *note add_argument_group(): 3088. retorna um objeto de
     grupo de argumentos que tem um método *note add_argument(): 19e.
     como um *note ArgumentParser: 539. regular.  Quando um argumento é
     adicionado ao grupo, o analisador o trata como um argumento normal,
     mas exibe o argumento em um grupo separado para mensagens de ajuda.
     O método ‘add_argument_group()’ aceita argumentos 'title' e
     'description' que podem ser usados para personalizar esta exibição:

          >>> parser = argparse.ArgumentParser(prog='PROG', add_help=False)
          >>> group1 = parser.add_argument_group('grupo1', 'descrição do grupo1')
          >>> group1.add_argument('foo', help='ajuda de foo')
          >>> group2 = parser.add_argument_group('grupo2', 'descrição do grupo2')
          >>> group2.add_argument('--bar', help='ajuda de bar')
          >>> parser.print_help()
          usage: PROG [--bar BAR] foo

          grupo1:
            descrição de grupo1

            foo    ajuda de foo

          grupo2:
            descrição de grupo2

            --bar BAR  ajuda de bar

     Os parâmetros opcionais somente-nomeados *note argument_default:
     3051. e *note conflict_handler: 3052. permitem um controle mais
     refinado do comportamento do grupo de argumentos.  Esses parâmetros
     têm o mesmo significado que no construtor *note ArgumentParser:
     539, mas se aplicam especificamente ao grupo de argumentos em vez
     de ao analisador sintático inteiro.

     Observe que quaisquer argumentos que não estejam nos grupos
     definidos pelo usuário retornarão às seções usuais de “argumentos
     posicionais” e “argumentos opcionais”.

     Alterado na versão 3.11: Chamar *note add_argument_group(): 3088.
     em um grupo de argumentos está descontinuado.  Esse recurso nunca
     foi suportado e nem sempre funciona corretamente.  A função existe
     na API por acidente por herança e será removida no futuro.


File: python.info,  Node: Exclusão mútua,  Next: Padrões do analisador sintático,  Prev: Grupos de argumentos,  Up: Outros utilitários

5.17.1.40 Exclusão mútua
........................

 -- Método: ArgumentParser.add_mutually_exclusive_group (required=False)

     Cria um grupo mutuamente exclusivo.  ‘argparse’ garantirá que
     apenas um dos argumentos no grupo mutuamente exclusivo esteja
     presente na linha de comando:

          >>> parser = argparse.ArgumentParser(prog='PROG')
          >>> group = parser.add_mutually_exclusive_group()
          >>> group.add_argument('--foo', action='store_true')
          >>> group.add_argument('--bar', action='store_false')
          >>> parser.parse_args(['--foo'])
          Namespace(bar=True, foo=True)
          >>> parser.parse_args(['--bar'])
          Namespace(bar=False, foo=False)
          >>> parser.parse_args(['--foo', '--bar'])
          usage: PROG [-h] [--foo | --bar]
          PROG: error: argument --bar: not allowed with argument --foo

     O método *note add_mutually_exclusive_group(): 308a. também aceita
     um argumento 'obrigatório', para indicar que pelo menos um dos
     argumentos mutuamente exclusivos é necessário:

          >>> parser = argparse.ArgumentParser(prog='PROG')
          >>> group = parser.add_mutually_exclusive_group(required=True)
          >>> group.add_argument('--foo', action='store_true')
          >>> group.add_argument('--bar', action='store_false')
          >>> parser.parse_args([])
          usage: PROG [-h] (--foo | --bar)
          PROG: error: one of the arguments --foo --bar is required

     Observe que atualmente grupos de argumentos mutuamente exclusivos
     não oferecem suporte aos argumentos 'title' e 'description' de
     *note add_argument_group(): 3088.  No entanto, um grupo mutuamente
     exclusivo pode ser adicionado a um grupo de argumentos que tenha um
     título e uma descrição.  Por exemplo:

          >>> parser = argparse.ArgumentParser(prog='PROG')
          >>> group = parser.add_argument_group('Título do grupo', 'Descrição do grupo')
          >>> exclusive_group = group.add_mutually_exclusive_group(required=True)
          >>> exclusive_group.add_argument('--foo', help='ajuda de foo')
          >>> exclusive_group.add_argument('--bar', help='ajuda de bar')
          >>> parser.print_help()
          usage: PROG [-h] (--foo FOO | --bar BAR)

          options:
            -h, --help  show this help message and exit

          Título do grupo:
            Descrição do grupo

            --foo FOO   foo help
            --bar BAR   bar help

     Alterado na versão 3.11: Chamar *note add_argument_group(): 3088.
     ou *note add_mutually_exclusive_group(): 308a. em um grupo
     mutuamente exclusivo está descontinuado.  Esses recursos nunca
     foram suportados e nem sempre funcionam corretamente.  As funções
     existem na API por acidente por herança e serão removidas no
     futuro.


File: python.info,  Node: Padrões do analisador sintático,  Next: Imprimindo a ajuda,  Prev: Exclusão mútua,  Up: Outros utilitários

5.17.1.41 Padrões do analisador sintático
.........................................

 -- Método: ArgumentParser.set_defaults (**kwargs)

     Na maioria das vezes, os atributos do objeto retornado por *note
     parse_args(): 3046. serão totalmente determinados pela inspeção dos
     argumentos da linha de comando e das ações dos argumentos.  *note
     set_defaults(): 305e. permite que alguns atributos adicionais que
     são determinados sem qualquer inspeção da linha de comando sejam
     adicionados:

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('foo', type=int)
          >>> parser.set_defaults(bar=42, baz='badger')
          >>> parser.parse_args(['736'])
          Namespace(bar=42, baz='badger', foo=736)

     Observe que os valores padrão podem ser definidos tanto no nível do
     analisador sintático usando *note set_defaults(): 305e. quanto no
     nível do argumento usando *note add_argument(): 19e.  Se ambos
     forem chamados para o mesmo argumento, o último valor padrão
     definido para o argumento será usado.

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('--foo', default='bar')
          >>> parser.set_defaults(foo='spam')
          >>> parser.parse_args([])
          Namespace(foo='spam')

     Padrões de nível de analisador podem ser particularmente úteis ao
     trabalhar com vários analisadores.  Veja o método *note
     add_subparsers(): c31. para um exemplo desse tipo.

 -- Método: ArgumentParser.get_default (dest)

     Obtém o valor padrão para um atributo de espaço de nomes, conforme
     definido por *note add_argument(): 19e. ou por *note
     set_defaults(): 305e.:

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('--foo', default='badger')
          >>> parser.get_default('foo')
          'badger'


File: python.info,  Node: Imprimindo a ajuda,  Next: Análise parcial,  Prev: Padrões do analisador sintático,  Up: Outros utilitários

5.17.1.42 Imprimindo a ajuda
............................

Na maioria das aplicações típicas, *note parse_args(): 3046. cuidará da
formatação e da impressão de quaisquer mensagens de uso ou erro.  No
entanto, vários métodos de formatação estão disponíveis:

 -- Método: ArgumentParser.print_usage (file=None)

     Imprime uma breve descrição de como o *note ArgumentParser: 539.
     deve ser invocado na linha de comando.  Se 'file' for ‘None’, *note
     sys.stdout: ae6. será presumido.

 -- Método: ArgumentParser.print_help (file=None)

     Imprime uma mensagem de ajuda, incluindo o uso do programa e
     informações sobre os argumentos registrados com o *note
     ArgumentParser: 539.  Se 'file' for ‘None’, *note sys.stdout: ae6.
     será presumido.

Também há variantes desses métodos que simplesmente retornam uma string
em vez de imprimi-la:

 -- Método: ArgumentParser.format_usage ()

     Retorna uma string contendo uma breve descrição de como o *note
     ArgumentParser: 539. deve ser invocado na linha de comando.

 -- Método: ArgumentParser.format_help ()

     Retorna uma string contendo uma mensagem de ajuda, incluindo o uso
     do programa e informações sobre os argumentos registrados com o
     *note ArgumentParser: 539.


File: python.info,  Node: Análise parcial,  Next: Personalizando a análise de arquivos,  Prev: Imprimindo a ajuda,  Up: Outros utilitários

5.17.1.43 Análise parcial
.........................

 -- Método: ArgumentParser.parse_known_args (args=None, namespace=None)

     Às vezes, um script precisa manipular apenas um conjunto específico
     de argumentos de linha de comando, deixando quaisquer argumentos
     não reconhecidos para outro script ou programa.  Nesses casos, o
     método *note parse_known_args(): 3092. pode ser útil.

     Este método funciona de forma semelhante a *note parse_args():
     3046, mas não levanta erro para argumentos extras não reconhecidos.
     Em vez disso, ele analisa os argumentos conhecidos e retorna uma
     tupla de dois itens que contém o espaço de nomes preenchido e a
     lista de quaisquer argumentos não reconhecidos.

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('--foo', action='store_true')
          >>> parser.add_argument('bar')
          >>> parser.parse_known_args(['--foo', '--badger', 'BAR', 'spam'])
          (Namespace(bar='BAR', foo=True), ['--badger', 'spam'])

     Aviso: As regras de *note correspondência de prefixo: de7. se
     aplicam a *note parse_known_args(): 3092.  O analisador pode usar
     uma opção mesmo que seja apenas um prefixo de uma de suas opções
     conhecidas, em vez de deixá-la na lista de argumentos restantes.


File: python.info,  Node: Personalizando a análise de arquivos,  Next: Métodos de saída,  Prev: Análise parcial,  Up: Outros utilitários

5.17.1.44 Personalizando a análise de arquivos
..............................................

 -- Método: ArgumentParser.convert_arg_line_to_args (arg_line)

     Argumentos lidos de um arquivo (veja o argumento nomeado
     'fromfile_prefix_chars' para o construtor *note ArgumentParser:
     539.) são lidos com um argumento por linha.  *note
     convert_arg_line_to_args(): 305d. pode ser substituído para uma
     leitura mais sofisticada.

     Este método recebe um único argumento 'arg_line' que é uma string
     lida do arquivo de argumentos.  Ele retorna uma lista de argumentos
     analisados dessa string.  O método é chamado uma vez por linha lida
     do arquivo de argumentos, em ordem.

     Uma substituição útil desse método é aquela que trata cada palavra
     separada por espaços como um argumento.  O exemplo a seguir
     demonstra como fazer isso:

          class MyArgumentParser(argparse.ArgumentParser):
              def convert_arg_line_to_args(self, arg_line):
                  return arg_line.split()


File: python.info,  Node: Métodos de saída,  Next: Análise misturada,  Prev: Personalizando a análise de arquivos,  Up: Outros utilitários

5.17.1.45 Métodos de saída
..........................

 -- Método: ArgumentParser.exit (status=0, message=None)

     Este método encerra o programa, saindo com o 'status' especificado
     e, se fornecido, imprime uma 'message' para *note sys.stderr: 940.
     antes disso.  O usuário pode sobrescrever este método para lidar
     com essas etapas de forma diferente:

          class ErrorCatchingArgumentParser(argparse.ArgumentParser):
              def exit(self, status=0, message=None):
                  if status:
                      raise Exception(f'Exiting because of an error: {message}')
                  exit(status)

 -- Método: ArgumentParser.error (message)

     Este método imprime uma mensagem de uso, incluindo a 'message', em
     *note sys.stderr: 940. e encerra o programa com um código de status
     2.


File: python.info,  Node: Análise misturada,  Next: Registrando ações e tipos personalizados,  Prev: Métodos de saída,  Up: Outros utilitários

5.17.1.46 Análise misturada
...........................

 -- Método: ArgumentParser.parse_intermixed_args (args=None,
          namespace=None)

 -- Método: ArgumentParser.parse_known_intermixed_args (args=None,
          namespace=None)

     Vários comandos Unix permitem que o usuário misture argumentos
     opcionais com argumentos posicionais.  Os métodos *note
     parse_intermixed_args(): b13. e *note
     parse_known_intermixed_args(): 3098. oferecem suporte a esse estilo
     de análise.

     Esses analisadores não oferecem suporte a todos os recursos do
     ‘argparse’ e vão levantar exceções se recursos não suportados forem
     usados.  Em particular, subanalisadores e grupos mutuamente
     exclusivos que incluem tanto opcionais quanto posicionais não são
     suportados.

     O exemplo a seguir mostra a diferença entre *note
     parse_known_args(): 3092. e *note parse_intermixed_args(): b13.: o
     primeiro retorna ‘['2', '3']’ como argumentos não analisados,
     enquanto o último coleta todos os posicionais em ‘rest’.

          >>> parser = argparse.ArgumentParser()
          >>> parser.add_argument('--foo')
          >>> parser.add_argument('cmd')
          >>> parser.add_argument('rest', nargs='*', type=int)
          >>> parser.parse_known_args('doit 1 --foo bar 2 3'.split())
          (Namespace(cmd='doit', foo='bar', rest=[1]), ['2', '3'])
          >>> parser.parse_intermixed_args('doit 1 --foo bar 2 3'.split())
          Namespace(cmd='doit', foo='bar', rest=[1, 2, 3])

     *note parse_known_intermixed_args(): 3098. retorna uma tupla de
     dois itens contendo o espaço de nomes preenchido e a lista de
     strings de argumentos restantes.  *note parse_intermixed_args():
     b13. levanta um erro se houver strings de argumentos não analisadas
     restantes.

     Adicionado na versão 3.7.


File: python.info,  Node: Registrando ações e tipos personalizados,  Prev: Análise misturada,  Up: Outros utilitários

5.17.1.47 Registrando ações e tipos personalizados
..................................................

 -- Método: ArgumentParser.register (registry_name, value, object)

     Às vezes, é desejável usar uma string personalizada em mensagens de
     erro para fornecer uma saída mais amigável ao usuário.  Nesses
     casos, ‘register()’ pode ser usado para registrar ações ou tipos
     personalizados com um analisador sintático e permitir que você faça
     referência ao tipo pelo nome registrado em vez do nome do chamável.

     O método ‘register()’ aceita três argumentos - um 'registry_name',
     especificando o registro interno onde o objeto será armazenado (por
     exemplo, ‘action’, ‘type’), 'value', que é a chave sob a qual o
     objeto será registrado, e object, o chamável a ser registrado.

     O exemplo a seguir mostra como registrar um tipo personalizado com
     um analisador:

          >>> import argparse
          >>> parser = argparse.ArgumentParser()
          >>> parser.register('type', 'hexadecimal integer', lambda s: int(s, 16))
          >>> parser.add_argument('--foo', type='hexadecimal integer')
          _StoreAction(option_strings=['--foo'], dest='foo', nargs=None, const=None, default=None, type='hexadecimal integer', choices=None, required=False, help=None, metavar=None, deprecated=False)
          >>> parser.parse_args(['--foo', '0xFA'])
          Namespace(foo=250)
          >>> parser.parse_args(['--foo', '1.2'])
          usage: PROG [-h] [--foo FOO]
          PROG: error: argument --foo: invalid 'hexadecimal integer' value: '1.2'


File: python.info,  Node: Exceções<9>,  Prev: Outros utilitários,  Up: argparse — Analisador sintático para opções de linha de comando argumentos e subcomandos

5.17.1.48 Exceções
..................

 -- Exceção: argparse.ArgumentError

     Um erro ao criar ou usar um argumento (opcional ou posicional).

     O valor da string dessa exceção é a mensagem, complementada com
     informações sobre o argumento que a causou.

 -- Exceção: argparse.ArgumentTypeError

     Levantada quando algo dá errado ao converter uma string de linha de
     comando em um tipo.

Guias e tutoriais
.................

* Menu:

* Tutorial de Argparse::
* Migrando código optparse para argparse::


File: python.info,  Node: Tutorial de Argparse,  Next: Migrando código optparse para argparse,  Up: Exceções<9>

5.17.1.49 Tutorial de Argparse
..............................


autor: Tshepang Mbambo

Este tutorial pretende ser uma introdução gentil ao *note argparse: 6. —
o módulo recomendado na biblioteca padrão do Python para fazer a análise
de linha de comando.

     Nota: A biblioteca padrão inclui duas outras bibliotecas
     diretamente relacionadas ao processamento de parâmetros de linha de
     comando: o módulo de nível inferior *note optparse: a0. (que pode
     exigir mais código para configurar uma determinada aplicação, mas
     também permite que uma aplicação solicite comportamentos que
     ‘argparse’ não suporta), e o nível muito baixo *note getopt: 61.
     (que serve especificamente como um equivalente à família de funções
     ‘getopt()’ disponível para programadores C). Embora nenhum desses
     módulos seja abordado diretamente neste guia, muitos dos conceitos
     principais em ‘argparse’ se originaram primeiro em ‘optparse’,
     então alguns aspectos deste tutorial também serão relevantes para
     usuários de ‘optparse’.

* Menu:

* Conceitos::
* O básico::
* Apresentando os argumentos posicionais::
* Apresentando os argumentos opcionais::
* Combinando argumentos posicionais e opcionais::
* Avançando um pouco mais::
* Como traduzir a saída do argparse::
* Conversores de tipo personalizados::
* Conclusão::


File: python.info,  Node: Conceitos,  Next: O básico,  Up: Tutorial de Argparse

5.17.1.50 Conceitos
...................

Demonstraremos o tipo de funcionalidade que vamos explorar neste
tutorial introdutório fazendo uso do comando ‘ls’:

     $ ls
     cpython  devguide  prog.py  pypy  rm-unused-function.patch
     $ ls pypy
     ctypes_configure  demo  dotviewer  include  lib_pypy  lib-python ...
     $ ls -l
     total 20
     drwxr-xr-x 19 wena wena 4096 Feb 18 18:51 cpython
     drwxr-xr-x  4 wena wena 4096 Feb  8 12:04 devguide
     -rwxr-xr-x  1 wena wena  535 Feb 19 00:05 prog.py
     drwxr-xr-x 14 wena wena 4096 Feb  7 00:59 pypy
     -rw-r--r--  1 wena wena  741 Feb 18 01:01 rm-unused-function.patch
     $ ls --help
     Uso: ls [OPÇÃO]... [ARQUIVO]...
     Lista informações sobre os ARQUIVOs (no diretório atual por padrão).
     Lista as entradas em ordem alfabética se não for usada nenhuma opção -cftuvSUX
     nem --sort..
     ...

Alguns conceitos que podemos aprender a partir destes quatro comandos:

   * O comando ‘ls’ é útil quando usado sem nenhuma opção.  Por padrão,
     ele mostra o conteúdo do diretório atual.

   * Se quisermos além do que ele fornece por padrão, contamos um pouco
     mais.  Neste caso, queremos que ele exiba um diretório diferente,
     ‘pypy’.  O que fizemos foi especificar o que é conhecido como
     argumento posicional.  Ele é chamado assim porque o programa deve
     saber o que fazer com o valor, apenas com base em onde ele aparece
     na linha de comando.  Este conceito é mais relevante para um
     comando como ‘cp’, cujo uso mais básico é ‘cp SRC DEST’.  A
     primeira posição é 'o que você deseja copiar' e a segunda posição é
     'para onde você deseja copiar'.

   * Agora, digamos que queremos mudar o comportamento do programa.  Em
     nosso exemplo, exibimos mais informações para cada arquivo em vez
     de apenas mostrar os nomes dos arquivos.  O ‘-l’ nesse caso é
     conhecido como um argumento opcional.

   * Esse é um trecho do texto de ajuda.  É muito útil que possas
     encontrar um programa que nunca usastes antes e poder descobrir
     como o mesmo funciona simplesmente lendo o seu texto de ajuda.


File: python.info,  Node: O básico,  Next: Apresentando os argumentos posicionais,  Prev: Conceitos,  Up: Tutorial de Argparse

5.17.1.51 O básico
..................

Comecemos com um exemplo muito simples que irá fazer (quase) nada:

     import argparse
     parser = argparse.ArgumentParser()
     parser.parse_args()

A seguir, temos o resultado da execução do código:

     $ python prog.py
     $ python prog.py --help
     usage: prog.py [-h]

     options:
       -h, --help  show this help message and exit
     $ python prog.py --verbose
     usage: prog.py [-h]
     prog.py: error: unrecognized arguments: --verbose
     $ python prog.py foo
     usage: prog.py [-h]
     prog.py: error: unrecognized arguments: foo

Eis aqui o que está acontecendo:

   * Executar o script sem qualquer opção resultará que nada será
     exibido em stdout.  Isso não é útil.

   * O segundo começa a exibir as utilidades do módulo *note argparse:
     6.  Não fizemos quase nada, mas já recebemos uma boa mensagem de
     ajuda.

   * A opção ‘--help’, que também pode ser encurtada para ‘-h’, é a
     única opção que obtemos livremente (ou seja, não é necessário
     determiná-la).  Determinar qualquer outra coisa resulta num erro.
     Mas mesmo assim, recebemos uma mensagem de uso bastante útil,
     também de graça.


File: python.info,  Node: Apresentando os argumentos posicionais,  Next: Apresentando os argumentos opcionais,  Prev: O básico,  Up: Tutorial de Argparse

5.17.1.52 Apresentando os argumentos posicionais
................................................

Um exemplo:

     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument("echo")
     args = parser.parse_args()
     print(args.echo)

E executando o código:

     $ python prog.py
     usage: prog.py [-h] echo
     prog.py: error: the following arguments are required: echo
     $ python prog.py --help
     usage: prog.py [-h] echo

     positional arguments:
       echo

     options:
       -h, --help  show this help message and exit
     $ python prog.py foo
     foo

Aqui está o que acontecerá:

   * Nós adicionamos o método *note add_argument(): 19e, cujo o mesmo
     usamos para especificar quais opções de linha de comando o programa
     está disposto a aceitar.  Neste caso, eu o nomeei ‘echo’ para que
     ele esteja de acordo com sua função.

   * Chamar o nosso programa neste momento, requer a especificação de
     uma opção.

   * O método *note parse_args(): 3046. realmente retorna alguns dados
     das opções especificadas, neste caso, ‘echo’.

   * A variável é uma forma de “mágica” que *note argparse: 6. executa
     de brinde (ou seja, não é necessário especificar em qual variável
     esse valor é armazenado).  Você também notará que seu nome
     corresponde ao argumento string dado ao método, ‘echo’.

Observe, no entanto, que, embora a tela de ajuda pareça boa e tudo,
atualmente não é tão útil quanto poderia ser.  Por exemplo, vemos que
temos ‘echo’ como um argumento posicional, mas não sabemos o que ele
faz, além de adivinhar ou ler o código-fonte.  Então, vamos torná-lo um
pouco mais útil:

     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument("echo", help="echo the string you use here")
     args = parser.parse_args()
     print(args.echo)

E, iremos obter:

     $ python prog.py -h
     usage: prog.py [-h] echo

     positional arguments:
       echo        echo the string you use here

     options:
       -h, --help  show this help message and exit

Agora, que tal fazer algo ainda mais útil:

     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument("square", help="display a square of a given number")
     args = parser.parse_args()
     print(args.square**2)

A seguir, temos o resultado da execução do código:

     $ python prog.py 4
     Traceback (most recent call last):
       File "prog.py", line 5, in <module>
         print(args.square**2)
     TypeError: unsupported operand type(s) for ** or pow(): 'str' and 'int'

Isso não correu tão bem.  Isso porque *note argparse: 6. trata as opções
que damos a ele como strings, a menos que digamos o contrário.  Então,
vamos dizer ao *note argparse: 6. para tratar essa entrada como um
inteiro:

     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument("square", help="display a square of a given number",
                         type=int)
     args = parser.parse_args()
     print(args.square**2)

A seguir, temos o resultado da execução do código:

     $ python prog.py 4
     16
     $ python prog.py four
     usage: prog.py [-h] square
     prog.py: error: argument square: invalid int value: 'four'

Correu bem.  O programa agora até fecha com ajuda de entrada ilegal ruim
antes de prosseguir.


File: python.info,  Node: Apresentando os argumentos opcionais,  Next: Combinando argumentos posicionais e opcionais,  Prev: Apresentando os argumentos posicionais,  Up: Tutorial de Argparse

5.17.1.53 Apresentando os argumentos opcionais
..............................................

Até agora, jogamos com argumentos posicionais.  Vamos dar uma olhada em
como adicionar opcionais:

     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument("--verbosity", help="increase output verbosity")
     args = parser.parse_args()
     if args.verbosity:
         print("verbosity turned on")

E a saída:

     $ python prog.py --verbosity 1
     verbosity turned on
     $ python prog.py
     $ python prog.py --help
     usage: prog.py [-h] [--verbosity VERBOSITY]

     options:
       -h, --help            show this help message and exit
       --verbosity VERBOSITY
                             increase output verbosity
     $ python prog.py --verbosity
     usage: prog.py [-h] [--verbosity VERBOSITY]
     prog.py: error: argument --verbosity: expected one argument

Eis aqui o que está acontecendo:

   * O programa é escrito de forma a exibir algo quando ‘--verbosity’ é
     especificado e não exibir nada quando não for.

   * Para mostrar que a opção é realmente opcional, não há erro ao
     executar o programa sem ela.  Observe que, por padrão, se um
     argumento opcional não for usado, a variável relevante, neste caso
     ‘args.verbosity’, recebe ‘None’ como valor, razão pela qual falha
     no teste de verdade da instrução *note if: 2f3.

   * A mensagem de ajuda é um pouco diferente.

   * Ao usar a opção ‘--verbosity’, deve-se também especificar algum
     valor, qualquer valor.

O exemplo acima aceita valores inteiros arbitrários para ‘--verbosity’,
mas para nosso programa simples, apenas dois valores são realmente
úteis, ‘True’ ou ‘False’.  Vamos modificar o código de acordo:

     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument("--verbose", help="increase output verbosity",
                         action="store_true")
     args = parser.parse_args()
     if args.verbose:
         print("verbosity turned on")

E a saída:

     $ python prog.py --verbose
     verbosity turned on
     $ python prog.py --verbose 1
     usage: prog.py [-h] [--verbose]
     prog.py: error: unrecognized arguments: 1
     $ python prog.py --help
     usage: prog.py [-h] [--verbose]

     options:
       -h, --help  show this help message and exit
       --verbose   increase output verbosity

Eis aqui o que está acontecendo:

   * A opção agora é mais um sinalizador do que algo que requer um
     valor.  Até mudamos o nome da opção para corresponder a essa ideia.
     Observe que agora especificamos uma nova palavra reservada,
     ‘action’, e damos a ela o valor ‘"store_true"’.  Isso significa
     que, se a opção for especificada, atribui o valor ‘True’ para
     ‘args.verbose’.  Não especificá-la implica em ‘False’.

   * Ele reclama quando você especifica um valor, no verdadeiro espírito
     do que os sinalizadores realmente são.

   * Observe o texto de ajuda diferente.

* Menu:

* Opções curtas::


File: python.info,  Node: Opções curtas,  Up: Apresentando os argumentos opcionais

5.17.1.54 Opções curtas
.......................

Se você estiver familiarizado com o uso da linha de comando, notará que
ainda não toquei no tópico das versões curtas das opções.  É bem
simples:

     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument("-v", "--verbose", help="increase output verbosity",
                         action="store_true")
     args = parser.parse_args()
     if args.verbose:
         print("verbosity turned on")

E aqui vai:

     $ python prog.py -v
     verbosity turned on
     $ python prog.py --help
     usage: prog.py [-h] [-v]

     options:
       -h, --help     show this help message and exit
       -v, --verbose  increase output verbosity

Observe que a nova habilidade também é refletida no texto de ajuda.


File: python.info,  Node: Combinando argumentos posicionais e opcionais,  Next: Avançando um pouco mais,  Prev: Apresentando os argumentos opcionais,  Up: Tutorial de Argparse

5.17.1.55 Combinando argumentos posicionais e opcionais
.......................................................

Nosso programa continua crescendo em complexidade:

     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument("square", type=int,
                         help="display a square of a given number")
     parser.add_argument("-v", "--verbose", action="store_true",
                         help="increase output verbosity")
     args = parser.parse_args()
     answer = args.square**2
     if args.verbose:
         print(f"the square of {args.square} equals {answer}")
     else:
         print(answer)

E agora a saída:

     $ python prog.py
     usage: prog.py [-h] [-v] square
     prog.py: error: the following arguments are required: square
     $ python prog.py 4
     16
     $ python prog.py 4 --verbose
     the square of 4 equals 16
     $ python prog.py --verbose 4
     the square of 4 equals 16

   * Trouxemos de volta um argumento posicional, daí a reclamação.

   * Observe que a ordem não importa.

Que tal devolvermos a este nosso programa a capacidade de ter vários
valores de verbosidade e realmente usá-los:

     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument("square", type=int,
                         help="display a square of a given number")
     parser.add_argument("-v", "--verbosity", type=int,
                         help="increase output verbosity")
     args = parser.parse_args()
     answer = args.square**2
     if args.verbosity == 2:
         print(f"the square of {args.square} equals {answer}")
     elif args.verbosity == 1:
         print(f"{args.square}^2 == {answer}")
     else:
         print(answer)

E a saída:

     $ python prog.py 4
     16
     $ python prog.py 4 -v
     usage: prog.py [-h] [-v VERBOSITY] square
     prog.py: error: argument -v/--verbosity: expected one argument
     $ python prog.py 4 -v 1
     4^2 == 16
     $ python prog.py 4 -v 2
     the square of 4 equals 16
     $ python prog.py 4 -v 3
     16

Todos eles parecem bons, exceto o último, que expõe um bug em nosso
programa.  Vamos corrigi-lo restringindo os valores que a opção
‘--verbosity’ pode aceitar:

     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument("square", type=int,
                         help="display a square of a given number")
     parser.add_argument("-v", "--verbosity", type=int, choices=[0, 1, 2],
                         help="increase output verbosity")
     args = parser.parse_args()
     answer = args.square**2
     if args.verbosity == 2:
         print(f"the square of {args.square} equals {answer}")
     elif args.verbosity == 1:
         print(f"{args.square}^2 == {answer}")
     else:
         print(answer)

E a saída:

     $ python prog.py 4 -v 3
     usage: prog.py [-h] [-v {0,1,2}] square
     prog.py: error: argument -v/--verbosity: invalid choice: 3 (choose from 0, 1, 2)
     $ python prog.py 4 -h
     usage: prog.py [-h] [-v {0,1,2}] square

     positional arguments:
       square                display a square of a given number

     options:
       -h, --help            show this help message and exit
       -v, --verbosity {0,1,2}
                             increase output verbosity

Observe que a alteração também reflete tanto na mensagem de erro quanto
na string de ajuda.

Agora, vamos usar uma abordagem diferente de brincar com a verbosidade,
que é bastante comum.  Ele também corresponde à maneira como o
executável do CPython trata seu próprio argumento de verbosidade
(verifique a saída de ‘python --help’):

     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument("square", type=int,
                         help="display the square of a given number")
     parser.add_argument("-v", "--verbosity", action="count",
                         help="increase output verbosity")
     args = parser.parse_args()
     answer = args.square**2
     if args.verbosity == 2:
         print(f"the square of {args.square} equals {answer}")
     elif args.verbosity == 1:
         print(f"{args.square}^2 == {answer}")
     else:
         print(answer)

Introduzimos outra ação, “contar”, para contar o número de ocorrências
de opções específicas.

     $ python prog.py 4
     16
     $ python prog.py 4 -v
     4^2 == 16
     $ python prog.py 4 -vv
     the square of 4 equals 16
     $ python prog.py 4 --verbosity --verbosity
     the square of 4 equals 16
     $ python prog.py 4 -v 1
     usage: prog.py [-h] [-v] square
     prog.py: error: unrecognized arguments: 1
     $ python prog.py 4 -h
     usage: prog.py [-h] [-v] square

     positional arguments:
       square           display a square of a given number

     options:
       -h, --help       show this help message and exit
       -v, --verbosity  increase output verbosity
     $ python prog.py 4 -vvv
     16

   * Sim, agora é mais um sinalizador (semelhante a
     ‘action="store_true"’) na versão anterior do nosso script.  Isso
     deve explicar a reclamação.

   * Ele também se comporta de maneira semelhante à ação “store_true”.

   * Agora aqui está uma demonstração do que a ação “contar” oferece.
     Você provavelmente já viu esse tipo de uso antes.

   * E se você não especificar o sinalizador ‘-v’, esse sinalizador será
     considerado como tendo valor ‘None’.

   * Como deve ser esperado, especificando a forma longa do sinalizador,
     devemos obter a mesma saída.

   * Infelizmente, nossa saída de ajuda não é muito informativa sobre a
     nova habilidade que nosso script adquiriu, mas isso sempre pode ser
     corrigido melhorando a documentação de nosso script (por exemplo,
     através do argumento nomeado ‘help’).

   * Essa última saída expõe um bug em nosso programa.

Vamos corrigir:

     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument("square", type=int,
                         help="display a square of a given number")
     parser.add_argument("-v", "--verbosity", action="count",
                         help="increase output verbosity")
     args = parser.parse_args()
     answer = args.square**2

     # bugfix: replace == with >=
     if args.verbosity >= 2:
         print(f"the square of {args.square} equals {answer}")
     elif args.verbosity >= 1:
         print(f"{args.square}^2 == {answer}")
     else:
         print(answer)

E isso aqui é o mesmo retorna:

     $ python prog.py 4 -vvv
     the square of 4 equals 16
     $ python prog.py 4 -vvvv
     the square of 4 equals 16
     $ python prog.py 4
     Traceback (most recent call last):
       File "prog.py", line 11, in <module>
         if args.verbosity >= 2:
     TypeError: '>=' not supported between instances of 'NoneType' and 'int'

   * A primeira saída correu bem e corrige o bug que tínhamos antes.  Ou
     seja, queremos que qualquer valor >= 2 seja o mais detalhado
     possível.

   * A terceira saída não está tão boa.

Vamos corrigir esse bug:

     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument("square", type=int,
                         help="display a square of a given number")
     parser.add_argument("-v", "--verbosity", action="count", default=0,
                         help="increase output verbosity")
     args = parser.parse_args()
     answer = args.square**2
     if args.verbosity >= 2:
         print(f"the square of {args.square} equals {answer}")
     elif args.verbosity >= 1:
         print(f"{args.square}^2 == {answer}")
     else:
         print(answer)

Acabamos de introduzir outra palavra reservada, ‘default’.  Nós o
configuramos como ‘0’ para torná-lo comparável aos outros valores int.
Lembre-se que por padrão, se um argumento opcional não for especificado,
ele obtém o valor ‘None’, e isso não pode ser comparado a um valor int
(daí a exceção *note TypeError: 2c3.).

E:

     $ python prog.py 4
     16

Você pode ir muito longe apenas com o que aprendemos até agora, e nós
apenas arranhamos a superfície.  O módulo *note argparse: 6. é muito
poderoso, e vamos explorar um pouco mais antes de terminar este
tutorial.


File: python.info,  Node: Avançando um pouco mais,  Next: Como traduzir a saída do argparse,  Prev: Combinando argumentos posicionais e opcionais,  Up: Tutorial de Argparse

5.17.1.56 Avançando um pouco mais
.................................

E se quiséssemos expandir nosso pequeno programa, ampliando seu
potencial:

     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument("x", type=int, help="the base")
     parser.add_argument("y", type=int, help="the exponent")
     parser.add_argument("-v", "--verbosity", action="count", default=0)
     args = parser.parse_args()
     answer = args.x**args.y
     if args.verbosity >= 2:
         print(f"{args.x} to the power {args.y} equals {answer}")
     elif args.verbosity >= 1:
         print(f"{args.x}^{args.y} == {answer}")
     else:
         print(answer)

Saída:

     $ python prog.py
     usage: prog.py [-h] [-v] x y
     prog.py: error: the following arguments are required: x, y
     $ python prog.py -h
     usage: prog.py [-h] [-v] x y

     positional arguments:
       x                the base
       y                the exponent

     options:
       -h, --help       show this help message and exit
       -v, --verbosity
     $ python prog.py 4 2 -v
     4^2 == 16

Observe que até agora estamos usando o nível de verbosidade para
'alterar' o texto que é exibido.  O exemplo a seguir usa o nível de
verbosidade para exibir 'mais' texto:

     import argparse
     parser = argparse.ArgumentParser()
     parser.add_argument("x", type=int, help="the base")
     parser.add_argument("y", type=int, help="the exponent")
     parser.add_argument("-v", "--verbosity", action="count", default=0)
     args = parser.parse_args()
     answer = args.x**args.y
     if args.verbosity >= 2:
         print(f"Running '{__file__}'")
     if args.verbosity >= 1:
         print(f"{args.x}^{args.y} == ", end="")
     print(answer)

Saída:

     $ python prog.py 4 2
     16
     $ python prog.py 4 2 -v
     4^2 == 16
     $ python prog.py 4 2 -vv
     Running 'prog.py'
     4^2 == 16

* Menu:

* Especificando argumentos ambíguos::
* Opções conflitantes::


File: python.info,  Node: Especificando argumentos ambíguos,  Next: Opções conflitantes,  Up: Avançando um pouco mais

5.17.1.57 Especificando argumentos ambíguos
...........................................

Quando há ambiguidade em decidir se um argumento é posicional ou para um
argumento, ‘--’ pode ser usado para dizer *note parse_args(): 3046. que
tudo depois disso é um argumento posicional:

     >>> parser = argparse.ArgumentParser(prog='PROG')
     >>> parser.add_argument('-n', nargs='+')
     >>> parser.add_argument('args', nargs='*')

     >>> # ambiguous, so parse_args assumes it's an option
     >>> parser.parse_args(['-f'])
     usage: PROG [-h] [-n N [N ...]] [args ...]
     PROG: error: unrecognized arguments: -f

     >>> parser.parse_args(['--', '-f'])
     Namespace(args=['-f'], n=None)

     >>> # ambiguous, so the -n option greedily accepts arguments
     >>> parser.parse_args(['-n', '1', '2', '3'])
     Namespace(args=[], n=['1', '2', '3'])

     >>> parser.parse_args(['-n', '1', '--', '2', '3'])
     Namespace(args=['2', '3'], n=['1'])


File: python.info,  Node: Opções conflitantes,  Prev: Especificando argumentos ambíguos,  Up: Avançando um pouco mais

5.17.1.58 Opções conflitantes
.............................

Até agora, trabalhamos com dois métodos de uma instância *note
argparse.ArgumentParser: 539.  Vamos apresentar um terceiro, *note
add_mutually_exclusive_group(): 308a.  Ele nos permite especificar
opções que entram em conflito umas com as outras.  Vamos também alterar
o resto do programa para que a nova funcionalidade faça mais sentido:
vamos introduzir a opção ‘--quiet’, que será o oposto da opção
‘--verbose’:

     import argparse

     parser = argparse.ArgumentParser()
     group = parser.add_mutually_exclusive_group()
     group.add_argument("-v", "--verbose", action="store_true")
     group.add_argument("-q", "--quiet", action="store_true")
     parser.add_argument("x", type=int, help="the base")
     parser.add_argument("y", type=int, help="the exponent")
     args = parser.parse_args()
     answer = args.x**args.y

     if args.quiet:
         print(answer)
     elif args.verbose:
         print(f"{args.x} to the power {args.y} equals {answer}")
     else:
         print(f"{args.x}^{args.y} == {answer}")

Nosso programa agora está mais simples e perdemos algumas
funcionalidades para demonstração.  De qualquer forma, aqui está a
saída:

     $ python prog.py 4 2
     4^2 == 16
     $ python prog.py 4 2 -q
     16
     $ python prog.py 4 2 -v
     4 to the power 2 equals 16
     $ python prog.py 4 2 -vq
     usage: prog.py [-h] [-v | -q] x y
     prog.py: error: argument -q/--quiet: not allowed with argument -v/--verbose
     $ python prog.py 4 2 -v --quiet
     usage: prog.py [-h] [-v | -q] x y
     prog.py: error: argument -q/--quiet: not allowed with argument -v/--verbose

Isso deve ser fácil de seguir.  Eu adicionei essa última saída para que
você possa ver o tipo de flexibilidade que obtém, ou seja, misturar
opções de formato longo com formatos curtos.

Antes de concluirmos, você provavelmente quer dizer aos seus usuários o
propósito principal do seu programa, caso eles não saibam:

     import argparse

     parser = argparse.ArgumentParser(description="calculate X to the power of Y")
     group = parser.add_mutually_exclusive_group()
     group.add_argument("-v", "--verbose", action="store_true")
     group.add_argument("-q", "--quiet", action="store_true")
     parser.add_argument("x", type=int, help="the base")
     parser.add_argument("y", type=int, help="the exponent")
     args = parser.parse_args()
     answer = args.x**args.y

     if args.quiet:
         print(answer)
     elif args.verbose:
         print(f"{args.x} to the power {args.y} equals {answer}")
     else:
         print(f"{args.x}^{args.y} == {answer}")

Observe essa pequena diferença no texto de uso.  Observe o ‘[-v | -q]’,
que nos diz que podemos usar ‘-v’ ou ‘-q’, mas não ambos ao mesmo tempo:

     $ python prog.py --help
     usage: prog.py [-h] [-v | -q] x y

     calculate X to the power of Y

     positional arguments:
       x              the base
       y              the exponent

     options:
       -h, --help     show this help message and exit
       -v, --verbose
       -q, --quiet


File: python.info,  Node: Como traduzir a saída do argparse,  Next: Conversores de tipo personalizados,  Prev: Avançando um pouco mais,  Up: Tutorial de Argparse

5.17.1.59 Como traduzir a saída do argparse
...........................................

A saída do módulo *note argparse: 6, como seu texto de ajuda e mensagens
de erro, são todos traduzidos usando o módulo *note gettext: 63.  Isso
permite que os aplicativos localizem facilmente as mensagens produzidas
por *note argparse: 6.  Veja também *note Internacionalizando seus
programas e módulos: 30a8.

Por exemplo, nesta saída *note argparse: 6.:

     $ python prog.py --help
     usage: prog.py [-h] [-v | -q] x y

     calculate X to the power of Y

     positional arguments:
       x              the base
       y              the exponent

     options:
       -h, --help     show this help message and exit
       -v, --verbose
       -q, --quiet

As strings ‘usage:’, ‘positional arguments:’, ‘options:’ e ‘show this
help message and exit’ são todos traduzíveis.

Para traduzir essas strings, elas devem primeiro ser extraídas em um
arquivo ‘.po’.  Por exemplo, usando Babel(1), execute este comando:

     $ pybabel extract -o messages.po /usr/lib/python3.12/argparse.py

Este comando extrairá todas as strings traduzíveis do módulo *note
argparse: 6. e as enviará para um arquivo chamado ‘messages.po’.  Este
comando presume que sua instalação do Python está em ‘/usr/lib’.

Você pode descobrir a localização do módulo *note argparse: 6. em seu
sistema usando este script:

     import argparse
     print(argparse.__file__)

Uma vez que as mensagens no arquivo ‘.po’ sejam traduzidas e as
traduções instaladas usando *note gettext: 63, *note argparse: 6. será
capaz de exibir as mensagens traduzidas.

Para traduzir suas próprias strings na saída *note argparse: 6, use
*note gettext: 63.

   ---------- Footnotes ----------

   (1) https://babel.pocoo.org/


File: python.info,  Node: Conversores de tipo personalizados,  Next: Conclusão,  Prev: Como traduzir a saída do argparse,  Up: Tutorial de Argparse

5.17.1.60 Conversores de tipo personalizados
............................................

O módulo *note argparse: 6. permite que você especifique conversores de
tipo personalizados para seus argumentos de linha de comando.  Isso
permite modificar a entrada de usuário antes de armazená-la na *note
argparse.Namespace: 3047.  Isso pode ser útil quando você precisa
pré-processar a entrada antes dela ser usada em seu programa.

Ao usar um conversor de tipo personalizado, você pode usar qualquer
chamável que recebe uma única string como argumento (o valor do
argumento) e retorna o valor convertido.  Porém, se você precisa tratar
de cenários mais complexos, você pode usar uma classe de ação
personalizada com o parâmetro 'action'.

Por exemplo, digamos que vcoê deseja tratar de argumentos com diferentes
prefixos e processá-los adequadamente:

     import argparse

     parser = argparse.ArgumentParser(prefix_chars='-+')

     parser.add_argument('-a', metavar='<value>', action='append',
                         type=lambda x: ('-', x))
     parser.add_argument('+a', metavar='<value>', action='append',
                         type=lambda x: ('+', x))

     args = parser.parse_args()
     print(args)

Saída:

     $ python prog.py -a valor1 +a valor2
     Namespace(a=[('-', 'valor1'), ('+', 'valor2')])

Neste exemplos, nós:

   * Criamos um analisador sintático com caracteres de prefixo
     personalizado usando parâmetro ‘prefix_chars’.

   * Definimos dois argumentos, ‘-a’ e ‘+a’, que usaram o parâmetro
     ‘type’ para criar conversores de tipo personalizados para armazenar
     o valor em uma tupla com o prefixo.

Sem os conversores de tipo personalizados, os argumentos tratariam ‘-a’
e ‘+a’ como o mesmo argumento, o que não era o desejado.  Ao usar
conversores de tipo personalizados, conseguimos diferenciar entre dois
argumentos.


File: python.info,  Node: Conclusão,  Prev: Conversores de tipo personalizados,  Up: Tutorial de Argparse

5.17.1.61 Conclusão
...................

O módulo *note argparse: 6. oferece muito mais do que o mostrado aqui.
Sua documentação é bastante detalhada e completo, e cheia de exemplos.
Tendo passado por este tutorial, você deve digeri-la facilmente sem se
sentir sobrecarregado.


File: python.info,  Node: Migrando código optparse para argparse,  Prev: Tutorial de Argparse,  Up: Exceções<9>

5.17.1.62 Migrando código ‘optparse’ para ‘argparse’
....................................................

O módulo *note argparse: 6. oferece vários recursos de nível mais alto
não fornecidos nativamente pelo módulo *note optparse: a0, incluindo:

   * Tratando argumentos posicionais.

   * Prover suporte a subcomandos.

   * Permitir prefixos alternativos de opções como ‘+’ e ‘/’.

   * Manipular argumentos de estilo “zero ou mais” e “um ou mais”.

   * Produzir mensagens de uso mais informativas.

   * Fornecer uma interface muito mais simples para ‘type’ e ‘action’
     personalizados.

Originalmente, o módulo *note argparse: 6. tentou manter a
compatibilidade com *note optparse: a0.  No entanto, as diferenças
fundamentais de design entre suportar o processamento de opções de linha
de comando declarativas (enquanto deixa o processamento de argumentos
posicionais para o código da aplicação) e suportar opções nomeadas e
argumentos posicionais na interface declarativa significam que a API
divergiu daquela de ‘optparse’ ao longo do tempo.

Conforme descrito em *note Escolhendo uma biblioteca de análise de linha
de comando: 3044, as aplicações que atualmente usam *note optparse: a0.
e estão satisfeitos com a forma como ele funciona podem continuar usando
‘optparse’.

Os desenvolvedores de aplicações que estão pensando em migrar também
devem revisar a lista de diferenças comportamentais intrínsecas
descritas nessa seção antes de decidir se a migração é desejável ou não.

Para aplicações que optam por migrar de *note optparse: a0. para *note
argparse: 6, as seguintes sugestões devem ser úteis:

   * Substituir todas as chamadas de *note
     optparse.OptionParser.add_option(): 30af. por chamadas de *note
     ArgumentParser.add_argument(): 19e.

   * Substituir ‘(options, args) = parser.parse_args()’ por ‘args =
     parser.parse_args()’ e adicionar chamadas adicionais a *note
     ArgumentParser.add_argument(): 19e. para os argumentos posicionais.
     Tenha em mente que o que anteriormente era chamado de ‘options’,
     agora no contexto do *note argparse: 6. é chamado de ‘args’.

   * Substituir *note optparse.OptionParser.disable_interspersed_args():
     30b0. usando *note parse_intermixed_args(): b13. em vez de *note
     parse_args(): 3046.

   * Substituir ações de função de retorno e argumentos nomeados
     ‘callback_*’ por argumentos ‘type’ ou ‘action’.

   * Substituir nomes de strings para argumentos nomeados ‘type’ pelos
     objetos de tipo correspondentes (por exemplo, int, float, complex,
     etc).

   * Substituir *note optparse.Values: 30b1. por *note Namespace: 3047.
     e *note optparse.OptionError: 30b2. e *note
     optparse.OptionValueError: 30b3. por *note ArgumentError: 309b.

   * Substituir strings com argumentos implícitos tal como ‘%default’ ou
     ‘%prog’ pela sintaxe padrão do Python para usar dicionários para
     formatar strings, ou seja, ‘%(default)s’ e ‘%(prog)s’.

   * Substituir o argumento ‘version’ do construtor do OptionParser por
     uma chamada a ‘parser.add_argument('--version', action='version',
     version='<the version>')’.


File: python.info,  Node: optparse — Analisador sintático para opções de linha de comando,  Next: getpass — Entrada de senha portátil,  Prev: argparse — Analisador sintático para opções de linha de comando argumentos e subcomandos,  Up: Bibliotecas de interface de linha de comando

5.17.2 ‘optparse’ — Analisador sintático para opções de linha de comando
------------------------------------------------------------------------

'Código-fonte:' Lib/optparse.py(1)

__________________________________________________________________

* Menu:

* Escolhendo uma biblioteca de análise de linha de comando::
* Introdução: Introdução<7>.
* Contexto::
* Tutorial: Tutorial<2>.
* Guia de referência::
* Funções de retorno de opção::
* Estendendo optparse::
* Exceções: Exceções<10>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/optparse.py


File: python.info,  Node: Escolhendo uma biblioteca de análise de linha de comando,  Next: Introdução<7>,  Up: optparse — Analisador sintático para opções de linha de comando

5.17.2.1 Escolhendo uma biblioteca de análise de linha de comando
.................................................................

A biblioteca padrão inclui três bibliotecas de análise de argumentos:

   * *note getopt: 61.: um módulo que espelha de perto a API procedural
     C ‘getopt’.  Incluído na biblioteca padrão desde antes do
     lançamento inicial do Python 1.0.

   * *note optparse: a0.: uma substituição declarativa para ‘getopt’ que
     fornece funcionalidade equivalente sem exigir que cada aplicação
     implemente sua própria lógica de análise de opções procedural.
     Incluído na biblioteca padrão desde o lançamento do Python 2.3.

   * *note argparse: 6.: uma alternativa mais opinativa a ‘optparse’ que
     fornece mais funcionalidade por padrão, às custas de flexibilidade
     reduzida da aplicação em controlar exatamente como os argumentos
     são processados.  Incluído na biblioteca padrão desde as versões
     Python 2.7 e Python 3.2.

Na ausência de restrições de design de análise de argumentos mais
específicas, *note argparse: 6. é a escolha recomendada para implementar
aplicações de linha de comando, pois oferece o mais alto nível de
funcionalidade básica com o mínimo de código em nível de aplicação.

*note getopt: 61. é mantido quase inteiramente por razões de
retrocompatibilidade.  No entanto, ele também serve como um caso de uso
de nicho como uma ferramenta para prototipagem e teste de manipulação de
argumentos de linha de comando em aplicações C baseadas em ‘getopt’.

*note optparse: a0. deve ser considerado como uma alternativa ao *note
argparse: 6. nos seguintes casos:

   * uma aplicação já está usando *note optparse: a0. e não quer
     arriscar as sutis mudanças comportamentais que podem surgir ao
     migrar para *note argparse: 6.

   * a aplicação requer controle adicional sobre a maneira como as
     opções e os parâmetros posicionais são intercalados na linha de
     comando (incluindo a capacidade de desabilitar completamente o
     recurso de intercalação)

   * a aplicação requer controle adicional sobre a análise incremental
     de elementos de linha de comando (embora ‘argparse’ suporte isso, a
     maneira exata como ele funciona na prática é indesejável para
     alguns casos de uso)

   * a aplicação requer controle adicional sobre o tratamento de opções
     que aceitam valores de parâmetros que podem começar com ‘-’ (como
     opções delegadas a serem passadas para subprocessos invocados)

   * a aplicação requer algum outro comportamento de processamento de
     parâmetros de linha de comando que ‘argparse’ não suporta, mas que
     pode ser implementado em termos da interface de nível inferior
     oferecida por ‘optparse’

Essas considerações também significam que *note optparse: a0.
provavelmente fornecerá uma base melhor para autores de bibliotecas que
escrevem bibliotecas de processamento de argumentos de linha de comando
de terceiros.

Como exemplo concreto, considere as duas configurações de análise de
argumentos de linha de comando a seguir, a primeira usando ‘optparse’ e
a segunda usando ‘argparse’:

     import optparse

     if __name__ == '__main__':
         parser = optparse.OptionParser()
         parser.add_option('-o', '--output')
         parser.add_option('-v', dest='verbose', action='store_true')
         opts, args = parser.parse_args()
         process(args, output=opts.output, verbose=opts.verbose)

     import argparse

     if __name__ == '__main__':
         parser = argparse.ArgumentParser()
         parser.add_argument('-o', '--output')
         parser.add_argument('-v', dest='verbose', action='store_true')
         parser.add_argument('rest', nargs='*')
         args = parser.parse_args()
         process(args.rest, output=args.output, verbose=args.verbose)

A diferença mais óbvia é que na versão ‘optparse’, os argumentos não
opcionais são processados separadamente pelo aplicativo após o
processamento da opção ser concluído.  Na versão ‘argparse’, os
argumentos posicionais são declarados e processados da mesma forma que
as opções nomeadas.

No entanto, a versão ‘argparse’ também manipulará algumas combinações de
parâmetros de forma diferente da forma como a versão ‘optparse’ as
manipularia.  Por exemplo (entre outras diferenças):

   * fornecer ‘-o -v’ retorna ‘output="-v"’ e ‘verbose=False’ ao usar
     ‘optparse’, mas um erro de uso com ‘argparse’ (reclamando que
     nenhum valor foi fornecido para ‘-o/--output’, já que ‘-v’ é
     interpretado como significando o sinalizador de verbosidade)

   * da mesma forma, fornecer ‘-o --’ retorna ‘output="--"’ e ‘args=()’
     ao usar ‘optparse’, mas um erro de uso com ‘argparse’ (também
     reclamando que nenhum valor foi fornecido para ‘-o/--output’, já
     que ‘--’ é interpretado como o término do processamento da opção e
     o tratamento de todos os valores restantes como argumentos
     posicionais)

   * fornecer ‘-o=foo’ retorna ‘output="=foo"’ ao usar ‘optparse’, mas
     retorna ‘output="foo"’ com ‘argparse’ (já que ‘=’ é um caso
     especial como um separador alternativo para valores de parâmetros
     de opção)

Se esses comportamentos diferentes na versão ‘argparse’ são considerados
desejáveis ou um problema dependerá do caso de uso específico da
aplicação de linha de comando.

Ver também
..........

click(1) é uma biblioteca de processamento de argumentos de terceiros
(originalmente baseada em ‘optparse’), que permite que aplicações de
linha de comando sejam desenvolvidas como um conjunto de funções de
implementação de comando decoradas.

Outras bibliotecas de terceiros, como typer(2) ou msgspec-click(3),
permitem que interfaces de linha de comando sejam especificadas de
maneiras que se integrem de forma mais eficaz com a verificação estática
de anotações de tipo Python.

   ---------- Footnotes ----------

   (1) https://pypi.org/project/click/

   (2) https://pypi.org/project/typer/

   (3) https://pypi.org/project/msgspec-click/


File: python.info,  Node: Introdução<7>,  Next: Contexto,  Prev: Escolhendo uma biblioteca de análise de linha de comando,  Up: optparse — Analisador sintático para opções de linha de comando

5.17.2.2 Introdução
...................

*note optparse: a0. é uma biblioteca mais conveniente, flexível e
poderosa para analisar opções de linha de comando do que o minimalista
módulo *note getopt: 61.  *note optparse: a0. usa um estilo mais
declarativo de análise de linha de comando: você cria uma instância de
*note OptionParser: 1515, preenche-a com opções e analisa a linha de
comando.  *note optparse: a0. permite que os usuários especifiquem
opções na sintaxe convencional GNU/POSIX e, adicionalmente, gera
mensagens de uso e ajuda para você.

Aqui está um exemplo de uso de *note optparse: a0. em um script simples:

     from optparse import OptionParser
     ...
     parser = OptionParser()
     parser.add_option("-f", "--file", dest="filename",
                       help="write report to FILE", metavar="FILE")
     parser.add_option("-q", "--quiet",
                       action="store_false", dest="verbose", default=True,
                       help="don't print status messages to stdout")

     (options, args) = parser.parse_args()

Com essas poucas linhas de código, os usuários do seu script agora podem
fazer “coisas comuns” na linha de comando, por exemplo:

     <seuscript> --file=outfile -q

Ao analisar a linha de comando, *note optparse: a0. define atributos do
objeto ‘options’ retornado por *note parse_args(): 1516. com base nos
valores de linha de comando fornecidos pelo usuário.  Quando *note
parse_args(): 1516. retorna da análise desta linha de comando,
‘options.filename’ será ‘"outfile"’ e ‘options.verbose’ será ‘False’.
*note optparse: a0. provê as opções longas e curtas, permite que opções
curtas sejam mescladas e permite que opções sejam associadas a seus
argumentos de várias maneiras.  Portanto, as seguintes linhas de comando
são todas equivalentes ao exemplo acima:

     <seuscript> -f outfile --quiet
     <seuscript> --quiet --file outfile
     <seuscript> -q -foutfile
     <seuscript> -qfoutfile

Além disso, os usuários podem executar um dos seguintes:

     <seuscript> -h
     <seuscript> --help

e *note optparse: a0. vai exibir um breve resumo das opções do seu
script:

     Usage: <seuscript> [options]

     Options:
       -h, --help            show this help message and exit
       -f FILE, --file=FILE  write report to FILE
       -q, --quiet           don't print status messages to stdout

onde o valor de 'seuscript' é determinado em tempo de execução
(normalmente de ‘sys.argv[0]’).


File: python.info,  Node: Contexto,  Next: Tutorial<2>,  Prev: Introdução<7>,  Up: optparse — Analisador sintático para opções de linha de comando

5.17.2.3 Contexto
.................

*note optparse: a0. foi explicitamente projetado para encorajar a
criação de programas com interfaces de linha de comando diretas que
seguem as convenções estabelecidas pela família ‘getopt()’ de funções
disponíveis para os desenvolvedores C. Para esse fim, ele provê apenas a
sintaxe e a semântica de linha de comando mais comuns convencionalmente
usadas no Unix.  Se você não estiver familiarizado com essas convenções,
ler esta seção vai permitir que você se familiarize com elas.

* Menu:

* Terminologia::
* Para que servem as opções?::
* Para que servem os argumentos posicionais?::


File: python.info,  Node: Terminologia,  Next: Para que servem as opções?,  Up: Contexto

5.17.2.4 Terminologia
.....................

argumento

     uma string inserida na linha de comando e passada pelo shell para
     ‘execl()’ ou ‘execv()’.  Em Python, argumentos são elementos de
     ‘sys.argv[1:]’ (‘sys.argv[0]’ é o nome do programa que está sendo
     executado).  Shells Unix também usam o termo “word”.

     Ocasionalmente, é desejável substituir uma lista de argumentos
     diferente de ‘sys.argv[1:]’, então você deve ler “argumento” como
     “um elemento de ‘sys.argv[1:]’, ou de alguma outra lista fornecida
     como um substituto para ‘sys.argv[1:]’”.

opção

     um argumento usado para fornecer informações extras para guiar ou
     personalizar a execução de um programa.  Existem muitas sintaxes
     diferentes para opções; a sintaxe tradicional do Unix é um hífen
     (“-”) seguido por uma única letra, por exemplo, ‘-x’ ou ‘-F’.  Além
     disso, a sintaxe tradicional do Unix permite que várias opções
     sejam mescladas em um único argumento, por exemplo, ‘-x -F’ é
     equivalente a ‘-xF’.  O projeto GNU introduziu ‘--’ seguido por uma
     série de palavras separadas por hífen, por exemplo, ‘--file’ ou
     ‘--dry-run’.  Essas são as únicas duas sintaxes de opção fornecidas
     por *note optparse: a0.

     Algumas outras sintaxes de opções que o mundo viu incluem:

        * um hífen seguido por algumas letras, por exemplo ‘-pf’ (isso
          'não' é o mesmo que várias opções mescladas em um único
          argumento)

        * um hífen seguido por uma palavra completa, por exemplo ‘-file’
          (isso é tecnicamente equivalente à sintaxe anterior, mas eles
          geralmente não são vistos no mesmo programa)

        * um sinal de mais seguido por uma única letra, ou algumas
          letras, ou uma palavra, por exemplo ‘+f’, ‘+rgb’

        * uma barra seguida de uma letra, ou algumas letras, ou uma
          palavra, por exemplo ‘/f’, ‘/file’

     Essas sintaxes de opção não são suportadas por *note optparse: a0,
     e nunca serão.  Isso é proposital: as três primeiras não são padrão
     em nenhum ambiente, e a última só faz sentido se você estiver
     mirando exclusivamente no Windows ou em certas plataformas legadas
     (por exemplo, VMS, MS-DOS).

argumento de opção

     um argumento que segue uma opção, está intimamente associado a essa
     opção e é consumido da lista de argumentos quando essa opção é.
     Com *note optparse: a0, os argumentos de opção podem estar em um
     argumento separado de sua opção:

          -f foo
          --file foo

     ou incluídos no mesmo argumento:

          -ffoo
          --file=foo

     Normalmente, uma opção dada ou aceita um argumento ou não.  Muitas
     pessoas querem um recurso de “argumentos opcionais de opção”, o que
     significa que algumas opções aceitarão um argumento se o virem, e
     não aceitarão se não o virem.  Isso é um tanto controverso, porque
     torna a análise ambígua: se ‘-a’ aceita um argumento opcional e
     ‘-b’ é outra opção inteiramente diferente, como interpretamos
     ‘-ab’?  Por causa dessa ambiguidade, *note optparse: a0. não provê
     esse recurso.

argumento posicional

     algo que sobrou na lista de argumentos depois que as opções foram
     analisadas, ou seja, depois que as opções e seus argumentos foram
     analisados e removidos da lista de argumentos.

opção obrigatória

     uma opção que deve ser fornecida na linha de comando; observe que a
     frase “opção obrigatória” é autocontraditória em inglês.  *note
     optparse: a0. não impede que você implemente opções obrigatórias,
     mas também não ajuda muito nisso.

Por exemplo, considere esta linha de comando hipotética:

     prog -v --report report.txt foo bar

‘-v’ e ‘--report’ são ambas opções.  Supondo que ‘--report’ receba um
argumento, ‘report.txt’ é um argumento de opção.  ‘foo’ e ‘bar’ são
argumentos posicionais.


File: python.info,  Node: Para que servem as opções?,  Next: Para que servem os argumentos posicionais?,  Prev: Terminologia,  Up: Contexto

5.17.2.5 Para que servem as opções?
...................................

As opções são usadas para fornecer informações extras para ajustar ou
personalizar a execução de um programa.  Caso não tenha ficado claro, as
opções geralmente são 'opcionais'.  Um programa deve ser capaz de
executar muito bem sem nenhuma opção.  (Escolha um programa aleatório
dos conjuntos de ferramentas Unix ou GNU. Ele pode ser executado sem
nenhuma opção e ainda fazer sentido?  As principais exceções são ‘find’,
‘tar’ e ‘dd’ — todos eles são mutantes excêntricos que foram
corretamente criticados por sua sintaxe não padrão e interfaces
confusas.)

Muitas pessoas querem que seus programas tenham “opções obrigatórias”.
Pense nisso.  Se é obrigatório, então 'não é opcional'!  Se há uma
informação que seu programa absolutamente requer para ser executado com
sucesso, é para isso que servem os argumentos posicionais.

Como um exemplo de bom design de interface de linha de comando,
considere o humilde utilitário ‘cp’, para copiar arquivos.  Não faz
muito sentido tentar copiar arquivos sem fornecer um destino e pelo
menos uma fonte.  Portanto, ‘cp’ falha se você executá-lo sem
argumentos.  No entanto, ele tem uma sintaxe flexível e útil que não
requer nenhuma opção:

     cp ORIGEM DESTINO
     cp ORIGEM ... DIRETÓRIO

Você pode ir bem longe só com isso.  A maioria das implementações de
‘cp’ fornece um monte de opções para ajustar exatamente como os arquivos
são copiados: você pode preservar o modo e o tempo de modificação,
evitar seguir links simbólicos, perguntar antes de destruir arquivos
existentes, etc.  Mas nada disso distrai da missão principal de ‘cp’,
que é copiar um arquivo para outro, ou vários arquivos para outro
diretório.


File: python.info,  Node: Para que servem os argumentos posicionais?,  Prev: Para que servem as opções?,  Up: Contexto

5.17.2.6 Para que servem os argumentos posicionais?
...................................................

Argumentos posicionais são para aquelas informações que seu programa
absolutamente e positivamente requer para ser executado.

Uma boa interface de usuário deve ter o mínimo de requisitos absolutos
possível.  Se seu programa requer 17 informações distintas para ser
executado com sucesso, não importa muito 'como' você obtém essas
informações do usuário — a maioria das pessoas desistirá e irá embora
antes de executar o programa com sucesso.  Isso se aplica se a interface
de usuário for uma linha de comando, um arquivo de configuração ou uma
GUI: se você fizer tantas exigências aos seus usuários, a maioria deles
simplesmente desistirá.

Em resumo, tente minimizar a quantidade de informações que os usuários
são absolutamente obrigados a fornecer — use padrões sensatos sempre que
possível.  Claro, você também quer tornar seus programas razoavelmente
flexíveis.  É para isso que servem as opções.  Novamente, não importa se
são entradas em um arquivo de configuração, widgets no diálogo
“Preferências” de uma GUI ou opções de linha de comando — quanto mais
opções você implementar, mais flexível será seu programa e mais
complicada se tornará sua implementação.  Muita flexibilidade também tem
desvantagens, é claro; muitas opções podem sobrecarregar os usuários e
tornar seu código muito mais difícil de manter.


File: python.info,  Node: Tutorial<2>,  Next: Guia de referência,  Prev: Contexto,  Up: optparse — Analisador sintático para opções de linha de comando

5.17.2.7 Tutorial
.................

Embora *note optparse: a0. seja bastante flexível e poderoso, ele também
é simples de usar na maioria dos casos.  Esta seção abrange os padrões
de código que são comuns a qualquer programa baseado em *note optparse:
a0.

Primeiro, você precisa importar a classe OptionParser; então, no início
do programa principal, crie uma instância de OptionParser:

     from optparse import OptionParser
     ...
     parser = OptionParser()

Então você pode começar a definir opções.  A sintaxe básica é:

     parser.add_option(opt_str, ...,
                       attr=value, ...)

Cada opção tem uma ou mais strings de opção, como ‘-f’ ou ‘--file’, e
vários atributos de opção que informam ao *note optparse: a0. o que
esperar e o que fazer quando encontrar essa opção na linha de comando.

Normalmente, cada opção terá uma sequência de opções curta e uma
sequência de opções longa, por exemplo:

     parser.add_option("-f", "--file", ...)

Você tem a liberdade de definir quantas strings de opções curtas e
longas quiser (incluindo zero), desde que haja pelo menos uma string de
opção no geral.

As strings de opção passadas para *note OptionParser.add_option(): 30af.
são efetivamente rótulos para a opção definida por essa chamada.  Para
resumir, frequentemente nos referiremos a 'encontrar uma opção' na linha
de comando; na realidade, *note optparse: a0. encontra 'strings de
opção' e procura opções a partir delas.

Depois que todas as suas opções estiverem definidas, instrua *note
optparse: a0. para analisar a linha de comando do seu programa:

     (options, args) = parser.parse_args()

(Se desejar, você pode passar uma lista de argumentos personalizada para
*note parse_args(): 1516, mas isso raramente é necessário: por padrão,
ele usa ‘sys.argv[1:]’.)

*note parse_args(): 1516. retorna dois valores:

   * ‘options’, um objeto que contém valores para todas as suas opções —
     por exemplo, se ‘--file’ receber um único argumento de string,
     então ‘options.file’ será o nome do arquivo fornecido pelo usuário,
     ou ‘None’ se o usuário não forneceu essa opção

   * ‘args’, a lista de argumentos posicionais restantes após a análise
     de opções

Esta seção do tutorial abrange apenas os quatro atributos de opção mais
importantes: *note action: 30c3, *note type: 30c4, *note dest: 30c5.
(destino) e *note help: 30c6.  Destes, *note action: 30c3. é o mais
fundamental.

* Menu:

* Compreendendo as ações de opções::
* A ação store::
* Manipulando opções (sinalizadores) booleanas: Manipulando opções sinalizadores booleanas.
* Outras ações::
* Valores padrão::
* Gerando texto de ajuda::
* Exibindo uma string de versão::
* Como optparse trata erros::
* Juntando tudo::


File: python.info,  Node: Compreendendo as ações de opções,  Next: A ação store,  Up: Tutorial<2>

5.17.2.8 Compreendendo as ações de opções
.........................................

Ações dizem ao *note optparse: a0. o que fazer quando ele encontra uma
opção na linha de comando.  Há um conjunto fixo de ações codificadas em
*note optparse: a0.; adicionar novas ações é um tópico avançado abordado
na seção *note Estendendo optparse: 30c9.  A maioria das ações diz ao
*note optparse: a0. para armazenar um valor em alguma variável — por
exemplo, pegue uma string da linha de comando e armazene-a em um
atributo de ‘options’.

Se você não especificar uma ação de opção, *note optparse: a0. assumirá
como padrão ‘store’.


File: python.info,  Node: A ação store,  Next: Manipulando opções sinalizadores booleanas,  Prev: Compreendendo as ações de opções,  Up: Tutorial<2>

5.17.2.9 A ação store
.....................

A ação de opção mais comum é ‘store’, que diz ao *note optparse: a0.
para pegar o próximo argumento (ou o restante do argumento atual),
garantir que seja do tipo correto e armazená-lo no destino escolhido.

Por exemplo:

     parser.add_option("-f", "--file",
                       action="store", type="string", dest="filename")

Agora vamos criar uma linha de comando falsa e pedir ao *note optparse:
a0. para analisá-la:

     args = ["-f", "foo.txt"]
     (options, args) = parser.parse_args(args)

Quando *note optparse: a0. vê a string de opção ‘-f’, ele consome o
próximo argumento, ‘foo.txt’, e o armazena em ‘options.filename’.
Então, após essa chamada para *note parse_args(): 1516,
‘options.filename’ é ‘"foo.txt"’.

Alguns outros tipos de opção suportados por *note optparse: a0. são
‘int’ e ‘float’.  Aqui está uma opção que espera um argumento inteiro:

     parser.add_option("-n", type="int", dest="num")

Note que esta opção não tem uma string de opção longa, o que é
perfeitamente aceitável.  Além disso, não há nenhuma ação explícita, já
que o padrão é ‘store’.

Vamos analisar outra linha de comando falsa.  Desta vez, vamos colocar o
argumento de opção bem perto da opção: já que ‘-n42’ (um argumento)
equivale a ‘-n 42’ (dois argumentos), o código

     (options, args) = parser.parse_args(["-n42"])
     print(options.num)

vai exibir ‘42’.

Se você não especificar um tipo, *note optparse: a0. presume ‘string’.
Combinado com o fato de que a ação padrão é ‘store’, isso significa que
nosso primeiro exemplo pode ser muito mais curto:

     parser.add_option("-f", "--file", dest="filename")

Se você não fornecer um destino, *note optparse: a0. descobre um padrão
sensato a partir das strings de opção: se a primeira string de opção
longa for ‘--foo-bar’, então o destino padrão é ‘foo_bar’.  Se não
houver strings de opção longas, *note optparse: a0. olha para a primeira
string de opção curta: o destino padrão para ‘-f’ é ‘f’.

*note optparse: a0. também inclui o tipo ‘complex’ embutido.  Adicionar
tipos é abordado na seção *note Estendendo optparse: 30c9.


File: python.info,  Node: Manipulando opções sinalizadores booleanas,  Next: Outras ações,  Prev: A ação store,  Up: Tutorial<2>

5.17.2.10 Manipulando opções (sinalizadores) booleanas
......................................................

Opções de sinalizador — define uma variável como true ou false quando
uma opção específica é vista — são bem comuns.  *note optparse: a0.
suporta-as com duas ações separadas, ‘store_true’ e ‘store_false’.  Por
exemplo, você pode ter um sinalizador ‘verbose’ que é ativado com ‘-v’ e
desativado com ‘-q’:

     parser.add_option("-v", action="store_true", dest="verbose")
     parser.add_option("-q", action="store_false", dest="verbose")

Aqui temos duas opções diferentes com o mesmo destino, o que é
perfeitamente OK. (Isso significa apenas que você tem que ter um pouco
de cuidado ao definir valores padrão — veja abaixo.)

Quando *note optparse: a0. encontra ‘-v’ na linha de comando, ele define
‘options.verbose’ como ‘True’; quando encontra ‘-q’, ‘options.verbose’ é
definido como ‘False’.


File: python.info,  Node: Outras ações,  Next: Valores padrão,  Prev: Manipulando opções sinalizadores booleanas,  Up: Tutorial<2>

5.17.2.11 Outras ações
......................

Algumas outras ações suportadas por *note optparse: a0. são:

‘"store_const"’

     armazena um valor constante, predefinido via *note Option.const:
     30d0.

‘"append"’

     anexa o argumento desta opção a uma lista

‘"count"’

     incrementa um contador em um

‘"callback"’

     chama uma função especificada

Elas são abordadas na seção *note Guia de referência: 30d1. e na seção
*note Funções de retorno de opção: 30d2.


File: python.info,  Node: Valores padrão,  Next: Gerando texto de ajuda,  Prev: Outras ações,  Up: Tutorial<2>

5.17.2.12 Valores padrão
........................

Todos os exemplos acima envolvem a configuração de alguma variável (o
“destino”) quando certas opções de linha de comando são vistas.  O que
acontece se essas opções nunca forem vistas?  Como não fornecemos nenhum
padrão, todas elas são definidas como ‘None’.  Isso geralmente é bom,
mas às vezes você quer mais controle.  *note optparse: a0. permite que
você forneça um valor padrão para cada destino, que é atribuído antes da
análise da linha de comando.

Primeiro, considere o exemplo de verbose/quiet.  Se quisermos que *note
optparse: a0. defina ‘verbose’ como ‘True’ a menos que ‘-q’ seja visto,
então podemos fazer isso:

     parser.add_option("-v", action="store_true", dest="verbose", default=True)
     parser.add_option("-q", action="store_false", dest="verbose")

Como os valores padrão se aplicam ao 'destino' e não a qualquer opção
específica, e essas duas opções têm o mesmo destino, isso é exatamente
equivalente:

     parser.add_option("-v", action="store_true", dest="verbose")
     parser.add_option("-q", action="store_false", dest="verbose", default=True)

Considere isso:

     parser.add_option("-v", action="store_true", dest="verbose", default=False)
     parser.add_option("-q", action="store_false", dest="verbose", default=True)

Novamente, o valor padrão para ‘verbose’ será ‘True’: o último valor
padrão fornecido para qualquer destino específico é o que conta.

Uma maneira mais clara de especificar valores padrão é o método
‘set_defaults()’ do OptionParser, que você pode chamar a qualquer
momento antes de chamar *note parse_args(): 1516.:

     parser.set_defaults(verbose=True)
     parser.add_option(...)
     (options, args) = parser.parse_args()

Como antes, o último valor especificado para um destino de opção dado é
o que conta.  Para maior clareza, tente usar um método ou outro de
configuração de valores padrão, não ambos.


File: python.info,  Node: Gerando texto de ajuda,  Next: Exibindo uma string de versão,  Prev: Valores padrão,  Up: Tutorial<2>

5.17.2.13 Gerando texto de ajuda
................................

A capacidade do *note optparse: a0. de gerar texto de ajuda e uso
automaticamente é útil para criar interfaces de linha de comando
amigáveis ao usuário.  Tudo o que você precisa fazer é fornecer um valor
*note help: 30c6. para cada opção e, opcionalmente, uma curta mensagem
de uso para todo o seu programa.  Aqui está um OptionParser preenchido
com opções amigáveis (documentadas) ao usuário:

     usage = "usage: %prog [options] arg1 arg2"
     parser = OptionParser(usage=usage)
     parser.add_option("-v", "--verbose",
                       action="store_true", dest="verbose", default=True,
                       help="make lots of noise [default]")
     parser.add_option("-q", "--quiet",
                       action="store_false", dest="verbose",
                       help="be vewwy quiet (I'm hunting wabbits)")
     parser.add_option("-f", "--filename",
                       metavar="FILE", help="write output to FILE")
     parser.add_option("-m", "--mode",
                       default="intermediate",
                       help="interaction mode: novice, intermediate, "
                            "or expert [default: %default]")

Se *note optparse: a0. encontrar ‘-h’ ou ‘--help’ na linha de comando,
ou se você apenas chamar ‘parser.print_help()’, ele exibe o seguinte na
saída padrão:

     Usage: <yourscript> [options] arg1 arg2

     Options:
       -h, --help            show this help message and exit
       -v, --verbose         make lots of noise [default]
       -q, --quiet           be vewwy quiet (I'm hunting wabbits)
       -f FILE, --filename=FILE
                             write output to FILE
       -m MODE, --mode=MODE  interaction mode: novice, intermediate, or
                             expert [default: intermediate]

(Se a saída de ajuda for acionada por uma opção de ajuda, *note
optparse: a0. sai após imprimir o texto de ajuda.)

Há muita coisa acontecendo aqui para ajudar *note optparse: a0. a gerar
a melhor mensagem de ajuda possível:

   * o script define sua própria mensagem de uso:

          usage = "usage: %prog [options] arg1 arg2"

     *note optparse: a0. expande ‘%prog’ na string de uso para o nome do
     programa atual, ou seja, ‘os.path.basename(sys.argv[0])’.  A string
     expandida é então exibida antes da ajuda detalhada da opção.

     Se você não fornecer uma string de uso, *note optparse: a0. usa um
     padrão simples, mas sensato: ‘"Usage: %prog [options]"’, o que é
     bom se seu script não aceita nenhum argumento posicional.

   * cada opção define uma string de ajuda e não se preocupa com quebra
     de linha — *note optparse: a0. cuida da quebra de linhas e faz com
     que a saída de ajuda tenha uma boa aparência.

   * opções que assumem um valor indicam esse fato em sua mensagem de
     ajuda gerada automaticamente, por exemplo, para a opção “mode”:

          -m MODE, --mode=MODE

     Aqui, “MODE” é chamado de metavariável: ele representa o argumento
     que o usuário deve fornecer para ‘-m’/‘--mode’.  Por padrão, *note
     optparse: a0. converte o nome da variável de destino para
     maiúsculas e usa isso para a metavariável.  Às vezes, não é isso
     que você quer — por exemplo, a opção ‘--filename’ define
     explicitamente ‘metavar="FILE"’, resultando nesta descrição de
     opção gerada automaticamente:

          -f FILE, --filename=FILE

     Isso é importante para mais do que apenas economizar espaço: o
     texto de ajuda escrito manualmente usa a metavariável ‘FILE’ para
     dar uma pista ao usuário de que há uma conexão entre a sintaxe
     semiformal ‘-f FILE’ e a descrição semântica informal como, por
     exemplo, “write output to FILE”.  Essa é uma maneira simples, mas
     eficaz, de tornar seu texto de ajuda muito mais claro e útil para
     usuários finais.

   * opções que têm um valor padrão podem incluir ‘%default’ na string
     de ajuda — *note optparse: a0. vai substituí-lo por *note str():
     44c. do valor padrão da opção.  Se uma opção não tiver um valor
     padrão (ou o valor padrão for ‘None’), ‘%default’ expande para
     ‘none’.

* Menu:

* Agrupando opções::


File: python.info,  Node: Agrupando opções,  Up: Gerando texto de ajuda

5.17.2.14 Agrupando opções
..........................

Ao lidar com muitas opções, é conveniente agrupar essas opções para
melhor saída de ajuda.  Um *note OptionParser: 1515. pode conter vários
grupos de opções, cada um dos quais pode conter várias opções.

Um grupo de opções é obtido usando a classe *note OptionGroup: 30d8.:

 -- Classe: optparse.OptionGroup (parser, title, description=None)

     onde

        * 'parser' é a instância *note OptionParser: 1515. na qual o
          grupo será inserido

        * 'title' é o título do grupo

        * 'description', opcional, é uma descrição longa do grupo

*note OptionGroup: 30d8. herda de ‘OptionContainer’ (como *note
OptionParser: 1515.) e, portanto, o método ‘add_option()’ pode ser usado
para adicionar uma opção ao grupo.

Depois que todas as opções são declaradas, usando o método *note
OptionParser: 1515. ‘add_option_group()’ o grupo é adicionado ao
analisador definido anteriormente.

Continuando com o analisador definido na seção anterior, adicionar um
*note OptionGroup: 30d8. a um analisador é fácil:

     group = OptionGroup(parser, "Dangerous Options",
                         "Caution: use these options at your own risk.  "
                         "It is believed that some of them bite.")
     group.add_option("-g", action="store_true", help="Group option.")
     parser.add_option_group(group)

Isso resultaria na seguinte saída de texto de ajuda:

     Usage: <yourscript> [options] arg1 arg2

     Options:
       -h, --help            show this help message and exit
       -v, --verbose         make lots of noise [default]
       -q, --quiet           be vewwy quiet (I'm hunting wabbits)
       -f FILE, --filename=FILE
                             write output to FILE
       -m MODE, --mode=MODE  interaction mode: novice, intermediate, or
                             expert [default: intermediate]

       Dangerous Options:
         Caution: use these options at your own risk.  It is believed that some
         of them bite.

         -g                  Group option.

Um exemplo um pouco mais completo pode envolver o uso de mais de um
grupo: ainda estendendo o exemplo anterior:

     group = OptionGroup(parser, "Dangerous Options",
                         "Caution: use these options at your own risk.  "
                         "It is believed that some of them bite.")
     group.add_option("-g", action="store_true", help="Group option.")
     parser.add_option_group(group)

     group = OptionGroup(parser, "Debug Options")
     group.add_option("-d", "--debug", action="store_true",
                      help="Print debug information")
     group.add_option("-s", "--sql", action="store_true",
                      help="Print all SQL statements executed")
     group.add_option("-e", action="store_true", help="Print every action done")
     parser.add_option_group(group)

que resulta na seguinte saída:

     Usage: <yourscript> [options] arg1 arg2

     Options:
       -h, --help            show this help message and exit
       -v, --verbose         make lots of noise [default]
       -q, --quiet           be vewwy quiet (I'm hunting wabbits)
       -f FILE, --filename=FILE
                             write output to FILE
       -m MODE, --mode=MODE  interaction mode: novice, intermediate, or expert
                             [default: intermediate]

       Dangerous Options:
         Caution: use these options at your own risk.  It is believed that some
         of them bite.

         -g                  Group option.

       Debug Options:
         -d, --debug         Print debug information
         -s, --sql           Print all SQL statements executed
         -e                  Print every action done

Outro método interessante, especialmente ao trabalhar programaticamente
com grupos de opções, é:

 -- Método: OptionParser.get_option_group (opt_str)

     Retorna o objeto *note OptionGroup: 30d8. ao qual a string de opção
     curta ou longa 'opt_str' (por exemplo, ‘'-o'’ ou ‘'--option'’)
     pertence.  Se não houver tal *note OptionGroup: 30d8, retorna
     ‘None’.


File: python.info,  Node: Exibindo uma string de versão,  Next: Como optparse trata erros,  Prev: Gerando texto de ajuda,  Up: Tutorial<2>

5.17.2.15 Exibindo uma string de versão
.......................................

Similar à string breve de uso, *note optparse: a0. também pode exibir
uma string de versão para seu programa.  Você tem que fornecer a string
como o argumento ‘version’ para OptionParser:

     parser = OptionParser(usage="%prog [-f] [-q]", version="%prog 1.0")

‘%prog’ é expandido assim como em ‘usage’.  Além disso, ‘version’ pode
conter qualquer coisa que você quiser.  Quando você o fornece, *note
optparse: a0. adiciona automaticamente uma opção ‘--version’ ao seu
analisador.  Se ele encontrar essa opção na linha de comando, ele
expande sua string ‘version’ (substituindo ‘%prog’), exibindo-a no
stdout e sai.

Por exemplo, se o seu script for chamado ‘/usr/bin/foo’:

     $ /usr/bin/foo --version
     foo 1.0

Os dois métodos a seguir podem ser usados para exibir e obter a string
‘version’:

 -- Método: OptionParser.print_version (file=None)

     Exibe a mensagem de versão para o programa atual (‘self.version’)
     em 'file' (stdout padrão).  Assim como em *note print_usage():
     30dd, qualquer ocorrência de ‘%prog’ em ‘self.version’ é
     substituída pelo nome do programa atual.  Não faz nada se
     ‘self.version’ estiver vazio ou indefinido.

 -- Método: OptionParser.get_version ()

     O mesmo que *note print_version(): 30dc, mas retorna a string da
     versão em vez de exibi-la.


File: python.info,  Node: Como optparse trata erros,  Next: Juntando tudo,  Prev: Exibindo uma string de versão,  Up: Tutorial<2>

5.17.2.16 Como ‘optparse’ trata erros
.....................................

Existem duas classes amplas de erros com os quais *note optparse: a0.
precisa se preocupar: erros do programador e erros do usuário.  Erros do
programador geralmente são chamadas errôneas para *note
OptionParser.add_option(): 30af, por exemplo, strings de opção
inválidas, atributos de opção desconhecidos, atributos de opção
ausentes, etc.  Eles são tratados da maneira usual: levanta uma exceção
(seja *note optparse.OptionError: 30b2. ou *note TypeError: 2c3.) e
deixe o programa travar.

Lidar com erros do usuário é muito mais importante, pois eles certamente
acontecerão não importa quão estável seu código seja.  *note optparse:
a0. pode detectar automaticamente alguns erros do usuário, como
argumentos de opção ruins (passando ‘-n 4x’ onde ‘-n’ recebe um
argumento inteiro), argumentos ausentes (‘-n’ no final da linha de
comando, onde ‘-n’ recebe um argumento de qualquer tipo).  Além disso,
você pode chamar ‘OptionParser.error()’ para sinalizar uma condição de
erro definida pelo aplicativo:

     (options, args) = parser.parse_args()
     ...
     if options.a and options.b:
         parser.error("options -a and -b are mutually exclusive")

Em ambos os casos, *note optparse: a0. lida com o erro da mesma maneira:
ele imprime a mensagem de uso do programa e uma mensagem de erro no erro
padrão e sai com o status de erro 2.

Considere o primeiro exemplo acima, onde o usuário passa ‘4x’ para uma
opção que aceita um inteiro:

     $ /usr/bin/foo -n 4x
     Usage: foo [options]

     foo: error: option -n: invalid integer value: '4x'

Ou, quando o usuário não passa nenhum valor:

     $ /usr/bin/foo -n
     Usage: foo [options]

     foo: error: -n option requires an argument

As mensagens de erro geradas pelo *note optparse: a0. tomam o cuidado de
sempre mencionar a opção envolvida no erro; certifique-se de fazer o
mesmo ao chamar ‘OptionParser.error()’ do código do sua aplicação.

Se o comportamento padrão de tratamento de erros do *note optparse: a0.
não atender às suas necessidades, você precisará criar uma subclasse de
OptionParser e substituir seus métodos ‘exit()’ e/ou ‘error()’.


File: python.info,  Node: Juntando tudo,  Prev: Como optparse trata erros,  Up: Tutorial<2>

5.17.2.17 Juntando tudo
.......................

Veja como os scripts baseados no *note optparse: a0. geralmente se
parecem:

     from optparse import OptionParser
     ...
     def main():
         usage = "usage: %prog [options] arg"
         parser = OptionParser(usage)
         parser.add_option("-f", "--file", dest="filename",
                           help="read data from FILENAME")
         parser.add_option("-v", "--verbose",
                           action="store_true", dest="verbose")
         parser.add_option("-q", "--quiet",
                           action="store_false", dest="verbose")
         ...
         (options, args) = parser.parse_args()
         if len(args) != 1:
             parser.error("incorrect number of arguments")
         if options.verbose:
             print("reading %s..." % options.filename)
         ...

     if __name__ == "__main__":
         main()


File: python.info,  Node: Guia de referência,  Next: Funções de retorno de opção,  Prev: Tutorial<2>,  Up: optparse — Analisador sintático para opções de linha de comando

5.17.2.18 Guia de referência
............................

* Menu:

* Criando o analisador sintático::
* Preenchendo o analisador sintático::
* Definindo as opções::
* Atributos da classe Option::
* Ações de opção padrão::
* Tipos de opção padrão::
* Análise de argumentos::
* Consultando e manipulando seu analisador sintático de opções::
* Conflitos entre opções::
* Limpeza::
* Outros métodos::


File: python.info,  Node: Criando o analisador sintático,  Next: Preenchendo o analisador sintático,  Up: Guia de referência

5.17.2.19 Criando o analisador sintático
........................................

O primeiro passo para usar o *note optparse: a0. é criar uma instância
de OptionParser.

 -- Classe: optparse.OptionParser (...)

     O construtor do OptionParser não tem argumentos obrigatórios, mas
     vários argumentos nomeados opcionais.  Você deve sempre passá-los
     como argumentos nomeados, ou seja, não confie na ordem em que os
     argumentos são declarados.

     ‘usage’ (padrão: ‘"%prog [options]"’)

          O resumo de uso para exibir quando seu programa é executado
          incorretamente ou com uma opção de ajuda.  Quando *note
          optparse: a0. exibe a string de uso, ele expande ‘%prog’ para
          ‘os.path.basename(sys.argv[0])’ (ou para ‘prog’ se você passou
          esse argumento nomeado).  Para suprimir uma mensagem de uso,
          passe o valor especial ‘optparse.SUPPRESS_USAGE’.

     ‘option_list’ (padrão: ‘[]’)

          Uma lista de objetos Option para preencher o analisador
          sintático.  As opções em ‘option_list’ são adicionadas após
          quaisquer opções em ‘standard_option_list’ (um atributo de
          classe que pode ser definido por subclasses de OptionParser),
          mas antes de quaisquer opções de versão ou ajuda.
          Descontinuado; use *note add_option(): 30af. após criar o
          analisador sintático.

     ‘option_class’ (padrão: optparse.Option)

          Classe para usar ao adicionar opções ao analisador sintático
          em *note add_option(): 30af.

     ‘version’ (padrão: ‘None’)

          Uma string de versão para exibir quando o usuário fornece uma
          opção de versão.  Se você fornecer um valor true para
          ‘version’, *note optparse: a0. adiciona automaticamente uma
          opção de versão com a string de opção única ‘--version’.  A
          substring ‘%prog’ é expandida da mesma forma que para ‘usage’.

     ‘conflict_handler’ (padrão: ‘"error"’)

          Especifica o que fazer quando opções com strings de opções
          conflitantes são adicionadas ao analisador sintático; consulte
          a seção *note Conflitos entre opções: 30e6.

     ‘description’ (padrão: ‘None’)

          Um parágrafo de texto que fornece uma breve visão geral do seu
          programa.  *note optparse: a0. reformata este parágrafo para
          ajustá-lo à largura atual do terminal e o exibe quando o
          usuário solicita ajuda (depois de ‘usage’, mas antes da lista
          de opções).

     ‘formatter’ (padrão: um novo ‘IndentedHelpFormatter’)

          Uma instância de optparse.HelpFormatter que será usada para
          exibir um texto de ajuda.  *note optparse: a0. fornece duas
          classes concretas para essa finalidade: IndentedHelpFormatter
          e TitledHelpFormatter.

     ‘add_help_option’ (padrão: ‘True’)

          Se verdadeiro, *note optparse: a0. adicionará uma opção de
          ajuda (com strings de opção ‘-h’ e ‘--help’) ao analisador
          sintático.

     ‘prog’

          A string a ser usada ao expandir ‘%prog’ em ‘usage’ e
          ‘version’ em vez de ‘os.path.basename(sys.argv[0])’.

     ‘epilog’ (padrão: ‘None’)

          Um parágrafo de texto de ajuda para exibir após a ajuda da
          opção.


File: python.info,  Node: Preenchendo o analisador sintático,  Next: Definindo as opções,  Prev: Criando o analisador sintático,  Up: Guia de referência

5.17.2.20 Preenchendo o analisador sintático
............................................

Há várias maneiras de preencher o analisador sintático com opções.  A
maneira preferida é usando *note OptionParser.add_option(): 30af, como
mostrado na seção *note Tutorial: 30c1.  ‘add_option()’ pode ser chamado
de uma das duas maneiras:

   * passar uma instância de Option (conforme retornado por
     ‘make_option()’)

   * passar qualquer combinação de argumentos nomeados e posicionais que
     sejam aceitáveis para ‘make_option()’ (ou seja, para o construtor
     de Option), e ela criará a instância de Option para você

A outra alternativa é passar uma lista de instâncias de Option
pré-construídas para o construtor de OptionParser, como em:

     option_list = [
         make_option("-f", "--filename",
                     action="store", type="string", dest="filename"),
         make_option("-q", "--quiet",
                     action="store_false", dest="verbose"),
         ]
     parser = OptionParser(option_list=option_list)

(‘make_option()’ é uma função de fábrica para criar instâncias de
Option; atualmente é um apelido para o construtor de Option.  Uma versão
futura de *note optparse: a0. pode dividir Option em várias classes, e
‘make_option()’ escolherá a classe certa para instanciar.  Não instancie
Option diretamente.)


File: python.info,  Node: Definindo as opções,  Next: Atributos da classe Option,  Prev: Preenchendo o analisador sintático,  Up: Guia de referência

5.17.2.21 Definindo as opções
.............................

Cada instância de Option representa um conjunto de strings de opções de
linha de comando sinônimas, por exemplo, ‘-f’ e ‘--file’.  Você pode
especificar qualquer número de strings de opções curtas ou longas, mas
deve especificar pelo menos uma string de opção geral.

A maneira canônica de criar uma instância de *note Option: 30eb. é com o
método ‘add_option()’ de *note OptionParser: 1515.

 -- Método: OptionParser.add_option (option)

 -- Método: OptionParser.add_option (*opt_str, attr=value, ...)

     Para definir uma opção com apenas uma sequência de opções curta:

          parser.add_option("-f", attr=value, ...)

     E para definir uma opção com apenas uma longa sequência de opções:

          parser.add_option("--foo", attr=value, ...)

     Os argumentos nomeados definem atributos do novo objeto Option.  O
     atributo option mais importante é *note action: 30c3, e ele
     determina amplamente quais outros atributos são relevantes ou
     obrigatórios.  Se você passar atributos option irrelevantes, ou
     deixar de passar os obrigatórios, *note optparse: a0. levanta uma
     exceção *note OptionError: 30b2. explicando seu erro.

     A 'action' de uma opção determina o que *note optparse: a0. faz
     quando encontra essa opção na linha de comando.  As ações de opção
     padrão codificadas no *note optparse: a0. são:

     ‘"store"’

          armazena o argumento desta opção (padrão)

     ‘"store_const"’

          armazena um valor constante, predefinido via *note
          Option.const: 30d0.

     ‘"store_true"’

          armazena ‘True’

     ‘"store_false"’

          armazena ‘False’

     ‘"append"’

          anexa o argumento desta opção a uma lista

     ‘"append_const"’

          anexar um valor constante a uma lista, predefinido via *note
          Option.const: 30d0.

     ‘"count"’

          incrementa um contador em um

     ‘"callback"’

          chama uma função especificada

     ‘"help"’

          exibe uma mensagem de uso incluindo todas as opções e a
          documentação para elas

     (Se você não fornecer uma ação, o padrão é ‘"store"’.  Para esta
     ação, você também pode fornecer os atributos de opção *note type:
     30c4. e *note dest: 30c5.; consulte *note Ações de opção padrão:
     30ec.)

Como você pode ver, a maioria das ações envolve armazenar ou atualizar
um valor em algum lugar.  *note optparse: a0. sempre cria um objeto
especial para isso, convencionalmente chamado de ‘options’, que é uma
instância de *note optparse.Values: 30b1.

 -- Classe: optparse.Values

     Um objeto que contém nomes e valores de argumentos analisados como
     atributos.  Normalmente criado chamando ao chamar *note
     OptionParser.parse_args(): 1516, e pode ser substituído por uma
     subclasse personalizada passada para o argumento 'values' de *note
     OptionParser.parse_args(): 1516. (conforme descrito em *note
     Análise de argumentos: 30ed.).

Argumentos de opção (e vários outros valores) são armazenados como
atributos deste objeto, de acordo com o atributo de opção *note dest:
30c5. (destino).

Por exemplo, quando você chama

     parser.parse_args()

uma das primeiras coisas que *note optparse: a0. faz é criar o objeto
‘options’:

     options = Values()

Se uma das opções neste analisador sintático for definida com

     parser.add_option("-f", "--file", action="store", type="string", dest="filename")

e a linha de comando que está sendo analisada inclui qualquer um dos
seguintes:

     -ffoo
     -f foo
     --file=foo
     --file foo

então *note optparse: a0, ao ver esta opção, fará o equivalente a

     options.filename = "foo"

Os atributos de opção *note type: 30c4. e *note dest: 30c5. são quase
tão importantes quanto *note action: 30c3, mas *note action: 30c3. é o
único que faz sentido para 'todas' as opções.


File: python.info,  Node: Atributos da classe Option,  Next: Ações de opção padrão,  Prev: Definindo as opções,  Up: Guia de referência

5.17.2.22 Atributos da classe Option
....................................

 -- Classe: optparse.Option

     Um único argumento de linha de comando, com vários atributos
     passados como nomeados para o construtor.  Normalmente criado com
     *note OptionParser.add_option(): 30af. em vez de diretamente, e
     pode ser substituído por uma classe personalizada por meio do
     argumento 'option_class' para *note OptionParser: 1515.

Os seguintes atributos de opção podem ser passados como argumentos
nomeados para *note OptionParser.add_option(): 30af.  Se você passar um
atributo de opção que não seja relevante para uma opção específica, ou
deixar de passar um atributo de opção obrigatório, *note optparse: a0.
levanta *note OptionError: 30b2.

 -- Atributo: Option.action

     (padrão: ‘"store"’)

     Determina o comportamento de *note optparse: a0. quando esta opção
     é vista na linha de comando; as opções disponíveis estão
     documentadas *note aqui: 30ec.

 -- Atributo: Option.type

     (padrão: ‘"string"’)

     O tipo de argumento esperado por esta opção (por exemplo,
     ‘"string"’ ou ‘"int"’); os tipos de opções disponíveis estão
     documentados *note aqui: 30f0.

 -- Atributo: Option.dest

     (padrão: derivado de strings de opção)

     Se a ação da opção implicar escrever ou modificar um valor em algum
     lugar, isso informa ao *note optparse: a0. onde escrevê-lo: *note
     dest: 30c5. nomeia um atributo do objeto ‘options’ que o *note
     optparse: a0. constrói ao analisar a linha de comando.

 -- Atributo: Option.default

     O valor para usar para o destino desta opção se a opção não for
     vista na linha de comando.  Veja também *note
     OptionParser.set_defaults(): 30f2.

 -- Atributo: Option.nargs

     (padrão: 1)

     Quantos argumentos do tipo *note type: 30c4. devem ser consumidos
     quando esta opção for vista.  Se > 1, *note optparse: a0.
     armazenará uma tupla de valores em *note dest: 30c5.

 -- Atributo: Option.const

     Para ações que armazenam um valor constante, o valor constante a
     ser armazenado.

 -- Atributo: Option.choices

     Para opções do tipo ‘"choice"’, a lista de strings que o usuário
     pode escolher.

 -- Atributo: Option.callback

     Para opções com ação ‘"callback"’, o chamável para chamar quando
     esta opção for vista.  Veja a seção *note Funções de retorno de
     opção: 30d2. para detalhes sobre os argumentos passados para o
     chamável.

 -- Atributo: Option.callback_args
 -- Atributo: Option.callback_kwargs

     Argumentos nomeados e posicionais adicionais para passar para
     ‘callback’ após os quatro argumentos de retorno de chamada padrão.

 -- Atributo: Option.help

     Texto de ajuda para exibir para esta opção ao listar todas as
     opções disponíveis após o usuário fornecer uma opção *note help:
     30c6. (como ‘--help’).  Se nenhum texto de ajuda for fornecido, a
     opção será listada sem texto de ajuda.  Para ocultar esta opção,
     use o valor especial ‘optparse.SUPPRESS_HELP’.

 -- Atributo: Option.metavar

     (padrão: derivado de strings de opção)

     Substituto para o(s) argumento(s) de opção a ser(em) usado(s) ao
     exibir texto de ajuda.  Veja a seção *note Tutorial: 30c1. para um
     exemplo.


File: python.info,  Node: Ações de opção padrão,  Next: Tipos de opção padrão,  Prev: Atributos da classe Option,  Up: Guia de referência

5.17.2.23 Ações de opção padrão
...............................

As várias ações de opção têm requisitos e efeitos ligeiramente
diferentes.  A maioria das ações tem vários atributos de opção
relevantes que você pode especificar para guiar o comportamento de *note
optparse: a0.; algumas têm atributos obrigatórios, que você deve
especificar para qualquer opção que use essa ação.

   * ‘"store"’ [relevante: *note type: 30c4, *note dest: 30c5, *note
     nargs: 30f3, *note choices: 30f4.]

     A opção deve ser seguida por um argumento, que é convertido em um
     valor de acordo com *note type: 30c4. e armazenado em *note dest:
     30c5.  Se *note nargs: 30f3. > 1, vários argumentos serão
     consumidos da linha de comando; todos serão convertidos de acordo
     com *note type: 30c4. e armazenados em *note dest: 30c5. como uma
     tupla.  Veja a seção *note Tipos de opção padrão: 30f0.

     Se *note choices: 30f4. for fornecido (uma lista ou tupla de
     strings), o tipo padrão será ‘"choice"’.

     Se *note type: 30c4. não for fornecido, o padrão será ‘"string"’.

     Se *note dest: 30c5. não for fornecido, *note optparse: a0. deriva
     um destino da primeira string de opção longa (por exemplo,
     ‘--foo-bar’ implica ‘foo_bar’).  Se não houver strings de opção
     longas, *note optparse: a0. deriva um destino da primeira string de
     opção curta (por exemplo, ‘-f’ implica ‘f’).

     Exemplo:

          parser.add_option("-f")
          parser.add_option("-p", type="float", nargs=3, dest="point")

     Como ele analisa a linha de comando

          -f foo.txt -p 1 -3.5 4 -fbar.txt

     *note optparse: a0. vai definir

          options.f = "foo.txt"
          options.point = (1.0, -3.5, 4.0)
          options.f = "bar.txt"

   * ‘"store_const"’ [obrigatório: *note const: 30d0.; relevante: *note
     dest: 30c5.]

     O valor de *note const: 30d0. é armazenado em *note dest: 30c5.

     Exemplo:

          parser.add_option("-q", "--quiet",
                            action="store_const", const=0, dest="verbose")
          parser.add_option("-v", "--verbose",
                            action="store_const", const=1, dest="verbose")
          parser.add_option("--noisy",
                            action="store_const", const=2, dest="verbose")

     Se ‘--noisy’ é encontrado, *note optparse: a0. vai definir

          options.verbose = 2

   * ‘"store_true"’ [relevante: *note dest: 30c5.]

     Um caso especial de ‘"store_const"’ que armazena ‘True’ em *note
     dest: 30c5.

   * ‘"store_false"’ [relevante: *note dest: 30c5.]

     Como ‘"store_true"’, mas armazenad ‘False’.

     Exemplo:

          parser.add_option("--clobber", action="store_true", dest="clobber")
          parser.add_option("--no-clobber", action="store_false", dest="clobber")

   * ‘"append"’ [relevante: *note type: 30c4, *note dest: 30c5, *note
     nargs: 30f3, *note choices: 30f4.]

     A opção deve ser seguida por um argumento, que é anexado à lista em
     *note dest: 30c5.  Se nenhum valor padrão para *note dest: 30c5.
     for fornecido, uma lista vazia será criada automaticamente quando
     *note optparse: a0. encontrar esta opção pela primeira vez na linha
     de comando.  Se *note nargs: 30f3. > 1, vários argumentos serão
     consumidos e uma tupla de comprimento *note nargs: 30f3. será
     anexada a *note dest: 30c5.

     Os padrões para *note type: 30c4. e *note dest: 30c5. são os mesmos
     da ação ‘"store"’.

     Exemplo:

          parser.add_option("-t", "--tracks", action="append", type="int")

     Se ‘-t3’ for encontrado na linha de comando, *note optparse: a0.
     faz o equivalente a:

          options.tracks = []
          options.tracks.append(int("3"))

     Se, um pouco mais tarde, ‘--tracks=4’ for encontrado, ele faz:

          options.tracks.append(int("4"))

     A ação ‘append’ chama o método ‘append’ no valor atual da opção.
     Isso significa que qualquer valor padrão especificado deve ter um
     método ‘append’.  Isso também significa que se o valor padrão não
     for vazio, os elementos padrão estarão presentes no valor analisado
     para a opção, com quaisquer valores da linha de comando anexados
     após esses valores padrão:

          >>> parser.add_option("--files", action="append", default=['~/.mypkg/defaults'])
          >>> opts, args = parser.parse_args(['--files', 'overrides.mypkg'])
          >>> opts.files
          ['~/.mypkg/defaults', 'overrides.mypkg']

   * ‘"append_const"’ [obrigatório: *note const: 30d0.; relevante: *note
     dest: 30c5.]

     Como ‘"store_const"’, mas o valor de *note const: 30d0. é anexado a
     *note dest: 30c5.; assim como em ‘"append"’, *note dest: 30c5.
     assume como padrão ‘None’, e uma lista vazia é criada
     automaticamente na primeira vez que a opção é encontrada.

   * ‘"count"’ [relevante: *note dest: 30c5.]

     Incrementa o inteiro armazenado em *note dest: 30c5.  Se nenhum
     valor padrão for fornecido, *note dest: 30c5. é definido como zero
     antes de ser incrementado pela primeira vez.

     Exemplo:

          parser.add_option("-v", action="count", dest="verbosity")

     A primeira vez que ‘-v’ é encontrado na linha de comando, *note
     optparse: a0. faz o equivalente a:

          options.verbosity = 0
          options.verbosity += 1

     Cada ocorrência subsequente de ‘-v’ resulta em

          options.verbosity += 1

   * ‘"callback"’ [obrigatório: *note callback: 30f5.; relevante: *note
     type: 30c4, *note nargs: 30f3, *note callback_args: 30f6, *note
     callback_kwargs: 30f7.]

     Chama a função especificada por *note callback: 30f5, que é chamada
     como

          func(option, opt_str, value, parser, *args, **kwargs)

     Veja a seção *note Funções de retorno de opção: 30d2. para mais
     detalhes.

   * ‘"help"’

     Exibe uma mensagem de ajuda completa para todas as opções no
     analisador sintático de opções atual.  A mensagem de ajuda é
     construída a partir da string ‘usage’ passada para o construtor do
     OptionParser e da string *note help: 30c6. passada para cada opção.

     Se nenhuma string de *note help: 30c6. for fornecida para uma
     opção, ela ainda será listada na mensagem de ajuda.  Para omitir
     uma opção completamente, use o valor especial
     ‘optparse.SUPPRESS_HELP’.

     *note optparse: a0. adiciona automaticamente uma opção *note help:
     30c6. a todos as instâncias de OptionParsers, então normalmente
     você não precisa criar uma.

     Exemplo:

          from optparse import OptionParser, SUPPRESS_HELP

          # geralmente, uma opção de ajuda é adicionada
          # automaticamente, mas que podem ser suprimida
          # usando o argumento add_help_option
          parser = OptionParser(add_help_option=False)

          parser.add_option("-h", "--help", action="help")
          parser.add_option("-v", action="store_true", dest="verbose",
                            help="Be moderately verbose")
          parser.add_option("--file", dest="filename",
                            help="Input file to read data from")
          parser.add_option("--secret", help=SUPPRESS_HELP)

     Se *note optparse: a0. encontrar ‘-h’ ou ‘--help’ na linha de
     comando, ele vai exibir algo como a seguinte mensagem de ajuda no
     stdout (presumindo que ‘sys.argv[0]’ é ‘"foo.py"’):

          Usage: foo.py [options]

          Options:
            -h, --help        Show this help message and exit
            -v                Be moderately verbose
            --file=FILENAME   Input file to read data from

     Após exibir a mensagem de ajuda, *note optparse: a0. encerra seu
     processo com ‘sys.exit(0)’.

   * ‘"version"’

     Exibe o número da versão fornecido à instância de OptionParser para
     stdout e sai.  O número da versão é realmente formatado e exibido
     pelo método ‘print_version()’ do OptionParser.  Geralmente, é
     relevante somente se o argumento ‘version’ for fornecido ao
     construtor de OptionParser.  Assim como com as opções de *note
     help: 30c6, você raramente criará opções ‘version’, já que *note
     optparse: a0. as adiciona automaticamente quando necessário.


File: python.info,  Node: Tipos de opção padrão,  Next: Análise de argumentos,  Prev: Ações de opção padrão,  Up: Guia de referência

5.17.2.24 Tipos de opção padrão
...............................

*note optparse: a0. tem cinco tipos de opções embutidos: ‘"string"’,
‘"int"’, ‘"choice"’, ‘"float"’ e ‘"complex"’.  Se você precisar
adicionar novos tipos de opções, veja a seção *note Estendendo optparse:
30c9.

Os argumentos para opções de string não são verificados ou convertidos
de forma alguma: o texto na linha de comando é armazenado no destino (ou
passado para a função de retorno) como está.

Argumentos inteiros (tipo ‘"int"’) são analisados da seguinte forma:

   * se o número começar com ‘0x’, ele será analisado como um número
     hexadecimal

   * se o número começar com ‘0’, ele será analisado como um número
     octal

   * se o número começar com ‘0b’, ele será analisado como um número
     binário

   * caso contrário, o número é analisado como um número decimal

A conversão é feita chamando *note int(): 257. com a base apropriada (2,
8, 10 ou 16).  Se isso falhar, *note optparse: a0. também falhará,
embora com uma mensagem de erro mais útil.

Os argumentos de opção ‘"float"’ e ‘"complex"’ são convertidos
diretamente com *note float(): 2f7. e *note complex(): 2f8, com
tratamento de erros semelhante.

As opções ‘"choice"’ são um subtipo das opções ‘"string"’.  O atributo
da opção *note choices: 30f4. (uma sequência de strings) define o
conjunto de argumentos de opção permitidos.  ‘optparse.check_choice()’
compara os argumentos de opção fornecidos pelo usuário com esta lista
mestre e levanta *note OptionValueError: 30b3. se uma string inválida
for fornecida.


File: python.info,  Node: Análise de argumentos,  Next: Consultando e manipulando seu analisador sintático de opções,  Prev: Tipos de opção padrão,  Up: Guia de referência

5.17.2.25 Análise de argumentos
...............................

O objetivo de criar e preencher uma instância de OptionParser é chamar
seu método *note parse_args(): 1516.

 -- Método: OptionParser.parse_args (args=None, values=None)

     Analisa as opções de linha de comando encontradas em 'args'.

     Os parâmetros de entrada são

     ‘args’

          a lista de argumentos para processar (padrão: ‘sys.argv[1:]’)

     ‘values’

          um objeto *note Values: 30b1. para armazenar argumentos de
          opção (padrão: uma nova instância de *note Values: 30b1.) – se
          você fornecer um objeto existente, os padrões de opção não
          serão inicializados nele

     e o valor de retorno é um par ‘(options, args)’ sendo

     ‘options’

          o mesmo objeto que foi passado como 'values', ou a instância
          ‘optparse.Values’ criada por *note optparse: a0.

     ‘args’

          os argumentos posicionais restantes depois que todas as opções
          foram processadas

O uso mais comum é não fornecer nenhum argumento nomeado.  Se você
fornecer ‘values’, ele será modificado com chamadas repetidas de *note
setattr(): 22f3. (aproximadamente uma para cada argumento de opção
armazenado em um destino de opção) e retornado por *note parse_args():
1516.

Se *note parse_args(): 1516. encontrar algum erro na lista de
argumentos, ele chama o método ‘error()’ da instância de OptionParser
com uma mensagem de erro apropriada para o usuário final.  Isso, em
última análise, encerra seu processo com um status de saída 2 (o status
de saída tradicional do Unix para erros de linha de comando).


File: python.info,  Node: Consultando e manipulando seu analisador sintático de opções,  Next: Conflitos entre opções,  Prev: Análise de argumentos,  Up: Guia de referência

5.17.2.26 Consultando e manipulando seu analisador sintático de opções
......................................................................

O comportamento padrão do analisador sintático de opções pode ser
ligeiramente personalizado, e você também pode dar uma olhada no seu
analisador de opções e ver o que há lá.  A classe OptionParser fornece
vários métodos para ajudar você:

 -- Método: OptionParser.disable_interspersed_args ()

     Define a análise para parar na primeira não opção.  Por exemplo, se
     ‘-a’ e ‘-b’ forem ambas opções simples que não aceitam argumentos,
     *note optparse: a0. normalmente aceita esta sintaxe:

          prog -a arg1 -b arg2

     e trata-a como equivalente a

          prog -a -b arg1 arg2

     Para desabilitar esse recurso, chame *note
     disable_interspersed_args(): 30b0.  Isso restaura a sintaxe Unix
     tradicional, onde a análise de opções para com o primeiro argumento
     não-opcional.

     Use isto se você tiver um processador de comando que executa outro
     comando que tem opções próprias e você quer ter certeza de que
     essas opções não fiquem confusas.  Por exemplo, cada comando pode
     ter um conjunto diferente de opções.

 -- Método: OptionParser.enable_interspersed_args ()

     Define a análise para não parar na primeira não opção, permitindo
     intercalar alternadores com argumentos de comando.  Esse é o
     comportamento padrão.

 -- Método: OptionParser.get_option (opt_str)

     Retorna a instância de Option com a string de opção 'opt_str', ou
     ‘None’ se nenhuma opção tiver essa string de opção.

 -- Método: OptionParser.has_option (opt_str)

     Retorna ‘True’ se o objeto OptionParser tiver uma opção com string
     de opção 'opt_str' (por exemplo, ‘-q’ ou ‘--verbose’).

 -- Método: OptionParser.remove_option (opt_str)

     Se o *note OptionParser: 1515. tiver uma opção correspondente a
     'opt_str', essa opção será removida.  Se essa opção fornecer
     quaisquer outras strings de opção, todas essas strings de opção se
     tornarão inválidas.  Se 'opt_str' não ocorrer em nenhuma opção
     pertencente a este *note OptionParser: 1515, levanta *note
     ValueError: 202.


File: python.info,  Node: Conflitos entre opções,  Next: Limpeza,  Prev: Consultando e manipulando seu analisador sintático de opções,  Up: Guia de referência

5.17.2.27 Conflitos entre opções
................................

Se você não tomar cuidado, é fácil definir opções com strings de opções
conflitantes:

     parser.add_option("-n", "--dry-run", ...)
     ...
     parser.add_option("-n", "--noisy", ...)

(Isto é particularmente verdadeiro se você definiu sua própria subclasse
de OptionParser com algumas opções padrão.)

Toda vez que você adiciona uma opção, *note optparse: a0. verifica se há
conflitos com opções existentes.  Se encontrar algum, ele invoca o
mecanismo de tratamento de conflitos atual.  Você pode definir o
mecanismo de tratamento de conflitos no construtor:

     parser = OptionParser(..., conflict_handler=handler)

ou com uma chamada separada:

     parser.set_conflict_handler(handler)

Os manipuladores de conflitos disponíveis são:

     ‘"error"’ (padrão)

          presume que os conflitos de opções são um erro de programação
          e levanta *note OptionConflictError: 3103.

     ‘"resolve"’

          resolve conflitos de opções de forma inteligente (veja abaixo)

Como exemplo, vamos definir um *note OptionParser: 1515. que resolve
conflitos de forma inteligente e adiciona opções conflitantes a ele:

     parser = OptionParser(conflict_handler="resolve")
     parser.add_option("-n", "--dry-run", ..., help="do no harm")
     parser.add_option("-n", "--noisy", ..., help="be noisy")

Neste ponto, *note optparse: a0. detecta que uma opção adicionada
anteriormente já está usando a string de opção ‘-n’.  Como
‘conflict_handler’ é ‘"resolve"’, ele resolve a situação removendo ‘-n’
da lista de strings de opção da opção anterior.  Agora ‘--dry-run’ é a
única maneira do usuário ativar essa opção.  Se o usuário pedir ajuda, a
mensagem de ajuda refletirá isso:

     Options:
       --dry-run     do no harm
       ...
       -n, --noisy   be noisy

É possível reduzir as strings de opção para uma opção adicionada
anteriormente até que não haja mais nenhuma, e o usuário não tenha como
invocar essa opção da linha de comando.  Nesse caso, *note optparse: a0.
remove essa opção completamente, então ela não aparece no texto de ajuda
ou em nenhum outro lugar.  Continuando com nosso objeto OptionParser
existente:

     parser.add_option("--dry-run", ..., help="new dry-run option")

Neste ponto, a opção original ‘-n’/‘--dry-run’ não está mais acessível,
então *note optparse: a0. a remove, deixando este texto de ajuda:

     Options:
       ...
       -n, --noisy   be noisy
       --dry-run     new dry-run option


File: python.info,  Node: Limpeza,  Next: Outros métodos,  Prev: Conflitos entre opções,  Up: Guia de referência

5.17.2.28 Limpeza
.................

As instâncias de OptionParser têm várias referências cíclicas.  Isso não
deve ser um problema para o coletor de lixo do Python, mas você pode
desejar quebrar as referências cíclicas explicitamente chamando
‘destroy()’ no seu OptionParser quando terminar de usá-lo.  Isso é
particularmente útil em aplicações de longa execução, onde gráficos de
objetos grandes podem ser acessados do seu OptionParser.


File: python.info,  Node: Outros métodos,  Prev: Limpeza,  Up: Guia de referência

5.17.2.29 Outros métodos
........................

OptionParser provê vários outros métodos públicos:

 -- Método: OptionParser.set_usage (usage)

     Defina a string de uso de acordo com as regras descritas acima para
     o argumento nomeado do construtor ‘usage’.  Passar ‘None’ define a
     string de uso padrão; use ‘optparse.SUPPRESS_USAGE’ para suprimir
     uma mensagem de uso.

 -- Método: OptionParser.print_usage (file=None)

     Exibe a mensagem de uso para o programa atual (‘self.usage’) em
     'file' (stdout padrão).  Qualquer ocorrência da string ‘%prog’ em
     ‘self.usage’ é substituída pelo nome do programa atual.  Não faz
     nada se ‘self.usage’ estiver vazio ou não definido.

 -- Método: OptionParser.get_usage ()

     O mesmo que *note print_usage(): 30dd, mas retorna a string de uso
     em vez de exibi-la.

 -- Método: OptionParser.set_defaults (dest=value, ...)

     Define valores padrão para vários destinos de opção de uma vez.
     Usar *note set_defaults(): 30f2. é a maneira preferida de definir
     valores padrão para opções, já que várias opções podem compartilhar
     o mesmo destino.  Por exemplo, se várias opções de “modo” definirem
     o mesmo destino, qualquer uma delas pode definir o padrão, e a
     última vence:

          parser.add_option("--advanced", action="store_const",
                            dest="mode", const="advanced",
                            default="novice")    # substituída abaixo
          parser.add_option("--novice", action="store_const",
                            dest="mode", const="novice",
                            default="advanced")  # substitui a configuração acima

     Para evitar essa confusão, use *note set_defaults(): 30f2.:

          parser.set_defaults(mode="advanced")
          parser.add_option("--advanced", action="store_const",
                            dest="mode", const="advanced")
          parser.add_option("--novice", action="store_const",
                            dest="mode", const="novice")


File: python.info,  Node: Funções de retorno de opção,  Next: Estendendo optparse,  Prev: Guia de referência,  Up: optparse — Analisador sintático para opções de linha de comando

5.17.2.30 Funções de retorno de opção
.....................................

Quando as ações e tipos embutidos de *note optparse: a0. não são o
bastante para suas necessidades, você tem duas escolhas: estender *note
optparse: a0. ou definir uma opção de retorno de chamada.  Estender
*note optparse: a0. é mais geral, mas exagero para muitos casos simples.
Muitas vezes, um retorno de chamada simples é tudo o que você precisa.

Há duas etapas para definir uma opção de retorno de chamada:

   * definir a opção em si usando a ação ‘"callback"’

   * escrever o função de retorno; esta é uma função (ou método) que
     recebe pelo menos quatro argumentos, conforme descrito abaixo

* Menu:

* Definindo uma opção de retorno de chamada::
* Como os retornos de chamada são chamados::
* Levantando erros em uma função de retorno::
* Exemplo de função de retorno 1; retorno de chamada trivial: Exemplo de função de retorno 1 retorno de chamada trivial.
* Exemplo de função de retorno 2; verificar a ordem das opções: Exemplo de função de retorno 2 verificar a ordem das opções.
* Exemplo 3 de função de retorno; verificar a ordem das opções (generalizada): Exemplo 3 de função de retorno verificar a ordem das opções generalizada.
* Exemplo de função de retorno 4; verificar uma condição arbitrária: Exemplo de função de retorno 4 verificar uma condição arbitrária.
* Exemplo de função de retorno 5; argumentos fixos: Exemplo de função de retorno 5 argumentos fixos.
* Exemplo de função de retorno 6; argumentos variáveis: Exemplo de função de retorno 6 argumentos variáveis.


File: python.info,  Node: Definindo uma opção de retorno de chamada,  Next: Como os retornos de chamada são chamados,  Up: Funções de retorno de opção

5.17.2.31 Definindo uma opção de retorno de chamada
...................................................

Como sempre, a maneira mais fácil de definir uma opção de retorno de
chamada é usando o método *note OptionParser.add_option(): 30af.  Além
de *note action: 30c3, o único atributo de opção que você deve
especificar é ‘callback’, a função a ser chamada:

     parser.add_option("-c", action="callback", callback=my_callback)

‘callback’ é uma função (ou outro objeto chamável), então você já deve
ter definido ‘my_callback()’ quando criar esta opção de retorno de
chamada.  Neste caso simples, *note optparse: a0. nem sabe se ‘-c’
aceita argumentos, o que geralmente significa que a opção não aceita
argumentos — a mera presença de ‘-c’ na linha de comando é tudo o que
ela precisa saber.  Em algumas circunstâncias, no entanto, você pode
querer que seu retorno de chamada consuma um número arbitrário de
argumentos de linha de comando.  É aqui que escrever retornos de chamada
fica complicado; isso é abordado mais adiante nesta seção.

*note optparse: a0. sempre passa quatro argumentos particulares para seu
retorno de chamada, e ele só passará argumentos adicionais se você
especificá-los via *note callback_args: 30f6. e *note callback_kwargs:
30f7.  Assim, a assinatura mínima da função de retorno de chamada é:

     def my_callback(option, opt, value, parser):

Os quatro argumentos para um retorno de chamada são descritos abaixo.

Há vários outros atributos de opção que você pode fornecer ao definir
uma opção de retorno de chamada:

*note type: 30c4.

     tem seu significado usual: como com as ações ‘"store"’ ou
     ‘"append"’, ele instrui *note optparse: a0. a consumir um argumento
     e convertê-lo para *note type: 30c4.  Em vez de armazenar o(s)
     valor(es) convertido(s) em qualquer lugar, no entanto, *note
     optparse: a0. os passa para sua função de retorno de chamada.

*note nargs: 30f3.

     também tem seu significado usual: se for fornecido e > 1, *note
     optparse: a0. consumirá argumentos *note nargs: 30f3, cada um dos
     quais deve ser conversível para *note type: 30c4.  Em seguida, ele
     passa uma tupla de valores convertidos para seu retorno de chamada.

*note callback_args: 30f6.

     uma tupla de argumentos posicionais extras para passar para a
     função de retorno

*note callback_kwargs: 30f7.

     um dicionário de argumentos nomeados extras para passar para a
     função de retorno


File: python.info,  Node: Como os retornos de chamada são chamados,  Next: Levantando erros em uma função de retorno,  Prev: Definindo uma opção de retorno de chamada,  Up: Funções de retorno de opção

5.17.2.32 Como os retornos de chamada são chamados
..................................................

Todos os retornos de chamada são chamados da seguinte forma:

     func(option, opt_str, value, parser, *args, **kwargs)

onde

‘option’

     é a instância de Option que está chamando o retorno de chamada

‘opt_str’

     é a string de opção vista na linha de comando que está acionando o
     retorno de chamada.  (Se uma opção longa abreviada foi usada,
     ‘opt_str’ será a string de opção canônica completa — por exemplo,
     se o usuário colocar ‘--foo’ na linha de comando como uma
     abreviação para ‘--foobar’, então ‘opt_str’ será ‘"--foobar"’.)

‘value’

     é o argumento para esta opção visto na linha de comando.  *note
     optparse: a0. só esperará um argumento se *note type: 30c4. estiver
     definido; o tipo de ‘value’ será o tipo implícito pelo tipo da
     opção.  Se *note type: 30c4. para esta opção for ‘None’ (nenhum
     argumento esperado), então ‘value’ será ‘None’.  Se *note nargs:
     30f3. > 1, ‘value’ será uma tupla de valores do tipo apropriado.

‘parser’

     é a instância OptionParser que controla tudo, útil principalmente
     porque você pode acessar alguns outros dados interessantes por meio
     de seus atributos de instância:

     ‘parser.largs’

          a lista atual de argumentos restantes, ou seja, argumentos que
          foram consumidos, mas não são opções nem argumentos de opção.
          Sinta-se à vontade para modificar ‘parser.largs’, por exemplo,
          adicionando mais argumentos a ele.  (Esta lista se tornará
          ‘args’, o segundo valor de retorno de *note parse_args():
          1516.)

     ‘parser.rargs’

          a lista atual de argumentos restantes, ou seja, com ‘opt_str’
          e ‘value’ (se aplicável) removidos, e apenas os argumentos que
          os seguem ainda lá.  Sinta-se à vontade para modificar
          ‘parser.rargs’, por exemplo, consumindo mais argumentos.

     ‘parser.values’

          o objeto onde os valores de opção são armazenados por padrão
          (uma instância de optparse.OptionValues).  Isso permite que as
          função de retorno usem o mesmo mecanismo que o resto de *note
          optparse: a0. para armazenar valores de opção; você não
          precisa mexer com globais ou closures.  Você também pode
          acessar ou modificar o(s) valor(es) de quaisquer opções já
          encontradas na linha de comando.

‘args’

     é uma tupla de argumentos posicionais arbitrários fornecidos por
     meio do atributo de opção *note callback_args: 30f6.

‘kwargs’

     é um dicionário de argumentos nomeados arbitrários fornecidos via
     *note callback_kwargs: 30f7.


File: python.info,  Node: Levantando erros em uma função de retorno,  Next: Exemplo de função de retorno 1 retorno de chamada trivial,  Prev: Como os retornos de chamada são chamados,  Up: Funções de retorno de opção

5.17.2.33 Levantando erros em uma função de retorno
...................................................

A função de retorno de chamada deve levantar *note OptionValueError:
30b3. se houver algum problema com a opção ou seu(s) argumento(s).
*note optparse: a0. captura isso e encerra o programa, exibindo a
mensagem de erro que você fornece para stderr.  Sua mensagem deve ser
clara, concisa, precisa e mencionar a opção com defeito.  Caso
contrário, o usuário terá dificuldade em descobrir o que fez de errado.


File: python.info,  Node: Exemplo de função de retorno 1 retorno de chamada trivial,  Next: Exemplo de função de retorno 2 verificar a ordem das opções,  Prev: Levantando erros em uma função de retorno,  Up: Funções de retorno de opção

5.17.2.34 Exemplo de função de retorno 1: retorno de chamada trivial
....................................................................

Aqui está um exemplo de uma opção de retorno de chamada que não aceita
argumentos e simplesmente registra que a opção foi vista:

     def record_foo_seen(option, opt_str, value, parser):
         parser.values.saw_foo = True

     parser.add_option("--foo", action="callback", callback=record_foo_seen)

Claro, você pode fazer isso com a ação ‘"store_true"’.


File: python.info,  Node: Exemplo de função de retorno 2 verificar a ordem das opções,  Next: Exemplo 3 de função de retorno verificar a ordem das opções generalizada,  Prev: Exemplo de função de retorno 1 retorno de chamada trivial,  Up: Funções de retorno de opção

5.17.2.35 Exemplo de função de retorno 2: verificar a ordem das opções
......................................................................

Aqui está um exemplo um pouco mais interessante: registra o fato de que
‘-a’ é visto, mas explode se ele vier depois de ‘-b’ na linha de
comando.

     def check_order(option, opt_str, value, parser):
         if parser.values.b:
             raise OptionValueError("can't use -a after -b")
         parser.values.a = 1
     ...
     parser.add_option("-a", action="callback", callback=check_order)
     parser.add_option("-b", action="store_true", dest="b")


File: python.info,  Node: Exemplo 3 de função de retorno verificar a ordem das opções generalizada,  Next: Exemplo de função de retorno 4 verificar uma condição arbitrária,  Prev: Exemplo de função de retorno 2 verificar a ordem das opções,  Up: Funções de retorno de opção

5.17.2.36 Exemplo 3 de função de retorno: verificar a ordem das opções (generalizada)
.....................................................................................

Se você quiser reutilizar essa função de retorno para várias opções
semelhantes (definir um sinalizador, mas explodir se ‘-b’ já tiver sido
visto), será preciso um pouco de trabalho: a mensagem de erro e o
sinalizador que ele define devem ser generalizados.

     def check_order(option, opt_str, value, parser):
         if parser.values.b:
             raise OptionValueError("can't use %s after -b" % opt_str)
         setattr(parser.values, option.dest, 1)
     ...
     parser.add_option("-a", action="callback", callback=check_order, dest='a')
     parser.add_option("-b", action="store_true", dest="b")
     parser.add_option("-c", action="callback", callback=check_order, dest='c')


File: python.info,  Node: Exemplo de função de retorno 4 verificar uma condição arbitrária,  Next: Exemplo de função de retorno 5 argumentos fixos,  Prev: Exemplo 3 de função de retorno verificar a ordem das opções generalizada,  Up: Funções de retorno de opção

5.17.2.37 Exemplo de função de retorno 4: verificar uma condição arbitrária
...........................................................................

Claro, você pode colocar qualquer condição ali—você não está limitado a
verificar os valores de opções já definidas.  Por exemplo, se você tem
opções que não devem ser chamadas quando a lua está cheia, tudo o que
você tem a fazer é isto:

     def check_moon(option, opt_str, value, parser):
         if is_moon_full():
             raise OptionValueError("%s option invalid when moon is full"
                                    % opt_str)
         setattr(parser.values, option.dest, 1)
     ...
     parser.add_option("--foo",
                       action="callback", callback=check_moon, dest="foo")

(A definição de ‘is_moon_full()’ é deixada como um exercício para o
leitor.)


File: python.info,  Node: Exemplo de função de retorno 5 argumentos fixos,  Next: Exemplo de função de retorno 6 argumentos variáveis,  Prev: Exemplo de função de retorno 4 verificar uma condição arbitrária,  Up: Funções de retorno de opção

5.17.2.38 Exemplo de função de retorno 5: argumentos fixos
..........................................................

As coisas ficam um pouco mais interessantes quando você define opções de
retorno de chamada que aceitam um número fixo de argumentos.
Especificar que uma opção de retorno de chamada aceita argumentos é
semelhante a definir uma opção ‘"store"’ ou ‘"append"’: se você definir
*note type: 30c4, então a opção aceita um argumento que deve ser
conversível para esse tipo; se você definir ainda *note nargs: 30f3,
então a opção aceita argumentos *note nargs: 30f3.

Aqui está um exemplo que apenas emula a ação padrão ‘"store"’:

     def store_value(option, opt_str, value, parser):
         setattr(parser.values, option.dest, value)
     ...
     parser.add_option("--foo",
                       action="callback", callback=store_value,
                       type="int", nargs=3, dest="foo")

Note que *note optparse: a0. cuida de consumir 3 argumentos e
convertê-los em números inteiros para você; tudo o que você precisa
fazer é armazená-los.  (Ou o que for; obviamente você não precisa de uma
função de retorno de chamada para este exemplo.)


File: python.info,  Node: Exemplo de função de retorno 6 argumentos variáveis,  Prev: Exemplo de função de retorno 5 argumentos fixos,  Up: Funções de retorno de opção

5.17.2.39 Exemplo de função de retorno 6: argumentos variáveis
..............................................................

As coisas ficam complicadas quando você quer que uma opção receba um
número variável de argumentos.  Para esse caso, você deve escrever uma
função de retorno, pois *note optparse: a0. não fornece nenhuma
capacidade embutida para ele.  E você tem que lidar com certas
complexidades da análise sintática de linha de comando Unix convencional
que *note optparse: a0. normalmente lida para você.  Em particular, as
funções de retorno devem implementar as regras convencionais para
argumentos ‘--’ e ‘-’ simples:

   * ‘--’ ou ‘-’ podem ser argumentos de opção

   * ‘--’ apenas (se não for o argumento para alguma opção): interrompe
     o processamento da linha de comando e descarta o ‘--’

   * ‘-’ apenas (se não for o argumento para alguma opção): interrompe o
     processamento da linha de comando, mas mantém o ‘-’ (anexa-o a
     ‘parser.largs’)

Se você quiser uma opção que aceite um número variável de argumentos, há
várias questões sutis e complicadas com as quais se preocupar.  A
implementação exata que você escolher será baseada em quais compensações
você está disposto a fazer para sua aplicação (é por isso que *note
optparse: a0. não oferece suporte a esse tipo de coisa diretamente).

No entanto, aqui vai uma tentativa de função de retorno para uma opção
com argumentos variáveis:

     def vararg_callback(option, opt_str, value, parser):
         assert value is None
         value = []

         def floatable(str):
             try:
                 float(str)
                 return True
             except ValueError:
                 return False

         for arg in parser.rargs:
             # para em --foo como opções
             if arg[:2] == "--" and len(arg) > 2:
                 break
             # para em -a, mas não em -3 ou -3.0
             if arg[:1] == "-" and len(arg) > 1 and not floatable(arg):
                 break
             value.append(arg)

         del parser.rargs[:len(value)]
         setattr(parser.values, option.dest, value)

     ...
     parser.add_option("-c", "--callback", dest="vararg_attr",
                       action="callback", callback=vararg_callback)


File: python.info,  Node: Estendendo optparse,  Next: Exceções<10>,  Prev: Funções de retorno de opção,  Up: optparse — Analisador sintático para opções de linha de comando

5.17.2.40 Estendendo ‘optparse’
...............................

Como os dois principais fatores de controle sobre como *note optparse:
a0. interpreta as opções de linha de comando são a ação e o tipo de cada
opção, a direção mais provável de extensão é adicionar novas ações e
novos tipos.

* Menu:

* Adicionando novos tipos::
* Adicionando novas ações::


File: python.info,  Node: Adicionando novos tipos,  Next: Adicionando novas ações,  Up: Estendendo optparse

5.17.2.41 Adicionando novos tipos
.................................

Para adicionar novos tipos, você precisa definir sua própria subclasse
da classe *note Option: 30eb. de *note optparse: a0.  Esta classe tem
alguns atributos que definem os tipos de *note optparse: a0.: *note
TYPES: 3120. e *note TYPE_CHECKER: 3121.

 -- Atributo: Option.TYPES

     Uma tupla de nomes de tipos; na sua subclasse, basta definir uma
     nova tupla *note TYPES: 3120. que se baseia na tupla padrão.

 -- Atributo: Option.TYPE_CHECKER

     Um dicionário que mapeia nomes de tipos para funções de verificação
     de tipos.  Uma função de verificação de tipos tem a seguinte
     assinatura:

          def check_mytype(option, opt, value)

     sendo ‘option’ uma instância *note Option: 30eb, ‘opt’ é uma string
     de opção (por exemplo, ‘-f’), e ‘value’ é a string da linha de
     comando que deve ser verificada e convertida para o tipo desejado.
     ‘check_mytype()’ deve retornar um objeto do tipo hipotético
     ‘mytype’.  O valor retornado por uma função de verificação de tipo
     acabará na instância OptionValues retornada por *note
     OptionParser.parse_args(): 1516, ou será passado para uma função de
     retorno como o parâmetro ‘value’.

     Sua função de verificação de tipo deve levantar *note
     OptionValueError: 30b3. se encontrar algum problema.  *note
     OptionValueError: 30b3. recebe um único argumento de string, que é
     passado como está para o método ‘error()’ do *note OptionParser:
     1515, que por sua vez adiciona o nome do programa e a string
     ‘"error:"’ e exibe tudo no stderr antes de encerrar o processo.

Aqui está um exemplo bobo que demonstra a adição de um tipo de opção
‘"complex"’ para analisar números complexos no estilo Python na linha de
comando.  (Isso é ainda mais bobo do que costumava ser, porque *note
optparse: a0. 1.3 adicionou suporte embutido para números complexos, mas
não importa.)

Primeiro, as importações necessárias:

     from copy import copy
     from optparse import Option, OptionValueError

Você precisa definir seu verificador de tipo primeiro, pois ele será
referenciado mais tarde (no atributo de classe *note TYPE_CHECKER: 3121.
da sua subclasse de Option):

     def check_complex(option, opt, value):
         try:
             return complex(value)
         except ValueError:
             raise OptionValueError(
                 "option %s: invalid complex value: %r" % (opt, value))

Finalmente, a subclasse de Option:

     class MyOption (Option):
         TYPES = Option.TYPES + ("complex",)
         TYPE_CHECKER = copy(Option.TYPE_CHECKER)
         TYPE_CHECKER["complex"] = check_complex

(Se não fizéssemos uma *note copy(): 25. de *note Option.TYPE_CHECKER:
3121, acabaríamos modificando o atributo *note TYPE_CHECKER: 3121. da
classe Option de *note optparse: a0.  Sendo Python, nada impede você de
fazer isso, exceto boas maneiras e bom senso.)

Pronto!  Agora você pode escrever um script que usa o novo tipo de opção
como qualquer outro script baseado em *note optparse: a0, exceto que
você tem que instruir seu OptionParser a usar MyOption em vez de Option:

     parser = OptionParser(option_class=MyOption)
     parser.add_option("-c", type="complex")

Como alternativa, você pode criar sua própria lista de opções e passá-la
para o OptionParser; se você não usar ‘add_option()’ da maneira acima,
não precisa informar ao OptionParser qual classe de opção usar:

     option_list = [MyOption("-c", action="store", type="complex", dest="c")]
     parser = OptionParser(option_list=option_list)


File: python.info,  Node: Adicionando novas ações,  Prev: Adicionando novos tipos,  Up: Estendendo optparse

5.17.2.42 Adicionando novas ações
.................................

A adição de novas ações é um pouco mais complicado, porque você precisa
entender que *note optparse: a0. tem algumas classificações para ações:

Ações “store”

     ações que resultam em *note optparse: a0. armazenando um valor em
     um atributo da instância OptionValues atual; essas opções exigem
     que um atributo *note dest: 30c5. seja fornecido ao construtor
     Option.

Ações “typed”

     Ações que pegam um valor da linha de comando e esperam que ele seja
     de um certo tipo; ou melhor, uma string que pode ser convertida
     para um certo tipo.  Essas opções requerem um atributo *note type:
     30c4. para o construtor Option.

Esses são conjuntos sobrepostos: algumas ações “store” padrão são
‘"store"’, ‘"store_const"’, ‘"append"’ e ‘"count"’, enquanto as ações
“typed” padrão são ‘"store"’, ‘"append"’ e ‘"callback"’.

Ao adicionar uma ação, você precisa categorizá-la listando-a em pelo
menos um dos seguintes atributos de classe de Option (todos são listas
de strings):

 -- Atributo: Option.ACTIONS

     Todas as ações devem ser listadas em ACTIONS.

 -- Atributo: Option.STORE_ACTIONS

     As ações “store” também são listadas aqui.

 -- Atributo: Option.TYPED_ACTIONS

     As ações “typed” também são listadas aqui.

 -- Atributo: Option.ALWAYS_TYPED_ACTIONS

     Ações que sempre assumem um tipo (ou seja, cujas opções sempre
     assumem um valor) são listadas aqui adicionalmente.  O único efeito
     disso é que *note optparse: a0. atribui o tipo padrão, ‘"string"’,
     a opções sem tipo explícito cuja ação é listada em *note
     ALWAYS_TYPED_ACTIONS: 3127.

Para realmente implementar sua nova ação, você deve substituir o método
‘take_action()’ de Option e adicionar um caso que reconheça sua ação.

Por exemplo, vamos adicionar uma ação ‘"extend"’.  Isso é semelhante à
ação padrão ‘"append"’, mas em vez de pegar um único valor da linha de
comando e anexá-lo a uma lista existente, ‘"extend"’ pegará vários
valores em uma única string delimitada por vírgulas e estenderá uma
lista existente com eles.  Ou seja, se ‘--names’ for uma opção
‘"extend"’ do tipo ‘"string"’, a linha de comando

     --names=foo,bar --names blah --names ding,dong

resultaria em uma lista

     ["foo", "bar", "blah", "ding", "dong"]

Novamente, nós definimos uma subclasse de Option:

     class MyOption(Option):

         ACTIONS = Option.ACTIONS + ("extend",)
         STORE_ACTIONS = Option.STORE_ACTIONS + ("extend",)
         TYPED_ACTIONS = Option.TYPED_ACTIONS + ("extend",)
         ALWAYS_TYPED_ACTIONS = Option.ALWAYS_TYPED_ACTIONS + ("extend",)

         def take_action(self, action, dest, opt, value, values, parser):
             if action == "extend":
                 lvalue = value.split(",")
                 values.ensure_value(dest, []).extend(lvalue)
             else:
                 Option.take_action(
                     self, action, dest, opt, value, values, parser)

Características de nota:

   * ‘"extend"’ espera um valor na linha de comando e armazena esse
     valor em algum lugar, então ele vai em *note STORE_ACTIONS: 3125. e
     *note TYPED_ACTIONS: 3126.

   * para garantir que *note optparse: a0. atribua o tipo padrão de
     ‘"string"’ às ações ‘"extend"’, colocamos a ação ‘"extend"’ em
     *note ALWAYS_TYPED_ACTIONS: 3127. também.

   * ‘MyOption.take_action()’ implementa apenas esta nova ação e passa o
     controle de volta para ‘Option.take_action()’ para as ações padrão
     *note optparse: a0.

   * ‘values’ é uma instância da classe optparse_parser.Values, que
     fornece o método muito útil ‘ensure_value()’.  ‘ensure_value()’ é
     essencialmente *note getattr(): bea. com uma válvula de segurança;
     é chamado como

          values.ensure_value(attr, value)

     Se o atributo ‘attr’ de ‘values’ não existir ou for ‘None’, então
     ensure_value() primeiro o define como ‘value’ e então retorna
     ‘value’.  Isso é muito útil para ações como ‘"extend"’, ‘"append"’
     e ‘"count"’, todas as quais acumulam dados em uma variável e
     esperam que essa variável seja de um certo tipo (uma lista para as
     duas primeiras, um inteiro para a última).  Usar ‘ensure_value()’
     significa que os scripts que usam sua ação não precisam se
     preocupar em definir um valor padrão para os destinos de opção em
     questão; eles podem simplesmente deixar o padrão como ‘None’ e
     ‘ensure_value()’ cuidará de acertar quando for necessário.


File: python.info,  Node: Exceções<10>,  Prev: Estendendo optparse,  Up: optparse — Analisador sintático para opções de linha de comando

5.17.2.43 Exceções
..................

 -- Exceção: optparse.OptionError

     Levantada se uma instância de *note Option: 30eb. for criada com
     argumentos inválidos ou inconsistentes.

 -- Exceção: optparse.OptionConflictError

     Levantada se opções conflitantes forem adicionadas a um instância
     de *note OptionParser: 1515.

 -- Exceção: optparse.OptionValueError

     Levantada se um valor de opção inválido for encontrado na linha de
     comando.

 -- Exceção: optparse.BadOptionError

     Levantada se uma opção inválida for passada na linha de comando.

 -- Exceção: optparse.AmbiguousOptionError

     Levantada se uma opção ambígua for passada na linha de comando.


File: python.info,  Node: getpass — Entrada de senha portátil,  Next: fileinput — Itera sobre linhas de múltiplos fluxos de entrada,  Prev: optparse — Analisador sintático para opções de linha de comando,  Up: Bibliotecas de interface de linha de comando

5.17.3 ‘getpass’ — Entrada de senha portátil
--------------------------------------------

'Código-fonte:' Lib/getpass.py(1)

__________________________________________________________________

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

O módulo *note getpass: 62. fornece duas funções:

 -- Função: getpass.getpass (prompt='Password: ', stream=None)

     Solicita uma senha do usuário sem emiti-la.  O usuário é solicitado
     usando a string 'prompt', cujo padrão é ‘'Password: '’.  No Unix, o
     prompt é escrito no objeto arquivo ou similar 'stream' usando o
     tratador de erros de substituição, se necessário.  O 'stream'
     padrão para o terminal de controle (‘/dev/tty’) ou se não estiver
     disponível para ‘sys.stderr’ (este argumento é ignorado no
     Windows).

     Se uma entrada sem exibição em tela não estiver disponível,
     getpass() recorre a exibir uma mensagem de aviso para 'stream' e lê
     de ‘sys.stdin’ e levantar de um *note GetPassWarning: 312f.

          Nota: Se você chamar getpass de dentro do IDLE, a entrada pode
          ser feita no terminal de onde você iniciou o IDLE, e não na
          própria janela ociosa.

 -- Exceção: getpass.GetPassWarning

     A subclasse *note UserWarning: 244b. é levantada quando a entrada
     de senha pode acabar sendo exibida na tela.

 -- Função: getpass.getuser ()

     Retorna o “nome de login” do usuário.

     Esta função verifica as variáveis de ambiente ‘LOGNAME’, ‘USER’,
     ‘LNAME’ e ‘USERNAME’, nesta ordem, e retorna o valor da primeiro
     que estiver definida como uma string não vazia.  Se nenhuma estiver
     definida, o nome de login do banco de dados de senhas é retornado
     em sistemas que oferecem suporte ao módulo *note pwd: b2, caso
     contrário, uma exceção *note OSError: 417. é levantada.

     Em geral, esta função deve ter preferência sobre *note
     os.getlogin(): 1613.

     Alterado na versão 3.13: Anteriormente, várias exceções além de
     apenas *note OSError: 417. eram levantadas.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/getpass.py


File: python.info,  Node: fileinput — Itera sobre linhas de múltiplos fluxos de entrada,  Next: curses — Gerenciador de terminal para visualizadores de células de caracteres,  Prev: getpass — Entrada de senha portátil,  Up: Bibliotecas de interface de linha de comando

5.17.4 ‘fileinput’ — Itera sobre linhas de múltiplos fluxos de entrada
----------------------------------------------------------------------

'Código-fonte:' Lib/fileinput.py(1)

__________________________________________________________________

Este módulo implementa uma classe auxiliar e funções para escrever
rapidamente um laço sobre uma entrada padrão ou uma lista de arquivos.
Se você quiser apenas ler ou escrever um arquivo veja *note open(): 51c.

O uso típico é:

     import fileinput
     for line in fileinput.input(encoding="utf-8"):
         process(line)

Isto itera sobre as linhas de todos os arquivos listados em
‘sys.argv[1:]’, padronizando ‘sys.stdin’ se a lista estiver vazia.  Se o
nome de um arquivo for ‘'-'’, ele também será substituído por
‘sys.stdin’ e os argumentos opcionais 'mode' e 'openhook' serão
ignorados.  Para especificar uma lista alternativa de nomes de arquivos,
passe-a como primeiro argumento para *note input(): 802.  Um único nome
de arquivo também é permitido.

Todos os arquivos são abertos em modo texto por padrão, mas você pode
substituir isso especificando o parâmetro 'mode' na chamada para *note
input(): 802. ou *note FileInput: 737.  Se ocorrer um erro de E/S
durante a abertura ou leitura de um arquivo, *note OSError: 417. será
levantada.

Alterado na versão 3.3: *note IOError: 108b. costumava ser levantada;
agora é um apelido de *note OSError: 417.

Se ‘sys.stdin’ for usado mais de uma vez, o segundo e posterior uso não
retornará nenhuma linha, exceto talvez para uso interativo, ou se tiver
sido explicitamente redefinido (por exemplo, usando
‘sys.stdin.seek(0)’).

Arquivos vazios são abertos e fechados imediatamente; a única vez que
sua presença na lista de nomes de arquivos é perceptível é quando o
último arquivo aberto está vazio.

As linhas são retornadas com novas linhas intactas, o que significa que
a última linha de um arquivo pode não ter nenhuma.

Você pode controlar como os arquivos são abertos fornecendo um gancho de
abertura através do parâmetro 'openhook' para *note fileinput.input():
802. ou *note FileInput(): 737.  O gancho deve ser uma função que recebe
dois argumentos, 'filename' e 'mode', e retorna um objeto arquivo ou
similar aberto de acordo.  Se 'encoding' e/ou 'errors' forem
especificados, eles serão passados para o gancho como argumentos
nomeados adicionais.  Este módulo fornece um *note hook_compressed():
803. para oferece suporte a arquivos compactados.

A seguinte função é a interface principal deste módulo:

 -- Função: fileinput.input (files=None, inplace=False, backup='', *,
          mode='r', openhook=None, encoding=None, errors=None)

     Cria uma instância da classe *note FileInput: 737.  A instância
     será usada como estado global para as funções deste módulo e também
     será retornada para uso durante a iteração.  Os parâmetros desta
     função serão passados para o construtor da classe *note FileInput:
     737.

     A instância *note FileInput: 737. pode ser usada como um
     gerenciador de contexto na instrução *note with: 5d2.  Neste
     exemplo, 'input' é fechado após a saída da instrução ‘with’, mesmo
     se ocorrer uma exceção:

          with fileinput.input(files=('spam.txt', 'eggs.txt'), encoding="utf-8") as f:
              for line in f:
                  process(line)

     Alterado na versão 3.2: Pode ser usado como gerenciador de
     contexto.

     Alterado na versão 3.8: Os parâmetros nomeados 'mode' e 'openhook'
     agora são somente-nomeados.

     Alterado na versão 3.10: Os parâmetros somente-nomeados 'encoding'
     e 'errors' foram adicionados.

As funções a seguir usam o estado global criado por *note
fileinput.input(): 802.; se não houver estado ativo, *note RuntimeError:
195. será levantada.

 -- Função: fileinput.filename ()

     Retorna o nome do arquivo que está sendo lido no momento.  Antes da
     primeira linha ser lida, retorna ‘None’.

 -- Função: fileinput.fileno ()

     Retorna o número inteiro de “descritor de arquivo” para o arquivo
     atual.  Quando nenhum arquivo é aberto (antes da primeira linha e
     entre arquivos), retorna ‘-1’.

 -- Função: fileinput.lineno ()

     Retorna o número cumulativo da linha que acabou de ser lida.  Antes
     da primeira linha ser lida, retorna ‘0’.  Após a leitura da última
     linha do último arquivo, retorna o número da linha dessa linha.

 -- Função: fileinput.filelineno ()

     Retorna o número da linha no arquivo atual.  Antes da primeira
     linha ser lida, retorna ‘0’.  Após a leitura da última linha do
     último arquivo, retorna o número da linha dessa linha no arquivo.

 -- Função: fileinput.isfirstline ()

     Retorna ‘True’ se a linha que acabou de ler for a primeira linha do
     seu arquivo, caso contrário retorna ‘False’.

 -- Função: fileinput.isstdin ()

     Retorna ‘True’ se a última linha foi lida em ‘sys.stdin’, caso
     contrário retorna ‘False’.

 -- Função: fileinput.nextfile ()

     Fecha o arquivo atual para que a próxima iteração leia a primeira
     linha do próximo arquivo (se houver); as linhas não lidas do
     arquivo não contarão para a contagem cumulativa de linhas.  O nome
     do arquivo não é alterado até que a primeira linha do próximo
     arquivo seja lida.  Antes da leitura da primeira linha, esta função
     não tem efeito; ele não pode ser usado para pular o primeiro
     arquivo.  Após a leitura da última linha do último arquivo, esta
     função não terá efeito.

 -- Função: fileinput.close ()

     Fecha a sequência.

A classe que implementa o comportamento de sequência fornecido pelo
módulo também está disponível para subclasses:

 -- Classe: fileinput.FileInput (files=None, inplace=False, backup='',
          *, mode='r', openhook=None, encoding=None, errors=None)

     A classe *note FileInput: 737. é a implementação; seus métodos
     *note filename(): 3133, *note fileno(): 1475, *note lineno(): 3134,
     *note filelineno(): 3135, *note isfirstline(): 3136, *note
     isstdin(): 3137, *note nextfile(): 3138. e *note close(): 3139.
     correspondem às funções de mesmo nome no módulo.  Além disso, é
     *note iterável: 1268. e possui um método *note readline(): 1e46.
     que retorna a próxima linha de entrada.  A sequência deve ser
     acessada em ordem estritamente sequencial; acesso aleatório e *note
     readline(): 1e46. não podem ser misturados.

     Com 'mode' você pode especificar qual modo de arquivo será passado
     para *note open(): 51c.  Deve ser um entre ‘'r'’ e ‘'rb'’.

     O 'openhook', quando fornecido, deve ser uma função que recebe dois
     argumentos, 'filename' e 'mode', e retorna um objeto arquivo ou
     similar aberto de acordo.  Você não pode usar 'inplace' e
     'openhook' juntos.

     Você pode especificar 'encoding' e 'errors' que são passados para
     *note open(): 51c. ou 'openhook'.

     Uma instância *note FileInput: 737. pode ser usada como um
     gerenciador de contexto na instrução *note with: 5d2.  Neste
     exemplo, 'input' é fechado após a saída da instrução ‘with’, mesmo
     se ocorrer uma exceção:

          with FileInput(files=('spam.txt', 'eggs.txt')) as input:
              process(input)

     Alterado na versão 3.2: Pode ser usado como gerenciador de
     contexto.

     Alterado na versão 3.8: Os parâmetros nomeados 'mode' e 'openhook'
     agora são somente-nomeados.

     Alterado na versão 3.10: Os parâmetros somente-nomeados 'encoding'
     e 'errors' foram adicionados.

     Alterado na versão 3.11: Os modos ‘'rU'’ e ‘'U'’ e o método
     ‘__getitem__()’ foram removidos.

'Filtragem local opcional:' se o argumento nomeado ‘inplace=True’ for
passado para *note fileinput.input(): 802. ou para o construtor *note
FileInput: 737, o arquivo é movido para um arquivo de backup e a saída
padrão é direcionada para o arquivo de entrada (se já existir um arquivo
com o mesmo nome do arquivo de backup, ele será substituído
silenciosamente).  Isso torna possível escrever um filtro que reescreva
seu arquivo de entrada internamente.  Se o parâmetro 'backup' for
fornecido (normalmente como ‘backup='.<some extension>'’), ele
especifica a extensão do arquivo de backup, e o arquivo de backup
permanece disponível; por padrão, a extensão é ‘'.bak'’ e é excluída
quando o arquivo de saída é fechado.  A filtragem local é desativada
quando a entrada padrão é lida.

Os dois ganchos de abertura a seguir são fornecidos por este módulo:

 -- Função: fileinput.hook_compressed (filename, mode, *, encoding=None,
          errors=None)

     Abre de forma transparente arquivos compactados com gzip e bzip2
     (reconhecidos pelas extensões ‘'.gz'’ e ‘'.bz2'’) usando os módulos
     *note gzip: 67. e *note bz2: 13.  Se a extensão do nome do arquivo
     não for ‘'.gz'’ ou ‘'.bz2'’, o arquivo é aberto normalmente (ou
     seja, usando *note open(): 51c. sem qualquer descompactação).

     Os valores 'encoding' e 'errors' são passados para *note
     io.TextIOWrapper: 7bc. para arquivos compactados e abertos para
     arquivos normais.

     Exemplo de uso: ‘fi =
     fileinput.FileInput(openhook=fileinput.hook_compressed,
     encoding="utf-8")’

     Alterado na versão 3.10: Os parâmetros somente-nomeados 'encoding'
     e 'errors' foram adicionados.

 -- Função: fileinput.hook_encoded (encoding, errors=None)

     Retorna um gancho que abre cada arquivo com *note open(): 51c,
     usando a 'encoding' e 'errors' fornecidas para ler o arquivo.

     Exemplo de uso: ‘fi =
     fileinput.FileInput(openhook=fileinput.hook_encoded("utf-8",
     "surrogateescape"))’

     Alterado na versão 3.6: Adicionado o parâmetro opcional 'errors'.

     Descontinuado desde a versão 3.10: Esta função foi descontinuado já
     que *note fileinput.input(): 802. e *note FileInput: 737. agora
     possuem parâmetros 'encoding' e 'errors'.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/fileinput.py


File: python.info,  Node: curses — Gerenciador de terminal para visualizadores de células de caracteres,  Next: curses textpad — Text input widget for curses programs,  Prev: fileinput — Itera sobre linhas de múltiplos fluxos de entrada,  Up: Bibliotecas de interface de linha de comando

5.17.5 ‘curses’ — Gerenciador de terminal para visualizadores de células de caracteres.
---------------------------------------------------------------------------------------

'Código-fonte:' Lib/curses(1)

__________________________________________________________________

O módulo *note curses: 2b. provê uma interface para a livraria curses, o
padrão de-facto para manuseio avançado de terminal portável.

While curses is most widely used in the Unix environment, versions are
available for Windows, DOS, and possibly other systems as well.  This
extension module is designed to match the API of ncurses, an open-source
curses library hosted on Linux and the BSD variants of Unix.

*note Disponibilidade: 1ed8.: not Android, not iOS, not WASI.

Este módulo não tem suporte em *note plataformas móveis: 1fde. ou *note
plataformas WebAssembly: 18f5.

     Nota: Whenever the documentation mentions a 'character' it can be
     specified as an integer, a one-character Unicode string or a
     one-byte byte string.

     Whenever the documentation mentions a 'character string' it can be
     specified as a Unicode string or a byte string.

Ver também
..........

Módulo *note curses.ascii: 2c.

     Utilidades para trabalhar com caracteres ASCII, independentemente
     de suas configurações locais.

Módulo *note curses.panel: 2d.

     Uma extensão de painel stackeada que adiciona profundidade às
     janelas do curses.

Módulo *note curses.textpad: 2e.

     Widget de texto editável para suporte ao curses ‘Emacs’-like
     bindings.

*note Programação em Curses com Python: 313d.

     Tutorial material on using curses with Python, by Andrew Kuchling
     and Eric Raymond.

* Menu:

* Funções: Funções<6>.
* Window Objects::
* Constantes: Constantes<6>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/curses


File: python.info,  Node: Funções<6>,  Next: Window Objects,  Up: curses — Gerenciador de terminal para visualizadores de células de caracteres

5.17.5.1 Funções
................

The module *note curses: 2b. defines the following exception:

 -- Exceção: curses.error

     Exception raised when a curses library function returns an error.

     Nota: Whenever 'x' or 'y' arguments to a function or a method are
     optional, they default to the current cursor location.  Whenever
     'attr' is optional, it defaults to *note A_NORMAL: 3141.

The module *note curses: 2b. defines the following functions:

 -- Função: curses.baudrate ()

     Return the output speed of the terminal in bits per second.  On
     software terminal emulators it will have a fixed high value.
     Included for historical reasons; in former times, it was used to
     write output loops for time delays and occasionally to change
     interfaces depending on the line speed.

 -- Função: curses.beep ()

     Emit a short attention sound.

 -- Função: curses.can_change_color ()

     Return ‘True’ or ‘False’, depending on whether the programmer can
     change the colors displayed by the terminal.

 -- Função: curses.cbreak ()

     Enter cbreak mode.  In cbreak mode (sometimes called “rare” mode)
     normal tty line buffering is turned off and characters are
     available to be read one by one.  However, unlike raw mode, special
     characters (interrupt, quit, suspend, and flow control) retain
     their effects on the tty driver and calling program.  Calling first
     *note raw(): 3146. then *note cbreak(): 3145. leaves the terminal
     in cbreak mode.

 -- Função: curses.color_content (color_number)

     Return the intensity of the red, green, and blue (RGB) components
     in the color 'color_number', which must be between ‘0’ and ‘COLORS
     - 1’.  Return a 3-tuple, containing the R,G,B values for the given
     color, which will be between ‘0’ (no component) and ‘1000’ (maximum
     amount of component).

 -- Função: curses.color_pair (pair_number)

     Return the attribute value for displaying text in the specified
     color pair.  Only the first 256 color pairs are supported.  This
     attribute value can be combined with *note A_STANDOUT: 3148, *note
     A_REVERSE: 3149, and the other ‘A_*’ attributes.  *note
     pair_number(): 314a. is the counterpart to this function.

 -- Função: curses.curs_set (visibility)

     Set the cursor state.  'visibility' can be set to ‘0’, ‘1’, or ‘2’,
     for invisible, normal, or very visible.  If the terminal supports
     the visibility requested, return the previous cursor state;
     otherwise raise an exception.  On many terminals, the “visible”
     mode is an underline cursor and the “very visible” mode is a block
     cursor.

 -- Função: curses.def_prog_mode ()

     Save the current terminal mode as the “program” mode, the mode when
     the running program is using curses.  (Its counterpart is the
     “shell” mode, for when the program is not in curses.)  Subsequent
     calls to *note reset_prog_mode(): 314d. will restore this mode.

 -- Função: curses.def_shell_mode ()

     Save the current terminal mode as the “shell” mode, the mode when
     the running program is not using curses.  (Its counterpart is the
     “program” mode, when the program is using curses capabilities.)
     Subsequent calls to *note reset_shell_mode(): 314f. will restore
     this mode.

 -- Função: curses.delay_output (ms)

     Insert an 'ms' millisecond pause in output.

 -- Função: curses.doupdate ()

     Atualiza a tela física.  A biblioteca do curses mantém duas
     estruturas de dados, uma representando o conteúdo da tela física
     atual e uma tela virtual representando o próximo estado desejado.
     O *note doupdate(): 3151. atualiza a tela física para corresponder
     à tela virtual.

     The virtual screen may be updated by a *note noutrefresh(): 3152.
     call after write operations such as *note addstr(): 3153. have been
     performed on a window.  The normal *note refresh(): 3154. call is
     simply ‘noutrefresh()’ followed by ‘doupdate()’; if you have to
     update multiple windows, you can speed performance and perhaps
     reduce screen flicker by issuing ‘noutrefresh()’ calls on all
     windows, followed by a single ‘doupdate()’.

 -- Função: curses.echo ()

     Enter echo mode.  In echo mode, each character input is echoed to
     the screen as it is entered.

 -- Função: curses.endwin ()

     De-initialize the library, and return terminal to normal status.

 -- Função: curses.erasechar ()

     Return the user’s current erase character as a one-byte bytes
     object.  Under Unix operating systems this is a property of the
     controlling tty of the curses program, and is not set by the curses
     library itself.

 -- Função: curses.filter ()

     The *note filter(): 3158. routine, if used, must be called before
     *note initscr(): 1689. is called.  The effect is that, during those
     calls, ‘LINES’ is set to ‘1’; the capabilities ‘clear’, ‘cup’,
     ‘cud’, ‘cud1’, ‘cuu1’, ‘cuu’, ‘vpa’ are disabled; and the ‘home’
     string is set to the value of ‘cr’.  The effect is that the cursor
     is confined to the current line, and so are screen updates.  This
     may be used for enabling character-at-a-time line editing without
     touching the rest of the screen.

 -- Função: curses.flash ()

     Flash the screen.  That is, change it to reverse-video and then
     change it back in a short interval.  Some people prefer such as
     ‘visible bell’ to the audible attention signal produced by *note
     beep(): 3143.

 -- Função: curses.flushinp ()

     Flush all input buffers.  This throws away any typeahead that has
     been typed by the user and has not yet been processed by the
     program.

 -- Função: curses.getmouse ()

     After *note getch(): 1627. returns *note KEY_MOUSE: 315c. to signal
     a mouse event, this method should be called to retrieve the queued
     mouse event, represented as a 5-tuple ‘(id, x, y, z, bstate)’.
     'id' is an ID value used to distinguish multiple devices, and 'x',
     'y', 'z' are the event’s coordinates.  ('z' is currently unused.)
     'bstate' is an integer value whose bits will be set to indicate the
     type of event, and will be the bitwise OR of one or more of the
     following constants, where 'n' is the button number from 1 to 5:
     *note BUTTONn_PRESSED: 315d, *note BUTTONn_RELEASED: 315e, *note
     BUTTONn_CLICKED: 315f, *note BUTTONn_DOUBLE_CLICKED: 3160, *note
     BUTTONn_TRIPLE_CLICKED: 3161, *note BUTTON_SHIFT: 3162, *note
     BUTTON_CTRL: 3163, *note BUTTON_ALT: 3164.

     Alterado na versão 3.10: The ‘BUTTON5_*’ constants are now exposed
     if they are provided by the underlying curses library.

 -- Função: curses.getsyx ()

     Return the current coordinates of the virtual screen cursor as a
     tuple ‘(y, x)’.  If *note leaveok: 3166. is currently ‘True’, then
     return ‘(-1, -1)’.

 -- Função: curses.getwin (file)

     Read window related data stored in the file by an earlier *note
     window.putwin(): 3168. call.  The routine then creates and
     initializes a new window using that data, returning the new window
     object.

 -- Função: curses.has_colors ()

     Return ‘True’ if the terminal can display colors; otherwise, return
     ‘False’.

 -- Função: curses.has_extended_color_support ()

     Return ‘True’ if the module supports extended colors; otherwise,
     return ‘False’.  Extended color support allows more than 256 color
     pairs for terminals that support more than 16 colors (e.g.
     xterm-256color).

     Extended color support requires ncurses version 6.1 or later.

     Adicionado na versão 3.10.

 -- Função: curses.has_ic ()

     Return ‘True’ if the terminal has insert- and delete-character
     capabilities.  This function is included for historical reasons
     only, as all modern software terminal emulators have such
     capabilities.

 -- Função: curses.has_il ()

     Return ‘True’ if the terminal has insert- and delete-line
     capabilities, or can simulate them using scrolling regions.  This
     function is included for historical reasons only, as all modern
     software terminal emulators have such capabilities.

 -- Função: curses.has_key (ch)

     Take a key value 'ch', and return ‘True’ if the current terminal
     type recognizes a key with that value.

 -- Função: curses.halfdelay (tenths)

     Used for half-delay mode, which is similar to cbreak mode in that
     characters typed by the user are immediately available to the
     program.  However, after blocking for 'tenths' tenths of seconds,
     raise an exception if nothing has been typed.  The value of
     'tenths' must be a number between ‘1’ and ‘255’.  Use *note
     nocbreak(): 316e. to leave half-delay mode.

 -- Função: curses.init_color (color_number, r, g, b)

     Change the definition of a color, taking the number of the color to
     be changed followed by three RGB values (for the amounts of red,
     green, and blue components).  The value of 'color_number' must be
     between ‘0’ and ‘COLORS - 1’.  Each of 'r', 'g', 'b', must be a
     value between ‘0’ and ‘1000’.  When *note init_color(): 7f4. is
     used, all occurrences of that color on the screen immediately
     change to the new definition.  This function is a no-op on most
     terminals; it is active only if *note can_change_color(): 3144.
     returns ‘True’.

 -- Função: curses.init_pair (pair_number, fg, bg)

     Change the definition of a color-pair.  It takes three arguments:
     the number of the color-pair to be changed, the foreground color
     number, and the background color number.  The value of
     'pair_number' must be between ‘1’ and ‘COLOR_PAIRS - 1’ (the ‘0’
     color pair is wired to white on black and cannot be changed).  The
     value of 'fg' and 'bg' arguments must be between ‘0’ and ‘COLORS -
     1’, or, after calling *note use_default_colors(): 316f, ‘-1’.  If
     the color-pair was previously initialized, the screen is refreshed
     and all occurrences of that color-pair are changed to the new
     definition.

 -- Função: curses.initscr ()

     Initialize the library.  Return a *note window: 3170. object which
     represents the whole screen.

          Nota: If there is an error opening the terminal, the
          underlying curses library may cause the interpreter to exit.

 -- Função: curses.is_term_resized (nlines, ncols)

     Return ‘True’ if *note resize_term(): 1691. would modify the window
     structure, ‘False’ otherwise.

 -- Função: curses.isendwin ()

     Return ‘True’ if *note endwin(): 3156. has been called (that is,
     the curses library has been deinitialized).

 -- Função: curses.keyname (k)

     Return the name of the key numbered 'k' as a bytes object.  The
     name of a key generating printable ASCII character is the key’s
     character.  The name of a control-key combination is a two-byte
     bytes object consisting of a caret (‘b'^'’) followed by the
     corresponding printable ASCII character.  The name of an alt-key
     combination (128–255) is a bytes object consisting of the prefix
     ‘b'M-'’ followed by the name of the corresponding ASCII character.

 -- Função: curses.killchar ()

     Return the user’s current line kill character as a one-byte bytes
     object.  Under Unix operating systems this is a property of the
     controlling tty of the curses program, and is not set by the curses
     library itself.

 -- Função: curses.longname ()

     Return a bytes object containing the terminfo long name field
     describing the current terminal.  The maximum length of a verbose
     description is 128 characters.  It is defined only after the call
     to *note initscr(): 1689.

 -- Função: curses.meta (flag)

     If 'flag' is ‘True’, allow 8-bit characters to be input.  If 'flag'
     is ‘False’, allow only 7-bit chars.

 -- Função: curses.mouseinterval (interval)

     Set the maximum time in milliseconds that can elapse between press
     and release events in order for them to be recognized as a click,
     and return the previous interval value.  The default value is 200
     milliseconds, or one fifth of a second.

 -- Função: curses.mousemask (mousemask)

     Set the mouse events to be reported, and return a tuple
     ‘(availmask, oldmask)’.  'availmask' indicates which of the
     specified mouse events can be reported; on complete failure it
     returns ‘0’.  'oldmask' is the previous value of the given window’s
     mouse event mask.  If this function is never called, no mouse
     events are ever reported.

 -- Função: curses.napms (ms)

     Sleep for 'ms' milliseconds.

 -- Função: curses.newpad (nlines, ncols)

     Create and return a pointer to a new pad data structure with the
     given number of lines and columns.  Return a pad as a window
     object.

     A pad is like a window, except that it is not restricted by the
     screen size, and is not necessarily associated with a particular
     part of the screen.  Pads can be used when a large window is
     needed, and only a part of the window will be on the screen at one
     time.  Automatic refreshes of pads (such as from scrolling or
     echoing of input) do not occur.  The *note refresh(): 3154. and
     *note noutrefresh(): 3152. methods of a pad require 6 arguments to
     specify the part of the pad to be displayed and the location on the
     screen to be used for the display.  The arguments are 'pminrow',
     'pmincol', 'sminrow', 'smincol', 'smaxrow', 'smaxcol'; the 'p'
     arguments refer to the upper left corner of the pad region to be
     displayed and the 's' arguments define a clipping box on the screen
     within which the pad region is to be displayed.

 -- Função: curses.newwin (nlines, ncols)

 -- Função: curses.newwin (nlines, ncols, begin_y, begin_x)

     Return a new *note window: 3170, whose left-upper corner is at
     ‘(begin_y, begin_x)’, and whose height/width is 'nlines'/'ncols'.

     By default, the window will extend from the specified position to
     the lower right corner of the screen.

 -- Função: curses.nl ()

     Enter newline mode.  This mode translates the return key into
     newline on input, and translates newline into return and line-feed
     on output.  Newline mode is initially on.

 -- Função: curses.nocbreak ()

     Leave cbreak mode.  Return to normal “cooked” mode with line
     buffering.

 -- Função: curses.noecho ()

     Leave echo mode.  Echoing of input characters is turned off.

 -- Função: curses.nonl ()

     Leave newline mode.  Disable translation of return into newline on
     input, and disable low-level translation of newline into
     newline/return on output (but this does not change the behavior of
     ‘addch('\n')’, which always does the equivalent of return and line
     feed on the virtual screen).  With translation off, curses can
     sometimes speed up vertical motion a little; also, it will be able
     to detect the return key on input.

 -- Função: curses.noqiflush ()

     When the ‘noqiflush()’ routine is used, normal flush of input and
     output queues associated with the ‘INTR’, ‘QUIT’ and ‘SUSP’
     characters will not be done.  You may want to call ‘noqiflush()’ in
     a signal handler if you want output to continue as though the
     interrupt had not occurred, after the handler exits.

 -- Função: curses.noraw ()

     Leave raw mode.  Return to normal “cooked” mode with line
     buffering.

 -- Função: curses.pair_content (pair_number)

     Return a tuple ‘(fg, bg)’ containing the colors for the requested
     color pair.  The value of 'pair_number' must be between ‘0’ and
     ‘COLOR_PAIRS - 1’.

 -- Função: curses.pair_number (attr)

     Return the number of the color-pair set by the attribute value
     'attr'.  *note color_pair(): 3147. is the counterpart to this
     function.

 -- Função: curses.putp (str)

     Equivalent to ‘tputs(str, 1, putchar)’; emit the value of a
     specified terminfo capability for the current terminal.  Note that
     the output of *note putp(): 3180. always goes to standard output.

 -- Função: curses.qiflush ([flag])

     If 'flag' is ‘False’, the effect is the same as calling *note
     noqiflush(): 317e.  If 'flag' is ‘True’, or no argument is
     provided, the queues will be flushed when these control characters
     are read.

 -- Função: curses.raw ()

     Enter raw mode.  In raw mode, normal line buffering and processing
     of interrupt, quit, suspend, and flow control keys are turned off;
     characters are presented to curses input functions one by one.

 -- Função: curses.reset_prog_mode ()

     Restore the terminal to “program” mode, as previously saved by
     *note def_prog_mode(): 314c.

 -- Função: curses.reset_shell_mode ()

     Restore the terminal to “shell” mode, as previously saved by *note
     def_shell_mode(): 314e.

 -- Função: curses.resetty ()

     Restore the state of the terminal modes to what it was at the last
     call to *note savetty(): 3183.

 -- Função: curses.resize_term (nlines, ncols)

     Backend function used by *note resizeterm(): 1690, performing most
     of the work; when resizing the windows, *note resize_term(): 1691.
     blank-fills the areas that are extended.  The calling application
     should fill in these areas with appropriate data.  The
     ‘resize_term()’ function attempts to resize all windows.  However,
     due to the calling convention of pads, it is not possible to resize
     these without additional interaction with the application.

 -- Função: curses.resizeterm (nlines, ncols)

     Resize the standard and current windows to the specified
     dimensions, and adjusts other bookkeeping data used by the curses
     library that record the window dimensions (in particular the
     SIGWINCH handler).

 -- Função: curses.savetty ()

     Save the current state of the terminal modes in a buffer, usable by
     *note resetty(): 3182.

 -- Função: curses.get_escdelay ()

     Retrieves the value set by *note set_escdelay(): 8f7.

     Adicionado na versão 3.9.

 -- Função: curses.set_escdelay (ms)

     Sets the number of milliseconds to wait after reading an escape
     character, to distinguish between an individual escape character
     entered on the keyboard from escape sequences sent by cursor and
     function keys.

     Adicionado na versão 3.9.

 -- Função: curses.get_tabsize ()

     Retrieves the value set by *note set_tabsize(): 8f9.

     Adicionado na versão 3.9.

 -- Função: curses.set_tabsize (size)

     Sets the number of columns used by the curses library when
     converting a tab character to spaces as it adds the tab to a
     window.

     Adicionado na versão 3.9.

 -- Função: curses.setsyx (y, x)

     Set the virtual screen cursor to 'y', 'x'.  If 'y' and 'x' are both
     ‘-1’, then *note leaveok: 3166. is set ‘True’.

 -- Função: curses.setupterm (term=None, fd=-1)

     Initialize the terminal.  'term' is a string giving the terminal
     name, or ‘None’; if omitted or ‘None’, the value of the ‘TERM’
     environment variable will be used.  'fd' is the file descriptor to
     which any initialization sequences will be sent; if not supplied or
     ‘-1’, the file descriptor for ‘sys.stdout’ will be used.

 -- Função: curses.start_color ()

     Must be called if the programmer wants to use colors, and before
     any other color manipulation routine is called.  It is good
     practice to call this routine right after *note initscr(): 1689.

     *note start_color(): 3186. initializes eight basic colors (black,
     red, green, yellow, blue, magenta, cyan, and white), and two global
     variables in the *note curses: 2b. module, *note COLORS: 3187. and
     *note COLOR_PAIRS: 3188, containing the maximum number of colors
     and color-pairs the terminal can support.  It also restores the
     colors on the terminal to the values they had when the terminal was
     just turned on.

 -- Função: curses.termattrs ()

     Return a logical OR of all video attributes supported by the
     terminal.  This information is useful when a curses program needs
     complete control over the appearance of the screen.

 -- Função: curses.termname ()

     Return the value of the environment variable ‘TERM’, as a bytes
     object, truncated to 14 characters.

 -- Função: curses.tigetflag (capname)

     Return the value of the Boolean capability corresponding to the
     terminfo capability name 'capname' as an integer.  Return the value
     ‘-1’ if 'capname' is not a Boolean capability, or ‘0’ if it is
     canceled or absent from the terminal description.

 -- Função: curses.tigetnum (capname)

     Return the value of the numeric capability corresponding to the
     terminfo capability name 'capname' as an integer.  Return the value
     ‘-2’ if 'capname' is not a numeric capability, or ‘-1’ if it is
     canceled or absent from the terminal description.

 -- Função: curses.tigetstr (capname)

     Return the value of the string capability corresponding to the
     terminfo capability name 'capname' as a bytes object.  Return
     ‘None’ if 'capname' is not a terminfo “string capability”, or is
     canceled or absent from the terminal description.

 -- Função: curses.tparm (str[, ...])

     Instantiate the bytes object 'str' with the supplied parameters,
     where 'str' should be a parameterized string obtained from the
     terminfo database.  E.g.  ‘tparm(tigetstr("cup"), 5, 3)’ could
     result in ‘b'\033[6;4H'’, the exact result depending on terminal
     type.

 -- Função: curses.typeahead (fd)

     Specify that the file descriptor 'fd' be used for typeahead
     checking.  If 'fd' is ‘-1’, then no typeahead checking is done.

     The curses library does “line-breakout optimization” by looking for
     typeahead periodically while updating the screen.  If input is
     found, and it is coming from a tty, the current update is postponed
     until refresh or doupdate is called again, allowing faster response
     to commands typed in advance.  This function allows specifying a
     different file descriptor for typeahead checking.

 -- Função: curses.unctrl (ch)

     Return a bytes object which is a printable representation of the
     character 'ch'.  Control characters are represented as a caret
     followed by the character, for example as ‘b'^C'’.  Printing
     characters are left as they are.

 -- Função: curses.ungetch (ch)

     Push 'ch' so the next *note getch(): 1627. will return it.

          Nota: Only one 'ch' can be pushed before ‘getch()’ is called.

 -- Função: curses.update_lines_cols ()

     Update the *note LINES: e17. and *note COLS: e18. module variables.
     Useful for detecting manual screen resize.

     Adicionado na versão 3.5.

 -- Função: curses.unget_wch (ch)

     Push 'ch' so the next *note get_wch(): 10d6. will return it.

          Nota: Only one 'ch' can be pushed before ‘get_wch()’ is
          called.

     Adicionado na versão 3.3.

 -- Função: curses.ungetmouse (id, x, y, z, bstate)

     Push a *note KEY_MOUSE: 315c. event onto the input queue,
     associating the given state data with it.

 -- Função: curses.use_env (flag)

     If used, this function should be called before *note initscr():
     1689. or newterm are called.  When 'flag' is ‘False’, the values of
     lines and columns specified in the terminfo database will be used,
     even if environment variables ‘LINES’ and ‘COLUMNS’ (used by
     default) are set, or if curses is running in a window (in which
     case default behavior would be to use the window size if ‘LINES’
     and ‘COLUMNS’ are not set).

 -- Função: curses.use_default_colors ()

     Allow use of default values for colors on terminals supporting this
     feature.  Use this to support transparency in your application.
     The default color is assigned to the color number ‘-1’.  After
     calling this function, ‘init_pair(x, curses.COLOR_RED, -1)’
     initializes, for instance, color pair 'x' to a red foreground color
     on the default background.

 -- Função: curses.wrapper (func, /, *args, **kwargs)

     Initialize curses and call another callable object, 'func', which
     should be the rest of your curses-using application.  If the
     application raises an exception, this function will restore the
     terminal to a sane state before re-raising the exception and
     generating a traceback.  The callable object 'func' is then passed
     the main window ‘stdscr’ as its first argument, followed by any
     other arguments passed to ‘wrapper()’.  Before calling 'func',
     ‘wrapper()’ turns on cbreak mode, turns off echo, enables the
     terminal keypad, and initializes colors if the terminal has color
     support.  On exit (whether normally or by exception) it restores
     cooked mode, turns on echo, and disables the terminal keypad.


File: python.info,  Node: Window Objects,  Next: Constantes<6>,  Prev: Funções<6>,  Up: curses — Gerenciador de terminal para visualizadores de células de caracteres

5.17.5.2 Window Objects
.......................

 -- Classe: curses.window

     Window objects, as returned by *note initscr(): 1689. and *note
     newwin(): 317a. above, have the following methods and attributes:

 -- Método: window.addch (ch[, attr])

 -- Método: window.addch (y, x, ch[, attr])

     Paint character 'ch' at ‘(y, x)’ with attributes 'attr',
     overwriting any character previously painted at that location.  By
     default, the character position and attributes are the current
     settings for the window object.

          Nota: Writing outside the window, subwindow, or pad raises a
          *note curses.error: 3140.  Attempting to write to the lower
          right corner of a window, subwindow, or pad will cause an
          exception to be raised after the character is printed.

 -- Método: window.addnstr (str, n[, attr])

 -- Método: window.addnstr (y, x, str, n[, attr])

     Paint at most 'n' characters of the character string 'str' at ‘(y,
     x)’ with attributes 'attr', overwriting anything previously on the
     display.

 -- Método: window.addstr (str[, attr])

 -- Método: window.addstr (y, x, str[, attr])

     Paint the character string 'str' at ‘(y, x)’ with attributes
     'attr', overwriting anything previously on the display.

          Nota: 
             * Writing outside the window, subwindow, or pad raises
               *note curses.error: 3140.  Attempting to write to the
               lower right corner of a window, subwindow, or pad will
               cause an exception to be raised after the string is
               printed.

             * A bug in ncurses(1), the backend for this Python module,
               can cause SegFaults when resizing windows.  This is fixed
               in ncurses-6.1-20190511.  If you are stuck with an
               earlier ncurses, you can avoid triggering this if you do
               not call *note addstr(): 3153. with a 'str' that has
               embedded newlines.  Instead, call *note addstr(): 3153.
               separately for each line.

 -- Método: window.attroff (attr)

     Remove attribute 'attr' from the “background” set applied to all
     writes to the current window.

 -- Método: window.attron (attr)

     Add attribute 'attr' to the “background” set applied to all writes
     to the current window.

 -- Método: window.attrset (attr)

     Set the “background” set of attributes to 'attr'.  This set is
     initially ‘0’ (no attributes).

 -- Método: window.bkgd (ch[, attr])

     Set the background property of the window to the character 'ch',
     with attributes 'attr'.  The change is then applied to every
     character position in that window:

        * The attribute of every character in the window is changed to
          the new background attribute.

        * Wherever the former background character appears, it is
          changed to the new background character.

 -- Método: window.bkgdset (ch[, attr])

     Set the window’s background.  A window’s background consists of a
     character and any combination of attributes.  The attribute part of
     the background is combined (OR’ed) with all non-blank characters
     that are written into the window.  Both the character and attribute
     parts of the background are combined with the blank characters.
     The background becomes a property of the character and moves with
     the character through any scrolling and insert/delete
     line/character operations.

 -- Método: window.border ([ls[, rs[, ts[, bs[, tl[, tr[, bl[,
          br]]]]]]]])

     Draw a border around the edges of the window.  Each parameter
     specifies the character to use for a specific part of the border;
     see the table below for more details.

          Nota: A ‘0’ value for any parameter will cause the default
          character to be used for that parameter.  Keyword parameters
          can 'not' be used.  The defaults are listed in this table:

     Parameter       Descrição                 Valor padrão
                                               
     ----------------------------------------------------------------------
                                               
     'ls'            Left side                 *note ACS_VLINE: 319d.
                                               
                                               
     'rs'            Right side                *note ACS_VLINE: 319d.
                                               
                                               
     'ts'            Top                       *note ACS_HLINE: 319e.
                                               
                                               
     'bs'            Bottom                    *note ACS_HLINE: 319e.
                                               
                                               
     'tl'            Upper-left corner         *note ACS_ULCORNER: 319f.
                                               
                                               
     'tr'            Upper-right corner        *note ACS_URCORNER: 31a0.
                                               
                                               
     'bl'            Bottom-left corner        *note ACS_LLCORNER: 31a1.
                                               
                                               
     'br'            Bottom-right corner       *note ACS_LRCORNER: 31a2.
                                               

 -- Método: window.box ([vertch, horch])

     Similar to *note border(): 319c, but both 'ls' and 'rs' are
     'vertch' and both 'ts' and 'bs' are 'horch'.  The default corner
     characters are always used by this function.

 -- Método: window.chgat (attr)

 -- Método: window.chgat (num, attr)

 -- Método: window.chgat (y, x, attr)

 -- Método: window.chgat (y, x, num, attr)

     Set the attributes of 'num' characters at the current cursor
     position, or at position ‘(y, x)’ if supplied.  If 'num' is not
     given or is ‘-1’, the attribute will be set on all the characters
     to the end of the line.  This function moves cursor to position
     ‘(y, x)’ if supplied.  The changed line will be touched using the
     *note touchline(): 31a5. method so that the contents will be
     redisplayed by the next window refresh.

 -- Método: window.clear ()

     Like *note erase(): 31a7, but also cause the whole window to be
     repainted upon next call to *note refresh(): 3154.

 -- Método: window.clearok (flag)

     If 'flag' is ‘True’, the next call to *note refresh(): 3154. will
     clear the window completely.

 -- Método: window.clrtobot ()

     Erase from cursor to the end of the window: all lines below the
     cursor are deleted, and then the equivalent of *note clrtoeol():
     31aa. is performed.

 -- Método: window.clrtoeol ()

     Erase from cursor to the end of the line.

 -- Método: window.cursyncup ()

     Update the current cursor position of all the ancestors of the
     window to reflect the current cursor position of the window.

 -- Método: window.delch ([y, x])

     Delete any character at ‘(y, x)’.

 -- Método: window.deleteln ()

     Delete the line under the cursor.  All following lines are moved up
     by one line.

 -- Método: window.derwin (begin_y, begin_x)

 -- Método: window.derwin (nlines, ncols, begin_y, begin_x)

     An abbreviation for “derive window”, *note derwin(): 31ae. is the
     same as calling *note subwin(): 31af, except that 'begin_y' and
     'begin_x' are relative to the origin of the window, rather than
     relative to the entire screen.  Return a window object for the
     derived window.

 -- Método: window.echochar (ch[, attr])

     Add character 'ch' with attribute 'attr', and immediately call
     *note refresh(): 3154. on the window.

 -- Método: window.enclose (y, x)

     Test whether the given pair of screen-relative character-cell
     coordinates are enclosed by the given window, returning ‘True’ or
     ‘False’.  It is useful for determining what subset of the screen
     windows enclose the location of a mouse event.

     Alterado na versão 3.10: Previously it returned ‘1’ or ‘0’ instead
     of ‘True’ or ‘False’.

 -- Atributo: window.encoding

     Encoding used to encode method arguments (Unicode strings and
     characters).  The encoding attribute is inherited from the parent
     window when a subwindow is created, for example with *note
     window.subwin(): 31af.  By default, current locale encoding is used
     (see *note locale.getencoding(): 2dc.).

     Adicionado na versão 3.3.

 -- Método: window.erase ()

     Clear the window.

 -- Método: window.getbegyx ()

     Return a tuple ‘(y, x)’ of coordinates of upper-left corner.

 -- Método: window.getbkgd ()

     Return the given window’s current background character/attribute
     pair.

 -- Método: window.getch ([y, x])

     Get a character.  Note that the integer returned does 'not' have to
     be in ASCII range: function keys, keypad keys and so on are
     represented by numbers higher than 255.  In no-delay mode, return
     ‘-1’ if there is no input, otherwise wait until a key is pressed.

 -- Método: window.get_wch ([y, x])

     Get a wide character.  Return a character for most keys, or an
     integer for function keys, keypad keys, and other special keys.  In
     no-delay mode, raise an exception if there is no input.

     Adicionado na versão 3.3.

 -- Método: window.getkey ([y, x])

     Get a character, returning a string instead of an integer, as *note
     getch(): 1627. does.  Function keys, keypad keys and other special
     keys return a multibyte string containing the key name.  In
     no-delay mode, raise an exception if there is no input.

 -- Método: window.getmaxyx ()

     Return a tuple ‘(y, x)’ of the height and width of the window.

 -- Método: window.getparyx ()

     Return the beginning coordinates of this window relative to its
     parent window as a tuple ‘(y, x)’.  Return ‘(-1, -1)’ if this
     window has no parent.

 -- Método: window.getstr ()

 -- Método: window.getstr (n)

 -- Método: window.getstr (y, x)

 -- Método: window.getstr (y, x, n)

     Read a bytes object from the user, with primitive line editing
     capacity.

 -- Método: window.getyx ()

     Return a tuple ‘(y, x)’ of current cursor position relative to the
     window’s upper-left corner.

 -- Método: window.hline (ch, n)

 -- Método: window.hline (y, x, ch, n)

     Display a horizontal line starting at ‘(y, x)’ with length 'n'
     consisting of the character 'ch'.

 -- Método: window.idcok (flag)

     If 'flag' is ‘False’, curses no longer considers using the hardware
     insert/delete character feature of the terminal; if 'flag' is
     ‘True’, use of character insertion and deletion is enabled.  When
     curses is first initialized, use of character insert/delete is
     enabled by default.

 -- Método: window.idlok (flag)

     If 'flag' is ‘True’, *note curses: 2b. will try and use hardware
     line editing facilities.  Otherwise, line insertion/deletion are
     disabled.

 -- Método: window.immedok (flag)

     If 'flag' is ‘True’, any change in the window image automatically
     causes the window to be refreshed; you no longer have to call *note
     refresh(): 3154. yourself.  However, it may degrade performance
     considerably, due to repeated calls to wrefresh.  This option is
     disabled by default.

 -- Método: window.inch ([y, x])

     Return the character at the given position in the window.  The
     bottom 8 bits are the character proper, and upper bits are the
     attributes.

 -- Método: window.insch (ch[, attr])

 -- Método: window.insch (y, x, ch[, attr])

     Paint character 'ch' at ‘(y, x)’ with attributes 'attr', moving the
     line from position 'x' right by one character.

 -- Método: window.insdelln (nlines)

     Insert 'nlines' lines into the specified window above the current
     line.  The 'nlines' bottom lines are lost.  For negative 'nlines',
     delete 'nlines' lines starting with the one under the cursor, and
     move the remaining lines up.  The bottom 'nlines' lines are
     cleared.  The current cursor position remains the same.

 -- Método: window.insertln ()

     Insert a blank line under the cursor.  All following lines are
     moved down by one line.

 -- Método: window.insnstr (str, n[, attr])

 -- Método: window.insnstr (y, x, str, n[, attr])

     Insert a character string (as many characters as will fit on the
     line) before the character under the cursor, up to 'n' characters.
     If 'n' is zero or negative, the entire string is inserted.  All
     characters to the right of the cursor are shifted right, with the
     rightmost characters on the line being lost.  The cursor position
     does not change (after moving to 'y', 'x', if specified).

 -- Método: window.insstr (str[, attr])

 -- Método: window.insstr (y, x, str[, attr])

     Insert a character string (as many characters as will fit on the
     line) before the character under the cursor.  All characters to the
     right of the cursor are shifted right, with the rightmost
     characters on the line being lost.  The cursor position does not
     change (after moving to 'y', 'x', if specified).

 -- Método: window.instr ([n])

 -- Método: window.instr (y, x[, n])

     Return a bytes object of characters, extracted from the window
     starting at the current cursor position, or at 'y', 'x' if
     specified.  Attributes are stripped from the characters.  If 'n' is
     specified, *note instr(): 31c2. returns a string at most 'n'
     characters long (exclusive of the trailing NUL).

 -- Método: window.is_linetouched (line)

     Return ‘True’ if the specified line was modified since the last
     call to *note refresh(): 3154.; otherwise return ‘False’.  Raise a
     *note curses.error: 3140. exception if 'line' is not valid for the
     given window.

 -- Método: window.is_wintouched ()

     Return ‘True’ if the specified window was modified since the last
     call to *note refresh(): 3154.; otherwise return ‘False’.

 -- Método: window.keypad (flag)

     If 'flag' is ‘True’, escape sequences generated by some keys
     (keypad, function keys) will be interpreted by *note curses: 2b.
     If 'flag' is ‘False’, escape sequences will be left as is in the
     input stream.

 -- Método: window.leaveok (flag)

     If 'flag' is ‘True’, cursor is left where it is on update, instead
     of being at “cursor position.” This reduces cursor movement where
     possible.  If possible the cursor will be made invisible.

     If 'flag' is ‘False’, cursor will always be at “cursor position”
     after an update.

 -- Método: window.move (new_y, new_x)

     Move cursor to ‘(new_y, new_x)’.

 -- Método: window.mvderwin (y, x)

     Move the window inside its parent window.  The screen-relative
     parameters of the window are not changed.  This routine is used to
     display different parts of the parent window at the same physical
     position on the screen.

 -- Método: window.mvwin (new_y, new_x)

     Move the window so its upper-left corner is at ‘(new_y, new_x)’.

 -- Método: window.nodelay (flag)

     If 'flag' is ‘True’, *note getch(): 1627. will be non-blocking.

 -- Método: window.notimeout (flag)

     If 'flag' is ‘True’, escape sequences will not be timed out.

     If 'flag' is ‘False’, after a few milliseconds, an escape sequence
     will not be interpreted, and will be left in the input stream as
     is.

 -- Método: window.noutrefresh ()

     Mark for refresh but wait.  This function updates the data
     structure representing the desired state of the window, but does
     not force an update of the physical screen.  To accomplish that,
     call *note doupdate(): 3151.

 -- Método: window.overlay (destwin[, sminrow, smincol, dminrow,
          dmincol, dmaxrow, dmaxcol])

     Overlay the window on top of 'destwin'.  The windows need not be
     the same size, only the overlapping region is copied.  This copy is
     non-destructive, which means that the current background character
     does not overwrite the old contents of 'destwin'.

     To get fine-grained control over the copied region, the second form
     of *note overlay(): 31cb. can be used.  'sminrow' and 'smincol' are
     the upper-left coordinates of the source window, and the other
     variables mark a rectangle in the destination window.

 -- Método: window.overwrite (destwin[, sminrow, smincol, dminrow,
          dmincol, dmaxrow, dmaxcol])

     Overwrite the window on top of 'destwin'.  The windows need not be
     the same size, in which case only the overlapping region is copied.
     This copy is destructive, which means that the current background
     character overwrites the old contents of 'destwin'.

     To get fine-grained control over the copied region, the second form
     of *note overwrite(): 31cc. can be used.  'sminrow' and 'smincol'
     are the upper-left coordinates of the source window, the other
     variables mark a rectangle in the destination window.

 -- Método: window.putwin (file)

     Write all data associated with the window into the provided file
     object.  This information can be later retrieved using the *note
     getwin(): 3167. function.

 -- Método: window.redrawln (beg, num)

     Indicate that the 'num' screen lines, starting at line 'beg', are
     corrupted and should be completely redrawn on the next *note
     refresh(): 3154. call.

 -- Método: window.redrawwin ()

     Touch the entire window, causing it to be completely redrawn on the
     next *note refresh(): 3154. call.

 -- Método: window.refresh ([pminrow, pmincol, sminrow, smincol,
          smaxrow, smaxcol])

     Update the display immediately (sync actual screen with previous
     drawing/deleting methods).

     The 6 optional arguments can only be specified when the window is a
     pad created with *note newpad(): 3179.  The additional parameters
     are needed to indicate what part of the pad and screen are
     involved.  'pminrow' and 'pmincol' specify the upper left-hand
     corner of the rectangle to be displayed in the pad.  'sminrow',
     'smincol', 'smaxrow', and 'smaxcol' specify the edges of the
     rectangle to be displayed on the screen.  The lower right-hand
     corner of the rectangle to be displayed in the pad is calculated
     from the screen coordinates, since the rectangles must be the same
     size.  Both rectangles must be entirely contained within their
     respective structures.  Negative values of 'pminrow', 'pmincol',
     'sminrow', or 'smincol' are treated as if they were zero.

 -- Método: window.resize (nlines, ncols)

     Reallocate storage for a curses window to adjust its dimensions to
     the specified values.  If either dimension is larger than the
     current values, the window’s data is filled with blanks that have
     the current background rendition (as set by *note bkgdset(): 319b.)
     merged into them.

 -- Método: window.scroll ([lines=1])

     Scroll the screen or scrolling region upward by 'lines' lines.

 -- Método: window.scrollok (flag)

     Control what happens when the cursor of a window is moved off the
     edge of the window or scrolling region, either as a result of a
     newline action on the bottom line, or typing the last character of
     the last line.  If 'flag' is ‘False’, the cursor is left on the
     bottom line.  If 'flag' is ‘True’, the window is scrolled up one
     line.  Note that in order to get the physical scrolling effect on
     the terminal, it is also necessary to call *note idlok(): 31ba.

 -- Método: window.setscrreg (top, bottom)

     Set the scrolling region from line 'top' to line 'bottom'.  All
     scrolling actions will take place in this region.

 -- Método: window.standend ()

     Turn off the standout attribute.  On some terminals this has the
     side effect of turning off all attributes.

 -- Método: window.standout ()

     Turn on attribute 'A_STANDOUT'.

 -- Método: window.subpad (begin_y, begin_x)

 -- Método: window.subpad (nlines, ncols, begin_y, begin_x)

     Return a sub-window, whose upper-left corner is at ‘(begin_y,
     begin_x)’, and whose width/height is 'ncols'/'nlines'.

 -- Método: window.subwin (begin_y, begin_x)

 -- Método: window.subwin (nlines, ncols, begin_y, begin_x)

     Return a sub-window, whose upper-left corner is at ‘(begin_y,
     begin_x)’, and whose width/height is 'ncols'/'nlines'.

     By default, the sub-window will extend from the specified position
     to the lower right corner of the window.

 -- Método: window.syncdown ()

     Touch each location in the window that has been touched in any of
     its ancestor windows.  This routine is called by *note refresh():
     3154, so it should almost never be necessary to call it manually.

 -- Método: window.syncok (flag)

     If 'flag' is ‘True’, then *note syncup(): 31d8. is called
     automatically whenever there is a change in the window.

 -- Método: window.syncup ()

     Touch all locations in ancestors of the window that have been
     changed in the window.

 -- Método: window.timeout (delay)

     Set blocking or non-blocking read behavior for the window.  If
     'delay' is negative, blocking read is used (which will wait
     indefinitely for input).  If 'delay' is zero, then non-blocking
     read is used, and *note getch(): 1627. will return ‘-1’ if no input
     is waiting.  If 'delay' is positive, then *note getch(): 1627. will
     block for 'delay' milliseconds, and return ‘-1’ if there is still
     no input at the end of that time.

 -- Método: window.touchline (start, count[, changed])

     Pretend 'count' lines have been changed, starting with line
     'start'.  If 'changed' is supplied, it specifies whether the
     affected lines are marked as having been changed ('changed'‘=True’)
     or unchanged ('changed'‘=False’).

 -- Método: window.touchwin ()

     Pretend the whole window has been changed, for purposes of drawing
     optimizations.

 -- Método: window.untouchwin ()

     Mark all lines in the window as unchanged since the last call to
     *note refresh(): 3154.

 -- Método: window.vline (ch, n[, attr])

 -- Método: window.vline (y, x, ch, n[, attr])

     Display a vertical line starting at ‘(y, x)’ with length 'n'
     consisting of the character 'ch' with attributes 'attr'.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue35924


File: python.info,  Node: Constantes<6>,  Prev: Window Objects,  Up: curses — Gerenciador de terminal para visualizadores de células de caracteres

5.17.5.3 Constantes
...................

The *note curses: 2b. module defines the following data members:

 -- Dado: curses.ERR

     Some curses routines that return an integer, such as *note getch():
     1627, return *note ERR: 31dd. upon failure.

 -- Dado: curses.OK

     Some curses routines that return an integer, such as *note napms():
     1688, return *note OK: 31de. upon success.

 -- Dado: curses.version

     A bytes object representing the current version of the module.

 -- Dado: curses.ncurses_version

     A named tuple containing the three components of the ncurses
     library version: 'major', 'minor', and 'patch'.  All values are
     integers.  The components can also be accessed by name, so
     ‘curses.ncurses_version[0]’ is equivalent to
     ‘curses.ncurses_version.major’ and so on.

     Availability: if the ncurses library is used.

     Adicionado na versão 3.8.

 -- Dado: curses.COLORS

     The maximum number of colors the terminal can support.  It is
     defined only after the call to *note start_color(): 3186.

 -- Dado: curses.COLOR_PAIRS

     The maximum number of color pairs the terminal can support.  It is
     defined only after the call to *note start_color(): 3186.

 -- Dado: curses.COLS

     The width of the screen, i.e., the number of columns.  It is
     defined only after the call to *note initscr(): 1689.  Updated by
     *note update_lines_cols(): e16, *note resizeterm(): 1690. and *note
     resize_term(): 1691.

 -- Dado: curses.LINES

     The height of the screen, i.e., the number of lines.  It is defined
     only after the call to *note initscr(): 1689.  Updated by *note
     update_lines_cols(): e16, *note resizeterm(): 1690. and *note
     resize_term(): 1691.

Some constants are available to specify character cell attributes.  The
exact constants available are system dependent.

Atributo                     Significado
                             
-----------------------------------------------------------------
                             
 -- Dado:                    Alternate character set mode
          curses.A_ALTCHARSET

 -- Dado: curses.A_BLINK     Blink mode
                             
                             
 -- Dado: curses.A_BOLD      Bold mode
                             
                             
 -- Dado: curses.A_DIM       Dim mode
                             
                             
 -- Dado: curses.A_INVIS     Invisible or blank mode
                             
                             
 -- Dado: curses.A_ITALIC    Italic mode
                             
                             
 -- Dado: curses.A_NORMAL    Normal attribute
                             
                             
 -- Dado: curses.A_PROTECT   Protected mode
                             
                             
 -- Dado: curses.A_REVERSE   Reverse background and foreground
                             colors
                             
                             
 -- Dado:                    Standout mode
          curses.A_STANDOUT  

 -- Dado:                    Underline mode
          curses.A_UNDERLINE 

 -- Dado:                    Horizontal highlight
          curses.A_HORIZONTAL

 -- Dado: curses.A_LEFT      Left highlight
                             
                             
 -- Dado: curses.A_LOW       Low highlight
                             
                             
 -- Dado: curses.A_RIGHT     Right highlight
                             
                             
 -- Dado: curses.A_TOP       Top highlight
                             
                             
 -- Dado:                    Vertical highlight
          curses.A_VERTICAL  

Adicionado na versão 3.7: ‘A_ITALIC’ was added.

Several constants are available to extract corresponding attributes
returned by some methods.

Bit-mask                      Significado
                              
------------------------------------------------------------------
                              
 -- Dado:                     Bit-mask to extract attributes
          curses.A_ATTRIBUTES 

 -- Dado: curses.A_CHARTEXT   Bit-mask to extract a character
                              
                              
 -- Dado: curses.A_COLOR      Bit-mask to extract color-pair
                              field information
                              

Keys are referred to by integer constants with names starting with
‘KEY_’.  The exact keycaps available are system dependent.

Key constant                  Chave
                              
-------------------------------------------------------------------------------
                              
 -- Dado: curses.KEY_MIN      Minimum key value
                              
                              
 -- Dado: curses.KEY_BREAK    Break key (unreliable)
                              
                              
 -- Dado: curses.KEY_DOWN     Down-arrow
                              
                              
 -- Dado: curses.KEY_UP       Up-arrow
                              
                              
 -- Dado: curses.KEY_LEFT     Left-arrow
                              
                              
 -- Dado: curses.KEY_RIGHT    Right-arrow
                              
                              
 -- Dado: curses.KEY_HOME     Home key (upward+left arrow)
                              
                              
 -- Dado:                     Backspace (unreliable)
          curses.KEY_BACKSPACE

 -- Dado: curses.KEY_F0       Function keys.  Up to 64 function keys are
                              supported.
                              
                              
 -- Dado: curses.KEY_Fn       Value of function key 'n'
                              
                              
 -- Dado: curses.KEY_DL       Delete line
                              
                              
 -- Dado: curses.KEY_IL       Insert line
                              
                              
 -- Dado: curses.KEY_DC       Delete character
                              
                              
 -- Dado: curses.KEY_IC       Insert char or enter insert mode
                              
                              
 -- Dado: curses.KEY_EIC      Exit insert char mode
                              
                              
 -- Dado: curses.KEY_CLEAR    Clear screen
                              
                              
 -- Dado: curses.KEY_EOS      Clear to end of screen
                              
                              
 -- Dado: curses.KEY_EOL      Clear to end of line
                              
                              
 -- Dado: curses.KEY_SF       Scroll 1 line forward
                              
                              
 -- Dado: curses.KEY_SR       Scroll 1 line backward (reverse)
                              
                              
 -- Dado: curses.KEY_NPAGE    Next page
                              
                              
 -- Dado: curses.KEY_PPAGE    Previous page
                              
                              
 -- Dado: curses.KEY_STAB     Set tab
                              
                              
 -- Dado: curses.KEY_CTAB     Clear tab
                              
                              
 -- Dado: curses.KEY_CATAB    Clear all tabs
                              
                              
 -- Dado: curses.KEY_ENTER    Enter or send (unreliable)
                              
                              
 -- Dado: curses.KEY_SRESET   Soft (partial) reset (unreliable)
                              
                              
 -- Dado: curses.KEY_RESET    Reset or hard reset (unreliable)
                              
                              
 -- Dado: curses.KEY_PRINT    Print
                              
                              
 -- Dado: curses.KEY_LL       Home down or bottom (lower left)
                              
                              
 -- Dado: curses.KEY_A1       Upper left of keypad
                              
                              
 -- Dado: curses.KEY_A3       Upper right of keypad
                              
                              
 -- Dado: curses.KEY_B2       Center of keypad
                              
                              
 -- Dado: curses.KEY_C1       Lower left of keypad
                              
                              
 -- Dado: curses.KEY_C3       Lower right of keypad
                              
                              
 -- Dado: curses.KEY_BTAB     Back tab
                              
                              
 -- Dado: curses.KEY_BEG      Beg (beginning)
                              
                              
 -- Dado: curses.KEY_CANCEL   Cancelar
                              
                              
 -- Dado: curses.KEY_CLOSE    Close
                              
                              
 -- Dado:                     Cmd (command)
          curses.KEY_COMMAND  

 -- Dado: curses.KEY_COPY     Copy
                              
                              
 -- Dado: curses.KEY_CREATE   Create
                              
                              
 -- Dado: curses.KEY_END      End
                              
                              
 -- Dado: curses.KEY_EXIT     Exit
                              
                              
 -- Dado: curses.KEY_FIND     Find
                              
                              
 -- Dado: curses.KEY_HELP     Help
                              
                              
 -- Dado: curses.KEY_MARK     Mark
                              
                              
 -- Dado:                     Message
          curses.KEY_MESSAGE  

 -- Dado: curses.KEY_MOVE     Move
                              
                              
 -- Dado: curses.KEY_NEXT     Next
                              
                              
 -- Dado: curses.KEY_OPEN     Open
                              
                              
 -- Dado:                     Opções
          curses.KEY_OPTIONS  

 -- Dado:                     Prev (previous)
          curses.KEY_PREVIOUS 

 -- Dado: curses.KEY_REDO     Redo
                              
                              
 -- Dado:                     Ref (reference)
          curses.KEY_REFERENCE

 -- Dado:                     Refresh
          curses.KEY_REFRESH  

 -- Dado:                     Replace
          curses.KEY_REPLACE  

 -- Dado:                     Restart
          curses.KEY_RESTART  

 -- Dado: curses.KEY_RESUME   Resume
                              
                              
 -- Dado: curses.KEY_SAVE     Save
                              
                              
 -- Dado: curses.KEY_SBEG     Shifted Beg (beginning)
                              
                              
 -- Dado:                     Shifted Cancel
          curses.KEY_SCANCEL  

 -- Dado:                     Shifted Command
          curses.KEY_SCOMMAND 

 -- Dado: curses.KEY_SCOPY    Shifted Copy
                              
                              
 -- Dado:                     Shifted Create
          curses.KEY_SCREATE  

 -- Dado: curses.KEY_SDC      Shifted Delete char
                              
                              
 -- Dado: curses.KEY_SDL      Shifted Delete line
                              
                              
 -- Dado: curses.KEY_SELECT   Select
                              
                              
 -- Dado: curses.KEY_SEND     Shifted End
                              
                              
 -- Dado: curses.KEY_SEOL     Shifted Clear line
                              
                              
 -- Dado: curses.KEY_SEXIT    Shifted Exit
                              
                              
 -- Dado: curses.KEY_SFIND    Shifted Find
                              
                              
 -- Dado: curses.KEY_SHELP    Shifted Help
                              
                              
 -- Dado: curses.KEY_SHOME    Shifted Home
                              
                              
 -- Dado: curses.KEY_SIC      Shifted Input
                              
                              
 -- Dado: curses.KEY_SLEFT    Shifted Left arrow
                              
                              
 -- Dado:                     Shifted Message
          curses.KEY_SMESSAGE 

 -- Dado: curses.KEY_SMOVE    Shifted Move
                              
                              
 -- Dado: curses.KEY_SNEXT    Shifted Next
                              
                              
 -- Dado:                     Shifted Options
          curses.KEY_SOPTIONS 

 -- Dado:                     Shifted Prev
          curses.KEY_SPREVIOUS

 -- Dado: curses.KEY_SPRINT   Shifted Print
                              
                              
 -- Dado: curses.KEY_SREDO    Shifted Redo
                              
                              
 -- Dado:                     Shifted Replace
          curses.KEY_SREPLACE 

 -- Dado: curses.KEY_SRIGHT   Shifted Right arrow
                              
                              
 -- Dado: curses.KEY_SRSUME   Resumo alterado
                              
                              
 -- Dado: curses.KEY_SSAVE    Shifted Save
                              
                              
 -- Dado:                     Shifted Suspend
          curses.KEY_SSUSPEND 

 -- Dado: curses.KEY_SUNDO    Shifted Undo
                              
                              
 -- Dado:                     Suspend
          curses.KEY_SUSPEND  

 -- Dado: curses.KEY_UNDO     Undo
                              
                              
 -- Dado: curses.KEY_MOUSE    Mouse event has occurred
                              
                              
 -- Dado: curses.KEY_RESIZE   Terminal resize event
                              
                              
 -- Dado: curses.KEY_MAX      Maximum key value
                              

On VT100s and their software emulations, such as X terminal emulators,
there are normally at least four function keys (*note KEY_F1: 31fa,
*note KEY_F2: 31fa, *note KEY_F3: 31fa, *note KEY_F4: 31fa.) available,
and the arrow keys mapped to *note KEY_UP: 31f4, *note KEY_DOWN: 31f3,
*note KEY_LEFT: 31f5. and *note KEY_RIGHT: 31f6. in the obvious way.  If
your machine has a PC keyboard, it is safe to expect arrow keys and
twelve function keys (older PC keyboards may have only ten function
keys); also, the following keypad mappings are standard:

Keycap                 Constante
                       
---------------------------------------
                       
‘Insert’               KEY_IC
                       
                       
‘Delete’               KEY_DC
                       
                       
‘Home’                 KEY_HOME
                       
                       
‘End’                  KEY_END
                       
                       
‘Page Up’              KEY_PPAGE
                       
                       
‘Page Down’            KEY_NPAGE
                       

The following table lists characters from the alternate character set.
These are inherited from the VT100 terminal, and will generally be
available on software emulations such as X terminals.  When there is no
graphic available, curses falls back on a crude printable ASCII
approximation.

     Nota: These are available only after *note initscr(): 1689. has
     been called.

Código ACS                   Significado
                             
----------------------------------------------------------------------------
                             
 -- Dado: curses.ACS_BBSS    alternate name for upper right corner
                             
                             
 -- Dado: curses.ACS_BLOCK   solid square block
                             
                             
 -- Dado: curses.ACS_BOARD   board of squares
                             
                             
 -- Dado: curses.ACS_BSBS    alternate name for horizontal line
                             
                             
 -- Dado: curses.ACS_BSSB    alternate name for upper left corner
                             
                             
 -- Dado: curses.ACS_BSSS    alternate name for top tee
                             
                             
 -- Dado: curses.ACS_BTEE    bottom tee
                             
                             
 -- Dado:                    bullet
          curses.ACS_BULLET  

 -- Dado:                    checker board (stipple)
          curses.ACS_CKBOARD 

 -- Dado:                    arrow pointing down
          curses.ACS_DARROW  

 -- Dado:                    degree symbol
          curses.ACS_DEGREE  

 -- Dado:                    diamond
          curses.ACS_DIAMOND 

 -- Dado:                    greater-than-or-equal-to
          curses.ACS_GEQUAL  

 -- Dado: curses.ACS_HLINE   horizontal line
                             
                             
 -- Dado:                    lantern symbol
          curses.ACS_LANTERN 

 -- Dado:                    left arrow
          curses.ACS_LARROW  

 -- Dado:                    less-than-or-equal-to
          curses.ACS_LEQUAL  

 -- Dado:                    lower left-hand corner
          curses.ACS_LLCORNER

 -- Dado:                    lower right-hand corner
          curses.ACS_LRCORNER

 -- Dado: curses.ACS_LTEE    left tee
                             
                             
 -- Dado:                    not-equal sign
          curses.ACS_NEQUAL  

 -- Dado: curses.ACS_PI      letter pi
                             
                             
 -- Dado:                    plus-or-minus sign
          curses.ACS_PLMINUS 

 -- Dado: curses.ACS_PLUS    big plus sign
                             
                             
 -- Dado:                    right arrow
          curses.ACS_RARROW  

 -- Dado: curses.ACS_RTEE    right tee
                             
                             
 -- Dado: curses.ACS_S1      scan line 1
                             
                             
 -- Dado: curses.ACS_S3      scan line 3
                             
                             
 -- Dado: curses.ACS_S7      scan line 7
                             
                             
 -- Dado: curses.ACS_S9      scan line 9
                             
                             
 -- Dado: curses.ACS_SBBS    alternate name for lower right corner
                             
                             
 -- Dado: curses.ACS_SBSB    alternate name for vertical line
                             
                             
 -- Dado: curses.ACS_SBSS    alternate name for right tee
                             
                             
 -- Dado: curses.ACS_SSBB    alternate name for lower left corner
                             
                             
 -- Dado: curses.ACS_SSBS    alternate name for bottom tee
                             
                             
 -- Dado: curses.ACS_SSSB    alternate name for left tee
                             
                             
 -- Dado: curses.ACS_SSSS    alternate name for crossover or big plus
                             
                             
 -- Dado:                    pound sterling
          curses.ACS_STERLING

 -- Dado: curses.ACS_TTEE    top tee
                             
                             
 -- Dado:                    up arrow
          curses.ACS_UARROW  

 -- Dado:                    upper left corner
          curses.ACS_ULCORNER

 -- Dado:                    upper right corner
          curses.ACS_URCORNER

 -- Dado: curses.ACS_VLINE   vertical line
                             

The following table lists mouse button constants used by *note
getmouse(): 315b.:

Mouse button constant                  Significado
                                       
-----------------------------------------------------------------------------------------
                                       
 -- Dado: curses.BUTTONn_PRESSED       Mouse button 'n' pressed
                                       
                                       
 -- Dado: curses.BUTTONn_RELEASED      Mouse button 'n' released
                                       
                                       
 -- Dado: curses.BUTTONn_CLICKED       Mouse button 'n' clicked
                                       
                                       
 -- Dado:                              Mouse button 'n' double clicked
          curses.BUTTONn_DOUBLE_CLICKED

 -- Dado:                              Mouse button 'n' triple clicked
          curses.BUTTONn_TRIPLE_CLICKED

 -- Dado: curses.BUTTON_SHIFT          Shift was down during button state change
                                       
                                       
 -- Dado: curses.BUTTON_CTRL           Control was down during button state change
                                       
                                       
 -- Dado: curses.BUTTON_ALT            Control was down during button state change
                                       

Alterado na versão 3.10: The ‘BUTTON5_*’ constants are now exposed if
they are provided by the underlying curses library.

The following table lists the predefined colors:

Constante                     Color
                              
---------------------------------------------------------------
                              
 -- Dado:                     Black
          curses.COLOR_BLACK  

 -- Dado: curses.COLOR_BLUE   Blue
                              
                              
 -- Dado: curses.COLOR_CYAN   Cyan (light greenish blue)
                              
                              
 -- Dado:                     Green
          curses.COLOR_GREEN  

 -- Dado:                     Magenta (purplish red)
          curses.COLOR_MAGENTA

 -- Dado: curses.COLOR_RED    Red
                              
                              
 -- Dado:                     White
          curses.COLOR_WHITE  

 -- Dado:                     Yellow
          curses.COLOR_YELLOW 


File: python.info,  Node: curses textpad — Text input widget for curses programs,  Next: curses ascii — Utilitários para caracteres ASCII,  Prev: curses — Gerenciador de terminal para visualizadores de células de caracteres,  Up: Bibliotecas de interface de linha de comando

5.17.6 ‘curses.textpad’ — Text input widget for curses programs
---------------------------------------------------------------

The *note curses.textpad: 2e. module provides a *note Textbox: 327d.
class that handles elementary text editing in a curses window,
supporting a set of keybindings resembling those of Emacs (thus, also of
Netscape Navigator, BBedit 6.x, FrameMaker, and many other programs).
The module also provides a rectangle-drawing function useful for framing
text boxes or for other purposes.

The module *note curses.textpad: 2e. defines the following function:

 -- Função: curses.textpad.rectangle (win, uly, ulx, lry, lrx)

     Draw a rectangle.  The first argument must be a window object; the
     remaining arguments are coordinates relative to that window.  The
     second and third arguments are the y and x coordinates of the upper
     left hand corner of the rectangle to be drawn; the fourth and fifth
     arguments are the y and x coordinates of the lower right hand
     corner.  The rectangle will be drawn using VT100/IBM PC forms
     characters on terminals that make this possible (including xterm
     and most other software terminal emulators).  Otherwise it will be
     drawn with ASCII dashes, vertical bars, and plus signs.

* Menu:

* Textbox objects::


File: python.info,  Node: Textbox objects,  Up: curses textpad — Text input widget for curses programs

5.17.6.1 Textbox objects
........................

You can instantiate a *note Textbox: 327d. object as follows:

 -- Classe: curses.textpad.Textbox (win)

     Return a textbox widget object.  The 'win' argument should be a
     curses *note window: 3170. object in which the textbox is to be
     contained.  The edit cursor of the textbox is initially located at
     the upper left hand corner of the containing window, with
     coordinates ‘(0, 0)’.  The instance’s *note stripspaces: 3281. flag
     is initially on.

     *note Textbox: 327d. objects have the following methods:

      -- Método: edit ([validator])

          This is the entry point you will normally use.  It accepts
          editing keystrokes until one of the termination keystrokes is
          entered.  If 'validator' is supplied, it must be a function.
          It will be called for each keystroke entered with the
          keystroke as a parameter; command dispatch is done on the
          result.  This method returns the window contents as a string;
          whether blanks in the window are included is affected by the
          *note stripspaces: 3281. attribute.

      -- Método: do_command (ch)

          Process a single command keystroke.  Here are the supported
          special keystrokes:

          Keystroke              Ação
                                 
          -----------------------------------------------------------------------
                                 
          ‘Control’-‘A’          Go to left edge of window.
                                 
                                 
          ‘Control’-‘B’          Cursor left, wrapping to previous line if
                                 appropriate.
                                 
                                 
          ‘Control’-‘D’          Delete character under cursor.
                                 
                                 
          ‘Control’-‘E’          Go to right edge (stripspaces off) or end of
                                 line (stripspaces on).
                                 
                                 
          ‘Control’-‘F’          Cursor right, wrapping to next line when
                                 appropriate.
                                 
                                 
          ‘Control’-‘G’          Terminate, returning the window contents.
                                 
                                 
          ‘Control’-‘H’          Delete character backward.
                                 
                                 
          ‘Control’-‘J’          Terminate if the window is 1 line, otherwise
                                 insert newline.
                                 
                                 
          ‘Control’-‘K’          If line is blank, delete it, otherwise clear
                                 to end of line.
                                 
                                 
          ‘Control’-‘L’          Refresh screen.
                                 
                                 
          ‘Control’-‘N’          Cursor down; move down one line.
                                 
                                 
          ‘Control’-‘O’          Insert a blank line at cursor location.
                                 
                                 
          ‘Control’-‘P’          Cursor up; move up one line.
                                 

          Move operations do nothing if the cursor is at an edge where
          the movement is not possible.  The following synonyms are
          supported where possible:

          Constante                            Keystroke
                                               
          ------------------------------------------------------------
                                               
          *note KEY_LEFT: 31f5.                ‘Control’-‘B’
                                               
                                               
          *note KEY_RIGHT: 31f6.               ‘Control’-‘F’
                                               
                                               
          *note KEY_UP: 31f4.                  ‘Control’-‘P’
                                               
                                               
          *note KEY_DOWN: 31f3.                ‘Control’-‘N’
                                               
                                               
          *note KEY_BACKSPACE: 31f8.           ‘Control’-‘h’
                                               

          All other keystrokes are treated as a command to insert the
          given character and move right (with line wrapping).

      -- Método: gather ()

          Return the window contents as a string; whether blanks in the
          window are included is affected by the *note stripspaces:
          3281. member.

      -- Atributo: stripspaces

          This attribute is a flag which controls the interpretation of
          blanks in the window.  When it is on, trailing blanks on each
          line are ignored; any cursor motion that would land the cursor
          on a trailing blank goes to the end of that line instead, and
          trailing blanks are stripped when the window contents are
          gathered.


File: python.info,  Node: curses ascii — Utilitários para caracteres ASCII,  Next: curses panel — Uma extensão de pilha de painéis para o curses,  Prev: curses textpad — Text input widget for curses programs,  Up: Bibliotecas de interface de linha de comando

5.17.7 ‘curses.ascii’ — Utilitários para caracteres ASCII
---------------------------------------------------------

'Código-fonte:' Lib/curses/ascii.py(1)

__________________________________________________________________

O módulo *note curses.ascii: 2c. fornece constantes de nome para
caracteres ASCII e funções para testar associação em várias classes de
caracteres ASCII. As constantes fornecidas são nomes para caracteres de
controle, como detalhado a seguir:

Nome                Significado
                    
-----------------------------------------------------------------------
                    
 -- Dado:
          curses.ascii.NUL

 -- Dado:           Início do cabeçalho, interrupção do console
          curses.ascii.SOH

 -- Dado:           Início de texto
          curses.ascii.STX

 -- Dado:           Fim de texto
          curses.ascii.ETX

 -- Dado:           Fim de transmissão
          curses.ascii.EOT

 -- Dado:           Consulta, segue com controle de fluxo
          curses.ascii.ENQ*note ACK: 328e.
                    
                    
 -- Dado:           Confirmação
          curses.ascii.ACK

 -- Dado:           Campainha
          curses.ascii.BEL

 -- Dado:           Backspace
          curses.ascii.BS

 -- Dado:           Tabulação
          curses.ascii.TAB

 -- Dado:           Apelido para *note TAB: 3291.: “Tabulação
          curses.ascii.HThorizontal”
                    
                    
 -- Dado:           Alimentação de linha ou 'line feed'
          curses.ascii.LF

 -- Dado:           Apelido para *note LF: 3293.: “Nova linha”
          curses.ascii.NL

 -- Dado:           Tabulação vertical
          curses.ascii.VT

 -- Dado:           Alimentação de formulário ou 'form feed'
          curses.ascii.FF

 -- Dado:           Retorno de carro ou 'carriage return'
          curses.ascii.CR

 -- Dado:           Deslocamento para fora ou 'shift-out', inicia um
          curses.ascii.SOconjunto de caracteres alternativo
                    
                    
 -- Dado:           Deslocamento para dentro ou 'shift-in', retoma o
          curses.ascii.SIconjunto de caracteres padrão
                    
                    
 -- Dado:           Escape de conexão ou 'data-link escape'
          curses.ascii.DLE

 -- Dado:           XON, para controle de fluxo
          curses.ascii.DC1

 -- Dado:           Controle de dispositivo 2, control de fluxo em
          curses.ascii.DC2modo bloco
                    
                    
 -- Dado:           XOFF, para controle de fluxo
          curses.ascii.DC3

 -- Dado:           Controle de dispositivo 4
          curses.ascii.DC4

 -- Dado:           Confirmação negativa
          curses.ascii.NAK

 -- Dado:           Estado ocioso síncrono
          curses.ascii.SYN

 -- Dado:           Bloco de fim de transmissão
          curses.ascii.ETB

 -- Dado:           Cancelar
          curses.ascii.CAN

 -- Dado:           Fim de mídia
          curses.ascii.EM

 -- Dado:           Substituir
          curses.ascii.SUB

 -- Dado:           Escapar
          curses.ascii.ESC

 -- Dado:           Separador de arquivos
          curses.ascii.FS

 -- Dado:           Separador de grupos
          curses.ascii.GS

 -- Dado:           Separador de registros, terminador de modo bloco
          curses.ascii.RS

 -- Dado:           Separador de unidades
          curses.ascii.US

 -- Dado:           Espaço
          curses.ascii.SP

 -- Dado:           Excluir
          curses.ascii.DEL

Note que muitos deles têm pouca significância prática no uso moderno.
Os mnemônicos derivam de convenções de teleimpressoras que antecedem os
computadores digitais.

O módulo fornece as seguintes funções, baseadas nas da biblioteca C
padrão:

 -- Função: curses.ascii.isalnum (c)

     Verifica se há um caractere alfanumérico ASCII; equivale a
     ‘isalpha(c) or isdigit(c)’.

 -- Função: curses.ascii.isalpha (c)

     Verifica se há um caractere alfabético ASCII; equivale a
     ‘isupper(c) or islower(c)’.

 -- Função: curses.ascii.isascii (c)

     Verifica se há um valor de caractere que se encaixa no conjunto
     ASCII de 7 bits.

 -- Função: curses.ascii.isblank (c)

     Verifica se há um caractere de espaço em branco ASCII; espaço ou
     tabulação horizontal.

 -- Função: curses.ascii.iscntrl (c)

     Verifica se há um caractere de controle ASCII (no intervalo de 0x00
     a 0x1f ou 0x7f).

 -- Função: curses.ascii.isdigit (c)

     Verifica se há um dígito decimal ASCII, ‘'0'’ a ‘'9'’.  Isso
     equivale a ‘c in string.digits’.

 -- Função: curses.ascii.isgraph (c)

     Verifica se há algum caractere ASCII imprimível, exceto espaço.

 -- Função: curses.ascii.islower (c)

     Verifica se há um caractere ASCII minúsculo.

 -- Função: curses.ascii.isprint (c)

     Verifica se há algum caractere ASCII imprimível, incluindo espaço.

 -- Função: curses.ascii.ispunct (c)

     Verifica se há algum caractere ASCII imprimível que não seja um
     espaço ou um caractere alfanumérico.

 -- Função: curses.ascii.isspace (c)

     Verifica caracteres de espaço em branco ASCII; espaço, quebra de
     linha, retorno de carro, quebra de página, tabulação horizontal,
     tabulação vertical.

 -- Função: curses.ascii.isupper (c)

     Verifica se há uma letra maiúscula ASCII.

 -- Função: curses.ascii.isxdigit (c)

     Verifica se há um dígito hexadecimal ASCII. Isso equivale a ‘c in
     string.hexdigits’.

 -- Função: curses.ascii.isctrl (c)

     Verifica se há um caractere de controle ASCII (valores ordinais de
     0 a 31).

 -- Função: curses.ascii.ismeta (c)

     Verifica se há um caractere não ASCII (valores ordinais 0x80 e
     acima).

Essas funções aceitam números inteiros ou strings de caracteres únicos;
quando o argumento é uma string, ele é primeiro convertido usando a
função embutida *note ord(): 2080.

Observe que todas essas funções verificam valores de bits ordinais
derivados do caractere da string que você passa; elas não sabem nada
sobre a codificação de caracteres da máquina host.

As duas funções a seguir aceitam uma string de caractere único ou um
valor de byte inteiro; elas retornam um valor do mesmo tipo.

 -- Função: curses.ascii.ascii (c)

     Retorna o valor ASCII correspondente aos 7 bits mais baixos de 'c'.

 -- Função: curses.ascii.ctrl (c)

     Retorna o caractere de controle correspondente ao caractere
     fornecido (é feito um E bit a bit com 0x1f sobre o valor do bit do
     caractere).

 -- Função: curses.ascii.alt (c)

     Retorna o caractere de 8 vits correspondente ao caractere ASCII
     fornecido (é feito um OU bit a bit com 0x80 sobre o valor do bit do
     caractere).

A função a seguir aceita uma string de um único caractere ou um valor
inteiro; ela retorna uma string.

 -- Função: curses.ascii.unctrl (c)

     Retorna uma representação de string do caractere ASCII 'c'.  Se 'c'
     for imprimível, essa string é o próprio caractere.  Se o caractere
     for um caractere de controle (0x00–0x1f), a string consiste em um
     acento circunflexo (‘'^'’) seguido pela letra maiúscula
     correspondente.  Se o caractere for de exclusão ASCII (0x7f), a
     string é ‘'^?'’.  Se o caractere tiver seu metabit (0x80) definido,
     o metabit é removido, as regras precedentes são aplicadas e ‘'!'’ é
     adicionado ao resultado.

 -- Dado: curses.ascii.controlnames

     Um vetor de strings de 33 elementos que contém os mnemônicos ASCII
     para os trinta e dois caracteres de controle ASCII de 0 (NUL) a
     0x1f (US), em ordem, mais o mnemônico ‘SP’ para o caractere de
     espaço.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/curses/ascii.py


File: python.info,  Node: curses panel — Uma extensão de pilha de painéis para o curses,  Next: cmd — Suporte para interpretadores de comando orientado a linhas,  Prev: curses ascii — Utilitários para caracteres ASCII,  Up: Bibliotecas de interface de linha de comando

5.17.8 ‘curses.panel’ — Uma extensão de pilha de painéis para o curses
----------------------------------------------------------------------

__________________________________________________________________

Painéis são janelas com o recurso adicional de profundidade, então eles
podem ser empilhados uns sobre os outros, e somente as partes visíveis
de cada janela serão exibidas.  Painéis podem ser adicionados, movidos
para cima ou para baixo na pilha, e removidos.

* Menu:

* Funções: Funções<7>.
* Objetos painel::


File: python.info,  Node: Funções<7>,  Next: Objetos painel,  Up: curses panel — Uma extensão de pilha de painéis para o curses

5.17.8.1 Funções
................

O módulo *note curses.panel: 2d. define as seguintes funções:

 -- Função: curses.panel.bottom_panel ()

     Retorna o painel inferior da pilha de painéis.

 -- Função: curses.panel.new_panel (win)

     Retorna um objeto painel, associando-o à janela fornecida 'win'.
     Esteja ciente de que você precisa manter o objeto painel retornado
     referenciado explicitamente.  Se não fizer isso, o objeto painel
     será coletado como lixo e removido da pilha de painéis.

 -- Função: curses.panel.top_panel ()

     Retorna o painel superior da pilha de painéis.

 -- Função: curses.panel.update_panels ()

     Atualiza a tela virtual após alterações na pilha de painéis.  Isso
     não chama *note curses.doupdate(): 3151, então você terá que fazer
     isso sozinho.


File: python.info,  Node: Objetos painel,  Prev: Funções<7>,  Up: curses panel — Uma extensão de pilha de painéis para o curses

5.17.8.2 Objetos painel
.......................

Objetos painel, como retornados por *note new_panel(): 32c6. acima, são
janelas com uma ordem de empilhamento.  Há sempre uma janela associada a
um painel que determina o conteúdo, enquanto os métodos de painel são
responsáveis pela profundidade da janela na pilha de painéis.

Objetos painel possuem os seguintes métodos:

 -- Método: Panel.above ()

     Retorna o painel acima do painel atual.

 -- Método: Panel.below ()

     Retorna o painel abaixo do painel atual.

 -- Método: Panel.bottom ()

     Insere o painel para o fundo da pilha.

 -- Método: Panel.hidden ()

     Retorna ‘True’ se o painel estiver oculto (não visível), ‘False’
     caso contrário.

 -- Método: Panel.hide ()

     Oculta o painel.  Isso não exclui o objeto, apenas torna a janela
     invisível na tela.

 -- Método: Panel.move (y, x)

     Move o painel para as coordenadas ‘(y, x)’ da tela.

 -- Método: Panel.replace (win)

     Altera a janela associada ao painel para a janela 'win'.

 -- Método: Panel.set_userptr (obj)

     Define o ponteiro do usuário do painel para 'obj'.  Isso é usado
     para associar um pedaço arbitrário de dados ao painel, e pode ser
     qualquer objeto Python.

 -- Método: Panel.show ()

     Exibe o painel (que pode estar oculto).

 -- Método: Panel.top ()

     Insere o painel para o topo da pilha.

 -- Método: Panel.userptr ()

     Retorna o ponteiro do usuário para o painel.  Pode ser qualquer
     objeto Python.

 -- Método: Panel.window ()

     Retorna o objeto de janela associado ao painel.


File: python.info,  Node: cmd — Suporte para interpretadores de comando orientado a linhas,  Prev: curses panel — Uma extensão de pilha de painéis para o curses,  Up: Bibliotecas de interface de linha de comando

5.17.9 ‘cmd’ — Suporte para interpretadores de comando orientado a linhas
-------------------------------------------------------------------------

'Código-fonte:' Lib/cmd.py(1)

__________________________________________________________________

A classe *note Cmd: 17b8. fornece um framework simples para escrever
interpretadores de comando orientados a linhas.  Eles são frequentemente
úteis para melhorar testes, ferramentas administrativas e protótipos que
mais tarde serão encapsulados em uma interface mais sofisticada.

 -- Classe: cmd.Cmd (completekey='tab', stdin=None, stdout=None)

     Uma instância de *note Cmd: 17b8. ou instância de sua subclasse é
     um framework de interpretador orientado a linhas.  Não há um bom
     motivo para instanciar *note Cmd: 17b8. em si; em vez disso, ele é
     útil como uma superclasse de uma classe de interpretador que você
     mesmo define para herdar os métodos de *note Cmd: 17b8. e
     encapsular métodos de ação.

     O argumento opcional 'completekey' é o nome *note readline: ba. de
     uma chave de conclusão; o padrão é ‘Tab’.  Se 'completekey' não for
     *note None: 675. e *note readline: ba. estiver disponível, a
     conclusão do comando será feita automaticamente.

     O padrão, ‘'tab'’, é tratado especialmente, de modo que se refere à
     tecla ‘Tab’ em cada *note readline.backend: 17a3.  Especificamente,
     se *note readline.backend: 17a3. for ‘editline’, ‘Cmd’ usará ‘'^I'’
     em vez de ‘'tab'’.  Observe que outros valores não são tratados
     dessa forma e podem funcionar apenas com um backend específico.

     Os argumentos opcionais 'stdin' e 'stdout' especificam os objetos
     arquivo de entrada e saída que a instância Cmd ou instância de sua
     subclasse usará para entrada e saída.  Se não forem especificados,
     eles serão padronizados para *note sys.stdin: 53d. e *note
     sys.stdout: ae6.

     Se você quiser que um determinado 'stdin' seja usado, certifique-se
     de definir o atributo *note use_rawinput: 32da. da instância como
     ‘False’, caso contrário, 'stdin' será ignorado.

     Alterado na versão 3.13: ‘completekey='tab'’ é substituído por
     ‘'^I'’ para ‘editline’.

* Menu:

* Objetos Cmd::
* Exemplo do Cmd::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/cmd.py


File: python.info,  Node: Objetos Cmd,  Next: Exemplo do Cmd,  Up: cmd — Suporte para interpretadores de comando orientado a linhas

5.17.9.1 Objetos Cmd
....................

Uma instância *note Cmd: 17b8. tem os seguintes métodos:

 -- Método: Cmd.cmdloop (intro=None)

     Emite um prompt repetidamente, aceite a entrada, analise um prefixo
     inicial da entrada recebida e despache para métodos de ação,
     passando a eles o restante da linha como argumento.

     O argumento opcional é um banner ou uma string de introdução a ser
     emitida antes do primeiro prompt (isso substitui o atributo de
     classe *note intro: 32de.).

     Se o módulo *note readline: ba. for carregado, a entrada vai herdar
     automaticamente a edição de lista de histórico semelhante a ‘bash’
     (por exemplo, ‘Control’-‘P’ retorna ao último comando,
     ‘Control’-‘N’ avança para o próximo, ‘Control’-‘F’ move o cursor
     para a direita de forma não destrutiva, ‘Control’-‘B’ move o cursor
     para a esquerda de forma não destrutiva, etc.).

     Um fim de arquivo na entrada é retornado como a string ‘'EOF'’.

     Uma instância de interpretador reconhecerá um comando chamado ‘foo’
     se e somente se ele tiver um método ‘do_foo()’.  Como um caso
     especial, uma linha começando com o caractere ‘'?'’ é despachada
     para o método *note do_help(): 17a7.  Como outro caso especial, uma
     linha começando com o caractere ‘'!'’ é despachada para o método
     ‘do_shell()’ (se tal método for definido).

     Este método retornará quando o método *note postcmd(): 32df.
     retornar um valor true.  O argumento 'stop' para *note postcmd():
     32df. é o valor de retorno do método ‘do_*()’ correspondente do
     comando.

     Se o autocompletamento estiver habilitado, os comandos serão
     completados automaticamente, e o autocompletamento dos argumentos
     dos comandos será feito chamando ‘complete_foo()’ com os argumentos
     'text', 'line', 'begidx' e 'endidx'.  'text' é o prefixo da string
     que estamos tentando corresponder: todas as correspondências
     retornadas devem começar com ele.  'line' é a linha de entrada
     atual com os espaços em branco iniciais removidos, 'begidx' e
     'endidx' são os índices inicial e final do texto de prefixo, que
     podem ser usados para fornecer diferentes autocompletamentos
     dependendo da posição em que o argumento está.

 -- Método: Cmd.do_help (arg)

     Todas as subclasses de *note Cmd: 17b8. herdam um ‘do_help()’
     predefinido.  Este método, chamado com um argumento ‘'bar'’, invoca
     o método correspondente ‘help_bar()’, e se este não estiver
     presente, imprime a docstring de ‘do_bar()’, se disponível.  Sem
     argumento, ‘do_help()’ lista todos os tópicos de ajuda disponíveis
     (isto é, todos os comandos com métodos ‘help_*()’ correspondentes
     ou comandos que têm docstrings), e também lista quaisquer comandos
     não documentados.

 -- Método: Cmd.onecmd (str)

     Interpreta o argumento como se tivesse sido digitado em resposta ao
     prompt.  Isso pode ser substituído, mas normalmente não precisa
     ser; veja os métodos *note precmd(): 32e1. e *note postcmd(): 32df.
     para ganchos de execução úteis.  O valor de retorno é um
     sinalizador que indica se a interpretação de comandos pelo
     interpretador deve parar.  Se houver um método ‘do_*()’ para o
     comando 'str', o valor de retorno desse método é retornado, caso
     contrário, o valor de retorno do método *note default(): 32e2. é
     retornado.

 -- Método: Cmd.emptyline ()

     Método chamado quando uma linha vazia é inserida em resposta ao
     prompt.  Se esse método não for substituído, ele repete o último
     comando não vazio inserido.

 -- Método: Cmd.default (line)

     Método chamado em uma linha de entrada quando o prefixo do comando
     não é reconhecido.  Se esse método não for substituído, ele imprime
     uma mensagem de erro e retorna.

 -- Método: Cmd.completedefault (text, line, begidx, endidx)

     Método chamado para completar uma linha de entrada quando nenhum
     método ‘complete_*()’ especificado pelo comando está disponível.
     Por padrão, ele retorna uma lista vazia.

 -- Método: Cmd.columnize (list, displaywidth=80)

     Método chamado para exibir uma lista de strings como um conjunto
     compacto de colunas.  Cada coluna tem apenas a largura necessária.
     As colunas são separadas por dois espaços para legibilidade.

 -- Método: Cmd.precmd (line)

     Método gancho executado logo antes da linha de comando 'line' ser
     interpretada, mas depois que o prompt de entrada é gerado e
     emitido.  Este método é um stub em *note Cmd: 17b8.; ele existe
     para ser substituído por subclasses.  O valor de retorno é usado
     como o comando que será executado pelo método *note onecmd():
     32e0.; a implementação *note precmd(): 32e1. pode reescrever o
     comando ou simplesmente retornar 'line' inalterado.

 -- Método: Cmd.postcmd (stop, line)

     Método gancho executado logo após o término do despacho de um
     comando.  Este método é um stub em *note Cmd: 17b8.; ele existe
     para ser substituído por subclasses.  'line' é a linha de comando
     que foi executada, e 'stop' é um sinalizador que indica se a
     execução será encerrada após a chamada para *note postcmd(): 32df.;
     este será o valor de retorno do método *note onecmd(): 32e0.  O
     valor de retorno deste método será usado como o novo valor para o
     sinalizador interno que corresponde a 'stop'; retornar false fará
     com que a interpretação continue.

 -- Método: Cmd.preloop ()

     Método gancho executado uma vez quando *note cmdloop(): 32dd. é
     chamado.  Este método é um stub em *note Cmd: 17b8.; ele existe
     para ser substituído por subclasses.

 -- Método: Cmd.postloop ()

     Método gancho executado uma vez quando *note cmdloop(): 32dd. está
     para ser retornado.  Este método é um stub em *note Cmd: 17b8.; ele
     existe para ser substituído por subclasses.

Instâncias das subclasses *note Cmd: 17b8. têm algumas variáveis de
instância públicas:

 -- Atributo: Cmd.prompt

     O prompt emitido para solicitar informações.

 -- Atributo: Cmd.identchars

     A sequência de caracteres aceita para o prefixo do comando.

 -- Atributo: Cmd.lastcmd

     O último prefixo de comando não vazio visto.

 -- Atributo: Cmd.cmdqueue

     Uma lista de linhas de entrada enfileiradas.  A lista cmdqueue é
     verificada em *note cmdloop(): 32dd. quando uma nova entrada é
     necessária; se não estiver vazia, seus elementos serão processados
     em ordem, como se tivessem sido inseridos no prompt.

 -- Atributo: Cmd.intro

     Uma string para emitir como uma introdução ou banner.  Pode ser
     substituída dando ao método *note cmdloop(): 32dd. um argumento.

 -- Atributo: Cmd.doc_header

     O cabeçalho a ser emitido se a saída de ajuda tiver uma seção para
     comandos documentados.

 -- Atributo: Cmd.misc_header

     O cabeçalho a ser emitido se a saída de ajuda tiver uma seção para
     tópicos de ajuda diversos (ou seja, há métodos ‘help_*()’ sem
     métodos ‘do_*()’ correspondentes).

 -- Atributo: Cmd.undoc_header

     O cabeçalho a ser emitido se a saída de ajuda tiver uma seção para
     comandos não documentados (ou seja, houver métodos ‘do_*()’ sem
     métodos ‘help_*()’ correspondentes).

 -- Atributo: Cmd.ruler

     O caractere usado para desenhar linhas separadoras sob os
     cabeçalhos de mensagem de ajuda.  Se estiver vazio, nenhuma linha
     de régua será desenhada.  O padrão é ‘'='’.

 -- Atributo: Cmd.use_rawinput

     Um sinalizador, com padrão true.  Se true, *note cmdloop(): 32dd.
     usa *note input(): 131b. para exibir um prompt e ler o próximo
     comando; se false, *note sys.stdout.write(): ae6. e *note
     sys.stdin.readline(): 53d. são usados.  (Isso significa que ao
     importar *note readline: ba, em sistemas que o suportam, o
     interpretador suportará automaticamente edição de linha no estilo
     ‘Emacs’ e pressionamentos de teclas de histórico de comando.)


File: python.info,  Node: Exemplo do Cmd,  Prev: Objetos Cmd,  Up: cmd — Suporte para interpretadores de comando orientado a linhas

5.17.9.2 Exemplo do Cmd
.......................

O módulo *note cmd: 19. é útil principalmente para criar shells
personalizados que permitem ao usuário trabalhar com um programa
interativamente.

Esta seção apresenta um exemplo simples de como construir um shell em
torno de alguns dos comandos do módulo *note turtle: 101.

Comandos básicos do turtle, como *note forward(): 32f1, são adicionados
a uma subclasse de *note Cmd: 17b8. com o método chamado ‘do_forward()’.
O argumento é convertido em um número e despachado para o módulo turtle.
A docstring é usada no utilitário de ajuda fornecido pelo shell.

O exemplo também inclui um recurso básico de gravação e reprodução
implementado com o método *note precmd(): 32e1. que é responsável por
converter a entrada para minúsculas e gravar os comandos em um arquivo.
O método ‘do_playback()’ lê o arquivo e adiciona os comandos gravados ao
*note cmdqueue: 32ea. para reprodução imediata:

     import cmd, sys
     from turtle import *

     class TurtleShell(cmd.Cmd):
         intro = 'Welcome to the turtle shell.   Type help or ? to list commands.\n'
         prompt = '(turtle) '
         file = None

         # ----- comandos básicos do turtle -----
         def do_forward(self, arg):
             'Move the turtle forward by the specified distance:  FORWARD 10'
             forward(*parse(arg))
         def do_right(self, arg):
             'Turn turtle right by given number of degrees:  RIGHT 20'
             right(*parse(arg))
         def do_left(self, arg):
             'Turn turtle left by given number of degrees:  LEFT 90'
             left(*parse(arg))
         def do_goto(self, arg):
             'Move turtle to an absolute position with changing orientation.  GOTO 100 200'
             goto(*parse(arg))
         def do_home(self, arg):
             'Return turtle to the home position:  HOME'
             home()
         def do_circle(self, arg):
             'Draw circle with given radius an options extent and steps:  CIRCLE 50'
             circle(*parse(arg))
         def do_position(self, arg):
             'Print the current turtle position:  POSITION'
             print('Current position is %d %d\n' % position())
         def do_heading(self, arg):
             'Print the current turtle heading in degrees:  HEADING'
             print('Current heading is %d\n' % (heading(),))
         def do_color(self, arg):
             'Set the color:  COLOR BLUE'
             color(arg.lower())
         def do_undo(self, arg):
             'Undo (repeatedly) the last turtle action(s):  UNDO'
         def do_reset(self, arg):
             'Clear the screen and return turtle to center:  RESET'
             reset()
         def do_bye(self, arg):
             'Stop recording, close the turtle window, and exit:  BYE'
             print('Thank you for using Turtle')
             self.close()
             bye()
             return True

         # ----- registra e reproduz -----
         def do_record(self, arg):
             'Save future commands to filename:  RECORD rose.cmd'
             self.file = open(arg, 'w')
         def do_playback(self, arg):
             'Playback commands from a file:  PLAYBACK rose.cmd'
             self.close()
             with open(arg) as f:
                 self.cmdqueue.extend(f.read().splitlines())
         def precmd(self, line):
             line = line.lower()
             if self.file and 'playback' not in line:
                 print(line, file=self.file)
             return line
         def close(self):
             if self.file:
                 self.file.close()
                 self.file = None

     def parse(arg):
         'Convert a series of zero or more numbers to an argument tuple'
         return tuple(map(int, arg.split()))

     if __name__ == '__main__':
         TurtleShell().cmdloop()

Aqui está uma sessão de exemplo com o shell do turtle mostrando as
funções de ajuda, usando linhas em branco para repetir comandos e o
recurso simples de gravação e reprodução:

     Welcome to the turtle shell.   Type help or ? to list commands.

     (turtle) ?

     Documented commands (type help <topic>):
     ========================================
     bye     color    goto     home  playback  record  right
     circle  forward  heading  left  position  reset   undo

     (turtle) help forward
     Move the turtle forward by the specified distance:  FORWARD 10
     (turtle) record spiral.cmd
     (turtle) position
     Current position is 0 0

     (turtle) heading
     Current heading is 0

     (turtle) reset
     (turtle) circle 20
     (turtle) right 30
     (turtle) circle 40
     (turtle) right 30
     (turtle) circle 60
     (turtle) right 30
     (turtle) circle 80
     (turtle) right 30
     (turtle) circle 100
     (turtle) right 30
     (turtle) circle 120
     (turtle) right 30
     (turtle) circle 120
     (turtle) heading
     Current heading is 180

     (turtle) forward 100
     (turtle)
     (turtle) right 90
     (turtle) forward 100
     (turtle)
     (turtle) right 90
     (turtle) forward 400
     (turtle) right 90
     (turtle) forward 500
     (turtle) right 90
     (turtle) forward 400
     (turtle) right 90
     (turtle) forward 300
     (turtle) playback spiral.cmd
     Current position is 0 0

     Current heading is 0

     Current heading is 180

     (turtle) bye
     Thank you for using Turtle


File: python.info,  Node: Execução Concorrente,  Next: Comunicação em Rede e Interprocesso,  Prev: Bibliotecas de interface de linha de comando,  Up: A Biblioteca Padrão do Python

5.18 Execução Concorrente
=========================

Os módulos descritos neste capítulo fornecem suporte a execução
simultânea de código.  A escolha apropriada da ferramenta dependerá da
tarefa a ser executada (CPU bound ou IO bound) e do estilo de
desenvolvimento preferencial (multitarefa cooperativa orientada a
eventos versus multitarefa preemptiva).  Eis uma visão geral:

* Menu:

* threading — Paralelismo baseado em threads::
* multiprocessing — Paralelismo baseado em processo::
* multiprocessing.shared_memory — Memória compartilhada para acesso direto entre processos: multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
* O pacote concurrent::
* concurrent.futures — Launching parallel tasks: concurrent futures — Launching parallel tasks.
* subprocess — Gerenciamento de subprocessos::
* sched — Agendador de eventos::
* queue — A synchronized queue class::
* contextvars — Variáveis de contexto::
* _thread— API de segmentação de baixo nível::


File: python.info,  Node: threading — Paralelismo baseado em threads,  Next: multiprocessing — Paralelismo baseado em processo,  Up: Execução Concorrente

5.18.1 ‘threading’ — Paralelismo baseado em threads
---------------------------------------------------

'Código-fonte:' Lib/threading.py(1)

__________________________________________________________________

Este módulo constrói interfaces de alto nível para threading usando o
módulo *note _thread: 2, de mais baixo nível.

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

* Menu:

* Introdução: Introdução<8>.
* GIL and performance considerations::
* Referência: Referência<2>.
* Using locks, conditions, and semaphores in the with statement: Using locks conditions and semaphores in the with statement.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/threading.py


File: python.info,  Node: Introdução<8>,  Next: GIL and performance considerations,  Up: threading — Paralelismo baseado em threads

5.18.1.1 Introdução
...................

O módulo ‘threading’ fornece uma maneira de executar múltiplas
threads(1) (unidades menores de um processo) simultaneamente dentro de
um único processo.  Ele permite a criação e o gerenciamento de threads,
possibilitando a execução de tarefas em paralelo, compartilhando espaço
de memória.  Threads são particularmente úteis quando tarefas são
limitadas por E/S, como operações de arquivo ou solicitações de rede,
onde grande parte do tempo é gasto aguardando recursos externos.

Um caso de uso típico para ‘threading’ inclui o gerenciamento de um
conjunto de threads de trabalho que podem processar múltiplas tarefas
simultaneamente.  Aqui está um exemplo básico de criação e inicialização
de threads usando *note Thread: 953.:

     import threading
     import time

     def crawl(link, delay=3):
         print(f"crawl started for {link}")
         time.sleep(delay)  # Blocking I/O (simulating a network request)
         print(f"crawl ended for {link}")

     links = [
         "https://python.org",
         "https://docs.python.org",
         "https://peps.python.org",
     ]

     # Start threads for each link
     threads = []
     for link in links:
         # Using `args` to pass positional arguments and `kwargs` for keyword arguments
         t = threading.Thread(target=crawl, args=(link,), kwargs={"delay": 2})
         threads.append(t)

     # Start each thread
     for t in threads:
         t.start()

     # Wait for all threads to finish
     for t in threads:
         t.join()

Alterado na versão 3.7: Este módulo costumava ser opcional, agora está
sempre disponível.

Ver também
..........

*note concurrent.futures.ThreadPoolExecutor: 742. offers a higher level
interface to push tasks to a background thread without blocking
execution of the calling thread, while still being able to retrieve
their results when needed.

*note queue: b6. provides a thread-safe interface for exchanging data
between running threads.

*note asyncio: a. offers an alternative approach to achieving task level
concurrency without requiring the use of multiple operating system
threads.

     Nota: In the Python 2.x series, this module contained ‘camelCase’
     names for some methods and functions.  These are deprecated as of
     Python 3.10, but they are still supported for compatibility with
     Python 2.5 and lower.

'Detalhes da implementação do CPython:' In CPython, due to the *note
Global Interpreter Lock: 148, only one thread can execute Python code at
once (even though certain performance-oriented libraries might overcome
this limitation).  If you want your application to make better use of
the computational resources of multi-core machines, you are advised to
use *note multiprocessing: 94. or *note
concurrent.futures.ProcessPoolExecutor: 8f4.  However, threading is
still an appropriate model if you want to run multiple I/O-bound tasks
simultaneously.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Thread_(computing)


File: python.info,  Node: GIL and performance considerations,  Next: Referência<2>,  Prev: Introdução<8>,  Up: threading — Paralelismo baseado em threads

5.18.1.2 GIL and performance considerations
...........................................

Unlike the *note multiprocessing: 94. module, which uses separate
processes to bypass the *note global interpreter lock: 148. (GIL), the
threading module operates within a single process, meaning that all
threads share the same memory space.  However, the GIL limits the
performance gains of threading when it comes to CPU-bound tasks, as only
one thread can execute Python bytecode at a time.  Despite this, threads
remain a useful tool for achieving concurrency in many scenarios.

As of Python 3.13, experimental *note free-threaded: 15e4. builds can
disable the GIL, enabling true parallel execution of threads, but this
feature is not available by default (see PEP 703(1)).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0703/


File: python.info,  Node: Referência<2>,  Next: Using locks conditions and semaphores in the with statement,  Prev: GIL and performance considerations,  Up: threading — Paralelismo baseado em threads

5.18.1.3 Referência
...................

Este módulo define as seguintes funções:

 -- Função: threading.active_count ()

     Retorna o número de objetos *note Thread: 953. atualmente ativos.
     A quantidade retornada é igual ao tamanho da lista retornada por
     *note enumerate(): 19e5.

     The function ‘activeCount’ is a deprecated alias for this function.

 -- Função: threading.current_thread ()

     Return the current *note Thread: 953. object, corresponding to the
     caller’s thread of control.  If the caller’s thread of control was
     not created through the ‘threading’ module, a dummy thread object
     with limited functionality is returned.

     The function ‘currentThread’ is a deprecated alias for this
     function.

 -- Função: threading.excepthook (args, /)

     Handle uncaught exception raised by *note Thread.run(): a46.

     O argumento 'args' tem os seguintes atributos:

        * 'exc_type': Tipo de exceção..

        * 'exc_value': Valor da exceção, pode ser ‘None’.

        * 'exc_traceback': Pilha de execução da exceção, pode ser
          ‘None’.

        * 'thread': Thread que levantou a exceção, pode ser ‘None’.

     Se 'exc_type' é *note SystemExit: d63, a exceção é silenciosamente
     ignorada.  Caso contrário, a exceção é exibida em *note sys.stderr:
     940.

     Se esta função levantar uma exceção, *note sys.excepthook(): 80e. é
     chamada para tratá-la.

     *note threading.excepthook(): 84e. pode ser substituída para
     controlar como exceções não capturadas levantadas por *note
     Thread.run(): a46. são tratadas.

     Storing 'exc_value' using a custom hook can create a reference
     cycle.  It should be cleared explicitly to break the reference
     cycle when the exception is no longer needed.

     Storing 'thread' using a custom hook can resurrect it if it is set
     to an object which is being finalized.  Avoid storing 'thread'
     after the custom hook completes to avoid resurrecting objects.

     Ver também
     ..........

     *note sys.excepthook(): 80e. trata exceções não capturadas.

     Adicionado na versão 3.8.

 -- Dado: threading.__excepthook__

     Holds the original value of *note threading.excepthook(): 84e.  It
     is saved so that the original value can be restored in case they
     happen to get replaced with broken or alternative objects.

     Adicionado na versão 3.10.

 -- Função: threading.get_ident ()

     Retorna o ‘identificador de thread’ do thread atual.  Este é um
     número inteiro diferente de zero.  Seu valor não tem significado
     direto; pretende-se que seja um cookie mágico para ser usado, por
     exemplo, para indexar um dicionário de dados específicos do thread.
     identificadores de thread podem ser reciclados quando um thread sai
     e outro é criado.

     Adicionado na versão 3.3.

 -- Função: threading.get_native_id ()

     Retorna a ID de thread integral nativa da thread atual atribuída
     pelo kernel.  Este é um número inteiro não negativo.  Seu valor
     pode ser usado para identificar exclusivamente essa thread
     específica em todo o sistema (até que a thread termine, após o que
     o valor poderá ser reciclado pelo sistema operacional).

     *note Disponibilidade: 1ed8.: Windows, FreeBSD, Linux, macOS,
     OpenBSD, NetBSD, AIX, DragonFlyBSD, GNU/kFreeBSD.

     Adicionado na versão 3.8.

     Alterado na versão 3.13: Adicionado suporte a GNU/kFreeBSD.

 -- Função: threading.enumerate ()

     Return a list of all *note Thread: 953. objects currently active.
     The list includes daemonic threads and dummy thread objects created
     by *note current_thread(): 309.  It excludes terminated threads and
     threads that have not yet been started.  However, the main thread
     is always part of the result, even when terminated.

 -- Função: threading.main_thread ()

     Return the main *note Thread: 953. object.  In normal conditions,
     the main thread is the thread from which the Python interpreter was
     started.

     Adicionado na versão 3.4.

 -- Função: threading.settrace (func)

     Set a trace function for all threads started from the ‘threading’
     module.  The 'func' will be passed to *note sys.settrace(): 1547.
     for each thread, before its *note run(): a46. method is called.

 -- Função: threading.settrace_all_threads (func)

     Set a trace function for all threads started from the ‘threading’
     module and all Python threads that are currently executing.

     The 'func' will be passed to *note sys.settrace(): 1547. for each
     thread, before its *note run(): a46. method is called.

     Adicionado na versão 3.12.

 -- Função: threading.gettrace ()

     Obtém a função trace conforme definido por *note settrace(): 84b.

     Adicionado na versão 3.10.

 -- Função: threading.setprofile (func)

     Set a profile function for all threads started from the ‘threading’
     module.  The 'func' will be passed to *note sys.setprofile(): 1546.
     for each thread, before its *note run(): a46. method is called.

 -- Função: threading.setprofile_all_threads (func)

     Set a profile function for all threads started from the ‘threading’
     module and all Python threads that are currently executing.

     The 'func' will be passed to *note sys.setprofile(): 1546. for each
     thread, before its *note run(): a46. method is called.

     Adicionado na versão 3.12.

 -- Função: threading.getprofile ()

     Obtém a função do criador de perfil conforme definido por *note
     setprofile(): 84c.

     Adicionado na versão 3.10.

 -- Função: threading.stack_size ([size])

     Retorna o tamanho da pilha de threads usado ao criar novos threads.
     O argumento opcional 'size' especifica o tamanho da pilha a ser
     usado para threads criados posteriormente e deve ser 0 (usar
     plataforma ou padrão configurado) ou um valor inteiro positivo de
     pelo menos 32.768 (32 KiB). Se 'size' não for especificado, 0 será
     usado.  Se a alteração do tamanho da pilha de threads não for
     suportada, uma *note RuntimeError: 195. será levantada.  Se o
     tamanho da pilha especificado for inválido, uma *note ValueError:
     202. será levantada e o tamanho da pilha não será modificado.
     Atualmente, 0 KiB é o valor mínimo de tamanho de pilha suportado
     para garantir espaço suficiente para o próprio interpretador.
     Observe que algumas plataformas podem ter restrições específicas
     sobre valores para o tamanho da pilha, como exigir um tamanho
     mínimo de pilha > 32 KiB ou exigir alocação em múltiplos do tamanho
     da página de memória do sistema – a documentação da plataforma deve
     ser consultada para obter mais informações (4 páginas KiB são
     comuns; usar múltiplos de 4096 para o tamanho da pilha é a
     abordagem sugerida na ausência de informações mais específicas).

     *note Disponibilidade: 1ed8.: Windows, pthreads.

     Plataformas Unix com suporte a threads POSIX.

This module also defines the following constant:

 -- Dado: threading.TIMEOUT_MAX

     The maximum value allowed for the 'timeout' parameter of blocking
     functions (*note Lock.acquire(): 698, *note RLock.acquire(): eaa,
     *note Condition.wait(): 19f1, etc.).  Specifying a timeout greater
     than this value will raise an *note OverflowError: 885.

     Adicionado na versão 3.2.

This module defines a number of classes, which are detailed in the
sections below.

The design of this module is loosely based on Java’s threading model.
However, where Java makes locks and condition variables basic behavior
of every object, they are separate objects in Python.  Python’s *note
Thread: 953. class supports a subset of the behavior of Java’s Thread
class; currently, there are no priorities, no thread groups, and threads
cannot be destroyed, stopped, suspended, resumed, or interrupted.  The
static methods of Java’s Thread class, when implemented, are mapped to
module-level functions.

All of the methods described below are executed atomically.

* Menu:

* Thread-local data::
* Thread objects::
* Lock objects::
* RLock objects::
* Condition objects::
* Semaphore objects::
* Semaphore example::
* Event objects::
* Timer objects::
* Barrier objects::


File: python.info,  Node: Thread-local data,  Next: Thread objects,  Up: Referência<2>

5.18.1.4 Thread-local data
..........................

Thread-local data is data whose values are thread specific.  If you have
data that you want to be local to a thread, create a *note local: 1631.
object and use its attributes:

     >>> mydata = local()
     >>> mydata.number = 42
     >>> mydata.number
     42

You can also access the *note local: 1631.-object’s dictionary:

     >>> mydata.__dict__
     {'number': 42}
     >>> mydata.__dict__.setdefault('widgets', [])
     []
     >>> mydata.widgets
     []

If we access the data in a different thread:

     >>> log = []
     >>> def f():
     ...     items = sorted(mydata.__dict__.items())
     ...     log.append(items)
     ...     mydata.number = 11
     ...     log.append(mydata.number)

     >>> import threading
     >>> thread = threading.Thread(target=f)
     >>> thread.start()
     >>> thread.join()
     >>> log
     [[], 11]

we get different data.  Furthermore, changes made in the other thread
don’t affect data seen in this thread:

     >>> mydata.number
     42

Of course, values you get from a *note local: 1631. object, including
their *note __dict__: 55b. attribute, are for whatever thread was
current at the time the attribute was read.  For that reason, you
generally don’t want to save these values across threads, as they apply
only to the thread they came from.

You can create custom *note local: 1631. objects by subclassing the
*note local: 1631. class:

     >>> class MyLocal(local):
     ...     number = 2
     ...     def __init__(self, /, **kw):
     ...         self.__dict__.update(kw)
     ...     def squared(self):
     ...         return self.number ** 2

This can be useful to support default values, methods and
initialization.  Note that if you define an *note __init__(): 6b0.
method, it will be called each time the *note local: 1631. object is
used in a separate thread.  This is necessary to initialize each
thread’s dictionary.

Now if we create a *note local: 1631. object:

     >>> mydata = MyLocal(color='red')

we have a default number:

     >>> mydata.number
     2

an initial color:

     >>> mydata.color
     'red'
     >>> del mydata.color

And a method that operates on the data:

     >>> mydata.squared()
     4

As before, we can access the data in a separate thread:

     >>> log = []
     >>> thread = threading.Thread(target=f)
     >>> thread.start()
     >>> thread.join()
     >>> log
     [[('color', 'red')], 11]

without affecting this thread’s data:

     >>> mydata.number
     2
     >>> mydata.color
     Traceback (most recent call last):
     ...
     AttributeError: 'MyLocal' object has no attribute 'color'

Note that subclasses can define *note __slots__: 5df, but they are not
thread local.  They are shared across threads:

     >>> class MyLocal(local):
     ...     __slots__ = 'number'

     >>> mydata = MyLocal()
     >>> mydata.number = 42
     >>> mydata.color = 'red'

So, the separate thread:

     >>> thread = threading.Thread(target=f)
     >>> thread.start()
     >>> thread.join()

affects what we see:

     >>> mydata.number
     11

 -- Classe: threading.local

     A class that represents thread-local data.


File: python.info,  Node: Thread objects,  Next: Lock objects,  Prev: Thread-local data,  Up: Referência<2>

5.18.1.5 Thread objects
.......................

The *note Thread: 953. class represents an activity that is run in a
separate thread of control.  There are two ways to specify the activity:
by passing a callable object to the constructor, or by overriding the
*note run(): a46. method in a subclass.  No other methods (except for
the constructor) should be overridden in a subclass.  In other words,
'only' override the ‘__init__()’ and *note run(): a46. methods of this
class.

Once a thread object is created, its activity must be started by calling
the thread’s *note start(): 2e90. method.  This invokes the *note run():
a46. method in a separate thread of control.

Once the thread’s activity is started, the thread is considered ‘alive’.
It stops being alive when its *note run(): a46. method terminates –
either normally, or by raising an unhandled exception.  The *note
is_alive(): 954. method tests whether the thread is alive.

Other threads can call a thread’s *note join(): 1224. method.  This
blocks the calling thread until the thread whose *note join(): 1224.
method is called is terminated.

A thread has a name.  The name can be passed to the constructor, and
read or changed through the *note name: 308. attribute.

If the *note run(): a46. method raises an exception, *note
threading.excepthook(): 84e. is called to handle it.  By default, *note
threading.excepthook(): 84e. ignores silently *note SystemExit: d63.

A thread can be flagged as a “daemon thread”.  The significance of this
flag is that the entire Python program exits when only daemon threads
are left.  The initial value is inherited from the creating thread.  The
flag can be set through the *note daemon: 306. property or the 'daemon'
constructor argument.

     Nota: Daemon threads are abruptly stopped at shutdown.  Their
     resources (such as open files, database transactions, etc.)  may
     not be released properly.  If you want your threads to stop
     gracefully, make them non-daemonic and use a suitable signalling
     mechanism such as an *note Event: 1197.

There is a “main thread” object; this corresponds to the initial thread
of control in the Python program.  It is not a daemon thread.

There is the possibility that “dummy thread objects” are created.  These
are thread objects corresponding to “alien threads”, which are threads
of control started outside the threading module, such as directly from C
code.  Dummy thread objects have limited functionality; they are always
considered alive and daemonic, and cannot be *note joined: 3300.  They
are never deleted, since it is impossible to detect the termination of
alien threads.

 -- Classe: threading.Thread (group=None, target=None, name=None,
          args=(), kwargs={}, *, daemon=None)

     This constructor should always be called with keyword arguments.
     Arguments are:

     'group' should be ‘None’; reserved for future extension when a
     ‘ThreadGroup’ class is implemented.

     'target' is the callable object to be invoked by the *note run():
     a46. method.  Defaults to ‘None’, meaning nothing is called.

     'name' is the thread name.  By default, a unique name is
     constructed of the form “Thread-'N'” where 'N' is a small decimal
     number, or “Thread-'N' (target)” where “target” is
     ‘target.__name__’ if the 'target' argument is specified.

     'args' is a list or tuple of arguments for the target invocation.
     Defaults to ‘()’.

     'kwargs' is a dictionary of keyword arguments for the target
     invocation.  Defaults to ‘{}’.

     If not ‘None’, 'daemon' explicitly sets whether the thread is
     daemonic.  If ‘None’ (the default), the daemonic property is
     inherited from the current thread.

     If the subclass overrides the constructor, it must make sure to
     invoke the base class constructor (‘Thread.__init__()’) before
     doing anything else to the thread.

     Alterado na versão 3.3: Adicionado o parâmetro 'daemon'.

     Alterado na versão 3.10: Use the 'target' name if 'name' argument
     is omitted.

      -- Método: start ()

          Start the thread’s activity.

          It must be called at most once per thread object.  It arranges
          for the object’s *note run(): a46. method to be invoked in a
          separate thread of control.

          This method will raise a *note RuntimeError: 195. if called
          more than once on the same thread object.

      -- Método: run ()

          Method representing the thread’s activity.

          You may override this method in a subclass.  The standard
          *note run(): a46. method invokes the callable object passed to
          the object’s constructor as the 'target' argument, if any,
          with positional and keyword arguments taken from the 'args'
          and 'kwargs' arguments, respectively.

          Using list or tuple as the 'args' argument which passed to the
          *note Thread: 953. could achieve the same effect.

          Exemplo:

               >>> from threading import Thread
               >>> t = Thread(target=print, args=[1])
               >>> t.run()
               1
               >>> t = Thread(target=print, args=(1,))
               >>> t.run()
               1

      -- Método: join (timeout=None)

          Wait until the thread terminates.  This blocks the calling
          thread until the thread whose *note join(): 1224. method is
          called terminates – either normally or through an unhandled
          exception – or until the optional timeout occurs.

          When the 'timeout' argument is present and not ‘None’, it
          should be a floating-point number specifying a timeout for the
          operation in seconds (or fractions thereof).  As *note join():
          1224. always returns ‘None’, you must call *note is_alive():
          954. after *note join(): 1224. to decide whether a timeout
          happened – if the thread is still alive, the *note join():
          1224. call timed out.

          When the 'timeout' argument is not present or ‘None’, the
          operation will block until the thread terminates.

          A thread can be joined many times.

          *note join(): 1224. raises a *note RuntimeError: 195. if an
          attempt is made to join the current thread as that would cause
          a deadlock.  It is also an error to *note join(): 1224. a
          thread before it has been started and attempts to do so raise
          the same exception.

      -- Atributo: name

          A string used for identification purposes only.  It has no
          semantics.  Multiple threads may be given the same name.  The
          initial name is set by the constructor.

      -- Método: getName ()
      -- Método: setName ()

          Deprecated getter/setter API for *note name: 308.; use it
          directly as a property instead.

          Descontinuado desde a versão 3.10.

      -- Atributo: ident

          The ‘thread identifier’ of this thread or ‘None’ if the thread
          has not been started.  This is a nonzero integer.  See the
          *note get_ident(): 1199. function.  Thread identifiers may be
          recycled when a thread exits and another thread is created.
          The identifier is available even after the thread has exited.

      -- Atributo: native_id

          The Thread ID (‘TID’) of this thread, as assigned by the OS
          (kernel).  This is a non-negative integer, or ‘None’ if the
          thread has not been started.  See the *note get_native_id():
          a47. function.  This value may be used to uniquely identify
          this particular thread system-wide (until the thread
          terminates, after which the value may be recycled by the OS).

               Nota: Similar to Process IDs, Thread IDs are only valid
               (guaranteed unique system-wide) from the time the thread
               is created until the thread has been terminated.

          *note Disponibilidade: 1ed8.: Windows, FreeBSD, Linux, macOS,
          OpenBSD, NetBSD, AIX, DragonFlyBSD.

          Adicionado na versão 3.8.

      -- Método: is_alive ()

          Return whether the thread is alive.

          This method returns ‘True’ just before the *note run(): a46.
          method starts until just after the *note run(): a46. method
          terminates.  The module function *note enumerate(): 19e5.
          returns a list of all alive threads.

      -- Atributo: daemon

          A boolean value indicating whether this thread is a daemon
          thread (‘True’) or not (‘False’).  This must be set before
          *note start(): 2e90. is called, otherwise *note RuntimeError:
          195. is raised.  Its initial value is inherited from the
          creating thread; the main thread is not a daemon thread and
          therefore all threads created in the main thread default to
          *note daemon: 306. = ‘False’.

          The entire Python program exits when no alive non-daemon
          threads are left.

      -- Método: isDaemon ()
      -- Método: setDaemon ()

          Deprecated getter/setter API for *note daemon: 306.; use it
          directly as a property instead.

          Descontinuado desde a versão 3.10.


File: python.info,  Node: Lock objects,  Next: RLock objects,  Prev: Thread objects,  Up: Referência<2>

5.18.1.6 Lock objects
.....................

A primitive lock is a synchronization primitive that is not owned by a
particular thread when locked.  In Python, it is currently the lowest
level synchronization primitive available, implemented directly by the
*note _thread: 2. extension module.

A primitive lock is in one of two states, “locked” or “unlocked”.  It is
created in the unlocked state.  It has two basic methods, *note
acquire(): 698. and *note release(): 1305.  When the state is unlocked,
*note acquire(): 698. changes the state to locked and returns
immediately.  When the state is locked, *note acquire(): 698. blocks
until a call to *note release(): 1305. in another thread changes it to
unlocked, then the *note acquire(): 698. call resets it to locked and
returns.  The *note release(): 1305. method should only be called in the
locked state; it changes the state to unlocked and returns immediately.
If an attempt is made to release an unlocked lock, a *note RuntimeError:
195. will be raised.

Locks also support the *note context management protocol: 3305.

When more than one thread is blocked in *note acquire(): 698. waiting
for the state to turn to unlocked, only one thread proceeds when a *note
release(): 1305. call resets the state to unlocked; which one of the
waiting threads proceeds is not defined, and may vary across
implementations.

All methods are executed atomically.

 -- Classe: threading.Lock

     The class implementing primitive lock objects.  Once a thread has
     acquired a lock, subsequent attempts to acquire it block, until it
     is released; any thread may release it.

     Alterado na versão 3.13: ‘Lock’ is now a class.  In earlier
     Pythons, ‘Lock’ was a factory function which returned an instance
     of the underlying private lock type.

      -- Método: acquire (blocking=True, timeout=-1)

          Adquire uma trava, bloqueante ou não.

          When invoked with the 'blocking' argument set to ‘True’ (the
          default), block until the lock is unlocked, then set it to
          locked and return ‘True’.

          When invoked with the 'blocking' argument set to ‘False’, do
          not block.  If a call with 'blocking' set to ‘True’ would
          block, return ‘False’ immediately; otherwise, set the lock to
          locked and return ‘True’.

          When invoked with the floating-point 'timeout' argument set to
          a positive value, block for at most the number of seconds
          specified by 'timeout' and as long as the lock cannot be
          acquired.  A 'timeout' argument of ‘-1’ specifies an unbounded
          wait.  It is forbidden to specify a 'timeout' when 'blocking'
          is ‘False’.

          The return value is ‘True’ if the lock is acquired
          successfully, ‘False’ if not (for example if the 'timeout'
          expired).

          Alterado na versão 3.2: O parâmetro 'timeout' é novo.

          Alterado na versão 3.2: Lock acquisition can now be
          interrupted by signals on POSIX if the underlying threading
          implementation supports it.

      -- Método: release ()

          Release a lock.  This can be called from any thread, not only
          the thread which has acquired the lock.

          When the lock is locked, reset it to unlocked, and return.  If
          any other threads are blocked waiting for the lock to become
          unlocked, allow exactly one of them to proceed.

          When invoked on an unlocked lock, a *note RuntimeError: 195.
          is raised.

          There is no return value.

      -- Método: locked ()

          Return ‘True’ if the lock is acquired.


File: python.info,  Node: RLock objects,  Next: Condition objects,  Prev: Lock objects,  Up: Referência<2>

5.18.1.7 RLock objects
......................

A reentrant lock is a synchronization primitive that may be acquired
multiple times by the same thread.  Internally, it uses the concepts of
“owning thread” and “recursion level” in addition to the locked/unlocked
state used by primitive locks.  In the locked state, some thread owns
the lock; in the unlocked state, no thread owns it.

Threads call a lock’s *note acquire(): eaa. method to lock it, and its
*note release(): 1305. method to unlock it.

     Nota: Reentrant locks support the *note context management
     protocol: 3305, so it is recommended to use *note with: 5d2.
     instead of manually calling *note acquire(): eaa. and *note
     release(): 3309. to handle acquiring and releasing the lock for a
     block of code.

RLock’s *note acquire(): eaa./*note release(): 3309. call pairs may be
nested, unlike Lock’s *note acquire(): 698./*note release(): 1305.  Only
the final *note release(): 3309. (the *note release(): 1305. of the
outermost pair) resets the lock to an unlocked state and allows another
thread blocked in *note acquire(): eaa. to proceed.

*note acquire(): eaa./*note release(): 3309. must be used in pairs: each
acquire must have a release in the thread that has acquired the lock.
Failing to call release as many times the lock has been acquired can
lead to deadlock.

 -- Classe: threading.RLock

     This class implements reentrant lock objects.  A reentrant lock
     must be released by the thread that acquired it.  Once a thread has
     acquired a reentrant lock, the same thread may acquire it again
     without blocking; the thread must release it once for each time it
     has acquired it.

     Note that ‘RLock’ is actually a factory function which returns an
     instance of the most efficient version of the concrete RLock class
     that is supported by the platform.

      -- Método: acquire (blocking=True, timeout=-1)

          Adquire uma trava, bloqueante ou não.

          Ver também
          ..........

          *note Using RLock as a context manager: 3305.

               Recommended over manual ‘acquire()’ and *note release():
               3309. calls whenever practical.

          When invoked with the 'blocking' argument set to ‘True’ (the
          default):

                  * If no thread owns the lock, acquire the lock and
                    return immediately.

                  * If another thread owns the lock, block until we are
                    able to acquire lock, or 'timeout', if set to a
                    positive float value.

                  * If the same thread owns the lock, acquire the lock
                    again, and return immediately.  This is the
                    difference between *note Lock: 176d. and ‘RLock’;
                    *note Lock: 176d. handles this case the same as the
                    previous, blocking until the lock can be acquired.

          When invoked with the 'blocking' argument set to ‘False’:

                  * If no thread owns the lock, acquire the lock and
                    return immediately.

                  * If another thread owns the lock, return immediately.

                  * If the same thread owns the lock, acquire the lock
                    again and return immediately.

          In all cases, if the thread was able to acquire the lock,
          return ‘True’.  If the thread was unable to acquire the lock
          (i.e.  if not blocking or the timeout was reached) return
          ‘False’.

          If called multiple times, failing to call *note release():
          3309. as many times may lead to deadlock.  Consider using
          ‘RLock’ as a context manager rather than calling
          acquire/release directly.

          Alterado na versão 3.2: O parâmetro 'timeout' é novo.

      -- Método: release ()

          Release a lock, decrementing the recursion level.  If after
          the decrement it is zero, reset the lock to unlocked (not
          owned by any thread), and if any other threads are blocked
          waiting for the lock to become unlocked, allow exactly one of
          them to proceed.  If after the decrement the recursion level
          is still nonzero, the lock remains locked and owned by the
          calling thread.

          Only call this method when the calling thread owns the lock.
          A *note RuntimeError: 195. is raised if this method is called
          when the lock is not acquired.

          There is no return value.


File: python.info,  Node: Condition objects,  Next: Semaphore objects,  Prev: RLock objects,  Up: Referência<2>

5.18.1.8 Condition objects
..........................

A condition variable is always associated with some kind of lock; this
can be passed in or one will be created by default.  Passing one in is
useful when several condition variables must share the same lock.  The
lock is part of the condition object: you don’t have to track it
separately.

A condition variable obeys the *note context management protocol: 3305.:
using the ‘with’ statement acquires the associated lock for the duration
of the enclosed block.  The *note acquire(): 330c. and *note release():
330d. methods also call the corresponding methods of the associated
lock.

Other methods must be called with the associated lock held.  The *note
wait(): 19f1. method releases the lock, and then blocks until another
thread awakens it by calling *note notify(): 18f1. or *note
notify_all(): 303.  Once awakened, *note wait(): 19f1. re-acquires the
lock and returns.  It is also possible to specify a timeout.

The *note notify(): 18f1. method wakes up one of the threads waiting for
the condition variable, if any are waiting.  The *note notify_all():
303. method wakes up all threads waiting for the condition variable.

Note: the *note notify(): 18f1. and *note notify_all(): 303. methods
don’t release the lock; this means that the thread or threads awakened
will not return from their *note wait(): 19f1. call immediately, but
only when the thread that called *note notify(): 18f1. or *note
notify_all(): 303. finally relinquishes ownership of the lock.

The typical programming style using condition variables uses the lock to
synchronize access to some shared state; threads that are interested in
a particular change of state call *note wait(): 19f1. repeatedly until
they see the desired state, while threads that modify the state call
*note notify(): 18f1. or *note notify_all(): 303. when they change the
state in such a way that it could possibly be a desired state for one of
the waiters.  For example, the following code is a generic
producer-consumer situation with unlimited buffer capacity:

     # Consume one item
     with cv:
         while not an_item_is_available():
             cv.wait()
         get_an_available_item()

     # Produce one item
     with cv:
         make_an_item_available()
         cv.notify()

The ‘while’ loop checking for the application’s condition is necessary
because *note wait(): 19f1. can return after an arbitrary long time, and
the condition which prompted the *note notify(): 18f1. call may no
longer hold true.  This is inherent to multi-threaded programming.  The
*note wait_for(): 330e. method can be used to automate the condition
checking, and eases the computation of timeouts:

     # Consume an item
     with cv:
         cv.wait_for(an_item_is_available)
         get_an_available_item()

To choose between *note notify(): 18f1. and *note notify_all(): 303,
consider whether one state change can be interesting for only one or
several waiting threads.  E.g.  in a typical producer-consumer
situation, adding one item to the buffer only needs to wake up one
consumer thread.

 -- Classe: threading.Condition (lock=None)

     This class implements condition variable objects.  A condition
     variable allows one or more threads to wait until they are notified
     by another thread.

     If the 'lock' argument is given and not ‘None’, it must be a *note
     Lock: 176d. or *note RLock: 2de. object, and it is used as the
     underlying lock.  Otherwise, a new *note RLock: 2de. object is
     created and used as the underlying lock.

     Alterado na versão 3.3: changed from a factory function to a class.

      -- Método: acquire (*args)

          Acquire the underlying lock.  This method calls the
          corresponding method on the underlying lock; the return value
          is whatever that method returns.

      -- Método: release ()

          Release the underlying lock.  This method calls the
          corresponding method on the underlying lock; there is no
          return value.

      -- Método: wait (timeout=None)

          Wait until notified or until a timeout occurs.  If the calling
          thread has not acquired the lock when this method is called, a
          *note RuntimeError: 195. is raised.

          This method releases the underlying lock, and then blocks
          until it is awakened by a *note notify(): 18f1. or *note
          notify_all(): 303. call for the same condition variable in
          another thread, or until the optional timeout occurs.  Once
          awakened or timed out, it re-acquires the lock and returns.

          When the 'timeout' argument is present and not ‘None’, it
          should be a floating-point number specifying a timeout for the
          operation in seconds (or fractions thereof).

          When the underlying lock is an *note RLock: 2de, it is not
          released using its *note release(): 330d. method, since this
          may not actually unlock the lock when it was acquired multiple
          times recursively.  Instead, an internal interface of the
          *note RLock: 2de. class is used, which really unlocks it even
          when it has been recursively acquired several times.  Another
          internal interface is then used to restore the recursion level
          when the lock is reacquired.

          O valor de retorno é ‘True’ exceto se um dado 'timout' expire,
          no caso em que é ‘False’.

          Alterado na versão 3.2: Previously, the method always returned
          ‘None’.

      -- Método: wait_for (predicate, timeout=None)

          Wait until a condition evaluates to true.  'predicate' should
          be a callable which result will be interpreted as a boolean
          value.  A 'timeout' may be provided giving the maximum time to
          wait.

          This utility method may call *note wait(): 19f1. repeatedly
          until the predicate is satisfied, or until a timeout occurs.
          The return value is the last return value of the predicate and
          will evaluate to ‘False’ if the method timed out.

          Ignoring the timeout feature, calling this method is roughly
          equivalent to writing:

               while not predicate():
                   cv.wait()

          Therefore, the same rules apply as with *note wait(): 19f1.:
          The lock must be held when called and is re-acquired on
          return.  The predicate is evaluated with the lock held.

          Adicionado na versão 3.2.

      -- Método: notify (n=1)

          By default, wake up one thread waiting on this condition, if
          any.  If the calling thread has not acquired the lock when
          this method is called, a *note RuntimeError: 195. is raised.

          This method wakes up at most 'n' of the threads waiting for
          the condition variable; it is a no-op if no threads are
          waiting.

          The current implementation wakes up exactly 'n' threads, if at
          least 'n' threads are waiting.  However, it’s not safe to rely
          on this behavior.  A future, optimized implementation may
          occasionally wake up more than 'n' threads.

          Note: an awakened thread does not actually return from its
          *note wait(): 19f1. call until it can reacquire the lock.
          Since *note notify(): 18f1. does not release the lock, its
          caller should.

      -- Método: notify_all ()

          Wake up all threads waiting on this condition.  This method
          acts like *note notify(): 18f1, but wakes up all waiting
          threads instead of one.  If the calling thread has not
          acquired the lock when this method is called, a *note
          RuntimeError: 195. is raised.

          The method ‘notifyAll’ is a deprecated alias for this method.


File: python.info,  Node: Semaphore objects,  Next: Semaphore example,  Prev: Condition objects,  Up: Referência<2>

5.18.1.9 Semaphore objects
..........................

This is one of the oldest synchronization primitives in the history of
computer science, invented by the early Dutch computer scientist Edsger
W. Dijkstra (he used the names ‘P()’ and ‘V()’ instead of *note
acquire(): 1295. and *note release(): 3311.).

A semaphore manages an internal counter which is decremented by each
*note acquire(): 1295. call and incremented by each *note release():
3311. call.  The counter can never go below zero; when *note acquire():
1295. finds that it is zero, it blocks, waiting until some other thread
calls *note release(): 3311.

Semaphores also support the *note context management protocol: 3305.

 -- Classe: threading.Semaphore (value=1)

     This class implements semaphore objects.  A semaphore manages an
     atomic counter representing the number of *note release(): 3311.
     calls minus the number of *note acquire(): 1295. calls, plus an
     initial value.  The *note acquire(): 1295. method blocks if
     necessary until it can return without making the counter negative.
     If not given, 'value' defaults to 1.

     The optional argument gives the initial 'value' for the internal
     counter; it defaults to ‘1’.  If the 'value' given is less than 0,
     *note ValueError: 202. is raised.

     Alterado na versão 3.3: changed from a factory function to a class.

      -- Método: acquire (blocking=True, timeout=None)

          Acquire a semaphore.

          When invoked without arguments:

             * If the internal counter is larger than zero on entry,
               decrement it by one and return ‘True’ immediately.

             * If the internal counter is zero on entry, block until
               awoken by a call to *note release(): 3311.  Once awoken
               (and the counter is greater than 0), decrement the
               counter by 1 and return ‘True’.  Exactly one thread will
               be awoken by each call to *note release(): 3311.  The
               order in which threads are awoken should not be relied
               on.

          When invoked with 'blocking' set to ‘False’, do not block.  If
          a call without an argument would block, return ‘False’
          immediately; otherwise, do the same thing as when called
          without arguments, and return ‘True’.

          When invoked with a 'timeout' other than ‘None’, it will block
          for at most 'timeout' seconds.  If acquire does not complete
          successfully in that interval, return ‘False’.  Return ‘True’
          otherwise.

          Alterado na versão 3.2: O parâmetro 'timeout' é novo.

      -- Método: release (n=1)

          Release a semaphore, incrementing the internal counter by 'n'.
          When it was zero on entry and other threads are waiting for it
          to become larger than zero again, wake up 'n' of those
          threads.

          Alterado na versão 3.9: Added the 'n' parameter to release
          multiple waiting threads at once.

 -- Classe: threading.BoundedSemaphore (value=1)

     Class implementing bounded semaphore objects.  A bounded semaphore
     checks to make sure its current value doesn’t exceed its initial
     value.  If it does, *note ValueError: 202. is raised.  In most
     situations semaphores are used to guard resources with limited
     capacity.  If the semaphore is released too many times it’s a sign
     of a bug.  If not given, 'value' defaults to 1.

     Alterado na versão 3.3: changed from a factory function to a class.


File: python.info,  Node: Semaphore example,  Next: Event objects,  Prev: Semaphore objects,  Up: Referência<2>

5.18.1.10 ‘Semaphore’ example
.............................

Semaphores are often used to guard resources with limited capacity, for
example, a database server.  In any situation where the size of the
resource is fixed, you should use a bounded semaphore.  Before spawning
any worker threads, your main thread would initialize the semaphore:

     maxconnections = 5
     # ...
     pool_sema = BoundedSemaphore(value=maxconnections)

Once spawned, worker threads call the semaphore’s acquire and release
methods when they need to connect to the server:

     with pool_sema:
         conn = connectdb()
         try:
             # ... use connection ...
         finally:
             conn.close()

The use of a bounded semaphore reduces the chance that a programming
error which causes the semaphore to be released more than it’s acquired
will go undetected.


File: python.info,  Node: Event objects,  Next: Timer objects,  Prev: Semaphore example,  Up: Referência<2>

5.18.1.11 Event objects
.......................

This is one of the simplest mechanisms for communication between
threads: one thread signals an event and other threads wait for it.

An event object manages an internal flag that can be set to true with
the *note set(): 3316. method and reset to false with the *note clear():
3317. method.  The *note wait(): 136b. method blocks until the flag is
true.

 -- Classe: threading.Event

     Class implementing event objects.  An event manages a flag that can
     be set to true with the *note set(): 3316. method and reset to
     false with the *note clear(): 3317. method.  The *note wait():
     136b. method blocks until the flag is true.  The flag is initially
     false.

     Alterado na versão 3.3: changed from a factory function to a class.

      -- Método: is_set ()

          Return ‘True’ if and only if the internal flag is true.

          The method ‘isSet’ is a deprecated alias for this method.

      -- Método: set ()

          Set the internal flag to true.  All threads waiting for it to
          become true are awakened.  Threads that call *note wait():
          136b. once the flag is true will not block at all.

      -- Método: clear ()

          Reset the internal flag to false.  Subsequently, threads
          calling *note wait(): 136b. will block until *note set():
          3316. is called to set the internal flag to true again.

      -- Método: wait (timeout=None)

          Block as long as the internal flag is false and the timeout,
          if given, has not expired.  The return value represents the
          reason that this blocking method returned; ‘True’ if returning
          because the internal flag is set to true, or ‘False’ if a
          timeout is given and the internal flag did not become true
          within the given wait time.

          When the timeout argument is present and not ‘None’, it should
          be a floating-point number specifying a timeout for the
          operation in seconds, or fractions thereof.

          Alterado na versão 3.1: Previously, the method always returned
          ‘None’.


File: python.info,  Node: Timer objects,  Next: Barrier objects,  Prev: Event objects,  Up: Referência<2>

5.18.1.12 Timer objects
.......................

This class represents an action that should be run only after a certain
amount of time has passed — a timer.  *note Timer: 1198. is a subclass
of *note Thread: 953. and as such also functions as an example of
creating custom threads.

Timers are started, as with threads, by calling their *note Timer.start:
2e90. method.  The timer can be stopped (before its action has begun) by
calling the *note cancel(): 331a. method.  The interval the timer will
wait before executing its action may not be exactly the same as the
interval specified by the user.

Por exemplo:

     def hello():
         print("hello, world")

     t = Timer(30.0, hello)
     t.start()  # after 30 seconds, "hello, world" will be printed

 -- Classe: threading.Timer (interval, function, args=None, kwargs=None)

     Create a timer that will run 'function' with arguments 'args' and
     keyword arguments 'kwargs', after 'interval' seconds have passed.
     If 'args' is ‘None’ (the default) then an empty list will be used.
     If 'kwargs' is ‘None’ (the default) then an empty dict will be
     used.

     Alterado na versão 3.3: changed from a factory function to a class.

      -- Método: cancel ()

          Stop the timer, and cancel the execution of the timer’s
          action.  This will only work if the timer is still in its
          waiting stage.


File: python.info,  Node: Barrier objects,  Prev: Timer objects,  Up: Referência<2>

5.18.1.13 Barrier objects
.........................

Adicionado na versão 3.2.

This class provides a simple synchronization primitive for use by a
fixed number of threads that need to wait for each other.  Each of the
threads tries to pass the barrier by calling the *note wait(): 331c.
method and will block until all of the threads have made their *note
wait(): 331c. calls.  At this point, the threads are released
simultaneously.

The barrier can be reused any number of times for the same number of
threads.

As an example, here is a simple way to synchronize a client and server
thread:

     b = Barrier(2, timeout=5)

     def server():
         start_server()
         b.wait()
         while True:
             connection = accept_connection()
             process_server_connection(connection)

     def client():
         b.wait()
         while True:
             connection = make_connection()
             process_client_connection(connection)

 -- Classe: threading.Barrier (parties, action=None, timeout=None)

     Create a barrier object for 'parties' number of threads.  An
     'action', when provided, is a callable to be called by one of the
     threads when they are released.  'timeout' is the default timeout
     value if none is specified for the *note wait(): 331c. method.

      -- Método: wait (timeout=None)

          Pass the barrier.  When all the threads party to the barrier
          have called this function, they are all released
          simultaneously.  If a 'timeout' is provided, it is used in
          preference to any that was supplied to the class constructor.

          The return value is an integer in the range 0 to 'parties' –
          1, different for each thread.  This can be used to select a
          thread to do some special housekeeping, e.g.:

               i = barrier.wait()
               if i == 0:
                   # Only one thread needs to print this
                   print("passed the barrier")

          If an 'action' was provided to the constructor, one of the
          threads will have called it prior to being released.  Should
          this call raise an error, the barrier is put into the broken
          state.

          If the call times out, the barrier is put into the broken
          state.

          This method may raise a *note BrokenBarrierError: 1225.
          exception if the barrier is broken or reset while a thread is
          waiting.

      -- Método: reset ()

          Return the barrier to the default, empty state.  Any threads
          waiting on it will receive the *note BrokenBarrierError: 1225.
          exception.

          Note that using this function may require some external
          synchronization if there are other threads whose state is
          unknown.  If a barrier is broken it may be better to just
          leave it and create a new one.

      -- Método: abort ()

          Put the barrier into a broken state.  This causes any active
          or future calls to *note wait(): 331c. to fail with the *note
          BrokenBarrierError: 1225.  Use this for example if one of the
          threads needs to abort, to avoid deadlocking the application.

          It may be preferable to simply create the barrier with a
          sensible 'timeout' value to automatically guard against one of
          the threads going awry.

      -- Atributo: parties

          The number of threads required to pass the barrier.

      -- Atributo: n_waiting

          The number of threads currently waiting in the barrier.

      -- Atributo: broken

          A boolean that is ‘True’ if the barrier is in the broken
          state.

 -- Exceção: threading.BrokenBarrierError

     This exception, a subclass of *note RuntimeError: 195, is raised
     when the *note Barrier: 1223. object is reset or broken.


File: python.info,  Node: Using locks conditions and semaphores in the with statement,  Prev: Referência<2>,  Up: threading — Paralelismo baseado em threads

5.18.1.14 Using locks, conditions, and semaphores in the ‘with’ statement
.........................................................................

All of the objects provided by this module that have ‘acquire’ and
‘release’ methods can be used as context managers for a *note with: 5d2.
statement.  The ‘acquire’ method will be called when the block is
entered, and ‘release’ will be called when the block is exited.  Hence,
the following snippet:

     with some_lock:
         # do something...

é equivalente a:

     some_lock.acquire()
     try:
         # do something...
     finally:
         some_lock.release()

Currently, *note Lock: 176d, *note RLock: 2de, *note Condition: 1194,
*note Semaphore: 1195, and *note BoundedSemaphore: 1196. objects may be
used as *note with: 5d2. statement context managers.


File: python.info,  Node: multiprocessing — Paralelismo baseado em processo,  Next: multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos,  Prev: threading — Paralelismo baseado em threads,  Up: Execução Concorrente

5.18.2 ‘multiprocessing’ — Paralelismo baseado em processo
----------------------------------------------------------

'Código-fonte:' Lib/multiprocessing/(1)

__________________________________________________________________

*note Disponibilidade: 1ed8.: not Android, not iOS, not WASI.

Este módulo não tem suporte em *note plataformas móveis: 1fde. ou *note
plataformas WebAssembly: 18f5.

* Menu:

* Introdução: Introdução<9>.
* Referência: Referência<3>.
* Programming guidelines::
* Exemplos: Exemplos<14>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/multiprocessing/


File: python.info,  Node: Introdução<9>,  Next: Referência<3>,  Up: multiprocessing — Paralelismo baseado em processo

5.18.2.1 Introdução
...................

*note multiprocessing: 94. é um pacote que oferece suporte à invocação
de processos utilizando uma API semelhante ao módulo *note threading:
ed.  O pacote *note multiprocessing: 94. oferece simultaneamente
concorrência local e remota, efetivamente contornando a *note trava
global do interpretador: 148, ao utilizar subprocessos ao invés de
threads.  Devido a isso, o módulo *note multiprocessing: 94. permite ao
programador aproveitar totalmente os múltiplos processadores de uma
máquina.  Ele funciona tanto em POSIX como em Windows.

The *note multiprocessing: 94. module also introduces the *note Pool:
f9f. object which offers a convenient means of parallelizing the
execution of a function across multiple input values, distributing the
input data across processes (data parallelism).  The following example
demonstrates the common practice of defining such functions in a module
so that child processes can successfully import that module.  This basic
example of data parallelism using *note Pool: f9f,

     from multiprocessing import Pool

     def f(x):
         return x*x

     if __name__ == '__main__':
         with Pool(5) as p:
             print(p.map(f, [1, 2, 3]))

vai exibir na saída padrão

     [1, 4, 9]

The *note multiprocessing: 94. module also introduces APIs which do not
have analogs in the *note threading: ed. module, like the ability to
*note terminate: 3327, ‘interrupt’ or *note kill: b6d. a running
process.

Ver também
..........

*note concurrent.futures.ProcessPoolExecutor: 8f4. oferece uma interface
de nível mais alto para enviar tarefas para um processo em segundo plano
sem bloquear a execução do processo de chamada.  Comparado ao uso direto
da interface *note Pool: f9f, a API *note concurrent.futures: 21.
permite mais prontamente que o envio de trabalho para o pool de
processos subjacente seja separado da espera pelos resultados.

* Menu:

* A classe Process::
* Contextos e métodos de inicialização::
* Trocando objetos entre processos::
* Sincronização entre processos::
* Compartilhando estado entre processos::
* Usando um pool de workers::


File: python.info,  Node: A classe Process,  Next: Contextos e métodos de inicialização,  Up: Introdução<9>

5.18.2.2 A classe ‘Process’
...........................

Em *note multiprocessing: 94, os processos são gerados criando um objeto
*note Process: b6f. e então chamando seu método *note start(): 13d8.
*note Process: b6f. segue a API de *note threading.Thread: 953.  Um
exemplo trivial de um programa multiprocesso é

     from multiprocessing import Process

     def f(name):
         print('hello', name)

     if __name__ == '__main__':
         p = Process(target=f, args=('bob',))
         p.start()
         p.join()

Para mostrar os IDs de processo individuais envolvidos, aqui está um
exemplo expandido:

     from multiprocessing import Process
     import os

     def info(title):
         print(title)
         print('module name:', __name__)
         print('parent process:', os.getppid())
         print('process id:', os.getpid())

     def f(name):
         info('function f')
         print('hello', name)

     if __name__ == '__main__':
         info('main line')
         p = Process(target=f, args=('bob',))
         p.start()
         p.join()

Para uma explicação do porquê a parte ‘if __name__ == '__main__'’ é
necessária, veja *note Programming guidelines: 3329.

The arguments to *note Process: b6f. usually need to be unpickleable
from within the child process.  If you tried typing the above example
directly into a REPL it could lead to an *note AttributeError: 34b. in
the child process trying to locate the 'f' function in the ‘__main__’
module.


File: python.info,  Node: Contextos e métodos de inicialização,  Next: Trocando objetos entre processos,  Prev: A classe Process,  Up: Introdução<9>

5.18.2.3 Contextos e métodos de inicialização
.............................................

Dependendo da plataforma, *note multiprocessing: 94. provê três maneiras
de iniciar um processo.  Estes 'métodos de inicialização' são

     'spawn'

          O processo pai inicia um novo processo do interpretador
          Python.  O processo filho herdará apenas os recursos
          necessários para executar o método *note run(): 332c. do
          objeto do processo.  Em particular, descritores de arquivo e
          identificadores desnecessários do processo pai não serão
          herdados.  Iniciar um processo usando esse método é bem lento
          comparado a usar 'fork' ou 'forkserver'.

          Disponível em plataformas POSIX e Windows.  O padrão no
          Windows e macOS.

     'fork'

          O processo pai usa *note os.fork(): 197. para criar um fork do
          interpretador Python.  O processo filho, quando começa, é
          efetivamente idêntico ao processo pai.  Todos os recursos do
          pai são herdados pelo processo filho.  Observe que criar um
          fork com segurança de um processo multithread é problemático.

          Disponível em sistemas POSIX. Atualmente o padrão em POSIX,
          exceto macOS.

               Nota: O método de início padrão deixará de ser 'fork' no
               Python 3.14.  O código que requer 'fork' deve especificar
               explicitamente isso via *note get_context(): 2c6. ou
               *note set_start_method(): 2c7.

          Alterado na versão 3.12: Se o Python for capaz de detectar que
          seu processo tem várias threads, a função *note os.fork():
          197. que esse método de inicialização chama internamente
          levantará *note DeprecationWarning: 1a5.  Use um método de
          inicialização diferente.  Veja a documentação de *note
          os.fork(): 197. para mais explicações.

     'forkserver'

          Quando o programa é inicializado e seleciona o método
          'forkserver', um processo de servidor é gerado.  A partir
          disso, sempre que um novo processo é necessário, o processo
          pai conecta-se ao servidor e solicita que um novo processo
          seja feito um fork.  O processo fork do servidor é de thread
          única, a menos que bibliotecas do sistema ou importações
          pré-carregadas gerem threads como um efeito colateral; neste
          sentido, geralmente é seguro usar *note os.fork(): 197.
          Nenhum recurso desnecessário é herdado.

          Disponível em plataformas POSIX que suportam a passagem de
          descritores de arquivo em Unix pipes, como o Linux.

Alterado na versão 3.4: 'spawn' adicionado em todas as plataformas
POSIX, e 'forkserver' adicionado para algumas plataformas POSIX.
Processos filhos não herdam mais todos os identificadores herdáveis dos
pais no Windows.

Alterado na versão 3.8: No macOS, o método de inicialização 'spawn'
agora é o padrão.  O método 'fork' deve ser considerado inseguro, pois
pode levar a travamentos do subprocesso, uma vez que as bibliotecas do
sistema macOS podem iniciar threads.  Consulte bpo-33725(1).

No POSIX, usar os métodos de inicialização 'spawn' ou 'forkserver'
também iniciará um processo 'rastreador de recursos' que rastreia os
recursos de sistema nomeados não vinculados (como semáforos nomeados ou
objetos *note SharedMemory: 174f.) criados por processos do programa.
Quando todos os processos tiverem saído, o rastreador de recursos
desvincula qualquer objeto rastreado restante.  Normalmente, não deve
haver nenhum, mas se um processo foi morto por um sinal, pode haver
alguns recursos “vazados”.  (Nem os semáforos vazados nem os segmentos
de memória compartilhada serão desvinculados automaticamente até a
próxima reinicialização do sistema.  Isso é problemático para ambos os
objetos porque o sistema permite apenas um número limitado de semáforos
nomeados, e os segmentos de memória compartilhada ocupam algum espaço na
memória principal.)

Para selecionar um método de inicialização, você usa *note
set_start_method(): 2c7. na cláusula ‘if __name__ == '__main__'’ do
módulo principal.  Por exemplo:

     import multiprocessing as mp

     def foo(q):
         q.put('hello')

     if __name__ == '__main__':
         mp.set_start_method('spawn')
         q = mp.Queue()
         p = mp.Process(target=foo, args=(q,))
         p.start()
         print(q.get())
         p.join()

*note set_start_method(): 2c7. não deve ser usada mais de uma vez no
programa.

Alternativamente, você pode usar *note get_context(): 2c6. para obter um
objeto de contexto.  Objetos de contexto têm a mesma API que o módulo
multiprocessing e permitem que se usem vários métodos de inicialização
no mesmo programa.

     import multiprocessing as mp

     def foo(q):
         q.put('hello')

     if __name__ == '__main__':
         ctx = mp.get_context('spawn')
         q = ctx.Queue()
         p = ctx.Process(target=foo, args=(q,))
         p.start()
         print(q.get())
         p.join()

Note que objetos relacionados a um contexto podem não ser compatíveis
com processos para um contexto diferente.  Em particular, travas criadas
usando o contexto 'fork' não podem ser passados para processos iniciados
usando os métodos de inicialização 'spawn' ou 'forkserver'.

Libraries using *note multiprocessing: 94. or *note ProcessPoolExecutor:
8f4. should be designed to allow their users to provide their own
multiprocessing context.  Using a specific context of your own within a
library can lead to incompatibilities with the rest of the library
user’s application.  Always document if your library requires a specific
start method.

     Aviso: Os métodos de inicialização ‘'spawn'’ e ‘'forkserver'’
     geralmente não podem ser usadas com executáveis “congelados” (por
     exemplo, binários produzidos por pacotes como 'PyInstaller' e
     'cx_Freeze') em sistemas POSIX. O método de inicialização ‘'fork'’
     pode funcionar se o código não usar threads.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33725


File: python.info,  Node: Trocando objetos entre processos,  Next: Sincronização entre processos,  Prev: Contextos e métodos de inicialização,  Up: Introdução<9>

5.18.2.4 Trocando objetos entre processos
.........................................

*note multiprocessing: 94. tem suporte a dois tipos de canal de
comunicação entre processos:

'Filas'

     A classe *note Queue: 1914. é quase um clone de *note queue.Queue:
     13db.  Por exemplo:

          from multiprocessing import Process, Queue

          def f(q):
              q.put([42, None, 'hello'])

          if __name__ == '__main__':
              q = Queue()
              p = Process(target=f, args=(q,))
              p.start()
              print(q.get())    # prints "[42, None, 'hello']"
              p.join()

     As filas são seguras para threads e processos.  Qualquer objeto
     colocado em uma fila *note multiprocessing: 94. será serializado.

'Encadeamentos'

     A função *note Pipe(): 3330. retorna um par de objetos de conexão
     conectados por um encadeamento que por padrão é duplex
     (bidirecional).  Por exemplo:

          from multiprocessing import Process, Pipe

          def f(conn):
              conn.send([42, None, 'hello'])
              conn.close()

          if __name__ == '__main__':
              parent_conn, child_conn = Pipe()
              p = Process(target=f, args=(child_conn,))
              p.start()
              print(parent_conn.recv())   # exibe "[42, None, 'hello']"
              p.join()

     Os dois objetos de conexão retornados por *note Pipe(): 3330.
     representam as duas extremidades do encadeamento.  Cada objeto de
     conexão tem os métodos ‘send()’ e ‘recv()’ (entre outros).  Observe
     que os dados em um encadeamento podem ser corrompidos se dois
     processos (ou threads) tentarem ler ou gravar na 'mesma'
     extremidade do encadeamento ao mesmo tempo.  Claro que não há risco
     de corrupção de processos usando extremidades diferentes do
     encadeamento ao mesmo tempo.

     O método ‘send()’ serializa o objeto e ‘recv()’ recria o objeto.


File: python.info,  Node: Sincronização entre processos,  Next: Compartilhando estado entre processos,  Prev: Trocando objetos entre processos,  Up: Introdução<9>

5.18.2.5 Sincronização entre processos
......................................

*note multiprocessing: 94. contém equivalentes de todas as primitivas de
sincronização de *note threading: ed.  Por exemplo, pode-se usar uma
trava para garantir que apenas um processo exiba na saída padrão por
vez:

     from multiprocessing import Process, Lock

     def f(l, i):
         l.acquire()
         try:
             print('hello world', i)
         finally:
             l.release()

     if __name__ == '__main__':
         lock = Lock()

         for num in range(10):
             Process(target=f, args=(lock, num)).start()

Sem utilizar a saída da trava dos diferentes processos, é possível que
tudo fique confuso.


File: python.info,  Node: Compartilhando estado entre processos,  Next: Usando um pool de workers,  Prev: Sincronização entre processos,  Up: Introdução<9>

5.18.2.6 Compartilhando estado entre processos
..............................................

Conforme mencionado acima, ao fazer programação concorrente, geralmente
é melhor evitar o uso de estado compartilhado, tanto quanto possível.
Isso é particularmente verdadeiro ao utilizar múltiplos processos.

No entanto, se você realmente precisa utilizar algum compartilhamento de
dados, então *note multiprocessing: 94. fornece algumas maneiras de se
fazer isso.

'Memória compartilhada'

     Os dados podem ser armazenados em um mapa de memória compartilhado
     utilizando *note Value: 3333. ou *note Array: 3334.  Por exemplo, o
     código a seguir

          from multiprocessing import Process, Value, Array

          def f(n, a):
              n.value = 3.1415927
              for i in range(len(a)):
                  a[i] = -a[i]

          if __name__ == '__main__':
              num = Value('d', 0.0)
              arr = Array('i', range(10))

              p = Process(target=f, args=(num, arr))
              p.start()
              p.join()

              print(num.value)
              print(arr[:])

     vai exibir

          3.1415927
          [0, -1, -2, -3, -4, -5, -6, -7, -8, -9]

     Os argumentos ‘'d'’ e ‘'i'’ usados ao criar ‘num’ e ‘arr’ são
     typecodes do tipo usado pelo módulo *note array: 7.: ‘'d'’ indica
     um ponto flutuante de precisão dupla e ‘'i'’ indica um inteiro com
     sinal.  Esses objetos compartilhados serão seguros para thread e
     processo.

     Para mais flexibilidade no uso de memória compartilhada, pode-se
     utilizar o módulo *note multiprocessing.sharedctypes: 9a, que
     suporta a criação de objetos ctypes arbitrários alocados da memória
     compartilhada.

'Processo de servidor'

     Um objeto gerenciador retornado por *note Manager(): cda. controla
     um processo de servidor que contém objetos Python e permite que
     outros processos os manipulem usando proxies.

     Um gerenciador retornado por *note Manager(): cda. vai oferecer
     suporte aos tipos *note list: 611, *note dict: 256, *note
     Namespace: 3335, *note Lock: 1683, *note RLock: 1684, *note
     Semaphore: 3336, *note BoundedSemaphore: 3337, *note Condition:
     3338, *note Event: 198f, *note Barrier: 3339, *note Queue: 1914,
     *note Value: 3333. e *note Array: 3334.  Por exemplo,

          from multiprocessing import Process, Manager

          def f(d, l):
              d[1] = '1'
              d['2'] = 2
              d[0.25] = None
              l.reverse()

          if __name__ == '__main__':
              with Manager() as manager:
                  d = manager.dict()
                  l = manager.list(range(10))

                  p = Process(target=f, args=(d, l))
                  p.start()
                  p.join()

                  print(d)
                  print(l)

     vai exibir

          {0.25: None, 1: '1', '2': 2}
          [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

     Os gerenciadores de processos de servidor são mais flexíveis do que
     usar objetos de memória compartilhada porque podem ser feitos para
     oferecer suporte a tipos de objetos arbitrários.  Além disso, um
     único gerenciador pode ser compartilhado por processos em
     diferentes computadores em uma rede.  Eles são, no entanto, mais
     lentos do que usar memória compartilhada.


File: python.info,  Node: Usando um pool de workers,  Prev: Compartilhando estado entre processos,  Up: Introdução<9>

5.18.2.7 Usando um pool de workers
..................................

A classe *note Pool: f9f. representa um pool de processos de worker.
Ela tem métodos que permitem que tarefas sejam descarregadas para os
processos de worker de algumas maneiras diferentes.

Por exemplo:

     from multiprocessing import Pool, TimeoutError
     import time
     import os

     def f(x):
         return x*x

     if __name__ == '__main__':
         # inicia 4 processos de trabalhador
         with Pool(processes=4) as pool:

             # exibe "[0, 1, 4,..., 81]"
             print(pool.map(f, range(10)))

             # exibe mesmo números em ordem arbitrária
             for i in pool.imap_unordered(f, range(10)):
                 print(i)

             # calcula "f(20)" assincronamente
             res = pool.apply_async(f, (20,))      # executa em *apenas* um processo
             print(res.get(timeout=1))             # exibe "400"

             # calcula "os.getpid()" assincronamente
             res = pool.apply_async(os.getpid, ()) # executa em *apenas* um procsso
             print(res.get(timeout=1))             # exibe o PID daquele processo

             # iniciando vários cálculos de forma assíncrona *pod* usar mais procssos
             multiple_results = [pool.apply_async(os.getpid, ()) for i in range(4)]
             print([res.get(timeout=1) for res in multiple_results])

             # faz um único worker dormir por 10 segundos
             res = pool.apply_async(time.sleep, (10,))
             try:
                 print(res.get(timeout=1))
             except TimeoutError:
                 print("We lacked patience and got a multiprocessing.TimeoutError")

             print("For the moment, the pool remains available for more work")

         # saindo o bloco 'with' parou o pool
         print("Now the pool is closed and no longer available")

Observe que os métodos de um pool só devem ser usados pelo processo que
o criou.

     Nota: A funcionalidade dentro deste pacote requer que o módulo
     ‘__main__’ seja importável pelos filhos.  Isso é abordado em *note
     Programming guidelines: 3329, mas vale a pena apontar aqui.  Isso
     significa que alguns exemplos, como os exemplos *note
     multiprocessing.pool.Pool: f9f. não funcionarão no interpretador
     interativo.  Por exemplo:

          >>> from multiprocessing import Pool
          >>> p = Pool(5)
          >>> def f(x):
          ...     return x*x
          ...
          >>> with p:
          ...     p.map(f, [1,2,3])
          Process PoolWorker-1:
          Process PoolWorker-2:
          Process PoolWorker-3:
          Traceback (most recent call last):
          Traceback (most recent call last):
          Traceback (most recent call last):
          AttributeError: Can't get attribute 'f' on <module '__main__' (<class '_frozen_importlib.BuiltinImporter'>)>
          AttributeError: Can't get attribute 'f' on <module '__main__' (<class '_frozen_importlib.BuiltinImporter'>)>
          AttributeError: Can't get attribute 'f' on <module '__main__' (<class '_frozen_importlib.BuiltinImporter'>)>

     (Se você tentar isso, na verdade, serão gerados três tracebacks
     completos intercalados de forma semi-aleatória, e então você pode
     ter que interromper o processo pai de alguma forma.)


File: python.info,  Node: Referência<3>,  Next: Programming guidelines,  Prev: Introdução<9>,  Up: multiprocessing — Paralelismo baseado em processo

5.18.2.8 Referência
...................

O pacote *note multiprocessing: 94. replica principalmente a API do
módulo *note threading: ed.

* Menu:

* Global start method::
* Process e exceções::
* Encadeamentos e filas::
* Diversos: Diversos<4>.
* Objetos de conexão::
* Primitivas de sincronização::
* Objetos ctypes compartilhados::
* Gerenciadores::
* Objetos proxies::
* Process Pools::
* Listeners and Clients::
* Authentication keys::
* Gerando logs: Gerando logs<2>.
* The multiprocessing.dummy module: The multiprocessing dummy module.


File: python.info,  Node: Global start method,  Next: Process e exceções,  Up: Referência<3>

5.18.2.9 Global start method
............................

Python supports several ways to create and initialize a process.  The
global start method sets the default mechanism for creating a process.

Several multiprocessing functions and methods that may also instantiate
certain objects will implicitly set the global start method to the
system’s default, if it hasn’t been set already.  The global start
method can only be set once.  If you need to change the start method
from the system default, you must proactively set the global start
method before calling functions or methods, or creating these objects.


File: python.info,  Node: Process e exceções,  Next: Encadeamentos e filas,  Prev: Global start method,  Up: Referência<3>

5.18.2.10 ‘Process’ e exceções
..............................

 -- Classe: multiprocessing.Process (group=None, target=None, name=None,
          args=(), kwargs={}, *, daemon=None)

     Objetos processo representam atividades que são executadas em um
     processo separado.  A classe *note Process: b6f. possui
     equivalentes de todos os métodos de *note threading.Thread: 953.

     O construtor deve sempre ser chamado com argumentos nomeados.
     'group' deve sempre ser ‘None’; ele existe somente para
     compatibilidade com *note threading.Thread: 953.  'target' é o
     objeto chamável a ser invocado pelo método *note run(): 332c.  O
     padrão é ‘None’, o que significa que nada é chamado.  'name' é o
     nome do processo (veja *note name: 333f. para mais detalhes).
     'args' é a tupla de argumento para a invocação de destino.
     'kwargs' é um dicionário de argumentos nomeados para a invocação de
     destino.  Se fornecido, o argumento somente-nomeados 'daemon'
     define o sinalizador do processo *note daemon: 3340. como ‘True’ ou
     ‘False’.  Se ‘None’ (o padrão), este sinalizador será herdado do
     processo de criação.

     Por padrão, nenhum argumento é passado para 'target'.  O argumento
     'args', que tem como padrão ‘()’, pode ser usado para especificar
     uma lista ou tupla de argumentos a serem passados para 'target'.

     If a subclass overrides the constructor, it must make sure it
     invokes the base class constructor (‘super().__init__()’) before
     doing anything else to the process.

          Nota: In general, all arguments to *note Process: b6f. must be
          picklable.  This is frequently observed when trying to create
          a *note Process: b6f. or use a *note
          concurrent.futures.ProcessPoolExecutor: 8f4. from a REPL with
          a locally defined 'target' function.

          Passing a callable object defined in the current REPL session
          causes the child process to die via an uncaught *note
          AttributeError: 34b. exception when starting as 'target' must
          have been defined within an importable module in order to be
          loaded during unpickling.

          Example of this uncatchable error from the child:

               >>> import multiprocessing as mp
               >>> def knigit():
               ...     print("Ni!")
               ...
               >>> process = mp.Process(target=knigit)
               >>> process.start()
               >>> Traceback (most recent call last):
                 File ".../multiprocessing/spawn.py", line ..., in spawn_main
                 File ".../multiprocessing/spawn.py", line ..., in _main
               AttributeError: module '__main__' has no attribute 'knigit'
               >>> process
               <SpawnProcess name='SpawnProcess-1' pid=379473 parent=378707 stopped exitcode=1>

          See *note The spawn and forkserver start methods: 3341.  While
          this restriction is not true if using the ‘"fork"’ start
          method, as of Python ‘3.14’ that is no longer the default on
          any platform.  See *note Contextos e métodos de inicialização:
          2c8.  See also gh-132898(1).

     Alterado na versão 3.3: Adicionado o parâmetro 'daemon'.

      -- Método: run ()

          Método que representa a atividade do processo.

          Você pode substituir esse método em uma subclasse.  O método
          padrão *note run(): 332c. invoca o objeto chamável passado ao
          construtor do objeto como o argumento alvo, se houver, com
          argumentos nomeados e sequenciais retirados dos argumentos
          'args' e 'kwargs', respectivamente.

          Usar uma lista ou tupla como argumento 'args' passado para
          *note Process: b6f. obtém o mesmo efeito.

          Exemplo:

               >>> from multiprocessing import Process
               >>> p = Process(target=print, args=[1])
               >>> p.run()
               1
               >>> p = Process(target=print, args=(1,))
               >>> p.run()
               1

      -- Método: start ()

          Inicia a atividade do processo.

          Isso deve ser chamado no máximo uma vez por objeto processo.
          Ele organiza para que o método *note run(): 332c. do objeto
          seja invocado em um processo separado.

      -- Método: join ([timeout])

          Se o argumento opcional 'timeout' for ‘None’ (o padrão), o
          método bloqueia até que o processo cujo método *note join():
          13da. é chamado termine.  Se 'timeout' for um número positivo,
          ele bloqueia no máximo 'timeout' segundos.  Observe que o
          método retorna ‘None’ se seu processo terminar ou se o método
          tiver tempo limite.  Verifique o *note exitcode: 3342. do
          processo para determinar se ele terminou.

          Um processo pode ser usar “join” muitas vezes.

          Um processo não pode se unir porque isso causaria um impasse.
          É um erro tentar se unir a um processo antes que ele tenha
          sido iniciado.

      -- Atributo: name

          O nome do processo.  O nome é uma string usada apenas para
          fins de identificação.  Não tem semântica.  Vários processos
          podem receber o mesmo nome.

          O nome inicial é definido pelo construtor.  Se nenhum nome
          explícito for fornecido ao construtor, um nome do formato
          ‘Processo-N[1]:N[2]:…:N[k]’ é construído, onde cada N[k] é o
          N-ésimo filho de seu pai.

      -- Método: is_alive ()

          Retorna se o processo está ativo.

          Em termos gerais, um objeto processo está ativo desde o
          momento em que o método *note start(): 13d8. retorna até o
          término do processo filho.

      -- Atributo: daemon

          O sinalizador daemon do processo, um valor Booleano.  Isso
          deve ser definido antes de *note start(): 13d8. ser chamado.

          O valor inicial é herdado do processo de criação.

          Quando um processo sai, ele tenta encerrar todos os seus
          processos filhos daemônicos.

          Note que um processo daemônico não tem permissão para criar
          processos filhos.  Caso contrário, um processo daemônico
          deixaria seus filhos órfãos se ele fosse encerrado quando seu
          processo pai saísse.  Além disso, esses 'não' são daemons ou
          serviços Unix, eles são processos normais que serão encerrados
          (e em vez de usar “join”) se processos não daemônicos tiverem
          saído.

     Além da API *note threading.Thread: 953, os objetos *note Process:
     b6f. também oferecem suporte aos seguintes atributos e métodos:

      -- Atributo: pid

          Retorna o ID do processo.  Antes do processo ser gerado, este
          será ‘None’.

      -- Atributo: exitcode

          O código de saída da criança.  Este será ‘None’ se o processo
          ainda não tiver terminado.

          Se o método *note run(): 332c. da criança retornar
          normalmente, o código de saída será 0.  Se ele terminar via
          *note sys.exit(): 138e. com um argumento inteiro 'N', o código
          de saída será 'N'.

          Se a criança for encerrada devido a uma exceção não capturada
          em *note run(): 332c, o código de saída será 1.  Se ela for
          encerrada pelo sinal 'N', o código de saída será o valor
          negativo '-N'.

      -- Atributo: authkey

          A chave de autenticação do processo (uma string de bytes).

          Quando *note multiprocessing: 94. é inicializado, o processo
          principal recebe uma string aleatória usando *note
          os.urandom(): 523.

          Quando um objeto *note Process: b6f. é criado, ele herda a
          chave de autenticação do seu processo pai, embora isso possa
          ser alterado definindo *note authkey: 3344. para outra
          sequência de bytes.

          Veja *note Authentication keys: 3345.

      -- Atributo: sentinel

          Um identificador numérico de um objeto do sistema que ficará
          “pronto” quando o processo terminar.

          Você pode usar esse valor se quiser esperar por vários eventos
          ao mesmo tempo usando *note multiprocessing.connection.wait():
          111e.  Caso contrário, chamar *note join(): 13da. é mais
          simples.

          No Windows, este é um identificador de sistema operacional
          utilizável com a família de chamadas de API
          ‘WaitForSingleObject’ e ‘WaitForMultipleObjects’.  No POSIX,
          este é um descritor de arquivo utilizável com primitivos do
          módulo *note select: c1.

          Adicionado na versão 3.3.

      -- Método: terminate ()

          Encerra o processo.  No POSIX isso é feito usando o sinal
          *note SIGTERM: 1426.; no Windows é usado ‘TerminateProcess()’.
          Note que os manipuladores de saída e cláusulas finally, etc.,
          não serão executados.

          Observe que os processos descendentes do processo 'não' serão
          encerrados — eles simplesmente ficarão órfãos.

               Aviso: Se esse método for usado quando o processo
               associado estiver usando um encadeamento ou fila, então o
               encadeamento ou fila é passível de ser corrompido e pode
               se tornar inutilizável por outro processo.  Similarmente,
               se o processo adquiriu um trava ou semáforo etc., então
               encerrá-lo é passível de causar impasse em outros
               processos.

      -- Método: kill ()

          O mesmo que *note terminate(): 3327, mas usando o sinal
          ‘SIGKILL’ no POSIX.

          Adicionado na versão 3.7.

      -- Método: close ()

          Fecha o objeto *note Process: b6f, liberando todos os recursos
          associados a ele.  *note ValueError: 202. é levantado se o
          processo subjacente ainda estiver em execução.  Uma vez que
          *note close(): b6c. retorne com sucesso, a maioria dos outros
          métodos e atributos do objeto *note Process: b6f. levantará
          *note ValueError: 202.

          Adicionado na versão 3.7.

     Observe que os métodos *note start(): 13d8, *note join(): 13da,
     *note is_alive(): 13d9, *note terminate(): 3327. e *note exitcode:
     3342. devem ser chamados somente pelo processo que criou o objeto
     processo.

     Exemplo de uso de alguns dos métodos de *note Process: b6f.:

          >>> import multiprocessing, time, signal
          >>> mp_context = multiprocessing.get_context('spawn')
          >>> p = mp_context.Process(target=time.sleep, args=(1000,))
          >>> print(p, p.is_alive())
          <...Process ... initial> False
          >>> p.start()
          >>> print(p, p.is_alive())
          <...Process ... started> True
          >>> p.terminate()
          >>> time.sleep(0.1)
          >>> print(p, p.is_alive())
          <...Process ... stopped exitcode=-SIGTERM> False
          >>> p.exitcode == -signal.SIGTERM
          True

 -- Exceção: multiprocessing.ProcessError

     A classe base de todas as exceções de *note multiprocessing: 94.

 -- Exceção: multiprocessing.BufferTooShort

     Exceção levantada por ‘Connection.recv_bytes_into()’ quando o
     objeto buffer fornecido é muito pequeno para a mensagem lida.

     Se ‘e’ for uma instância de *note BufferTooShort: 3347, então
     ‘e.args[0]’ retornará a mensagem como uma string de bytes.

 -- Exceção: multiprocessing.AuthenticationError

     Levantada quando há um erro de autenticação.

 -- Exceção: multiprocessing.TimeoutError

     Levantada por métodos com um tempo limite quando o tempo limite
     expira.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/132898


File: python.info,  Node: Encadeamentos e filas,  Next: Diversos<4>,  Prev: Process e exceções,  Up: Referência<3>

5.18.2.11 Encadeamentos e filas
...............................

Ao usar vários processos, geralmente é usada a passagem de mensagens
para comunicação entre processos e evita-se ter que usar quaisquer
primitivas de sincronização, como travas.

Para passar mensagens, pode-se usar *note Pipe(): 3330. (para uma
conexão entre dois processos) ou uma fila (que permite múltiplos
produtores e consumidores).

Os tipos *note Queue: 1914, *note SimpleQueue: 91a. e *note
JoinableQueue: 334b. são filas FIFO multiprodutoras e multiconsumidoras
modeladas na classe *note queue.Queue: 13db. da biblioteca padrão.  Elas
diferem porque *note Queue: 1914. não tem os métodos *note task_done():
334c. e *note join(): 334d. introduzidos na classe *note queue.Queue:
13db. do Python 2.5.

Se você usar *note JoinableQueue: 334b, então você 'deve' chamar *note
JoinableQueue.task_done(): 334e. para cada tarefa removida da fila, caso
contrário, o semáforo usado para contar o número de tarefas não
concluídas pode eventualmente transbordar, levantando uma exceção.

Uma diferença de outras implementações de filas no Python é que as filas
do *note multiprocessing: 94. serializam todos os objetos que são
colocados nelas usando *note pickle: a6.  O objeto retornado pelo método
get é um objeto recriado que não compartilha memória com o objeto
original.

Observe que também é possível criar uma fila compartilhada usando um
objeto gerenciador — veja *note Gerenciadores: 334f.

     Nota: *note multiprocessing: 94. usa as exceções usuais *note
     queue.Empty: 3350. e *note queue.Full: 3351. para sinalizar um
     tempo limite.  Elas não estão disponíveis no espaço de nomes do
     *note multiprocessing: 94, então você precisa importá-las de *note
     queue: b6.

     Nota: Quando um objeto é colocado em uma fila, o objeto é
     serializado com pickle e uma thread em segundo plano depois
     descarrega os dados serializados com pickle para um encadeamento
     subjacente.  Isso tem algumas consequências que são um pouco
     surpreendentes, mas não devem causar nenhuma dificuldade prática –
     se elas realmente o incomodam, então você pode usar uma fila criada
     com um *note gerenciador: 334f.

       1. Depois de colocar um objeto em uma fila vazia, pode haver um
          atraso infinitesimal antes que o método *note empty(): 16e6.
          da fila retorne *note False: b49. e *note get_nowait(): 3352.
          possa retornar sem levantar *note queue.Empty: 3350.

       2. Se vários processos estiverem enfileirando objetos, é possível
          que os objetos sejam recebidos na outra extremidade fora de
          ordem.  No entanto, objetos enfileirados pelo mesmo processo
          sempre estarão na ordem esperada em relação uns aos outros.

     Aviso: Se um processo for morto usando *note Process.terminate():
     3327. ou *note os.kill(): 13ae. enquanto estiver tentando usar uma
     *note Queue: 1914, os dados na fila provavelmente serão
     corrompidos.  Isso pode fazer com que qualquer outro processo
     obtenha uma exceção quando tentar usar a fila mais tarde.

     Aviso: Conforme mencionado acima, se um processo filho tiver
     colocado itens em uma fila (e não tiver usado *note
     JoinableQueue.cancel_join_thread: 3353.), esse processo não será
     encerrado até que todos os itens armazenados em buffer tenham sido
     liberados para o encadeamento.

     Isso significa que se você tentar juntar esse processo, poderá
     obter um impasse, a menos que tenha certeza de que todos os itens
     que foram colocados na fila foram consumidos.  Da mesma forma, se o
     processo filho não for daemônico, o processo pai pode travar na
     saída quando tentar juntar todos os seus filhos não daemônicos.

     Note que uma fila criada usando um gerenciador não tem esse
     problema.  Veja *note Programming guidelines: 3329.

Para um exemplo do uso de filas para comunicação entre processos, veja
*note Exemplos: 3354.

 -- Função: multiprocessing.Pipe ([duplex])

     Retorna um par ‘(conn1, conn2)’ de objetos *note Connection: 111f.
     representando as extremidades de um encadeamento.

     Se 'duplex' for ‘True’ (o padrão), então o encadeamento é
     bidirecional.  Se 'duplex' for ‘False’, então o encadeamento é
     unidirecional: ‘conn1’ pode ser usado somente para receber
     mensagens e ‘conn2’ pode ser usado somente para enviar mensagens.

     O método ‘send()’ serializa o objeto usando *note pickle: a6. e
     ‘recv()’ recria o objeto.

 -- Classe: multiprocessing.Queue ([maxsize])

     Retorna uma fila compartilhada de processo implementada usando um
     encadeamento e algumas travas/semáforos.  Quando um processo coloca
     um item na fila pela primeira vez, uma thread alimentadora é
     iniciada, a qual transfere objetos de um buffer para o
     encadeamento.

     Instantiating this class may set the global start method.  See
     *note Global start method: 333c. for more details.

     As exceções usuais *note queue.Empty: 3350. e *note queue.Full:
     3351. do módulo *note queue: b6. da biblioteca padrão são
     levantadas para sinalizar tempos limite.

     *note Queue: 1914. implementa todos os métodos de *note
     queue.Queue: 13db, exceto *note task_done(): 334c. e *note join():
     334d.

      -- Método: qsize ()

          Retorna o tamanho aproximado da fila.  Devido à semântica de
          multithreading/multiprocessamento, esse número não é
          confiável.

          Observe que isso pode levantar *note NotImplementedError: 228.
          em plataformas como macOS, onde ‘sem_getvalue()’ não está
          implementado.

      -- Método: empty ()

          Retorna ‘True’ se a fila estiver vazia, ‘False’ caso
          contrário.  Devido à semântica de
          multithreading/multiprocessamento, isso não é confiável.

          Pode levantar uma exceção *note OSError: 417. em filas
          fechadas.  (não garantido)

      -- Método: full ()

          Retorna ‘True’ se a fila estiver cheia, ‘False’ caso
          contrário.  Devido à semântica de
          multithreading/multiprocessamento, isso não é confiável.

      -- Método: put (obj[, block[, timeout]])

          Coloca 'obj' na fila.  Se o argumento opcional 'block' for
          ‘True’ (o padrão) e 'timeout' for ‘None’ (o padrão), bloqueia
          se necessário até que um slot livre esteja disponível.  Se
          'timeout' for um número positivo, ele bloqueia no máximo
          'timeout' segundos e levanta a exceção *note queue.Full: 3351.
          se nenhum slot livre estiver disponível dentro desse tempo.
          Caso contrário ('block' é ‘False’), coloca um item na fila se
          um slot livre estiver imediatamente disponível, senão levanta
          a exceção *note queue.Full: 3351. ('timeout' é ignorado nesse
          caso).

          Alterado na versão 3.8: Se a fila for fechada, *note
          ValueError: 202. será levantada em vez de *note
          AssertionError: 6a9.

      -- Método: put_nowait (obj)

          Equivalente a ‘put(obj, False)’.

      -- Método: get ([block[, timeout]])

          Remove e retorna um item da fila.  Se os argumentos opcionais
          'block' forem ‘True’ (o padrão) e 'timeout' forem ‘None’ (o
          padrão), bloqueia se necessário até que um item esteja
          disponível.  Se 'timeout' for um número positivo, ele bloqueia
          no máximo 'timeout' segundos e levantada a exceção *note
          queue.Empty: 3350. se nenhum item estiver disponível dentro
          desse tempo.  Caso contrário (block for ‘False’), retorna um
          item se um estiver imediatamente disponível, senão levantada a
          exceção *note queue.Empty: 3350. ('timeout' é ignorado nesse
          caso).

          Alterado na versão 3.8: Se a fila for fechada, *note
          ValueError: 202. será levantada em vez de *note OSError: 417.

      -- Método: get_nowait ()

          Equivalente a ‘get(False)’.

     *note multiprocessing.Queue: 1914. tem alguns métodos adicionais
     não encontrados em *note queue.Queue: 13db.  Esses métodos
     geralmente são desnecessários para a maioria dos códigos:

      -- Método: close ()

          Fecha a fila: libera recursos internos.

          A queue must not be used anymore after it is closed.  For
          example, *note get(): 1bb5, *note put(): 1bb4. and *note
          empty(): 16e6. methods must no longer be called.

          The background thread will quit once it has flushed all
          buffered data to the pipe.  This is called automatically when
          the queue is garbage collected.

      -- Método: join_thread ()

          Junta a thread de segundo plano.  Isso só pode ser usado
          depois que *note close(): 1915. for chamado.  Isso bloqueia
          até que a thread de segundo plano saia, garantindo que todos
          os dados no buffer tenham sido liberados para o encadeamento.

          Por padrão, se um processo não for o criador da fila, ao sair,
          ele tentará se juntar ao thread de segundo plano da fila.  O
          processo pode chamar *note cancel_join_thread(): 3353. para
          fazer *note join_thread(): 3358. não fazer nada.

      -- Método: cancel_join_thread ()

          Impede que *note join_thread(): 3358. bloqueie.  Em
          particular, isso impede que o thread de segundo plano seja
          unido automaticamente quando o processo sai – veja *note
          join_thread(): 3358.

          Um nome melhor para esse método pode ser
          ‘allow_exit_without_flush()’.  É provável que ele faça com que
          dados enfileirados sejam perdidos, e você quase certamente não
          precisará usá-lo.  Ele está realmente lá somente se você
          precisar que o processo atual saia imediatamente sem esperar
          para liberar dados enfileirados para o encadeamento
          subjacente, e você não se importa com dados perdidos.

          Nota: A funcionalidade desta classe requer uma implementação
          de semáforo compartilhado funcional no sistema operacional
          host.  Sem uma, a funcionalidade nesta classe será
          desabilitada, e as tentativas de instanciar uma *note Queue:
          1914. resultarão em um *note ImportError: 419.  Veja
          bpo-3770(1) para informações adicionais.  O mesmo vale para
          qualquer um dos tipos de fila especializados listados abaixo.

 -- Classe: multiprocessing.SimpleQueue

     É um tipo *note Queue: 1914. simplificado, muito próximo de um
     *note Pipe: 3330. travado.

     Instantiating this class may set the global start method.  See
     *note Global start method: 333c. for more details.

      -- Método: close ()

          Fecha a fila: libera recursos internos.

          Uma fila não deve mais ser usada depois de fechada.  Por
          exemplo, os métodos *note get(): 3359, *note put(): 335a. e
          *note empty(): 16e7. não devem mais ser chamados.

          Adicionado na versão 3.9.

      -- Método: empty ()

          Retorna ‘True’ se a fila estiver vazia, ‘False’ caso
          contrário.

          Sempre levanta *note OSError: 417. se a SimpleQueue estiver
          fechada.

      -- Método: get ()

          Remove e retorna um item da fila.

      -- Método: put (item)

          Coloca 'item' na fila.

 -- Classe: multiprocessing.JoinableQueue ([maxsize])

     *note JoinableQueue: 334b, uma subclasse de *note Queue: 1914, é
     uma fila que também possui os métodos *note task_done(): 334e. e
     *note join(): 335b.

     Instantiating this class may set the global start method.  See
     *note Global start method: 333c. for more details.

      -- Método: task_done ()

          Indica que a tarefa anteriormente enfileirado está concluída.
          Para cada *note get(): 1bb5. usado para buscar uma tarefa, uma
          chamada subsequente para *note task_done(): 334e. avisa à
          fila, que o processamento na tarefa está concluído.

          Se um *note join(): 334d. estiver causando bloqueio no
          momento, ele irá continuar quando todos os itens tiverem sido
          processados (significando que uma chamada *note task_done():
          334e. foi recebida para cada item que foi chamado o método
          *note put(): 1bb4. para colocar na fila).

          Levanta *note ValueError: 202. se for chamado mais vezes do
          que o número de itens colocados na fila.

      -- Método: join ()

          Bloqueia até que todos os itens na fila tenham sido obtidos e
          processados.

          A contagem de tarefas inacabadas aumenta sempre que um item é
          adicionado à fila.  A contagem diminui sempre que uma
          consumidora chama *note task_done(): 334e. para indicar que o
          item foi recuperado e todo o trabalho nele foi concluído.
          Quando a contagem de tarefas inacabadas chega a zero, *note
          join(): 334d. desbloqueia.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=3770


File: python.info,  Node: Diversos<4>,  Next: Objetos de conexão,  Prev: Encadeamentos e filas,  Up: Referência<3>

5.18.2.12 Diversos
..................

 -- Função: multiprocessing.active_children ()

     Retorna a lista de todos os filhos ativos do processo atual.

     Chamar isso tem o efeito colateral de “juntar” quaisquer processos
     que já tenham sido concluídos.

 -- Função: multiprocessing.cpu_count ()

     Retorna o número de CPUs no sistema.

     Este número não equivale ao número de CPUs que o processo atual
     pode usar.  O número de CPUs utilizáveis pode ser obtido com *note
     os.process_cpu_count(): 1c4. (ou ‘len(os.sched_getaffinity(0))’).

     Quando o número de CPUs não pode ser determinado, uma *note
     NotImplementedError: 228. é levantada.

     Ver também
     ..........

     *note os.cpu_count(): 1c5. *note os.process_cpu_count(): 1c4.

     Alterado na versão 3.13: O valor de retorno também pode ser
     substituído usando o sinalizador *note -X cpu_count: 176. ou *note
     PYTHON_CPU_COUNT: 210, pois este é apenas um invólucro em torno das
     APIs de contagem de CPU do *note os: a1.

 -- Função: multiprocessing.current_process ()

     Retorna o objeto *note Process: b6f. correspondente ao processo
     atual.

     Um análogo de *note threading.current_thread(): 309.

 -- Função: multiprocessing.parent_process ()

     Retorna o objeto *note Process: b6f. correspondente ao processo pai
     do *note current_process(): 335e.  Para o processo principal,
     ‘parent_process’ será ‘None’.

     Adicionado na versão 3.8.

 -- Função: multiprocessing.freeze_support ()

     Add support for when a program which uses *note multiprocessing:
     94. has been frozen to produce an executable.  (Has been tested
     with 'py2exe', 'PyInstaller' and 'cx_Freeze'.)

     É preciso chamar esta função logo após a linha ‘if __name__ ==
     '__main__'’ do módulo principal.  Por exemplo:

          from multiprocessing import Process, freeze_support

          def f():
              print('hello world!')

          if __name__ == '__main__':
              freeze_support()
              Process(target=f).start()

     Se a linha ‘freeze_support()’ for omitida, tentar executar o
     executável congelado levantará *note RuntimeError: 195.

     Calling ‘freeze_support()’ has no effect when the start method is
     not 'spawn'.  In addition, if the module is being run normally by
     the Python interpreter (the program has not been frozen), then
     ‘freeze_support()’ has no effect.

 -- Função: multiprocessing.get_all_start_methods ()

     Retorna uma lista dos métodos de inicialização suportados, o
     primeiro dos quais é o padrão.  Os métodos possíveis são ‘'fork'’,
     ‘'spawn'’ e ‘'forkserver'’.  Nem todas as plataformas suportam
     todos os métodos.  Consulte *note Contextos e métodos de
     inicialização: 2c8.

     Adicionado na versão 3.4.

 -- Função: multiprocessing.get_context (method=None)

     Retorna um objeto de contexto que possui os mesmos atributos do
     módulo *note multiprocessing: 94.

     If 'method' is ‘None’ then the default context is returned.  Note
     that if the global start method has not been set, this will set it
     to the system default See *note Global start method: 333c. for more
     details.  Otherwise 'method' should be ‘'fork'’, ‘'spawn'’,
     ‘'forkserver'’.  *note ValueError: 202. is raised if the specified
     start method is not available.  See *note Contextos e métodos de
     inicialização: 2c8.

     Adicionado na versão 3.4.

 -- Função: multiprocessing.get_start_method (allow_none=False)

     Retorna o nome do método de inicialização usado para iniciar
     processos.

     If the global start method is not set and 'allow_none' is ‘False’,
     the global start method is set to the default, and its name is
     returned.  See *note Global start method: 333c. for more details.

     O valor de retorno pode ser ‘'fork'’, ‘'spawn'’, ‘'forkserver'’ ou
     ‘None’.  Veja *note Contextos e métodos de inicialização: 2c8.

     Adicionado na versão 3.4.

     Alterado na versão 3.8: No macOS, o método de inicialização 'spawn'
     agora é o padrão.  O método de inicialização 'fork' deve ser
     considerado inseguro, pois pode levar a travamentos do subprocesso.
     Consulte bpo-33725(1).

 -- Função: multiprocessing.set_executable (executable)

     Define o caminho do interpretador Python a ser usado ao iniciar um
     processo filho.  (Por padrão, *note sys.executable: 3b8. é usado).
     Os incorporadores provavelmente precisarão fazer algo como

          set_executable(os.path.join(sys.exec_prefix, 'pythonw.exe'))

     antes que eles possam criar processos filho.

     Alterado na versão 3.4: Agora com suporte no POSIX quando o método
     de inicialização ‘'spawn'’ é usado.

     Alterado na versão 3.11: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: multiprocessing.set_forkserver_preload (module_names)

     Define uma lista de nomes de módulos para o processo principal do
     forkserver tentar importar, de modo que seu estado já importado
     seja herdado por processos forks.  Qualquer *note ImportError: 419.
     ao fazer isso é ignorado silenciosamente.  Isso pode ser usado como
     um aprimoramento de desempenho para evitar trabalho repetido em
     cada processo.

     Para que isso aconteça, trabalho deve ser chamado antes que o
     forkserver processar tenha sido iniciado (antes de criar um ‘Pool’
     ou iniciar um *note Process: b6f.).

     Só é significativo ao usar o método de inicialização
     ‘'forkserver'’.  Consulte *note Contextos e métodos de
     inicialização: 2c8.

     Adicionado na versão 3.4.

 -- Função: multiprocessing.set_start_method (method, force=False)

     Define o método que deve ser usado para iniciar processos filhos.
     O argumento 'method' pode ser ‘'fork'’, ‘'spawn'’ ou
     ‘'forkserver'’.  Levanta *note RuntimeError: 195. se o método de
     inicialização já tiver sido definido e 'force' não for ‘True’.  Se
     'method' for ‘None’ e 'force' for ‘True’, o método de inicialização
     será definido como ‘None’.  Se 'method' for ‘None’ e 'force' for
     ‘False’, o contexto será definido como o contexto padrão.

     Observe que isso deve ser chamado no máximo uma vez e deve ser
     protegido dentro da cláusula ‘if __name__ == '__main__'’ do módulo
     principal.

     Veja *note Contextos e métodos de inicialização: 2c8.

     Adicionado na versão 3.4.

     Nota: *note multiprocessing: 94. não contém equivalentes a *note
     threading.active_count(): 30a, *note threading.enumerate(): 19e5,
     *note threading.settrace(): 84b, *note threading.setprofile(): 84c,
     *note threading.Timer: 1198. ou *note threading.local: 1631.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33725


File: python.info,  Node: Objetos de conexão,  Next: Primitivas de sincronização,  Prev: Diversos<4>,  Up: Referência<3>

5.18.2.13 Objetos de conexão
............................

Objetos de conexão permitem o envio e recebimento de strings e objetos
que podem ser serializados com pickle.  Eles podem ser pensados como
sockets conectados orientados a mensagens.

Objetos de conexão geralmente são criados usando *note Pipe: 3330. –
veja também *note Listeners and Clients: 3361.

 -- Classe: multiprocessing.connection.Connection

      -- Método: send (obj)

          Envia um objeto para a outra extremidade da conexão que deve
          ser lido usando *note recv(): 3363.

          O objeto deve poder ser serializado com pickle.  Serializações
          muito grandes com pickles (aproximadamente 32 MiB+, embora
          isso dependa do sistema operacional) podem levantar uma
          exceção *note ValueError: 202.

      -- Método: recv ()

          Retorna um objeto enviado a partir da outra extremidade da
          conexão usando *note send(): 3362.  Bloqueia até que haja algo
          para receber.  Levanta *note EOFError: 131c. se não houver
          mais nada para receber e a outra extremidade tenha sido
          fechada.

      -- Método: fileno ()

          Retorna o descritor de arquivo ou identificador usado pela
          conexão.

      -- Método: close ()

          Fecha a conexão.

          Isso é chamado automaticamente quando a conexão é coletada
          como lixo.

      -- Método: poll ([timeout])

          Retorna se há algum dado disponível para leitura.

          Se 'timeout' não for especificado, ele retornará
          imediatamente.  Se 'timeout' for um número, isso especificará
          o tempo máximo em segundos para bloquear.  Se 'timeout' for
          ‘None’, um tempo limite infinito será usado.

          Observe que vários objetos de conexão podem ser pesquisados ao
          mesmo tempo usando *note multiprocessing.connection.wait():
          111e.

      -- Método: send_bytes (buffer[, offset[, size]])

          Enviar dados de bytes de um *note objeto bytes ou similar:
          d4f. como uma mensagem completa.

          Se 'offset' for fornecido, os dados serão lidos daquela
          posição em 'buffer'.  Se 'size' for fornecido, essa quantidade
          de bytes será lida do buffer.  Buffers muito grandes
          (aproximadamente 32 MiB+, embora isso dependa do sistema
          operacional) podem levantar uma exceção *note ValueError: 202.

      -- Método: recv_bytes ([maxlength])

          Retorna uma mensagem completa de dados como bytes enviados a
          partir da outra extremidade da conexão como uma string.
          Bloqueia até que haja algo para receber.  Levanta *note
          EOFError: 131c. se não houver mais nada para receber e a outra
          extremidade tenha sido fechada.

          Se 'maxlength' for especificado e a mensagem for maior que
          'maxlength', *note OSError: 417. será levantada e a conexão
          não será mais legível.

          Alterado na versão 3.3: Esta função costumava levantada *note
          IOError: 108b, que agora é um apelido de *note OSError: 417.

      -- Método: recv_bytes_into (buffer[, offset])

          Lê para 'buffer' uma mensagem completa de dados como bytes
          enviados a partir da outra extremidade da conexão e retorna o
          número de bytes na mensagem.  Bloqueia até que haja algo para
          receber.  Levanta *note EOFError: 131c. se não houver mais
          nada para receber e a outra extremidade tenha sido fechada.

          'buffer' deve ser um *note objeto bytes ou similar: d4f.
          gravável.  Se 'offset' for fornecido, a mensagem será escrita
          no buffer a partir dessa posição.  A posição deve ser um
          inteiro não negativo menor que o comprimento de 'buffer' (em
          bytes).

          Se o buffer for muito curto, uma exceção ‘BufferTooShort’ será
          levantada e a mensagem completa estará disponível como
          ‘e.args[0]’, onde ‘e’ é a instância da exceção.

     Alterado na versão 3.3: Os próprios objetos de conexão agora podem
     ser transferidos entre processos usando *note Connection.send():
     3362. e *note Connection.recv(): 3363.

     Objetos de conexão agora também oferecem suporte ao protocolo de
     gerenciamento de contexto — veja *note Tipos de Gerenciador de
     Contexto: 214e.  *note __enter__(): 23dc. retorna o objeto de
     conexão, e *note __exit__(): 23dd. chama *note close(): 3365.

Por exemplo:

     >>> from multiprocessing import Pipe
     >>> a, b = Pipe()
     >>> a.send([1, 'hello', None])
     >>> b.recv()
     [1, 'hello', None]
     >>> b.send_bytes(b'thank you')
     >>> a.recv_bytes()
     b'thank you'
     >>> import array
     >>> arr1 = array.array('i', range(5))
     >>> arr2 = array.array('i', [0] * 10)
     >>> a.send_bytes(arr1)
     >>> count = b.recv_bytes_into(arr2)
     >>> assert count == len(arr1) * arr1.itemsize
     >>> arr2
     array('i', [0, 1, 2, 3, 4, 0, 0, 0, 0, 0])
     Aviso: O método *note Connection.recv(): 3363. deserializa com
     picke automaticamente os dados recebidos, o que pode ser um risco à
     segurança, a menos que você possa confiar no processo que enviou a
     mensagem.

     Portanto, a menos que o objeto de conexão tenha sido produzido
     usando ‘Pipe()’, você deve usar apenas os métodos *note recv():
     3363. e *note send(): 3362. após executar algum tipo de
     autenticação.  Veja *note Authentication keys: 3345.

     Aviso: Se um processo for encerrado enquanto estiver tentando ler
     ou escrever em um encadeamento, os dados no encadeamento
     provavelmente serão corrompidos, porque pode se tornar impossível
     ter certeza de onde estão os limites do encadeamento da mensagem.


File: python.info,  Node: Primitivas de sincronização,  Next: Objetos ctypes compartilhados,  Prev: Objetos de conexão,  Up: Referência<3>

5.18.2.14 Primitivas de sincronização
.....................................

Geralmente, primitivas de sincronização não são tão necessárias em um
programa multiprocesso quanto em um programa multithread.  Veja a
documentação do módulo *note threading: ed.

Observe que também é possível criar primitivas de sincronização usando
um objeto gerenciador — veja *note Gerenciadores: 334f.

 -- Classe: multiprocessing.Barrier (parties[, action[, timeout]])

     Um objeto de barreira: um clone de *note threading.Barrier: 1223.

     Instantiating this class may set the global start method.  See
     *note Global start method: 333c. for more details.

     Adicionado na versão 3.3.

 -- Classe: multiprocessing.BoundedSemaphore ([value])

     Um objeto semáforo delimitado: um análogo próximo de *note
     threading.BoundedSemaphore: 1196.

     Instantiating this class may set the global start method.  See
     *note Global start method: 333c. for more details.

     Existe uma única diferença em relação ao seu análogo próximo: o
     primeiro argumento do método ‘acquire’ é chamado 'block', como é
     consistente com *note Lock.acquire(): 336c.

          Nota: No macOS, isso é indistinguível de *note Semaphore:
          3336. porque ‘sem_getvalue()’ não está implementado nessa
          plataforma.

 -- Classe: multiprocessing.Condition ([lock])

     Uma variável de condição: um apelido para *note
     threading.Condition: 1194.

     Se 'lock' for especificado, ele deverá ser um objeto *note Lock:
     1683. ou *note RLock: 1684. de *note multiprocessing: 94.

     Instantiating this class may set the global start method.  See
     *note Global start method: 333c. for more details.

     Alterado na versão 3.3: O método *note wait_for(): 330e. foi
     adicionado.

 -- Classe: multiprocessing.Event

     Um clone de *note threading.Event: 1197.

     Instantiating this class may set the global start method.  See
     *note Global start method: 333c. for more details.

 -- Classe: multiprocessing.Lock

     Um objeto de trava não recursivo: um análogo próximo de *note
     threading.Lock: 176d.  Uma vez que um processo ou thread tenha
     adquirido um trava, tentativas subsequentes de adquiri-la de
     qualquer processo ou thread bloquearão até que ele seja liberada;
     qualquer processo ou thread pode liberá-la.  Os conceitos e
     comportamentos de *note threading.Lock: 176d. conforme se aplica a
     threads são replicados aqui em *note multiprocessing.Lock: 1683.
     conforme se aplica a processos ou threads, exceto conforme
     observado.

     Observe que *note Lock: 1683. é na verdade uma função de fábrica
     que retorna uma instância de ‘multiprocessing.synchronize.Lock’
     inicializada com um contexto padrão.

     Instantiating this class may set the global start method.  See
     *note Global start method: 333c. for more details.

     *note Lock: 1683. oferece suporte ao protocolo *note gerenciador de
     contexto: 5d4. e, portanto, pode ser usado em instruções *note
     with: 5d2.

      -- Método: acquire (block=True, timeout=None)

          Adquire uma trava, bloqueante ou não.

          Com o argumento 'block' definido como ‘True’ (o padrão), a
          chamada do método bloqueará até que a trava esteja em um
          estado destravado, então o definirá como travada e retornará
          ‘True’.  Observe que o nome deste primeiro argumento difere
          daquele em *note threading.Lock.acquire(): 698.

          Com o argumento 'block' definido como ‘False’, a chamada do
          método não bloqueia.  Se a trava estiver atualmente em um
          estado travado, retorna ‘False’; caso contrário, defina a
          trava para um estado travado e retorna ‘True’.

          Quando invocado com um valor positivo de ponto flutuante para
          'timeout', bloqueie por no máximo o número de segundos
          especificado por 'timeout' enquanto a trava não puder ser
          adquirida.  Invocações com um valor negativo para 'timeout'
          são equivalentes a um 'timeout' de zero.  Invocações com um
          valor 'timeout' de ‘None’ (o padrão) definem o período de
          tempo limite como infinito.  Observe que o tratamento de
          valores negativos ou ‘None’ para 'timeout' difere do
          comportamento implementado em *note threading.Lock.acquire():
          698.  O argumento 'timeout' não tem implicações práticas se o
          argumento 'block' for definido como ‘False’ e, portanto, for
          ignorado.  Retorna ‘True’ se a trava tiver sido adquirida ou
          ‘False’ se o período de tempo limite tiver decorrido.

      -- Método: release ()

          Libera uma trava.  Isso pode ser chamado de qualquer processo
          ou thread, não apenas do processo ou thread que originalmente
          adquiriu a trava.

          O comportamento é o mesmo de *note threading.Lock.release():
          1305, exceto que quando invocado em uma trava desatravada, uma
          *note ValueError: 202. é levantada.

 -- Classe: multiprocessing.RLock

     Um objeto de trava recursiva: um análogo próximo de *note
     threading.RLock: 2de.  Uma trava recursiva deve ser liberada pelo
     processo ou thread que o adquiriu.  Uma vez que um processo ou
     thread tenha adquirido uma trava recursiva, o mesmo processo ou
     thread pode adquiri-la novamente sem trava; esse processo ou thread
     deve liberá-la uma vez para cada vez que ela foi adquirida.

     Observe que *note RLock: 1684. é na verdade uma função de fábrica
     que retorna uma instância de ‘multiprocessing.synchronize.RLock’
     inicializada com um contexto padrão.

     Instantiating this class may set the global start method.  See
     *note Global start method: 333c. for more details.

     *note RLock: 1684. oferece suporte ao protocolo *note gerenciador
     de contexto: 5d4. e, portanto, pode ser usado em instruções *note
     with: 5d2.

      -- Método: acquire (block=True, timeout=None)

          Adquire uma trava, bloqueante ou não.

          Quando invocado com o argumento 'block' definido como ‘True’,
          bloqueia até que a trava esteja em um estado destravado (não
          pertencente a nenhum processo ou thread), a menos que a trava
          já seja de propriedade do processo ou thread atual.  O
          processo ou thread atual então assume a propriedade da trava
          (se ainda não tiver propriedade) e o nível de recursão dentro
          de incrementos por um da trava, resultando em um valor de
          retorno de ‘True’.  Observe que há várias diferenças no
          comportamento deste primeiro argumento em comparação com a
          implementação de *note threading.RLock.acquire(): eaa,
          começando pelo nome do argumento em si.

          Quando invocado com o argumento 'block' definido como ‘False’,
          não bloqueie.  Se a trava já tiver sido adquirida (e,
          portanto, for de propriedade) por outro processo ou thread, o
          processo ou thread atual não assume a propriedade e o nível de
          recursão dentro da trava não é alterada, resultando em um
          valor de retorno de ‘False’.  Se a trava estiver em um estado
          destravado, o processo ou thread atual assume a propriedade e
          o nível de recursão é incrementado, resultando em um valor de
          retorno de ‘True’.

          O uso e os comportamentos do argumento 'timeout' são os mesmos
          que em *note Lock.acquire(): 336c.  Observe que alguns desses
          comportamentos de 'timeout' diferem dos comportamentos
          implementados em *note threading.RLock.acquire(): eaa.

      -- Método: release ()

          Libera uma trava, decrementando o nível de recursão.  Se após
          o decremento o nível de recursão for zero, redefine a trava
          para destravada (não pertencente a nenhum processo ou thread)
          e se quaisquer outros processos ou threads estiverem
          bloqueados esperando a trava ser destravada, permita que
          exatamente um deles prossiga.  Se após o decremento o nível de
          recursão ainda for diferente de zero, o trava permanece
          travada e pertencente ao processo ou thread de chamada.

          Somente chame esse método quando o processo ou thread de
          chamada for proprietária da trava.  Uma *note AssertionError:
          6a9. é levantada se esse método for chamado por um processo ou
          thread diferente do proprietário ou se a trava estiver em um
          estado destravado (sem proprietário).  Observe que o tipo de
          exceção levantada nessa situação difere do comportamento
          implementado em *note threading.RLock.release(): 3309.

 -- Classe: multiprocessing.Semaphore ([value])

     Um objeto semáforo: um análogo próximo de *note
     threading.Semaphore: 1195.

     Instantiating this class may set the global start method.  See
     *note Global start method: 333c. for more details.

     Existe uma única diferença em relação ao seu análogo próximo: o
     primeiro argumento do método ‘acquire’ é chamado 'block', como é
     consistente com *note Lock.acquire(): 336c.

     Nota: No macOS, não há suporte a ‘sem_timedwait’, então chamar
     ‘acquire()’ com um tempo limite emulará o comportamento dessa
     função usando um laço de suspensão.

     Nota: Algumas das funcionalidades deste pacote exibem uma
     implementação de semáforo compartilhado funcional no sistema
     operacional host.  Sem uma, o módulo ‘multiprocessing.synchronize’
     será desabilitado e as tentativas de importação dele resultarão em
     um *note ImportError: 419.  Veja bpo-3770(1) para informações
     adicionais.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=3770


File: python.info,  Node: Objetos ctypes compartilhados,  Next: Gerenciadores,  Prev: Primitivas de sincronização,  Up: Referência<3>

5.18.2.15 Objetos ‘ctypes’ compartilhados
.........................................

É possível criar objetos compartilhados usando memória compartilhada que
pode ser herdada por processos filhos.

 -- Função: multiprocessing.Value (typecode_or_type, *args, lock=True)

     Retorna um objeto *note ctypes: 2a. alocado da memória
     compartilhada.  Por padrão, o valor de retorno é, na verdade, um
     invólucro sincronizado para o objeto.  O objeto em si pode ser
     acessado por meio do atributo 'value' de um *note Value: 3333.

     'typecode_or_type' determina o tipo do objeto retornado: é um tipo
     ctypes ou um typecode de um caractere do tipo usado pelo módulo
     *note array: 7.  '*args' é passado para o construtor para o tipo.

     Se 'lock' for ‘True’ (o padrão), então um novo objeto de trava
     recursiva é criado para sincronizar o acesso ao valor.  Se 'lock'
     for um objeto *note Lock: 1683. ou *note RLock: 1684, então ele
     será usado para sincronizar o acesso ao valor.  Se 'lock' for
     ‘False’, então o acesso ao objeto retornado não será protegido
     automaticamente por uma trava, então ele não será necessariamente
     “seguro para processo”.

     Operações como ‘+=’ que envolvem uma leitura e escrita não são
     atômicas.  Então se, por exemplo, você quiser incrementar
     atomicamente um valor compartilhado, não é suficiente apenas fazer

          counter.value += 1

     Supondo que a trava associada seja recursiva (o que é por padrão),
     você pode fazer

          with counter.get_lock():
              counter.value += 1

     Observe que 'lock' é um argumento somente-nomeado.

 -- Função: multiprocessing.Array (typecode_or_type,
          size_or_initializer, *, lock=True)

     Retorna um vetor de ctypes alocado da memória compartilhada.  Por
     padrão, o valor de retorno é, na verdade, um invólucro sincronizado
     para o vetor.

     'typecode_or_type' determines the type of the elements of the
     returned array: it is either a *note ctypes type: 2fbe. or a one
     character typecode of the kind used by the *note array: 7. module
     with the exception of ‘'w'’, which is not supported.  In addition,
     the ‘'c'’ typecode is an alias for *note ctypes.c_char: 2fc1.  If
     'size_or_initializer' is an integer, then it determines the length
     of the array, and the array will be initially zeroed.  Otherwise,
     'size_or_initializer' is a sequence which is used to initialize the
     array and whose length determines the length of the array.

     Se 'lock' for ‘True’ (o padrão), então um novo objeto de trava é
     criado para sincronizar o acesso ao valor.  Se 'lock' for um objeto
     *note Lock: 1683. ou *note RLock: 1684, então ele será usado para
     sincronizar o acesso ao valor.  Se 'lock' for ‘False’, então o
     acesso ao objeto retornado não será protegido automaticamente por
     uma trava, então ele não será necessariamente “seguro para
     processo”.

     Observe que 'lock' é um argumento somente-nomeado.

     Observe que um vetor de *note ctypes.c_char: 2fc1. tem atributos
     'value' e 'raw' que permitem usá-lo para armazenar e recuperar
     strings.

* Menu:

* O módulo multiprocessing.sharedctypes: O módulo multiprocessing sharedctypes.


File: python.info,  Node: O módulo multiprocessing sharedctypes,  Up: Objetos ctypes compartilhados

5.18.2.16 O módulo ‘multiprocessing.sharedctypes’
.................................................

O módulo *note multiprocessing.sharedctypes: 9a. fornece funções para
alocar objetos *note ctypes: 2a. da memória compartilhada que podem ser
herdados por processos filhos.

     Nota: Embora seja possível armazenar um ponteiro na memória
     compartilhada, lembre-se de que isso se referirá a um local no
     espaço de endereço de um processo específico.  No entanto, é bem
     provável que o ponteiro seja inválido no contexto de um segundo
     processo e tentar desreferenciar o ponteiro do segundo processo
     pode causar um travamento.

 -- Função: multiprocessing.sharedctypes.RawArray (typecode_or_type,
          size_or_initializer)

     Retorna um vetor de ctypes alocado da memória compartilhada.

     'typecode_or_type' determina o tipo dos elementos do vetor
     retornado: é um tipo ctypes ou um typecode de um caractere do tipo
     usado pelo módulo *note array: 7.  Se 'size_or_initializer' for um
     inteiro, então ele determina o comprimento do vetor, e o vetor será
     inicialmente zerado.  Caso contrário, 'size_or_initializer' é uma
     sequência que é usada para inicializar o vetor e cujo comprimento
     determina o comprimento do vetor.

     Observe que definir e obter um elemento é potencialmente não
     atômico – use *note Array(): 3373. para garantir que o acesso seja
     sincronizado automaticamente usando uma trava.

 -- Função: multiprocessing.sharedctypes.RawValue (typecode_or_type,
          *args)

     Retorna um objeto ctypes alocado da memória compartilhada.

     'typecode_or_type' determina o tipo do objeto retornado: é um tipo
     ctypes ou um typecode de um caractere do tipo usado pelo módulo
     *note array: 7.  '*args' é passado para o construtor para o tipo.

     Observe que definir e obter o valor é potencialmente não atômico –
     use *note Value(): 3375. para garantir que o acesso seja
     sincronizado automaticamente usando uma trava.

     Observe que um vetor de *note ctypes.c_char: 2fc1. tem atributos
     ‘value’ e ‘raw’ que permitem usá-la para armazenar e recuperar
     strings – veja a documentação de *note ctypes: 2a.

 -- Função: multiprocessing.sharedctypes.Array (typecode_or_type,
          size_or_initializer, *, lock=True, ctx=None)

     O mesmo que *note RawArray(): 3372, exceto que dependendo do valor
     de 'lock', um invólucro de sincronização seguro para processo pode
     ser retornado em vez de um vetor de ctypes brutos.

     Se 'lock' for ‘True’ (o padrão), então um novo objeto de trava é
     criado para sincronizar o acesso ao valor.  Se 'lock' for um objeto
     *note Lock: 1683. ou *note RLock: 1684, então ele será usado para
     sincronizar o acesso ao valor.  Se 'lock' for ‘False’, então o
     acesso ao objeto retornado não será protegido automaticamente por
     uma trava, então ele não será necessariamente “seguro para
     processo”.

     'ctx' is a context object, or ‘None’ (use the current context).  If
     ‘None’, calling this may set the global start method.  See *note
     Global start method: 333c. for more details.

     Note that 'lock' and 'ctx' are keyword-only parameters.

 -- Função: multiprocessing.sharedctypes.Value (typecode_or_type, *args,
          lock=True, ctx=None)

     O mesmo que *note RawValue(): 3374, exceto que dependendo do valor
     de 'lock', um invólucro de sincronização seguro para processo pode
     ser retornado em vez de um objeto ctypes brutos.

     Se 'lock' for ‘True’ (o padrão), então um novo objeto de trava é
     criado para sincronizar o acesso ao valor.  Se 'lock' for um objeto
     *note Lock: 1683. ou *note RLock: 1684, então ele será usado para
     sincronizar o acesso ao valor.  Se 'lock' for ‘False’, então o
     acesso ao objeto retornado não será protegido automaticamente por
     uma trava, então ele não será necessariamente “seguro para
     processo”.

     'ctx' is a context object, or ‘None’ (use the current context).  If
     ‘None’, calling this may set the global start method.  See *note
     Global start method: 333c. for more details.

     Note that 'lock' and 'ctx' are keyword-only parameters.

 -- Função: multiprocessing.sharedctypes.copy (obj)

     Retorna um objeto ctypes alocado da memória compartilhada que é uma
     cópia do objeto ctypes 'obj'.

 -- Função: multiprocessing.sharedctypes.synchronized (obj, lock=None,
          ctx=None)

     Retorna um objeto invólucro seguro para o processo para um objeto
     ctypes que usa 'lock' para sincronizar o acesso.  Se 'lock' for
     ‘None’ (o padrão), então um objeto *note multiprocessing.RLock:
     1684. é criado automaticamente.

     'ctx' is a context object, or ‘None’ (use the current context).  If
     ‘None’, calling this may set the global start method.  See *note
     Global start method: 333c. for more details.

     A synchronized wrapper will have two methods in addition to those
     of the object it wraps: ‘get_obj()’ returns the wrapped object and
     ‘get_lock()’ returns the lock object used for synchronization.

     Note that accessing the ctypes object through the wrapper can be a
     lot slower than accessing the raw ctypes object.

     Alterado na versão 3.5: Synchronized objects support the *note
     context manager: 5d4. protocol.

The table below compares the syntax for creating shared ctypes objects
from shared memory with the normal ctypes syntax.  (In the table
‘MyStruct’ is some subclass of *note ctypes.Structure: 1d4.)

ctypes                   sharedctypes using type        sharedctypes using typecode
                                                        
----------------------------------------------------------------------------------------
                                                        
c_double(2.4)            RawValue(c_double, 2.4)        RawValue(‘d’, 2.4)
                                                        
                                                        
MyStruct(4, 6)           RawValue(MyStruct, 4, 6)
                         
                                                        
(c_short * 7)()          RawArray(c_short, 7)           RawArray(‘h’, 7)
                                                        
                                                        
(c_int * 3)(9, 2, 8)     RawArray(c_int, (9, 2, 8))     RawArray(‘i’, (9, 2, 8))
                                                        

Below is an example where a number of ctypes objects are modified by a
child process:

     from multiprocessing import Process, Lock
     from multiprocessing.sharedctypes import Value, Array
     from ctypes import Structure, c_double

     class Point(Structure):
         _fields_ = [('x', c_double), ('y', c_double)]

     def modify(n, x, s, A):
         n.value **= 2
         x.value **= 2
         s.value = s.value.upper()
         for a in A:
             a.x **= 2
             a.y **= 2

     if __name__ == '__main__':
         lock = Lock()

         n = Value('i', 7)
         x = Value(c_double, 1.0/3.0, lock=False)
         s = Array('c', b'hello world', lock=lock)
         A = Array(Point, [(1.875,-6.25), (-5.75,2.0), (2.375,9.5)], lock=lock)

         p = Process(target=modify, args=(n, x, s, A))
         p.start()
         p.join()

         print(n.value)
         print(x.value)
         print(s.value)
         print([(a.x, a.y) for a in A])

The results printed are

     49
     0.1111111111111111
     HELLO WORLD
     [(3.515625, 39.0625), (33.0625, 4.0), (5.640625, 90.25)]


File: python.info,  Node: Gerenciadores,  Next: Objetos proxies,  Prev: Objetos ctypes compartilhados,  Up: Referência<3>

5.18.2.17 Gerenciadores
.......................

Managers provide a way to create data which can be shared between
different processes, including sharing over a network between processes
running on different machines.  A manager object controls a server
process which manages 'shared objects'.  Other processes can access the
shared objects by using proxies.

 -- Função: multiprocessing.Manager ()

     Retorna um objeto *note SyncManager: 3378. inicializado que pode
     ser usado para compartilhar objetos entre processos.  O objeto
     gerenciador retornado corresponde a um processo filho gerado e tem
     métodos que criarão objetos compartilhados e retornarão proxies
     correspondentes.

Manager processes will be shutdown as soon as they are garbage collected
or their parent process exits.  The manager classes are defined in the
*note multiprocessing.managers: 97. module:

 -- Classe: multiprocessing.managers.BaseManager (address=None,
          authkey=None, serializer='pickle', ctx=None, *,
          shutdown_timeout=1.0)

     Criando um objeto BaseManager.

     Once created one should call *note start(): 337a. or
     ‘get_server().serve_forever()’ to ensure that the manager object
     refers to a started manager process.

     'address' is the address on which the manager process listens for
     new connections.  If 'address' is ‘None’ then an arbitrary one is
     chosen.

     'authkey' is the authentication key which will be used to check the
     validity of incoming connections to the server process.  If
     'authkey' is ‘None’ then ‘current_process().authkey’ is used.
     Otherwise 'authkey' is used and it must be a byte string.

     'serializer' must be ‘'pickle'’ (use *note pickle: a6.
     serialization) or ‘'xmlrpclib'’ (use *note xmlrpc.client: 12e.
     serialization).

     'ctx' is a context object, or ‘None’ (use the current context).  If
     ‘None’, calling this may set the global start method.  See *note
     Global start method: 333c. for more details.

     'shutdown_timeout' is a timeout in seconds used to wait until the
     process used by the manager completes in the *note shutdown():
     337b. method.  If the shutdown times out, the process is
     terminated.  If terminating the process also times out, the process
     is killed.

     Alterado na versão 3.11: Added the 'shutdown_timeout' parameter.

      -- Método: start ([initializer[, initargs]])

          Start a subprocess to start the manager.  If 'initializer' is
          not ‘None’ then the subprocess will call
          ‘initializer(*initargs)’ when it starts.

      -- Método: get_server ()

          Returns a ‘Server’ object which represents the actual server
          under the control of the Manager.  The ‘Server’ object
          supports the ‘serve_forever()’ method:

               >>> from multiprocessing.managers import BaseManager
               >>> manager = BaseManager(address=('', 50000), authkey=b'abc')
               >>> server = manager.get_server()
               >>> server.serve_forever()

          ‘Server’ additionally has an *note address: 337d. attribute.

      -- Método: connect ()

          Connect a local manager object to a remote manager process:

               >>> from multiprocessing.managers import BaseManager
               >>> m = BaseManager(address=('127.0.0.1', 50000), authkey=b'abc')
               >>> m.connect()

      -- Método: shutdown ()

          Stop the process used by the manager.  This is only available
          if *note start(): 337a. has been used to start the server
          process.

          This can be called multiple times.

      -- Método: register (typeid[, callable[, proxytype[, exposed[,
               method_to_typeid[, create_method]]]]])

          A classmethod which can be used for registering a type or
          callable with the manager class.

          'typeid' is a “type identifier” which is used to identify a
          particular type of shared object.  This must be a string.

          'callable' is a callable used for creating objects for this
          type identifier.  If a manager instance will be connected to
          the server using the *note connect(): 337e. method, or if the
          'create_method' argument is ‘False’ then this can be left as
          ‘None’.

          'proxytype' is a subclass of *note BaseProxy: 3380. which is
          used to create proxies for shared objects with this 'typeid'.
          If ‘None’ then a proxy class is created automatically.

          'exposed' is used to specify a sequence of method names which
          proxies for this typeid should be allowed to access using
          *note BaseProxy._callmethod(): 3381.  (If 'exposed' is ‘None’
          then ‘proxytype._exposed_’ is used instead if it exists.)  In
          the case where no exposed list is specified, all “public
          methods” of the shared object will be accessible.  (Here a
          “public method” means any attribute which has a *note
          __call__(): 558. method and whose name does not begin with
          ‘'_'’.)

          'method_to_typeid' is a mapping used to specify the return
          type of those exposed methods which should return a proxy.  It
          maps method names to typeid strings.  (If 'method_to_typeid'
          is ‘None’ then ‘proxytype._method_to_typeid_’ is used instead
          if it exists.)  If a method’s name is not a key of this
          mapping or if the mapping is ‘None’ then the object returned
          by the method will be copied by value.

          'create_method' determines whether a method should be created
          with name 'typeid' which can be used to tell the server
          process to create a new shared object and return a proxy for
          it.  By default it is ‘True’.

     *note BaseManager: 3379. instances also have one read-only
     property:

      -- Atributo: address

          The address used by the manager.

     Alterado na versão 3.3: Manager objects support the context
     management protocol – see *note Tipos de Gerenciador de Contexto:
     214e.  *note __enter__(): 23dc. starts the server process (if it
     has not already started) and then returns the manager object.
     *note __exit__(): 23dd. calls *note shutdown(): 337b.

     In previous versions *note __enter__(): 23dc. did not start the
     manager’s server process if it was not already started.

 -- Classe: multiprocessing.managers.SyncManager

     A subclass of *note BaseManager: 3379. which can be used for the
     synchronization of processes.  Objects of this type are returned by
     *note multiprocessing.Manager(): cda.

     Its methods create and return *note Objetos proxies: cd9. for a
     number of commonly used data types to be synchronized across
     processes.  This notably includes shared lists and dictionaries.

      -- Método: Barrier (parties[, action[, timeout]])

          Create a shared *note threading.Barrier: 1223. object and
          return a proxy for it.

          Adicionado na versão 3.3.

      -- Método: BoundedSemaphore ([value])

          Create a shared *note threading.BoundedSemaphore: 1196. object
          and return a proxy for it.

      -- Método: Condition ([lock])

          Create a shared *note threading.Condition: 1194. object and
          return a proxy for it.

          If 'lock' is supplied then it should be a proxy for a *note
          threading.Lock: 176d. or *note threading.RLock: 2de. object.

          Alterado na versão 3.3: O método *note wait_for(): 330e. foi
          adicionado.

      -- Método: Event ()

          Create a shared *note threading.Event: 1197. object and return
          a proxy for it.

      -- Método: Lock ()

          Create a shared *note threading.Lock: 176d. object and return
          a proxy for it.

      -- Método: Namespace ()

          Create a shared *note Namespace: 3335. object and return a
          proxy for it.

      -- Método: Queue ([maxsize])

          Create a shared *note queue.Queue: 13db. object and return a
          proxy for it.

      -- Método: RLock ()

          Create a shared *note threading.RLock: 2de. object and return
          a proxy for it.

      -- Método: Semaphore ([value])

          Create a shared *note threading.Semaphore: 1195. object and
          return a proxy for it.

      -- Método: Array (typecode, sequence)

          Create an array and return a proxy for it.

      -- Método: Value (typecode, value)

          Create an object with a writable ‘value’ attribute and return
          a proxy for it.

      -- Método: dict ()

      -- Método: dict (mapping)

      -- Método: dict (sequence)

          Create a shared *note dict: 256. object and return a proxy for
          it.

      -- Método: list ()

      -- Método: list (sequence)

          Create a shared *note list: 611. object and return a proxy for
          it.

     Alterado na versão 3.6: Objetos compartilhados podem ser aninhados.
     Por exemplo, em um objeto contêiner compartilhado, como uma lista
     compartilhada, é possível conter outros objeto compartilhados que
     serão gerenciados e sincronizados pelo *note SyncManager: 3378.

 -- Classe: multiprocessing.managers.Namespace

     A type that can register with *note SyncManager: 3378.

     A namespace object has no public methods, but does have writable
     attributes.  Its representation shows the values of its attributes.

     However, when using a proxy for a namespace object, an attribute
     beginning with ‘'_'’ will be an attribute of the proxy and not an
     attribute of the referent:

          >>> mp_context = multiprocessing.get_context('spawn')
          >>> manager = mp_context.Manager()
          >>> Global = manager.Namespace()
          >>> Global.x = 10
          >>> Global.y = 'hello'
          >>> Global._z = 12.3    # this is an attribute of the proxy
          >>> print(Global)
          Namespace(x=10, y='hello')

* Menu:

* Customized managers::
* Using a remote manager::


File: python.info,  Node: Customized managers,  Next: Using a remote manager,  Up: Gerenciadores

5.18.2.18 Customized managers
.............................

To create one’s own manager, one creates a subclass of *note
BaseManager: 3379. and uses the *note register(): 337f. classmethod to
register new types or callables with the manager class.  For example:

     from multiprocessing.managers import BaseManager

     class MathsClass:
         def add(self, x, y):
             return x + y
         def mul(self, x, y):
             return x * y

     class MyManager(BaseManager):
         pass

     MyManager.register('Maths', MathsClass)

     if __name__ == '__main__':
         with MyManager() as manager:
             maths = manager.Maths()
             print(maths.add(4, 3))         # prints 7
             print(maths.mul(7, 8))         # prints 56


File: python.info,  Node: Using a remote manager,  Prev: Customized managers,  Up: Gerenciadores

5.18.2.19 Using a remote manager
................................

It is possible to run a manager server on one machine and have clients
use it from other machines (assuming that the firewalls involved allow
it).

Running the following commands creates a server for a single shared
queue which remote clients can access:

     >>> from multiprocessing.managers import BaseManager
     >>> from queue import Queue
     >>> queue = Queue()
     >>> class QueueManager(BaseManager): pass
     >>> QueueManager.register('get_queue', callable=lambda:queue)
     >>> m = QueueManager(address=('', 50000), authkey=b'abracadabra')
     >>> s = m.get_server()
     >>> s.serve_forever()

One client can access the server as follows:

     >>> from multiprocessing.managers import BaseManager
     >>> class QueueManager(BaseManager): pass
     >>> QueueManager.register('get_queue')
     >>> m = QueueManager(address=('foo.bar.org', 50000), authkey=b'abracadabra')
     >>> m.connect()
     >>> queue = m.get_queue()
     >>> queue.put('hello')

Another client can also use it:

     >>> from multiprocessing.managers import BaseManager
     >>> class QueueManager(BaseManager): pass
     >>> QueueManager.register('get_queue')
     >>> m = QueueManager(address=('foo.bar.org', 50000), authkey=b'abracadabra')
     >>> m.connect()
     >>> queue = m.get_queue()
     >>> queue.get()
     'hello'

Local processes can also access that queue, using the code from above on
the client to access it remotely:

     >>> from multiprocessing import Process, Queue
     >>> from multiprocessing.managers import BaseManager
     >>> class Worker(Process):
     ...     def __init__(self, q):
     ...         self.q = q
     ...         super().__init__()
     ...     def run(self):
     ...         self.q.put('local hello')
     ...
     >>> queue = Queue()
     >>> w = Worker(queue)
     >>> w.start()
     >>> class QueueManager(BaseManager): pass
     ...
     >>> QueueManager.register('get_queue', callable=lambda: queue)
     >>> m = QueueManager(address=('', 50000), authkey=b'abracadabra')
     >>> s = m.get_server()
     >>> s.serve_forever()


File: python.info,  Node: Objetos proxies,  Next: Process Pools,  Prev: Gerenciadores,  Up: Referência<3>

5.18.2.20 Objetos proxies
.........................

Um proxy é um objeto que 'refere-se' a um objeto compartilhado que
reside (presumivelmente) em um processo diferente.  Dizemos que o objeto
compartilhado é o 'referente' do proxy.  Vários objetos proxies podem
ter o mesmo referente.

Um proxy objeto tem métodos que invocam métodos correspondes de seu
referente (embora nem todo método do referente esteja necessariamente
disponível por meio do proxy).  Dessa forma, um proxy pode ser usado da
mesma forma que seu referente:

     >>> mp_context = multiprocessing.get_context('spawn')
     >>> manager = mp_context.Manager()
     >>> l = manager.list([i*i for i in range(10)])
     >>> print(l)
     [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
     >>> print(repr(l))
     <ListProxy object, typeid 'list' at 0x...>
     >>> l[4]
     16
     >>> l[2:5]
     [4, 9, 16]

Observe que, ao aplicar *note str(): 44c. a um proxy, o retorno
representará o referente, enquanto que ao aplicar o *note repr(): 800, o
retorno representará o proxy.

Um aspecto importante dos objetos proxies é o fato de que eles podem ser
serializados com pickle, portanto podem ser transferidos entre
processos.  Dessa forma, um referente pode conter *note Objetos proxies:
cd9.  Isso permite o aninhamento dessas listas e dicionários gerenciados
e outros *note Objetos proxies: cd9.:

     >>> a = manager.list()
     >>> b = manager.list()
     >>> a.append(b)         # referente de a agora contém referente de b
     >>> print(a, b)
     [<ListProxy object, typeid 'list' at ...>] []
     >>> b.append('hello')
     >>> print(a[0], b)
     ['hello'] ['hello']

Da mesma forma, os proxies de dicionários e listas podem ser aninhados
um dentro do outro:

     >>> l_outer = manager.list([ manager.dict() for i in range(2) ])
     >>> d_first_inner = l_outer[0]
     >>> d_first_inner['a'] = 1
     >>> d_first_inner['b'] = 2
     >>> l_outer[1]['c'] = 3
     >>> l_outer[1]['z'] = 26
     >>> print(l_outer[0])
     {'a': 1, 'b': 2}
     >>> print(l_outer[1])
     {'c': 3, 'z': 26}

Se objetos padrões (não-proxy) de *note list: 611. ou *note dict: 256.
estiverem contidos em um referente, as modificações nesses mutáveis não
serão propagadas pelo gerente porque o proxy não tem como saber quando
os valores contidos nele são modificados.  No entanto, o armazenamento
de um valor em um proxy contêiner (que aciona um ‘__setitem__’ no objeto
proxy) se propaga pelo gerenciador e, portanto, para modificar
efetivamente esse item, é possível reatribuir o valor modificado ao
proxy contêiner:

     # cria um proxy para uma lista e adicionar um objeto mutável (um dicionário)
     lproxy = manager.list()
     lproxy.append({})
     # agora modifica o dicionário
     d = lproxy[0]
     d['a'] = 1
     d['b'] = 2
     # neste ponto, as mudanças em d não estão ainda sincronizadas, mas
     # atualizando o dicionário, o proxy é notificado da mudança
     lproxy[0] = d

Essa abordagem talvez seja menos conveniente do que usar *note Objetos
proxies: cd9. aninhados para a maioria dos casos de uso, mas também
demonstra um nível de controle sobre a sincronização.

     Nota: Os tipos de proxies em *note multiprocessing: 94. não fazem
     nada com as comparações de valor.  Portanto, por exemplo, temos:

          >>> manager.list([1,2,3]) == [1,2,3]
          False

     Em vez disso, deve-se usar uma cópia do referente ao fazer
     comparações.

 -- Classe: multiprocessing.managers.BaseProxy

     Proxy objects are instances of subclasses of *note BaseProxy: 3380.

      -- Método: _callmethod (methodname[, args[, kwds]])

          Call and return the result of a method of the proxy’s
          referent.

          If ‘proxy’ is a proxy whose referent is ‘obj’ then the
          expression

               proxy._callmethod(methodname, args, kwds)

          will evaluate the expression

               getattr(obj, methodname)(*args, **kwds)

          in the manager’s process.

          The returned value will be a copy of the result of the call or
          a proxy to a new shared object – see documentation for the
          'method_to_typeid' argument of *note BaseManager.register():
          337f.

          If an exception is raised by the call, then is re-raised by
          *note _callmethod(): 3381.  If some other exception is raised
          in the manager’s process then this is converted into a
          ‘RemoteError’ exception and is raised by *note _callmethod():
          3381.

          Note in particular that an exception will be raised if
          'methodname' has not been 'exposed'.

          An example of the usage of *note _callmethod(): 3381.:

               >>> l = manager.list(range(10))
               >>> l._callmethod('__len__')
               10
               >>> l._callmethod('__getitem__', (slice(2, 7),)) # equivalent to l[2:7]
               [2, 3, 4, 5, 6]
               >>> l._callmethod('__getitem__', (20,))          # equivalent to l[20]
               Traceback (most recent call last):
               ...
               IndexError: list index out of range

      -- Método: _getvalue ()

          Return a copy of the referent.

          If the referent is unpicklable then this will raise an
          exception.

      -- Método: __repr__ ()

          Return a representation of the proxy object.

      -- Método: __str__ ()

          Return the representation of the referent.

* Menu:

* Limpeza: Limpeza<2>.


File: python.info,  Node: Limpeza<2>,  Up: Objetos proxies

5.18.2.21 Limpeza
.................

A proxy object uses a weakref callback so that when it gets garbage
collected it deregisters itself from the manager which owns its
referent.

A shared object gets deleted from the manager process when there are no
longer any proxies referring to it.


File: python.info,  Node: Process Pools,  Next: Listeners and Clients,  Prev: Objetos proxies,  Up: Referência<3>

5.18.2.22 Process Pools
.......................

One can create a pool of processes which will carry out tasks submitted
to it with the *note Pool: f9f. class.

 -- Classe: multiprocessing.pool.Pool ([processes[, initializer[,
          initargs[, maxtasksperchild[, context]]]]])

     A process pool object which controls a pool of worker processes to
     which jobs can be submitted.  It supports asynchronous results with
     timeouts and callbacks and has a parallel map implementation.

     'processes' is the number of worker processes to use.  If
     'processes' is ‘None’ then the number returned by *note
     os.process_cpu_count(): 1c4. is used.

     If 'initializer' is not ‘None’ then each worker process will call
     ‘initializer(*initargs)’ when it starts.

     'maxtasksperchild' is the number of tasks a worker process can
     complete before it will exit and be replaced with a fresh worker
     process, to enable unused resources to be freed.  The default
     'maxtasksperchild' is ‘None’, which means worker processes will
     live as long as the pool.

     'context' can be used to specify the context used for starting the
     worker processes.  Usually a pool is created using the function
     ‘multiprocessing.Pool()’ or the *note Pool(): f9f. method of a
     context object.  In both cases 'context' is set appropriately.  If
     ‘None’, calling this function will have the side effect of setting
     the current global start method if it has not been set already.
     See the ‘get_context()’ function.

     Note that the methods of the pool object should only be called by
     the process which created the pool.

          Aviso: *note multiprocessing.pool: 98. objects have internal
          resources that need to be properly managed (like any other
          resource) by using the pool as a context manager or by calling
          *note close(): 3393. and *note terminate(): 3394. manually.
          Failure to do this can lead to the process hanging on
          finalization.

          Note that it is 'not correct' to rely on the garbage collector
          to destroy the pool as CPython does not assure that the
          finalizer of the pool will be called (see *note
          object.__del__(): 1033. for more information).

     Alterado na versão 3.2: Added the 'maxtasksperchild' parameter.

     Alterado na versão 3.4: Adicionado o parâmetro 'context'.

     Alterado na versão 3.13: 'processes' uses *note
     os.process_cpu_count(): 1c4. by default, instead of *note
     os.cpu_count(): 1c5.

          Nota: Worker processes within a *note Pool: f9f. typically
          live for the complete duration of the Pool’s work queue.  A
          frequent pattern found in other systems (such as Apache,
          mod_wsgi, etc) to free resources held by workers is to allow a
          worker within a pool to complete only a set amount of work
          before being exiting, being cleaned up and a new process
          spawned to replace the old one.  The 'maxtasksperchild'
          argument to the *note Pool: f9f. exposes this ability to the
          end user.

      -- Método: apply (func[, args[, kwds]])

          Call 'func' with arguments 'args' and keyword arguments
          'kwds'.  It blocks until the result is ready.  Given this
          blocks, *note apply_async(): 13dd. is better suited for
          performing work in parallel.  Additionally, 'func' is only
          executed in one of the workers of the pool.

      -- Método: apply_async (func[, args[, kwds[, callback[,
               error_callback]]]])

          A variant of the *note apply(): 13dc. method which returns a
          *note AsyncResult: 3395. object.

          If 'callback' is specified then it should be a callable which
          accepts a single argument.  When the result becomes ready
          'callback' is applied to it, that is unless the call failed,
          in which case the 'error_callback' is applied instead.

          If 'error_callback' is specified then it should be a callable
          which accepts a single argument.  If the target function
          fails, then the 'error_callback' is called with the exception
          instance.

          Callbacks should complete immediately since otherwise the
          thread which handles the results will get blocked.

      -- Método: map (func, iterable[, chunksize])

          A parallel equivalent of the *note map(): 867. built-in
          function (it supports only one 'iterable' argument though, for
          multiple iterables see *note starmap(): 1121.).  It blocks
          until the result is ready.

          This method chops the iterable into a number of chunks which
          it submits to the process pool as separate tasks.  The
          (approximate) size of these chunks can be specified by setting
          'chunksize' to a positive integer.

          Note that it may cause high memory usage for very long
          iterables.  Consider using *note imap(): 3396. or *note
          imap_unordered(): 3397. with explicit 'chunksize' option for
          better efficiency.

      -- Método: map_async (func, iterable[, chunksize[, callback[,
               error_callback]]])

          A variant of the *note map(): 1124. method which returns a
          *note AsyncResult: 3395. object.

          If 'callback' is specified then it should be a callable which
          accepts a single argument.  When the result becomes ready
          'callback' is applied to it, that is unless the call failed,
          in which case the 'error_callback' is applied instead.

          If 'error_callback' is specified then it should be a callable
          which accepts a single argument.  If the target function
          fails, then the 'error_callback' is called with the exception
          instance.

          Callbacks should complete immediately since otherwise the
          thread which handles the results will get blocked.

      -- Método: imap (func, iterable[, chunksize])

          A lazier version of *note map(): 1124.

          The 'chunksize' argument is the same as the one used by the
          *note map(): 1124. method.  For very long iterables using a
          large value for 'chunksize' can make the job complete 'much'
          faster than using the default value of ‘1’.

          Also if 'chunksize' is ‘1’ then the ‘next()’ method of the
          iterator returned by the *note imap(): 3396. method has an
          optional 'timeout' parameter: ‘next(timeout)’ will raise *note
          multiprocessing.TimeoutError: 3349. if the result cannot be
          returned within 'timeout' seconds.

      -- Método: imap_unordered (func, iterable[, chunksize])

          The same as *note imap(): 3396. except that the ordering of
          the results from the returned iterator should be considered
          arbitrary.  (Only when there is only one worker process is the
          order guaranteed to be “correct”.)

      -- Método: starmap (func, iterable[, chunksize])

          Like *note map(): 1124. except that the elements of the
          'iterable' are expected to be iterables that are unpacked as
          arguments.

          Hence an 'iterable' of ‘[(1,2), (3, 4)]’ results in
          ‘[func(1,2), func(3,4)]’.

          Adicionado na versão 3.3.

      -- Método: starmap_async (func, iterable[, chunksize[, callback[,
               error_callback]]])

          A combination of *note starmap(): 1121. and *note map_async():
          1125. that iterates over 'iterable' of iterables and calls
          'func' with the iterables unpacked.  Returns a result object.

          Adicionado na versão 3.3.

      -- Método: close ()

          Prevents any more tasks from being submitted to the pool.
          Once all the tasks have been completed the worker processes
          will exit.

      -- Método: terminate ()

          Stops the worker processes immediately without completing
          outstanding work.  When the pool object is garbage collected
          *note terminate(): 3394. will be called immediately.

      -- Método: join ()

          Wait for the worker processes to exit.  One must call *note
          close(): 3393. or *note terminate(): 3394. before using *note
          join(): 3398.

     Alterado na versão 3.3: Pool objects now support the context
     management protocol – see *note Tipos de Gerenciador de Contexto:
     214e.  *note __enter__(): 23dc. returns the pool object, and *note
     __exit__(): 23dd. calls *note terminate(): 3394.

 -- Classe: multiprocessing.pool.AsyncResult

     The class of the result returned by *note Pool.apply_async(): 13dd.
     and *note Pool.map_async(): 1125.

      -- Método: get ([timeout])

          Return the result when it arrives.  If 'timeout' is not ‘None’
          and the result does not arrive within 'timeout' seconds then
          *note multiprocessing.TimeoutError: 3349. is raised.  If the
          remote call raised an exception then that exception will be
          reraised by *note get(): 3399.

      -- Método: wait ([timeout])

          Wait until the result is available or until 'timeout' seconds
          pass.

      -- Método: ready ()

          Return whether the call has completed.

      -- Método: successful ()

          Return whether the call completed without raising an
          exception.  Will raise *note ValueError: 202. if the result is
          not ready.

          Alterado na versão 3.7: If the result is not ready, *note
          ValueError: 202. is raised instead of *note AssertionError:
          6a9.

The following example demonstrates the use of a pool:

     from multiprocessing import Pool
     import time

     def f(x):
         return x*x

     if __name__ == '__main__':
         with Pool(processes=4) as pool:         # start 4 worker processes
             result = pool.apply_async(f, (10,)) # evaluate "f(10)" asynchronously in a single process
             print(result.get(timeout=1))        # prints "100" unless your computer is *very* slow

             print(pool.map(f, range(10)))       # prints "[0, 1, 4,..., 81]"

             it = pool.imap(f, range(10))
             print(next(it))                     # prints "0"
             print(next(it))                     # prints "1"
             print(it.next(timeout=1))           # prints "4" unless your computer is *very* slow

             result = pool.apply_async(time.sleep, (10,))
             print(result.get(timeout=1))        # raises multiprocessing.TimeoutError


File: python.info,  Node: Listeners and Clients,  Next: Authentication keys,  Prev: Process Pools,  Up: Referência<3>

5.18.2.23 Listeners and Clients
...............................

Usually message passing between processes is done using queues or by
using *note Connection: 111f. objects returned by *note Pipe(): 3330.

However, the *note multiprocessing.connection: 95. module allows some
extra flexibility.  It basically gives a high level message oriented API
for dealing with sockets or Windows named pipes.  It also has support
for 'digest authentication' using the *note hmac: 6a. module, and for
polling multiple connections at the same time.

 -- Função: multiprocessing.connection.deliver_challenge (connection,
          authkey)

     Send a randomly generated message to the other end of the
     connection and wait for a reply.

     If the reply matches the digest of the message using 'authkey' as
     the key then a welcome message is sent to the other end of the
     connection.  Otherwise *note AuthenticationError: 3348. is raised.

 -- Função: multiprocessing.connection.answer_challenge (connection,
          authkey)

     Receive a message, calculate the digest of the message using
     'authkey' as the key, and then send the digest back.

     If a welcome message is not received, then *note
     AuthenticationError: 3348. is raised.

 -- Função: multiprocessing.connection.Client (address[, family[,
          authkey]])

     Attempt to set up a connection to the listener which is using
     address 'address', returning a *note Connection: 111f.

     The type of the connection is determined by 'family' argument, but
     this can generally be omitted since it can usually be inferred from
     the format of 'address'.  (See *note Formatos de Endereços: 33a1.)

     If 'authkey' is given and not ‘None’, it should be a byte string
     and will be used as the secret key for an HMAC-based authentication
     challenge.  No authentication is done if 'authkey' is ‘None’.
     *note AuthenticationError: 3348. is raised if authentication fails.
     See *note Authentication keys: 3345.

 -- Classe: multiprocessing.connection.Listener ([address[, family[,
          backlog[, authkey]]]])

     A wrapper for a bound socket or Windows named pipe which is
     ‘listening’ for connections.

     'address' is the address to be used by the bound socket or named
     pipe of the listener object.

          Nota: If an address of ‘0.0.0.0’ is used, the address will not
          be a connectable end point on Windows.  If you require a
          connectable end-point, you should use ‘127.0.0.1’.

     'family' is the type of socket (or named pipe) to use.  This can be
     one of the strings ‘'AF_INET'’ (for a TCP socket), ‘'AF_UNIX'’ (for
     a Unix domain socket) or ‘'AF_PIPE'’ (for a Windows named pipe).
     Of these only the first is guaranteed to be available.  If 'family'
     is ‘None’ then the family is inferred from the format of 'address'.
     If 'address' is also ‘None’ then a default is chosen.  This default
     is the family which is assumed to be the fastest available.  See
     *note Formatos de Endereços: 33a1.  Note that if 'family' is
     ‘'AF_UNIX'’ and address is ‘None’ then the socket will be created
     in a private temporary directory created using *note
     tempfile.mkstemp(): 2a03.

     If the listener object uses a socket then 'backlog' (1 by default)
     is passed to the *note listen(): e8d. method of the socket once it
     has been bound.

     If 'authkey' is given and not ‘None’, it should be a byte string
     and will be used as the secret key for an HMAC-based authentication
     challenge.  No authentication is done if 'authkey' is ‘None’.
     *note AuthenticationError: 3348. is raised if authentication fails.
     See *note Authentication keys: 3345.

      -- Método: accept ()

          Accept a connection on the bound socket or named pipe of the
          listener object and return a *note Connection: 111f. object.
          If authentication is attempted and fails, then *note
          AuthenticationError: 3348. is raised.

      -- Método: close ()

          Close the bound socket or named pipe of the listener object.
          This is called automatically when the listener is garbage
          collected.  However it is advisable to call it explicitly.

     Listener objects have the following read-only properties:

      -- Atributo: address

          The address which is being used by the Listener object.

      -- Atributo: last_accepted

          The address from which the last accepted connection came.  If
          this is unavailable then it is ‘None’.

     Alterado na versão 3.3: Listener objects now support the context
     management protocol – see *note Tipos de Gerenciador de Contexto:
     214e.  *note __enter__(): 23dc. returns the listener object, and
     *note __exit__(): 23dd. calls *note close(): 33a2.

 -- Função: multiprocessing.connection.wait (object_list, timeout=None)

     Wait till an object in 'object_list' is ready.  Returns the list of
     those objects in 'object_list' which are ready.  If 'timeout' is a
     float then the call blocks for at most that many seconds.  If
     'timeout' is ‘None’ then it will block for an unlimited period.  A
     negative timeout is equivalent to a zero timeout.

     For both POSIX and Windows, an object can appear in 'object_list'
     if it is

        * a readable *note Connection: 111f. object;

        * a connected and readable *note socket.socket: dc9. object; or

        * the *note sentinel: 1120. attribute of a *note Process: b6f.
          object.

     A connection or socket object is ready when there is data available
     to be read from it, or the other end has been closed.

     'POSIX': ‘wait(object_list, timeout)’ almost equivalent
     ‘select.select(object_list, [], [], timeout)’.  The difference is
     that, if *note select.select(): dc8. is interrupted by a signal, it
     can raise *note OSError: 417. with an error number of ‘EINTR’,
     whereas *note wait(): 111e. will not.

     'Windows': An item in 'object_list' must either be an integer
     handle which is waitable (according to the definition used by the
     documentation of the Win32 function ‘WaitForMultipleObjects()’) or
     it can be an object with a *note fileno(): 15d0. method which
     returns a socket handle or pipe handle.  (Note that pipe handles
     and socket handles are 'not' waitable handles.)

     Adicionado na versão 3.3.

'Examples'

The following server code creates a listener which uses ‘'secret
password'’ as an authentication key.  It then waits for a connection and
sends some data to the client:

     from multiprocessing.connection import Listener
     from array import array

     address = ('localhost', 6000)     # family is deduced to be 'AF_INET'

     with Listener(address, authkey=b'secret password') as listener:
         with listener.accept() as conn:
             print('connection accepted from', listener.last_accepted)

             conn.send([2.25, None, 'junk', float])

             conn.send_bytes(b'hello')

             conn.send_bytes(array('i', [42, 1729]))

The following code connects to the server and receives some data from
the server:

     from multiprocessing.connection import Client
     from array import array

     address = ('localhost', 6000)

     with Client(address, authkey=b'secret password') as conn:
         print(conn.recv())                  # => [2.25, None, 'junk', float]

         print(conn.recv_bytes())            # => 'hello'

         arr = array('i', [0, 0, 0, 0, 0])
         print(conn.recv_bytes_into(arr))    # => 8
         print(arr)                          # => array('i', [42, 1729, 0, 0, 0])

The following code uses *note wait(): 111e. to wait for messages from
multiple processes at once:

     from multiprocessing import Process, Pipe, current_process
     from multiprocessing.connection import wait

     def foo(w):
         for i in range(10):
             w.send((i, current_process().name))
         w.close()

     if __name__ == '__main__':
         readers = []

         for i in range(4):
             r, w = Pipe(duplex=False)
             readers.append(r)
             p = Process(target=foo, args=(w,))
             p.start()
             # We close the writable end of the pipe now to be sure that
             # p is the only process which owns a handle for it.  This
             # ensures that when p closes its handle for the writable end,
             # wait() will promptly report the readable end as being ready.
             w.close()

         while readers:
             for r in wait(readers):
                 try:
                     msg = r.recv()
                 except EOFError:
                     readers.remove(r)
                 else:
                     print(msg)

* Menu:

* Formatos de Endereços::


File: python.info,  Node: Formatos de Endereços,  Up: Listeners and Clients

5.18.2.24 Formatos de Endereços
...............................

   * Um endereço ‘'AF_INET'’ é uma tupla na forma de ‘(hostname, port)’
     sendo 'hostname' uma string e 'port' um inteiro.

   * An ‘'AF_UNIX'’ address is a string representing a filename on the
     filesystem.

   * An ‘'AF_PIPE'’ address is a string of the form
     ‘r'\\.\pipe\PIPENAME'’.  To use *note Client(): 33a0. to connect to
     a named pipe on a remote computer called 'ServerName' one should
     use an address of the form ‘r'\\SERVERNAME\pipe\PIPENAME'’ instead.

Note that any string beginning with two backslashes is assumed by
default to be an ‘'AF_PIPE'’ address rather than an ‘'AF_UNIX'’ address.


File: python.info,  Node: Authentication keys,  Next: Gerando logs<2>,  Prev: Listeners and Clients,  Up: Referência<3>

5.18.2.25 Authentication keys
.............................

When one uses *note Connection.recv: 3363, the data received is
automatically unpickled.  Unfortunately unpickling data from an
untrusted source is a security risk.  Therefore *note Listener: 179e.
and *note Client(): 33a0. use the *note hmac: 6a. module to provide
digest authentication.

An authentication key is a byte string which can be thought of as a
password: once a connection is established both ends will demand proof
that the other knows the authentication key.  (Demonstrating that both
ends are using the same key does 'not' involve sending the key over the
connection.)

If authentication is requested but no authentication key is specified
then the return value of ‘current_process().authkey’ is used (see *note
Process: b6f.).  This value will be automatically inherited by any *note
Process: b6f. object that the current process creates.  This means that
(by default) all processes of a multi-process program will share a
single authentication key which can be used when setting up connections
between themselves.

Suitable authentication keys can also be generated by using *note
os.urandom(): 523.


File: python.info,  Node: Gerando logs<2>,  Next: The multiprocessing dummy module,  Prev: Authentication keys,  Up: Referência<3>

5.18.2.26 Gerando logs
......................

Some support for logging is available.  Note, however, that the *note
logging: 87. package does not use process shared locks so it is possible
(depending on the handler type) for messages from different processes to
get mixed up.

 -- Função: multiprocessing.get_logger ()

     Returns the logger used by *note multiprocessing: 94.  If
     necessary, a new one will be created.

     When first created the logger has level *note logging.NOTSET: 2e39.
     and no default handler.  Messages sent to this logger will not by
     default propagate to the root logger.

     Note that on Windows child processes will only inherit the level of
     the parent process’s logger – any other customization of the logger
     will not be inherited.

 -- Função: multiprocessing.log_to_stderr (level=None)

     This function performs a call to *note get_logger(): 2f05. but in
     addition to returning the logger created by get_logger, it adds a
     handler which sends output to *note sys.stderr: 940. using format
     ‘'[%(levelname)s/%(processName)s] %(message)s'’.  You can modify
     ‘levelname’ of the logger by passing a ‘level’ argument.

Below is an example session with logging turned on:

     >>> import multiprocessing, logging
     >>> logger = multiprocessing.log_to_stderr()
     >>> logger.setLevel(logging.INFO)
     >>> logger.warning('doomed')
     [WARNING/MainProcess] doomed
     >>> m = multiprocessing.Manager()
     [INFO/SyncManager-...] child process calling self.run()
     [INFO/SyncManager-...] created temp directory /.../pymp-...
     [INFO/SyncManager-...] manager serving at '/.../listener-...'
     >>> del m
     [INFO/MainProcess] sending shutdown message to manager
     [INFO/SyncManager-...] manager exiting with exitcode 0

For a full table of logging levels, see the *note logging: 87. module.


File: python.info,  Node: The multiprocessing dummy module,  Prev: Gerando logs<2>,  Up: Referência<3>

5.18.2.27 The ‘multiprocessing.dummy’ module
............................................

*note multiprocessing.dummy: 96. replicates the API of *note
multiprocessing: 94. but is no more than a wrapper around the *note
threading: ed. module.

In particular, the ‘Pool’ function provided by *note
multiprocessing.dummy: 96. returns an instance of *note ThreadPool:
1a60, which is a subclass of *note Pool: f9f. that supports all the same
method calls but uses a pool of worker threads rather than worker
processes.

 -- Classe: multiprocessing.pool.ThreadPool ([processes[, initializer[,
          initargs]]])

     A thread pool object which controls a pool of worker threads to
     which jobs can be submitted.  *note ThreadPool: 1a60. instances are
     fully interface compatible with *note Pool: f9f. instances, and
     their resources must also be properly managed, either by using the
     pool as a context manager or by calling *note close(): 3393. and
     *note terminate(): 3394. manually.

     'processes' is the number of worker threads to use.  If 'processes'
     is ‘None’ then the number returned by *note os.process_cpu_count():
     1c4. is used.

     If 'initializer' is not ‘None’ then each worker process will call
     ‘initializer(*initargs)’ when it starts.

     Unlike *note Pool: f9f, 'maxtasksperchild' and 'context' cannot be
     provided.

          Nota: A *note ThreadPool: 1a60. shares the same interface as
          *note Pool: f9f, which is designed around a pool of processes
          and predates the introduction of the *note concurrent.futures:
          21. module.  As such, it inherits some operations that don’t
          make sense for a pool backed by threads, and it has its own
          type for representing the status of asynchronous jobs, *note
          AsyncResult: 3395, that is not understood by any other
          libraries.

          Users should generally prefer to use *note
          concurrent.futures.ThreadPoolExecutor: 742, which has a
          simpler interface that was designed around threads from the
          start, and which returns *note concurrent.futures.Future:
          11f1. instances that are compatible with many other libraries,
          including *note asyncio: a.


File: python.info,  Node: Programming guidelines,  Next: Exemplos<14>,  Prev: Referência<3>,  Up: multiprocessing — Paralelismo baseado em processo

5.18.2.28 Programming guidelines
................................

There are certain guidelines and idioms which should be adhered to when
using *note multiprocessing: 94.

* Menu:

* All start methods::
* The spawn and forkserver start methods::


File: python.info,  Node: All start methods,  Next: The spawn and forkserver start methods,  Up: Programming guidelines

5.18.2.29 All start methods
...........................

The following applies to all start methods.

Avoid shared state

     As far as possible one should try to avoid shifting large amounts
     of data between processes.

     It is probably best to stick to using queues or pipes for
     communication between processes rather than using the lower level
     synchronization primitives.

Picklability

     Ensure that the arguments to the methods of proxies are picklable.

Thread safety of proxies

     Do not use a proxy object from more than one thread unless you
     protect it with a lock.

     (There is never a problem with different processes using the 'same'
     proxy.)

Joining zombie processes

     On POSIX when a process finishes but has not been joined it becomes
     a zombie.  There should never be very many because each time a new
     process starts (or *note active_children(): 335d. is called) all
     completed processes which have not yet been joined will be joined.
     Also calling a finished process’s *note Process.is_alive: 13d9.
     will join the process.  Even so it is probably good practice to
     explicitly join all the processes that you start.

Better to inherit than pickle/unpickle

     When using the 'spawn' or 'forkserver' start methods many types
     from *note multiprocessing: 94. need to be picklable so that child
     processes can use them.  However, one should generally avoid
     sending shared objects to other processes using pipes or queues.
     Instead you should arrange the program so that a process which
     needs access to a shared resource created elsewhere can inherit it
     from an ancestor process.

Avoid terminating processes

     Using the *note Process.terminate: 3327. method to stop a process
     is liable to cause any shared resources (such as locks, semaphores,
     pipes and queues) currently being used by the process to become
     broken or unavailable to other processes.

     Therefore it is probably best to only consider using *note
     Process.terminate: 3327. on processes which never use any shared
     resources.

Joining processes that use queues

     Bear in mind that a process that has put items in a queue will wait
     before terminating until all the buffered items are fed by the
     “feeder” thread to the underlying pipe.  (The child process can
     call the *note Queue.cancel_join_thread: 3353. method of the queue
     to avoid this behaviour.)

     This means that whenever you use a queue you need to make sure that
     all items which have been put on the queue will eventually be
     removed before the process is joined.  Otherwise you cannot be sure
     that processes which have put items on the queue will terminate.
     Remember also that non-daemonic processes will be joined
     automatically.

     An example which will deadlock is the following:

          from multiprocessing import Process, Queue

          def f(q):
              q.put('X' * 1000000)

          if __name__ == '__main__':
              queue = Queue()
              p = Process(target=f, args=(queue,))
              p.start()
              p.join()                    # this deadlocks
              obj = queue.get()

     A fix here would be to swap the last two lines (or simply remove
     the ‘p.join()’ line).

Explicitly pass resources to child processes

     On POSIX using the 'fork' start method, a child process can make
     use of a shared resource created in a parent process using a global
     resource.  However, it is better to pass the object as an argument
     to the constructor for the child process.

     Apart from making the code (potentially) compatible with Windows
     and the other start methods this also ensures that as long as the
     child process is still alive the object will not be garbage
     collected in the parent process.  This might be important if some
     resource is freed when the object is garbage collected in the
     parent process.

     So for instance

          from multiprocessing import Process, Lock

          def f():
              ... do something using "lock" ...

          if __name__ == '__main__':
              lock = Lock()
              for i in range(10):
                  Process(target=f).start()

     should be rewritten as

          from multiprocessing import Process, Lock

          def f(l):
              ... do something using "l" ...

          if __name__ == '__main__':
              lock = Lock()
              for i in range(10):
                  Process(target=f, args=(lock,)).start()

Beware of replacing *note sys.stdin: 53d. with a “file like object”

     *note multiprocessing: 94. originally unconditionally called:

          os.close(sys.stdin.fileno())

     in the ‘multiprocessing.Process._bootstrap()’ method — this
     resulted in issues with processes-in-processes.  This has been
     changed to:

          sys.stdin.close()
          sys.stdin = open(os.open(os.devnull, os.O_RDONLY), closefd=False)

     Which solves the fundamental issue of processes colliding with each
     other resulting in a bad file descriptor error, but introduces a
     potential danger to applications which replace *note sys.stdin():
     53d. with a “file-like object” with output buffering.  This danger
     is that if multiple processes call *note close(): 1f6. on this
     file-like object, it could result in the same data being flushed to
     the object multiple times, resulting in corruption.

     If you write a file-like object and implement your own caching, you
     can make it fork-safe by storing the pid whenever you append to the
     cache, and discarding the cache when the pid changes.  For example:

          @property
          def cache(self):
              pid = os.getpid()
              if pid != self._pid:
                  self._pid = pid
                  self._cache = []
              return self._cache

     For more information, see bpo-5155(1), bpo-5313(2) and bpo-5331(3)

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=5155

   (2) https://bugs.python.org/issue?@action=redirect&bpo=5313

   (3) https://bugs.python.org/issue?@action=redirect&bpo=5331


File: python.info,  Node: The spawn and forkserver start methods,  Prev: All start methods,  Up: Programming guidelines

5.18.2.30 The 'spawn' and 'forkserver' start methods
....................................................

There are a few extra restrictions which don’t apply to the 'fork' start
method.

More picklability

     Ensure that all arguments to *note Process: b6f. are picklable.
     Also, if you subclass ‘Process.__init__’, you must make sure that
     instances will be picklable when the *note Process.start: 13d8.
     method is called.

Global variables

     Bear in mind that if code run in a child process tries to access a
     global variable, then the value it sees (if any) may not be the
     same as the value in the parent process at the time that *note
     Process.start: 13d8. was called.

     However, global variables which are just module level constants
     cause no problems.
Safe importing of main module

     Make sure that the main module can be safely imported by a new
     Python interpreter without causing unintended side effects (such as
     starting a new process).

     For example, using the 'spawn' or 'forkserver' start method running
     the following module would fail with a *note RuntimeError: 195.:

          from multiprocessing import Process

          def foo():
              print('hello')

          p = Process(target=foo)
          p.start()

     Instead one should protect the “entry point” of the program by
     using ‘if __name__ == '__main__':’ as follows:

          from multiprocessing import Process, freeze_support, set_start_method

          def foo():
              print('hello')

          if __name__ == '__main__':
              freeze_support()
              set_start_method('spawn')
              p = Process(target=foo)
              p.start()

     (The ‘freeze_support()’ line can be omitted if the program will be
     run normally instead of frozen.)

     This allows the newly spawned Python interpreter to safely import
     the module and then run the module’s ‘foo()’ function.

     Similar restrictions apply if a pool or manager is created in the
     main module.


File: python.info,  Node: Exemplos<14>,  Prev: Programming guidelines,  Up: multiprocessing — Paralelismo baseado em processo

5.18.2.31 Exemplos
..................

Demonstration of how to create and use customized managers and proxies:

     from multiprocessing import freeze_support
     from multiprocessing.managers import BaseManager, BaseProxy
     import operator

     ##

     class Foo:
         def f(self):
             print('you called Foo.f()')
         def g(self):
             print('you called Foo.g()')
         def _h(self):
             print('you called Foo._h()')

     # A simple generator function
     def baz():
         for i in range(10):
             yield i*i

     # Proxy type for generator objects
     class GeneratorProxy(BaseProxy):
         _exposed_ = ['__next__']
         def __iter__(self):
             return self
         def __next__(self):
             return self._callmethod('__next__')

     # Function to return the operator module
     def get_operator_module():
         return operator

     ##

     class MyManager(BaseManager):
         pass

     # register the Foo class; make `f()` and `g()` accessible via proxy
     MyManager.register('Foo1', Foo)

     # register the Foo class; make `g()` and `_h()` accessible via proxy
     MyManager.register('Foo2', Foo, exposed=('g', '_h'))

     # register the generator function baz; use `GeneratorProxy` to make proxies
     MyManager.register('baz', baz, proxytype=GeneratorProxy)

     # register get_operator_module(); make public functions accessible via proxy
     MyManager.register('operator', get_operator_module)

     ##

     def test():
         manager = MyManager()
         manager.start()

         print('-' * 20)

         f1 = manager.Foo1()
         f1.f()
         f1.g()
         assert not hasattr(f1, '_h')
         assert sorted(f1._exposed_) == sorted(['f', 'g'])

         print('-' * 20)

         f2 = manager.Foo2()
         f2.g()
         f2._h()
         assert not hasattr(f2, 'f')
         assert sorted(f2._exposed_) == sorted(['g', '_h'])

         print('-' * 20)

         it = manager.baz()
         for i in it:
             print('<%d>' % i, end=' ')
         print()

         print('-' * 20)

         op = manager.operator()
         print('op.add(23, 45) =', op.add(23, 45))
         print('op.pow(2, 94) =', op.pow(2, 94))
         print('op._exposed_ =', op._exposed_)

     ##

     if __name__ == '__main__':
         freeze_support()
         test()

Using *note Pool: f9f.:

     import multiprocessing
     import time
     import random
     import sys

     #
     # Functions used by test code
     #

     def calculate(func, args):
         result = func(*args)
         return '%s says that %s%s = %s' % (
             multiprocessing.current_process().name,
             func.__name__, args, result
             )

     def calculatestar(args):
         return calculate(*args)

     def mul(a, b):
         time.sleep(0.5 * random.random())
         return a * b

     def plus(a, b):
         time.sleep(0.5 * random.random())
         return a + b

     def f(x):
         return 1.0 / (x - 5.0)

     def pow3(x):
         return x ** 3

     def noop(x):
         pass

     #
     # Test code
     #

     def test():
         PROCESSES = 4
         print('Creating pool with %d processes\n' % PROCESSES)

         with multiprocessing.Pool(PROCESSES) as pool:
             #
             # Tests
             #

             TASKS = [(mul, (i, 7)) for i in range(10)] + \
                     [(plus, (i, 8)) for i in range(10)]

             results = [pool.apply_async(calculate, t) for t in TASKS]
             imap_it = pool.imap(calculatestar, TASKS)
             imap_unordered_it = pool.imap_unordered(calculatestar, TASKS)

             print('Ordered results using pool.apply_async():')
             for r in results:
                 print('\t', r.get())
             print()

             print('Ordered results using pool.imap():')
             for x in imap_it:
                 print('\t', x)
             print()

             print('Unordered results using pool.imap_unordered():')
             for x in imap_unordered_it:
                 print('\t', x)
             print()

             print('Ordered results using pool.map() --- will block till complete:')
             for x in pool.map(calculatestar, TASKS):
                 print('\t', x)
             print()

             #
             # Test error handling
             #

             print('Testing error handling:')

             try:
                 print(pool.apply(f, (5,)))
             except ZeroDivisionError:
                 print('\tGot ZeroDivisionError as expected from pool.apply()')
             else:
                 raise AssertionError('expected ZeroDivisionError')

             try:
                 print(pool.map(f, list(range(10))))
             except ZeroDivisionError:
                 print('\tGot ZeroDivisionError as expected from pool.map()')
             else:
                 raise AssertionError('expected ZeroDivisionError')

             try:
                 print(list(pool.imap(f, list(range(10)))))
             except ZeroDivisionError:
                 print('\tGot ZeroDivisionError as expected from list(pool.imap())')
             else:
                 raise AssertionError('expected ZeroDivisionError')

             it = pool.imap(f, list(range(10)))
             for i in range(10):
                 try:
                     x = next(it)
                 except ZeroDivisionError:
                     if i == 5:
                         pass
                 except StopIteration:
                     break
                 else:
                     if i == 5:
                         raise AssertionError('expected ZeroDivisionError')

             assert i == 9
             print('\tGot ZeroDivisionError as expected from IMapIterator.next()')
             print()

             #
             # Testing timeouts
             #

             print('Testing ApplyResult.get() with timeout:', end=' ')
             res = pool.apply_async(calculate, TASKS[0])
             while 1:
                 sys.stdout.flush()
                 try:
                     sys.stdout.write('\n\t%s' % res.get(0.02))
                     break
                 except multiprocessing.TimeoutError:
                     sys.stdout.write('.')
             print()
             print()

             print('Testing IMapIterator.next() with timeout:', end=' ')
             it = pool.imap(calculatestar, TASKS)
             while 1:
                 sys.stdout.flush()
                 try:
                     sys.stdout.write('\n\t%s' % it.next(0.02))
                 except StopIteration:
                     break
                 except multiprocessing.TimeoutError:
                     sys.stdout.write('.')
             print()
             print()


     if __name__ == '__main__':
         multiprocessing.freeze_support()
         test()

An example showing how to use queues to feed tasks to a collection of
worker processes and collect the results:

     import time
     import random

     from multiprocessing import Process, Queue, current_process, freeze_support

     #
     # Function run by worker processes
     #

     def worker(input, output):
         for func, args in iter(input.get, 'STOP'):
             result = calculate(func, args)
             output.put(result)

     #
     # Function used to calculate result
     #

     def calculate(func, args):
         result = func(*args)
         return '%s says that %s%s = %s' % \
             (current_process().name, func.__name__, args, result)

     #
     # Functions referenced by tasks
     #

     def mul(a, b):
         time.sleep(0.5*random.random())
         return a * b

     def plus(a, b):
         time.sleep(0.5*random.random())
         return a + b

     #
     #
     #

     def test():
         NUMBER_OF_PROCESSES = 4
         TASKS1 = [(mul, (i, 7)) for i in range(20)]
         TASKS2 = [(plus, (i, 8)) for i in range(10)]

         # Create queues
         task_queue = Queue()
         done_queue = Queue()

         # Submit tasks
         for task in TASKS1:
             task_queue.put(task)

         # Start worker processes
         for i in range(NUMBER_OF_PROCESSES):
             Process(target=worker, args=(task_queue, done_queue)).start()

         # Get and print results
         print('Unordered results:')
         for i in range(len(TASKS1)):
             print('\t', done_queue.get())

         # Add more tasks using `put()`
         for task in TASKS2:
             task_queue.put(task)

         # Get and print some more results
         for i in range(len(TASKS2)):
             print('\t', done_queue.get())

         # Tell child processes to stop
         for i in range(NUMBER_OF_PROCESSES):
             task_queue.put('STOP')


     if __name__ == '__main__':
         freeze_support()
         test()


File: python.info,  Node: multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos,  Next: O pacote concurrent,  Prev: multiprocessing — Paralelismo baseado em processo,  Up: Execução Concorrente

5.18.3 ‘multiprocessing.shared_memory’ — Memória compartilhada para acesso direto entre processos
-------------------------------------------------------------------------------------------------

'Código-fonte:' Lib/multiprocessing/shared_memory.py(1)

Adicionado na versão 3.8.

__________________________________________________________________

Este módulo fornece uma classe, *note SharedMemory: 174f, para a
alocação e gerenciamento da memória compartilhada a ser acessada por um
ou mais processos em uma máquina multicore ou de multiprocessamento
simétrico (SMP). Para ajudar com o gerenciamento do ciclo de vida da
memória compartilhada especialmente entre processos distintos, uma
subclasse de *note BaseManager: 3379, *note SharedMemoryManager: 33b3,
também é fornecida no módulo *note multiprocessing.managers: 97.

Neste módulo, memória compartilhada refere-se a blocos de memória
compartilhada no “estilo POSIX” (embora não seja necessariamente
implementado explicitamente como tal) e não se refere a “memória
compartilhada distribuída”.  Este estilo de memória compartilhada
permite que processos distintos potencialmente leiam e escrevam em uma
região comum (ou compartilhada) de memória volátil.  Os processos são
convencionalmente limitados a ter acesso somente ao próprio espaço de
memória de processo mas a memória compartilhada permite o
compartilhamento de dados entre processos, evitando a necessidade de
enviar mensagens entre processos contendo estes dados.  Compartilhar
dados diretamente via memória pode fornecer ganhos de desempenho
significativos comparado ao compartilhamento de dados via disco ou
soquete ou outras comunicações que requerem a
serialização/desserialização e cópia dos dados.

 -- Classe: multiprocessing.shared_memory.SharedMemory (name=None,
          create=False, size=0, *, track=True)

     Cria uma instância da classe ‘SharedMemory’ para criar um novo
     bloco de memória compartilhada ou anexar a um bloco de memória
     compartilhada existente.  A cada bloco de memória compartilhada é
     atribuído um nome único.  Desta forma, um processo pode criar um
     bloco de memória compartilhada com um nome particular e um processo
     diferente pode ser anexado a esse mesmo bloco de memória
     compartilhada usando este mesmo nome.

     Como um recurso para compartilhar dados entre processos, os blocos
     de memória compartilhada podem sobreviver ao processo original que
     os criou.  Quando um processo não precisa mais acessar um bloco de
     memória compartilhada que ainda pode ser necessário para outros
     processos, o método *note close(): 33b4. deve ser chamado.  Quando
     um bloco de memória compartilhada não é mais necessário para nenhum
     processo, o método *note unlink(): 33b5. deve ser chamado para
     garantir a limpeza apropriada.


     Parâmetros:

        * ‘name’ (*note str: 44c.‘ | ’‘None’) – O nome único para a
          memória compartilhada requisitada, especificado como uma
          string.  Ao criar um novo bloco de memória compartilhada, se
          ‘None’ (o padrão) é fornecido para o nome, um novo nome será
          gerado.

        * ‘create’ (*note bool: 468.) – Controla quando um novo bloco de
          memória compartilhada é criado (‘True’) ou um bloco de memória
          compartilhada existente é anexado (‘False’).

        * ‘size’ (*note int: 257.) – O número de bytes requeridos ao
          criar um novo bloco de memória compartilhada.  Como algumas
          plataformas optam por alocar pedaços de memória com base no
          tamanho da página de memória da própria plataforma, o tamanho
          exato do bloco de memória compartilhada pode ser maior ou
          igual ao tamanho requerido.  Ao anexar a um bloco de memória
          compartilhada existente, o parâmetro 'size' é ignorado.

        * ‘track’ (*note bool: 468.) – Quando ‘True’, registra o bloco
          de memória compartilhada com um processo de rastreador de
          recursos em plataformas onde o sistema operacional não faz
          isso automaticamente.  O rastreador de recursos garante a
          limpeza adequada da memória compartilhada, mesmo se todos os
          outros processos com acesso à memória saírem sem fazer isso.
          Os processos Python criados a partir de um ancestral comum
          usando os recursos de *note multiprocessing: 94. compartilham
          um único processo de rastreador de recursos, e o tempo de vida
          dos segmentos de memória compartilhada é manipulado
          automaticamente entre esses processos.  Os processos Python
          criados de qualquer outra forma receberão seu próprio
          rastreador de recursos ao acessar a memória compartilhada com
          'track' habilitado.  Isso fará com que a memória compartilhada
          seja excluída pelo rastreador de recursos do primeiro processo
          que terminar.  Para evitar esse problema, os usuários de *note
          subprocess: d6. ou processos Python autônomos devem definir
          'track' como ‘False’ quando já houver outro processo em vigor
          que faça a contabilidade.  'track' é ignorado no Windows, que
          tem seu próprio rastreamento e exclui automaticamente a
          memória compartilhada quando todos os identificadores para ele
          foram fechados.

     Alterado na versão 3.13: Adicionado o parâmetro 'track'.

      -- Método: close ()

          Fecha o identificador/descritor de arquivo para a memória
          compartilhada desta instância.  *note close(): 33b4. deve ser
          chamado quando o acesso ao bloco de memória compartilhada
          desta instância não for mais necessário.  Dependendo do
          sistema operacional, a memória subjacente pode ou não ser
          liberada, mesmo que todos os identificadores para ela tenham
          sido fechados.  Para garantir uma limpeza adequada, use o
          método *note unlink(): 33b5.

      -- Método: unlink ()

          Exclui o bloco de memória compartilhada subjacente.  Isso deve
          ser chamado apenas uma vez por bloco de memória compartilhada,
          independentemente do número de handles para ele, mesmo em
          outros processos.  *note unlink(): 33b5. e *note close():
          33b4. podem ser chamados em qualquer ordem, mas tentar acessar
          dados dentro de um bloco de memória compartilhada após *note
          unlink(): 33b5. pode resultar em erros de acesso à memória,
          dependendo da plataforma.

          Este método não tem efeito no Windows, onde a única maneira de
          excluir um bloco de memória compartilhada é fechar todos os
          identificadores.

      -- Atributo: buf

          Uma visualização de memória do conteúdo do bloco de memória
          compartilhada.

      -- Atributo: name

          Acesso somente leitura ao nome único do bloco de memória
          compartilhada.

      -- Atributo: size

          Acesso somente leitura ao tamanho em bytes do bloco de memória
          compartilhada.

O exemplo a seguir demonstra um uso baixo nível de instâncias de *note
SharedMemory: 174f.:

     >>> from multiprocessing import shared_memory
     >>> shm_a = shared_memory.SharedMemory(create=True, size=10)
     >>> type(shm_a.buf)
     <class 'memoryview'>
     >>> buffer = shm_a.buf
     >>> len(buffer)
     10
     >>> buffer[:4] = bytearray([22, 33, 44, 55])  # Modifica vários de uma só vez
     >>> buffer[4] = 100                           # Modifica um único byte de cada vez
     >>> # Anexa a um bloco de memória compartilhada existente
     >>> shm_b = shared_memory.SharedMemory(shm_a.name)
     >>> import array
     >>> array.array('b', shm_b.buf[:5])  # Copia os dados para um novo array.array
     array('b', [22, 33, 44, 55, 100])
     >>> shm_b.buf[:5] = b'howdy'  # Modifica via shm_b usando bytes
     >>> bytes(shm_a.buf[:5])      # Acessa via shm_a
     b'howdy'
     >>> shm_b.close()   # Fecha cada instância de SharedMemory
     >>> shm_a.close()
     >>> shm_a.unlink()  # Chama unlink uma vez para liberar a memória Compartilhada

O exemplo a seguir demonstra um uso prático da classe *note
SharedMemory: 174f. com arrays do NumPy(2), acessando o mesmo
‘numpy.ndarray’ de dois consoles Python distintos.

     >>> # No primeiro console interativo do Python
     >>> import numpy as np
     >>> a = np.array([1, 1, 2, 3, 5, 8])  # Inicia com um array de NumPy existente
     >>> from multiprocessing import shared_memory
     >>> shm = shared_memory.SharedMemory(create=True, size=a.nbytes)
     >>> # Agora cria um array de NumPy suportado por memória compartilhada
     >>> b = np.ndarray(a.shape, dtype=a.dtype, buffer=shm.buf)
     >>> b[:] = a[:]  # Copia os dados originais para memória compartilhada
     >>> b
     array([1, 1, 2, 3, 5, 8])
     >>> type(b)
     <class 'numpy.ndarray'>
     >>> type(a)
     <class 'numpy.ndarray'>
     >>> shm.name  # Não especificamos um nome, então um foi escolhido por nós
     'psm_21467_46075'

     >>> # No mesmo shell ou em um novo console do Python na mesma máquina
     >>> import numpy as np
     >>> from multiprocessing import shared_memory
     >>> # Anexa ao bloco de memória compartilhada existente
     >>> existing_shm = shared_memory.SharedMemory(name='psm_21467_46075')
     >>> # Observe que a.shape é (6,) e a.dtype é np.int64 neste exemplo
     >>> c = np.ndarray((6,), dtype=np.int64, buffer=existing_shm.buf)
     >>> c
     array([1, 1, 2, 3, 5, 8])
     >>> c[-1] = 888
     >>> c
     array([  1,   1,   2,   3,   5, 888])

     >>> # De volta ao primeiro console interativo do Python, b reflete essa mudança
     >>> b
     array([  1,   1,   2,   3,   5, 888])

     >>> # Limpeza de dentro do segundo console Python
     >>> del c  # Desnecessário; apenas enfatizar a array não é mais usado
     >>> existing_shm.close()

     >>> # Limpeza de dentro do primeiro console Python
     >>> del b  # Desnecessário; apenas enfatizar a array não é mais usado
     >>> shm.close()
     >>> shm.unlink()  # Libera o bloco de memória compartilhada no final

 -- Classe: multiprocessing.managers.SharedMemoryManager ([address[,
          authkey]])

     Uma subclasse de *note multiprocessing.managers.BaseManager: 3379.
     que pode ser usada para o gerenciamento dos blocos de memória
     compartilhada entre processos.

     Uma chamada ao método *note start(): 337a. em uma instância de
     ‘SharedMemoryManager’ faz com que um novo processo seja iniciado.
     A única finalidade desse novo processo é gerenciar o ciclo de vida
     de todos os blocos de memória criados através dele.  Para acionar a
     liberação de todos os blocos de memória gerenciados por este
     processo, invoque o método *note shutdown(): 337b. na instância.
     Isso aciona uma chamada de *note unlink(): 33b5. em todos os
     objetos *note SharedMemory: 33b9. gerenciados por esse processo e
     então para o processo em si.  Ao criar instâncias de ‘SharedMemory’
     através de um ‘SharedMemoryManager’, evitamos a necessidade de
     rastrear e acionar manualmente a liberação dos recursos de memória
     compartilhada.

     Esta classe fornece métodos para criar e retornar instâncias de
     *note SharedMemory: 33b9. e para criar um objeto lista ou similar
     (*note ShareableList: 33ba.) apoiado por memória compartilhada.

     Consulte *note BaseManager: 3379. para obter uma descrição dos
     argumentos de entrada opcionais herdados 'address' e 'authkey' e
     como eles podem ser usados para conectar-se a um serviço
     ‘SharedMemoryManager’ existente de outros processos.

      -- Método: SharedMemory (size)

          Cria e retorna um novo objeto *note SharedMemory: 33b9. com o
          'size' especificado em bytes.

      -- Método: ShareableList (sequence)

          Cria e retorna um novo objeto *note ShareableList: 33ba,
          inicializado pelos valores da entrada 'sequence'.

O exemplo a seguir demonstra os mecanismos básicos de um *note
SharedMemoryManager: 33b3.:

     >>> from multiprocessing.managers import SharedMemoryManager
     >>> smm = SharedMemoryManager()
     >>> smm.start()  # Inicia o procsso que gerencia os blocos de memória compartilhada
     >>> sl = smm.ShareableList(range(4))
     >>> sl
     ShareableList([0, 1, 2, 3], name='psm_6572_7512')
     >>> raw_shm = smm.SharedMemory(size=128)
     >>> another_sl = smm.ShareableList('alpha')
     >>> another_sl
     ShareableList(['a', 'l', 'p', 'h', 'a'], name='psm_6572_12221')
     >>> smm.shutdown()  # Chama unlink() em sl, raw_shm, e another_sl

O exemplo a seguir retrata um padrão potencialmente mais conveniente
para usar objetos *note SharedMemoryManager: 33b3. através da instrução
*note with: 5d2. para garantir que todos os blocos de memória
compartilhada são liberados depois que não são mais necessários.

     >>> with SharedMemoryManager() as smm:
     ...     sl = smm.ShareableList(range(2000))
     ...     # Divide o trabalho entre dois processos, armazenando resultados parciais em sl
     ...     p1 = Process(target=do_work, args=(sl, 0, 1000))
     ...     p2 = Process(target=do_work, args=(sl, 1000, 2000))
     ...     p1.start()
     ...     p2.start()  # Um multiprocessing.Pool pode ser mais eficiente
     ...     p1.join()
     ...     p2.join()   # Espera todo trabalho ser concluído nos dois procssos
     ...     total_result = sum(sl)  # Consolida os resutlados parciais agora em sl

Ao usar um *note SharedMemoryManager: 33b3. em uma instrução *note with:
5d2, os blocos de memória compartilhada criados utilizando este
gerenciador são todos liberados quando o bloco de código com a instrução
‘with’ termina sua execução.

 -- Classe: multiprocessing.shared_memory.ShareableList (sequence=None,
          *, name=None)

     Fornece um objeto mutável do tipo lista onde todos os valores
     armazenados dentro são armazenados em um bloco de memória
     compartilhada.  Isso restringe valores armazenáveis aos seguintes
     tipos de dados embutidos:

        * *note int: 257. (com sinal, 64-bit)

        * *note float: 2f7.

        * *note bool: 468.

        * *note str: 44c. (menos de 10M bytes cada quando codificado
          como UTF-8)

        * *note bytes: 1c2. (menos de 10M bytes cada)

        * ‘None’

     Ele também difere notavelmente do tipo embutido *note list: 611,
     pois essas listas não podem alterar seu comprimento geral (ou seja,
     sem ‘append()’, ‘insert()’, etc.)  e não oferecem suporte à criação
     dinâmica de novas instâncias ‘ShareableList’ por meio de
     fatiamento.

     'sequence' é usado para preencher um ‘ShareableList’ com valores.
     Defina como ‘None’ para anexar a uma ‘ShareableList’ já existente
     pelo seu nome único de memória compartilhada.

     'name' é um nome único para a memória compartilhada requerida, como
     descrito na definição de *note SharedMemory: 174f.  Ao anexar a uma
     ‘ShareableList’ já existente, deve-se especificar o nome único do
     bloco de memória compartilhada e definir 'sequence' como ‘None’.

          Nota: Existe um problema conhecido para os valores *note
          bytes: 1c2. e *note str: 44c.  Se eles terminarem com bytes ou
          caracteres nulos ‘\x00’, eles podem ser 'silenciosamente
          removidos' ao buscá-los pelo índice da ‘ShareableList’.  Esse
          comportamento ‘.rstrip(b'\x00')’ é considerado um bug e pode
          desaparecer no futuro.  Veja gh-106939(3).

     Para aplicações onde a remoção de nulos finais é um problema,
     contorne-o sempre anexando incondicionalmente um byte extra
     diferente de 0 ao final de tais valores ao armazená-los e
     removendo-os incondicionalmente ao buscá-los:

          >>> from multiprocessing import shared_memory
          >>> nul_bug_demo = shared_memory.ShareableList(['?\x00', b'\x03\x02\x01\x00\x00\x00'])
          >>> nul_bug_demo[0]
          '?'
          >>> nul_bug_demo[1]
          b'\x03\x02\x01'
          >>> nul_bug_demo.shm.unlink()
          >>> padded = shared_memory.ShareableList(['?\x00\x07', b'\x03\x02\x01\x00\x00\x00\x07'])
          >>> padded[0][:-1]
          '?\x00'
          >>> padded[1][:-1]
          b'\x03\x02\x01\x00\x00\x00'
          >>> padded.shm.unlink()

      -- Método: count (value)

          Retorna o número de ocorrências de 'value'.

      -- Método: index (value)

          Retorna a primeira posição do índice de 'value'.  Levanta
          *note ValueError: 202. se 'value' não estiver presente.

      -- Atributo: format

          Atributo somente leitura contendo o formato de empacotamento
          *note struct: d5. usado por todos os valores armazenados
          atualmente.

      -- Atributo: shm

          A instância de *note SharedMemory: 174f. onde os valores são
          armazenados.

O exemplo a seguir demonstra o uso básico de uma instância de *note
ShareableList: 1ae7.:

     >>> from multiprocessing import shared_memory
     >>> a = shared_memory.ShareableList(['howdy', b'HoWdY', -273.154, 100, None, True, 42])
     >>> [ type(entry) for entry in a ]
     [<class 'str'>, <class 'bytes'>, <class 'float'>, <class 'int'>, <class 'NoneType'>, <class 'bool'>, <class 'int'>]
     >>> a[2]
     -273.154
     >>> a[2] = -78.5
     >>> a[2]
     -78.5
     >>> a[2] = 'dry ice'  # Changing data types is supported as well
     >>> a[2]
     'dry ice'
     >>> a[2] = 'larger than previously allocated storage space'
     Traceback (most recent call last):
       ...
     ValueError: exceeds available storage for existing str
     >>> a[2]
     'dry ice'
     >>> len(a)
     7
     >>> a.index(42)
     6
     >>> a.count(b'howdy')
     0
     >>> a.count(b'HoWdY')
     1
     >>> a.shm.close()
     >>> a.shm.unlink()
     >>> del a  # Use of a ShareableList after call to unlink() is unsupported

O exemplo a seguir retrata como um, dois ou mais processos podem acessar
a mesma *note ShareableList: 1ae7. fornecendo o nome do bloco de memória
compartilhada por trás dela:

     >>> b = shared_memory.ShareableList(range(5))         # In a first process
     >>> c = shared_memory.ShareableList(name=b.shm.name)  # In a second process
     >>> c
     ShareableList([0, 1, 2, 3, 4], name='...')
     >>> c[-1] = -999
     >>> b[-1]
     -999
     >>> b.shm.close()
     >>> c.shm.close()
     >>> c.shm.unlink()

Os exemplos a seguir demonstram que os objetos *note ShareableList:
1ae7. (e o subjacente *note SharedMemory: 174f.) podem ser serializados
e desserializados com pickle, se preciso.  Note, ainda será o mesmo
objeto compartilhado.  Isto acontece pois o objeto desserializado tem o
mesmo nome único e é somente anexado ao objeto existente com o mesmo
nome (se o objeto ainda existe):

     >>> import pickle
     >>> from multiprocessing import shared_memory
     >>> sl = shared_memory.ShareableList(range(10))
     >>> list(sl)
     [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

     >>> deserialized_sl = pickle.loads(pickle.dumps(sl))
     >>> list(deserialized_sl)
     [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

     >>> sl[0] = -1
     >>> deserialized_sl[1] = -2
     >>> list(sl)
     [-1, -2, 2, 3, 4, 5, 6, 7, 8, 9]
     >>> list(deserialized_sl)
     [-1, -2, 2, 3, 4, 5, 6, 7, 8, 9]

     >>> sl.shm.close()
     >>> sl.shm.unlink()

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/multiprocessing/shared_memory.py

   (2) https://numpy.org/

   (3) https://github.com/python/cpython/issues/106939


File: python.info,  Node: O pacote concurrent,  Next: concurrent futures — Launching parallel tasks,  Prev: multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos,  Up: Execução Concorrente

5.18.4 O pacote ‘concurrent’
----------------------------

Atualmente, há apenas um módulo neste pacote:

   * *note concurrent.futures: 21. – Iniciando tarefas em paralelo


File: python.info,  Node: concurrent futures — Launching parallel tasks,  Next: subprocess — Gerenciamento de subprocessos,  Prev: O pacote concurrent,  Up: Execução Concorrente

5.18.5 ‘concurrent.futures’ — Launching parallel tasks
------------------------------------------------------

Adicionado na versão 3.2.

'Código-fonte:' Lib/concurrent/futures/thread.py(1) e
Lib/concurrent/futures/process.py(2)

__________________________________________________________________

The *note concurrent.futures: 21. module provides a high-level interface
for asynchronously executing callables.

The asynchronous execution can be performed with threads, using *note
ThreadPoolExecutor: 742, or separate processes, using *note
ProcessPoolExecutor: 8f4.  Both implement the same interface, which is
defined by the abstract *note Executor: 33c5. class.

*note concurrent.futures.Future: 11f1. must not be confused with *note
asyncio.Future: be6, which is designed for use with *note asyncio: a.
tasks and coroutines.  See the *note asyncio’s Future: 33c6.
documentation for a detailed comparison of the two.

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

* Menu:

* Executor Objects::
* ThreadPoolExecutor::
* ProcessPoolExecutor::
* Future Objects::
* Module Functions::
* Exception classes::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/concurrent/futures/thread.py

   (2) 
https://github.com/python/cpython/tree/3.13/Lib/concurrent/futures/process.py


File: python.info,  Node: Executor Objects,  Next: ThreadPoolExecutor,  Up: concurrent futures — Launching parallel tasks

5.18.5.1 Executor Objects
.........................

 -- Classe: concurrent.futures.Executor

     An abstract class that provides methods to execute calls
     asynchronously.  It should not be used directly, but through its
     concrete subclasses.

      -- Método: submit (fn, /, *args, **kwargs)

          Schedules the callable, 'fn', to be executed as ‘fn(*args,
          **kwargs)’ and returns a *note Future: 11f1. object
          representing the execution of the callable.

               with ThreadPoolExecutor(max_workers=1) as executor:
                   future = executor.submit(pow, 323, 1235)
                   print(future.result())

      -- Método: map (fn, *iterables, timeout=None, chunksize=1)

          Similar to *note map(fn, *iterables): 867. except:

             * the 'iterables' are collected immediately rather than
               lazily;

             * 'fn' is executed asynchronously and several calls to 'fn'
               may be made concurrently.

          The returned iterator raises a *note TimeoutError: 838. if
          *note __next__(): 1310. is called and the result isn’t
          available after 'timeout' seconds from the original call to
          *note Executor.map(): e0e.  'timeout' can be an int or a
          float.  If 'timeout' is not specified or ‘None’, there is no
          limit to the wait time.

          If a 'fn' call raises an exception, then that exception will
          be raised when its value is retrieved from the iterator.

          When using *note ProcessPoolExecutor: 8f4, this method chops
          'iterables' into a number of chunks which it submits to the
          pool as separate tasks.  The (approximate) size of these
          chunks can be specified by setting 'chunksize' to a positive
          integer.  For very long iterables, using a large value for
          'chunksize' can significantly improve performance compared to
          the default size of 1.  With *note ThreadPoolExecutor: 742,
          'chunksize' has no effect.

          Alterado na versão 3.5: Adicionado o argumento 'chunksize'.

      -- Método: shutdown (wait=True, *, cancel_futures=False)

          Signal the executor that it should free any resources that it
          is using when the currently pending futures are done
          executing.  Calls to *note Executor.submit(): a8c. and *note
          Executor.map(): e0e. made after shutdown will raise *note
          RuntimeError: 195.

          If 'wait' is ‘True’ then this method will not return until all
          the pending futures are done executing and the resources
          associated with the executor have been freed.  If 'wait' is
          ‘False’ then this method will return immediately and the
          resources associated with the executor will be freed when all
          pending futures are done executing.  Regardless of the value
          of 'wait', the entire Python program will not exit until all
          pending futures are done executing.

          If 'cancel_futures' is ‘True’, this method will cancel all
          pending futures that the executor has not started running.
          Any futures that are completed or running won’t be cancelled,
          regardless of the value of 'cancel_futures'.

          If both 'cancel_futures' and 'wait' are ‘True’, all futures
          that the executor has started running will be completed prior
          to this method returning.  The remaining futures are
          cancelled.

          You can avoid having to call this method explicitly if you use
          the executor as a *note context manager: 5d4. via the *note
          with: 5d2. statement, which will shutdown the *note Executor:
          33c5. (waiting as if *note Executor.shutdown(): 8f3. were
          called with 'wait' set to ‘True’):

               import shutil
               with ThreadPoolExecutor(max_workers=4) as e:
                   e.submit(shutil.copy, 'src1.txt', 'dest1.txt')
                   e.submit(shutil.copy, 'src2.txt', 'dest2.txt')
                   e.submit(shutil.copy, 'src3.txt', 'dest3.txt')
                   e.submit(shutil.copy, 'src4.txt', 'dest4.txt')

          Alterado na versão 3.9: Adicionado 'cancel_futures'.


File: python.info,  Node: ThreadPoolExecutor,  Next: ProcessPoolExecutor,  Prev: Executor Objects,  Up: concurrent futures — Launching parallel tasks

5.18.5.2 ThreadPoolExecutor
...........................

*note ThreadPoolExecutor: 742. is an *note Executor: 33c5. subclass that
uses a pool of threads to execute calls asynchronously.

Deadlocks can occur when the callable associated with a *note Future:
11f1. waits on the results of another *note Future: 11f1.  For example:

     import time
     def wait_on_b():
         time.sleep(5)
         print(b.result())  # b will never complete because it is waiting on a.
         return 5

     def wait_on_a():
         time.sleep(5)
         print(a.result())  # a will never complete because it is waiting on b.
         return 6


     executor = ThreadPoolExecutor(max_workers=2)
     a = executor.submit(wait_on_b)
     b = executor.submit(wait_on_a)

And:

     def wait_on_future():
         f = executor.submit(pow, 5, 2)
         # This will never complete because there is only one worker thread and
         # it is executing this function.
         print(f.result())

     executor = ThreadPoolExecutor(max_workers=1)
     executor.submit(wait_on_future)

 -- Classe: concurrent.futures.ThreadPoolExecutor (max_workers=None,
          thread_name_prefix='', initializer=None, initargs=())

     An *note Executor: 33c5. subclass that uses a pool of at most
     'max_workers' threads to execute calls asynchronously.

     All threads enqueued to ‘ThreadPoolExecutor’ will be joined before
     the interpreter can exit.  Note that the exit handler which does
     this is executed 'before' any exit handlers added using ‘atexit’.
     This means exceptions in the main thread must be caught and handled
     in order to signal threads to exit gracefully.  For this reason, it
     is recommended that ‘ThreadPoolExecutor’ not be used for
     long-running tasks.

     'initializer' is an optional callable that is called at the start
     of each worker thread; 'initargs' is a tuple of arguments passed to
     the initializer.  Should 'initializer' raise an exception, all
     currently pending jobs will raise a *note BrokenThreadPool: 33c9,
     as well as any attempt to submit more jobs to the pool.

     Alterado na versão 3.5: If 'max_workers' is ‘None’ or not given, it
     will default to the number of processors on the machine, multiplied
     by ‘5’, assuming that *note ThreadPoolExecutor: 742. is often used
     to overlap I/O instead of CPU work and the number of workers should
     be higher than the number of workers for *note ProcessPoolExecutor:
     8f4.

     Alterado na versão 3.6: Added the 'thread_name_prefix' parameter to
     allow users to control the *note threading.Thread: 953. names for
     worker threads created by the pool for easier debugging.

     Alterado na versão 3.7: Added the 'initializer' and 'initargs'
     arguments.

     Alterado na versão 3.8: Default value of 'max_workers' is changed
     to ‘min(32, os.cpu_count() + 4)’.  This default value preserves at
     least 5 workers for I/O bound tasks.  It utilizes at most 32 CPU
     cores for CPU bound tasks which release the GIL. And it avoids
     using very large resources implicitly on many-core machines.

     ThreadPoolExecutor now reuses idle worker threads before starting
     'max_workers' worker threads too.

     Alterado na versão 3.13: Default value of 'max_workers' is changed
     to ‘min(32, (os.process_cpu_count() or 1) + 4)’.

* Menu:

* Exemplo de ThreadPoolExecutor::


File: python.info,  Node: Exemplo de ThreadPoolExecutor,  Up: ThreadPoolExecutor

5.18.5.3 Exemplo de ThreadPoolExecutor
......................................

     import concurrent.futures
     import urllib.request

     URLS = ['http://www.foxnews.com/',
             'http://www.cnn.com/',
             'http://europe.wsj.com/',
             'http://www.bbc.co.uk/',
             'http://nonexistent-subdomain.python.org/']

     # Retrieve a single page and report the URL and contents
     def load_url(url, timeout):
         with urllib.request.urlopen(url, timeout=timeout) as conn:
             return conn.read()

     # We can use a with statement to ensure threads are cleaned up promptly
     with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
         # Start the load operations and mark each future with its URL
         future_to_url = {executor.submit(load_url, url, 60): url for url in URLS}
         for future in concurrent.futures.as_completed(future_to_url):
             url = future_to_url[future]
             try:
                 data = future.result()
             except Exception as exc:
                 print('%r generated an exception: %s' % (url, exc))
             else:
                 print('%r page is %d bytes' % (url, len(data)))


File: python.info,  Node: ProcessPoolExecutor,  Next: Future Objects,  Prev: ThreadPoolExecutor,  Up: concurrent futures — Launching parallel tasks

5.18.5.4 ProcessPoolExecutor
............................

The *note ProcessPoolExecutor: 8f4. class is an *note Executor: 33c5.
subclass that uses a pool of processes to execute calls asynchronously.
*note ProcessPoolExecutor: 8f4. uses the *note multiprocessing: 94.
module, which allows it to side-step the *note Global Interpreter Lock:
148. but also means that only picklable objects can be executed and
returned.

The ‘__main__’ module must be importable by worker subprocesses.  This
means that *note ProcessPoolExecutor: 8f4. will not work in the
interactive interpreter.

Calling *note Executor: 33c5. or *note Future: 11f1. methods from a
callable submitted to a *note ProcessPoolExecutor: 8f4. will result in
deadlock.

Note that the restrictions on functions and arguments needing to
picklable as per *note multiprocessing.Process: b6f. apply when using
*note submit(): a8c. and *note map(): e0e. on a *note
ProcessPoolExecutor: 8f4.  A function defined in a REPL or a lambda
should not be expected to work.

 -- Classe: concurrent.futures.ProcessPoolExecutor (max_workers=None,
          mp_context=None, initializer=None, initargs=(),
          max_tasks_per_child=None)

     An *note Executor: 33c5. subclass that executes calls
     asynchronously using a pool of at most 'max_workers' processes.  If
     'max_workers' is ‘None’ or not given, it will default to *note
     os.process_cpu_count(): 1c4.  If 'max_workers' is less than or
     equal to ‘0’, then a *note ValueError: 202. will be raised.  On
     Windows, 'max_workers' must be less than or equal to ‘61’.  If it
     is not then *note ValueError: 202. will be raised.  If
     'max_workers' is ‘None’, then the default chosen will be at most
     ‘61’, even if more processors are available.  'mp_context' can be a
     *note multiprocessing: 94. context or ‘None’.  It will be used to
     launch the workers.  If 'mp_context' is ‘None’ or not given, the
     default *note multiprocessing: 94. context is used.  See *note
     Contextos e métodos de inicialização: 2c8.

     'initializer' is an optional callable that is called at the start
     of each worker process; 'initargs' is a tuple of arguments passed
     to the initializer.  Should 'initializer' raise an exception, all
     currently pending jobs will raise a *note BrokenProcessPool: 33cc,
     as well as any attempt to submit more jobs to the pool.

     'max_tasks_per_child' is an optional argument that specifies the
     maximum number of tasks a single process can execute before it will
     exit and be replaced with a fresh worker process.  By default
     'max_tasks_per_child' is ‘None’ which means worker processes will
     live as long as the pool.  When a max is specified, the “spawn”
     multiprocessing start method will be used by default in absence of
     a 'mp_context' parameter.  This feature is incompatible with the
     “fork” start method.

          Nota: Bugs have been reported when using the
          'max_tasks_per_child' feature that can result in the *note
          ProcessPoolExecutor: 8f4. hanging in some circumstances.
          Follow its eventual resolution in gh-115634(1).

     Alterado na versão 3.3: When one of the worker processes terminates
     abruptly, a *note BrokenProcessPool: 33cc. error is now raised.
     Previously, behaviour was undefined but operations on the executor
     or its futures would often freeze or deadlock.

     Alterado na versão 3.7: The 'mp_context' argument was added to
     allow users to control the start_method for worker processes
     created by the pool.

     Added the 'initializer' and 'initargs' arguments.

          Nota: The default *note multiprocessing: 94. start method (see
          *note Contextos e métodos de inicialização: 2c8.) will change
          away from 'fork' in Python 3.14.  Code that requires 'fork' be
          used for their *note ProcessPoolExecutor: 8f4. should
          explicitly specify that by passing a
          ‘mp_context=multiprocessing.get_context("fork")’ parameter.

     Alterado na versão 3.11: The 'max_tasks_per_child' argument was
     added to allow users to control the lifetime of workers in the
     pool.

     Alterado na versão 3.12: On POSIX systems, if your application has
     multiple threads and the *note multiprocessing: 94. context uses
     the ‘"fork"’ start method: The *note os.fork(): 197. function
     called internally to spawn workers may raise a *note
     DeprecationWarning: 1a5.  Pass a 'mp_context' configured to use a
     different start method.  See the *note os.fork(): 197.
     documentation for further explanation.

     Alterado na versão 3.13: 'max_workers' uses *note
     os.process_cpu_count(): 1c4. by default, instead of *note
     os.cpu_count(): 1c5.

* Menu:

* ProcessPoolExecutor Example::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/115634


File: python.info,  Node: ProcessPoolExecutor Example,  Up: ProcessPoolExecutor

5.18.5.5 ProcessPoolExecutor Example
....................................

     import concurrent.futures
     import math

     PRIMES = [
         112272535095293,
         112582705942171,
         112272535095293,
         115280095190773,
         115797848077099,
         1099726899285419]

     def is_prime(n):
         if n < 2:
             return False
         if n == 2:
             return True
         if n % 2 == 0:
             return False

         sqrt_n = int(math.floor(math.sqrt(n)))
         for i in range(3, sqrt_n + 1, 2):
             if n % i == 0:
                 return False
         return True

     def main():
         with concurrent.futures.ProcessPoolExecutor() as executor:
             for number, prime in zip(PRIMES, executor.map(is_prime, PRIMES)):
                 print('%d is prime: %s' % (number, prime))

     if __name__ == '__main__':
         main()


File: python.info,  Node: Future Objects,  Next: Module Functions,  Prev: ProcessPoolExecutor,  Up: concurrent futures — Launching parallel tasks

5.18.5.6 Future Objects
.......................

The *note Future: 11f1. class encapsulates the asynchronous execution of
a callable.  *note Future: 11f1. instances are created by *note
Executor.submit(): a8c.

 -- Classe: concurrent.futures.Future

     Encapsulates the asynchronous execution of a callable.  *note
     Future: 11f1. instances are created by *note Executor.submit():
     a8c. and should not be created directly except for testing.

      -- Método: cancel ()

          Attempt to cancel the call.  If the call is currently being
          executed or finished running and cannot be cancelled then the
          method will return ‘False’, otherwise the call will be
          cancelled and the method will return ‘True’.

      -- Método: cancelled ()

          Return ‘True’ if the call was successfully cancelled.

      -- Método: running ()

          Return ‘True’ if the call is currently being executed and
          cannot be cancelled.

      -- Método: done ()

          Return ‘True’ if the call was successfully cancelled or
          finished running.

      -- Método: result (timeout=None)

          Return the value returned by the call.  If the call hasn’t yet
          completed then this method will wait up to 'timeout' seconds.
          If the call hasn’t completed in 'timeout' seconds, then a
          *note TimeoutError: 838. will be raised.  'timeout' can be an
          int or float.  If 'timeout' is not specified or ‘None’, there
          is no limit to the wait time.

          If the future is cancelled before completing then *note
          CancelledError: 9e3. will be raised.

          If the call raised an exception, this method will raise the
          same exception.

      -- Método: exception (timeout=None)

          Return the exception raised by the call.  If the call hasn’t
          yet completed then this method will wait up to 'timeout'
          seconds.  If the call hasn’t completed in 'timeout' seconds,
          then a *note TimeoutError: 838. will be raised.  'timeout' can
          be an int or float.  If 'timeout' is not specified or ‘None’,
          there is no limit to the wait time.

          If the future is cancelled before completing then *note
          CancelledError: 9e3. will be raised.

          If the call completed without raising, ‘None’ is returned.

      -- Método: add_done_callback (fn)

          Attaches the callable 'fn' to the future.  'fn' will be
          called, with the future as its only argument, when the future
          is cancelled or finishes running.

          Added callables are called in the order that they were added
          and are always called in a thread belonging to the process
          that added them.  If the callable raises an *note Exception:
          9e2. subclass, it will be logged and ignored.  If the callable
          raises a *note BaseException: 5bb. subclass, the behavior is
          undefined.

          If the future has already completed or been cancelled, 'fn'
          will be called immediately.

     The following *note Future: 11f1. methods are meant for use in unit
     tests and *note Executor: 33c5. implementations.

      -- Método: set_running_or_notify_cancel ()

          This method should only be called by *note Executor: 33c5.
          implementations before executing the work associated with the
          *note Future: 11f1. and by unit tests.

          If the method returns ‘False’ then the *note Future: 11f1. was
          cancelled, i.e.  *note Future.cancel(): 33cf. was called and
          returned ‘True’.  Any threads waiting on the *note Future:
          11f1. completing (i.e.  through *note as_completed(): 173e. or
          *note wait(): 198e.) will be woken up.

          If the method returns ‘True’ then the *note Future: 11f1. was
          not cancelled and has been put in the running state, i.e.
          calls to *note Future.running(): 33d1. will return ‘True’.

          This method can only be called once and cannot be called after
          *note Future.set_result(): 33d7. or *note
          Future.set_exception(): 33d8. have been called.

      -- Método: set_result (result)

          Sets the result of the work associated with the *note Future:
          11f1. to 'result'.

          This method should only be used by *note Executor: 33c5.
          implementations and unit tests.

          Alterado na versão 3.8: This method raises *note
          concurrent.futures.InvalidStateError: 16f7. if the *note
          Future: 11f1. is already done.

      -- Método: set_exception (exception)

          Sets the result of the work associated with the *note Future:
          11f1. to the *note Exception: 9e2. 'exception'.

          This method should only be used by *note Executor: 33c5.
          implementations and unit tests.

          Alterado na versão 3.8: This method raises *note
          concurrent.futures.InvalidStateError: 16f7. if the *note
          Future: 11f1. is already done.


File: python.info,  Node: Module Functions,  Next: Exception classes,  Prev: Future Objects,  Up: concurrent futures — Launching parallel tasks

5.18.5.7 Module Functions
.........................

 -- Função: concurrent.futures.wait (fs, timeout=None,
          return_when=ALL_COMPLETED)

     Wait for the *note Future: 11f1. instances (possibly created by
     different *note Executor: 33c5. instances) given by 'fs' to
     complete.  Duplicate futures given to 'fs' are removed and will be
     returned only once.  Returns a named 2-tuple of sets.  The first
     set, named ‘done’, contains the futures that completed (finished or
     cancelled futures) before the wait completed.  The second set,
     named ‘not_done’, contains the futures that did not complete
     (pending or running futures).

     'timeout' can be used to control the maximum number of seconds to
     wait before returning.  'timeout' can be an int or float.  If
     'timeout' is not specified or ‘None’, there is no limit to the wait
     time.

     'return_when' indica quando esta função deve retornar.  Ele deve
     ser uma das seguintes constantes:

     Constante                                              Descrição
                                                            
     --------------------------------------------------------------------------------------------------------------
                                                            
      -- Dado: concurrent.futures.FIRST_COMPLETED           A função irá retornar quando qualquer futuro
                                                            terminar ou for cancelado.
                                                            
                                                            
      -- Dado: concurrent.futures.FIRST_EXCEPTION           The function will return when any future finishes by
                                                            raising an exception.  If no future raises an
                                                            exception then it is equivalent to
                                                            *note ALL_COMPLETED: 33dc.
                                                            
                                                            
      -- Dado: concurrent.futures.ALL_COMPLETED             A função irá retornar quando todos os futuros
                                                            encerrarem ou forem cancelados.
                                                            

 -- Função: concurrent.futures.as_completed (fs, timeout=None)

     Returns an iterator over the *note Future: 11f1. instances
     (possibly created by different *note Executor: 33c5. instances)
     given by 'fs' that yields futures as they complete (finished or
     cancelled futures).  Any futures given by 'fs' that are duplicated
     will be returned once.  Any futures that completed before *note
     as_completed(): 173e. is called will be yielded first.  The
     returned iterator raises a *note TimeoutError: 838. if *note
     __next__(): 1310. is called and the result isn’t available after
     'timeout' seconds from the original call to *note as_completed():
     173e.  'timeout' can be an int or float.  If 'timeout' is not
     specified or ‘None’, there is no limit to the wait time.

Ver também
..........

PEP 3148(1) – futures - execute computations asynchronously

     The proposal which described this feature for inclusion in the
     Python standard library.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3148/


File: python.info,  Node: Exception classes,  Prev: Module Functions,  Up: concurrent futures — Launching parallel tasks

5.18.5.8 Exception classes
..........................

 -- Exceção: concurrent.futures.CancelledError

     Raised when a future is cancelled.

 -- Exceção: concurrent.futures.TimeoutError

     A deprecated alias of *note TimeoutError: 838, raised when a future
     operation exceeds the given timeout.

     Alterado na versão 3.11: Esta classe foi feita como um apelido de
     *note TimeoutError: 838.

 -- Exceção: concurrent.futures.BrokenExecutor

     Derived from *note RuntimeError: 195, this exception class is
     raised when an executor is broken for some reason, and cannot be
     used to submit or execute new tasks.

     Adicionado na versão 3.7.

 -- Exceção: concurrent.futures.InvalidStateError

     Raised when an operation is performed on a future that is not
     allowed in the current state.

     Adicionado na versão 3.8.

 -- Exceção: concurrent.futures.thread.BrokenThreadPool

     Derived from *note BrokenExecutor: 33df, this exception class is
     raised when one of the workers of a *note ThreadPoolExecutor: 742.
     has failed initializing.

     Adicionado na versão 3.7.

 -- Exceção: concurrent.futures.process.BrokenProcessPool

     Derived from *note BrokenExecutor: 33df. (formerly *note
     RuntimeError: 195.), this exception class is raised when one of the
     workers of a *note ProcessPoolExecutor: 8f4. has terminated in a
     non-clean fashion (for example, if it was killed from the outside).

     Adicionado na versão 3.3.


File: python.info,  Node: subprocess — Gerenciamento de subprocessos,  Next: sched — Agendador de eventos,  Prev: concurrent futures — Launching parallel tasks,  Up: Execução Concorrente

5.18.6 ‘subprocess’ — Gerenciamento de subprocessos
---------------------------------------------------

'Código-fonte:' Lib/subprocess.py(1)

__________________________________________________________________

O módulo *note subprocess: d6. permite que você crie novos processos,
conecte-se aos seus canais de entrada/saída/erro e obtenha seus códigos
de retorno.  Este módulo pretende substituir vários módulos e funções
mais antigos:

     os.system
     os.spawn*

Informações sobre como o módulo *note subprocess: d6. pode ser usado
para substituir esses módulos e funções podem ser encontradas nas seções
a seguir.

Ver também
..........

PEP 324(2) – PEP propondo o módulo subprocess

*note Disponibilidade: 1ed8.: not Android, not iOS, not WASI.

Este módulo não tem suporte em *note plataformas móveis: 1fde. ou *note
plataformas WebAssembly: 18f5.

* Menu:

* Usando o módulo subprocess::
* Considerações de Segurança::
* Objetos Popen::
* Windows Popen Helpers::
* API de alto nível mais antiga::
* Replacing Older Functions with the subprocess Module::
* Legacy Shell Invocation Functions::
* Notas: Notas<2>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/subprocess.py

   (2) https://peps.python.org/pep-0324/


File: python.info,  Node: Usando o módulo subprocess,  Next: Considerações de Segurança,  Up: subprocess — Gerenciamento de subprocessos

5.18.6.1 Usando o módulo ‘subprocess’
.....................................

A abordagem recomendada para invocar subprocessos é usar a função *note
run(): b9e. para todos os casos de uso que ela pode manipular.  Para
casos de uso mais avançados, a interface subjacente *note Popen: 199.
pode ser usada diretamente.

 -- Função: subprocess.run (args, *, stdin=None, input=None,
          stdout=None, stderr=None, capture_output=False, shell=False,
          cwd=None, timeout=None, check=False, encoding=None,
          errors=None, text=None, env=None, universal_newlines=None,
          **other_popen_kwargs)

     Executa o comando descrito por 'args'.  Aguarda a conclusão do
     comando e retorna uma instância de *note CompletedProcess: ea2.

     Os argumentos mostrados acima são meramente os mais comuns,
     descritos abaixo em *note Argumentos usados frequentemente: 33e4.
     (daí o uso de notação somente-nomeado na assinatura abreviada).  A
     assinatura da função completa é basicamente a mesma do construtor
     *note Popen: 199. - a maioria dos argumentos para esta função são
     passados para aquela interface.  ('timeout', 'input', 'check' e
     'capture_output' não são.)

     Se 'capture_output' for verdadeiro, 'stdout' e 'stderr' serão
     capturados.  Quando usado, o objeto interno *note Popen: 199. é
     automaticamente criado com 'stdout' and 'stderr' definidos como
     *note PIPE: b9f.  Os argumentos 'stdout * e *stderr' não podem ser
     fornecidos ao mesmo tempo que 'capture_output'.  Se você deseja
     capturar e combinar ambos os fluxos em um, defina 'stdout' para
     *note PIPE: b9f. e 'stderr' para *note STDOUT: 33e5, ao invés de
     usar 'capture_output'.

     Um 'timeout' pode ser especificado em segundos, ele é passado
     internamente para *note Popen.communicate(): 15cd.  Se o tempo
     limite expirar, o processo filho será eliminado e aguardado.  A
     exceção *note TimeoutExpired: 15ce. será levantada novamente após o
     término do processo filho.  A criação inicial do processo em si não
     pode ser interrompida em muitas APIs de plataforma, portanto, não
     há garantia de que você verá uma exceção de tempo limite até, pelo
     menos, o tempo que a criação do processo demorar.

     O argumento 'input' é passado para *note Popen.communicate(): 15cd.
     e, portanto, para o stdin do subprocesso.  Se usado, deve ser uma
     sequência de bytes ou uma string se 'encoding' ou 'errors' forem
     especificados ou 'text' for verdadeiro.  Quando usado, o objeto
     internal *note Popen: 199. é automaticamente criado com *note PIPE:
     b9f, e o argumento 'stdin' também não pode ser usado.

     Se 'check' for verdadeiro, e o processo sair com um código de saída
     diferente de zero, uma exceção *note CalledProcessError: 1369. será
     levantada.  Os atributos dessa exceção contêm os argumentos, o
     código de saída e stdout e stderr se eles foram capturados.

     Se 'encoding' ou 'errors' forem especificados, ou 'text' for
     verdadeiro, os objetos arquivo para stdin, stdout e stderr são
     abertos em modo de texto usando a 'encoding' e 'errors'
     especificados ou o *note io.TextIOWrapper: 7bc. padrão.  O
     argumento 'universal_newlines' é equivalente a 'text' e é fornecido
     para compatibilidade com versões anteriores.  Por padrão, os
     objetos arquivo são abertos no modo binário.

     Se 'env' não for ‘None’, deve ser um mapeamento que defina as
     variáveis de ambiente para o novo processo; elas são usadas em vez
     do comportamento padrão de herdar o ambiente do processo atual.  É
     passado diretamente para *note Popen: 199.  Este mapeamento pode
     ser str para str em qualquer plataforma ou bytes para bytes em
     plataformas POSIX como *note os.environ: 11f9. ou *note
     os.environb: 1257.

     Exemplos:

          >>> subprocess.run(["ls", "-l"])  # não captura a saída
          CompletedProcess(args=['ls', '-l'], returncode=0)

          >>> subprocess.run("exit 1", shell=True, check=True)
          Traceback (most recent call last):
            ...
          subprocess.CalledProcessError: Command 'exit 1' returned non-zero exit status 1

          >>> subprocess.run(["ls", "-l", "/dev/null"], capture_output=True)
          CompletedProcess(args=['ls', '-l', '/dev/null'], returncode=0,
          stdout=b'crw-rw-rw- 1 root root 1, 3 Jan 23 16:23 /dev/null\n', stderr=b'')

     Adicionado na versão 3.5.

     Alterado na versão 3.6: Adicionados os parâmetros 'encoding' e
     'errors'.

     Alterado na versão 3.7: Adicionado o parâmetro 'text', como um
     apelido mais compreensível que 'universal_newlines'.  Adicionado o
     parâmetro 'capture_output'.

     Alterado na versão 3.12: Ordem de pesquisa do shell do Windows
     alterada para ‘shell=True’.  O diretório atual e ‘%PATH%’ são
     substituídos por ‘%COMSPEC%’ e ‘%SystemRoot%\System32\cmd.exe’.
     Como resultado, colocar um programa malicioso chamado ‘cmd.exe’ em
     um diretório atual não funciona mais.

 -- Classe: subprocess.CompletedProcess

     O valor de retorno de *note run(): b9e, representando um processo
     que foi concluído.

      -- Atributo: args

          Os argumentos usados para iniciar o processo.  Pode ser uma
          lista ou uma string.

      -- Atributo: returncode

          Status de saída do processo filho.  Normalmente, um status de
          saída 0 indica que foi executado com êxito.

          Um valor negativo ‘-N’ indica que o filho foi terminado pelo
          sinal ‘N’ (POSIX apenas).

      -- Atributo: stdout

          Stdout capturado do processo filho.  Uma sequência de bytes ou
          uma string se *note run(): b9e. foi chamada com uma
          codificação, erros ou text=True.  ‘None’ se stdout não foi
          capturado.

          Se você executou o processo com ‘stderr=subprocess.STDOUT’,
          stdout e stderr serão combinados neste atributo, e *note
          stderr: 33e9. será ‘None’.

      -- Atributo: stderr

          Stderr capturado do processo filho.  Uma sequência de bytes ou
          uma string se *note run(): b9e. foi chamada com uma
          codificação, erros ou text=True.  ‘None’ se stderr não foi
          capturado.

      -- Método: check_returncode ()

          Se *note returncode: 33e7. é diferente de zero, levantar um
          *note CalledProcessError: 1369.

     Adicionado na versão 3.5.

 -- Dado: subprocess.DEVNULL

     Valor especial que pode ser usado como o argumento 'stdin',
     'stdout' ou 'stderr' para *note Popen: 199. e indica que o arquivo
     especial *note os.devnull: 1bab. será usado.

     Adicionado na versão 3.3.

 -- Dado: subprocess.PIPE

     Valor especial que pode ser usado como o argumento 'stdin',
     'stdout' ou 'stderr' para *note Popen: 199. e indica que um
     encadeamento para o fluxo padrão deve ser aberto.  Mais útil com
     *note Popen.communicate(): 15cd.

 -- Dado: subprocess.STDOUT

     Valor especial que pode ser usado como o argumento 'stderr' para
     *note Popen: 199. e indica que o erro padrão deve ir para o mesmo
     manipulador que a saída padrão.

 -- Exceção: subprocess.SubprocessError

     Classe base para todas as outras exceções deste módulo.

     Adicionado na versão 3.3.

 -- Exceção: subprocess.TimeoutExpired

     Subclasse de *note SubprocessError: 33eb, levantada quando um tempo
     limite expira enquanto espera por um processo filho.

      -- Atributo: cmd

          Comando que foi usado para gerar o processo filho.

      -- Atributo: timeout

          Tempo limite em segundos.

      -- Atributo: output

          Saída do processo filho se ele foi capturado por *note run():
          b9e. ou *note check_output(): ff6.  Caso contrário, ‘None’.
          Isto é sempre *note bytes: 1c2. quando qualquer saída foi
          capturada independente da configuração ‘text=True’.  Pode
          permanecer ‘None’ em vez de ‘b''’ quando nenhuma saída foi
          observada.

      -- Atributo: stdout

          Apelido para a saída, para simetria com *note stderr: 33f0.

      -- Atributo: stderr

          Saída de stderr do processo filho se ele foi capturado por
          *note run(): b9e.  Caso contrário, ‘None’.  Isto é sempre
          *note bytes: 1c2. quando a saída de stderr foi capturada
          independente da configuração ‘text=True’.  Pode permanecer
          ‘None’ em vez de ‘b''’ quando nenhuma saída de stderr foi
          observada.

     Adicionado na versão 3.3.

     Alterado na versão 3.5: Adicionados os atributos 'stdout' e
     'stderr'

 -- Exceção: subprocess.CalledProcessError

     Subclasse de *note SubprocessError: 33eb, levantada quando um
     processo executado por *note check_call(): 33f1, *note
     check_output(): ff6. ou *note run(): b9e. (com ‘check=True’)
     retorna um status de saída diferente de zero.

      -- Atributo: returncode

          Status de saída do processo filho.  Se o processo foi
          encerrado devido a um sinal, este será o número do sinal
          negativo.

      -- Atributo: cmd

          Comando que foi usado para gerar o processo filho.

      -- Atributo: output

          Saída do processo filho se ele foi capturado por *note run():
          b9e. ou *note check_output(): ff6.  Caso contrário, ‘None’.

      -- Atributo: stdout

          Apelido para a saída, para simetria com *note stderr: 33f6.

      -- Atributo: stderr

          Saída stderr do processo filho se ele foi capturado por *note
          run(): b9e.  Caso contrário, ‘None’.

     Alterado na versão 3.5: Adicionados os atributos 'stdout' e
     'stderr'

* Menu:

* Argumentos usados frequentemente::
* Construtor Popen::
* Exceções: Exceções<11>.


File: python.info,  Node: Argumentos usados frequentemente,  Next: Construtor Popen,  Up: Usando o módulo subprocess

5.18.6.2 Argumentos usados frequentemente
.........................................

Para suportar uma ampla variedade de casos de uso, o construtor *note
Popen: 199. (e as funções de conveniência) aceita muitos argumentos
opcionais.  Para a maioria dos casos de uso típicos, muitos desses
argumentos podem ser seguramente deixados em seus valores padrão.  Os
argumentos mais comumente necessários são:

     'args' é necessário para todas as chamadas e deve ser uma string ou
     uma sequência de argumentos do programa.  Fornecer uma sequência de
     argumentos geralmente é preferível, pois permite que o módulo cuide
     de qualquer escape e aspas em argumentos que forem necessários (por
     exemplo, para permitir espaços em nomes de arquivo).  Se for
     passada uma única string, 'shell' deve ser *note True: c27. (veja
     abaixo) ou então a string deve apenas nomear o programa a ser
     executado sem especificar nenhum argumento.

     'stdin', 'stdout' e 'stderr' especificam a entrada padrão, a saída
     padrão e a saída de erro do programa executado, respectivamente.
     Os valores válidos são ‘None’, *note PIPE: b9f, *note DEVNULL:
     118d, um descritor de arquivo existente (um número inteiro
     positivo) e um *note objeto arquivo: 1203. existente com um
     descritor de arquivo válido.  Com as configurações padrão de
     ‘None’, nenhum redirecionamento ocorrerá.  *note PIPE: b9f. indica
     que um novo canal para o filho deve ser criado.  *note DEVNULL:
     118d. indica que o arquivo especial *note os.devnull: 1bab. será
     usado.  Além disso, 'stderr' pode ser *note STDOUT: 33e5, o que
     indica que os dados de stderr do processo filho devem ser
     capturados no mesmo identificador de arquivo que para 'stdout'.

     Se 'encoding' ou 'errors' forem especificados, ou 'text' (também
     conhecido como 'universal_newlines') for verdadeiro, os objetos
     arquivo 'stdin', 'stdout' e 'stderr' serão abertos em modo de texto
     usando a 'encoding' e 'errors' especificados na chamada ou os
     valores padrão para *note io.TextIOWrapper: 7bc.

     Para 'stdin', os caracteres de fim de linha ‘'\n'’ na entrada serão
     convertidos para o separador de linha padrão *note os.linesep:
     2311.  Para 'stdout' e 'stderr', todas as terminações de linha na
     saída serão convertidas para ‘'\n'’.  Para obter mais informações,
     consulte a documentação da classe *note io.TextIOWrapper: 7bc.
     quando o argumento 'newline' para seu construtor é ‘None’.

     Se o modo de texto não for usado, 'stdin', 'stdout' e 'stderr'
     serão abertos como fluxos binários.  Nenhuma codificação ou
     conversão de final de linha é executada.

     Alterado na versão 3.6: Adicionados os parâmetros 'encoding' e
     'errors'.

     Alterado na versão 3.7: Adicionado o parâmetro 'text' como um
     apelido para 'universal_newlines'.

          Nota: O atributo newlines dos objetos arquivo *note
          Popen.stdin: 33f8, *note Popen.stdout: 33f9. e *note
          Popen.stderr: 33fa. não são atualizados pelo método *note
          Popen.communicate(): 15cd.

     Se 'shell' for ‘True’, o comando especificado será executado
     através do shell.  Isso pode ser útil se você estiver usando Python
     principalmente para o fluxo de controle aprimorado que ele oferece
     sobre a maioria dos shells do sistema e ainda deseja acesso
     conveniente a outros recursos do shell, como canais de shell,
     caracteres curinga de nome de arquivo, expansão de variável de
     ambiente e expansão de ‘~’ para o diretório inicial de um usuário.
     No entanto, observe que o próprio Python oferece implementações de
     muitos recursos semelhantes a shell (em particular, *note glob: 64,
     *note fnmatch: 5c, *note os.walk(): 4a9, *note
     os.path.expandvars(): 1420, *note os.path.expanduser(): a1e. e
     *note shutil: c5.).

     Alterado na versão 3.3: Quando 'universal_newlines' é ‘True’, a
     classe usa a codificação *note locale.getpreferredencoding(False):
     53a. em vez de ‘locale.getpreferredencoding()’.  Veja a classe
     *note io.TextIOWrapper: 7bc. para mais informações sobre esta
     alteração.

          Nota: Leia a seção *note Security Considerations: 33fb. antes
          de usar ‘shell=True’.

Essas opções, junto com todas as outras opções, são descritas em mais
detalhes na documentação do construtor *note Popen: 199.


File: python.info,  Node: Construtor Popen,  Next: Exceções<11>,  Prev: Argumentos usados frequentemente,  Up: Usando o módulo subprocess

5.18.6.3 Construtor Popen
.........................

A criação e gerenciamento do processo subjacente neste módulo é
manipulado pela classe *note Popen: 199.  Ela oferece muita
flexibilidade para que os desenvolvedores sejam capazes de lidar com os
casos menos comuns não cobertos pelas funções de conveniência.

 -- Classe: subprocess.Popen (args, bufsize=-1, executable=None,
          stdin=None, stdout=None, stderr=None, preexec_fn=None,
          close_fds=True, shell=False, cwd=None, env=None,
          universal_newlines=None, startupinfo=None, creationflags=0,
          restore_signals=True, start_new_session=False, pass_fds=(), *,
          group=None, extra_groups=None, user=None, umask=-1,
          encoding=None, errors=None, text=None, pipesize=-1,
          process_group=None)

     Executa um programa filho em um novo processo.  No POSIX, a classe
     usa o comportamento de *note os.execvpe(): 2d9b. para executar o
     programa filho.  No Windows, a classe usa a função Windows
     ‘CreateProcess()’.  Os argumentos para *note Popen: 199. são os
     seguintes.

     'args' deve ser uma sequência de argumentos do programa ou então
     uma única string ou *note objeto caminho ou similar: 2a0.  Por
     padrão, o programa a ser executado é o primeiro item em 'args' se
     'args' for uma sequência.  Se 'args' for uma string, a
     interpretação depende da plataforma e é descrita abaixo.  Consulte
     os argumentos 'shell' e 'executable' para obter diferenças
     adicionais em relação ao comportamento padrão.  Salvo indicação em
     contrário, é recomendado passar 'args' como uma sequência.

          Aviso: Para confiabilidade máxima, use um caminho totalmente
          qualificado para o executável.  Para procurar um nome não
          qualificado no ‘PATH’, use *note shutil.which(): 4b4.  Em
          todas as plataformas, passar *note sys.executable: 3b8. é a
          maneira recomendada de relançar o interpretador Python atual,
          e usar o formato de linha de comando ‘-m’ para iniciar um
          módulo instalado.

          Resolver o caminho do executável (ou o primeiro item de
          'args') depende da plataforma.  Para POSIX, veja *note
          os.execvpe(): 2d9b, e note que ao resolver ou procurar o
          caminho do executável, 'cwd' substitui o diretório de trabalho
          atual e 'env' pode substituir a variável de ambiente ‘PATH’.
          Para Windows, veja a documentação dos parâmetros
          ‘lpApplicationName’ e ‘lpCommandLine’ do WinAPI
          ‘CreateProcess’, e note que ao resolver ou procurar o caminho
          do executável com ‘shell=False’, 'cwd' não substitui o
          diretório de trabalho atual e 'env' não pode substituir a
          variável de ambiente ‘PATH’.  Usar um caminho completo evita
          todas essas variações.

     Um exemplo de passagem de alguns argumentos para um programa
     externo como uma sequência é:

          Popen(["/usr/bin/git", "commit", "-m", "Fixes a bug."])

     No POSIX, se 'args' for uma string, a string é interpretada como o
     nome ou caminho do programa a ser executado.  No entanto, isso só
     pode ser feito se não forem passados argumentos para o programa.

          Nota: Pode não ser óbvio como quebrar um comando shell em uma
          sequência de argumentos, especialmente em casos complexos.
          *note shlex.split(): 53c. pode ilustrar como determinar a
          tokenização correta para 'args':

               >>> import shlex, subprocess
               >>> command_line = input()
               /bin/vikings -input eggs.txt -output "spam spam.txt" -cmd "echo '$MONEY'"
               >>> args = shlex.split(command_line)
               >>> print(args)
               ['/bin/vikings', '-input', 'eggs.txt', '-output', 'spam spam.txt', '-cmd', "echo '$MONEY'"]
               >>> p = subprocess.Popen(args) # Successo!

          Observe em particular que as opções (como '-input') e
          argumentos (como 'eggs.txt') que são separados por espaços em
          branco no shell vão em elementos de lista separados, enquanto
          os argumentos que precisam de aspas ou escape de contrabarra
          quando usados no shell (como nomes de arquivos contendo
          espaços ou o comando 'echo' mostrado acima) são um único
          elemento de lista.

     No Windows, se 'args' for uma sequência, será convertido em uma
     string da maneira descrita em *note Converter uma sequência de
     argumentos em uma string no Windows: 33fd.  Isso ocorre porque o
     ‘CreateProcess()’ subjacente opera em strings.

     Alterado na versão 3.6: O parâmetro 'args' aceita um *note objeto
     caminho ou similar: 2a0. se 'shell' é ‘False’ e uma sequência
     contendo objetos caminho ou similares no POSIX.

     Alterado na versão 3.8: O parâmetro 'args' aceita um *note objeto
     caminho ou similar: 2a0. se 'shell' for ‘False’ e uma sequência
     contendo bytes e objetos caminho ou similares no Windows.

     O argumento 'shell' (que por padrão é ‘False’) especifica se deve
     usar o 'shell' como o programa a ser executado.  Se 'shell' for
     ‘True’, é recomendado passar 'args' como uma string em vez de uma
     sequência.

     Em POSIX com ‘shell=True’, o 'shell' padrão é ‘/bin/sh’.  Se 'args'
     for uma string, a 'string' especifica o comando a ser executado
     através do 'shell'.  Isso significa que a 'string' deve ser
     formatada exatamente como seria ao ser digitada no prompt do
     'shell'.  Isso inclui, por exemplo, citar ou escapar com
     contrabarra nomes de arquivos que contenham espaços.  Se 'args' for
     uma sequência, o primeiro item especifica a 'string' do comando, e
     quaisquer itens adicionais serão tratados como argumentos
     adicionais para o próprio 'shell'.  Ou seja, *note Popen: 199. faz
     o equivalente a:

          Popen(['/bin/sh', '-c', args[0], args[1], ...])

     No Windows com ‘shell=True’, a variável de ambiente ‘COMSPEC’
     especifica o shell padrão.  A única vez que você precisa
     especificar ‘shell=True’ no Windows é quando o comando que você
     deseja executar é construído no shell (por exemplo, ‘dir’ ou
     ‘copy’).  Você não precisa de ‘shell=True’ para executar um arquivo
     em lote ou executável baseado em console.

          Nota: Leia a seção *note Security Considerations: 33fb. antes
          de usar ‘shell=True’.

     'bufsize' será fornecido como o argumento correspondente à função
     *note open(): 51c. ao criar os objetos arquivo de encadeamento
     stdin/stdout/stderr:

        - ‘0’ significa sem buffer (leitura e gravação são uma chamada
          de sistema e podem retornar curto)

        - ‘1’ significa buffer de linha (utilizável somente se
          ‘text=True’ ou ‘universal_newlines=True’)

        - qualquer outro valor positivo significa usar um buffer de
          aproximadamente esse tamanho

        - bufsize negativo (o padrão) significa que o padrão do sistema
          io.DEFAULT_BUFFER_SIZE será usado.

     Alterado na versão 3.3.1: 'bufsize' agora assume o padrão -1 para
     habilitar o buffer por padrão para corresponder ao comportamento
     que a maioria dos códigos espera.  Em versões anteriores ao Python
     3.2.4 e 3.3.1, ele assumia incorretamente o padrão ‘0’, que não
     tinha buffer e permitia leituras curtas.  Isso não foi intencional
     e não correspondeu ao comportamento do Python 2, como a maioria dos
     códigos esperava.

     O argumento 'executable' especifica um programa de substituição
     para executar.  Ele é muito raramente necessário.  Quando
     ‘shell=False’, 'executable' substitui o programa a ser executado
     especificado por 'args'.  No entanto, o 'args' original ainda é
     passado para o programa.  A maioria dos programas trata o programa
     especificado por 'args' como o nome do comando, que pode então ser
     diferente do programa realmente executado.  No POSIX, o nome 'args'
     se torna o nome de exibição para o executável em utilitários como
     ‘ps’.  Se ‘shell=True’, no POSIX o argumento 'executable'
     especifica um shell de substituição para o padrão ‘/bin/sh’.

     Alterado na versão 3.6: O parâmetro 'executable' aceita um *note
     objeto caminho ou similar: 2a0. no POSIX.

     Alterado na versão 3.8: O parâmetro 'executable' aceita um *note
     objeto caminho ou similar: 2a0. bytes no Windows.

     Alterado na versão 3.12: Ordem de pesquisa do shell do Windows
     alterada para ‘shell=True’.  O diretório atual e ‘%PATH%’ são
     substituídos por ‘%COMSPEC%’ e ‘%SystemRoot%\System32\cmd.exe’.
     Como resultado, colocar um programa malicioso chamado ‘cmd.exe’ em
     um diretório atual não funciona mais.

     'stdin', 'stdout' e 'stderr' especificam a entrada padrão, a saída
     padrão e a saída de erro do programa executado, respectivamente.
     Os valores válidos são ‘None’, *note PIPE: b9f, *note DEVNULL:
     118d, um descritor de arquivo existente (um número inteiro
     positivo) e um *note objeto arquivo: 1203. existente com um
     descritor de arquivo válido.  Com as configurações padrão de
     ‘None’, nenhum redirecionamento ocorrerá.  *note PIPE: b9f. indica
     que um novo canal para o filho deve ser criado.  *note DEVNULL:
     118d. indica que o arquivo especial *note os.devnull: 1bab. será
     usado.  Além disso, 'stderr' pode ser *note STDOUT: 33e5, o que
     indica que os dados de stderr da aplicação devem ser capturados no
     mesmo identificador de arquivo que para 'stdout'.

     Se 'preexec_fn' for definido como um objeto chamável, esse objeto
     será chamado no processo filho pouco antes de o filho ser
     executado.  (Somente POSIX)

          Aviso: O parâmetro 'preexec_fn' NÃO É SEGURO para uso na
          presença de threads em sua aplicação.  O processo filho pode
          travar antes de exec ser chamado.

          Nota: Se você precisar modificar o ambiente para o filho, use
          o parâmetro 'env' em vez de fazer isso em um 'preexec_fn'.  Os
          parâmetros 'start_new_session' e 'process_group' devem tomar o
          lugar do código usando 'preexec_fn' para chamar *note
          os.setsid(): 1b4c. ou *note os.setpgid(): 2cff. no filho.

     Alterado na versão 3.8: O parâmetro 'preexec_fn' não é mais
     suportado em subinterpretadores.  O uso do parâmetro em um
     subinterpretador levanta *note RuntimeError: 195.  A nova restrição
     pode afetar aplicações que são implantadas em mod_wsgi, uWSGI e
     outros ambientes incorporados.

     If 'close_fds' is true, all file descriptors except ‘0’, ‘1’ and
     ‘2’ will be closed before the child process is executed.  Otherwise
     when 'close_fds' is false, file descriptors obey their inheritable
     flag as described in *note Herança de descritores de arquivos: f2b.

     On Windows, if 'close_fds' is true then no handles will be
     inherited by the child process unless explicitly passed in the
     ‘handle_list’ element of *note STARTUPINFO.lpAttributeList: c28, or
     by standard handle redirection.

     Alterado na versão 3.2: The default for 'close_fds' was changed
     from *note False: b49. to what is described above.

     Alterado na versão 3.7: On Windows the default for 'close_fds' was
     changed from *note False: b49. to *note True: c27. when redirecting
     the standard handles.  It’s now possible to set 'close_fds' to
     *note True: c27. when redirecting the standard handles.

     'pass_fds' is an optional sequence of file descriptors to keep open
     between the parent and child.  Providing any 'pass_fds' forces
     'close_fds' to be *note True: c27.  (POSIX only)

     Alterado na versão 3.2: O parâmetro 'pass_fds' foi adicionado.

     If 'cwd' is not ‘None’, the function changes the working directory
     to 'cwd' before executing the child.  'cwd' can be a string, bytes
     or *note path-like: 2a0. object.  On POSIX, the function looks for
     'executable' (or for the first item in 'args') relative to 'cwd' if
     the executable path is a relative path.

     Alterado na versão 3.6: 'cwd' parameter accepts a *note path-like
     object: 2a0. on POSIX.

     Alterado na versão 3.7: 'cwd' parameter accepts a *note path-like
     object: 2a0. on Windows.

     Alterado na versão 3.8: 'cwd' parameter accepts a bytes object on
     Windows.

     If 'restore_signals' is true (the default) all signals that Python
     has set to SIG_IGN are restored to SIG_DFL in the child process
     before the exec.  Currently this includes the SIGPIPE, SIGXFZ and
     SIGXFSZ signals.  (POSIX only)

     Alterado na versão 3.2: 'restore_signals' foi adicionado.

     If 'start_new_session' is true the ‘setsid()’ system call will be
     made in the child process prior to the execution of the subprocess.

     *note Disponibilidade: 1ed8.: POSIX

     Alterado na versão 3.2: 'start_new_session' foi adicionado.

     If 'process_group' is a non-negative integer, the ‘setpgid(0,
     value)’ system call will be made in the child process prior to the
     execution of the subprocess.

     *note Disponibilidade: 1ed8.: POSIX

     Alterado na versão 3.11: 'process_group' was added.

     If 'group' is not ‘None’, the setregid() system call will be made
     in the child process prior to the execution of the subprocess.  If
     the provided value is a string, it will be looked up via *note
     grp.getgrnam(): 33fe. and the value in ‘gr_gid’ will be used.  If
     the value is an integer, it will be passed verbatim.  (POSIX only)

     *note Disponibilidade: 1ed8.: POSIX

     Adicionado na versão 3.9.

     If 'extra_groups' is not ‘None’, the setgroups() system call will
     be made in the child process prior to the execution of the
     subprocess.  Strings provided in 'extra_groups' will be looked up
     via *note grp.getgrnam(): 33fe. and the values in ‘gr_gid’ will be
     used.  Integer values will be passed verbatim.  (POSIX only)

     *note Disponibilidade: 1ed8.: POSIX

     Adicionado na versão 3.9.

     If 'user' is not ‘None’, the setreuid() system call will be made in
     the child process prior to the execution of the subprocess.  If the
     provided value is a string, it will be looked up via *note
     pwd.getpwnam(): 33ff. and the value in ‘pw_uid’ will be used.  If
     the value is an integer, it will be passed verbatim.  (POSIX only)

     *note Disponibilidade: 1ed8.: POSIX

     Adicionado na versão 3.9.

     If 'umask' is not negative, the umask() system call will be made in
     the child process prior to the execution of the subprocess.

     *note Disponibilidade: 1ed8.: POSIX

     Adicionado na versão 3.9.

     If 'env' is not ‘None’, it must be a mapping that defines the
     environment variables for the new process; these are used instead
     of the default behavior of inheriting the current process’
     environment.  This mapping can be str to str on any platform or
     bytes to bytes on POSIX platforms much like *note os.environ: 11f9.
     or *note os.environb: 1257.

          Nota: If specified, 'env' must provide any variables required
          for the program to execute.  On Windows, in order to run a
          side-by-side assembly(1) the specified 'env' 'must' include a
          valid ‘%SystemRoot%’.

     If 'encoding' or 'errors' are specified, or 'text' is true, the
     file objects 'stdin', 'stdout' and 'stderr' are opened in text mode
     with the specified 'encoding' and 'errors', as described above in
     *note Argumentos usados frequentemente: 33e4.  The
     'universal_newlines' argument is equivalent to 'text' and is
     provided for backwards compatibility.  By default, file objects are
     opened in binary mode.

     Adicionado na versão 3.6: 'encoding' e 'errors' foram adicionados.

     Adicionado na versão 3.7: 'text' foi adicionado como um atalho mais
     legível para 'universal_newlines'.

     If given, 'startupinfo' will be a *note STARTUPINFO: 3400. object,
     which is passed to the underlying ‘CreateProcess’ function.

     If given, 'creationflags', can be one or more of the following
     flags:

        * *note CREATE_NEW_CONSOLE: 3401.

        * *note CREATE_NEW_PROCESS_GROUP: 3402.

        * *note ABOVE_NORMAL_PRIORITY_CLASS: 3403.

        * *note BELOW_NORMAL_PRIORITY_CLASS: 3404.

        * *note HIGH_PRIORITY_CLASS: 3405.

        * *note IDLE_PRIORITY_CLASS: 3406.

        * *note NORMAL_PRIORITY_CLASS: 3407.

        * *note REALTIME_PRIORITY_CLASS: 3408.

        * *note CREATE_NO_WINDOW: 3409.

        * *note DETACHED_PROCESS: 340a.

        * *note CREATE_DEFAULT_ERROR_MODE: 340b.

        * *note CREATE_BREAKAWAY_FROM_JOB: 340c.

     'pipesize' can be used to change the size of the pipe when *note
     PIPE: b9f. is used for 'stdin', 'stdout' or 'stderr'.  The size of
     the pipe is only changed on platforms that support this (only Linux
     at this time of writing).  Other platforms will ignore this
     parameter.

     Alterado na versão 3.10: Added the 'pipesize' parameter.

     Popen objects are supported as context managers via the *note with:
     5d2. statement: on exit, standard file descriptors are closed, and
     the process is waited for.

          with Popen(["ifconfig"], stdout=PIPE) as proc:
              log.write(proc.stdout.read())

     Popen and the other functions in this module that use it raise an
     *note auditing event: 19fa. ‘subprocess.Popen’ with arguments
     ‘executable’, ‘args’, ‘cwd’, and ‘env’.  The value for ‘args’ may
     be a single string or a list of strings, depending on platform.

     Alterado na versão 3.2: Adicionado suporte a gerenciador de
     contexto.

     Alterado na versão 3.6: O destruidor Popen agora emite um aviso
     *note ResourceWarning: 244. se o processo filho ainda estiver em
     execução.

     Alterado na versão 3.8: Popen can use *note os.posix_spawn(): 220.
     in some cases for better performance.  On Windows Subsystem for
     Linux and QEMU User Emulation, Popen constructor using *note
     os.posix_spawn(): 220. no longer raise an exception on errors like
     missing program, but the child process fails with a non-zero *note
     returncode: a9c.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Side-by-Side_Assembly


File: python.info,  Node: Exceções<11>,  Prev: Construtor Popen,  Up: Usando o módulo subprocess

5.18.6.4 Exceções
.................

Exceções levantadas no processo filho, antes que o novo programa comece
a ser executado, serão levantadas novamente no pai.

The most common exception raised is *note OSError: 417.  This occurs,
for example, when trying to execute a non-existent file.  Applications
should prepare for *note OSError: 417. exceptions.  Note that, when
‘shell=True’, *note OSError: 417. will be raised by the child only if
the selected shell itself was not found.  To determine if the shell
failed to find the requested application, it is necessary to check the
return code or output from the subprocess.

A exceção *note ValueError: 202. será levantada se *note Popen: 199. for
chamado com argumentos inválidos.

*note check_call(): 33f1. e *note check_output(): ff6. levantarão *note
CalledProcessError: 1369. se o processo chamado retornar um código de
retorno diferente de zero.

All of the functions and methods that accept a 'timeout' parameter, such
as *note run(): b9e. and *note Popen.communicate(): 15cd. will raise
*note TimeoutExpired: 15ce. if the timeout expires before the process
exits.

Todas as exceções definidas neste módulo herdam de *note
SubprocessError: 33eb.

Adicionado na versão 3.3: A classe base *note SubprocessError: 33eb. foi
adicionada.


File: python.info,  Node: Considerações de Segurança,  Next: Objetos Popen,  Prev: Usando o módulo subprocess,  Up: subprocess — Gerenciamento de subprocessos

5.18.6.5 Considerações de Segurança
...................................

Unlike some other popen functions, this library will not implicitly
choose to call a system shell.  This means that all characters,
including shell metacharacters, can safely be passed to child processes.
If the shell is invoked explicitly, via ‘shell=True’, it is the
application’s responsibility to ensure that all whitespace and
metacharacters are quoted appropriately to avoid shell injection(1)
vulnerabilities.  On *note some platforms: 340f, it is possible to use
*note shlex.quote(): 27d. for this escaping.

On Windows, batch files (‘*.bat’ or ‘*.cmd’) may be launched by the
operating system in a system shell regardless of the arguments passed to
this library.  This could result in arguments being parsed according to
shell rules, but without any escaping added by Python.  If you are
intentionally launching a batch file with arguments from untrusted
sources, consider passing ‘shell=True’ to allow Python to escape special
characters.  See gh-114539(2) for additional discussion.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Shell_injection#Shell_injection

   (2) https://github.com/python/cpython/issues/114539


File: python.info,  Node: Objetos Popen,  Next: Windows Popen Helpers,  Prev: Considerações de Segurança,  Up: subprocess — Gerenciamento de subprocessos

5.18.6.6 Objetos Popen
......................

Instâncias da classe *note Popen: 199. têm os seguintes métodos:

 -- Método: Popen.poll ()

     Check if child process has terminated.  Set and return *note
     returncode: a9c. attribute.  Otherwise, returns ‘None’.

 -- Método: Popen.wait (timeout=None)

     Wait for child process to terminate.  Set and return *note
     returncode: a9c. attribute.

     If the process does not terminate after 'timeout' seconds, raise a
     *note TimeoutExpired: 15ce. exception.  It is safe to catch this
     exception and retry the wait.

          Nota: This will deadlock when using ‘stdout=PIPE’ or
          ‘stderr=PIPE’ and the child process generates enough output to
          a pipe such that it blocks waiting for the OS pipe buffer to
          accept more data.  Use *note Popen.communicate(): 15cd. when
          using pipes to avoid that.

          Nota: When the ‘timeout’ parameter is not ‘None’, then (on
          POSIX) the function is implemented using a busy loop
          (non-blocking call and short sleeps).  Use the *note asyncio:
          a. module for an asynchronous wait: see *note
          asyncio.create_subprocess_exec: a81.

     Alterado na versão 3.3: 'timeout' foi adicionado.

 -- Método: Popen.communicate (input=None, timeout=None)

     Interact with process: Send data to stdin.  Read data from stdout
     and stderr, until end-of-file is reached.  Wait for process to
     terminate and set the *note returncode: a9c. attribute.  The
     optional 'input' argument should be data to be sent to the child
     process, or ‘None’, if no data should be sent to the child.  If
     streams were opened in text mode, 'input' must be a string.
     Otherwise, it must be bytes.

     *note communicate(): 15cd. returns a tuple ‘(stdout_data,
     stderr_data)’.  The data will be strings if streams were opened in
     text mode; otherwise, bytes.

     Note that if you want to send data to the process’s stdin, you need
     to create the Popen object with ‘stdin=PIPE’.  Similarly, to get
     anything other than ‘None’ in the result tuple, you need to give
     ‘stdout=PIPE’ and/or ‘stderr=PIPE’ too.

     If the process does not terminate after 'timeout' seconds, a *note
     TimeoutExpired: 15ce. exception will be raised.  Catching this
     exception and retrying communication will not lose any output.
     Supplying 'input' to a subsequent post-timeout *note communicate():
     15cd. call is in undefined behavior and may become an error in the
     future.

     The child process is not killed if the timeout expires, so in order
     to cleanup properly a well-behaved application should kill the
     child process and finish communication:

          proc = subprocess.Popen(...)
          try:
              outs, errs = proc.communicate(timeout=15)
          except TimeoutExpired:
              proc.kill()
              outs, errs = proc.communicate()

     After a call to *note communicate(): 15cd. raises *note
     TimeoutExpired: 15ce, do not call *note wait(): d05.  Use an
     additional *note communicate(): 15cd. call to finish handling pipes
     and populate the *note returncode: a9c. attribute.

          Nota: The data read is buffered in memory, so do not use this
          method if the data size is large or unlimited.

     Alterado na versão 3.3: 'timeout' foi adicionado.

 -- Método: Popen.send_signal (signal)

     Envia o sinal 'signal' para o filho.

     Não faz nada se o processo for concluído.

          Nota: On Windows, SIGTERM is an alias for *note terminate():
          1423.  CTRL_C_EVENT and CTRL_BREAK_EVENT can be sent to
          processes started with a 'creationflags' parameter which
          includes ‘CREATE_NEW_PROCESS_GROUP’.

 -- Método: Popen.terminate ()

     Stop the child.  On POSIX OSs the method sends *note SIGTERM: 1426.
     to the child.  On Windows the Win32 API function
     ‘TerminateProcess()’ is called to stop the child.

 -- Método: Popen.kill ()

     Kills the child.  On POSIX OSs the function sends SIGKILL to the
     child.  On Windows *note kill(): 1424. is an alias for *note
     terminate(): 1423.

The following attributes are also set by the class for you to access.
Reassigning them to new values is unsupported:

 -- Atributo: Popen.args

     O argumento 'args' conforme foi passado para *note Popen: 199. -
     uma sequência de argumentos do programa ou então uma única string.

     Adicionado na versão 3.3.

 -- Atributo: Popen.stdin

     If the 'stdin' argument was *note PIPE: b9f, this attribute is a
     writeable stream object as returned by *note open(): 51c.  If the
     'encoding' or 'errors' arguments were specified or the 'text' or
     'universal_newlines' argument was ‘True’, the stream is a text
     stream, otherwise it is a byte stream.  If the 'stdin' argument was
     not *note PIPE: b9f, this attribute is ‘None’.

 -- Atributo: Popen.stdout

     If the 'stdout' argument was *note PIPE: b9f, this attribute is a
     readable stream object as returned by *note open(): 51c.  Reading
     from the stream provides output from the child process.  If the
     'encoding' or 'errors' arguments were specified or the 'text' or
     'universal_newlines' argument was ‘True’, the stream is a text
     stream, otherwise it is a byte stream.  If the 'stdout' argument
     was not *note PIPE: b9f, this attribute is ‘None’.

 -- Atributo: Popen.stderr

     If the 'stderr' argument was *note PIPE: b9f, this attribute is a
     readable stream object as returned by *note open(): 51c.  Reading
     from the stream provides error output from the child process.  If
     the 'encoding' or 'errors' arguments were specified or the 'text'
     or 'universal_newlines' argument was ‘True’, the stream is a text
     stream, otherwise it is a byte stream.  If the 'stderr' argument
     was not *note PIPE: b9f, this attribute is ‘None’.

     Aviso: Use *note communicate(): 15cd. rather than *note
     .stdin.write: 33f8, *note .stdout.read: 33f9. or *note
     .stderr.read: 33fa. to avoid deadlocks due to any of the other OS
     pipe buffers filling up and blocking the child process.

 -- Atributo: Popen.pid

     O ID de processo do processo filho.

     Observe que se você definir o argumento 'shell' como ‘True’, este é
     o ID do processo do shell gerado.

 -- Atributo: Popen.returncode

     The child return code.  Initially ‘None’, *note returncode: a9c. is
     set by a call to the *note poll(): 3411, *note wait(): d05, or
     *note communicate(): 15cd. methods if they detect that the process
     has terminated.

     A ‘None’ value indicates that the process hadn’t yet terminated at
     the time of the last method call.

     Um valor negativo ‘-N’ indica que o filho foi terminado pelo sinal
     ‘N’ (POSIX apenas).


File: python.info,  Node: Windows Popen Helpers,  Next: API de alto nível mais antiga,  Prev: Objetos Popen,  Up: subprocess — Gerenciamento de subprocessos

5.18.6.7 Windows Popen Helpers
..............................

The *note STARTUPINFO: 3400. class and following constants are only
available on Windows.

 -- Classe: subprocess.STARTUPINFO (*, dwFlags=0, hStdInput=None,
          hStdOutput=None, hStdError=None, wShowWindow=0,
          lpAttributeList=None)

     Partial support of the Windows STARTUPINFO(1) structure is used for
     *note Popen: 199. creation.  The following attributes can be set by
     passing them as keyword-only arguments.

     Alterado na versão 3.7: Keyword-only argument support was added.

      -- Atributo: dwFlags

          A bit field that determines whether certain *note STARTUPINFO:
          3400. attributes are used when the process creates a window.

               si = subprocess.STARTUPINFO()
               si.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW

      -- Atributo: hStdInput

          If *note dwFlags: 3415. specifies *note STARTF_USESTDHANDLES:
          3417, this attribute is the standard input handle for the
          process.  If *note STARTF_USESTDHANDLES: 3417. is not
          specified, the default for standard input is the keyboard
          buffer.

      -- Atributo: hStdOutput

          If *note dwFlags: 3415. specifies *note STARTF_USESTDHANDLES:
          3417, this attribute is the standard output handle for the
          process.  Otherwise, this attribute is ignored and the default
          for standard output is the console window’s buffer.

      -- Atributo: hStdError

          If *note dwFlags: 3415. specifies *note STARTF_USESTDHANDLES:
          3417, this attribute is the standard error handle for the
          process.  Otherwise, this attribute is ignored and the default
          for standard error is the console window’s buffer.

      -- Atributo: wShowWindow

          If *note dwFlags: 3415. specifies *note STARTF_USESHOWWINDOW:
          341b, this attribute can be any of the values that can be
          specified in the ‘nCmdShow’ parameter for the ShowWindow(2)
          function, except for ‘SW_SHOWDEFAULT’.  Otherwise, this
          attribute is ignored.

          *note SW_HIDE: 341c. is provided for this attribute.  It is
          used when *note Popen: 199. is called with ‘shell=True’.

      -- Atributo: lpAttributeList

          A dictionary of additional attributes for process creation as
          given in ‘STARTUPINFOEX’, see UpdateProcThreadAttribute(3).

          Atributos suportados:

          'handle_list'

               Sequence of handles that will be inherited.  'close_fds'
               must be true if non-empty.

               The handles must be temporarily made inheritable by *note
               os.set_handle_inheritable(): f2f. when passed to the
               *note Popen: 199. constructor, else *note OSError: 417.
               will be raised with Windows error
               ‘ERROR_INVALID_PARAMETER’ (87).

                    Aviso: In a multithreaded process, use caution to
                    avoid leaking handles that are marked inheritable
                    when combining this feature with concurrent calls to
                    other process creation functions that inherit all
                    handles such as *note os.system(): 14a5.  This also
                    applies to standard handle redirection, which
                    temporarily creates inheritable handles.

          Adicionado na versão 3.7.

* Menu:

* Constantes do Windows::

   ---------- Footnotes ----------

   (1) https://msdn.microsoft.com/en-us/library/ms686331(v=vs.85).aspx

   (2) https://msdn.microsoft.com/en-us/library/ms633548(v=vs.85).aspx

   (3) 
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686880(v=vs.85).aspx


File: python.info,  Node: Constantes do Windows,  Up: Windows Popen Helpers

5.18.6.8 Constantes do Windows
..............................

The *note subprocess: d6. module exposes the following constants.

 -- Dado: subprocess.STD_INPUT_HANDLE

     The standard input device.  Initially, this is the console input
     buffer, ‘CONIN$’.

 -- Dado: subprocess.STD_OUTPUT_HANDLE

     The standard output device.  Initially, this is the active console
     screen buffer, ‘CONOUT$’.

 -- Dado: subprocess.STD_ERROR_HANDLE

     The standard error device.  Initially, this is the active console
     screen buffer, ‘CONOUT$’.

 -- Dado: subprocess.SW_HIDE

     Oculta a janela.  Outra janela será ativada.

 -- Dado: subprocess.STARTF_USESTDHANDLES

     Specifies that the *note STARTUPINFO.hStdInput: 3416, *note
     STARTUPINFO.hStdOutput: 3418, and *note STARTUPINFO.hStdError:
     3419. attributes contain additional information.

 -- Dado: subprocess.STARTF_USESHOWWINDOW

     Specifies that the *note STARTUPINFO.wShowWindow: 341a. attribute
     contains additional information.

 -- Dado: subprocess.STARTF_FORCEONFEEDBACK

     A *note STARTUPINFO.dwFlags: 3415. parameter to specify that the
     'Working in Background' mouse cursor will be displayed while a
     process is launching.  This is the default behavior for GUI
     processes.

     Adicionado na versão 3.13.

 -- Dado: subprocess.STARTF_FORCEOFFFEEDBACK

     A *note STARTUPINFO.dwFlags: 3415. parameter to specify that the
     mouse cursor will not be changed when launching a process.

     Adicionado na versão 3.13.

 -- Dado: subprocess.CREATE_NEW_CONSOLE

     The new process has a new console, instead of inheriting its
     parent’s console (the default).

 -- Dado: subprocess.CREATE_NEW_PROCESS_GROUP

     A *note Popen: 199. ‘creationflags’ parameter to specify that a new
     process group will be created.  This flag is necessary for using
     *note os.kill(): 13ae. on the subprocess.

     This flag is ignored if *note CREATE_NEW_CONSOLE: 3401. is
     specified.

 -- Dado: subprocess.ABOVE_NORMAL_PRIORITY_CLASS

     A *note Popen: 199. ‘creationflags’ parameter to specify that a new
     process will have an above average priority.

     Adicionado na versão 3.7.

 -- Dado: subprocess.BELOW_NORMAL_PRIORITY_CLASS

     A *note Popen: 199. ‘creationflags’ parameter to specify that a new
     process will have a below average priority.

     Adicionado na versão 3.7.

 -- Dado: subprocess.HIGH_PRIORITY_CLASS

     A *note Popen: 199. ‘creationflags’ parameter to specify that a new
     process will have a high priority.

     Adicionado na versão 3.7.

 -- Dado: subprocess.IDLE_PRIORITY_CLASS

     A *note Popen: 199. ‘creationflags’ parameter to specify that a new
     process will have an idle (lowest) priority.

     Adicionado na versão 3.7.

 -- Dado: subprocess.NORMAL_PRIORITY_CLASS

     A *note Popen: 199. ‘creationflags’ parameter to specify that a new
     process will have a normal priority.  (default)

     Adicionado na versão 3.7.

 -- Dado: subprocess.REALTIME_PRIORITY_CLASS

     A *note Popen: 199. ‘creationflags’ parameter to specify that a new
     process will have realtime priority.  You should almost never use
     REALTIME_PRIORITY_CLASS, because this interrupts system threads
     that manage mouse input, keyboard input, and background disk
     flushing.  This class can be appropriate for applications that
     “talk” directly to hardware or that perform brief tasks that should
     have limited interruptions.

     Adicionado na versão 3.7.

 -- Dado: subprocess.CREATE_NO_WINDOW

     A *note Popen: 199. ‘creationflags’ parameter to specify that a new
     process will not create a window.

     Adicionado na versão 3.7.

 -- Dado: subprocess.DETACHED_PROCESS

     A *note Popen: 199. ‘creationflags’ parameter to specify that a new
     process will not inherit its parent’s console.  This value cannot
     be used with CREATE_NEW_CONSOLE.

     Adicionado na versão 3.7.

 -- Dado: subprocess.CREATE_DEFAULT_ERROR_MODE

     A *note Popen: 199. ‘creationflags’ parameter to specify that a new
     process does not inherit the error mode of the calling process.
     Instead, the new process gets the default error mode.  This feature
     is particularly useful for multithreaded shell applications that
     run with hard errors disabled.

     Adicionado na versão 3.7.

 -- Dado: subprocess.CREATE_BREAKAWAY_FROM_JOB

     A *note Popen: 199. ‘creationflags’ parameter to specify that a new
     process is not associated with the job.

     Adicionado na versão 3.7.


File: python.info,  Node: API de alto nível mais antiga,  Next: Replacing Older Functions with the subprocess Module,  Prev: Windows Popen Helpers,  Up: subprocess — Gerenciamento de subprocessos

5.18.6.9 API de alto nível mais antiga
......................................

Antes do Python 3.5, essas três funções constituíam a API de alto nível
para subprocesso.  Agora você pode usar *note run(): b9e. em muitos
casos, mas muitos códigos existentes chamam essas funções.

 -- Função: subprocess.call (args, *, stdin=None, stdout=None,
          stderr=None, shell=False, cwd=None, timeout=None,
          **other_popen_kwargs)

     Run the command described by 'args'.  Wait for command to complete,
     then return the *note returncode: a9c. attribute.

     Code needing to capture stdout or stderr should use *note run():
     b9e. instead:

          run(...).returncode

     To suppress stdout or stderr, supply a value of *note DEVNULL:
     118d.

     The arguments shown above are merely some common ones.  The full
     function signature is the same as that of the *note Popen: 199.
     constructor - this function passes all supplied arguments other
     than 'timeout' directly through to that interface.

          Nota: Do not use ‘stdout=PIPE’ or ‘stderr=PIPE’ with this
          function.  The child process will block if it generates enough
          output to a pipe to fill up the OS pipe buffer as the pipes
          are not being read from.

     Alterado na versão 3.3: 'timeout' foi adicionado.

     Alterado na versão 3.12: Ordem de pesquisa do shell do Windows
     alterada para ‘shell=True’.  O diretório atual e ‘%PATH%’ são
     substituídos por ‘%COMSPEC%’ e ‘%SystemRoot%\System32\cmd.exe’.
     Como resultado, colocar um programa malicioso chamado ‘cmd.exe’ em
     um diretório atual não funciona mais.

 -- Função: subprocess.check_call (args, *, stdin=None, stdout=None,
          stderr=None, shell=False, cwd=None, timeout=None,
          **other_popen_kwargs)

     Run command with arguments.  Wait for command to complete.  If the
     return code was zero then return, otherwise raise *note
     CalledProcessError: 1369.  The *note CalledProcessError: 1369.
     object will have the return code in the *note returncode: 33f2.
     attribute.  If *note check_call(): 33f1. was unable to start the
     process it will propagate the exception that was raised.

     Code needing to capture stdout or stderr should use *note run():
     b9e. instead:

          run(..., check=True)

     To suppress stdout or stderr, supply a value of *note DEVNULL:
     118d.

     The arguments shown above are merely some common ones.  The full
     function signature is the same as that of the *note Popen: 199.
     constructor - this function passes all supplied arguments other
     than 'timeout' directly through to that interface.

          Nota: Do not use ‘stdout=PIPE’ or ‘stderr=PIPE’ with this
          function.  The child process will block if it generates enough
          output to a pipe to fill up the OS pipe buffer as the pipes
          are not being read from.

     Alterado na versão 3.3: 'timeout' foi adicionado.

     Alterado na versão 3.12: Ordem de pesquisa do shell do Windows
     alterada para ‘shell=True’.  O diretório atual e ‘%PATH%’ são
     substituídos por ‘%COMSPEC%’ e ‘%SystemRoot%\System32\cmd.exe’.
     Como resultado, colocar um programa malicioso chamado ‘cmd.exe’ em
     um diretório atual não funciona mais.

 -- Função: subprocess.check_output (args, *, stdin=None, stderr=None,
          shell=False, cwd=None, encoding=None, errors=None,
          universal_newlines=None, timeout=None, text=None,
          **other_popen_kwargs)

     Executa o comando com argumentos e retorna sua saída.

     If the return code was non-zero it raises a *note
     CalledProcessError: 1369.  The *note CalledProcessError: 1369.
     object will have the return code in the *note returncode: 33f2.
     attribute and any output in the *note output: 33f4. attribute.

     Isso equivale a:

          run(..., check=True, stdout=PIPE).stdout

     The arguments shown above are merely some common ones.  The full
     function signature is largely the same as that of *note run(): b9e.
     - most arguments are passed directly through to that interface.
     One API deviation from *note run(): b9e. behavior exists: passing
     ‘input=None’ will behave the same as ‘input=b''’ (or ‘input=''’,
     depending on other arguments) rather than using the parent’s
     standard input file handle.

     By default, this function will return the data as encoded bytes.
     The actual encoding of the output data may depend on the command
     being invoked, so the decoding to text will often need to be
     handled at the application level.

     This behaviour may be overridden by setting 'text', 'encoding',
     'errors', or 'universal_newlines' to ‘True’ as described in *note
     Argumentos usados frequentemente: 33e4. and *note run(): b9e.

     To also capture standard error in the result, use
     ‘stderr=subprocess.STDOUT’:

          >>> subprocess.check_output(
          ...     "ls non_existent_file; exit 0",
          ...     stderr=subprocess.STDOUT,
          ...     shell=True)
          'ls: non_existent_file: No such file or directory\n'

     Adicionado na versão 3.1.

     Alterado na versão 3.3: 'timeout' foi adicionado.

     Alterado na versão 3.4: Support for the 'input' keyword argument
     was added.

     Alterado na versão 3.6: 'encoding' and 'errors' were added.  See
     *note run(): b9e. for details.

     Adicionado na versão 3.7: 'text' foi adicionado como um atalho mais
     legível para 'universal_newlines'.

     Alterado na versão 3.12: Ordem de pesquisa do shell do Windows
     alterada para ‘shell=True’.  O diretório atual e ‘%PATH%’ são
     substituídos por ‘%COMSPEC%’ e ‘%SystemRoot%\System32\cmd.exe’.
     Como resultado, colocar um programa malicioso chamado ‘cmd.exe’ em
     um diretório atual não funciona mais.


File: python.info,  Node: Replacing Older Functions with the subprocess Module,  Next: Legacy Shell Invocation Functions,  Prev: API de alto nível mais antiga,  Up: subprocess — Gerenciamento de subprocessos

5.18.6.10 Replacing Older Functions with the ‘subprocess’ Module
................................................................

In this section, “a becomes b” means that b can be used as a replacement
for a.

     Nota: All “a” functions in this section fail (more or less)
     silently if the executed program cannot be found; the “b”
     replacements raise *note OSError: 417. instead.

     In addition, the replacements using *note check_output(): ff6. will
     fail with a *note CalledProcessError: 1369. if the requested
     operation produces a non-zero return code.  The output is still
     available as the *note output: 33f4. attribute of the raised
     exception.

In the following examples, we assume that the relevant functions have
already been imported from the *note subprocess: d6. module.

* Menu:

* Replacing /bin/sh shell command substitution::
* Replacing shell pipeline::
* Substituindo os.system(): Substituindo os system.
* Replacing the os.spawn family: Replacing the os spawn family.
* Replacing os.popen(), os.popen2(), os.popen3(): Replacing os popen os popen2 os popen3.
* Replacing functions from the popen2 module::


File: python.info,  Node: Replacing /bin/sh shell command substitution,  Next: Replacing shell pipeline,  Up: Replacing Older Functions with the subprocess Module

5.18.6.11 Replacing ‘/bin/sh’ shell command substitution
........................................................

     output=$(mycmd myarg)

torna-se:

     output = check_output(["mycmd", "myarg"])


File: python.info,  Node: Replacing shell pipeline,  Next: Substituindo os system,  Prev: Replacing /bin/sh shell command substitution,  Up: Replacing Older Functions with the subprocess Module

5.18.6.12 Replacing shell pipeline
..................................

     output=$(dmesg | grep hda)

torna-se:

     p1 = Popen(["dmesg"], stdout=PIPE)
     p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
     p1.stdout.close()  # Allow p1 to receive a SIGPIPE if p2 exits.
     output = p2.communicate()[0]

The ‘p1.stdout.close()’ call after starting the p2 is important in order
for p1 to receive a SIGPIPE if p2 exits before p1.

Alternatively, for trusted input, the shell’s own pipeline support may
still be used directly:

     output=$(dmesg | grep hda)

torna-se:

     output = check_output("dmesg | grep hda", shell=True)


File: python.info,  Node: Substituindo os system,  Next: Replacing the os spawn family,  Prev: Replacing shell pipeline,  Up: Replacing Older Functions with the subprocess Module

5.18.6.13 Substituindo ‘os.system()’
....................................

     sts = os.system("mycmd" + " myarg")
     # becomes
     retcode = call("mycmd" + " myarg", shell=True)

Notas:

   * Calling the program through the shell is usually not required.

   * The *note call(): ba0. return value is encoded differently to that
     of *note os.system(): 14a5.

   * The *note os.system(): 14a5. function ignores SIGINT and SIGQUIT
     signals while the command is running, but the caller must do this
     separately when using the *note subprocess: d6. module.

Um exemplo mais realista ficaria assim:

     try:
         retcode = call("mycmd" + " myarg", shell=True)
         if retcode < 0:
             print("Child was terminated by signal", -retcode, file=sys.stderr)
         else:
             print("Child returned", retcode, file=sys.stderr)
     except OSError as e:
         print("Execution failed:", e, file=sys.stderr)


File: python.info,  Node: Replacing the os spawn family,  Next: Replacing os popen os popen2 os popen3,  Prev: Substituindo os system,  Up: Replacing Older Functions with the subprocess Module

5.18.6.14 Replacing the ‘os.spawn’ family
.........................................

Exemplo P_NOWAIT:

     pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
     ==>
     pid = Popen(["/bin/mycmd", "myarg"]).pid

Exemplo P_WAIT:

     retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
     ==>
     retcode = call(["/bin/mycmd", "myarg"])

Exemplo de vetor:

     os.spawnvp(os.P_NOWAIT, path, args)
     ==>
     Popen([path] + args[1:])

Exemplo de ambiente:

     os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
     ==>
     Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})


File: python.info,  Node: Replacing os popen os popen2 os popen3,  Next: Replacing functions from the popen2 module,  Prev: Replacing the os spawn family,  Up: Replacing Older Functions with the subprocess Module

5.18.6.15 Replacing ‘os.popen()’, ‘os.popen2()’, ‘os.popen3()’
..............................................................

     (child_stdin, child_stdout) = os.popen2(cmd, mode, bufsize)
     ==>
     p = Popen(cmd, shell=True, bufsize=bufsize,
               stdin=PIPE, stdout=PIPE, close_fds=True)
     (child_stdin, child_stdout) = (p.stdin, p.stdout)

     (child_stdin,
      child_stdout,
      child_stderr) = os.popen3(cmd, mode, bufsize)
     ==>
     p = Popen(cmd, shell=True, bufsize=bufsize,
               stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
     (child_stdin,
      child_stdout,
      child_stderr) = (p.stdin, p.stdout, p.stderr)

     (child_stdin, child_stdout_and_stderr) = os.popen4(cmd, mode, bufsize)
     ==>
     p = Popen(cmd, shell=True, bufsize=bufsize,
               stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
     (child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout)

Return code handling translates as follows:

     pipe = os.popen(cmd, 'w')
     ...
     rc = pipe.close()
     if rc is not None and rc >> 8:
         print("There were some errors")
     ==>
     process = Popen(cmd, stdin=PIPE)
     ...
     process.stdin.close()
     if process.wait() != 0:
         print("There were some errors")


File: python.info,  Node: Replacing functions from the popen2 module,  Prev: Replacing os popen os popen2 os popen3,  Up: Replacing Older Functions with the subprocess Module

5.18.6.16 Replacing functions from the ‘popen2’ module
......................................................

     Nota: If the cmd argument to popen2 functions is a string, the
     command is executed through /bin/sh.  If it is a list, the command
     is directly executed.

     (child_stdout, child_stdin) = popen2.popen2("somestring", bufsize, mode)
     ==>
     p = Popen("somestring", shell=True, bufsize=bufsize,
               stdin=PIPE, stdout=PIPE, close_fds=True)
     (child_stdout, child_stdin) = (p.stdout, p.stdin)

     (child_stdout, child_stdin) = popen2.popen2(["mycmd", "myarg"], bufsize, mode)
     ==>
     p = Popen(["mycmd", "myarg"], bufsize=bufsize,
               stdin=PIPE, stdout=PIPE, close_fds=True)
     (child_stdout, child_stdin) = (p.stdout, p.stdin)

‘popen2.Popen3’ and ‘popen2.Popen4’ basically work as *note
subprocess.Popen: 199, except that:

   * *note Popen: 199. raises an exception if the execution fails.

   * The 'capturestderr' argument is replaced with the 'stderr'
     argument.

   * ‘stdin=PIPE’ and ‘stdout=PIPE’ must be specified.

   * popen2 closes all file descriptors by default, but you have to
     specify ‘close_fds=True’ with *note Popen: 199. to guarantee this
     behavior on all platforms or past Python versions.


File: python.info,  Node: Legacy Shell Invocation Functions,  Next: Notas<2>,  Prev: Replacing Older Functions with the subprocess Module,  Up: subprocess — Gerenciamento de subprocessos

5.18.6.17 Legacy Shell Invocation Functions
...........................................

This module also provides the following legacy functions from the 2.x
‘commands’ module.  These operations implicitly invoke the system shell
and none of the guarantees described above regarding security and
exception handling consistency are valid for these functions.

 -- Função: subprocess.getstatusoutput (cmd, *, encoding=None,
          errors=None)

     Return ‘(exitcode, output)’ of executing 'cmd' in a shell.

     Execute the string 'cmd' in a shell with *note check_output(): ff6.
     and return a 2-tuple ‘(exitcode, output)’.  'encoding' and 'errors'
     are used to decode output; see the notes on *note Argumentos usados
     frequentemente: 33e4. for more details.

     A trailing newline is stripped from the output.  The exit code for
     the command can be interpreted as the return code of subprocess.
     Example:

          >>> subprocess.getstatusoutput('ls /bin/ls')
          (0, '/bin/ls')
          >>> subprocess.getstatusoutput('cat /bin/junk')
          (1, 'cat: /bin/junk: No such file or directory')
          >>> subprocess.getstatusoutput('/bin/junk')
          (127, 'sh: /bin/junk: not found')
          >>> subprocess.getstatusoutput('/bin/kill $$')
          (-15, '')

     *note Disponibilidade: 1ed8.: Unix, Windows.

     Alterado na versão 3.3.4: Suporte ao Windows foi adicionado.

     The function now returns (exitcode, output) instead of (status,
     output) as it did in Python 3.3.3 and earlier.  exitcode has the
     same value as *note returncode: a9c.

     Alterado na versão 3.11: Adicionados os parâmetros 'encoding' e
     'errors'.

 -- Função: subprocess.getoutput (cmd, *, encoding=None, errors=None)

     Return output (stdout and stderr) of executing 'cmd' in a shell.

     Like *note getstatusoutput(): ff8, except the exit code is ignored
     and the return value is a string containing the command’s output.
     Example:

          >>> subprocess.getoutput('ls /bin/ls')
          '/bin/ls'

     *note Disponibilidade: 1ed8.: Unix, Windows.

     Alterado na versão 3.3.4: Suporte para Windows adicionado.

     Alterado na versão 3.11: Adicionados os parâmetros 'encoding' e
     'errors'.


File: python.info,  Node: Notas<2>,  Prev: Legacy Shell Invocation Functions,  Up: subprocess — Gerenciamento de subprocessos

5.18.6.18 Notas
...............

* Menu:

* Timeout Behavior::
* Converter uma sequência de argumentos em uma string no Windows::
* Disabling use of vfork() or posix_spawn(): Disabling use of vfork or posix_spawn.


File: python.info,  Node: Timeout Behavior,  Next: Converter uma sequência de argumentos em uma string no Windows,  Up: Notas<2>

5.18.6.19 Timeout Behavior
..........................

When using the ‘timeout’ parameter in functions like *note run(): b9e,
*note Popen.wait(): d05, or *note Popen.communicate(): 15cd, users
should be aware of the following behaviors:

  1. 'Process Creation Delay': The initial process creation itself
     cannot be interrupted on many platform APIs.  This means that even
     when specifying a timeout, you are not guaranteed to see a timeout
     exception until at least after however long process creation takes.

  2. 'Extremely Small Timeout Values': Setting very small timeout values
     (such as a few milliseconds) may result in almost immediate *note
     TimeoutExpired: 15ce. exceptions because process creation and
     system scheduling inherently require time.


File: python.info,  Node: Converter uma sequência de argumentos em uma string no Windows,  Next: Disabling use of vfork or posix_spawn,  Prev: Timeout Behavior,  Up: Notas<2>

5.18.6.20 Converter uma sequência de argumentos em uma string no Windows
........................................................................

On Windows, an 'args' sequence is converted to a string that can be
parsed using the following rules (which correspond to the rules used by
the MS C runtime):

  1. Arguments are delimited by white space, which is either a space or
     a tab.

  2. A string surrounded by double quotation marks is interpreted as a
     single argument, regardless of white space contained within.  A
     quoted string can be embedded in an argument.

  3. A double quotation mark preceded by a backslash is interpreted as a
     literal double quotation mark.

  4. Backslashes are interpreted literally, unless they immediately
     precede a double quotation mark.

  5. If backslashes immediately precede a double quotation mark, every
     pair of backslashes is interpreted as a literal backslash.  If the
     number of backslashes is odd, the last backslash escapes the next
     double quotation mark as described in rule 3.

Ver também
..........

*note shlex: c4.

     Module which provides function to parse and escape command lines.


File: python.info,  Node: Disabling use of vfork or posix_spawn,  Prev: Converter uma sequência de argumentos em uma string no Windows,  Up: Notas<2>

5.18.6.21 Disabling use of ‘vfork()’ or ‘posix_spawn()’
.......................................................

On Linux, *note subprocess: d6. defaults to using the ‘vfork()’ system
call internally when it is safe to do so rather than ‘fork()’.  This
greatly improves performance.

If you ever encounter a presumed highly unusual situation where you need
to prevent ‘vfork()’ from being used by Python, you can set the
‘subprocess._USE_VFORK’ attribute to a false value.

     subprocess._USE_VFORK = False  # See CPython issue gh-NNNNNN.

Setting this has no impact on use of ‘posix_spawn()’ which could use
‘vfork()’ internally within its libc implementation.  There is a similar
‘subprocess._USE_POSIX_SPAWN’ attribute if you need to prevent use of
that.

     subprocess._USE_POSIX_SPAWN = False  # See CPython issue gh-NNNNNN.

It is safe to set these to false on any Python version.  They will have
no effect on older versions when unsupported.  Do not assume the
attributes are available to read.  Despite their names, a true value
does not indicate that the corresponding function will be used, only
that it may be.

Please file issues any time you have to use these private knobs with a
way to reproduce the issue you were seeing.  Link to that issue from a
comment in your code.

Adicionado na versão 3.8: ‘_USE_POSIX_SPAWN’

Adicionado na versão 3.11: ‘_USE_VFORK’


File: python.info,  Node: sched — Agendador de eventos,  Next: queue — A synchronized queue class,  Prev: subprocess — Gerenciamento de subprocessos,  Up: Execução Concorrente

5.18.7 ‘sched’ — Agendador de eventos
-------------------------------------

'Código-fonte:' Lib/sched.py(1)

__________________________________________________________________

O módulo *note sched: bf. define uma classe que implementa um agendador
de eventos de uso geral:

 -- Classe: sched.scheduler (timefunc=time.monotonic,
          delayfunc=time.sleep)

     A classe *note scheduler: 1166. define uma interface genérica para
     agendar eventos.  Ela precisa de duas funções para lidar com o
     “mundo externo” — 'timefunc' deve ser chamável sem argumentos e
     retornar um número (o “tempo”, em quaisquer unidades).  A função
     'delayfunc' deve ser chamável com um argumento, compatível com a
     saída de 'timefunc', e deve atrasar a mesma quantidade de unidades
     de tempo.  'delayfunc' também será chamada com o argumento ‘0’ após
     a execução de cada evento para permitir que outras threads executem
     em aplicações multithread.

     Alterado na versão 3.3: Os parâmetros 'timefunc' e 'delayfunc' são
     opcionais.

     Alterado na versão 3.3: A classe *note scheduler: 1166. pode ser
     usada com segurança em ambientes multithread.

Exemplo:

     >>> import sched, time
     >>> s = sched.scheduler(time.time, time.sleep)
     >>> def print_time(a='default'):
     ...     print("From print_time", time.time(), a)
     ...
     >>> def print_some_times():
     ...     print(time.time())
     ...     s.enter(10, 1, print_time)
     ...     s.enter(5, 2, print_time, argument=('positional',))
     ...     # apesar de ter prioridade mais alta, 'keyword' é executado depois de 'positional', pois enter() é relativo
     ...     s.enter(5, 1, print_time, kwargs={'a': 'keyword'})
     ...     s.enterabs(1_650_000_000, 10, print_time, argument=("first enterabs",))
     ...     s.enterabs(1_650_000_000, 5, print_time, argument=("second enterabs",))
     ...     s.run()
     ...     print(time.time())
     ...
     >>> print_some_times()
     1652342830.3640375
     From print_time 1652342830.3642538 second enterabs
     From print_time 1652342830.3643398 first enterabs
     From print_time 1652342835.3694863 positional
     From print_time 1652342835.3696074 keyword
     From print_time 1652342840.369612 default
     1652342840.3697174

* Menu:

* Objetos Scheduler::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/sched.py


File: python.info,  Node: Objetos Scheduler,  Up: sched — Agendador de eventos

5.18.7.1 Objetos Scheduler
..........................

As instâncias *note scheduler: 1166. têm os seguintes métodos e
atributos:

 -- Método: scheduler.enterabs (time, priority, action, argument=(),
          kwargs={})

     Agenda um novo evento.  O argumento 'time' deve ser um tipo
     numérico compatível com o valor de retorno da função 'timefunc'
     passada ao construtor.  Eventos agendados para o mesmo 'time' serão
     executados na ordem de sua prioridade 'priority'.  Um número menor
     representa uma prioridade maior.

     Executa o evento significa executar ‘action(*argument, **kwargs)’.
     'argument' é uma sequência que contém os argumentos posicionais
     para 'action'.  'kwargs' é um dicionário que contém os argumentos
     nomeados para 'action'.

     O valor de retorno é um evento que pode ser usado para cancelamento
     posterior do evento (veja *note cancel(): 1a88.).

     Alterado na versão 3.3: o parâmetro 'argument' é opcional.

     Alterado na versão 3.3: o parâmetro 'kwargs' foi adicionado.

 -- Método: scheduler.enter (delay, priority, action, argument=(),
          kwargs={})

     Agenda um evento para atrasar 'delay' mais unidades de tempo.  Além
     do tempo relativo, os outros argumentos, o efeito e o valor de
     retorno são os mesmos de *note enterabs(): 1168.

     Alterado na versão 3.3: o parâmetro 'argument' é opcional.

     Alterado na versão 3.3: o parâmetro 'kwargs' foi adicionado.

 -- Método: scheduler.cancel (event)

     Remove o evento da fila.  Se 'event' não for um evento atualmente
     na fila, este método levantará uma *note ValueError: 202.

 -- Método: scheduler.empty ()

     Retorna ‘True’ se a fila de eventos estiver vazia.

 -- Método: scheduler.run (blocking=True)

     Executa todos os eventos agendados.  Este método aguardará (usando
     a função 'delayfunc' passada ao construtor) o próximo evento,
     depois o executará e assim por diante até que não haja mais eventos
     agendados.

     Se 'blocking' for falso, executa os eventos agendados que expirarão
     mais cedo (se houver) e então retorna o prazo da próxima chamada
     agendada no agendador (se houver).

     Tanto 'action' quanto 'delayfunc' podem levantar uma exceção.  Em
     ambos os casos, o agendador manterá um estado consistente e
     propagará a exceção.  Se uma exceção for gerada por 'action', o
     evento não será tentado em chamadas futuras para *note run(): 1165.

     Se uma sequência de eventos demorar mais para ser executada do que
     o tempo disponível antes do próximo evento, o agendador
     simplesmente ficará para trás.  Nenhum evento será descartado; o
     código de chamada é responsável por cancelar eventos que não são
     mais pertinentes.

     Alterado na versão 3.3: O argumento 'blocking' foi adicionado.

 -- Atributo: scheduler.queue

     Atributo somente leitura que retorna uma lista de eventos futuros
     na ordem em que serão executados.  Cada evento é exibido como uma
     *note tupla nomeada: 64e. com os seguintes campos: time, priority,
     action, argument, kwargs.


File: python.info,  Node: queue — A synchronized queue class,  Next: contextvars — Variáveis de contexto,  Prev: sched — Agendador de eventos,  Up: Execução Concorrente

5.18.8 ‘queue’ — A synchronized queue class
-------------------------------------------

'Código-fonte:' Lib/queue.py(1)

__________________________________________________________________

The *note queue: b6. module implements multi-producer, multi-consumer
queues.  It is especially useful in threaded programming when
information must be exchanged safely between multiple threads.  The
*note Queue: 13db. class in this module implements all the required
locking semantics.

The module implements three types of queue, which differ only in the
order in which the entries are retrieved.  In a FIFO queue, the first
tasks added are the first retrieved.  In a LIFO queue, the most recently
added entry is the first retrieved (operating like a stack).  With a
priority queue, the entries are kept sorted (using the *note heapq: 69.
module) and the lowest valued entry is retrieved first.

Internally, those three types of queues use locks to temporarily block
competing threads; however, they are not designed to handle reentrancy
within a thread.

In addition, the module implements a “simple” FIFO queue type, *note
SimpleQueue: b80, whose specific implementation provides additional
guarantees in exchange for the smaller functionality.

The *note queue: b6. module defines the following classes and
exceptions:

 -- Classe: queue.Queue (maxsize=0)

     Constructor for a FIFO queue.  'maxsize' is an integer that sets
     the upperbound limit on the number of items that can be placed in
     the queue.  Insertion will block once this size has been reached,
     until queue items are consumed.  If 'maxsize' is less than or equal
     to zero, the queue size is infinite.

 -- Classe: queue.LifoQueue (maxsize=0)

     Constructor for a LIFO queue.  'maxsize' is an integer that sets
     the upperbound limit on the number of items that can be placed in
     the queue.  Insertion will block once this size has been reached,
     until queue items are consumed.  If 'maxsize' is less than or equal
     to zero, the queue size is infinite.

 -- Classe: queue.PriorityQueue (maxsize=0)

     Constructor for a priority queue.  'maxsize' is an integer that
     sets the upperbound limit on the number of items that can be placed
     in the queue.  Insertion will block once this size has been
     reached, until queue items are consumed.  If 'maxsize' is less than
     or equal to zero, the queue size is infinite.

     The lowest valued entries are retrieved first (the lowest valued
     entry is the one that would be returned by ‘min(entries)’).  A
     typical pattern for entries is a tuple in the form:
     ‘(priority_number, data)’.

     If the 'data' elements are not comparable, the data can be wrapped
     in a class that ignores the data item and only compares the
     priority number:

          from dataclasses import dataclass, field
          from typing import Any

          @dataclass(order=True)
          class PrioritizedItem:
              priority: int
              item: Any=field(compare=False)

 -- Classe: queue.SimpleQueue

     Constructor for an unbounded FIFO queue.  Simple queues lack
     advanced functionality such as task tracking.

     Adicionado na versão 3.7.

 -- Exceção: queue.Empty

     Exception raised when non-blocking *note get(): 2ea9. (or *note
     get_nowait(): 343e.) is called on a *note Queue: 13db. object which
     is empty.

 -- Exceção: queue.Full

     Exception raised when non-blocking *note put(): 343f. (or *note
     put_nowait(): 2ea8.) is called on a *note Queue: 13db. object which
     is full.

 -- Exceção: queue.ShutDown

     Exception raised when *note put(): 343f. or *note get(): 2ea9. is
     called on a *note Queue: 13db. object which has been shut down.

     Adicionado na versão 3.13.

* Menu:

* Objetos Queue::
* Objetos SimpleQueue::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/queue.py


File: python.info,  Node: Objetos Queue,  Next: Objetos SimpleQueue,  Up: queue — A synchronized queue class

5.18.8.1 Objetos Queue
......................

Queue objects (*note Queue: 13db, *note LifoQueue: 23eb, or *note
PriorityQueue: 23ec.) provide the public methods described below.

 -- Método: Queue.qsize ()

     Return the approximate size of the queue.  Note, qsize() > 0
     doesn’t guarantee that a subsequent get() will not block, nor will
     qsize() < maxsize guarantee that put() will not block.

 -- Método: Queue.empty ()

     Return ‘True’ if the queue is empty, ‘False’ otherwise.  If empty()
     returns ‘True’ it doesn’t guarantee that a subsequent call to put()
     will not block.  Similarly, if empty() returns ‘False’ it doesn’t
     guarantee that a subsequent call to get() will not block.

 -- Método: Queue.full ()

     Return ‘True’ if the queue is full, ‘False’ otherwise.  If full()
     returns ‘True’ it doesn’t guarantee that a subsequent call to get()
     will not block.  Similarly, if full() returns ‘False’ it doesn’t
     guarantee that a subsequent call to put() will not block.

 -- Método: Queue.put (item, block=True, timeout=None)

     Put 'item' into the queue.  If optional args 'block' is true and
     'timeout' is ‘None’ (the default), block if necessary until a free
     slot is available.  If 'timeout' is a positive number, it blocks at
     most 'timeout' seconds and raises the *note Full: 3351. exception
     if no free slot was available within that time.  Otherwise ('block'
     is false), put an item on the queue if a free slot is immediately
     available, else raise the *note Full: 3351. exception ('timeout' is
     ignored in that case).

     Raises *note ShutDown: 23b. if the queue has been shut down.

 -- Método: Queue.put_nowait (item)

     Equivalent to ‘put(item, block=False)’.

 -- Método: Queue.get (block=True, timeout=None)

     Remove and return an item from the queue.  If optional args 'block'
     is true and 'timeout' is ‘None’ (the default), block if necessary
     until an item is available.  If 'timeout' is a positive number, it
     blocks at most 'timeout' seconds and raises the *note Empty: 3350.
     exception if no item was available within that time.  Otherwise
     ('block' is false), return an item if one is immediately available,
     else raise the *note Empty: 3350. exception ('timeout' is ignored
     in that case).

     Prior to 3.0 on POSIX systems, and for all versions on Windows, if
     'block' is true and 'timeout' is ‘None’, this operation goes into
     an uninterruptible wait on an underlying lock.  This means that no
     exceptions can occur, and in particular a SIGINT will not trigger a
     *note KeyboardInterrupt: 9d9.

     Raises *note ShutDown: 23b. if the queue has been shut down and is
     empty, or if the queue has been shut down immediately.

 -- Método: Queue.get_nowait ()

     Equivalente a ‘get(False)’.

Two methods are offered to support tracking whether enqueued tasks have
been fully processed by daemon consumer threads.

 -- Método: Queue.task_done ()

     Indicate that a formerly enqueued task is complete.  Used by queue
     consumer threads.  For each *note get(): 2ea9. used to fetch a
     task, a subsequent call to *note task_done(): 334c. tells the queue
     that the processing on the task is complete.

     If a *note join(): 334d. is currently blocking, it will resume when
     all items have been processed (meaning that a *note task_done():
     334c. call was received for every item that had been *note put():
     343f. into the queue).

     Levanta *note ValueError: 202. se for chamado mais vezes do que o
     número de itens colocados na fila.

 -- Método: Queue.join ()

     Blocks until all items in the queue have been gotten and processed.

     The count of unfinished tasks goes up whenever an item is added to
     the queue.  The count goes down whenever a consumer thread calls
     *note task_done(): 334c. to indicate that the item was retrieved
     and all work on it is complete.  When the count of unfinished tasks
     drops to zero, *note join(): 334d. unblocks.

* Menu:

* Waiting for task completion::
* Terminating queues::


File: python.info,  Node: Waiting for task completion,  Next: Terminating queues,  Up: Objetos Queue

5.18.8.2 Waiting for task completion
....................................

Example of how to wait for enqueued tasks to be completed:

     import threading
     import queue

     q = queue.Queue()

     def worker():
         while True:
             item = q.get()
             print(f'Working on {item}')
             print(f'Finished {item}')
             q.task_done()

     # Turn-on the worker thread.
     threading.Thread(target=worker, daemon=True).start()

     # Send thirty task requests to the worker.
     for item in range(30):
         q.put(item)

     # Block until all tasks are done.
     q.join()
     print('All work completed')


File: python.info,  Node: Terminating queues,  Prev: Waiting for task completion,  Up: Objetos Queue

5.18.8.3 Terminating queues
...........................

When no longer needed, *note Queue: 13db. objects can be wound down
until empty or terminated immediately with a hard shutdown.

 -- Método: Queue.shutdown (immediate=False)

     Coloca uma instância de *note Queue: 13db. em modo de desligamento.

     The queue can no longer grow.  Future calls to *note put(): 343f.
     raise *note ShutDown: 23b.  Currently blocked callers of *note
     put(): 343f. will be unblocked and will raise *note ShutDown: 23b.
     in the formerly blocked thread.

     Se 'immediate' for falso (o padrão), a fila pode ser encerrada
     normalmente com chamadas *note get(): 2ea9. para extrair tarefas
     que já foram carregadas.

     E se *note task_done(): 334c. for chamado para cada tarefa
     restante, um *note join(): 334d. pendente será desbloqueado
     normalmente.

     Once the queue is empty, future calls to *note get(): 2ea9. will
     raise *note ShutDown: 23b.

     If 'immediate' is true, the queue is terminated immediately.  The
     queue is drained to be completely empty and the count of unfinished
     tasks is reduced by the number of tasks drained.  If unfinished
     tasks is zero, callers of *note join(): 334d. are unblocked.  Also,
     blocked callers of *note get(): 2ea9. are unblocked and will raise
     *note ShutDown: 23b. because the queue is empty.

     Tenha cuidado ao usar *note join(): 334d. com a opção 'immediate'
     definida como verdadeiro.  Isso desbloqueia a junção mesmo quando
     nenhuma tarefa foi executada, violando a invariante usual para a
     junção de uma fila.

     Adicionado na versão 3.13.


File: python.info,  Node: Objetos SimpleQueue,  Prev: Objetos Queue,  Up: queue — A synchronized queue class

5.18.8.4 Objetos SimpleQueue
............................

*note SimpleQueue: b80. objects provide the public methods described
below.

 -- Método: SimpleQueue.qsize ()

     Return the approximate size of the queue.  Note, qsize() > 0
     doesn’t guarantee that a subsequent get() will not block.

 -- Método: SimpleQueue.empty ()

     Return ‘True’ if the queue is empty, ‘False’ otherwise.  If empty()
     returns ‘False’ it doesn’t guarantee that a subsequent call to
     get() will not block.

 -- Método: SimpleQueue.put (item, block=True, timeout=None)

     Put 'item' into the queue.  The method never blocks and always
     succeeds (except for potential low-level errors such as failure to
     allocate memory).  The optional args 'block' and 'timeout' are
     ignored and only provided for compatibility with *note Queue.put():
     343f.

     'Detalhes da implementação do CPython:' This method has a C
     implementation which is reentrant.  That is, a ‘put()’ or ‘get()’
     call can be interrupted by another ‘put()’ call in the same thread
     without deadlocking or corrupting internal state inside the queue.
     This makes it appropriate for use in destructors such as ‘__del__’
     methods or *note weakref: 114. callbacks.

 -- Método: SimpleQueue.put_nowait (item)

     Equivalent to ‘put(item, block=False)’, provided for compatibility
     with *note Queue.put_nowait(): 2ea8.

 -- Método: SimpleQueue.get (block=True, timeout=None)

     Remove and return an item from the queue.  If optional args 'block'
     is true and 'timeout' is ‘None’ (the default), block if necessary
     until an item is available.  If 'timeout' is a positive number, it
     blocks at most 'timeout' seconds and raises the *note Empty: 3350.
     exception if no item was available within that time.  Otherwise
     ('block' is false), return an item if one is immediately available,
     else raise the *note Empty: 3350. exception ('timeout' is ignored
     in that case).

 -- Método: SimpleQueue.get_nowait ()

     Equivalente a ‘get(False)’.

Ver também
..........

Class *note multiprocessing.Queue: 1914.

     A queue class for use in a multi-processing (rather than
     multi-threading) context.

*note collections.deque: 5dc. is an alternative implementation of
unbounded queues with fast atomic *note append(): 26ad. and *note
popleft(): 26b3. operations that do not require locking and also support
indexing.


File: python.info,  Node: contextvars — Variáveis de contexto,  Next: _thread— API de segmentação de baixo nível,  Prev: queue — A synchronized queue class,  Up: Execução Concorrente

5.18.9 ‘contextvars’ — Variáveis de contexto
--------------------------------------------

__________________________________________________________________

Este módulo fornece APIs para gerenciar, armazenar e acessar o estado
local do contexto.  A classe *note ContextVar: 1643. é usada para
declarar e trabalhar com 'Variáveis de Contexto'.  A função *note
copy_context(): 3451. e a classe *note Context: 15b7. devem ser usadas
para gerenciar o contexto atual em frameworks assíncronos.

Os gerenciadores de contexto que possuem estado devem usar Variáveis de
Contexto ao invés de *note threading.local(): 1631. para evitar que seu
estado vaze para outro código inesperadamente, quando usado em código
concorrente.

Veja também a PEP 567(1) para detalhes adicionais.

Adicionado na versão 3.7.

* Menu:

* Variáveis de contexto::
* Gerenciamento de contexto manual::
* Suporte a asyncio::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0567/


File: python.info,  Node: Variáveis de contexto,  Next: Gerenciamento de contexto manual,  Up: contextvars — Variáveis de contexto

5.18.9.1 Variáveis de contexto
..............................

 -- Classe: contextvars.ContextVar (name[, *, default])

     Esta classe é usada para declarar uma nova variável de contexto,
     como, por exemplo:

          var: ContextVar[int] = ContextVar('var', default=42)

     O parâmetro obrigatório 'name' é usado para fins de introspecção e
     depuração.

     O parâmetro somente-nomeado opcional 'default' é retornado por
     *note ContextVar.get(): 3453. quando nenhum valor para a variável é
     encontrado no contexto atual.

     'Importante:' Variáveis de Contexto devem ser criadas no nível do
     módulo superior e nunca em fechamentos.  Os objetos *note Context:
     15b7. contêm referências fortes a variáveis de contexto que evitam
     que as variáveis de contexto sejam coletadas como lixo
     corretamente.

      -- Atributo: name

          O nome da variável.  Esta é uma propriedade somente leitura.

          Adicionado na versão 3.7.1.

      -- Método: get ([default])

          Retorna um valor para a variável de contexto para o contexto
          atual.

          Se não houver valor para a variável no contexto atual, o
          método vai:

             * retornar o valor do argumento 'default' do método, se
               fornecido; ou

             * retornar o valor padrão para a variável de contexto, se
               ela foi criada com uma; ou

             * levantar uma *note LookupError: 2367.

      -- Método: set (value)

          Chame para definir um novo valor para a variável de contexto
          no contexto atual.

          O argumento 'value' obrigatório é o novo valor para a variável
          de contexto.

          Retorna um objeto *note Token: 3455. que pode ser usado para
          restaurar a variável ao seu valor anterior através do método
          *note ContextVar.reset(): 3456.

      -- Método: reset (token)

          Redefine a variável de contexto para o valor que tinha antes
          de *note ContextVar.set(): 15b8.  que criou o 'token', ser
          usado.

          Por exemplo:

               var = ContextVar('var')

               token = var.set('novo valor')
               # código que usa 'var'; var.get() retorna 'novo valor'.
               var.reset(token)

               # Após uma chamada de redefinição, var não tem mais valor,
               # então var.get() levantaria uma exceção LookupError.

          The same 'token' cannot be used twice.

 -- Classe: contextvars.Token

     'Token' objects are returned by the *note ContextVar.set(): 15b8.
     method.  They can be passed to the *note ContextVar.reset(): 3456.
     method to revert the value of the variable to what it was before
     the corresponding 'set'.  A single token cannot reset a context
     variable more than once.

      -- Atributo: var

          Uma propriedade somente leitura.  Aponta para o objeto *note
          ContextVar: 1643. que criou o token.

      -- Atributo: old_value

          Uma propriedade somente leitura.  Definida com o valor que a
          variável tinha antes da chamada do método *note
          ContextVar.set(): 15b8. que criou o token.  Aponta para *note
          Token.MISSING: 3459. se a variável não foi definida antes da
          chamada.

      -- Atributo: MISSING

          Um objeto marcador usado por *note Token.old_value: 3458.


File: python.info,  Node: Gerenciamento de contexto manual,  Next: Suporte a asyncio,  Prev: Variáveis de contexto,  Up: contextvars — Variáveis de contexto

5.18.9.2 Gerenciamento de contexto manual
.........................................

 -- Função: contextvars.copy_context ()

     Retorna uma cópia do objeto *note Context: 15b7. atual.

     O trecho a seguir obtém uma cópia do contexto atual e imprime todas
     as variáveis e seus valores que estão definidos nele:

          ctx: Context = copy_context()
          print(list(ctx.items()))

     A função tem uma complexidade 'O'(1), ou seja, funciona igualmente
     rápida para contextos com algumas variáveis de contexto e para
     contextos que têm muitas delas.

 -- Classe: contextvars.Context

     Um mapeamento de *note ContextVars: 1643. para seus valores.

     ‘Context()’ cria um contexto vazio sem valores nele.  Para obter
     uma cópia do contexto atual, use a função *note copy_context():
     3451.

     Cada thread tem sua própria pilha efetiva de objetos ‘Context’.  O
     *note contexto atual: 1697. é o objeto ‘Context’ no topo da pilha
     da thread atual.  Todos os objetos ‘Context’ nas pilhas são
     considerados como 'inseridos'.

     'Inserir' um contexto, o que pode ser feito chamando seu método
     *note run(): 16f3, torna o contexto o contexto atual, colocando-o
     no topo da pilha de contexto da thread atual.

     'Sair' do contexto atual, o que pode ser feito retornando do
     retorno de chamada passado para o método *note run(): 16f3,
     restaura o contexto atual para o que era antes de o contexto ser
     inserido, retirando o contexto do topo da pilha de contextos.

     Como cada thread tem sua própria pilha de contexto, os objetos
     *note ContextVar: 1643. se comportam de maneira semelhante a *note
     threading.local(): 1631. quando valores são atribuídos em threads
     diferentes.

     Tentar entrar em um contexto já inserido, incluindo contextos
     inseridos em outras threads, levanta uma exceção *note
     RuntimeError: 195.

     Após sair de um contexto, ele pode ser acessado novamente (de
     qualquer thread).

     Quaisquer alterações nos valores de *note ContextVar: 1643. por
     meio do método *note ContextVar.set(): 15b8. são registradas no
     contexto atual.  O método *note ContextVar.get(): 3453. retorna o
     valor associado ao contexto atual.  Sair de um contexto
     efetivamente reverte quaisquer alterações feitas nas variáveis de
     contexto enquanto o contexto foi inserido (se necessário, os
     valores podem ser restaurados ao inserir novamente o contexto).

     Context implementa a interface *note collections.abc.Mapping: 8d0.

      -- Método: run (callable, *args, **kwargs)

          Entra no Context, executa ‘callable(*args, **kwargs)’ e sai do
          Context.  Retorna o valor de retorno de 'callable' ou propaga
          uma exceção, se ocorrer uma.

          Exemplo:

               import contextvars

               var = contextvars.ContextVar('var')
               var.set('spam')
               print(var.get())  # 'spam'

               ctx = contextvars.copy_context()

               def main():
                   # 'var' foi definida para 'spam' antes de
                   # chamar 'copy_context()' e 'ctx.run(main)', então:
                   print(var.get())  # 'spam'
                   print(ctx[var])  # 'spam'

                   var.set('ham')

                   # Agora, após definir 'var' para 'ham':
                   print(var.get())  # 'ham'
                   print(ctx[var])  # 'ham'

               # Qualquer alteração que a função 'main' feitas a 'var'
               # serão contidos em 'ctx'.
               ctx.run(main)

               # A função 'main()' era executada no contexto 'ctx',
               # então alterações a 'var' são contidas nele:
               print(ctx[var])  # 'ham'

               # No entanto, fora de 'ctx', 'var' ainda está definida para 'spam':
               print(var.get())  # 'spam'

      -- Método: copy ()

          Retorna uma cópia rasa do objeto contexto.

      -- Describe: var in context

          Retorna ‘True’ se 'context' tem uma variável para 'var'
          definida; do contrário, retorna ‘False’.

      -- Describe: context[var]

          Retorna o valor da variável *note ContextVar: 1643. 'var'.  Se
          a variável não for definida no objeto contexto, uma *note
          KeyError: 344. é levantada.

      -- Método: get (var[, default])

          Retorna o valor para 'var' se 'var' tiver o valor no objeto
          contexto.  Caso contrário, retorna 'default'.  Se 'default'
          não for fornecido, retorna ‘None’.

      -- Describe: iter(context)

          Retorna um iterador sobre as variáveis armazenadas no objeto
          contexto.

      -- Describe: len(proxy)

          Retorna o número das variáveis definidas no objeto contexto.

      -- Método: keys ()

          Retorna uma lista de todas as variáveis no objeto contexto.

      -- Método: values ()

          Retorna uma lista dos valores de todas as variáveis no objeto
          contexto.

      -- Método: items ()

          Retorna uma lista de tuplas de 2 elementos contendo todas as
          variáveis e seus valores no objeto contexto.


File: python.info,  Node: Suporte a asyncio,  Prev: Gerenciamento de contexto manual,  Up: contextvars — Variáveis de contexto

5.18.9.3 Suporte a asyncio
..........................

Variáveis de contexto encontram suporte nativo em *note asyncio: a. e
estão prontas para serem usadas sem qualquer configuração extra.  Por
exemplo, aqui está um servidor simples de eco, que usa uma variável de
contexto para disponibilizar o endereço de um cliente remoto na Task que
lida com esse cliente:

     import asyncio
     import contextvars

     client_addr_var = contextvars.ContextVar('client_addr')

     def render_goodbye():
         # O endereço do cliente atualmente manipulado pode ser acessado
         # sem passá-lo explicitamente para esta função.

         client_addr = client_addr_var.get()
         return f'Good bye, client @ {client_addr}\r\n'.encode()

     async def handle_request(reader, writer):
         addr = writer.transport.get_extra_info('socket').getpeername()
         client_addr_var.set(addr)

         # Em qualquer código que chamamos agora é possível obter
         # o endereço do cliente chamando 'client_addr_var.get()'.
         while True:
             line = await reader.readline()
             print(line)
             if not line.strip():
                 break

         writer.write(b'HTTP/1.1 200 OK\r\n')  # linha de status
         writer.write(b'\r\n')  # cabeçalhos
         writer.write(render_goodbye())  # corpo
         writer.close()

     async def main():
         srv = await asyncio.start_server(
             handle_request, '127.0.0.1', 8081)

         async with srv:
             await srv.serve_forever()

     asyncio.run(main())

     # Para testá-lo, você pode usar telnet ou curl:
     #     telnet 127.0.0.1 8081
     #     curl 127.0.0.1:8081

A seguir, os módulos de suporte para alguns dos serviços acima:


File: python.info,  Node: _thread— API de segmentação de baixo nível,  Prev: contextvars — Variáveis de contexto,  Up: Execução Concorrente

5.18.10 ‘_thread’— API de segmentação de baixo nível
----------------------------------------------------

__________________________________________________________________

Este módulo fornece primitivos de baixo nível para trabalhar com vários
threads (também chamados 'processos leves' ou 'tarefas') — vários
threads de controle compartilhando seu espaço de dados global.  Para
sincronização, travas simples (também chamadas de 'mutexes', 'exclusão
mútua' ou 'semáforos binários') são fornecidas.  O módulo *note
threading: ed. fornece uma API de segmentação mais fácil de usar e de
nível mais alto, construída sobre este módulo.

Alterado na versão 3.7: Este módulo costumava ser opcional, agora está
sempre disponível.

Este módulo define as seguintes constantes e funções:

 -- Exceção: _thread.error

     Gerado em erros específicos de segmento.

     Alterado na versão 3.3: Agora este é um sinônimo da exceção
     embutida *note RuntimeError: 195.

 -- Dado: _thread.LockType

     Este é o tipo de objetos de trava.

 -- Função: _thread.start_new_thread (function, args[, kwargs])

     Começa uma nova thread e retorna seu identificador.  A thread
     executa a função 'function' com a lista de argumentos 'args' (que
     deve ser uma tupla).  O argumento opcional 'kwargs' especifica um
     dicionário de argumentos nomeados.

     Quando a função retorna, a thread termina silenciosamente.

     Quando a função termina com uma exceção não processada, *note
     sys.unraisablehook(): 1f7. é chamada para lidar com a exceção.  O
     atributo 'object' do argumento do hook é 'function'.  Por padrão,
     um stack trace (situação da pilha de execução) é exibido e, em
     seguida, a thread termina (mas outras threads continuam a ser
     executadas).

     Quando a função gera uma exceção *note SystemExit: d63, ela é
     ignorada.

     Levanta um *note evento de auditoria: 19fa.
     ‘_thread.start_new_thread’ com os argumentos ‘function’, ‘args’,
     ‘kwargs’.

     Alterado na versão 3.8: *note sys.unraisablehook(): 1f7. agora é
     usada para tratar exceções não tratadas.

 -- Função: _thread.interrupt_main (signum=signal.SIGINT, /)

     Simula o efeito de um sinal chegando na thread principal.  Uma
     thread pode usar esta função para interromper a thread principal,
     embora não haja garantia de que a interrupção ocorrerá
     imediatamente.

     Se fornecido, 'signum' é o número do sinal a ser simulado.  Se
     'signum' não for fornecido, *note signal.SIGINT: 847. será
     simulado.

     Se o sinal fornecido não for tratado pelo Python (o sinal foi
     definido como *note signal.SIG_DFL: 193c. ou *note signal.SIG_IGN:
     193b.), esta função faz nada.

     Alterado na versão 3.10: O argumento 'signum' é adicionado para
     personalizar o sinal de número.

          Nota: Isso não emite o sinal correspondente, mas agenda uma
          chamada para o tratador associado (se existir).  Se você quer
          realmente emitir o sinal, use *note signal.raise_signal():
          191a.

 -- Função: _thread.exit ()

     Levanta a exceção *note SystemExit: d63.  Quando não for detectada,
     a thread terminará silenciosamente.

 -- Função: _thread.allocate_lock ()

     Retorna um novo objeto de trava.  Métodos de trava são descritos
     abaixo.  A trava é desativada inicialmente.

 -- Função: _thread.get_ident ()

     Retorna o ‘identificador de thread’ do thread atual.  Este é um
     número inteiro diferente de zero.  Seu valor não tem significado
     direto; pretende-se que seja um cookie mágico para ser usado, por
     exemplo, para indexar um dicionário de dados específicos do thread.
     identificadores de thread podem ser reciclados quando um thread sai
     e outro é criado.

 -- Função: _thread.get_native_id ()

     Retorna a ID de thread integral nativa da thread atual atribuída
     pelo kernel.  Este é um número inteiro não negativo.  Seu valor
     pode ser usado para identificar exclusivamente essa thread
     específica em todo o sistema (até que a thread termine, após o que
     o valor poderá ser reciclado pelo sistema operacional).

     *note Disponibilidade: 1ed8.: Windows, FreeBSD, Linux, macOS,
     OpenBSD, NetBSD, AIX, DragonFlyBSD, GNU/kFreeBSD.

     Adicionado na versão 3.8.

     Alterado na versão 3.13: Adicionado suporte a GNU/kFreeBSD.

 -- Função: _thread.stack_size ([size])

     Retorna o tamanho da pilha de threads usado ao criar novos threads.
     O argumento opcional 'size' especifica o tamanho da pilha a ser
     usado para threads criados posteriormente e deve ser 0 (usar
     plataforma ou padrão configurado) ou um valor inteiro positivo de
     pelo menos 32.768 (32 KiB). Se 'size' não for especificado, 0 será
     usado.  Se a alteração do tamanho da pilha de threads não for
     suportada, uma *note RuntimeError: 195. será levantada.  Se o
     tamanho da pilha especificado for inválido, uma *note ValueError:
     202. será levantada e o tamanho da pilha não será modificado.
     Atualmente, 0 KiB é o valor mínimo de tamanho de pilha suportado
     para garantir espaço suficiente para o próprio interpretador.
     Observe que algumas plataformas podem ter restrições específicas
     sobre valores para o tamanho da pilha, como exigir um tamanho
     mínimo de pilha > 32 KiB ou exigir alocação em múltiplos do tamanho
     da página de memória do sistema – a documentação da plataforma deve
     ser consultada para obter mais informações (4 páginas KiB são
     comuns; usar múltiplos de 4096 para o tamanho da pilha é a
     abordagem sugerida na ausência de informações mais específicas).

     *note Disponibilidade: 1ed8.: Windows, pthreads.

     Plataformas Unix com suporte a threads POSIX.

 -- Dado: _thread.TIMEOUT_MAX

     O valor máximo permitido para o parâmetro 'timeout' de *note
     Lock.acquire: 698.  A especificação de um tempo limite maior que
     esse valor vai levantar um *note OverflowError: 885.

     Adicionado na versão 3.2.

Os objetos de trava têm os seguintes métodos:

 -- Método: lock.acquire (blocking=True, timeout=-1)

     Sem nenhum argumento opcional, esse método adquire a trava
     incondicionalmente, se necessário, aguardando até que seja liberada
     por outra thread (apenas uma thread por vez pode adquirir uma trava
     — esse é o motivo da sua existência).

     Se o argumento inteiro 'blocking' estiver presente, a ação
     dependerá do seu valor: se for falso, a trava será adquirida apenas
     se puder ser adquirida imediatamente sem aguardar, enquanto se for
     verdadeiro, a trava será adquirida incondicionalmente, conforme
     acima.

     Se o argumento de ponto flutuante 'timeout' estiver presente e
     positivo, ele especificará o tempo máximo de espera em segundos
     antes de retornar.  Um argumento negativo 'timeout' especifica uma
     espera ilimitada.  Você não pode especificar um 'timeout' se
     'blocking' for falso.

     O valor de retorno é ‘True’ se a trava for adquirida com sucesso,
     se não ‘False’.

     Alterado na versão 3.2: O parâmetro 'timeout' é novo.

     Alterado na versão 3.2: As aquisições de trava agora podem ser
     interrompidas por sinais no POSIX.

 -- Método: lock.release ()

     Libera a trava.  A trava deve ter sido adquirido anteriormente, mas
     não necessariamente pela mesma thread.

 -- Método: lock.locked ()

     Retorna o status da trava: ‘True’ se tiver sido adquirida por
     alguma thread, ‘False’ se não for o caso.

Além desses métodos, os objetos de trava também podem ser usados através
da instrução *note with: 5d2, por exemplo:

     import _thread

     uma_trava = _thread.allocate_lock()

     with uma_trava:
         print("uma_trava está travada enquanto isto executa")

'Ressalvas:'

   * Interrupções sempre vão para a thread principal (a exceção *note
     KeyboardInterrupt: 9d9. será recebida por essa thread).

   * Chamar *note sys.exit(): 138e. ou levantar a exceção *note
     SystemExit: d63. é o equivalente a chamar *note _thread.exit():
     3466.

   * O método *note acquire(): 698. de uma trava ser interrompido
     depende da plataforma (de modo que a exceção *note
     KeyboardInterrupt: 9d9. acontecerá imediatamente, em vez de quando
     a trava for travada, ou quando a operação ultrapassar o tempo
     limite).  O método pode ser interrompido em POSIX, mas não em
     Windows.

   * Quando a thread principal se encerra, o fato de outras threads
     sobreviverem depende do sistema.  Na maioria dos sistemas, elas são
     eliminadas sem executar cláusulas *note try: 6e9. … *note finally:
     9d2. ou destruidores de objetos.


File: python.info,  Node: Comunicação em Rede e Interprocesso,  Next: Manuseio de Dados na Internet,  Prev: Execução Concorrente,  Up: A Biblioteca Padrão do Python

5.19 Comunicação em Rede e Interprocesso
========================================

Os módulos descritos neste capítulo fornecem mecanismos para a
comunicação em rede e entre processos.

Alguns módulos funcionam apenas para dois processos que estão na mesma
máquina como, por exemplo, *note signal: c6. e *note mmap: 90.  Outros
módulos possuem suporte a protocolos de rede que dois ou mais processos
podem usar para se comunicar entre máquinas.

A lista de módulos descritos neste capítulo é:

* Menu:

* asyncio — E/S assíncrona::
* socket — Interface de rede de baixo nível::
* ssl — Invólucro de TLS/SSL para objetos socket::
* select — Waiting for I/O completion::
* selectors — High-level I/O multiplexing::
* signal — Define manipuladores para eventos assíncronos::
* mmap — Suporte a arquivos mapeados na memória::


File: python.info,  Node: asyncio — E/S assíncrona,  Next: socket — Interface de rede de baixo nível,  Up: Comunicação em Rede e Interprocesso

5.19.1 ‘asyncio’ — E/S assíncrona
---------------------------------

__________________________________________________________________

Olá Mundo!
..........

     import asyncio

     async def main():
         print('Olá ...')
         await asyncio.sleep(1)
         print('... Mundo!')

     asyncio.run(main())

asyncio é uma biblioteca para escrever código 'simultâneo' usando a
sintaxe 'async/await'.

O asyncio é usado como uma base para várias estruturas assíncronas do
Python que fornecem rede e servidores web de alto desempenho,
bibliotecas de conexão de banco de dados, filas de tarefas distribuídas
etc.

asyncio geralmente serve perfeitamente para código de rede 'estruturado'
de alto nível e vinculado a E/S.

Ver também
..........

*note Uma visão geral conceitual de asyncio: 3475.

     Explicação dos fundamentos do asyncio.

asyncio fornece um conjunto de APIs de 'alto nível' para:

   * *note executar corrotinas do Python: 3476. simultaneamente e ter
     controle total sobre sua execução;

   * realizar *note IPC e E/S de rede: 3477.;

   * controlar *note subprocessos: 3478.;

   * distribuir tarefas por meio de *note filas: 3479.;

   * *note sincronizar: 347a. código simultâneo;

Além disso, há APIs de 'baixo nível' para 'desenvolvedores de biblioteca
e framework' para:

   * criar e gerenciar *note laços de eventos: d9e, que fornecem APIs
     assíncronas para *note rede: 347b, execução de *note subprocessos:
     347c, tratamento de *note sinais de sistemas operacionais: 347d.
     etc;

   * implementar protocolos eficientes usando *note transportes: 347e.;

   * *note fazer uma ponte: 347f. sobre bibliotecas baseadas em chamadas
     e codificar com a sintaxe de async/await.

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

REPL de asyncio
...............

Você pode experimentar um contexto atual ‘asyncio’ no *note REPL: 16a.:

     $ python -m asyncio
     asyncio REPL ...
     Use "await" directly instead of "asyncio.run()".
     Type "help", "copyright", "credits" or "license" for more information.
     >>> import asyncio
     >>> await asyncio.sleep(10, result='hello')
     'hello'

Este REPL oferece compatibilidade limitada com a variável de ambiente
*note PYTHON_BASIC_REPL: 16e.  Recomenda-se o uso do REPL padrão para
obter todas as funcionalidades e os recursos mais recentes.

Levanta um *note evento de auditoria: 19fa. ‘cpython.run_stdin’ sem
argumentos.

Alterado na versão 3.12.5: (também 3.11.10, 3.10.15, 3.9.20 e 3.8.20)
Emite eventos de auditoria.

Alterado na versão 3.13: Usa PyrePL, se possível, nesse caso *note
PYTHONSTARTUP: ffe. também é executado.  Emite eventos de auditoria.

Referência
..........

* Menu:

* Runners::
* Corrotinas e tarefas::
* Streams::
* Synchronization Primitives::
* Subprocessos::
* Filas::
* Exceções: Exceções<13>.
* Laço de eventos::
* Futuros::
* Transports e Protocols::
* Políticas::
* Suporte a plataformas::
* Extensão::
* Índice da API de alto nível::
* Índice de APIs de baixo nível::
* Desenvolvendo com asyncio::


File: python.info,  Node: Runners,  Next: Corrotinas e tarefas,  Up: asyncio — E/S assíncrona

5.19.1.1 Runners
................

'Source code:' Lib/asyncio/runners.py(1)

This section outlines high-level asyncio primitives to run asyncio code.

They are built on top of an *note event loop: d9e. with the aim to
simplify async code usage for common wide-spread scenarios.

* Menu:

* Executando um programa asyncio::
* Runner context manager::
* Handling Keyboard Interruption::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/asyncio/runners.py


File: python.info,  Node: Executando um programa asyncio,  Next: Runner context manager,  Up: Runners

5.19.1.2 Executando um programa asyncio
.......................................

 -- Função: asyncio.run (coro, *, debug=None, loop_factory=None)

     Executa a *note corrotina: 491. 'coro' e retorna o resultado.

     This function runs the passed coroutine, taking care of managing
     the asyncio event loop, 'finalizing asynchronous generators', and
     closing the executor.

     Esta função não pode ser chamada quando outro laço de eventos
     asyncio está executando na mesma thread.

     If 'debug' is ‘True’, the event loop will be run in debug mode.
     ‘False’ disables debug mode explicitly.  ‘None’ is used to respect
     the global *note Modo de Depuração: 1ed3. settings.

     If 'loop_factory' is not ‘None’, it is used to create a new event
     loop; otherwise *note asyncio.new_event_loop(): 3484. is used.  The
     loop is closed at the end.  This function should be used as a main
     entry point for asyncio programs, and should ideally only be called
     once.  It is recommended to use 'loop_factory' to configure the
     event loop instead of policies.  Passing *note asyncio.EventLoop:
     17e9. allows running asyncio without the policy system.

     The executor is given a timeout duration of 5 minutes to shutdown.
     If the executor hasn’t finished within that duration, a warning is
     emitted and the executor is closed.

     Exemplo:

          async def main():
              await asyncio.sleep(1)
              print('hello')

          asyncio.run(main())

     Adicionado na versão 3.7.

     Alterado na versão 3.9: Atualizado para usar *note
     loop.shutdown_default_executor(): 8ed.

     Alterado na versão 3.10: 'debug' is ‘None’ by default to respect
     the global debug mode settings.

     Alterado na versão 3.12: Added 'loop_factory' parameter.


File: python.info,  Node: Runner context manager,  Next: Handling Keyboard Interruption,  Prev: Executando um programa asyncio,  Up: Runners

5.19.1.3 Runner context manager
...............................

 -- Classe: asyncio.Runner (*, debug=None, loop_factory=None)

     A context manager that simplifies 'multiple' async function calls
     in the same context.

     Sometimes several top-level async functions should be called in the
     same *note event loop: d9e. and *note contextvars.Context: 15b7.

     If 'debug' is ‘True’, the event loop will be run in debug mode.
     ‘False’ disables debug mode explicitly.  ‘None’ is used to respect
     the global *note Modo de Depuração: 1ed3. settings.

     'loop_factory' could be used for overriding the loop creation.  It
     is the responsibility of the 'loop_factory' to set the created loop
     as the current one.  By default *note asyncio.new_event_loop():
     3484. is used and set as current event loop with *note
     asyncio.set_event_loop(): 18df. if 'loop_factory' is ‘None’.

     Basically, *note asyncio.run(): 47c. example can be rewritten with
     the runner usage:

          async def main():
              await asyncio.sleep(1)
              print('hello')

          with asyncio.Runner() as runner:
              runner.run(main())

     Adicionado na versão 3.11.

      -- Método: run (coro, *, context=None)

          Run a *note coroutine: 491. 'coro' in the embedded loop.

          Return the coroutine’s result or raise its exception.

          An optional keyword-only 'context' argument allows specifying
          a custom *note contextvars.Context: 15b7. for the 'coro' to
          run in.  The runner’s default context is used if ‘None’.

          Esta função não pode ser chamada quando outro laço de eventos
          asyncio está executando na mesma thread.

      -- Método: close ()

          Close the runner.

          Finalize asynchronous generators, shutdown default executor,
          close the event loop and release embedded *note
          contextvars.Context: 15b7.

      -- Método: get_loop ()

          Return the event loop associated with the runner instance.

          Nota: *note Runner: 600. uses the lazy initialization
          strategy, its constructor doesn’t initialize underlying
          low-level structures.

          Embedded 'loop' and 'context' are created at the *note with:
          5d2. body entering or the first call of *note run(): 47c. or
          *note get_loop(): 3487.


File: python.info,  Node: Handling Keyboard Interruption,  Prev: Runner context manager,  Up: Runners

5.19.1.4 Handling Keyboard Interruption
.......................................

Adicionado na versão 3.11.

When *note signal.SIGINT: 847. is raised by ‘Ctrl’-‘C’, *note
KeyboardInterrupt: 9d9. exception is raised in the main thread by
default.  However this doesn’t work with *note asyncio: a. because it
can interrupt asyncio internals and can hang the program from exiting.

To mitigate this issue, *note asyncio: a. handles *note signal.SIGINT:
847. as follows:

  1. *note asyncio.Runner.run(): 17a1. installs a custom *note
     signal.SIGINT: 847. handler before any user code is executed and
     removes it when exiting from the function.

  2. The *note Runner: 600. creates the main task for the passed
     coroutine for its execution.

  3. When *note signal.SIGINT: 847. is raised by ‘Ctrl’-‘C’, the custom
     signal handler cancels the main task by calling *note
     asyncio.Task.cancel(): 1b7. which raises *note
     asyncio.CancelledError: 1b8. inside the main task.  This causes the
     Python stack to unwind, ‘try/except’ and ‘try/finally’ blocks can
     be used for resource cleanup.  After the main task is cancelled,
     *note asyncio.Runner.run(): 17a1. raises *note KeyboardInterrupt:
     9d9.

  4. A user could write a tight loop which cannot be interrupted by
     *note asyncio.Task.cancel(): 1b7, in which case the second
     following ‘Ctrl’-‘C’ immediately raises the *note
     KeyboardInterrupt: 9d9. without cancelling the main task.


File: python.info,  Node: Corrotinas e tarefas,  Next: Streams,  Prev: Runners,  Up: asyncio — E/S assíncrona

5.19.1.5 Corrotinas e tarefas
.............................

Esta seção descreve APIs assíncronas de alto nível para trabalhar com
corrotinas e tarefas.

* Menu:

* Corrotinas: Corrotinas<3>.
* Aguardáveis::
* Criando tarefas::
* Cancelamento de tarefas::
* Grupos de tarefas::
* Dormindo::
* Executando tarefas concorrentemente::
* Fábrica de tarefas ansiosas::
* Protegendo contra cancelamento::
* Tempo limite::
* Primitivas de espera::
* Executando em threads::
* Agendando a partir de outras threads::
* Introspecção::
* Objeto Task::


File: python.info,  Node: Corrotinas<3>,  Next: Aguardáveis,  Up: Corrotinas e tarefas

5.19.1.6 Corrotinas
...................

'Código-fonte:' Lib/asyncio/coroutines.py(1)

__________________________________________________________________

*note Corrotinas: 491. declaradas com a sintaxe async/await é a forma
preferida de escrever aplicações assíncronas.  Por exemplo, o seguinte
trecho de código imprime “hello”, espera 1 segundo, e então imprime
“world”:

     >>> import asyncio

     >>> async def main():
     ...     print('hello')
     ...     await asyncio.sleep(1)
     ...     print('world')

     >>> asyncio.run(main())
     hello
     world

Perceba que simplesmente chamar uma corrotina não irá agendá-la para ser
executada:

     >>> main()
     <coroutine object main at 0x1053bb7c8>

To actually run a coroutine, asyncio provides the following mechanisms:

   * A função *note asyncio.run(): 47c. para executar a função “main()”
     do ponto de entrada no nível mais alto (veja o exemplo acima.)

   * Aguardando uma corrotina.  O seguinte trecho de código exibirá
     “hello” após esperar por 1 segundo e, em seguida, exibirá “world”
     após esperar por 'outros' 2 segundos:

          import asyncio
          import time

          async def say_after(delay, what):
              await asyncio.sleep(delay)
              print(what)

          async def main():
              print(f"started at {time.strftime('%X')}")

              await say_after(1, 'hello')
              await say_after(2, 'world')

              print(f"finished at {time.strftime('%X')}")

          asyncio.run(main())

     Resultado esperado:

          started at 17:13:52
          hello
          world
          finished at 17:13:55

   * A função *note asyncio.create_task(): 1bf. para executar corrotinas
     concorrentemente como *note Tasks: 1be. asyncio.

     Vamos modificar o exemplo acima e executar duas corrotinas
     ‘say_after’ 'concorrentemente':

          async def main():
              task1 = asyncio.create_task(
                  say_after(1, 'hello'))

              task2 = asyncio.create_task(
                  say_after(2, 'world'))

              print(f"started at {time.strftime('%X')}")

              # Wait until both tasks are completed (should take
              # around 2 seconds.)
              await task1
              await task2

              print(f"finished at {time.strftime('%X')}")

     Perceba que a saída esperada agora mostra que o trecho de código é
     executado 1 segundo mais rápido do que antes:

          started at 17:14:32
          hello
          world
          finished at 17:14:34

   * The *note asyncio.TaskGroup: 1b5. class provides a more modern
     alternative to *note create_task(): 1bf.  Using this API, the last
     example becomes:

          async def main():
              async with asyncio.TaskGroup() as tg:
                  task1 = tg.create_task(
                      say_after(1, 'hello'))

                  task2 = tg.create_task(
                      say_after(2, 'world'))

                  print(f"started at {time.strftime('%X')}")

              # The await is implicit when the context manager exits.

              print(f"finished at {time.strftime('%X')}")

     The timing and output should be the same as for the previous
     version.

     Adicionado na versão 3.11: *note asyncio.TaskGroup: 1b5.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/asyncio/coroutines.py


File: python.info,  Node: Aguardáveis,  Next: Criando tarefas,  Prev: Corrotinas<3>,  Up: Corrotinas e tarefas

5.19.1.7 Aguardáveis
....................

Dizemos que um objeto é um objeto 'aguardável' se ele pode ser usado em
uma expressão *note await: 1b9.  Muitas APIs asyncio são projetadas para
aceitar aguardáveis.

Existem três tipos principais de objetos 'aguardáveis': 'corrotinas',
'Tarefas', e 'Futuros'.

Corrotinas
..........

Corrotinas Python são 'aguardáveis' e portanto podem ser aguardadas a
partir de outras corrotinas:

     import asyncio

     async def nested():
         return 42

     async def main():
         # Nothing happens if we just call "nested()".
         # A coroutine object is created but not awaited,
         # so it *won't run at all*.
         nested()  # will raise a "RuntimeWarning".

         # Let's do it differently now and await it:
         print(await nested())  # will print "42".

     asyncio.run(main())

     Importante: Nesta documentação, o termo “corrotina” pode ser usado
     para dois conceitos intimamente relacionados:

        * uma 'função de corrotina': uma função *note async def: 5d1.;

        * um 'objeto de corrotina': um objeto retornado ao chamar uma
          'função de corrotina'.

Tarefas
.......

'Tarefas' são usadas para agendar corrotinas 'concorrentemente'.

Quando uma corrotina é envolta em uma 'tarefa' com funções como *note
asyncio.create_task(): 1bf, a corrotina é automaticamente agendada para
executar em breve:

     import asyncio

     async def nested():
         return 42

     async def main():
         # Schedule nested() to run soon concurrently
         # with "main()".
         task = asyncio.create_task(nested())

         # "task" can now be used to cancel "nested()", or
         # can simply be awaited to wait until it is complete:
         await task

     asyncio.run(main())

Futuros
.......

Um *note Future: be6. é um objeto aguardável especial de 'baixo nível'
que representa um 'resultado eventual' de uma operação assíncrona.

Quando um objeto Future é 'aguardado' isso significa que a corrotina irá
esperar até que o Future seja resolvido em algum outro local.

Objetos Future em asyncio são necessários para permitir que código
baseado em função de retorno seja utilizado com async/await.

Normalmente 'não existe necessidade' em criar objetos Future no nível de
código da aplicação.

Objetos Future, algumas vezes expostos por bibliotecas e algumas APIs
asyncio, podem ser aguardados:

     async def main():
         await function_that_returns_a_future_object()

         # this is also valid:
         await asyncio.gather(
             function_that_returns_a_future_object(),
             some_python_coroutine()
         )

Um bom exemplo de uma função de baixo nível que retorna um objeto Future
é *note loop.run_in_executor(): 8ef.


File: python.info,  Node: Criando tarefas,  Next: Cancelamento de tarefas,  Prev: Aguardáveis,  Up: Corrotinas e tarefas

5.19.1.8 Criando tarefas
........................

'Source code:' Lib/asyncio/tasks.py(1)

__________________________________________________________________

 -- Função: asyncio.create_task (coro, *, name=None, context=None)

     Envolve a *note corrotina: 3476. 'coro' em uma *note Task: 1be. e
     agenda sua execução.  Retorna o objeto Task.

     Se 'name' não for ‘None’, ele é setado como o nome da tarefa usando
     *note Task.set_name(): 9e5.

     Um argumento opcional somente-nomeado 'context' permite especificar
     um *note contextvars.Context: 15b7. personalizado para a 'coro' ser
     executada.  Uma cópia do contexto atual é criada quando nenhum
     'context' for fornecido.

     A tarefa é executada no laço e retornada por *note
     get_running_loop(): b1d, *note RuntimeError: 195. é levantado se
     não existir um laço em execução na thread atual.

          Nota: *note asyncio.TaskGroup.create_task(): 1bc. é uma nova
          alternativa que aproveita a concorrência estruturada e permite
          aguardar um grupo de tarefas relacionadas, com fortes
          garantias de segurança.

          Importante: Mantenha uma referência para o resultado dessa
          função, evitando que uma tarefa desapareça durante a execução.
          O laço de eventos mantém apenas referências fracas para as
          tarefas.  Uma tarefa que não é referenciada por nada mais pode
          ser removida pelo coletor de lixo a qualquer momento, antes
          mesmo da função ser finalizada.  Para tarefas de segundo plano
          “atire-e-esqueça”, junte-as em uma coleção:

               background_tasks = set()for i in range(10):    task = asyncio.create_task(some_coro(param=i))    # Adiciona tarefa ao conjunto. Isto cria uma referência forte.    background_tasks.add(task)    # Para evitar manter referências a tarefas concluídas para sempre,    # fazer com que cada tarefa remova a sua própria referência do conjunto após    # a conclusão:    task.add_done_callback(background_tasks.discard)

     Adicionado na versão 3.7.

     Alterado na versão 3.8: Adicionado o parâmetro 'name'.

     Alterado na versão 3.11: Adicionado o parâmetro 'context'.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/asyncio/tasks.py


File: python.info,  Node: Cancelamento de tarefas,  Next: Grupos de tarefas,  Prev: Criando tarefas,  Up: Corrotinas e tarefas

5.19.1.9 Cancelamento de tarefas
................................

Tasks can easily and safely be cancelled.  When a task is cancelled,
*note asyncio.CancelledError: 1b8. will be raised in the task at the
next opportunity.

It is recommended that coroutines use ‘try/finally’ blocks to robustly
perform clean-up logic.  In case *note asyncio.CancelledError: 1b8. is
explicitly caught, it should generally be propagated when clean-up is
complete.  *note asyncio.CancelledError: 1b8. directly subclasses *note
BaseException: 5bb. so most code will not need to be aware of it.

The asyncio components that enable structured concurrency, like *note
asyncio.TaskGroup: 1b5. and *note asyncio.timeout(): 5fe, are
implemented using cancellation internally and might misbehave if a
coroutine swallows *note asyncio.CancelledError: 1b8.  Similarly, user
code should not generally call *note uncancel: 1bb.  However, in cases
when suppressing *note asyncio.CancelledError: 1b8. is truly desired, it
is necessary to also call ‘uncancel()’ to completely remove the
cancellation state.


File: python.info,  Node: Grupos de tarefas,  Next: Dormindo,  Prev: Cancelamento de tarefas,  Up: Corrotinas e tarefas

5.19.1.10 Grupos de tarefas
...........................

Grupos de tarefas combinam uma API de criação de tarefas com uma forma
conveniente e confiável de aguardar que todas as tarefas do grupo
terminem.

 -- Classe: asyncio.TaskGroup

     Um *note gerenciador de contexto assíncrono: 5fc. que contém um
     grupo de tarefas.  As tarefas podem ser adicionadas ao grupo usando
     *note create_task(): 1bf.  Todas as tarefas são aguardadas quando o
     gerenciador de contexto sai.

     Adicionado na versão 3.11.

      -- Método: create_task (coro, *, name=None, context=None)

          Cria uma tarefa neste grupo de tarefas.  A assinatura
          corresponde à de *note asyncio.create_task(): 1bf.  Se o grupo
          de tarefas estiver inativo (por exemplo, ainda não iniciado,
          já terminado ou em processo de encerramento), fecharemos a
          ‘coro’ dada.

          Alterado na versão 3.13: Fecha a corrotina dada se o grupo de
          tarefas não estiver ativo.

Exemplo:

     async def main():    async with asyncio.TaskGroup() as tg:        task1 = tg.create_task(some_coro(...))        task2 = tg.create_task(another_coro(...))    print(f"Ambas as tarefas estão agora concluídas: {task1.result()}, {task2.result()}")

A instrução ‘async with’ aguardará que todas as tarefas do grupo
terminem.  Enquanto aguarda, novas tarefas ainda podem ser adicionadas
ao grupo (por exemplo, passando ‘tg’ para uma das corrotinas e chamando
‘tg.create_task()’ nessa corrotina).  Uma vez que a última tarefa tenha
terminado e o bloco ‘async with’ tenha sido finalizados, não podem ser
adicionadas novas tarefas ao grupo.

Na primeira vez que qualquer uma das tarefas do grupo falha com uma
exceção diferente de *note asyncio.CancelledError: 1b8, as tarefas
restantes do grupo são canceladas.  Não podem ser adicionadas mais
tarefas ao grupo.  Neste ponto, se o corpo da instrução ‘async with’
ainda estiver ativo (ou seja, *note __aexit__(): 1716. ainda não foi
chamado), a tarefa que contém diretamente a instrução ‘async with’
também é cancelada.  A *note asyncio.CancelledError: 1b8. resultante irá
interromper um ‘await’, mas não se propagará para fora da instrução
‘async with’.

Uma vez que todas as tarefas tenham terminado, se alguma tarefa falhou
com uma exceção diferente de *note asyncio.CancelledError: 1b8, essas
exceções são combinadas em uma *note ExceptionGroup: 1b6. ou *note
BaseExceptionGroup: 25f. (conforme apropriado; veja a sua documentação),
que é então levantada.

Duas exceções base são tratadas de forma especial: se alguma tarefa
falhar com *note KeyboardInterrupt: 9d9. ou *note SystemExit: d63, o
grupo de tarefas ainda cancela as tarefas restantes e aguarda por elas,
mas depois a *note KeyboardInterrupt: 9d9. ou *note SystemExit: d63.
inicial é levantada novamente em vez de *note ExceptionGroup: 1b6. ou
*note BaseExceptionGroup: 25f.

Se o corpo da instrução ‘async with’ sair com uma exceção (portanto,
*note __aexit__(): 1716. é chamado com uma exceção definida), isso é
tratado da mesma forma que se uma das tarefas falhasse: as tarefas
restantes são canceladas e depois aguardadas, e as exceções de
não-cancelamento são agrupadas em um grupo de exceções e levantadas.  A
exceção passada para *note __aexit__(): 1716, a menos que seja *note
asyncio.CancelledError: 1b8, também é incluída no grupo de exceções.  O
mesmo caso especial é aplicado a *note KeyboardInterrupt: 9d9. e *note
SystemExit: d63, como no parágrafo anterior.

Os grupos de tarefas tomam cuidado para não confundir o cancelamento
interno, usado para “acordar” o seu *note __aexit__(): 1716, com pedidos
de cancelamento para a tarefa na qual estão a ser executados, feitos por
outras partes.  Em particular, quando um grupo de tarefas está
sintaticamente aninhado noutro, e ambos experimentam uma exceção numa
das suas tarefas filhas simultaneamente, o grupo de tarefas interno
processará as suas exceções, e depois o grupo de tarefas externo
receberá outro cancelamento e processará as suas próprias exceções.

No caso de um grupo de tarefas ser cancelado externamente e também
precisar levantar uma *note ExceptionGroup: 1b6, chamará o método *note
cancel(): 1b7. da tarefa pai.  Isto garante que um *note
asyncio.CancelledError: 1b8. será levantada no próximo *note await: 1b9,
para que o cancelamento não se perca.

Os grupos de tarefas preservam a contagem de cancelamentos reportada por
*note asyncio.Task.cancelling(): 1ba.

Alterado na versão 3.13: Melhoria no tratamento de cancelamentos
internos e externos simultâneos e na preservação correta das contagens
de cancelamentos.

* Menu:

* Encerrando um grupo de tarefas::


File: python.info,  Node: Encerrando um grupo de tarefas,  Up: Grupos de tarefas

5.19.1.11 Encerrando um grupo de tarefas
........................................

While terminating a task group is not natively supported by the standard
library, termination can be achieved by adding an exception-raising task
to the task group and ignoring the raised exception:

     import asyncio
     from asyncio import TaskGroup

     class TerminateTaskGroup(Exception):
         """Exception raised to terminate a task group."""

     async def force_terminate_task_group():
         """Used to force termination of a task group."""
         raise TerminateTaskGroup()

     async def job(task_id, sleep_time):
         print(f'Task {task_id}: start')
         await asyncio.sleep(sleep_time)
         print(f'Task {task_id}: done')

     async def main():
         try:
             async with TaskGroup() as group:
                 # spawn some tasks
                 group.create_task(job(1, 0.5))
                 group.create_task(job(2, 1.5))
                 # sleep for 1 second
                 await asyncio.sleep(1)
                 # add an exception-raising task to force the group to terminate
                 group.create_task(force_terminate_task_group())
         except* TerminateTaskGroup:
             pass

     asyncio.run(main())

Expected output:

     Task 1: start
     Task 2: start
     Task 1: done


File: python.info,  Node: Dormindo,  Next: Executando tarefas concorrentemente,  Prev: Grupos de tarefas,  Up: Corrotinas e tarefas

5.19.1.12 Dormindo
..................

 -- Função: async asyncio.sleep (delay, result=None)

     Bloqueia por 'delay' segundos.

     Se 'result' é fornecido, é retornado para o autor da chamada quando
     a corrotina termina.

     ‘sleep()’ sempre suspende a tarefa atual, permitindo que outras
     tarefas sejam executadas.

     Configurando o delay para 0 fornece um caminho otimizado para
     permitir que outras tarefas executem.  Isto pode ser usado por
     funções de longa execução para evitar que bloqueiem o laço de
     eventos por toda a duração da chamada da função.  Exemplo de uma
     corrotina exibindo a data atual a cada segundo durante 5 segundos:

          import asyncio
          import datetime

          async def display_date():
              loop = asyncio.get_running_loop()
              end_time = loop.time() + 5.0
              while True:
                  print(datetime.datetime.now())
                  if (loop.time() + 1.0) >= end_time:
                      break
                  await asyncio.sleep(1)

          asyncio.run(display_date())

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     Alterado na versão 3.13: Raises *note ValueError: 202. if 'delay'
     is *note nan: 663.


File: python.info,  Node: Executando tarefas concorrentemente,  Next: Fábrica de tarefas ansiosas,  Prev: Dormindo,  Up: Corrotinas e tarefas

5.19.1.13 Executando tarefas concorrentemente
.............................................

 -- Função: awaitable asyncio.gather (*aws, return_exceptions=False)

     Executa *note objetos aguardáveis: 348d. na sequência 'aws' de
     forma 'concorrente'.

     Se qualquer aguardável em 'aws' é uma corrotina, ele é
     automaticamente agendado como uma Tarefa.

     Se todos os aguardáveis forem concluídos com sucesso, o resultado é
     uma lista agregada de valores retornados.  A ordem dos valores
     resultantes corresponde a ordem dos aguardáveis em 'aws'.

     Se 'return_exceptions' for ‘False’ (valor padrão), a primeira
     exceção levantada é imediatamente propagada para a tarefa que
     espera em ‘gather()’.  Outros aguardáveis na sequência 'aws' 'não
     serão cancelados' e irão continuar a executar.

     Se 'return_exceptions' for ‘True’, exceções são tratadas da mesma
     forma que resultados com sucesso, e agregadas na lista de
     resultados.

     Se ‘gather()’ for 'cancelado', todos os aguardáveis que foram
     submetidos (que não foram concluídos ainda) também são
     'cancelados'.

     Se qualquer Tarefa ou Futuro da sequência 'aws' for 'cancelado',
     ele é tratado como se tivesse levantado *note CancelledError: 1b8.
     – a chamada para ‘gather()’ 'não' é cancelada neste caso.  Isso
     existe para prevenir que o cancelamento de uma Tarefa/Futuro
     submetida ocasione outras Tarefas/Futuros a serem cancelados.

          Nota: A new alternative to create and run tasks concurrently
          and wait for their completion is *note asyncio.TaskGroup: 1b5.
          'TaskGroup' provides stronger safety guarantees than 'gather'
          for scheduling a nesting of subtasks: if a task (or a subtask,
          a task scheduled by a task) raises an exception, 'TaskGroup'
          will, while 'gather' will not, cancel the remaining scheduled
          tasks).
     Exemplo:

          import asyncio

          async def factorial(name, number):
              f = 1
              for i in range(2, number + 1):
                  print(f"Task {name}: Compute factorial({number}), currently i={i}...")
                  await asyncio.sleep(1)
                  f *= i
              print(f"Task {name}: factorial({number}) = {f}")
              return f

          async def main():
              # Schedule three calls *concurrently*:
              L = await asyncio.gather(
                  factorial("A", 2),
                  factorial("B", 3),
                  factorial("C", 4),
              )
              print(L)

          asyncio.run(main())

          # Expected output:
          #
          #     Task A: Compute factorial(2), currently i=2...
          #     Task B: Compute factorial(3), currently i=2...
          #     Task C: Compute factorial(4), currently i=2...
          #     Task A: factorial(2) = 2
          #     Task B: Compute factorial(3), currently i=3...
          #     Task C: Compute factorial(4), currently i=3...
          #     Task B: factorial(3) = 6
          #     Task C: Compute factorial(4), currently i=4...
          #     Task C: factorial(4) = 24
          #     [2, 6, 24]

          Nota: If 'return_exceptions' is false, cancelling gather()
          after it has been marked done won’t cancel any submitted
          awaitables.  For instance, gather can be marked done after
          propagating an exception to the caller, therefore, calling
          ‘gather.cancel()’ after catching an exception (raised by one
          of the awaitables) from gather won’t cancel any other
          awaitables.

     Alterado na versão 3.7: Se 'gather' por si mesmo for cancelado, o
     cancelamento é propagado independente de 'return_exceptions'.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     Descontinuado desde a versão 3.10: Aviso de descontinuidade é
     emitido se nenhum argumento posicional for fornecido, ou nem todos
     os argumentos posicionais são objetos similar a Futuro, e não
     existe nenhum laço de eventos em execução.


File: python.info,  Node: Fábrica de tarefas ansiosas,  Next: Protegendo contra cancelamento,  Prev: Executando tarefas concorrentemente,  Up: Corrotinas e tarefas

5.19.1.14 Fábrica de tarefas ansiosas
.....................................

 -- Função: asyncio.eager_task_factory (loop, coro, *, name=None,
          context=None)

     A task factory for eager task execution.

     When using this factory (via *note
     loop.set_task_factory(asyncio.eager_task_factory): dee.),
     coroutines begin execution synchronously during *note Task: 1be.
     construction.  Tasks are only scheduled on the event loop if they
     block.  This can be a performance improvement as the overhead of
     loop scheduling is avoided for coroutines that complete
     synchronously.

     A common example where this is beneficial is coroutines which
     employ caching or memoization to avoid actual I/O when possible.

          Nota: Immediate execution of the coroutine is a semantic
          change.  If the coroutine returns or raises, the task is never
          scheduled to the event loop.  If the coroutine execution
          blocks, the task is scheduled to the event loop.  This change
          may introduce behavior changes to existing applications.  For
          example, the application’s task execution order is likely to
          change.

     Adicionado na versão 3.12.

 -- Função: asyncio.create_eager_task_factory (custom_task_constructor)

     Create an eager task factory, similar to *note
     eager_task_factory(): 477, using the provided
     'custom_task_constructor' when creating a new task instead of the
     default *note Task: 1be.

     'custom_task_constructor' must be a 'callable' with the signature
     matching the signature of *note Task.__init__: 1be.  The callable
     must return a *note asyncio.Task: 1be.-compatible object.

     This function returns a 'callable' intended to be used as a task
     factory of an event loop via *note loop.set_task_factory(factory):
     dee.).

     Adicionado na versão 3.12.


File: python.info,  Node: Protegendo contra cancelamento,  Next: Tempo limite,  Prev: Fábrica de tarefas ansiosas,  Up: Corrotinas e tarefas

5.19.1.15 Protegendo contra cancelamento
........................................

 -- Função: awaitable asyncio.shield (aw)

     Protege um *note objeto aguardável: 348d. de ser *note cancelado:
     1b7.

     Se 'aw' é uma corrotina, ela é automaticamente agendada como uma
     Tarefa.

     A instrução:

          task = asyncio.create_task(something())
          res = await shield(task)

     é equivalente a:

          res = await something()

     'exceto' que se a corrotina contendo-a for cancelada, a Tarefa
     executando em ‘something()’ não é cancelada.  Do ponto de vista de
     ‘something()’, o cancelamento não aconteceu.  Apesar do autor da
     chamada ainda estar cancelado, então a expressão “await” ainda
     levanta um *note CancelledError: 1b8.

     Se ‘something()’ é cancelada por outros meios (isto é, dentro ou a
     partir de si mesma) isso também iria cancelar ‘shield()’.

     Se for desejado ignorar completamente os cancelamentos (não
     recomendado) a função ‘shield()’ deve ser combinada com uma
     cláusula try/except, conforme abaixo:

          task = asyncio.create_task(something())
          try:
              res = await shield(task)
          except CancelledError:
              res = None

          Importante: Mantenha uma referência para as tarefas passadas
          para essa função função, evitando assim que uma tarefa
          desapareça durante a execução.  O laço de eventos mantém
          apenas referências fracas para as tarefas.  Uma tarefa que não
          é referenciada por nada mais pode ser removida pelo coletor de
          lixo a qualquer momento, antes mesmo da função ser finalizada.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     Descontinuado desde a versão 3.10: Aviso de descontinuidade é
     emitido se 'aw' não é um objeto similar a Futuro, e não existe
     nenhum laço de eventos em execução.


File: python.info,  Node: Tempo limite,  Next: Primitivas de espera,  Prev: Protegendo contra cancelamento,  Up: Corrotinas e tarefas

5.19.1.16 Tempo limite
......................

 -- Função: asyncio.timeout (delay)

     Return an *note asynchronous context manager: 5fc. that can be used
     to limit the amount of time spent waiting on something.

     'delay' can either be ‘None’, or a float/int number of seconds to
     wait.  If 'delay' is ‘None’, no time limit will be applied; this
     can be useful if the delay is unknown when the context manager is
     created.

     In either case, the context manager can be rescheduled after
     creation using *note Timeout.reschedule(): 349c.

     Exemplo:

          async def main():
              async with asyncio.timeout(10):
                  await long_running_task()

     If ‘long_running_task’ takes more than 10 seconds to complete, the
     context manager will cancel the current task and handle the
     resulting *note asyncio.CancelledError: 1b8. internally,
     transforming it into a *note TimeoutError: 838. which can be caught
     and handled.

          Nota: The *note asyncio.timeout(): 5fe. context manager is
          what transforms the *note asyncio.CancelledError: 1b8. into a
          *note TimeoutError: 838, which means the *note TimeoutError:
          838. can only be caught 'outside' of the context manager.

     Example of catching *note TimeoutError: 838.:

          async def main():
              try:
                  async with asyncio.timeout(10):
                      await long_running_task()
              except TimeoutError:
                  print("The long operation timed out, but we've handled it.")

              print("This statement will run regardless.")

     The context manager produced by *note asyncio.timeout(): 5fe. can
     be rescheduled to a different deadline and inspected.

      -- Classe: asyncio.Timeout (when)

          An *note asynchronous context manager: 5fc. for cancelling
          overdue coroutines.

          ‘when’ should be an absolute time at which the context should
          time out, as measured by the event loop’s clock:

             - If ‘when’ is ‘None’, the timeout will never trigger.

             - If ‘when < loop.time()’, the timeout will trigger on the
               next iteration of the event loop.

                -- Método: when () -> float | None

                    Return the current deadline, or ‘None’ if the
                    current deadline is not set.

                -- Método: reschedule (when: float | None)

                    Reschedule the timeout.

                -- Método: expired () -> bool

                    Return whether the context manager has exceeded its
                    deadline (expired).

     Exemplo:

          async def main():
              try:
                  # We do not know the timeout when starting, so we pass ``None``.
                  async with asyncio.timeout(None) as cm:
                      # We know the timeout now, so we reschedule it.
                      new_deadline = get_running_loop().time() + 10
                      cm.reschedule(new_deadline)

                      await long_running_task()
              except TimeoutError:
                  pass

              if cm.expired():
                  print("Looks like we haven't finished on time.")

     Timeout context managers can be safely nested.

     Adicionado na versão 3.11.

 -- Função: asyncio.timeout_at (when)

     Similar to *note asyncio.timeout(): 5fe, except 'when' is the
     absolute time to stop waiting, or ‘None’.

     Exemplo:

          async def main():
              loop = get_running_loop()
              deadline = loop.time() + 20
              try:
                  async with asyncio.timeout_at(deadline):
                      await long_running_task()
              except TimeoutError:
                  print("The long operation timed out, but we've handled it.")

              print("This statement will run regardless.")

     Adicionado na versão 3.11.

 -- Função: async asyncio.wait_for (aw, timeout)

     Espera o *note aguardável: 348d. 'aw' concluir sem ultrapassar o
     tempo limite “timeout”.

     Se 'aw' é uma corrotina, ela é automaticamente agendada como uma
     Tarefa.

     'timeout' pode ser ‘None’, ou um ponto flutuante, ou um número
     inteiro de segundos para aguardar.  Se 'timeout' é ‘None’, aguarda
     até o future encerrar.

     If a timeout occurs, it cancels the task and raises *note
     TimeoutError: 838.

     Para evitar o *note cancelamento: 1b7. da tarefa, envolva-a com
     *note shield(): a7a.

     A função irá aguardar até o future ser realmente cancelado, então o
     tempo total de espera pode exceder o tempo limite 'timeout'.  Se
     uma exceção ocorrer durante o cancelamento, ela será propagada.

     Se ele for cancelado, o future 'aw' também é cancelado.  Exemplo:

          async def eternity():
              # Sleep for one hour
              await asyncio.sleep(3600)
              print('yay!')

          async def main():
              # Wait for at most 1 second
              try:
                  await asyncio.wait_for(eternity(), timeout=1.0)
              except TimeoutError:
                  print('timeout!')

          asyncio.run(main())

          # Expected output:
          #
          #     timeout!

     Alterado na versão 3.7: When 'aw' is cancelled due to a timeout,
     ‘wait_for’ waits for 'aw' to be cancelled.  Previously, it raised
     *note TimeoutError: 838. immediately.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     Alterado na versão 3.11: Raises *note TimeoutError: 838. instead of
     *note asyncio.TimeoutError: 183c.


File: python.info,  Node: Primitivas de espera,  Next: Executando em threads,  Prev: Tempo limite,  Up: Corrotinas e tarefas

5.19.1.17 Primitivas de espera
..............................

 -- Função: async asyncio.wait (aws, *, timeout=None,
          return_when=ALL_COMPLETED)

     Run *note Future: be6. and *note Task: 1be. instances in the 'aws'
     iterable concurrently and block until the condition specified by
     'return_when'.

     O iterável 'aws' não deve ser vazio.

     Retorna dois conjuntos de Tarefas/Futuros: ‘(done, pending)’.

     Uso:

          done, pending = await asyncio.wait(aws)

     'timeout' (um ponto flutuante ou inteiro), se especificado, pode
     ser usado para controlar o número máximo de segundos para aguardar
     antes de retornar.

     Note that this function does not raise *note TimeoutError: 838.
     Futures or Tasks that aren’t done when the timeout occurs are
     simply returned in the second set.

     'return_when' indica quando esta função deve retornar.  Ele deve
     ser uma das seguintes constantes:

     Constante                                              Descrição
                                                            
     --------------------------------------------------------------------------------------------------------------
                                                            
      -- Dado: asyncio.FIRST_COMPLETED                      A função irá retornar quando qualquer futuro
                                                            terminar ou for cancelado.
                                                            
                                                            
      -- Dado: asyncio.FIRST_EXCEPTION                      The function will return when any future finishes by
                                                            raising an exception.  If no future raises an
                                                            exception then it is equivalent to
                                                            *note ALL_COMPLETED: 34a3.
                                                            
                                                            
      -- Dado: asyncio.ALL_COMPLETED                        A função irá retornar quando todos os futuros
                                                            encerrarem ou forem cancelados.
                                                            

     Diferente de *note wait_for(): 5ff, ‘wait()’ não cancela os futuros
     quando um tempo limite é atingido.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     Alterado na versão 3.11: Passing coroutine objects to ‘wait()’
     directly is forbidden.

     Alterado na versão 3.12: Added support for generators yielding
     tasks.

 -- Função: asyncio.as_completed (aws, *, timeout=None)

     Run *note awaitable objects: 348d. in the 'aws' iterable
     concurrently.  The returned object can be iterated to obtain the
     results of the awaitables as they finish.

     The object returned by ‘as_completed()’ can be iterated as an *note
     asynchronous iterator: 1ab. or a plain *note iterator: 1ac.  When
     asynchronous iteration is used, the originally-supplied awaitables
     are yielded if they are tasks or futures.  This makes it easy to
     correlate previously-scheduled tasks with their results.  Example:

          ipv4_connect = create_task(open_connection("127.0.0.1", 80))
          ipv6_connect = create_task(open_connection("::1", 80))
          tasks = [ipv4_connect, ipv6_connect]

          async for earliest_connect in as_completed(tasks):
              # earliest_connect is done. The result can be obtained by
              # awaiting it or calling earliest_connect.result()
              reader, writer = await earliest_connect

              if earliest_connect is ipv6_connect:
                  print("IPv6 connection established.")
              else:
                  print("IPv4 connection established.")

     During asynchronous iteration, implicitly-created tasks will be
     yielded for supplied awaitables that aren’t tasks or futures.

     When used as a plain iterator, each iteration yields a new
     coroutine that returns the result or raises the exception of the
     next completed awaitable.  This pattern is compatible with Python
     versions older than 3.13:

          ipv4_connect = create_task(open_connection("127.0.0.1", 80))
          ipv6_connect = create_task(open_connection("::1", 80))
          tasks = [ipv4_connect, ipv6_connect]

          for next_connect in as_completed(tasks):
              # next_connect is not one of the original task objects. It must be
              # awaited to obtain the result value or raise the exception of the
              # awaitable that finishes next.
              reader, writer = await next_connect

     A *note TimeoutError: 838. is raised if the timeout occurs before
     all awaitables are done.  This is raised by the ‘async for’ loop
     during asynchronous iteration or by the coroutines yielded during
     plain iteration.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     Descontinuado desde a versão 3.10: Aviso de descontinuidade é
     emitido se nem todos os objetos aguardáveis no iterável 'aws' forem
     objetos similar a Futuro, e não existe nenhum laço de eventos em
     execução.

     Alterado na versão 3.12: Added support for generators yielding
     tasks.

     Alterado na versão 3.13: The result can now be used as either an
     *note asynchronous iterator: 1ab. or as a plain *note iterator:
     1ac. (previously it was only a plain iterator).


File: python.info,  Node: Executando em threads,  Next: Agendando a partir de outras threads,  Prev: Primitivas de espera,  Up: Corrotinas e tarefas

5.19.1.18 Executando em threads
...............................

 -- Função: async asyncio.to_thread (func, /, *args, **kwargs)

     Executa a função 'func' assincronamente em uma thread separada.

     Quaisquer *args e **kwargs fornecidos para esta função são
     diretamente passados para 'func'.  Além disso, o *note
     contextvars.Context: 15b7. atual é propagado, permitindo que
     variáveis de contexto da thread do laço de eventos sejam acessadas
     na thread separada.

     Retorna uma corrotina que pode ser aguardada para obter o resultado
     eventual de 'func'.

     This coroutine function is primarily intended to be used for
     executing IO-bound functions/methods that would otherwise block the
     event loop if they were run in the main thread.  For example:

          def blocking_io():
              print(f"start blocking_io at {time.strftime('%X')}")
              # Note that time.sleep() can be replaced with any blocking
              # IO-bound operation, such as file operations.
              time.sleep(1)
              print(f"blocking_io complete at {time.strftime('%X')}")

          async def main():
              print(f"started main at {time.strftime('%X')}")

              await asyncio.gather(
                  asyncio.to_thread(blocking_io),
                  asyncio.sleep(1))

              print(f"finished main at {time.strftime('%X')}")


          asyncio.run(main())

          # Expected output:
          #
          # started main at 19:50:53
          # start blocking_io at 19:50:53
          # blocking_io complete at 19:50:54
          # finished main at 19:50:54

     Chamar diretamente ‘blocking_io()’ em qualquer corrotina iria
     bloquear o laço de eventos durante a sua duração, resultando em 1
     segundo adicional no tempo de execução.  Ao invés disso, ao
     utilizar ‘asyncio.to_thread()’, nós podemos executá-la em uma
     thread separada sem bloquear o laço de eventos.

          Nota: Devido à *note GIL: 159, ‘asyncio.to_thread()’ pode
          tipicamente ser usado apenas para fazer funções vinculadas a
          IO não-bloqueantes.  Entretanto, para módulos de extensão que
          liberam o GIL ou implementações alternativas do Python que não
          tem um, ‘asyncio.to_thread()’ também pode ser usado para
          funções vinculadas à CPU.

     Adicionado na versão 3.9.


File: python.info,  Node: Agendando a partir de outras threads,  Next: Introspecção,  Prev: Executando em threads,  Up: Corrotinas e tarefas

5.19.1.19 Agendando a partir de outras threads
..............................................

 -- Função: asyncio.run_coroutine_threadsafe (coro, loop)

     Envia uma corrotina para o laço de eventos fornecido.  Seguro para
     thread.

     Retorna um *note concurrent.futures.Future: 11f1. para aguardar
     pelo resultado de outra thread do sistema operacional.

     Esta função destina-se a ser chamada partir de uma thread diferente
     do sistema operacional, da qual o laço de eventos está executando.
     Exemplo:

          # Create a coroutine
          coro = asyncio.sleep(1, result=3)

          # Submit the coroutine to a given loop
          future = asyncio.run_coroutine_threadsafe(coro, loop)

          # Wait for the result with an optional timeout argument
          assert future.result(timeout) == 3

     Se uma exceção for levantada na corrotina, o Futuro retornado será
     notificado.  Isso também pode ser usado para cancelar a tarefa no
     laço de eventos:

          try:
              result = future.result(timeout)
          except TimeoutError:
              print('The coroutine took too long, cancelling the task...')
              future.cancel()
          except Exception as exc:
              print(f'The coroutine raised an exception: {exc!r}')
          else:
              print(f'The coroutine returned: {result!r}')

     Veja a seção *note concorrência e multithreading: 34a6. da
     documentação.

     Ao contrário de outras funções asyncio, esta função requer que o
     argumento 'loop' seja passado explicitamente.

     Adicionado na versão 3.5.1.


File: python.info,  Node: Introspecção,  Next: Objeto Task,  Prev: Agendando a partir de outras threads,  Up: Corrotinas e tarefas

5.19.1.20 Introspecção
......................

 -- Função: asyncio.current_task (loop=None)

     Retorna a instância *note Task: 1be. atualmente em execução, ou
     ‘None’ se nenhuma tarefa estiver executando.

     Se 'loop' for ‘None’, então *note get_running_loop(): b1d. é usado
     para obter o laço atual.

     Adicionado na versão 3.7.

 -- Função: asyncio.all_tasks (loop=None)

     Retorna um conjunto de objetos *note Task: 1be. ainda não
     concluídos a serem executados pelo laço.

     Se 'loop' for ‘None’, então *note get_running_loop(): b1d. é usado
     para obter o laço atual.

     Adicionado na versão 3.7.

 -- Função: asyncio.iscoroutine (obj)

     Return ‘True’ if 'obj' is a coroutine object.

     Adicionado na versão 3.4.


File: python.info,  Node: Objeto Task,  Prev: Introspecção,  Up: Corrotinas e tarefas

5.19.1.21 Objeto Task
.....................

 -- Classe: asyncio.Task (coro, *, loop=None, name=None, context=None,
          eager_start=False)

     Um objeto *note similar a Futuro: be6. que executa uma *note
     corrotina: 3476. Python.  Não é seguro para thread.

     Tarefas são usadas para executar corrotinas em laços de eventos.
     Se uma corrotina espera por um Futuro, a Tarefa suspende a execução
     da corrotina e aguarda a conclusão do Futuro.  Quando o Futuro é
     'concluído', a execução da corrotina contida é retomada.

     Laços de eventos usam agendamento cooperativo: um ciclo de evento
     executa uma Task de cada vez.  Enquanto uma Task aguarda a
     conclusão de um Future, o laço de eventos executa outras Tasks,
     funções de retorno, ou executa operações de IO.

     Use a função de alto nível *note asyncio.create_task(): 1bf. para
     criar Tasks, ou as funções de baixo nível *note loop.create_task():
     1c0. ou *note ensure_future(): c92.  Instanciação manual de Tasks é
     desencorajada.

     Para cancelar uma Task em execução, use o método *note cancel():
     1b7.  Chamar ele fará com que a Task levante uma exceção *note
     CancelledError: 1b8. dentro da corrotina envolvente.  Se a
     corrotina estiver esperando por um objeto Future durante o
     cancelamento, o objeto Future será cancelado.

     *note cancelled(): 34aa. pode ser usado para verificar se a Task
     foi cancelada.  O método retorna ‘True’ se a corrotina envolvente
     não suprimiu a exceção *note CancelledError: 1b8. e, na verdade,
     foi cancelada.

     *note asyncio.Task: 1be. herda de *note Future: be6. todas as suas
     APIs exceto *note Future.set_result(): 34ab. e *note
     Future.set_exception(): c99.

     An optional keyword-only 'context' argument allows specifying a
     custom *note contextvars.Context: 15b7. for the 'coro' to run in.
     If no 'context' is provided, the Task copies the current context
     and later runs its coroutine in the copied context.

     Um argumento opcional somente-nomeado 'eager_start' permite iniciar
     imediatamente a execução da *note asyncio.Task: 1be. no momento da
     criação da tarefa.  Se definido como ‘True’ e o laço de eventos
     estiver em execução, a tarefa começará a executar a corrotina
     imediatamente, até à primeira vez que a corrotina bloquear.  Se a
     corrotina devolver ou levantar uma exceção sem bloquear, a tarefa
     será concluída imediatamente e não será agendada para o laço de
     eventos.

     Alterado na versão 3.7: Adicionado suporte ao módulo *note
     contextvars: 24.

     Alterado na versão 3.8: Adicionado o parâmetro 'name'.

     Descontinuado desde a versão 3.10: Aviso de descontinuidade é
     emitido se 'loop' não for especificado e não existir nenhum laço de
     eventos em execução.

     Alterado na versão 3.11: Adicionado o parâmetro 'context'.

     Alterado na versão 3.12: Adicionado o parâmetro 'eager_start'.

      -- Método: done ()

          Retorna ‘True’ se a Tarefa estiver 'concluída'.

          Uma Tarefa está 'concluída' quando a corrotina contida
          retornou um valor, ou levantou uma exceção, ou a Tarefa foi
          cancelada.

      -- Método: result ()

          Retorna o resultado da Tarefa.

          Se a Tarefa estiver 'concluída', o resultado da corrotina
          contida é retornado (ou se a corrotina levantou uma exceção,
          essa exceção é re-levantada.)

          Se a Tarefa foi 'cancelada', este método levanta uma exceção
          *note CancelledError: 1b8.

          If the Task’s result isn’t yet available, this method raises
          an *note InvalidStateError: 34ae. exception.

      -- Método: exception ()

          Retorna a exceção de uma Tarefa.

          Se a corrotina contida levantou uma exceção, essa exceção é
          retornada.  Se a corrotina contida retornou normalmente, este
          método retorna ‘None’.

          Se a Tarefa foi 'cancelada', este método levanta uma exceção
          *note CancelledError: 1b8.

          Se a Tarefa não estiver 'concluída' ainda, este método levanta
          uma exceção *note InvalidStateError: 34ae.

      -- Método: add_done_callback (callback, *, context=None)

          Adiciona uma função de retorno para ser executada quando a
          Tarefa estiver 'concluída'.

          Este método deve ser usado apenas em código de baixo nível
          baseado em funções de retorno.

          Veja a documentação para *note Future.add_done_callback():
          b1a. para mais detalhes.

      -- Método: remove_done_callback (callback)

          Remove 'callback' da lista de funções de retorno.

          Este método deve ser usado apenas em código de baixo nível
          baseado em funções de retorno.

          Veja a documentação do método *note
          Future.remove_done_callback(): 168b. para mais detalhes.

      -- Método: get_stack (*, limit=None)

          Retorna a lista de frames da pilha para esta Tarefa.

          Se a corrotina contida não estiver concluída, isto retorna a
          pilha onde ela foi suspensa.  Se a corrotina foi concluída com
          sucesso ou cancelada, isto retorna uma lista vazia.  Se a
          corrotina foi interrompida por uma exceção, isso retorna a
          lista de frames do traceback (situação da pilha de execução).

          Os quadros são sempre ordenados dos mais antigos para os mais
          recentes.

          Apenas um frame da pilha é retornado para uma corrotina
          suspensa.

          O argumento opcional 'limit' define o número máximo de frames
          a serem retornados; por padrão, todos os frames disponíveis
          são retornados.  O ordenamento da lista retornada é diferente
          dependendo se uma pilha ou um traceback (situação da pilha de
          execução) é retornado: os frames mais recentes de uma pilha
          são retornados, mas os frames mais antigos de um traceback são
          retornados.  (Isso combina com o comportamento do módulo
          traceback.)

      -- Método: print_stack (*, limit=None, file=None)

          Exibe a pilha ou a situação da pilha de execução desta Task.

          Isto produz uma saída similar à do módulo traceback para
          frames recuperados por *note get_stack(): 34b2.

          O argumento 'limit' é passado diretamente para *note
          get_stack(): 34b2.

          O argumento 'file' é um fluxo de I/O para o qual a saída é
          escrita; por padrão, a saída é escrita para *note sys.stdout:
          ae6.

      -- Método: get_coro ()

          Retorna o objeto corrotina contido pela *note Task: 1be.

               Nota: Isto retornará ‘None’ para Tasks que já tenham sido
               concluídas ansiosamente.  Consulte *note fábrica de
               tarefas ansiosas: 3498.

          Adicionado na versão 3.8.

          Alterado na versão 3.12: A execução de tarefas recentemente
          adicionadas, ansiosas, pode resultar em ‘None’.

      -- Método: get_context ()

          Retorna o objeto *note contextvars.Context: 15b7. associado à
          tarefa.

          Adicionado na versão 3.12.

      -- Método: get_name ()

          Retorna o nome da Tarefa.

          Se nenhum nome foi explicitamente designado para a Tarefa, a
          implementação padrão asyncio da classe Task gera um nome
          padrão durante a instanciação.

          Adicionado na versão 3.8.

      -- Método: set_name (value)

          Define o nome da Tarefa.

          O argumento 'value' pode ser qualquer objeto, que é então
          convertido em uma string.

          Na implementação padrão da Tarefa, o nome será visível na
          *note repr(): 800. de saída de um objeto task.

          Adicionado na versão 3.8.

      -- Método: cancel (msg=None)

          Solicita o cancelamento da Tarefa.

          If the Task is already 'done' or 'cancelled', return ‘False’,
          otherwise, return ‘True’.

          O método prepara para que uma exceção *note CancelledError:
          1b8. seja lançada na corrotina contida no próximo ciclo do
          laço de eventos.

          The coroutine then has a chance to clean up or even deny the
          request by suppressing the exception with a *note try: 6e9. …
          … ‘except CancelledError’ … *note finally: 9d2. block.
          Therefore, unlike *note Future.cancel(): 1934, *note
          Task.cancel(): 1b7. does not guarantee that the Task will be
          cancelled, although suppressing cancellation completely is not
          common and is actively discouraged.  Should the coroutine
          nevertheless decide to suppress the cancellation, it needs to
          call *note Task.uncancel(): 1bb. in addition to catching the
          exception.

          Alterado na versão 3.9: Adicionado o parâmetro 'msg'.

          Alterado na versão 3.11: O parâmetro ‘msg’ é propagado da
          tarefa cancelada para o seu aguardador.

          O seguinte exemplo ilustra como corrotinas podem interceptar o
          cancelamento de requisições:

               async def cancel_me():    print('cancel_me(): antes de dormir')    try:        # Aguardar 1 hora        await asyncio.sleep(3600)    except asyncio.CancelledError:        print('cancel_me(): cancelar sono')        raise    finally:        print('cancel_me(): depois de dormir')async def main():    # Criar uma Tarefa "cancel_me"    task = asyncio.create_task(cancel_me())    # Aguardar 1 segundo    await asyncio.sleep(1)    task.cancel()    try:        await task    except asyncio.CancelledError:        print("main(): cancel_me foi cancelado agora")asyncio.run(main())# Saída esperada:##     cancel_me(): antes de dormir#     cancel_me(): cancelar sono#     cancel_me(): depois de dormir#     main(): cancel_me foi cancelado agora

      -- Método: cancelled ()

          Retorna ‘True’ se a Tarefa for 'cancelada'.

          A Tarefa é 'cancelada' quando o cancelamento foi requisitado
          com *note cancel(): 1b7. e a corrotina contida propagou a
          exceção *note CancelledError: 1b8. gerada nela.

      -- Método: uncancel ()

          Decrement the count of cancellation requests to this Task.

          Retorna o número restante de pedidos de cancelamento.

          Note que, uma vez concluída a execução de uma tarefa
          cancelada, chamadas adicionais para *note uncancel(): 1bb. são
          ineficazes.

          Adicionado na versão 3.11.

          This method is used by asyncio’s internals and isn’t expected
          to be used by end-user code.  In particular, if a Task gets
          successfully uncancelled, this allows for elements of
          structured concurrency like *note Grupos de tarefas: 3492. and
          *note asyncio.timeout(): 5fe. to continue running, isolating
          cancellation to the respective structured block.  For example:

               async def make_request_with_timeout():    try:        async with asyncio.timeout(1):            # Bloco estruturado afetado pelo timeout:            await make_request()            await make_another_request()    except TimeoutError:        log("Ocorreu um timeout")    # Código externo não afetado pelo timeout:    await unrelated_code()

          Enquanto o bloco com ‘make_request()’ e
          ‘make_another_request()’ possa ser cancelado devido ao
          timeout, ‘unrelated_code()’ deve continuar a executar mesmo em
          caso de timeout.  Isto é implementado com *note uncancel():
          1bb.  Os gerenciadores de contexto *note TaskGroup: 1b5. usam
          *note uncancel(): 1bb. de forma semelhante.

          Se o código do usuário final, por alguma razão, estiver
          suprimindo o cancelamento ao capturar *note CancelledError:
          1b8, precisa chamar este método para remover o estado de
          cancelamento.

          Quando este método decrementa a contagem de cancelamentos para
          zero, verifica se uma chamada anterior a *note cancel(): 1b7.
          tinha preparado para que *note CancelledError: 1b8. fosse
          lançado na tarefa.  Se ainda não tiver sido lançado, esse
          preparo será revogado (redefinindo o sinalizador interna
          ‘_must_cancel’).

     Alterado na versão 3.13: Alterado para revogar os pedidos de
     cancelamento pendentes ao atingir zero.

      -- Método: cancelling ()

          Return the number of pending cancellation requests to this
          Task, i.e., the number of calls to *note cancel(): 1b7. less
          the number of *note uncancel(): 1bb. calls.

          Note that if this number is greater than zero but the Task is
          still executing, *note cancelled(): 34aa. will still return
          ‘False’.  This is because this number can be lowered by
          calling *note uncancel(): 1bb, which can lead to the task not
          being cancelled after all if the cancellation requests go down
          to zero.

          Este método é usado pelos internos do asyncio e não é esperado
          que seja usado por código do usuário final.  Consulte *note
          uncancel(): 1bb. para mais detalhes.

          Adicionado na versão 3.11.


File: python.info,  Node: Streams,  Next: Synchronization Primitives,  Prev: Corrotinas e tarefas,  Up: asyncio — E/S assíncrona

5.19.1.22 Streams
.................

'Código-fonte:' Lib/asyncio/streams.py(1)

__________________________________________________________________

Streams são conexões de rede de alto-nível assincronias/espera-pronta.
Streams permitem envios e recebimentos de dados sem usar retornos de
chamadas ou protocolos de baixo nível.  Aqui está um exemplo de um
cliente TCP realizando eco, escrito usando streams asyncio:

     import asyncio

     async def tcp_echo_client(message):
         reader, writer = await asyncio.open_connection(
             '127.0.0.1', 8888)

         print(f'Send: {message!r}')
         writer.write(message.encode())
         await writer.drain()

         data = await reader.read(100)
         print(f'Received: {data.decode()!r}')

         print('Close the connection')
         writer.close()
         await writer.wait_closed()

     asyncio.run(tcp_echo_client('Hello World!'))

Veja também a seção *note Exemplos: 34b9. abaixo.

Funções Stream
..............

As seguintes funções asyncio de alto nível podem ser usadas para criar e
trabalhar com streams:

 -- Função: async asyncio.open_connection (host=None, port=None, *,
          limit=None, ssl=None, family=0, proto=0, flags=0, sock=None,
          local_addr=None, server_hostname=None,
          ssl_handshake_timeout=None, ssl_shutdown_timeout=None,
          happy_eyeballs_delay=None, interleave=None)

     Estabelece uma conexão de rede e retorna um par de objetos
     ‘(reader, writer)’.

     Os objetos 'reader' e 'writer' retornados são instâncias das
     classes *note StreamReader: 1a09. e *note StreamWriter: 17f2.

     'limit' determina o tamanho limite do buffer usado pela instância
     *note StreamReader: 1a09. retornada.  Por padrão, 'limit' é
     definido em 64 KiB.

     O resto dos argumentos é passado diretamente para *note
     loop.create_connection(): 603.

          Nota: The 'sock' argument transfers ownership of the socket to
          the *note StreamWriter: 17f2. created.  To close the socket,
          call its *note close(): 34ba. method.

     Alterado na versão 3.7: Adicionado o parâmetro
     'ssl_handshake_timeout'.

     Alterado na versão 3.8: Adicionados os parâmetros
     'happy_eyeballs_delay' e 'interleave'.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     Alterado na versão 3.11: Added the 'ssl_shutdown_timeout'
     parameter.

 -- Função: async asyncio.start_server (client_connected_cb, host=None,
          port=None, *, limit=None, family=socket.AF_UNSPEC,
          flags=socket.AI_PASSIVE, sock=None, backlog=100, ssl=None,
          reuse_address=None, reuse_port=None, keep_alive=None,
          ssl_handshake_timeout=None, ssl_shutdown_timeout=None,
          start_serving=True)

     Inicia um soquete no servidor.

     A função de retorno 'client_connected_cb' é chamada sempre que uma
     nova conexão de um cliente é estabelecida.  Ela recebe um par
     ‘(reader, writer)’ como dois argumentos, instâncias das classes
     *note StreamReader: 1a09. e *note StreamWriter: 17f2.

     'client_connected_cb' pode ser simplesmente algo chamável ou uma
     *note função de corrotina: 3476.; se ele for uma função de
     corrotina, ele será automaticamente agendado como uma *note Task:
     1be.

     'limit' determina o tamanho limite do buffer usado pela instância
     *note StreamReader: 1a09. retornada.  Por padrão, 'limit' é
     definido em 64 KiB.

     O resto dos argumentos são passados diretamente para *note
     loop.create_server(): b25.

          Nota: The 'sock' argument transfers ownership of the socket to
          the server created.  To close the socket, call the server’s
          *note close(): 34bb. method.

     Alterado na versão 3.7: Added the 'ssl_handshake_timeout' and
     'start_serving' parameters.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     Alterado na versão 3.11: Added the 'ssl_shutdown_timeout'
     parameter.

     Alterado na versão 3.13: Added the 'keep_alive' parameter.

Soquetes Unix
.............

 -- Função: async asyncio.open_unix_connection (path=None, *,
          limit=None, ssl=None, sock=None, server_hostname=None,
          ssl_handshake_timeout=None, ssl_shutdown_timeout=None)

     Estabelece uma conexão de soquete Unix e retorna um par com
     ‘(reader, writer)’.

     Similar a *note open_connection(): b2b, mas opera em soquetes Unix.

     Veja também a documentação do método *note
     loop.create_unix_connection(): 34bd.

          Nota: The 'sock' argument transfers ownership of the socket to
          the *note StreamWriter: 17f2. created.  To close the socket,
          call its *note close(): 34ba. method.

     *note Disponibilidade: 1ed8.: Unix.

     Alterado na versão 3.7: Added the 'ssl_handshake_timeout'
     parameter.  The 'path' parameter can now be a *note path-like
     object: 2a0.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     Alterado na versão 3.11: Added the 'ssl_shutdown_timeout'
     parameter.

 -- Função: async asyncio.start_unix_server (client_connected_cb,
          path=None, *, limit=None, sock=None, backlog=100, ssl=None,
          ssl_handshake_timeout=None, ssl_shutdown_timeout=None,
          start_serving=True, cleanup_socket=True)

     Inicia um servidor com soquete Unix.

     Similar a *note start_server(): b2c, mas funciona com soquetes
     Unix.

     If 'cleanup_socket' is true then the Unix socket will automatically
     be removed from the filesystem when the server is closed, unless
     the socket has been replaced after the server has been created.

     Veja também a documentação do método *note
     loop.create_unix_server(): 1ae.

          Nota: The 'sock' argument transfers ownership of the socket to
          the server created.  To close the socket, call the server’s
          *note close(): 34bb. method.

     *note Disponibilidade: 1ed8.: Unix.

     Alterado na versão 3.7: Added the 'ssl_handshake_timeout' and
     'start_serving' parameters.  The 'path' parameter can now be a
     *note path-like object: 2a0.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     Alterado na versão 3.11: Added the 'ssl_shutdown_timeout'
     parameter.

     Alterado na versão 3.13: Added the 'cleanup_socket' parameter.

* Menu:

* StreamReader::
* StreamWriter::
* Exemplos: Exemplos<15>.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/asyncio/streams.py


File: python.info,  Node: StreamReader,  Next: StreamWriter,  Up: Streams

5.19.1.23 StreamReader
......................

 -- Classe: asyncio.StreamReader

     Represents a reader object that provides APIs to read data from the
     IO stream.  As an *note asynchronous iterable: d9c, the object
     supports the *note async for: aba. statement.

     Não é recomendado instanciar objetos 'StreamReader' diretamente;
     use *note open_connection(): b2b. e *note start_server(): b2c. ao
     invés disso.

      -- Método: feed_eof ()

          Acknowledge the EOF.

      -- Método: async read (n=-1)

          Read up to 'n' bytes from the stream.

          If 'n' is not provided or set to ‘-1’, read until EOF, then
          return all read *note bytes: 1c2.  If EOF was received and the
          internal buffer is empty, return an empty ‘bytes’ object.

          If 'n' is ‘0’, return an empty ‘bytes’ object immediately.

          If 'n' is positive, return at most 'n' available ‘bytes’ as
          soon as at least 1 byte is available in the internal buffer.
          If EOF is received before any byte is read, return an empty
          ‘bytes’ object.

      -- Método: async readline ()

          Lê uma linha, onde “line” é uma sequência de bytes encerrando
          com ‘\n’.

          Se EOF é recebido e ‘\n’ não foi encontrado, o método retorna
          os dados parcialmente lidos.

          Se EOF for recebido e o buffer interno estiver vazio, retorna
          um objeto ‘bytes’ vazio.

      -- Método: async readexactly (n)

          Lê exatamente 'n' bytes.

          Levanta um *note IncompleteReadError: 1a75. se EOF é atingido
          antes que 'n' sejam lidos.  Use o atributo *note
          IncompleteReadError.partial: 34c3. para obter os dados
          parcialmente lidos.

      -- Método: async readuntil (separator=b'\n')

          Lê dados a partir do stream até que 'separator' seja
          encontrado.

          Ao ter sucesso, os dados e o separador serão removidos do
          buffer interno (consumido).  Dados retornados irão incluir o
          separador no final.

          Se a quantidade de dados lidos excede o limite configurado
          para o stream, uma exceção *note LimitOverrunError: 34c4. é
          levantada, e os dados são deixados no buffer interno e podem
          ser lidos novamente.

          Se EOF for atingido antes que o separador completo seja
          encontrado, uma exceção *note IncompleteReadError: 1a75. é
          levantada, e o buffer interno é redefinido.  O atributo *note
          IncompleteReadError.partial: 34c3. pode conter uma parte do
          separador.

          The 'separator' may also be a tuple of separators.  In this
          case the return value will be the shortest possible that has
          any separator as the suffix.  For the purposes of *note
          LimitOverrunError: 34c4, the shortest possible separator is
          considered to be the one that matched.

          Adicionado na versão 3.5.2.

          Alterado na versão 3.13: The 'separator' parameter may now be
          a *note tuple: 370. of separators.

      -- Método: at_eof ()

          Retorna ‘True’ se o buffer estiver vazio e *note feed_eof():
          34c0. foi chamado.


File: python.info,  Node: StreamWriter,  Next: Exemplos<15>,  Prev: StreamReader,  Up: Streams

5.19.1.24 StreamWriter
......................

 -- Classe: asyncio.StreamWriter

     Representa um objeto de escrita que fornece APIs para escrever
     dados para o stream de IO.

     Não é recomendado instanciar objetos 'StreamWriter' diretamente;
     use *note open_connection(): b2b. e *note start_server(): b2c. ao
     invés.

      -- Método: write (data)

          O método tenta escrever 'data' para o soquete subjacente
          imediatamente.  Se isso falhar, data é enfileirado em um
          buffer interno de escrita, até que possa ser enviado.

          The 'data' buffer should be a bytes, bytearray, or
          C-contiguous one-dimensional memoryview object.

          O método deve ser usado juntamente com o método ‘drain()’:

               stream.write(data)
               await stream.drain()

      -- Método: writelines (data)

          O método escreve imediatamente a lista (ou qualquer iterável)
          de bytes para o soquete subjacente.  Se isso falhar, os dados
          são enfileirados em um buffer de escrita interno até que
          possam ser enviados.

          O método deve ser usado juntamente com o método ‘drain()’:

               stream.writelines(lines)
               await stream.drain()

      -- Método: close ()

          O método fecha o stream e o soquete subjacente.

          The method should be used, though not mandatory, along with
          the ‘wait_closed()’ method:

               stream.close()
               await stream.wait_closed()

      -- Método: can_write_eof ()

          Retorna ‘True’ se o transporte subjacente suporta o método
          *note write_eof(): 34ca, ‘False’ caso contrário.

      -- Método: write_eof ()

          Fecha o extremo de escrita do stream após os dados no buffer
          de escrita terem sido descarregados.

      -- Atributo: transport

          Retorna o transporte asyncio subjacente.

      -- Método: get_extra_info (name, default=None)

          Acessa informações de transporte opcionais; veja *note
          BaseTransport.get_extra_info(): aab. para detalhes.

      -- Método: async drain ()

          Aguarda até que seja apropriado continuar escrevendo no
          stream.  Exemplo:

               writer.write(data)
               await writer.drain()

          Este é um método de controle de fluxo que interage com o
          buffer de entrada e saída de escrita subjacente.  Quando o
          tamanho do buffer atinge a marca d’água alta, 'drain()'
          bloqueia até que o tamanho do buffer seja drenado para a marca
          d’água baixa, e a escrita possa continuar.  Quando não existe
          nada que cause uma espera, o método *note drain(): 18b1.
          retorna imediatamente.

      -- Método: async start_tls (sslcontext, *, server_hostname=None,
               ssl_handshake_timeout=None, ssl_shutdown_timeout=None)

          Upgrade an existing stream-based connection to TLS.

          Parâmetros:

             * 'sslcontext': uma instância configurada de *note
               SSLContext: 294.

             * 'server_hostname': define ou substitui o nome do host no
               qual o servidor alvo do certificado será comparado.

             * 'ssl_handshake_timeout' is the time in seconds to wait
               for the TLS handshake to complete before aborting the
               connection.  ‘60.0’ seconds if ‘None’ (default).

             * 'ssl_shutdown_timeout' is the time in seconds to wait for
               the SSL shutdown to complete before aborting the
               connection.  ‘30.0’ seconds if ‘None’ (default).

          Adicionado na versão 3.11.

          Alterado na versão 3.12: Added the 'ssl_shutdown_timeout'
          parameter.

      -- Método: is_closing ()

          Retorna ‘True’ se o stream estiver fechado ou em processo de
          ser fechado.

          Adicionado na versão 3.7.

      -- Método: async wait_closed ()

          Aguarda até que o stream seja fechado.

          Should be called after *note close(): 34ba. to wait until the
          underlying connection is closed, ensuring that all data has
          been flushed before e.g.  exiting the program.

          Adicionado na versão 3.7.


File: python.info,  Node: Exemplos<15>,  Prev: StreamWriter,  Up: Streams

5.19.1.25 Exemplos
..................

* Menu:

* Cliente para eco TCP usando streams::
* Servidor eco TCP usando streams::
* Obtém headers HTTP::
* Registra um soquete aberto para aguardar por dados usando streams::


File: python.info,  Node: Cliente para eco TCP usando streams,  Next: Servidor eco TCP usando streams,  Up: Exemplos<15>

5.19.1.26 Cliente para eco TCP usando streams
.............................................

Cliente de eco TCP usando a função *note asyncio.open_connection():
b2b.:

     import asyncio

     async def tcp_echo_client(message):
         reader, writer = await asyncio.open_connection(
             '127.0.0.1', 8888)

         print(f'Send: {message!r}')
         writer.write(message.encode())
         await writer.drain()

         data = await reader.read(100)
         print(f'Received: {data.decode()!r}')

         print('Close the connection')
         writer.close()
         await writer.wait_closed()

     asyncio.run(tcp_echo_client('Hello World!'))

Ver também
..........

O exemplo de *note protocolo do cliente para eco TCP: 34cf. usa o método
de baixo nível *note loop.create_connection(): 603.


File: python.info,  Node: Servidor eco TCP usando streams,  Next: Obtém headers HTTP,  Prev: Cliente para eco TCP usando streams,  Up: Exemplos<15>

5.19.1.27 Servidor eco TCP usando streams
.........................................

Servidor eco TCP usando a função *note asyncio.start_server(): b2c.:

     import asyncio

     async def handle_echo(reader, writer):
         data = await reader.read(100)
         message = data.decode()
         addr = writer.get_extra_info('peername')

         print(f"Received {message!r} from {addr!r}")

         print(f"Send: {message!r}")
         writer.write(data)
         await writer.drain()

         print("Close the connection")
         writer.close()
         await writer.wait_closed()

     async def main():
         server = await asyncio.start_server(
             handle_echo, '127.0.0.1', 8888)

         addrs = ', '.join(str(sock.getsockname()) for sock in server.sockets)
         print(f'Serving on {addrs}')

         async with server:
             await server.serve_forever()

     asyncio.run(main())

Ver também
..........

O exemplo de *note protocolo eco de servidor TCP: 34d2. utiliza o método
*note loop.create_server(): b25.


File: python.info,  Node: Obtém headers HTTP,  Next: Registra um soquete aberto para aguardar por dados usando streams,  Prev: Servidor eco TCP usando streams,  Up: Exemplos<15>

5.19.1.28 Obtém headers HTTP
............................

Exemplo simples consultando cabeçalhos HTTP da URL passada na linha de
comando:

     import asyncio
     import urllib.parse
     import sys

     async def print_http_headers(url):
         url = urllib.parse.urlsplit(url)
         if url.scheme == 'https':
             reader, writer = await asyncio.open_connection(
                 url.hostname, 443, ssl=True)
         else:
             reader, writer = await asyncio.open_connection(
                 url.hostname, 80)

         query = (
             f"HEAD {url.path or '/'} HTTP/1.0\r\n"
             f"Host: {url.hostname}\r\n"
             f"\r\n"
         )

         writer.write(query.encode('latin-1'))
         while True:
             line = await reader.readline()
             if not line:
                 break

             line = line.decode('latin1').rstrip()
             if line:
                 print(f'HTTP header> {line}')

         # Ignore the body, close the socket
         writer.close()
         await writer.wait_closed()

     url = sys.argv[1]
     asyncio.run(print_http_headers(url))

Uso:

     python example.py http://example.com/path/page.html

ou com HTTPS:

     python example.py https://example.com/path/page.html


File: python.info,  Node: Registra um soquete aberto para aguardar por dados usando streams,  Prev: Obtém headers HTTP,  Up: Exemplos<15>

5.19.1.29 Registra um soquete aberto para aguardar por dados usando streams
...........................................................................

Corrotina aguardando até que um soquete receba dados usando a função
*note open_connection(): b2b.:

     import asyncio
     import socket

     async def wait_for_data():
         # Get a reference to the current event loop because
         # we want to access low-level APIs.
         loop = asyncio.get_running_loop()

         # Create a pair of connected sockets.
         rsock, wsock = socket.socketpair()

         # Register the open socket to wait for data.
         reader, writer = await asyncio.open_connection(sock=rsock)

         # Simulate the reception of data from the network
         loop.call_soon(wsock.send, 'abc'.encode())

         # Wait for data
         data = await reader.read(100)

         # Got data, we are done: close the socket
         print("Received:", data.decode())
         writer.close()
         await writer.wait_closed()

         # Close the second socket
         wsock.close()

     asyncio.run(wait_for_data())

Ver também
..........

O exemplo de *note registro de um soquete aberto para aguardar por dados
usando um protocolo: 34d6. utiliza um protocolo de baixo nível e o
método *note loop.create_connection(): 603.

O exemplo para *note monitorar um descritor de arquivo para leitura de
eventos: 34d7. utiliza o método de baixo nível *note loop.add_reader():
34d8. para monitorar um descritor de arquivo.


File: python.info,  Node: Synchronization Primitives,  Next: Subprocessos,  Prev: Streams,  Up: asyncio — E/S assíncrona

5.19.1.30 Synchronization Primitives
....................................

'Código-fonte:' Lib/asyncio/locks.py(1)

__________________________________________________________________

asyncio synchronization primitives are designed to be similar to those
of the *note threading: ed. module with two important caveats:

   * asyncio primitives are not thread-safe, therefore they should not
     be used for OS thread synchronization (use *note threading: ed. for
     that);

   * methods of these synchronization primitives do not accept the
     'timeout' argument; use the *note asyncio.wait_for(): 5ff. function
     to perform operations with timeouts.

asyncio has the following basic synchronization primitives:

   * *note Lock: a7b.

   * *note Event: a7c.

   * *note Condition: a7d.

   * *note Semaphore: a7e.

   * *note BoundedSemaphore: a7f.

   * *note Barrier: 601.

__________________________________________________________________

* Menu:

* Lock::
* Evento::
* Condição::
* Semaphore::
* BoundedSemaphore::
* Barrier::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/asyncio/locks.py


File: python.info,  Node: Lock,  Next: Evento,  Up: Synchronization Primitives

5.19.1.31 Lock
..............

 -- Classe: asyncio.Lock

     Implements a mutex lock for asyncio tasks.  Not thread-safe.

     An asyncio lock can be used to guarantee exclusive access to a
     shared resource.

     The preferred way to use a Lock is an *note async with: 5d5.
     statement:

          lock = asyncio.Lock()

          # ... later
          async with lock:
              # access shared state

     which is equivalent to:

          lock = asyncio.Lock()

          # ... later
          await lock.acquire()
          try:
              # access shared state
          finally:
              lock.release()

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

      -- Método: async acquire ()

          Acquire the lock.

          This method waits until the lock is 'unlocked', sets it to
          'locked' and returns ‘True’.

          When more than one coroutine is blocked in *note acquire():
          34dd. waiting for the lock to be unlocked, only one coroutine
          eventually proceeds.

          Acquiring a lock is 'fair': the coroutine that proceeds will
          be the first coroutine that started waiting on the lock.

      -- Método: release ()

          Release the lock.

          When the lock is 'locked', reset it to 'unlocked' and return.

          If the lock is 'unlocked', a *note RuntimeError: 195. is
          raised.

      -- Método: locked ()

          Return ‘True’ if the lock is 'locked'.


File: python.info,  Node: Evento,  Next: Condição,  Prev: Lock,  Up: Synchronization Primitives

5.19.1.32 Evento
................

 -- Classe: asyncio.Event

     An event object.  Not thread-safe.

     An asyncio event can be used to notify multiple asyncio tasks that
     some event has happened.

     An Event object manages an internal flag that can be set to 'true'
     with the *note set(): 34e1. method and reset to 'false' with the
     *note clear(): 34e2. method.  The *note wait(): 34e3. method blocks
     until the flag is set to 'true'.  The flag is set to 'false'
     initially.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     Exemplo:

          async def waiter(event):
              print('waiting for it ...')
              await event.wait()
              print('... got it!')

          async def main():
              # Create an Event object.
              event = asyncio.Event()

              # Spawn a Task to wait until 'event' is set.
              waiter_task = asyncio.create_task(waiter(event))

              # Sleep for 1 second and set the event.
              await asyncio.sleep(1)
              event.set()

              # Wait until the waiter task is finished.
              await waiter_task

          asyncio.run(main())

      -- Método: async wait ()

          Wait until the event is set.

          If the event is set, return ‘True’ immediately.  Otherwise
          block until another task calls *note set(): 34e1.

      -- Método: set ()

          Set the event.

          All tasks waiting for event to be set will be immediately
          awakened.

      -- Método: clear ()

          Clear (unset) the event.

          Subsequent tasks awaiting on *note wait(): 34e3. will now
          block until the *note set(): 34e1. method is called again.

      -- Método: is_set ()

          Return ‘True’ if the event is set.


File: python.info,  Node: Condição,  Next: Semaphore,  Prev: Evento,  Up: Synchronization Primitives

5.19.1.33 Condição
..................

 -- Classe: asyncio.Condition (lock=None)

     A Condition object.  Not thread-safe.

     An asyncio condition primitive can be used by a task to wait for
     some event to happen and then get exclusive access to a shared
     resource.

     In essence, a Condition object combines the functionality of an
     *note Event: a7c. and a *note Lock: a7b.  It is possible to have
     multiple Condition objects share one Lock, which allows
     coordinating exclusive access to a shared resource between
     different tasks interested in particular states of that shared
     resource.

     The optional 'lock' argument must be a *note Lock: a7b. object or
     ‘None’.  In the latter case a new Lock object is created
     automatically.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     The preferred way to use a Condition is an *note async with: 5d5.
     statement:

          cond = asyncio.Condition()

          # ... later
          async with cond:
              await cond.wait()

     which is equivalent to:

          cond = asyncio.Condition()

          # ... later
          await cond.acquire()
          try:
              await cond.wait()
          finally:
              cond.release()

      -- Método: async acquire ()

          Acquire the underlying lock.

          This method waits until the underlying lock is 'unlocked',
          sets it to 'locked' and returns ‘True’.

      -- Método: notify (n=1)

          Wake up 'n' tasks (1 by default) waiting on this condition.
          If fewer than 'n' tasks are waiting they are all awakened.

          The lock must be acquired before this method is called and
          released shortly after.  If called with an 'unlocked' lock a
          *note RuntimeError: 195. error is raised.

      -- Método: locked ()

          Return ‘True’ if the underlying lock is acquired.

      -- Método: notify_all ()

          Wake up all tasks waiting on this condition.

          This method acts like *note notify(): 1770, but wakes up all
          waiting tasks.

          The lock must be acquired before this method is called and
          released shortly after.  If called with an 'unlocked' lock a
          *note RuntimeError: 195. error is raised.

      -- Método: release ()

          Release the underlying lock.

          When invoked on an unlocked lock, a *note RuntimeError: 195.
          is raised.

      -- Método: async wait ()

          Wait until notified.

          If the calling task has not acquired the lock when this method
          is called, a *note RuntimeError: 195. is raised.

          This method releases the underlying lock, and then blocks
          until it is awakened by a *note notify(): 1770. or *note
          notify_all(): 34e9. call.  Once awakened, the Condition
          re-acquires its lock and this method returns ‘True’.

          Note that a task 'may' return from this call spuriously, which
          is why the caller should always re-check the state and be
          prepared to *note wait(): 179b. again.  For this reason, you
          may prefer to use *note wait_for(): 34eb. instead.

      -- Método: async wait_for (predicate)

          Wait until a predicate becomes 'true'.

          The predicate must be a callable which result will be
          interpreted as a boolean value.  The method will repeatedly
          *note wait(): 179b. until the predicate evaluates to 'true'.
          The final value is the return value.


File: python.info,  Node: Semaphore,  Next: BoundedSemaphore,  Prev: Condição,  Up: Synchronization Primitives

5.19.1.34 Semaphore
...................

 -- Classe: asyncio.Semaphore (value=1)

     A Semaphore object.  Not thread-safe.

     A semaphore manages an internal counter which is decremented by
     each *note acquire(): 179c. call and incremented by each *note
     release(): 34ed. call.  The counter can never go below zero; when
     *note acquire(): 179c. finds that it is zero, it blocks, waiting
     until some task calls *note release(): 34ed.

     The optional 'value' argument gives the initial value for the
     internal counter (‘1’ by default).  If the given value is less than
     ‘0’ a *note ValueError: 202. is raised.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     The preferred way to use a Semaphore is an *note async with: 5d5.
     statement:

          sem = asyncio.Semaphore(10)

          # ... later
          async with sem:
              # work with shared resource

     which is equivalent to:

          sem = asyncio.Semaphore(10)

          # ... later
          await sem.acquire()
          try:
              # work with shared resource
          finally:
              sem.release()

      -- Método: async acquire ()

          Acquire a semaphore.

          If the internal counter is greater than zero, decrement it by
          one and return ‘True’ immediately.  If it is zero, wait until
          a *note release(): 34ed. is called and return ‘True’.

      -- Método: locked ()

          Returns ‘True’ if semaphore can not be acquired immediately.

      -- Método: release ()

          Release a semaphore, incrementing the internal counter by one.
          Can wake up a task waiting to acquire the semaphore.

          Unlike *note BoundedSemaphore: a7f, *note Semaphore: a7e.
          allows making more ‘release()’ calls than ‘acquire()’ calls.


File: python.info,  Node: BoundedSemaphore,  Next: Barrier,  Prev: Semaphore,  Up: Synchronization Primitives

5.19.1.35 BoundedSemaphore
..........................

 -- Classe: asyncio.BoundedSemaphore (value=1)

     A bounded semaphore object.  Not thread-safe.

     Bounded Semaphore is a version of *note Semaphore: a7e. that raises
     a *note ValueError: 202. in *note release(): 34ed. if it increases
     the internal counter above the initial 'value'.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.


File: python.info,  Node: Barrier,  Prev: BoundedSemaphore,  Up: Synchronization Primitives

5.19.1.36 Barrier
.................

 -- Classe: asyncio.Barrier (parties)

     A barrier object.  Not thread-safe.

     A barrier is a simple synchronization primitive that allows to
     block until 'parties' number of tasks are waiting on it.  Tasks can
     wait on the *note wait(): 34f1. method and would be blocked until
     the specified number of tasks end up waiting on *note wait(): 34f1.
     At that point all of the waiting tasks would unblock
     simultaneously.

     *note async with: 5d5. can be used as an alternative to awaiting on
     *note wait(): 34f1.

     The barrier can be reused any number of times.  Exemplo:

          async def example_barrier():
             # barrier with 3 parties
             b = asyncio.Barrier(3)

             # create 2 new waiting tasks
             asyncio.create_task(b.wait())
             asyncio.create_task(b.wait())

             await asyncio.sleep(0)
             print(b)

             # The third .wait() call passes the barrier
             await b.wait()
             print(b)
             print("barrier passed")

             await asyncio.sleep(0)
             print(b)

          asyncio.run(example_barrier())

     Result of this example is:

          <asyncio.locks.Barrier object at 0x... [filling, waiters:2/3]>
          <asyncio.locks.Barrier object at 0x... [draining, waiters:0/3]>
          barrier passed
          <asyncio.locks.Barrier object at 0x... [filling, waiters:0/3]>

     Adicionado na versão 3.11.

      -- Método: async wait ()

          Pass the barrier.  When all the tasks party to the barrier
          have called this function, they are all unblocked
          simultaneously.

          When a waiting or blocked task in the barrier is cancelled,
          this task exits the barrier which stays in the same state.  If
          the state of the barrier is “filling”, the number of waiting
          task decreases by 1.

          The return value is an integer in the range of 0 to
          ‘parties-1’, different for each task.  This can be used to
          select a task to do some special housekeeping, e.g.:

               ...
               async with barrier as position:
                  if position == 0:
                     # Only one task prints this
                     print('End of *draining phase*')

          This method may raise a *note BrokenBarrierError: 602.
          exception if the barrier is broken or reset while a task is
          waiting.  It could raise a *note CancelledError: 1b8. if a
          task is cancelled.

      -- Método: async reset ()

          Return the barrier to the default, empty state.  Any tasks
          waiting on it will receive the *note BrokenBarrierError: 602.
          exception.

          If a barrier is broken it may be better to just leave it and
          create a new one.

      -- Método: async abort ()

          Put the barrier into a broken state.  This causes any active
          or future calls to *note wait(): 34f1. to fail with the *note
          BrokenBarrierError: 602.  Use this for example if one of the
          tasks needs to abort, to avoid infinite waiting tasks.

      -- Atributo: parties

          The number of tasks required to pass the barrier.

      -- Atributo: n_waiting

          The number of tasks currently waiting in the barrier while
          filling.

      -- Atributo: broken

          A boolean that is ‘True’ if the barrier is in the broken
          state.

 -- Exceção: asyncio.BrokenBarrierError

     This exception, a subclass of *note RuntimeError: 195, is raised
     when the *note Barrier: 601. object is reset or broken.

__________________________________________________________________

Alterado na versão 3.9: Acquiring a lock using ‘await lock’ or ‘yield
from lock’ and/or *note with: 5d2. statement (‘with await lock’, ‘with
(yield from lock)’) was removed.  Use ‘async with lock’ instead.


File: python.info,  Node: Subprocessos,  Next: Filas,  Prev: Synchronization Primitives,  Up: asyncio — E/S assíncrona

5.19.1.37 Subprocessos
......................

'Código-fonte:' Lib/asyncio/subprocess.py(1),
Lib/asyncio/base_subprocess.py(2)

__________________________________________________________________

Esta seção descreve APIs async/await asyncio de alto nível para criar e
gerenciar subprocessos.  Aqui está um exemplo de como asyncio pode
executar um comando shell e obter o seu resultado:

     import asyncio

     async def run(cmd):
         proc = await asyncio.create_subprocess_shell(
             cmd,
             stdout=asyncio.subprocess.PIPE,
             stderr=asyncio.subprocess.PIPE)

         stdout, stderr = await proc.communicate()

         print(f'[{cmd!r} exited with {proc.returncode}]')
         if stdout:
             print(f'[stdout]\n{stdout.decode()}')
         if stderr:
             print(f'[stderr]\n{stderr.decode()}')

     asyncio.run(run('ls /zzz'))

irá exibir:

     ['ls /zzz' exited with 1]
     [stderr]
     ls: /zzz: No such file or directory

Devido ao fato que todas as funções de subprocessos asyncio são
assíncronas e asyncio fornece muitas ferramentas para trabalhar com tais
funções, é fácil executar e monitorar múltiplos subprocessos em
paralelo.  É na verdade trivial modificar o exemplo acima para executar
diversos comandos simultaneamente:

     async def main():
         await asyncio.gather(
             run('ls /zzz'),
             run('sleep 1; echo "hello"'))

     asyncio.run(main())

Veja também a subseção *note Exemplos: 34fc.

* Menu:

* Criando subprocessos::
* Constantes: Constantes<7>.
* Interagindo com subprocessos::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/asyncio/subprocess.py

   (2) 
https://github.com/python/cpython/tree/3.13/Lib/asyncio/base_subprocess.py


File: python.info,  Node: Criando subprocessos,  Next: Constantes<7>,  Up: Subprocessos

5.19.1.38 Criando subprocessos
..............................

 -- Função: async asyncio.create_subprocess_exec (program, *args,
          stdin=None, stdout=None, stderr=None, limit=None, **kwds)

     Cria um subprocesso.

     O argumento 'limit' define o limite do buffer para os invólucros
     *note StreamReader: 1a09. para *note stdout: 34fe. e *note stderr:
     34ff. (se *note subprocess.PIPE: b9f. for passado para os
     argumentos 'stdout' e 'stderr').

     Retorna uma instância de *note Process: 3500.

     Veja a documentação de *note loop.subprocess_exec(): 3501. para
     outros parâmetros.

     Se o objeto do processo for coletado pelo coletor de lixo enquanto
     o processo ainda estiver em execução, o processo filho será
     finalizado.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

 -- Função: async asyncio.create_subprocess_shell (cmd, stdin=None,
          stdout=None, stderr=None, limit=None, **kwds)

     Executa o comando 'cmd' no shell.

     O argumento 'limit' define o limite do buffer para os invólucros
     *note StreamReader: 1a09. para *note stdout: 34fe. e *note stderr:
     34ff. (se *note subprocess.PIPE: b9f. for passado para os
     argumentos 'stdout' e 'stderr').

     Retorna uma instância de *note Process: 3500.

     Veja a documentação de *note loop.subprocess_shell(): 3502. para
     outros parâmetros.

     Se o objeto do processo for coletado pelo coletor de lixo enquanto
     o processo ainda estiver em execução, o processo filho será
     finalizado.

          Importante: É responsabilidade da aplicação garantir que todos
          os espaços em branco e caracteres especiais tenham aspas
          apropriadamente para evitar vulnerabilidades de injeção de
          shell(1).  A função *note shlex.quote(): 27d. pode ser usada
          para escapar espaços em branco e caracteres especiais de shell
          apropriadamente em strings que serão usadas para construir
          comandos shell.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     Nota: Subprocessos estão disponíveis para Windows se uma *note
     ProactorEventLoop: 609. for usada.  Veja *note Suporte para
     subprocesso para Windows: 3503. para detalhes.

Ver também
..........

asyncio também tem as seguintes APIs 'de baixo nível' para trabalhar com
subprocessos: *note loop.subprocess_exec(): 3501, *note
loop.subprocess_shell(): 3502, *note loop.connect_read_pipe(): 3504,
*note loop.connect_write_pipe(): 3505, assim como os *note Transportes
de Subprocesso: 3506. e *note Protocolos de Subprocesso: 3507.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Shell_injection#Shell_injection


File: python.info,  Node: Constantes<7>,  Next: Interagindo com subprocessos,  Prev: Criando subprocessos,  Up: Subprocessos

5.19.1.39 Constantes
....................

 -- Dado: asyncio.subprocess.PIPE

     Pode ser passado para os parâmetros 'stdin', 'stdout' ou 'stderr'.

     Se 'PIPE' for passado para o argumento 'stdin', o atributo *note
     Process.stdin: 350a. irá apontar para uma instância *note
     StreamWriter: 17f2.

     Se 'PIPE' for passado para os argumentos 'stdout' ou 'stderr', os
     atributos *note Process.stdout: 34fe. e *note Process.stderr: 34ff.
     irão apontar para instâncias *note StreamReader: 1a09.

 -- Dado: asyncio.subprocess.STDOUT

     Valor especial que pode ser usado como o argumento 'stderr' e
     indica que a saída de erro padrão deve ser redirecionada para a
     saída padrão.

 -- Dado: asyncio.subprocess.DEVNULL

     Valor especial que pode ser usado como argumento 'stdin', 'stdout'
     ou 'stderr' para funções de criação de processos.  Ele indica que o
     arquivo especial *note os.devnull: 1bab. será usado para o fluxo de
     subprocesso correspondente.


File: python.info,  Node: Interagindo com subprocessos,  Prev: Constantes<7>,  Up: Subprocessos

5.19.1.40 Interagindo com subprocessos
......................................

Ambas as funções *note create_subprocess_exec(): a81. e *note
create_subprocess_shell(): a82. retornam instâncias da classe 'Process'.
'Process' é um invólucro de alto nível que permite a comunicação com
subprocessos e observar eles serem completados.

 -- Classe: asyncio.subprocess.Process

     Um objeto que envolve processos do sistema operacional criados
     pelas funções *note create_subprocess_exec(): a81. e *note
     create_subprocess_shell(): a82.

     Esta classe é projetada para ter uma API similar a classe *note
     subprocess.Popen: 199, mas existem algumas diferenças notáveis:

        * ao contrário de Popen, instâncias de Process não têm um
          equivalente ao método *note poll(): 3411.;

        * os métodos *note communicate(): 1823. e *note wait(): 350e.
          não têm um parâmetro 'timeout': utilize a função ‘wait_for()’;

        * o método *note Process.wait(): 350e. é assíncrono, enquanto
          que o método *note subprocess.Popen.wait(): d05. é
          implementado como um laço bloqueante para indicar que está
          ocupado;

        * o parâmetro 'universal_newlines' não é suportado.

     Esta classe *note não é segura para thread: 34a6.

     Veja também a seção *note Subprocesso e Threads: 350f.

      -- Método: async wait ()

          Aguarda o processo filho encerrar.

          Define e retorna o atributo *note returncode: 3510.

               Nota: Este método pode entrar em deadlock ao usar
               ‘stdout=PIPE’ ou ‘stderr=PIPE’ e o processo filho gera
               tantas saídas que ele bloqueia a espera pelo encadeamento
               de buffer do sistema operacional para aceitar mais dados.
               Use o método *note communicate(): 1823. ao usar
               encadeamentos para evitar essa condição.

      -- Método: async communicate (input=None)

          Interage com processo:

            1. envia dados para 'stdin' (se 'input' for diferente de
               ‘None’);

            2. fecha 'stdin';

            3. lê dados a partir de 'stdout' e 'stderr', até que EOF
               (fim do arquivo) seja atingido;

            4. aguarda o processo encerrar.

          O argumento opcional 'input' é a informação (objeto *note
          bytes: 1c2.) que será enviada para o processo filho.

          Retorna uma tupla ‘(stdout_data, stderr_data)’.

          Se qualquer exceção *note BrokenPipeError: 1095. ou *note
          ConnectionResetError: 1098. for levantada ao escrever 'input'
          em 'stdin', a exceção é ignorada.  Esta condição ocorre quando
          o processo encerra antes de todos os dados serem escritos em
          'stdin'.

          Se for desejado enviar dados para o 'stdin' do processo, o
          mesmo precisa ser criado com ‘stdin=PIPE’.  De forma similar,
          para obter qualquer coisa além de ‘None’ na tupla resultante,
          o processo precisa ser criado com os argumentos ‘stdout=PIPE’
          e/ou ‘stderr=PIPE’.

          Perceba que, os dados lidos são armazenados em um buffer na
          memória, então não use este método se o tamanho dos dados é
          grande ou ilimitado.

          Alterado na versão 3.12: 'stdin' é fechado quando ‘input=None’
          é também.

      -- Método: send_signal (signal)

          Envia o sinal 'signal' para o processo filho.

               Nota: No Windows, *note SIGTERM: 1426. é um apelido para
               *note terminate(): 3511.  ‘CTRL_C_EVENT’ e
               ‘CTRL_BREAK_EVENT’ podem ser enviados para processos
               iniciados com um parâmetro 'creationflags', o qual inclui
               ‘CREATE_NEW_PROCESS_GROUP’.

      -- Método: terminate ()

          Interrompe o processo filho.

          Em sistemas POSIX este método envia *note SIGTERM: 1426. para
          o processo filho.

          No Windows a função ‘TerminateProcess()’ da API Win32 é
          chamada para interromper o processo filho.

      -- Método: kill ()

          Mata o processo filho.

          Em sistemas POSIX este método envia *note SIGKILL: b6e. para o
          processo filho.

          No Windows, este método é um atalho para *note terminate():
          3511.

      -- Atributo: stdin

          Fluxo de entrada padrão (*note StreamWriter: 17f2.) ou ‘None’
          se o processo foi criado com ‘stdin=None’.

      -- Atributo: stdout

          Fluxo de saída padrão (*note StreamReader: 1a09.) ou ‘None’ se
          o processo foi criado com ‘stdout=None’.

      -- Atributo: stderr

          Erro de fluxo padrão (*note StreamReader: 1a09.) ou ‘None’ se
          o processo foi criado com ‘stderr=None’.

          Aviso: Use o método *note communicate(): 1823. ao invés de
          *note process.stdin.write(): 350a, *note await
          process.stdout.read(): 34fe. ou *note await
          process.stderr.read(): 34ff.  Isso evita deadlocks devido a
          fluxos pausando a leitura ou escrita, e bloqueando o processo
          filho.

      -- Atributo: pid

          Número de identificação do processo (PID).

          Perceba que para processos criados pela função *note
          create_subprocess_shell(): a82, este atributo é o PID do
          console gerado.

      -- Atributo: returncode

          Retorna o código do processo quando o mesmo terminar.

          Um valor ‘None’ indica que o processo ainda não terminou.

          Um valor negativo ‘-N’ indica que o filho foi terminado pelo
          sinal ‘N’ (POSIX apenas).

* Menu:

* Subprocesso e Threads::
* Exemplos: Exemplos<16>.


File: python.info,  Node: Subprocesso e Threads,  Next: Exemplos<16>,  Up: Interagindo com subprocessos

5.19.1.41 Subprocesso e Threads
...............................

Laço de eventos padrão do asyncio suporta a execução de subprocessos a
partir de diferentes threads por padrão.

No Windows, subprocessos são fornecidos pela classe *note
ProactorEventLoop: 609. apenas (por padrão), a classe *note
SelectorEventLoop: 608. não tem suporte a subprocesso.

Em sistemas UNIX, 'monitores de filhos' são usados para aguardar o
encerramento de subprocesso, veja *note Monitores de processos: 3515.
para mais informações.

Alterado na versão 3.8: UNIX mudou para usar *note ThreadedChildWatcher:
47b. para gerar subprocessos a partir de diferentes threads sem qualquer
limitação.

Gerar um subprocesso com um monitor 'inativo' para o filho atual,
levanta *note RuntimeError: 195.

Perceba que implementações alternativas do laço de eventos podem ter
limitações próprias; por favor, verifique a sua documentação.

Ver também
..........

A seção *note Concorrência e multithreading em asyncio: 34a6.


File: python.info,  Node: Exemplos<16>,  Prev: Subprocesso e Threads,  Up: Interagindo com subprocessos

5.19.1.42 Exemplos
..................

Um exemplo de uso da classe *note Process: 3500. para controlar um
subprocesso e a classe *note StreamReader: 1a09. para ler a partir da
sua saída padrão.  O subprocesso é criado pela função *note
create_subprocess_exec(): a81.:

     import asyncio
     import sys

     async def get_date():
         code = 'import datetime; print(datetime.datetime.now())'

         # Cria um subprocesso; redireciona a saída padrão
         # para o encadeamento.
         proc = await asyncio.create_subprocess_exec(
             sys.executable, '-c', code,
             stdout=asyncio.subprocess.PIPE)

         # Lê uma linha da saída.
         data = await proc.stdout.readline()
         line = data.decode('ascii').rstrip()

         # Espera o subprocesso sair.
         await proc.wait()
         return line

     date = asyncio.run(get_date())
     print(f"Current date: {date}")

Veja também o *note mesmo exemplo: 3517. escrito usando APIs de baixo
nível.


File: python.info,  Node: Filas,  Next: Exceções<13>,  Prev: Subprocessos,  Up: asyncio — E/S assíncrona

5.19.1.43 Filas
...............

'Código-fonte:' Lib/asyncio/queues.py(1)

__________________________________________________________________

Filas asyncio são projetadas para serem similar a classes do módulo
*note queue: b6.  Apesar de filas asyncio não serem seguras para thread,
elas são projetadas para serem usadas especificamente em código
async/await.

Perceba que métodos de filas asyncio não possuem um parâmetro 'timeout';
use a função *note asyncio.wait_for(): 5ff. para realizar operações de
fila com um tempo limite timeout.

Veja também a seção *note Exemplos: 351b. abaixo.

* Menu:

* Queue::
* Fila de prioridade::
* Filas LIFO (último a entrar, primeiro a sair): Filas LIFO último a entrar primeiro a sair.
* Exceções: Exceções<12>.
* Exemplos: Exemplos<17>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/asyncio/queues.py


File: python.info,  Node: Queue,  Next: Fila de prioridade,  Up: Filas

5.19.1.44 Queue
...............

 -- Classe: asyncio.Queue (maxsize=0)

     Uma fila onde o primeiro a entrar, é o primeiro a sair (FIFO -
     First In First Out).

     Se 'maxsize' for menor que ou igual a zero, o tamanho da fila é
     infinito.  Se ele for um inteiro maior que ‘0’, então ‘await put()’
     bloqueia quando a fila atingir 'maxsize' até que um item seja
     removido por *note get(): 351d.

     Ao contrário da biblioteca padrão de threading *note queue: b6, o
     tamanho da fila é sempre conhecido e pode ser obtido através da
     chamada do método *note qsize(): 351e.

     Alterado na versão 3.10: Removido o parâmetro 'loop'.

     Esta classe *note não é segura para thread: 34a6.

      -- Atributo: maxsize

          Número de itens permitidos na fila.

      -- Método: empty ()

          Retorna ‘True’ se a fila estiver vazia, ‘False’ caso
          contrário.

      -- Método: full ()

          Retorna ‘True’ se existem *note maxsize: 351f. itens na fila.

          Se a fila foi inicializada com ‘maxsize=0’ (o padrão), então
          *note full(): 3521. nunca retorna ‘True’.

      -- Método: async get ()

          Remove e retorna um item da fila.  Se a fila estiver vazia,
          aguarda até que um item esteja disponível.

          Levanta *note QueueShutDown: 1b1. se a fila foi encerrada e
          está vazia, ou se a fila foi encerrada imediatamente.

      -- Método: get_nowait ()

          Retorna um item se houver um imediatamente disponível, caso
          contrário levanta *note QueueEmpty: 3523.

      -- Método: async join ()

          Bloqueia até que todos os itens na fila tenham sido recebidos
          e processados.

          A contagem de tarefas inacabadas aumenta sempre que um item é
          adicionado à fila.  A contagem diminui sempre que uma
          corrotina consumidora chama *note task_done(): df1. para
          indicar que o item foi recuperado e todo o trabalho nele foi
          concluído.  Quando a contagem de tarefas inacabadas chega a
          zero, *note join(): df0. desbloqueia.

      -- Método: async put (item)

          Coloca um item na fila.  Se a fila estiver cheia, aguarda até
          que uma posição livre esteja disponível antes de adicionar o
          item.

          Levanta *note QueueShutDown: 1b1. se a fila foi encerrada.

      -- Método: put_nowait (item)

          Coloca um item na fila sem bloqueá-la.

          Se nenhuma posição livre estiver imediatamente disponível,
          levanta *note QueueFull: 3526.

      -- Método: qsize ()

          Retorna o número de itens na fila.

      -- Método: shutdown (immediate=False)

          Coloca uma instância de *note Queue: a80. em modo de
          desligamento.

          The queue can no longer grow.  Future calls to *note put():
          3524. raise *note QueueShutDown: 1b1.  Currently blocked
          callers of *note put(): 3524. will be unblocked and will raise
          *note QueueShutDown: 1b1. in the formerly awaiting task.

          Se 'immediate' for falso (o padrão), a fila pode ser encerrada
          normalmente com chamadas *note get(): 351d. para extrair
          tarefas que já foram carregadas.

          E se *note task_done(): df1. for chamado para cada tarefa
          restante, um *note join(): df0. pendente será desbloqueado
          normalmente.

          Assim que a fila estiver vazia, chamadas futuras para *note
          get(): 351d. vão levantar *note QueueShutDown: 1b1.

          Se 'immediate' for verdadeiro, a fila é encerrada
          imediatamente.  A fila é esvaziada completamente e a contagem
          de tarefas não concluídas é reduzida pelo número de tarefas
          concluídas.  Se o número de tarefas não concluídas for zero,
          as chamadas de *note join(): df0. são desbloqueadas.  Além
          disso, as chamadas bloqueadas de *note get(): 351d. são
          desbloqueadas e levantarão uma exceção *note QueueShutDown:
          1b1. porque a fila está vazia.

          Tenha cuidado ao usar *note join(): df0. com a opção
          'immediate' definida como verdadeiro.  Isso desbloqueia a
          junção mesmo quando nenhuma tarefa foi executada, violando a
          invariante usual para a junção de uma fila.

          Adicionado na versão 3.13.

      -- Método: task_done ()

          Indica que o item de trabalho anteriormente enfileirado está
          concluído.

          Usada por consumidores de fila.  Para cada *note get(): 351d.
          usado para buscar um item de trabalho, uma chamada subsequente
          para *note task_done(): df1. avisa à fila, que o processamento
          no item de trabalho está concluído.

          Se um *note join(): df0. estiver sendo bloqueado no momento,
          ele irá continuar quando todos os itens tiverem sido
          processados (significando que uma chamada *note task_done():
          df1. foi recebida para cada item que foi chamado o método
          *note put(): 3524. para colocar na fila).

          Levanta *note ValueError: 202. se chamada mais vezes do que a
          quantidade de itens existentes na fila.


File: python.info,  Node: Fila de prioridade,  Next: Filas LIFO último a entrar primeiro a sair,  Prev: Queue,  Up: Filas

5.19.1.45 Fila de prioridade
............................

 -- Classe: asyncio.PriorityQueue

     Uma variante de *note Queue: a80.; recupera entradas em ordem de
     prioridade (mais baixas primeiro).

     Entradas são tipicamente tuplas no formato ‘(priority_number,
     data)’.


File: python.info,  Node: Filas LIFO último a entrar primeiro a sair,  Next: Exceções<12>,  Prev: Fila de prioridade,  Up: Filas

5.19.1.46 Filas LIFO (último a entrar, primeiro a sair)
.......................................................

 -- Classe: asyncio.LifoQueue

     Uma variante de *note Queue: a80. que recupera as entradas
     adicionadas mais recentemente primeiro (último a entrar, primeiro a
     sair).


File: python.info,  Node: Exceções<12>,  Next: Exemplos<17>,  Prev: Filas LIFO último a entrar primeiro a sair,  Up: Filas

5.19.1.47 Exceções
..................

 -- Exceção: asyncio.QueueEmpty

     Esta exceção é levantada quando o método *note get_nowait(): 3522.
     é chamado em uma fila vazia.

 -- Exceção: asyncio.QueueFull

     Exceção levantada quando o método *note put_nowait(): 3525. é
     chamado em uma fila que atingiu seu 'maxsize'.

 -- Exceção: asyncio.QueueShutDown

     Exceção levantada quando *note put(): 3524. ou *note get(): 351d. é
     chamado em uma fila que foi desligada.

     Adicionado na versão 3.13.


File: python.info,  Node: Exemplos<17>,  Prev: Exceções<12>,  Up: Filas

5.19.1.48 Exemplos
..................

Filas podem ser usadas para distribuir cargas de trabalho entre diversas
tarefas concorrentes:

     import asyncio
     import random
     import time


     async def worker(nome, fila):
         while True:
             # Retira um "item de trabalho" da fila.
             dormir_por = await queue.get()

             # Dorme por "dormir_por" segundos.
             await asyncio.sleep(dormir_por)

             # Notifica a fila de que o "item de trabalho" foi processado.
             fila.task_done()

             print(f'{nome} dormiu por {dormir_por:.2f} segundos')


     async def main():
         # Cria uma fila para armazenar nossa "carga de trabalho".
         fila = asyncio.Queue()

         # Gera tempos aleatórios e os insere na fila.
         tempo_total_de_sono = 0
         for _ in range(20):
             dormir_por = random.uniform(0.05, 1.0)
             tempo_total_de_sono += dormir_por
             fila.put_nowait(dormir_por)

         # Cria três tarefas "worker" para processarem a fila concorrentemente.
         tarefas = []
         for i in range(3):
             tarefa = asyncio.create_task(worker(f'worker-{i}', fila))
             tarefas.append(tarefa)

         # Espera até a fila ser completamente processada.
         comecou_em = time.monotonic()
         await fila.join()
         tempo_dormido = time.monotonic() - comecou_em

         # Cancela nossas tarefas.
         for tarefa in tarefas:
             tarefa.cancel()
         # Espera até todas as tarefas serem canceladas.
         await asyncio.gather(*tarefas, return_exceptions=True)

         print('====')
         print(f'3 trabalhadoras dormiram em paralelo por {tempo_dormido:.2f} segundos')
         print(f'Tempo total de sono esperado: {tempo_total_de_sono:.2f} segundos')


     asyncio.run(main())


File: python.info,  Node: Exceções<13>,  Next: Laço de eventos,  Prev: Filas,  Up: asyncio — E/S assíncrona

5.19.1.49 Exceções
..................

'Código-fonte:' Lib/asyncio/exceptions.py(1)

__________________________________________________________________

 -- Exceção: asyncio.TimeoutError

     Um apelido descontinuado de *note TimeoutError: 838, levantado
     quando a operação excedeu o prazo determinado.

     Alterado na versão 3.11: Esta classe foi feita como um apelido de
     *note TimeoutError: 838.

 -- Exceção: asyncio.CancelledError

     A operação foi cancelada.

     Esta exceção pode ser capturada para executar operações
     personalizadas quando as tarefas assíncronas são canceladas.  Em
     quase todas as situações, a exceção deve ser levantada novamente.

     Alterado na versão 3.8: *note CancelledError: 1b8. é agora uma
     subclasse de *note BaseException: 5bb. em vez de *note Exception:
     9e2.

 -- Exceção: asyncio.InvalidStateError

     Estado interno inválido de *note Task: 1be. ou *note Future: be6.

     Pode ser levantada em situações como definir um valor de resultado
     para um objeto 'Future' que já tem um valor de resultado definido.

 -- Exceção: asyncio.SendfileNotAvailableError

     A 'syscall' “sendfile” não está disponível para o soquete ou tipo
     de arquivo fornecido.

     Uma subclasse de *note RuntimeError: 195.

 -- Exceção: asyncio.IncompleteReadError

     A operação de leitura solicitada não foi totalmente concluída.

     Levantada pelas *note APIs de fluxo de asyncio: 3477.

     Esta exceção é uma subclasse de *note EOFError: 131c.

      -- Atributo: expected

          O número total (*note int: 257.) de bytes esperados.

      -- Atributo: partial

          Uma string de *note bytes: 1c2. lida antes do final do fluxo
          ser alcançado.

 -- Exceção: asyncio.LimitOverrunError

     Atingiu o limite de tamanho do buffer ao procurar um separador.

     Levantada pelas *note APIs de fluxo de asyncio: 3477.

      -- Atributo: consumed

          O número total de bytes a serem consumidos.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/asyncio/exceptions.py


File: python.info,  Node: Laço de eventos,  Next: Futuros,  Prev: Exceções<13>,  Up: asyncio — E/S assíncrona

5.19.1.50 Laço de eventos
.........................

'Código-fonte:' Lib/asyncio/events.py(1), Lib/asyncio/base_events.py(2)

__________________________________________________________________

Prefácio
........

O laço de eventos é o núcleo de toda aplicação asyncio.  Laços de
eventos executam tarefas e funções de retorno assíncronas, realizam
operações de entrada e saída e executam subprocessos.

Os desenvolvedores de aplicação normalmente devem usar as funções
asyncio de alto nível, como *note asyncio.run(): 47c, e devem raramente
precisar fazer referência ao objeto de loop ou chamar seus métodos.
Esta seção destina-se principalmente a autores de código de baixo nível,
bibliotecas e frameworks, que precisam de um controle mais preciso sobre
o comportamento do laço de evento.

Obtendo o laço de eventos
.........................

As seguintes funções baixo nível podem ser usadas para obter, definir,
ou criar um laço de eventos:

 -- Função: asyncio.get_running_loop ()

     Retorna o laço de eventos em execução na thread atual do sistema
     operacional.

     Levanta uma *note RuntimeError: 195. se não houver nenhum laço de
     eventos em execução.

     Esta função só pode ser chamada a partir de uma corrotina ou de um
     retorno de chamada.

     Adicionado na versão 3.7.

 -- Função: asyncio.get_event_loop ()

     Obtém o laço de eventos atual.

     Quando chamada de uma corrotina ou função de retorno (por exemplo,
     agendada com call_soon ou API semelhante), esta função sempre
     retornará o laço de eventos em execução.

     Se não houver nenhum laço de eventos em execução definido, a função
     retornará o resultado da chamada
     ‘get_event_loop_policy().get_event_loop()’.

     Devido ao fato desta função ter um comportamento particularmente
     complexo (especialmente quando políticas de laço de eventos
     customizadas estão sendo usadas), usar a função *note
     get_running_loop(): b1d. é preferido ao invés de *note
     get_event_loop(): 2c2. em corrotinas e funções de retorno.

     Como observado acima, considere usar também a função de alto nível
     *note asyncio.run(): 47c. ao invés de usar funções de baixo nível
     para manualmente criar e fechar um laço de eventos.

     Descontinuado desde a versão 3.12: Um aviso de descontinuação é
     emitido se não houver nenhum laço de eventos atual.  Em alguma
     versão futura do Python, isso se tornará um erro.

 -- Função: asyncio.set_event_loop (loop)

     Define 'loop' como o laço de eventos atual para a thread atual do
     sistema operacional.

 -- Função: asyncio.new_event_loop ()

     Cria e retorna um novo objeto de laço de eventos.

Perceba que o comportamento das funções *note get_event_loop(): 2c2,
*note set_event_loop(): 18df, e *note new_event_loop(): 3484. podem ser
alteradas *note definindo uma política de laço de eventos customizada:
3537.

Conteúdo
........

Esta página de documentação contém as seguintes seções:

   * A seção *note Métodos do laço de eventos: 3538. é a documentação de
     referência das APIs de laço de eventos;

   * A seção *note Tratadores de função de retorno: 3539. documenta as
     instâncias das classes *note Handle: 1c1d. e *note TimerHandle:
     1865, que são retornadas por métodos de agendamento tais como *note
     loop.call_soon(): b17. e *note loop.call_later(): b29.;

   * A seção *note Objetos Server: 353a. documenta tipos retornados a
     partir de métodos de laço de eventos, como *note
     loop.create_server(): b25.;

   * A seção *note Implementações do Laço de Eventos: 353b. documenta as
     classes *note SelectorEventLoop: 608. e *note ProactorEventLoop:
     609.;

   * A seção *note Exemplos: 353c. demonstra como trabalhar com algumas
     APIs do laço de eventos APIs.

* Menu:

* Métodos do laço de eventos::
* Tratadores de função de retorno::
* Objetos Server::
* Implementações do laço de eventos::
* Exemplos: Exemplos<18>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/asyncio/events.py

   (2) 
https://github.com/python/cpython/tree/3.13/Lib/asyncio/base_events.py


File: python.info,  Node: Métodos do laço de eventos,  Next: Tratadores de função de retorno,  Up: Laço de eventos

5.19.1.51 Métodos do laço de eventos
....................................

Laços de eventos possuem APIs de 'baixo nível' para as seguintes
situações:

* Menu:

* Executar e interromper o laço::
* Agendando funções de retorno::
* Agendando funções de retorno atrasadas::
* Criando Futures e Tasks::
* Abrindo conexões de rede::
* Criando servidores de rede::
* Transferindo arquivos::
* Atualizando TLS::
* Observando descritores de arquivo::
* Trabalhando com objetos soquete diretamente::
* DNS::
* Trabalhando com encadeamentos::
* Sinais Unix::
* Executando código em conjuntos de threads ou processos::
* Tratando erros da API::
* Habilitando o modo de debug::
* Executando subprocessos::


File: python.info,  Node: Executar e interromper o laço,  Next: Agendando funções de retorno,  Up: Métodos do laço de eventos

5.19.1.52 Executar e interromper o laço
.......................................

 -- Método: loop.run_until_complete (future)

     Executar até que o 'future' (uma instância da classe *note Future:
     be6.) seja completada.

     Se o argumento é um *note objeto corrotina: 3476, ele é
     implicitamente agendado para executar como uma *note asyncio.Task:
     1be.

     Retorna o resultado do Future ou levanta sua exceção.

 -- Método: loop.run_forever ()

     Executa o laço de eventos até que *note stop(): c98. seja chamado.

     If *note stop(): c98. is called before *note run_forever(): 353f.
     is called, the loop will poll the I/O selector once with a timeout
     of zero, run all callbacks scheduled in response to I/O events (and
     those that were already scheduled), and then exit.

     Se *note stop(): c98. for chamado enquanto *note run_forever():
     353f. estiver executando, o laço irá executar o lote atual de
     funções de retorno e então sair.  Perceba que novas funções de
     retorno agendadas por funções de retorno não serão executadas neste
     caso; ao invés disso, elas serão executadas na próxima vez que
     *note run_forever(): 353f. ou *note run_until_complete(): c93.
     forem chamadas.

 -- Método: loop.stop ()

     Para o laço de eventos.

 -- Método: loop.is_running ()

     Retorna ‘True’ se o laço de eventos estiver em execução.

 -- Método: loop.is_closed ()

     Retorna ‘True’ se o laço de eventos foi fechado.

 -- Método: loop.close ()

     Fecha o laço de eventos.

     O laço não deve estar em execução quando esta função for chamada.
     Qualquer função de retorno pendente será descartada.

     Este método limpa todas as filas e desliga o executor, mas não
     aguarda pelo encerramento do executor.

     Este método é idempotente e irreversível.  Nenhum outro método deve
     ser chamado depois que o laço de eventos esteja fechado.

 -- Método: async loop.shutdown_asyncgens ()

     Schedule all currently open *note asynchronous generator: 21cf.
     objects to close with an *note aclose(): 8de. call.  After calling
     this method, the event loop will issue a warning if a new
     asynchronous generator is iterated.  This should be used to
     reliably finalize all scheduled asynchronous generators.

     Perceba que não é necessário chamar esta função quando *note
     asyncio.run(): 47c. for usado.

     Exemplo:

          try:
              loop.run_forever()
          finally:
              loop.run_until_complete(loop.shutdown_asyncgens())
              loop.close()

     Adicionado na versão 3.6.

 -- Método: async loop.shutdown_default_executor (timeout=None)

     Agenda o encerramento do executor padrão e aguarda ele se juntar a
     todas as threads no *note ThreadPoolExecutor: 742.  Uma vez que
     este método tenha sido chamado, usar o executor padrão com *note
     loop.run_in_executor(): 8ef. levantará um *note RuntimeError: 195.

     O parâmetro 'timeout' especifica a quantidade de tempo (em *note
     float: 2f7. segundos) que o executor terá para terminar a junção.
     Com o padrão ‘None’, o executor tem permissão para um período de
     tempo ilimitado.

     Se o 'timeout' for atingido, uma exceção *note RuntimeWarning: 1bd.
     será emitida e o executor padrão será finalizado sem esperar que
     suas threads terminem a junção.

          Nota: Do not call this method when using *note asyncio.run():
          47c, as the latter handles default executor shutdown
          automatically.

     Adicionado na versão 3.9.

     Alterado na versão 3.12: Added the 'timeout' parameter.


File: python.info,  Node: Agendando funções de retorno,  Next: Agendando funções de retorno atrasadas,  Prev: Executar e interromper o laço,  Up: Métodos do laço de eventos

5.19.1.53 Agendando funções de retorno
......................................

 -- Método: loop.call_soon (callback, *args, context=None)

     Agenda a 'função de retorno' *note callback: 2ad2. para ser chamada
     com argumentos 'args' na próxima iteração do laço de eventos.

     Return an instance of *note asyncio.Handle: 1c1d, which can be used
     later to cancel the callback.

     Funções de retorno são chamadas na ordem em que elas foram
     registradas.  Cada função de retorno será chamada exatamente uma
     vez.

     The optional keyword-only 'context' argument specifies a custom
     *note contextvars.Context: 15b7. for the 'callback' to run in.
     Callbacks use the current context when no 'context' is provided.

     Unlike *note call_soon_threadsafe(): b18, this method is not
     thread-safe.

 -- Método: loop.call_soon_threadsafe (callback, *args, context=None)

     A thread-safe variant of *note call_soon(): b17.  When scheduling
     callbacks from another thread, this function 'must' be used, since
     *note call_soon(): b17. is not thread-safe.

     This function is safe to be called from a reentrant context or
     signal handler, however, it is not safe or fruitful to use the
     returned handle in such contexts.

     Levanta *note RuntimeError: 195. se chamado em um laço que já foi
     fechado.  Isto pode acontecer em uma thread secundária quando a
     aplicação principal estiver desligando.

     Veja a seção *note concorrência e multithreading: 34a6. da
     documentação.

     Alterado na versão 3.7: O parâmetro somente-nomeado 'context' foi
     adicionado.  Veja PEP 567(1) para mais detalhes.

     Nota: Maior parte das funções de agendamento *note asyncio: a. não
     permite passar argumentos nomeados.  Para fazer isso, use *note
     functools.partial(): 414.:

          # will schedule "print("Hello", flush=True)"
          loop.call_soon(
              functools.partial(print, "Hello", flush=True))

     Usar objetos parciais é usualmente mais conveniente que usar
     lambdas, pois asyncio pode renderizar objetos parciais melhor
     durante debug e mensagens de erro.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0567/


File: python.info,  Node: Agendando funções de retorno atrasadas,  Next: Criando Futures e Tasks,  Prev: Agendando funções de retorno,  Up: Métodos do laço de eventos

5.19.1.54 Agendando funções de retorno atrasadas
................................................

Laço de eventos fornece mecanismos para agendar funções de retorno para
serem chamadas em algum ponto no futuro.  Laço de eventos usa relógios
monotônico para acompanhar o tempo.

 -- Método: loop.call_later (delay, callback, *args, context=None)

     Agenda 'callback' para ser chamada após o 'delay' número de
     segundos fornecido (pode ser um inteiro ou um ponto flutuante).

     Uma instância de *note asyncio.TimerHandle: 1865. é retornada, a
     qual pode ser usada para cancelar a função de retorno.

     'callback' será chamada exatamente uma vez.  Se duas funções de
     retorno são agendadas para exatamente o mesmo tempo, a ordem na
     qual elas são chamadas é indefinida.

     O 'args' posicional opcional será passado para a função de retorno
     quando ela for chamada.  Se você quiser que a função de retorno
     seja chamada com argumentos nomeados, use *note
     functools.partial(): 414.

     Um argumento opcional somente-nomeado 'context' permite especificar
     um *note contextvars.Context: 15b7. customizado para executar na
     'função de retorno'.  O contexto atual é usado quando nenhum
     'context' é fornecido.

          Nota: For performance, callbacks scheduled with *note
          loop.call_later(): b29. may run up to one clock-resolution
          early (see ‘time.get_clock_info('monotonic').resolution’).

     Alterado na versão 3.7: O parâmetro somente-nomeado 'context' foi
     adicionado.  Veja PEP 567(1) para mais detalhes.

     Alterado na versão 3.8: No Python 3.7 e anterior, com a
     implementação padrão do laço de eventos, o 'delay' não poderia
     exceder um dia.  Isto foi ajustado no Python 3.8.

 -- Método: loop.call_at (when, callback, *args, context=None)

     Agenda 'callback' para ser chamada no timestamp absoluto fornecido
     'when' (um inteiro ou um ponto flutuante), usando o mesmo horário
     de referência que *note loop.time(): 3546.

     O comportamento deste método é o mesmo que *note call_later(): b29.

     Uma instância de *note asyncio.TimerHandle: 1865. é retornada, a
     qual pode ser usada para cancelar a função de retorno.

          Nota: For performance, callbacks scheduled with *note
          loop.call_at(): b19. may run up to one clock-resolution early
          (see ‘time.get_clock_info('monotonic').resolution’).

     Alterado na versão 3.7: O parâmetro somente-nomeado 'context' foi
     adicionado.  Veja PEP 567(2) para mais detalhes.

     Alterado na versão 3.8: No Python 3.7 e anterior, com a
     implementação padrão do laço de eventos, a diferença entre 'when' e
     o horário atual não poderia exceder um dia.  Isto foi ajustado no
     Python 3.8.

 -- Método: loop.time ()

     Retorna o horário atual, como um valor *note float: 2f7, de acordo
     com o relógio monotônico interno do laço de eventos.

     Nota: 
     Alterado na versão 3.8: No Python 3.7 e anterior, tempos limites
     ('delay' relativo ou 'when' absoluto) não poderiam exceder um dia.
     Isto foi ajustado no Python 3.8.

Ver também
..........

A função *note asyncio.sleep(): a79.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0567/

   (2) https://peps.python.org/pep-0567/


File: python.info,  Node: Criando Futures e Tasks,  Next: Abrindo conexões de rede,  Prev: Agendando funções de retorno atrasadas,  Up: Métodos do laço de eventos

5.19.1.55 Criando Futures e Tasks
.................................

 -- Método: loop.create_future ()

     Cria um objeto *note asyncio.Future: be6. anexado ao laço de
     eventos.

     Este é o modo preferido para criar Futures em asyncio.  Isto
     permite que laços de eventos de terceiros forneçam implementações
     alternativas do objeto Future (com melhor desempenho ou
     instrumentação).

     Adicionado na versão 3.5.2.

 -- Método: loop.create_task (coro, *, name=None, context=None,
          **kwargs)

     Agenda a execução da *note corrotina: 3476. 'coro'.  Retorna um
     objeto *note Task: 1be.

     Laços de eventos de terceiros podem usar suas próprias subclasses
     de *note Task: 1be. para interoperabilidade.  Neste caso, o tipo do
     resultado é uma subclasse de *note Task: 1be.

     The full function signature is largely the same as that of the
     *note Task: 1be. constructor (or factory) - all of the keyword
     arguments to this function are passed through to that interface,
     except 'name', or 'context' if it is ‘None’.

     Se o argumento 'name' for fornecido e não for ‘None’, ele é
     definido como o nome da tarefa, usando *note Task.set_name(): 9e5.

     Um argumento opcional somente-nomeado 'context' permite especificar
     um *note contextvars.Context: 15b7. personalizado para a 'coro' ser
     executada.  Uma cópia do contexto atual é criada quando nenhum
     'context' for fornecido.

     Alterado na versão 3.8: Adicionado o parâmetro 'name'.

     Alterado na versão 3.11: Adicionado o parâmetro 'context'.

     Alterado na versão 3.13.3: Adicionado ‘kwargs’, que passa
     parâmetros extra arbitrários, incluindo ‘name’ e ‘context’.

     Alterado na versão 3.13.4: Reverteu a alteração que passava 'name'
     e 'context' (se for None), enquanto ainda passa outros argumentos
     somente-nomeados arbitrários (para evitar quebrar a compatibilidade
     retroativa com a versão 3.13.3).

 -- Método: loop.set_task_factory (factory)

     Define a fábrica da tarefa que será usada por *note
     loop.create_task(): 1c0.

     Se 'factory' for ‘None’, será usada a fábrica de tarefas padrão.
     Caso contrário, 'factory' deve ser um 'chamável' com a assinatura
     ‘(loop, coro, **kwargs)’, em que 'loop' é uma referência ao ciclo
     de eventos ativo e 'coro' é um objeto corrotina.  O chamável deve
     passar todos os 'kwargs' e devolver um objeto compatível com *note
     asyncio.Task: 1be.

     Alterado na versão 3.13.3: Exigido que todos os 'kwargs' sejam
     passados para *note asyncio.Task: 1be.

     Alterado na versão 3.13.4: 'name' não é mais passado para fábricas
     de tarefas.  'context' não é mais passado para fábricas de tarefas
     se for ‘None’.

 -- Método: loop.get_task_factory ()

     Retorna uma fábrica de tarefa ou ‘None’ se a fábrica padrão estiver
     em uso.


File: python.info,  Node: Abrindo conexões de rede,  Next: Criando servidores de rede,  Prev: Criando Futures e Tasks,  Up: Métodos do laço de eventos

5.19.1.56 Abrindo conexões de rede
..................................

 -- Método: async loop.create_connection (protocol_factory, host=None,
          port=None, *, ssl=None, family=0, proto=0, flags=0, sock=None,
          local_addr=None, server_hostname=None,
          ssl_handshake_timeout=None, ssl_shutdown_timeout=None,
          happy_eyeballs_delay=None, interleave=None, all_errors=False)

     Abre uma conexão de transporte para streaming, para um endereço
     fornecido, especificado por 'host' e 'port'.

     A família de sockets pode ser *note AF_INET: 1938. ou *note
     AF_INET6: 1939. dependendo do 'host' (ou do argumento 'family', se
     fornecido).

     The socket type will be *note SOCK_STREAM: 1337.

     'protocol_factory' deve ser um chamável que retorne uma
     implementação do *note protocolo asyncio: 3549.

     Este método tentará estabelecer a conexão em segundo plano.  Quando
     tiver sucesso, ele retorna um par ‘(transport, protocol)’.

     A sinopse cronológica da operação subjacente é conforme abaixo:

       1. A conexão é estabelecida e um *note transporte: 354a. é criado
          para ela.

       2. 'protocol_factory' é chamada sem argumentos e é esperada que
          retorne uma instância de *note protocolo: 3549.

       3. A instância de protocolo é acoplada com o transporte, através
          da chamada do seu método *note connection_made(): 354b.

       4. Uma tupla ‘(transport, protocol)’ é retornada ao ter sucesso.

     O transporte criado é um stream bi-direcional dependente de
     implementação.

     Outros argumentos:

        * 'ssl': se fornecido e não for falso, um transporte SSL/TLS é
          criado (por padrão um transporte TCP simples é criado).  Se
          'ssl' for um objeto *note ssl.SSLContext: 294, este contexto é
          usado para criar o transporte; se 'ssl' for *note True: c27,
          um contexto padrão retornado de *note
          ssl.create_default_context(): 155. é usado.

          Ver também
          ..........

          *note Considerações de segurança sobre SSL/TLS: 354c.

        * 'server_hostname' define ou substitui o hostname que o
          certificado do servidor de destino será pareado contra.  Deve
          ser passado apenas se 'ssl' não for ‘None’.  Por padrão o
          valor do argumento 'host' é usado.  Se 'host' for vazio, não
          existe valor padrão e você deve passar um valor para
          'server_hostname'.  Se 'server_hostname' for uma string vazia,
          o pareamento de hostname é desabilitado (o que é um risco de
          segurança sério, permitindo ataques potenciais
          man-in-the-middle).

        * 'family', 'proto', 'flags' são os endereços familiares,
          protocolos e sinalizadores opcionais a serem passados por
          getaddrinfo() para resolução do 'host'.  Se fornecidos, eles
          devem ser todos inteiros e constantes correspondentes do
          módulo *note socket: cc.

        * 'happy_eyeballs_delay', se fornecido, habilita Happy Eyeballs
          para esta conexão.  Ele deve ser um número de ponto flutuante
          representando o tempo em segundos para aguardar uma tentativa
          de conexão encerrar, antes de começar a próxima tentativa em
          paralelo.  Este é o “Atraso na tentativa de conexão” conforme
          definido na RFC 8305(1).  Um valor padrão sensível recomendado
          pela RFC é ‘0.25’ (250 millissegundos).

        * 'interleave' controla o reordenamento de endereços quando um
          nome de servidor resolve para múltiplos endereços IP. Se ‘0’
          ou não especificado, nenhum reordenamento é feito, e endereços
          são tentados na ordem retornada por *note getaddrinfo(): c2e.
          Se um inteiro positivo for especificado, os endereços são
          intercalados por um endereço familiar, e o inteiro fornecido é
          interpretado como “Contagem da família do primeiro endereço”
          conforme definido na RFC 8305(2).  O padrão é ‘0’ se
          'happy_eyeballs_delay' não for especificado, e ‘1’ se ele for.

        * 'sock', se fornecido, deve ser um objeto *note socket.socket:
          dc9. já existente, já conectado, para ser usado por
          transporte.  Se 'sock' é fornecido, 'host', 'port', 'family',
          'proto', 'flags', 'happy_eyeballs_delay', 'interleave' e
          'local_addr' não devem ser especificados.

               Nota: The 'sock' argument transfers ownership of the
               socket to the transport created.  To close the socket,
               call the transport’s *note close(): 354d. method.

        * 'local_addr', se fornecido, é uma tupla de ‘(local_host,
          local_port)’ usada para se ligar ao soquete localmente.  O
          'local_host' e a 'local_port' são procurados usando
          ‘getaddrinfo()’, de forma similar para 'host' e 'port'.

        * 'ssl_handshake_timeout' é (para uma conexão TLS) o tempo em
          segundos para aguardar pelo encerramento do aperto de mão TLS,
          antes de abortar a conexão.  ‘60.0’ segundos se for ‘None’
          (valor padrão).

        * 'ssl_shutdown_timeout' is the time in seconds to wait for the
          SSL shutdown to complete before aborting the connection.
          ‘30.0’ seconds if ‘None’ (default).

        * 'all_errors' determines what exceptions are raised when a
          connection cannot be created.  By default, only a single
          ‘Exception’ is raised: the first exception if there is only
          one or all errors have same message, or a single ‘OSError’
          with the error messages combined.  When ‘all_errors’ is
          ‘True’, an ‘ExceptionGroup’ will be raised containing all
          exceptions (even if there is only one).

     Alterado na versão 3.5: Adicionado suporte para SSL/TLS na *note
     ProactorEventLoop: 609.

     Alterado na versão 3.6: The socket option *note socket.TCP_NODELAY:
     b8b. is set by default for all TCP connections.

     Alterado na versão 3.7: Adicionado o parâmetro
     'ssl_handshake_timeout'.

     Alterado na versão 3.8: Adicionados os parâmetros
     'happy_eyeballs_delay' e 'interleave'.

     Happy Eyeballs Algorithm: Success with Dual-Stack Hosts.  When a
     server’s IPv4 path and protocol are working, but the server’s IPv6
     path and protocol are not working, a dual-stack client application
     experiences significant connection delay compared to an IPv4-only
     client.  This is undesirable because it causes the dual-stack
     client to have a worse user experience.  This document specifies
     requirements for algorithms that reduce this user-visible delay and
     provides an algorithm.

     For more information:
     ‘https://datatracker.ietf.org/doc/html/rfc6555’

     Alterado na versão 3.11: Added the 'ssl_shutdown_timeout'
     parameter.

     Alterado na versão 3.12: 'all_errors' was added.

     Ver também
     ..........

     A função *note open_connection(): b2b. é uma API alternativa de
     alto nível.  Ela retorna um par de (*note StreamReader: 1a09, *note
     StreamWriter: 17f2.) que pode ser usado diretamente em código
     async/await.

 -- Método: async loop.create_datagram_endpoint (protocol_factory,
          local_addr=None, remote_addr=None, *, family=0, proto=0,
          flags=0, reuse_port=None, allow_broadcast=None, sock=None)

     Cria uma conexão de datagrama.

     The socket family can be either *note AF_INET: 1938, *note
     AF_INET6: 1939, or *note AF_UNIX: 193a, depending on 'host' (or the
     'family' argument, if provided).

     The socket type will be *note SOCK_DGRAM: 1336.

     'protocol_factory' deve ser algo chamável, retornando uma
     implementação de *note protocolo: 3549.

     Uma tupla de ‘(transport, protocol)’ é retornada em caso de
     sucesso.

     Outros argumentos:

        * 'local_addr', se fornecido, é uma tupla de ‘(local_host,
          local_port)’ usada para ligar o soquete localmente.  O
          'local_host' e a 'local_port' são procurados usando *note
          getaddrinfo(): c2e.

               Nota: On Windows, when using the proactor event loop with
               ‘local_addr=None’, an *note OSError: 417. with
               ‘errno.WSAEINVAL’ will be raised when running it.

        * 'remote_addr', se fornecido, é uma tupla de ‘(remote_host,
          remote_port)’ usada para conectar o soquete a um endereço
          remoto.  O 'remote_host' e a 'remote_port' são procurados
          usando *note getaddrinfo(): c2e.

        * 'family', 'proto', 'flags' são os endereços familiares,
          protocolo e flags opcionais a serem passados para *note
          getaddrinfo(): c2e. para resolução do 'host'.  Se fornecido,
          esses devem ser todos inteiros do módulo de constantes *note
          socket: cc. correspondente.

        * 'reuse_port' tells the kernel to allow this endpoint to be
          bound to the same port as other existing endpoints are bound
          to, so long as they all set this flag when being created.
          This option is not supported on Windows and some Unixes.  If
          the *note socket.SO_REUSEPORT: b8b. constant is not defined
          then this capability is unsupported.

        * 'allow_broadcast' avisa o kernel para permitir que este
          endpoint envie mensagens para o endereço de broadcast.

        * 'sock' pode opcionalmente ser especificado em ordem para usar
          um objeto *note socket.socket: dc9. pre-existente, já
          conectado, para ser usado pelo transporte.  Se especificado,
          'local_addr' e 'remote_addr' devem ser omitidos (devem ser
          *note None: 675.).

               Nota: The 'sock' argument transfers ownership of the
               socket to the transport created.  To close the socket,
               call the transport’s *note close(): 354d. method.

     Veja *note protocolo UDP eco cliente: 354e. e *note protocolo UDP
     eco servidor: 354f. para exemplos.

     Alterado na versão 3.4.4: The 'family', 'proto', 'flags',
     'reuse_address', 'reuse_port', 'allow_broadcast', and 'sock'
     parameters were added.

     Alterado na versão 3.8: Adicionado suporte para Windows.

     Alterado na versão 3.8.1: The 'reuse_address' parameter is no
     longer supported, as using *note socket.SO_REUSEADDR: b8b. poses a
     significant security concern for UDP. Explicitly passing
     ‘reuse_address=True’ will raise an exception.

     Quando múltiplos processos com diferentes UIDs atribuem soquetes
     para um endereço de soquete UDP idêntico com ‘SO_REUSEADDR’,
     pacotes recebidos podem ser distribuídos aleatoriamente entre os
     soquetes.

     For supported platforms, 'reuse_port' can be used as a replacement
     for similar functionality.  With 'reuse_port', *note
     socket.SO_REUSEPORT: b8b. is used instead, which specifically
     prevents processes with differing UIDs from assigning sockets to
     the same socket address.

     Alterado na versão 3.11: The 'reuse_address' parameter, disabled
     since Python 3.8.1, 3.7.6 and 3.6.10, has been entirely removed.

 -- Método: async loop.create_unix_connection (protocol_factory,
          path=None, *, ssl=None, sock=None, server_hostname=None,
          ssl_handshake_timeout=None, ssl_shutdown_timeout=None)

     Cria uma conexão Unix.

     The socket family will be *note AF_UNIX: 193a.; socket type will be
     *note SOCK_STREAM: 1337.

     Uma tupla de ‘(transport, protocol)’ é retornada em caso de
     sucesso.

     'path' é o nome de um soquete de domínio Unix e é obrigatório, a
     não ser que um parâmetro 'sock' seja especificado.  Soquetes Unix
     abstratos, *note str: 44c, *note bytes: 1c2, e caminhos *note Path:
     229. são suportados.

     Veja a documentação do método *note loop.create_connection(): 603.
     para informações a respeito de argumentos para este método.

     *note Disponibilidade: 1ed8.: Unix.

     Alterado na versão 3.7: Adicionado o parâmetro
     'ssl_handshake_timeout'.  O parâmetro 'path' agora pode ser um
     *note path-like object: 2a0.

     Alterado na versão 3.11: Added the 'ssl_shutdown_timeout'
     parameter.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc8305.html

   (2) https://datatracker.ietf.org/doc/html/rfc8305.html


File: python.info,  Node: Criando servidores de rede,  Next: Transferindo arquivos,  Prev: Abrindo conexões de rede,  Up: Métodos do laço de eventos

5.19.1.57 Criando servidores de rede
....................................

 -- Método: async loop.create_server (protocol_factory, host=None,
          port=None, *, family=socket.AF_UNSPEC,
          flags=socket.AI_PASSIVE, sock=None, backlog=100, ssl=None,
          reuse_address=None, reuse_port=None, keep_alive=None,
          ssl_handshake_timeout=None, ssl_shutdown_timeout=None,
          start_serving=True)

     Create a TCP server (socket type *note SOCK_STREAM: 1337.)
     listening on 'port' of the 'host' address.

     Retorna um objeto *note Server: b24.

     Argumentos:

        * 'protocol_factory' deve ser algo chamável, retornando uma
          implementação de *note protocolo: 3549.

        * O parâmetro 'host' pode ser definido para diversos tipos, o
          qual determina onde o servidor deve escutar:

             - Se 'host' for uma string, o servidor TCP está vinculado a
               apenas uma interface de rede, especificada por 'host'.

             - Se 'host' é uma sequência de strings, o servidor TCP está
               vinculado a todas as interfaces de rede especificadas
               pela sequência.

             - Se 'host' é uma string vazia ou ‘None’, todas as
               interfaces são presumidas e uma lista de múltiplos
               soquetes será retornada (muito provavelmente um para IPv4
               e outro para IPv6).

        * O parâmetro 'port' pode ser definido para especificar qual
          porta o servidor deve escutar.  Se ‘0’ ou ‘None’ (o padrão),
          uma porta aleatória disponível será selecionada (note que se
          'host' resolve para múltiplas interfaces de rede, uma porta
          aleatória diferente será selecionada para cada interface).

        * 'family' can be set to either *note socket.AF_INET: 1938. or
          *note AF_INET6: 1939. to force the socket to use IPv4 or IPv6.
          If not set, the 'family' will be determined from host name
          (defaults to *note AF_UNSPEC: 3551.).

        * 'flags' é uma máscara de bits para *note getaddrinfo(): c2e.

        * 'sock' pode opcionalmente ser especificado para usar um objeto
          soquete pré-existente.  Se especificado, 'host' e 'port' não
          devem ser especificados.

               Nota: The 'sock' argument transfers ownership of the
               socket to the server created.  To close the socket, call
               the server’s *note close(): 34bb. method.

        * 'backlog' é o número máximo de conexões enfileiradas passadas
          para *note listen(): e8d. (padrão é 100).

        * 'ssl' pode ser definido para uma instância de *note
          SSLContext: 294. para habilitar TLS sobre as conexões aceitas.

        * 'reuse_address' diz ao kernel para reusar um soquete local em
          estado ‘TIME_WAIT’, sem aguardar pela expiração natural do seu
          tempo limite.  Se não especificado, será automaticamente
          definida como ‘True’ no Unix.

        * 'reuse_port' diz ao kernel para permitir que este endpoint
          seja vinculado a mesma porta que outros endpoints existentes
          estão vinculados, contanto que todos eles definam este
          sinalizador quando forem criados.  Esta opção não é suportada
          no Windows.

        * 'keep_alive' set to ‘True’ keeps connections active by
          enabling the periodic transmission of messages.

     Alterado na versão 3.13: Added the 'keep_alive' parameter.

        * 'ssl_handshake_timeout' é (para um servidor TLS) o tempo em
          segundos para aguardar pelo aperto de mão TLS ser concluído,
          antes de abortar a conexão.  ‘60.0’ segundos se ‘None’ (valor
          padrão).

        * 'ssl_shutdown_timeout' is the time in seconds to wait for the
          SSL shutdown to complete before aborting the connection.
          ‘30.0’ seconds if ‘None’ (default).

        * Definir 'start_serving' para ‘True’ (o valor padrão) faz o
          servidor criado começar a aceitar conexões imediatamente.
          Quando definido para ‘False’, o usuário deve aguardar com
          *note Server.start_serving(): b26. ou *note
          Server.serve_forever(): b27. para fazer o servidor começar a
          aceitar conexões.

     Alterado na versão 3.5: Adicionado suporte para SSL/TLS na *note
     ProactorEventLoop: 609.

     Alterado na versão 3.5.1: O parâmetro 'host' pode ser uma sequência
     de strings.

     Alterado na versão 3.6: Added 'ssl_handshake_timeout' and
     'start_serving' parameters.  The socket option *note
     socket.TCP_NODELAY: b8b. is set by default for all TCP connections.

     Alterado na versão 3.11: Added the 'ssl_shutdown_timeout'
     parameter.

     Ver também
     ..........

     A função *note start_server(): b2c. é uma API alternativa de alto
     nível que retorna um par de *note StreamReader: 1a09. e *note
     StreamWriter: 17f2. que pode ser usado em um código async/await.

 -- Método: async loop.create_unix_server (protocol_factory, path=None,
          *, sock=None, backlog=100, ssl=None,
          ssl_handshake_timeout=None, ssl_shutdown_timeout=None,
          start_serving=True, cleanup_socket=True)

     Similar to *note loop.create_server(): b25. but works with the
     *note AF_UNIX: 193a. socket family.

     'path' é o nome de um soquete de domínio Unix, e é obrigatório, a
     não ser que um argumento 'sock' seja fornecido.  Soquetes Unix
     abstratos, *note str: 44c, *note bytes: 1c2, e caminhos *note Path:
     229. são suportados.

     If 'cleanup_socket' is true then the Unix socket will automatically
     be removed from the filesystem when the server is closed, unless
     the socket has been replaced after the server has been created.

     Veja a documentação do método *note loop.create_server(): b25. para
     informações sobre argumentos para este método.

     *note Disponibilidade: 1ed8.: Unix.

     Alterado na versão 3.7: Adicionados os parâmetros
     'ssl_handshake_timeout' e 'start_serving'.  O parâmetros 'path'
     agora pode ser um objeto da classe *note Path: 229.

     Alterado na versão 3.11: Added the 'ssl_shutdown_timeout'
     parameter.

     Alterado na versão 3.13: Added the 'cleanup_socket' parameter.

 -- Método: async loop.connect_accepted_socket (protocol_factory, sock,
          *, ssl=None, ssl_handshake_timeout=None,
          ssl_shutdown_timeout=None)

     Envolve uma conexão já aceita em um par transporte/protocolo.

     Este método pode ser usado por servidores que aceitam conexões fora
     do asyncio, mas que usam asyncio para manipulá-las.

     Parâmetros:

        * 'protocol_factory' deve ser algo chamável, retornando uma
          implementação de *note protocolo: 3549.

        * 'sock' é um objeto soquete pré-existente retornado a partir de
          *note socket.accept: dca.

               Nota: The 'sock' argument transfers ownership of the
               socket to the transport created.  To close the socket,
               call the transport’s *note close(): 354d. method.

        * 'ssl' pode ser definido para um *note SSLContext: 294. para
          habilitar SSL sobre as conexões aceitas.

        * 'ssl_handshake_timeout' é (para uma conexão SSL) o tempo em
          segundos para aguardar pelo aperto de mão SSL ser concluído,
          antes de abortar a conexão.  ‘60.0’ segundos se ‘None’ (valor
          padrão).

        * 'ssl_shutdown_timeout' is the time in seconds to wait for the
          SSL shutdown to complete before aborting the connection.
          ‘30.0’ seconds if ‘None’ (default).

     Retorna um par ‘(transport, protocol)’.

     Adicionado na versão 3.5.3.

     Alterado na versão 3.7: Adicionado o parâmetro
     'ssl_handshake_timeout'.

     Alterado na versão 3.11: Added the 'ssl_shutdown_timeout'
     parameter.


File: python.info,  Node: Transferindo arquivos,  Next: Atualizando TLS,  Prev: Criando servidores de rede,  Up: Métodos do laço de eventos

5.19.1.58 Transferindo arquivos
...............................

 -- Método: async loop.sendfile (transport, file, offset=0, count=None,
          *, fallback=True)

     Envia um 'file' sobre um 'transport'.  Retorna o número total de
     bytes enviados.

     O método usa *note os.sendfile(): b21. de alto desempenho, se
     disponível.

     'file' deve ser um objeto arquivo regular aberto em modo binário.

     'offset' indica a partir de onde deve iniciar a leitura do arquivo.
     Se especificado, 'count' é o número total de bytes para transmitir,
     ao contrário de transmitir o arquivo até que EOF seja atingido.  A
     posição do arquivo é sempre atualizada, mesmo quando este método
     levanta um erro, e *note file.tell(): 13f3. pode ser usado para
     obter o número atual de bytes enviados.

     'fallback' definido para ‘True’ faz o asyncio manualmente ler e
     enviar o arquivo quando a plataforma não suporta a chamada de
     sistema sendfile (por exemplo Windows ou soquete SSL no Unix).

     Levanta *note SendfileNotAvailableError: 3531. se o sistema não
     suporta a chamada de sistema 'sendfile' e 'fallback' é ‘False’.

     Adicionado na versão 3.7.


File: python.info,  Node: Atualizando TLS,  Next: Observando descritores de arquivo,  Prev: Transferindo arquivos,  Up: Métodos do laço de eventos

5.19.1.59 Atualizando TLS
.........................

 -- Método: async loop.start_tls (transport, protocol, sslcontext, *,
          server_side=False, server_hostname=None,
          ssl_handshake_timeout=None, ssl_shutdown_timeout=None)

     Atualiza um conexão baseada em transporte existente para TLS.

     Create a TLS coder/decoder instance and insert it between the
     'transport' and the 'protocol'.  The coder/decoder implements both
     'transport'-facing protocol and 'protocol'-facing transport.

     Return the created two-interface instance.  After 'await', the
     'protocol' must stop using the original 'transport' and communicate
     with the returned object only because the coder caches
     'protocol'-side data and sporadically exchanges extra TLS session
     packets with 'transport'.

     In some situations (e.g.  when the passed transport is already
     closing) this may return ‘None’.

     Parâmetros:

        * instâncias de 'transport' e 'protocol', que métodos como *note
          create_server(): b25. e *note create_connection(): 603.
          retornam.

        * 'sslcontext': uma instância configurada de *note SSLContext:
          294.

        * 'server_side' informe ‘True’ quando uma conexão no lado do
          servidor estiver sendo atualizada (como a que é criada por
          *note create_server(): b25.).

        * 'server_hostname': define ou substitui o nome do host no qual
          o servidor alvo do certificado será comparado.

        * 'ssl_handshake_timeout' é (para uma conexão TLS) o tempo em
          segundos para aguardar pelo encerramento do aperto de mão TLS,
          antes de abortar a conexão.  ‘60.0’ segundos se for ‘None’
          (valor padrão).

        * 'ssl_shutdown_timeout' is the time in seconds to wait for the
          SSL shutdown to complete before aborting the connection.
          ‘30.0’ seconds if ‘None’ (default).

     Adicionado na versão 3.7.

     Alterado na versão 3.11: Added the 'ssl_shutdown_timeout'
     parameter.


File: python.info,  Node: Observando descritores de arquivo,  Next: Trabalhando com objetos soquete diretamente,  Prev: Atualizando TLS,  Up: Métodos do laço de eventos

5.19.1.60 Observando descritores de arquivo
...........................................

 -- Método: loop.add_reader (fd, callback, *args)

     Começa a monitorar o descritor de arquivo 'fd' para disponibilidade
     de leitura e invoca a 'callback' com os argumentos especificados
     assim que 'fd' esteja disponível para leitura.

     Any preexisting callback registered for 'fd' is cancelled and
     replaced by 'callback'.

 -- Método: loop.remove_reader (fd)

     Stop monitoring the 'fd' file descriptor for read availability.
     Returns ‘True’ if 'fd' was previously being monitored for reads.

 -- Método: loop.add_writer (fd, callback, *args)

     Começa a monitorar o descritor de arquivo 'fd' para disponibilidade
     de escrita e invoca a 'callback' com os argumentos especificados
     assim que 'fd' esteja disponível para escrita.

     Any preexisting callback registered for 'fd' is cancelled and
     replaced by 'callback'.

     Use *note functools.partial(): 414. *note para passar argumentos
     nomeados: 3543. para a 'callback'.

 -- Método: loop.remove_writer (fd)

     Stop monitoring the 'fd' file descriptor for write availability.
     Returns ‘True’ if 'fd' was previously being monitored for writes.

Veja também a seção de *note Suporte a Plataformas: 3559. para algumas
limitações desses métodos.


File: python.info,  Node: Trabalhando com objetos soquete diretamente,  Next: DNS,  Prev: Observando descritores de arquivo,  Up: Métodos do laço de eventos

5.19.1.61 Trabalhando com objetos soquete diretamente
.....................................................

Em geral, implementações de protocolo que usam APIs baseadas em
transporte, tais como *note loop.create_connection(): 603. e *note
loop.create_server(): b25. são mais rápidas que implementações que
trabalham com soquetes diretamente.  Entretanto, existem alguns casos de
uso quando o desempenho não é crítica, e trabalhar com objetos *note
socket: dc9. diretamente é mais conveniente.

 -- Método: async loop.sock_recv (sock, nbytes)

     Recebe até 'nbytes' do 'sock'.  Versão assíncrona de *note
     socket.recv(): dcc.

     Retorna os dados recebidos como um objeto de bytes.

     'sock' deve ser um soquete não bloqueante.

     Alterado na versão 3.7: Apesar deste método sempre ter sido
     documentado como um método de corrotina, versões anteriores ao
     Python 3.7 retornavam um *note Future: be6.  Desde o Python 3.7
     este é um método ‘async def’.

 -- Método: async loop.sock_recv_into (sock, buf)

     Dados recebidos do 'sock' no buffer 'buf'.  Modelado baseado no
     método bloqueante *note socket.recv_into(): 1362.

     Retorna o número de bytes escritos no buffer.

     'sock' deve ser um soquete não bloqueante.

     Adicionado na versão 3.7.

 -- Método: async loop.sock_recvfrom (sock, bufsize)

     Receive a datagram of up to 'bufsize' from 'sock'.  Asynchronous
     version of *note socket.recvfrom(): dcd.

     Return a tuple of (received data, remote address).

     'sock' deve ser um soquete não bloqueante.

     Adicionado na versão 3.11.

 -- Método: async loop.sock_recvfrom_into (sock, buf, nbytes=0)

     Receive a datagram of up to 'nbytes' from 'sock' into 'buf'.
     Asynchronous version of *note socket.recvfrom_into(): 1363.

     Return a tuple of (number of bytes received, remote address).

     'sock' deve ser um soquete não bloqueante.

     Adicionado na versão 3.11.

 -- Método: async loop.sock_sendall (sock, data)

     Envia 'data' para o soquete 'sock'.  Versão assíncrona de *note
     socket.sendall(): dd0.

     Este método continua a enviar para o soquete até que todos os dados
     em 'data' tenham sido enviados ou um erro ocorra.  ‘None’ é
     retornado em caso de sucesso.  Ao ocorrer um erro, uma exceção é
     levantada.  Adicionalmente, não existe nenhuma forma de determinar
     quantos dados, se algum, foram processados com sucesso pelo
     destinatário na conexão.

     'sock' deve ser um soquete não bloqueante.

     Alterado na versão 3.7: Apesar deste método sempre ter sido
     documentado como um método de corrotina, antes do Python 3.7 ele
     retornava um *note Future: be6.  Desde o Python 3.7, este é um
     método ‘async def’.

 -- Método: async loop.sock_sendto (sock, data, address)

     Send a datagram from 'sock' to 'address'.  Asynchronous version of
     *note socket.sendto(): dd1.

     Return the number of bytes sent.

     'sock' deve ser um soquete não bloqueante.

     Adicionado na versão 3.11.

 -- Método: async loop.sock_connect (sock, address)

     Conecta o 'sock' em um endereço 'address' remoto.

     Versão assíncrona de *note socket.connect(): dcb.

     'sock' deve ser um soquete não bloqueante.

     Alterado na versão 3.5.2: ‘address’ não precisa mais ser resolvido.
     ‘sock_connect’ irá tentar verificar se 'address' já está resolvido
     chamando *note socket.inet_pton(): 969.  Se não estiver, *note
     loop.getaddrinfo(): c2e. será usado para resolver 'address'.

     Ver também
     ..........

     *note loop.create_connection(): 603. e *note
     asyncio.open_connection(): b2b.

 -- Método: async loop.sock_accept (sock)

     Aceita uma conexão.  Modelado baseado no método bloqueante *note
     socket.accept(): dca.

     O soquete deve estar vinculado a um endereço e escutando por
     conexões.  O valor de retorno é um par ‘(conn, address)’ onde
     'conn' é um 'novo' objeto de soquete usável para enviar e receber
     dados na conexão, e 'address' é o endereço vinculado ao soquete no
     outro extremo da conexão.

     'sock' deve ser um soquete não bloqueante.

     Alterado na versão 3.7: Apesar deste método sempre ter sido
     documentado como um método de corrotina, antes do Python 3.7 ele
     retornava um *note Future: be6.  Desde o Python 3.7, este é um
     método ‘async def’.

     Ver também
     ..........

     *note loop.create_server(): b25. e *note start_server(): b2c.

 -- Método: async loop.sock_sendfile (sock, file, offset=0, count=None,
          *, fallback=True)

     Envia um arquivo usando *note os.sendfile: b21. de alto desempenho
     se possível.  Retorna o número total de bytes enviados.

     Versão assíncrona de *note socket.sendfile(): e8c.

     'sock' deve ser um *note socket: dc9. *note socket.SOCK_STREAM:
     1337. não bloqueante.

     'file' deve ser um objeto arquivo regular aberto em modo binário.

     'offset' indica a partir de onde deve iniciar a leitura do arquivo.
     Se especificado, 'count' é o número total de bytes para transmitir,
     ao contrário de transmitir o arquivo até que EOF seja atingido.  A
     posição do arquivo é sempre atualizada, mesmo quando este método
     levanta um erro, e *note file.tell(): 13f3. pode ser usado para
     obter o número atual de bytes enviados.

     'fallback', quando definido para ‘True’, faz asyncio ler e enviar
     manualmente o arquivo, quando a plataforma não suporta a chamada de
     sistema sendfile (por exemplo Windows ou soquete SSL no Unix).

     Levanta *note SendfileNotAvailableError: 3531. se o sistema não
     suporta chamadas de sistema 'sendfile' e 'fallback' é ‘False’.

     'sock' deve ser um soquete não bloqueante.

     Adicionado na versão 3.7.


File: python.info,  Node: DNS,  Next: Trabalhando com encadeamentos,  Prev: Trabalhando com objetos soquete diretamente,  Up: Métodos do laço de eventos

5.19.1.62 DNS
.............

 -- Método: async loop.getaddrinfo (host, port, *, family=0, type=0,
          proto=0, flags=0)

     Versão assíncrona de *note socket.getaddrinfo(): 184b.

 -- Método: async loop.getnameinfo (sockaddr, flags=0)

     Versão assíncrona de *note socket.getnameinfo(): 17b6.

     Nota: Both 'getaddrinfo' and 'getnameinfo' internally utilize their
     synchronous versions through the loop’s default thread pool
     executor.  When this executor is saturated, these methods may
     experience delays, which higher-level networking libraries may
     report as increased timeouts.  To mitigate this, consider using a
     custom executor for other user tasks, or setting a default executor
     with a larger number of workers.

Alterado na versão 3.7: Ambos os métodos 'getaddrinfo' e 'getnameinfo'
sempre foram documentados para retornar uma corrotina, mas antes do
Python 3.7 eles estavam, na verdade, retornando objetos *note
asyncio.Future: be6.  A partir do Python 3.7, ambos os métodos são
corrotinas.


File: python.info,  Node: Trabalhando com encadeamentos,  Next: Sinais Unix,  Prev: DNS,  Up: Métodos do laço de eventos

5.19.1.63 Trabalhando com encadeamentos
.......................................

 -- Método: async loop.connect_read_pipe (protocol_factory, pipe)

     Registra o extremo da leitura de um 'pipe' no laço de eventos.

     'protocol_factory' deve ser um chamável que retorne uma
     implementação do *note protocolo asyncio: 3549.

     'pipe' é um *note objeto arquivo ou similar: 1203.

     Retorna um par ‘(transport, protocol)’, onde 'transport' suporta a
     interface *note ReadTransport: 355d. e 'protocol' é um objeto
     instanciado pelo 'protocol_factory'.

     Com o *note SelectorEventLoop: 608. do laço de eventos, o 'pipe' é
     definido para modo não bloqueante.

 -- Método: async loop.connect_write_pipe (protocol_factory, pipe)

     Registra o extremo de escrita do 'pipe' no laço de eventos.

     'protocol_factory' deve ser um chamável que retorne uma
     implementação do *note protocolo asyncio: 3549.

     'pipe' é um *note objeto arquivo ou similar: 1203.

     Retorna um part ‘(transport, protocol)’, onde 'transport' suporta a
     interface *note WriteTransport: 355e. e 'protocol' é um objeto
     instanciado pelo 'protocol_factory'.

     Com o *note SelectorEventLoop: 608. do laço de eventos, o 'pipe' é
     definido para modo não bloqueante.

     Nota: *note SelectorEventLoop: 608. não suporta os métodos acima no
     Windows.  Use *note ProactorEventLoop: 609. ao invés para Windows.

Ver também
..........

Os métodos *note loop.subprocess_exec(): 3501. e *note
loop.subprocess_shell(): 3502.


File: python.info,  Node: Sinais Unix,  Next: Executando código em conjuntos de threads ou processos,  Prev: Trabalhando com encadeamentos,  Up: Métodos do laço de eventos

5.19.1.64 Sinais Unix
.....................

 -- Método: loop.add_signal_handler (signum, callback, *args)

     Define 'callback' como o tratador para o sinal 'signum'.

     A função de retorno será invocada pelo 'loop', juntamente com
     outras funções de retorno enfileiradas e corrotinas executáveis
     daquele laço de eventos.  Ao contrário de tratadores de sinal
     registrados usando *note signal.signal(): 1173, uma função de
     retorno registrada com esta função tem autorização para interagir
     com o laço de eventos.

     Levanta *note ValueError: 202. se o número do sinal é inválido ou
     impossível de capturar.  Levanta *note RuntimeError: 195. se existe
     um problema definindo o tratador.

     Use *note functools.partial(): 414. *note para passar argumentos
     nomeados: 3543. para a 'callback'.

     Assim como *note signal.signal(): 1173, esta função deve ser
     invocada na thread principal.

 -- Método: loop.remove_signal_handler (sig)

     Remove o tratador para o sinal 'sig'.

     Retorna ‘True’ se o tratador de sinal foi removido, ou ‘False’ se
     nenhum tratador foi definido para o sinal fornecido.

     *note Disponibilidade: 1ed8.: Unix.

Ver também
..........

O módulo *note signal: c6.


File: python.info,  Node: Executando código em conjuntos de threads ou processos,  Next: Tratando erros da API,  Prev: Sinais Unix,  Up: Métodos do laço de eventos

5.19.1.65 Executando código em conjuntos de threads ou processos
................................................................

 -- Método: awaitable loop.run_in_executor (executor, func, *args)

     Providencia para a 'func' ser chamada no executor especificado.

     The 'executor' argument should be an *note
     concurrent.futures.Executor: 33c5. instance.  The default executor
     is used if 'executor' is ‘None’.  The default executor can be set
     by *note loop.set_default_executor(): 743, otherwise, a *note
     concurrent.futures.ThreadPoolExecutor: 742. will be
     lazy-initialized and used by *note run_in_executor(): 8ef. if
     needed.

     Exemplo:

          import asyncio
          import concurrent.futures

          def blocking_io():
              # File operations (such as logging) can block the
              # event loop: run them in a thread pool.
              with open('/dev/urandom', 'rb') as f:
                  return f.read(100)

          def cpu_bound():
              # CPU-bound operations will block the event loop:
              # in general it is preferable to run them in a
              # process pool.
              return sum(i * i for i in range(10 ** 7))

          async def main():
              loop = asyncio.get_running_loop()

              ## Options:

              # 1. Run in the default loop's executor:
              result = await loop.run_in_executor(
                  None, blocking_io)
              print('default thread pool', result)

              # 2. Run in a custom thread pool:
              with concurrent.futures.ThreadPoolExecutor() as pool:
                  result = await loop.run_in_executor(
                      pool, blocking_io)
                  print('custom thread pool', result)

              # 3. Run in a custom process pool:
              with concurrent.futures.ProcessPoolExecutor() as pool:
                  result = await loop.run_in_executor(
                      pool, cpu_bound)
                  print('custom process pool', result)

          if __name__ == '__main__':
              asyncio.run(main())

     Note that the entry point guard (‘if __name__ == '__main__'’) is
     required for option 3 due to the peculiarities of *note
     multiprocessing: 94, which is used by *note ProcessPoolExecutor:
     8f4.  See *note Safe importing of main module: 33ae.

     Este método retorna um objeto *note asyncio.Future: be6.

     Use *note functools.partial(): 414. *note para passar argumentos
     nomeados: 3543. para 'func'.

     Alterado na versão 3.5.3: *note loop.run_in_executor(): 8ef. não
     configura mais o atributo ‘max_workers’ do executor do conjunto de
     thread que ele cria, ao invés disso ele deixa para o executor do
     conjunto de thread (*note ThreadPoolExecutor: 742.) para setar o
     valor padrão.

 -- Método: loop.set_default_executor (executor)

     Set 'executor' as the default executor used by *note
     run_in_executor(): 8ef.  'executor' must be an instance of *note
     ThreadPoolExecutor: 742.

     Alterado na versão 3.11: 'executor' must be an instance of *note
     ThreadPoolExecutor: 742.


File: python.info,  Node: Tratando erros da API,  Next: Habilitando o modo de debug,  Prev: Executando código em conjuntos de threads ou processos,  Up: Métodos do laço de eventos

5.19.1.66 Tratando erros da API
...............................

Permite customizar como exceções são tratadas no laço de eventos.

 -- Método: loop.set_exception_handler (handler)

     Define 'handler' como o novo tratador de exceções do laço de
     eventos.

     Se 'handler' for ‘None’, o tratador de exceções padrão será
     definido.  Caso contrário, 'handler' deve ser um chamável com a
     assinatura combinando ‘(loop, context)’, onde ‘loop’ é a referência
     para o laço de eventos ativo, e ‘context’ é um objeto ‘dict’
     contendo os detalhes da exceção (veja a documentação *note
     call_exception_handler(): 3565. para detalhes a respeito do
     contexto).

     If the handler is called on behalf of a *note Task: 1be. or *note
     Handle: 1c1d, it is run in the *note contextvars.Context: 15b7. of
     that task or callback handle.

     Alterado na versão 3.12: The handler may be called in the *note
     Context: 15b7. of the task or handle where the exception
     originated.

 -- Método: loop.get_exception_handler ()

     Retorna o tratador de exceção atual, ou ‘None’ se nenhum tratador
     de exceção customizado foi definido.

     Adicionado na versão 3.5.2.

 -- Método: loop.default_exception_handler (context)

     Tratador de exceção padrão.

     Isso é chamado quando uma exceção ocorre e nenhum tratador de
     exceção foi definido.  Isso pode ser chamado por um tratador de
     exceção customizado que quer passar adiante para o comportamento do
     tratador padrão.

     parâmetro 'context' tem o mesmo significado que em *note
     call_exception_handler(): 3565.

 -- Método: loop.call_exception_handler (context)

     Chama o tratador de exceção do laço de eventos atual.

     'context' é um objeto ‘dict’ contendo as seguintes chaves (novas
     chaves podem ser introduzidas em versões futuras do Python):

        * ‘message’: Mensagem de erro;

        * ‘exception’ (opcional): Objeto Exception;

        * ‘future’ (opcional): instância de *note asyncio.Future: be6.;

        * ‘task’ (opcional): instância de *note asyncio.Task: 1be.;

        * ‘handle’ (opcional): instância de *note asyncio.Handle: 1c1d.;

        * ‘protocol’ (opcional): instância de *note Protocol: 3549.;

        * ‘transport’ (opcional): instância de *note Transport: 354a.;

        * ‘socket’ (opcional): instância de *note socket.socket: dc9.;

        * ‘source_traceback’ (optional): Traceback of the source;

        * ‘handle_traceback’ (optional): Traceback of the handle;

        * 
          ‘asyncgen’ (opcional): Gerador assíncrono que causou

               a exceção.

          Nota: This method should not be overloaded in subclassed event
          loops.  For custom exception handling, use the *note
          set_exception_handler(): 3564. method.


File: python.info,  Node: Habilitando o modo de debug,  Next: Executando subprocessos,  Prev: Tratando erros da API,  Up: Métodos do laço de eventos

5.19.1.67 Habilitando o modo de debug
.....................................

 -- Método: loop.get_debug ()

     Obtém o modo de debug (*note bool: 468.) do laço de eventos.

     O valor padrão é ‘True’ se a variável de ambiente *note
     PYTHONASYNCIODEBUG: 1ed2. estiver definida para uma string não
     vazia, ‘False’ caso contrário.

 -- Método: loop.set_debug (enabled: bool)

     Define o modo de debug do laço de eventos.

     Alterado na versão 3.7: O novo *note Modo de Desenvolvimento do
     Python: 1f8. agora também pode ser usado para habilitar o modo de
     debug.

 -- Atributo: loop.slow_callback_duration

     This attribute can be used to set the minimum execution duration in
     seconds that is considered “slow”.  When debug mode is enabled,
     “slow” callbacks are logged.

     Default value is 100 milliseconds.

Ver também
..........

O *note modo de debug de asyncio: 1ed3.


File: python.info,  Node: Executando subprocessos,  Prev: Habilitando o modo de debug,  Up: Métodos do laço de eventos

5.19.1.68 Executando subprocessos
.................................

Métodos descritos nestas sub-seções são de baixo nível.  Em código
async/await regular, considere usar as funções convenientes de alto
nível *note asyncio.create_subprocess_shell(): a82. e *note
asyncio.create_subprocess_exec(): a81. ao invés.

     Nota: No Windows, o laço de eventos padrão *note ProactorEventLoop:
     609. oferece suporte pra subprocessos, enquanto *note
     SelectorEventLoop: 608, não.  Veja *note Suporte para subprocessos
     no Windows: 3503. para detalhes.

 -- Método: async loop.subprocess_exec (protocol_factory, *args,
          stdin=subprocess.PIPE, stdout=subprocess.PIPE,
          stderr=subprocess.PIPE, **kwargs)

     Cria um subprocesso a partir de um ou mais argumentos de string
     especificados por 'args'.

     'args' deve ser uma lista de strings representada por:

        * *note str: 44c.;

        * ou *note bytes: 1c2, encodados na *note codificação do sistema
          de arquivos: 2970.

     A primeira string especifica o programa executável, e as strings
     remanescentes especificam os argumentos.  Juntas, argumentos em
     string formam o ‘argv’ do programa.

     Isto é similar a classe *note subprocess.Popen: 199. da biblioteca
     padrão ser chamada com ‘shell=False’ e a lista de strings ser
     passada como o primeiro argumento; entretanto, onde *note Popen:
     199. recebe apenas um argumento no qual é uma lista de strings,
     'subprocess_exec' recebe múltiplos argumentos string.

     O 'protocol_factory' deve ser um chamável que retorne uma subclasse
     da classe *note asyncio.SubprocessProtocol: 356a.

     Outros parâmetros:

        * 'stdin' pode ser qualquer um destes:

             * a file-like object

             * an existing file descriptor (a positive integer), for
               example those created with *note os.pipe(): 18ef.

             * a constante *note subprocess.PIPE: b9f. (padrão), a qual
               criará um novo encadeamento e conectar a ele,

             * o valor ‘None’, o qual fará o subprocesso herdar o
               descritor de arquivo deste processo

             * a constante *note subprocess.DEVNULL: 118d, a qual indica
               que o arquivo especial *note os.devnull: 1bab. será usado

        * 'stdout' pode ser qualquer um destes:

             * a file-like object

             * a constante *note subprocess.PIPE: b9f. (padrão), a qual
               criará um novo encadeamento e conectar a ele,

             * o valor ‘None’, o qual fará o subprocesso herdar o
               descritor de arquivo deste processo

             * a constante *note subprocess.DEVNULL: 118d, a qual indica
               que o arquivo especial *note os.devnull: 1bab. será usado

        * 'stderr' pode ser qualquer um destes:

             * a file-like object

             * a constante *note subprocess.PIPE: b9f. (padrão), a qual
               criará um novo encadeamento e conectar a ele,

             * o valor ‘None’, o qual fará o subprocesso herdar o
               descritor de arquivo deste processo

             * a constante *note subprocess.DEVNULL: 118d, a qual indica
               que o arquivo especial *note os.devnull: 1bab. será usado

             * a constante *note subprocess.STDOUT: 33e5, a qual irá
               conectar o stream de erro padrão ao stream de saída
               padrão do processo

        * Todos os outros argumentos nomeados são passados para *note
          subprocess.Popen: 199. sem interpretação, exceto 'bufsize',
          'universal_newlines', 'shell', 'text', 'encoding' e 'errors',
          os quais não devem ser especificados de forma alguma.

          A API de subprocesso ‘asyncio’ não suporta decodificar os
          streams como texto.  *note bytes.decode(): 8dc. pode ser usado
          para converter os bytes retornados do stream para texto.

     If a file-like object passed as 'stdin', 'stdout' or 'stderr'
     represents a pipe, then the other side of this pipe should be
     registered with *note connect_write_pipe(): 3505. or *note
     connect_read_pipe(): 3504. for use with the event loop.

     Veja o construtor da classe *note subprocess.Popen: 199. para
     documentação sobre outros argumentos.

     Retorna um par ‘(transport, protocol)’, onde 'transport' conforma
     com a classe base *note asyncio.SubprocessTransport: 356b. e
     'protocol' é um objeto instanciado pelo 'protocol_factory'.

     If the transport is closed or is garbage collected, the child
     process is killed if it is still running.

 -- Método: async loop.subprocess_shell (protocol_factory, cmd, *,
          stdin=subprocess.PIPE, stdout=subprocess.PIPE,
          stderr=subprocess.PIPE, **kwargs)

     Cria um subprocesso a partir do 'cmd', o qual pode ser um *note
     str: 44c. ou uma string de *note bytes: 1c2. codificada na *note
     codificação do sistema de arquivos: 2970, usando a sintaxe “shell”
     da plataforma.

     Isto é similar a classe *note subprocess.Popen: 199. da biblioteca
     padrão sendo chamada com ‘shell=True’.

     O argumento 'protocol_factory' deve ser um chamável que retorna uma
     subclasse da classe *note SubprocessProtocol: 356a.

     Veja *note subprocess_exec(): 3501. para mais detalhes sobre os
     argumentos remanescentes.

     Retorna um par ‘(transport, protocol)’, onde 'transport' conforma
     com a classe base *note SubprocessTransport: 356b. e 'protocol' é
     um objeto instanciado pelo 'protocol_factory'.

     If the transport is closed or is garbage collected, the child
     process is killed if it is still running.

     Nota: É responsabilidade da aplicação garantir que todos os espaços
     em branco e caracteres especiais sejam tratados apropriadamente
     para evitar vulnerabilidades de injeção shell(1) .  A função *note
     shlex.quote(): 27d. pode ser usada para escapar espaços em branco e
     caracteres especiais apropriadamente em strings que serão usadas
     para construir comandos shell.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Shell_injection#Shell_injection


File: python.info,  Node: Tratadores de função de retorno,  Next: Objetos Server,  Prev: Métodos do laço de eventos,  Up: Laço de eventos

5.19.1.69 Tratadores de função de retorno
.........................................

 -- Classe: asyncio.Handle

     Um objeto invólucro de função de retorno retornado por *note
     loop.call_soon(): b17, *note loop.call_soon_threadsafe(): b18.

      -- Método: get_context ()

          Return the *note contextvars.Context: 15b7. object associated
          with the handle.

          Adicionado na versão 3.12.

      -- Método: cancel ()

          Cancela a função de retorno.  Se a função de retorno já tiver
          sido cancelada ou executada, este método não tem efeito.

      -- Método: cancelled ()

          Retorna ‘True’ se a função de retorno foi cancelada.

          Adicionado na versão 3.7.

 -- Classe: asyncio.TimerHandle

     Um objeto invólucro de função de retorno retornado por *note
     loop.call_later(): b29, e *note loop.call_at(): b19.

     Esta classe é uma subclasse de *note Handle: 1c1d.

      -- Método: when ()

          Retorna o tempo de uma função de retorno agendada como *note
          float: 2f7. segundos.

          O tempo é um timestamp absoluto, usando a mesma referência de
          tempo que *note loop.time(): 3546.

          Adicionado na versão 3.7.


File: python.info,  Node: Objetos Server,  Next: Implementações do laço de eventos,  Prev: Tratadores de função de retorno,  Up: Laço de eventos

5.19.1.70 Objetos Server
........................

Objetos Server são criados pelas funções *note loop.create_server():
b25, *note loop.create_unix_server(): 1ae, *note start_server(): b2c, e
*note start_unix_server(): 34be.

Do not instantiate the *note Server: b24. class directly.

 -- Classe: asyncio.Server

     Objetos 'Server' são gerenciadores de contexto assíncronos.  Quando
     usados em uma instrução ‘async with’, é garantido que o objeto
     Server está fechado e não está aceitando novas conexões quando a
     instrução ‘async with’ estiver completa:

          srv = await loop.create_server(...)

          async with srv:
              # algum código

          # Neste ponto, srv é fechado e não mais aceita novas conexões.

     Alterado na versão 3.7: Objeto Server é um gerenciador de contexto
     assíncrono desde o Python 3.7.

     Alterado na versão 3.11: This class was exposed publicly as
     ‘asyncio.Server’ in Python 3.9.11, 3.10.3 and 3.11.

      -- Método: close ()

          Para de servir: fecha soquetes que estavam ouvindo e define o
          atributo *note sockets: c30. para ‘None’.

          Os soquetes que representam conexões de clientes existentes
          que estão chegando são deixados em aberto.

          The server is closed asynchronously; use the *note
          wait_closed(): 17bc. coroutine to wait until the server is
          closed (and no more connections are active).

      -- Método: close_clients ()

          Close all existing incoming client connections.

          Calls *note close(): 354d. on all associated transports.

          *note close(): 34bb. should be called before *note
          close_clients(): 1b2. when closing the server to avoid races
          with new clients connecting.

          Adicionado na versão 3.13.

      -- Método: abort_clients ()

          Close all existing incoming client connections immediately,
          without waiting for pending operations to complete.

          Calls *note abort(): 356e. on all associated transports.

          *note close(): 34bb. should be called before *note
          abort_clients(): 1b3. when closing the server to avoid races
          with new clients connecting.

          Adicionado na versão 3.13.

      -- Método: get_loop ()

          Retorna o laço de eventos associado com o objeto server.

          Adicionado na versão 3.7.

      -- Método: async start_serving ()

          Começa a aceitar conexões.

          This method is idempotent, so it can be called when the server
          is already serving.

          O parâmetro somente-nomeado 'start_serving' para *note
          loop.create_server(): b25. e *note asyncio.start_server():
          b2c. permite criar um objeto Server que não está aceitando
          conexões inicialmente.  Neste caso ‘Server.start_serving()’,
          ou *note Server.serve_forever(): b27. podem ser usados para
          fazer o Server começar a aceitar conexões.

          Adicionado na versão 3.7.

      -- Método: async serve_forever ()

          Começa a aceitar conexões até que a corrotina seja cancelada.
          Cancelamento da task ‘serve_forever’ causa o fechamento do
          servidor.

          Este método pode ser chamado se o servidor já estiver
          aceitando conexões.  Apenas uma task ‘serve_forever’ pode
          existir para cada objeto 'Server'.

          Exemplo:

               async def client_connected(reader, writer):
                   # Communicate with the client with
                   # reader/writer streams.  For example:
                   await reader.readline()

               async def main(host, port):
                   srv = await asyncio.start_server(
                       client_connected, host, port)
                   await srv.serve_forever()

               asyncio.run(main('127.0.0.1', 0))

          Adicionado na versão 3.7.

      -- Método: is_serving ()

          Retorna ‘True’ se o servidor estiver aceitando novas conexões.

          Adicionado na versão 3.7.

      -- Método: async wait_closed ()

          Wait until the *note close(): 34bb. method completes and all
          active connections have finished.

      -- Atributo: sockets

          List of socket-like objects, ‘asyncio.trsock.TransportSocket’,
          which the server is listening on.

          Alterado na versão 3.7: Antes do Python 3.7 ‘Server.sockets’
          era usado para retornar uma lista interna de soquetes do
          server diretamente.  No uma cópia dessa lista é retornada.


File: python.info,  Node: Implementações do laço de eventos,  Next: Exemplos<18>,  Prev: Objetos Server,  Up: Laço de eventos

5.19.1.71 Implementações do laço de eventos
...........................................

asyncio vem com duas implementações de laço de eventos diferente: *note
SelectorEventLoop: 608. e *note ProactorEventLoop: 609.

By default asyncio is configured to use *note EventLoop: 17e9.

 -- Classe: asyncio.SelectorEventLoop

     A subclass of *note AbstractEventLoop: 966. based on the *note
     selectors: c2. module.

     Usa o 'seletor' mais eficiente disponível para a plataforma
     fornecida.  Também é possível configurar manualmente a
     implementação exata do seletor a ser utilizada:

          import asyncio
          import selectors

          class MyPolicy(asyncio.DefaultEventLoopPolicy):
             def new_event_loop(self):
                selector = selectors.SelectSelector()
                return asyncio.SelectorEventLoop(selector)

          asyncio.set_event_loop_policy(MyPolicy())

     *note Disponibilidade: 1ed8.: Unix, Windows.

 -- Classe: asyncio.ProactorEventLoop

     A subclass of *note AbstractEventLoop: 966. for Windows that uses
     “I/O Completion Ports” (IOCP).

     *note Disponibilidade: 1ed8.: Windows.

     Ver também
     ..........

     MSDN documentation on I/O Completion Ports(1).

 -- Classe: asyncio.EventLoop

          An alias to the most efficient available subclass of *note
          AbstractEventLoop: 966. for the given platform.

          It is an alias to *note SelectorEventLoop: 608. on Unix and
          *note ProactorEventLoop: 609. on Windows.

     Adicionado na versão 3.13.

 -- Classe: asyncio.AbstractEventLoop

     Classe base abstrata para laços de eventos compatíveis com asyncio.

     The *note Métodos do laço de eventos: 353d. section lists all
     methods that an alternative implementation of ‘AbstractEventLoop’
     should have defined.

   ---------- Footnotes ----------

   (1) 
https://learn.microsoft.com/windows/win32/fileio/i-o-completion-ports


File: python.info,  Node: Exemplos<18>,  Prev: Implementações do laço de eventos,  Up: Laço de eventos

5.19.1.72 Exemplos
..................

Perceba que todos os exemplos nesta seção 'propositalmente' mostram como
usar as APIs de baixo nível do laço de eventos, tais como *note
loop.run_forever(): 353f. e *note loop.call_soon(): b17.  Aplicações
asyncio modernas raramente precisam ser escritas desta forma; considere
usar as funções de alto nível como *note asyncio.run(): 47c.

* Menu:

* Hello World com call_soon(): Hello World com call_soon.
* Exibe a data atual com call_later(): Exibe a data atual com call_later.
* Observa um descritor de arquivo por eventos de leitura::
* Define tratadores de sinais para SIGINT e SIGTERM::


File: python.info,  Node: Hello World com call_soon,  Next: Exibe a data atual com call_later,  Up: Exemplos<18>

5.19.1.73 Hello World com call_soon()
.....................................

Um exemplo usando o método *note loop.call_soon(): b17. para agendar uma
função de retorno.  A função de retorno exibe ‘"Hello World"’ e então
para o laço de eventos:

     import asyncio

     def hello_world(loop):
         """A callback to print 'Hello World' and stop the event loop"""
         print('Hello World')
         loop.stop()

     loop = asyncio.new_event_loop()

     # Schedule a call to hello_world()
     loop.call_soon(hello_world, loop)

     # Blocking call interrupted by loop.stop()
     try:
         loop.run_forever()
     finally:
         loop.close()

Ver também
..........

Um exemplo similar a *note Hello World: 3476. criado com uma corrotina e
a função *note run(): 47c.


File: python.info,  Node: Exibe a data atual com call_later,  Next: Observa um descritor de arquivo por eventos de leitura,  Prev: Hello World com call_soon,  Up: Exemplos<18>

5.19.1.74 Exibe a data atual com call_later()
.............................................

Um exemplo de uma função de retorno mostrando a data atual a cada
segundo.  A função de retorno usa o método *note loop.call_later(): b29.
para reagendar a si mesma depois de 5 segundos, e então para o laço de
eventos:

     import asyncio
     import datetime

     def display_date(end_time, loop):
         print(datetime.datetime.now())
         if (loop.time() + 1.0) < end_time:
             loop.call_later(1, display_date, end_time, loop)
         else:
             loop.stop()

     loop = asyncio.new_event_loop()

     # Schedule the first call to display_date()
     end_time = loop.time() + 5.0
     loop.call_soon(display_date, end_time, loop)

     # Blocking call interrupted by loop.stop()
     try:
         loop.run_forever()
     finally:
         loop.close()

Ver também
..........

Um exemplo similar a *note data atual: 3495. criado com uma corrotina e
a função *note run(): 47c.


File: python.info,  Node: Observa um descritor de arquivo por eventos de leitura,  Next: Define tratadores de sinais para SIGINT e SIGTERM,  Prev: Exibe a data atual com call_later,  Up: Exemplos<18>

5.19.1.75 Observa um descritor de arquivo por eventos de leitura
................................................................

Aguarda até que um descritor de arquivo tenha recebido alguns dados
usando o método *note loop.add_reader(): 34d8. e então fecha o laço de
eventos:

     import asyncio
     from socket import socketpair

     # Create a pair of connected file descriptors
     rsock, wsock = socketpair()

     loop = asyncio.new_event_loop()

     def reader():
         data = rsock.recv(100)
         print("Received:", data.decode())

         # We are done: unregister the file descriptor
         loop.remove_reader(rsock)

         # Stop the event loop
         loop.stop()

     # Register the file descriptor for read event
     loop.add_reader(rsock, reader)

     # Simulate the reception of data from the network
     loop.call_soon(wsock.send, 'abc'.encode())

     try:
         # Run the event loop
         loop.run_forever()
     finally:
         # We are done. Close sockets and the event loop.
         rsock.close()
         wsock.close()
         loop.close()

Ver também
..........

   * Um *note exemplo: 34d6. similar usando transportes, protocolos, e o
     método *note loop.create_connection(): 603.

   * Outro *note exemplo: 34d4. similar usando a função de alto nível
     *note asyncio.open_connection(): b2b. e streams.


File: python.info,  Node: Define tratadores de sinais para SIGINT e SIGTERM,  Prev: Observa um descritor de arquivo por eventos de leitura,  Up: Exemplos<18>

5.19.1.76 Define tratadores de sinais para SIGINT e SIGTERM
...........................................................

(Este exemplo de ‘signals’ apenas funciona no Unix.)

Register handlers for signals *note SIGINT: 847. and *note SIGTERM:
1426. using the *note loop.add_signal_handler(): 3560. method:

     import asyncio
     import functools
     import os
     import signal

     def ask_exit(signame, loop):
         print("got signal %s: exit" % signame)
         loop.stop()

     async def main():
         loop = asyncio.get_running_loop()

         for signame in {'SIGINT', 'SIGTERM'}:
             loop.add_signal_handler(
                 getattr(signal, signame),
                 functools.partial(ask_exit, signame, loop))

         await asyncio.sleep(3600)

     print("Event loop running for 1 hour, press Ctrl+C to interrupt.")
     print(f"pid {os.getpid()}: send SIGINT or SIGTERM to exit.")

     asyncio.run(main())


File: python.info,  Node: Futuros,  Next: Transports e Protocols,  Prev: Laço de eventos,  Up: asyncio — E/S assíncrona

5.19.1.77 Futuros
.................

'Código-fonte:' Lib/asyncio/futures.py(1),
Lib/asyncio/base_futures.py(2)

__________________________________________________________________

Objetos 'Future' são usados para fazer a ponte entre 'código baseado em
funções de retorno (callback) de baixo nível' e código async/await de
alto nível.

* Menu:

* Funções Future::
* Objeto Future::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/asyncio/futures.py

   (2) 
https://github.com/python/cpython/tree/3.13/Lib/asyncio/base_futures.py


File: python.info,  Node: Funções Future,  Next: Objeto Future,  Up: Futuros

5.19.1.78 Funções Future
........................

 -- Função: asyncio.isfuture (obj)

     Return ‘True’ if 'obj' is either of:

        * an instance of *note asyncio.Future: be6,

        * an instance of *note asyncio.Task: 1be,

        * a Future-like object with a ‘_asyncio_future_blocking’
          attribute.

     Adicionado na versão 3.5.

 -- Função: asyncio.ensure_future (obj, *, loop=None)

     Retorna:

        * 'obj' argument as is, if 'obj' is a *note Future: be6, a *note
          Task: 1be, or a Future-like object (*note isfuture(): 357b. is
          used for the test.)

        * a *note Task: 1be. object wrapping 'obj', if 'obj' is a
          coroutine (*note iscoroutine(): 47e. is used for the test); in
          this case the coroutine will be scheduled by
          ‘ensure_future()’.

        * a *note Task: 1be. object that would await on 'obj', if 'obj'
          is an awaitable (*note inspect.isawaitable(): e43. is used for
          the test.)

     If 'obj' is neither of the above a *note TypeError: 2c3. is raised.

          Importante: See also the *note create_task(): 1bf. function
          which is the preferred way for creating new Tasks.

          Save a reference to the result of this function, to avoid a
          task disappearing mid-execution.

     Alterado na versão 3.5.1: The function accepts any *note awaitable:
     1ad. object.

     Descontinuado desde a versão 3.10: Deprecation warning is emitted
     if 'obj' is not a Future-like object and 'loop' is not specified
     and there is no running event loop.

 -- Função: asyncio.wrap_future (future, *, loop=None)

     Wrap a *note concurrent.futures.Future: 11f1. object in a *note
     asyncio.Future: be6. object.

     Descontinuado desde a versão 3.10: Deprecation warning is emitted
     if 'future' is not a Future-like object and 'loop' is not specified
     and there is no running event loop.


File: python.info,  Node: Objeto Future,  Prev: Funções Future,  Up: Futuros

5.19.1.79 Objeto Future
.......................

 -- Classe: asyncio.Future (*, loop=None)

     Um Future representa um resultado eventual de uma operação
     assíncrona.  Não é seguro para thread.

     Future é um objeto *note aguardável: 1ad.  Corrotinas podem
     aguardar o objeto Future até que ele tenha um resultado ou um
     conjunto de exceções, ou até que seja cancelado.  Um Future pode
     ser aguardado várias vezes e o resultado é sempre o mesmo.

     Normalmente, objetos Future são usados para permitir que o código
     baseado em funções de retorno de baixo nível (por exemplo, em
     protocolos implementados usando *note transportes: 347e. asyncio)
     interopere com o código async/await de alto nível.

     A regra geral é nunca expor o objeto Future em API voltada para o
     usuário, e a maneira recomendada de criar um objeto Future objeto
     chamar *note loop.create_future(): c95.  Dessa forma, as
     implementações de laços de eventos alternativos podem injetar suas
     próprias versões otimizadas de um objeto Future.

     Alterado na versão 3.7: Adicionado suporte ao módulo *note
     contextvars: 24.

     Descontinuado desde a versão 3.10: Aviso de descontinuidade é
     emitido se 'loop' não for especificado e não existir nenhum laço de
     eventos em execução.

      -- Método: result ()

          Return the result of the Future.

          If the Future is 'done' and has a result set by the *note
          set_result(): 34ab. method, the result value is returned.

          If the Future is 'done' and has an exception set by the *note
          set_exception(): c99. method, this method raises the
          exception.

          Se o futuro foi 'cancelled', este método levanta uma exceção
          *note CancelledError: 1b8.

          If the Future’s result isn’t yet available, this method raises
          an *note InvalidStateError: 34ae. exception.

      -- Método: set_result (result)

          Mark the Future as 'done' and set its result.

          Raises an *note InvalidStateError: 34ae. error if the Future
          is already 'done'.

      -- Método: set_exception (exception)

          Mark the Future as 'done' and set an exception.

          Raises an *note InvalidStateError: 34ae. error if the Future
          is already 'done'.

      -- Método: done ()

          Return ‘True’ if the Future is 'done'.

          A Future is 'done' if it was 'cancelled' or if it has a result
          or an exception set with *note set_result(): 34ab. or *note
          set_exception(): c99. calls.

      -- Método: cancelled ()

          Return ‘True’ if the Future was 'cancelled'.

          The method is usually used to check if a Future is not
          'cancelled' before setting a result or an exception for it:

               if not fut.cancelled():
                   fut.set_result(42)

      -- Método: add_done_callback (callback, *, context=None)

          Add a callback to be run when the Future is 'done'.

          The 'callback' is called with the Future object as its only
          argument.

          If the Future is already 'done' when this method is called,
          the callback is scheduled with *note loop.call_soon(): b17.

          Um argumento opcional somente-nomeado 'context' permite
          especificar um *note contextvars.Context: 15b7. customizado
          para executar na 'função de retorno'.  O contexto atual é
          usado quando nenhum 'context' é fornecido.

          *note functools.partial(): 414. can be used to pass parameters
          to the callback, e.g.:

               # Call 'print("Future:", fut)' when "fut" is done.
               fut.add_done_callback(
                   functools.partial(print, "Future:"))

          Alterado na versão 3.7: O parâmetro somente-nomeado 'context'
          foi adicionado.  Veja PEP 567(1) para mais detalhes.

      -- Método: remove_done_callback (callback)

          Remove 'callback' da lista de funções de retorno.

          Returns the number of callbacks removed, which is typically 1,
          unless a callback was added more than once.

      -- Método: cancel (msg=None)

          Cancel the Future and schedule callbacks.

          If the Future is already 'done' or 'cancelled', return
          ‘False’.  Otherwise, change the Future’s state to 'cancelled',
          schedule the callbacks, and return ‘True’.

          Alterado na versão 3.9: Adicionado o parâmetro 'msg'.

      -- Método: exception ()

          Return the exception that was set on this Future.

          The exception (or ‘None’ if no exception was set) is returned
          only if the Future is 'done'.

          Se o futuro foi 'cancelled', este método levanta uma exceção
          *note CancelledError: 1b8.

          If the Future isn’t 'done' yet, this method raises an *note
          InvalidStateError: 34ae. exception.

      -- Método: get_loop ()

          Return the event loop the Future object is bound to.

          Adicionado na versão 3.7.

This example creates a Future object, creates and schedules an
asynchronous Task to set result for the Future, and waits until the
Future has a result:

     async def set_after(fut, delay, value):
         # Sleep for *delay* seconds.
         await asyncio.sleep(delay)

         # Set *value* as a result of *fut* Future.
         fut.set_result(value)

     async def main():
         # Get the current event loop.
         loop = asyncio.get_running_loop()

         # Create a new Future object.
         fut = loop.create_future()

         # Run "set_after()" coroutine in a parallel Task.
         # We are using the low-level "loop.create_task()" API here because
         # we already have a reference to the event loop at hand.
         # Otherwise we could have just used "asyncio.create_task()".
         loop.create_task(
             set_after(fut, 1, '... world'))

         print('hello ...')

         # Wait until *fut* has a result (1 second) and print it.
         print(await fut)

     asyncio.run(main())

     Importante: The Future object was designed to mimic *note
     concurrent.futures.Future: 11f1.  Key differences include:

        - unlike asyncio Futures, *note concurrent.futures.Future: 11f1.
          instances cannot be awaited.

        - *note asyncio.Future.result(): 357e. and *note
          asyncio.Future.exception(): 3581. do not accept the 'timeout'
          argument.

        - *note asyncio.Future.result(): 357e. and *note
          asyncio.Future.exception(): 3581. raise an *note
          InvalidStateError: 34ae. exception when the Future is not
          'done'.

        - Callbacks registered with *note
          asyncio.Future.add_done_callback(): b1a. are not called
          immediately.  They are scheduled with *note loop.call_soon():
          b17. instead.

        - asyncio Future is not compatible with the *note
          concurrent.futures.wait(): 198e. and *note
          concurrent.futures.as_completed(): 173e. functions.

        - *note asyncio.Future.cancel(): 1934. accepts an optional ‘msg’
          argument, but *note concurrent.futures.Future.cancel(): 33cf.
          does not.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0567/


File: python.info,  Node: Transports e Protocols,  Next: Políticas,  Prev: Futuros,  Up: asyncio — E/S assíncrona

5.19.1.80 Transports e Protocols
................................

Prefácio
........

Transports and Protocols are used by the 'low-level' event loop APIs
such as *note loop.create_connection(): 603.  They use callback-based
programming style and enable high-performance implementations of network
or IPC protocols (e.g.  HTTP).

Essentially, transports and protocols should only be used in libraries
and frameworks and never in high-level asyncio applications.

This documentation page covers both *note Transports: 3586. and *note
Protocols: 3587.

Introdução
..........

At the highest level, the transport is concerned with 'how' bytes are
transmitted, while the protocol determines 'which' bytes to transmit
(and to some extent when).

A different way of saying the same thing: a transport is an abstraction
for a socket (or similar I/O endpoint) while a protocol is an
abstraction for an application, from the transport’s point of view.

Yet another view is the transport and protocol interfaces together
define an abstract interface for using network I/O and interprocess I/O.

There is always a 1:1 relationship between transport and protocol
objects: the protocol calls transport methods to send data, while the
transport calls protocol methods to pass it data that has been received.

Most of connection oriented event loop methods (such as *note
loop.create_connection(): 603.) usually accept a 'protocol_factory'
argument used to create a 'Protocol' object for an accepted connection,
represented by a 'Transport' object.  Such methods usually return a
tuple of ‘(transport, protocol)’.

Conteúdo
........

Esta página de documentação contém as seguintes seções:

   * The *note Transports: 3586. section documents asyncio *note
     BaseTransport: 3588, *note ReadTransport: 355d, *note
     WriteTransport: 355e, *note Transport: 3589, *note
     DatagramTransport: 18af, and *note SubprocessTransport: 356b.
     classes.

   * The *note Protocols: 3587. section documents asyncio *note
     BaseProtocol: 358a, *note Protocol: 358b, *note BufferedProtocol:
     aac, *note DatagramProtocol: 6cf, and *note SubprocessProtocol:
     356a. classes.

   * The *note Examples: 358c. section showcases how to work with
     transports, protocols, and low-level event loop APIs.

* Menu:

* Transportes::
* Protocolos::
* Exemplos: Exemplos<19>.


File: python.info,  Node: Transportes,  Next: Protocolos,  Up: Transports e Protocols

5.19.1.81 Transportes
.....................

'Source code:' Lib/asyncio/transports.py(1)

__________________________________________________________________

Transports are classes provided by *note asyncio: a. in order to
abstract various kinds of communication channels.

Transport objects are always instantiated by an *note asyncio event
loop: d9e.

asyncio implements transports for TCP, UDP, SSL, and subprocess pipes.
The methods available on a transport depend on the transport’s kind.

The transport classes are *note not thread safe: 34a6.

* Menu:

* Transports Hierarchy::
* Base Transport::
* Read-only Transports::
* Write-only Transports::
* Transportes de datagrama::
* Transportes de Subprocesso::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/asyncio/transports.py


File: python.info,  Node: Transports Hierarchy,  Next: Base Transport,  Up: Transportes

5.19.1.82 Transports Hierarchy
..............................

 -- Classe: asyncio.BaseTransport

     Base class for all transports.  Contains methods that all asyncio
     transports share.

 -- Classe: asyncio.WriteTransport (BaseTransport)

     A base transport for write-only connections.

     Instances of the 'WriteTransport' class are returned from the *note
     loop.connect_write_pipe(): 3505. event loop method and are also
     used by subprocess-related methods like *note
     loop.subprocess_exec(): 3501.

 -- Classe: asyncio.ReadTransport (BaseTransport)

     A base transport for read-only connections.

     Instances of the 'ReadTransport' class are returned from the *note
     loop.connect_read_pipe(): 3504. event loop method and are also used
     by subprocess-related methods like *note loop.subprocess_exec():
     3501.

 -- Classe: asyncio.Transport (WriteTransport, ReadTransport)

     Interface representing a bidirectional transport, such as a TCP
     connection.

     The user does not instantiate a transport directly; they call a
     utility function, passing it a protocol factory and other
     information necessary to create the transport and protocol.

     Instances of the 'Transport' class are returned from or used by
     event loop methods like *note loop.create_connection(): 603, *note
     loop.create_unix_connection(): 34bd, *note loop.create_server():
     b25, *note loop.sendfile(): 3553, etc.

 -- Classe: asyncio.DatagramTransport (BaseTransport)

     A transport for datagram (UDP) connections.

     Instances of the 'DatagramTransport' class are returned from the
     *note loop.create_datagram_endpoint(): 733. event loop method.

 -- Classe: asyncio.SubprocessTransport (BaseTransport)

     An abstraction to represent a connection between a parent and its
     child OS process.

     Instances of the 'SubprocessTransport' class are returned from
     event loop methods *note loop.subprocess_shell(): 3502. and *note
     loop.subprocess_exec(): 3501.


File: python.info,  Node: Base Transport,  Next: Read-only Transports,  Prev: Transports Hierarchy,  Up: Transportes

5.19.1.83 Base Transport
........................

 -- Método: BaseTransport.close ()

     Fecha o transporte.

     If the transport has a buffer for outgoing data, buffered data will
     be flushed asynchronously.  No more data will be received.  After
     all buffered data is flushed, the protocol’s *note
     protocol.connection_lost(): 358f. method will be called with *note
     None: 675. as its argument.  The transport should not be used once
     it is closed.

 -- Método: BaseTransport.is_closing ()

     Retorna ‘True’ se o transporte estiver fechando ou estiver fechado.

 -- Método: BaseTransport.get_extra_info (name, default=None)

     Return information about the transport or underlying resources it
     uses.

     'name' is a string representing the piece of transport-specific
     information to get.

     'default' is the value to return if the information is not
     available, or if the transport does not support querying it with
     the given third-party event loop implementation or on the current
     platform.

     For example, the following code attempts to get the underlying
     socket object of the transport:

          sock = transport.get_extra_info('socket')
          if sock is not None:
              print(sock.getsockopt(...))

     Categories of information that can be queried on some transports:

        * socket:

             - ‘'peername'’: the remote address to which the socket is
               connected, result of *note socket.socket.getpeername():
               3590. (‘None’ on error)

             - ‘'socket'’: *note socket.socket: dc9. instance

             - ‘'sockname'’: the socket’s own address, result of *note
               socket.socket.getsockname(): 3591.

        * SSL socket:

             - ‘'compression'’: the compression algorithm being used as
               a string, or ‘None’ if the connection isn’t compressed;
               result of *note ssl.SSLSocket.compression(): 1184.

             - ‘'cipher'’: a three-value tuple containing the name of
               the cipher being used, the version of the SSL protocol
               that defines its use, and the number of secret bits being
               used; result of *note ssl.SSLSocket.cipher(): 3592.

             - ‘'peercert'’: peer certificate; result of *note
               ssl.SSLSocket.getpeercert(): fec.

             - ‘'sslcontext'’: *note ssl.SSLContext: 294. instance

             - ‘'ssl_object'’: *note ssl.SSLObject: b99. or *note
               ssl.SSLSocket: 8f0. instance

        * pipe:

             - ‘'pipe'’: pipe object

        * subprocess:

             - ‘'subprocess'’: *note subprocess.Popen: 199. instance

 -- Método: BaseTransport.set_protocol (protocol)

     Define um novo protocolo.

     Switching protocol should only be done when both protocols are
     documented to support the switch.

 -- Método: BaseTransport.get_protocol ()

     Retorna o protocolo atual.


File: python.info,  Node: Read-only Transports,  Next: Write-only Transports,  Prev: Base Transport,  Up: Transportes

5.19.1.84 Read-only Transports
..............................

 -- Método: ReadTransport.is_reading ()

     Return ‘True’ if the transport is receiving new data.

     Adicionado na versão 3.7.

 -- Método: ReadTransport.pause_reading ()

     Pause the receiving end of the transport.  No data will be passed
     to the protocol’s *note protocol.data_received(): 188a. method
     until *note resume_reading(): b2f. is called.

     Alterado na versão 3.7: The method is idempotent, i.e.  it can be
     called when the transport is already paused or closed.

 -- Método: ReadTransport.resume_reading ()

     Resume the receiving end.  The protocol’s *note
     protocol.data_received(): 188a. method will be called once again if
     some data is available for reading.

     Alterado na versão 3.7: The method is idempotent, i.e.  it can be
     called when the transport is already reading.


File: python.info,  Node: Write-only Transports,  Next: Transportes de datagrama,  Prev: Read-only Transports,  Up: Transportes

5.19.1.85 Write-only Transports
...............................

 -- Método: WriteTransport.abort ()

     Close the transport immediately, without waiting for pending
     operations to complete.  Buffered data will be lost.  No more data
     will be received.  The protocol’s *note protocol.connection_lost():
     358f. method will eventually be called with *note None: 675. as its
     argument.

 -- Método: WriteTransport.can_write_eof ()

     Return *note True: c27. if the transport supports *note
     write_eof(): 3598, *note False: b49. if not.

 -- Método: WriteTransport.get_write_buffer_size ()

     Return the current size of the output buffer used by the transport.

 -- Método: WriteTransport.get_write_buffer_limits ()

     Get the 'high' and 'low' watermarks for write flow control.  Return
     a tuple ‘(low, high)’ where 'low' and 'high' are positive number of
     bytes.

     Use *note set_write_buffer_limits(): 359a. to set the limits.

     Adicionado na versão 3.4.2.

 -- Método: WriteTransport.set_write_buffer_limits (high=None, low=None)

     Set the 'high' and 'low' watermarks for write flow control.

     These two values (measured in number of bytes) control when the
     protocol’s *note protocol.pause_writing(): 359b. and *note
     protocol.resume_writing(): 359c. methods are called.  If specified,
     the low watermark must be less than or equal to the high watermark.
     Neither 'high' nor 'low' can be negative.

     *note pause_writing(): 359b. is called when the buffer size becomes
     greater than or equal to the 'high' value.  If writing has been
     paused, *note resume_writing(): 359c. is called when the buffer
     size becomes less than or equal to the 'low' value.

     The defaults are implementation-specific.  If only the high
     watermark is given, the low watermark defaults to an
     implementation-specific value less than or equal to the high
     watermark.  Setting 'high' to zero forces 'low' to zero as well,
     and causes *note pause_writing(): 359b. to be called whenever the
     buffer becomes non-empty.  Setting 'low' to zero causes *note
     resume_writing(): 359c. to be called only once the buffer is empty.
     Use of zero for either limit is generally sub-optimal as it reduces
     opportunities for doing I/O and computation concurrently.

     Use *note get_write_buffer_limits(): ded. to get the limits.

 -- Método: WriteTransport.write (data)

     Write some 'data' bytes to the transport.

     This method does not block; it buffers the data and arranges for it
     to be sent out asynchronously.

 -- Método: WriteTransport.writelines (list_of_data)

     Write a list (or any iterable) of data bytes to the transport.
     This is functionally equivalent to calling *note write(): 15dd. on
     each element yielded by the iterable, but may be implemented more
     efficiently.

 -- Método: WriteTransport.write_eof ()

     Close the write end of the transport after flushing all buffered
     data.  Data may still be received.

     This method can raise *note NotImplementedError: 228. if the
     transport (e.g.  SSL) doesn’t support half-closed connections.


File: python.info,  Node: Transportes de datagrama,  Next: Transportes de Subprocesso,  Prev: Write-only Transports,  Up: Transportes

5.19.1.86 Transportes de datagrama
..................................

 -- Método: DatagramTransport.sendto (data, addr=None)

     Send the 'data' bytes to the remote peer given by 'addr' (a
     transport-dependent target address).  If 'addr' is *note None: 675,
     the data is sent to the target address given on transport creation.

     This method does not block; it buffers the data and arranges for it
     to be sent out asynchronously.

     Alterado na versão 3.13: This method can be called with an empty
     bytes object to send a zero-length datagram.  The buffer size
     calculation used for flow control is also updated to account for
     the datagram header.

 -- Método: DatagramTransport.abort ()

     Close the transport immediately, without waiting for pending
     operations to complete.  Buffered data will be lost.  No more data
     will be received.  The protocol’s *note protocol.connection_lost():
     358f. method will eventually be called with *note None: 675. as its
     argument.


File: python.info,  Node: Transportes de Subprocesso,  Prev: Transportes de datagrama,  Up: Transportes

5.19.1.87 Transportes de Subprocesso
....................................

 -- Método: SubprocessTransport.get_pid ()

     Return the subprocess process id as an integer.

 -- Método: SubprocessTransport.get_pipe_transport (fd)

     Return the transport for the communication pipe corresponding to
     the integer file descriptor 'fd':

        * ‘0’: writable streaming transport of the standard input
          ('stdin'), or *note None: 675. if the subprocess was not
          created with ‘stdin=PIPE’

        * ‘1’: readable streaming transport of the standard output
          ('stdout'), or *note None: 675. if the subprocess was not
          created with ‘stdout=PIPE’

        * ‘2’: readable streaming transport of the standard error
          ('stderr'), or *note None: 675. if the subprocess was not
          created with ‘stderr=PIPE’

        * other 'fd': *note None: 675.

 -- Método: SubprocessTransport.get_returncode ()

     Return the subprocess return code as an integer or *note None: 675.
     if it hasn’t returned, which is similar to the *note
     subprocess.Popen.returncode: a9c. attribute.

 -- Método: SubprocessTransport.kill ()

     Mata o subprocesso.

     On POSIX systems, the function sends SIGKILL to the subprocess.  On
     Windows, this method is an alias for *note terminate(): 35a4.

     See also *note subprocess.Popen.kill(): 1424.

 -- Método: SubprocessTransport.send_signal (signal)

     Send the 'signal' number to the subprocess, as in *note
     subprocess.Popen.send_signal(): 1425.

 -- Método: SubprocessTransport.terminate ()

     Interrompe o subprocesso.

     On POSIX systems, this method sends *note SIGTERM: 1426. to the
     subprocess.  On Windows, the Windows API function
     ‘TerminateProcess()’ is called to stop the subprocess.

     See also *note subprocess.Popen.terminate(): 1423.

 -- Método: SubprocessTransport.close ()

     Kill the subprocess by calling the *note kill(): 35a3. method.

     If the subprocess hasn’t returned yet, and close transports of
     'stdin', 'stdout', and 'stderr' pipes.


File: python.info,  Node: Protocolos,  Next: Exemplos<19>,  Prev: Transportes,  Up: Transports e Protocols

5.19.1.88 Protocolos
....................

'Source code:' Lib/asyncio/protocols.py(1)

__________________________________________________________________

asyncio provides a set of abstract base classes that should be used to
implement network protocols.  Those classes are meant to be used
together with *note transports: 354a.

Subclasses of abstract base protocol classes may implement some or all
methods.  All these methods are callbacks: they are called by transports
on certain events, for example when some data is received.  A base
protocol method should be called by the corresponding transport.

* Menu:

* Protocolos de Base::
* Base Protocol::
* Streaming Protocols::
* Protocolos de Streaming Bufferizados::
* Protocolos de Datagramas::
* Protocolos de Subprocesso::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/asyncio/protocols.py


File: python.info,  Node: Protocolos de Base,  Next: Base Protocol,  Up: Protocolos

5.19.1.89 Protocolos de Base
............................

 -- Classe: asyncio.BaseProtocol

     Base protocol with methods that all protocols share.

 -- Classe: asyncio.Protocol (BaseProtocol)

     The base class for implementing streaming protocols (TCP, Unix
     sockets, etc).

 -- Classe: asyncio.BufferedProtocol (BaseProtocol)

     A base class for implementing streaming protocols with manual
     control of the receive buffer.

 -- Classe: asyncio.DatagramProtocol (BaseProtocol)

     The base class for implementing datagram (UDP) protocols.

 -- Classe: asyncio.SubprocessProtocol (BaseProtocol)

     The base class for implementing protocols communicating with child
     processes (unidirectional pipes).


File: python.info,  Node: Base Protocol,  Next: Streaming Protocols,  Prev: Protocolos de Base,  Up: Protocolos

5.19.1.90 Base Protocol
.......................

All asyncio protocols can implement Base Protocol callbacks.

Connection Callbacks
....................

Connection callbacks are called on all protocols, exactly once per a
successful connection.  All other protocol callbacks can only be called
between those two methods.

 -- Método: BaseProtocol.connection_made (transport)

     Chamado quando uma conexão é estabelecida.

     The 'transport' argument is the transport representing the
     connection.  The protocol is responsible for storing the reference
     to its transport.

 -- Método: BaseProtocol.connection_lost (exc)

     Chamado quanto a conexão é perdida ou fechada.

     The argument is either an exception object or *note None: 675.  The
     latter means a regular EOF is received, or the connection was
     aborted or closed by this side of the connection.

Flow Control Callbacks
......................

Flow control callbacks can be called by transports to pause or resume
writing performed by the protocol.

See the documentation of the *note set_write_buffer_limits(): 359a.
method for more details.

 -- Método: BaseProtocol.pause_writing ()

     Called when the transport’s buffer goes over the high watermark.

 -- Método: BaseProtocol.resume_writing ()

     Called when the transport’s buffer drains below the low watermark.

If the buffer size equals the high watermark, *note pause_writing():
359b. is not called: the buffer size must go strictly over.

Conversely, *note resume_writing(): 359c. is called when the buffer size
is equal or lower than the low watermark.  These end conditions are
important to ensure that things go as expected when either mark is zero.


File: python.info,  Node: Streaming Protocols,  Next: Protocolos de Streaming Bufferizados,  Prev: Base Protocol,  Up: Protocolos

5.19.1.91 Streaming Protocols
.............................

Event methods, such as *note loop.create_server(): b25, *note
loop.create_unix_server(): 1ae, *note loop.create_connection(): 603,
*note loop.create_unix_connection(): 34bd, *note
loop.connect_accepted_socket(): 7df, *note loop.connect_read_pipe():
3504, and *note loop.connect_write_pipe(): 3505. accept factories that
return streaming protocols.

 -- Método: Protocol.data_received (data)

     Called when some data is received.  'data' is a non-empty bytes
     object containing the incoming data.

     Whether the data is buffered, chunked or reassembled depends on the
     transport.  In general, you shouldn’t rely on specific semantics
     and instead make your parsing generic and flexible.  However, data
     is always received in the correct order.

     The method can be called an arbitrary number of times while a
     connection is open.

     However, *note protocol.eof_received(): 35aa. is called at most
     once.  Once ‘eof_received()’ is called, ‘data_received()’ is not
     called anymore.

 -- Método: Protocol.eof_received ()

     Called when the other end signals it won’t send any more data (for
     example by calling *note transport.write_eof(): 3598, if the other
     end also uses asyncio).

     This method may return a false value (including ‘None’), in which
     case the transport will close itself.  Conversely, if this method
     returns a true value, the protocol used determines whether to close
     the transport.  Since the default implementation returns ‘None’, it
     implicitly closes the connection.

     Some transports, including SSL, don’t support half-closed
     connections, in which case returning true from this method will
     result in the connection being closed.

State machine:

     start -> connection_made
         [-> data_received]*
         [-> eof_received]?
     -> connection_lost -> end


File: python.info,  Node: Protocolos de Streaming Bufferizados,  Next: Protocolos de Datagramas,  Prev: Streaming Protocols,  Up: Protocolos

5.19.1.92 Protocolos de Streaming Bufferizados
..............................................

Adicionado na versão 3.7.

Buffered Protocols can be used with any event loop method that supports
*note Streaming Protocols: 35a9.

‘BufferedProtocol’ implementations allow explicit manual allocation and
control of the receive buffer.  Event loops can then use the buffer
provided by the protocol to avoid unnecessary data copies.  This can
result in noticeable performance improvement for protocols that receive
big amounts of data.  Sophisticated protocol implementations can
significantly reduce the number of buffer allocations.

The following callbacks are called on *note BufferedProtocol: aac.
instances:

 -- Método: BufferedProtocol.get_buffer (sizehint)

     Chamada para alocar um novo buffer para recebimento.

     'sizehint' is the recommended minimum size for the returned buffer.
     It is acceptable to return smaller or larger buffers than what
     'sizehint' suggests.  When set to -1, the buffer size can be
     arbitrary.  It is an error to return a buffer with a zero size.

     ‘get_buffer()’ must return an object implementing the *note buffer
     protocol: 2e8.

 -- Método: BufferedProtocol.buffer_updated (nbytes)

     Chamado quando o buffer foi atualizado com os dados recebidos.

     'nbytes' is the total number of bytes that were written to the
     buffer.

 -- Método: BufferedProtocol.eof_received ()

     See the documentation of the *note protocol.eof_received(): 35aa.
     method.

*note get_buffer(): 35ac. can be called an arbitrary number of times
during a connection.  However, *note protocol.eof_received(): 35aa. is
called at most once and, if called, *note get_buffer(): 35ac. and *note
buffer_updated(): 35ad. won’t be called after it.

State machine:

     start -> connection_made
         [-> get_buffer
             [-> buffer_updated]?
         ]*
         [-> eof_received]?
     -> connection_lost -> end


File: python.info,  Node: Protocolos de Datagramas,  Next: Protocolos de Subprocesso,  Prev: Protocolos de Streaming Bufferizados,  Up: Protocolos

5.19.1.93 Protocolos de Datagramas
..................................

Datagram Protocol instances should be constructed by protocol factories
passed to the *note loop.create_datagram_endpoint(): 733. method.

 -- Método: DatagramProtocol.datagram_received (data, addr)

     Called when a datagram is received.  'data' is a bytes object
     containing the incoming data.  'addr' is the address of the peer
     sending the data; the exact format depends on the transport.

 -- Método: DatagramProtocol.error_received (exc)

     Called when a previous send or receive operation raises an *note
     OSError: 417.  'exc' is the *note OSError: 417. instance.

     This method is called in rare conditions, when the transport (e.g.
     UDP) detects that a datagram could not be delivered to its
     recipient.  In many conditions though, undeliverable datagrams will
     be silently dropped.

     Nota: On BSD systems (macOS, FreeBSD, etc.)  flow control is not
     supported for datagram protocols, because there is no reliable way
     to detect send failures caused by writing too many packets.

     The socket always appears ‘ready’ and excess packets are dropped.
     An *note OSError: 417. with ‘errno’ set to *note errno.ENOBUFS:
     18fc. may or may not be raised; if it is raised, it will be
     reported to *note DatagramProtocol.error_received(): 35b1. but
     otherwise ignored.


File: python.info,  Node: Protocolos de Subprocesso,  Prev: Protocolos de Datagramas,  Up: Protocolos

5.19.1.94 Protocolos de Subprocesso
...................................

Subprocess Protocol instances should be constructed by protocol
factories passed to the *note loop.subprocess_exec(): 3501. and *note
loop.subprocess_shell(): 3502. methods.

 -- Método: SubprocessProtocol.pipe_data_received (fd, data)

     Called when the child process writes data into its stdout or stderr
     pipe.

     'fd' is the integer file descriptor of the pipe.

     'data' is a non-empty bytes object containing the received data.

 -- Método: SubprocessProtocol.pipe_connection_lost (fd, exc)

     Chamado quando um dos encadeamentos comunicando com o processo
     filho é fechado.

     'fd' is the integer file descriptor that was closed.

 -- Método: SubprocessProtocol.process_exited ()

     Chamado quando o processo filho encerrou.

     It can be called before *note pipe_data_received(): 18d9. and *note
     pipe_connection_lost(): 35b3. methods.


File: python.info,  Node: Exemplos<19>,  Prev: Protocolos,  Up: Transports e Protocols

5.19.1.95 Exemplos
..................

* Menu:

* TCP Echo Server::
* TCP Echo Client::
* UDP Echo Server::
* UDP Echo Client::
* Connecting Existing Sockets::
* loop.subprocess_exec() and SubprocessProtocol: loop subprocess_exec and SubprocessProtocol.


File: python.info,  Node: TCP Echo Server,  Next: TCP Echo Client,  Up: Exemplos<19>

5.19.1.96 TCP Echo Server
.........................

Create a TCP echo server using the *note loop.create_server(): b25.
method, send back received data, and close the connection:

     import asyncio


     class EchoServerProtocol(asyncio.Protocol):
         def connection_made(self, transport):
             peername = transport.get_extra_info('peername')
             print('Connection from {}'.format(peername))
             self.transport = transport

         def data_received(self, data):
             message = data.decode()
             print('Data received: {!r}'.format(message))

             print('Send: {!r}'.format(message))
             self.transport.write(data)

             print('Close the client socket')
             self.transport.close()


     async def main():
         # Get a reference to the event loop as we plan to use
         # low-level APIs.
         loop = asyncio.get_running_loop()

         server = await loop.create_server(
             EchoServerProtocol,
             '127.0.0.1', 8888)

         async with server:
             await server.serve_forever()


     asyncio.run(main())

Ver também
..........

The *note TCP echo server using streams: 34d0. example uses the
high-level *note asyncio.start_server(): b2c. function.


File: python.info,  Node: TCP Echo Client,  Next: UDP Echo Server,  Prev: TCP Echo Server,  Up: Exemplos<19>

5.19.1.97 TCP Echo Client
.........................

A TCP echo client using the *note loop.create_connection(): 603. method,
sends data, and waits until the connection is closed:

     import asyncio


     class EchoClientProtocol(asyncio.Protocol):
         def __init__(self, message, on_con_lost):
             self.message = message
             self.on_con_lost = on_con_lost

         def connection_made(self, transport):
             transport.write(self.message.encode())
             print('Data sent: {!r}'.format(self.message))

         def data_received(self, data):
             print('Data received: {!r}'.format(data.decode()))

         def connection_lost(self, exc):
             print('The server closed the connection')
             self.on_con_lost.set_result(True)


     async def main():
         # Get a reference to the event loop as we plan to use
         # low-level APIs.
         loop = asyncio.get_running_loop()

         on_con_lost = loop.create_future()
         message = 'Hello World!'

         transport, protocol = await loop.create_connection(
             lambda: EchoClientProtocol(message, on_con_lost),
             '127.0.0.1', 8888)

         # Wait until the protocol signals that the connection
         # is lost and close the transport.
         try:
             await on_con_lost
         finally:
             transport.close()


     asyncio.run(main())

Ver também
..........

The *note TCP echo client using streams: 34cd. example uses the
high-level *note asyncio.open_connection(): b2b. function.


File: python.info,  Node: UDP Echo Server,  Next: UDP Echo Client,  Prev: TCP Echo Client,  Up: Exemplos<19>

5.19.1.98 UDP Echo Server
.........................

A UDP echo server, using the *note loop.create_datagram_endpoint(): 733.
method, sends back received data:

     import asyncio


     class EchoServerProtocol:
         def connection_made(self, transport):
             self.transport = transport

         def datagram_received(self, data, addr):
             message = data.decode()
             print('Received %r from %s' % (message, addr))
             print('Send %r to %s' % (message, addr))
             self.transport.sendto(data, addr)


     async def main():
         print("Starting UDP server")

         # Get a reference to the event loop as we plan to use
         # low-level APIs.
         loop = asyncio.get_running_loop()

         # One protocol instance will be created to serve all
         # client requests.
         transport, protocol = await loop.create_datagram_endpoint(
             EchoServerProtocol,
             local_addr=('127.0.0.1', 9999))

         try:
             await asyncio.sleep(3600)  # Serve for 1 hour.
         finally:
             transport.close()


     asyncio.run(main())


File: python.info,  Node: UDP Echo Client,  Next: Connecting Existing Sockets,  Prev: UDP Echo Server,  Up: Exemplos<19>

5.19.1.99 UDP Echo Client
.........................

A UDP echo client, using the *note loop.create_datagram_endpoint(): 733.
method, sends data and closes the transport when it receives the answer:

     import asyncio


     class EchoClientProtocol:
         def __init__(self, message, on_con_lost):
             self.message = message
             self.on_con_lost = on_con_lost
             self.transport = None

         def connection_made(self, transport):
             self.transport = transport
             print('Send:', self.message)
             self.transport.sendto(self.message.encode())

         def datagram_received(self, data, addr):
             print("Received:", data.decode())

             print("Close the socket")
             self.transport.close()

         def error_received(self, exc):
             print('Error received:', exc)

         def connection_lost(self, exc):
             print("Connection closed")
             self.on_con_lost.set_result(True)


     async def main():
         # Get a reference to the event loop as we plan to use
         # low-level APIs.
         loop = asyncio.get_running_loop()

         on_con_lost = loop.create_future()
         message = "Hello World!"

         transport, protocol = await loop.create_datagram_endpoint(
             lambda: EchoClientProtocol(message, on_con_lost),
             remote_addr=('127.0.0.1', 9999))

         try:
             await on_con_lost
         finally:
             transport.close()


     asyncio.run(main())


File: python.info,  Node: Connecting Existing Sockets,  Next: loop subprocess_exec and SubprocessProtocol,  Prev: UDP Echo Client,  Up: Exemplos<19>

5.19.1.100 Connecting Existing Sockets
......................................

Wait until a socket receives data using the *note
loop.create_connection(): 603. method with a protocol:

     import asyncio
     import socket


     class MyProtocol(asyncio.Protocol):

         def __init__(self, on_con_lost):
             self.transport = None
             self.on_con_lost = on_con_lost

         def connection_made(self, transport):
             self.transport = transport

         def data_received(self, data):
             print("Received:", data.decode())

             # We are done: close the transport;
             # connection_lost() will be called automatically.
             self.transport.close()

         def connection_lost(self, exc):
             # The socket has been closed
             self.on_con_lost.set_result(True)


     async def main():
         # Get a reference to the event loop as we plan to use
         # low-level APIs.
         loop = asyncio.get_running_loop()
         on_con_lost = loop.create_future()

         # Create a pair of connected sockets
         rsock, wsock = socket.socketpair()

         # Register the socket to wait for data.
         transport, protocol = await loop.create_connection(
             lambda: MyProtocol(on_con_lost), sock=rsock)

         # Simulate the reception of data from the network.
         loop.call_soon(wsock.send, 'abc'.encode())

         try:
             await protocol.on_con_lost
         finally:
             transport.close()
             wsock.close()

     asyncio.run(main())

Ver também
..........

The *note watch a file descriptor for read events: 34d7. example uses
the low-level *note loop.add_reader(): 34d8. method to register an FD.

The *note register an open socket to wait for data using streams: 34d4.
example uses high-level streams created by the *note open_connection():
b2b. function in a coroutine.


File: python.info,  Node: loop subprocess_exec and SubprocessProtocol,  Prev: Connecting Existing Sockets,  Up: Exemplos<19>

5.19.1.101 loop.subprocess_exec() and SubprocessProtocol
........................................................

An example of a subprocess protocol used to get the output of a
subprocess and to wait for the subprocess exit.

The subprocess is created by the *note loop.subprocess_exec(): 3501.
method:

     import asyncio
     import sys

     class DateProtocol(asyncio.SubprocessProtocol):
         def __init__(self, exit_future):
             self.exit_future = exit_future
             self.output = bytearray()
             self.pipe_closed = False
             self.exited = False

         def pipe_connection_lost(self, fd, exc):
             self.pipe_closed = True
             self.check_for_exit()

         def pipe_data_received(self, fd, data):
             self.output.extend(data)

         def process_exited(self):
             self.exited = True
             # process_exited() method can be called before
             # pipe_connection_lost() method: wait until both methods are
             # called.
             self.check_for_exit()

         def check_for_exit(self):
             if self.pipe_closed and self.exited:
                 self.exit_future.set_result(True)

     async def get_date():
         # Get a reference to the event loop as we plan to use
         # low-level APIs.
         loop = asyncio.get_running_loop()

         code = 'import datetime; print(datetime.datetime.now())'
         exit_future = asyncio.Future(loop=loop)

         # Create the subprocess controlled by DateProtocol;
         # redirect the standard output into a pipe.
         transport, protocol = await loop.subprocess_exec(
             lambda: DateProtocol(exit_future),
             sys.executable, '-c', code,
             stdin=None, stderr=None)

         # Wait for the subprocess exit using the process_exited()
         # method of the protocol.
         await exit_future

         # Close the stdout pipe.
         transport.close()

         # Read the output which was collected by the
         # pipe_data_received() method of the protocol.
         data = bytes(protocol.output)
         return data.decode('ascii').rstrip()

     date = asyncio.run(get_date())
     print(f"Current date: {date}")

See also the *note same example: 3516. written using high-level APIs.


File: python.info,  Node: Políticas,  Next: Suporte a plataformas,  Prev: Transports e Protocols,  Up: asyncio — E/S assíncrona

5.19.1.102 Políticas
....................

An event loop policy is a global object used to get and set the current
*note event loop: d9e, as well as create new event loops.  The default
policy can be *note replaced: 35bd. with *note built-in alternatives:
35be. to use different event loop implementations, or substituted by a
*note custom policy: 35bf. that can override these behaviors.

The *note policy object: 35c0. gets and sets a separate event loop per
'context'.  This is per-thread by default, though custom policies could
define 'context' differently.

Custom event loop policies can control the behavior of *note
get_event_loop(): 2c2, *note set_event_loop(): 18df, and *note
new_event_loop(): 3484.

Policy objects should implement the APIs defined in the *note
AbstractEventLoopPolicy: 35c1. abstract base class.

* Menu:

* Getting and Setting the Policy::
* Policy Objects::
* Monitores de processos::
* Custom Policies::


File: python.info,  Node: Getting and Setting the Policy,  Next: Policy Objects,  Up: Políticas

5.19.1.103 Getting and Setting the Policy
.........................................

The following functions can be used to get and set the policy for the
current process:

 -- Função: asyncio.get_event_loop_policy ()

     Retorna a política de todo o processo atual.

 -- Função: asyncio.set_event_loop_policy (policy)

     Set the current process-wide policy to 'policy'.

     If 'policy' is set to ‘None’, the default policy is restored.


File: python.info,  Node: Policy Objects,  Next: Monitores de processos,  Prev: Getting and Setting the Policy,  Up: Políticas

5.19.1.104 Policy Objects
.........................

The abstract event loop policy base class is defined as follows:

 -- Classe: asyncio.AbstractEventLoopPolicy

     An abstract base class for asyncio policies.

      -- Método: get_event_loop ()

          Obtém o laço de eventos para o contexto atual.

          Return an event loop object implementing the *note
          AbstractEventLoop: 966. interface.

          This method should never return ‘None’.

          Alterado na versão 3.6.

      -- Método: set_event_loop (loop)

          Define o laço de eventos do contexto atual como 'loop'.

      -- Método: new_event_loop ()

          Cria e retorna um novo objeto de laço de eventos.

          This method should never return ‘None’.

      -- Método: get_child_watcher ()

          Get a child process watcher object.

          Return a watcher object implementing the *note
          AbstractChildWatcher: 2bc. interface.

          This function is Unix specific.

          Descontinuado desde a versão 3.12.

      -- Método: set_child_watcher (watcher)

          Set the current child process watcher to 'watcher'.

          This function is Unix specific.

          Descontinuado desde a versão 3.12.

asyncio ships with the following built-in policies:

 -- Classe: asyncio.DefaultEventLoopPolicy

     The default asyncio policy.  Uses *note SelectorEventLoop: 608. on
     Unix and *note ProactorEventLoop: 609. on Windows.

     There is no need to install the default policy manually.  asyncio
     is configured to use the default policy automatically.

     Alterado na versão 3.8: On Windows, *note ProactorEventLoop: 609.
     is now used by default.

     Descontinuado desde a versão 3.12: The *note get_event_loop(): 2c2.
     method of the default asyncio policy now emits a *note
     DeprecationWarning: 1a5. if there is no current event loop set and
     it decides to create one.  In some future Python release this will
     become an error.

 -- Classe: asyncio.WindowsSelectorEventLoopPolicy

     An alternative event loop policy that uses the *note
     SelectorEventLoop: 608. event loop implementation.

     *note Disponibilidade: 1ed8.: Windows.

 -- Classe: asyncio.WindowsProactorEventLoopPolicy

     An alternative event loop policy that uses the *note
     ProactorEventLoop: 609. event loop implementation.

     *note Disponibilidade: 1ed8.: Windows.


File: python.info,  Node: Monitores de processos,  Next: Custom Policies,  Prev: Policy Objects,  Up: Políticas

5.19.1.105 Monitores de processos
.................................

A process watcher allows customization of how an event loop monitors
child processes on Unix.  Specifically, the event loop needs to know
when a child process has exited.

In asyncio, child processes are created with *note
create_subprocess_exec(): a81. and *note loop.subprocess_exec(): 3501.
functions.

asyncio defines the *note AbstractChildWatcher: 2bc. abstract base
class, which child watchers should implement, and has four different
implementations: *note ThreadedChildWatcher: 47b. (configured to be used
by default), *note MultiLoopChildWatcher: 2ba, *note SafeChildWatcher:
2bd, and *note FastChildWatcher: 2bb.

Veja também a seção *note Subprocesso e Threads: 350f.

The following two functions can be used to customize the child process
watcher implementation used by the asyncio event loop:

 -- Função: asyncio.get_child_watcher ()

     Return the current child watcher for the current policy.

     Descontinuado desde a versão 3.12.

 -- Função: asyncio.set_child_watcher (watcher)

     Set the current child watcher to 'watcher' for the current policy.
     'watcher' must implement methods defined in the *note
     AbstractChildWatcher: 2bc. base class.

     Descontinuado desde a versão 3.12.

     Nota: Third-party event loops implementations might not support
     custom child watchers.  For such event loops, using *note
     set_child_watcher(): 2be. might be prohibited or have no effect.

 -- Classe: asyncio.AbstractChildWatcher

      -- Método: add_child_handler (pid, callback, *args)

          Register a new child handler.

          Arrange for ‘callback(pid, returncode, *args)’ to be called
          when a process with PID equal to 'pid' terminates.  Specifying
          another callback for the same process replaces the previous
          handler.

          The 'callback' callable must be thread-safe.

      -- Método: remove_child_handler (pid)

          Remove o manipulador para processo com PID igual a 'pid'.

          The function returns ‘True’ if the handler was successfully
          removed, ‘False’ if there was nothing to remove.

      -- Método: attach_loop (loop)

          Attach the watcher to an event loop.

          If the watcher was previously attached to an event loop, then
          it is first detached before attaching to the new loop.

          Note: loop may be ‘None’.

      -- Método: is_active ()

          Return ‘True’ if the watcher is ready to use.

          Gerar um subprocesso com um monitor 'inativo' para o filho
          atual, levanta *note RuntimeError: 195.

          Adicionado na versão 3.8.

      -- Método: close ()

          Close the watcher.

          This method has to be called to ensure that underlying
          resources are cleaned-up.

     Descontinuado desde a versão 3.12.

 -- Classe: asyncio.ThreadedChildWatcher

     This implementation starts a new waiting thread for every
     subprocess spawn.

     It works reliably even when the asyncio event loop is run in a
     non-main OS thread.

     There is no noticeable overhead when handling a big number of
     children ('O'(1) each time a child terminates), but starting a
     thread per process requires extra memory.

     This watcher is used by default.

     Adicionado na versão 3.8.

 -- Classe: asyncio.MultiLoopChildWatcher

     This implementation registers a ‘SIGCHLD’ signal handler on
     instantiation.  That can break third-party code that installs a
     custom handler for ‘SIGCHLD’ signal.

     The watcher avoids disrupting other code spawning processes by
     polling every process explicitly on a ‘SIGCHLD’ signal.

     There is no limitation for running subprocesses from different
     threads once the watcher is installed.

     The solution is safe but it has a significant overhead when
     handling a big number of processes ('O'('n') each time a ‘SIGCHLD’
     is received).

     Adicionado na versão 3.8.

     Descontinuado desde a versão 3.12.

 -- Classe: asyncio.SafeChildWatcher

     This implementation uses active event loop from the main thread to
     handle ‘SIGCHLD’ signal.  If the main thread has no running event
     loop another thread cannot spawn a subprocess (*note RuntimeError:
     195. is raised).

     The watcher avoids disrupting other code spawning processes by
     polling every process explicitly on a ‘SIGCHLD’ signal.

     This solution is as safe as *note MultiLoopChildWatcher: 2ba. and
     has the same 'O'('n') complexity but requires a running event loop
     in the main thread to work.

     Descontinuado desde a versão 3.12.

 -- Classe: asyncio.FastChildWatcher

     This implementation reaps every terminated processes by calling
     ‘os.waitpid(-1)’ directly, possibly breaking other code spawning
     processes and waiting for their termination.

     There is no noticeable overhead when handling a big number of
     children ('O'(1) each time a child terminates).

     This solution requires a running event loop in the main thread to
     work, as *note SafeChildWatcher: 2bd.

     Descontinuado desde a versão 3.12.

 -- Classe: asyncio.PidfdChildWatcher

     This implementation polls process file descriptors (pidfds) to
     await child process termination.  In some respects, *note
     PidfdChildWatcher: 479. is a “Goldilocks” child watcher
     implementation.  It doesn’t require signals or threads, doesn’t
     interfere with any processes launched outside the event loop, and
     scales linearly with the number of subprocesses launched by the
     event loop.  The main disadvantage is that pidfds are specific to
     Linux, and only work on recent (5.3+) kernels.

     Adicionado na versão 3.9.


File: python.info,  Node: Custom Policies,  Prev: Monitores de processos,  Up: Políticas

5.19.1.106 Custom Policies
..........................

To implement a new event loop policy, it is recommended to subclass
*note DefaultEventLoopPolicy: 35c9. and override the methods for which
custom behavior is wanted, e.g.:

     class MyEventLoopPolicy(asyncio.DefaultEventLoopPolicy):

         def get_event_loop(self):
             """Get the event loop.

             This may be None or an instance of EventLoop.
             """
             loop = super().get_event_loop()
             # Do something with loop ...
             return loop

     asyncio.set_event_loop_policy(MyEventLoopPolicy())


File: python.info,  Node: Suporte a plataformas,  Next: Extensão,  Prev: Políticas,  Up: asyncio — E/S assíncrona

5.19.1.107 Suporte a plataformas
................................

The *note asyncio: a. module is designed to be portable, but some
platforms have subtle differences and limitations due to the platforms’
underlying architecture and capabilities.

* Menu:

* Todas as plataformas::
* Windows: Windows<81>.
* macOS: macOS<51>.


File: python.info,  Node: Todas as plataformas,  Next: Windows<81>,  Up: Suporte a plataformas

5.19.1.108 Todas as plataformas
...............................

   * *note loop.add_reader(): 34d8. and *note loop.add_writer(): 3557.
     cannot be used to monitor file I/O.


File: python.info,  Node: Windows<81>,  Next: macOS<51>,  Prev: Todas as plataformas,  Up: Suporte a plataformas

5.19.1.109 Windows
..................

'Source code:' Lib/asyncio/proactor_events.py(1),
Lib/asyncio/windows_events.py(2), Lib/asyncio/windows_utils.py(3)

__________________________________________________________________

Alterado na versão 3.8: On Windows, *note ProactorEventLoop: 609. is now
the default event loop.

All event loops on Windows do not support the following methods:

   * *note loop.create_unix_connection(): 34bd. and *note
     loop.create_unix_server(): 1ae. are not supported.  The *note
     socket.AF_UNIX: 193a. socket family is specific to Unix.

   * *note loop.add_signal_handler(): 3560. and *note
     loop.remove_signal_handler(): 3561. are not supported.

*note SelectorEventLoop: 608. has the following limitations:

   * *note SelectSelector: 35d7. is used to wait on socket events: it
     supports sockets and is limited to 512 sockets.

   * *note loop.add_reader(): 34d8. and *note loop.add_writer(): 3557.
     only accept socket handles (e.g.  pipe file descriptors are not
     supported).

   * Pipes are not supported, so the *note loop.connect_read_pipe():
     3504. and *note loop.connect_write_pipe(): 3505. methods are not
     implemented.

   * *note Subprocesses: 3478. are not supported, i.e.  *note
     loop.subprocess_exec(): 3501. and *note loop.subprocess_shell():
     3502. methods are not implemented.

*note ProactorEventLoop: 609. has the following limitations:

   * The *note loop.add_reader(): 34d8. and *note loop.add_writer():
     3557. methods are not supported.

The resolution of the monotonic clock on Windows is usually around 15.6
milliseconds.  The best resolution is 0.5 milliseconds.  The resolution
depends on the hardware (availability of HPET(4)) and on the Windows
configuration.

* Menu:

* Suporte para subprocesso no Windows::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/asyncio/proactor_events.py

   (2) 
https://github.com/python/cpython/tree/3.13/Lib/asyncio/windows_events.py

   (3) 
https://github.com/python/cpython/tree/3.13/Lib/asyncio/windows_utils.py

   (4) https://en.wikipedia.org/wiki/High_Precision_Event_Timer


File: python.info,  Node: Suporte para subprocesso no Windows,  Up: Windows<81>

5.19.1.110 Suporte para subprocesso no Windows
..............................................

On Windows, the default event loop *note ProactorEventLoop: 609.
supports subprocesses, whereas *note SelectorEventLoop: 608. does not.

The *note policy.set_child_watcher(): 2c0. function is also not
supported, as *note ProactorEventLoop: 609. has a different mechanism to
watch child processes.


File: python.info,  Node: macOS<51>,  Prev: Windows<81>,  Up: Suporte a plataformas

5.19.1.111 macOS
................

Modern macOS versions are fully supported.

macOS <= 10.8
.............

On macOS 10.6, 10.7 and 10.8, the default event loop uses *note
selectors.KqueueSelector: 35da, which does not support character devices
on these versions.  The *note SelectorEventLoop: 608. can be manually
configured to use *note SelectSelector: 35d7. or *note PollSelector:
bf1. to support character devices on these older versions of macOS.
Example:

     import asyncio
     import selectors

     selector = selectors.SelectSelector()
     loop = asyncio.SelectorEventLoop(selector)
     asyncio.set_event_loop(loop)


File: python.info,  Node: Extensão,  Next: Índice da API de alto nível,  Prev: Suporte a plataformas,  Up: asyncio — E/S assíncrona

5.19.1.112 Extensão
...................

A direção principal para estender o módulo *note asyncio: a. é escrever
classes de 'laços de eventos' personalizados.  O Asyncio tem funções
auxiliares que podem ser usadas para simplificar essa tarefa.

     Nota: Terceiros devem reutilizar o código assíncrono existente com
     cuidado.  Uma versão nova de Python pode quebrar a compatibilidade
     com versões anteriores da parte 'interna' da API.

* Menu:

* Escrevendo um laço de eventos personalizado::
* Construtores privados de Future e Task::
* Suporte ao ciclo de vida de tarefas::


File: python.info,  Node: Escrevendo um laço de eventos personalizado,  Next: Construtores privados de Future e Task,  Up: Extensão

5.19.1.113 Escrevendo um laço de eventos personalizado
......................................................

*note asyncio.AbstractEventLoop: 966. declara muitos métodos.
Implementar todos eles do zero é um trabalho tedioso.

Um laço de eventos pode herdar várias implementações de métodos da
classe ‘asyncio.BaseEventLoop’.

Por sua vez, o sucessor deve implementar um conjunto de métodos
'privados' declarados, porém não implementados, em
‘asyncio.BaseEventLoop’.

Por exemplo, ‘loop.create_connection()``verifica os argumentos, resolve
endereços DNS, e chama a função ``loop._make_socket_transport()’, que
deve ser implementada pela classe herdada.  O
método''_make_socket_transport()'' não está documentado, e é considerado
parte de uma API 'interna'.


File: python.info,  Node: Construtores privados de Future e Task,  Next: Suporte ao ciclo de vida de tarefas,  Prev: Escrevendo um laço de eventos personalizado,  Up: Extensão

5.19.1.114 Construtores privados de Future e Task
.................................................

As classes *note asyncio.Future: be6. e *note asyncio.Task: 1be. nunca
deverão ser criadas diretamente.  Por favor, as substitua pelas
'factories' correspondentes: *note loop.create_future(): c95. e *note
loop.create_task(): 1c0. ou *note asyncio.create_task(): 1bf.

Porém, 'laços de eventos' de terceiros podem 'reutilizar' as
implementações embutidas de Future e Task, obtendo um código complexo e
altamente otimizado.

Por isso, segue a listagem de construtores 'privados':

 -- Método: Future.__init__ (*, loop=None)

     Cria uma instância de Future embutida.

     'loop' é uma instância opcional do laço de eventos.

 -- Método: Task.__init__ (coro, *, loop=None, name=None, context=None)

     Cria uma instância embutida de Task.

     'loop' é uma instância opcional do laço de eventos.  Os outros
     argumentos estão descritos em *note loop.create_task(): 1c0.

     Alterado na versão 3.11: o argumento 'context' foi adicionado


File: python.info,  Node: Suporte ao ciclo de vida de tarefas,  Prev: Construtores privados de Future e Task,  Up: Extensão

5.19.1.115 Suporte ao ciclo de vida de tarefas
..............................................

Implementações de Task de terceiros devem chamar as seguintes funções
para manter uma tarefa visível para *note asyncio.all_tasks(): 95d. e
*note asyncio.current_task(): 47d.:

 -- Função: asyncio._register_task (task)

     Registra uma nova 'task' como gerenciada pelo 'asyncio'.

     Chame esta função no construtor de uma tarefa.

 -- Função: asyncio._unregister_task (task)

     Cancela o registro de 'task' nas estruturas internas do 'asyncio'.

     Chame esta função quando a tarefa estiver terminando.

 -- Função: asyncio._enter_task (loop, task)

     Troca a tarefa atual para o argumento 'task'.

     Chame esta função logo antes de executar uma porção da 'corrotina'
     embutida (*note coroutine.send(): 2159. ou *note coroutine.throw():
     4f7.).

 -- Função: asyncio._leave_task (loop, task)

     Troca a tarefa atual de 'task' para ‘None’.

     Chame esta função logo após executar *note coroutine.send(): 2159.
     ou *note coroutine.throw(): 4f7.


File: python.info,  Node: Índice da API de alto nível,  Next: Índice de APIs de baixo nível,  Prev: Extensão,  Up: asyncio — E/S assíncrona

5.19.1.116 Índice da API de alto nível
......................................

Esta página lista todas as APIs asyncio de alto nível habilitadas por
async/await.

* Menu:

* Tarefas::
* Filas: Filas<2>.
* Subprocessos: Subprocessos<2>.
* Streams: Streams<2>.
* Sincronização::
* Exceções: Exceções<14>.


File: python.info,  Node: Tarefas,  Next: Filas<2>,  Up: Índice da API de alto nível

5.19.1.117 Tarefas
..................

Utilitários para executar programas asyncio, criar Tarefas, e esperar
por múltiplas coisas com tempos limites.

*note run(): 47c.                                      Cria um laço de eventos, roda uma corrotina, fecha o
                                                       laço.
                                                       
                                                       
*note Runner: 600.                                     Um gerenciador de contexto que simplifica várias
                                                       chamadas assíncronas de funções.
                                                       
                                                       
*note Task: 1be.                                       Objeto Task.
                                                       
                                                       
*note TaskGroup: 1b5.                                  Um gerenciador de contexto que mantém um grupo de
                                                       tarefas.  Oferece uma maneira conveniente e
                                                       confiável de aguardar a conclusão de todas as
                                                       tarefas do grupo.
                                                       
                                                       
*note create_task(): 1bf.                              Inicia uma Task asyncio e a retorna.
                                                       
                                                       
*note current_task(): 47d.                             Retorna para a Tarefa atual.
                                                       
                                                       
*note all_tasks(): 95d.                                Retorna todas as tarefas que ainda não foram
                                                       concluídas em um laço de eventos.
                                                       
                                                       
‘await’ *note sleep(): a79.                            Dorme for um número de segundos.
                                                       
                                                       
‘await’ *note gather(): 5fd.                           Agenda e espera por coisas concorrentemente.
                                                       
                                                       
‘await’ *note wait_for(): 5ff.                         Executa com um tempo limite.
                                                       
                                                       
‘await’ *note shield(): a7a.                           Protege contra cancelamento.
                                                       
                                                       
‘await’ *note wait(): 47f.                             Monitora para conclusão.
                                                       
                                                       
*note timeout(): 5fe.                                  Executa com um tempo limite.  Útil nos casos em que
                                                       o ‘wait_for’ não é adequado.
                                                       
                                                       
*note to_thread(): 8ee.                                Executa uma função assincronamente em uma thread
                                                       separada.
                                                       
                                                       
*note run_coroutine_threadsafe(): 886.                 Agenda uma corrotina a partir de outra thread do
                                                       sistema operacional.
                                                       
                                                       
‘for in’ *note as_completed(): 1aa.                    Monitora a conclusão com um loop ‘for’.
                                                       

Exemplos
........

   * *note Usando asyncio.gather() para executar coisas em paralelo:
     3497.

   * *note Usando asyncio.wait_for() para forçar um tempo limite de
     execução: 349f.

   * *note Cancelamento: 34b4.

   * *note Usando asyncio.sleep(): 3495.

   * Veja também a *note página principal de documentação sobre Tarefas:
     3476.


File: python.info,  Node: Filas<2>,  Next: Subprocessos<2>,  Prev: Tarefas,  Up: Índice da API de alto nível

5.19.1.118 Filas
................

Filas devem ser usadas para distribuir trabalho entre múltiplas Tarefas
asyncio, implementar pools de conexão, e padrões pub/sub.

*note Queue: a80.                                      Uma fila FIFO - Primeiro que entra, é o primeiro que
                                                       sai.
                                                       
                                                       
*note PriorityQueue: 3528.                             Uma fila de prioridade.
                                                       
                                                       
*note LifoQueue: 352a.                                 Uma fila LIFO - Último que entra, é o primeiro que
                                                       sai.
                                                       

Exemplos
........

   * *note Usando asyncio.Queue para distribuir cargas de trabalho entre
     diversas Tasks: 352c.

   * Veja também a *note Página de documentação da classe Queue: 3479.


File: python.info,  Node: Subprocessos<2>,  Next: Streams<2>,  Prev: Filas<2>,  Up: Índice da API de alto nível

5.19.1.119 Subprocessos
.......................

Utilitários para iniciar subprocessos e executar comandos no console.

‘await’ *note create_subprocess_exec(): a81.           Cria um subprocesso.
                                                       
                                                       
‘await’ *note create_subprocess_shell(): a82.          Executa um comando no console.
                                                       

Exemplos
........

   * *note Executando um comando no console: 34fb.

   * Veja também a *note documentação de subprocessos de APIs: 3478.


File: python.info,  Node: Streams<2>,  Next: Sincronização,  Prev: Subprocessos<2>,  Up: Índice da API de alto nível

5.19.1.120 Streams
..................

APIs de alto nível para trabalhar com entrada e saída de rede.

‘await’ *note open_connection(): b2b.                  Estabelece uma conexão TCP.
                                                       
                                                       
‘await’ *note open_unix_connection(): 34bc.            Estabelece uma conexão com soquete Unix.
                                                       
                                                       
‘await’ *note start_server(): b2c.                     Inicia um servidor TCP.
                                                       
                                                       
‘await’ *note start_unix_server(): 34be.               Inicia um servidor com soquete Unix.
                                                       
                                                       
*note StreamReader: 1a09.                              Objeto async/await de alto nível para receber dados
                                                       de rede.
                                                       
                                                       
*note StreamWriter: 17f2.                              Objeto async/await de alto nível para enviar dados
                                                       pela rede.
                                                       

Exemplos
........

   * *note Exemplo de cliente TCP: 34b8.

   * Veja também a documentação das *note APIs de streams: 3477.


File: python.info,  Node: Sincronização,  Next: Exceções<14>,  Prev: Streams<2>,  Up: Índice da API de alto nível

5.19.1.121 Sincronização
........................

Primitivas de sincronização similares a threads, que podem ser usadas em
tarefas.

*note Lock: a7b.                                       Uma trava mutex.
                                                       
                                                       
*note Event: a7c.                                      Um objeto de evento.
                                                       
                                                       
*note Condition: a7d.                                  Um objeto de condição.
                                                       
                                                       
*note Semaphore: a7e.                                  Um semáforo.
                                                       
                                                       
*note BoundedSemaphore: a7f.                           Um semáforo limitado.
                                                       
                                                       
*note Barrier: 601.                                    Um objeto barreira.
                                                       

Exemplos
........

   * *note Usando asyncio.Event: 34e4.

   * *note Usando asyncio.Barrier: 34f2.

   * Veja também a documentação das *note primitivas de sincronização de
     asyncio: 347a.


File: python.info,  Node: Exceções<14>,  Prev: Sincronização,  Up: Índice da API de alto nível

5.19.1.122 Exceções
...................

*note asyncio.CancelledError: 1b8.                     Levantado quanto a Tarefa é cancelada.  Veja também
                                                       *note Task.cancel(): 1b7.
                                                       
                                                       
*note asyncio.BrokenBarrierError: 602.                 Levantado quando um Barreira é quebrada.  veja
                                                       também *note Barrier.wait(): 34f1. .
                                                       

Exemplos
........

   * *note Manipulando CancelledError para executar código no
     cancelamento de uma requisição: 34b4.

   * Veja também a lista completa de *note exceções específicas de
     asyncio: 352e.


File: python.info,  Node: Índice de APIs de baixo nível,  Next: Desenvolvendo com asyncio,  Prev: Índice da API de alto nível,  Up: asyncio — E/S assíncrona

5.19.1.123 Índice de APIs de baixo nível
........................................

Esta página lista todas as APIs de baixo nível do asyncio.

* Menu:

* Obtendo o laço de eventos::
* Métodos do laço de eventos: Métodos do laço de eventos<2>.
* Transportes: Transportes<2>.
* Protocolos: Protocolos<2>.
* Políticas de laço de eventos::


File: python.info,  Node: Obtendo o laço de eventos,  Next: Métodos do laço de eventos<2>,  Up: Índice de APIs de baixo nível

5.19.1.124 Obtendo o laço de eventos
....................................

*note asyncio.get_running_loop(): b1d.                 A função 'preferida' para obter o laço de eventos em
                                                       execução.
                                                       
                                                       
*note asyncio.get_event_loop(): 2c2.                   Obtém uma instância do laço de eventos (em execução
                                                       ou atual por meio da política atual).
                                                       
                                                       
*note asyncio.set_event_loop(): 18df.                  Define o laço de eventos como atual através da
                                                       política atual.
                                                       
                                                       
*note asyncio.new_event_loop(): 3484.                  Cria um novo laço de eventos.
                                                       

Exemplos
........

   * *note Usando asyncio.get_running_loop(): 3582.


File: python.info,  Node: Métodos do laço de eventos<2>,  Next: Transportes<2>,  Prev: Obtendo o laço de eventos,  Up: Índice de APIs de baixo nível

5.19.1.125 Métodos do laço de eventos
.....................................

Veja também a seção principal da documentação sobre os *note Métodos do
laço de eventos: 353d.

Ciclo de vida
.............

*note loop.run_until_complete(): c93.                  Executa um Future/Task/aguardável até que esteja
                                                       completo.
                                                       
                                                       
*note loop.run_forever(): 353f.                        Executa o laço de eventos para sempre.
                                                       
                                                       
*note loop.stop(): c98.                                Para o laço de eventos.
                                                       
                                                       
*note loop.close(): 3541.                              Fecha o laço de eventos.
                                                       
                                                       
*note loop.is_running(): 3540.                         Retorna ‘True’ se o laço de eventos estiver rodando.
                                                       
                                                       
*note loop.is_closed(): dec.                           Retorna ‘True’ se o laço de eventos estiver fechado.
                                                       
                                                       
‘await’ *note loop.shutdown_asyncgens(): c9a.          Fecha geradores assíncronos.
                                                       

Depuração
.........

*note loop.set_debug(): dea.                           Habilita ou desabilita o modo de debug.
                                                       
                                                       
*note loop.get_debug(): deb.                           Obtém o modo de debug atual.
                                                       

Agendando funções de retorno (callbacks)
........................................

*note loop.call_soon(): b17.                           Invoca uma função de retorno brevemente.
                                                       
                                                       
*note loop.call_soon_threadsafe(): b18.                Uma variante segura para thread de
                                                       *note loop.call_soon(): b17.
                                                       
                                                       
*note loop.call_later(): b29.                          Invoca uma função de retorno 'após' o tempo
                                                       especificado.
                                                       
                                                       
*note loop.call_at(): b19.                             Invoca uma função de retorno 'no' instante
                                                       especificado.
                                                       

Grupo de Thread/Processo
........................

‘await’ *note loop.run_in_executor(): 8ef.             Executa uma função vinculada à CPU ou outra que seja
                                                       bloqueante em um executor
                                                       *note concurrent.futures: 21.
                                                       
                                                       
*note loop.set_default_executor(): 743.                Define o executor padrão para
                                                       *note loop.run_in_executor(): 8ef.
                                                       

Tasks e Futures
...............

*note loop.create_future(): c95.                       Cria um objeto *note Future: be6.
                                                       
                                                       
*note loop.create_task(): 1c0.                         Agenda corrotina como uma *note Task: 1be.
                                                       
                                                       
*note loop.set_task_factory(): dee.                    Define uma factory usada por
                                                       *note loop.create_task(): 1c0. para criar
                                                       *note Tasks: 1be.
                                                       
                                                       
*note loop.get_task_factory(): def.                    Obtém o factory *note loop.create_task(): 1c0. usado
                                                       para criar *note Tasks: 1be.
                                                       

DNS
...

‘await’ *note loop.getaddrinfo(): c2e.                 Versão assíncrona de
                                                       *note socket.getaddrinfo(): 184b.
                                                       
                                                       
‘await’ *note loop.getnameinfo(): c2f.                 Versão assíncrona de
                                                       *note socket.getnameinfo(): 17b6.
                                                       

Rede e IPC
..........

‘await’ *note loop.create_connection(): 603.           Abre uma conexão TCP.
                                                       
                                                       
‘await’ *note loop.create_server(): b25.               Cria um servidor TCP.
                                                       
                                                       
‘await’ *note loop.create_unix_connection(): 34bd.     Abre uma conexão soquete Unix.
                                                       
                                                       
‘await’ *note loop.create_unix_server(): 1ae.          Cria um servidor soquete Unix.
                                                       
                                                       
‘await’ *note loop.connect_accepted_socket(): 7df.     Envolve um *note socket: dc9. em um par ‘(transport,
                                                       protocol)’.
                                                       
                                                       
‘await’ *note loop.create_datagram_endpoint(): 733.    Abre uma conexão por datagrama (UDP).
                                                       
                                                       
‘await’ *note loop.sendfile(): 3553.                   Envia um arquivo por meio de um transporte.
                                                       
                                                       
‘await’ *note loop.start_tls(): b1b.                   Atualiza uma conexão existente para TLS.
                                                       
                                                       
‘await’ *note loop.connect_read_pipe(): 3504.          Envolve a leitura final de um encadeamento em um par
                                                       ‘(transport, protocol)’.
                                                       
                                                       
‘await’ *note loop.connect_write_pipe(): 3505.         Envolve a escrita final de um encadeamento em um par
                                                       ‘(transport, protocol)’.
                                                       

Soquetes
........

‘await’ *note loop.sock_recv(): c2b.                   Recebe dados do *note socket: dc9.
                                                       
                                                       
‘await’ *note loop.sock_recv_into(): b1c.              Recebe dados do *note socket: dc9. em um buffer.
                                                       
                                                       
‘await’ *note loop.sock_recvfrom(): 606.               Recebe um datagrama do *note socket: dc9.
                                                       
                                                       
‘await’ *note loop.sock_recvfrom_into(): 607.          Recebe um datagrama do *note socket: dc9. em um
                                                       buffer.
                                                       
                                                       
‘await’ *note loop.sock_sendall(): c2c.                Envia dados para o *note socket: dc9.
                                                       
                                                       
‘await’ *note loop.sock_sendto(): 605.                 Envia um datagrama por meio de *note socket: dc9.
                                                       para o endereço dado.
                                                       
                                                       
‘await’ *note loop.sock_connect(): df2.                Conecta ao *note socket: dc9.
                                                       
                                                       
‘await’ *note loop.sock_accept(): c2d.                 Aceita uma conexão do *note socket: dc9.
                                                       
                                                       
‘await’ *note loop.sock_sendfile(): b20.               Envia um arquivo usando o *note socket: dc9.
                                                       
                                                       
*note loop.add_reader(): 34d8.                         Começa a observar um descritor de arquivo,
                                                       aguardando por disponibilidade de leitura.
                                                       
                                                       
*note loop.remove_reader(): 3556.                      Interrompe o monitoramento de um descritor de
                                                       arquivo, que aguarda disponibilidade de leitura.
                                                       
                                                       
*note loop.add_writer(): 3557.                         Começa a observar um descritor de arquivo,
                                                       aguardando por disponibilidade para escrita.
                                                       
                                                       
*note loop.remove_writer(): 3558.                      Interrompe o monitoramento de um descritor de
                                                       arquivo, que aguarda disponibilidade para escrita.
                                                       

Sinais Unix
...........

*note loop.add_signal_handler(): 3560.                 Adiciona um tratador para um *note signal: c6.
                                                       
                                                       
*note loop.remove_signal_handler(): 3561.              Remove um tratador para um *note signal: c6.
                                                       

Subprocessos
............

*note loop.subprocess_exec(): 3501.                    Inicia um subprocesso.
                                                       
                                                       
*note loop.subprocess_shell(): 3502.                   Inicia um subprocesso a partir de um comando shell.
                                                       

Tratamento de erros
...................

*note loop.call_exception_handler(): 3565.             Chama o tratamento de exceção.
                                                       
                                                       
*note loop.set_exception_handler(): 3564.              Define um novo tratador de exceção.
                                                       
                                                       
*note loop.get_exception_handler(): c96.               Obtém o tratador de exceção atual.
                                                       
                                                       
*note loop.default_exception_handler(): 3566.          A implementação padrão do tratador de exceção.
                                                       

Exemplos
........

   * *note Usando asyncio.new_event_loop() e loop.run_forever(): 3571.

   * *note Usando loop.call_later(): 3573.

   * Usando ‘loop.create_connection()’ para implementar *note um
     cliente-eco: 34cf.

   * Usando ‘loop.create_connection()’ para *note conectar a um soquete:
     34d6.

   * *note Usando add_reader() para monitorar um descritor de arquivo
     para eventos de leitura: 34d7.

   * *note Usando loop.add_signal_handler(): 3576.

   * *note Usando loop.subprocess_exec(): 3517.


File: python.info,  Node: Transportes<2>,  Next: Protocolos<2>,  Prev: Métodos do laço de eventos<2>,  Up: Índice de APIs de baixo nível

5.19.1.126 Transportes
......................

Todos os transportes implementam os seguintes métodos:

*note transport.close(): 354d.                         Fecha o transporte.
                                                       
                                                       
*note transport.is_closing(): c94.                     Retorna ‘True’ se o transporte estiver fechando ou
                                                       estiver fechado.
                                                       
                                                       
*note transport.get_extra_info(): aab.                 Solicita informação a respeito do transporte.
                                                       
                                                       
*note transport.set_protocol(): 3593.                  Define um novo protocolo.
                                                       
                                                       
*note transport.get_protocol(): 3594.                  Retorna o protocolo atual.
                                                       

Transportes que podem receber dados (TCP e conexões Unix, encadeamentos,
etc).  Retornado a partir de métodos como *note
loop.create_connection(): 603, *note loop.create_unix_connection():
34bd, *note loop.connect_read_pipe(): 3504, etc:

Realiza leitura de Transportes
..............................

*note transport.is_reading(): b2e.                     Retorna ‘True’ se o transporte estiver recebendo.
                                                       
                                                       
*note transport.pause_reading(): b30.                  Pausa o recebimento.
                                                       
                                                       
*note transport.resume_reading(): b2f.                 Continua o recebimento.
                                                       

Transportes que podem enviar dados (TCP e conexões Unix, encadeamentos,
etc).  Retornado a partir de métodos como *note
loop.create_connection(): 603, *note loop.create_unix_connection():
34bd, *note loop.connect_write_pipe(): 3505, etc:

Realiza escrita de Transportes
..............................

*note transport.write(): 15dd.                         Escreve dados para o transporte.
                                                       
                                                       
*note transport.writelines(): 15dc.                    Escreve buffers para o transporte.
                                                       
                                                       
*note transport.can_write_eof(): 3597.                 Retorna *note True: c27. se o transporte suporta o
                                                       envio de EOF.
                                                       
                                                       
*note transport.write_eof(): 3598.                     Fecha e envia EOF após descarregar dados que estavam
                                                       no buffer.
                                                       
                                                       
*note transport.abort(): 356e.                         Fecha o transporte imediatamente.
                                                       
                                                       
*note transport.get_write_buffer_size(): 3599.         Retorna o tamanho atual do buffer de saída.
                                                       
                                                       
*note transport.get_write_buffer_limits(): ded.        Retorna marcas d’água alta e baixa para controle do
                                                       fluxo de escrita.
                                                       
                                                       
*note transport.set_write_buffer_limits(): 359a.       Define novas marcas d’água alta e baixa para
                                                       controle do fluxo de escrita.
                                                       

Transporte retornado por *note loop.create_datagram_endpoint(): 733.:

Transportes de datagrama
........................

*note transport.sendto(): 1af.                         Envia dados para o par remoto.
                                                       
                                                       
*note transport.abort(): 359e.                         Fecha o transporte imediatamente.
                                                       

Abstração de transporte de baixo nível sobre subprocessos.  Retornado
por *note loop.subprocess_exec(): 3501. e *note loop.subprocess_shell():
3502.:

Transportes de Subprocesso
..........................

*note transport.get_pid(): 35a0.                       Retorna o process id do subprocesso.
                                                       
                                                       
*note transport.get_pipe_transport(): 35a1.            Retorna o transporte para o encadeamento de
                                                       comunicação requisitada ('stdin', 'stdout', ou
                                                       'stderr').
                                                       
                                                       
*note transport.get_returncode(): 35a2.                Retorna o código de retorno do subprocesso.
                                                       
                                                       
*note transport.kill(): 35a3.                          Mata o subprocesso.
                                                       
                                                       
*note transport.send_signal(): 35a5.                   Envia um sinal para o subprocesso.
                                                       
                                                       
*note transport.terminate(): 35a4.                     Interrompe o subprocesso.
                                                       
                                                       
*note transport.close(): 35a6.                         Mata o subprocesso e fecha todos os encadeamentos.
                                                       


File: python.info,  Node: Protocolos<2>,  Next: Políticas de laço de eventos,  Prev: Transportes<2>,  Up: Índice de APIs de baixo nível

5.19.1.127 Protocolos
.....................

Classes de protocolos podem implementar os seguintes 'métodos de função
de retorno':

‘callback’ *note connection_made(): 354b.              Chamado quando uma conexão é estabelecida.
                                                       
                                                       
‘callback’ *note connection_lost(): 358f.              Chamado quanto a conexão é perdida ou fechada.
                                                       
                                                       
‘callback’ *note pause_writing(): 359b.                Chamado quando o buffer de transporte ultrapassa a
                                                       marca de nível alto d’água.
                                                       
                                                       
‘callback’ *note resume_writing(): 359c.               Chamado quando o buffer de transporte drena abaixo
                                                       da marca de nível baixo d’agua.
                                                       

Protocolos de Streaming (TCP, Soquetes Unix, Encadeamentos)
...........................................................

‘callback’ *note data_received(): 188a.                Chamado quando algum dado é recebido.
                                                       
                                                       
‘callback’ *note eof_received(): 35aa.                 Chamado quando um EOF é recebido.
                                                       

Protocolos de Streaming Bufferizados
....................................

‘callback’ *note get_buffer(): 35ac.                   Chamada para alocar um novo buffer para recebimento.
                                                       
                                                       
‘callback’ *note buffer_updated(): 35ad.               Chamado quando o buffer foi atualizado com os dados
                                                       recebidos.
                                                       
                                                       
‘callback’ *note eof_received(): 35ae.                 Chamado quando um EOF é recebido.
                                                       

Protocolos de Datagramas
........................

‘callback’ *note datagram_received(): 35b0.            Chamado quando um datagrama é recebido.
                                                       
                                                       
‘callback’ *note error_received(): 35b1.               Chamado quando uma operação de envio ou recebimento
                                                       anterior levanta um *note OSError: 417.
                                                       

Protocolos de Subprocesso
.........................

‘callback’ *note pipe_data_received(): 18d9.           Chamado quando o processo filho escreve dados no seu
                                                       encadeamento 'stdout' ou 'stderr'.
                                                       
                                                       
‘callback’ *note pipe_connection_lost(): 35b3.         Chamado quando um dos encadeamentos comunicando com
                                                       o processo filho é fechado.
                                                       
                                                       
‘callback’ *note process_exited(): 18d8.               Chamado quando o processo filho sai.  Isso pode ser
                                                       chamado antes dos métodos
                                                       *note pipe_data_received(): 18d9. e
                                                       *note pipe_connection_lost(): 35b3.
                                                       


File: python.info,  Node: Políticas de laço de eventos,  Prev: Protocolos<2>,  Up: Índice de APIs de baixo nível

5.19.1.128 Políticas de laço de eventos
.......................................

Política é um mecanismo de baixo nível para alterar o comportamento de
funções, similar a *note asyncio.get_event_loop(): 2c2.  Veja também a
*note seção principal de políticas: 3537. para mais detalhes.

Acessando Políticas
...................

*note asyncio.get_event_loop_policy(): 35c3.           Retorna a política de todo o processo atual.
                                                       
                                                       
*note asyncio.set_event_loop_policy(): 35c4.           Define uma nova política para todo o processo.
                                                       
                                                       
*note AbstractEventLoopPolicy: 35c1.                   Classe base para objetos de política.
                                                       


File: python.info,  Node: Desenvolvendo com asyncio,  Prev: Índice de APIs de baixo nível,  Up: asyncio — E/S assíncrona

5.19.1.129 Desenvolvendo com asyncio
....................................

A programação assíncrona é diferente da programação “sequencial”
clássica.

Esta página lista erros e armadilhas comuns e explica como evitá-los.

* Menu:

* Modo de Depuração::
* Concorrência e Múltiplas Threads::
* Executando código bloqueante::
* Gerando logs: Gerando logs<3>.
* Detectar corrotinas nunca aguardadas::
* Detectar exceções nunca recuperadas::


File: python.info,  Node: Modo de Depuração,  Next: Concorrência e Múltiplas Threads,  Up: Desenvolvendo com asyncio

5.19.1.130 Modo de Depuração
............................

Por padrão, o asyncio é executado em modo de produção.  Para facilitar o
desenvolvimento, o asyncio fornece um modo de depuração.

Há várias maneiras de habilitar o modo de depuração do asyncio:

   * Definindo a variável de ambiente *note PYTHONASYNCIODEBUG: 1ed2.
     como ‘1’.

   * Usando o *note Modo de Desenvolvimento do Python: 1f8.

   * Passando ‘debug=True’ para *note asyncio.run(): 47c.

   * Chamando *note loop.set_debug(): dea.

Além de habilitar o modo de depuração, considere também:

   * setting the log level of the *note asyncio logger: 35fc. to *note
     logging.DEBUG: 2e3d, for example the following snippet of code can
     be run at startup of the application:

          logging.basicConfig(level=logging.DEBUG)

   * configurando o módulo *note warnings: 112. para exibir avisos *note
     ResourceWarning: 244.  Uma forma de fazer isso é usando a opção de
     linha de comando: *note -W: 8cd. ‘default’.

Quando o modo de depuração está habilitado:

   * Muitas APIs do asyncio que não são thread-safe (como os métodos
     *note loop.call_soon(): b17. e *note loop.call_at(): b19.) levantam
     uma exceção se forem chamadas a partir de uma thread incorreta.

   * O tempo de execução de um seletor de E/S é registrado se demorar
     muito para executar a operação E/S.

   * Funções de retorno demorando mais do que 100 milissegundos são
     registradas.  O atributo *note loop.slow_callback_duration: 3568.
     pode ser usado para definir a duração de execução mínima em
     segundos para se considerada “devagar”.


File: python.info,  Node: Concorrência e Múltiplas Threads,  Next: Executando código bloqueante,  Prev: Modo de Depuração,  Up: Desenvolvendo com asyncio

5.19.1.131 Concorrência e Múltiplas Threads
...........................................

Um laço de eventos é executado em uma thread (geralmente a thread
principal) e executa todos as funções de retorno e Tasks nessa mesma
thread.  Enquanto uma Task está em execução no laço de eventos, nenhuma
outra Task pode ser executada na mesma thread.  Quando uma Task executa
uma expressão ‘await’, a Task em execução é suspensa, e o laço de
eventos passa a executar a próxima Task.

Para agendar uma *note callback: 2ad2. de outra thread do SO, o método
*note loop.call_soon_threadsafe(): b18. deve ser usado.  Exemplo:

     loop.call_soon_threadsafe(callback, *args)

Quase todos os objetos do asyncio não são seguros para threads, o que
normalmente não é um problema, a menos que exista código que funcione
com eles fora de uma Task ou de um callback.  Se houver a necessidade de
esse tipo de código chamar uma API de baixo nível do asyncio, o método
*note loop.call_soon_threadsafe(): b18. deve ser usado, por exemplo:

     loop.call_soon_threadsafe(fut.cancel)

Para agendar um objeto corrotina a partir de uma thread diferente do
sistema operacional, a função *note run_coroutine_threadsafe(): 886.
deve ser usada.  Ela retorna um *note concurrent.futures.Future: 11f1.
para acessar o resultado:

     async def coro_func():
          return await asyncio.sleep(1, 42)

     # Later in another OS thread:

     future = asyncio.run_coroutine_threadsafe(coro_func(), loop)
     # Wait for the result:
     result = future.result()

Para manipular sinais, o laço de eventos deve ser executado na thread
principal.

The *note loop.run_in_executor(): 8ef. method can be used with a *note
concurrent.futures.ThreadPoolExecutor: 742. to execute blocking code in
a different OS thread without blocking the OS thread that the event loop
runs in.

There is currently no way to schedule coroutines or callbacks directly
from a different process (such as one started with *note
multiprocessing: 94.).  The *note Métodos do laço de eventos: 353d.
section lists APIs that can read from pipes and watch file descriptors
without blocking the event loop.  In addition, asyncio’s *note
Subprocess: 3478. APIs provide a way to start a process and communicate
with it from the event loop.  Lastly, the aforementioned *note
loop.run_in_executor(): 8ef. method can also be used with a *note
concurrent.futures.ProcessPoolExecutor: 8f4. to execute code in a
different process.


File: python.info,  Node: Executando código bloqueante,  Next: Gerando logs<3>,  Prev: Concorrência e Múltiplas Threads,  Up: Desenvolvendo com asyncio

5.19.1.132 Executando código bloqueante
.......................................

O código bloqueante (vinculada à CPU) não deve ser chamado diretamente.
Por exemplo, se uma função executa um cálculo pesado de CPU durante 1
segundo, todas as Tasks concorrentes do asyncio e as operações de E/S
serão atrasadas por 1 segundo.

An executor can be used to run a task in a different thread or even in a
different process to avoid blocking the OS thread with the event loop.
See the *note loop.run_in_executor(): 8ef. method for more details.


File: python.info,  Node: Gerando logs<3>,  Next: Detectar corrotinas nunca aguardadas,  Prev: Executando código bloqueante,  Up: Desenvolvendo com asyncio

5.19.1.133 Gerando logs
.......................

asyncio usa o módulo *note logging: 87. e todo registro é feito via o
registrador ‘"asyncio"’.

O nível padrão de log é *note logging.INFO: 2e3b, que pode ser
facilmente ajustado:

     logging.getLogger("asyncio").setLevel(logging.WARNING)

Logging de rede pode bloquear o laço de eventos.  Recomenda-se usar uma
thread separada para lidar com os logs ou usar E/S não bloqueante.  Por
exemplo, veja *note Dealing with handlers that block: 3601.


File: python.info,  Node: Detectar corrotinas nunca aguardadas,  Next: Detectar exceções nunca recuperadas,  Prev: Gerando logs<3>,  Up: Desenvolvendo com asyncio

5.19.1.134 Detectar corrotinas nunca aguardadas
...............................................

Quando uma função de corrotina é chamada, mas não é aguardada (por
exemplo, ‘coro()’ em vez de ‘await coro()’) ou a corrotina não é
agendada com *note asyncio.create_task(): 1bf, o asyncio emitirá um
*note RuntimeWarning: 1bd.:

     import asyncio

     async def test():
         print("never scheduled")

     async def main():
         test()

     asyncio.run(main())

Saída:

     test.py:7: RuntimeWarning: coroutine 'test' was never awaited
       test()

Saída no modo de depuração:

     test.py:7: RuntimeWarning: coroutine 'test' was never awaited
     Coroutine created at (most recent call last)
       File "../t.py", line 9, in <module>
         asyncio.run(main(), debug=True)

       < .. >

       File "../t.py", line 7, in main
         test()
       test()

A correção usual é aguardar a corrotina ou chamar a função *note
asyncio.create_task(): 1bf.:

     async def main():
         await test()


File: python.info,  Node: Detectar exceções nunca recuperadas,  Prev: Detectar corrotinas nunca aguardadas,  Up: Desenvolvendo com asyncio

5.19.1.135 Detectar exceções nunca recuperadas
..............................................

Se um *note Future.set_exception(): c99. é chamado, mas o objeto Future
nunca é aguardado, a exceção nunca será propagada para o código do
usuário.  Nesse caso, o asyncio emitirá uma mensagem de log quando o
objeto Future for coletado pela coleta de lixo.

Exemplo de uma exceção não tratada:

     import asyncio

     async def bug():
         raise Exception("not consumed")

     async def main():
         asyncio.create_task(bug())

     asyncio.run(main())

Saída:

     Task exception was never retrieved
     future: <Task finished coro=<bug() done, defined at test.py:3>
       exception=Exception('not consumed')>

     Traceback (most recent call last):
       File "test.py", line 4, in bug
         raise Exception("not consumed")
     Exception: not consumed

*note Enable the debug mode: 1ed3. to get the traceback where the task
was created:

     asyncio.run(main(), debug=True)

Saída no modo de depuração:

     Task exception was never retrieved
     future: <Task finished coro=<bug() done, defined at test.py:3>
         exception=Exception('not consumed') created at asyncio/tasks.py:321>

     source_traceback: Object created at (most recent call last):
       File "../t.py", line 9, in <module>
         asyncio.run(main(), debug=True)

     < .. >

     Traceback (most recent call last):
       File "../t.py", line 4, in bug
         raise Exception("not consumed")
     Exception: not consumed

     Nota: O código-fonte para o asyncio pode ser encontrado em
     Lib/asyncio/(1).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/asyncio/


File: python.info,  Node: socket — Interface de rede de baixo nível,  Next: ssl — Invólucro de TLS/SSL para objetos socket,  Prev: asyncio — E/S assíncrona,  Up: Comunicação em Rede e Interprocesso

5.19.2 ‘socket’ — Interface de rede de baixo nível
--------------------------------------------------

'Código-fonte:' Lib/socket.py(1)

__________________________________________________________________

Este módulo provê acesso à interface de 'soquete' do BSD. Está
disponível em todos os sistemas modernos Unix, Windows, MacOS e
provavelmente outras plataformas.

     Nota: Algum comportamento pode depender da plataforma, pois as
     chamadas são feitas para as APIs de soquete do sistema operacional.

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

A interface Python é uma transliteração direta da chamada de sistema e
interface de biblioteca de soquetes do Unix para o estilo orientado a
objetos do Python: a função *note socket(): dc9. retorna um 'objeto
socket' cujos métodos implementam as diversas chamadas de sistema de
soquetes.  Os tipos de parâmetro são consideravelmente de nível mais
alto que os da interface em C: assim como as operações ‘read()’ e
‘write()’ em arquivos Python, a alocação de buffer em operações de
recebimento é automática, e o comprimento do buffer é implícito em
operações de envio.

Ver também
..........

Módulo *note socketserver: cd.

     Classes que simplificam a escrita de servidores de rede.

Módulo *note ssl: d0.

     Um invólucro de TLS/SSL para objetos socket.

* Menu:

* Famílias de soquete::
* Conteúdo do módulo: Conteúdo do módulo<4>.
* Socket Objects::
* Notas sobre tempo limite de soquete::
* Exemplo: Exemplo<7>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/socket.py


File: python.info,  Node: Famílias de soquete,  Next: Conteúdo do módulo<4>,  Up: socket — Interface de rede de baixo nível

5.19.2.1 Famílias de soquete
............................

Dependendo do sistema e das opções de construção, várias famílias de
soquetes são suportadas por este módulo.

O formato de endereço requerido por um objeto socket em particular é
selecionado automaticamente com base na família de endereços
especificada quando o objeto socket foi criado.  Endereços de socket são
representados da seguinte forma:

   - O endereço de um socket *note AF_UNIX: 193a. vinculado a um nó do
     sistema de arquivos é representado como uma string, usando a
     codificação do sistema de arquivos e o tratador de erros
     ‘'surrogateescape'’ (veja PEP 383(1)).  Um endereço no espaço de
     nomes abstrato do Linux é retornado como um *note objeto bytes ou
     similar: d4f. com um byte nulo inicial; observe que os sockets
     neste espaço de nomes podem se comunicar com sockets normais do
     sistema de arquivos, então programas destinados a rodar no Linux
     podem precisar lidar com ambos os tipos de endereço.  Uma string ou
     um objeto bytes ou similar pode ser usado para qualquer tipo de
     endereço ao passá-lo como um argumento.

     Alterado na versão 3.3: Previously, *note AF_UNIX: 193a. socket
     paths were assumed to use UTF-8 encoding.

     Alterado na versão 3.5: Writable *note bytes-like object: d4f. is
     now accepted.

   - A pair ‘(host, port)’ is used for the *note AF_INET: 1938. address
     family, where 'host' is a string representing either a hostname in
     internet domain notation like ‘'daring.cwi.nl'’ or an IPv4 address
     like ‘'100.50.200.5'’, and 'port' is an integer.

        - For IPv4 addresses, two special forms are accepted instead of
          a host address: ‘''’ represents ‘INADDR_ANY’, which is used to
          bind to all interfaces, and the string ‘'<broadcast>'’
          represents ‘INADDR_BROADCAST’.  This behavior is not
          compatible with IPv6, therefore, you may want to avoid these
          if you intend to support IPv6 with your Python programs.

   - For *note AF_INET6: 1939. address family, a four-tuple ‘(host,
     port, flowinfo, scope_id)’ is used, where 'flowinfo' and 'scope_id'
     represent the ‘sin6_flowinfo’ and ‘sin6_scope_id’ members in
     ‘struct sockaddr_in6’ in C. For *note socket: cc. module methods,
     'flowinfo' and 'scope_id' can be omitted just for backward
     compatibility.  Note, however, omission of 'scope_id' can cause
     problems in manipulating scoped IPv6 addresses.

     Alterado na versão 3.7: For multicast addresses (with 'scope_id'
     meaningful) 'address' may not contain ‘%scope_id’ (or ‘zone id’)
     part.  This information is superfluous and may be safely omitted
     (recommended).

   - ‘AF_NETLINK’ sockets are represented as pairs ‘(pid, groups)’.

   - Linux-only support for TIPC is available using the ‘AF_TIPC’
     address family.  TIPC is an open, non-IP based networked protocol
     designed for use in clustered computer environments.  Addresses are
     represented by a tuple, and the fields depend on the address type.
     The general tuple form is ‘(addr_type, v1, v2, v3 [, scope])’,
     where:

        - 'addr_type' is one of ‘TIPC_ADDR_NAMESEQ’, ‘TIPC_ADDR_NAME’,
          or ‘TIPC_ADDR_ID’.

        - 'scope' is one of ‘TIPC_ZONE_SCOPE’, ‘TIPC_CLUSTER_SCOPE’, and
          ‘TIPC_NODE_SCOPE’.

        - If 'addr_type' is ‘TIPC_ADDR_NAME’, then 'v1' is the server
          type, 'v2' is the port identifier, and 'v3' should be 0.

          If 'addr_type' is ‘TIPC_ADDR_NAMESEQ’, then 'v1' is the server
          type, 'v2' is the lower port number, and 'v3' is the upper
          port number.

          If 'addr_type' is ‘TIPC_ADDR_ID’, then 'v1' is the node, 'v2'
          is the reference, and 'v3' should be set to 0.

   - A tuple ‘(interface, )’ is used for the *note AF_CAN: 360a. address
     family, where 'interface' is a string representing a network
     interface name like ‘'can0'’.  The network interface name ‘''’ can
     be used to receive packets from all network interfaces of this
     family.

        - *note CAN_ISOTP: 360b. protocol require a tuple ‘(interface,
          rx_addr, tx_addr)’ where both additional parameters are
          unsigned long integer that represent a CAN identifier
          (standard or extended).

        - *note CAN_J1939: 939. protocol require a tuple ‘(interface,
          name, pgn, addr)’ where additional parameters are 64-bit
          unsigned integer representing the ECU name, a 32-bit unsigned
          integer representing the Parameter Group Number (PGN), and an
          8-bit integer representing the address.

   - A string or a tuple ‘(id, unit)’ is used for the ‘SYSPROTO_CONTROL’
     protocol of the ‘PF_SYSTEM’ family.  The string is the name of a
     kernel control using a dynamically assigned ID. The tuple can be
     used if ID and unit number of the kernel control are known or if a
     registered ID is used.

     Adicionado na versão 3.3.

   - ‘AF_BLUETOOTH’ supports the following protocols and address
     formats:

        - ‘BTPROTO_L2CAP’ accepts ‘(bdaddr, psm)’ where ‘bdaddr’ is the
          Bluetooth address as a string and ‘psm’ is an integer.

        - ‘BTPROTO_RFCOMM’ accepts ‘(bdaddr, channel)’ where ‘bdaddr’ is
          the Bluetooth address as a string and ‘channel’ is an integer.

        - ‘BTPROTO_HCI’ accepts a format that depends on your OS.

             - On Linux it accepts a tuple ‘(device_id,)’ where
               ‘device_id’ is an integer specifying the number of the
               Bluetooth device.

             - On FreeBSD, NetBSD and DragonFly BSD it accepts ‘bdaddr’
               where ‘bdaddr’ is the Bluetooth address as a string.

          Alterado na versão 3.2: NetBSD and DragonFlyBSD support added.

          Alterado na versão 3.13.3: FreeBSD support added.

        - ‘BTPROTO_SCO’ accepts ‘bdaddr’ where ‘bdaddr’ is the Bluetooth
          address as a string or a *note bytes: 1c2. object.  (ex.
          ‘'12:23:34:45:56:67'’ or ‘b'12:23:34:45:56:67'’) This protocol
          is not supported under FreeBSD.

   - *note AF_ALG: cf7. is a Linux-only socket based interface to Kernel
     cryptography.  An algorithm socket is configured with a tuple of
     two to four elements ‘(type, name [, feat [, mask]])’, where:

        - 'type' is the algorithm type as string, e.g.  ‘aead’, ‘hash’,
          ‘skcipher’ or ‘rng’.

        - 'name' is the algorithm name and operation mode as string,
          e.g.  ‘sha256’, ‘hmac(sha256)’, ‘cbc(aes)’ or
          ‘drbg_nopr_ctr_aes256’.

        - 'feat' and 'mask' are unsigned 32bit integers.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.38.

     Some algorithm types require more recent Kernels.

     Adicionado na versão 3.6.

   - *note AF_VSOCK: b8c. allows communication between virtual machines
     and their hosts.  The sockets are represented as a ‘(CID, port)’
     tuple where the context ID or CID and port are integers.

     *note Disponibilidade: 1ed8.: Linux >= 3.9

     See ‘vsock(7)(2)’

     Adicionado na versão 3.7.

   - *note AF_PACKET: 360c. is a low-level interface directly to network
     devices.  The addresses are represented by the tuple ‘(ifname,
     proto[, pkttype[, hatype[, addr]]])’ where:

        - 'ifname' - String specifying the device name.

        - 'proto' - The Ethernet protocol number.  May be *note
          ETH_P_ALL: 18ab. to capture all protocols, one of the *note
          ETHERTYPE_* constants: 18ac. or any other Ethernet protocol
          number.

        - 'pkttype' - Optional integer specifying the packet type:

             - ‘PACKET_HOST’ (the default) - Packet addressed to the
               local host.

             - ‘PACKET_BROADCAST’ - Physical-layer broadcast packet.

             - ‘PACKET_MULTICAST’ - Packet sent to a physical-layer
               multicast address.

             - ‘PACKET_OTHERHOST’ - Packet to some other host that has
               been caught by a device driver in promiscuous mode.

             - ‘PACKET_OUTGOING’ - Packet originating from the local
               host that is looped back to a packet socket.

        - 'hatype' - Optional integer specifying the ARP hardware
          address type.

        - 'addr' - Optional bytes-like object specifying the hardware
          physical address, whose interpretation depends on the device.

     *note Disponibilidade: 1ed8.: Linux >= 2.2.

   - *note AF_QIPCRTR: 360d. is a Linux-only socket based interface for
     communicating with services running on co-processors in Qualcomm
     platforms.  The address family is represented as a ‘(node, port)’
     tuple where the 'node' and 'port' are non-negative integers.

     *note Disponibilidade: 1ed8.: Linux >= 4.7.

     Adicionado na versão 3.8.

   - ‘IPPROTO_UDPLITE’ is a variant of UDP which allows you to specify
     what portion of a packet is covered with the checksum.  It adds two
     socket options that you can change.
     ‘self.setsockopt(IPPROTO_UDPLITE, UDPLITE_SEND_CSCOV, length)’ will
     change what portion of outgoing packets are covered by the checksum
     and ‘self.setsockopt(IPPROTO_UDPLITE, UDPLITE_RECV_CSCOV, length)’
     will filter out packets which cover too little of their data.  In
     both cases ‘length’ should be in ‘range(8, 2**16, 8)’.

     Such a socket should be constructed with ‘socket(AF_INET,
     SOCK_DGRAM, IPPROTO_UDPLITE)’ for IPv4 or ‘socket(AF_INET6,
     SOCK_DGRAM, IPPROTO_UDPLITE)’ for IPv6.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.20, FreeBSD >= 10.1

     Adicionado na versão 3.9.

   - *note AF_HYPERV: 360e. is a Windows-only socket based interface for
     communicating with Hyper-V hosts and guests.  The address family is
     represented as a ‘(vm_id, service_id)’ tuple where the ‘vm_id’ and
     ‘service_id’ are UUID strings.

     The ‘vm_id’ is the virtual machine identifier or a set of known
     VMID values if the target is not a specific virtual machine.  Known
     VMID constants defined on ‘socket’ are:

        - ‘HV_GUID_ZERO’

        - ‘HV_GUID_BROADCAST’

        - ‘HV_GUID_WILDCARD’ - Used to bind on itself and accept
          connections from all partitions.

        - ‘HV_GUID_CHILDREN’ - Used to bind on itself and accept
          connection from child partitions.

        - ‘HV_GUID_LOOPBACK’ - Used as a target to itself.

        - ‘HV_GUID_PARENT’ - When used as a bind accepts connection from
          the parent partition.  When used as an address target it will
          connect to the parent partition.

     The ‘service_id’ is the service identifier of the registered
     service.

     Adicionado na versão 3.12.

If you use a hostname in the 'host' portion of IPv4/v6 socket address,
the program may show a nondeterministic behavior, as Python uses the
first address returned from the DNS resolution.  The socket address will
be resolved differently into an actual IPv4/v6 address, depending on the
results from DNS resolution and/or the host configuration.  For
deterministic behavior use a numeric address in 'host' portion.

All errors raise exceptions.  The normal exceptions for invalid argument
types and out-of-memory conditions can be raised.  Errors related to
socket or address semantics raise *note OSError: 417. or one of its
subclasses.

Non-blocking mode is supported through *note setblocking(): 2d1d.  A
generalization of this based on timeouts is supported through *note
settimeout(): 360f.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0383/

   (2) https://manpages.debian.org/vsock(7)


File: python.info,  Node: Conteúdo do módulo<4>,  Next: Socket Objects,  Prev: Famílias de soquete,  Up: socket — Interface de rede de baixo nível

5.19.2.2 Conteúdo do módulo
...........................

The module *note socket: cc. exports the following elements.

* Menu:

* Exceções: Exceções<15>.
* Constantes: Constantes<8>.
* Funções: Funções<8>.


File: python.info,  Node: Exceções<15>,  Next: Constantes<8>,  Up: Conteúdo do módulo<4>

5.19.2.3 Exceções
.................

 -- Exceção: socket.error

     Um apelido descontinuado de *note OSError: 417.

     Alterado na versão 3.3: Seguindo a PEP 3151(1), esta classe foi
     transformada em um apelido de *note OSError: 417.

 -- Exceção: socket.herror

     A subclass of *note OSError: 417, this exception is raised for
     address-related errors, i.e.  for functions that use 'h_errno' in
     the POSIX C API, including *note gethostbyname_ex(): 1a11. and
     *note gethostbyaddr(): 1a10.  The accompanying value is a pair
     ‘(h_errno, string)’ representing an error returned by a library
     call.  'h_errno' is a numeric value, while 'string' represents the
     description of 'h_errno', as returned by the ‘hstrerror()’ C
     function.

     Alterado na versão 3.3: This class was made a subclass of *note
     OSError: 417.

 -- Exceção: socket.gaierror

     A subclass of *note OSError: 417, this exception is raised for
     address-related errors by *note getaddrinfo(): 184b. and *note
     getnameinfo(): 17b6.  The accompanying value is a pair ‘(error,
     string)’ representing an error returned by a library call.
     'string' represents the description of 'error', as returned by the
     ‘gai_strerror()’ C function.  The numeric 'error' value will match
     one of the ‘EAI_*’ constants defined in this module.

     Alterado na versão 3.3: This class was made a subclass of *note
     OSError: 417.

 -- Exceção: socket.timeout

     A deprecated alias of *note TimeoutError: 838.

     A subclass of *note OSError: 417, this exception is raised when a
     timeout occurs on a socket which has had timeouts enabled via a
     prior call to *note settimeout(): 360f. (or implicitly through
     *note setdefaulttimeout(): 3613.).  The accompanying value is a
     string whose value is currently always “timed out”.

     Alterado na versão 3.3: This class was made a subclass of *note
     OSError: 417.

     Alterado na versão 3.10: Esta classe foi feita como um apelido de
     *note TimeoutError: 838.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3151/


File: python.info,  Node: Constantes<8>,  Next: Funções<8>,  Prev: Exceções<15>,  Up: Conteúdo do módulo<4>

5.19.2.4 Constantes
...................

The AF_* and SOCK_* constants are now ‘AddressFamily’ and ‘SocketKind’
*note IntEnum: d00. collections.

Adicionado na versão 3.4.

 -- Dado: socket.AF_UNIX
 -- Dado: socket.AF_INET
 -- Dado: socket.AF_INET6

     These constants represent the address (and protocol) families, used
     for the first argument to *note socket(): dc9.  If the *note
     AF_UNIX: 193a. constant is not defined then this protocol is
     unsupported.  More constants may be available depending on the
     system.

 -- Dado: socket.AF_UNSPEC

     *note AF_UNSPEC: 3551. means that *note getaddrinfo(): 184b. should
     return socket addresses for any address family (either IPv4, IPv6,
     or any other) that can be used.

 -- Dado: socket.SOCK_STREAM
 -- Dado: socket.SOCK_DGRAM
 -- Dado: socket.SOCK_RAW
 -- Dado: socket.SOCK_RDM
 -- Dado: socket.SOCK_SEQPACKET

     These constants represent the socket types, used for the second
     argument to *note socket(): dc9.  More constants may be available
     depending on the system.  (Only *note SOCK_STREAM: 1337. and *note
     SOCK_DGRAM: 1336. appear to be generally useful.)

 -- Dado: socket.SOCK_CLOEXEC
 -- Dado: socket.SOCK_NONBLOCK

     These two constants, if defined, can be combined with the socket
     types and allow you to set some flags atomically (thus avoiding
     possible race conditions and the need for separate calls).

     Ver também
     ..........

     Secure File Descriptor Handling(1) for a more thorough explanation.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.27.

     Adicionado na versão 3.2.

 -- Dado: SO_*
 -- Dado: socket.SOMAXCONN

 -- Dado: MSG_*

 -- Dado: SOL_*

 -- Dado: SCM_*

 -- Dado: IPPROTO_*

 -- Dado: IPPORT_*

 -- Dado: INADDR_*

 -- Dado: IP_*

 -- Dado: IPV6_*

 -- Dado: EAI_*

 -- Dado: AI_*

 -- Dado: NI_*

 -- Dado: TCP_*

     Many constants of these forms, documented in the Unix documentation
     on sockets and/or the IP protocol, are also defined in the socket
     module.  They are generally used in arguments to the *note
     setsockopt(): cf6. and *note getsockopt(): cf5. methods of socket
     objects.  In most cases, only those symbols that are defined in the
     Unix header files are defined; for a few symbols, default values
     are provided.

     Alterado na versão 3.6: ‘SO_DOMAIN’, ‘SO_PROTOCOL’, ‘SO_PEERSEC’,
     ‘SO_PASSSEC’, ‘TCP_USER_TIMEOUT’, ‘TCP_CONGESTION’ were added.

     Alterado na versão 3.6.5: On Windows, ‘TCP_FASTOPEN’, ‘TCP_KEEPCNT’
     appear if run-time Windows supports.

     Alterado na versão 3.7: ‘TCP_NOTSENT_LOWAT’ was added.

     On Windows, ‘TCP_KEEPIDLE’, ‘TCP_KEEPINTVL’ appear if run-time
     Windows supports.

     Alterado na versão 3.10: ‘IP_RECVTOS’ was added.  Added
     ‘TCP_KEEPALIVE’.  On MacOS this constant can be used in the same
     way that ‘TCP_KEEPIDLE’ is used on Linux.

     Alterado na versão 3.11: Added ‘TCP_CONNECTION_INFO’.  On MacOS
     this constant can be used in the same way that ‘TCP_INFO’ is used
     on Linux and BSD.

     Alterado na versão 3.12: Added ‘SO_RTABLE’ and ‘SO_USER_COOKIE’.
     On OpenBSD and FreeBSD respectively those constants can be used in
     the same way that ‘SO_MARK’ is used on Linux.  Also added missing
     TCP socket options from Linux: ‘TCP_MD5SIG’,
     ‘TCP_THIN_LINEAR_TIMEOUTS’, ‘TCP_THIN_DUPACK’, ‘TCP_REPAIR’,
     ‘TCP_REPAIR_QUEUE’, ‘TCP_QUEUE_SEQ’, ‘TCP_REPAIR_OPTIONS’,
     ‘TCP_TIMESTAMP’, ‘TCP_CC_INFO’, ‘TCP_SAVE_SYN’, ‘TCP_SAVED_SYN’,
     ‘TCP_REPAIR_WINDOW’, ‘TCP_FASTOPEN_CONNECT’, ‘TCP_ULP’,
     ‘TCP_MD5SIG_EXT’, ‘TCP_FASTOPEN_KEY’, ‘TCP_FASTOPEN_NO_COOKIE’,
     ‘TCP_ZEROCOPY_RECEIVE’, ‘TCP_INQ’, ‘TCP_TX_DELAY’.  Added
     ‘IP_PKTINFO’, ‘IP_UNBLOCK_SOURCE’, ‘IP_BLOCK_SOURCE’,
     ‘IP_ADD_SOURCE_MEMBERSHIP’, ‘IP_DROP_SOURCE_MEMBERSHIP’.

     Alterado na versão 3.13: Added ‘SO_BINDTOIFINDEX’.  On Linux this
     constant can be used in the same way that ‘SO_BINDTODEVICE’ is
     used, but with the index of a network interface instead of its
     name.

 -- Dado: socket.AF_CAN
 -- Dado: socket.PF_CAN

 -- Dado: SOL_CAN_*

 -- Dado: CAN_*

     Many constants of these forms, documented in the Linux
     documentation, are also defined in the socket module.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.25, NetBSD >= 8.

     Adicionado na versão 3.3.

     Alterado na versão 3.11: NetBSD support was added.

     Alterado na versão 3.13.4: Restored missing ‘CAN_RAW_ERR_FILTER’ on
     Linux.

 -- Dado: socket.CAN_BCM

 -- Dado: CAN_BCM_*

     CAN_BCM, in the CAN protocol family, is the broadcast manager (BCM)
     protocol.  Broadcast manager constants, documented in the Linux
     documentation, are also defined in the socket module.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.25.

          Nota: The ‘CAN_BCM_CAN_FD_FRAME’ flag is only available on
          Linux >= 4.8.

     Adicionado na versão 3.4.

 -- Dado: socket.CAN_RAW_FD_FRAMES

     Enables CAN FD support in a CAN_RAW socket.  This is disabled by
     default.  This allows your application to send both CAN and CAN FD
     frames; however, you must accept both CAN and CAN FD frames when
     reading from the socket.

     This constant is documented in the Linux documentation.

     *note Disponibilidade: 1ed8.: Linux >= 3.6.

     Adicionado na versão 3.5.

 -- Dado: socket.CAN_RAW_JOIN_FILTERS

     Joins the applied CAN filters such that only CAN frames that match
     all given CAN filters are passed to user space.

     This constant is documented in the Linux documentation.

     *note Disponibilidade: 1ed8.: Linux >= 4.1.

     Adicionado na versão 3.9.

 -- Dado: socket.CAN_ISOTP

     CAN_ISOTP, in the CAN protocol family, is the ISO-TP (ISO 15765-2)
     protocol.  ISO-TP constants, documented in the Linux documentation.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.25.

     Adicionado na versão 3.7.

 -- Dado: socket.CAN_J1939

     CAN_J1939, in the CAN protocol family, is the SAE J1939 protocol.
     J1939 constants, documented in the Linux documentation.

     *note Disponibilidade: 1ed8.: Linux >= 5.4.

     Adicionado na versão 3.9.

 -- Dado: socket.AF_DIVERT
 -- Dado: socket.PF_DIVERT

     These two constants, documented in the FreeBSD divert(4) manual
     page, are also defined in the socket module.

     *note Disponibilidade: 1ed8.: FreeBSD >= 14.0.

     Adicionado na versão 3.12.

 -- Dado: socket.AF_PACKET
 -- Dado: socket.PF_PACKET

 -- Dado: PACKET_*

     Many constants of these forms, documented in the Linux
     documentation, are also defined in the socket module.

     *note Disponibilidade: 1ed8.: Linux >= 2.2.

 -- Dado: socket.ETH_P_ALL

     ‘ETH_P_ALL’ can be used in the *note socket: dc9. constructor as
     'proto' for the *note AF_PACKET: 360c. family in order to capture
     every packet, regardless of protocol.

     For more information, see the ‘packet(7)(2)’ manpage.

     *note Disponibilidade: 1ed8.: Linux.

     Adicionado na versão 3.12.

 -- Dado: socket.AF_RDS
 -- Dado: socket.PF_RDS
 -- Dado: socket.SOL_RDS

 -- Dado: RDS_*

     Many constants of these forms, documented in the Linux
     documentation, are also defined in the socket module.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.30.

     Adicionado na versão 3.3.

 -- Dado: socket.SIO_RCVALL
 -- Dado: socket.SIO_KEEPALIVE_VALS
 -- Dado: socket.SIO_LOOPBACK_FAST_PATH

 -- Dado: RCVALL_*

     Constants for Windows’ WSAIoctl().  The constants are used as
     arguments to the *note ioctl(): cf3. method of socket objects.

     Alterado na versão 3.6: ‘SIO_LOOPBACK_FAST_PATH’ was added.

 -- Dado: TIPC_*

     TIPC related constants, matching the ones exported by the C socket
     API. See the TIPC documentation for more information.

 -- Dado: socket.AF_ALG
 -- Dado: socket.SOL_ALG

 -- Dado: ALG_*

     Constants for Linux Kernel cryptography.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.38.

     Adicionado na versão 3.6.

 -- Dado: socket.AF_VSOCK
 -- Dado: socket.IOCTL_VM_SOCKETS_GET_LOCAL_CID

 -- Dado: VMADDR*

 -- Dado: SO_VM*

     Constants for Linux host/guest communication.

     *note Disponibilidade: 1ed8.: Linux >= 4.8.

     Adicionado na versão 3.7.

 -- Dado: socket.AF_LINK

     *note Disponibilidade: 1ed8.: BSD, macOS.

     Adicionado na versão 3.4.

 -- Dado: socket.has_ipv6

     This constant contains a boolean value which indicates if IPv6 is
     supported on this platform.

 -- Dado: socket.BDADDR_ANY
 -- Dado: socket.BDADDR_LOCAL

     These are string constants containing Bluetooth addresses with
     special meanings.  For example, *note BDADDR_ANY: 3624. can be used
     to indicate any address when specifying the binding socket with
     ‘BTPROTO_RFCOMM’.

 -- Dado: socket.HCI_FILTER
 -- Dado: socket.HCI_TIME_STAMP
 -- Dado: socket.HCI_DATA_DIR

     For use with ‘BTPROTO_HCI’.  ‘HCI_FILTER’ is only available on
     Linux and FreeBSD. ‘HCI_TIME_STAMP’ and ‘HCI_DATA_DIR’ are only
     available on Linux.

 -- Dado: socket.AF_QIPCRTR

     Constant for Qualcomm’s IPC router protocol, used to communicate
     with service providing remote processors.

     *note Disponibilidade: 1ed8.: Linux >= 4.7.

 -- Dado: socket.SCM_CREDS2
 -- Dado: socket.LOCAL_CREDS
 -- Dado: socket.LOCAL_CREDS_PERSISTENT

     LOCAL_CREDS and LOCAL_CREDS_PERSISTENT can be used with SOCK_DGRAM,
     SOCK_STREAM sockets, equivalent to Linux/DragonFlyBSD SO_PASSCRED,
     while LOCAL_CREDS sends the credentials at first read,
     LOCAL_CREDS_PERSISTENT sends for each read, SCM_CREDS2 must be then
     used for the latter for the message type.

     Adicionado na versão 3.11.

     *note Disponibilidade: 1ed8.: FreeBSD.

 -- Dado: socket.SO_INCOMING_CPU

     Constant to optimize CPU locality, to be used in conjunction with
     ‘SO_REUSEPORT’.

     Adicionado na versão 3.11.

     *note Disponibilidade: 1ed8.: Linux >= 3.9

 -- Dado: socket.AF_HYPERV
 -- Dado: socket.HV_PROTOCOL_RAW
 -- Dado: socket.HVSOCKET_CONNECT_TIMEOUT
 -- Dado: socket.HVSOCKET_CONNECT_TIMEOUT_MAX
 -- Dado: socket.HVSOCKET_CONNECTED_SUSPEND
 -- Dado: socket.HVSOCKET_ADDRESS_FLAG_PASSTHRU
 -- Dado: socket.HV_GUID_ZERO
 -- Dado: socket.HV_GUID_WILDCARD
 -- Dado: socket.HV_GUID_BROADCAST
 -- Dado: socket.HV_GUID_CHILDREN
 -- Dado: socket.HV_GUID_LOOPBACK
 -- Dado: socket.HV_GUID_PARENT

     Constants for Windows Hyper-V sockets for host/guest
     communications.

     *note Disponibilidade: 1ed8.: Windows.

     Adicionado na versão 3.12.

 -- Dado: socket.ETHERTYPE_ARP
 -- Dado: socket.ETHERTYPE_IP
 -- Dado: socket.ETHERTYPE_IPV6
 -- Dado: socket.ETHERTYPE_VLAN

     IEEE 802.3 protocol number(3).  constants.

     *note Disponibilidade: 1ed8.: Linux, FreeBSD, macOS.

     Adicionado na versão 3.12.

 -- Dado: socket.SHUT_RD
 -- Dado: socket.SHUT_WR
 -- Dado: socket.SHUT_RDWR

     These constants are used by the *note shutdown(): 363f. method of
     socket objects.

     *note Disponibilidade: 1ed8.: not WASI.

   ---------- Footnotes ----------

   (1) https://udrepper.livejournal.com/20407.html

   (2) https://manpages.debian.org/packet(7)

   (3) 
https://www.iana.org/assignments/ieee-802-numbers/ieee-802-numbers.txt


File: python.info,  Node: Funções<8>,  Prev: Constantes<8>,  Up: Conteúdo do módulo<4>

5.19.2.5 Funções
................

* Menu:

* Criação de sockets::
* Outras funções: Outras funções<2>.


File: python.info,  Node: Criação de sockets,  Next: Outras funções<2>,  Up: Funções<8>

5.19.2.6 Criação de sockets
...........................

The following functions all create *note socket objects: 3642.

 -- Classe: socket.socket (family=AF_INET, type=SOCK_STREAM, proto=0,
          fileno=None)

     Create a new socket using the given address family, socket type and
     protocol number.  The address family should be *note AF_INET: 1938.
     (the default), *note AF_INET6: 1939, *note AF_UNIX: 193a, *note
     AF_CAN: 360a, *note AF_PACKET: 360c, or *note AF_RDS: 361c.  The
     socket type should be *note SOCK_STREAM: 1337. (the default), *note
     SOCK_DGRAM: 1336, *note SOCK_RAW: 3615. or perhaps one of the other
     ‘SOCK_’ constants.  The protocol number is usually zero and may be
     omitted or in the case where the address family is *note AF_CAN:
     360a. the protocol should be one of ‘CAN_RAW’, *note CAN_BCM: fd7,
     *note CAN_ISOTP: 360b. or *note CAN_J1939: 939.

     If 'fileno' is specified, the values for 'family', 'type', and
     'proto' are auto-detected from the specified file descriptor.
     Auto-detection can be overruled by calling the function with
     explicit 'family', 'type', or 'proto' arguments.  This only affects
     how Python represents e.g.  the return value of *note
     socket.getpeername(): 3590. but not the actual OS resource.  Unlike
     *note socket.fromfd(): 3643, 'fileno' will return the same socket
     and not a duplicate.  This may help close a detached socket using
     *note socket.close(): b89.

     The newly created socket is *note non-inheritable: f2b.

     Levanta um *note evento de auditoria: 19fa. ‘socket.__new__’ com os
     argumentos ‘self’, ‘family’, ‘type’, ‘protocol’.

     Alterado na versão 3.3: The AF_CAN family was added.  The AF_RDS
     family was added.

     Alterado na versão 3.4: The CAN_BCM protocol was added.

     Alterado na versão 3.4: The returned socket is now non-inheritable.

     Alterado na versão 3.7: The CAN_ISOTP protocol was added.

     Alterado na versão 3.7: When *note SOCK_NONBLOCK: c24. or *note
     SOCK_CLOEXEC: c25. bit flags are applied to 'type' they are
     cleared, and *note socket.type: c26. will not reflect them.  They
     are still passed to the underlying system ‘socket()’ call.
     Therefore,

          sock = socket.socket(
              socket.AF_INET,
              socket.SOCK_STREAM | socket.SOCK_NONBLOCK)

     will still create a non-blocking socket on OSes that support
     ‘SOCK_NONBLOCK’, but ‘sock.type’ will be set to
     ‘socket.SOCK_STREAM’.

     Alterado na versão 3.9: The CAN_J1939 protocol was added.

     Alterado na versão 3.10: The IPPROTO_MPTCP protocol was added.

 -- Função: socket.socketpair ([family[, type[, proto]]])

     Build a pair of connected socket objects using the given address
     family, socket type, and protocol number.  Address family, socket
     type, and protocol number are as for the *note socket(): dc9.
     function above.  The default family is *note AF_UNIX: 193a. if
     defined on the platform; otherwise, the default is *note AF_INET:
     1938.

     The newly created sockets are *note non-inheritable: f2b.

     Alterado na versão 3.2: The returned socket objects now support the
     whole socket API, rather than a subset.

     Alterado na versão 3.4: The returned sockets are now
     non-inheritable.

     Alterado na versão 3.5: Windows support added.

 -- Função: socket.create_connection (address, timeout=GLOBAL_DEFAULT,
          source_address=None, *, all_errors=False)

     Connect to a TCP service listening on the internet 'address' (a
     2-tuple ‘(host, port)’), and return the socket object.  This is a
     higher-level function than *note socket.connect(): dcb.: if 'host'
     is a non-numeric hostname, it will try to resolve it for both *note
     AF_INET: 1938. and *note AF_INET6: 1939, and then try to connect to
     all possible addresses in turn until a connection succeeds.  This
     makes it easy to write clients that are compatible to both IPv4 and
     IPv6.

     Passing the optional 'timeout' parameter will set the timeout on
     the socket instance before attempting to connect.  If no 'timeout'
     is supplied, the global default timeout setting returned by *note
     getdefaulttimeout(): 3644. is used.

     If supplied, 'source_address' must be a 2-tuple ‘(host, port)’ for
     the socket to bind to as its source address before connecting.  If
     host or port are ‘’ or 0 respectively the OS default behavior will
     be used.

     When a connection cannot be created, an exception is raised.  By
     default, it is the exception from the last address in the list.  If
     'all_errors' is ‘True’, it is an *note ExceptionGroup: 1b6.
     containing the errors of all attempts.

     Alterado na versão 3.2: 'source_address' foi adicionado.

     Alterado na versão 3.11: 'all_errors' was added.

 -- Função: socket.create_server (address, *, family=AF_INET,
          backlog=None, reuse_port=False, dualstack_ipv6=False)

     Convenience function which creates a TCP socket bound to 'address'
     (a 2-tuple ‘(host, port)’) and returns the socket object.

     'family' should be either *note AF_INET: 1938. or *note AF_INET6:
     1939.  'backlog' is the queue size passed to *note socket.listen():
     e8d.; if not specified , a default reasonable value is chosen.
     'reuse_port' dictates whether to set the ‘SO_REUSEPORT’ socket
     option.

     If 'dualstack_ipv6' is true, 'family' is *note AF_INET6: 1939. and
     the platform supports it the socket will be able to accept both
     IPv4 and IPv6 connections, else it will raise *note ValueError:
     202.  Most POSIX platforms and Windows are supposed to support this
     functionality.  When this functionality is enabled the address
     returned by *note socket.getpeername(): 3590. when an IPv4
     connection occurs will be an IPv6 address represented as an
     IPv4-mapped IPv6 address.  If 'dualstack_ipv6' is false it will
     explicitly disable this functionality on platforms that enable it
     by default (e.g.  Linux).  This parameter can be used in
     conjunction with *note has_dualstack_ipv6(): a36.:

          import socket

          addr = ("", 8080)  # all interfaces, port 8080
          if socket.has_dualstack_ipv6():
              s = socket.create_server(addr, family=socket.AF_INET6, dualstack_ipv6=True)
          else:
              s = socket.create_server(addr)

          Nota: On POSIX platforms the ‘SO_REUSEADDR’ socket option is
          set in order to immediately reuse previous sockets which were
          bound on the same 'address' and remained in TIME_WAIT state.

     Adicionado na versão 3.8.

 -- Função: socket.has_dualstack_ipv6 ()

     Return ‘True’ if the platform supports creating a TCP socket which
     can handle both IPv4 and IPv6 connections.

     Adicionado na versão 3.8.

 -- Função: socket.fromfd (fd, family, type, proto=0)

     Duplicate the file descriptor 'fd' (an integer as returned by a
     file object’s *note fileno(): 15d0. method) and build a socket
     object from the result.  Address family, socket type and protocol
     number are as for the *note socket(): dc9. function above.  The
     file descriptor should refer to a socket, but this is not checked —
     subsequent operations on the object may fail if the file descriptor
     is invalid.  This function is rarely needed, but can be used to get
     or set socket options on a socket passed to a program as standard
     input or output (such as a server started by the Unix inet daemon).
     The socket is assumed to be in blocking mode.

     The newly created socket is *note non-inheritable: f2b.

     Alterado na versão 3.4: The returned socket is now non-inheritable.

 -- Função: socket.fromshare (data)

     Instantiate a socket from data obtained from the *note
     socket.share(): c22. method.  The socket is assumed to be in
     blocking mode.

     *note Disponibilidade: 1ed8.: Windows.

     Adicionado na versão 3.3.

 -- Dado: socket.SocketType

     This is a Python type object that represents the socket object
     type.  It is the same as ‘type(socket(...))’.


File: python.info,  Node: Outras funções<2>,  Prev: Criação de sockets,  Up: Funções<8>

5.19.2.7 Outras funções
.......................

The *note socket: cc. module also offers various network-related
services:

 -- Função: socket.close (fd)

     Close a socket file descriptor.  This is like *note os.close():
     b8a, but for sockets.  On some platforms (most noticeable Windows)
     *note os.close(): b8a. does not work for socket file descriptors.

     Adicionado na versão 3.7.

 -- Função: socket.getaddrinfo (host, port, family=AF_UNSPEC, type=0,
          proto=0, flags=0)

     This function wraps the C function ‘getaddrinfo’ of the underlying
     system.

     Translate the 'host'/'port' argument into a sequence of 5-tuples
     that contain all the necessary arguments for creating a socket
     connected to that service.  'host' is a domain name, a string
     representation of an IPv4/v6 address or ‘None’.  'port' is a string
     service name such as ‘'http'’, a numeric port number or ‘None’.  By
     passing ‘None’ as the value of 'host' and 'port', you can pass
     ‘NULL’ to the underlying C API.

     The 'family', 'type' and 'proto' arguments can be optionally
     specified in order to provide options and limit the list of
     addresses returned.  Pass their default values (*note AF_UNSPEC:
     3551, 0, and 0, respectively) to not limit the results.  See the
     note below for details.

     The 'flags' argument can be one or several of the ‘AI_*’ constants,
     and will influence how results are computed and returned.  For
     example, ‘AI_NUMERICHOST’ will disable domain name resolution and
     will raise an error if 'host' is a domain name.

     The function returns a list of 5-tuples with the following
     structure:

     ‘(family, type, proto, canonname, sockaddr)’

     In these tuples, 'family', 'type', 'proto' are all integers and are
     meant to be passed to the *note socket(): dc9. function.
     'canonname' will be a string representing the canonical name of the
     'host' if ‘AI_CANONNAME’ is part of the 'flags' argument; else
     'canonname' will be empty.  'sockaddr' is a tuple describing a
     socket address, whose format depends on the returned 'family' (a
     ‘(address, port)’ 2-tuple for *note AF_INET: 1938, a ‘(address,
     port, flowinfo, scope_id)’ 4-tuple for *note AF_INET6: 1939.), and
     is meant to be passed to the *note socket.connect(): dcb. method.

          Nota: If you intend to use results from ‘getaddrinfo()’ to
          create a socket (rather than, for example, retrieve
          'canonname'), consider limiting the results by 'type' (e.g.
          *note SOCK_STREAM: 1337. or *note SOCK_DGRAM: 1336.) and/or
          'proto' (e.g.  ‘IPPROTO_TCP’ or ‘IPPROTO_UDP’) that your
          application can handle.

          The behavior with default values of 'family', 'type', 'proto'
          and 'flags' is system-specific.

          Many systems (for example, most Linux configurations) will
          return a sorted list of all matching addresses.  These
          addresses should generally be tried in order until a
          connection succeeds (possibly tried in parallel, for example,
          using a Happy Eyeballs(1) algorithm).  In these cases,
          limiting the 'type' and/or 'proto' can help eliminate
          unsuccessful or unusable connection attempts.

          Some systems will, however, only return a single address.
          (For example, this was reported on Solaris and AIX
          configurations.)  On these systems, limiting the 'type' and/or
          'proto' helps ensure that this address is usable.

     Levanta um *note evento de auditoria: 19fa. ‘socket.getaddrinfo’
     com os argumentos ‘host’, ‘port’, ‘family’, ‘type’, ‘protocol’.

     The following example fetches address information for a
     hypothetical TCP connection to ‘example.org’ on port 80 (results
     may differ on your system if IPv6 isn’t enabled):

          >>> socket.getaddrinfo("example.org", 80, proto=socket.IPPROTO_TCP)
          [(socket.AF_INET6, socket.SOCK_STREAM,
           6, '', ('2606:2800:220:1:248:1893:25c8:1946', 80, 0, 0)),
           (socket.AF_INET, socket.SOCK_STREAM,
           6, '', ('93.184.216.34', 80))]

     Alterado na versão 3.2: parameters can now be passed using keyword
     arguments.

     Alterado na versão 3.7: for IPv6 multicast addresses, string
     representing an address will not contain ‘%scope_id’ part.

 -- Função: socket.getfqdn ([name])

     Return a fully qualified domain name for 'name'.  If 'name' is
     omitted or empty, it is interpreted as the local host.  To find the
     fully qualified name, the hostname returned by *note
     gethostbyaddr(): 1a10. is checked, followed by aliases for the
     host, if available.  The first name which includes a period is
     selected.  In case no fully qualified domain name is available and
     'name' was provided, it is returned unchanged.  If 'name' was empty
     or equal to ‘'0.0.0.0'’, the hostname from *note gethostname():
     2d06. is returned.

 -- Função: socket.gethostbyname (hostname)

     Translate a host name to IPv4 address format.  The IPv4 address is
     returned as a string, such as ‘'100.50.200.5'’.  If the host name
     is an IPv4 address itself it is returned unchanged.  See *note
     gethostbyname_ex(): 1a11. for a more complete interface.  *note
     gethostbyname(): 3647. does not support IPv6 name resolution, and
     *note getaddrinfo(): 184b. should be used instead for IPv4/v6 dual
     stack support.

     Levanta um *note evento de auditoria: 19fa. ‘socket.gethostbyname’
     com o argumento ‘hostname’.

     *note Disponibilidade: 1ed8.: not WASI.

 -- Função: socket.gethostbyname_ex (hostname)

     Translate a host name to IPv4 address format, extended interface.
     Return a 3-tuple ‘(hostname, aliaslist, ipaddrlist)’ where
     'hostname' is the host’s primary host name, 'aliaslist' is a
     (possibly empty) list of alternative host names for the same
     address, and 'ipaddrlist' is a list of IPv4 addresses for the same
     interface on the same host (often but not always a single address).
     *note gethostbyname_ex(): 1a11. does not support IPv6 name
     resolution, and *note getaddrinfo(): 184b. should be used instead
     for IPv4/v6 dual stack support.

     Levanta um *note evento de auditoria: 19fa. ‘socket.gethostbyname’
     com o argumento ‘hostname’.

     *note Disponibilidade: 1ed8.: not WASI.

 -- Função: socket.gethostname ()

     Return a string containing the hostname of the machine where the
     Python interpreter is currently executing.

     Levanta um *note evento de auditoria: 19fa. ‘socket.gethostname’
     sem argumentos.

     Note: *note gethostname(): 2d06. doesn’t always return the fully
     qualified domain name; use *note getfqdn(): 1875. for that.

     *note Disponibilidade: 1ed8.: not WASI.

 -- Função: socket.gethostbyaddr (ip_address)

     Return a 3-tuple ‘(hostname, aliaslist, ipaddrlist)’ where
     'hostname' is the primary host name responding to the given
     'ip_address', 'aliaslist' is a (possibly empty) list of alternative
     host names for the same address, and 'ipaddrlist' is a list of
     IPv4/v6 addresses for the same interface on the same host (most
     likely containing only a single address).  To find the fully
     qualified domain name, use the function *note getfqdn(): 1875.
     *note gethostbyaddr(): 1a10. supports both IPv4 and IPv6.

     Levanta um *note evento de auditoria: 19fa. ‘socket.gethostbyaddr’
     com o argumento ‘ip_address’.

     *note Disponibilidade: 1ed8.: not WASI.

 -- Função: socket.getnameinfo (sockaddr, flags)

     Translate a socket address 'sockaddr' into a 2-tuple ‘(host,
     port)’.  Depending on the settings of 'flags', the result can
     contain a fully qualified domain name or numeric address
     representation in 'host'.  Similarly, 'port' can contain a string
     port name or a numeric port number.

     For IPv6 addresses, ‘%scope_id’ is appended to the host part if
     'sockaddr' contains meaningful 'scope_id'.  Usually this happens
     for multicast addresses.

     For more information about 'flags' you can consult
     ‘getnameinfo(3)(2)’.

     Levanta um *note evento de auditoria: 19fa. ‘socket.getnameinfo’
     com o argumento ‘sockaddr’.

     *note Disponibilidade: 1ed8.: not WASI.

 -- Função: socket.getprotobyname (protocolname)

     Translate an internet protocol name (for example, ‘'icmp'’) to a
     constant suitable for passing as the (optional) third argument to
     the *note socket(): dc9. function.  This is usually only needed for
     sockets opened in “raw” mode (*note SOCK_RAW: 3615.); for the
     normal socket modes, the correct protocol is chosen automatically
     if the protocol is omitted or zero.

     *note Disponibilidade: 1ed8.: not WASI.

 -- Função: socket.getservbyname (servicename[, protocolname])

     Translate an internet service name and protocol name to a port
     number for that service.  The optional protocol name, if given,
     should be ‘'tcp'’ or ‘'udp'’, otherwise any protocol will match.

     Levanta um *note evento de auditoria: 19fa. ‘socket.getservbyname’
     com os argumentos ‘servicename’, ‘protocolname’.

     *note Disponibilidade: 1ed8.: not WASI.

 -- Função: socket.getservbyport (port[, protocolname])

     Translate an internet port number and protocol name to a service
     name for that service.  The optional protocol name, if given,
     should be ‘'tcp'’ or ‘'udp'’, otherwise any protocol will match.

     Levanta um *note evento de auditoria: 19fa. ‘socket.getservbyport’
     com os argumentos ‘port’ e ‘protocolname’.

     *note Disponibilidade: 1ed8.: not WASI.

 -- Função: socket.ntohl (x)

     Convert 32-bit positive integers from network to host byte order.
     On machines where the host byte order is the same as network byte
     order, this is a no-op; otherwise, it performs a 4-byte swap
     operation.

 -- Função: socket.ntohs (x)

     Convert 16-bit positive integers from network to host byte order.
     On machines where the host byte order is the same as network byte
     order, this is a no-op; otherwise, it performs a 2-byte swap
     operation.

     Alterado na versão 3.10: Raises *note OverflowError: 885. if 'x'
     does not fit in a 16-bit unsigned integer.

 -- Função: socket.htonl (x)

     Convert 32-bit positive integers from host to network byte order.
     On machines where the host byte order is the same as network byte
     order, this is a no-op; otherwise, it performs a 4-byte swap
     operation.

 -- Função: socket.htons (x)

     Convert 16-bit positive integers from host to network byte order.
     On machines where the host byte order is the same as network byte
     order, this is a no-op; otherwise, it performs a 2-byte swap
     operation.

     Alterado na versão 3.10: Raises *note OverflowError: 885. if 'x'
     does not fit in a 16-bit unsigned integer.

 -- Função: socket.inet_aton (ip_string)

     Convert an IPv4 address from dotted-quad string format (for
     example, ‘123.45.67.89’) to 32-bit packed binary format, as a bytes
     object four characters in length.  This is useful when conversing
     with a program that uses the standard C library and needs objects
     of type ‘in_addr’, which is the C type for the 32-bit packed binary
     this function returns.

     *note inet_aton(): 968. also accepts strings with less than three
     dots; see the Unix manual page ‘inet(3)(3)’ for details.

     If the IPv4 address string passed to this function is invalid,
     *note OSError: 417. will be raised.  Note that exactly what is
     valid depends on the underlying C implementation of ‘inet_aton()’.

     *note inet_aton(): 968. does not support IPv6, and *note
     inet_pton(): 969. should be used instead for IPv4/v6 dual stack
     support.

 -- Função: socket.inet_ntoa (packed_ip)

     Convert a 32-bit packed IPv4 address (a *note bytes-like object:
     d4f. four bytes in length) to its standard dotted-quad string
     representation (for example, ‘123.45.67.89’).  This is useful when
     conversing with a program that uses the standard C library and
     needs objects of type ‘in_addr’, which is the C type for the 32-bit
     packed binary data this function takes as an argument.

     If the byte sequence passed to this function is not exactly 4 bytes
     in length, *note OSError: 417. will be raised.  *note inet_ntoa():
     364d. does not support IPv6, and *note inet_ntop(): fd9. should be
     used instead for IPv4/v6 dual stack support.

     Alterado na versão 3.5: Writable *note bytes-like object: d4f. is
     now accepted.

 -- Função: socket.inet_pton (address_family, ip_string)

     Convert an IP address from its family-specific string format to a
     packed, binary format.  *note inet_pton(): 969. is useful when a
     library or network protocol calls for an object of type ‘in_addr’
     (similar to *note inet_aton(): 968.) or ‘in6_addr’.

     Supported values for 'address_family' are currently *note AF_INET:
     1938. and *note AF_INET6: 1939.  If the IP address string
     'ip_string' is invalid, *note OSError: 417. will be raised.  Note
     that exactly what is valid depends on both the value of
     'address_family' and the underlying implementation of
     ‘inet_pton()’.

     *note Disponibilidade: 1ed8.: Unix, Windows.

     Alterado na versão 3.4: Suporte para Windows adicionado.

 -- Função: socket.inet_ntop (address_family, packed_ip)

     Convert a packed IP address (a *note bytes-like object: d4f. of
     some number of bytes) to its standard, family-specific string
     representation (for example, ‘'7.10.0.5'’ or ‘'5aef:2b::8'’).
     *note inet_ntop(): fd9. is useful when a library or network
     protocol returns an object of type ‘in_addr’ (similar to *note
     inet_ntoa(): 364d.) or ‘in6_addr’.

     Supported values for 'address_family' are currently *note AF_INET:
     1938. and *note AF_INET6: 1939.  If the bytes object 'packed_ip' is
     not the correct length for the specified address family, *note
     ValueError: 202. will be raised.  *note OSError: 417. is raised for
     errors from the call to *note inet_ntop(): fd9.

     *note Disponibilidade: 1ed8.: Unix, Windows.

     Alterado na versão 3.4: Suporte para Windows adicionado.

     Alterado na versão 3.5: Writable *note bytes-like object: d4f. is
     now accepted.

 -- Função: socket.CMSG_LEN (length)

     Return the total length, without trailing padding, of an ancillary
     data item with associated data of the given 'length'.  This value
     can often be used as the buffer size for *note recvmsg(): dce. to
     receive a single item of ancillary data, but RFC 3542(4) requires
     portable applications to use *note CMSG_SPACE(): 1bae. and thus
     include space for padding, even when the item will be the last in
     the buffer.  Raises *note OverflowError: 885. if 'length' is
     outside the permissible range of values.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Most Unix platforms.

     Adicionado na versão 3.3.

 -- Função: socket.CMSG_SPACE (length)

     Return the buffer size needed for *note recvmsg(): dce. to receive
     an ancillary data item with associated data of the given 'length',
     along with any trailing padding.  The buffer space needed to
     receive multiple items is the sum of the *note CMSG_SPACE(): 1bae.
     values for their associated data lengths.  Raises *note
     OverflowError: 885. if 'length' is outside the permissible range of
     values.

     Note that some systems might support ancillary data without
     providing this function.  Also note that setting the buffer size
     using the results of this function may not precisely limit the
     amount of ancillary data that can be received, since additional
     data may be able to fit into the padding area.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     most Unix platforms.

     Adicionado na versão 3.3.

 -- Função: socket.getdefaulttimeout ()

     Return the default timeout in seconds (float) for new socket
     objects.  A value of ‘None’ indicates that new socket objects have
     no timeout.  When the socket module is first imported, the default
     is ‘None’.

 -- Função: socket.setdefaulttimeout (timeout)

     Set the default timeout in seconds (float) for new socket objects.
     When the socket module is first imported, the default is ‘None’.
     See *note settimeout(): 360f. for possible values and their
     respective meanings.

 -- Função: socket.sethostname (name)

     Set the machine’s hostname to 'name'.  This will raise an *note
     OSError: 417. if you don’t have enough rights.

     Levanta um *note evento de auditoria: 19fa. ‘socket.sethostname’
     com o argumento ‘name’.

     *note Disponibilidade: 1ed8.: Unix, not Android.

     Adicionado na versão 3.3.

 -- Função: socket.if_nameindex ()

     Return a list of network interface information (index int, name
     string) tuples.  *note OSError: 417. if the system call fails.

     *note Disponibilidade: 1ed8.: Unix, Windows, not WASI.

     Adicionado na versão 3.3.

     Alterado na versão 3.8: Suporte ao Windows foi adicionado.

          Nota: On Windows network interfaces have different names in
          different contexts (all names are examples):

             * UUID: ‘{FB605B73-AAC2-49A6-9A2F-25416AEA0573}’

             * name: ‘ethernet_32770’

             * friendly name: ‘vEthernet (nat)’

             * description: ‘Hyper-V Virtual Ethernet Adapter’

          This function returns names of the second form from the list,
          ‘ethernet_32770’ in this example case.

 -- Função: socket.if_nametoindex (if_name)

     Return a network interface index number corresponding to an
     interface name.  *note OSError: 417. if no interface with the given
     name exists.

     *note Disponibilidade: 1ed8.: Unix, Windows, not WASI.

     Adicionado na versão 3.3.

     Alterado na versão 3.8: Suporte ao Windows foi adicionado.

     Ver também
     ..........

     “Interface name” is a name as documented in *note if_nameindex():
     a37.

 -- Função: socket.if_indextoname (if_index)

     Return a network interface name corresponding to an interface index
     number.  *note OSError: 417. if no interface with the given index
     exists.

     *note Disponibilidade: 1ed8.: Unix, Windows, not WASI.

     Adicionado na versão 3.3.

     Alterado na versão 3.8: Suporte ao Windows foi adicionado.

     Ver também
     ..........

     “Interface name” is a name as documented in *note if_nameindex():
     a37.

 -- Função: socket.send_fds (sock, buffers, fds[, flags[, address]])

     Send the list of file descriptors 'fds' over an *note AF_UNIX:
     193a. socket 'sock'.  The 'fds' parameter is a sequence of file
     descriptors.  Consult *note sendmsg(): 476. for the documentation
     of these parameters.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Unix platforms supporting *note sendmsg(): 476. and ‘SCM_RIGHTS’
     mechanism.

     Adicionado na versão 3.9.

 -- Função: socket.recv_fds (sock, bufsize, maxfds[, flags])

     Receive up to 'maxfds' file descriptors from an *note AF_UNIX:
     193a. socket 'sock'.  Return ‘(msg, list(fds), flags, addr)’.
     Consult *note recvmsg(): dce. for the documentation of these
     parameters.

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Unix platforms supporting *note recvmsg(): dce. and ‘SCM_RIGHTS’
     mechanism.

     Adicionado na versão 3.9.

          Nota: Any truncated integers at the end of the list of file
          descriptors.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Happy_Eyeballs

   (2) https://manpages.debian.org/getnameinfo(3)

   (3) https://manpages.debian.org/inet(3)

   (4) https://datatracker.ietf.org/doc/html/rfc3542.html


File: python.info,  Node: Socket Objects,  Next: Notas sobre tempo limite de soquete,  Prev: Conteúdo do módulo<4>,  Up: socket — Interface de rede de baixo nível

5.19.2.8 Socket Objects
.......................

Socket objects have the following methods.  Except for *note makefile():
11de, these correspond to Unix system calls applicable to sockets.

Alterado na versão 3.2: Support for the *note context manager: 5d4.
protocol was added.  Exiting the context manager is equivalent to
calling *note close(): b89.

 -- Método: socket.accept ()

     Accept a connection.  The socket must be bound to an address and
     listening for connections.  The return value is a pair ‘(conn,
     address)’ where 'conn' is a 'new' socket object usable to send and
     receive data on the connection, and 'address' is the address bound
     to the socket on the other end of the connection.

     The newly created socket is *note non-inheritable: f2b.

     Alterado na versão 3.4: The socket is now non-inheritable.

     Alterado na versão 3.5: If the system call is interrupted and the
     signal handler does not raise an exception, the method now retries
     the system call instead of raising an *note InterruptedError: db0.
     exception (see PEP 475(1) for the rationale).

 -- Método: socket.bind (address)

     Bind the socket to 'address'.  The socket must not already be
     bound.  (The format of 'address' depends on the address family —
     see above.)

     Levanta um *note evento de auditoria: 19fa. ‘socket.bind’ com os
     argumentos ‘self’, ‘address’.

     *note Disponibilidade: 1ed8.: not WASI.

 -- Método: socket.close ()

     Mark the socket closed.  The underlying system resource (e.g.  a
     file descriptor) is also closed when all file objects from *note
     makefile(): 11de. are closed.  Once that happens, all future
     operations on the socket object will fail.  The remote end will
     receive no more data (after queued data is flushed).

     Sockets are automatically closed when they are garbage-collected,
     but it is recommended to *note close(): b89. them explicitly, or to
     use a *note with: 5d2. statement around them.

     Alterado na versão 3.6: *note OSError: 417. is now raised if an
     error occurs when the underlying ‘close()’ call is made.

          Nota: *note close(): b89. releases the resource associated
          with a connection but does not necessarily close the
          connection immediately.  If you want to close the connection
          in a timely fashion, call *note shutdown(): 363f. before *note
          close(): b89.

 -- Método: socket.connect (address)

     Connect to a remote socket at 'address'.  (The format of 'address'
     depends on the address family — see above.)

     If the connection is interrupted by a signal, the method waits
     until the connection completes, or raise a *note TimeoutError: 838.
     on timeout, if the signal handler doesn’t raise an exception and
     the socket is blocking or has a timeout.  For non-blocking sockets,
     the method raises an *note InterruptedError: db0. exception if the
     connection is interrupted by a signal (or the exception raised by
     the signal handler).

     Levanta um *note evento de auditoria: 19fa. ‘socket.connect’ com os
     argumentos ‘self’, ‘address’.

     Alterado na versão 3.5: The method now waits until the connection
     completes instead of raising an *note InterruptedError: db0.
     exception if the connection is interrupted by a signal, the signal
     handler doesn’t raise an exception and the socket is blocking or
     has a timeout (see the PEP 475(2) for the rationale).

     *note Disponibilidade: 1ed8.: not WASI.

 -- Método: socket.connect_ex (address)

     Like ‘connect(address)’, but return an error indicator instead of
     raising an exception for errors returned by the C-level ‘connect()’
     call (other problems, such as “host not found,” can still raise
     exceptions).  The error indicator is ‘0’ if the operation
     succeeded, otherwise the value of the ‘errno’ variable.  This is
     useful to support, for example, asynchronous connects.

     Levanta um *note evento de auditoria: 19fa. ‘socket.connect’ com os
     argumentos ‘self’, ‘address’.

     *note Disponibilidade: 1ed8.: not WASI.

 -- Método: socket.detach ()

     Put the socket object into closed state without actually closing
     the underlying file descriptor.  The file descriptor is returned,
     and can be reused for other purposes.

     Adicionado na versão 3.2.

 -- Método: socket.dup ()

     Duplicate the socket.

     The newly created socket is *note non-inheritable: f2b.

     Alterado na versão 3.4: The socket is now non-inheritable.

     *note Disponibilidade: 1ed8.: not WASI.

 -- Método: socket.fileno ()

     Return the socket’s file descriptor (a small integer), or -1 on
     failure.  This is useful with *note select.select(): dc8.

     Under Windows the small integer returned by this method cannot be
     used where a file descriptor can be used (such as *note
     os.fdopen(): 20c4.).  Unix does not have this limitation.

 -- Método: socket.get_inheritable ()

     Get the *note inheritable flag: f2b. of the socket’s file
     descriptor or socket’s handle: ‘True’ if the socket can be
     inherited in child processes, ‘False’ if it cannot.

     Adicionado na versão 3.4.

 -- Método: socket.getpeername ()

     Return the remote address to which the socket is connected.  This
     is useful to find out the port number of a remote IPv4/v6 socket,
     for instance.  (The format of the address returned depends on the
     address family — see above.)  On some systems this function is not
     supported.

 -- Método: socket.getsockname ()

     Return the socket’s own address.  This is useful to find out the
     port number of an IPv4/v6 socket, for instance.  (The format of the
     address returned depends on the address family — see above.)

 -- Método: socket.getsockopt (level, optname[, buflen])

     Return the value of the given socket option (see the Unix man page
     ‘getsockopt(2)(3)’).  The needed symbolic constants (*note SO_*
     etc.: b8b.) are defined in this module.  If 'buflen' is absent, an
     integer option is assumed and its integer value is returned by the
     function.  If 'buflen' is present, it specifies the maximum length
     of the buffer used to receive the option in, and this buffer is
     returned as a bytes object.  It is up to the caller to decode the
     contents of the buffer (see the optional built-in module *note
     struct: d5. for a way to decode C structures encoded as byte
     strings).

     *note Disponibilidade: 1ed8.: not WASI.

 -- Método: socket.getblocking ()

     Return ‘True’ if socket is in blocking mode, ‘False’ if in
     non-blocking.

     This is equivalent to checking ‘socket.gettimeout() != 0’.

     Adicionado na versão 3.7.

 -- Método: socket.gettimeout ()

     Return the timeout in seconds (float) associated with socket
     operations, or ‘None’ if no timeout is set.  This reflects the last
     call to *note setblocking(): 2d1d. or *note settimeout(): 360f.

 -- Método: socket.ioctl (control, option)


     Platform: Windows

     The *note ioctl(): cf3. method is a limited interface to the
     WSAIoctl system interface.  Please refer to the Win32
     documentation(4) for more information.

     On other platforms, the generic *note fcntl.fcntl(): 3652. and
     *note fcntl.ioctl(): 14c3. functions may be used; they accept a
     socket object as their first argument.

     Currently only the following control codes are supported:
     ‘SIO_RCVALL’, ‘SIO_KEEPALIVE_VALS’, and ‘SIO_LOOPBACK_FAST_PATH’.

     Alterado na versão 3.6: ‘SIO_LOOPBACK_FAST_PATH’ was added.

 -- Método: socket.listen ([backlog])

     Enable a server to accept connections.  If 'backlog' is specified,
     it must be at least 0 (if it is lower, it is set to 0); it
     specifies the number of unaccepted connections that the system will
     allow before refusing new connections.  If not specified, a default
     reasonable value is chosen.

     *note Disponibilidade: 1ed8.: not WASI.

     Alterado na versão 3.5: The 'backlog' parameter is now optional.

 -- Método: socket.makefile (mode='r', buffering=None, *, encoding=None,
          errors=None, newline=None)

     Return a *note file object: 1203. associated with the socket.  The
     exact returned type depends on the arguments given to *note
     makefile(): 11de.  These arguments are interpreted the same way as
     by the built-in *note open(): 51c. function, except the only
     supported 'mode' values are ‘'r'’ (default), ‘'w'’, ‘'b'’, or a
     combination of those.

     The socket must be in blocking mode; it can have a timeout, but the
     file object’s internal buffer may end up in an inconsistent state
     if a timeout occurs.

     Closing the file object returned by *note makefile(): 11de. won’t
     close the original socket unless all other file objects have been
     closed and *note socket.close(): b89. has been called on the socket
     object.

          Nota: On Windows, the file-like object created by *note
          makefile(): 11de. cannot be used where a file object with a
          file descriptor is expected, such as the stream arguments of
          *note subprocess.Popen(): 199.

 -- Método: socket.recv (bufsize[, flags])

     Receive data from the socket.  The return value is a bytes object
     representing the data received.  The maximum amount of data to be
     received at once is specified by 'bufsize'.  A returned empty bytes
     object indicates that the client has disconnected.  See the Unix
     manual page ‘recv(2)(5)’ for the meaning of the optional argument
     'flags'; it defaults to zero.

     Alterado na versão 3.5: If the system call is interrupted and the
     signal handler does not raise an exception, the method now retries
     the system call instead of raising an *note InterruptedError: db0.
     exception (see PEP 475(6) for the rationale).

 -- Método: socket.recvfrom (bufsize[, flags])

     Receive data from the socket.  The return value is a pair ‘(bytes,
     address)’ where 'bytes' is a bytes object representing the data
     received and 'address' is the address of the socket sending the
     data.  See the Unix manual page ‘recv(2)(7)’ for the meaning of the
     optional argument 'flags'; it defaults to zero.  (The format of
     'address' depends on the address family — see above.)

     Alterado na versão 3.5: If the system call is interrupted and the
     signal handler does not raise an exception, the method now retries
     the system call instead of raising an *note InterruptedError: db0.
     exception (see PEP 475(8) for the rationale).

     Alterado na versão 3.7: For multicast IPv6 address, first item of
     'address' does not contain ‘%scope_id’ part anymore.  In order to
     get full IPv6 address use *note getnameinfo(): 17b6.

 -- Método: socket.recvmsg (bufsize[, ancbufsize[, flags]])

     Receive normal data (up to 'bufsize' bytes) and ancillary data from
     the socket.  The 'ancbufsize' argument sets the size in bytes of
     the internal buffer used to receive the ancillary data; it defaults
     to 0, meaning that no ancillary data will be received.  Appropriate
     buffer sizes for ancillary data can be calculated using *note
     CMSG_SPACE(): 1bae. or *note CMSG_LEN(): 1baf, and items which do
     not fit into the buffer might be truncated or discarded.  The
     'flags' argument defaults to 0 and has the same meaning as for
     *note recv(): dcc.

     The return value is a 4-tuple: ‘(data, ancdata, msg_flags,
     address)’.  The 'data' item is a *note bytes: 1c2. object holding
     the non-ancillary data received.  The 'ancdata' item is a list of
     zero or more tuples ‘(cmsg_level, cmsg_type, cmsg_data)’
     representing the ancillary data (control messages) received:
     'cmsg_level' and 'cmsg_type' are integers specifying the protocol
     level and protocol-specific type respectively, and 'cmsg_data' is a
     *note bytes: 1c2. object holding the associated data.  The
     'msg_flags' item is the bitwise OR of various flags indicating
     conditions on the received message; see your system documentation
     for details.  If the receiving socket is unconnected, 'address' is
     the address of the sending socket, if available; otherwise, its
     value is unspecified.

     On some systems, *note sendmsg(): 476. and *note recvmsg(): dce.
     can be used to pass file descriptors between processes over an
     *note AF_UNIX: 193a. socket.  When this facility is used (it is
     often restricted to *note SOCK_STREAM: 1337. sockets), *note
     recvmsg(): dce. will return, in its ancillary data, items of the
     form ‘(socket.SOL_SOCKET, socket.SCM_RIGHTS, fds)’, where 'fds' is
     a *note bytes: 1c2. object representing the new file descriptors as
     a binary array of the native C int type.  If *note recvmsg(): dce.
     raises an exception after the system call returns, it will first
     attempt to close any file descriptors received via this mechanism.

     Some systems do not indicate the truncated length of ancillary data
     items which have been only partially received.  If an item appears
     to extend beyond the end of the buffer, *note recvmsg(): dce. will
     issue a *note RuntimeWarning: 1bd, and will return the part of it
     which is inside the buffer provided it has not been truncated
     before the start of its associated data.

     On systems which support the ‘SCM_RIGHTS’ mechanism, the following
     function will receive up to 'maxfds' file descriptors, returning
     the message data and a list containing the descriptors (while
     ignoring unexpected conditions such as unrelated control messages
     being received).  See also *note sendmsg(): 476.

          import socket, array

          def recv_fds(sock, msglen, maxfds):
              fds = array.array("i")   # Array of ints
              msg, ancdata, flags, addr = sock.recvmsg(msglen, socket.CMSG_LEN(maxfds * fds.itemsize))
              for cmsg_level, cmsg_type, cmsg_data in ancdata:
                  if cmsg_level == socket.SOL_SOCKET and cmsg_type == socket.SCM_RIGHTS:
                      # Append data, ignoring any truncated integers at the end.
                      fds.frombytes(cmsg_data[:len(cmsg_data) - (len(cmsg_data) % fds.itemsize)])
              return msg, list(fds)

     *note Disponibilidade: 1ed8.: Unix.

     Most Unix platforms.

     Adicionado na versão 3.3.

     Alterado na versão 3.5: If the system call is interrupted and the
     signal handler does not raise an exception, the method now retries
     the system call instead of raising an *note InterruptedError: db0.
     exception (see PEP 475(9) for the rationale).

 -- Método: socket.recvmsg_into (buffers[, ancbufsize[, flags]])

     Receive normal data and ancillary data from the socket, behaving as
     *note recvmsg(): dce. would, but scatter the non-ancillary data
     into a series of buffers instead of returning a new bytes object.
     The 'buffers' argument must be an iterable of objects that export
     writable buffers (e.g.  *note bytearray: 2ea. objects); these will
     be filled with successive chunks of the non-ancillary data until it
     has all been written or there are no more buffers.  The operating
     system may set a limit (*note sysconf(): 1651. value ‘SC_IOV_MAX’)
     on the number of buffers that can be used.  The 'ancbufsize' and
     'flags' arguments have the same meaning as for *note recvmsg():
     dce.

     The return value is a 4-tuple: ‘(nbytes, ancdata, msg_flags,
     address)’, where 'nbytes' is the total number of bytes of
     non-ancillary data written into the buffers, and 'ancdata',
     'msg_flags' and 'address' are the same as for *note recvmsg(): dce.

     Exemplo:

          >>> import socket
          >>> s1, s2 = socket.socketpair()
          >>> b1 = bytearray(b'----')
          >>> b2 = bytearray(b'0123456789')
          >>> b3 = bytearray(b'--------------')
          >>> s1.send(b'Mary had a little lamb')
          22
          >>> s2.recvmsg_into([b1, memoryview(b2)[2:9], b3])
          (22, [], 0, None)
          >>> [b1, b2, b3]
          [bytearray(b'Mary'), bytearray(b'01 had a 9'), bytearray(b'little lamb---')]

     *note Disponibilidade: 1ed8.: Unix.

     Most Unix platforms.

     Adicionado na versão 3.3.

 -- Método: socket.recvfrom_into (buffer[, nbytes[, flags]])

     Receive data from the socket, writing it into 'buffer' instead of
     creating a new bytestring.  The return value is a pair ‘(nbytes,
     address)’ where 'nbytes' is the number of bytes received and
     'address' is the address of the socket sending the data.  See the
     Unix manual page ‘recv(2)(10)’ for the meaning of the optional
     argument 'flags'; it defaults to zero.  (The format of 'address'
     depends on the address family — see above.)

 -- Método: socket.recv_into (buffer[, nbytes[, flags]])

     Receive up to 'nbytes' bytes from the socket, storing the data into
     a buffer rather than creating a new bytestring.  If 'nbytes' is not
     specified (or 0), receive up to the size available in the given
     buffer.  Returns the number of bytes received.  See the Unix manual
     page ‘recv(2)(11)’ for the meaning of the optional argument
     'flags'; it defaults to zero.

 -- Método: socket.send (bytes[, flags])

     Send data to the socket.  The socket must be connected to a remote
     socket.  The optional 'flags' argument has the same meaning as for
     *note recv(): dcc. above.  Returns the number of bytes sent.
     Applications are responsible for checking that all data has been
     sent; if only some of the data was transmitted, the application
     needs to attempt delivery of the remaining data.  For further
     information on this topic, consult the *note Programação de
     Soquetes: 3653.

     Alterado na versão 3.5: If the system call is interrupted and the
     signal handler does not raise an exception, the method now retries
     the system call instead of raising an *note InterruptedError: db0.
     exception (see PEP 475(12) for the rationale).

 -- Método: socket.sendall (bytes[, flags])

     Send data to the socket.  The socket must be connected to a remote
     socket.  The optional 'flags' argument has the same meaning as for
     *note recv(): dcc. above.  Unlike *note send(): dcf, this method
     continues to send data from 'bytes' until either all data has been
     sent or an error occurs.  ‘None’ is returned on success.  On error,
     an exception is raised, and there is no way to determine how much
     data, if any, was successfully sent.

     Alterado na versão 3.5: The socket timeout is no longer reset each
     time data is sent successfully.  The socket timeout is now the
     maximum total duration to send all data.

     Alterado na versão 3.5: If the system call is interrupted and the
     signal handler does not raise an exception, the method now retries
     the system call instead of raising an *note InterruptedError: db0.
     exception (see PEP 475(13) for the rationale).

 -- Método: socket.sendto (bytes, address)

 -- Método: socket.sendto (bytes, flags, address)

     Send data to the socket.  The socket should not be connected to a
     remote socket, since the destination socket is specified by
     'address'.  The optional 'flags' argument has the same meaning as
     for *note recv(): dcc. above.  Return the number of bytes sent.
     (The format of 'address' depends on the address family — see
     above.)

     Levanta um *note evento de auditoria: 19fa. ‘socket.sendto’ com os
     argumentos ‘self’, ‘address’.

     Alterado na versão 3.5: If the system call is interrupted and the
     signal handler does not raise an exception, the method now retries
     the system call instead of raising an *note InterruptedError: db0.
     exception (see PEP 475(14) for the rationale).

 -- Método: socket.sendmsg (buffers[, ancdata[, flags[, address]]])

     Send normal and ancillary data to the socket, gathering the
     non-ancillary data from a series of buffers and concatenating it
     into a single message.  The 'buffers' argument specifies the
     non-ancillary data as an iterable of *note bytes-like objects: d4f.
     (e.g.  *note bytes: 1c2. objects); the operating system may set a
     limit (*note sysconf(): 1651. value ‘SC_IOV_MAX’) on the number of
     buffers that can be used.  The 'ancdata' argument specifies the
     ancillary data (control messages) as an iterable of zero or more
     tuples ‘(cmsg_level, cmsg_type, cmsg_data)’, where 'cmsg_level' and
     'cmsg_type' are integers specifying the protocol level and
     protocol-specific type respectively, and 'cmsg_data' is a
     bytes-like object holding the associated data.  Note that some
     systems (in particular, systems without *note CMSG_SPACE(): 1bae.)
     might support sending only one control message per call.  The
     'flags' argument defaults to 0 and has the same meaning as for
     *note send(): dcf.  If 'address' is supplied and not ‘None’, it
     sets a destination address for the message.  The return value is
     the number of bytes of non-ancillary data sent.

     The following function sends the list of file descriptors 'fds'
     over an *note AF_UNIX: 193a. socket, on systems which support the
     ‘SCM_RIGHTS’ mechanism.  See also *note recvmsg(): dce.

          import socket, array

          def send_fds(sock, msg, fds):
              return sock.sendmsg([msg], [(socket.SOL_SOCKET, socket.SCM_RIGHTS, array.array("i", fds))])

     *note Disponibilidade: 1ed8.: Unix, not WASI.

     Most Unix platforms.

     Levanta um *note evento de auditoria: 19fa. ‘socket.sendmsg’ com os
     argumentos ‘self’, ‘address’.

     Adicionado na versão 3.3.

     Alterado na versão 3.5: If the system call is interrupted and the
     signal handler does not raise an exception, the method now retries
     the system call instead of raising an *note InterruptedError: db0.
     exception (see PEP 475(15) for the rationale).

 -- Método: socket.sendmsg_afalg ([msg], *, op[, iv[, assoclen[,
          flags]]])

     Specialized version of *note sendmsg(): 476. for *note AF_ALG: cf7.
     socket.  Set mode, IV, AEAD associated data length and flags for
     *note AF_ALG: cf7. socket.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.38.

     Adicionado na versão 3.6.

 -- Método: socket.sendfile (file, offset=0, count=None)

     Send a file until EOF is reached by using high-performance *note
     os.sendfile: b21. and return the total number of bytes which were
     sent.  'file' must be a regular file object opened in binary mode.
     If *note os.sendfile: b21. is not available (e.g.  Windows) or
     'file' is not a regular file *note send(): dcf. will be used
     instead.  'offset' tells from where to start reading the file.  If
     specified, 'count' is the total number of bytes to transmit as
     opposed to sending the file until EOF is reached.  File position is
     updated on return or also in case of error in which case *note
     file.tell(): 13f3. can be used to figure out the number of bytes
     which were sent.  The socket must be of *note SOCK_STREAM: 1337.
     type.  Non-blocking sockets are not supported.

     Adicionado na versão 3.5.

 -- Método: socket.set_inheritable (inheritable)

     Set the *note inheritable flag: f2b. of the socket’s file
     descriptor or socket’s handle.

     Adicionado na versão 3.4.

 -- Método: socket.setblocking (flag)

     Set blocking or non-blocking mode of the socket: if 'flag' is
     false, the socket is set to non-blocking, else to blocking mode.

     This method is a shorthand for certain *note settimeout(): 360f.
     calls:

        * ‘sock.setblocking(True)’ is equivalent to
          ‘sock.settimeout(None)’

        * ‘sock.setblocking(False)’ is equivalent to
          ‘sock.settimeout(0.0)’

     Alterado na versão 3.7: The method no longer applies *note
     SOCK_NONBLOCK: c24. flag on *note socket.type: c26.

 -- Método: socket.settimeout (value)

     Set a timeout on blocking socket operations.  The 'value' argument
     can be a nonnegative floating-point number expressing seconds, or
     ‘None’.  If a non-zero value is given, subsequent socket operations
     will raise a *note timeout: 837. exception if the timeout period
     'value' has elapsed before the operation has completed.  If zero is
     given, the socket is put in non-blocking mode.  If ‘None’ is given,
     the socket is put in blocking mode.

     For further information, please consult the *note notes on socket
     timeouts: 3654.

     Alterado na versão 3.7: The method no longer toggles *note
     SOCK_NONBLOCK: c24. flag on *note socket.type: c26.

 -- Método: socket.setsockopt (level, optname, value: int | Buffer)

 -- Método: socket.setsockopt (level, optname, None, optlen: int)

     Set the value of the given socket option (see the Unix manual page
     ‘setsockopt(2)(16)’).  The needed symbolic constants are defined in
     this module (SO_* etc.  <socket-unix-constants>).  The value can be
     an integer, ‘None’ or a *note bytes-like object: d4f. representing
     a buffer.  In the later case it is up to the caller to ensure that
     the bytestring contains the proper bits (see the optional built-in
     module *note struct: d5. for a way to encode C structures as
     bytestrings).  When 'value' is set to ‘None’, 'optlen' argument is
     required.  It’s equivalent to call ‘setsockopt()’ C function with
     ‘optval=NULL’ and ‘optlen=optlen’.

     Alterado na versão 3.5: Writable *note bytes-like object: d4f. is
     now accepted.

     Alterado na versão 3.6: setsockopt(level, optname, None, optlen:
     int) form added.

     *note Disponibilidade: 1ed8.: not WASI.

 -- Método: socket.shutdown (how)

     Shut down one or both halves of the connection.  If 'how' is *note
     SHUT_RD: 363c, further receives are disallowed.  If 'how' is *note
     SHUT_WR: 363d, further sends are disallowed.  If 'how' is *note
     SHUT_RDWR: 363e, further sends and receives are disallowed.

     *note Disponibilidade: 1ed8.: not WASI.

 -- Método: socket.share (process_id)

     Duplicate a socket and prepare it for sharing with a target
     process.  The target process must be provided with 'process_id'.
     The resulting bytes object can then be passed to the target process
     using some form of interprocess communication and the socket can be
     recreated there using *note fromshare(): c21.  Once this method has
     been called, it is safe to close the socket since the operating
     system has already duplicated it for the target process.

     *note Disponibilidade: 1ed8.: Windows.

     Adicionado na versão 3.3.

Note that there are no methods ‘read()’ or ‘write()’; use *note recv():
dcc. and *note send(): dcf. without 'flags' argument instead.

Socket objects also have these (read-only) attributes that correspond to
the values given to the *note socket: dc9. constructor.

 -- Atributo: socket.family

     The socket family.

 -- Atributo: socket.type

     The socket type.

 -- Atributo: socket.proto

     The socket protocol.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0475/

   (2) https://peps.python.org/pep-0475/

   (3) https://manpages.debian.org/getsockopt(2)

   (4) https://msdn.microsoft.com/en-us/library/ms741621%28VS.85%29.aspx

   (5) https://manpages.debian.org/recv(2)

   (6) https://peps.python.org/pep-0475/

   (7) https://manpages.debian.org/recv(2)

   (8) https://peps.python.org/pep-0475/

   (9) https://peps.python.org/pep-0475/

   (10) https://manpages.debian.org/recv(2)

   (11) https://manpages.debian.org/recv(2)

   (12) https://peps.python.org/pep-0475/

   (13) https://peps.python.org/pep-0475/

   (14) https://peps.python.org/pep-0475/

   (15) https://peps.python.org/pep-0475/

   (16) https://manpages.debian.org/setsockopt(2)


File: python.info,  Node: Notas sobre tempo limite de soquete,  Next: Exemplo<7>,  Prev: Socket Objects,  Up: socket — Interface de rede de baixo nível

5.19.2.9 Notas sobre tempo limite de soquete
............................................

Um objeto soquete pode estar em um dos três modos: bloqueio,
não-bloqueio ou tempo limite.  Por padrão, os soquetes sempre são
criados no modo de bloqueio, mas isso pode ser alterado chamando *note
setdefaulttimeout(): 3613.

   * In 'blocking mode', operations block until complete or the system
     returns an error (such as connection timed out).

   * In 'non-blocking mode', operations fail (with an error that is
     unfortunately system-dependent) if they cannot be completed
     immediately: functions from the *note select: c1. module can be
     used to know when and whether a socket is available for reading or
     writing.

   * In 'timeout mode', operations fail if they cannot be completed
     within the timeout specified for the socket (they raise a *note
     timeout: 837. exception) or if the system returns an error.

     Nota: At the operating system level, sockets in 'timeout mode' are
     internally set in non-blocking mode.  Also, the blocking and
     timeout modes are shared between file descriptors and socket
     objects that refer to the same network endpoint.  This
     implementation detail can have visible consequences if e.g.  you
     decide to use the *note fileno(): 3650. of a socket.

* Menu:

* Timeouts and the connect method::
* Timeouts and the accept method::


File: python.info,  Node: Timeouts and the connect method,  Next: Timeouts and the accept method,  Up: Notas sobre tempo limite de soquete

5.19.2.10 Timeouts and the ‘connect’ method
...........................................

The *note connect(): dcb. operation is also subject to the timeout
setting, and in general it is recommended to call *note settimeout():
360f. before calling *note connect(): dcb. or pass a timeout parameter
to *note create_connection(): 672.  However, the system network stack
may also return a connection timeout error of its own regardless of any
Python socket timeout setting.


File: python.info,  Node: Timeouts and the accept method,  Prev: Timeouts and the connect method,  Up: Notas sobre tempo limite de soquete

5.19.2.11 Timeouts and the ‘accept’ method
..........................................

If *note getdefaulttimeout(): 3644. is not *note None: 675, sockets
returned by the *note accept(): dca. method inherit that timeout.
Otherwise, the behaviour depends on settings of the listening socket:

   * if the listening socket is in 'blocking mode' or in 'timeout mode',
     the socket returned by *note accept(): dca. is in 'blocking mode';

   * if the listening socket is in 'non-blocking mode', whether the
     socket returned by *note accept(): dca. is in blocking or
     non-blocking mode is operating system-dependent.  If you want to
     ensure cross-platform behaviour, it is recommended you manually
     override this setting.


File: python.info,  Node: Exemplo<7>,  Prev: Notas sobre tempo limite de soquete,  Up: socket — Interface de rede de baixo nível

5.19.2.12 Exemplo
.................

Here are four minimal example programs using the TCP/IP protocol: a
server that echoes all data that it receives back (servicing only one
client), and a client using it.  Note that a server must perform the
sequence *note socket(): dc9, *note bind(): 1583, *note listen(): e8d,
*note accept(): dca. (possibly repeating the *note accept(): dca. to
service more than one client), while a client only needs the sequence
*note socket(): dc9, *note connect(): dcb.  Also note that the server
does not *note sendall(): dd0./*note recv(): dcc. on the socket it is
listening on but on the new socket returned by *note accept(): dca.

The first two examples support IPv4 only.

     # Echo server program
     import socket

     HOST = ''                 # Symbolic name meaning all available interfaces
     PORT = 50007              # Arbitrary non-privileged port
     with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
         s.bind((HOST, PORT))
         s.listen(1)
         conn, addr = s.accept()
         with conn:
             print('Connected by', addr)
             while True:
                 data = conn.recv(1024)
                 if not data: break
                 conn.sendall(data)

     # Echo client program
     import socket

     HOST = 'daring.cwi.nl'    # The remote host
     PORT = 50007              # The same port as used by the server
     with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
         s.connect((HOST, PORT))
         s.sendall(b'Hello, world')
         data = s.recv(1024)
     print('Received', repr(data))

The next two examples are identical to the above two, but support both
IPv4 and IPv6.  The server side will listen to the first address family
available (it should listen to both instead).  On most of IPv6-ready
systems, IPv6 will take precedence and the server may not accept IPv4
traffic.  The client side will try to connect to all the addresses
returned as a result of the name resolution, and sends traffic to the
first one connected successfully.

     # Echo server program
     import socket
     import sys

     HOST = None               # Symbolic name meaning all available interfaces
     PORT = 50007              # Arbitrary non-privileged port
     s = None
     for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC,
                                   socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
         af, socktype, proto, canonname, sa = res
         try:
             s = socket.socket(af, socktype, proto)
         except OSError as msg:
             s = None
             continue
         try:
             s.bind(sa)
             s.listen(1)
         except OSError as msg:
             s.close()
             s = None
             continue
         break
     if s is None:
         print('could not open socket')
         sys.exit(1)
     conn, addr = s.accept()
     with conn:
         print('Connected by', addr)
         while True:
             data = conn.recv(1024)
             if not data: break
             conn.send(data)

     # Echo client program
     import socket
     import sys

     HOST = 'daring.cwi.nl'    # The remote host
     PORT = 50007              # The same port as used by the server
     s = None
     for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM):
         af, socktype, proto, canonname, sa = res
         try:
             s = socket.socket(af, socktype, proto)
         except OSError as msg:
             s = None
             continue
         try:
             s.connect(sa)
         except OSError as msg:
             s.close()
             s = None
             continue
         break
     if s is None:
         print('could not open socket')
         sys.exit(1)
     with s:
         s.sendall(b'Hello, world')
         data = s.recv(1024)
     print('Received', repr(data))

The next example shows how to write a very simple network sniffer with
raw sockets on Windows.  The example requires administrator privileges
to modify the interface:

     import socket

     # the public network interface
     HOST = socket.gethostbyname(socket.gethostname())

     # create a raw socket and bind it to the public interface
     s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
     s.bind((HOST, 0))

     # Include IP headers
     s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)

     # receive all packets
     s.ioctl(socket.SIO_RCVALL, socket.RCVALL_ON)

     # receive a packet
     print(s.recvfrom(65565))

     # disabled promiscuous mode
     s.ioctl(socket.SIO_RCVALL, socket.RCVALL_OFF)

The next example shows how to use the socket interface to communicate to
a CAN network using the raw socket protocol.  To use CAN with the
broadcast manager protocol instead, open a socket with:

     socket.socket(socket.AF_CAN, socket.SOCK_DGRAM, socket.CAN_BCM)

After binding (‘CAN_RAW’) or connecting (*note CAN_BCM: fd7.) the
socket, you can use the *note socket.send(): dcf. and *note
socket.recv(): dcc. operations (and their counterparts) on the socket
object as usual.

This last example might require special privileges:

     import socket
     import struct


     # CAN frame packing/unpacking (see 'struct can_frame' in <linux/can.h>)

     can_frame_fmt = "=IB3x8s"
     can_frame_size = struct.calcsize(can_frame_fmt)

     def build_can_frame(can_id, data):
         can_dlc = len(data)
         data = data.ljust(8, b'\x00')
         return struct.pack(can_frame_fmt, can_id, can_dlc, data)

     def dissect_can_frame(frame):
         can_id, can_dlc, data = struct.unpack(can_frame_fmt, frame)
         return (can_id, can_dlc, data[:can_dlc])


     # create a raw socket and bind it to the 'vcan0' interface
     s = socket.socket(socket.AF_CAN, socket.SOCK_RAW, socket.CAN_RAW)
     s.bind(('vcan0',))

     while True:
         cf, addr = s.recvfrom(can_frame_size)

         print('Received: can_id=%x, can_dlc=%x, data=%s' % dissect_can_frame(cf))

         try:
             s.send(cf)
         except OSError:
             print('Error sending CAN frame')

         try:
             s.send(build_can_frame(0x01, b'\x01\x02\x03'))
         except OSError:
             print('Error sending CAN frame')

Running an example several times with too small delay between
executions, could lead to this error:

     OSError: [Errno 98] Address already in use

This is because the previous execution has left the socket in a
‘TIME_WAIT’ state, and can’t be immediately reused.

There is a *note socket: cc. flag to set, in order to prevent this,
‘socket.SO_REUSEADDR’:

     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
     s.bind((HOST, PORT))

the ‘SO_REUSEADDR’ flag tells the kernel to reuse a local socket in
‘TIME_WAIT’ state, without waiting for its natural timeout to expire.

Ver também
..........

Para uma introdução à programação de socket (em C), veja os seguintes
artigos:

   - 'An Introductory 4.3BSD Interprocess Communication Tutorial', by
     Stuart Sechrest

   - 'An Advanced 4.3BSD Interprocess Communication Tutorial', by Samuel
     J. Leffler et al,

both in the UNIX Programmer’s Manual, Supplementary Documents 1
(sections PS1:7 and PS1:8).  The platform-specific reference material
for the various socket-related system calls are also a valuable source
of information on the details of socket semantics.  For Unix, refer to
the manual pages; for Windows, see the WinSock (or Winsock 2)
specification.  For IPv6-ready APIs, readers may want to refer to RFC
3493(1) titled Basic Socket Interface Extensions for IPv6.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc3493.html


File: python.info,  Node: ssl — Invólucro de TLS/SSL para objetos socket,  Next: select — Waiting for I/O completion,  Prev: socket — Interface de rede de baixo nível,  Up: Comunicação em Rede e Interprocesso

5.19.3 ‘ssl’ — Invólucro de TLS/SSL para objetos socket
-------------------------------------------------------

'Código-fonte:' Lib/ssl.py(1)

__________________________________________________________________

Este módulo fornece acesso à criptografia Transport Layer Security
(frequentemente conhecida como “Secure Sockets Layer”) e aos recursos de
autenticação de pares para sockets de rede, tanto do lado do cliente
quanto do lado do servidor.  Este módulo usa a biblioteca OpenSSL. Ela
está disponível em todos os sistemas Unix modernos, Windows, macOS e
provavelmente plataformas adicionais, desde que o OpenSSL esteja
instalado nessa plataforma.

     Nota: Alguns comportamentos podem depender da plataforma, já que
     chamadas são feitas para as APIs de socket do sistema operacional.
     A versão instalada do OpenSSL também pode causar variações no
     comportamento.  Por exemplo, o TLSv1.3 vem com a versão 1.1.1 do
     OpenSSL.

     Aviso: Não use este módulo sem ler o *note Considerações de
     segurança: 354c.  Fazer isso pode levar a uma falsa sensação de
     segurança, pois as configurações padrão do módulo ssl não são
     necessariamente apropriadas para sua aplicação.

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

Esta seção documenta os objetos e funções no módulo ‘ssl’; para obter
mais informações gerais sobre TLS, SSL e certificados, o leitor pode
consultar os documentos na seção “Consulte também” na parte inferior.

Este módulo fornece uma classe, *note ssl.SSLSocket: 8f0, que é derivada
do tipo *note socket.socket: dc9, e fornece um wrapper semelhante a um
socket que também criptografa e descriptografa os dados que passam pelo
socket com SSL. Ele suporta métodos adicionais como ‘getpeercert()’, que
recupera o certificado do outro lado da conexão, ‘cipher()’, que
recupera a cifra sendo usada para a conexão segura ou
‘get_verified_chain()’, ‘get_unverified_chain()’ que recupera a cadeia
de certificados.

Para aplicações mais sofisticadas, a classe *note ssl.SSLContext: 294.
ajuda a gerenciar configurações e certificados, que podem ser herdados
por soquetes SSL criados por meio do método *note
SSLContext.wrap_socket(): 525.

Alterado na versão 3.5.3: Atualizado para oferecer suporte à vinculação
com OpenSSL 1.1.0

Alterado na versão 3.6: OpenSSL 0.9.8, 1.0.0 e 1.0.1 estão descontinuado
e não são mais suportados.  No futuro, o módulo ssl exigirá pelo menos
OpenSSL 1.0.2 ou 1.1.0.

Alterado na versão 3.10: PEP 644(2) foi implementado.  O módulo ssl
requer OpenSSL 1.1.1 ou mais recente.

O uso de constantes e funções descontinuados resulta em avisos de
descontinuação.

* Menu:

* Funções, constantes e exceções.: Funções constantes e exceções.
* SSL Sockets::
* SSL Contexts::
* Certificados::
* Exemplos: Exemplos<20>.
* Notes on non-blocking sockets::
* Підтримка BIO пам’яті: Підтримка BIO пам’яті<2>.
* SSL session::
* Considerações de segurança: Considerações de segurança<2>.
* TLS 1.3: TLS 1 3.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/ssl.py

   (2) https://peps.python.org/pep-0644/


File: python.info,  Node: Funções constantes e exceções,  Next: SSL Sockets,  Up: ssl — Invólucro de TLS/SSL para objetos socket

5.19.3.1 Funções, constantes e exceções.
........................................

* Menu:

* Criação de socket::
* Criação de contexto::
* Exceções: Exceções<16>.
* Random generation::
* Manipulação de certificados::
* Constantes: Constantes<9>.


File: python.info,  Node: Criação de socket,  Next: Criação de contexto,  Up: Funções constantes e exceções

5.19.3.2 Criação de socket
..........................

Instâncias de *note SSLSocket: 8f0. devem ser criadas usando o método
*note SSLContext.wrap_socket(): 525.  A função auxiliar *note
create_default_context(): 155. retorna um novo contexto com
configurações padrão seguras.

Exemplo de soquete de cliente com contexto padrão e pilha dupla
IPv4/IPv6:

     import socket
     import ssl

     hostname = 'www.python.org'
     context = ssl.create_default_context()

     with socket.create_connection((hostname, 443)) as sock:
         with context.wrap_socket(sock, server_hostname=hostname) as ssock:
             print(ssock.version())

Exemplo de soquete de cliente com contexto personalizado e IPv4:

     hostname = 'www.python.org'
     # PROTOCOL_TLS_CLIENT requer hostname e cadeia de certificados
     context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
     context.load_verify_locations('path/to/cabundle.pem')

     with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
         with context.wrap_socket(sock, server_hostname=hostname) as ssock:
             print(ssock.version())

Exemplo de soquete de servidor escutando no localhost IPv4:

     context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
     context.load_cert_chain('/caminho/para/cadeia-certicado.pem', '/caminho/para/privado.key')

     with socket.socket(socket.AF_INET, socket.SOCK_STREAM, 0) as sock:
         sock.bind(('127.0.0.1', 8443))
         sock.listen(5)
         with context.wrap_socket(sock, server_side=True) as ssock:
             conn, addr = ssock.accept()
             ...


File: python.info,  Node: Criação de contexto,  Next: Exceções<16>,  Prev: Criação de socket,  Up: Funções constantes e exceções

5.19.3.3 Criação de contexto
............................

A convenience function helps create *note SSLContext: 294. objects for
common purposes.

 -- Função: ssl.create_default_context (purpose=Purpose.SERVER_AUTH, *,
          cafile=None, capath=None, cadata=None)

     Return a new *note SSLContext: 294. object with default settings
     for the given 'purpose'.  The settings are chosen by the *note ssl:
     d0. module, and usually represent a higher security level than when
     calling the *note SSLContext: 294. constructor directly.

     'cafile', 'capath', 'cadata' represent optional CA certificates to
     trust for certificate verification, as in *note
     SSLContext.load_verify_locations(): f1d.  If all three are *note
     None: 675, this function can choose to trust the system’s default
     CA certificates instead.

     The settings are: *note PROTOCOL_TLS_CLIENT: 876. or *note
     PROTOCOL_TLS_SERVER: 877, *note OP_NO_SSLv2: 83c, and *note
     OP_NO_SSLv3: 83d. with high encryption cipher suites without RC4
     and without unauthenticated cipher suites.  Passing *note
     SERVER_AUTH: fe7. as 'purpose' sets *note verify_mode: 3662. to
     *note CERT_REQUIRED: 3663. and either loads CA certificates (when
     at least one of 'cafile', 'capath' or 'cadata' is given) or uses
     *note SSLContext.load_default_certs(): fe6. to load default CA
     certificates.

     When *note keylog_filename: 3664. is supported and the environment
     variable ‘SSLKEYLOGFILE’ is set, *note create_default_context():
     155. enables key logging.

     The default settings for this context include *note
     VERIFY_X509_PARTIAL_CHAIN: 156. and *note VERIFY_X509_STRICT: 157.
     These make the underlying OpenSSL implementation behave more like a
     conforming implementation of RFC 5280(1), in exchange for a small
     amount of incompatibility with older X.509 certificates.

          Nota: The protocol, options, cipher and other settings may
          change to more restrictive values anytime without prior
          deprecation.  The values represent a fair balance between
          compatibility and security.

          If your application needs specific settings, you should create
          a *note SSLContext: 294. and apply the settings yourself.

          Nota: If you find that when certain older clients or servers
          attempt to connect with a *note SSLContext: 294. created by
          this function that they get an error stating “Protocol or
          cipher suite mismatch”, it may be that they only support
          SSL3.0 which this function excludes using the *note
          OP_NO_SSLv3: 83d.  SSL3.0 is widely considered to be
          completely broken(2).  If you still wish to continue to use
          this function but still allow SSL 3.0 connections you can
          re-enable them using:

               ctx = ssl.create_default_context(Purpose.CLIENT_AUTH)
               ctx.options &= ~ssl.OP_NO_SSLv3

          Nota: This context enables *note VERIFY_X509_STRICT: 157. by
          default, which may reject pre- RFC 5280(3) or malformed
          certificates that the underlying OpenSSL implementation
          otherwise would accept.  While disabling this is not
          recommended, you can do so using:

               ctx = ssl.create_default_context()
               ctx.verify_flags &= ~ssl.VERIFY_X509_STRICT

     Adicionado na versão 3.4.

     Alterado na versão 3.4.4: RC4 was dropped from the default cipher
     string.

     Alterado na versão 3.6: ChaCha20/Poly1305 was added to the default
     cipher string.

     3DES was dropped from the default cipher string.

     Alterado na versão 3.8: Support for key logging to ‘SSLKEYLOGFILE’
     was added.

     Alterado na versão 3.10: The context now uses *note
     PROTOCOL_TLS_CLIENT: 876. or *note PROTOCOL_TLS_SERVER: 877.
     protocol instead of generic *note PROTOCOL_TLS: 3665.

     Alterado na versão 3.13: The context now uses *note
     VERIFY_X509_PARTIAL_CHAIN: 156. and *note VERIFY_X509_STRICT: 157.
     in its default verify flags.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc5280.html

   (2) https://en.wikipedia.org/wiki/POODLE

   (3) https://datatracker.ietf.org/doc/html/rfc5280.html


File: python.info,  Node: Exceções<16>,  Next: Random generation,  Prev: Criação de contexto,  Up: Funções constantes e exceções

5.19.3.4 Exceções
.................

 -- Exceção: ssl.SSLError

     Raised to signal an error from the underlying SSL implementation
     (currently provided by the OpenSSL library).  This signifies some
     problem in the higher-level encryption and authentication layer
     that’s superimposed on the underlying network connection.  This
     error is a subtype of *note OSError: 417.  The error code and
     message of *note SSLError: 12bb. instances are provided by the
     OpenSSL library.

     Alterado na versão 3.3: *note SSLError: 12bb. used to be a subtype
     of *note socket.error: 108e.

      -- Atributo: library

          A string mnemonic designating the OpenSSL submodule in which
          the error occurred, such as ‘SSL’, ‘PEM’ or ‘X509’.  The range
          of possible values depends on the OpenSSL version.

          Adicionado na versão 3.3.

      -- Atributo: reason

          A string mnemonic designating the reason this error occurred,
          for example ‘CERTIFICATE_VERIFY_FAILED’.  The range of
          possible values depends on the OpenSSL version.

          Adicionado na versão 3.3.

 -- Exceção: ssl.SSLZeroReturnError

     A subclass of *note SSLError: 12bb. raised when trying to read or
     write and the SSL connection has been closed cleanly.  Note that
     this doesn’t mean that the underlying transport (read TCP) has been
     closed.

     Adicionado na versão 3.3.

 -- Exceção: ssl.SSLWantReadError

     A subclass of *note SSLError: 12bb. raised by a *note non-blocking
     SSL socket: 3668. when trying to read or write data, but more data
     needs to be received on the underlying TCP transport before the
     request can be fulfilled.

     Adicionado na versão 3.3.

 -- Exceção: ssl.SSLWantWriteError

     A subclass of *note SSLError: 12bb. raised by a *note non-blocking
     SSL socket: 3668. when trying to read or write data, but more data
     needs to be sent on the underlying TCP transport before the request
     can be fulfilled.

     Adicionado na versão 3.3.

 -- Exceção: ssl.SSLSyscallError

     A subclass of *note SSLError: 12bb. raised when a system error was
     encountered while trying to fulfill an operation on a SSL socket.
     Unfortunately, there is no easy way to inspect the original errno
     number.

     Adicionado na versão 3.3.

 -- Exceção: ssl.SSLEOFError

     A subclass of *note SSLError: 12bb. raised when the SSL connection
     has been terminated abruptly.  Generally, you shouldn’t try to
     reuse the underlying transport when this error is encountered.

     Adicionado na versão 3.3.

 -- Exceção: ssl.SSLCertVerificationError

     A subclass of *note SSLError: 12bb. raised when certificate
     validation has failed.

     Adicionado na versão 3.7.

      -- Atributo: verify_code

          A numeric error number that denotes the verification error.

      -- Atributo: verify_message

          A human readable string of the verification error.

 -- Exceção: ssl.CertificateError

     An alias for *note SSLCertVerificationError: b94.

     Alterado na versão 3.7: The exception is now an alias for *note
     SSLCertVerificationError: b94.


File: python.info,  Node: Random generation,  Next: Manipulação de certificados,  Prev: Exceções<16>,  Up: Funções constantes e exceções

5.19.3.5 Random generation
..........................

 -- Função: ssl.RAND_bytes (num, /)

     Return 'num' cryptographically strong pseudo-random bytes.  Raises
     an *note SSLError: 12bb. if the PRNG has not been seeded with
     enough data or if the operation is not supported by the current
     RAND method.  *note RAND_status(): 1a0a. can be used to check the
     status of the PRNG and *note RAND_add(): 366e. can be used to seed
     the PRNG.

     For almost all applications *note os.urandom(): 523. is preferable.

     Read the Wikipedia article, Cryptographically secure pseudorandom
     number generator (CSPRNG)(1), to get the requirements of a
     cryptographically strong generator.

     Adicionado na versão 3.3.

 -- Função: ssl.RAND_status ()

     Return ‘True’ if the SSL pseudo-random number generator has been
     seeded with ‘enough’ randomness, and ‘False’ otherwise.  You can
     use ‘ssl.RAND_egd()’ and *note ssl.RAND_add(): 366e. to increase
     the randomness of the pseudo-random number generator.

 -- Função: ssl.RAND_add (bytes, entropy, /)

     Mix the given 'bytes' into the SSL pseudo-random number generator.
     The parameter 'entropy' (a float) is a lower bound on the entropy
     contained in string (so you can always use ‘0.0’).  See RFC 1750(2)
     for more information on sources of entropy.

     Alterado na versão 3.5: Writable *note bytes-like object: d4f. is
     now accepted.

   ---------- Footnotes ----------

   (1) 
https://en.wikipedia.org/wiki/Cryptographically_secure_pseudorandom_number_generator

   (2) https://datatracker.ietf.org/doc/html/rfc1750.html


File: python.info,  Node: Manipulação de certificados,  Next: Constantes<9>,  Prev: Random generation,  Up: Funções constantes e exceções

5.19.3.6 Manipulação de certificados
....................................

 -- Função: ssl.cert_time_to_seconds (cert_time)

     Return the time in seconds since the Epoch, given the ‘cert_time’
     string representing the “notBefore” or “notAfter” date from a
     certificate in ‘"%b %d %H:%M:%S %Y %Z"’ strptime format (C locale).

     Here’s an example:

          >>> import ssl
          >>> timestamp = ssl.cert_time_to_seconds("Jan  5 09:34:43 2018 GMT")
          >>> timestamp
          1515144883
          >>> from datetime import datetime
          >>> print(datetime.utcfromtimestamp(timestamp))
          2018-01-05 09:34:43

     “notBefore” or “notAfter” dates must use GMT ( RFC 5280(1)).

     Alterado na versão 3.5: Interpret the input time as a time in UTC
     as specified by ‘GMT’ timezone in the input string.  Local timezone
     was used previously.  Return an integer (no fractions of a second
     in the input format)

 -- Função: ssl.get_server_certificate (addr,
          ssl_version=PROTOCOL_TLS_CLIENT, ca_certs=None[, timeout])

     Given the address ‘addr’ of an SSL-protected server, as a
     ('hostname', 'port-number') pair, fetches the server’s certificate,
     and returns it as a PEM-encoded string.  If ‘ssl_version’ is
     specified, uses that version of the SSL protocol to attempt to
     connect to the server.  If 'ca_certs' is specified, it should be a
     file containing a list of root certificates, the same format as
     used for the 'cafile' parameter in *note
     SSLContext.load_verify_locations(): f1d.  The call will attempt to
     validate the server certificate against that set of root
     certificates, and will fail if the validation attempt fails.  A
     timeout can be specified with the ‘timeout’ parameter.

     Alterado na versão 3.3: This function is now IPv6-compatible.

     Alterado na versão 3.5: The default 'ssl_version' is changed from
     *note PROTOCOL_SSLv3: 3670. to *note PROTOCOL_TLS: 3665. for
     maximum compatibility with modern servers.

     Alterado na versão 3.10: The 'timeout' parameter was added.

 -- Função: ssl.DER_cert_to_PEM_cert (der_cert_bytes)

     Given a certificate as a DER-encoded blob of bytes, returns a
     PEM-encoded string version of the same certificate.

 -- Função: ssl.PEM_cert_to_DER_cert (pem_cert_string)

     Given a certificate as an ASCII PEM string, returns a DER-encoded
     sequence of bytes for that same certificate.

 -- Função: ssl.get_default_verify_paths ()

     Returns a named tuple with paths to OpenSSL’s default cafile and
     capath.  The paths are the same as used by *note
     SSLContext.set_default_verify_paths(): fdf.  The return value is a
     *note named tuple: 64e. ‘DefaultVerifyPaths’:

        * ‘cafile’ - resolved path to cafile or ‘None’ if the file
          doesn’t exist,

        * ‘capath’ - resolved path to capath or ‘None’ if the directory
          doesn’t exist,

        * ‘openssl_cafile_env’ - OpenSSL’s environment key that points
          to a cafile,

        * ‘openssl_cafile’ - hard coded path to a cafile,

        * ‘openssl_capath_env’ - OpenSSL’s environment key that points
          to a capath,

        * ‘openssl_capath’ - hard coded path to a capath directory

     Adicionado na versão 3.4.

 -- Função: ssl.enum_certificates (store_name)

     Retrieve certificates from Windows’ system cert store.
     'store_name' may be one of ‘CA’, ‘ROOT’ or ‘MY’.  Windows may
     provide additional cert stores, too.

     The function returns a list of (cert_bytes, encoding_type, trust)
     tuples.  The encoding_type specifies the encoding of cert_bytes.
     It is either ‘x509_asn’ for X.509 ASN.1 data or ‘pkcs_7_asn’ for
     PKCS#7 ASN.1 data.  Trust specifies the purpose of the certificate
     as a set of OIDS or exactly ‘True’ if the certificate is
     trustworthy for all purposes.

     Exemplo:

          >>> ssl.enum_certificates("CA")
          [(b'data...', 'x509_asn', {'1.3.6.1.5.5.7.3.1', '1.3.6.1.5.5.7.3.2'}),
           (b'data...', 'x509_asn', True)]

     *note Disponibilidade: 1ed8.: Windows.

     Adicionado na versão 3.4.

 -- Função: ssl.enum_crls (store_name)

     Retrieve CRLs from Windows’ system cert store.  'store_name' may be
     one of ‘CA’, ‘ROOT’ or ‘MY’.  Windows may provide additional cert
     stores, too.

     The function returns a list of (cert_bytes, encoding_type, trust)
     tuples.  The encoding_type specifies the encoding of cert_bytes.
     It is either ‘x509_asn’ for X.509 ASN.1 data or ‘pkcs_7_asn’ for
     PKCS#7 ASN.1 data.

     *note Disponibilidade: 1ed8.: Windows.

     Adicionado na versão 3.4.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc5280.html


File: python.info,  Node: Constantes<9>,  Prev: Manipulação de certificados,  Up: Funções constantes e exceções

5.19.3.7 Constantes
...................

     All constants are now *note enum.IntEnum: d00. or *note
     enum.IntFlag: cbb. collections.

     Adicionado na versão 3.6.

 -- Dado: ssl.CERT_NONE

     Possible value for *note SSLContext.verify_mode: 3662.  Except for
     *note PROTOCOL_TLS_CLIENT: 876, it is the default mode.  With
     client-side sockets, just about any cert is accepted.  Validation
     errors, such as untrusted or expired cert, are ignored and do not
     abort the TLS/SSL handshake.

     In server mode, no certificate is requested from the client, so the
     client does not send any for client cert authentication.

     See the discussion of *note Considerações de segurança: 354c.
     below.

 -- Dado: ssl.CERT_OPTIONAL

     Possible value for *note SSLContext.verify_mode: 3662.  In client
     mode, *note CERT_OPTIONAL: 3675. has the same meaning as *note
     CERT_REQUIRED: 3663.  It is recommended to use *note CERT_REQUIRED:
     3663. for client-side sockets instead.

     In server mode, a client certificate request is sent to the client.
     The client may either ignore the request or send a certificate in
     order perform TLS client cert authentication.  If the client
     chooses to send a certificate, it is verified.  Any verification
     error immediately aborts the TLS handshake.

     Use of this setting requires a valid set of CA certificates to be
     passed to *note SSLContext.load_verify_locations(): f1d.

 -- Dado: ssl.CERT_REQUIRED

     Possible value for *note SSLContext.verify_mode: 3662.  In this
     mode, certificates are required from the other side of the socket
     connection; an *note SSLError: 12bb. will be raised if no
     certificate is provided, or if its validation fails.  This mode is
     'not' sufficient to verify a certificate in client mode as it does
     not match hostnames.  *note check_hostname: 3676. must be enabled
     as well to verify the authenticity of a cert.  *note
     PROTOCOL_TLS_CLIENT: 876. uses *note CERT_REQUIRED: 3663. and
     enables *note check_hostname: 3676. by default.

     With server socket, this mode provides mandatory TLS client cert
     authentication.  A client certificate request is sent to the client
     and the client must provide a valid and trusted certificate.

     Use of this setting requires a valid set of CA certificates to be
     passed to *note SSLContext.load_verify_locations(): f1d.

 -- Classe: ssl.VerifyMode

     *note enum.IntEnum: d00. collection of CERT_* constants.

     Adicionado na versão 3.6.

 -- Dado: ssl.VERIFY_DEFAULT

     Possible value for *note SSLContext.verify_flags: fe2.  In this
     mode, certificate revocation lists (CRLs) are not checked.  By
     default OpenSSL does neither require nor verify CRLs.

     Adicionado na versão 3.4.

 -- Dado: ssl.VERIFY_CRL_CHECK_LEAF

     Possible value for *note SSLContext.verify_flags: fe2.  In this
     mode, only the peer cert is checked but none of the intermediate CA
     certificates.  The mode requires a valid CRL that is signed by the
     peer cert’s issuer (its direct ancestor CA). If no proper CRL has
     been loaded with *note SSLContext.load_verify_locations: f1d,
     validation will fail.

     Adicionado na versão 3.4.

 -- Dado: ssl.VERIFY_CRL_CHECK_CHAIN

     Possible value for *note SSLContext.verify_flags: fe2.  In this
     mode, CRLs of all certificates in the peer cert chain are checked.

     Adicionado na versão 3.4.

 -- Dado: ssl.VERIFY_X509_STRICT

     Possible value for *note SSLContext.verify_flags: fe2. to disable
     workarounds for broken X.509 certificates.

     Adicionado na versão 3.4.

 -- Dado: ssl.VERIFY_ALLOW_PROXY_CERTS

     Possible value for *note SSLContext.verify_flags: fe2. to enables
     proxy certificate verification.

     Adicionado na versão 3.10.

 -- Dado: ssl.VERIFY_X509_TRUSTED_FIRST

     Possible value for *note SSLContext.verify_flags: fe2.  It
     instructs OpenSSL to prefer trusted certificates when building the
     trust chain to validate a certificate.  This flag is enabled by
     default.

     Adicionado na versão 3.4.4.

 -- Dado: ssl.VERIFY_X509_PARTIAL_CHAIN

     Possible value for *note SSLContext.verify_flags: fe2.  It
     instructs OpenSSL to accept intermediate CAs in the trust store to
     be treated as trust-anchors, in the same way as the self-signed
     root CA certificates.  This makes it possible to trust certificates
     issued by an intermediate CA without having to trust its ancestor
     root CA.

     Adicionado na versão 3.10.

 -- Classe: ssl.VerifyFlags

     *note enum.IntFlag: cbb. collection of VERIFY_* constants.

     Adicionado na versão 3.6.

 -- Dado: ssl.PROTOCOL_TLS

     Selects the highest protocol version that both the client and
     server support.  Despite the name, this option can select both
     “SSL” and “TLS” protocols.

     Adicionado na versão 3.6.

     Descontinuado desde a versão 3.10: TLS clients and servers require
     different default settings for secure communication.  The generic
     TLS protocol constant is deprecated in favor of *note
     PROTOCOL_TLS_CLIENT: 876. and *note PROTOCOL_TLS_SERVER: 877.

 -- Dado: ssl.PROTOCOL_TLS_CLIENT

     Auto-negotiate the highest protocol version that both the client
     and server support, and configure the context client-side
     connections.  The protocol enables *note CERT_REQUIRED: 3663. and
     *note check_hostname: 3676. by default.

     Adicionado na versão 3.6.

 -- Dado: ssl.PROTOCOL_TLS_SERVER

     Auto-negotiate the highest protocol version that both the client
     and server support, and configure the context server-side
     connections.

     Adicionado na versão 3.6.

 -- Dado: ssl.PROTOCOL_SSLv23

     Alias for *note PROTOCOL_TLS: 3665.

     Descontinuado desde a versão 3.6: Use *note PROTOCOL_TLS: 3665.
     instead.

 -- Dado: ssl.PROTOCOL_SSLv3

     Selects SSL version 3 as the channel encryption protocol.

     This protocol is not available if OpenSSL is compiled with the
     ‘no-ssl3’ option.

          Aviso: SSL version 3 is insecure.  Its use is highly
          discouraged.

     Descontinuado desde a versão 3.6: OpenSSL has deprecated all
     version specific protocols.  Use the default protocol *note
     PROTOCOL_TLS_SERVER: 877. or *note PROTOCOL_TLS_CLIENT: 876. with
     *note SSLContext.minimum_version: 874. and *note
     SSLContext.maximum_version: 875. instead.

 -- Dado: ssl.PROTOCOL_TLSv1

     Selects TLS version 1.0 as the channel encryption protocol.

     Descontinuado desde a versão 3.6: OpenSSL has deprecated all
     version specific protocols.

 -- Dado: ssl.PROTOCOL_TLSv1_1

     Selects TLS version 1.1 as the channel encryption protocol.
     Available only with openssl version 1.0.1+.

     Adicionado na versão 3.4.

     Descontinuado desde a versão 3.6: OpenSSL has deprecated all
     version specific protocols.

 -- Dado: ssl.PROTOCOL_TLSv1_2

     Selects TLS version 1.2 as the channel encryption protocol.
     Available only with openssl version 1.0.1+.

     Adicionado na versão 3.4.

     Descontinuado desde a versão 3.6: OpenSSL has deprecated all
     version specific protocols.

 -- Dado: ssl.OP_ALL

     Enables workarounds for various bugs present in other SSL
     implementations.  This option is set by default.  It does not
     necessarily set the same flags as OpenSSL’s ‘SSL_OP_ALL’ constant.

     Adicionado na versão 3.2.

 -- Dado: ssl.OP_NO_SSLv2

     Prevents an SSLv2 connection.  This option is only applicable in
     conjunction with *note PROTOCOL_TLS: 3665.  It prevents the peers
     from choosing SSLv2 as the protocol version.

     Adicionado na versão 3.2.

     Descontinuado desde a versão 3.6: SSLv2 is deprecated

 -- Dado: ssl.OP_NO_SSLv3

     Prevents an SSLv3 connection.  This option is only applicable in
     conjunction with *note PROTOCOL_TLS: 3665.  It prevents the peers
     from choosing SSLv3 as the protocol version.

     Adicionado na versão 3.2.

     Descontinuado desde a versão 3.6: SSLv3 is deprecated

 -- Dado: ssl.OP_NO_TLSv1

     Prevents a TLSv1 connection.  This option is only applicable in
     conjunction with *note PROTOCOL_TLS: 3665.  It prevents the peers
     from choosing TLSv1 as the protocol version.

     Adicionado na versão 3.2.

     Descontinuado desde a versão 3.7: The option is deprecated since
     OpenSSL 1.1.0, use the new *note SSLContext.minimum_version: 874.
     and *note SSLContext.maximum_version: 875. instead.

 -- Dado: ssl.OP_NO_TLSv1_1

     Prevents a TLSv1.1 connection.  This option is only applicable in
     conjunction with *note PROTOCOL_TLS: 3665.  It prevents the peers
     from choosing TLSv1.1 as the protocol version.  Available only with
     openssl version 1.0.1+.

     Adicionado na versão 3.4.

     Descontinuado desde a versão 3.7: The option is deprecated since
     OpenSSL 1.1.0.

 -- Dado: ssl.OP_NO_TLSv1_2

     Prevents a TLSv1.2 connection.  This option is only applicable in
     conjunction with *note PROTOCOL_TLS: 3665.  It prevents the peers
     from choosing TLSv1.2 as the protocol version.  Available only with
     openssl version 1.0.1+.

     Adicionado na versão 3.4.

     Descontinuado desde a versão 3.7: The option is deprecated since
     OpenSSL 1.1.0.

 -- Dado: ssl.OP_NO_TLSv1_3

     Prevents a TLSv1.3 connection.  This option is only applicable in
     conjunction with *note PROTOCOL_TLS: 3665.  It prevents the peers
     from choosing TLSv1.3 as the protocol version.  TLS 1.3 is
     available with OpenSSL 1.1.1 or later.  When Python has been
     compiled against an older version of OpenSSL, the flag defaults to
     '0'.

     Adicionado na versão 3.6.3.

     Descontinuado desde a versão 3.7: The option is deprecated since
     OpenSSL 1.1.0.  It was added to 2.7.15 and 3.6.3 for backwards
     compatibility with OpenSSL 1.0.2.

 -- Dado: ssl.OP_NO_RENEGOTIATION

     Disable all renegotiation in TLSv1.2 and earlier.  Do not send
     HelloRequest messages, and ignore renegotiation requests via
     ClientHello.

     This option is only available with OpenSSL 1.1.0h and later.

     Adicionado na versão 3.7.

 -- Dado: ssl.OP_CIPHER_SERVER_PREFERENCE

     Use the server’s cipher ordering preference, rather than the
     client’s.  This option has no effect on client sockets and SSLv2
     server sockets.

     Adicionado na versão 3.3.

 -- Dado: ssl.OP_SINGLE_DH_USE

     Prevents reuse of the same DH key for distinct SSL sessions.  This
     improves forward secrecy but requires more computational resources.
     This option only applies to server sockets.

     Adicionado na versão 3.3.

 -- Dado: ssl.OP_SINGLE_ECDH_USE

     Prevents reuse of the same ECDH key for distinct SSL sessions.
     This improves forward secrecy but requires more computational
     resources.  This option only applies to server sockets.

     Adicionado na versão 3.3.

 -- Dado: ssl.OP_ENABLE_MIDDLEBOX_COMPAT

     Send dummy Change Cipher Spec (CCS) messages in TLS 1.3 handshake
     to make a TLS 1.3 connection look more like a TLS 1.2 connection.

     This option is only available with OpenSSL 1.1.1 and later.

     Adicionado na versão 3.8.

 -- Dado: ssl.OP_NO_COMPRESSION

     Disable compression on the SSL channel.  This is useful if the
     application protocol supports its own compression scheme.

     Adicionado na versão 3.3.

 -- Classe: ssl.Options

     *note enum.IntFlag: cbb. collection of OP_* constants.

 -- Dado: ssl.OP_NO_TICKET

     Prevent client side from requesting a session ticket.

     Adicionado na versão 3.6.

 -- Dado: ssl.OP_IGNORE_UNEXPECTED_EOF

     Ignore unexpected shutdown of TLS connections.

     This option is only available with OpenSSL 3.0.0 and later.

     Adicionado na versão 3.10.

 -- Dado: ssl.OP_ENABLE_KTLS

     Enable the use of the kernel TLS. To benefit from the feature,
     OpenSSL must have been compiled with support for it, and the
     negotiated cipher suites and extensions must be supported by it (a
     list of supported ones may vary by platform and kernel version).

     Note that with enabled kernel TLS some cryptographic operations are
     performed by the kernel directly and not via any available OpenSSL
     Providers.  This might be undesirable if, for example, the
     application requires all cryptographic operations to be performed
     by the FIPS provider.

     This option is only available with OpenSSL 3.0.0 and later.

     Adicionado na versão 3.12.

 -- Dado: ssl.OP_LEGACY_SERVER_CONNECT

     Allow legacy insecure renegotiation between OpenSSL and unpatched
     servers only.

     Adicionado na versão 3.12.

 -- Dado: ssl.HAS_ALPN

     Whether the OpenSSL library has built-in support for the
     'Application-Layer Protocol Negotiation' TLS extension as described
     in RFC 7301(1).

     Adicionado na versão 3.5.

 -- Dado: ssl.HAS_NEVER_CHECK_COMMON_NAME

     Whether the OpenSSL library has built-in support not checking
     subject common name and *note
     SSLContext.hostname_checks_common_name: b95. is writeable.

     Adicionado na versão 3.7.

 -- Dado: ssl.HAS_ECDH

     Whether the OpenSSL library has built-in support for the Elliptic
     Curve-based Diffie-Hellman key exchange.  This should be true
     unless the feature was explicitly disabled by the distributor.

     Adicionado na versão 3.3.

 -- Dado: ssl.HAS_SNI

     Whether the OpenSSL library has built-in support for the 'Server
     Name Indication' extension (as defined in RFC 6066(2)).

     Adicionado na versão 3.2.

 -- Dado: ssl.HAS_NPN

     Whether the OpenSSL library has built-in support for the 'Next
     Protocol Negotiation' as described in the Application Layer
     Protocol Negotiation(3).  When true, you can use the *note
     SSLContext.set_npn_protocols(): 302. method to advertise which
     protocols you want to support.

     Adicionado na versão 3.3.

 -- Dado: ssl.HAS_SSLv2

     Whether the OpenSSL library has built-in support for the SSL 2.0
     protocol.

     Adicionado na versão 3.7.

 -- Dado: ssl.HAS_SSLv3

     Whether the OpenSSL library has built-in support for the SSL 3.0
     protocol.

     Adicionado na versão 3.7.

 -- Dado: ssl.HAS_TLSv1

     Whether the OpenSSL library has built-in support for the TLS 1.0
     protocol.

     Adicionado na versão 3.7.

 -- Dado: ssl.HAS_TLSv1_1

     Whether the OpenSSL library has built-in support for the TLS 1.1
     protocol.

     Adicionado na versão 3.7.

 -- Dado: ssl.HAS_TLSv1_2

     Whether the OpenSSL library has built-in support for the TLS 1.2
     protocol.

     Adicionado na versão 3.7.

 -- Dado: ssl.HAS_TLSv1_3

     Whether the OpenSSL library has built-in support for the TLS 1.3
     protocol.

     Adicionado na versão 3.7.

 -- Dado: ssl.HAS_PSK

     Whether the OpenSSL library has built-in support for TLS-PSK.

     Adicionado na versão 3.13.

 -- Dado: ssl.CHANNEL_BINDING_TYPES

     List of supported TLS channel binding types.  Strings in this list
     can be used as arguments to *note SSLSocket.get_channel_binding():
     1183.

     Adicionado na versão 3.3.

 -- Dado: ssl.OPENSSL_VERSION

     The version string of the OpenSSL library loaded by the
     interpreter:

          >>> ssl.OPENSSL_VERSION
          'OpenSSL 1.0.2k  26 Jan 2017'

     Adicionado na versão 3.2.

 -- Dado: ssl.OPENSSL_VERSION_INFO

     A tuple of five integers representing version information about the
     OpenSSL library:

          >>> ssl.OPENSSL_VERSION_INFO
          (1, 0, 2, 11, 15)

     Adicionado na versão 3.2.

 -- Dado: ssl.OPENSSL_VERSION_NUMBER

     The raw version number of the OpenSSL library, as a single integer:

          >>> ssl.OPENSSL_VERSION_NUMBER
          268443839
          >>> hex(ssl.OPENSSL_VERSION_NUMBER)
          '0x100020bf'

     Adicionado na versão 3.2.

 -- Dado: ssl.ALERT_DESCRIPTION_HANDSHAKE_FAILURE
 -- Dado: ssl.ALERT_DESCRIPTION_INTERNAL_ERROR

 -- Dado: ALERT_DESCRIPTION_*

     Alert Descriptions from RFC 5246(4) and others.  The IANA TLS Alert
     Registry(5) contains this list and references to the RFCs where
     their meaning is defined.

     Used as the return value of the callback function in *note
     SSLContext.set_servername_callback(): feb.

     Adicionado na versão 3.4.

 -- Classe: ssl.AlertDescription

     *note enum.IntEnum: d00. collection of ALERT_DESCRIPTION_*
     constants.

     Adicionado na versão 3.6.

 -- Dado: Purpose.SERVER_AUTH

     Option for *note create_default_context(): 155. and *note
     SSLContext.load_default_certs(): fe6.  This value indicates that
     the context may be used to authenticate web servers (therefore, it
     will be used to create client-side sockets).

     Adicionado na versão 3.4.

 -- Dado: Purpose.CLIENT_AUTH

     Option for *note create_default_context(): 155. and *note
     SSLContext.load_default_certs(): fe6.  This value indicates that
     the context may be used to authenticate web clients (therefore, it
     will be used to create server-side sockets).

     Adicionado na versão 3.4.

 -- Classe: ssl.SSLErrorNumber

     *note enum.IntEnum: d00. collection of SSL_ERROR_* constants.

     Adicionado na versão 3.6.

 -- Classe: ssl.TLSVersion

     *note enum.IntEnum: d00. collection of SSL and TLS versions for
     *note SSLContext.maximum_version: 875. and *note
     SSLContext.minimum_version: 874.

     Adicionado na versão 3.7.

 -- Atributo: TLSVersion.MINIMUM_SUPPORTED

 -- Atributo: TLSVersion.MAXIMUM_SUPPORTED

     The minimum or maximum supported SSL or TLS version.  These are
     magic constants.  Their values don’t reflect the lowest and highest
     available TLS/SSL versions.

 -- Atributo: TLSVersion.SSLv3

 -- Atributo: TLSVersion.TLSv1

 -- Atributo: TLSVersion.TLSv1_1

 -- Atributo: TLSVersion.TLSv1_2

 -- Atributo: TLSVersion.TLSv1_3

     SSL 3.0 to TLS 1.3.

     Descontinuado desde a versão 3.10: All *note TLSVersion: 3695.
     members except *note TLSVersion.TLSv1_2: 369b. and *note
     TLSVersion.TLSv1_3: 369c. are deprecated.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc7301.html

   (2) https://datatracker.ietf.org/doc/html/rfc6066.html

   (3) 
https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation

   (4) https://datatracker.ietf.org/doc/html/rfc5246.html

   (5) 
https://www.iana.org/assignments/tls-parameters/tls-parameters.xml#tls-parameters-6


File: python.info,  Node: SSL Sockets,  Next: SSL Contexts,  Prev: Funções constantes e exceções,  Up: ssl — Invólucro de TLS/SSL para objetos socket

5.19.3.8 SSL Sockets
....................

 -- Classe: ssl.SSLSocket (socket.socket)

     SSL sockets provide the following methods of *note Socket Objects:
     3642.:

        - *note accept(): dca.

        - *note bind(): 1583.

        - *note close(): d66.

        - *note connect(): dcb.

        - *note detach(): 125d.

        - *note fileno(): 3650.

        - *note getpeername(): 3590, *note getsockname(): 3591.

        - *note getsockopt(): cf5, *note setsockopt(): cf6.

        - *note gettimeout(): 3651, *note settimeout(): 360f, *note
          setblocking(): 2d1d.

        - *note listen(): e8d.

        - *note makefile(): 11de.

        - *note recv(): dcc, *note recv_into(): 1362. (but passing a
          non-zero ‘flags’ argument is not allowed)

        - *note send(): dcf, *note sendall(): dd0. (with the same
          limitation)

        - *note sendfile(): e8c. (but *note os.sendfile: b21. will be
          used for plain-text sockets only, else *note send(): dcf. will
          be used)

        - *note shutdown(): 363f.

     However, since the SSL (and TLS) protocol has its own framing atop
     of TCP, the SSL sockets abstraction can, in certain respects,
     diverge from the specification of normal, OS-level sockets.  See
     especially the *note notes on non-blocking sockets: 3668.

     Instances of *note SSLSocket: 8f0. must be created using the *note
     SSLContext.wrap_socket(): 525. method.

     Alterado na versão 3.5: The ‘sendfile()’ method was added.

     Alterado na versão 3.5: The ‘shutdown()’ does not reset the socket
     timeout each time bytes are received or sent.  The socket timeout
     is now the maximum total duration of the shutdown.

     Descontinuado desde a versão 3.6: It is deprecated to create a
     *note SSLSocket: 8f0. instance directly, use *note
     SSLContext.wrap_socket(): 525. to wrap a socket.

     Alterado na versão 3.7: *note SSLSocket: 8f0. instances must to
     created with *note wrap_socket(): 525.  In earlier versions, it was
     possible to create instances directly.  This was never documented
     or officially supported.

     Alterado na versão 3.10: Python now uses ‘SSL_read_ex’ and
     ‘SSL_write_ex’ internally.  The functions support reading and
     writing of data larger than 2 GB. Writing zero-length data no
     longer fails with a protocol violation error.

SSL sockets also have the following additional methods and attributes:

 -- Método: SSLSocket.read (len=1024, buffer=None)

     Read up to 'len' bytes of data from the SSL socket and return the
     result as a ‘bytes’ instance.  If 'buffer' is specified, then read
     into the buffer instead, and return the number of bytes read.

     Raise *note SSLWantReadError: e98. or *note SSLWantWriteError: e99.
     if the socket is *note non-blocking: 3668. and the read would
     block.

     As at any time a re-negotiation is possible, a call to *note
     read(): e9d. can also cause write operations.

     Alterado na versão 3.5: The socket timeout is no longer reset each
     time bytes are received or sent.  The socket timeout is now the
     maximum total duration to read up to 'len' bytes.

     Descontinuado desde a versão 3.6: Use ‘recv()’ instead of *note
     read(): e9d.

 -- Método: SSLSocket.write (data)

     Write 'data' to the SSL socket and return the number of bytes
     written.  The 'data' argument must be an object supporting the
     buffer interface.

     Raise *note SSLWantReadError: e98. or *note SSLWantWriteError: e99.
     if the socket is *note non-blocking: 3668. and the write would
     block.

     As at any time a re-negotiation is possible, a call to *note
     write(): e9e. can also cause read operations.

     Alterado na versão 3.5: The socket timeout is no longer reset each
     time bytes are received or sent.  The socket timeout is now the
     maximum total duration to write 'data'.

     Descontinuado desde a versão 3.6: Use ‘send()’ instead of *note
     write(): e9e.

     Nota: The *note read(): e9d. and *note write(): e9e. methods are
     the low-level methods that read and write unencrypted,
     application-level data and decrypt/encrypt it to encrypted,
     wire-level data.  These methods require an active SSL connection,
     i.e.  the handshake was completed and *note SSLSocket.unwrap():
     369e. was not called.

     Normally you should use the socket API methods like *note recv():
     dcc. and *note send(): dcf. instead of these methods.

 -- Método: SSLSocket.do_handshake (block=False)

     Perform the SSL setup handshake.

     If 'block' is true and the timeout obtained by *note gettimeout():
     3651. is zero, the socket is set in blocking mode until the
     handshake is performed.

     Alterado na versão 3.4: The handshake method also performs
     ‘match_hostname()’ when the *note check_hostname: 3676. attribute
     of the socket’s *note context: 369f. is true.

     Alterado na versão 3.5: The socket timeout is no longer reset each
     time bytes are received or sent.  The socket timeout is now the
     maximum total duration of the handshake.

     Alterado na versão 3.7: Hostname or IP address is matched by
     OpenSSL during handshake.  The function ‘match_hostname()’ is no
     longer used.  In case OpenSSL refuses a hostname or IP address, the
     handshake is aborted early and a TLS alert message is sent to the
     peer.

 -- Método: SSLSocket.getpeercert (binary_form=False)

     If there is no certificate for the peer on the other end of the
     connection, return ‘None’.  If the SSL handshake hasn’t been done
     yet, raise *note ValueError: 202.

     If the ‘binary_form’ parameter is *note False: b49, and a
     certificate was received from the peer, this method returns a *note
     dict: 256. instance.  If the certificate was not validated, the
     dict is empty.  If the certificate was validated, it returns a dict
     with several keys, amongst them ‘subject’ (the principal for which
     the certificate was issued) and ‘issuer’ (the principal issuing the
     certificate).  If a certificate contains an instance of the
     'Subject Alternative Name' extension (see RFC 3280(1)), there will
     also be a ‘subjectAltName’ key in the dictionary.

     The ‘subject’ and ‘issuer’ fields are tuples containing the
     sequence of relative distinguished names (RDNs) given in the
     certificate’s data structure for the respective fields, and each
     RDN is a sequence of name-value pairs.  Here is a real-world
     example:

          {'issuer': ((('countryName', 'IL'),),
                      (('organizationName', 'StartCom Ltd.'),),
                      (('organizationalUnitName',
                        'Secure Digital Certificate Signing'),),
                      (('commonName',
                        'StartCom Class 2 Primary Intermediate Server CA'),)),
           'notAfter': 'Nov 22 08:15:19 2013 GMT',
           'notBefore': 'Nov 21 03:09:52 2011 GMT',
           'serialNumber': '95F0',
           'subject': ((('description', '571208-SLe257oHY9fVQ07Z'),),
                       (('countryName', 'US'),),
                       (('stateOrProvinceName', 'California'),),
                       (('localityName', 'San Francisco'),),
                       (('organizationName', 'Electronic Frontier Foundation, Inc.'),),
                       (('commonName', '*.eff.org'),),
                       (('emailAddress', 'hostmaster@eff.org'),)),
           'subjectAltName': (('DNS', '*.eff.org'), ('DNS', 'eff.org')),
           'version': 3}

     If the ‘binary_form’ parameter is *note True: c27, and a
     certificate was provided, this method returns the DER-encoded form
     of the entire certificate as a sequence of bytes, or *note None:
     675. if the peer did not provide a certificate.  Whether the peer
     provides a certificate depends on the SSL socket’s role:

        * for a client SSL socket, the server will always provide a
          certificate, regardless of whether validation was required;

        * for a server SSL socket, the client will only provide a
          certificate when requested by the server; therefore *note
          getpeercert(): fec. will return *note None: 675. if you used
          *note CERT_NONE: 3674. (rather than *note CERT_OPTIONAL: 3675.
          or *note CERT_REQUIRED: 3663.).

     See also *note SSLContext.check_hostname: 3676.

     Alterado na versão 3.2: The returned dictionary includes additional
     items such as ‘issuer’ and ‘notBefore’.

     Alterado na versão 3.4: *note ValueError: 202. is raised when the
     handshake isn’t done.  The returned dictionary includes additional
     X509v3 extension items such as ‘crlDistributionPoints’, ‘caIssuers’
     and ‘OCSP’ URIs.

     Alterado na versão 3.9: IPv6 address strings no longer have a
     trailing new line.

 -- Método: SSLSocket.get_verified_chain ()

     Returns verified certificate chain provided by the other end of the
     SSL channel as a list of DER-encoded bytes.  If certificate
     verification was disabled method acts the same as *note
     get_unverified_chain(): 16c7.

     Adicionado na versão 3.13.

 -- Método: SSLSocket.get_unverified_chain ()

     Returns raw certificate chain provided by the other end of the SSL
     channel as a list of DER-encoded bytes.

     Adicionado na versão 3.13.

 -- Método: SSLSocket.cipher ()

     Returns a three-value tuple containing the name of the cipher being
     used, the version of the SSL protocol that defines its use, and the
     number of secret bits being used.  If no connection has been
     established, returns ‘None’.

 -- Método: SSLSocket.shared_ciphers ()

     Return the list of ciphers available in both the client and server.
     Each entry of the returned list is a three-value tuple containing
     the name of the cipher, the version of the SSL protocol that
     defines its use, and the number of secret bits the cipher uses.
     *note shared_ciphers(): e9b. returns ‘None’ if no connection has
     been established or the socket is a client socket.

     Adicionado na versão 3.5.

 -- Método: SSLSocket.compression ()

     Return the compression algorithm being used as a string, or ‘None’
     if the connection isn’t compressed.

     If the higher-level protocol supports its own compression
     mechanism, you can use *note OP_NO_COMPRESSION: 1185. to disable
     SSL-level compression.

     Adicionado na versão 3.3.

 -- Método: SSLSocket.get_channel_binding (cb_type='tls-unique')

     Get channel binding data for current connection, as a bytes object.
     Returns ‘None’ if not connected or the handshake has not been
     completed.

     The 'cb_type' parameter allow selection of the desired channel
     binding type.  Valid channel binding types are listed in the *note
     CHANNEL_BINDING_TYPES: 3690. list.  Currently only the ‘tls-unique’
     channel binding, defined by RFC 5929(2), is supported.  *note
     ValueError: 202. will be raised if an unsupported channel binding
     type is requested.

     Adicionado na versão 3.3.

 -- Método: SSLSocket.selected_alpn_protocol ()

     Return the protocol that was selected during the TLS handshake.  If
     *note SSLContext.set_alpn_protocols(): e93. was not called, if the
     other party does not support ALPN, if this socket does not support
     any of the client’s proposed protocols, or if the handshake has not
     happened yet, ‘None’ is returned.

     Adicionado na versão 3.5.

 -- Método: SSLSocket.selected_npn_protocol ()

     Return the higher-level protocol that was selected during the
     TLS/SSL handshake.  If *note SSLContext.set_npn_protocols(): 302.
     was not called, or if the other party does not support NPN, or if
     the handshake has not yet happened, this will return ‘None’.

     Adicionado na versão 3.3.

     Descontinuado desde a versão 3.10: NPN has been superseded by ALPN

 -- Método: SSLSocket.unwrap ()

     Performs the SSL shutdown handshake, which removes the TLS layer
     from the underlying socket, and returns the underlying socket
     object.  This can be used to go from encrypted operation over a
     connection to unencrypted.  The returned socket should always be
     used for further communication with the other side of the
     connection, rather than the original socket.

 -- Método: SSLSocket.verify_client_post_handshake ()

     Requests post-handshake authentication (PHA) from a TLS 1.3 client.
     PHA can only be initiated for a TLS 1.3 connection from a
     server-side socket, after the initial TLS handshake and with PHA
     enabled on both sides, see *note SSLContext.post_handshake_auth:
     a3b.

     The method does not perform a cert exchange immediately.  The
     server-side sends a CertificateRequest during the next write event
     and expects the client to respond with a certificate on the next
     read event.

     If any precondition isn’t met (e.g.  not TLS 1.3, PHA not enabled),
     an *note SSLError: 12bb. is raised.

          Nota: Only available with OpenSSL 1.1.1 and TLS 1.3 enabled.
          Without TLS 1.3 support, the method raises *note
          NotImplementedError: 228.

     Adicionado na versão 3.8.

 -- Método: SSLSocket.version ()

     Return the actual SSL protocol version negotiated by the connection
     as a string, or ‘None’ if no secure connection is established.  As
     of this writing, possible return values include ‘"SSLv2"’,
     ‘"SSLv3"’, ‘"TLSv1"’, ‘"TLSv1.1"’ and ‘"TLSv1.2"’.  Recent OpenSSL
     versions may define more return values.

     Adicionado na versão 3.5.

 -- Método: SSLSocket.pending ()

     Returns the number of already decrypted bytes available for read,
     pending on the connection.

 -- Atributo: SSLSocket.context

     The *note SSLContext: 294. object this SSL socket is tied to.

     Adicionado na versão 3.2.

 -- Atributo: SSLSocket.server_side

     A boolean which is ‘True’ for server-side sockets and ‘False’ for
     client-side sockets.

     Adicionado na versão 3.2.

 -- Atributo: SSLSocket.server_hostname

     Hostname of the server: *note str: 44c. type, or ‘None’ for
     server-side socket or if the hostname was not specified in the
     constructor.

     Adicionado na versão 3.2.

     Alterado na versão 3.7: The attribute is now always ASCII text.
     When ‘server_hostname’ is an internationalized domain name (IDN),
     this attribute now stores the A-label form (‘"xn--pythn-mua.org"’),
     rather than the U-label form (‘"pythön.org"’).

 -- Atributo: SSLSocket.session

     The *note SSLSession: cfe. for this SSL connection.  The session is
     available for client and server side sockets after the TLS
     handshake has been performed.  For client sockets the session can
     be set before *note do_handshake(): e9c. has been called to reuse a
     session.

     Adicionado na versão 3.6.

 -- Atributo: SSLSocket.session_reused

     Adicionado na versão 3.6.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc3280.html

   (2) https://datatracker.ietf.org/doc/html/rfc5929.html


File: python.info,  Node: SSL Contexts,  Next: Certificados,  Prev: SSL Sockets,  Up: ssl — Invólucro de TLS/SSL para objetos socket

5.19.3.9 SSL Contexts
.....................

Adicionado na versão 3.2.

An SSL context holds various data longer-lived than single SSL
connections, such as SSL configuration options, certificate(s) and
private key(s).  It also manages a cache of SSL sessions for server-side
sockets, in order to speed up repeated connections from the same
clients.

 -- Classe: ssl.SSLContext (protocol=None)

     Create a new SSL context.  You may pass 'protocol' which must be
     one of the ‘PROTOCOL_*’ constants defined in this module.  The
     parameter specifies which version of the SSL protocol to use.
     Typically, the server chooses a particular protocol version, and
     the client must adapt to the server’s choice.  Most of the versions
     are not interoperable with the other versions.  If not specified,
     the default is *note PROTOCOL_TLS: 3665.; it provides the most
     compatibility with other versions.

     Here’s a table showing which versions in a client (down the side)
     can connect to which versions in a server (along the top):

     'client' / 'server'          'SSLv2'          'SSLv3'          'TLS' (1)         'TLSv1'       'TLSv1.1'       'TLSv1.2'
                                                                                                                    
                                                                                                                    
     'SSLv2'                      sim              não              no (2)            não           não             não
                                                                                                                    
                                                                                                                    
     'SSLv3'                      não              sim              no (3)            não           não             não
                                                                                                                    
                                                                                                                    
     'TLS' ('SSLv23') (4)         no (5)           no (6)           sim               sim           sim             sim
                                                                                                                    
                                                                                                                    
     'TLSv1'                      não              não              sim               sim           não             não
                                                                                                                    
                                                                                                                    
     'TLSv1.1'                    não              não              sim               não           sim             não
                                                                                                                    
                                                                                                                    
     'TLSv1.2'                    não              não              sim               não           não             sim
                                                                                                                    

     Ver também
     ..........

     *note create_default_context(): 155. lets the *note ssl: d0. module
     choose security settings for a given purpose.

     Alterado na versão 3.6: The context is created with secure default
     values.  The options *note OP_NO_COMPRESSION: 1185, *note
     OP_CIPHER_SERVER_PREFERENCE: 1188, *note OP_SINGLE_DH_USE: 3681,
     *note OP_SINGLE_ECDH_USE: 3682, *note OP_NO_SSLv2: 83c, and *note
     OP_NO_SSLv3: 83d. (except for *note PROTOCOL_SSLv3: 3670.) are set
     by default.  The initial cipher suite list contains only ‘HIGH’
     ciphers, no ‘NULL’ ciphers and no ‘MD5’ ciphers.

     Descontinuado desde a versão 3.10: *note SSLContext: 294. without
     protocol argument is deprecated.  The context class will either
     require *note PROTOCOL_TLS_CLIENT: 876. or *note
     PROTOCOL_TLS_SERVER: 877. protocol in the future.

     Alterado na versão 3.10: The default cipher suites now include only
     secure AES and ChaCha20 ciphers with forward secrecy and security
     level 2.  RSA and DH keys with less than 2048 bits and ECC keys
     with less than 224 bits are prohibited.  *note PROTOCOL_TLS: 3665,
     *note PROTOCOL_TLS_CLIENT: 876, and *note PROTOCOL_TLS_SERVER: 877.
     use TLS 1.2 as minimum TLS version.

          Nota: *note SSLContext: 294. only supports limited mutation
          once it has been used by a connection.  Adding new
          certificates to the internal trust store is allowed, but
          changing ciphers, verification settings, or mTLS certificates
          may result in surprising behavior.

          Nota: *note SSLContext: 294. is designed to be shared and used
          by multiple connections.  Thus, it is thread-safe as long as
          it is not reconfigured after being used by a connection.

*note SSLContext: 294. objects have the following methods and
attributes:

 -- Método: SSLContext.cert_store_stats ()

     Get statistics about quantities of loaded X.509 certificates, count
     of X.509 certificates flagged as CA certificates and certificate
     revocation lists as dictionary.

     Example for a context with one CA cert and one other cert:

          >>> context.cert_store_stats()
          {'crl': 0, 'x509_ca': 1, 'x509': 2}

     Adicionado na versão 3.4.

 -- Método: SSLContext.load_cert_chain (certfile, keyfile=None,
          password=None)

     Load a private key and the corresponding certificate.  The
     'certfile' string must be the path to a single file in PEM format
     containing the certificate as well as any number of CA certificates
     needed to establish the certificate’s authenticity.  The 'keyfile'
     string, if present, must point to a file containing the private
     key.  Otherwise the private key will be taken from 'certfile' as
     well.  See the discussion of *note Certificados: 36a4. for more
     information on how the certificate is stored in the 'certfile'.

     The 'password' argument may be a function to call to get the
     password for decrypting the private key.  It will only be called if
     the private key is encrypted and a password is necessary.  It will
     be called with no arguments, and it should return a string, bytes,
     or bytearray.  If the return value is a string it will be encoded
     as UTF-8 before using it to decrypt the key.  Alternatively a
     string, bytes, or bytearray value may be supplied directly as the
     'password' argument.  It will be ignored if the private key is not
     encrypted and no password is needed.

     If the 'password' argument is not specified and a password is
     required, OpenSSL’s built-in password prompting mechanism will be
     used to interactively prompt the user for a password.

     An *note SSLError: 12bb. is raised if the private key doesn’t match
     with the certificate.

     Alterado na versão 3.3: New optional argument 'password'.

 -- Método: SSLContext.load_default_certs (purpose=Purpose.SERVER_AUTH)

     Load a set of default “certification authority” (CA) certificates
     from default locations.  On Windows it loads CA certs from the ‘CA’
     and ‘ROOT’ system stores.  On all systems it calls *note
     SSLContext.set_default_verify_paths(): fdf.  In the future the
     method may load CA certificates from other locations, too.

     The 'purpose' flag specifies what kind of CA certificates are
     loaded.  The default settings *note Purpose.SERVER_AUTH: fe7. loads
     certificates, that are flagged and trusted for TLS web server
     authentication (client side sockets).  *note Purpose.CLIENT_AUTH:
     fe8. loads CA certificates for client certificate verification on
     the server side.

     Adicionado na versão 3.4.

 -- Método: SSLContext.load_verify_locations (cafile=None, capath=None,
          cadata=None)

     Load a set of “certification authority” (CA) certificates used to
     validate other peers’ certificates when *note verify_mode: 3662. is
     other than *note CERT_NONE: 3674.  At least one of 'cafile' or
     'capath' must be specified.

     This method can also load certification revocation lists (CRLs) in
     PEM or DER format.  In order to make use of CRLs, *note
     SSLContext.verify_flags: fe2. must be configured properly.

     The 'cafile' string, if present, is the path to a file of
     concatenated CA certificates in PEM format.  See the discussion of
     *note Certificados: 36a4. for more information about how to arrange
     the certificates in this file.

     The 'capath' string, if present, is the path to a directory
     containing several CA certificates in PEM format, following an
     OpenSSL specific layout(7).

     The 'cadata' object, if present, is either an ASCII string of one
     or more PEM-encoded certificates or a *note bytes-like object: d4f.
     of DER-encoded certificates.  Like with 'capath' extra lines around
     PEM-encoded certificates are ignored but at least one certificate
     must be present.

     Alterado na versão 3.4: New optional argument 'cadata'

 -- Método: SSLContext.get_ca_certs (binary_form=False)

     Get a list of loaded “certification authority” (CA) certificates.
     If the ‘binary_form’ parameter is *note False: b49. each list entry
     is a dict like the output of *note SSLSocket.getpeercert(): fec.
     Otherwise the method returns a list of DER-encoded certificates.
     The returned list does not contain certificates from 'capath'
     unless a certificate was requested and loaded by a SSL connection.

          Nota: Certificates in a capath directory aren’t loaded unless
          they have been used at least once.

     Adicionado na versão 3.4.

 -- Método: SSLContext.get_ciphers ()

     Get a list of enabled ciphers.  The list is in order of cipher
     priority.  See *note SSLContext.set_ciphers(): 36a5.

     Exemplo:

          >>> ctx = ssl.SSLContext(ssl.PROTOCOL_SSLv23)
          >>> ctx.set_ciphers('ECDHE+AESGCM:!ECDSA')
          >>> ctx.get_ciphers()
          [{'aead': True,
            'alg_bits': 256,
            'auth': 'auth-rsa',
            'description': 'ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH     Au=RSA  '
                           'Enc=AESGCM(256) Mac=AEAD',
            'digest': None,
            'id': 50380848,
            'kea': 'kx-ecdhe',
            'name': 'ECDHE-RSA-AES256-GCM-SHA384',
            'protocol': 'TLSv1.2',
            'strength_bits': 256,
            'symmetric': 'aes-256-gcm'},
           {'aead': True,
            'alg_bits': 128,
            'auth': 'auth-rsa',
            'description': 'ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  '
                           'Enc=AESGCM(128) Mac=AEAD',
            'digest': None,
            'id': 50380847,
            'kea': 'kx-ecdhe',
            'name': 'ECDHE-RSA-AES128-GCM-SHA256',
            'protocol': 'TLSv1.2',
            'strength_bits': 128,
            'symmetric': 'aes-128-gcm'}]

     Adicionado na versão 3.6.

 -- Método: SSLContext.set_default_verify_paths ()

     Load a set of default “certification authority” (CA) certificates
     from a filesystem path defined when building the OpenSSL library.
     Unfortunately, there’s no easy way to know whether this method
     succeeds: no error is returned if no certificates are to be found.
     When the OpenSSL library is provided as part of the operating
     system, though, it is likely to be configured properly.

 -- Método: SSLContext.set_ciphers (ciphers, /)

     Set the available ciphers for sockets created with this context.
     It should be a string in the OpenSSL cipher list format(8).  If no
     cipher can be selected (because compile-time options or other
     configuration forbids use of all the specified ciphers), an *note
     SSLError: 12bb. will be raised.

          Nota: when connected, the *note SSLSocket.cipher(): 3592.
          method of SSL sockets will give the currently selected cipher.

          TLS 1.3 cipher suites cannot be disabled with *note
          set_ciphers(): 36a5.

 -- Método: SSLContext.set_alpn_protocols (alpn_protocols)

     Specify which protocols the socket should advertise during the
     SSL/TLS handshake.  It should be a list of ASCII strings, like
     ‘['http/1.1', 'spdy/2']’, ordered by preference.  The selection of
     a protocol will happen during the handshake, and will play out
     according to RFC 7301(9).  After a successful handshake, the *note
     SSLSocket.selected_alpn_protocol(): e94. method will return the
     agreed-upon protocol.

     This method will raise *note NotImplementedError: 228. if *note
     HAS_ALPN: e95. is ‘False’.

     Adicionado na versão 3.5.

 -- Método: SSLContext.set_npn_protocols (npn_protocols)

     Specify which protocols the socket should advertise during the
     SSL/TLS handshake.  It should be a list of strings, like
     ‘['http/1.1', 'spdy/2']’, ordered by preference.  The selection of
     a protocol will happen during the handshake, and will play out
     according to the Application Layer Protocol Negotiation(10).  After
     a successful handshake, the *note
     SSLSocket.selected_npn_protocol(): 878. method will return the
     agreed-upon protocol.

     This method will raise *note NotImplementedError: 228. if *note
     HAS_NPN: 3689. is ‘False’.

     Adicionado na versão 3.3.

     Descontinuado desde a versão 3.10: NPN has been superseded by ALPN

 -- Atributo: SSLContext.sni_callback

     Register a callback function that will be called after the TLS
     Client Hello handshake message has been received by the SSL/TLS
     server when the TLS client specifies a server name indication.  The
     server name indication mechanism is specified in RFC 6066(11)
     section 3 - Server Name Indication.

     Only one callback can be set per ‘SSLContext’.  If 'sni_callback'
     is set to ‘None’ then the callback is disabled.  Calling this
     function a subsequent time will disable the previously registered
     callback.

     The callback function will be called with three arguments; the
     first being the *note ssl.SSLSocket: 8f0, the second is a string
     that represents the server name that the client is intending to
     communicate (or *note None: 675. if the TLS Client Hello does not
     contain a server name) and the third argument is the original *note
     SSLContext: 294.  The server name argument is text.  For
     internationalized domain name, the server name is an IDN A-label
     (‘"xn--pythn-mua.org"’).

     A typical use of this callback is to change the *note
     ssl.SSLSocket: 8f0.’s *note SSLSocket.context: 369f. attribute to a
     new object of type *note SSLContext: 294. representing a
     certificate chain that matches the server name.

     Due to the early negotiation phase of the TLS connection, only
     limited methods and attributes are usable like *note
     SSLSocket.selected_alpn_protocol(): e94. and *note
     SSLSocket.context: 369f.  The *note SSLSocket.getpeercert(): fec,
     *note SSLSocket.get_verified_chain(): 16c6, *note
     SSLSocket.get_unverified_chain(): 16c7. *note SSLSocket.cipher():
     3592. and *note SSLSocket.compression(): 1184. methods require that
     the TLS connection has progressed beyond the TLS Client Hello and
     therefore will not return meaningful values nor can they be called
     safely.

     The 'sni_callback' function must return ‘None’ to allow the TLS
     negotiation to continue.  If a TLS failure is required, a constant
     *note ALERT_DESCRIPTION_*: 3692. can be returned.  Other return
     values will result in a TLS fatal error with *note
     ALERT_DESCRIPTION_INTERNAL_ERROR: 3692.

     If an exception is raised from the 'sni_callback' function the TLS
     connection will terminate with a fatal TLS alert message *note
     ALERT_DESCRIPTION_HANDSHAKE_FAILURE: 3691.

     This method will raise *note NotImplementedError: 228. if the
     OpenSSL library had OPENSSL_NO_TLSEXT defined when it was built.

     Adicionado na versão 3.7.

 -- Método: SSLContext.set_servername_callback (server_name_callback)

     This is a legacy API retained for backwards compatibility.  When
     possible, you should use *note sni_callback: 1a1b. instead.  The
     given 'server_name_callback' is similar to 'sni_callback', except
     that when the server hostname is an IDN-encoded internationalized
     domain name, the 'server_name_callback' receives a decoded U-label
     (‘"pythön.org"’).

     If there is a decoding error on the server name, the TLS connection
     will terminate with an *note ALERT_DESCRIPTION_INTERNAL_ERROR:
     3692. fatal TLS alert message to the client.

     Adicionado na versão 3.4.

 -- Método: SSLContext.load_dh_params (dhfile, /)

     Load the key generation parameters for Diffie-Hellman (DH) key
     exchange.  Using DH key exchange improves forward secrecy at the
     expense of computational resources (both on the server and on the
     client).  The 'dhfile' parameter should be the path to a file
     containing DH parameters in PEM format.

     This setting doesn’t apply to client sockets.  You can also use the
     *note OP_SINGLE_DH_USE: 3681. option to further improve security.

     Adicionado na versão 3.3.

 -- Método: SSLContext.set_ecdh_curve (curve_name, /)

     Set the curve name for Elliptic Curve-based Diffie-Hellman (ECDH)
     key exchange.  ECDH is significantly faster than regular DH while
     arguably as secure.  The 'curve_name' parameter should be a string
     describing a well-known elliptic curve, for example ‘prime256v1’
     for a widely supported curve.

     This setting doesn’t apply to client sockets.  You can also use the
     *note OP_SINGLE_ECDH_USE: 3682. option to further improve security.

     This method is not available if *note HAS_ECDH: 3687. is ‘False’.

     Adicionado na versão 3.3.

     Ver também
     ..........

     SSL/TLS & Perfect Forward Secrecy(12)

          Vincent Bernat.

 -- Método: SSLContext.wrap_socket (sock, server_side=False,
          do_handshake_on_connect=True, suppress_ragged_eofs=True,
          server_hostname=None, session=None)

     Wrap an existing Python socket 'sock' and return an instance of
     *note SSLContext.sslsocket_class: 36a6. (default *note SSLSocket:
     8f0.).  The returned SSL socket is tied to the context, its
     settings and certificates.  'sock' must be a *note SOCK_STREAM:
     1337. socket; other socket types are unsupported.

     The parameter ‘server_side’ is a boolean which identifies whether
     server-side or client-side behavior is desired from this socket.

     For client-side sockets, the context construction is lazy; if the
     underlying socket isn’t connected yet, the context construction
     will be performed after ‘connect()’ is called on the socket.  For
     server-side sockets, if the socket has no remote peer, it is
     assumed to be a listening socket, and the server-side SSL wrapping
     is automatically performed on client connections accepted via the
     ‘accept()’ method.  The method may raise *note SSLError: 12bb.

     On client connections, the optional parameter 'server_hostname'
     specifies the hostname of the service which we are connecting to.
     This allows a single server to host multiple SSL-based services
     with distinct certificates, quite similarly to HTTP virtual hosts.
     Specifying 'server_hostname' will raise a *note ValueError: 202. if
     'server_side' is true.

     The parameter ‘do_handshake_on_connect’ specifies whether to do the
     SSL handshake automatically after doing a ‘socket.connect()’, or
     whether the application program will call it explicitly, by
     invoking the *note SSLSocket.do_handshake(): e9c. method.  Calling
     *note SSLSocket.do_handshake(): e9c. explicitly gives the program
     control over the blocking behavior of the socket I/O involved in
     the handshake.

     The parameter ‘suppress_ragged_eofs’ specifies how the
     ‘SSLSocket.recv()’ method should signal unexpected EOF from the
     other end of the connection.  If specified as *note True: c27. (the
     default), it returns a normal EOF (an empty bytes object) in
     response to unexpected EOF errors raised from the underlying
     socket; if *note False: b49, it will raise the exceptions back to
     the caller.

     'session', see *note session: 1693.

     To wrap an *note SSLSocket: 8f0. in another *note SSLSocket: 8f0,
     use *note SSLContext.wrap_bio(): b9a.

     Alterado na versão 3.5: Always allow a server_hostname to be
     passed, even if OpenSSL does not have SNI.

     Alterado na versão 3.6: o argumento 'session' foi adicionado.

     Alterado na versão 3.7: The method returns an instance of *note
     SSLContext.sslsocket_class: 36a6. instead of hard-coded *note
     SSLSocket: 8f0.

 -- Atributo: SSLContext.sslsocket_class

     The return type of *note SSLContext.wrap_socket(): 525, defaults to
     *note SSLSocket: 8f0.  The attribute can be assigned to on
     instances of *note SSLContext: 294. in order to return a custom
     subclass of *note SSLSocket: 8f0.

     Adicionado na versão 3.7.

 -- Método: SSLContext.wrap_bio (incoming, outgoing, server_side=False,
          server_hostname=None, session=None)

     Wrap the BIO objects 'incoming' and 'outgoing' and return an
     instance of *note SSLContext.sslobject_class: 36a7. (default *note
     SSLObject: b99.).  The SSL routines will read input data from the
     incoming BIO and write data to the outgoing BIO.

     The 'server_side', 'server_hostname' and 'session' parameters have
     the same meaning as in *note SSLContext.wrap_socket(): 525.

     Alterado na versão 3.6: o argumento 'session' foi adicionado.

     Alterado na versão 3.7: The method returns an instance of *note
     SSLContext.sslobject_class: 36a7. instead of hard-coded *note
     SSLObject: b99.

 -- Atributo: SSLContext.sslobject_class

     The return type of *note SSLContext.wrap_bio(): b9a, defaults to
     *note SSLObject: b99.  The attribute can be overridden on instance
     of class in order to return a custom subclass of *note SSLObject:
     b99.

     Adicionado na versão 3.7.

 -- Método: SSLContext.session_stats ()

     Get statistics about the SSL sessions created or managed by this
     context.  A dictionary is returned which maps the names of each
     piece of information(13) to their numeric values.  For example,
     here is the total number of hits and misses in the session cache
     since the context was created:

          >>> stats = context.session_stats()
          >>> stats['hits'], stats['misses']
          (0, 0)

 -- Atributo: SSLContext.check_hostname

     Whether to match the peer cert’s hostname in *note
     SSLSocket.do_handshake(): e9c.  The context’s *note verify_mode:
     3662. must be set to *note CERT_OPTIONAL: 3675. or *note
     CERT_REQUIRED: 3663, and you must pass 'server_hostname' to *note
     wrap_socket(): 525. in order to match the hostname.  Enabling
     hostname checking automatically sets *note verify_mode: 3662. from
     *note CERT_NONE: 3674. to *note CERT_REQUIRED: 3663.  It cannot be
     set back to *note CERT_NONE: 3674. as long as hostname checking is
     enabled.  The *note PROTOCOL_TLS_CLIENT: 876. protocol enables
     hostname checking by default.  With other protocols, hostname
     checking must be enabled explicitly.

     Exemplo:

          import socket, ssl

          context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
          context.verify_mode = ssl.CERT_REQUIRED
          context.check_hostname = True
          context.load_default_certs()

          s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
          ssl_sock = context.wrap_socket(s, server_hostname='www.verisign.com')
          ssl_sock.connect(('www.verisign.com', 443))

     Adicionado na versão 3.4.

     Alterado na versão 3.7: *note verify_mode: 3662. is now
     automatically changed to *note CERT_REQUIRED: 3663. when hostname
     checking is enabled and *note verify_mode: 3662. is *note
     CERT_NONE: 3674.  Previously the same operation would have failed
     with a *note ValueError: 202.

 -- Atributo: SSLContext.keylog_filename

     Write TLS keys to a keylog file, whenever key material is generated
     or received.  The keylog file is designed for debugging purposes
     only.  The file format is specified by NSS and used by many traffic
     analyzers such as Wireshark.  The log file is opened in append-only
     mode.  Writes are synchronized between threads, but not between
     processes.

     Adicionado na versão 3.8.

 -- Atributo: SSLContext.maximum_version

     A *note TLSVersion: 3695. enum member representing the highest
     supported TLS version.  The value defaults to *note
     TLSVersion.MAXIMUM_SUPPORTED: 3697.  The attribute is read-only for
     protocols other than *note PROTOCOL_TLS: 3665, *note
     PROTOCOL_TLS_CLIENT: 876, and *note PROTOCOL_TLS_SERVER: 877.

     The attributes *note maximum_version: 875, *note minimum_version:
     874. and *note SSLContext.options: 83b. all affect the supported
     SSL and TLS versions of the context.  The implementation does not
     prevent invalid combination.  For example a context with *note
     OP_NO_TLSv1_2: 367f. in *note options: 83b. and *note
     maximum_version: 875. set to *note TLSVersion.TLSv1_2: 369b. will
     not be able to establish a TLS 1.2 connection.

     Adicionado na versão 3.7.

 -- Atributo: SSLContext.minimum_version

     Like *note SSLContext.maximum_version: 875. except it is the lowest
     supported version or *note TLSVersion.MINIMUM_SUPPORTED: 3696.

     Adicionado na versão 3.7.

 -- Atributo: SSLContext.num_tickets

     Control the number of TLS 1.3 session tickets of a *note
     PROTOCOL_TLS_SERVER: 877. context.  The setting has no impact on
     TLS 1.0 to 1.2 connections.

     Adicionado na versão 3.8.

 -- Atributo: SSLContext.options

     An integer representing the set of SSL options enabled on this
     context.  The default value is *note OP_ALL: 367c, but you can
     specify other options such as *note OP_NO_SSLv2: 83c. by ORing them
     together.

     Alterado na versão 3.6: *note SSLContext.options: 83b. returns
     *note Options: 3684. flags:

          >>> ssl.create_default_context().options
          <Options.OP_ALL|OP_NO_SSLv3|OP_NO_SSLv2|OP_NO_COMPRESSION: 2197947391>

     Descontinuado desde a versão 3.7: All ‘OP_NO_SSL*’ and ‘OP_NO_TLS*’
     options have been deprecated since Python 3.7.  Use *note
     SSLContext.minimum_version: 874. and *note
     SSLContext.maximum_version: 875. instead.

 -- Atributo: SSLContext.post_handshake_auth

     Enable TLS 1.3 post-handshake client authentication.
     Post-handshake auth is disabled by default and a server can only
     request a TLS client certificate during the initial handshake.
     When enabled, a server may request a TLS client certificate at any
     time after the handshake.

     When enabled on client-side sockets, the client signals the server
     that it supports post-handshake authentication.

     When enabled on server-side sockets, *note SSLContext.verify_mode:
     3662. must be set to *note CERT_OPTIONAL: 3675. or *note
     CERT_REQUIRED: 3663, too.  The actual client cert exchange is
     delayed until *note SSLSocket.verify_client_post_handshake(): a3c.
     is called and some I/O is performed.

     Adicionado na versão 3.8.

 -- Atributo: SSLContext.protocol

     The protocol version chosen when constructing the context.  This
     attribute is read-only.

 -- Atributo: SSLContext.hostname_checks_common_name

     Whether *note check_hostname: 3676. falls back to verify the cert’s
     subject common name in the absence of a subject alternative name
     extension (default: true).

     Adicionado na versão 3.7.

     Alterado na versão 3.10: The flag had no effect with OpenSSL before
     version 1.1.1l.  Python 3.8.9, 3.9.3, and 3.10 include workarounds
     for previous versions.

 -- Atributo: SSLContext.security_level

     An integer representing the security level(14) for the context.
     This attribute is read-only.

     Adicionado na versão 3.10.

 -- Atributo: SSLContext.verify_flags

     The flags for certificate verification operations.  You can set
     flags like *note VERIFY_CRL_CHECK_LEAF: fe4. by ORing them
     together.  By default OpenSSL does neither require nor verify
     certificate revocation lists (CRLs).

     Adicionado na versão 3.4.

     Alterado na versão 3.6: *note SSLContext.verify_flags: fe2. returns
     *note VerifyFlags: 3679. flags:

          >>> ssl.create_default_context().verify_flags
          <VerifyFlags.VERIFY_X509_TRUSTED_FIRST: 32768>

 -- Atributo: SSLContext.verify_mode

     Whether to try to verify other peers’ certificates and how to
     behave if verification fails.  This attribute must be one of *note
     CERT_NONE: 3674, *note CERT_OPTIONAL: 3675. or *note CERT_REQUIRED:
     3663.

     Alterado na versão 3.6: *note SSLContext.verify_mode: 3662. returns
     *note VerifyMode: 3677. enum:

          >>> ssl.create_default_context().verify_mode
          <VerifyMode.CERT_REQUIRED: 2>

 -- Método: SSLContext.set_psk_client_callback (callback)

     Enables TLS-PSK (pre-shared key) authentication on a client-side
     connection.

     In general, certificate based authentication should be preferred
     over this method.

     The parameter ‘callback’ is a callable object with the signature:
     ‘def callback(hint: str | None) -> tuple[str | None, bytes]’.  The
     ‘hint’ parameter is an optional identity hint sent by the server.
     The return value is a tuple in the form (client-identity, psk).
     Client-identity is an optional string which may be used by the
     server to select a corresponding PSK for the client.  The string
     must be less than or equal to ‘256’ octets when UTF-8 encoded.  PSK
     is a *note bytes-like object: d4f. representing the pre-shared key.
     Return a zero length PSK to reject the connection.

     Setting ‘callback’ to *note None: 675. removes any existing
     callback.

          Nota: When using TLS 1.3:

             - the ‘hint’ parameter is always *note None: 675.

             - client-identity must be a non-empty string.

     Exemplo de uso:

          context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
          context.check_hostname = False
          context.verify_mode = ssl.CERT_NONE
          context.maximum_version = ssl.TLSVersion.TLSv1_2
          context.set_ciphers('PSK')

          # A simple lambda:
          psk = bytes.fromhex('c0ffee')
          context.set_psk_client_callback(lambda hint: (None, psk))

          # A table using the hint from the server:
          psk_table = { 'ServerId_1': bytes.fromhex('c0ffee'),
                        'ServerId_2': bytes.fromhex('facade')
          }
          def callback(hint):
              return 'ClientId_1', psk_table.get(hint, b'')
          context.set_psk_client_callback(callback)

     This method will raise *note NotImplementedError: 228. if *note
     HAS_PSK: 368f. is ‘False’.

     Adicionado na versão 3.13.

 -- Método: SSLContext.set_psk_server_callback (callback,
          identity_hint=None)

     Enables TLS-PSK (pre-shared key) authentication on a server-side
     connection.

     In general, certificate based authentication should be preferred
     over this method.

     The parameter ‘callback’ is a callable object with the signature:
     ‘def callback(identity: str | None) -> bytes’.  The ‘identity’
     parameter is an optional identity sent by the client which can be
     used to select a corresponding PSK. The return value is a *note
     bytes-like object: d4f. representing the pre-shared key.  Return a
     zero length PSK to reject the connection.

     Setting ‘callback’ to *note None: 675. removes any existing
     callback.

     The parameter ‘identity_hint’ is an optional identity hint string
     sent to the client.  The string must be less than or equal to ‘256’
     octets when UTF-8 encoded.

          Nota: When using TLS 1.3 the ‘identity_hint’ parameter is not
          sent to the client.

     Exemplo de uso:

          context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
          context.maximum_version = ssl.TLSVersion.TLSv1_2
          context.set_ciphers('PSK')

          # A simple lambda:
          psk = bytes.fromhex('c0ffee')
          context.set_psk_server_callback(lambda identity: psk)

          # A table using the identity of the client:
          psk_table = { 'ClientId_1': bytes.fromhex('c0ffee'),
                        'ClientId_2': bytes.fromhex('facade')
          }
          def callback(identity):
              return psk_table.get(identity, b'')
          context.set_psk_server_callback(callback, 'ServerId_1')

     This method will raise *note NotImplementedError: 228. if *note
     HAS_PSK: 368f. is ‘False’.

     Adicionado na versão 3.13.

   ---------- Footnotes ----------

   (1) TLS 1.3 protocol will be available with *note PROTOCOL_TLS: 3665.
in OpenSSL >= 1.1.1.  There is no dedicated PROTOCOL constant for just
TLS 1.3.

   (2) *note SSLContext: 294. disables SSLv2 with *note OP_NO_SSLv2:
83c. by default.

   (3) *note SSLContext: 294. disables SSLv3 with *note OP_NO_SSLv3:
83d. by default.

   (4) TLS 1.3 protocol will be available with *note PROTOCOL_TLS: 3665.
in OpenSSL >= 1.1.1.  There is no dedicated PROTOCOL constant for just
TLS 1.3.

   (5) *note SSLContext: 294. disables SSLv2 with *note OP_NO_SSLv2:
83c. by default.

   (6) *note SSLContext: 294. disables SSLv3 with *note OP_NO_SSLv3:
83d. by default.

   (7) 
https://docs.openssl.org/master/man3/SSL_CTX_load_verify_locations/

   (8) https://docs.openssl.org/master/man1/ciphers/

   (9) https://datatracker.ietf.org/doc/html/rfc7301.html

   (10) 
https://en.wikipedia.org/wiki/Application-Layer_Protocol_Negotiation

   (11) https://datatracker.ietf.org/doc/html/rfc6066.html

   (12) 
https://vincent.bernat.ch/en/blog/2011-ssl-perfect-forward-secrecy

   (13) https://docs.openssl.org/1.1.1/man3/SSL_CTX_sess_number/

   (14) https://docs.openssl.org/master/man3/SSL_CTX_get_security_level/


File: python.info,  Node: Certificados,  Next: Exemplos<20>,  Prev: SSL Contexts,  Up: ssl — Invólucro de TLS/SSL para objetos socket

5.19.3.10 Certificados
......................

Certificates in general are part of a public-key / private-key system.
In this system, each 'principal', (which may be a machine, or a person,
or an organization) is assigned a unique two-part encryption key.  One
part of the key is public, and is called the 'public key'; the other
part is kept secret, and is called the 'private key'.  The two parts are
related, in that if you encrypt a message with one of the parts, you can
decrypt it with the other part, and 'only' with the other part.

A certificate contains information about two principals.  It contains
the name of a 'subject', and the subject’s public key.  It also contains
a statement by a second principal, the 'issuer', that the subject is who
they claim to be, and that this is indeed the subject’s public key.  The
issuer’s statement is signed with the issuer’s private key, which only
the issuer knows.  However, anyone can verify the issuer’s statement by
finding the issuer’s public key, decrypting the statement with it, and
comparing it to the other information in the certificate.  The
certificate also contains information about the time period over which
it is valid.  This is expressed as two fields, called “notBefore” and
“notAfter”.

In the Python use of certificates, a client or server can use a
certificate to prove who they are.  The other side of a network
connection can also be required to produce a certificate, and that
certificate can be validated to the satisfaction of the client or server
that requires such validation.  The connection attempt can be set to
raise an exception if the validation fails.  Validation is done
automatically, by the underlying OpenSSL framework; the application need
not concern itself with its mechanics.  But the application does usually
need to provide sets of certificates to allow this process to take
place.

Python uses files to contain certificates.  They should be formatted as
“PEM” (see RFC 1422(1)), which is a base-64 encoded form wrapped with a
header line and a footer line:

     -----BEGIN CERTIFICATE-----
     ... (certificate in base64 PEM encoding) ...
     -----END CERTIFICATE-----

* Menu:

* Certificate chains::
* CA certificates::
* Combined key and certificate::
* Self-signed certificates::

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc1422.html


File: python.info,  Node: Certificate chains,  Next: CA certificates,  Up: Certificados

5.19.3.11 Certificate chains
............................

The Python files which contain certificates can contain a sequence of
certificates, sometimes called a 'certificate chain'.  This chain should
start with the specific certificate for the principal who “is” the
client or server, and then the certificate for the issuer of that
certificate, and then the certificate for the issuer of 'that'
certificate, and so on up the chain till you get to a certificate which
is 'self-signed', that is, a certificate which has the same subject and
issuer, sometimes called a 'root certificate'.  The certificates should
just be concatenated together in the certificate file.  For example,
suppose we had a three certificate chain, from our server certificate to
the certificate of the certification authority that signed our server
certificate, to the root certificate of the agency which issued the
certification authority’s certificate:

     -----BEGIN CERTIFICATE-----
     ... (certificate for your server)...
     -----END CERTIFICATE-----
     -----BEGIN CERTIFICATE-----
     ... (the certificate for the CA)...
     -----END CERTIFICATE-----
     -----BEGIN CERTIFICATE-----
     ... (the root certificate for the CA's issuer)...
     -----END CERTIFICATE-----


File: python.info,  Node: CA certificates,  Next: Combined key and certificate,  Prev: Certificate chains,  Up: Certificados

5.19.3.12 CA certificates
.........................

If you are going to require validation of the other side of the
connection’s certificate, you need to provide a “CA certs” file, filled
with the certificate chains for each issuer you are willing to trust.
Again, this file just contains these chains concatenated together.  For
validation, Python will use the first chain it finds in the file which
matches.  The platform’s certificates file can be used by calling *note
SSLContext.load_default_certs(): fe6, this is done automatically with
*note create_default_context(): 155.


File: python.info,  Node: Combined key and certificate,  Next: Self-signed certificates,  Prev: CA certificates,  Up: Certificados

5.19.3.13 Combined key and certificate
......................................

Often the private key is stored in the same file as the certificate; in
this case, only the ‘certfile’ parameter to *note
SSLContext.load_cert_chain(): 295. needs to be passed.  If the private
key is stored with the certificate, it should come before the first
certificate in the certificate chain:

     -----BEGIN RSA PRIVATE KEY-----
     ... (private key in base64 encoding) ...
     -----END RSA PRIVATE KEY-----
     -----BEGIN CERTIFICATE-----
     ... (certificate in base64 PEM encoding) ...
     -----END CERTIFICATE-----


File: python.info,  Node: Self-signed certificates,  Prev: Combined key and certificate,  Up: Certificados

5.19.3.14 Self-signed certificates
..................................

If you are going to create a server that provides SSL-encrypted
connection services, you will need to acquire a certificate for that
service.  There are many ways of acquiring appropriate certificates,
such as buying one from a certification authority.  Another common
practice is to generate a self-signed certificate.  The simplest way to
do this is with the OpenSSL package, using something like the following:

     % openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout cert.pem
     Generating a 1024 bit RSA private key
     .......++++++
     .............................++++++
     writing new private key to 'cert.pem'
     -----
     You are about to be asked to enter information that will be incorporated
     into your certificate request.
     What you are about to enter is what is called a Distinguished Name or a DN.
     There are quite a few fields but you can leave some blank
     For some fields there will be a default value,
     If you enter '.', the field will be left blank.
     -----
     Country Name (2 letter code) [AU]:US
     State or Province Name (full name) [Some-State]:MyState
     Locality Name (eg, city) []:Some City
     Organization Name (eg, company) [Internet Widgits Pty Ltd]:My Organization, Inc.
     Organizational Unit Name (eg, section) []:My Group
     Common Name (eg, YOUR name) []:myserver.mygroup.myorganization.com
     Email Address []:ops@myserver.mygroup.myorganization.com
     %

The disadvantage of a self-signed certificate is that it is its own root
certificate, and no one else will have it in their cache of known (and
trusted) root certificates.


File: python.info,  Node: Exemplos<20>,  Next: Notes on non-blocking sockets,  Prev: Certificados,  Up: ssl — Invólucro de TLS/SSL para objetos socket

5.19.3.15 Exemplos
..................

* Menu:

* Testing for SSL support::
* Client-side operation::
* Server-side operation::


File: python.info,  Node: Testing for SSL support,  Next: Client-side operation,  Up: Exemplos<20>

5.19.3.16 Testing for SSL support
.................................

To test for the presence of SSL support in a Python installation, user
code should use the following idiom:

     try:
         import ssl
     except ImportError:
         pass
     else:
         ...  # do something that requires SSL support


File: python.info,  Node: Client-side operation,  Next: Server-side operation,  Prev: Testing for SSL support,  Up: Exemplos<20>

5.19.3.17 Client-side operation
...............................

This example creates a SSL context with the recommended security
settings for client sockets, including automatic certificate
verification:

     >>> context = ssl.create_default_context()

If you prefer to tune security settings yourself, you might create a
context from scratch (but beware that you might not get the settings
right):

     >>> context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
     >>> context.load_verify_locations("/etc/ssl/certs/ca-bundle.crt")

(this snippet assumes your operating system places a bundle of all CA
certificates in ‘/etc/ssl/certs/ca-bundle.crt’; if not, you’ll get an
error and have to adjust the location)

The *note PROTOCOL_TLS_CLIENT: 876. protocol configures the context for
cert validation and hostname verification.  *note verify_mode: 3662. is
set to *note CERT_REQUIRED: 3663. and *note check_hostname: 3676. is set
to ‘True’.  All other protocols create SSL contexts with insecure
defaults.

When you use the context to connect to a server, *note CERT_REQUIRED:
3663. and *note check_hostname: 3676. validate the server certificate:
it ensures that the server certificate was signed with one of the CA
certificates, checks the signature for correctness, and verifies other
properties like validity and identity of the hostname:

     >>> conn = context.wrap_socket(socket.socket(socket.AF_INET),
     ...                            server_hostname="www.python.org")
     >>> conn.connect(("www.python.org", 443))

You may then fetch the certificate:

     >>> cert = conn.getpeercert()

Visual inspection shows that the certificate does identify the desired
service (that is, the HTTPS host ‘www.python.org’):

     >>> pprint.pprint(cert)
     {'OCSP': ('http://ocsp.digicert.com',),
      'caIssuers': ('http://cacerts.digicert.com/DigiCertSHA2ExtendedValidationServerCA.crt',),
      'crlDistributionPoints': ('http://crl3.digicert.com/sha2-ev-server-g1.crl',
                                'http://crl4.digicert.com/sha2-ev-server-g1.crl'),
      'issuer': ((('countryName', 'US'),),
                 (('organizationName', 'DigiCert Inc'),),
                 (('organizationalUnitName', 'www.digicert.com'),),
                 (('commonName', 'DigiCert SHA2 Extended Validation Server CA'),)),
      'notAfter': 'Sep  9 12:00:00 2016 GMT',
      'notBefore': 'Sep  5 00:00:00 2014 GMT',
      'serialNumber': '01BB6F00122B177F36CAB49CEA8B6B26',
      'subject': ((('businessCategory', 'Private Organization'),),
                  (('1.3.6.1.4.1.311.60.2.1.3', 'US'),),
                  (('1.3.6.1.4.1.311.60.2.1.2', 'Delaware'),),
                  (('serialNumber', '3359300'),),
                  (('streetAddress', '16 Allen Rd'),),
                  (('postalCode', '03894-4801'),),
                  (('countryName', 'US'),),
                  (('stateOrProvinceName', 'NH'),),
                  (('localityName', 'Wolfeboro'),),
                  (('organizationName', 'Python Software Foundation'),),
                  (('commonName', 'www.python.org'),)),
      'subjectAltName': (('DNS', 'www.python.org'),
                         ('DNS', 'python.org'),
                         ('DNS', 'pypi.org'),
                         ('DNS', 'docs.python.org'),
                         ('DNS', 'testpypi.org'),
                         ('DNS', 'bugs.python.org'),
                         ('DNS', 'wiki.python.org'),
                         ('DNS', 'hg.python.org'),
                         ('DNS', 'mail.python.org'),
                         ('DNS', 'packaging.python.org'),
                         ('DNS', 'pythonhosted.org'),
                         ('DNS', 'www.pythonhosted.org'),
                         ('DNS', 'test.pythonhosted.org'),
                         ('DNS', 'us.pycon.org'),
                         ('DNS', 'id.python.org')),
      'version': 3}

Now the SSL channel is established and the certificate verified, you can
proceed to talk with the server:

     >>> conn.sendall(b"HEAD / HTTP/1.0\r\nHost: linuxfr.org\r\n\r\n")
     >>> pprint.pprint(conn.recv(1024).split(b"\r\n"))
     [b'HTTP/1.1 200 OK',
      b'Date: Sat, 18 Oct 2014 18:27:20 GMT',
      b'Server: nginx',
      b'Content-Type: text/html; charset=utf-8',
      b'X-Frame-Options: SAMEORIGIN',
      b'Content-Length: 45679',
      b'Accept-Ranges: bytes',
      b'Via: 1.1 varnish',
      b'Age: 2188',
      b'X-Served-By: cache-lcy1134-LCY',
      b'X-Cache: HIT',
      b'X-Cache-Hits: 11',
      b'Vary: Cookie',
      b'Strict-Transport-Security: max-age=63072000; includeSubDomains',
      b'Connection: close',
      b'',
      b'']

See the discussion of *note Considerações de segurança: 354c. below.


File: python.info,  Node: Server-side operation,  Prev: Client-side operation,  Up: Exemplos<20>

5.19.3.18 Server-side operation
...............................

For server operation, typically you’ll need to have a server
certificate, and private key, each in a file.  You’ll first create a
context holding the key and the certificate, so that clients can check
your authenticity.  Then you’ll open a socket, bind it to a port, call
‘listen()’ on it, and start waiting for clients to connect:

     import socket, ssl

     context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
     context.load_cert_chain(certfile="mycertfile", keyfile="mykeyfile")

     bindsocket = socket.socket()
     bindsocket.bind(('myaddr.example.com', 10023))
     bindsocket.listen(5)

When a client connects, you’ll call ‘accept()’ on the socket to get the
new socket from the other end, and use the context’s *note
SSLContext.wrap_socket(): 525. method to create a server-side SSL socket
for the connection:

     while True:
         newsocket, fromaddr = bindsocket.accept()
         connstream = context.wrap_socket(newsocket, server_side=True)
         try:
             deal_with_client(connstream)
         finally:
             connstream.shutdown(socket.SHUT_RDWR)
             connstream.close()

Then you’ll read data from the ‘connstream’ and do something with it
till you are finished with the client (or the client is finished with
you):

     def deal_with_client(connstream):
         data = connstream.recv(1024)
         # empty data means the client is finished with us
         while data:
             if not do_something(connstream, data):
                 # we'll assume do_something returns False
                 # when we're finished with client
                 break
             data = connstream.recv(1024)
         # finished with client

And go back to listening for new client connections (of course, a real
server would probably handle each client connection in a separate
thread, or put the sockets in *note non-blocking mode: 3668. and use an
event loop).


File: python.info,  Node: Notes on non-blocking sockets,  Next: Підтримка BIO пам’яті<2>,  Prev: Exemplos<20>,  Up: ssl — Invólucro de TLS/SSL para objetos socket

5.19.3.19 Notes on non-blocking sockets
.......................................

SSL sockets behave slightly different than regular sockets in
non-blocking mode.  When working with non-blocking sockets, there are
thus several things you need to be aware of:

   - Most *note SSLSocket: 8f0. methods will raise either *note
     SSLWantWriteError: e99. or *note SSLWantReadError: e98. instead of
     *note BlockingIOError: 1090. if an I/O operation would block.
     *note SSLWantReadError: e98. will be raised if a read operation on
     the underlying socket is necessary, and *note SSLWantWriteError:
     e99. for a write operation on the underlying socket.  Note that
     attempts to 'write' to an SSL socket may require 'reading' from the
     underlying socket first, and attempts to 'read' from the SSL socket
     may require a prior 'write' to the underlying socket.

     Alterado na versão 3.5: In earlier Python versions, the
     ‘SSLSocket.send()’ method returned zero instead of raising *note
     SSLWantWriteError: e99. or *note SSLWantReadError: e98.

   - Calling *note select(): dc8. tells you that the OS-level socket can
     be read from (or written to), but it does not imply that there is
     sufficient data at the upper SSL layer.  For example, only part of
     an SSL frame might have arrived.  Therefore, you must be ready to
     handle ‘SSLSocket.recv()’ and ‘SSLSocket.send()’ failures, and
     retry after another call to *note select(): dc8.

   - Conversely, since the SSL layer has its own framing, a SSL socket
     may still have data available for reading without *note select():
     dc8. being aware of it.  Therefore, you should first call
     ‘SSLSocket.recv()’ to drain any potentially available data, and
     then only block on a *note select(): dc8. call if still necessary.

     (of course, similar provisions apply when using other primitives
     such as *note poll(): 2d8a, or those in the *note selectors: c2.
     module)

   - The SSL handshake itself will be non-blocking: the *note
     SSLSocket.do_handshake(): e9c. method has to be retried until it
     returns successfully.  Here is a synopsis using *note select():
     dc8. to wait for the socket’s readiness:

          while True:
              try:
                  sock.do_handshake()
                  break
              except ssl.SSLWantReadError:
                  select.select([sock], [], [])
              except ssl.SSLWantWriteError:
                  select.select([], [sock], [])

Ver também
..........

The *note asyncio: a. module supports *note non-blocking SSL sockets:
3668. and provides a higher level *note Streams API: 3477.  It polls for
events using the *note selectors: c2. module and handles *note
SSLWantWriteError: e99, *note SSLWantReadError: e98. and *note
BlockingIOError: 1090. exceptions.  It runs the SSL handshake
asynchronously as well.


File: python.info,  Node: Підтримка BIO пам’яті<2>,  Next: SSL session,  Prev: Notes on non-blocking sockets,  Up: ssl — Invólucro de TLS/SSL para objetos socket

5.19.3.20 Підтримка BIO пам’яті
...............................

Adicionado na versão 3.5.

Ever since the SSL module was introduced in Python 2.6, the *note
SSLSocket: 8f0. class has provided two related but distinct areas of
functionality:

   - SSL protocol handling

   - Network IO

The network IO API is identical to that provided by *note socket.socket:
dc9, from which *note SSLSocket: 8f0. also inherits.  This allows an SSL
socket to be used as a drop-in replacement for a regular socket, making
it very easy to add SSL support to an existing application.

Combining SSL protocol handling and network IO usually works well, but
there are some cases where it doesn’t.  An example is async IO
frameworks that want to use a different IO multiplexing model than the
“select/poll on a file descriptor” (readiness based) model that is
assumed by *note socket.socket: dc9. and by the internal OpenSSL socket
IO routines.  This is mostly relevant for platforms like Windows where
this model is not efficient.  For this purpose, a reduced scope variant
of *note SSLSocket: 8f0. called *note SSLObject: b99. is provided.

 -- Classe: ssl.SSLObject

     A reduced-scope variant of *note SSLSocket: 8f0. representing an
     SSL protocol instance that does not contain any network IO methods.
     This class is typically used by framework authors that want to
     implement asynchronous IO for SSL through memory buffers.

     This class implements an interface on top of a low-level SSL object
     as implemented by OpenSSL. This object captures the state of an SSL
     connection but does not provide any network IO itself.  IO needs to
     be performed through separate “BIO” objects which are OpenSSL’s IO
     abstraction layer.

     This class has no public constructor.  An *note SSLObject: b99.
     instance must be created using the *note wrap_bio(): b9a. method.
     This method will create the *note SSLObject: b99. instance and bind
     it to a pair of BIOs.  The 'incoming' BIO is used to pass data from
     Python to the SSL protocol instance, while the 'outgoing' BIO is
     used to pass data the other way around.

     The following methods are available:

        - *note context: 369f.

        - *note server_side: 36a1.

        - *note server_hostname: b97.

        - *note session: 1693.

        - *note session_reused: 36a2.

        - *note read(): e9d.

        - *note write(): e9e.

        - *note getpeercert(): fec.

        - *note get_verified_chain(): 16c6.

        - *note get_unverified_chain(): 16c7.

        - *note selected_alpn_protocol(): e94.

        - *note selected_npn_protocol(): 878.

        - *note cipher(): 3592.

        - *note shared_ciphers(): e9b.

        - *note compression(): 1184.

        - *note pending(): 36a0.

        - *note do_handshake(): e9c.

        - *note verify_client_post_handshake(): a3c.

        - *note unwrap(): 369e.

        - *note get_channel_binding(): 1183.

        - *note version(): e97.

     When compared to *note SSLSocket: 8f0, this object lacks the
     following features:

        - Any form of network IO; ‘recv()’ and ‘send()’ read and write
          only to the underlying *note MemoryBIO: e91. buffers.

        - There is no 'do_handshake_on_connect' machinery.  You must
          always manually call *note do_handshake(): e9c. to start the
          handshake.

        - There is no handling of 'suppress_ragged_eofs'.  All
          end-of-file conditions that are in violation of the protocol
          are reported via the *note SSLEOFError: 1840. exception.

        - The method *note unwrap(): 369e. call does not return
          anything, unlike for an SSL socket where it returns the
          underlying socket.

        - The 'server_name_callback' callback passed to *note
          SSLContext.set_servername_callback(): feb. will get an *note
          SSLObject: b99. instance instead of a *note SSLSocket: 8f0.
          instance as its first parameter.

     Some notes related to the use of *note SSLObject: b99.:

        - All IO on an *note SSLObject: b99. is *note non-blocking:
          3668.  This means that for example *note read(): e9d. will
          raise an *note SSLWantReadError: e98. if it needs more data
          than the incoming BIO has available.

     Alterado na versão 3.7: *note SSLObject: b99. instances must be
     created with *note wrap_bio(): b9a.  In earlier versions, it was
     possible to create instances directly.  This was never documented
     or officially supported.

An SSLObject communicates with the outside world using memory buffers.
The class *note MemoryBIO: e91. provides a memory buffer that can be
used for this purpose.  It wraps an OpenSSL memory BIO (Basic IO)
object:

 -- Classe: ssl.MemoryBIO

     A memory buffer that can be used to pass data between Python and an
     SSL protocol instance.

      -- Atributo: pending

          Return the number of bytes currently in the memory buffer.

      -- Atributo: eof

          A boolean indicating whether the memory BIO is current at the
          end-of-file position.

      -- Método: read (n=-1, /)

          Read up to 'n' bytes from the memory buffer.  If 'n' is not
          specified or negative, all bytes are returned.

      -- Método: write (buf, /)

          Write the bytes from 'buf' to the memory BIO. The 'buf'
          argument must be an object supporting the buffer protocol.

          The return value is the number of bytes written, which is
          always equal to the length of 'buf'.

      -- Método: write_eof ()

          Write an EOF marker to the memory BIO. After this method has
          been called, it is illegal to call *note write(): 36bc.  The
          attribute *note eof: 36ba. will become true after all data
          currently in the buffer has been read.


File: python.info,  Node: SSL session,  Next: Considerações de segurança<2>,  Prev: Підтримка BIO пам’яті<2>,  Up: ssl — Invólucro de TLS/SSL para objetos socket

5.19.3.21 SSL session
.....................

Adicionado na versão 3.6.

 -- Classe: ssl.SSLSession

     Session object used by *note session: 1693.

      -- Atributo: id

      -- Atributo: time

      -- Atributo: timeout

      -- Atributo: ticket_lifetime_hint

      -- Atributo: has_ticket


File: python.info,  Node: Considerações de segurança<2>,  Next: TLS 1 3,  Prev: SSL session,  Up: ssl — Invólucro de TLS/SSL para objetos socket

5.19.3.22 Considerações de segurança
....................................

* Menu:

* Best defaults::
* Manual settings::
* Multi-processing::


File: python.info,  Node: Best defaults,  Next: Manual settings,  Up: Considerações de segurança<2>

5.19.3.23 Best defaults
.......................

For 'client use', if you don’t have any special requirements for your
security policy, it is highly recommended that you use the *note
create_default_context(): 155. function to create your SSL context.  It
will load the system’s trusted CA certificates, enable certificate
validation and hostname checking, and try to choose reasonably secure
protocol and cipher settings.

For example, here is how you would use the *note smtplib.SMTP: 934.
class to create a trusted, secure connection to a SMTP server:

     >>> import ssl, smtplib
     >>> smtp = smtplib.SMTP("mail.python.org", port=587)
     >>> context = ssl.create_default_context()
     >>> smtp.starttls(context=context)
     (220, b'2.0.0 Ready to start TLS')

If a client certificate is needed for the connection, it can be added
with *note SSLContext.load_cert_chain(): 295.

By contrast, if you create the SSL context by calling the *note
SSLContext: 294. constructor yourself, it will not have certificate
validation nor hostname checking enabled by default.  If you do so,
please read the paragraphs below to achieve a good security level.


File: python.info,  Node: Manual settings,  Next: Multi-processing,  Prev: Best defaults,  Up: Considerações de segurança<2>

5.19.3.24 Manual settings
.........................

* Menu:

* Verifying certificates::
* Protocol versions::
* Cipher selection::


File: python.info,  Node: Verifying certificates,  Next: Protocol versions,  Up: Manual settings

5.19.3.25 Verifying certificates
................................

When calling the *note SSLContext: 294. constructor directly, *note
CERT_NONE: 3674. is the default.  Since it does not authenticate the
other peer, it can be insecure, especially in client mode where most of
the time you would like to ensure the authenticity of the server you’re
talking to.  Therefore, when in client mode, it is highly recommended to
use *note CERT_REQUIRED: 3663.  However, it is in itself not sufficient;
you also have to check that the server certificate, which can be
obtained by calling *note SSLSocket.getpeercert(): fec, matches the
desired service.  For many protocols and applications, the service can
be identified by the hostname.  This common check is automatically
performed when *note SSLContext.check_hostname: 3676. is enabled.

Alterado na versão 3.7: Hostname matchings is now performed by OpenSSL.
Python no longer uses ‘match_hostname()’.

In server mode, if you want to authenticate your clients using the SSL
layer (rather than using a higher-level authentication mechanism),
you’ll also have to specify *note CERT_REQUIRED: 3663. and similarly
check the client certificate.


File: python.info,  Node: Protocol versions,  Next: Cipher selection,  Prev: Verifying certificates,  Up: Manual settings

5.19.3.26 Protocol versions
...........................

SSL versions 2 and 3 are considered insecure and are therefore dangerous
to use.  If you want maximum compatibility between clients and servers,
it is recommended to use *note PROTOCOL_TLS_CLIENT: 876. or *note
PROTOCOL_TLS_SERVER: 877. as the protocol version.  SSLv2 and SSLv3 are
disabled by default.

     >>> client_context = ssl.SSLContext(ssl.PROTOCOL_TLS_CLIENT)
     >>> client_context.minimum_version = ssl.TLSVersion.TLSv1_3
     >>> client_context.maximum_version = ssl.TLSVersion.TLSv1_3

The SSL context created above will only allow TLSv1.3 and later (if
supported by your system) connections to a server.  *note
PROTOCOL_TLS_CLIENT: 876. implies certificate validation and hostname
checks by default.  You have to load certificates into the context.


File: python.info,  Node: Cipher selection,  Prev: Protocol versions,  Up: Manual settings

5.19.3.27 Cipher selection
..........................

If you have advanced security requirements, fine-tuning of the ciphers
enabled when negotiating a SSL session is possible through the *note
SSLContext.set_ciphers(): 36a5. method.  Starting from Python 3.2.3, the
ssl module disables certain weak ciphers by default, but you may want to
further restrict the cipher choice.  Be sure to read OpenSSL’s
documentation about the cipher list format(1).  If you want to check
which ciphers are enabled by a given cipher list, use *note
SSLContext.get_ciphers(): cff. or the ‘openssl ciphers’ command on your
system.

   ---------- Footnotes ----------

   (1) https://docs.openssl.org/1.1.1/man1/ciphers/#cipher-list-format


File: python.info,  Node: Multi-processing,  Prev: Manual settings,  Up: Considerações de segurança<2>

5.19.3.28 Multi-processing
..........................

If using this module as part of a multi-processed application (using,
for example the *note multiprocessing: 94. or *note concurrent.futures:
21. modules), be aware that OpenSSL’s internal random number generator
does not properly handle forked processes.  Applications must change the
PRNG state of the parent process if they use any SSL feature with *note
os.fork(): 197.  Any successful call of *note RAND_add(): 366e. or *note
RAND_bytes(): 524. is sufficient.


File: python.info,  Node: TLS 1 3,  Prev: Considerações de segurança<2>,  Up: ssl — Invólucro de TLS/SSL para objetos socket

5.19.3.29 TLS 1.3
.................

Adicionado na versão 3.7.

The TLS 1.3 protocol behaves slightly differently than previous version
of TLS/SSL. Some new TLS 1.3 features are not yet available.

   - TLS 1.3 uses a disjunct set of cipher suites.  All AES-GCM and
     ChaCha20 cipher suites are enabled by default.  The method *note
     SSLContext.set_ciphers(): 36a5. cannot enable or disable any TLS
     1.3 ciphers yet, but *note SSLContext.get_ciphers(): cff. returns
     them.

   - Session tickets are no longer sent as part of the initial handshake
     and are handled differently.  *note SSLSocket.session: 1693. and
     *note SSLSession: cfe. are not compatible with TLS 1.3.

   - Client-side certificates are also no longer verified during the
     initial handshake.  A server can request a certificate at any time.
     Clients process certificate requests while they send or receive
     application data from the server.

   - TLS 1.3 features like early data, deferred TLS client cert request,
     signature algorithm configuration, and rekeying are not supported
     yet.

Ver também
..........

Class *note socket.socket: dc9.

     Documentation of underlying *note socket: cc. class

SSL/TLS Strong Encryption: An Introduction(1)

     Intro from the Apache HTTP Server documentation

RFC 1422: Privacy Enhancement for Internet Electronic Mail: Part II: Certificate-Based Key Management(2)

     Steve Kent

RFC 4086: Randomness Requirements for Security(3)

     Donald E. Eastlake, Jeffrey I. Schiller, Steve Crocker

RFC 5280: Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile(4)

     David Cooper et al.

RFC 5246: The Transport Layer Security (TLS) Protocol Version 1.2(5)

     Tim Dierks and Eric Rescorla.

RFC 6066: Transport Layer Security (TLS) Extensions(6)

     Donald E. Eastlake

IANA TLS: Transport Layer Security (TLS) Parameters(7)

     IANA

RFC 7525: Recommendations for Secure Use of Transport Layer Security (TLS) and Datagram Transport Layer Security (DTLS)(8)

     IETF

Mozilla's Server Side TLS recommendations(9)

     Mozilla

   ---------- Footnotes ----------

   (1) https://httpd.apache.org/docs/trunk/en/ssl/ssl_intro.html

   (2) https://datatracker.ietf.org/doc/html/rfc1422.html

   (3) https://datatracker.ietf.org/doc/html/rfc4086.html

   (4) https://datatracker.ietf.org/doc/html/rfc5280.html

   (5) https://datatracker.ietf.org/doc/html/rfc5246.html

   (6) https://datatracker.ietf.org/doc/html/rfc6066.html

   (7) 
https://www.iana.org/assignments/tls-parameters/tls-parameters.xml

   (8) https://datatracker.ietf.org/doc/html/rfc7525.html

   (9) https://wiki.mozilla.org/Security/Server_Side_TLS


File: python.info,  Node: select — Waiting for I/O completion,  Next: selectors — High-level I/O multiplexing,  Prev: ssl — Invólucro de TLS/SSL para objetos socket,  Up: Comunicação em Rede e Interprocesso

5.19.4 ‘select’ — Waiting for I/O completion
--------------------------------------------

__________________________________________________________________

Este módulo fornece acesso às funções ‘select()’ e ‘poll()’ disponíveis
na maioria dos sistemas operacionais, ‘devpoll()’ disponível no Solaris
e derivados, ‘epoll()’ disponível no Linux 2.5+ e ‘kqueue()’ disponível
na maioria dos BSD. Observe que no Windows, ele funciona apenas para
sockets; em outros sistemas operacionais, ele também funciona para
outros tipos de arquivo (em particular, no Unix, ele funciona em pipes).
Ele não pode ser usado em arquivos regulares para determinar se um
arquivo cresceu desde a última leitura.

     Nota: O módulo *note selectors: c2. permite multiplexação de E/S de
     alto nível e eficiente, construída sobre as primitivas do módulo
     *note select: c1.  Os usuários são encorajados a usar o módulo
     *note selectors: c2. em vez disso, a menos que queiram controle
     preciso sobre as primitivas de nível de SO usadas.

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

O módulo define o seguinte:

 -- Exceção: select.error

     Um apelido descontinuado de *note OSError: 417.

     Alterado na versão 3.3: Seguindo a PEP 3151(1), esta classe foi
     transformada em um apelido de *note OSError: 417.

 -- Função: select.devpoll ()

     (Suportado somente no Solaris e derivados.)  Retorna um objeto de
     pesquisa ‘/dev/poll’; consulte a seção *note /dev/poll Polling
     Objects: 36cf. abaixo para os métodos suportados pelos objetos
     devpoll.

     Objetos ‘devpoll()’ são vinculados ao número de descritores de
     arquivo permitidos no momento da instanciação.  Se seu programa
     reduzir esse valor, ‘devpoll()’ falhará.  Se seu programa aumentar
     esse valor, ‘devpoll()’ pode retornar uma lista incompleta de
     descritores de arquivo ativos.

     O novo descritor de arquivo é *note não herdável: f2b.

     Adicionado na versão 3.3.

     Alterado na versão 3.4: O novo descritor de arquivo agora é
     não-hereditário.

 -- Função: select.epoll (sizehint=-1, flags=0)

     (Only supported on Linux 2.5.44 and newer.)  Return an edge polling
     object, which can be used as Edge or Level Triggered interface for
     I/O events.

     'sizehint' informs epoll about the expected number of events to be
     registered.  It must be positive, or ‘-1’ to use the default.  It
     is only used on older systems where ‘epoll_create1()’ is not
     available; otherwise it has no effect (though its value is still
     checked).

     'flags' is deprecated and completely ignored.  However, when
     supplied, its value must be ‘0’ or ‘select.EPOLL_CLOEXEC’,
     otherwise ‘OSError’ is raised.

     See the *note Edge and Level Trigger Polling (epoll) Objects: 36d0.
     section below for the methods supported by epolling objects.

     ‘epoll’ objects support the context management protocol: when used
     in a *note with: 5d2. statement, the new file descriptor is
     automatically closed at the end of the block.

     O novo descritor de arquivo é *note não herdável: f2b.

     Alterado na versão 3.3: Added the 'flags' parameter.

     Alterado na versão 3.4: Support for the *note with: 5d2. statement
     was added.  The new file descriptor is now non-inheritable.

     Descontinuado desde a versão 3.4: The 'flags' parameter.
     ‘select.EPOLL_CLOEXEC’ is used by default now.  Use *note
     os.set_inheritable(): f2d. to make the file descriptor inheritable.

 -- Função: select.poll ()

     (Not supported by all operating systems.)  Returns a polling
     object, which supports registering and unregistering file
     descriptors, and then polling them for I/O events; see section
     *note Polling Objects: 36d1. below for the methods supported by
     polling objects.

 -- Função: select.kqueue ()

     (Only supported on BSD.) Returns a kernel queue object; see section
     *note Kqueue Objects: 36d2. below for the methods supported by
     kqueue objects.

     O novo descritor de arquivo é *note não herdável: f2b.

     Alterado na versão 3.4: O novo descritor de arquivo agora é
     não-hereditário.

 -- Função: select.kevent (ident, filter=KQ_FILTER_READ,
          flags=KQ_EV_ADD, fflags=0, data=0, udata=0)

     (Only supported on BSD.) Returns a kernel event object; see section
     *note Kevent Objects: 36d4. below for the methods supported by
     kevent objects.

 -- Função: select.select (rlist, wlist, xlist, timeout=None)

     This is a straightforward interface to the Unix ‘select()’ system
     call.  The first three arguments are iterables of ‘waitable
     objects’: either integers representing file descriptors or objects
     with a parameterless method named *note fileno(): 15d0. returning
     such an integer:

        * 'rlist': wait until ready for reading

        * 'wlist': wait until ready for writing

        * 'xlist': wait for an “exceptional condition” (see the manual
          page for what your system considers such a condition)

     Empty iterables are allowed, but acceptance of three empty
     iterables is platform-dependent.  (It is known to work on Unix but
     not on Windows.)  The optional 'timeout' argument specifies a
     time-out as a floating-point number in seconds.  When the 'timeout'
     argument is omitted or ‘None’, the function blocks until at least
     one file descriptor is ready.  A time-out value of zero specifies a
     poll and never blocks.

     The return value is a triple of lists of objects that are ready:
     subsets of the first three arguments.  When the time-out is reached
     without a file descriptor becoming ready, three empty lists are
     returned.

     Among the acceptable object types in the iterables are Python *note
     file objects: 1203. (e.g.  ‘sys.stdin’, or objects returned by
     *note open(): 51c. or *note os.popen(): a91.), socket objects
     returned by *note socket.socket(): dc9.  You may also define a
     'wrapper' class yourself, as long as it has an appropriate *note
     fileno(): 15d0. method (that really returns a file descriptor, not
     just a random integer).

          Nota: 
          File objects on Windows are not acceptable, but sockets are.
          On Windows, the underlying ‘select()’ function is provided by
          the WinSock library, and does not handle file descriptors that
          don’t originate from WinSock.

     Alterado na versão 3.5: The function is now retried with a
     recomputed timeout when interrupted by a signal, except if the
     signal handler raises an exception (see PEP 475(2) for the
     rationale), instead of raising *note InterruptedError: db0.

 -- Dado: select.PIPE_BUF

     The minimum number of bytes which can be written without blocking
     to a pipe when the pipe has been reported as ready for writing by
     *note select(): dc8, ‘poll()’ or another interface in this module.
     This doesn’t apply to other kind of file-like objects such as
     sockets.

     This value is guaranteed by POSIX to be at least 512.

     *note Disponibilidade: 1ed8.: Unix

     Adicionado na versão 3.2.

* Menu:

* /dev/poll Polling Objects::
* Edge and Level Trigger Polling (epoll) Objects: Edge and Level Trigger Polling epoll Objects.
* Polling Objects::
* Kqueue Objects::
* Kevent Objects::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3151/

   (2) https://peps.python.org/pep-0475/


File: python.info,  Node: /dev/poll Polling Objects,  Next: Edge and Level Trigger Polling epoll Objects,  Up: select — Waiting for I/O completion

5.19.4.1 ‘/dev/poll’ Polling Objects
....................................

Solaris and derivatives have ‘/dev/poll’.  While ‘select()’ is
'O'('highest file descriptor') and ‘poll()’ is 'O'('number of file
descriptors'), ‘/dev/poll’ is 'O'('active file descriptors').

‘/dev/poll’ behaviour is very close to the standard ‘poll()’ object.

 -- Método: devpoll.close ()

     Close the file descriptor of the polling object.

     Adicionado na versão 3.4.

 -- Atributo: devpoll.closed

     ‘True’ if the polling object is closed.

     Adicionado na versão 3.4.

 -- Método: devpoll.fileno ()

     Return the file descriptor number of the polling object.

     Adicionado na versão 3.4.

 -- Método: devpoll.register (fd[, eventmask])

     Register a file descriptor with the polling object.  Future calls
     to the *note poll(): 2d8a. method will then check whether the file
     descriptor has any pending I/O events.  'fd' can be either an
     integer, or an object with a *note fileno(): 15d0. method that
     returns an integer.  File objects implement ‘fileno()’, so they can
     also be used as the argument.

     'eventmask' is an optional bitmask describing the type of events
     you want to check for.  The constants are the same that with
     ‘poll()’ object.  The default value is a combination of the
     constants ‘POLLIN’, ‘POLLPRI’, and ‘POLLOUT’.

          Aviso: Registering a file descriptor that’s already registered
          is not an error, but the result is undefined.  The appropriate
          action is to unregister or modify it first.  This is an
          important difference compared with ‘poll()’.

 -- Método: devpoll.modify (fd[, eventmask])

     This method does an *note unregister(): 36d8. followed by a *note
     register(): 36d6.  It is (a bit) more efficient that doing the same
     explicitly.

 -- Método: devpoll.unregister (fd)

     Remove a file descriptor being tracked by a polling object.  Just
     like the *note register(): 36d6. method, 'fd' can be an integer or
     an object with a *note fileno(): 15d0. method that returns an
     integer.

     Attempting to remove a file descriptor that was never registered is
     safely ignored.

 -- Método: devpoll.poll ([timeout])

     Polls the set of registered file descriptors, and returns a
     possibly empty list containing ‘(fd, event)’ 2-tuples for the
     descriptors that have events or errors to report.  'fd' is the file
     descriptor, and 'event' is a bitmask with bits set for the reported
     events for that descriptor — ‘POLLIN’ for waiting input, ‘POLLOUT’
     to indicate that the descriptor can be written to, and so forth.
     An empty list indicates that the call timed out and no file
     descriptors had any events to report.  If 'timeout' is given, it
     specifies the length of time in milliseconds which the system will
     wait for events before returning.  If 'timeout' is omitted, -1, or
     *note None: 675, the call will block until there is an event for
     this poll object.

     Alterado na versão 3.5: The function is now retried with a
     recomputed timeout when interrupted by a signal, except if the
     signal handler raises an exception (see PEP 475(1) for the
     rationale), instead of raising *note InterruptedError: db0.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0475/


File: python.info,  Node: Edge and Level Trigger Polling epoll Objects,  Next: Polling Objects,  Prev: /dev/poll Polling Objects,  Up: select — Waiting for I/O completion

5.19.4.2 Edge and Level Trigger Polling (epoll) Objects
.......................................................

     ‘https://linux.die.net/man/4/epoll’

     'eventmask'

     Constante                     Significado
                                   
     ----------------------------------------------------------------------------------
                                   
     ‘EPOLLIN’                     Disponível para leitura
                                   
                                   
     ‘EPOLLOUT’                    Disponível para escrita
                                   
                                   
     ‘EPOLLPRI’                    Urgent data for read
                                   
                                   
     ‘EPOLLERR’                    Error condition happened on the assoc.  fd
                                   
                                   
     ‘EPOLLHUP’                    Hang up happened on the assoc.  fd
                                   
                                   
     ‘EPOLLET’                     Set Edge Trigger behavior, the default is Level
                                   Trigger behavior
                                   
                                   
     ‘EPOLLONESHOT’                Set one-shot behavior.  After one event is pulled
                                   out, the fd is internally disabled
                                   
                                   
     ‘EPOLLEXCLUSIVE’              Wake only one epoll object when the associated fd
                                   has an event.  The default (if this flag is not
                                   set) is to wake all epoll objects polling on a
                                   fd.
                                   
                                   
     ‘EPOLLRDHUP’                  Stream socket peer closed connection or shut down
                                   writing half of connection.
                                   
                                   
     ‘EPOLLRDNORM’                 Equivalent to ‘EPOLLIN’
                                   
                                   
     ‘EPOLLRDBAND’                 Priority data band can be read.
                                   
                                   
     ‘EPOLLWRNORM’                 Equivalente a ‘EPOLLOUT’
                                   
                                   
     ‘EPOLLWRBAND’                 Priority data may be written.
                                   
                                   
     ‘EPOLLMSG’                    Ignorado.
                                   

     Adicionado na versão 3.6: ‘EPOLLEXCLUSIVE’ was added.  It’s only
     supported by Linux Kernel 4.5 or later.

 -- Método: epoll.close ()

     Close the control file descriptor of the epoll object.

 -- Atributo: epoll.closed

     ‘True’ if the epoll object is closed.

 -- Método: epoll.fileno ()

     Return the file descriptor number of the control fd.

 -- Método: epoll.fromfd (fd)

     Create an epoll object from a given file descriptor.

 -- Método: epoll.register (fd[, eventmask])

     Register a fd descriptor with the epoll object.

 -- Método: epoll.modify (fd, eventmask)

     Modify a registered file descriptor.

 -- Método: epoll.unregister (fd)

     Remove a registered file descriptor from the epoll object.

     Alterado na versão 3.9: The method no longer ignores the *note
     EBADF: 962. error.

 -- Método: epoll.poll (timeout=None, maxevents=-1)

     Wait for events.  timeout in seconds (float)

     Alterado na versão 3.5: The function is now retried with a
     recomputed timeout when interrupted by a signal, except if the
     signal handler raises an exception (see PEP 475(1) for the
     rationale), instead of raising *note InterruptedError: db0.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0475/


File: python.info,  Node: Polling Objects,  Next: Kqueue Objects,  Prev: Edge and Level Trigger Polling epoll Objects,  Up: select — Waiting for I/O completion

5.19.4.3 Polling Objects
........................

The ‘poll()’ system call, supported on most Unix systems, provides
better scalability for network servers that service many, many clients
at the same time.  ‘poll()’ scales better because the system call only
requires listing the file descriptors of interest, while ‘select()’
builds a bitmap, turns on bits for the fds of interest, and then
afterward the whole bitmap has to be linearly scanned again.  ‘select()’
is 'O'('highest file descriptor'), while ‘poll()’ is 'O'('number of file
descriptors').

 -- Método: poll.register (fd[, eventmask])

     Register a file descriptor with the polling object.  Future calls
     to the *note poll(): 2d8a. method will then check whether the file
     descriptor has any pending I/O events.  'fd' can be either an
     integer, or an object with a *note fileno(): 15d0. method that
     returns an integer.  File objects implement ‘fileno()’, so they can
     also be used as the argument.

     'eventmask' is an optional bitmask describing the type of events
     you want to check for, and can be a combination of the constants
     ‘POLLIN’, ‘POLLPRI’, and ‘POLLOUT’, described in the table below.
     If not specified, the default value used will check for all 3 types
     of events.

     Constante               Significado
                             
     -----------------------------------------------------------------------
                             
     ‘POLLIN’                There is data to read
                             
                             
     ‘POLLPRI’               There is urgent data to read
                             
                             
     ‘POLLOUT’               Ready for output: writing will not block
                             
                             
     ‘POLLERR’               Error condition of some sort
                             
                             
     ‘POLLHUP’               Hung up
                             
                             
     ‘POLLRDHUP’             Stream socket peer closed connection, or
                             shut down writing half of connection
                             
                             
     ‘POLLNVAL’              Invalid request: descriptor not open
                             

     Registering a file descriptor that’s already registered is not an
     error, and has the same effect as registering the descriptor
     exactly once.

 -- Método: poll.modify (fd, eventmask)

     Modifies an already registered fd.  This has the same effect as
     ‘register(fd, eventmask)’.  Attempting to modify a file descriptor
     that was never registered causes an *note OSError: 417. exception
     with errno ‘ENOENT’ to be raised.

 -- Método: poll.unregister (fd)

     Remove a file descriptor being tracked by a polling object.  Just
     like the *note register(): 36e0. method, 'fd' can be an integer or
     an object with a *note fileno(): 15d0. method that returns an
     integer.

     Attempting to remove a file descriptor that was never registered
     causes a *note KeyError: 344. exception to be raised.

 -- Método: poll.poll ([timeout])

     Polls the set of registered file descriptors, and returns a
     possibly empty list containing ‘(fd, event)’ 2-tuples for the
     descriptors that have events or errors to report.  'fd' is the file
     descriptor, and 'event' is a bitmask with bits set for the reported
     events for that descriptor — ‘POLLIN’ for waiting input, ‘POLLOUT’
     to indicate that the descriptor can be written to, and so forth.
     An empty list indicates that the call timed out and no file
     descriptors had any events to report.  If 'timeout' is given, it
     specifies the length of time in milliseconds which the system will
     wait for events before returning.  If 'timeout' is omitted,
     negative, or *note None: 675, the call will block until there is an
     event for this poll object.

     Alterado na versão 3.5: The function is now retried with a
     recomputed timeout when interrupted by a signal, except if the
     signal handler raises an exception (see PEP 475(1) for the
     rationale), instead of raising *note InterruptedError: db0.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0475/


File: python.info,  Node: Kqueue Objects,  Next: Kevent Objects,  Prev: Polling Objects,  Up: select — Waiting for I/O completion

5.19.4.4 Kqueue Objects
.......................

 -- Método: kqueue.close ()

     Close the control file descriptor of the kqueue object.

 -- Atributo: kqueue.closed

     ‘True’ if the kqueue object is closed.

 -- Método: kqueue.fileno ()

     Return the file descriptor number of the control fd.

 -- Método: kqueue.fromfd (fd)

     Create a kqueue object from a given file descriptor.

 -- Método: kqueue.control (changelist, max_events[, timeout]) ->
          eventlist

     Low level interface to kevent

        - changelist must be an iterable of kevent objects or ‘None’

        - max_events must be 0 or a positive integer

        - timeout in seconds (floats possible); the default is ‘None’,
          to wait forever

     Alterado na versão 3.5: The function is now retried with a
     recomputed timeout when interrupted by a signal, except if the
     signal handler raises an exception (see PEP 475(1) for the
     rationale), instead of raising *note InterruptedError: db0.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0475/


File: python.info,  Node: Kevent Objects,  Prev: Kqueue Objects,  Up: select — Waiting for I/O completion

5.19.4.5 Kevent Objects
.......................

‘https://man.freebsd.org/cgi/man.cgi?query=kqueue&sektion=2’

 -- Atributo: kevent.ident

     Value used to identify the event.  The interpretation depends on
     the filter but it’s usually the file descriptor.  In the
     constructor ident can either be an int or an object with a *note
     fileno(): 15d0. method.  kevent stores the integer internally.

 -- Atributo: kevent.filter

     Name of the kernel filter.

     Constante                       Significado
                                     
     ----------------------------------------------------------------------------------
                                     
     ‘KQ_FILTER_READ’                Takes a descriptor and returns whenever there
                                     is data available to read
                                     
                                     
     ‘KQ_FILTER_WRITE’               Takes a descriptor and returns whenever there
                                     is data available to write
                                     
                                     
     ‘KQ_FILTER_AIO’                 AIO requests
                                     
                                     
     ‘KQ_FILTER_VNODE’               Returns when one or more of the requested
                                     events watched in 'fflag' occurs
                                     
                                     
     ‘KQ_FILTER_PROC’                Watch for events on a process id
                                     
                                     
     ‘KQ_FILTER_NETDEV’              Watch for events on a network device [not
                                     available on macOS]
                                     
                                     
     ‘KQ_FILTER_SIGNAL’              Returns whenever the watched signal is
                                     delivered to the process
                                     
                                     
     ‘KQ_FILTER_TIMER’               Establishes an arbitrary timer
                                     

 -- Atributo: kevent.flags

     Filter action.

     Constante                       Significado
                                     
     ----------------------------------------------------------------------------------
                                     
     ‘KQ_EV_ADD’                     Adds or modifies an event
                                     
                                     
     ‘KQ_EV_DELETE’                  Removes an event from the queue
                                     
                                     
     ‘KQ_EV_ENABLE’                  Permitscontrol() to returns the event
                                     
                                     
     ‘KQ_EV_DISABLE’                 Disablesevent
                                     
                                     
     ‘KQ_EV_ONESHOT’                 Removes event after first occurrence
                                     
                                     
     ‘KQ_EV_CLEAR’                   Reset the state after an event is retrieved
                                     
                                     
     ‘KQ_EV_SYSFLAGS’                internal event
                                     
                                     
     ‘KQ_EV_FLAG1’                   internal event
                                     
                                     
     ‘KQ_EV_EOF’                     Filter specific EOF condition
                                     
                                     
     ‘KQ_EV_ERROR’                   See return values
                                     

 -- Atributo: kevent.fflags

     Filter specific flags.

     ‘KQ_FILTER_READ’ and ‘KQ_FILTER_WRITE’ filter flags:

     Constante                        Significado
                                      
     ----------------------------------------------------------------------------------
                                      
     ‘KQ_NOTE_LOWAT’                  low water mark of a socket buffer
                                      

     ‘KQ_FILTER_VNODE’ filter flags:

     Constante                        Significado
                                      
     ----------------------------------------------------------------------------------
                                      
     ‘KQ_NOTE_DELETE’                 'unlink()' was called
                                      
                                      
     ‘KQ_NOTE_WRITE’                  a write occurred
                                      
                                      
     ‘KQ_NOTE_EXTEND’                 the file was extended
                                      
                                      
     ‘KQ_NOTE_ATTRIB’                 an attribute was changed
                                      
                                      
     ‘KQ_NOTE_LINK’                   the link count has changed
                                      
                                      
     ‘KQ_NOTE_RENAME’                 the file was renamed
                                      
                                      
     ‘KQ_NOTE_REVOKE’                 access to the file was revoked
                                      

     ‘KQ_FILTER_PROC’ filter flags:

     Constante                        Significado
                                      
     ----------------------------------------------------------------------------------
                                      
     ‘KQ_NOTE_EXIT’                   the process has exited
                                      
                                      
     ‘KQ_NOTE_FORK’                   the process has called 'fork()'
                                      
                                      
     ‘KQ_NOTE_EXEC’                   the process has executed a new process
                                      
                                      
     ‘KQ_NOTE_PCTRLMASK’              internal filter flag
                                      
                                      
     ‘KQ_NOTE_PDATAMASK’              internal filter flag
                                      
                                      
     ‘KQ_NOTE_TRACK’                  follow a process across 'fork()'
                                      
                                      
     ‘KQ_NOTE_CHILD’                  returned on the child process for 'NOTE_TRACK'
                                      
                                      
     ‘KQ_NOTE_TRACKERR’               unable to attach to a child
                                      

     ‘KQ_FILTER_NETDEV’ filter flags (not available on macOS):

     Constante                        Significado
                                      
     ----------------------------------------------------------------------------------
                                      
     ‘KQ_NOTE_LINKUP’                 link is up
                                      
                                      
     ‘KQ_NOTE_LINKDOWN’               link is down
                                      
                                      
     ‘KQ_NOTE_LINKINV’                estado do link é inválido
                                      

 -- Atributo: kevent.data

     Filter specific data.

 -- Atributo: kevent.udata

     User defined value.


File: python.info,  Node: selectors — High-level I/O multiplexing,  Next: signal — Define manipuladores para eventos assíncronos,  Prev: select — Waiting for I/O completion,  Up: Comunicação em Rede e Interprocesso

5.19.5 ‘selectors’ — High-level I/O multiplexing
------------------------------------------------

Adicionado na versão 3.4.

'Código-fonte:' Lib/selectors.py(1)

__________________________________________________________________

* Menu:

* Introdução: Introdução<10>.
* Classes: Classes<4>.
* Exemplos: Exemplos<21>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/selectors.py


File: python.info,  Node: Introdução<10>,  Next: Classes<4>,  Up: selectors — High-level I/O multiplexing

5.19.5.1 Introdução
...................

This module allows high-level and efficient I/O multiplexing, built upon
the *note select: c1. module primitives.  Users are encouraged to use
this module instead, unless they want precise control over the OS-level
primitives used.

It defines a *note BaseSelector: 36f3. abstract base class, along with
several concrete implementations (*note KqueueSelector: 35da, *note
EpollSelector: bf0.…), that can be used to wait for I/O readiness
notification on multiple file objects.  In the following, “file object”
refers to any object with a *note fileno(): 15d0. method, or a raw file
descriptor.  See *note file object: 1203.

*note DefaultSelector: 36f4. is an alias to the most efficient
implementation available on the current platform: this should be the
default choice for most users.

     Nota: The type of file objects supported depends on the platform:
     on Windows, sockets are supported, but not pipes, whereas on Unix,
     both are supported (some other types may be supported as well, such
     as fifos or special file devices).

Ver também
..........

*note select: c1.

     Low-level I/O multiplexing module.

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.


File: python.info,  Node: Classes<4>,  Next: Exemplos<21>,  Prev: Introdução<10>,  Up: selectors — High-level I/O multiplexing

5.19.5.2 Classes
................

Classes hierarchy:

     BaseSelector
     +-- SelectSelector
     +-- PollSelector
     +-- EpollSelector
     +-- DevpollSelector
     +-- KqueueSelector

In the following, 'events' is a bitwise mask indicating which I/O events
should be waited for on a given file object.  It can be a combination of
the modules constants below:

     Constante                   Significado
                                 
     --------------------------------------------------------------------------------
                                 
      -- Dado:                   Disponível para leitura
               selectors.EVENT_READ

      -- Dado:                   Disponível para escrita
               selectors.EVENT_WRITE

 -- Classe: selectors.SelectorKey

     A *note SelectorKey: 36f8. is a *note namedtuple: 1ca. used to
     associate a file object to its underlying file descriptor, selected
     event mask and attached data.  It is returned by several *note
     BaseSelector: 36f3. methods.

      -- Atributo: fileobj

          File object registered.

      -- Atributo: fd

          O descritor de arquivo subjacente.

      -- Atributo: events

          Events that must be waited for on this file object.

      -- Atributo: data

          Optional opaque data associated to this file object: for
          example, this could be used to store a per-client session ID.

 -- Classe: selectors.BaseSelector

     A *note BaseSelector: 36f3. is used to wait for I/O event readiness
     on multiple file objects.  It supports file stream registration,
     unregistration, and a method to wait for I/O events on those
     streams, with an optional timeout.  It’s an abstract base class, so
     cannot be instantiated.  Use *note DefaultSelector: 36f4. instead,
     or one of *note SelectSelector: 35d7, *note KqueueSelector: 35da.
     etc.  if you want to specifically use an implementation, and your
     platform supports it.  *note BaseSelector: 36f3. and its concrete
     implementations support the *note context manager: 5d4. protocol.

      -- Método: abstractmethod register (fileobj, events, data=None)

          Registra um objeto arquivo para seleção, monitorando-o para
          eventos de I/O

          'fileobj' is the file object to monitor.  It may either be an
          integer file descriptor or an object with a ‘fileno()’ method.
          'events' is a bitwise mask of events to monitor.  'data' is an
          opaque object.

          This returns a new *note SelectorKey: 36f8. instance, or
          raises a *note ValueError: 202. in case of invalid event mask
          or file descriptor, or *note KeyError: 344. if the file object
          is already registered.

      -- Método: abstractmethod unregister (fileobj)

          Unregister a file object from selection, removing it from
          monitoring.  A file object shall be unregistered prior to
          being closed.

          'fileobj' must be a file object previously registered.

          This returns the associated *note SelectorKey: 36f8. instance,
          or raises a *note KeyError: 344. if 'fileobj' is not
          registered.  It will raise *note ValueError: 202. if 'fileobj'
          is invalid (e.g.  it has no ‘fileno()’ method or its
          ‘fileno()’ method has an invalid return value).

      -- Método: modify (fileobj, events, data=None)

          Change a registered file object’s monitored events or attached
          data.

          This is equivalent to ‘BaseSelector.unregister(fileobj)’
          followed by ‘BaseSelector.register(fileobj, events, data)’,
          except that it can be implemented more efficiently.

          This returns a new *note SelectorKey: 36f8. instance, or
          raises a *note ValueError: 202. in case of invalid event mask
          or file descriptor, or *note KeyError: 344. if the file object
          is not registered.

      -- Método: abstractmethod select (timeout=None)

          Wait until some registered file objects become ready, or the
          timeout expires.

          If ‘timeout > 0’, this specifies the maximum wait time, in
          seconds.  If ‘timeout <= 0’, the call won’t block, and will
          report the currently ready file objects.  If 'timeout' is
          ‘None’, the call will block until a monitored file object
          becomes ready.

          This returns a list of ‘(key, events)’ tuples, one for each
          ready file object.

          'key' is the *note SelectorKey: 36f8. instance corresponding
          to a ready file object.  'events' is a bitmask of events ready
          on this file object.

               Nota: This method can return before any file object
               becomes ready or the timeout has elapsed if the current
               process receives a signal: in this case, an empty list
               will be returned.

          Alterado na versão 3.5: The selector is now retried with a
          recomputed timeout when interrupted by a signal if the signal
          handler did not raise an exception (see PEP 475(1) for the
          rationale), instead of returning an empty list of events
          before the timeout.

      -- Método: close ()

          Close the selector.

          This must be called to make sure that any underlying resource
          is freed.  The selector shall not be used once it has been
          closed.

      -- Método: get_key (fileobj)

          Return the key associated with a registered file object.

          This returns the *note SelectorKey: 36f8. instance associated
          to this file object, or raises *note KeyError: 344. if the
          file object is not registered.

      -- Método: abstractmethod get_map ()

          Return a mapping of file objects to selector keys.

          This returns a *note Mapping: 8d0. instance mapping registered
          file objects to their associated *note SelectorKey: 36f8.
          instance.

 -- Classe: selectors.DefaultSelector

     The default selector class, using the most efficient implementation
     available on the current platform.  This should be the default
     choice for most users.

 -- Classe: selectors.SelectSelector

     *note select.select(): dc8.-based selector.

 -- Classe: selectors.PollSelector

     *note select.poll(): 2d8a.-based selector.

 -- Classe: selectors.EpollSelector

     *note select.epoll(): fc8.-based selector.

      -- Método: fileno ()

          This returns the file descriptor used by the underlying *note
          select.epoll(): fc8. object.

 -- Classe: selectors.DevpollSelector

     *note select.devpoll(): fca.-based selector.

      -- Método: fileno ()

          This returns the file descriptor used by the underlying *note
          select.devpoll(): fca. object.

     Adicionado na versão 3.5.

 -- Classe: selectors.KqueueSelector

     *note select.kqueue(): 17c0.-based selector.

      -- Método: fileno ()

          This returns the file descriptor used by the underlying *note
          select.kqueue(): 17c0. object.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0475/


File: python.info,  Node: Exemplos<21>,  Prev: Classes<4>,  Up: selectors — High-level I/O multiplexing

5.19.5.3 Exemplos
.................

Here is a simple echo server implementation:

     import selectors
     import socket

     sel = selectors.DefaultSelector()

     def accept(sock, mask):
         conn, addr = sock.accept()  # Should be ready
         print('accepted', conn, 'from', addr)
         conn.setblocking(False)
         sel.register(conn, selectors.EVENT_READ, read)

     def read(conn, mask):
         data = conn.recv(1000)  # Should be ready
         if data:
             print('echoing', repr(data), 'to', conn)
             conn.send(data)  # Hope it won't block
         else:
             print('closing', conn)
             sel.unregister(conn)
             conn.close()

     sock = socket.socket()
     sock.bind(('localhost', 1234))
     sock.listen(100)
     sock.setblocking(False)
     sel.register(sock, selectors.EVENT_READ, accept)

     while True:
         events = sel.select()
         for key, mask in events:
             callback = key.data
             callback(key.fileobj, mask)


File: python.info,  Node: signal — Define manipuladores para eventos assíncronos,  Next: mmap — Suporte a arquivos mapeados na memória,  Prev: selectors — High-level I/O multiplexing,  Up: Comunicação em Rede e Interprocesso

5.19.6 ‘signal’ — Define manipuladores para eventos assíncronos
---------------------------------------------------------------

'Código-fonte:' Lib/signal.py(1)

__________________________________________________________________

Este módulo fornece mecanismos para usar manipuladores de sinal em
Python.

* Menu:

* Regras gerais::
* Conteúdo do módulo: Conteúdo do módulo<5>.
* Exemplos: Exemplos<22>.
* Nota sobre SIGPIPE::
* Nota sobre manipuladores de sinais e exceções::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/signal.py


File: python.info,  Node: Regras gerais,  Next: Conteúdo do módulo<5>,  Up: signal — Define manipuladores para eventos assíncronos

5.19.6.1 Regras gerais
......................

A função *note signal.signal(): 1173. permite definir manipuladores
personalizados a serem executados quando um sinal é recebido.  Um
pequeno número de manipuladores padrão são instalados: *note SIGPIPE:
370b. é ignorado (então erros de gravação em encadeamentos e sockets
podem ser relatados como exceções comuns do Python) e *note SIGINT: 847.
é traduzido em uma exceção *note KeyboardInterrupt: 9d9. se o processo
pai não a tiver alterado.

Um manipulador para um sinal específico, uma vez definido, permanece
instalado até ser explicitamente redefinido (o Python emula a interface
de estilo BSD independentemente da implementação subjacente), com
exceção do manipulador para *note SIGCHLD: 2dc5, que segue a
implementação subjacente.

Em plataformas WebAssembly, os sinais são emulados e, portanto, se
comportam de forma diferente.  Várias funções e sinais não estão
disponíveis nessas plataformas.

* Menu:

* Execução de manipuladores de sinais Python::
* Sinais e threads::


File: python.info,  Node: Execução de manipuladores de sinais Python,  Next: Sinais e threads,  Up: Regras gerais

5.19.6.2 Execução de manipuladores de sinais Python
...................................................

Um manipulador de sinal Python não é executado dentro do manipulador de
sinal de baixo nível (C). Em vez disso, o manipulador de sinal de baixo
nível define um sinalizador que diz à *note máquina virtual: 370d. para
executar o manipulador de sinal Python correspondente em um ponto
posterior (por exemplo, na próxima instrução *note bytecode: 187.).
Isso tem consequências:

   * Faz pouco sentido capturar erros síncronos como *note SIGFPE: 10ba.
     ou *note SIGSEGV: 10b9. que são causados por uma operação inválida
     no código C. O Python retornará do manipulador de sinais para o
     código C, o que provavelmente levantará o mesmo sinal novamente,
     fazendo com que o Python aparentemente trave.  Do Python 3.3 em
     diante, você pode usar o módulo *note faulthandler: 58. para
     relatar erros síncronos.

   * Um cálculo de longa duração implementado puramente em C (como
     correspondência de expressão regular em um grande corpo de texto)
     pode ser executado ininterruptamente por um período de tempo
     arbitrário, independentemente de quaisquer sinais recebidos.  Os
     manipuladores de sinal do Python serão chamados quando o cálculo
     terminar.

   * Se o manipulador levantar uma exceção, ela será levantada “do nada”
     na thread principal.  Veja a *note nota abaixo: 2422. para uma
     discussão.


File: python.info,  Node: Sinais e threads,  Prev: Execução de manipuladores de sinais Python,  Up: Regras gerais

5.19.6.3 Sinais e threads
.........................

Os manipuladores de sinais Python são sempre executados na thread
principal do Python do interpretador principal, mesmo se o sinal foi
recebido em outra thread.  Isso significa que os sinais não podem ser
usados como um meio de comunicação entre threads.  Você pode usar as
primitivas de sincronização do módulo *note threading: ed. em vez disso.

Além disso, somente a thread principal do interpretador principal tem
permissão para definir um novo manipulador de sinal.


File: python.info,  Node: Conteúdo do módulo<5>,  Next: Exemplos<22>,  Prev: Regras gerais,  Up: signal — Define manipuladores para eventos assíncronos

5.19.6.4 Conteúdo do módulo
...........................

Alterado na versão 3.5: As constantes relacionadas a sinal (SIG*),
manipulador (*note SIG_DFL: 193c, *note SIG_IGN: 193b.) e sigmask (*note
SIG_BLOCK: 3711, *note SIG_UNBLOCK: 3712, *note SIG_SETMASK: 3713.)
listadas abaixo foram transformadas em *note enums: d00. (*note Signals:
3714, *note Handlers: 3715. e *note Sigmasks: 3716. respectivamente).
As funções *note getsignal(): 17a0, *note pthread_sigmask(): 116f, *note
sigpending(): 1171. e *note sigwait(): 1172. retornam *note enums: d00.
legíveis por humanos como objetos *note Signals: 3714.

O módulo de sinal define três enumerações:

 -- Classe: signal.Signals

     Coleção de *note enum.IntEnum: d00. de constantes SIG* e constantes
     CTRL_*.

     Adicionado na versão 3.5.

 -- Classe: signal.Handlers

     Coleção de *note enum.IntEnum: d00. das constantes *note SIG_DFL:
     193c. e *note SIG_IGN: 193b.

     Adicionado na versão 3.5.

 -- Classe: signal.Sigmasks

     Coleção de *note enum.IntEnum: d00. das constantes *note SIG_BLOCK:
     3711, *note SIG_UNBLOCK: 3712. e *note SIG_SETMASK: 3713.

     *note Disponibilidade: 1ed8.: Unix.

     Veja a página man ‘sigprocmask(2)(1)’ e ‘pthread_sigmask(3)(2)’
     para mais informações.

     Adicionado na versão 3.5.

As variáveis definidas no módulo *note signal: c6. são:

 -- Dado: signal.SIG_DFL

     Esta é uma das duas opções de manipulação de sinal padrão; ela
     simplesmente executará a função padrão para o sinal.  Por exemplo,
     na maioria dos sistemas, a ação padrão para *note SIGQUIT: 3717. é
     despejar o núcleo e sair, enquanto a ação padrão para *note
     SIGCHLD: 2dc5. é simplesmente ignorá-lo.

 -- Dado: signal.SIG_IGN

     Este é outro manipulador de sinal padrão, que simplesmente ignorará
     o sinal fornecido.

 -- Dado: signal.SIGABRT

     Sinal de abortar de ‘abort(3)(3)’.

 -- Dado: signal.SIGALRM

     Sinal do temporizador de ‘alarm(2)(4)’.

     *note Disponibilidade: 1ed8.: Unix.

 -- Dado: signal.SIGBREAK

     Interrupção do teclado (CTRL + BREAK).

     *note Disponibilidade: 1ed8.: Windows.

 -- Dado: signal.SIGBUS

     Erro de barramento (acesso incorreto à memória).

     *note Disponibilidade: 1ed8.: Unix.

 -- Dado: signal.SIGCHLD

     Processo filho interrompido ou encerrado.

     *note Disponibilidade: 1ed8.: Unix.

 -- Dado: signal.SIGCLD

     Apelido para *note SIGCHLD: 2dc5.

     *note Disponibilidade: 1ed8.: not macOS.

 -- Dado: signal.SIGCONT

     Continua o processo se ele estiver parado no momento

     *note Disponibilidade: 1ed8.: Unix.

 -- Dado: signal.SIGFPE

     Exceção de ponto flutuante.  Por exemplo, divisão por zero.

     Ver também
     ..........

     *note ZeroDivisionError: 94c. é levatanda quando o segundo
     argumento de uma operação de divisão ou módulo é zero.

 -- Dado: signal.SIGHUP

     Travamento detectado no terminal de controle ou morte do processo
     de controle.

     *note Disponibilidade: 1ed8.: Unix.

 -- Dado: signal.SIGILL

     Instrução ilegal.

 -- Dado: signal.SIGINT

     Interrupção do teclado (CTRL + C).

     A ação padrão é levantar *note KeyboardInterrupt: 9d9.

 -- Dado: signal.SIGKILL

     Sinal para encerrar forçadamente.

     Ele não pode ser capturado, bloqueado ou ignorado.

     *note Disponibilidade: 1ed8.: Unix.

 -- Dado: signal.SIGPIPE

     Encadeamento quebrado: escreve no encadeamento sem leitores.

     A ação padrão é ignorar o sinal.

     *note Disponibilidade: 1ed8.: Unix.

 -- Dado: signal.SIGPROF

     Temporizador de perfilamento expirado.

     *note Disponibilidade: 1ed8.: Unix.

 -- Dado: signal.SIGQUIT

     Sinal de saída do terminal.

     *note Disponibilidade: 1ed8.: Unix.

 -- Dado: signal.SIGSEGV

     Falha de segmentação: referência de memória inválida.

 -- Dado: signal.SIGSTOP

     Para a execução (não pode ser capturado ou ignorado).

 -- Dado: signal.SIGSTKFLT

     Falha de pilha no coprocessador.  O kernel Linux não levanta esse
     sinal: ele só pode ser emitido no espaço do usuário.

     *note Disponibilidade: 1ed8.: Linux.

     Em arquiteturas onde o sinal está disponível.  Veja a página man
     ‘signal(7)(5)’ para mais informações.

     Adicionado na versão 3.11.

 -- Dado: signal.SIGTERM

     Sinal de encerramento.

 -- Dado: signal.SIGUSR1

     Sinal definido pelo usuário 1.

     *note Disponibilidade: 1ed8.: Unix.

 -- Dado: signal.SIGUSR2

     Sinal definido pelo usuário 2.

     *note Disponibilidade: 1ed8.: Unix.

 -- Dado: signal.SIGVTALRM

     Temporizador virtual expirou.

     *note Disponibilidade: 1ed8.: Unix.

 -- Dado: signal.SIGWINCH

     Sinal de redimensionamento do Windows.

     *note Disponibilidade: 1ed8.: Unix.

 -- Dado: signal.SIGXCPU

     Limite de tempo da CPU excedido.

     *note Disponibilidade: 1ed8.: Unix.

 -- Dado: SIG*

     Todos os números de sinal são definidos simbolicamente.  Por
     exemplo, o sinal de desligamento é definido como *note
     signal.SIGHUP: 371b.; os nomes das variáveis são idênticos aos
     usados em programas C, como encontrados em ‘<signal.h>’.  A página
     man do Unix para ‘‘signal’’ lista os sinais existentes (em alguns
     sistemas, é ‘signal(2)(6)’, em outros, a lista está em
     ‘signal(7)(7)’).  Observe que nem todos os sistemas definem o mesmo
     conjunto de nomes de sinais; apenas os nomes definidos pelo sistema
     são definidos por este módulo.

 -- Dado: signal.CTRL_C_EVENT

     O sinal correspondente ao evento de pressionamento de tecla
     ‘Ctrl’+‘C’.  Este sinal só pode ser usado com *note os.kill():
     13ae.

     *note Disponibilidade: 1ed8.: Windows.

     Adicionado na versão 3.2.

 -- Dado: signal.CTRL_BREAK_EVENT

     O sinal correspondente ao evento de pressionamento de tecla
     ‘Ctrl’+‘Break’.  Este sinal só pode ser usado com *note os.kill():
     13ae.

     *note Disponibilidade: 1ed8.: Windows.

     Adicionado na versão 3.2.

 -- Dado: signal.NSIG

     Um a mais que o número do sinal mais alto.  Use *note
     valid_signals(): 3723. para obter números de sinais válidos.

 -- Dado: signal.ITIMER_REAL

     Diminui o intervalo do temporizador em tempo real e entrega *note
     SIGALRM: 3718. ao expirar.

 -- Dado: signal.ITIMER_VIRTUAL

     Diminui o intervalo do temporizador somente quando o processo está
     em execução e entrega SIGVTALRM após a expiração.

 -- Dado: signal.ITIMER_PROF

     Diminui o temporizador de intervalo tanto quando o processo é
     executado quanto quando o sistema está executando em nome do
     processo.  Juntamente com o ITIMER_VIRTUAL, este temporizador é
     geralmente usado para criar um perfil do tempo gasto pelo
     aplicativo nos espaços do usuário e do kernel.  O SIGPROF é
     fornecido após a expiração.

 -- Dado: signal.SIG_BLOCK

     Um possível valor para o parâmetro 'how' para *note
     pthread_sigmask(): 116f. indicando que os sinais devem ser
     bloqueados.

     Adicionado na versão 3.3.

 -- Dado: signal.SIG_UNBLOCK

     Um possível valor para o parâmetro 'how' para *note
     pthread_sigmask(): 116f. indicando que os sinais devem ser
     desbloqueados.

     Adicionado na versão 3.3.

 -- Dado: signal.SIG_SETMASK

     Um possível valor para o parâmetro 'how' para *note
     pthread_sigmask(): 116f. indicando que a máscara de sinal deve ser
     substituída.

     Adicionado na versão 3.3.

O módulo *note signal: c6. define uma exceção:

 -- Exceção: signal.ItimerError

     Levantada para sinalizar um erro da implementação subjacente de
     *note setitimer(): 3728. ou *note getitimer(): 3729.  Espere este
     erro se um temporizador de intervalo inválido ou um tempo negativo
     for passado para *note setitimer(): 3728.  Este erro é um subtipo
     de *note OSError: 417.

     Adicionado na versão 3.3: Este erro costumava ser um subtipo de
     *note IOError: 108b, que agora é um apelido de *note OSError: 417.

O módulo *note signal: c6. define as seguintes funções:

 -- Função: signal.alarm (time)

     Se 'time' for diferente de zero, esta função solicita que um sinal
     *note SIGALRM: 3718. seja enviado ao processo em 'time' segundos.
     Qualquer alarme previamente agendado será cancelado (apenas um
     alarme pode ser agendado por vez).  O valor retornado será o número
     de segundos antes de qualquer alarme previamente configurado ter
     sido emitido.  Se 'time' for zero, nenhum alarme será agendado e
     qualquer alarme agendado será cancelado.  Se o valor retornado for
     zero, nenhum alarme será agendado no momento.

     *note Disponibilidade: 1ed8.: Unix.

     Veja a página man ‘alarm(2)(8)’ para mais informações.

 -- Função: signal.getsignal (signalnum)

     Retorna o manipulador de sinal atual para o sinal 'signalnum'.  O
     valor retornado pode ser um objeto Python invocável ou um dos
     valores especiais *note signal.SIG_IGN: 193b, *note signal.SIG_DFL:
     193c. ou *note None: 675.  Aqui, *note signal.SIG_IGN: 193b.
     significa que o sinal foi ignorado anteriormente, *note
     signal.SIG_DFL: 193c. significa que a maneira padrão de manipular o
     sinal estava em uso anteriormente e ‘None’ significa que o
     manipulador de sinal anterior não foi instalado a partir do Python.

 -- Função: signal.strsignal (signalnum)

     Retorna a descrição do sinal 'signalnum', como “Interrupt” para
     *note SIGINT: 847.  Retorna *note None: 675. se 'signalnum' não
     tiver descrição.  Levanta *note ValueError: 202. se 'signalnum' for
     inválido.

     Adicionado na versão 3.8.

 -- Função: signal.valid_signals ()

     Retorna o conjunto de números de sinais válidos nesta plataforma.
     Pode ser menor que ‘range(1, NSIG)’ se alguns sinais forem
     reservados pelo sistema para uso interno.

     Adicionado na versão 3.8.

 -- Função: signal.pause ()

     Faz o processo hibernar até que um sinal seja recebido; o
     manipulador apropriado será então chamado.  Não retorna nada.

     *note Disponibilidade: 1ed8.: Unix.

     Veja a página man ‘signal(2)(9)’ para mais informações.

     veja também *note sigwait(): 1172, *note sigwaitinfo(): dd3, *note
     sigtimedwait(): dd2. e *note sigpending(): 1171.

 -- Função: signal.raise_signal (signum)

     Envia um sinal para o processo de chamada.  Não retorna nada.

     Adicionado na versão 3.8.

 -- Função: signal.pidfd_send_signal (pidfd, sig, siginfo=None, flags=0)

     Envia o sinal 'sig' para o processo referenciado pelo descritor de
     arquivo 'pidfd'.  Atualmente, o Python não suporta o parâmetro
     'siginfo'; ele deve ser ‘None’.  O argumento 'flags' é fornecido
     para futuras extensões; nenhum valor de sinalizador está definido
     no momento.

     Veja a página man ‘pidfd_send_signal(2)(10)’ para mais informações.

     *note Disponibilidade: 1ed8.: Linux >= 5.1, Android >= *note
     build-time: ba2. API level 31

     Adicionado na versão 3.9.

 -- Função: signal.pthread_kill (thread_id, signalnum)

     Envia o sinal 'signalnum' para a thread 'thread_id', outra thread
     no mesmo processo que a chamadora.  A thread alvo pode estar
     executando qualquer código (Python ou não).  No entanto, se a
     thread alvo estiver executando o interpretador Python, os
     manipuladores de sinal Python serão *note executados pela thread
     principal do interpretador principal: 370f.  Portanto, o único
     objetivo de enviar um sinal para uma thread Python específica seria
     forçar uma chamada de sistema em execução a falhar com *note
     InterruptedError: db0.

     Utilize a *note threading.get_ident(): 1199. ou o atributo *note
     ident: 2e16. dos objetos *note threading.Thread: 953. para obter um
     valor adequado para 'thread_id'.

     Se 'signalnum' for 0, nenhum sinal será enviado, mas a verificação
     de erros ainda será realizada; isso pode ser usado para verificar
     se a thread de destino ainda está em execução.

     Levanta um *note evento de auditoria: 19fa. ‘signal.pthread_kill’
     com os argumentos ‘thread_id’, ‘signalnum’.

     *note Disponibilidade: 1ed8.: Unix.

     Veja a página man ‘pthread_kill(3)(11)’ para mais informações.

     Veja também *note os.kill(): 13ae.

     Adicionado na versão 3.3.

 -- Função: signal.pthread_sigmask (how, mask)

     Busca e/ou altera a máscara de sinal da thread chamadora.  A
     máscara de sinal é o conjunto de sinais cuja entrega está
     atualmente bloqueada para o chamador.  Retorna a máscara de sinal
     antiga como um conjunto de sinais.

     O comportamento da chamada depende do valor de 'how', como segue.

        * *note SIG_BLOCK: 3711.: O conjunto de sinais bloqueados é a
          união do conjunto atual e do argumento 'mask'.

        * *note SIG_UNBLOCK: 3712.: Os sinais em 'mask' são removidos do
          conjunto atual de sinais bloqueados.  É permitido tentar
          desbloquear um sinal que não esteja bloqueado.

        * *note SIG_SETMASK: 3713.: O conjunto de sinais bloqueados é
          definido como o argumento 'mask'.

     'mask' é um conjunto de números de sinais (ex.: {*note
     signal.SIGINT: 847, *note signal.SIGTERM: 1426.}).  Use *note
     valid_signals(): 3723. para uma máscara completa, incluindo todos
     os sinais.

     Por exemplo, ‘signal.pthread_sigmask(signal.SIG_BLOCK, [])’ lê a
     máscara de sinal da thread de chamada.

     *note SIGKILL: b6e. e *note SIGSTOP: 371d. não podem ser
     bloqueados.

     *note Disponibilidade: 1ed8.: Unix.

     Veja a página man ‘sigprocmask(2)(12)’ e ‘pthread_sigmask(3)(13)’
     para mais informações.

     Veja também *note pause(): 372b, *note sigpending(): 1171. e *note
     sigwait(): 1172.

     Adicionado na versão 3.3.

 -- Função: signal.setitimer (which, seconds, interval=0.0)

     Define o temporizador de intervalo fornecido (um dos seguintes:
     *note signal.ITIMER_REAL: 3724, *note signal.ITIMER_VIRTUAL: 3725.
     ou *note signal.ITIMER_PROF: 3726.) especificado por 'which' para
     disparar após 'seconds' (float é aceito, diferente de *note
     alarm(): 372a.) e, depois disso, a cada 'interval' segundos (se
     'interval' for diferente de zero).  O temporizador de intervalo
     especificado por 'which' pode ser zerado definindo 'seconds' como
     zero.

     Quando um temporizador de intervalo dispara, um sinal é enviado ao
     processo.  O sinal enviado depende do temporizador utilizado; *note
     signal.ITIMER_REAL: 3724. enviará *note SIGALRM: 3718, *note
     signal.ITIMER_VIRTUAL: 3725. enviará *note SIGVTALRM: 3720. e *note
     signal.ITIMER_PROF: 3726. enviará *note SIGPROF: 371c.

     Os valores antigos são retornados como uma tupla: (atraso,
     intervalo).

     Tentar passar um intervalo de tempo inválido causará uma *note
     ItimerError: 3727.

     *note Disponibilidade: 1ed8.: Unix.

 -- Função: signal.getitimer (which)

     Retorna o valor atual de um intervalo de tempo especificado por
     'which'.

     *note Disponibilidade: 1ed8.: Unix.

 -- Função: signal.set_wakeup_fd (fd, *, warn_on_full_buffer=True)

     Define o descritor de arquivo de ativação como 'fd'.  Quando um
     sinal para o qual seu programa registrou um manipulador de sinais é
     recebido, o número do sinal é escrito como um único byte no fd.  Se
     você não registrou um manipulador de sinais para os sinais de seu
     interesse, nada será escrito no fd de ativação.  Isso pode ser
     usado por uma biblioteca para ativar uma chamada de poll ou
     seleção, permitindo que o sinal seja totalmente processado.

     O antigo fd de ativação é retornado (ou -1 se a ativação do
     descritor de arquivo não estava habilitada).  Se 'fd' for -1, a
     ativação do descritor de arquivo está desabilitada.  Se não for -1,
     'fd' deve ser não bloqueante.  Cabe à biblioteca remover quaisquer
     bytes de 'fd' antes de chamar poll ou select novamente.

     Quando threads estão habilitadas, esta função só pode ser chamada
     da *note thread principal do interpretador principal: 370f.; tentar
     chamá-la de outras threads levantará uma exceção *note ValueError:
     202.

     Há duas maneiras comuns de usar esta função.  Em ambas as
     abordagens, você usa o fd para despertar quando um sinal chega, mas
     elas diferem na forma como determinam 'which' sinal ou sinais
     chegaram.

     Na primeira abordagem, lemos os dados do buffer do fd, e os valores
     dos bytes fornecem os números dos sinais.  Isso é simples, mas em
     casos raros pode apresentar um problema: geralmente, o fd terá um
     espaço de buffer limitado e, se muitos sinais chegarem muito
     rápido, o buffer pode ficar cheio e alguns sinais podem ser
     perdidos.  Se você usar essa abordagem, defina
     ‘warn_on_full_buffer=True’, o que pelo menos fará com que um aviso
     seja impresso no stderr quando os sinais forem perdidos.

     Na segunda abordagem, usamos o fd de ativação 'apenas' para
     ativações e ignoramos os valores de bytes reais.  Nesse caso, tudo
     o que importa é se o buffer do fd está vazio ou não; um buffer
     cheio não indica nenhum problema.  Se você usar essa abordagem,
     defina ‘warn_on_full_buffer=False’ para que seus usuários não sejam
     confundidos por mensagens de aviso falsas.

     Alterado na versão 3.5: No Windows, a função agora também suporta
     manipuladores de socket.

     Alterado na versão 3.7: Adiciona o parâmetro ‘warn_on_full_buffer’.

 -- Função: signal.siginterrupt (signalnum, flag)

     Altera o comportamento de reinicialização de chamadas de sistema:
     se 'flag' for *note False: b49, as chamadas de sistema serão
     reiniciadas quando interrompidas pelo sinal 'signalnum'; caso
     contrário, as chamadas de sistema serão interrompidas.  Não retorna
     nada.

     *note Disponibilidade: 1ed8.: Unix.

     Veja a página man ‘siginterrupt(3)(14)’ para mais informações.

     Observe que a instalação de um manipulador de sinal com *note
     signal(): c6. redefinirá o comportamento de reinicialização para
     interrompível ao chamar implicitamente ‘siginterrupt()’ com 'flag'
     contendo valor verdadeiro para o sinal fornecido.

 -- Função: signal.signal (signalnum, handler)

     Define o manipulador do sinal 'signalnum' para a função 'handler'.
     'handler' pode ser um objeto Python invocável que recebe dois
     argumentos (veja abaixo), ou um dos valores especiais *note
     signal.SIG_IGN: 193b. ou *note signal.SIG_DFL: 193c.  O manipulador
     de sinal anterior será retornado (veja a descrição de *note
     getsignal(): 17a0. acima).  (Consulte a página man do Unix
     ‘signal(2)(15)’ para mais informações.)

     Quando threads estão habilitadas, esta função só pode ser chamada
     da *note thread principal do interpretador principal: 370f.; tentar
     chamá-la de outras threads levantará uma exceção *note ValueError:
     202.

     O 'handler' é chamado com dois argumentos: o número do sinal e o
     quadro de pilha atual (‘None’ ou um objeto quadro; para uma
     descrição dos objetos quadro, consulte a *note descrição na
     hierarquia de tipo: 6e0. ou consulte as descrições de atributo no
     módulo *note inspect: 7e.).

     No Windows, *note signal(): c6. só pode ser chamado com *note
     SIGABRT: 10bb, *note SIGFPE: 10ba, *note SIGILL: 10bd, *note
     SIGINT: 847, *note SIGSEGV: 10b9, *note SIGTERM: 1426. ou *note
     SIGBREAK: 3719.  Uma exceção *note ValueError: 202. será levantada
     em qualquer outro caso.  Observe que nem todos os sistemas definem
     o mesmo conjunto de nomes de sinais; uma exceção *note
     AttributeError: 34b. será levantada se um nome de sinal não for
     definido como constante de nível de módulo ‘SIG*’.

 -- Função: signal.sigpending ()

     Examine o conjunto de sinais pendentes para entrega ao thread de
     chamada (ou seja, os sinais que foram gerados enquanto bloqueados).
     Retorne o conjunto de sinais pendentes.

     *note Disponibilidade: 1ed8.: Unix.

     Veja a página man ‘sigpending(2)(16)’ para mais informações.

     Veja também *note pause(): 372b, *note pthread_sigmask(): 116f. e
     *note sigwait(): 1172.

     Adicionado na versão 3.3.

 -- Função: signal.sigwait (sigset)

     Suspende a execução do thread de chamada até a entrega de um dos
     sinais especificados no conjunto de sinais 'sigset'.  A função
     aceita o sinal (remove-o da lista de sinais pendentes) e retorna o
     número do sinal.

     *note Disponibilidade: 1ed8.: Unix.

     Veja a página man ‘sigwait(3)(17)’ para mais informações.

     Veja também *note pause(): 372b, *note pthread_sigmask(): 116f,
     *note sigpending(): 1171, *note sigwaitinfo(): dd3. e *note
     sigtimedwait(): dd2.

     Adicionado na versão 3.3.

 -- Função: signal.sigwaitinfo (sigset)

     Suspende a execução da thread chamadora até a entrega de um dos
     sinais especificados no conjunto de sinais 'sigset'.  A função
     aceita o sinal e o remove da lista de sinais pendentes.  Se um dos
     sinais em 'sigset' já estiver pendente para a thread chamadora, a
     função retornará imediatamente com informações sobre esse sinal.  O
     manipulador de sinais não é chamado para o sinal entregue.  A
     função levanta *note InterruptedError: db0. se for interrompida por
     um sinal que não esteja em 'sigset'.

     O valor de retorno é um objeto que representa os dados contidos na
     estrutura de ‘siginfo_t’, a saber: ‘si_signo’, ‘si_code’,
     ‘si_errno’, ‘si_pid’, ‘si_uid’, ‘si_status’, ‘si_band’.

     *note Disponibilidade: 1ed8.: Unix.

     Veja a página man ‘sigwaitinfo(2)(18)’ para mais informações.

     Veja também *note pause(): 372b, *note sigwait(): 1172. e *note
     sigtimedwait(): dd2.

     Adicionado na versão 3.3.

     Alterado na versão 3.5: A função agora é tentada novamente se
     interrompida por um sinal que não esteja em 'sigset' e o
     manipulador de sinal não levanta uma exceção (veja PEP 475(19) para
     a justificativa).

 -- Função: signal.sigtimedwait (sigset, timeout)

     Semelhante a *note sigwaitinfo(): dd3, mas recebe um argumento
     'timeout' adicional que especifica um tempo limite.  Se 'timeout'
     for especificado como ‘0’, uma consulta será realizada.  Retorna
     *note None: 675. se ocorrer um tempo limite.

     *note Disponibilidade: 1ed8.: Unix.

     Veja a página man ‘sigtimedwait(2)(20)’ para mais informações.

     Veja também *note pause(): 372b, *note sigwait(): 1172. e *note
     sigwaitinfo(): dd3.

     Adicionado na versão 3.3.

     Alterado na versão 3.5: A função agora é tentada novamente com o
     'timeout' recalculado se interrompida por um sinal que não esteja
     em 'sigset' e o manipulador de sinal não levanta uma exceção (veja
     PEP 475(21) para a justificativa).

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/sigprocmask(2)

   (2) https://manpages.debian.org/pthread_sigmask(3)

   (3) https://manpages.debian.org/abort(3)

   (4) https://manpages.debian.org/alarm(2)

   (5) https://manpages.debian.org/signal(7)

   (6) https://manpages.debian.org/signal(2)

   (7) https://manpages.debian.org/signal(7)

   (8) https://manpages.debian.org/alarm(2)

   (9) https://manpages.debian.org/signal(2)

   (10) https://manpages.debian.org/pidfd_send_signal(2)

   (11) https://manpages.debian.org/pthread_kill(3)

   (12) https://manpages.debian.org/sigprocmask(2)

   (13) https://manpages.debian.org/pthread_sigmask(3)

   (14) https://manpages.debian.org/siginterrupt(3)

   (15) https://manpages.debian.org/signal(2)

   (16) https://manpages.debian.org/sigpending(2)

   (17) https://manpages.debian.org/sigwait(3)

   (18) https://manpages.debian.org/sigwaitinfo(2)

   (19) https://peps.python.org/pep-0475/

   (20) https://manpages.debian.org/sigtimedwait(2)

   (21) https://peps.python.org/pep-0475/


File: python.info,  Node: Exemplos<22>,  Next: Nota sobre SIGPIPE,  Prev: Conteúdo do módulo<5>,  Up: signal — Define manipuladores para eventos assíncronos

5.19.6.5 Exemplos
.................

Aqui está um programa de exemplo mínimo.  Ele usa a função *note
alarm(): 372a. para limitar o tempo gasto esperando para abrir um
arquivo; isso é útil se o arquivo for para um dispositivo serial que
pode não estar ligado, o que normalmente faria com que o *note
os.open(): dba. travasse indefinidamente.  A solução é definir um alarme
de 5 segundos antes de abrir o arquivo; se a operação demorar muito, o
sinal de alarme será enviado e o manipulador levantará uma exceção.

     import signal, os

     def handler(signum, frame):
         signame = signal.Signals(signum).name
         print(f'Signal handler called with signal {signame} ({signum})')
         raise OSError("Couldn't open device!")

     # Define o manipulador de sinal e um alarme de 5 segundos
     signal.signal(signal.SIGALRM, handler)
     signal.alarm(5)

     # Este open() pode travar indefinidamente
     fd = os.open('/dev/ttyS0', os.O_RDWR)

     signal.alarm(0)          # Desabilita o alarme


File: python.info,  Node: Nota sobre SIGPIPE,  Next: Nota sobre manipuladores de sinais e exceções,  Prev: Exemplos<22>,  Up: signal — Define manipuladores para eventos assíncronos

5.19.6.6 Nota sobre SIGPIPE
...........................

Canalizar a saída do seu programa para ferramentas como ‘head(1)(1)’
fará com que um sinal *note SIGPIPE: 370b. seja enviado ao seu processo
quando o receptor da saída padrão fechar antes do tempo.  Isso resulta
em uma exceção como ‘BrokenPipeError: [Errno 32] Broken pipe’.  Para
lidar com esse caso, envolva seu ponto de entrada para capturar essa
exceção da seguinte maneira:

     import os
     import sys

     def main():
         try:
             # simula uma saída grande (seu código substitui este loop)
             for x in range(10000):
                 print("y")
             # limpa a saída aqui para forçar o acionamento do SIGPIPE
             # enquanto estiver dentro deste bloco try.
             sys.stdout.flush()
         except BrokenPipeError:
             # Python libera fluxos padrão na saída; redireciona a saída restante
             # para devnull para evitar outro BrokenPipeError no desligamento
             devnull = os.open(os.devnull, os.O_WRONLY)
             os.dup2(devnull, sys.stdout.fileno())
             sys.exit(1)  # Python exits with error code 1 on EPIPE

     if __name__ == '__main__':
         main()

Não defina a disposição de *note SIGPIPE: 370b. como *note SIG_DFL:
193c. para evitar *note BrokenPipeError: 1095.  Isso faria com que seu
programa encerrasse inesperadamente sempre que qualquer conexão de
soquete fosse interrompida enquanto o programa ainda estivesse
escrevendo nele.

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/head(1)


File: python.info,  Node: Nota sobre manipuladores de sinais e exceções,  Prev: Nota sobre SIGPIPE,  Up: signal — Define manipuladores para eventos assíncronos

5.19.6.7 Nota sobre manipuladores de sinais e exceções
......................................................

Se um manipulador de sinais levantar uma exceção, a exceção será
propagada para a thread principal e poderá ser levantada após qualquer
instrução *note bytecode: 187.  Mais notavelmente, uma *note
KeyboardInterrupt: 9d9. pode aparecer a qualquer momento durante a
execução.  A maioria dos códigos Python, incluindo a biblioteca padrão,
não pode ser robusta contra isso, e, portanto, uma *note
KeyboardInterrupt: 9d9. (ou qualquer outra exceção resultante de um
manipulador de sinais) pode, em raras ocasiões, colocar o programa em um
estado inesperado.

Para ilustrar esse problema, considere o seguinte código:

     class SpamContext:
         def __init__(self):
             self.lock = threading.Lock()

         def __enter__(self):
             # Se ocorrer KeyboardInterrupt aqui, está tudo bem
             self.lock.acquire()
             # Se KeyboardInterrupt ocorrer aqui, __exit__ não será chamado
             ...
             # KeyboardInterrupt pode ocorrer logo antes do retorno da função

         def __exit__(self, exc_type, exc_val, exc_tb):
             ...
             self.lock.release()

Para muitos programas, especialmente aqueles que simplesmente desejam
encerrar em *note KeyboardInterrupt: 9d9, isso não é um problema, mas
aplicações complexos ou que exigem alta confiabilidade devem evitar
levantar exceções de manipuladores de sinal.  Eles também devem evitar
capturar *note KeyboardInterrupt: 9d9. como forma de encerrar o programa
sem problemas.  Em vez disso, devem instalar seu próprio manipulador
*note SIGINT: 847.  Abaixo está um exemplo de um servidor HTTP que evita
*note KeyboardInterrupt: 9d9.:

     import signal
     import socket
     from selectors import DefaultSelector, EVENT_READ
     from http.server import HTTPServer, SimpleHTTPRequestHandler

     interrupt_read, interrupt_write = socket.socketpair()

     def handler(signum, frame):
         print('Signal handler called with signal', signum)
         interrupt_write.send(b'\0')
     signal.signal(signal.SIGINT, handler)

     def serve_forever(httpd):
         sel = DefaultSelector()
         sel.register(interrupt_read, EVENT_READ)
         sel.register(httpd, EVENT_READ)

         while True:
             for key, _ in sel.select():
                 if key.fileobj == interrupt_read:
                     interrupt_read.recv(1)
                     return
                 if key.fileobj == httpd:
                     httpd.handle_request()

     print("Serving on port 8000")
     httpd = HTTPServer(('', 8000), SimpleHTTPRequestHandler)
     serve_forever(httpd)
     print("Shutdown...")


File: python.info,  Node: mmap — Suporte a arquivos mapeados na memória,  Prev: signal — Define manipuladores para eventos assíncronos,  Up: Comunicação em Rede e Interprocesso

5.19.7 ‘mmap’ — Suporte a arquivos mapeados na memória
------------------------------------------------------

__________________________________________________________________

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

Objetos arquivo mapeados na memória se comportam como *note bytearray:
2ea. e como *note objetos arquivo: 1203.  Você pode usar objetos mmap na
maioria dos lugares onde *note bytearray: 2ea. é esperado; por exemplo,
você pode usar o módulo *note re: b9. para pesquisar um arquivo mapeado
na memória.  Você também pode alterar um único byte executando
‘obj[index] = 97’ ou alterar uma subsequência atribuindo a uma fatia:
‘obj[i1:i2] = b'...'’.  Você também pode ler e gravar dados começando na
posição atual do arquivo e ‘seek()’ através do arquivo para diferentes
posições.

Um arquivo mapeado na memória é criado pelo construtor *note mmap: 20b,
que é diferente no Unix e no Windows.  Nos dois casos, você deve
fornecer um descritor de arquivo para um arquivo aberto para
atualização.  Se você deseja mapear um objeto arquivo Python existente,
use o método *note fileno(): 15d0. para obter o valor correto para o
parâmetro 'fileno'.  Caso contrário, você pode abrir o arquivo usando a
função *note os.open(): dba, que retorna um descritor de arquivo
diretamente (o arquivo ainda precisa ser fechado quando terminar).

     Nota: Se você deseja criar um mapeamento de memória para um arquivo
     gravável e armazenado em buffer, deve usar *note flush(): 2df3. no
     arquivo primeiro.  Isso é necessário para garantir que as
     modificações locais nos buffers estejam realmente disponíveis para
     o mapeamento.

Para as versões Unix e Windows do construtor, 'access' pode ser
especificado como um parâmetro opcional de palavra-chave.  'access'
aceita um dos quatro valores: ‘ACCESS_READ’, ‘ACCESS_WRITE’ ou
‘ACCESS_COPY’ para especificar memória somente leitura, gravação ou
cópia na gravação, respectivamente ‘ACCESS_DEFAULT’ para adiar para
'prot'.  'access' pode ser usado no Unix e no Windows.  Se 'access' não
for especificado, o mmap do Windows retornará um mapeamento de gravação.
Os valores iniciais da memória para todos os três tipos de acesso são
obtidos do arquivo especificado.  A atribuição a um mapa de memória
‘ACCESS_READ’ gera uma exceção *note TypeError: 2c3.  A atribuição a um
mapa de memória ‘ACCESS_WRITE’ afeta a memória e o arquivo subjacente.
A atribuição a um mapa de memória ‘ACCESS_COPY’ afeta a memória, mas não
atualiza o arquivo subjacente.

Alterado na versão 3.7: Adicionada a constante ‘ACCESS_DEFAULT’.

Para mapear a memória anônima, -1 deve ser passado como o fileno junto
com o comprimento.

 -- Classe: mmap.mmap (fileno, length, tagname=None,
          access=ACCESS_DEFAULT, offset=0)

     '(Versão Windows)' Mapeia 'length' bytes do arquivo especificado
     pelo identificador de arquivo 'fileno' e cria um objeto mmap.  Se
     'length' for maior que o tamanho atual do arquivo, o arquivo será
     estendido para conter 'length' bytes.  Se 'length' for ‘0’, o
     tamanho máximo do mapa será o tamanho atual do arquivo, exceto que,
     se o arquivo estiver vazio, o Windows levantará uma exceção (você
     não poderá criar um mapeamento vazio no Windows).

     'tagname', se especificado e não ‘None’, é uma string que fornece
     um nome de tag para o mapeamento.  O Windows permite que você tenha
     muitos mapeamentos diferentes no mesmo arquivo.  Se você
     especificar o nome de uma marca existente, essa marca será aberta;
     caso contrário, uma nova marca com esse nome será criada.  Se este
     parâmetro for omitido ou ‘None’, o mapeamento será criado sem um
     nome.  Evitar o uso do parâmetro 'tagname' ajudará a manter seu
     código portátil entre o Unix e o Windows.

     'offset' pode ser especificado como um deslocamento inteiro não
     negativo.  As referências mmap serão relativas ao deslocamento do
     início do arquivo.  'offset' tem como padrão 0.  'offset' deve ser
     um múltiplo de ‘ALLOCATIONGRANULARITY’.

     Levanta um *note evento de auditoria: 19fa. ‘mmap.__new__’ com os
     argumentos ‘fileno’, ‘length’, ‘access’, ‘offset’.

 -- Classe: mmap.mmap (fileno, length, flags=MAP_SHARED, prot=PROT_WRITE
          | PROT_READ, access=ACCESS_DEFAULT, offset=0, *, trackfd=True)

     '(Versão Unix)' Mapeia 'length' bytes do arquivo especificado pelo
     descritor de arquivo 'fileno' e retorna um objeto mmap.  Se
     'length' for ‘0’, o comprimento máximo do mapa será o tamanho atual
     do arquivo quando *note mmap: 20b. for chamado.

     'flags' especifica a natureza do mapeamento.  *note MAP_PRIVATE:
     3733. cria um mapeamento privado de cópia na gravação, de modo que
     alterações no conteúdo do objeto mmap serão privadas para este
     processo, e *note MAP_SHARED: 3734. cria um mapeamento
     compartilhado com todos os outros processos que mapeiam as mesmas
     áreas do arquivo.  O valor padrão é *note MAP_SHARED: 3734.  Alguns
     sistemas têm sinalizadores adicionais possíveis, com a lista
     completa especificada em *note constantes MAP_*: 3735.

     'prot', se especificado, fornece a proteção de memória desejada; os
     dois valores mais úteis são ‘PROT_READ’ e ‘PROT_WRITE’, para
     especificar que as páginas podem ser lidas ou gravadas.  'prot' tem
     como padrão ‘PROT_READ | PROT_WRITE’.

     'access' pode ser especificado em vez de 'flags' e 'prot' como um
     parâmetro nomeado opcional.  É um erro especificar 'flags', 'prot'
     e 'access'.  Consulte a descrição de 'access' acima para obter
     informações sobre como usar este parâmetro.

     'offset' pode ser especificado como um deslocamento inteiro não
     negativo.  As referências mmap serão relativas ao deslocamento do
     início do arquivo.  'offset' tem como padrão 0.  'offset' deve ser
     um múltiplo de ‘ALLOCATIONGRANULARITY’, que é igual a ‘PAGESIZE’ em
     sistemas Unix.

     Se 'trackfd' for ‘False’, o descritor de arquivo especificado por
     'fileno' não será duplicado e o objeto ‘mmap’ resultante não será
     associado ao arquivo subjacente do mapa.  Isso significa que os
     métodos *note size(): 3736. e *note resize(): 3737. falharão.  Este
     modo é útil para limitar o número de descritores de arquivo
     abertos.

     Para garantir a validade do mapeamento de memória criado, o arquivo
     especificado pelo descritor 'fileno' é sincronizado internamente de
     forma automática com o armazenamento de suporte físico no macOS.

     Alterado na versão 3.13: The 'trackfd' parameter was added.

     This example shows a simple way of using *note mmap: 20b.:

          import mmap

          # write a simple example file
          with open("hello.txt", "wb") as f:
              f.write(b"Hello Python!\n")

          with open("hello.txt", "r+b") as f:
              # memory-map the file, size 0 means whole file
              mm = mmap.mmap(f.fileno(), 0)
              # read content via standard file methods
              print(mm.readline())  # prints b"Hello Python!\n"
              # read content via slice notation
              print(mm[:5])  # prints b"Hello"
              # update content using slice notation;
              # note that new content must have same size
              mm[6:] = b" world!\n"
              # ... and read again using standard file methods
              mm.seek(0)
              print(mm.readline())  # prints b"Hello  world!\n"
              # close the map
              mm.close()

     *note mmap: 20b. can also be used as a context manager in a *note
     with: 5d2. statement:

          import mmap

          with mmap.mmap(-1, 13) as mm:
              mm.write(b"Hello world!")

     Adicionado na versão 3.2: Suporte a gerenciador de contexto.

     The next example demonstrates how to create an anonymous map and
     exchange data between the parent and child processes:

          import mmap
          import os

          mm = mmap.mmap(-1, 13)
          mm.write(b"Hello world!")

          pid = os.fork()

          if pid == 0:  # In a child process
              mm.seek(0)
              print(mm.readline())

              mm.close()

     Levanta um *note evento de auditoria: 19fa. ‘mmap.__new__’ com os
     argumentos ‘fileno’, ‘length’, ‘access’, ‘offset’.

     Memory-mapped file objects support the following methods:

      -- Método: close ()

          Closes the mmap.  Subsequent calls to other methods of the
          object will result in a ValueError exception being raised.
          This will not close the open file.

      -- Atributo: closed

          ‘True’ if the file is closed.

          Adicionado na versão 3.2.

      -- Método: find (sub[, start[, end]])

          Returns the lowest index in the object where the subsequence
          'sub' is found, such that 'sub' is contained in the range
          ['start', 'end'].  Optional arguments 'start' and 'end' are
          interpreted as in slice notation.  Returns ‘-1’ on failure.

          Alterado na versão 3.5: Writable *note bytes-like object: d4f.
          is now accepted.

      -- Método: flush ()

      -- Método: flush (offset, size, /)

          Flushes changes made to the in-memory copy of a file back to
          disk.  Without use of this call there is no guarantee that
          changes are written back before the object is destroyed.  If
          'offset' and 'size' are specified, only changes to the given
          range of bytes will be flushed to disk; otherwise, the whole
          extent of the mapping is flushed.  'offset' must be a multiple
          of the ‘PAGESIZE’ or ‘ALLOCATIONGRANULARITY’.

          ‘None’ is returned to indicate success.  An exception is
          raised when the call failed.

          Alterado na versão 3.8: Previously, a nonzero value was
          returned on success; zero was returned on error under Windows.
          A zero value was returned on success; an exception was raised
          on error under Unix.

      -- Método: madvise (option[, start[, length]])

          Send advice 'option' to the kernel about the memory region
          beginning at 'start' and extending 'length' bytes.  'option'
          must be one of the *note MADV_* constants: 373b. available on
          the system.  If 'start' and 'length' are omitted, the entire
          mapping is spanned.  On some systems (including Linux),
          'start' must be a multiple of the ‘PAGESIZE’.

          Availability: Systems with the ‘madvise()’ system call.

          Adicionado na versão 3.8.

      -- Método: move (dest, src, count)

          Copy the 'count' bytes starting at offset 'src' to the
          destination index 'dest'.  If the mmap was created with
          ‘ACCESS_READ’, then calls to move will raise a *note
          TypeError: 2c3. exception.

      -- Método: read ([n])

          Return a *note bytes: 1c2. containing up to 'n' bytes starting
          from the current file position.  If the argument is omitted,
          ‘None’ or negative, return all bytes from the current file
          position to the end of the mapping.  The file position is
          updated to point after the bytes that were returned.

          Alterado na versão 3.3: Argument can be omitted or ‘None’.

      -- Método: read_byte ()

          Returns a byte at the current file position as an integer, and
          advances the file position by 1.

      -- Método: readline ()

          Returns a single line, starting at the current file position
          and up to the next newline.  The file position is updated to
          point after the bytes that were returned.

      -- Método: resize (newsize)

          Resizes the map and the underlying file, if any.

          Resizing a map created with 'access' of ‘ACCESS_READ’ or
          ‘ACCESS_COPY’, will raise a *note TypeError: 2c3. exception.
          Resizing a map created with 'trackfd' set to ‘False’, will
          raise a *note ValueError: 202. exception.

          'On Windows': Resizing the map will raise an *note OSError:
          417. if there are other maps against the same named file.
          Resizing an anonymous map (ie against the pagefile) will
          silently create a new map with the original data copied over
          up to the length of the new size.

          Alterado na versão 3.11: Correctly fails if attempting to
          resize when another map is held Allows resize against an
          anonymous map on Windows

      -- Método: rfind (sub[, start[, end]])

          Returns the highest index in the object where the subsequence
          'sub' is found, such that 'sub' is contained in the range
          ['start', 'end'].  Optional arguments 'start' and 'end' are
          interpreted as in slice notation.  Returns ‘-1’ on failure.

          Alterado na versão 3.5: Writable *note bytes-like object: d4f.
          is now accepted.

      -- Método: seek (pos[, whence])

          Set the file’s current position.  'whence' argument is
          optional and defaults to ‘os.SEEK_SET’ or ‘0’ (absolute file
          positioning); other values are ‘os.SEEK_CUR’ or ‘1’ (seek
          relative to the current position) and ‘os.SEEK_END’ or ‘2’
          (seek relative to the file’s end).

          Alterado na versão 3.13: Return the new absolute position
          instead of ‘None’.

      -- Método: seekable ()

          Return whether the file supports seeking, and the return value
          is always ‘True’.

          Adicionado na versão 3.13.

      -- Método: size ()

          Return the length of the file, which can be larger than the
          size of the memory-mapped area.

      -- Método: tell ()

          Returns the current position of the file pointer.

      -- Método: write (bytes)

          Write the bytes in 'bytes' into memory at the current position
          of the file pointer and return the number of bytes written
          (never less than ‘len(bytes)’, since if the write fails, a
          *note ValueError: 202. will be raised).  The file position is
          updated to point after the bytes that were written.  If the
          mmap was created with ‘ACCESS_READ’, then writing to it will
          raise a *note TypeError: 2c3. exception.

          Alterado na versão 3.5: Writable *note bytes-like object: d4f.
          is now accepted.

          Alterado na versão 3.6: The number of bytes written is now
          returned.

      -- Método: write_byte (byte)

          Write the integer 'byte' into memory at the current position
          of the file pointer; the file position is advanced by ‘1’.  If
          the mmap was created with ‘ACCESS_READ’, then writing to it
          will raise a *note TypeError: 2c3. exception.

* Menu:

* Constantes MADV_*::
* Constantes MAP_*::


File: python.info,  Node: Constantes MADV_*,  Next: Constantes MAP_*,  Up: mmap — Suporte a arquivos mapeados na memória

5.19.7.1 Constantes MADV_*
..........................

 -- Dado: mmap.MADV_NORMAL
 -- Dado: mmap.MADV_RANDOM
 -- Dado: mmap.MADV_SEQUENTIAL
 -- Dado: mmap.MADV_WILLNEED
 -- Dado: mmap.MADV_DONTNEED
 -- Dado: mmap.MADV_REMOVE
 -- Dado: mmap.MADV_DONTFORK
 -- Dado: mmap.MADV_DOFORK
 -- Dado: mmap.MADV_HWPOISON
 -- Dado: mmap.MADV_MERGEABLE
 -- Dado: mmap.MADV_UNMERGEABLE
 -- Dado: mmap.MADV_SOFT_OFFLINE
 -- Dado: mmap.MADV_HUGEPAGE
 -- Dado: mmap.MADV_NOHUGEPAGE
 -- Dado: mmap.MADV_DONTDUMP
 -- Dado: mmap.MADV_DODUMP
 -- Dado: mmap.MADV_FREE
 -- Dado: mmap.MADV_NOSYNC
 -- Dado: mmap.MADV_AUTOSYNC
 -- Dado: mmap.MADV_NOCORE
 -- Dado: mmap.MADV_CORE
 -- Dado: mmap.MADV_PROTECT
 -- Dado: mmap.MADV_FREE_REUSABLE
 -- Dado: mmap.MADV_FREE_REUSE

     These options can be passed to *note mmap.madvise(): a10.  Not
     every option will be present on every system.

     Availability: Systems with the madvise() system call.

     Adicionado na versão 3.8.


File: python.info,  Node: Constantes MAP_*,  Prev: Constantes MADV_*,  Up: mmap — Suporte a arquivos mapeados na memória

5.19.7.2 Constantes MAP_*
.........................

 -- Dado: mmap.MAP_SHARED
 -- Dado: mmap.MAP_PRIVATE
 -- Dado: mmap.MAP_32BIT
 -- Dado: mmap.MAP_ALIGNED_SUPER
 -- Dado: mmap.MAP_ANON
 -- Dado: mmap.MAP_ANONYMOUS
 -- Dado: mmap.MAP_CONCEAL
 -- Dado: mmap.MAP_DENYWRITE
 -- Dado: mmap.MAP_EXECUTABLE
 -- Dado: mmap.MAP_HASSEMAPHORE
 -- Dado: mmap.MAP_JIT
 -- Dado: mmap.MAP_NOCACHE
 -- Dado: mmap.MAP_NOEXTEND
 -- Dado: mmap.MAP_NORESERVE
 -- Dado: mmap.MAP_POPULATE
 -- Dado: mmap.MAP_RESILIENT_CODESIGN
 -- Dado: mmap.MAP_RESILIENT_MEDIA
 -- Dado: mmap.MAP_STACK
 -- Dado: mmap.MAP_TPRO
 -- Dado: mmap.MAP_TRANSLATED_ALLOW_EXECUTE
 -- Dado: mmap.MAP_UNIX03

     These are the various flags that can be passed to *note
     mmap.mmap(): 20b.  *note MAP_ALIGNED_SUPER: 184f. is only available
     at FreeBSD and *note MAP_CONCEAL: 1850. is only available at
     OpenBSD. Note that some options might not be present on some
     systems.

     Alterado na versão 3.10: Added *note MAP_POPULATE: 1abc. constant.

     Adicionado na versão 3.11: Added *note MAP_STACK: 3760. constant.

     Adicionado na versão 3.12: Added *note MAP_ALIGNED_SUPER: 184f. and
     *note MAP_CONCEAL: 1850. constants.

     Adicionado na versão 3.13: Added *note MAP_32BIT: 1797, *note
     MAP_HASSEMAPHORE: 1792, *note MAP_JIT: 1794, *note MAP_NOCACHE:
     1793, *note MAP_NOEXTEND: 1791, *note MAP_NORESERVE: 1790, *note
     MAP_RESILIENT_CODESIGN: 1795, *note MAP_RESILIENT_MEDIA: 1796,
     *note MAP_TPRO: 179a, *note MAP_TRANSLATED_ALLOW_EXECUTE: 1798, and
     *note MAP_UNIX03: 1799. constants.


File: python.info,  Node: Manuseio de Dados na Internet,  Next: Ferramentas de Processamento de Markup Estruturado,  Prev: Comunicação em Rede e Interprocesso,  Up: A Biblioteca Padrão do Python

5.20 Manuseio de Dados na Internet
==================================

Este capítulo descreve módulos que suportam a manipulação de formatos de
dados comumente usados na Internet.

* Menu:

* email — Um e-mail e um pacote MIME manipulável::
* json — Codificador e decodificador JSON::
* mailbox — Manipule caixas de entradas em vários formatos::
* mimetypes — Mapeia nomes de arquivos para tipos MIME::
* base64 — Base16, Base32, Base64, Base85 Data Encodings: base64 — Base16 Base32 Base64 Base85 Data Encodings.
* binascii — Converte entre binário e ASCII::
* quopri — Codifica e decodifica dados MIME imprimidos entre aspas::


File: python.info,  Node: email — Um e-mail e um pacote MIME manipulável,  Next: json — Codificador e decodificador JSON,  Up: Manuseio de Dados na Internet

5.20.1 ‘email’ — Um e-mail e um pacote MIME manipulável
-------------------------------------------------------

'Código-fonte:' Lib/email/__init__.py(1)

__________________________________________________________________

O pacote *note email: 3b. é uma biblioteca para gerenciar mensagens de
e-mail.  Ela foi especificamente 'não' projetada para enviar mensagens
de e-mail para SMTP ( RFC 2821(2)), NNTP ou outros servidores; essas são
funções de módulos como *note smtplib: ca.  O pacote *note email: 3b.
tenta ser o mais compatível possível com RFC, suportando RFC 5322(3) e
RFC 6532(4), bem como os RFCs relacionados ao MIME como RFC 2045(5), RFC
2046(6), RFC 2047(7), RFC 2183(8) e RFC 2231(9).

No geral a estrutura do pacote de e-mail pode ser dividida em três
componentes principais, mais um quarto componente que controla o
comportamento dos outros componentes.

O componente central do pacote é um “modelo de objeto” que representa
mensagens de e-mail.  Uma aplicação interage com o pacote principalmente
através da interface do modelo de objeto definida no submódulo *note
message: 44.  A aplicação pode usar essa API para fazer perguntas sobre
um e-mail existente, construir um novo e-mail ou adicionar ou remover
subcomponentes de e-mail que usam a mesma interface de modelo de objeto.
Ou seja, seguindo a natureza das mensagens de e-mail e seus
subcomponentes MIME, o modelo de objeto de e-mail é uma estrutura em
árvore de objetos que fornecem a API *note EmailMessage: 27b.

Os outros dois componentes principais do pacote são *note parser: 4e. e
*note generator: 40.  O analisador sintático pega a versão serializada
de uma mensagem de e-mail (um fluxo de bytes) e a converte em uma árvore
de objetos *note EmailMessage: 27b.  O gerador pega um *note
EmailMessage: 27b. e o transforma novamente em um fluxo de bytes
serializado.  (O analisador sintático e o gerador também lidam com
fluxos de caracteres de texto, mas esse uso é desencorajado, pois é
muito fácil terminar com mensagens que não são válidas de uma maneira ou
de outra.)

O componente de controle é o módulo *note policy: 4f.  Cada *note
EmailMessage: 27b, cada *note generator: 40. e cada *note parser: 4e.
tem um objeto associado *note policy: 4f. que controla seu
comportamento.  Normalmente, uma aplicação precisa especificar a
política apenas quando uma *note EmailMessage: 27b. é criada,
instanciando diretamente uma *note EmailMessage: 27b. para criar um novo
e-mail ou analisando um fluxo de entrada usando um *note parser: 4e.
Mas a política pode ser alterada quando a mensagem é serializada usando
um *note generator: 40.  Isso permite, por exemplo, analisar uma
mensagem de e-mail genérica do disco, mas serializá-la usando as
configurações SMTP padrão ao enviá-la para um servidor de e-mail.

O pacote de e-mail faz o possível para ocultar os detalhes das várias
RFCs em vigor da aplicação.  Conceitualmente, a aplicação deve tratar a
mensagem de e-mail como uma árvore estruturada de texto unicode e anexos
binários, sem ter que se preocupar com a forma como eles são
representados quando serializados.  Na prática, no entanto, muitas vezes
é necessário estar ciente de pelo menos algumas das regras que regem as
mensagens MIME e sua estrutura, especificamente os nomes e a natureza
dos “tipos de conteúdo” MIME e como eles identificam documentos com
várias partes.  Na maioria das vezes, esse conhecimento só deve ser
necessário para aplicações mais complexos e, mesmo assim, deve ser
apenas a estrutura de alto nível em questão, e não os detalhes de como
essas estruturas são representadas.  Como os tipos de conteúdo MIME são
amplamente utilizados no software moderno da Internet (não apenas no
e-mail), este será um conceito familiar para muitos programadores.

As seções a seguir descrevem a funcionalidade do pacote *note email: 3b.
Começamos com o modelo de objeto *note message: 44, que é a interface
principal que uma aplicação usará, e seguimos com os componentes de
*note parser: 4e. e *note generator: 40.  Em seguida, abordamos os
controles *note policy: 4f, que concluem o tratamento dos principais
componentes da biblioteca.

As próximas três seções cobrem as exceções que o pacote pode apresentar
e os defeitos (não conformidade com as RFCs) que o *note parser: 4e.
pode detectar.  A seguir, abordamos os subcomponentes *note
headerregistry: 42. e os subcomponentes *note contentmanager: 3d, que
fornecem ferramentas para manipulação mais detalhada de cabeçalhos e
cargas úteis, respectivamente.  Ambos os componentes contêm recursos
relevantes para consumir e produzir mensagens não triviais, mas também
documentam suas APIs de extensibilidade, que serão de interesse para
aplicações avançadas.

A seguir, é apresentado um conjunto de exemplos de uso das partes
fundamentais das APIs abordadas nas seções anteriores.

O exposto acima representa a API moderna (compatível com unicode) do
pacote de e-mail.  As seções restantes, começando com a classe *note
Message: 27c, cobrem a API legada *note compat32: cb8. que lida muito
mais diretamente com os detalhes de como as mensagens de e-mail são
representadas.  A API *note compat32: cb8. 'não' oculta os detalhes dos
RFCs da aplicação, mas para aplicações que precisam operar nesse nível,
eles podem ser ferramentas úteis.  Esta documentação também é relevante
para aplicações que ainda estão usando a API *note compat32: cb8. por
motivos de compatibilidade com versões anteriores.

Alterado na versão 3.6: Documentos reorganizados e reescritos para
promover a nova API *note EmailMessage: 27b./*note EmailPolicy: 10f6.

Conteúdos da documentação do pacote *note email: 3b.:

* Menu:

* email.message; Representing an email message: email message Representing an email message.
* email.parser; Parsing email messages: email parser Parsing email messages.
* email.generator; Geração de documentos MIME: email generator Geração de documentos MIME.
* email.policy; Policy Objects: email policy Policy Objects.
* email.errors; Classes de Exceção e Defeito.: email errors Classes de Exceção e Defeito.
* email.headerregistry; Custom Header Objects: email headerregistry Custom Header Objects.
* email.contentmanager; Gerenciando conteúdo MIME: email contentmanager Gerenciando conteúdo MIME.
* email; Exemplos: email Exemplos.
* email.message.Message; Representing an email message using the compat32 API: email message Message Representing an email message using the compat32 API.
* email.mimeemail.mime; Criando e-mail e objetos MIME do zero: email mimeemail mime Criando e-mail e objetos MIME do zero.
* email.header; Internationalized headers: email header Internationalized headers.
* email.charset; Representando conjuntos de caracteres: email charset Representando conjuntos de caracteres.
* email.encoders; Codificadores: email encoders Codificadores.
* email.utils; Utilitários diversos: email utils Utilitários diversos.
* email.iterators; Iteradores: email iterators Iteradores.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/email/__init__.py

   (2) https://datatracker.ietf.org/doc/html/rfc2821.html

   (3) https://datatracker.ietf.org/doc/html/rfc5322.html

   (4) https://datatracker.ietf.org/doc/html/rfc6532.html

   (5) https://datatracker.ietf.org/doc/html/rfc2045.html

   (6) https://datatracker.ietf.org/doc/html/rfc2046.html

   (7) https://datatracker.ietf.org/doc/html/rfc2047.html

   (8) https://datatracker.ietf.org/doc/html/rfc2183.html

   (9) https://datatracker.ietf.org/doc/html/rfc2231.html


File: python.info,  Node: email message Representing an email message,  Next: email parser Parsing email messages,  Up: email — Um e-mail e um pacote MIME manipulável

5.20.1.1 ‘email.message’: Representing an email message
.......................................................

'Código-fonte:' Lib/email/message.py(1)

__________________________________________________________________

Adicionado na versão 3.6: (2)

The central class in the *note email: 3b. package is the *note
EmailMessage: 27b. class, imported from the *note email.message: 44.
module.  It is the base class for the *note email: 3b. object model.
*note EmailMessage: 27b. provides the core functionality for setting and
querying header fields, for accessing message bodies, and for creating
or modifying structured messages.

An email message consists of 'headers' and a 'payload' (which is also
referred to as the 'content').  Headers are RFC 5322(3) or RFC 6532(4)
style field names and values, where the field name and value are
separated by a colon.  The colon is not part of either the field name or
the field value.  The payload may be a simple text message, or a binary
object, or a structured sequence of sub-messages each with their own set
of headers and their own payload.  The latter type of payload is
indicated by the message having a MIME type such as ‘multipart/*’ or
‘message/rfc822’.

The conceptual model provided by an *note EmailMessage: 27b. object is
that of an ordered dictionary of headers coupled with a 'payload' that
represents the RFC 5322(5) body of the message, which might be a list of
sub-‘EmailMessage’ objects.  In addition to the normal dictionary
methods for accessing the header names and values, there are methods for
accessing specialized information from the headers (for example the MIME
content type), for operating on the payload, for generating a serialized
version of the message, and for recursively walking over the object
tree.

The *note EmailMessage: 27b. dictionary-like interface is indexed by the
header names, which must be ASCII values.  The values of the dictionary
are strings with some extra methods.  Headers are stored and returned in
case-preserving form, but field names are matched case-insensitively.
The keys are ordered, but unlike a real dict, there can be duplicates.
Additional methods are provided for working with headers that have
duplicate keys.

The 'payload' is either a string or bytes object, in the case of simple
message objects, or a list of *note EmailMessage: 27b. objects, for MIME
container documents such as ‘multipart/*’ and ‘message/rfc822’ message
objects.

 -- Classe: email.message.EmailMessage (policy=default)

     If 'policy' is specified use the rules it specifies to update and
     serialize the representation of the message.  If 'policy' is not
     set, use the *note default: 15ad. policy, which follows the rules
     of the email RFCs except for line endings (instead of the RFC
     mandated ‘\r\n’, it uses the Python standard ‘\n’ line endings).
     For more information see the *note policy: 4f. documentation.  (6)

      -- Método: as_string (unixfrom=False, maxheaderlen=None,
               policy=None)

          Return the entire message flattened as a string.  When
          optional 'unixfrom' is true, the envelope header is included
          in the returned string.  'unixfrom' defaults to ‘False’.  For
          backward compatibility with the base *note Message: 27c. class
          'maxheaderlen' is accepted, but defaults to ‘None’, which
          means that by default the line length is controlled by the
          *note max_line_length: 376b. of the policy.  The 'policy'
          argument may be used to override the default policy obtained
          from the message instance.  This can be used to control some
          of the formatting produced by the method, since the specified
          'policy' will be passed to the *note Generator: 120e.

          Flattening the message may trigger changes to the *note
          EmailMessage: 27b. if defaults need to be filled in to
          complete the transformation to a string (for example, MIME
          boundaries may be generated or modified).

          Note that this method is provided as a convenience and may not
          be the most useful way to serialize messages in your
          application, especially if you are dealing with multiple
          messages.  See *note email.generator.Generator: 120e. for a
          more flexible API for serializing messages.  Note also that
          this method is restricted to producing messages serialized as
          “7 bit clean” when *note utf8: e24. is ‘False’, which is the
          default.

          Alterado na versão 3.6: the default behavior when
          'maxheaderlen' is not specified was changed from defaulting to
          0 to defaulting to the value of 'max_line_length' from the
          policy.

      -- Método: __str__ ()

          Equivalent to
          ‘as_string(policy=self.policy.clone(utf8=True))’.  Allows
          ‘str(msg)’ to produce a string containing the serialized
          message in a readable format.

          Alterado na versão 3.4: the method was changed to use
          ‘utf8=True’, thus producing an RFC 6531(7)-like message
          representation, instead of being a direct alias for *note
          as_string(): 376a.

      -- Método: as_bytes (unixfrom=False, policy=None)

          Return the entire message flattened as a bytes object.  When
          optional 'unixfrom' is true, the envelope header is included
          in the returned string.  'unixfrom' defaults to ‘False’.  The
          'policy' argument may be used to override the default policy
          obtained from the message instance.  This can be used to
          control some of the formatting produced by the method, since
          the specified 'policy' will be passed to the *note
          BytesGenerator: 120f.

          Flattening the message may trigger changes to the *note
          EmailMessage: 27b. if defaults need to be filled in to
          complete the transformation to a string (for example, MIME
          boundaries may be generated or modified).

          Note that this method is provided as a convenience and may not
          be the most useful way to serialize messages in your
          application, especially if you are dealing with multiple
          messages.  See *note email.generator.BytesGenerator: 120f. for
          a more flexible API for serializing messages.

      -- Método: __bytes__ ()

          Equivalent to *note as_bytes(): 376d.  Allows ‘bytes(msg)’ to
          produce a bytes object containing the serialized message.

      -- Método: is_multipart ()

          Return ‘True’ if the message’s payload is a list of sub-*note
          EmailMessage: 27b. objects, otherwise return ‘False’.  When
          *note is_multipart(): 376f. returns ‘False’, the payload
          should be a string object (which might be a CTE encoded binary
          payload).  Note that *note is_multipart(): 376f. returning
          ‘True’ does not necessarily mean that
          “msg.get_content_maintype() == ‘multipart’” will return the
          ‘True’.  For example, ‘is_multipart’ will return ‘True’ when
          the *note EmailMessage: 27b. is of type ‘message/rfc822’.

      -- Método: set_unixfrom (unixfrom)

          Set the message’s envelope header to 'unixfrom', which should
          be a string.  (See *note mboxMessage: 3771. for a brief
          description of this header.)

      -- Método: get_unixfrom ()

          Return the message’s envelope header.  Defaults to ‘None’ if
          the envelope header was never set.

     The following methods implement the mapping-like interface for
     accessing the message’s headers.  Note that there are some semantic
     differences between these methods and a normal mapping (i.e.
     dictionary) interface.  For example, in a dictionary there are no
     duplicate keys, but here there may be duplicate message headers.
     Also, in dictionaries there is no guaranteed order to the keys
     returned by *note keys(): 3773, but in an *note EmailMessage: 27b.
     object, headers are always returned in the order they appeared in
     the original message, or in which they were added to the message
     later.  Any header deleted and then re-added is always appended to
     the end of the header list.

     These semantic differences are intentional and are biased toward
     convenience in the most common use cases.

     Note that in all cases, any envelope header present in the message
     is not included in the mapping interface.

      -- Método: __len__ ()

          Return the total number of headers, including duplicates.

      -- Método: __contains__ (name)

          Return ‘True’ if the message object has a field named 'name'.
          Matching is done without regard to case and 'name' does not
          include the trailing colon.  Used for the ‘in’ operator.  For
          example:

               if 'message-id' in myMessage:
                  print('Message-ID:', myMessage['message-id'])

      -- Método: __getitem__ (name)

          Return the value of the named header field.  'name' does not
          include the colon field separator.  If the header is missing,
          ‘None’ is returned; a *note KeyError: 344. is never raised.

          Note that if the named field appears more than once in the
          message’s headers, exactly which of those field values will be
          returned is undefined.  Use the *note get_all(): 3777. method
          to get the values of all the extant headers named 'name'.

          Using the standard (non-‘compat32’) policies, the returned
          value is an instance of a subclass of *note
          email.headerregistry.BaseHeader: 3778.

      -- Método: __setitem__ (name, val)

          Add a header to the message with field name 'name' and value
          'val'.  The field is appended to the end of the message’s
          existing headers.

          Note that this does 'not' overwrite or delete any existing
          header with the same name.  If you want to ensure that the new
          header is the only one present in the message with field name
          'name', delete the field first, e.g.:

               del msg['subject']
               msg['subject'] = 'Python roolz!'

          If the *note policy: 4f. defines certain headers to be unique
          (as the standard policies do), this method may raise a *note
          ValueError: 202. when an attempt is made to assign a value to
          such a header when one already exists.  This behavior is
          intentional for consistency’s sake, but do not depend on it as
          we may choose to make such assignments do an automatic
          deletion of the existing header in the future.

      -- Método: __delitem__ (name)

          Delete all occurrences of the field with name 'name' from the
          message’s headers.  No exception is raised if the named field
          isn’t present in the headers.

      -- Método: keys ()

          Return a list of all the message’s header field names.

      -- Método: values ()

          Return a list of all the message’s field values.

      -- Método: items ()

          Return a list of 2-tuples containing all the message’s field
          headers and values.

      -- Método: get (name, failobj=None)

          Return the value of the named header field.  This is identical
          to *note __getitem__(): 283. except that optional 'failobj' is
          returned if the named header is missing ('failobj' defaults to
          ‘None’).

     Here are some additional useful header related methods:

      -- Método: get_all (name, failobj=None)

          Return a list of all the values for the field named 'name'.
          If there are no such named headers in the message, 'failobj'
          is returned (defaults to ‘None’).

      -- Método: add_header (_name, _value, **_params)

          Extended header setting.  This method is similar to *note
          __setitem__(): 3779. except that additional header parameters
          can be provided as keyword arguments.  '_name' is the header
          field to add and '_value' is the 'primary' value for the
          header.

          For each item in the keyword argument dictionary '_params',
          the key is taken as the parameter name, with underscores
          converted to dashes (since dashes are illegal in Python
          identifiers).  Normally, the parameter will be added as
          ‘key="value"’ unless the value is ‘None’, in which case only
          the key will be added.

          If the value contains non-ASCII characters, the charset and
          language may be explicitly controlled by specifying the value
          as a three tuple in the format ‘(CHARSET, LANGUAGE, VALUE)’,
          where ‘CHARSET’ is a string naming the charset to be used to
          encode the value, ‘LANGUAGE’ can usually be set to ‘None’ or
          the empty string (see RFC 2231(8) for other possibilities),
          and ‘VALUE’ is the string value containing non-ASCII code
          points.  If a three tuple is not passed and the value contains
          non-ASCII characters, it is automatically encoded in RFC
          2231(9) format using a ‘CHARSET’ of ‘utf-8’ and a ‘LANGUAGE’
          of ‘None’.

          Aqui está um exemplo:

               msg.add_header('Content-Disposition', 'attachment', filename='bud.gif')

          This will add a header that looks like

               Content-Disposition: attachment; filename="bud.gif"

          An example of the extended interface with non-ASCII
          characters:

               msg.add_header('Content-Disposition', 'attachment',
                              filename=('iso-8859-1', '', 'Fußballer.ppt'))

      -- Método: replace_header (_name, _value)

          Replace a header.  Replace the first header found in the
          message that matches '_name', retaining header order and field
          name case of the original header.  If no matching header is
          found, raise a *note KeyError: 344.

      -- Método: get_content_type ()

          Return the message’s content type, coerced to lower case of
          the form ‘maintype/subtype’.  If there is no ‘Content-Type’
          header in the message return the value returned by *note
          get_default_type(): 3781.  If the ‘Content-Type’ header is
          invalid, return ‘text/plain’.

          (According to RFC 2045(10), messages always have a default
          type, *note get_content_type(): 3780. will always return a
          value.  RFC 2045(11) defines a message’s default type to be
          ‘text/plain’ unless it appears inside a ‘multipart/digest’
          container, in which case it would be ‘message/rfc822’.  If the
          ‘Content-Type’ header has an invalid type specification, RFC
          2045(12) mandates that the default type be ‘text/plain’.)

      -- Método: get_content_maintype ()

          Return the message’s main content type.  This is the
          ‘maintype’ part of the string returned by *note
          get_content_type(): 3780.

      -- Método: get_content_subtype ()

          Return the message’s sub-content type.  This is the ‘subtype’
          part of the string returned by *note get_content_type(): 3780.

      -- Método: get_default_type ()

          Return the default content type.  Most messages have a default
          content type of ‘text/plain’, except for messages that are
          subparts of ‘multipart/digest’ containers.  Such subparts have
          a default content type of ‘message/rfc822’.

      -- Método: set_default_type (ctype)

          Set the default content type.  'ctype' should either be
          ‘text/plain’ or ‘message/rfc822’, although this is not
          enforced.  The default content type is not stored in the
          ‘Content-Type’ header, so it only affects the return value of
          the ‘get_content_type’ methods when no ‘Content-Type’ header
          is present in the message.

      -- Método: set_param (param, value, header='Content-Type',
               requote=True, charset=None, language='', replace=False)

          Set a parameter in the ‘Content-Type’ header.  If the
          parameter already exists in the header, replace its value with
          'value'.  When 'header' is ‘Content-Type’ (the default) and
          the header does not yet exist in the message, add it, set its
          value to ‘text/plain’, and append the new parameter value.
          Optional 'header' specifies an alternative header to
          ‘Content-Type’.

          If the value contains non-ASCII characters, the charset and
          language may be explicitly specified using the optional
          'charset' and 'language' parameters.  Optional 'language'
          specifies the RFC 2231(13) language, defaulting to the empty
          string.  Both 'charset' and 'language' should be strings.  The
          default is to use the ‘utf8’ 'charset' and ‘None’ for the
          'language'.

          If 'replace' is ‘False’ (the default) the header is moved to
          the end of the list of headers.  If 'replace' is ‘True’, the
          header will be updated in place.

          Uso do parâmetro 'requote' com objetos *note EmailMessage:
          27b. está descontinuado.

          Note that existing parameter values of headers may be accessed
          through the *note params: 3786. attribute of the header value
          (for example, ‘msg['Content-Type'].params['charset']’).

          Alterado na versão 3.4: Palavra-chave ‘replace’ foi
          adicionada.

      -- Método: del_param (param, header='content-type', requote=True)

          Remove the given parameter completely from the ‘Content-Type’
          header.  The header will be re-written in place without the
          parameter or its value.  Optional 'header' specifies an
          alternative to ‘Content-Type’.

          Uso do parâmetro 'requote' com objetos *note EmailMessage:
          27b. está descontinuado.

      -- Método: get_filename (failobj=None)

          Return the value of the ‘filename’ parameter of the
          ‘Content-Disposition’ header of the message.  If the header
          does not have a ‘filename’ parameter, this method falls back
          to looking for the ‘name’ parameter on the ‘Content-Type’
          header.  If neither is found, or the header is missing, then
          'failobj' is returned.  The returned string will always be
          unquoted as per *note email.utils.unquote(): 3789.

      -- Método: get_boundary (failobj=None)

          Return the value of the ‘boundary’ parameter of the
          ‘Content-Type’ header of the message, or 'failobj' if either
          the header is missing, or has no ‘boundary’ parameter.  The
          returned string will always be unquoted as per *note
          email.utils.unquote(): 3789.

      -- Método: set_boundary (boundary)

          Set the ‘boundary’ parameter of the ‘Content-Type’ header to
          'boundary'.  *note set_boundary(): 378b. will always quote
          'boundary' if necessary.  A *note HeaderParseError: 378c. is
          raised if the message object has no ‘Content-Type’ header.

          Note that using this method is subtly different from deleting
          the old ‘Content-Type’ header and adding a new one with the
          new boundary via *note add_header(): 377e, because *note
          set_boundary(): 378b. preserves the order of the
          ‘Content-Type’ header in the list of headers.

      -- Método: get_content_charset (failobj=None)

          Return the ‘charset’ parameter of the ‘Content-Type’ header,
          coerced to lower case.  If there is no ‘Content-Type’ header,
          or if that header has no ‘charset’ parameter, 'failobj' is
          returned.

      -- Método: get_charsets (failobj=None)

          Return a list containing the character set names in the
          message.  If the message is a ‘multipart’, then the list will
          contain one element for each subpart in the payload,
          otherwise, it will be a list of length 1.

          Each item in the list will be a string which is the value of
          the ‘charset’ parameter in the ‘Content-Type’ header for the
          represented subpart.  If the subpart has no ‘Content-Type’
          header, no ‘charset’ parameter, or is not of the ‘text’ main
          MIME type, then that item in the returned list will be
          'failobj'.

      -- Método: is_attachment ()

          Return ‘True’ if there is a ‘Content-Disposition’ header and
          its (case insensitive) value is ‘attachment’, ‘False’
          otherwise.

          Alterado na versão 3.4.2: is_attachment is now a method
          instead of a property, for consistency with *note
          is_multipart(): 3790.

      -- Método: get_content_disposition ()

          Return the lowercased value (without parameters) of the
          message’s ‘Content-Disposition’ header if it has one, or
          ‘None’.  The possible values for this method are 'inline',
          'attachment' or ‘None’ if the message follows RFC 2183(14).

          Adicionado na versão 3.5.

     The following methods relate to interrogating and manipulating the
     content (payload) of the message.

      -- Método: walk ()

          The *note walk(): 3792. method is an all-purpose generator
          which can be used to iterate over all the parts and subparts
          of a message object tree, in depth-first traversal order.  You
          will typically use *note walk(): 3792. as the iterator in a
          ‘for’ loop; each iteration returns the next subpart.

          Here’s an example that prints the MIME type of every part of a
          multipart message structure:

               >>> for part in msg.walk():
               ...     print(part.get_content_type())
               multipart/report
               text/plain
               message/delivery-status
               text/plain
               text/plain
               message/rfc822
               text/plain

          ‘walk’ iterates over the subparts of any part where *note
          is_multipart(): 376f. returns ‘True’, even though
          ‘msg.get_content_maintype() == 'multipart'’ may return
          ‘False’.  We can see this in our example by making use of the
          ‘_structure’ debug helper function:

               >>> from email.iterators import _structure
               >>> for part in msg.walk():
               ...     print(part.get_content_maintype() == 'multipart',
               ...           part.is_multipart())
               True True
               False False
               False True
               False False
               False False
               False True
               False False
               >>> _structure(msg)
               multipart/report
                   text/plain
                   message/delivery-status
                       text/plain
                       text/plain
                   message/rfc822
                       text/plain

          Here the ‘message’ parts are not ‘multiparts’, but they do
          contain subparts.  ‘is_multipart()’ returns ‘True’ and ‘walk’
          descends into the subparts.

      -- Método: get_body (preferencelist=('related', 'html', 'plain'))

          Return the MIME part that is the best candidate to be the
          “body” of the message.

          'preferencelist' must be a sequence of strings from the set
          ‘related’, ‘html’, and ‘plain’, and indicates the order of
          preference for the content type of the part returned.

          Start looking for candidate matches with the object on which
          the ‘get_body’ method is called.

          If ‘related’ is not included in 'preferencelist', consider the
          root part (or subpart of the root part) of any related
          encountered as a candidate if the (sub-)part matches a
          preference.

          When encountering a ‘multipart/related’, check the ‘start’
          parameter and if a part with a matching ‘Content-ID’ is found,
          consider only it when looking for candidate matches.
          Otherwise consider only the first (default root) part of the
          ‘multipart/related’.

          If a part has a ‘Content-Disposition’ header, only consider
          the part a candidate match if the value of the header is
          ‘inline’.

          If none of the candidates matches any of the preferences in
          'preferencelist', return ‘None’.

          Notes: (1) For most applications the only 'preferencelist'
          combinations that really make sense are ‘('plain',)’,
          ‘('html', 'plain')’, and the default ‘('related', 'html',
          'plain')’.  (2) Because matching starts with the object on
          which ‘get_body’ is called, calling ‘get_body’ on a
          ‘multipart/related’ will return the object itself unless
          'preferencelist' has a non-default value.  (3) Messages (or
          message parts) that do not specify a ‘Content-Type’ or whose
          ‘Content-Type’ header is invalid will be treated as if they
          are of type ‘text/plain’, which may occasionally cause
          ‘get_body’ to return unexpected results.

      -- Método: iter_attachments ()

          Return an iterator over all of the immediate sub-parts of the
          message that are not candidate “body” parts.  That is, skip
          the first occurrence of each of ‘text/plain’, ‘text/html’,
          ‘multipart/related’, or ‘multipart/alternative’ (unless they
          are explicitly marked as attachments via ‘Content-Disposition:
          attachment’), and return all remaining parts.  When applied
          directly to a ‘multipart/related’, return an iterator over the
          all the related parts except the root part (ie: the part
          pointed to by the ‘start’ parameter, or the first part if
          there is no ‘start’ parameter or the ‘start’ parameter doesn’t
          match the ‘Content-ID’ of any of the parts).  When applied
          directly to a ‘multipart/alternative’ or a non-‘multipart’,
          return an empty iterator.

      -- Método: iter_parts ()

          Return an iterator over all of the immediate sub-parts of the
          message, which will be empty for a non-‘multipart’.  (See also
          *note walk(): 3792.)

      -- Método: get_content (*args, content_manager=None, **kw)

          Call the *note get_content(): 3797. method of the
          'content_manager', passing self as the message object, and
          passing along any other arguments or keywords as additional
          arguments.  If 'content_manager' is not specified, use the
          ‘content_manager’ specified by the current *note policy: 4f.

      -- Método: set_content (*args, content_manager=None, **kw)

          Call the *note set_content(): 3798. method of the
          'content_manager', passing self as the message object, and
          passing along any other arguments or keywords as additional
          arguments.  If 'content_manager' is not specified, use the
          ‘content_manager’ specified by the current *note policy: 4f.

      -- Método: make_related (boundary=None)

          Convert a non-‘multipart’ message into a ‘multipart/related’
          message, moving any existing ‘Content-’ headers and payload
          into a (new) first part of the ‘multipart’.  If 'boundary' is
          specified, use it as the boundary string in the multipart,
          otherwise leave the boundary to be automatically created when
          it is needed (for example, when the message is serialized).

      -- Método: make_alternative (boundary=None)

          Convert a non-‘multipart’ or a ‘multipart/related’ into a
          ‘multipart/alternative’, moving any existing ‘Content-’
          headers and payload into a (new) first part of the
          ‘multipart’.  If 'boundary' is specified, use it as the
          boundary string in the multipart, otherwise leave the boundary
          to be automatically created when it is needed (for example,
          when the message is serialized).

      -- Método: make_mixed (boundary=None)

          Convert a non-‘multipart’, a ‘multipart/related’, or a
          ‘multipart-alternative’ into a ‘multipart/mixed’, moving any
          existing ‘Content-’ headers and payload into a (new) first
          part of the ‘multipart’.  If 'boundary' is specified, use it
          as the boundary string in the multipart, otherwise leave the
          boundary to be automatically created when it is needed (for
          example, when the message is serialized).

      -- Método: add_related (*args, content_manager=None, **kw)

          If the message is a ‘multipart/related’, create a new message
          object, pass all of the arguments to its *note set_content():
          19e8. method, and *note attach(): 379d. it to the ‘multipart’.
          If the message is a non-‘multipart’, call *note
          make_related(): 3799. and then proceed as above.  If the
          message is any other type of ‘multipart’, raise a *note
          TypeError: 2c3.  If 'content_manager' is not specified, use
          the ‘content_manager’ specified by the current *note policy:
          4f.  If the added part has no ‘Content-Disposition’ header,
          add one with the value ‘inline’.

      -- Método: add_alternative (*args, content_manager=None, **kw)

          If the message is a ‘multipart/alternative’, create a new
          message object, pass all of the arguments to its *note
          set_content(): 19e8. method, and *note attach(): 379d. it to
          the ‘multipart’.  If the message is a non-‘multipart’ or
          ‘multipart/related’, call *note make_alternative(): 379a. and
          then proceed as above.  If the message is any other type of
          ‘multipart’, raise a *note TypeError: 2c3.  If
          'content_manager' is not specified, use the ‘content_manager’
          specified by the current *note policy: 4f.

      -- Método: add_attachment (*args, content_manager=None, **kw)

          If the message is a ‘multipart/mixed’, create a new message
          object, pass all of the arguments to its *note set_content():
          19e8. method, and *note attach(): 379d. it to the ‘multipart’.
          If the message is a non-‘multipart’, ‘multipart/related’, or
          ‘multipart/alternative’, call *note make_mixed(): 379b. and
          then proceed as above.  If 'content_manager' is not specified,
          use the ‘content_manager’ specified by the current *note
          policy: 4f.  If the added part has no ‘Content-Disposition’
          header, add one with the value ‘attachment’.  This method can
          be used both for explicit attachments (‘Content-Disposition:
          attachment’) and ‘inline’ attachments (‘Content-Disposition:
          inline’), by passing appropriate options to the
          ‘content_manager’.

      -- Método: clear ()

          Remove the payload and all of the headers.

      -- Método: clear_content ()

          Remove the payload and all of the ‘!Content-’ headers, leaving
          all other headers intact and in their original order.

     *note EmailMessage: 27b. objects have the following instance
     attributes:

      -- Atributo: preamble

          The format of a MIME document allows for some text between the
          blank line following the headers, and the first multipart
          boundary string.  Normally, this text is never visible in a
          MIME-aware mail reader because it falls outside the standard
          MIME armor.  However, when viewing the raw text of the
          message, or when viewing the message in a non-MIME aware
          reader, this text can become visible.

          The 'preamble' attribute contains this leading extra-armor
          text for MIME documents.  When the *note Parser: 11dc.
          discovers some text after the headers but before the first
          boundary string, it assigns this text to the message’s
          'preamble' attribute.  When the *note Generator: 120e. is
          writing out the plain text representation of a MIME message,
          and it finds the message has a 'preamble' attribute, it will
          write this text in the area between the headers and the first
          boundary.  See *note email.parser: 4e. and *note
          email.generator: 40. for details.

          Note that if the message object has no preamble, the
          'preamble' attribute will be ‘None’.

      -- Atributo: epilogue

          The 'epilogue' attribute acts the same way as the 'preamble'
          attribute, except that it contains text that appears between
          the last boundary and the end of the message.  As with the
          *note preamble: 37a2, if there is no epilog text this
          attribute will be ‘None’.

      -- Atributo: defects

          The 'defects' attribute contains a list of all the problems
          found when parsing this message.  See *note email.errors: 3f.
          for a detailed description of the possible parsing defects.

 -- Classe: email.message.MIMEPart (policy=default)

     This class represents a subpart of a MIME message.  It is identical
     to *note EmailMessage: 27b, except that no ‘MIME-Version’ headers
     are added when *note set_content(): 19e8. is called, since
     sub-parts do not need their own ‘MIME-Version’ headers.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/email/message.py

   (2) Originally added in 3.4 as a *note provisional module: 107a.
Docs for legacy message class moved to *note email.message.Message;
Representing an email message using the compat32 API: 3769.

   (3) https://datatracker.ietf.org/doc/html/rfc5322.html

   (4) https://datatracker.ietf.org/doc/html/rfc6532.html

   (5) https://datatracker.ietf.org/doc/html/rfc5322.html

   (6) The *note EmailMessage: 27b. class requires a policy that
provides a ‘content_manager’ attribute for content management methods
like ‘set_content()’ and ‘get_content()’ to work.  The legacy *note
compat32: cb8. policy does not support these methods and should not be
used with *note EmailMessage: 27b.

   (7) https://datatracker.ietf.org/doc/html/rfc6531.html

   (8) https://datatracker.ietf.org/doc/html/rfc2231.html

   (9) https://datatracker.ietf.org/doc/html/rfc2231.html

   (10) https://datatracker.ietf.org/doc/html/rfc2045.html

   (11) https://datatracker.ietf.org/doc/html/rfc2045.html

   (12) https://datatracker.ietf.org/doc/html/rfc2045.html

   (13) https://datatracker.ietf.org/doc/html/rfc2231.html

   (14) https://datatracker.ietf.org/doc/html/rfc2183.html


File: python.info,  Node: email parser Parsing email messages,  Next: email generator Geração de documentos MIME,  Prev: email message Representing an email message,  Up: email — Um e-mail e um pacote MIME manipulável

5.20.1.2 ‘email.parser’: Parsing email messages
...............................................

'Código-fonte:' Lib/email/parser.py(1)

__________________________________________________________________

Message object structures can be created in one of two ways: they can be
created from whole cloth by creating an *note EmailMessage: 27b. object,
adding headers using the dictionary interface, and adding payload(s)
using *note set_content(): 19e8. and related methods, or they can be
created by parsing a serialized representation of the email message.

The *note email: 3b. package provides a standard parser that understands
most email document structures, including MIME documents.  You can pass
the parser a bytes, string or file object, and the parser will return to
you the root *note EmailMessage: 27b. instance of the object structure.
For simple, non-MIME messages the payload of this root object will
likely be a string containing the text of the message.  For MIME
messages, the root object will return ‘True’ from its *note
is_multipart(): 376f. method, and the subparts can be accessed via the
payload manipulation methods, such as *note get_body(): 3793, *note
iter_parts(): 3795, and *note walk(): 3792.

There are actually two parser interfaces available for use, the *note
Parser: 11dc. API and the incremental *note FeedParser: 15ac. API. The
*note Parser: 11dc. API is most useful if you have the entire text of
the message in memory, or if the entire message lives in a file on the
file system.  *note FeedParser: 15ac. is more appropriate when you are
reading the message from a stream which might block waiting for more
input (such as reading an email message from a socket).  The *note
FeedParser: 15ac. can consume and parse the message incrementally, and
only returns the root object when you close the parser.

Note that the parser can be extended in limited ways, and of course you
can implement your own parser completely from scratch.  All of the logic
that connects the *note email: 3b. package’s bundled parser and the
*note EmailMessage: 27b. class is embodied in the *note Policy: 10f2.
class, so a custom parser can create message object trees any way it
finds necessary by implementing custom versions of the appropriate
‘Policy’ methods.

* Menu:

* API do FeedParser::
* Parser API::
* Additional notes::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/email/parser.py


File: python.info,  Node: API do FeedParser,  Next: Parser API,  Up: email parser Parsing email messages

5.20.1.3 API do FeedParser
..........................

The *note BytesFeedParser: 120b, imported from the ‘email.feedparser’
module, provides an API that is conducive to incremental parsing of
email messages, such as would be necessary when reading the text of an
email message from a source that can block (such as a socket).  The
*note BytesFeedParser: 120b. can of course be used to parse an email
message fully contained in a *note bytes-like object: d4f, string, or
file, but the *note BytesParser: 120c. API may be more convenient for
such use cases.  The semantics and results of the two parser APIs are
identical.

The *note BytesFeedParser: 120b.’s API is simple; you create an
instance, feed it a bunch of bytes until there’s no more to feed it,
then close the parser to retrieve the root message object.  The *note
BytesFeedParser: 120b. is extremely accurate when parsing
standards-compliant messages, and it does a very good job of parsing
non-compliant messages, providing information about how a message was
deemed broken.  It will populate a message object’s *note defects: 37a4.
attribute with a list of any problems it found in a message.  See the
*note email.errors: 3f. module for the list of defects that it can find.

Here is the API for the *note BytesFeedParser: 120b.:

 -- Classe: email.parser.BytesFeedParser (_factory=None, *,
          policy=policy.compat32)

     Create a *note BytesFeedParser: 120b. instance.  Optional
     '_factory' is a no-argument callable; if not specified use the
     *note message_factory: cb7. from the 'policy'.  Call '_factory'
     whenever a new message object is needed.

     If 'policy' is specified use the rules it specifies to update the
     representation of the message.  If 'policy' is not set, use the
     *note compat32: 10f3. policy, which maintains backward
     compatibility with the Python 3.2 version of the email package and
     provides *note Message: 27c. as the default factory.  All other
     policies provide *note EmailMessage: 27b. as the default
     '_factory'.  For more information on what else 'policy' controls,
     see the *note policy: 4f. documentation.

     Note: 'The policy keyword should always be specified'; The default
     will change to *note email.policy.default: 15ad. in a future
     version of Python.

     Adicionado na versão 3.2.

     Alterado na versão 3.3: Adicionada o argumento nomeado 'policy'.

     Alterado na versão 3.6: '_factory' defaults to the policy
     ‘message_factory’.

      -- Método: feed (data)

          Feed the parser some more data.  'data' should be a *note
          bytes-like object: d4f. containing one or more lines.  The
          lines can be partial and the parser will stitch such partial
          lines together properly.  The lines can have any of the three
          common line endings: carriage return, newline, or carriage
          return and newline (they can even be mixed).

      -- Método: close ()

          Complete the parsing of all previously fed data and return the
          root message object.  It is undefined what happens if *note
          feed(): 37a9. is called after this method has been called.

 -- Classe: email.parser.FeedParser (_factory=None, *,
          policy=policy.compat32)

     Works like *note BytesFeedParser: 120b. except that the input to
     the *note feed(): 37a9. method must be a string.  This is of
     limited utility, since the only way for such a message to be valid
     is for it to contain only ASCII text or, if *note utf8: e24. is
     ‘True’, no binary attachments.

     Alterado na versão 3.3: Adicionada o argumento nomeado 'policy'.


File: python.info,  Node: Parser API,  Next: Additional notes,  Prev: API do FeedParser,  Up: email parser Parsing email messages

5.20.1.4 Parser API
...................

The *note BytesParser: 120c. class, imported from the *note
email.parser: 4e. module, provides an API that can be used to parse a
message when the complete contents of the message are available in a
*note bytes-like object: d4f. or file.  The *note email.parser: 4e.
module also provides *note Parser: 11dc. for parsing strings, and
header-only parsers, *note BytesHeaderParser: 10fa. and *note
HeaderParser: 10fb, which can be used if you’re only interested in the
headers of the message.  *note BytesHeaderParser: 10fa. and *note
HeaderParser: 10fb. can be much faster in these situations, since they
do not attempt to parse the message body, instead setting the payload to
the raw body.

 -- Classe: email.parser.BytesParser (_class=None, *,
          policy=policy.compat32)

     Create a *note BytesParser: 120c. instance.  The '_class' and
     'policy' arguments have the same meaning and semantics as the
     '_factory' and 'policy' arguments of *note BytesFeedParser: 120b.

     Note: 'The policy keyword should always be specified'; The default
     will change to *note email.policy.default: 15ad. in a future
     version of Python.

     Alterado na versão 3.3: Removed the 'strict' argument that was
     deprecated in 2.4.  Added the 'policy' keyword.

     Alterado na versão 3.6: '_class' defaults to the policy
     ‘message_factory’.

      -- Método: parse (fp, headersonly=False)

          Read all the data from the binary file-like object 'fp', parse
          the resulting bytes, and return the message object.  'fp' must
          support both the *note readline(): 241f. and the ‘read()’
          methods.

          The bytes contained in 'fp' must be formatted as a block of
          RFC 5322(1) (or, if *note utf8: e24. is ‘True’, RFC 6532(2))
          style headers and header continuation lines, optionally
          preceded by an envelope header.  The header block is
          terminated either by the end of the data or by a blank line.
          Following the header block is the body of the message (which
          may contain MIME-encoded subparts, including subparts with a
          ‘Content-Transfer-Encoding’ of ‘8bit’).

          Optional 'headersonly' is a flag specifying whether to stop
          parsing after reading the headers or not.  The default is
          ‘False’, meaning it parses the entire contents of the file.

      -- Método: parsebytes (bytes, headersonly=False)

          Similar to the *note parse(): 37ac. method, except it takes a
          *note bytes-like object: d4f. instead of a file-like object.
          Calling this method on a *note bytes-like object: d4f. is
          equivalent to wrapping 'bytes' in a *note BytesIO: ed3.
          instance first and calling *note parse(): 37ac.

          Optional 'headersonly' is as with the *note parse(): 37ac.
          method.

     Adicionado na versão 3.2.

 -- Classe: email.parser.BytesHeaderParser (_class=None, *,
          policy=policy.compat32)

     Exactly like *note BytesParser: 120c, except that 'headersonly'
     defaults to ‘True’.

     Adicionado na versão 3.3.

 -- Classe: email.parser.Parser (_class=None, *, policy=policy.compat32)

     This class is parallel to *note BytesParser: 120c, but handles
     string input.

     Alterado na versão 3.3: Removed the 'strict' argument.  Added the
     'policy' keyword.

     Alterado na versão 3.6: '_class' defaults to the policy
     ‘message_factory’.

      -- Método: parse (fp, headersonly=False)

          Read all the data from the text-mode file-like object 'fp',
          parse the resulting text, and return the root message object.
          'fp' must support both the *note readline(): 1e46. and the
          *note read(): 1e0c. methods on file-like objects.

          Other than the text mode requirement, this method operates
          like *note BytesParser.parse(): 37ac.

      -- Método: parsestr (text, headersonly=False)

          Similar to the *note parse(): 37ae. method, except it takes a
          string object instead of a file-like object.  Calling this
          method on a string is equivalent to wrapping 'text' in a *note
          StringIO: f59. instance first and calling *note parse(): 37ae.

          Optional 'headersonly' is as with the *note parse(): 37ae.
          method.

 -- Classe: email.parser.HeaderParser (_class=None, *,
          policy=policy.compat32)

     Exactly like *note Parser: 11dc, except that 'headersonly' defaults
     to ‘True’.

Since creating a message object structure from a string or a file object
is such a common task, four functions are provided as a convenience.
They are available in the top-level *note email: 3b. package namespace.

 -- Função: email.message_from_bytes (s, _class=None, *,
          policy=policy.compat32)

     Return a message object structure from a *note bytes-like object:
     d4f.  This is equivalent to ‘BytesParser().parsebytes(s)’.
     Optional '_class' and 'policy' are interpreted as with the *note
     BytesParser: 120c. class constructor.

     Adicionado na versão 3.2.

     Alterado na versão 3.3: Removed the 'strict' argument.  Added the
     'policy' keyword.

 -- Função: email.message_from_binary_file (fp, _class=None, *,
          policy=policy.compat32)

     Return a message object structure tree from an open binary *note
     file object: 1203.  This is equivalent to
     ‘BytesParser().parse(fp)’.  '_class' and 'policy' are interpreted
     as with the *note BytesParser: 120c. class constructor.

     Adicionado na versão 3.2.

     Alterado na versão 3.3: Removed the 'strict' argument.  Added the
     'policy' keyword.

 -- Função: email.message_from_string (s, _class=None, *,
          policy=policy.compat32)

     Return a message object structure from a string.  This is
     equivalent to ‘Parser().parsestr(s)’.  '_class' and 'policy' are
     interpreted as with the *note Parser: 11dc. class constructor.

     Alterado na versão 3.3: Removed the 'strict' argument.  Added the
     'policy' keyword.

 -- Função: email.message_from_file (fp, _class=None, *,
          policy=policy.compat32)

     Return a message object structure tree from an open *note file
     object: 1203.  This is equivalent to ‘Parser().parse(fp)’.
     '_class' and 'policy' are interpreted as with the *note Parser:
     11dc. class constructor.

     Alterado na versão 3.3: Removed the 'strict' argument.  Added the
     'policy' keyword.

     Alterado na versão 3.6: '_class' defaults to the policy
     ‘message_factory’.

Here’s an example of how you might use *note message_from_bytes(): 1209.
at an interactive Python prompt:

     >>> import email
     >>> msg = email.message_from_bytes(myBytes)

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc5322.html

   (2) https://datatracker.ietf.org/doc/html/rfc6532.html


File: python.info,  Node: Additional notes,  Prev: Parser API,  Up: email parser Parsing email messages

5.20.1.5 Additional notes
.........................

Here are some notes on the parsing semantics:

   * Most non-‘multipart’ type messages are parsed as a single message
     object with a string payload.  These objects will return ‘False’
     for *note is_multipart(): 376f, and *note iter_parts(): 3795. will
     yield an empty list.

   * All ‘multipart’ type messages will be parsed as a container message
     object with a list of sub-message objects for their payload.  The
     outer container message will return ‘True’ for *note
     is_multipart(): 376f, and *note iter_parts(): 3795. will yield a
     list of subparts.

   * Most messages with a content type of ‘message/*’ (such as
     ‘message/delivery-status’ and ‘message/rfc822’) will also be parsed
     as container object containing a list payload of length 1.  Their
     *note is_multipart(): 376f. method will return ‘True’.  The single
     element yielded by *note iter_parts(): 3795. will be a sub-message
     object.

   * Some non-standards-compliant messages may not be internally
     consistent about their ‘multipart’-edness.  Such messages may have
     a ‘Content-Type’ header of type ‘multipart’, but their *note
     is_multipart(): 376f. method may return ‘False’.  If such messages
     were parsed with the *note FeedParser: 15ac, they will have an
     instance of the *note MultipartInvariantViolationDefect: 37b3.
     class in their 'defects' attribute list.  See *note email.errors:
     3f. for details.


File: python.info,  Node: email generator Geração de documentos MIME,  Next: email policy Policy Objects,  Prev: email parser Parsing email messages,  Up: email — Um e-mail e um pacote MIME manipulável

5.20.1.6 ‘email.generator’: Geração de documentos MIME
......................................................

'Código-fonte:' Lib/email/generator.py(1)

__________________________________________________________________

Uma das tarefas mais comuns é gerar a versão plana (serializada) da
mensagem de e-mail representada por uma estrutura de objeto de mensagem.
Você precisará fazer isso se quiser enviar sua mensagem via *note
smtplib.SMTP.sendmail(): e88. ou exibir a mensagem no console.  A tarefa
das classes geradoras é pegar uma estrutura de objeto de mensagem e
produzir uma representação serializada.

Assim como no módulo *note email.parser: 4e, você não está limitado à
funcionalidade do gerador integrado; você mesmo pode criar um do zero.
No entanto, o gerador integrado sabe como gerar a maioria dos e-mails em
conformidade com os padrões, deve lidar perfeitamente com mensagens de
e-mail MIME e não MIME e foi projetado para que as operações de análise
e geração orientadas a bytes sejam inversas, presumindo que a mesma
*note policy: 4f. não transformadora seja usada para ambas.  Ou seja,
analisar o fluxo de bytes serializado por meio da classe *note
BytesParser: 120c. e, em seguida, regenerar o fluxo de bytes serializado
usando *note BytesGenerator: 120f. deve produzir uma saída idêntica à
entrada (2).  (Por outro lado, usar o gerador em um *note EmailMessage:
27b. construído pelo programa pode resultar em alterações no objeto
*note EmailMessage: 27b. à medida que os padrões são preenchidos.)

A classe *note Generator: 120e. pode ser usada para simplificar uma
mensagem em uma representação serializada de texto (em oposição a
binária), mas como o Unicode não pode representar dados binários
diretamente, a mensagem é necessariamente transformada em algo que
contém apenas caracteres ASCII, usando as técnicas de codificação de
transferência de conteúdo RFC de e-mail padrão para codificar mensagens
de e-mail para transporte em canais que não são “limpos de 8 bits”.

Para acomodar o processamento reproduzível de mensagens assinadas por
SMIME, *note Generator: 120e. desabilita a dobragem de cabeçalho para
partes de mensagens do tipo ‘multipart/signed’ e todas as subpartes.

 -- Classe: email.generator.BytesGenerator (outfp, mangle_from_=None,
          maxheaderlen=None, *, policy=None)

     Retorna um objeto *note BytesGenerator: 120f. que gravará qualquer
     mensagem fornecida ao método *note flatten(): 37b8, ou qualquer
     texto codificado surrogateescape fornecido ao método *note write():
     37b9, no *note objeto arquivo ou similar: 15cf. 'outfp'.  'outfp'
     deve oferecer suporte a um método ‘write’ que aceite dados
     binários.

     Se o 'mangle_from_' opcional for ‘True’, coloca um caractere ‘>’ na
     frente de qualquer linha no corpo que comece com a string exata
     ‘"From "’, ou seja, ‘From’ seguido por um espaço no início de uma
     linha.  'mangle_from_' assume por padrão o valor da configuração
     *note mangle_from_: e22. da 'policy' (que é ‘True’ para a política
     *note compat32: cb8. e ‘False’ para todas as outras).
     'mangle_from_' deve ser usado quando as mensagens são armazenadas
     no formato mbox do Unix (consulte *note mailbox: 8b. e WHY THE
     CONTENT-LENGTH FORMAT IS BAD(3)).

     Se 'maxheaderlen' não for ‘None’, redobra quaisquer linhas de
     cabeçalho maiores que 'maxheaderlen' ou, se for ‘0’, não redobra
     nenhum cabeçalho.  Se 'manheaderlen' for ‘None’ (o padrão), redobra
     os cabeçalhos e outras linhas de mensagem de acordo com as
     configurações da 'policy'.

     Se 'policy' for especificado, usa essa política para controlar a
     geração de mensagens.  Se 'policy' for ‘None’ (o padrão), usa a
     política associada ao objeto *note Message: 27c. ou *note
     EmailMessage: 27b. passado para ‘flatten’ para controlar a geração
     de mensagens.  Consulte *note email.policy: 4f. para obter detalhes
     sobre o que 'policy' controla.

     Adicionado na versão 3.2.

     Alterado na versão 3.3: Adicionada o argumento nomeado 'policy'.

     Alterado na versão 3.6: O comportamento padrão dos parâmetros
     'mangle_from_' e 'maxheaderlen' é seguir a política.

      -- Método: flatten (msg, unixfrom=False, linesep=None)

          Exibe a representação textual da estrutura do objeto de
          mensagem com raiz em 'msg' no arquivo de saída especificado
          quando a instância *note BytesGenerator: 120f. foi criada.

          Se a opção *note policy: 4f. *note cte_type: 37ba. for ‘8bit’
          (o padrão), copia todos os cabeçalhos da mensagem original
          analisada que não tenham sido modificados para a saída, com
          todos os bytes com o bit mais alto definido reproduzidos como
          no original, e preserva a ‘Content-Transfer-Encoding’ não
          ASCII de quaisquer partes do corpo que os contenham.  Se
          ‘cte_type’ for ‘7bit’, converte os bytes com o bit mais alto
          definido, conforme necessário, usando uma
          ‘Content-Transfer-Encoding’ compatível com ASCII. Ou seja,
          transforma partes com ‘Content-Transfer-Encoding’ não ASCII
          (‘Content-Transfer-Encoding: 8bit’) em um
          ‘Content-Transfer-Encoding’ compatível com ASCII e codifica
          bytes não ASCII inválidos para RFC em cabeçalhos usando o
          conjunto de caracteres MIME ‘unknown-8bit’, tornando-os
          compatíveis com RFC.

          Se 'unixfrom' for ‘True’, exibe o delimitador de cabeçalho de
          envelope usado pelo formato de caixa de correio Unix (consulte
          *note mailbox: 8b.) antes do primeiro dos cabeçalhos RFC
          5322(4) do objeto de mensagem raiz.  Se o objeto raiz não
          tiver cabeçalho de envelope, crie um padrão.  O padrão é
          ‘False’.  Observe que, para subpartes, nenhum cabeçalho de
          envelope é exibido.

          Se 'linesep' não for ‘None’, usa-o como caractere separador
          entre todas as linhas da mensagem simplificada.  Se 'linesep'
          for ‘None’ (o padrão), usa o valor especificado na 'policy'.

      -- Método: clone (fp)

          Retorna um clone independente desta instância *note
          BytesGenerator: 120f. com exatamente as mesmas configurações
          de opção e 'fp' como o novo 'outfp'.

      -- Método: write (s)

          Codifica 's' usando o codec ‘ASCII’ e o tratador de erros
          ‘surrogateescape’ e passa-o para o método 'write' do 'outfp'
          passado ao construtor *note BytesGenerator: 120f.

Para facilitar, *note EmailMessage: 27b. fornece os métodos *note
as_bytes(): 376d. e ‘bytes(aMessage)’ (também conhecidos como *note
__bytes__(): 376e.), que simplificam a geração de uma representação
binária serializada de um objeto de mensagem.  Para mais detalhes,
consulte *note email.message: 44.

Como strings não podem representar dados binários, a classe *note
Generator: 120e. deve converter quaisquer dados binários em qualquer
mensagem que ela nivele para um formato compatível com ASCII,
convertendo-os para um ‘Content-Transfer_Encoding’ compatível com ASCII.
Usando a terminologia dos RFCs de e-mail, você pode pensar nisso como
*note Generator: 120e. serializando para um fluxo de E/S que não é
“limpo em 8 bits”.  Em outras palavras, a maioria das aplicações usará
*note BytesGenerator: 120f, e não *note Generator: 120e.

 -- Classe: email.generator.Generator (outfp, mangle_from_=None,
          maxheaderlen=None, *, policy=None)

     Retorna um objeto *note Generator: 120e. que gravará qualquer
     mensagem fornecida ao método *note flatten(): 37bc, ou qualquer
     texto fornecido ao método *note write(): 37bd, no *note objeto
     arquivo ou similar: 15cf. 'outfp'.  'outfp' deve oferecer suporte a
     um método ‘write’ que aceite dados string.

     Se o 'mangle_from_' opcional for ‘True’, coloca um caractere ‘>’ na
     frente de qualquer linha no corpo que comece com a string exata
     ‘"From "’, ou seja, ‘From’ seguido por um espaço no início de uma
     linha.  'mangle_from_' assume por padrão o valor da configuração
     *note mangle_from_: e22. da 'policy' (que é ‘True’ para a política
     *note compat32: cb8. e ‘False’ para todas as outras).
     'mangle_from_' deve ser usado quando as mensagens são armazenadas
     no formato mbox do Unix (consulte *note mailbox: 8b. e WHY THE
     CONTENT-LENGTH FORMAT IS BAD(5)).

     Se 'maxheaderlen' não for ‘None’, redobra quaisquer linhas de
     cabeçalho maiores que 'maxheaderlen' ou, se for ‘0’, não redobra
     nenhum cabeçalho.  Se 'manheaderlen' for ‘None’ (o padrão), redobra
     os cabeçalhos e outras linhas de mensagem de acordo com as
     configurações da 'policy'.

     Se 'policy' for especificado, usa essa política para controlar a
     geração de mensagens.  Se 'policy' for ‘None’ (o padrão), usa a
     política associada ao objeto *note Message: 27c. ou *note
     EmailMessage: 27b. passado para ‘flatten’ para controlar a geração
     de mensagens.  Consulte *note email.policy: 4f. para obter detalhes
     sobre o que 'policy' controla.

     Alterado na versão 3.3: Adicionada o argumento nomeado 'policy'.

     Alterado na versão 3.6: O comportamento padrão dos parâmetros
     'mangle_from_' e 'maxheaderlen' é seguir a política.

      -- Método: flatten (msg, unixfrom=False, linesep=None)

          Exibe a representação textual da estrutura do objeto de
          mensagem com raiz em 'msg' no arquivo de saída especificado
          quando a instância *note Generator: 120e. foi criada.

          Se a opção *note policy: 4f. *note cte_type: 37ba. for ‘8bit’,
          gera a mensagem como se a opção estivesse definida como
          ‘7bit’.  (Isso é necessário porque strings não podem
          representar bytes não ASCII.) Converte quaisquer bytes com o
          bit mais alto definido, conforme necessário, usando uma
          ‘Content-Transfer-Encoding’ compatível com ASCII. Ou seja,
          transforma partes com ‘Content-Transfer-Encoding’ não ASCII
          (‘Content-Transfer-Encoding: 8bit’) em um
          ‘Content-Transfer-Encoding’ compatível com ASCII e codifica
          bytes não ASCII inválidos para RFC em cabeçalhos usando o
          conjunto de caracteres MIME ‘unknown-8bit’, tornando-os
          compatíveis com RFC.

          Se 'unixfrom' for ‘True’, exibe o delimitador de cabeçalho de
          envelope usado pelo formato de caixa de correio Unix (consulte
          *note mailbox: 8b.) antes do primeiro dos cabeçalhos RFC
          5322(6) do objeto de mensagem raiz.  Se o objeto raiz não
          tiver cabeçalho de envelope, crie um padrão.  O padrão é
          ‘False’.  Observe que, para subpartes, nenhum cabeçalho de
          envelope é exibido.

          Se 'linesep' não for ‘None’, usa-o como caractere separador
          entre todas as linhas da mensagem simplificada.  Se 'linesep'
          for ‘None’ (o padrão), usa o valor especificado na 'policy'.

          Alterado na versão 3.2: Adicionado suporte para recodificação
          de corpos de mensagens ‘8bit’ e o argumento 'linesep'.

      -- Método: clone (fp)

          Retorna um clone independente desta instância *note Generator:
          120e. com exatamente as mesmas opções e 'fp' como o novo
          'outfp'.

      -- Método: write (s)

          Escreve 's' no método 'write' do 'outfp' passado ao construtor
          de *note Generator: 120e.  Isso fornece API arquivo ou similar
          suficiente para que instâncias de *note Generator: 120e. sejam
          usadas na função *note print(): fa9.

Para facilitar, *note EmailMessage: 27b. fornece os métodos *note
as_string(): 376a. e ‘str(aMessage)’ (também conhecidos como *note
__str__(): 376c.), que simplificam a geração de uma representação de
string formatada de um objeto de mensagem.  Para mais detalhes, consulte
*note email.message: 44.

O módulo *note email.generator: 40. também fornece uma classe derivada,
*note DecodedGenerator: cb6, que é como a classe base *note Generator:
120e, exceto que as partes não-‘text’ não são serializadas, mas são
representadas no fluxo de saída por uma string derivada de um modelo
preenchido com informações sobre a parte.

 -- Classe: email.generator.DecodedGenerator (outfp, mangle_from_=None,
          maxheaderlen=None, fmt=None, *, policy=None)

     Age como *note Generator: 120e, exceto que para qualquer subparte
     da mensagem passada para *note Generator.flatten(): 37bc, se a
     subparte for do tipo principal ‘text’, exibe a carga decodificada
     da subparte e, se o tipo principal não for ‘text’, em vez de
     exibi-la, preenche a string 'fmt' usando informações da parte e
     exibe a string preenchida resultante.

     Para preencher 'fmt', executa ‘fmt % part_info’, onde ‘part_info’ é
     um dicionário composto pelas seguintes chaves e valores:

        * ‘type’ – Tipo MIME completo da parte não-‘text’

        * ‘maintype’ – Tipo MIME principal da parte não-‘text’

        * ‘subtype’ – Tipo sub-MIME da parte não-‘text’

        * ‘filename’ – Nome de arquivo da parte não-‘text’

        * ‘description’ – Descrição associada à parte não-‘text’

        * ‘encoding’ – Codificação de transferência de conteúdo da parte
          não-‘text’

     Se 'fmt' for ‘None’, usa o seguinte 'fmt' padrão:

          “[Non-text (%(type)s) part of message omitted, filename
          %(filename)s]”

     Os opcionais '_mangle_from_' e 'maxheaderlen' são como os da classe
     base *note Generator: 120e.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/email/generator.py

   (2) Esta instrução presume que você usa a configuração apropriada
para ‘unixfrom’ e que não haja configurações *note email.policy: 4f. que
exijam ajustes automáticos (por exemplo, *note refold_source: 37b7. deve
ser ‘none’, que 'não' é o padrão).  Também não é 100% verdadeiro, pois,
se a mensagem não estiver em conformidade com os padrões RFC,
ocasionalmente informações sobre o texto original exato são perdidas
durante a recuperação de erros de análise.  O objetivo é corrigir esses
últimos casos extremos sempre que possível.

   (3) https://www.jwz.org/doc/content-length.html

   (4) https://datatracker.ietf.org/doc/html/rfc5322.html

   (5) https://www.jwz.org/doc/content-length.html

   (6) https://datatracker.ietf.org/doc/html/rfc5322.html


File: python.info,  Node: email policy Policy Objects,  Next: email errors Classes de Exceção e Defeito,  Prev: email generator Geração de documentos MIME,  Up: email — Um e-mail e um pacote MIME manipulável

5.20.1.7 ‘email.policy’: Policy Objects
.......................................

Adicionado na versão 3.3.

'Código-fonte:' Lib/email/policy.py(1)

__________________________________________________________________

The *note email: 3b. package’s prime focus is the handling of email
messages as described by the various email and MIME RFCs.  However, the
general format of email messages (a block of header fields each
consisting of a name followed by a colon followed by a value, the whole
block followed by a blank line and an arbitrary ‘body’), is a format
that has found utility outside of the realm of email.  Some of these
uses conform fairly closely to the main email RFCs, some do not.  Even
when working with email, there are times when it is desirable to break
strict compliance with the RFCs, such as generating emails that
interoperate with email servers that do not themselves follow the
standards, or that implement extensions you want to use in ways that
violate the standards.

Policy objects give the email package the flexibility to handle all
these disparate use cases.

A *note Policy: 10f2. object encapsulates a set of attributes and
methods that control the behavior of various components of the email
package during use.  *note Policy: 10f2. instances can be passed to
various classes and methods in the email package to alter the default
behavior.  The settable values and their defaults are described below.

There is a default policy used by all classes in the email package.  For
all of the *note parser: 4e. classes and the related convenience
functions, and for the *note Message: 27c. class, this is the *note
Compat32: 10f3. policy, via its corresponding pre-defined instance *note
compat32: cb8.  This policy provides for complete backward compatibility
(in some cases, including bug compatibility) with the pre-Python3.3
version of the email package.

This default value for the 'policy' keyword to *note EmailMessage: 27b.
is the *note EmailPolicy: 10f6. policy, via its pre-defined instance
*note default: 15ad.

When a *note Message: 27c. or *note EmailMessage: 27b. object is
created, it acquires a policy.  If the message is created by a *note
parser: 4e, a policy passed to the parser will be the policy used by the
message it creates.  If the message is created by the program, then the
policy can be specified when it is created.  When a message is passed to
a *note generator: 40, the generator uses the policy from the message by
default, but you can also pass a specific policy to the generator that
will override the one stored on the message object.

The default value for the 'policy' keyword for the *note email.parser:
4e. classes and the parser convenience functions 'will be changing' in a
future version of Python.  Therefore you should 'always specify
explicitly which policy you want to use' when calling any of the classes
and functions described in the *note parser: 4e. module.

The first part of this documentation covers the features of *note
Policy: 10f2, an *note abstract base class: 11f5. that defines the
features that are common to all policy objects, including *note
compat32: cb8.  This includes certain hook methods that are called
internally by the email package, which a custom policy could override to
obtain different behavior.  The second part describes the concrete
classes *note EmailPolicy: 10f6. and *note Compat32: 10f3, which
implement the hooks that provide the standard behavior and the backward
compatible behavior and features, respectively.

*note Policy: 10f2. instances are immutable, but they can be cloned,
accepting the same keyword arguments as the class constructor and
returning a new *note Policy: 10f2. instance that is a copy of the
original but with the specified attributes values changed.

As an example, the following code could be used to read an email message
from a file on disk and pass it to the system ‘sendmail’ program on a
Unix system:

     >>> from email import message_from_binary_file
     >>> from email.generator import BytesGenerator
     >>> from email import policy
     >>> from subprocess import Popen, PIPE
     >>> with open('mymsg.txt', 'rb') as f:
     ...     msg = message_from_binary_file(f, policy=policy.default)
     ...
     >>> p = Popen(['sendmail', msg['To'].addresses[0]], stdin=PIPE)
     >>> g = BytesGenerator(p.stdin, policy=msg.policy.clone(linesep='\r\n'))
     >>> g.flatten(msg)
     >>> p.stdin.close()
     >>> rc = p.wait()

Here we are telling *note BytesGenerator: 120f. to use the RFC correct
line separator characters when creating the binary string to feed into
‘sendmail's’ ‘stdin’, where the default policy would use ‘\n’ line
separators.

Some email package methods accept a 'policy' keyword argument, allowing
the policy to be overridden for that method.  For example, the following
code uses the *note as_bytes(): f6a. method of the 'msg' object from the
previous example and writes the message to a file using the native line
separators for the platform on which it is running:

     >>> import os
     >>> with open('converted.txt', 'wb') as f:
     ...     f.write(msg.as_bytes(policy=msg.policy.clone(linesep=os.linesep)))
     17

Policy objects can also be combined using the addition operator,
producing a policy object whose settings are a combination of the
non-default values of the summed objects:

     >>> compat_SMTP = policy.compat32.clone(linesep='\r\n')
     >>> compat_strict = policy.compat32.clone(raise_on_defect=True)
     >>> compat_strict_SMTP = compat_SMTP + compat_strict

This operation is not commutative; that is, the order in which the
objects are added matters.  To illustrate:

     >>> policy100 = policy.compat32.clone(max_line_length=100)
     >>> policy80 = policy.compat32.clone(max_line_length=80)
     >>> apolicy = policy100 + policy80
     >>> apolicy.max_line_length
     80
     >>> apolicy = policy80 + policy100
     >>> apolicy.max_line_length
     100

 -- Classe: email.policy.Policy (**kw)

     This is the *note abstract base class: 11f5. for all policy
     classes.  It provides default implementations for a couple of
     trivial methods, as well as the implementation of the immutability
     property, the *note clone(): 10f4. method, and the constructor
     semantics.

     The constructor of a policy class can be passed various keyword
     arguments.  The arguments that may be specified are any non-method
     properties on this class, plus any additional non-method properties
     on the concrete class.  A value specified in the constructor will
     override the default value for the corresponding attribute.

     This class defines the following properties, and thus values for
     the following may be passed in the constructor of any policy class:

      -- Atributo: max_line_length

          The maximum length of any line in the serialized output, not
          counting the end of line character(s).  Default is 78, per RFC
          5322(2).  A value of ‘0’ or *note None: 675. indicates that no
          line wrapping should be done at all.

      -- Atributo: linesep

          The string to be used to terminate lines in serialized output.
          The default is ‘\n’ because that’s the internal end-of-line
          discipline used by Python, though ‘\r\n’ is required by the
          RFCs.

      -- Atributo: cte_type

          Controls the type of Content Transfer Encodings that may be or
          are required to be used.  The possible values are:

          ‘7bit’       all data must be “7 bit clean” (ASCII-only).  This means that
                       where necessary data will be encoded using either
                       quoted-printable or base64 encoding.
                       
                       
          ‘8bit’       data is not constrained to be 7 bit clean.  Data in headers is
                       still required to be ASCII-only and so will be encoded (see
                       *note fold_binary(): 37c3. and *note utf8: e24. below for
                       exceptions), but body parts may use the ‘8bit’ CTE.
                       

          A ‘cte_type’ value of ‘8bit’ only works with ‘BytesGenerator’,
          not ‘Generator’, because strings cannot contain binary data.
          If a ‘Generator’ is operating under a policy that specifies
          ‘cte_type=8bit’, it will act as if ‘cte_type’ is ‘7bit’.

      -- Atributo: raise_on_defect

          If *note True: c27, any defects encountered will be raised as
          errors.  If *note False: b49. (the default), defects will be
          passed to the *note register_defect(): 37c5. method.

      -- Atributo: mangle_from_

          If *note True: c27, lines starting with '“From “' in the body
          are escaped by putting a ‘>’ in front of them.  This parameter
          is used when the message is being serialized by a generator.
          Default: *note False: b49.

          Adicionado na versão 3.5.

      -- Atributo: message_factory

          A factory function for constructing a new empty message
          object.  Used by the parser when building messages.  Defaults
          to ‘None’, in which case *note Message: 27c. is used.

          Adicionado na versão 3.6.

      -- Atributo: verify_generated_headers

          If ‘True’ (the default), the generator will raise *note
          HeaderWriteError: 37c6. instead of writing a header that is
          improperly folded or delimited, such that it would be parsed
          as multiple headers or joined with adjacent data.  Such
          headers can be generated by custom header classes or bugs in
          the ‘email’ module.

          As it’s a security feature, this defaults to ‘True’ even in
          the *note Compat32: 10f3. policy.  For backwards compatible,
          but unsafe, behavior, it must be set to ‘False’ explicitly.

          Adicionado na versão 3.13.

     The following *note Policy: 10f2. method is intended to be called
     by code using the email library to create policy instances with
     custom settings:

      -- Método: clone (**kw)

          Return a new *note Policy: 10f2. instance whose attributes
          have the same values as the current instance, except where
          those attributes are given new values by the keyword
          arguments.

     The remaining *note Policy: 10f2. methods are called by the email
     package code, and are not intended to be called by an application
     using the email package.  A custom policy must implement all of
     these methods.

      -- Método: handle_defect (obj, defect)

          Handle a 'defect' found on 'obj'.  When the email package
          calls this method, 'defect' will always be a subclass of *note
          MessageDefect: 37c8.

          The default implementation checks the *note raise_on_defect:
          37c4. flag.  If it is ‘True’, 'defect' is raised as an
          exception.  If it is ‘False’ (the default), 'obj' and 'defect'
          are passed to *note register_defect(): 37c5.

      -- Método: register_defect (obj, defect)

          Register a 'defect' on 'obj'.  In the email package, 'defect'
          will always be a subclass of *note MessageDefect: 37c8.

          The default implementation calls the ‘append’ method of the
          ‘defects’ attribute of 'obj'.  When the email package calls
          *note handle_defect: 37c7, 'obj' will normally have a
          ‘defects’ attribute that has an ‘append’ method.  Custom
          object types used with the email package (for example, custom
          ‘Message’ objects) should also provide such an attribute,
          otherwise defects in parsed messages will raise unexpected
          errors.

      -- Método: header_max_count (name)

          Return the maximum allowed number of headers named 'name'.

          Called when a header is added to an *note EmailMessage: 27b.
          or *note Message: 27c. object.  If the returned value is not
          ‘0’ or ‘None’, and there are already a number of headers with
          the name 'name' greater than or equal to the value returned, a
          *note ValueError: 202. is raised.

          Because the default behavior of ‘Message.__setitem__’ is to
          append the value to the list of headers, it is easy to create
          duplicate headers without realizing it.  This method allows
          certain headers to be limited in the number of instances of
          that header that may be added to a ‘Message’ programmatically.
          (The limit is not observed by the parser, which will
          faithfully produce as many headers as exist in the message
          being parsed.)

          The default implementation returns ‘None’ for all header
          names.

      -- Método: header_source_parse (sourcelines)

          The email package calls this method with a list of strings,
          each string ending with the line separation characters found
          in the source being parsed.  The first line includes the field
          header name and separator.  All whitespace in the source is
          preserved.  The method should return the ‘(name, value)’ tuple
          that is to be stored in the ‘Message’ to represent the parsed
          header.

          If an implementation wishes to retain compatibility with the
          existing email package policies, 'name' should be the case
          preserved name (all characters up to the ‘‘:’’ separator),
          while 'value' should be the unfolded value (all line separator
          characters removed, but whitespace kept intact), stripped of
          leading whitespace.

          'sourcelines' may contain surrogateescaped binary data.

          There is no default implementation

      -- Método: header_store_parse (name, value)

          The email package calls this method with the name and value
          provided by the application program when the application
          program is modifying a ‘Message’ programmatically (as opposed
          to a ‘Message’ created by a parser).  The method should return
          the ‘(name, value)’ tuple that is to be stored in the
          ‘Message’ to represent the header.

          If an implementation wishes to retain compatibility with the
          existing email package policies, the 'name' and 'value' should
          be strings or string subclasses that do not change the content
          of the passed in arguments.

          There is no default implementation

      -- Método: header_fetch_parse (name, value)

          The email package calls this method with the 'name' and
          'value' currently stored in the ‘Message’ when that header is
          requested by the application program, and whatever the method
          returns is what is passed back to the application as the value
          of the header being retrieved.  Note that there may be more
          than one header with the same name stored in the ‘Message’;
          the method is passed the specific name and value of the header
          destined to be returned to the application.

          'value' may contain surrogateescaped binary data.  There
          should be no surrogateescaped binary data in the value
          returned by the method.

          There is no default implementation

      -- Método: fold (name, value)

          The email package calls this method with the 'name' and
          'value' currently stored in the ‘Message’ for a given header.
          The method should return a string that represents that header
          “folded” correctly (according to the policy settings) by
          composing the 'name' with the 'value' and inserting *note
          linesep: 37c2. characters at the appropriate places.  See RFC
          5322(3) for a discussion of the rules for folding email
          headers.

          'value' may contain surrogateescaped binary data.  There
          should be no surrogateescaped binary data in the string
          returned by the method.

      -- Método: fold_binary (name, value)

          The same as *note fold(): 37cd, except that the returned value
          should be a bytes object rather than a string.

          'value' may contain surrogateescaped binary data.  These could
          be converted back into binary data in the returned bytes
          object.

 -- Classe: email.policy.EmailPolicy (**kw)

     This concrete *note Policy: 10f2. provides behavior that is
     intended to be fully compliant with the current email RFCs.  These
     include (but are not limited to) RFC 5322(4), RFC 2047(5), and the
     current MIME RFCs.

     This policy adds new header parsing and folding algorithms.
     Instead of simple strings, headers are ‘str’ subclasses with
     attributes that depend on the type of the field.  The parsing and
     folding algorithm fully implement RFC 2047(6) and RFC 5322(7).

     The default value for the *note message_factory: cb7. attribute is
     *note EmailMessage: 27b.

     In addition to the settable attributes listed above that apply to
     all policies, this policy adds the following additional attributes:

     Adicionado na versão 3.6: (8)

      -- Atributo: utf8

          If ‘False’, follow RFC 5322(9), supporting non-ASCII
          characters in headers by encoding them as “encoded words”.  If
          ‘True’, follow RFC 6532(10) and use ‘utf-8’ encoding for
          headers.  Messages formatted in this way may be passed to SMTP
          servers that support the ‘SMTPUTF8’ extension ( RFC 6531(11)).

      -- Atributo: refold_source

          If the value for a header in the ‘Message’ object originated
          from a *note parser: 4e. (as opposed to being set by a
          program), this attribute indicates whether or not a generator
          should refold that value when transforming the message back
          into serialized form.  The possible values are:

          ‘none’       all source values use original folding
                       
                       
          ‘long’       source values that have any line that is longer than
                       ‘max_line_length’ will be refolded
                       
                       
          ‘all’        todos os valores são redobrados.
                       

          O padrão é ‘long’.

      -- Atributo: header_factory

          A callable that takes two arguments, ‘name’ and ‘value’, where
          ‘name’ is a header field name and ‘value’ is an unfolded
          header field value, and returns a string subclass that
          represents that header.  A default ‘header_factory’ (see *note
          headerregistry: 42.) is provided that supports custom parsing
          for the various address and date RFC 5322(12) header field
          types, and the major MIME header field stypes.  Support for
          additional custom parsing will be added in the future.

      -- Atributo: content_manager

          An object with at least two methods: get_content and
          set_content.  When the *note get_content(): 3796. or *note
          set_content(): 19e8. method of an *note EmailMessage: 27b.
          object is called, it calls the corresponding method of this
          object, passing it the message object as its first argument,
          and any arguments or keywords that were passed to it as
          additional arguments.  By default ‘content_manager’ is set to
          *note raw_data_manager: 37cf.

          Adicionado na versão 3.4.

     The class provides the following concrete implementations of the
     abstract methods of *note Policy: 10f2.:

      -- Método: header_max_count (name)

          Returns the value of the *note max_count: 37d1. attribute of
          the specialized class used to represent the header with the
          given name.

      -- Método: header_source_parse (sourcelines)

          The name is parsed as everything up to the ‘‘:’’ and returned
          unmodified.  The value is determined by stripping leading
          whitespace off the remainder of the first line, joining all
          subsequent lines together, and stripping any trailing carriage
          return or linefeed characters.

      -- Método: header_store_parse (name, value)

          The name is returned unchanged.  If the input value has a
          ‘name’ attribute and it matches 'name' ignoring case, the
          value is returned unchanged.  Otherwise the 'name' and 'value'
          are passed to ‘header_factory’, and the resulting header
          object is returned as the value.  In this case a ‘ValueError’
          is raised if the input value contains CR or LF characters.

      -- Método: header_fetch_parse (name, value)

          If the value has a ‘name’ attribute, it is returned to
          unmodified.  Otherwise the 'name', and the 'value' with any CR
          or LF characters removed, are passed to the ‘header_factory’,
          and the resulting header object is returned.  Any
          surrogateescaped bytes get turned into the unicode
          unknown-character glyph.

      -- Método: fold (name, value)

          Header folding is controlled by the *note refold_source: 37b7.
          policy setting.  A value is considered to be a ‘source value’
          if and only if it does not have a ‘name’ attribute (having a
          ‘name’ attribute means it is a header object of some sort).
          If a source value needs to be refolded according to the
          policy, it is converted into a header object by passing the
          'name' and the 'value' with any CR and LF characters removed
          to the ‘header_factory’.  Folding of a header object is done
          by calling its ‘fold’ method with the current policy.

          Source values are split into lines using *note splitlines():
          1298.  If the value is not to be refolded, the lines are
          rejoined using the ‘linesep’ from the policy and returned.
          The exception is lines containing non-ascii binary data.  In
          that case the value is refolded regardless of the
          ‘refold_source’ setting, which causes the binary data to be
          CTE encoded using the ‘unknown-8bit’ charset.

      -- Método: fold_binary (name, value)

          The same as *note fold(): 176b. if *note cte_type: 37ba. is
          ‘7bit’, except that the returned value is bytes.

          If *note cte_type: 37ba. is ‘8bit’, non-ASCII binary data is
          converted back into bytes.  Headers with binary data are not
          refolded, regardless of the ‘refold_header’ setting, since
          there is no way to know whether the binary data consists of
          single byte characters or multibyte characters.

The following instances of *note EmailPolicy: 10f6. provide defaults
suitable for specific application domains.  Note that in the future the
behavior of these instances (in particular the ‘HTTP’ instance) may be
adjusted to conform even more closely to the RFCs relevant to their
domains.

 -- Dado: email.policy.default

     An instance of ‘EmailPolicy’ with all defaults unchanged.  This
     policy uses the standard Python ‘\n’ line endings rather than the
     RFC-correct ‘\r\n’.

 -- Dado: email.policy.SMTP

     Suitable for serializing messages in conformance with the email
     RFCs.  Like ‘default’, but with ‘linesep’ set to ‘\r\n’, which is
     RFC compliant.

 -- Dado: email.policy.SMTPUTF8

     The same as ‘SMTP’ except that *note utf8: e24. is ‘True’.  Useful
     for serializing messages to a message store without using encoded
     words in the headers.  Should only be used for SMTP transmission if
     the sender or recipient addresses have non-ASCII characters (the
     *note smtplib.SMTP.send_message(): e89. method handles this
     automatically).

 -- Dado: email.policy.HTTP

     Suitable for serializing headers with for use in HTTP traffic.
     Like ‘SMTP’ except that ‘max_line_length’ is set to ‘None’
     (unlimited).

 -- Dado: email.policy.strict

     Convenience instance.  The same as ‘default’ except that
     ‘raise_on_defect’ is set to ‘True’.  This allows any policy to be
     made strict by writing:

          somepolicy + policy.strict

With all of these *note EmailPolicies: 10f6, the effective API of the
email package is changed from the Python 3.2 API in the following ways:

   * Setting a header on a *note Message: 27c. results in that header
     being parsed and a header object created.

   * Fetching a header value from a *note Message: 27c. results in that
     header being parsed and a header object created and returned.

   * Any header object, or any header that is refolded due to the policy
     settings, is folded using an algorithm that fully implements the
     RFC folding algorithms, including knowing where encoded words are
     required and allowed.

From the application view, this means that any header obtained through
the *note EmailMessage: 27b. is a header object with extra attributes,
whose string value is the fully decoded unicode value of the header.
Likewise, a header may be assigned a new value, or a new header created,
using a unicode string, and the policy will take care of converting the
unicode string into the correct RFC encoded form.

The header objects and their attributes are described in *note
headerregistry: 42.

 -- Classe: email.policy.Compat32 (**kw)

     This concrete *note Policy: 10f2. is the backward compatibility
     policy.  It replicates the behavior of the email package in Python
     3.2.  The *note policy: 4f. module also defines an instance of this
     class, *note compat32: cb8, that is used as the default policy.
     Thus the default behavior of the email package is to maintain
     compatibility with Python 3.2.

     The following attributes have values that are different from the
     *note Policy: 10f2. default:

      -- Atributo: mangle_from_

          O padrão é ‘True’.

     The class provides the following concrete implementations of the
     abstract methods of *note Policy: 10f2.:

      -- Método: header_source_parse (sourcelines)

          The name is parsed as everything up to the ‘‘:’’ and returned
          unmodified.  The value is determined by stripping leading
          whitespace off the remainder of the first line, joining all
          subsequent lines together, and stripping any trailing carriage
          return or linefeed characters.

      -- Método: header_store_parse (name, value)

          The name and value are returned unmodified.

      -- Método: header_fetch_parse (name, value)

          If the value contains binary data, it is converted into a
          *note Header: 19e9. object using the ‘unknown-8bit’ charset.
          Otherwise it is returned unmodified.

      -- Método: fold (name, value)

          Headers are folded using the *note Header: 19e9. folding
          algorithm, which preserves existing line breaks in the value,
          and wraps each resulting line to the ‘max_line_length’.
          Non-ASCII binary data are CTE encoded using the ‘unknown-8bit’
          charset.

      -- Método: fold_binary (name, value)

          Headers are folded using the *note Header: 19e9. folding
          algorithm, which preserves existing line breaks in the value,
          and wraps each resulting line to the ‘max_line_length’.  If
          ‘cte_type’ is ‘7bit’, non-ascii binary data is CTE encoded
          using the ‘unknown-8bit’ charset.  Otherwise the original
          source header is used, with its existing line breaks and any
          (RFC invalid) binary data it may contain.

 -- Dado: email.policy.compat32

     An instance of *note Compat32: 10f3, providing backward
     compatibility with the behavior of the email package in Python 3.2.

          Nota: The *note compat32: cb8. policy should not be used as a
          policy for *note EmailMessage: 27b. objects, and should only
          be used to serialize messages that were created using the
          *note compat32: cb8. policy.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/email/policy.py

   (2) https://datatracker.ietf.org/doc/html/rfc5322.html

   (3) https://datatracker.ietf.org/doc/html/rfc5322.html

   (4) https://datatracker.ietf.org/doc/html/rfc5322.html

   (5) https://datatracker.ietf.org/doc/html/rfc2047.html

   (6) https://datatracker.ietf.org/doc/html/rfc2047.html

   (7) https://datatracker.ietf.org/doc/html/rfc5322.html

   (8) Originally added in 3.3 as a *note provisional feature: 107a.

   (9) https://datatracker.ietf.org/doc/html/rfc5322.html

   (10) https://datatracker.ietf.org/doc/html/rfc6532.html

   (11) https://datatracker.ietf.org/doc/html/rfc6531.html

   (12) https://datatracker.ietf.org/doc/html/rfc5322.html


File: python.info,  Node: email errors Classes de Exceção e Defeito,  Next: email headerregistry Custom Header Objects,  Prev: email policy Policy Objects,  Up: email — Um e-mail e um pacote MIME manipulável

5.20.1.8 ‘email.errors’: Classes de Exceção e Defeito.
......................................................

'Código-fonte:' Lib/email/errors.py(1)

__________________________________________________________________

A seguinte classe de exceção é definida no modulo *note email.errors:
3f.

 -- Exceção: email.errors.MessageError

     Essa é a classe base para todas as exceções que o pacote *note
     email: 3b. pode levantar.  Ela é derivada da classe padrão *note
     Exception: 9e2. e não define métodos adicionais.

 -- Exceção: email.errors.MessageParseError

     Essa é a classe base para exceções levantadas pela classe *note
     Parser: 11dc.  Ela é derivada do *note MessageError: 37e1.  Essa
     classe pode ser usada internamente pelo analisador sintático usado
     pelo *note headerregistry: 42.

 -- Exceção: email.errors.HeaderParseError

     Raised under some error conditions when parsing the RFC 5322(2)
     headers of a message, this class is derived from *note
     MessageParseError: 37e2.  The *note set_boundary(): 378b. method
     will raise this error if the content type is unknown when the
     method is called.  *note Header: 19e9. may raise this error for
     certain base64 decoding errors, and when an attempt is made to
     create a header that appears to contain an embedded header (that
     is, there is what is supposed to be a continuation line that has no
     leading whitespace and looks like a header).

 -- Exceção: email.errors.BoundaryError

     Descontinuado e não mais usado.

 -- Exceção: email.errors.MultipartConversionError

     Raised if the *note attach(): 379d. method is called on an instance
     of a class derived from *note MIMENonMultipart: 37e5. (e.g.  *note
     MIMEImage: 37e6.).  *note MultipartConversionError: 37e4. multiply
     inherits from *note MessageError: 37e1. and the built-in *note
     TypeError: 2c3.

 -- Exceção: email.errors.HeaderWriteError

     Raised when an error occurs when the *note generator: 40. outputs
     headers.

 -- Exceção: email.errors.MessageDefect

     This is the base class for all defects found when parsing email
     messages.  It is derived from *note ValueError: 202.

 -- Exceção: email.errors.HeaderDefect

     This is the base class for all defects found when parsing email
     headers.  It is derived from *note MessageDefect: 37c8.

Here is the list of the defects that the *note FeedParser: 15ac. can
find while parsing messages.  Note that the defects are added to the
message where the problem was found, so for example, if a message nested
inside a ‘multipart/alternative’ had a malformed header, that nested
message object would have a defect, but the containing messages would
not.

All defect classes are subclassed from *note email.errors.MessageDefect:
37c8.

 -- Exceção: email.errors.NoBoundaryInMultipartDefect

     A message claimed to be a multipart, but had no ‘boundary’
     parameter.

 -- Exceção: email.errors.StartBoundaryNotFoundDefect

     The start boundary claimed in the ‘Content-Type’ header was never
     found.

 -- Exceção: email.errors.CloseBoundaryNotFoundDefect

     A start boundary was found, but no corresponding close boundary was
     ever found.

     Adicionado na versão 3.3.

 -- Exceção: email.errors.FirstHeaderLineIsContinuationDefect

     The message had a continuation line as its first header line.

 -- Exceção: email.errors.MisplacedEnvelopeHeaderDefect

     A “Unix From” header was found in the middle of a header block.

 -- Exceção: email.errors.MissingHeaderBodySeparatorDefect

     A line was found while parsing headers that had no leading white
     space but contained no ‘:’.  Parsing continues assuming that the
     line represents the first line of the body.

     Adicionado na versão 3.3.

 -- Exceção: email.errors.MalformedHeaderDefect

     A header was found that was missing a colon, or was otherwise
     malformed.

     Descontinuado desde a versão 3.3: This defect has not been used for
     several Python versions.

 -- Exceção: email.errors.MultipartInvariantViolationDefect

     A message claimed to be a ‘multipart’, but no subparts were found.
     Note that when a message has this defect, its *note is_multipart():
     3790. method may return ‘False’ even though its content type claims
     to be ‘multipart’.

 -- Exceção: email.errors.InvalidBase64PaddingDefect

     When decoding a block of base64 encoded bytes, the padding was not
     correct.  Enough padding is added to perform the decode, but the
     resulting decoded bytes may be invalid.

 -- Exceção: email.errors.InvalidBase64CharactersDefect

     When decoding a block of base64 encoded bytes, characters outside
     the base64 alphabet were encountered.  The characters are ignored,
     but the resulting decoded bytes may be invalid.

 -- Exceção: email.errors.InvalidBase64LengthDefect

     When decoding a block of base64 encoded bytes, the number of
     non-padding base64 characters was invalid (1 more than a multiple
     of 4).  The encoded block was kept as-is.

 -- Exceção: email.errors.InvalidDateDefect

     When decoding an invalid or unparsable date field.  The original
     value is kept as-is.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/email/errors.py

   (2) https://datatracker.ietf.org/doc/html/rfc5322.html


File: python.info,  Node: email headerregistry Custom Header Objects,  Next: email contentmanager Gerenciando conteúdo MIME,  Prev: email errors Classes de Exceção e Defeito,  Up: email — Um e-mail e um pacote MIME manipulável

5.20.1.9 ‘email.headerregistry’: Custom Header Objects
......................................................

'Código-fonte:' Lib/email/headerregistry.py(1)

__________________________________________________________________

Adicionado na versão 3.6: (2)

Headers are represented by customized subclasses of *note str: 44c.  The
particular class used to represent a given header is determined by the
*note header_factory: 37ce. of the *note policy: 4f. in effect when the
headers are created.  This section documents the particular
‘header_factory’ implemented by the email package for handling RFC
5322(3) compliant email messages, which not only provides customized
header objects for various header types, but also provides an extension
mechanism for applications to add their own custom header types.

When using any of the policy objects derived from *note EmailPolicy:
10f6, all headers are produced by *note HeaderRegistry: 37f6. and have
*note BaseHeader: 3778. as their last base class.  Each header class has
an additional base class that is determined by the type of the header.
For example, many headers have the class *note UnstructuredHeader: 37f7.
as their other base class.  The specialized second class for a header is
determined by the name of the header, using a lookup table stored in the
*note HeaderRegistry: 37f6.  All of this is managed transparently for
the typical application program, but interfaces are provided for
modifying the default behavior for use by more complex applications.

The sections below first document the header base classes and their
attributes, followed by the API for modifying the behavior of *note
HeaderRegistry: 37f6, and finally the support classes used to represent
the data parsed from structured headers.

 -- Classe: email.headerregistry.BaseHeader (name, value)

     'name' and 'value' are passed to ‘BaseHeader’ from the *note
     header_factory: 37ce. call.  The string value of any header object
     is the 'value' fully decoded to unicode.

     This base class defines the following read-only properties:

      -- Atributo: name

          The name of the header (the portion of the field before the
          ‘:’).  This is exactly the value passed in the *note
          header_factory: 37ce. call for 'name'; that is, case is
          preserved.

      -- Atributo: defects

          A tuple of *note HeaderDefect: 37e7. instances reporting any
          RFC compliance problems found during parsing.  The email
          package tries to be complete about detecting compliance
          issues.  See the *note errors: 3f. module for a discussion of
          the types of defects that may be reported.

      -- Atributo: max_count

          The maximum number of headers of this type that can have the
          same ‘name’.  A value of ‘None’ means unlimited.  The
          ‘BaseHeader’ value for this attribute is ‘None’; it is
          expected that specialized header classes will override this
          value as needed.

     ‘BaseHeader’ also provides the following method, which is called by
     the email library code and should not in general be called by
     application programs:

      -- Método: fold (*, policy)

          Return a string containing *note linesep: 37c2. characters as
          required to correctly fold the header according to 'policy'.
          A *note cte_type: 37ba. of ‘8bit’ will be treated as if it
          were ‘7bit’, since headers may not contain arbitrary binary
          data.  If *note utf8: e24. is ‘False’, non-ASCII data will be
          RFC 2047(4) encoded.

     ‘BaseHeader’ by itself cannot be used to create a header object.
     It defines a protocol that each specialized header cooperates with
     in order to produce the header object.  Specifically, ‘BaseHeader’
     requires that the specialized class provide a *note classmethod():
     166. named ‘parse’.  This method is called as follows:

          parse(string, kwds)

     ‘kwds’ is a dictionary containing one pre-initialized key,
     ‘defects’.  ‘defects’ is an empty list.  The parse method should
     append any detected defects to this list.  On return, the ‘kwds’
     dictionary 'must' contain values for at least the keys ‘decoded’
     and ‘defects’.  ‘decoded’ should be the string value for the header
     (that is, the header value fully decoded to unicode).  The parse
     method should assume that 'string' may contain
     content-transfer-encoded parts, but should correctly handle all
     valid unicode characters as well so that it can parse un-encoded
     header values.

     ‘BaseHeader’’s ‘__new__’ then creates the header instance, and
     calls its ‘init’ method.  The specialized class only needs to
     provide an ‘init’ method if it wishes to set additional attributes
     beyond those provided by ‘BaseHeader’ itself.  Such an ‘init’
     method should look like this:

          def init(self, /, *args, **kw):
              self._myattr = kw.pop('myattr')
              super().init(*args, **kw)

     That is, anything extra that the specialized class puts in to the
     ‘kwds’ dictionary should be removed and handled, and the remaining
     contents of ‘kw’ (and ‘args’) passed to the ‘BaseHeader’ ‘init’
     method.

 -- Classe: email.headerregistry.UnstructuredHeader

     An “unstructured” header is the default type of header in RFC
     5322(5).  Any header that does not have a specified syntax is
     treated as unstructured.  The classic example of an unstructured
     header is the ‘Subject’ header.

     In RFC 5322(6), an unstructured header is a run of arbitrary text
     in the ASCII character set.  RFC 2047(7), however, has an RFC
     5322(8) compatible mechanism for encoding non-ASCII text as ASCII
     characters within a header value.  When a 'value' containing
     encoded words is passed to the constructor, the
     ‘UnstructuredHeader’ parser converts such encoded words into
     unicode, following the RFC 2047(9) rules for unstructured text.
     The parser uses heuristics to attempt to decode certain
     non-compliant encoded words.  Defects are registered in such cases,
     as well as defects for issues such as invalid characters within the
     encoded words or the non-encoded text.

     This header type provides no additional attributes.

 -- Classe: email.headerregistry.DateHeader

     RFC 5322(10) specifies a very specific format for dates within
     email headers.  The ‘DateHeader’ parser recognizes that date
     format, as well as recognizing a number of variant forms that are
     sometimes found “in the wild”.

     This header type provides the following additional attributes:

      -- Atributo: datetime

          If the header value can be recognized as a valid date of one
          form or another, this attribute will contain a *note datetime:
          1cc. instance representing that date.  If the timezone of the
          input date is specified as ‘-0000’ (indicating it is in UTC
          but contains no information about the source timezone), then
          *note datetime: 37fc. will be a naive *note datetime: 1cc.  If
          a specific timezone offset is found (including ‘+0000’), then
          *note datetime: 37fc. will contain an aware ‘datetime’ that
          uses *note datetime.timezone: 10fe. to record the timezone
          offset.

     The ‘decoded’ value of the header is determined by formatting the
     ‘datetime’ according to the RFC 5322(11) rules; that is, it is set
     to:

          email.utils.format_datetime(self.datetime)

     When creating a ‘DateHeader’, 'value' may be *note datetime: 1cc.
     instance.  This means, for example, that the following code is
     valid and does what one would expect:

          msg['Date'] = datetime(2011, 7, 15, 21)

     Because this is a naive ‘datetime’ it will be interpreted as a UTC
     timestamp, and the resulting value will have a timezone of ‘-0000’.
     Much more useful is to use the *note localtime(): 2c4. function
     from the *note utils: 50. module:

          msg['Date'] = utils.localtime()

     This example sets the date header to the current time and date
     using the current timezone offset.

 -- Classe: email.headerregistry.AddressHeader

     Address headers are one of the most complex structured header
     types.  The ‘AddressHeader’ class provides a generic interface to
     any address header.

     This header type provides the following additional attributes:

      -- Atributo: groups

          A tuple of *note Group: 37ff. objects encoding the addresses
          and groups found in the header value.  Addresses that are not
          part of a group are represented in this list as single-address
          ‘Groups’ whose *note display_name: 3800. is ‘None’.

      -- Atributo: addresses

          A tuple of *note Address: 3802. objects encoding all of the
          individual addresses from the header value.  If the header
          value contains any groups, the individual addresses from the
          group are included in the list at the point where the group
          occurs in the value (that is, the list of addresses is
          “flattened” into a one dimensional list).

     The ‘decoded’ value of the header will have all encoded words
     decoded to unicode.  *note idna: 52. encoded domain names are also
     decoded to unicode.  The ‘decoded’ value is set by *note joining:
     2363. the *note str: 44c. value of the elements of the ‘groups’
     attribute with ‘', '’.

     A list of *note Address: 3802. and *note Group: 37ff. objects in
     any combination may be used to set the value of an address header.
     ‘Group’ objects whose ‘display_name’ is ‘None’ will be interpreted
     as single addresses, which allows an address list to be copied with
     groups intact by using the list obtained from the ‘groups’
     attribute of the source header.

 -- Classe: email.headerregistry.SingleAddressHeader

     Uma subclasse de *note AddressHeader: 37fd. que adiciona um
     atributo adicional:

      -- Atributo: address

          The single address encoded by the header value.  If the header
          value actually contains more than one address (which would be
          a violation of the RFC under the default *note policy: 4f.),
          accessing this attribute will result in a *note ValueError:
          202.

Many of the above classes also have a ‘Unique’ variant (for example,
‘UniqueUnstructuredHeader’).  The only difference is that in the
‘Unique’ variant, *note max_count: 37d1. is set to 1.

 -- Classe: email.headerregistry.MIMEVersionHeader

     There is really only one valid value for the ‘MIME-Version’ header,
     and that is ‘1.0’.  For future proofing, this header class supports
     other valid version numbers.  If a version number has a valid value
     per RFC 2045(12), then the header object will have non-‘None’
     values for the following attributes:

      -- Atributo: version

          The version number as a string, with any whitespace and/or
          comments removed.

      -- Atributo: major

          The major version number as an integer

      -- Atributo: minor

          The minor version number as an integer

 -- Classe: email.headerregistry.ParameterizedMIMEHeader

     MIME headers all start with the prefix ‘Content-’.  Each specific
     header has a certain value, described under the class for that
     header.  Some can also take a list of supplemental parameters,
     which have a common format.  This class serves as a base for all
     the MIME headers that take parameters.

      -- Atributo: params

          A dictionary mapping parameter names to parameter values.

 -- Classe: email.headerregistry.ContentTypeHeader

     A *note ParameterizedMIMEHeader: 3809. class that handles the
     ‘Content-Type’ header.

      -- Atributo: content_type

          The content type string, in the form ‘maintype/subtype’.

      -- Atributo: maintype

      -- Atributo: subtype

 -- Classe: email.headerregistry.ContentDispositionHeader

     Uma classe *note ParameterizedMIMEHeader: 3809. que lida com o
     cabeçalho ‘Content-Disposition’.

      -- Atributo: content_disposition

          ‘inline’ and ‘attachment’ are the only valid values in common
          use.

 -- Classe: email.headerregistry.ContentTransferEncodingHeader

     Handles the ‘Content-Transfer-Encoding’ header.

      -- Atributo: cte

          Valid values are ‘7bit’, ‘8bit’, ‘base64’, and
          ‘quoted-printable’.  See RFC 2045(13) for more information.

 -- Classe: email.headerregistry.HeaderRegistry (base_class=BaseHeader,
          default_class=UnstructuredHeader, use_default_map=True)

     This is the factory used by *note EmailPolicy: 10f6. by default.
     ‘HeaderRegistry’ builds the class used to create a header instance
     dynamically, using 'base_class' and a specialized class retrieved
     from a registry that it holds.  When a given header name does not
     appear in the registry, the class specified by 'default_class' is
     used as the specialized class.  When 'use_default_map' is ‘True’
     (the default), the standard mapping of header names to classes is
     copied in to the registry during initialization.  'base_class' is
     always the last class in the generated class’s *note __bases__:
     14f4. list.

     The default mappings are:


          subject: UniqueUnstructuredHeader


          date: UniqueDateHeader


          resent-date: DateHeader


          orig-date: UniqueDateHeader


          sender: UniqueSingleAddressHeader


          resent-sender: SingleAddressHeader


          to: UniqueAddressHeader


          resent-to: AddressHeader


          cc: UniqueAddressHeader


          resent-cc: AddressHeader


          bcc: UniqueAddressHeader


          resent-bcc: AddressHeader


          from: UniqueAddressHeader


          resent-from: AddressHeader


          reply-to: UniqueAddressHeader


          mime-version: MIMEVersionHeader


          content-type: ContentTypeHeader


          content-disposition: ContentDispositionHeader


          content-transfer-encoding: ContentTransferEncodingHeader


          message-id: MessageIDHeader

     ‘HeaderRegistry’ has the following methods:

      -- Método: map_to_type (self, name, cls)

          'name' is the name of the header to be mapped.  It will be
          converted to lower case in the registry.  'cls' is the
          specialized class to be used, along with 'base_class', to
          create the class used to instantiate headers that match
          'name'.

      -- Método: __getitem__ (name)

          Construct and return a class to handle creating a 'name'
          header.

      -- Método: __call__ (name, value)

          Retrieves the specialized header associated with 'name' from
          the registry (using 'default_class' if 'name' does not appear
          in the registry) and composes it with 'base_class' to produce
          a class, calls the constructed class’s constructor, passing it
          the same argument list, and finally returns the class instance
          created thereby.

The following classes are the classes used to represent data parsed from
structured headers and can, in general, be used by an application
program to construct structured values to assign to specific headers.

 -- Classe: email.headerregistry.Address (display_name='', username='',
          domain='', addr_spec=None)

     The class used to represent an email address.  The general form of
     an address is:

          [display_name] <username@domain>

     ou:

          username@domain

     where each part must conform to specific syntax rules spelled out
     in RFC 5322(14).

     As a convenience 'addr_spec' can be specified instead of 'username'
     and 'domain', in which case 'username' and 'domain' will be parsed
     from the 'addr_spec'.  An 'addr_spec' must be a properly RFC quoted
     string; if it is not ‘Address’ will raise an error.  Unicode
     characters are allowed and will be property encoded when
     serialized.  However, per the RFCs, unicode is 'not' allowed in the
     username portion of the address.

      -- Atributo: display_name

          The display name portion of the address, if any, with all
          quoting removed.  If the address does not have a display name,
          this attribute will be an empty string.

      -- Atributo: username

          The ‘username’ portion of the address, with all quoting
          removed.

      -- Atributo: domain

          The ‘domain’ portion of the address.

      -- Atributo: addr_spec

          The ‘username@domain’ portion of the address, correctly quoted
          for use as a bare address (the second form shown above).  This
          attribute is not mutable.

      -- Método: __str__ ()

          The ‘str’ value of the object is the address quoted according
          to RFC 5322(15) rules, but with no Content Transfer Encoding
          of any non-ASCII characters.

     To support SMTP ( RFC 5321(16)), ‘Address’ handles one special
     case: if ‘username’ and ‘domain’ are both the empty string (or
     ‘None’), then the string value of the ‘Address’ is ‘<>’.

 -- Classe: email.headerregistry.Group (display_name=None,
          addresses=None)

     The class used to represent an address group.  The general form of
     an address group is:

          display_name: [address-list];

     As a convenience for processing lists of addresses that consist of
     a mixture of groups and single addresses, a ‘Group’ may also be
     used to represent single addresses that are not part of a group by
     setting 'display_name' to ‘None’ and providing a list of the single
     address as 'addresses'.

      -- Atributo: display_name

          The ‘display_name’ of the group.  If it is ‘None’ and there is
          exactly one ‘Address’ in ‘addresses’, then the ‘Group’
          represents a single address that is not in a group.

      -- Atributo: addresses

          A possibly empty tuple of *note Address: 3802. objects
          representing the addresses in the group.

      -- Método: __str__ ()

          The ‘str’ value of a ‘Group’ is formatted according to RFC
          5322(17), but with no Content Transfer Encoding of any
          non-ASCII characters.  If ‘display_name’ is none and there is
          a single ‘Address’ in the ‘addresses’ list, the ‘str’ value
          will be the same as the ‘str’ of that single ‘Address’.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/email/headerregistry.py

   (2) Originally added in 3.3 as a *note provisional module: 107a.

   (3) https://datatracker.ietf.org/doc/html/rfc5322.html

   (4) https://datatracker.ietf.org/doc/html/rfc2047.html

   (5) https://datatracker.ietf.org/doc/html/rfc5322.html

   (6) https://datatracker.ietf.org/doc/html/rfc5322.html

   (7) https://datatracker.ietf.org/doc/html/rfc2047.html

   (8) https://datatracker.ietf.org/doc/html/rfc5322.html

   (9) https://datatracker.ietf.org/doc/html/rfc2047.html

   (10) https://datatracker.ietf.org/doc/html/rfc5322.html

   (11) https://datatracker.ietf.org/doc/html/rfc5322.html

   (12) https://datatracker.ietf.org/doc/html/rfc2045.html

   (13) https://datatracker.ietf.org/doc/html/rfc2045.html

   (14) https://datatracker.ietf.org/doc/html/rfc5322.html

   (15) https://datatracker.ietf.org/doc/html/rfc5322.html

   (16) https://datatracker.ietf.org/doc/html/rfc5321.html

   (17) https://datatracker.ietf.org/doc/html/rfc5322.html


File: python.info,  Node: email contentmanager Gerenciando conteúdo MIME,  Next: email Exemplos,  Prev: email headerregistry Custom Header Objects,  Up: email — Um e-mail e um pacote MIME manipulável

5.20.1.10 ‘email.contentmanager’: Gerenciando conteúdo MIME
...........................................................

'Código-fonte:' Lib/email/contentmanager.py(1)

__________________________________________________________________

Adicionado na versão 3.6: (2)

 -- Classe: email.contentmanager.ContentManager

     Classe base para gerenciadores de conteúdo.  Fornece os mecanismos
     de registro padrão para registrar conversores entre conteúdo MIME e
     outras representações, bem como os métodos de despacho
     ‘get_content’ e ‘set_content’.

      -- Método: get_content (msg, *args, **kw)

          Procura uma função manipuladora baseada no ‘mimetype’ de 'msg'
          (veja o próximo parágrafo), chama-a, passando por todos os
          argumentos, e retorna o resultado da chamada.  A expectativa é
          que a função manipuladora extraia o payload de 'msg' e retorne
          um objeto que codifique informações sobre os dados extraídos.

          Para encontrar o manipulador, procura as seguintes chaves no
          registro, parando na primeira encontrada:

             * a string que representa o tipo MIME completo
               (‘maintype/subtype’)

             * the string representing the ‘maintype’

             * the empty string

          If none of these keys produce a handler, raise a *note
          KeyError: 344. for the full MIME type.

      -- Método: set_content (msg, obj, *args, **kw)

          If the ‘maintype’ is ‘multipart’, raise a *note TypeError:
          2c3.; otherwise look up a handler function based on the type
          of 'obj' (see next paragraph), call *note clear_content():
          37a1. on the 'msg', and call the handler function, passing
          through all arguments.  The expectation is that the handler
          will transform and store 'obj' into 'msg', possibly making
          other changes to 'msg' as well, such as adding various MIME
          headers to encode information needed to interpret the stored
          data.

          To find the handler, obtain the type of 'obj' (‘typ =
          type(obj)’), and look for the following keys in the registry,
          stopping with the first one found:

             * the type itself (‘typ’)

             * the type’s fully qualified name (‘typ.__module__ + '.' +
               typ.__qualname__’).

             * the type’s *note qualname: 20b6. (‘typ.__qualname__’)

             * the type’s *note name: 14f3. (‘typ.__name__’).

          If none of the above match, repeat all of the checks above for
          each of the types in the *note MRO: 15c0. (*note typ.__mro__:
          20bb.).  Finally, if no other key yields a handler, check for
          a handler for the key ‘None’.  If there is no handler for
          ‘None’, raise a *note KeyError: 344. for the fully qualified
          name of the type.

          Also add a ‘MIME-Version’ header if one is not present (see
          also *note MIMEPart: f6d.).

      -- Método: add_get_handler (key, handler)

          Record the function 'handler' as the handler for 'key'.  For
          the possible values of 'key', see *note get_content(): 3821.

      -- Método: add_set_handler (typekey, handler)

          Record 'handler' as the function to call when an object of a
          type matching 'typekey' is passed to *note set_content():
          3823.  For the possible values of 'typekey', see *note
          set_content(): 3823.

* Menu:

* Content Manager Instances::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/email/contentmanager.py

   (2) Originally added in 3.4 as a *note provisional module: 107a.


File: python.info,  Node: Content Manager Instances,  Up: email contentmanager Gerenciando conteúdo MIME

5.20.1.11 Content Manager Instances
...................................

Currently the email package provides only one concrete content manager,
*note raw_data_manager: 37cf, although more may be added in the future.
*note raw_data_manager: 37cf. is the *note content_manager: f6e.
provided by *note EmailPolicy: 10f6. and its derivatives.

 -- Dado: email.contentmanager.raw_data_manager

     This content manager provides only a minimum interface beyond that
     provided by *note Message: 27c. itself: it deals only with text,
     raw byte strings, and *note Message: 27c. objects.  Nevertheless,
     it provides significant advantages compared to the base API:
     ‘get_content’ on a text part will return a unicode string without
     the application needing to manually decode it, ‘set_content’
     provides a rich set of options for controlling the headers added to
     a part and controlling the content transfer encoding, and it
     enables the use of the various ‘add_’ methods, thereby simplifying
     the creation of multipart messages.

      -- Método: email.contentmanager.get_content (msg,
               errors='replace')

          Return the payload of the part as either a string (for ‘text’
          parts), an *note EmailMessage: 27b. object (for
          ‘message/rfc822’ parts), or a ‘bytes’ object (for all other
          non-multipart types).  Raise a *note KeyError: 344. if called
          on a ‘multipart’.  If the part is a ‘text’ part and 'errors'
          is specified, use it as the error handler when decoding the
          payload to unicode.  The default error handler is ‘replace’.

      -- Método: email.contentmanager.set_content (msg, <'str'>,
               subtype="plain", charset='utf-8', cte=None,
               disposition=None, filename=None, cid=None, params=None,
               headers=None)

      -- Método: email.contentmanager.set_content (msg, <'bytes'>,
               maintype, subtype, cte="base64", disposition=None,
               filename=None, cid=None, params=None, headers=None)

      -- Método: email.contentmanager.set_content (msg,
               <'EmailMessage'>, cte=None, disposition=None,
               filename=None, cid=None, params=None, headers=None)

          Adicione headers e payload à 'msg':

          Add a ‘Content-Type’ header with a ‘maintype/subtype’ value.

             * For ‘str’, set the MIME ‘maintype’ to ‘text’, and set the
               subtype to 'subtype' if it is specified, or ‘plain’ if it
               is not.

             * For ‘bytes’, use the specified 'maintype' and 'subtype',
               or raise a *note TypeError: 2c3. if they are not
               specified.

             * For *note EmailMessage: 27b. objects, set the maintype to
               ‘message’, and set the subtype to 'subtype' if it is
               specified or ‘rfc822’ if it is not.  If 'subtype' is
               ‘partial’, raise an error (‘bytes’ objects must be used
               to construct ‘message/partial’ parts).

          If 'charset' is provided (which is valid only for ‘str’),
          encode the string to bytes using the specified character set.
          The default is ‘utf-8’.  If the specified 'charset' is a known
          alias for a standard MIME charset name, use the standard
          charset instead.

          If 'cte' is set, encode the payload using the specified
          content transfer encoding, and set the
          ‘Content-Transfer-Encoding’ header to that value.  Possible
          values for 'cte' are ‘quoted-printable’, ‘base64’, ‘7bit’,
          ‘8bit’, and ‘binary’.  If the input cannot be encoded in the
          specified encoding (for example, specifying a 'cte' of ‘7bit’
          for an input that contains non-ASCII values), raise a *note
          ValueError: 202.

             * For ‘str’ objects, if 'cte' is not set use heuristics to
               determine the most compact encoding.  Prior to encoding,
               *note str.splitlines(): 1298. is used to normalize all
               line boundaries, ensuring that each line of the payload
               is terminated by the current policy’s *note linesep:
               37c2. property (even if the original string did not end
               with one).

             * For ‘bytes’ objects, 'cte' is taken to be base64 if not
               set, and the aforementioned newline translation is not
               performed.

             * For *note EmailMessage: 27b, per RFC 2046(1), raise an
               error if a 'cte' of ‘quoted-printable’ or ‘base64’ is
               requested for 'subtype' ‘rfc822’, and for any 'cte' other
               than ‘7bit’ for 'subtype' ‘external-body’.  For
               ‘message/rfc822’, use ‘8bit’ if 'cte' is not specified.
               For all other values of 'subtype', use ‘7bit’.

               Nota: A 'cte' of ‘binary’ does not actually work
               correctly yet.  The ‘EmailMessage’ object as modified by
               ‘set_content’ is correct, but *note BytesGenerator: 120f.
               does not serialize it correctly.

          If 'disposition' is set, use it as the value of the
          ‘Content-Disposition’ header.  If not specified, and
          'filename' is specified, add the header with the value
          ‘attachment’.  If 'disposition' is not specified and
          'filename' is also not specified, do not add the header.  The
          only valid values for 'disposition' are ‘attachment’ and
          ‘inline’.

          If 'filename' is specified, use it as the value of the
          ‘filename’ parameter of the ‘Content-Disposition’ header.

          If 'cid' is specified, add a ‘Content-ID’ header with 'cid' as
          its value.

          If 'params' is specified, iterate its ‘items’ method and use
          the resulting ‘(key, value)’ pairs to set additional
          parameters on the ‘Content-Type’ header.

          If 'headers' is specified and is a list of strings of the form
          ‘headername: headervalue’ or a list of ‘header’ objects
          (distinguished from strings by having a ‘name’ attribute), add
          the headers to 'msg'.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2046.html


File: python.info,  Node: email Exemplos,  Next: email message Message Representing an email message using the compat32 API,  Prev: email contentmanager Gerenciando conteúdo MIME,  Up: email — Um e-mail e um pacote MIME manipulável

5.20.1.12 ‘email’: Exemplos
...........................

Aqui estão alguns exemplos de como usar o pacote *note email: 3b. para
ler, escrever e enviar mensagens de e-mail simples, bem como mensagens
MIME mais complexas.

Primeiro, vamos ver como criar e enviar uma mensagem de texto simples
(tanto o conteúdo do texto quanto os endereços podem conter caracteres
Unicode):

     # Importa smtplib para a função de envio
     import smtplib

     # Importa os módulos de email que precisamos
     from email.message import EmailMessage

     # Abre o arquivo de texto simples cujo nome está em arquivo texto para leitura.
     with open(textfile) as fp:
         # Create a text/plain message
         msg = EmailMessage()
         msg.set_content(fp.read())

     # me == o endereço de e-mail do remetente
     # you == o endereço de e-mail do destinatário
     msg['Subject'] = f'The contents of {textfile}'
     msg['From'] = me
     msg['To'] = you

     # Envia a mensagem via nosso próprio servidor SMTP.
     s = smtplib.SMTP('localhost')
     s.send_message(msg)
     s.quit()

A análise dos cabeçalhos RFC 822(1) pode ser feita facilmente usando as
classes do módulo *note parser: 4e.:

     # Importa os módulos de email que precisamos
     #from email.parser import BytesParser
     from email.parser import Parser
     from email.policy import default

     # Se os cabeçalhos de e-mal estão em um arquivo, descomente essas duas linhas:
     # with open(messagefile, 'rb') as fp:
     #     headers = BytesParser(policy=default).parse(fp)

     #  Ou para análise de cabeçalhos em uma string (essa é uma operação comum), use:
     headers = Parser(policy=default).parsestr(
             'From: Foo Bar <user@example.com>\n'
             'To: <someone_else@example.com>\n'
             'Subject: Test message\n'
             '\n'
             'Body would go here\n')

     #  Agora os itens de cabeçalho podem ser acessadas como um dicionário:
     print('To: {}'.format(headers['to']))
     print('From: {}'.format(headers['from']))
     print('Subject: {}'.format(headers['subject']))

     # Você também pode acessar as partes dos endereços:
     print('Recipient username: {}'.format(headers['to'].addresses[0].username))
     print('Sender name: {}'.format(headers['from'].addresses[0].display_name))

Aqui está um exemplo de como enviar uma mensagem MIME contendo várias
fotos de família que podem estar em um diretório:

     # Importa smtplib para a função de envio.
     import smtplib

     # Aqui estão os módulos de pacotes de e-mail que precisamos.
     from email.message import EmailMessage

     # Cria a contêiner da mensagem de e-mail.
     msg = EmailMessage()
     msg['Subject'] = 'Our family reunion'
     # me == o endereço de e-mail do remetente
     # family = a lista dos endereços de e-mail de todos os destinatários
     msg['From'] = me
     msg['To'] = ', '.join(family)
     msg.preamble = 'You will not see this in a MIME-aware mail reader.\n'

     # Abre os arquivos no modo binário. Você também pode omitir
     # o subtipo se você quiser que MIMEImage adivinhe.
     for file in pngfiles:
         with open(file, 'rb') as fp:
             img_data = fp.read()
         msg.add_attachment(img_data, maintype='image',
                                      subtype='png')

     # Envia o e-mail por meio de nosso próprio servidor SMTP.
     with smtplib.SMTP('localhost') as s:
         s.send_message(msg)

Aqui está um exemplo de como enviar todo o conteúdo de um diretório como
uma mensagem de e-mail: (2)

     #!/usr/bin/env python3

     """Envia o conteúdo de um diretório como uma mensagem MIME."""

     import os
     import smtplib
     # Para adivinhar o tipo MIME com base na extensão do nome do arquivo
     import mimetypes

     from argparse import ArgumentParser

     from email.message import EmailMessage
     from email.policy import SMTP


     def main():
         parser = ArgumentParser(description="""\
     Envia o conteúdo de um diretório como uma mensagem MIME.
     A menos que a opção -o seja informada, o e-mail será enviado por
     meio de encaminhamento para o seu servidor SMTP local, que então
     realiza o processo de entrega normal. Sua máquina local deve estar
     executando um servidor SMTP.
     """)
         parser.add_argument('-d', '--directory',
                             help="""Mail the contents of the specified directory,
                             otherwise use the current directory.  Only the regular
                             files in the directory are sent, and we don't recurse to
                             subdirectories.""")
         parser.add_argument('-o', '--output',
                             metavar='FILE',
                             help="""Print the composed message to FILE instead of
                             sending the message to the SMTP server.""")
         parser.add_argument('-s', '--sender', required=True,
                             help='The value of the From: header (required)')
         parser.add_argument('-r', '--recipient', required=True,
                             action='append', metavar='RECIPIENT',
                             default=[], dest='recipients',
                             help='A To: header value (at least one required)')
         args = parser.parse_args()
         directory = args.directory
         if not directory:
             directory = '.'
         # Cria a mensagem
         msg = EmailMessage()
         msg['Subject'] = f'Contents of directory {os.path.abspath(directory)}'
         msg['To'] = ', '.join(args.recipients)
         msg['From'] = args.sender
         msg.preamble = 'You will not see this in a MIME-aware mail reader.\n'

         for filename in os.listdir(directory):
             path = os.path.join(directory, filename)
             if not os.path.isfile(path):
                 continue
             # Adivinhe o tipo de conteúdo com base na extensão do arquivo.
             # A codificação será ignorada, embora devamos verificar coisas
             # simples como arquivos compactados ou compactados com gzip.
             ctype, encoding = mimetypes.guess_file_type(path)
             if ctype is None or encoding is not None:
                 # Não foi possível fazer nenhuma suposição, ou o arquivo está
                 # codificado (compactado), então use um tipo genérico de
                 # conjunto de bits.
                 ctype = 'application/octet-stream'
             maintype, subtype = ctype.split('/', 1)
             with open(path, 'rb') as fp:
                 msg.add_attachment(fp.read(),
                                    maintype=maintype,
                                    subtype=subtype,
                                    filename=filename)
         # Agora envia ou armazena a mensagem
         if args.output:
             with open(args.output, 'wb') as fp:
                 fp.write(msg.as_bytes(policy=SMTP))
         else:
             with smtplib.SMTP('localhost') as s:
                 s.send_message(msg)


     if __name__ == '__main__':
         main()

Aqui está um exemplo de como desempacotar uma mensagem MIME, como a
acima, para um diretório de arquivos:

     #!/usr/bin/env python3

     """Desempacota uma mensagem MIME em um diretório de arquivos."""

     import os
     import email
     import mimetypes

     from email.policy import default

     from argparse import ArgumentParser


     def main():
         parser = ArgumentParser(description="""\
     Desempacota uma mensagem MIME em um diretório de arquivos.
     """)
         parser.add_argument('-d', '--directory', required=True,
                             help="""Unpack the MIME message into the named
                             directory, which will be created if it doesn't already
                             exist.""")
         parser.add_argument('msgfile')
         args = parser.parse_args()

         with open(args.msgfile, 'rb') as fp:
             msg = email.message_from_binary_file(fp, policy=default)

         try:
             os.mkdir(args.directory)
         except FileExistsError:
             pass

         counter = 1
         for part in msg.walk():
             # multipart/* são apenas contêineres
             if part.get_content_maintype() == 'multipart':
                 continue
             # Os aplicativos realmente devem higienizar o nome de arquivo
             # fornecido para que uma mensagem de e-mail não possa ser
             # usada para substituir arquivos importantes
             filename = part.get_filename()
             if not filename:
                 ext = mimetypes.guess_extension(part.get_content_type())
                 if not ext:
                     # Usa uma extensão genérica de conjunto de bits
                     ext = '.bin'
                 filename = f'part-{counter:03d}{ext}'
             counter += 1
             with open(os.path.join(args.directory, filename), 'wb') as fp:
                 fp.write(part.get_payload(decode=True))


     if __name__ == '__main__':
         main()

Aqui está um exemplo de como criar uma mensagem HTML com uma versão
alternativa em texto simples.  Para tornar as coisas um pouco mais
interessantes, incluímos uma imagem relacionada na parte html e salvamos
uma cópia do que vamos enviar para o disco, assim como enviamos.

     #!/usr/bin/env python3

     import smtplib

     from email.message import EmailMessage
     from email.headerregistry import Address
     from email.utils import make_msgid

     # Cria a mensagem texto base.
     msg = EmailMessage()
     msg['Subject'] = "Pourquoi pas des asperges pour ce midi ?"
     msg['From'] = Address("Pepé Le Pew", "pepe", "example.com")
     msg['To'] = (Address("Penelope Pussycat", "penelope", "example.com"),
                  Address("Fabrette Pussycat", "fabrette", "example.com"))
     msg.set_content("""\
     Salut!

     Cette recette [1] sera sûrement un très bon repas.

     [1] http://www.yummly.com/recipe/Roasted-Asparagus-Epicurious-203718

     --Pepé
     """)

     # Adiciona a versão HTML. Isso converte a mensagem em um contêiner
     # multiparte/alternativo, com a mensagem de texto original como a primeira
     # parte e a nova mensagem HTML como a segunda parte.
     asparagus_cid = make_msgid()
     msg.add_alternative("""\
     <html>
       <head></head>
       <body>
         <p>Salut!</p>
         <p>Cette
             <a href="http://www.yummly.com/recipe/Roasted-Asparagus-Epicurious-203718">
                 recette
             </a> sera sûrement un très bon repas.
         </p>
         <img src="cid:{asparagus_cid}">
       </body>
     </html>
     """.format(asparagus_cid=asparagus_cid[1:-1]), subtype='html')
     # observe que precisamos remover o <> do msgid para usar no html.

     # Agora adiciona a imagem relacionada à parte html.
     with open("roasted-asparagus.jpg", 'rb') as img:
         msg.get_payload()[1].add_related(img.read(), 'image', 'jpeg',
                                          cid=asparagus_cid)

     # Agora adiciona a imagem relacionada à parte html.
     with open('outgoing.msg', 'wb') as f:
         f.write(bytes(msg))

     # Envia a mensagem via servidor SMTP local.
     with smtplib.SMTP('localhost') as s:
         s.send_message(msg)

Se nos fosse enviada a mensagem do último exemplo, aqui está uma maneira
de processá-la:

     import os
     import sys
     import tempfile
     import mimetypes
     import webbrowser

     # Importa os módulos de e-mail que precisaremos
     from email import policy
     from email.parser import BytesParser


     def magic_html_parser(html_text, partfiles):
         """Retorna HTML com segurança e link para partfiles.

         Reescreve os atributos href="cid:...." para apontar aos arquivos em partfiles.
         Embora não seja trivial, isso deve ser possível usando html.parser.
         """
         raise NotImplementedError("Add the magic needed")


     # Em um programa real, você pegaria o nome de arquivo a partir dos argumentos.
     with open('outgoing.msg', 'rb') as fp:
         msg = BytesParser(policy=policy.default).parse(fp)

     # Agora os itens de cabeçalho podem ser acessados como um dicionário e
     # qualquer caractere não-ASCII será convertido para unicode:
     print('To:', msg['to'])
     print('From:', msg['from'])
     print('Subject:', msg['subject'])

     # Se quisermos imprimir uma prévia do conteúdo da mensagem, podemos
     # extrair o conteúdo menos formatado e imprimir as três primeiras linhas.
     # É claro que, se a mensagem não tiver uma parte de texto simples,
     # imprimir as três primeiras linhas de HTML provavelmente será inútil,
     # mas este é apenas um exemplo conceitual.
     simplest = msg.get_body(preferencelist=('plain', 'html'))
     print()
     print(''.join(simplest.get_content().splitlines(keepends=True)[:3]))

     ans = input("View full message?")
     if ans.lower()[0] == 'n':
         sys.exit()

     # Podemos extrair a alternativa richest para exibi-la:
     richest = msg.get_body()
     partfiles = {}
     if richest['content-type'].maintype == 'text':
         if richest['content-type'].subtype == 'plain':
             for line in richest.get_content().splitlines():
                 print(line)
             sys.exit()
         elif richest['content-type'].subtype == 'html':
             body = richest
         else:
             print("Don't know how to display {}".format(richest.get_content_type()))
             sys.exit()
     elif richest['content-type'].content_type == 'multipart/related':
         body = richest.get_body(preferencelist=('html'))
         for part in richest.iter_attachments():
             fn = part.get_filename()
             if fn:
                 extension = os.path.splitext(part.get_filename())[1]
             else:
                 extension = mimetypes.guess_extension(part.get_content_type())
             with tempfile.NamedTemporaryFile(suffix=extension, delete=False) as f:
                 f.write(part.get_content())
                 # remove novamente o <> para ir da forma email de cid para html.
                 partfiles[part['content-id'][1:-1]] = f.name
     else:
         print("Don't know how to display {}".format(richest.get_content_type()))
         sys.exit()
     with tempfile.NamedTemporaryFile(mode='w', delete=False) as f:
         f.write(magic_html_parser(body.get_content(), partfiles))
     webbrowser.open(f.name)
     os.remove(f.name)
     for fn in partfiles.values():
         os.remove(fn)

     # É claro que há muitas mensagens de e-mail que podem quebrar
     # esse simples programa, mas ele lidará com as mais comuns.

Até o prompt, a saída do comando acima é:

     To: Penelope Pussycat <penelope@example.com>, Fabrette Pussycat <fabrette@example.com>
     From: Pepé Le Pew <pepe@example.com>
     Subject: Pourquoi pas des asperges pour ce midi ?

     Salut!

     Cette recette [1] sera sûrement un très bon repas.

API legada

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc822.html

   (2) Obrigado a Matthew Dixon Cowles pela inspiração original e pelos
exemplos.


File: python.info,  Node: email message Message Representing an email message using the compat32 API,  Next: email mimeemail mime Criando e-mail e objetos MIME do zero,  Prev: email Exemplos,  Up: email — Um e-mail e um pacote MIME manipulável

5.20.1.13 ‘email.message.Message’: Representing an email message using the ‘compat32’ API
.........................................................................................

The *note Message: 27c. class is very similar to the *note EmailMessage:
27b. class, without the methods added by that class, and with the
default behavior of certain other methods being slightly different.  We
also document here some methods that, while supported by the *note
EmailMessage: 27b. class, are not recommended unless you are dealing
with legacy code.

The philosophy and structure of the two classes is otherwise the same.

This document describes the behavior under the default (for *note
Message: 27c.) policy *note Compat32: 10f3.  If you are going to use
another policy, you should be using the *note EmailMessage: 27b. class
instead.

An email message consists of 'headers' and a 'payload'.  Headers must be
RFC 5322(1) style names and values, where the field name and value are
separated by a colon.  The colon is not part of either the field name or
the field value.  The payload may be a simple text message, or a binary
object, or a structured sequence of sub-messages each with their own set
of headers and their own payload.  The latter type of payload is
indicated by the message having a MIME type such as ‘multipart/*’ or
‘message/rfc822’.

The conceptual model provided by a *note Message: 27c. object is that of
an ordered dictionary of headers with additional methods for accessing
both specialized information from the headers, for accessing the
payload, for generating a serialized version of the message, and for
recursively walking over the object tree.  Note that duplicate headers
are supported but special methods must be used to access them.

The *note Message: 27c. pseudo-dictionary is indexed by the header
names, which must be ASCII values.  The values of the dictionary are
strings that are supposed to contain only ASCII characters; there is
some special handling for non-ASCII input, but it doesn’t always produce
the correct results.  Headers are stored and returned in case-preserving
form, but field names are matched case-insensitively.  There may also be
a single envelope header, also known as the 'Unix-From' header or the
‘From_’ header.  The 'payload' is either a string or bytes, in the case
of simple message objects, or a list of *note Message: 27c. objects, for
MIME container documents (e.g.  ‘multipart/*’ and ‘message/rfc822’).

Here are the methods of the *note Message: 27c. class:

 -- Classe: email.message.Message (policy=compat32)

     If 'policy' is specified (it must be an instance of a *note policy:
     4f. class) use the rules it specifies to update and serialize the
     representation of the message.  If 'policy' is not set, use the
     *note compat32: 10f3. policy, which maintains backward
     compatibility with the Python 3.2 version of the email package.
     For more information see the *note policy: 4f. documentation.

     Alterado na versão 3.3: The 'policy' keyword argument was added.

      -- Método: as_string (unixfrom=False, maxheaderlen=0, policy=None)

          Return the entire message flattened as a string.  When
          optional 'unixfrom' is true, the envelope header is included
          in the returned string.  'unixfrom' defaults to ‘False’.  For
          backward compatibility reasons, 'maxheaderlen' defaults to
          ‘0’, so if you want a different value you must override it
          explicitly (the value specified for 'max_line_length' in the
          policy will be ignored by this method).  The 'policy' argument
          may be used to override the default policy obtained from the
          message instance.  This can be used to control some of the
          formatting produced by the method, since the specified
          'policy' will be passed to the ‘Generator’.

          Flattening the message may trigger changes to the *note
          Message: 27c. if defaults need to be filled in to complete the
          transformation to a string (for example, MIME boundaries may
          be generated or modified).

          Note that this method is provided as a convenience and may not
          always format the message the way you want.  For example, by
          default it does not do the mangling of lines that begin with
          ‘From’ that is required by the Unix mbox format.  For more
          flexibility, instantiate a *note Generator: 120e. instance and
          use its *note flatten(): 37bc. method directly.  For example:

               from io import StringIO
               from email.generator import Generator
               fp = StringIO()
               g = Generator(fp, mangle_from_=True, maxheaderlen=60)
               g.flatten(msg)
               text = fp.getvalue()

          If the message object contains binary data that is not encoded
          according to RFC standards, the non-compliant data will be
          replaced by unicode “unknown character” code points.  (See
          also *note as_bytes(): f6a. and *note BytesGenerator: 120f.)

          Alterado na versão 3.4: the 'policy' keyword argument was
          added.

      -- Método: __str__ ()

          Equivalent to *note as_string(): f69.  Allows ‘str(msg)’ to
          produce a string containing the formatted message.

      -- Método: as_bytes (unixfrom=False, policy=None)

          Return the entire message flattened as a bytes object.  When
          optional 'unixfrom' is true, the envelope header is included
          in the returned string.  'unixfrom' defaults to ‘False’.  The
          'policy' argument may be used to override the default policy
          obtained from the message instance.  This can be used to
          control some of the formatting produced by the method, since
          the specified 'policy' will be passed to the ‘BytesGenerator’.

          Flattening the message may trigger changes to the *note
          Message: 27c. if defaults need to be filled in to complete the
          transformation to a string (for example, MIME boundaries may
          be generated or modified).

          Note that this method is provided as a convenience and may not
          always format the message the way you want.  For example, by
          default it does not do the mangling of lines that begin with
          ‘From’ that is required by the Unix mbox format.  For more
          flexibility, instantiate a *note BytesGenerator: 120f.
          instance and use its *note flatten(): 37b8. method directly.
          For example:

               from io import BytesIO
               from email.generator import BytesGenerator
               fp = BytesIO()
               g = BytesGenerator(fp, mangle_from_=True, maxheaderlen=60)
               g.flatten(msg)
               text = fp.getvalue()

          Adicionado na versão 3.4.

      -- Método: __bytes__ ()

          Equivalent to *note as_bytes(): f6a.  Allows ‘bytes(msg)’ to
          produce a bytes object containing the formatted message.

          Adicionado na versão 3.4.

      -- Método: is_multipart ()

          Return ‘True’ if the message’s payload is a list of sub-*note
          Message: 27c. objects, otherwise return ‘False’.  When *note
          is_multipart(): 3790. returns ‘False’, the payload should be a
          string object (which might be a CTE encoded binary payload).
          (Note that *note is_multipart(): 3790. returning ‘True’ does
          not necessarily mean that “msg.get_content_maintype() ==
          ‘multipart’” will return the ‘True’.  For example,
          ‘is_multipart’ will return ‘True’ when the *note Message: 27c.
          is of type ‘message/rfc822’.)

      -- Método: set_unixfrom (unixfrom)

          Set the message’s envelope header to 'unixfrom', which should
          be a string.

      -- Método: get_unixfrom ()

          Return the message’s envelope header.  Defaults to ‘None’ if
          the envelope header was never set.

      -- Método: attach (payload)

          Add the given 'payload' to the current payload, which must be
          ‘None’ or a list of *note Message: 27c. objects before the
          call.  After the call, the payload will always be a list of
          *note Message: 27c. objects.  If you want to set the payload
          to a scalar object (e.g.  a string), use *note set_payload():
          382e. instead.

          This is a legacy method.  On the *note EmailMessage: 27b.
          class its functionality is replaced by *note set_content():
          19e8. and the related ‘make’ and ‘add’ methods.

      -- Método: get_payload (i=None, decode=False)

          Return the current payload, which will be a list of *note
          Message: 27c. objects when *note is_multipart(): 3790. is
          ‘True’, or a string when *note is_multipart(): 3790. is
          ‘False’.  If the payload is a list and you mutate the list
          object, you modify the message’s payload in place.

          With optional argument 'i', *note get_payload(): 120d. will
          return the 'i'-th element of the payload, counting from zero,
          if *note is_multipart(): 3790. is ‘True’.  An *note
          IndexError: 157e. will be raised if 'i' is less than 0 or
          greater than or equal to the number of items in the payload.
          If the payload is a string (i.e.  *note is_multipart(): 3790.
          is ‘False’) and 'i' is given, a *note TypeError: 2c3. is
          raised.

          Optional 'decode' is a flag indicating whether the payload
          should be decoded or not, according to the
          ‘Content-Transfer-Encoding’ header.  When ‘True’ and the
          message is not a multipart, the payload will be decoded if
          this header’s value is ‘quoted-printable’ or ‘base64’.  If
          some other encoding is used, or ‘Content-Transfer-Encoding’
          header is missing, the payload is returned as-is (undecoded).
          In all cases the returned value is binary data.  If the
          message is a multipart and the 'decode' flag is ‘True’, then
          ‘None’ is returned.  If the payload is base64 and it was not
          perfectly formed (missing padding, characters outside the
          base64 alphabet), then an appropriate defect will be added to
          the message’s defect property (*note
          InvalidBase64PaddingDefect: 37ef. or *note
          InvalidBase64CharactersDefect: 37f0, respectively).

          When 'decode' is ‘False’ (the default) the body is returned as
          a string without decoding the ‘Content-Transfer-Encoding’.
          However, for a ‘Content-Transfer-Encoding’ of 8bit, an attempt
          is made to decode the original bytes using the ‘charset’
          specified by the ‘Content-Type’ header, using the ‘replace’
          error handler.  If no ‘charset’ is specified, or if the
          ‘charset’ given is not recognized by the email package, the
          body is decoded using the default ASCII charset.

          This is a legacy method.  On the *note EmailMessage: 27b.
          class its functionality is replaced by *note get_content():
          3796. and *note iter_parts(): 3795.

      -- Método: set_payload (payload, charset=None)

          Set the entire message object’s payload to 'payload'.  It is
          the client’s responsibility to ensure the payload invariants.
          Optional 'charset' sets the message’s default character set;
          see *note set_charset(): 382f. for details.

          This is a legacy method.  On the *note EmailMessage: 27b.
          class its functionality is replaced by *note set_content():
          19e8.

      -- Método: set_charset (charset)

          Set the character set of the payload to 'charset', which can
          either be a *note Charset: e26. instance (see *note
          email.charset: 3c.), a string naming a character set, or
          ‘None’.  If it is a string, it will be converted to a *note
          Charset: e26. instance.  If 'charset' is ‘None’, the ‘charset’
          parameter will be removed from the ‘Content-Type’ header (the
          message will not be otherwise modified).  Anything else will
          generate a *note TypeError: 2c3.

          If there is no existing ‘MIME-Version’ header one will be
          added.  If there is no existing ‘Content-Type’ header, one
          will be added with a value of ‘text/plain’.  Whether the
          ‘Content-Type’ header already exists or not, its ‘charset’
          parameter will be set to 'charset.output_charset'.  If
          'charset.input_charset' and 'charset.output_charset' differ,
          the payload will be re-encoded to the 'output_charset'.  If
          there is no existing ‘Content-Transfer-Encoding’ header, then
          the payload will be transfer-encoded, if needed, using the
          specified *note Charset: e26, and a header with the
          appropriate value will be added.  If a
          ‘Content-Transfer-Encoding’ header already exists, the payload
          is assumed to already be correctly encoded using that
          ‘Content-Transfer-Encoding’ and is not modified.

          This is a legacy method.  On the *note EmailMessage: 27b.
          class its functionality is replaced by the 'charset' parameter
          of the *note email.message.EmailMessage.set_content(): 19e8.
          method.

      -- Método: get_charset ()

          Return the *note Charset: e26. instance associated with the
          message’s payload.

          This is a legacy method.  On the *note EmailMessage: 27b.
          class it always returns ‘None’.

     The following methods implement a mapping-like interface for
     accessing the message’s RFC 2822(2) headers.  Note that there are
     some semantic differences between these methods and a normal
     mapping (i.e.  dictionary) interface.  For example, in a dictionary
     there are no duplicate keys, but here there may be duplicate
     message headers.  Also, in dictionaries there is no guaranteed
     order to the keys returned by *note keys(): 3831, but in a *note
     Message: 27c. object, headers are always returned in the order they
     appeared in the original message, or were added to the message
     later.  Any header deleted and then re-added are always appended to
     the end of the header list.

     These semantic differences are intentional and are biased toward
     maximal convenience.

     Note that in all cases, any envelope header present in the message
     is not included in the mapping interface.

     In a model generated from bytes, any header values that (in
     contravention of the RFCs) contain non-ASCII bytes will, when
     retrieved through this interface, be represented as *note Header:
     19e9. objects with a charset of ‘unknown-8bit’.

      -- Método: __len__ ()

          Return the total number of headers, including duplicates.

      -- Método: __contains__ (name)

          Return ‘True’ if the message object has a field named 'name'.
          Matching is done case-insensitively and 'name' should not
          include the trailing colon.  Used for the ‘in’ operator, e.g.:

               if 'message-id' in myMessage:
                  print('Message-ID:', myMessage['message-id'])

      -- Método: __getitem__ (name)

          Return the value of the named header field.  'name' should not
          include the colon field separator.  If the header is missing,
          ‘None’ is returned; a *note KeyError: 344. is never raised.

          Note that if the named field appears more than once in the
          message’s headers, exactly which of those field values will be
          returned is undefined.  Use the *note get_all(): 3834. method
          to get the values of all the extant named headers.

      -- Método: __setitem__ (name, val)

          Add a header to the message with field name 'name' and value
          'val'.  The field is appended to the end of the message’s
          existing fields.

          Note that this does 'not' overwrite or delete any existing
          header with the same name.  If you want to ensure that the new
          header is the only one present in the message with field name
          'name', delete the field first, e.g.:

               del msg['subject']
               msg['subject'] = 'Python roolz!'

      -- Método: __delitem__ (name)

          Delete all occurrences of the field with name 'name' from the
          message’s headers.  No exception is raised if the named field
          isn’t present in the headers.

      -- Método: keys ()

          Return a list of all the message’s header field names.

      -- Método: values ()

          Return a list of all the message’s field values.

      -- Método: items ()

          Return a list of 2-tuples containing all the message’s field
          headers and values.

      -- Método: get (name, failobj=None)

          Return the value of the named header field.  This is identical
          to *note __getitem__(): 283. except that optional 'failobj' is
          returned if the named header is missing (defaults to ‘None’).

     Here are some additional useful methods:

      -- Método: get_all (name, failobj=None)

          Return a list of all the values for the field named 'name'.
          If there are no such named headers in the message, 'failobj'
          is returned (defaults to ‘None’).

      -- Método: add_header (_name, _value, **_params)

          Extended header setting.  This method is similar to *note
          __setitem__(): 3835. except that additional header parameters
          can be provided as keyword arguments.  '_name' is the header
          field to add and '_value' is the 'primary' value for the
          header.

          For each item in the keyword argument dictionary '_params',
          the key is taken as the parameter name, with underscores
          converted to dashes (since dashes are illegal in Python
          identifiers).  Normally, the parameter will be added as
          ‘key="value"’ unless the value is ‘None’, in which case only
          the key will be added.  If the value contains non-ASCII
          characters, it can be specified as a three tuple in the format
          ‘(CHARSET, LANGUAGE, VALUE)’, where ‘CHARSET’ is a string
          naming the charset to be used to encode the value, ‘LANGUAGE’
          can usually be set to ‘None’ or the empty string (see RFC
          2231(3) for other possibilities), and ‘VALUE’ is the string
          value containing non-ASCII code points.  If a three tuple is
          not passed and the value contains non-ASCII characters, it is
          automatically encoded in RFC 2231(4) format using a ‘CHARSET’
          of ‘utf-8’ and a ‘LANGUAGE’ of ‘None’.

          Aqui está um exemplo:

               msg.add_header('Content-Disposition', 'attachment', filename='bud.gif')

          This will add a header that looks like

               Content-Disposition: attachment; filename="bud.gif"

          Um exemplo com caracteres não-ASCII:

               msg.add_header('Content-Disposition', 'attachment',
                              filename=('iso-8859-1', '', 'Fußballer.ppt'))

          Que produz

               Content-Disposition: attachment; filename*="iso-8859-1''Fu%DFballer.ppt"

      -- Método: replace_header (_name, _value)

          Replace a header.  Replace the first header found in the
          message that matches '_name', retaining header order and field
          name case.  If no matching header was found, a *note KeyError:
          344. is raised.

      -- Método: get_content_type ()

          Return the message’s content type.  The returned string is
          coerced to lower case of the form ‘maintype/subtype’.  If
          there was no ‘Content-Type’ header in the message the default
          type as given by *note get_default_type(): 383d. will be
          returned.  Since according to RFC 2045(5), messages always
          have a default type, *note get_content_type(): 383c. will
          always return a value.

          RFC 2045(6) defines a message’s default type to be
          ‘text/plain’ unless it appears inside a ‘multipart/digest’
          container, in which case it would be ‘message/rfc822’.  If the
          ‘Content-Type’ header has an invalid type specification, RFC
          2045(7) mandates that the default type be ‘text/plain’.

      -- Método: get_content_maintype ()

          Return the message’s main content type.  This is the
          ‘maintype’ part of the string returned by *note
          get_content_type(): 383c.

      -- Método: get_content_subtype ()

          Return the message’s sub-content type.  This is the ‘subtype’
          part of the string returned by *note get_content_type(): 383c.

      -- Método: get_default_type ()

          Return the default content type.  Most messages have a default
          content type of ‘text/plain’, except for messages that are
          subparts of ‘multipart/digest’ containers.  Such subparts have
          a default content type of ‘message/rfc822’.

      -- Método: set_default_type (ctype)

          Set the default content type.  'ctype' should either be
          ‘text/plain’ or ‘message/rfc822’, although this is not
          enforced.  The default content type is not stored in the
          ‘Content-Type’ header.

      -- Método: get_params (failobj=None, header='content-type',
               unquote=True)

          Return the message’s ‘Content-Type’ parameters, as a list.
          The elements of the returned list are 2-tuples of key/value
          pairs, as split on the ‘'='’ sign.  The left hand side of the
          ‘'='’ is the key, while the right hand side is the value.  If
          there is no ‘'='’ sign in the parameter the value is the empty
          string, otherwise the value is as described in *note
          get_param(): 3842. and is unquoted if optional 'unquote' is
          ‘True’ (the default).

          Optional 'failobj' is the object to return if there is no
          ‘Content-Type’ header.  Optional 'header' is the header to
          search instead of ‘Content-Type’.

          This is a legacy method.  On the *note EmailMessage: 27b.
          class its functionality is replaced by the 'params' property
          of the individual header objects returned by the header access
          methods.

      -- Método: get_param (param, failobj=None, header='content-type',
               unquote=True)

          Return the value of the ‘Content-Type’ header’s parameter
          'param' as a string.  If the message has no ‘Content-Type’
          header or if there is no such parameter, then 'failobj' is
          returned (defaults to ‘None’).

          Optional 'header' if given, specifies the message header to
          use instead of ‘Content-Type’.

          Parameter keys are always compared case insensitively.  The
          return value can either be a string, or a 3-tuple if the
          parameter was RFC 2231(8) encoded.  When it’s a 3-tuple, the
          elements of the value are of the form ‘(CHARSET, LANGUAGE,
          VALUE)’.  Note that both ‘CHARSET’ and ‘LANGUAGE’ can be
          ‘None’, in which case you should consider ‘VALUE’ to be
          encoded in the ‘us-ascii’ charset.  You can usually ignore
          ‘LANGUAGE’.

          If your application doesn’t care whether the parameter was
          encoded as in RFC 2231(9), you can collapse the parameter
          value by calling *note email.utils.collapse_rfc2231_value():
          3843, passing in the return value from *note get_param():
          3842.  This will return a suitably decoded Unicode string when
          the value is a tuple, or the original string unquoted if it
          isn’t.  For example:

               rawparam = msg.get_param('foo')
               param = email.utils.collapse_rfc2231_value(rawparam)

          In any case, the parameter value (either the returned string,
          or the ‘VALUE’ item in the 3-tuple) is always unquoted, unless
          'unquote' is set to ‘False’.

          This is a legacy method.  On the *note EmailMessage: 27b.
          class its functionality is replaced by the 'params' property
          of the individual header objects returned by the header access
          methods.

      -- Método: set_param (param, value, header='Content-Type',
               requote=True, charset=None, language='', replace=False)

          Set a parameter in the ‘Content-Type’ header.  If the
          parameter already exists in the header, its value will be
          replaced with 'value'.  If the ‘Content-Type’ header as not
          yet been defined for this message, it will be set to
          ‘text/plain’ and the new parameter value will be appended as
          per RFC 2045(10).

          Optional 'header' specifies an alternative header to
          ‘Content-Type’, and all parameters will be quoted as necessary
          unless optional 'requote' is ‘False’ (the default is ‘True’).

          If optional 'charset' is specified, the parameter will be
          encoded according to RFC 2231(11).  Optional 'language'
          specifies the RFC 2231 language, defaulting to the empty
          string.  Both 'charset' and 'language' should be strings.

          If 'replace' is ‘False’ (the default) the header is moved to
          the end of the list of headers.  If 'replace' is ‘True’, the
          header will be updated in place.

          Alterado na versão 3.4: Palavra-chave ‘replace’ foi
          adicionada.

      -- Método: del_param (param, header='content-type', requote=True)

          Remove the given parameter completely from the ‘Content-Type’
          header.  The header will be re-written in place without the
          parameter or its value.  All values will be quoted as
          necessary unless 'requote' is ‘False’ (the default is ‘True’).
          Optional 'header' specifies an alternative to ‘Content-Type’.

      -- Método: set_type (type, header='Content-Type', requote=True)

          Set the main type and subtype for the ‘Content-Type’ header.
          'type' must be a string in the form ‘maintype/subtype’,
          otherwise a *note ValueError: 202. is raised.

          This method replaces the ‘Content-Type’ header, keeping all
          the parameters in place.  If 'requote' is ‘False’, this leaves
          the existing header’s quoting as is, otherwise the parameters
          will be quoted (the default).

          An alternative header can be specified in the 'header'
          argument.  When the ‘Content-Type’ header is set a
          ‘MIME-Version’ header is also added.

          This is a legacy method.  On the *note EmailMessage: 27b.
          class its functionality is replaced by the ‘make_’ and ‘add_’
          methods.

      -- Método: get_filename (failobj=None)

          Return the value of the ‘filename’ parameter of the
          ‘Content-Disposition’ header of the message.  If the header
          does not have a ‘filename’ parameter, this method falls back
          to looking for the ‘name’ parameter on the ‘Content-Type’
          header.  If neither is found, or the header is missing, then
          'failobj' is returned.  The returned string will always be
          unquoted as per *note email.utils.unquote(): 3789.

      -- Método: get_boundary (failobj=None)

          Return the value of the ‘boundary’ parameter of the
          ‘Content-Type’ header of the message, or 'failobj' if either
          the header is missing, or has no ‘boundary’ parameter.  The
          returned string will always be unquoted as per *note
          email.utils.unquote(): 3789.

      -- Método: set_boundary (boundary)

          Set the ‘boundary’ parameter of the ‘Content-Type’ header to
          'boundary'.  *note set_boundary(): 3848. will always quote
          'boundary' if necessary.  A *note HeaderParseError: 378c. is
          raised if the message object has no ‘Content-Type’ header.

          Note that using this method is subtly different than deleting
          the old ‘Content-Type’ header and adding a new one with the
          new boundary via *note add_header(): 383a, because *note
          set_boundary(): 3848. preserves the order of the
          ‘Content-Type’ header in the list of headers.  However, it
          does 'not' preserve any continuation lines which may have been
          present in the original ‘Content-Type’ header.

      -- Método: get_content_charset (failobj=None)

          Return the ‘charset’ parameter of the ‘Content-Type’ header,
          coerced to lower case.  If there is no ‘Content-Type’ header,
          or if that header has no ‘charset’ parameter, 'failobj' is
          returned.

          Note that this method differs from *note get_charset(): 3830.
          which returns the *note Charset: e26. instance for the default
          encoding of the message body.

      -- Método: get_charsets (failobj=None)

          Return a list containing the character set names in the
          message.  If the message is a ‘multipart’, then the list will
          contain one element for each subpart in the payload,
          otherwise, it will be a list of length 1.

          Each item in the list will be a string which is the value of
          the ‘charset’ parameter in the ‘Content-Type’ header for the
          represented subpart.  However, if the subpart has no
          ‘Content-Type’ header, no ‘charset’ parameter, or is not of
          the ‘text’ main MIME type, then that item in the returned list
          will be 'failobj'.

      -- Método: get_content_disposition ()

          Return the lowercased value (without parameters) of the
          message’s ‘Content-Disposition’ header if it has one, or
          ‘None’.  The possible values for this method are 'inline',
          'attachment' or ‘None’ if the message follows RFC 2183(12).

          Adicionado na versão 3.5.

      -- Método: walk ()

          The *note walk(): 384b. method is an all-purpose generator
          which can be used to iterate over all the parts and subparts
          of a message object tree, in depth-first traversal order.  You
          will typically use *note walk(): 384b. as the iterator in a
          ‘for’ loop; each iteration returns the next subpart.

          Here’s an example that prints the MIME type of every part of a
          multipart message structure:

               >>> for part in msg.walk():
               ...     print(part.get_content_type())
               multipart/report
               text/plain
               message/delivery-status
               text/plain
               text/plain
               message/rfc822
               text/plain

          ‘walk’ iterates over the subparts of any part where *note
          is_multipart(): 3790. returns ‘True’, even though
          ‘msg.get_content_maintype() == 'multipart'’ may return
          ‘False’.  We can see this in our example by making use of the
          ‘_structure’ debug helper function:

               >>> for part in msg.walk():
               ...     print(part.get_content_maintype() == 'multipart',
               ...           part.is_multipart())
               True True
               False False
               False True
               False False
               False False
               False True
               False False
               >>> _structure(msg)
               multipart/report
                   text/plain
                   message/delivery-status
                       text/plain
                       text/plain
                   message/rfc822
                       text/plain

          Here the ‘message’ parts are not ‘multiparts’, but they do
          contain subparts.  ‘is_multipart()’ returns ‘True’ and ‘walk’
          descends into the subparts.

     *note Message: 27c. objects can also optionally contain two
     instance attributes, which can be used when generating the plain
     text of a MIME message.

      -- Atributo: preamble

          The format of a MIME document allows for some text between the
          blank line following the headers, and the first multipart
          boundary string.  Normally, this text is never visible in a
          MIME-aware mail reader because it falls outside the standard
          MIME armor.  However, when viewing the raw text of the
          message, or when viewing the message in a non-MIME aware
          reader, this text can become visible.

          The 'preamble' attribute contains this leading extra-armor
          text for MIME documents.  When the *note Parser: 11dc.
          discovers some text after the headers but before the first
          boundary string, it assigns this text to the message’s
          'preamble' attribute.  When the *note Generator: 120e. is
          writing out the plain text representation of a MIME message,
          and it finds the message has a 'preamble' attribute, it will
          write this text in the area between the headers and the first
          boundary.  See *note email.parser: 4e. and *note
          email.generator: 40. for details.

          Note that if the message object has no preamble, the
          'preamble' attribute will be ‘None’.

      -- Atributo: epilogue

          The 'epilogue' attribute acts the same way as the 'preamble'
          attribute, except that it contains text that appears between
          the last boundary and the end of the message.

          You do not need to set the epilogue to the empty string in
          order for the *note Generator: 120e. to print a newline at the
          end of the file.

      -- Atributo: defects

          The 'defects' attribute contains a list of all the problems
          found when parsing this message.  See *note email.errors: 3f.
          for a detailed description of the possible parsing defects.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc5322.html

   (2) https://datatracker.ietf.org/doc/html/rfc2822.html

   (3) https://datatracker.ietf.org/doc/html/rfc2231.html

   (4) https://datatracker.ietf.org/doc/html/rfc2231.html

   (5) https://datatracker.ietf.org/doc/html/rfc2045.html

   (6) https://datatracker.ietf.org/doc/html/rfc2045.html

   (7) https://datatracker.ietf.org/doc/html/rfc2045.html

   (8) https://datatracker.ietf.org/doc/html/rfc2231.html

   (9) https://datatracker.ietf.org/doc/html/rfc2231.html

   (10) https://datatracker.ietf.org/doc/html/rfc2045.html

   (11) https://datatracker.ietf.org/doc/html/rfc2231.html

   (12) https://datatracker.ietf.org/doc/html/rfc2183.html


File: python.info,  Node: email mimeemail mime Criando e-mail e objetos MIME do zero,  Next: email header Internationalized headers,  Prev: email message Message Representing an email message using the compat32 API,  Up: email — Um e-mail e um pacote MIME manipulável

5.20.1.14 ‘email.mime’‘email.mime’: Criando e-mail e objetos MIME do zero
.........................................................................

'Código-fonte:' Lib/email/mime/(1)

__________________________________________________________________

Este módulo faz parte da API de e-mail legada (‘Compat32’).  Sua
funcionalidade é parcialmente substituída por *note contentmanager: 3d.
na nova API, mas em certos aplicativos essas classes ainda podem ser
úteis, mesmo em código não legado.

Normalmente, você obtém uma estrutura de objeto de mensagem passando um
arquivo ou algum texto para um analisador sintático, que analisa o texto
e retorna o objeto de mensagem raiz.  No entanto, você também pode criar
uma estrutura de mensagem completa do zero, ou até objetos individuais
de *note Message: 27c. manualmente.  De fato, você também pode pegar uma
estrutura existente e adicionar novos objetos *note Message: 27c,
movê-los, etc.  Isso cria uma interface muito conveniente para fatiar e
cortar dados de mensagens MIME.

Você pode criar uma nova estrutura de objeto criando instâncias de *note
Message: 27c, adicionando anexos e todos os cabeçalhos apropriados
manualmente.  Porém, para mensagens MIME, o pacote *note email: 3b.
fornece algumas subclasses convenientes para facilitar as coisas.

Arquivo estão as classes:

 -- Classe: email.mime.base.MIMEBase (_maintype, _subtype, *,
          policy=compat32, **_params)

     Módulo: *note email.mime.base: 48.

     Esta é a classe base para todas as subclasses específicas de MIME
     de *note Message: 27c.  Normalmente você não criará instâncias
     especificamente de *note MIMEBase: 3852, embora possa.  A *note
     MIMEBase: 3852. é fornecida principalmente como uma classe base
     conveniente para subclasses mais específicas para MIME.

     '_maintype' é o tipo principal de ‘Content-Type’ (ex., ‘text’ ou
     ‘image’) e '_subtype' é o tipo principal de ‘Content-Type’ (ex.,
     ‘plain’ ou ‘gif’).  '_params' é um dicionário de parâmetros
     chave/valor e é passado diretamente para *note Message.add_header:
     383a.

     Se 'policy' for especificado, (o padrão é a política *note
     compat32: 10f3.) será passado para *note Message: 27c.

     A classe *note MIMEBase: 3852. sempre adiciona um cabeçalho
     ‘Content-Type’ (com base em '_maintype', '_subtype' e '_params') e
     um cabeçalho ‘MIME-Version’ (sempre definido como ‘1.0’).

     Alterado na versão 3.6: Adicionado o parâmetro somente-nomeado
     'policy'.

 -- Classe: email.mime.nonmultipart.MIMENonMultipart

     Módulo: *note email.mime.nonmultipart: 4c.

     Uma subclasse de *note MIMEBase: 3852, esta é uma classe base
     intermediária para mensagens MIME que não são ‘multipart’.  O
     principal objetivo desta classe é impedir o uso do método *note
     attach(): 379d, que só faz sentido para mensagens ‘multipart’.  Se
     *note attach(): 379d. for chamado, uma exceção *note
     MultipartConversionError: 37e4. será levantada.

 -- Classe: email.mime.multipart.MIMEMultipart (_subtype='mixed',
          boundary=None, _subparts=None, *, policy=compat32, **_params)

     Módulo: *note email.mime.multipart: 4b.

     Uma subclasse de *note MIMEBase: 3852, esta é uma classe base
     intermediária para mensagens MIME que são ‘multipart’.  O
     '_subtype' opcional é padronizado como ‘mixed’, mas pode ser usado
     para especificar o subtipo da mensagem.  Um cabeçalho
     ‘Content-Type’ de ‘multipart/_subtype’ será adicionado ao objeto da
     mensagem.  Um cabeçalho ‘MIME-Version’ também será adicionado.

     O 'boundary' opcional é a string de limites de várias partes.
     Quando ‘None’ (o padrão), o limite é calculado quando necessário
     (por exemplo, quando a mensagem é serializada).

     '_subparts' é uma sequência de subpartes iniciais para a carga.
     Deve ser possível converter essa sequência em uma lista.  Você
     sempre pode anexar novas subpartes à mensagem usando o método *note
     Message.attach: 379d.

     O argumento opcional 'policy' tem como padrão *note compat32: 10f3.

     Parâmetros adicionais para o cabeçalho ‘Content-Type’ são retirados
     dos argumentos nomeados ou passados para o argumento '_params', que
     é um dicionário.

     Alterado na versão 3.6: Adicionado o parâmetro somente-nomeado
     'policy'.

 -- Classe: email.mime.application.MIMEApplication (_data,
          _subtype='octet-stream',
          _encoder=email.encoders.encode_base64, *, policy=compat32,
          **_params)

     Módulo: *note email.mime.application: 46.

     Uma subclasse de *note MIMENonMultipart: 37e5, a classe *note
     MIMEApplication: 3854. é usada para representar objetos de mensagem
     MIME do tipo principal ‘application’.  '_data' contém os bytes para
     os dados brutos da aplicação.  O '_subtype' opcional especifica o
     subtipo MIME e o padrão é ‘octet-stream’.

     O '_encoder' opcional é um chamável (isto é, função) que executará
     a codificação real dos dados para transporte.  Esse chamável requer
     um argumento, que é a instância *note MIMEApplication: 3854.  Ele
     deve usar *note get_payload(): 120d. e *note set_payload(): 382e.
     para alterar a carga útil para o formulário codificado.  Também
     deve adicionar ‘Content-Transfer-Encoding’ ou outros cabeçalhos ao
     objeto de mensagem, conforme necessário.  A codificação padrão é
     base64.  Veja o módulo *note email.encoders: 3e. para obter uma
     lista dos codificadores embutidos.

     O argumento opcional 'policy' tem como padrão *note compat32: 10f3.

     '_params' são passados diretamente para o construtor da classe
     base.

     Alterado na versão 3.6: Adicionado o parâmetro somente-nomeado
     'policy'.

 -- Classe: email.mime.audio.MIMEAudio (_audiodata, _subtype=None,
          _encoder=email.encoders.encode_base64, *, policy=compat32,
          **_params)

     Módulo: *note email.mime.audio: 47.

     Uma subclasse de *note MIMENonMultipart: 37e5, a classe *note
     MIMEAudio: 3855. é usada para criar objetos de mensagem MIME do
     tipo principal ‘audio’.  '_audiodata' contém os bytes para os dados
     brutos de áudio.  Se esses dados puderem ser decodificados como au,
     wav, aiff ou aifc, então o subtipo será automaticamente incluído no
     cabeçalho ‘Content-Type’.  Caso contrário, você pode especificar
     explicitamente o subtipo de áudio por meio do argumento '_subtype'.
     Se o tipo menor não pôde ser adivinhado e '_subtype' não foi
     fornecido, então um exceção *note TypeError: 2c3. é levantada.

     O '_encoder' opcional é um chamável (ou seja, função) que executará
     a codificação real dos dados de áudio para transporte.  Esse
     chamável requer um argumento, que é a instância *note MIMEAudio:
     3855.  Ele deve usar *note get_payload(): 120d. e *note
     set_payload(): 382e. para alterar a carga útil para a forma
     codificada.  Também deve adicionar ‘Content-Transfer-Encoding’ ou
     outros cabeçalhos ao objeto de mensagem, conforme necessário.  A
     codificação padrão é base64.  Veja o módulo *note email.encoders:
     3e. para obter uma lista dos codificadores embutidos.

     O argumento opcional 'policy' tem como padrão *note compat32: 10f3.

     '_params' são passados diretamente para o construtor da classe
     base.

     Alterado na versão 3.6: Adicionado o parâmetro somente-nomeado
     'policy'.

 -- Classe: email.mime.image.MIMEImage (_imagedata, _subtype=None,
          _encoder=email.encoders.encode_base64, *, policy=compat32,
          **_params)

     Módulo: *note email.mime.image: 49.

     Uma subclasse de *note MIMENonMultipart: 37e5, a classe *note
     MIMEImage: 37e6. é usada para criar objetos de mensagem MIME do
     tipo principal ‘image’.  '_imagedata' contém os bytes para os dados
     de imagem bruta.  Se esse tipo de dados puder ser detectado (jpeg,
     png, gif, tiff, rgb, pbm, pgm, ppm, rast, xbm, bmp, webp e exr
     tentados), então o subtipo será automaticamente incluído no
     cabeçalho ‘Content-Type’.  Caso contrário, você pode especificar
     explicitamente o subtipo de imagem por meio do argumento
     '_subtype'.  Se o tipo secundário não puder ser adivinhado e
     '_subtype' não for fornecido, então *note TypeError: 2c3. será
     levantada.

     O '_encoder' opcional é um chamável (ou seja, função) que executará
     a codificação real dos dados de imagem para transporte.  Esse
     chamável requer um argumento, que é a instância *note MIMEImage:
     37e6.  Ele deve usar *note get_payload(): 120d. e *note
     set_payload(): 382e. para alterar a carga útil para a forma
     codificada.  Também deve adicionar ‘Content-Transfer-Encoding’ ou
     outros cabeçalhos ao objeto de mensagem, conforme necessário.  A
     codificação padrão é base64.  Veja o módulo *note email.encoders:
     3e. para obter uma lista dos codificadores embutidos.

     O argumento opcional 'policy' tem como padrão *note compat32: 10f3.

     '_params' são passados diretamente para o construtor *note
     MIMEBase: 3852.

     Alterado na versão 3.6: Adicionado o parâmetro somente-nomeado
     'policy'.

 -- Classe: email.mime.message.MIMEMessage (_msg, _subtype='rfc822', *,
          policy=compat32)

     Módulo: *note email.mime.message: 4a.

     Uma subclasse de *note MIMENonMultipart: 37e5, a classe *note
     MIMEMessage: 3856. é usada para criar objetos MIME do tipo
     principal ‘message’.  '_msg' é usado como carga útil e deve ser uma
     instância da classe *note Message: 27c. (ou uma subclasse dela),
     caso contrário, uma *note TypeError: 2c3. é levantada.

     O opcional '_subtype' define o subtipo da mensagem; o padrão é
     ‘rfc822’.

     O argumento opcional 'policy' tem como padrão *note compat32: 10f3.

     Alterado na versão 3.6: Adicionado o parâmetro somente-nomeado
     'policy'.

 -- Classe: email.mime.text.MIMEText (_text, _subtype='plain',
          _charset=None, *, policy=compat32)

     Módulo: *note email.mime.text: 4d.

     Uma subclasse de *note MIMENonMultipart: 37e5, a classe *note
     MIMEText: e25. é usada para criar objetos MIME do tipo principal
     ‘text’.  '_text' é a string para a carga útil.  '_subtype' é o tipo
     secundário e o padrão é ‘plain’.  '_charset' é o conjunto de
     caracteres do texto e é passado como um argumento para o construtor
     *note MIMENonMultipart: 37e5.; o padrão é ‘us-ascii’ se a string
     contiver apenas pontos de código ‘ascii’ e ‘utf-8’ caso contrário.
     O parâmetro '_charset' aceita uma string ou uma instância *note
     Charset: e26.

     A menos que o argumento '_charset' seja explicitamente definido
     como ‘None’, o objeto MIMEText criado terá um cabeçalho
     ‘Content-Type’ com um parâmetro ‘charset’ e um cabeçalho
     ‘Content-Transfer-Encoding’.  Isso significa que uma chamada
     ‘set_payload’ subsequente não resultará em uma carga útil
     codificada, mesmo se um charset for passado no comando
     ‘set_payload’.  Você pode “redefinir” esse comportamento excluindo
     o cabeçalho ‘Content-Transfer-Encoding’, após o qual uma chamada
     ‘set_payload’ codificará automaticamente a nova carga útil (e
     adicionará um novo cabeçalho ‘Content-Transfer-Encoding’).

     O argumento opcional 'policy' tem como padrão *note compat32: 10f3.

     Alterado na versão 3.5: '_charset' também aceita instâncias de
     *note Charset: e26.

     Alterado na versão 3.6: Adicionado o parâmetro somente-nomeado
     'policy'.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/email/mime/


File: python.info,  Node: email header Internationalized headers,  Next: email charset Representando conjuntos de caracteres,  Prev: email mimeemail mime Criando e-mail e objetos MIME do zero,  Up: email — Um e-mail e um pacote MIME manipulável

5.20.1.15 ‘email.header’: Internationalized headers
...................................................

'Código-fonte:' Lib/email/header.py(1)

__________________________________________________________________

This module is part of the legacy (‘Compat32’) email API. In the current
API encoding and decoding of headers is handled transparently by the
dictionary-like API of the *note EmailMessage: 27b. class.  In addition
to uses in legacy code, this module can be useful in applications that
need to completely control the character sets used when encoding
headers.

O texto restante nesta seção é a documentação original do módulo.

RFC 2822(2) is the base standard that describes the format of email
messages.  It derives from the older RFC 822(3) standard which came into
widespread use at a time when most email was composed of ASCII
characters only.  RFC 2822(4) is a specification written assuming email
contains only 7-bit ASCII characters.

Of course, as email has been deployed worldwide, it has become
internationalized, such that language specific character sets can now be
used in email messages.  The base standard still requires email messages
to be transferred using only 7-bit ASCII characters, so a slew of RFCs
have been written describing how to encode email containing non-ASCII
characters into RFC 2822(5)-compliant format.  These RFCs include RFC
2045(6), RFC 2046(7), RFC 2047(8), and RFC 2231(9).  The *note email:
3b. package supports these standards in its *note email.header: 41. and
*note email.charset: 3c. modules.

If you want to include non-ASCII characters in your email headers, say
in the ‘Subject’ or ‘To’ fields, you should use the *note Header: 19e9.
class and assign the field in the *note Message: 27c. object to an
instance of *note Header: 19e9. instead of using a string for the header
value.  Import the *note Header: 19e9. class from the *note
email.header: 41. module.  For example:

     >>> from email.message import Message
     >>> from email.header import Header
     >>> msg = Message()
     >>> h = Header('p\xf6stal', 'iso-8859-1')
     >>> msg['Subject'] = h
     >>> msg.as_string()
     'Subject: =?iso-8859-1?q?p=F6stal?=\n\n'

Notice here how we wanted the ‘Subject’ field to contain a non-ASCII
character?  We did this by creating a *note Header: 19e9. instance and
passing in the character set that the byte string was encoded in.  When
the subsequent *note Message: 27c. instance was flattened, the ‘Subject’
field was properly RFC 2047(10) encoded.  MIME-aware mail readers would
show this header using the embedded ISO-8859-1 character.

Here is the *note Header: 19e9. class description:

 -- Classe: email.header.Header (s=None, charset=None, maxlinelen=None,
          header_name=None, continuation_ws=' ', errors='strict')

     Create a MIME-compliant header that can contain strings in
     different character sets.

     Optional 's' is the initial header value.  If ‘None’ (the default),
     the initial header value is not set.  You can later append to the
     header with *note append(): 385a. method calls.  's' may be an
     instance of *note bytes: 1c2. or *note str: 44c, but see the *note
     append(): 385a. documentation for semantics.

     Optional 'charset' serves two purposes: it has the same meaning as
     the 'charset' argument to the *note append(): 385a. method.  It
     also sets the default character set for all subsequent *note
     append(): 385a. calls that omit the 'charset' argument.  If
     'charset' is not provided in the constructor (the default), the
     ‘us-ascii’ character set is used both as 's'’s initial charset and
     as the default for subsequent *note append(): 385a. calls.

     The maximum line length can be specified explicitly via
     'maxlinelen'.  For splitting the first line to a shorter value (to
     account for the field header which isn’t included in 's', e.g.
     ‘Subject’) pass in the name of the field in 'header_name'.  The
     default 'maxlinelen' is 78, and the default value for 'header_name'
     is ‘None’, meaning it is not taken into account for the first line
     of a long, split header.

     Optional 'continuation_ws' must be RFC 2822(11)-compliant folding
     whitespace, and is usually either a space or a hard tab character.
     This character will be prepended to continuation lines.
     'continuation_ws' defaults to a single space character.

     Optional 'errors' is passed straight through to the *note append():
     385a. method.

      -- Método: append (s, charset=None, errors='strict')

          Append the string 's' to the MIME header.

          Optional 'charset', if given, should be a *note Charset: e26.
          instance (see *note email.charset: 3c.) or the name of a
          character set, which will be converted to a *note Charset:
          e26. instance.  A value of ‘None’ (the default) means that the
          'charset' given in the constructor is used.

          's' may be an instance of *note bytes: 1c2. or *note str: 44c.
          If it is an instance of *note bytes: 1c2, then 'charset' is
          the encoding of that byte string, and a *note UnicodeError:
          12e6. will be raised if the string cannot be decoded with that
          character set.

          If 's' is an instance of *note str: 44c, then 'charset' is a
          hint specifying the character set of the characters in the
          string.

          In either case, when producing an RFC 2822(12)-compliant
          header using RFC 2047(13) rules, the string will be encoded
          using the output codec of the charset.  If the string cannot
          be encoded using the output codec, a UnicodeError will be
          raised.

          Optional 'errors' is passed as the errors argument to the
          decode call if 's' is a byte string.

      -- Método: encode (splitchars=';, \t', maxlinelen=None,
               linesep='\n')

          Encode a message header into an RFC-compliant format, possibly
          wrapping long lines and encapsulating non-ASCII parts in
          base64 or quoted-printable encodings.

          Optional 'splitchars' is a string containing characters which
          should be given extra weight by the splitting algorithm during
          normal header wrapping.  This is in very rough support of RFC
          2822(14)'s ‘higher level syntactic breaks’: split points
          preceded by a splitchar are preferred during line splitting,
          with the characters preferred in the order in which they
          appear in the string.  Space and tab may be included in the
          string to indicate whether preference should be given to one
          over the other as a split point when other split chars do not
          appear in the line being split.  Splitchars does not affect
          RFC 2047(15) encoded lines.

          'maxlinelen', if given, overrides the instance’s value for the
          maximum line length.

          'linesep' specifies the characters used to separate the lines
          of the folded header.  It defaults to the most useful value
          for Python application code (‘\n’), but ‘\r\n’ can be
          specified in order to produce headers with RFC-compliant line
          separators.

          Alterado na versão 3.2: Adicionado o argumento 'linesep'.

     The *note Header: 19e9. class also provides a number of methods to
     support standard operators and built-in functions.

      -- Método: __str__ ()

          Returns an approximation of the *note Header: 19e9. as a
          string, using an unlimited line length.  All pieces are
          converted to unicode using the specified encoding and joined
          together appropriately.  Any pieces with a charset of
          ‘'unknown-8bit'’ are decoded as ASCII using the ‘'replace'’
          error handler.

          Alterado na versão 3.2: Added handling for the
          ‘'unknown-8bit'’ charset.

      -- Método: __eq__ (other)

          This method allows you to compare two *note Header: 19e9.
          instances for equality.

      -- Método: __ne__ (other)

          This method allows you to compare two *note Header: 19e9.
          instances for inequality.

The *note email.header: 41. module also provides the following
convenient functions.

 -- Função: email.header.decode_header (header)

     Decode a message header value without converting the character set.
     The header value is in 'header'.

     For historical reasons, this function may return either:

       1. A list of pairs containing each of the decoded parts of the
          header, ‘(decoded_bytes, charset)’, where 'decoded_bytes' is
          always an instance of *note bytes: 1c2, and 'charset' is
          either:

                  - A lower case string containing the name of the
                    character set specified.

                  - ‘None’ for non-encoded parts of the header.

       2. A list of length 1 containing a pair ‘(string, None)’, where
          'string' is always an instance of *note str: 44c.

     An *note email.errors.HeaderParseError: 378c. may be raised when
     certain decoding errors occur (e.g.  a base64 decoding exception).

     Here are examples:

          >>> from email.header import decode_header
          >>> decode_header('=?iso-8859-1?q?p=F6stal?=')
          [(b'p\xf6stal', 'iso-8859-1')]
          >>> decode_header('unencoded_string')
          [('unencoded_string', None)]
          >>> decode_header('bar =?utf-8?B?ZsOzbw==?=')
          [(b'bar ', None), (b'f\xc3\xb3o', 'utf-8')]

          Nota: This function exists for backwards compatibility only.
          For new code, we recommend using *note
          email.headerregistry.HeaderRegistry: 37f6.

 -- Função: email.header.make_header (decoded_seq, maxlinelen=None,
          header_name=None, continuation_ws=' ')

     Create a *note Header: 19e9. instance from a sequence of pairs as
     returned by *note decode_header(): 10f7.

     *note decode_header(): 10f7. takes a header value string and
     returns a sequence of pairs of the format ‘(decoded_string,
     charset)’ where 'charset' is the name of the character set.

     This function takes one of those sequence of pairs and returns a
     *note Header: 19e9. instance.  Optional 'maxlinelen',
     'header_name', and 'continuation_ws' are as in the *note Header:
     19e9. constructor.

          Nota: This function exists for backwards compatibility only,
          and is not recommended for use in new code.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/email/header.py

   (2) https://datatracker.ietf.org/doc/html/rfc2822.html

   (3) https://datatracker.ietf.org/doc/html/rfc822.html

   (4) https://datatracker.ietf.org/doc/html/rfc2822.html

   (5) https://datatracker.ietf.org/doc/html/rfc2822.html

   (6) https://datatracker.ietf.org/doc/html/rfc2045.html

   (7) https://datatracker.ietf.org/doc/html/rfc2046.html

   (8) https://datatracker.ietf.org/doc/html/rfc2047.html

   (9) https://datatracker.ietf.org/doc/html/rfc2231.html

   (10) https://datatracker.ietf.org/doc/html/rfc2047.html

   (11) https://datatracker.ietf.org/doc/html/rfc2822.html

   (12) https://datatracker.ietf.org/doc/html/rfc2822.html

   (13) https://datatracker.ietf.org/doc/html/rfc2047.html

   (14) https://datatracker.ietf.org/doc/html/rfc2822.html

   (15) https://datatracker.ietf.org/doc/html/rfc2047.html


File: python.info,  Node: email charset Representando conjuntos de caracteres,  Next: email encoders Codificadores,  Prev: email header Internationalized headers,  Up: email — Um e-mail e um pacote MIME manipulável

5.20.1.16 ‘email.charset’: Representando conjuntos de caracteres
................................................................

'Código-fonte:' Lib/email/charset.py(1)

__________________________________________________________________

Este módulo faz parte da API de e-mail legada (‘Compat32’).  Na nova
API, apenas a tabela de apelidos é usada.

O texto restante nesta seção é a documentação original do módulo.

Este módulo fornece uma classe *note Charset: e26. para representar
conjuntos de caracteres e conversões de conjuntos de caracteres em
mensagens de e-mail, bem como um registro de conjuntos de caracteres e
vários métodos práticos para manipular esse registro.  Instâncias de
*note Charset: e26. são usadas em vários outros módulos do pacote *note
email: 3b.

Importa esta classe do módulo *note email.charset: 3c.

 -- Classe: email.charset.Charset (input_charset=DEFAULT_CHARSET)

     Mapeia conjuntos de caracteres para suas propriedades de e-mail.

     Esta classe fornece informações sobre os requisitos impostos ao
     e-mail para um conjunto de caracteres específico.  Também fornece
     rotinas práticas para conversão entre conjuntos de caracteres,
     considerando a disponibilidade dos codecs aplicáveis.  Dado um
     conjunto de caracteres, ela fará o possível para fornecer
     informações sobre como usá-lo em uma mensagem de e-mail de forma
     compatível com RFC.

     Certos conjuntos de caracteres devem ser codificados com
     quoted-printable ou base64 quando usados em cabeçalhos ou corpos de
     e-mail.  Certos conjuntos de caracteres devem ser convertidos
     diretamente e não são permitidos em e-mails.

     O 'input_charset' opcional é descrito abaixo; ele é sempre
     convertido para letras minúsculas.  Após ser normalizado por
     apelido, ele também é usado como uma consulta no registro de
     conjuntos de caracteres para descobrir a codificação do cabeçalho,
     a codificação do corpo e o codec de conversão de saída a serem
     usados para o conjunto de caracteres.  Por exemplo, se
     'input_charset' for ‘iso-8859-1’, os cabeçalhos e corpos serão
     codificados usando quoted-printable e nenhum codec de conversão de
     saída será necessário.  Se 'input_charset' for ‘euc-jp’, os
     cabeçalhos serão codificados em base64, os corpos não serão
     codificados, mas o texto de saída será convertido do conjunto de
     caracteres ‘euc-jp’ para o conjunto de caracteres ‘iso-2022-jp’.

     Instâncias *note Charset: e26. têm os seguintes atributos de dados:

      -- Atributo: input_charset

          O conjunto de caracteres inicial especificado.  Apelidos
          comuns são convertidos em seus nomes de e-mail 'oficiais' (por
          exemplo, ‘latin_1’ é convertido para ‘iso-8859-1’).  O padrão
          é ‘us-ascii’ de 7 bits.

      -- Atributo: header_encoding

          Se o conjunto de caracteres precisar ser codificado antes de
          ser usado em um cabeçalho de e-mail, este atributo será
          definido como ‘charset.QP’ (para quoted-printable),
          ‘charset.BASE64’ (para codificação base64) ou
          ‘charset.SHORTEST’ para a codificação mais curta entre QP ou
          BASE64.  Caso contrário, será ‘None’.

      -- Atributo: body_encoding

          O mesmo que 'header_encoding', mas descreve a codificação do
          corpo da mensagem de e-mail, que pode ser diferente da
          codificação do cabeçalho.  ‘charset.SHORTEST’ não é permitido
          para 'body_encoding'.

      -- Atributo: output_charset

          Alguns conjuntos de caracteres precisam ser convertidos antes
          de serem usados em cabeçalhos ou corpos de e-mail.  Se
          'input_charset' for um deles, este atributo conterá o nome do
          conjunto de caracteres para o qual a saída será convertida.
          Caso contrário, será ‘None’.

      -- Atributo: input_codec

          O nome do codec Python usado para converter o 'input_charset'
          para Unicode.  Se nenhum codec de conversão for necessário,
          este atributo será ‘None’.

      -- Atributo: output_codec

          O nome do codec Python usado para converter Unicode para o
          'output_charset'.  Se nenhum codec de conversão for
          necessário, este atributo terá o mesmo valor que o
          'input_codec'.

     Instâncias *note Charset: e26. também têm os seguintes métodos:

      -- Método: get_body_encoding ()

          Retorna a codificação de transferência de conteúdo usada para
          codificação do corpo.

          Esta é a string ‘quoted-printable’ ou ‘base64’, dependendo da
          codificação usada, ou é uma função, caso em que você deve
          chamar a função com um único argumento, sendo o objeto Message
          codificado.  A função deve então definir o próprio cabeçalho
          ‘Content-Transfer-Encoding’ com o valor apropriado.

          Retorna a string ‘quoted-printable’ se 'body_encoding' for
          ‘QP’, retorna a string ‘base64’ se 'body_encoding' for
          ‘BASE64’ e retorna a string ‘7bit’ caso contrário.

      -- Método: get_output_charset ()

          Retorna o conjunto de caracteres de saída.

          Este é o atributo 'output_charset' se não for ‘None’, caso
          contrário, é 'input_charset'.

      -- Método: header_encode (string)

          Codifica o cabeçalho com a string 'string'.

          O tipo de codificação (base64 ou quoted-printable) será
          baseado no atributo 'header_encoding'.

      -- Método: header_encode_lines (string, maxlengths)

          Codifica um cabeçalho de uma 'string' convertendo-a primeiro
          em bytes.

          Isso é semelhante a *note header_encode(): 386a, exceto que a
          string é ajustada aos comprimentos máximos de linha, conforme
          fornecido pelo argumento 'maxlengths', que deve ser um
          iterador: cada elemento retornado deste iterador fornecerá o
          próximo comprimento máximo de linha.

      -- Método: body_encode (string)

          Codifica o corpo com a string 'string'.

          O tipo de codificação (base64 ou quoted-printable) será
          baseado no atributo 'body_encoding'.

     A classe *note Charset: e26. também fornece vários métodos para dar
     suporte a operações padrão e funções embutidas.

      -- Método: __str__ ()

          Retorna 'input_charset' como uma string convertida para
          minúsculas.  ‘__repr__()’ é um apelido para ‘__str__()’.

      -- Método: __eq__ (other)

          Este método permite que você compare duas instâncias *note
          Charset: e26. para verificar a igualdade.

      -- Método: __ne__ (other)

          Este método permite que você compare duas instâncias *note
          Charset: e26. para verificar a desigualdade.

O módulo *note email.charset: 3c. também fornece as seguintes funções
para adicionar novas entradas ao conjunto global de caracteres, apelidos
e registros de codec:

 -- Função: email.charset.add_charset (charset, header_enc=None,
          body_enc=None, output_charset=None)

     Adiciona propriedades de caracteres ao registro global.

     'charset' é o conjunto de caracteres de entrada e deve ser o nome
     canônico de um conjunto de caracteres.

     'header_enc' e 'body_enc' opcionais são ‘charset.QP’ para
     quoted-printable, ‘charset.BASE64’ para codificação base64,
     ‘charset.SHORTEST’ para a codificação mais curta entre
     quoted-printable ou base64, ou ‘None’ para nenhuma codificação.
     ‘SHORTEST’ é válido apenas para 'header_enc'.  O padrão é ‘None’
     para nenhuma codificação.

     'output_charset' opcional é o conjunto de caracteres que a saída
     deve conter.  As conversões prosseguirão do conjunto de caracteres
     de entrada para Unicode e para o conjunto de caracteres de saída
     quando o método ‘Charset.convert()’ for chamado.  O padrão é gerar
     a saída no mesmo conjunto de caracteres da entrada.

     Tanto 'input_charset' quanto 'output_charset' devem ter entradas de
     codec Unicode no mapeamento de conjunto de caracteres para codec do
     módulo; use *note add_codec(): 3871. para adicionar codecs que o
     módulo não conhece.  Consulte a documentação do módulo *note
     codecs: 1b. para obter mais informações.

     O registro do conjunto de caracteres global é mantido no dicionário
     global do módulo ‘CHARSETS’.

 -- Função: email.charset.add_alias (alias, canonical)

     Adicione um apelido para o conjunto de caracteres.  'alias' é o
     nome do alias, por exemplo, ‘latin-1’.  'canonical' é o nome
     canônico do conjunto de caracteres, por exemplo, ‘iso-8859-1’.

     O registro global de apelido de conjunto de caracteres é mantido no
     dicionário global do módulo ‘ALIASES’.

 -- Função: email.charset.add_codec (charset, codecname)

     Adiciona um codec que mapeia caracteres no conjunto de caracteres
     fornecido para e a partir do Unicode.

     'charset' é o nome canônico de um conjunto de caracteres.
     'codecname' é o nome de um codec Python, conforme apropriado para o
     segundo argumento do método *note encode(): 8db. do *note str: 44c.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/email/charset.py


File: python.info,  Node: email encoders Codificadores,  Next: email utils Utilitários diversos,  Prev: email charset Representando conjuntos de caracteres,  Up: email — Um e-mail e um pacote MIME manipulável

5.20.1.17 ‘email.encoders’: Codificadores
.........................................

'Código-fonte:' Lib/email/encoders.py(1)

__________________________________________________________________

Este módulo faz parte da API legada de e-mail (‘Compat32’).  Na nova
API, a funcionalidade é fornecida pelo parâmetro 'cte' do método *note
set_content(): 19e8.

Este módulo está descontinuado no Python 3.  As funções fornecidas aqui
não devem ser chamadas explicitamente, pois a classe *note MIMEText:
e25. define o tipo de conteúdo e o cabeçalho CTE usando os valores
'_subtype' e '_charset' passados durante a instanciação dessa classe.

O texto restante nesta seção é a documentação original do módulo.

Ao criar objetos *note Message: 27c. do zero, você frequentemente
precisa codificar as cargas úteis para transporte por meio de servidores
de e-mail compatíveis.  Isso é especialmente verdadeiro para mensagens
do tipo ‘image/*’ e ‘text/*’ contendo dados binários.

O pacote *note email: 3b. fornece alguns codificadores convenientes em
seu módulo *note encoders: 3e.  Esses codificadores são realmente usados
pelos construtores de classe *note MIMEAudio: 3855. e *note MIMEImage:
37e6. para fornecer codificações padrão.  Todas as funções de
codificador recebem exatamente um argumento, o objeto de mensagem a ser
codificado.  Eles geralmente extraem a carga útil, codificam-na e
redefinem a carga útil para esse valor recém-codificado.  Eles também
devem definir o cabeçalho ‘Content-Transfer-Encoding’ conforme
apropriado.

Observe que essas funções não são significativas para uma mensagem
multiparte.  Elas devem ser aplicadas a subpartes individuais, e
levantarão um *note TypeError: 2c3. se for passada uma mensagem cujo
tipo seja multiparte.

Aqui estão as funções de codificação fornecidas:

 -- Função: email.encoders.encode_quopri (msg)

     Codifica a carga útil em formato quoted-printable e define o
     cabeçalho ‘Content-Transfer-Encoding’ como ‘quoted-printable’ (2).
     Esta é uma boa codificação para usar quando a maior parte da sua
     carga útil é de dados imprimíveis normais, mas contém alguns
     caracteres não imprimíveis.

 -- Função: email.encoders.encode_base64 (msg)

     Codifica a carga útil em formato base64 e define o cabeçalho
     ‘Content-Transfer-Encoding’ para ‘base64’.  Esta é uma boa
     codificação para usar quando a maior parte da sua carga útil é de
     dados não imprimíveis, pois é um formato mais compacto do que
     quoted-printable.  A desvantagem da codificação base64 é que ela
     torna o texto não legível por humanos.

 -- Função: email.encoders.encode_7or8bit (msg)

     Na verdade, isso não modifica a carga útil da mensagem, mas define
     o cabeçalho ‘Content-Transfer-Encoding’ para ‘7bit’ ou ‘8bit’,
     conforme apropriado, com base nos dados da carga útil.

 -- Função: email.encoders.encode_noop (msg)

     Isso não faz nada; nem mesmo define o cabeçalho
     ‘Content-Transfer-Encoding’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/email/encoders.py

   (2) Observe que a codificação com *note encode_quopri(): 3876. também
codifica todos os caracteres de tabulação e espaço nos dados.


File: python.info,  Node: email utils Utilitários diversos,  Next: email iterators Iteradores,  Prev: email encoders Codificadores,  Up: email — Um e-mail e um pacote MIME manipulável

5.20.1.18 ‘email.utils’: Utilitários diversos
.............................................

'Código-fonte:' Lib/email/utils.py(1)

__________________________________________________________________

Existem alguns utilitários úteis fornecidos no *note email.utils: 50.
module:

 -- Função: email.utils.localtime (dt=None)

     Retorna a hora local como um objeto datetime consciente.  Se
     chamado sem argumentos, retorna a hora atual.  Caso contrário, o
     argumento 'dt' deve ser uma instância *note datetime: 1cc. e é
     convertido para o fuso horário local de acordo com o banco de dados
     de fuso horário do sistema.  Se 'dt' for ingênuo (ou seja,
     ‘dt.tzinfo’ for ‘None’), será presumido como estando no horário
     local.  O parâmetro 'isdst' é ignorado.

     Adicionado na versão 3.3.

     Descontinuado desde a versão 3.12, será removido na versão 3.14: O
     parâmetro 'isdst'.

 -- Função: email.utils.make_msgid (idstring=None, domain=None)

     Retorna uma string adequada para um cabeçalho ‘Message-ID’
     compatível com RFC 2822(2).  O 'idstring' opcional, se fornecido, é
     uma string usada para fortalecer a exclusividade do ID da mensagem.
     O 'domain' Opcional, se dado, fornece a porção do msgid após o ‘@’.
     O padrão é o nome do host local.  Normalmente, não é necessário
     substituir esse padrão, mas pode ser útil em alguns casos, como um
     sistema distribuído de construção que usa um nome de domínio
     consistente em vários hosts.

     Alterado na versão 3.2: Adicionada a palavra-chave 'domain'.

As funções restantes fazem parte da API de e-mail herdada (‘Compat32’).
Não há necessidade de usá-las diretamente com a nova API, pois a análise
e a formatação fornecidas são feitas automaticamente pelo mecanismo de
análise de cabeçalhos da nova API.

 -- Função: email.utils.quote (str)

     Devolve uma nova string com barras invertidas em 'str' substituídas
     por duas barras invertidas e aspas duplas substituídas por aspas
     duplas invertidas.

 -- Função: email.utils.unquote (str)

     Retorna uma nova string que é uma versão sem aspas de 'str'.  Se
     'str' terminar e começar com aspas duplas, elas serão removidas.
     Da mesma forma, se 'str' termina e começa com colchetes angulares,
     eles são removidos.

 -- Função: email.utils.parseaddr (address, *, strict=True)

     Analisa o endereço – que deve ser o valor de algum campo contendo
     endereço, como ‘To’ ou ‘Cc’ – em suas partes constituinte
     'realname' e 'email address'.  Retorna uma tupla daquela
     informação, a menos que a análise falhe, caso em que uma tupla de 2
     de ‘('', '')’ é retornada.

     Se 'strict' for verdadeiro, usa um analisador sintático estrito que
     rejeite entradas malformadas.

     Alterado na versão 3.13: Adiciona o parâmetro opcional 'strict' e
     rejeita entradas malformadas por padrão.

 -- Função: email.utils.formataddr (pair, charset='utf-8')

     O inverso de *note parseaddr(): 1e2, isto leva uma tupla de 2 do
     forma ‘(realname, email_address)’ e retorna o valor de string
     adequado para um cabeçalho ‘To’ ou ‘Cc’ .  Se o primeiro elemento
     de 'pair' for falso, o segundo elemento será retornado sem
     modificações.

     O 'charset' opcional é o conjunto de caracteres que será usado na
     codificação RFC 2047(3) do ‘realname’ se o ‘realname’ contiver
     caracteres não-ASCII. Pode ser uma instância de *note str: 44c. ou
     a *note Charset: e26.  O padrão é ‘utf-8’.

     Alterado na versão 3.3: Adicionada a opção 'charset'.

 -- Função: email.utils.getaddresses (fieldvalues, *, strict=True)

     Este método retorna uma lista de tuplas 2 do formulário retornado
     por ‘parseaddr()’.  'fieldvalues' é uma sequência de valores do
     campo de cabeçalho que pode ser retornada por *note
     Message.get_all: 3834.

     Se 'strict' for verdadeiro, usa um analisador sintático estrito que
     rejeite entradas malformadas.

     Aqui está um exemplo simples que recebe todos os destinatários de
     uma mensagem:

          from email.utils import getaddresses

          tos = msg.get_all('to', [])
          ccs = msg.get_all('cc', [])
          resent_tos = msg.get_all('resent-to', [])
          resent_ccs = msg.get_all('resent-cc', [])
          all_recipients = getaddresses(tos + ccs + resent_tos + resent_ccs)

     Alterado na versão 3.13: Adiciona o parâmetro opcional 'strict' e
     rejeita entradas malformadas por padrão.

 -- Função: email.utils.parsedate (date)

     Tenta analisar uma data de acordo com as regras em RFC 2822(4).  no
     entanto, alguns mailers não seguem esse formato conforme
     especificado, portanto *note parsedate(): 387f. tenta adivinhar
     corretamente em tais casos.  'date' é uma string contendo uma data
     RFC 2822(5), como ‘"Mon, 20 Nov 1995 19:12:08 -0500"’.  Se
     conseguir analisar a data, *note parsedate(): 387f. retorna uma
     9-tupla que pode ser passada diretamente para *note time.mktime():
     1228.; caso contrário, ‘None’ será retornado.  Observe que os
     índices 6, 7 e 8 da tupla de resultados não são utilizáveis.

 -- Função: email.utils.parsedate_tz (date)

     Executa a mesma função que *note parsedate(): 387f, mas retorna
     ‘None’ ou uma tupla de 10; os primeiros 9 elementos formam uma
     tupla que pode ser passada diretamente para *note time.mktime():
     1228, e o décimo é o deslocamento do fuso horário da data do UTC
     (que é o termo oficial para o horário de Greenwich) (6).  Se a
     string de entrada não tem fuso horário, o último elemento da tupla
     retornado é ‘0’, que representa UTC. Observe que os índices 6, 7 e
     8 da tupla de resultado não podem ser usados.

 -- Função: email.utils.parsedate_to_datetime (date)

     O inverso de *note format_datetime(): 10fc.  Desempenha a mesma
     função que *note parsedate(): 387f, mas em caso de sucesso retorna
     um *note datetime: 1cc.; caso contrário, ‘ValueError’ é levantada
     se 'date' contiver um valor inválido, como uma hora maior que 23 ou
     uma diferença de fuso horário não entre -24 e 24 horas.  Se a data
     de entrada tem um fuso horário de ‘-0000’, o ‘datetime’ será um
     ‘datetime’ ingênuo, e se a data estiver em conformidade com os RFCs
     representará um horário em UTC, mas sem indicação do fuso horário
     de origem real da mensagem de onde vem a data.  Se a data de
     entrada tiver qualquer outro deslocamento de fuso horário válido, o
     ‘datetime’ será um ‘datetime’ consciente com o correspondente a
     *note timezone: 10fe. *note tzinfo: 5de.

     Adicionado na versão 3.3.

 -- Função: email.utils.mktime_tz (tuple)

     Transforma uma tupla de 10 conforme retornado por *note
     parsedate_tz(): 19ac. em um timestamp UTC (segundos desde a Era
     Unix).  Se o item de fuso horário na tupla for ‘None’, considera a
     hora local.

 -- Função: email.utils.formatdate (timeval=None, localtime=False,
          usegmt=False)

     Retorna uma string de data conforme RFC 2822(7).  Por exemplo:

          Fri, 09 Nov 2001 01:08:47 -0000

     O 'timeval' opcional, se fornecido, é um valor de tempo de ponto
     flutuante, conforme aceito por *note time.gmtime(): 1200. e *note
     time.localtime(): 1541, caso contrário, o tempo atual é usado.

     Há um sinalizador opcional 'localtime', que, quando é ‘True’,
     interpreta 'timeval' e retorna uma data relativa ao fuso horário
     local em vez do UTC, levando em consideração o horário de verão.  O
     padrão é ‘False’, o que significa que o UTC é usado.

     O 'usegmt' opcional é um sinalizador que quando ‘True’, produz uma
     string de data com o fuso horário como uma string ascii ‘GMT’, ao
     invés de um numérico ‘-0000’.  Isso é necessário para alguns
     protocolos (como HTTP). Isso se aplica apenas quando 'localtime'
     for ‘False’.  O padrão é ‘False’.

 -- Função: email.utils.format_datetime (dt, usegmt=False)

     Como ‘formatdate’, mas a entrada é uma instância de *note datetime:
     30.  Se for uma data e hora ingênua, será considerado “UTC sem
     informações sobre o fuso horário de origem” e o convencional
     ‘-0000’ será usado para o fuso horário.  Se for um ‘datetime’
     ciente, então o deslocamento de fuso horário numérico é usado.  Se
     for um fuso horário ciente com deslocamento zero, então 'usegmt'
     pode ser definido como ‘True’, caso em que a string ‘GMT’ é usada
     em vez do deslocamento numérico do fuso horário.  Isso fornece uma
     maneira de gerar cabeçalhos de data HTTP em conformidade com os
     padrões.

     Adicionado na versão 3.3.

 -- Função: email.utils.decode_rfc2231 (s)

     Decodifica a string 's' de acordo com RFC 2231(8).

 -- Função: email.utils.encode_rfc2231 (s, charset=None, language=None)

     Codifica a string 's' de acordo com RFC 2231(9).  'charset' e
     'language' opcionais, se fornecido, são o nome do conjunto de
     caracteres e o nome do idioma a ser usado.  Se nenhum deles for
     fornecido, 's' é retornado como está.  Se 'charset' for fornecido,
     mas 'language' não, a string será codificada usando a string vazia
     para 'language'.

 -- Função: email.utils.collapse_rfc2231_value (value, errors='replace',
          fallback_charset='us-ascii')

     Quando um parâmetro de cabeçalho é codificado no formato RFC
     2231(10), *note Message.get_param: 3842. pode retornar uma tupla de
     3 contendo o conjunto de caracteres, idioma e valor.  *note
     collapse_rfc2231_value(): 3843. transforma isso em uma string
     Unicode.  'errors' opcionais são passados para o argumento 'errors'
     do método *note encode(): 8db. de *note str: 44c.; o padrão é
     ‘'replace'’.  'fallback_charset' opcional especifica o conjunto de
     caracteres a ser usado se aquele no cabeçalho RFC 2231(11) não for
     conhecido pelo Python; o padrão é ‘'us-ascii'’.

     Por conveniência, se 'value' passado para *note
     collapse_rfc2231_value(): 3843. não for uma tupla, deve ser uma
     string e é retornado sem aspas.

 -- Função: email.utils.decode_params (params)

     Decodifica a lista de parâmetros de acordo com RFC 2231(12).
     'params' é uma sequência de 2 tuplas contendo elementos do
     formulário ‘(content-type, string-value)’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/email/utils.py

   (2) https://datatracker.ietf.org/doc/html/rfc2822.html

   (3) https://datatracker.ietf.org/doc/html/rfc2047.html

   (4) https://datatracker.ietf.org/doc/html/rfc2822.html

   (5) https://datatracker.ietf.org/doc/html/rfc2822.html

   (6) Observa que o sinal do deslocamento de fuso horário é o oposto do
sinal da variável ‘time.timezone’ para o mesmo fuso horário; a última
variável segue o padrão POSIX enquanto este módulo segue RFC 2822
(https://datatracker.ietf.org/doc/html/rfc2822.html).

   (7) https://datatracker.ietf.org/doc/html/rfc2822.html

   (8) https://datatracker.ietf.org/doc/html/rfc2231.html

   (9) https://datatracker.ietf.org/doc/html/rfc2231.html

   (10) https://datatracker.ietf.org/doc/html/rfc2231.html

   (11) https://datatracker.ietf.org/doc/html/rfc2231.html

   (12) https://datatracker.ietf.org/doc/html/rfc2231.html


File: python.info,  Node: email iterators Iteradores,  Prev: email utils Utilitários diversos,  Up: email — Um e-mail e um pacote MIME manipulável

5.20.1.19 ‘email.iterators’: Iteradores
.......................................

'Código-fonte:' Lib/email/iterators.py(1)

__________________________________________________________________

A iteração sobre uma árvore de objetos de mensagem é bastante fácil com
o método *note Message.walk: 384b.  O módulo *note email.iterators: 43.
fornece algumas iterações úteis de nível mais alto sobre as árvores de
objetos de mensagens.

 -- Função: email.iterators.body_line_iterator (msg, decode=False)

     Isso itera sobre todas as cargas úteis em todas as subpartes de
     'msg', retornando as cargas úteis das strings de linhas por linha.
     Ele pula todos os cabeçalhos da subparte e pula qualquer subparte
     com uma carga útil que não seja uma string Python.  Isso é um pouco
     equivalente à leitura da representação de texto simples da mensagem
     de um arquivo usando *note readline(): 1e46, pulando todos os
     cabeçalhos intermediários.

     'decode' opcional é passado por meio do *note Message.get_payload:
     120d.

 -- Função: email.iterators.typed_subpart_iterator (msg,
          maintype='text', subtype=None)

     Isso itera sobre todas as subpartes de 'msg', retornando apenas as
     subpartes que correspondem ao tipo MIME especificado por 'maintype'
     e 'subtype'.

     Observe que 'subtipo' é opcional; se omitido, a correspondência de
     tipo MIME da subparte é feita apenas com o tipo principal.
     'maintype' também é opcional; o padrão é ‘text’.

     Assim, por padrão *note typed_subpart_iterator(): 3887. retorna
     cada subparte que possui um tipo MIME de ‘text/*’.

A seguinte função foi adicionada como uma ferramenta de depuração útil.
'Não' deve ser considerado parte da interface pública suportada para o
pacote.

 -- Função: email.iterators._structure (msg, fp=None, level=0,
          include_default=False)

     Imprime uma representação recuada dos tipos de conteúdo da
     estrutura do objeto de mensagem.  Por exemplo:

          >>> msg = email.message_from_file(algum_arquivo)
          >>> _structure(msg)
          multipart/mixed
              text/plain
              text/plain
              multipart/digest
                  message/rfc822
                      text/plain
                  message/rfc822
                      text/plain
                  message/rfc822
                      text/plain
                  message/rfc822
                      text/plain
                  message/rfc822
                      text/plain
              text/plain

     O 'fp' opcional é um objeto arquivo ou similar para o qual deve-se
     imprimir a saída.  Deve ser adequado para a função Python *note
     print(): fa9.  'level' usado internamente.  'include_default', se
     verdadeiro, também imprime o tipo padrão.

Ver também
..........

Módulo *note smtplib: ca.

     Cliente SMTP (Protocolo Simples de Envio de E-mail)

Módulo *note poplib: ac.

     Cliente POP (Post Office Protocol)

Módulo *note imaplib: 74.

     Cliente IMAP (Internet Message Access Protocol)

Módulo *note mailbox: 8b.

     Ferramentas para criar, ler, e gerenciar coleções de mensagem em
     disco usando vários formatos padrão.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/email/iterators.py


File: python.info,  Node: json — Codificador e decodificador JSON,  Next: mailbox — Manipule caixas de entradas em vários formatos,  Prev: email — Um e-mail e um pacote MIME manipulável,  Up: Manuseio de Dados na Internet

5.20.2 ‘json’ — Codificador e decodificador JSON
------------------------------------------------

'Código-fonte:' Lib/json/__init__.py(1)

__________________________________________________________________

JSON (JavaScript Object Notation)(2), especificado pelo RFC 7159(3) (que
tornou o RFC 4627(4) obsoleta) e pelo ECMA-404(5), é um formato leve de
troca de dados inspirado pela sintaxe de objeto JavaScript(6) (embora
não seja um subconjunto estrito de JavaScript (7)).

     Nota: O termo “objeto” no contexto do processamento JSON em Python
     pode ser ambíguo.  Todos os valores em Python são objetos.  Em
     JSON, um objeto se refere a qualquer dado entre chaves, semelhante
     a um dicionário Python.

     Aviso: Tenha cuidado quando estiver analisando dados JSON de fontes
     não-confiáveis.  Uma string JSON maliciosa pode fazer o
     decodificador consumir recursos consideráveis de CPU e memória.  É
     recomendado limitar o tamanho do dado a ser analisado.

Este módulo expõe uma API familiar para pessoas usuárias dos módulos
*note marshal: 8d. e *note pickle: a6. da biblioteca padrão.

Codificação de hierarquias básicas de objetos Python:

     >>> import json
     >>> json.dumps(['foo', {'bar': ('baz', None, 1.0, 2)}])
     '["foo", {"bar": ["baz", null, 1.0, 2]}]'
     >>> print(json.dumps("\"foo\bar"))
     "\"foo\bar"
     >>> print(json.dumps('\u1234'))
     "\u1234"
     >>> print(json.dumps('\\'))
     "\\"
     >>> print(json.dumps({"c": 0, "b": 0, "a": 0}, sort_keys=True))
     {"a": 0, "b": 0, "c": 0}
     >>> from io import StringIO
     >>> io = StringIO()
     >>> json.dump(['streaming API'], io)
     >>> io.getvalue()
     '["streaming API"]'

Codificação compacta:

     >>> import json
     >>> json.dumps([1, 2, 3, {'4': 5, '6': 7}], separators=(',', ':'))
     '[1,2,3,{"4":5,"6":7}]'

Saída bonita:

     >>> import json
     >>> print(json.dumps({'6': 7, '4': 5}, sort_keys=True, indent=4))
     {
         "4": 5,
         "6": 7
     }

Personalizando em codificação de objeto JSON:

     >>> import json
     >>> def custom_json(obj):
     ...     if isinstance(obj, complex):
     ...         return {'__complex__': True, 'real': obj.real, 'imag': obj.imag}
     ...     raise TypeError(f'Cannot serialize object of {type(obj)}')
     ...
     >>> json.dumps(1 + 2j, default=custom_json)
     '{"__complex__": true, "real": 1.0, "imag": 2.0}'

Decodificando JSON:

     >>> import json
     >>> json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')
     ['foo', {'bar': ['baz', None, 1.0, 2]}]
     >>> json.loads('"\\"foo\\bar"')
     '"foo\x08ar'
     >>> from io import StringIO
     >>> io = StringIO('["streaming API"]')
     >>> json.load(io)
     ['streaming API']

Personalizando em decodificação de objeto JSON:

     >>> import json
     >>> def as_complex(dct):
     ...     if '__complex__' in dct:
     ...         return complex(dct['real'], dct['imag'])
     ...     return dct
     ...
     >>> json.loads('{"__complex__": true, "real": 1, "imag": 2}',
     ...     object_hook=as_complex)
     (1+2j)
     >>> import decimal
     >>> json.loads('1.1', parse_float=decimal.Decimal)
     Decimal('1.1')

Estendendo *note JSONEncoder: d69.:

     >>> import json
     >>> class ComplexEncoder(json.JSONEncoder):
     ...     def default(self, obj):
     ...         if isinstance(obj, complex):
     ...             return [obj.real, obj.imag]
     ...         # Let the base class default method raise the TypeError
     ...         return super().default(obj)
     ...
     >>> json.dumps(2 + 1j, cls=ComplexEncoder)
     '[2.0, 1.0]'
     >>> ComplexEncoder().encode(2 + 1j)
     '[2.0, 1.0]'
     >>> list(ComplexEncoder().iterencode(2 + 1j))
     ['[2.0', ', 1.0', ']']

Usando *note json.tool: 83. para validar a partir do console e exibir
formatado:

     $ echo '{"json":"obj"}' | python -m json.tool
     {
         "json": "obj"
     }
     $ echo '{1.2:3.4}' | python -m json.tool
     Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

Veja *note Interface de linha de comando: 388c. para a documentação
detalhada.

     Nota: JSON é um subconjunto do YAML(8) 1.2.  O JSON gerado pelas
     definições padrões desse módulo (particularmente, o valor padrão
     dos 'separadores') é também um subconjunto do YAML 1.0 e 1.1.  Esse
     módulo pode, portanto, também ser usado como serializador YAML.

     Nota: O codificador e o decodificador do módulo preservam a ordem
     de entrada e saída por padrão.  A ordem só é perdida se os
     contêineres subjacentes estão desordenados.

* Menu:

* Uso básico: Uso básico<2>.
* Codificadores e decodificadores::
* Exceções: Exceções<17>.
* Conformidade e interoperabilidade entre padrões::
* Interface de linha de comando: Interface de linha de comando<5>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/json/__init__.py

   (2) https://json.org

   (3) https://datatracker.ietf.org/doc/html/rfc7159.html

   (4) https://datatracker.ietf.org/doc/html/rfc4627.html

   (5) 
https://ecma-international.org/publications-and-standards/standards/ecma-404/

   (6) https://en.wikipedia.org/wiki/JavaScript

   (7) Como apresentado na errata para RFC 7159
(https://www.rfc-editor.org/errata_search.php?rfc=7159), JSON permite os
caracteres literais U+2028 (SEPARADOR DE LINHA) e U+2029 (SEPARADOR DE
PARÁGRAFO) em strings, enquanto que JavaScript (ECMAScript Edition 5.1)
não.

   (8) https://yaml.org/


File: python.info,  Node: Uso básico<2>,  Next: Codificadores e decodificadores,  Up: json — Codificador e decodificador JSON

5.20.2.1 Uso básico
...................

 -- Função: json.dump (obj, fp, *, skipkeys=False, ensure_ascii=True,
          check_circular=True, allow_nan=True, cls=None, indent=None,
          separators=None, default=None, sort_keys=False, **kw)

     Serializa um 'obj' como um stream JSON formatado para 'fp' (um
     *note objeto arquivo ou similar: 15cf. com suporte a ‘.write()’)
     usando essa *note tabela de conversão de Python para JSON: 388e.

          Nota: Diferente de *note pickle: a6. e *note marshal: 8d, JSON
          não é um protocolo com datagrama, assim tentar serializar
          múltiplos objetos com chamadas repetidas para *note dump():
          d67. usando o mesmo 'fp' resultará em um arquivo JSON
          inválido.


     Parâmetros:

        * ‘obj’ (*note object: a96.) – O objeto Python a ser
          serializado.

        * ‘fp’ (*note file-like object: 15cf.) – O objeto arquivo ou
          similar 'obj' para o qual será serializado.  O módulo ‘json’
          sempre produz objetos *note str: 44c, e não objetos *note
          bytes: 1c2.  Dessa forma, ‘fp.write()’ precisa ter suporte
          para entradas *note str: 44c.

        * ‘skipkeys’ (*note bool: 468.) – Se ‘True’, as chaves que não
          forem de um tipo básico (*note str: 44c, *note int: 257, *note
          float: 2f7, *note bool: 468, ‘None’) serão ignoradas ao invés
          de levantar uma exceção *note TypeError: 2c3.  Padrão ‘False’.

        * ‘ensure_ascii’ (*note bool: 468.) – Se definido como ‘True’ (o
          padrão), a saída terá todos os caracteres não ASCII e não
          imprimíveis recebidos escapados.  Se definido como ‘False’,
          todos os caracteres serão exibidos como estão, exceto os
          caracteres que devem ser escapados: aspas, barra invertida e
          os caracteres de controle U+0000 a U+001F.

        * ‘check_circular’ (*note bool: 468.) – Se ‘False’, a
          verificação de referência circular for de tipos contêineres é
          ignorada e uma referência circular resultará em uma exceção
          *note RecursionError: d90. (ou pior).  Padrão ‘True’.

        * ‘allow_nan’ (*note bool: 468.) – Se ‘False’, serialização de
          valores *note float: 2f7. fora de intervalo (‘nan’, ‘inf’,
          ‘-inf’) vai resultar em um *note ValueError: 202. em estrita
          conformidade com a especificação.  Se ‘True’ (o padrão), seus
          equivalentes JavaScript (‘NaN’, ‘Infinity’, ‘-Infinity’) serão
          usados.

        * ‘cls’ (a *note JSONEncoder: d69. subclass) – Se definido, um
          codificador JSON personalizado com o método *note default():
          388f. substituído, para serializar em tipos de dados
          personalizados.  Se ‘None’ (o padrão), ‘JSONEncoder’ é usado.

        * ‘indent’ (*note int: 257.‘ | ’*note str: 44c.‘ | ’‘None’) – Se
          for um inteiro positivo ou uma string, os elementos da vetores
          JSON e os membros do objeto serão impressos de forma bonita
          com esse nível de indentação.  Um inteiro positivo recua essa
          quantidade de espaços por nível; uma string (como ‘"\t"’) é
          usada para indentar cada nível.  Se for zero, negativo ou ‘""’
          (a string vazia), somente novas linhas serão inseridas.  Se
          for ‘None’ (o padrão), a representação mais compacta será
          usada.

        * ‘separators’ (*note tuple: 370.‘ | ’‘None’) – Uma tupla dupla:
          ‘(item_separator, key_separator)’.  Se ‘None’ (o padrão),
          'separators' assume como padrão ‘(', ', ': ')’ se 'indent' for
          ‘None’, e ‘(',', ': ')’ caso contrário.  Para o JSON mais
          compacto, especifique ‘(',', ':')’ para eliminar espaços em
          branco.

        * ‘default’ (*note callable: 2aaf. | None) – Uma função que é
          chamada para objetos que não podem ser serializados de outra
          forma.  Ela deve retornar uma versão JSON codificável do
          objeto ou gerar um *note TypeError: 2c3.  Se ‘None’ (o
          padrão), ‘TypeError’ é levantada.

        * ‘sort_keys’ (*note bool: 468.) – Se ‘True’, os dicionários
          serão emitidos classificados por chave.  Padrão ‘False’.

     Alterado na versão 3.2: Permite strings para 'indent', além de
     inteiros.

     Alterado na versão 3.4: Usa ‘(',', ': ')’ como padrão se 'indent'
     não for ‘None’.

     Alterado na versão 3.6: Todos os parâmetros opcionais agora são
     *note somente-nomeados: 2a5.

 -- Função: json.dumps (obj, *, skipkeys=False, ensure_ascii=True,
          check_circular=True, allow_nan=True, cls=None, indent=None,
          separators=None, default=None, sort_keys=False, **kw)

     Serializa 'obj' para uma *note str: 44c. com formato JSON usando
     essa *note tabela de conversão: 388e.  Os argumentos têm o mesmo
     significado que na função *note dump(): d67.

          Nota: Chaves nos pares chave/valor de JSON são sempre do tipo
          *note str: 44c.  Quando um dicionário é convertido para JSON,
          todas as chaves são convertidas para strings.  Como resultado
          disso, se um dicionário é convertido para JSON e depois de
          volta para um dicionário, o dicionário pode não ser igual ao
          original.  Isto é, ‘loads(dumps(x)) != x’ se x tem chaves não
          strings.

 -- Função: json.load (fp, *, cls=None, object_hook=None,
          parse_float=None, parse_int=None, parse_constant=None,
          object_pairs_hook=None, **kw)

     Desserializa 'fp' para um objeto Python usando a *note tabela de
     conversão JSON para Python: 3890.


     Parâmetros:

        * ‘fp’ (*note file-like object: 15cf.) – Um *note arquivo texto:
          1e0d. ou *note arquivo binário: 1e0e. com suporte a ‘.read()’
          contendo o documento JSON a ser desserializado.

        * ‘cls’ (a *note JSONDecoder: d6a. subclass) – Se definido, um
          decodificador JSON personalizado.  Argumentos nomeados
          adicionais para ‘load()’ serão passados para o construtor de
          'cls'.  Se ‘None’ (o padrão), ‘JSONDecoder’ é usado.

        * ‘object_hook’ (*note callable: 2aaf. | None) – Se definido,
          uma função que é chamada com o resultado de qualquer literal
          de objeto JSON decodificado (um *note dict: 256.).  O valor de
          retorno desta função será usado em vez do *note dict: 256.
          Este recurso pode ser usado para implementar decodificadores
          personalizados, por exemplo dica de classes JSON-RPC(1). O
          padrão é ‘None’.

        * ‘object_pairs_hook’ (*note callable: 2aaf. | None) – Se
          definido, uma função que é chamada com o resultado de qualquer
          literal de objeto JSON decodificado com uma lista ordenada de
          pares.  O valor de retorno desta função será usado em vez de
          *note dict: 256.  Este recurso pode ser usado para implementar
          decodificadores personalizados.  Se 'object_hook' também for
          definido, 'object_pairs_hook' terá prioridade.  O padrão é
          ‘None’.

        * ‘parse_float’ (*note callable: 2aaf. | None) – Se definido,
          uma função que é chamada com a string de cada ponto flutuante
          JSON a ser decodificada.  Se ‘None’ (o padrão), é equivalente
          a ‘float(num_str)’.  Isso pode ser usado para analisar pontos
          flutuantes JSON em tipos de dados personalizados, por exemplo
          *note decimal.Decimal: 29d.

        * ‘parse_int’ (*note callable: 2aaf. | None) – Se definido, uma
          função que é chamada com a string de cada int JSON a ser
          decodificado.  Se ‘None’ (o padrão), é equivalente a
          ‘int(num_str)’.  Isso pode ser usado para analisar inteiros
          JSON em tipos de dados personalizados, por exemplo *note
          float: 2f7.

        * ‘parse_constant’ (*note callable: 2aaf. | None) – Se definido,
          uma função que é chamada com uma das seguintes strings:
          ‘'-Infinity'’, ‘'Infinity'’ ou ‘'NaN'’.  Isso pode ser usado
          para levantar uma exceção se números JSON inválidos forem
          encontrados.  Padrão ‘None’.


     Levanta:

        * *note JSONDecodeError: e4d. – Quando os dados a serem
          desserializados não forem um documento JSON válido.

        * *note UnicodeDecodeError: a1d. – Quando os dados que estão
          sendo desserializados não contêm dados codificados em UTF-8,
          UTF-16 ou UTF-32.

     Alterado na versão 3.1:

        * Adicionado o parâmetro opcional 'object_pairs_hook'.

        * 'parse_constant' não é mais chamada para ‘null’, ‘true’,
          ‘false’.

     Alterado na versão 3.6:

        * Todos os parâmetros opcionais agora são *note
          somente-nomeados: 2a5.

        * 'fp' agora pode ser um *note arquivo binário: 1e0e.  A entrada
          deve estar codificada como UTF-8, UTF-16 ou UTF-32.

     Alterado na versão 3.11: O 'parse_int' padrão para *note int():
     257. agora limita o tamanho máximo da string de inteiro via *note
     limitação de comprimento de string na conversão para inteiro: 5f5.
     do interpretador para ajudar a evitar ataques por negação de
     serviço.

 -- Função: json.loads (s, *, cls=None, object_hook=None,
          parse_float=None, parse_int=None, parse_constant=None,
          object_pairs_hook=None, **kw)

     Idêntico a *note load(): cd4, mas em vez de um objeto arquivo ou
     similar, desserializa 's' (uma instância de *note str: 44c, *note
     bytes: 1c2. ou *note bytearray: 2ea. contendo um documento JSON)
     para um objeto Python usando essa *note tabela de conversão: 3890.

     Alterado na versão 3.6: 's' agora pode ser um do tipo *note bytes:
     1c2. ou *note bytearray: 2ea.  A entrada deve estar codificado como
     UTF-8, UTF-16 ou UTF-32.

     Alterado na versão 3.9: O argumento nomeado 'encoding' foi
     removido.

   ---------- Footnotes ----------

   (1) https://www.jsonrpc.org


File: python.info,  Node: Codificadores e decodificadores,  Next: Exceções<17>,  Prev: Uso básico<2>,  Up: json — Codificador e decodificador JSON

5.20.2.2 Codificadores e decodificadores
........................................

 -- Classe: json.JSONDecoder (*, object_hook=None, parse_float=None,
          parse_int=None, parse_constant=None, strict=True,
          object_pairs_hook=None)

     Decodificador JSON simples.

     Executa as seguintes traduções na decodificação por padrão:

     JSON                Python
                         
     --------------------------------------------
                         
     objeto              dict
                         
                         
     array               lista
                         
                         
     string              str
                         
                         
     número (inteiro)    int
                         
                         
     número (real)       ponto flutuante
                         
                         
     true                True
                         
                         
     false               False
                         
                         
     null                None
                         

     Ele também entende ‘NaN’, ‘Infinity’ e ‘-Infinity’ como seus
     valores ‘float’ correspondentes, que estão fora da especificação
     JSON.

     'object_hook' é uma função opcional que será chamada com o
     resultado de cada objeto JSON decodificado e seu valor de retorno
     será usado no lugar do dado *note dict: 256.  Isso pode ser usado
     para fornecer desserializações personalizadas (por exemplo, para
     oferecer suporte a dicas de classe JSON-RPC(1))

     'object_pairs_hook' é uma função opcional que será chamada com o
     resultado de todo objeto JSON decodificado com uma lista ordenada
     de pares.  O valor de retorno de 'object_pairs_hook' será usado no
     lugar do *note dict: 256.  Este recurso pode ser usado para
     implementar decodificadores personalizados.  Se 'object_pairs_hook'
     também for definido, o 'object_pairs_hook' terá prioridade.

     Alterado na versão 3.1: Adicionado suporte para
     'object_pairs_hook'.

     'parse_float' é uma função opcional que será chamada com a string
     de cada ponto flutuante JSON para ser decodificado.  Por padrão,
     equivale a ‘float(num_str)’.  Pode ser usado para qualquer outro
     tipo de dado ou analisador de pontos flutuante JSON (por exemplo,
     *note decimal.Decimal: 29d.).

     'parse_int' é uma função opcional que será chamada com a string de
     cada inteiro JSON para ser decodificado.  Por padrão, equivale a
     ‘int(num_str)’.  Pode ser usado para qualquer outro tipo de dado ou
     analisador de inteiros JSON (por exemplo, *note float: 2f7.).

     'parse_constant' é uma função opcional que será chamada para cada
     um das seguintes strings: ‘'-Infinity'’, ‘'Infinity'’, ‘'NaN'’.
     Isso pode ser usado para levantar uma exceção se forem encontrados
     números JSON inválidos.

     Se 'strict' for falso (‘True’ é o padrão), os caracteres de
     controle serão permitidos dentro das strings.  Os caracteres de
     controle neste contexto são aqueles com códigos de caracteres no
     intervalo 0–31, incluindo ‘'\t'’ (tab), ‘'\n'’, ‘'\r'’ e ‘'\0'’.

     Se os dados a serem desserializados não forem um documento JSON
     válido, será levantada uma exceção *note JSONDecodeError: e4d.

     Alterado na versão 3.6: Todos os parâmetros agora são *note
     somente-nomeado: 2a5.

      -- Método: decode (s)

          Retorna a representação Python de 's' (uma instância *note
          str: 44c. contendo um documento JSON).

          Uma exceção *note JSONDecodeError: e4d. será levantada se o
          documento JSON fornecido não for válido.

      -- Método: raw_decode (s)

          Decodifica um documento JSON a partir de 's' (uma *note str:
          44c. iniciando com um documento JSON) e retornando uma tupla
          de 2 elementos, a representação Python e o índice em 's' onde
          o documento finaliza.

          Isso pode ser usado para decodificar um documento JSON a
          partir de uma string que possa ter dados extras ao final.

 -- Classe: json.JSONEncoder (*, skipkeys=False, ensure_ascii=True,
          check_circular=True, allow_nan=True, sort_keys=False,
          indent=None, separators=None, default=None)

     Codificador JSON extensível para estruturas de dados Python.

     Por padrão, possui suporte para os seguintes objetos e tipos:

     Python                                       JSON
                                                  
     -----------------------------------------------------------------
                                                  
     dict                                         objeto
                                                  
                                                  
     list, tuple                                  array
                                                  
                                                  
     str                                          string
                                                  
                                                  
     int, float e Enums derivados de int e        número
     float                                        

     True                                         true
                                                  
                                                  
     False                                        false
                                                  
                                                  
     None                                         null
                                                  

     Alterado na versão 3.4: Adicionado suporte para classes Enum
     derivadas de int e float.

     Para estender isso para reconhecer outros objetos, crie uma
     subclasse e implemente o método *note default(): 388f. com outro
     método que retorne um objeto serializável para ‘o’ se possível,
     caso contrário deveria chamar a implementação da superclasse (para
     levantar *note TypeError: 2c3.).

     Se 'skipkeys' é falso (o padrão), então sluma *note TypeError: 2c3.
     será levantada ao tentar codificar as chaves que não são *note str:
     44c, *note int: 257, *note float: 2f7, *note bool: 468. ou ‘None’.
     Se 'skipkeys' é verdadeiro, esses itens são simplesmente pulados.

     Se 'ensure_ascii' for verdadeiro (o padrão), a saída terá todos os
     caracteres não ASCII e não imprimíveis recebidos escapados.  Se
     'ensure_ascii' for falso, todos os caracteres serão exibidos como
     estão, exceto os caracteres que devem ser escapados: aspas, barra
     invertida e os caracteres de controle U+0000 a U+001F.

     Se 'check_circular' é verdadeiro (o padrão), então listas,
     dicionários e objetos codificados personalizados serão verificados
     por referências circulares durante a codificação para prevenir uma
     recursão infinita (que iria causar uma *note RecursionError: d90.).
     Caso contrário, nenhuma verificação será feita.

     Se 'allow_nan' for verdadeiro (o padrão), então ‘NaN’, ‘Infinity’,
     e ‘-Infinity’ serão codificados como tal.  Esse comportamento não é
     compatível com a especificação do JSON, mas é consistente com a
     maioria dos codificadores e decodificadores baseados em JavaScript.
     Caso contrário, será levantada uma *note ValueError: 202. para tais
     pontos flutuantes.

     Se 'sort_keys' for verdadeiro (padrão: ‘False’), então a saída dos
     dicionários serão ordenados pela chave; isto é útil para testes de
     regressão para certificar-se que as serializações de JSON possam
     ser comparadas com uma base no dia a dia.

     Se 'indent' for um inteiro não negativo ou uma string, então
     elementos de um vetor JSON e membros de objetos terão uma saída
     formatada com este nível de indentação.  Um nível de indentação 0,
     negativo ou ‘""’ apenas colocará novas linhas.  ‘None’ (o padrão)
     seleciona a representação mais compacta.  Usando um inteiro
     positivo a indentação terá alguns espaços por nível.  Se 'indent'
     for uma string (como ‘"\t"’), essa string será usada para indentar
     cada nível.

     Alterado na versão 3.2: Permite strings para 'indent', além de
     inteiros.

     Se especificado, 'separators' deve ser uma tupla ‘(item_separator,
     key_separator)’.  O padrão é ‘(', ', ': ')’ se 'indent' for ‘None’
     e ‘(',', ': ')’ caso contrário.  Para pegar representação JSON mais
     compacta, você deve especificar ‘(',', ':')’ para eliminar espaços
     em branco.

     Alterado na versão 3.4: Usa ‘(',', ': ')’ como padrão se 'indent'
     não for ‘None’.

     Se especificado, 'default' deve ser uma função para ser chamada
     para objetos que não podem ser serializados de outra forma.  Deve
     retornar uma versão codificável JSON do objeto ou levantar uma
     exceção *note TypeError: 2c3.  Se não for especificada, *note
     TypeError: 2c3. é levantada.

     Alterado na versão 3.6: Todos os parâmetros agora são *note
     somente-nomeado: 2a5.

      -- Método: default (o)

          Implemente este método em uma subclasse que retorna um objeto
          serializável para 'o' ou que chame a implementação base (para
          levantar uma *note TypeError: 2c3.).

          Por exemplo, para suporte a iteradores arbitrários, você
          poderia implementar *note default(): 388f. dessa forma:

               def default(self, o):
                  try:
                      iterable = iter(o)
                  except TypeError:
                      pass
                  else:
                      return list(iterable)
                  # Faz o método padrão de classe base levantar a TypeError
                  return super().default(o)

      -- Método: encode (o)

          Retorna uma string representando um JSON a partir da estrutura
          de dados Python, 'o'.  Por exemplo:

               >>> json.JSONEncoder().encode({"foo": ["bar", "baz"]})
               '{"foo": ["bar", "baz"]}'

      -- Método: iterencode (o)

          Codifica o objeto dado, 'o', e produz cada representação em
          string assim que disponível.  Por exemplo:

               for chunk in json.JSONEncoder().iterencode(bigobject):
                   mysocket.write(chunk)

   ---------- Footnotes ----------

   (1) https://www.jsonrpc.org


File: python.info,  Node: Exceções<17>,  Next: Conformidade e interoperabilidade entre padrões,  Prev: Codificadores e decodificadores,  Up: json — Codificador e decodificador JSON

5.20.2.3 Exceções
.................

 -- Exceção: json.JSONDecodeError (msg, doc, pos)

     Subclasse de *note ValueError: 202. com os seguintes atributos
     adicionais:

      -- Atributo: msg

          A mensagem de erro não formatada.

      -- Atributo: doc

          O documento JSON sendo analisado.

      -- Atributo: pos

          O índice inicial de 'doc' em que a análise falhou.

      -- Atributo: lineno

          A linha correspondente a 'pos'.

      -- Atributo: colno

          A coluna correspondente a 'pos'.

     Adicionado na versão 3.5.


File: python.info,  Node: Conformidade e interoperabilidade entre padrões,  Next: Interface de linha de comando<5>,  Prev: Exceções<17>,  Up: json — Codificador e decodificador JSON

5.20.2.4 Conformidade e interoperabilidade entre padrões
........................................................

O formato JSON é especificado pela RFC 7159(1) e por ECMA-404(2).  Esta
seção detalha o nível de conformidade deste módulo com a RFC. Para
simplificar, as subclasses *note JSONEncoder: d69. e *note JSONDecoder:
d6a, e outros parâmetros além daqueles explicitamente mencionados, não
são considerados.

Este módulo não está em conformidade com a RFC de forma estrita,
implementando algumas extensões que são JavaScript válidas, mas não JSON
válido.  Em particular:

   - Os valores de números infinitos e NaN são aceitos e produzidos;

   - Nomes repetidos em um objeto são aceitos e apenas o valor do último
     par nome-valor é usado.

Uma vez que a RFC permite que os analisadores compatíveis com a RFC
aceitem textos de entrada que não sejam compatíveis com a RFC, o
desserializador deste módulo é tecnicamente compatível com a RFC nas
configurações padrão.

* Menu:

* Codificações de caracteres::
* Valores numéricos infinitos e NaN::
* Nomes repetidos dentro de um objeto::
* Valores não objeto e não vetor de nível superior::
* Limitações de implementação::

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc7159.html

   (2) 
https://ecma-international.org/publications-and-standards/standards/ecma-404/


File: python.info,  Node: Codificações de caracteres,  Next: Valores numéricos infinitos e NaN,  Up: Conformidade e interoperabilidade entre padrões

5.20.2.5 Codificações de caracteres
...................................

A RFC requer que JSON seja representado usando UTF-8, UTF-16 ou UTF-32,
com UTF-8 sendo o padrão recomendado para interoperabilidade máxima.

Conforme permitido, embora não exigido, pela RFC, o serializador deste
módulo define 'ensure_ascii=True' por padrão, escapando a saída para que
as strings resultantes contenham apenas caracteres ASCII imprimíveis.

Além do parâmetro 'ensure_ascii', este módulo é definido estritamente em
termos de conversão entre objetos Python e *note strings Unicode: 44c.
e, portanto, não aborda diretamente o problema de codificação de
caracteres.

A RFC proíbe adicionar uma marca de ordem de byte (do inglês 'byte order
mark' - BOM) ao início de um texto JSON, e o serializador deste módulo
não adiciona um BOM à sua saída.  A RFC permite, mas não exige, que os
desserializadores JSON ignorem um BOM inicial em sua entrada.  O
desserializador deste módulo levanta uma *note ValueError: 202. quando
um BOM inicial está presente.

A RFC não proíbe explicitamente as strings JSON que contêm sequências de
bytes que não correspondem a caracteres Unicode válidos (por exemplo,
substitutos UTF-16 não emparelhados), mas observa que podem causar
problemas de interoperabilidade.  Por padrão, este módulo aceita e
produz (quando presente no original *note str: 44c.) pontos de código
para tais sequências.


File: python.info,  Node: Valores numéricos infinitos e NaN,  Next: Nomes repetidos dentro de um objeto,  Prev: Codificações de caracteres,  Up: Conformidade e interoperabilidade entre padrões

5.20.2.6 Valores numéricos infinitos e NaN
..........................................

A RFC não permite a representação de valores infinitos ou numéricos NaN.
Apesar disso, por padrão, este módulo aceita e produz ‘Infinity’,
‘-Infinity’ e ‘NaN’ como se fossem valores literais de número JSON
válidos:

     >>> # Nenhuma dessas chamadas levanta uma exceção, mas os resultados não são JSON válidos
     >>> json.dumps(float('-inf'))
     '-Infinity'
     >>> json.dumps(float('nan'))
     'NaN'
     >>> # Same when deserializing
     >>> json.loads('-Infinity')
     -inf
     >>> json.loads('NaN')
     nan

No serializador, o parâmetro 'allow_nan' pode ser usado para alterar
esse comportamento.  No desserializador, o parâmetro 'parse_constant'
pode ser usado para alterar esse comportamento.


File: python.info,  Node: Nomes repetidos dentro de um objeto,  Next: Valores não objeto e não vetor de nível superior,  Prev: Valores numéricos infinitos e NaN,  Up: Conformidade e interoperabilidade entre padrões

5.20.2.7 Nomes repetidos dentro de um objeto
............................................

A RFC especifica que os nomes em um objeto JSON devem ser exclusivos,
mas não determina como os nomes repetidos em objetos JSON devem ser
tratados.  Por padrão, este módulo não levanta uma exceção; em vez
disso, ele ignora tudo, exceto o último par nome-valor para um
determinado nome:

     >>> weird_json = '{"x": 1, "x": 2, "x": 3}'
     >>> json.loads(weird_json)
     {'x': 3}

O parâmetro 'object_pairs_hook' pode ser usado para alterar este
comportamento.


File: python.info,  Node: Valores não objeto e não vetor de nível superior,  Next: Limitações de implementação,  Prev: Nomes repetidos dentro de um objeto,  Up: Conformidade e interoperabilidade entre padrões

5.20.2.8 Valores não objeto e não vetor de nível superior
.........................................................

A versão antiga de JSON especificada pela obsoleta RFC 4627(1) exige que
o valor de nível superior do texto JSON deve ser do tipo object ou array
(*note dict: 256. ou *note list: 611. Python), e não poderia ser dos
tipos null, boolean, number ou string.  RFC 7159(2) removeu essa
restrição, e esse módulo não tem nenhuma implementação que faça essa
restrição, seja em seus serializadores, sejam nos desserializadores.

Independentemente, para máxima interoperabilidade, você pode querer
aderir voluntariamente à restrição.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc4627.html

   (2) https://datatracker.ietf.org/doc/html/rfc7159.html


File: python.info,  Node: Limitações de implementação,  Prev: Valores não objeto e não vetor de nível superior,  Up: Conformidade e interoperabilidade entre padrões

5.20.2.9 Limitações de implementação
....................................

Algumas implementações de desserializadores JSON podem definir limites
em:

   * o tamanho de textos JSON aceitos

   * o nível máximo de aninhamento de objetos e vetores JSON

   * o intervalo e a precisão de números JSON

   * o conteúdo e o tamanho máximo de strings JSON

Esse módulo não impõe nenhum limite além daqueles já colocados pelas
estruturas de dados Python ou pelo interpretador Python em si.

Quando serializando para JSON, tenha cuidado com qualquer limitação nas
aplicações que irão consumir seu JSON. Em particular, é comum para
números JSON serem desserializados com números de precisão dupla
definida em IEEE 754 e, portanto, sujeito a limitações de precisão e de
intervalo da representação.  Isso é especialmente relevante quando
serializando valores Python *note int: 257. de magnitude extremamente
grande, ou quando serializando instâncias de tipos numéricos “exóticos”
como *note decimal.Decimal: 29d.


File: python.info,  Node: Interface de linha de comando<5>,  Prev: Conformidade e interoperabilidade entre padrões,  Up: json — Codificador e decodificador JSON

5.20.2.10 Interface de linha de comando
.......................................

'Código-fonte:' Lib/json/tool.py(1)

__________________________________________________________________

O módulo *note json.tool: 83. fornece uma interface de linha de comando
simples para validação e embelezamento de saída para objetos JSON.

Se os argumentos opcionais ‘infile’ e ‘outfile’ não forem especificados,
*note sys.stdin: 53d. e *note sys.stdout: ae6. serão usados
respectivamente:

     $ echo '{"json": "obj"}' | python -m json.tool
     {
         "json": "obj"
     }
     $ echo '{1.2:3.4}' | python -m json.tool
     Expecting property name enclosed in double quotes: line 1 column 2 (char 1)

Alterado na versão 3.5: A saída agora está na mesma ordem da entrada.
Use a opção *note -sort-keys: 38a3. para ordenar a saída de dicionários
alfabeticamente pela chave.

* Menu:

* Opções da linha de comando::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/json/tool.py


File: python.info,  Node: Opções da linha de comando,  Up: Interface de linha de comando<5>

5.20.2.11 Opções da linha de comando
....................................

 -- Option: infile

     O arquivo JSON para ser validado ou saída embelezada:

          $ python -m json.tool mp_films.json
          [
              {
                  "title": "And Now for Something Completely Different",
                  "year": 1971
              },
              {
                  "title": "Monty Python and the Holy Grail",
                  "year": 1975
              }
          ]

     Se 'infile' não é especificado, lê de *note sys.stdin: 53d.

 -- Option: outfile

     Escreve a saída de 'infile' para o 'outfile' dado.  Caso contrário,
     escreve em *note sys.stdout: ae6.

 -- Option: --sort-keys

     Ordena a saída de dicionários alfabeticamente pela chave.

     Adicionado na versão 3.5.

 -- Option: --no-ensure-ascii

     Desabilita escape de caracteres não-ascii, veja *note json.dumps():
     d68. para mais informações.

     Adicionado na versão 3.9.

 -- Option: --json-lines

     Analisa cada linha da entrada como um objeto JSON separado.

     Adicionado na versão 3.8.

 -- Option: --indent, --tab, --no-indent, --compact

     Opções mutualmente exclusivas para controle de espaços em branco.

     Adicionado na versão 3.9.

 -- Option: -h, --help

     Exibe a mensagem de ajuda.


File: python.info,  Node: mailbox — Manipule caixas de entradas em vários formatos,  Next: mimetypes — Mapeia nomes de arquivos para tipos MIME,  Prev: json — Codificador e decodificador JSON,  Up: Manuseio de Dados na Internet

5.20.3 ‘mailbox’ — Manipule caixas de entradas em vários formatos
-----------------------------------------------------------------

'Código-fonte:' Lib/mailbox.py(1)

__________________________________________________________________

Este módulo define duas classes, *note Mailbox: 128e. e *note Message:
1292, para acessar e manipular caixas de correio em disco e as mensagens
que elas contêm.  ‘Mailbox’ oferece um mapeamento semelhante a um
dicionário de chaves para mensagens.  ‘Message’ estende a classe *note
Message: 27c. do módulo *note email.message: 44. com estado e
comportamento específicos para cada formato.  Os formatos de caixa de
correio suportados são Maildir, mbox, MH, Babyl e MMDF.

Ver também
..........

Módulo *note email: 3b.

     Representa e manipula mensagens.

* Menu:

* Objetos Mailbox::
* Message objects::
* Exceções: Exceções<18>.
* Exemplos: Exemplos<23>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/mailbox.py


File: python.info,  Node: Objetos Mailbox,  Next: Message objects,  Up: mailbox — Manipule caixas de entradas em vários formatos

5.20.3.1 Objetos ‘Mailbox’
..........................

 -- Classe: mailbox.Mailbox

     Uma caixa de correio, que pode ser inspecionada e modificada.

     A classe ‘Mailbox’ define uma interface e não deve ser instanciada.
     Em vez disso, subclasses específicas de cada formato devem herdar
     de ‘Mailbox’ e seu código deve instanciar uma subclasse específica.

     A interface ‘Mailbox’ é semelhante a um dicionário, com pequenas
     chaves correspondentes às mensagens.  As chaves são emitidas pela
     instância de ‘Mailbox’ com a qual serão usadas e só têm significado
     para essa instância de ‘Mailbox’.  Uma chave continua a identificar
     uma mensagem mesmo que a mensagem correspondente seja modificada,
     por exemplo, ao ser substituída por outra mensagem.

     As mensagens podem ser adicionadas a uma instância de ‘Mailbox’
     usando o método semelhante a um conjunto *note add(): 128d. e
     removidas usando uma instrução ‘del’ ou os métodos semelhantes a
     conjuntos *note remove(): 38b4. e *note discard(): 38b5.

     A semântica da interface ‘Mailbox’ difere da semântica de
     dicionário em alguns aspectos importantes.  Cada vez que uma
     mensagem é solicitada, uma nova representação (normalmente uma
     instância de *note Message: 1292.) é gerada com base no estado
     atual da caixa de correio.  Da mesma forma, quando uma mensagem é
     adicionada a uma instância de ‘Mailbox’, o conteúdo da
     representação da mensagem fornecida é copiado.  Em nenhum dos casos
     a instância de ‘Mailbox’ mantém uma referência à representação da
     mensagem.

     O *note iterador: 1ac. padrão de ‘Mailbox’ itera sobre
     representações de mensagens, e não sobre chaves como o iterador
     padrão de *note dicionário: 256.  Além disso, a modificação de uma
     caixa de correio durante a iteração é segura e bem definida.
     Mensagens adicionadas à caixa de correio após a criação de um
     iterador não serão vistas pelo iterador.  Mensagens removidas da
     caixa de correio antes que o iterador as produza serão ignoradas
     silenciosamente, embora o uso de uma chave de um iterador possa
     resultar em uma exceção *note KeyError: 344. se a mensagem
     correspondente for posteriormente removida.

          Aviso: Be very cautious when modifying mailboxes that might be
          simultaneously changed by some other process.  The safest
          mailbox format to use for such tasks is *note Maildir: 41c.;
          try to avoid using single-file formats such as *note mbox:
          1775. for concurrent writing.  If you’re modifying a mailbox,
          you 'must' lock it by calling the *note lock(): 38b6. and
          *note unlock(): 38b7. methods 'before' reading any messages in
          the file or making any changes by adding or deleting a
          message.  Failing to lock the mailbox runs the risk of losing
          messages or corrupting the entire mailbox.

     ‘Mailbox’ instances have the following methods:

      -- Método: add (message)

          Add 'message' to the mailbox and return the key that has been
          assigned to it.

          Parameter 'message' may be a *note Message: 1292. instance, an
          *note email.message.Message: 27c. instance, a string, a byte
          string, or a file-like object (which should be open in binary
          mode).  If 'message' is an instance of the appropriate
          format-specific *note Message: 1292. subclass (e.g., if it’s
          an *note mboxMessage: 3771. instance and this is an *note
          mbox: 1775. instance), its format-specific information is
          used.  Otherwise, reasonable defaults for format-specific
          information are used.

          Alterado na versão 3.2: Support for binary input was added.

      -- Método: remove (key)
      -- Método: __delitem__ (key)
      -- Método: discard (key)

          Delete the message corresponding to 'key' from the mailbox.

          If no such message exists, a *note KeyError: 344. exception is
          raised if the method was called as *note remove(): 38b4. or
          *note __delitem__(): 38b8. but no exception is raised if the
          method was called as *note discard(): 38b5.  The behavior of
          *note discard(): 38b5. may be preferred if the underlying
          mailbox format supports concurrent modification by other
          processes.

      -- Método: __setitem__ (key, message)

          Replace the message corresponding to 'key' with 'message'.
          Raise a *note KeyError: 344. exception if no message already
          corresponds to 'key'.

          As with *note add(): 128d, parameter 'message' may be a *note
          Message: 1292. instance, an *note email.message.Message: 27c.
          instance, a string, a byte string, or a file-like object
          (which should be open in binary mode).  If 'message' is an
          instance of the appropriate format-specific *note Message:
          1292. subclass (e.g., if it’s an *note mboxMessage: 3771.
          instance and this is an *note mbox: 1775. instance), its
          format-specific information is used.  Otherwise, the
          format-specific information of the message that currently
          corresponds to 'key' is left unchanged.

      -- Método: iterkeys ()

          Return an *note iterator: 1ac. over all keys

      -- Método: keys ()

          The same as *note iterkeys(): 38ba, except that a *note list:
          611. is returned rather than an *note iterator: 1ac.

      -- Método: itervalues ()
      -- Método: __iter__ ()

          Return an *note iterator: 1ac. over representations of all
          messages.  The messages are represented as instances of the
          appropriate format-specific *note Message: 1292. subclass
          unless a custom message factory was specified when the
          ‘Mailbox’ instance was initialized.

               Nota: The behavior of *note __iter__(): 38bd. is unlike
               that of dictionaries, which iterate over keys.

      -- Método: values ()

          The same as *note itervalues(): 38bc, except that a *note
          list: 611. is returned rather than an *note iterator: 1ac.

      -- Método: iteritems ()

          Return an *note iterator: 1ac. over ('key', 'message') pairs,
          where 'key' is a key and 'message' is a message
          representation.  The messages are represented as instances of
          the appropriate format-specific *note Message: 1292. subclass
          unless a custom message factory was specified when the
          ‘Mailbox’ instance was initialized.

      -- Método: items ()

          The same as *note iteritems(): 38bf, except that a *note list:
          611. of pairs is returned rather than an *note iterator: 1ac.
          of pairs.

      -- Método: get (key, default=None)
      -- Método: __getitem__ (key)

          Return a representation of the message corresponding to 'key'.
          If no such message exists, 'default' is returned if the method
          was called as *note get(): 38c1. and a *note KeyError: 344.
          exception is raised if the method was called as
          ‘__getitem__()’.  The message is represented as an instance of
          the appropriate format-specific *note Message: 1292. subclass
          unless a custom message factory was specified when the
          ‘Mailbox’ instance was initialized.

      -- Método: get_message (key)

          Return a representation of the message corresponding to 'key'
          as an instance of the appropriate format-specific *note
          Message: 1292. subclass, or raise a *note KeyError: 344.
          exception if no such message exists.

      -- Método: get_bytes (key)

          Return a byte representation of the message corresponding to
          'key', or raise a *note KeyError: 344. exception if no such
          message exists.

          Adicionado na versão 3.2.

      -- Método: get_string (key)

          Return a string representation of the message corresponding to
          'key', or raise a *note KeyError: 344. exception if no such
          message exists.  The message is processed through *note
          email.message.Message: 27c. to convert it to a 7bit clean
          representation.

      -- Método: get_file (key)

          Return a *note file-like: 15cf. representation of the message
          corresponding to 'key', or raise a *note KeyError: 344.
          exception if no such message exists.  The file-like object
          behaves as if open in binary mode.  This file should be closed
          once it is no longer needed.

          Alterado na versão 3.2: The file object really is a *note
          binary file: 1e0e.; previously it was incorrectly returned in
          text mode.  Also, the *note file-like object: 15cf. now
          supports the *note context manager: 5d4. protocol: you can use
          a *note with: 5d2. statement to automatically close it.

               Nota: Unlike other representations of messages, *note
               file-like: 15cf. representations are not necessarily
               independent of the ‘Mailbox’ instance that created them
               or of the underlying mailbox.  More specific
               documentation is provided by each subclass.

      -- Método: __contains__ (key)

          Return ‘True’ if 'key' corresponds to a message, ‘False’
          otherwise.

      -- Método: __len__ ()

          Return a count of messages in the mailbox.

      -- Método: clear ()

          Delete all messages from the mailbox.

      -- Método: pop (key, default=None)

          Return a representation of the message corresponding to 'key'
          and delete the message.  If no such message exists, return
          'default'.  The message is represented as an instance of the
          appropriate format-specific *note Message: 1292. subclass
          unless a custom message factory was specified when the
          ‘Mailbox’ instance was initialized.

      -- Método: popitem ()

          Return an arbitrary ('key', 'message') pair, where 'key' is a
          key and 'message' is a message representation, and delete the
          corresponding message.  If the mailbox is empty, raise a *note
          KeyError: 344. exception.  The message is represented as an
          instance of the appropriate format-specific *note Message:
          1292. subclass unless a custom message factory was specified
          when the ‘Mailbox’ instance was initialized.

      -- Método: update (arg)

          Parameter 'arg' should be a 'key'-to-'message' mapping or an
          iterable of ('key', 'message') pairs.  Updates the mailbox so
          that, for each given 'key' and 'message', the message
          corresponding to 'key' is set to 'message' as if by using
          *note __setitem__(): 38b9.  As with *note __setitem__(): 38b9,
          each 'key' must already correspond to a message in the mailbox
          or else a *note KeyError: 344. exception will be raised, so in
          general it is incorrect for 'arg' to be a ‘Mailbox’ instance.

               Nota: Unlike with dictionaries, keyword arguments are not
               supported.

      -- Método: flush ()

          Write any pending changes to the filesystem.  For some *note
          Mailbox: 128e. subclasses, changes are always written
          immediately and ‘flush()’ does nothing, but you should still
          make a habit of calling this method.

      -- Método: lock ()

          Acquire an exclusive advisory lock on the mailbox so that
          other processes know not to modify it.  An *note
          ExternalClashError: 38ca. is raised if the lock is not
          available.  The particular locking mechanisms used depend upon
          the mailbox format.  You should 'always' lock the mailbox
          before making any modifications to its contents.

      -- Método: unlock ()

          Release the lock on the mailbox, if any.

      -- Método: close ()

          Flush the mailbox, unlock it if necessary, and close any open
          files.  For some ‘Mailbox’ subclasses, this method does
          nothing.

* Menu:

* Maildir objects::
* mbox objects::
* MH objects::
* Babyl objects::
* MMDF objects::


File: python.info,  Node: Maildir objects,  Next: mbox objects,  Up: Objetos Mailbox

5.20.3.2 ‘Maildir’ objects
..........................

 -- Classe: mailbox.Maildir (dirname, factory=None, create=True)

     A subclass of *note Mailbox: 128e. for mailboxes in Maildir format.
     Parameter 'factory' is a callable object that accepts a file-like
     message representation (which behaves as if opened in binary mode)
     and returns a custom representation.  If 'factory' is ‘None’, *note
     MaildirMessage: 38ce. is used as the default message
     representation.  If 'create' is ‘True’, the mailbox is created if
     it does not exist.

     If 'create' is ‘True’ and the 'dirname' path exists, it will be
     treated as an existing maildir without attempting to verify its
     directory layout.

     It is for historical reasons that 'dirname' is named as such rather
     than 'path'.

     Maildir is a directory-based mailbox format invented for the qmail
     mail transfer agent and now widely supported by other programs.
     Messages in a Maildir mailbox are stored in separate files within a
     common directory structure.  This design allows Maildir mailboxes
     to be accessed and modified by multiple unrelated programs without
     data corruption, so file locking is unnecessary.

     Maildir mailboxes contain three subdirectories, namely: ‘tmp’,
     ‘new’, and ‘cur’.  Messages are created momentarily in the ‘tmp’
     subdirectory and then moved to the ‘new’ subdirectory to finalize
     delivery.  A mail user agent may subsequently move the message to
     the ‘cur’ subdirectory and store information about the state of the
     message in a special “info” section appended to its file name.

     Folders of the style introduced by the Courier mail transfer agent
     are also supported.  Any subdirectory of the main mailbox is
     considered a folder if ‘'.'’ is the first character in its name.
     Folder names are represented by ‘Maildir’ without the leading
     ‘'.'’.  Each folder is itself a Maildir mailbox but should not
     contain other folders.  Instead, a logical nesting is indicated
     using ‘'.'’ to delimit levels, e.g., “Archived.2005.07”.

      -- Atributo: colon

          The Maildir specification requires the use of a colon (‘':'’)
          in certain message file names.  However, some operating
          systems do not permit this character in file names, If you
          wish to use a Maildir-like format on such an operating system,
          you should specify another character to use instead.  The
          exclamation point (‘'!'’) is a popular choice.  For example:

               import mailbox
               mailbox.Maildir.colon = '!'

          The ‘colon’ attribute may also be set on a per-instance basis.

     Alterado na versão 3.13: *note Maildir: 41c. now ignores files with
     a leading dot.

     ‘Maildir’ instances have all of the methods of *note Mailbox: 128e.
     in addition to the following:

      -- Método: list_folders ()

          Return a list of the names of all folders.

      -- Método: get_folder (folder)

          Return a ‘Maildir’ instance representing the folder whose name
          is 'folder'.  A *note NoSuchMailboxError: 38d2. exception is
          raised if the folder does not exist.

      -- Método: add_folder (folder)

          Create a folder whose name is 'folder' and return a ‘Maildir’
          instance representing it.

      -- Método: remove_folder (folder)

          Delete the folder whose name is 'folder'.  If the folder
          contains any messages, a *note NotEmptyError: 38d5. exception
          will be raised and the folder will not be deleted.

      -- Método: clean ()

          Delete temporary files from the mailbox that have not been
          accessed in the last 36 hours.  The Maildir specification says
          that mail-reading programs should do this occasionally.

      -- Método: get_flags (key)

          Return as a string the flags that are set on the message
          corresponding to 'key'.  This is the same as
          ‘get_message(key).get_flags()’ but much faster, because it
          does not open the message file.  Use this method when
          iterating over the keys to determine which messages are
          interesting to get.

          If you do have a *note MaildirMessage: 38ce. object, use its
          *note get_flags(): 38d7. method instead, because changes made
          by the message’s *note set_flags(): 38d8, *note add_flag():
          38d9. and *note remove_flag(): 38da. methods are not reflected
          here until the mailbox’s *note __setitem__(): 38db. method is
          called.

          Adicionado na versão 3.13.

      -- Método: set_flags (key, flags)

          On the message corresponding to 'key', set the flags specified
          by 'flags' and unset all others.  Calling
          ‘some_mailbox.set_flags(key, flags)’ is similar to

               one_message = some_mailbox.get_message(key)
               one_message.set_flags(flags)
               some_mailbox[key] = one_message

          but faster, because it does not open the message file.

          If you do have a *note MaildirMessage: 38ce. object, use its
          *note set_flags(): 38d8. method instead, because changes made
          with this mailbox method will not be visible to the message
          object’s method, *note get_flags(): 38d7.

          Adicionado na versão 3.13.

      -- Método: add_flag (key, flag)

          On the message corresponding to 'key', set the flags specified
          by 'flag' without changing other flags.  To add more than one
          flag at a time, 'flag' may be a string of more than one
          character.

          Considerations for using this method versus the message
          object’s *note add_flag(): 38d9. method are similar to those
          for *note set_flags(): 17c5.; see the discussion there.

          Adicionado na versão 3.13.

      -- Método: remove_flag (key, flag)

          On the message corresponding to 'key', unset the flags
          specified by 'flag' without changing other flags.  To remove
          more than one flag at a time, 'flag' may be a string of more
          than one character.

          Considerations for using this method versus the message
          object’s *note remove_flag(): 38da. method are similar to
          those for *note set_flags(): 17c5.; see the discussion there.

          Adicionado na versão 3.13.

      -- Método: get_info (key)

          Return a string containing the info for the message
          corresponding to 'key'.  This is the same as
          ‘get_message(key).get_info()’ but much faster, because it does
          not open the message file.  Use this method when iterating
          over the keys to determine which messages are interesting to
          get.

          If you do have a *note MaildirMessage: 38ce. object, use its
          *note get_info(): 38dc. method instead, because changes made
          by the message’s *note set_info(): 38dd. method are not
          reflected here until the mailbox’s *note __setitem__(): 38db.
          method is called.

          Adicionado na versão 3.13.

      -- Método: set_info (key, info)

          Set the info of the message corresponding to 'key' to 'info'.
          Calling ‘some_mailbox.set_info(key, flags)’ is similar to

               one_message = some_mailbox.get_message(key)
               one_message.set_info(info)
               some_mailbox[key] = one_message

          but faster, because it does not open the message file.

          If you do have a *note MaildirMessage: 38ce. object, use its
          *note set_info(): 38dd. method instead, because changes made
          with this mailbox method will not be visible to the message
          object’s method, *note get_info(): 38dc.

          Adicionado na versão 3.13.

     Some *note Mailbox: 128e. methods implemented by ‘Maildir’ deserve
     special remarks:

      -- Método: add (message)
      -- Método: __setitem__ (key, message)
      -- Método: update (arg)

               Aviso: These methods generate unique file names based
               upon the current process ID. When using multiple threads,
               undetected name clashes may occur and cause corruption of
               the mailbox unless threads are coordinated to avoid using
               these methods to manipulate the same mailbox
               simultaneously.

      -- Método: flush ()

          All changes to Maildir mailboxes are immediately applied, so
          this method does nothing.

      -- Método: lock ()
      -- Método: unlock ()

          Maildir mailboxes do not support (or require) locking, so
          these methods do nothing.

      -- Método: close ()

          ‘Maildir’ instances do not keep any open files and the
          underlying mailboxes do not support locking, so this method
          does nothing.

      -- Método: get_file (key)

          Depending upon the host platform, it may not be possible to
          modify or remove the underlying message while the returned
          file remains open.

Ver também
..........

maildir man page from Courier(1)

     A specification of the format.  Describes a common extension for
     supporting folders.

Using maildir format(2)

     Notes on Maildir by its inventor.  Includes an updated
     name-creation scheme and details on “info” semantics.

   ---------- Footnotes ----------

   (1) https://www.courier-mta.org/maildir.html

   (2) https://cr.yp.to/proto/maildir.html


File: python.info,  Node: mbox objects,  Next: MH objects,  Prev: Maildir objects,  Up: Objetos Mailbox

5.20.3.3 ‘mbox’ objects
.......................

 -- Classe: mailbox.mbox (path, factory=None, create=True)

     A subclass of *note Mailbox: 128e. for mailboxes in mbox format.
     Parameter 'factory' is a callable object that accepts a file-like
     message representation (which behaves as if opened in binary mode)
     and returns a custom representation.  If 'factory' is ‘None’, *note
     mboxMessage: 3771. is used as the default message representation.
     If 'create' is ‘True’, the mailbox is created if it does not exist.

     The mbox format is the classic format for storing mail on Unix
     systems.  All messages in an mbox mailbox are stored in a single
     file with the beginning of each message indicated by a line whose
     first five characters are “From “.

     Several variations of the mbox format exist to address perceived
     shortcomings in the original.  In the interest of compatibility,
     ‘mbox’ implements the original format, which is sometimes referred
     to as 'mboxo'.  This means that the ‘Content-Length’ header, if
     present, is ignored and that any occurrences of “From “ at the
     beginning of a line in a message body are transformed to “>From “
     when storing the message, although occurrences of “>From “ are not
     transformed to “From “ when reading the message.

     Some *note Mailbox: 128e. methods implemented by ‘mbox’ deserve
     special remarks:

      -- Método: get_bytes (key, from_=False)

          Note: This method has an extra parameter ('from_') compared
          with other classes.  The first line of an mbox file entry is
          the Unix “From “ line.  If 'from_' is False, the first line of
          the file is dropped.

      -- Método: get_file (key, from_=False)

          Using the file after calling *note flush(): 1738. or *note
          close(): 38cb. on the ‘mbox’ instance may yield unpredictable
          results or raise an exception.

          Note: This method has an extra parameter ('from_') compared
          with other classes.  The first line of an mbox file entry is
          the Unix “From “ line.  If 'from_' is False, the first line of
          the file is dropped.

      -- Método: get_string (key, from_=False)

          Note: This method has an extra parameter ('from_') compared
          with other classes.  The first line of an mbox file entry is
          the Unix “From “ line.  If 'from_' is False, the first line of
          the file is dropped.

      -- Método: lock ()
      -- Método: unlock ()

          Three locking mechanisms are used—dot locking and, if
          available, the ‘flock()’ and ‘lockf()’ system calls.

Ver também
..........

mbox man page from tin(1)

     A specification of the format, with details on locking.

Configuring Netscape Mail on Unix: Why The Content-Length Format is Bad(2)

     An argument for using the original mbox format rather than a
     variation.

"mbox" is a family of several mutually incompatible mailbox formats(3)

     A history of mbox variations.

   ---------- Footnotes ----------

   (1) http://www.tin.org/bin/man.cgi?section=5&topic=mbox

   (2) https://www.jwz.org/doc/content-length.html

   (3) 
https://www.loc.gov/preservation/digital/formats/fdd/fdd000383.shtml


File: python.info,  Node: MH objects,  Next: Babyl objects,  Prev: mbox objects,  Up: Objetos Mailbox

5.20.3.4 ‘MH’ objects
.....................

 -- Classe: mailbox.MH (path, factory=None, create=True)

     A subclass of *note Mailbox: 128e. for mailboxes in MH format.
     Parameter 'factory' is a callable object that accepts a file-like
     message representation (which behaves as if opened in binary mode)
     and returns a custom representation.  If 'factory' is ‘None’, *note
     MHMessage: 38ee. is used as the default message representation.  If
     'create' is ‘True’, the mailbox is created if it does not exist.

     MH is a directory-based mailbox format invented for the MH Message
     Handling System, a mail user agent.  Each message in an MH mailbox
     resides in its own file.  An MH mailbox may contain other MH
     mailboxes (called 'folders') in addition to messages.  Folders may
     be nested indefinitely.  MH mailboxes also support 'sequences',
     which are named lists used to logically group messages without
     moving them to sub-folders.  Sequences are defined in a file called
     ‘.mh_sequences’ in each folder.

     The ‘MH’ class manipulates MH mailboxes, but it does not attempt to
     emulate all of ‘mh’’s behaviors.  In particular, it does not modify
     and is not affected by the ‘context’ or ‘.mh_profile’ files that
     are used by ‘mh’ to store its state and configuration.

     ‘MH’ instances have all of the methods of *note Mailbox: 128e. in
     addition to the following:

     Alterado na versão 3.13: Supported folders that don’t contain a
     ‘.mh_sequences’ file.

      -- Método: list_folders ()

          Return a list of the names of all folders.

      -- Método: get_folder (folder)

          Return an ‘MH’ instance representing the folder whose name is
          'folder'.  A *note NoSuchMailboxError: 38d2. exception is
          raised if the folder does not exist.

      -- Método: add_folder (folder)

          Create a folder whose name is 'folder' and return an ‘MH’
          instance representing it.

      -- Método: remove_folder (folder)

          Delete the folder whose name is 'folder'.  If the folder
          contains any messages, a *note NotEmptyError: 38d5. exception
          will be raised and the folder will not be deleted.

      -- Método: get_sequences ()

          Return a dictionary of sequence names mapped to key lists.  If
          there are no sequences, the empty dictionary is returned.

      -- Método: set_sequences (sequences)

          Re-define the sequences that exist in the mailbox based upon
          'sequences', a dictionary of names mapped to key lists, like
          returned by *note get_sequences(): 38f3.

      -- Método: pack ()

          Rename messages in the mailbox as necessary to eliminate gaps
          in numbering.  Entries in the sequences list are updated
          correspondingly.

               Nota: Already-issued keys are invalidated by this
               operation and should not be subsequently used.

     Some *note Mailbox: 128e. methods implemented by ‘MH’ deserve
     special remarks:

      -- Método: remove (key)
      -- Método: __delitem__ (key)
      -- Método: discard (key)

          These methods immediately delete the message.  The MH
          convention of marking a message for deletion by prepending a
          comma to its name is not used.

      -- Método: lock ()
      -- Método: unlock ()

          Three locking mechanisms are used—dot locking and, if
          available, the ‘flock()’ and ‘lockf()’ system calls.  For MH
          mailboxes, locking the mailbox means locking the
          ‘.mh_sequences’ file and, only for the duration of any
          operations that affect them, locking individual message files.

      -- Método: get_file (key)

          Depending upon the host platform, it may not be possible to
          remove the underlying message while the returned file remains
          open.

      -- Método: flush ()

          All changes to MH mailboxes are immediately applied, so this
          method does nothing.

      -- Método: close ()

          ‘MH’ instances do not keep any open files, so this method is
          equivalent to *note unlock(): 38fa.

Ver também
..........

nmh - Message Handling System(1)

     Home page of ‘nmh’, an updated version of the original ‘mh’.

MH & nmh: Email for Users & Programmers(2)

     A GPL-licensed book on ‘mh’ and ‘nmh’, with some information on the
     mailbox format.

   ---------- Footnotes ----------

   (1) https://www.nongnu.org/nmh/

   (2) https://rand-mh.sourceforge.io/book/


File: python.info,  Node: Babyl objects,  Next: MMDF objects,  Prev: MH objects,  Up: Objetos Mailbox

5.20.3.5 ‘Babyl’ objects
........................

 -- Classe: mailbox.Babyl (path, factory=None, create=True)

     A subclass of *note Mailbox: 128e. for mailboxes in Babyl format.
     Parameter 'factory' is a callable object that accepts a file-like
     message representation (which behaves as if opened in binary mode)
     and returns a custom representation.  If 'factory' is ‘None’, *note
     BabylMessage: 3901. is used as the default message representation.
     If 'create' is ‘True’, the mailbox is created if it does not exist.

     Babyl is a single-file mailbox format used by the Rmail mail user
     agent included with Emacs.  The beginning of a message is indicated
     by a line containing the two characters Control-Underscore
     (‘'\037'’) and Control-L (‘'\014'’).  The end of a message is
     indicated by the start of the next message or, in the case of the
     last message, a line containing a Control-Underscore (‘'\037'’)
     character.

     Messages in a Babyl mailbox have two sets of headers, original
     headers and so-called visible headers.  Visible headers are
     typically a subset of the original headers that have been
     reformatted or abridged to be more attractive.  Each message in a
     Babyl mailbox also has an accompanying list of 'labels', or short
     strings that record extra information about the message, and a list
     of all user-defined labels found in the mailbox is kept in the
     Babyl options section.

     ‘Babyl’ instances have all of the methods of *note Mailbox: 128e.
     in addition to the following:

      -- Método: get_labels ()

          Return a list of the names of all user-defined labels used in
          the mailbox.

               Nota: The actual messages are inspected to determine
               which labels exist in the mailbox rather than consulting
               the list of labels in the Babyl options section, but the
               Babyl section is updated whenever the mailbox is
               modified.

     Some *note Mailbox: 128e. methods implemented by ‘Babyl’ deserve
     special remarks:

      -- Método: get_file (key)

          In Babyl mailboxes, the headers of a message are not stored
          contiguously with the body of the message.  To generate a
          file-like representation, the headers and body are copied
          together into an *note io.BytesIO: ed3. instance, which has an
          API identical to that of a file.  As a result, the file-like
          object is truly independent of the underlying mailbox but does
          not save memory compared to a string representation.

      -- Método: lock ()
      -- Método: unlock ()

          Three locking mechanisms are used—dot locking and, if
          available, the ‘flock()’ and ‘lockf()’ system calls.

Ver também
..........

Format of Version 5 Babyl Files(1)

     A specification of the Babyl format.

Reading Mail with Rmail(2)

     The Rmail manual, with some information on Babyl semantics.

   ---------- Footnotes ----------

   (1) https://quimby.gnus.org/notes/BABYL

   (2) 
https://www.gnu.org/software/emacs/manual/html_node/emacs/Rmail.html


File: python.info,  Node: MMDF objects,  Prev: Babyl objects,  Up: Objetos Mailbox

5.20.3.6 ‘MMDF’ objects
.......................

 -- Classe: mailbox.MMDF (path, factory=None, create=True)

     A subclass of *note Mailbox: 128e. for mailboxes in MMDF format.
     Parameter 'factory' is a callable object that accepts a file-like
     message representation (which behaves as if opened in binary mode)
     and returns a custom representation.  If 'factory' is ‘None’, *note
     MMDFMessage: 3908. is used as the default message representation.
     If 'create' is ‘True’, the mailbox is created if it does not exist.

     MMDF is a single-file mailbox format invented for the Multichannel
     Memorandum Distribution Facility, a mail transfer agent.  Each
     message is in the same form as an mbox message but is bracketed
     before and after by lines containing four Control-A (‘'\001'’)
     characters.  As with the mbox format, the beginning of each message
     is indicated by a line whose first five characters are “From “, but
     additional occurrences of “From “ are not transformed to “>From “
     when storing messages because the extra message separator lines
     prevent mistaking such occurrences for the starts of subsequent
     messages.

     Some *note Mailbox: 128e. methods implemented by ‘MMDF’ deserve
     special remarks:

      -- Método: get_bytes (key, from_=False)

          Note: This method has an extra parameter ('from_') compared
          with other classes.  The first line of an mbox file entry is
          the Unix “From “ line.  If 'from_' is False, the first line of
          the file is dropped.

      -- Método: get_file (key, from_=False)

          Using the file after calling *note flush(): 1738. or *note
          close(): 38cb. on the ‘MMDF’ instance may yield unpredictable
          results or raise an exception.

          Note: This method has an extra parameter ('from_') compared
          with other classes.  The first line of an mbox file entry is
          the Unix “From “ line.  If 'from_' is False, the first line of
          the file is dropped.

      -- Método: lock ()
      -- Método: unlock ()

          Three locking mechanisms are used—dot locking and, if
          available, the ‘flock()’ and ‘lockf()’ system calls.

Ver também
..........

mmdf man page from tin(1)

     A specification of MMDF format from the documentation of tin, a
     newsreader.

MMDF(2)

     A Wikipedia article describing the Multichannel Memorandum
     Distribution Facility.

   ---------- Footnotes ----------

   (1) http://www.tin.org/bin/man.cgi?section=5&topic=mmdf

   (2) https://en.wikipedia.org/wiki/MMDF


File: python.info,  Node: Message objects,  Next: Exceções<18>,  Prev: Objetos Mailbox,  Up: mailbox — Manipule caixas de entradas em vários formatos

5.20.3.7 ‘Message’ objects
..........................

 -- Classe: mailbox.Message (message=None)

     A subclass of the *note email.message: 44. module’s *note Message:
     27c.  Subclasses of ‘mailbox.Message’ add mailbox-format-specific
     state and behavior.

     If 'message' is omitted, the new instance is created in a default,
     empty state.  If 'message' is an *note email.message.Message: 27c.
     instance, its contents are copied; furthermore, any format-specific
     information is converted insofar as possible if 'message' is a
     ‘Message’ instance.  If 'message' is a string, a byte string, or a
     file, it should contain an RFC 5322(1)-compliant message, which is
     read and parsed.  Files should be open in binary mode, but text
     mode files are accepted for backward compatibility.

     The format-specific state and behaviors offered by subclasses vary,
     but in general it is only the properties that are not specific to a
     particular mailbox that are supported (although presumably the
     properties are specific to a particular mailbox format).  For
     example, file offsets for single-file mailbox formats and file
     names for directory-based mailbox formats are not retained, because
     they are only applicable to the original mailbox.  But state such
     as whether a message has been read by the user or marked as
     important is retained, because it applies to the message itself.

     There is no requirement that ‘Message’ instances be used to
     represent messages retrieved using *note Mailbox: 128e. instances.
     In some situations, the time and memory required to generate
     ‘Message’ representations might not be acceptable.  For such
     situations, ‘Mailbox’ instances also offer string and file-like
     representations, and a custom message factory may be specified when
     a ‘Mailbox’ instance is initialized.

* Menu:

* MaildirMessage objects::
* mboxMessage objects::
* MHMessage objects::
* BabylMessage objects::
* MMDFMessage objects::

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc5322.html


File: python.info,  Node: MaildirMessage objects,  Next: mboxMessage objects,  Up: Message objects

5.20.3.8 ‘MaildirMessage’ objects
.................................

 -- Classe: mailbox.MaildirMessage (message=None)

     A message with Maildir-specific behaviors.  Parameter 'message' has
     the same meaning as with the *note Message: 1292. constructor.

     Typically, a mail user agent application moves all of the messages
     in the ‘new’ subdirectory to the ‘cur’ subdirectory after the first
     time the user opens and closes the mailbox, recording that the
     messages are old whether or not they’ve actually been read.  Each
     message in ‘cur’ has an “info” section added to its file name to
     store information about its state.  (Some mail readers may also add
     an “info” section to messages in ‘new’.)  The “info” section may
     take one of two forms: it may contain “2,” followed by a list of
     standardized flags (e.g., “2,FR”) or it may contain “1,” followed
     by so-called experimental information.  Standard flags for Maildir
     messages are as follows:

     SinalizadorSignificado   Explicação
                              
     --------------------------------------------------------------
                              
     D          Draft         Under composition
                              
                              
     F          Flagged       Marked as important
                              
                              
     P          Passed        Forwarded, resent, or bounced
                              
                              
     R          Replied       Replied to
                              
                              
     S          Seen          Read
                              
                              
     T          Trashed       Marked for subsequent deletion
                              

     ‘MaildirMessage’ instances offer the following methods:

      -- Método: get_subdir ()

          Return either “new” (if the message should be stored in the
          ‘new’ subdirectory) or “cur” (if the message should be stored
          in the ‘cur’ subdirectory).

               Nota: A message is typically moved from ‘new’ to ‘cur’
               after its mailbox has been accessed, whether or not the
               message has been read.  A message ‘msg’ has been read if
               ‘"S" in msg.get_flags()’ is ‘True’.

      -- Método: set_subdir (subdir)

          Set the subdirectory the message should be stored in.
          Parameter 'subdir' must be either “new” or “cur”.

      -- Método: get_flags ()

          Return a string specifying the flags that are currently set.
          If the message complies with the standard Maildir format, the
          result is the concatenation in alphabetical order of zero or
          one occurrence of each of ‘'D'’, ‘'F'’, ‘'P'’, ‘'R'’, ‘'S'’,
          and ‘'T'’.  The empty string is returned if no flags are set
          or if “info” contains experimental semantics.

      -- Método: set_flags (flags)

          Set the flags specified by 'flags' and unset all others.

      -- Método: add_flag (flag)

          Set the flag(s) specified by 'flag' without changing other
          flags.  To add more than one flag at a time, 'flag' may be a
          string of more than one character.  The current “info” is
          overwritten whether or not it contains experimental
          information rather than flags.

      -- Método: remove_flag (flag)

          Unset the flag(s) specified by 'flag' without changing other
          flags.  To remove more than one flag at a time, 'flag' maybe a
          string of more than one character.  If “info” contains
          experimental information rather than flags, the current “info”
          is not modified.

      -- Método: get_date ()

          Return the delivery date of the message as a floating-point
          number representing seconds since the epoch.

      -- Método: set_date (date)

          Set the delivery date of the message to 'date', a
          floating-point number representing seconds since the epoch.

      -- Método: get_info ()

          Return a string containing the “info” for a message.  This is
          useful for accessing and modifying “info” that is experimental
          (i.e., not a list of flags).

      -- Método: set_info (info)

          Set “info” to 'info', which should be a string.

When a ‘MaildirMessage’ instance is created based upon an *note
mboxMessage: 3771. or *note MMDFMessage: 3908. instance, the ‘Status’
and ‘X-Status’ headers are omitted and the following conversions take
place:

Resulting state          *note mboxMessage: 3771. or
                         *note MMDFMessage: 3908. state
                         
----------------------------------------------------------------------------
                         
“cur” subdirectory       O flag
                         
                         
F flag                   F flag
                         
                         
R flag                   A flag
                         
                         
S flag                   R flag
                         
                         
T flag                   D flag
                         

When a ‘MaildirMessage’ instance is created based upon an *note
MHMessage: 38ee. instance, the following conversions take place:

Resulting state                     *note MHMessage: 38ee. state
                                    
-------------------------------------------------------------------
                                    
“cur” subdirectory                  “unseen” sequence
                                    
                                    
“cur” subdirectory and S flag       no “unseen” sequence
                                    
                                    
F flag                              “flagged” sequence
                                    
                                    
R flag                              “replied” sequence
                                    

When a ‘MaildirMessage’ instance is created based upon a *note
BabylMessage: 3901. instance, the following conversions take place:

Resulting state                     *note BabylMessage: 3901. state
                                    
------------------------------------------------------------------------
                                    
“cur” subdirectory                  “unseen” label
                                    
                                    
“cur” subdirectory and S flag       no “unseen” label
                                    
                                    
P flag                              “forwarded” or “resent” label
                                    
                                    
R flag                              “answered” label
                                    
                                    
T flag                              “deleted” label
                                    


File: python.info,  Node: mboxMessage objects,  Next: MHMessage objects,  Prev: MaildirMessage objects,  Up: Message objects

5.20.3.9 ‘mboxMessage’ objects
..............................

 -- Classe: mailbox.mboxMessage (message=None)

     A message with mbox-specific behaviors.  Parameter 'message' has
     the same meaning as with the *note Message: 1292. constructor.

     Messages in an mbox mailbox are stored together in a single file.
     The sender’s envelope address and the time of delivery are
     typically stored in a line beginning with “From “ that is used to
     indicate the start of a message, though there is considerable
     variation in the exact format of this data among mbox
     implementations.  Flags that indicate the state of the message,
     such as whether it has been read or marked as important, are
     typically stored in ‘Status’ and ‘X-Status’ headers.

     Conventional flags for mbox messages are as follows:

     SinalizadorSignificado    Explicação
                               
     ---------------------------------------------------------------
                               
     R          Read           Read
                               
                               
     O          Old            Previously detected by MUA
                               
                               
     D          Deleted        Marked for subsequent deletion
                               
                               
     F          Flagged        Marked as important
                               
                               
     A          Answered       Replied to
                               

     The “R” and “O” flags are stored in the ‘Status’ header, and the
     “D”, “F”, and “A” flags are stored in the ‘X-Status’ header.  The
     flags and headers typically appear in the order mentioned.

     ‘mboxMessage’ instances offer the following methods:

      -- Método: get_from ()

          Return a string representing the “From “ line that marks the
          start of the message in an mbox mailbox.  The leading “From “
          and the trailing newline are excluded.

      -- Método: set_from (from_, time_=None)

          Set the “From “ line to 'from_', which should be specified
          without a leading “From “ or trailing newline.  For
          convenience, 'time_' may be specified and will be formatted
          appropriately and appended to 'from_'.  If 'time_' is
          specified, it should be a *note time.struct_time: d0b.
          instance, a tuple suitable for passing to *note
          time.strftime(): 1229, or ‘True’ (to use *note time.gmtime():
          1200.).

      -- Método: get_flags ()

          Return a string specifying the flags that are currently set.
          If the message complies with the conventional format, the
          result is the concatenation in the following order of zero or
          one occurrence of each of ‘'R'’, ‘'O'’, ‘'D'’, ‘'F'’, and
          ‘'A'’.

      -- Método: set_flags (flags)

          Set the flags specified by 'flags' and unset all others.
          Parameter 'flags' should be the concatenation in any order of
          zero or more occurrences of each of ‘'R'’, ‘'O'’, ‘'D'’,
          ‘'F'’, and ‘'A'’.

      -- Método: add_flag (flag)

          Set the flag(s) specified by 'flag' without changing other
          flags.  To add more than one flag at a time, 'flag' may be a
          string of more than one character.

      -- Método: remove_flag (flag)

          Unset the flag(s) specified by 'flag' without changing other
          flags.  To remove more than one flag at a time, 'flag' maybe a
          string of more than one character.

When an ‘mboxMessage’ instance is created based upon a *note
MaildirMessage: 38ce. instance, a “From “ line is generated based upon
the *note MaildirMessage: 38ce. instance’s delivery date, and the
following conversions take place:

Resulting state       *note MaildirMessage: 38ce. state
                      
----------------------------------------------------------
                      
R flag                S flag
                      
                      
O flag                “cur” subdirectory
                      
                      
D flag                T flag
                      
                      
F flag                F flag
                      
                      
A flag                R flag
                      

When an ‘mboxMessage’ instance is created based upon an *note MHMessage:
38ee. instance, the following conversions take place:

Resulting state         *note MHMessage: 38ee. state
                        
-------------------------------------------------------
                        
R flag and O flag       no “unseen” sequence
                        
                        
O flag                  “unseen” sequence
                        
                        
F flag                  “flagged” sequence
                        
                        
A flag                  “replied” sequence
                        

When an ‘mboxMessage’ instance is created based upon a *note
BabylMessage: 3901. instance, the following conversions take place:

Resulting state         *note BabylMessage: 3901. state
                        
----------------------------------------------------------
                        
R flag and O flag       no “unseen” label
                        
                        
O flag                  “unseen” label
                        
                        
D flag                  “deleted” label
                        
                        
A flag                  “answered” label
                        

When a ‘mboxMessage’ instance is created based upon an *note
MMDFMessage: 3908. instance, the “From “ line is copied and all flags
directly correspond:

Resulting state       *note MMDFMessage: 3908. state
                      
-------------------------------------------------------
                      
R flag                R flag
                      
                      
O flag                O flag
                      
                      
D flag                D flag
                      
                      
F flag                F flag
                      
                      
A flag                A flag
                      


File: python.info,  Node: MHMessage objects,  Next: BabylMessage objects,  Prev: mboxMessage objects,  Up: Message objects

5.20.3.10 ‘MHMessage’ objects
.............................

 -- Classe: mailbox.MHMessage (message=None)

     A message with MH-specific behaviors.  Parameter 'message' has the
     same meaning as with the *note Message: 1292. constructor.

     MH messages do not support marks or flags in the traditional sense,
     but they do support sequences, which are logical groupings of
     arbitrary messages.  Some mail reading programs (although not the
     standard ‘mh’ and ‘nmh’) use sequences in much the same way flags
     are used with other formats, as follows:

     Sequence       Explicação
                    
     --------------------------------------------------------------
                    
     unseen         Not read, but previously detected by MUA
                    
                    
     replied        Replied to
                    
                    
     flagged        Marked as important
                    

     ‘MHMessage’ instances offer the following methods:

      -- Método: get_sequences ()

          Return a list of the names of sequences that include this
          message.

      -- Método: set_sequences (sequences)

          Set the list of sequences that include this message.

      -- Método: add_sequence (sequence)

          Add 'sequence' to the list of sequences that include this
          message.

      -- Método: remove_sequence (sequence)

          Remove 'sequence' from the list of sequences that include this
          message.

When an ‘MHMessage’ instance is created based upon a *note
MaildirMessage: 38ce. instance, the following conversions take place:

Resulting state          *note MaildirMessage: 38ce. state
                         
-------------------------------------------------------------
                         
“unseen” sequence        no S flag
                         
                         
“replied” sequence       R flag
                         
                         
“flagged” sequence       F flag
                         

When an ‘MHMessage’ instance is created based upon an *note mboxMessage:
3771. or *note MMDFMessage: 3908. instance, the ‘Status’ and ‘X-Status’
headers are omitted and the following conversions take place:

Resulting state          *note mboxMessage: 3771. or
                         *note MMDFMessage: 3908. state
                         
----------------------------------------------------------------------------
                         
“unseen” sequence        no R flag
                         
                         
“replied” sequence       A flag
                         
                         
“flagged” sequence       F flag
                         

When an ‘MHMessage’ instance is created based upon a *note BabylMessage:
3901. instance, the following conversions take place:

Resulting state          *note BabylMessage: 3901. state
                         
-----------------------------------------------------------
                         
“unseen” sequence        “unseen” label
                         
                         
“replied” sequence       “answered” label
                         


File: python.info,  Node: BabylMessage objects,  Next: MMDFMessage objects,  Prev: MHMessage objects,  Up: Message objects

5.20.3.11 ‘BabylMessage’ objects
................................

 -- Classe: mailbox.BabylMessage (message=None)

     A message with Babyl-specific behaviors.  Parameter 'message' has
     the same meaning as with the *note Message: 1292. constructor.

     Certain message labels, called 'attributes', are defined by
     convention to have special meanings.  The attributes are as
     follows:

     Label           Explicação
                     
     ---------------------------------------------------------------
                     
     unseen          Not read, but previously detected by MUA
                     
                     
     deleted         Marked for subsequent deletion
                     
                     
     filed           Copied to another file or mailbox
                     
                     
     answered        Replied to
                     
                     
     forwarded       Forwarded
                     
                     
     edited          Modified by the user
                     
                     
     resent          Resent
                     

     By default, Rmail displays only visible headers.  The
     ‘BabylMessage’ class, though, uses the original headers because
     they are more complete.  Visible headers may be accessed explicitly
     if desired.

     ‘BabylMessage’ instances offer the following methods:

      -- Método: get_labels ()

          Return a list of labels on the message.

      -- Método: set_labels (labels)

          Set the list of labels on the message to 'labels'.

      -- Método: add_label (label)

          Add 'label' to the list of labels on the message.

      -- Método: remove_label (label)

          Remove 'label' from the list of labels on the message.

      -- Método: get_visible ()

          Return a *note Message: 1292. instance whose headers are the
          message’s visible headers and whose body is empty.

      -- Método: set_visible (visible)

          Set the message’s visible headers to be the same as the
          headers in 'message'.  Parameter 'visible' should be a *note
          Message: 1292. instance, an *note email.message.Message: 27c.
          instance, a string, or a file-like object (which should be
          open in text mode).

      -- Método: update_visible ()

          When a ‘BabylMessage’ instance’s original headers are
          modified, the visible headers are not automatically modified
          to correspond.  This method updates the visible headers as
          follows: each visible header with a corresponding original
          header is set to the value of the original header, each
          visible header without a corresponding original header is
          removed, and any of ‘Date’, ‘From’, ‘Reply-To’, ‘To’, ‘CC’,
          and ‘Subject’ that are present in the original headers but not
          the visible headers are added to the visible headers.

When a ‘BabylMessage’ instance is created based upon a *note
MaildirMessage: 38ce. instance, the following conversions take place:

Resulting state         *note MaildirMessage: 38ce. state
                        
------------------------------------------------------------
                        
“unseen” label          no S flag
                        
                        
“deleted” label         T flag
                        
                        
“answered” label        R flag
                        
                        
“forwarded” label       P flag
                        

When a ‘BabylMessage’ instance is created based upon an *note
mboxMessage: 3771. or *note MMDFMessage: 3908. instance, the ‘Status’
and ‘X-Status’ headers are omitted and the following conversions take
place:

Resulting state        *note mboxMessage: 3771. or
                       *note MMDFMessage: 3908. state
                       
--------------------------------------------------------------------------
                       
“unseen” label         no R flag
                       
                       
“deleted” label        D flag
                       
                       
“answered” label       A flag
                       

When a ‘BabylMessage’ instance is created based upon an *note MHMessage:
38ee. instance, the following conversions take place:

Resulting state        *note MHMessage: 38ee. state
                       
------------------------------------------------------
                       
“unseen” label         “unseen” sequence
                       
                       
“answered” label       “replied” sequence
                       


File: python.info,  Node: MMDFMessage objects,  Prev: BabylMessage objects,  Up: Message objects

5.20.3.12 ‘MMDFMessage’ objects
...............................

 -- Classe: mailbox.MMDFMessage (message=None)

     A message with MMDF-specific behaviors.  Parameter 'message' has
     the same meaning as with the *note Message: 1292. constructor.

     As with message in an mbox mailbox, MMDF messages are stored with
     the sender’s address and the delivery date in an initial line
     beginning with “From “.  Likewise, flags that indicate the state of
     the message are typically stored in ‘Status’ and ‘X-Status’
     headers.

     Conventional flags for MMDF messages are identical to those of mbox
     message and are as follows:

     SinalizadorSignificado    Explicação
                               
     ---------------------------------------------------------------
                               
     R          Read           Read
                               
                               
     O          Old            Previously detected by MUA
                               
                               
     D          Deleted        Marked for subsequent deletion
                               
                               
     F          Flagged        Marked as important
                               
                               
     A          Answered       Replied to
                               

     The “R” and “O” flags are stored in the ‘Status’ header, and the
     “D”, “F”, and “A” flags are stored in the ‘X-Status’ header.  The
     flags and headers typically appear in the order mentioned.

     ‘MMDFMessage’ instances offer the following methods, which are
     identical to those offered by *note mboxMessage: 3771.:

      -- Método: get_from ()

          Return a string representing the “From “ line that marks the
          start of the message in an mbox mailbox.  The leading “From “
          and the trailing newline are excluded.

      -- Método: set_from (from_, time_=None)

          Set the “From “ line to 'from_', which should be specified
          without a leading “From “ or trailing newline.  For
          convenience, 'time_' may be specified and will be formatted
          appropriately and appended to 'from_'.  If 'time_' is
          specified, it should be a *note time.struct_time: d0b.
          instance, a tuple suitable for passing to *note
          time.strftime(): 1229, or ‘True’ (to use *note time.gmtime():
          1200.).

      -- Método: get_flags ()

          Return a string specifying the flags that are currently set.
          If the message complies with the conventional format, the
          result is the concatenation in the following order of zero or
          one occurrence of each of ‘'R'’, ‘'O'’, ‘'D'’, ‘'F'’, and
          ‘'A'’.

      -- Método: set_flags (flags)

          Set the flags specified by 'flags' and unset all others.
          Parameter 'flags' should be the concatenation in any order of
          zero or more occurrences of each of ‘'R'’, ‘'O'’, ‘'D'’,
          ‘'F'’, and ‘'A'’.

      -- Método: add_flag (flag)

          Set the flag(s) specified by 'flag' without changing other
          flags.  To add more than one flag at a time, 'flag' may be a
          string of more than one character.

      -- Método: remove_flag (flag)

          Unset the flag(s) specified by 'flag' without changing other
          flags.  To remove more than one flag at a time, 'flag' maybe a
          string of more than one character.

When an ‘MMDFMessage’ instance is created based upon a *note
MaildirMessage: 38ce. instance, a “From “ line is generated based upon
the *note MaildirMessage: 38ce. instance’s delivery date, and the
following conversions take place:

Resulting state       *note MaildirMessage: 38ce. state
                      
----------------------------------------------------------
                      
R flag                S flag
                      
                      
O flag                “cur” subdirectory
                      
                      
D flag                T flag
                      
                      
F flag                F flag
                      
                      
A flag                R flag
                      

When an ‘MMDFMessage’ instance is created based upon an *note MHMessage:
38ee. instance, the following conversions take place:

Resulting state         *note MHMessage: 38ee. state
                        
-------------------------------------------------------
                        
R flag and O flag       no “unseen” sequence
                        
                        
O flag                  “unseen” sequence
                        
                        
F flag                  “flagged” sequence
                        
                        
A flag                  “replied” sequence
                        

When an ‘MMDFMessage’ instance is created based upon a *note
BabylMessage: 3901. instance, the following conversions take place:

Resulting state         *note BabylMessage: 3901. state
                        
----------------------------------------------------------
                        
R flag and O flag       no “unseen” label
                        
                        
O flag                  “unseen” label
                        
                        
D flag                  “deleted” label
                        
                        
A flag                  “answered” label
                        

When an ‘MMDFMessage’ instance is created based upon an *note
mboxMessage: 3771. instance, the “From “ line is copied and all flags
directly correspond:

Resulting state       *note mboxMessage: 3771. state
                      
-------------------------------------------------------
                      
R flag                R flag
                      
                      
O flag                O flag
                      
                      
D flag                D flag
                      
                      
F flag                F flag
                      
                      
A flag                A flag
                      


File: python.info,  Node: Exceções<18>,  Next: Exemplos<23>,  Prev: Message objects,  Up: mailbox — Manipule caixas de entradas em vários formatos

5.20.3.13 Exceções
..................

The following exception classes are defined in the ‘mailbox’ module:

 -- Exceção: mailbox.Error

     The based class for all other module-specific exceptions.

 -- Exceção: mailbox.NoSuchMailboxError

     Raised when a mailbox is expected but is not found, such as when
     instantiating a *note Mailbox: 128e. subclass with a path that does
     not exist (and with the 'create' parameter set to ‘False’), or when
     opening a folder that does not exist.

 -- Exceção: mailbox.NotEmptyError

     Raised when a mailbox is not empty but is expected to be, such as
     when deleting a folder that contains messages.

 -- Exceção: mailbox.ExternalClashError

     Raised when some mailbox-related condition beyond the control of
     the program causes it to be unable to proceed, such as when failing
     to acquire a lock that another program already holds a lock, or
     when a uniquely generated file name already exists.

 -- Exceção: mailbox.FormatError

     Raised when the data in a file cannot be parsed, such as when an
     *note MH: 17a9. instance attempts to read a corrupted
     ‘.mh_sequences’ file.


File: python.info,  Node: Exemplos<23>,  Prev: Exceções<18>,  Up: mailbox — Manipule caixas de entradas em vários formatos

5.20.3.14 Exemplos
..................

A simple example of printing the subjects of all messages in a mailbox
that seem interesting:

     import mailbox
     for message in mailbox.mbox('~/mbox'):
         subject = message['subject']       # Could possibly be None.
         if subject and 'python' in subject.lower():
             print(subject)

To copy all mail from a Babyl mailbox to an MH mailbox, converting all
of the format-specific information that can be converted:

     import mailbox
     destination = mailbox.MH('~/Mail')
     destination.lock()
     for message in mailbox.Babyl('~/RMAIL'):
         destination.add(mailbox.MHMessage(message))
     destination.flush()
     destination.unlock()

This example sorts mail from several mailing lists into different
mailboxes, being careful to avoid mail corruption due to concurrent
modification by other programs, mail loss due to interruption of the
program, or premature termination due to malformed messages in the
mailbox:

     import mailbox
     import email.errors

     list_names = ('python-list', 'python-dev', 'python-bugs')

     boxes = {name: mailbox.mbox('~/email/%s' % name) for name in list_names}
     inbox = mailbox.Maildir('~/Maildir', factory=None)

     for key in inbox.iterkeys():
         try:
             message = inbox[key]
         except email.errors.MessageParseError:
             continue                # The message is malformed. Just leave it.

         for name in list_names:
             list_id = message['list-id']
             if list_id and name in list_id:
                 # Get mailbox to use
                 box = boxes[name]

                 # Write copy to disk before removing original.
                 # If there's a crash, you might duplicate a message, but
                 # that's better than losing a message completely.
                 box.lock()
                 box.add(message)
                 box.flush()
                 box.unlock()

                 # Remove original message
                 inbox.lock()
                 inbox.discard(key)
                 inbox.flush()
                 inbox.unlock()
                 break               # Found destination, so stop looking.

     for box in boxes.itervalues():
         box.close()


File: python.info,  Node: mimetypes — Mapeia nomes de arquivos para tipos MIME,  Next: base64 — Base16 Base32 Base64 Base85 Data Encodings,  Prev: mailbox — Manipule caixas de entradas em vários formatos,  Up: Manuseio de Dados na Internet

5.20.4 ‘mimetypes’ — Mapeia nomes de arquivos para tipos MIME
-------------------------------------------------------------

'Código-fonte:' Lib/mimetypes.py(1)

__________________________________________________________________

O módulo *note mimetypes: 8f. converte entre um nome de arquivo ou URL e
o tipo MIME associado à extensão do arquivo.  As conversões são
fornecidas do nome do arquivo para o tipo MIME e da extensão do tipo
MIME para o nome do arquivo; codificações não são suportadas para a
última conversão.

O módulo fornece uma classe e várias funções convenientes.  As funções
são a interface normal para este módulo, mas algumas aplicações também
podem estar interessadas na classe.

As funções descritas abaixo fornecem a interface principal para este
módulo.  Se o módulo não foi inicializado, eles chamarão *note init():
393c. se confiarem nas informações configuradas por *note init(): 393c.

 -- Função: mimetypes.guess_type (url, strict=True)

     Adivinha o tipo de arquivo com base em seu nome de arquivo, caminho
     ou URL, fornecido por 'url'.  A URL pode ser uma string ou um *note
     objeto caminho ou similar: 2a0.

     O valor de retorno é uma tupla ‘(type, encoding)’ onde o 'tipo' é
     ‘None’ se o tipo não puder ser ser adivinhado (sufixo ausente ou
     desconhecido) ou uma string no formato ‘'type/subtype'’, utilizável
     para um cabeçalho MIME ‘content-type’.

     'encoding' é ‘None’ para nenhuma codificação ou o nome do programa
     usado para codificar (por exemplo ‘compress’ ou ‘gzip’).  A
     codificação é adequada para uso como cabeçalho ‘Content-Encoding’ ,
     'não' como cabeçalho ‘Content-Transfer-Encoding’.  Os mapeamentos
     são orientados por tabela.  Os sufixos de codificação diferenciam
     maiúsculas de minúsculas; os sufixos de tipo são testados primeiro
     considerando maiúsculas e minúsculas e depois sem considerar.

     O argumento opcional 'strict' é um sinalizador que especifica se a
     lista de tipos MIME conhecidos é limitada apenas aos tipos oficiais
     registrados na IANA(2). Quando 'strict' é ‘True’ (o padrão), apenas
     os tipos IANA são suportados; quando 'strict' é ‘False’, alguns
     tipos MIME adicionais não padronizados, mas geralmente usados,
     também são reconhecidos.

     Alterado na versão 3.8: Adicionado suporte para que a 'url' seja um
     *note objeto caminho ou similar: 2a0.

     Descontinuado desde a versão 3.13: Passar um caminho de arquivo em
     vez de URL está *note suavemente descontinuado: 209.  Use *note
     guess_file_type(): 207. para isso.

 -- Função: mimetypes.guess_file_type (path, *, strict=True)

     Adivinha o tipo de um arquivo com base em seu caminho, dado por
     'path'.  Semelhante à função *note guess_type(): 208, mas aceita um
     caminho em vez de URL. O caminho pode ser uma string, um objeto
     bytes ou um *note objeto caminho ou similar: 2a0.

     Adicionado na versão 3.13.

 -- Função: mimetypes.guess_all_extensions (type, strict=True)

     Adivinha as extensões para um arquivo com base em seu tipo MIME,
     fornecido por 'type'.  O valor de retorno é uma lista de strings
     que fornecem todas as extensões possíveis de nome de arquivo,
     incluindo o ponto (‘'.'’).  Não é garantido que as extensões tenham
     sido associadas a qualquer fluxo de dados específico, mas seriam
     mapeadas para o tipo MIME 'type' por *note guess_type(): 208. e
     *note guess_file_type(): 207.

     O argumento opcional 'strict' tem o mesmo significado que usado com
     a função *note guess_type(): 208.

 -- Função: mimetypes.guess_extension (type, strict=True)

     Adivinha a extensão para um arquivo com base em seu tipo MIME,
     fornecido por 'type'.  O valor de retorno é uma string que fornece
     uma extensão de nome de arquivo, incluindo o ponto (‘'.'’).  Não é
     garantido que a extensão tenha sido associada a qualquer fluxo de
     dados específico, mas seria mapeada para o tipo MIME 'type' por
     *note guess_type(): 208. e *note guess_file_type(): 207.  Se
     nenhuma extensão puder ser adivinhada para 'type', ‘None’ é
     retornado.

     O argumento opcional 'strict' tem o mesmo significado que usado com
     a função *note guess_type(): 208.

Algumas funções e dados adicionais estão disponíveis para controlar o
comportamento do módulo.

 -- Função: mimetypes.init (files=None)

     Inicializa as estruturas de dados internas.  Se fornecido, 'files'
     deverá ser uma sequência de nomes de arquivos que devem ser usados
     para aumentar o mapa de tipos padrão.  Se for omitido, os nomes de
     arquivos a serem usados serão retirados de *note knownfiles: 393e.;
     no Windows, as configurações atuais do registro são carregadas.
     Cada arquivo nomeado em 'files' ou *note knownfiles: 393e. tem
     precedência sobre os definidos anteriormente.  É permitido chamar
     *note init(): 393c. repetidamente.

     Especificar uma lista vazia para 'files' impedirá que os padrões do
     sistema sejam carregados: apenas os valores bem conhecidos estarão
     presentes em uma lista interna.

     Se 'files' for ‘None’, a estrutura de dados interna será
     completamente reconstruída com seu valor inicial padrão.  Essa é
     uma operação estável e produzirá os mesmos resultados quando
     chamada várias vezes.

     Alterado na versão 3.2: Anteriormente, as configurações do registro
     do Windows eram ignoradas.

 -- Função: mimetypes.read_mime_types (filename)

     Carrega o mapa de tipos fornecido no arquivo 'filename', se
     existir.  O mapa de tipos é retornado como um dicionário que faz o
     mapeamento de extensões de nome de arquivo, incluindo o ponto
     inicial (‘'.'’), para strings no formato ‘'tipo/subtipo'’.  Se o
     arquivo 'filename' não existir ou não puder ser lido, ‘None’ é
     retornado.

 -- Função: mimetypes.add_type (type, ext, strict=True)

     Adiciona um mapeamento do tipo MIME 'type' para a extensão 'ext'.
     Quando a extensão já for conhecida, o novo tipo substituirá o
     antigo.  Quando o tipo já for conhecido, a extensão será adicionada
     à lista de extensões conhecidas.

     Quando 'strict' for ‘True’ (o padrão), o mapeamento será adicionado
     aos tipos MIME oficiais, caso contrário, aos não-padrão.

 -- Dado: mimetypes.inited

     Sinalizador indicando se as estruturas de dados globais foram
     inicializadas ou não.  Isso é definido para ‘True’ por *note
     init(): 393c.

 -- Dado: mimetypes.knownfiles

     Lista de nomes de arquivos de mapas de tipos comumente instalados.
     Esses arquivos são normalmente nomeado como ‘mime.types’ e são
     instalados em diferentes locais por diferentes pacote.

 -- Dado: mimetypes.suffix_map

     Dicionário mapeando sufixos para sufixos.  Isso é usado para
     permitir o reconhecimento de arquivos codificados para os quais a
     codificação e o tipo são indicados pela mesma extensão.  Por
     exemplo, em um arquivo codificado, a extensão ‘.tgz’ é mapeada para
     ‘.tar.gz’ para permitir que a codificação e o tipo sejam
     reconhecidos separadamente.

 -- Dado: mimetypes.encodings_map

     Dicionário mapeando extensões de nome de arquivo para os tipos de
     codificação.

 -- Dado: mimetypes.types_map

     Dicionário mapeando extensões de nome do arquivo para tipos MIME.

 -- Dado: mimetypes.common_types

     Dicionário mapeando extensões de nome de arquivo para tipos MIME
     não padronizados, mas comumente encontrados.

Um exemplo de uso do módulo:

     >>> import mimetypes
     >>> mimetypes.init()
     >>> mimetypes.knownfiles
     ['/etc/mime.types', '/etc/httpd/mime.types', ... ]
     >>> mimetypes.suffix_map['.tgz']
     '.tar.gz'
     >>> mimetypes.encodings_map['.gz']
     'gzip'
     >>> mimetypes.types_map['.tgz']
     'application/x-tar-gz'

* Menu:

* Objetos MimeTypes::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/mimetypes.py

   (2) https://www.iana.org/assignments/media-types/media-types.xhtml


File: python.info,  Node: Objetos MimeTypes,  Up: mimetypes — Mapeia nomes de arquivos para tipos MIME

5.20.4.1 Objetos MimeTypes
..........................

A classe *note MimeTypes: 1543. pode ser útil para aplicações que possam
querer mais de um banco de dados de tipos MIME; ela fornece uma
interface semelhante à do módulo *note mimetypes: 8f.

 -- Classe: mimetypes.MimeTypes (filenames=(), strict=True)

     Esta classe representa um banco de dados de tipos MIME. Por padrão,
     ela fornece acesso ao mesmo banco de dados do restante deste
     módulo.  O banco de dados inicial é uma cópia daquele fornecido
     pelo módulo e pode ser estendido ao carregar arquivos adicionais no
     formato ‘mime.types’ no banco de dados, usando os métodos *note
     read(): 3947. ou *note readfp(): 3948.  Os dicionários de
     mapeamento também podem ser limpos antes de carregar dados
     adicionais, caso os dados padrões não sejam desejados.

     O parâmetro opcional 'filenames' pode ser usado para carregar
     arquivos adicionais “em cima” do banco de dados padrão.

      -- Atributo: suffix_map

          Dicionário mapeando sufixo para sufixo.  Isso é usado para
          permitir o reconhecimento de arquivos codificados para os
          quais a codificação e o tipo são indicados pela mesma
          extensão.  Por exemplo, a extensão ‘.tgz’ é mapeada para
          ‘.tar.gz’ para permitir que a codificação e o tipo sejam
          reconhecidos separadamente.  Inicialmente, isso é uma cópia do
          *note suffix_map: 3941. global definido no módulo.

      -- Atributo: encodings_map

          Dicionário que mapeia extensões de nomes de arquivo para tipos
          de codificação.  Inicialmente, é uma cópia do *note
          encodings_map: 3942. global definido no módulo.

      -- Atributo: types_map

          Tupla contendo dois dicionários, mapeando extensões de nomes
          de arquivo para tipos MIME: o primeiro dicionário é para tipos
          não padrão e o segundo, para tipos padrão.  Eles são
          inicializados por *note common_types: 3944. e *note types_map:
          3943.

      -- Atributo: types_map_inv

          Tupla contendo dois dicionários, mapeando tipos MIME para uma
          lista de extensões de nomes de arquivo: o primeiro dicionário
          é para os tipos não padrão e o segundo para os tipos padrão.
          Eles são inicializados por *note common_types: 3944. e *note
          types_map: 3943.

      -- Método: guess_extension (type, strict=True)

          Similar à função *note guess_extension(): 393d, usando as
          tabelas armazenadas como parte do objeto.

      -- Método: guess_type (url, strict=True)

          Similar à função *note guess_type(): 208, usando as tabelas
          armazenadas como parte do objeto.

      -- Método: guess_file_type (path, *, strict=True)

          Similar à função *note guess_file_type(): 207, usando as
          tabelas armazenadas como parte do objeto.

          Adicionado na versão 3.13.

      -- Método: guess_all_extensions (type, strict=True)

          Similar à função *note guess_all_extensions(): 19d5, usando as
          tabelas armazenadas como parte do objeto.

      -- Método: read (filename, strict=True)

          Carrega as informações do tipo MIME de um arquivo chamado
          'filename'.  Usa *note readfp(): 3948. para analisar o
          arquivo.

          Se 'strict' for ‘True’, as informações serão adicionadas à
          lista de tipos padrão, caso contrário, à lista de tipos não
          padrão.

      -- Método: readfp (fp, strict=True)

          Carrega as informações do tipo MIME de um arquivo aberto 'fp'.
          O arquivo precisa estar no formato padrão dos arquivos
          ‘mime.types’.

          Se 'strict' for ‘True’, as informações serão adicionadas à
          lista de tipos padrão, caso contrário, à lista de tipos não
          padrão.

      -- Método: read_windows_registry (strict=True)

          Carrega as informações do tipo MIME a partir do registro do
          Windows.

          *note Disponibilidade: 1ed8.: Windows.

          Se 'strict' for ‘True’, as informações serão adicionadas à
          lista de tipos padrão, caso contrário, à lista de tipos não
          padrão.

          Adicionado na versão 3.2.

      -- Método: add_type (type, ext, strict=True)

          Adiciona um mapeamento do tipo MIME 'type' para a extensão
          'ext'.  Quando a extensão já for conhecida, o novo tipo
          substituirá o antigo.  Quando o tipo já for conhecido, a
          extensão será adicionada à lista de extensões conhecidas.

          Quando 'strict' for ‘True’ (o padrão), o mapeamento será
          adicionado aos tipos MIME oficiais, caso contrário, aos
          não-padrão.


File: python.info,  Node: base64 — Base16 Base32 Base64 Base85 Data Encodings,  Next: binascii — Converte entre binário e ASCII,  Prev: mimetypes — Mapeia nomes de arquivos para tipos MIME,  Up: Manuseio de Dados na Internet

5.20.5 ‘base64’ — Base16, Base32, Base64, Base85 Data Encodings
---------------------------------------------------------------

'Código-fonte:' Lib/base64.py(1)

__________________________________________________________________

This module provides functions for encoding binary data to printable
ASCII characters and decoding such encodings back to binary data.  This
includes the *note encodings specified in: 3955. RFC 4648(2) (Base64,
Base32 and Base16) and the non-standard *note Base85 encodings: 3956.

Existem duas interfaces fornecidas por este módulo.  A interface moderna
oferece suporte a codificar *note objetos bytes ou similares: d4f. para
*note bytes: 1c2. ASCII, e decodificar *note objetos bytes ou similares:
d4f. ou strings contendo ASCII para *note bytes: 1c2.  Ambos os
alfabetos de base 64 definidos em RFC 4648(3) (normal e seguro para URL
e sistema de arquivos) são suportados.

The *note legacy interface: 3957. does not support decoding from
strings, but it does provide functions for encoding and decoding to and
from *note file objects: 1203.  It only supports the Base64 standard
alphabet, and it adds newlines every 76 characters as per RFC 2045(4).
Note that if you are looking for RFC 2045(5) support you probably want
to be looking at the *note email: 3b. package instead.

Alterado na versão 3.3: Strings Unicode exclusivamente ASCII agora são
aceitas pelas funções de decodificação da interface moderna.

Alterado na versão 3.4: Quaisquer *note objetos bytes ou similares: d4f.
agora são aceitos por todas as funções de codificação e decodificação
neste módulo.  Adicionado suporte a ASCII85/Base85.

* Menu:

* RFC 4648 Encodings::
* Base85 Encodings::
* Legacy Interface::
* Considerações de Segurança: Considerações de Segurança<2>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/base64.py

   (2) https://datatracker.ietf.org/doc/html/rfc4648.html

   (3) https://datatracker.ietf.org/doc/html/rfc4648.html

   (4) https://datatracker.ietf.org/doc/html/rfc2045.html

   (5) https://datatracker.ietf.org/doc/html/rfc2045.html


File: python.info,  Node: RFC 4648 Encodings,  Next: Base85 Encodings,  Up: base64 — Base16 Base32 Base64 Base85 Data Encodings

5.20.5.1 RFC 4648 Encodings
...........................

The RFC 4648(1) encodings are suitable for encoding binary data so that
it can be safely sent by email, used as parts of URLs, or included as
part of an HTTP POST request.

 -- Função: base64.b64encode (s, altchars=None)

     Codifica o *note objeto bytes ou similar: d4f. 's' usando Base64 e
     retorna o *note bytes: 1c2. codificado.

     Optional 'altchars' must be a *note bytes-like object: d4f. of
     length 2 which specifies an alternative alphabet for the ‘+’ and
     ‘/’ characters.  This allows an application to e.g.  generate URL
     or filesystem safe Base64 strings.  The default is ‘None’, for
     which the standard Base64 alphabet is used.

     May assert or raise a *note ValueError: 202. if the length of
     'altchars' is not 2.  Raises a *note TypeError: 2c3. if 'altchars'
     is not a *note bytes-like object: d4f.

 -- Função: base64.b64decode (s, altchars=None, validate=False)

     Decodifica o *note objeto bytes ou similar: d4f. ou string ASCII
     's' codificada em Base64 e retorna o *note bytes: 1c2.
     decodificado.

     Optional 'altchars' must be a *note bytes-like object: d4f. or
     ASCII string of length 2 which specifies the alternative alphabet
     used instead of the ‘+’ and ‘/’ characters.

     A *note binascii.Error: 105c. exception is raised if 's' is
     incorrectly padded.

     If 'validate' is ‘False’ (the default), characters that are neither
     in the normal base-64 alphabet nor the alternative alphabet are
     discarded prior to the padding check.  If 'validate' is ‘True’,
     these non-alphabet characters in the input result in a *note
     binascii.Error: 105c.

     For more information about the strict base64 check, see *note
     binascii.a2b_base64(): 1719.

     May assert or raise a *note ValueError: 202. if the length of
     'altchars' is not 2.

 -- Função: base64.standard_b64encode (s)

     Encode *note bytes-like object: d4f. 's' using the standard Base64
     alphabet and return the encoded *note bytes: 1c2.

 -- Função: base64.standard_b64decode (s)

     Decode *note bytes-like object: d4f. or ASCII string 's' using the
     standard Base64 alphabet and return the decoded *note bytes: 1c2.

 -- Função: base64.urlsafe_b64encode (s)

     Encode *note bytes-like object: d4f. 's' using the URL- and
     filesystem-safe alphabet, which substitutes ‘-’ instead of ‘+’ and
     ‘_’ instead of ‘/’ in the standard Base64 alphabet, and return the
     encoded *note bytes: 1c2.  The result can still contain ‘=’.

 -- Função: base64.urlsafe_b64decode (s)

     Decode *note bytes-like object: d4f. or ASCII string 's' using the
     URL- and filesystem-safe alphabet, which substitutes ‘-’ instead of
     ‘+’ and ‘_’ instead of ‘/’ in the standard Base64 alphabet, and
     return the decoded *note bytes: 1c2.

 -- Função: base64.b32encode (s)

     Encode the *note bytes-like object: d4f. 's' using Base32 and
     return the encoded *note bytes: 1c2.

 -- Função: base64.b32decode (s, casefold=False, map01=None)

     Decode the Base32 encoded *note bytes-like object: d4f. or ASCII
     string 's' and return the decoded *note bytes: 1c2.

     'casefold' opcional é uma flag especificando se um alfabeto
     minúsculo é aceitável como entrada.  Por razões de segurança, o
     padrão é ‘False’.

     RFC 4648(2) allows for optional mapping of the digit 0 (zero) to
     the letter O (oh), and for optional mapping of the digit 1 (one) to
     either the letter I (eye) or letter L (el).  The optional argument
     'map01' when not ‘None’, specifies which letter the digit 1 should
     be mapped to (when 'map01' is not ‘None’, the digit 0 is always
     mapped to the letter O). For security purposes the default is
     ‘None’, so that 0 and 1 are not allowed in the input.

     A *note binascii.Error: 105c. is raised if 's' is incorrectly
     padded or if there are non-alphabet characters present in the
     input.

 -- Função: base64.b32hexencode (s)

     Similar to *note b32encode(): 395e. but uses the Extended Hex
     Alphabet, as defined in RFC 4648(3).

     Adicionado na versão 3.10.

 -- Função: base64.b32hexdecode (s, casefold=False)

     Similar to *note b32decode(): 105b. but uses the Extended Hex
     Alphabet, as defined in RFC 4648(4).

     This version does not allow the digit 0 (zero) to the letter O (oh)
     and digit 1 (one) to either the letter I (eye) or letter L (el)
     mappings, all these characters are included in the Extended Hex
     Alphabet and are not interchangeable.

     Adicionado na versão 3.10.

 -- Função: base64.b16encode (s)

     Encode the *note bytes-like object: d4f. 's' using Base16 and
     return the encoded *note bytes: 1c2.

 -- Função: base64.b16decode (s, casefold=False)

     Decode the Base16 encoded *note bytes-like object: d4f. or ASCII
     string 's' and return the decoded *note bytes: 1c2.

     'casefold' opcional é uma flag especificando se um alfabeto
     minúsculo é aceitável como entrada.  Por razões de segurança, o
     padrão é ‘False’.

     A *note binascii.Error: 105c. is raised if 's' is incorrectly
     padded or if there are non-alphabet characters present in the
     input.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc4648.html

   (2) https://datatracker.ietf.org/doc/html/rfc4648.html

   (3) https://datatracker.ietf.org/doc/html/rfc4648.html

   (4) https://datatracker.ietf.org/doc/html/rfc4648.html


File: python.info,  Node: Base85 Encodings,  Next: Legacy Interface,  Prev: RFC 4648 Encodings,  Up: base64 — Base16 Base32 Base64 Base85 Data Encodings

5.20.5.2 Base85 Encodings
.........................

Base85 encoding is not formally specified but rather a de facto
standard, thus different systems perform the encoding differently.

The *note a85encode(): f50. and *note b85encode(): f52. functions in
this module are two implementations of the de facto standard.  You
should call the function with the Base85 implementation used by the
software you intend to work with.

The two functions present in this module differ in how they handle the
following:

   * Whether to include enclosing ‘<~’ and ‘~>’ markers

   * Whether to include newline characters

   * The set of ASCII characters used for encoding

   * Handling of null bytes

Refer to the documentation of the individual functions for more
information.

 -- Função: base64.a85encode (b, *, foldspaces=False, wrapcol=0,
          pad=False, adobe=False)

     Encode the *note bytes-like object: d4f. 'b' using Ascii85 and
     return the encoded *note bytes: 1c2.

     'foldspaces' is an optional flag that uses the special short
     sequence ‘y’ instead of 4 consecutive spaces (ASCII 0x20) as
     supported by ‘btoa’.  This feature is not supported by the
     “standard” Ascii85 encoding.

     'wrapcol' controls whether the output should have newline (‘b'\n'’)
     characters added to it.  If this is non-zero, each output line will
     be at most this many characters long, excluding the trailing
     newline.

     'pad' controls whether the input is padded to a multiple of 4
     before encoding.  Note that the ‘btoa’ implementation always pads.

     'adobe' controls whether the encoded byte sequence is framed with
     ‘<~’ and ‘~>’, which is used by the Adobe implementation.

     Adicionado na versão 3.4.

 -- Função: base64.a85decode (b, *, foldspaces=False, adobe=False,
          ignorechars=b' \t\n\r\x0b')

     Decode the Ascii85 encoded *note bytes-like object: d4f. or ASCII
     string 'b' and return the decoded *note bytes: 1c2.

     'foldspaces' is a flag that specifies whether the ‘y’ short
     sequence should be accepted as shorthand for 4 consecutive spaces
     (ASCII 0x20).  This feature is not supported by the “standard”
     Ascii85 encoding.

     'adobe' controla se a entrada está no formato Adobe Ascii85 (ou
     seja, cercada por <~ e ~>).

     'ignorechars' should be a byte string containing characters to
     ignore from the input.  This should only contain whitespace
     characters, and by default contains all whitespace characters in
     ASCII.

     Adicionado na versão 3.4.

 -- Função: base64.b85encode (b, pad=False)

     Encode the *note bytes-like object: d4f. 'b' using base85 (as used
     in e.g.  git-style binary diffs) and return the encoded *note
     bytes: 1c2.

     If 'pad' is true, the input is padded with ‘b'\0'’ so its length is
     a multiple of 4 bytes before encoding.

     Adicionado na versão 3.4.

 -- Função: base64.b85decode (b)

     Decode the base85-encoded *note bytes-like object: d4f. or ASCII
     string 'b' and return the decoded *note bytes: 1c2.  Padding is
     implicitly removed, if necessary.

     Adicionado na versão 3.4.

 -- Função: base64.z85encode (s)

     Encode the *note bytes-like object: d4f. 's' using Z85 (as used in
     ZeroMQ) and return the encoded *note bytes: 1c2.  See Z85
     specification(1) for more information.

     Adicionado na versão 3.13.

 -- Função: base64.z85decode (s)

     Decode the Z85-encoded *note bytes-like object: d4f. or ASCII
     string 's' and return the decoded *note bytes: 1c2.  See Z85
     specification(2) for more information.

     Adicionado na versão 3.13.

   ---------- Footnotes ----------

   (1) https://rfc.zeromq.org/spec/32/

   (2) https://rfc.zeromq.org/spec/32/


File: python.info,  Node: Legacy Interface,  Next: Considerações de Segurança<2>,  Prev: Base85 Encodings,  Up: base64 — Base16 Base32 Base64 Base85 Data Encodings

5.20.5.3 Legacy Interface
.........................

 -- Função: base64.decode (input, output)

     Decode the contents of the binary 'input' file and write the
     resulting binary data to the 'output' file.  'input' and 'output'
     must be *note file objects: 1203.  'input' will be read until
     ‘input.readline()’ returns an empty bytes object.

 -- Função: base64.decodebytes (s)

     Decode the *note bytes-like object: d4f. 's', which must contain
     one or more lines of base64 encoded data, and return the decoded
     *note bytes: 1c2.

     Adicionado na versão 3.1.

 -- Função: base64.encode (input, output)

     Encode the contents of the binary 'input' file and write the
     resulting base64 encoded data to the 'output' file.  'input' and
     'output' must be *note file objects: 1203.  'input' will be read
     until ‘input.read()’ returns an empty bytes object.  *note
     encode(): 3964. inserts a newline character (‘b'\n'’) after every
     76 bytes of the output, as well as ensuring that the output always
     ends with a newline, as per RFC 2045(1) (MIME).

 -- Função: base64.encodebytes (s)

     Encode the *note bytes-like object: d4f. 's', which can contain
     arbitrary binary data, and return *note bytes: 1c2. containing the
     base64-encoded data, with newlines (‘b'\n'’) inserted after every
     76 bytes of output, and ensuring that there is a trailing newline,
     as per RFC 2045(2) (MIME).

     Adicionado na versão 3.1.

Um exemplo de uso do módulo:

     >>> import base64
     >>> encoded = base64.b64encode(b'data to be encoded')
     >>> encoded
     b'ZGF0YSB0byBiZSBlbmNvZGVk'
     >>> data = base64.b64decode(encoded)
     >>> data
     b'data to be encoded'

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2045.html

   (2) https://datatracker.ietf.org/doc/html/rfc2045.html


File: python.info,  Node: Considerações de Segurança<2>,  Prev: Legacy Interface,  Up: base64 — Base16 Base32 Base64 Base85 Data Encodings

5.20.5.4 Considerações de Segurança
...................................

A new security considerations section was added to RFC 4648(1) (section
12); it’s recommended to review the security section for any code
deployed to production.

Ver também
..........

Módulo *note binascii: 10.

     Módulo de suporte contendo conversões ASCII para binário e binário
     para ASCII.

RFC 1521(2) - MIME (Multipurpose Internet Mail Extensions) Part One: Mechanisms for Specifying and Describing the Format of Internet Message Bodies

     Section 5.2, “Base64 Content-Transfer-Encoding,” provides the
     definition of the base64 encoding.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc4648.html

   (2) https://datatracker.ietf.org/doc/html/rfc1521.html


File: python.info,  Node: binascii — Converte entre binário e ASCII,  Next: quopri — Codifica e decodifica dados MIME imprimidos entre aspas,  Prev: base64 — Base16 Base32 Base64 Base85 Data Encodings,  Up: Manuseio de Dados na Internet

5.20.6 ‘binascii’ — Converte entre binário e ASCII
--------------------------------------------------

__________________________________________________________________

O módulo *note binascii: 10. contém vários métodos para converter entre
binário e várias representações binárias codificadas em ASCII.
Normalmente, você não usará essas funções diretamente, mas usará módulos
invólucros como *note base64: e. em vez disso.  O módulo *note binascii:
10. contém funções de baixo nível escritas em C para maior velocidade
que são usadas pelos módulos de nível mais alto.

     Nota: Funções ‘a2b_*’ aceitam strings Unicode contendo apenas
     caracteres ASCII. Outras funções aceitam apenas *note objetos bytes
     ou similares: d4f. (como *note bytes: 1c2, *note bytearray: 2ea. e
     outros objetos que suportam o protocolo buffer).

     Alterado na versão 3.3: Strings unicode exclusivamente ASCII agora
     são aceitas pelas funções ‘a2b_*’.

O módulo *note binascii: 10. define as seguintes funções:

 -- Função: binascii.a2b_uu (string)

     Converte uma única linha de dados uuencoded de volta para binário e
     retorna os dados binários.  As linhas normalmente contêm 45 bytes
     (binários), exceto a última linha.  Os dados da linha podem ser
     seguidos por espaços em branco.

 -- Função: binascii.b2a_uu (data, *, backtick=False)

     Converte dados binários para uma linha de caracteres ASCII, o valor
     de retorno é a linha convertida, incluindo um caractere de nova
     linha.  O comprimento de 'data' deve ser no máximo 45.  Se
     'backtick' for true, zeros são representados por ‘'`'’ em vez de
     espaços.

     Alterado na versão 3.7: Adicionado o parâmetro 'backtick'.

 -- Função: binascii.a2b_base64 (string, /, *, strict_mode=False)

     Converte um bloco de dados base64 de volta para binário e retorna
     os dados binários.  Mais de uma linha pode ser passada por vez.

     Se 'strict_mode' for true, somente dados base64 válidos serão
     convertidos.  Dados base64 inválidos levantarão *note
     binascii.Error: 105c.

     base64 válido:

        * Em conformidade com RFC 3548(1).

        * Contém apenas caracteres do alfabeto base64.

        * Não contém dados excedentes após o preenchimento (incluindo
          excesso de preenchimento, novas linhas, etc.).

        * Não começa com um preenchimento.

     Alterado na versão 3.11: Adicionado o parâmetro 'strict_mode'.

 -- Função: binascii.b2a_base64 (data, *, newline=True)

     Converte dados binários para uma linha de caracteres ASCII em
     codificação base64.  O valor de retorno é a linha convertida,
     incluindo um caractere de nova linha se 'newline' for verdadeiro.
     A saída desta função está em conformidade com RFC 3548(2).

     Alterado na versão 3.6: Adicionado o parâmetro 'newline'.

 -- Função: binascii.a2b_qp (data, header=False)

     Convert a block of quoted-printable data back to binary and return
     the binary data.  More than one line may be passed at a time.  If
     the optional argument 'header' is present and true, underscores
     will be decoded as spaces.

 -- Função: binascii.b2a_qp (data, quotetabs=False, istext=True,
          header=False)

     Convert binary data to a line(s) of ASCII characters in
     quoted-printable encoding.  The return value is the converted
     line(s).  If the optional argument 'quotetabs' is present and true,
     all tabs and spaces will be encoded.  If the optional argument
     'istext' is present and true, newlines are not encoded but trailing
     whitespace will be encoded.  If the optional argument 'header' is
     present and true, spaces will be encoded as underscores per RFC
     1522(3).  If the optional argument 'header' is present and false,
     newline characters will be encoded as well; otherwise linefeed
     conversion might corrupt the binary data stream.

 -- Função: binascii.crc_hqx (data, value)

     Compute a 16-bit CRC value of 'data', starting with 'value' as the
     initial CRC, and return the result.  This uses the CRC-CCITT
     polynomial 'x'^16 + 'x'^12 + 'x'^5 + 1, often represented as
     0x1021.  This CRC is used in the binhex4 format.

 -- Função: binascii.crc32 (data[, value])

     Compute CRC-32, the unsigned 32-bit checksum of 'data', starting
     with an initial CRC of 'value'.  The default initial CRC is zero.
     The algorithm is consistent with the ZIP file checksum.  Since the
     algorithm is designed for use as a checksum algorithm, it is not
     suitable for use as a general hash algorithm.  Use as follows:

          print(binascii.crc32(b"hello world"))
          # Or, in two pieces:
          crc = binascii.crc32(b"hello")
          crc = binascii.crc32(b" world", crc)
          print('crc32 = {:#010x}'.format(crc))

     Alterado na versão 3.0: O resultado é sempre sem sinal.

 -- Função: binascii.b2a_hex (data[, sep[, bytes_per_sep=1]])
 -- Função: binascii.hexlify (data[, sep[, bytes_per_sep=1]])

     Return the hexadecimal representation of the binary 'data'.  Every
     byte of 'data' is converted into the corresponding 2-digit hex
     representation.  The returned bytes object is therefore twice as
     long as the length of 'data'.

     Similar functionality (but returning a text string) is also
     conveniently accessible using the *note bytes.hex(): d8d. method.

     If 'sep' is specified, it must be a single character str or bytes
     object.  It will be inserted in the output after every
     'bytes_per_sep' input bytes.  Separator placement is counted from
     the right end of the output by default, if you wish to count from
     the left, supply a negative 'bytes_per_sep' value.

          >>> import binascii
          >>> binascii.b2a_hex(b'\xb9\x01\xef')
          b'b901ef'
          >>> binascii.hexlify(b'\xb9\x01\xef', '-')
          b'b9-01-ef'
          >>> binascii.b2a_hex(b'\xb9\x01\xef', b'_', 2)
          b'b9_01ef'
          >>> binascii.b2a_hex(b'\xb9\x01\xef', b' ', -2)
          b'b901 ef'

     Alterado na versão 3.8: The 'sep' and 'bytes_per_sep' parameters
     were added.

 -- Função: binascii.a2b_hex (hexstr)
 -- Função: binascii.unhexlify (hexstr)

     Return the binary data represented by the hexadecimal string
     'hexstr'.  This function is the inverse of *note b2a_hex(): 25ae.
     'hexstr' must contain an even number of hexadecimal digits (which
     can be upper or lower case), otherwise an *note Error: 105c.
     exception is raised.

     Similar functionality (accepting only text string arguments, but
     more liberal towards whitespace) is also accessible using the *note
     bytes.fromhex(): b02. class method.

 -- Exceção: binascii.Error

     Exception raised on errors.  These are usually programming errors.

 -- Exceção: binascii.Incomplete

     Exception raised on incomplete data.  These are usually not
     programming errors, but may be handled by reading a little more
     data and trying again.

Ver também
..........

Módulo *note base64: e.

     Support for RFC compliant base64-style encoding in base 16, 32, 64,
     and 85.

Módulo *note quopri: b7.

     Support for quoted-printable encoding used in MIME email messages.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc3548.html

   (2) https://datatracker.ietf.org/doc/html/rfc3548.html

   (3) https://datatracker.ietf.org/doc/html/rfc1522.html


File: python.info,  Node: quopri — Codifica e decodifica dados MIME imprimidos entre aspas,  Prev: binascii — Converte entre binário e ASCII,  Up: Manuseio de Dados na Internet

5.20.7 ‘quopri’ — Codifica e decodifica dados MIME imprimidos entre aspas
-------------------------------------------------------------------------

'Código-fonte:' Lib/quopri.py(1)

__________________________________________________________________

Este módulo realiza codificação e decodificação de transporte imprimida
entre aspas, como definido em RFC 1521(2): “MIME (Multipurpose Internet
Mail Extensions) Part One: Mechanisms for Specifying and Describing the
Format of Internet Message Bodies”.  A codificação imprimida entre aspas
é projetada para dados em que há relativamente poucos caracteres não
imprimíveis; o esquema de codificação base64 disponível através do
módulo *note base64: e. é mais compacto se existirem muitos desses
caracteres, como no envio de um arquivo gráfico.

 -- Função: quopri.decode (input, output, header=False)

     Decodifica o conteúdo do arquivo 'input' e escreve os dados
     binários decodificados resultantes no arquivo 'output'.  'input' e
     'output' devem ser *note objetos arquivos binários: 1203.  Se o
     argumento opcional 'header' estiver presente e for true, o
     sublinhado será decodificado como espaço.  Isso é usado para
     decodificar cabeçalhos codificados em “Q”, conforme descrito em RFC
     1522(3): “MIME (Multipurpose Internet Mail Extensions) Part Two:
     Message Header Extensions for Non-ASCII Text”.

 -- Função: quopri.encode (input, output, quotetabs, header=False)

     Codifica o conteúdo do arquivo 'input' e grava os dados imprimíveis
     entre aspas resultantes no arquivo 'output'.  'input' e 'output'
     devem ser *note objetos arquivos binários: 1203.  'quotetabs', um
     sinalizador não opcional que controla a codificação de espaços e
     tabulações incorporados; quando true, codifica esses espaços em
     branco incorporados e, quando false, os deixa sem codificação.
     Observe que os espaços e tabulações que aparecem no final das
     linhas são sempre codificados, conforme RFC 1521(4).  'header' é um
     sinalizador que controla se os espaços são codificados como
     sublinhados, conforme RFC 1522(5).

 -- Função: quopri.decodestring (s, header=False)

     Como *note decode(): 25b1, exceto pelo fato de aceitar uma fonte
     *note bytes: 1c2. e retornar o correspondente decodificado *note
     bytes: 1c2.

 -- Função: quopri.encodestring (s, quotetabs=False, header=False)

     Como *note encode(): 25b0, exceto pelo fato de aceitar uma fonte
     *note bytes: 1c2. e retornar o *note bytes: 1c2. codificado
     correspondente.  Por padrão, envia um valor ‘False’ para o
     parâmetro 'quotetabs' da função *note encode(): 25b0.

Ver também
..........

Módulo *note base64: e.

     Codifica e decodifica dados de base64 MIME

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/quopri.py

   (2) https://datatracker.ietf.org/doc/html/rfc1521.html

   (3) https://datatracker.ietf.org/doc/html/rfc1522.html

   (4) https://datatracker.ietf.org/doc/html/rfc1521.html

   (5) https://datatracker.ietf.org/doc/html/rfc1522.html


File: python.info,  Node: Ferramentas de Processamento de Markup Estruturado,  Next: Protocolos de Internet e Suporte,  Prev: Manuseio de Dados na Internet,  Up: A Biblioteca Padrão do Python

5.21 Ferramentas de Processamento de Markup Estruturado
=======================================================

O Python suporta uma variedade de módulos para trabalhar com vários
formatos de marcação de dados estruturados.  Isso inclui módulos para
trabalhar com o Standard Generalized Markup Language (SGML) e o
Hypertext Markup Language (HTML) e várias interfaces para trabalhar com
o XML (Extensible Markup Language).

* Menu:

* html — Suporte HTML (HyperText Markup Language): html — Suporte HTML HyperText Markup Language.
* html.parser — Analisador simples de HTML e XHTML: html parser — Analisador simples de HTML e XHTML.
* html.entities — Definições de entidades gerais de HTML: html entities — Definições de entidades gerais de HTML.
* Módulos de Processamento de XML::
* xml.etree.ElementTree — A API XML ElementTree: xml etree ElementTree — A API XML ElementTree.
* xml.dom — The Document Object Model API: xml dom — The Document Object Model API.
* xml.dom.minidom — Minimal DOM implementation: xml dom minidom — Minimal DOM implementation.
* xml.dom.pulldom — Suporte para construir árvores parciais de DOM: xml dom pulldom — Suporte para construir árvores parciais de DOM.
* xml.sax — Support for SAX2 parsers: xml sax — Support for SAX2 parsers.
* xml.sax.handler — Classes base para manipuladores de SAX: xml sax handler — Classes base para manipuladores de SAX.
* xml.sax.saxutils — Utilitários de SAX: xml sax saxutils — Utilitários de SAX.
* xml.sax.xmlreader — Interface for XML parsers: xml sax xmlreader — Interface for XML parsers.
* xml.parsers.expat — Fast XML parsing using Expat: xml parsers expat — Fast XML parsing using Expat.


File: python.info,  Node: html — Suporte HTML HyperText Markup Language,  Next: html parser — Analisador simples de HTML e XHTML,  Up: Ferramentas de Processamento de Markup Estruturado

5.21.1 ‘html’ — Suporte HTML (HyperText Markup Language)
--------------------------------------------------------

'Código-fonte:' Lib/html/__init__.py(1)

__________________________________________________________________

Este módulo define utilitários para manipular HTML.

 -- Função: html.escape (s, quote=True)

     Converte os caracteres ‘&’, ‘<’ e ‘>’ na string 's' para sequências
     seguras em HTML. Use se necessitar exibir texto que possa conter
     estes caracteres no HTML. Se o flag opcional 'quote' é verdadeiro
     (padrão), os caracteres (‘"’) e (‘'’) também são convertidos; isso
     auxilia na inclusão de valores delimitados por aspas num atributo
     HTML, como em ‘<a href="...">’.  Se 'quote' for definido para
     falso, os caracteres (‘"’) e (‘'’) não são traduzidos.

     Adicionado na versão 3.2.

 -- Função: html.unescape (s)

     Converte todas as referências de caracteres numéricos e nomeados
     (ex.  ‘&gt;’, ‘&#62;’, ‘&#x3e;’) na string 's' para caracteres
     Unicode correspondentes.  Essa função usa as regras definidas pelo
     padrão HTML 5 para referências de caracteres, sejam válidas ou
     inválidas, e a *note lista de referência de caracteres nomeados do
     HTML 5: 1111.

     Adicionado na versão 3.4.

__________________________________________________________________

Sub módulos no pacote ‘html’ são:

   * *note html.parser: 6d. – analisador HTML/XHTML com modo de análise
     branda

   * *note html.entities: 6c. – definições das entidade HTML

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/html/__init__.py


File: python.info,  Node: html parser — Analisador simples de HTML e XHTML,  Next: html entities — Definições de entidades gerais de HTML,  Prev: html — Suporte HTML HyperText Markup Language,  Up: Ferramentas de Processamento de Markup Estruturado

5.21.2 ‘html.parser’ — Analisador simples de HTML e XHTML
---------------------------------------------------------

'Código-fonte:' Lib/html/parser.py(1)

__________________________________________________________________

Este módulo define uma classe *note HTMLParser: 87b. que serve como base
para analisar arquivos de texto formatados em HTML (HyperText Markup
Language) e XHTML.

 -- Classe: html.parser.HTMLParser (*, convert_charrefs=True,
          scripting=False)

     Cria uma instância de analisador sintático capaz de analisar
     marcação inválida.

     Se 'convert_charrefs' for verdadeiro (o padrão), todas as
     referências de caracteres (exceto as de elementos como ‘script’ e
     ‘style’) serão convertidas automaticamente para os caracteres
     Unicode correspondentes.

     Se 'scripting' for falso (o padrão), o conteúdo do elemento
     ‘noscript’ será analisado normalmente; se for verdadeiro, será
     retornado como está, sem ser analisado.

     Uma instância de *note HTMLParser: 87b. recebe dados HTML e chama
     métodos de tratamento quando encontra tags de abertura, tags de
     fechamento, texto, comentários e outros elementos de marcação.  O
     usuário deve criar uma subclasse de *note HTMLParser: 87b. e
     substituir seus métodos para implementar o comportamento desejado.

     Este analisador sintático não verifica se as tags de fechamento
     correspondem às tags de abertura nem chama o manipulador de tags de
     fechamento para elementos que são fechados implicitamente pelo
     fechamento de um elemento externo.

     Alterado na versão 3.4: Adicionado o argumento nomeado
     'convert_charrefs'.

     Alterado na versão 3.5: O valor padrão para o argumento
     'convert_charrefs' agora é ‘True’.

     Alterado na versão 3.13.10: Adicionado o parâmetro 'scripting'.

* Menu:

* Exemplo de aplicação para análise de HTML::
* Métodos HTMLParser::
* Exemplos: Exemplos<24>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/html/parser.py


File: python.info,  Node: Exemplo de aplicação para análise de HTML,  Next: Métodos HTMLParser,  Up: html parser — Analisador simples de HTML e XHTML

5.21.2.1 Exemplo de aplicação para análise de HTML
..................................................

Como exemplo básico, abaixo está um analisador HTML simples que usa a
classe *note HTMLParser: 87b. para exibir as tags de abertura, tags de
fechamento e dados à medida que são encontrados:

     from html.parser import HTMLParser

     class MyHTMLParser(HTMLParser):
         def handle_starttag(self, tag, attrs):
             print("Encontrada a tag de abertura  :", tag)

         def handle_endtag(self, tag):
             print("Encontrada a tag de fechamento:", tag)

         def handle_data(self, data):
             print("Encontrados alguns dados      :", data)

     parser = MyHTMLParser()
     parser.feed('<html><head><title>Teste</title></head>'
                 '<body><h1>Me analise!</h1></body></html>')

A saída então será:

     Encontrada a tag de abertura  : html
     Encontrada a tag de abertura  : head
     Encontrada a tag de abertura  : title
     Encontrados alguns dados      : Teste
     Encontrada a tag de fechamento: title
     Encontrada a tag de fechamento: head
     Encontrada a tag de abertura  : body
     Encontrada a tag de abertura  : h1
     Encontrados alguns dados      : Me analise!
     Encontrada a tag de fechamento: h1
     Encontrada a tag de fechamento: body
     Encontrada a tag de fechamento: html


File: python.info,  Node: Métodos HTMLParser,  Next: Exemplos<24>,  Prev: Exemplo de aplicação para análise de HTML,  Up: html parser — Analisador simples de HTML e XHTML

5.21.2.2 Métodos ‘HTMLParser’
.............................

Instâncias de *note HTMLParser: 87b. têm os seguintes métodos:

 -- Método: HTMLParser.feed (data)

     Fornece algum texto ao analisador.  Ele será processado na medida
     em que consistir em elementos completos; dados incompletos serão
     armazenados em buffer até que mais dados sejam fornecidos ou que o
     método *note close(): 162e. seja chamado.  Os dados devem ser do
     tipo *note str: 44c.

 -- Método: HTMLParser.close ()

     Força o processamento de todos os dados em buffer como se fossem
     seguidos por uma marca de fim de arquivo.  Este método pode ser
     redefinido por uma classe derivada para definir processamento
     adicional no final da entrada, mas a versão redefinida deve sempre
     chamar o método *note close(): 162e. da classe base *note
     HTMLParser: 87b.

 -- Método: HTMLParser.reset ()

     Reinicializa a instância.  Perde todos os dados não processados.
     Este método é chamado implicitamente no momento da instanciação.

 -- Método: HTMLParser.getpos ()

     Retorna o número da linha atual e o deslocamento.

 -- Método: HTMLParser.get_starttag_text ()

     Retorna o texto da tag de abertura aberta mais recentemente.
     Normalmente, isso não é necessário para processamento estruturado,
     mas pode ser útil ao lidar com HTML “como implantado” ou para
     regenerar a entrada com alterações mínimas (o espaço em branco
     entre os atributos pode ser preservado, etc.).

Os seguintes métodos são chamados quando elementos de dados ou de
marcação são encontrados e devem ser sobrescritos em uma subclasse.  As
implementações da classe base não fazem nada (exceto por *note
handle_startendtag(): 3983.):

 -- Método: HTMLParser.handle_starttag (tag, attrs)

     Este método é chamado para manipular a tag de abertura de um
     elemento (por exemplo, ‘<div id="main">’).

     O argumento 'tag' é o nome da tag convertido para minúsculas.  O
     argumento 'attrs' é uma lista de pares ‘(nome, valor)’ contendo os
     atributos encontrados dentro dos colchetes ‘<>’ da tag.  O 'nome'
     será traduzido para minúsculas, as aspas no 'valor' foram removidas
     e as referências a caracteres e entidades foram substituídas.

     Por exemplo, para a tag ‘<A HREF="https://www.cwi.nl/">’, este
     método seria chamado como ‘handle_starttag('a', [('href',
     'https://www.cwi.nl/')])’.

     Todas as referências de entidade de *note html.entities: 6c. são
     substituídas nos valores dos atributos.

 -- Método: HTMLParser.handle_endtag (tag)

     Este método é chamado para manipular a tag de fechamento de um
     elemento (por exemplo, ‘</div>’).

     O argumento 'tag' é o nome da etiqueta convertido para letras
     minúsculas.

 -- Método: HTMLParser.handle_startendtag (tag, attrs)

     Similar a *note handle_starttag(): 3984, mas chamado quando o
     analisador sintático encontra uma tag vazia no estilo XHTML (‘<img
     ... />’).  Este método pode ser substituído por subclasses que
     requerem essa informação lexical específica; a implementação padrão
     simplesmente chama *note handle_starttag(): 3984. e *note
     handle_endtag(): 3985.

 -- Método: HTMLParser.handle_data (data)

     Este método é chamado para processar dados arbitrários (por
     exemplo, nós de texto e o conteúdo de elementos como ‘script’ e
     ‘style’).

 -- Método: HTMLParser.handle_entityref (name)

     Este método é chamado para processar uma referência de caractere
     nomeada no formato ‘&name;’ (por exemplo, ‘&gt;’), onde 'name' é
     uma referência de entidade genérica (por exemplo, ‘'gt'’).  Este
     método só é chamado se 'convert_charrefs' for falso.

 -- Método: HTMLParser.handle_charref (name)

     Este método é chamado para processar referências de caracteres
     numéricos decimais e hexadecimais no formato ‘&#NNN;’ e ‘&#xNNN;’.
     Por exemplo, o equivalente decimal para ‘&gt;’ é ‘&#62;’, enquanto
     o hexadecimal é ‘&#x3E;’; neste caso, o método receberá ‘'62'’ ou
     ‘'x3E'’.  Este método só é chamado se 'convert_charrefs' for falso.

 -- Método: HTMLParser.handle_comment (data)

     Este método é chamado quando um comentário é encontrado (por
     exemplo, ‘<!--comentário-->’).

     Por exemplo, o comentário ‘<!-- comentário -->’ fará com que este
     método seja chamado com o argumento ‘' comentário '’.

     O conteúdo dos comentários condicionais do Internet Explorer
     (condcoms) também será enviado para este método, portanto, para
     ‘<!--[if IE 9]>conteúdo específico do IE9<![endif]-->’, este método
     receberá ‘'[if IE 9]>conteúdo específico do IE9<![endif]'’.

 -- Método: HTMLParser.handle_decl (decl)

     Este método é chamado para lidar com uma declaração de doctype HTML
     (por exemplo, ‘<!DOCTYPE html>’).

     O parâmetro 'decl' será todo o conteúdo da declaração dentro da
     marcação ‘<!...>’ (por exemplo, ‘'DOCTYPE html'’).

 -- Método: HTMLParser.handle_pi (data)

     Método chamado quando uma instrução de processamento é encontrada.
     O parâmetro 'data' conterá a instrução de processamento completa.
     Por exemplo, para a instrução de processamento ‘<?proc
     color='red'>’, este método seria chamado como ‘handle_pi("proc
     color='red'")’.  Ele foi projetado para ser substituído por uma
     classe derivada; a implementação da classe base não faz nada.

          Nota: A classe *note HTMLParser: 87b. usa as regras sintáticas
          SGML para processar instruções.  Uma instrução de
          processamento XHTML que usa o caractere ‘'?'’ no final fará
          com que o ‘'?'’ seja incluído em 'data'.

 -- Método: HTMLParser.unknown_decl (data)

     Este método é chamado quando uma declaração não reconhecida é lida
     pelo analisador sintático.

     O parâmetro 'data' será todo o conteúdo da declaração dentro da
     marcação ‘<![...]>’.  Às vezes, é útil que ele seja sobrescrito por
     uma classe derivada.  A implementação da classe base não faz nada.


File: python.info,  Node: Exemplos<24>,  Prev: Métodos HTMLParser,  Up: html parser — Analisador simples de HTML e XHTML

5.21.2.3 Exemplos
.................

A classe a seguir implementa um analisador sintático que será usado para
ilustrar mais exemplos:

     from html.parser import HTMLParser
     from html.entities import name2codepoint

     class MyHTMLParser(HTMLParser):
         def handle_starttag(self, tag, attrs):
             print("Tag inicial:", tag)
             for attr in attrs:
                 print("     attr:", attr)

         def handle_endtag(self, tag):
             print("Tag final  :", tag)

         def handle_data(self, data):
             print("Dados      :", data)

         def handle_comment(self, data):
             print("Comentário :", data)

         def handle_entityref(self, name):
             c = chr(name2codepoint[name])
             print("Ent nomeada:", c)

         def handle_charref(self, name):
             if name.startswith('x'):
                 c = chr(int(name[1:], 16))
             else:
                 c = chr(int(name))
             print("Num ent    :", c)

         def handle_decl(self, data):
             print("Decl       :", data)

     parser = MyHTMLParser()

Analisando um doctype:

     >>> parser.feed('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" '
     ...             '"http://www.w3.org/TR/html4/strict.dtd">')
     Decl       : DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"

Analisando um elemento com alguns atributos e um título:

     >>> parser.feed('<img src="python-logo.png" alt="The Python logo">')
     Tag inicial: img
          attr: ('src', 'python-logo.png')
          attr: ('alt', 'The Python logo')
     >>>
     >>> parser.feed('<h1>Python</h1>')
     Tag inicial: h1
     Dados      : Python
     Tag final  : h1

O conteúdo de elementos como ‘script’ e ‘style’ é retornado como está,
sem mais análises:

     >>> parser.feed('<style type="text/css">#python { color: green }</style>')
     Tag inicial: style
          attr: ('type', 'text/css')
     Dados      : #python { color: green }
     Tag final  : style

     >>> parser.feed('<script type="text/javascript">'
     ...             'alert("<strong>hello! &#9786;</strong>");</script>')
     Tag inicial: script
          attr: ('type', 'text/javascript')
     Dados      : alert("<strong>hello! &#9786;</strong>");
     Tag final  : script

Analisando comentários:

     >>> parser.feed('<!-- a comment -->'
     ...             '<!--[if IE 9]>IE-specific content<![endif]-->')
     Comentário : a comment
     Comentário : [if IE 9]>IE-specific content<![endif]

Analisando referências de caracteres nomeadas e numéricas e
convertendo-as para o caractere correto (nota: essas 3 referências são
todas equivalentes a ‘'>'’):

     >>> parser = MyHTMLParser()
     >>> parser.feed('&gt;&#62;&#x3E;')
     Data     : >>>

     >>> parser = MyHTMLParser(convert_charrefs=False)
     >>> parser.feed('&gt;&#62;&#x3E;')
     Named ent: >
     Num ent  : >
     Num ent  : >

Alimentar o *note feed(): 397f. com blocos incompletos funciona, mas
*note handle_data(): 3986. pode ser chamado mais de uma vez se
'convert_charrefs' for falso:

     >>> for chunk in ['<sp', 'an>buff', 'ered', ' text</s', 'pan>']:
     ...     parser.feed(chunk)
     ...
     Start tag: span
     Data     : buff
     Data     : ered
     Data     :  text
     End tag  : span

Analisando HTML inválido (por exemplo, atributos sem aspas) também
funciona:

     >>> parser.feed('<p><a class=link href=#main>tag soup</p ></a>')
     Tag inicial: p
     Tag inicial: a
          attr: ('class', 'link')
          attr: ('href', '#main')
     Dados      : tag soup
     Tag final  : p
     Tag final  : a


File: python.info,  Node: html entities — Definições de entidades gerais de HTML,  Next: Módulos de Processamento de XML,  Prev: html parser — Analisador simples de HTML e XHTML,  Up: Ferramentas de Processamento de Markup Estruturado

5.21.3 ‘html.entities’ — Definições de entidades gerais de HTML
---------------------------------------------------------------

'Código-fonte:' Lib/html/entities.py(1)

__________________________________________________________________

Esse módulo define quatro dicionários, *note html5: 1111, *note
name2codepoint: 3992, *note codepoint2name: 3993. e *note entitydefs:
3994.

 -- Dado: html.entities.html5

     Um dicionário que mapeia referências de caracteres nomeados em
     HTML5 (2) para os caracteres Unicode equivalentes, por exemplo,
     ‘html5['gt;'] == '>'’.  Note que o caractere de ponto e vírgula
     final está incluído no nome (por exemplo, ‘'gt;'’), entretanto
     alguns dos nomes são aceitos pelo padrão mesmo sem o ponto e
     vírgula: neste caso o nome está presente com e sem o ‘';'’.  Veja
     também *note html.unescape(): 95e.

     Adicionado na versão 3.3.

 -- Dado: html.entities.entitydefs

     Um dicionário que mapeia as definições de entidade XHTML 1.0 para
     seu texto substituto em ISO Latin-1.

 -- Dado: html.entities.name2codepoint

     Um dicionário que mapeia nomes de entidades HTML4 para os pontos de
     código Unicode.

 -- Dado: html.entities.codepoint2name

     Um dicionário que mapeia pontos de código Unicode para nomes de
     entidades HTML4.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/html/entities.py

   (2) Veja
‘https://html.spec.whatwg.org/multipage/named-characters.html#named-character-references’


File: python.info,  Node: Módulos de Processamento de XML,  Next: xml etree ElementTree — A API XML ElementTree,  Prev: html entities — Definições de entidades gerais de HTML,  Up: Ferramentas de Processamento de Markup Estruturado

5.21.4 Módulos de Processamento de XML
--------------------------------------

'Código-fonte:' Lib/xml/(1)

__________________________________________________________________

As interfaces do Python para processar XML estão agrupadas no pacote
‘xml’.

     Nota: Se você precisar analisar dados não confiáveis ou não
     autenticados, consulte *note Segurança no XML: 3999.

É importante observar que os módulos no pacote *note xml: 120. exigem
que está disponível pelo menos um analisador sintático XML compatível
com SAX. O analisador sintático Expat está incluído no Python, então o
módulo *note xml.parsers.expat: 126. estará sempre disponível.

A documentação para os pacotes *note xml.dom: 121. e *note xml.sax: 129.
são a definição das ligações Python para as interfaces DOM e SAX.

Os submódulos de manipulação XML são:

   * *note xml.etree.ElementTree: 125.: a API de ElementTree, um
     processador XML simples e leve

   * *note xml.dom: 121.: a definição da API de DOM

   * *note xml.dom.minidom: 122.: uma implementação mínima do DOM

   * suporte para construir árvores parciais de DOM no *note
     xml.dom.pulldom: 123.

   * *note xml.sax: 129.: Classe base SAX2 e funções de conveniência

   * *note xml.parsers.expat: 126.: a ligação do analisador sintático
     Expat
* Menu:

* Segurança no XML::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/xml/


File: python.info,  Node: Segurança no XML,  Up: Módulos de Processamento de XML

5.21.4.1 Segurança no XML
.........................

Um atacante pode abusar dos recursos XML para realizar ataques de
negação de serviço, acessar arquivos locais, gerar conexões de rede com
outras máquinas ou contornar firewalls.  quando XML controlado pelo
atacante está sendo analisado, no Python ou de qualquer outra forma.

Os analisadores XML embutidos do Python dependem da biblioteca
libexpat(1), comumente chamada Expat, para análise de XML.

Por padrão, Expat não acessa arquivos locais nem cria conexões de rede.

Versões do Expat anteriores à 2.7.2 podem ser vulneráveis às
vulnerabilidades “billion laughs”, “quadratic blowup” e “large tokens”,
ou ao uso desproporcional de memória dinâmica.  O Python inclui uma
cópia do Expat, e o uso da versão incluída ou de uma versão do sistema
depende de como o interpretador Python *note foi configurado: 18b5. no
seu ambiente.  O Python pode ser vulnerável se usar versões antigas do
Expat.  Verifique ‘pyexpat.EXPAT_VERSION’.

*note xmlrpc: 12d. é 'vulnerável' ao ataque “decompression bomb”.

billion laughs / exponential entity expansion

     O ataque Billion Laughs(2) (bilhões de risadas, em uma tradução
     livre) - também conhecido como “exponential entity expansion”
     (expansão exponencial de entidades, em uma tradução livre) - usa
     vários níveis de entidades aninhadas.  Cada entidade se refere a
     outra entidade várias vezes, e a definição final da entidade contém
     uma pequena string.  A expansão exponencial resulta em vários
     gigabytes de texto e consome muita memória e tempo de CPU.

quadratic blowup entity expansion

     Um ataque “quadratic blowup” (explosão quadrática, em uma tradução
     livre) português) é semelhante a um ataque Billion Laughs(3); ele
     abusa da expansão de entidades também.  Em vez de entidades
     aninhadas, ele repete uma grande entidade com alguns milhares de
     caracteres repetidamente.  O ataque não é tão eficiente quanto o
     caso exponencial, mas evita acionar contramedidas do analisador
     sintático que proíbem entidades profundamente aninhadas.

decompression bomb

     “Bombas de descompressão” em uma tradução livre.  Também conhecidas
     como ZIP bomb(4), se aplicam a todas as bibliotecas XML que podem
     analisar fluxos XML comprimidos, como fluxos de HTTP compactados
     com gzip ou arquivos comprimidos com LZMA. Para um atacante, isso
     pode reduzir a quantidade de dados transmitidos em três magnitudes
     ou mais.

large tokens

     Expat precisa analisar novamente os símbolos não finalizados; sem a
     proteção introduzida no Expat 2.6.0, isso pode levar a um tempo de
     execução quadrático que pode ser usado para causar negação de
     serviço na aplicação ao analisar XML. O problema é conhecido como
     CVE 2023-52425(5).

   ---------- Footnotes ----------

   (1) https://github.com/libexpat/libexpat

   (2) https://en.wikipedia.org/wiki/Billion_laughs

   (3) https://en.wikipedia.org/wiki/Billion_laughs

   (4) https://en.wikipedia.org/wiki/Zip_bomb

   (5) https://www.cve.org/CVERecord?id=CVE-2023-52425


File: python.info,  Node: xml etree ElementTree — A API XML ElementTree,  Next: xml dom — The Document Object Model API,  Prev: Módulos de Processamento de XML,  Up: Ferramentas de Processamento de Markup Estruturado

5.21.5 ‘xml.etree.ElementTree’ — A API XML ElementTree
------------------------------------------------------

'Código-fonte:' Lib/xml/etree/ElementTree.py(1)

__________________________________________________________________

O módulo *note xml.etree.ElementTree: 125. implementa uma API simples e
eficiente para análise e criação de dados XML.

Alterado na versão 3.3: Este módulo usará uma implementação rápida
sempre que disponível.

Descontinuado desde a versão 3.3: O módulo ‘xml.etree.cElementTree’ foi
descontinuado.

     Nota: Se você precisar analisar dados não confiáveis ou não
     autenticados, consulte *note Segurança no XML: 3999.

* Menu:

* Tutorial: Tutorial<3>.
* Suporte a XPath::
* Referência: Referência<4>.
* Suporte a XInclude::
* Referência: Referência<5>.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/xml/etree/ElementTree.py


File: python.info,  Node: Tutorial<3>,  Next: Suporte a XPath,  Up: xml etree ElementTree — A API XML ElementTree

5.21.5.1 Tutorial
.................

Esse é um tutorial curto para usar *note xml.etree.ElementTree: 125.
(‘ET’ na versão resumida).  O objetivo é demonstrar alguns conceitos
básicos e trechos de códigos do módulo.

* Menu:

* Árvore e elementos XML::
* Analisando XML::
* A API de pull para análise sem bloqueio::
* Encontrando elementos interessantes::
* Modificando um arquivo XML::
* Construindo documentos XML::
* Analisando XML com espaços de nomes::


File: python.info,  Node: Árvore e elementos XML,  Next: Analisando XML,  Up: Tutorial<3>

5.21.5.2 Árvore e elementos XML
...............................

XML é um formato de dados estritamente hierárquico, e a maneira mais
natural de representá-lo é como uma árvore.  ‘ET’ possui duas classes
para esse propósito - *note ElementTree: 955. representa todo o
documento XML como uma árvore e *note Element: 310. representa um único
nó desta árvore.  Interações com o documento inteiro (ler e escrever
de/para arquivos) são frequentemente feitos em nível de *note
ElementTree: 955.  Interações com um único elemento XML e seus
subelementos são feitos a nível de *note Element: 310. .


File: python.info,  Node: Analisando XML,  Next: A API de pull para análise sem bloqueio,  Prev: Árvore e elementos XML,  Up: Tutorial<3>

5.21.5.3 Analisando XML
.......................

Usaremos o documento XML fictício ‘country_data.xml’ como dados de
amostra para esta seção:

     <?xml version="1.0"?>
     <data>
         <country name="Liechtenstein">
             <rank>1</rank>
             <year>2008</year>
             <gdppc>141100</gdppc>
             <neighbor name="Austria" direction="E"/>
             <neighbor name="Switzerland" direction="W"/>
         </country>
         <country name="Singapore">
             <rank>4</rank>
             <year>2011</year>
             <gdppc>59900</gdppc>
             <neighbor name="Malaysia" direction="N"/>
         </country>
         <country name="Panama">
             <rank>68</rank>
             <year>2011</year>
             <gdppc>13600</gdppc>
             <neighbor name="Costa Rica" direction="W"/>
             <neighbor name="Colombia" direction="E"/>
         </country>
     </data>

Nós podemos importar esses dados lendo de um arquivo:

     import xml.etree.ElementTree as ET
     tree = ET.parse('country_data.xml')
     root = tree.getroot()

Ou diretamente de uma string:

     root = ET.fromstring(country_data_as_string)

*note fromstring(): 39a3. obtém o XML de uma string e armazena em um
*note Element: 310, que será o elemento raiz dessa árvore.  Outras
funções de análise sintática podem criar um *note ElementTree: 955.
Cheque a documentação para se certificar sobre qual dado será retornado.

Assim como um *note Element: 310, ‘root’ tem uma tag e um dicionário de
atributos:

     >>> root.tag
     'data'
     >>> root.attrib
     {}

Ele também tem nós filhos sobre os quais nós podemos iterar:

     >>> for child in root:
     ...     print(child.tag, child.attrib)
     ...
     country {'name': 'Liechtenstein'}
     country {'name': 'Singapore'}
     country {'name': 'Panama'}

Nós filhos são os mais próximos, e nós podemos acessar nós específicos
por índices:

     >>> root[0][1].text
     '2008'

     Nota: Nem todos os elementos da entrada XML acabarão como elementos
     da árvore analisada.  Atualmente, este módulo ignora quaisquer
     comentários XML, instruções de processamento e declarações de tipo
     de documento na entrada.  No entanto, árvores construídas usando a
     API deste módulo, em vez de serem analisadas a partir de texto XML,
     podem conter comentários e instruções de processamento; eles serão
     incluídos ao gerar a saída XML. Uma declaração de tipo de documento
     pode ser acessada passando uma instância personalizada *note
     TreeBuilder: a5f. para o construtor *note XMLParser: a5e.


File: python.info,  Node: A API de pull para análise sem bloqueio,  Next: Encontrando elementos interessantes,  Prev: Analisando XML,  Up: Tutorial<3>

5.21.5.4 A API de pull para análise sem bloqueio
................................................

A maioria das funções de análise fornecidas por este módulo exigem que
todo o documento seja lido de uma só vez antes de retornar qualquer
resultado.  É possível usar um *note XMLParser: a5e. e alimentar dados
nele de forma incremental, mas é uma API de push que chama métodos em um
destino da função de retorno, o que é de muito baixo nível e
inconveniente para a maioria das necessidades.  Às vezes, o que o
usuário realmente deseja é ser capaz de analisar XML de forma
incremental, sem operações bloqueantes, enquanto desfruta da
conveniência de objetos *note Element: 310. totalmente construídos.

A ferramenta mais poderosa para fazer isso é *note XMLPullParser: 1029.
Ela não requer uma leitura bloqueante para obter os dados XML e, em vez
disso, é alimentada com dados de forma incremental com chamadas de *note
XMLPullParser.feed(): 39a5.  Para obter os elementos XML analisados,
chame *note XMLPullParser.read_events(): 39a6.  Aqui está um exemplo:

     >>> parser = ET.XMLPullParser(['start', 'end'])
     >>> parser.feed('<mytag>sometext')
     >>> list(parser.read_events())
     [('start', <Element 'mytag' at 0x7fa66db2be58>)]
     >>> parser.feed(' more text</mytag>')
     >>> for event, elem in parser.read_events():
     ...     print(event)
     ...     print(elem.tag, 'text=', elem.text)
     ...
     end
     mytag text= sometext more text

O caso de uso óbvio são aplicações que operam sem bloqueio, onde os
dados XML são recebidos de um soquete ou lidos de forma incremental de
algum dispositivo de armazenamento.  Nesses casos, leituras bloqueantes
são inaceitáveis.

Por ser tão flexível, *note XMLPullParser: 1029. pode ser inconveniente
de usar em casos de uso mais simples.  Se você não se importa que sua
aplicação bloqueie a leitura de dados XML, mas ainda assim gostaria de
ter recursos de análise incremental, dê uma olhada em *note iterparse():
273.  Pode ser útil quando você está lendo um documento XML grande e não
deseja mantê-lo totalmente na memória.

Onde o feedback 'imediato' através de eventos é desejado, chamar o
método *note XMLPullParser.flush(): 270. pode ajudar a reduzir o atraso;
certifique-se de estudar as notas de segurança relacionadas.


File: python.info,  Node: Encontrando elementos interessantes,  Next: Modificando um arquivo XML,  Prev: A API de pull para análise sem bloqueio,  Up: Tutorial<3>

5.21.5.5 Encontrando elementos interessantes
............................................

*note Element: 310. possui alguns métodos úteis que ajudam a iterar
recursivamente sobre toda a subárvore abaixo dele (seus filhos, seus
filhos e assim por diante).  Por exemplo, *note Element.iter(): 1394.:

     >>> for neighbor in root.iter('neighbor'):
     ...     print(neighbor.attrib)
     ...
     {'name': 'Austria', 'direction': 'E'}
     {'name': 'Switzerland', 'direction': 'W'}
     {'name': 'Malaysia', 'direction': 'N'}
     {'name': 'Costa Rica', 'direction': 'W'}
     {'name': 'Colombia', 'direction': 'E'}

*note Element.findall(): 164d. encontra apenas elementos com uma tag que
são filhos diretos do elemento atual.  *note Element.find(): 164b.
encontra o 'primeiro' filho com uma tag específica, e *note
Element.text: 39a8. acessa o conteúdo de texto do elemento.  *note
Element.get(): 39a9. acessa os atributos do elemento:

     >>> for country in root.findall('country'):
     ...     rank = country.find('rank').text
     ...     name = country.get('name')
     ...     print(name, rank)
     ...
     Liechtenstein 1
     Singapore 4
     Panama 68

Uma especificação mais sofisticada de quais elementos procurar é
possível usando *note XPath: bc5.


File: python.info,  Node: Modificando um arquivo XML,  Next: Construindo documentos XML,  Prev: Encontrando elementos interessantes,  Up: Tutorial<3>

5.21.5.6 Modificando um arquivo XML
...................................

*note ElementTree: 955. fornece uma maneira simples de construir
documentos XML e escrevê-los em arquivos.  O método *note
ElementTree.write(): aa4. serve para esse propósito.

Uma vez criado, um objeto *note Element: 310. pode ser manipulado
alterando diretamente seus campos (como *note Element.text: 39a8.),
adicionando e modificando atributos (método *note Element.set(): 39ab.),
bem como como adicionar novos filhos (por exemplo, com *note
Element.append(): 39ac.).

Digamos que queremos adicionar um à classificação de cada país e
adicionar um atributo ‘updated’ ao elemento de classificação:

     >>> for rank in root.iter('rank'):
     ...     new_rank = int(rank.text) + 1
     ...     rank.text = str(new_rank)
     ...     rank.set('updated', 'yes')
     ...
     >>> tree.write('output.xml')

Nosso XML agora se parece com isto:

     <?xml version="1.0"?>
     <data>
         <country name="Liechtenstein">
             <rank updated="yes">2</rank>
             <year>2008</year>
             <gdppc>141100</gdppc>
             <neighbor name="Austria" direction="E"/>
             <neighbor name="Switzerland" direction="W"/>
         </country>
         <country name="Singapore">
             <rank updated="yes">5</rank>
             <year>2011</year>
             <gdppc>59900</gdppc>
             <neighbor name="Malaysia" direction="N"/>
         </country>
         <country name="Panama">
             <rank updated="yes">69</rank>
             <year>2011</year>
             <gdppc>13600</gdppc>
             <neighbor name="Costa Rica" direction="W"/>
             <neighbor name="Colombia" direction="E"/>
         </country>
     </data>

Podemos remover elementos usando *note Element.remove(): 164f.  Digamos
que queremos remover todos os países com classificação superior a 50:

     >>> for country in root.findall('country'):
     ...     # using root.findall() to avoid removal during traversal
     ...     rank = int(country.find('rank').text)
     ...     if rank > 50:
     ...         root.remove(country)
     ...
     >>> tree.write('output.xml')

Observe que a modificação simultânea durante a iteração pode levar a
problemas, assim como ao iterar e modificar listas ou dicionários do
Python.  Portanto, o exemplo primeiro coleta todos os elementos
correspondentes com ‘root.findall()’, e só então itera sobre a lista de
correspondências.

Nosso XML agora se parece com isto:

     <?xml version="1.0"?>
     <data>
         <country name="Liechtenstein">
             <rank updated="yes">2</rank>
             <year>2008</year>
             <gdppc>141100</gdppc>
             <neighbor name="Austria" direction="E"/>
             <neighbor name="Switzerland" direction="W"/>
         </country>
         <country name="Singapore">
             <rank updated="yes">5</rank>
             <year>2011</year>
             <gdppc>59900</gdppc>
             <neighbor name="Malaysia" direction="N"/>
         </country>
     </data>


File: python.info,  Node: Construindo documentos XML,  Next: Analisando XML com espaços de nomes,  Prev: Modificando um arquivo XML,  Up: Tutorial<3>

5.21.5.7 Construindo documentos XML
...................................

A função *note SubElement(): 39ae. também fornece uma maneira
conveniente de criar novos subelementos para um determinado elemento:

     >>> a = ET.Element('a')
     >>> b = ET.SubElement(a, 'b')
     >>> c = ET.SubElement(a, 'c')
     >>> d = ET.SubElement(c, 'd')
     >>> ET.dump(a)
     <a><b /><c><d /></c></a>


File: python.info,  Node: Analisando XML com espaços de nomes,  Prev: Construindo documentos XML,  Up: Tutorial<3>

5.21.5.8 Analisando XML com espaços de nomes
............................................

Se a entrada XML tiver espaços de nomes(1), tags e atributos com
prefixos no formato ‘prefixo:algumatag’ serão expandidos para
‘{uri}algumatag’ onde 'prefixo' é substituído pelo 'URI' completo.  Além
disso, se houver um espaço de nomes padrão(2), esse URI completo será
anexado a todas as tags não prefixadas.

Aqui está um exemplo XML que incorpora dois espaços de nomes, um com o
prefixo “fictional” e outro servindo como espaço de nomes padrão:

     <?xml version="1.0"?>
     <actors xmlns:fictional="http://characters.example.com"
             xmlns="http://people.example.com">
         <actor>
             <name>John Cleese</name>
             <fictional:character>Lancelot</fictional:character>
             <fictional:character>Archie Leach</fictional:character>
         </actor>
         <actor>
             <name>Eric Idle</name>
             <fictional:character>Sir Robin</fictional:character>
             <fictional:character>Gunther</fictional:character>
             <fictional:character>Commander Clement</fictional:character>
         </actor>
     </actors>

Uma maneira de pesquisar e explorar este exemplo XML é adicionar
manualmente o URI a cada tag ou atributo no xpath de um *note find():
164b. ou *note findall(): 164d.:

     root = fromstring(xml_text)
     for actor in root.findall('{http://people.example.com}actor'):
         name = actor.find('{http://people.example.com}name')
         print(name.text)
         for char in actor.findall('{http://characters.example.com}character'):
             print(' |-->', char.text)

A melhor maneira de pesquisar o exemplo XML com espaço de nomes é criar
um dicionário com seus próprios prefixos e usá-los nas funções de
pesquisa:

     ns = {'real_person': 'http://people.example.com',
           'role': 'http://characters.example.com'}

     for actor in root.findall('real_person:actor', ns):
         name = actor.find('real_person:name', ns)
         print(name.text)
         for char in actor.findall('role:character', ns):
             print(' |-->', char.text)

Essas duas abordagens resultam no seguinte:

     John Cleese
      |--> Lancelot
      |--> Archie Leach
     Eric Idle
      |--> Sir Robin
      |--> Gunther
      |--> Commander Clement

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/XML_namespace

   (2) https://www.w3.org/TR/xml-names/#defaulting


File: python.info,  Node: Suporte a XPath,  Next: Referência<4>,  Prev: Tutorial<3>,  Up: xml etree ElementTree — A API XML ElementTree

5.21.5.9 Suporte a XPath
........................

Este módulo fornece suporte limitado para expressões XPath(1) para
localizar elementos em uma árvore.  O objetivo é oferecer suporte a um
pequeno subconjunto da sintaxe abreviada; um mecanismo XPath completo
está fora do escopo do módulo.

* Menu:

* Exemplo: Exemplo<8>.
* Supported XPath syntax::

   ---------- Footnotes ----------

   (1) https://www.w3.org/TR/xpath


File: python.info,  Node: Exemplo<8>,  Next: Supported XPath syntax,  Up: Suporte a XPath

5.21.5.10 Exemplo
.................

Aqui está um exemplo que demonstra alguns dos recursos XPath do módulo.
Estaremos usando o documento XML ‘countrydata’ da seção *note Analisando
XML: 39a1.:

     import xml.etree.ElementTree as ET

     root = ET.fromstring(countrydata)

     # Top-level elements
     root.findall(".")

     # All 'neighbor' grand-children of 'country' children of the top-level
     # elements
     root.findall("./country/neighbor")

     # Nodes with name='Singapore' that have a 'year' child
     root.findall(".//year/..[@name='Singapore']")

     # 'year' nodes that are children of nodes with name='Singapore'
     root.findall(".//*[@name='Singapore']/year")

     # All 'neighbor' nodes that are the second child of their parent
     root.findall(".//neighbor[2]")

Para XML com espaços de nomes, use a notação qualificada usual
‘{espaço-de-nomes}tag’:

     # All dublin-core "title" tags in the document
     root.findall(".//{http://purl.org/dc/elements/1.1/}title")


File: python.info,  Node: Supported XPath syntax,  Prev: Exemplo<8>,  Up: Suporte a XPath

5.21.5.11 Supported XPath syntax
................................

Sintaxe                     Significado
                            
---------------------------------------------------------------------------------------
                            
‘tag’                       Selects all child elements with the given tag.  For
                            example, ‘spam’ selects all child elements named ‘spam’,
                            and ‘spam/egg’ selects all grandchildren named ‘egg’ in
                            all children named ‘spam’.  ‘{namespace}*’ selects all
                            tags in the given namespace, ‘{*}spam’ selects tags
                            named ‘spam’ in any (or no) namespace, and ‘{}*’ only
                            selects tags that are not in a namespace.
                            
                            Alterado na versão 3.8: Support for star-wildcards was
                            added.
                            
                            
‘*’                         Selects all child elements, including comments and
                            processing instructions.  For example, ‘*/egg’ selects
                            all grandchildren named ‘egg’.
                            
                            
‘.’                         Selects the current node.  This is mostly useful at the
                            beginning of the path, to indicate that it’s a relative
                            path.
                            
                            
‘//’                        Selects all subelements, on all levels beneath the
                            current element.  For example, ‘.//egg’ selects all
                            ‘egg’ elements in the entire tree.
                            
                            
‘..’                        Selects the parent element.  Returns ‘None’ if the path
                            attempts to reach the ancestors of the start element
                            (the element ‘find’ was called on).
                            
                            
‘[@attrib]’                 Selects all elements that have the given attribute.
                            
                            
‘[@attrib='value']’         Selects all elements for which the given attribute has
                            the given value.  The value cannot contain quotes.
                            
                            
‘[@attrib!='value']’        Selects all elements for which the given attribute does
                            not have the given value.  The value cannot contain
                            quotes.
                            
                            Adicionado na versão 3.10.
                            
                            
‘[tag]’                     Selects all elements that have a child named ‘tag’.
                            Only immediate children are supported.
                            
                            
‘[.='text']’                Selects all elements whose complete text content,
                            including descendants, equals the given ‘text’.
                            
                            Adicionado na versão 3.7.
                            
                            
‘[.!='text']’               Selects all elements whose complete text content,
                            including descendants, does not equal the given ‘text’.
                            
                            Adicionado na versão 3.10.
                            
                            
‘[tag='text']’              Selects all elements that have a child named ‘tag’ whose
                            complete text content, including descendants, equals the
                            given ‘text’.
                            
                            
‘[tag!='text']’             Selects all elements that have a child named ‘tag’ whose
                            complete text content, including descendants, does not
                            equal the given ‘text’.
                            
                            Adicionado na versão 3.10.
                            
                            
‘[position]’                Selects all elements that are located at the given
                            position.  The position can be either an integer (1 is
                            the first position), the expression ‘last()’ (for the
                            last position), or a position relative to the last
                            position (e.g.  ‘last()-1’).
                            

Predicates (expressions within square brackets) must be preceded by a
tag name, an asterisk, or another predicate.  ‘position’ predicates must
be preceded by a tag name.


File: python.info,  Node: Referência<4>,  Next: Suporte a XInclude,  Prev: Suporte a XPath,  Up: xml etree ElementTree — A API XML ElementTree

5.21.5.12 Referência
....................

* Menu:

* Funções: Funções<9>.


File: python.info,  Node: Funções<9>,  Up: Referência<4>

5.21.5.13 Funções
.................

 -- Função: xml.etree.ElementTree.canonicalize (xml_data=None, *,
          out=None, from_file=None, **options)

     C14N 2.0(1) transformation function.

     Canonicalization is a way to normalise XML output in a way that
     allows byte-by-byte comparisons and digital signatures.  It reduces
     the freedom that XML serializers have and instead generates a more
     constrained XML representation.  The main restrictions regard the
     placement of namespace declarations, the ordering of attributes,
     and ignorable whitespace.

     This function takes an XML data string ('xml_data') or a file path
     or file-like object ('from_file') as input, converts it to the
     canonical form, and writes it out using the 'out' file(-like)
     object, if provided, or returns it as a text string if not.  The
     output file receives text, not bytes.  It should therefore be
     opened in text mode with ‘utf-8’ encoding.

     Typical uses:

          xml_data = "<root>...</root>"
          print(canonicalize(xml_data))

          with open("c14n_output.xml", mode='w', encoding='utf-8') as out_file:
              canonicalize(xml_data, out=out_file)

          with open("c14n_output.xml", mode='w', encoding='utf-8') as out_file:
              canonicalize(from_file="inputfile.xml", out=out_file)

     As 'options' de configuração são as seguintes:

        - 'with_comments': set to true to include comments (default:
          false)

        - 
          'strip_text': set to true to strip whitespace before and after text content

               (default: false)

        - 
          'rewrite_prefixes': set to true to replace namespace prefixes by “n{number}”

               (default: false)

        - 
          'qname_aware_tags': a set of qname aware tag names in which prefixes

               should be replaced in text content (default: empty)

        - 
          'qname_aware_attrs': a set of qname aware attribute names in which prefixes

               should be replaced in text content (default: empty)

        - 'exclude_attrs': a set of attribute names that should not be
          serialised

        - 'exclude_tags': a set of tag names that should not be
          serialised

     In the option list above, “a set” refers to any collection or
     iterable of strings, no ordering is expected.

     Adicionado na versão 3.8.

 -- Função: xml.etree.ElementTree.Comment (text=None)

     Comment element factory.  This factory function creates a special
     element that will be serialized as an XML comment by the standard
     serializer.  The comment string can be either a bytestring or a
     Unicode string.  'text' is a string containing the comment string.
     Returns an element instance representing a comment.

     Note that *note XMLParser: a5e. skips over comments in the input
     instead of creating comment objects for them.  An *note
     ElementTree: 955. will only contain comment nodes if they have been
     inserted into to the tree using one of the *note Element: 310.
     methods.

 -- Função: xml.etree.ElementTree.dump (elem)

     Writes an element tree or element structure to sys.stdout.  This
     function should be used for debugging only.

     The exact output format is implementation dependent.  In this
     version, it’s written as an ordinary XML file.

     'elem' is an element tree or an individual element.

     Alterado na versão 3.8: The *note dump(): 39b7. function now
     preserves the attribute order specified by the user.

 -- Função: xml.etree.ElementTree.fromstring (text, parser=None)

     Parses an XML section from a string constant.  Same as *note XML():
     39b8.  'text' is a string containing XML data.  'parser' is an
     optional parser instance.  If not given, the standard *note
     XMLParser: a5e. parser is used.  Returns an *note Element: 310.
     instance.

 -- Função: xml.etree.ElementTree.fromstringlist (sequence, parser=None)

     Parses an XML document from a sequence of string fragments.
     'sequence' is a list or other sequence containing XML data
     fragments.  'parser' is an optional parser instance.  If not given,
     the standard *note XMLParser: a5e. parser is used.  Returns an
     *note Element: 310. instance.

     Adicionado na versão 3.2.

 -- Função: xml.etree.ElementTree.indent (tree, space=' ', level=0)

     Appends whitespace to the subtree to indent the tree visually.
     This can be used to generate pretty-printed XML output.  'tree' can
     be an Element or ElementTree.  'space' is the whitespace string
     that will be inserted for each indentation level, two space
     characters by default.  For indenting partial subtrees inside of an
     already indented tree, pass the initial indentation level as
     'level'.

     Adicionado na versão 3.9.

 -- Função: xml.etree.ElementTree.iselement (element)

     Check if an object appears to be a valid element object.  'element'
     is an element instance.  Return ‘True’ if this is an element
     object.

 -- Função: xml.etree.ElementTree.iterparse (source, events=None,
          parser=None)

     Parses an XML section into an element tree incrementally, and
     reports what’s going on to the user.  'source' is a filename or
     *note file object: 1203. containing XML data.  'events' is a
     sequence of events to report back.  The supported events are the
     strings ‘"start"’, ‘"end"’, ‘"comment"’, ‘"pi"’, ‘"start-ns"’ and
     ‘"end-ns"’ (the “ns” events are used to get detailed namespace
     information).  If 'events' is omitted, only ‘"end"’ events are
     reported.  'parser' is an optional parser instance.  If not given,
     the standard *note XMLParser: a5e. parser is used.  'parser' must
     be a subclass of *note XMLParser: a5e. and can only use the default
     *note TreeBuilder: a5f. as a target.  Returns an *note iterator:
     1ac. providing ‘(event, elem)’ pairs; it has a ‘root’ attribute
     that references the root element of the resulting XML tree once
     'source' is fully read.  The iterator has the ‘close()’ method that
     closes the internal file object if 'source' is a filename.

     Note that while *note iterparse(): 273. builds the tree
     incrementally, it issues blocking reads on 'source' (or the file it
     names).  As such, it’s unsuitable for applications where blocking
     reads can’t be made.  For fully non-blocking parsing, see *note
     XMLPullParser: 1029.

          Nota: *note iterparse(): 273. only guarantees that it has seen
          the “>” character of a starting tag when it emits a “start”
          event, so the attributes are defined, but the contents of the
          text and tail attributes are undefined at that point.  The
          same applies to the element children; they may or may not be
          present.

          If you need a fully populated element, look for “end” events
          instead.

     Descontinuado desde a versão 3.4: O argumento 'parser'.

     Alterado na versão 3.8: Os eventos ‘comment’ e ‘pi’ foram
     adicionados.

     Alterado na versão 3.13: Added the ‘close()’ method.

 -- Função: xml.etree.ElementTree.parse (source, parser=None)

     Parses an XML section into an element tree.  'source' is a filename
     or file object containing XML data.  'parser' is an optional parser
     instance.  If not given, the standard *note XMLParser: a5e. parser
     is used.  Returns an *note ElementTree: 955. instance.

 -- Função: xml.etree.ElementTree.ProcessingInstruction (target,
          text=None)

     PI element factory.  This factory function creates a special
     element that will be serialized as an XML processing instruction.
     'target' is a string containing the PI target.  'text' is a string
     containing the PI contents, if given.  Returns an element instance,
     representing a processing instruction.

     Note that *note XMLParser: a5e. skips over processing instructions
     in the input instead of creating PI objects for them.  An *note
     ElementTree: 955. will only contain processing instruction nodes if
     they have been inserted into to the tree using one of the *note
     Element: 310. methods.

 -- Função: xml.etree.ElementTree.register_namespace (prefix, uri)

     Registers a namespace prefix.  The registry is global, and any
     existing mapping for either the given prefix or the namespace URI
     will be removed.  'prefix' is a namespace prefix.  'uri' is a
     namespace uri.  Tags and attributes in this namespace will be
     serialized with the given prefix, if at all possible.

     Adicionado na versão 3.2.

 -- Função: xml.etree.ElementTree.SubElement (parent, tag, attrib={},
          **extra)

     Subelement factory.  This function creates an element instance, and
     appends it to an existing element.

     The element name, attribute names, and attribute values can be
     either bytestrings or Unicode strings.  'parent' is the parent
     element.  'tag' is the subelement name.  'attrib' is an optional
     dictionary, containing element attributes.  'extra' contains
     additional attributes, given as keyword arguments.  Returns an
     element instance.

 -- Função: xml.etree.ElementTree.tostring (element,
          encoding='us-ascii', method='xml', *, xml_declaration=None,
          default_namespace=None, short_empty_elements=True)

     Generates a string representation of an XML element, including all
     subelements.  'element' is an *note Element: 310. instance.
     'encoding' (2) is the output encoding (default is US-ASCII). Use
     ‘encoding="unicode"’ to generate a Unicode string (otherwise, a
     bytestring is generated).  'method' is either ‘"xml"’, ‘"html"’ or
     ‘"text"’ (default is ‘"xml"’).  'xml_declaration',
     'default_namespace' and 'short_empty_elements' has the same meaning
     as in *note ElementTree.write(): aa4.  Returns an (optionally)
     encoded string containing the XML data.

     Alterado na versão 3.4: Foi adicionado o parâmetro
     'short_empty_elements'.

     Alterado na versão 3.8: Added the 'xml_declaration' and
     'default_namespace' parameters.

     Alterado na versão 3.8: The *note tostring(): 102b. function now
     preserves the attribute order specified by the user.

 -- Função: xml.etree.ElementTree.tostringlist (element,
          encoding='us-ascii', method='xml', *, xml_declaration=None,
          default_namespace=None, short_empty_elements=True)

     Generates a string representation of an XML element, including all
     subelements.  'element' is an *note Element: 310. instance.
     'encoding' (3) is the output encoding (default is US-ASCII). Use
     ‘encoding="unicode"’ to generate a Unicode string (otherwise, a
     bytestring is generated).  'method' is either ‘"xml"’, ‘"html"’ or
     ‘"text"’ (default is ‘"xml"’).  'xml_declaration',
     'default_namespace' and 'short_empty_elements' has the same meaning
     as in *note ElementTree.write(): aa4.  Returns a list of
     (optionally) encoded strings containing the XML data.  It does not
     guarantee any specific sequence, except that
     ‘b"".join(tostringlist(element)) == tostring(element)’.

     Adicionado na versão 3.2.

     Alterado na versão 3.4: Foi adicionado o parâmetro
     'short_empty_elements'.

     Alterado na versão 3.8: Added the 'xml_declaration' and
     'default_namespace' parameters.

     Alterado na versão 3.8: The *note tostringlist(): 102c. function
     now preserves the attribute order specified by the user.

 -- Função: xml.etree.ElementTree.XML (text, parser=None)

     Parses an XML section from a string constant.  This function can be
     used to embed “XML literals” in Python code.  'text' is a string
     containing XML data.  'parser' is an optional parser instance.  If
     not given, the standard *note XMLParser: a5e. parser is used.
     Returns an *note Element: 310. instance.

 -- Função: xml.etree.ElementTree.XMLID (text, parser=None)

     Parses an XML section from a string constant, and also returns a
     dictionary which maps from element id:s to elements.  'text' is a
     string containing XML data.  'parser' is an optional parser
     instance.  If not given, the standard *note XMLParser: a5e. parser
     is used.  Returns a tuple containing an *note Element: 310.
     instance and a dictionary.

   ---------- Footnotes ----------

   (1) https://www.w3.org/TR/xml-c14n2/

   (2) The encoding string included in XML output should conform to the
appropriate standards.  For example, “UTF-8” is valid, but “UTF8” is
not.  See
‘https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl’ and
‘https://www.iana.org/assignments/character-sets/character-sets.xhtml’.

   (3) The encoding string included in XML output should conform to the
appropriate standards.  For example, “UTF-8” is valid, but “UTF8” is
not.  See
‘https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl’ and
‘https://www.iana.org/assignments/character-sets/character-sets.xhtml’.


File: python.info,  Node: Suporte a XInclude,  Next: Referência<5>,  Prev: Referência<4>,  Up: xml etree ElementTree — A API XML ElementTree

5.21.5.14 Suporte a XInclude
............................

This module provides limited support for XInclude directives(1), via the
*note xml.etree.ElementInclude: 124. helper module.  This module can be
used to insert subtrees and text strings into element trees, based on
information in the tree.

* Menu:

* Exemplo: Exemplo<9>.

   ---------- Footnotes ----------

   (1) https://www.w3.org/TR/xinclude/


File: python.info,  Node: Exemplo<9>,  Up: Suporte a XInclude

5.21.5.15 Exemplo
.................

Here’s an example that demonstrates use of the XInclude module.  To
include an XML document in the current document, use the
‘{http://www.w3.org/2001/XInclude}include’ element and set the 'parse'
attribute to ‘"xml"’, and use the 'href' attribute to specify the
document to include.

     <?xml version="1.0"?>
     <document xmlns:xi="http://www.w3.org/2001/XInclude">
       <xi:include href="source.xml" parse="xml" />
     </document>

By default, the 'href' attribute is treated as a file name.  You can use
custom loaders to override this behaviour.  Also note that the standard
helper does not support XPointer syntax.

To process this file, load it as usual, and pass the root element to the
*note xml.etree.ElementTree: 125. module:

     from xml.etree import ElementTree, ElementInclude

     tree = ElementTree.parse("document.xml")
     root = tree.getroot()

     ElementInclude.include(root)

The ElementInclude module replaces the
‘{http://www.w3.org/2001/XInclude}include’ element with the root element
from the 'source.xml' document.  The result might look something like
this:

     <document xmlns:xi="http://www.w3.org/2001/XInclude">
       <para>This is a paragraph.</para>
     </document>

If the 'parse' attribute is omitted, it defaults to “xml”.  The href
attribute is required.

To include a text document, use the
‘{http://www.w3.org/2001/XInclude}include’ element, and set the 'parse'
attribute to “text”:

     <?xml version="1.0"?>
     <document xmlns:xi="http://www.w3.org/2001/XInclude">
       Copyright (c) <xi:include href="year.txt" parse="text" />.
     </document>

The result might look something like:

     <document xmlns:xi="http://www.w3.org/2001/XInclude">
       Copyright (c) 2003.
     </document>


File: python.info,  Node: Referência<5>,  Prev: Suporte a XInclude,  Up: xml etree ElementTree — A API XML ElementTree

5.21.5.16 Referência
....................

* Menu:

* Funções: Funções<10>.
* Element Objects::
* ElementTree Objects::
* QName Objects::
* TreeBuilder Objects::
* Objetos XMLParser::
* XMLPullParser Objects::
* Exceções: Exceções<19>.


File: python.info,  Node: Funções<10>,  Next: Element Objects,  Up: Referência<5>

5.21.5.17 Funções
.................

 -- Função: xml.etree.ElementInclude.default_loader (href, parse,
          encoding=None)

     Default loader.  This default loader reads an included resource
     from disk.  'href' is a URL. 'parse' is for parse mode either “xml”
     or “text”.  'encoding' is an optional text encoding.  If not given,
     encoding is ‘utf-8’.  Returns the expanded resource.  If the parse
     mode is ‘"xml"’, this is an *note Element: 310. instance.  If the
     parse mode is ‘"text"’, this is a string.  If the loader fails, it
     can return ‘None’ or raise an exception.

 -- Função: xml.etree.ElementInclude.include (elem, loader=None,
          base_url=None, max_depth=6)

     This function expands XInclude directives in-place in tree pointed
     by 'elem'.  'elem' is either the root *note Element: 310. or an
     *note ElementTree: 955. instance to find such element.  'loader' is
     an optional resource loader.  If omitted, it defaults to *note
     default_loader(): 39c4.  If given, it should be a callable that
     implements the same interface as *note default_loader(): 39c4.
     'base_url' is base URL of the original file, to resolve relative
     include file references.  'max_depth' is the maximum number of
     recursive inclusions.  Limited to reduce the risk of malicious
     content explosion.  Pass ‘None’ to disable the limitation.

     Alterado na versão 3.9: Added the 'base_url' and 'max_depth'
     parameters.


File: python.info,  Node: Element Objects,  Next: ElementTree Objects,  Prev: Funções<10>,  Up: Referência<5>

5.21.5.18 Element Objects
.........................

 -- Classe: xml.etree.ElementTree.Element (tag, attrib={}, **extra)

     Element class.  This class defines the Element interface, and
     provides a reference implementation of this interface.

     The element name, attribute names, and attribute values can be
     either bytestrings or Unicode strings.  'tag' is the element name.
     'attrib' is an optional dictionary, containing element attributes.
     'extra' contains additional attributes, given as keyword arguments.

      -- Atributo: tag

          A string identifying what kind of data this element represents
          (the element type, in other words).

      -- Atributo: text
      -- Atributo: tail

          These attributes can be used to hold additional data
          associated with the element.  Their values are usually strings
          but may be any application-specific object.  If the element is
          created from an XML file, the 'text' attribute holds either
          the text between the element’s start tag and its first child
          or end tag, or ‘None’, and the 'tail' attribute holds either
          the text between the element’s end tag and the next tag, or
          ‘None’.  For the XML data

               <a><b>1<c>2<d/>3</c></b>4</a>

          the 'a' element has ‘None’ for both 'text' and 'tail'
          attributes, the 'b' element has 'text' ‘"1"’ and 'tail' ‘"4"’,
          the 'c' element has 'text' ‘"2"’ and 'tail' ‘None’, and the
          'd' element has 'text' ‘None’ and 'tail' ‘"3"’.

          To collect the inner text of an element, see *note itertext():
          1215, for example ‘"".join(element.itertext())’.

          Applications may store arbitrary objects in these attributes.

      -- Atributo: attrib

          A dictionary containing the element’s attributes.  Note that
          while the 'attrib' value is always a real mutable Python
          dictionary, an ElementTree implementation may choose to use
          another internal representation, and create the dictionary
          only if someone asks for it.  To take advantage of such
          implementations, use the dictionary methods below whenever
          possible.

     The following dictionary-like methods work on the element
     attributes.

      -- Método: clear ()

          Resets an element.  This function removes all subelements,
          clears all attributes, and sets the text and tail attributes
          to ‘None’.

      -- Método: get (key, default=None)

          Gets the element attribute named 'key'.

          Returns the attribute value, or 'default' if the attribute was
          not found.

      -- Método: items ()

          Returns the element attributes as a sequence of (name, value)
          pairs.  The attributes are returned in an arbitrary order.

      -- Método: keys ()

          Returns the elements attribute names as a list.  The names are
          returned in an arbitrary order.

      -- Método: set (key, value)

          Set the attribute 'key' on the element to 'value'.

     Os métodos a seguir funcionam nos filhos do elemento
     (subelementos).

      -- Método: append (subelement)

          Adds the element 'subelement' to the end of this element’s
          internal list of subelements.  Raises *note TypeError: 2c3. if
          'subelement' is not an *note Element: 310.

      -- Método: extend (subelements)

          Appends 'subelements' from an iterable of elements.  Raises
          *note TypeError: 2c3. if a subelement is not an *note Element:
          310.

          Adicionado na versão 3.2.

      -- Método: find (match, namespaces=None)

          Finds the first subelement matching 'match'.  'match' may be a
          tag name or a *note path: bc5.  Returns an element instance or
          ‘None’.  'namespaces' is an optional mapping from namespace
          prefix to full name.  Pass ‘''’ as prefix to move all
          unprefixed tag names in the expression into the given
          namespace.

      -- Método: findall (match, namespaces=None)

          Finds all matching subelements, by tag name or *note path:
          bc5.  Returns a list containing all matching elements in
          document order.  'namespaces' is an optional mapping from
          namespace prefix to full name.  Pass ‘''’ as prefix to move
          all unprefixed tag names in the expression into the given
          namespace.

      -- Método: findtext (match, default=None, namespaces=None)

          Finds text for the first subelement matching 'match'.  'match'
          may be a tag name or a *note path: bc5.  Returns the text
          content of the first matching element, or 'default' if no
          element was found.  Note that if the matching element has no
          text content an empty string is returned.  'namespaces' is an
          optional mapping from namespace prefix to full name.  Pass
          ‘''’ as prefix to move all unprefixed tag names in the
          expression into the given namespace.

      -- Método: insert (index, subelement)

          Inserts 'subelement' at the given position in this element.
          Raises *note TypeError: 2c3. if 'subelement' is not an *note
          Element: 310.

      -- Método: iter (tag=None)

          Creates a tree *note iterator: 1ac. with the current element
          as the root.  The iterator iterates over this element and all
          elements below it, in document (depth first) order.  If 'tag'
          is not ‘None’ or ‘'*'’, only elements whose tag equals 'tag'
          are returned from the iterator.  If the tree structure is
          modified during iteration, the result is undefined.

          Adicionado na versão 3.2.

      -- Método: iterfind (match, namespaces=None)

          Finds all matching subelements, by tag name or *note path:
          bc5.  Returns an iterable yielding all matching elements in
          document order.  'namespaces' is an optional mapping from
          namespace prefix to full name.

          Adicionado na versão 3.2.

      -- Método: itertext ()

          Creates a text iterator.  The iterator loops over this element
          and all subelements, in document order, and returns all inner
          text.

          Adicionado na versão 3.2.

      -- Método: makeelement (tag, attrib)

          Creates a new element object of the same type as this element.
          Do not call this method, use the *note SubElement(): 39ae.
          factory function instead.

      -- Método: remove (subelement)

          Removes 'subelement' from the element.  Unlike the find*
          methods this method compares elements based on the instance
          identity, not on tag value or contents.

     *note Element: 310. objects also support the following sequence
     type methods for working with subelements: *note __delitem__():
     130f, *note __getitem__(): 283, *note __setitem__(): 130e, *note
     __len__(): 15b4.

     Caution: Elements with no subelements will test as ‘False’.  In a
     future release of Python, all elements will test as ‘True’
     regardless of whether subelements exist.  Instead, prefer explicit
     ‘len(elem)’ or ‘elem is not None’ tests.:

          element = root.find('foo')

          if not element:  # careful!
              print("element not found, or element has no subelements")

          if element is None:
              print("element not found")

     Alterado na versão 3.12: Testing the truth value of an Element
     emits *note DeprecationWarning: 1a5.

     Prior to Python 3.8, the serialisation order of the XML attributes
     of elements was artificially made predictable by sorting the
     attributes by their name.  Based on the now guaranteed ordering of
     dicts, this arbitrary reordering was removed in Python 3.8 to
     preserve the order in which attributes were originally parsed or
     created by user code.

     In general, user code should try not to depend on a specific
     ordering of attributes, given that the XML Information Set(1)
     explicitly excludes the attribute order from conveying information.
     Code should be prepared to deal with any ordering on input.  In
     cases where deterministic XML output is required, e.g.  for
     cryptographic signing or test data sets, canonical serialisation is
     available with the *note canonicalize(): a5d. function.

     In cases where canonical output is not applicable but a specific
     attribute order is still desirable on output, code should aim for
     creating the attributes directly in the desired order, to avoid
     perceptual mismatches for readers of the code.  In cases where this
     is difficult to achieve, a recipe like the following can be applied
     prior to serialisation to enforce an order independently from the
     Element creation:

          def reorder_attributes(root):
              for el in root.iter():
                  attrib = el.attrib
                  if len(attrib) > 1:
                      # adjust attribute order, e.g. by sorting
                      attribs = sorted(attrib.items())
                      attrib.clear()
                      attrib.update(attribs)

   ---------- Footnotes ----------

   (1) https://www.w3.org/TR/xml-infoset/


File: python.info,  Node: ElementTree Objects,  Next: QName Objects,  Prev: Element Objects,  Up: Referência<5>

5.21.5.19 ElementTree Objects
.............................

 -- Classe: xml.etree.ElementTree.ElementTree (element=None, file=None)

     ElementTree wrapper class.  This class represents an entire element
     hierarchy, and adds some extra support for serialization to and
     from standard XML.

     'element' is the root element.  The tree is initialized with the
     contents of the XML 'file' if given.

      -- Método: _setroot (element)

          Replaces the root element for this tree.  This discards the
          current contents of the tree, and replaces it with the given
          element.  Use with care.  'element' is an element instance.

      -- Método: find (match, namespaces=None)

          Same as *note Element.find(): 164b, starting at the root of
          the tree.

      -- Método: findall (match, namespaces=None)

          Same as *note Element.findall(): 164d, starting at the root of
          the tree.

      -- Método: findtext (match, default=None, namespaces=None)

          Same as *note Element.findtext(): 164c, starting at the root
          of the tree.

      -- Método: getroot ()

          Returns the root element for this tree.

      -- Método: iter (tag=None)

          Creates and returns a tree iterator for the root element.  The
          iterator loops over all elements in this tree, in section
          order.  'tag' is the tag to look for (default is to return all
          elements).

      -- Método: iterfind (match, namespaces=None)

          Same as *note Element.iterfind(): 1214, starting at the root
          of the tree.

          Adicionado na versão 3.2.

      -- Método: parse (source, parser=None)

          Loads an external XML section into this element tree.
          'source' is a file name or *note file object: 1203.  'parser'
          is an optional parser instance.  If not given, the standard
          *note XMLParser: a5e. parser is used.  Returns the section
          root element.

      -- Método: write (file, encoding='us-ascii', xml_declaration=None,
               default_namespace=None, method='xml', *,
               short_empty_elements=True)

          Writes the element tree to a file, as XML. 'file' is a file
          name, or a *note file object: 1203. opened for writing.
          'encoding' (1) is the output encoding (default is US-ASCII).
          'xml_declaration' controls if an XML declaration should be
          added to the file.  Use ‘False’ for never, ‘True’ for always,
          ‘None’ for only if not US-ASCII or UTF-8 or Unicode (default
          is ‘None’).  'default_namespace' sets the default XML
          namespace (for “xmlns”).  'method' is either ‘"xml"’, ‘"html"’
          or ‘"text"’ (default is ‘"xml"’).  The keyword-only
          'short_empty_elements' parameter controls the formatting of
          elements that contain no content.  If ‘True’ (the default),
          they are emitted as a single self-closed tag, otherwise they
          are emitted as a pair of start/end tags.

          The output is either a string (*note str: 44c.) or binary
          (*note bytes: 1c2.).  This is controlled by the 'encoding'
          argument.  If 'encoding' is ‘"unicode"’, the output is a
          string; otherwise, it’s binary.  Note that this may conflict
          with the type of 'file' if it’s an open *note file object:
          1203.; make sure you do not try to write a string to a binary
          stream and vice versa.

          Alterado na versão 3.4: Foi adicionado o parâmetro
          'short_empty_elements'.

          Alterado na versão 3.8: The *note write(): aa4. method now
          preserves the attribute order specified by the user.

This is the XML file that is going to be manipulated:

     <html>
         <head>
             <title>Example page</title>
         </head>
         <body>
             <p>Moved to <a href="http://example.org/">example.org</a>
             or <a href="http://example.com/">example.com</a>.</p>
         </body>
     </html>

Example of changing the attribute “target” of every link in first
paragraph:

     >>> from xml.etree.ElementTree import ElementTree
     >>> tree = ElementTree()
     >>> tree.parse("index.xhtml")
     <Element 'html' at 0xb77e6fac>
     >>> p = tree.find("body/p")     # Finds first occurrence of tag p in body
     >>> p
     <Element 'p' at 0xb77ec26c>
     >>> links = list(p.iter("a"))   # Returns list of all links
     >>> links
     [<Element 'a' at 0xb77ec2ac>, <Element 'a' at 0xb77ec1cc>]
     >>> for i in links:             # Iterates through all found links
     ...     i.attrib["target"] = "blank"
     ...
     >>> tree.write("output.xhtml")

   ---------- Footnotes ----------

   (1) The encoding string included in XML output should conform to the
appropriate standards.  For example, “UTF-8” is valid, but “UTF8” is
not.  See
‘https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl’ and
‘https://www.iana.org/assignments/character-sets/character-sets.xhtml’.


File: python.info,  Node: QName Objects,  Next: TreeBuilder Objects,  Prev: ElementTree Objects,  Up: Referência<5>

5.21.5.20 QName Objects
.......................

 -- Classe: xml.etree.ElementTree.QName (text_or_uri, tag=None)

     QName wrapper.  This can be used to wrap a QName attribute value,
     in order to get proper namespace handling on output.  'text_or_uri'
     is a string containing the QName value, in the form {uri}local, or,
     if the tag argument is given, the URI part of a QName.  If 'tag' is
     given, the first argument is interpreted as a URI, and this
     argument is interpreted as a local name.  *note QName: 39db.
     instances are opaque.


File: python.info,  Node: TreeBuilder Objects,  Next: Objetos XMLParser,  Prev: QName Objects,  Up: Referência<5>

5.21.5.21 TreeBuilder Objects
.............................

 -- Classe: xml.etree.ElementTree.TreeBuilder (element_factory=None, *,
          comment_factory=None, pi_factory=None, insert_comments=False,
          insert_pis=False)

     Generic element structure builder.  This builder converts a
     sequence of start, data, end, comment and pi method calls to a
     well-formed element structure.  You can use this class to build an
     element structure using a custom XML parser, or a parser for some
     other XML-like format.

     'element_factory', when given, must be a callable accepting two
     positional arguments: a tag and a dict of attributes.  It is
     expected to return a new element instance.

     The 'comment_factory' and 'pi_factory' functions, when given,
     should behave like the *note Comment(): 39b6. and *note
     ProcessingInstruction(): 39bc. functions to create comments and
     processing instructions.  When not given, the default factories
     will be used.  When 'insert_comments' and/or 'insert_pis' is true,
     comments/pis will be inserted into the tree if they appear within
     the root element (but not outside of it).

      -- Método: close ()

          Flushes the builder buffers, and returns the toplevel document
          element.  Returns an *note Element: 310. instance.

      -- Método: data (data)

          Adds text to the current element.  'data' is a string.  This
          should be either a bytestring, or a Unicode string.

      -- Método: end (tag)

          Closes the current element.  'tag' is the element name.
          Returns the closed element.

      -- Método: start (tag, attrs)

          Opens a new element.  'tag' is the element name.  'attrs' is a
          dictionary containing element attributes.  Returns the opened
          element.

      -- Método: comment (text)

          Creates a comment with the given 'text'.  If ‘insert_comments’
          is true, this will also add it to the tree.

          Adicionado na versão 3.8.

      -- Método: pi (target, text)

          Creates a process instruction with the given 'target' name and
          'text'.  If ‘insert_pis’ is true, this will also add it to the
          tree.

          Adicionado na versão 3.8.

     In addition, a custom *note TreeBuilder: a5f. object can provide
     the following methods:

      -- Método: doctype (name, pubid, system)

          Handles a doctype declaration.  'name' is the doctype name.
          'pubid' is the public identifier.  'system' is the system
          identifier.  This method does not exist on the default *note
          TreeBuilder: a5f. class.

          Adicionado na versão 3.2.

      -- Método: start_ns (prefix, uri)

          Is called whenever the parser encounters a new namespace
          declaration, before the ‘start()’ callback for the opening
          element that defines it.  'prefix' is ‘''’ for the default
          namespace and the declared namespace prefix name otherwise.
          'uri' is the namespace URI.

          Adicionado na versão 3.8.

      -- Método: end_ns (prefix)

          Is called after the ‘end()’ callback of an element that
          declared a namespace prefix mapping, with the name of the
          'prefix' that went out of scope.

          Adicionado na versão 3.8.

 -- Classe: xml.etree.ElementTree.C14NWriterTarget (write, *,
          with_comments=False, strip_text=False, rewrite_prefixes=False,
          qname_aware_tags=None, qname_aware_attrs=None,
          exclude_attrs=None, exclude_tags=None)

     A C14N 2.0(1) writer.  Arguments are the same as for the *note
     canonicalize(): a5d. function.  This class does not build a tree
     but translates the callback events directly into a serialised form
     using the 'write' function.

     Adicionado na versão 3.8.

   ---------- Footnotes ----------

   (1) https://www.w3.org/TR/xml-c14n2/


File: python.info,  Node: Objetos XMLParser,  Next: XMLPullParser Objects,  Prev: TreeBuilder Objects,  Up: Referência<5>

5.21.5.22 Objetos XMLParser
...........................

 -- Classe: xml.etree.ElementTree.XMLParser (*, target=None,
          encoding=None)

     This class is the low-level building block of the module.  It uses
     *note xml.parsers.expat: 126. for efficient, event-based parsing of
     XML. It can be fed XML data incrementally with the *note feed():
     39e7. method, and parsing events are translated to a push API - by
     invoking callbacks on the 'target' object.  If 'target' is omitted,
     the standard *note TreeBuilder: a5f. is used.  If 'encoding' (1) is
     given, the value overrides the encoding specified in the XML file.

     Alterado na versão 3.8: Parameters are now *note keyword-only: 2a5.
     The 'html' argument is no longer supported.

      -- Método: close ()

          Finishes feeding data to the parser.  Returns the result of
          calling the ‘close()’ method of the 'target' passed during
          construction; by default, this is the toplevel document
          element.

      -- Método: feed (data)

          Feeds data to the parser.  'data' is encoded data.

      -- Método: flush ()

          Triggers parsing of any previously fed unparsed data, which
          can be used to ensure more immediate feedback, in particular
          with Expat >=2.6.0.  The implementation of *note flush(): 26f.
          temporarily disables reparse deferral with Expat (if currently
          enabled) and triggers a reparse.  Disabling reparse deferral
          has security consequences; please see *note
          xml.parsers.expat.xmlparser.SetReparseDeferralEnabled(): 272.
          for details.

          Note that *note flush(): 26f. has been backported to some
          prior releases of CPython as a security fix.  Check for
          availability of *note flush(): 26f. using *note hasattr():
          4d2. if used in code running across a variety of Python
          versions.

          Adicionado na versão 3.13.

     *note XMLParser.feed(): 39e7. calls 'target"s ‘start(tag,
     attrs_dict)’ method for each opening tag, its ‘end(tag)’ method for
     each closing tag, and data is processed by method ‘data(data)’.
     For further supported callback methods, see the *note TreeBuilder:
     a5f. class.  *note XMLParser.close(): 39e8. calls 'target"s method
     ‘close()’.  *note XMLParser: a5e. can be used not only for building
     a tree structure.  This is an example of counting the maximum depth
     of an XML file:

          >>> from xml.etree.ElementTree import XMLParser
          >>> class MaxDepth:                     # The target object of the parser
          ...     maxDepth = 0
          ...     depth = 0
          ...     def start(self, tag, attrib):   # Called for each opening tag.
          ...         self.depth += 1
          ...         if self.depth > self.maxDepth:
          ...             self.maxDepth = self.depth
          ...     def end(self, tag):             # Called for each closing tag.
          ...         self.depth -= 1
          ...     def data(self, data):
          ...         pass            # We do not need to do anything with data.
          ...     def close(self):    # Called when all data has been parsed.
          ...         return self.maxDepth
          ...
          >>> target = MaxDepth()
          >>> parser = XMLParser(target=target)
          >>> exampleXml = """
          ... <a>
          ...   <b>
          ...   </b>
          ...   <b>
          ...     <c>
          ...       <d>
          ...       </d>
          ...     </c>
          ...   </b>
          ... </a>"""
          >>> parser.feed(exampleXml)
          >>> parser.close()
          4

   ---------- Footnotes ----------

   (1) The encoding string included in XML output should conform to the
appropriate standards.  For example, “UTF-8” is valid, but “UTF8” is
not.  See
‘https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl’ and
‘https://www.iana.org/assignments/character-sets/character-sets.xhtml’.


File: python.info,  Node: XMLPullParser Objects,  Next: Exceções<19>,  Prev: Objetos XMLParser,  Up: Referência<5>

5.21.5.23 XMLPullParser Objects
...............................

 -- Classe: xml.etree.ElementTree.XMLPullParser (events=None)

     A pull parser suitable for non-blocking applications.  Its
     input-side API is similar to that of *note XMLParser: a5e, but
     instead of pushing calls to a callback target, *note XMLPullParser:
     1029. collects an internal list of parsing events and lets the user
     read from it.  'events' is a sequence of events to report back.
     The supported events are the strings ‘"start"’, ‘"end"’,
     ‘"comment"’, ‘"pi"’, ‘"start-ns"’ and ‘"end-ns"’ (the “ns” events
     are used to get detailed namespace information).  If 'events' is
     omitted, only ‘"end"’ events are reported.

      -- Método: feed (data)

          Feed the given bytes data to the parser.

      -- Método: flush ()

          Triggers parsing of any previously fed unparsed data, which
          can be used to ensure more immediate feedback, in particular
          with Expat >=2.6.0.  The implementation of *note flush(): 270.
          temporarily disables reparse deferral with Expat (if currently
          enabled) and triggers a reparse.  Disabling reparse deferral
          has security consequences; please see *note
          xml.parsers.expat.xmlparser.SetReparseDeferralEnabled(): 272.
          for details.

          Note that *note flush(): 270. has been backported to some
          prior releases of CPython as a security fix.  Check for
          availability of *note flush(): 270. using *note hasattr():
          4d2. if used in code running across a variety of Python
          versions.

          Adicionado na versão 3.13.

      -- Método: close ()

          Signal the parser that the data stream is terminated.  Unlike
          *note XMLParser.close(): 39e8, this method always returns
          *note None: 675.  Any events not yet retrieved when the parser
          is closed can still be read with *note read_events(): 39a6.

      -- Método: read_events ()

          Return an iterator over the events which have been encountered
          in the data fed to the parser.  The iterator yields ‘(event,
          elem)’ pairs, where 'event' is a string representing the type
          of event (e.g.  ‘"end"’) and 'elem' is the encountered *note
          Element: 310. object, or other context value as follows.

             * ‘start’, ‘end’: O Element atual.

             * ‘comment’, ‘pi’: the current comment / processing
               instruction

             * ‘start-ns’: a tuple ‘(prefix, uri)’ naming the declared
               namespace mapping.

             * ‘end-ns’: *note None: 675. (this may change in a future
               version)

          Events provided in a previous call to *note read_events():
          39a6. will not be yielded again.  Events are consumed from the
          internal queue only when they are retrieved from the iterator,
          so multiple readers iterating in parallel over iterators
          obtained from *note read_events(): 39a6. will have
          unpredictable results.

          Nota: *note XMLPullParser: 1029. only guarantees that it has
          seen the “>” character of a starting tag when it emits a
          “start” event, so the attributes are defined, but the contents
          of the text and tail attributes are undefined at that point.
          The same applies to the element children; they may or may not
          be present.

          If you need a fully populated element, look for “end” events
          instead.

     Adicionado na versão 3.4.

     Alterado na versão 3.8: Os eventos ‘comment’ e ‘pi’ foram
     adicionados.


File: python.info,  Node: Exceções<19>,  Prev: XMLPullParser Objects,  Up: Referência<5>

5.21.5.24 Exceções
..................

 -- Classe: xml.etree.ElementTree.ParseError

     XML parse error, raised by the various parsing methods in this
     module when parsing fails.  The string representation of an
     instance of this exception will contain a user-friendly error
     message.  In addition, it will have the following attributes
     available:

      -- Atributo: code

          A numeric error code from the expat parser.  See the
          documentation of *note xml.parsers.expat: 126. for the list of
          error codes and their meanings.

      -- Atributo: position

          A tuple of 'line', 'column' numbers, specifying where the
          error occurred.


File: python.info,  Node: xml dom — The Document Object Model API,  Next: xml dom minidom — Minimal DOM implementation,  Prev: xml etree ElementTree — A API XML ElementTree,  Up: Ferramentas de Processamento de Markup Estruturado

5.21.6 ‘xml.dom’ — The Document Object Model API
------------------------------------------------

'Código-fonte:' Lib/xml/dom/__init__.py(1)

__________________________________________________________________

The Document Object Model, or “DOM,” is a cross-language API from the
World Wide Web Consortium (W3C) for accessing and modifying XML
documents.  A DOM implementation presents an XML document as a tree
structure, or allows client code to build such a structure from scratch.
It then gives access to the structure through a set of objects which
provided well-known interfaces.

The DOM is extremely useful for random-access applications.  SAX only
allows you a view of one bit of the document at a time.  If you are
looking at one SAX element, you have no access to another.  If you are
looking at a text node, you have no access to a containing element.
When you write a SAX application, you need to keep track of your
program’s position in the document somewhere in your own code.  SAX does
not do it for you.  Also, if you need to look ahead in the XML document,
you are just out of luck.

Some applications are simply impossible in an event driven model with no
access to a tree.  Of course you could build some sort of tree yourself
in SAX events, but the DOM allows you to avoid writing that code.  The
DOM is a standard tree representation for XML data.

The Document Object Model is being defined by the W3C in stages, or
“levels” in their terminology.  The Python mapping of the API is
substantially based on the DOM Level 2 recommendation.

DOM applications typically start by parsing some XML into a DOM. How
this is accomplished is not covered at all by DOM Level 1, and Level 2
provides only limited improvements: There is a ‘DOMImplementation’
object class which provides access to ‘Document’ creation methods, but
no way to access an XML reader/parser/Document builder in an
implementation-independent way.  There is also no well-defined way to
access these methods without an existing ‘Document’ object.  In Python,
each DOM implementation will provide a function *note
getDOMImplementation(): 39f2.  DOM Level 3 adds a Load/Store
specification, which defines an interface to the reader, but this is not
yet available in the Python standard library.

Once you have a DOM document object, you can access the parts of your
XML document through its properties and methods.  These properties are
defined in the DOM specification; this portion of the reference manual
describes the interpretation of the specification in Python.

The specification provided by the W3C defines the DOM API for Java,
ECMAScript, and OMG IDL. The Python mapping defined here is based in
large part on the IDL version of the specification, but strict
compliance is not required (though implementations are free to support
the strict mapping from IDL). See section *note Conformance: 39f3. for a
detailed discussion of mapping requirements.

Ver também
..........

Document Object Model (DOM) Level 2 Specification(2)

     The W3C recommendation upon which the Python DOM API is based.

Document Object Model (DOM) Level 1 Specification(3)

     The W3C recommendation for the DOM supported by *note
     xml.dom.minidom: 122.

Python Language Mapping Specification(4)

     This specifies the mapping from OMG IDL to Python.

* Menu:

* Conteúdo do módulo: Conteúdo do módulo<6>.
* Objects in the DOM::
* Conformance::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/xml/dom/__init__.py

   (2) https://www.w3.org/TR/2000/REC-DOM-Level-2-Core-20001113/

   (3) https://www.w3.org/TR/REC-DOM-Level-1/

   (4) https://www.omg.org/spec/PYTH/1.2/PDF


File: python.info,  Node: Conteúdo do módulo<6>,  Next: Objects in the DOM,  Up: xml dom — The Document Object Model API

5.21.6.1 Conteúdo do módulo
...........................

The *note xml.dom: 121. contains the following functions:

 -- Função: xml.dom.registerDOMImplementation (name, factory)

     Register the 'factory' function with the name 'name'.  The factory
     function should return an object which implements the
     ‘DOMImplementation’ interface.  The factory function can return the
     same object every time, or a new one for each call, as appropriate
     for the specific implementation (e.g.  if that implementation
     supports some customization).

 -- Função: xml.dom.getDOMImplementation (name=None, features=())

     Return a suitable DOM implementation.  The 'name' is either
     well-known, the module name of a DOM implementation, or ‘None’.  If
     it is not ‘None’, imports the corresponding module and returns a
     ‘DOMImplementation’ object if the import succeeds.  If no name is
     given, and if the environment variable ‘PYTHON_DOM’ is set, this
     variable is used to find the implementation.

     If name is not given, this examines the available implementations
     to find one with the required feature set.  If no implementation
     can be found, raise an *note ImportError: 419.  The features list
     must be a sequence of ‘(feature, version)’ pairs which are passed
     to the ‘hasFeature()’ method on available ‘DOMImplementation’
     objects.

Some convenience constants are also provided:

 -- Dado: xml.dom.EMPTY_NAMESPACE

     The value used to indicate that no namespace is associated with a
     node in the DOM. This is typically found as the ‘namespaceURI’ of a
     node, or used as the 'namespaceURI' parameter to a
     namespaces-specific method.

 -- Dado: xml.dom.XML_NAMESPACE

     The namespace URI associated with the reserved prefix ‘xml’, as
     defined by Namespaces in XML(1) (section 4).

 -- Dado: xml.dom.XMLNS_NAMESPACE

     The namespace URI for namespace declarations, as defined by
     Document Object Model (DOM) Level 2 Core Specification(2) (section
     1.1.8).

 -- Dado: xml.dom.XHTML_NAMESPACE

     The URI of the XHTML namespace as defined by XHTML 1.0: The
     Extensible HyperText Markup Language(3) (section 3.1.1).

In addition, *note xml.dom: 121. contains a base ‘Node’ class and the
DOM exception classes.  The ‘Node’ class provided by this module does
not implement any of the methods or attributes defined by the DOM
specification; concrete DOM implementations must provide those.  The
‘Node’ class provided as part of this module does provide the constants
used for the ‘nodeType’ attribute on concrete ‘Node’ objects; they are
located within the class rather than at the module level to conform with
the DOM specifications.

   ---------- Footnotes ----------

   (1) https://www.w3.org/TR/REC-xml-names/

   (2) https://www.w3.org/TR/DOM-Level-2-Core/core.html

   (3) https://www.w3.org/TR/xhtml1/


File: python.info,  Node: Objects in the DOM,  Next: Conformance,  Prev: Conteúdo do módulo<6>,  Up: xml dom — The Document Object Model API

5.21.6.2 Objects in the DOM
...........................

The definitive documentation for the DOM is the DOM specification from
the W3C.

Note that DOM attributes may also be manipulated as nodes instead of as
simple strings.  It is fairly rare that you must do this, however, so
this usage is not yet documented.

Interface                            Seção                                   Propósito
                                                                             
-------------------------------------------------------------------------------------------------------------------
                                                                             
‘DOMImplementation’                  *note DOMImplementation Objects: 39fc.  Interface to the underlying
                                                                             implementation.
                                                                             
                                                                             
‘Node’                               *note Objetos Node: 39fd.               Base interface for most objects in
                                                                             a document.
                                                                             
                                                                             
‘NodeList’                           *note Objetos NodeList: 39fe.           Interface for a sequence of nodes.
                                                                             
                                                                             
‘DocumentType’                       *note DocumentType Objects: 39ff.       Information about the declarations
                                                                             needed to process a document.
                                                                             
                                                                             
‘Document’                           *note Document Objects: 3a00.           Object which represents an entire
                                                                             document.
                                                                             
                                                                             
‘Element’                            *note Element Objects: 3a01.            Element nodes in the document
                                                                             hierarchy.
                                                                             
                                                                             
‘Attr’                               *note Attr Objects: 3a02.               Attribute value nodes on element
                                                                             nodes.
                                                                             
                                                                             
‘Comment’                            *note Comment Objects: 3a03.            Representation of comments in the
                                                                             source document.
                                                                             
                                                                             
‘Text’                               *note Text and CDATASection Objects: 3a04.Nodes containing textual content
                                                                             from the document.
                                                                             
                                                                             
‘ProcessingInstruction’              *note Objetos ProcessingInstruction: 3a05.Processing instruction
                                                                             representation.
                                                                             

An additional section describes the exceptions defined for working with
the DOM in Python.

* Menu:

* DOMImplementation Objects::
* Objetos Node::
* Objetos NodeList::
* DocumentType Objects::
* Document Objects::
* Element Objects: Element Objects<2>.
* Attr Objects::
* NamedNodeMap Objects::
* Comment Objects::
* Text and CDATASection Objects::
* Objetos ProcessingInstruction::
* Exceções: Exceções<20>.


File: python.info,  Node: DOMImplementation Objects,  Next: Objetos Node,  Up: Objects in the DOM

5.21.6.3 DOMImplementation Objects
..................................

The ‘DOMImplementation’ interface provides a way for applications to
determine the availability of particular features in the DOM they are
using.  DOM Level 2 added the ability to create new ‘Document’ and
‘DocumentType’ objects using the ‘DOMImplementation’ as well.

 -- Método: DOMImplementation.hasFeature (feature, version)

     Return ‘True’ if the feature identified by the pair of strings
     'feature' and 'version' is implemented.

 -- Método: DOMImplementation.createDocument (namespaceUri,
          qualifiedName, doctype)

     Return a new ‘Document’ object (the root of the DOM), with a child
     ‘Element’ object having the given 'namespaceUri' and
     'qualifiedName'.  The 'doctype' must be a ‘DocumentType’ object
     created by *note createDocumentType(): 3a09, or ‘None’.  In the
     Python DOM API, the first two arguments can also be ‘None’ in order
     to indicate that no ‘Element’ child is to be created.

 -- Método: DOMImplementation.createDocumentType (qualifiedName,
          publicId, systemId)

     Return a new ‘DocumentType’ object that encapsulates the given
     'qualifiedName', 'publicId', and 'systemId' strings, representing
     the information contained in an XML document type declaration.


File: python.info,  Node: Objetos Node,  Next: Objetos NodeList,  Prev: DOMImplementation Objects,  Up: Objects in the DOM

5.21.6.4 Objetos Node
.....................

All of the components of an XML document are subclasses of ‘Node’.

 -- Atributo: Node.nodeType

     An integer representing the node type.  Symbolic constants for the
     types are on the ‘Node’ object: ‘ELEMENT_NODE’, ‘ATTRIBUTE_NODE’,
     ‘TEXT_NODE’, ‘CDATA_SECTION_NODE’, ‘ENTITY_NODE’,
     ‘PROCESSING_INSTRUCTION_NODE’, ‘COMMENT_NODE’, ‘DOCUMENT_NODE’,
     ‘DOCUMENT_TYPE_NODE’, ‘NOTATION_NODE’.  This is a read-only
     attribute.

 -- Atributo: Node.parentNode

     The parent of the current node, or ‘None’ for the document node.
     The value is always a ‘Node’ object or ‘None’.  For ‘Element’
     nodes, this will be the parent element, except for the root
     element, in which case it will be the ‘Document’ object.  For
     ‘Attr’ nodes, this is always ‘None’.  This is a read-only
     attribute.

 -- Atributo: Node.attributes

     A ‘NamedNodeMap’ of attribute objects.  Only elements have actual
     values for this; others provide ‘None’ for this attribute.  This is
     a read-only attribute.

 -- Atributo: Node.previousSibling

     The node that immediately precedes this one with the same parent.
     For instance the element with an end-tag that comes just before the
     'self' element’s start-tag.  Of course, XML documents are made up
     of more than just elements so the previous sibling could be text, a
     comment, or something else.  If this node is the first child of the
     parent, this attribute will be ‘None’.  This is a read-only
     attribute.

 -- Atributo: Node.nextSibling

     The node that immediately follows this one with the same parent.
     See also *note previousSibling: 3a0e.  If this is the last child of
     the parent, this attribute will be ‘None’.  This is a read-only
     attribute.

 -- Atributo: Node.childNodes

     A list of nodes contained within this node.  This is a read-only
     attribute.

 -- Atributo: Node.firstChild

     The first child of the node, if there are any, or ‘None’.  This is
     a read-only attribute.

 -- Atributo: Node.lastChild

     The last child of the node, if there are any, or ‘None’.  This is a
     read-only attribute.

 -- Atributo: Node.localName

     The part of the ‘tagName’ following the colon if there is one, else
     the entire ‘tagName’.  The value is a string.

 -- Atributo: Node.prefix

     The part of the ‘tagName’ preceding the colon if there is one, else
     the empty string.  The value is a string, or ‘None’.

 -- Atributo: Node.namespaceURI

     The namespace associated with the element name.  This will be a
     string or ‘None’.  This is a read-only attribute.

 -- Atributo: Node.nodeName

     This has a different meaning for each node type; see the DOM
     specification for details.  You can always get the information you
     would get here from another property such as the ‘tagName’ property
     for elements or the ‘name’ property for attributes.  For all node
     types, the value of this attribute will be either a string or
     ‘None’.  This is a read-only attribute.

 -- Atributo: Node.nodeValue

     This has a different meaning for each node type; see the DOM
     specification for details.  The situation is similar to that with
     *note nodeName: 3a16.  The value is a string or ‘None’.

 -- Método: Node.hasAttributes ()

     Return ‘True’ if the node has any attributes.

 -- Método: Node.hasChildNodes ()

     Return ‘True’ if the node has any child nodes.

 -- Método: Node.isSameNode (other)

     Return ‘True’ if 'other' refers to the same node as this node.
     This is especially useful for DOM implementations which use any
     sort of proxy architecture (because more than one object can refer
     to the same node).

          Nota: This is based on a proposed DOM Level 3 API which is
          still in the “working draft” stage, but this particular
          interface appears uncontroversial.  Changes from the W3C will
          not necessarily affect this method in the Python DOM interface
          (though any new W3C API for this would also be supported).

 -- Método: Node.appendChild (newChild)

     Add a new child node to this node at the end of the list of
     children, returning 'newChild'.  If the node was already in the
     tree, it is removed first.

 -- Método: Node.insertBefore (newChild, refChild)

     Insert a new child node before an existing child.  It must be the
     case that 'refChild' is a child of this node; if not, *note
     ValueError: 202. is raised.  'newChild' is returned.  If 'refChild'
     is ‘None’, it inserts 'newChild' at the end of the children’s list.

 -- Método: Node.removeChild (oldChild)

     Remove a child node.  'oldChild' must be a child of this node; if
     not, *note ValueError: 202. is raised.  'oldChild' is returned on
     success.  If 'oldChild' will not be used further, its ‘unlink()’
     method should be called.

 -- Método: Node.replaceChild (newChild, oldChild)

     Replace an existing node with a new node.  It must be the case that
     'oldChild' is a child of this node; if not, *note ValueError: 202.
     is raised.

 -- Método: Node.normalize ()

     Join adjacent text nodes so that all stretches of text are stored
     as single ‘Text’ instances.  This simplifies processing text from a
     DOM tree for many applications.

 -- Método: Node.cloneNode (deep)

     Clone this node.  Setting 'deep' means to clone all child nodes as
     well.  This returns the clone.


File: python.info,  Node: Objetos NodeList,  Next: DocumentType Objects,  Prev: Objetos Node,  Up: Objects in the DOM

5.21.6.5 Objetos NodeList
.........................

A ‘NodeList’ represents a sequence of nodes.  These objects are used in
two ways in the DOM Core recommendation: an ‘Element’ object provides
one as its list of child nodes, and the ‘getElementsByTagName()’ and
‘getElementsByTagNameNS()’ methods of ‘Node’ return objects with this
interface to represent query results.

The DOM Level 2 recommendation defines one method and one attribute for
these objects:

 -- Método: NodeList.item (i)

     Return the 'i'’th item from the sequence, if there is one, or
     ‘None’.  The index 'i' is not allowed to be less than zero or
     greater than or equal to the length of the sequence.

 -- Atributo: NodeList.length

     The number of nodes in the sequence.

In addition, the Python DOM interface requires that some additional
support is provided to allow ‘NodeList’ objects to be used as Python
sequences.  All ‘NodeList’ implementations must include support for
*note __len__(): 15b4. and *note __getitem__(): 283.; this allows
iteration over the ‘NodeList’ in *note for: 2f2. statements and proper
support for the *note len(): 62e. built-in function.

If a DOM implementation supports modification of the document, the
‘NodeList’ implementation must also support the *note __setitem__():
130e. and *note __delitem__(): 130f. methods.


File: python.info,  Node: DocumentType Objects,  Next: Document Objects,  Prev: Objetos NodeList,  Up: Objects in the DOM

5.21.6.6 DocumentType Objects
.............................

Information about the notations and entities declared by a document
(including the external subset if the parser uses it and can provide the
information) is available from a ‘DocumentType’ object.  The
‘DocumentType’ for a document is available from the ‘Document’ object’s
‘doctype’ attribute; if there is no ‘DOCTYPE’ declaration for the
document, the document’s ‘doctype’ attribute will be set to ‘None’
instead of an instance of this interface.

‘DocumentType’ is a specialization of ‘Node’, and adds the following
attributes:

 -- Atributo: DocumentType.publicId

     The public identifier for the external subset of the document type
     definition.  This will be a string or ‘None’.

 -- Atributo: DocumentType.systemId

     The system identifier for the external subset of the document type
     definition.  This will be a URI as a string, or ‘None’.

 -- Atributo: DocumentType.internalSubset

     A string giving the complete internal subset from the document.
     This does not include the brackets which enclose the subset.  If
     the document has no internal subset, this should be ‘None’.

 -- Atributo: DocumentType.name

     The name of the root element as given in the ‘DOCTYPE’ declaration,
     if present.

 -- Atributo: DocumentType.entities

     This is a ‘NamedNodeMap’ giving the definitions of external
     entities.  For entity names defined more than once, only the first
     definition is provided (others are ignored as required by the XML
     recommendation).  This may be ‘None’ if the information is not
     provided by the parser, or if no entities are defined.

 -- Atributo: DocumentType.notations

     This is a ‘NamedNodeMap’ giving the definitions of notations.  For
     notation names defined more than once, only the first definition is
     provided (others are ignored as required by the XML
     recommendation).  This may be ‘None’ if the information is not
     provided by the parser, or if no notations are defined.


File: python.info,  Node: Document Objects,  Next: Element Objects<2>,  Prev: DocumentType Objects,  Up: Objects in the DOM

5.21.6.7 Document Objects
.........................

A ‘Document’ represents an entire XML document, including its
constituent elements, attributes, processing instructions, comments etc.
Remember that it inherits properties from ‘Node’.

 -- Atributo: Document.documentElement

     The one and only root element of the document.

 -- Método: Document.createElement (tagName)

     Create and return a new element node.  The element is not inserted
     into the document when it is created.  You need to explicitly
     insert it with one of the other methods such as ‘insertBefore()’ or
     ‘appendChild()’.

 -- Método: Document.createElementNS (namespaceURI, tagName)

     Create and return a new element with a namespace.  The 'tagName'
     may have a prefix.  The element is not inserted into the document
     when it is created.  You need to explicitly insert it with one of
     the other methods such as ‘insertBefore()’ or ‘appendChild()’.

 -- Método: Document.createTextNode (data)

     Create and return a text node containing the data passed as a
     parameter.  As with the other creation methods, this one does not
     insert the node into the tree.

 -- Método: Document.createComment (data)

     Create and return a comment node containing the data passed as a
     parameter.  As with the other creation methods, this one does not
     insert the node into the tree.

 -- Método: Document.createProcessingInstruction (target, data)

     Create and return a processing instruction node containing the
     'target' and 'data' passed as parameters.  As with the other
     creation methods, this one does not insert the node into the tree.

 -- Método: Document.createAttribute (name)

     Create and return an attribute node.  This method does not
     associate the attribute node with any particular element.  You must
     use ‘setAttributeNode()’ on the appropriate ‘Element’ object to use
     the newly created attribute instance.

 -- Método: Document.createAttributeNS (namespaceURI, qualifiedName)

     Create and return an attribute node with a namespace.  The
     'tagName' may have a prefix.  This method does not associate the
     attribute node with any particular element.  You must use
     ‘setAttributeNode()’ on the appropriate ‘Element’ object to use the
     newly created attribute instance.

 -- Método: Document.getElementsByTagName (tagName)

     Search for all descendants (direct children, children’s children,
     etc.)  with a particular element type name.

 -- Método: Document.getElementsByTagNameNS (namespaceURI, localName)

     Search for all descendants (direct children, children’s children,
     etc.)  with a particular namespace URI and localname.  The
     localname is the part of the namespace after the prefix.


File: python.info,  Node: Element Objects<2>,  Next: Attr Objects,  Prev: Document Objects,  Up: Objects in the DOM

5.21.6.8 Element Objects
........................

‘Element’ is a subclass of ‘Node’, so inherits all the attributes of
that class.

 -- Atributo: Element.tagName

     The element type name.  In a namespace-using document it may have
     colons in it.  The value is a string.

 -- Método: Element.getElementsByTagName (tagName)

     Same as equivalent method in the ‘Document’ class.

 -- Método: Element.getElementsByTagNameNS (namespaceURI, localName)

     Same as equivalent method in the ‘Document’ class.

 -- Método: Element.hasAttribute (name)

     Return ‘True’ if the element has an attribute named by 'name'.

 -- Método: Element.hasAttributeNS (namespaceURI, localName)

     Return ‘True’ if the element has an attribute named by
     'namespaceURI' and 'localName'.

 -- Método: Element.getAttribute (name)

     Return the value of the attribute named by 'name' as a string.  If
     no such attribute exists, an empty string is returned, as if the
     attribute had no value.

 -- Método: Element.getAttributeNode (attrname)

     Return the ‘Attr’ node for the attribute named by 'attrname'.

 -- Método: Element.getAttributeNS (namespaceURI, localName)

     Return the value of the attribute named by 'namespaceURI' and
     'localName' as a string.  If no such attribute exists, an empty
     string is returned, as if the attribute had no value.

 -- Método: Element.getAttributeNodeNS (namespaceURI, localName)

     Return an attribute value as a node, given a 'namespaceURI' and
     'localName'.

 -- Método: Element.removeAttribute (name)

     Remove an attribute by name.  If there is no matching attribute, a
     *note NotFoundErr: 3a40. is raised.

 -- Método: Element.removeAttributeNode (oldAttr)

     Remove and return 'oldAttr' from the attribute list, if present.
     If 'oldAttr' is not present, *note NotFoundErr: 3a40. is raised.

 -- Método: Element.removeAttributeNS (namespaceURI, localName)

     Remove an attribute by name.  Note that it uses a localName, not a
     qname.  No exception is raised if there is no matching attribute.

 -- Método: Element.setAttribute (name, value)

     Set an attribute value from a string.

 -- Método: Element.setAttributeNode (newAttr)

     Add a new attribute node to the element, replacing an existing
     attribute if necessary if the ‘name’ attribute matches.  If a
     replacement occurs, the old attribute node will be returned.  If
     'newAttr' is already in use, *note InuseAttributeErr: 3a45. will be
     raised.

 -- Método: Element.setAttributeNodeNS (newAttr)

     Add a new attribute node to the element, replacing an existing
     attribute if necessary if the ‘namespaceURI’ and ‘localName’
     attributes match.  If a replacement occurs, the old attribute node
     will be returned.  If 'newAttr' is already in use, *note
     InuseAttributeErr: 3a45. will be raised.

 -- Método: Element.setAttributeNS (namespaceURI, qname, value)

     Set an attribute value from a string, given a 'namespaceURI' and a
     'qname'.  Note that a qname is the whole attribute name.  This is
     different than above.


File: python.info,  Node: Attr Objects,  Next: NamedNodeMap Objects,  Prev: Element Objects<2>,  Up: Objects in the DOM

5.21.6.9 Attr Objects
.....................

‘Attr’ inherits from ‘Node’, so inherits all its attributes.

 -- Atributo: Attr.name

     The attribute name.  In a namespace-using document it may include a
     colon.

 -- Atributo: Attr.localName

     The part of the name following the colon if there is one, else the
     entire name.  This is a read-only attribute.

 -- Atributo: Attr.prefix

     The part of the name preceding the colon if there is one, else the
     empty string.

 -- Atributo: Attr.value

     The text value of the attribute.  This is a synonym for the
     ‘nodeValue’ attribute.


File: python.info,  Node: NamedNodeMap Objects,  Next: Comment Objects,  Prev: Attr Objects,  Up: Objects in the DOM

5.21.6.10 NamedNodeMap Objects
..............................

‘NamedNodeMap’ does 'not' inherit from ‘Node’.

 -- Atributo: NamedNodeMap.length

     The length of the attribute list.

 -- Método: NamedNodeMap.item (index)

     Return an attribute with a particular index.  The order you get the
     attributes in is arbitrary but will be consistent for the life of a
     DOM. Each item is an attribute node.  Get its value with the
     ‘value’ attribute.

There are also experimental methods that give this class more mapping
behavior.  You can use them or you can use the standardized
‘getAttribute*()’ family of methods on the ‘Element’ objects.


File: python.info,  Node: Comment Objects,  Next: Text and CDATASection Objects,  Prev: NamedNodeMap Objects,  Up: Objects in the DOM

5.21.6.11 Comment Objects
.........................

‘Comment’ represents a comment in the XML document.  It is a subclass of
‘Node’, but cannot have child nodes.

 -- Atributo: Comment.data

     The content of the comment as a string.  The attribute contains all
     characters between the leading ‘<!-’‘-’ and trailing ‘-’‘->’, but
     does not include them.


File: python.info,  Node: Text and CDATASection Objects,  Next: Objetos ProcessingInstruction,  Prev: Comment Objects,  Up: Objects in the DOM

5.21.6.12 Text and CDATASection Objects
.......................................

The ‘Text’ interface represents text in the XML document.  If the parser
and DOM implementation support the DOM’s XML extension, portions of the
text enclosed in CDATA marked sections are stored in ‘CDATASection’
objects.  These two interfaces are identical, but provide different
values for the ‘nodeType’ attribute.

These interfaces extend the ‘Node’ interface.  They cannot have child
nodes.

 -- Atributo: Text.data

     The content of the text node as a string.

     Nota: The use of a ‘CDATASection’ node does not indicate that the
     node represents a complete CDATA marked section, only that the
     content of the node was part of a CDATA section.  A single CDATA
     section may be represented by more than one node in the document
     tree.  There is no way to determine whether two adjacent
     ‘CDATASection’ nodes represent different CDATA marked sections.


File: python.info,  Node: Objetos ProcessingInstruction,  Next: Exceções<20>,  Prev: Text and CDATASection Objects,  Up: Objects in the DOM

5.21.6.13 Objetos ProcessingInstruction
.......................................

Represents a processing instruction in the XML document; this inherits
from the ‘Node’ interface and cannot have child nodes.

 -- Atributo: ProcessingInstruction.target

     The content of the processing instruction up to the first
     whitespace character.  This is a read-only attribute.

 -- Atributo: ProcessingInstruction.data

     The content of the processing instruction following the first
     whitespace character.


File: python.info,  Node: Exceções<20>,  Prev: Objetos ProcessingInstruction,  Up: Objects in the DOM

5.21.6.14 Exceções
..................

The DOM Level 2 recommendation defines a single exception, *note
DOMException: 3a5a, and a number of constants that allow applications to
determine what sort of error occurred.  *note DOMException: 3a5a.
instances carry a *note code: 1a. attribute that provides the
appropriate value for the specific exception.

The Python DOM interface provides the constants, but also expands the
set of exceptions so that a specific exception exists for each of the
exception codes defined by the DOM. The implementations must raise the
appropriate specific exception, each of which carries the appropriate
value for the *note code: 1a. attribute.

 -- Exceção: xml.dom.DOMException

     Base exception class used for all specific DOM exceptions.  This
     exception class cannot be directly instantiated.

 -- Exceção: xml.dom.DomstringSizeErr

     Raised when a specified range of text does not fit into a string.
     This is not known to be used in the Python DOM implementations, but
     may be received from DOM implementations not written in Python.

 -- Exceção: xml.dom.HierarchyRequestErr

     Raised when an attempt is made to insert a node where the node type
     is not allowed.

 -- Exceção: xml.dom.IndexSizeErr

     Raised when an index or size parameter to a method is negative or
     exceeds the allowed values.

 -- Exceção: xml.dom.InuseAttributeErr

     Raised when an attempt is made to insert an ‘Attr’ node that is
     already present elsewhere in the document.

 -- Exceção: xml.dom.InvalidAccessErr

     Raised if a parameter or an operation is not supported on the
     underlying object.

 -- Exceção: xml.dom.InvalidCharacterErr

     This exception is raised when a string parameter contains a
     character that is not permitted in the context it’s being used in
     by the XML 1.0 recommendation.  For example, attempting to create
     an ‘Element’ node with a space in the element type name will cause
     this error to be raised.

 -- Exceção: xml.dom.InvalidModificationErr

     Raised when an attempt is made to modify the type of a node.

 -- Exceção: xml.dom.InvalidStateErr

     Raised when an attempt is made to use an object that is not defined
     or is no longer usable.

 -- Exceção: xml.dom.NamespaceErr

     If an attempt is made to change any object in a way that is not
     permitted with regard to the Namespaces in XML(1) recommendation,
     this exception is raised.

 -- Exceção: xml.dom.NotFoundErr

     Exception when a node does not exist in the referenced context.
     For example, ‘NamedNodeMap.removeNamedItem()’ will raise this if
     the node passed in does not exist in the map.

 -- Exceção: xml.dom.NotSupportedErr

     Raised when the implementation does not support the requested type
     of object or operation.

 -- Exceção: xml.dom.NoDataAllowedErr

     This is raised if data is specified for a node which does not
     support data.

 -- Exceção: xml.dom.NoModificationAllowedErr

     Raised on attempts to modify an object where modifications are not
     allowed (such as for read-only nodes).

 -- Exceção: xml.dom.SyntaxErr

     Raised when an invalid or illegal string is specified.

 -- Exceção: xml.dom.WrongDocumentErr

     Raised when a node is inserted in a different document than it
     currently belongs to, and the implementation does not support
     migrating the node from one document to the other.

The exception codes defined in the DOM recommendation map to the
exceptions described above according to this table:

Constante                                  Exception
                                           
---------------------------------------------------------------------------------
                                           
‘DOMSTRING_SIZE_ERR’                       *note DomstringSizeErr: 3a5b.
                                           
                                           
‘HIERARCHY_REQUEST_ERR’                    *note HierarchyRequestErr: 3a5c.
                                           
                                           
‘INDEX_SIZE_ERR’                           *note IndexSizeErr: 3a5d.
                                           
                                           
‘INUSE_ATTRIBUTE_ERR’                      *note InuseAttributeErr: 3a45.
                                           
                                           
‘INVALID_ACCESS_ERR’                       *note InvalidAccessErr: 3a5e.
                                           
                                           
‘INVALID_CHARACTER_ERR’                    *note InvalidCharacterErr: 3a5f.
                                           
                                           
‘INVALID_MODIFICATION_ERR’                 *note InvalidModificationErr: 3a60.
                                           
                                           
‘INVALID_STATE_ERR’                        *note InvalidStateErr: 3a61.
                                           
                                           
‘NAMESPACE_ERR’                            *note NamespaceErr: 3a62.
                                           
                                           
‘NOT_FOUND_ERR’                            *note NotFoundErr: 3a40.
                                           
                                           
‘NOT_SUPPORTED_ERR’                        *note NotSupportedErr: 3a63.
                                           
                                           
‘NO_DATA_ALLOWED_ERR’                      *note NoDataAllowedErr: 3a64.
                                           
                                           
‘NO_MODIFICATION_ALLOWED_ERR’              *note NoModificationAllowedErr: 3a65.
                                           
                                           
‘SYNTAX_ERR’                               *note SyntaxErr: 3a66.
                                           
                                           
‘WRONG_DOCUMENT_ERR’                       *note WrongDocumentErr: 3a67.
                                           

   ---------- Footnotes ----------

   (1) https://www.w3.org/TR/REC-xml-names/


File: python.info,  Node: Conformance,  Prev: Objects in the DOM,  Up: xml dom — The Document Object Model API

5.21.6.15 Conformance
.....................

This section describes the conformance requirements and relationships
between the Python DOM API, the W3C DOM recommendations, and the OMG IDL
mapping for Python.

* Menu:

* Type Mapping::
* Accessor Methods::


File: python.info,  Node: Type Mapping,  Next: Accessor Methods,  Up: Conformance

5.21.6.16 Type Mapping
......................

The IDL types used in the DOM specification are mapped to Python types
according to the following table.

Tipo IDL               Tipo em Python
                       
-----------------------------------------------------------------------
                       
‘boolean’              ‘bool’ or ‘int’
                       
                       
‘int’                  ‘int’
                       
                       
‘long int’             ‘int’
                       
                       
‘unsigned int’         ‘int’
                       
                       
‘DOMString’            ‘str’ or ‘bytes’
                       
                       
‘null’                 ‘None’
                       


File: python.info,  Node: Accessor Methods,  Prev: Type Mapping,  Up: Conformance

5.21.6.17 Accessor Methods
..........................

The mapping from OMG IDL to Python defines accessor functions for IDL
‘attribute’ declarations in much the way the Java mapping does.  Mapping
the IDL declarations

     readonly attribute string someValue;
              attribute string anotherValue;

yields three accessor functions: a “get” method for ‘someValue’
(‘_get_someValue()’), and “get” and “set” methods for ‘anotherValue’
(‘_get_anotherValue()’ and ‘_set_anotherValue()’).  The mapping, in
particular, does not require that the IDL attributes are accessible as
normal Python attributes: ‘object.someValue’ is 'not' required to work,
and may raise an *note AttributeError: 34b.

The Python DOM API, however, 'does' require that normal attribute access
work.  This means that the typical surrogates generated by Python IDL
compilers are not likely to work, and wrapper objects may be needed on
the client if the DOM objects are accessed via CORBA. While this does
require some additional consideration for CORBA DOM clients, the
implementers with experience using DOM over CORBA from Python do not
consider this a problem.  Attributes that are declared ‘readonly’ may
not restrict write access in all DOM implementations.

In the Python DOM API, accessor functions are not required.  If
provided, they should take the form defined by the Python IDL mapping,
but these methods are considered unnecessary since the attributes are
accessible directly from Python.  “Set” accessors should never be
provided for ‘readonly’ attributes.

The IDL definitions do not fully embody the requirements of the W3C DOM
API, such as the notion of certain objects, such as the return value of
‘getElementsByTagName()’, being “live”.  The Python DOM API does not
require implementations to enforce such requirements.


File: python.info,  Node: xml dom minidom — Minimal DOM implementation,  Next: xml dom pulldom — Suporte para construir árvores parciais de DOM,  Prev: xml dom — The Document Object Model API,  Up: Ferramentas de Processamento de Markup Estruturado

5.21.7 ‘xml.dom.minidom’ — Minimal DOM implementation
-----------------------------------------------------

'Código-fonte:' Lib/xml/dom/minidom.py(1)

__________________________________________________________________

*note xml.dom.minidom: 122. is a minimal implementation of the Document
Object Model interface, with an API similar to that in other languages.
It is intended to be simpler than the full DOM and also significantly
smaller.  Users who are not already proficient with the DOM should
consider using the *note xml.etree.ElementTree: 125. module for their
XML processing instead.

     Nota: Se você precisar analisar dados não confiáveis ou não
     autenticados, consulte *note Segurança no XML: 3999.

DOM applications typically start by parsing some XML into a DOM. With
*note xml.dom.minidom: 122, this is done through the parse functions:

     from xml.dom.minidom import parse, parseString

     dom1 = parse('c:\\temp\\mydata.xml')  # parse an XML file by name

     datasource = open('c:\\temp\\mydata.xml')
     dom2 = parse(datasource)  # parse an open file

     dom3 = parseString('<myxml>Some data<empty/> some more data</myxml>')

The *note parse(): 3a70. function can take either a filename or an open
file object.

 -- Função: xml.dom.minidom.parse (filename_or_file, parser=None,
          bufsize=None)

     Return a ‘Document’ from the given input.  'filename_or_file' may
     be either a file name, or a file-like object.  'parser', if given,
     must be a SAX2 parser object.  This function will change the
     document handler of the parser and activate namespace support;
     other parser configuration (like setting an entity resolver) must
     have been done in advance.

Se você tiver XML em uma string, poderá usar a função *note
parseString(): 3a71.:

 -- Função: xml.dom.minidom.parseString (string, parser=None)

     Return a ‘Document’ that represents the 'string'.  This method
     creates an *note io.StringIO: f59. object for the string and passes
     that on to *note parse(): 3a70.

Both functions return a ‘Document’ object representing the content of
the document.

What the *note parse(): 3a70. and *note parseString(): 3a71. functions
do is connect an XML parser with a “DOM builder” that can accept parse
events from any SAX parser and convert them into a DOM tree.  The name
of the functions are perhaps misleading, but are easy to grasp when
learning the interfaces.  The parsing of the document will be completed
before these functions return; it’s simply that these functions do not
provide a parser implementation themselves.

You can also create a ‘Document’ by calling a method on a “DOM
Implementation” object.  You can get this object either by calling the
‘getDOMImplementation()’ function in the *note xml.dom: 121. package or
the *note xml.dom.minidom: 122. module.  Once you have a ‘Document’, you
can add child nodes to it to populate the DOM:

     from xml.dom.minidom import getDOMImplementation

     impl = getDOMImplementation()

     newdoc = impl.createDocument(None, "some_tag", None)
     top_element = newdoc.documentElement
     text = newdoc.createTextNode('Some textual content.')
     top_element.appendChild(text)

Once you have a DOM document object, you can access the parts of your
XML document through its properties and methods.  These properties are
defined in the DOM specification.  The main property of the document
object is the ‘documentElement’ property.  It gives you the main element
in the XML document: the one that holds all others.  Here is an example
program:

     dom3 = parseString("<myxml>Some data</myxml>")
     assert dom3.documentElement.tagName == "myxml"

When you are finished with a DOM tree, you may optionally call the
‘unlink()’ method to encourage early cleanup of the now-unneeded
objects.  ‘unlink()’ is an *note xml.dom.minidom: 122.-specific
extension to the DOM API that renders the node and its descendants
essentially useless.  Otherwise, Python’s garbage collector will
eventually take care of the objects in the tree.

Ver também
..........

Document Object Model (DOM) Level 1 Specification(2)

     The W3C recommendation for the DOM supported by *note
     xml.dom.minidom: 122.

* Menu:

* Objetos DOM::
* DOM Example::
* minidom e o padrão DOM::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/xml/dom/minidom.py

   (2) https://www.w3.org/TR/REC-DOM-Level-1/


File: python.info,  Node: Objetos DOM,  Next: DOM Example,  Up: xml dom minidom — Minimal DOM implementation

5.21.7.1 Objetos DOM
....................

The definition of the DOM API for Python is given as part of the *note
xml.dom: 121. module documentation.  This section lists the differences
between the API and *note xml.dom.minidom: 122.

 -- Método: Node.unlink ()

     Break internal references within the DOM so that it will be garbage
     collected on versions of Python without cyclic GC. Even when cyclic
     GC is available, using this can make large amounts of memory
     available sooner, so calling this on DOM objects as soon as they
     are no longer needed is good practice.  This only needs to be
     called on the ‘Document’ object, but may be called on child nodes
     to discard children of that node.

     You can avoid calling this method explicitly by using the *note
     with: 5d2. statement.  The following code will automatically unlink
     'dom' when the ‘with’ block is exited:

          with xml.dom.minidom.parse(datasource) as dom:
              ... # Work with dom.

 -- Método: Node.writexml (writer, indent='', addindent='', newl='',
          encoding=None, standalone=None)

     Write XML to the writer object.  The writer receives texts but not
     bytes as input, it should have a ‘write()’ method which matches
     that of the file object interface.  The 'indent' parameter is the
     indentation of the current node.  The 'addindent' parameter is the
     incremental indentation to use for subnodes of the current one.
     The 'newl' parameter specifies the string to use to terminate
     newlines.

     For the ‘Document’ node, an additional keyword argument 'encoding'
     can be used to specify the encoding field of the XML header.

     Similarly, explicitly stating the 'standalone' argument causes the
     standalone document declarations to be added to the prologue of the
     XML document.  If the value is set to ‘True’, ‘standalone="yes"’ is
     added, otherwise it is set to ‘"no"’.  Not stating the argument
     will omit the declaration from the document.

     Alterado na versão 3.8: The *note writexml(): aa1. method now
     preserves the attribute order specified by the user.

     Alterado na versão 3.9: The 'standalone' parameter was added.

 -- Método: Node.toxml (encoding=None, standalone=None)

     Return a string or byte string containing the XML represented by
     the DOM node.

     With an explicit 'encoding' (1) argument, the result is a byte
     string in the specified encoding.  With no 'encoding' argument, the
     result is a Unicode string, and the XML declaration in the
     resulting string does not specify an encoding.  Encoding this
     string in an encoding other than UTF-8 is likely incorrect, since
     UTF-8 is the default encoding of XML.

     The 'standalone' argument behaves exactly as in *note writexml():
     aa1.

     Alterado na versão 3.8: The *note toxml(): aa2. method now
     preserves the attribute order specified by the user.

     Alterado na versão 3.9: The 'standalone' parameter was added.

 -- Método: Node.toprettyxml (indent='\t', newl='\n', encoding=None,
          standalone=None)

     Return a pretty-printed version of the document.  'indent'
     specifies the indentation string and defaults to a tabulator;
     'newl' specifies the string emitted at the end of each line and
     defaults to ‘\n’.

     The 'encoding' argument behaves like the corresponding argument of
     *note toxml(): aa2.

     The 'standalone' argument behaves exactly as in *note writexml():
     aa1.

     Alterado na versão 3.8: The *note toprettyxml(): aa3. method now
     preserves the attribute order specified by the user.

     Alterado na versão 3.9: The 'standalone' parameter was added.

   ---------- Footnotes ----------

   (1) The encoding name included in the XML output should conform to
the appropriate standards.  For example, “UTF-8” is valid, but “UTF8” is
not valid in an XML document’s declaration, even though Python accepts
it as an encoding name.  See
‘https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl’ and
‘https://www.iana.org/assignments/character-sets/character-sets.xhtml’.


File: python.info,  Node: DOM Example,  Next: minidom e o padrão DOM,  Prev: Objetos DOM,  Up: xml dom minidom — Minimal DOM implementation

5.21.7.2 DOM Example
....................

This example program is a fairly realistic example of a simple program.
In this particular case, we do not take much advantage of the
flexibility of the DOM.

     import xml.dom.minidom

     document = """\
     <slideshow>
     <title>Demo slideshow</title>
     <slide><title>Slide title</title>
     <point>This is a demo</point>
     <point>Of a program for processing slides</point>
     </slide>

     <slide><title>Another demo slide</title>
     <point>It is important</point>
     <point>To have more than</point>
     <point>one slide</point>
     </slide>
     </slideshow>
     """

     dom = xml.dom.minidom.parseString(document)

     def getText(nodelist):
         rc = []
         for node in nodelist:
             if node.nodeType == node.TEXT_NODE:
                 rc.append(node.data)
         return ''.join(rc)

     def handleSlideshow(slideshow):
         print("<html>")
         handleSlideshowTitle(slideshow.getElementsByTagName("title")[0])
         slides = slideshow.getElementsByTagName("slide")
         handleToc(slides)
         handleSlides(slides)
         print("</html>")

     def handleSlides(slides):
         for slide in slides:
             handleSlide(slide)

     def handleSlide(slide):
         handleSlideTitle(slide.getElementsByTagName("title")[0])
         handlePoints(slide.getElementsByTagName("point"))

     def handleSlideshowTitle(title):
         print(f"<title>{getText(title.childNodes)}</title>")

     def handleSlideTitle(title):
         print(f"<h2>{getText(title.childNodes)}</h2>")

     def handlePoints(points):
         print("<ul>")
         for point in points:
             handlePoint(point)
         print("</ul>")

     def handlePoint(point):
         print(f"<li>{getText(point.childNodes)}</li>")

     def handleToc(slides):
         for slide in slides:
             title = slide.getElementsByTagName("title")[0]
             print(f"<p>{getText(title.childNodes)}</p>")

     handleSlideshow(dom)


File: python.info,  Node: minidom e o padrão DOM,  Prev: DOM Example,  Up: xml dom minidom — Minimal DOM implementation

5.21.7.3 minidom e o padrão DOM
...............................

The *note xml.dom.minidom: 122. module is essentially a DOM
1.0-compatible DOM with some DOM 2 features (primarily namespace
features).

Usage of the DOM interface in Python is straight-forward.  The following
mapping rules apply:

   * Interfaces are accessed through instance objects.  Applications
     should not instantiate the classes themselves; they should use the
     creator functions available on the ‘Document’ object.  Derived
     interfaces support all operations (and attributes) from the base
     interfaces, plus any new operations.

   * Operations are used as methods.  Since the DOM uses only *note in:
     2f4. parameters, the arguments are passed in normal order (from
     left to right).  There are no optional arguments.  ‘void’
     operations return ‘None’.

   * IDL attributes map to instance attributes.  For compatibility with
     the OMG IDL language mapping for Python, an attribute ‘foo’ can
     also be accessed through accessor methods ‘_get_foo()’ and
     ‘_set_foo()’.  ‘readonly’ attributes must not be changed; this is
     not enforced at runtime.

   * The types ‘short int’, ‘unsigned int’, ‘unsigned long long’, and
     ‘boolean’ all map to Python integer objects.

   * The type ‘DOMString’ maps to Python strings.  *note
     xml.dom.minidom: 122. supports either bytes or strings, but will
     normally produce strings.  Values of type ‘DOMString’ may also be
     ‘None’ where allowed to have the IDL ‘null’ value by the DOM
     specification from the W3C.

   * ‘const’ declarations map to variables in their respective scope
     (e.g.  ‘xml.dom.minidom.Node.PROCESSING_INSTRUCTION_NODE’); they
     must not be changed.

   * ‘DOMException’ is currently not supported in *note xml.dom.minidom:
     122.  Instead, *note xml.dom.minidom: 122. uses standard Python
     exceptions such as *note TypeError: 2c3. and *note AttributeError:
     34b.

   * ‘NodeList’ objects are implemented using Python’s built-in list
     type.  These objects provide the interface defined in the DOM
     specification, but with earlier versions of Python they do not
     support the official API. They are, however, much more “Pythonic”
     than the interface defined in the W3C recommendations.

The following interfaces have no implementation in *note
xml.dom.minidom: 122.:

   * ‘DOMTimeStamp’

   * ‘EntityReference’

Most of these reflect information in the XML document that is not of
general utility to most DOM users.


File: python.info,  Node: xml dom pulldom — Suporte para construir árvores parciais de DOM,  Next: xml sax — Support for SAX2 parsers,  Prev: xml dom minidom — Minimal DOM implementation,  Up: Ferramentas de Processamento de Markup Estruturado

5.21.8 ‘xml.dom.pulldom’ — Suporte para construir árvores parciais de DOM
-------------------------------------------------------------------------

'Código-fonte:' Lib/xml/dom/pulldom.py(1)

__________________________________________________________________

O módulo *note xml.dom.pulldom: 123. fornece um “analisador sintático de
pull” que também pode ser solicitado a produzir fragmentos do documento
acessíveis via DOM, quando necessário.  O conceito básico envolve
extrair “eventos” de um fluxo de XML recebido e processá-los.  Ao
contrário do SAX, que também emprega um modelo de processamento
orientado a eventos juntamente com retornos de chamada, o usuário de um
analisador sintático pull é responsável por extrair explicitamente os
eventos do fluxo, repetindo esses eventos até que o processamento seja
concluído ou ocorra uma condição de erro.

     Nota: Se você precisar analisar dados não confiáveis ou não
     autenticados, consulte *note Segurança no XML: 3999.

Alterado na versão 3.7.1: O analisador sintático de SAX não processa
mais entidades externas gerais por padrão para aumentar a segurança.
Para habilitar o processamento de entidades externas, passe uma
instância personalizada do analisador sintático em:

     from xml.dom.pulldom import parse
     from xml.sax import make_parser
     from xml.sax.handler import feature_external_ges

     parser = make_parser()
     parser.setFeature(feature_external_ges, True)
     parse(filename, parser=parser)

Exemplo:

     from xml.dom import pulldom

     doc = pulldom.parse('sales_items.xml')
     for event, node in doc:
         if event == pulldom.START_ELEMENT and node.tagName == 'item':
             if int(node.getAttribute('price')) > 50:
                 doc.expandNode(node)
                 print(node.toxml())

‘event’ é uma constante e pode ser um de:

   * ‘START_ELEMENT’

   * ‘END_ELEMENT’

   * ‘COMMENT’

   * ‘START_DOCUMENT’

   * ‘END_DOCUMENT’

   * ‘CHARACTERS’

   * ‘PROCESSING_INSTRUCTION’

   * ‘IGNORABLE_WHITESPACE’

‘node’ é um objeto do tipo ‘xml.dom.minidom.Document’,
‘xml.dom.minidom.Element’ ou ‘xml.dom.minidom.Text’.

Como o documento é tratado como um fluxo “plano” de eventos, a “árvore”
do documento é implicitamente percorrida e os elementos desejados são
encontrados independentemente de sua profundidade na árvore.  Em outras
palavras, não é necessário considerar questões hierárquicas, como a
busca recursiva dos nós do documento, embora, se o contexto dos
elementos fosse importante, seria necessário manter algum estado
relacionado ao contexto (ou seja, lembrar onde se está no documento em
um determinado ponto) ou utilizar o método *note
DOMEventStream.expandNode(): 3a7c. e alternar para o processamento
relacionado ao DOM.

 -- Classe: xml.dom.pulldom.PullDOM (documentFactory=None)

     Subclasse de *note xml.sax.handler.ContentHandler: 3a7e.

 -- Classe: xml.dom.pulldom.SAX2DOM (documentFactory=None)

     Subclasse de *note xml.sax.handler.ContentHandler: 3a7e.

 -- Função: xml.dom.pulldom.parse (stream_or_string, parser=None,
          bufsize=None)

     Retorna um *note DOMEventStream: 735. da entrada fornecida.
     'stream_or_string' pode ser um nome de arquivo ou um objeto arquivo
     ou similar.  'parser', se fornecido, deve ser um objeto *note
     XMLReader: 3a81.  Esta função alterará o manipulador de documentos
     do analisador e ativará o suporte a espaços de nomes; outras
     configurações do analisador sintático (como a definição de um
     resolvedor de entidades) devem ter sido feitas previamente.

Se você tiver XML em uma string, poderá usar a função *note
parseString(): 3a82.:

 -- Função: xml.dom.pulldom.parseString (string, parser=None)

     Retorna um *note DOMEventStream: 735. que representa a 'string'
     (Unicode).

 -- Dado: xml.dom.pulldom.default_bufsize

     Valor padrão para o parâmetro 'bufsize' para *note parse(): 3a80.

     O valor desta variável pode ser alterado antes de chamar *note
     parse(): 3a80. e o novo valor entrará em vigor.

* Menu:

* Objetos DOMEventStream::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/xml/dom/pulldom.py


File: python.info,  Node: Objetos DOMEventStream,  Up: xml dom pulldom — Suporte para construir árvores parciais de DOM

5.21.8.1 Objetos DOMEventStream
...............................

 -- Classe: xml.dom.pulldom.DOMEventStream (stream, parser, bufsize)

     Alterado na versão 3.11: O suporte para o método *note
     __getitem__(): 283. foi removido

      -- Método: getEvent ()

          Retorna uma tupla contendo evento 'event' e o nó 'node' atual
          como ‘xml.dom.minidom.Document’ se o evento for igual a
          ‘START_DOCUMENT’, ‘xml.dom.minidom.Element’ se o evento for
          igual a ‘START_ELEMENT’ ou ‘END_ELEMENT’ ou
          ‘xml.dom.minidom.Text’ se o evento for igual a ‘CHARACTERS’.
          O nó atual não contém informações sobre seus filhos, a menos
          que *note expandNode(): 3a7c. seja chamado.

      -- Método: expandNode (node)

          Expande todos os filhos de 'node' para 'node'.  Exemplo:

               from xml.dom import pulldom

               xml = '<html><title>Foo</title> <p>Algum texto <div>e mais</div></p> </html>'
               doc = pulldom.parseString(xml)
               for event, node in doc:
                   if event == pulldom.START_ELEMENT and node.tagName == 'p':
                       # A seguinte instrução só exibe '<p/>'
                       print(node.toxml())
                       doc.expandNode(node)
                       # A seguinte instrução exibe o nó com todos os seus filhos '<p>Algum texto <div>e mais</div></p>'
                       print(node.toxml())

      -- Método: reset ()


File: python.info,  Node: xml sax — Support for SAX2 parsers,  Next: xml sax handler — Classes base para manipuladores de SAX,  Prev: xml dom pulldom — Suporte para construir árvores parciais de DOM,  Up: Ferramentas de Processamento de Markup Estruturado

5.21.9 ‘xml.sax’ — Support for SAX2 parsers
-------------------------------------------

'Código-fonte:' Lib/xml/sax/__init__.py(1)

__________________________________________________________________

The *note xml.sax: 129. package provides a number of modules which
implement the Simple API for XML (SAX) interface for Python.  The
package itself provides the SAX exceptions and the convenience functions
which will be most used by users of the SAX API.

     Nota: Se você precisar analisar dados não confiáveis ou não
     autenticados, consulte *note Segurança no XML: 3999.

Alterado na versão 3.7.1: The SAX parser no longer processes general
external entities by default to increase security.  Before, the parser
created network connections to fetch remote files or loaded local files
from the file system for DTD and entities.  The feature can be enabled
again with method *note setFeature(): 3a8b. on the parser object and
argument *note feature_external_ges: 15e0.

As funções de conveniência são:

 -- Função: xml.sax.make_parser (parser_list=[])

     Create and return a SAX *note XMLReader: 3a81. object.  The first
     parser found will be used.  If 'parser_list' is provided, it must
     be an iterable of strings which name modules that have a function
     named ‘create_parser()’.  Modules listed in 'parser_list' will be
     used before modules in the default list of parsers.

     Alterado na versão 3.8: The 'parser_list' argument can be any
     iterable, not just a list.

 -- Função: xml.sax.parse (filename_or_stream, handler,
          error_handler=handler.ErrorHandler())

     Create a SAX parser and use it to parse a document.  The document,
     passed in as 'filename_or_stream', can be a filename or a file
     object.  The 'handler' parameter needs to be a SAX *note
     ContentHandler: 3a7e. instance.  If 'error_handler' is given, it
     must be a SAX *note ErrorHandler: 3a8c. instance; if omitted, *note
     SAXParseException: 3a8d. will be raised on all errors.  There is no
     return value; all work must be done by the 'handler' passed in.

 -- Função: xml.sax.parseString (string, handler,
          error_handler=handler.ErrorHandler())

     Similar to *note parse(): 1b7b, but parses from a buffer 'string'
     received as a parameter.  'string' must be a *note str: 44c.
     instance or a *note bytes-like object: d4f.

     Alterado na versão 3.5: Added support of *note str: 44c. instances.

A typical SAX application uses three kinds of objects: readers, handlers
and input sources.  “Reader” in this context is another term for parser,
i.e.  some piece of code that reads the bytes or characters from the
input source, and produces a sequence of events.  The events then get
distributed to the handler objects, i.e.  the reader invokes a method on
the handler.  A SAX application must therefore obtain a reader object,
create or open the input sources, create the handlers, and connect these
objects all together.  As the final step of preparation, the reader is
called to parse the input.  During parsing, methods on the handler
objects are called based on structural and syntactic events from the
input data.

For these objects, only the interfaces are relevant; they are normally
not instantiated by the application itself.  Since Python does not have
an explicit notion of interface, they are formally introduced as
classes, but applications may use implementations which do not inherit
from the provided classes.  The *note InputSource: eca, *note Locator:
3a8e, ‘Attributes’, ‘AttributesNS’, and *note XMLReader: 3a81.
interfaces are defined in the module *note xml.sax.xmlreader: 12c.  The
handler interfaces are defined in *note xml.sax.handler: 12a.  For
convenience, *note InputSource: eca. (which is often instantiated
directly) and the handler classes are also available from *note xml.sax:
129.  These interfaces are described below.

In addition to these classes, *note xml.sax: 129. provides the following
exception classes.

 -- Exceção: xml.sax.SAXException (msg, exception=None)

     Encapsulate an XML error or warning.  This class can contain basic
     error or warning information from either the XML parser or the
     application: it can be subclassed to provide additional
     functionality or to add localization.  Note that although the
     handlers defined in the *note ErrorHandler: 3a8c. interface receive
     instances of this exception, it is not required to actually raise
     the exception — it is also useful as a container for information.

     When instantiated, 'msg' should be a human-readable description of
     the error.  The optional 'exception' parameter, if given, should be
     ‘None’ or an exception that was caught by the parsing code and is
     being passed along as information.

     This is the base class for the other SAX exception classes.

 -- Exceção: xml.sax.SAXParseException (msg, exception, locator)

     Subclass of *note SAXException: 3a8f. raised on parse errors.
     Instances of this class are passed to the methods of the SAX *note
     ErrorHandler: 3a8c. interface to provide information about the
     parse error.  This class supports the SAX *note Locator: 3a8e.
     interface as well as the *note SAXException: 3a8f. interface.

 -- Exceção: xml.sax.SAXNotRecognizedException (msg, exception=None)

     Subclass of *note SAXException: 3a8f. raised when a SAX *note
     XMLReader: 3a81. is confronted with an unrecognized feature or
     property.  SAX applications and extensions may use this class for
     similar purposes.

 -- Exceção: xml.sax.SAXNotSupportedException (msg, exception=None)

     Subclass of *note SAXException: 3a8f. raised when a SAX *note
     XMLReader: 3a81. is asked to enable a feature that is not
     supported, or to set a property to a value that the implementation
     does not support.  SAX applications and extensions may use this
     class for similar purposes.

Ver também
..........

SAX: The Simple API for XML(2)

     This site is the focal point for the definition of the SAX API. It
     provides a Java implementation and online documentation.  Links to
     implementations and historical information are also available.

Module *note xml.sax.handler: 12a.

     Definitions of the interfaces for application-provided objects.

Module *note xml.sax.saxutils: 12b.

     Convenience functions for use in SAX applications.

Module *note xml.sax.xmlreader: 12c.

     Definitions of the interfaces for parser-provided objects.

* Menu:

* SAXException Objects::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/xml/sax/__init__.py

   (2) http://www.saxproject.org/


File: python.info,  Node: SAXException Objects,  Up: xml sax — Support for SAX2 parsers

5.21.9.1 SAXException Objects
.............................

The *note SAXException: 3a8f. exception class supports the following
methods:

 -- Método: SAXException.getMessage ()

     Return a human-readable message describing the error condition.

 -- Método: SAXException.getException ()

     Return an encapsulated exception object, or ‘None’.


File: python.info,  Node: xml sax handler — Classes base para manipuladores de SAX,  Next: xml sax saxutils — Utilitários de SAX,  Prev: xml sax — Support for SAX2 parsers,  Up: Ferramentas de Processamento de Markup Estruturado

5.21.10 ‘xml.sax.handler’ — Classes base para manipuladores de SAX
------------------------------------------------------------------

'Código-fonte:' Lib/xml/sax/handler.py(1)

__________________________________________________________________

The SAX API defines five kinds of handlers: content handlers, DTD
handlers, error handlers, entity resolvers and lexical handlers.
Applications normally only need to implement those interfaces whose
events they are interested in; they can implement the interfaces in a
single object or in multiple objects.  Handler implementations should
inherit from the base classes provided in the module *note
xml.sax.handler: 12a, so that all methods get default implementations.

 -- Classe: xml.sax.handler.ContentHandler

     This is the main callback interface in SAX, and the one most
     important to applications.  The order of events in this interface
     mirrors the order of the information in the document.

 -- Classe: xml.sax.handler.DTDHandler

     Manipular eventos DTD.

     This interface specifies only those DTD events required for basic
     parsing (unparsed entities and attributes).

 -- Classe: xml.sax.handler.EntityResolver

     Basic interface for resolving entities.  If you create an object
     implementing this interface, then register the object with your
     Parser, the parser will call the method in your object to resolve
     all external entities.

 -- Classe: xml.sax.handler.ErrorHandler

     Interface used by the parser to present error and warning messages
     to the application.  The methods of this object control whether
     errors are immediately converted to exceptions or are handled in
     some other way.

 -- Classe: xml.sax.handler.LexicalHandler

     Interface used by the parser to represent low frequency events
     which may not be of interest to many applications.

In addition to these classes, *note xml.sax.handler: 12a. provides
symbolic constants for the feature and property names.

 -- Dado: xml.sax.handler.feature_namespaces

          valor: ‘"http://xml.org/sax/features/namespaces"’
          true: Executa o processamento do espaço de nomes.
          false: Optionally do not perform Namespace processing (implies namespace-prefixes; default).
          access: (parsing) read-only; (not parsing) read/write

 -- Dado: xml.sax.handler.feature_namespace_prefixes

          valor: ‘"http://xml.org/sax/features/namespace-prefixes"’
          true: Report the original prefixed names and attributes used for Namespace declarations.
          false: Do not report attributes used for Namespace declarations, and optionally do not report original prefixed names (default).
          access: (parsing) read-only; (not parsing) read/write

 -- Dado: xml.sax.handler.feature_string_interning

          valor: ‘"http://xml.org/sax/features/string-interning"’
          true: All element names, prefixes, attribute names, Namespace URIs, and local names are interned using the built-in intern function.
          false: Names are not necessarily interned, although they may be (default).
          access: (parsing) read-only; (not parsing) read/write

 -- Dado: xml.sax.handler.feature_validation

          valor: ‘"http://xml.org/sax/features/validation"’
          true: Report all validation errors (implies external-general-entities and external-parameter-entities).
          false: Do not report validation errors.
          access: (parsing) read-only; (not parsing) read/write

 -- Dado: xml.sax.handler.feature_external_ges

          Aviso: Enabling opens a vulnerability to external entity
          attacks(2) if the parser is used with user-provided XML
          content.  Please reflect on your threat model(3) before
          enabling this feature.

          valor: ‘"http://xml.org/sax/features/external-general-entities"’
          true: Include all external general (text) entities.
          false: Do not include external general entities.
          access: (parsing) read-only; (not parsing) read/write

 -- Dado: xml.sax.handler.feature_external_pes

          valor: ‘"http://xml.org/sax/features/external-parameter-entities"’
          true: Include all external parameter entities, including the external DTD subset.
          false: Do not include any external parameter entities, even the external DTD subset.
          access: (parsing) read-only; (not parsing) read/write

 -- Dado: xml.sax.handler.all_features

     Lista de todos os recursos.

 -- Dado: xml.sax.handler.property_lexical_handler

          valor: ‘"http://xml.org/sax/properties/lexical-handler"’
          data type: xml.sax.handler.LexicalHandler (not supported in Python 2)
          descrição: Um tratador de extensão opcional para eventos lexicais como comentários.
          acesso: leitura/gravação

 -- Dado: xml.sax.handler.property_declaration_handler

          valor: ‘"http://xml.org/sax/properties/declaration-handler"’
          data type: xml.sax.sax2lib.DeclHandler (not supported in Python 2)
          description: An optional extension handler for DTD-related events other than notations and unparsed entities.
          acesso: leitura/gravação

 -- Dado: xml.sax.handler.property_dom_node

          valor: ‘"http://xml.org/sax/properties/dom-node"’
          data type: org.w3c.dom.Node (not supported in Python 2)
          description: When parsing, the current DOM node being visited if this is a DOM iterator; when not parsing, the root DOM node for iteration.
          access: (parsing) read-only; (not parsing) read/write

 -- Dado: xml.sax.handler.property_xml_string

          valor: ‘"http://xml.org/sax/properties/xml-string"’
          data type: Bytes
          description: The literal string of characters that was the source for the current event.
          acesso: somente leitura

 -- Dado: xml.sax.handler.all_properties

     List of all known property names.

* Menu:

* ContentHandler Objects::
* DTDHandler Objects::
* EntityResolver Objects::
* ErrorHandler Objects::
* LexicalHandler Objects::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/xml/sax/handler.py

   (2) https://en.wikipedia.org/wiki/XML_external_entity_attack

   (3) https://en.wikipedia.org/wiki/Threat_model


File: python.info,  Node: ContentHandler Objects,  Next: DTDHandler Objects,  Up: xml sax handler — Classes base para manipuladores de SAX

5.21.10.1 ContentHandler Objects
................................

Users are expected to subclass *note ContentHandler: 3a7e. to support
their application.  The following methods are called by the parser on
the appropriate events in the input document:

 -- Método: ContentHandler.setDocumentLocator (locator)

     Called by the parser to give the application a locator for locating
     the origin of document events.

     SAX parsers are strongly encouraged (though not absolutely
     required) to supply a locator: if it does so, it must supply the
     locator to the application by invoking this method before invoking
     any of the other methods in the DocumentHandler interface.

     The locator allows the application to determine the end position of
     any document-related event, even if the parser is not reporting an
     error.  Typically, the application will use this information for
     reporting its own errors (such as character content that does not
     match an application’s business rules).  The information returned
     by the locator is probably not sufficient for use with a search
     engine.

     Note that the locator will return correct information only during
     the invocation of the events in this interface.  The application
     should not attempt to use it at any other time.

 -- Método: ContentHandler.startDocument ()

     Receive notification of the beginning of a document.

     The SAX parser will invoke this method only once, before any other
     methods in this interface or in DTDHandler (except for *note
     setDocumentLocator(): 3aa8.).

 -- Método: ContentHandler.endDocument ()

     Receive notification of the end of a document.

     The SAX parser will invoke this method only once, and it will be
     the last method invoked during the parse.  The parser shall not
     invoke this method until it has either abandoned parsing (because
     of an unrecoverable error) or reached the end of input.

 -- Método: ContentHandler.startPrefixMapping (prefix, uri)

     Begin the scope of a prefix-URI Namespace mapping.

     The information from this event is not necessary for normal
     Namespace processing: the SAX XML reader will automatically replace
     prefixes for element and attribute names when the
     ‘feature_namespaces’ feature is enabled (the default).

     There are cases, however, when applications need to use prefixes in
     character data or in attribute values, where they cannot safely be
     expanded automatically; the *note startPrefixMapping(): 3aab. and
     *note endPrefixMapping(): 3aac. events supply the information to
     the application to expand prefixes in those contexts itself, if
     necessary.

     Note that *note startPrefixMapping(): 3aab. and *note
     endPrefixMapping(): 3aac. events are not guaranteed to be properly
     nested relative to each-other: all *note startPrefixMapping():
     3aab. events will occur before the corresponding *note
     startElement(): 158c. event, and all *note endPrefixMapping():
     3aac. events will occur after the corresponding *note endElement():
     158d. event, but their order is not guaranteed.

 -- Método: ContentHandler.endPrefixMapping (prefix)

     End the scope of a prefix-URI mapping.

     See *note startPrefixMapping(): 3aab. for details.  This event will
     always occur after the corresponding *note endElement(): 158d.
     event, but the order of *note endPrefixMapping(): 3aac. events is
     not otherwise guaranteed.

 -- Método: ContentHandler.startElement (name, attrs)

     Signals the start of an element in non-namespace mode.

     The 'name' parameter contains the raw XML 1.0 name of the element
     type as a string and the 'attrs' parameter holds an object of the
     *note Attributes: 3aad. interface containing the attributes of the
     element.  The object passed as 'attrs' may be re-used by the
     parser; holding on to a reference to it is not a reliable way to
     keep a copy of the attributes.  To keep a copy of the attributes,
     use the *note copy(): 25. method of the 'attrs' object.

 -- Método: ContentHandler.endElement (name)

     Signals the end of an element in non-namespace mode.

     The 'name' parameter contains the name of the element type, just as
     with the *note startElement(): 158c. event.

 -- Método: ContentHandler.startElementNS (name, qname, attrs)

     Signals the start of an element in namespace mode.

     The 'name' parameter contains the name of the element type as a
     ‘(uri, localname)’ tuple, the 'qname' parameter contains the raw
     XML 1.0 name used in the source document, and the 'attrs' parameter
     holds an instance of the *note AttributesNS: 3aaf. interface
     containing the attributes of the element.  If no namespace is
     associated with the element, the 'uri' component of 'name' will be
     ‘None’.  The object passed as 'attrs' may be re-used by the parser;
     holding on to a reference to it is not a reliable way to keep a
     copy of the attributes.  To keep a copy of the attributes, use the
     *note copy(): 25. method of the 'attrs' object.

     Parsers may set the 'qname' parameter to ‘None’, unless the
     ‘feature_namespace_prefixes’ feature is activated.

 -- Método: ContentHandler.endElementNS (name, qname)

     Signals the end of an element in namespace mode.

     O parâmetro 'name' contém o nome do tipo de elemento, assim como no
     método *note startElementNS(): 3aae, da mesma forma o parâmetro
     'qname'.

 -- Método: ContentHandler.characters (content)

     Receive notification of character data.

     The Parser will call this method to report each chunk of character
     data.  SAX parsers may return all contiguous character data in a
     single chunk, or they may split it into several chunks; however,
     all of the characters in any single event must come from the same
     external entity so that the Locator provides useful information.

     'content' may be a string or bytes instance; the ‘expat’ reader
     module always produces strings.

          Nota: The earlier SAX 1 interface provided by the Python XML
          Special Interest Group used a more Java-like interface for
          this method.  Since most parsers used from Python did not take
          advantage of the older interface, the simpler signature was
          chosen to replace it.  To convert old code to the new
          interface, use 'content' instead of slicing content with the
          old 'offset' and 'length' parameters.

 -- Método: ContentHandler.ignorableWhitespace (whitespace)

     Receive notification of ignorable whitespace in element content.

     Validating Parsers must use this method to report each chunk of
     ignorable whitespace (see the W3C XML 1.0 recommendation, section
     2.10): non-validating parsers may also use this method if they are
     capable of parsing and using content models.

     SAX parsers may return all contiguous whitespace in a single chunk,
     or they may split it into several chunks; however, all of the
     characters in any single event must come from the same external
     entity, so that the Locator provides useful information.

 -- Método: ContentHandler.processingInstruction (target, data)

     Receive notification of a processing instruction.

     The Parser will invoke this method once for each processing
     instruction found: note that processing instructions may occur
     before or after the main document element.

     A SAX parser should never report an XML declaration (XML 1.0,
     section 2.8) or a text declaration (XML 1.0, section 4.3.1) using
     this method.

 -- Método: ContentHandler.skippedEntity (name)

     Receive notification of a skipped entity.

     The Parser will invoke this method once for each entity skipped.
     Non-validating processors may skip entities if they have not seen
     the declarations (because, for example, the entity was declared in
     an external DTD subset).  All processors may skip external
     entities, depending on the values of the ‘feature_external_ges’ and
     the ‘feature_external_pes’ properties.


File: python.info,  Node: DTDHandler Objects,  Next: EntityResolver Objects,  Prev: ContentHandler Objects,  Up: xml sax handler — Classes base para manipuladores de SAX

5.21.10.2 DTDHandler Objects
............................

As instâncias *note DTDHandler: 3a99. fornecem os seguintes métodos:

 -- Método: DTDHandler.notationDecl (name, publicId, systemId)

     Handle a notation declaration event.

 -- Método: DTDHandler.unparsedEntityDecl (name, publicId, systemId,
          ndata)

     Handle an unparsed entity declaration event.


File: python.info,  Node: EntityResolver Objects,  Next: ErrorHandler Objects,  Prev: DTDHandler Objects,  Up: xml sax handler — Classes base para manipuladores de SAX

5.21.10.3 EntityResolver Objects
................................

 -- Método: EntityResolver.resolveEntity (publicId, systemId)

     Resolve the system identifier of an entity and return either the
     system identifier to read from as a string, or an InputSource to
     read from.  The default implementation returns 'systemId'.


File: python.info,  Node: ErrorHandler Objects,  Next: LexicalHandler Objects,  Prev: EntityResolver Objects,  Up: xml sax handler — Classes base para manipuladores de SAX

5.21.10.4 ErrorHandler Objects
..............................

Objects with this interface are used to receive error and warning
information from the *note XMLReader: 3a81.  If you create an object
that implements this interface, then register the object with your *note
XMLReader: 3a81, the parser will call the methods in your object to
report all warnings and errors.  There are three levels of errors
available: warnings, (possibly) recoverable errors, and unrecoverable
errors.  All methods take a *note SAXParseException: 3a8d. as the only
parameter.  Errors and warnings may be converted to an exception by
raising the passed-in exception object.

 -- Método: ErrorHandler.error (exception)

     Called when the parser encounters a recoverable error.  If this
     method does not raise an exception, parsing may continue, but
     further document information should not be expected by the
     application.  Allowing the parser to continue may allow additional
     errors to be discovered in the input document.

 -- Método: ErrorHandler.fatalError (exception)

     Called when the parser encounters an error it cannot recover from;
     parsing is expected to terminate when this method returns.

 -- Método: ErrorHandler.warning (exception)

     Called when the parser presents minor warning information to the
     application.  Parsing is expected to continue when this method
     returns, and document information will continue to be passed to the
     application.  Raising an exception in this method will cause
     parsing to end.


File: python.info,  Node: LexicalHandler Objects,  Prev: ErrorHandler Objects,  Up: xml sax handler — Classes base para manipuladores de SAX

5.21.10.5 LexicalHandler Objects
................................

Optional SAX2 handler for lexical events.

This handler is used to obtain lexical information about an XML
document.  Lexical information includes information describing the
document encoding used and XML comments embedded in the document, as
well as section boundaries for the DTD and for any CDATA sections.  The
lexical handlers are used in the same manner as content handlers.

Set the LexicalHandler of an XMLReader by using the setProperty method
with the property identifier
‘'http://xml.org/sax/properties/lexical-handler'’.

 -- Método: LexicalHandler.comment (content)

     Reports a comment anywhere in the document (including the DTD and
     outside the document element).

 -- Método: LexicalHandler.startDTD (name, public_id, system_id)

     Reports the start of the DTD declarations if the document has an
     associated DTD.

 -- Método: LexicalHandler.endDTD ()

     Reports the end of DTD declaration.

 -- Método: LexicalHandler.startCDATA ()

     Reports the start of a CDATA marked section.

     The contents of the CDATA marked section will be reported through
     the characters handler.

 -- Método: LexicalHandler.endCDATA ()

     Reports the end of a CDATA marked section.


File: python.info,  Node: xml sax saxutils — Utilitários de SAX,  Next: xml sax xmlreader — Interface for XML parsers,  Prev: xml sax handler — Classes base para manipuladores de SAX,  Up: Ferramentas de Processamento de Markup Estruturado

5.21.11 ‘xml.sax.saxutils’ — Utilitários de SAX
-----------------------------------------------

'Código-fonte:' Lib/xml/sax/saxutils.py(1)

__________________________________________________________________

O módulo *note xml.sax.saxutils: 12b. contém uma série de classes e
funções que são comumente úteis ao criar aplicações SAX, seja em uso
direto ou como classes base.

 -- Função: xml.sax.saxutils.escape (data, entities={})

     Escapa ‘'&'’, ‘'<'’ e ‘'>'’ em uma string de dados.

     Você pode escapar outras strings de dados passando um dicionário
     como o parâmetro opcional 'entities'.  As chaves e os valores devem
     ser strings; cada chave será substituída pelo seu valor
     correspondente.  Os caracteres ‘'&'’, ‘'<'’ e ‘'>'’ são sempre
     escapados, mesmo que 'entities' seja fornecido.

          Nota: Esta função deve ser usada apenas para escapar
          caracteres que não podem ser usados diretamente em XML. Não a
          utilize como uma função geral de tradução de strings.

 -- Função: xml.sax.saxutils.unescape (data, entities={})

     Remove escape de ‘'&amp;'’, ‘'&lt;'’ e ‘'&gt;'’ em uma string de
     dados.

     Você pode remover escape de outras strings de dados passando um
     dicionário como o parâmetro opcional 'entities'.  As chaves e os
     valores devem ser strings; cada chave será substituída pelo seu
     valor correspondente.  ‘'&amp;'’, ‘'&lt;'’ e ‘'&gt;'’ têm sempre o
     escape removido, mesmo que 'entities' seja fornecido.

 -- Função: xml.sax.saxutils.quoteattr (data, entities={})

     Semelhante a *note escape(): 3aca, mas também prepara 'data' para
     ser usado como um valor de atributo.  O valor de retorno é uma
     versão entre aspas de 'data' com quaisquer substituições adicionais
     necessárias.  *note quoteattr(): 3acc. selecionará um caractere de
     aspas com base no conteúdo de 'data', tentando evitar a codificação
     de quaisquer caracteres de aspas na string.  Se já houver
     caracteres de aspas simples e duplas em 'data', os caracteres de
     aspas duplas serão codificados e 'data' será colocado entre aspas
     duplas.  A string resultante pode ser usada diretamente como um
     valor de atributo:

          >>> print("<element attr=%s>" % quoteattr("ab ' cd \" ef"))
          <element attr="ab ' cd &quot; ef">

     Esta função é útil ao gerar valores de atributos para HTML ou
     qualquer SGML usando a sintaxe concreta de referência.

 -- Classe: xml.sax.saxutils.XMLGenerator (out=None,
          encoding='iso-8859-1', short_empty_elements=False)

     Esta classe implementa a interface *note ContentHandler: 3a7e.
     escrevendo eventos SAX de volta em um documento XML. Em outras
     palavras, usar um *note XMLGenerator: 3acd. como manipulador de
     conteúdo reproduzirá o documento original que está sendo analisado.
     'out' deve ser um objeto arquivo ou similar, cujo padrão é
     'sys.stdout'.  'encoding' é a codificação do fluxo de saída, cujo
     padrão é ‘'iso-8859-1'’.  'short_empty_elements' controla a
     formatação de elementos sem conteúdo: se ‘False’ (o padrão), eles
     são emitidos como um par de tags de início/fim; se definido como
     ‘True’, eles são emitidos como uma única tag autofechada.

     Alterado na versão 3.2: Foi adicionado o parâmetro
     'short_empty_elements'.

 -- Classe: xml.sax.saxutils.XMLFilterBase (base)

     Esta classe foi projetada para ficar entre um *note XMLReader:
     3a81. e os manipuladores de eventos da aplicação cliente.  Por
     padrão, ela não faz nada além de passar requisições para o leitor e
     eventos para os manipuladores sem modificações, mas subclasses
     podem substituir métodos específicos para modificar o fluxo de
     eventos ou as requisições de configuração à medida que passam.

 -- Função: xml.sax.saxutils.prepare_input_source (source, base='')

     Esta função recebe uma fonte de entrada e uma URL base opcional e
     retorna um objeto *note InputSource: eca. totalmente resolvido,
     pronto para leitura.  A fonte de entrada pode ser fornecida como
     uma string, um objeto arquivo ou similar ou um objeto *note
     InputSource: eca.; os analisadores usarão esta função para
     implementar o argumento polimórfico 'source' em seu método *note
     parse(): 3ad0.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/xml/sax/saxutils.py


File: python.info,  Node: xml sax xmlreader — Interface for XML parsers,  Next: xml parsers expat — Fast XML parsing using Expat,  Prev: xml sax saxutils — Utilitários de SAX,  Up: Ferramentas de Processamento de Markup Estruturado

5.21.12 ‘xml.sax.xmlreader’ — Interface for XML parsers
-------------------------------------------------------

'Código-fonte:' Lib/xml/sax/xmlreader.py(1)

__________________________________________________________________

SAX parsers implement the *note XMLReader: 3a81. interface.  They are
implemented in a Python module, which must provide a function
‘create_parser()’.  This function is invoked by *note
xml.sax.make_parser(): 1bb3. with no arguments to create a new parser
object.

 -- Classe: xml.sax.xmlreader.XMLReader

     Base class which can be inherited by SAX parsers.

 -- Classe: xml.sax.xmlreader.IncrementalParser

     In some cases, it is desirable not to parse an input source at
     once, but to feed chunks of the document as they get available.
     Note that the reader will normally not read the entire file, but
     read it in chunks as well; still ‘parse()’ won’t return until the
     entire document is processed.  So these interfaces should be used
     if the blocking behaviour of ‘parse()’ is not desirable.

     When the parser is instantiated it is ready to begin accepting data
     from the feed method immediately.  After parsing has been finished
     with a call to close the reset method must be called to make the
     parser ready to accept new data, either from feed or using the
     parse method.

     Note that these methods must 'not' be called during parsing, that
     is, after parse has been called and before it returns.

     By default, the class also implements the parse method of the
     XMLReader interface using the feed, close and reset methods of the
     IncrementalParser interface as a convenience to SAX 2.0 driver
     writers.

 -- Classe: xml.sax.xmlreader.Locator

     Interface for associating a SAX event with a document location.  A
     locator object will return valid results only during calls to
     DocumentHandler methods; at any other time, the results are
     unpredictable.  If information is not available, methods may return
     ‘None’.

 -- Classe: xml.sax.xmlreader.InputSource (system_id=None)

     Encapsulation of the information needed by the *note XMLReader:
     3a81. to read entities.

     This class may include information about the public identifier,
     system identifier, byte stream (possibly with character encoding
     information) and/or the character stream of an entity.

     Applications will create objects of this class for use in the *note
     XMLReader.parse(): 3ad0. method and for returning from
     EntityResolver.resolveEntity.

     An *note InputSource: eca. belongs to the application, the *note
     XMLReader: 3a81. is not allowed to modify *note InputSource: eca.
     objects passed to it from the application, although it may make
     copies and modify those.

 -- Classe: xml.sax.xmlreader.AttributesImpl (attrs)

     This is an implementation of the ‘Attributes’ interface (see
     section *note The Attributes Interface: 3aad.).  This is a
     dictionary-like object which represents the element attributes in a
     ‘startElement()’ call.  In addition to the most useful dictionary
     operations, it supports a number of other methods as described by
     the interface.  Objects of this class should be instantiated by
     readers; 'attrs' must be a dictionary-like object containing a
     mapping from attribute names to attribute values.

 -- Classe: xml.sax.xmlreader.AttributesNSImpl (attrs, qnames)

     Namespace-aware variant of *note AttributesImpl: 3ad5, which will
     be passed to ‘startElementNS()’.  It is derived from *note
     AttributesImpl: 3ad5, but understands attribute names as two-tuples
     of 'namespaceURI' and 'localname'.  In addition, it provides a
     number of methods expecting qualified names as they appear in the
     original document.  This class implements the ‘AttributesNS’
     interface (see section *note The AttributesNS Interface: 3aaf.).

* Menu:

* XMLReader Objects::
* IncrementalParser Objects::
* Locator Objects::
* InputSource Objects::
* The Attributes Interface::
* The AttributesNS Interface::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/xml/sax/xmlreader.py


File: python.info,  Node: XMLReader Objects,  Next: IncrementalParser Objects,  Up: xml sax xmlreader — Interface for XML parsers

5.21.12.1 XMLReader Objects
...........................

The *note XMLReader: 3a81. interface supports the following methods:

 -- Método: XMLReader.parse (source)

     Process an input source, producing SAX events.  The 'source' object
     can be a system identifier (a string identifying the input source –
     typically a file name or a URL), a *note pathlib.Path: 229. or
     *note path-like: 2a0. object, or an *note InputSource: eca. object.
     When *note parse(): 3ad0. returns, the input is completely
     processed, and the parser object can be discarded or reset.

     Alterado na versão 3.5: Added support of character streams.

     Alterado na versão 3.8: Added support of path-like objects.

 -- Método: XMLReader.getContentHandler ()

     Return the current *note ContentHandler: 3a7e.

 -- Método: XMLReader.setContentHandler (handler)

     Set the current *note ContentHandler: 3a7e.  If no *note
     ContentHandler: 3a7e. is set, content events will be discarded.

 -- Método: XMLReader.getDTDHandler ()

     Return the current *note DTDHandler: 3a99.

 -- Método: XMLReader.setDTDHandler (handler)

     Set the current *note DTDHandler: 3a99.  If no *note DTDHandler:
     3a99. is set, DTD events will be discarded.

 -- Método: XMLReader.getEntityResolver ()

     Return the current *note EntityResolver: 3a9a.

 -- Método: XMLReader.setEntityResolver (handler)

     Set the current *note EntityResolver: 3a9a.  If no *note
     EntityResolver: 3a9a. is set, attempts to resolve an external
     entity will result in opening the system identifier for the entity,
     and fail if it is not available.

 -- Método: XMLReader.getErrorHandler ()

     Return the current *note ErrorHandler: 3a8c.

 -- Método: XMLReader.setErrorHandler (handler)

     Set the current error handler.  If no *note ErrorHandler: 3a8c. is
     set, errors will be raised as exceptions, and warnings will be
     printed.

 -- Método: XMLReader.setLocale (locale)

     Allow an application to set the locale for errors and warnings.

     SAX parsers are not required to provide localization for errors and
     warnings; if they cannot support the requested locale, however,
     they must raise a SAX exception.  Applications may request a locale
     change in the middle of a parse.

 -- Método: XMLReader.getFeature (featurename)

     Return the current setting for feature 'featurename'.  If the
     feature is not recognized, ‘SAXNotRecognizedException’ is raised.
     The well-known featurenames are listed in the module *note
     xml.sax.handler: 12a.

 -- Método: XMLReader.setFeature (featurename, value)

     Set the 'featurename' to 'value'.  If the feature is not
     recognized, ‘SAXNotRecognizedException’ is raised.  If the feature
     or its setting is not supported by the parser,
     'SAXNotSupportedException' is raised.

 -- Método: XMLReader.getProperty (propertyname)

     Return the current setting for property 'propertyname'.  If the
     property is not recognized, a ‘SAXNotRecognizedException’ is
     raised.  The well-known propertynames are listed in the module
     *note xml.sax.handler: 12a.

 -- Método: XMLReader.setProperty (propertyname, value)

     Set the 'propertyname' to 'value'.  If the property is not
     recognized, ‘SAXNotRecognizedException’ is raised.  If the property
     or its setting is not supported by the parser,
     'SAXNotSupportedException' is raised.


File: python.info,  Node: IncrementalParser Objects,  Next: Locator Objects,  Prev: XMLReader Objects,  Up: xml sax xmlreader — Interface for XML parsers

5.21.12.2 IncrementalParser Objects
...................................

Instances of *note IncrementalParser: 3ad4. offer the following
additional methods:

 -- Método: IncrementalParser.feed (data)

     Process a chunk of 'data'.

 -- Método: IncrementalParser.close ()

     Assume the end of the document.  That will check well-formedness
     conditions that can be checked only at the end, invoke handlers,
     and may clean up resources allocated during parsing.

 -- Método: IncrementalParser.reset ()

     This method is called after close has been called to reset the
     parser so that it is ready to parse new documents.  The results of
     calling parse or feed after close without calling reset are
     undefined.


File: python.info,  Node: Locator Objects,  Next: InputSource Objects,  Prev: IncrementalParser Objects,  Up: xml sax xmlreader — Interface for XML parsers

5.21.12.3 Locator Objects
.........................

Instances of *note Locator: 3a8e. provide these methods:

 -- Método: Locator.getColumnNumber ()

     Return the column number where the current event begins.

 -- Método: Locator.getLineNumber ()

     Return the line number where the current event begins.

 -- Método: Locator.getPublicId ()

     Return the public identifier for the current event.

 -- Método: Locator.getSystemId ()

     Return the system identifier for the current event.


File: python.info,  Node: InputSource Objects,  Next: The Attributes Interface,  Prev: Locator Objects,  Up: xml sax xmlreader — Interface for XML parsers

5.21.12.4 InputSource Objects
.............................

 -- Método: InputSource.setPublicId (id)

     Sets the public identifier of this *note InputSource: eca.

 -- Método: InputSource.getPublicId ()

     Returns the public identifier of this *note InputSource: eca.

 -- Método: InputSource.setSystemId (id)

     Sets the system identifier of this *note InputSource: eca.

 -- Método: InputSource.getSystemId ()

     Returns the system identifier of this *note InputSource: eca.

 -- Método: InputSource.setEncoding (encoding)

     Sets the character encoding of this *note InputSource: eca.

     The encoding must be a string acceptable for an XML encoding
     declaration (see section 4.3.3 of the XML recommendation).

     The encoding attribute of the *note InputSource: eca. is ignored if
     the *note InputSource: eca. also contains a character stream.

 -- Método: InputSource.getEncoding ()

     Obtém a codificação de caracteres deste InputSource.

 -- Método: InputSource.setByteStream (bytefile)

     Set the byte stream (a *note binary file: 1e0e.) for this input
     source.

     The SAX parser will ignore this if there is also a character stream
     specified, but it will use a byte stream in preference to opening a
     URI connection itself.

     If the application knows the character encoding of the byte stream,
     it should set it with the setEncoding method.

 -- Método: InputSource.getByteStream ()

     Get the byte stream for this input source.

     The getEncoding method will return the character encoding for this
     byte stream, or ‘None’ if unknown.

 -- Método: InputSource.setCharacterStream (charfile)

     Set the character stream (a *note text file: 1e0d.) for this input
     source.

     If there is a character stream specified, the SAX parser will
     ignore any byte stream and will not attempt to open a URI
     connection to the system identifier.

 -- Método: InputSource.getCharacterStream ()

     Get the character stream for this input source.


File: python.info,  Node: The Attributes Interface,  Next: The AttributesNS Interface,  Prev: InputSource Objects,  Up: xml sax xmlreader — Interface for XML parsers

5.21.12.5 The ‘Attributes’ Interface
....................................

‘Attributes’ objects implement a portion of the *note mapping protocol:
11fb, including the methods ‘copy()’, ‘get()’, *note __contains__():
1400, ‘items()’, ‘keys()’, and ‘values()’.  The following methods are
also provided:

 -- Método: Attributes.getLength ()

     Return the number of attributes.

 -- Método: Attributes.getNames ()

     Return the names of the attributes.

 -- Método: Attributes.getType (name)

     Returns the type of the attribute 'name', which is normally
     ‘'CDATA'’.

 -- Método: Attributes.getValue (name)

     Return the value of attribute 'name'.


File: python.info,  Node: The AttributesNS Interface,  Prev: The Attributes Interface,  Up: xml sax xmlreader — Interface for XML parsers

5.21.12.6 The ‘AttributesNS’ Interface
......................................

This interface is a subtype of the ‘Attributes’ interface (see section
*note The Attributes Interface: 3aad.).  All methods supported by that
interface are also available on ‘AttributesNS’ objects.

The following methods are also available:

 -- Método: AttributesNS.getValueByQName (name)

     Return the value for a qualified name.

 -- Método: AttributesNS.getNameByQName (name)

     Return the ‘(namespace, localname)’ pair for a qualified 'name'.

 -- Método: AttributesNS.getQNameByName (name)

     Return the qualified name for a ‘(namespace, localname)’ pair.

 -- Método: AttributesNS.getQNames ()

     Return the qualified names of all attributes.


File: python.info,  Node: xml parsers expat — Fast XML parsing using Expat,  Prev: xml sax xmlreader — Interface for XML parsers,  Up: Ferramentas de Processamento de Markup Estruturado

5.21.13 ‘xml.parsers.expat’ — Fast XML parsing using Expat
----------------------------------------------------------

__________________________________________________________________

     Nota: Se você precisar analisar dados não confiáveis ou não
     autenticados, consulte *note Segurança no XML: 3999.

O módulo *note xml.parsers.expat: 126. é uma interface Python para o
analisador XML sem validação do Expat.  O módulo fornece um único tipo
de extensão, ‘xmlparser’, que representa o estado atual de um analisador
XML. Após um objeto ‘xmlparser’ ter sido criado, vários atributos do
objeto podem ser configurados para funções manipuladoras.  Quando um
documento XML é alimentado no analisador, as funções de tratamento são
chamadas para os dados de caracteres e marcação no documento XML.

Este módulo usa o módulo ‘pyexpat’ para fornecer acesso ao analisador
sintático Expat.  O uso direto do módulo ‘pyexpat’ foi descontinuado.

Este módulo fornece uma exceção e um objeto de tipo:

 -- Exceção: xml.parsers.expat.ExpatError

     A exceção levantada quando o Expat relata um erro.  Veja a seção
     *note Exceções ExpatError: 3b09. para mais informações sobre como
     interpretar erros do Expat.

 -- Exceção: xml.parsers.expat.error

     Apelido para *note ExpatError: 12ba.

 -- Dado: xml.parsers.expat.XMLParserType

     O tipo dos valores de retorno da função *note ParserCreate(): 3b0c.

O módulo *note xml.parsers.expat: 126. contém duas funções:

 -- Função: xml.parsers.expat.ErrorString (errno)

     Retorna uma string explicativa para um determinado número de erro
     'errno'.

 -- Função: xml.parsers.expat.ParserCreate (encoding=None,
          namespace_separator=None)

     Cria e retorna um novo objeto ‘xmlparser’.  'encoding', se
     especificado, deve ser uma string que nomeia a codificação usada
     pelos dados XML. Expat não provê tantas codificações quanto Python
     e seu repertório de codificações não pode ser estendido; provê
     UTF-8, UTF-16, ISO-8859-1 (Latin1) e ASCII. Se 'encoding' (1) for
     fornecido, ele substituirá a codificação implícita ou explícita do
     documento.  Parsers created through ‘ParserCreate()’ are called
     “root” parsers, in the sense that they do not have any parent
     parser attached.  Non-root parsers are created by *note
     parser.ExternalEntityParserCreate: 15ef.

     Opcionalmente, o Expat pode fazer o processamento de espaço de
     nomes XML para você, habilitado ao fornecer um valor para
     'namespace_separator'.  O valor deve ser uma string de um
     caractere; uma exceção *note ValueError: 202. será levantada se a
     string tiver um comprimento ilegal (‘None’ é considerado o mesmo
     que omissão).  Quando o processamento de espaço de nomes estiver
     ativado, os nomes de tipos de elementos e nomes de atributos que
     pertencem a um espaço de nomes serão expandidos.  O nome do
     elemento passado para os manipuladores de elemento
     ‘StartElementHandler’ e ‘EndElementHandler’ será a concatenação do
     URI do espaço de nomes, o caractere separador do espaço de nomes e
     a parte local do nome.  Se o separador do espaço de nomes for um
     byte zero (‘chr(0)’), então o URI do espaço de nomes e a parte
     local serão concatenados sem qualquer separador.

     Por exemplo, se 'namespace_separator' for definido como um
     caractere de espaço (‘' '’) e o seguinte documento for analisado:

          <?xml version="1.0"?>
          <root xmlns    = "http://default-namespace.org/"
                xmlns:py = "http://www.python.org/ns/">
            <py:elem1 />
            <elem2 xmlns="" />
          </root>

     ‘StartElementHandler’ receberá as seguintes strings para cada
     elemento:

          http://default-namespace.org/ root
          http://www.python.org/ns/ elem1
          elem2

     Devido a limitações na biblioteca ‘Expat’ usada por ‘pyexpat’, a
     instância ‘xmlparser’ retornada só pode ser usada para analisar um
     único documento XML. Chame ‘ParserCreate’ para cada documento para
     fornecer instâncias exclusivas do analisador sintático.

Ver também
..........

Expat, analisador sintático de XML(2)

     Site do projeto Expat

* Menu:

* Objetos XMLParser: Objetos XMLParser<2>.
* Exceções ExpatError::
* Exemplo: Exemplo<10>.
* Content Model Descriptions::
* Constantes de erro de expatriados::

   ---------- Footnotes ----------

   (1) The encoding string included in XML output should conform to the
appropriate standards.  For example, “UTF-8” is valid, but “UTF8” is
not.  See
‘https://www.w3.org/TR/2006/REC-xml11-20060816/#NT-EncodingDecl’ and
‘https://www.iana.org/assignments/character-sets/character-sets.xhtml’.

   (2) http://www.libexpat.org/


File: python.info,  Node: Objetos XMLParser<2>,  Next: Exceções ExpatError,  Up: xml parsers expat — Fast XML parsing using Expat

5.21.13.1 Objetos XMLParser
...........................

‘xmlparser’ objects have the following methods:

 -- Método: xmlparser.Parse (data[, isfinal])

     Parses the contents of the string 'data', calling the appropriate
     handler functions to process the parsed data.  'isfinal' must be
     true on the final call to this method; it allows the parsing of a
     single file in fragments, not the submission of multiple files.
     'data' can be the empty string at any time.

 -- Método: xmlparser.ParseFile (file)

     Parse XML data reading from the object 'file'.  'file' only needs
     to provide the ‘read(nbytes)’ method, returning the empty string
     when there’s no more data.

 -- Método: xmlparser.SetBase (base)

     Sets the base to be used for resolving relative URIs in system
     identifiers in declarations.  Resolving relative identifiers is
     left to the application: this value will be passed through as the
     'base' argument to the *note ExternalEntityRefHandler(): 3b13,
     *note NotationDeclHandler(): 3b14, and *note
     UnparsedEntityDeclHandler(): 3b15. functions.

 -- Método: xmlparser.GetBase ()

     Returns a string containing the base set by a previous call to
     *note SetBase(): 3b12, or ‘None’ if *note SetBase(): 3b12. hasn’t
     been called.

 -- Método: xmlparser.GetInputContext ()

     Returns the input data that generated the current event as a
     string.  The data is in the encoding of the entity which contains
     the text.  When called while an event handler is not active, the
     return value is ‘None’.

 -- Método: xmlparser.ExternalEntityParserCreate (context[, encoding])

     Create a “child” parser which can be used to parse an external
     parsed entity referred to by content parsed by the parent parser.
     The 'context' parameter should be the string passed to the *note
     ExternalEntityRefHandler(): 3b13. handler function, described
     below.  The child parser is created with the *note
     ordered_attributes: 3b18. and *note specified_attributes: 3b19. set
     to the values of this parser.

 -- Método: xmlparser.SetParamEntityParsing (flag)

     Control parsing of parameter entities (including the external DTD
     subset).  Possible 'flag' values are
     ‘XML_PARAM_ENTITY_PARSING_NEVER’,
     ‘XML_PARAM_ENTITY_PARSING_UNLESS_STANDALONE’ and
     ‘XML_PARAM_ENTITY_PARSING_ALWAYS’.  Return true if setting the flag
     was successful.

 -- Método: xmlparser.UseForeignDTD ([flag])

     Calling this with a true value for 'flag' (the default) will cause
     Expat to call the *note ExternalEntityRefHandler: 3b13. with *note
     None: 675. for all arguments to allow an alternate DTD to be
     loaded.  If the document does not contain a document type
     declaration, the *note ExternalEntityRefHandler: 3b13. will still
     be called, but the *note StartDoctypeDeclHandler: 3b1c. and *note
     EndDoctypeDeclHandler: 3b1d. will not be called.

     Passing a false value for 'flag' will cancel a previous call that
     passed a true value, but otherwise has no effect.

     This method can only be called before the *note Parse(): 3b10. or
     *note ParseFile(): 3b11. methods are called; calling it after
     either of those have been called causes *note ExpatError: 12ba. to
     be raised with the *note code: 1a. attribute set to
     ‘errors.codes[errors.XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING]’.

 -- Método: xmlparser.SetReparseDeferralEnabled (enabled)

          Aviso: Calling ‘SetReparseDeferralEnabled(False)’ has security
          implications, as detailed below; please make sure to
          understand these consequences prior to using the
          ‘SetReparseDeferralEnabled’ method.

     Expat 2.6.0 introduced a security mechanism called “reparse
     deferral” where instead of causing denial of service through
     quadratic runtime from reparsing large tokens, reparsing of
     unfinished tokens is now delayed by default until a sufficient
     amount of input is reached.  Due to this delay, registered handlers
     may — depending of the sizing of input chunks pushed to Expat — no
     longer be called right after pushing new input to the parser.
     Where immediate feedback and taking over responsibility of
     protecting against denial of service from large tokens are both
     wanted, calling ‘SetReparseDeferralEnabled(False)’ disables reparse
     deferral for the current Expat parser instance, temporarily or
     altogether.  Calling ‘SetReparseDeferralEnabled(True)’ allows
     re-enabling reparse deferral.

     Note that *note SetReparseDeferralEnabled(): 272. has been
     backported to some prior releases of CPython as a security fix.
     Check for availability of *note SetReparseDeferralEnabled(): 272.
     using *note hasattr(): 4d2. if used in code running across a
     variety of Python versions.

     Adicionado na versão 3.13.

 -- Método: xmlparser.GetReparseDeferralEnabled ()

     Returns whether reparse deferral is currently enabled for the given
     Expat parser instance.

     Adicionado na versão 3.13.

‘xmlparser’ objects have the following methods to mitigate some common
XML vulnerabilities.

 -- Método: xmlparser.SetAllocTrackerActivationThreshold (threshold, /)

     Sets the number of allocated bytes of dynamic memory needed to
     activate protection against disproportionate use of RAM.

     By default, parser objects have an allocation activation threshold
     of 64 MiB, or equivalently 67,108,864 bytes.

     An *note ExpatError: 12ba. is raised if this method is called on a
     *note non-root: 3b0e. parser.  The corresponding *note lineno:
     3b1e. and *note offset: 3b1f. should not be used as they may have
     no special meaning.

     Adicionado na versão 3.13.10.

 -- Método: xmlparser.SetAllocTrackerMaximumAmplification (max_factor,
          /)

     Sets the maximum amplification factor between direct input and
     bytes of dynamic memory allocated.

     The amplification factor is calculated as ‘allocated / direct’
     while parsing, where ‘direct’ is the number of bytes read from the
     primary document in parsing and ‘allocated’ is the number of bytes
     of dynamic memory allocated in the parser hierarchy.

     The 'max_factor' value must be a non-NaN *note float: 2f7. value
     greater than or equal to 1.0.  Amplification factors greater than
     100.0 can be observed near the start of parsing even with benign
     files in practice.  In particular, the activation threshold should
     be carefully chosen to avoid false positives.

     By default, parser objects have a maximum amplification factor of
     100.0.

     An *note ExpatError: 12ba. is raised if this method is called on a
     *note non-root: 3b0e. parser or if 'max_factor' is outside the
     valid range.  The corresponding *note lineno: 3b1e. and *note
     offset: 3b1f. should not be used as they may have no special
     meaning.

          Nota: The maximum amplification factor is only considered if
          the threshold that can be adjusted by *note
          SetAllocTrackerActivationThreshold(): 15d9. is exceeded.

     Adicionado na versão 3.13.10.

‘xmlparser’ objects have the following attributes:

 -- Atributo: xmlparser.buffer_size

     The size of the buffer used when *note buffer_text: 150a. is true.
     A new buffer size can be set by assigning a new integer value to
     this attribute.  When the size is changed, the buffer will be
     flushed.

 -- Atributo: xmlparser.buffer_text

     Setting this to true causes the ‘xmlparser’ object to buffer
     textual content returned by Expat to avoid multiple calls to the
     *note CharacterDataHandler(): 3b21. callback whenever possible.
     This can improve performance substantially since Expat normally
     breaks character data into chunks at every line ending.  This
     attribute is false by default, and may be changed at any time.
     Note that when it is false, data that does not contain newlines may
     be chunked too.

 -- Atributo: xmlparser.buffer_used

     If *note buffer_text: 150a. is enabled, the number of bytes stored
     in the buffer.  These bytes represent UTF-8 encoded text.  This
     attribute has no meaningful interpretation when *note buffer_text:
     150a. is false.

 -- Atributo: xmlparser.ordered_attributes

     Setting this attribute to a non-zero integer causes the attributes
     to be reported as a list rather than a dictionary.  The attributes
     are presented in the order found in the document text.  For each
     attribute, two list entries are presented: the attribute name and
     the attribute value.  (Older versions of this module also used this
     format.)  By default, this attribute is false; it may be changed at
     any time.

 -- Atributo: xmlparser.specified_attributes

     If set to a non-zero integer, the parser will report only those
     attributes which were specified in the document instance and not
     those which were derived from attribute declarations.  Applications
     which set this need to be especially careful to use what additional
     information is available from the declarations as needed to comply
     with the standards for the behavior of XML processors.  By default,
     this attribute is false; it may be changed at any time.

The following attributes contain values relating to the most recent
error encountered by an ‘xmlparser’ object, and will only have correct
values once a call to ‘Parse()’ or ‘ParseFile()’ has raised an *note
xml.parsers.expat.ExpatError: 12ba. exception.

 -- Atributo: xmlparser.ErrorByteIndex

     Byte index at which an error occurred.

 -- Atributo: xmlparser.ErrorCode

     Numeric code specifying the problem.  This value can be passed to
     the *note ErrorString(): 3b0d. function, or compared to one of the
     constants defined in the ‘errors’ object.

 -- Atributo: xmlparser.ErrorColumnNumber

     Column number at which an error occurred.

 -- Atributo: xmlparser.ErrorLineNumber

     Line number at which an error occurred.

The following attributes contain values relating to the current parse
location in an ‘xmlparser’ object.  During a callback reporting a parse
event they indicate the location of the first of the sequence of
characters that generated the event.  When called outside of a callback,
the position indicated will be just past the last parse event
(regardless of whether there was an associated callback).

 -- Atributo: xmlparser.CurrentByteIndex

     Current byte index in the parser input.

 -- Atributo: xmlparser.CurrentColumnNumber

     Current column number in the parser input.

 -- Atributo: xmlparser.CurrentLineNumber

     Current line number in the parser input.

Here is the list of handlers that can be set.  To set a handler on an
‘xmlparser’ object 'o', use ‘o.handlername = func’.  'handlername' must
be taken from the following list, and 'func' must be a callable object
accepting the correct number of arguments.  The arguments are all
strings, unless otherwise stated.

 -- Método: xmlparser.XmlDeclHandler (version, encoding, standalone)

     Called when the XML declaration is parsed.  The XML declaration is
     the (optional) declaration of the applicable version of the XML
     recommendation, the encoding of the document text, and an optional
     “standalone” declaration.  'version' and 'encoding' will be
     strings, and 'standalone' will be ‘1’ if the document is declared
     standalone, ‘0’ if it is declared not to be standalone, or ‘-1’ if
     the standalone clause was omitted.  This is only available with
     Expat version 1.95.0 or newer.

 -- Método: xmlparser.StartDoctypeDeclHandler (doctypeName, systemId,
          publicId, has_internal_subset)

     Called when Expat begins parsing the document type declaration
     (‘<!DOCTYPE ...’).  The 'doctypeName' is provided exactly as
     presented.  The 'systemId' and 'publicId' parameters give the
     system and public identifiers if specified, or ‘None’ if omitted.
     'has_internal_subset' will be true if the document contains and
     internal document declaration subset.  This requires Expat version
     1.2 or newer.

 -- Método: xmlparser.EndDoctypeDeclHandler ()

     Called when Expat is done parsing the document type declaration.
     This requires Expat version 1.2 or newer.

 -- Método: xmlparser.ElementDeclHandler (name, model)

     Called once for each element type declaration.  'name' is the name
     of the element type, and 'model' is a representation of the content
     model.

 -- Método: xmlparser.AttlistDeclHandler (elname, attname, type,
          default, required)

     Called for each declared attribute for an element type.  If an
     attribute list declaration declares three attributes, this handler
     is called three times, once for each attribute.  'elname' is the
     name of the element to which the declaration applies and 'attname'
     is the name of the attribute declared.  The attribute type is a
     string passed as 'type'; the possible values are ‘'CDATA'’, ‘'ID'’,
     ‘'IDREF'’, … 'default' gives the default value for the attribute
     used when the attribute is not specified by the document instance,
     or ‘None’ if there is no default value (‘#IMPLIED’ values).  If the
     attribute is required to be given in the document instance,
     'required' will be true.  This requires Expat version 1.95.0 or
     newer.

 -- Método: xmlparser.StartElementHandler (name, attributes)

     Called for the start of every element.  'name' is a string
     containing the element name, and 'attributes' is the element
     attributes.  If *note ordered_attributes: 3b18. is true, this is a
     list (see *note ordered_attributes: 3b18. for a full description).
     Otherwise it’s a dictionary mapping names to values.

 -- Método: xmlparser.EndElementHandler (name)

     Called for the end of every element.

 -- Método: xmlparser.ProcessingInstructionHandler (target, data)

     Called for every processing instruction.

 -- Método: xmlparser.CharacterDataHandler (data)

     Called for character data.  This will be called for normal
     character data, CDATA marked content, and ignorable whitespace.
     Applications which must distinguish these cases can use the *note
     StartCdataSectionHandler: 3b2f, *note EndCdataSectionHandler: 3b30,
     and *note ElementDeclHandler: 15d6. callbacks to collect the
     required information.  Note that the character data may be chunked
     even if it is short and so you may receive more than one call to
     *note CharacterDataHandler(): 3b21.  Set the *note buffer_text:
     150a. instance attribute to ‘True’ to avoid that.

 -- Método: xmlparser.UnparsedEntityDeclHandler (entityName, base,
          systemId, publicId, notationName)

     Called for unparsed (NDATA) entity declarations.  This is only
     present for version 1.2 of the Expat library; for more recent
     versions, use *note EntityDeclHandler: 3b31. instead.  (The
     underlying function in the Expat library has been declared
     obsolete.)

 -- Método: xmlparser.EntityDeclHandler (entityName,
          is_parameter_entity, value, base, systemId, publicId,
          notationName)

     Called for all entity declarations.  For parameter and internal
     entities, 'value' will be a string giving the declared contents of
     the entity; this will be ‘None’ for external entities.  The
     'notationName' parameter will be ‘None’ for parsed entities, and
     the name of the notation for unparsed entities.
     'is_parameter_entity' will be true if the entity is a parameter
     entity or false for general entities (most applications only need
     to be concerned with general entities).  This is only available
     starting with version 1.95.0 of the Expat library.

 -- Método: xmlparser.NotationDeclHandler (notationName, base, systemId,
          publicId)

     Called for notation declarations.  'notationName', 'base', and
     'systemId', and 'publicId' are strings if given.  If the public
     identifier is omitted, 'publicId' will be ‘None’.

 -- Método: xmlparser.StartNamespaceDeclHandler (prefix, uri)

     Called when an element contains a namespace declaration.  Namespace
     declarations are processed before the *note StartElementHandler:
     3b2c. is called for the element on which declarations are placed.

 -- Método: xmlparser.EndNamespaceDeclHandler (prefix)

     Called when the closing tag is reached for an element that
     contained a namespace declaration.  This is called once for each
     namespace declaration on the element in the reverse of the order
     for which the *note StartNamespaceDeclHandler: 3b32. was called to
     indicate the start of each namespace declaration’s scope.  Calls to
     this handler are made after the corresponding *note
     EndElementHandler: 3b2d. for the end of the element.

 -- Método: xmlparser.CommentHandler (data)

     Called for comments.  'data' is the text of the comment, excluding
     the leading ‘'<!-’‘-'’ and trailing ‘'-’‘->'’.

 -- Método: xmlparser.StartCdataSectionHandler ()

     Called at the start of a CDATA section.  This and *note
     EndCdataSectionHandler: 3b30. are needed to be able to identify the
     syntactical start and end for CDATA sections.

 -- Método: xmlparser.EndCdataSectionHandler ()

     Called at the end of a CDATA section.

 -- Método: xmlparser.DefaultHandler (data)

     Called for any characters in the XML document for which no
     applicable handler has been specified.  This means characters that
     are part of a construct which could be reported, but for which no
     handler has been supplied.

 -- Método: xmlparser.DefaultHandlerExpand (data)

     This is the same as the *note DefaultHandler(): 3b35, but doesn’t
     inhibit expansion of internal entities.  The entity reference will
     not be passed to the default handler.

 -- Método: xmlparser.NotStandaloneHandler ()

     Called if the XML document hasn’t been declared as being a
     standalone document.  This happens when there is an external subset
     or a reference to a parameter entity, but the XML declaration does
     not set standalone to ‘yes’ in an XML declaration.  If this handler
     returns ‘0’, then the parser will raise an
     ‘XML_ERROR_NOT_STANDALONE’ error.  If this handler is not set, no
     exception is raised by the parser for this condition.

 -- Método: xmlparser.ExternalEntityRefHandler (context, base, systemId,
          publicId)

          Aviso: Implementing a handler that accesses local files and/or
          the network may create a vulnerability to external entity
          attacks(1) if ‘xmlparser’ is used with user-provided XML
          content.  Please reflect on your threat model(2) before
          implementing this handler.

     Called for references to external entities.  'base' is the current
     base, as set by a previous call to *note SetBase(): 3b12.  The
     public and system identifiers, 'systemId' and 'publicId', are
     strings if given; if the public identifier is not given, 'publicId'
     will be ‘None’.  The 'context' value is opaque and should only be
     used as described below.

     For external entities to be parsed, this handler must be
     implemented.  It is responsible for creating the sub-parser using
     ‘ExternalEntityParserCreate(context)’, initializing it with the
     appropriate callbacks, and parsing the entity.  This handler should
     return an integer; if it returns ‘0’, the parser will raise an
     ‘XML_ERROR_EXTERNAL_ENTITY_HANDLING’ error, otherwise parsing will
     continue.

     If this handler is not provided, external entities are reported by
     the *note DefaultHandler: 3b35. callback, if provided.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/XML_external_entity_attack

   (2) https://en.wikipedia.org/wiki/Threat_model


File: python.info,  Node: Exceções ExpatError,  Next: Exemplo<10>,  Prev: Objetos XMLParser<2>,  Up: xml parsers expat — Fast XML parsing using Expat

5.21.13.2 Exceções ExpatError
.............................

*note ExpatError: 12ba. exceptions have a number of interesting
attributes:

 -- Atributo: ExpatError.code

     Expat’s internal error number for the specific error.  The *note
     errors.messages: 3b3a. dictionary maps these error numbers to
     Expat’s error messages.  For example:

          from xml.parsers.expat import ParserCreate, ExpatError, errors

          p = ParserCreate()
          try:
              p.Parse(some_xml_document)
          except ExpatError as err:
              print("Error:", errors.messages[err.code])

     The *note errors: 127. module also provides error message constants
     and a dictionary *note codes: 3b3b. mapping these messages back to
     the error codes, see below.

 -- Atributo: ExpatError.lineno

     Line number on which the error was detected.  The first line is
     numbered ‘1’.

 -- Atributo: ExpatError.offset

     Character offset into the line where the error occurred.  The first
     column is numbered ‘0’.


File: python.info,  Node: Exemplo<10>,  Next: Content Model Descriptions,  Prev: Exceções ExpatError,  Up: xml parsers expat — Fast XML parsing using Expat

5.21.13.3 Exemplo
.................

The following program defines three handlers that just print out their
arguments.

     import xml.parsers.expat

     # 3 handler functions
     def start_element(name, attrs):
         print('Start element:', name, attrs)
     def end_element(name):
         print('End element:', name)
     def char_data(data):
         print('Character data:', repr(data))

     p = xml.parsers.expat.ParserCreate()

     p.StartElementHandler = start_element
     p.EndElementHandler = end_element
     p.CharacterDataHandler = char_data

     p.Parse("""<?xml version="1.0"?>
     <parent id="top"><child1 name="paul">Text goes here</child1>
     <child2 name="fred">More text</child2>
     </parent>""", 1)

The output from this program is:

     Start element: parent {'id': 'top'}
     Start element: child1 {'name': 'paul'}
     Character data: 'Text goes here'
     End element: child1
     Character data: '\n'
     Start element: child2 {'name': 'fred'}
     Character data: 'More text'
     End element: child2
     Character data: '\n'
     End element: parent


File: python.info,  Node: Content Model Descriptions,  Next: Constantes de erro de expatriados,  Prev: Exemplo<10>,  Up: xml parsers expat — Fast XML parsing using Expat

5.21.13.4 Content Model Descriptions
....................................

Content models are described using nested tuples.  Each tuple contains
four values: the type, the quantifier, the name, and a tuple of
children.  Children are simply additional content model descriptions.

The values of the first two fields are constants defined in the *note
xml.parsers.expat.model: 128. module.  These constants can be collected
in two groups: the model type group and the quantifier group.

The constants in the model type group are:

 -- Dado: xml.parsers.expat.model.XML_CTYPE_ANY

     The element named by the model name was declared to have a content
     model of ‘ANY’.

 -- Dado: xml.parsers.expat.model.XML_CTYPE_CHOICE

     The named element allows a choice from a number of options; this is
     used for content models such as ‘(A | B | C)’.

 -- Dado: xml.parsers.expat.model.XML_CTYPE_EMPTY

     Elementos declarados como ‘EMPTY’ têm este tipo de modelo.

 -- Dado: xml.parsers.expat.model.XML_CTYPE_MIXED

 -- Dado: xml.parsers.expat.model.XML_CTYPE_NAME

 -- Dado: xml.parsers.expat.model.XML_CTYPE_SEQ

     Models which represent a series of models which follow one after
     the other are indicated with this model type.  This is used for
     models such as ‘(A, B, C)’.

The constants in the quantifier group are:

 -- Dado: xml.parsers.expat.model.XML_CQUANT_NONE

     No modifier is given, so it can appear exactly once, as for ‘A’.

 -- Dado: xml.parsers.expat.model.XML_CQUANT_OPT

     The model is optional: it can appear once or not at all, as for
     ‘A?’.

 -- Dado: xml.parsers.expat.model.XML_CQUANT_PLUS

     The model must occur one or more times (like ‘A+’).

 -- Dado: xml.parsers.expat.model.XML_CQUANT_REP

     The model must occur zero or more times, as for ‘A*’.


File: python.info,  Node: Constantes de erro de expatriados,  Prev: Content Model Descriptions,  Up: xml parsers expat — Fast XML parsing using Expat

5.21.13.5 Constantes de erro de expatriados
...........................................

The following constants are provided in the *note
xml.parsers.expat.errors: 127. module.  These constants are useful in
interpreting some of the attributes of the ‘ExpatError’ exception
objects raised when an error has occurred.  Since for backwards
compatibility reasons, the constants’ value is the error 'message' and
not the numeric error 'code', you do this by comparing its *note code:
1a. attribute with ‘errors.codes[errors.XML_ERROR_CONSTANT_NAME]’.

The ‘errors’ module has the following attributes:

 -- Dado: xml.parsers.expat.errors.codes

     A dictionary mapping string descriptions to their error codes.

     Adicionado na versão 3.2.

 -- Dado: xml.parsers.expat.errors.messages

     A dictionary mapping numeric error codes to their string
     descriptions.

     Adicionado na versão 3.2.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_ASYNC_ENTITY

 -- Dado:
          xml.parsers.expat.errors.XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF

     An entity reference in an attribute value referred to an external
     entity instead of an internal entity.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_BAD_CHAR_REF

     A character reference referred to a character which is illegal in
     XML (for example, character ‘0’, or ‘‘&#0;’’).

 -- Dado: xml.parsers.expat.errors.XML_ERROR_BINARY_ENTITY_REF

     An entity reference referred to an entity which was declared with a
     notation, so cannot be parsed.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_DUPLICATE_ATTRIBUTE

     An attribute was used more than once in a start tag.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_INCORRECT_ENCODING

 -- Dado: xml.parsers.expat.errors.XML_ERROR_INVALID_TOKEN

     Raised when an input byte could not properly be assigned to a
     character; for example, a NUL byte (value ‘0’) in a UTF-8 input
     stream.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_JUNK_AFTER_DOC_ELEMENT

     Something other than whitespace occurred after the document
     element.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_MISPLACED_XML_PI

     An XML declaration was found somewhere other than the start of the
     input data.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_NO_ELEMENTS

     The document contains no elements (XML requires all documents to
     contain exactly one top-level element)..

 -- Dado: xml.parsers.expat.errors.XML_ERROR_NO_MEMORY

     Expat was not able to allocate memory internally.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_PARAM_ENTITY_REF

     A parameter entity reference was found where it was not allowed.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_PARTIAL_CHAR

     An incomplete character was found in the input.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_RECURSIVE_ENTITY_REF

     An entity reference contained another reference to the same entity;
     possibly via a different name, and possibly indirectly.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_SYNTAX

     Some unspecified syntax error was encountered.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_TAG_MISMATCH

     An end tag did not match the innermost open start tag.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_UNCLOSED_TOKEN

     Some token (such as a start tag) was not closed before the end of
     the stream or the next token was encountered.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_UNDEFINED_ENTITY

     A reference was made to an entity which was not defined.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_UNKNOWN_ENCODING

     The document encoding is not supported by Expat.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_UNCLOSED_CDATA_SECTION

     A CDATA marked section was not closed.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_EXTERNAL_ENTITY_HANDLING

 -- Dado: xml.parsers.expat.errors.XML_ERROR_NOT_STANDALONE

     The parser determined that the document was not “standalone” though
     it declared itself to be in the XML declaration, and the
     ‘NotStandaloneHandler’ was set and returned ‘0’.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_UNEXPECTED_STATE

 -- Dado: xml.parsers.expat.errors.XML_ERROR_ENTITY_DECLARED_IN_PE

 -- Dado: xml.parsers.expat.errors.XML_ERROR_FEATURE_REQUIRES_XML_DTD

     An operation was requested that requires DTD support to be compiled
     in, but Expat was configured without DTD support.  This should
     never be reported by a standard build of the *note
     xml.parsers.expat: 126. module.

 -- Dado:
          xml.parsers.expat.errors.XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING

     A behavioral change was requested after parsing started that can
     only be changed before parsing has started.  This is (currently)
     only raised by ‘UseForeignDTD()’.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_UNBOUND_PREFIX

     An undeclared prefix was found when namespace processing was
     enabled.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_UNDECLARING_PREFIX

     The document attempted to remove the namespace declaration
     associated with a prefix.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_INCOMPLETE_PE

     A parameter entity contained incomplete markup.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_XML_DECL

     The document contained no document element at all.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_TEXT_DECL

     There was an error parsing a text declaration in an external
     entity.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_PUBLICID

     Characters were found in the public id that are not allowed.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_SUSPENDED

     The requested operation was made on a suspended parser, but isn’t
     allowed.  This includes attempts to provide additional input or to
     stop the parser.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_NOT_SUSPENDED

     An attempt to resume the parser was made when the parser had not
     been suspended.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_ABORTED

     This should not be reported to Python applications.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_FINISHED

     The requested operation was made on a parser which was finished
     parsing input, but isn’t allowed.  This includes attempts to
     provide additional input or to stop the parser.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_SUSPEND_PE

 -- Dado: xml.parsers.expat.errors.XML_ERROR_RESERVED_PREFIX_XML

     An attempt was made to undeclare reserved namespace prefix ‘xml’ or
     to bind it to another namespace URI.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_RESERVED_PREFIX_XMLNS

     An attempt was made to declare or undeclare reserved namespace
     prefix ‘xmlns’.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_RESERVED_NAMESPACE_URI

     An attempt was made to bind the URI of one the reserved namespace
     prefixes ‘xml’ and ‘xmlns’ to another namespace prefix.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_INVALID_ARGUMENT

     This should not be reported to Python applications.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_NO_BUFFER

     This should not be reported to Python applications.

 -- Dado: xml.parsers.expat.errors.XML_ERROR_AMPLIFICATION_LIMIT_BREACH

     The limit on input amplification factor (from DTD and entities) has
     been breached.


File: python.info,  Node: Protocolos de Internet e Suporte,  Next: Serviços Multimídia,  Prev: Ferramentas de Processamento de Markup Estruturado,  Up: A Biblioteca Padrão do Python

5.22 Protocolos de Internet e Suporte
=====================================

Os módulos descritos neste capítulo implementam protocolos de internet e
suporte para tecnologia relacionada.  Todos eles são implementados em
Python.  A maioria desses módulos requer a presença do módulo dependente
do sistema *note socket: cc, que atualmente é suportado na maioria das
plataformas populares.  Segue uma visão geral:

* Menu:

* webbrowser — Controlador de navegador web conveniente::
* wsgiref — Implementação de referência e utilitários WSGI::
* urllib — Módulos de manipulação de URL::
* urllib.request — Biblioteca extensível para abrir URLs: urllib request — Biblioteca extensível para abrir URLs.
* urllib.response — Response classes used by urllib: urllib response — Response classes used by urllib.
* urllib.parse — Analisa URLs para componentes: urllib parse — Analisa URLs para componentes.
* urllib.error — Classes de exceção levantadas por urllib.request: urllib error — Classes de exceção levantadas por urllib request.
* urllib.robotparser — Analisador sintático de robots.txt: urllib robotparser — Analisador sintático de robots txt.
* http — módulos HTTP::
* http.client — HTTP protocol client: http client — HTTP protocol client.
* ftplib — FTP protocol client::
* poplib — Cliente de protocolo POP3::
* imaplib — IMAP4 protocol client::
* smtplib — Cliente de protocolo SMTP::
* uuid — Objetos UUID conforme RFC 4122::
* socketserver — Um framework para servidores de rede::
* http.server — HTTP servers: http server — HTTP servers.
* http.cookies — HTTP state management: http cookies — HTTP state management.
* http.cookiejar — Cookie handling for HTTP clients: http cookiejar — Cookie handling for HTTP clients.
* xmlrpc — Módulos de servidor e cliente XMLRPC::
* xmlrpc.client — Cliente XML-RPC: xmlrpc client — Cliente XML-RPC.
* xmlrpc.server — Servidores XML-RPC básicos: xmlrpc server — Servidores XML-RPC básicos.
* ipaddress — Biblioteca de manipulação de IPv4/IPv6::


File: python.info,  Node: webbrowser — Controlador de navegador web conveniente,  Next: wsgiref — Implementação de referência e utilitários WSGI,  Up: Protocolos de Internet e Suporte

5.22.1 ‘webbrowser’ — Controlador de navegador web conveniente
--------------------------------------------------------------

'Código-fonte:' Lib/webbrowser.py(1)

__________________________________________________________________

O módulo *note webbrowser: 115. fornece uma interface de alto nível para
permitir a exibição de documentos baseados na web para os usuários.  Na
maioria das circunstâncias, simplesmente chamar a função *note open():
3b73. deste módulo fará a coisa certa.

No Unix, navegadores gráficos são preferidos no X11, mas navegadores em
modo texto serão usados se navegadores gráficos não estiverem
disponíveis ou um display X11 não estiver disponível.  Se navegadores em
modo texto forem usados, o processo de chamada será bloqueado até que o
usuário saia do navegador.

Se a variável de ambiente ‘BROWSER’ existir, ela será interpretada como
a lista separada por *note os.pathsep: 1ecc. de navegadores a serem
tentados antes dos padrões da plataforma.  Quando o valor de uma parte
da lista contém a string ‘%s’, então ela é interpretada como uma linha
de comando literal do navegador a ser usada com o argumento URL
substituído por ‘%s’; se a parte não contiver ‘%s’, ela será
simplesmente interpretada como o nome do navegador a ser iniciado.  (2)

Para plataformas não-Unix, ou quando um navegador remoto estiver
disponível no Unix, o processo de controle não esperará que o usuário
termine de usar o navegador, mas permitirá que o navegador remoto
mantenha suas próprias janelas na tela.  Se os navegadores remotos não
estiverem disponíveis no Unix, o processo de controle iniciará um novo
navegador e aguardará.

No iOS, a variável de ambiente ‘BROWSER’, bem como quaisquer argumentos
que controlem direitos autorais, preferência do navegador e criação de
nova aba/janela serão ignorados.  As páginas web 'sempre' serão abertas
no navegador preferido do usuário, em uma nova aba, com o navegador
sendo trazido para o primeiro plano.  O uso do módulo *note webbrowser:
115. no iOS requer o módulo *note ctypes: 2a.  Se *note ctypes: 2a. não
estiver disponível, as chamadas para *note open(): 3b73. falharão.

* Menu:

* Interface de linha de comando: Interface de linha de comando<6>.
* Objetos controladores de navegador::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/webbrowser.py

   (2) Executáveis nomeados aqui sem um caminho completo serão
pesquisados nos diretórios fornecidos na variável de ambiente ‘PATH’.


File: python.info,  Node: Interface de linha de comando<6>,  Next: Objetos controladores de navegador,  Up: webbrowser — Controlador de navegador web conveniente

5.22.1.1 Interface de linha de comando
......................................

O script ‘webbrowser’ pode ser usado como uma interface de linha de
comando para o módulo.  Ele aceita uma URL como argumento.  Ele aceita
os seguintes parâmetros opcionais:

 -- Option: -n, --new-window

     Abre a URL em uma nova janela do navegador, se possível.

 -- Option: -t, --new-tab

     Abre a URL em uma nova aba do navegador.

As opções são, naturalmente, mutuamente exclusivas.  Exemplo de uso:

     python -m webbrowser -t "https://www.python.org"

*note Disponibilidade: 1ed8.: not WASI, not Android.

A seguinte exceção é definida:

 -- Exceção: webbrowser.Error

     Exceção levantada quando ocorre um erro de controle do navegador.

As seguintes funções estão definidas:

 -- Função: webbrowser.open (url, new=0, autoraise=True)

     Exibe 'url' usando o navegador padrão.  Se 'new' for 0, o 'url'
     será aberto na mesma janela do navegador, se possível.  Se 'new'
     for 1, uma nova janela do navegador será aberta, se possível.  Se
     'new' for 2, uma nova página do navegador (“aba” ou “guia”) será
     aberta, se possível.  Se 'autoraise' for ‘True’, a janela será
     levantada, se possível (observe que, em muitos gerenciadores de
     janelas, isso ocorrerá independentemente da configuração dessa
     variável).

     Retorna ‘True’ se um navegador foi iniciado com sucesso, ‘False’
     caso contrário.

     Note que em algumas plataformas, tentar abrir um nome de arquivo
     usando esta função pode funcionar e iniciar o programa associado do
     sistema operacional.  No entanto, isso não é suportado nem
     portátil.

     Levanta um *note evento de auditoria: 19fa. ‘webbrowser.open’ com o
     argumento ‘url’.

 -- Função: webbrowser.open_new (url)

     Abre 'url' em uma nova janela do navegador padrão, se possível;
     caso contrário, abre 'url' na única janela do navegador.

     Retorna ‘True’ se um navegador foi iniciado com sucesso, ‘False’
     caso contrário.

 -- Função: webbrowser.open_new_tab (url)

     Abre 'url' em uma nova página (“aba” ou “guia”) do navegador
     padrão, se possível, caso contrário, equivalente a *note
     open_new(): 3b7b.

     Retorna ‘True’ se um navegador foi iniciado com sucesso, ‘False’
     caso contrário.

 -- Função: webbrowser.get (using=None)

     Retorna um objeto controlador para o tipo de navegador 'using'.  Se
     'using' for ‘None’, retorna um controlador para um navegador padrão
     apropriado para o ambiente do chamador.

 -- Função: webbrowser.register (name, constructor, instance=None, *,
          preferred=False)

     Registra o tipo de navegador 'name'.  Uma vez que um tipo de
     navegador é registrado, a função *note get(): 3b7d. pode retornar
     um controlador para esse tipo de navegador.  Se 'instance' não for
     fornecido, ou for ‘None’, 'constructor' será chamado sem parâmetros
     para criar uma instância quando necessário.  Se 'instance' for
     fornecido, 'constructor' nunca será chamado, e pode ser ‘None’.

     Definir 'preferred' como ‘True’ torna este navegador um resultado
     preferencial para uma chamada *note get(): 3b7d. sem argumento.
     Caso contrário, este ponto de entrada só é útil se você planeja
     definir a variável ‘BROWSER’ ou chamar *note get(): 3b7d. com um
     argumento não vazio que corresponda ao nome de um manipulador que
     você declarar.

     Alterado na versão 3.7: Parâmetro somente-nomeado 'preferred' foi
     adicionado.

Vários tipos de navegadores são predefinidos.  Esta tabela fornece os
nomes de tipos que podem ser passados para a função *note get(): 3b7d. e
as instanciações correspondentes para as classes do controlador, todas
definidas neste módulo.

Nome do tipo                 Nome da classe                                Notas
                                                                           
---------------------------------------------------------------------------------------
                                                                           
‘'mozilla'’                  ‘Mozilla('mozilla')’
                             
                                                                           
‘'firefox'’                  ‘Mozilla('mozilla')’
                             
                                                                           
‘'epiphany'’                 ‘Epiphany('epiphany')’
                             
                                                                           
‘'kfmclient'’                ‘Konqueror()’                                 (1)
                                                                           
                                                                           
‘'konqueror'’                ‘Konqueror()’                                 (1)
                                                                           
                                                                           
‘'kfm'’                      ‘Konqueror()’                                 (1)
                                                                           
                                                                           
‘'opera'’                    ‘Opera()’
                             
                                                                           
‘'links'’                    ‘GenericBrowser('links')’
                             
                                                                           
‘'elinks'’                   ‘Elinks('elinks')’
                             
                                                                           
‘'lynx'’                     ‘GenericBrowser('lynx')’
                             
                                                                           
‘'w3m'’                      ‘GenericBrowser('w3m')’
                             
                                                                           
‘'windows-default'’          ‘WindowsDefault’                              (2)
                                                                           
                                                                           
‘'macosx'’                   ‘MacOSXOSAScript('default')’                  (3)
                                                                           
                                                                           
‘'safari'’                   ‘MacOSXOSAScript('safari')’                   (3)
                                                                           
                                                                           
‘'google-chrome'’            ‘Chrome('google-chrome')’
                             
                                                                           
‘'chrome'’                   ‘Chrome('chrome')’
                             
                                                                           
‘'chromium'’                 ‘Chromium('chromium')’
                             
                                                                           
‘'chromium-browser'’         ‘Chromium('chromium-browser')’
                             
                                                                           
‘'iosbrowser'’               ‘IOSBrowser’                                  (4)
                                                                           

Notas:

  1. “Konqueror” é o gerenciador de arquivos para o ambiente de desktop
     KDE para Unix, e só faz sentido usar se estiver no KDE. Alguma
     maneira de detectar o KDE de forma confiável seria legal; a
     variável ‘KDEDIR’ não é suficiente.  Note também que o nome “kfm” é
     usado mesmo ao usar o comando ‘konqueror’ com o KDE 2 — a
     implementação seleciona a melhor estratégia para executar o
     Konqueror.

  2. Somente em plataformas Windows.

  3. Somente no macOS.

  4. Somente no iOS.

Adicionado na versão 3.2: Uma nova classe ‘MacOSXOSAScript’ foi
adicionada e é usada no Mac em vez da classe anterior ‘MacOSX’.  Isso
adiciona suporte para abrir navegadores que não estão definidos como
padrão do sistema operacional no momento.

Adicionado na versão 3.3: Foi adicionado suporte para Chrome/Chromium.

Alterado na versão 3.12: O suporte para vários navegadores obsoletos foi
removido.  Os navegadores removidos incluem Grail, Mosaic, Netscape,
Galeon, Skipstone, Iceape e Firefox versões 35 e abaixo.

Alterado na versão 3.13: Foi adicionado suporte para iOS.

Aqui estão alguns exemplos simples:

     url = 'https://docs.python.org/'

     # Abre a URL em uma nova aba, se uma janela do navegador já estiver aberta.
     webbrowser.open_new_tab(url)

     # Abre a URL em uma nova janela, aumentando a janela se possível.
     webbrowser.open_new(url)


File: python.info,  Node: Objetos controladores de navegador,  Prev: Interface de linha de comando<6>,  Up: webbrowser — Controlador de navegador web conveniente

5.22.1.2 Objetos controladores de navegador
...........................................

Os controladores de navegador fornecem o atributo *note name: 297. e os
três métodos a seguir que são paralelos às funções de conveniência em
nível de módulo:

 -- Atributo: controller.name

     Nome dependente do sistema para o navegador.

 -- Método: controller.open (url, new=0, autoraise=True)

     Exibe 'url' usando o navegador manipulado por este controlador.  Se
     'new' for 1, uma nova janela do navegador será aberta, se possível.
     Se 'new' for 2, uma nova página do navegador (“aba” ou “guia”) será
     aberta, se possível.

 -- Método: controller.open_new (url)

     Abre 'url' em uma nova janela do navegador manipulado por este
     controlador, se possível, caso contrário, abra 'url' na única
     janela do navegador.  Apelido para *note open_new(): 3b7b.

 -- Método: controller.open_new_tab (url)

     Abre 'url' em uma nova página (“aba” ou “guia”) do navegador
     manipulado por este controlador, se possível, caso contrário,
     equivalente a *note open_new(): 3b7b.


File: python.info,  Node: wsgiref — Implementação de referência e utilitários WSGI,  Next: urllib — Módulos de manipulação de URL,  Prev: webbrowser — Controlador de navegador web conveniente,  Up: Protocolos de Internet e Suporte

5.22.2 ‘wsgiref’ — Implementação de referência e utilitários WSGI
-----------------------------------------------------------------

'Código-fonte:' Lib/wsgiref(1)

__________________________________________________________________

A Interface de Gateway para Servidor Web (em inglês, Web Server Gateway
Interface - WSGI) é uma interface padrão localizada entre software de
servidores web e aplicações web escritas em Python.  Ter um interface
padrão torna mais fácil a utilização de uma aplicação que suporta WSGI
com inúmeros diferentes servidores web.

Apenas autores de servidores web e frameworks de programação necessitam
saber todos os detalhes e especificidades do design WSGI. Você não
precisa entender todos os detalhes do WSGI para apenas instalar uma
aplicação WSGI ou para escrever uma aplicação web usando um framework
existente.

*note wsgiref: 118. é uma implementação de referência da especificação
WSGI que pode ser utilizada para adicionar suporte WSGI em um servidor
web ou framework.  Ele provê utilidades para manipulação de variáveis de
ambiente WSGI e cabeçalhos de respostas, classes base para implementação
de servidores WSGI, uma demo de um servidor HTTP que serve aplicações
WSGI, tipos para verificação de tipos estáticos e uma ferramenta de
validação que confere se servidores WSGI e aplicações estão de acordo
com a especificação WSGI ( PEP 3333(2)).

Veja wsgi.readthedocs.io(3) para mais informações sobre WSGI, além de
links para tutoriais e outros recursos.

* Menu:

* wsgiref.util – Utilidades do ambiente WSGI: wsgiref util – Utilidades do ambiente WSGI.
* wsgiref.headers – Ferramentas de cabeçalho de resposta WSGI: wsgiref headers – Ferramentas de cabeçalho de resposta WSGI.
* wsgiref.simple_server – um servidor HTTP WSGI simples: wsgiref simple_server – um servidor HTTP WSGI simples.
* wsgiref.validate — Verificador de conformidade WSGI: wsgiref validate — Verificador de conformidade WSGI.
* wsgiref.handlers – classes base de servidor/gateway: wsgiref handlers – classes base de servidor/gateway.
* wsgiref.types – WSGI types for static type checking: wsgiref types – WSGI types for static type checking.
* Exemplos: Exemplos<25>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/wsgiref

   (2) https://peps.python.org/pep-3333/

   (3) https://wsgi.readthedocs.io/


File: python.info,  Node: wsgiref util – Utilidades do ambiente WSGI,  Next: wsgiref headers – Ferramentas de cabeçalho de resposta WSGI,  Up: wsgiref — Implementação de referência e utilitários WSGI

5.22.2.1 ‘wsgiref.util’ – Utilidades do ambiente WSGI
.....................................................

Este módulo fornece uma variedade de funções de utilidade para trabalhar
com ambientes WSGI. Um ambiente WSGI é um dicionário contendo variáveis
de solicitação HTTP, conforme descrito na PEP 3333(1).  Todas as funções
que recebem um parâmetro 'environ' esperam que um dicionário compatível
com WSGI seja fornecido; consulte a PEP 3333(2) para uma especificação
detalhada e *note WSGIEnvironment: 3b88. para um apelido de tipo que
pode ser usado em anotações de tipos.

 -- Função: wsgiref.util.guess_scheme (environ)

     Retorna uma sugestão sobre ‘wsgi.url_scheme’ ser “http” ou “https”
     buscando por uma variável de ambiente ‘HTTPS’ dentro do dicionário
     'environ'.  O valor de retorno é uma string.

     Esta função é útil ao criar um gateway que encapsula CGI ou um
     protocolo semelhante a CGI, como FastCGI. Normalmente, servidores
     que fornecem tais protocolos incluirão uma variável ‘HTTPS’ com um
     valor de “1”, “yes” ou “on” quando uma solicitação é recebida via
     SSL. Então, esta função retorna “https” se tal valor for
     encontrado, e “http” caso contrário.

 -- Função: wsgiref.util.request_uri (environ, include_query=True)

     Retorna o URI de solicitação completo, opcionalmente incluindo a
     string de consulta, usando o algoritmo encontrado na seção “URL
     Reconstruction” da PEP 3333(3).  Se 'include_query' for falso, a
     string de consulta não será incluída no URI resultante.

 -- Função: wsgiref.util.application_uri (environ)

     Semelhante a *note request_uri(): 3b8a, exceto que as variáveis
     ‘PATH_INFO’ e ‘QUERY_STRING’ são ignoradas.  O resultado é o URI
     base do objeto da aplicação endereçado pela solicitação.

 -- Função: wsgiref.util.shift_path_info (environ)

     Desloca um único nome de ‘PATH_INFO’ para ‘SCRIPT_NAME’ e retorna o
     nome.  O dicionário 'environ' é 'modificado' no local; use uma
     cópia se precisar manter o ‘PATH_INFO’ ou ‘SCRIPT_NAME’ original
     intacto.

     Se não houver segmentos de caminho restantes em ‘PATH_INFO’, ‘None’
     será retornado.

     Normalmente, essa rotina é usada para processar cada porção de um
     caminho de URI de solicitação, por exemplo, para tratar o caminho
     como uma série de chaves de dicionário.  Essa rotina modifica o
     ambiente passado para torná-lo adequado para invocar outra
     aplicação WSGI localizada no URI de destino.  Por exemplo, se
     houver uma aplicação WSGI em ‘/foo’, e o caminho de URI de
     solicitação for ‘/foo/bar/baz’, e a aplicação WSGI em ‘/foo’ chamar
     *note shift_path_info(): 3b8c, ele receberá a string “bar”, e o
     ambiente será atualizado para ser adequado para passar para uma
     aplicação WSGI em ‘/foo/bar’.  Ou seja, ‘SCRIPT_NAME’ mudará de
     ‘/foo’ para ‘/foo/bar’, e ‘PATH_INFO’ mudará de ‘/bar/baz’ para
     ‘/baz’.

     Quando ‘PATH_INFO’ é apenas um “/”, esta rotina retorna uma string
     vazia e acrescenta uma barra final a ‘SCRIPT_NAME’, embora
     segmentos de caminho vazios sejam normalmente ignorados, e
     ‘SCRIPT_NAME’ normalmente não termine em uma barra.  Este é um
     comportamento intencional, para garantir que uma aplicação possa
     diferenciar URIs terminando em ‘/x’ daqueles terminando em ‘/x/’ ao
     usar esta rotina para fazer travessia de objetos.

 -- Função: wsgiref.util.setup_testing_defaults (environ)

     Atualiza 'environ' com padrões triviais para fins de teste.

     Esta rotina adiciona vários parâmetros necessários para WSGI,
     incluindo ‘HTTP_HOST’, ‘SERVER_NAME’, ‘SERVER_PORT’,
     ‘REQUEST_METHOD’, ‘SCRIPT_NAME’, ‘PATH_INFO’ e todas as variáveis
     ‘wsgi.*’ definidas pela PEP 3333(4).  Ela fornece apenas valores
     padrão e não substitui nenhuma configuração existente para essas
     variáveis.

     Esta rotina tem como objetivo facilitar que testes unitários de
     servidores e aplicações WSGI configurem ambientes fictícios.  Ela
     NÃO deve ser usada por servidores ou aplicações WSGI reais, pois os
     dados são falsos!

     Exemplo de uso (veja também *note demo_app(): 3b8e. para outro
     exemplo):

          from wsgiref.util import setup_testing_defaults
          from wsgiref.simple_server import make_server

          # Uma aplicação WSGI relativamente simples. Vai exibir o dicionário
          # do ambiente após ser atualizada por setup_testing_defaults
          def simple_app(environ, start_response):
              setup_testing_defaults(environ)

              status = '200 OK'
              headers = [('Content-type', 'text/plain; charset=utf-8')]

              start_response(status, headers)

              ret = [("%s: %s\n" % (key, value)).encode("utf-8")
                     for key, value in environ.items()]
              return ret

          with make_server('', 8000, simple_app) as httpd:
              print("Serving on port 8000...")
              httpd.serve_forever()

Além das funções de ambiente acima, o módulo *note wsgiref.util: 11d.
também fornece estes utilitários diversos:

 -- Função: wsgiref.util.is_hop_by_hop (header_name)

     Retorna ‘True’ se ‘header_name’ for um cabeçalho HTTP/1.1
     “Hop-by-Hop”, conforme definido por RFC 2616(5).

 -- Classe: wsgiref.util.FileWrapper (filelike, blksize=8192)

     Uma implementação concreta do protocolo *note
     wsgiref.types.FileWrapper: 3b8f. usado para converter um objeto
     arquivo ou similar em um *note iterador: 1ac.  Os objetos
     resultantes são *note iteráveis: 1268.  Conforme o objeto é
     iterado, o parâmetro opcional 'blksize' será repetidamente passado
     para o método ‘read()’ do objeto 'filelike' para obter bytestrings
     para produzir.  Quando ‘read()’ retorna uma string de bytes vazia,
     a iteração é encerrada e não pode ser retomada.

     Se 'filelike' tiver um método ‘close()’, o objeto retornado também
     terá um método ‘close()’ e invocará o método ‘close()’ do objeto
     'filelike' quando chamado.

     Exemplo de uso:

          from io import StringIO
          from wsgiref.util import FileWrapper

          # Estamos usando um StringIO-buffer como objeto arquivo ou similar
          filelike = StringIO("This is an example file-like object"*10)
          wrapper = FileWrapper(filelike, blksize=5)

          for chunk in wrapper:
              print(chunk)

     Alterado na versão 3.11: O suporte para o método *note
     __getitem__(): 283. foi removido

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3333/

   (2) https://peps.python.org/pep-3333/

   (3) https://peps.python.org/pep-3333/

   (4) https://peps.python.org/pep-3333/

   (5) https://datatracker.ietf.org/doc/html/rfc2616.html


File: python.info,  Node: wsgiref headers – Ferramentas de cabeçalho de resposta WSGI,  Next: wsgiref simple_server – um servidor HTTP WSGI simples,  Prev: wsgiref util – Utilidades do ambiente WSGI,  Up: wsgiref — Implementação de referência e utilitários WSGI

5.22.2.2 ‘wsgiref.headers’ – Ferramentas de cabeçalho de resposta WSGI
......................................................................

Este módulo fornece uma única classe, *note Headers: ec7, para
manipulação conveniente de cabeçalhos de resposta WSGI usando uma
interface semelhante a mapeamento.

 -- Classe: wsgiref.headers.Headers ([headers])

     Cria um objeto mapeamento envolvendo 'headers', que deve ser uma
     lista de tuplas de nome/valor de cabeçalho, conforme descrito na
     PEP 3333(1).  O valor padrão de 'headers' é uma lista vazia.

     Os objetos *note Headers: ec7. oferecem suporte a operações de
     mapeamento típicas, incluindo *note __getitem__(): 283, *note
     get(): 1dd2, *note __setitem__(): 130e, *note setdefault(): 10b2,
     *note __delitem__(): 130f. e *note __contains__(): 1400.  Para cada
     um desses métodos, a chave é o nome do cabeçalho (tratado sem
     distinção entre maiúsculas e minúsculas) e o valor é o primeiro
     valor associado a esse nome de cabeçalho.  Definir um cabeçalho
     exclui quaisquer valores existentes para esse cabeçalho e, em
     seguida, adiciona um novo valor ao final da lista de cabeçalhos
     encapsulados.  A ordem existente dos cabeçalhos geralmente é
     mantida, com novos cabeçalhos adicionados ao final da lista
     encapsulada.

     Diferentemente de um dicionário, objetos *note Headers: ec7. não
     levantam um erro quando você tenta obter ou excluir uma chave que
     não está na lista de cabeçalhos encapsulados.  Obter um cabeçalho
     inexistente retorna apenas ‘None’, e excluir um cabeçalho
     inexistente não faz nada.

     Os objetos *note Headers: ec7. também oferecem suporte aos métodos
     ‘keys()’, ‘values()’ e ‘items()’.  As listas retornadas por
     ‘keys()’ e ‘items()’ podem incluir a mesma chave mais de uma vez se
     houver um cabeçalho multivalorado.  O ‘len()’ de um objeto *note
     Headers: ec7. é o mesmo que o comprimento de seus ‘items()’, que é
     o mesmo que o comprimento da lista de cabeçalhos encapsulados.  Na
     verdade, o método ‘items()’ apenas retorna uma cópia da lista de
     cabeçalhos encapsulados.

     Chamar ‘bytes()’ em um objeto *note Headers: ec7. retorna uma
     bytestring formatada adequada para transmissão como cabeçalhos de
     resposta HTTP. Cada cabeçalho é colocado em uma linha com seu
     valor, separado por dois pontos e um espaço.  Cada linha é
     terminada por um retorno de carro e uma quebra de linha, e a
     bytestring é terminada com uma linha em branco.

     Além de sua interface de mapeamento e recursos de formatação, os
     objetos *note Headers: ec7. também têm os seguintes métodos para
     consultar e adicionar cabeçalhos multivalorados e para adicionar
     cabeçalhos com parâmetros MIME:

      -- Método: get_all (name)

          Retorna uma lista de todos os valores para o cabeçalho
          nomeado.

          A lista retornada será classificada na ordem em que apareceu
          na lista de cabeçalho original ou foi adicionada a esta
          instância, e pode conter duplicatas.  Quaisquer campos
          excluídos e reinseridos são sempre anexados à lista de
          cabeçalho.  Se não houver campos com o nome fornecido, retorna
          uma lista vazia.

      -- Método: add_header (name, value, **_params)

          Adiciona um cabeçalho (possivelmente multivalorado), com
          parâmetros MIME opcionais especificados por meio de argumentos
          nomeados.

          'name' é o campo de cabeçalho a ser adicionado.  Argumentos
          nomeados podem ser usados para definir parâmetros MIME para o
          campo de cabeçalho.  Cada parâmetro deve ser uma string ou
          ‘None’.  Sublinhados em nomes de parâmetros são convertidos em
          traços, já que traços são ilegais em identificadores Python,
          mas muitos nomes de parâmetros MIME incluem traços.  Se o
          valor do parâmetro for uma string, ele será adicionado aos
          parâmetros de valor do cabeçalho no formato ‘name="value"’.
          Se for ‘None’, somente o nome do parâmetro será adicionado.
          (Isso é usado para parâmetros MIME sem um valor.)  Exemplo de
          uso:

               h.add_header('content-disposition', 'attachment', filename='bud.gif')

          O exemplo acima adicionará um cabeçalho parecido com este:

               Content-Disposition: attachment; filename="bud.gif"

     Alterado na versão 3.5: o parâmetro 'headers' é opcional.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3333/


File: python.info,  Node: wsgiref simple_server – um servidor HTTP WSGI simples,  Next: wsgiref validate — Verificador de conformidade WSGI,  Prev: wsgiref headers – Ferramentas de cabeçalho de resposta WSGI,  Up: wsgiref — Implementação de referência e utilitários WSGI

5.22.2.3 ‘wsgiref.simple_server’ – um servidor HTTP WSGI simples
................................................................

Este módulo implementa um servidor HTTP simples (com base em *note
http.server: 72.) que serve aplicações WSGI. Cada instância de servidor
serve uma única aplicação WSGI em um host e porta fornecidos.  Se você
quiser servir várias aplicações em um único host e porta, você deve
criar uma aplicação WSGI que analise ‘PATH_INFO’ para selecionar qual
aplicação invocar para cada solicitação.  (Por exemplo, usando a função
‘shift_path_info()’ de *note wsgiref.util: 11d.)

 -- Função: wsgiref.simple_server.make_server (host, port, app,
          server_class=WSGIServer, handler_class=WSGIRequestHandler)

     Cria um novo servidor WSGI escutando em 'host' e 'port', aceitando
     conexões para 'app'.  O valor de retorno é uma instância da
     'server_class' fornecida e processará solicitações usando a
     'handler_class' especificada.  'app' deve ser um objeto de
     aplicação WSGI, conforme definido pela PEP 3333(1).

     Exemplo de uso:

          from wsgiref.simple_server import make_server, demo_app

          with make_server('', 8000, demo_app) as httpd:
              print("Serving HTTP on port 8000...")

              # Responde a solicitações até o processo ser encerrado
              httpd.serve_forever()

              # Alternativa: serve uma solicitação e então sai
              httpd.handle_request()

 -- Função: wsgiref.simple_server.demo_app (environ, start_response)

     Esta função é uma aplicação WSGI pequeno, mas completo, que retorna
     uma página de texto contendo a mensagem “Hello world!” e uma lista
     dos pares chave/valor fornecidos no parâmetro 'environ'.  É útil
     para verificar se um servidor WSGI (como *note
     wsgiref.simple_server: 11b.) é capaz de executar uma aplicação WSGI
     simples corretamente.

     O chamável 'start_response' deve seguir o protocolo *note
     StartResponse: 3b95.

 -- Classe: wsgiref.simple_server.WSGIServer (server_address,
          RequestHandlerClass)

     Cria uma instância *note WSGIServer: 3b96.  'server_address' deve
     ser uma tupla ‘(host,port)’ e 'RequestHandlerClass' deve ser a
     subclasse de *note http.server.BaseHTTPRequestHandler: 110a. que
     será usada para processar solicitações.

     Normalmente você não precisa chamar esse construtor, pois a função
     *note make_server(): 3b94. pode cuidar de todos os detalhes para
     você.

     *note WSGIServer: 3b96. é uma subclasse de *note
     http.server.HTTPServer: 3b97, então todos os seus métodos (como
     ‘serve_forever()’ e ‘handle_request()’) estão disponíveis.  *note
     WSGIServer: 3b96. também fornece estes métodos específicos do WSGI:

      -- Método: set_app (application)

          Define o chamável 'application' como a aplicação WSGI que
          receberá solicitações.

      -- Método: get_app ()

          Retorna o chamável da aplicação definido atualmente.

     Normalmente, no entanto, você não precisa usar esses métodos
     adicionais, pois *note set_app(): 3b98. é normalmente chamado por
     *note make_server(): 3b94, e *note get_app(): 3b99. existe
     principalmente para o benefício de instâncias do manipulador de
     solicitações.

 -- Classe: wsgiref.simple_server.WSGIRequestHandler (request,
          client_address, server)

     Cria um manipulador HTTP para 'request' fornecido (isto é, um
     soquete), 'client_address' (uma tupla ‘(host,port)’) e 'server'
     (instância *note WSGIServer: 3b96.).

     Você não precisa criar instâncias desta classe diretamente; elas
     são criadas automaticamente conforme necessário pelos objetos *note
     WSGIServer: 3b96.  Você pode, no entanto, estender esta classe e
     fornecê-la como uma 'handler_class' para a função *note
     make_server(): 3b94.  Alguns métodos possivelmente relevantes para
     substituir em subclasses:

      -- Método: get_environ ()

          Retorna um dicionário *note WSGIEnvironment: 3b88. para uma
          solicitação.  A implementação padrão copia o conteúdo do
          atributo de dicionário ‘base_environ’ do objeto *note
          WSGIServer: 3b96. e então adiciona vários cabeçalhos derivados
          da solicitação HTTP. Cada chamada para esse método deve
          retornar um novo dicionário contendo todas as variáveis de
          ambiente CGI relevantes conforme especificado na PEP 3333(2).

      -- Método: get_stderr ()

          Retorna o objeto que deve ser usado como o fluxo
          ‘wsgi.errors’.  A implementação padrão retorna apenas
          ‘sys.stderr’.

      -- Método: handle ()

          Processa a solicitação HTTP. A implementação padrão cria uma
          instância manipuladora usando uma classe *note
          wsgiref.handlers: 119. para implementar a interface da
          aplicação WSGI.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3333/

   (2) https://peps.python.org/pep-3333/


File: python.info,  Node: wsgiref validate — Verificador de conformidade WSGI,  Next: wsgiref handlers – classes base de servidor/gateway,  Prev: wsgiref simple_server – um servidor HTTP WSGI simples,  Up: wsgiref — Implementação de referência e utilitários WSGI

5.22.2.4 ‘wsgiref.validate’ — Verificador de conformidade WSGI
..............................................................

Ao criar novos objetos de aplicação WSGI, frameworks, servidores ou
middleware, pode ser útil validar a conformidade do novo código usando
*note wsgiref.validate: 11e.  Este módulo fornece uma função que cria
objetos de aplicação WSGI que validam comunicações entre um servidor ou
gateway WSGI e um objeto de aplicação WSGI, para verificar ambos os
lados quanto à conformidade do protocolo.

Note que este utilitário não garante a conformidade completa com PEP
3333(1); uma ausência de erros deste módulo não significa
necessariamente que os erros não existam.  No entanto, se este módulo
produzir um erro, então é virtualmente certo que o servidor ou a
aplicação não está 100% em conformidade.

Este módulo é baseado no módulo ‘paste.lint’ da biblioteca “Python
Paste” de Ian Bicking.

 -- Função: wsgiref.validate.validator (application)

     Encapsula 'application' e retorna um novo objeto de aplicação WSGI.
     A aplicação retornada encaminhará todas as solicitações para a
     'application' original e verificará se tanto a 'application' quanto
     o servidor que o invoca estão em conformidade com a especificação
     WSGI e com RFC 2616(2).

     Qualquer falta de conformidade detectada resulta em uma *note
     AssertionError: 6a9. sendo levantado; note, entretanto, que a forma
     como esses erros são manipulados depende do servidor.  Por exemplo,
     *note wsgiref.simple_server: 11b. e outros servidores baseados em
     *note wsgiref.handlers: 119. (que não substituem os métodos de
     manipulação de erros para fazer outra coisa) simplesmente emitirão
     uma mensagem de que ocorreu um erro e despejarão o traceback para
     ‘sys.stderr’ ou algum outro fluxo de erro.

     Este invólucro também pode gerar saída usando o módulo *note
     warnings: 112. para indicar comportamentos que são questionáveis,
     mas que podem não ser realmente proibidos por PEP 3333(3).  A menos
     que sejam suprimidos usando opções de linha de comando do Python ou
     a API *note warnings: 112, quaisquer avisos serão gravados em
     ‘sys.stderr’ ('não' ‘wsgi.errors’, a menos que sejam o mesmo
     objeto).

     Exemplo de uso:

          from wsgiref.validate import validator
          from wsgiref.simple_server import make_server

          # Nosso objeto chamável que intencionalmente não está em
          # conformidade com o padrão, então o validador irá quebrar
          def simple_app(environ, start_response):
              status = '200 OK'  # HTTP Status
              headers = [('Content-type', 'text/plain')]  # HTTP Headers
              start_response(status, headers)

              # Isso vai quebrar porque precisamos retornar uma lista,
              # e o validador vai nos informar
              return b"Hello World"

          # Este é a aplicação encapsulada em um validador
          validator_app = validator(simple_app)

          with make_server('', 8000, validator_app) as httpd:
              print("Listening on port 8000....")
              httpd.serve_forever()

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3333/

   (2) https://datatracker.ietf.org/doc/html/rfc2616.html

   (3) https://peps.python.org/pep-3333/


File: python.info,  Node: wsgiref handlers – classes base de servidor/gateway,  Next: wsgiref types – WSGI types for static type checking,  Prev: wsgiref validate — Verificador de conformidade WSGI,  Up: wsgiref — Implementação de referência e utilitários WSGI

5.22.2.5 ‘wsgiref.handlers’ – classes base de servidor/gateway
..............................................................

Este módulo fornece classes de manipulador base para implementar
servidores e gateways WSGI. Essas classes base lidam com a maior parte
do trabalho de comunicação com uma aplicação WSGI, desde que recebam um
ambiente semelhante ao CGI, junto com fluxos de entrada, saída e erro.

 -- Classe: wsgiref.handlers.CGIHandler

     Invocação baseada em CGI via ‘sys.stdin’, ‘sys.stdout’,
     ‘sys.stderr’ e ‘os.environ’.  Isso é útil quando você tem uma
     aplicação WSGI e quer executá-lo como um script CGI. Basta invocar
     ‘CGIHandler().run(app)’, onde ‘app’ é o objeto da aplicação WSGI
     que você deseja invocar.

     Esta classe é uma subclasse de *note BaseCGIHandler: 3ba2. que
     define ‘wsgi.run_once’ como true, ‘wsgi.multithread’ como false e
     ‘wsgi.multiprocess’ como true, e sempre usa *note sys: d9. e *note
     os: a1. para obter os fluxos CGI e o ambiente necessários.

 -- Classe: wsgiref.handlers.IISCGIHandler

     Uma alternativa especializada para *note CGIHandler: 3ba1, para uso
     ao implantar no servidor web IIS da Microsoft, sem ter definido a
     opção de configuração allowPathInfo (IIS>=7) ou metabase
     allowPathInfoForScriptMappings (IIS<7).

     Por padrão, o IIS fornece um ‘PATH_INFO’ que duplica o
     ‘SCRIPT_NAME’ na frente, causando problemas para aplicações WSGI
     que desejam implementar roteamento.  Este manipulador remove
     qualquer caminho duplicado.

     O IIS pode ser configurado para passar o ‘PATH_INFO’ correto, mas
     isso causa outro bug onde ‘PATH_TRANSLATED’ está errado.
     Felizmente, essa variável raramente é usada e não é garantida pelo
     WSGI. No IIS<7, no entanto, a configuração só pode ser feita em um
     nível de vhost, afetando todos os outros mapeamentos de script,
     muitos dos quais quebram quando expostos ao bug ‘PATH_TRANSLATED’.
     Por esse motivo, o IIS<7 quase nunca é implantado com a correção
     (mesmo o IIS7 raramente a usa porque ainda não há uma UI para ela).

     Não há como o código CGI dizer se a opção foi definida, então uma
     classe de manipulador separada é fornecida.  Ela é usada da mesma
     forma que *note CGIHandler: 3ba1, ou seja, chamando
     ‘IISCGIHandler().run(app)’, onde ‘app’ é o objeto de aplicação WSGI
     que você deseja invocar.

     Adicionado na versão 3.2.

 -- Classe: wsgiref.handlers.BaseCGIHandler (stdin, stdout, stderr,
          environ, multithread=True, multiprocess=False)

     Similar to *note CGIHandler: 3ba1, but instead of using the *note
     sys: d9. and *note os: a1. modules, the CGI environment and I/O
     streams are specified explicitly.  The 'multithread' and
     'multiprocess' values are used to set the ‘wsgi.multithread’ and
     ‘wsgi.multiprocess’ flags for any applications run by the handler
     instance.

     This class is a subclass of *note SimpleHandler: 3ba4. intended for
     use with software other than HTTP “origin servers”.  If you are
     writing a gateway protocol implementation (such as CGI, FastCGI,
     SCGI, etc.)  that uses a ‘Status:’ header to send an HTTP status,
     you probably want to subclass this instead of *note SimpleHandler:
     3ba4.

 -- Classe: wsgiref.handlers.SimpleHandler (stdin, stdout, stderr,
          environ, multithread=True, multiprocess=False)

     Similar to *note BaseCGIHandler: 3ba2, but designed for use with
     HTTP origin servers.  If you are writing an HTTP server
     implementation, you will probably want to subclass this instead of
     *note BaseCGIHandler: 3ba2.

     This class is a subclass of *note BaseHandler: 1b67.  It overrides
     the ‘__init__()’, *note get_stdin(): 3ba5, *note get_stderr():
     3ba6, *note add_cgi_vars(): 3ba7, *note _write(): 3ba8, and *note
     _flush(): 3ba9. methods to support explicitly setting the
     environment and streams via the constructor.  The supplied
     environment and streams are stored in the ‘stdin’, ‘stdout’,
     ‘stderr’, and ‘environ’ attributes.

     The *note write(): cfc. method of 'stdout' should write each chunk
     in full, like *note io.BufferedIOBase: 694.

 -- Classe: wsgiref.handlers.BaseHandler

     This is an abstract base class for running WSGI applications.  Each
     instance will handle a single HTTP request, although in principle
     you could create a subclass that was reusable for multiple
     requests.

     *note BaseHandler: 1b67. instances have only one method intended
     for external use:

      -- Método: run (app)

          Run the specified WSGI application, 'app'.

     All of the other *note BaseHandler: 1b67. methods are invoked by
     this method in the process of running the application, and thus
     exist primarily to allow customizing the process.

     The following methods MUST be overridden in a subclass:

      -- Método: _write (data)

          Buffer the bytes 'data' for transmission to the client.  It’s
          okay if this method actually transmits the data; *note
          BaseHandler: 1b67. just separates write and flush operations
          for greater efficiency when the underlying system actually has
          such a distinction.

      -- Método: _flush ()

          Force buffered data to be transmitted to the client.  It’s
          okay if this method is a no-op (i.e., if *note _write(): 3ba8.
          actually sends the data).

      -- Método: get_stdin ()

          Return an object compatible with *note InputStream: 3bab.
          suitable for use as the ‘wsgi.input’ of the request currently
          being processed.

      -- Método: get_stderr ()

          Return an object compatible with *note ErrorStream: 3bac.
          suitable for use as the ‘wsgi.errors’ of the request currently
          being processed.

      -- Método: add_cgi_vars ()

          Insert CGI variables for the current request into the
          ‘environ’ attribute.

     Here are some other methods and attributes you may wish to
     override.  This list is only a summary, however, and does not
     include every method that can be overridden.  You should consult
     the docstrings and source code for additional information before
     attempting to create a customized *note BaseHandler: 1b67.
     subclass.

     Attributes and methods for customizing the WSGI environment:

      -- Atributo: wsgi_multithread

          The value to be used for the ‘wsgi.multithread’ environment
          variable.  It defaults to true in *note BaseHandler: 1b67, but
          may have a different default (or be set by the constructor) in
          the other subclasses.

      -- Atributo: wsgi_multiprocess

          The value to be used for the ‘wsgi.multiprocess’ environment
          variable.  It defaults to true in *note BaseHandler: 1b67, but
          may have a different default (or be set by the constructor) in
          the other subclasses.

      -- Atributo: wsgi_run_once

          The value to be used for the ‘wsgi.run_once’ environment
          variable.  It defaults to false in *note BaseHandler: 1b67,
          but *note CGIHandler: 3ba1. sets it to true by default.

      -- Atributo: os_environ

          The default environment variables to be included in every
          request’s WSGI environment.  By default, this is a copy of
          ‘os.environ’ at the time that *note wsgiref.handlers: 119. was
          imported, but subclasses can either create their own at the
          class or instance level.  Note that the dictionary should be
          considered read-only, since the default value is shared
          between multiple classes and instances.

      -- Atributo: server_software

          If the *note origin_server: 3bb2. attribute is set, this
          attribute’s value is used to set the default ‘SERVER_SOFTWARE’
          WSGI environment variable, and also to set a default ‘Server:’
          header in HTTP responses.  It is ignored for handlers (such as
          *note BaseCGIHandler: 3ba2. and *note CGIHandler: 3ba1.) that
          are not HTTP origin servers.

          Alterado na versão 3.3: O termo “Python” é substituído por
          termos específicos de implementação, como “CPython”, “Jython”
          etc.

      -- Método: get_scheme ()

          Return the URL scheme being used for the current request.  The
          default implementation uses the ‘guess_scheme()’ function from
          *note wsgiref.util: 11d. to guess whether the scheme should be
          “http” or “https”, based on the current request’s ‘environ’
          variables.

      -- Método: setup_environ ()

          Set the ‘environ’ attribute to a fully populated WSGI
          environment.  The default implementation uses all of the above
          methods and attributes, plus the *note get_stdin(): 3ba5,
          *note get_stderr(): 3ba6, and *note add_cgi_vars(): 3ba7.
          methods and the *note wsgi_file_wrapper: 3bb5. attribute.  It
          also inserts a ‘SERVER_SOFTWARE’ key if not present, as long
          as the *note origin_server: 3bb2. attribute is a true value
          and the *note server_software: 3bb1. attribute is set.

     Methods and attributes for customizing exception handling:

      -- Método: log_exception (exc_info)

          Log the 'exc_info' tuple in the server log.  'exc_info' is a
          ‘(type, value, traceback)’ tuple.  The default implementation
          simply writes the traceback to the request’s ‘wsgi.errors’
          stream and flushes it.  Subclasses can override this method to
          change the format or retarget the output, mail the traceback
          to an administrator, or whatever other action may be deemed
          suitable.

      -- Atributo: traceback_limit

          The maximum number of frames to include in tracebacks output
          by the default *note log_exception(): 3bb6. method.  If
          ‘None’, all frames are included.

      -- Método: error_output (environ, start_response)

          This method is a WSGI application to generate an error page
          for the user.  It is only invoked if an error occurs before
          headers are sent to the client.

          This method can access the current error using
          ‘sys.exception()’, and should pass that information to
          'start_response' when calling it (as described in the “Error
          Handling” section of PEP 3333(1)).  In particular, the
          'start_response' callable should follow the *note
          StartResponse: 3b95. protocol.

          The default implementation just uses the *note error_status:
          3bb9, *note error_headers: 3bba, and *note error_body: 3bbb.
          attributes to generate an output page.  Subclasses can
          override this to produce more dynamic error output.

          Note, however, that it’s not recommended from a security
          perspective to spit out diagnostics to any old user; ideally,
          you should have to do something special to enable diagnostic
          output, which is why the default implementation doesn’t
          include any.

      -- Atributo: error_status

          The HTTP status used for error responses.  This should be a
          status string as defined in PEP 3333(2); it defaults to a 500
          code and message.

      -- Atributo: error_headers

          The HTTP headers used for error responses.  This should be a
          list of WSGI response headers (‘(name, value)’ tuples), as
          described in PEP 3333(3).  The default list just sets the
          content type to ‘text/plain’.

      -- Atributo: error_body

          The error response body.  This should be an HTTP response body
          bytestring.  It defaults to the plain text, “A server error
          occurred.  Please contact the administrator.”

     Methods and attributes for PEP 3333(4)’s “Optional
     Platform-Specific File Handling” feature:

      -- Atributo: wsgi_file_wrapper

          A ‘wsgi.file_wrapper’ factory, compatible with *note
          wsgiref.types.FileWrapper: 3b8f, or ‘None’.  The default value
          of this attribute is the *note wsgiref.util.FileWrapper: 736.
          class.

      -- Método: sendfile ()

          Override to implement platform-specific file transmission.
          This method is called only if the application’s return value
          is an instance of the class specified by the *note
          wsgi_file_wrapper: 3bb5. attribute.  It should return a true
          value if it was able to successfully transmit the file, so
          that the default transmission code will not be executed.  The
          default implementation of this method just returns a false
          value.

     Miscellaneous methods and attributes:

      -- Atributo: origin_server

          This attribute should be set to a true value if the handler’s
          *note _write(): 3ba8. and *note _flush(): 3ba9. are being used
          to communicate directly to the client, rather than via a
          CGI-like gateway protocol that wants the HTTP status in a
          special ‘Status:’ header.

          This attribute’s default value is true in *note BaseHandler:
          1b67, but false in *note BaseCGIHandler: 3ba2. and *note
          CGIHandler: 3ba1.

      -- Atributo: http_version

          If *note origin_server: 3bb2. is true, this string attribute
          is used to set the HTTP version of the response set to the
          client.  It defaults to ‘"1.0"’.

 -- Função: wsgiref.handlers.read_environ ()

     Transcode CGI variables from ‘os.environ’ to PEP 3333(5) “bytes in
     unicode” strings, returning a new dictionary.  This function is
     used by *note CGIHandler: 3ba1. and *note IISCGIHandler: 3ba3. in
     place of directly using ‘os.environ’, which is not necessarily
     WSGI-compliant on all platforms and web servers using Python 3 –
     specifically, ones where the OS’s actual environment is Unicode
     (i.e.  Windows), or ones where the environment is bytes, but the
     system encoding used by Python to decode it is anything other than
     ISO-8859-1 (e.g.  Unix systems using UTF-8).

     If you are implementing a CGI-based handler of your own, you
     probably want to use this routine instead of just copying values
     out of ‘os.environ’ directly.

     Adicionado na versão 3.2.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3333/

   (2) https://peps.python.org/pep-3333/

   (3) https://peps.python.org/pep-3333/

   (4) https://peps.python.org/pep-3333/

   (5) https://peps.python.org/pep-3333/


File: python.info,  Node: wsgiref types – WSGI types for static type checking,  Next: Exemplos<25>,  Prev: wsgiref handlers – classes base de servidor/gateway,  Up: wsgiref — Implementação de referência e utilitários WSGI

5.22.2.6 ‘wsgiref.types’ – WSGI types for static type checking
..............................................................

This module provides various types for static type checking as described
in PEP 3333(1).

Adicionado na versão 3.11.

 -- Classe: wsgiref.types.StartResponse

     A *note typing.Protocol: 264. describing start_response()(2)
     callables ( PEP 3333(3)).

 -- Dado: wsgiref.types.WSGIEnvironment

     A type alias describing a WSGI environment dictionary.

 -- Dado: wsgiref.types.WSGIApplication

     A type alias describing a WSGI application callable.

 -- Classe: wsgiref.types.InputStream

     A *note typing.Protocol: 264. describing a WSGI Input Stream(4).

 -- Classe: wsgiref.types.ErrorStream

     A *note typing.Protocol: 264. describing a WSGI Error Stream(5).

 -- Classe: wsgiref.types.FileWrapper

     A *note typing.Protocol: 264. describing a file wrapper(6).  See
     *note wsgiref.util.FileWrapper: 736. for a concrete implementation
     of this protocol.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3333/

   (2) https://peps.python.org/pep-3333/#the-start-response-callable

   (3) https://peps.python.org/pep-3333/

   (4) https://peps.python.org/pep-3333/#input-and-error-streams

   (5) https://peps.python.org/pep-3333/#input-and-error-streams

   (6) 
https://peps.python.org/pep-3333/#optional-platform-specific-file-handling


File: python.info,  Node: Exemplos<25>,  Prev: wsgiref types – WSGI types for static type checking,  Up: wsgiref — Implementação de referência e utilitários WSGI

5.22.2.7 Exemplos
.................

This is a working “Hello World” WSGI application, where the
'start_response' callable should follow the *note StartResponse: 3b95.
protocol:

     """
     Every WSGI application must have an application object - a callable
     object that accepts two arguments. For that purpose, we're going to
     use a function (note that you're not limited to a function, you can
     use a class for example). The first argument passed to the function
     is a dictionary containing CGI-style environment variables and the
     second variable is the callable object.
     """
     from wsgiref.simple_server import make_server


     def hello_world_app(environ, start_response):
         status = "200 OK"  # HTTP Status
         headers = [("Content-type", "text/plain; charset=utf-8")]  # HTTP Headers
         start_response(status, headers)

         # The returned object is going to be printed
         return [b"Hello World"]

     with make_server("", 8000, hello_world_app) as httpd:
         print("Serving on port 8000...")

         # Serve until process is killed
         httpd.serve_forever()

Example of a WSGI application serving the current directory, accept
optional directory and port number (default: 8000) on the command line:

     """
     Small wsgiref based web server. Takes a path to serve from and an
     optional port number (defaults to 8000), then tries to serve files.
     MIME types are guessed from the file names, 404 errors are raised
     if the file is not found.
     """
     import mimetypes
     import os
     import sys
     from wsgiref import simple_server, util


     def app(environ, respond):
         # Get the file name and MIME type
         fn = os.path.join(path, environ["PATH_INFO"][1:])
         if "." not in fn.split(os.path.sep)[-1]:
             fn = os.path.join(fn, "index.html")
         mime_type = mimetypes.guess_file_type(fn)[0]

         # Return 200 OK if file exists, otherwise 404 Not Found
         if os.path.exists(fn):
             respond("200 OK", [("Content-Type", mime_type)])
             return util.FileWrapper(open(fn, "rb"))
         else:
             respond("404 Not Found", [("Content-Type", "text/plain")])
             return [b"not found"]


     if __name__ == "__main__":
         # Get the path and port from command-line arguments
         path = sys.argv[1] if len(sys.argv) > 1 else os.getcwd()
         port = int(sys.argv[2]) if len(sys.argv) > 2 else 8000

         # Make and start the server until control-c
         httpd = simple_server.make_server("", port, app)
         print(f"Serving {path} on port {port}, control-C to stop")
         try:
             httpd.serve_forever()
         except KeyboardInterrupt:
             print("Shutting down.")
             httpd.server_close()


File: python.info,  Node: urllib — Módulos de manipulação de URL,  Next: urllib request — Biblioteca extensível para abrir URLs,  Prev: wsgiref — Implementação de referência e utilitários WSGI,  Up: Protocolos de Internet e Suporte

5.22.3 ‘urllib’ — Módulos de manipulação de URL
-----------------------------------------------

'Código-fonte:' Lib/urllib/(1)

__________________________________________________________________

‘urllib’ é um pacote que coleciona vários módulos para trabalhar com
URLs:

   * *note urllib.request: 10b. para abrir e ler URLs

   * *note urllib.error: 109. contendo as exceções levantadas por *note
     urllib.request: 10b.

   * *note urllib.parse: 10a. para analisar URLs

   * *note urllib.robotparser: 10d. para analisar arquivos ‘robots.txt’

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/urllib/


File: python.info,  Node: urllib request — Biblioteca extensível para abrir URLs,  Next: urllib response — Response classes used by urllib,  Prev: urllib — Módulos de manipulação de URL,  Up: Protocolos de Internet e Suporte

5.22.4 ‘urllib.request’ — Biblioteca extensível para abrir URLs
---------------------------------------------------------------

'Código-fonte:' Lib/urllib/request.py(1)

__________________________________________________________________

O módulo *note urllib.request: 10b. define funções e classes que ajudam
a abrir URLs (principalmente HTTP) em um mundo complexo — autenticação
básica ou por digest, redirecionamentos, cookies e muito mais.

Ver também
..........

O pacote Requests(2) é recomendado para uma interface alto nível de
cliente HTTP.

     Aviso: No macOS, não é seguro usar este módulo em programas que
     utilizam *note os.fork(): 197. porque a implementação *note
     getproxies(): 3bc7. para macOS utiliza uma API de sistema de nível
     mais alto.  Defina a variável de ambiente ‘no_proxy’ como ‘*’ para
     evitar esse problema (por exemplo, ‘os.environ["no_proxy"] = "*"’).

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

O módulo *note urllib.request: 10b. define as seguintes funções:

 -- Função: urllib.request.urlopen (url, data=None[, timeout], *,
          context=None)

     Abre 'url', que pode ser uma string contendo uma URL válida e
     devidamente codificada, ou um objeto *note Request: 100e.

     'data' deve ser um objeto que especifique dados adicionais a serem
     enviados ao servidor ou ‘None’, se nenhum dado for necessário.
     Veja *note Request: 100e. para detalhes.

     O módulo urllib.request usa HTTP/1.1 e inclui o cabeçalho
     ‘Connection:close’ em suas solicitações HTTP.

     O parâmetro opcional 'timeout' especifica um tempo limite em
     segundos para bloquear operações como a tentativa de conexão (se
     não for especificado, a configuração de tempo limite padrão global
     será usada).  Na verdade, isso só funciona para conexões HTTP,
     HTTPS e FTP.

     Se 'context' for especificado, deve ser uma instância de *note
     ssl.SSLContext: 294. descrevendo as várias opções SSL. Veja *note
     HTTPSConnection: b54. para mais detalhes.

     Esta função sempre retorna um objeto que pode funcionar como um
     *note gerenciador de contexto: 5d4. e tem as propriedades 'url',
     'headers' e 'status'.  Veja *note urllib.response.addinfourl: 3bc8.
     para mais detalhes sobre essas propriedades.

     Para URLs HTTP e HTTPS, esta função retorna um objeto *note
     http.client.HTTPResponse: 110d. ligeiramente modificado.  Além dos
     três novos métodos acima, o atributo msg contém as mesmas
     informações que o atributo *note reason: 3bc9. — a frase de razão
     retornada pelo servidor — em vez dos cabeçalhos de resposta como é
     especificado na documentação para *note HTTPResponse: 110d.

     Para FTP, arquivo e URLs de dados e solicitações explicitamente
     tratadas pelas classes legadas *note URLopener: 30e. e *note
     FancyURLopener: 30f, esta função retorna um objeto *note
     urllib.response.addinfourl: 3bc8.

     Levanta *note URLError: 3bca. quando ocorrer erros de protocolo.

     Observe que ‘None’ pode ser retornado se nenhum manipulador lidar
     com a solicitação (embora a *note OpenerDirector: 3bcb. global
     instalada padrão use *note UnknownHandler: 3bcc. para garantir que
     isso nunca aconteça).

     Além disso, se as configurações de proxy forem detectadas (por
     exemplo, quando uma variável de ambiente ‘*_proxy’ como
     ‘http_proxy’ é definida), *note ProxyHandler: 1b47. é instalado por
     padrão e garante que as solicitações sejam manipuladas pelo proxy.

     A função legada ‘urllib.urlopen’ do Python 2.6 e anteriores foi
     descontinuada; *note urllib.request.urlopen(): 293. corresponde à
     antiga ‘urllib2.urlopen’.  O tratamento de proxy, que foi feito
     passando um parâmetro de dicionário para ‘urllib.urlopen’, pode ser
     obtido usando objetos *note ProxyHandler: 1b47.

     O abridor padrão levanta um *note evento de auditoria: 19fa.
     ‘urllib.Request’ com os argumentos ‘fullurl’, ‘data’, ‘headers’,
     ‘method’ obtidos do objeto de requisição.

     Alterado na versão 3.2: 'cafile' e 'capath' foram adicionados.

     Hosts virtuais HTTPS agora são suportados, se possível (ou seja, se
     *note ssl.HAS_SNI: 3688. for verdadeiro).

     'data' pode ser um objeto iterável.

     Alterado na versão 3.3: 'cadefault' foi adicionado.

     Alterado na versão 3.4.3: 'context' foi adicionado.

     Alterado na versão 3.10: A conexão HTTPS agora envia uma extensão
     ALPN com o indicador de protocolo ‘http/1.1’ quando nenhum
     'context' é fornecido.  'context' personalizado deve definir
     protocolos ALPN com *note set_alpn_protocols(): e93.

     Alterado na versão 3.13: Remove os parâmetros 'cafile', 'capath' e
     'cadefault': use o parâmetro 'context' em seu lugar.

 -- Função: urllib.request.install_opener (opener)

     Instala uma instância de *note OpenerDirector: 3bcb. como o abridor
     global padrão.  A instalação de um abridor só é necessária se você
     quiser que o urlopen o utilize; caso contrário, basta chamar *note
     OpenerDirector.open(): 1012. em vez de *note urlopen(): 293.  O
     código não verifica se há um *note OpenerDirector: 3bcb. real, e
     qualquer classe com a interface apropriada funcionará.

 -- Função: urllib.request.build_opener ([handler, ...])

     Return an *note OpenerDirector: 3bcb. instance, which chains the
     handlers in the order given.  'handler's can be either instances of
     *note BaseHandler: 3bcf, or subclasses of *note BaseHandler: 3bcf.
     (in which case it must be possible to call the constructor without
     any parameters).  Instances of the following classes will be in
     front of the 'handler's, unless the 'handler's contain them,
     instances of them or subclasses of them: *note ProxyHandler: 1b47.
     (if proxy settings are detected), *note UnknownHandler: 3bcc, *note
     HTTPHandler: d1d, *note HTTPDefaultErrorHandler: 3bd0, *note
     HTTPRedirectHandler: 3bd1, *note FTPHandler: 3bd2, *note
     FileHandler: 3bd3, *note HTTPErrorProcessor: 3bd4.

     If the Python installation has SSL support (i.e., if the *note ssl:
     d0. module can be imported), *note HTTPSHandler: 1264. will also be
     added.

     A *note BaseHandler: 3bcf. subclass may also change its
     ‘handler_order’ attribute to modify its position in the handlers
     list.

 -- Função: urllib.request.pathname2url (path)

     Convert the given local path to a ‘file:’ URL. This function uses
     *note quote(): bbb. function to encode the path.  For historical
     reasons, the return value omits the ‘file:’ scheme prefix.  This
     example shows the function being used on Windows:

          >>> from urllib.request import pathname2url
          >>> path = 'C:\\Program Files'
          >>> 'file:' + pathname2url(path)
          'file:///C:/Program%20Files'

 -- Função: urllib.request.url2pathname (url)

     Convert the given ‘file:’ URL to a local path.  This function uses
     *note unquote(): 1883. to decode the URL. For historical reasons,
     the given value 'must' omit the ‘file:’ scheme prefix.  This
     example shows the function being used on Windows:

          >>> from urllib.request import url2pathname
          >>> url = 'file:///C:/Program%20Files'
          >>> url2pathname(url.removeprefix('file:'))
          'C:\\Program Files'

 -- Função: urllib.request.getproxies ()

     This helper function returns a dictionary of scheme to proxy server
     URL mappings.  It scans the environment for variables named
     ‘<scheme>_proxy’, in a case insensitive approach, for all operating
     systems first, and when it cannot find it, looks for proxy
     information from System Configuration for macOS and Windows Systems
     Registry for Windows.  If both lowercase and uppercase environment
     variables exist (and disagree), lowercase is preferred.

          Nota: If the environment variable ‘REQUEST_METHOD’ is set,
          which usually indicates your script is running in a CGI
          environment, the environment variable ‘HTTP_PROXY’ (uppercase
          ‘_PROXY’) will be ignored.  This is because that variable can
          be injected by a client using the “Proxy:” HTTP header.  If
          you need to use an HTTP proxy in a CGI environment, either use
          ‘ProxyHandler’ explicitly, or make sure the variable name is
          in lowercase (or at least the ‘_proxy’ suffix).

As seguintes classes são disponibilizadas:

 -- Classe: urllib.request.Request (url, data=None, headers={},
          origin_req_host=None, unverifiable=False, method=None)

     This class is an abstraction of a URL request.

     'url' should be a string containing a valid, properly encoded URL.

     'data' must be an object specifying additional data to send to the
     server, or ‘None’ if no such data is needed.  Currently HTTP
     requests are the only ones that use 'data'.  The supported object
     types include bytes, file-like objects, and iterables of bytes-like
     objects.  If no ‘Content-Length’ nor ‘Transfer-Encoding’ header
     field has been provided, *note HTTPHandler: d1d. will set these
     headers according to the type of 'data'.  ‘Content-Length’ will be
     used to send bytes objects, while ‘Transfer-Encoding: chunked’ as
     specified in RFC 7230(3), Section 3.3.1 will be used to send files
     and other iterables.

     For an HTTP POST request method, 'data' should be a buffer in the
     standard ‘application/x-www-form-urlencoded’ format.  The *note
     urllib.parse.urlencode(): ec4. function takes a mapping or sequence
     of 2-tuples and returns an ASCII string in this format.  It should
     be encoded to bytes before being used as the 'data' parameter.

     'headers' should be a dictionary, and will be treated as if *note
     add_header(): 3bd5. was called with each key and value as
     arguments.  This is often used to “spoof” the ‘User-Agent’ header
     value, which is used by a browser to identify itself – some HTTP
     servers only allow requests coming from common browsers as opposed
     to scripts.  For example, Mozilla Firefox may identify itself as
     ‘"Mozilla/5.0 (X11; U; Linux i686) Gecko/20071127
     Firefox/2.0.0.11"’, while *note urllib: 108.’s default user agent
     string is ‘"Python-urllib/2.6"’ (on Python 2.6).  All header keys
     are sent in camel case.

     An appropriate ‘Content-Type’ header should be included if the
     'data' argument is present.  If this header has not been provided
     and 'data' is not ‘None’, ‘Content-Type:
     application/x-www-form-urlencoded’ will be added as a default.

     The next two arguments are only of interest for correct handling of
     third-party HTTP cookies:

     'origin_req_host' should be the request-host of the origin
     transaction, as defined by RFC 2965(4).  It defaults to
     ‘http.cookiejar.request_host(self)’.  This is the host name or IP
     address of the original request that was initiated by the user.
     For example, if the request is for an image in an HTML document,
     this should be the request-host of the request for the page
     containing the image.

     'unverifiable' should indicate whether the request is unverifiable,
     as defined by RFC 2965(5).  It defaults to ‘False’.  An
     unverifiable request is one whose URL the user did not have the
     option to approve.  For example, if the request is for an image in
     an HTML document, and the user had no option to approve the
     automatic fetching of the image, this should be true.

     'method' should be a string that indicates the HTTP request method
     that will be used (e.g.  ‘'HEAD'’).  If provided, its value is
     stored in the *note method: 100f. attribute and is used by *note
     get_method(): 11a8.  The default is ‘'GET'’ if 'data' is ‘None’ or
     ‘'POST'’ otherwise.  Subclasses may indicate a different default
     method by setting the *note method: 100f. attribute in the class
     itself.

          Nota: The request will not work as expected if the data object
          is unable to deliver its content more than once (e.g.  a file
          or an iterable that can produce the content only once) and the
          request is retried for HTTP redirects or authentication.  The
          'data' is sent to the HTTP server right away after the
          headers.  There is no support for a 100-continue expectation
          in the library.

     Alterado na versão 3.3: *note Request.method: 100f. argument is
     added to the Request class.

     Alterado na versão 3.4: Default *note Request.method: 100f. may be
     indicated at the class level.

     Alterado na versão 3.6: Do not raise an error if the
     ‘Content-Length’ has not been provided and 'data' is neither ‘None’
     nor a bytes object.  Fall back to use chunked transfer encoding
     instead.

 -- Classe: urllib.request.OpenerDirector

     The *note OpenerDirector: 3bcb. class opens URLs via *note
     BaseHandler: 3bcf.s chained together.  It manages the chaining of
     handlers, and recovery from errors.

 -- Classe: urllib.request.BaseHandler

     This is the base class for all registered handlers — and handles
     only the simple mechanics of registration.

 -- Classe: urllib.request.HTTPDefaultErrorHandler

     A class which defines a default handler for HTTP error responses;
     all responses are turned into *note HTTPError: 1014. exceptions.

 -- Classe: urllib.request.HTTPRedirectHandler

     Uma classe para lidar com redirecionamentos.

 -- Classe: urllib.request.HTTPCookieProcessor (cookiejar=None)

     Classe para lidar com Cookies HTTP.

 -- Classe: urllib.request.ProxyHandler (proxies=None)

     Cause requests to go through a proxy.  If 'proxies' is given, it
     must be a dictionary mapping protocol names to URLs of proxies.
     The default is to read the list of proxies from the environment
     variables ‘<protocol>_proxy’.  If no proxy environment variables
     are set, then in a Windows environment proxy settings are obtained
     from the registry’s Internet Settings section, and in a macOS
     environment proxy information is retrieved from the System
     Configuration Framework.

     To disable autodetected proxy pass an empty dictionary.

     The ‘no_proxy’ environment variable can be used to specify hosts
     which shouldn’t be reached via proxy; if set, it should be a
     comma-separated list of hostname suffixes, optionally with ‘:port’
     appended, for example ‘cern.ch,ncsa.uiuc.edu,some.host:8080’.

          Nota: ‘HTTP_PROXY’ será ignorado se uma variável
          ‘REQUEST_METHOD’ estiver definida; veja a documentação em
          *note getproxies(): 3bc7.

 -- Classe: urllib.request.HTTPPasswordMgr

     Keep a database of ‘(realm, uri) -> (user, password)’ mappings.

 -- Classe: urllib.request.HTTPPasswordMgrWithDefaultRealm

     Keep a database of ‘(realm, uri) -> (user, password)’ mappings.  A
     realm of ‘None’ is considered a catch-all realm, which is searched
     if no other realm fits.

 -- Classe: urllib.request.HTTPPasswordMgrWithPriorAuth

     A variant of *note HTTPPasswordMgrWithDefaultRealm: 3bd8. that also
     has a database of ‘uri -> is_authenticated’ mappings.  Can be used
     by a BasicAuth handler to determine when to send authentication
     credentials immediately instead of waiting for a ‘401’ response
     first.

     Adicionado na versão 3.5.

 -- Classe: urllib.request.AbstractBasicAuthHandler (password_mgr=None)

     This is a mixin class that helps with HTTP authentication, both to
     the remote host and to a proxy.  'password_mgr', if given, should
     be something that is compatible with *note HTTPPasswordMgr: 3bd7.;
     refer to section *note HTTPPasswordMgr Objects: 3bd9. for
     information on the interface that must be supported.  If
     'passwd_mgr' also provides ‘is_authenticated’ and
     ‘update_authenticated’ methods (see *note
     HTTPPasswordMgrWithPriorAuth Objects: 3bda.), then the handler will
     use the ‘is_authenticated’ result for a given URI to determine
     whether or not to send authentication credentials with the request.
     If ‘is_authenticated’ returns ‘True’ for the URI, credentials are
     sent.  If ‘is_authenticated’ is ‘False’, credentials are not sent,
     and then if a ‘401’ response is received the request is re-sent
     with the authentication credentials.  If authentication succeeds,
     ‘update_authenticated’ is called to set ‘is_authenticated’ ‘True’
     for the URI, so that subsequent requests to the URI or any of its
     super-URIs will automatically include the authentication
     credentials.

     Adicionado na versão 3.5: Added ‘is_authenticated’ support.

 -- Classe: urllib.request.HTTPBasicAuthHandler (password_mgr=None)

     Handle authentication with the remote host.  'password_mgr', if
     given, should be something that is compatible with *note
     HTTPPasswordMgr: 3bd7.; refer to section *note HTTPPasswordMgr
     Objects: 3bd9. for information on the interface that must be
     supported.  HTTPBasicAuthHandler will raise a *note ValueError:
     202. when presented with a wrong Authentication scheme.

 -- Classe: urllib.request.ProxyBasicAuthHandler (password_mgr=None)

     Handle authentication with the proxy.  'password_mgr', if given,
     should be something that is compatible with *note HTTPPasswordMgr:
     3bd7.; refer to section *note HTTPPasswordMgr Objects: 3bd9. for
     information on the interface that must be supported.

 -- Classe: urllib.request.AbstractDigestAuthHandler (password_mgr=None)

     This is a mixin class that helps with HTTP authentication, both to
     the remote host and to a proxy.  'password_mgr', if given, should
     be something that is compatible with *note HTTPPasswordMgr: 3bd7.;
     refer to section *note HTTPPasswordMgr Objects: 3bd9. for
     information on the interface that must be supported.

 -- Classe: urllib.request.HTTPDigestAuthHandler (password_mgr=None)

     Handle authentication with the remote host.  'password_mgr', if
     given, should be something that is compatible with *note
     HTTPPasswordMgr: 3bd7.; refer to section *note HTTPPasswordMgr
     Objects: 3bd9. for information on the interface that must be
     supported.  When both Digest Authentication Handler and Basic
     Authentication Handler are both added, Digest Authentication is
     always tried first.  If the Digest Authentication returns a 40x
     response again, it is sent to Basic Authentication handler to
     Handle.  This Handler method will raise a *note ValueError: 202.
     when presented with an authentication scheme other than Digest or
     Basic.

     Alterado na versão 3.3: Raise *note ValueError: 202. on unsupported
     Authentication Scheme.

 -- Classe: urllib.request.ProxyDigestAuthHandler (password_mgr=None)

     Handle authentication with the proxy.  'password_mgr', if given,
     should be something that is compatible with *note HTTPPasswordMgr:
     3bd7.; refer to section *note HTTPPasswordMgr Objects: 3bd9. for
     information on the interface that must be supported.

 -- Classe: urllib.request.HTTPHandler

     A class to handle opening of HTTP URLs.

 -- Classe: urllib.request.HTTPSHandler (debuglevel=0, context=None,
          check_hostname=None)

     A class to handle opening of HTTPS URLs.  'context' and
     'check_hostname' have the same meaning as in *note
     http.client.HTTPSConnection: b54.

     Alterado na versão 3.2: 'context' and 'check_hostname' were added.

 -- Classe: urllib.request.FileHandler

     Abre arquivos locais.

 -- Classe: urllib.request.DataHandler

     Abre dados das URLs.

     Adicionado na versão 3.4.

 -- Classe: urllib.request.FTPHandler

     Abre URLs de FTP.

 -- Classe: urllib.request.CacheFTPHandler

     Open FTP URLs, keeping a cache of open FTP connections to minimize
     delays.

 -- Classe: urllib.request.UnknownHandler

     A catch-all class to handle unknown URLs.

 -- Classe: urllib.request.HTTPErrorProcessor

     Process HTTP error responses.

* Menu:

* Objeto Request::
* OpenerDirector Objects::
* BaseHandler Objects::
* HTTPRedirectHandler Objects::
* HTTPCookieProcessor Objects::
* ProxyHandler Objects::
* HTTPPasswordMgr Objects::
* HTTPPasswordMgrWithPriorAuth Objects::
* AbstractBasicAuthHandler Objects::
* HTTPBasicAuthHandler Objects::
* ProxyBasicAuthHandler Objects::
* AbstractDigestAuthHandler Objects::
* HTTPDigestAuthHandler Objects::
* ProxyDigestAuthHandler Objects::
* HTTPHandler Objects::
* Objetos HTTPSHandler::
* FileHandler Objects::
* DataHandler Objects::
* FTPHandler Objects::
* CacheFTPHandler Objects::
* Objetos UnknownHandler::
* HTTPErrorProcessor Objects::
* Exemplos: Exemplos<26>.
* Legacy interface::
* urllib.request Restrictions: urllib request Restrictions.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/urllib/request.py

   (2) https://requests.readthedocs.io/en/master/

   (3) https://datatracker.ietf.org/doc/html/rfc7230.html

   (4) https://datatracker.ietf.org/doc/html/rfc2965.html

   (5) https://datatracker.ietf.org/doc/html/rfc2965.html


File: python.info,  Node: Objeto Request,  Next: OpenerDirector Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.1 Objeto Request
.......................

The following methods describe *note Request: 100e.’s public interface,
and so all may be overridden in subclasses.  It also defines several
public attributes that can be used by clients to inspect the parsed
request.

 -- Atributo: Request.full_url

     The original URL passed to the constructor.

     Alterado na versão 3.4.

     Request.full_url is a property with setter, getter and a deleter.
     Getting *note full_url: 1010. returns the original request URL with
     the fragment, if it was present.

 -- Atributo: Request.type

     The URI scheme.

 -- Atributo: Request.host

     The URI authority, typically a host, but may also contain a port
     separated by a colon.

 -- Atributo: Request.origin_req_host

     The original host for the request, without port.

 -- Atributo: Request.selector

     The URI path.  If the *note Request: 100e. uses a proxy, then
     selector will be the full URL that is passed to the proxy.

 -- Atributo: Request.data

     The entity body for the request, or ‘None’ if not specified.

     Alterado na versão 3.4: Changing value of *note Request.data: 1011.
     now deletes “Content-Length” header if it was previously set or
     calculated.

 -- Atributo: Request.unverifiable

     boolean, indicates whether the request is unverifiable as defined
     by RFC 2965(1).

 -- Atributo: Request.method

     The HTTP request method to use.  By default its value is *note
     None: 675, which means that *note get_method(): 11a8. will do its
     normal computation of the method to be used.  Its value can be set
     (thus overriding the default computation in *note get_method():
     11a8.) either by providing a default value by setting it at the
     class level in a *note Request: 100e. subclass, or by passing a
     value in to the *note Request: 100e. constructor via the 'method'
     argument.

     Adicionado na versão 3.3.

     Alterado na versão 3.4: A default value can now be set in
     subclasses; previously it could only be set via the constructor
     argument.

 -- Método: Request.get_method ()

     Return a string indicating the HTTP request method.  If *note
     Request.method: 100f. is not ‘None’, return its value, otherwise
     return ‘'GET'’ if *note Request.data: 1011. is ‘None’, or ‘'POST'’
     if it’s not.  This is only meaningful for HTTP requests.

     Alterado na versão 3.3: get_method now looks at the value of *note
     Request.method: 100f.

 -- Método: Request.add_header (key, val)

     Add another header to the request.  Headers are currently ignored
     by all handlers except HTTP handlers, where they are added to the
     list of headers sent to the server.  Note that there cannot be more
     than one header with the same name, and later calls will overwrite
     previous calls in case the 'key' collides.  Currently, this is no
     loss of HTTP functionality, since all headers which have meaning
     when used more than once have a (header-specific) way of gaining
     the same functionality using only one header.  Note that headers
     added using this method are also added to redirected requests.

 -- Método: Request.add_unredirected_header (key, header)

     Add a header that will not be added to a redirected request.

 -- Método: Request.has_header (header)

     Return whether the instance has the named header (checks both
     regular and unredirected).

 -- Método: Request.remove_header (header)

     Remove o cabeçalho nomeado da instância de solicitação (tanto de
     cabeçalhos regulares como de cabeçalhos não-redirecionados).

     Adicionado na versão 3.4.

 -- Método: Request.get_full_url ()

     Return the URL given in the constructor.

     Alterado na versão 3.4.

     Returns *note Request.full_url: 1010.

 -- Método: Request.set_proxy (host, type)

     Prepare the request by connecting to a proxy server.  The 'host'
     and 'type' will replace those of the instance, and the instance’s
     selector will be the original URL given in the constructor.

 -- Método: Request.get_header (header_name, default=None)

     Return the value of the given header.  If the header is not
     present, return the default value.

 -- Método: Request.header_items ()

     Return a list of tuples (header_name, header_value) of the Request
     headers.

Alterado na versão 3.4: The request methods add_data, has_data,
get_data, get_type, get_host, get_selector, get_origin_req_host and
is_unverifiable that were deprecated since 3.3 have been removed.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2965.html


File: python.info,  Node: OpenerDirector Objects,  Next: BaseHandler Objects,  Prev: Objeto Request,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.2 OpenerDirector Objects
...............................

*note OpenerDirector: 3bcb. instances have the following methods:

 -- Método: OpenerDirector.add_handler (handler)

     'handler' should be an instance of *note BaseHandler: 3bcf.  The
     following methods are searched, and added to the possible chains
     (note that HTTP errors are a special case).  Note that, in the
     following, 'protocol' should be replaced with the actual protocol
     to handle, for example ‘http_response()’ would be the HTTP protocol
     response handler.  Also 'type' should be replaced with the actual
     HTTP code, for example ‘http_error_404()’ would handle HTTP 404
     errors.

        * ‘<protocol>_open()’ — signal that the handler knows how to
          open 'protocol' URLs.

          Veja *note BaseHandler.<protocol>_open(): 3bef. para maiores
          informações.

        * ‘http_error_<type>()’ — signal that the handler knows how to
          handle HTTP errors with HTTP error code 'type'.

          Veja *note BaseHandler.http_error_<nnn>(): 3bf0. para maiores
          informações.

        * ‘<protocol>_error()’ — signal that the handler knows how to
          handle errors from (non-‘http’) 'protocol'.

        * ‘<protocol>_request()’ — signal that the handler knows how to
          pre-process 'protocol' requests.

          Veja *note BaseHandler.<protocol>_request(): 3bf1. para
          maiores informações.

        * ‘<protocol>_response()’ — signal that the handler knows how to
          post-process 'protocol' responses.

          Veja *note BaseHandler.<protocol>_response(): 3bf2. para
          maiores informações.

 -- Método: OpenerDirector.open (url, data=None[, timeout])

     Open the given 'url' (which can be a request object or a string),
     optionally passing the given 'data'.  Arguments, return values and
     exceptions raised are the same as those of *note urlopen(): 293.
     (which simply calls the *note open(): 51c. method on the currently
     installed global *note OpenerDirector: 3bcb.).  The optional
     'timeout' parameter specifies a timeout in seconds for blocking
     operations like the connection attempt (if not specified, the
     global default timeout setting will be used).  The timeout feature
     actually works only for HTTP, HTTPS and FTP connections.

 -- Método: OpenerDirector.error (proto, *args)

     Handle an error of the given protocol.  This will call the
     registered error handlers for the given protocol with the given
     arguments (which are protocol specific).  The HTTP protocol is a
     special case which uses the HTTP response code to determine the
     specific error handler; refer to the ‘http_error_<type>()’ methods
     of the handler classes.

     Return values and exceptions raised are the same as those of *note
     urlopen(): 293.

OpenerDirector objects open URLs in three stages:

The order in which these methods are called within each stage is
determined by sorting the handler instances.

  1. Every handler with a method named like ‘<protocol>_request()’ has
     that method called to pre-process the request.

  2. Handlers with a method named like ‘<protocol>_open()’ are called to
     handle the request.  This stage ends when a handler either returns
     a non-*note None: 675. value (ie.  a response), or raises an
     exception (usually *note URLError: 3bca.).  Exceptions are allowed
     to propagate.

     In fact, the above algorithm is first tried for methods named *note
     default_open(): 3bf4.  If all such methods return *note None: 675,
     the algorithm is repeated for methods named like
     ‘<protocol>_open()’.  If all such methods return *note None: 675,
     the algorithm is repeated for methods named *note unknown_open():
     3bf5.

     Note that the implementation of these methods may involve calls of
     the parent *note OpenerDirector: 3bcb. instance’s *note open():
     1012. and *note error(): 3bf3. methods.

  3. Every handler with a method named like ‘<protocol>_response()’ has
     that method called to post-process the response.


File: python.info,  Node: BaseHandler Objects,  Next: HTTPRedirectHandler Objects,  Prev: OpenerDirector Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.3 BaseHandler Objects
............................

*note BaseHandler: 3bcf. objects provide a couple of methods that are
directly useful, and others that are meant to be used by derived
classes.  These are intended for direct use:

 -- Método: BaseHandler.add_parent (director)

     Add a director as parent.

 -- Método: BaseHandler.close ()

     Remove any parents.

The following attribute and methods should only be used by classes
derived from *note BaseHandler: 3bcf.

     Nota: The convention has been adopted that subclasses defining
     ‘<protocol>_request()’ or ‘<protocol>_response()’ methods are named
     ‘*Processor’; all others are named ‘*Handler’.

 -- Atributo: BaseHandler.parent

     A valid *note OpenerDirector: 3bcb, which can be used to open using
     a different protocol, or handle errors.

 -- Método: BaseHandler.default_open (req)

     This method is 'not' defined in *note BaseHandler: 3bcf, but
     subclasses should define it if they want to catch all URLs.

     This method, if implemented, will be called by the parent *note
     OpenerDirector: 3bcb.  It should return a file-like object as
     described in the return value of the *note open(): 1012. method of
     *note OpenerDirector: 3bcb, or ‘None’.  It should raise *note
     URLError: 3bca, unless a truly exceptional thing happens (for
     example, *note MemoryError: 15c5. should not be mapped to *note
     URLError: 3bca.).

     This method will be called before any protocol-specific open
     method.

 -- Método: BaseHandler.<protocol>_open(req)

     This method is 'not' defined in *note BaseHandler: 3bcf, but
     subclasses should define it if they want to handle URLs with the
     given protocol.

     This method, if defined, will be called by the parent *note
     OpenerDirector: 3bcb.  Return values should be the same as for
     *note default_open(): 3bf4.

 -- Método: BaseHandler.unknown_open (req)

     This method is 'not' defined in *note BaseHandler: 3bcf, but
     subclasses should define it if they want to catch all URLs with no
     specific registered handler to open it.

     This method, if implemented, will be called by the *note parent:
     3bfa. *note OpenerDirector: 3bcb.  Return values should be the same
     as for *note default_open(): 3bf4.

 -- Método: BaseHandler.http_error_default (req, fp, code, msg, hdrs)

     This method is 'not' defined in *note BaseHandler: 3bcf, but
     subclasses should override it if they intend to provide a catch-all
     for otherwise unhandled HTTP errors.  It will be called
     automatically by the *note OpenerDirector: 3bcb. getting the error,
     and should not normally be called in other circumstances.

     *note OpenerDirector: 3bcb. will call this method with five
     positional arguments:

       1. a *note Request: 100e. object,

       2. a file-like object with the HTTP error body,

       3. the three-digit code of the error, as a string,

       4. the user-visible explanation of the code, as a string, and

       5. the headers of the error, as a mapping object.

     Return values and exceptions raised should be the same as those of
     *note urlopen(): 293.

 -- Método: BaseHandler.http_error_<nnn>(req, fp, code, msg, hdrs)

     'nnn' should be a three-digit HTTP error code.  This method is also
     not defined in *note BaseHandler: 3bcf, but will be called, if it
     exists, on an instance of a subclass, when an HTTP error with code
     'nnn' occurs.

     Subclasses should override this method to handle specific HTTP
     errors.

     Arguments, return values and exceptions raised should be the same
     as for *note http_error_default(): 3bfb.

 -- Método: BaseHandler.<protocol>_request(req)

     This method is 'not' defined in *note BaseHandler: 3bcf, but
     subclasses should define it if they want to pre-process requests of
     the given protocol.

     This method, if defined, will be called by the parent *note
     OpenerDirector: 3bcb.  'req' will be a *note Request: 100e. object.
     The return value should be a *note Request: 100e. object.

 -- Método: BaseHandler.<protocol>_response(req, response)

     This method is 'not' defined in *note BaseHandler: 3bcf, but
     subclasses should define it if they want to post-process responses
     of the given protocol.

     This method, if defined, will be called by the parent *note
     OpenerDirector: 3bcb.  'req' will be a *note Request: 100e. object.
     'response' will be an object implementing the same interface as the
     return value of *note urlopen(): 293.  The return value should
     implement the same interface as the return value of *note
     urlopen(): 293.


File: python.info,  Node: HTTPRedirectHandler Objects,  Next: HTTPCookieProcessor Objects,  Prev: BaseHandler Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.4 HTTPRedirectHandler Objects
....................................

     Nota: Some HTTP redirections require action from this module’s
     client code.  If this is the case, *note HTTPError: 1014. is
     raised.  See RFC 2616(1) for details of the precise meanings of the
     various redirection codes.

     An *note HTTPError: 1014. exception raised as a security
     consideration if the HTTPRedirectHandler is presented with a
     redirected URL which is not an HTTP, HTTPS or FTP URL.

 -- Método: HTTPRedirectHandler.redirect_request (req, fp, code, msg,
          hdrs, newurl)

     Return a *note Request: 100e. or ‘None’ in response to a redirect.
     This is called by the default implementations of the
     ‘http_error_30*()’ methods when a redirection is received from the
     server.  If a redirection should take place, return a new *note
     Request: 100e. to allow ‘http_error_30*()’ to perform the redirect
     to 'newurl'.  Otherwise, raise *note HTTPError: 1014. if no other
     handler should try to handle this URL, or return ‘None’ if you
     can’t but another handler might.

          Nota: The default implementation of this method does not
          strictly follow RFC 2616(2), which says that 301 and 302
          responses to ‘POST’ requests must not be automatically
          redirected without confirmation by the user.  In reality,
          browsers do allow automatic redirection of these responses,
          changing the POST to a ‘GET’, and the default implementation
          reproduces this behavior.

 -- Método: HTTPRedirectHandler.http_error_301 (req, fp, code, msg,
          hdrs)

     Redirect to the ‘Location:’ or ‘URI:’ URL. This method is called by
     the parent *note OpenerDirector: 3bcb. when getting an HTTP ‘moved
     permanently’ response.

 -- Método: HTTPRedirectHandler.http_error_302 (req, fp, code, msg,
          hdrs)

     The same as *note http_error_301(): 3bff, but called for the
     ‘found’ response.

 -- Método: HTTPRedirectHandler.http_error_303 (req, fp, code, msg,
          hdrs)

     The same as *note http_error_301(): 3bff, but called for the ‘see
     other’ response.

 -- Método: HTTPRedirectHandler.http_error_307 (req, fp, code, msg,
          hdrs)

     The same as *note http_error_301(): 3bff, but called for the
     ‘temporary redirect’ response.  It does not allow changing the
     request method from ‘POST’ to ‘GET’.

 -- Método: HTTPRedirectHandler.http_error_308 (req, fp, code, msg,
          hdrs)

     The same as *note http_error_301(): 3bff, but called for the
     ‘permanent redirect’ response.  It does not allow changing the
     request method from ‘POST’ to ‘GET’.

     Adicionado na versão 3.11.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2616.html

   (2) https://datatracker.ietf.org/doc/html/rfc2616.html


File: python.info,  Node: HTTPCookieProcessor Objects,  Next: ProxyHandler Objects,  Prev: HTTPRedirectHandler Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.5 HTTPCookieProcessor Objects
....................................

*note HTTPCookieProcessor: 3bd6. instances have one attribute:

 -- Atributo: HTTPCookieProcessor.cookiejar

     The *note http.cookiejar.CookieJar: 3c07. in which cookies are
     stored.


File: python.info,  Node: ProxyHandler Objects,  Next: HTTPPasswordMgr Objects,  Prev: HTTPCookieProcessor Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.6 ProxyHandler Objects
.............................

 -- Método: ProxyHandler.<protocol>_open(request)

     The *note ProxyHandler: 1b47. will have a method
     ‘<protocol>_open()’ for every 'protocol' which has a proxy in the
     'proxies' dictionary given in the constructor.  The method will
     modify requests to go through the proxy, by calling
     ‘request.set_proxy()’, and call the next handler in the chain to
     actually execute the protocol.


File: python.info,  Node: HTTPPasswordMgr Objects,  Next: HTTPPasswordMgrWithPriorAuth Objects,  Prev: ProxyHandler Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.7 HTTPPasswordMgr Objects
................................

These methods are available on *note HTTPPasswordMgr: 3bd7. and *note
HTTPPasswordMgrWithDefaultRealm: 3bd8. objects.

 -- Método: HTTPPasswordMgr.add_password (realm, uri, user, passwd)

     'uri' can be either a single URI, or a sequence of URIs.  'realm',
     'user' and 'passwd' must be strings.  This causes ‘(user, passwd)’
     to be used as authentication tokens when authentication for 'realm'
     and a super-URI of any of the given URIs is given.

 -- Método: HTTPPasswordMgr.find_user_password (realm, authuri)

     Get user/password for given realm and URI, if any.  This method
     will return ‘(None, None)’ if there is no matching user/password.

     For *note HTTPPasswordMgrWithDefaultRealm: 3bd8. objects, the realm
     ‘None’ will be searched if the given 'realm' has no matching
     user/password.


File: python.info,  Node: HTTPPasswordMgrWithPriorAuth Objects,  Next: AbstractBasicAuthHandler Objects,  Prev: HTTPPasswordMgr Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.8 HTTPPasswordMgrWithPriorAuth Objects
.............................................

This password manager extends *note HTTPPasswordMgrWithDefaultRealm:
3bd8. to support tracking URIs for which authentication credentials
should always be sent.

 -- Método: HTTPPasswordMgrWithPriorAuth.add_password (realm, uri, user,
          passwd, is_authenticated=False)

     'realm', 'uri', 'user', 'passwd' are as for *note
     HTTPPasswordMgr.add_password(): 3c0b.  'is_authenticated' sets the
     initial value of the ‘is_authenticated’ flag for the given URI or
     list of URIs.  If 'is_authenticated' is specified as ‘True’,
     'realm' is ignored.

 -- Método: HTTPPasswordMgrWithPriorAuth.find_user_password (realm,
          authuri)

     Same as for *note HTTPPasswordMgrWithDefaultRealm: 3bd8. objects

 -- Método: HTTPPasswordMgrWithPriorAuth.update_authenticated (self,
          uri, is_authenticated=False)

     Update the ‘is_authenticated’ flag for the given 'uri' or list of
     URIs.

 -- Método: HTTPPasswordMgrWithPriorAuth.is_authenticated (self,
          authuri)

     Returns the current state of the ‘is_authenticated’ flag for the
     given URI.


File: python.info,  Node: AbstractBasicAuthHandler Objects,  Next: HTTPBasicAuthHandler Objects,  Prev: HTTPPasswordMgrWithPriorAuth Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.9 AbstractBasicAuthHandler Objects
.........................................

 -- Método: AbstractBasicAuthHandler.http_error_auth_reqed (authreq,
          host, req, headers)

     Handle an authentication request by getting a user/password pair,
     and re-trying the request.  'authreq' should be the name of the
     header where the information about the realm is included in the
     request, 'host' specifies the URL and path to authenticate for,
     'req' should be the (failed) *note Request: 100e. object, and
     'headers' should be the error headers.

     'host' is either an authority (e.g.  ‘"python.org"’) or a URL
     containing an authority component (e.g.  ‘"http://python.org/"’).
     In either case, the authority must not contain a userinfo component
     (so, ‘"python.org"’ and ‘"python.org:80"’ are fine,
     ‘"joe:password@python.org"’ is not).


File: python.info,  Node: HTTPBasicAuthHandler Objects,  Next: ProxyBasicAuthHandler Objects,  Prev: AbstractBasicAuthHandler Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.10 HTTPBasicAuthHandler Objects
......................................

 -- Método: HTTPBasicAuthHandler.http_error_401 (req, fp, code, msg,
          hdrs)

     Retry the request with authentication information, if available.


File: python.info,  Node: ProxyBasicAuthHandler Objects,  Next: AbstractDigestAuthHandler Objects,  Prev: HTTPBasicAuthHandler Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.11 ProxyBasicAuthHandler Objects
.......................................

 -- Método: ProxyBasicAuthHandler.http_error_407 (req, fp, code, msg,
          hdrs)

     Retry the request with authentication information, if available.


File: python.info,  Node: AbstractDigestAuthHandler Objects,  Next: HTTPDigestAuthHandler Objects,  Prev: ProxyBasicAuthHandler Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.12 AbstractDigestAuthHandler Objects
...........................................

 -- Método: AbstractDigestAuthHandler.http_error_auth_reqed (authreq,
          host, req, headers)

     'authreq' should be the name of the header where the information
     about the realm is included in the request, 'host' should be the
     host to authenticate to, 'req' should be the (failed) *note
     Request: 100e. object, and 'headers' should be the error headers.


File: python.info,  Node: HTTPDigestAuthHandler Objects,  Next: ProxyDigestAuthHandler Objects,  Prev: AbstractDigestAuthHandler Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.13 HTTPDigestAuthHandler Objects
.......................................

 -- Método: HTTPDigestAuthHandler.http_error_401 (req, fp, code, msg,
          hdrs)

     Retry the request with authentication information, if available.


File: python.info,  Node: ProxyDigestAuthHandler Objects,  Next: HTTPHandler Objects,  Prev: HTTPDigestAuthHandler Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.14 ProxyDigestAuthHandler Objects
........................................

 -- Método: ProxyDigestAuthHandler.http_error_407 (req, fp, code, msg,
          hdrs)

     Retry the request with authentication information, if available.


File: python.info,  Node: HTTPHandler Objects,  Next: Objetos HTTPSHandler,  Prev: ProxyDigestAuthHandler Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.15 HTTPHandler Objects
.............................

 -- Método: HTTPHandler.http_open (req)

     Send an HTTP request, which can be either GET or POST, depending on
     ‘req.data’.


File: python.info,  Node: Objetos HTTPSHandler,  Next: FileHandler Objects,  Prev: HTTPHandler Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.16 Objetos HTTPSHandler
..............................

 -- Método: HTTPSHandler.https_open (req)

     Send an HTTPS request, which can be either GET or POST, depending
     on ‘req.data’.


File: python.info,  Node: FileHandler Objects,  Next: DataHandler Objects,  Prev: Objetos HTTPSHandler,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.17 FileHandler Objects
.............................

 -- Método: FileHandler.file_open (req)

     Open the file locally, if there is no host name, or the host name
     is ‘'localhost'’.

     Alterado na versão 3.2: This method is applicable only for local
     hostnames.  When a remote hostname is given, a *note URLError:
     3bca. is raised.


File: python.info,  Node: DataHandler Objects,  Next: FTPHandler Objects,  Prev: FileHandler Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.18 DataHandler Objects
.............................

 -- Método: DataHandler.data_open (req)

     Read a data URL. This kind of URL contains the content encoded in
     the URL itself.  The data URL syntax is specified in RFC 2397(1).
     This implementation ignores white spaces in base64 encoded data
     URLs so the URL may be wrapped in whatever source file it comes
     from.  But even though some browsers don’t mind about a missing
     padding at the end of a base64 encoded data URL, this
     implementation will raise a *note ValueError: 202. in that case.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2397.html


File: python.info,  Node: FTPHandler Objects,  Next: CacheFTPHandler Objects,  Prev: DataHandler Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.19 FTPHandler Objects
............................

 -- Método: FTPHandler.ftp_open (req)

     Open the FTP file indicated by 'req'.  The login is always done
     with empty username and password.


File: python.info,  Node: CacheFTPHandler Objects,  Next: Objetos UnknownHandler,  Prev: FTPHandler Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.20 CacheFTPHandler Objects
.................................

*note CacheFTPHandler: 181d. objects are *note FTPHandler: 3bd2. objects
with the following additional methods:

 -- Método: CacheFTPHandler.setTimeout (t)

     Set timeout of connections to 't' seconds.

 -- Método: CacheFTPHandler.setMaxConns (m)

     Set maximum number of cached connections to 'm'.


File: python.info,  Node: Objetos UnknownHandler,  Next: HTTPErrorProcessor Objects,  Prev: CacheFTPHandler Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.21 Objetos UnknownHandler
................................

 -- Método: UnknownHandler.unknown_open ()

     Raise a *note URLError: 3bca. exception.


File: python.info,  Node: HTTPErrorProcessor Objects,  Next: Exemplos<26>,  Prev: Objetos UnknownHandler,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.22 HTTPErrorProcessor Objects
....................................

 -- Método: HTTPErrorProcessor.http_response (request, response)

     Process HTTP error responses.

     For 200 error codes, the response object is returned immediately.

     For non-200 error codes, this simply passes the job on to the
     ‘http_error_<type>()’ handler methods, via *note
     OpenerDirector.error(): 3bf3.  Eventually, *note
     HTTPDefaultErrorHandler: 3bd0. will raise an *note HTTPError: 1014.
     if no other handler handles the error.

 -- Método: HTTPErrorProcessor.https_response (request, response)

     Process HTTPS error responses.

     The behavior is same as *note http_response(): 3c3a.


File: python.info,  Node: Exemplos<26>,  Next: Legacy interface,  Prev: HTTPErrorProcessor Objects,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.23 Exemplos
..................

In addition to the examples below, more examples are given in *note Como
buscar recursos da Internet usando o pacote urllib: 3c3e.

This example gets the python.org main page and displays the first 300
bytes of it:

     >>> import urllib.request
     >>> with urllib.request.urlopen('http://www.python.org/') as f:
     ...     print(f.read(300))
     ...
     b'<!doctype html>\n<!--[if lt IE 7]>   <html class="no-js ie6 lt-ie7 lt-ie8 lt-ie9">   <![endif]-->\n<!--[if IE 7]>      <html class="no-js ie7 lt-ie8 lt-ie9">          <![endif]-->\n<!--[if IE 8]>      <html class="no-js ie8 lt-ie9">

Note that urlopen returns a bytes object.  This is because there is no
way for urlopen to automatically determine the encoding of the byte
stream it receives from the HTTP server.  In general, a program will
decode the returned bytes object to string once it determines or guesses
the appropriate encoding.

The following HTML spec document,
‘https://html.spec.whatwg.org/#charset’, lists the various ways in which
an HTML or an XML document could have specified its encoding
information.

For additional information, see the W3C document:
‘https://www.w3.org/International/questions/qa-html-encoding-declarations’.

As the python.org website uses 'utf-8' encoding as specified in its meta
tag, we will use the same for decoding the bytes object:

     >>> with urllib.request.urlopen('http://www.python.org/') as f:
     ...     print(f.read(100).decode('utf-8'))
     ...
     <!doctype html>
     <!--[if lt IE 7]>   <html class="no-js ie6 lt-ie7 lt-ie8 lt-ie9">   <![endif]-->
     <!-

It is also possible to achieve the same result without using the *note
context manager: 5d4. approach:

     >>> import urllib.request
     >>> f = urllib.request.urlopen('http://www.python.org/')
     >>> try:
     ...     print(f.read(100).decode('utf-8'))
     ... finally:
     ...     f.close()
     ...
     <!doctype html>
     <!--[if lt IE 7]>   <html class="no-js ie6 lt-ie7 lt-ie8 lt-ie9">   <![endif]-->
     <!--

In the following example, we are sending a data-stream to the stdin of a
CGI and reading the data it returns to us.  Note that this example will
only work when the Python installation supports SSL.

     >>> import urllib.request
     >>> req = urllib.request.Request(url='https://localhost/cgi-bin/test.cgi',
     ...                       data=b'This data is passed to stdin of the CGI')
     >>> with urllib.request.urlopen(req) as f:
     ...     print(f.read().decode('utf-8'))
     ...
     Got Data: "This data is passed to stdin of the CGI"

The code for the sample CGI used in the above example is:

     #!/usr/bin/env python
     import sys
     data = sys.stdin.read()
     print('Content-type: text/plain\n\nGot Data: "%s"' % data)

Here is an example of doing a ‘PUT’ request using *note Request: 100e.:

     import urllib.request
     DATA = b'some data'
     req = urllib.request.Request(url='http://localhost:8080', data=DATA, method='PUT')
     with urllib.request.urlopen(req) as f:
         pass
     print(f.status)
     print(f.reason)

Use of Basic HTTP Authentication:

     import urllib.request
     # Create an OpenerDirector with support for Basic HTTP Authentication...
     auth_handler = urllib.request.HTTPBasicAuthHandler()
     auth_handler.add_password(realm='PDQ Application',
                               uri='https://mahler:8092/site-updates.py',
                               user='klem',
                               passwd='kadidd!ehopper')
     opener = urllib.request.build_opener(auth_handler)
     # ...and install it globally so it can be used with urlopen.
     urllib.request.install_opener(opener)
     with urllib.request.urlopen('http://www.example.com/login.html') as f:
         print(f.read().decode('utf-8'))

*note build_opener(): 3bce. provides many handlers by default, including
a *note ProxyHandler: 1b47.  By default, *note ProxyHandler: 1b47. uses
the environment variables named ‘<scheme>_proxy’, where ‘<scheme>’ is
the URL scheme involved.  For example, the ‘http_proxy’ environment
variable is read to obtain the HTTP proxy’s URL.

This example replaces the default *note ProxyHandler: 1b47. with one
that uses programmatically supplied proxy URLs, and adds proxy
authorization support with *note ProxyBasicAuthHandler: 3bdc.

     proxy_handler = urllib.request.ProxyHandler({'http': 'http://www.example.com:3128/'})
     proxy_auth_handler = urllib.request.ProxyBasicAuthHandler()
     proxy_auth_handler.add_password('realm', 'host', 'username', 'password')

     opener = urllib.request.build_opener(proxy_handler, proxy_auth_handler)
     # This time, rather than install the OpenerDirector, we use it directly:
     with opener.open('http://www.example.com/login.html') as f:
        print(f.read().decode('utf-8'))

Adicionando cabeçalhos HTTP:

Use the 'headers' argument to the *note Request: 100e. constructor, or:

     import urllib.request
     req = urllib.request.Request('http://www.example.com/')
     req.add_header('Referer', 'http://www.python.org/')
     # Customize the default User-Agent header value:
     req.add_header('User-Agent', 'urllib-example/0.1 (Contact: . . .)')
     with urllib.request.urlopen(req) as f:
         print(f.read().decode('utf-8'))

*note OpenerDirector: 3bcb. automatically adds a ‘User-Agent’ header to
every *note Request: 100e.  To change this:

     import urllib.request
     opener = urllib.request.build_opener()
     opener.addheaders = [('User-agent', 'Mozilla/5.0')]
     with opener.open('http://www.example.com/') as f:
        print(f.read().decode('utf-8'))

Also, remember that a few standard headers (‘Content-Length’,
‘Content-Type’ and ‘Host’) are added when the *note Request: 100e. is
passed to *note urlopen(): 293. (or *note OpenerDirector.open(): 1012.).
Here is an example session that uses the ‘GET’ method to retrieve a URL
containing parameters:

     >>> import urllib.request
     >>> import urllib.parse
     >>> params = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
     >>> url = "http://www.musi-cal.com/cgi-bin/query?%s" % params
     >>> with urllib.request.urlopen(url) as f:
     ...     print(f.read().decode('utf-8'))
     ...

The following example uses the ‘POST’ method instead.  Note that params
output from urlencode is encoded to bytes before it is sent to urlopen
as data:

     >>> import urllib.request
     >>> import urllib.parse
     >>> data = urllib.parse.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0})
     >>> data = data.encode('ascii')
     >>> with urllib.request.urlopen("http://requestb.in/xrbl82xr", data) as f:
     ...     print(f.read().decode('utf-8'))
     ...

The following example uses an explicitly specified HTTP proxy,
overriding environment settings:

     >>> import urllib.request
     >>> proxies = {'http': 'http://proxy.example.com:8080/'}
     >>> opener = urllib.request.FancyURLopener(proxies)
     >>> with opener.open("http://www.python.org") as f:
     ...     f.read().decode('utf-8')
     ...

The following example uses no proxies at all, overriding environment
settings:

     >>> import urllib.request
     >>> opener = urllib.request.FancyURLopener({})
     >>> with opener.open("http://www.python.org/") as f:
     ...     f.read().decode('utf-8')
     ...


File: python.info,  Node: Legacy interface,  Next: urllib request Restrictions,  Prev: Exemplos<26>,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.24 Legacy interface
..........................

The following functions and classes are ported from the Python 2 module
‘urllib’ (as opposed to ‘urllib2’).  They might become deprecated at
some point in the future.

 -- Função: urllib.request.urlretrieve (url, filename=None,
          reporthook=None, data=None)

     Copy a network object denoted by a URL to a local file.  If the URL
     points to a local file, the object will not be copied unless
     filename is supplied.  Return a tuple ‘(filename, headers)’ where
     'filename' is the local file name under which the object can be
     found, and 'headers' is whatever the ‘info()’ method of the object
     returned by *note urlopen(): 293. returned (for a remote object).
     Exceptions are the same as for *note urlopen(): 293.

     The second argument, if present, specifies the file location to
     copy to (if absent, the location will be a tempfile with a
     generated name).  The third argument, if present, is a callable
     that will be called once on establishment of the network connection
     and once after each block read thereafter.  The callable will be
     passed three arguments; a count of blocks transferred so far, a
     block size in bytes, and the total size of the file.  The third
     argument may be ‘-1’ on older FTP servers which do not return a
     file size in response to a retrieval request.

     The following example illustrates the most common usage scenario:

          >>> import urllib.request
          >>> local_filename, headers = urllib.request.urlretrieve('http://python.org/')
          >>> html = open(local_filename)
          >>> html.close()

     If the 'url' uses the ‘http:’ scheme identifier, the optional
     'data' argument may be given to specify a ‘POST’ request (normally
     the request type is ‘GET’).  The 'data' argument must be a bytes
     object in standard ‘application/x-www-form-urlencoded’ format; see
     the *note urllib.parse.urlencode(): ec4. function.

     *note urlretrieve(): 3c41. will raise *note ContentTooShortError:
     3c42. when it detects that the amount of data available was less
     than the expected amount (which is the size reported by a
     'Content-Length' header).  This can occur, for example, when the
     download is interrupted.

     The 'Content-Length' is treated as a lower bound: if there’s more
     data to read, urlretrieve reads more data, but if less data is
     available, it raises the exception.

     You can still retrieve the downloaded data in this case, it is
     stored in the ‘content’ attribute of the exception instance.

     If no 'Content-Length' header was supplied, urlretrieve can not
     check the size of the data it has downloaded, and just returns it.
     In this case you just have to assume that the download was
     successful.

 -- Função: urllib.request.urlcleanup ()

     Cleans up temporary files that may have been left behind by
     previous calls to *note urlretrieve(): 3c41.

 -- Classe: urllib.request.URLopener (proxies=None, **x509)

     Descontinuado desde a versão 3.3.

     Base class for opening and reading URLs.  Unless you need to
     support opening objects using schemes other than ‘http:’, ‘ftp:’,
     or ‘file:’, you probably want to use *note FancyURLopener: 30f.

     By default, the *note URLopener: 30e. class sends a ‘User-Agent’
     header of ‘urllib/VVV’, where 'VVV' is the *note urllib: 108.
     version number.  Applications can define their own ‘User-Agent’
     header by subclassing *note URLopener: 30e. or *note
     FancyURLopener: 30f. and setting the class attribute *note version:
     3c43. to an appropriate string value in the subclass definition.

     The optional 'proxies' parameter should be a dictionary mapping
     scheme names to proxy URLs, where an empty dictionary turns proxies
     off completely.  Its default value is ‘None’, in which case
     environmental proxy settings will be used if present, as discussed
     in the definition of *note urlopen(): 293, above.

     Additional keyword parameters, collected in 'x509', may be used for
     authentication of the client when using the ‘https:’ scheme.  The
     keywords 'key_file' and 'cert_file' are supported to provide an SSL
     key and certificate; both are needed to support client
     authentication.

     *note URLopener: 30e. objects will raise an *note OSError: 417.
     exception if the server returns an error code.

      -- Método: open (fullurl, data=None)

          Open 'fullurl' using the appropriate protocol.  This method
          sets up cache and proxy information, then calls the
          appropriate open method with its input arguments.  If the
          scheme is not recognized, *note open_unknown(): 3c45. is
          called.  The 'data' argument has the same meaning as the
          'data' argument of *note urlopen(): 293.

          This method always quotes 'fullurl' using *note quote(): bbb.

      -- Método: open_unknown (fullurl, data=None)

          Overridable interface to open unknown URL types.

      -- Método: retrieve (url, filename=None, reporthook=None,
               data=None)

          Retrieves the contents of 'url' and places it in 'filename'.
          The return value is a tuple consisting of a local filename and
          either an *note email.message.Message: 27c. object containing
          the response headers (for remote URLs) or ‘None’ (for local
          URLs).  The caller must then open and read the contents of
          'filename'.  If 'filename' is not given and the URL refers to
          a local file, the input filename is returned.  If the URL is
          non-local and 'filename' is not given, the filename is the
          output of *note tempfile.mktemp(): 19bb. with a suffix that
          matches the suffix of the last path component of the input
          URL.  If 'reporthook' is given, it must be a function
          accepting three numeric parameters: A chunk number, the
          maximum size chunks are read in and the total size of the
          download (-1 if unknown).  It will be called once at the start
          and after each chunk of data is read from the network.
          'reporthook' is ignored for local URLs.

          If the 'url' uses the ‘http:’ scheme identifier, the optional
          'data' argument may be given to specify a ‘POST’ request
          (normally the request type is ‘GET’).  The 'data' argument
          must in standard ‘application/x-www-form-urlencoded’ format;
          see the *note urllib.parse.urlencode(): ec4. function.

      -- Atributo: version

          Variable that specifies the user agent of the opener object.
          To get *note urllib: 108. to tell servers that it is a
          particular user agent, set this in a subclass as a class
          variable or in the constructor before calling the base
          constructor.

 -- Classe: urllib.request.FancyURLopener (...)

     Descontinuado desde a versão 3.3.

     *note FancyURLopener: 30f. subclasses *note URLopener: 30e.
     providing default handling for the following HTTP response codes:
     301, 302, 303, 307 and 401.  For the 30x response codes listed
     above, the ‘Location’ header is used to fetch the actual URL. For
     401 response codes (authentication required), basic HTTP
     authentication is performed.  For the 30x response codes, recursion
     is bounded by the value of the 'maxtries' attribute, which defaults
     to 10.

     For all other response codes, the method *note
     http_error_default(): 3bfb. is called which you can override in
     subclasses to handle the error appropriately.

          Nota: According to the letter of RFC 2616(1), 301 and 302
          responses to POST requests must not be automatically
          redirected without confirmation by the user.  In reality,
          browsers do allow automatic redirection of these responses,
          changing the POST to a GET, and *note urllib: 108. reproduces
          this behaviour.

     The parameters to the constructor are the same as those for *note
     URLopener: 30e.

          Nota: When performing basic authentication, a *note
          FancyURLopener: 30f. instance calls its *note
          prompt_user_passwd(): 3c46. method.  The default
          implementation asks the users for the required information on
          the controlling terminal.  A subclass may override this method
          to support more appropriate behavior if needed.

     The *note FancyURLopener: 30f. class offers one additional method
     that should be overloaded to provide the appropriate behavior:

      -- Método: prompt_user_passwd (host, realm)

          Return information needed to authenticate the user at the
          given host in the specified security realm.  The return value
          should be a tuple, ‘(user, password)’, which can be used for
          basic authentication.

          The implementation prompts for this information on the
          terminal; an application should override this method to use an
          appropriate interaction model in the local environment.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2616.html


File: python.info,  Node: urllib request Restrictions,  Prev: Legacy interface,  Up: urllib request — Biblioteca extensível para abrir URLs

5.22.4.25 ‘urllib.request’ Restrictions
.......................................

   * Currently, only the following protocols are supported: HTTP
     (versions 0.9 and 1.0), FTP, local files, and data URLs.

     Alterado na versão 3.4: Added support for data URLs.

   * The caching feature of *note urlretrieve(): 3c41. has been disabled
     until someone finds the time to hack proper processing of
     Expiration time headers.

   * There should be a function to query whether a particular URL is in
     the cache.

   * For backward compatibility, if a URL appears to point to a local
     file but the file can’t be opened, the URL is re-interpreted using
     the FTP protocol.  This can sometimes cause confusing error
     messages.

   * The *note urlopen(): 293. and *note urlretrieve(): 3c41. functions
     can cause arbitrarily long delays while waiting for a network
     connection to be set up.  This means that it is difficult to build
     an interactive web client using these functions without using
     threads.

   * The data returned by *note urlopen(): 293. or *note urlretrieve():
     3c41. is the raw data returned by the server.  This may be binary
     data (such as an image), plain text or (for example) HTML. The HTTP
     protocol provides type information in the reply header, which can
     be inspected by looking at the ‘Content-Type’ header.  If the
     returned data is HTML, you can use the module *note html.parser:
     6d. to parse it.

   * The code handling the FTP protocol cannot differentiate between a
     file and a directory.  This can lead to unexpected behavior when
     attempting to read a URL that points to a file that is not
     accessible.  If the URL ends in a ‘/’, it is assumed to refer to a
     directory and will be handled accordingly.  But if an attempt to
     read a file leads to a 550 error (meaning the URL cannot be found
     or is not accessible, often for permission reasons), then the path
     is treated as a directory in order to handle the case when a
     directory is specified by a URL but the trailing ‘/’ has been left
     off.  This can cause misleading results when you try to fetch a
     file whose read permissions make it inaccessible; the FTP code will
     try to read it, fail with a 550 error, and then perform a directory
     listing for the unreadable file.  If fine-grained control is
     needed, consider using the *note ftplib: 5e. module, subclassing
     *note FancyURLopener: 30f, or changing '_urlopener' to meet your
     needs.


File: python.info,  Node: urllib response — Response classes used by urllib,  Next: urllib parse — Analisa URLs para componentes,  Prev: urllib request — Biblioteca extensível para abrir URLs,  Up: Protocolos de Internet e Suporte

5.22.5 ‘urllib.response’ — Response classes used by urllib
----------------------------------------------------------

The *note urllib.response: 10c. module defines functions and classes
which define a minimal file-like interface, including ‘read()’ and
‘readline()’.  Functions defined by this module are used internally by
the *note urllib.request: 10b. module.  The typical response object is a
*note urllib.response.addinfourl: 3bc8. instance:

 -- Classe: urllib.response.addinfourl

      -- Atributo: url

          URL of the resource retrieved, commonly used to determine if a
          redirect was followed.

      -- Atributo: headers

          Returns the headers of the response in the form of an *note
          EmailMessage: 27b. instance.

      -- Atributo: status

          Adicionado na versão 3.9.

          Status code returned by server.

      -- Método: geturl ()

          Descontinuado desde a versão 3.9: Deprecated in favor of *note
          url: 3c49.

      -- Método: info ()

          Descontinuado desde a versão 3.9: Deprecated in favor of *note
          headers: 3c4a.

      -- Atributo: code

          Descontinuado desde a versão 3.9: Deprecated in favor of *note
          status: 3c4b.

      -- Método: getcode ()

          Descontinuado desde a versão 3.9: Deprecated in favor of *note
          status: 3c4b.


File: python.info,  Node: urllib parse — Analisa URLs para componentes,  Next: urllib error — Classes de exceção levantadas por urllib request,  Prev: urllib response — Response classes used by urllib,  Up: Protocolos de Internet e Suporte

5.22.6 ‘urllib.parse’ — Analisa URLs para componentes
-----------------------------------------------------

'Código-fonte:' Lib/urllib/parse.py(1)

__________________________________________________________________

Este módulo define uma interface padrão para quebrar strings de Uniform
Resource Locator (URL) em componentes (esquema de endereçamento, local
de rede, caminho etc.), para combinar os componentes de volta em uma
string de URL e para converter uma “URL relativo” em uma URL absoluta
dado uma “URL base”.

O módulo foi projetado para corresponder ao RFC da internet sobre
Localizadores de Recursos Uniformes Relativos, ou URL relativa.  Ele tem
suporte aos seguintes esquemas de URL: ‘file’, ‘ftp’, ‘gopher’, ‘hdl’,
‘http’, ‘https’, ‘imap’, ‘itms-services’, ‘mailto’, ‘mms’, ‘news’,
‘nntp’, ‘prospero’, ‘rsync’, ‘rtsp’, ‘rtsps’,''rtspu'', ‘sftp’, ‘shttp’,
‘sip’, ‘sips’, ‘snews’, ‘svn’, ‘svn+ssh’, ‘telnet’, ‘wais’, ‘ws’, ‘wss’.

A inclusão do esquema de URL ‘itms-services’ pode impedir que uma
aplicação passe pelo processo de revisão da App Store da Apple para as
App Stores do macOS e iOS. O tratamento do esquema ‘itms-services’ é
sempre removido no iOS; no macOS, ele 'pode' ser removido se o CPython
tiver sido criado com a opção *note -with-app-store-compliance: 16de.

O módulo *note urllib.parse: 10a. define funções que se enquadram em
duas grandes categorias: análise de URL e colocação de aspas na URL.
Eles são abordados em detalhes nas seções a seguir.

As funções deste módulo usam o termo descontinuado ‘netloc’ (ou
‘net_loc’), que foi introduzido no RFC 1808(2).  No entanto, este termo
foi descontinuado pelo RFC 3986(3), que introduziu o termo ‘authority’
como seu substituto.  O uso de ‘netloc’ continua para compatibilidade
com versões anteriores.

* Menu:

* Análise de URL::
* Segurança ao analisar URLs::
* Analisando bytes codificados em ASCII::
* Structured Parse Results::
* URL Quoting::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/urllib/parse.py

   (2) https://datatracker.ietf.org/doc/html/rfc1808.html

   (3) https://datatracker.ietf.org/doc/html/rfc3986.html


File: python.info,  Node: Análise de URL,  Next: Segurança ao analisar URLs,  Up: urllib parse — Analisa URLs para componentes

5.22.6.1 Análise de URL
.......................

As funções de análise de URL se concentram na divisão de uma string de
URL em seus componentes ou na combinação de componentes de URL em uma
string de URL.

 -- Função: urllib.parse.urlparse (urlstring, scheme='',
          allow_fragments=True)

     Analisa uma URL em seis componentes, retornando uma *note tupla
     nomeada: 64e. de 6 itens.  Isso corresponde à estrutura geral de
     uma URL: ‘scheme://netloc/path;parameters?query#fragment’.  Cada
     item da tupla é uma string, possivelmente vazia.  Os componentes
     não são divididos em partes menores (por exemplo, o netloc, ou
     local da rede, é uma única string) e escapes % não são expandidos.
     Os delimitadores conforme mostrado acima não fazem parte do
     resultado, exceto por uma barra inicial no componente 'path', que é
     retido se estiver presente.  Por exemplo:

          >>> from urllib.parse import urlparse
          >>> urlparse("scheme://netloc/path;parameters?query#fragment")
          ParseResult(scheme='scheme', netloc='netloc', path='/path;parameters', params='',
                      query='query', fragment='fragment')
          >>> o = urlparse("http://docs.python.org:80/3/library/urllib.parse.html?"
          ...              "highlight=params#url-parsing")
          >>> o
          ParseResult(scheme='http', netloc='docs.python.org:80',
                      path='/3/library/urllib.parse.html', params='',
                      query='highlight=params', fragment='url-parsing')
          >>> o.scheme
          'http'
          >>> o.netloc
          'docs.python.org:80'
          >>> o.hostname
          'docs.python.org'
          >>> o.port
          80
          >>> o._replace(fragment="").geturl()
          'http://docs.python.org:80/3/library/urllib.parse.html?highlight=params'

     Seguindo as especificações de sintaxe em RFC 1808(1), o urlparse
     reconhece um netloc apenas se for introduzido apropriadamente por
     ‘//’.  Caso contrário, presume-se que a entrada seja uma URL
     relativa e, portanto, comece com um componente de caminho.

          >>> from urllib.parse import urlparse
          >>> urlparse('//www.cwi.nl:80/%7Eguido/Python.html')
          ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
                      params='', query='', fragment='')
          >>> urlparse('www.cwi.nl/%7Eguido/Python.html')
          ParseResult(scheme='', netloc='', path='www.cwi.nl/%7Eguido/Python.html',
                      params='', query='', fragment='')
          >>> urlparse('help/Python.html')
          ParseResult(scheme='', netloc='', path='help/Python.html', params='',
                      query='', fragment='')

     O argumento 'scheme' fornece o esquema de endereçamento padrão, a
     ser usado apenas se o URL não especificar um.  Deve ser do mesmo
     tipo (texto ou bytes) que 'urlstring', exceto que o valor padrão
     ‘''’ é sempre permitido e é automaticamente convertido para ‘b''’
     se apropriado.

     Se o argumento 'allow_fragments' for falso, os identificadores de
     fragmento não serão reconhecidos.  Em vez disso, eles são
     analisados como parte do caminho, parâmetros ou componente de
     consulta, e ‘fragment’ é definido como a string vazia no valor de
     retorno.

     O valor de retorno é uma *note tupla nomeada: 64e, o que significa
     que seus itens podem ser acessados por índice ou como atributos
     nomeados, que são:

     Atributo               Índice      Valor                         Valor, se não presente
                                                                      
     ----------------------------------------------------------------------------------------------
                                                                      
     ‘scheme’               0           Especificador do esquema da   parâmetro 'scheme'
                                        URL                           
                                        
                                                                      
     ‘netloc’               1           Parte da localização na       string vazia
                                        rede                          
                                        
                                                                      
     ‘path’                 2           Caminho hierárquico           string vazia
                                                                      
                                                                      
     ‘params’               3           Parâmetros para o último      string vazia
                                        elemento de caminho           
                                        
                                                                      
     ‘query’                4           Componente da consulta        string vazia
                                                                      
                                                                      
     ‘fragment’             5           Identificador do fragmento    string vazia
                                                                      
                                                                      
     ‘username’                         Nome do usuário               *note None: 675.
                                                                      
                                                                      
     ‘password’                         Senha                         *note None: 675.
                                                                      
                                                                      
     ‘hostname’                         Nome de máquina (em           *note None: 675.
                                        minúsculo)                    
                                        
                                                                      
     ‘port’                             Número da porta como          *note None: 675.
                                        inteiro, se presente          
                                        

     Ler o atributo ‘port’ irá levantar uma *note ValueError: 202. se
     uma porta inválida for especificada no URL. Veja a seção *note
     Structured Parse Results: 3c54. para mais informações sobre o
     objeto de resultado.

     Colchetes sem correspondência no atributo ‘netloc’ levantará uma
     *note ValueError: 202.

     Caracteres no atributo ‘netloc’ que se decompõem sob a normalização
     NFKC (como usado pela codificação IDNA) em qualquer um dos ‘/’,
     ‘?’, ‘#’, ‘@’ ou ‘:’ vai levantar uma *note ValueError: 202.  Se a
     URL for decomposta antes da análise, nenhum erro será levantado.

     Como é o caso com todas as tuplas nomeadas, a subclasse tem alguns
     métodos e atributos adicionais que são particularmente úteis.  Um
     desses métodos é ‘_replace()’.  O método ‘_replace()’ retornará um
     novo objeto ParseResult substituindo os campos especificados por
     novos valores.

          >>> from urllib.parse import urlparse
          >>> u = urlparse('//www.cwi.nl:80/%7Eguido/Python.html')
          >>> u
          ParseResult(scheme='', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
                      params='', query='', fragment='')
          >>> u._replace(scheme='http')
          ParseResult(scheme='http', netloc='www.cwi.nl:80', path='/%7Eguido/Python.html',
                      params='', query='', fragment='')

          Aviso: *note urlparse(): 30d. não realiza validação.  Veja
          *note Segurança ao analisar URLs: 3c55. para detalhes.

     Alterado na versão 3.2: Adicionados recursos de análise de URL
     IPv6.

     Alterado na versão 3.3: O fragmento agora é analisado para todos os
     esquemas de URL (a menos que 'allow_fragments' seja falso), de
     acordo com a RFC 3986(2).  Anteriormente, existia uma lista de
     permitidos de esquemas que suportam fragmentos.

     Alterado na versão 3.6: Números de porta fora do intervalo agora
     levantam *note ValueError: 202, em vez de retornar *note None: 675.

     Alterado na versão 3.8: Os caracteres que afetam a análise de
     netloc sob normalização NFKC agora levantarão *note ValueError:
     202.

 -- Função: urllib.parse.parse_qs (qs, keep_blank_values=False,
          strict_parsing=False, encoding='utf-8', errors='replace',
          max_num_fields=None, separator='&')

     Analisa uma string de consulta fornecida como um argumento de
     string (dados do tipo ‘application/x-www-form-urlencoded’).  Os
     dados são retornados como um dicionário.  As chaves de dicionário
     são os nomes de variáveis de consulta exclusivos e os valores são
     listas de valores para cada nome.

     O argumento opcional 'keep_blank_values' é um sinalizador que
     indica se os valores em branco em consultas codificadas por
     porcentagem devem ser tratados como strings em branco.  Um valor
     verdadeiro indica que os espaços em branco devem ser mantidos como
     strings em branco.  O valor falso padrão indica que os valores em
     branco devem ser ignorados e tratados como se não tivessem sido
     incluídos.

     O argumento opcional 'strict_parsing' é um sinalizador que indica o
     que fazer com os erros de análise.  Se falso (padrão), os erros são
     ignorados silenciosamente.  Se verdadeiro, os erros levantam uma
     exceção *note ValueError: 202.

     Os parâmetros opcionais 'encoding' e 'errors' especificam como
     decodificar sequências codificadas em porcentagem em caracteres
     Unicode, conforme aceito pelo método *note bytes.decode(): 8dc.

     O argumento opcional 'max_num_fields' é o número máximo de campos a
     serem lidos.  Se definido, então levanta um *note ValueError: 202.
     se houver mais de 'max_num_fields' campos lidos.

     O argumento opcional 'separador' é o símbolo a ser usado para
     separar os argumentos da consulta.  O padrão é ‘&’.

     Use a função *note urllib.parse.urlencode(): ec4. (com o parâmetro
     ‘doseq’ definido como ‘True’) para converter esses dicionários em
     strings de consulta.

     Alterado na versão 3.2: Adicionado os parâmetros 'encoding' e
     'errors'.

     Alterado na versão 3.8: Adicionado o parâmetro 'max_num_fields'.

     Alterado na versão 3.10: Adicionado parâmetro 'separator' com o
     valor padrão de ‘&’.  Versões do Python anteriores ao Python 3.10
     permitiam o uso de ‘;’ e ‘&’ como separador de parâmetro de
     consulta.  Isso foi alterado para permitir apenas uma única chave
     separadora, com ‘&’ como o separador padrão.

 -- Função: urllib.parse.parse_qsl (qs, keep_blank_values=False,
          strict_parsing=False, encoding='utf-8', errors='replace',
          max_num_fields=None, separator='&')

     Analisa uma string de consulta fornecida como um argumento de
     string (dados do tipo ‘application/x-www-form-urlencoded’).  Os
     dados são retornados como uma lista de pares de nome e valor.

     O argumento opcional 'keep_blank_values' é um sinalizador que
     indica se os valores em branco em consultas codificadas por
     porcentagem devem ser tratados como strings em branco.  Um valor
     verdadeiro indica que os espaços em branco devem ser mantidos como
     strings em branco.  O valor falso padrão indica que os valores em
     branco devem ser ignorados e tratados como se não tivessem sido
     incluídos.

     O argumento opcional 'strict_parsing' é um sinalizador que indica o
     que fazer com os erros de análise.  Se falso (padrão), os erros são
     ignorados silenciosamente.  Se verdadeiro, os erros levantam uma
     exceção *note ValueError: 202.

     Os parâmetros opcionais 'encoding' e 'errors' especificam como
     decodificar sequências codificadas em porcentagem em caracteres
     Unicode, conforme aceito pelo método *note bytes.decode(): 8dc.

     O argumento opcional 'max_num_fields' é o número máximo de campos a
     serem lidos.  Se definido, então levanta um *note ValueError: 202.
     se houver mais de 'max_num_fields' campos lidos.

     O argumento opcional 'separador' é o símbolo a ser usado para
     separar os argumentos da consulta.  O padrão é ‘&’.

     Use a função *note urllib.parse.urlencode(): ec4. para converter
     essas listas pares de strings de consulta.

     Alterado na versão 3.2: Adicionado os parâmetros 'encoding' e
     'errors'.

     Alterado na versão 3.8: Adicionado o parâmetro 'max_num_fields'.

     Alterado na versão 3.10: Adicionado parâmetro 'separator' com o
     valor padrão de ‘&’.  Versões do Python anteriores ao Python 3.10
     permitiam o uso de ‘;’ e ‘&’ como separador de parâmetro de
     consulta.  Isso foi alterado para permitir apenas uma única chave
     separadora, com ‘&’ como o separador padrão.

 -- Função: urllib.parse.urlunparse (parts)

     Constrói uma URL a partir de uma tupla conforme retornada por
     ‘urlparse()’.  O argumento 'parts' pode ser qualquer iterável de
     seis itens.  Isso pode resultar em uma URL ligeiramente diferente,
     mas equivalente, se a URL que foi analisada originalmente tiver
     delimitadores desnecessários (por exemplo, um ‘?’ com uma consulta
     vazia; o RFC afirma que eles são equivalentes).

 -- Função: urllib.parse.urlsplit (urlstring, scheme='',
          allow_fragments=True)

     Isto é similar a *note urlparse(): 30d, mas não divide os
     parâmetros da URL. Isto deve ser usado geralmente em vez de *note
     urlparse(): 30d. se a sintaxe de URL mais recente permitindo que
     parâmetros sejam aplicados a cada segmento da porção 'path' da URL
     (veja RFC 2396(3)) for desejada.  Uma função separada é necessária
     para separar os segmentos de caminho e parâmetros.  Esta função
     retorna uma *note tupla nomeada: 64e. de 5 itens:

          (esquema de endereçamento, local de rede, caminho, consulta, identificador de fragmento).

     O valor de retorno é uma *note tupla nomeada: 64e, seus itens podem
     ser acessados por índice ou como atributos nomeados:

     Atributo               Índice      Valor                         Valor, se não presente
                                                                      
     --------------------------------------------------------------------------------------------
                                                                      
     ‘scheme’               0           Especificador do esquema da   parâmetro 'scheme'
                                        URL                           
                                        
                                                                      
     ‘netloc’               1           Parte da localização na       string vazia
                                        rede                          
                                        
                                                                      
     ‘path’                 2           Caminho hierárquico           string vazia
                                                                      
                                                                      
     ‘query’                3           Componente da consulta        string vazia
                                                                      
                                                                      
     ‘fragment’             4           Identificador do fragmento    string vazia
                                                                      
                                                                      
     ‘username’                         Nome do usuário               *note None: 675.
                                                                      
                                                                      
     ‘password’                         Senha                         *note None: 675.
                                                                      
                                                                      
     ‘hostname’                         Nome de máquina (em           *note None: 675.
                                        minúsculo)                    
                                        
                                                                      
     ‘port’                             Número da porta como          *note None: 675.
                                        inteiro, se presente          
                                        

     Ler o atributo ‘port’ irá levantar uma *note ValueError: 202. se
     uma porta inválida for especificada no URL. Veja a seção *note
     Structured Parse Results: 3c54. para mais informações sobre o
     objeto de resultado.

     Colchetes sem correspondência no atributo ‘netloc’ levantará uma
     *note ValueError: 202.

     Caracteres no atributo ‘netloc’ que se decompõem sob a normalização
     NFKC (como usado pela codificação IDNA) em qualquer um dos ‘/’,
     ‘?’, ‘#’, ‘@’ ou ‘:’ vai levantar uma *note ValueError: 202.  Se a
     URL for decomposta antes da análise, nenhum erro será levantado.

     Seguindo algumas das especificações WHATWG(4) que atualizam o RFC
     3986, os caracteres de controle C0 e espaço iniciais são removidos
     da URL. Os caracteres ‘\n’, ‘\r’ e tab ‘\t’ são removidos da URL em
     qualquer posição.

          Aviso: *note urlsplit(): d61. não executa validação.  Veja
          *note Segurança ao analisar URLs: 3c55. para detalhes.

     Alterado na versão 3.6: Números de porta fora do intervalo agora
     levantam *note ValueError: 202, em vez de retornar *note None: 675.

     Alterado na versão 3.8: Os caracteres que afetam a análise de
     netloc sob normalização NFKC agora levantarão *note ValueError:
     202.

     Alterado na versão 3.10: Caracteres de nova linha e tabulação ASCII
     são removidos do URL.

     Alterado na versão 3.12: Os caracteres iniciais de espaço e de
     controle WHATWG C0 são removidos do URL.

 -- Função: urllib.parse.urlunsplit (parts)

     Combina os elementos de uma tupla conforme retornado por *note
     urlsplit(): d61. em uma URL completa como uma string.  O argumento
     'parts' pode ser qualquer iterável de cinco itens.  Isso pode
     resultar em uma URL ligeiramente diferente, mas equivalente, se a
     URL que foi analisada originalmente tiver delimitadores
     desnecessários (por exemplo, um ?  com uma consulta vazia; o RFC
     afirma que eles são equivalentes).

 -- Função: urllib.parse.urljoin (base, url, allow_fragments=True)

     Constrói uma URL completa (“absoluta”) combinando uma “URL base”
     ('base') com outra URL ('url').  Informalmente, isso usa
     componentes da URL base, em particular o esquema de endereçamento,
     o local da rede e (parte do) caminho, para fornecer componentes
     ausentes na URL relativa.  Por exemplo:

          >>> from urllib.parse import urljoin
          >>> urljoin('http://www.cwi.nl/%7Eguido/Python.html', 'FAQ.html')
          'http://www.cwi.nl/%7Eguido/FAQ.html'

     O argumento 'allow_fragments' tem o mesmo significado e padrão que
     *note urlparse(): 30d.

          Nota: Se 'url' for uma URL absoluta (ou seja, começa com ‘//’
          ou ‘scheme://’), o nome do host e/ou esquema da 'url' estarão
          presentes no resultado.  Por exemplo:

               >>> urljoin('http://www.cwi.nl/%7Eguido/Python.html',
               ...         '//www.python.org/%7Eguido')
               'http://www.python.org/%7Eguido'

          Se você não quiser esse comportamento, pré-processe a 'url'
          com *note urlsplit(): d61. e *note urlunsplit(): 16c0,
          removendo possíveis partes 'scheme' e 'netloc'.

          Aviso: Como uma URL absoluta pode ser passada como o parâmetro
          ‘url’, geralmente 'não é seguro' usar ‘urljoin’ com uma ‘url’
          controlada pelo invasor.  Por exemplo, em
          ‘urljoin("https://website.com/users/", username)’, se
          ‘username’ puder conter uma URL absoluta, o resultado de
          ‘urljoin’ será a URL absoluta.

     Alterado na versão 3.5: Comportamento atualizado para corresponder
     à semântica definida no RFC 3986(5).

 -- Função: urllib.parse.urldefrag (url)

     Se 'url' contiver um identificador de fragmento, retorna uma versão
     modificada de 'url' sem identificador de fragmento, e o
     identificador de fragmento como uma string separada.  Se não houver
     identificador de fragmento em 'url', retorna 'url' não modificado e
     uma string vazia.

     O valor de retorno é uma *note tupla nomeada: 64e, seus itens podem
     ser acessados por índice ou como atributos nomeados:

     Atributo               Índice      Valor                         Valor, se não presente
                                                                      
     --------------------------------------------------------------------------------------------
                                                                      
     ‘url’                  0           URL com nenhum fragmento      string vazia
                                                                      
                                                                      
     ‘fragment’             1           Identificador do fragmento    string vazia
                                                                      

     Veja a seção *note Structured Parse Results: 3c54. para obter mais
     informações sobre o objeto de resultado.

     Alterado na versão 3.2: O resultado é um objeto estruturado em vez
     de uma simples tupla de 2 elementos.

 -- Função: urllib.parse.unwrap (url)

     Extrai a URL de uma URL encapsulada (ou seja, uma string formatada
     como ‘<URL:esquema://host/caminho>’, ‘<esquema://host/caminho>’,
     ‘URL:esquema://host/caminho’ ou ‘esquema://host/caminho’).  Se
     'url' não for uma URL encapsulada, ela será retornada sem
     alterações.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc1808.html

   (2) https://datatracker.ietf.org/doc/html/rfc3986.html

   (3) https://datatracker.ietf.org/doc/html/rfc2396.html

   (4) https://url.spec.whatwg.org/#concept-basic-url-parser

   (5) https://datatracker.ietf.org/doc/html/rfc3986.html


File: python.info,  Node: Segurança ao analisar URLs,  Next: Analisando bytes codificados em ASCII,  Prev: Análise de URL,  Up: urllib parse — Analisa URLs para componentes

5.22.6.2 Segurança ao analisar URLs
...................................

As APIs *note urlsplit(): d61. e *note urlparse(): 30d. não realizam
'validação' de entradas.  Elas podem não levantar erros em entradas que
outras aplicações consideram inválidas.  Elas também podem ter sucesso
em algumas entradas que podem não ser consideradas URLs em outros
lugares.  Seu propósito é para funcionalidade prática em vez de pureza.

Em vez de levantar uma exceção em uma entrada incomum, eles podem
retornar algumas partes do componente como strings vazias.  Ou os
componentes podem conter mais do que talvez devessem.

Recomendamos que os usuários dessas APIs, onde os valores podem ser
usados em qualquer lugar com implicações de segurança, codifiquem
defensivamente.  Faça alguma verificação dentro do seu código antes de
confiar em uma parte do componente retornada.  Esse ‘esquema’ faz
sentido?  Esse ‘caminho’ sensato?  Há algo estranho sobre esse
‘hostname’?  etc.

O que constitui uma URL não é universalmente bem definido.  Diferentes
aplicações têm diferentes necessidades e restrições desejadas.  Por
exemplo, a especificação WHATWG(1) descreve o que os clientes web
voltados para o usuário, como um navegador web, exigem.  Por outro lado,
RFC 3986(2) é mais geral.  Essas funções incorporam alguns aspectos de
ambos, mas não podem ser reivindicadas como compatíveis com nenhum
deles.  As APIs e o código de usuário existente com expectativas sobre
comportamentos específicos são anteriores a ambos os padrões, o que nos
leva a ser muito cautelosos ao fazer alterações no comportamento da API.

   ---------- Footnotes ----------

   (1) https://url.spec.whatwg.org/#concept-basic-url-parser

   (2) https://datatracker.ietf.org/doc/html/rfc3986.html


File: python.info,  Node: Analisando bytes codificados em ASCII,  Next: Structured Parse Results,  Prev: Segurança ao analisar URLs,  Up: urllib parse — Analisa URLs para componentes

5.22.6.3 Analisando bytes codificados em ASCII
..............................................

As funções de análise de URL foram originalmente projetadas para operar
somente em strings de caracteres.  Na prática, é útil ser capaz de
manipular URLs corretamente citadas e codificadas como sequências de
bytes ASCII. Consequentemente, todas as funções de análise de URL neste
módulo operam em objetos *note bytes: 1c2. e *note bytearray: 2ea. além
de objetos *note str: 44c.

Se dados *note str: 44c. forem passados, o resultado também conterá
apenas dados *note str: 44c.  Se dados *note bytes: 1c2. ou *note
bytearray: 2ea. forem passados, o resultado conterá apenas dados *note
bytes: 1c2.

Tentar misturar dados *note str: 44c. com *note bytes: 1c2. ou *note
bytearray: 2ea. em uma única chamada de função resultará em uma *note
TypeError: 2c3. sendo levantada, enquanto tentar passar valores de bytes
não-ASCII acionará *note UnicodeDecodeError: a1d.

Para prover uma conversão mais fácil de objetos de resultado entre *note
str: 44c. e *note bytes: 1c2, todos os valores de retorno das funções de
análise de URL fornecem um método ‘encode()’ (quando o resultado contém
dados *note str: 44c.) ou um método ‘decode()’ (quando o resultado
contém dados *note bytes: 1c2.).  As assinaturas desses métodos
correspondem às dos métodos *note str: 44c. e *note bytes: 1c2.
correspondentes (exceto que a codificação padrão é ‘'ascii'’ em vez de
‘'utf-8'’).  Cada um produz um valor de um tipo correspondente que
contém dados *note bytes: 1c2. (para métodos ‘encode()’) ou dados *note
str: 44c. (para métodos ‘decode()’).

Os aplicações que precisam operar em URLs possivelmente envolta em aspas
de forma incorreta, e que podem conter dados não ASCII, precisarão fazer
sua própria decodificação de bytes para caracteres antes de invocar os
métodos de análise de URL.

O comportamento descrito nesta seção se aplica somente às funções de
análise de URL. As funções de aplicação de aspas em URL usam suas
próprias regras ao produzir ou consumir sequências de bytes, conforme
detalhado na documentação das funções de citação de URL individuais.

Alterado na versão 3.2: As funções de análise de URL agora aceitam
sequências de bytes codificadas em ASCII


File: python.info,  Node: Structured Parse Results,  Next: URL Quoting,  Prev: Analisando bytes codificados em ASCII,  Up: urllib parse — Analisa URLs para componentes

5.22.6.4 Structured Parse Results
.................................

The result objects from the *note urlparse(): 30d, *note urlsplit():
d61. and *note urldefrag(): 1289. functions are subclasses of the *note
tuple: 370. type.  These subclasses add the attributes listed in the
documentation for those functions, the encoding and decoding support
described in the previous section, as well as an additional method:

 -- Método: urllib.parse.SplitResult.geturl ()

     Return the re-combined version of the original URL as a string.
     This may differ from the original URL in that the scheme may be
     normalized to lower case and empty components may be dropped.
     Specifically, empty parameters, queries, and fragment identifiers
     will be removed.

     For *note urldefrag(): 1289. results, only empty fragment
     identifiers will be removed.  For *note urlsplit(): d61. and *note
     urlparse(): 30d. results, all noted changes will be made to the URL
     returned by this method.

     The result of this method remains unchanged if passed back through
     the original parsing function:

          >>> from urllib.parse import urlsplit
          >>> url = 'HTTP://www.Python.org/doc/#'
          >>> r1 = urlsplit(url)
          >>> r1.geturl()
          'http://www.Python.org/doc/'
          >>> r2 = urlsplit(r1.geturl())
          >>> r2.geturl()
          'http://www.Python.org/doc/'

The following classes provide the implementations of the structured
parse results when operating on *note str: 44c. objects:

 -- Classe: urllib.parse.DefragResult (url, fragment)

     Concrete class for *note urldefrag(): 1289. results containing
     *note str: 44c. data.  The ‘encode()’ method returns a *note
     DefragResultBytes: 3c5c. instance.

     Adicionado na versão 3.2.

 -- Classe: urllib.parse.ParseResult (scheme, netloc, path, params,
          query, fragment)

     Concrete class for *note urlparse(): 30d. results containing *note
     str: 44c. data.  The ‘encode()’ method returns a *note
     ParseResultBytes: 3c5e. instance.

 -- Classe: urllib.parse.SplitResult (scheme, netloc, path, query,
          fragment)

     Concrete class for *note urlsplit(): d61. results containing *note
     str: 44c. data.  The ‘encode()’ method returns a *note
     SplitResultBytes: 3c60. instance.

The following classes provide the implementations of the parse results
when operating on *note bytes: 1c2. or *note bytearray: 2ea. objects:

 -- Classe: urllib.parse.DefragResultBytes (url, fragment)

     Concrete class for *note urldefrag(): 1289. results containing
     *note bytes: 1c2. data.  The ‘decode()’ method returns a *note
     DefragResult: 3c5b. instance.

     Adicionado na versão 3.2.

 -- Classe: urllib.parse.ParseResultBytes (scheme, netloc, path, params,
          query, fragment)

     Concrete class for *note urlparse(): 30d. results containing *note
     bytes: 1c2. data.  The ‘decode()’ method returns a *note
     ParseResult: 3c5d. instance.

     Adicionado na versão 3.2.

 -- Classe: urllib.parse.SplitResultBytes (scheme, netloc, path, query,
          fragment)

     Concrete class for *note urlsplit(): d61. results containing *note
     bytes: 1c2. data.  The ‘decode()’ method returns a *note
     SplitResult: 3c5f. instance.

     Adicionado na versão 3.2.


File: python.info,  Node: URL Quoting,  Prev: Structured Parse Results,  Up: urllib parse — Analisa URLs para componentes

5.22.6.5 URL Quoting
....................

The URL quoting functions focus on taking program data and making it
safe for use as URL components by quoting special characters and
appropriately encoding non-ASCII text.  They also support reversing
these operations to recreate the original data from the contents of a
URL component if that task isn’t already covered by the URL parsing
functions above.

 -- Função: urllib.parse.quote (string, safe='/', encoding=None,
          errors=None)

     Replace special characters in 'string' using the ‘%XX’ escape.
     Letters, digits, and the characters ‘'_.-~'’ are never quoted.  By
     default, this function is intended for quoting the path section of
     a URL. The optional 'safe' parameter specifies additional ASCII
     characters that should not be quoted — its default value is ‘'/'’.

     'string' may be either a *note str: 44c. or a *note bytes: 1c2.
     object.

     Alterado na versão 3.7: Moved from RFC 2396(1) to RFC 3986(2) for
     quoting URL strings.  “~” is now included in the set of unreserved
     characters.

     The optional 'encoding' and 'errors' parameters specify how to deal
     with non-ASCII characters, as accepted by the *note str.encode():
     8db. method.  'encoding' defaults to ‘'utf-8'’.  'errors' defaults
     to ‘'strict'’, meaning unsupported characters raise a *note
     UnicodeEncodeError: 677.  'encoding' and 'errors' must not be
     supplied if 'string' is a *note bytes: 1c2, or a *note TypeError:
     2c3. is raised.

     Note that ‘quote(string, safe, encoding, errors)’ is equivalent to
     ‘quote_from_bytes(string.encode(encoding, errors), safe)’.

     Example: ‘quote('/El Niño/')’ yields ‘'/El%20Ni%C3%B1o/'’.

 -- Função: urllib.parse.quote_plus (string, safe='', encoding=None,
          errors=None)

     Like *note quote(): bbb, but also replace spaces with plus signs,
     as required for quoting HTML form values when building up a query
     string to go into a URL. Plus signs in the original string are
     escaped unless they are included in 'safe'.  It also does not have
     'safe' default to ‘'/'’.

     Example: ‘quote_plus('/El Niño/')’ yields ‘'%2FEl+Ni%C3%B1o%2F'’.

 -- Função: urllib.parse.quote_from_bytes (bytes, safe='/')

     Like *note quote(): bbb, but accepts a *note bytes: 1c2. object
     rather than a *note str: 44c, and does not perform string-to-bytes
     encoding.

     Example: ‘quote_from_bytes(b'a&\xef')’ yields ‘'a%26%EF'’.

 -- Função: urllib.parse.unquote (string, encoding='utf-8',
          errors='replace')

     Replace ‘%XX’ escapes with their single-character equivalent.  The
     optional 'encoding' and 'errors' parameters specify how to decode
     percent-encoded sequences into Unicode characters, as accepted by
     the *note bytes.decode(): 8dc. method.

     'string' may be either a *note str: 44c. or a *note bytes: 1c2.
     object.

     'encoding' defaults to ‘'utf-8'’.  'errors' defaults to
     ‘'replace'’, meaning invalid sequences are replaced by a
     placeholder character.

     Example: ‘unquote('/El%20Ni%C3%B1o/')’ yields ‘'/El Niño/'’.

     Alterado na versão 3.9: 'string' parameter supports bytes and str
     objects (previously only str).

 -- Função: urllib.parse.unquote_plus (string, encoding='utf-8',
          errors='replace')

     Like *note unquote(): 1883, but also replace plus signs with
     spaces, as required for unquoting HTML form values.

     'string' must be a *note str: 44c.

     Example: ‘unquote_plus('/El+Ni%C3%B1o/')’ yields ‘'/El Niño/'’.

 -- Função: urllib.parse.unquote_to_bytes (string)

     Replace ‘%XX’ escapes with their single-octet equivalent, and
     return a *note bytes: 1c2. object.

     'string' may be either a *note str: 44c. or a *note bytes: 1c2.
     object.

     If it is a *note str: 44c, unescaped non-ASCII characters in
     'string' are encoded into UTF-8 bytes.

     Example: ‘unquote_to_bytes('a%26%EF')’ yields ‘b'a&\xef'’.

 -- Função: urllib.parse.urlencode (query, doseq=False, safe='',
          encoding=None, errors=None, quote_via=quote_plus)

     Convert a mapping object or a sequence of two-element tuples, which
     may contain *note str: 44c. or *note bytes: 1c2. objects, to a
     percent-encoded ASCII text string.  If the resultant string is to
     be used as a 'data' for POST operation with the *note urlopen():
     293. function, then it should be encoded to bytes, otherwise it
     would result in a *note TypeError: 2c3.

     The resulting string is a series of ‘key=value’ pairs separated by
     ‘'&'’ characters, where both 'key' and 'value' are quoted using the
     'quote_via' function.  By default, *note quote_plus(): 128a. is
     used to quote the values, which means spaces are quoted as a ‘'+'’
     character and ‘/’ characters are encoded as ‘%2F’, which follows
     the standard for GET requests
     (‘application/x-www-form-urlencoded’).  An alternate function that
     can be passed as 'quote_via' is *note quote(): bbb, which will
     encode spaces as ‘%20’ and not encode ‘/’ characters.  For maximum
     control of what is quoted, use ‘quote’ and specify a value for
     'safe'.

     When a sequence of two-element tuples is used as the 'query'
     argument, the first element of each tuple is a key and the second
     is a value.  The value element in itself can be a sequence and in
     that case, if the optional parameter 'doseq' evaluates to ‘True’,
     individual ‘key=value’ pairs separated by ‘'&'’ are generated for
     each element of the value sequence for the key.  The order of
     parameters in the encoded string will match the order of parameter
     tuples in the sequence.

     The 'safe', 'encoding', and 'errors' parameters are passed down to
     'quote_via' (the 'encoding' and 'errors' parameters are only passed
     when a query element is a *note str: 44c.).

     To reverse this encoding process, *note parse_qs(): 27a. and *note
     parse_qsl(): 279. are provided in this module to parse query
     strings into Python data structures.

     Refer to *note urllib examples: 3c3f. to find out how the *note
     urllib.parse.urlencode(): ec4. method can be used for generating
     the query string of a URL or data for a POST request.

     Alterado na versão 3.2: 'query' supports bytes and string objects.

     Alterado na versão 3.5: Added the 'quote_via' parameter.

Ver também
..........

WHATWG(3) - URL Living standard

     Working Group for the URL Standard that defines URLs, domains, IP
     addresses, the application/x-www-form-urlencoded format, and their
     API.

RFC 3986(4) - Uniform Resource Identifiers

     This is the current standard (STD66).  Any changes to urllib.parse
     module should conform to this.  Certain deviations could be
     observed, which are mostly for backward compatibility purposes and
     for certain de-facto parsing requirements as commonly observed in
     major browsers.

RFC 2732(5) - Format for Literal IPv6 Addresses in URL’s.

     This specifies the parsing requirements of IPv6 URLs.

RFC 2396(6) - Uniform Resource Identifiers (URI): Generic Syntax

     Document describing the generic syntactic requirements for both
     Uniform Resource Names (URNs) and Uniform Resource Locators (URLs).

RFC 2368(7) - O esquema de URL mailto.

     Parsing requirements for mailto URL schemes.

RFC 1808(8) - Relative Uniform Resource Locators

     This Request For Comments includes the rules for joining an
     absolute and a relative URL, including a fair number of “Abnormal
     Examples” which govern the treatment of border cases.

RFC 1738(9) - Uniform Resource Locators (URL)

     This specifies the formal syntax and semantics of absolute URLs.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2396.html

   (2) https://datatracker.ietf.org/doc/html/rfc3986.html

   (3) https://url.spec.whatwg.org/

   (4) https://datatracker.ietf.org/doc/html/rfc3986.html

   (5) https://datatracker.ietf.org/doc/html/rfc2732.html

   (6) https://datatracker.ietf.org/doc/html/rfc2396.html

   (7) https://datatracker.ietf.org/doc/html/rfc2368.html

   (8) https://datatracker.ietf.org/doc/html/rfc1808.html

   (9) https://datatracker.ietf.org/doc/html/rfc1738.html


File: python.info,  Node: urllib error — Classes de exceção levantadas por urllib request,  Next: urllib robotparser — Analisador sintático de robots txt,  Prev: urllib parse — Analisa URLs para componentes,  Up: Protocolos de Internet e Suporte

5.22.7 ‘urllib.error’ — Classes de exceção levantadas por urllib.request
------------------------------------------------------------------------

'Código-fonte:' Lib/urllib/error.py(1)

__________________________________________________________________

O módulo *note urllib.error: 109. define as classes de exceção para
exceções levantadas por *note urllib.request: 10b.  A classe de exceção
base é *note URLError: 3bca.

As seguintes exceções são levantadas por *note urllib.error: 109.
conforme apropriado:

 -- Exceção: urllib.error.URLError

     Os manipuladores levantam essa exceção (ou exceções derivadas)
     quando encontram um problema.  É uma subclasse de *note OSError:
     417.

      -- Atributo: reason

          O motivo desse erro.  Pode ser uma string de mensagem ou outra
          instância de exceção.

     Alterado na versão 3.3: *note URLError: 3bca. costumava ser um
     subtipo de *note IOError: 108b, que agora é um apelido de *note
     OSError: 417.

 -- Exceção: urllib.error.HTTPError (url, code, msg, hdrs, fp)

     Embora seja uma exceção (uma subclasse de *note URLError: 3bca.),
     uma *note HTTPError: 1014. também pode funcionar como um valor de
     retorno não excepcional do tipo arquivo (a mesma coisa que *note
     urlopen(): 293. retorna).  Isso é útil ao lidar com erros de HTTP
     exóticos, como solicitações de autenticação.

      -- Atributo: url

          Contém a solicitação URL. Um apelido para 'nome do arquivo'
          atributo.

      -- Atributo: code

          Um código de status HTTP conforme definido em RFC 2616(2).
          Este valor numérico corresponde a um valor encontrado no
          dicionário de códigos conforme encontrado em *note
          http.server.BaseHTTPRequestHandler.responses: 3c69.

      -- Atributo: reason

          Geralmente é uma string explicando o motivo desse erro.  Um
          apelido para o atributo 'msg'.

      -- Atributo: headers

          Os cabeçalhos de resposta HTTP para a solicitação HTTP que
          causou a *note HTTPError: 1014.  Um apelido para o atributo
          'hdrs'.

          Adicionado na versão 3.4.

      -- Atributo: fp

          Um objeto arquivo ou similar no qual o corpo do HTTP erro pode
          ser lido.

 -- Exceção: urllib.error.ContentTooShortError (msg, content)

     Esta exceção é levantada quando a função *note urlretrieve(): 3c41.
     detecta que a quantidade de dados baixados é menor que a quantidade
     esperada (fornecida pelo cabeçalho 'Content-Length').

      -- Atributo: content

          Os dados baixados (e supostamente truncados).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/urllib/error.py

   (2) https://datatracker.ietf.org/doc/html/rfc2616.html


File: python.info,  Node: urllib robotparser — Analisador sintático de robots txt,  Next: http — módulos HTTP,  Prev: urllib error — Classes de exceção levantadas por urllib request,  Up: Protocolos de Internet e Suporte

5.22.8 ‘urllib.robotparser’ — Analisador sintático de robots.txt
----------------------------------------------------------------

'Código-fonte:' Lib/urllib/robotparser.py(1)

__________________________________________________________________

Este módulo fornece uma única classe, *note RobotFileParser: d1f, que
responde a perguntas sobre se um agente de usuário específico pode ou
não buscar uma URL no site que publicou o arquivo ‘robots.txt’.  Para
mais detalhes sobre a estrutura dos arquivos ‘robots.txt’, consulte
‘http://www.robotstxt.org/orig.html’.

 -- Classe: urllib.robotparser.RobotFileParser (url='')

     Esta classe fornece métodos para ler, analisar e responder
     perguntas sobre o arquivo ‘robots.txt’ em 'url'.

      -- Método: set_url (url)

          Define a URL referente a um arquivo ‘robots.txt’.

      -- Método: read ()

          Lê o URL ‘robots.txt’ e o alimenta para o analisador
          sintático.

      -- Método: parse (lines)

          Analisa o argumento de linhas.

      -- Método: can_fetch (useragent, url)

          Retorna ‘True’ se o 'useragent' tiver permissão para buscar a
          'url' de acordo com as regras contidas no arquivo ‘robots.txt’
          analisado.

      -- Método: mtime ()

          Retorna o horário em que o arquivo ‘robots.txt’ foi buscado
          pela última vez.  Isso é útil para web spiders de longa
          duração que precisam verificar novos arquivos ‘robots.txt’
          periodicamente.

      -- Método: modified ()

          Define a hora em que o arquivo ‘robots.txt’ foi buscado pela
          última vez para a hora atual.

      -- Método: crawl_delay (useragent)

          Retorna o valor do parâmetro ‘Crawl-delay’ de ‘robots.txt’
          para o 'useragent' em questão.  Se não houver tal parâmetro ou
          se ele não se aplicar ao 'useragent' especificado ou se a
          entrada ‘robots.txt’ para este parâmetro tiver sintaxe
          inválida, retorna ‘None’.

          Adicionado na versão 3.6.

      -- Método: request_rate (useragent)

          Retorna o conteúdo do parâmetro ‘Request-rate’ de ‘robots.txt’
          como uma *note tupla nomeada: 64e. ‘RequestRate(requests,
          seconds)’.  Se não houver tal parâmetro ou se ele não se
          aplicar ao 'useragent' especificado ou se a entrada
          ‘robots.txt’ para este parâmetro tiver sintaxe inválida,
          retorna ‘None’.

          Adicionado na versão 3.6.

      -- Método: site_maps ()

          Retorna o conteúdo do parâmetro ‘Sitemap’ de ‘robots.txt’ no
          formato de uma *note list(): 611.  Se não houver tal parâmetro
          ou a entrada ‘robots.txt’ para este parâmetro tiver sintaxe
          inválida, retorna ‘None’.

          Adicionado na versão 3.8.

O exemplo a seguir demonstra o uso básico da classe *note
RobotFileParser: d1f.:

     >>> import urllib.robotparser
     >>> rp = urllib.robotparser.RobotFileParser()
     >>> rp.set_url("http://www.musi-cal.com/robots.txt")
     >>> rp.read()
     >>> rrate = rp.request_rate("*")
     >>> rrate.requests
     3
     >>> rrate.seconds
     20
     >>> rp.crawl_delay("*")
     6
     >>> rp.can_fetch("*", "http://www.musi-cal.com/cgi-bin/search?city=San+Francisco")
     False
     >>> rp.can_fetch("*", "http://www.musi-cal.com/")
     True

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/urllib/robotparser.py


File: python.info,  Node: http — módulos HTTP,  Next: http client — HTTP protocol client,  Prev: urllib robotparser — Analisador sintático de robots txt,  Up: Protocolos de Internet e Suporte

5.22.9 ‘http’ — módulos HTTP
----------------------------

'Código-fonte:' Lib/http/__init__.py(1)

__________________________________________________________________

*note http: 6e. é um pacote que coleta vários módulos para trabalhar com
o Protocolo de Transferência de Hipertexto:

   * *note http.client: 6f. é um cliente de protocolo HTTP de baixo
     nível; para abertura de URL de alto nível, use *note
     urllib.request: 10b.

   * *note http.server: 72. contém classes básicas de servidor HTTP
     baseadas em *note socketserver: cd.

   * *note http.cookies: 71. tem utilidades para implementar
     gerenciamento de estado com cookies

   * *note http.cookiejar: 70. provê persistência de cookies

O módulo *note http: 6e. também define os seguintes enums que podem
ajudar você a trabalhar com os status code http relacionados:

 -- Classe: http.HTTPStatus

     Adicionado na versão 3.5.

     Subclasse de *note enum.IntEnum: d00. que define um conjunto de
     códigos de status HTTP, frases de razão e descrições longas
     escritas em inglês.

     Uso:

          >>> from http import HTTPStatus
          >>> HTTPStatus.OK
          HTTPStatus.OK
          >>> HTTPStatus.OK == 200
          True
          >>> HTTPStatus.OK.value
          200
          >>> HTTPStatus.OK.phrase
          'OK'
          >>> HTTPStatus.OK.description
          'Request fulfilled, document follows'
          >>> list(HTTPStatus)
          [HTTPStatus.CONTINUE, HTTPStatus.SWITCHING_PROTOCOLS, ...]

* Menu:

* códigos de status HTTP::
* Categorias de HTTP status::
* Métodos HTTP::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/http/__init__.py


File: python.info,  Node: códigos de status HTTP,  Next: Categorias de HTTP status,  Up: http — módulos HTTP

5.22.9.1 códigos de status HTTP
...............................

Suportados, códigos de status registrados no IANA(1) disponíveis em
*note http.HTTPStatus: 906. são:

Código      Nome da Enumeração                      Detalhes
                                                    
----------------------------------------------------------------------------------------------------------------------------------------
                                                    
‘100’       ‘CONTINUE’                              HTTP Semantics RFC 9110(2), seção 15.2.1
                                                    
                                                    
‘101’       ‘SWITCHING_PROTOCOLS’                   HTTP Semantics RFC 9110(3), seção 15.2.2
                                                    
                                                    
‘102’       ‘PROCESSING’                            WebDAV RFC 2518(4), Seção 10.1
                                                    
                                                    
‘103’       ‘EARLY_HINTS’                           Um código de status HTTP para indicar dicas RFC 8297(5)
                                                    
                                                    
‘200’       ‘OK’                                    HTTP Semantics RFC 9110(6), seção 15.3.1
                                                    
                                                    
‘201’       ‘CREATED’                               HTTP Semantics RFC 9110(7), seção 15.3.2
                                                    
                                                    
‘202’       ‘ACCEPTED’                              HTTP Semantics RFC 9110(8), seção 15.3.3
                                                    
                                                    
‘203’       ‘NON_AUTHORITATIVE_INFORMATION’         HTTP Semantics RFC 9110(9), seção 15.3.4
                                                    
                                                    
‘204’       ‘NO_CONTENT’                            HTTP Semantics RFC 9110(10), seção 15.3.5
                                                    
                                                    
‘205’       ‘RESET_CONTENT’                         HTTP Semantics RFC 9110(11), seção 15.3.6
                                                    
                                                    
‘206’       ‘PARTIAL_CONTENT’                       HTTP Semantics RFC 9110(12), seção 15.3.7
                                                    
                                                    
‘207’       ‘MULTI_STATUS’                          WebDAV RFC 4918(13), Seção 11.1
                                                    
                                                    
‘208’       ‘ALREADY_REPORTED’                      Extensões Vinculadas WebDAV RFC 5842(14), Seção 7.1 (Experimental)
                                                    
                                                    
‘226’       ‘IM_USED’                               Codificador Delta em HTTP RFC 3229(15), Seção 10.4.1
                                                    
                                                    
‘300’       ‘MULTIPLE_CHOICES’                      HTTP Semantics RFC 9110(16), seção 15.4.1
                                                    
                                                    
‘301’       ‘MOVED_PERMANENTLY’                     HTTP Semantics RFC 9110(17), seção 15.4.2
                                                    
                                                    
‘302’       ‘FOUND’                                 HTTP Semantics RFC 9110(18), seção 15.4.3
                                                    
                                                    
‘303’       ‘SEE_OTHER’                             HTTP Semantics RFC 9110(19), seção 15.4.4
                                                    
                                                    
‘304’       ‘NOT_MODIFIED’                          HTTP Semantics RFC 9110(20), seção 15.4.5
                                                    
                                                    
‘305’       ‘USE_PROXY’                             HTTP Semantics RFC 9110(21), seção 15.4.6
                                                    
                                                    
‘307’       ‘TEMPORARY_REDIRECT’                    HTTP Semantics RFC 9110(22), seção 15.4.8
                                                    
                                                    
‘308’       ‘PERMANENT_REDIRECT’                    HTTP Semantics RFC 9110(23), seção 15.4.9
                                                    
                                                    
‘400’       ‘BAD_REQUEST’                           HTTP Semantics RFC 9110(24), seção 15.5.1
                                                    
                                                    
‘401’       ‘UNAUTHORIZED’                          HTTP Semantics RFC 9110(25), seção 15.5.2
                                                    
                                                    
‘402’       ‘PAYMENT_REQUIRED’                      HTTP Semantics RFC 9110(26), seção 15.5.3
                                                    
                                                    
‘403’       ‘FORBIDDEN’                             HTTP Semantics RFC 9110(27), seção 15.5.4
                                                    
                                                    
‘404’       ‘NOT_FOUND’                             HTTP Semantics RFC 9110(28), seção 15.5.5
                                                    
                                                    
‘405’       ‘METHOD_NOT_ALLOWED’                    HTTP Semantics RFC 9110(29), seção 15.5.6
                                                    
                                                    
‘406’       ‘NOT_ACCEPTABLE’                        HTTP Semantics RFC 9110(30), seção 15.5.7
                                                    
                                                    
‘407’       ‘PROXY_AUTHENTICATION_REQUIRED’         HTTP Semantics RFC 9110(31), seção 15.5.8
                                                    
                                                    
‘408’       ‘REQUEST_TIMEOUT’                       HTTP Semantics RFC 9110(32), seção 15.5.9
                                                    
                                                    
‘409’       ‘CONFLICT’                              HTTP Semantics RFC 9110(33), seção 15.5.10
                                                    
                                                    
‘410’       ‘GONE’                                  HTTP Semantics RFC 9110(34), seção 15.5.11
                                                    
                                                    
‘411’       ‘LENGTH_REQUIRED’                       HTTP Semantics RFC 9110(35), seção 15.5.12
                                                    
                                                    
‘412’       ‘PRECONDITION_FAILED’                   HTTP Semantics RFC 9110(36), seção 15.5.13
                                                    
                                                    
‘413’       ‘CONTENT_TOO_LARGE’                     HTTP Semantics RFC 9110(37), seção 15.5.14
                                                    
                                                    
‘414’       ‘URI_TOO_LONG’                          HTTP Semantics RFC 9110(38), seção 15.5.15
                                                    
                                                    
‘415’       ‘UNSUPPORTED_MEDIA_TYPE’                HTTP Semantics RFC 9110(39), seção 15.5.16
                                                    
                                                    
‘416’       ‘RANGE_NOT_SATISFIABLE’                 HTTP Semantics RFC 9110(40), seção 15.5.17
                                                    
                                                    
‘417’       ‘EXPECTATION_FAILED’                    HTTP Semantics RFC 9110(41), seção 15.5.18
                                                    
                                                    
‘418’       ‘IM_A_TEAPOT’                           HTCPCP/1.0 RFC 2324(42), Seção 2.3.2
                                                    
                                                    
‘421’       ‘MISDIRECTED_REQUEST’                   HTTP Semantics RFC 9110(43), seção 15.5.20
                                                    
                                                    
‘422’       ‘UNPROCESSABLE_CONTENT’                 HTTP Semantics RFC 9110(44), seção 15.5.21
                                                    
                                                    
‘423’       ‘LOCKED’                                WebDAV RFC 4918(45), Seção 11.3
                                                    
                                                    
‘424’       ‘FAILED_DEPENDENCY’                     WebDAV RFC 4918(46), Seção 11.4
                                                    
                                                    
‘425’       ‘TOO_EARLY’                             Usando dados antecipados em HTTP RFC 8470(47)
                                                    
                                                    
‘426’       ‘UPGRADE_REQUIRED’                      HTTP Semantics RFC 9110(48), seção 15.5.22
                                                    
                                                    
‘428’       ‘PRECONDITION_REQUIRED’                 Códigos de Status HTTP Adicionais RFC 6585(49)
                                                    
                                                    
‘429’       ‘TOO_MANY_REQUESTS’                     Códigos de Status HTTP Adicionais RFC 6585(50)
                                                    
                                                    
‘431’       ‘REQUEST_HEADER_FIELDS_TOO_LARGE’       Códigos de Status HTTP Adicionais RFC 6585(51)
                                                    
                                                    
‘451’       ‘UNAVAILABLE_FOR_LEGAL_REASONS’         Um Código de Status HTTP para Relatar Obstáculos Legais RFC 7725(52)
                                                    
                                                    
‘500’       ‘INTERNAL_SERVER_ERROR’                 HTTP Semantics RFC 9110(53), seção 15.6.1
                                                    
                                                    
‘501’       ‘NOT_IMPLEMENTED’                       HTTP Semantics RFC 9110(54), seção 15.6.2
                                                    
                                                    
‘502’       ‘BAD_GATEWAY’                           HTTP Semantics RFC 9110(55), seção 15.6.3
                                                    
                                                    
‘503’       ‘SERVICE_UNAVAILABLE’                   HTTP Semantics RFC 9110(56), seção 15.6.4
                                                    
                                                    
‘504’       ‘GATEWAY_TIMEOUT’                       HTTP Semantics RFC 9110(57), seção 15.6.5
                                                    
                                                    
‘505’       ‘HTTP_VERSION_NOT_SUPPORTED’            HTTP Semantics RFC 9110(58), seção 15.6.6
                                                    
                                                    
‘506’       ‘VARIANT_ALSO_NEGOTIATES’               Negociação Transparente de Conteúdo em HTTP RFC 2295(59), Seção 8.1
                                                    (Experimental)
                                                    
                                                    
‘507’       ‘INSUFFICIENT_STORAGE’                  WebDAV RFC 4918(60), Seção 11.5
                                                    
                                                    
‘508’       ‘LOOP_DETECTED’                         Extensões de Ligação WebDAV RFC 5842(61), Seção 7.2 (Experimental)
                                                    
                                                    
‘510’       ‘NOT_EXTENDED’                          Um Framework de Extensão HTTP RFC 2774(62), Seção 7 (Experimental)
                                                    
                                                    
‘511’       ‘NETWORK_AUTHENTICATION_REQUIRED’       Códigos de Status HTTP Adicionais RFC 6585(63), Seção 6
                                                    

Para preservar compatibilidade anterior, valores de enumerações também
estão presentes no módulo *note http.client: 6f. na forma de constantes.
O nome da enumeração é igual ao nome da constante (i.e.
‘http.HTTPStatus.OK’ também está disponível como ‘http.client.OK’).

Alterado na versão 3.7: Código de status ‘421 MISDIRECTED_REQUEST’
adicionado.

Adicionado na versão 3.8: Código de status ‘451
UNAVAILABLE_FOR_LEGAL_REASONS’ adicionado.

Adicionado na versão 3.9: Adicionados os códigos de status ‘103
EARLY_HINTS’, ‘418 IM_A_TEAPOT’ e ‘425 TOO_EARLY’.

Alterado na versão 3.13: Implementada a nomenclatura do RFC9110 para
constantes de status.  Os nomes antigos das constantes foram preservados
para compatibilidade com versões anteriores: ‘413
REQUEST_ENTITY_TOO_LARGE’, ‘414 REQUEST_URI_TOO_LONG’, ‘416
REQUESTED_RANGE_NOT_SATISFIABLE’ e ‘422 UNPROCESSABLE_ENTITY’.

   ---------- Footnotes ----------

   (1) 
https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml

   (2) https://datatracker.ietf.org/doc/html/rfc9110.html

   (3) https://datatracker.ietf.org/doc/html/rfc9110.html

   (4) https://datatracker.ietf.org/doc/html/rfc2518.html

   (5) https://datatracker.ietf.org/doc/html/rfc8297.html

   (6) https://datatracker.ietf.org/doc/html/rfc9110.html

   (7) https://datatracker.ietf.org/doc/html/rfc9110.html

   (8) https://datatracker.ietf.org/doc/html/rfc9110.html

   (9) https://datatracker.ietf.org/doc/html/rfc9110.html

   (10) https://datatracker.ietf.org/doc/html/rfc9110.html

   (11) https://datatracker.ietf.org/doc/html/rfc9110.html

   (12) https://datatracker.ietf.org/doc/html/rfc9110.html

   (13) https://datatracker.ietf.org/doc/html/rfc4918.html

   (14) https://datatracker.ietf.org/doc/html/rfc5842.html

   (15) https://datatracker.ietf.org/doc/html/rfc3229.html

   (16) https://datatracker.ietf.org/doc/html/rfc9110.html

   (17) https://datatracker.ietf.org/doc/html/rfc9110.html

   (18) https://datatracker.ietf.org/doc/html/rfc9110.html

   (19) https://datatracker.ietf.org/doc/html/rfc9110.html

   (20) https://datatracker.ietf.org/doc/html/rfc9110.html

   (21) https://datatracker.ietf.org/doc/html/rfc9110.html

   (22) https://datatracker.ietf.org/doc/html/rfc9110.html

   (23) https://datatracker.ietf.org/doc/html/rfc9110.html

   (24) https://datatracker.ietf.org/doc/html/rfc9110.html

   (25) https://datatracker.ietf.org/doc/html/rfc9110.html

   (26) https://datatracker.ietf.org/doc/html/rfc9110.html

   (27) https://datatracker.ietf.org/doc/html/rfc9110.html

   (28) https://datatracker.ietf.org/doc/html/rfc9110.html

   (29) https://datatracker.ietf.org/doc/html/rfc9110.html

   (30) https://datatracker.ietf.org/doc/html/rfc9110.html

   (31) https://datatracker.ietf.org/doc/html/rfc9110.html

   (32) https://datatracker.ietf.org/doc/html/rfc9110.html

   (33) https://datatracker.ietf.org/doc/html/rfc9110.html

   (34) https://datatracker.ietf.org/doc/html/rfc9110.html

   (35) https://datatracker.ietf.org/doc/html/rfc9110.html

   (36) https://datatracker.ietf.org/doc/html/rfc9110.html

   (37) https://datatracker.ietf.org/doc/html/rfc9110.html

   (38) https://datatracker.ietf.org/doc/html/rfc9110.html

   (39) https://datatracker.ietf.org/doc/html/rfc9110.html

   (40) https://datatracker.ietf.org/doc/html/rfc9110.html

   (41) https://datatracker.ietf.org/doc/html/rfc9110.html

   (42) https://datatracker.ietf.org/doc/html/rfc2324.html

   (43) https://datatracker.ietf.org/doc/html/rfc9110.html

   (44) https://datatracker.ietf.org/doc/html/rfc9110.html

   (45) https://datatracker.ietf.org/doc/html/rfc4918.html

   (46) https://datatracker.ietf.org/doc/html/rfc4918.html

   (47) https://datatracker.ietf.org/doc/html/rfc8470.html

   (48) https://datatracker.ietf.org/doc/html/rfc9110.html

   (49) https://datatracker.ietf.org/doc/html/rfc6585.html

   (50) https://datatracker.ietf.org/doc/html/rfc6585.html

   (51) https://datatracker.ietf.org/doc/html/rfc6585.html

   (52) https://datatracker.ietf.org/doc/html/rfc7725.html

   (53) https://datatracker.ietf.org/doc/html/rfc9110.html

   (54) https://datatracker.ietf.org/doc/html/rfc9110.html

   (55) https://datatracker.ietf.org/doc/html/rfc9110.html

   (56) https://datatracker.ietf.org/doc/html/rfc9110.html

   (57) https://datatracker.ietf.org/doc/html/rfc9110.html

   (58) https://datatracker.ietf.org/doc/html/rfc9110.html

   (59) https://datatracker.ietf.org/doc/html/rfc2295.html

   (60) https://datatracker.ietf.org/doc/html/rfc4918.html

   (61) https://datatracker.ietf.org/doc/html/rfc5842.html

   (62) https://datatracker.ietf.org/doc/html/rfc2774.html

   (63) https://datatracker.ietf.org/doc/html/rfc6585.html


File: python.info,  Node: Categorias de HTTP status,  Next: Métodos HTTP,  Prev: códigos de status HTTP,  Up: http — módulos HTTP

5.22.9.2 Categorias de HTTP status
..................................

Adicionado na versão 3.12.

Os valores enum possuem várias propriedades que indicam a categoria do
status HTTP.

Propriedade              Indica que                   Detalhes
                                                      
-------------------------------------------------------------------------------------------------
                                                      
‘is_informational’       ‘100 <= status <= 199’       HTTP Semantics RFC 9110(1), seção 15
                                                      
                                                      
‘is_success’             ‘200 <= status <= 299’       HTTP Semantics RFC 9110(2), seção 15
                                                      
                                                      
‘is_redirection’         ‘300 <= status <= 399’       HTTP Semantics RFC 9110(3), seção 15
                                                      
                                                      
‘is_client_error’        ‘400 <= status <= 499’       HTTP Semantics RFC 9110(4), seção 15
                                                      
                                                      
‘is_server_error’        ‘500 <= status <= 599’       HTTP Semantics RFC 9110(5), seção 15
                                                      

     Uso:

          >>> from http import HTTPStatus
          >>> HTTPStatus.OK.is_success
          True
          >>> HTTPStatus.OK.is_client_error
          False

 -- Classe: http.HTTPMethod

     Adicionado na versão 3.11.

     Subclasse de *note enum.StrEnum: 61a. que define um conjunto de
     métodos HTTP e descrições escritas em inglês.

     Uso:

          >>> from http import HTTPMethod
          >>>
          >>> HTTPMethod.GET
          <HTTPMethod.GET>
          >>> HTTPMethod.GET == 'GET'
          True
          >>> HTTPMethod.GET.value
          'GET'
          >>> HTTPMethod.GET.description
          'Retrieve the target.'
          >>> list(HTTPMethod)
          [<HTTPMethod.CONNECT>,
           <HTTPMethod.DELETE>,
           <HTTPMethod.GET>,
           <HTTPMethod.HEAD>,
           <HTTPMethod.OPTIONS>,
           <HTTPMethod.PATCH>,
           <HTTPMethod.POST>,
           <HTTPMethod.PUT>,
           <HTTPMethod.TRACE>]

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc9110.html

   (2) https://datatracker.ietf.org/doc/html/rfc9110.html

   (3) https://datatracker.ietf.org/doc/html/rfc9110.html

   (4) https://datatracker.ietf.org/doc/html/rfc9110.html

   (5) https://datatracker.ietf.org/doc/html/rfc9110.html


File: python.info,  Node: Métodos HTTP,  Prev: Categorias de HTTP status,  Up: http — módulos HTTP

5.22.9.3 Métodos HTTP
.....................

Suportados, métodos registrados no IANA(1) disponíveis em *note
http.HTTPMethod: 3c7d. são:

Método          Nome da Enumeração                      Detalhes
                                                        
-------------------------------------------------------------------------------------------------------------------------------
                                                        
‘GET’           ‘GET’                                   HTTP Semantics RFC 9110(2), seção 9.3.1
                                                        
                                                        
‘HEAD’          ‘HEAD’                                  HTTP Semantics RFC 9110(3), seção 9.3.2
                                                        
                                                        
‘POST’          ‘POST’                                  HTTP Semantics RFC 9110(4), seção 9.3.3
                                                        
                                                        
‘PUT’           ‘PUT’                                   HTTP Semantics RFC 9110(5), seção 9.3.4
                                                        
                                                        
‘DELETE’        ‘DELETE’                                HTTP Semantics RFC 9110(6), seção 9.3.5
                                                        
                                                        
‘CONNECT’       ‘CONNECT’                               HTTP Semantics RFC 9110(7), seção 9.3.6
                                                        
                                                        
‘OPTIONS’       ‘OPTIONS’                               HTTP Semantics RFC 9110(8), seção 9.3.7
                                                        
                                                        
‘TRACE’         ‘TRACE’                                 HTTP Semantics RFC 9110(9), seção 9.3.8
                                                        
                                                        
‘PATCH’         ‘PATCH’                                 HTTP/1.1 RFC 5789(10)
                                                        

   ---------- Footnotes ----------

   (1) https://www.iana.org/assignments/http-methods/http-methods.xhtml

   (2) https://datatracker.ietf.org/doc/html/rfc9110.html

   (3) https://datatracker.ietf.org/doc/html/rfc9110.html

   (4) https://datatracker.ietf.org/doc/html/rfc9110.html

   (5) https://datatracker.ietf.org/doc/html/rfc9110.html

   (6) https://datatracker.ietf.org/doc/html/rfc9110.html

   (7) https://datatracker.ietf.org/doc/html/rfc9110.html

   (8) https://datatracker.ietf.org/doc/html/rfc9110.html

   (9) https://datatracker.ietf.org/doc/html/rfc9110.html

   (10) https://datatracker.ietf.org/doc/html/rfc5789.html


File: python.info,  Node: http client — HTTP protocol client,  Next: ftplib — FTP protocol client,  Prev: http — módulos HTTP,  Up: Protocolos de Internet e Suporte

5.22.10 ‘http.client’ — HTTP protocol client
--------------------------------------------

'Código-fonte:' Lib/http/client.py(1)

__________________________________________________________________

This module defines classes that implement the client side of the HTTP
and HTTPS protocols.  It is normally not used directly — the module
*note urllib.request: 10b. uses it to handle URLs that use HTTP and
HTTPS.

Ver também
..........

The Requests package(2) is recommended for a higher-level HTTP client
interface.

     Nota: Suporte HTTPS está disponível somente se Python foi compilado
     com suporte SSL (através do módulo *note ssl: d0.).

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

O módulo fornece as seguintes classes:

 -- Classe: http.client.HTTPConnection (host, port=None[, timeout],
          source_address=None, blocksize=8192)

     An *note HTTPConnection: b53. instance represents one transaction
     with an HTTP server.  It should be instantiated by passing it a
     host and optional port number.  If no port number is passed, the
     port is extracted from the host string if it has the form
     ‘host:port’, else the default HTTP port (80) is used.  If the
     optional 'timeout' parameter is given, blocking operations (like
     connection attempts) will timeout after that many seconds (if it is
     not given, the global default timeout setting is used).  The
     optional 'source_address' parameter may be a tuple of a (host,
     port) to use as the source address the HTTP connection is made
     from.  The optional 'blocksize' parameter sets the buffer size in
     bytes for sending a file-like message body.

     Por exemplo, todas as seguintes chamadas criam instâncias que
     conectam ao servidor com o mesmo host e porta:

          >>> h1 = http.client.HTTPConnection('www.python.org')
          >>> h2 = http.client.HTTPConnection('www.python.org:80')
          >>> h3 = http.client.HTTPConnection('www.python.org', 80)
          >>> h4 = http.client.HTTPConnection('www.python.org', 80, timeout=10)

     Alterado na versão 3.2: 'source_address' foi adicionado.

     Alterado na versão 3.4: The 'strict' parameter was removed.  HTTP
     0.9-style “Simple Responses” are no longer supported.

     Alterado na versão 3.7: O argumento 'blocksize' foi adicionado.

 -- Classe: http.client.HTTPSConnection (host, port=None, *[, timeout],
          source_address=None, context=None, blocksize=8192)

     Uma subclasse de *note HTTPConnection: b53. que utiliza SSL para
     comunicação com servidores seguros.  A porta padrão é ‘443’.  Se
     'context' for especificado, ele deve ser uma instância de *note
     ssl.SSLContext: 294. descrevendo as várias opções do SSL.

     Por favor leia *note Considerações de segurança: 354c. para mais
     informações sobre as melhores práticas.

     Alterado na versão 3.2: 'source_address', 'context' e
     'check_hostname' foram adicionados.

     Alterado na versão 3.2: This class now supports HTTPS virtual hosts
     if possible (that is, if *note ssl.HAS_SNI: 3688. is true).

     Alterado na versão 3.4: O argumento 'strict' foi removido.
     “Respostas Simples” HTTP com o estilo 0.9 não são mais suportadas.

     Alterado na versão 3.4.3: This class now performs all the necessary
     certificate and hostname checks by default.  To revert to the
     previous, unverified, behavior ‘ssl._create_unverified_context()’
     can be passed to the 'context' parameter.

     Alterado na versão 3.8: Esta classe agora habilita TLS 1.3 *note
     ssl.SSLContext.post_handshake_auth: a3b. para o padrão 'context' ou
     quanto 'cert_file' é fornecido com um 'context' personalizado.

     Alterado na versão 3.10: This class now sends an ALPN extension
     with protocol indicator ‘http/1.1’ when no 'context' is given.
     Custom 'context' should set ALPN protocols with *note
     set_alpn_protocols(): e93.

     Alterado na versão 3.12: The deprecated 'key_file', 'cert_file' and
     'check_hostname' parameters have been removed.

 -- Classe: http.client.HTTPResponse (sock, debuglevel=0, method=None,
          url=None)

     Classe em que instâncias são retornadas mediante de conexão
     bem-sucedida.  Não é instanciável diretamente pelo usuário.

     Alterado na versão 3.4: O argumento 'strict' foi removido.
     “Respostas Simples” HTTP com o estilo 0.9 não são mais suportadas.

Este módulo fornece a seguinte função:

 -- Função: http.client.parse_headers (fp)

     Parse the headers from a file pointer 'fp' representing a HTTP
     request/response.  The file has to be a *note BufferedIOBase: 694.
     reader (i.e.  not text) and must provide a valid RFC 5322(3) style
     header.

     Esta função retorna uma instância de *note http.client.HTTPMessage:
     3c83. que armazena os campos do cabeçalho, mas não o payload (o
     mesmo que *note HTTPResponse.msg: 3c84. e *note
     http.server.BaseHTTPRequestHandler.headers: 3c85.).  Depois de
     retornar, o ponteiro de arquivo 'fp' está pronto para ler o corpo
     da requisição HTTP.

          Nota: *note parse_headers(): 1bc1. não analisa a linha inicial
          de uma mensagem HTTP; ele apenas analisa as linhas de ‘Name:
          value’.  O arquivo deve estar pronto para ler essas linhas de
          campo, então a primeira linha já deve ter sido consumida antes
          de chamar a função.

As seguintes exceções são levantadas conforme apropriado:

 -- Exceção: http.client.HTTPException

     A classe base das outras exceções neste módulo.  É uma subclasse de
     *note Exception: 9e2.

 -- Exceção: http.client.NotConnected

     Uma subclasse de *note HTTPException: 3c86.

 -- Exceção: http.client.InvalidURL

     Uma subclasse de *note HTTPException: 3c86, levantada se uma porta
     é fornecida e esta é não-numérica ou vazia.

 -- Exceção: http.client.UnknownProtocol

     Uma subclasse de *note HTTPException: 3c86.

 -- Exceção: http.client.UnknownTransferEncoding

     Uma subclasse de *note HTTPException: 3c86.

 -- Exceção: http.client.UnimplementedFileMode

     Uma subclasse de *note HTTPException: 3c86.

 -- Exceção: http.client.IncompleteRead

     Uma subclasse de *note HTTPException: 3c86.

 -- Exceção: http.client.ImproperConnectionState

     Uma subclasse de *note HTTPException: 3c86.

 -- Exceção: http.client.CannotSendRequest

     Uma subclasse de *note ImproperConnectionState: 3c8d.

 -- Exceção: http.client.CannotSendHeader

     Uma subclasse de *note ImproperConnectionState: 3c8d.

 -- Exceção: http.client.ResponseNotReady

     Uma subclasse de *note ImproperConnectionState: 3c8d.

 -- Exceção: http.client.BadStatusLine

     Uma subclasse de *note HTTPException: 3c86.  Levantada se um
     servidor responde com um código de status HTTP que não é entendido.

 -- Exceção: http.client.LineTooLong

     Uma subclasse de *note HTTPException: 3c86.  Levantada se uma linha
     excessivamente longa é recebida, do servidor, no protocolo HTTP.

 -- Exceção: http.client.RemoteDisconnected

     Uma subclasse de *note ConnectionResetError: 1098. e *note
     BadStatusLine: 3c91.  Levantada por *note
     HTTPConnection.getresponse(): e34. quando a tentativa de ler a
     resposta resulta na não leitura dos dados pela conexão, indicando
     que o fim remoto fechou a conexão.

     Adicionado na versão 3.5: Anteriormente, a exceção *note
     BadStatusLine: 3c91.‘('')’ foi levantada.

As constantes definidas neste módulo são:

 -- Dado: http.client.HTTP_PORT

     A porta padrão para o protocolo HTTP (sempre ‘80’).

 -- Dado: http.client.HTTPS_PORT

     A porta padrão para o protocolo HTTPS (sempre ‘443’).

 -- Dado: http.client.responses

     Este dicionário mapeia os códigos de status HTTP 1.1 para os nomes
     em W3C.

     Exemplo: ‘http.client.responses[http.client.NOT_FOUND]’ é ‘'Not
     Found'’.

Ver *note códigos de status HTTP: 3c7a. para uma lista de códigos de
status HTTP que estão disponíveis neste módulo como constantes.

* Menu:

* Objetos de HTTPConnection::
* Objetos HTTPResponse::
* Exemplos: Exemplos<27>.
* HTTPMessage Objects::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/http/client.py

   (2) https://requests.readthedocs.io/en/latest/

   (3) https://datatracker.ietf.org/doc/html/rfc5322.html


File: python.info,  Node: Objetos de HTTPConnection,  Next: Objetos HTTPResponse,  Up: http client — HTTP protocol client

5.22.10.1 Objetos de HTTPConnection
...................................

Instâncias *note HTTPConnection: b53. contêm os seguintes métodos:

 -- Método: HTTPConnection.request (method, url, body=None, headers={},
          *, encode_chunked=False)

     This will send a request to the server using the HTTP request
     method 'method' and the request URI 'url'.  The provided 'url' must
     be an absolute path to conform with RFC 2616 §5.1.2(1) (unless
     connecting to an HTTP proxy server or using the ‘OPTIONS’ or
     ‘CONNECT’ methods).

     Se 'body' é especificado, os dados especificados são mandados
     depois que os cabeçalhos estão prontos.  Pode ser um *note str:
     44c, um *note objeto bytes ou similar: d4f, um *note objeto
     arquivo: 1203. aberto, ou um iterável de *note bytes: 1c2.  Se
     'body' é uma string, ele é codificado como ISO-8859-1, o padrão
     para HTTP. Se é um objeto bytes ou similar, os bytes são enviados
     como estão.  Se é um *note objeto arquivo: 1203, o conteúdo do
     arquivo é enviado; este objeto arquivo deve oferecer suporte a pelo
     menos o método ‘read()’.  Se o objeto arquivo é uma instância de
     *note io.TextIOBase: 695, os dados retornados pelo método ‘read()’
     será codificado como ISO-8859-1, de outra forma os dados retornados
     por ‘read()’ são enviados como estão.  Se 'body' é um iterável, os
     elementos do iterável são enviados até o iterável se esgotar.

     The 'headers' argument should be a mapping of extra HTTP headers to
     send with the request.  A Host header(2) must be provided to
     conform with RFC 2616 §5.1.2(3) (unless connecting to an HTTP proxy
     server or using the ‘OPTIONS’ or ‘CONNECT’ methods).

     If 'headers' contains neither Content-Length nor Transfer-Encoding,
     but there is a request body, one of those header fields will be
     added automatically.  If 'body' is ‘None’, the Content-Length
     header is set to ‘0’ for methods that expect a body (‘PUT’, ‘POST’,
     and ‘PATCH’).  If 'body' is a string or a bytes-like object that is
     not also a *note file: 1203, the Content-Length header is set to
     its length.  Any other type of 'body' (files and iterables in
     general) will be chunk-encoded, and the Transfer-Encoding header
     will automatically be set instead of Content-Length.

     The 'encode_chunked' argument is only relevant if Transfer-Encoding
     is specified in 'headers'.  If 'encode_chunked' is ‘False’, the
     HTTPConnection object assumes that all encoding is handled by the
     calling code.  If it is ‘True’, the body will be chunk-encoded.

     For example, to perform a ‘GET’ request to
     ‘https://docs.python.org/3/’:

          >>> import http.client
          >>> host = "docs.python.org"
          >>> conn = http.client.HTTPSConnection(host)
          >>> conn.request("GET", "/3/", headers={"Host": host})
          >>> response = conn.getresponse()
          >>> print(response.status, response.reason)
          200 OK

          Nota: Chunked transfer encoding has been added to the HTTP
          protocol version 1.1.  Unless the HTTP server is known to
          handle HTTP 1.1, the caller must either specify the
          Content-Length, or must pass a *note str: 44c. or bytes-like
          object that is not also a file as the body representation.

          Nota: Note that you must have read the whole response or call
          *note close(): 3c98. if *note getresponse(): e34. raised an
          non-*note ConnectionError: e36. exception before you can send
          a new request to the server.

     Alterado na versão 3.2: 'body' pode agora ser um iterável.

     Alterado na versão 3.6: If neither Content-Length nor
     Transfer-Encoding are set in 'headers', file and iterable 'body'
     objects are now chunk-encoded.  The 'encode_chunked' argument was
     added.  No attempt is made to determine the Content-Length for file
     objects.

 -- Método: HTTPConnection.getresponse ()

     Should be called after a request is sent to get the response from
     the server.  Returns an *note HTTPResponse: 110d. instance.

     Alterado na versão 3.5: Se uma *note ConnectionError: e36. ou
     subclasse for levantada, o objeto *note HTTPConnection: b53. estará
     pronto para se reconectar quando uma nova solicitação for enviada.

     Note that this does not apply to *note OSError: 417.s raised by the
     underlying socket.  Instead the caller is responsible to call *note
     close(): 3c98. on the existing connection.

 -- Método: HTTPConnection.set_debuglevel (level)

     Set the debugging level.  The default debug level is ‘0’, meaning
     no debugging output is printed.  Any value greater than ‘0’ will
     cause all currently defined debug output to be printed to stdout.
     The ‘debuglevel’ is passed to any new *note HTTPResponse: 110d.
     objects that are created.

     Adicionado na versão 3.1.

 -- Método: HTTPConnection.set_tunnel (host, port=None, headers=None)

     Set the host and the port for HTTP Connect Tunnelling.  This allows
     running the connection through a proxy server.

     The 'host' and 'port' arguments specify the endpoint of the
     tunneled connection (i.e.  the address included in the CONNECT
     request, 'not' the address of the proxy server).

     The 'headers' argument should be a mapping of extra HTTP headers to
     send with the CONNECT request.

     As HTTP/1.1 is used for HTTP CONNECT tunnelling request, as per the
     RFC(4), a HTTP ‘Host:’ header must be provided, matching the
     authority-form of the request target provided as the destination
     for the CONNECT request.  If a HTTP ‘Host:’ header is not provided
     via the headers argument, one is generated and transmitted
     automatically.

     For example, to tunnel through a HTTPS proxy server running locally
     on port 8080, we would pass the address of the proxy to the *note
     HTTPSConnection: b54. constructor, and the address of the host that
     we eventually want to reach to the *note set_tunnel(): 1269.
     method:

          >>> import http.client
          >>> conn = http.client.HTTPSConnection("localhost", 8080)
          >>> conn.set_tunnel("www.python.org")
          >>> conn.request("HEAD","/index.html")

     Adicionado na versão 3.2.

     Alterado na versão 3.12: HTTP CONNECT tunnelling requests use
     protocol HTTP/1.1, upgraded from protocol HTTP/1.0.  ‘Host:’ HTTP
     headers are mandatory for HTTP/1.1, so one will be automatically
     generated and transmitted if not provided in the headers argument.

 -- Método: HTTPConnection.get_proxy_response_headers ()

     Returns a dictionary with the headers of the response received from
     the proxy server to the CONNECT request.

     If the CONNECT request was not sent, the method returns ‘None’.

     Adicionado na versão 3.12.

 -- Método: HTTPConnection.connect ()

     Connect to the server specified when the object was created.  By
     default, this is called automatically when making a request if the
     client does not already have a connection.

     Levanta um *note evento de auditoria: 19fa. ‘http.client.connect’
     com os argumentos ‘self’, ‘host’, ‘port’.

 -- Método: HTTPConnection.close ()

     Close the connection to the server.

 -- Atributo: HTTPConnection.blocksize

     Buffer size in bytes for sending a file-like message body.

     Adicionado na versão 3.7.

As an alternative to using the *note request(): cc9. method described
above, you can also send your request step by step, by using the four
functions below.

 -- Método: HTTPConnection.putrequest (method, url, skip_host=False,
          skip_accept_encoding=False)

     This should be the first call after the connection to the server
     has been made.  It sends a line to the server consisting of the
     'method' string, the 'url' string, and the HTTP version
     (‘HTTP/1.1’).  To disable automatic sending of ‘Host:’ or
     ‘Accept-Encoding:’ headers (for example to accept additional
     content encodings), specify 'skip_host' or 'skip_accept_encoding'
     with non-False values.

 -- Método: HTTPConnection.putheader (header, argument[, ...])

     Send an RFC 822(5)-style header to the server.  It sends a line to
     the server consisting of the header, a colon and a space, and the
     first argument.  If more arguments are given, continuation lines
     are sent, each consisting of a tab and an argument.

 -- Método: HTTPConnection.endheaders (message_body=None, *,
          encode_chunked=False)

     Send a blank line to the server, signalling the end of the headers.
     The optional 'message_body' argument can be used to pass a message
     body associated with the request.

     If 'encode_chunked' is ‘True’, the result of each iteration of
     'message_body' will be chunk-encoded as specified in RFC 7230(6),
     Section 3.3.1.  How the data is encoded is dependent on the type of
     'message_body'.  If 'message_body' implements the *note buffer
     interface: 2e8. the encoding will result in a single chunk.  If
     'message_body' is a *note collections.abc.Iterable: 23e2, each
     iteration of 'message_body' will result in a chunk.  If
     'message_body' is a *note file object: 1203, each call to ‘.read()’
     will result in a chunk.  The method automatically signals the end
     of the chunk-encoded data immediately after 'message_body'.

          Nota: Due to the chunked encoding specification, empty chunks
          yielded by an iterator body will be ignored by the
          chunk-encoder.  This is to avoid premature termination of the
          read of the request by the target server due to malformed
          encoding.

     Alterado na versão 3.6: Added chunked encoding support and the
     'encode_chunked' parameter.

 -- Método: HTTPConnection.send (data)

     Send data to the server.  This should be used directly only after
     the *note endheaders(): cca. method has been called and before
     *note getresponse(): e34. is called.

     Levanta um *note evento de auditoria: 19fa. ‘http.client.send’ com
     os argumentos ‘self’, ‘data’.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2616.html#section-5.1.2

   (2) https://datatracker.ietf.org/doc/html/rfc2616.html#section-14.23

   (3) https://datatracker.ietf.org/doc/html/rfc2616.html#section-5.1.2

   (4) https://datatracker.ietf.org/doc/html/rfc7231#section-4.3.6

   (5) https://datatracker.ietf.org/doc/html/rfc822.html

   (6) https://datatracker.ietf.org/doc/html/rfc7230.html


File: python.info,  Node: Objetos HTTPResponse,  Next: Exemplos<27>,  Prev: Objetos de HTTPConnection,  Up: http client — HTTP protocol client

5.22.10.2 Objetos HTTPResponse
..............................

An *note HTTPResponse: 110d. instance wraps the HTTP response from the
server.  It provides access to the request headers and the entity body.
The response is an iterable object and can be used in a with statement.

Alterado na versão 3.5: The *note io.BufferedIOBase: 694. interface is
now implemented and all of its reader operations are supported.

 -- Método: HTTPResponse.read ([amt])

     Reads and returns the response body, or up to the next 'amt' bytes.

 -- Método: HTTPResponse.readinto (b)

     Reads up to the next len(b) bytes of the response body into the
     buffer 'b'.  Returns the number of bytes read.

     Adicionado na versão 3.3.

 -- Método: HTTPResponse.getheader (name, default=None)

     Return the value of the header 'name', or 'default' if there is no
     header matching 'name'.  If there is more than one header with the
     name 'name', return all of the values joined by ‘, ‘.  If 'default'
     is any iterable other than a single string, its elements are
     similarly returned joined by commas.

 -- Método: HTTPResponse.getheaders ()

     Return a list of (header, value) tuples.

 -- Método: HTTPResponse.fileno ()

     Return the ‘fileno’ of the underlying socket.

 -- Atributo: HTTPResponse.msg

     A *note http.client.HTTPMessage: 3c83. instance containing the
     response headers.  *note http.client.HTTPMessage: 3c83. is a
     subclass of *note email.message.Message: 27c.

 -- Atributo: HTTPResponse.version

     HTTP protocol version used by server.  10 for HTTP/1.0, 11 for
     HTTP/1.1.

 -- Atributo: HTTPResponse.url

     URL of the resource retrieved, commonly used to determine if a
     redirect was followed.

 -- Atributo: HTTPResponse.headers

     Headers of the response in the form of an *note
     email.message.EmailMessage: 27b. instance.

 -- Atributo: HTTPResponse.status

     Status code returned by server.

 -- Atributo: HTTPResponse.reason

     Reason phrase returned by server.

 -- Atributo: HTTPResponse.debuglevel

     A debugging hook.  If *note debuglevel: 3ca8. is greater than zero,
     messages will be printed to stdout as the response is read and
     parsed.

 -- Atributo: HTTPResponse.closed

     Is ‘True’ if the stream is closed.

 -- Método: HTTPResponse.geturl ()

     Descontinuado desde a versão 3.9: Deprecated in favor of *note url:
     3ca5.

 -- Método: HTTPResponse.info ()

     Descontinuado desde a versão 3.9: Deprecated in favor of *note
     headers: 3ca6.

 -- Método: HTTPResponse.getcode ()

     Descontinuado desde a versão 3.9: Deprecated in favor of *note
     status: 3ca7.


File: python.info,  Node: Exemplos<27>,  Next: HTTPMessage Objects,  Prev: Objetos HTTPResponse,  Up: http client — HTTP protocol client

5.22.10.3 Exemplos
..................

Here is an example session that uses the ‘GET’ method:

     >>> import http.client
     >>> conn = http.client.HTTPSConnection("www.python.org")
     >>> conn.request("GET", "/")
     >>> r1 = conn.getresponse()
     >>> print(r1.status, r1.reason)
     200 OK
     >>> data1 = r1.read()  # This will return entire content.
     >>> # The following example demonstrates reading data in chunks.
     >>> conn.request("GET", "/")
     >>> r1 = conn.getresponse()
     >>> while chunk := r1.read(200):
     ...     print(repr(chunk))
     b'<!doctype html>\n<!--[if"...
     ...
     >>> # Example of an invalid request
     >>> conn = http.client.HTTPSConnection("docs.python.org")
     >>> conn.request("GET", "/parrot.spam")
     >>> r2 = conn.getresponse()
     >>> print(r2.status, r2.reason)
     404 Not Found
     >>> data2 = r2.read()
     >>> conn.close()

Here is an example session that uses the ‘HEAD’ method.  Note that the
‘HEAD’ method never returns any data.

     >>> import http.client
     >>> conn = http.client.HTTPSConnection("www.python.org")
     >>> conn.request("HEAD", "/")
     >>> res = conn.getresponse()
     >>> print(res.status, res.reason)
     200 OK
     >>> data = res.read()
     >>> print(len(data))
     0
     >>> data == b''
     True

Here is an example session that uses the ‘POST’ method:

     >>> import http.client, urllib.parse
     >>> params = urllib.parse.urlencode({'@number': 12524, '@type': 'issue', '@action': 'show'})
     >>> headers = {"Content-type": "application/x-www-form-urlencoded",
     ...            "Accept": "text/plain"}
     >>> conn = http.client.HTTPConnection("bugs.python.org")
     >>> conn.request("POST", "", params, headers)
     >>> response = conn.getresponse()
     >>> print(response.status, response.reason)
     302 Found
     >>> data = response.read()
     >>> data
     b'Redirecting to <a href="https://bugs.python.org/issue12524">https://bugs.python.org/issue12524</a>'
     >>> conn.close()

Client side HTTP ‘PUT’ requests are very similar to ‘POST’ requests.
The difference lies only on the server side where HTTP servers will
allow resources to be created via ‘PUT’ requests.  It should be noted
that custom HTTP methods are also handled in *note
urllib.request.Request: 100e. by setting the appropriate method
attribute.  Here is an example session that uses the ‘PUT’ method:

     >>> # This creates an HTTP request
     >>> # with the content of BODY as the enclosed representation
     >>> # for the resource http://localhost:8080/file
     ...
     >>> import http.client
     >>> BODY = "***filecontents***"
     >>> conn = http.client.HTTPConnection("localhost", 8080)
     >>> conn.request("PUT", "/file", BODY)
     >>> response = conn.getresponse()
     >>> print(response.status, response.reason)
     200, OK


File: python.info,  Node: HTTPMessage Objects,  Prev: Exemplos<27>,  Up: http client — HTTP protocol client

5.22.10.4 HTTPMessage Objects
.............................

 -- Classe: http.client.HTTPMessage (email.message.Message)

An *note http.client.HTTPMessage: 3c83. instance holds the headers from
an HTTP response.  It is implemented using the *note
email.message.Message: 27c. class.


File: python.info,  Node: ftplib — FTP protocol client,  Next: poplib — Cliente de protocolo POP3,  Prev: http client — HTTP protocol client,  Up: Protocolos de Internet e Suporte

5.22.11 ‘ftplib’ — FTP protocol client
--------------------------------------

'Código-fonte:' Lib/ftplib.py(1)

__________________________________________________________________

This module defines the class *note FTP: 900. and a few related items.
The *note FTP: 900. class implements the client side of the FTP
protocol.  You can use this to write Python programs that perform a
variety of automated FTP jobs, such as mirroring other FTP servers.  It
is also used by the module *note urllib.request: 10b. to handle URLs
that use FTP. For more information on FTP (File Transfer Protocol), see
internet RFC 959(2).

The default encoding is UTF-8, following RFC 2640(3).

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

Here’s a sample session using the *note ftplib: 5e. module:

     >>> from ftplib import FTP
     >>> ftp = FTP('ftp.us.debian.org')  # connect to host, default port
     >>> ftp.login()                     # user anonymous, passwd anonymous@
     '230 Login successful.'
     >>> ftp.cwd('debian')               # change into "debian" directory
     '250 Directory successfully changed.'
     >>> ftp.retrlines('LIST')           # list directory contents
     -rw-rw-r--    1 1176     1176         1063 Jun 15 10:18 README
     ...
     drwxr-sr-x    5 1176     1176         4096 Dec 19  2000 pool
     drwxr-sr-x    4 1176     1176         4096 Nov 17  2008 project
     drwxr-xr-x    3 1176     1176         4096 Oct 10  2012 tools
     '226 Directory send OK.'
     >>> with open('README', 'wb') as fp:
     >>>     ftp.retrbinary('RETR README', fp.write)
     '226 Transfer complete.'
     >>> ftp.quit()
     '221 Goodbye.'

* Menu:

* Referência: Referência<6>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/ftplib.py

   (2) https://datatracker.ietf.org/doc/html/rfc959.html

   (3) https://datatracker.ietf.org/doc/html/rfc2640.html


File: python.info,  Node: Referência<6>,  Up: ftplib — FTP protocol client

5.22.11.1 Referência
....................

* Menu:

* FTP objects::
* FTP_TLS objects::
* Module variables::


File: python.info,  Node: FTP objects,  Next: FTP_TLS objects,  Up: Referência<6>

5.22.11.2 FTP objects
.....................

 -- Classe: ftplib.FTP (host='', user='', passwd='', acct='',
          timeout=None, source_address=None, *, encoding='utf-8')

     Return a new instance of the *note FTP: 900. class.


     Parâmetros:

        * ‘host’ (*note str: 44c.) – The hostname to connect to.  If
          given, ‘connect(host)’ is implicitly called by the
          constructor.

        * ‘user’ (*note str: 44c.) – The username to log in with
          (default: ‘'anonymous'’).  If given, ‘login(host, passwd,
          acct)’ is implicitly called by the constructor.

        * ‘passwd’ (*note str: 44c.) – The password to use when logging
          in.  If not given, and if 'passwd' is the empty string or
          ‘"-"’, a password will be automatically generated.

        * ‘acct’ (*note str: 44c.) – Account information to be used for
          the ‘ACCT’ FTP command.  Few systems implement this.  See
          RFC-959(1) for more details.

        * ‘timeout’ (*note float: 2f7.‘ | ’‘None’) – A timeout in
          seconds for blocking operations like *note connect(): 3cb7.
          (default: the global default timeout setting).

        * ‘source_address’ (*note tuple: 370.‘ | ’‘None’) – A 2-tuple
          ‘(host, port)’ for the socket to bind to as its source address
          before connecting.

        * ‘encoding’ (*note str: 44c.) – The encoding for directories
          and filenames (default: ‘'utf-8'’).

     The *note FTP: 900. class supports the *note with: 5d2. statement,
     e.g.:

          >>> from ftplib import FTP
          >>> with FTP("ftp1.at.proftpd.org") as ftp:
          ...     ftp.login()
          ...     ftp.dir()
          ...
          '230 Anonymous login ok, restrictions apply.'
          dr-xr-xr-x   9 ftp      ftp           154 May  6 10:43 .
          dr-xr-xr-x   9 ftp      ftp           154 May  6 10:43 ..
          dr-xr-xr-x   5 ftp      ftp          4096 May  6 10:43 CentOS
          dr-xr-xr-x   3 ftp      ftp            18 Jul 10  2008 Fedora
          >>>

     Alterado na versão 3.2: Suporte para a instrução *note with: 5d2.
     foi adicionado.

     Alterado na versão 3.3: 'source_address' parameter was added.

     Alterado na versão 3.9: If the 'timeout' parameter is set to be
     zero, it will raise a *note ValueError: 202. to prevent the
     creation of a non-blocking socket.  The 'encoding' parameter was
     added, and the default was changed from Latin-1 to UTF-8 to follow
     RFC 2640(2).

     Several ‘FTP’ methods are available in two flavors: one for
     handling text files and another for binary files.  The methods are
     named for the command which is used followed by ‘lines’ for the
     text version or ‘binary’ for the binary version.

     *note FTP: 900. instances have the following methods:

      -- Método: set_debuglevel (level)

          Set the instance’s debugging level as an *note int: 257.  This
          controls the amount of debugging output printed.  The debug
          levels are:

             * ‘0’ (default): No debug output.

             * ‘1’: Produce a moderate amount of debug output, generally
               a single line per request.

             * ‘2’ or higher: Produce the maximum amount of debugging
               output, logging each line sent and received on the
               control connection.

      -- Método: connect (host='', port=0, timeout=None,
               source_address=None)

          Connect to the given host and port.  This function should be
          called only once for each instance; it should not be called if
          a 'host' argument was given when the *note FTP: 900. instance
          was created.  All other ‘FTP’ methods can only be called after
          a connection has successfully been made.


          Parâmetros:

             * ‘host’ (*note str: 44c.) – The host to connect to.

             * ‘port’ (*note int: 257.) – The TCP port to connect to
               (default: ‘21’, as specified by the FTP protocol
               specification).  It is rarely needed to specify a
               different port number.

             * ‘timeout’ (*note float: 2f7.‘ | ’‘None’) – A timeout in
               seconds for the connection attempt (default: the global
               default timeout setting).

             * ‘source_address’ (*note tuple: 370.‘ | ’‘None’) – A
               2-tuple ‘(host, port)’ for the socket to bind to as its
               source address before connecting.

          Levanta um *note evento de auditoria: 19fa. ‘ftplib.connect’
          com os argumentos ‘self’, ‘host’, ‘port’.

          Alterado na versão 3.3: 'source_address' parameter was added.

      -- Método: getwelcome ()

          Return the welcome message sent by the server in reply to the
          initial connection.  (This message sometimes contains
          disclaimers or help information that may be relevant to the
          user.)

      -- Método: login (user='anonymous', passwd='', acct='')

          Log on to the connected FTP server.  This function should be
          called only once for each instance, after a connection has
          been established; it should not be called if the 'host' and
          'user' arguments were given when the *note FTP: 900. instance
          was created.  Most FTP commands are only allowed after the
          client has logged in.


          Parâmetros:

             * ‘user’ (*note str: 44c.) – The username to log in with
               (default: ‘'anonymous'’).

             * ‘passwd’ (*note str: 44c.) – The password to use when
               logging in.  If not given, and if 'passwd' is the empty
               string or ‘"-"’, a password will be automatically
               generated.

             * ‘acct’ (*note str: 44c.) – Account information to be used
               for the ‘ACCT’ FTP command.  Few systems implement this.
               See RFC-959(3) for more details.

      -- Método: abort ()

          Abort a file transfer that is in progress.  Using this does
          not always work, but it’s worth a try.

      -- Método: sendcmd (cmd)

          Send a simple command string to the server and return the
          response string.

          Levanta um *note evento de auditoria: 19fa. ‘ftplib.sendcmd’
          com os argumentos ‘self’, ‘cmd’.

      -- Método: voidcmd (cmd)

          Send a simple command string to the server and handle the
          response.  Return the response string if the response code
          corresponds to success (codes in the range 200–299).  Raise
          *note error_reply: 3cbe. otherwise.

          Levanta um *note evento de auditoria: 19fa. ‘ftplib.sendcmd’
          com os argumentos ‘self’, ‘cmd’.

      -- Método: retrbinary (cmd, callback, blocksize=8192, rest=None)

          Retrieve a file in binary transfer mode.


          Parâmetros:

             * ‘cmd’ (*note str: 44c.) – An appropriate ‘RETR’ command:
               ‘"RETR FILENAME"’.

             * ‘callback’ (*note callable: 2aaf.) – A single parameter
               callable that is called for each block of data received,
               with its single argument being the data as *note bytes:
               1c2.

             * ‘blocksize’ (*note int: 257.) – The maximum chunk size to
               read on the low-level *note socket: dc9. object created
               to do the actual transfer.  This also corresponds to the
               largest size of data that will be passed to 'callback'.
               Defaults to ‘8192’.

             * ‘rest’ (*note int: 257.) – A ‘REST’ command to be sent to
               the server.  See the documentation for the 'rest'
               parameter of the *note transfercmd(): 3cc0. method.

      -- Método: retrlines (cmd, callback=None)

          Retrieve a file or directory listing in the encoding specified
          by the 'encoding' parameter at initialization.  'cmd' should
          be an appropriate ‘RETR’ command (see *note retrbinary():
          3cbf.) or a command such as ‘LIST’ or ‘NLST’ (usually just the
          string ‘'LIST'’).  ‘LIST’ retrieves a list of files and
          information about those files.  ‘NLST’ retrieves a list of
          file names.  The 'callback' function is called for each line
          with a string argument containing the line with the trailing
          CRLF stripped.  The default 'callback' prints the line to
          *note sys.stdout: ae6.

      -- Método: set_pasv (val)

          Enable “passive” mode if 'val' is true, otherwise disable
          passive mode.  Passive mode is on by default.

      -- Método: storbinary (cmd, fp, blocksize=8192, callback=None,
               rest=None)

          Store a file in binary transfer mode.


          Parâmetros:

             * ‘cmd’ (*note str: 44c.) – An appropriate ‘STOR’ command:
               ‘"STOR FILENAME"’.

             * ‘fp’ (*note file object: 1203.) – A file object (opened
               in binary mode) which is read until EOF, using its *note
               read(): e48. method in blocks of size 'blocksize' to
               provide the data to be stored.

             * ‘blocksize’ (*note int: 257.) – The read block size.
               Defaults to ‘8192’.

             * ‘callback’ (*note callable: 2aaf.) – A single parameter
               callable that is called for each block of data sent, with
               its single argument being the data as *note bytes: 1c2.

             * ‘rest’ (*note int: 257.) – A ‘REST’ command to be sent to
               the server.  See the documentation for the 'rest'
               parameter of the *note transfercmd(): 3cc0. method.

          Alterado na versão 3.2: The 'rest' parameter was added.

      -- Método: storlines (cmd, fp, callback=None)

          Store a file in line mode.  'cmd' should be an appropriate
          ‘STOR’ command (see *note storbinary(): 134e.).  Lines are
          read until EOF from the *note file object: 1203. 'fp' (opened
          in binary mode) using its *note readline(): 241f. method to
          provide the data to be stored.  'callback' is an optional
          single parameter callable that is called on each line after it
          is sent.

      -- Método: transfercmd (cmd, rest=None)

          Initiate a transfer over the data connection.  If the transfer
          is active, send an ‘EPRT’ or ‘PORT’ command and the transfer
          command specified by 'cmd', and accept the connection.  If the
          server is passive, send an ‘EPSV’ or ‘PASV’ command, connect
          to it, and start the transfer command.  Either way, return the
          socket for the connection.

          If optional 'rest' is given, a ‘REST’ command is sent to the
          server, passing 'rest' as an argument.  'rest' is usually a
          byte offset into the requested file, telling the server to
          restart sending the file’s bytes at the requested offset,
          skipping over the initial bytes.  Note however that the *note
          transfercmd(): 3cc0. method converts 'rest' to a string with
          the 'encoding' parameter specified at initialization, but no
          check is performed on the string’s contents.  If the server
          does not recognize the ‘REST’ command, an *note error_reply:
          3cbe. exception will be raised.  If this happens, simply call
          *note transfercmd(): 3cc0. without a 'rest' argument.

      -- Método: ntransfercmd (cmd, rest=None)

          Like *note transfercmd(): 3cc0, but returns a tuple of the
          data connection and the expected size of the data.  If the
          expected size could not be computed, ‘None’ will be returned
          as the expected size.  'cmd' and 'rest' means the same thing
          as in *note transfercmd(): 3cc0.

      -- Método: mlsd (path='', facts=[])

          List a directory in a standardized format by using ‘MLSD’
          command ( RFC 3659(4)).  If 'path' is omitted the current
          directory is assumed.  'facts' is a list of strings
          representing the type of information desired (e.g.  ‘["type",
          "size", "perm"]’).  Return a generator object yielding a tuple
          of two elements for every file found in path.  First element
          is the file name, the second one is a dictionary containing
          facts about the file name.  Content of this dictionary might
          be limited by the 'facts' argument but server is not
          guaranteed to return all requested facts.

          Adicionado na versão 3.3.

      -- Método: nlst (argument[, ...])

          Return a list of file names as returned by the ‘NLST’ command.
          The optional 'argument' is a directory to list (default is the
          current server directory).  Multiple arguments can be used to
          pass non-standard options to the ‘NLST’ command.

               Nota: If your server supports the command, *note mlsd():
               1101. offers a better API.

      -- Método: dir (argument[, ...])

          Produce a directory listing as returned by the ‘LIST’ command,
          printing it to standard output.  The optional 'argument' is a
          directory to list (default is the current server directory).
          Multiple arguments can be used to pass non-standard options to
          the ‘LIST’ command.  If the last argument is a function, it is
          used as a 'callback' function as for *note retrlines(): 3cc1.;
          the default prints to *note sys.stdout: ae6.  This method
          returns ‘None’.

               Nota: If your server supports the command, *note mlsd():
               1101. offers a better API.

      -- Método: rename (fromname, toname)

          Rename file 'fromname' on the server to 'toname'.

      -- Método: delete (filename)

          Remove the file named 'filename' from the server.  If
          successful, returns the text of the response, otherwise raises
          *note error_perm: 3cc7. on permission errors or *note
          error_reply: 3cbe. on other errors.

      -- Método: cwd (pathname)

          Set the current directory on the server.

      -- Método: mkd (pathname)

          Create a new directory on the server.

      -- Método: pwd ()

          Return the pathname of the current directory on the server.

      -- Método: rmd (dirname)

          Remove the directory named 'dirname' on the server.

      -- Método: size (filename)

          Request the size of the file named 'filename' on the server.
          On success, the size of the file is returned as an integer,
          otherwise ‘None’ is returned.  Note that the ‘SIZE’ command is
          not standardized, but is supported by many common server
          implementations.

      -- Método: quit ()

          Send a ‘QUIT’ command to the server and close the connection.
          This is the “polite” way to close a connection, but it may
          raise an exception if the server responds with an error to the
          ‘QUIT’ command.  This implies a call to the *note close():
          3cce. method which renders the *note FTP: 900. instance
          useless for subsequent calls (see below).

      -- Método: close ()

          Close the connection unilaterally.  This should not be applied
          to an already closed connection such as after a successful
          call to *note quit(): 3ccd.  After this call the *note FTP:
          900. instance should not be used any more (after a call to
          *note close(): 3cce. or *note quit(): 3ccd. you cannot reopen
          the connection by issuing another *note login(): 3cba.
          method).

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc959.html

   (2) https://datatracker.ietf.org/doc/html/rfc2640.html

   (3) https://datatracker.ietf.org/doc/html/rfc959.html

   (4) https://datatracker.ietf.org/doc/html/rfc3659.html


File: python.info,  Node: FTP_TLS objects,  Next: Module variables,  Prev: FTP objects,  Up: Referência<6>

5.22.11.3 FTP_TLS objects
.........................

 -- Classe: ftplib.FTP_TLS (host='', user='', passwd='', acct='', *,
          context=None, timeout=None, source_address=None,
          encoding='utf-8')

     An *note FTP: 900. subclass which adds TLS support to FTP as
     described in RFC 4217(1).  Connect to port 21 implicitly securing
     the FTP control connection before authenticating.

          Nota: The user must explicitly secure the data connection by
          calling the *note prot_p(): 3cd0. method.


     Parâmetros:

        * ‘host’ (*note str: 44c.) – The hostname to connect to.  If
          given, ‘connect(host)’ is implicitly called by the
          constructor.

        * ‘user’ (*note str: 44c.) – The username to log in with
          (default: ‘'anonymous'’).  If given, ‘login(host, passwd,
          acct)’ is implicitly called by the constructor.

        * ‘passwd’ (*note str: 44c.) – The password to use when logging
          in.  If not given, and if 'passwd' is the empty string or
          ‘"-"’, a password will be automatically generated.

        * ‘acct’ (*note str: 44c.) – Account information to be used for
          the ‘ACCT’ FTP command.  Few systems implement this.  See
          RFC-959(2) for more details.

        * ‘context’ (*note ssl.SSLContext: 294.) – An SSL context object
          which allows bundling SSL configuration options, certificates
          and private keys into a single, potentially long-lived,
          structure.  Please read *note Considerações de segurança:
          354c. for best practices.

        * ‘timeout’ (*note float: 2f7.‘ | ’‘None’) – A timeout in
          seconds for blocking operations like *note connect(): 3cb7.
          (default: the global default timeout setting).

        * ‘source_address’ (*note tuple: 370.‘ | ’‘None’) – A 2-tuple
          ‘(host, port)’ for the socket to bind to as its source address
          before connecting.

        * ‘encoding’ (*note str: 44c.) – The encoding for directories
          and filenames (default: ‘'utf-8'’).

     Adicionado na versão 3.2.

     Alterado na versão 3.3: Added the 'source_address' parameter.

     Alterado na versão 3.4: A classe agora oferece suporte a
     verificação de nome de host com *note
     ssl.SSLContext.check_hostname: 3676. e 'Indicação de nome de
     servidor' (veja *note ssl.HAS_SNI: 3688.).

     Alterado na versão 3.9: If the 'timeout' parameter is set to be
     zero, it will raise a *note ValueError: 202. to prevent the
     creation of a non-blocking socket.  The 'encoding' parameter was
     added, and the default was changed from Latin-1 to UTF-8 to follow
     RFC 2640(3).

     Alterado na versão 3.12: Os parâmetros depreciados 'keyfile' e
     'certfile' foram removidos.

     Here’s a sample session using the *note FTP_TLS: 901. class:

          >>> ftps = FTP_TLS('ftp.pureftpd.org')
          >>> ftps.login()
          '230 Anonymous user logged in'
          >>> ftps.prot_p()
          '200 Data protection level set to "private"'
          >>> ftps.nlst()
          ['6jack', 'OpenBSD', 'antilink', 'blogbench', 'bsdcam', 'clockspeed', 'djbdns-jedi', 'docs', 'eaccelerator-jedi', 'favicon.ico', 'francotone', 'fugu', 'ignore', 'libpuzzle', 'metalog', 'minidentd', 'misc', 'mysql-udf-global-user-variables', 'php-jenkins-hash', 'php-skein-hash', 'php-webdav', 'phpaudit', 'phpbench', 'pincaster', 'ping', 'posto', 'pub', 'public', 'public_keys', 'pure-ftpd', 'qscan', 'qtc', 'sharedance', 'skycache', 'sound', 'tmp', 'ucarp']

     ‘FTP_TLS’ class inherits from *note FTP: 900, defining these
     additional methods and attributes:

      -- Atributo: ssl_version

          The SSL version to use (defaults to *note ssl.PROTOCOL_SSLv23:
          367a.).

      -- Método: auth ()

          Set up a secure control connection by using TLS or SSL,
          depending on what is specified in the *note ssl_version: 3cd1.
          attribute.

          Alterado na versão 3.4: The method now supports hostname check
          with *note ssl.SSLContext.check_hostname: 3676. and 'Server
          Name Indication' (see *note ssl.HAS_SNI: 3688.).

      -- Método: ccc ()

          Revert control channel back to plaintext.  This can be useful
          to take advantage of firewalls that know how to handle NAT
          with non-secure FTP without opening fixed ports.

          Adicionado na versão 3.3.

      -- Método: prot_p ()

          Set up secure data connection.

      -- Método: prot_c ()

          Set up clear text data connection.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc4217.html

   (2) https://datatracker.ietf.org/doc/html/rfc959.html

   (3) https://datatracker.ietf.org/doc/html/rfc2640.html


File: python.info,  Node: Module variables,  Prev: FTP_TLS objects,  Up: Referência<6>

5.22.11.4 Module variables
..........................

 -- Exceção: ftplib.error_reply

     Exception raised when an unexpected reply is received from the
     server.

 -- Exceção: ftplib.error_temp

     Exception raised when an error code signifying a temporary error
     (response codes in the range 400–499) is received.

 -- Exceção: ftplib.error_perm

     Exception raised when an error code signifying a permanent error
     (response codes in the range 500–599) is received.

 -- Exceção: ftplib.error_proto

     Exception raised when a reply is received from the server that does
     not fit the response specifications of the File Transfer Protocol,
     i.e.  begin with a digit in the range 1–5.

 -- Dado: ftplib.all_errors

     The set of all exceptions (as a tuple) that methods of *note FTP:
     900. instances may raise as a result of problems with the FTP
     connection (as opposed to programming errors made by the caller).
     This set includes the four exceptions listed above as well as *note
     OSError: 417. and *note EOFError: 131c.

Ver também
..........

Módulo *note netrc: 9b.

     Parser for the ‘.netrc’ file format.  The file ‘.netrc’ is
     typically used by FTP clients to load user authentication
     information before prompting the user.


File: python.info,  Node: poplib — Cliente de protocolo POP3,  Next: imaplib — IMAP4 protocol client,  Prev: ftplib — FTP protocol client,  Up: Protocolos de Internet e Suporte

5.22.12 ‘poplib’ — Cliente de protocolo POP3
--------------------------------------------

'Source code:' Lib/poplib.py(1)

__________________________________________________________________

Este módulo define uma classe, *note POP3: 92a, que encapsula uma
conexão com um servidor POP3 e implementa o protocolo conforme definido
em RFC 1939(2).  A classe *note POP3: 92a. oferece suporte aos conjuntos
de comandos mínimos e opcionais de RFC 1939(3).  A classe *note POP3:
92a. também oferece suporte ao comando ‘STLS’ introduzido em RFC 2595(4)
para permitir a comunicação criptografada em uma conexão já
estabelecida.

Além disso, este módulo fornece uma classe *note POP3_SSL: 92b, que
fornece suporte para conexão a servidores POP3 que usam SSL como uma
camada de protocolo subjacente.

Observe que o POP3, embora amplamente suportado, está obsoleto.  A
qualidade de implementação dos servidores POP3 varia muito, e muitos são
bastante ruins.  Se o seu servidor de e-mail oferece suporte a IMAP,
seria melhor usar a classe *note imaplib.IMAP4: 909, pois os servidores
IMAP tendem a ter uma implementação melhor.

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

O módulo *note poplib: ac. fornece duas classes:

 -- Classe: poplib.POP3 (host, port=POP3_PORT[, timeout])

     Esta classe implementa o protocolo POP3 real.  A conexão é criada
     quando a instância é inicializada.  Se 'port' for omitido, a porta
     POP3 padrão (110) será usada.  O parâmetro opcional 'timeout'
     especifica um tempo limite em segundos para a tentativa de conexão
     (se não for especificado, a configuração de tempo limite padrão
     global será usada).

     Levanta um *note evento de auditoria: 19fa. ‘ftplib.connect’ com os
     argumentos ‘self’, ‘host’, ‘port’.

     Todos os comandos levantarão um *note evento de auditoria: 19fa.
     ‘poplib.putline’ com os argumentos ‘self’ e ‘line’, onde ‘line’ são
     os bytes prestes a serem enviados ao host remoto.

     Alterado na versão 3.9: Se o parâmetro 'timeout' for definido como
     zero, será levantada *note ValueError: 202. para impedir a criação
     de um soquete não bloqueante.

 -- Classe: poplib.POP3_SSL (host, port=POP3_SSL_PORT, *, timeout=None,
          context=None)

     Esta é uma subclasse de *note POP3: 92a. que se conecta ao servidor
     por meio de um soquete criptografado SSL. Se 'port' não for
     especificado, 995, a porta padrão POP3 sobre SSL será usada.
     'timeout' funciona como no construtor *note POP3: 92a.  'context' é
     um objeto opcional *note ssl.SSLContext: 294. que permite agrupar
     opções de configuração SSL, certificados e chaves privadas em uma
     única estrutura (potencialmente duradoura).  Consulte *note
     Considerações de segurança: 354c. para obter as melhores práticas.

     Levanta um *note evento de auditoria: 19fa. ‘ftplib.connect’ com os
     argumentos ‘self’, ‘host’, ‘port’.

     Todos os comandos levantarão um *note evento de auditoria: 19fa.
     ‘poplib.putline’ com os argumentos ‘self’ e ‘line’, onde ‘line’ são
     os bytes prestes a serem enviados ao host remoto.

     Alterado na versão 3.2: Parâmetro 'context' adicionado.

     Alterado na versão 3.4: A classe agora oferece suporte a
     verificação de nome de host com *note
     ssl.SSLContext.check_hostname: 3676. e 'Indicação de nome de
     servidor' (veja *note ssl.HAS_SNI: 3688.).

     Alterado na versão 3.9: Se o parâmetro 'timeout' for definido como
     zero, será levantada *note ValueError: 202. para impedir a criação
     de um soquete não bloqueante.

     Alterado na versão 3.12: Os parâmetros depreciados 'keyfile' e
     'certfile' foram removidos.

Uma exceção é definida como um atributo do módulo *note poplib: ac.:

 -- Exceção: poplib.error_proto

     Exceção levantada em caso de erros deste módulo (erros do módulo
     *note socket: cc. não são detectados).  O motivo da exceção é
     passado ao construtor como uma string.

Ver também
..........

Módulo *note imaplib: 74.

     The standard Python IMAP module.

Frequently Asked Questions About Fetchmail(5)

     The FAQ for the ‘fetchmail’ POP/IMAP client collects information on
     POP3 server variations and RFC noncompliance that may be useful if
     you need to write an application based on the POP protocol.

* Menu:

* Objetos POP3::
* Exemplo POP3::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/poplib.py

   (2) https://datatracker.ietf.org/doc/html/rfc1939.html

   (3) https://datatracker.ietf.org/doc/html/rfc1939.html

   (4) https://datatracker.ietf.org/doc/html/rfc2595.html

   (5) http://www.catb.org/~esr/fetchmail/fetchmail-FAQ.html


File: python.info,  Node: Objetos POP3,  Next: Exemplo POP3,  Up: poplib — Cliente de protocolo POP3

5.22.12.1 Objetos POP3
......................

All POP3 commands are represented by methods of the same name, in
lowercase; most return the response text sent by the server.

A *note POP3: 92a. instance has the following methods:

 -- Método: POP3.set_debuglevel (level)

     Set the instance’s debugging level.  This controls the amount of
     debugging output printed.  The default, ‘0’, produces no debugging
     output.  A value of ‘1’ produces a moderate amount of debugging
     output, generally a single line per request.  A value of ‘2’ or
     higher produces the maximum amount of debugging output, logging
     each line sent and received on the control connection.

 -- Método: POP3.getwelcome ()

     Returns the greeting string sent by the POP3 server.

 -- Método: POP3.capa ()

     Query the server’s capabilities as specified in RFC 2449(1).
     Returns a dictionary in the form ‘{'name': ['param'...]}’.

     Adicionado na versão 3.4.

 -- Método: POP3.user (username)

     Send user command, response should indicate that a password is
     required.

 -- Método: POP3.pass_ (password)

     Send password, response includes message count and mailbox size.
     Note: the mailbox on the server is locked until *note quit(): 11da.
     is called.

 -- Método: POP3.apop (user, secret)

     Use the more secure APOP authentication to log into the POP3
     server.

 -- Método: POP3.rpop (user)

     Use RPOP authentication (similar to UNIX r-commands) to log into
     POP3 server.

 -- Método: POP3.stat ()

     Get mailbox status.  The result is a tuple of 2 integers: ‘(message
     count, mailbox size)’.

 -- Método: POP3.list ([which])

     Request message list, result is in the form ‘(response, ['mesg_num
     octets', ...], octets)’.  If 'which' is set, it is the message to
     list.

 -- Método: POP3.retr (which)

     Retrieve whole message number 'which', and set its seen flag.
     Result is in form ‘(response, ['line', ...], octets)’.

 -- Método: POP3.dele (which)

     Flag message number 'which' for deletion.  On most servers
     deletions are not actually performed until QUIT (the major
     exception is Eudora QPOP, which deliberately violates the RFCs by
     doing pending deletes on any disconnect).

 -- Método: POP3.rset ()

     Remove any deletion marks for the mailbox.

 -- Método: POP3.noop ()

     Do nothing.  Might be used as a keep-alive.

 -- Método: POP3.quit ()

     Signoff: commit changes, unlock mailbox, drop connection.

 -- Método: POP3.top (which, howmuch)

     Retrieves the message header plus 'howmuch' lines of the message
     after the header of message number 'which'.  Result is in form
     ‘(response, ['line', ...], octets)’.

     The POP3 TOP command this method uses, unlike the RETR command,
     doesn’t set the message’s seen flag; unfortunately, TOP is poorly
     specified in the RFCs and is frequently broken in off-brand
     servers.  Test this method by hand against the POP3 servers you
     will use before trusting it.

 -- Método: POP3.uidl (which=None)

     Return message digest (unique id) list.  If 'which' is specified,
     result contains the unique id for that message in the form
     ‘'response mesgnum uid’, otherwise result is list ‘(response,
     ['mesgnum uid', ...], octets)’.

 -- Método: POP3.utf8 ()

     Try to switch to UTF-8 mode.  Returns the server response if
     successful, raises *note error_proto: 11db. if not.  Specified in
     RFC 6856(2).

     Adicionado na versão 3.5.

 -- Método: POP3.stls (context=None)

     Start a TLS session on the active connection as specified in RFC
     2595(3).  This is only allowed before user authentication

     'context' parameter is a *note ssl.SSLContext: 294. object which
     allows bundling SSL configuration options, certificates and private
     keys into a single (potentially long-lived) structure.  Please read
     *note Considerações de segurança: 354c. for best practices.

     This method supports hostname checking via *note
     ssl.SSLContext.check_hostname: 3676. and 'Server Name Indication'
     (see *note ssl.HAS_SNI: 3688.).

     Adicionado na versão 3.4.

Instances of *note POP3_SSL: 92b. have no additional methods.  The
interface of this subclass is identical to its parent.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2449.html

   (2) https://datatracker.ietf.org/doc/html/rfc6856.html

   (3) https://datatracker.ietf.org/doc/html/rfc2595.html


File: python.info,  Node: Exemplo POP3,  Prev: Objetos POP3,  Up: poplib — Cliente de protocolo POP3

5.22.12.2 Exemplo POP3
......................

Here is a minimal example (without error checking) that opens a mailbox
and retrieves and prints all messages:

     import getpass, poplib

     M = poplib.POP3('localhost')
     M.user(getpass.getuser())
     M.pass_(getpass.getpass())
     numMessages = len(M.list()[1])
     for i in range(numMessages):
         for j in M.retr(i+1)[1]:
             print(j)

At the end of the module, there is a test section that contains a more
extensive example of usage.


File: python.info,  Node: imaplib — IMAP4 protocol client,  Next: smtplib — Cliente de protocolo SMTP,  Prev: poplib — Cliente de protocolo POP3,  Up: Protocolos de Internet e Suporte

5.22.13 ‘imaplib’ — IMAP4 protocol client
-----------------------------------------

'Código-fonte:' Lib/imaplib.py(1)

__________________________________________________________________

This module defines three classes, *note IMAP4: 909, *note IMAP4_SSL:
90a. and *note IMAP4_stream: 90c, which encapsulate a connection to an
IMAP4 server and implement a large subset of the IMAP4rev1 client
protocol as defined in RFC 2060(2).  It is backward compatible with
IMAP4 ( RFC 1730(3)) servers, but note that the ‘STATUS’ command is not
supported in IMAP4.

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

Three classes are provided by the *note imaplib: 74. module, *note
IMAP4: 909. is the base class:

 -- Classe: imaplib.IMAP4 (host='', port=IMAP4_PORT, timeout=None)

     This class implements the actual IMAP4 protocol.  The connection is
     created and protocol version (IMAP4 or IMAP4rev1) is determined
     when the instance is initialized.  If 'host' is not specified, ‘''’
     (the local host) is used.  If 'port' is omitted, the standard IMAP4
     port (143) is used.  The optional 'timeout' parameter specifies a
     timeout in seconds for the connection attempt.  If timeout is not
     given or is ‘None’, the global default socket timeout is used.

     The *note IMAP4: 909. class supports the *note with: 5d2.
     statement.  When used like this, the IMAP4 ‘LOGOUT’ command is
     issued automatically when the ‘with’ statement exits.  E.g.:

          >>> from imaplib import IMAP4
          >>> with IMAP4("domain.org") as M:
          ...     M.noop()
          ...
          ('OK', [b'Nothing Accomplished. d25if65hy903weo.87'])

     Alterado na versão 3.5: Suporte para a instrução *note with: 5d2.
     foi adicionado.

     Alterado na versão 3.9: O parâmetro opcional 'timeout' foi
     adicionado.

Three exceptions are defined as attributes of the *note IMAP4: 909.
class:

 -- Exceção: IMAP4.error

     Exception raised on any errors.  The reason for the exception is
     passed to the constructor as a string.

 -- Exceção: IMAP4.abort

     IMAP4 server errors cause this exception to be raised.  This is a
     sub-class of *note IMAP4.error: 15fa.  Note that closing the
     instance and instantiating a new one will usually allow recovery
     from this exception.

 -- Exceção: IMAP4.readonly

     This exception is raised when a writable mailbox has its status
     changed by the server.  This is a sub-class of *note IMAP4.error:
     15fa.  Some other client now has write permission, and the mailbox
     will need to be re-opened to re-obtain write permission.

There’s also a subclass for secure connections:

 -- Classe: imaplib.IMAP4_SSL (host='', port=IMAP4_SSL_PORT, *,
          ssl_context=None, timeout=None)

     This is a subclass derived from *note IMAP4: 909. that connects
     over an SSL encrypted socket (to use this class you need a socket
     module that was compiled with SSL support).  If 'host' is not
     specified, ‘''’ (the local host) is used.  If 'port' is omitted,
     the standard IMAP4-over-SSL port (993) is used.  'ssl_context' is a
     *note ssl.SSLContext: 294. object which allows bundling SSL
     configuration options, certificates and private keys into a single
     (potentially long-lived) structure.  Please read *note
     Considerações de segurança: 354c. for best practices.

     The optional 'timeout' parameter specifies a timeout in seconds for
     the connection attempt.  If timeout is not given or is ‘None’, the
     global default socket timeout is used.

     Alterado na versão 3.3: 'ssl_context' parameter was added.

     Alterado na versão 3.4: A classe agora oferece suporte a
     verificação de nome de host com *note
     ssl.SSLContext.check_hostname: 3676. e 'Indicação de nome de
     servidor' (veja *note ssl.HAS_SNI: 3688.).

     Alterado na versão 3.9: O parâmetro opcional 'timeout' foi
     adicionado.

     Alterado na versão 3.12: Os parâmetros depreciados 'keyfile' e
     'certfile' foram removidos.

The second subclass allows for connections created by a child process:

 -- Classe: imaplib.IMAP4_stream (command)

     This is a subclass derived from *note IMAP4: 909. that connects to
     the ‘stdin/stdout’ file descriptors created by passing 'command' to
     ‘subprocess.Popen()’.

The following utility functions are defined:

 -- Função: imaplib.Internaldate2tuple (datestr)

     Parse an IMAP4 ‘INTERNALDATE’ string and return corresponding local
     time.  The return value is a *note time.struct_time: d0b. tuple or
     ‘None’ if the string has wrong format.

 -- Função: imaplib.Int2AP (num)

     Converts an integer into a bytes representation using characters
     from the set [‘A’ ..  ‘P’].

 -- Função: imaplib.ParseFlags (flagstr)

     Converts an IMAP4 ‘FLAGS’ response to a tuple of individual flags.

 -- Função: imaplib.Time2Internaldate (date_time)

     Convert 'date_time' to an IMAP4 ‘INTERNALDATE’ representation.  The
     return value is a string in the form: ‘"DD-Mmm-YYYY HH:MM:SS
     +HHMM"’ (including double-quotes).  The 'date_time' argument can be
     a number (int or float) representing seconds since epoch (as
     returned by *note time.time(): 254.), a 9-tuple representing local
     time an instance of *note time.struct_time: d0b. (as returned by
     *note time.localtime(): 1541.), an aware instance of *note
     datetime.datetime: 1cc, or a double-quoted string.  In the last
     case, it is assumed to already be in the correct format.

Note that IMAP4 message numbers change as the mailbox changes; in
particular, after an ‘EXPUNGE’ command performs deletions the remaining
messages are renumbered.  So it is highly advisable to use UIDs instead,
with the UID command.

At the end of the module, there is a test section that contains a more
extensive example of usage.

Ver também
..........

Documents describing the protocol, sources for servers implementing it,
by the University of Washington’s IMAP Information Center can all be
found at ('Source Code') ‘https://github.com/uw-imap/imap’ ('Not
Maintained').

* Menu:

* Objetos IMAP4::
* Exemplo IMAP4::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/imaplib.py

   (2) https://datatracker.ietf.org/doc/html/rfc2060.html

   (3) https://datatracker.ietf.org/doc/html/rfc1730.html


File: python.info,  Node: Objetos IMAP4,  Next: Exemplo IMAP4,  Up: imaplib — IMAP4 protocol client

5.22.13.1 Objetos IMAP4
.......................

All IMAP4rev1 commands are represented by methods of the same name,
either uppercase or lowercase.

All arguments to commands are converted to strings, except for
‘AUTHENTICATE’, and the last argument to ‘APPEND’ which is passed as an
IMAP4 literal.  If necessary (the string contains IMAP4
protocol-sensitive characters and isn’t enclosed with either parentheses
or double quotes) each string is quoted.  However, the 'password'
argument to the ‘LOGIN’ command is always quoted.  If you want to avoid
having an argument string quoted (eg: the 'flags' argument to ‘STORE’)
then enclose the string in parentheses (eg: ‘r'(\Deleted)'’).

Each command returns a tuple: ‘(type, [data, ...])’ where 'type' is
usually ‘'OK'’ or ‘'NO'’, and 'data' is either the text from the command
response, or mandated results from the command.  Each 'data' is either a
‘bytes’, or a tuple.  If a tuple, then the first part is the header of
the response, and the second part contains the data (ie: ‘literal’
value).

The 'message_set' options to commands below is a string specifying one
or more messages to be acted upon.  It may be a simple message number
(‘'1'’), a range of message numbers (‘'2:4'’), or a group of
non-contiguous ranges separated by commas (‘'1:3,6:9'’).  A range can
contain an asterisk to indicate an infinite upper bound (‘'3:*'’).

An *note IMAP4: 909. instance has the following methods:

 -- Método: IMAP4.append (mailbox, flags, date_time, message)

     Append 'message' to named mailbox.

 -- Método: IMAP4.authenticate (mechanism, authobject)

     Authenticate command — requires response processing.

     'mechanism' specifies which authentication mechanism is to be used
     - it should appear in the instance variable ‘capabilities’ in the
     form ‘AUTH=mechanism’.

     'authobject' must be a callable object:

          data = authobject(response)

     It will be called to process server continuation responses; the
     'response' argument it is passed will be ‘bytes’.  It should return
     ‘bytes’ 'data' that will be base64 encoded and sent to the server.
     It should return ‘None’ if the client abort response ‘*’ should be
     sent instead.

     Alterado na versão 3.5: string usernames and passwords are now
     encoded to ‘utf-8’ instead of being limited to ASCII.

 -- Método: IMAP4.check ()

     Checkpoint mailbox on server.

 -- Método: IMAP4.close ()

     Close currently selected mailbox.  Deleted messages are removed
     from writable mailbox.  This is the recommended command before
     ‘LOGOUT’.

 -- Método: IMAP4.copy (message_set, new_mailbox)

     Copy 'message_set' messages onto end of 'new_mailbox'.

 -- Método: IMAP4.create (mailbox)

     Create new mailbox named 'mailbox'.

 -- Método: IMAP4.delete (mailbox)

     Delete old mailbox named 'mailbox'.

 -- Método: IMAP4.deleteacl (mailbox, who)

     Delete the ACLs (remove any rights) set for who on mailbox.

 -- Método: IMAP4.enable (capability)

     Enable 'capability' (see RFC 5161(1)).  Most capabilities do not
     need to be enabled.  Currently only the ‘UTF8=ACCEPT’ capability is
     supported (see RFC 6855(2)).

     Adicionado na versão 3.5: The *note enable(): e39. method itself,
     and RFC 6855(3) support.

 -- Método: IMAP4.expunge ()

     Permanently remove deleted items from selected mailbox.  Generates
     an ‘EXPUNGE’ response for each deleted message.  Returned data
     contains a list of ‘EXPUNGE’ message numbers in order received.

 -- Método: IMAP4.fetch (message_set, message_parts)

     Fetch (parts of) messages.  'message_parts' should be a string of
     message part names enclosed within parentheses, eg: ‘"(UID
     BODY[TEXT])"’.  Returned data are tuples of message part envelope
     and data.

 -- Método: IMAP4.getacl (mailbox)

     Get the ‘ACL’s for 'mailbox'.  The method is non-standard, but is
     supported by the ‘Cyrus’ server.

 -- Método: IMAP4.getannotation (mailbox, entry, attribute)

     Retrieve the specified ‘ANNOTATION’s for 'mailbox'.  The method is
     non-standard, but is supported by the ‘Cyrus’ server.

 -- Método: IMAP4.getquota (root)

     Get the ‘quota’ 'root'’s resource usage and limits.  This method is
     part of the IMAP4 QUOTA extension defined in rfc2087.

 -- Método: IMAP4.getquotaroot (mailbox)

     Get the list of ‘quota’ ‘roots’ for the named 'mailbox'.  This
     method is part of the IMAP4 QUOTA extension defined in rfc2087.

 -- Método: IMAP4.list ([directory[, pattern]])

     List mailbox names in 'directory' matching 'pattern'.  'directory'
     defaults to the top-level mail folder, and 'pattern' defaults to
     match anything.  Returned data contains a list of ‘LIST’ responses.

 -- Método: IMAP4.login (user, password)

     Identify the client using a plaintext password.  The 'password'
     will be quoted.

 -- Método: IMAP4.login_cram_md5 (user, password)

     Force use of ‘CRAM-MD5’ authentication when identifying the client
     to protect the password.  Will only work if the server ‘CAPABILITY’
     response includes the phrase ‘AUTH=CRAM-MD5’.

     Alterado na versão 3.13.8: An *note IMAP4.error: 15fa. is raised if
     MD5 support is not available.

 -- Método: IMAP4.logout ()

     Shutdown connection to server.  Returns server ‘BYE’ response.

     Alterado na versão 3.8: The method no longer ignores silently
     arbitrary exceptions.

 -- Método: IMAP4.lsub (directory='""', pattern='*')

     List subscribed mailbox names in directory matching pattern.
     'directory' defaults to the top level directory and 'pattern'
     defaults to match any mailbox.  Returned data are tuples of message
     part envelope and data.

 -- Método: IMAP4.myrights (mailbox)

     Show my ACLs for a mailbox (i.e.  the rights that I have on
     mailbox).

 -- Método: IMAP4.namespace ()

     Returns IMAP namespaces as defined in RFC 2342(4).

 -- Método: IMAP4.noop ()

     Envia ‘NOOP’ para o servidor.

 -- Método: IMAP4.open (host, port, timeout=None)

     Opens socket to 'port' at 'host'.  The optional 'timeout' parameter
     specifies a timeout in seconds for the connection attempt.  If
     timeout is not given or is ‘None’, the global default socket
     timeout is used.  Also note that if the 'timeout' parameter is set
     to be zero, it will raise a *note ValueError: 202. to reject
     creating a non-blocking socket.  This method is implicitly called
     by the *note IMAP4: 909. constructor.  The connection objects
     established by this method will be used in the *note IMAP4.read():
     3d0b, *note IMAP4.readline(): 3d0c, *note IMAP4.send(): 3d0d, and
     *note IMAP4.shutdown(): 3d0e. methods.  You may override this
     method.

     Levanta um *note evento de auditoria: 19fa. ‘imaplib.open’ com os
     argumentos ‘self’, ‘host’, ‘port’.

     Alterado na versão 3.9: The 'timeout' parameter was added.

 -- Método: IMAP4.partial (message_num, message_part, start, length)

     Fetch truncated part of a message.  Returned data is a tuple of
     message part envelope and data.

 -- Método: IMAP4.proxyauth (user)

     Assume authentication as 'user'.  Allows an authorised
     administrator to proxy into any user’s mailbox.

 -- Método: IMAP4.read (size)

     Reads 'size' bytes from the remote server.  You may override this
     method.

 -- Método: IMAP4.readline ()

     Reads one line from the remote server.  You may override this
     method.

 -- Método: IMAP4.recent ()

     Prompt server for an update.  Returned data is ‘None’ if no new
     messages, else value of ‘RECENT’ response.

 -- Método: IMAP4.rename (oldmailbox, newmailbox)

     Rename mailbox named 'oldmailbox' to 'newmailbox'.

 -- Método: IMAP4.response (code)

     Return data for response 'code' if received, or ‘None’.  Returns
     the given code, instead of the usual type.

 -- Método: IMAP4.search (charset, criterion[, ...])

     Search mailbox for matching messages.  'charset' may be ‘None’, in
     which case no ‘CHARSET’ will be specified in the request to the
     server.  The IMAP protocol requires that at least one criterion be
     specified; an exception will be raised when the server returns an
     error.  'charset' must be ‘None’ if the ‘UTF8=ACCEPT’ capability
     was enabled using the *note enable(): e39. command.

     Exemplo:

          # M is a connected IMAP4 instance...
          typ, msgnums = M.search(None, 'FROM', '"LDJ"')

          # or:
          typ, msgnums = M.search(None, '(FROM "LDJ")')

 -- Método: IMAP4.select (mailbox='INBOX', readonly=False)

     Select a mailbox.  Returned data is the count of messages in
     'mailbox' (‘EXISTS’ response).  The default 'mailbox' is ‘'INBOX'’.
     If the 'readonly' flag is set, modifications to the mailbox are not
     allowed.

 -- Método: IMAP4.send (data)

     Sends ‘data’ to the remote server.  You may override this method.

     Levanta um *note evento de auditoria: 19fa. ‘imaplib.send’ com os
     argumentos ‘self’, ‘data’.

 -- Método: IMAP4.setacl (mailbox, who, what)

     Set an ‘ACL’ for 'mailbox'.  The method is non-standard, but is
     supported by the ‘Cyrus’ server.

 -- Método: IMAP4.setannotation (mailbox, entry, attribute[, ...])

     Set ‘ANNOTATION’s for 'mailbox'.  The method is non-standard, but
     is supported by the ‘Cyrus’ server.

 -- Método: IMAP4.setquota (root, limits)

     Set the ‘quota’ 'root'’s resource 'limits'.  This method is part of
     the IMAP4 QUOTA extension defined in rfc2087.

 -- Método: IMAP4.shutdown ()

     Close connection established in ‘open’.  This method is implicitly
     called by *note IMAP4.logout(): a9d.  You may override this method.

 -- Método: IMAP4.socket ()

     Returns socket instance used to connect to server.

 -- Método: IMAP4.sort (sort_criteria, charset, search_criterion[, ...])

     The ‘sort’ command is a variant of ‘search’ with sorting semantics
     for the results.  Returned data contains a space separated list of
     matching message numbers.

     Sort has two arguments before the 'search_criterion' argument(s); a
     parenthesized list of 'sort_criteria', and the searching 'charset'.
     Note that unlike ‘search’, the searching 'charset' argument is
     mandatory.  There is also a ‘uid sort’ command which corresponds to
     ‘sort’ the way that ‘uid search’ corresponds to ‘search’.  The
     ‘sort’ command first searches the mailbox for messages that match
     the given searching criteria using the charset argument for the
     interpretation of strings in the searching criteria.  It then
     returns the numbers of matching messages.

     This is an ‘IMAP4rev1’ extension command.

 -- Método: IMAP4.starttls (ssl_context=None)

     Send a ‘STARTTLS’ command.  The 'ssl_context' argument is optional
     and should be a *note ssl.SSLContext: 294. object.  This will
     enable encryption on the IMAP connection.  Please read *note
     Considerações de segurança: 354c. for best practices.

     Adicionado na versão 3.2.

     Alterado na versão 3.4: The method now supports hostname check with
     *note ssl.SSLContext.check_hostname: 3676. and 'Server Name
     Indication' (see *note ssl.HAS_SNI: 3688.).

 -- Método: IMAP4.status (mailbox, names)

     Request named status conditions for 'mailbox'.

 -- Método: IMAP4.store (message_set, command, flag_list)

     Alters flag dispositions for messages in mailbox.  'command' is
     specified by section 6.4.6 of RFC 2060(5) as being one of “FLAGS”,
     “+FLAGS”, or “-FLAGS”, optionally with a suffix of “.SILENT”.

     For example, to set the delete flag on all messages:

          typ, data = M.search(None, 'ALL')
          for num in data[0].split():
             M.store(num, '+FLAGS', '\\Deleted')
          M.expunge()

          Nota: Creating flags containing ‘]’ (for example: “[test]”)
          violates RFC 3501(6) (the IMAP protocol).  However, imaplib
          has historically allowed creation of such tags, and popular
          IMAP servers, such as Gmail, accept and produce such flags.
          There are non-Python programs which also create such tags.
          Although it is an RFC violation and IMAP clients and servers
          are supposed to be strict, imaplib still continues to allow
          such tags to be created for backward compatibility reasons,
          and as of Python 3.6, handles them if they are sent from the
          server, since this improves real-world compatibility.

 -- Método: IMAP4.subscribe (mailbox)

     Subscribe to new mailbox.

 -- Método: IMAP4.thread (threading_algorithm, charset,
          search_criterion[, ...])

     The ‘thread’ command is a variant of ‘search’ with threading
     semantics for the results.  Returned data contains a space
     separated list of thread members.

     Thread members consist of zero or more messages numbers, delimited
     by spaces, indicating successive parent and child.

     Thread has two arguments before the 'search_criterion' argument(s);
     a 'threading_algorithm', and the searching 'charset'.  Note that
     unlike ‘search’, the searching 'charset' argument is mandatory.
     There is also a ‘uid thread’ command which corresponds to ‘thread’
     the way that ‘uid search’ corresponds to ‘search’.  The ‘thread’
     command first searches the mailbox for messages that match the
     given searching criteria using the 'charset' argument for the
     interpretation of strings in the searching criteria.  It then
     returns the matching messages threaded according to the specified
     threading algorithm.

     This is an ‘IMAP4rev1’ extension command.

 -- Método: IMAP4.uid (command, arg[, ...])

     Execute command args with messages identified by UID, rather than
     message number.  Returns response appropriate to command.  At least
     one argument must be supplied; if none are provided, the server
     will return an error and an exception will be raised.

 -- Método: IMAP4.unsubscribe (mailbox)

     Unsubscribe from old mailbox.

 -- Método: IMAP4.unselect ()

     *note imaplib.IMAP4.unselect(): 90d. frees server’s resources
     associated with the selected mailbox and returns the server to the
     authenticated state.  This command performs the same actions as
     *note imaplib.IMAP4.close(): 90e, except that no messages are
     permanently removed from the currently selected mailbox.

     Adicionado na versão 3.9.

 -- Método: IMAP4.xatom (name[, ...])

     Allow simple extension commands notified by server in ‘CAPABILITY’
     response.

The following attributes are defined on instances of *note IMAP4: 909.:

 -- Atributo: IMAP4.PROTOCOL_VERSION

     The most recent supported protocol in the ‘CAPABILITY’ response
     from the server.

 -- Atributo: IMAP4.debug

     Integer value to control debugging output.  The initialize value is
     taken from the module variable ‘Debug’.  Values greater than three
     trace each command.

 -- Atributo: IMAP4.utf8_enabled

     Boolean value that is normally ‘False’, but is set to ‘True’ if an
     *note enable(): e39. command is successfully issued for the
     ‘UTF8=ACCEPT’ capability.

     Adicionado na versão 3.5.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc5161.html

   (2) https://datatracker.ietf.org/doc/html/rfc6855.html

   (3) https://datatracker.ietf.org/doc/html/rfc6855.html

   (4) https://datatracker.ietf.org/doc/html/rfc2342.html

   (5) https://datatracker.ietf.org/doc/html/rfc2060.html

   (6) https://datatracker.ietf.org/doc/html/rfc3501.html


File: python.info,  Node: Exemplo IMAP4,  Prev: Objetos IMAP4,  Up: imaplib — IMAP4 protocol client

5.22.13.2 Exemplo IMAP4
.......................

Here is a minimal example (without error checking) that opens a mailbox
and retrieves and prints all messages:

     import getpass, imaplib

     M = imaplib.IMAP4(host='example.org')
     M.login(getpass.getuser(), getpass.getpass())
     M.select()
     typ, data = M.search(None, 'ALL')
     for num in data[0].split():
         typ, data = M.fetch(num, '(RFC822)')
         print('Message %s\n%s\n' % (num, data[0][1]))
     M.close()
     M.logout()


File: python.info,  Node: smtplib — Cliente de protocolo SMTP,  Next: uuid — Objetos UUID conforme RFC 4122,  Prev: imaplib — IMAP4 protocol client,  Up: Protocolos de Internet e Suporte

5.22.14 ‘smtplib’ — Cliente de protocolo SMTP
---------------------------------------------

'Código-fonte:' Lib/smtplib.py(1)

__________________________________________________________________

O módulo *note smtplib: ca. define um objeto de sessão de cliente SMTP
que pode ser usado para enviar e-mails para qualquer máquina da internet
com um daemon de escuta SMTP ou ESMTP. Para obter detalhes sobre a
operação SMTP e ESMTP, consulte RFC 821(2) (Simple Mail Transfer
Protocol) e RFC 1869(3) (SMTP Service Extensions).

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

 -- Classe: smtplib.SMTP (host='', port=0, local_hostname=None[,
          timeout], source_address=None)

     An *note SMTP: 934. instance encapsulates an SMTP connection.  It
     has methods that support a full repertoire of SMTP and ESMTP
     operations.  If the optional 'host' and 'port' parameters are
     given, the SMTP *note connect(): 1b41. method is called with those
     parameters during initialization.  If specified, 'local_hostname'
     is used as the FQDN of the local host in the HELO/EHLO command.
     Otherwise, the local hostname is found using *note
     socket.getfqdn(): 1875.  If the *note connect(): 1b41. call returns
     anything other than a success code, an *note SMTPConnectError:
     3d29. is raised.  The optional 'timeout' parameter specifies a
     timeout in seconds for blocking operations like the connection
     attempt (if not specified, the global default timeout setting will
     be used).  If the timeout expires, *note TimeoutError: 838. is
     raised.  The optional 'source_address' parameter allows binding to
     some specific source address in a machine with multiple network
     interfaces, and/or to some specific source TCP port.  It takes a
     2-tuple ‘(host, port)’, for the socket to bind to as its source
     address before connecting.  If omitted (or if 'host' or 'port' are
     ‘''’ and/or ‘0’ respectively) the OS default behavior will be used.

     For normal use, you should only require the initialization/connect,
     *note sendmail(): e88, and *note SMTP.quit(): 3d2a. methods.  An
     example is included below.

     The *note SMTP: 934. class supports the *note with: 5d2. statement.
     When used like this, the SMTP ‘QUIT’ command is issued
     automatically when the ‘with’ statement exits.  E.g.:

          >>> from smtplib import SMTP
          >>> with SMTP("domain.org") as smtp:
          ...     smtp.noop()
          ...
          (250, b'Ok')
          >>>

     All commands will raise an *note auditing event: 19fa.
     ‘smtplib.SMTP.send’ with arguments ‘self’ and ‘data’, where ‘data’
     is the bytes about to be sent to the remote host.

     Alterado na versão 3.3: Suporte para a instrução *note with: 5d2.
     foi adicionado.

     Alterado na versão 3.3: 'source_address' argument was added.

     Adicionado na versão 3.5: A extensão SMTPUTF8 ( RFC 6531(4) ) é
     suportada agora.

     Alterado na versão 3.9: Se o parâmetro 'timeout' for definido como
     zero, será levantada *note ValueError: 202. para impedir a criação
     de um soquete não bloqueante.

 -- Classe: smtplib.SMTP_SSL (host='', port=0, local_hostname=None, *[,
          timeout], context=None, source_address=None)

     An *note SMTP_SSL: 935. instance behaves exactly the same as
     instances of *note SMTP: 934.  *note SMTP_SSL: 935. should be used
     for situations where SSL is required from the beginning of the
     connection and using *note starttls(): 1177. is not appropriate.
     If 'host' is not specified, the local host is used.  If 'port' is
     zero, the standard SMTP-over-SSL port (465) is used.  The optional
     arguments 'local_hostname', 'timeout' and 'source_address' have the
     same meaning as they do in the *note SMTP: 934. class.  'context',
     also optional, can contain a *note SSLContext: 294. and allows
     configuring various aspects of the secure connection.  Please read
     *note Considerações de segurança: 354c. for best practices.

     Alterado na versão 3.3: 'context' foi adicionado.

     Alterado na versão 3.3: O argumento 'source_address' foi
     adicionado.

     Alterado na versão 3.4: A classe agora oferece suporte a
     verificação de nome de host com *note
     ssl.SSLContext.check_hostname: 3676. e 'Indicação de nome de
     servidor' (veja *note ssl.HAS_SNI: 3688.).

     Alterado na versão 3.9: If the 'timeout' parameter is set to be
     zero, it will raise a *note ValueError: 202. to prevent the
     creation of a non-blocking socket

     Alterado na versão 3.12: Os parâmetros depreciados 'keyfile' e
     'certfile' foram removidos.

 -- Classe: smtplib.LMTP (host='', port=LMTP_PORT, local_hostname=None,
          source_address=None[, timeout])

     The LMTP protocol, which is very similar to ESMTP, is heavily based
     on the standard SMTP client.  It’s common to use Unix sockets for
     LMTP, so our *note connect(): 1b41. method must support that as
     well as a regular host:port server.  The optional arguments
     'local_hostname' and 'source_address' have the same meaning as they
     do in the *note SMTP: 934. class.  To specify a Unix socket, you
     must use an absolute path for 'host', starting with a ‘/’.

     Authentication is supported, using the regular SMTP mechanism.
     When using a Unix socket, LMTP generally don’t support or require
     any authentication, but your mileage might vary.

     Alterado na versão 3.9: O parâmetro opcional 'timeout' foi
     adicionado.

A nice selection of exceptions is defined as well:

 -- Exceção: smtplib.SMTPException

     Subclass of *note OSError: 417. that is the base exception class
     for all the other exceptions provided by this module.

     Alterado na versão 3.4: SMTPException became subclass of *note
     OSError: 417.

 -- Exceção: smtplib.SMTPServerDisconnected

     This exception is raised when the server unexpectedly disconnects,
     or when an attempt is made to use the *note SMTP: 934. instance
     before connecting it to a server.

 -- Exceção: smtplib.SMTPResponseException

     Base class for all exceptions that include an SMTP error code.
     These exceptions are generated in some instances when the SMTP
     server returns an error code.

      -- Atributo: smtp_code

          O código do erro.

      -- Atributo: smtp_error

          The error message.

 -- Exceção: smtplib.SMTPSenderRefused

     Sender address refused.  In addition to the attributes set by on
     all *note SMTPResponseException: 3d2c. exceptions, this sets
     ‘sender’ to the string that the SMTP server refused.

 -- Exceção: smtplib.SMTPRecipientsRefused

     All recipient addresses refused.

      -- Atributo: recipients

          A dictionary of exactly the same sort as returned by *note
          SMTP.sendmail(): e88. containing the errors for each
          recipient.

 -- Exceção: smtplib.SMTPDataError

     O servidor SMTP recusou aceitar o dados da mensagem.

 -- Exceção: smtplib.SMTPConnectError

     Ocorreu um erro ao estabelecer uma conexão com o servidor.

 -- Exceção: smtplib.SMTPHeloError

     O servidor recusou sua mensagem ‘HELO’.

 -- Exceção: smtplib.SMTPNotSupportedError

     The command or option attempted is not supported by the server.

     Adicionado na versão 3.5.

 -- Exceção: smtplib.SMTPAuthenticationError

     SMTP authentication went wrong.  Most probably the server didn’t
     accept the username/password combination provided.

Ver também
..........

RFC 821(5) - Simple Mail Transfer Protocol

     Protocol definition for SMTP. This document covers the model,
     operating procedure, and protocol details for SMTP.

RFC 1869(6) - SMTP Service Extensions

     Definition of the ESMTP extensions for SMTP. This describes a
     framework for extending SMTP with new commands, supporting dynamic
     discovery of the commands provided by the server, and defines a few
     additional commands.

* Menu:

* Objetos SMTP::
* Exemplo SMTP::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/smtplib.py

   (2) https://datatracker.ietf.org/doc/html/rfc821.html

   (3) https://datatracker.ietf.org/doc/html/rfc1869.html

   (4) https://datatracker.ietf.org/doc/html/rfc6531.html

   (5) https://datatracker.ietf.org/doc/html/rfc821.html

   (6) https://datatracker.ietf.org/doc/html/rfc1869.html


File: python.info,  Node: Objetos SMTP,  Next: Exemplo SMTP,  Up: smtplib — Cliente de protocolo SMTP

5.22.14.1 Objetos SMTP
......................

An *note SMTP: 934. instance has the following methods:

 -- Método: SMTP.set_debuglevel (level)

     Set the debug output level.  A value of 1 or ‘True’ for 'level'
     results in debug messages for connection and for all messages sent
     to and received from the server.  A value of 2 for 'level' results
     in these messages being timestamped.

     Alterado na versão 3.5: Adicionado o nível de depuração 2.

 -- Método: SMTP.docmd (cmd, args='')

     Send a command 'cmd' to the server.  The optional argument 'args'
     is simply concatenated to the command, separated by a space.

     This returns a 2-tuple composed of a numeric response code and the
     actual response line (multiline responses are joined into one long
     line.)

     In normal operation it should not be necessary to call this method
     explicitly.  It is used to implement other methods and may be
     useful for testing private extensions.

     If the connection to the server is lost while waiting for the
     reply, *note SMTPServerDisconnected: 3d2b. will be raised.

 -- Método: SMTP.connect (host='localhost', port=0)

     Connect to a host on a given port.  The defaults are to connect to
     the local host at the standard SMTP port (25).  If the hostname
     ends with a colon (‘':'’) followed by a number, that suffix will be
     stripped off and the number interpreted as the port number to use.
     This method is automatically invoked by the constructor if a host
     is specified during instantiation.  Returns a 2-tuple of the
     response code and message sent by the server in its connection
     response.

     Levanta um *note evento de auditoria: 19fa. ‘smtplib.connect’ com
     os argumentos ‘self’, ‘host’, ‘port’.

 -- Método: SMTP.helo (name='')

     Identify yourself to the SMTP server using ‘HELO’.  The hostname
     argument defaults to the fully qualified domain name of the local
     host.  The message returned by the server is stored as the *note
     helo_resp: 3d39. attribute of the object.

     In normal operation it should not be necessary to call this method
     explicitly.  It will be implicitly called by the *note sendmail():
     e88. when necessary.

 -- Método: SMTP.ehlo (name='')

     Identify yourself to an ESMTP server using ‘EHLO’.  The hostname
     argument defaults to the fully qualified domain name of the local
     host.  Examine the response for ESMTP option and store them for use
     by *note has_extn(): 3d3b.  Also sets several informational
     attributes: the message returned by the server is stored as the
     *note ehlo_resp: 3d3c. attribute, *note does_esmtp: 3d3d. is set to
     ‘True’ or ‘False’ depending on whether the server supports ESMTP,
     and *note esmtp_features: 3d3e. will be a dictionary containing the
     names of the SMTP service extensions this server supports, and
     their parameters (if any).

     Unless you wish to use *note has_extn(): 3d3b. before sending mail,
     it should not be necessary to call this method explicitly.  It will
     be implicitly called by *note sendmail(): e88. when necessary.

 -- Método: SMTP.ehlo_or_helo_if_needed ()

     This method calls *note ehlo(): 3d3a. and/or *note helo(): 3d38. if
     there has been no previous ‘EHLO’ or ‘HELO’ command this session.
     It tries ESMTP ‘EHLO’ first.

     *note SMTPHeloError: 3d33.

          The server didn’t reply properly to the ‘HELO’ greeting.

 -- Método: SMTP.has_extn (name)

     Return *note True: c27. if 'name' is in the set of SMTP service
     extensions returned by the server, *note False: b49. otherwise.
     Case is ignored.

 -- Método: SMTP.verify (address)

     Check the validity of an address on this server using SMTP ‘VRFY’.
     Returns a tuple consisting of code 250 and a full RFC 822(1)
     address (including human name) if the user address is valid.
     Otherwise returns an SMTP error code of 400 or greater and an error
     string.

          Nota: Muitos servidores desabilitam o SMTP ‘VRFY’ para
          despistar spammers.

 -- Método: SMTP.login (user, password, *, initial_response_ok=True)

     Log in on an SMTP server that requires authentication.  The
     arguments are the username and the password to authenticate with.
     If there has been no previous ‘EHLO’ or ‘HELO’ command this
     session, this method tries ESMTP ‘EHLO’ first.  This method will
     return normally if the authentication was successful, or may raise
     the following exceptions:

     *note SMTPHeloError: 3d33.

          The server didn’t reply properly to the ‘HELO’ greeting.

     *note SMTPAuthenticationError: 3d34.

          O servidor não aceitou a combinação de usuário/senha.

     *note SMTPNotSupportedError: 1b40.

          The ‘AUTH’ command is not supported by the server.

     *note SMTPException: fd5.

          No suitable authentication method was found.

     Each of the authentication methods supported by *note smtplib: ca.
     are tried in turn if they are advertised as supported by the
     server.  See *note auth(): e86. for a list of supported
     authentication methods.  'initial_response_ok' is passed through to
     *note auth(): e86.

     Optional keyword argument 'initial_response_ok' specifies whether,
     for authentication methods that support it, an “initial response”
     as specified in RFC 4954(2) can be sent along with the ‘AUTH’
     command, rather than requiring a challenge/response.

     Alterado na versão 3.5: *note SMTPNotSupportedError: 1b40. may be
     raised, and the 'initial_response_ok' parameter was added.

 -- Método: SMTP.auth (mechanism, authobject, *,
          initial_response_ok=True)

     Issue an ‘SMTP’ ‘AUTH’ command for the specified authentication
     'mechanism', and handle the challenge response via 'authobject'.

     'mechanism' specifies which authentication mechanism is to be used
     as argument to the ‘AUTH’ command; the valid values are those
     listed in the ‘auth’ element of *note esmtp_features: 3d3e.

     'authobject' must be a callable object taking an optional single
     argument:

          data = authobject(challenge=None)

     If optional keyword argument 'initial_response_ok' is true,
     ‘authobject()’ will be called first with no argument.  It can
     return the RFC 4954(3) “initial response” ASCII ‘str’ which will be
     encoded and sent with the ‘AUTH’ command as below.  If the
     ‘authobject()’ does not support an initial response (e.g.  because
     it requires a challenge), it should return ‘None’ when called with
     ‘challenge=None’.  If 'initial_response_ok' is false, then
     ‘authobject()’ will not be called first with ‘None’.

     If the initial response check returns ‘None’, or if
     'initial_response_ok' is false, ‘authobject()’ will be called to
     process the server’s challenge response; the 'challenge' argument
     it is passed will be a ‘bytes’.  It should return ASCII ‘str’
     'data' that will be base64 encoded and sent to the server.

     The ‘SMTP’ class provides ‘authobjects’ for the ‘CRAM-MD5’,
     ‘PLAIN’, and ‘LOGIN’ mechanisms; they are named
     ‘SMTP.auth_cram_md5’, ‘SMTP.auth_plain’, and ‘SMTP.auth_login’
     respectively.  They all require that the ‘user’ and ‘password’
     properties of the ‘SMTP’ instance are set to appropriate values.

     User code does not normally need to call ‘auth’ directly, but can
     instead call the *note login(): 3d41. method, which will try each
     of the above mechanisms in turn, in the order listed.  ‘auth’ is
     exposed to facilitate the implementation of authentication methods
     not (or not yet) supported directly by *note smtplib: ca.

     Adicionado na versão 3.5.

 -- Método: SMTP.starttls (*, context=None)

     Put the SMTP connection in TLS (Transport Layer Security) mode.
     All SMTP commands that follow will be encrypted.  You should then
     call *note ehlo(): 3d3a. again.

     If 'keyfile' and 'certfile' are provided, they are used to create
     an *note ssl.SSLContext: 294.

     Optional 'context' parameter is an *note ssl.SSLContext: 294.
     object; This is an alternative to using a keyfile and a certfile
     and if specified both 'keyfile' and 'certfile' should be ‘None’.

     If there has been no previous ‘EHLO’ or ‘HELO’ command this
     session, this method tries ESMTP ‘EHLO’ first.

     Alterado na versão 3.12: Os parâmetros depreciados 'keyfile' e
     'certfile' foram removidos.

     *note SMTPHeloError: 3d33.

          The server didn’t reply properly to the ‘HELO’ greeting.

     *note SMTPNotSupportedError: 1b40.

          O servidor não da suporte a extensão STARTTLS.

     *note RuntimeError: 195.

          SSL/TLS support is not available to your Python interpreter.

     Alterado na versão 3.3: 'context' foi adicionado.

     Alterado na versão 3.4: The method now supports hostname check with
     *note ssl.SSLContext.check_hostname: 3676. and 'Server Name
     Indicator' (see *note HAS_SNI: 3688.).

     Alterado na versão 3.5: The error raised for lack of STARTTLS
     support is now the *note SMTPNotSupportedError: 1b40. subclass
     instead of the base *note SMTPException: fd5.

 -- Método: SMTP.sendmail (from_addr, to_addrs, msg, mail_options=(),
          rcpt_options=())

     Send mail.  The required arguments are an RFC 822(4) from-address
     string, a list of RFC 822(5) to-address strings (a bare string will
     be treated as a list with 1 address), and a message string.  The
     caller may pass a list of ESMTP options (such as ‘"8bitmime"’) to
     be used in ‘MAIL FROM’ commands as 'mail_options'.  ESMTP options
     (such as ‘DSN’ commands) that should be used with all ‘RCPT’
     commands can be passed as 'rcpt_options'.  Each option should be
     passed as a string containing the full text of the option,
     including any potential key (for instance,
     ‘"NOTIFY=SUCCESS,FAILURE"’).  (If you need to use different ESMTP
     options to different recipients you have to use the low-level
     methods such as ‘mail()’, ‘rcpt()’ and ‘data()’ to send the
     message.)

          Nota: The 'from_addr' and 'to_addrs' parameters are used to
          construct the message envelope used by the transport agents.
          ‘sendmail’ does not modify the message headers in any way.

     'msg' may be a string containing characters in the ASCII range, or
     a byte string.  A string is encoded to bytes using the ascii codec,
     and lone ‘\r’ and ‘\n’ characters are converted to ‘\r\n’
     characters.  A byte string is not modified.

     If there has been no previous ‘EHLO’ or ‘HELO’ command this
     session, this method tries ESMTP ‘EHLO’ first.  If the server does
     ESMTP, message size and each of the specified options will be
     passed to it (if the option is in the feature set the server
     advertises).  If ‘EHLO’ fails, ‘HELO’ will be tried and ESMTP
     options suppressed.

     This method will return normally if the mail is accepted for at
     least one recipient.  Otherwise it will raise an exception.  That
     is, if this method does not raise an exception, then someone should
     get your mail.  If this method does not raise an exception, it
     returns a dictionary, with one entry for each recipient that was
     refused.  Each entry contains a tuple of the SMTP error code and
     the accompanying error message sent by the server.

     If ‘SMTPUTF8’ is included in 'mail_options', and the server
     supports it, 'from_addr' and 'to_addrs' may contain non-ASCII
     characters.

     Esse método deve levantar as seguintes exceções:

     *note SMTPRecipientsRefused: 3d30.

          All recipients were refused.  Nobody got the mail.

     *note SMTPHeloError: 3d33.

          The server didn’t reply properly to the ‘HELO’ greeting.

     *note SMTPSenderRefused: 3d2f.

          O servidor não aceita o 'from_addr'.

     *note SMTPDataError: 3d32.

          The server replied with an unexpected error code (other than a
          refusal of a recipient).

     *note SMTPNotSupportedError: 1b40.

          ‘SMTPUTF8’ was given in the 'mail_options' but is not
          supported by the server.

     Unless otherwise noted, the connection will be open even after an
     exception is raised.

     Alterado na versão 3.2: 'msg' may be a byte string.

     Alterado na versão 3.5: ‘SMTPUTF8’ support added, and *note
     SMTPNotSupportedError: 1b40. may be raised if ‘SMTPUTF8’ is
     specified but the server does not support it.

 -- Método: SMTP.send_message (msg, from_addr=None, to_addrs=None,
          mail_options=(), rcpt_options=())

     This is a convenience method for calling *note sendmail(): e88.
     with the message represented by an *note email.message.Message:
     27c. object.  The arguments have the same meaning as for *note
     sendmail(): e88, except that 'msg' is a ‘Message’ object.

     If 'from_addr' is ‘None’ or 'to_addrs' is ‘None’, ‘send_message’
     fills those arguments with addresses extracted from the headers of
     'msg' as specified in RFC 5322(6): 'from_addr' is set to the
     ‘Sender’ field if it is present, and otherwise to the ‘From’ field.
     'to_addrs' combines the values (if any) of the ‘To’, ‘Cc’, and
     ‘Bcc’ fields from 'msg'.  If exactly one set of ‘Resent-*’ headers
     appear in the message, the regular headers are ignored and the
     ‘Resent-*’ headers are used instead.  If the message contains more
     than one set of ‘Resent-*’ headers, a *note ValueError: 202. is
     raised, since there is no way to unambiguously detect the most
     recent set of ‘Resent-’ headers.

     ‘send_message’ serializes 'msg' using *note BytesGenerator: 120f.
     with ‘\r\n’ as the 'linesep', and calls *note sendmail(): e88. to
     transmit the resulting message.  Regardless of the values of
     'from_addr' and 'to_addrs', ‘send_message’ does not transmit any
     ‘Bcc’ or ‘Resent-Bcc’ headers that may appear in 'msg'.  If any of
     the addresses in 'from_addr' and 'to_addrs' contain non-ASCII
     characters and the server does not advertise ‘SMTPUTF8’ support, an
     *note SMTPNotSupportedError: 1b40. is raised.  Otherwise the
     ‘Message’ is serialized with a clone of its *note policy: 4f. with
     the *note utf8: e24. attribute set to ‘True’, and ‘SMTPUTF8’ and
     ‘BODY=8BITMIME’ are added to 'mail_options'.

     Adicionado na versão 3.2.

     Adicionado na versão 3.5: Support for internationalized addresses
     (‘SMTPUTF8’).

 -- Método: SMTP.quit ()

     Terminate the SMTP session and close the connection.  Return the
     result of the SMTP ‘QUIT’ command.

Low-level methods corresponding to the standard SMTP/ESMTP commands
‘HELP’, ‘RSET’, ‘NOOP’, ‘MAIL’, ‘RCPT’, and ‘DATA’ are also supported.
Normally these do not need to be called directly, so they are not
documented here.  For details, consult the module code.

Additionally, an SMTP instance has the following attributes:

 -- Atributo: SMTP.helo_resp

     The response to the ‘HELO’ command, see *note helo(): 3d38.

 -- Atributo: SMTP.ehlo_resp

     The response to the ‘EHLO’ command, see *note ehlo(): 3d3a.

 -- Atributo: SMTP.does_esmtp

     A boolean value indicating whether the server supports ESMTP, see
     *note ehlo(): 3d3a.

 -- Atributo: SMTP.esmtp_features

     A dictionary of the names of SMTP service extensions supported by
     the server, see *note ehlo(): 3d3a.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc822.html

   (2) https://datatracker.ietf.org/doc/html/rfc4954.html

   (3) https://datatracker.ietf.org/doc/html/rfc4954.html

   (4) https://datatracker.ietf.org/doc/html/rfc822.html

   (5) https://datatracker.ietf.org/doc/html/rfc822.html

   (6) https://datatracker.ietf.org/doc/html/rfc5322.html


File: python.info,  Node: Exemplo SMTP,  Prev: Objetos SMTP,  Up: smtplib — Cliente de protocolo SMTP

5.22.14.2 Exemplo SMTP
......................

This example prompts the user for addresses needed in the message
envelope (‘To’ and ‘From’ addresses), and the message to be delivered.
Note that the headers to be included with the message must be included
in the message as entered; this example doesn’t do any processing of the
RFC 822(1) headers.  In particular, the ‘To’ and ‘From’ addresses must
be included in the message headers explicitly:

     import smtplib

     def prompt(title):
         return input(title).strip()

     from_addr = prompt("From: ")
     to_addrs  = prompt("To: ").split()
     print("Enter message, end with ^D (Unix) or ^Z (Windows):")

     # Add the From: and To: headers at the start!
     lines = [f"From: {from_addr}", f"To: {', '.join(to_addrs)}", ""]
     while True:
         try:
             line = input()
         except EOFError:
             break
         else:
             lines.append(line)

     msg = "\r\n".join(lines)
     print("Message length is", len(msg))

     server = smtplib.SMTP("localhost")
     server.set_debuglevel(1)
     server.sendmail(from_addr, to_addrs, msg)
     server.quit()

     Nota: In general, you will want to use the *note email: 3b.
     package’s features to construct an email message, which you can
     then send via *note send_message(): e89.; see *note email;
     Exemplos: f6f.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc822.html


File: python.info,  Node: uuid — Objetos UUID conforme RFC 4122,  Next: socketserver — Um framework para servidores de rede,  Prev: smtplib — Cliente de protocolo SMTP,  Up: Protocolos de Internet e Suporte

5.22.15 ‘uuid’ — Objetos UUID conforme
--------------------------------------

'RFC 4122'

'Código-fonte:' Lib/uuid.py(1)

__________________________________________________________________

Este módulo fornece objetos *note UUID: a6a. imutáveis (a classe *note
UUID: a6a.) e as funções *note uuid1(): bc0, *note uuid3(): 1645, *note
uuid4(): 1646, *note uuid5(): 1647. para gerar UUIDs de versão 1, 3, 4 e
5, conforme especificado em RFC 4122(2).

Se tudo o que você quer é um ID único, você provavelmente deve chamar
*note uuid1(): bc0. ou *note uuid4(): 1646.  Note que *note uuid1():
bc0. pode comprometer a privacidade, pois cria um UUID contendo o
endereço de rede do computador.  *note uuid4(): 1646. cria um UUID
aleatório.

Dependendo do suporte da plataforma subjacente, *note uuid1(): bc0. pode
ou não retornar um UUID “seguro”.  Um UUID seguro é aquele que é gerado
usando métodos de sincronização que garantem que dois processos não
possam obter o mesmo UUID. Todas as instâncias de *note UUID: a6a. têm
um atributo *note is_safe: bbe. que retransmite qualquer informação
sobre a segurança do UUID, usando esta enumeração:

 -- Classe: uuid.SafeUUID

     Adicionado na versão 3.7.

      -- Atributo: safe

          O UUID foi gerado pela plataforma de forma segura para
          multiprocessamento.

      -- Atributo: unsafe

          O UUID não foi gerado de forma segura para multiprocessamento.

      -- Atributo: unknown

          A plataforma não fornece informações sobre se o UUID foi
          gerado com segurança ou não.

 -- Classe: uuid.UUID (hex=None, bytes=None, bytes_le=None, fields=None,
          int=None, version=None, *, is_safe=SafeUUID.unknown)

     Cria um UUID a partir de uma sequência de 32 dígitos hexadecimais,
     uma sequência de 16 bytes em ordem big-endian como o argumento
     'bytes', uma sequência de 16 bytes em ordem little-endian como o
     argumento 'bytes_le', uma tupla de seis inteiros ('time_low' de 32
     bits, 'time_mid' de 16 bits, 'time_hi_version' de 16 bits,
     'clock_seq_hi_variant' de 8 bits, 'clock_seq_low' de 8 bits, 'node'
     de 48 bits) como o argumento 'fields' ou um único inteiro de 128
     bits como o argumento 'int'.  Quando uma sequência de dígitos
     hexadecimais é fornecida, chaves, hifens e um prefixo URN são todos
     opcionais.  Por exemplo, todas essas expressões produzem o mesmo
     UUID:

          UUID('{12345678-1234-5678-1234-567812345678}')
          UUID('12345678123456781234567812345678')
          UUID('urn:uuid:12345678-1234-5678-1234-567812345678')
          UUID(bytes=b'\x12\x34\x56\x78'*4)
          UUID(bytes_le=b'\x78\x56\x34\x12\x34\x12\x78\x56' +
                        b'\x12\x34\x56\x78\x12\x34\x56\x78')
          UUID(fields=(0x12345678, 0x1234, 0x5678, 0x12, 0x34, 0x567812345678))
          UUID(int=0x12345678123456781234567812345678)

     Exatamente um de 'hex', 'bytes', 'bytes_le', 'fields' ou 'int' deve
     ser fornecido.  O argumento 'version' é opcional; se fornecido, o
     UUID resultante terá sua variante e número de versão definidos de
     acordo com RFC 4122(3), substituindo bits no 'hex', 'bytes',
     'bytes_le', 'fields' ou 'int' fornecido.

     A comparação de objetos UUID é feita por meio da comparação de seus
     atributos *note UUID.int: 3d4b.  A comparação com um objeto não
     UUID levanta uma *note TypeError: 2c3.

     ‘str(uuid)’ retorna uma string no formato
     ‘12345678-1234-5678-1234-567812345678’ onde os 32 dígitos
     hexadecimais representam o UUID.

As instâncias *note UUID: a6a. têm estes atributos de somente leitura:

 -- Atributo: UUID.bytes

     O UUID como uma string de 16 bytes (contendo os seis campos
     inteiros em ordem de bytes big-endian).

 -- Atributo: UUID.bytes_le

     O UUID como uma string de 16 bytes (com 'time_low', 'time_mid' e
     'time_hi_version' em ordem de bytes little-endian).

 -- Atributo: UUID.fields

     Uma tupla dos seis campos de inteiros do UUID, que também estão
     disponíveis como seis atributos individuais e dois atributos
     derivados:

Campo                                                  Significado
                                                       
                                                       
 -- Atributo: UUID.time_low                            Os primeiros 32 bits do UUID.
                                                       
                                                       
 -- Atributo: UUID.time_mid                            Os próximos 16 bits do UUID.
                                                       
                                                       
 -- Atributo: UUID.time_hi_version                     Os próximos 16 bits do UUID.
                                                       
                                                       
 -- Atributo: UUID.clock_seq_hi_variant                Os próximos 8 bits do UUID.
                                                       
                                                       
 -- Atributo: UUID.clock_seq_low                       Os próximos 8 bits do UUID.
                                                       
                                                       
 -- Atributo: UUID.node                                Os últimos 48 bits do UUID.
                                                       
                                                       
 -- Atributo: UUID.time                                O registro de data e hora de 60 bits.
                                                       
                                                       
 -- Atributo: UUID.clock_seq                           O número de sequência de 14 bits.
                                                       

 -- Atributo: UUID.hex

     O UUID como uma sequência hexadecimal de 32 caracteres minúsculos.

 -- Atributo: UUID.int

     O UUID como um inteiro de 128 bits.

 -- Atributo: UUID.urn

     O UUID como um URN conforme especificado no RFC 4122(4).

 -- Atributo: UUID.variant

     A variante UUID, que determina o layout interno do UUID. Esta será
     uma das constantes *note RESERVED_NCS: 3d5a, *note RFC_4122: 3d5b,
     *note RESERVED_MICROSOFT: 3d5c. ou *note RESERVED_FUTURE: 3d5d.

 -- Atributo: UUID.version

     O número da versão do UUID (1 a 5, significativo somente quando a
     variante é *note RFC_4122: 3d5b.).

 -- Atributo: UUID.is_safe

     Uma enumeração de *note SafeUUID: 3d47. que indica se a plataforma
     gerou o UUID de forma segura para multiprocessamento.

     Adicionado na versão 3.7.

O módulo *note uuid: 110. define as seguintes funções:

 -- Função: uuid.getnode ()

     Obtém o endereço de hardware como um inteiro positivo de 48 bits.
     Na primeira vez que isso for executado, ele pode iniciar um
     programa separado, o que pode ser bem lento.  Se todas as
     tentativas de obter o endereço de hardware falharem, escolhemos um
     número aleatório de 48 bits com o bit multicast (bit menos
     significativo do primeiro octeto) definido como 1, conforme
     recomendado no RFC 4122(5).  “Endereço de hardware” significa o
     endereço MAC de uma interface de rede.  Em uma máquina com várias
     interfaces de rede, endereços MAC administrados universalmente (ou
     seja, onde o segundo bit menos significativo do primeiro octeto é
     'não definido') serão preferidos em relação a endereços MAC
     administrados localmente, mas sem nenhuma outra garantia de
     ordenação.

     Alterado na versão 3.7: Endereços MAC administrados universalmente
     são preferidos em vez de endereços MAC administrados localmente,
     pois os primeiros têm garantia de serem globalmente exclusivos,
     enquanto os últimos não.

 -- Função: uuid.uuid1 (node=None, clock_seq=None)

     Gera um UUID a partir de um ID de host, número de sequência e hora
     atual.  Se 'node' não for fornecido, *note getnode(): bbf. é usado
     para obter o endereço de hardware.  Se 'clock_seq' for fornecido,
     ele é usado como o número de sequência; caso contrário, um número
     de sequência aleatório de 14 bits é escolhido.

 -- Função: uuid.uuid3 (namespace, name)

     Gera um UUID com base no hash MD5 de um identificador de espaço de
     nomes (que é um UUID) e um nome (que é um objeto *note bytes: 1c2.
     ou uma string que será codificada usando UTF-8).

 -- Função: uuid.uuid4 ()

     Gera um UUID aleatório.

 -- Função: uuid.uuid5 (namespace, name)

     Gera um UUID com base no hash SHA-1 de um identificador de espaço
     de nomes (que é um UUID) e um nome (que é um objeto *note bytes:
     1c2. ou uma string que será codificada usando UTF-8).

O módulo *note uuid: 110. define os seguintes identificadores de espaço
de nomes para uso com *note uuid3(): 1645. ou *note uuid5(): 1647.

 -- Dado: uuid.NAMESPACE_DNS

     Quando esse espaço de nomes é especificado, a string 'name' é um
     nome de domínio totalmente qualificado.

 -- Dado: uuid.NAMESPACE_URL

     Quando esse espaço de nomes é especificado, a string 'name' é uma
     URL.

 -- Dado: uuid.NAMESPACE_OID

     Quando esse espaço de nomes é especificado, a string 'name' é um
     OID ISO.

 -- Dado: uuid.NAMESPACE_X500

     Quando esse espaço de nomes é especificado, a string 'name' é um DN
     X.500 em DER ou um formato de saída de texto.

O módulo *note uuid: 110. define as seguintes constantes para os valores
possíveis do atributo *note variant: 3d59.:

 -- Dado: uuid.RESERVED_NCS

     Reservado para compatibilidade com NCS.

 -- Dado: uuid.RFC_4122

     Especifica o layout do UUID fornecido no RFC 4122(6).

 -- Dado: uuid.RESERVED_MICROSOFT

     Reservado para compatibilidade com Microsoft.

 -- Dado: uuid.RESERVED_FUTURE

     Reservado para definição futura.

Ver também
..........

RFC 4122(7) - Um espaço de nomes de URN de identificador universalmente exclusivo (UUID)

     Esta especificação define um espaço de nomes de Uniform Resource
     Name para UUIDs, o formato interno de UUIDs e métodos de geração de
     UUIDs.

* Menu:

* Uso na linha de comando: Uso na linha de comando<4>.
* Exemplo: Exemplo<11>.
* Exemplo de linha de comando::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/uuid.py

   (2) https://datatracker.ietf.org/doc/html/rfc4122.html

   (3) https://datatracker.ietf.org/doc/html/rfc4122.html

   (4) https://datatracker.ietf.org/doc/html/rfc4122.html

   (5) https://datatracker.ietf.org/doc/html/rfc4122.html

   (6) https://datatracker.ietf.org/doc/html/rfc4122.html

   (7) https://datatracker.ietf.org/doc/html/rfc4122.html


File: python.info,  Node: Uso na linha de comando<4>,  Next: Exemplo<11>,  Up: uuid — Objetos UUID conforme RFC 4122

5.22.15.1 Uso na linha de comando
.................................

Adicionado na versão 3.12.

O módulo *note uuid: 110. pode ser invocado como um script na linha de
comando:

     python -m uuid [-h] [-u {uuid1,uuid3,uuid4,uuid5}] [-n ESPAÇO-DE-NOMES] [-N NOME]

As seguintes opções são aceitas:

 -- Option: -h, --help

     Mostra a mensagem de ajuda e sai.

 -- Option: -u <uuid>
 -- Option: --uuid <uuid>

     Especifica o nome da função a ser usada para gerar o uuid.  Por
     padrão, *note uuid4(): 1646. é usado.

 -- Option: -n <namespace>
 -- Option: --namespace <namespace>

     O espaço de nomes é um ‘UUID’, ou ‘@ns’ onde ‘ns’ é um UUID
     predefinido bem conhecido endereçado pelo nome do espaço de nomes.
     Como ‘@dns’, ‘@url’, ‘@oid’ e ‘@x500’.  Necessário apenas para
     funções *note uuid3(): 1645. / *note uuid5(): 1647.

 -- Option: -N <name>
 -- Option: --name <name>

     O nome usado como parte da geração do uuid.  Requerido apenas para
     funções *note uuid3(): 1645. / *note uuid5(): 1647.


File: python.info,  Node: Exemplo<11>,  Next: Exemplo de linha de comando,  Prev: Uso na linha de comando<4>,  Up: uuid — Objetos UUID conforme RFC 4122

5.22.15.2 Exemplo
.................

Aqui estão alguns exemplos de uso típico do módulo *note uuid: 110.:

     >>> import uuid

     >>> # cria um UUID com base no ID do host e o horário atual
     >>> uuid.uuid1()
     UUID('a8098c1a-f86e-11da-bd1a-00112444be1e')

     >>> # cria um UUID usando um hash MD5 de um nome e um UUID de espaço de nomes
     >>> uuid.uuid3(uuid.NAMESPACE_DNS, 'python.org')
     UUID('6fa459ea-ee8a-3ca4-894e-db77e160355e')

     >>> # cria um UUID aleatório
     >>> uuid.uuid4()
     UUID('16fd2706-8baf-433b-82eb-8c7fada847da')

     >>> # cria um UUID usando um hash SHA-1 de um nome e um UUID de espaço de nomes
     >>> uuid.uuid5(uuid.NAMESPACE_DNS, 'python.org')
     UUID('886313e1-3b8a-5372-9b90-0c9aee199e5d')

     >>> # cria um UUID de uma string de dígitos hex (chaves e hífens ignorados)
     >>> x = uuid.UUID('{00010203-0405-0607-0809-0a0b0c0d0e0f}')

     >>> # converte um UUID para uma string de dígitos hex numa forma padrão
     >>> str(x)
     '00010203-0405-0607-0809-0a0b0c0d0e0f'

     >>> # obtém o objeto bruto de 16 bytes do UUID
     >>> x.bytes
     b'\x00\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f'

     >>> # cria um UUID de um string de 16 bytes
     >>> uuid.UUID(bytes=x.bytes)
     UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')


File: python.info,  Node: Exemplo de linha de comando,  Prev: Exemplo<11>,  Up: uuid — Objetos UUID conforme RFC 4122

5.22.15.3 Exemplo de linha de comando
.....................................

Aqui estão alguns exemplos de uso típico da interface de linha de
comando do *note uuid: 110.:

     # gera um uuid aleatório - por padrão, uuid4() é usado
     $ python -m uuid

     # gera um uuid usando uuid1()
     $ python -m uuid -u uuid1

     # gera um uuid usando uuid5
     $ python -m uuid -u uuid5 -n @url -N example.com


File: python.info,  Node: socketserver — Um framework para servidores de rede,  Next: http server — HTTP servers,  Prev: uuid — Objetos UUID conforme RFC 4122,  Up: Protocolos de Internet e Suporte

5.22.16 ‘socketserver’ — Um framework para servidores de rede
-------------------------------------------------------------

'Código-fonte:' Lib/socketserver.py(1)

__________________________________________________________________

O módulo *note socketserver: cd. simplifica a tarefa de escrever
servidores de rede.

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

Existem quatro classes básicas de servidores concretos:

 -- Classe: socketserver.TCPServer (server_address, RequestHandlerClass,
          bind_and_activate=True)

     Isso usa o protocolo TCP da internet, que fornece fluxos contínuos
     de dados entre o cliente e o servidor.  Se 'bind_and_activate' for
     true, o construtor tenta automaticamente invocar *note
     server_bind(): 3d73. e *note server_activate(): 3d74.  Os outros
     parâmetros são passados para a classe base *note BaseServer: 117c.

 -- Classe: socketserver.UDPServer (server_address, RequestHandlerClass,
          bind_and_activate=True)

     Isso usa datagramas, que são pacotes discretos de informações que
     podem chegar fora de ordem ou ser perdidos durante o trânsito.  Os
     parâmetros são os mesmos de *note TCPServer: 1364.

 -- Classe: socketserver.UnixStreamServer (server_address,
          RequestHandlerClass, bind_and_activate=True)
 -- Classe: socketserver.UnixDatagramServer (server_address,
          RequestHandlerClass, bind_and_activate=True)

     Essas classes usadas com menos frequência são semelhantes às
     classes TCP e UDP, mas usam soquetes de domínio Unix; elas não
     estão disponíveis em plataformas não Unix.  Os parâmetros são os
     mesmos de *note TCPServer: 1364.

Essas quatro classes processam solicitações 'synchronously'; cada
solicitação deve ser concluída antes que a próxima solicitação possa ser
iniciada.  Isso não é adequado se cada solicitação demorar muito para
ser concluída, porque exige muita computação ou porque retorna muitos
dados que o cliente demora a processar.  A solução é criar um processo
ou thread separado para lidar com cada solicitação; as classes
misturadas *note ForkingMixIn: b90. e *note ThreadingMixIn: b58. podem
ser usadas para oferecer suporte ao comportamento assíncrono.

Criar um servidor requer várias etapas.  Primeiro, você deve criar uma
classe de manipulador de solicitação estendendo a classe *note
BaseRequestHandler: 3d78. e substituindo seu método *note handle():
3d79.; esse método processará as solicitações recebidas.  Segundo, você
deve instanciar uma das classes de servidor, passando a ela o endereço
do servidor e a classe de manipulador de solicitação.  É recomendável
usar o servidor em uma instrução *note with: 5d2.  Em seguida, chame o
método *note handle_request(): 1367. ou *note serve_forever(): 117e. do
objeto do servidor para processar uma ou muitas solicitações.
Finalmente, chame *note server_close(): b8e. para fechar o soquete (a
menos que você tenha usado uma instrução ‘with’).

Ao herdar de *note ThreadingMixIn: b58. para comportamento de conexão em
threads, você deve declarar explicitamente como quer que suas threads se
comportem em um desligamento abrupto.  A classe *note ThreadingMixIn:
b58. define um atributo 'daemon_threads', que indica se o servidor deve
ou não esperar pelo término da thread.  Você deve definir o sinalizador
explicitamente se quiser que as threads se comportem de forma autônoma;
o padrão é *note False: b49, o que significa que o Python não sairá até
que todas as threads criadas por *note ThreadingMixIn: b58. tenham sido
encerradas.

As classes de servidor têm os mesmos métodos e atributos externos, não
importa qual protocolo de rede eles usam.

* Menu:

* Notas sobre criação do servidor::
* Objetos Server: Objetos Server<2>.
* Objetos manipulador de requisições::
* Exemplos: Exemplos<28>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/socketserver.py


File: python.info,  Node: Notas sobre criação do servidor,  Next: Objetos Server<2>,  Up: socketserver — Um framework para servidores de rede

5.22.16.1 Notas sobre criação do servidor
.........................................

Existem cinco classes em um diagrama de herança, quatro das quais
representam servidores síncronos de quatro tipos:

     +------------+
     | BaseServer |
     +------------+
           |
           v
     +-----------+        +------------------+
     | TCPServer |------->| UnixStreamServer |
     +-----------+        +------------------+
           |
           v
     +-----------+        +--------------------+
     | UDPServer |------->| UnixDatagramServer |
     +-----------+        +--------------------+

Observe que *note UnixDatagramServer: 3d77. deriva de *note UDPServer:
3d75, não de *note UnixStreamServer: 3d76. — a única diferença entre um
IP e um servidor Unix é a família de endereços.

 -- Classe: socketserver.ForkingMixIn
 -- Classe: socketserver.ThreadingMixIn

     Versões de fork e threads de cada tipo de servidor podem ser
     criadas usando essas classes mix-in.  Por exemplo, *note
     ThreadingUDPServer: 3d7b. é criado da seguinte forma:

          class ThreadingUDPServer(ThreadingMixIn, UDPServer):
              pass

     A classe mix-in vem primeiro, pois ela substitui um método definido
     em *note UDPServer: 3d75.  Definir os vários atributos também
     altera o comportamento do mecanismo de servidor subjacente.

     *note ForkingMixIn: b90. e as classes Forking mencionadas abaixo
     estão disponíveis apenas em plataformas POSIX que oferecem suporte
     a *note fork(): 197.

      -- Atributo: block_on_close

          *note ForkingMixIn.server_close: b8e. aguarda até que todos os
          processos filho sejam concluídos, exceto se o atributo *note
          block_on_close: b8f. for ‘False’.

          *note ThreadingMixIn.server_close: b8e. aguarda até que todos
          as threads não daemon sejam concluídos, exceto se o atributo
          *note block_on_close: b8f. for ‘False’.

      -- Atributo: daemon_threads

          Para *note ThreadingMixIn: b58, use threads como daemon
          definindo *note ThreadingMixIn.daemon_threads: 3d7c. como
          ‘True’ para não esperar até que as threads sejam concluídas.

     Alterado na versão 3.7: *note ForkingMixIn.server_close: b8e. e
     *note ThreadingMixIn.server_close: b8e. agora esperam até que todos
     os processos filhos e threads não daemon sejam concluídos.
     Adicione um novo atributo de classe *note
     ForkingMixIn.block_on_close: b8f. para optar pelo comportamento
     pré-3.7.

 -- Classe: socketserver.ForkingTCPServer
 -- Classe: socketserver.ForkingUDPServer
 -- Classe: socketserver.ThreadingTCPServer
 -- Classe: socketserver.ThreadingUDPServer
 -- Classe: socketserver.ForkingUnixStreamServer
 -- Classe: socketserver.ForkingUnixDatagramServer
 -- Classe: socketserver.ThreadingUnixStreamServer
 -- Classe: socketserver.ThreadingUnixDatagramServer

     Essas classes são predefinidas usando as classes mix-in.

Adicionado na versão 3.12: As classes ‘ForkingUnixStreamServer’ e
‘ForkingUnixDatagramServer’ foram adicionadas.

Para implementar um serviço, você deve derivar uma classe de *note
BaseRequestHandler: 3d78. e redefinir seu método *note handle(): 3d79.
Você pode então executar várias versões do serviço combinando uma das
classes de servidor com sua classe de manipulador de solicitação.  A
classe de manipulador de solicitação deve ser diferente para serviços de
datagrama ou fluxo.  Isso pode ser ocultado usando as subclasses de
manipulador *note StreamRequestHandler: cfb. ou *note
DatagramRequestHandler: 3d84.

Claro, você ainda tem que usar sua cabeça!  Por exemplo, não faz sentido
usar um servidor de Forking se o serviço contém estado na memória que
pode ser modificado por diferentes solicitações, já que as modificações
no processo filho nunca atingiriam o estado inicial mantido no processo
pai e passado para cada filho.  Neste caso, você pode usar um servidor
de Threading, mas provavelmente terá que usar travas para proteger a
integridade dos dados compartilhados.

Por outro lado, se você estiver construindo um servidor HTTP onde todos
os dados são armazenados externamente (por exemplo, no sistema de
arquivos), uma classe síncrona essencialmente tornará o serviço “surdo”
enquanto uma solicitação estiver sendo manipulada – o que pode ser por
um tempo muito longo se um cliente for lento para receber todos os dados
que solicitou.  Aqui, um servidor de Threading ou Forking é apropriado.

Em alguns casos, pode ser apropriado processar parte de uma solicitação
de forma síncrona, mas terminar o processamento em um filho bifurcado
dependendo dos dados da solicitação.  Isso pode ser implementado usando
um servidor síncrono e fazendo uma bifurcação explícita no método da
classe do manipulador de solicitações *note handle(): 3d79.

Outra abordagem para lidar com múltiplas requisições simultâneas em um
ambiente que não oferece suporte a threads nem *note fork(): 197. (ou
onde estes são muito caros ou inapropriados para o serviço) é manter uma
tabela explícita de requisições parcialmente finalizadas e usar *note
selectors: c2. para decidir em qual requisição trabalhar em seguida (ou
se deve lidar com uma nova requisição recebida).  Isto é particularmente
importante para serviços de fluxo onde cada cliente pode potencialmente
ficar conectado por um longo tempo (se threads ou subprocessos não
puderem ser usados).


File: python.info,  Node: Objetos Server<2>,  Next: Objetos manipulador de requisições,  Prev: Notas sobre criação do servidor,  Up: socketserver — Um framework para servidores de rede

5.22.16.2 Objetos Server
........................

 -- Classe: socketserver.BaseServer (server_address,
          RequestHandlerClass)

     Esta é a superclasse de todos os objetos Server no módulo.  Ela
     define a interface, dada abaixo, mas não implementa a maioria dos
     métodos, o que é feito em subclasses.  Os dois parâmetros são
     armazenados nos respectivos atributos *note server_address: 3d86. e
     *note RequestHandlerClass: 3d87.

      -- Método: fileno ()

          Retorna um descritor de arquivo inteiro para o soquete no qual
          o servidor está escutando.  Esta função é mais comumente
          passada para *note selectors: c2, para permitir o
          monitoramento de múltiplos servidores no mesmo processo.

      -- Método: handle_request ()

          Processa uma única solicitação.  Esta função chama os
          seguintes métodos em ordem: *note get_request(): 3d89, *note
          verify_request(): 3d8a. e *note process_request(): 3d8b.  Se o
          método *note handle(): 3d79. fornecido pelo usuário da classe
          manipuladora levantar uma exceção, o método *note
          handle_error(): d64. do servidor será chamado.  Se nenhuma
          solicitação for recebida dentro de *note timeout: 1365.
          segundos, *note handle_timeout(): 1366. será chamado e *note
          handle_request(): 1367. retornará.

      -- Método: serve_forever (poll_interval=0.5)

          Manipula solicitações até uma solicitação explícita *note
          shutdown(): 1bad.  Sonda para desligamento a cada
          'poll_interval' segundos.  Ignora o atributo *note timeout:
          1365.  Ele também chama *note service_actions(): 117d, que
          pode ser usado por uma subclasse ou mixin para fornecer ações
          específicas para um determinado serviço.  Por exemplo, a
          classe *note ForkingMixIn: b90. usa *note service_actions():
          117d. para limpar processos filhos zumbis.

          Alterado na versão 3.3: Adicionada chamada ‘service_actions’
          ao método ‘serve_forever’.

      -- Método: service_actions ()

          Isso é chamado no laço *note serve_forever(): 117e.  Este
          método pode ser substituído por subclasses ou classes mixin
          para executar ações específicas para um determinado serviço,
          como ações de limpeza.

          Adicionado na versão 3.3.

      -- Método: shutdown ()

          Diz ao laço *note serve_forever(): 117e. para parar e esperar
          até que isso aconteça.  *note shutdown(): 1bad. deve ser
          chamado enquanto *note serve_forever(): 117e. estiver em
          execução em um thread diferente, caso contrário, ocorrerá um
          impasse.

      -- Método: server_close ()

          Limpa o servidor.  Pode ser substituído.

      -- Atributo: address_family

          A família de protocolos à qual o soquete do servidor pertence.
          Exemplos comuns são *note socket.AF_INET: 1938, *note
          socket.AF_INET6: 1939. e *note socket.AF_UNIX: 193a.
          Subclasse as classes de servidor TCP ou UDP neste módulo com o
          atributo de classe ‘address_family = AF_INET6’ definido se
          você quiser classes de servidor IPv6.

      -- Atributo: RequestHandlerClass

          A classe de manipulador de solicitações fornecida pelo
          usuário; uma instância dessa classe é criada para cada
          solicitação.

      -- Atributo: server_address

          O endereço no qual o servidor está escutando.  O formato dos
          endereços varia dependendo da família do protocolo; veja a
          documentação do módulo *note socket: cc. para detalhes.  Para
          protocolos de internet, esta é uma tupla contendo uma string
          dando o endereço e um número de porta inteiro: ‘('127.0.0.1',
          80)’, por exemplo.

      -- Atributo: socket

          O objeto soquete no qual o servidor ouve para solicitações
          recebidas.

     As classes de servidor oferecem suporte às seguintes variáveis de
     classe:

      -- Atributo: allow_reuse_address

          Se o servidor permitirá a reutilização de um endereço.  O
          padrão é *note False: b49, e pode ser definido em subclasses
          para alterar a política.

      -- Atributo: request_queue_size

          O tamanho da fila de requisições.  Se levar muito tempo para
          processar uma única requisição, todas as requisições que
          chegarem enquanto o servidor estiver ocupado serão colocadas
          em uma fila, até *note request_queue_size: 3d8f. requisições.
          Quando a fila estiver cheia, outras requisições de clientes
          receberão um erro “Conexão negada”.  O valor padrão é
          geralmente 5, mas isso pode ser substituído por subclasses.

      -- Atributo: socket_type

          O tipo de soquete usado pelo servidor; *note
          socket.SOCK_STREAM: 1337. e *note socket.SOCK_DGRAM: 1336. são
          dois valores comuns.

      -- Atributo: timeout

          Duração do tempo limite, medida em segundos, ou *note None:
          675. se nenhum tempo limite for desejado.  Se *note
          handle_request(): 1367. não receber nenhuma requisição de
          entrada dentro do período de tempo limite, o método *note
          handle_timeout(): 1366. será chamado.

     Existem vários métodos de servidor que podem ser substituídos por
     subclasses de classes de servidor base, como *note TCPServer:
     1364.; esses métodos não são úteis para usuários externos do objeto
     de servidor.

      -- Método: finish_request (request, client_address)

          Na verdade, processa a solicitação instanciando *note
          RequestHandlerClass: 3d87. e chamando seu método *note
          handle(): 3d79.

      -- Método: get_request ()

          Deve aceitar uma solicitação do soquete e retornar uma tupla
          de 2 elementos contendo o 'novo' objeto de soquete a ser usado
          para se comunicar com o cliente e o endereço do cliente.

      -- Método: handle_error (request, client_address)

          Esta função é chamada se o método *note handle(): 3d79. de uma
          instância *note RequestHandlerClass: 3d87. levanta uma
          exceção.  A ação padrão é exibir o traceback para erro padrão
          e continuar manipulando solicitações futuras.

          Alterado na versão 3.6: Agora é chamada apenas para exceções
          derivadas da classe *note Exception: 9e2.

      -- Método: handle_timeout ()

          Esta função é chamada quando o atributo *note timeout: 1365.
          foi definido para um valor diferente de *note None: 675. e o
          período de timeout passou sem que nenhuma solicitação tenha
          sido recebida.  A ação padrão para servidores de bifurcação é
          coletar o status de quaisquer processos filhos que tenham
          saído, enquanto em servidores de threading esse método não faz
          nada.

      -- Método: process_request (request, client_address)

          Chama *note finish_request(): 3d91. para criar uma instância
          de *note RequestHandlerClass: 3d87.  Se desejado, esta função
          pode criar um novo processo ou thread para manipular a
          solicitação; as classes *note ForkingMixIn: b90. e *note
          ThreadingMixIn: b58. fazem isso.

      -- Método: server_activate ()

          Chamado pelo construtor do servidor para ativar o servidor.  O
          comportamento padrão para um servidor TCP apenas invoca *note
          listen(): e8d. no soquete do servidor.  Pode ser substituído.

      -- Método: server_bind ()

          Chamada pelo construtor do servidor para vincular o soquete ao
          endereço desejado.  Pode ser substituída.

      -- Método: verify_request (request, client_address)

          Deve retornar um valor booleano; se o valor for *note True:
          c27, a solicitação será processada, e se for *note False: b49,
          a solicitação será negada.  Esta função pode ser substituída
          para implementar controles de acesso para um servidor.  A
          implementação padrão sempre retorna *note True: c27.

     Alterado na versão 3.6: Foi adicionado suporte para o protocolo
     *note gerenciador de contexto: 5d4.  Sair do gerenciador de
     contexto é equivalente a chamar *note server_close(): b8e.


File: python.info,  Node: Objetos manipulador de requisições,  Next: Exemplos<28>,  Prev: Objetos Server<2>,  Up: socketserver — Um framework para servidores de rede

5.22.16.3 Objetos manipulador de requisições
............................................

 -- Classe: socketserver.BaseRequestHandler

     Esta é a superclasse de todos os objetos manipulador de
     requisições.  Ela define a interface, dada abaixo.  Uma subclasse
     concreta do manipulador de requisições deve definir um novo método
     *note handle(): 3d79. e pode substituir qualquer um dos outros
     métodos.  Uma nova instância da subclasse é criada para cada
     requisição.

      -- Método: setup ()

          Chamada antes do método *note handle(): 3d79. para executar
          quaisquer ações de inicialização necessárias.  A implementação
          padrão não faz nada.

      -- Método: handle ()

          Esta função deve fazer todo o trabalho necessário para atender
          a uma solicitação.  A implementação padrão não faz nada.
          Vários atributos de instância estão disponíveis para ela; a
          solicitação está disponível como *note request: 3d94.; o
          endereço do cliente como *note client_address: 3d95.; e a
          instância do servidor como *note server: 3d96, caso precise de
          acesso a informações por servidor.

          O tipo de *note request: 3d94. é diferente para serviços de
          datagrama ou fluxo.  Para serviços de fluxo, *note request:
          3d94. é um objeto soquete; para serviços de datagrama, *note
          request: 3d94. é um par de string e soquete.

      -- Método: finish ()

          Chamada após o método *note handle(): 3d79. para executar
          quaisquer ações de limpeza necessárias.  A implementação
          padrão não faz nada.  Se *note setup(): 3d93. levanta uma
          exceção, esta função não será chamada.

      -- Atributo: request

          O 'novo' objeto *note socket.socket: dc9. a ser usado para se
          comunicar com o cliente.

      -- Atributo: client_address

          Endereço do cliente retornado por *note
          BaseServer.get_request(): 3d89.

      -- Atributo: server

          Objeto *note BaseServer: 117c. usado para manipular a
          solicitação.

 -- Classe: socketserver.StreamRequestHandler
 -- Classe: socketserver.DatagramRequestHandler

     Essas subclasses *note BaseRequestHandler: 3d78. substituem os
     métodos *note setup(): 3d93. e *note finish(): 3d97. e fornecem os
     atributos *note rfile: 3d98. e *note wfile: cfa.

      -- Atributo: rfile

          Um objeto arquivo do qual recebe a solicitação é lido.
          Oferece suporte à interface legível *note io.BufferedIOBase:
          694.

      -- Atributo: wfile

          Um objeto arquivo no qual a resposta é escrita.  Oferece
          suporte à interface gravável *note io.BufferedIOBase: 694.

     Alterado na versão 3.6: *note wfile: cfa. também oferece suporte à
     interface gravável *note io.BufferedIOBase: 694.


File: python.info,  Node: Exemplos<28>,  Prev: Objetos manipulador de requisições,  Up: socketserver — Um framework para servidores de rede

5.22.16.4 Exemplos
..................

* Menu:

* Exemplo de socketserver.TCPServer: Exemplo de socketserver TCPServer.
* Exemplo socketserver.UDPServer: Exemplo socketserver UDPServer.
* Mixins assíncronos::


File: python.info,  Node: Exemplo de socketserver TCPServer,  Next: Exemplo socketserver UDPServer,  Up: Exemplos<28>

5.22.16.5 Exemplo de ‘socketserver.TCPServer’
.............................................

Este é o lado do servidor:

     import socketserver

     class MyTCPHandler(socketserver.BaseRequestHandler):
         """
         A classe de manipulador de solicitação para nosso servidor.

         Ela é instanciada uma vez por conexão com o servidor e deve
         substituir o método handle() para implementar a comunicação
         com o cliente.
         """

         def handle(self):
             # self.request é o soquete TCP conectado ao cliente
             pieces = [b'']
             total = 0
             while b'\n' not in pieces[-1] and total < 10_000:
                 pieces.append(self.request.recv(2000))
                 total += len(pieces[-1])
             self.data = b''.join(pieces)
             print(f"Received from {self.client_address[0]}:")
             print(self.data.decode("utf-8"))
             # só envia de volta os mesmos dados, mas em caixa alta
             self.request.sendall(self.data.upper())
             # após retornarmos, o soquete será fechado.

     if __name__ == "__main__":
         HOST, PORT = "localhost", 9999

         # Cria o servidor, ligando-o ao localhost na porta 9999
         with socketserver.TCPServer((HOST, PORT), MyTCPHandler) as server:
             # Ativa o servidor; isso vai mantê-lo em execução até você
             # interromper o programa com Ctrl-C
             server.serve_forever()

Uma classe de manipulador de solicitações alternativa que faz uso de
fluxos (objetos arquivo ou similares que simplificam a comunicação ao
fornecer a interface de arquivo padrão):

     class MyTCPHandler(socketserver.StreamRequestHandler):

         def handle(self):
             # self.rfile é um objeto arquivo ou similar criado pelo manipulador.
             # Agora podemos usar, por exemplo, readline() em vez de chamadas
             # brutas a recv().
             # Nos limitamos a 10000 bytes para evitar abuso pelo remetente.
             self.data = self.rfile.readline(10000).rstrip()
             print(f"{self.client_address[0]} wrote:")
             print(self.data.decode("utf-8"))
             # Da mesma forma, self.wfile é um objeto arquivo ou similar para
             # escrever de volta para o cliente
             self.wfile.write(self.data.upper())

A diferença é que a chamada ‘readline()’ no segundo manipulador chamará
‘recv()’ várias vezes até encontrar um caractere de nova linha, enquanto
o primeiro manipulador teve que usar um laço ‘recv()’ para acumular
dados até uma nova linha.  Se tivesse usado apenas um único ‘recv()’ sem
o laço, ele teria retornado apenas o que foi recebido até agora do
cliente.  O TCP é baseado em fluxo: os dados chegam na ordem em que
foram enviados, mas não há correlação entre as chamadas ‘send()’ ou
‘sendall()’ do cliente e o número de chamadas ‘recv()’ no servidor
necessárias para recebê-los.

Este é o lado do cliente:

     import socket
     import sys

     HOST, PORT = "localhost", 9999
     data = " ".join(sys.argv[1:])

     # Cria um soquete (SOCK_STREAM significa um soquete TCP)
     with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
         # Conecta a um servidor e envia dados
         sock.connect((HOST, PORT))
         sock.sendall(bytes(data, "utf-8"))
         sock.sendall(b"\n")

         # Recebe dados do servidor e desliga
         received = str(sock.recv(1024), "utf-8")

     print("Sent:    ", data)
     print("Received:", received)

A saída do exemplo deve se parecer com algo como isso:

Servidor:

     $ python TCPServer.py
     127.0.0.1 wrote:
     b'hello world with TCP'
     127.0.0.1 wrote:
     b'python is nice'

Cliente:

     $ python TCPClient.py hello world with TCP
     Sent:     hello world with TCP
     Received: HELLO WORLD WITH TCP
     $ python TCPClient.py python is nice
     Sent:     python is nice
     Received: PYTHON IS NICE


File: python.info,  Node: Exemplo socketserver UDPServer,  Next: Mixins assíncronos,  Prev: Exemplo de socketserver TCPServer,  Up: Exemplos<28>

5.22.16.6 Exemplo ‘socketserver.UDPServer’
..........................................

Este é o lado do servidor:

     import socketserver

     class MyUDPHandler(socketserver.BaseRequestHandler):
         """
         Esta classe funciona de forma semelhante à classe do manipulador TCP,
         exceto que self.request consiste em um par de dados e soquete do cliente
         e, como não há conexão, o endereço do cliente deve ser fornecido
         explicitamente ao enviar dados de volta via sendto().
         """

         def handle(self):
             data = self.request[0].strip()
             socket = self.request[1]
             print(f"{self.client_address[0]} wrote:")
             print(data)
             socket.sendto(data.upper(), self.client_address)

     if __name__ == "__main__":
         HOST, PORT = "localhost", 9999
         with socketserver.UDPServer((HOST, PORT), MyUDPHandler) as server:
             server.serve_forever()

Este é o lado do cliente:

     import socket
     import sys

     HOST, PORT = "localhost", 9999
     data = " ".join(sys.argv[1:])

     # SOCK_DGRAM é o tipo de soquete para usar para soquetes UDP
     sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

     # Como você pode ver, não há uma chamada connect(); UDP não tem conexão.
     # Em vez disso, dados são enviados diretamente para o destinatário via sendto().
     sock.sendto(bytes(data + "\n", "utf-8"), (HOST, PORT))
     received = str(sock.recv(1024), "utf-8")

     print("Sent:    ", data)
     print("Received:", received)

A saída do exemplo deve ser exatamente igual à do exemplo do servidor
TCP.


File: python.info,  Node: Mixins assíncronos,  Prev: Exemplo socketserver UDPServer,  Up: Exemplos<28>

5.22.16.7 Mixins assíncronos
............................

Para construir manipuladores assíncronos, use as classes *note
ThreadingMixIn: b58. e *note ForkingMixIn: b90.

Um exemplo para a classe *note ThreadingMixIn: b58.:

     import socket
     import threading
     import socketserver

     class ThreadedTCPRequestHandler(socketserver.BaseRequestHandler):

         def handle(self):
             data = str(self.request.recv(1024), 'ascii')
             cur_thread = threading.current_thread()
             response = bytes("{}: {}".format(cur_thread.name, data), 'ascii')
             self.request.sendall(response)

     class ThreadedTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
         pass

     def client(ip, port, message):
         with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
             sock.connect((ip, port))
             sock.sendall(bytes(message, 'ascii'))
             response = str(sock.recv(1024), 'ascii')
             print("Received: {}".format(response))

     if __name__ == "__main__":
         # Porta 0 significa selecionar uma porta não usada arbitrária
         HOST, PORT = "localhost", 0

         server = ThreadedTCPServer((HOST, PORT), ThreadedTCPRequestHandler)
         with server:
             ip, port = server.server_address

             # Inicia uma thread com o servidor -- essa thread vai então
             # iniciar mais um thread para cada requisição
             server_thread = threading.Thread(target=server.serve_forever)
             # Sai da thread do servidor quando a thread principal é encerrada
             server_thread.daemon = True
             server_thread.start()
             print("Server loop running in thread:", server_thread.name)

             client(ip, port, "Hello World 1")
             client(ip, port, "Hello World 2")
             client(ip, port, "Hello World 3")

             server.shutdown()

A saída do exemplo deve se parecer com algo como isso:

     $ python ThreadedTCPServer.py
     Server loop running in thread: Thread-1
     Received: Thread-2: Hello World 1
     Received: Thread-3: Hello World 2
     Received: Thread-4: Hello World 3

A classe *note ForkingMixIn: b90. é usada da mesma forma, exceto que o
servidor gerará um novo processo para cada solicitação.  Disponível
apenas em plataformas POSIX que oferecem suporte a *note fork(): 197.


File: python.info,  Node: http server — HTTP servers,  Next: http cookies — HTTP state management,  Prev: socketserver — Um framework para servidores de rede,  Up: Protocolos de Internet e Suporte

5.22.17 ‘http.server’ — HTTP servers
------------------------------------

'Código-fonte:' Lib/http/server.py(1)

__________________________________________________________________

This module defines classes for implementing HTTP servers.

     Aviso: *note http.server: 72. is not recommended for production.
     It only implements *note basic security checks: 3da0.

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

One class, *note HTTPServer: 3b97, is a *note socketserver.TCPServer:
1364. subclass.  It creates and listens at the HTTP socket, dispatching
the requests to a handler.  Code to create and run the server looks like
this:

     def run(server_class=HTTPServer, handler_class=BaseHTTPRequestHandler):
         server_address = ('', 8000)
         httpd = server_class(server_address, handler_class)
         httpd.serve_forever()

 -- Classe: http.server.HTTPServer (server_address, RequestHandlerClass)

     This class builds on the *note TCPServer: 1364. class by storing
     the server address as instance variables named ‘server_name’ and
     ‘server_port’.  The server is accessible by the handler, typically
     through the handler’s ‘server’ instance variable.

 -- Classe: http.server.ThreadingHTTPServer (server_address,
          RequestHandlerClass)

     This class is identical to HTTPServer but uses threads to handle
     requests by using the *note ThreadingMixIn: b58.  This is useful to
     handle web browsers pre-opening sockets, on which *note HTTPServer:
     3b97. would wait indefinitely.

     Adicionado na versão 3.7.

The *note HTTPServer: 3b97. and *note ThreadingHTTPServer: b57. must be
given a 'RequestHandlerClass' on instantiation, of which this module
provides three different variants:

 -- Classe: http.server.BaseHTTPRequestHandler (request, client_address,
          server)

     This class is used to handle the HTTP requests that arrive at the
     server.  By itself, it cannot respond to any actual HTTP requests;
     it must be subclassed to handle each request method (e.g.  GET or
     POST). *note BaseHTTPRequestHandler: 110a. provides a number of
     class and instance variables, and methods for use by subclasses.

     The handler will parse the request and the headers, then call a
     method specific to the request type.  The method name is
     constructed from the request.  For example, for the request method
     ‘SPAM’, the ‘do_SPAM()’ method will be called with no arguments.
     All of the relevant information is stored in instance variables of
     the handler.  Subclasses should not need to override or extend the
     ‘__init__()’ method.

     *note BaseHTTPRequestHandler: 110a. tem os seguintes atributos de
     instância:

      -- Atributo: client_address

          Contains a tuple of the form ‘(host, port)’ referring to the
          client’s address.

      -- Atributo: server

          Contains the server instance.

      -- Atributo: close_connection

          Boolean that should be set before *note handle_one_request():
          3da4. returns, indicating if another request may be expected,
          or if the connection should be shut down.

      -- Atributo: requestline

          Contains the string representation of the HTTP request line.
          The terminating CRLF is stripped.  This attribute should be
          set by *note handle_one_request(): 3da4.  If no valid request
          line was processed, it should be set to the empty string.

      -- Atributo: command

          Contains the command (request type).  For example, ‘'GET'’.

      -- Atributo: path

          Contains the request path.  If query component of the URL is
          present, then ‘path’ includes the query.  Using the
          terminology of RFC 3986(2), ‘path’ here includes ‘hier-part’
          and the ‘query’.

      -- Atributo: request_version

          Contains the version string from the request.  For example,
          ‘'HTTP/1.0'’.

      -- Atributo: headers

          Holds an instance of the class specified by the *note
          MessageClass: 3da9. class variable.  This instance parses and
          manages the headers in the HTTP request.  The *note
          parse_headers(): 1bc1. function from *note http.client: 6f. is
          used to parse the headers and it requires that the HTTP
          request provide a valid RFC 5322(3) style header.

      -- Atributo: rfile

          An *note io.BufferedIOBase: 694. input stream, ready to read
          from the start of the optional input data.

      -- Atributo: wfile

          Contains the output stream for writing a response back to the
          client.  Proper adherence to the HTTP protocol must be used
          when writing to this stream in order to achieve successful
          interoperation with HTTP clients.

          Alterado na versão 3.6: This is an *note io.BufferedIOBase:
          694. stream.

     *note BaseHTTPRequestHandler: 110a. tem os seguintes atributos:

      -- Atributo: server_version

          Specifies the server software version.  You may want to
          override this.  The format is multiple whitespace-separated
          strings, where each string is of the form name[/version].  For
          example, ‘'BaseHTTP/0.2'’.

      -- Atributo: sys_version

          Contains the Python system version, in a form usable by the
          *note version_string: 3dae. method and the *note
          server_version: 3dac. class variable.  For example,
          ‘'Python/1.4'’.

      -- Atributo: error_message_format

          Specifies a format string that should be used by *note
          send_error(): f83. method for building an error response to
          the client.  The string is filled by default with variables
          from *note responses: 3c69. based on the status code that
          passed to *note send_error(): f83.

      -- Atributo: error_content_type

          Specifies the Content-Type HTTP header of error responses sent
          to the client.  The default value is ‘'text/html'’.

      -- Atributo: protocol_version

          Specifies the HTTP version to which the server is conformant.
          It is sent in responses to let the client know the server’s
          communication capabilities for future requests.  If set to
          ‘'HTTP/1.1'’, the server will permit HTTP persistent
          connections; however, your server 'must' then include an
          accurate ‘Content-Length’ header (using *note send_header():
          3db1.) in all of its responses to clients.  For backwards
          compatibility, the setting defaults to ‘'HTTP/1.0'’.

      -- Atributo: MessageClass

          Specifies an *note email.message.Message: 27c.-like class to
          parse HTTP headers.  Typically, this is not overridden, and it
          defaults to *note http.client.HTTPMessage: 3c83.

      -- Atributo: responses

          This attribute contains a mapping of error code integers to
          two-element tuples containing a short and long message.  For
          example, ‘{code: (shortmessage, longmessage)}’.  The
          'shortmessage' is usually used as the 'message' key in an
          error response, and 'longmessage' as the 'explain' key.  It is
          used by *note send_response_only(): 3db2. and *note
          send_error(): f83. methods.

     Uma instância de *note BaseHTTPRequestHandler: 110a. tem os
     seguintes métodos:

      -- Método: handle ()

          Calls *note handle_one_request(): 3da4. once (or, if
          persistent connections are enabled, multiple times) to handle
          incoming HTTP requests.  You should never need to override it;
          instead, implement appropriate ‘do_*()’ methods.

      -- Método: handle_one_request ()

          This method will parse and dispatch the request to the
          appropriate ‘do_*()’ method.  You should never need to
          override it.

      -- Método: handle_expect_100 ()

          When an HTTP/1.1 conformant server receives an ‘Expect:
          100-continue’ request header it responds back with a ‘100
          Continue’ followed by ‘200 OK’ headers.  This method can be
          overridden to raise an error if the server does not want the
          client to continue.  For e.g.  server can choose to send ‘417
          Expectation Failed’ as a response header and ‘return False’.

          Adicionado na versão 3.2.

      -- Método: send_error (code, message=None, explain=None)

          Sends and logs a complete error reply to the client.  The
          numeric 'code' specifies the HTTP error code, with 'message'
          as an optional, short, human readable description of the
          error.  The 'explain' argument can be used to provide more
          detailed information about the error; it will be formatted
          using the *note error_message_format: f84. attribute and
          emitted, after a complete set of headers, as the response
          body.  The *note responses: 3c69. attribute holds the default
          values for 'message' and 'explain' that will be used if no
          value is provided; for unknown codes the default value for
          both is the string ‘???’.  The body will be empty if the
          method is HEAD or the response code is one of the following:
          ‘1XX’, ‘204 No Content’, ‘205 Reset Content’, ‘304 Not
          Modified’.

          Alterado na versão 3.4: The error response includes a
          Content-Length header.  Added the 'explain' argument.

      -- Método: send_response (code, message=None)

          Adds a response header to the headers buffer and logs the
          accepted request.  The HTTP response line is written to the
          internal buffer, followed by 'Server' and 'Date' headers.  The
          values for these two headers are picked up from the *note
          version_string(): 3dae. and *note date_time_string(): 3db6.
          methods, respectively.  If the server does not intend to send
          any other headers using the *note send_header(): 3db1. method,
          then *note send_response(): 3db5. should be followed by an
          *note end_headers(): 110b. call.

          Alterado na versão 3.3: Headers are stored to an internal
          buffer and *note end_headers(): 110b. needs to be called
          explicitly.

      -- Método: send_header (keyword, value)

          Adds the HTTP header to an internal buffer which will be
          written to the output stream when either *note end_headers():
          110b. or *note flush_headers(): 110c. is invoked.  'keyword'
          should specify the header keyword, with 'value' specifying its
          value.  Note that, after the send_header calls are done, *note
          end_headers(): 110b. MUST BE called in order to complete the
          operation.

          Alterado na versão 3.2: Headers are stored in an internal
          buffer.

      -- Método: send_response_only (code, message=None)

          Sends the response header only, used for the purposes when
          ‘100 Continue’ response is sent by the server to the client.
          The headers not buffered and sent directly the output
          stream.If the 'message' is not specified, the HTTP message
          corresponding the response 'code' is sent.

          Adicionado na versão 3.2.

      -- Método: end_headers ()

          Adds a blank line (indicating the end of the HTTP headers in
          the response) to the headers buffer and calls *note
          flush_headers(): 110c.

          Alterado na versão 3.2: The buffered headers are written to
          the output stream.

      -- Método: flush_headers ()

          Finally send the headers to the output stream and flush the
          internal headers buffer.

          Adicionado na versão 3.3.

      -- Método: log_request (code='-', size='-')

          Logs an accepted (successful) request.  'code' should specify
          the numeric HTTP code associated with the response.  If a size
          of the response is available, then it should be passed as the
          'size' parameter.

      -- Método: log_error (...)

          Logs an error when a request cannot be fulfilled.  By default,
          it passes the message to *note log_message(): 3db9, so it
          takes the same arguments ('format' and additional values).

      -- Método: log_message (format, ...)

          Logs an arbitrary message to ‘sys.stderr’.  This is typically
          overridden to create custom error logging mechanisms.  The
          'format' argument is a standard printf-style format string,
          where the additional arguments to *note log_message(): 3db9.
          are applied as inputs to the formatting.  The client ip
          address and current date and time are prefixed to every
          message logged.

      -- Método: version_string ()

          Returns the server software’s version string.  This is a
          combination of the *note server_version: 3dac. and *note
          sys_version: 3dad. attributes.

      -- Método: date_time_string (timestamp=None)

          Returns the date and time given by 'timestamp' (which must be
          ‘None’ or in the format returned by *note time.time(): 254.),
          formatted for a message header.  If 'timestamp' is omitted, it
          uses the current date and time.

          The result looks like ‘'Sun, 06 Nov 1994 08:49:37 GMT'’.

      -- Método: log_date_time_string ()

          Returns the current date and time, formatted for logging.

      -- Método: address_string ()

          Retorna o endereço do cliente.

          Alterado na versão 3.3: Previously, a name lookup was
          performed.  To avoid name resolution delays, it now always
          returns the IP address.

 -- Classe: http.server.SimpleHTTPRequestHandler (request,
          client_address, server, directory=None)

     This class serves files from the directory 'directory' and below,
     or the current directory if 'directory' is not provided, directly
     mapping the directory structure to HTTP requests.

     Alterado na versão 3.7: Added the 'directory' parameter.

     Alterado na versão 3.9: The 'directory' parameter accepts a *note
     path-like object: 2a0.

     Muito do trabalho, como analisar o pedido, é feito pela classe base
     *note BaseHTTPRequestHandler: 110a.  Esta classe implementa as
     funções *note do_GET(): 3dbc. e *note do_HEAD(): 3dbd.

     The following are defined as class-level attributes of *note
     SimpleHTTPRequestHandler: b56.:

      -- Atributo: server_version

          This will be ‘"SimpleHTTP/" + __version__’, where
          ‘__version__’ is defined at the module level.

      -- Atributo: extensions_map

          A dictionary mapping suffixes into MIME types, contains custom
          overrides for the default system mappings.  The mapping is
          used case-insensitively, and so should contain only
          lower-cased keys.

          Alterado na versão 3.9: This dictionary is no longer filled
          with the default system mappings, but only contains overrides.

     The *note SimpleHTTPRequestHandler: b56. class defines the
     following methods:

      -- Método: do_HEAD ()

          This method serves the ‘'HEAD'’ request type: it sends the
          headers it would send for the equivalent ‘GET’ request.  See
          the *note do_GET(): 3dbc. method for a more complete
          explanation of the possible headers.

      -- Método: do_GET ()

          The request is mapped to a local file by interpreting the
          request as a path relative to the current working directory.

          If the request was mapped to a directory, the directory is
          checked for a file named ‘index.html’ or ‘index.htm’ (in that
          order).  If found, the file’s contents are returned; otherwise
          a directory listing is generated by calling the
          ‘list_directory()’ method.  This method uses *note
          os.listdir(): 1139. to scan the directory, and returns a ‘404’
          error response if the *note listdir(): 1139. fails.

          If the request was mapped to a file, it is opened.  Any *note
          OSError: 417. exception in opening the requested file is
          mapped to a ‘404’, ‘'File not found'’ error.  If there was an
          ‘'If-Modified-Since'’ header in the request, and the file was
          not modified after this time, a ‘304’, ‘'Not Modified'’
          response is sent.  Otherwise, the content type is guessed by
          calling the ‘guess_type()’ method, which in turn uses the
          'extensions_map' variable, and the file contents are returned.

          A ‘'Content-type:'’ header with the guessed content type is
          output, followed by a ‘'Content-Length:'’ header with the
          file’s size and a ‘'Last-Modified:'’ header with the file’s
          modification time.

          Then follows a blank line signifying the end of the headers,
          and then the contents of the file are output.

          For example usage, see the implementation of the ‘test’
          function in Lib/http/server.py(4).

          Alterado na versão 3.7: Support of the ‘'If-Modified-Since'’
          header.

The *note SimpleHTTPRequestHandler: b56. class can be used in the
following manner in order to create a very basic webserver serving files
relative to the current directory:

     import http.server
     import socketserver

     PORT = 8000

     Handler = http.server.SimpleHTTPRequestHandler

     with socketserver.TCPServer(("", PORT), Handler) as httpd:
         print("serving at port", PORT)
         httpd.serve_forever()

*note SimpleHTTPRequestHandler: b56. can also be subclassed to enhance
behavior, such as using different index file names by overriding the
class attribute ‘index_pages’.

 -- Classe: http.server.CGIHTTPRequestHandler (request, client_address,
          server)

     This class is used to serve either files or output of CGI scripts
     from the current directory and below.  Note that mapping HTTP
     hierarchic structure to local directory structure is exactly as in
     *note SimpleHTTPRequestHandler: b56.

          Nota: CGI scripts run by the *note CGIHTTPRequestHandler: 2a1.
          class cannot execute redirects (HTTP code 302), because code
          200 (script output follows) is sent prior to execution of the
          CGI script.  This pre-empts the status code.

     The class will however, run the CGI script, instead of serving it
     as a file, if it guesses it to be a CGI script.  Only
     directory-based CGI are used — the other common server
     configuration is to treat special extensions as denoting CGI
     scripts.

     The ‘do_GET()’ and ‘do_HEAD()’ functions are modified to run CGI
     scripts and serve the output, instead of serving files, if the
     request leads to somewhere below the ‘cgi_directories’ path.

     The *note CGIHTTPRequestHandler: 2a1. defines the following data
     member:

      -- Atributo: cgi_directories

          This defaults to ‘['/cgi-bin', '/htbin']’ and describes
          directories to treat as containing CGI scripts.

     The *note CGIHTTPRequestHandler: 2a1. defines the following method:

      -- Método: do_POST ()

          This method serves the ‘'POST'’ request type, only allowed for
          CGI scripts.  Error 501, “Can only POST to CGI scripts”, is
          output when trying to POST to a non-CGI url.

     Note that CGI scripts will be run with UID of user nobody, for
     security reasons.  Problems with the CGI script will be translated
     to error 403.

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     *note CGIHTTPRequestHandler: 2a1. is being removed in 3.15.  CGI
     has not been considered a good way to do things for well over a
     decade.  This code has been unmaintained for a while now and sees
     very little practical use.  Retaining it could lead to further
     *note security considerations: 3da0.

* Menu:

* Interface de linha de comando: Interface de linha de comando<7>.
* Considerações de segurança: Considerações de segurança<3>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/http/server.py

   (2) https://datatracker.ietf.org/doc/html/rfc3986.html

   (3) https://datatracker.ietf.org/doc/html/rfc5322.html

   (4) https://github.com/python/cpython/tree/3.13/Lib/http/server.py


File: python.info,  Node: Interface de linha de comando<7>,  Next: Considerações de segurança<3>,  Up: http server — HTTP servers

5.22.17.1 Interface de linha de comando
.......................................

*note http.server: 72. can also be invoked directly using the *note -m:
5e1. switch of the interpreter.  The following example illustrates how
to serve files relative to the current directory:

     python -m http.server [OPTIONS] [port]

As seguintes opções são aceitas:

 -- Option: port

     The server listens to port 8000 by default.  The default can be
     overridden by passing the desired port number as an argument:

          python -m http.server 9000

 -- Option: -b, --bind <address>

     Specifies a specific address to which it should bind.  Both IPv4
     and IPv6 addresses are supported.  By default, the server binds
     itself to all interfaces.  For example, the following command
     causes the server to bind to localhost only:

          python -m http.server --bind 127.0.0.1

     Adicionado na versão 3.4.

     Alterado na versão 3.8: Support IPv6 in the ‘--bind’ option.

 -- Option: -d, --directory <dir>

     Specifies a directory to which it should serve the files.  By
     default, the server uses the current directory.  For example, the
     following command uses a specific directory:

          python -m http.server --directory /tmp/

     Adicionado na versão 3.7.

 -- Option: -p, --protocol <version>

     Specifies the HTTP version to which the server is conformant.  By
     default, the server is conformant to HTTP/1.0.  For example, the
     following command runs an HTTP/1.1 conformant server:

          python -m http.server --protocol HTTP/1.1

     Adicionado na versão 3.11.

 -- Option: --cgi

     *note CGIHTTPRequestHandler: 2a1. can be enabled in the command
     line by passing the ‘--cgi’ option:

          python -m http.server --cgi

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     *note http.server: 72. command line ‘--cgi’ support is being
     removed because *note CGIHTTPRequestHandler: 2a1. is being removed.

     Aviso: *note CGIHTTPRequestHandler: 2a1. and the ‘--cgi’
     command-line option are not intended for use by untrusted clients
     and may be vulnerable to exploitation.  Always use within a secure
     environment.


File: python.info,  Node: Considerações de segurança<3>,  Prev: Interface de linha de comando<7>,  Up: http server — HTTP servers

5.22.17.2 Considerações de segurança
....................................

*note SimpleHTTPRequestHandler: b56. will follow symbolic links when
handling requests, this makes it possible for files outside of the
specified directory to be served.

Earlier versions of Python did not scrub control characters from the log
messages emitted to stderr from ‘python -m http.server’ or the default
*note BaseHTTPRequestHandler: 110a. ‘.log_message’ implementation.  This
could allow remote clients connecting to your server to send nefarious
control codes to your terminal.

Alterado na versão 3.12: Control characters are scrubbed in stderr logs.


File: python.info,  Node: http cookies — HTTP state management,  Next: http cookiejar — Cookie handling for HTTP clients,  Prev: http server — HTTP servers,  Up: Protocolos de Internet e Suporte

5.22.18 ‘http.cookies’ — HTTP state management
----------------------------------------------

'Código-fonte:' Lib/http/cookies.py(1)

__________________________________________________________________

The *note http.cookies: 71. module defines classes for abstracting the
concept of cookies, an HTTP state management mechanism.  It supports
both simple string-only cookies, and provides an abstraction for having
any serializable data-type as cookie value.

The module formerly strictly applied the parsing rules described in the
RFC 2109(2) and RFC 2068(3) specifications.  It has since been
discovered that MSIE 3.0x didn’t follow the character rules outlined in
those specs; many current-day browsers and servers have also relaxed
parsing rules when it comes to cookie handling.  As a result, this
module now uses parsing rules that are a bit less strict than they once
were.

The character set, *note string.ascii_letters: 1306, *note
string.digits: 245a. and ‘!#$%&'*+-.^_`|~:’ denote the set of valid
characters allowed by this module in a cookie name (as *note key: c1b.).

Alterado na versão 3.3: Allowed ‘:’ as a valid cookie name character.

     Nota: On encountering an invalid cookie, *note CookieError: 3dcf.
     is raised, so if your cookie data comes from a browser you should
     always prepare for invalid data and catch *note CookieError: 3dcf.
     on parsing.

 -- Exceção: http.cookies.CookieError

     Exception failing because of RFC 2109(4) invalidity: incorrect
     attributes, incorrect ‘Set-Cookie’ header, etc.

 -- Classe: http.cookies.BaseCookie ([input])

     This class is a dictionary-like object whose keys are strings and
     whose values are *note Morsel: c1e. instances.  Note that upon
     setting a key to a value, the value is first converted to a *note
     Morsel: c1e. containing the key and the value.

     If 'input' is given, it is passed to the *note load(): 3dd1.
     method.

 -- Classe: http.cookies.SimpleCookie ([input])

     This class derives from *note BaseCookie: 3dd0. and overrides *note
     value_decode(): 3dd2. and *note value_encode(): 3dd3.
     ‘SimpleCookie’ supports strings as cookie values.  When setting the
     value, ‘SimpleCookie’ calls the builtin *note str(): 44c. to
     convert the value to a string.  Values received from HTTP are kept
     as strings.

Ver também
..........

Módulo *note http.cookiejar: 70.

     HTTP cookie handling for web 'clients'.  The *note http.cookiejar:
     70. and *note http.cookies: 71. modules do not depend on each
     other.

RFC 2109(5) - HTTP State Management Mechanism

     This is the state management specification implemented by this
     module.

* Menu:

* Objetos Cookie::
* Objetos Morsel::
* Exemplo: Exemplo<12>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/http/cookies.py

   (2) https://datatracker.ietf.org/doc/html/rfc2109.html

   (3) https://datatracker.ietf.org/doc/html/rfc2068.html

   (4) https://datatracker.ietf.org/doc/html/rfc2109.html

   (5) https://datatracker.ietf.org/doc/html/rfc2109.html


File: python.info,  Node: Objetos Cookie,  Next: Objetos Morsel,  Up: http cookies — HTTP state management

5.22.18.1 Objetos Cookie
........................

 -- Método: BaseCookie.value_decode (val)

     Return a tuple ‘(real_value, coded_value)’ from a string
     representation.  ‘real_value’ can be any type.  This method does no
     decoding in *note BaseCookie: 3dd0. — it exists so it can be
     overridden.

 -- Método: BaseCookie.value_encode (val)

     Return a tuple ‘(real_value, coded_value)’.  'val' can be any type,
     but ‘coded_value’ will always be converted to a string.  This
     method does no encoding in *note BaseCookie: 3dd0. — it exists so
     it can be overridden.

     In general, it should be the case that *note value_encode(): 3dd3.
     and *note value_decode(): 3dd2. are inverses on the range of
     'value_decode'.

 -- Método: BaseCookie.output (attrs=None, header='Set-Cookie:',
          sep='\r\n')

     Return a string representation suitable to be sent as HTTP headers.
     'attrs' and 'header' are sent to each *note Morsel: c1e.’s *note
     output(): 3dd7. method.  'sep' is used to join the headers
     together, and is by default the combination ‘'\r\n'’ (CRLF).

 -- Método: BaseCookie.js_output (attrs=None)

     Return an embeddable JavaScript snippet, which, if run on a browser
     which supports JavaScript, will act the same as if the HTTP headers
     was sent.

     The meaning for 'attrs' is the same as in *note output(): 3dd6.

 -- Método: BaseCookie.load (rawdata)

     If 'rawdata' is a string, parse it as an ‘HTTP_COOKIE’ and add the
     values found there as *note Morsel: c1e.s.  If it is a dictionary,
     it is equivalent to:

          for k, v in rawdata.items():
              cookie[k] = v


File: python.info,  Node: Objetos Morsel,  Next: Exemplo<12>,  Prev: Objetos Cookie,  Up: http cookies — HTTP state management

5.22.18.2 Objetos Morsel
........................

 -- Classe: http.cookies.Morsel

     Abstract a key/value pair, which has some RFC 2109(1) attributes.

     Morsels are dictionary-like objects, whose set of keys is constant
     — the valid RFC 2109(2) attributes, which are:

           -- Atributo: expires
           -- Atributo: path
           -- Atributo: comment
           -- Atributo: domain

           -- Atributo: max-age
           -- Atributo: secure
           -- Atributo: version
           -- Atributo: httponly
           -- Atributo: samesite

     The attribute *note httponly: 1417. specifies that the cookie is
     only transferred in HTTP requests, and is not accessible through
     JavaScript.  This is intended to mitigate some forms of cross-site
     scripting.

     The attribute *note samesite: 3de1. controls when the browser sends
     the cookie with cross-site requests.  This helps to mitigate CSRF
     attacks.  Valid values are “Strict” (only sent with same-site
     requests), “Lax” (sent with same-site requests and top-level
     navigations), and “None” (sent with same-site and cross-site
     requests).  When using “None”, the “secure” attribute must also be
     set, as required by modern browsers.

     The keys are case-insensitive and their default value is ‘''’.

     Alterado na versão 3.5: ‘__eq__()’ now takes *note key: c1b. and
     *note value: c1c. into account.

     Alterado na versão 3.7: Attributes *note key: c1b, *note value:
     c1c. and *note coded_value: c1d. are read-only.  Use *note set():
     c1f. for setting them.

     Alterado na versão 3.8: Added support for the *note samesite: 3de1.
     attribute.

 -- Atributo: Morsel.value

     O valor do cookie.

 -- Atributo: Morsel.coded_value

     The encoded value of the cookie — this is what should be sent.

 -- Atributo: Morsel.key

     O nome do cookie.

 -- Método: Morsel.set (key, value, coded_value)

     Set the 'key', 'value' and 'coded_value' attributes.

 -- Método: Morsel.isReservedKey (K)

     Whether 'K' is a member of the set of keys of a *note Morsel: c1e.

 -- Método: Morsel.output (attrs=None, header='Set-Cookie:')

     Return a string representation of the Morsel, suitable to be sent
     as an HTTP header.  By default, all the attributes are included,
     unless 'attrs' is given, in which case it should be a list of
     attributes to use.  'header' is by default ‘"Set-Cookie:"’.

 -- Método: Morsel.js_output (attrs=None)

     Return an embeddable JavaScript snippet, which, if run on a browser
     which supports JavaScript, will act the same as if the HTTP header
     was sent.

     The meaning for 'attrs' is the same as in *note output(): 3dd7.

 -- Método: Morsel.OutputString (attrs=None)

     Return a string representing the Morsel, without any surrounding
     HTTP or JavaScript.

     The meaning for 'attrs' is the same as in *note output(): 3dd7.

 -- Método: Morsel.update (values)

     Update the values in the Morsel dictionary with the values in the
     dictionary 'values'.  Raise an error if any of the keys in the
     'values' dict is not a valid RFC 2109(3) attribute.

     Alterado na versão 3.5: an error is raised for invalid keys.

 -- Método: Morsel.copy (value)

     Return a shallow copy of the Morsel object.

     Alterado na versão 3.5: return a Morsel object instead of a dict.

 -- Método: Morsel.setdefault (key, value=None)

     Raise an error if key is not a valid RFC 2109(4) attribute,
     otherwise behave the same as *note dict.setdefault(): 10b2.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2109.html

   (2) https://datatracker.ietf.org/doc/html/rfc2109.html

   (3) https://datatracker.ietf.org/doc/html/rfc2109.html

   (4) https://datatracker.ietf.org/doc/html/rfc2109.html


File: python.info,  Node: Exemplo<12>,  Prev: Objetos Morsel,  Up: http cookies — HTTP state management

5.22.18.3 Exemplo
.................

The following example demonstrates how to use the *note http.cookies:
71. module.

     >>> from http import cookies
     >>> C = cookies.SimpleCookie()
     >>> C["fig"] = "newton"
     >>> C["sugar"] = "wafer"
     >>> print(C) # generate HTTP headers
     Set-Cookie: fig=newton
     Set-Cookie: sugar=wafer
     >>> print(C.output()) # same thing
     Set-Cookie: fig=newton
     Set-Cookie: sugar=wafer
     >>> C = cookies.SimpleCookie()
     >>> C["rocky"] = "road"
     >>> C["rocky"]["path"] = "/cookie"
     >>> print(C.output(header="Cookie:"))
     Cookie: rocky=road; Path=/cookie
     >>> print(C.output(attrs=[], header="Cookie:"))
     Cookie: rocky=road
     >>> C = cookies.SimpleCookie()
     >>> C.load("chips=ahoy; vienna=finger") # load from a string (HTTP header)
     >>> print(C)
     Set-Cookie: chips=ahoy
     Set-Cookie: vienna=finger
     >>> C = cookies.SimpleCookie()
     >>> C.load('keebler="E=everybody; L=\\"Loves\\"; fudge=;";')
     >>> print(C)
     Set-Cookie: keebler="E=everybody; L=\"Loves\"; fudge=;"
     >>> C = cookies.SimpleCookie()
     >>> C["oreo"] = "doublestuff"
     >>> C["oreo"]["path"] = "/"
     >>> print(C)
     Set-Cookie: oreo=doublestuff; Path=/
     >>> C = cookies.SimpleCookie()
     >>> C["twix"] = "none for you"
     >>> C["twix"].value
     'none for you'
     >>> C = cookies.SimpleCookie()
     >>> C["number"] = 7 # equivalent to C["number"] = str(7)
     >>> C["string"] = "seven"
     >>> C["number"].value
     '7'
     >>> C["string"].value
     'seven'
     >>> print(C)
     Set-Cookie: number=7
     Set-Cookie: string=seven


File: python.info,  Node: http cookiejar — Cookie handling for HTTP clients,  Next: xmlrpc — Módulos de servidor e cliente XMLRPC,  Prev: http cookies — HTTP state management,  Up: Protocolos de Internet e Suporte

5.22.19 ‘http.cookiejar’ — Cookie handling for HTTP clients
-----------------------------------------------------------

'Código-fonte:' Lib/http/cookiejar.py(1)

__________________________________________________________________

The *note http.cookiejar: 70. module defines classes for automatic
handling of HTTP cookies.  It is useful for accessing websites that
require small pieces of data – 'cookies' – to be set on the client
machine by an HTTP response from a web server, and then returned to the
server in later HTTP requests.

Both the regular Netscape cookie protocol and the protocol defined by
RFC 2965(2) are handled.  RFC 2965 handling is switched off by default.
RFC 2109(3) cookies are parsed as Netscape cookies and subsequently
treated either as Netscape or RFC 2965 cookies according to the ‘policy’
in effect.  Note that the great majority of cookies on the internet are
Netscape cookies.  *note http.cookiejar: 70. attempts to follow the
de-facto Netscape cookie protocol (which differs substantially from that
set out in the original Netscape specification), including taking note
of the ‘max-age’ and ‘port’ cookie-attributes introduced with RFC 2965.

     Nota: The various named parameters found in ‘Set-Cookie’ and
     ‘Set-Cookie2’ headers (eg.  ‘domain’ and ‘expires’) are
     conventionally referred to as 'attributes'.  To distinguish them
     from Python attributes, the documentation for this module uses the
     term 'cookie-attribute' instead.

The module defines the following exception:

 -- Exceção: http.cookiejar.LoadError

     Instances of *note FileCookieJar: 3dec. raise this exception on
     failure to load cookies from a file.  *note LoadError: 3deb. is a
     subclass of *note OSError: 417.

     Alterado na versão 3.3: *note LoadError: 3deb. used to be a subtype
     of *note IOError: 108b, which is now an alias of *note OSError:
     417.

As seguintes classes são disponibilizadas:

 -- Classe: http.cookiejar.CookieJar (policy=None)

     'policy' is an object implementing the *note CookiePolicy: 3ded.
     interface.

     The *note CookieJar: 3c07. class stores HTTP cookies.  It extracts
     cookies from HTTP requests, and returns them in HTTP responses.
     *note CookieJar: 3c07. instances automatically expire contained
     cookies when necessary.  Subclasses are also responsible for
     storing and retrieving cookies from a file or database.

 -- Classe: http.cookiejar.FileCookieJar (filename=None, delayload=None,
          policy=None)

     'policy' is an object implementing the *note CookiePolicy: 3ded.
     interface.  For the other arguments, see the documentation for the
     corresponding attributes.

     A *note CookieJar: 3c07. which can load cookies from, and perhaps
     save cookies to, a file on disk.  Cookies are 'NOT' loaded from the
     named file until either the *note load(): 3dee. or *note revert():
     3def. method is called.  Subclasses of this class are documented in
     section *note FileCookieJar subclasses and co-operation with web
     browsers: 3df0.

     This should not be initialized directly – use its subclasses below
     instead.

     Alterado na versão 3.8: The filename parameter supports a *note
     path-like object: 2a0.

 -- Classe: http.cookiejar.CookiePolicy

     This class is responsible for deciding whether each cookie should
     be accepted from / returned to the server.

 -- Classe: http.cookiejar.DefaultCookiePolicy (blocked_domains=None,
          allowed_domains=None, netscape=True, rfc2965=False,
          rfc2109_as_netscape=None, hide_cookie2=False,
          strict_domain=False, strict_rfc2965_unverifiable=True,
          strict_ns_unverifiable=False,
          strict_ns_domain=DefaultCookiePolicy.DomainLiberal,
          strict_ns_set_initial_dollar=False, strict_ns_set_path=False,
          secure_protocols=('https', 'wss'))

     Constructor arguments should be passed as keyword arguments only.
     'blocked_domains' is a sequence of domain names that we never
     accept cookies from, nor return cookies to.  'allowed_domains' if
     not *note None: 675, this is a sequence of the only domains for
     which we accept and return cookies.  'secure_protocols' is a
     sequence of protocols for which secure cookies can be added to.  By
     default 'https' and 'wss' (secure websocket) are considered secure
     protocols.  For all other arguments, see the documentation for
     *note CookiePolicy: 3ded. and *note DefaultCookiePolicy: 1b89.
     objects.

     *note DefaultCookiePolicy: 1b89. implements the standard accept /
     reject rules for Netscape and RFC 2965(4) cookies.  By default, RFC
     2109(5) cookies (ie.  cookies received in a ‘Set-Cookie’ header
     with a version cookie-attribute of 1) are treated according to the
     RFC 2965 rules.  However, if RFC 2965 handling is turned off or
     *note rfc2109_as_netscape: 3df1. is ‘True’, RFC 2109 cookies are
     ‘downgraded’ by the *note CookieJar: 3c07. instance to Netscape
     cookies, by setting the ‘version’ attribute of the *note Cookie:
     3df2. instance to 0.  *note DefaultCookiePolicy: 1b89. also
     provides some parameters to allow some fine-tuning of policy.

 -- Classe: http.cookiejar.Cookie

     This class represents Netscape, RFC 2109(6) and RFC 2965(7)
     cookies.  It is not expected that users of *note http.cookiejar:
     70. construct their own *note Cookie: 3df2. instances.  Instead, if
     necessary, call ‘make_cookies()’ on a *note CookieJar: 3c07.
     instance.

Ver também
..........

Módulo *note urllib.request: 10b.

     URL opening with automatic cookie handling.

Module *note http.cookies: 71.

     HTTP cookie classes, principally useful for server-side code.  The
     *note http.cookiejar: 70. and *note http.cookies: 71. modules do
     not depend on each other.

‘https://curl.se/rfc/cookie_spec.html’

     The specification of the original Netscape cookie protocol.  Though
     this is still the dominant protocol, the ‘Netscape cookie protocol’
     implemented by all the major browsers (and *note http.cookiejar:
     70.) only bears a passing resemblance to the one sketched out in
     ‘cookie_spec.html’.

RFC 2109(8) - HTTP State Management Mechanism

     Obsoleted by RFC 2965(9).  Uses ‘Set-Cookie’ with version=1.

RFC 2965(10) - HTTP State Management Mechanism

     The Netscape protocol with the bugs fixed.  Uses ‘Set-Cookie2’ in
     place of ‘Set-Cookie’.  Not widely used.

‘https://kristol.org/cookie/errata.html’

     Unfinished errata to RFC 2965(11).

RFC 2964(12) - Use of HTTP State Management

* Menu:

* CookieJar and FileCookieJar Objects::
* FileCookieJar subclasses and co-operation with web browsers::
* Objeto CookiePolicy::
* DefaultCookiePolicy Objects::
* Objetos Cookie: Objetos Cookie<2>.
* Exemplos: Exemplos<29>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/http/cookiejar.py

   (2) https://datatracker.ietf.org/doc/html/rfc2965.html

   (3) https://datatracker.ietf.org/doc/html/rfc2109.html

   (4) https://datatracker.ietf.org/doc/html/rfc2965.html

   (5) https://datatracker.ietf.org/doc/html/rfc2109.html

   (6) https://datatracker.ietf.org/doc/html/rfc2109.html

   (7) https://datatracker.ietf.org/doc/html/rfc2965.html

   (8) https://datatracker.ietf.org/doc/html/rfc2109.html

   (9) https://datatracker.ietf.org/doc/html/rfc2965.html

   (10) https://datatracker.ietf.org/doc/html/rfc2965.html

   (11) https://datatracker.ietf.org/doc/html/rfc2965.html

   (12) https://datatracker.ietf.org/doc/html/rfc2964.html


File: python.info,  Node: CookieJar and FileCookieJar Objects,  Next: FileCookieJar subclasses and co-operation with web browsers,  Up: http cookiejar — Cookie handling for HTTP clients

5.22.19.1 CookieJar and FileCookieJar Objects
.............................................

*note CookieJar: 3c07. objects support the *note iterator: 1ac. protocol
for iterating over contained *note Cookie: 3df2. objects.

*note CookieJar: 3c07. has the following methods:

 -- Método: CookieJar.add_cookie_header (request)

     Add correct ‘Cookie’ header to 'request'.

     If policy allows (ie.  the ‘rfc2965’ and ‘hide_cookie2’ attributes
     of the *note CookieJar: 3c07.’s *note CookiePolicy: 3ded. instance
     are true and false respectively), the ‘Cookie2’ header is also
     added when appropriate.

     The 'request' object (usually a *note urllib.request.Request: 100e.
     instance) must support the methods ‘get_full_url()’,
     ‘has_header()’, ‘get_header()’, ‘header_items()’,
     ‘add_unredirected_header()’ and the attributes ‘host’, ‘type’,
     ‘unverifiable’ and ‘origin_req_host’ as documented by *note
     urllib.request: 10b.

     Alterado na versão 3.3: 'request' object needs ‘origin_req_host’
     attribute.  Dependency on a deprecated method
     ‘get_origin_req_host()’ has been removed.

 -- Método: CookieJar.extract_cookies (response, request)

     Extract cookies from HTTP 'response' and store them in the *note
     CookieJar: 3c07, where allowed by policy.

     The *note CookieJar: 3c07. will look for allowable ‘Set-Cookie’ and
     ‘Set-Cookie2’ headers in the 'response' argument, and store cookies
     as appropriate (subject to the *note CookiePolicy.set_ok(): 3df7.
     method’s approval).

     The 'response' object (usually the result of a call to *note
     urllib.request.urlopen(): 293, or similar) should support an
     ‘info()’ method, which returns an *note email.message.Message: 27c.
     instance.

     The 'request' object (usually a *note urllib.request.Request: 100e.
     instance) must support the method ‘get_full_url()’ and the
     attributes ‘host’, ‘unverifiable’ and ‘origin_req_host’, as
     documented by *note urllib.request: 10b.  The request is used to
     set default values for cookie-attributes as well as for checking
     that the cookie is allowed to be set.

     Alterado na versão 3.3: 'request' object needs ‘origin_req_host’
     attribute.  Dependency on a deprecated method
     ‘get_origin_req_host()’ has been removed.

 -- Método: CookieJar.set_policy (policy)

     Set the *note CookiePolicy: 3ded. instance to be used.

 -- Método: CookieJar.make_cookies (response, request)

     Return sequence of *note Cookie: 3df2. objects extracted from
     'response' object.

     See the documentation for *note extract_cookies(): 3df6. for the
     interfaces required of the 'response' and 'request' arguments.

 -- Método: CookieJar.set_cookie_if_ok (cookie, request)

     Set a *note Cookie: 3df2. if policy says it’s OK to do so.

 -- Método: CookieJar.set_cookie (cookie)

     Set a *note Cookie: 3df2, without checking with policy to see
     whether or not it should be set.

 -- Método: CookieJar.clear ([domain[, path[, name]]])

     Clear some cookies.

     If invoked without arguments, clear all cookies.  If given a single
     argument, only cookies belonging to that 'domain' will be removed.
     If given two arguments, cookies belonging to the specified 'domain'
     and URL 'path' are removed.  If given three arguments, then the
     cookie with the specified 'domain', 'path' and 'name' is removed.

     Raises *note KeyError: 344. if no matching cookie exists.

 -- Método: CookieJar.clear_session_cookies ()

     Descarta os cookies de sessão.

     Discards all contained cookies that have a true ‘discard’ attribute
     (usually because they had either no ‘max-age’ or ‘expires’
     cookie-attribute, or an explicit ‘discard’ cookie-attribute).  For
     interactive browsers, the end of a session usually corresponds to
     closing the browser window.

     Note that the ‘save()’ method won’t save session cookies anyway,
     unless you ask otherwise by passing a true 'ignore_discard'
     argument.

*note FileCookieJar: 3dec. implements the following additional methods:

 -- Método: FileCookieJar.save (filename=None, ignore_discard=False,
          ignore_expires=False)

     Save cookies to a file.

     This base class raises *note NotImplementedError: 228.  Subclasses
     may leave this method unimplemented.

     'filename' is the name of file in which to save cookies.  If
     'filename' is not specified, ‘self.filename’ is used (whose default
     is the value passed to the constructor, if any); if ‘self.filename’
     is *note None: 675, *note ValueError: 202. is raised.

     'ignore_discard': save even cookies set to be discarded.
     'ignore_expires': save even cookies that have expired

     The file is overwritten if it already exists, thus wiping all the
     cookies it contains.  Saved cookies can be restored later using the
     *note load(): 3dee. or *note revert(): 3def. methods.

 -- Método: FileCookieJar.load (filename=None, ignore_discard=False,
          ignore_expires=False)

     Load cookies from a file.

     Old cookies are kept unless overwritten by newly loaded ones.

     Arguments are as for *note save(): 3dfe.

     The named file must be in the format understood by the class, or
     *note LoadError: 3deb. will be raised.  Also, *note OSError: 417.
     may be raised, for example if the file does not exist.

     Alterado na versão 3.3: *note IOError: 108b. costumava ser
     levantada, agora ela é um apelido para *note OSError: 417.

 -- Método: FileCookieJar.revert (filename=None, ignore_discard=False,
          ignore_expires=False)

     Clear all cookies and reload cookies from a saved file.

     *note revert(): 3def. can raise the same exceptions as *note
     load(): 3dee.  If there is a failure, the object’s state will not
     be altered.

*note FileCookieJar: 3dec. instances have the following public
attributes:

 -- Atributo: FileCookieJar.filename

     Filename of default file in which to keep cookies.  This attribute
     may be assigned to.

 -- Atributo: FileCookieJar.delayload

     If true, load cookies lazily from disk.  This attribute should not
     be assigned to.  This is only a hint, since this only affects
     performance, not behaviour (unless the cookies on disk are
     changing).  A *note CookieJar: 3c07. object may ignore it.  None of
     the *note FileCookieJar: 3dec. classes included in the standard
     library lazily loads cookies.


File: python.info,  Node: FileCookieJar subclasses and co-operation with web browsers,  Next: Objeto CookiePolicy,  Prev: CookieJar and FileCookieJar Objects,  Up: http cookiejar — Cookie handling for HTTP clients

5.22.19.2 FileCookieJar subclasses and co-operation with web browsers
.....................................................................

The following *note CookieJar: 3c07. subclasses are provided for reading
and writing.

 -- Classe: http.cookiejar.MozillaCookieJar (filename=None,
          delayload=None, policy=None)

     A *note FileCookieJar: 3dec. that can load from and save cookies to
     disk in the Mozilla ‘cookies.txt’ file format (which is also used
     by curl and the Lynx and Netscape browsers).

          Nota: This loses information about RFC 2965(1) cookies, and
          also about newer or non-standard cookie-attributes such as
          ‘port’.

          Aviso: Back up your cookies before saving if you have cookies
          whose loss / corruption would be inconvenient (there are some
          subtleties which may lead to slight changes in the file over a
          load / save round-trip).

     Also note that cookies saved while Mozilla is running will get
     clobbered by Mozilla.

 -- Classe: http.cookiejar.LWPCookieJar (filename=None, delayload=None,
          policy=None)

     A *note FileCookieJar: 3dec. that can load from and save cookies to
     disk in format compatible with the libwww-perl library’s
     ‘Set-Cookie3’ file format.  This is convenient if you want to store
     cookies in a human-readable file.

     Alterado na versão 3.8: The filename parameter supports a *note
     path-like object: 2a0.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2965.html


File: python.info,  Node: Objeto CookiePolicy,  Next: DefaultCookiePolicy Objects,  Prev: FileCookieJar subclasses and co-operation with web browsers,  Up: http cookiejar — Cookie handling for HTTP clients

5.22.19.3 Objeto CookiePolicy
.............................

Objects implementing the *note CookiePolicy: 3ded. interface have the
following methods:

 -- Método: CookiePolicy.set_ok (cookie, request)

     Return boolean value indicating whether cookie should be accepted
     from server.

     'cookie' is a *note Cookie: 3df2. instance.  'request' is an object
     implementing the interface defined by the documentation for *note
     CookieJar.extract_cookies(): 3df6.

 -- Método: CookiePolicy.return_ok (cookie, request)

     Return boolean value indicating whether cookie should be returned
     to server.

     'cookie' is a *note Cookie: 3df2. instance.  'request' is an object
     implementing the interface defined by the documentation for *note
     CookieJar.add_cookie_header(): 3df5.

 -- Método: CookiePolicy.domain_return_ok (domain, request)

     Return ‘False’ if cookies should not be returned, given cookie
     domain.

     This method is an optimization.  It removes the need for checking
     every cookie with a particular domain (which might involve reading
     many files).  Returning true from *note domain_return_ok(): 3e07.
     and *note path_return_ok(): 3e08. leaves all the work to *note
     return_ok(): 3e06.

     If *note domain_return_ok(): 3e07. returns true for the cookie
     domain, *note path_return_ok(): 3e08. is called for the cookie
     path.  Otherwise, *note path_return_ok(): 3e08. and *note
     return_ok(): 3e06. are never called for that cookie domain.  If
     *note path_return_ok(): 3e08. returns true, *note return_ok():
     3e06. is called with the *note Cookie: 3df2. object itself for a
     full check.  Otherwise, *note return_ok(): 3e06. is never called
     for that cookie path.

     Note that *note domain_return_ok(): 3e07. is called for every
     'cookie' domain, not just for the 'request' domain.  For example,
     the function might be called with both ‘".example.com"’ and
     ‘"www.example.com"’ if the request domain is ‘"www.example.com"’.
     The same goes for *note path_return_ok(): 3e08.

     The 'request' argument is as documented for *note return_ok():
     3e06.

 -- Método: CookiePolicy.path_return_ok (path, request)

     Return ‘False’ if cookies should not be returned, given cookie
     path.

     See the documentation for *note domain_return_ok(): 3e07.

In addition to implementing the methods above, implementations of the
*note CookiePolicy: 3ded. interface must also supply the following
attributes, indicating which protocols should be used, and how.  All of
these attributes may be assigned to.

 -- Atributo: CookiePolicy.netscape

     Implement Netscape protocol.

 -- Atributo: CookiePolicy.rfc2965

     Implement RFC 2965(1) protocol.

 -- Atributo: CookiePolicy.hide_cookie2

     Don’t add ‘Cookie2’ header to requests (the presence of this header
     indicates to the server that we understand RFC 2965(2) cookies).

The most useful way to define a *note CookiePolicy: 3ded. class is by
subclassing from *note DefaultCookiePolicy: 1b89. and overriding some or
all of the methods above.  *note CookiePolicy: 3ded. itself may be used
as a ‘null policy’ to allow setting and receiving any and all cookies
(this is unlikely to be useful).

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2965.html

   (2) https://datatracker.ietf.org/doc/html/rfc2965.html


File: python.info,  Node: DefaultCookiePolicy Objects,  Next: Objetos Cookie<2>,  Prev: Objeto CookiePolicy,  Up: http cookiejar — Cookie handling for HTTP clients

5.22.19.4 DefaultCookiePolicy Objects
.....................................

Implements the standard rules for accepting and returning cookies.

Both RFC 2965(1) and Netscape cookies are covered.  RFC 2965 handling is
switched off by default.

The easiest way to provide your own policy is to override this class and
call its methods in your overridden implementations before adding your
own additional checks:

     import http.cookiejar
     class MyCookiePolicy(http.cookiejar.DefaultCookiePolicy):
         def set_ok(self, cookie, request):
             if not http.cookiejar.DefaultCookiePolicy.set_ok(self, cookie, request):
                 return False
             if i_dont_want_to_store_this_cookie(cookie):
                 return False
             return True

In addition to the features required to implement the *note
CookiePolicy: 3ded. interface, this class allows you to block and allow
domains from setting and receiving cookies.  There are also some
strictness switches that allow you to tighten up the rather loose
Netscape protocol rules a little bit (at the cost of blocking some
benign cookies).

A domain blocklist and allowlist is provided (both off by default).
Only domains not in the blocklist and present in the allowlist (if the
allowlist is active) participate in cookie setting and returning.  Use
the 'blocked_domains' constructor argument, and ‘blocked_domains()’ and
‘set_blocked_domains()’ methods (and the corresponding argument and
methods for 'allowed_domains').  If you set an allowlist, you can turn
it off again by setting it to *note None: 675.

Domains in block or allow lists that do not start with a dot must equal
the cookie domain to be matched.  For example, ‘"example.com"’ matches a
blocklist entry of ‘"example.com"’, but ‘"www.example.com"’ does not.
Domains that do start with a dot are matched by more specific domains
too.  For example, both ‘"www.example.com"’ and
‘"www.coyote.example.com"’ match ‘".example.com"’ (but ‘"example.com"’
itself does not).  IP addresses are an exception, and must match
exactly.  For example, if blocked_domains contains ‘"192.168.1.2"’ and
‘".168.1.2"’, 192.168.1.2 is blocked, but 193.168.1.2 is not.

*note DefaultCookiePolicy: 1b89. implements the following additional
methods:

 -- Método: DefaultCookiePolicy.blocked_domains ()

     Return the sequence of blocked domains (as a tuple).

 -- Método: DefaultCookiePolicy.set_blocked_domains (blocked_domains)

     Set the sequence of blocked domains.

 -- Método: DefaultCookiePolicy.is_blocked (domain)

     Return ‘True’ if 'domain' is on the blocklist for setting or
     receiving cookies.

 -- Método: DefaultCookiePolicy.allowed_domains ()

     Return *note None: 675, or the sequence of allowed domains (as a
     tuple).

 -- Método: DefaultCookiePolicy.set_allowed_domains (allowed_domains)

     Set the sequence of allowed domains, or *note None: 675.

 -- Método: DefaultCookiePolicy.is_not_allowed (domain)

     Return ‘True’ if 'domain' is not on the allowlist for setting or
     receiving cookies.

*note DefaultCookiePolicy: 1b89. instances have the following
attributes, which are all initialised from the constructor arguments of
the same name, and which may all be assigned to.

 -- Atributo: DefaultCookiePolicy.rfc2109_as_netscape

     If true, request that the *note CookieJar: 3c07. instance downgrade
     RFC 2109(2) cookies (ie.  cookies received in a ‘Set-Cookie’ header
     with a version cookie-attribute of 1) to Netscape cookies by
     setting the version attribute of the *note Cookie: 3df2. instance
     to 0.  The default value is *note None: 675, in which case RFC 2109
     cookies are downgraded if and only if RFC 2965(3) handling is
     turned off.  Therefore, RFC 2109 cookies are downgraded by default.

General strictness switches:

 -- Atributo: DefaultCookiePolicy.strict_domain

     Don’t allow sites to set two-component domains with country-code
     top-level domains like ‘.co.uk’, ‘.gov.uk’, ‘.co.nz’.etc.  This is
     far from perfect and isn’t guaranteed to work!

RFC 2965(4) protocol strictness switches:

 -- Atributo: DefaultCookiePolicy.strict_rfc2965_unverifiable

     Follow RFC 2965(5) rules on unverifiable transactions (usually, an
     unverifiable transaction is one resulting from a redirect or a
     request for an image hosted on another site).  If this is false,
     cookies are 'never' blocked on the basis of verifiability

Netscape protocol strictness switches:

 -- Atributo: DefaultCookiePolicy.strict_ns_unverifiable

     Apply RFC 2965(6) rules on unverifiable transactions even to
     Netscape cookies.

 -- Atributo: DefaultCookiePolicy.strict_ns_domain

     Flags indicating how strict to be with domain-matching rules for
     Netscape cookies.  See below for acceptable values.

 -- Atributo: DefaultCookiePolicy.strict_ns_set_initial_dollar

     Ignore cookies in Set-Cookie: headers that have names starting with
     ‘'$'’.

 -- Atributo: DefaultCookiePolicy.strict_ns_set_path

     Don’t allow setting cookies whose path doesn’t path-match request
     URI.

*note strict_ns_domain: 3e17. is a collection of flags.  Its value is
constructed by or-ing together (for example,
‘DomainStrictNoDots|DomainStrictNonDomain’ means both flags are set).

 -- Atributo: DefaultCookiePolicy.DomainStrictNoDots

     When setting cookies, the ‘host prefix’ must not contain a dot (eg.
     ‘www.foo.bar.com’ can’t set a cookie for ‘.bar.com’, because
     ‘www.foo’ contains a dot).

 -- Atributo: DefaultCookiePolicy.DomainStrictNonDomain

     Cookies that did not explicitly specify a ‘domain’ cookie-attribute
     can only be returned to a domain equal to the domain that set the
     cookie (eg.  ‘spam.example.com’ won’t be returned cookies from
     ‘example.com’ that had no ‘domain’ cookie-attribute).

 -- Atributo: DefaultCookiePolicy.DomainRFC2965Match

     When setting cookies, require a full RFC 2965(7) domain-match.

The following attributes are provided for convenience, and are the most
useful combinations of the above flags:

 -- Atributo: DefaultCookiePolicy.DomainLiberal

     Equivalent to 0 (ie.  all of the above Netscape domain strictness
     flags switched off).

 -- Atributo: DefaultCookiePolicy.DomainStrict

     Equivalente a ‘DomainStrictNoDots|DomainStrictNonDomain’.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2965.html

   (2) https://datatracker.ietf.org/doc/html/rfc2109.html

   (3) https://datatracker.ietf.org/doc/html/rfc2965.html

   (4) https://datatracker.ietf.org/doc/html/rfc2965.html

   (5) https://datatracker.ietf.org/doc/html/rfc2965.html

   (6) https://datatracker.ietf.org/doc/html/rfc2965.html

   (7) https://datatracker.ietf.org/doc/html/rfc2965.html


File: python.info,  Node: Objetos Cookie<2>,  Next: Exemplos<29>,  Prev: DefaultCookiePolicy Objects,  Up: http cookiejar — Cookie handling for HTTP clients

5.22.19.5 Objetos Cookie
........................

*note Cookie: 3df2. instances have Python attributes roughly
corresponding to the standard cookie-attributes specified in the various
cookie standards.  The correspondence is not one-to-one, because there
are complicated rules for assigning default values, because the
‘max-age’ and ‘expires’ cookie-attributes contain equivalent
information, and because RFC 2109(1) cookies may be ‘downgraded’ by
*note http.cookiejar: 70. from version 1 to version 0 (Netscape)
cookies.

Assignment to these attributes should not be necessary other than in
rare circumstances in a *note CookiePolicy: 3ded. method.  The class
does not enforce internal consistency, so you should know what you’re
doing if you do that.

 -- Atributo: Cookie.version

     Integer or *note None: 675.  Netscape cookies have *note version:
     3e20. 0.  RFC 2965(2) and RFC 2109(3) cookies have a ‘version’
     cookie-attribute of 1.  However, note that *note http.cookiejar:
     70. may ‘downgrade’ RFC 2109 cookies to Netscape cookies, in which
     case *note version: 3e20. is 0.

 -- Atributo: Cookie.name

     Cookie name (a string).

 -- Atributo: Cookie.value

     Cookie value (a string), or *note None: 675.

 -- Atributo: Cookie.port

     String representing a port or a set of ports (eg.  ‘80’, or
     ‘80,8080’), or *note None: 675.

 -- Atributo: Cookie.domain

     Cookie domain (a string).

 -- Atributo: Cookie.path

     Cookie path (a string, eg.  ‘'/acme/rocket_launchers'’).

 -- Atributo: Cookie.secure

     ‘True’ if cookie should only be returned over a secure connection.

 -- Atributo: Cookie.expires

     Integer expiry date in seconds since epoch, or *note None: 675.
     See also the *note is_expired(): 3e28. method.

 -- Atributo: Cookie.discard

     ‘True’ if this is a session cookie.

 -- Atributo: Cookie.comment

     String comment from the server explaining the function of this
     cookie, or *note None: 675.

 -- Atributo: Cookie.comment_url

     URL linking to a comment from the server explaining the function of
     this cookie, or *note None: 675.

 -- Atributo: Cookie.rfc2109

     ‘True’ if this cookie was received as an RFC 2109(4) cookie (ie.
     the cookie arrived in a ‘Set-Cookie’ header, and the value of the
     Version cookie-attribute in that header was 1).  This attribute is
     provided because *note http.cookiejar: 70. may ‘downgrade’ RFC 2109
     cookies to Netscape cookies, in which case *note version: 3e20. is
     0.

 -- Atributo: Cookie.port_specified

     ‘True’ if a port or set of ports was explicitly specified by the
     server (in the ‘Set-Cookie’ / ‘Set-Cookie2’ header).

 -- Atributo: Cookie.domain_specified

     ‘True’ if a domain was explicitly specified by the server.

 -- Atributo: Cookie.domain_initial_dot

     ‘True’ if the domain explicitly specified by the server began with
     a dot (‘'.'’).

Cookies may have additional non-standard cookie-attributes.  These may
be accessed using the following methods:

 -- Método: Cookie.has_nonstandard_attr (name)

     Return ‘True’ if cookie has the named cookie-attribute.

 -- Método: Cookie.get_nonstandard_attr (name, default=None)

     If cookie has the named cookie-attribute, return its value.
     Otherwise, return 'default'.

 -- Método: Cookie.set_nonstandard_attr (name, value)

     Set the value of the named cookie-attribute.

The *note Cookie: 3df2. class also defines the following method:

 -- Método: Cookie.is_expired (now=None)

     ‘True’ if cookie has passed the time at which the server requested
     it should expire.  If 'now' is given (in seconds since the epoch),
     return whether the cookie has expired at the specified time.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2109.html

   (2) https://datatracker.ietf.org/doc/html/rfc2965.html

   (3) https://datatracker.ietf.org/doc/html/rfc2109.html

   (4) https://datatracker.ietf.org/doc/html/rfc2109.html


File: python.info,  Node: Exemplos<29>,  Prev: Objetos Cookie<2>,  Up: http cookiejar — Cookie handling for HTTP clients

5.22.19.6 Exemplos
..................

The first example shows the most common usage of *note http.cookiejar:
70.:

     import http.cookiejar, urllib.request
     cj = http.cookiejar.CookieJar()
     opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
     r = opener.open("http://example.com/")

This example illustrates how to open a URL using your Netscape, Mozilla,
or Lynx cookies (assumes Unix/Netscape convention for location of the
cookies file):

     import os, http.cookiejar, urllib.request
     cj = http.cookiejar.MozillaCookieJar()
     cj.load(os.path.join(os.path.expanduser("~"), ".netscape", "cookies.txt"))
     opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
     r = opener.open("http://example.com/")

The next example illustrates the use of *note DefaultCookiePolicy: 1b89.
Turn on RFC 2965(1) cookies, be more strict about domains when setting
and returning Netscape cookies, and block some domains from setting
cookies or having them returned:

     import urllib.request
     from http.cookiejar import CookieJar, DefaultCookiePolicy
     policy = DefaultCookiePolicy(
         rfc2965=True, strict_ns_domain=Policy.DomainStrict,
         blocked_domains=["ads.net", ".ads.net"])
     cj = CookieJar(policy)
     opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cj))
     r = opener.open("http://example.com/")

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2965.html


File: python.info,  Node: xmlrpc — Módulos de servidor e cliente XMLRPC,  Next: xmlrpc client — Cliente XML-RPC,  Prev: http cookiejar — Cookie handling for HTTP clients,  Up: Protocolos de Internet e Suporte

5.22.20 ‘xmlrpc’ — Módulos de servidor e cliente XMLRPC
-------------------------------------------------------

XML-RPC é um método de chamada de procedimento remoto que usa XML
passado via HTTP como um transporte.  Com ele, um cliente pode chamar
métodos com parâmetros em um servidor remoto (o servidor é nomeado por
um URI) e receber dados estruturados.

‘xmlrpc’ é um pacote que coleta módulos de servidor e de cliente que
implementam o XML-RPC. Os módulos são:

   * *note xmlrpc.client: 12e.

   * *note xmlrpc.server: 12f.


File: python.info,  Node: xmlrpc client — Cliente XML-RPC,  Next: xmlrpc server — Servidores XML-RPC básicos,  Prev: xmlrpc — Módulos de servidor e cliente XMLRPC,  Up: Protocolos de Internet e Suporte

5.22.21 ‘xmlrpc.client’ — Cliente XML-RPC
-----------------------------------------

'Código-fonte:' Lib/xmlrpc/client.py(1)

__________________________________________________________________

XML-RPC é um método de chamada remota de métodos que usa XML usando
HTTP(S) como transporte.  Com ele, um cliente pode chamar métodos com
parâmetros em um servidor remoto (o servidor é nomeado por um URI) e
receber de volta dados estruturados.  Este módulo oferece suporte à
escrita de código de clientes XML-RPC; ele lida com todos os detalhes da
tradução entre Python objetos e XML.

     Aviso: O módulo *note xmlrpc.client: 12e. não é seguro contra dados
     criados com códigos maliciosos.  Se você precisar analisar dados
     não confiáveis ou não autenticados, consulte *note Segurança no
     XML: 3999.

Alterado na versão 3.5: Para URIs com HTTPS, *note xmlrpc.client: 12e.
agora faz todas as validações de certificado e nome do servidor
necessárias por padrão.

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

 -- Classe: xmlrpc.client.ServerProxy (uri, transport=None,
          encoding=None, verbose=False, allow_none=False,
          use_datetime=False, use_builtin_types=False, *, headers=(),
          context=None)

     Uma instância de *note ServerProxy: a61. é um objeto que gerencia a
     comunicação com um servidor XML-RPC remoto.  O primeiro argumento
     obrigatório é uma URI (Uniform Resource Indicator - Indicador de
     Recurso Uniforme) e normalmente vai ser a URL do servidor.  O
     segundo parâmetro, opcional, é uma instância de um factory de
     transporte; por padrão é uma instância de ‘SafeTransport’ para URLs
     https e uma instância de ‘Transport’ caso contrário.  O terceiro
     parâmetro, opcional, é o encoding, por padrão sendo UTF-8.  O
     quarto argumento, opcional, é a flag de debug.

     Os seguinte parâmetros coordenam o uso da instância de proxy
     retornada.  Se 'alow_none' for verdadeiro, a constante ‘None’ do
     Python será traduzida para XML; o comportamento padrão é que ‘None’
     levante uma *note TypeError: 2c3, Isso é uma extensão comum da
     especificação do XML-RPC, mas não é suportado por todos os clientes
     e servidores, veja http://ontosys.com/xml-rpc/extensions.php(2)
     para uma descrição.  A flag 'use_builtin_types' pode ser usada para
     que valores de data e hora sejam representados como objetos *note
     datetime.datetime: 1cc. e dados binários representados com objetos
     *note bytes: 1c2.; essa flag é False por padrão.  Objetos *note
     datetime.datetime: 1cc, *note bytes: 1c2. e *note bytearray: 2ea.
     podem ser usados nas chamadas.  O parâmetro 'headers' é uma
     sequência opcional de headers a serem enviados em cada requisição,
     representados por uma sequência de tuplas de dois valores
     representando o nome do header e seu valor (como ‘[('Header-Name',
     'value')]’).  Se uma URL HTTPS é fornecida, 'context' pode ser
     *note ssl.SSLContext: 294. e configura as definições SSL da conexão
     HTTPS subjacente.  A flag 'use_datetime' é obsoleta e é similar a
     'use_builtin_types' mas se aplica somente a valores de data e hora.

     Alterado na versão 3.3: O sinalizador 'use_builtin_types' foi
     adicionado.

     Alterado na versão 3.8: O parâmetro 'headers' foi adicionado.

     Both the HTTP and HTTPS transports support the URL syntax extension
     for HTTP Basic Authentication: ‘http://user:pass@host:port/path’.
     The ‘user:pass’ portion will be base64-encoded as an HTTP
     ‘Authorization’ header, and sent to the remote server as part of
     the connection process when invoking an XML-RPC method.  You only
     need to use this if the remote server requires a Basic
     Authentication user and password.

     A instância retornada é um objeto proxy com métodos que podem ser
     usados para invocar a chamada RPC correspondendo no servidor
     remoto.  Se o servidor remoto suportar a API de instrospecção, o
     proxy também pode ser usado para perguntar ao servidor remoto pelos
     métodos que ele suporta (descoberta de serviço) e recuperar outros
     meta-dados associados com o servidor.

     Os tipos que são conformáveis (por exemplo, que podem ser
     convertidos para XML) incluem os seguintes (e exceto onde indicado,
     eles não são convertidos como o mesmo tipo Python):

     Tipo XML-RPC               Tipo em Python
                                
     ---------------------------------------------------------------------------------------
                                
     ‘boolean’                  *note bool: 468.
                                
                                
     ‘int’, ‘i1’, ‘i2’, ‘i4’,   *note int: 257. no intervalo de -2147483648 a 2147483647.
     ‘i8’ ou ‘biginteger’       Os valores recebem a tag ‘<int>’.
                                
                                
     ‘double’ ou ‘float’        *note float: 2f7.  Os valores recebem a tag ‘<double>’.
                                
                                
     ‘string’                   *note str: 44c.
                                
                                
     ‘array’                    *note list: 611. ou *note tuple: 370. contendo elementos
                                conformáveis.  As matrizes são retornadas como
                                *note lists: 611.
                                
                                
     ‘struct’                   *note dict: 256.  Chaves devem ser strings, valores podem
                                ser qualquer tipo conformáveis.  Objetos de classes
                                definidas pelo usuário pode ser usadas; apenas o atributo
                                *note __dict__: 55b. delas é transmitido.
                                
                                
     ‘dateTime.iso8601’         *note DateTime: 142a. ou *note datetime.datetime: 1cc.  O
                                tipo retornado depende de volumes de sinalizadores
                                'use_builtin_types' e 'use_datetime'.
                                
                                
     ‘base64’                   *note Binary: 3e3a, *note bytes: 1c2. ou
                                *note bytearray: 2ea.  O tipo retornado depende do valor
                                da flag 'use_builtin_types'.
                                
                                
     ‘nil’                      A constante ‘None’.  A passagem é permitida somente se
                                'allow_none' for verdadeiro.
                                
                                
     ‘bigdecimal’               *note decimal.Decimal: 29d.  Somente tipo retornado.
                                

     Esta é a lista completa de tipos suportados por XML-RPC. Chamadas
     de método podem também levantar uma instância de *note Fault: 3e3b,
     usado para que o servidor XML-RPC indique erros, ou *note
     ProtocolError: 3e3c. para indicar erros na camada HTTP/HTTPS. Tnato
     *note Fault: 3e3b. quanto *note ProtocolError: 3e3c. derivam da
     classe base ‘Error’.  Observe que o módulo de cliente xmlrpc
     atualmente não converte instância de subclasses dos tipos built-in.

     Ao passar strings, os caracteres especiais para XML, como ‘<’, ‘>’
     e ‘&’, serão automaticamente escapados.  No entanto, é
     responsabilidade do chamador garantir que o string esteja livre de
     caracteres que não são permitidos em XML, como os caracteres de
     controle com valores ASCII entre 0 e 31 (exceto, é claro,
     tabulação, nova linha e retorno de carro); se isso não for feito,
     resultará em uma solicitação XML-RPC que não é um XML bem formado.
     Se você precisar passar bytes arbitrários via XML-RPC, use as
     classes *note bytes: 1c2. ou *note bytearray: 2ea. ou a classe
     wrapper *note Binary: 3e3a. descrito abaixo.

     ‘Server’ foi mantido como um apelido para *note ServerProxy: a61.
     para compatibilidade retroativa.  Código novo deve usar *note
     ServerProxy: a61.

     Alterado na versão 3.5: Argumento 'context' adicionado.

     Alterado na versão 3.6: Adicionado suporte para tags com prefixos
     (por exemplo ‘ex:nil’) Adicionado suporte para desconversão de
     tipos adicionados usados pela implementação do Apache XML-RPC para
     numéricos: ‘i1’, ‘i2’, ‘i8’, ‘biginteger’, ‘float’ e ‘bigdecimal’.
     Veja ‘https://ws.apache.org/xmlrpc/types.html’ para uma descrição.

Ver também
..........

XML-RPC HOWTO(3)

     Uma boa descrição das operações XML-RPC e software cliente em
     vários idiomas.  Contém praticamente tudo o que um desenvolvedor de
     clientes XML-RPC precisa saber.

XML-RPC Introspection(4)

     Describe a extensão do protocolo XML-RPC para instrospecção.

XML-RPC Specification(5)

     A especificação oficial.

* Menu:

* Objetos ServerProxy::
* Objetos DateTime::
* Objetos Binários::
* Objetos Fault::
* Objetos ProtocolError::
* Objetos MultiCall::
* Convenience Functions::
* Exemplo de uso do cliente::
* Example of Client and Server Usage::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/xmlrpc/client.py

   (2) 
https://web.archive.org/web/20130120074804/http://ontosys.com/xml-rpc/extensions.php

   (3) https://tldp.org/HOWTO/XML-RPC-HOWTO/index.html

   (4) https://xmlrpc-c.sourceforge.io/introspection.html

   (5) http://xmlrpc.scripting.com/spec.html


File: python.info,  Node: Objetos ServerProxy,  Next: Objetos DateTime,  Up: xmlrpc client — Cliente XML-RPC

5.22.21.1 Objetos ServerProxy
.............................

A *note ServerProxy: a61. instance has a method corresponding to each
remote procedure call accepted by the XML-RPC server.  Calling the
method performs an RPC, dispatched by both name and argument signature
(e.g.  the same method name can be overloaded with multiple argument
signatures).  The RPC finishes by returning a value, which may be either
returned data in a conformant type or a *note Fault: 3e3b. or *note
ProtocolError: 3e3c. object indicating an error.

Servers that support the XML introspection API support some common
methods grouped under the reserved ‘system’ attribute:

 -- Método: ServerProxy.system.listMethods ()

     This method returns a list of strings, one for each (non-system)
     method supported by the XML-RPC server.

 -- Método: ServerProxy.system.methodSignature (name)

     This method takes one parameter, the name of a method implemented
     by the XML-RPC server.  It returns an array of possible signatures
     for this method.  A signature is an array of types.  The first of
     these types is the return type of the method, the rest are
     parameters.

     Because multiple signatures (ie.  overloading) is permitted, this
     method returns a list of signatures rather than a singleton.

     Signatures themselves are restricted to the top level parameters
     expected by a method.  For instance if a method expects one array
     of structs as a parameter, and it returns a string, its signature
     is simply “string, array”.  If it expects three integers and
     returns a string, its signature is “string, int, int, int”.

     If no signature is defined for the method, a non-array value is
     returned.  In Python this means that the type of the returned value
     will be something other than list.

 -- Método: ServerProxy.system.methodHelp (name)

     This method takes one parameter, the name of a method implemented
     by the XML-RPC server.  It returns a documentation string
     describing the use of that method.  If no such string is available,
     an empty string is returned.  The documentation string may contain
     HTML markup.

Alterado na versão 3.5: Instances of *note ServerProxy: a61. support the
*note context manager: 5d4. protocol for closing the underlying
transport.

A working example follows.  The server code:

     from xmlrpc.server import SimpleXMLRPCServer

     def is_even(n):
         return n % 2 == 0

     server = SimpleXMLRPCServer(("localhost", 8000))
     print("Listening on port 8000...")
     server.register_function(is_even, "is_even")
     server.serve_forever()

The client code for the preceding server:

     import xmlrpc.client

     with xmlrpc.client.ServerProxy("http://localhost:8000/") as proxy:
         print("3 is even: %s" % str(proxy.is_even(3)))
         print("100 is even: %s" % str(proxy.is_even(100)))


File: python.info,  Node: Objetos DateTime,  Next: Objetos Binários,  Prev: Objetos ServerProxy,  Up: xmlrpc client — Cliente XML-RPC

5.22.21.2 Objetos DateTime
..........................

 -- Classe: xmlrpc.client.DateTime

     This class may be initialized with seconds since the epoch, a time
     tuple, an ISO 8601 time/date string, or a *note datetime.datetime:
     1cc. instance.  It has the following methods, supported mainly for
     internal use by the marshalling/unmarshalling code:

      -- Método: decode (string)

          Accept a string as the instance’s new time value.

      -- Método: encode (out)

          Write the XML-RPC encoding of this *note DateTime: 142a. item
          to the 'out' stream object.

     It also supports certain of Python’s built-in operators through
     *note rich comparison: 12e2. and *note __repr__(): 61c. methods.

A working example follows.  The server code:

     import datetime
     from xmlrpc.server import SimpleXMLRPCServer
     import xmlrpc.client

     def today():
         today = datetime.datetime.today()
         return xmlrpc.client.DateTime(today)

     server = SimpleXMLRPCServer(("localhost", 8000))
     print("Listening on port 8000...")
     server.register_function(today, "today")
     server.serve_forever()

The client code for the preceding server:

     import xmlrpc.client
     import datetime

     proxy = xmlrpc.client.ServerProxy("http://localhost:8000/")

     today = proxy.today()
     # convert the ISO8601 string to a datetime object
     converted = datetime.datetime.strptime(today.value, "%Y%m%dT%H:%M:%S")
     print("Today: %s" % converted.strftime("%d.%m.%Y, %H:%M"))


File: python.info,  Node: Objetos Binários,  Next: Objetos Fault,  Prev: Objetos DateTime,  Up: xmlrpc client — Cliente XML-RPC

5.22.21.3 Objetos Binários
..........................

 -- Classe: xmlrpc.client.Binary

     This class may be initialized from bytes data (which may include
     NULs).  The primary access to the content of a *note Binary: 3e3a.
     object is provided by an attribute:

      -- Atributo: data

          The binary data encapsulated by the *note Binary: 3e3a.
          instance.  The data is provided as a *note bytes: 1c2. object.

     *note Binary: 3e3a. objects have the following methods, supported
     mainly for internal use by the marshalling/unmarshalling code:

      -- Método: decode (bytes)

          Accept a base64 *note bytes: 1c2. object and decode it as the
          instance’s new data.

      -- Método: encode (out)

          Write the XML-RPC base 64 encoding of this binary item to the
          'out' stream object.

          The encoded data will have newlines every 76 characters as per
          RFC 2045 section 6.8(1), which was the de facto standard
          base64 specification when the XML-RPC spec was written.

     It also supports certain of Python’s built-in operators through
     *note __eq__(): b0d. and *note __ne__(): 1560. methods.

Example usage of the binary objects.  We’re going to transfer an image
over XMLRPC:

     from xmlrpc.server import SimpleXMLRPCServer
     import xmlrpc.client

     def python_logo():
         with open("python_logo.jpg", "rb") as handle:
             return xmlrpc.client.Binary(handle.read())

     server = SimpleXMLRPCServer(("localhost", 8000))
     print("Listening on port 8000...")
     server.register_function(python_logo, 'python_logo')

     server.serve_forever()

The client gets the image and saves it to a file:

     import xmlrpc.client

     proxy = xmlrpc.client.ServerProxy("http://localhost:8000/")
     with open("fetched_python_logo.jpg", "wb") as handle:
         handle.write(proxy.python_logo().data)

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2045.html#section-6.8


File: python.info,  Node: Objetos Fault,  Next: Objetos ProtocolError,  Prev: Objetos Binários,  Up: xmlrpc client — Cliente XML-RPC

5.22.21.4 Objetos Fault
.......................

 -- Classe: xmlrpc.client.Fault

     A *note Fault: 3e3b. object encapsulates the content of an XML-RPC
     fault tag.  Fault objects have the following attributes:

      -- Atributo: faultCode

          An int indicating the fault type.

      -- Atributo: faultString

          A string containing a diagnostic message associated with the
          fault.

In the following example we’re going to intentionally cause a *note
Fault: 3e3b. by returning a complex type object.  The server code:

     from xmlrpc.server import SimpleXMLRPCServer

     # A marshalling error is going to occur because we're returning a
     # complex number
     def add(x, y):
         return x+y+0j

     server = SimpleXMLRPCServer(("localhost", 8000))
     print("Listening on port 8000...")
     server.register_function(add, 'add')

     server.serve_forever()

The client code for the preceding server:

     import xmlrpc.client

     proxy = xmlrpc.client.ServerProxy("http://localhost:8000/")
     try:
         proxy.add(2, 5)
     except xmlrpc.client.Fault as err:
         print("A fault occurred")
         print("Fault code: %d" % err.faultCode)
         print("Fault string: %s" % err.faultString)


File: python.info,  Node: Objetos ProtocolError,  Next: Objetos MultiCall,  Prev: Objetos Fault,  Up: xmlrpc client — Cliente XML-RPC

5.22.21.5 Objetos ProtocolError
...............................

 -- Classe: xmlrpc.client.ProtocolError

     A *note ProtocolError: 3e3c. object describes a protocol error in
     the underlying transport layer (such as a 404 ‘not found’ error if
     the server named by the URI does not exist).  It has the following
     attributes:

      -- Atributo: url

          The URI or URL that triggered the error.

      -- Atributo: errcode

          O código do erro.

      -- Atributo: errmsg

          The error message or diagnostic string.

      -- Atributo: headers

          A dict containing the headers of the HTTP/HTTPS request that
          triggered the error.

In the following example we’re going to intentionally cause a *note
ProtocolError: 3e3c. by providing an invalid URI:

     import xmlrpc.client

     # create a ServerProxy with a URI that doesn't respond to XMLRPC requests
     proxy = xmlrpc.client.ServerProxy("http://google.com/")

     try:
         proxy.some_method()
     except xmlrpc.client.ProtocolError as err:
         print("A protocol error occurred")
         print("URL: %s" % err.url)
         print("HTTP/HTTPS headers: %s" % err.headers)
         print("Error code: %d" % err.errcode)
         print("Error message: %s" % err.errmsg)


File: python.info,  Node: Objetos MultiCall,  Next: Convenience Functions,  Prev: Objetos ProtocolError,  Up: xmlrpc client — Cliente XML-RPC

5.22.21.6 Objetos MultiCall
...........................

The *note MultiCall: 3e56. object provides a way to encapsulate multiple
calls to a remote server into a single request (1).

 -- Classe: xmlrpc.client.MultiCall (server)

     Create an object used to boxcar method calls.  'server' is the
     eventual target of the call.  Calls can be made to the result
     object, but they will immediately return ‘None’, and only store the
     call name and parameters in the *note MultiCall: 3e56. object.
     Calling the object itself causes all stored calls to be transmitted
     as a single ‘system.multicall’ request.  The result of this call is
     a *note generator: 109a.; iterating over this generator yields the
     individual results.

A usage example of this class follows.  The server code:

     from xmlrpc.server import SimpleXMLRPCServer

     def add(x, y):
         return x + y

     def subtract(x, y):
         return x - y

     def multiply(x, y):
         return x * y

     def divide(x, y):
         return x // y

     # A simple server with simple arithmetic functions
     server = SimpleXMLRPCServer(("localhost", 8000))
     print("Listening on port 8000...")
     server.register_multicall_functions()
     server.register_function(add, 'add')
     server.register_function(subtract, 'subtract')
     server.register_function(multiply, 'multiply')
     server.register_function(divide, 'divide')
     server.serve_forever()

The client code for the preceding server:

     import xmlrpc.client

     proxy = xmlrpc.client.ServerProxy("http://localhost:8000/")
     multicall = xmlrpc.client.MultiCall(proxy)
     multicall.add(7, 3)
     multicall.subtract(7, 3)
     multicall.multiply(7, 3)
     multicall.divide(7, 3)
     result = multicall()

     print("7+3=%d, 7-3=%d, 7*3=%d, 7//3=%d" % tuple(result))

   ---------- Footnotes ----------

   (1) This approach has been first presented in a discussion on
xmlrpc.com
(https://web.archive.org/web/20060624230303/http://www.xmlrpc.com/discuss/msgReader$1208?mode=topic).


File: python.info,  Node: Convenience Functions,  Next: Exemplo de uso do cliente,  Prev: Objetos MultiCall,  Up: xmlrpc client — Cliente XML-RPC

5.22.21.7 Convenience Functions
...............................

 -- Função: xmlrpc.client.dumps (params, methodname=None,
          methodresponse=None, encoding=None, allow_none=False)

     Convert 'params' into an XML-RPC request, or into a response if
     'methodresponse' is true.  'params' can be either a tuple of
     arguments or an instance of the *note Fault: 3e3b. exception class.
     If 'methodresponse' is true, only a single value can be returned,
     meaning that 'params' must be of length 1.  'encoding', if
     supplied, is the encoding to use in the generated XML; the default
     is UTF-8.  Python’s *note None: 675. value cannot be used in
     standard XML-RPC; to allow using it via an extension, provide a
     true value for 'allow_none'.

 -- Função: xmlrpc.client.loads (data, use_datetime=False,
          use_builtin_types=False)

     Convert an XML-RPC request or response into Python objects, a
     ‘(params, methodname)’.  'params' is a tuple of argument;
     'methodname' is a string, or ‘None’ if no method name is present in
     the packet.  If the XML-RPC packet represents a fault condition,
     this function will raise a *note Fault: 3e3b. exception.  The
     'use_builtin_types' flag can be used to cause date/time values to
     be presented as *note datetime.datetime: 1cc. objects and binary
     data to be presented as *note bytes: 1c2. objects; this flag is
     false by default.

     The obsolete 'use_datetime' flag is similar to 'use_builtin_types'
     but it applies only to date/time values.

     Alterado na versão 3.3: O sinalizador 'use_builtin_types' foi
     adicionado.


File: python.info,  Node: Exemplo de uso do cliente,  Next: Example of Client and Server Usage,  Prev: Convenience Functions,  Up: xmlrpc client — Cliente XML-RPC

5.22.21.8 Exemplo de uso do cliente
...................................

     # simple test program (from the XML-RPC specification)
     from xmlrpc.client import ServerProxy, Error

     # server = ServerProxy("http://localhost:8000") # local server
     with ServerProxy("http://betty.userland.com") as proxy:

         print(proxy)

         try:
             print(proxy.examples.getStateName(41))
         except Error as v:
             print("ERROR", v)

To access an XML-RPC server through a HTTP proxy, you need to define a
custom transport.  The following example shows how:

     import http.client
     import xmlrpc.client

     class ProxiedTransport(xmlrpc.client.Transport):

         def set_proxy(self, host, port=None, headers=None):
             self.proxy = host, port
             self.proxy_headers = headers

         def make_connection(self, host):
             connection = http.client.HTTPConnection(*self.proxy)
             connection.set_tunnel(host, headers=self.proxy_headers)
             self._connection = host, connection
             return connection

     transport = ProxiedTransport()
     transport.set_proxy('proxy-server', 8080)
     server = xmlrpc.client.ServerProxy('http://betty.userland.com', transport=transport)
     print(server.examples.getStateName(41))


File: python.info,  Node: Example of Client and Server Usage,  Prev: Exemplo de uso do cliente,  Up: xmlrpc client — Cliente XML-RPC

5.22.21.9 Example of Client and Server Usage
............................................

Veja *note Exemplo de SimpleXMLRPCServer: 3e5c.


File: python.info,  Node: xmlrpc server — Servidores XML-RPC básicos,  Next: ipaddress — Biblioteca de manipulação de IPv4/IPv6,  Prev: xmlrpc client — Cliente XML-RPC,  Up: Protocolos de Internet e Suporte

5.22.22 ‘xmlrpc.server’ — Servidores XML-RPC básicos
----------------------------------------------------

'Código-fonte:' Lib/xmlrpc/server.py(1)

__________________________________________________________________

O módulo *note xmlrpc.server: 12f. fornece um framework básico de
servidor para servidores XML-RPC escritos em Python.  Os servidores
podem ser independentes, usando *note SimpleXMLRPCServer: 3e60, ou
incorporados em um ambiente CGI, usando *note CGIXMLRPCRequestHandler:
3e61.

     Aviso: O módulo *note xmlrpc.server: 12f. não é seguro contra dados
     criados com códigos maliciosos.  Se você precisar analisar dados
     não confiáveis ou não autenticados, consulte *note Segurança no
     XML: 3999.

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

 -- Classe: xmlrpc.server.SimpleXMLRPCServer (addr,
          requestHandler=SimpleXMLRPCRequestHandler, logRequests=True,
          allow_none=False, encoding=None, bind_and_activate=True,
          use_builtin_types=False)

     Cria uma nova instância do servidor.  Esta classe fornece métodos
     para registro de funções que podem ser chamadas pelo protocolo
     XML-RPC. O parâmetro 'requestHandler' deve ser uma fábrica para
     instâncias do tratador de solicitações; o padrão é *note
     SimpleXMLRPCRequestHandler: 136c.  Os parâmetros 'addr' e
     'requestHandler' são passados para o construtor *note
     socketserver.TCPServer: 1364.  Se 'logRequests' for true (o
     padrão), as solicitações serão registradas; definir esse parâmetro
     como false desativará os registros.  Os parâmetros 'allow_none' e
     'encoding' são transmitidos para *note xmlrpc.client: 12e. e
     controlam as respostas XML-RPC que serão retornadas do servidor.  O
     parâmetro 'bind_and_activate' controla se ‘server_bind()’ e
     ‘server_activate()’ são chamados imediatamente pelo construtor; o
     padrão é true.  A configuração como false permite que o código
     manipule a variável de classe 'allow_reuse_address' antes que o
     endereço seja vinculado.  O parâmetro 'use_builtin_types' é passado
     para a função *note loads(): 147c. e controla quais tipos são
     processados quando valores de data/hora ou dados binários são
     recebidos; o padrão é false.

     Alterado na versão 3.3: O sinalizador 'use_builtin_types' foi
     adicionado.

 -- Classe: xmlrpc.server.CGIXMLRPCRequestHandler (allow_none=False,
          encoding=None, use_builtin_types=False)

     Cria uma nova instância para manipular solicitações XML-RPC em um
     ambiente CGI. Os parâmetros 'allow_none' e 'encoding' são
     transmitidos para *note xmlrpc.client: 12e. e controlam as
     respostas XML-RPC que serão retornadas do servidor.  O parâmetro
     'use_builtin_types' é passado para a função *note loads(): 147c. e
     controla quais tipos são processados quando valores de data/hora ou
     dados binários são recebidos; o padrão é false.

     Alterado na versão 3.3: O sinalizador 'use_builtin_types' foi
     adicionado.

 -- Classe: xmlrpc.server.SimpleXMLRPCRequestHandler

     Cria uma nova instância do manipulador de solicitações.  Este
     manipulador de solicitação possui suporte a solicitações ‘POST’ e
     modifica o registro para que o parâmetro 'logRequests' para o
     construtor de *note SimpleXMLRPCServer: 3e60. seja respeitado.

* Menu:

* Objetos de SimpleXMLRPCServer::
* CGIXMLRPCRequestHandler::
* Documentando servidor XMLRPC::
* Objetos de DocXMLRPCServer::
* DocCGIXMLRPCRequestHandler::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/xmlrpc/server.py


File: python.info,  Node: Objetos de SimpleXMLRPCServer,  Next: CGIXMLRPCRequestHandler,  Up: xmlrpc server — Servidores XML-RPC básicos

5.22.22.1 Objetos de SimpleXMLRPCServer
.......................................

A classe *note SimpleXMLRPCServer: 3e60. é baseada em *note
socketserver.TCPServer: 1364. e fornece um meio de criar servidores
XML-RPC simples e independentes.

 -- Método: SimpleXMLRPCServer.register_function (function=None,
          name=None)

     Registra uma função que possa responder às solicitações XML-RPC. Se
     'name' for fornecido, será o nome do método associado a 'function',
     caso contrário, *note function.__name__: 1317. será usado.  'name'
     é uma string e pode conter caracteres ilegais para identificadores
     Python, incluindo o caractere de ponto.

     Este método também pode ser usado como um decorador.  Quando usado
     como decorador, 'name' só pode ser fornecido como argumento nomeado
     para registrar 'function' em 'name'.  Se nenhum 'name' for
     fornecido, *note function.__name__: 1317. será usado.

     Alterado na versão 3.7: *note register_function(): 3e64. pode ser
     usado como um decorador.

 -- Método: SimpleXMLRPCServer.register_instance (instance,
          allow_dotted_names=False)

     Registra um objeto que é usado para expor nomes de métodos que não
     foram registrados usando *note register_function(): 3e64.  Se
     'instance' contiver um método ‘_dispatch()’, ele será chamado com o
     nome do método solicitado e os parâmetros da solicitação.  Sua API
     é ‘def _dispatch(self, method, params)’ (observe que 'params' não
     representa uma lista de argumentos variáveis).  Se ele chama uma
     função subjacente para executar sua tarefa, essa função é chamada
     como ‘func(*params)’, expandindo a lista de parâmetros.  O valor de
     retorno de ‘_dispatch()’ é retornado ao cliente como resultado.  Se
     'instance' não possui o método ‘_dispatch()’, é procurado por um
     atributo correspondente ao nome do método solicitado.

     Se o argumento opcional 'allow_dotted_names' for true e a instância
     não tiver o método ‘_dispatch()’, e se o nome do método solicitado
     contiver pontos, cada componente do nome do método será pesquisado
     individualmente, com o efeito de que um simples pesquisa
     hierárquica é realizada.  O valor encontrado nessa pesquisa é
     chamado com os parâmetros da solicitação e o valor retornado é
     passado de volta ao cliente.

          Aviso: A ativação da opção 'allow_dotted_names' permite que os
          invasores acessem as variáveis globais do seu módulo e podem
          permitir que os invasores executem códigos arbitrários em sua
          máquina.  Use esta opção apenas em uma rede fechada e segura.

 -- Método: SimpleXMLRPCServer.register_introspection_functions ()

     Registra as funções de introspecção XML-RPC ‘system.listMethods’,
     ‘system.methodHelp’ e ‘system.methodSignature’.

 -- Método: SimpleXMLRPCServer.register_multicall_functions ()

     Registra a função de multichamada XML-RPC system.multicall.

 -- Atributo: SimpleXMLRPCRequestHandler.rpc_paths

     Um valor de atributo que deve ser uma tupla listando partes do
     caminho válidas da URL para receber solicitações XML-RPC.
     Solicitações postadas em outros caminhos resultarão em um erro HTTP
     404 “página inexistente”.  Se esta tupla estiver vazia, todos os
     caminhos serão considerados válidos.  O valor padrão é ‘('/',
     '/RPC2')’.

* Menu:

* Exemplo de SimpleXMLRPCServer::


File: python.info,  Node: Exemplo de SimpleXMLRPCServer,  Up: Objetos de SimpleXMLRPCServer

5.22.22.2 Exemplo de SimpleXMLRPCServer
.......................................

Código do servidor:

     from xmlrpc.server import SimpleXMLRPCServer
     from xmlrpc.server import SimpleXMLRPCRequestHandler

     # Restringe a um caminho em particular.
     class RequestHandler(SimpleXMLRPCRequestHandler):
         rpc_paths = ('/RPC2',)

     # Cria o servidor
     with SimpleXMLRPCServer(('localhost', 8000),
                             requestHandler=RequestHandler) as server:
         server.register_introspection_functions()

         # Registra uma função pow(); isso vai usar o valor de
         # pow.__name__ como o nome, que é apenas 'pow'.
         server.register_function(pow)

         # Registra uma função sob um nome diferente
         def adder_function(x, y):
             return x + y
         server.register_function(adder_function, 'add')

         # Registra uma instância; todos os métodos da instância
         # são publicados como métodos XML-RPC (neste caso,
         # apenas 'mul').
         class MyFuncs:
             def mul(self, x, y):
                 return x * y

         server.register_instance(MyFuncs())

         # Executa o laço principal do servidor
         server.serve_forever()

O código do cliente a seguir chamará os métodos disponibilizados pelo
servidor anterior:

     import xmlrpc.client

     s = xmlrpc.client.ServerProxy('http://localhost:8000')
     print(s.pow(2,3))  # Returns 2**3 = 8
     print(s.add(2,3))  # Returns 5
     print(s.mul(5,2))  # Returns 5*2 = 10

     # Exibe uma lista dos métodos disponíveis
     print(s.system.listMethods())

‘register_function()’ também pode ser usado como um decorador.  O
exemplo anterior do servidor pode registrar funções com um decorador:

     from xmlrpc.server import SimpleXMLRPCServer
     from xmlrpc.server import SimpleXMLRPCRequestHandler

     class RequestHandler(SimpleXMLRPCRequestHandler):
         rpc_paths = ('/RPC2',)

     with SimpleXMLRPCServer(('localhost', 8000),
                             requestHandler=RequestHandler) as server:
         server.register_introspection_functions()

         # Registra a função pow(); isso vai usar o valor de
         # pow.__name__ como o nome, que é apenas 'pow'.
         server.register_function(pow)

         # Registra uma função sob um nome diferente, usando
         # register_function como um decorador. *name* só pode
         # ser dado como um argumento nomeado.
         @server.register_function(name='add')
         def adder_function(x, y):
             return x + y

         # Registra uma função sob function.__name__.
         @server.register_function
         def mul(x, y):
             return x * y

         server.serve_forever()

O exemplo a seguir, incluído no módulo ‘Lib/xmlrpc/server.py’, mostra um
servidor que permite nomes com pontos e registra uma função de várias
chamadas.

     Aviso: A ativação da opção 'allow_dotted_names' permite que os
     invasores acessem as variáveis globais do seu módulo e podem
     permitir que os invasores executem códigos arbitrários em sua
     máquina.  Use este exemplo apenas em uma rede fechada e segura.

     import datetime

     class ExampleService:
         def getData(self):
             return '42'

         class currentTime:
             @staticmethod
             def getCurrentTime():
                 return datetime.datetime.now()

     with SimpleXMLRPCServer(("localhost", 8000)) as server:
         server.register_function(pow)
         server.register_function(lambda x,y: x+y, 'add')
         server.register_instance(ExampleService(), allow_dotted_names=True)
         server.register_multicall_functions()
         print('Serving XML-RPC on localhost port 8000')
         try:
             server.serve_forever()
         except KeyboardInterrupt:
             print("\nKeyboard interrupt received, exiting.")
             sys.exit(0)

Esta demonstração ExampleService pode ser chamada na linha de comando:

     python -m xmlrpc.server

O cliente que interage com o servidor acima está incluído em
‘Lib/xmlrpc/client.py’:

     server = ServerProxy("http://localhost:8000")

     try:
         print(server.currentTime.getCurrentTime())
     except Error as v:
         print("ERROR", v)

     multi = MultiCall(server)
     multi.getData()
     multi.pow(2,9)
     multi.add(1,2)
     try:
         for response in multi():
             print(response)
     except Error as v:
         print("ERROR", v)

Este cliente que interage com o servidor XMLRPC de demonstração pode ser
chamado como:

     python -m xmlrpc.client


File: python.info,  Node: CGIXMLRPCRequestHandler,  Next: Documentando servidor XMLRPC,  Prev: Objetos de SimpleXMLRPCServer,  Up: xmlrpc server — Servidores XML-RPC básicos

5.22.22.3 CGIXMLRPCRequestHandler
.................................

A classe *note CGIXMLRPCRequestHandler: 3e61. pode ser usada para
manipular solicitações XML-RPC enviadas para scripts CGI Python.

 -- Método: CGIXMLRPCRequestHandler.register_function (function=None,
          name=None)

     Registra uma função que possa responder às solicitações XML-RPC. Se
     'name' for fornecido, será o nome do método associado a 'function',
     caso contrário, *note function.__name__: 1317. será usado.  'name'
     é uma string e pode conter caracteres ilegais para identificadores
     Python, incluindo o caractere de ponto.

     Este método também pode ser usado como um decorador.  Quando usado
     como decorador, 'name' só pode ser fornecido como argumento nomeado
     para registrar 'function' em 'name'.  Se nenhum 'name' for
     fornecido, *note function.__name__: 1317. será usado.

     Alterado na versão 3.7: *note register_function(): 3e6b. pode ser
     usado como um decorador.

 -- Método: CGIXMLRPCRequestHandler.register_instance (instance)

     Registra um objeto que é usado para expor nomes de métodos que não
     foram registrados usando *note register_function(): 3e6b.  Se a
     instância contiver um método ‘_dispatch()’, ela será chamada com o
     nome do método solicitado e os parâmetros da solicitação; o valor
     retornado é retornado ao cliente como resultado.  Se a instância
     não tiver um método ‘_dispatch()’, será procurado um atributo
     correspondente ao nome do método solicitado; se o nome do método
     solicitado contiver pontos, cada componente do nome do método será
     pesquisado individualmente, com o efeito de que uma pesquisa
     hierárquica simples é executada.  O valor encontrado nessa pesquisa
     é chamado com os parâmetros da solicitação e o valor retornado é
     passado de volta ao cliente.

 -- Método: CGIXMLRPCRequestHandler.register_introspection_functions ()

     Registra as funções de introspecção XML-RPC ‘system.listMethods’,
     ‘system.methodHelp’ e ‘system.methodSignature’.

 -- Método: CGIXMLRPCRequestHandler.register_multicall_functions ()

     Registra a função de multichamada XML-RPC ‘system.multicall’.

 -- Método: CGIXMLRPCRequestHandler.handle_request (request_text=None)

     Manipula uma solicitação XML-RPC. Se 'request_text' for fornecido,
     devem ser os dados POST fornecidos pelo servidor HTTP, caso
     contrário, o conteúdo do stdin será usado.

Exemplo:

     class MyFuncs:
         def mul(self, x, y):
             return x * y


     handler = CGIXMLRPCRequestHandler()
     handler.register_function(pow)
     handler.register_function(lambda x,y: x+y, 'add')
     handler.register_introspection_functions()
     handler.register_instance(MyFuncs())
     handler.handle_request()


File: python.info,  Node: Documentando servidor XMLRPC,  Next: Objetos de DocXMLRPCServer,  Prev: CGIXMLRPCRequestHandler,  Up: xmlrpc server — Servidores XML-RPC básicos

5.22.22.4 Documentando servidor XMLRPC
......................................

Essas classes estendem as classes acima para servir a documentação HTML
em resposta a solicitações HTTP GET. Os servidores podem ser
independentes, usando *note DocXMLRPCServer: 1b35. ou incorporados em um
ambiente CGI, usando *note DocCGIXMLRPCRequestHandler: 3e71.

 -- Classe: xmlrpc.server.DocXMLRPCServer (addr,
          requestHandler=DocXMLRPCRequestHandler, logRequests=True,
          allow_none=False, encoding=None, bind_and_activate=True,
          use_builtin_types=True)

     Cria uma nova instância do servidor.  Todos os parâmetros têm o
     mesmo significado que para *note SimpleXMLRPCServer: 3e60.;
     'requestHandler' assume como padrão *note DocXMLRPCRequestHandler:
     3e72.

     Alterado na versão 3.3: O sinalizador 'use_builtin_types' foi
     adicionado.

 -- Classe: xmlrpc.server.DocCGIXMLRPCRequestHandler

     Cria uma nova instância para manipular solicitações XML-RPC em um
     ambiente CGI.

 -- Classe: xmlrpc.server.DocXMLRPCRequestHandler

     Cria uma nova instância do manipulador de solicitações.  Este
     manipulador de solicitações possui suporte a solicitações POST de
     XML-RPC, documenta solicitações GET e modifica o registro para que
     o parâmetro 'logRequests' no parâmetro *note DocXMLRPCServer: 1b35.
     seja respeitado.


File: python.info,  Node: Objetos de DocXMLRPCServer,  Next: DocCGIXMLRPCRequestHandler,  Prev: Documentando servidor XMLRPC,  Up: xmlrpc server — Servidores XML-RPC básicos

5.22.22.5 Objetos de DocXMLRPCServer
....................................

A classe *note DocXMLRPCServer: 1b35. é derivada de *note
SimpleXMLRPCServer: 3e60. e fornece um meio de criar servidores XML-RPC
autodocumentados e independentes.  Solicitações HTTP POST são tratadas
como chamadas de método XML-RPC. As solicitações HTTP GET são tratadas
gerando documentação HTML no estilo pydoc.  Isso permite que um servidor
forneça sua própria documentação baseada na Web.

 -- Método: DocXMLRPCServer.set_server_title (server_title)

     Define o título usado na documentação HTML gerada.  Este título
     será usado dentro do elemento “title” do HTML.

 -- Método: DocXMLRPCServer.set_server_name (server_name)

     Define o nome usado na documentação HTML gerada.  Este nome
     aparecerá na parte superior da documentação gerada dentro de um
     elemento “h1”.

 -- Método: DocXMLRPCServer.set_server_documentation
          (server_documentation)

     Define a descrição usada na documentação HTML gerada.  Esta
     descrição aparecerá na documentação como um parágrafo, abaixo do
     nome do servidor.


File: python.info,  Node: DocCGIXMLRPCRequestHandler,  Prev: Objetos de DocXMLRPCServer,  Up: xmlrpc server — Servidores XML-RPC básicos

5.22.22.6 DocCGIXMLRPCRequestHandler
....................................

A classe *note DocCGIXMLRPCRequestHandler: 3e71. é derivada de *note
CGIXMLRPCRequestHandler: 3e61. e fornece um meio de criar scripts CGI
XML-RPC autodocumentados.  Solicitações HTTP POST são tratadas como
chamadas de método XML-RPC. As solicitações HTTP GET são tratadas
gerando documentação HTML no estilo pydoc.  Isso permite que um servidor
forneça sua própria documentação baseada na web.

 -- Método: DocCGIXMLRPCRequestHandler.set_server_title (server_title)

     Define o título usado na documentação HTML gerada.  Este título
     será usado dentro do elemento “title” do HTML.

 -- Método: DocCGIXMLRPCRequestHandler.set_server_name (server_name)

     Define o nome usado na documentação HTML gerada.  Este nome
     aparecerá na parte superior da documentação gerada dentro de um
     elemento “h1”.

 -- Método: DocCGIXMLRPCRequestHandler.set_server_documentation
          (server_documentation)

     Define a descrição usada na documentação HTML gerada.  Esta
     descrição aparecerá na documentação como um parágrafo, abaixo do
     nome do servidor.


File: python.info,  Node: ipaddress — Biblioteca de manipulação de IPv4/IPv6,  Prev: xmlrpc server — Servidores XML-RPC básicos,  Up: Protocolos de Internet e Suporte

5.22.23 ‘ipaddress’ — Biblioteca de manipulação de IPv4/IPv6
------------------------------------------------------------

'Código-fonte:' Lib/ipaddress.py(1)

__________________________________________________________________

*note ipaddress: 80. fornece recursos para criar, manipular e operar em
endereços e redes IPv4 e IPv6.

As funções e classes neste módulo facilitam o tratamento de várias
tarefas relacionadas a endereços IP, incluindo verificar se dois hosts
estão ou não na mesma sub-rede, iterar sobre todos os hosts em uma
sub-rede específica, verificar se uma string representa ou não um valor
válido.  Endereço IP ou definição de rede e assim por diante.

Esta é a referência completa da API do módulo – para uma visão geral e
introdução, consulte *note Uma introdução ao módulo ipaddress: 3e7f.

Adicionado na versão 3.3.

* Menu:

* Funções de fábrica de conveniência::
* Endereços IP::
* Definições de rede IP::
* Objetos de interface::
* Outras funções de nível de módulo::
* Exceções personalizadas::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/ipaddress.py


File: python.info,  Node: Funções de fábrica de conveniência,  Next: Endereços IP,  Up: ipaddress — Biblioteca de manipulação de IPv4/IPv6

5.22.23.1 Funções de fábrica de conveniência
............................................

O módulo *note ipaddress: 80. fornece funções de fábrica para criar
endereços IP, redes e interfaces de forma conveniente:

 -- Função: ipaddress.ip_address (address)

     Retorna um objeto *note IPv4Address: 1fc. ou *note IPv6Address:
     1fd. dependendo do endereço IP passado como argumento.  Podem ser
     fornecidos endereços IPv4 ou IPv6; números inteiros menores que
     ‘2**32’ serão considerados IPv4 por padrão.  Uma exceção *note
     ValueError: 202. é levantada se 'address' não representar um
     endereço IPv4 ou IPv6 válido.

          >>> ipaddress.ip_address('192.168.0.1')
          IPv4Address('192.168.0.1')
          >>> ipaddress.ip_address('2001:db8::')
          IPv6Address('2001:db8::')

 -- Função: ipaddress.ip_network (address, strict=True)

     Retorna um objeto *note IPv4Network: 1fe. ou *note IPv6Network:
     1ff. dependendo do endereço IP passado como argumento.  'address' é
     uma string ou número inteiro que representa a rede IP. Podem ser
     fornecidas redes IPv4 ou IPv6; números inteiros menores que ‘2**32’
     serão considerados IPv4 por padrão.  'strict' é passado para o
     construtor *note IPv4Network: 1fe. ou *note IPv6Network: 1ff.  Uma
     exceção *note ValueError: 202. é levantada se 'address' não
     representar um endereço IPv4 ou IPv6 válido, ou se a rede tiver
     bits de host configurados.

          >>> ipaddress.ip_network('192.168.0.0/28')
          IPv4Network('192.168.0.0/28')

 -- Função: ipaddress.ip_interface (address)

     Retorna um objeto *note IPv4Interface: 1924. ou *note
     IPv6Interface: 1925. dependendo do endereço IP passado como
     argumento.  'address' é uma string ou um inteiro representando o
     endereço IP. Podem ser fornecidos endereços IPv4 ou IPv6; números
     inteiros menores que ‘2**32’ serão considerados IPv4 por padrão.
     Uma exceção *note ValueError: 202. é levantada se 'address' não
     representar um endereço IPv4 ou IPv6 válido.

Uma desvantagem dessas funções de conveniência é que a necessidade de
lidar com os formatos IPv4 e IPv6 significa que as mensagens de erro
fornecem informações mínimas sobre o erro exato, pois as funções não
sabem se o formato IPv4 ou IPv6 foi pretendido.  Relatórios de erros
mais detalhados podem ser obtidos chamando diretamente os construtores
de classe específicos da versão apropriada.


File: python.info,  Node: Endereços IP,  Next: Definições de rede IP,  Prev: Funções de fábrica de conveniência,  Up: ipaddress — Biblioteca de manipulação de IPv4/IPv6

5.22.23.2 Endereços IP
......................

* Menu:

* Objetos de endereço::
* Conversão para strings e inteiros::
* Operadores: Operadores<3>.


File: python.info,  Node: Objetos de endereço,  Next: Conversão para strings e inteiros,  Up: Endereços IP

5.22.23.3 Objetos de endereço
.............................

Os objetos *note IPv4Address: 1fc. e *note IPv6Address: 1fd.
compartilham muitos atributos comuns.  Alguns atributos que são
significativos apenas para endereços IPv6 também são implementados por
objetos *note IPv4Address: 1fc, para facilitar a escrita de código que
lide corretamente com ambas as versões de IP. Os objetos de endereço são
*note hasheáveis: 610, portanto podem ser usados como chaves em
dicionários.

 -- Classe: ipaddress.IPv4Address (address)

     Constrói um endereço IPv4.  Uma exceção *note AddressValueError:
     3e86. é levantada se 'address' não for um endereço IPv4 válido.

     O seguinte constitui um endereço IPv4 válido:

       1. Uma string em notação decimal por ponto, consistindo de quatro
          inteiros decimais em um intervalo inclusivo 0–255 separado por
          pontos (e.g.  ‘192.168.0.1’).  Cada inteiro representa um
          octeto (byte) no endereço.  Zeros à esquerda não são tolerados
          para evitar confusão com notação octal.

       2. Um inteiro que cabe em 32 bits.

       3. Um inteiro compactado em um objeto *note bytes: 1c2. de
          comprimento 4 (octeto mais significativo primeiro).

          >>> ipaddress.IPv4Address('192.168.0.1')
          IPv4Address('192.168.0.1')
          >>> ipaddress.IPv4Address(3232235521)
          IPv4Address('192.168.0.1')
          >>> ipaddress.IPv4Address(b'\xC0\xA8\x00\x01')
          IPv4Address('192.168.0.1')

     Alterado na versão 3.8: Zeros à esquerda são tolerados, mesmo em
     casos ambíguos que se parecem com notação octal.

     Alterado na versão 3.9.5: Zeros à esquerda não são mais tolerados e
     são tratados como um erro.  As strings de endereço IPv4 agora são
     analisadas de forma tão estrita quanto glibc *note inet_pton():
     969.

      -- Atributo: version

          O número de versão apropriado: ‘4’ para IPv4, ‘6’ para IPv6.

      -- Atributo: max_prefixlen

          O número total de bits na representação de endereço para esta
          versão: ‘32’ para IPv4, ‘128’ para IPv6.

          O prefixo define o número de bits iniciais em um endereço que
          são comparados para determinar se um endereço faz ou não parte
          de uma rede.

      -- Atributo: compressed

      -- Atributo: exploded

          A representação de string em notação decimal pontilhada.
          Zeros à esquerda nunca são incluídos na representação.

          Como o IPv4 não define uma notação abreviada para endereços
          com octetos definidos como zero, esses dois atributos são
          sempre iguais a ‘str(addr)’ para endereços IPv4.  A exposição
          desses atributos facilita a gravação de código de exibição que
          pode tratar endereços IPv4 e IPv6.

      -- Atributo: packed

          A representação binária deste endereço – um objeto *note
          bytes: 1c2. de comprimento apropriado (primeiro o octeto mais
          significativo).  São 4 bytes para IPv4 e 16 bytes para IPv6.

      -- Atributo: reverse_pointer

          O nome do registro PTR de DNS reverso para o endereço IP, por
          exemplo:

               >>> ipaddress.ip_address("127.0.0.1").reverse_pointer
               '1.0.0.127.in-addr.arpa'
               >>> ipaddress.ip_address("2001:db8::1").reverse_pointer
               '1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.b.d.0.1.0.0.2.ip6.arpa'

          Este é o nome que pode ser usado para realizar uma pesquisa
          PTR, não o nome do host resolvido em si.

          Adicionado na versão 3.5.

      -- Atributo: is_multicast

          ‘True’ se o endereço estiver reservado para uso multicast.
          Consulte RFC 3171(1) (para IPv4) ou RFC 2373(2) (para IPv6).

      -- Atributo: is_private

          ‘True’ se o endereço for definido como não acessível
          globalmente por iana-ipv4-special-registry(3) (para IPv4) ou
          iana-ipv6-special-registry(4) (para IPv6) com as seguintes
          exceções:

             * ‘is_private’ é ‘False’ para o espaço de endereço
               compartilhado (‘100.64.0.0/10’)

             * Para endereços IPv6 mapeados em IPv4, o valor
               ‘is_private’ é determinado pela semântica dos endereços
               IPv4 subjacentes e a seguinte condição é válida (consulte
               *note IPv6Address.ipv4_mapped: 3e8d.):

                    address.is_private == address.ipv4_mapped.is_private

          ‘is_private’ tem valor oposto a *note is_global: f93, exceto
          para o espaço de endereço compartilhado (intervalo
          ‘100.64.0.0/10’) onde ambos são ‘False’.

          Alterado na versão 3.13: Corrigidos alguns falsos positivos e
          falsos negativos.

             * ‘192.0.0.0/24’ é considerado privado com exceção de
               ‘192.0.0.9/32’ e ‘192.0.0.10/32’ (anteriormente: apenas o
               sub-intervalo ‘192.0.0.0/29’ foi considerado privado).

             * ‘64:ff9b:1::/48’ é considerado privado.

             * ‘2002::/16’ é considerado privado.

             * Existem exceções em ‘2001::/23’ (de outra forma
               considerado privado): ‘2001:1::1/128’, ‘2001:1::2/128’,
               ‘2001:3::/32’, ‘2001:4:112::/48’, ‘2001:20::/28’,
               ‘2001:30::/28’.  As exceções não são consideradas
               privadas.

      -- Atributo: is_global

          ‘True’ se o endereço for definido como não acessível
          globalmente por iana-ipv4-special-registry(5) (para IPv4) ou
          iana-ipv6-special-registry(6) (para IPv6) com a seguinte
          exceção:

          Para endereços IPv6 mapeados em IPv4, o valor ‘is_private’ é
          determinado pela semântica dos endereços IPv4 subjacentes e a
          seguinte condição é válida (consulte *note
          IPv6Address.ipv4_mapped: 3e8d.):

               address.is_global == address.ipv4_mapped.is_global

          ‘is_global’ tem valor oposto a *note is_private: 173a, exceto
          para o espaço de endereço compartilhado (intervalo
          ‘100.64.0.0/10’) onde ambos são ‘False’.

          Adicionado na versão 3.4.

          Alterado na versão 3.13: Corrigidos alguns falsos positivos e
          falsos negativos, veja *note is_private: 173a. para detalhes.

      -- Atributo: is_unspecified

          ‘True’ se o endereço não estiver especificado.  Consulte RFC
          5735(7) (para IPv4) ou RFC 2373(8) (para IPv6).

      -- Atributo: is_reserved

          ‘True’ se o endereço for indicado como reservado pela IETF.
          Para IPv4, este é apenas ‘240.0.0.0/4’, o bloco de endereços
          ‘Reserved’.  Para IPv6, este é todos os endereços alocados(9)
          como ‘Reserved by IETF’ para uso futuro.

               Nota: Para IPv4, ‘is_reserved’ não está relacionado ao
               valor do bloco de endereço da coluna
               ‘Reserved-by-Protocol’ em iana-ipv4-special-registry(10).

               Cuidado: Para IPv6, ‘fec0::/10’ um antigo prefixo de
               endereço de escopo Site-Local está atualmente excluído
               dessa lista (veja *note is_site_local: 3e90. & RFC
               3879(11)).

      -- Atributo: is_loopback

          ‘True’ se este for um endereço de loopack.  Consulte RFC
          3330(12) (para IPv4) ou RFC 2373(13) (para IPv6).

      -- Atributo: is_link_local

          ‘True’ se o endereço está reservado para uso de link local.
          Veja: RFC 3927(14).

      -- Atributo: ipv6_mapped

          Objeto *note IPv4Address: 1fc. representando o endereço IPv6
          mapeado para IPv6.  Veja RFC 4291(15).

          Adicionado na versão 3.13.

 -- Método: IPv4Address.__format__ (fmt)

     Retorna a representação string do endereço de IP, controlado por
     uma string de formato explícito.  'fmt' pode ser um dos seguintes:
     ‘'s'’, a opção padrão, equivalente à *note str(): 44c, ‘'b'’ para
     uma string binária preenchida com zeros, ‘'X'’ ou ‘'x'’ para uma
     representação hexadecimal maiúscula ou minúscula, ou ‘'n'’, que
     equivale a ‘'b'’ para endereços IPv4 e ‘'x'’ para IPv6.  Para
     representações binárias e hexadecimais, o especificador de forma
     ‘'#'’ e a opção de agrupamento ‘'_'’ estão disponíveis.
     ‘__format__’ é utilizado por ‘format’, ‘str.format’ e f-strings.

          >>> format(ipaddress.IPv4Address('192.168.0.1'))
          '192.168.0.1'
          >>> '{:#b}'.format(ipaddress.IPv4Address('192.168.0.1'))
          '0b11000000101010000000000000000001'
          >>> f'{ipaddress.IPv6Address("2001:db8::1000"):s}'
          '2001:db8::1000'
          >>> format(ipaddress.IPv6Address('2001:db8::1000'), '_X')
          '2001_0DB8_0000_0000_0000_0000_0000_1000'
          >>> '{:#_n}'.format(ipaddress.IPv6Address('2001:db8::1000'))
          '0x2001_0db8_0000_0000_0000_0000_0000_1000'

     Adicionado na versão 3.9.

 -- Classe: ipaddress.IPv6Address (address)

     Constrói um endereço IPv6.  Uma exceção *note AddressValueError:
     3e86. é levantada se 'address' não for um endereço IPv6 válido.

     O seguinte constitui um endereço IPv6 válido:

       1. Uma string constituída de oito grupos de quatro dígitos
          hexadecimais, cada grupo representando 16 bits.  Os grupos são
          separados por dois pontos.  Isto descreve uma notação
          'explodida' (longa); A string também pode ser 'compactada'
          (notação curta) por vários meios.  Ver RFC 4291(16) para
          detalhes.  Por exemplo,
          ‘"0000:0000:0000:0000:0000:0abc:0007:0def"’ pode ser
          compactada para ‘"::abc:7:def"’.

          Opcionalmente, a string pode ter um ID de escopo de zona,
          expressado por um sufixo ‘%scope_id’.  Se presente, o ID de
          escopo deve ser não vazio, e pode não conter ‘%’.  Ver RFC
          4007(17) para detalhes.  Por exemplo, ‘fe80::1234%1’ pode
          identificar o endereço ‘fe80::1234’ no primeiro link do nó.

       2. Um inteiro que cabe em 128 bits.

       3. Um inteiro compactado em um objeto *note bytes: 1c2. de
          comprimento 16, big-endian.

          >>> ipaddress.IPv6Address('2001:db8::1000')
          IPv6Address('2001:db8::1000')
          >>> ipaddress.IPv6Address('ff02::5678%1')
          IPv6Address('ff02::5678%1')

      -- Atributo: compressed

     A forma curta da representação do endereço, com zeros à esquerda em
     grupos omitidos e a sequência mais longa de grupos consistida
     inteiramente por zeros colapsada em um grupo vazio único.

     Este também é o valor retornado por ‘str(addr)’ para endereços
     IPv6.

      -- Atributo: exploded

     A forma longa da representação do endereço, com todos zeros à
     esquerda em grupos consistindo inteiramente de zeros incluídos.

     Para os seguintes atributos e métodos, veja a documentação
     correspondente para a classe *note IPv4Address: 1fc.:

      -- Atributo: packed

      -- Atributo: reverse_pointer

      -- Atributo: version

      -- Atributo: max_prefixlen

      -- Atributo: is_multicast

      -- Atributo: is_private

      -- Atributo: is_global

          Adicionado na versão 3.4.

      -- Atributo: is_unspecified

      -- Atributo: is_reserved

      -- Atributo: is_loopback

      -- Atributo: is_link_local

      -- Atributo: is_site_local

          ‘True’ se o endereço estiver reservado para uso local do site.
          Observe que o espaço de endereço local do site foi
          descontinuado pelo RFC 3879(18).  Use *note is_private: 173a.
          para testar se este endereço está no espaço de endereços
          locais exclusivos conforme definido pelo RFC 4193(19).

      -- Atributo: ipv4_mapped

          Para endereços que parecem ser endereços mapeados IPv4
          (começando com ‘::FFFF/96’), esta propriedade reportará o
          endereço IPv4 incorporado.  Para qualquer outro endereço, esta
          propriedade será ‘None’.

      -- Atributo: scope_id

          Para endereços com escopo definido pelo RFC 4007(20), esta
          propriedade identifica a zona específica do escopo do endereço
          à qual o endereço pertence, como uma string.  Quando nenhuma
          zona de escopo for especificada, esta propriedade será ‘None’.

      -- Atributo: sixtofour

          Para endereços que parecem ser endereços 6to4 (começando com
          ‘2002::/16’), como definido pelo RFC 3056(21), esta
          propriedade reportará o endereço IPv4 incorporado.  Para
          qualquer outro endereço, esta propriedade será ‘None’.

      -- Atributo: teredo

          Para endereços que parecem ser endereços Teredo (começando com
          ‘2001::/32’), como definido pelo RFC 4380(22), esta
          propriedade reportará o par de endereços ‘(server, client)’
          incorporado.  Para qualquer outro endereço, esta propriedade
          será ‘None’.

 -- Método: IPv6Address.__format__ (fmt)

     Consulte a documentação do método correspondente em *note
     IPv4Address: 1fc.

     Adicionado na versão 3.9.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc3171.html

   (2) https://datatracker.ietf.org/doc/html/rfc2373.html

   (3) 
https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml

   (4) 
https://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-special-registry.xhtml

   (5) 
https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml

   (6) 
https://www.iana.org/assignments/iana-ipv6-special-registry/iana-ipv6-special-registry.xhtml

   (7) https://datatracker.ietf.org/doc/html/rfc5735.html

   (8) https://datatracker.ietf.org/doc/html/rfc2373.html

   (9) 
https://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml

   (10) 
https://www.iana.org/assignments/iana-ipv4-special-registry/iana-ipv4-special-registry.xhtml

   (11) https://datatracker.ietf.org/doc/html/rfc3879.html

   (12) https://datatracker.ietf.org/doc/html/rfc3330.html

   (13) https://datatracker.ietf.org/doc/html/rfc2373.html

   (14) https://datatracker.ietf.org/doc/html/rfc3927.html

   (15) https://datatracker.ietf.org/doc/html/rfc4291.html

   (16) https://datatracker.ietf.org/doc/html/rfc4291.html

   (17) https://datatracker.ietf.org/doc/html/rfc4007.html

   (18) https://datatracker.ietf.org/doc/html/rfc3879.html

   (19) https://datatracker.ietf.org/doc/html/rfc4193.html

   (20) https://datatracker.ietf.org/doc/html/rfc4007.html

   (21) https://datatracker.ietf.org/doc/html/rfc3056.html

   (22) https://datatracker.ietf.org/doc/html/rfc4380.html


File: python.info,  Node: Conversão para strings e inteiros,  Next: Operadores<3>,  Prev: Objetos de endereço,  Up: Endereços IP

5.22.23.4 Conversão para strings e inteiros
...........................................

Para interoperar com interfaces de rede, como o módulo de soquete, os
endereços devem ser convertidos em strings ou inteiros.  Isso é tratado
usando as funções internas *note str(): 44c. e *note int(): 257.:

     >>> str(ipaddress.IPv4Address('192.168.0.1'))
     '192.168.0.1'
     >>> int(ipaddress.IPv4Address('192.168.0.1'))
     3232235521
     >>> str(ipaddress.IPv6Address('::1'))
     '::1'
     >>> int(ipaddress.IPv6Address('::1'))
     1

Observe que os endereços com escopo IPv6 são convertidos em números
inteiros sem ID de zona de escopo.


File: python.info,  Node: Operadores<3>,  Prev: Conversão para strings e inteiros,  Up: Endereços IP

5.22.23.5 Operadores
....................

Os objetos de endereço têm suporte a alguns operadores.  Salvo indicação
em contrário, os operadores só podem ser aplicados entre objetos
compatíveis (ou seja, IPv4 com IPv4, IPv6 com IPv6).

* Menu:

* Operadores de comparação::
* Operadores aritméticos::


File: python.info,  Node: Operadores de comparação,  Next: Operadores aritméticos,  Up: Operadores<3>

5.22.23.6 Operadores de comparação
..................................

Os objetos de endereço podem ser comparados com o conjunto usual de
operadores de comparação.  Os mesmos endereços IPv6 com IDs de zona de
escopo diferentes não são iguais.  Alguns exemplos:

     >>> IPv4Address('127.0.0.2') > IPv4Address('127.0.0.1')
     True
     >>> IPv4Address('127.0.0.2') == IPv4Address('127.0.0.1')
     False
     >>> IPv4Address('127.0.0.2') != IPv4Address('127.0.0.1')
     True
     >>> IPv6Address('fe80::1234') == IPv6Address('fe80::1234%1')
     False
     >>> IPv6Address('fe80::1234%1') != IPv6Address('fe80::1234%2')
     True


File: python.info,  Node: Operadores aritméticos,  Prev: Operadores de comparação,  Up: Operadores<3>

5.22.23.7 Operadores aritméticos
................................

Inteiros podem ser adicionados ou subtraídos de objetos de endereço.
Alguns exemplos:

     >>> IPv4Address('127.0.0.2') + 3
     IPv4Address('127.0.0.5')
     >>> IPv4Address('127.0.0.2') - 3
     IPv4Address('126.255.255.255')
     >>> IPv4Address('255.255.255.255') + 1
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     ipaddress.AddressValueError: 4294967296 (>= 2**32) is not permitted as an IPv4 address


File: python.info,  Node: Definições de rede IP,  Next: Objetos de interface,  Prev: Endereços IP,  Up: ipaddress — Biblioteca de manipulação de IPv4/IPv6

5.22.23.8 Definições de rede IP
...............................

Os objetos *note IPv4Network: 1fe. e *note IPv6Network: 1ff. fornecem um
mecanismo para definir e inspecionar definições de rede IP. Uma
definição de rede consiste em uma 'máscara' e um 'endereço de rede' e,
como tal, define um intervalo de endereços IP que é igual ao endereço de
rede quando mascarado (E binário) com a máscara.  Por exemplo, uma
definição de rede com a máscara ‘255.255.255.0’ e o endereço de rede
‘192.168.1.0’ consiste em endereços IP no intervalo inclusivo
‘192.168.1.0’ a ‘192.168.1.255’.

* Menu:

* Prefixo, máscara de rede e máscara de host: Prefixo máscara de rede e máscara de host.
* Objetos de rede::
* Operadores: Operadores<4>.


File: python.info,  Node: Prefixo máscara de rede e máscara de host,  Next: Objetos de rede,  Up: Definições de rede IP

5.22.23.9 Prefixo, máscara de rede e máscara de host
....................................................

Existem várias maneiras equivalentes de especificar máscaras de rede IP.
Um 'prefixo' ‘/<nbits>’ é uma notação que denota quantos bits de ordem
superior estão definidos na máscara de rede.  Uma máscara de rede, ou
'netmask', é um endereço IP com um certo número de bits de alta ordem
definidos.  Assim o prefixo ‘/24’ é equivalente à máscara de rede
‘255.255.255.0’ em IPv4, ou ‘ffff:ff00::’ em IPv6.  Além disso, uma
máscara de host, ou 'host mask', é o inverso lógico de uma máscara de
rede e às vezes é usada (por exemplo, nas listas de controle de acesso
da Cisco) para denotar uma máscara de rede.  A máscara de host
equivalente a ‘/24’ em IPv4 é ‘0.0.0.255’.


File: python.info,  Node: Objetos de rede,  Next: Operadores<4>,  Prev: Prefixo máscara de rede e máscara de host,  Up: Definições de rede IP

5.22.23.10 Objetos de rede
..........................

Todos os atributos implementados por objetos de endereço também são
implementados por objetos de rede.  Além disso, os objetos de rede
implementam atributos adicionais.  Todos estes são comuns entre *note
IPv4Network: 1fe. e *note IPv6Network: 1ff, portanto, para evitar
duplicação, eles são documentados apenas para *note IPv4Network: 1fe.
Objetos de rede são *note hasheáveis: 610, portanto podem ser usados
como chaves em dicionários.

 -- Classe: ipaddress.IPv4Network (address, strict=True)

     Constrói uma definição de rede IPv4.  'address' pode ser um dos
     seguintes:

       1. Uma string que consiste em um endereço IP e uma máscara
          opcional, separados por uma barra (‘/’).  O endereço IP é o
          endereço de rede, e a máscara pode ser um único número, o que
          significa que é um 'prefixo', ou uma representação de string
          de um endereço IPv4.  Se for o último, a máscara será
          interpretada como uma 'máscara de rede' se começar com um
          campo diferente de zero, ou como uma 'máscara de host' se
          começar com um campo zero, com a única exceção de uma máscara
          totalmente zero que é tratada como uma 'máscara de rede'.  Se
          nenhuma máscara for fornecida, será considerada ‘/32’.

          Por exemplo, as seguintes especificações de 'address' são
          equivalentes: ‘192.168.1.0/24’, ‘192.168.1.0/255.255.255.0’ e
          ‘192.168.1.0/0.0.0.255’.

       2. Um número inteiro que cabe em 32 bits.  Isto é equivalente a
          uma rede de endereço único, com o endereço de rede sendo
          'address' e a máscara sendo ‘/32’.

       3. Um inteiro compactado em um objeto *note bytes: 1c2. de
          comprimento 4, big-endian.  A interpretação é semelhante a um
          'address' no formato inteiro.

       4. Uma tupla de dois elementos de uma descrição de endereço e uma
          máscara de rede, onde a descrição do endereço é uma string, um
          número inteiro de 32 bits, um número inteiro compactado de 4
          bytes ou um objeto IPv4Address existente; e a máscara de rede
          é um número inteiro que representa o comprimento do prefixo
          (por exemplo, ‘24’) ou uma string que representa a máscara do
          prefixo (por exemplo, ‘255.255.255.0’).

     Uma exceção *note AddressValueError: 3e86. é levantada se 'address'
     não for um endereço IPv4 válido.  Uma exceção *note
     NetmaskValueError: 3ea7. é levantada se a máscara não for válida
     para um endereço IPv4.

     Se 'strict' for ‘True’ e os bits do host estiverem definidos no
     endereço fornecido, então *note ValueError: 202. será levantada.
     Caso contrário, os bits do host serão mascarados para determinar o
     endereço de rede apropriado.

     Salvo indicação em contrário, todos os métodos de rede que aceitam
     outros objetos rede/endereço irão levantar *note TypeError: 2c3. se
     a versão IP do argumento for incompatível com ‘self’.

     Alterado na versão 3.5: Adicionado o formulário de tupla de 2
     elementos para o parâmetro do construtor 'address'.

      -- Atributo: version

      -- Atributo: max_prefixlen

          Consulte a documentação do atributo correspondente em *note
          IPv4Address: 1fc.

      -- Atributo: is_multicast

      -- Atributo: is_private

      -- Atributo: is_unspecified

      -- Atributo: is_reserved

      -- Atributo: is_loopback

      -- Atributo: is_link_local

          Esses atributos terão valor verdadeiro para a rede como um
          todo se forem verdadeiros tanto para o endereço de rede quanto
          para o endereço de broadcast.

      -- Atributo: network_address

          O endereço de rede da rede.  O endereço de rede e o
          comprimento do prefixo juntos definem exclusivamente uma rede.

      -- Atributo: broadcast_address

          O endereço de broadcast da rede.  Os pacotes enviados para o
          endereço de broadcast devem ser recebidos por todos os hosts
          da rede.

      -- Atributo: hostmask

          A máscara do host, como um objeto *note IPv4Address: 1fc.

      -- Atributo: netmask

          A máscara de rede, como um objeto *note IPv4Address: 1fc.

      -- Atributo: with_prefixlen

      -- Atributo: compressed

      -- Atributo: exploded

          Uma representação de string da rede, com a máscara em notação
          de prefixo.

          ‘with_prefixlen’ e ‘compressed’ são sempre iguais a
          ‘str(network)’.  ‘exploded’ usa a forma explodida do endereço
          de rede.

      -- Atributo: with_netmask

          Uma representação em string da rede, com a máscara na notação
          de máscara de rede.

      -- Atributo: with_hostmask

          Uma representação de string da rede, com a máscara na notação
          de máscara de host.

      -- Atributo: num_addresses

          O número total de endereços na rede.

      -- Atributo: prefixlen

          Comprimento do prefixo de rede, em bits.

      -- Método: hosts ()

          Retorna um iterador sobre os hosts utilizáveis na rede.  Os
          hosts utilizáveis são todos os endereços IP que pertencem à
          rede, exceto o próprio endereço de rede e o endereço de
          transmissão da rede.  Para redes com comprimento de máscara
          31, o endereço de rede e o endereço de transmissão de rede
          também são incluídos no resultado.  Redes com máscara 32
          retornarão uma lista contendo o endereço de host único.

               >>> list(ip_network('192.0.2.0/29').hosts())
               [IPv4Address('192.0.2.1'), IPv4Address('192.0.2.2'),
                IPv4Address('192.0.2.3'), IPv4Address('192.0.2.4'),
                IPv4Address('192.0.2.5'), IPv4Address('192.0.2.6')]
               >>> list(ip_network('192.0.2.0/31').hosts())
               [IPv4Address('192.0.2.0'), IPv4Address('192.0.2.1')]
               >>> list(ip_network('192.0.2.1/32').hosts())
               [IPv4Address('192.0.2.1')]

      -- Método: overlaps (other)

          ‘True’ se esta rede estiver parcial ou totalmente contida em
          'other' ou 'other' estiver totalmente contida nesta rede.

      -- Método: address_exclude (network)

          Calcula as definições de rede resultantes da remoção da
          'network' fornecida desta.  Retorna um iterador de objetos de
          rede.  Levanta *note ValueError: 202. se 'network' não estiver
          completamente contida nesta rede.

               >>> n1 = ip_network('192.0.2.0/28')
               >>> n2 = ip_network('192.0.2.1/32')
               >>> list(n1.address_exclude(n2))
               [IPv4Network('192.0.2.8/29'), IPv4Network('192.0.2.4/30'),
                IPv4Network('192.0.2.2/31'), IPv4Network('192.0.2.0/32')]

      -- Método: subnets (prefixlen_diff=1, new_prefix=None)

          As sub-redes que se unem para criar a definição de rede atual,
          dependendo dos valores dos argumentos.  'prefixlen_diff' é o
          valor pelo qual o comprimento do nosso prefixo deve ser
          aumentado.  'new_prefix' é o novo prefixo desejado das
          sub-redes; deve ser maior que nosso prefixo.  Um, e apenas um,
          de 'prefixlen_diff' e 'new_prefix' deve ser definido.  Retorna
          um iterador de objetos de rede.

               >>> list(ip_network('192.0.2.0/24').subnets())
               [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]
               >>> list(ip_network('192.0.2.0/24').subnets(prefixlen_diff=2))
               [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),
                IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]
               >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=26))
               [IPv4Network('192.0.2.0/26'), IPv4Network('192.0.2.64/26'),
                IPv4Network('192.0.2.128/26'), IPv4Network('192.0.2.192/26')]
               >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=23))
               Traceback (most recent call last):
                 File "<stdin>", line 1, in <module>
                   raise ValueError('new prefix must be longer')
               ValueError: new prefix must be longer
               >>> list(ip_network('192.0.2.0/24').subnets(new_prefix=25))
               [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/25')]

      -- Método: supernet (prefixlen_diff=1, new_prefix=None)

          As super-redes contendo esta definição de rede, dependendo dos
          valores dos argumentos.  'prefixlen_diff' é o valor pelo qual
          o comprimento do nosso prefixo deve ser diminuída.
          'new_prefix' é o novo prefixo desejado da super-rede; deve ser
          maior que nosso prefixo.  Um, e apenas um, de 'prefixlen_diff'
          e 'new_prefix' deve ser definido.  Retorna um único objeto
          rede.

               >>> ip_network('192.0.2.0/24').supernet()
               IPv4Network('192.0.2.0/23')
               >>> ip_network('192.0.2.0/24').supernet(prefixlen_diff=2)
               IPv4Network('192.0.0.0/22')
               >>> ip_network('192.0.2.0/24').supernet(new_prefix=20)
               IPv4Network('192.0.0.0/20')

      -- Método: subnet_of (other)

          Retorna ‘True’ se esta rede é uma sub-rede de 'other'.

               >>> a = ip_network('192.168.1.0/24')
               >>> b = ip_network('192.168.1.128/30')
               >>> b.subnet_of(a)
               True

          Adicionado na versão 3.7.

      -- Método: supernet_of (other)

          Retorna ‘True’ se esta rede é uma super-rede de 'other'.

               >>> a = ip_network('192.168.1.0/24')
               >>> b = ip_network('192.168.1.128/30')
               >>> a.supernet_of(b)
               True

          Adicionado na versão 3.7.

      -- Método: compare_networks (other)

          Compara esta rede com 'other'.  Nesta comparação são
          considerados apenas os endereços de rede; bits de host não
          são.  Retorna ‘-1’, ‘0’ ou ‘1’.

               >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.2/32'))
               -1
               >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.0/32'))
               1
               >>> ip_network('192.0.2.1/32').compare_networks(ip_network('192.0.2.1/32'))
               0

          Descontinuado desde a versão 3.7: Ele usa o mesmo algoritmo de
          ordenação e comparação que “<”, “==” e “>”

 -- Classe: ipaddress.IPv6Network (address, strict=True)

     Constrói uma definição de rede IPv6.  'address' pode ser um dos
     seguintes:

       1. Uma string que consiste em um endereço IP e um comprimento de
          prefixo opcional, separados por uma barra (‘/’).  O endereço
          IP é o endereço de rede e o comprimento do prefixo deve ser um
          único número, o 'prefixo'.  Se nenhum comprimento de prefixo
          for fornecido, será considerado ‘/128’.

          Observe que as máscaras de rede expandidas atualmente não são
          suportadas.  Isso significa que ‘2001:db00::0/24’ é um
          argumento válido enquanto ‘2001:db00::0/ffff:ff00::’ não é.

       2. Um número inteiro que cabe em 128 bits.  Isto é equivalente a
          uma rede de endereço único, com o endereço de rede sendo
          'address' e a máscara sendo ‘/128’.

       3. Um inteiro compactado em um objeto *note bytes: 1c2. de
          comprimento 16, big-endian.  A interpretação é semelhante a um
          'address' no formato inteiro.

       4. Uma tupla de dois elementos de uma descrição de endereço e uma
          máscara de rede, onde a descrição do endereço é uma string, um
          número inteiro de 128 bits, um número inteiro compactado de 16
          bytes ou um objeto IPv6Address existente; e a máscara de rede
          é um número inteiro que representa o comprimento do prefixo.

     Uma exceção *note AddressValueError: 3e86. é levantada se 'address'
     não for um endereço IPv6 válido.  Uma exceção *note
     NetmaskValueError: 3ea7. é levantada se a máscara não for válida
     para um endereço IPv6.

     Se 'strict' for ‘True’ e os bits do host estiverem definidos no
     endereço fornecido, então *note ValueError: 202. será levantada.
     Caso contrário, os bits do host serão mascarados para determinar o
     endereço de rede apropriado.

     Alterado na versão 3.5: Adicionado o formulário de tupla de 2
     elementos para o parâmetro do construtor 'address'.

      -- Atributo: version

      -- Atributo: max_prefixlen

      -- Atributo: is_multicast

      -- Atributo: is_private

      -- Atributo: is_unspecified

      -- Atributo: is_reserved

      -- Atributo: is_loopback

      -- Atributo: is_link_local

      -- Atributo: network_address

      -- Atributo: broadcast_address

      -- Atributo: hostmask

      -- Atributo: netmask

      -- Atributo: with_prefixlen

      -- Atributo: compressed

      -- Atributo: exploded

      -- Atributo: with_netmask

      -- Atributo: with_hostmask

      -- Atributo: num_addresses

      -- Atributo: prefixlen

      -- Método: hosts ()

          Retorna um iterador sobre os hosts utilizáveis na rede.  Os
          hosts utilizáveis são todos os endereços IP que pertencem à
          rede, exceto o próprio endereço de anycast do roteador da
          sub-rede.  Para redes com comprimento de máscara 127, o
          endereço anycast do roteador da sub-rede de rede é também
          incluído no resultado.  Redes com máscara 128 retornarão uma
          lista contendo o endereço de host único.

      -- Método: overlaps (other)

      -- Método: address_exclude (network)

      -- Método: subnets (prefixlen_diff=1, new_prefix=None)

      -- Método: supernet (prefixlen_diff=1, new_prefix=None)

      -- Método: subnet_of (other)

      -- Método: supernet_of (other)

      -- Método: compare_networks (other)

          Consulte a documentação do atributo correspondente em *note
          IPv4Network: 1fe.

      -- Atributo: is_site_local

          This atributo terá valor verdadeiro para a rede como um todo
          se for verdadeiro tanto para o endereço de rede quanto para o
          endereço de broadcast.


File: python.info,  Node: Operadores<4>,  Prev: Objetos de rede,  Up: Definições de rede IP

5.22.23.11 Operadores
.....................

Os objetos de rede têm suporte a alguns operadores.  Salvo indicação em
contrário, os operadores só podem ser aplicados entre objetos
compatíveis (ou seja, IPv4 com IPv4, IPv6 com IPv6).

* Menu:

* Operadores lógicos::
* Iteração::
* Redes como contêineres de endereços::


File: python.info,  Node: Operadores lógicos,  Next: Iteração,  Up: Operadores<4>

5.22.23.12 Operadores lógicos
.............................

Os objetos de rede podem ser comparados com o conjunto usual de
operadores lógicos.  Os objetos de rede são ordenados primeiro por
endereço de rede e depois por máscara de rede.


File: python.info,  Node: Iteração,  Next: Redes como contêineres de endereços,  Prev: Operadores lógicos,  Up: Operadores<4>

5.22.23.13 Iteração
...................

Os objetos de rede podem ser iterados para listar todos os endereços
pertencentes à rede.  Para iteração, 'todos' os hosts são retornados,
incluindo os hosts inutilizáveis (para hosts utilizáveis, use o método
*note hosts(): 15d1.).  Um exemplo:

     >>> for addr in IPv4Network('192.0.2.0/28'):
     ...     addr
     ...
     IPv4Address('192.0.2.0')
     IPv4Address('192.0.2.1')
     IPv4Address('192.0.2.2')
     IPv4Address('192.0.2.3')
     IPv4Address('192.0.2.4')
     IPv4Address('192.0.2.5')
     IPv4Address('192.0.2.6')
     IPv4Address('192.0.2.7')
     IPv4Address('192.0.2.8')
     IPv4Address('192.0.2.9')
     IPv4Address('192.0.2.10')
     IPv4Address('192.0.2.11')
     IPv4Address('192.0.2.12')
     IPv4Address('192.0.2.13')
     IPv4Address('192.0.2.14')
     IPv4Address('192.0.2.15')


File: python.info,  Node: Redes como contêineres de endereços,  Prev: Iteração,  Up: Operadores<4>

5.22.23.14 Redes como contêineres de endereços
..............................................

Os objetos de rede podem atuar como contêineres de endereços.  Alguns
exemplos:

     >>> IPv4Network('192.0.2.0/28')[0]
     IPv4Address('192.0.2.0')
     >>> IPv4Network('192.0.2.0/28')[15]
     IPv4Address('192.0.2.15')
     >>> IPv4Address('192.0.2.6') in IPv4Network('192.0.2.0/28')
     True
     >>> IPv4Address('192.0.3.6') in IPv4Network('192.0.2.0/28')
     False


File: python.info,  Node: Objetos de interface,  Next: Outras funções de nível de módulo,  Prev: Definições de rede IP,  Up: ipaddress — Biblioteca de manipulação de IPv4/IPv6

5.22.23.15 Objetos de interface
...............................

Os objetos de interface são *note hasheáveis: 610, portanto podem ser
usados como chaves em dicionários.

 -- Classe: ipaddress.IPv4Interface (address)

     Constrói uma interface IPv4.  O significado de 'address' é o mesmo
     do construtor de *note IPv4Network: 1fe, exceto que endereços de
     host arbitrários são sempre aceitos.

     *note IPv4Interface: 1924. é uma subclasse de *note IPv4Address:
     1fc, portanto herda todos os atributos dessa classe.  Além disso,
     os seguintes atributos estão disponíveis:

      -- Atributo: ip

          O endereço (*note IPv4Address: 1fc.) sem informações de rede.

               >>> interface = IPv4Interface('192.0.2.5/24')
               >>> interface.ip
               IPv4Address('192.0.2.5')

      -- Atributo: network

          A rede (*note IPv4Network: 1fe.) à qual esta interface
          pertence.

               >>> interface = IPv4Interface('192.0.2.5/24')
               >>> interface.network
               IPv4Network('192.0.2.0/24')

      -- Atributo: with_prefixlen

          Uma representação de string da interface com a máscara em
          notação de prefixo.

               >>> interface = IPv4Interface('192.0.2.5/24')
               >>> interface.with_prefixlen
               '192.0.2.5/24'

      -- Atributo: with_netmask

          Uma representação de string da interface com a rede como uma
          máscara de rede.

               >>> interface = IPv4Interface('192.0.2.5/24')
               >>> interface.with_netmask
               '192.0.2.5/255.255.255.0'

      -- Atributo: with_hostmask

          Uma representação de string da interface com a rede como uma
          máscara de host.

               >>> interface = IPv4Interface('192.0.2.5/24')
               >>> interface.with_hostmask
               '192.0.2.5/0.0.0.255'

 -- Classe: ipaddress.IPv6Interface (address)

     Constrói uma interface IPv6.  O significado de 'address' é o mesmo
     do construtor de *note IPv6Network: 1ff, exceto que endereços de
     host arbitrários são sempre aceitos.

     *note IPv6Interface: 1925. é uma subclasse de *note IPv6Address:
     1fd, portanto herda todos os atributos dessa classe.  Além disso,
     os seguintes atributos estão disponíveis:

      -- Atributo: ip

      -- Atributo: network

      -- Atributo: with_prefixlen

      -- Atributo: with_netmask

      -- Atributo: with_hostmask

          Consulte a documentação do atributo correspondente em *note
          IPv4Interface: 1924.

* Menu:

* Operadores: Operadores<5>.


File: python.info,  Node: Operadores<5>,  Up: Objetos de interface

5.22.23.16 Operadores
.....................

Os objetos de interface têm suporte a alguns operadores.  Salvo
indicação em contrário, os operadores só podem ser aplicados entre
objetos compatíveis (ou seja, IPv4 com IPv4, IPv6 com IPv6).

* Menu:

* Operadores lógicos: Operadores lógicos<2>.


File: python.info,  Node: Operadores lógicos<2>,  Up: Operadores<5>

5.22.23.17 Operadores lógicos
.............................

Os objetos de interface podem ser comparados com o conjunto usual de
operadores lógicos.

Para comparação de igualdade (‘==’ e ‘!=’), tanto o endereço IP quanto a
rede devem ser iguais para que os objetos sejam iguais.  Uma interface
não será igual a nenhum endereço ou objeto de rede.

Para ordenação (‘<’, ‘>’, etc) as regras são diferentes.  Objetos de
interface e de endereço com a mesma versão IP podem ser comparados e os
objetos de endereço sempre serão ordenados antes dos objetos de
interface.  Dois objetos de interface são primeiro comparados por suas
redes e, se forem iguais, então por seus endereços IP.


File: python.info,  Node: Outras funções de nível de módulo,  Next: Exceções personalizadas,  Prev: Objetos de interface,  Up: ipaddress — Biblioteca de manipulação de IPv4/IPv6

5.22.23.18 Outras funções de nível de módulo
............................................

O módulo também fornece as seguintes funções de nível de módulo:

 -- Função: ipaddress.v4_int_to_packed (address)

     Representa um endereço como 4 bytes compactados em ordem de rede
     (big-endian).  'address' é uma representação inteira de um endereço
     IP IPv4.  Uma exceção *note ValueError: 202. é levantada se o
     número inteiro for negativo ou muito grande para ser um endereço IP
     IPv4.

          >>> ipaddress.ip_address(3221225985)
          IPv4Address('192.0.2.1')
          >>> ipaddress.v4_int_to_packed(3221225985)
          b'\xc0\x00\x02\x01'

 -- Função: ipaddress.v6_int_to_packed (address)

     Representa um endereço como 16 bytes compactados em ordem de rede
     (big-endian).  'address' é uma representação inteira de um endereço
     IP IPv6.  Uma exceção *note ValueError: 202. é levantada se o
     número inteiro for negativo ou muito grande para ser um endereço IP
     IPv6.

 -- Função: ipaddress.summarize_address_range (first, last)

     Retorna um iterador do intervalo de rede resumido, considerando o
     primeiro e o último endereço IP. 'first' é o primeiro *note
     IPv4Address: 1fc. ou *note IPv6Address: 1fd. no intervalo e 'last'
     é o último *note IPv4Address: 1fc. ou *note IPv6Address: 1fd. no
     intervalo.  Uma exceção *note TypeError: 2c3. é levantada se
     'first' ou 'last' não forem endereços IP ou não forem da mesma
     versão.  Uma exceção *note ValueError: 202. é levantada se 'last'
     não for maior que 'first' ou se a versão do 'first' endereço não
     for 4 ou 6.

          >>> [ipaddr for ipaddr in ipaddress.summarize_address_range(
          ...    ipaddress.IPv4Address('192.0.2.0'),
          ...    ipaddress.IPv4Address('192.0.2.130'))]
          [IPv4Network('192.0.2.0/25'), IPv4Network('192.0.2.128/31'), IPv4Network('192.0.2.130/32')]

 -- Função: ipaddress.collapse_addresses (addresses)

     Retorna um iterador dos objetos *note IPv4Network: 1fe. ou *note
     IPv6Network: 1ff. recolhidos.  'addresses' é um *note iterável:
     1268. de objetos *note IPv4Network: 1fe. ou *note IPv6Network: 1ff.
     Uma exceção *note TypeError: 2c3. é levantada se 'addresses'
     contiver objetos de versão mista.

          >>> [ipaddr for ipaddr in
          ... ipaddress.collapse_addresses([ipaddress.IPv4Network('192.0.2.0/25'),
          ... ipaddress.IPv4Network('192.0.2.128/25')])]
          [IPv4Network('192.0.2.0/24')]

 -- Função: ipaddress.get_mixed_type_key (obj)

     Retorna uma chave adequada para ordenação entre redes e endereços.
     Os objetos de endereço e de rede não são ordenáveis por padrão;
     eles são fundamentalmente diferentes, então a expressão:

          IPv4Address('192.0.2.0') <= IPv4Network('192.0.2.0/24')

     não faz sentido.  Porém, há alguns momentos em que você pode
     desejar que *note ipaddress: 80. os ordene de qualquer maneira.  Se
     precisar fazer isso, você pode usar esta função como argumento
     'key' para *note sorted(): be7.

     'obj' é um objeto de rede ou de endereço.


File: python.info,  Node: Exceções personalizadas,  Prev: Outras funções de nível de módulo,  Up: ipaddress — Biblioteca de manipulação de IPv4/IPv6

5.22.23.19 Exceções personalizadas
..................................

Para oferecer suporte a relatórios de erros mais específicos de
construtores de classe, o módulo define as seguintes exceções:

 -- Exceção: ipaddress.AddressValueError (ValueError)

     Qualquer erro de valor relacionado ao endereço.

 -- Exceção: ipaddress.NetmaskValueError (ValueError)

     Qualquer erro de valor relacionado à máscara de rede.


File: python.info,  Node: Serviços Multimídia,  Next: Internacionalização,  Prev: Protocolos de Internet e Suporte,  Up: A Biblioteca Padrão do Python

5.23 Serviços Multimídia
========================

Os módulos descritos neste capítulo implementam vários algoritmos ou
interfaces que são bastante úteis em aplicações multimídia.  Eles estão
disponíveis a critério da instalação.  Aqui está uma visão geral:

* Menu:

* wave — Read and write WAV files::
* colorsys — Conversões entre sistemas de cores::


File: python.info,  Node: wave — Read and write WAV files,  Next: colorsys — Conversões entre sistemas de cores,  Up: Serviços Multimídia

5.23.1 ‘wave’ — Read and write WAV files
----------------------------------------

'Código-fonte:' Lib/wave.py(1)

__________________________________________________________________

The *note wave: 113. module provides a convenient interface to the
Waveform Audio “WAVE” (or “WAV”) file format.  Only uncompressed PCM
encoded wave files are supported.

Alterado na versão 3.12: Support for ‘WAVE_FORMAT_EXTENSIBLE’ headers
was added, provided that the extended format is
‘KSDATAFORMAT_SUBTYPE_PCM’.

The *note wave: 113. module defines the following function and
exception:

 -- Função: wave.open (file, mode=None)

     If 'file' is a string, open the file by that name, otherwise treat
     it as a file-like object.  'mode' can be:

     ‘'rb'’

          Modo somente para leitura.

     ‘'wb'’

          Modo somente para escrita.

     Note that it does not allow read/write WAV files.

     A 'mode' of ‘'rb'’ returns a *note Wave_read: 2b6. object, while a
     'mode' of ‘'wb'’ returns a *note Wave_write: 2b7. object.  If
     'mode' is omitted and a file-like object is passed as 'file',
     ‘file.mode’ is used as the default value for 'mode'.

     If you pass in a file-like object, the wave object will not close
     it when its ‘close()’ method is called; it is the caller’s
     responsibility to close the file object.

     The *note open(): 952. function may be used in a *note with: 5d2.
     statement.  When the ‘with’ block completes, the *note
     Wave_read.close(): 3ef7. or *note Wave_write.close(): 3ef8. method
     is called.

     Alterado na versão 3.4: Added support for unseekable files.

 -- Exceção: wave.Error

     An error raised when something is impossible because it violates
     the WAV specification or hits an implementation deficiency.

* Menu:

* Objetos Wave_read::
* Objetos Wave_write::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/wave.py


File: python.info,  Node: Objetos Wave_read,  Next: Objetos Wave_write,  Up: wave — Read and write WAV files

5.23.1.1 Objetos Wave_read
..........................

 -- Classe: wave.Wave_read

     Read a WAV file.

     Wave_read objects, as returned by *note open(): 952, have the
     following methods:

      -- Método: close ()

          Close the stream if it was opened by *note wave: 113, and make
          the instance unusable.  This is called automatically on object
          collection.

      -- Método: getnchannels ()

          Returns number of audio channels (‘1’ for mono, ‘2’ for
          stereo).

      -- Método: getsampwidth ()

          Retorna a largura da amostra em bytes.

      -- Método: getframerate ()

          Retorna a frequência de amostragem.

      -- Método: getnframes ()

          Retorna o número de quadros de áudio.

      -- Método: getcomptype ()

          Returns compression type (‘'NONE'’ is the only supported
          type).

      -- Método: getcompname ()

          Human-readable version of *note getcomptype(): 3f00.  Usually
          ‘'not compressed'’ parallels ‘'NONE'’.

      -- Método: getparams ()

          Returns a *note namedtuple(): 1ca. ‘(nchannels, sampwidth,
          framerate, nframes, comptype, compname)’, equivalent to output
          of the ‘get*()’ methods.

      -- Método: readframes (n)

          Reads and returns at most 'n' frames of audio, as a *note
          bytes: 1c2. object.

      -- Método: rewind ()

          Volta o ponteiro do arquivo para o início do fluxo de áudio.

     The following two methods are defined for compatibility with the
     old ‘aifc’ module, and don’t do anything interesting.

      -- Método: getmarkers ()

          Retorna ‘None’.

          Descontinuado desde a versão 3.13, será removido na versão
          3.15: The method only existed for compatibility with the
          ‘aifc’ module which has been removed in Python 3.13.

      -- Método: getmark (id)

          Levanta um erro.

          Descontinuado desde a versão 3.13, será removido na versão
          3.15: The method only existed for compatibility with the
          ‘aifc’ module which has been removed in Python 3.13.

     Os dois métodos a seguir definem um termo “posição” que é
     compatível entre eles e é dependente da implementação.

      -- Método: setpos (pos)

          Define o ponteiro de arquivo para a posição especificada.

      -- Método: tell ()

          Retorna a posição atual do ponteiro de arquivo.


File: python.info,  Node: Objetos Wave_write,  Prev: Objetos Wave_read,  Up: wave — Read and write WAV files

5.23.1.2 Objetos Wave_write
...........................

 -- Classe: wave.Wave_write

     Escreve um arquivo WAV.

     Objetos Wave_write, como retornados por *note open(): 952.

     For seekable output streams, the ‘wave’ header will automatically
     be updated to reflect the number of frames actually written.  For
     unseekable streams, the 'nframes' value must be accurate when the
     first frame data is written.  An accurate 'nframes' value can be
     achieved either by calling *note setnframes(): 3f07. or *note
     setparams(): 3f08. with the number of frames that will be written
     before *note close(): 3ef8. is called and then using *note
     writeframesraw(): 1022. to write the frame data, or by calling
     *note writeframes(): 1023. with all of the frame data to be
     written.  In the latter case *note writeframes(): 1023. will
     calculate the number of frames in the data and set 'nframes'
     accordingly before writing the frame data.

     Alterado na versão 3.4: Added support for unseekable files.

     Wave_write objects have the following methods:

      -- Método: close ()

          Make sure 'nframes' is correct, and close the file if it was
          opened by *note wave: 113.  This method is called upon object
          collection.  It will raise an exception if the output stream
          is not seekable and 'nframes' does not match the number of
          frames actually written.

      -- Método: setnchannels (n)

          Define o número de canais.

      -- Método: setsampwidth (n)

          Set the sample width to 'n' bytes.

      -- Método: setframerate (n)

          Set the frame rate to 'n'.

          Alterado na versão 3.2: A non-integral input to this method is
          rounded to the nearest integer.

      -- Método: setnframes (n)

          Set the number of frames to 'n'.  This will be changed later
          if the number of frames actually written is different (this
          update attempt will raise an error if the output stream is not
          seekable).

      -- Método: setcomptype (type, name)

          Set the compression type and description.  At the moment, only
          compression type ‘NONE’ is supported, meaning no compression.

      -- Método: setparams (tuple)

          The 'tuple' should be ‘(nchannels, sampwidth, framerate,
          nframes, comptype, compname)’, with values valid for the
          ‘set*()’ methods.  Sets all parameters.

      -- Método: tell ()

          Return current position in the file, with the same disclaimer
          for the *note Wave_read.tell(): 3f05. and *note
          Wave_read.setpos(): 3f04. methods.

      -- Método: writeframesraw (data)

          Escreve quadros de áudio, sem corrigir 'nframes'.

          Alterado na versão 3.4: Todo *note objeto bytes ou similar:
          d4f. agora é aceito.

      -- Método: writeframes (data)

          Write audio frames and make sure 'nframes' is correct.  It
          will raise an error if the output stream is not seekable and
          the total number of frames that have been written after 'data'
          has been written does not match the previously set value for
          'nframes'.

          Alterado na versão 3.4: Todo *note objeto bytes ou similar:
          d4f. agora é aceito.

          Note that it is invalid to set any parameters after calling
          *note writeframes(): 1023. or *note writeframesraw(): 1022,
          and any attempt to do so will raise *note wave.Error: 3ef9.


File: python.info,  Node: colorsys — Conversões entre sistemas de cores,  Prev: wave — Read and write WAV files,  Up: Serviços Multimídia

5.23.2 ‘colorsys’ — Conversões entre sistemas de cores
------------------------------------------------------

'Código-fonte:' Lib/colorsys.py(1)

__________________________________________________________________

O módulo *note colorsys: 1f. define conversões bidirecionais de valores
de cores entre cores expressas no espaço de cores RGB (Red Green Blue)
usado em monitores de computador e três outros sistemas de coordenadas:
YIQ, HLS (Hue Lightness Saturation) e HSV (Hue Saturation Value).  As
coordenadas em todos esses espaços de cores são valores de ponto
flutuante.  No espaço YIQ, a coordenada Y está entre 0 e 1, mas as
coordenadas I e Q podem ser positivas ou negativas.  Em todos os outros
espaços, as coordenadas estão todas entre 0 e 1.

Ver também
..........

Mais informações sobre espaços de cores podem ser encontradas em
‘https://poynton.ca/ColorFAQ.html’ e
‘https://www.cambridgeincolour.com/tutorials/color-spaces.htm’.

O módulo *note colorsys: 1f. define as seguintes funções:

 -- Função: colorsys.rgb_to_yiq (r, g, b)

     Converte a cor de coordenadas RGB para coordenadas YIQ.

 -- Função: colorsys.yiq_to_rgb (y, i, q)

     Converte a cor de coordenadas YIQ para coordenadas RGB.

 -- Função: colorsys.rgb_to_hls (r, g, b)

     Converte a cor de coordenadas RGB para coordenadas HLS.

 -- Função: colorsys.hls_to_rgb (h, l, s)

     Converte a cor de coordenadas HLS para coordenadas RGB.

 -- Função: colorsys.rgb_to_hsv (r, g, b)

     Converte a cor de coordenadas RGB para coordenadas HSV.

 -- Função: colorsys.hsv_to_rgb (h, s, v)

     Converte a cor de coordenadas HSV para coordenadas RGB.

Exemplo:

     >>> import colorsys
     >>> colorsys.rgb_to_hsv(0.2, 0.4, 0.4)
     (0.5, 0.5, 0.4)
     >>> colorsys.hsv_to_rgb(0.5, 0.5, 0.4)
     (0.2, 0.4, 0.4)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/colorsys.py


File: python.info,  Node: Internacionalização,  Next: Interfaces gráficas de usuário com Tk,  Prev: Serviços Multimídia,  Up: A Biblioteca Padrão do Python

5.24 Internacionalização
========================

Os módulos descritos neste capítulo ajudam você a criar um software que
é independente de idioma e localidade, fornecendo mecanismos para
selecionar um idioma a ser usado em mensagens de programa ou adaptando a
saída para corresponder às convenções locais.

A lista de módulos descritos neste capítulo é:

* Menu:

* gettext — Serviços de internacionalização multilíngues::
* locale — Serviços de internacionalização::


File: python.info,  Node: gettext — Serviços de internacionalização multilíngues,  Next: locale — Serviços de internacionalização,  Up: Internacionalização

5.24.1 ‘gettext’ — Serviços de internacionalização multilíngues
---------------------------------------------------------------

'Código-fonte:' Lib/gettext.py(1)

__________________________________________________________________

O módulo *note gettext: 63. fornece serviços de internacionalização
(I18N) e localização (L10N) para seus módulos e aplicativos Python.  Ele
suporta a API do catálogo de mensagens GNU ‘gettext’ e uma API baseada
em classes de nível mais alto que podem ser mais apropriadas para
arquivos Python.  A interface descrita abaixo permite gravar o módulo e
as mensagens do aplicativo em um idioma natural e fornecer um catálogo
de mensagens traduzidas para execução em diferentes idiomas naturais.

Algumas dicas sobre localização de seus módulos e aplicativos Python
também são fornecidas.

* Menu:

* API do GNU gettext::
* API baseada em classe::
* Internacionalizando seus programas e módulos::
* Reconhecimentos: Reconhecimentos<9>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/gettext.py


File: python.info,  Node: API do GNU gettext,  Next: API baseada em classe,  Up: gettext — Serviços de internacionalização multilíngues

5.24.1.1 API do GNU ‘gettext’
.............................

O módulo *note gettext: 63. define a API a seguir, que é muito
semelhante à API do GNU ‘gettext’.  Se você usar esta API, você afetará
a tradução de todo o seu aplicativo globalmente.  Geralmente, é isso que
você deseja se o seu aplicativo for monolíngue, com a escolha do idioma
dependente da localidade do seu usuário.  Se você estiver localizando um
módulo Python, ou se seu aplicativo precisar alternar idiomas
rapidamente, provavelmente desejará usar a API baseada em classe.

 -- Função: gettext.bindtextdomain (domain, localedir=None)

     Liga o 'domain' ao diretório de localidade 'localedir'.  Mais
     concretamente, *note gettext: 63. procurará arquivos binários ‘.mo’
     para o domínio especificado usando o caminho (no Unix):
     ‘`localedir'/`language'/LC_MESSAGES/`domain'.mo’, sendo 'language'
     pesquisado nas variáveis de ambiente ‘LANGUAGE’, ‘LC_ALL’,
     ‘LC_MESSAGES’ e ‘LANG’ respectivamente.

     Se 'localedir' for omitido ou ‘None’, a ligação atual para 'domain'
     será retornada.  (1)

 -- Função: gettext.textdomain (domain=None)

     Altera ou consulta o domínio global atual.  Se 'domain' for ‘None’,
     o domínio global atual será retornado; caso contrário, o domínio
     global será definido como 'domain', o qual será retornado.

 -- Função: gettext.gettext (message)

     Retorna a tradução localizada de 'message', com base no diretório
     global atual de domínio, idioma e localidade.  Essa função
     geralmente é apelidada como ‘_()’ no espaço de nomes local (veja
     exemplos abaixo).

 -- Função: gettext.dgettext (domain, message)

     Semelhante a *note gettext(): 14b1, mas procura a mensagem no
     'domain' especificado.

 -- Função: gettext.ngettext (singular, plural, n)

     Semelhante a *note gettext(): 14b1, mas considera formas plurais.
     Se uma tradução for encontrada, aplica a fórmula do plural a 'n' e
     retorne a mensagem resultante (alguns idiomas têm mais de duas
     formas no plural).  Se nenhuma tradução for encontrada, retorna
     'singular' se 'n' for 1; retorna 'plural' caso contrário.

     A fórmula de Plural é retirada do cabeçalho do catálogo.  É uma
     expressão C ou Python que possui uma variável livre 'n'; a
     expressão é avaliada para o índice do plural no catálogo.  Veja a
     documentação do gettext GNU(2) para obter a sintaxe precisa a ser
     usada em arquivos ‘.po’ e as fórmulas para um variedade de idiomas.

 -- Função: gettext.dngettext (domain, singular, plural, n)

     Semelhante a *note ngettext(): 3f20, mas procura a mensagem no
     'domain' especificado.

 -- Função: gettext.pgettext (context, message)

 -- Função: gettext.dpgettext (domain, context, message)

 -- Função: gettext.npgettext (context, singular, plural, n)

 -- Função: gettext.dnpgettext (domain, context, singular, plural, n)

     Semelhante às funções correspondentes sem o ‘p’ no prefixo (ou
     seja, *note gettext(): 63, *note dgettext(): 3f1f, *note
     ngettext(): 3f20, *note dngettext(): 3f21.), mas a tradução é
     restrita ao 'context' de mensagem fornecido.

     Adicionado na versão 3.8.

Note que GNU ‘gettext’ também define um método ‘dcgettext()’, mas isso
não foi considerado útil e, portanto, atualmente não está implementado.

Aqui está um exemplo de uso típico para esta API:

     import gettext
     gettext.bindtextdomain('minhaaplicacao', '/caminho/para/diretório/do/meu/idioma')
     gettext.textdomain('minhaaplicacao')
     _ = gettext.gettext
     # ...
     print(_('Esta é uma string traduzível.'))

   ---------- Footnotes ----------

   (1) O diretório de localidade padrão depende do sistema; por exemplo,
no Red Hat Linux é ‘/usr/share/locale’, mas no Solaris é
‘/usr/lib/locale’.  O módulo ‘gettext’ não tenta dar suporte a esses
padrões dependentes do sistema; em vez disso, seu padrão é
‘`sys.base_prefix'/share/locale’ (consulte *note sys.base_prefix: 3ef.).
Por esse motivo, é sempre melhor chamar *note bindtextdomain(): 3f1d.
com um caminho absoluto explícito no início da sua aplicação.

   (2) https://www.gnu.org/software/gettext/manual/gettext.html


File: python.info,  Node: API baseada em classe,  Next: Internacionalizando seus programas e módulos,  Prev: API do GNU gettext,  Up: gettext — Serviços de internacionalização multilíngues

5.24.1.2 API baseada em classe
..............................

A API baseada em classe do módulo *note gettext: 63. oferece mais
flexibilidade e maior conveniência do que a API do GNU ‘gettext’.  É a
maneira recomendada de localizar seus aplicativos e módulos Python.
‘gettext’ define uma classe *note GNUTranslations: 3f26. que implementa
a análise de arquivos no formato GNU ‘.mo’ e possui métodos para
retornar strings.  Instâncias dessa classe também podem se instalar no
espaço de nomes embutido como a função ‘_()’.

 -- Função: gettext.find (domain, localedir=None, languages=None,
          all=False)

     Esta função implementa o algoritmo de busca de arquivos ‘.mo’
     padrão.  É necessário um 'domain', idêntico ao que *note
     textdomain(): 3f1e. leva.  'localedir' opcional é como em *note
     bindtextdomain(): 3f1d.  'languages' opcional é uma lista de
     strings, em que cada string é um código de idioma.

     Se 'localedir' não for fornecido, o diretório local do sistema
     padrão será usado.  (1)  Se 'languages' não for fornecido, as
     seguintes variáveis de ambiente serão pesquisadas: ‘LANGUAGE’,
     ‘LC_ALL’, ‘LC_MESSAGES’ e ‘LANG’.  O primeiro retornando um valor
     não vazio é usado para a variável 'languages'.  As variáveis de
     ambiente devem conter uma lista de idiomas separada por dois
     pontos, que será dividida nos dois pontos para produzir a lista
     esperada de strings de código de idioma.

     *note find(): 3f27. expande e normaliza os idiomas e itera através
     deles, procurando por um arquivo existente construído com esses
     componentes:

     ‘`localedir'/`language'/LC_MESSAGES/`domain'.mo’

     O primeiro nome de arquivo existente é retornado por *note find():
     3f27.  Se nenhum desses arquivos for encontrado, será retornado
     ‘None’.  Se 'all' for fornecido, ele retornará uma lista de todos
     os nomes de arquivos, na ordem em que aparecem na lista de idiomas
     ou nas variáveis de ambiente.

 -- Função: gettext.translation (domain, localedir=None, languages=None,
          class_=None, fallback=False)

     Retorna uma instância de ‘*Translations’ com base nos 'domain',
     'localedir' e 'languages', que são passados primeiro para *note
     find(): 3f27. para obter uma lista dos caminhos de arquivos ‘.mo’
     associados.  Instâncias com nomes de arquivo idênticos ‘.mo’ são
     armazenados em cache.  A classe atual instanciada é 'class_' se
     fornecida, caso contrário *note GNUTranslations: 3f26.  O
     construtor da classe deve usar um único argumento *note objeto
     arquivo: 1203.

     Se vários arquivos forem encontrados, os arquivos posteriores serão
     usados como fallbacks para os anteriores.  Para permitir a
     configuração do fallback, *note copy.copy(): 534. é usado para
     clonar cada objeto de conversão do cache; os dados reais da
     instância ainda são compartilhados com o cache.

     Se nenhum arquivo ‘.mo’ for encontrado, essa função levanta *note
     OSError: 417. se 'fallback' for falso (que é o padrão) e retorna
     uma instância *note NullTranslations: 3f28. se 'fallback' for
     verdadeiro.

     Alterado na versão 3.3: *note IOError: 108b. costumava ser
     levantada, agora ela é um apelido para *note OSError: 417.

     Alterado na versão 3.11: O parâmetro 'codeset' foi removido.

 -- Função: gettext.install (domain, localedir=None, *, names=None)

     Isso instala a função ‘_()’ no espaço de nomes interno do Python,
     com base em 'domain' e 'localedir' que são passados para a função
     *note translation(): a83.

     Para o parâmetro 'names', por favor, veja a descrição do método
     *note install(): 3f29. do objeto de tradução.

     Como visto abaixo, você normalmente marca as strings candidatas à
     tradução em sua aplicação, envolvendo-as em uma chamada para a
     função ‘_()’, assim:

          print(_('Esta string será traduzida.'))

     Por conveniência, você deseja que a função ‘_()’ seja instalada no
     espaço de nomes interno do Python, para que seja facilmente
     acessível em todos os módulos do sua aplicação.

     Alterado na versão 3.11: 'names' é agora um parâmetro
     somente-nomeado.

* Menu:

* A classe NullTranslations::
* A classe GNUTranslations::
* Suporte a catálogo de mensagens do Solaris::
* O construtor Catalog::

   ---------- Footnotes ----------

   (1) Consulte a nota de rodapé para a *note bindtextdomain(): 3f1d.
acima.


File: python.info,  Node: A classe NullTranslations,  Next: A classe GNUTranslations,  Up: API baseada em classe

5.24.1.3 A classe ‘NullTranslations’
....................................

As classes de tradução são o que realmente implementa a tradução de
strings de mensagens do arquivo-fonte original para strings de mensagens
traduzidas.  A classe base usada por todas as classes de tradução é
*note NullTranslations: 3f28.; isso fornece a interface básica que você
pode usar para escrever suas próprias classes de tradução
especializadas.  Aqui estão os métodos de ‘NullTranslations’:

 -- Classe: gettext.NullTranslations (fp=None)

     Recebe um *note objeto arquivo: 1203. opcional 'fp', que é ignorado
     pela classe base.  Inicializa as variáveis de instância
     “protegidas” '_info' e '_charset', que são definidas por classes
     derivadas, bem como '_fallback', que é definido através de *note
     add_fallback(): 3f2b.  Ele então chama ‘self._parse(fp)’ se 'fp'
     não for ‘None’.

      -- Método: _parse (fp)

          No-op na classe base, esse método pega o objeto arquivo 'fp' e
          lê os dados do arquivo, inicializando seu catálogo de
          mensagens.  Se você tiver um formato de arquivo de catálogo de
          mensagens não suportado, substitua esse método para analisar
          seu formato.

      -- Método: add_fallback (fallback)

          Adiciona 'fallback' como o objeto reserva para o objeto de
          tradução atual.  Um objeto de tradução deve consultar o
          fallback se não puder fornecer uma tradução para uma
          determinada mensagem.

      -- Método: gettext (message)

          Se um fallback tiver sido definido, encaminha ‘gettext()’ para
          o fallback.  Caso contrário, retorna 'message'.  Substituído
          em classes derivadas.

      -- Método: ngettext (singular, plural, n)

          Se um fallback tiver sido definido, encaminha ‘ngettext()’
          para o fallback.  Caso contrário, retorna 'singular' se 'n'
          for 1; do contrário, retorna 'plural'.  Substituído em classes
          derivadas.

      -- Método: pgettext (context, message)

          Se um fallback tiver sido definido, encaminha *note
          pgettext(): 9fd. para o fallback.  Caso contrário, retorna a
          mensagem traduzida.  Substituído em classes derivadas.

          Adicionado na versão 3.8.

      -- Método: npgettext (context, singular, plural, n)

          Se um fallback tiver sido definido, encaminha *note
          npgettext(): 3f23. para o fallback.  Caso contrário, retorna a
          mensagem traduzida.  Substituído em classes derivadas.

          Adicionado na versão 3.8.

      -- Método: info ()

          Retorna um dicionário que contém os metadados encontrados no
          arquivo de catálogo de mensagens.

      -- Método: charset ()

          Retorna a codificação do arquivo de catálogo de mensagens.

      -- Método: install (names=None)

          Este método instala *note gettext(): 3f2d. no espaço de nomes
          embutido, ligando-o a ‘_’.

          Se o parâmetro 'names' for fornecido, deve ser uma sequência
          contendo os nomes das funções que você deseja instalar no
          espaço de nomes embutidos, além de ‘_()’.  Há suporte aos
          nomes ‘'gettext'’, ‘'ngettext'’, ‘'pgettext'’ e ‘'npgettext'’

          Observe que esta é apenas uma maneira, embora a maneira mais
          conveniente, de disponibilizar a função ‘_()’ para sua
          aplicação.  Como afeta a aplicação inteira globalmente, e
          especificamente o espaço de nomes embutido, os módulos
          localizados nunca devem instalar ‘_()’.  Em vez disso, eles
          devem usar este código para disponibilizar ‘_()’ para seu
          módulo:

               import gettext
               t = gettext.translation('meumódulo', ...)
               _ = t.gettext

          Isso coloca ‘_()’ apenas no espaço de nomes global do módulo
          e, portanto, afeta apenas as chamadas dentro deste módulo.

          Alterado na versão 3.8: Adicionado ‘'pgettext'’ e
          ‘'npgettext'’.


File: python.info,  Node: A classe GNUTranslations,  Next: Suporte a catálogo de mensagens do Solaris,  Prev: A classe NullTranslations,  Up: API baseada em classe

5.24.1.4 A classe ‘GNUTranslations’
...................................

O módulo ‘gettext’ fornece uma classe adicional derivada de *note
NullTranslations: 3f28.: *note GNUTranslations: 3f26.  Esta classe
substitui ‘_parse()’ para permitir a leitura de arquivos ‘.mo’ do
formato GNU ‘gettext’ nos formatos big-endian e little-endian.

*note GNUTranslations: 3f26. analisa metadados opcionais do catálogo de
tradução.  É uma convenção com o GNU ‘gettext’ incluir metadados como
tradução para a string vazia.  Esses metadados estão nos pares ‘key:
value’ no estilo RFC 822(1) e devem conter a chave ‘Project-Id-Version’.
Se a chave ‘Content-Type’ for encontrada, a propriedade ‘charset’ será
usada para inicializar a variável de instância ‘_charset’ “protegida”,
com o padrão ‘None’ se não for encontrada.  Se a codificação de
“charset” for especificada, todos os IDs e strings de mensagens lidos no
catálogo serão convertidos em Unicode usando essa codificação, caso
contrário, o ASCII será presumido.

Como os IDs de mensagens também são lidos como strings Unicode, todos os
métodos ‘*gettext()’ presumem os IDs de mensagens como sendo strings
Unicode, não como strings de bytes.

Todo o conjunto de pares chave/valor é colocado em um dicionário e
definido como a variável de instância ‘_info’ “protegida”.

Se o número mágico do arquivo ‘.mo’ for inválido, o número principal da
versão é inesperado ou se ocorrerem outros problemas durante a leitura
do arquivo, instanciando uma classe *note GNUTranslations: 3f26. pode
levantar *note OSError: 417.

 -- Classe: gettext.GNUTranslations

     Os seguintes métodos são substituídos a partir da implementação da
     classe base:

      -- Método: gettext (message)

          Procura o ID da 'message' no catálogo e retorna a string de
          mensagens correspondente, como uma string Unicode.  Se não
          houver entrada no catálogo para o ID da 'message' e um
          fallback tiver sido definido, a pesquisa será encaminhada para
          o método *note gettext(): 3f2d. do fallback.  Caso contrário,
          o ID da 'message' é retornado.

      -- Método: ngettext (singular, plural, n)

          Faz uma pesquisa de plural-forms de um ID de mensagem.
          'singular' é usado como o ID da mensagem para fins de pesquisa
          no catálogo, enquanto 'n' é usado para determinar qual forma
          plural usar.  A string de mensagens retornada é uma string
          Unicode.

          Se o ID da mensagem não for encontrado no catálogo e um
          fallback for especificado, a solicitação será encaminhada para
          o método do fallback *note ngettext(): 3f2e.  Caso contrário,
          quando 'n' for 1, 'singular' será retornado e 'plural' será
          retornado em todos os outros casos.

          Aqui está um exemplo:

               n = len(os.listdir('.'))
               cat = GNUTranslations(somefile)
               message = cat.ngettext(
                   'There is %(num)d file in this directory',
                   'There are %(num)d files in this directory',
                   n) % {'num': n}

      -- Método: pgettext (context, message)

          Procura o ID do 'context' e da 'message' no catálogo e retorna
          a string de mensagens correspondente, como uma string Unicode.
          Se não houver entrada no catálogo para o ID do 'context' e da
          'message', e um fallback tiver sido definido, a pesquisa será
          encaminhada para o método *note pgettext(): 9fd. do fallback.
          Caso contrário, o ID da 'message' é retornado.

          Adicionado na versão 3.8.

      -- Método: npgettext (context, singular, plural, n)

          Faz uma pesquisa de plural-forms de um ID de mensagem.
          'singular' é usado como o ID da mensagem para fins de pesquisa
          no catálogo, enquanto 'n' é usado para determinar qual forma
          plural usar.

          Se o ID da mensagem para 'context' não for encontrado no
          catálogo e um fallback for especificado, a solicitação será
          encaminhada para o método *note npgettext(): 3f23. do
          fallback.  Caso contrário, quando 'n' for 1, 'singular' será
          retornado e 'plural' será retornado em todos os outros casos.

          Adicionado na versão 3.8.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc822.html


File: python.info,  Node: Suporte a catálogo de mensagens do Solaris,  Next: O construtor Catalog,  Prev: A classe GNUTranslations,  Up: API baseada em classe

5.24.1.5 Suporte a catálogo de mensagens do Solaris
...................................................

O sistema operacional Solaris define seu próprio formato de arquivo
binário ‘.mo’, mas como nenhuma documentação pode ser encontrada nesse
formato, ela não é suportada no momento.


File: python.info,  Node: O construtor Catalog,  Prev: Suporte a catálogo de mensagens do Solaris,  Up: API baseada em classe

5.24.1.6 O construtor Catalog
.............................

O GNOME usa uma versão do módulo *note gettext: 63. de James Henstridge,
mas esta versão tem uma API um pouco diferente.  Seu uso documentado
foi:

     import gettext
     cat = gettext.Catalog(domain, localedir)
     _ = cat.gettext
     print(_('hello world'))

Para compatibilidade com este módulo mais antigo, a função ‘Catalog()’ é
um apelido para a função *note translation(): a83. descrita acima.

Uma diferença entre este módulo e o de Henstridge: seus objetos de
catálogo suportavam o acesso por meio de uma API de mapeamento, mas isso
parece não ser utilizado e, portanto, não é atualmente suportado.


File: python.info,  Node: Internacionalizando seus programas e módulos,  Next: Reconhecimentos<9>,  Prev: API baseada em classe,  Up: gettext — Serviços de internacionalização multilíngues

5.24.1.7 Internacionalizando seus programas e módulos
.....................................................

Internationalization (I18N), ou internacionalização (I17O) em português,
refere-se à operação pela qual um programa é informado sobre vários
idiomas.  Localization (L10N), ou localização em português, refere-se à
adaptação do seu programa, uma vez internacionalizado, aos hábitos
culturais e de idioma local.  Para fornecer mensagens multilíngues para
seus programas Python, você precisa executar as seguintes etapas:

  1. preparar seu programa ou módulo especialmente marcando strings
     traduzíveis

  2. executar um conjunto de ferramentas nos arquivos marcados para
     gerar catálogos de mensagens não tratadas

  3. criar traduções específicas do idioma dos catálogos de mensagens

  4. usar o módulo *note gettext: 63. para que as strings das mensagens
     sejam traduzidas corretamente

Para preparar seu código para I18N, você precisa examinar todas as
strings em seus arquivos.  Qualquer string que precise ser traduzida
deve ser marcada envolvendo-a em ‘_('...')’ — isto é, uma chamada para a
função *note _: 63.  Por exemplo:

     filename = 'meulog.txt'
     message = _('escrevendo uma mensagem de log')
     with open(filename, 'w') as fp:
         fp.write(message)

Neste exemplo, a string ‘'escrevendo uma mensagem de log'’ está marcada
como um candidato para tradução, enquanto as strings ‘'meulog.txt'’ e
‘'w'’ não estão.

Existem algumas ferramentas para extrair as strings destinadas à
tradução.  O GNU ‘gettext’ original tem suporte apenas ao código-fonte C
ou C++, mas sua versão estendida ‘xgettext’ varre o código escrito em
várias linguagens, incluindo Python, para encontrar strings marcadas
como traduzíveis.  Babel(1) é uma biblioteca de internacionalização do
Python que inclui um script ‘pybabel’ para extrair e compilar catálogos
de mensagens.  O programa de François Pinard chamado ‘xpot’ faz um
trabalho semelhante e está disponível como parte de seu pacote
po-utils(2).

(O Python também inclui versões em Python puro desses programas,
chamadas ‘pygettext.py’ e ‘msgfmt.py’; algumas distribuições do Python
as instalam para você.  O ‘pygettext.py’ é semelhante ao ‘xgettext’, mas
apenas entende o código-fonte do Python e não consegue lidar com outras
linguagens de programação como C ou C++.  O ‘pygettext.py’ possui
suporte a uma interface de linha de comando semelhante à do ‘xgettext’;
para detalhes sobre seu uso, execute ‘pygettext.py --help’.  O
‘msgfmt.py’ é compatível com binários com GNU ‘msgfmt’.  Com esses dois
programas, você pode não precisar do pacote GNU ‘gettext’ para
internacionalizar suas aplicações Python.)

‘xgettext’, ‘pygettext’ e ferramentas similares geram ‘.po’ que são
catálogos de mensagens.  Eles são arquivos legíveis por humanos
estruturados que contêm todas as strings marcadas no código-fonte, junto
com um espaço reservado para as versões traduzidas dessas strings.

Cópias destes arquivos ‘.po’ são entregues aos tradutores humanos
individuais que escrevem traduções para todos os idiomas naturais
suportados.  Eles enviam de volta as versões completas específicas do
idioma como um arquivo ‘<nome-do-idioma>.po’ que é compilado em um
arquivo de catálogo binário legível por máquina ‘.mo’ usando o programa
‘msgfmt’.  Os arquivos ‘.mo’ são usados pelo módulo *note gettext: 63.
para o processamento de tradução real em tempo de execução.

Como você usa o módulo *note gettext: 63. no seu código depende se você
está internacionalizando um único módulo ou sua aplicação inteira.  As
próximas duas seções discutirão cada caso.

* Menu:

* Localizando seu módulo::
* Localizando sua aplicação::
* Alterando os idiomas durante o uso::
* Traduções adiadas::

   ---------- Footnotes ----------

   (1) https://babel.pocoo.org/

   (2) https://github.com/pinard/po-utils


File: python.info,  Node: Localizando seu módulo,  Next: Localizando sua aplicação,  Up: Internacionalizando seus programas e módulos

5.24.1.8 Localizando seu módulo
...............................

Se você estiver localizando seu módulo, tome cuidado para não fazer
alterações globais, por exemplo para o espaço de nomes embutidos.  Você
não deve usar a API GNU ‘gettext’, mas a API baseada em classe.

Digamos que seu módulo seja chamado “spam” e as várias traduções do
idioma natural do arquivo ‘.mo’ residam em ‘/usr/share/locale’ no
formato GNU ‘gettext’.  Aqui está o que você colocaria sobre o seu
módulo:

     import gettext
     t = gettext.translation('spam', '/usr/share/locale')
     _ = t.gettext


File: python.info,  Node: Localizando sua aplicação,  Next: Alterando os idiomas durante o uso,  Prev: Localizando seu módulo,  Up: Internacionalizando seus programas e módulos

5.24.1.9 Localizando sua aplicação
..................................

Se você estiver localizando sua aplicação, poderá instalar a função
‘_()’ globalmente no espaço de nomes embutidos, geralmente no arquivo
principal do driver do sua aplicação.  Isso permitirá que todos os
arquivos específicos de sua aplicação usem ‘_('...')’ sem precisar
instalá-la explicitamente em cada arquivo.

No caso simples, você precisa adicionar apenas o seguinte código ao
arquivo do driver principal da sua aplicação:

     import gettext
     gettext.install('minhaaplicacao')

Se você precisar definir o diretório da localidade, poderá passá-lo para
a função *note install(): a84.:

     import gettext
     gettext.install('minhaaplicacao', '/usr/share/locale')


File: python.info,  Node: Alterando os idiomas durante o uso,  Next: Traduções adiadas,  Prev: Localizando sua aplicação,  Up: Internacionalizando seus programas e módulos

5.24.1.10 Alterando os idiomas durante o uso
............................................

Se o seu programa precisar oferecer suporte a vários idiomas ao mesmo
tempo, convém criar várias instâncias de tradução e alternar entre elas
explicitamente, assim:

     import gettext

     lang1 = gettext.translation('minhaaplicacao', languages=['en'])
     lang2 = gettext.translation('minhaaplicacao', languages=['fr'])
     lang3 = gettext.translation('minhaaplicacao', languages=['de'])

     # começa usando o idioma 1
     lang1.install()

     # ... o tempo passa, o usuário seleciona o idioma 2
     lang2.install()

     # ... mais tempo passa, o usuário seleciona o idioma 3
     lang3.install()


File: python.info,  Node: Traduções adiadas,  Prev: Alterando os idiomas durante o uso,  Up: Internacionalizando seus programas e módulos

5.24.1.11 Traduções adiadas
...........................

Na maioria das situações de codificação, as strings são traduzidas onde
são codificadas.  Ocasionalmente, no entanto, é necessário marcar
strings para tradução, mas adiar a tradução real até mais tarde.  Um
exemplo clássico é:

     animals = ['mollusk',
                'albatross',
                'rat',
                'penguin',
                'python', ]
     # ...
     for a in animals:
         print(a)

Aqui, você deseja marcar as strings na lista ‘animals’ como traduzíveis,
mas na verdade não deseja traduzi-las até que sejam impressas.

Aqui está uma maneira de lidar com esta situação:

     def _(message): return message

     animals = [_('mollusk'),
                _('albatross'),
                _('rat'),
                _('penguin'),
                _('python'), ]

     del _

     # ...
     for a in animals:
         print(_(a))

Isso funciona porque a definição fictícia de ‘_()’ simplesmente retorna
a string inalterada.  E essa definição fictícia vai substituir
temporariamente qualquer definição de ‘_()’ no espaço de nomes embutido
(até o comando *note del: 18a7.).  Tome cuidado, se você tiver uma
definição anterior de ‘_()’ no espaço de nomes local.

Observe que o segundo uso de ‘_()’ não identificará “a” como traduzível
para o programa ‘gettext’, porque o parâmetro não é uma string literal.

Outra maneira de lidar com isso é com o seguinte exemplo:

     def N_(message): return message

     animals = [N_('mollusk'),
                N_('albatross'),
                N_('rat'),
                N_('penguin'),
                N_('python'), ]

     # ...
     for a in animals:
         print(_(a))

Nesse caso, você está marcando strings traduzíveis com a função ‘N_()’,
que não entra em conflito com nenhuma definição de ‘_()’.  No entanto,
você precisará ensinar seu programa de extração de mensagens a procurar
strings traduzíveis marcadas com ‘N_()’.  ‘xgettext’, ‘pygettext’,
‘pybabel extract’ e ‘xpot’ possuem suporte a isso através do uso da
opção de linha de comando ‘-k’.  A escolha de ‘N_()’ aqui é totalmente
arbitrária; poderia facilmente ter sido
‘MarkThisStringForTranslation()’.


File: python.info,  Node: Reconhecimentos<9>,  Prev: Internacionalizando seus programas e módulos,  Up: gettext — Serviços de internacionalização multilíngues

5.24.1.12 Reconhecimentos
.........................

As seguintes pessoas contribuíram com código, feedback, sugestões de
design, implementações anteriores e experiência valiosa para a criação
deste módulo:

   * Peter Funk

   * James Henstridge

   * Juan David Ibáñez Palomar

   * Marc-André Lemburg

   * Martin von Löwis

   * François Pinard

   * Barry Warsaw

   * Gustavo Niemeyer


File: python.info,  Node: locale — Serviços de internacionalização,  Prev: gettext — Serviços de internacionalização multilíngues,  Up: Internacionalização

5.24.2 ‘locale’ — Serviços de internacionalização
-------------------------------------------------

'Código-fonte:' Lib/locale.py(1)

__________________________________________________________________

O módulo *note locale: 86. abre o acesso ao banco de dados de localidade
POSIX e funcionalidade.  O mecanismo de localidade POSIX permite que os
programadores lidem com certas questões culturais em uma aplicação, sem
exigir que o programador conheça todas as especificidades de cada país
onde o software é executado.

O módulo *note locale: 86. é implementado em cima do módulo ‘_locale’,
que por sua vez usa uma implementação a localidade ANSI C se disponível.

O módulo *note locale: 86. define a seguinte exceção e funções:

 -- Exceção: locale.Error

     Exceção levantada quando a localidade passada para *note
     setlocale(): 2db. não é reconhecida.

 -- Função: locale.setlocale (category, locale=None)

     Se 'locale' for fornecido e não ‘None’, *note setlocale(): 2db.
     modifica a configuração de locale para a 'category'.  As categorias
     disponíveis estão listadas na descrição dos dados abaixo.  'locale'
     pode ser uma *note string: 3f44. ou um par, código de idioma e
     codificação.  Uma string vazia especifica as configurações padrão
     do usuário.  Se a modificação da localidade falhar, a exceção *note
     Error: 3f43. é levantada.  Se for bem-sucedido, a nova configuração
     de localidade será retornada.

     Se 'locale' for um par, ele será convertido em um nome de
     localidade usando o mecanismo de apelidamento de localidade.  O
     código de idioma tem o mesmo formato de *note nome da localidade:
     3f44, mas sem codificação e modificador ‘@’.  O código de idioma e
     a codificação podem ser ‘None’.

     Se 'locale' for omitido ou ‘None’, a configuração atual para
     'category' é retornada.

     Exemplo:

          >>> import locale
          >>> loc = locale.setlocale(locale.LC_ALL)  # get current locale
          # use German locale; name and availability varies with platform
          >>> locale.setlocale(locale.LC_ALL, 'de_DE.UTF-8')
          >>> locale.strcoll('f\xe4n', 'foo')  # compare a string containing an umlaut
          >>> locale.setlocale(locale.LC_ALL, '')   # use user's preferred locale
          >>> locale.setlocale(locale.LC_ALL, 'C')  # use default (C) locale
          >>> locale.setlocale(locale.LC_ALL, loc)  # restore saved locale

     *note setlocale(): 2db. is not thread-safe on most systems.
     Applications typically start with a call of:

          import locale
          locale.setlocale(locale.LC_ALL, '')

     Isso define a localidade de todas as categorias para a configuração
     padrão do usuário (normalmente especificada na variável de ambiente
     ‘LANG’).  Se a localidade não for alterada depois disso, o uso de
     multithreading não deve causar problemas.

 -- Função: locale.localeconv ()

     Retorna o banco de dados das convenções locais como um dicionário.
     Este dicionário possui as seguintes strings como chaves:

     Categoria                  Chave                                     Significado
                                                                          
     ----------------------------------------------------------------------------------------------------------
                                                                          
     *note LC_NUMERIC: 3f45.    ‘'decimal_point'’                         Caractere de ponto decimal.
                                                                          
                                                                          
                                ‘'grouping'’                              Sequência de números especificando
                                                                          quais posições relativas os
                                                                          ‘'thousands_sep'’ são esperados.
                                                                          Se a sequência for terminada com
                                                                          *note CHAR_MAX: 3f46, nenhum
                                                                          agrupamento adicional é realizado.
                                                                          Se a sequência termina com um ‘0’,
                                                                          o tamanho do último grupo é usado
                                                                          repetidamente.
                                                                          
                                                                          
                                ‘'thousands_sep'’                         Caractere usado entre grupos.
                                                                          
                                                                          
     *note LC_MONETARY: 3f47.   ‘'int_curr_symbol'’                       Símbolo internacional de moeda.
                                                                          
                                                                          
                                ‘'currency_symbol'’                       Símbolo local de moeda.
                                                                          
                                                                          
                                ‘'p_cs_precedes/n_cs_precedes'’           Se o símbolo da moeda precede o
                                                                          valor (para valores positivos ou
                                                                          negativos).
                                                                          
                                                                          
                                ‘'p_sep_by_space/n_sep_by_space'’         Se o símbolo monetário está
                                                                          separado do valor por um espaço
                                                                          (para valores positivos ou
                                                                          negativos).
                                                                          
                                                                          
                                ‘'mon_decimal_point'’                     Ponto decimal usado para valores
                                                                          monetários.
                                                                          
                                                                          
                                ‘'frac_digits'’                           Número de dígitos fracionários
                                                                          usados na formatação local de
                                                                          valores monetários.
                                                                          
                                                                          
                                ‘'int_frac_digits'’                       Número de dígitos fracionários
                                                                          usados na formatação internacional
                                                                          de valores monetários.
                                                                          
                                                                          
                                ‘'mon_thousands_sep'’                     Separador de grupo usado para
                                                                          valores monetários.
                                                                          
                                                                          
                                ‘'mon_grouping'’                          Equivalente a ‘'grouping'’, usado
                                                                          para valores monetários.
                                                                          
                                                                          
                                ‘'positive_sign'’                         Símbolo usado para anotar um valor
                                                                          monetário positivo.
                                                                          
                                                                          
                                ‘'negative_sign'’                         Símbolo usado para anotar um valor
                                                                          monetário negativo.
                                                                          
                                                                          
                                ‘'p_sign_posn/n_sign_posn'’               A posição do sinal (para valores
                                                                          positivos resp.  negativos), veja
                                                                          abaixo.
                                                                          

     Todos os valores numéricos podem ser definidos como *note CHAR_MAX:
     3f46. para indicar que não há valor especificado nesta localidade.

     Os valores possíveis para ‘'p_sign_posn'’ e ‘'n_sign_posn'’ são
     dados abaixo.

     Valor              Explicação
                        
     -----------------------------------------------------------------
                        
     ‘0’                A moeda e o valor estão entre parênteses.
                        
                        
     ‘1’                O sinal deve preceder o valor e o símbolo
                        da moeda.
                        
                        
     ‘2’                O sinal deve seguir o valor e o símbolo da
                        moeda.
                        
                        
     ‘3’                O sinal deve preceder imediatamente o
                        valor.
                        
                        
     ‘4’                O sinal deve seguir imediatamente o valor.
                        
                        
     ‘CHAR_MAX’         Nada é especificado nesta localidade.
                        

     A função define temporariamente a localidade de ‘LC_CTYPE’ para a
     localidade de ‘LC_NUMERIC’ ou a localidade de ‘LC_MONETARY’ se as
     localidades forem diferentes e as strings numéricas ou monetárias
     não forem ASCII. Esta mudança temporária afeta outras threads.

     Alterado na versão 3.7: A função agora define temporariamente a
     localidade de ‘LC_CTYPE’ para a localidade de ‘LC_NUMERIC’ em
     alguns casos.

 -- Função: locale.nl_langinfo (option)

     Retorna algumas informações específicas da localidade em uma
     string.  Esta função não está disponível em todos os sistemas e o
     conjunto de opções possíveis também pode variar entre as
     plataformas.  Os valores de argumento possíveis são números, para
     os quais constantes simbólicas estão disponíveis no módulo da
     localidade.

     A função *note nl_langinfo(): 3f48. aceita uma das seguintes
     chaves.  A maioria das descrições são tiradas da descrição
     correspondente na biblioteca GNU C.

      -- Dado: locale.CODESET

          Obtém uma string com o nome da codificação de caracteres usada
          na localidade selecionado.

      -- Dado: locale.D_T_FMT

          Obtém uma string que pode ser usada como uma string de formato
          para *note time.strftime(): 1229. para representar a data e a
          hora de uma maneira específica da localidade.

      -- Dado: locale.D_FMT

          Obtém uma string que pode ser usada como uma string de formato
          para *note time.strftime(): 1229. para representar uma data de
          uma maneira específica da localidade.

      -- Dado: locale.T_FMT

          Obtém uma string que pode ser usada como uma string de formato
          para *note time.strftime(): 1229. para representar uma hora de
          uma maneira específica da localidade.

      -- Dado: locale.T_FMT_AMPM

          Obtém uma string de formato para *note time.strftime(): 1229.
          para representar a hora no formato am/pm.

      -- Dado: locale.DAY_1
      -- Dado: locale.DAY_2
      -- Dado: locale.DAY_3
      -- Dado: locale.DAY_4
      -- Dado: locale.DAY_5
      -- Dado: locale.DAY_6
      -- Dado: locale.DAY_7

          Obtém o nome do enésimo dia da semana.

               Nota: Isso segue a convenção dos EUA de *note DAY_1:
               3f4e. ser no domingo, não a convenção internacional (ISO
               8601) que segunda-feira é o primeiro dia da semana.

      -- Dado: locale.ABDAY_1
      -- Dado: locale.ABDAY_2
      -- Dado: locale.ABDAY_3
      -- Dado: locale.ABDAY_4
      -- Dado: locale.ABDAY_5
      -- Dado: locale.ABDAY_6
      -- Dado: locale.ABDAY_7

          Obtém o nome abreviado do enésimo dia da semana.

      -- Dado: locale.MON_1
      -- Dado: locale.MON_2
      -- Dado: locale.MON_3
      -- Dado: locale.MON_4
      -- Dado: locale.MON_5
      -- Dado: locale.MON_6
      -- Dado: locale.MON_7
      -- Dado: locale.MON_8
      -- Dado: locale.MON_9
      -- Dado: locale.MON_10
      -- Dado: locale.MON_11
      -- Dado: locale.MON_12

          Obtém o nome do enésimo dia do mês.

      -- Dado: locale.ABMON_1
      -- Dado: locale.ABMON_2
      -- Dado: locale.ABMON_3
      -- Dado: locale.ABMON_4
      -- Dado: locale.ABMON_5
      -- Dado: locale.ABMON_6
      -- Dado: locale.ABMON_7
      -- Dado: locale.ABMON_8
      -- Dado: locale.ABMON_9
      -- Dado: locale.ABMON_10
      -- Dado: locale.ABMON_11
      -- Dado: locale.ABMON_12

          Obtém o nome abreviado do enésimo dia do mês.

      -- Dado: locale.RADIXCHAR

          Obtém o caractere separador decimal (ponto decimal, vírgula
          decimal etc.).

      -- Dado: locale.THOUSEP

          Obtém o caractere separador para milhares (grupos de três
          dígitos).

      -- Dado: locale.YESEXPR

          Obtém uma expressão regular que pode ser usada com a função
          regex para reconhecer uma resposta positiva a uma pergunta
          sim/não.

      -- Dado: locale.NOEXPR

          Obtém uma expressão regular que pode ser usada com a função
          ‘regex(3)’ para reconhecer uma resposta negativa a uma
          pergunta sim/não.

               Nota: As expressões regulares para *note YESEXPR: 3f76. e
               *note NOEXPR: 3f77. usam uma sintaxe adequada para a
               função ‘regex’ da biblioteca C, que pode ser diferente da
               sintaxe usada em *note re: b9.

      -- Dado: locale.CRNCYSTR

          Obtém o símbolo da moeda, precedido por “-” se o símbolo deve
          aparecer antes do valor, “+” se o símbolo deve aparecer após o
          valor ou “.” se o símbolo deve substituir o caractere
          separador decimal.

      -- Dado: locale.ERA

          Obtém uma string que descreva como os anos são contados e
          exibidos para cada era em um localidade.

          A maioria das localidades não define esse valor.  Um exemplo
          de localidade que define esse valor é o japonês.  No Japão, a
          representação tradicional de datas inclui o nome da época
          correspondente ao reinado do então imperador.

          Normalmente, não deve ser necessário usar esse valor
          diretamente.  Especificar o modificador ‘E’ em suas strings de
          formato faz com que a função *note time.strftime(): 1229. use
          essas informações.  O formato da string retornada é
          especificado em 'The Open Group Base Specifications Issue 8',
          parágrafo 7.3.5.2 LC_TIME C-Language Access(2).

      -- Dado: locale.ERA_D_T_FMT

          Obtém uma string de formato para *note time.strftime(): 1229.
          para representar a data e a hora de uma forma baseada na era
          específica da localidade.

      -- Dado: locale.ERA_D_FMT

          Obtém uma string de formato para *note time.strftime(): 1229.
          para representar uma data em uma forma baseada em era
          específica da localidade.

      -- Dado: locale.ERA_T_FMT

          Obtém uma string de formato para *note time.strftime(): 1229.
          para representar uma hora em uma forma baseada em era
          específica da localidade.

      -- Dado: locale.ALT_DIGITS

          Obtém uma string consistindo de até 100 símbolos separados por
          ponto e vírgula usados para representar os valores de 0 a 99
          de uma forma específica de localidade.  Na maioria das
          localidades, esta é uma string vazia.

 -- Função: locale.getdefaultlocale ([envvars])

     Tenta determinar as configurações de localidade padrão e as retorna
     como uma tupla na forma ‘(language code, encoding)’.

     De acordo com POSIX, um programa que não chamou ‘setlocale(LC_ALL,
     '')’ executa usando a localidade portátil ‘'C'’.  Chamar
     ‘setlocale(LC_ALL, '')’ permite que ele use a localidade padrão
     conforme definido pela variável ‘LANG’.  Como não queremos
     interferir com a configuração de localidade atual, emulamos o
     comportamento da maneira descrita acima.

     Para manter a compatibilidade com outras plataformas, não apenas a
     variável ‘LANG’ é testada, mas uma lista de variáveis fornecida
     como parâmetro envvars.  Será utilizado o primeiro encontrado a ser
     definido.  'envvars' padroniza para o caminho de pesquisa usado no
     GNU gettext; deve sempre conter o nome da variável ‘'LANG'’.  O
     caminho de pesquisa do GNU gettext contém ‘'LC_ALL'’, ‘'LC_CTYPE'’,
     ‘'LANG'’ e ‘'LANGUAGE'’, nesta ordem.

     O código de idioma tem o mesmo formato de *note nome de localidade:
     3f44, mas sem codificação e modificador ‘@’.  O código de idioma e
     a codificação podem ser ‘None’ se seus valores não puderem ser
     determinados.  O locale “C” é representado como ‘(None, None)’.

     Descontinuado desde a versão 3.11, será removido na versão 3.15.

 -- Função: locale.getlocale (category=LC_CTYPE)

     Retorna a configuração atual para a categoria de localidade
     fornecida como uma tupla contendo o código de idioma e a
     codificação.  'category' pode ser um dos valores ‘LC_*’, exceto
     *note LC_ALL: 3f7e.  O padrão é *note LC_CTYPE: 3f7f.

     O código de idioma tem o mesmo formato de *note nome de localidade:
     3f44, mas sem codificação e modificador ‘@’.  O código de idioma e
     a codificação podem ser ‘None’ se seus valores não puderem ser
     determinados.  O locale “C” é representado como ‘(None, None)’.

 -- Função: locale.getpreferredencoding (do_setlocale=True)

     Retorna a *note codificação da localidade: 242. usada para dados de
     texto, de acordo com as preferências do usuário.  As preferências
     do usuário são expressas de maneira diferente em sistemas
     diferentes e podem não estar disponíveis programaticamente em
     alguns sistemas, portanto, essa função retorna apenas uma
     estimativa.

     Em alguns sistemas, é necessário invocar *note setlocale(): 2db.
     para obter as preferências do usuário, portanto, esta função não é
     segura para thread.  Se invocar setlocale não for necessário ou
     desejado, 'do_setlocale' deve ser definido como ‘False’.

     No Android ou se o *note Modo UTF-8 do Python: 656. é retornado,
     sempre retorna ‘'utf-8'’, a *note codificação da localidade: 242. e
     o argumento 'do_setlocale' são ignorados.

     A *note pré-inicialização do Python: 3f80. configura a localidade
     LC_CTYPE. Veja também *note tratador de erros e codificação do
     sistema de arquivos: 53b.

     Alterado na versão 3.7: A função agora sempre retorna ‘"utf-8"’ no
     Android ou se o *note Modo UTF-8 do Python: 656. estiver
     habilitado.

 -- Função: locale.getencoding ()

     Obtém a atual *note codificação da localidade: 242.:

        * No Android e no VxWorks, retorna ‘"utf-8"’.

        * No Unix, retorna a codificação da localidade *note LC_CTYPE:
          3f7f. atual.  Retorna ‘"utf-8"’ se ‘nl_langinfo(CODESET)’
          retornar uma string vazia: por exemplo, se a localidade
          LC_CTYPE atual não for compatível.

        * No Windows, retorna a página de código ANSI.

     A *note pré-inicialização do Python: 3f80. configura a localidade
     LC_CTYPE. Veja também *note tratador de erros e codificação do
     sistema de arquivos: 53b.

     Este função é semelhante a *note getpreferredencoding(False): 53a,
     exceto pelo fato de que esta função ignora o *note Modo UTF-8 do
     Python: 656.

     Adicionado na versão 3.11.

 -- Função: locale.normalize (localename)

     Retorna um código de localidade normalizado para o nome de
     localidade fornecido.  O código de localidade retornado é formatado
     para uso com *note setlocale(): 2db.  Se a normalização falhar, o
     nome original será retornado inalterado.

     Se a codificação fornecida não for conhecida, o padrão da função é
     a codificação padrão para o código da localidade, assim como *note
     setlocale(): 2db.

 -- Função: locale.strcoll (string1, string2)

     Compara duas strings de acordo com a configuração atual *note
     LC_COLLATE: 3f83.  Como qualquer outra função de comparação,
     retorna um valor negativo ou positivo, ou ‘0’, dependendo se
     'string1' agrupa antes ou depois de 'string2' ou é igual a ele.

 -- Função: locale.strxfrm (string)

     Transforma uma string em uma que pode ser usada em comparações com
     reconhecimento de localidade.  Por exemplo, ‘strxfrm(s1) <
     strxfrm(s2)’ é equivalente a ‘strcoll(s1, s2) < 0’.  Esta função
     pode ser usada quando a mesma string é comparada repetidamente, por
     exemplo, ao agrupar uma sequência de strings.

 -- Função: locale.format_string (format, val, grouping=False,
          monetary=False)

     Formata um número 'val' de acordo com a configuração atual do *note
     LC_NUMERIC: 3f45.  O formato segue as convenções do operador ‘%’.
     Para valores de ponto flutuante, o ponto decimal é modificado, se
     apropriado.  Se 'grouping' for ‘True’, também levará em conta o
     agrupamento.

     Se 'monetary' for verdadeiro, a conversão usa o separador de
     milhares monetários e strings de agrupamento.

     Processa especificadores de formatação como em ‘format % val’, mas
     leva as configurações de localidade atuais em consideração.

     Alterado na versão 3.7: O parâmetro nomeado 'monetary' foi
     adicionado.

 -- Função: locale.currency (val, symbol=True, grouping=False,
          international=False)

     Formata um número 'val' de acordo com as configurações atuais de
     *note LC_MONETARY: 3f47.

     A string retornada inclui o símbolo da moeda se 'symbol' for
     verdadeiro, que é o padrão.  Se 'grouping' for ‘True’ (o que não é
     o padrão), o agrupamento é feito com o valor.  Se 'international'
     for ‘True’ (o que não é o padrão), o símbolo da moeda internacional
     será usado.

          Nota: Esta função não funcionará com a localidade ‘C’, então
          você deve definir uma localidade via *note setlocale(): 2db.
          primeiro.

 -- Função: locale.str (float)

     Formata um número de ponto flutuante usando o mesmo formato da
     função embutida ‘str(float)’, mas leva o ponto decimal em
     consideração.

 -- Função: locale.delocalize (string)

     Converte uma string em uma string numérica normalizada, seguindo as
     configurações de *note LC_NUMERIC: 3f45.

     Adicionado na versão 3.5.

 -- Função: locale.localize (string, grouping=False, monetary=False)

     Converte uma string numérica normalizada em uma string formatada,
     seguindo as configurações de *note LC_NUMERIC: 3f45.

     Adicionado na versão 3.10.

 -- Função: locale.atof (string, func=float)

     Converte uma string para um número, de acordo com o valor da
     constante *note LC_NUMERIC: 3f45, chamando 'func' com o resultado
     da chamada à *note delocalize(): e52. em 'string'.

 -- Função: locale.atoi (string)

     Converte uma string em um número inteiro, seguindo as convenções de
     *note LC_NUMERIC: 3f45.

 -- Dado: locale.LC_CTYPE

     Categoria da localidade para as funções de tipo de caracteres.
     Mais importante ainda, essa categoria define a codificação do
     texto, ou seja, como os bytes são interpretado como pontos de
     código Unicode.  Consulte PEP 538(3) e PEP 540(4) para saber como
     essa variável pode ser automaticamente coagida para ‘C.UTF-8’ para
     evitar problemas criados por configurações inválidas em contêineres
     ou configurações incompatíveis passadas por conexões remotas com
     SSH.

     O Python não usa internamente funções de transformação de
     caracteres dependente de localidade do ‘ctype.h’.  Em vez disso,
     ‘pyctype.h’ fornece equivalentes independentes de localidade como
     *note Py_TOLOWER: 139e.

 -- Dado: locale.LC_COLLATE

     Categoria da localidade para classificação de strings.  As funções
     *note strcoll(): 3f82. e *note strxfrm(): 15f3. do módulo *note
     locale: 86. são afetadas.

 -- Dado: locale.LC_TIME

     Categoria da localidade para a formatação de hora.  A função *note
     time.strftime(): 1229. segue essas convenções.

 -- Dado: locale.LC_MONETARY

     Categoria da localidade para formatação de valores monetários.  As
     opções disponíveis estão disponíveis na função *note localeconv():
     c18.

 -- Dado: locale.LC_MESSAGES

     Categoria da localidade para exibição de mensagens.  Python
     atualmente não oferece suporte a mensagens com reconhecimento de
     localidade específicas da aplicação.  Mensagens exibidas pelo
     sistema operacional, como aquelas retornadas por *note
     os.strerror(): 2d04. podem ser afetadas por esta categoria.

     Esse valor pode não estar disponível em sistemas operacionais que
     não estejam em conformidade com o padrão POSIX, principalmente o
     Windows.

 -- Dado: locale.LC_NUMERIC

     Categoria da localidade para formatação de números.  As funções
     *note format_string(): 51f, *note atoi(): 3f88, *note atof(): 3f87.
     e *note str(): 3f85. do módulo *note locale: 86. são afetadas por
     essa categoria.  Todas as outras operações de formatação numérica
     não são afetadas.

 -- Dado: locale.LC_ALL

     Combinação de todas as configurações da localidade.  Se este
     sinalizador for usado quando a localidade for alterada, a
     configuração da localidade para todas as categorias será tentada.
     Se isso falhar para qualquer categoria, nenhuma categoria é
     alterada.  Quando a localidade é recuperada usando este
     sinalizador, uma string indicando a configuração para todas as
     categorias é retornada.  Esta string pode ser usada posteriormente
     para restaurar as configurações.

 -- Dado: locale.CHAR_MAX

     Esta é uma constante simbólica usada para diferentes valores
     retornados por *note localeconv(): c18.

* Menu:

* Histórico, detalhes, dicas, dicas e advertências: Histórico detalhes dicas dicas e advertências.
* Nomes de localidades::
* Para escritores de extensão e programas que incorporam Python::
* Acesso a catálogos de mensagens::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/locale.py

   (2) 
https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap07.html#tag_07_03_05_02

   (3) https://peps.python.org/pep-0538/

   (4) https://peps.python.org/pep-0540/


File: python.info,  Node: Histórico detalhes dicas dicas e advertências,  Next: Nomes de localidades,  Up: locale — Serviços de internacionalização

5.24.2.1 Histórico, detalhes, dicas, dicas e advertências
.........................................................

O padrão C define a localidade como uma propriedade de todo o programa
que pode ser relativamente cara para alterar.  Além disso, algumas
implementações são interrompidas de forma que mudanças frequentes de
localidade podem causar despejos de memória.  Isso torna a localidade um
tanto dolorosa de usar corretamente.

Inicialmente, quando um programa é iniciado, a localidade é a localidade
‘C’, não importa qual a localidade preferida do usuário.  Há uma
exceção: a categoria *note LC_CTYPE: 3f7f. é alterada na inicialização
para definir a codificação de localidade atual para a codificação de
localidade preferida do usuário.  O programa deve dizer explicitamente
que deseja as configurações de localidade preferidas do usuário para
outras categorias chamando ‘setlocale(LC_ALL, '')’.

Geralmente é uma má ideia chamar *note setlocale(): 2db. em alguma
rotina de biblioteca, já que como efeito colateral afeta todo o
programa.  Salvar e restaurar é quase tão ruim: é caro e afeta outras
threads que são executadas antes de as configurações serem restauradas.

Se, ao codificar um módulo para uso geral, você precisa de uma versão
independente da localidade de uma operação que é afetada pela localidade
(como certos formatos usados com *note time.strftime(): 1229.), você
terá que encontrar uma maneira de faça isso sem usar a rotina de
biblioteca padrão.  Melhor ainda é se convencer de que não há problema
em usar as configurações da localidade.  Apenas como último recurso,
você deve documentar que seu módulo não é compatível com configurações
de localidade não-‘C’.

A única maneira de realizar operações numéricas de acordo com a
localidade é usar as funções especiais definidas por este módulo: *note
atof(): 3f87, *note atoi(): 3f88, *note format_string(): 51f, *note
str(): 3f85.

Não há como realizar conversões de maiúsculas e minúsculas e
classificações de caracteres de acordo com a localidade.  Para strings
de texto (Unicode), isso é feito de acordo com o valor do caractere
apenas, enquanto para strings de byte, as conversões e classificações
são feitas de acordo com o valor ASCII do byte e bytes cujo bit alto
está definido (ou seja, bytes não ASCII ) nunca são convertidos ou
considerados parte de uma classe de caracteres, como letras ou espaços
em branco.


File: python.info,  Node: Nomes de localidades,  Next: Para escritores de extensão e programas que incorporam Python,  Prev: Histórico detalhes dicas dicas e advertências,  Up: locale — Serviços de internacionalização

5.24.2.2 Nomes de localidades
.............................

O formato do nome de localidade depende da plataforma, e o conjunto de
locais suportados pode depender da configuração do sistema.

Em plataformas Posix, isso geralmente tem o formato (1):

          language ["_" territory] ["." charset] ["@" modifier]

onde 'language' é um código de idioma de duas ou três letras da ISO
639(2), 'territory' é um código de país ou região de duas letras da ISO
3166(3), 'charset' é uma codificação de localidade e 'modifier' é um
nome de script, uma subtag de idioma, um identificador de ordem de
classificação ou outro modificador de localidade (por exemplo, “latin”,
“valencia”, “stroke” e “euro”).

No Windows, vários formatos são suportados.  (4)  (5)  Um subconjunto de
tags IETF BCP 47(6):

          language ["-" script] ["-" territory] ["." charset]
          language ["-" script] "-" territory "-" modifier

onde 'language' e 'territory' têm o mesmo significado que em Posix,
'script' é um código de script de quatro letras da ISO 15924(7) e
'modifier' é uma subtag de idioma, um identificador de ordem de
classificação ou modificador personalizado (por exemplo, “valencia”,
“stroke” ou “x-python”).  São aceitos os separadores hífen (‘'-'’) e
sublinhado (‘'_'’).  Somente a codificação UTF-8 é permitida para tags
BCP 47.

O Windows também oferece suporte a nomes de localidade no formato:

          language ["_" territory] ["." charset]

onde 'language' e 'territory' são nomes completos, como “English” e
“United States”, e 'charset' é um número de página de código (por
exemplo, “1252”) ou UTF-8.  Só é aceito o separador sublinhado neste
formato.

A localidade “C” é aceita em todas as plataformas.

   ---------- Footnotes ----------

   (1) IEEE Std 1003.1-2024; 8.2 Internationalization Variables
(https://pubs.opengroup.org/onlinepubs/9799919799/basedefs/V1_chap08.html#tag_08_02)

   (2) https://www.iso.org/iso-639-language-code

   (3) https://www.iso.org/iso-3166-country-codes.html

   (4) Nomes de localidade, idiomas e strings de país/região do UCRT
(https://learn.microsoft.com/pt-br/cpp/c-runtime-library/locale-names-languages-and-country-region-strings)

   (5) Nomes de localidade
(https://learn.microsoft.com/pt-br/windows/win32/intl/locale-names)

   (6) https://www.rfc-editor.org/info/bcp47

   (7) https://www.unicode.org/iso15924/


File: python.info,  Node: Para escritores de extensão e programas que incorporam Python,  Next: Acesso a catálogos de mensagens,  Prev: Nomes de localidades,  Up: locale — Serviços de internacionalização

5.24.2.3 Para escritores de extensão e programas que incorporam Python
......................................................................

Módulos de extensão nunca devem chamar *note setlocale(): 2db, exceto
para descobrir qual é a localidade atual.  Mas uma vez que o valor de
retorno só pode ser usado portavelmente para restaurá-lo, isso não é
muito útil (exceto talvez para descobrir se a localidade é ou não ‘C’).

Quando o código Python usa o módulo *note locale: 86. para alterar a
localidade, isso também afeta a aplicação de incorporação.  Se a
aplicação de incorporação não quiser que isso aconteça, ele deve remover
o módulo de extensão ‘_locale’ (que faz todo o trabalho) da tabela de
módulos embutidos no arquivo ‘config.c’ e certificar-se de que o módulo
‘_locale’ não está acessível como uma biblioteca compartilhada.


File: python.info,  Node: Acesso a catálogos de mensagens,  Prev: Para escritores de extensão e programas que incorporam Python,  Up: locale — Serviços de internacionalização

5.24.2.4 Acesso a catálogos de mensagens
........................................

 -- Função: locale.gettext (msg)

 -- Função: locale.dgettext (domain, msg)

 -- Função: locale.dcgettext (domain, msg, category)

 -- Função: locale.textdomain (domain)

 -- Função: locale.bindtextdomain (domain, dir)

 -- Função: locale.bind_textdomain_codeset (domain, codeset)

O módulo locale expõe a interface gettext da biblioteca C em sistemas
que fornecem essa interface.  Consiste nas funções *note gettext(): 63,
*note dgettext(): 3f92, *note dcgettext(): 3f93, *note textdomain():
3f94, *note bindtextdomain(): 3f95. e *note bind_textdomain_codeset():
3f96.  Elas são semelhantes às mesmas funções no módulo *note gettext:
63, mas usam o formato binário da biblioteca C para catálogos de
mensagens e os algoritmos de pesquisa da biblioteca C para localizar
catálogos de mensagens.

As aplicações Python normalmente não precisam invocar essas funções e
devem usar *note gettext: 63. em seu lugar.  Uma exceção conhecida a
esta regra são os aplicativos que se vinculam a bibliotecas C adicionais
que invocam internamente ‘gettext’ ou ‘dcgettext’.  Para essas
aplicações, pode ser necessário vincular o domínio de texto, para que as
bibliotecas possam localizar adequadamente seus catálogos de mensagens.


File: python.info,  Node: Interfaces gráficas de usuário com Tk,  Next: Ferramentas de Desenvolvimento,  Prev: Internacionalização,  Up: A Biblioteca Padrão do Python

5.25 Interfaces gráficas de usuário com Tk
==========================================

Tk/Tcl tem sido parte integrante do Python.  Ele fornece um kit de
ferramentas de janela robusto e independente de plataforma, que está
disponível para programadores Python usando o pacote *note tkinter: f0.
e sua extensão, o módulo *note tkinter.ttk: f9.

O pacote *note tkinter: f0. é uma fina camada orientada a objetos no
topo do Tcl/Tk.  Para usar *note tkinter: f0, você não precisa escrever
o código Tcl, mas precisará consultar a documentação do Tk e,
ocasionalmente, a documentação do Tcl.  *note tkinter: f0. é um conjunto
de envólucros que implementam os widgets Tk como classes Python.

As principais virtudes do *note tkinter: f0. são que ele é rápido, e que
geralmente vem junto com o Python.  Embora sua documentação padrão seja
fraca, um bom material está disponível, que inclui: referências,
tutoriais, um livro e outros.  *note tkinter: f0. também é famoso por
ter uma aparência desatualizada, que foi amplamente melhorada no Tk 8.5.
No entanto, existem muitas outras bibliotecas GUI nas quais você pode
estar interessado.  A wiki do Python lista várias frameworks e
ferramentas GUI(1) alternativas.

* Menu:

* tkinter — Interface Python para Tcl/Tk::
* tkinter.colorchooser — Diálogo de escolha de cor: tkinter colorchooser — Diálogo de escolha de cor.
* tkinter.font — Invólucro de fontes Tkinter: tkinter font — Invólucro de fontes Tkinter.
* Diálogos Tkinter::
* tkinter.messagebox — Prompts de mensagem do Tkinter: tkinter messagebox — Prompts de mensagem do Tkinter.
* tkinter.scrolledtext — Widget de texto de rolado: tkinter scrolledtext — Widget de texto de rolado.
* tkinter.dnd — Suporte para arrastar e soltar: tkinter dnd — Suporte para arrastar e soltar.
* tkinter.ttk — Widgets temáticos do Tk: tkinter ttk — Widgets temáticos do Tk.
* IDLE — editor e console Python: IDLE — editor e console Python<2>.
* turtle — Gráficos tartaruga::

   ---------- Footnotes ----------

   (1) https://wiki.python.org/moin/GuiProgramming


File: python.info,  Node: tkinter — Interface Python para Tcl/Tk,  Next: tkinter colorchooser — Diálogo de escolha de cor,  Up: Interfaces gráficas de usuário com Tk

5.25.1 ‘tkinter’ — Interface Python para Tcl/Tk
-----------------------------------------------

'Código-fonte:' Lib/tkinter/__init__.py(1)

__________________________________________________________________

O pacote *note tkinter: f0. (“Tk interface”) é a interface padrão do
Python e faz parte do kit de ferramentas Tcl/Tk GUI. Tanto o Tk quanto o
*note tkinter: f0. estão disponíveis na maioria das plataformas Unix,
incluindo macOS, bem como em sistemas Windows.

Executar ‘python -m tkinter’ na linha de comando deve abrir uma janela
demonstrando uma interface Tk simples, informando que *note tkinter: f0.
está apropriadamente instalado em seu sistema, e também mostrando qual
versão do Tcl/Tk está instalado, para que você possa ler a documentação
do Tcl/Tk específica para essa versão.

Tkinter tem suporte a uma gama de versões Tcl/Tk, compiladas com ou sem
suporte a thread.  O lançamento oficial do binário Python agrupa Tcl/Tk
8.6 em thread.  Veja o código-fonte do módulo *note _tkinter: 3. para
mais informações sobre as versões suportadas.

O Tkinter não é um invólucro fino, mas adiciona uma boa quantidade de
sua própria lógica para tornar a experiência mais pythônica.  Esta
documentação se concentrará nessas adições e mudanças, e consulte a
documentação oficial do Tcl/Tk para detalhes que não foram alterados.

     Nota: Tcl/Tk 8.5 (2007) introduziu um conjunto moderno de
     componentes de interface de usuário para ser usados com a nova API.
     As APIs antigas e novas ainda estão disponíveis.  A maioria da
     documentação que você encontrará online ainda usa a API antiga e
     pode estar desatualizada.

Ver também
..........

   * 
     TkDocs(2)

          Um extenso tutorial sobre como criar interfaces de usuário com
          o Tkinter.  Explica conceitos chave, e ilustra as abordagens
          recomendadas usando a API moderna.

   * 
     Referência do Tkinter 8.5: uma GUI para Python(3)

          Documentação de referência para Tkinter 8.5 detalhando
          classes, métodos e opções disponíveis.

Recursos Tcl/Tk:

   * 
     Comandos Tk(4)

          Referência abrangente para cada um dos comandos Tcl/Tk
          subjacentes usados pelo Tkinter.

   * 
     Tcl/Tk Website(5)

          Documentação adicional e links para o desenvolvimento do core
          do Tcl/Tk.

Livros:

   * 
     Modern Tkinter for Busy Python Developers(6)

          Por Mark Roseman.  (ISBN 978-1999149567)

   * 
     Python GUI programming with Tkinter(7)

          por Alan D. Moore.  (ISBN 978-1788835886)

   * 
     Programming Python(8)

          Por Mark Lutz; tem uma excelente cobertura sobre o Tkinter.
          (ISBN 978-0596158101)

   * 
     Tcl and the Tk Toolkit (2nd edition)(9)

          Por John Ousterhout, criador do Tcl/Tk, e Ken Jones; não cobre
          o Tkinter.  (ISBN 978-0321336330)

* Menu:

* Arquitetura::
* Módulos Tkinter::
* Preservador de vida Tkinter::
* Modelo de threading::
* Referência Útil::
* Tratadores de arquivos::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/tkinter/__init__.py

   (2) https://tkdocs.com/

   (3) https://www.tkdocs.com/shipman/'

   (4) https://www.tcl.tk/man/tcl8.6/TkCmd/contents.htm

   (5) https://www.tcl.tk

   (6) https://tkdocs.com/book.html

   (7) 
https://www.packtpub.com/en-br/product/python-gui-programming-with-tkinter-9781788835886

   (8) https://learning-python.com/about-pp4e.html

   (9) https://www.amazon.com/exec/obidos/ASIN/032133633X


File: python.info,  Node: Arquitetura,  Next: Módulos Tkinter,  Up: tkinter — Interface Python para Tcl/Tk

5.25.1.1 Arquitetura
....................

Tcl/Tk não é uma biblioteca única mas consiste em alguns módulos
distintos, cada um com sua própria funcionalidade e sua própria
documentação oficial.  As versões binárias do Python também incluem um
módulo adicional junto com ele.

Tcl

     Tcl é uma linguagem de programação interpretada dinâmica, assim
     como Python.  Embora possa ser usado sozinho como uma linguagem de
     programação de propósito geral, é mais comumente embutido em
     aplicativos C como um mecanismo de script ou uma interface para o
     kit de ferramentas Tk.  A biblioteca Tcl tem uma interface C para
     criar e gerenciar uma ou mais instâncias de um interpretador Tcl,
     executar comandos e scripts Tcl nessas instâncias e adicionar
     comandos personalizados implementados em Tcl ou C. Cada
     interpretador tem uma fila de eventos, e há instalações para enviar
     eventos e processá-los.  Ao contrário do Python, o modelo de
     execução do Tcl é projetado em torno da multitarefa cooperativa, e
     o Tkinter faz a ponte entre essa diferença (veja *note Modelo de
     threading: 3f9e. para detalhes).

Tk

     Tk é um pacote Tcl(1) implementado em C que adiciona comandos
     personalizados para criar e manipular widgets GUI. Cada objeto
     *note Tk: 1722. incorpora sua própria instância do interpretador
     Tcl com Tk carregado nele.  Os widgets do Tk são muito
     personalizáveis, embora ao custo de uma aparência desatualizada.
     Tk usa a fila de eventos do Tcl para gerar e processar eventos da
     GUI.

Ttk

     Themed Tk (Ttk) é uma família mais recente de widgets Tk que
     fornecem uma aparência muito melhor em diferentes plataformas do
     que muitos dos widgets Tk clássicos.  O Ttk é distribuído como
     parte do Tk, começando com o Tk versão 8.5.  As ligações Python são
     fornecidas em um módulo separado, *note tkinter.ttk: f9.

Internamente, Tk e Ttk usam recursos do sistema operacional, ou seja,
Xlib no Unix/X11, Cocoa no macOS, GDI no Windows.

Quando sua aplicação Python usa uma classe do Tkinter, por exemplo, para
criar um widget, o módulo *note tkinter: f0. primeiro monta uma
sequência de comando Tcl/Tk.  Ele passa essa sequência de comando Tcl
para um módulo binário interno *note _tkinter: 3, que então chama o
interpretador Tcl para avaliá-lo.  O interpretador Tcl então chamará os
pacotes Tk e/ou Ttk, que por sua vez farão chamadas para Xlib, Cocoa ou
GDI.

   ---------- Footnotes ----------

   (1) https://wiki.tcl-lang.org/37432


File: python.info,  Node: Módulos Tkinter,  Next: Preservador de vida Tkinter,  Prev: Arquitetura,  Up: tkinter — Interface Python para Tcl/Tk

5.25.1.2 Módulos Tkinter
........................

O suporte para Tkinter está espalhado por vários módulos.  A maioria dos
aplicativos precisará do módulo *note tkinter: f0. principal, bem como
do módulo *note tkinter.ttk: f9, que fornece o conjunto de widgets
temáticos modernos e a API:

     from tkinter import *
     from tkinter import ttk

 -- Classe: tkinter.Tk (screenName=None, baseName=None, className='Tk',
          useTk=True, sync=False, use=None)

     Construa um Tk widget de alto nível, sendo esse, geralmente, a
     janela principal de uma aplicação, e inicialize um interpretador
     Tcl para esse widget.  Cada instância tem seu próprio interpretador
     Tcl associado.

     A classe *note Tk: 1722. normalmente é instanciada usando todos os
     valores padrão.  No entanto, os seguintes argumentos nomeados são
     reconhecidos atualmente:

     'screenName'

          Quando fornecido (como uma string), define a variável de
          ambiente ‘DISPLAY’.  (Somente X11)

     'baseName'

          Nome do arquivo de perfil.  Por padrão, 'baseName' é derivado
          do nome do programa (‘sys.argv[0]’).

     'className'

          Nome da classe widget.  Usado como um arquivo de perfil e
          também como o nome com o qual Tcl é invocado ('argv0' em
          'interp').

     'useTk'

          Se ‘True’, inicialize o subsistema Tk.  A função *note
          tkinter.Tcl(): 3fa0. define isso como ‘False’.

     'sync'

          Se ‘True’, execute todos os comandos do servidor X de forma
          síncrona, para que os erros sejam relatados imediatamente.
          Pode ser usado para depuração.  (Somente X11)

     'use'

          Especifica o 'id' da janela na qual inserir a aplicação, em
          vez de criá-la como uma janela de nível superior separada.  O
          'id' deve ser especificado da mesma forma que o valor da opção
          -use para widgets de nível superior (ou seja, tem um formato
          como o retornado por ‘winfo_id()’).

          Observe que em algumas plataformas isso só funcionará
          corretamente se 'id' se referir a um frame Tk ou nível
          superior que tenha sua opção -container habilitada.

     *note Tk: 1722. lê e interpreta os arquivos de perfil, chamados
     ‘.`className'.tcl’ e ‘.`baseName'.tcl’, por meio do interpretador
     Tcl e chama *note exec(): 17f. no conteúdo de ‘.`className'.py’ e
     ‘.`baseName'.py’.  O caminho para os arquivos de perfil encontra-se
     na variável de ambiente ‘HOME’ ou, se não estiver definida, então
     *note os.curdir: 2990.

      -- Atributo: tk

          Objeto da aplicação Tk criado ao instanciar *note Tk: 1722.
          Isso fornece acesso ao interpretador Tcl.  Cada widget anexado
          à mesma instância de *note Tk: 1722. tem o mesmo valor para o
          atributo *note tk: 3fa1.

      -- Atributo: master

          The widget object that contains this widget.  For *note Tk:
          1722, the ‘master’ is *note None: 675. because it is the main
          window.  The terms 'master' and 'parent' are similar and
          sometimes used interchangeably as argument names; however,
          calling ‘winfo_parent()’ returns a string of the widget name
          whereas ‘master’ returns the object.  'parent'/'child'
          reflects the tree-like relationship while 'master' (or
          'container')/'content' reflects the container structure.

      -- Atributo: children

          Descendentes diretos deste widget como um *note dict: 256. com
          os nomes do widget filho como a chave e os objetos de
          instância filho como o valor.

 -- Função: tkinter.Tcl (screenName=None, baseName=None, className='Tk',
          useTk=False)

     A função *note Tcl(): 3fa0. é uma função fábrica que cria um objeto
     assim como o criado pela classe *note Tk: 1722, exceto por não
     inicializar o subsistema Tk.  Isto é útil quando executando o
     interpretador Tcl em um ambiente onde não se quer criar janelas de
     alto nível externas, ou quando não se pode (como em sistemas
     Unix/Linux sem um servidor X). Um objeto criado pelo objeto *note
     Tcl(): 3fa0. pode ter uma janela de alto nível criada (e o
     subsistema Tk inicializado) chamando o método ‘loadtk()’.

Os módulos que fornecem suporte ao Tk incluem:

*note tkinter: f0.

     Módulo principal Tkinter.

*note tkinter.colorchooser: f1.

     Caixa de diálogo para permitir que o usuário escolha uma cor.

*note tkinter.commondialog: f2.

     Classe base para os diálogos definidos nos outros módulos listados
     aqui.

*note tkinter.filedialog: f4.

     Diálogos comuns para permitir ao usuário especificar um arquivo
     para abrir ou salvar.

*note tkinter.font: f5.

     Utilitários para ajudar a trabalhar com fontes.

*note tkinter.messagebox: f6.

     Acesso às caixas de diálogo padrão do Tk.

*note tkinter.scrolledtext: f7.

     Componente de texto com uma barra de rolagem vertical integrada.

*note tkinter.simpledialog: f8.

     Diálogos básicos e funções de conveniência.

*note tkinter.ttk: f9.

     Conjunto de widgets temáticos introduzidos no Tk 8.5, fornecendo
     alternativas modernas para muitos dos widgets clássicos no módulo
     principal *note tkinter: f0.

Módulos adicionais:

*note _tkinter: 3.

     Um módulo binário que contém a interface de baixo nível para
     Tcl/Tk.  Ele é importado automaticamente pelo módulo principal
     *note tkinter: f0. e nunca deve ser usado diretamente.  Geralmente
     é uma biblioteca compartilhada (ou DLL), mas pode, em alguns casos,
     ser vinculada estaticamente ao interpretador Python.

*note idlelib: 73.

     Ambiente Integrado de Desenvolvimento e Aprendizagem do Python
     (IDLE). Baseado em *note tkinter: f0.

‘tkinter.constants’

     Constantes simbólicas que podem ser usadas no lugar de strings ao
     passar vários parâmetros para chamadas Tkinter.  Este módulo é
     importado automaticamente pelo módulo principal *note tkinter: f0.

*note tkinter.dnd: f3.

     (experimental) Suporte de arrastar e soltar para *note tkinter: f0.
     Será descontinuado quando for substituído pelo Tk DND.

*note turtle: 101.

     Gráficos tartaruga em uma janela Tk.


File: python.info,  Node: Preservador de vida Tkinter,  Next: Modelo de threading,  Prev: Módulos Tkinter,  Up: tkinter — Interface Python para Tcl/Tk

5.25.1.3 Preservador de vida Tkinter
....................................

Esta seção não foi projetada para ser um tutorial exaustivo sobre Tk ou
Tkinter.  Para isso, consulte um dos recursos externos mencionados
anteriormente.  Em vez disso, esta seção fornece uma orientação muito
rápida sobre como é uma aplicação Tkinter, identifica os conceitos
fundamentais do Tk e explica como o wrapper do Tkinter é estruturado.

O restante desta seção ajudará a identificar as classes, métodos e
opções que você precisará em uma aplicação Tkinter e onde encontrar
documentação mais detalhada sobre isso, inclusive no guia de referência
oficial do Tcl/Tk.

* Menu:

* Um programa Olá Mundo::
* Conceitos importantes do Tk::
* Entendendo como Tkinter envolve Tcl/Tk::
* Como é que eu…? Que opção faz…?::
* Navegando no Manual de Referência Tcl/Tk::


File: python.info,  Node: Um programa Olá Mundo,  Next: Conceitos importantes do Tk,  Up: Preservador de vida Tkinter

5.25.1.4 Um programa Olá Mundo
..............................

Começaremos a explorar o Tkinter através de uma simples aplicação “Hello
World”.  Esta não é a menor aplicação que poderíamos escrever, mas tem o
suficiente para ilustrar alguns conceitos-chave que você precisa saber.

     from tkinter import *
     from tkinter import ttk
     root = Tk()
     frm = ttk.Frame(root, padding=10)
     frm.grid()
     ttk.Label(frm, text="Hello World!").grid(column=0, row=0)
     ttk.Button(frm, text="Quit", command=root.destroy).grid(column=1, row=0)
     root.mainloop()

Após as importações, a próxima linha será criar a instância da classe
‘Tk’ que inicia Tk e cria o interpretador associado a Tcl.  Ele também
cria uma janela de nível superior, conhecida como janela raiz, que serve
como a janela principal da aplicação.

A linha a seguir cria um frame widget , que neste caso conterá um rótulo
e um botão que criaremos a seguir.  O frame se encaixa dentro da janela
raiz.

A próxima linha cria um rótulo widget contendo uma string de texto
estático.  O método ‘grid()’ é utilizado para especificar o layout
relativo (posição) do rótulo dentro do frame widget, semelhante a como
as tabelas em HTML funcionam.

Então um widget de botão é criado, e posicionado à direita do rótulo.
Quando pressionado, irá chamar o método ‘destroy()’ da janela raiz.

Por fim, o método ‘destroy()’ coloca tudo no display, e responde à
entrada do usuário até que o programa termine.


File: python.info,  Node: Conceitos importantes do Tk,  Next: Entendendo como Tkinter envolve Tcl/Tk,  Prev: Um programa Olá Mundo,  Up: Preservador de vida Tkinter

5.25.1.5 Conceitos importantes do Tk
....................................

Mesmo com este programa simples, os conceitos-chave do Tk podem ser
mostrados:

widgets

     A interface de usuário do Tkinter é composta de 'widgets'
     individuais.  Cada widget é representado como um objeto Python,
     instanciado de classes como ‘ttk.Frame’, ‘ttk.Label’, e
     ‘ttk.Button’.

hierarquia dos widgets

     Os widgets são organizados em uma 'hierarquia'.  O rótulo e botão
     estavam contidos em um frame, que por sua vez estava contido na
     janela raiz.  Quando criamos um widget 'filho', seu widget 'pai' é
     passado como primeiro argumento para o construtor do widget.

opções de configuração

     Widgets possuem 'opções de configuração', que modificam sua
     aparência e comportamento, como o texto a ser exibido em um rótulo
     ou botão.  Diferentes classes de widgets terão diferentes conjuntos
     de opções.

gerenciamento de geometria

     Os widgets não são automaticamente adicionados à interface de
     usuário quando eles são criados.  Um 'gerenciador de geometria'
     como ‘grid’ controla onde na interface de usuário eles são
     colocados.

loop de eventos

     O Tkinter reage à entrada do usuário, muda de seu programa, e até
     mesmo atualiza a tela somente ao executar ativamente um 'loop de
     eventos'.  Se o seu programa não estiver executando o loop de
     eventos, sua interface de usuário não será atualizada.


File: python.info,  Node: Entendendo como Tkinter envolve Tcl/Tk,  Next: Como é que eu…? Que opção faz…?,  Prev: Conceitos importantes do Tk,  Up: Preservador de vida Tkinter

5.25.1.6 Entendendo como Tkinter envolve Tcl/Tk
...............................................

Quando a sua aplicação utiliza as classes e métodos do Tkinter,
internamente o Tkinter está montando strings representando comandos
Tcl/Tk e executando esses comandos no interpretador Tcl anexado à
instância ‘Tk’ de sua aplicação.

Seja tentando navegar na documentação de referência, tentando encontrar
o método ou opção certa, adaptando algum código existente ou depurando
seu aplicativo Tkinter, há momentos em que será útil entender como são
os comandos Tcl/Tk subjacentes.

Para ilustrar, aqui está o equivalente Tcl/Tk da parte principal do
script Tkinter acima.

     ttk::frame .frm -padding 10
     grid .frm
     grid [ttk::label .frm.lbl -text "Hello World!"] -column 0 -row 0
     grid [ttk::button .frm.btn -text "Quit" -command "destroy ."] -column 1 -row 0

A sintaxe do Tcl é semelhante a muitas linguagens de shell, onde a
primeira palavra é o comando a ser executado, seguido de argumentos para
esse comando separados por espaços.  Sem entrar em muitos detalhes,
observe o seguinte:

   * Os comandos usados para criar widgets (como ‘ttk::frame’)
     correspondem a classes de widgets no Tkinter.

   * As opções de widget Tcl (como ‘-text’) correspondem a argumentos
     nomeados no Tkinter.

   * Widgets são referenciados por um 'pathname' em Tcl (like
     ‘.frm.btn’), enquanto o Tkinter não utiliza nomes, mas referências
     a objetos.

   * O lugar de um widget na hierarquia widget é codificado em seu
     pathname (hierárquico), que utiliza um ‘.’ (ponto) como um
     separador de caminho.  O pathname para a janela raiz é apenas ‘.’
     (ponto).  No Tkinter, a hierarquia é definida não pelo pathname,
     mas pela especificação do widget pai ao criar cada widget filho.

   * Operações que são implementadas como 'comandos' separados em Tcl
     (como ‘grid’ ou ‘destroy’) são representadas como 'métodos' em
     objetos de widget Tkinter.  Como você verá em breve, em outras
     ocasiões o Tcl usa o que parecem ser chamadas de método em objetos
     widget, que espelham mais de perto o que é usado no Tkinter.


File: python.info,  Node: Como é que eu…? Que opção faz…?,  Next: Navegando no Manual de Referência Tcl/Tk,  Prev: Entendendo como Tkinter envolve Tcl/Tk,  Up: Preservador de vida Tkinter

5.25.1.7 Como é que eu…? Que opção faz…?
........................................

Se você não tem certeza de como fazer algo no Tkinter e não consegue
encontrá-lo imediatamente no tutorial ou na documentação de referência
que está usando, existem algumas estratégias que podem ser úteis.

Primeiro, lembre-se de que os detalhes de como os widgets individuais
funcionam podem variar entre diferentes versões tanto do Tkinter quanto
do Tcl/Tk.  Se você estiver procurando por documentação, certifique-se
de que corresponda às versões do Python e Tcl/Tk instaladas em seu
sistema.

Ao procurar como usar uma API, é útil saber o nome exato da classe,
opção ou método que você está usando.  A introspecção, seja em um
console Python interativo ou com a *note print(): fa9, pode ajudar a
identificar o que você precisa.

Para descobrir quais opções de configuração estão disponíveis em
qualquer widget, chame o método ‘configure()’, que retorna um dicionário
contendo uma variedade de informações sobre cada objeto, incluindo seus
valores padrão e atuais.  Use ‘keys()’ para obter apenas os nomes de
cada opção.

     btn = ttk.Button(frm, ...)
     print(btn.configure().keys())

Como a maioria dos widgets tem muitas opções de configuração em comum,
pode ser útil descobrir quais são específicas para uma determinada
classe de widget.  Comparar a lista de opções com a de um widget mais
simples, como um frame, é uma maneira de fazer isso.

     print(set(btn.configure().keys()) - set(frm.configure().keys()))

Da mesma forma, você pode encontrar os métodos disponíveis para um
objeto widget usando a função padrão *note dir(): 632.  Se você tentar,
verá que existem mais de 200 métodos comuns de widget, então identificar
aqueles específicos para uma classe de widget é útil.

     print(dir(btn))
     print(set(dir(btn)) - set(dir(frm)))


File: python.info,  Node: Navegando no Manual de Referência Tcl/Tk,  Prev: Como é que eu…? Que opção faz…?,  Up: Preservador de vida Tkinter

5.25.1.8 Navegando no Manual de Referência Tcl/Tk
.................................................

Como observado, o manual (páginas man) de referência oficial dos
comandos Tk(1) é frequentemente a descrição mais precisa do que
operações específicas em widgets fazem.  Mesmo quando você sabe o nome
da opção ou método que você precisa, você ainda pode ter alguns lugares
para procurar.

Enquanto todas as operações no Tkinter são implementadas como chamadas
de método em objetos de widget, você viu que muitas operações Tcl/Tk
aparecem como comandos que recebem um caminho de widget como seu
primeiro parâmetro, seguido de parâmetros opcionais, por exemplo.

     destroy .
     grid .frm.btn -column 0 -row 0

Outros, no entanto, parecem mais com métodos chamados em um objeto
widget (na verdade, quando você cria um widget em Tcl/Tk, ele cria um
comando Tcl com o nome do caminho do widget, sendo o primeiro parâmetro
desse comando o nome de um método a ser chamado).

     .frm.btn invoke
     .frm.lbl configure -text "Goodbye"

Na documentação oficial de referência do Tcl/Tk, você encontrará a
maioria das operações que se parecem com chamadas de método na página
man de um widget específico (por exemplo, você encontrará o método
‘invoke()’ na página man do ttk::button(2)), enquanto as funções que
recebem um widget como parâmetro geralmente têm sua própria página man
(por exemplo, grid(3)).

Você encontrará muitas opções e métodos comuns nas páginas man
options(4) e ttk::widget(5), enquanto outros são encontrados na página
man para uma classe de widget específica.

Você também encontrará que muitos métodos do Tkinter têm nomes
compostos, por exemplo, ‘winfo_x()’, ‘winfo_height()’,
‘winfo_viewable()’.  Você encontra documentação para todos eles na
página man winfo(6).

     Nota: De forma bem confusa, também existem métodos em todos os
     widgets do Tkinter que na verdade não operam no widget, mas operam
     em um escopo global, independente de qualquer widget.  Exemplos são
     métodos para acessar a área de transferência ou o sinal do sistema.
     (Eles são implementados como métodos na classe base ‘Widget’ da
     qual todos os widgets do Tkinter herdam).

   ---------- Footnotes ----------

   (1) https://www.tcl.tk/man/tcl8.6/TkCmd/contents.htm

   (2) https://www.tcl.tk/man/tcl8.6/TkCmd/ttk_button.htm

   (3) https://www.tcl.tk/man/tcl8.6/TkCmd/grid.htm

   (4) https://www.tcl.tk/man/tcl8.6/TkCmd/options.htm

   (5) https://www.tcl.tk/man/tcl8.6/TkCmd/ttk_widget.htm

   (6) https://www.tcl.tk/man/tcl8.6/TkCmd/winfo.htm


File: python.info,  Node: Modelo de threading,  Next: Referência Útil,  Prev: Preservador de vida Tkinter,  Up: tkinter — Interface Python para Tcl/Tk

5.25.1.9 Modelo de threading
............................

Python e Tcl/Tk têm modelos de threading muito diferentes, que *note
tkinter: f0. tenta fazer a ponte.  Se você usa threads, pode precisar
estar ciente disso.

Um interpretador Python pode ter muitas threads associados a ele.  Em
Tcl, várias threads podem ser criadas, mas cada thread tem uma instância
de interpretador Tcl separada associada a ele.  Threads também podem
criar mais de uma instância do interpretador, embora cada instância do
interpretador possa ser usada apenas pela thread que a criou.

Cada objeto ‘Tk’ criado por *note tkinter: f0. contém um interpretador
Tcl.  Ele também controla qual thread criou aquele interpretador.
Chamadas para *note tkinter: f0. podem ser feitas a partir de qualquer
thread do Python.  Internamente, se uma chamada vier de um thread
diferente daquele que criou o objeto ‘Tk’, um evento é postado na fila
de eventos do interpretador e, quando executado, o resultado é retornado
ao thread de chamada do Python.

As aplicações Tcl/Tk são normalmente orientadas a eventos, o que
significa que após a inicialização, o interpretador executa um laço de
eventos (ou seja ‘Tk.mainloop()’) e responde aos eventos.  Por ser de
thread única, os tratadores de eventos devem responder rapidamente, caso
contrário, bloquearão o processamento de outros eventos.  Para evitar
isso, quaisquer cálculos de longa execução não devem ser executados em
um tratador de eventos, mas são divididos em pedaços menores usando
temporizadores ou executados em outra thread.  Isso é diferente de
muitos kits de ferramentas de GUI em que a GUI é executada em um thread
completamente separado de todo o código do aplicação, incluindo
tratadores de eventos.

Se o interpretador Tcl não estiver executando o laço de eventos e
processando eventos, qualquer chamada *note tkinter: f0. feita de
threads diferentes daquela que está executando o interpretador do Tcl
irá falhar.

Existem vários casos especiais:

   * Bibliotecas Tcl/Tk podem ser construídas de forma que não
     reconheçam thread.  Neste caso, *note tkinter: f0. chama a
     biblioteca da thread originadora do Python, mesmo que seja
     diferente da thread que criou o interpretador Tcl.  Uma trava
     global garante que apenas uma chamada ocorra por vez.

   * Enquanto *note tkinter: f0. permite que você crie mais de uma
     instância de um objeto ‘Tk’ (com seu próprio interpretador), todos
     os interpretadores que fazem parte da mesma thread compartilham uma
     fila de eventos comum, o que fica muito rápido.  Na prática, não
     crie mais de uma instância de ‘Tk’ por vez.  Caso contrário, é
     melhor criá-los em threads separadas e garantir que você esteja
     executando uma construção Tcl/Tk com reconhecimento de thread.

   * Bloquear manipuladores de eventos não é a única maneira de evitar
     que o interpretador Tcl entre novamente no laço de eventos.  É
     ainda possível executar vários laços de eventos aninhados ou
     abandonar totalmente o laço de eventos.  Se você estiver fazendo
     algo complicado quando se trata de eventos ou threads, esteja
     ciente dessas possibilidades.

   * Existem algumas funções de seleção do *note tkinter: f0. que
     atualmente funcionam apenas quando chamadas a partir da thread que
     criou o interpretador Tcl.


File: python.info,  Node: Referência Útil,  Next: Tratadores de arquivos,  Prev: Modelo de threading,  Up: tkinter — Interface Python para Tcl/Tk

5.25.1.10 Referência Útil
.........................

* Menu:

* Opções de Definição::
* O Empacotador::
* Opções do Empacotador::
* Acoplando Variáveis de Widgets::
* O Gerenciador de Janela::
* Opções de Tipos de Dados do Tk::
* Ligações e Eventos::
* O Parâmetro index::
* Imagens::


File: python.info,  Node: Opções de Definição,  Next: O Empacotador,  Up: Referência Útil

5.25.1.11 Opções de Definição
.............................

As opções controlam coisas como a cor e a largura da borda de um widget.
As opções podem ser definidas de três maneiras:

No momento da criação do objeto, usando argumentos nomeados

          fred = Button(self, fg="red", bg="blue")

Após a criação do objeto, tratando o nome da opção como um índice de dicionário

          fred["fg"] = "red"
          fred["bg"] = "blue"

Use o método config() para atualizar vários attrs posteriores à criação do objeto

          fred.config(fg="red", bg="blue")

Para uma explicação completa de uma dada opção e seu comportamento, veja
as páginas man do Tk para o widget em questão.

Note que as páginas man listam “OPÇÕES PADRÃO” e “OPÇÕES DE WIDGET
ESPECÍFICO” para cada widget.  A primeira é uma lista de opções que são
comuns a vários widgets, e a segunda são opções que são idiossincráticas
ao widget em particular.  As Opções Padrão estão documentadas na página
man ‘options(3)(1)’.

Nenhuma distinção entre as opções padrão e específicas de widget são
feitas neste documento.  Algumas opções não se aplicam a alguns tipos de
widgets.  A resposta de um dado widget a uma opção particular depende da
classe do widget; botões possuem a opção ‘command’, etiquetas não.

As opções suportadas por um dado widget estão listadas na página man
daquele widget, ou podem ser consultadas no tempo de execução chamando o
método ‘config()’ sem argumentos, ou chamando o método ‘keys()’ daquele
widget.  O valor retornado por essas chamadas é um dicionário cujas
chaves são os nomes das opções como uma string (por exemplo, ‘'relief'’)
e cujos valores são tuplas de 5 elementos.

Algumas opções, como ‘bg’ são sinônimos para opções comuns com nomes
mais longos (‘bg’ é a abreviação de “background”, ou plano de fundo em
inglês).  Passando o nome de uma opção abreviada ao método ‘config()’
irá retornar uma tupla de 2 elementos, e não uma tupla de 5 elementos.
A tupla de 2 elementos devolvida irá conter o nome do sinônimo e a opção
“verdadeira” (como por exemplo em ‘('bg', 'background')’).

Índice      Significado                           Exemplo
                                                  
---------------------------------------------------------------------
                                                  
0           nome da opção                         ‘'relief'’
                                                  
                                                  
1           nome da opção para buscas de banco    ‘'relief'’
            de dados                              
            
                                                  
2           classe de opção para busca de banco   ‘'Relief'’
            de dados                              
            
                                                  
3           valor padrão                          ‘'raised'’
                                                  
                                                  
4           valor atual                           ‘'groove'’
                                                  

Exemplo:

     >>> print(fred.config())
     {'relief': ('relief', 'relief', 'Relief', 'raised', 'groove')}

É claro que o dicionário exibido irá incluir todas as opções disponíveis
e seus valores.  Isso foi apenas um exemplo.

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/options(3)


File: python.info,  Node: O Empacotador,  Next: Opções do Empacotador,  Prev: Opções de Definição,  Up: Referência Útil

5.25.1.12 O Empacotador
.......................

The packer is one of Tk’s geometry-management mechanisms.  Geometry
managers are used to specify the relative positioning of widgets within
their container.  In contrast to the more cumbersome 'placer' (which is
used less commonly, and we do not cover here), the packer takes
qualitative relationship specification - 'above', 'to the left of',
'filling', etc - and works everything out to determine the exact
placement coordinates for you.

The size of any container widget is determined by the size of the
“content widgets” inside.  The packer is used to control where content
widgets appear inside the container into which they are packed.  You can
pack widgets into frames, and frames into other frames, in order to
achieve the kind of layout you desire.  Additionally, the arrangement is
dynamically adjusted to accommodate incremental changes to the
configuration, once it is packed.

Note que os widgets não aparecem até que eles tenham sua geometria
especificada pelo gerenciador de geometria.  É um erro comum de
iniciantes deixar a geometria de fora da especificação, então se
surpreender que o widget é criado sendo que nada apareceu.  O widget irá
aparecer apenas quando tiver, por exemplo, o método método ‘pack()’ do
empacotador aplicado a ele.

O método pack() pode ser chamado com pares de palavra
reservada-opção/valor que controlam onde o widget deverá aparecer dentro
do seu contêiner, e como deverá se comportar quando a janela da
aplicação principal for redimensionada.  Aqui estão alguns exemplos:

     fred.pack()                     # tem como padrão side = "top"
     fred.pack(side="left")
     fred.pack(expand=1)


File: python.info,  Node: Opções do Empacotador,  Next: Acoplando Variáveis de Widgets,  Prev: O Empacotador,  Up: Referência Útil

5.25.1.13 Opções do Empacotador
...............................

Para uma informação mais completa do empacotador e as opções que pode
receber, veja as páginas man e a página 183 do livro do John Ousterhout.

anchor

     Anchor type.  Denotes where the packer is to place each content in
     its parcel.

expand

     Booleano, ‘0’ ou ‘1’.

fill

     Valores legais: ‘'x'’, ‘'y'’, ‘'both'’, ‘'none'’.

ipadx e ipady

     A distance - designating internal padding on each side of the
     content.

padx e pady

     A distance - designating external padding on each side of the
     content.

side

     Valores legais são: ‘'left'’, ‘'right'’, ‘'top'’, ‘'bottom'’.


File: python.info,  Node: Acoplando Variáveis de Widgets,  Next: O Gerenciador de Janela,  Prev: Opções do Empacotador,  Up: Referência Útil

5.25.1.14 Acoplando Variáveis de Widgets
........................................

A definição do valor atual de alguns widgets (como widgets de entrada de
texto) podem ser conectadas diretamente às variáveis da aplicação
utilizando métodos especiais.  Estas opções são ‘variable’,
‘textvariable’, ‘onvalue’, ‘offvalue’, e ‘value’.  A conexão funciona
por ambos os lados: Se por algum motivo a variável se altera, o widget
ao qual ela está conectada irá se atualizar para refletir este novo
valor.

Infelizmente, na atual implementação do *note tkinter: f0. não é
possível passar uma variável Python arbitrária para um widget por uma
opção ‘variable’ ou ‘textvariable’.  Os únicos tipos de variáveis para
as quais isso funciona são variáveis que são subclasses da classe
chamada Variable, definida em *note tkinter: f0.

Há muitas subclasses de Variable úteis já definidas: ‘StringVar’,
‘IntVar’, ‘DoubleVar’, e ‘BooleanVar’.  Para ler o atual valor de uma
variável, chame o método ‘get()’ nelas, e para alterar o valor você deve
chamar o método ‘set()’.  Se você seguir este protocolo, o widget irá
sempre acompanhar os valores da variável, sem nenhuma intervenção da sua
parte.

Por exemplo:

     import tkinter as tk

     class App(tk.Frame):
         def __init__(self, master):
             super().__init__(master)
             self.pack()

             self.entrythingy = tk.Entry()
             self.entrythingy.pack()

             # Cria a variável da aplicação.
             self.contents = tk.StringVar()
             # Define-a com algum valor.
             self.contents.set("this is a variable")
             # Fala para o widget de entrada para monitorar essa variável.
             self.entrythingy["textvariable"] = self.contents

             # Define um retorno de chamada para quando o usuário pressionar Enter.
             # Isso imprime o valor atual da variável.
             self.entrythingy.bind('<Key-Return>',
                                  self.print_contents)

         def print_contents(self, event):
             print("Hi. The current entry content is:",
                   self.contents.get())

     root = tk.Tk()
     myapp = App(root)
     myapp.mainloop()


File: python.info,  Node: O Gerenciador de Janela,  Next: Opções de Tipos de Dados do Tk,  Prev: Acoplando Variáveis de Widgets,  Up: Referência Útil

5.25.1.15 O Gerenciador de Janela
.................................

No Tk, existe um comando utilitário, ‘wm’, para interagir com o
gerenciador de janelas.  As opções do comando ‘wm’ permitem que você
controle coisas como títulos, localização, ícones bitmap, entre outros.
No *note tkinter: f0, estes comandos foram implementados como métodos da
classe ‘Wm’ class.  Widgets de mais alto nível são subclasses da classe
‘Wm’ e portanto podem chamar os métodos ‘Wm’ diretamente.

To get at the toplevel window that contains a given widget, you can
often just refer to the widget’s ‘master’.  Of course if the widget has
been packed inside of a frame, the ‘master’ won’t represent a toplevel
window.  To get at the toplevel window that contains an arbitrary
widget, you can call the ‘_root()’ method.  This method begins with an
underscore to denote the fact that this function is part of the
implementation, and not an interface to Tk functionality.

Aqui estão alguns exemplos de uso típico:

     import tkinter as tk

     class App(tk.Frame):
         def __init__(self, master=None):
             super().__init__(master)
             self.pack()

     # Cria a aplicação
     myapp = App()

     #
     # aqui estão as chamadas de método para a classe do gerenciador de janelas
     #
     myapp.master.title("Meu Aplicativo Que Faz Nada")
     myapp.master.maxsize(1000, 400)

     # inicia o programa
     myapp.mainloop()


File: python.info,  Node: Opções de Tipos de Dados do Tk,  Next: Ligações e Eventos,  Prev: O Gerenciador de Janela,  Up: Referência Útil

5.25.1.16 Opções de Tipos de Dados do Tk
........................................

anchor

     Valores legais são os pontos cardeais: ‘"n"’, ‘"ne"’, ‘"e"’,
     ‘"se"’, ‘"s"’, ‘"sw"’, ‘"w"’, ‘"nw"’, e também ‘"center"’.

bitmap

     Há 8 bitmaps embutidos nomeados: ‘'error'’, ‘'gray25'’, ‘'gray50'’,
     ‘'hourglass'’, ‘'info'’, ‘'questhead'’, ‘'question'’, ‘'warning'’.
     Para especificar um nome de arquivo do bitmap X, passe o caminho
     completo do arquivo, precedido pelo caractere ‘@’, como em
     ‘"@/usr/contrib/bitmap/gumby.bit"’.

booleano

     Você pode passar os inteiros 0 ou 1 ou as strings ‘"yes"’ ou
     ‘"no"’.

função de retorno

     Esta é uma função Python que não aceita argumentos.  Por exemplo:

          def print_it():
              print("hi there")
          fred["command"] = print_it

cor

     As cores podem ser fornecidas como nomes de cores X no arquivo
     rgb.txt ou como strings representando valores RGB em intervalos de
     4 bits: ‘"#RGB"’, 8 bit: ‘"#RRGGBB"’, 12 bit: ‘"#RRRGGGBBB"’ ou 16
     bit: ‘"#RRRRGGGGBBBB"’, onde R,G,B aqui representam qualquer dígito
     hexadecimal legal.  Veja a página 160 do livro de Ousterhout para
     detalhes.

cursor

     Os nomes de cursor X padrão de ‘cursorfont.h’ podem ser usados, sem
     o prefixo ‘XC_’.  Por exemplo, para obter um cursor de mão
     (‘XC_hand2’), use a string ‘"hand2"’.  Você também pode especificar
     um bitmap e um arquivo de máscara de sua preferência.  Veja a
     página 179 do livro de Ousterhout.

distance

     As distâncias da tela podem ser especificadas em pixels ou
     distâncias absolutas.  Pixels são dados como números e distâncias
     absolutas como strings, com os caracteres finais denotando
     unidades: ‘c’ para centímetros, ‘i’ para polegadas, ‘m’ para
     milímetros, ‘p’ para os pontos da impressora.  Por exemplo, 3,5
     polegadas é expresso como ‘"3.5i"’.

font

     Tk usa um formato de nome de fonte de lista, como ‘{courier 10
     bold}’.  Tamanhos de fonte com números positivos são medidos em
     pontos; tamanhos com números negativos são medidos em pixels.

geometria

     Esta é uma string no formato ‘widthxheight’, onde largura e altura
     são medidas em pixels para a maioria dos widgets (em caracteres
     para widgets que exibem texto).  Por exemplo: ‘fred["geometry"] =
     "200x100"’.

justify

     Valores aceitos são as strings: ‘"left"’, ‘"center"’ e ‘"right"’.

region

     Esta é uma string com quatro elementos delimitados por espaço, cada
     um dos quais a uma distância legal (veja acima).  Por exemplo: ‘"2
     3 4 5"’ e ‘"3i 2i 4.5i 2i"’ e ‘"3c 2c 4c 10.43c"’ são todas regiões
     legais.

relief

     Determina qual será o estilo da borda de um widget.  Os valores
     legais são: ‘"raised"’, ‘"sunken"’, ‘"flat"’, ‘"groove"’ e
     ‘"ridge"’.

scrollcommand

     Este é quase sempre o método ‘set()’ de algum widget da barra de
     rolagem, mas pode ser qualquer método de widget que receba um único
     argumento.

wrap

     Deve ser um de: ‘"none"’, ‘"char"’ ou ‘"word"’.


File: python.info,  Node: Ligações e Eventos,  Next: O Parâmetro index,  Prev: Opções de Tipos de Dados do Tk,  Up: Referência Útil

5.25.1.17 Ligações e Eventos
............................

O método de ligação do comando widget permite que você observe certos
eventos e tenha um acionamento de função de retorno de chamada quando
esse tipo de evento ocorrer.  A forma do método de ligação é:

     def bind(self, sequence, func, add=''):

sendo que:

sequência

     é uma string que denota o tipo de evento de destino.  (Veja a
     página man do ‘bind(3tk)(1)’ e a página 201 do livro de John
     Ousterhout, ‘Tcl and the Tk Toolkit (2nd edition)’, para mais
     detalhes).

func

     é uma função Python, tendo um argumento, a ser invocada quando o
     evento ocorre.  Uma instância de evento será passada como
     argumento.  (As funções implantadas dessa forma são comumente
     conhecidas como 'funções de retorno'.)

add

     é opcional, tanto ‘''’ ou ‘'+'’.  Passar uma string vazia indica
     que essa ligação substitui todas as outras ligações às quais esse
     evento está associado.  Passar um ‘'+'’ significa que esta função
     deve ser adicionada à lista de funções ligadas a este tipo de
     evento.

Por exemplo:

     def turn_red(self, event):
         event.widget["activeforeground"] = "red"

     self.button.bind("<Enter>", self.turn_red)

Observe como o campo widget do evento está sendo acessado na função de
retorno ‘turn_red()’.  Este campo contém o widget que capturou o evento
X. A tabela a seguir lista os outros campos de evento que você pode
acessar e como eles são denotados no Tk, o que pode ser útil ao se
referir às páginas man do Tk.

Tk       Campo de Eventos do       Tk       Campo de Eventos do
         Tkinter                            Tkinter
                                            
----------------------------------------------------------------------
                                            
%f       focus                     %A       char
                                            
                                            
%h       height                    %E       send_event
                                            
                                            
%k       keycode                   %K       keysym
                                            
                                            
%s       state                     %N       keysym_num
                                            
                                            
%t       time                      %T       tipo
                                            
                                            
%w       width                     %W       widget
                                            
                                            
%x       x                         %X       x_root
                                            
                                            
%y       y                         %Y       y_root
                                            

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/bind(3tk)


File: python.info,  Node: O Parâmetro index,  Next: Imagens,  Prev: Ligações e Eventos,  Up: Referência Útil

5.25.1.18 O Parâmetro index
...........................

Vários widgets requerem que parâmetros de “indx” sejam passados.  Eles
são usados para apontar para um local específico em um widget Text, ou
para caracteres específicos em um widget Entry, ou para itens de menu
específicos em um widget Menu.

Índices de widget de entrada (índice, índice de visualização, etc.)

     Os widgets de entrada têm opções que se referem às posições dos
     caracteres no texto exibido.  Você pode acessar esses pontos
     especiais em um widget de texto usando as seguintes funções *note
     tkinter: f0.:

Índice de widget de texto

     A notação de índice do widget de texto é muito rica e é melhor
     detalhada nas páginas do manual Tk.

Índices de menu (menu.invoke(), menu.entryconfig(), etc.)

     Algumas opções e métodos de menus manipulam entradas de menu
     específicas.  Sempre que um índice de menu é necessário para uma
     opção ou parâmetro, você pode passar:

        * um número inteiro que se refere à posição numérica da entrada
          no widget, contada do topo, começando com 0;

        * a string ‘"active"’, que se refere à posição do menu que está
          atualmente sob o cursor;

        * a string ‘"last"’ que se refere ao último item do menu;

        * Um inteiro precedido por ‘@’, como em ‘@6’, onde o inteiro é
          interpretado como uma coordenada de pixel y no sistema de
          coordenadas do menu;

        * a string ‘"none"’, que indica nenhuma entrada de menu, mais
          frequentemente usada com menu.activate() para desativar todas
          as entradas e, finalmente,

        * uma string de texto cujo padrão corresponde ao rótulo da
          entrada do menu, conforme varrido da parte superior do menu
          para a parte inferior.  Observe que este tipo de índice é
          considerado após todos os outros, o que significa que as
          correspondências para itens de menu rotulados como ‘last’,
          ‘active’ ou ‘none’ podem ser interpretadas como os literais
          acima, em vez disso.


File: python.info,  Node: Imagens,  Prev: O Parâmetro index,  Up: Referência Útil

5.25.1.19 Imagens
.................

Imagens de diferentes formatos podem ser criadas por meio da subclasse
correspondente de ‘tkinter.Image’:

   * ‘BitmapImage’ para imagens no formato XBM.

   * ‘PhotoImage’ para imagens nos formatos PGM, PPM, GIF e PNG. O
     suporte ao último foi adicionado a partir do Tk 8.6.

Qualquer tipo de imagem é criado através da opção ‘file’ ou ‘data’
(outras opções também estão disponíveis).

Alterado na versão 3.13: Adicionado o método ‘copy_replace()’ à classe
‘PhotoImage’ para copiar uma região de uma imagem para outra imagem,
possivelmente com ampliação e subamostragem de pixels.  Adiciona
parâmetro 'from_coords' para os métodos ‘copy()’, ‘zoom()’ e
‘subsample()’ da classe ‘PhotoImage’.  Adiciona parâmetros 'zoom' e
'subsample' para o método ‘copy()’ da classe ‘PhotoImage’.

O objeto imagem pode então ser usado sempre que uma opção ‘image’ há
suporte em algum widget (por exemplo: rótulos, botões, menus).  Nestes
casos, o Tk não guardará uma referência à imagem.  Quando a última
referência Python ao objeto imagem for excluída, os dados da imagem
também serão excluídos e o Tk exibirá uma caixa vazia onde quer que a
imagem tenha sido usada.

Ver também
..........

O pacote Pillow(1) adiciona suporte para formatos como BMP, JPEG, TIFF e
WebP, entre outros.

   ---------- Footnotes ----------

   (1) https://python-pillow.org/


File: python.info,  Node: Tratadores de arquivos,  Prev: Referência Útil,  Up: tkinter — Interface Python para Tcl/Tk

5.25.1.20 Tratadores de arquivos
................................

O Tk permite que você registre e cancele o registro de uma função de
retorno que será chamada a partir do laço central do Tk quando uma E/S
for possível em um descritor de arquivo.  Apenas um tratador pode ser
registrado por descritor de arquivo.  Código de exemplo:

     import tkinter
     widget = tkinter.Tk()
     mask = tkinter.READABLE | tkinter.WRITABLE
     widget.tk.createfilehandler(file, mask, callback)
     ...
     widget.tk.deletefilehandler(file)

Este recurso não está disponível no Windows.

Já que você não sabe quantos bytes estão disponíveis para leitura, você
pode não querer usar os métodos *note read(): 136d. ou *note readline():
241f. de *note BufferedIOBase: 694. ou *note TextIOBase: 695, já que
eles insistirão em ler uma quantidade predefinida de bytes.  Para
sockets, os métodos *note recv(): dcc. ou *note recvfrom(): dcd. vão
servir; para outros arquivos, use dados brutos ou
‘os.read(file.fileno(), maxbytecount)’.

 -- Método: Widget.tk.createfilehandler (file, mask, func)

     Registra a função de retorno do tratador de arquivo 'func'.  O
     argumento 'file' pode ser um objeto com um método *note fileno():
     15d0. (como um arquivo ou objeto soquete) ou um descritor de
     arquivo de inteiro.  O argumento 'mask' é uma combinação OR de
     qualquer uma das três constantes abaixo.  O retorno de chamada é
     chamado da seguinte maneira:

          callback(file, mask)

 -- Método: Widget.tk.deletefilehandler (file)

     Cancela o registro de um tratador de arquivo.

 -- Dado: _tkinter.READABLE
 -- Dado: _tkinter.WRITABLE
 -- Dado: _tkinter.EXCEPTION

     Constantes usadas nos argumentos 'mask'.


File: python.info,  Node: tkinter colorchooser — Diálogo de escolha de cor,  Next: tkinter font — Invólucro de fontes Tkinter,  Prev: tkinter — Interface Python para Tcl/Tk,  Up: Interfaces gráficas de usuário com Tk

5.25.2 ‘tkinter.colorchooser’ — Diálogo de escolha de cor
---------------------------------------------------------

'Código-fonte:' Lib/tkinter/colorchooser.py(1)

__________________________________________________________________

O módulo *note tkinter.colorchooser: f1. fornece a classe *note Chooser:
3fc0. como uma interface para o diálogo do seletor de cores nativo.
‘Chooser’ implementa uma janela de diálogo de escolha de cores modal.  A
classe ‘Chooser’ herda da classe *note Dialog: 3fc1.

 -- Classe: tkinter.colorchooser.Chooser (master=None, **options)

 -- Função: tkinter.colorchooser.askcolor (color=None, **options)

     Cria um diálogo de escolha de cores.  Uma chamada para esse método
     mostrará a janela, aguardará o usuário fazer uma seleção e
     retornará a cor selecionada (ou ‘None’) ao chamador.

Ver também
..........

Módulo *note tkinter.commondialog: f2.

     Módulo de diálogo padrão do Tkinter

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/tkinter/colorchooser.py


File: python.info,  Node: tkinter font — Invólucro de fontes Tkinter,  Next: Diálogos Tkinter,  Prev: tkinter colorchooser — Diálogo de escolha de cor,  Up: Interfaces gráficas de usuário com Tk

5.25.3 ‘tkinter.font’ — Invólucro de fontes Tkinter
---------------------------------------------------

'Código-fonte:' Lib/tkinter/font.py(1)

__________________________________________________________________

O módulo *note tkinter.font: f5. apresenta a classe *note Font: 1a5a.
para criação e utilização de fontes nomeadas.

Os diferentes pesos e inclinações de fontes são:

 -- Dado: tkinter.font.NORMAL
 -- Dado: tkinter.font.BOLD
 -- Dado: tkinter.font.ITALIC
 -- Dado: tkinter.font.ROMAN

 -- Classe: tkinter.font.Font (root=None, font=None, name=None,
          exists=False, **options)

     A classe *note Font: 1a5a. representa uma fonte nomeada.
     Instâncias 'font' recebem nomes únicos e podem ser especificadas
     por família, tamanho e configuração de estilo.  Fontes nomeadas são
     os métodos Tk para criação e identificação de fontes de um objeto
     singular, ao invés de especificar a fonte por seus atributos em
     cada ocorrência.

          argumentos:

                    'font' - tupla de especificação da fonte (família, tamanho, opções)
                    'name' - nome único da fonte
                    'exists' - aponta para uma fonte nomeada existente se for verdadeiro

          palavras reservadas opcionais (ignoradas caso 'font' seja
          especificado):

                    'family' - a família da fonte e.x. Courier, Times
                    'size' - tamanho da fonte
                         Se 'size' for positivo, ele é interpretado como tamanho em pontos.
                         Caso 'size' seja um número negativo, seu valor absoluto é tratado
                         como tamanho em pixels.
                    'weight' - ênfase da fonte (normal,negrito)
                    'slant' - ROMAN, ITALIC
                    'underline' - sublinhamento da fonte (0 - sem sublinhamento, 1 - sublinhado)
                    'overstrike' - fonte riscada (0 - sem risco, 1 - letras riscadas)

      -- Método: actual (option=None, displayof=None)

          Retorna os atributos da fonte.

      -- Método: cget (option)

          Recupera um atributo da fonte.

      -- Método: config (**options)

          Modifica atributos da fonte.

      -- Método: copy ()

          Retorna uma nova instância da fonte atual.

      -- Método: measure (text, displayof=None)

          Retorna a quantidade de espaço que o texto ocuparia na
          exibição especificada ao ser formatado na fonte atual.  Caso
          nenhuma exibição seja especificada, a exibição presumida será
          a da janela principal da aplicação.

      -- Método: metrics (*options, **kw)

          Retorna dados específicos da fonte.  Opções inclusas:

          'ascent' - distância entre a linha de base e o ponto mais alto que um

               caractere da fonte pode ocupar

          'descent' - distância entre a linha de base e o ponto mais baixo que um

               caractere da fonte pode ocupar

          'linespace' - separação vertical mínima necessária entre dois

               caracteres da fonte que garante que não ocorra
               sobreposição entre as linhas.

          'fixed' - 1 caso a fonte seja de largura fixa, 0 caso
          contrário

 -- Função: tkinter.font.families (root=None, displayof=None)

     Retorna as diferentes famílias de fontes.

 -- Função: tkinter.font.names (root=None)

     Retorna os nomes das fontes definidas.

 -- Função: tkinter.font.nametofont (name, root=None)

     Retorna a representação *note Font: 1a5a. de uma fonte nomeada do
     tk.

     Alterado na versão 3.10: O parâmetro 'root' foi adicionado.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/tkinter/font.py


File: python.info,  Node: Diálogos Tkinter,  Next: tkinter messagebox — Prompts de mensagem do Tkinter,  Prev: tkinter font — Invólucro de fontes Tkinter,  Up: Interfaces gráficas de usuário com Tk

5.25.4 Diálogos Tkinter
-----------------------

* Menu:

* tkinter.simpledialog — Diálogos de entrada padrão do Tkinter: tkinter simpledialog — Diálogos de entrada padrão do Tkinter.
* tkinter.filedialog — Caixas de diálogo de seleção de arquivo: tkinter filedialog — Caixas de diálogo de seleção de arquivo.
* tkinter.commondialog — Modelos de janela de diálogo: tkinter commondialog — Modelos de janela de diálogo.


File: python.info,  Node: tkinter simpledialog — Diálogos de entrada padrão do Tkinter,  Next: tkinter filedialog — Caixas de diálogo de seleção de arquivo,  Up: Diálogos Tkinter

5.25.4.1 ‘tkinter.simpledialog’ — Diálogos de entrada padrão do Tkinter
.......................................................................

'Código-fonte:' Lib/tkinter/simpledialog.py(1)

__________________________________________________________________

O módulo *note tkinter.simpledialog: f8. contém classes de conveniência
e funções para criar diálogos modais simples para obter um valor do
usuário.

 -- Função: tkinter.simpledialog.askfloat (title, prompt, **kw)
 -- Função: tkinter.simpledialog.askinteger (title, prompt, **kw)
 -- Função: tkinter.simpledialog.askstring (title, prompt, **kw)

     As três funções acima fornecem caixas de diálogo que solicitam que
     o usuário insira um valor do tipo desejado.

 -- Classe: tkinter.simpledialog.Dialog (parent, title=None)

     A classe base para diálogos personalizados.

      -- Método: body (master)

          Substitui para construir a interface da caixa de diálogo e
          retornar o widget que deve ter foco inicial.

      -- Método: buttonbox ()

          O comportamento padrão adiciona botões OK e Cancelar.
          Substitua para layouts de botão personalizados.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/tkinter/simpledialog.py


File: python.info,  Node: tkinter filedialog — Caixas de diálogo de seleção de arquivo,  Next: tkinter commondialog — Modelos de janela de diálogo,  Prev: tkinter simpledialog — Diálogos de entrada padrão do Tkinter,  Up: Diálogos Tkinter

5.25.4.2 ‘tkinter.filedialog’ — Caixas de diálogo de seleção de arquivo
.......................................................................

'Código-fonte:' Lib/tkinter/filedialog.py(1)

__________________________________________________________________

The módulo *note tkinter.filedialog: f4. fornece classes e funções de
fábrica para criar janelas de seleção de arquivo/diretório.

* Menu:

* Caixas de diálogo nativos de carregar/salvar::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/tkinter/filedialog.py


File: python.info,  Node: Caixas de diálogo nativos de carregar/salvar,  Up: tkinter filedialog — Caixas de diálogo de seleção de arquivo

5.25.4.3 Caixas de diálogo nativos de carregar/salvar
.....................................................

As seguintes classes e funções fornecem janelas de diálogo de arquivo
que combinam uma aparência nativa com opções de configuração para
personalizar o comportamento.  Os seguintes argumentos nomeados são
aplicáveis às classes e funções listado abaixo:

          'parent' - a janela para colocar a caixa de diálogo no topo

          'title' - o título da janela

          'initialdir' - o diretório no qual a caixa de diálogo começa

          'initialfile' - o arquivo selecionado ao abrir a caixa de diálogo

          'filetypes' - uma sequência de tuplas (rótulo, padrão), o caractere curinga ‘*’ é permitido

          'defaultextension' - extensão padrão para anexar ao arquivo (caixas de diálogo para salvar)

          'multiple' - quando verdadeiro, a seleção de vários itens é permitida

'Fábrica de funções estáticas'

As funções a seguir, quando chamadas, criam uma caixa de diálogo modal e
nativa, aguardam a seleção do usuário e, em seguida, retornam o(s)
valor(es) selecionado(s) ou ‘None’ para o chamador.

 -- Função: tkinter.filedialog.askopenfile (mode='r', **options)
 -- Função: tkinter.filedialog.askopenfiles (mode='r', **options)

     As duas funções acima criam uma caixa de diálogo *note Open: 3fdf.
     e retornam a caixa de diálogo com um ou mais objetos arquivo
     abertos em modo somente leitura.

 -- Função: tkinter.filedialog.asksaveasfile (mode='w', **options)

     Cria uma caixa de diálogo *note SaveAs: 3fe1. e retorna um objeto
     arquivo aberto em modo somente escrita.

 -- Função: tkinter.filedialog.askopenfilename (**options)
 -- Função: tkinter.filedialog.askopenfilenames (**options)

     As duas funções acima criam uma caixa de diálogo *note Open: 3fdf.
     e retornam um ou mais nomes de arquivos selecionados que
     correspondem aos arquivos existentes.

 -- Função: tkinter.filedialog.asksaveasfilename (**options)

     Cria uma caixa de diálogo *note SaveAs: 3fe1. e retorna o nome do
     arquivo selecionado.

 -- Função: tkinter.filedialog.askdirectory (**options)

          Solicita ao usuário que selecione um diretório.
          Opção de palavra reservada adicional:
               'mustexist' - determina se a seleção deve ser um diretório existente.

 -- Classe: tkinter.filedialog.Open (master=None, **options)
 -- Classe: tkinter.filedialog.SaveAs (master=None, **options)

     As duas classes acima fornecem janelas de diálogo nativas para
     salvar e carregar files.

'Classes de conveniência'

As classes abaixo são usadas para criar janelas de arquivos/diretórios
desde o início.  Elas não emulam a aparência nativa da plataforma.

 -- Classe: tkinter.filedialog.Directory (master=None, **options)

     Cria uma caixa de diálogo solicitando que o usuário selecione um
     diretório.

     Nota: A classe 'FileDialog' deve ser uma subclasse para manipulação
     e comportamento de eventos personalizados.

 -- Classe: tkinter.filedialog.FileDialog (master, title=None)

     Cria uma caixa de diálogo básica de seleção de arquivo.

      -- Método: cancel_command (event=None)

          Aciona o encerramento da janela de diálogo.

      -- Método: dirs_double_event (event)

          Manipulador de eventos para evento de clique duplo no
          diretório.

      -- Método: dirs_select_event (event)

          Manipulador de eventos para evento de clique no diretório.

      -- Método: files_double_event (event)

          Manipulador de eventos para evento de clique duplo no arquivo.

      -- Método: files_select_event (event)

          Manipulador de eventos para evento de clique único no arquivo.

      -- Método: filter_command (event=None)

          Filtra os arquivos por diretório.

      -- Método: get_filter ()

          Recupera o filtro de arquivo atualmente em uso.

      -- Método: get_selection ()

          Recupera o item atualmente selecionado.

      -- Método: go (dir_or_file=os.curdir, pattern='*', default='',
               key=None)

          Caixa de diálogo de renderização e inicia um laço de eventos.

      -- Método: ok_event (event)

          Sai da caixa de diálogo retornando a seleção atual.

      -- Método: quit (how=None)

          Sai da caixa de diálogo retornando o nome do arquivo, se
          houver.

      -- Método: set_filter (dir, pat)

          Define o filtro de arquivo.

      -- Método: set_selection (file)

          Atualiza a seleção de arquivo atual para 'file'.

 -- Classe: tkinter.filedialog.LoadFileDialog (master, title=None)

     Uma subclasse de FileDialog que cria uma janela de diálogo para
     selecionar um arquivo existente.

      -- Método: ok_command ()

          Testa se um arquivo é fornecido e se a seleção indica um já
          arquivo existente.

 -- Classe: tkinter.filedialog.SaveFileDialog (master, title=None)

     Uma subclasse de FileDialog que cria uma janela de diálogo para
     selecionar um arquivo de destino.

      -- Método: ok_command ()

          Testa se a seleção aponta ou não para um arquivo válido que
          não é um diretório.  A confirmação é necessária se um arquivo
          já existente for selecionado.


File: python.info,  Node: tkinter commondialog — Modelos de janela de diálogo,  Prev: tkinter filedialog — Caixas de diálogo de seleção de arquivo,  Up: Diálogos Tkinter

5.25.4.4 ‘tkinter.commondialog’ — Modelos de janela de diálogo
..............................................................

'Código-fonte:' Lib/tkinter/commondialog.py(1)

__________________________________________________________________

O módulo *note tkinter.commondialog: f2. fornece a a classe *note
Dialog: 3fc1, que é a classe base para diálogos definidos em outros
módulos de suporte.

 -- Classe: tkinter.commondialog.Dialog (master=None, **options)

      -- Método: show (**options)

          Renderiza a janela de diálogo.

Ver também
..........

Módulos *note tkinter.messagebox: f6, *note Leitura e escrita de
arquivos: 1e06.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/tkinter/commondialog.py


File: python.info,  Node: tkinter messagebox — Prompts de mensagem do Tkinter,  Next: tkinter scrolledtext — Widget de texto de rolado,  Prev: Diálogos Tkinter,  Up: Interfaces gráficas de usuário com Tk

5.25.5 ‘tkinter.messagebox’ — Prompts de mensagem do Tkinter
------------------------------------------------------------

'Código-fonte:' Lib/tkinter/messagebox.py(1)

__________________________________________________________________

O módulo *note tkinter.messagebox: f6. provê uma classe base template e
uma variedade de métodos de conveniência para as configurações mais
comumente usadas.  As caixas de mensagem são modais e vão retornar um
conjunto de (‘True’, ‘False’, ‘None’, *note OK: 3ffe, *note CANCEL:
3fff, *note YES: 4000, *note NO: 4001.) baseado na seleção do usuário.
Estilos e formatos de janelas comuns estão incluídos, mas não estão
limitados a:

[image src="python-figures/tk_msg.png"]


Figure
 -- Classe: tkinter.messagebox.Message (master=None, **options)

     Criar uma janela de mensagem com uma mensagem específica da
     aplicação, um ícone e um conjunto de botões.  Cada botão na janela
     é identificado com um nome simbólico único (veja as opções de
     “type”).

     As seguintes opções são suportadas:

          “command”

               Especifica a função que será invocada quando o usuário
               fecha a janela de diálogo.  O nome do botão clicado pelo
               usuário para fechar a janela é passada como um argumento.
               Esta funcionalidade está disponível apenas no macOS.

          “default”

               Fornece o *note nome simbólico: 4003. do botão padrão
               para essa janela de mensagem (*note OK: 3ffe, *note
               CANCEL: 3fff, e assim por diante).  Se essa opção não for
               especificada, o primeiro botão da caixa de diálogo será o
               padrão.

          “detail”

               Especifica uma mensagem auxiliar para a mensagem
               principal fornecida pela opção 'message'.  Esta mensagem
               será apresentado abaixo da mensagem principal e, quando
               suportado pelo sistema operacional, em uma fonte menos
               enfatizada do que a mensagem principal.

          “icon”

               Especifica um *note icon: 4004. a ser apresentado.  Se
               essa opção não for especificada, o ícone *note INFO:
               4005. será exibido.

          “message”

               Especifica a mensagem para mostrar nessa caixa de
               mensagem.  O padrão valor é uma string vazia.

          “parent”

               Torna a janela especificada a janela pai da caixa de
               mensagem.  A caixa de mensagem é exibida na parte
               superior de sua janela pai.

          “title”

               Especifica uma string para mostrar como o título da caixa
               de mensagem.  Essa opção é ignorada no macOS, onde a
               plataforma proíbe o uso de um título nesse tipo de caixa
               de diálogo.

          “type”

               Organiza um *note conjunto predefinido de botões: 4006. a
               serem mostrados.

      -- Método: show (**options)

          Mostra uma janela de mensagem e aguarda que o usuário
          selecione um dos botões.  Em seguida, retorna o nome simbólico
          do botão selecionado.  Argumentos nomeados pode substituir
          opções especificadas no construtor.

'Caixa de mensagem de informação'

 -- Função: tkinter.messagebox.showinfo (title=None, message=None,
          **options)

     Cria e exibe uma caixa de mensagem informativa com o título e a
     mensagem especificados.

'Caixas de mensagem de atenção'

 -- Função: tkinter.messagebox.showwarning (title=None, message=None,
          **options)

     Cria e exibe uma caixa de mensagem de alerta com o título e a
     mensagem especificados.

 -- Função: tkinter.messagebox.showerror (title=None, message=None,
          **options)

     Cria e exibe uma caixa de mensagem de erro com o título e a
     mensagem especificados.

'Caixas de mensagem de dúvida'

 -- Função: tkinter.messagebox.askquestion (title=None, message=None, *,
          type=YESNO, **options)

     Faz uma pergunta.  Por padrão mostra os botões *note YES: 4000. e
     *note NO: 4001.  Retorna o nome simbólico do botão selecionado.

 -- Função: tkinter.messagebox.askokcancel (title=None, message=None,
          **options)

     Pergunta se a operação deve prosseguir.  Mostra os botões *note OK:
     3ffe. e *note CANCEL: 3fff.  Retorna ‘True’ se a resposta for “OK”
     e ‘False’ caso contrário.

 -- Função: tkinter.messagebox.askretrycancel (title=None, message=None,
          **options)

     Pergunta se a operação deve ser tentada novamente.  Mostra os
     botões *note RETRY: 400e. e *note CANCEL: 3fff.  Retorna ‘True’ se
     a resposta for sim e ‘False’ caso contrário.

 -- Função: tkinter.messagebox.askyesno (title=None, message=None,
          **options)

     Faz uma pergunta.  Mostra os botões *note YES: 4000. e *note NO:
     4001.  Retorna ‘True’ se a resposta for sim e ‘False’ caso
     contrário.

 -- Função: tkinter.messagebox.askyesnocancel (title=None, message=None,
          **options)

     Faz uma pergunta.  Mostra os botões *note YES: 4000, *note NO:
     4001. e *note CANCEL: 3fff.  Retorna ‘True’ se a resposta for sim,
     ‘None’ se cancelado, e ‘False’ caso contrário.
Nomes simbólicos dos botões:

 -- Dado: tkinter.messagebox.ABORT = 'abort'

 -- Dado: tkinter.messagebox.RETRY = 'retry'

 -- Dado: tkinter.messagebox.IGNORE = 'ignore'

 -- Dado: tkinter.messagebox.OK = 'ok'

 -- Dado: tkinter.messagebox.CANCEL = 'cancel'

 -- Dado: tkinter.messagebox.YES = 'yes'

 -- Dado: tkinter.messagebox.NO = 'no'
Conjunto predefinido de botões:

 -- Dado: tkinter.messagebox.ABORTRETRYIGNORE = 'abortretryignore'

     Exibe três botões cujos nomes simbólicos são *note ABORT: 4011,
     *note RETRY: 400e. e *note IGNORE: 4012.

 -- Dado: tkinter.messagebox.OK = 'ok'

     Exibe um botão cujo nome simbólico é *note OK: 3ffe.

 -- Dado: tkinter.messagebox.OKCANCEL = 'okcancel'

     Exibe dois botões cujos nomes simbólicos são *note OK: 3ffe. e
     *note CANCEL: 3fff.

 -- Dado: tkinter.messagebox.RETRYCANCEL = 'retrycancel'

     Exibe dois botões cujos nomes simbólicos são *note RETRY: 400e. e
     *note CANCEL: 3fff.

 -- Dado: tkinter.messagebox.YESNO = 'yesno'

     Exibe dois botões cujos nomes simbólicos são *note YES: 4000. e
     *note NO: 4001.

 -- Dado: tkinter.messagebox.YESNOCANCEL = 'yesnocancel'

     Exibe três botões cujos nomes simbólicos são *note YES: 4000, *note
     NO: 4001. e *note CANCEL: 3fff.
Imagens de ícones:

 -- Dado: tkinter.messagebox.ERROR = 'error'

 -- Dado: tkinter.messagebox.INFO = 'info'

 -- Dado: tkinter.messagebox.QUESTION = 'question'

 -- Dado: tkinter.messagebox.WARNING = 'warning'

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/tkinter/messagebox.py


File: python.info,  Node: tkinter scrolledtext — Widget de texto de rolado,  Next: tkinter dnd — Suporte para arrastar e soltar,  Prev: tkinter messagebox — Prompts de mensagem do Tkinter,  Up: Interfaces gráficas de usuário com Tk

5.25.6 ‘tkinter.scrolledtext’ — Widget de texto de rolado
---------------------------------------------------------

'Código-fonte:' Lib/tkinter/scrolledtext.py(1)

__________________________________________________________________

O módulo *note tkinter.scrolledtext: f7. fornece uma classe com o mesmo
nome que implementa um widget de texto básico que possui uma barra de
rolagem vertical configurada para fazer a “coisa certa”.  Usar a classe
*note ScrolledText: 401e. é muito mais fácil do que configurar um widget
de texto e barra de rolagem diretamente.

O widget de texto e a barra de rolagem são agrupados em ‘Frame’, e os
métodos dos gerenciadores de geometria ‘Grid’ e ‘Pack’ são adquiridos do
objeto ‘Frame’.  Isso permite que o widget *note ScrolledText: 401e.
seja usado diretamente para obter o comportamento mais normal de
gerenciamento de geometria.

Se um controle mais específico for necessário, os seguintes atributos
estarão disponíveis:

 -- Classe: tkinter.scrolledtext.ScrolledText (master=None, **kw)

      -- Atributo: frame

          O quadro que envolve os widgets de barra de rolagem e texto.

      -- Atributo: vbar

          O widget da barra de rolagem.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/tkinter/scrolledtext.py


File: python.info,  Node: tkinter dnd — Suporte para arrastar e soltar,  Next: tkinter ttk — Widgets temáticos do Tk,  Prev: tkinter scrolledtext — Widget de texto de rolado,  Up: Interfaces gráficas de usuário com Tk

5.25.7 ‘tkinter.dnd’ — Suporte para arrastar e soltar
-----------------------------------------------------

'Código-fonte:' Lib/tkinter/dnd.py(1)

__________________________________________________________________

     Nota: Isto é experimental e deverá ser descontinuado quando for
     substituído pelo Tk DND.

O módulo *note tkinter.dnd: f3. fornece suporte de arrastar e soltar
para objetos dentro de uma única aplicação, dentro da mesma janela ou
entre janelas.  Para permitir que um objeto seja arrastado, você deve
criar uma associação de evento para ele que inicie o processo de
arrastar e soltar.  Normalmente, você associa um evento ButtonPress a
uma função de retorno que você escreve (consulte *note Ligações e
Eventos: 3fb2.).  A função deve chamar *note dnd_start(): 4024, onde
‘source’ é o objeto a ser arrastado e ‘event’ é o evento que invocou a
chamada (o argumento para sua função de retorno).

A seleção de um objeto de destino ocorre da seguinte forma:

  1. Pesquisa de cima para baixo da área sob o mouse para o widget alvo

        * O widget alvo deve ter um atributo chamável 'dnd_accept'

        * Se 'dnd_accept' não estiver presente ou retornar ‘None’, a
          pesquisa vai para o widget pai

        * Se nenhum widget de destino for encontrado, o objeto alvo é
          ‘None’

  2. Chamada para '<old_target>.dnd_leave(source, event)'

  3. Chamada para '<new_target>.dnd_enter(source, event)'

  4. Chamada para '<target>.dnd_commit(source, event)' para notificar
     que soltou

  5. Chamada para '<source>.dnd_end(target, event)' para sinalizar o fim
     do arrastar e soltar

 -- Classe: tkinter.dnd.DndHandler (source, event)

     A classe 'DndHandler' trata de eventos de arrastar e soltar que
     rastreiam eventos Motion e ButtonRelease na raiz do widget de
     evento.

      -- Método: cancel (event=None)

          Cancela o processo de arrastar e soltar.

      -- Método: finish (event, commit=0)

          Executa o fim das funções de arrastar e soltar.

      -- Método: on_motion (event)

          Inspeciona a área abaixo do mouse para objetos alvos enquanto
          o arrasto é executado.

      -- Método: on_release (event)

          Sinaliza o fim do arrasto quando o padrão de liberação for
          acionado.

 -- Função: tkinter.dnd.dnd_start (source, event)

     Função de fábrica para processo de arrastar e soltar.

Ver também
..........

*note Ligações e Eventos: 3fb2.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/tkinter/dnd.py


File: python.info,  Node: tkinter ttk — Widgets temáticos do Tk,  Next: IDLE — editor e console Python<2>,  Prev: tkinter dnd — Suporte para arrastar e soltar,  Up: Interfaces gráficas de usuário com Tk

5.25.8 ‘tkinter.ttk’ — Widgets temáticos do Tk
----------------------------------------------

'Código-fonte:' Lib/tkinter/ttk.py(1)

__________________________________________________________________

O módulo *note tkinter.ttk: f9. introduzido no Tk 8.5, fornece acesso ao
conjunto de widgets temáticos do Tk, Alguns dos benefícios incluídos são
a renderização de fontes com suavização de serrilhamento no x11 e
transparência de janelas (requer um gerenciador de composição de janelas
no x11).

A ideia básica para *note tkinter.ttk: f9. é separar, na medida do
possível, o código que implementa o comportamento de widget do código
que implementa sua aparência.

Ver também
..........

Tk Widget Styling Support(2)

     Um documento que apresenta o suporte de temas para Tk

* Menu:

* Usando Ttk::
* Widgets Ttk::
* Widget::
* Combobox::
* Spinbox::
* Notebook::
* Progressbar::
* Separator::
* Sizegrip::
* Treeview::
* Ttk Styling::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/tkinter/ttk.py

   (2) https://core.tcl.tk/tips/doc/trunk/tip/48.md


File: python.info,  Node: Usando Ttk,  Next: Widgets Ttk,  Up: tkinter ttk — Widgets temáticos do Tk

5.25.8.1 Usando Ttk
...................

Para começar a usar Ttk, importe seu módulo:

     from tkinter import ttk

Para substituir os widgets básicos do Tk, a importação deve seguir a
importação do Tk:

     from tkinter import *
     from tkinter.ttk import *

Esse código faz com que vários widgets *note tkinter.ttk: f9. (‘Button’,
‘Checkbutton’, ‘Entry’, ‘Frame’, ‘Label’, ‘LabelFrame’, ‘Menubutton’,
‘PanedWindow’, ‘Radiobutton’, ‘Scale’ e ‘Scrollbar’) substituam
automaticamente os widgets Tk.

Isso traz o benefício direto de utilizar os widgets novos que possuem
melhor aparência e sensação de uso entre as plataformas, contudo, os
widgets substitutos não são completamente compatíveis.  A maior
diferença é que as opções como “fg”, “bg” e outras relacionadas à
estilização do widget não estão mais presentes nos widgets Ttk.  Em vez
disso, use a classe ‘ttk.Style’ para melhores efeitos de estilização.

Ver também
..........

Convertendo aplicações existentes para utilização dos widgets Tile(1)

     Uma monografia (utilizando a terminologia Tcl) sobre diferenças
     tipicamente encontradas ao mover aplicações para utilização de
     novos widgets.

   ---------- Footnotes ----------

   (1) https://tktable.sourceforge.net/tile/doc/converting.txt


File: python.info,  Node: Widgets Ttk,  Next: Widget,  Prev: Usando Ttk,  Up: tkinter ttk — Widgets temáticos do Tk

5.25.8.2 Widgets Ttk
....................

Ttk traz 18 widgets, das quais doze já existiam no tkinter: ‘Button’,
‘Checkbutton’, ‘Entry’, ‘Frame’, ‘Label’, ‘LabelFrame’, ‘Menubutton’,
‘PanedWindow’, ‘Radiobutton’, ‘Scale’, ‘Scrollbar’, e *note Spinbox:
bac.  As outras seis são novas: *note Combobox: 402f, *note Notebook:
4030, *note Progressbar: 4031, ‘Separator’, ‘Sizegrip’ e *note Treeview:
a9f.  E todas elas são subclasses de *note Widget: 4032.

Utilizar os widgets Ttk melhora a experiência de uso e o visual da
aplicação.  Conforme discutido anteriormente, existem diferenças em como
a estilização é codificada.

Código Tk:

     l1 = tkinter.Label(text="Test", fg="black", bg="white")
     l2 = tkinter.Label(text="Test", fg="black", bg="white")

Código Ttk:

     style = ttk.Style()
     style.configure("BW.TLabel", foreground="black", background="white")

     l1 = ttk.Label(text="Test", style="BW.TLabel")
     l2 = ttk.Label(text="Test", style="BW.TLabel")

Para mais informações sobre *note TtkStyling: 4033, veja a documentação
da classe *note Style: 259.


File: python.info,  Node: Widget,  Next: Combobox,  Prev: Widgets Ttk,  Up: tkinter ttk — Widgets temáticos do Tk

5.25.8.3 Widget
...............

‘ttk.Widget’ define opções padrão e métodos suportados pelos widgets
temáticos Tk e não deve ser instanciada diretamente.

* Menu:

* Opções padrão::
* Opções de ferramenta rolável::
* Opções de rótulo::
* Opções de compatibilidade::
* Estados de Widget::
* ttk.Widget: ttk Widget.


File: python.info,  Node: Opções padrão,  Next: Opções de ferramenta rolável,  Up: Widget

5.25.8.4 Opções padrão
......................

Todos os Widgets ‘ttk’ aceitam as seguintes opções:

Opção           Descrição
                
-----------------------------------------------------------------------------------
                
classe          Specifies the window class.  The class is used when querying the
                option database for the window’s other options, to determine the
                default bindtags for the window, and to select the widget’s
                default layout and style.  This option is read-only, and may
                only be specified when the window is created.
                
                
cursor          Especifica o cursor do mouse a ser utilizado pelo widget.  Caso
                seja definido como uma string vazia (padrão), o cursor é herdado
                do widget pai.
                
                
takefocus       Determina se a janela aceitará foco durante a navegação com o
                teclado.  Retorna 0, 1 ou uma string vazia.  Caso retorne 0,
                significa que a janela deve ser completamente ignorada durante a
                navegação com o teclado.  Caso retorne 1, significa que a janela
                receberá as entradas do teclado enquanto estiver visível.  E a
                string vazia significa que os scripts de navegação determinam
                quando a janela recebe foco ou não.
                
                
estilo          Pode ser utilizado para especificar um estilo customizado do
                widget.
                


File: python.info,  Node: Opções de ferramenta rolável,  Next: Opções de rótulo,  Prev: Opções padrão,  Up: Widget

5.25.8.5 Opções de ferramenta rolável
.....................................

As opções a seguir são suportadas pelos widgets que são controlados por
uma barra de rolagem.

Opção                Descrição
                     
-----------------------------------------------------------------------------------
                     
xscrollcommand       Utilizado para comunicação com barras de rolagem
                     horizontais.
                     
                     Quando a visualização na janela do widget mudar, o widget
                     irá gerar um comando Tcl baseado no comando da barra de
                     rolagem.
                     
                     Geralmente essa opção consiste no método ‘Scrollbar.set()’
                     de alguma barra de rolagem.  Isso fará com que a barra de
                     rolagem seja atualizada sempre que a visualização da janela
                     mude.
                     
                     
yscrollcommand       Utilizado para comunicação com barras de rolagem verticais.
                     Para mais informações, veja acima.
                     


File: python.info,  Node: Opções de rótulo,  Next: Opções de compatibilidade,  Prev: Opções de ferramenta rolável,  Up: Widget

5.25.8.6 Opções de rótulo
.........................

As opções a seguir são suportadas por rótulos, botões e outros widgets
semelhantes.

Opção              Descrição
                   
-----------------------------------------------------------------------------------
                   
text               Especifica uma string para exibição dentro do widget.
                   
                   
textvariable       Specifies a name whose value will be used in place of the
                   text option resource.
                   
                   
underline          Caso definido, especifica o índice (base-0) de um caractere
                   para sublinhamento na string de texto.  O caractere
                   sublinhado é utilizado para ativação mnemônica.
                   
                   
image              Define uma imagem para exibição.  Isso é uma lista de 1 ou
                   mais elementos.  O primeiro elemento é o nome da imagem
                   padrão.  O resto da lista é uma sequência de pares
                   estado/valor conforme definido por *note Style.map(): 1a73,
                   definindo imagens diferentes para utilização quando o widget
                   estiver em um determinado estado ou em uma combinação de
                   estados.  Todas as imagens da lista devem ter o mesmo
                   tamanho.
                   
                   
compound           Define como exibir a imagem em relação ao texto, no caso em
                   que ambas as opções de texto e imagem estejam presentes.
                   Valores válidos são:
                   
                      * texto: exibir apenas texto
                   
                      * imagem: exibir apenas a imagem
                   
                      * top, bottom, left, right: exibem a imagem acima, abaixo,
                        à esquerda, ou à direita do texto, respectivamente.
                   
                      * none: o padrão, exibe a imagem caso ela esteja presente,
                        caso contrário , exibe o texto.
                   
                   
width              Caso maior que zero, especifica quanto espaço, em largura de
                   caracteres, alocar para o rótulo do texto, se menor que zero,
                   especifica a largura mínima.  Se zero ou inespecífico, é
                   utilizada a largura normal do rótulo de texto.
                   


File: python.info,  Node: Opções de compatibilidade,  Next: Estados de Widget,  Prev: Opções de rótulo,  Up: Widget

5.25.8.7 Opções de compatibilidade
..................................

Opção        Descrição
             
----------------------------------------------------------------------------------
             
state        May be set to “normal” or “disabled” to control the “disabled”
             state bit.  This is a write-only option: setting it changes the
             widget state, but the *note Widget.state(): 4039. method does not
             affect this option.
             


File: python.info,  Node: Estados de Widget,  Next: ttk Widget,  Prev: Opções de compatibilidade,  Up: Widget

5.25.8.8 Estados de Widget
..........................

O estado do widget é um bitmap de sinalizadores de estado independentes.

Sinalizador      Descrição
                 
-----------------------------------------------------------------------------------
                 
active           O cursor do mouse está sobre o widget e pressionar um botão do
                 mouse causará alguma ação
                 
                 
disabled         Widget está desabilitado sob controle do programa.
                 
                 
focus            Widget tem foco do teclado
                 
                 
pressed          Widget está sendo pressionado
                 
                 
selected         “On”, “true”, ou “current” para coisas como botões de
                 confirmação e botões de opção.
                 
                 
background       Windows e Mac possuem uma noção de janela “ativa” ou em
                 primeiro plano.  O estado de “plano de fundo” é definido para
                 widgets em uma janela no plano de fundo, e limpo para aqueles
                 na janela de primeiro plano
                 
                 
readonly         Widget não deve permitir modificação do usuário
                 
                 
alternate        Um formato de exibição específico do widget
                 
                 
invalid          O valor do widget é inválido
                 

Uma especificação de estado é uma sequência de nomes de estado,
opcionalmente prefixada por um ponto de exclamação indicando que o bit
está desligado.


File: python.info,  Node: ttk Widget,  Prev: Estados de Widget,  Up: Widget

5.25.8.9 ttk.Widget
...................

Além dos métodos descritos abaixo, a classe ‘ttk.Widget’ oferece suporte
aos métodos ‘tkinter.Widget.cget()’ e ‘tkinter.Widget.configure()’.

 -- Classe: tkinter.ttk.Widget

      -- Método: identify (x, y)

          Retorna o nome do elemento na posição 'x' 'y', ou a string
          vazia caso o ponto não esteja dentro de algum elemento.

          'x' e 'y' são coordenadas de pixel relativas ao widget.

      -- Método: instate (statespec, callback=None, *args, **kw)

          Test the widget’s state.  If a callback is not specified,
          returns ‘True’ if the widget state matches 'statespec' and
          ‘False’ otherwise.  If callback is specified then it is called
          with args if widget state matches 'statespec'.

      -- Método: state (statespec=None)

          Modify or inquire widget state.  If 'statespec' is specified,
          sets the widget state according to it and return a new
          'statespec' indicating which flags were changed.  If
          'statespec' is not specified, returns the currently enabled
          state flags.

     'statespec' will usually be a list or a tuple.


File: python.info,  Node: Combobox,  Next: Spinbox,  Prev: Widget,  Up: tkinter ttk — Widgets temáticos do Tk

5.25.8.10 Combobox
..................

O widget ‘ttk.Combobox’ combina um campo de texto com uma lista suspensa
de valores.  Esse widget é uma subclasse de ‘Entry’.

Besides the methods inherited from *note Widget: 4032.: ‘Widget.cget()’,
‘Widget.configure()’, *note Widget.identify(): 403c, *note
Widget.instate(): 403d. and *note Widget.state(): 4039, and the
following inherited from ‘Entry’: ‘Entry.bbox()’, ‘Entry.delete()’,
‘Entry.icursor()’, ‘Entry.index()’, ‘Entry.insert()’,
‘Entry.selection()’, ‘Entry.xview()’, it has some other methods,
described at ‘ttk.Combobox’.

* Menu:

* Opções::
* Eventos virtuais::
* ttk.Combobox: ttk Combobox.


File: python.info,  Node: Opções,  Next: Eventos virtuais,  Up: Combobox

5.25.8.11 Opções
................

Este widget aceita as seguintes opções específicas:

Opção                 Descrição
                      
-----------------------------------------------------------------------------------
                      
exportselection       Valor booleano.  Caso definido, a seleção do widget é
                      vinculada à seleção do Gerenciador de Janelas (que pode
                      ser retornada ao chamar Misc.selection_get, por exemplo).
                      
                      
justify               Especifica como o texto é alinhado dentro do widget.  Pode
                      ser “left”, “center” ou “right”.
                      
                      
height                Especifica a altura, em linhas, da lista suspensa.
                      
                      
postcommand           Um script (possivelmente registrado com Misc.register) que
                      é chamado imediatamente antes da exibição dos valores.
                      Ele pode especificar quais valores exibir.
                      
                      
state                 Um dos estados: “normal”, “readonly” ou “disabled”.  No
                      estado “readonly”, o valor não pode ser editado
                      diretamente, e o usuário só pode selecionar valores
                      contidos na lista suspensa.  No estado “normal”, o campo
                      de texto é diretamente editável.  No estado “disabled”,
                      nenhuma interação é possível.
                      
                      
textvariable          Especifica um nome que terá seu valor vinculado ao valor
                      do widget.  Sempre que o valor associado a esse nome
                      mudar, o valor do widget será atualizado, e vice versa.
                      Veja ‘tkinter.StringVar’.
                      
                      
valores               Especifica a lista de valores para exibição na lista
                      suspensa.
                      
                      
width                 Specifies an integer value indicating the desired width of
                      the entry window, in average-size characters of the
                      widget’s font.
                      


File: python.info,  Node: Eventos virtuais,  Next: ttk Combobox,  Prev: Opções,  Up: Combobox

5.25.8.12 Eventos virtuais
..........................

Os widgets combobox geram um evento virtual '<<ComboboxSelected>>'
quando o usuário seleciona um elemento da lista de valores.


File: python.info,  Node: ttk Combobox,  Prev: Eventos virtuais,  Up: Combobox

5.25.8.13 ttk.Combobox
......................

 -- Classe: tkinter.ttk.Combobox

      -- Método: current (newindex=None)

          If 'newindex' is specified, sets the combobox value to the
          element position 'newindex'.  Otherwise, returns the index of
          the current value or -1 if the current value is not in the
          values list.

      -- Método: get ()

          Retorna o valor atual do combobox.

      -- Método: set (value)

          Sets the value of the combobox to 'value'.


File: python.info,  Node: Spinbox,  Next: Notebook,  Prev: Combobox,  Up: tkinter ttk — Widgets temáticos do Tk

5.25.8.14 Spinbox
.................

The ‘ttk.Spinbox’ widget is a ‘ttk.Entry’ enhanced with increment and
decrement arrows.  It can be used for numbers or lists of string values.
This widget is a subclass of ‘Entry’.

Besides the methods inherited from *note Widget: 4032.: ‘Widget.cget()’,
‘Widget.configure()’, *note Widget.identify(): 403c, *note
Widget.instate(): 403d. and *note Widget.state(): 4039, and the
following inherited from ‘Entry’: ‘Entry.bbox()’, ‘Entry.delete()’,
‘Entry.icursor()’, ‘Entry.index()’, ‘Entry.insert()’, ‘Entry.xview()’,
it has some other methods, described at ‘ttk.Spinbox’.

* Menu:

* Opções: Opções<2>.
* Eventos virtuais: Eventos virtuais<2>.
* ttk.Spinbox: ttk Spinbox.


File: python.info,  Node: Opções<2>,  Next: Eventos virtuais<2>,  Up: Spinbox

5.25.8.15 Opções
................

Este widget aceita as seguintes opções específicas:

Opção                      Descrição
                           
--------------------------------------------------------------------------------------
                           
from                       Float value.  If set, this is the minimum value to which
                           the decrement button will decrement.  Must be spelled as
                           ‘from_’ when used as an argument, since ‘from’ is a
                           Python keyword.
                           
                           
to                         Float value.  If set, this is the maximum value to which
                           the increment button will increment.
                           
                           
increment                  Float value.  Specifies the amount which the
                           increment/decrement buttons change the value.  Defaults
                           to 1.0.
                           
                           
valores                    Sequence of string or float values.  If specified, the
                           increment/decrement buttons will cycle through the items
                           in this sequence rather than incrementing or
                           decrementing numbers.
                           
                           
wrap                       Boolean value.  If ‘True’, increment and decrement
                           buttons will cycle from the ‘to’ value to the ‘from’
                           value or the ‘from’ value to the ‘to’ value,
                           respectively.
                           
                           
format                     String value.  This specifies the format of numbers set
                           by the increment/decrement buttons.  It must be in the
                           form “%W.Pf”, where W is the padded width of the value,
                           P is the precision, and ‘%’ and ‘f’ are literal.
                           
                           
command                    Python callable.  Will be called with no arguments
                           whenever either of the increment or decrement buttons
                           are pressed.
                           


File: python.info,  Node: Eventos virtuais<2>,  Next: ttk Spinbox,  Prev: Opções<2>,  Up: Spinbox

5.25.8.16 Eventos virtuais
..........................

The spinbox widget generates an '<<Increment>>' virtual event when the
user presses <Up>, and a '<<Decrement>>' virtual event when the user
presses <Down>.


File: python.info,  Node: ttk Spinbox,  Prev: Eventos virtuais<2>,  Up: Spinbox

5.25.8.17 ttk.Spinbox
.....................

 -- Classe: tkinter.ttk.Spinbox

      -- Método: get ()

          Returns the current value of the spinbox.

      -- Método: set (value)

          Sets the value of the spinbox to 'value'.


File: python.info,  Node: Notebook,  Next: Progressbar,  Prev: Spinbox,  Up: tkinter ttk — Widgets temáticos do Tk

5.25.8.18 Notebook
..................

Ttk Notebook widget manages a collection of windows and displays a
single one at a time.  Each child window is associated with a tab, which
the user may select to change the currently displayed window.

* Menu:

* Opções: Opções<3>.
* Tab Options::
* Tab Identifiers::
* Virtual Events::
* ttk.Notebook: ttk Notebook.


File: python.info,  Node: Opções<3>,  Next: Tab Options,  Up: Notebook

5.25.8.19 Opções
................

Este widget aceita as seguintes opções específicas:

Opção         Descrição
              
-----------------------------------------------------------------------------------
              
height        If present and greater than zero, specifies the desired height of
              the pane area (not including internal padding or tabs).
              Otherwise, the maximum height of all panes is used.
              
              
padding       Specifies the amount of extra space to add around the outside of
              the notebook.  The padding is a list up to four length
              specifications left top right bottom.  If fewer than four elements
              are specified, bottom defaults to top, right defaults to left, and
              top defaults to left.
              
              
width         If present and greater than zero, specified the desired width of
              the pane area (not including internal padding).  Otherwise, the
              maximum width of all panes is used.
              


File: python.info,  Node: Tab Options,  Next: Tab Identifiers,  Prev: Opções<3>,  Up: Notebook

5.25.8.20 Tab Options
.....................

There are also specific options for tabs:

Opção           Descrição
                
-----------------------------------------------------------------------------------
                
state           Either “normal”, “disabled” or “hidden”.  If “disabled”, then
                the tab is not selectable.  If “hidden”, then the tab is not
                shown.
                
                
sticky          Specifies how the child window is positioned within the pane
                area.  Value is a string containing zero or more of the
                characters “n”, “s”, “e” or “w”.  Each letter refers to a side
                (north, south, east or west) that the child window will stick
                to, as per the ‘grid()’ geometry manager.
                
                
padding         Specifies the amount of extra space to add between the notebook
                and this pane.  Syntax is the same as for the option padding
                used by this widget.
                
                
text            Specifies a text to be displayed in the tab.
                
                
image           Specifies an image to display in the tab.  See the option image
                described in *note Widget: 4032.
                
                
compound        Specifies how to display the image relative to the text, in the
                case both options text and image are present.  See
                *note Label Options: 4037. for legal values.
                
                
underline       Specifies the index (0-based) of a character to underline in the
                text string.  The underlined character is used for mnemonic
                activation if *note Notebook.enable_traversal(): 404e. is
                called.
                


File: python.info,  Node: Tab Identifiers,  Next: Virtual Events,  Prev: Tab Options,  Up: Notebook

5.25.8.21 Tab Identifiers
.........................

The tab_id present in several methods of ‘ttk.Notebook’ may take any of
the following forms:

   * An integer between zero and the number of tabs

   * The name of a child window

   * A positional specification of the form “@x,y”, which identifies the
     tab

   * The literal string “current”, which identifies the currently
     selected tab

   * The literal string “end”, which returns the number of tabs (only
     valid for *note Notebook.index(): 4050.)


File: python.info,  Node: Virtual Events,  Next: ttk Notebook,  Prev: Tab Identifiers,  Up: Notebook

5.25.8.22 Virtual Events
........................

This widget generates a '<<NotebookTabChanged>>' virtual event after a
new tab is selected.


File: python.info,  Node: ttk Notebook,  Prev: Virtual Events,  Up: Notebook

5.25.8.23 ttk.Notebook
......................

 -- Classe: tkinter.ttk.Notebook

      -- Método: add (child, **kw)

          Adds a new tab to the notebook.

          If window is currently managed by the notebook but hidden, it
          is restored to its previous position.

          See *note Tab Options: 404d. for the list of available
          options.

      -- Método: forget (tab_id)

          Removes the tab specified by 'tab_id', unmaps and unmanages
          the associated window.

      -- Método: hide (tab_id)

          Hides the tab specified by 'tab_id'.

          The tab will not be displayed, but the associated window
          remains managed by the notebook and its configuration
          remembered.  Hidden tabs may be restored with the *note add():
          4053. command.

      -- Método: identify (x, y)

          Returns the name of the tab element at position 'x', 'y', or
          the empty string if none.

      -- Método: index (tab_id)

          Returns the numeric index of the tab specified by 'tab_id', or
          the total number of tabs if 'tab_id' is the string “end”.

      -- Método: insert (pos, child, **kw)

          Inserts a pane at the specified position.

          'pos' is either the string “end”, an integer index, or the
          name of a managed child.  If 'child' is already managed by the
          notebook, moves it to the specified position.

          See *note Tab Options: 404d. for the list of available
          options.

      -- Método: select (tab_id=None)

          Selects the specified 'tab_id'.

          The associated child window will be displayed, and the
          previously selected window (if different) is unmapped.  If
          'tab_id' is omitted, returns the widget name of the currently
          selected pane.

      -- Método: tab (tab_id, option=None, **kw)

          Query or modify the options of the specific 'tab_id'.

          If 'kw' is not given, returns a dictionary of the tab option
          values.  If 'option' is specified, returns the value of that
          'option'.  Otherwise, sets the options to the corresponding
          values.

      -- Método: tabs ()

          Returns a list of windows managed by the notebook.

      -- Método: enable_traversal ()

          Enable keyboard traversal for a toplevel window containing
          this notebook.

          This will extend the bindings for the toplevel window
          containing the notebook as follows:

             * ‘Control’-‘Tab’: selects the tab following the currently
               selected one.

             * ‘Shift’-‘Control’-‘Tab’: selects the tab preceding the
               currently selected one.

             * ‘Alt’-‘K’: where 'K' is the mnemonic (underlined)
               character of any tab, will select that tab.

          Multiple notebooks in a single toplevel may be enabled for
          traversal, including nested notebooks.  However, notebook
          traversal only works properly if all panes have the notebook
          they are in as master.


File: python.info,  Node: Progressbar,  Next: Separator,  Prev: Notebook,  Up: tkinter ttk — Widgets temáticos do Tk

5.25.8.24 Progressbar
.....................

The ‘ttk.Progressbar’ widget shows the status of a long-running
operation.  It can operate in two modes: 1) the determinate mode which
shows the amount completed relative to the total amount of work to be
done and 2) the indeterminate mode which provides an animated display to
let the user know that work is progressing.

* Menu:

* Opções: Opções<4>.
* ttk.Progressbar: ttk Progressbar.


File: python.info,  Node: Opções<4>,  Next: ttk Progressbar,  Up: Progressbar

5.25.8.25 Opções
................

Este widget aceita as seguintes opções específicas:

Opção          Descrição
               
-----------------------------------------------------------------------------------
               
orient         One of “horizontal” or “vertical”.  Specifies the orientation of
               the progress bar.
               
               
length         Specifies the length of the long axis of the progress bar (width
               if horizontal, height if vertical).
               
               
mode           One of “determinate” or “indeterminate”.
               
               
maximum        A number specifying the maximum value.  Defaults to 100.
               
               
valor          The current value of the progress bar.  In “determinate” mode,
               this represents the amount of work completed.  In “indeterminate”
               mode, it is interpreted as modulo 'maximum'; that is, the
               progress bar completes one “cycle” when its value increases by
               'maximum'.
               
               
variável       A name which is linked to the option value.  If specified, the
               value of the progress bar is automatically set to the value of
               this name whenever the latter is modified.
               
               
phase          Read-only option.  The widget periodically increments the value
               of this option whenever its value is greater than 0 and, in
               determinate mode, less than maximum.  This option may be used by
               the current theme to provide additional animation effects.
               


File: python.info,  Node: ttk Progressbar,  Prev: Opções<4>,  Up: Progressbar

5.25.8.26 ttk.Progressbar
.........................

 -- Classe: tkinter.ttk.Progressbar

      -- Método: start (interval=None)

          Begin autoincrement mode: schedules a recurring timer event
          that calls *note Progressbar.step(): 405f. every 'interval'
          milliseconds.  If omitted, 'interval' defaults to 50
          milliseconds.

      -- Método: step (amount=None)

          Increments the progress bar’s value by 'amount'.

          'amount' defaults to 1.0 if omitted.

      -- Método: stop ()

          Stop autoincrement mode: cancels any recurring timer event
          initiated by *note Progressbar.start(): 405e. for this
          progress bar.


File: python.info,  Node: Separator,  Next: Sizegrip,  Prev: Progressbar,  Up: tkinter ttk — Widgets temáticos do Tk

5.25.8.27 Separator
...................

The ‘ttk.Separator’ widget displays a horizontal or vertical separator
bar.

It has no other methods besides the ones inherited from ‘ttk.Widget’.

* Menu:

* Opções: Opções<5>.


File: python.info,  Node: Opções<5>,  Up: Separator

5.25.8.28 Opções
................

This widget accepts the following specific option:

Opção        Descrição
             
----------------------------------------------------------------------------------
             
orient       One of “horizontal” or “vertical”.  Specifies the orientation of
             the separator.
             


File: python.info,  Node: Sizegrip,  Next: Treeview,  Prev: Separator,  Up: tkinter ttk — Widgets temáticos do Tk

5.25.8.29 Sizegrip
..................

The ‘ttk.Sizegrip’ widget (also known as a grow box) allows the user to
resize the containing toplevel window by pressing and dragging the grip.

This widget has neither specific options nor specific methods, besides
the ones inherited from ‘ttk.Widget’.

* Menu:

* Platform-specific notes::
* Bugs::


File: python.info,  Node: Platform-specific notes,  Next: Bugs,  Up: Sizegrip

5.25.8.30 Platform-specific notes
.................................

   * On macOS, toplevel windows automatically include a built-in size
     grip by default.  Adding a ‘Sizegrip’ is harmless, since the
     built-in grip will just mask the widget.


File: python.info,  Node: Bugs,  Prev: Platform-specific notes,  Up: Sizegrip

5.25.8.31 Bugs
..............

   * If the containing toplevel’s position was specified relative to the
     right or bottom of the screen (e.g.  ….), the ‘Sizegrip’ widget
     will not resize the window.

   * This widget supports only “southeast” resizing.


File: python.info,  Node: Treeview,  Next: Ttk Styling,  Prev: Sizegrip,  Up: tkinter ttk — Widgets temáticos do Tk

5.25.8.32 Treeview
..................

The ‘ttk.Treeview’ widget displays a hierarchical collection of items.
Each item has a textual label, an optional image, and an optional list
of data values.  The data values are displayed in successive columns
after the tree label.

The order in which data values are displayed may be controlled by
setting the widget option ‘displaycolumns’.  The tree widget can also
display column headings.  Columns may be accessed by number or symbolic
names listed in the widget option columns.  See *note Column
Identifiers: 4067.

Each item is identified by a unique name.  The widget will generate item
IDs if they are not supplied by the caller.  There is a distinguished
root item, named ‘{}’.  The root item itself is not displayed; its
children appear at the top level of the hierarchy.

Each item also has a list of tags, which can be used to associate event
bindings with individual items and control the appearance of the item.

The Treeview widget supports horizontal and vertical scrolling,
according to the options described in *note Scrollable Widget Options:
4036. and the methods *note Treeview.xview(): 4068. and *note
Treeview.yview(): 4069.

* Menu:

* Opções: Opções<6>.
* Item Options::
* Tag Options::
* Column Identifiers::
* Virtual Events: Virtual Events<2>.
* ttk.Treeview: ttk Treeview.


File: python.info,  Node: Opções<6>,  Next: Item Options,  Up: Treeview

5.25.8.33 Opções
................

Este widget aceita as seguintes opções específicas:

Opção                Descrição
                     
----------------------------------------------------------------------------------
                     
columns              A list of column identifiers, specifying the number of
                     columns and their names.
                     
                     
displaycolumns       A list of column identifiers (either symbolic or integer
                     indices) specifying which data columns are displayed and
                     the order in which they appear, or the string “#all”.
                     
                     
height               Specifies the number of rows which should be visible.
                     Note: the requested width is determined from the sum of
                     the column widths.
                     
                     
padding              Specifies the internal padding for the widget.  The
                     padding is a list of up to four length specifications.
                     
                     
selectmode           Controls how the built-in class bindings manage the
                     selection.  One of “extended”, “browse” or “none”.  If set
                     to “extended” (the default), multiple items may be
                     selected.  If “browse”, only a single item will be
                     selected at a time.  If “none”, the selection will not be
                     changed.
                     
                     Note that the application code and tag bindings can set
                     the selection however they wish, regardless of the value
                     of this option.
                     
                     
show                 A list containing zero or more of the following values,
                     specifying which elements of the tree to display.
                     
                        * tree: display tree labels in column #0.
                     
                        * headings: display the heading row.
                     
                     The default is “tree headings”, i.e., show all elements.
                     
                     'Note': Column #0 always refers to the tree column, even
                     if show=”tree” is not specified.
                     


File: python.info,  Node: Item Options,  Next: Tag Options,  Prev: Opções<6>,  Up: Treeview

5.25.8.34 Item Options
......................

The following item options may be specified for items in the insert and
item widget commands.

Opção        Descrição
             
---------------------------------------------------------------------------------
             
text         The textual label to display for the item.
             
             
image        A Tk Image, displayed to the left of the label.
             
             
valores      The list of values associated with the item.
             
             Each item should have the same number of values as the widget
             option columns.  If there are fewer values than columns, the
             remaining values are assumed empty.  If there are more values
             than columns, the extra values are ignored.
             
             
open         ‘True’/‘False’ value indicating whether the item’s children
             should be displayed or hidden.
             
             
tags         A list of tags associated with this item.
             


File: python.info,  Node: Tag Options,  Next: Column Identifiers,  Prev: Item Options,  Up: Treeview

5.25.8.35 Tag Options
.....................

The following options may be specified on tags:

Opção            Descrição
                 
---------------------------------------------------------------------------------
                 
foreground       Specifies the text foreground color.
                 
                 
background       Specifies the cell or item background color.
                 
                 
font             Specifies the font to use when drawing text.
                 
                 
image            Specifies the item image, in case the item’s image option is
                 empty.
                 


File: python.info,  Node: Column Identifiers,  Next: Virtual Events<2>,  Prev: Tag Options,  Up: Treeview

5.25.8.36 Column Identifiers
............................

Column identifiers take any of the following forms:

   * A symbolic name from the list of columns option.

   * An integer n, specifying the nth data column.

   * A string of the form #n, where n is an integer, specifying the nth
     display column.

Notas:

   * Item’s option values may be displayed in a different order than the
     order in which they are stored.

   * Column #0 always refers to the tree column, even if show=”tree” is
     not specified.

A data column number is an index into an item’s option values list; a
display column number is the column number in the tree where the values
are displayed.  Tree labels are displayed in column #0.  If option
displaycolumns is not set, then data column n is displayed in column
#n+1.  Again, 'column #0 always refers to the tree column'.


File: python.info,  Node: Virtual Events<2>,  Next: ttk Treeview,  Prev: Column Identifiers,  Up: Treeview

5.25.8.37 Virtual Events
........................

The Treeview widget generates the following virtual events.

Evento                   Descrição
                         
--------------------------------------------------------------------------------
                         
<<TreeviewSelect>>       Generated whenever the selection changes.
                         
                         
<<TreeviewOpen>>         Generated just before settings the focus item to
                         open=True.
                         
                         
<<TreeviewClose>>        Generated just after setting the focus item to
                         open=False.
                         

The *note Treeview.focus(): 406e. and *note Treeview.selection(): a9e.
methods can be used to determine the affected item or items.


File: python.info,  Node: ttk Treeview,  Prev: Virtual Events<2>,  Up: Treeview

5.25.8.38 ttk.Treeview
......................

 -- Classe: tkinter.ttk.Treeview

      -- Método: bbox (item, column=None)

          Returns the bounding box (relative to the treeview widget’s
          window) of the specified 'item' in the form (x, y, width,
          height).

          If 'column' is specified, returns the bounding box of that
          cell.  If the 'item' is not visible (i.e., if it is a
          descendant of a closed item or is scrolled offscreen), returns
          an empty string.

      -- Método: get_children (item=None)

          Returns the list of children belonging to 'item'.

          If 'item' is not specified, returns root children.

      -- Método: set_children (item, *newchildren)

          Replaces 'item'’s child with 'newchildren'.

          Children present in 'item' that are not present in
          'newchildren' are detached from the tree.  No items in
          'newchildren' may be an ancestor of 'item'.  Note that not
          specifying 'newchildren' results in detaching 'item'’s
          children.

      -- Método: column (column, option=None, **kw)

          Query or modify the options for the specified 'column'.

          If 'kw' is not given, returns a dict of the column option
          values.  If 'option' is specified then the value for that
          'option' is returned.  Otherwise, sets the options to the
          corresponding values.

          The valid options/values are:

          'id'

               Returns the column name.  This is a read-only option.

          'anchor': One of the standard Tk anchor values.

               Specifies how the text in this column should be aligned
               with respect to the cell.

          'minwidth': width

               The minimum width of the column in pixels.  The treeview
               widget will not make the column any smaller than
               specified by this option when the widget is resized or
               the user drags a column.

          'stretch': ‘True’/‘False’

               Specifies whether the column’s width should be adjusted
               when the widget is resized.

          'width': width

               The width of the column in pixels.

          To configure the tree column, call this with column = “#0”

      -- Método: delete (*items)

          Delete all specified 'items' and all their descendants.

          The root item may not be deleted.

      -- Método: detach (*items)

          Unlinks all of the specified 'items' from the tree.

          The items and all of their descendants are still present, and
          may be reinserted at another point in the tree, but will not
          be displayed.

          The root item may not be detached.

      -- Método: exists (item)

          Returns ‘True’ if the specified 'item' is present in the tree.

      -- Método: focus (item=None)

          If 'item' is specified, sets the focus item to 'item'.
          Otherwise, returns the current focus item, or ‘’ if there is
          none.

      -- Método: heading (column, option=None, **kw)

          Query or modify the heading options for the specified
          'column'.

          If 'kw' is not given, returns a dict of the heading option
          values.  If 'option' is specified then the value for that
          'option' is returned.  Otherwise, sets the options to the
          corresponding values.

          The valid options/values are:

          'text': text

               The text to display in the column heading.

          'image': imageName

               Specifies an image to display to the right of the column
               heading.

          'anchor': anchor

               Specifies how the heading text should be aligned.  One of
               the standard Tk anchor values.

          'command': callback

               A callback to be invoked when the heading label is
               pressed.

          To configure the tree column heading, call this with column =
          “#0”.

      -- Método: identify (component, x, y)

          Returns a description of the specified 'component' under the
          point given by 'x' and 'y', or the empty string if no such
          'component' is present at that position.

      -- Método: identify_row (y)

          Returns the item ID of the item at position 'y'.

      -- Método: identify_column (x)

          Returns the data column identifier of the cell at position
          'x'.

          The tree column has ID #0.

      -- Método: identify_region (x, y)

          Returns one of:

          region          meaning
                          
          -----------------------------------------------------------
                          
          heading         Tree heading area.
                          
                          
          separator       Space between two columns headings.
                          
                          
          tree            The tree area.
                          
                          
          cell            A data cell.
                          

          Availability: Tk 8.6.

      -- Método: identify_element (x, y)

          Returns the element at position 'x', 'y'.

          Availability: Tk 8.6.

      -- Método: index (item)

          Returns the integer index of 'item' within its parent’s list
          of children.

      -- Método: insert (parent, index, iid=None, **kw)

          Creates a new item and returns the item identifier of the
          newly created item.

          'parent' is the item ID of the parent item, or the empty
          string to create a new top-level item.  'index' is an integer,
          or the value “end”, specifying where in the list of parent’s
          children to insert the new item.  If 'index' is less than or
          equal to zero, the new node is inserted at the beginning; if
          'index' is greater than or equal to the current number of
          children, it is inserted at the end.  If 'iid' is specified,
          it is used as the item identifier; 'iid' must not already
          exist in the tree.  Otherwise, a new unique identifier is
          generated.

          See *note Item Options: 406b. for the list of available
          options.

      -- Método: item (item, option=None, **kw)

          Query or modify the options for the specified 'item'.

          If no options are given, a dict with options/values for the
          item is returned.  If 'option' is specified then the value for
          that option is returned.  Otherwise, sets the options to the
          corresponding values as given by 'kw'.

      -- Método: move (item, parent, index)

          Moves 'item' to position 'index' in 'parent'’s list of
          children.

          It is illegal to move an item under one of its descendants.
          If 'index' is less than or equal to zero, 'item' is moved to
          the beginning; if greater than or equal to the number of
          children, it is moved to the end.  If 'item' was detached it
          is reattached.

      -- Método: next (item)

          Returns the identifier of 'item'’s next sibling, or ‘’ if
          'item' is the last child of its parent.

      -- Método: parent (item)

          Returns the ID of the parent of 'item', or ‘’ if 'item' is at
          the top level of the hierarchy.

      -- Método: prev (item)

          Returns the identifier of 'item'’s previous sibling, or ‘’ if
          'item' is the first child of its parent.

      -- Método: reattach (item, parent, index)

          An alias for *note Treeview.move(): 4080.

      -- Método: see (item)

          Ensure that 'item' is visible.

          Sets all of 'item'’s ancestors open option to ‘True’, and
          scrolls the widget if necessary so that 'item' is within the
          visible portion of the tree.

      -- Método: selection ()

          Returns a tuple of selected items.

          Alterado na versão 3.8: ‘selection()’ no longer takes
          arguments.  For changing the selection state use the following
          selection methods.

      -- Método: selection_set (*items)

          'items' becomes the new selection.

          Alterado na versão 3.6: 'items' can be passed as separate
          arguments, not just as a single tuple.

      -- Método: selection_add (*items)

          Add 'items' to the selection.

          Alterado na versão 3.6: 'items' can be passed as separate
          arguments, not just as a single tuple.

      -- Método: selection_remove (*items)

          Remove 'items' from the selection.

          Alterado na versão 3.6: 'items' can be passed as separate
          arguments, not just as a single tuple.

      -- Método: selection_toggle (*items)

          Toggle the selection state of each item in 'items'.

          Alterado na versão 3.6: 'items' can be passed as separate
          arguments, not just as a single tuple.

      -- Método: set (item, column=None, value=None)

          With one argument, returns a dictionary of column/value pairs
          for the specified 'item'.  With two arguments, returns the
          current value of the specified 'column'.  With three
          arguments, sets the value of given 'column' in given 'item' to
          the specified 'value'.

      -- Método: tag_bind (tagname, sequence=None, callback=None)

          Bind a callback for the given event 'sequence' to the tag
          'tagname'.  When an event is delivered to an item, the
          callbacks for each of the item’s tags option are called.

      -- Método: tag_configure (tagname, option=None, **kw)

          Query or modify the options for the specified 'tagname'.

          If 'kw' is not given, returns a dict of the option settings
          for 'tagname'.  If 'option' is specified, returns the value
          for that 'option' for the specified 'tagname'.  Otherwise,
          sets the options to the corresponding values for the given
          'tagname'.

      -- Método: tag_has (tagname, item=None)

          If 'item' is specified, returns 1 or 0 depending on whether
          the specified 'item' has the given 'tagname'.  Otherwise,
          returns a list of all items that have the specified tag.

          Availability: Tk 8.6

      -- Método: xview (*args)

          Query or modify horizontal position of the treeview.

      -- Método: yview (*args)

          Query or modify vertical position of the treeview.


File: python.info,  Node: Ttk Styling,  Prev: Treeview,  Up: tkinter ttk — Widgets temáticos do Tk

5.25.8.39 Ttk Styling
.....................

Each widget in ‘ttk’ is assigned a style, which specifies the set of
elements making up the widget and how they are arranged, along with
dynamic and default settings for element options.  By default the style
name is the same as the widget’s class name, but it may be overridden by
the widget’s style option.  If you don’t know the class name of a
widget, use the method ‘Misc.winfo_class()’ (somewidget.winfo_class()).

Ver também
..........

Tcl'2004 conference presentation(1)

     This document explains how the theme engine works

 -- Classe: tkinter.ttk.Style

     This class is used to manipulate the style database.

      -- Método: configure (style, query_opt=None, **kw)

          Query or set the default value of the specified option(s) in
          'style'.

          Each key in 'kw' is an option and each value is a string
          identifying the value for that option.

          For example, to change every default button to be a flat
          button with some padding and a different background color:

               from tkinter import ttk
               import tkinter

               root = tkinter.Tk()

               ttk.Style().configure("TButton", padding=6, relief="flat",
                  background="#ccc")

               btn = ttk.Button(text="Sample")
               btn.pack()

               root.mainloop()

      -- Método: map (style, query_opt=None, **kw)

          Query or sets dynamic values of the specified option(s) in
          'style'.

          Each key in 'kw' is an option and each value should be a list
          or a tuple (usually) containing statespecs grouped in tuples,
          lists, or some other preference.  A statespec is a compound of
          one or more states and then a value.

          An example may make it more understandable:

               import tkinter
               from tkinter import ttk

               root = tkinter.Tk()

               style = ttk.Style()
               style.map("C.TButton",
                   foreground=[('pressed', 'red'), ('active', 'blue')],
                   background=[('pressed', '!disabled', 'black'), ('active', 'white')]
                   )

               colored_btn = ttk.Button(text="Test", style="C.TButton").pack()

               root.mainloop()

          Note that the order of the (states, value) sequences for an
          option does matter, if the order is changed to ‘[('active',
          'blue'), ('pressed', 'red')]’ in the foreground option, for
          example, the result would be a blue foreground when the widget
          were in active or pressed states.

      -- Método: lookup (style, option, state=None, default=None)

          Returns the value specified for 'option' in 'style'.

          If 'state' is specified, it is expected to be a sequence of
          one or more states.  If the 'default' argument is set, it is
          used as a fallback value in case no specification for option
          is found.

          To check what font a Button uses by default:

               from tkinter import ttk

               print(ttk.Style().lookup("TButton", "font"))

      -- Método: layout (style, layoutspec=None)

          Define the widget layout for given 'style'.  If 'layoutspec'
          is omitted, return the layout specification for given style.

          'layoutspec', if specified, is expected to be a list or some
          other sequence type (excluding strings), where each item
          should be a tuple and the first item is the layout name and
          the second item should have the format described in *note
          Layouts: 4091.

          To understand the format, see the following example (it is not
          intended to do anything useful):

               from tkinter import ttk
               import tkinter

               root = tkinter.Tk()

               style = ttk.Style()
               style.layout("TMenubutton", [
                  ("Menubutton.background", None),
                  ("Menubutton.button", {"children":
                      [("Menubutton.focus", {"children":
                          [("Menubutton.padding", {"children":
                              [("Menubutton.label", {"side": "left", "expand": 1})]
                          })]
                      })]
                  }),
               ])

               mbtn = ttk.Menubutton(text='Text')
               mbtn.pack()
               root.mainloop()

      -- Método: element_create (elementname, etype, *args, **kw)

          Create a new element in the current theme, of the given
          'etype' which is expected to be either “image”, “from” or
          “vsapi”.  The latter is only available in Tk 8.6 on Windows.

          If “image” is used, 'args' should contain the default image
          name followed by statespec/value pairs (this is the
          imagespec), and 'kw' may have the following options:

          border=padding

               padding is a list of up to four integers, specifying the
               left, top, right, and bottom borders, respectively.

          height=height

               Specifies a minimum height for the element.  If less than
               zero, the base image’s height is used as a default.

          padding=padding

               Specifies the element’s interior padding.  Defaults to
               border’s value if not specified.

          sticky=spec

               Specifies how the image is placed within the final
               parcel.  spec contains zero or more characters “n”, “s”,
               “w”, or “e”.

          width=width

               Specifies a minimum width for the element.  If less than
               zero, the base image’s width is used as a default.

          Exemplo:

               img1 = tkinter.PhotoImage(master=root, file='button.png')
               img1 = tkinter.PhotoImage(master=root, file='button-pressed.png')
               img1 = tkinter.PhotoImage(master=root, file='button-active.png')
               style = ttk.Style(root)
               style.element_create('Button.button', 'image',
                                    img1, ('pressed', img2), ('active', img3),
                                    border=(2, 4), sticky='we')

          If “from” is used as the value of 'etype', *note
          element_create(): 258. will clone an existing element.  'args'
          is expected to contain a themename, from which the element
          will be cloned, and optionally an element to clone from.  If
          this element to clone from is not specified, an empty element
          will be used.  'kw' is discarded.

          Exemplo:

               style = ttk.Style(root)
               style.element_create('plain.background', 'from', 'default')

          If “vsapi” is used as the value of 'etype', *note
          element_create(): 258. will create a new element in the
          current theme whose visual appearance is drawn using the
          Microsoft Visual Styles API which is responsible for the
          themed styles on Windows XP and Vista.  'args' is expected to
          contain the Visual Styles class and part as given in the
          Microsoft documentation followed by an optional sequence of
          tuples of ttk states and the corresponding Visual Styles API
          state value.  'kw' may have the following options:

          padding=padding

               Specify the element’s interior padding.  'padding' is a
               list of up to four integers specifying the left, top,
               right and bottom padding quantities respectively.  If
               fewer than four elements are specified, bottom defaults
               to top, right defaults to left, and top defaults to left.
               In other words, a list of three numbers specify the left,
               vertical, and right padding; a list of two numbers
               specify the horizontal and the vertical padding; a single
               number specifies the same padding all the way around the
               widget.  This option may not be mixed with any other
               options.

          margins=padding

               Specifies the elements exterior padding.  'padding' is a
               list of up to four integers specifying the left, top,
               right and bottom padding quantities respectively.  This
               option may not be mixed with any other options.

          width=width

               Specifies the width for the element.  If this option is
               set then the Visual Styles API will not be queried for
               the recommended size or the part.  If this option is set
               then 'height' should also be set.  The 'width' and
               'height' options cannot be mixed with the 'padding' or
               'margins' options.

          height=height

               Specifies the height of the element.  See the comments
               for 'width'.

          Exemplo:

               style = ttk.Style(root)
               style.element_create('pin', 'vsapi', 'EXPLORERBAR', 3, [
                                    ('pressed', '!selected', 3),
                                    ('active', '!selected', 2),
                                    ('pressed', 'selected', 6),
                                    ('active', 'selected', 5),
                                    ('selected', 4),
                                    ('', 1)])
               style.layout('Explorer.Pin',
                            [('Explorer.Pin.pin', {'sticky': 'news'})])
               pin = ttk.Checkbutton(style='Explorer.Pin')
               pin.pack(expand=True, fill='both')

          Alterado na versão 3.13: Added support of the “vsapi” element
          factory.

      -- Método: element_names ()

          Returns the list of elements defined in the current theme.

      -- Método: element_options (elementname)

          Returns the list of 'elementname'’s options.

      -- Método: theme_create (themename, parent=None, settings=None)

          Create a new theme.

          It is an error if 'themename' already exists.  If 'parent' is
          specified, the new theme will inherit styles, elements and
          layouts from the parent theme.  If 'settings' are present they
          are expected to have the same syntax used for *note
          theme_settings(): 4095.

      -- Método: theme_settings (themename, settings)

          Temporarily sets the current theme to 'themename', apply
          specified 'settings' and then restore the previous theme.

          Each key in 'settings' is a style and each value may contain
          the keys ‘configure’, ‘map’, ‘layout’ and ‘element create’ and
          they are expected to have the same format as specified by the
          methods *note Style.configure(): 408e, *note Style.map():
          1a73, *note Style.layout(): 4090. and *note
          Style.element_create(): 258. respectively.

          As an example, let’s change the Combobox for the default theme
          a bit:

               from tkinter import ttk
               import tkinter

               root = tkinter.Tk()

               style = ttk.Style()
               style.theme_settings("default", {
                  "TCombobox": {
                      "configure": {"padding": 5},
                      "map": {
                          "background": [("active", "green2"),
                                         ("!disabled", "green4")],
                          "fieldbackground": [("!disabled", "green3")],
                          "foreground": [("focus", "OliveDrab1"),
                                         ("!disabled", "OliveDrab2")]
                      }
                  }
               })

               combo = ttk.Combobox().pack()

               root.mainloop()

      -- Método: theme_names ()

          Returns a list of all known themes.

      -- Método: theme_use (themename=None)

          If 'themename' is not given, returns the theme in use.
          Otherwise, sets the current theme to 'themename', refreshes
          all widgets and emits a <<ThemeChanged>> event.

* Menu:

* Layouts::

   ---------- Footnotes ----------

   (1) https://tktable.sourceforge.net/tile/tile-tcl2004.pdf


File: python.info,  Node: Layouts,  Up: Ttk Styling

5.25.8.40 Layouts
.................

A layout can be just ‘None’, if it takes no options, or a dict of
options specifying how to arrange the element.  The layout mechanism
uses a simplified version of the pack geometry manager: given an initial
cavity, each element is allocated a parcel.

The valid options/values are:

'side': whichside

     Specifies which side of the cavity to place the element; one of
     top, right, bottom or left.  If omitted, the element occupies the
     entire cavity.

'sticky': nswe

     Specifies where the element is placed inside its allocated parcel.

'unit': 0 ou 1

     If set to 1, causes the element and all of its descendants to be
     treated as a single element for the purposes of *note
     Widget.identify(): 403c. et al.  It’s used for things like
     scrollbar thumbs with grips.

'children': [sublayout… ]

     Specifies a list of elements to place inside the element.  Each
     element is a tuple (or other sequence type) where the first item is
     the layout name, and the other is a *note Layout: 4091.


File: python.info,  Node: IDLE — editor e console Python<2>,  Next: turtle — Gráficos tartaruga,  Prev: tkinter ttk — Widgets temáticos do Tk,  Up: Interfaces gráficas de usuário com Tk

5.25.9 IDLE — editor e console Python
-------------------------------------

'Código-fonte:' Lib/idlelib/(1)

__________________________________________________________________

IDLE é o Ambiente Integrado de Desenvolvimento e Aprendizagem (em
inglês, Integrated Development and Learning Environment) do Python.

O IDLE tem os seguintes recursos:

   * multiplataforma: funciona basicamente da mesma forma no Windows,
     Unix e macOS

   * janela de console do Python (interpretador interativo) com
     colorização de entrada de código, saída e mensagens de erro

   * editor de texto multijanela com múltiplos desfazer, colorização
     Python, indentação inteligente, dicas de chamada, preenchimento
     automático e outros recursos

   * pesquisa em qualquer janela, substituição nas janelas do editor e
     pesquisa em vários arquivos (grep)

   * depurador com pontos de interrupção persistentes, etapas e
     visualização de espaço de nomes global e local

   * configuração, navegadores e outros diálogos

A aplicação IDLE está implementada no pacote *note idlelib: 73.

This is an optional module.  If it is missing from your copy of CPython,
look for documentation from your distributor (that is, whoever provided
Python to you).  If you are the distributor, see Requirements for
optional modules.

* Menu:

* Menus::
* Editing and Navigation::
* Startup and Code Execution::
* Help and Preferences::
* idlelib — implementation of IDLE application::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/idlelib/


File: python.info,  Node: Menus,  Next: Editing and Navigation,  Up: IDLE — editor e console Python<2>

5.25.9.1 Menus
..............

O IDLE possui dois tipos principais de janelas: a janela do console e a
janela do editor.  É possível ter várias janelas do editor abertas
simultaneamente.  No Windows e no Linux, cada uma tem seu próprio menu
superior.  Cada menu documentado abaixo indica a qual tipo de janela
está associado.

Janelas de saída, como as usadas para Edit => Find in Files, são um
subtipo de janela de editor.  Atualmente, têm o mesmo menu superior, mas
um título predefinido e menu de contexto diferentes.

No macOS, há um menu de aplicações.  Ele muda dinamicamente conforme a
janela selecionada no momento.  Ele possui um menu de IDLE e algumas
entradas descritas abaixo foram movidas para atender às diretrizes da
Apple.

* Menu:

* Menu File (Console e editor): Menu File Console e editor.
* Menu Edit (Shell e Editor): Menu Edit Shell e Editor.
* Menu Format (Somente na janela do Editor): Menu Format Somente na janela do Editor.
* Run menu (Editor window only): Run menu Editor window only.
* Shell menu (Shell window only): Shell menu Shell window only.
* Debug menu (Shell window only): Debug menu Shell window only.
* Options menu (Shell and Editor): Options menu Shell and Editor.
* Window menu (Shell and Editor): Window menu Shell and Editor.
* Help menu (Shell and Editor): Help menu Shell and Editor.
* Context menus::


File: python.info,  Node: Menu File Console e editor,  Next: Menu Edit Shell e Editor,  Up: Menus

5.25.9.2 Menu File (Console e editor)
.....................................

New File

     Cria uma nova janela de edição de arquivo.

Open…

     Abre um arquivo existente com uma caixa de diálogo Open.

Open Module…

     Abre um módulo existente (procura em sys.path).

Recent Files

     Abre uma lista de arquivos recentes.  Clique em um para abri-lo.

Module Browser

     Mostra as funções, classes e métodos do arquivo atual do editor em
     uma estrutura de árvore.  No console, abre primeiro um módulo.

Path Browser

     Mostra os diretórios do sys.path, módulos, funções, classes e
     métodos em uma estrutura de árvore.

Save

     Salva o conteúdo da janela atual no arquivo associado, se houver
     um.  Janelas que foram alteradas desde que foram abertas ou salvas
     pela última vez têm um * antes e depois do título da janela.  Se
     não houver um arquivo associado, executa Save As.

Save As…

     Salva a janela atual com uma caixa de diálogo Save As.  O arquivo
     salvo torna-se o novo arquivo associado à janela.  (Se o seu
     explorador de arquivos estiver configurado para ocultar extensões,
     a extensão atual será omitida na caixa de nome do arquivo.  Se o
     novo nome do arquivo não tiver ‘.’, ‘.py’ e ‘.txt’ serão
     adicionados a arquivos Python e de texto, exceto no macOS Aqua,
     onde ‘.py’ é adicionado a todos os arquivos.)

Save Copy As…

     Salva a janela atual em um arquivo diferente sem alterar o arquivo
     associado.  (veja Save As acima sobre a extensão do nome do
     arquivo.)

Print Window

     Imprime a janela atual para a impressora padrão.

Close Window

     Fecha a janela atual (se for um editor não salvo, pergunta se quer
     salvar; se for um console não salvo, pergunta se quer sair da
     execução).  Chamar ‘exit()’ ou ‘close()’ na janela do console
     também fecha o console.  Se esta for a única janela, também sai do
     IDLE.

Exit IDLE

     Fecha todas as janelas e sai do IDLE (pergunta se quer salvar as
     janelas de edição não salvas).


File: python.info,  Node: Menu Edit Shell e Editor,  Next: Menu Format Somente na janela do Editor,  Prev: Menu File Console e editor,  Up: Menus

5.25.9.3 Menu Edit (Shell e Editor)
...................................

Undo

     Desfaz a última alteração na janela atual.  Um máximo de 1000
     alterações pode ser desfeito.

Redo

     Refaz a última alteração desfeita na janela atual.

Select All

     Seleciona todo o conteúdo da janela atual.

Cut

     Copia a seleção para a área de transferência do sistema; depois
     apaga a seleção.

Copy

     Copia a seleção para a área de transferência do sistema.

Paste

     Insere o conteúdo da área de transferência do sistema na janela
     atual.

As funções da área de transferência também estão disponíveis nos menus
de contexto.

Find…

     Abre uma caixa de diálogo de pesquisa com muitas opções

Find Again

     Repete a última pesquisa, se houver uma.

Find Selection

     Procura a string atualmente selecionada, se houver uma.

Find in Files…

     Abre uma caixa de diálogo de pesquisa de ficheiros.  Coloca os
     resultados numa nova janela de saída.

Replace…

     Abre uma caixa de diálogo de pesquisa e substituição.

Go to Line

     Move o cursor para o início da linha solicitada e torna essa linha
     visível.  Um pedido após o final do ficheiro vai para o final.
     Limpa qualquer seleção e atualiza o estado da linha e da coluna.

Show Completions

     Open a scrollable list allowing selection of existing names.  See
     *note Completions: 409f. in the Editing and Navigation section
     below.

Expand Word

     Expande um prefixo que você digitou para corresponder a uma palavra
     completa na mesma janela; repita o processo para obter uma expansão
     diferente.

Show Call Tip

     After an unclosed parenthesis for a function, open a small window
     with function parameter hints.  See *note Calltips: 40a0. in the
     Editing and Navigation section below.

Show Surrounding Parens

     Realça os parênteses envolventes.


File: python.info,  Node: Menu Format Somente na janela do Editor,  Next: Run menu Editor window only,  Prev: Menu Edit Shell e Editor,  Up: Menus

5.25.9.4 Menu Format (Somente na janela do Editor)
..................................................

Format Paragraph

     Rewrap the text block containing the text insert cursor.  Avoid
     code lines.  See *note Format block: 40a3. in the Editing and
     Navigation section below.

Indent Region

     Desloca as linhas selecionadas à direita pela largura de indentação
     (4 espaços por padrão).

Dedent Region

     Desloca as linhas selecionadas à esquerda pela largura de
     indentação (4 espaços por padrão).

Comment Out Region

     Insere ## à frente das linhas selecionadas.

Uncomment Region

     Remove # ou ## iniciais das linhas selecionadas.

Tabify Region

     Converte sequências iniciais de espaços em tabs.  (Nota:
     recomendamos usar blocos de 4 espaços para indentar código Python.)

Untabify Region

     Converte 'todos' os tabs para o número correto de espaços.

Toggle Tabs

     Abre uma caixa de diálogo para alternar entre espaços e tabs para
     indentar.

New Indent Width

     Abre uma caixa de diálogo para alterar a largura de indentação.  A
     largura predefinida aceita pela comunidade Python é de 4 espaços.

Strip Trailing Whitespace

     Remove espaços e outros caracteres de espaço em branco após o
     último caractere não branco de uma linha aplicando *note
     str.rstrip(): 14f9. a cada linha, incluindo linhas dentro de
     strings multilinhas.  Exceto para as janelas Shell, remove as novas
     linhas extras no final do arquivo.


File: python.info,  Node: Run menu Editor window only,  Next: Shell menu Shell window only,  Prev: Menu Format Somente na janela do Editor,  Up: Menus

5.25.9.5 Run menu (Editor window only)
......................................

Run Module

     Do *note Check Module: 40a6.  If no error, restart the shell to
     clean the environment, then execute the module.  Output is
     displayed in the Shell window.  Note that output requires use of
     ‘print’ or ‘write’.  When execution is complete, the Shell retains
     focus and displays a prompt.  At this point, one may interactively
     explore the result of execution.  This is similar to executing a
     file with ‘python -i file’ at a command line.

Run… Customized

     Same as *note Run Module: 40a5, but run the module with customized
     settings.  'Command Line Arguments' extend *note sys.argv: 12a6. as
     if passed on a command line.  The module can be run in the Shell
     without restarting.

Check Module

     Check the syntax of the module currently open in the Editor window.
     If the module has not been saved IDLE will either prompt the user
     to save or autosave, as selected in the General tab of the Idle
     Settings dialog.  If there is a syntax error, the approximate
     location is indicated in the Editor window.

Python Shell

     Open or wake up the Python Shell window.


File: python.info,  Node: Shell menu Shell window only,  Next: Debug menu Shell window only,  Prev: Run menu Editor window only,  Up: Menus

5.25.9.6 Shell menu (Shell window only)
.......................................

View Last Restart

     Scroll the shell window to the last Shell restart.

Restart Shell

     Restart the shell to clean the environment and reset display and
     exception handling.

Previous History

     Cycle through earlier commands in history which match the current
     entry.

Next History

     Cycle through later commands in history which match the current
     entry.

Interrupt Execution

     Stop a running program.


File: python.info,  Node: Debug menu Shell window only,  Next: Options menu Shell and Editor,  Prev: Shell menu Shell window only,  Up: Menus

5.25.9.7 Debug menu (Shell window only)
.......................................

Go to File/Line

     Look on the current line.  with the cursor, and the line above for
     a filename and line number.  If found, open the file if not already
     open, and show the line.  Use this to view source lines referenced
     in an exception traceback and lines found by Find in Files.  Also
     available in the context menu of the Shell window and Output
     windows.

Debugger (toggle)

     When activated, code entered in the Shell or run from an Editor
     will run under the debugger.  In the Editor, breakpoints can be set
     with the context menu.  This feature is still incomplete and
     somewhat experimental.

Stack Viewer

     Show the stack traceback of the last exception in a tree widget,
     with access to locals and globals.

Auto-open Stack Viewer

     Toggle automatically opening the stack viewer on an unhandled
     exception.


File: python.info,  Node: Options menu Shell and Editor,  Next: Window menu Shell and Editor,  Prev: Debug menu Shell window only,  Up: Menus

5.25.9.8 Options menu (Shell and Editor)
........................................

Configure IDLE

     Open a configuration dialog and change preferences for the
     following: fonts, indentation, keybindings, text color themes,
     startup windows and size, additional help sources, and extensions.
     On macOS, open the configuration dialog by selecting Preferences in
     the application menu.  For more details, see *note Setting
     preferences: 40ac. under Help and preferences.

Most configuration options apply to all windows or all future windows.
The option items below only apply to the active window.

Show/Hide Code Context (Editor Window only)

     Open a pane at the top of the edit window which shows the block
     context of the code which has scrolled above the top of the window.
     See *note Code Context: 40ad. in the Editing and Navigation section
     below.

Show/Hide Line Numbers (Editor Window only)

     Open a column to the left of the edit window which shows the number
     of each line of text.  The default is off, which may be changed in
     the preferences (see *note Setting preferences: 40ac.).

Zoom/Restore Height

     Toggles the window between normal size and maximum height.  The
     initial size defaults to 40 lines by 80 chars unless changed on the
     General tab of the Configure IDLE dialog.  The maximum height for a
     screen is determined by momentarily maximizing a window the first
     time one is zoomed on the screen.  Changing screen settings may
     invalidate the saved height.  This toggle has no effect when a
     window is maximized.


File: python.info,  Node: Window menu Shell and Editor,  Next: Help menu Shell and Editor,  Prev: Options menu Shell and Editor,  Up: Menus

5.25.9.9 Window menu (Shell and Editor)
.......................................

Lists the names of all open windows; select one to bring it to the
foreground (deiconifying it if necessary).


File: python.info,  Node: Help menu Shell and Editor,  Next: Context menus,  Prev: Window menu Shell and Editor,  Up: Menus

5.25.9.10 Help menu (Shell and Editor)
......................................

About IDLE

     Display version, copyright, license, credits, and more.

IDLE Help

     Display this IDLE document, detailing the menu options, basic
     editing and navigation, and other tips.

Python Docs

     Access local Python documentation, if installed, or start a web
     browser and open docs.python.org showing the latest Python
     documentation.

Turtle Demo

     Run the turtledemo module with example Python code and turtle
     drawings.

Additional help sources may be added here with the Configure IDLE dialog
under the General tab.  See the *note Help sources: 40b0. subsection
below for more on Help menu choices.


File: python.info,  Node: Context menus,  Prev: Help menu Shell and Editor,  Up: Menus

5.25.9.11 Context menus
.......................

Open a context menu by right-clicking in a window (Control-click on
macOS). Context menus have the standard clipboard functions also on the
Edit menu.

Cut

     Copia a seleção para a área de transferência do sistema; depois
     apaga a seleção.

Copy

     Copia a seleção para a área de transferência do sistema.

Paste

     Insere o conteúdo da área de transferência do sistema na janela
     atual.

Editor windows also have breakpoint functions.  Lines with a breakpoint
set are specially marked.  Breakpoints only have an effect when running
under the debugger.  Breakpoints for a file are saved in the user’s
‘.idlerc’ directory.

Set Breakpoint

     Set a breakpoint on the current line.

Clear Breakpoint

     Clear the breakpoint on that line.

Shell and Output windows also have the following.

Go to file/line

     Same as in Debug menu.

The Shell window also has an output squeezing facility explained in the
'Python Shell window' subsection below.

Squeeze

     If the cursor is over an output line, squeeze all the output
     between the code above and the prompt below down to a ‘Squeezed
     text’ label.


File: python.info,  Node: Editing and Navigation,  Next: Startup and Code Execution,  Prev: Menus,  Up: IDLE — editor e console Python<2>

5.25.9.12 Editing and Navigation
................................

* Menu:

* Editor windows::
* Teclas de atalho::
* Indentação automática::
* Busca e Substituição::
* Completions::
* Dicas de chamada::
* Format block::
* Code Context::
* Shell window::
* Text colors::


File: python.info,  Node: Editor windows,  Next: Teclas de atalho,  Up: Editing and Navigation

5.25.9.13 Editor windows
........................

IDLE may open editor windows when it starts, depending on settings and
how you start IDLE. Thereafter, use the File menu.  There can be only
one open editor window for a given file.

The title bar contains the name of the file, the full path, and the
version of Python and IDLE running the window.  The status bar contains
the line number (‘Ln’) and column number (‘Col’).  Line numbers start
with 1; column numbers with 0.

IDLE assumes that files with a known .py* extension contain Python code
and that other files do not.  Run Python code with the Run menu.


File: python.info,  Node: Teclas de atalho,  Next: Indentação automática,  Prev: Editor windows,  Up: Editing and Navigation

5.25.9.14 Teclas de atalho
..........................

The IDLE insertion cursor is a thin vertical bar between character
positions.  When characters are entered, the insertion cursor and
everything to its right moves right one character and the new character
is entered in the new space.

Several non-character keys move the cursor and possibly delete
characters.  Deletion does not puts text on the clipboard, but IDLE has
an undo list.  Wherever this doc discusses keys, ‘C’ refers to the
‘Control’ key on Windows and Unix and the ‘Command’ key on macOS. (And
all such discussions assume that the keys have not been re-bound to
something else.)

   * Arrow keys move the cursor one character or line.

   * ‘C’-‘LeftArrow’ and ‘C’-‘RightArrow’ moves left or right one word.

   * ‘Home’ and ‘End’ go to the beginning or end of the line.

   * ‘Page Up’ and ‘Page Down’ go up or down one screen.

   * ‘C’-‘Home’ and ‘C’-‘End’ go to beginning or end of the file.

   * ‘Backspace’ and ‘Del’ (or ‘C’-‘d’) delete the previous or next
     character.

   * ‘C’-‘Backspace’ and ‘C’-‘Del’ delete one word left or right.

   * ‘C’-‘k’ deletes (‘kills’) everything to the right.

Standard keybindings (like ‘C’-‘c’ to copy and ‘C’-‘v’ to paste) may
work.  Keybindings are selected in the Configure IDLE dialog.


File: python.info,  Node: Indentação automática,  Next: Busca e Substituição,  Prev: Teclas de atalho,  Up: Editing and Navigation

5.25.9.15 Indentação automática
...............................

Depois de uma instrução de abertura de bloco, a linha seguinte é
indentada por 4 espaços (na janela do console Python por um tab).
Depois de certas palavras-chave (break, return, etc.)  a linha seguinte
é desindentada.  Na indentação inicial, ‘Backspace’ apaga até 4 espaços
se eles estiverem lá.  ‘Tab’ insere espaços (na janela do console Python
um tab), o número depende da largura de indentação.  Atualmente, os tabs
estão limitados a quatro espaços devido a limitações do Tcl/Tk.

Veja também os comandos de indentar/desindentar região no *note menu
Format: 40a1.


File: python.info,  Node: Busca e Substituição,  Next: Completions,  Prev: Indentação automática,  Up: Editing and Navigation

5.25.9.16 Busca e Substituição
..............................

Any selection becomes a search target.  However, only selections within
a line work because searches are only performed within lines with the
terminal newline removed.  If ‘[x] Regular expression’ is checked, the
target is interpreted according to the Python re module.


File: python.info,  Node: Completions,  Next: Dicas de chamada,  Prev: Busca e Substituição,  Up: Editing and Navigation

5.25.9.17 Completions
.....................

Completions are supplied, when requested and available, for module
names, attributes of classes or functions, or filenames.  Each request
method displays a completion box with existing names.  (See tab
completions below for an exception.)  For any box, change the name being
completed and the item highlighted in the box by typing and deleting
characters; by hitting ‘Up’, ‘Down’, ‘PageUp’, ‘PageDown’, ‘Home’, and
‘End’ keys; and by a single click within the box.  Close the box with
‘Escape’, ‘Enter’, and double ‘Tab’ keys or clicks outside the box.  A
double click within the box selects and closes.

One way to open a box is to type a key character and wait for a
predefined interval.  This defaults to 2 seconds; customize it in the
settings dialog.  (To prevent auto popups, set the delay to a large
number of milliseconds, such as 100000000.)  For imported module names
or class or function attributes, type ‘.’.  For filenames in the root
directory, type *note os.sep: 66a. or *note os.altsep: 66b. immediately
after an opening quote.  (On Windows, one can specify a drive first.)
Move into subdirectories by typing a directory name and a separator.

Instead of waiting, or after a box is closed, open a completion box
immediately with Show Completions on the Edit menu.  The default hot key
is ‘C’-‘space’.  If one types a prefix for the desired name before
opening the box, the first match or near miss is made visible.  The
result is the same as if one enters a prefix after the box is displayed.
Show Completions after a quote completes filenames in the current
directory instead of a root directory.

Hitting ‘Tab’ after a prefix usually has the same effect as Show
Completions.  (With no prefix, it indents.)  However, if there is only
one match to the prefix, that match is immediately added to the editor
text without opening a box.

Invoking ‘Show Completions’, or hitting ‘Tab’ after a prefix, outside of
a string and without a preceding ‘.’ opens a box with keywords, builtin
names, and available module-level names.

When editing code in an editor (as oppose to Shell), increase the
available module-level names by running your code and not restarting the
Shell thereafter.  This is especially useful after adding imports at the
top of a file.  This also increases possible attribute completions.

Completion boxes initially exclude names beginning with ‘_’ or, for
modules, not included in ‘__all__’.  The hidden names can be accessed by
typing ‘_’ after ‘.’, either before or after the box is opened.


File: python.info,  Node: Dicas de chamada,  Next: Format block,  Prev: Completions,  Up: Editing and Navigation

5.25.9.18 Dicas de chamada
..........................

A calltip is shown automatically when one types ‘(’ after the name of an
'accessible' function.  A function name expression may include dots and
subscripts.  A calltip remains until it is clicked, the cursor is moved
out of the argument area, or ‘)’ is typed.  Whenever the cursor is in
the argument part of a definition, select Edit and “Show Call Tip” on
the menu or enter its shortcut to display a calltip.

The calltip consists of the function’s signature and docstring up to the
latter’s first blank line or the fifth non-blank line.  (Some builtin
functions lack an accessible signature.)  A ‘/’ or ‘*’ in the signature
indicates that the preceding or following arguments are passed by
position or name (keyword) only.  Details are subject to change.

In Shell, the accessible functions depends on what modules have been
imported into the user process, including those imported by Idle itself,
and which definitions have been run, all since the last restart.

For example, restart the Shell and enter ‘itertools.count(’.  A calltip
appears because Idle imports itertools into the user process for its own
use.  (This could change.)  Enter ‘turtle.write(’ and nothing appears.
Idle does not itself import turtle.  The menu entry and shortcut also do
nothing.  Enter ‘import turtle’.  Thereafter, ‘turtle.write(’ will
display a calltip.

In an editor, import statements have no effect until one runs the file.
One might want to run a file after writing import statements, after
adding function definitions, or after opening an existing file.


File: python.info,  Node: Format block,  Next: Code Context,  Prev: Dicas de chamada,  Up: Editing and Navigation

5.25.9.19 Format block
......................

Reformat Paragraph rewraps a block (‘paragraph’) of contiguous equally
indented non-blank comments, a similar block of text within a multiline
string, or a selected subset of either.  If needed, add a blank line to
separate string from code.  Partial lines in a selection expand to
complete lines.  The resulting lines have the same indent as before but
have maximum total length of N columns (characters).  Change the default
N of 72 on the Window tab of IDLE Settings.


File: python.info,  Node: Code Context,  Next: Shell window,  Prev: Format block,  Up: Editing and Navigation

5.25.9.20 Code Context
......................

Within an editor window containing Python code, code context can be
toggled in order to show or hide a pane at the top of the window.  When
shown, this pane freezes the opening lines for block code, such as those
beginning with ‘class’, ‘def’, or ‘if’ keywords, that would have
otherwise scrolled out of view.  The size of the pane will be expanded
and contracted as needed to show the all current levels of context, up
to the maximum number of lines defined in the Configure IDLE dialog
(which defaults to 15).  If there are no current context lines and the
feature is toggled on, a single blank line will display.  Clicking on a
line in the context pane will move that line to the top of the editor.

The text and background colors for the context pane can be configured
under the Highlights tab in the Configure IDLE dialog.


File: python.info,  Node: Shell window,  Next: Text colors,  Prev: Code Context,  Up: Editing and Navigation

5.25.9.21 Shell window
......................

In IDLE’s Shell, enter, edit, and recall complete statements.  (Most
consoles and terminals only work with a single physical line at a time).

Submit a single-line statement for execution by hitting ‘Return’ with
the cursor anywhere on the line.  If a line is extended with Backslash
(‘\’), the cursor must be on the last physical line.  Submit a
multi-line compound statement by entering a blank line after the
statement.

When one pastes code into Shell, it is not compiled and possibly
executed until one hits ‘Return’, as specified above.  One may edit
pasted code first.  If one pastes more than one statement into Shell,
the result will be a *note SyntaxError: 18d. when multiple statements
are compiled as if they were one.

Lines containing ‘RESTART’ mean that the user execution process has been
re-started.  This occurs when the user execution process has crashed,
when one requests a restart on the Shell menu, or when one runs code in
an editor window.

The editing features described in previous subsections work when
entering code interactively.  IDLE’s Shell window also responds to the
following:

   * ‘C’-‘c’ attempts to interrupt statement execution (but may fail).

   * ‘C’-‘d’ closes Shell if typed at a ‘>>>’ prompt.

   * ‘Alt’-‘p’ and ‘Alt’-‘n’ (‘C’-‘p’ and ‘C’-‘n’ on macOS) retrieve to
     the current prompt the previous or next previously entered
     statement that matches anything already typed.

   * ‘Return’ while the cursor is on any previous statement appends the
     latter to anything already typed at the prompt.


File: python.info,  Node: Text colors,  Prev: Shell window,  Up: Editing and Navigation

5.25.9.22 Text colors
.....................

Idle defaults to black on white text, but colors text with special
meanings.  For the shell, these are shell output, shell error, user
output, and user error.  For Python code, at the shell prompt or in an
editor, these are keywords, builtin class and function names, names
following ‘class’ and ‘def’, strings, and comments.  For any text
window, these are the cursor (when present), found text (when possible),
and selected text.

IDLE also highlights the *note soft keywords: 80f. *note match: 810,
*note case: 810, and *note _: 811. in pattern-matching statements.
However, this highlighting is not perfect and will be incorrect in some
rare cases, including some ‘_’-s in ‘case’ patterns.

Text coloring is done in the background, so uncolorized text is
occasionally visible.  To change the color scheme, use the Configure
IDLE dialog Highlighting tab.  The marking of debugger breakpoint lines
in the editor and text in popups and dialogs is not user-configurable.


File: python.info,  Node: Startup and Code Execution,  Next: Help and Preferences,  Prev: Editing and Navigation,  Up: IDLE — editor e console Python<2>

5.25.9.23 Startup and Code Execution
....................................

Upon startup with the ‘-s’ option, IDLE will execute the file referenced
by the environment variables ‘IDLESTARTUP’ or *note PYTHONSTARTUP: ffe.
IDLE first checks for ‘IDLESTARTUP’; if ‘IDLESTARTUP’ is present the
file referenced is run.  If ‘IDLESTARTUP’ is not present, IDLE checks
for ‘PYTHONSTARTUP’.  Files referenced by these environment variables
are convenient places to store functions that are used frequently from
the IDLE shell, or for executing import statements to import common
modules.

In addition, ‘Tk’ also loads a startup file if it is present.  Note that
the Tk file is loaded unconditionally.  This additional file is
‘.Idle.py’ and is looked for in the user’s home directory.  Statements
in this file will be executed in the Tk namespace, so this file is not
useful for importing functions to be used from IDLE’s Python shell.

* Menu:

* Uso na linha de comando: Uso na linha de comando<5>.
* Startup failure::
* Running user code::
* User output in Shell::
* Developing tkinter applications::
* Running without a subprocess::


File: python.info,  Node: Uso na linha de comando<5>,  Next: Startup failure,  Up: Startup and Code Execution

5.25.9.24 Uso na linha de comando
.................................

IDLE can be invoked from the command line with various options.  The
general syntax is:

     python -m idlelib [options] [file ...]

The following options are available:

 -- Option: -c <command>

     Run the specified Python command in the shell window.  For example,
     pass ‘-c "print('Hello, World!')"’.  On Windows, the outer quotes
     must be double quotes as shown.

 -- Option: -d

     Enable the debugger and open the shell window.

 -- Option: -e

     Open an editor window.

 -- Option: -h

     Print a help message with legal combinations of options and exit.

 -- Option: -i

     Open a shell window.

 -- Option: -r <file>

     Run the specified file in the shell window.

 -- Option: -s

     Run the startup file (as defined by the environment variables
     ‘IDLESTARTUP’ or *note PYTHONSTARTUP: ffe.) before opening the
     shell window.

 -- Option: -t <title>

     Set the title of the shell window.

 -- Option: -

     Read and execute standard input in the shell window.  This option
     must be the last one before any arguments.

If arguments are provided:

   - If ‘-’, ‘-c’, or ‘-r’ is used, all arguments are placed in
     ‘sys.argv[1:]’, and ‘sys.argv[0]’ is set to ‘''’, ‘'-c'’, or ‘'-r'’
     respectively.  No editor window is opened, even if that is the
     default set in the 'Options' dialog.

   - Otherwise, arguments are treated as files to be opened for editing,
     and ‘sys.argv’ reflects the arguments passed to IDLE itself.


File: python.info,  Node: Startup failure,  Next: Running user code,  Prev: Uso na linha de comando<5>,  Up: Startup and Code Execution

5.25.9.25 Startup failure
.........................

IDLE uses a socket to communicate between the IDLE GUI process and the
user code execution process.  A connection must be established whenever
the Shell starts or restarts.  (The latter is indicated by a divider
line that says ‘RESTART’).  If the user process fails to connect to the
GUI process, it usually displays a ‘Tk’ error box with a ‘cannot
connect’ message that directs the user here.  It then exits.

One specific connection failure on Unix systems results from
misconfigured masquerading rules somewhere in a system’s network setup.
When IDLE is started from a terminal, one will see a message starting
with ‘** Invalid host:’.  The valid value is ‘127.0.0.1
(idlelib.rpc.LOCALHOST)’.  One can diagnose with ‘tcpconnect -irv
127.0.0.1 6543’ in one terminal window and ‘tcplisten <same args>’ in
another.

A common cause of failure is a user-written file with the same name as a
standard library module, such as 'random.py' and 'tkinter.py'.  When
such a file is located in the same directory as a file that is about to
be run, IDLE cannot import the stdlib file.  The current fix is to
rename the user file.

Though less common than in the past, an antivirus or firewall program
may stop the connection.  If the program cannot be taught to allow the
connection, then it must be turned off for IDLE to work.  It is safe to
allow this internal connection because no data is visible on external
ports.  A similar problem is a network mis-configuration that blocks
connections.

Python installation issues occasionally stop IDLE: multiple versions can
clash, or a single installation might need admin access.  If one undo
the clash, or cannot or does not want to run as admin, it might be
easiest to completely remove Python and start over.

A zombie pythonw.exe process could be a problem.  On Windows, use Task
Manager to check for one and stop it if there is.  Sometimes a restart
initiated by a program crash or Keyboard Interrupt (control-C) may fail
to connect.  Dismissing the error box or using Restart Shell on the
Shell menu may fix a temporary problem.

When IDLE first starts, it attempts to read user configuration files in
‘~/.idlerc/’ (~ is one’s home directory).  If there is a problem, an
error message should be displayed.  Leaving aside random disk glitches,
this can be prevented by never editing the files by hand.  Instead, use
the configuration dialog, under Options.  Once there is an error in a
user configuration file, the best solution may be to delete it and start
over with the settings dialog.

If IDLE quits with no message, and it was not started from a console,
try starting it from a console or terminal (‘python -m idlelib’) and see
if this results in an error message.

On Unix-based systems with tcl/tk older than ‘8.6.11’ (see ‘About IDLE’)
certain characters of certain fonts can cause a tk failure with a
message to the terminal.  This can happen either if one starts IDLE to
edit a file with such a character or later when entering such a
character.  If one cannot upgrade tcl/tk, then re-configure IDLE to use
a font that works better.


File: python.info,  Node: Running user code,  Next: User output in Shell,  Prev: Startup failure,  Up: Startup and Code Execution

5.25.9.26 Running user code
...........................

With rare exceptions, the result of executing Python code with IDLE is
intended to be the same as executing the same code by the default
method, directly with Python in a text-mode system console or terminal
window.  However, the different interface and operation occasionally
affect visible results.  For instance, ‘sys.modules’ starts with more
entries, and ‘threading.active_count()’ returns 2 instead of 1.

By default, IDLE runs user code in a separate OS process rather than in
the user interface process that runs the shell and editor.  In the
execution process, it replaces ‘sys.stdin’, ‘sys.stdout’, and
‘sys.stderr’ with objects that get input from and send output to the
Shell window.  The original values stored in ‘sys.__stdin__’,
‘sys.__stdout__’, and ‘sys.__stderr__’ are not touched, but may be
‘None’.

Sending print output from one process to a text widget in another is
slower than printing to a system terminal in the same process.  This has
the most effect when printing multiple arguments, as the string for each
argument, each separator, the newline are sent separately.  For
development, this is usually not a problem, but if one wants to print
faster in IDLE, format and join together everything one wants displayed
together and then print a single string.  Both format strings and *note
str.join(): 2340. can help combine fields and lines.

IDLE’s standard stream replacements are not inherited by subprocesses
created in the execution process, whether directly by user code or by
modules such as multiprocessing.  If such subprocess use ‘input’ from
sys.stdin or ‘print’ or ‘write’ to sys.stdout or sys.stderr, IDLE should
be started in a command line window.  (On Windows, use ‘python’ or ‘py’
rather than ‘pythonw’ or ‘pyw’.)  The secondary subprocess will then be
attached to that window for input and output.

If ‘sys’ is reset by user code, such as with ‘importlib.reload(sys)’,
IDLE’s changes are lost and input from the keyboard and output to the
screen will not work correctly.

When Shell has the focus, it controls the keyboard and screen.  This is
normally transparent, but functions that directly access the keyboard
and screen will not work.  These include system-specific functions that
determine whether a key has been pressed and if so, which.

The IDLE code running in the execution process adds frames to the call
stack that would not be there otherwise.  IDLE wraps
‘sys.getrecursionlimit’ and ‘sys.setrecursionlimit’ to reduce the effect
of the additional stack frames.

When user code raises SystemExit either directly or by calling sys.exit,
IDLE returns to a Shell prompt instead of exiting.


File: python.info,  Node: User output in Shell,  Next: Developing tkinter applications,  Prev: Running user code,  Up: Startup and Code Execution

5.25.9.27 User output in Shell
..............................

When a program outputs text, the result is determined by the
corresponding output device.  When IDLE executes user code, ‘sys.stdout’
and ‘sys.stderr’ are connected to the display area of IDLE’s Shell.
Some of its features are inherited from the underlying Tk Text widget.
Others are programmed additions.  Where it matters, Shell is designed
for development rather than production runs.

For instance, Shell never throws away output.  A program that sends
unlimited output to Shell will eventually fill memory, resulting in a
memory error.  In contrast, some system text windows only keep the last
n lines of output.  A Windows console, for instance, keeps a
user-settable 1 to 9999 lines, with 300 the default.

A Tk Text widget, and hence IDLE’s Shell, displays characters
(codepoints) in the BMP (Basic Multilingual Plane) subset of Unicode.
Which characters are displayed with a proper glyph and which with a
replacement box depends on the operating system and installed fonts.
Tab characters cause the following text to begin after the next tab
stop.  (They occur every 8 ‘characters’).  Newline characters cause
following text to appear on a new line.  Other control characters are
ignored or displayed as a space, box, or something else, depending on
the operating system and font.  (Moving the text cursor through such
output with arrow keys may exhibit some surprising spacing behavior.)

     >>> s = 'a\tb\a<\x02><\r>\bc\nd'  # Enter 22 chars.
     >>> len(s)
     14
     >>> s  # Display repr(s)
     'a\tb\x07<\x02><\r>\x08c\nd'
     >>> print(s, end='')  # Display s as is.
     # Result varies by OS and font.  Try it.

The ‘repr’ function is used for interactive echo of expression values.
It returns an altered version of the input string in which control
codes, some BMP codepoints, and all non-BMP codepoints are replaced with
escape codes.  As demonstrated above, it allows one to identify the
characters in a string, regardless of how they are displayed.

Normal and error output are generally kept separate (on separate lines)
from code input and each other.  They each get different highlight
colors.

For SyntaxError tracebacks, the normal ‘^’ marking where the error was
detected is replaced by coloring the text with an error highlight.  When
code run from a file causes other exceptions, one may right click on a
traceback line to jump to the corresponding line in an IDLE editor.  The
file will be opened if necessary.

Shell has a special facility for squeezing output lines down to a
‘Squeezed text’ label.  This is done automatically for output over N
lines (N = 50 by default).  N can be changed in the PyShell section of
the General page of the Settings dialog.  Output with fewer lines can be
squeezed by right clicking on the output.  This can be useful lines long
enough to slow down scrolling.

Squeezed output is expanded in place by double-clicking the label.  It
can also be sent to the clipboard or a separate view window by
right-clicking the label.


File: python.info,  Node: Developing tkinter applications,  Next: Running without a subprocess,  Prev: User output in Shell,  Up: Startup and Code Execution

5.25.9.28 Developing tkinter applications
.........................................

IDLE is intentionally different from standard Python in order to
facilitate development of tkinter programs.  Enter ‘import tkinter as
tk; root = tk.Tk()’ in standard Python and nothing appears.  Enter the
same in IDLE and a tk window appears.  In standard Python, one must also
enter ‘root.update()’ to see the window.  IDLE does the equivalent in
the background, about 20 times a second, which is about every 50
milliseconds.  Next enter ‘b = tk.Button(root, text='button');
b.pack()’.  Again, nothing visibly changes in standard Python until one
enters ‘root.update()’.

Most tkinter programs run ‘root.mainloop()’, which usually does not
return until the tk app is destroyed.  If the program is run with
‘python -i’ or from an IDLE editor, a ‘>>>’ shell prompt does not appear
until ‘mainloop()’ returns, at which time there is nothing left to
interact with.

When running a tkinter program from an IDLE editor, one can comment out
the mainloop call.  One then gets a shell prompt immediately and can
interact with the live application.  One just has to remember to
re-enable the mainloop call when running in standard Python.


File: python.info,  Node: Running without a subprocess,  Prev: Developing tkinter applications,  Up: Startup and Code Execution

5.25.9.29 Running without a subprocess
......................................

By default, IDLE executes user code in a separate subprocess via a
socket, which uses the internal loopback interface.  This connection is
not externally visible and no data is sent to or received from the
internet.  If firewall software complains anyway, you can ignore it.

If the attempt to make the socket connection fails, Idle will notify
you.  Such failures are sometimes transient, but if persistent, the
problem may be either a firewall blocking the connection or
misconfiguration of a particular system.  Until the problem is fixed,
one can run Idle with the -n command line switch.

If IDLE is started with the -n command line switch it will run in a
single process and will not create the subprocess which runs the RPC
Python execution server.  This can be useful if Python cannot create the
subprocess or the RPC socket interface on your platform.  However, in
this mode user code is not isolated from IDLE itself.  Also, the
environment is not restarted when Run/Run Module (F5) is selected.  If
your code has been modified, you must reload() the affected modules and
re-import any specific items (e.g.  from foo import baz) if the changes
are to take effect.  For these reasons, it is preferable to run IDLE
with the default subprocess if at all possible.

Descontinuado desde a versão 3.4.


File: python.info,  Node: Help and Preferences,  Next: idlelib — implementation of IDLE application,  Prev: Startup and Code Execution,  Up: IDLE — editor e console Python<2>

5.25.9.30 Help and Preferences
..............................

* Menu:

* Help sources::
* Setting preferences::
* IDLE on macOS::
* Extensions::


File: python.info,  Node: Help sources,  Next: Setting preferences,  Up: Help and Preferences

5.25.9.31 Help sources
......................

Help menu entry “IDLE Help” displays a formatted html version of the
IDLE chapter of the Library Reference.  The result, in a read-only
tkinter text window, is close to what one sees in a web browser.
Navigate through the text with a mousewheel, the scrollbar, or up and
down arrow keys held down.  Or click the TOC (Table of Contents) button
and select a section header in the opened box.

Help menu entry “Python Docs” opens the extensive sources of help,
including tutorials, available at ‘docs.python.org/x.y’, where ‘x.y’ is
the currently running Python version.  If your system has an off-line
copy of the docs (this may be an installation option), that will be
opened instead.

Selected URLs can be added or removed from the help menu at any time
using the General tab of the Configure IDLE dialog.


File: python.info,  Node: Setting preferences,  Next: IDLE on macOS,  Prev: Help sources,  Up: Help and Preferences

5.25.9.32 Setting preferences
.............................

The font preferences, highlighting, keys, and general preferences can be
changed via Configure IDLE on the Option menu.  Non-default user
settings are saved in a ‘.idlerc’ directory in the user’s home
directory.  Problems caused by bad user configuration files are solved
by editing or deleting one or more of the files in ‘.idlerc’.

On the Font tab, see the text sample for the effect of font face and
size on multiple characters in multiple languages.  Edit the sample to
add other characters of personal interest.  Use the sample to select
monospaced fonts.  If particular characters have problems in Shell or an
editor, add them to the top of the sample and try changing first size
and then font.

On the Highlights and Keys tab, select a built-in or custom color theme
and key set.  To use a newer built-in color theme or key set with older
IDLEs, save it as a new custom theme or key set and it well be
accessible to older IDLEs.


File: python.info,  Node: IDLE on macOS,  Next: Extensions,  Prev: Setting preferences,  Up: Help and Preferences

5.25.9.33 IDLE on macOS
.......................

Under System Preferences: Dock, one can set “Prefer tabs when opening
documents” to “Always”.  This setting is not compatible with the
tk/tkinter GUI framework used by IDLE, and it breaks a few IDLE
features.


File: python.info,  Node: Extensions,  Prev: IDLE on macOS,  Up: Help and Preferences

5.25.9.34 Extensions
....................

IDLE contains an extension facility.  Preferences for extensions can be
changed with the Extensions tab of the preferences dialog.  See the
beginning of config-extensions.def in the idlelib directory for further
information.  The only current default extension is zzdummy, an example
also used for testing.


File: python.info,  Node: idlelib — implementation of IDLE application,  Prev: Help and Preferences,  Up: IDLE — editor e console Python<2>

5.25.9.35 idlelib — implementation of IDLE application
......................................................

'Source code:' Lib/idlelib(1)

__________________________________________________________________

The Lib/idlelib package implements the IDLE application.  See the rest
of this page for how to use IDLE.

The files in idlelib are described in idlelib/README.txt.  Access it
either in idlelib or click Help => About IDLE on the IDLE menu.  This
file also maps IDLE menu items to the code that implements the item.
Except for files listed under ‘Startup’, the idlelib code is ‘private’
in sense that feature changes can be backported (see PEP 434(2)).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/idlelib

   (2) https://peps.python.org/pep-0434/


File: python.info,  Node: turtle — Gráficos tartaruga,  Prev: IDLE — editor e console Python<2>,  Up: Interfaces gráficas de usuário com Tk

5.25.10 ‘turtle’ — Gráficos tartaruga
-------------------------------------

'Código-fonte:' Lib/turtle.py(1)

__________________________________________________________________

* Menu:

* Introdução: Introdução<11>.
* Começando: Começando<2>.
* Tutorial: Tutorial<4>.
* Como fazer…::
* Referência Gráficos de Tartaruga::
* Métodos de RawTurtle/Turtle e funções correspondentes::
* métodos do TurtleScreen/Screen e as funções correspondentes::
* Classes Públicas::
* Explicação: Explicação<2>.
* Ajuda e Configuração::
* turtledemo — Scripts de Demonstração::
* Modificações desde a versão do Python 2.6: Modificações desde a versão do Python 2 6.
* Modificações desde a versão do Python 3.0: Modificações desde a versão do Python 3 0.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/turtle.py


File: python.info,  Node: Introdução<11>,  Next: Começando<2>,  Up: turtle — Gráficos tartaruga

5.25.10.1 Introdução
....................

Gráficos tartaruga são uma implementação das populares ferramentas de
desenho geométrico introduzidas em Logo(1), desenvolvido por Wally
Feurzeig, Seymour Papert e Cynthia Solomon em 1967.

   ---------- Footnotes ----------

   (1) https://pt.wikipedia.org/wiki/Logo


File: python.info,  Node: Começando<2>,  Next: Tutorial<4>,  Prev: Introdução<11>,  Up: turtle — Gráficos tartaruga

5.25.10.2 Começando
...................

Imagine uma tartaruga robótica começando em (0, 0) no plano x-y.  Depois
de um ‘import turtle’, execute o comando ‘turtle.forward(15)’, e ela
moverá (na tela!)  15 pixels na direção em que está virada (para
frente), desenhando uma linha à medida que se move.  Execute o comando
‘turtle.right(25)’, e ela fará uma rotação, de 25 graus no sentido
horário, sem sair do lugar.

Turtle star
...........

A tartaruga pode desenhar formas intrincadas usando programas que
repetem movimentos simples.

[image src="python-figures/turtle-star.png"]


Em Python, os gráficos de tartaruga fornecem uma representação de uma
“tartaruga” física (um pequeno robô com uma caneta) que desenha em uma
folha de papel no chão.

É uma maneira eficaz e comprovada de os alunos conhecerem os conceitos
de programação e a interação com o software, pois oferece resposta
instantânea e visível.  Também oferece acesso conveniente a resultados
gráficos em geral.

Desenho de tartaruga foi originalmente criado como uma ferramenta
educacional, para ser usado por professores em sala de aula.  Para a
pessoa que precisa produzir algum resultado gráfico, essa pode ser uma
maneira de fazer isso sem a sobrecarga de introduzir bibliotecas mais
complexas ou externas em seu trabalho.


File: python.info,  Node: Tutorial<4>,  Next: Como fazer…,  Prev: Começando<2>,  Up: turtle — Gráficos tartaruga

5.25.10.3 Tutorial
..................

As pessoas recém-chegadas devem começar por aqui.  Neste tutorial,
exploraremos alguns dos conceitos básicos do desenho de tartarugas.

* Menu:

* Iniciando um ambiente da tartaruga::
* Desenho básico::
* Criação de padrões algorítmicos::


File: python.info,  Node: Iniciando um ambiente da tartaruga,  Next: Desenho básico,  Up: Tutorial<4>

5.25.10.4 Iniciando um ambiente da tartaruga
............................................

Em um console do Python, faça a importação de todos os objetos do módulo
‘turtle’:

     from turtle import *

Se você se deparar com a seguinte mensagem de erro ‘No module named
'_tkinter'’, será necessário instalar o *note pacote de interface
gráfica Tk: f0. em seu sistema.


File: python.info,  Node: Desenho básico,  Next: Criação de padrões algorítmicos,  Prev: Iniciando um ambiente da tartaruga,  Up: Tutorial<4>

5.25.10.5 Desenho básico
........................

Envie a tartaruga para frente 100 passos:

     forward(100)

Você deverá ver (provavelmente, em uma nova janela na sua tela) uma
linha desenhada pela tartaruga, em direção ao leste (→) .  Mude a
direção da tartaruga, de modo que ela gire 120 graus para a esquerda
(sentido anti-horário):

     left(120)

Vamos continuar desenhando um triângulo:

     forward(100)
     left(120)
     forward(100)

Observe como a tartaruga, representada por uma seta, aponta em
diferentes direções à medida que você a guia.

Faça experiências com esses comandos e também com ‘backward()’ e
‘right()’.

* Menu:

* Controle da Caneta::
* A posição da tartaruga::


File: python.info,  Node: Controle da Caneta,  Next: A posição da tartaruga,  Up: Desenho básico

5.25.10.6 Controle da Caneta
............................

Tente alterar a cor - por exemplo, ‘color('blue')’ - e a largura da
linha - por exemplo, ‘width(3)’ - e, em seguida, desenhe novamente.

Você também pode mover a tartaruga sem desenhar, levantando a caneta:
‘up()’ antes de mover.  Para começar a desenhar novamente, use ‘down()’.


File: python.info,  Node: A posição da tartaruga,  Prev: Controle da Caneta,  Up: Desenho básico

5.25.10.7 A posição da tartaruga
................................

Envie sua tartaruga de volta ao ponto de partida (útil se ela tiver
desaparecido da tela):

     home()

A posição inicial da tartaruga está no centro da tela.  Se você precisar
conhecê-la, obtenha as coordenadas x-y da tartaruga com:

     pos()

A a posição inicial fica em ‘(0, 0)’.

E, depois de um tempo, provavelmente vai querer ajudar a limpar a janela
aberta para que possamos começar de novo:

     clearscreen()


File: python.info,  Node: Criação de padrões algorítmicos,  Prev: Desenho básico,  Up: Tutorial<4>

5.25.10.8 Criação de padrões algorítmicos
.........................................

Usando laços de repetição, é possível construir criar padrões
geométricos:

     for steps in range(100):
         for c in ('blue', 'red', 'green'):
             color(c)
             forward(steps)
             right(30)

- que, é claro, são limitados apenas pela imaginação!

Vamos desenhar o formato de estrela na parte superior da página.
Queremos linhas de contorno vermelhas, com preenchimento em amarelo:

     color('red')
     fillcolor('yellow')

Assim como ‘up()’ e ‘down()’ determinam se as linhas serão desenhadas, o
preenchimento pode ser ativado e desativado:

     begin_fill()

Em seguida, vamos criar um laço de repetição:

     while True:
         forward(200)
         left(170)
         if abs(pos()) < 1:
             break

‘abs(pos()) < 1’ é uma boa maneira de saber quando a tartaruga está de
volta à sua posição inicial.

Por fim, complete o preenchimento:

     end_fill()

(Observe que o preenchimento só ocorre de fato quando você fornece o
comando ‘end_fill()’ .)


File: python.info,  Node: Como fazer…,  Next: Referência Gráficos de Tartaruga,  Prev: Tutorial<4>,  Up: turtle — Gráficos tartaruga

5.25.10.9 Como fazer…
.....................

Esta seção aborda alguns casos de uso e abordagens típicos do módulo
“turtle”.

* Menu:

* Comece o mais rápido possível::
* Use o espaço de nomes do módulo turtle::
* Use o módulo gráfico de tartaruga dentro de um script com código específico::
* Use o módulo gráficos da tartaruga orientado a objetos::


File: python.info,  Node: Comece o mais rápido possível,  Next: Use o espaço de nomes do módulo turtle,  Up: Como fazer…

5.25.10.10 Comece o mais rápido possível
........................................

Uma dos prazeres dos gráficos de tartaruga é o feedback visual imediato
disponível a partir de comandos simples.  É uma excelente maneira de
apresentar ideias de programação às crianças, com um mínimo de
sofrimento (não apenas às crianças, é claro).

O módulo tartaruga torna isso possível ao expor toda a sua
funcionalidade básica como funções, disponíveis com ‘from turtle import
*’.  O tutorial gráficos de *note turtle: 40da. cobre essa abordagem.

Vale a pena observar que muitos dos comandos da tartaruga também possuem
equivalentes ainda mais concisos, como usar ‘fd()’ para obter o mesmo
resultado de *note forward(): 32f1.  Esses comandos são especialmente
úteis quando se trabalha com alunos para os quais a digitação não é uma
habilidade.

     Você precisará ter o pacote de interface *note Tk: f0. instalado em
     seu sistema para que os gráficos do módulo “turtle” funcionem.
     Esteja ciente de que isso nem sempre é simples, portanto, verifique
     isso com antecedência se estiver planejando usar os gráficos de
     tartaruga com um aluno.


File: python.info,  Node: Use o espaço de nomes do módulo turtle,  Next: Use o módulo gráfico de tartaruga dentro de um script com código específico,  Prev: Comece o mais rápido possível,  Up: Como fazer…

5.25.10.11 Use o espaço de nomes do módulo ‘turtle’
...................................................

Usar ‘from turtle import *’ é conveniente, mas lembre-se de que ele
importa um coleção bastante grande de objetos e, se você estiver fazendo
qualquer coisa no seu código que não esteja relacionada com o módulo
gráficos de tartaruga, corre o risco de um conflito de nomes de objetos
(isso se torna um problema ainda maior se você estiver usando o módulo
de gráficos de tartaruga em um script em que outros módulos possam ser
também importados).

A solução é usar o identificador/domínio do próprio módulo ‘import
turtle’ sem o asterisco no final da importação - assim a chamada do
objeto/função ‘fd()’ torna-se ‘turtle.fd()’, da mesma forma como
‘width()’ torna-se ‘turtle.width()’ e assim por diante.  (Se digitar
“turtle” várias vezes se tornar tedioso, use ‘import turtle as t’, por
exemplo, para fornecer um apelido mais conciso e objetivo ao
identificador/domínio dentro do seu código).


File: python.info,  Node: Use o módulo gráfico de tartaruga dentro de um script com código específico,  Next: Use o módulo gráficos da tartaruga orientado a objetos,  Prev: Use o espaço de nomes do módulo turtle,  Up: Como fazer…

5.25.10.12 Use o módulo gráfico de tartaruga dentro de um script com código específico
......................................................................................

Recomenda-se usar o módulo ‘turtle’ com uma apelido para
identificador/domínio, conforme descrito acima, por exemplo:

     import turtle as t
     from random import random

     for i in range(100):
         steps = int(random() * 100)
         angle = int(random() * 360)
         t.right(angle)
         t.fd(steps)

No entanto, outra etapa também é necessária ou o Python também fechará a
janela da tartaruga assim que o código acima terminar de ser executado.
Adicione:

     t.mainloop()

ao final do código anterior.  Assim, o código anterior agora conterá uma
instrução que aguardará ser dispensado e não sairá até que seja
encerrado, por exemplo, fechando a janela aberta pelo módulo gráficos da
tartaruga.


File: python.info,  Node: Use o módulo gráficos da tartaruga orientado a objetos,  Prev: Use o módulo gráfico de tartaruga dentro de um script com código específico,  Up: Como fazer…

5.25.10.13 Use o módulo gráficos da tartaruga orientado a objetos
.................................................................

Ver também
..........

*note Explicação de interface orientada a objetos: 40e8.

Exceto para fins introdutórios muito básicos ou para experimentar coisas
o mais rápido possível, é mais comum e muito mais eficiente usar a
abordagem orientada a objetos para gráficos de tartarugas.  Por exemplo,
isso permite várias tartarugas na tela ao mesmo tempo.

Nessa abordagem, os vários comandos do módulo turtle são métodos de
objetos (principalmente objetos de ‘Turtle’).  Você 'pode' usar a
abordagem orientada a objetos em console, mas ela seria mais típica em
um script Python.

O exemplo acima se torna então:

     from turtle import Turtle
     from random import random

     t = Turtle()
     for i in range(100):
         steps = int(random() * 100)
         angle = int(random() * 360)
         t.right(angle)
         t.fd(steps)

     t.screen.mainloop()

Observe a última linha.  ‘t.screen’ é um instância da subclasse *note
Screen: 40e9. que existe numa instância da classe tartaruga ou “turtle”;
ela é criada automaticamente junto com a instância de tartaruga.

A tela da tartaruga pode ser personalizada, por exemplo:

     t.screen.title('Object-oriented turtle demo')
     t.screen.bgcolor("orange")


File: python.info,  Node: Referência Gráficos de Tartaruga,  Next: Métodos de RawTurtle/Turtle e funções correspondentes,  Prev: Como fazer…,  Up: turtle — Gráficos tartaruga

5.25.10.14 Referência Gráficos de Tartaruga
...........................................

     Nota: Na documentação a seguir, a lista de argumentos para funções
     é fornecida.  Os métodos, é claro, têm o primeiro argumento
     adicional 'self' que é omitido aqui.

* Menu:

* Métodos de Turtle::
* Métodos de TurtleScreen/Screen::


File: python.info,  Node: Métodos de Turtle,  Next: Métodos de TurtleScreen/Screen,  Up: Referência Gráficos de Tartaruga

5.25.10.15 Métodos de Turtle
............................

Movimentos de Turtle

     Movimento e desenho

               *note forward(): 32f1. | *note fd(): 40ec.
               *note backward(): 40ed. | *note bk(): 40ee. | *note back(): 40ef.
               *note right(): 40f0. | *note rt(): 40f1.
               *note left(): 40f2. | *note lt(): 40f3.
               *note goto(): 40f4. | *note setpos(): 40f5. | *note setposition(): 40f6.
               *note teleport(): 181b.
               *note setx(): 40f7.
               *note sety(): 40f8.
               *note setheading(): 40f9. | *note seth(): 40fa.
               *note home(): 40fb.
               *note circle(): 40fc.
               *note dot(): 40fd.
               *note stamp(): 40fe.
               *note clearstamp(): 40ff.
               *note clearstamps(): 4100.
               *note undo(): 4101.
               *note speed(): 4102.

     Fala o estado de Turtle

               *note position(): 4103. | *note pos(): 4104.
               *note towards(): 4105.
               *note xcor(): 4106.
               *note ycor(): 4107.
               *note heading(): 4108.
               *note distance(): 4109.

     Configuração e Medidas

               *note degrees(): 410a.
               *note radians(): 410b.

Controle da Caneta

     Estado do Desenho

               *note pendown(): 410c. | *note pd(): 410d. | *note down(): 410e.
               *note penup(): 410f. | *note pu(): 4110. | *note up(): 4111.
               *note pensize(): 4112. | *note width(): 4113.
               *note pen(): 4114.
               *note isdown(): 4115.

     Controle da Cor

               *note color(): 4116.
               *note pencolor(): 4117.
               *note fillcolor(): 4118.

     Preenchimento

               *note filling(): 4119.
               *note begin_fill(): 411a.
               *note end_fill(): 411b.

     Mais sobre o Controle do Desenho

               *note reset(): 411c.
               *note clear(): 411d.
               *note write(): 411e.

Estado da tartaruga

     Visibilidade

               *note showturtle(): 411f. | *note st(): 4120.
               *note hideturtle(): 4121. | *note ht(): 4122.
               *note isvisible(): 4123.

     Aparência

               *note shape(): 4124.
               *note resizemode(): 4125.
               *note shapesize(): 4126. | *note turtlesize(): 4127.
               *note shearfactor(): 4128.
               *note tiltangle(): 725.
               *note tilt(): 4129.
               *note shapetransform(): 412a.
               *note get_shapepoly(): 412b.

Eventos Utilizados

          *note onclick(): 412c.
          *note onrelease(): 412d.
          *note ondrag(): 412e.

Métodos Especiais da Tartaruga

          *note begin_poly(): 412f.
          *note end_poly(): 4130.
          *note get_poly(): 4131.
          *note clone(): 4132.
          *note getturtle(): 4133. | *note getpen(): 4134.
          *note getscreen(): 4135.
          *note setundobuffer(): 4136.
          *note undobufferentries(): 4137.


File: python.info,  Node: Métodos de TurtleScreen/Screen,  Prev: Métodos de Turtle,  Up: Referência Gráficos de Tartaruga

5.25.10.16 Métodos de TurtleScreen/Screen
.........................................

Controle da Janela

          *note bgcolor(): 4139.
          *note bgpic(): 413a.
          *note clearscreen(): 413b.
          *note resetscreen(): 413c.
          *note screensize(): 413d.
          *note setworldcoordinates(): 413e.

Controle da animação

          *note delay(): 413f.
          *note tracer(): 4140.
          *note update(): 4141.

Usando os eventos de tela

          *note listen(): 4142.
          *note onkey(): 4143. | *note onkeyrelease(): 4144.
          *note onkeypress(): 4145.
          *note onclick(): 412c. | *note onscreenclick(): 4146.
          *note ontimer(): 4147.
          *note mainloop(): 4148. | *note done(): 4149.

Configurações e métodos especiais

          *note mode(): 414a.
          *note colormode(): 414b.
          *note getcanvas(): 414c.
          *note getshapes(): 414d.
          *note register_shape(): 414e. | *note addshape(): 414f.
          *note turtles(): 4150.
          *note window_height(): 4151.
          *note window_width(): 4152.

Métodos de entrada

          *note textinput(): 1a06.
          *note numinput(): 1a07.

Métodos específicos para Screen

          *note bye(): 4153.
          *note exitonclick(): 4154.
          *note setup(): 4155.
          *note title(): 4156.


File: python.info,  Node: Métodos de RawTurtle/Turtle e funções correspondentes,  Next: métodos do TurtleScreen/Screen e as funções correspondentes,  Prev: Referência Gráficos de Tartaruga,  Up: turtle — Gráficos tartaruga

5.25.10.17 Métodos de RawTurtle/Turtle e funções correspondentes
................................................................

A maioria dos exemplos desta seção referem-se a uma instância Turtle
chamada ‘turtle’.

* Menu:

* Movimentos de Turtle::
* Fala o estado de Turtle::
* Configurações de medida::
* Controle da Caneta: Controle da Caneta<2>.
* Estado da tartaruga::
* Eventos Utilizados::
* Métodos Especiais da Tartaruga::
* Formas compostas::


File: python.info,  Node: Movimentos de Turtle,  Next: Fala o estado de Turtle,  Up: Métodos de RawTurtle/Turtle e funções correspondentes

5.25.10.18 Movimentos de Turtle
...............................

 -- Função: turtle.forward (distance)
 -- Função: turtle.fd (distance)


     Parâmetros: ‘distance’ – um número (inteiro ou ponto flutuante)

     Move a tartaruga para frente pela 'distance' especificada, na
     direção em que a tartaruga está indo.

          >>> turtle.position()
          (0.00,0.00)
          >>> turtle.forward(25)
          >>> turtle.position()
          (25.00,0.00)
          >>> turtle.forward(-75)
          >>> turtle.position()
          (-50.00,0.00)

 -- Função: turtle.back (distance)
 -- Função: turtle.bk (distance)
 -- Função: turtle.backward (distance)


     Parâmetros: ‘distance’ – um número

     Move a tartaruga para trás por 'distance', na direção oposta à
     direção em que a tartaruga está indo.  Não muda o rumo da
     tartaruga.

          >>> turtle.position()
          (0.00,0.00)
          >>> turtle.backward(30)
          >>> turtle.position()
          (-30.00,0.00)

 -- Função: turtle.right (angle)
 -- Função: turtle.rt (angle)


     Parâmetros: ‘angle’ – um número (inteiro ou ponto flutuante)

     Vira a tartaruga à direita por unidades de 'angle'.  (As unidades
     são por padrão graus, mas podem ser definidas através das funções
     *note degrees(): 410a. e *note radians(): 410b.)  A orientação do
     ângulo depende do modo tartaruga, veja *note mode(): 414a.

          >>> turtle.heading()
          22.0
          >>> turtle.right(45)
          >>> turtle.heading()
          337.0

 -- Função: turtle.left (angle)
 -- Função: turtle.lt (angle)


     Parâmetros: ‘angle’ – um número (inteiro ou ponto flutuante)

     Vira a tartaruga à esquerda por unidades de 'angle'.  (As unidades
     são por padrão graus, mas podem ser definidas através das funções
     *note degrees(): 410a. e *note radians(): 410b.)  A orientação do
     ângulo depende do modo tartaruga, veja *note mode(): 414a.

          >>> turtle.heading()
          22.0
          >>> turtle.left(45)
          >>> turtle.heading()
          67.0

 -- Função: turtle.goto (x, y=None)
 -- Função: turtle.setpos (x, y=None)
 -- Função: turtle.setposition (x, y=None)


     Parâmetros:

        * ‘x’ – um número ou um par/vetor de números

        * ‘y’ – um número ou ‘None’

     Se 'y' for ‘None’, 'x' deve ser um par de coordenadas ou uma classe
     *note Vec2D: 4159. (por exemplo, como retornado pela função *note
     pos(): 4104.).

     Move a tartaruga para uma posição absoluta.  Caso a caneta esteja
     virada para baixo, traça a linha.  Não altera a orientação da
     tartaruga.

          >>> tp = turtle.pos()
          >>> tp
          (0.00,0.00)
          >>> turtle.setpos(60,30)
          >>> turtle.pos()
          (60.00,30.00)
          >>> turtle.setpos((20,80))
          >>> turtle.pos()
          (20.00,80.00)
          >>> turtle.setpos(tp)
          >>> turtle.pos()
          (0.00,0.00)

 -- Função: turtle.teleport (x, y=None, *, fill_gap=False)


     Parâmetros:

        * ‘x’ – um número ou ‘None’

        * ‘y’ – um número ou ‘None’

        * ‘fill_gap’ – um valor booleano

     Move a tartaruga para uma posição absoluta.  Ao contrário de
     goto(x, y), uma linha não será desenhada.  A orientação da
     tartaruga não muda.  Se estiver sendo preenchido no momento, o(s)
     polígono(s) teletransportado(s) será(ão) preenchido(s) após sair, e
     o preenchimento começará novamente após o teletransporte.  Isso
     pode ser desabilitado com fill_gap=True, o que faz com que a linha
     imaginária percorrida durante o teletransporte atue como uma
     barreira de preenchimento como em goto(x, y).

          >>> tp = turtle.pos()
          >>> tp
          (0.00,0.00)
          >>> turtle.teleport(60)
          >>> turtle.pos()
          (60.00,0.00)
          >>> turtle.teleport(y=10)
          >>> turtle.pos()
          (60.00,10.00)
          >>> turtle.teleport(20, 30)
          >>> turtle.pos()
          (20.00,30.00)

     Adicionado na versão 3.12.

 -- Função: turtle.setx (x)


     Parâmetros: ‘x’ – um número (inteiro ou ponto flutuante)

     Define a primeira coordenada da tartaruga para 'x', deixa a segunda
     coordenada inalterada.

          >>> turtle.position()
          (0.00,240.00)
          >>> turtle.setx(10)
          >>> turtle.position()
          (10.00,240.00)

 -- Função: turtle.sety (y)


     Parâmetros: ‘y’ – um número (inteiro ou ponto flutuante)

     Defina a segunda coordenada da tartaruga para 'y', deixa a primeira
     coordenada inalterada.

          >>> turtle.position()
          (0.00,40.00)
          >>> turtle.sety(-10)
          >>> turtle.position()
          (0.00,-10.00)

 -- Função: turtle.setheading (to_angle)
 -- Função: turtle.seth (to_angle)


     Parâmetros: ‘to_angle’ – um número (inteiro ou ponto flutuante)

     Define a orientação da tartaruga para 'to_angle'.  Aqui estão
     algumas direções mais comuns em graus:

     modo padrão             modo logo
                             
     -------------------------------------------------
                             
     0 - leste               0 - norte
                             
                             
     90 - norte              90 - leste
                             
                             
     180 - oeste             180 - sul
                             
                             
     270 - sul               270 - oeste
                             

          >>> turtle.setheading(90)
          >>> turtle.heading()
          90.0

 -- Função: turtle.home ()

     Move a tartaruga para a origem – coordenadas (0,0) – e define seu
     rumo para sua orientação inicial (que depende do modo, veja *note
     mode(): 414a.).

          >>> turtle.heading()
          90.0
          >>> turtle.position()
          (0.00,-10.00)
          >>> turtle.home()
          >>> turtle.position()
          (0.00,0.00)
          >>> turtle.heading()
          0.0

 -- Função: turtle.circle (radius, extent=None, steps=None)


     Parâmetros:

        * ‘radius’ – um número

        * ‘extent’ – um número (ou ‘None’)

        * ‘steps’ – um inteiro (ou ‘None’)

     Desenha um círculo com dado 'radius'.  O centro são as unidades de
     'radius' à esquerda da tartaruga; 'extent' – um ângulo – determina
     qual parte do círculo é desenhada.  Se 'extent' não for fornecida,
     desenha o círculo inteiro.  Se 'extent' não for um círculo
     completo, uma extremidade do arco será a posição atual da caneta.
     Desenha o arco no sentido anti-horário se 'radius' for positivo,
     caso contrário, no sentido horário.  Finalmente, a direção da
     tartaruga é alterada pela quantidade de 'extent'.

     Como o círculo é aproximado por um polígono regular inscrito,
     'steps' determina o número de passos a serem usados.  Caso não seja
     informado, será calculado automaticamente.  Pode ser usado para
     desenhar polígonos regulares.

          >>> turtle.home()
          >>> turtle.position()
          (0.00,0.00)
          >>> turtle.heading()
          0.0
          >>> turtle.circle(50)
          >>> turtle.position()
          (-0.00,0.00)
          >>> turtle.heading()
          0.0
          >>> turtle.circle(120, 180)  # draw a semicircle
          >>> turtle.position()
          (0.00,240.00)
          >>> turtle.heading()
          180.0

 -- Função: turtle.dot ()

 -- Função: turtle.dot (size)

 -- Função: turtle.dot (color, /)

 -- Função: turtle.dot (size, color, /)

 -- Função: turtle.dot (size, r, g, b, /)


     Parâmetros:

        * ‘size’ – um inteiro >= 1 (caso seja fornecido)

        * ‘color’ – uma string de cores ou uma tupla de cores numéricas

     Desenha um ponto circular com diâmetro 'size', usando 'color'.  Se
     'size' não for fornecido, o máximo de ‘pensize+4’ e ‘2*pensize’
     será usado.

          >>> turtle.home()
          >>> turtle.dot()
          >>> turtle.fd(50); turtle.dot(20, "blue"); turtle.fd(50)
          >>> turtle.position()
          (100.00,-0.00)
          >>> turtle.heading()
          0.0

 -- Função: turtle.stamp ()

     Carimba uma cópia da forma da tartaruga na tela na posição atual da
     tartaruga.  Retorna um stamp_id para esse carimbo, que pode ser
     usado para excluí-lo chamando ‘clearstamp(stamp_id)’.

          >>> turtle.color("blue")
          >>> stamp_id = turtle.stamp()
          >>> turtle.fd(50)

 -- Função: turtle.clearstamp (stampid)


     Parâmetros: ‘stampid’ – um inteiro, deve ser o valor de retorno da
     chamada de *note stamp(): 40fe. anterior

     Exclui o carimbo com o 'stamp' fornecido.

          >>> turtle.position()
          (150.00,-0.00)
          >>> turtle.color("blue")
          >>> astamp = turtle.stamp()
          >>> turtle.fd(50)
          >>> turtle.position()
          (200.00,-0.00)
          >>> turtle.clearstamp(astamp)
          >>> turtle.position()
          (200.00,-0.00)

 -- Função: turtle.clearstamps (n=None)


     Parâmetros: ‘n’ – um inteiro (ou ‘None’)

     Exclui todos ou o primeiro/último 'n' dos selos da tartaruga.  Se
     'n' for ‘None’, exclui todos os carimbos, se 'n' > 0 exclui os
     primeiros 'n' carimbos, senão se 'n' < 0 exclui os últimos 'n'
     carimbos.

          >>> for i in range(8):
          ...     unused_stamp_id = turtle.stamp()
          ...     turtle.fd(30)
          >>> turtle.clearstamps(2)
          >>> turtle.clearstamps(-2)
          >>> turtle.clearstamps()

 -- Função: turtle.undo ()

     Desfaz (repetidamente) a(s) última(s) ação(ões) da tartaruga.  O
     número de ações de desfazer disponíveis é determinado pelo tamanho
     do buffer de desfazer.

          >>> for i in range(4):
          ...     turtle.fd(50); turtle.lt(80)
          ...
          >>> for i in range(8):
          ...     turtle.undo()

 -- Função: turtle.speed (speed=None)


     Parâmetros: ‘speed’ – um inteiro no intervalo 0..10 ou uma string
     de velocidade (veja abaixo)

     Define a velocidade da tartaruga para um valor inteiro no intervalo
     0..10.  Se nenhum argumento for fornecido, retorna a velocidade
     atual.

     Se a entrada for um número maior que 10 ou menor que 0,5, a
     velocidade é definida como 0.  As strings de velocidade são
     mapeadas para valores de velocidade da seguinte forma:

        * “fastest”: 0

        * “fast”: 10

        * “normal”: 6

        * “slow”: 3

        * “slowest”: 1

     Velocidades de 1 a 10 tornam a animação cada vez mais rápida, tanto
     para o desenho da linha como para a rotação da tartaruga.

     Atenção: 'speed' = 0 significa que 'nenhuma' animação ocorre.
     forward/back faz a tartaruga pular e da mesma forma para left/right
     faz a tartaruga girar instantaneamente.

          >>> turtle.speed()
          3
          >>> turtle.speed('normal')
          >>> turtle.speed()
          6
          >>> turtle.speed(9)
          >>> turtle.speed()
          9


File: python.info,  Node: Fala o estado de Turtle,  Next: Configurações de medida,  Prev: Movimentos de Turtle,  Up: Métodos de RawTurtle/Turtle e funções correspondentes

5.25.10.19 Fala o estado de Turtle
..................................

 -- Função: turtle.position ()
 -- Função: turtle.pos ()

     Retorna a localização atual da tartaruga (x,y) (como um vetor *note
     Vec2D: 4159.).

          >>> turtle.pos()
          (440.00,-0.00)

 -- Função: turtle.towards (x, y=None)


     Parâmetros:

        * ‘x’ – um número ou um par/vetor de números ou uma instância de
          tartaruga

        * ‘y’ – um número caso 'x' seja um número, senão ‘None’

     Retorna o ângulo entre a linha da posição da tartaruga para a
     posição especificada por (x,y), o vetor ou a outra tartaruga.  Isso
     depende da orientação inicial da tartaruga, que depende do modo -
     “standard”/”world” ou “logo”.

          >>> turtle.goto(10, 10)
          >>> turtle.towards(0,0)
          225.0

 -- Função: turtle.xcor ()

     Retorna a coordenada X da tartaruga.

          >>> turtle.home()
          >>> turtle.left(50)
          >>> turtle.forward(100)
          >>> turtle.pos()
          (64.28,76.60)
          >>> print(round(turtle.xcor(), 5))
          64.27876

 -- Função: turtle.ycor ()

     Retorna a coordenada Y da tartaruga.

          >>> turtle.home()
          >>> turtle.left(60)
          >>> turtle.forward(100)
          >>> print(turtle.pos())
          (50.00,86.60)
          >>> print(round(turtle.ycor(), 5))
          86.60254

 -- Função: turtle.heading ()

     Retorna o título atual da tartaruga (o valor depende do modo da
     tartaruga, veja *note mode(): 414a.).

          >>> turtle.home()
          >>> turtle.left(67)
          >>> turtle.heading()
          67.0

 -- Função: turtle.distance (x, y=None)


     Parâmetros:

        * ‘x’ – um número ou um par/vetor de números ou uma instância de
          tartaruga

        * ‘y’ – um número caso 'x' seja um número, senão ‘None’

     Retorna a distância da tartaruga para (x,y), o vetor dado, ou a
     outra tartaruga dada, em unidades de passo de tartaruga.

          >>> turtle.home()
          >>> turtle.distance(30,40)
          50.0
          >>> turtle.distance((30,40))
          50.0
          >>> joe = Turtle()
          >>> joe.forward(77)
          >>> turtle.distance(joe)
          77.0


File: python.info,  Node: Configurações de medida,  Next: Controle da Caneta<2>,  Prev: Fala o estado de Turtle,  Up: Métodos de RawTurtle/Turtle e funções correspondentes

5.25.10.20 Configurações de medida
..................................

 -- Função: turtle.degrees (fullcircle=360.0)


     Parâmetros: ‘fullcircle’ – um número

     Define as unidades de medição do ângulo, ou seja, defina o número
     de “graus” para um círculo completo.  O valor padrão é 360 graus.

          >>> turtle.home()
          >>> turtle.left(90)
          >>> turtle.heading()
          90.0

          >>> # Alterar unidade de medida de ângulo para grad (também
          >>> # conhecido como gon, grau ou grado e é igual a 1/100
          >>> # do ângulo reto).
          >>> turtle.degrees(400.0)
          >>> turtle.heading()
          100.0
          >>> turtle.degrees(360)
          >>> turtle.heading()
          90.0

 -- Função: turtle.radians ()

     Define as unidades de medida de ângulo para radianos.  Equivalente
     a ‘degrees(2*math.pi)’.

          >>> turtle.home()
          >>> turtle.left(90)
          >>> turtle.heading()
          90.0
          >>> turtle.radians()
          >>> turtle.heading()
          1.5707963267948966


File: python.info,  Node: Controle da Caneta<2>,  Next: Estado da tartaruga,  Prev: Configurações de medida,  Up: Métodos de RawTurtle/Turtle e funções correspondentes

5.25.10.21 Controle da Caneta
.............................

* Menu:

* Estado do Desenho::
* Controle da Cor::
* Preenchimento::
* Mais sobre o Controle do Desenho::


File: python.info,  Node: Estado do Desenho,  Next: Controle da Cor,  Up: Controle da Caneta<2>

5.25.10.22 Estado do Desenho
............................

 -- Função: turtle.pendown ()
 -- Função: turtle.pd ()
 -- Função: turtle.down ()

     Desce a caneta - desenha ao se mover.

 -- Função: turtle.penup ()
 -- Função: turtle.pu ()
 -- Função: turtle.up ()

     Levanta a caneta – sem qualquer desenho ao se mover.

 -- Função: turtle.pensize (width=None)
 -- Função: turtle.width (width=None)


     Parâmetros: ‘width’ – um número positivo

     Define a espessura da linha para 'width' ou retorna-a.  Se
     resizemode estiver definido como “auto” e a forma de tartaruga for
     um polígono, esse polígono será desenhado com a mesma espessura de
     linha.  Se nenhum argumento for fornecido, a espessura atual da
     caneta será retornada.

          >>> turtle.pensize()
          1
          >>> turtle.pensize(10)   # from here on lines of width 10 are drawn

 -- Função: turtle.pen (pen=None, **pendict)


     Parâmetros:

        * ‘pen’ – um dicionário com algumas ou todas as chaves listadas
          abaixo

        * ‘pendict’ – um ou mais argumentos nomeados com as chaves
          listadas abaixo como palavras-chave

     Retorna ou define os atributos da caneta em um “dicionário da
     caneta” com os seguintes pares de chave/valor:

        * “shown”: True/False

        * “pendown”: True/False

        * “pencolor”: string de cores ou tupla de cores

        * “fillcolor”: string de cores ou tupla de cores

        * “pensize”: número positivo

        * “speed”: número na faixa de 0..10.

        * “resizemode”: “auto”, “user” ou “noresize”

        * “stretchfactor”: (número positivo, número positivo)

        * “outline”: número positivo

        * “tilt”: número

     Este dicionário pode ser usado como argumento para uma chamada
     subsequente para *note pen(): 4114. para restaurar o estado da
     caneta anterior.  Além disso, um ou mais desses atributos podem ser
     fornecidos como argumentos nomeados.  Isso pode ser usado para
     definir vários atributos de caneta em uma instrução.

          >>> turtle.pen(fillcolor="black", pencolor="red", pensize=10)
          >>> sorted(turtle.pen().items())
          [('fillcolor', 'black'), ('outline', 1), ('pencolor', 'red'),
           ('pendown', True), ('pensize', 10), ('resizemode', 'noresize'),
           ('shearfactor', 0.0), ('shown', True), ('speed', 9),
           ('stretchfactor', (1.0, 1.0)), ('tilt', 0.0)]
          >>> penstate=turtle.pen()
          >>> turtle.color("yellow", "")
          >>> turtle.penup()
          >>> sorted(turtle.pen().items())[:3]
          [('fillcolor', ''), ('outline', 1), ('pencolor', 'yellow')]
          >>> turtle.pen(penstate, fillcolor="green")
          >>> sorted(turtle.pen().items())[:3]
          [('fillcolor', 'green'), ('outline', 1), ('pencolor', 'red')]

 -- Função: turtle.isdown ()

     Retorna ‘True’ se a caneta estiver abaixada, ‘False’ se estiver
     levantada.

          >>> turtle.penup()
          >>> turtle.isdown()
          False
          >>> turtle.pendown()
          >>> turtle.isdown()
          True


File: python.info,  Node: Controle da Cor,  Next: Preenchimento,  Prev: Estado do Desenho,  Up: Controle da Caneta<2>

5.25.10.23 Controle da Cor
..........................

 -- Função: turtle.pencolor ()

 -- Função: turtle.pencolor (color, /)

 -- Função: turtle.pencolor (r, g, b, /)

     Retorna ou define a cor da caneta ou pencolor.

     São permitidos quatro formatos de entrada:

     ‘pencolor()’

          Retorna a cor da caneta atual como string de especificação de
          cor ou como uma tupla (veja o exemplo).  Pode ser usado como
          entrada para outra chamada color/pencolor/fillcolor/bgcolor.

     ‘pencolor(colorstring)’

          Define pencolor como 'colorstring', que é uma string de
          especificação de cor Tk, como ‘"red"’, ‘"yellow"’ ou
          ‘"#33cc8c"’.

     ‘pencolor((r, g, b))’

          Define a cor da caneta como a cor RGB representada pela tupla
          'r', 'g', e 'b'.  Os valores de 'r', 'g', and 'b' precisam
          estar na faixa 0..colormode, onde colormode é 1.0 ou 255 (ver
          *note colormode(): 414b.).

     ‘pencolor(r, g, b)’

          Define a cor da caneta como a cor RGB representada por 'r',
          'g', e 'b'.  Os valores de 'r', 'g', and 'b' precisam estar na
          faixa 0..colormode.

     Se a forma da tartaruga for um polígono, o contorno desse polígono
     será desenhado com a nova cor de caneta definida.

          >>> colormode()
          1.0
          >>> turtle.pencolor()
          'red'
          >>> turtle.pencolor("brown")
          >>> turtle.pencolor()
          'brown'
          >>> tup = (0.2, 0.8, 0.55)
          >>> turtle.pencolor(tup)
          >>> turtle.pencolor()
          (0.2, 0.8, 0.5490196078431373)
          >>> colormode(255)
          >>> turtle.pencolor()
          (51.0, 204.0, 140.0)
          >>> turtle.pencolor('#32c18f')
          >>> turtle.pencolor()
          (50.0, 193.0, 143.0)

 -- Função: turtle.fillcolor ()

 -- Função: turtle.fillcolor (color, /)

 -- Função: turtle.fillcolor (r, g, b, /)

     Retorna ou define o fillcolor.

     São permitidos quatro formatos de entrada:

     ‘fillcolor()’

          Retorna a cor de preenchimento atual como string, ou em
          formato de tupla (veja o exemplo).  Pode ser usado como
          entrada para outra chamada color/pencolor/fillcolor/bgcolor.

     ‘fillcolor(colorstring)’

          Define fillcolor como 'colorstring', que é uma especificação
          de cor do Tk em formato de string, como ‘"red"’, ‘"yellow"’,
          ou ‘"#33cc8c"’.

     ‘fillcolor((r, g, b))’

          Define fillcolor como a cor no padrão RGB representada por
          tupla de 'r', 'g' e 'b'.  Cada um de 'r', 'g' e 'b' deve estar
          no limite 0..colormode, em que colormode é 1,0 ou 255
          (consulte *note colormode(): 414b.).

     ‘fillcolor(r, g, b)’

          Define fillcolor como uma cor no formato RGB representada por
          'r', 'g' e 'b'.  Cada um dos elementos 'r', 'g' e 'b' devem
          estar no limite 0..colormode.

     Se turtleshape for um polígono, o interior desse polígono será
     desenhado com a nova cor de preenchimento definida.

          >>> turtle.fillcolor("violet")
          >>> turtle.fillcolor()
          'violet'
          >>> turtle.pencolor()
          (50.0, 193.0, 143.0)
          >>> turtle.fillcolor((50, 193, 143))  # Inteiros, não pontos flutuantes
          >>> turtle.fillcolor()
          (50.0, 193.0, 143.0)
          >>> turtle.fillcolor('#ffffff')
          >>> turtle.fillcolor()
          (255.0, 255.0, 255.0)

 -- Função: turtle.color ()

 -- Função: turtle.color (color, /)

 -- Função: turtle.color (r, g, b, /)

 -- Função: turtle.color (pencolor, fillcolor, /)

     Retorna ou define os valores de pencolor e fillcolor.

     Diversos formatos de entrada são permitidos.  Eles usam de 0 a 3
     argumentos da seguinte forma:

     ‘color()’

          Retorna os valores atuais de pencolor e fillcollor como um par
          de cores como strings ou tuplas conforme retornado por *note
          pencolor(): 4117. e *note fillcolor(): 4118.

     ‘color(colorstring)’, ‘color((r,g,b))’, ‘color(r,g,b)’

          Entradas como em *note pencolor(): 4117, define ambos,
          fillcolor e pencolor, para o valor informado.

     ‘color(colorstring1, colorstring2)’, ‘color((r1,g1,b1), (r2,g2,b2))’

          Equivalente a ‘pencolor(colorstring1)’ e
          ‘fillcolor(colorstring2)’ e de forma análoga se a outra
          formatação de entrada for usada.

     Se o turtleshape for um polígono, o contorno e o interior desse
     polígono serão desenhados com as cores recém-definidas.

          >>> turtle.color("red", "green")
          >>> turtle.color()
          ('red', 'green')
          >>> color("#285078", "#a0c8f0")
          >>> color()
          ((40.0, 80.0, 120.0), (160.0, 200.0, 240.0))

Veja também: Método da tela *note colormode(): 414b.


File: python.info,  Node: Preenchimento,  Next: Mais sobre o Controle do Desenho,  Prev: Controle da Cor,  Up: Controle da Caneta<2>

5.25.10.24 Preenchimento
........................

 -- Função: turtle.filling ()

     Retorna fillstate (‘True’ se estiver preenchido, ‘False’ caso
     contrário).

          >>> turtle.begin_fill()
          >>> if turtle.filling():
          ...    turtle.pensize(5)
          ... else:
          ...    turtle.pensize(3)

 -- Função: turtle.begin_fill ()

     Deve ser chamado antes de desenhar uma forma a ser preenchida.

 -- Função: turtle.end_fill ()

     Preenche a forma desenhada após a última chamada para *note
     begin_fill(): 411a.

     O preenchimento ou não de regiões sobrepostas para polígonos que se
     cruzam ou formas múltiplas depende dos gráficos do sistema
     operacional, do tipo de sobreposição e do número de sobreposições.
     Por exemplo, a estrela da Tartaruga acima pode ser toda amarela ou
     ter algumas regiões brancas.

          >>> turtle.color("black", "red")
          >>> turtle.begin_fill()
          >>> turtle.circle(80)
          >>> turtle.end_fill()


File: python.info,  Node: Mais sobre o Controle do Desenho,  Prev: Preenchimento,  Up: Controle da Caneta<2>

5.25.10.25 Mais sobre o Controle do Desenho
...........................................

 -- Função: turtle.reset ()

     Remove os desenhos da tartaruga da tela, centraliza novamente a
     tartaruga e define as variáveis para os valores padrões.

          >>> turtle.goto(0,-22)
          >>> turtle.left(100)
          >>> turtle.position()
          (0.00,-22.00)
          >>> turtle.heading()
          100.0
          >>> turtle.reset()
          >>> turtle.position()
          (0.00,0.00)
          >>> turtle.heading()
          0.0

 -- Função: turtle.clear ()

     Exclui os desenhos da tartaruga da tela e não move a tartaruga.  O
     atual estado e posição da tartaruga, bem como os desenhos de outras
     tartarugas, não são afetados.

 -- Função: turtle.write (arg, move=False, align='left', font=('Arial',
          8, 'normal'))


     Parâmetros:

        * ‘arg’ – objeto a ser escrito na TurtleScreen

        * ‘move’ – True/False

        * ‘align’ – uma das Strings “left”, “center” ou right”

        * ‘font’ – a triple (fontname, fontsize, fonttype)

     Escreve o texto - a representação string de 'arg' - na posição
     atual da tartaruga de acordo com 'align' (“left”, “center” ou
     “right”) e com a fonte fornecida.  Se 'move' for verdadeiro, a
     caneta será movida para o canto inferior direito do texto.  Por
     padrão, 'move' é ‘False’.

          >>> turtle.write("Home = ", True, align="center")
          >>> turtle.write((0,0), True)


File: python.info,  Node: Estado da tartaruga,  Next: Eventos Utilizados,  Prev: Controle da Caneta<2>,  Up: Métodos de RawTurtle/Turtle e funções correspondentes

5.25.10.26 Estado da tartaruga
..............................

* Menu:

* Visibilidade::
* Aparência::


File: python.info,  Node: Visibilidade,  Next: Aparência,  Up: Estado da tartaruga

5.25.10.27 Visibilidade
.......................

 -- Função: turtle.hideturtle ()
 -- Função: turtle.ht ()

     Torna a tartaruga invisível.  É uma boa ideia fazer isso enquanto
     estiver fazendo algum desenho complexo, pois ocultar a tartaruga
     acelera o desenho de forma visível.

          >>> turtle.hideturtle()

 -- Função: turtle.showturtle ()
 -- Função: turtle.st ()

     Tornar a tartaruga visível.

          >>> turtle.showturtle()

 -- Função: turtle.isvisible ()

     Retorna ‘True’ se a Tartaruga for exibida, ‘False’ se estiver
     oculta.

          >>> turtle.hideturtle()
          >>> turtle.isvisible()
          False
          >>> turtle.showturtle()
          >>> turtle.isvisible()
          True


File: python.info,  Node: Aparência,  Prev: Visibilidade,  Up: Estado da tartaruga

5.25.10.28 Aparência
....................

 -- Função: turtle.shape (name=None)


     Parâmetros: ‘name’ – uma string que é um shapename válido

     Define a forma da tartaruga para a forma com o 'nome' fornecido ou,
     se o nome não for fornecido, retorna nome da forma atual.  A forma
     com 'name' deve existir no dicionário TurtleScreen.  Inicialmente,
     há as seguintes formas de polígono: “arrow” (seta), “turtle”
     (tartaruga), “circle” (círculo), “square” (quadrado), “triangle”
     (triângulo), “classic” (clássico).  Para saber mais sobre como
     lidar com formas, consulte o método Screen *note register_shape():
     414e. .

          >>> turtle.shape()
          'classic'
          >>> turtle.shape("turtle")
          >>> turtle.shape()
          'turtle'

 -- Função: turtle.resizemode (rmode=None)


     Parâmetros: ‘rmode’ – uma das Strings “auto”, “user”, “noresize”

     Define resizemode como um dos valores: “auto”, “user”, “noresize”.
     Se 'rmode' não for fornecido, retorna o modo de redimensionamento
     atual.  Os diferentes modos de redimensionamento têm os seguintes
     efeitos:

        - “auto”: adapta a aparência da tartaruga correspondente ao
          valor do pensize.

        - “user”: adapta a aparência da tartaruga de acordo com os
          valores de stretchfactor e outlinewidth (outline), que são
          definidos por *note shapesize(): 4126.

        - “noresize”: não acontece nenhuma adaptação na aparência da
          tartaruga.

     ‘resizemode("user")’ é chamado por *note shapesize(): 4126. quando
     usado com argumentos.

          >>> turtle.resizemode()
          'noresize'
          >>> turtle.resizemode("auto")
          >>> turtle.resizemode()
          'auto'

 -- Função: turtle.shapesize (stretch_wid=None, stretch_len=None,
          outline=None)
 -- Função: turtle.turtlesize (stretch_wid=None, stretch_len=None,
          outline=None)


     Parâmetros:

        * ‘stretch_wid’ – número positivo

        * ‘stretch_len’ – número positivo

        * ‘outline’ – número positivo

     Retorna ou define os atributos x/y-stretchfactors e/ou contorno da
     caneta.  Define o modo de redimensionamento como “usuário”.  Se e
     somente se resizemode estiver definido como “user”, a tartaruga
     será exibida esticada de acordo com seus stretchfactors:
     'stretch_wid' é stretchfactor perpendicular à sua orientação,
     'stretch_len' é stretchfactor na direção de sua orientação,
     'outline' determina a largura do contorno da forma.

          >>> turtle.shapesize()
          (1.0, 1.0, 1)
          >>> turtle.resizemode("user")
          >>> turtle.shapesize(5, 5, 12)
          >>> turtle.shapesize()
          (5, 5, 12)
          >>> turtle.shapesize(outline=8)
          >>> turtle.shapesize()
          (5, 5, 8)

 -- Função: turtle.shearfactor (shear=None)


     Parâmetros: ‘shear’ – número (opcional)

     Define ou retorna o fator de shearfactor atual.  Corta a forma de
     tartaruga de acordo com o fator de shearfactor fornecido, que é a
     tangente do ângulo de shearfactor.  'Não' muda a direção da
     tartaruga (direção do movimento).  Se o shearfactor não for
     fornecido: retorna o fator de shearfactor atual, i.  Isso é.  a
     tangente do ângulo de shearfactor, pelo qual as linhas paralelas à
     direção da tartaruga são cortadas.

          >>> turtle.shape("circle")
          >>> turtle.shapesize(5,2)
          >>> turtle.shearfactor(0.5)
          >>> turtle.shearfactor()
          0.5

 -- Função: turtle.tilt (angle)


     Parâmetros: ‘angle’ – um número

     Gira a forma de tartaruga em um 'ângulo' a partir de seu ângulo de
     inclinação atual, mas 'não' altera o rumo da tartaruga (direção do
     movimento).

          >>> turtle.reset()
          >>> turtle.shape("circle")
          >>> turtle.shapesize(5,2)
          >>> turtle.tilt(30)
          >>> turtle.fd(50)
          >>> turtle.tilt(30)
          >>> turtle.fd(50)

 -- Função: turtle.tiltangle (angle=None)


     Parâmetros: ‘angle’ – um número (opcional)

     Define ou retorna o ângulo de inclinação atual.  Se o ângulo for
     fornecido, gira a forma de tartaruga para apontar na direção
     especificada pelo ângulo, independentemente do seu ângulo de
     inclinação atual.  'Não' muda a direção da tartaruga (direção do
     movimento).  Se o ângulo não for fornecido: retorna o ângulo de
     inclinação atual, que é o ângulo entre a orientação da forma da
     tartaruga e a direção da tartaruga (sua direção de movimento).

          >>> turtle.reset()
          >>> turtle.shape("circle")
          >>> turtle.shapesize(5,2)
          >>> turtle.tilt(45)
          >>> turtle.tiltangle()
          45.0

 -- Função: turtle.shapetransform (t11=None, t12=None, t21=None,
          t22=None)


     Parâmetros:

        * ‘t11’ – um número (opcional)

        * ‘t12’ – um número (opcional)

        * ‘t21’ – um número (opcional)

        * ‘t12’ – um número (opcional)

     Define ou retorna a matriz de transformação atual da forma da
     tartaruga.

     Se nenhum dos elementos da matriz for fornecido, retorna a matriz
     de transformação como uma tupla de 4 elementos.  Caso contrário,
     define os elementos fornecidos e transforma a forma da tartaruga de
     acordo com a matriz que consiste na primeira linha t11, t12 e na
     segunda linha t21, t22.  O resultado de t11 * t22 - t12 * t21 não
     deve ser zero, caso contrário será gerado um erro.  Modifica
     stretchfactor, shearfactor e tiltangle de acordo com a matriz
     fornecida.

          >>> turtle = Turtle()
          >>> turtle.shape("square")
          >>> turtle.shapesize(4,2)
          >>> turtle.shearfactor(-0.5)
          >>> turtle.shapetransform()
          (4.0, -1.0, -0.0, 2.0)

 -- Função: turtle.get_shapepoly ()

     Retorna o polígono da forma atual como uma tupla de pares de
     coordenadas.  Isto pode ser usado para definir uma nova forma ou
     componentes de uma forma composta.

          >>> turtle.shape("square")
          >>> turtle.shapetransform(4, -1, 0, 2)
          >>> turtle.get_shapepoly()
          ((50, -20), (30, 20), (-50, 20), (-30, -20))


File: python.info,  Node: Eventos Utilizados,  Next: Métodos Especiais da Tartaruga,  Prev: Estado da tartaruga,  Up: Métodos de RawTurtle/Turtle e funções correspondentes

5.25.10.29 Eventos Utilizados
.............................

 -- Função: turtle.onclick (fun, btn=1, add=None)


     Parâmetros:

        * ‘fun’ – um função com dois argumento que serão chamados com as
          coordenadas do ponto clicado na tela

        * ‘btn’ – número do botão do mouse, o padrão é 1 (botão esquerdo
          do mouse)

        * ‘add’ – ‘True’ ou ‘False’ – se ‘True’, uma nova ligação será
          adicionada; caso contrário, ela substituirá uma ligação antiga

     Vincula 'fun' a eventos de clique do mouse nessa tartaruga.  Se
     'fun' for ‘None’, as associações existentes serão removidas.
     Exemplo para a tartaruga anônima, ou seja, a forma processual:

          >>> def turn(x, y):
          ...     left(180)
          ...
          >>> onclick(turn)  # Agora, clicar na tartaruga irá girá-la.
          >>> onclick(None)  # a associação de eventos será removida

 -- Função: turtle.onrelease (fun, btn=1, add=None)


     Parâmetros:

        * ‘fun’ – um função com dois argumento que serão chamados com as
          coordenadas do ponto clicado na tela

        * ‘btn’ – número do botão do mouse, o padrão é 1 (botão esquerdo
          do mouse)

        * ‘add’ – ‘True’ ou ‘False’ – se ‘True’, uma nova ligação será
          adicionada; caso contrário, ela substituirá uma ligação antiga

     Vincule 'fun' aos eventos de liberação do botão do mouse nesta
     tartaruga.  Se 'fun' for ‘None’, as associações existentes serão
     removidas.

          >>> class MyTurtle(Turtle):
          ...     def glow(self,x,y):
          ...         self.fillcolor("red")
          ...     def unglow(self,x,y):
          ...         self.fillcolor("")
          ...
          >>> turtle = MyTurtle()
          >>> turtle.onclick(turtle.glow)     # clicar na tartaruga torna o preenchimento vermelho,
          >>> turtle.onrelease(turtle.unglow) # .liberar a transforma em transparente

 -- Função: turtle.ondrag (fun, btn=1, add=None)


     Parâmetros:

        * ‘fun’ – um função com dois argumento que serão chamados com as
          coordenadas do ponto clicado na tela

        * ‘btn’ – número do botão do mouse, o padrão é 1 (botão esquerdo
          do mouse)

        * ‘add’ – ‘True’ ou ‘False’ – se ‘True’, uma nova ligação será
          adicionada; caso contrário, ela substituirá uma ligação antiga

     Vincule 'fun' a eventos de movimentação do mouse nessa tartaruga.
     Se 'fun' for ‘None’, as associações existentes serão removidas.

     Observação: Cada sequência de eventos de movimento do mouse em uma
     tartaruga é precedida por um evento de clique do mouse naquela
     tartaruga.

          >>> turtle.ondrag(turtle.goto)

     Posteriormente, clicar e arrastar a Tartaruga a moverá pela tela,
     produzindo desenhos à mão (se a caneta estiver deitada).


File: python.info,  Node: Métodos Especiais da Tartaruga,  Next: Formas compostas,  Prev: Eventos Utilizados,  Up: Métodos de RawTurtle/Turtle e funções correspondentes

5.25.10.30 Métodos Especiais da Tartaruga
.........................................

 -- Função: turtle.begin_poly ()

     Começa a registrar os vértices de um polígono.  A posição atual da
     tartaruga é o primeiro vértice do polígono.

 -- Função: turtle.end_poly ()

     Para de registrar os vértices de um polígono.  A posição atual da
     tartaruga é o último vértice do polígono.  Isto será conectado ao
     primeiro vértice.

 -- Função: turtle.get_poly ()

     Retorna o último polígono registrado.

          >>> turtle.home()
          >>> turtle.begin_poly()
          >>> turtle.fd(100)
          >>> turtle.left(20)
          >>> turtle.fd(30)
          >>> turtle.left(60)
          >>> turtle.fd(50)
          >>> turtle.end_poly()
          >>> p = turtle.get_poly()
          >>> register_shape("myFavouriteShape", p)

 -- Função: turtle.clone ()

     Cria e retorna um clone da tartaruga com a mesma posição, direção e
     propriedades da tartaruga original.

          >>> mick = Turtle()
          >>> joe = mick.clone()

 -- Função: turtle.getturtle ()
 -- Função: turtle.getpen ()

     Retorna o próprio objeto Turtle.  Uso recomendado: como função para
     retornar a “tartaruga anônima”:

          >>> pet = getturtle()
          >>> pet.fd(50)
          >>> pet
          <turtle.Turtle object at 0x...>

 -- Função: turtle.getscreen ()

     Retorna o objeto *note TurtleScreen: 4166. no qual a tartaruga está
     sendo desenhada.  Os métodos de TurtleScreen podem então ser
     chamados para este objeto.

          >>> ts = turtle.getscreen()
          >>> ts
          <turtle._Screen object at 0x...>
          >>> ts.bgcolor("pink")

 -- Função: turtle.setundobuffer (size)


     Parâmetros: ‘size’ – um inteiro ou ‘None’

     Define ou desativa o undobuffer.  Se 'size' for um inteiro, um
     undobuffer vazio de determinado tamanho será instalado.  'size'
     fornece o número máximo de ações da tartaruga que podem ser
     desfeitas pelo método/função *note undo(): 4101. .  Se 'size' for
     ‘None’, o undobuffer será desativado.

          >>> turtle.setundobuffer(42)

 -- Função: turtle.undobufferentries ()

     Retorna o número de entradas no undobuffer.

          >>> while undobufferentries():
          ...     undo()


File: python.info,  Node: Formas compostas,  Prev: Métodos Especiais da Tartaruga,  Up: Métodos de RawTurtle/Turtle e funções correspondentes

5.25.10.31 Formas compostas
...........................

Para usar formas de tartaruga compostas, que consistem em vários
polígonos de cores diferentes, você deve usar a classe auxiliar *note
Shape: 4169. explicitamente, conforme descrito abaixo:

  1. Crie um objeto Shape vazio do tipo “compound”.

  2. Adicione quantos componentes desejar a esse objeto, usando o método
     *note addcomponent(): 416a.

     Por exemplo:

          >>> s = Shape("compound")
          >>> poly1 = ((0,0),(10,-5),(0,10),(-10,-5))
          >>> s.addcomponent(poly1, "red", "blue")
          >>> poly2 = ((0,0),(10,-5),(-10,-5))
          >>> s.addcomponent(poly2, "blue", "red")

  3. Agora, adicione o Shape à lista de formas da tela e use-o:

          >>> register_shape("myshape", s)
          >>> shape("myshape")

     Nota: A classe *note Shape: 4169. é usada internamente pelo método
     *note register_shape(): 414e. de diferentes maneiras.  O
     programador da aplicação precisa lidar com a classe Shape 'somente'
     ao usar formas compostas como as mostradas acima!


File: python.info,  Node: métodos do TurtleScreen/Screen e as funções correspondentes,  Next: Classes Públicas,  Prev: Métodos de RawTurtle/Turtle e funções correspondentes,  Up: turtle — Gráficos tartaruga

5.25.10.32 métodos do TurtleScreen/Screen e as funções correspondentes
......................................................................

A maioria dos exemplos desta seção se refere a uma instância de
TurtleScreen chamada ‘screen’.

* Menu:

* Controle da Janela::
* Controle da animação::
* Usando os eventos de tela::
* Métodos de entrada::
* Configurações e métodos especiais::
* Métodos específico do Screen, estes métodos não são herdados do TurtleScreen: Métodos específico do Screen estes métodos não são herdados do TurtleScreen.


File: python.info,  Node: Controle da Janela,  Next: Controle da animação,  Up: métodos do TurtleScreen/Screen e as funções correspondentes

5.25.10.33 Controle da Janela
.............................

 -- Função: turtle.bgcolor ()

 -- Função: turtle.bgcolor (color, /)

 -- Função: turtle.bgcolor (r, g, b, /)

     Retorna ou define a cor de fundo do TurtleScreen.

     São permitidos quatro formatos de entrada:

     ‘bgcolor()’

          Retorna a cor de fundo atual como string de especificação de
          cor ou como uma tupla (veja o exemplo).  Pode ser usado como
          entrada para outra chamada color/pencolor/fillcolor/bgcolor.

     ‘bgcolor(colorstring)’

          Define a cor de fundo como 'colorstring', que é uma string de
          especificação de cor Tk, como ‘"red"’, ‘"yellow"’ ou
          ‘"#33cc8c"’.

     ‘bgcolor((r, g, b))’

          Define a cor de fundo como a cor RGB representada pela tupla
          'r', 'g', e 'b'.  Os valores de 'r', 'g', and 'b' precisam
          estar na faixa 0..colormode, onde colormode é 1.0 ou 255 (ver
          *note colormode(): 414b.).

     ‘bgcolor(r, g, b)’

          Define a cor de fundo como a cor RGB representada por 'r',
          'g', e 'b'.  Os valores de 'r', 'g', and 'b' precisam estar na
          faixa 0..colormode.

          >>> screen.bgcolor("orange")
          >>> screen.bgcolor()
          'orange'
          >>> screen.bgcolor("#800080")
          >>> screen.bgcolor()
          (128.0, 0.0, 128.0)

 -- Função: turtle.bgpic (picname=None)


     Parâmetros: ‘picname’ – um string, um nome de um arquivo gif ou
     ‘"nopic"’, ou ‘None’

     Configura a imagem de fundo ou retorna nome da imagem de fundo
     atual.  Se 'picname' for um nome de arquivo, definirá a imagem
     correspondente como plano de fundo.  Se 'picname' for ‘"nopic"’,
     exclui a imagem de fundo, caso haja.  Se 'picname' for ‘None’,
     retorna o nome do arquivo da imagem de fundo atual:

          >>> screen.bgpic()
          'nopic'
          >>> screen.bgpic("landscape.gif")
          >>> screen.bgpic()
          "landscape.gif"

 -- Função: turtle.clear ()

          Nota: Este método de TurtleScreen está disponível como uma
          função global somente sob o nome ‘clearscreen’.  A função
          global ‘clear’ é derivada de forma diferente do método de
          Turtle ‘clear’ .

 -- Função: turtle.clearscreen ()

     Remove todos os desenhos e todas as tartarugas da TurtleScreen.
     Redefine a TurtleScreen, agora vazia, para seu estado inicial:
     fundo branco, sem imagem de fundo, sem vínculos de eventos e
     rastreamento ativado.

 -- Função: turtle.reset ()

          Nota: Este método de TurtleScreen está disponível como uma
          função global somente com o nome ‘resetscreen’.  A função
          global ‘reset’ é outra derivada do método de Turtle ‘reset’ .

 -- Função: turtle.resetscreen ()

     Reinicia todas as Turtles em Screen para seu estado inicial.

 -- Função: turtle.screensize (canvwidth=None, canvheight=None, bg=None)


     Parâmetros:

        * ‘canvwidth’ – positivo inteiro, a nova largura da tela em
          pixels

        * ‘canvheight’ – positivo inteiro, a nova altura da tela em
          pixels

        * ‘bg’ – Uma string com a cor ou uma tupla, a nova cor de fundo

     Se nenhum argumento for fornecido, retorna o atual (canvaswidth,
     canvasheight).  Caso contrário, redimensiona a tela em que as
     tartarugas estão desenhadas.  Não altera a janela de desenho.  Para
     observar as partes ocultas da tela, use as barras de rolagem.  Com
     este método, é possível tornar visíveis as partes de um desenho que
     antes estavam fora da tela.

          >>> screen.screensize()
          (400, 300)
          >>> screen.screensize(2000,1500)
          >>> screen.screensize()
          (2000, 1500)

     Por exemplo, para procurar uma tartaruga que escapou por engano ;-)

 -- Função: turtle.setworldcoordinates (llx, lly, urx, ury)


     Parâmetros:

        * ‘llx’ – um número representando a coordenada x do canto
          inferior esquerdo da tela

        * ‘lly’ – um número representando a coordenada y do canto
          inferior esquerdo da tela

        * ‘urx’ – um número representando a coordenada x do canto
          superior direito da tela

        * ‘ury’ – um número representando a coordenada y do canto
          superior direito da tela

     Configura o sistema de coordenadas definido pelo usuário e muda
     para o modo “world”, se necessário.  Isso executa um
     ‘screen.reset()’.  Se o modo “world” já estiver ativo, todos os
     desenhos atuais serão redesenhados de acordo com as novas
     coordenadas.

     'ATENÇÃO': em sistemas de coordenadas definidos pelo usuário, os
     ângulos podem aparecer distorcidos.

          >>> screen.reset()
          >>> screen.setworldcoordinates(-50,-7.5,50,7.5)
          >>> for _ in range(72):
          ...     left(10)
          ...
          >>> for _ in range(8):
          ...     left(45); fd(2)   # a regular octagon


File: python.info,  Node: Controle da animação,  Next: Usando os eventos de tela,  Prev: Controle da Janela,  Up: métodos do TurtleScreen/Screen e as funções correspondentes

5.25.10.34 Controle da animação
...............................

 -- Função: turtle.delay (delay=None)


     Parâmetros: ‘delay’ – um número inteiro positivo

     Define ou retorna o 'delay' do desenho em milissegundos.  (Esse é
     aproximadamente o intervalo de tempo entre duas atualizações
     consecutivas da tela).  Quanto maior o atraso do desenho, mais
     lenta será a animação.

     Argumentos opcionais:

          >>> screen.delay()
          10
          >>> screen.delay(5)
          >>> screen.delay()
          5

 -- Função: turtle.tracer (n=None, delay=None)


     Parâmetros:

        * ‘n’ – inteiro não-negativo

        * ‘delay’ – inteiro não-negativo

     Ative ou desative a animação da tartaruga e defina o atraso para
     atualização dos desenhos.  Se 'n' for fornecido, apenas cada
     n-ésima atualização regular da tela será realmente executada.
     (Pode ser usado para acelerar o desenho de gráficos complexos.)
     Quando chamado sem argumentos, retorna o valor atualmente
     armazenado de n.  O segundo argumento define o valor do atraso
     (consulte *note delay(): 413f.).

          >>> screen.tracer(8, 25)
          >>> dist = 2
          >>> for i in range(200):
          ...     fd(dist)
          ...     rt(90)
          ...     dist += 2

 -- Função: turtle.update ()

     Executa uma atualização do TurtleScreen.  Para ser usado quando o
     rastreador estiver desligado.

Veja também o método RawTurtle/Turtle *note speed(): 4102.


File: python.info,  Node: Usando os eventos de tela,  Next: Métodos de entrada,  Prev: Controle da animação,  Up: métodos do TurtleScreen/Screen e as funções correspondentes

5.25.10.35 Usando os eventos de tela
....................................

 -- Função: turtle.listen (xdummy=None, ydummy=None)

     Define o foco no TurtleScreen (para coletar eventos-chave).
     Argumentos fictícios são fornecidos para que seja possível passar
     *note listen(): 4142. para o método onclick.

 -- Função: turtle.onkey (fun, key)
 -- Função: turtle.onkeyrelease (fun, key)


     Parâmetros:

        * ‘fun’ – uma função sem argumentos ou ‘None’

        * ‘key’ – uma string: uma tecla (por exemplo, “a”) ou o nome de
          uma tecla (por exemplo, “space”)

     Vincula 'fun' ao evento de liberação da tecla.  Se 'fun' for
     ‘None’, as ligações de eventos serão removidas.  Observação: para
     poder registrar eventos-chave, o TurtleScreen deve ter o foco.
     (Veja o método *note listen(): 4142.)

          >>> def f():
          ...     fd(50)
          ...     lt(60)
          ...
          >>> screen.onkey(f, "Up")
          >>> screen.listen()

 -- Função: turtle.onkeypress (fun, key=None)


     Parâmetros:

        * ‘fun’ – uma função sem argumentos ou ‘None’

        * ‘key’ – uma string: uma tecla (por exemplo, “a”) ou o nome de
          uma tecla (por exemplo, “space”)

     Vincula 'fun' ao evento de pressionamento de tecla se a tecla for
     fornecida, ou a qualquer evento de pressionamento de tecla se
     nenhuma tecla for fornecida.  Observação: para poder registrar
     eventos-chave, o TurtleScreen deve ter foco.  (Veja o método *note
     listen(): 4142.)

          >>> def f():
          ...     fd(50)
          ...
          >>> screen.onkey(f, "Up")
          >>> screen.listen()

 -- Função: turtle.onclick (fun, btn=1, add=None)
 -- Função: turtle.onscreenclick (fun, btn=1, add=None)


     Parâmetros:

        * ‘fun’ – um função com dois argumento que serão chamados com as
          coordenadas do ponto clicado na tela

        * ‘btn’ – número do botão do mouse, o padrão é 1 (botão esquerdo
          do mouse)

        * ‘add’ – ‘True’ ou ‘False’ – se ‘True’, uma nova ligação será
          adicionada; caso contrário, ela substituirá uma ligação antiga

     Vincula 'fun' a eventos de clique do mouse na tela.  Se 'fun' for
     ‘None’, as associações existentes serão removidas.

     Exemplo de uma instância de TurtleScreen chamada ‘screen’ e uma
     instância de Turtle chamada ‘turtle’:

          >>> screen.onclick(turtle.goto) # Em seguida, clicar no TurtleScreen
          >>>                             # fará a tartaruga se mover até o ponto clicado.
          >>> screen.onclick(None)        # remove associação de evento novamente

          Nota: Este método TurtleScreen está disponível como uma função
          global somente com o nome ‘onscreenclick’.  A função global
          ‘onclick’ é outra derivada do método de Turtle ‘onclick’ .

 -- Função: turtle.ontimer (fun, t=0)


     Parâmetros:

        * ‘fun’ – um função sem nenhum argumento

        * ‘t’ – um número >= 0

     Instala um cronômetro que chama 'fun' após 't' milissegundos.

          >>> running = True
          >>> def f():
          ...     if running:
          ...         fd(50)
          ...         lt(60)
          ...         screen.ontimer(f, 250)
          >>> f()   ### faz a tartaruga marchar
          >>> running = False

 -- Função: turtle.mainloop ()
 -- Função: turtle.done ()

     Inicia o loop de eventos - chamando a função principal do loop do
     Tkinter.  Deve ser a última instrução em um programa gráfico de
     tartaruga.  'Não' deve ser usado se um script for executado no IDLE
     no modo -n (sem subprocesso) - para uso interativo de gráficos de
     tartaruga.

          >>> screen.mainloop()


File: python.info,  Node: Métodos de entrada,  Next: Configurações e métodos especiais,  Prev: Usando os eventos de tela,  Up: métodos do TurtleScreen/Screen e as funções correspondentes

5.25.10.36 Métodos de entrada
.............................

 -- Função: turtle.textinput (title, prompt)


     Parâmetros:

        * ‘title’ – string

        * ‘prompt’ – string

     Abre uma janela de diálogo para a entrada de uma string.  O
     parâmetro 'title' é o título da janela de diálogo, prompt é um
     texto que descreve as informações a serem inseridas.  Se a caixa de
     diálogo for preenchida, retorna a string que foi informada.  Se a
     caixa de diálogo for cancelada, retorna ‘None’.

          >>> screen.textinput("NIM", "Name of first player:")

 -- Função: turtle.numinput (title, prompt, default=None, minval=None,
          maxval=None)


     Parâmetros:

        * ‘title’ – string

        * ‘prompt’ – string

        * ‘default’ – número (opcional)

        * ‘minval’ – número (opcional)

        * ‘maxval’ – número (opcional)

     Abre uma janela de diálogo para a entrada de um número.  O
     parâmetro 'title' é o título da janela de diálogo, prompt é um
     texto que descreve principalmente quais informações numéricas devem
     ser inseridas.  default: valor padrão , minval: mínimo valor para
     entrada, maxval: máximo valor para entrada.  O número inserido deve
     estar no intervalo minval ..  maxval, se este for fornecido.  Caso
     contrário, será emitida uma dica e a caixa de diálogo permanecerá
     aberta para correção.  Se a caixa de diálogo for preenchida,
     retorna o número informado.  Se a caixa de diálogo for cancelada,
     retorna ‘None’.

          >>> screen.numinput("Poker", "Your stakes:", 1000, minval=10, maxval=10000)


File: python.info,  Node: Configurações e métodos especiais,  Next: Métodos específico do Screen estes métodos não são herdados do TurtleScreen,  Prev: Métodos de entrada,  Up: métodos do TurtleScreen/Screen e as funções correspondentes

5.25.10.37 Configurações e métodos especiais
............................................

 -- Função: turtle.mode (mode=None)


     Parâmetros: ‘mode’ – uma das strings “standard”, “logo” ou “world”

     Define o modo da tartaruga (“padrão”, “logotipo” ou “mundo”) e
     redefine a posição.  Se o modo não for fornecido, o modo atual será
     retornado.

     O modo “standard” é compatível com o antigo *note turtle: 101.  O
     modo “logo” é compatível com a maioria dos gráficos de tartaruga.
     O modo “world” usa “coordenadas mundiais” definidas pelo usuário.
     'Atenção': nesse modo, os ângulos aparecem distorcidos se a
     proporção de ‘x/y’ não for igual a 1.

     Modo             Título inicial da tartaruga   ângulos positivos
                                                    
     -----------------------------------------------------------------------
                                                    
     “standard”       para a direita (east)         counterclockwise
                                                    
                                                    
     “logo”           upward (north)                sentido horário
                                                    

          >>> mode("logo")   # resets turtle heading to north
          >>> mode()
          'logo'

 -- Função: turtle.colormode (cmode=None)


     Parâmetros: ‘cmode’ – um dos valores 1.0 ou 255

     Retorna o modo de cor ou defini-lo como 1,0 ou 255.
     Posteriormente, os valores 'r', 'g', 'b' das triplas de cores devem
     estar no limite 0..*cmode*.

          >>> screen.colormode(1)
          >>> turtle.pencolor(240, 160, 80)
          Traceback (most recent call last):
               ...
          TurtleGraphicsError: bad color sequence: (240, 160, 80)
          >>> screen.colormode()
          1.0
          >>> screen.colormode(255)
          >>> screen.colormode()
          255
          >>> turtle.pencolor(240,160,80)

 -- Função: turtle.getcanvas ()

     Retorna a tela desse TurtleScreen.  Útil para pessoas que sabem o
     que fazer com uma tela do Tkinter.

          >>> cv = screen.getcanvas()
          >>> cv
          <turtle.ScrolledCanvas object ...>

 -- Função: turtle.getshapes ()

     Retorna uma lista dos nomes de todas as formas de tartarugas
     disponíveis no momento.

          >>> screen.getshapes()
          ['arrow', 'blank', 'circle', ..., 'turtle']

 -- Função: turtle.register_shape (name, shape=None)
 -- Função: turtle.addshape (name, shape=None)

     Há três maneiras diferentes de chamar essa função:

       1. 'name' é o nome de um arquivo gif e 'shape' é ‘None’: Instala
          a forma de imagem correspondente:

               >>> screen.register_shape("turtle.gif")

               Nota: As formas de imagem 'não' giram ao girar a
               tartaruga, portanto, elas não exibem o rumo da tartaruga!

       2. 'name' é uma string arbitrária e 'shape' é um tupla de pares
          de coordenadas: Instala a forma de polígono correspondente.

               >>> screen.register_shape("triangle", ((5,-3), (0,5), (-5,-3)))

       3. 'name' é uma string arbitrária e 'shape' é um objeto
          (composto) *note Shape: 4169.: Instala a forma composta
          correspondente.

     Adiciona uma forma de tartaruga à lista de formas do TurtleScreen.
     Somente as formas registradas dessa forma podem ser usadas com o
     comando ‘shape(shapename)’ .

 -- Função: turtle.turtles ()

     Retorne uma lista de tartarugas na tela.

          >>> for turtle in screen.turtles():
          ...     turtle.color("red")

 -- Função: turtle.window_height ()

     Retorna a altura da janela da tartaruga.

          >>> screen.window_height()
          480

 -- Função: turtle.window_width ()

     Retorna a largura da janela da tartaruga.

          >>> screen.window_width()
          640


File: python.info,  Node: Métodos específico do Screen estes métodos não são herdados do TurtleScreen,  Prev: Configurações e métodos especiais,  Up: métodos do TurtleScreen/Screen e as funções correspondentes

5.25.10.38 Métodos específico do Screen, estes métodos não são herdados do TurtleScreen
.......................................................................................

 -- Função: turtle.bye ()

     Fecha a janela do gráficos de tartaruga.

 -- Função: turtle.exitonclick ()

     Vincula o método ‘bye()’ aos cliques do mouse na tela.

     Se o valor “using_IDLE” na configuração dicionário for ‘False’
     (valor padrão), entra também no loop principal.  Observação: Se
     IDLE for executado com a chave ‘-n’ (sem subprocesso), esse valor
     deverá ser definido como ‘True’ em ‘turtle.cfg’.  Nesse caso, o
     loop principal do próprio IDLE também estará ativo para o script do
     cliente.

 -- Função: turtle.setup (width=_CFG['width'], height=_CFG['height'],
          startx=_CFG['leftright'], starty=_CFG['topbottom'])

     Define o tamanho e a posição da janela principal.  Os valores
     padrões dos argumentos são armazenados na configuração dicionário e
     podem ser alterados por meio de um arquivo ‘turtle.cfg’.


     Parâmetros:

        * ‘width’ – se for um inteiro, o tamanho em pixels; se for um
          float, uma fração da tela; o padrão é 50% da tela

        * ‘height’ – se for um inteiro, a altura em pixels; se for um
          float, uma fração da tela; o padrão é 75% da tela

        * ‘startx’ – se positivo, este parâmetro define a posição
          inicial em pixels a partir da borda esquerda da tela; se
          negativo, define a partir da borda direita; se ‘None’,
          centraliza a janela horizontalmente

        * ‘starty’ – se positivo, este parâmetro define a posição
          inicial, em pixels, a partir da borda superior da tela; se
          negativo, define a partir da borda inferior; se for ‘None’,
          centraliza a janela verticalmente

          >>> screen.setup (width=200, height=200, startx=0, starty=0)
          >>>              # define a janela para 200x200 pixels, no canto superior esquerdo da tela
          >>> screen.setup(width=.75, height=0.5, startx=None, starty=None)
          >>>              # define a janela para 75% da tela por 50% da tela e centraliza

 -- Função: turtle.title (titlestring)


     Parâmetros: ‘titlestring’ – uma string que é exibida na barra de
     título da janela de gráficos da tartaruga

     Define o título da janela da tartaruga como 'titlestring'.

          >>> screen.title("Welcome to the turtle zoo!")


File: python.info,  Node: Classes Públicas,  Next: Explicação<2>,  Prev: métodos do TurtleScreen/Screen e as funções correspondentes,  Up: turtle — Gráficos tartaruga

5.25.10.39 Classes Públicas
...........................

 -- Classe: turtle.RawTurtle (canvas)
 -- Classe: turtle.RawPen (canvas)


     Parâmetros: ‘canvas’ – um ‘tkinter.Canvas’, um *note
     ScrolledCanvas: 4176. ou um *note TurtleScreen: 4166.

     Cria uma tartaruga.  A tartaruga tem todos os métodos descritos
     acima como “métodos de Turtle/RawTurtle”.

 -- Classe: turtle.Turtle

     Subclasse do RawTurtle, tem a mesma interface, mas desenha em um
     objeto padrão *note Screen: 40e9, que é criado automaticamente,
     quando necessário, pela primeira vez.

 -- Classe: turtle.TurtleScreen (cv)


     Parâmetros: ‘cv’ – uma ‘tkinter.Canvas’

     Fornece métodos orientado para a tela, como *note bgcolor(): 4139.
     etc., que são descritos acima.

 -- Classe: turtle.Screen

     Subclasse do TurtleScreen, com *note quatro métodos adicionados:
     4172.

 -- Classe: turtle.ScrolledCanvas (master)


     Parâmetros: ‘master’ – algum widget do Tkinter para conter o
     ScrolledCanvas.  Exemplo: um Tkinter-canvas com barras de rolagem
     adicionadas

     Usado pela classe Screen, que, portanto, fornece automaticamente um
     ScrolledCanvas como playground para as tartarugas.

 -- Classe: turtle.Shape (type_, data)


     Parâmetros: ‘type_’ – uma das strings “polygon”, “image”,
     “compound”

     Estrutura de dados para modelar a forma.  O par ‘(type_, data)’
     deve seguir essa especificação:

     'type_'         'data'
                     
     -------------------------------------------------------------------------------
                     
     “polygon”       Uma tupla com o par de coordenadas do polígono
                     
                     
     “image”         uma imagem (nesse formato, usada apenas internamente!)
                     
                     
     “compound”      ‘None’ (uma forma composta deve ser construída usando o
                     método *note addcomponent(): 416a.)
                     

      -- Método: addcomponent (poly, fill, outline=None)


          Parâmetros:

             * ‘poly’ – um polígono, ou seja, um tupla de pares de
               números

             * ‘fill’ – uma cor com a qual o 'poly' será preenchido

             * ‘outline’ – uma cor para o contorno do polígono (se
               fornecido)

          Exemplo:

               >>> poly = ((0,0),(10,-5),(0,10),(-10,-5))
               >>> s = Shape("compound")
               >>> s.addcomponent(poly, "red", "blue")
               >>> # ... adicione mais componentes e então use register_shape()

          Veja *note Formas compostas: 4168.

 -- Classe: turtle.Vec2D (x, y)

     Uma classe de vetor bidimensional, usada como classe auxiliar para
     implementar gráficos de tartaruga.  Pode ser útil também para
     programas de gráficos de tartaruga.  Derivado de uma tupla,
     portanto, um vetor é um tupla!

     Fornece (para vetores 'a', 'b', número 'k'):

        * ‘a + b’ vetor adicional

        * ‘a - b’ subtração de vetor

        * ‘a * b’ produto interno

        * ‘k * a’ e ‘a * k’ multiplicação com escalar

        * ‘abs(a)’ valor absoluto de um

        * rotação ‘a.rotate(angle)’


File: python.info,  Node: Explicação<2>,  Next: Ajuda e Configuração,  Prev: Classes Públicas,  Up: turtle — Gráficos tartaruga

5.25.10.40 Explicação
.....................

Um objeto tartaruga é baseado em um objeto canvas, e há uma série de
classes principais na interface orientada a objetos da tartaruga que
podem ser usadas para criá-los e relacioná-los entre si.

Uma instância da classe *note Turtle: 4177. cria automaticamente uma
nova instância de *note Screen: 40e9, caso esta não esteja presente.

‘Turtle’ é um subclasse de *note RawTurtle: 4174, que 'não' cria
automaticamente uma superfície de desenho - uma 'tela' precisará ser
fornecida ou criada para ele.  A 'tela' pode ser uma ‘tkinter.Canvas’,
*note ScrolledCanvas: 4176. ou *note TurtleScreen: 4166.

*note TurtleScreen: 4166. é a superfície de desenho básica para uma
tartaruga.  *note Screen: 40e9. é uma subclasse de ‘TurtleScreen’ e
inclui *note alguns métodos adicionais: 4172. para gerenciar sua
aparência (incluindo tamanho e título) e comportamento.  O construtor
‘TurtleScreen’ precisa de um ‘tkinter.Canvas’ ou um *note
ScrolledCanvas: 4176. como um argumento.

A interface funcional para gráficos de tartaruga usa os vários métodos
de ‘Turtle’ e ‘TurtleScreen’/‘Screen’.  Nos bastidores, um objeto de
tela é criado automaticamente sempre que um função derivada de um método
de ‘Screen’ é chamado.  Da mesma forma, um objeto de tartaruga é criado
automaticamente sempre que qualquer uma das funções derivadas de um
método de tartaruga é chamado.

Para usar várias tartarugas em uma tela, a interface orientada a objetos
deve ser usada.


File: python.info,  Node: Ajuda e Configuração,  Next: turtledemo — Scripts de Demonstração,  Prev: Explicação<2>,  Up: turtle — Gráficos tartaruga

5.25.10.41 Ajuda e Configuração
...............................

* Menu:

* Como usar a Ajuda::
* Tradução de docstrings em diferentes idiomas::
* Como configurar Screen and Turtles::


File: python.info,  Node: Como usar a Ajuda,  Next: Tradução de docstrings em diferentes idiomas,  Up: Ajuda e Configuração

5.25.10.42 Como usar a Ajuda
............................

Os métodos públicos das classes Screen e Turtle estão amplamente
documentado por meio de docstrings.  Eles podem ser usados como ajuda
on-line por meio dos recursos de ajuda do Python:

   - Ao usar o IDLE, as dicas de ferramentas mostram as assinaturas e as
     primeiras linhas das docstrings das chamadas de função/método
     digitadas.

   - Chamar *note help(): 8dd. em métodos ou funções exibe o seguinte
     docstring:

          >>> help(Screen.bgcolor)
          Help on method bgcolor in module turtle:

          bgcolor(self, *args) unbound turtle.Screen method
              Set or return backgroundcolor of the TurtleScreen.

              Arguments (if given): a color string or three numbers
              in the range 0..colormode or a 3-tuple of such numbers.


              >>> screen.bgcolor("orange")
              >>> screen.bgcolor()
              "orange"
              >>> screen.bgcolor(0.5,0,0.5)
              >>> screen.bgcolor()
              "#800080"

          >>> help(Turtle.penup)
          Help on method penup in module turtle:

          penup(self) unbound turtle.Turtle method
              Pull the pen up -- no drawing when moving.

              Aliases: penup | pu | up

              No argument

              >>> turtle.penup()

   - Os docstrings de funções que são derivados do métodos têm um
     formato diferente:

          >>> help(bgcolor)
          Help on function bgcolor in module turtle:

          bgcolor(*args)
              Set or return backgroundcolor of the TurtleScreen.

              Arguments (if given): a color string or three numbers
              in the range 0..colormode or a 3-tuple of such numbers.

              Example::

                >>> bgcolor("orange")
                >>> bgcolor()
                "orange"
                >>> bgcolor(0.5,0,0.5)
                >>> bgcolor()
                "#800080"

          >>> help(penup)
          Help on function penup in module turtle:

          penup()
              Pull the pen up -- no drawing when moving.

              Aliases: penup | pu | up

              No argument

              Example:
              >>> penup()

Esses docstrings modificados são criados automaticamente junto com as
definições de função que são derivadas de métodos ao importar.


File: python.info,  Node: Tradução de docstrings em diferentes idiomas,  Next: Como configurar Screen and Turtles,  Prev: Como usar a Ajuda,  Up: Ajuda e Configuração

5.25.10.43 Tradução de docstrings em diferentes idiomas
.......................................................

Há um utilitário para criar a dicionário cujas chaves são os nomes de
método e cujos valores são os docstrings dos métodos públicos das
classes Screen e Turtle.

 -- Função: turtle.write_docstringdict (filename='turtle_docstringdict')


     Parâmetros: ‘filename’ – uma string, usado como nome de arquivo

     Cria e escreve um dicionário de docstring em um script Python com o
     nome de arquivo fornecido.  Esta função deve ser chamada
     explicitamente (ela não é usada pelas classes gráficas da
     tartaruga).  O dicionário docstring será gravado no script Python
     ‘`filename'.py’.  O objetivo é servir como modelo para traduzir os
     documentos para diferentes idiomas.

Se você (ou seus alunos) quiserem usar o *note turtle: 101. com a ajuda
on-line em seu idioma nativo, será necessário traduzir os docstrings e
salvar o arquivo resultante como, por exemplo,
‘turtle_docstringdict_german.py’.

Se você tiver uma entrada específica em seu arquivo ‘turtle.cfg’, esse
dicionário será lido no momento do importar e substituirá as
documentações originais em inglês.

No momento da redação deste texto, há docstring dicionários em alemão e
italiano.  (Pedidos devem ser enviados para <glingl@aon.at>.)


File: python.info,  Node: Como configurar Screen and Turtles,  Prev: Tradução de docstrings em diferentes idiomas,  Up: Ajuda e Configuração

5.25.10.44 Como configurar Screen and Turtles
.............................................

A configuração padrão integrada imita a aparência e o comportamento do
antigo módulo Turtle para manter a melhor compatibilidade possível com
ele.

Se quiser usar uma configuração diferente que reflita melhor o recurso
deste módulo ou que se adapte melhor às suas necessidades, por exemplo,
para uso em uma sala de aula, você pode criar um arquivo de configuração
‘turtle.cfg’ que será lido no momento de importar e modifica a
configuração de acordo com suas definições.

A configuração que definida no arquivo ‘turtle.cfg’:

     width = 0.5
     height = 0.75
     leftright = None
     topbottom = None
     canvwidth = 400
     canvheight = 300
     mode = standard
     colormode = 1.0
     delay = 10
     undobuffersize = 1000
     shape = classic
     pencolor = black
     fillcolor = black
     resizemode = noresize
     visible = True
     language = english
     exampleturtle = turtle
     examplescreen = screen
     title = Python Turtle Graphics
     using_IDLE = False

Breve explicação das entradas selecionadas:

   - As quatro primeiras linhas correspondem aos argumentos do método
     *note Screen.setup: 4155.

   - As linhas 5 e 6 correspondem a argumento do método *note
     Screen.screensize: 413d.

   - 'shape' pode ser qualquer uma das formas pré-definidas, como por
     exemplo: seta, tartaruga, etc.  Para obter mais informações,
     consulte ‘help(shape)’.

   - Se você não quiser usar nenhuma cor de preenchimento (ou seja,
     tornar a tartaruga transparente), você deve usar ‘fillcolor = ""’
     (todas as strings não vazias não devem ter aspas no arquivo cfg).

   - Se você quiser refletir o estado da tartaruga, você deve usar
     ‘resizemode = auto’.

   - Se você definir, por exemplo, ‘language = italian’, o docstringdict
     ‘turtle_docstringdict_italian.py’ será carregado ao importar (se
     estiver presente no caminho de importação, por exemplo, no mesmo
     diretório que *note turtle: 101.).

   - As entradas 'exampleturtle' e 'examplescreen' definem os nomes
     desses objetos conforme ocorrem nas docstrings.  A transformação de
     “método-docstrings” para “função-docstrings” excluirá esses nomes
     dos docstrings.

   - 'using_IDLE': Defina isso como ‘True’ se você trabalha regularmente
     com IDLE e sua chave ‘-n’ (“sem subprocesso”).  Isso impedirá que o
     *note exitonclick(): 4154. entre no loop principal.

Pode haver um arquivo ‘turtle.cfg’ no diretório em que o *note turtle:
101. está armazenado e um arquivo adicional no diretório de trabalho
atual.  O arquivo armazenado no diretório de trabalho atual tem
preferência e vai substituir as configurações do primeiro.

O diretório ‘Lib/turtledemo’ contém um arquivo chamado ‘turtle.cfg’.
Você pode usá-lo como um exemplo e ver seus efeitos ao executar as
demonstrações (de preferência, não utilize visualizador de
demonstrações).


File: python.info,  Node: turtledemo — Scripts de Demonstração,  Next: Modificações desde a versão do Python 2 6,  Prev: Ajuda e Configuração,  Up: turtle — Gráficos tartaruga

5.25.10.45 ‘turtledemo’ — Scripts de Demonstração
.................................................

O pacote *note turtledemo: 102. inclui um conjunto de scripts de
demonstração.  Esses scripts podem ser executados e visualizados usando
o visualizador de demonstração fornecido da seguinte forma:

     python -m turtledemo

Como alternativa, você pode executar os scripts de demonstração
individualmente.  Por exemplo,

     python -m turtledemo.bytedesign

O diretório do pacote *note turtledemo: 102. contém:

   - Um arquivo de exemplo ‘__main__.py’ que pode ser usado para
     visualizar o código-fonte dos scripts e executá-los ao mesmo tempo.

   - Vários scripts que demonstram diferentes recursos do módulo *note
     turtle: 101.  Os exemplos podem ser acessados no menu Exemplos.
     Eles também podem ser executados de forma isolada.

   - Um arquivo ‘turtle.cfg’ que serve como exemplo de como escrever e
     usar esse tipo de arquivos.

Os scripts de demonstração são:

Nome                         Descrição                          Recursos
                                                                
-----------------------------------------------------------------------------------------------------------
                                                                
‘bytedesign’                 Padrão de gráficos de tartaruga    *note tracer(): 4140,
                             clássico complexo                  *note delay(): 413f,
                                                                *note update(): 4141.
                                                                
                                                                
‘chaos’                      gráficos do modelo de Verhulst,    coordenadas mundiais
                             mostram que os cálculos do         
                             computador podem gerar
                             resultados às vezes contra as
                             expectativas do bom senso
                             
                                                                
‘clock’                      Relógio analógico que mostra o     tartarugas como ponteiros de relógio,
                             horário do seu computador          *note ontimer(): 4147.
                                                                
                                                                
‘colormixer’                 experimento com r, g, b            *note ondrag(): 412e.
                                                                
                                                                
‘forest’                     3 breadth-first trees              randomização
                                                                
                                                                
‘fractalcurves’              Curvas de Hilbert & Koch           recursão
                                                                
                                                                
‘lindenmayer’                ethnomathematics (indian kolams)   L-System
                                                                
                                                                
‘minimal_hanoi’              Torres de Hanoi                    Tartarugas retângulos como discos de
                                                                Hanói (*note shape(): 4124,
                                                                *note shapesize(): 4126.)
                                                                
                                                                
‘nim’                        jogue o clássico jogo nim com      tartarugas como gravetos, acionadas por
                             três montes de gravetos contra o   eventos (mouse, teclado)
                             computador.                        
                             
                                                                
‘paint’                      programa de desenho super          *note onclick(): 412c.
                             minimalista                        
                             
                                                                
‘peace’                      elementar                          tartaruga: aparência e animação
                                                                
                                                                
‘penrose’                    ladrilhos irregulares com pipas    *note stamp(): 40fe.
                             e dardos                           
                             
                                                                
‘planet_and_moon’            simulação de um sistema            formas compostas, *note Vec2D: 4159.
                             gravitacional                      
                             
                                                                
‘rosette’                    um padrão do artigo Wikipédia      *note clone(): 4132, *note undo(): 4101.
                             sobre gráficos de tartaruga        
                             
                                                                
‘round_dance’                tartarugas dançantes girando em    formas compostas, *note clone(): 4132.
                             pares na direção oposta            *note shapesize(): 4126,
                                                                *note tilt(): 4129,
                                                                *note get_shapepoly(): 412b,
                                                                *note update(): 4141.
                                                                
                                                                
‘sorting_animate’            demonstração visual de             alinhamento simples, randomização
                             diferentes tipos de métodos de     
                             ordenação
                             
                                                                
‘tree’                       uma árvore (gráfica) da largura    *note clone(): 4132.
                             inicial (usando geradores)         
                             
                                                                
‘two_canvases’               desenho simples                    tartarugas em duas telas
                                                                
                                                                
‘yinyang’                    outro exemplo elementar            *note circle(): 40fc.
                                                                

Divirta-se!


File: python.info,  Node: Modificações desde a versão do Python 2 6,  Next: Modificações desde a versão do Python 3 0,  Prev: turtledemo — Scripts de Demonstração,  Up: turtle — Gráficos tartaruga

5.25.10.46 Modificações desde a versão do Python 2.6
....................................................

   - O métodos *note Turtle.tracer: 4140, *note Turtle.window_width:
     4152. e *note Turtle.window_height: 4151. foram removidos.  O
     métodos com esses nomes e funcionalidades agora estão disponíveis
     apenas como métodos da classe *note Screen: 40e9.  As funções
     derivadas desses métodos continuam disponíveis.  (No Python 2.6
     esses métodos eram duplicações dos métodos correspondentes das
     classes *note TurtleScreen: 4166./*note Screen: 40e9.).

   - O método ‘Turtle.fill()’ foi eliminado.  O comportamento de *note
     begin_fill(): 411a. e *note end_fill(): 411b. foi ligeiramente
     alterado: agora, todo processo de preenchimento deve ser concluído
     com uma chamada para ‘end_fill()’.

   - Um método *note Turtle.filling: 4119. foi adicionado.  Ela retorna
     um valor booleano: ‘True’ se um processo de preenchimento estiver
     em andamento, ‘False’ caso contrário.  Esse comportamento
     corresponde a uma chamada ‘fill()’ sem argumento em Python 2.6.


File: python.info,  Node: Modificações desde a versão do Python 3 0,  Prev: Modificações desde a versão do Python 2 6,  Up: turtle — Gráficos tartaruga

5.25.10.47 Modificações desde a versão do Python 3.0
....................................................

   - Foram adicionados a class *note Turtle: 4177. os métodos *note
     shearfactor(): 4128. , *note shapetransform(): 412a. e *note
     get_shapepoly(): 412b.  Assim, o limite completo de transformações
     lineares regulares está agora disponível para transformar as formas
     de tartarugas.  O *note tiltangle(): 725. foi melhorado em termos
     de funcionalidade: agora pode ser usado para obter ou definir o
     ângulo de inclinação.

   - Na classe *note Screen: 40e9, o método *note onkeypress(): 4145.
     foi adicionado como um complemento ao *note onkey(): 4143.  Como
     esse último vincula ações ao liberar uma tecla pressionada, um
     apelido: *note onkeyrelease(): 4144. também foi adicionado a ele.

   - O método *note Screen.mainloop: 4148. foi adicionado.  Não é mais
     necessário utilizar a função *note mainloop(): 4148. quando estiver
     trabalhando com os objetos *note Screen: 40e9. e *note Turtle:
     4177.

   - Dois novos métodos para informar dados foram adicionados: *note
     Screen.textinput: 1a06. e *note Screen.numinput: 1a07.  Estes
     métodos abrem caixas de diálogo para digitação e retornam strings e
     números, respectivamente.

   - Dois scripts de exemplo ‘tdemo_nim.py’ e ‘tdemo_round_dance.py’
     foram adicionados ao diretório ‘Lib/turtledemo’.


File: python.info,  Node: Ferramentas de Desenvolvimento,  Next: Depuração e perfilamento,  Prev: Interfaces gráficas de usuário com Tk,  Up: A Biblioteca Padrão do Python

5.26 Ferramentas de Desenvolvimento
===================================

Os módulos descritos neste capítulo ajudam você a escrever softwares.
Por exemplo, o módulo *note pydoc: b5. recebe um módulo e gera
documentação com base no conteúdo do módulo.  Os módulos *note doctest:
3a. e *note unittest: 106. contêm frameworks para escrever testes
unitários que automaticamente exercitam código e verificam se a saída
esperada é produzida.

A lista de módulos descritos neste capítulo é:

* Menu:

* typing — Suporte para dicas de tipo::
* pydoc — Gerador de documentação e sistema de ajuda online::
* Modo de Desenvolvimento do Python::
* doctest — Teste exemplos interativos de Python::
* unittest — Framework de testes unitários::
* unittest.mock — mock object library: unittest mock — mock object library.
* unittest.mock — primeiros passos: unittest mock — primeiros passos.
* test — Pacote de Testes de Regressão do Python::
* test.support — Utilitários para o conjunto de teste do Python: test support — Utilitários para o conjunto de teste do Python.
* test.support.socket_helper — Utilities for socket tests: test support socket_helper — Utilities for socket tests.
* test.support.script_helper — Utilities for the Python execution tests: test support script_helper — Utilities for the Python execution tests.
* test.support.bytecode_helper — Ferramentas de suporte para testar a geração correta de bytecode: test support bytecode_helper — Ferramentas de suporte para testar a geração correta de bytecode.
* test.support.threading_helper — Utilities for threading tests: test support threading_helper — Utilities for threading tests.
* test.support.os_helper — Utilities for os tests: test support os_helper — Utilities for os tests.
* test.support.import_helper — Utilities for import tests: test support import_helper — Utilities for import tests.
* test.support.warnings_helper — Utilities for warnings tests: test support warnings_helper — Utilities for warnings tests.


File: python.info,  Node: typing — Suporte para dicas de tipo,  Next: pydoc — Gerador de documentação e sistema de ajuda online,  Up: Ferramentas de Desenvolvimento

5.26.1 ‘typing’ — Suporte para dicas de tipo
--------------------------------------------

Adicionado na versão 3.5.

'Código-fonte:' Lib/typing.py(1)

     Nota: O ambiente de execução do Python não força anotações de tipos
     de variáveis e funções.  Elas podem ser usadas por ferramentas de
     terceiros como *note verificadores de tipo: 26d, IDEs, linters,
     etc.

__________________________________________________________________

Este módulo fornece suporte em tempo de execução para dicas de tipo.

Considere a função abaixo:

     def surface_area_of_cube(edge_length: float) -> str:
         return f"A área superficial de um cubo é {6 * edge_length ** 2}."

A função ‘surface_area_of_cube’ recebe um argumento que se espera ser
uma instância de *note float: 2f7, conforme indicado pela *note dica de
tipo: 210d. ‘edge_length: float’.  Espera-se que a função retorne uma
instância de *note str: 44c, conforme indicado pela dica ‘-> str’.

Embora as dicas de tipo possam ser classes simples como *note float:
2f7. ou *note str: 44c, elas também podem ser mais complexas.  O módulo
*note typing: 104. fornece um vocabulário de dicas de tipo mais
avançadas.

Novos recursos são frequentemente adicionados ao módulo ‘typing’.  O
pacote typing_extensions(2) fornece backports desses novos recursos para
versões mais antigas do Python.

Ver também
..........

Folha de dicas sobre tipagem(3)

     Uma visão geral das dicas de tipo (hospedado por mypy docs, em
     inglês).

Seção de referência do sistema de tipos da documentação do mypy(4)

     O sistema de tipagem do Python é padronizado pelas PEPs, portanto
     esta referência deve se aplicar a maioria do verificadores de tipo
     do Python.  (Alguns trechos podem se referir especificamente ao
     mypy.  Documento em inglês).

Static Typing with Python(5)

     Documentação independente de verificador de tipo escrita pela
     comunidade, detalhando os recursos do sistema de tipo, ferramentas
     úteis de tipagem e melhores práticas.

* Menu:

* Especificação para o sistema de tipos do Python::
* Apelidos de tipo::
* NewType::
* Anotações de objetos chamáveis::
* Genéricos::
* Anotando tuplas::
* O tipo de objetos de classe::
* Anotando geradores e corrotinas::
* Tipos genéricos definidos pelo usuário::
* O tipo Any::
* Subtipagem nominal vs estrutural::
* Conteúdo do módulo: Conteúdo do módulo<7>.
* Cronograma de descontinuação dos principais recursos::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/typing.py

   (2) https://pypi.org/project/typing_extensions/

   (3) https://mypy.readthedocs.io/en/stable/cheat_sheet_py3.html

   (4) https://mypy.readthedocs.io/en/stable/index.html

   (5) https://typing.python.org/en/latest/


File: python.info,  Node: Especificação para o sistema de tipos do Python,  Next: Apelidos de tipo,  Up: typing — Suporte para dicas de tipo

5.26.1.1 Especificação para o sistema de tipos do Python
........................................................

A especificação canônica e atualizada do sistema de tipos Python pode
ser encontrada em Specification for the Python type system(1).

   ---------- Footnotes ----------

   (1) https://typing.python.org/en/latest/spec/index.html


File: python.info,  Node: Apelidos de tipo,  Next: NewType,  Prev: Especificação para o sistema de tipos do Python,  Up: typing — Suporte para dicas de tipo

5.26.1.2 Apelidos de tipo
.........................

Um apelido de tipo é definido utilizando a instrução *note type: 438,
que por sua vez cria uma instância da classe *note TypeAliasType: 455.
Neste exemplo, ‘Vector’ e ‘list[float]’ serão tratados de maneira
equivalente pelos verificadores de tipo estático:

     type Vector = list[float]

     def scale(scalar: float, vector: Vector) -> Vector:
         return [scalar * num for num in vector]

     # passa na verificação de tipos; uma lista de floats é qualificada como Vector.
     new_vector = scale(2.0, [1.0, -4.2, 5.4])

Apelidos de tipo são úteis para simplificar assinaturas de tipo
complexas.  Por exemplo:

     from collections.abc import Sequence

     type ConnectionOptions = dict[str, str]
     type Address = tuple[str, int]
     type Server = tuple[Address, ConnectionOptions]

     def broadcast_message(message: str, servers: Sequence[Server]) -> None:
         ...

     # O verificador de tipo tratará a assinatura de tipo anterior
     # como exatamente equivalente à assinatura abaixo.
     def broadcast_message(
         message: str,
         servers: Sequence[tuple[tuple[str, int], dict[str, str]]]
     ) -> None:
         ...

A instrução *note type: 438. é nova no Python 3.12.  Para manter
retrocompatibilidade, apelidos de tipo também podem ser criados usando
atribuição:

     Vector = list[float]

Ou marcado com *note TypeAlias: 7ca. para tornar explícito que se trata
de um apelido de tipo e não uma atribuição de variável comum:

     from typing import TypeAlias

     Vector: TypeAlias = list[float]


File: python.info,  Node: NewType,  Next: Anotações de objetos chamáveis,  Prev: Apelidos de tipo,  Up: typing — Suporte para dicas de tipo

5.26.1.3 NewType
................

Utilize o auxiliar *note NewType: d16. para criar tipos únicos:

     from typing import NewType

     UserId = NewType('UserId', int)
     some_id = UserId(524313)

O verificador de tipo estático tratará o novo tipo como se fosse uma
subclasse do tipo original.  Isso é útil para ajudar a encontrar erros
de lógica:

     def get_user_name(user_id: UserId) -> str:
         ...

     # passa na verificação de tipo
     user_a = get_user_name(UserId(42351))

     # falha na verificação de tipo: um int não é um UserId
     user_b = get_user_name(-1)

Você ainda pode executar todas as operações ‘int’ em uma variável do
tipo ‘UserId’, mas o resultado sempre será do tipo ‘int’.  Isso permite
que você passe um ‘UserId’ em qualquer ocasião que ‘int’ possa ser
esperado, mas previne que você acidentalmente crie um ‘UserId’ de uma
forma inválida:

     # 'output' é do tipo 'int', em vez de 'UserId'
     output = UserId(23413) + UserId(54341)

Note que essas verificações são aplicadas apenas pelo verificador de
tipo estático.  Em tempo de execução, a instrução ‘Derived =
NewType('Derived', Base)’ irá tornar ‘Derived’ um chamável que retornará
imediatamente qualquer parâmetro que você passar.  Isso significa que a
expressão ‘Derived(some_value)’ não cria uma nova classe ou introduz
sobrecarga além de uma chamada regular de função.instrução

Mais precisamente, a expressão ‘some_value is Derived(some_value)’ é
sempre verdadeira em tempo de execução.

É inválido criar um subtipo de ‘Derived’:

     from typing import NewType

     UserId = NewType('UserId', int)

     # Falha em tempo de execução e não passa na verificação de tipos
     class AdminUserId(UserId): pass

No entanto, é possível criar um *note NewType: d16. baseado em um
‘derivado’ ‘NewType’:

     from typing import NewType

     UserId = NewType('UserId', int)

     ProUserId = NewType('ProUserId', UserId)

e a verificação de tipos para ‘ProUserId’ funcionará como esperado.

Veja PEP 484(1) para mais detalhes.

     Nota: Lembre-se que o uso de um apelido de tipo declara que dois
     tipos serão 'equivalentes' entre si.  Efetuar ‘type Alias =
     Original’ fará o verificador de tipo estático tratar ‘Alias’ como
     sendo 'exatamente equivalente' a ‘Original’ em todos os casos.
     Isso é útil quando você deseja simplificar assinaturas de tipo
     complexas.

     Em contraste, ‘NewType’ declara que um tipo será 'subtipo' de
     outro.  Efetuando ‘Derived = NewType('Derived', Original)’ irá
     fazer o verificador de tipo estático tratar ‘Derived’ como uma
     'subclasse' de ‘Original’, o que significa que um valor do tipo
     ‘Original’ não pode ser utilizado onde um valor do tipo ‘Derived’ é
     esperado.  Isso é útil quando você deseja evitar erros de lógica
     com custo mínimo de tempo de execução.

Adicionado na versão 3.5.2.

Alterado na versão 3.10: ‘NewType’ agora é uma classe em vez de uma
função.  Consequentemente, existem alguns custos em tempo de execução ao
chamar ‘NewType’ em vez de uma função comum.

Alterado na versão 3.11: O desempenho de chamar ‘NewType’ voltou ao
mesmo nível da versão Python 3.9.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/


File: python.info,  Node: Anotações de objetos chamáveis,  Next: Genéricos,  Prev: NewType,  Up: typing — Suporte para dicas de tipo

5.26.1.4 Anotações de objetos chamáveis
.......................................

Funções – ou outros objetos *note chamáveis: 2aaf. – podem ser anotados
com *note collections.abc.Callable: 7ec. ou com o tipo descontinuado
*note typing.Callable: 7c6.  ‘Callable[[int], str]’ expressa uma função
que recebe um único parâmetro de tipo *note int: 257. e retorna uma
*note str: 44c.

Por exemplo:

     from collections.abc import Callable, Awaitable

     def feeder(get_next_item: Callable[[], str]) -> None:
         ...  # Corpo

     def async_query(on_success: Callable[[int], None],
                     on_error: Callable[[int, Exception], None]) -> None:
         ...  # Corpo

     async def on_update(value: str) -> None:
         ...  # Corpo

     callback: Callable[[str], Awaitable[None]] = on_update

A sintaxe de subscrição deve sempre ser usada com exatamente dois
valores: a lista de argumentos e o tipo de retorno.  A lista de
argumentos deve ser uma lista de tipos, uma *note ParamSpec: 15e, *note
Concatenate: 7c5. ou reticências (‘...’).  O tipo de retorno deve ser um
tipo único.

Se uma reticências literal ‘...’ é passada no lugar de uma lista de
argumentos, ela indica que um chamável com uma lista de qualquer
parâmetro arbitrário seria aceita.

     def concat(x: str, y: str) -> str:
         return x + y

     x: Callable[..., str]
     x = str     # OK
     x = concat  # OK também

‘Callable’ não pode representar assinaturas complexas, como funções que
aceitam um número variado de argumentos, *note funções sobrecarregadas:
418d, or funções que recebem apenas parâmetros somente-nomeados.  No
entanto, essas assinaturas podem ser expressas ao se definir uma *note
Protocol: 264. com um método *note __call__(): 558.:

     from collections.abc import Iterable
     from typing import Protocol

     class Combiner(Protocol):
         def __call__(self, *vals: bytes, maxlen: int | None = None) -> list[bytes]: ...

     def batch_proc(data: Iterable[bytes], cb_results: Combiner) -> bytes:
         for item in data:
             ...

     def good_cb(*vals: bytes, maxlen: int | None = None) -> list[bytes]:
         ...
     def bad_cb(*vals: bytes, maxitems: int | None) -> list[bytes]:
         ...

     batch_proc([], good_cb)  # OK
     batch_proc([], bad_cb)   # Erro! Argumento 2 tem tipo incompatível por ter
                              # nome e tipo diferente do callback

Chamáveis que recebem outros chamáveis como argumentos podem indicar que
seus tipos de parâmetro dependem uns dos outros usando *note ParamSpec:
15e.  Além disso, se esse chamável adiciona ou remove argumentos de
outros chamáveis, o operador *note Concatenate: 7c5. pode ser usado.
Eles assumem a forma de ‘Callable[ParamSpecVariable, ReturnType]’ e
‘Callable[Concatenate[Arg1Type, Arg2Type, ..., ParamSpecVariable],
ReturnType]’, respectivamente.

Alterado na versão 3.10: ‘Callable’ agora oferece suporte a *note
ParamSpec: 15e. e *note Concatenate: 7c5.  Veja PEP 612(1) para mais
detalhes.

Ver também
..........

A documentação para *note ParamSpec: 15e. e *note Concatenate: 7c5.
contém exemplos de uso em ‘Callable’.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0612/


File: python.info,  Node: Genéricos,  Next: Anotando tuplas,  Prev: Anotações de objetos chamáveis,  Up: typing — Suporte para dicas de tipo

5.26.1.5 Genéricos
..................

Como a informação de tipo sobre objetos mantidos em contêineres não pode
ser inferida estaticamente de uma maneira genérica, muitas classes de
contêineres na biblioteca padrão permitem usar subscrição para denotar o
tipo esperado dos elementos dos contêineres.

     from collections.abc import Mapping, Sequence

     class Employee: ...

     # Sequence[Employee] indica que todos os elementos na sequência
     # devem ser instâncias de "Employee".
     # Mapping[str, str] indica que todas as chaves e valores no mapeamento
     # devem ser strings.
     def notify_by_email(employees: Sequence[Employee],
                         overrides: Mapping[str, str]) -> None: ...

Funções e classes genéricas podem ser parametrizadas utilizando a *note
sintaxe de parâmetro de tipos: 2b3.:

     from collections.abc import Sequence

     def first[T](l: Sequence[T]) -> T:  # Função é genérica sobre TypeVar "T"
         return l[0]

Ou utilizando a fábrica *note TypeVar: 15d. diretamente:

     from collections.abc import Sequence
     from typing import TypeVar

     U = TypeVar('U')                  # Declara tipo variável "U"

     def second(l: Sequence[U]) -> U:  # Função é genérica sobre a TypeVar "U"
         return l[1]

Alterado na versão 3.12: O suporte sintático para genéricos é novo no
Python 3.12.


File: python.info,  Node: Anotando tuplas,  Next: O tipo de objetos de classe,  Prev: Genéricos,  Up: typing — Suporte para dicas de tipo

5.26.1.6 Anotando tuplas
........................

Para a maior parte dos tipos contêineres em Python, o sistema de tipagem
presume que todos os elementos do contêiner são do mesmo tipo.  Por
exemplo:

     from collections.abc import Mapping

     # Verificador de tipos irá inferir que todos os elementos em ``x`` devem ser ints
     x: list[int] = []

     # Erro no verificador: ``list`` aceita um único tipo de argumento
     y: list[int, str] = [1, 'foo']

     # Verificador de tipos irá inferir que todas as chaves em ``z`` devem ser strings,
     # e todos os valores em ``z`` devem ser strings ou ints
     z: Mapping[str, str | int] = {}

*note list: 611. aceita apenas um tipo de argumento, e assim o
verificador de tipos emitirá um erro na atribuição ‘y’ acima.  Da mesma
forma, *note Mapping: 8d0. aceita apenas dois tipos de argumento: O
primeiro indica o tipo das chaves, e o segundo indica o tipo dos
valores.

Ao contrário da maioria dos outros contêineres Python, é comum no código
Python idiomático que as tuplas tenham elementos que não sejam todos do
mesmo tipo.  Por esse motivo, as tuplas têm um caso especial no sistema
de tipagem do Python.  *note tuple: 370. aceita 'qualquer quantidade' de
argumentos de tipo:

     # OK: ``x`` foi atribuída a uma tupla de comprimento 1, onde o único elemento é um int
     x: tuple[int] = (5,)

     # OK: ``y`` foi atribuída a uma tupla de comprimento 2;
     # o elemento 1 é um int, o elemento 2 é uma str
     y: tuple[int, str] = (5, "foo")

     # Erro: a anotação de tipo indica uma tupla de comprimento 1,
     # mas ``z`` foi atribuída a uma tupla de comprimento 3
     z: tuple[int] = (1, 2, 3)

Para denotar uma tupla que pode ter 'qualquer' comprimento e na qual
todos os elementos são do mesmo tipo ‘T’, use a literal de reticências
‘...’: ‘tuple[T, ...]’.  Para denotar uma tupla vazia, use ‘tuple[()]’.
Usar ‘tuple’ simples como anotação equivale a usar ‘tuple[Any, ...]’:

     x: tuple[int, ...] = (1, 2)
     # Essas reatribuições são OK: ``tuple[int, ...]`` indica que x pode ter qualquer comprimento
     x = (1, 2, 3)
     x = ()
     # Essa reatribuição é um erro: todos os elementos de ``x`` devem ser ints
     x = ("foo", "bar")

     # ``y`` só pode ser atribuída a uma tupla vazia
     y: tuple[()] = ()

     z: tuple = ("foo", "bar")
     # Essas reatribuições são OK: o tipo ``tuple`` equivale a ``tuple[Any, ...]``
     z = (1, 2, 3)
     z = ()


File: python.info,  Node: O tipo de objetos de classe,  Next: Anotando geradores e corrotinas,  Prev: Anotando tuplas,  Up: typing — Suporte para dicas de tipo

5.26.1.7 O tipo de objetos de classe
....................................

Uma variável anotada com ‘C’ pode aceitar um valor de tipo ‘C’.  Por
outro lado, uma variável anotada com ‘type[C]’ (ou o tipo descontinuado
*note typing.Type[C]: 4192.) pode aceitar valores que são as próprias
classes – mais especificamente, ela aceitará o 'objeto classe' de ‘C’.
Por exemplo:

     a = 3         # Tem tipo ``int``
     b = int       # Tem tipo ``type[int]``
     c = type(a)   # Também tem tipo ``type[int]``

Observe que ‘type[C]’ é covariante:

     class User: ...
     class ProUser(User): ...
     class TeamUser(User): ...

     def make_new_user(user_class: type[User]) -> User:
         # ...
         return user_class()

     make_new_user(User)      # OK
     make_new_user(ProUser)   # Também OK: ``type[ProUser]`` é subtipo de ``type[User]``
     make_new_user(TeamUser)  # Tudo bem
     make_new_user(User())    # Erro: esperava-se ``type[User]`` mas retornou ``User``
     make_new_user(int)       # Erro: ``type[int]`` não é subtipo de ``type[User]``

Os únicos parâmetros válidos para *note type: d6b. são classes, *note
Any: 6ac, *note type variables: 210b. e uniões de qualquer um desses
tipos.  Por exemplo:

     def new_non_team_user(user_class: type[BasicUser | ProUser]): ...

     new_non_team_user(BasicUser)  # OK
     new_non_team_user(ProUser)    # OK
     new_non_team_user(TeamUser)   # Erro: ``type[TeamUser]`` não é subtipo
                                   # de ``type[BasicUser | ProUser]``
     new_non_team_user(User)       # Também é um erro

‘type[Any]’ é equivalente a *note type: d6b, que é a raiz da *note
hierarquia de metaclasses: 2100. do Python.


File: python.info,  Node: Anotando geradores e corrotinas,  Next: Tipos genéricos definidos pelo usuário,  Prev: O tipo de objetos de classe,  Up: typing — Suporte para dicas de tipo

5.26.1.8 Anotando geradores e corrotinas
........................................

Um gerador pode ser anotado usando um tipo genérico *note
Generator[YieldType, SendType, ReturnType]: e05.  Por exemplo:

     def echo_round() -> Generator[int, float, str]:
         sent = yield 0
         while sent >= 0:
             sent = yield round(sent)
         return 'Done'

Note que, diferentemente de outras classes genéricas na biblioteca
padrão, o ‘SendType’ da classe *note Generator: e05. se comporta
contravariantemente, em vez de covariantemente ou invariantemente.

Os parâmetros ‘SendType’ e ‘ReturnType’ são ‘None’ por padrão:

     def infinite_stream(start: int) -> Generator[int]:
         while True:
             yield start
             start += 1

Também é possível definir esses tipos explicitamente:

     def infinite_stream(start: int) -> Generator[int, None, None]:
         while True:
             yield start
             start += 1

Geradores simples que só produzem valores também podem ser anotados com
tipo de retorno *note Iterable[YieldType]: 23e2. ou *note
Iterator[YieldType]: 23e3.:

     def infinite_stream(start: int) -> Iterator[int]:
         while True:
             yield start
             start += 1

Geradores assíncronos são manipulados similarmente, mas não espere um
argumento de tipo ‘ReturnType’ (*note AsyncGenerator[YieldType,
SendType]: ca8.).  O argumento ‘SendType’ é ‘None’ por padrão, então as
seguintes definições são equivalentes:

     async def infinite_stream(start: int) -> AsyncGenerator[int]:
         while True:
             yield start
             start = await increment(start)

     async def infinite_stream(start: int) -> AsyncGenerator[int, None]:
         while True:
             yield start
             start = await increment(start)

Como no caso síncrono, *note AsyncIterable[YieldType]: e09. e *note
AsyncIterator[YieldType]: e08. também estão disponíveis:

     async def infinite_stream(start: int) -> AsyncIterator[int]:
         while True:
             yield start
             start = await increment(start)

Corrotinas podem ser anotadas usando *note Coroutine[YieldType,
SendType, ReturnType]: e07.  Argumentos genéricos correspondem àqueles
da classe *note Generator: e05, por exemplo:

     from collections.abc import Coroutine
     c: Coroutine[list[str], str, int]  # Uma corrotina defina em outro lugar
     x = c.send('hi')                   # Tipo inferido de 'x' é list[str]
     async def bar() -> None:
         y = await c                    # Tipo inferido de 'y' é int


File: python.info,  Node: Tipos genéricos definidos pelo usuário,  Next: O tipo Any,  Prev: Anotando geradores e corrotinas,  Up: typing — Suporte para dicas de tipo

5.26.1.9 Tipos genéricos definidos pelo usuário
...............................................

Uma classe definida pelo usuário pode ser definida como uma classe
genérica.

     from logging import Logger

     class LoggedVar[T]:
         def __init__(self, value: T, name: str, logger: Logger) -> None:
             self.name = name
             self.logger = logger
             self.value = value

         def set(self, new: T) -> None:
             self.log('Set ' + repr(self.value))
             self.value = new

         def get(self) -> T:
             self.log('Get ' + repr(self.value))
             return self.value

         def log(self, message: str) -> None:
             self.logger.info('%s: %s', self.name, message)

Esta sintaxe indica que o classe ‘LoggedVar’ é parametrizada em torno de
uma única *note type variable: 4195. ‘T’.  Isso também torna ‘T’ válido
como um tipo dentro do corpo da classe.

Classes genéricas implicitamente herdar de *note Generic: 15d7.  Para
compatibilidade com Python 3.11 e versões inferiores, também é possível
herdar explicitamente de *note Generic: 15d7. para indicar uma classe
genérica:

     from typing import TypeVar, Generic

     T = TypeVar('T')

     class LoggedVar(Generic[T]):
         ...

Classes genéricas têm métodos *note __class_getitem__(): 73b, o que
significa que podem ser parametrizadas em tempo de execução (por
exemplo, ‘LoggedVar[int]’ abaixo):

     from collections.abc import Iterable

     def zero_all_vars(vars: Iterable[LoggedVar[int]]) -> None:
         for var in vars:
             var.set(0)

Um tipo genérico pode ter qualquer número de tipos de variáveis.  Todas
as variedades de *note TypeVar: 15d. são permitidas como parâmetros para
um tipo genérico:

     from typing import TypeVar, Generic, Sequence

     class WeirdTrio[T, B: Sequence[bytes], S: (int, str)]:
         ...

     OldT = TypeVar('OldT', contravariant=True)
     OldB = TypeVar('OldB', bound=Sequence[bytes], covariant=True)
     OldS = TypeVar('OldS', int, str)

     class OldWeirdTrio(Generic[OldT, OldB, OldS]):
         ...

Cada tipo dos argumentos para *note Generic: 15d7. devem ser distintos.
Assim, os seguintes exemplos são inválidos:

     from typing import TypeVar, Generic
     ...

     class Pair[M, M]:  # SyntaxError
         ...

     T = TypeVar('T')

     class Pair(Generic[T, T]):   # INVÁLIDO
         ...

Classes genéricas podem também herdar de outras classes:

     from collections.abc import Sized

     class LinkedList[T](Sized):
         ...

Ao herdar das classes genérico, alguns tipos podem ser fixos:

     from collections.abc import Mapping

     class MyDict[T](Mapping[str, T]):
         ...

Neste caso ‘MyDict’ possui um único parâmetro, ‘T’.

O uso de uma classe genérica sem especificar tipos pressupõe *note Any:
6ac. para cada posição.  No exemplo a seguir, ‘MyIterable’ não é
genérico, mas herda implicitamente de ‘Iterable[Any]’:

     from collections.abc import Iterable

     class MyIterable(Iterable): # Igual a Iterable[Any]
         ...

Também há suporte para tipos genéricos definidos pelo usuário.
Exemplos:

     from collections.abc import Iterable

     type Response[S] = Iterable[S] | int

     # Tipo de retorno aqui é igual a Iterable[str] | int
     def response(query: str) -> Response[str]:
         ...

     type Vec[T] = Iterable[tuple[T, T]]

     def inproduct[T: (int, float, complex)](v: Vec[T]) -> T: # Igual a Iterable[tuple[T, T]]
         return sum(x*y for x, y in v)

Para manter retrocompatibilidade, os apelidos de tipos genéricos também
podem ser criados usando atribuição:

     from collections.abc import Iterable
     from typing import TypeVar

     S = TypeVar("S")
     Response = Iterable[S] | int

Alterado na versão 3.7: *note Generic: 15d7. não possui mais uma
metaclasse personalizada.

Alterado na versão 3.12: Suporte sintático para apelidos de tipo e
genéricos é novo na versão 3.12.  Anteriormente, as classes genéricas
precisavam explicitamente herdar de *note Generic: 15d7. ou conter um
tipo de variável em uma de suas bases.

Genéricos definidos pelo usuário para expressões de parâmetros também
oferecem suporte por meio de variáveis de especificação de parâmetros no
formato ‘[**P]’.  O comportamento é consistente com as variáveis de tipo
descritas acima, pois as variáveis de especificação de parâmetro são
tratadas pelo módulo ‘typing’ como uma variável de tipo especializada.
A única exceção a isso é que uma lista de tipos pode ser usada para
substituir um *note ParamSpec: 15e.:

     >>> class Z[T, **P]: ...  # T é um TypeVar; P é um ParamSpec
     ...
     >>> Z[int, [dict, float]]
     __main__.Z[int, [dict, float]]

Classes genéricas sobre um *note ParamSpec: 15e. também podem ser
criadas usando herança explícita de *note Generic: 15d7.  Neste caso,
‘**’ não é usado:

     from typing import ParamSpec, Generic

     P = ParamSpec('P')

     class Z(Generic[P]):
         ...

Outra diferença entre *note TypeVar: 15d. e *note ParamSpec: 15e. é que
um genérico com apenas uma variável de especificação de parâmetro
aceitará listas de parâmetros nos formatos ‘X[[Type1, Type2, ...]]’ e
também ‘X[Type1, Type2, ...]’ por razões estéticas.  Internamente, o
último é convertido no primeiro, portanto são equivalentes:

     >>> class X[**P]: ...
     ...
     >>> X[int, str]
     __main__.X[[int, str]]
     >>> X[[int, str]]
     __main__.X[[int, str]]

Observe que genéricos com *note ParamSpec: 15e. podem não ter
‘__parameters__’ corretos após a substituição em alguns casos porque
eles são destinados principalmente à verificação de tipo estático.

Alterado na versão 3.10: *note Generic: 15d7. agora pode ser
parametrizado através de expressões de parâmetros.  Veja *note
ParamSpec: 15e. e PEP 612(1) para mais detalhes.

Uma classe genérica definida pelo usuário pode ter ABCs como classes
base sem conflito de metaclasse.  Não há suporte a metaclasses
genéricas.  O resultado da parametrização de genéricos é armazenado em
cache, e a maioria dos tipos no módulo ‘typing’ são *note hasheáveis:
610. e comparáveis em termos de igualdade.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0612/


File: python.info,  Node: O tipo Any,  Next: Subtipagem nominal vs estrutural,  Prev: Tipos genéricos definidos pelo usuário,  Up: typing — Suporte para dicas de tipo

5.26.1.10 O tipo ‘Any’
......................

Um tipo especial de tipo é *note Any: 6ac.  Um verificador de tipo
estático tratará cada tipo como sendo compatível com *note Any: 6ac. e
*note Any: 6ac. como sendo compatível com todos os tipos.

Isso significa que é possível realizar qualquer operação ou chamada de
método sobre um valor do tipo *note Any: 6ac. e atribuí-lo a qualquer
variável:

     from typing import Any

     a: Any = None
     a = []          # OK
     a = 2           # OK

     s: str = ''
     s = a           # OK

     def foo(item: Any) -> int:
         # Passa na verificação de tipos; 'item' pode ser qualquer tipo,
         # e esse tipo pode ter um método 'bar'
         item.bar()
         ...

Observe que nenhuma verificação de tipo é realizada ao atribuir um valor
do tipo *note Any: 6ac. a um tipo mais preciso.  Por exemplo, o
verificador de tipo estático não relatou um erro ao atribuir ‘a’ a ‘s’
mesmo que ‘s’ tenha sido declarado como sendo do tipo *note str: 44c. e
receba um valor *note int: 257. em tempo de execução!

Além disso, todas as funções sem um tipo de retorno ou tipos de
parâmetro terão como padrão implicitamente o uso de *note Any: 6ac.:

     def legacy_parser(text):
         ...
         return data

     # Um verificador de tipo estático tratará a função acima
     # como tendo a mesma assinatura da função abaixo:
     def legacy_parser(text: Any) -> Any:
         ...
         return data

Este comportamento permite que *note Any: 6ac. seja usado como uma
'saída de emergência' quando você precisar misturar código tipado
dinamicamente e estaticamente.

Compare o comportamento de *note Any: 6ac. com o comportamento de *note
object: a96.  Semelhante a *note Any: 6ac, todo tipo é um subtipo de
*note object: a96.  No entanto, ao contrário de *note Any: 6ac, o
inverso não é verdadeiro: *note object: a96. 'não' é um subtipo de
qualquer outro tipo.

Isso significa que quando o tipo de um valor é *note object: a96, um
verificador de tipo rejeitará quase todas as operações nele, e
atribuí-lo a uma variável (ou usá-la como valor de retorno) de um tipo
mais especializado é um tipo erro.  Por exemplo:

     def hash_a(item: object) -> int:
         # Falha na verificação de tipo; um 'object' não tem um método 'magic'.
         item.magic()
         ...

     def hash_b(item: Any) -> int:
         # Passa na verificação de tipo
         item.magic()
         ...

     # Passa na verificação de tipo, já que ints e strs são subclasses de 'object'
     hash_a(42)
     hash_a("foo")

     # Passa na verificação de tipo, já que Any é compatível com todos os tipos
     hash_b(42)
     hash_b("foo")

Use *note object: a96. para indicar que um valor pode ser de qualquer
tipo de maneira segura.  Use *note Any: 6ac. para indicar que um valor é
tipado dinamicamente.


File: python.info,  Node: Subtipagem nominal vs estrutural,  Next: Conteúdo do módulo<7>,  Prev: O tipo Any,  Up: typing — Suporte para dicas de tipo

5.26.1.11 Subtipagem nominal vs estrutural
..........................................

Inicialmente a PEP 484(1) definiu o sistema de tipos estáticos do Python
como usando 'subtipagem nominal'.  Isto significa que uma classe ‘A’ é
permitida onde uma classe ‘B’ é esperada se e somente se ‘A’ for uma
subclasse de ‘B’.

Este requisito anteriormente também se aplicava a classes base
abstratas, como *note Iterable: 23e2.  O problema com essa abordagem é
que uma classe teve que ser marcada explicitamente para suportá-los, o
que não é pythônico e diferente do que normalmente seria feito em código
Python de tipo dinamicamente idiomático.  Por exemplo, isso está em
conformidade com PEP 484(2):

     from collections.abc import Sized, Iterable, Iterator

     class Bucket(Sized, Iterable[int]):
         ...
         def __len__(self) -> int: ...
         def __iter__(self) -> Iterator[int]: ...

PEP 544(3) permite resolver este problema permitindo que os usuários
escrevam o código acima sem classes base explícitas na definição de
classe, permitindo que ‘Bucket’ seja implicitamente considerado um
subtipo de ‘Sized’ e ‘Iterable[int]’ por verificador de tipo estático.
Isso é conhecido como 'subtipagem estrutural' (ou tipagem pato
estática):

     from collections.abc import Iterator, Iterable

     class Bucket:  # Nota: sem classes base
         ...
         def __len__(self) -> int: ...
         def __iter__(self) -> Iterator[int]: ...

     def collect(items: Iterable[int]) -> int: ...
     result = collect(Bucket())  # Passa na verificação de tipo

Além disso, ao criar uma subclasse de uma classe especial *note
Protocol: 264, um usuário pode definir novos protocolos personalizados
para aproveitar ao máximo a subtipagem estrutural (veja exemplos
abaixo).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/

   (2) https://peps.python.org/pep-0484/

   (3) https://peps.python.org/pep-0544/


File: python.info,  Node: Conteúdo do módulo<7>,  Next: Cronograma de descontinuação dos principais recursos,  Prev: Subtipagem nominal vs estrutural,  Up: typing — Suporte para dicas de tipo

5.26.1.12 Conteúdo do módulo
............................

O módulo ‘typing’ define as seguintes classes, funções e decoracores.

* Menu:

* Tipos primitivos especiais::
* Protocolos: Protocolos<3>.
* ABCs para trabalhar com E/S::
* Funções e decoradores::
* Auxiliares de introspecção::
* Constante::
* Apelidos descontinuados::


File: python.info,  Node: Tipos primitivos especiais,  Next: Protocolos<3>,  Up: Conteúdo do módulo<7>

5.26.1.13 Tipos primitivos especiais
....................................

* Menu:

* Tipos especiais::
* Formas especiais::
* Criando tipos genéricos e apelidos de tipo::
* Outras diretivas especiais::


File: python.info,  Node: Tipos especiais,  Next: Formas especiais,  Up: Tipos primitivos especiais

5.26.1.14 Tipos especiais
.........................

Eles podem ser usados como tipos em anotações.  Eles não oferecem
suporte a subscrição usando ‘[]’.

 -- Dado: typing.Any

     Tipo especial que indica um tipo irrestrito.

        * Todos os tipos são compatíveis com *note Any: 6ac.

        * *note Any: 6ac. é compatível com todos os tipos.

     Alterado na versão 3.11: *note Any: 6ac. agora pode ser usado como
     classe base.  Isso pode ser útil para evitar erros do verificador
     de tipo com classes que podem digitar em qualquer lugar ou são
     altamente dinâmicas.

 -- Dado: typing.AnyStr

     Uma *note tipo variável restrito: 419b.

     Definição:

          AnyStr = TypeVar('AnyStr', str, bytes)

     ‘AnyStr’ deve ser usado para funções que podem aceitar argumentos
     *note str: 44c. ou *note bytes: 1c2. mas não podem permitir que os
     dois se misturem.

     Por exemplo:

          def concat(a: AnyStr, b: AnyStr) -> AnyStr:
              return a + b

          concat("foo", "bar")    # OK: saída tem tipo 'str'
          concat(b"foo", b"bar")  # OK: saída tem tipo 'bytes'
          concat("foo", b"bar")   # Erro: não se mistura str com bytes

     Note que, apesar do nome, ‘AnyStr’ não tem nada a ver com o tipo
     *note Any: 6ac, nem significa “qualquer string”.  Em particular,
     ‘AnyStr’ e ‘str | bytes’ são diferentes entre si e têm casos de uso
     diferentes:

          # Uso inválido de AnyStr:
          # A variável de tipo é usada somente uma vez na assinatura da função,
          # então não pode ser "resolvida" pelo verificador de tipo
          def greet_bad(cond: bool) -> AnyStr:
              return "hi there!" if cond else b"greetings!"

          # O jeito melhor de anotar esta função
          def greet_proper(cond: bool) -> str | bytes:
              return "hi there!" if cond else b"greetings!"

     Descontinuado desde a versão 3.13, será removido na versão 3.18:
     Descontinuado em favor da nova *note sintaxe de parâmetro de tipo:
     2b3.  Use ‘class A[T: (str, bytes)]: ...’ em vez de importar
     ‘AnyStr’.  Veja a PEP 695(1) para mais detalhes.

     No Python 3.16, ‘AnyStr’ será removido de ‘typing.__all__’, e
     avisos de descontinuação serão emitidos em tempo de execução quando
     ele for acessado ou importado de ‘typing’.  ‘AnyStr’ será removido
     do ‘typing’ no Python 3.18.

 -- Dado: typing.LiteralString

     Tipo especial que inclui apenas strings literais.

     Qualquer literal de string é compatível com ‘LiteralString’, assim
     como outro ‘LiteralString’.  Entretanto, um objeto digitado apenas
     ‘str’ não é.  Uma string criada pela composição de objetos do tipo
     ‘LiteralString’ também é aceitável como uma ‘LiteralString’.

     Exemplo:

          def run_query(sql: LiteralString) -> None:
              ...

          def caller(arbitrary_string: str, literal_string: LiteralString) -> None:
              run_query("SELECT * FROM students")  # OK
              run_query(literal_string)  # OK
              run_query("SELECT * FROM " + literal_string)  # OK
              run_query(arbitrary_string)  # erro no verificador
              run_query(  # erro no verificador
                  f"SELECT * FROM students WHERE name = {arbitrary_string}"
              )

     ‘LiteralString’ é útil para APIs sensíveis onde strings arbitrárias
     geradas pelo usuário podem gerar problemas.  Por exemplo, os dois
     casos acima que geram erros no verificador de tipo podem ser
     vulneráveis a um ataque de injeção de SQL.

     Veja PEP 675(2) para mais detalhes.

     Adicionado na versão 3.11.

 -- Dado: typing.Never
 -- Dado: typing.NoReturn

     ‘Never’ e ‘NoReturn’ representam o tipo inferior(3), um tipo que
     não possui membros.

     Eles podem ser usados para indicar que uma função nunca retorna,
     como *note sys.exit(): 138e.:

          from typing import Never  # ou NoReturn

          def stop() -> Never:
              raise RuntimeError('no way')

     Ou para definir uma função que nunca deve ser chamada, pois não
     existem argumentos válidos, como *note assert_never(): 6a7.:

          from typing import Never  # or NoReturn

          def never_call_me(arg: Never) -> None:
              pass

          def int_or_str(arg: int | str) -> None:
              never_call_me(arg)  # erro no verificador
              match arg:
                  case int():
                      print("It's an int")
                  case str():
                      print("It's a str")
                  case _:
                      never_call_me(arg)  # OK, arg é do tipo Never (ou NoReturn)

     ‘Never’ e ‘NoReturn’ têm o mesmo significado no sistema de tipos e
     os verificadores de tipo estático tratam ambos de forma
     equivalente.

     Adicionado na versão 3.6.2: Adicionado *note NoReturn: 419c.

     Adicionado na versão 3.11: Adicionado *note Never: 6a8.

 -- Dado: typing.Self

     Tipo especial para representar a classe atual inclusa.

     Por exemplo:

          from typing import Self, reveal_type

          class Foo:
              def return_self(self) -> Self:
                  ...
                  return self

          class SubclassOfFoo(Foo): pass

          reveal_type(Foo().return_self())  # Tipo revelado é "Foo"
          reveal_type(SubclassOfFoo().return_self())  # Tipo revelado é "SubclassOfFoo"

     Esta anotação é semanticamente equivalente à seguinte, embora de
     forma mais sucinta:

          from typing import TypeVar

          Self = TypeVar("Self", bound="Foo")

          class Foo:
              def return_self(self: Self) -> Self:
                  ...
                  return self

     Em geral, se algo retorna ‘self’, como nos exemplos acima, você
     deve usar ‘Self’ como anotação de retorno.  Se ‘Foo.return_self’
     foi anotado como retornando ‘"Foo"’, então o verificador de tipo
     inferiria o objeto retornado de ‘SubclassOfFoo.return_self’ como
     sendo do tipo ‘Foo’ em vez de ‘SubclassOfFoo’.

     Outros casos de uso comuns incluem:

        - *note classmethod: 166.s que são usados como construtores
          alternativos e retornam instâncias do parâmetro ‘cls’.

        - Anotando um método *note __enter__(): 5c8. que retorna self.

     Você não deveria usar ‘Self’ como a anotação de retorno se não for
     garantido que o método retorne uma instância de uma subclasse
     quando a classe for subclassificada:

          class Eggs:
              # Self seria uma anotação de retorno incorreta aqui,
              # já que o objeto retornado sempre é instância de Eggs,
              # inclusive em subclasses
              def returns_eggs(self) -> "Eggs":
                  return Eggs()

     Veja PEP 673(4) para mais detalhes.

     Adicionado na versão 3.11.

 -- Dado: typing.TypeAlias

     Anotações especiais para declarar explicitamente um *note apelido
     de tipo: 454.

     Por exemplo:

          from typing import TypeAlias

          Factors: TypeAlias = list[int]

     ‘TypeAlias’ é particularmente útil em versões mais antigas do
     Python para anotar apelidos que fazem uso de referências futuras,
     pois pode ser difícil para os verificadores de tipo distingui-los
     das atribuições normais de variáveis:

          from typing import Generic, TypeAlias, TypeVar

          T = TypeVar("T")

          # "Box" não existe ainda,
          # então temos que usar aspas para a referência futura em Python <3.12.
          # Usar ``TypeAlias`` diz ao verificador de tipo que isso é uma declaração de apelido de tipo,
          # e não uma atribuição de variável a string.
          BoxOfStrings: TypeAlias = "Box[str]"

          class Box(Generic[T]):
              @classmethod
              def make_box_of_strings(cls) -> BoxOfStrings: ...

     Veja PEP 613(5) para mais detalhes.

     Adicionado na versão 3.10.

     Descontinuado desde a versão 3.12: *note TypeAlias: 7ca. foi
     descontinuado em favor da instrução *note type: 438, que cria
     instâncias de *note TypeAliasType: 455. e oferece suporte nativo a
     referências futuras.  Observe que embora *note TypeAlias: 7ca. e
     *note TypeAliasType: 455. sirvam propósitos semelhantes e tenham
     nomes semelhantes, eles são distintos e o último não é o tipo do
     primeiro.  A remoção de *note TypeAlias: 7ca. não está planejada
     atualmente, mas os usuários são encorajados a migrar para
     instruções *note type: 438.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0695/

   (2) https://peps.python.org/pep-0675/

   (3) https://en.wikipedia.org/wiki/Bottom_type

   (4) https://peps.python.org/pep-0673/

   (5) https://peps.python.org/pep-0613/


File: python.info,  Node: Formas especiais,  Next: Criando tipos genéricos e apelidos de tipo,  Prev: Tipos especiais,  Up: Tipos primitivos especiais

5.26.1.15 Formas especiais
..........................

Eles podem ser usados como tipos em anotações.  Todos eles oferecem
suporte a subscrição usando ‘[]’, mas cada um tem uma sintaxe única.

 -- Dado: typing.Union

     Tipo de união; ‘Union[X, Y]’ é equivalente a ‘X | Y’ e significa X
     ou Y.

     Para definir uma união, use, por exemplo.  ‘Union[int, str]’ ou a
     abreviatura ‘int | str’.  Usar essa abreviação é recomendado.
     Detalhes:

        * Os argumentos devem ser tipos e deve haver pelo menos um.

        * As uniões de uniões são achatadas, por exemplo:

               Union[Union[int, str], float] == Union[int, str, float]

          Entretanto, isso não se aplica a uniões referenciadas por meio
          de um apelido de tipo, para evitar forçar a avaliação da *note
          TypeAliasType: 455. subjacente:

               type A = Union[int, str]
               Union[A, float] != Union[int, str, float]

        * As uniões de um único argumento desaparecem, por exemplo:

               Union[int] == int  # O construtor retorna um int

        * Argumento redundantes são pulados, e.g.:

               Union[int, str, int] == Union[int, str] == int | str

        * Ao comparar uniões, a ordem de argumentos é ignorada.  Por
          exemplo:

               Union[int, str] == Union[str, int]

        * Você não pode estender ou instanciar uma ‘Union’

        * Você não pode escrever ‘Union[X][Y]’.

     Alterado na versão 3.7: Não remova subclasses explícitas de uniões
     em tempo de execução.

     Alterado na versão 3.10: Uniões agora podem ser escritas com ‘X |
     Y’.  Veja *note expressões de união de tipos: 7c3.

 -- Dado: typing.Optional

     ‘Optional[X]’ equivale a ‘X | None’ (ou ‘Union[X, None]’).

     Note que isso não é o mesmo conceito de um argumento opcional, que
     possui um valor por padrão.  Um argumento opcional com padrão não
     requer o qualificador ‘Optional’ em sua anotação de tipo só por ser
     opcional.  Por exemplo:

          def foo(arg: int = 0) -> None:
              ...

     Por outro lado, se um valor explícito de ‘None’ for permitido, o
     uso de ‘Optional’ é apropriado, seja o argumento opcional ou não.
     Por exemplo:

          def foo(arg: Optional[int] = None) -> None:
              ...

     Alterado na versão 3.10: Optional agora pode ser escrito como ‘X |
     None’.  Veja *note expressões de união de tipos: 7c3.

 -- Dado: typing.Concatenate

     Forma especial para anotar funções de ordem superior.

     ‘Concatenate’ pode ser usado em conjunção com *note Callable: 2404.
     e *note ParamSpec: 15e. para anotar um chamável de maior ordem que
     adiciona, remove ou transforma parâmetros de outro chamável.  Seu
     uso é feito na forma ‘Concatenate[Arg1Type, Arg2Type, ...,
     ParamSpecVariable]’, ‘Concatenate’ atualmente só é válido quando
     usado como primeiro argumento de um *note Callable: 2404.  O último
     parâmetro de ‘Concatenate’ deve ser um *note ParamSpec: 15e. ou
     reticências (‘...’).

     Por exemplo, para anotar um decorador ‘with_lock’ que oferece uma
     instância de *note threading.Lock: 176d. para a função decorada,
     ‘Concatenate’ pode ser usado para indicar que ‘with_lock’ espera um
     chamável cujo primeiro argumento tem tipo ‘Lock’, e retorna um
     chamável com uma assinatura de tipos diferente.  Neste caso, o
     *note ParamSpec: 15e. indica que os tipos dos parâmetros do
     chamável retornado dependem dos tipos dos parâmetros do chamável de
     entrada:

          from collections.abc import Callable
          from threading import Lock
          from typing import Concatenate

          # Use esta trava para se certificar de que
          # uma única thread a executa a qualquer momento.
          my_lock = Lock()

          def with_lock[**P, R](f: Callable[Concatenate[Lock, P], R]) -> Callable[P, R]:
              '''Um decorador com segurança de tipos que oferece uma trava.'''
              def inner(*args: P.args, **kwargs: P.kwargs) -> R:
                  # Oferece a trava como primeiro argumento.
                  return f(my_lock, *args, **kwargs)
              return inner

          @with_lock
          def sum_threadsafe(lock: Lock, numbers: list[float]) -> float:
              '''Somatório de uma lista de números de modo seguro para threads.'''
              with lock:
                  return sum(numbers)

          # We don't need to pass in the lock ourselves thanks to the decorator.
          sum_threadsafe([1.1, 2.2, 3.3])

     Adicionado na versão 3.10.

     Ver também
     ..........

        * PEP 612(1) – Variáveis de especificação de parâmetro (a PEP
          que introduz ‘ParamSpec’ e ‘Concatenate’)

        * *note ParamSpec: 15e.

        * *note Anotações de objetos chamáveis: 2404.

 -- Dado: typing.Literal

     Forma especial de tipagem para definir “tipos literais”.

     ‘Literal’ pode ser usado para indicar aos verificadores de tipo que
     o objeto anotado tem valor equivalente a algum dos literais
     oferecidos.

     Por exemplo:

          def validate_simple(data: Any) -> Literal[True]:  # sempre retorna True
              ...

          type Mode = Literal['r', 'rb', 'w', 'wb']
          def open_helper(file: str, mode: Mode) -> str:
              ...

          open_helper('/some/path', 'r')      # Passa verificação de tipos
          open_helper('/other/path', 'typo')  # Erro em verificação de tipos

     ‘Literal[...]’ não é subclasse.  Em tempo de execução, permite-se
     um valor arbitrário como argumento de tipo para ‘Literal[...]’, mas
     verificadores de tipo podem impor restrições.  Veja PEP 586(2) para
     mais detalhes sobre tipos literais.

     Detalhes adicionais:

        * Os argumentos devem ser valores literais e deve haver pelo
          menos um.

        * Tipos ‘Literal’ aninhados são achatados, por exemplo:

               assert Literal[Literal[1, 2], 3] == Literal[1, 2, 3]

          Entretanto, isso não se aplica a tipos ‘Literal’ referenciadas
          por meio de um apelido de tipo, para evitar forçar a avaliação
          da *note TypeAliasType: 455. subjacente:

               type A = Literal[1, 2]
               assert Literal[A, 3] != Literal[1, 2, 3]

        * Argumento redundantes são pulados, e.g.:

               assert Literal[1, 2, 1] == Literal[1, 2]

        * Ao comparar literais, a ordem de argumentos é ignorada.  Por
          exemplo:

               assert Literal[1, 2] == Literal[2, 1]

        * Você não pode estender ou instanciar uma ‘Literal’.

        * Você não pode escrever ‘Literal[X][Y]’.

     Adicionado na versão 3.8.

     Alterado na versão 3.9.1: ‘Literal’ agora remove parâmetros
     duplicados.  Comparações de igualdade entre objetos ‘Literal’ não
     dependem da ordem.  Objetos ‘Literal’ agora levantam uma exceção
     *note TypeError: 2c3. durante comparações de igualdade se um de
     seus parâmetros não for *note hasheável: 610.

 -- Dado: typing.ClassVar

     Uma construção especial de tipagem para marcar variáveis de classe.

     Como introduzido na PEP 526(3), uma variável cuja anotação de tipo
     tem um invólucro ClassVar indica que um dado atributo deve ser
     usado como uma variável de classe, e que ele não deve ser definido
     em instâncias dessa classe.  Modo de usar:

          class Starship:
              stats: ClassVar[dict[str, int]] = {} # variável de classe
              damage: int = 10                     # variável de instância

     *note ClassVar: 266. aceita apenas tipos e não pode ser subscrita
     posteriormente.

     *note ClassVar: 266. não é uma classe, e não deve ser usada com
     *note isinstance(): 442. ou *note issubclass(): 7c2.  *note
     ClassVar: 266. não muda com o comportamento do Python em tempo de
     execução, mas pode ser usada por verificadores de tipos de
     terceiros.  Por exemplo, um verificador de tipos pode sinalizar que
     o seguinte código é errado:

          enterprise_d = Starship(3000)
          enterprise_d.stats = {} # Erro: atribuindo valor a variável de classe de uma instância
          Starship.stats = {}     # Isso é OK

     Adicionado na versão 3.5.3.

     Alterado na versão 3.13: *note ClassVar: 266. agora pode ser
     aninhada em *note Final: 267. e vice-versa.

 -- Dado: typing.Final

     Uma construção especial de tipagem para indicar nomes finais a
     verificadores de tipos

     Nomes finais não podem ser reatribuídos em qualquer escopo.  Nomes
     finais declarados em escopos de classe não podem ser substituídos
     em subclasses.

     Por exemplo:

          MAX_SIZE: Final = 9000
          MAX_SIZE += 1  # Erro reportado pelo verificador de tipos

          class Connection:
              TIMEOUT: Final[int] = 10

          class FastConnector(Connection):
              TIMEOUT = 1  # Error reportado pelo verificador de tipos

     Não há verificação em tempo de execução dessas propriedades.  Veja
     PEP 591(4) para mais detalhes.

     Adicionado na versão 3.8.

     Alterado na versão 3.13: *note Final: 267. agora pode ser aninhada
     em *note ClassVar: 266. e vice-versa.

 -- Dado: typing.Required

     Uma construção especial de tipagem para marcar uma chave de *note
     TypedDict: 162. como necessária.

     Isso é útil principalmente para TypedDicts com ‘total=False’.  Veja
     *note TypedDict: 162. e PEP 655(5) para obter mais detalhes.

     Adicionado na versão 3.11.

 -- Dado: typing.NotRequired

     Uma construção especial de tipagem para marcar uma chave de *note
     TypedDict: 162. como potencialmente ausente.

     Veja *note TypedDict: 162. e PEP 655(6) para obter mais detalhes.

     Adicionado na versão 3.11.

 -- Dado: typing.ReadOnly

     Uma construção especial de tipagem para marcar um item de um *note
     TypedDict: 162. como somente leitura.

     Por exemplo:

          class Movie(TypedDict):
             title: ReadOnly[str]
             year: int

          def mutate_movie(m: Movie) -> None:
             m["year"] = 1999  # permitido
             m["title"] = "The Matrix"  # erro no verificador de tipos

     Não há verificação em tempo de execução para esta propriedade.

     Consulte *note TypedDict: 162. e PEP 705(7) para obter mais
     detalhes.

     Adicionado na versão 3.13.

 -- Dado: typing.Annotated

     Forma especial de tipagem para adicionar metadados específicos de
     contexto para uma anotação.

     Adiciona metadados ‘x’ a um determinado tipo ‘T’ usando a anotação
     ‘Annotated[T, x]’.  Os metadados adicionados usando ‘Annotated’
     podem ser usados por ferramentas de análise estática ou em tempo de
     execução.  Em tempo de execução, os metadados são armazenados em um
     atributo ‘__metadata__’.

     Se uma biblioteca ou ferramenta encontrar uma anotação
     ‘Annotated[T, x]’ e ela não tiver lógica especial para os
     metadados, ela deverá ignorar os metadados e simplesmente tratar a
     anotação como ‘T’.  Dessa forma, ‘Annotated’ pode ser útil em
     códigos que desejarem usar a anotação para propósitos fora do
     sistema de tipagem estática do Python.

     Usar ‘Annotated[T, x]’ como um anotação ainda permite a verificação
     estática do tipo de ‘T’, pois os verificadores de tipo simplesmente
     ignoram os metadados em ‘x’.  Dessa forma, o ‘Annotated’ difere do
     decorador *note @no_type_check: 6b4, que também pode ser usado para
     adicionar anotações fora do escopo do sistema de tipagem, mas
     desativa completamente a verificação de tipos para uma função ou
     classe.

     A responsabilidade de como interpretar os metadados é da ferramenta
     ou da biblioteca que encontrar uma anotação ‘Annotated’.  Uma
     ferramenta ou biblioteca que encontrar um tipo ‘Annotated’ poderá
     examinar os elementos de metadados para determinar se eles são de
     interesse (por exemplo, usando *note isinstance(): 442.).

      -- Describe: Annotated[<type>, <metadata>]

     Aqui está um exemplo de como você pode usar ‘Annotated’ para
     adicionar metadados a anotações de tipos se estiver fazendo uma
     análise de intervalos:

          @dataclass
          class ValueRange:
              lo: int
              hi: int

          T1 = Annotated[int, ValueRange(-10, 5)]
          T2 = Annotated[T1, ValueRange(-20, 3)]

     O primeiro argumento para ‘Annotated’ deve ser um tipo válido.
     Vários elementos de metadados podem ser fornecidos, pois
     ‘Annotated’ suporta argumentos variádicos.  A ordem dos elementos
     de metadados é preservada e importa para verificações de igualdade:

          @dataclass
          class ctype:
               kind: str

          a1 = Annotated[int, ValueRange(3, 10), ctype("char")]
          a2 = Annotated[int, ctype("char"), ValueRange(3, 10)]

          assert a1 != a2  # a ordem importa

     Cabe à ferramenta que consome as anotações decidir se o cliente tem
     permissão de adicionar vários elementos de metadados a uma anotação
     e como mesclar essas anotações.

     Os tipos ‘Annotated’ aninhados são achatados.  A ordem dos
     elementos de metadados começa com a anotação mais interna:

          assert Annotated[Annotated[int, ValueRange(3, 10)], ctype("char")] == Annotated[
              int, ValueRange(3, 10), ctype("char")
          ]

     Entretanto, isso não se aplica a tipos ‘Annotated’ referenciadas
     por meio de um apelido de tipo, para evitar forçar a avaliação da
     *note TypeAliasType: 455. subjacente:

          type From3To10[T] = Annotated[T, ValueRange(3, 10)]
          assert Annotated[From3To10[int], ctype("char")] != Annotated[
             int, ValueRange(3, 10), ctype("char")
          ]

     Elementos duplicados de metadata não são removidos:

          assert Annotated[int, ValueRange(3, 10)] != Annotated[
              int, ValueRange(3, 10), ValueRange(3, 10)
          ]

     ‘Annotated’ pode ser usado com apelidos aninhados e apelidos
     genéricos:

               @dataclass
               class MaxLen:
                   value: int

               type Vec[T] = Annotated[list[tuple[T, T]], MaxLen(10)]

               # Quando usado em uma anotação de tipo, um verificador de tipos tratará "V" da mesma forma que
               # ``Annotated[list[tuple[int, int]], MaxLen(10)]``:
               type V = Vec[int]

     ‘Annotated’ não pode ser usado com um *note TypeVarTuple: 15f.
     desempacotado:

          type Variadic[*Ts] = Annotated[*Ts, Ann1] = Annotated[T1, T2, T3, ..., Ann1]  # NÃO válido

     onde ‘T1’, ‘T2’, … são *note TypeVars: 15d.  Isso é inválido, pois
     somente um tipo deve ser passado para Annotated.

     Por padrão, *note get_type_hints(): 6b1. retira os metadados de
     anotações.  Passe ‘include_extras=True’ para preservar os
     metadados:

               >>> from typing import Annotated, get_type_hints
               >>> def func(x: Annotated[int, "metadata"]) -> None: pass
               ...
               >>> get_type_hints(func)
               {'x': <class 'int'>, 'return': <class 'NoneType'>}
               >>> get_type_hints(func, include_extras=True)
               {'x': typing.Annotated[int, 'metadata'], 'return': <class 'NoneType'>}

     Em tempo de execução, os metadados associados a um tipo ‘Annotated’
     podem ser recuperados por meio do atributo ‘__metadata__’:

               >>> from typing import Annotated
               >>> X = Annotated[int, "very", "important", "metadata"]
               >>> X
               typing.Annotated[int, 'very', 'important', 'metadata']
               >>> X.__metadata__
               ('very', 'important', 'metadata')

     Se você quiser recuperar o tipo original envolvido por ‘Annotated’,
     use o atributo ‘__origin__’:

               >>> from typing import Annotated, get_origin
               >>> Password = Annotated[str, "secret"]
               >>> Password.__origin__
               <class 'str'>

     Note que usar *note get_origin(): 2ec. retornará o próprio
     ‘Annotated’:

               >>> get_origin(Password)
               typing.Annotated

     Ver também
     ..........

     PEP 593(8) - Anotações flexíveis para funções e variáveis

          A PEP que introduz ‘Annotated’ à biblioteca padrão.

     Adicionado na versão 3.9.

 -- Dado: typing.TypeIs

     Uma construção especial de tipagem para marcar funções de predicado
     de tipo definidas pelo usuário.

     ‘TypeIs’ pode ser usado para anotar o tipo de retorno de uma função
     de predicado de tipo definida pelo usuário.  ‘TypeIs’ aceita apenas
     um único argumento de tipo.  Em tempo de execução, funções marcadas
     dessa forma devem retornar um booleano e receber, no mínimo, um
     argumento posicional.

     ‘TypeIs’ visa beneficiar 'estreitamento de tipo' – uma técnica
     usada por verificador de tipo estático para determinar um tipo mais
     preciso de expressão dentro do fluxo de código de um programa.
     Normalmente, o estreitamento de tipo é feito por meio da análise do
     fluxo de código condicional e da aplicação do estreitamento a um
     bloquear código.  A condicional expressão aqui é às vezes chamada
     de “predicado de tipo”:

          def is_str(val: str | float):
              # predicado de tipos "isinstance"
              if isinstance(val, str):
                  # Tipo de ``val`` é restrito a ``str``
                  ...
              else:
                  # Senão, tipo de ``val`` é restrito a ``float``.
                  ...

     Às vezes, seria conveniente usar uma função booleana definida pelo
     usuário como um predicado de tipo.  Essa função deveria usar
     ‘TypeIs[...]’ ou *note TypeGuard: 164. como seu tipo de retorno
     para alertar o verificador de tipo estático sobre essa intenção.
     ‘TypeIs’ geralmente tem um comportamento mais intuitivo do que
     ‘TypeGuard’, mas não pode ser usado quando os tipos de entrada e
     saída são incompatíveis (por exemplo, de ‘list[object]’ para
     ‘list[int]’) ou quando a função não retorna ‘True’ para todas as
     instâncias do tipo restrito.

     Usar ‘-> TypeIs[NarrowedType]’ informa ao verificador de tipo
     estático que, para uma determinada função:

       1. O valor de retorno é um booleano.

       2. Se o valor de retorno for ‘True’, o tipo de seu argumento será
          a interseção entre o tipo original do argumento e o
          ‘NarrowedType’.

       3. Se o valor de retorno for ‘False’, o tipo de seu argumento
          será restrito para excluir ‘NarrowedType’.

     Por exemplo:

          from typing import assert_type, final, TypeIs

          class Parent: pass
          class Child(Parent): pass
          @final
          class Unrelated: pass

          def is_parent(val: object) -> TypeIs[Parent]:
              return isinstance(val, Parent)

          def run(arg: Child | Unrelated):
              if is_parent(arg):
                  # Tipo de ``arg`` é restrito à interseção
                  # de ``Parent`` e ``Child``, o que equivale a
                  # ``Child``.
                  assert_type(arg, Child)
              else:
                  # Tipo de ``arg`` é restrito para excluir ``Parent``,
                  # então sobrou o tipo ``Unrelated``.
                  assert_type(arg, Unrelated)

     O tipo dentro de ‘TypeIs’ deve ser consistente com o tipo do
     argumento da função; caso contrário, o verificador de tipo estático
     levantará um erro.  Uma função ‘TypeIs’ escrita incorretamente pode
     ocasionar um comportamento insensato pelo sistema de tipos; é de
     responsabilidade do usuário escrever tais funções de forma segura
     para tipos.

     Se uma função ‘TypeIs’ for um método de classe ou instância, então
     o tipo em ‘TypeIs’ mapeia para o tipo do segundo parâmetro (depois
     de ‘cls’ ou ‘self’).

     Em resumo, a forma ‘def foo(arg: TypeA) -> TypeIs[TypeB]: ...’,
     significa que se ‘foo(arg)’ retorna ‘True’, então ‘arg’ é um
     instância de ‘TypeB’, e se retorna ‘False’, não é um instância de
     ‘TypeB’.

     ‘TypeIs’ também funciona com variáveis de tipo.  Para mais
     informações, consulte a PEP 742(9) (Restringindo tipos com
     ‘TypeIs’).

     Adicionado na versão 3.13.

 -- Dado: typing.TypeGuard

     Uma construção especial de tipagem para marcar funções de predicado
     de tipo definidas pelo usuário.

     Funções de predicados de tipo são funções definidas pelo usuário
     que retornam se seu argumento é uma instância de um tipo
     específico.  O ‘TypeGuard’ funciona como *note TypeIs: 163, mas tem
     efeitos sutilmente diferentes sobre o comportamento da verificação
     de tipos (veja abaixo).

     Usar ‘-> TypeGuard’ informa ao verificador de tipo estático que,
     para uma determinada função:

       1. O valor de retorno é um booleano.

       2. Se o valor de retorno for ‘True’, o tipo de seu argumento é o
          tipo dentro de ‘TypeGuard’.

     ‘TypeGuard’ também funciona com tipos variáveis.  Consulte a PEP
     647(10) para obter mais detalhes.

     Por exemplo:

          def is_str_list(val: list[object]) -> TypeGuard[list[str]]:
              '''Determina se todos os objetos na lista são strings'''
              return all(isinstance(x, str) for x in val)

          def func1(val: list[object]):
              if is_str_list(val):
                  # Tipo de ``val`` é restrito a ``list[str]``.
                  print(" ".join(val))
              else:
                  # Tipo de ``val`` continua sendo ``list[object]``.
                  print("Not a list of strings!")

     ‘TypeIs’ e ‘TypeGuard’ diferem das seguintes maneiras:

        * ‘TypeIs’ exige que o tipo restrito seja um subtipo do tipo de
          entrada, enquanto o ‘TypeGuard’, não.  O motivo principal é
          permitir coisas como restringir ‘list[object]’ a ‘list[str]’,
          embora este não seja um subtipo daquele, já que ‘list’ é
          invariante.

        * Quando uma função ‘TypeGuard’ retorna ‘True’, os verificadores
          de tipo restringem o tipo da variável exatamente ao tipo
          ‘TypeGuard’.  Quando uma função ‘TypeIs’ retorna ‘True’, os
          verificadores de tipo podem inferir um tipo mais preciso
          combinando o tipo previamente conhecido da variável com o tipo
          ‘TypeIs’.  (Tecnicamente, isso é conhecido como um tipo de
          interseção).

        * Quando uma função ‘TypeGuard’ retorna ‘False’, os
          verificadores de tipo não podem restringir o tipo da variável.
          Quando uma função ‘TypeIs’ retorna ‘False’, os verificadores
          de tipo podem restringir o tipo da variável para excluir o
          tipo ‘TypeIs’.

     Adicionado na versão 3.10.

 -- Dado: typing.Unpack

     Operador de tipagem para marcar conceitualmente um objeto como
     tendo sido desempacotado.

     Por exemplo, usar o operador de desempacotamento ‘*’ em uma *note
     tupla de tipos variáveis: 419e. equivale a usar o ‘Unpack’ para
     marcar a tupla de tipos variáveis como tendo sido desempacotada:

          Ts = TypeVarTuple('Ts')
          tup: tuple[*Ts]
          # Efetivamente faz:
          tup: tuple[Unpack[Ts]]

     Na verdade, ‘Unpack’ pode ser usado de forma intercambiável com ‘*’
     no contexto dos tipos *note typing.TypeVarTuple: 15f. e *note
     builtins.tuple: 370.  Você pode ver ‘Unpack’ sendo usado
     explicitamente em versões mais antigas do Python, onde ‘*’ não
     podia ser usado em certos lugares:

          # Em versões mais antigas do Python, TypeVarTuple e Unpack
          # estão localizados no pacote de backports `typing_extensions`.
          from typing_extensions import TypeVarTuple, Unpack

          Ts = TypeVarTuple('Ts')
          tup: tuple[*Ts]         # Erro de sintaxe no Python <= 3.10!
          tup: tuple[Unpack[Ts]]  # Semanticamente equivalente e compatível com versões anteriores

     ‘Unpack’ também pode ser usado com *note typing.TypedDict: 162.
     para a tipagem de ‘**kwargs’ em uma assinatura de função:

          from typing import TypedDict, Unpack

          class Movie(TypedDict):
              name: str
              year: int

          # Esta função espera dois argumentos nomeados: `name` de tipo `str`
          # e `year` de tipo `int`.
          def foo(**kwargs: Unpack[Movie]): ...

     Consulte PEP 692(11) para obter mais detalhes sobre como usar
     ‘Unpack’ para tipagem de ‘**kwargs’.

     Adicionado na versão 3.11.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0612/

   (2) https://peps.python.org/pep-0586/

   (3) https://peps.python.org/pep-0526/

   (4) https://peps.python.org/pep-0591/

   (5) https://peps.python.org/pep-0655/

   (6) https://peps.python.org/pep-0655/

   (7) https://peps.python.org/pep-0705/

   (8) https://peps.python.org/pep-0593/

   (9) https://peps.python.org/pep-0742/

   (10) https://peps.python.org/pep-0647/

   (11) https://peps.python.org/pep-0692/


File: python.info,  Node: Criando tipos genéricos e apelidos de tipo,  Next: Outras diretivas especiais,  Prev: Formas especiais,  Up: Tipos primitivos especiais

5.26.1.16 Criando tipos genéricos e apelidos de tipo
....................................................

As classes a seguir não devem ser usadas diretamente como anotações.
propósito O objetivo delas é construir bloquear para criar genérico e
digitar apelido.

Esses objetos podem ser criados por meio de sintaxe especial (*note
listas de parâmetros de tipo: 2b3. e a instrução *note type: 438.).
Para compatibilidade com Python 3.11 e versões anteriores, eles também
podem ser criados sem a sintaxe dedicada, como documentado abaixo.

 -- Classe: typing.Generic

     Classe base abstrata para tipos genéricos

     Normalmente, um tipo genérico é declarado adicionando-se uma lista
     de parâmetros de tipo após o nome da classe:

          class Mapping[KT, VT]:
              def __getitem__(self, key: KT) -> VT:
                  ...
                  # Etc.

     Essa classe herda implicitamente de ‘Generic’.  A semântica em
     tempo de execução dessa sintaxe é discutida na *note Referência da
     Linguagem: 452.

     Esta classe pode ser utilizada como segue:

          def lookup_name[X, Y](mapping: Mapping[X, Y], key: X, default: Y) -> Y:
              try:
                  return mapping[key]
              except KeyError:
                  return default

     Aqui os colchetes depois no nome da função indica uma *note função
     genérica: 453.

     Para manter retrocompatibilidade, as classes genéricas também podem
     ser declaradas herdando explicitamente de ‘Generic’.  Nesse caso,
     os parâmetros de tipo devem ser declarados separadamente:

          KT = TypeVar('KT')
          VT = TypeVar('VT')

          class Mapping(Generic[KT, VT]):
              def __getitem__(self, key: KT) -> VT:
                  ...
                  # Etc.

 -- Classe: typing.TypeVar (name, *constraints, bound=None,
          covariant=False, contravariant=False, infer_variance=False,
          default=typing.NoDefault)

     Tipo variável.

     A maneira preferida de construir um tipo variável é por meio da
     sintaxe dedicada para *note funções genéricas: 453, *note classes
     genéricas: 452. e *note apelidos de tipo genérico: 456.:

          class Sequence[T]:  # T é um TypeVar
              ...

     Essa sintaxe também pode ser usada para criar tipos variáveis
     delimitados e tipos variáveis restritos:

          class StrSequence[S: str]:  # S é a TypeVar com como limite superior em `str`;
              ...                     # podemos dizer que S é "delimitada por `str`"


          class StrOrBytesSequence[A: (str, bytes)]:  # A é uma TypeVar restrita a str ou bytes
              ...

     No entanto, se desejado, tipos variáveis reutilizáveis também podem
     ser construídas manualmente, como:

          T = TypeVar('T') # Pode ser qualquer coisa
          S = TypeVar('S', bound=str) # Pode ser qualquer subtipo de str
          A = TypeVar('A', str, bytes) # Deve ser exatamente str ou bytes

     Tipos variáveis existem principalmente para o benefício de
     verificadores de tipo estático.  Eles servem como parâmetros para
     tipos genéricos, bem como para definições de função genérica e
     apelidos de tipo.  Consulte *note Generic: 15d7. para obter mais
     informações sobre genérico.  Funções genéricas funcionam da
     seguinte forma:

          def repeat[T](x: T, n: int) -> Sequence[T]:
              """Retorna uma lista contendo n referências para x."""
              return [x]*n


          def print_capitalized[S: str](x: S) -> S:
              """Exibe x capitalizado, e retorna x."""
              print(x.capitalize())
              return x


          def concatenate[A: (str, bytes)](x: A, y: A) -> A:
              """Concatena dois objetos string ou bytes."""
              return x + y

     Observe que tipos variáveis podem ser 'delimitados', 'restritos',
     nenhum dos dois, mas não podem ser 'ambos'.

     A variância de tipos variáveis é inferida pelos verificadores de
     tipo quando eles são criados por meio do *note sintaxe de parâmetro
     de tipo: 2b3. ou quando ‘infer_variance=True’ é passado.  Os tipos
     variáveis criados manualmente podem ser explicitamente marcados
     como covariante ou contravariantes ao passar ‘covariant=True’ ou
     ‘contravariant=True’.  Por padrão, os tipos variáveis criados
     manualmente são invariante.  Consulte PEP 484(1) e PEP 695(2) para
     obter mais detalhes.

     Tipos variáveis delimitados e tipos variáveis restritos têm
     semânticas diferentes de várias formas importantes.  Usar um tipo
     variável 'delimitado' significa que a ‘TypeVar’ será resolvido
     usando o tipo mais específico possível:

          x = print_capitalized('a string')
          reveal_type(x)  # tipo revelado é str

          class StringSubclass(str):
              pass

          y = print_capitalized(StringSubclass('another string'))
          reveal_type(y)  # tipo revelado é StringSubclass

          z = print_capitalized(45)  # erro: int não é subtipo de str

     O limite superior de um tipo variável pode ser um tipo concreto, um
     tipo abstrato (classe base abstrata ou protocolo) ou até mesmo uma
     união de tipos:

          # Pode ser qualquer coisa com um método __abs__
          def print_abs[T: SupportsAbs](arg: T) -> None:
              print("Absolute value:", abs(arg))

          U = TypeVar('U', bound=str|bytes)  # Pode ser qualquer subtipo com a união str | bytes
          V = TypeVar('V', bound=SupportsAbs)  # Pode ser qualquer coisa com um método __abs__
     Porém, usar um tipo variável 'restrito' significa que a ‘TypeVar’
     só poderá ser resolvida como sendo exatamente uma das restrições
     dadas:

          a = concatenate('one', 'two')
          reveal_type(a) # o tipo revelado é str

          b = concatenate(StringSubclass('one'), StringSubclass('two'))
          reveal_type(b) # o tipo revelado é str, apesar de StringSubclass ter sido passado

          c = concatenate('one', b'two') # erro: tipo variável 'A' pode ser str ou bytes em uma chamada de função, mas não ambos

     Em tempo de execução, ‘isinstance(x, T)’ levantará *note TypeError:
     2c3.

      -- Atributo: __name__

          O nome do tipo variável.

      -- Atributo: __covariant__

          Se o tipo variável foi explicitamente marcado como covariante.

      -- Atributo: __contravariant__

          Se o tipo variável foi explicitamente marcado como
          contravariante.

      -- Atributo: __infer_variance__

          Se a variância de tipo variável deve ser inferida por
          verificadores de tipo.

          Adicionado na versão 3.12.

      -- Atributo: __bound__

          A limite superior do tipo variável, se houver.

          Alterado na versão 3.12: Para tipos variáveis criado por meio
          da *note sintaxe de parâmetro de tipo: 2b3. , a limite é
          avaliado somente quando o atributo é acessado, não quando o
          tipo variável é criado (consulte *note Avaliação preguiçosa:
          457.).

      -- Atributo: __constraints__

          Um tupla contendo as restrições do tipo variável, se houver.

          Alterado na versão 3.12: Para tipos variáveis criado por meio
          da *note sintaxe de parâmetro de tipo: 2b3. , a restrição é
          avaliada somente quando o atributo é acessado, não quando o
          tipo variável é criado (consulte *note Avaliação preguiçosa:
          457.).

      -- Atributo: __default__

          O padrão valor do tipo variável, ou *note typing.NoDefault:
          262. se ele não tiver padrão.

          Adicionado na versão 3.13.

      -- Método: has_default ()

          Retorna se o tipo variável tem ou não um valor padrão.  Isso
          equivale a verificar se *note __default__: 41a6. não é o
          singleton *note typing.NoDefault: 262, exceto por não forçar a
          avaliação instantânea do valor padrão que é *note avaliado
          preguiçosamente: 457.

          Adicionado na versão 3.13.

     Alterado na versão 3.12: Tipos variáveis agora podem ser declarados
     usando a *note sintaxe de parâmetro de tipo: 2b3. introduzida por
     PEP 695(3).  O parâmetro ‘infer_variance’ foi adicionado.

     Alterado na versão 3.13: Adiciona suporte a valores padrão.

 -- Classe: typing.TypeVarTuple (name, *, default=typing.NoDefault)

     Tupla de tipo variável.  Uma forma especializada de *note tipo
     variável: 4195. que permite genéricos 'variádicos'.

     Tuplas de tipo variável podem ser declarada em *note listas de
     parâmetros de tipo: 2b3. usando um único asterisco (‘*’) antes do
     nome:

          def move_first_element_to_last[T, *Ts](tup: tuple[T, *Ts]) -> tuple[*Ts, T]:
              return (*tup[1:], tup[0])

     Ou invocando o construtor ‘TypeVarTuple’ explicitamente:

          T = TypeVar("T")
          Ts = TypeVarTuple("Ts")

          def move_first_element_to_last(tup: tuple[T, *Ts]) -> tuple[*Ts, T]:
              return (*tup[1:], tup[0])

     Um tipo variável normal permite a parametrização com um único tipo.
     Uma tupla de tipos variáveis, por outro lado, permite a
     parametrização com um número 'arbitrário' de tipos, agindo como um
     número 'arbitrário' de tipos variáveis envolvidos em um tupla.  Por
     exemplo:

          # T é limitado a int, Ts é limitado a ()
          # Valor retornado é (1,), que tem tipo tuple[int]
          move_first_element_to_last(tup=(1,))

          # T é limitado a int, Ts é limitado a (str,)
          # Valor retornado é ('spam', 1), que tem tipo tuple[str, int]
          move_first_element_to_last(tup=(1, 'spam'))

          # T é limitado a int, Ts é limitado a (str, float)
          # Valor retornado é ('spam', 3.0, 1), que tem tipo tuple[str, float, int]
          move_first_element_to_last(tup=(1, 'spam', 3.0))

          # Isso é um erro para o verificador de tipos (e falha em tempo de execução)
          # pois tuple[()] não é compatível com tuple[T, *Ts]
          # (pelo menos um elemento é necessário)
          move_first_element_to_last(tup=())

     Observe o uso do operador de desempacotamento ‘*’ em ‘tuple[T,
     *Ts]’.  Conceitualmente, você pode interpretar ‘Ts’ como uma tupla
     de tipos variáveis ‘(T1, T2, ...)’ .  Então o tipo ‘tuple[T, *Ts]’
     se tornaria ‘tuple[T, *(T1, T2, ...)]’, que equivale a ‘tuple[T,
     T1, T2, ...]’.  (Note que, em versões mais antigas de Python, você
     pode encontrar isso escrito com *note Unpack: 171b. em vez de
     ‘Unpack[Ts]’.)

     Tuplas de tipos variáveis devem 'sempre' ser desempacotadas.  Isso
     ajuda a distinguir entre tuplas de tipos variáveis e tipos
     variáveis normais:

          x: Ts          # Inválido
          x: tuple[Ts]   # Inválido
          x: tuple[*Ts]  # O jeito correto

     As tuplas de tipos variáveis podem ser usadas no mesmo contexto que
     tipos variáveis normais.  Por exemplo, em argumentos, tipos de
     retorno e definições de classes:

          class Array[*Shape]:
              def __getitem__(self, key: tuple[*Shape]) -> float: ...
              def __abs__(self) -> "Array[*Shape]": ...
              def get_shape(self) -> tuple[*Shape]: ...

     As tuplas de tipos variáveis podem ser combinadas com tipos
     variáveis normais:

          class Array[DType, *Shape]:  # Tudo certo aqui
              pass

          class Array2[*Shape, DType]:  # Tudo certo aqui também
              pass

          class Height: ...
          class Width: ...

          float_array_1d: Array[float, Height] = Array()     # Totalmente certo
          int_array_2d: Array[int, Height, Width] = Array()  # Sim, certo também

     No entanto, observe que no máximo uma tupla de tipos variáveis pode
     aparecer em uma única lista de argumentos de tipo ou parâmetros de
     tipo:

          x: tuple[*Ts, *Ts]             # Inválido
          class Array[*Shape, *Shape]:  # Inválido
              pass

     Por fim, uma tupla de tipos variáveis desempacotada pode ser usada
     como anotação de tipo de ‘*args’:

          def call_soon[*Ts](
              callback: Callable[[*Ts], None],
              *args: *Ts
          ) -> None:
              ...
              callback(*args)

     Ao contrário do que acontece com anotações não desempacotadas de
     ‘*args’ - por exemplo, ‘*args: int’, que especificaria que 'todos'
     os argumentos são ‘int’ -, ‘*args: *Ts’ permite referenciar os
     tipos de cada argumento em ‘*args’ 'individualmente'.  Isso nos
     permite garantir que os tipos em ‘*args’ passados para ‘call_soon’
     correspondem aos tipos dos argumentos (posicionais) de ‘callback’.

     Consulte a PEP 646(4) para mais detalhes sobre tuplas de tipos
     variáveis.

      -- Atributo: __name__

          O nome da tupla de tipos variáveis.

      -- Atributo: __default__

          O valor padrão da tupla de tipos variáveis, ou *note
          typing.NoDefault: 262. se não existir padrão.

          Adicionado na versão 3.13.

      -- Método: has_default ()

          Retorna se a tupla de tipos variáveis tem ou não um valor
          padrão.  Isso equivale a verificar se *note __default__: 41a9.
          não é o singleton *note typing.NoDefault: 262, exceto por não
          forçar a avaliação instantânea do valor padrão que é *note
          avaliado preguiçosamente: 457.

          Adicionado na versão 3.13.

     Adicionado na versão 3.11.

     Alterado na versão 3.12: Tuplas de tipos variáveis agora podem ser
     declaradas usando a sintaxe de *note parâmetros de tipo: 2b3.
     introduzido pela PEP 695(5).

     Alterado na versão 3.13: Adiciona suporte a valores padrão.

 -- Classe: typing.ParamSpec (name, *, bound=None, covariant=False,
          contravariant=False, default=typing.NoDefault)

     Variável de especificação de parâmetro.  Uma versão especializada
     de *note tipos variáveis: 4195.

     Em *note listas de parâmetros de tipo: 2b3. as especificações de
     parâmetros podem ser declaradas com dois asteriscos (‘**’):

          type IntFunc[**P] = Callable[P, int]

     Para compatibilidade com Python 3.11 e versões anteriores, os
     objetos ‘ParamSpec’ também podem ser criados da seguinte forma:

          P = ParamSpec('P')

     Variáveis de especificação de parâmetro existem principalmente para
     o benefício de verificadores de tipo estático.  São usadas para
     encaminhar os tipos de parâmetros de um chamável para outro
     chamável – um padrão comumente encontrado em funções e decoradores
     de ordem superior.  Só são válidas quando usados em ‘Concatenate’,
     ou como o primeiro argumento para ‘Callable’, ou como parâmetro
     para genéricos definidos pelo usuário.  Consulte *note Generic:
     15d7. para obter mais informações sobre tipos genéricos.

     Por exemplo, para adicionar um registro básico de eventos a uma
     função, é possível criar um decorador ‘add_logging’ para registrar
     chamadas de função.  A variável de especificação de parâmetro
     informa ao verificador de tipos que o chamável passado para o
     decorador e o novo chamável retornado por ele têm parâmetros de
     tipo interdependentes:

          from collections.abc import Callable
          import logging

          def add_logging[T, **P](f: Callable[P, T]) -> Callable[P, T]:
              '''Um decorador com segurança de tipos que acrescenta registros de eventos (logs) a uma função.'''
              def inner(*args: P.args, **kwargs: P.kwargs) -> T:
                  logging.info(f'{f.__name__} was called')
                  return f(*args, **kwargs)
              return inner

          @add_logging
          def add_two(x: float, y: float) -> float:
              '''Soma dois números.'''
              return x + y

     Sem o ‘ParamSpec’, a maneira mais simples de anotar isso
     anteriormente era usar um *note TypeVar: 15d. com o limite superior
     ‘Callable[..., Any]’.  No entanto, isso causa dois problemas:

       1. O verificador de tipos não consegue verificar a função
          ‘inner’, porque ‘*args’ e ‘**kwargs’ precisam ter tipo *note
          Any: 6ac.

       2. *note cast(): 41ab. pode ser exigida no corpo do decorador
          ‘add_logging’ ao retornar a função ‘inner’, ou o verificador
          de tipo estático deverá ser instruído a ignorar o ‘return
          inner’.

      -- Atributo: args

      -- Atributo: kwargs

          Como ‘ParamSpec’ captura tanto parâmetros posicionais quanto
          parâmetros nomeados, ‘P.args’ e ‘P.kwargs’ podem ser usados
          para dividir um ‘ParamSpec’ em seus componentes.  ‘P.args’
          representa a tupla de parâmetros posicionais em uma
          determinada chamada e só deve ser usada para anotar ‘*args’.
          ‘P.kwargs’ representa o mapeamento de parâmetros nomeados para
          seus valores em uma determinada chamada, e só deve ser usado
          para anotar ‘**kwargs’.  Ambos os atributos exigem que o
          parâmetro anotado esteja em escopo.  Em tempo de execução,
          ‘P.args’ e ‘P.kwargs’ são instâncias, respectivamente, de
          *note ParamSpecArgs: 7c7. e *note ParamSpecKwargs: 7c8.

      -- Atributo: __name__

          O nome da especificação de parâmetros.

      -- Atributo: __default__

          O valor padrão da especificação de parâmetro, ou *note
          typing.NoDefault: 262. se não tiver padrão.

          Adicionado na versão 3.13.

      -- Método: has_default ()

          Retorna se a especificação de parâmetros tem ou não um valor
          padrão.  Isso equivale a verificar se *note __default__: 41af.
          não é o singleton *note typing.NoDefault: 262, exceto por não
          forçar a avaliação instantânea do valor padrão que é *note
          avaliado preguiçosamente: 457.

          Adicionado na versão 3.13.

     Variáveis de especificação de parâmetros criadas com
     ‘covariant=True’ ou ‘contravariant=True’ podem ser usadas para
     declarar tipos genéricos covariantes ou contravariantes.  O
     argumento ‘bound’ também é aceito, semelhante ao *note TypeVar:
     15d.  Porém, a semântica real dessas palavras reservadas ainda não
     foi decidida.

     Adicionado na versão 3.10.

     Alterado na versão 3.12: Especificações de parâmetros agora podem
     ser declaradas usando a sintaxe de *note parâmetros de tipo: 2b3.
     introduzido pela PEP 695(6).

     Alterado na versão 3.13: Adiciona suporte a valores padrão.

          Nota: Somente variáveis de especificação de parâmetro
          definidas em escopo global podem ser serializadas com pickle.

     Ver também
     ..........

        * PEP 612(7) – Variáveis de especificação de parâmetro (a PEP
          que introduz ‘ParamSpec’ e ‘Concatenate’)

        * *note Concatenate: 7c5.

        * *note Anotações de objetos chamáveis: 2404.

 -- Dado: typing.ParamSpecArgs
 -- Dado: typing.ParamSpecKwargs

     Tipos dos argumentos e dos argumentos nomeados de um *note
     ParamSpec: 15e.  O atributo ‘P.args’ de um ‘ParamSpec’ é uma
     instância de ‘ParamSpecArgs’, e o atributo ‘P.kwargs’ é uma
     instância de ‘ParamSpecKwargs’.  São destinados à introspecção em
     tempo de execução, e não têm nenhum significado especial para o
     verificador de tipo estático.

     Chamar *note get_origin(): 2ec. em qualquer um desses objetos
     retornará o ‘ParamSpec’ original:

          >>> from typing import ParamSpec, get_origin
          >>> P = ParamSpec("P")
          >>> get_origin(P.args) is P
          True
          >>> get_origin(P.kwargs) is P
          True

     Adicionado na versão 3.10.

 -- Classe: typing.TypeAliasType (name, value, *, type_params=())

     O tipo de apelidos de tipo criados pela instrução *note type: 438.

     Exemplo:

          >>> type Alias = int
          >>> type(Alias)
          <class 'typing.TypeAliasType'>

     Adicionado na versão 3.12.

      -- Atributo: __name__

          O nome do apelido de tipo:

               >>> type Alias = int
               >>> Alias.__name__
               'Alias'

      -- Atributo: __module__

          O nome do módulo no qual o apelido de tipo foi definido:

               >>> type Alias = int
               >>> Alias.__module__
               '__main__'

      -- Atributo: __type_params__

          Os parâmetros de tipo do apelido de tipo, ou uma tupla vazia
          se o apelido não for genérico:

               >>> type ListOrSet[T] = list[T] | set[T]
               >>> ListOrSet.__type_params__
               (T,)
               >>> type NotGeneric = int
               >>> NotGeneric.__type_params__
               ()

      -- Atributo: __value__

          O valor do apelido de tipo.  Isso é uma *note avaliação
          preguiçosa: 457, portanto, os nomes usados na definição do
          apelido não são resolvidos até que o atributo ‘__value__’ seja
          acessado:

               >>> type Mutually = Recursive
               >>> type Recursive = Mutually
               >>> Mutually
               Mutually
               >>> Recursive
               Recursive
               >>> Mutually.__value__
               Recursive
               >>> Recursive.__value__
               Mutually

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/

   (2) https://peps.python.org/pep-0695/

   (3) https://peps.python.org/pep-0695/

   (4) https://peps.python.org/pep-0646/

   (5) https://peps.python.org/pep-0695/

   (6) https://peps.python.org/pep-0695/

   (7) https://peps.python.org/pep-0612/


File: python.info,  Node: Outras diretivas especiais,  Prev: Criando tipos genéricos e apelidos de tipo,  Up: Tipos primitivos especiais

5.26.1.17 Outras diretivas especiais
....................................

Essas funções e classes não devem ser usadas diretamente como anotações.
O objetivo é que sejam blocos de construção para criar e declarar tipos.

 -- Classe: typing.NamedTuple

     Versão tipada de *note collections.namedtuple(): 1ca.

     Uso:

          class Employee(NamedTuple):
              name: str
              id: int

     Isso equivale a:

          Employee = collections.namedtuple('Employee', ['name', 'id'])

     Para dar um valor padrão a um campo, você pode atribuir um valor a
     ele no corpo da classe:

          class Employee(NamedTuple):
              name: str
              id: int = 3

          employee = Employee('Guido')
          assert employee.id == 3

     Campos com valor padrão devem vir depois de quaisquer campos sem
     valor padrão.

     A classe resultante tem um atributo extra ‘__annotations__’ que
     fornece um dicionário que mapeia os nomes de campos para os tipos
     de campos.  (Os nomes de campos estão no atributo ‘_fields’ e os
     valores padrões estão no atributo ‘_field_defaults’, e ambos fazem
     parte da API de *note namedtuple(): 1ca.)

     Subclasses de ‘NamedTuple’ também podem ter strings de documentação
     e métodos:

          class Employee(NamedTuple):
              """Representa um funcionário."""
              name: str
              id: int = 3

              def __repr__(self) -> str:
                  return f'<Employee {self.name}, id={self.id}>'

     Subclasses de ‘NamedTuple’ podem ser genéricas:

          class Group[T](NamedTuple):
              key: T
              group: list[T]

     Uso retrocompatível:

          # Para criar uma NamedTuple genérica em Python 3.11
          T = TypeVar("T")

          class Group(NamedTuple, Generic[T]):
              key: T
              group: list[T]

          # Também há suporte para a sintaxe funcional
          Employee = NamedTuple('Employee', [('name', str), ('id', int)])

     Alterado na versão 3.6: Adiciona suporte à sintaxe de anotação de
     variáveis da PEP 526(1).

     Alterado na versão 3.6.1: Adiciona suporte a valores padrões,
     métodos, e docstrings.

     Alterado na versão 3.8: Os atributos ‘_field_types’ e
     ‘__annotations__’ agora são dicionários regulares em vez de
     instâncias de ‘OrderedDict’.

     Alterado na versão 3.9: Remove o atributo ‘_field_types’ em favor
     do atributo mais padronizado ‘__annotations__’ que tem as mesmas
     informações.

     Alterado na versão 3.9: ‘NamedTuple’ is now a function rather than
     a class.  It can still be used as a class base, as described above.

     Alterado na versão 3.11: Adiciona suporte a tuplas nomeadas
     genéricas.

     Descontinuado desde a versão 3.13, será removido na versão 3.15: A
     sintaxe de argumentos nomeados não documentados para criar classes
     NamedTuple (‘NT = NamedTuple("NT", x=int)’) está descontinuado e
     será proibido na versão 3.15.  Em vez disso, use a sintaxe baseada
     em classes ou a sintaxe funcional.

     Descontinuado desde a versão 3.13, será removido na versão 3.15: Ao
     usar a sintaxe funcional para criar uma classe NamedTuple, não
     passar um valor para o parâmetro ‘fields’ (‘NT = NamedTuple("NT")’)
     está descontinuado.  Passar ‘None’ para o parâmetro ‘fields’ (‘NT =
     NamedTuple("NT", None)’) também está descontinuado.  Ambos não
     serão permitidos em Python 3.15.  Para criar uma classe NamedTuple
     com 0 campos, use ‘class NT(NamedTuple): pass’ ou ‘NT =
     NamedTuple("NT", [])’.

 -- Classe: typing.NewType (name, tp)

     Classe auxiliar para criar *note tipos únicos: 418a. com baixo
     custo.

     Um tipo ‘NewType’ é considerado um tipo distinto por um verificador
     de tipos.  Porém, em tempo de execução, chamar ‘NewType’ retorna
     seu argumento inalterado.

     Uso:

          UserId = NewType('UserId', int) # Declare o NewType "UserId"
          first_user = UserId(1) # "UserId" retorna o argumento inalterado em tempo de execução

      -- Atributo: __module__

          O nome do módulo no qual o novo tipo é definido.

      -- Atributo: __name__

          O nome do novo tipo.

      -- Atributo: __supertype__

          O tipo na qual o novo tipo é baseado.

     Adicionado na versão 3.5.2.

     Alterado na versão 3.10: ‘NewType’ agora é uma classe em vez de uma
     função.

 -- Classe: typing.Protocol (Generic)

     Classe base para classes de protocolo.

     Classes de protocolo são definidas assim:

          class Proto(Protocol):
              def meth(self) -> int:
                  ...

     Essas classes são usadas principalmente com verificadores de tipo
     estático que reconhecem a subtipagem estrutural (tipagem pato
     estática).  Por exemplo:

          class C:
              def meth(self) -> int:
                  return 0

          def func(x: Proto) -> int:
              return x.meth()

          func(C())  # Passa na verificação de tipos

     Consulte a PEP 544(2) para obter mais detalhes.  Classes de
     protocolo decoradas com *note runtime_checkable(): 443. (descritas
     posteriormente) funcionam como protocolos em tempo de execução
     simples, somente verificando a presença de determinados atributos,
     e ignorando suas assinaturas de tipo.  Classes de protocolo sem
     este decorador não podem ser usadas como o segundo argumento para
     *note isinstance(): 442. ou *note issubclass(): 7c2.

     Classes de protocolo podem ser genéricas.  Por exemplo:

          class GenProto[T](Protocol):
              def meth(self) -> T:
                  ...

     Em códigos que precisam ser compatíveis com Python 3.11 ou versões
     anteriores, protocolos genéricos podem ser escritos da seguinte
     forma:

          T = TypeVar("T")

          class GenProto(Protocol[T]):
              def meth(self) -> T:
                  ...

     Adicionado na versão 3.8.

 -- Função: @typing.runtime_checkable

     Marca uma classe de protocolo como um protocolo de tempo de
     execução.

     Esse protocolo pode ser usado com *note isinstance(): 442. e *note
     issubclass(): 7c2.  Isso permite uma verificação estrutural
     simples, muito semelhante a “pôneis de um truque só” em *note
     collections.abc: 1e, como *note Iterable: 23e2.  Por exemplo:

          @runtime_checkable
          class Closable(Protocol):
              def close(self): ...

          assert isinstance(open('/some/file'), Closable)

          @runtime_checkable
          class Named(Protocol):
              name: str

          import threading
          assert isinstance(threading.Thread(name='Bob'), Named)

     Este decorador levanta *note TypeError: 2c3. quando aplicado a uma
     classe não-protocolo.

          Nota: ‘runtime_checkable()’ verificará apenas a presença dos
          métodos ou atributos obrigatórios, em vez de tipos ou
          assinaturas de tipos.  Por exemplo, o *note ssl.SSLObject:
          b99. é uma classe e, portanto, passa por uma verificação *note
          issubclass(): 7c2. em relação a *note Callable: 2404.  No
          entanto, o método ‘ssl.SSLObject.__init__’ existe apenas para
          levantar um *note TypeError: 2c3. com uma mensagem mais
          informativa, o que impossibilita chamar (instanciar) o *note
          ssl.SSLObject: b99.

          Nota: uma verificação com *note isinstance(): 442. sobre um
          protocolo verificável em tempo de execução pode ser
          surpreendentemente lenta se comparada a uma verificação
          ‘isinstance()’ sobre outros tipos de classe.  Considere usar
          expressões alternativas, como chamar a função *note hasattr():
          4d2. para realizar verificações estruturais em código sensível
          a desempenho.

     Adicionado na versão 3.8.

     Alterado na versão 3.12: A implementação interna do *note
     isinstance(): 442. agora verifica os protocolos verificáveis em
     tempo de execução usando *note inspect.getattr_static(): 494. para
     procurar o atributo (anteriormente, era usado *note hasattr():
     4d2.).  Como resultado, alguns objetos que costumavam ser
     considerados instâncias de um protoloco verifiável em tempo de
     execução podem não ser mais considerados instâncias desse protocolo
     em Python 3.12+, e vice-versa.  É improvável que a maioria dos
     usuários seja afetada por essa alteração.

     Alterado na versão 3.12: Os membros de um protocolo verificável em
     tempo de execução agora serão considerados “congelados” em tempo de
     execução assim que a classe for criada.  A alteração dinâmica de
     atributos de um protocolo em tempo de execução ainda funcionará,
     mas não terá impacto nas verificações de *note isinstance(): 442.
     ao comparar objetos com o protocolo.  Consulte o *note O que há de
     novo no Python 3.12: 4d1. para mais detalhes.

 -- Classe: typing.TypedDict (dict)

     Special construct to add type hints to a dictionary.  At runtime
     “‘TypedDict’ instances” are simply *note dicts: 256.

     ‘TypedDict’ declara um tipo dicionário que espera que todas as suas
     instâncias tenham um determinado conjunto de chaves, onde cada
     chave está associada a um valor de um tipo consistente.  Essa
     expectativa não é verificada em tempo de execução, mas é imposta
     apenas por verificadores de tipos.  Modo de usar:

          class Point2D(TypedDict):
              x: int
              y: int
              label: str

          a: Point2D = {'x': 1, 'y': 2, 'label': 'good'}  # OK
          b: Point2D = {'z': 3, 'label': 'bad'}           # Falha na verificação de tipos

          assert Point2D(x=1, y=2, label='first') == dict(x=1, y=2, label='first')

     Um modo alternativo de criar um ‘TypedDict’ é usando a sintaxe de
     chamada de função.  O segundo argumento deve ser um *note dict:
     256.:

          Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': str})

     Esta sintaxe funcional permite definirmos chaves usando *note
     identificadores: 2021. inválidos, por exemplo, por serem
     palavras-chave ou conterem hífens, ou quando os nomes das chaves
     não devem ser *note desconfigurados: 1e43. como nomes privados
     comuns:

          # levanta SyntaxError
          class Point2D(TypedDict):
              in: int  # 'in' é uma palavra reservada
              x-y: int  # nome com hífen

          class Definition(TypedDict):
              __schema: str  # desconfigurado para `_Definition__schema`

          # OK, sintaxe funcional
          Point2D = TypedDict('Point2D', {'in': int, 'x-y': int})
          Definition = TypedDict('Definition', {'__schema': str})  # não desconfigurado

     Por padrão, todas as chaves devem estar presentes em um
     ‘TypedDict’.  É possível marcar chaves individuais como
     não-obrigatórias usando *note NotRequired: 5c5.:

          class Point2D(TypedDict):
              x: int
              y: int
              label: NotRequired[str]

          # Sintaxe alternativa
          Point2D = TypedDict('Point2D', {'x': int, 'y': int, 'label': NotRequired[str]})

     Isso significa que um ‘TypedDict’ ‘Point2D’ pode ter a chave
     ‘label’ omitida.

     Também é possível marcar todas as chaves como não necessárias por
     padrão, especificando a totalidade como ‘False’:

          class Point2D(TypedDict, total=False):
              x: int
              y: int

          # Sintaxe alternativa
          Point2D = TypedDict('Point2D', {'x': int, 'y': int}, total=False)

     Isso significa que um ‘TypedDict’ ‘Point2D’ pode ter qualquer uma
     de suas chaves omitidas.  Espera-se que um verificador de tipos
     apenas permita os literais ‘False’ ou ‘True’ como valores do
     argumento ‘total’.  ‘True’ é o padrão, e todos os itens definidos
     no corpo da classe tornam-se obrigatórios.

     As chaves individuais de um ‘TypedDict’ com ‘total=False’ podem ser
     marcadas como obrigatórias usando *note Required: 5c4.:

          class Point2D(TypedDict, total=False):
              x: Required[int]
              y: Required[int]
              label: str

          # Sintaxe alternativa
          Point2D = TypedDict('Point2D', {
              'x': Required[int],
              'y': Required[int],
              'label': str
          }, total=False)

     É possível que um tipo ‘TypedDict’ herde de um ou mais tipos
     ‘TypedDict’ usando a sintaxe baseada em classes.  Modo de usar:

          class Point3D(Point2D):
              z: int

     ‘Point3D’ tem três itens: ‘x’, ‘y’ e ‘z’.  Equivale a esta
     definição:

          class Point3D(TypedDict):
              x: int
              y: int
              z: int

     Um ‘TypedDict’ não pode herdar de uma classe não ‘TypedDict’,
     exceto *note Generic: 15d7.  Por exemplo:

          class X(TypedDict):
              x: int

          class Y(TypedDict):
              y: int

          class Z(object): pass  # Uma classe não TypedDict

          class XY(X, Y): pass  # OK

          class XZ(X, Z): pass  # levanta TypeError

     Um ‘TypedDict’ pode ser genérico:

          class Group[T](TypedDict):
              key: T
              group: list[T]

     Para criar um ‘TypedDict’ genérico que seja compatível com Python
     3.11 ou inferior, herde de *note Generic: 15d7. explicitamente:

          T = TypeVar("T")

          class Group(TypedDict, Generic[T]):
              key: T
              group: list[T]

     Um ‘TypedDict’ pode ser inspecionado por meio de dicionários de
     anotações (consulte *note Boas práticas para anotações: 7da. para
     obter mais informações sobre as melhores práticas de anotações),
     *note __total__: 41b9, *note __required_keys__: 41ba. e *note
     __optional_keys__: 41bb.

      -- Atributo: __total__

          ‘Point2D.__total__’ fornece o valor do argumento ‘total’.
          Exemplo:

               >>> from typing import TypedDict
               >>> class Point2D(TypedDict): pass
               >>> Point2D.__total__
               True
               >>> class Point2D(TypedDict, total=False): pass
               >>> Point2D.__total__
               False
               >>> class Point3D(Point2D): pass
               >>> Point3D.__total__
               True

          Esse atributo reflete 'apenas' o valor do argumento ‘total’
          para a classe ‘TypedDict’ atual, e não que a classe é
          semanticamente total.  Por exemplo, um ‘TypedDict’ com
          ‘__total__’ definido como ‘True’ pode ter chaves marcadas com
          *note NotRequired: 5c5, ou pode herdar de outro ‘TypedDict’
          com ‘total=False’.  Portanto, geralmente é melhor usar *note
          __required_keys__: 41ba. e *note __optional_keys__: 41bb. para
          introspecção.

      -- Atributo: __required_keys__

          Adicionado na versão 3.9.

      -- Atributo: __optional_keys__

          ‘Point2D.__required_keys__’ e ‘Point2D.__optional_keys__’
          retornam objetos *note frozenset: 5da. contendo chaves
          obrigatórias e opcionais, respectivamente.

          As chaves marcadas com *note Required: 5c4. sempre aparecerão
          em ‘__required_keys__’ e as chaves marcadas com *note
          NotRequired: 5c5. sempre aparecerão em ‘__optional_keys__’.

          Para manter a retrocompatibilidade com Python 3.10 e versões
          anteriores, também é possível usar herança para declarar
          chaves obrigatórias e opcionais no mesmo ‘TypedDict’.  Isso é
          feito declarando um ‘TypedDict’ com um valor para o argumento
          ‘total’ e então herdando-a em outro ‘TypedDict’ usando um
          valor ‘total’ diferente:

               >>> class Point2D(TypedDict, total=False):
               ...     x: int
               ...     y: int
               ...
               >>> class Point3D(Point2D):
               ...     z: int
               ...
               >>> Point3D.__required_keys__ == frozenset({'z'})
               True
               >>> Point3D.__optional_keys__ == frozenset({'x', 'y'})
               True

          Adicionado na versão 3.9.

               Nota: Se ‘from __future__ import annotations’ for usado
               ou se anotações forem fornecidas como strings, as
               anotações não serão avaliadas quando o ‘TypedDict’ for
               definido.  Portanto, a introspecção em tempo de execução
               da qual ‘__required_keys__’ e ‘__optional_keys__’
               dependem pode não funcionar corretamente, e os valores
               dos atributos podem estar incorretos.

     O suporte para *note ReadOnly: 161. está refletido nos seguintes
     atributos:

      -- Atributo: __readonly_keys__

          Um *note frozenset: 5da. contendo os nomes de todas as chaves
          somente para leitura.  As chaves são somente para leitura se
          tiverem o qualificador *note ReadOnly: 161.

          Adicionado na versão 3.13.

      -- Atributo: __mutable_keys__

          Um *note frozenset: 5da. contendo os nomes de todas as chaves
          mutáveis.  As chaves são mutáveis se não tiverem o
          qualificador *note ReadOnly: 161.

          Adicionado na versão 3.13.

     Consulte PEP 589(3) para obter mais exemplos e regras detalhadas
     sobre o uso de ‘TypedDict’.

     Adicionado na versão 3.8.

     Alterado na versão 3.9: ‘TypedDict’ is now a function rather than a
     class.  It can still be used as a class base, as described above.

     Alterado na versão 3.11: Adicionado suporte para marcar chaves
     individuais como *note Required: 5c4. ou *note NotRequired: 5c5.
     Consulte PEP 655(4).

     Alterado na versão 3.11: Adicionado suporte para ‘TypedDict’s
     genéricos.

     Alterado na versão 3.13: Removeu suporte para o método de argumento
     nomeado para criar ‘TypedDict’s.

     Alterado na versão 3.13: Adiciona suporte ao qualificador *note
     ReadOnly: 161.

     Descontinuado desde a versão 3.13, será removido na versão 3.15: Ao
     usar a sintaxe funcional para criar uma classe TypedDict, não
     passar um valor para o parâmetro ‘fields’ (‘TD = TypedDict("TD")’)
     está descontinuado.  Passar ‘None’ para o parâmetro ‘fields’ (‘TD =
     TypedDict("TD", None)’) também está descontinuado.  Ambos não serão
     permitidos em Python 3.15.  Para criar uma classe TypedDict com 0
     campos, use ‘class TD(TypedDict): pass’ ou ‘TD = TypedDict("TD",
     {})’.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0526/

   (2) https://peps.python.org/pep-0544/

   (3) https://peps.python.org/pep-0589/

   (4) https://peps.python.org/pep-0655/


File: python.info,  Node: Protocolos<3>,  Next: ABCs para trabalhar com E/S,  Prev: Tipos primitivos especiais,  Up: Conteúdo do módulo<7>

5.26.1.18 Protocolos
....................

Os protocolos a seguir são fornecidos pelo módulo ‘typing’.  Todos são
decorados com *note @runtime_checkable: 443.

 -- Classe: typing.SupportsAbs

     Um ABC com um método abstrato ‘__abs__’ que é covariante em seu
     tipo de retorno.

 -- Classe: typing.SupportsBytes

     Um ABC com um método abstrato ‘__bytes__’.

 -- Classe: typing.SupportsComplex

     Um ABC com um método abstrato ‘__complex__’.

 -- Classe: typing.SupportsFloat

     Um ABC com um método abstrato ‘__float__’.

 -- Classe: typing.SupportsIndex

     Um ABC com um método abstrato ‘__index__’.

     Adicionado na versão 3.8.

 -- Classe: typing.SupportsInt

     Um ABC com um método abstrato ‘__int__’.

 -- Classe: typing.SupportsRound

     Uma ABC com um método abstrato ‘__round__’ que é covariante em seu
     tipo de retorno.


File: python.info,  Node: ABCs para trabalhar com E/S,  Next: Funções e decoradores,  Prev: Protocolos<3>,  Up: Conteúdo do módulo<7>

5.26.1.19 ABCs para trabalhar com E/S
.....................................

 -- Classe: typing.IO
 -- Classe: typing.TextIO
 -- Classe: typing.BinaryIO

     O tipo genérico ‘IO[AnyStr]’ e suas subclasses ‘TextIO(IO[str])’ e
     ‘BinaryIO(IO[bytes])’ representam os tipos de fluxos de E/S, como
     os retornados por *note open(): 51c.


File: python.info,  Node: Funções e decoradores,  Next: Auxiliares de introspecção,  Prev: ABCs para trabalhar com E/S,  Up: Conteúdo do módulo<7>

5.26.1.20 Funções e decoradores
...............................

 -- Função: typing.cast (typ, val)

     Converta um valor em um tipo.

     Isso retorna o valor inalterado.  Para o verificador de tipos, isso
     indica que o valor de retorno tem o tipo designado, mas em tempo de
     execução não verificamos nada intencionalmente (queremos que isso
     seja o mais rápido possível).

 -- Função: typing.assert_type (val, typ, /)

     Pede para um verificador de tipo estático confirmar se 'val' tem
     tipo inferido 'typ'.

     Essa função faz nada em tempo de execução: ela retorna o primeiro
     argumento inalterado, sem verificações ou efeitos colaterais,
     independentemente do tipo real do argumento.

     Quando um verificador de tipo estático encontra uma chamada para
     ‘assert_type()’, ele emite um erro se o valor não for do tipo
     especificado:

          def greet(name: str) -> None:
              assert_type(name, str) # OK, o tipo inferido de `name` é `str`
              assert_type(name, int) # erro no verificador de tipos

     Esse função é útil para garantir que o verificador de tipos entende
     um script conforme as intenções do desenvolvedor:

          def complex_function(arg: object):
              # Realiza alguma lógica complexa de restrição de tipos
              # após a qual esperamos que o tipo seja `int`
              ...
              # Testa se o verificador de tipos entendeu nossa função corretamente
              assert_type(arg, int)

     Adicionado na versão 3.11.

 -- Função: typing.assert_never (arg, /)

     Pede ao verificador de tipo estático para confirmar se uma linha de
     código é inalcançável.

     Exemplo:

          def int_or_str(arg: int | str) -> None:
              match arg:
                  case int():
                      print("É um int")
                  case str():
                      print("É um str")
                  case _ as unreachable:
                      assert_never(unreachable)

     Aqui, as anotações permitem que o verificador de tipos deduza que o
     último caso nunca será executado, pois ‘arg’ é um *note int: 257.
     ou uma *note str: 44c, e ambas as opções são cobertas por casos
     anteriores.

     Se um verificador de tipos descobrir que uma chamada para
     ‘assert_never()’ é alcançável, ele emitirá um erro.  Por exemplo,
     se a anotação de tipo para ‘arg’ fosse ‘int | str | float’, o
     verificador de tipos emitiria um erro indicando que ‘unreachable’ é
     do tipo *note float: 2f7.  Para que uma chamada para ‘assert_never’
     passe verificação de tipos, o tipo inferido do argumento passado
     deve ser o tipo inferior, *note Never: 6a8, e nada mais.

     Em tempo de execução, essa função levanta uma exceção quando
     chamada.

     Ver também
     ..........

     Unreachable Code and Exhaustiveness Checking(1) tem mais
     informações sobre a verificação de exaustividade com tipagem
     estática.

     Adicionado na versão 3.11.

 -- Função: typing.reveal_type (obj, /)

     Pede para um verificador de tipo estático revelar o tipo inferido
     de uma expressão.

     Quando um verificador de tipo estático encontra uma chamada para
     essa função, ele emite um diagnóstico com o tipo inferido do
     argumento.  Por exemplo:

          x: int = 1
          reveal_type(x) # O tipo revelado é "builtins.int"

     Isso pode ser útil quando você deseja depurar como o verificador de
     tipos lida com um determinado trecho de código.

     Em tempo de execução, esta função envia o tipo de seu argumento
     para *note sys.stderr: 940. e retorna o argumento inalterado
     (permitindo que a chamada seja usada em uma expressão):

          x = reveal_type(1)  # exibe "Runtime type is int"
          print(x)  # exibe "1"

     Observe que o tipo em tempo de execução pode ser diferente (mais ou
     menos específico) do tipo inferido estaticamente por um verificador
     de tipos.

     A maioria dos verificadores de tipos dá suporte a ‘reveal_type()’
     em qualquer lugar, mesmo que o nome não seja importado de ‘typing’.
     Porém, importar o nome de ‘typing’ permite que o código seja
     executado sem erros em tempo de execução e comunica a intenção com
     mais clareza.

     Adicionado na versão 3.11.

 -- Função: @typing.dataclass_transform (*, eq_default=True,
          order_default=False, kw_only_default=False,
          frozen_default=False, field_specifiers=(), **kwargs)

     Um decorador que marca um objeto como tendo comportamento similar a
     uma *note dataclass: 1cb.

     ‘dataclass_transform’ pode ser usado para decorar uma classe,
     metaclasse, ou função decoradora.  A presença de
     ‘@dataclass_transform()’ informa a um verificador de tipo estático
     que o objeto decorado executa “mágica” em tempo de execução que
     transforma uma classe de maneira semelhante a *note
     @dataclasses.dataclass: 1cb.

     Exemplo de uso com a função decoradora:

          @dataclass_transform()
          def create_model[T](cls: type[T]) -> type[T]:
              ...
              return cls

          @create_model
          class CustomerModel:
              id: int
              name: str

     Em uma classe base:

          @dataclass_transform()
          class ModelBase: ...

          class CustomerModel(ModelBase):
              id: int
              name: str

     Em uma metaclasse:

          @dataclass_transform()
          class ModelMeta(type): ...

          class ModelBase(metaclass=ModelMeta): ...

          class CustomerModel(ModelBase):
              id: int
              name: str

     As classes ‘CustomerModel’ definidas acima serão tratadas pelos
     verificadores de tipos semelhantemente às classes criadas com *note
     @dataclasses.dataclass: 1cb.  Por exemplo, os verificadores de tipo
     presumirão que essas classes têm métodos ‘__init__’ que aceitam
     ‘id’ e ‘name’.

     A classe, metaclasse ou função decorada pode aceitar os seguintes
     argumentos booleanos tal que verificadores de tipo presumirão ter o
     mesmo efeito que teriam no decorador *note @dataclasses.dataclass:
     1cb.: ‘init’, ‘eq’, ‘order’, ‘unsafe_hash’, ‘frozen’, ‘match_args’,
     ‘kw_only’, e ‘slots’.  É necessário que o valor desses argumentos
     (‘True’ ou ‘False’) seja avaliado estaticamente.

     Os argumentos do decorador ‘dataclass_transform’ podem ser usados
     para personalizar o comportamento padrão da classe, metaclasse, ou
     função decorada:


     Parâmetros:

        * ‘eq_default’ (*note bool: 468.) – Indica se o parâmetro ‘eq’ é
          presumido como ‘True’ ou ‘False’ se for omitido pelo chamador.
          O padrão é ‘True’.

        * ‘order_default’ (*note bool: 468.) – Indica se o parâmetro
          ‘order’ é presumido como ‘True’ ou ‘False’ se for omitido pelo
          chamador.  O padrão é ‘False’.

        * ‘kw_only_default’ (*note bool: 468.) – Indica se o parâmetro
          ‘kw_only’ é presumido como ‘True’ ou ‘False’ se for omitido
          pelo chamador.  O padrão é ‘False’.

        * ‘frozen_default’ (*note bool: 468.) – Indica se o parâmetro
          ‘frozen’ é presumido como ‘True’ ou ‘False’ se for omitido
          pelo chamador.  O padrão é ‘False’.  Added in version 3.12

        * ‘field_specifiers’ (*note tuple: 370.‘[’*note Callable:
          7ec.‘[’‘...’‘, ’‘Any’‘]’‘, ’‘...’‘]’) – Especifica uma lista
          estática de classes ou funções compatíveis que descrevem
          campos, semelhante a *note dataclasses.field(): 1b98.  O valor
          padrão é ‘()’.

        * ‘**kwargs’ (‘Any’) – Outros argumentos nomeados arbitrários
          são aceitos para permitir possíveis futuras extensões.

     Verificadores de tipo reconhecem os seguintes parâmetros opcionais
     em especificadores de campos: 'Parâmetros reconhecidos para
     especificadores de campos'

     Nome do parâmetro        Descrição
                              
     --------------------------------------------------------------------------------------------------------------
                              
     ‘init’                   Indica se o campo deve ser incluído no método ‘__init__’ sintetizado.  Se não for
                              especificado, o valor padrão de ‘init’ é ‘True’.
                              
                              
     ‘default’                Fornece o valor padrão do campo.
                              
                              
     ‘default_factory’        Fornece uma função de retorno de tempo de execução que retorna o valor padrão do
                              campo.  Se nem ‘default’ nem ‘default_factory’ forem especificados, o campo é
                              presumido como sem valor padrão e deverá receber um valor quando a classe for
                              instanciada.
                              
                              
     ‘factory’                Um apelido para o parâmetro ‘default_factory’ em especificadores de campos.
                              
                              
     ‘kw_only’                Indica se o campo deve ser marcado como somente-nomeado.  Se verdadeiro, o campo
                              será somente-nomeado.  Se falso, não será somente-nomeado.  Se não for
                              especificado, será usado o valor do parâmetro ‘kw_only’ do objeto decorado com
                              ‘dataclass_transform’ ou, se este não for especificado, será usado o valor de
                              ‘kw_only_default’ no ‘dataclass_transform’.
                              
                              
     ‘alias’                  Fornece um nome alternativo para o campo.  Esse nome alternativo é usado no método
                              ‘__init__’ sintetizado.
                              

     Em tempo de execução, esse decorador registra seu argumento no
     atributo ‘__dataclass_transform__’ no objeto decorado.  Ele não tem
     nenhum outro efeito em tempo de execução.

     Veja PEP 681(2) para mais detalhes.

     Adicionado na versão 3.11.

 -- Função: @typing.overload

     Decorador para criar funções e métodos sobrecarregados.

     O decorador ‘@overload’ permite descrever funções e métodos com
     suporte a várias combinações de tipos de argumento.  Uma sequência
     de definições decoradas com ‘@overload’ deve preceder uma única
     definição não decorada por ‘@overload’ (para a mesma
     função/método).

     Definições decoradas com ‘@overload’ são usadas somente para
     benefício do verificador de tipos, já que serão sobrescritas por
     definições sem decoração de ‘@overload’.  Enquanto isso, definições
     sem decoração de ‘@overload’ serão usadas em tempo de execução, mas
     devem ser ignoradas pelo verificador de tipos.  Em tempo de
     execução, chamar uma função decorada por ‘@overload’ diretamente
     levantará *note NotImplementedError: 228.

     Um exemplo de sobrecarga que fornece um tipo mais preciso do que o
     expressar o tipo expresso por uma união ou um tipo variável:

          @overload
          def process(response: None) -> None:
              ...
          @overload
          def process(response: int) -> tuple[int, str]:
              ...
          @overload
          def process(response: bytes) -> str:
              ...
          def process(response):
              ...  # a implementação real vem aqui

     Consulte PEP 484(3) para mais detalhes e uma comparação com outras
     semânticas de tipagem.

     Alterado na versão 3.11: Funções sobrecarregadas agora podem ser
     inspecionadas em tempo de execução usando *note get_overloads():
     6ae.

 -- Função: typing.get_overloads (func)

     Retorna uma sequência de definições de 'func' decoradas com *note
     @overload: 41c6.

     'func' é o objeto função para a implementação da função
     sobrecarregada.  Por exemplo, dada a definição de ‘process’ na
     documentação de *note @overload: 41c6, ‘get_overloads(process)’
     retornará uma sequência de três objetos função para as três
     sobrecargas definidas.  Se for chamada em uma função sem
     sobrecargas, ‘get_overloads()’ retornará uma sequência vazia.

     A função ‘get_overloads()’ pode ser usada em tempo de execução para
     introspecção de uma função sobrecarregada.

     Adicionado na versão 3.11.

 -- Função: typing.clear_overloads ()

     Apaga todas as sobrecargas registradas no registro interno.

     Isso pode ser usado para recuperar a memória usada pelo registro.

     Adicionado na versão 3.11.

 -- Função: @typing.final

     Um decorador para indicar métodos e classes finais.

     Decorar um método com ‘@final’ indica a um verificador de tipos que
     o método não pode ser substituído em uma subclasse.  Decorar uma
     classe com ‘@final’ indica que ela não pode ser herdada.

     Por exemplo:

          class Base:
              @final
              def done(self) -> None:
                  ...
          class Sub(Base):
              def done(self) -> None:  # Erro reportado pelo verificador de tipos
                  ...

          @final
          class Leaf:
              ...
          class Other(Leaf):  # Erro reportado pelo verificador de tipos
              ...

     Não há verificação em tempo de execução dessas propriedades.  Veja
     PEP 591(4) para mais detalhes.

     Adicionado na versão 3.8.

     Alterado na versão 3.11: O decorador tentará definir um atributo
     ‘__final__’ como ‘True’ no objeto decorado.  Assim, uma verificação
     como ‘if getattr(obj, "__final__", False)’ pode ser usada em tempo
     de execução para determinar se um objeto ‘obj’ foi marcado como
     final.  Se o objeto decorado não tem suporte a definição de
     atributos, o decorador retorna o objeto inalterado sem levantar uma
     exceção.

 -- Função: @typing.no_type_check

     Decorador para indicar que anotações não são dicas de tipo.

     Isso funciona como *note decorator: 731. de uma classe ou função.
     Com uma classe, ele se aplica recursivamente a todos os métodos e
     classes definidos nessa classe (mas não a métodos definidos em suas
     superclasses ou subclasses).  Os verificadores de tipos ignorarão
     todas as anotações em uma função ou classe com este decorador.

     ‘@no_type_check’ modifica o objeto decorado internamente.

 -- Função: @typing.no_type_check_decorator

     Decorador para dar a outro decorador o efeito *note
     no_type_check(): 6b4.

     Isso envolve o decorador com algo que envolve a função decorada em
     *note no_type_check(): 6b4.

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     Nenhum verificador de tipos jamais adicionou suporte para
     ‘@no_type_check_decorator’.  Portanto, ele está descontinuado e
     será removido no Python 3.15.

 -- Função: @typing.override

     Decorador para indicar que um método em uma subclasse deve
     substituir um método ou atributo em uma superclasse.

     Os verificadores de tipo devem emitir um erro se um método decorado
     com ‘@override’ substitui nada.  Isso ajuda a evitar erros que
     podem ocorrer quando uma classe base muda sem uma mudança
     equivalente em uma classe filha.

     Por exemplo:

          class Base:
              def log_status(self) -> None:
                  ...

          class Sub(Base):
              @override
              def log_status(self) -> None:  # OK: substitui Base.log_status
                  ...

              @override
              def done(self) -> None:  # Erro reportado pelo verificador de tipos
                  ...

     Não há verificação desta propriedade em tempo de execução.

     O decorador tentará definir um atributo ‘__override__’ como ‘True’
     no objeto decorado.  Assim, uma verificação como ‘if getattr(obj,
     "__override__", False)’ poderá ser usada em tempo de execução para
     determinar se um objeto ‘obj’ foi marcado como uma substituição.
     Se o objeto decorado não der suporte à atribuição de atributos, o
     decorador retorna o objeto inalterado sem levantar uma exceção.

     Consulte PEP 698(5) para obter mais detalhes.

     Adicionado na versão 3.12.

 -- Função: @typing.type_check_only

     Decorador para marcar uma classe ou função como indisponível em
     tempo de execução.

     Este decorador em si não está disponível em tempo de execução.  Seu
     objetivo principal é marcar classes definidas em arquivos de tipo
     stub se uma implementação retornar uma instância de uma classe
     privada:

          @type_check_only
          class Response:  # privado ou indisponível em tempo de execução
              code: int
              def get_header(self, name: str) -> str: ...

          def fetch_response() -> Response: ...

     Observe que retornar instâncias de classes privadas não é
     recomendado.  Normalmente, é preferível tornar essas classes
     públicas.

   ---------- Footnotes ----------

   (1) https://tipagem.Python.org/en/latest/guides/unreachable.html

   (2) https://peps.python.org/pep-0681/

   (3) https://peps.python.org/pep-0484/

   (4) https://peps.python.org/pep-0591/

   (5) https://peps.python.org/pep-0698/


File: python.info,  Node: Auxiliares de introspecção,  Next: Constante,  Prev: Funções e decoradores,  Up: Conteúdo do módulo<7>

5.26.1.21 Auxiliares de introspecção
....................................

 -- Função: typing.get_type_hints (obj, globalns=None, localns=None,
          include_extras=False)

     Retorna um dicionário contendo dicas de tipo para uma função,
     método, módulo ou objeto classe.

     Geralmente é o mesmo que ‘obj.__annotations__’, mas esta função faz
     as seguintes alterações no dicionário de anotações:

        * Referências futuras codificadas como literais de string ou
          objetos *note ForwardRef: 1964. são tratados avaliando-as em
          'globalns', 'localns' e (quando aplicável) no espaço de nomes
          de *note parâmetro de tipo: 2b3. de 'obj'.  Se 'globalns' ou
          'localns' não forem fornecidos, os dicionários de espaço de
          nomes apropriados serão inferidos de 'obj'.

        * ‘None’ é substituído por *note types.NoneType: 855.

        * Se *note @no_type_check: 6b4. tiver sido aplicada a 'obj',
          será retornado um dicionário vazio.

        * Se 'obj' for uma classe ‘C’, a função retorna um dicionário
          que mescla anotações das classes base de ‘C’ com as de ‘C’
          diretamente.  Isso é feito percorrendo *note C.__mro__: 20bb.
          e combinando iterativamente os dicionários ‘__annotations__’.
          Anotações em classes que aparecem antes na *note ordem de
          resolução de métodos: 2316. sempre tem precedência sobre
          anotações em classes que aparecem depois no ordem de resolução
          de métodos.

        * A função substitui recursivamente todas as ocorrências de
          ‘Annotated[T, ...]’, ‘Required[T]’, ‘NotRequired[T]’ e
          ‘ReadOnly[T]’ por ‘T’, a menos que 'include_extras' seja
          definido como ‘True’ (consulte *note Annotated: 944. para
          obter mais informações).

     Veja também *note inspect.get_annotations(): 816, uma função de
     nível mais baixo que retorna anotações mais diretamente.

          Nota: Se alguma referência futura nas anotações de 'obj' não
          for resolvível ou não for código Python válido, esta função
          levantará uma exceção como *note NameError: 43f.  Por exemplo,
          isso pode acontecer com *note apelidos de tipo: 454.
          importados que incluem referências futuras, ou com nomes
          importados em *note if TYPE_CHECKING: d15.

     Alterado na versão 3.9: Adiciona o parâmetro ‘include_extras’ como
     parte da PEP 593(1).  Consulte a documentação em *note Annotated:
     944. para mais informações.

     Alterado na versão 3.11: Anteriormente, ‘Optional[t]’ era
     adicionado a anotações de funções e métodos se um valor padrão
     igual a ‘None’ fosse definido.  Agora, a anotação é retornada
     inalterada.

 -- Função: typing.get_origin (tp)

     Obtenha o versão sem subscrição de um tipo: para um objeto cujo
     tipo tem a forma ‘X[Y, Z, ...]’, retorna ‘X’ .

     Se ‘X’ for um apelido do módulo typing para uma classe embutida ou
     classe de *note collections: 1d, ele será normalizado para a classe
     original.  Se ‘X’ for uma instância de *note ParamSpecArgs: 7c7. ou
     *note ParamSpecKwargs: 7c8, retorna o *note ParamSpec: 15e.
     subjacente.  Retorna ‘None’ para objetos incompatíveis.

     Exemplos:

          assert get_origin(str) is None
          assert get_origin(Dict[str, int]) is dict
          assert get_origin(Union[int, str]) is Union
          assert get_origin(Annotated[str, "metadata"]) is Annotated
          P = ParamSpec('P')
          assert get_origin(P.args) is P
          assert get_origin(P.kwargs) is P

     Adicionado na versão 3.8.

 -- Função: typing.get_args (tp)

     Obtenha os argumentos de tipos com todas as substituições
     realizadas: para um objeto cujo tipo tem a forma ‘X[Y, Z, ...]’,
     retorna ‘(Y, Z, ...)’ .

     Se ‘X’ for uma união ou um *note Literal: 858, e estiver contido em
     outro tipo genérico, a ordem de ‘(Y, Z, ...)’ poderá ser diferente
     da ordem dos argumentos originais ‘[Y, Z, ...]’ devido ao
     armazenamento dos tipos em cache.  Retorna ‘()’ para objetos sem
     suporte.

     Exemplos:

          assert get_args(int) == ()
          assert get_args(Dict[int, str]) == (int, str)
          assert get_args(Union[int, str]) == (int, str)

     Adicionado na versão 3.8.

 -- Função: typing.get_protocol_members (tp)

     Retorna o conjunto de membros definidos em um *note Protocol: 264.

          >>> from typing import Protocol, get_protocol_members
          >>> class P(Protocol):
          ...     def a(self) -> str: ...
          ...     b: int
          >>> get_protocol_members(P) == frozenset({'a', 'b'})
          True

     Levanta *note TypeError: 2c3. para argumentos que não são
     protocolos.

     Adicionado na versão 3.13.

 -- Função: typing.is_protocol (tp)

     Determina se um tipo é um *note Protocol: 264.

     Por exemplo:

          class P(Protocol):
              def a(self) -> str: ...
              b: int

          is_protocol(P)    # => True
          is_protocol(int)  # => False

     Adicionado na versão 3.13.

 -- Função: typing.is_typeddict (tp)

     Verifica se um tipo é um *note TypedDict: 162.

     Por exemplo:

          class Film(TypedDict):
              title: str
              year: int

          assert is_typeddict(Film)
          assert not is_typeddict(list | str)

          # TypedDict é uma fábrica para criar dicionários tipados
          # e não um dicionário tipado em si.
          assert not is_typeddict(TypedDict)

     Adicionado na versão 3.10.

 -- Classe: typing.ForwardRef

     Classe usada para representação de tipagem interna de referências
     futuras como strings.

     Por exemplo, o tipo ‘List["SomeClass"]’ é implicitamente
     transformado em ‘List[ForwardRef("SomeClass")]’.  ‘ForwardRef’ não
     deve ser instanciado por um usuário, mas pode ser usado por
     ferramentas de introspecção.

          Nota: Tipos genéricos da PEP 585(2) como ‘list["SomeClass"]’
          não serão transformados implicitamente em
          ‘list[ForwardRef("SomeClass")]’ e, portanto, não serão
          resolvidos automaticamente para ‘list[SomeClass]’.

     Adicionado na versão 3.7.4.

 -- Dado: typing.NoDefault

     Um objeto sinalizador usado para indicar que um parâmetro de tipo
     não possui valor-padrão.  Por exemplo:

          >>> T = TypeVar("T")
          >>> T.__default__ is typing.NoDefault
          True
          >>> S = TypeVar("S", default=None)
          >>> S.__default__ is None
          True

     Adicionado na versão 3.13.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0593/

   (2) https://peps.python.org/pep-0585/


File: python.info,  Node: Constante,  Next: Apelidos descontinuados,  Prev: Auxiliares de introspecção,  Up: Conteúdo do módulo<7>

5.26.1.22 Constante
...................

 -- Dado: typing.TYPE_CHECKING

     Uma constante especial presumida ser ‘True’ por verificadores de
     tipo estático de terceiros.  É ‘False’ em tempo de execução.

     Uso:

          if TYPE_CHECKING:
              import expensive_mod

          def fun(arg: 'expensive_mod.SomeType') -> None:
              local_var: expensive_mod.AnotherType = other_fun()

     A primeira anotação de tipo deve ser colocada entre aspas,
     tornando-a uma “referência futura”, para esconder do interpretador
     a referência ao módulo ‘expensive_mod’.  As anotações de tipos em
     variáveis locais não são avaliadas, então a segunda anotação não
     precisa ser colocada entre aspas.

          Nota: Se ‘from __future__ import annotations’ for usado,
          anotações não serão avaliadas no momento de definição de
          funções.  Em vez disso, elas são armazenadas como string em
          ‘__annotations__’.  Isso torna desnecessário o uso de aspas em
          anotações (consulte PEP 563(1)).

     Adicionado na versão 3.5.2.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0563/


File: python.info,  Node: Apelidos descontinuados,  Prev: Constante,  Up: Conteúdo do módulo<7>

5.26.1.23 Apelidos descontinuados
.................................

Este módulo define vários apelidos descontinuados de classes
pré-existentes da biblioteca padrão.  Originalmente, elas eram incluídas
no módulo ‘typing’ para permitir a parametrização dessas classes
genéricas usando ‘[]’.  Porém, os apelidos se tornaram redundantes no
Python 3.9, quando as classes pré-existentes correspondentes passaram a
dar suporte a ‘[]’ (consulte a PEP 585(1)).

Os tipos redundantes estão descontinuados desde Python 3.9.  No entanto,
enquanto os apelidos podem ser removidos em algum momento, essa remoção
desses apelidos não está planejada.  Assim, nenhum aviso de
descontinuação será enviado pelo interpretador para esses apelidos.

Se em algum momento decidirem remover esses apelidos descontinuados, o
interpretador emitirá um aviso de descontinuação por, no mínimo, duas
versões de lançamento antes da remoção.  Os apelidos são garantidos a
permanecerem no módulo ‘typing’ sem avisos de descontinuação até, no
mínimo, Python 3.14.

Verificadores de tipos são encorajados a sinalizar o uso de tipos
descontinuados se o programa que estão verificando respeita uma versão
mínima de Python 3.9 ou mais nova.

* Menu:

* Apelidos de tipos embutidos::
* Apelidos para tipos em collections::
* Apelidos de outros tipos concretos::
* Apelidos de contêineres ABC em collections.abc.: Apelidos de contêineres ABC em collections abc.
* Apelidos para ABCs assíncronas em collections.abc: Apelidos para ABCs assíncronas em collections abc.
* Apelidos para outros ABCs em collections.abc.: Apelidos para outros ABCs em collections abc.
* Apelidos de ABCs da contextlib::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0585/


File: python.info,  Node: Apelidos de tipos embutidos,  Next: Apelidos para tipos em collections,  Up: Apelidos descontinuados

5.26.1.24 Apelidos de tipos embutidos
.....................................

 -- Classe: typing.Dict (dict, MutableMapping[KT, VT])

     Apelido descontinuado de *note dict: 256.

     Note que, para anotar argumentos, prefere-se usar um tipo de
     coleção abstrata como *note Mapping: 8d0. em vez de *note dict:
     256. ou ‘typing.Dict’.

     Descontinuado desde a versão 3.9: *note builtins.dict: 256. agora
     oferece suporte a subscrição (‘[]’).  Consulte PEP 585(1) e *note
     Tipo Generic Alias: 6b2.

 -- Classe: typing.List (list, MutableSequence[T])

     Apelido descontinuado de *note list: 611.

     Note que, para anotar argumentos, é preferível usar um tipo de
     coleção abstrata, como *note Sequence: 1204. ou *note Iterable:
     23e2, em vez de *note list: 611. ou ‘typing.List’.

     Descontinuado desde a versão 3.9: *note builtins.list: 611. agora
     oferece suporte a subscrição (‘[]’).  Consulte PEP 585(2) e *note
     Tipo Generic Alias: 6b2.

 -- Classe: typing.Set (set, MutableSet[T])

     Apelido descontinuado de *note builtins.set: 5d9.

     Note que, para anotar argumentos, prefere-se usar um tipo de
     coleção abstrata como *note collections.abc.Set: 23da. em vez de
     *note set: 5d9. ou *note typing.Set: 41d1.

     Descontinuado desde a versão 3.9: *note builtins.set: 5d9. agora
     oferece suporte a subscrição (‘[]’).  Consulte PEP 585(3) e *note
     Tipo Generic Alias: 6b2.

 -- Classe: typing.FrozenSet (frozenset, AbstractSet[T_co])

     Apelido descontinuado de *note builtins.frozenset: 5da.

     Descontinuado desde a versão 3.9: *note builtins.frozenset: 5da.
     agora oferece suporte a subscrição (‘[]’).  Consulte PEP 585(4) e
     *note Tipo Generic Alias: 6b2.

 -- Dado: typing.Tuple

     Apelido descontinuado para *note tuple: 370.

     *note tuple: 370. e ‘Tuple’ são casos especiais no sistema de
     tipos; consulte *note Anotando tuplas: 2405. para obter mais
     detalhes.

     Descontinuado desde a versão 3.9: *note builtins.tuple: 370. agora
     oferece suporte a subscrição (‘[]’).  Consulte PEP 585(5) e *note
     Tipo Generic Alias: 6b2.

 -- Classe: typing.Type (Generic[CT_co])

     Apelido descontinuado de *note type: d6b.

     Consulte *note O tipo de objetos de classe: 4191. para obter
     detalhes sobre como usar *note type: d6b. ou ‘typing.Type’ em
     anotações de tipos.

     Adicionado na versão 3.5.2.

     Descontinuado desde a versão 3.9: *note builtins.type: d6b. agora
     oferece suporte a subscrição (‘[]’).  Consulte PEP 585(6) e *note
     Tipo Generic Alias: 6b2.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0585/

   (2) https://peps.python.org/pep-0585/

   (3) https://peps.python.org/pep-0585/

   (4) https://peps.python.org/pep-0585/

   (5) https://peps.python.org/pep-0585/

   (6) https://peps.python.org/pep-0585/


File: python.info,  Node: Apelidos para tipos em collections,  Next: Apelidos de outros tipos concretos,  Prev: Apelidos de tipos embutidos,  Up: Apelidos descontinuados

5.26.1.25 Apelidos para tipos em ‘collections’
..............................................

 -- Classe: typing.DefaultDict (collections.defaultdict,
          MutableMapping[KT, VT])

     Apelido descontinuado de *note collections.defaultdict: 11fc.

     Adicionado na versão 3.5.2.

     Descontinuado desde a versão 3.9: *note collections.defaultdict:
     11fc. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(1) e *note Tipo Generic Alias: 6b2.

 -- Classe: typing.OrderedDict (collections.OrderedDict,
          MutableMapping[KT, VT])

     Apelido descontinuado de *note collections.OrderedDict: 5db.

     Adicionado na versão 3.7.2.

     Descontinuado desde a versão 3.9: *note collections.OrderedDict:
     5db. agora oferece suporte a subscrição (‘[]’).  consulte PEP
     585(2) e *note Tipo Generic Alias: 6b2.

 -- Classe: typing.ChainMap (collections.ChainMap, MutableMapping[KT,
          VT])

     Apelido descontinuado de *note collections.ChainMap: c36.

     Adicionado na versão 3.6.1.

     Descontinuado desde a versão 3.9: *note collections.ChainMap: c36.
     agora oferece suporte a subscrição (‘[]’).  consulte PEP 585(3) e
     *note Tipo Generic Alias: 6b2.

 -- Classe: typing.Counter (collections.Counter, Dict[T, int])

     Apelido descontinuado de *note collections.Counter: 10d0.

     Adicionado na versão 3.6.1.

     Descontinuado desde a versão 3.9: *note collections.Counter: 10d0.
     agora oferece suporte a subscrição (‘[]’).  consulte PEP 585(4) e
     *note Tipo Generic Alias: 6b2.

 -- Classe: typing.Deque (deque, MutableSequence[T])

     Apelido descontinuado de *note collections.deque: 5dc.

     Adicionado na versão 3.6.1.

     Descontinuado desde a versão 3.9: *note collections.deque: 5dc.
     agora oferece suporte a subscrição (‘[]’).  Consulte PEP 585(5) e
     *note Tipo Generic Alias: 6b2.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0585/

   (2) https://peps.python.org/pep-0585/

   (3) https://peps.python.org/pep-0585/

   (4) https://peps.python.org/pep-0585/

   (5) https://peps.python.org/pep-0585/


File: python.info,  Node: Apelidos de outros tipos concretos,  Next: Apelidos de contêineres ABC em collections abc,  Prev: Apelidos para tipos em collections,  Up: Apelidos descontinuados

5.26.1.26 Apelidos de outros tipos concretos
............................................

 -- Classe: typing.Pattern
 -- Classe: typing.Match

     Apelidos descontinuados correspondem aos tipos de retorno de *note
     re.compile(): bee. e *note re.match(): 126e.

     Esses tipos (e as funções correspondentes) são genéricas sobre
     *note AnyStr: 2b2.  ‘Pattern’ pode ser especializado como
     ‘Pattern[str]’ ou ‘Pattern[bytes]’; ‘Match’ pode ser especializado
     como ‘Match[str]’ ou ‘Match[bytes]’.

     Descontinuado desde a versão 3.9: Classes ‘Pattern’ e ‘Match’ de
     *note re: b9. agora suporte ‘[]’.  Consulte PEP 585(1) e *note Tipo
     Generic Alias: 6b2.

 -- Classe: typing.Text

     Apelido descontinuado de *note str: 44c.

     ‘Text’ é fornecida para servir como um caminho compatível com
     versões futuras para código em Python 2: no Python 2, ‘Text’ é um
     apelido para ‘unicode’.

     Use ‘Text’ para indicar que um valor deve conter uma string unicode
     de forma compatível com Python 2 e Python 3:

          def add_unicode_checkmark(text: Text) -> Text:
              return text + u' \u2713'

     Adicionado na versão 3.5.2.

     Descontinuado desde a versão 3.11: Python 2 deixou de receber
     suporte, e a maioria dos verificadores de tipos também não oferece
     suporte à verificação de tipos de código de Python 2.  A remoção do
     apelido não está planejada no momento, mas os usuários são
     incentivados a usar *note str: 44c. em vez de ‘Text’.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0585/


File: python.info,  Node: Apelidos de contêineres ABC em collections abc,  Next: Apelidos para ABCs assíncronas em collections abc,  Prev: Apelidos de outros tipos concretos,  Up: Apelidos descontinuados

5.26.1.27 Apelidos de contêineres ABC em ‘collections.abc’.
...........................................................

 -- Classe: typing.AbstractSet (Collection[T_co])

     Apelido descontinuado de *note collections.abc.Set: 23da.

     Descontinuado desde a versão 3.9: *note collections.abc.Set: 23da.
     agora oferece suporte a subscrição (‘[]’).  Consulte PEP 585(1) e
     *note Tipo Generic Alias: 6b2.

 -- Classe: typing.ByteString (Sequence[int])

     Apelido descontinuado para *note collections.abc.ByteString: 2e7.

     Use ‘isinstance(obj, collections.abc.Buffer)’ para testar se ‘obj’
     implementa o *note protocolo de buffer: 2e8. em tempo de execução.
     Para uso em anotações de tipo, use *note Buffer: 2e9. ou uma união
     que especifique explicitamente os tipos suportados pelo seu código
     (por exemplo, ‘bytes | bytearray | memoryview’).

     ‘ByteString’ foi originalmente concebido para ser uma classe
     abstrata que serviria como um supertipo de *note bytes: 1c2. e
     *note bytearray: 2ea.  No entanto, como o ABC nunca teve métodos,
     saber que um objeto era uma instância de ‘ByteString’ nunca lhe
     dizia nada de útil sobre o objeto.  Outros tipos comuns de buffer,
     como *note memoryview: 2eb, também nunca foram entendidos como
     subtipos de ‘ByteString’ (seja em tempo de execução ou por
     verificadores de tipo estáticos).

     See PEP 688(2) for more details.

     Descontinuado desde a versão 3.9, será removido na versão 3.17.

 -- Classe: typing.Collection (Sized, Iterable[T_co], Container[T_co])

     Apelido descontinuado de *note collections.abc.Collection: ca5.

     Adicionado na versão 3.6.

     Descontinuado desde a versão 3.9: *note collections.abc.Collection:
     ca5. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(3) e *note Tipo Generic Alias: 6b2.

 -- Classe: typing.Container (Generic[T_co])

     Apelido descontinuado de *note collections.abc.Container: 23e4.

     Descontinuado desde a versão 3.9: *note collections.abc.Container:
     23e4. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(4) e *note Tipo Generic Alias: 6b2.

 -- Classe: typing.ItemsView (MappingView, AbstractSet[tuple[KT_co,
          VT_co]])

     Apelido descontinuado de *note collections.abc.ItemsView: 23e8.

     Descontinuado desde a versão 3.9: *note collections.abc.ItemsView:
     23e8. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(5) e *note Tipo Generic Alias: 6b2.

 -- Classe: typing.KeysView (MappingView, AbstractSet[KT_co])

     Apelido descontinuado de *note collections.abc.KeysView: 23e7.

     Descontinuado desde a versão 3.9: *note collections.abc.KeysView:
     23e7. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(6) e *note Tipo Generic Alias: 6b2.

 -- Classe: typing.Mapping (Collection[KT], Generic[KT, VT_co])

     Apelido descontinuado de *note collections.abc.Mapping: 8d0.

     Descontinuado desde a versão 3.9: *note collections.abc.Mapping:
     8d0. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(7) e *note Tipo Generic Alias: 6b2.

 -- Classe: typing.MappingView (Sized)

     Apelido descontinuado de *note collections.abc.MappingView: 23e6.

     Descontinuado desde a versão 3.9: *note
     collections.abc.MappingView: 23e6. agora oferece suporte a
     subscrição (‘[]’).  Consulte PEP 585(8) e *note Tipo Generic Alias:
     6b2.

 -- Classe: typing.MutableMapping (Mapping[KT, VT])

     Apelido descontinuado de *note collections.abc.MutableMapping:
     10eb.

     Descontinuado desde a versão 3.9: *note
     collections.abc.MutableMapping: 10eb. agora oferece suporte a
     subscrição (‘[]’).  Consulte PEP 585(9) e *note Tipo Generic Alias:
     6b2.

 -- Classe: typing.MutableSequence (Sequence[T])

     Apelido descontinuado de *note collections.abc.MutableSequence:
     1a1.

     Descontinuado desde a versão 3.9: *note
     collections.abc.MutableSequence: 1a1. agora oferece suporte a
     subscrição (‘[]’).  Consulte PEP 585(10) e *note Tipo Generic
     Alias: 6b2.

 -- Classe: typing.MutableSet (AbstractSet[T])

     Apelido descontinuado de *note collections.abc.MutableSet: 23e5.

     Descontinuado desde a versão 3.9: *note collections.abc.MutableSet:
     23e5. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(11) e *note Tipo Generic Alias: 6b2.

 -- Classe: typing.Sequence (Reversible[T_co], Collection[T_co])

     Apelido descontinuado de *note collections.abc.Sequence: 1204.

     Descontinuado desde a versão 3.9: *note collections.abc.Sequence:
     1204. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(12) e *note Tipo Generic Alias: 6b2.

 -- Classe: typing.ValuesView (MappingView, Collection[_VT_co])

     Apelido descontinuado de *note collections.abc.ValuesView: 23e9.

     Descontinuado desde a versão 3.9: *note collections.abc.ValuesView:
     23e9. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(13) e *note Tipo Generic Alias: 6b2.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0585/

   (2) https://peps.python.org/pep-0688/#current-options

   (3) https://peps.python.org/pep-0585/

   (4) https://peps.python.org/pep-0585/

   (5) https://peps.python.org/pep-0585/

   (6) https://peps.python.org/pep-0585/

   (7) https://peps.python.org/pep-0585/

   (8) https://peps.python.org/pep-0585/

   (9) https://peps.python.org/pep-0585/

   (10) https://peps.python.org/pep-0585/

   (11) https://peps.python.org/pep-0585/

   (12) https://peps.python.org/pep-0585/

   (13) https://peps.python.org/pep-0585/


File: python.info,  Node: Apelidos para ABCs assíncronas em collections abc,  Next: Apelidos para outros ABCs em collections abc,  Prev: Apelidos de contêineres ABC em collections abc,  Up: Apelidos descontinuados

5.26.1.28 Apelidos para ABCs assíncronas em ‘collections.abc’
.............................................................

 -- Classe: typing.Coroutine (Awaitable[ReturnType], Generic[YieldType,
          SendType, ReturnType])

     Apelido descontinuado de *note collections.abc.Coroutine: e07.

     Consulte *note Anotando geradores e corrotinas: 26cd. para obter
     detalhes sobre como usar *note collections.abc.Coroutine: e07. e
     ‘typing.Coroutine’ em anotações de tipos.

     Adicionado na versão 3.5.3.

     Descontinuado desde a versão 3.9: *note collections.abc.Coroutine:
     e07. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(1) e *note Tipo Generic Alias: 6b2.

 -- Classe: typing.AsyncGenerator (AsyncIterator[YieldType],
          Generic[YieldType, SendType])

     Apelido descontinuado de *note collections.abc.AsyncGenerator: ca8.

     Consulte *note Anotando geradores e corrotinas: 26cd. para obter
     detalhes sobre como usar *note collections.abc.AsyncGenerator: ca8.
     e ‘typing.AsyncGenerator’ em anotações de tipos.

     Adicionado na versão 3.6.1.

     Descontinuado desde a versão 3.9: *note
     collections.abc.AsyncGenerator: ca8. agora oferece suporte a
     subscrição (‘[]’).  Consulte PEP 585(2) e *note Tipo Generic Alias:
     6b2.

     Alterado na versão 3.13: O parâmetro ‘SendType’ agora tem um
     valor-padrão.

 -- Classe: typing.AsyncIterable (Generic[T_co])

     Apelido descontinuado de *note collections.abc.AsyncIterable: e09.

     Adicionado na versão 3.5.2.

     Descontinuado desde a versão 3.9: *note
     collections.abc.AsyncIterable: e09. agora oferece suporte a
     subscrição (‘[]’).  Consulte PEP 585(3) e *note Tipo Generic Alias:
     6b2.

 -- Classe: typing.AsyncIterator (AsyncIterable[T_co])

     Apelido descontinuado de *note collections.abc.AsyncIterator: e08.

     Adicionado na versão 3.5.2.

     Descontinuado desde a versão 3.9: *note
     collections.abc.AsyncIterator: e08. agora oferece suporte a
     subscrição (‘[]’).  Consulte PEP 585(4) e *note Tipo Generic Alias:
     6b2.

 -- Classe: typing.Awaitable (Generic[T_co])

     Apelido descontinuado de *note collections.abc.Awaitable: e06.

     Adicionado na versão 3.5.2.

     Descontinuado desde a versão 3.9: *note collections.abc.Awaitable:
     e06. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(5) e *note Tipo Generic Alias: 6b2.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0585/

   (2) https://peps.python.org/pep-0585/

   (3) https://peps.python.org/pep-0585/

   (4) https://peps.python.org/pep-0585/

   (5) https://peps.python.org/pep-0585/


File: python.info,  Node: Apelidos para outros ABCs em collections abc,  Next: Apelidos de ABCs da contextlib,  Prev: Apelidos para ABCs assíncronas em collections abc,  Up: Apelidos descontinuados

5.26.1.29 Apelidos para outros ABCs em ‘collections.abc’.
.........................................................

 -- Classe: typing.Iterable (Generic[T_co])

     Apelido descontinuado de *note collections.abc.Iterable: 23e2.

     Descontinuado desde a versão 3.9: *note collections.abc.Iterable:
     23e2. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(1) e *note Tipo Generic Alias: 6b2.

 -- Classe: typing.Iterator (Iterable[T_co])

     Apelido descontinuado de *note collections.abc.Iterator: 23e3.

     Descontinuado desde a versão 3.9: *note collections.abc.Iterator:
     23e3. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(2) e *note Tipo Generic Alias: 6b2.

 -- Dado: typing.Callable

     Apelido descontinuado de *note collections.abc.Callable: 7ec.

     Veja *note Anotações de objetos chamáveis: 2404. para detalhes
     sobre como usar *note collections.abc.Callable: 7ec. e
     ‘typing.Callable’ em anotações de tipo.

     Descontinuado desde a versão 3.9: *note collections.abc.Callable:
     7ec. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(3) e *note Tipo Generic Alias: 6b2.

     Alterado na versão 3.10: ‘Callable’ agora oferece suporte a *note
     ParamSpec: 15e. e *note Concatenate: 7c5.  Veja PEP 612(4) para
     mais detalhes.

 -- Classe: typing.Generator (Iterator[YieldType], Generic[YieldType,
          SendType, ReturnType])

     Apelido descontinuado de *note collections.abc.Generator: e05.

     Consulte *note Anotando geradores e corrotinas: 26cd. para obter
     detalhes sobre como usar *note collections.abc.Generator: e05. e
     ‘typing.Generator’ em anotações de tipos.

     Descontinuado desde a versão 3.9: *note collections.abc.Generator:
     e05. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(5) e *note Tipo Generic Alias: 6b2.

     Alterado na versão 3.13: Adiciona valores-padrão para os tipos de
     envio e retorno.

 -- Classe: typing.Hashable

     Apelido descontinuado de *note collections.abc.Hashable: 4f5.

     Descontinuado desde a versão 3.12: Use *note
     collections.abc.Hashable: 4f5. diretamente.

 -- Classe: typing.Reversible (Iterable[T_co])

     Apelido descontinuado de *note collections.abc.Reversible: ca6.

     Descontinuado desde a versão 3.9: *note collections.abc.Reversible:
     ca6. agora oferece suporte a subscrição (‘[]’).  Consulte PEP
     585(6) e *note Tipo Generic Alias: 6b2.

 -- Classe: typing.Sized

     Apelido descontinuado de *note collections.abc.Sized: 4f6.

     Descontinuado desde a versão 3.12: Use *note collections.abc.Sized:
     4f6. diretamente.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0585/

   (2) https://peps.python.org/pep-0585/

   (3) https://peps.python.org/pep-0585/

   (4) https://peps.python.org/pep-0612/

   (5) https://peps.python.org/pep-0585/

   (6) https://peps.python.org/pep-0585/


File: python.info,  Node: Apelidos de ABCs da contextlib,  Prev: Apelidos para outros ABCs em collections abc,  Up: Apelidos descontinuados

5.26.1.30 Apelidos de ABCs da ‘contextlib’
..........................................

 -- Classe: typing.ContextManager (Generic[T_co, ExitT_co])

     Apelido descontinuado de *note contextlib.AbstractContextManager:
     cab.

     O primeiro parâmetro de tipo, ‘T_co’, representa o tipo retornado
     pelo método *note __enter__(): 5c8.  O segundo parâmetro opcional
     de tipo, ‘ExitT_co’, cujo valor-padrão é ‘bool | None’, representa
     o tipo retornado pelo método *note __exit__(): 1344.

     Adicionado na versão 3.5.4.

     Descontinuado desde a versão 3.9: *note
     contextlib.AbstractContextManager: cab. agora oferece suporte a
     subscrição (‘[]’).  Consulte PEP 585(1) e *note Tipo Generic Alias:
     6b2.

     Alterado na versão 3.13: Adiciona o segundo parâmetro opcional de
     tipo, ‘ExitT_co’.

 -- Classe: typing.AsyncContextManager (Generic[T_co, AExitT_co])

     Apelido descontinuado de *note
     contextlib.AbstractAsyncContextManager: b3d.

     O primeiro parâmetro de tipo, ‘T_co’, representa o tipo retornado
     pelo método *note __aenter__(): 215e.  O segundo parâmetro opcional
     de tipo, ‘AExitT_co’, cujo valor-padrão é ‘bool | None’, representa
     o tipo retornado pelo método *note __aexit__(): 1716.

     Adicionado na versão 3.6.2.

     Descontinuado desde a versão 3.9: *note
     contextlib.AbstractAsyncContextManager: b3d. agora oferece suporte
     a subscrição (‘[]’).  Consulte PEP 585(2) e *note Tipo Generic
     Alias: 6b2.

     Alterado na versão 3.13: Adiciona o segundo parâmetro opcional de
     tipo, ‘AExitT_co’.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0585/

   (2) https://peps.python.org/pep-0585/


File: python.info,  Node: Cronograma de descontinuação dos principais recursos,  Prev: Conteúdo do módulo<7>,  Up: typing — Suporte para dicas de tipo

5.26.1.31 Cronograma de descontinuação dos principais recursos
..............................................................

Alguns recursos em ‘typing’ estão descontinuados e podem ser removidos
em uma versão futura de Python.  A tabela a seguir resume as principais
descontinuações para sua conveniência.  Ela está sujeita a alterações, e
nem todas as descontinuações estão listadas.

Recurso                       Descontinuado em              Remoção planejada             PEP/issue
                                                                                          
------------------------------------------------------------------------------------------------------------------------
                                                                                          
versões ‘typing’ de           3.9                           Não definido (consulte        PEP 585(1)
coleções-padrão                                             *note apelidos descontinuados: 41cb.
                                                            para mais informações)
                                                            
                                                                                          
*note typing.ByteString: 2ee. 3.9                           3.17                          gh-91896(2)
                                                                                          
                                                                                          
*note typing.Text: 30b.       3.11                          Não definido                  gh-92332(3)
                                                                                          
                                                                                          
*note typing.Hashable: 4f3.   3.12                          Não definido                  gh-94309(4)
e *note typing.Sized: 4f4.                                                                

*note typing.TypeAlias: 7ca.  3.12                          Não definido                  PEP 695(5)
                                                                                          
                                                                                          
*note @typing.no_type_check_decorator: 2b1.3.13             3.15                          gh-106309(6)
                                                                                          
                                                                                          
*note typing.AnyStr: 2b2.     3.13                          3.18                          gh-105578(7)
                                                                                          

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0585/

   (2) https://github.com/python/cpython/issues/91896

   (3) https://github.com/python/cpython/issues/92332

   (4) https://github.com/python/cpython/issues/94309

   (5) https://peps.python.org/pep-0695/

   (6) https://github.com/python/cpython/issues/106309

   (7) https://github.com/python/cpython/issues/105578


File: python.info,  Node: pydoc — Gerador de documentação e sistema de ajuda online,  Next: Modo de Desenvolvimento do Python,  Prev: typing — Suporte para dicas de tipo,  Up: Ferramentas de Desenvolvimento

5.26.2 ‘pydoc’ — Gerador de documentação e sistema de ajuda online
------------------------------------------------------------------

'Código-fonte:' Lib/pydoc.py(1)

__________________________________________________________________

O módulo ‘pydoc’ gera automaticamente a documentação dos módulos Python.
A documentação pode ser apresentada como páginas de texto no console,
servida em um navegador web ou salva em arquivos HTML.

Para módulos, classes, funções e métodos, a documentação exibida é
derivada da docstring (ou seja, o atributo *note __doc__: 92e.) do
objeto, e recursivamente de seus membros documentáveis.  Se não houver
docstring, ‘pydoc’ tenta obter uma descrição do bloco de linhas de
comentário logo acima da definição da classe, função ou método no
arquivo fonte, ou no topo do módulo (consulte *note
inspect.getcomments(): 16b0.).

A função embutida *note help(): 8dd. invoca o sistema de ajuda online no
interpretador interativo, que usa ‘pydoc’ para gerar sua documentação
como texto no console.  A mesma documentação de texto também pode ser
vista de fora do interpretador Python executando ‘pydoc’ como um script
no prompt de comando do sistema operacional.  Por exemplo, executar

     python -m pydoc sys

em um prompt de console exibirá a documentação do módulo *note sys: d9,
em um estilo semelhante às páginas de manual mostradas pelo comando Unix
‘man’.  O argumento para ‘pydoc’ pode ser o nome de uma função, módulo
ou pacote, ou uma referência pontilhada a uma classe, método ou função
dentro de um módulo ou módulo em um pacote.  Se o argumento para ‘pydoc’
parecer um caminho (ou seja, ele contém o separador de caminho para o
seu sistema operacional, como uma barra no Unix) e se refere a um
arquivo fonte Python existente, então a documentação é produzida para
esse arquivo.

     Nota: Para encontrar objetos e sua documentação, ‘pydoc’ importa os
     módulos a serem documentados.  Portanto, qualquer código no nível
     do módulo será executado nessa ocasião.  Use uma proteção ‘if
     __name__ == '__main__':’ para executar código apenas quando um
     arquivo é chamado como um script e não apenas importado.

Ao imprimir a saída para o console, ‘pydoc’ tenta paginar a saída para
facilitar a leitura.  Se a variável de ambiente ‘MANPAGER’ ou a ‘PAGER’
estiver definida, ‘pydoc’ usará seu valor como um programa de paginação.
Quando ambas estiverem definidas, ‘MANPAGER’ é usada.

Especificar um sinalizador ‘-w’ antes do argumento fará com que a
documentação HTML seja escrita em um arquivo no diretório atual, ao
invés de exibir texto no console.

Especificar um sinalizador ‘-k’ antes do argumento irá pesquisar as
linhas de sinopse de todos os módulos disponíveis para a palavra
reservada fornecida como o argumento, novamente de uma maneira
semelhante ao comando Unix ‘man’.  A linha de sinopse de um módulo é a
primeira linha de sua string de documentação.

Você também pode usar ‘pydoc’ para iniciar um servidor HTTP na máquina
local que servirá a documentação para os navegadores web visitantes.
‘python -m pydoc -p 1234’ irá iniciar um servidor HTTP na porta 1234,
permitindo que você navegue pela documentação em
‘http://localhost:1234/’ em seu navegador preferido.  Especificar ‘0’
como o número da porta irá selecionar uma porta não utilizada
arbitrária.

‘python -m pydoc -n <hostname>’ irá iniciar o servidor ouvindo no nome
de host fornecido.  Por padrão, o nome de host é “localhost”, mas se
você deseja que o servidor seja acessado por outras máquinas, você pode
alterar o nome de host ao qual o servidor responde.  Durante o
desenvolvimento, isso é especialmente útil se você deseja executar o
pydoc de dentro de um contêiner.

‘python -m pydoc -b’ irá iniciar o servidor e, adicionalmente, abrir um
navegador da web para uma página de índice do módulo.  Cada página
exibida tem uma barra de navegação na parte superior onde você pode
escolher 'Get' para obter ajuda em um item individual, 'Search' para
pesquisar todos os módulos com uma palavra reservada em sua linha de
sinopse e ir para as páginas de índice do módulo em 'Module index',
tópicos em 'Topics' e palavras reservadas em 'Keywords'.

Quando ‘pydoc’ gera documentação, ele usa o ambiente atual e o caminho
para localizar os módulos.  Assim, invocar ‘pydoc spam’ documenta
precisamente a versão do módulo que você obteria se iniciasse o
interpretador Python e digitasse ‘import spam’.

Os documentos do módulo para os módulos principais são presumidos como
residindo em ‘https://docs.python.org/X.Y/library/’, sendo ‘X’ e ‘Y’ os
números de versão principal e secundária do interpretador Python.  Isso
pode ser substituído definindo a variável de ambiente ‘PYTHONDOCS’ para
uma URL diferente ou para um diretório local contendo as páginas do
Manual de Referência da Biblioteca.

Alterado na versão 3.2: Adicionada a opção ‘-b’.

Alterado na versão 3.3: A opção de linha de comando ‘-g’ foi removida.

Alterado na versão 3.4: ‘pydoc’ agora usa *note inspect.signature():
738. em vez de *note inspect.getfullargspec(): 739. para extrair
informações de assinatura de chamáveis.

Alterado na versão 3.7: Adicionada a opção ‘-n’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/pydoc.py


File: python.info,  Node: Modo de Desenvolvimento do Python,  Next: doctest — Teste exemplos interativos de Python,  Prev: pydoc — Gerador de documentação e sistema de ajuda online,  Up: Ferramentas de Desenvolvimento

5.26.3 Modo de Desenvolvimento do Python
----------------------------------------

Adicionado na versão 3.7.

O Modo de Desenvolvimento do Python introduz verificações de tempo de
execução adicionais que são muito custosas para serem ativadas por
padrão.  Não deve ser mais detalhado que o padrão se o código estiver
correto; novos avisos são emitidos somente quando um problema é
detectado.

Ele pode ser ativado usando a opção de linha de comando *note -X dev:
176. ou configurando a variável de ambiente *note PYTHONDEVMODE: b00.
como ‘1’.

Veja também a *note compilação de depuração do Python: 1f9.

* Menu:

* Efeitos do Modo de Desenvolvimento do Python::
* Exemplo de ResourceWarning::
* Exemplo de erro de descritor de arquivo inválido::


File: python.info,  Node: Efeitos do Modo de Desenvolvimento do Python,  Next: Exemplo de ResourceWarning,  Up: Modo de Desenvolvimento do Python

5.26.3.1 Efeitos do Modo de Desenvolvimento do Python
.....................................................

A ativação do Modo de Desenvolvimento do Python é semelhante ao comando
a seguir, mas com efeitos adicionais descritos abaixo:

     PYTHONMALLOC=debug PYTHONASYNCIODEBUG=1 python -W default -X faulthandler

Efeitos do Modo de Desenvolvimento do Python:

   * Adiciona o *note filtro de avisos: 1ec1. ‘default’.  Os seguintes
     avisos são exibidos:

        * *note DeprecationWarning: 1a5.

        * *note ImportWarning: 4fa.

        * *note PendingDeprecationWarning: 8ce.

        * *note ResourceWarning: 244.

     Normalmente, os avisos acima são filtrados pelos *note filtros de
     avisos: 1ec1. padrão.

     Ele se comporta como se a opção de linha de comando *note -W
     default: 8cd. fosse usada.

     Use a opção de linha de comando *note -W error: 8cd. ou defina a
     variável de ambiente *note PYTHONWARNINGS: bc2. com ‘error’ para
     tratar avisos como erros.

   * Instala ganchos de depuração nos alocadores de memória para
     verificar por:

        * Estouro negativo de buffer

        * Estouro de buffer

        * Violação de API de alocador de memória

        * Uso inseguro da GIL

     Consulte a função C *note PyMem_SetupDebugHooks(): c85.

     Se comporta como se a variável de ambiente *note PYTHONMALLOC: c7f.
     estivesse definida com ‘debug’.

     Para habilitar o Modo de Desenvolvimento do Python sem instalar
     ganchos de depuração nos alocadores de memória, defina a variável
     de ambiente *note PYTHONMALLOC: c7f. como ‘default’.

   * Chama *note faulthandler.enable(): cbe. na inicialização do Python
     para instalar manipuladores para os sinais *note SIGSEGV: 10b9,
     *note SIGFPE: 10ba, *note SIGABRT: 10bb, *note SIGBUS: 10bc. e
     *note SIGILL: 10bd. para despejar o traceback (situação da pilha de
     execução) do Python no caso de travamento.

     Ele se comporta como se a opção de linha de comando *note -X
     faulthandler: 176. fosse usada ou se a variável de ambiente *note
     PYTHONFAULTHANDLER: 10be. estivesse definida como ‘1’.

   * Ativa o *note modo de depuração de asyncio: 1ed3.  Por exemplo,
     *note asyncio: a. verifica as corrotinas que não foram aguardadas
     ('await') e as registra.

     Ele se comporta como se a variável de ambiente *note
     PYTHONASYNCIODEBUG: 1ed2. estivesse definida como ‘1’.

   * Verifica os argumentos 'encoding' e 'errors' para operações de
     codificação e decodificação de strings.  Exemplos: *note open():
     51c, *note str.encode(): 8db. e *note bytes.decode(): 8dc.

     Por padrão, para obter o melhor desempenho, o argumento 'errors' é
     verificado apenas no primeiro erro de codificação/decodificação, e
     o argumento 'encoding' às vezes é ignorado para strings vazias.

   * O destrutor de *note io.IOBase: 1f5. registra exceções ‘close()’.

   * Define o atributo *note dev_mode: 1c1b. de *note sys.flags: 68c.
     como ‘True’.

O Modo de Desenvolvimento do Python não ativa o módulo *note
tracemalloc: ff. por padrão porque o custo adicional (para desempenho e
memória) seria muito grande.  A ativação do módulo *note tracemalloc:
ff. fornece informações adicionais sobre a origem de alguns erros.  Por
exemplo, *note ResourceWarning: 244. registra o retorno ao local onde o
recurso foi alocado, e um erro de estouro de buffer registra o retorno
ao local onde o bloco de memória foi alocado.

O Modo de Desenvolvimento do Python não impede que a opção de linha de
comando *note -O: ddd. remova as instruções *note assert: 96f. nem
configure *note __debug__: 7db. como ‘False’.

O Modo de Desenvolvimento do Python só pode ser ativado na inicialização
do Python.  Seu valor pode ser lido de *note sys.flags.dev_mode: 68c.

Alterado na versão 3.8: O destrutor de *note io.IOBase: 1f5. agora
registra exceções ‘close()’.

Alterado na versão 3.9: Os argumentos 'encoding' e 'errors' agora são
verificados para operações de codificação e decodificação de strings.


File: python.info,  Node: Exemplo de ResourceWarning,  Next: Exemplo de erro de descritor de arquivo inválido,  Prev: Efeitos do Modo de Desenvolvimento do Python,  Up: Modo de Desenvolvimento do Python

5.26.3.2 Exemplo de ResourceWarning
...................................

Exemplo de um script que conta o número de linhas do arquivo texto
especificado na linha de comando:

     import sys

     def main():
         fp = open(sys.argv[1])
         nlines = len(fp.readlines())
         print(nlines)
         # O arquivo é fechado implicitamente

     if __name__ == "__main__":
         main()

O script não fecha o arquivo explicitamente.  Por padrão, o Python não
emite nenhum aviso.  Exemplo usando README.txt, que possui 269 linhas:

     $ python script.py README.txt
     269

A ativação do Modo de Desenvolvimento do Python exibe um aviso *note
ResourceWarning: 244.:

     $ python -X dev script.py README.txt
     269
     script.py:10: ResourceWarning: unclosed file <_io.TextIOWrapper name='README.rst' mode='r' encoding='UTF-8'>
       main()
     ResourceWarning: Enable tracemalloc to get the object allocation traceback

Além disso, ativar *note tracemalloc: ff. mostra a linha em que o
arquivo foi aberto:

     $ python -X dev -X tracemalloc=5 script.py README.rst
     269
     script.py:10: ResourceWarning: unclosed file <_io.TextIOWrapper name='README.rst' mode='r' encoding='UTF-8'>
       main()
     Object allocated at (most recent call last):
       File "script.py", lineno 10
         main()
       File "script.py", lineno 4
         fp = open(sys.argv[1])

A correção é fechar explicitamente o arquivo.  Exemplo usando um
gerenciador de contexto:

     def main():
         # Fecha o arquivo explicitamente ao sair do bloco with
         with open(sys.argv[1]) as fp:
             nlines = len(fp.readlines())
         print(nlines)

Não fechar um recurso explicitamente pode deixá-lo aberto por muito mais
tempo do que o esperado; isso pode causar problemas graves ao sair do
Python.  É ruim no CPython, mas é ainda pior no PyPy.  Fechar recursos
explicitamente torna uma aplicação mais determinística e mais confiável.


File: python.info,  Node: Exemplo de erro de descritor de arquivo inválido,  Prev: Exemplo de ResourceWarning,  Up: Modo de Desenvolvimento do Python

5.26.3.3 Exemplo de erro de descritor de arquivo inválido
.........................................................

Script exibindo sua própria primeira linha:

     import os

     def main():
         fp = open(__file__)
         firstline = fp.readline()
         print(firstline.rstrip())
         os.close(fp.fileno())
         # O arquivo é fechado explicitamente

     main()

Por padrão, o Python não emite qualquer aviso:

     $ python script.py
     import os

O Modo de Desenvolvimento do Python mostra uma *note ResourceWarning:
244. e registra um erro “Bad file descriptor” ao finalizar o objeto
arquivo:

     $ python -X dev script.py
     import os
     script.py:10: ResourceWarning: unclosed file <_io.TextIOWrapper name='script.py' mode='r' encoding='UTF-8'>
       main()
     ResourceWarning: Enable tracemalloc to get the object allocation traceback
     Exception ignored in: <_io.TextIOWrapper name='script.py' mode='r' encoding='UTF-8'>
     Traceback (most recent call last):
       File "script.py", line 10, in <module>
         main()
     OSError: [Errno 9] Bad file descriptor

‘os.close(fp.fileno())’ fecha o descritor de arquivo.  Quando o
finalizador de objeto arquivo tenta fechar o descritor de arquivo
novamente, ele falha com o erro ‘Bad file descriptor’.  Um descritor de
arquivo deve ser fechado apenas uma vez.  Na pior das hipóteses,
fechá-lo duas vezes pode causar um acidente (consulte bpo-18748(1) para
um exemplo).

A correção é remover a linha ‘os.close(fp.fileno())’ ou abrir o arquivo
com ‘closefd=False’.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=18748


File: python.info,  Node: doctest — Teste exemplos interativos de Python,  Next: unittest — Framework de testes unitários,  Prev: Modo de Desenvolvimento do Python,  Up: Ferramentas de Desenvolvimento

5.26.4 ‘doctest’ — Teste exemplos interativos de Python
-------------------------------------------------------

'Código-fonte:' Lib/doctest.py(1)

__________________________________________________________________

O módulo *note doctest: 3a. busca partes de texto que se parecem com
sessões interativas do Python e, em seguida, executa essas sessões para
verificar se elas funcionam exatamente como mostrado.  Existem várias
maneiras comuns de usar o doctest:

   * Para verificar se as docstrings de um módulo estão atualizadas,
     verificando que todos os exemplos interativos ainda funcionam
     conforme documentado.

   * Para executar testes de regressão, verificando que os exemplos
     interativos de um arquivo de teste ou um objeto teste funcionam
     como esperado.

   * Para escrever a documentação do tutorial para um pacote, ilustrado
     de forma liberal com exemplos de entrada e saída.  Dependendo se os
     exemplos ou o texto expositivo são enfatizados, isso tem o sabor do
     “teste ilustrado” ou “documentação executável”.

Aqui temos um pequeno exemplo, porém, completo:

     """
     This is the "example" module.

     The example module supplies one function, factorial().  For example,

     >>> factorial(5)
     120
     """

     def factorial(n):
         """Return the factorial of n, an exact integer >= 0.

         >>> [factorial(n) for n in range(6)]
         [1, 1, 2, 6, 24, 120]
         >>> factorial(30)
         265252859812191058636308480000000
         >>> factorial(-1)
         Traceback (most recent call last):
             ...
         ValueError: n must be >= 0

         Factorials of floats are OK, but the float must be an exact integer:
         >>> factorial(30.1)
         Traceback (most recent call last):
             ...
         ValueError: n must be exact integer
         >>> factorial(30.0)
         265252859812191058636308480000000

         It must also not be ridiculously large:
         >>> factorial(1e100)
         Traceback (most recent call last):
             ...
         OverflowError: n too large
         """

         import math
         if not n >= 0:
             raise ValueError("n must be >= 0")
         if math.floor(n) != n:
             raise ValueError("n must be exact integer")
         if n+1 == n:  # catch a value like 1e300
             raise OverflowError("n too large")
         result = 1
         factor = 2
         while factor <= n:
             result *= factor
             factor += 1
         return result


     if __name__ == "__main__":
         import doctest
         doctest.testmod()

Se executar diretamente ‘example.py’ desde a linha de comando, *note
doctest: 3a. a mágica funcionará:

     $ python example.py
     $

Observe que nada foi impresso na saída padrão!  Isso é normal, e isso
significa que todos os exemplos funcionaram.  Passe ‘-v’ para o script e
*note doctest: 3a. imprimirá um registro detalhado do que está sendo
testando imprimindo ainda um resumo no final:

     $ python example.py -v
     Trying:
         factorial(5)
     Expecting:
         120
     ok
     Trying:
         [factorial(n) for n in range(6)]
     Expecting:
         [1, 1, 2, 6, 24, 120]
     ok

E assim por diante, eventualmente terminando com:

     Trying:
         factorial(1e100)
     Expecting:
         Traceback (most recent call last):
             ...
         OverflowError: n too large
     ok
     2 items passed all tests:
        1 test in __main__
        6 tests in __main__.factorial
     7 tests in 2 items.
     7 passed.
     Test passed.
     $

Isso é tudo o que precisas saber para começar a fazer uso produtivo do
módulo *note doctest: 3a.!  Pule!  As seções a seguir fornecem detalhes
completos.  Observe que há muitos exemplos de doctests no conjunto de
testes padrão Python e bibliotecas.  Exemplos especialmente úteis podem
ser encontrados no arquivo de teste padrão
‘Lib/test/test_doctest/test_doctest.py’.

* Menu:

* Uso simples; verificando exemplos em Docstrings: Uso simples verificando exemplos em Docstrings.
* Utilização comum; Verificando exemplos em um arquivo texto: Utilização comum Verificando exemplos em um arquivo texto.
* Uso na linha de comando: Uso na linha de comando<6>.
* Como ele funciona::
* Basic API::
* API do Unittest::
* Advanced API::
* Depuração::
* Soapbox::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/doctest.py


File: python.info,  Node: Uso simples verificando exemplos em Docstrings,  Next: Utilização comum Verificando exemplos em um arquivo texto,  Up: doctest — Teste exemplos interativos de Python

5.26.4.1 Uso simples: verificando exemplos em Docstrings
........................................................

A maneira mais simples de começar a usar o doctest (mas não
necessariamente a maneira como você continuará fazendo isso) é encerrar
cada módulo ‘M’ com:

     if __name__ == "__main__":
         import doctest
         doctest.testmod()

‘doctest’ e então examine a docstrings no módulo ‘M’.

Executar o módulo como um script faz com que os exemplos nas docstrings
sejam executados e verificados:

     python M.py

Isso não exibirá nada, a menos que um exemplo falhe, caso em que o(s)
exemplo(s) falhando(s) e a(s) causa(s) da(s) falha(s) são impressas em
stdout e a linha final de saída será ‘***Test Failed*** N failures.’,
onde 'N' é o número de exemplos que falharam.

Ao invés disso, execute agora com a opção ‘-v’:

     python M.py -v

e um relatório detalhado de todos os exemplos testados é impresso na
saída padrão, junto com diversos resumos no final.

Você pode forçar o modo verboso passando ‘verbose=True’ para *note
testmod(): 14b5, ou proibi-lo passando ‘verbose=False’.  Em qualquer um
desses casos, *note sys.argv: 12a6. não é examinado por *note testmod():
14b5. (então passar ‘-v’ ou não não tem efeito).

Há também um atalho de linha de comando para executar *note testmod():
14b5, veja a seção *note Uso na linha de comando: 4207.

Para mais informações sobre *note testmod(): 14b5, veja a seção *note
Basic API: 4208.


File: python.info,  Node: Utilização comum Verificando exemplos em um arquivo texto,  Next: Uso na linha de comando<6>,  Prev: Uso simples verificando exemplos em Docstrings,  Up: doctest — Teste exemplos interativos de Python

5.26.4.2 Utilização comum: Verificando exemplos em um arquivo texto
...................................................................

Outra aplicação simples do doctest é testar exemplos interativos em um
arquivo texto.  Isso pode ser feito com a função *note testfile():
420b.:

     import doctest
     doctest.testfile("example.txt")

Esse pequeno script executa e verifica quaisquer exemplos interativos do
Python contidos no arquivo ‘example.txt’.  O conteúdo do arquivo é
tratado como se fosse uma única docstring gigante; o arquivo não precisa
conter um programa Python!  Por exemplo, talvez ‘example.txt’ contenha
isto:

     The ``example`` module
     ======================

     Using ``factorial``
     -------------------

     This is an example text file in reStructuredText format.  First import
     ``factorial`` from the ``example`` module:

         >>> from example import factorial

     Now use it:

         >>> factorial(6)
         120

Executar ‘doctest.testfile("example.txt")’ então encontra o erro nesta
documentação:

     File "./example.txt", line 14, in example.txt
     Failed example:
         factorial(6)
     Expected:
         120
     Got:
         720

Assim como *note testmod(): 14b5, *note testfile(): 420b. não vai exibir
nada a menos que um exemplo falhe.  Se um exemplo falhar, então o(s)
exemplo(s) com falha e a(s) causa(s) da(s) falha(s) são impressos em
stdout, usando o mesmo formato que ‘testmod()’.

Por padrão, *note testfile(): 420b. procura por arquivos no diretório do
módulo chamador.  Veja a seção *note Basic API: 4208. para uma descrição
dos argumentos opcionais que podem ser usados para dizer para procurar
por arquivos em outros locais.

Assim como *note testmod(): 14b5, a verbosidade de *note testfile():
420b. pode ser definida com a opção de linha de comando ‘-v’ ou com o
argumento nomeado opcional 'verbose'.

Há também um atalho de linha de comando para executar *note testfile():
420b, veja a seção *note Uso na linha de comando: 4207.

Para maiores informações em *note testfile(): 420b, veja a seção *note
Basic API: 4208.


File: python.info,  Node: Uso na linha de comando<6>,  Next: Como ele funciona,  Prev: Utilização comum Verificando exemplos em um arquivo texto,  Up: doctest — Teste exemplos interativos de Python

5.26.4.3 Uso na linha de comando
................................

O módulo *note doctest: 3a. pode ser invocado como um script na linha de
comando:

     python -m doctest [-v] [-o OPÇÃO] [-f] arquivo [arquivo ...]

 -- Option: -v, --verbose

     Relatório detalhado de todos os exemplos testados é impresso na
     saída padrão, junto com diversos resumos no final.

          python -m doctest -v example.py

     Isso importará ‘example.py’ como um módulo independente e executará
     *note testmod(): 14b5. nele.  Observe que isso pode não funcionar
     corretamente se o arquivo fizer parte de um pacote e importar
     outros submódulos desse pacote.

     Se o nome do arquivo não termina com ‘.py’, ‘doctest’ infere que
     ele deve ser executado com *note testfile(): 420b.:

          python -m doctest -v example.txt

 -- Option: -o, --option <option>

     Os sinalizadores de opção controlam vários aspectos do
     comportamento do doctest, consulte a seção *note Flags opcionais:
     f66.

     Adicionado na versão 3.4.

 -- Option: -f, --fail-fast

     Este é um atalho para ‘-o FAIL_FAST’.

     Adicionado na versão 3.4.


File: python.info,  Node: Como ele funciona,  Next: Basic API,  Prev: Uso na linha de comando<6>,  Up: doctest — Teste exemplos interativos de Python

5.26.4.4 Como ele funciona
..........................

Esta seção examina detalhadamente como o doctest funciona: quais
docstrings ele analisa, como encontra exemplos interativos, qual
contexto de execução ele usa, como ele lida com exceções e como
sinalizadores de opção podem ser usados para controlar seu
comportamento.  Esta é a informação que você precisa saber para escrever
exemplos de doctest; para obter informações sobre como realmente
executar o doctest nesses exemplos, consulte as seções a seguir.

* Menu:

* Quais docstrings são examinadas?::
* Como os exemplos de docstrings são reconhecidos?::
* Qual é o contexto de execução?::
* E quanto às exceções?::
* Flags opcionais::
* Directives::
* Avisos: Avisos<2>.


File: python.info,  Node: Quais docstrings são examinadas?,  Next: Como os exemplos de docstrings são reconhecidos?,  Up: Como ele funciona

5.26.4.5 Quais docstrings são examinadas?
.........................................

A docstring do módulo e todas as docstrings de funções, classes e
métodos são pesquisadas.  Os objetos importados para o módulo não são
pesquisados.

Além disso, há casos em que você deseja que os testes façam parte de um
módulo, mas não do texto de ajuda, o que exige que os testes não sejam
incluídos na documentação.  Doctest procura uma variável em nível de
módulo chamada ‘__test__’ e a utiliza para localizar outros testes.  Se
‘M.__test__’ existir, deve ser um dicionário, e cada entrada mapeia um
nome (string) para um objeto função, objeto classe ou string.  As
docstrings de funções e objetos classe encontradas em ‘M.__test__’ são
pesquisadas e as strings são tratadas como se fossem docstrings.  Na
saída, uma chave ‘K’ em ‘M.__test__’ aparece com o nome ‘M.__test__.K’.

Por exemplo, coloque este bloco de código no topo de ‘example.py’:

     __test__ = {
         'numbers': """
     >>> factorial(6)
     720

     >>> [factorial(n) for n in range(6)]
     [1, 1, 2, 6, 24, 120]
     """
     }

O valor de ‘example.__test__["numbers"]’ será tratado como uma docstring
e todos os testes dentro dele serão executados.  É importante observar
que o valor pode ser mapeado para uma função, objeto classe ou módulo;
se sim, ‘doctest’ pesquisa recursivamente em busca de docstrings, que
são então escaneados em busca de testes.

Quaisquer classes encontradas são pesquisadas recursivamente de forma
semelhante, para testar docstrings em seus métodos contidos e classes
aninhadas.

     Nota: ‘doctest’ can only automatically discover classes and
     functions that are defined at the module level or inside other
     classes.

     Since nested classes and functions only exist when an outer
     function is called, they cannot be discovered.  Define them outside
     to make them visible.


File: python.info,  Node: Como os exemplos de docstrings são reconhecidos?,  Next: Qual é o contexto de execução?,  Prev: Quais docstrings são examinadas?,  Up: Como ele funciona

5.26.4.6 Como os exemplos de docstrings são reconhecidos?
.........................................................

Na maioria dos casos, copiar e colar de uma sessão de console interativo
funciona bem, mas o doctest não está tentando fazer uma emulação exata
de qualquer shell Python específico.

     >>> # comentários são ignorados
     >>> x = 12
     >>> x
     12
     >>> if x == 13:
     ...     print("yes")
     ... else:
     ...     print("no")
     ...     print("NO")
     ...     print("NO!!!")
     ...
     no
     NO
     NO!!!
     >>>

Qualquer saída esperada deve seguir imediatamente a linha final ‘'>>> '’
ou ‘'... '’ contendo o código, e a saída esperada (se houver) se estende
até a próxima ‘'>>> '’ ou linha com apenas espaços em branco.

A saída formatada:

   * A saída esperada não pode conter uma linha com apenas espaços em
     branco, uma vez que tal linha é usada para sinalizar o fim da saída
     esperada.  Se a saída esperada contiver uma linha vazia, coloque
     ‘<BLANKLINE>’ em seu exemplo doctest em cada local onde uma linha
     em branco é esperada.

   * Todos os caracteres de tabulação rígidos são expandidos para
     espaços, usando paradas de tabulação de 8 colunas.  As guias na
     saída gerada pelo código testado não são modificadas.  Como
     quaisquer tabulações rígidas na saída de amostra 'são' expandidas,
     isso significa que se a saída do código incluir tabulações rígidas,
     a única maneira de o doctest passar é se a opção *note
     NORMALIZE_WHITESPACE: 421a. ou a *note diretiva: 421b. estiver em
     vigor.  Alternativamente, o teste pode ser reescrito para capturar
     a saída e compará-la com um valor esperado como parte do teste.
     Esse tratamento das guias na fonte foi obtido por tentativa e erro
     e provou ser a maneira menos propensa a erros de lidar com elas.  É
     possível usar um algoritmo diferente para lidar com guias
     escrevendo uma classe *note DocTestParser: 421c. personalizada.

   * A saída para stdout é capturada, mas não para stderr (os tracebacks
     de exceção são capturados por um meio diferente).

   * Se você continuar uma linha através de barra invertida em uma
     sessão interativa, ou por qualquer outro motivo usar uma barra
     invertida, você deverá usar uma docstring bruta, que preservará
     suas barras invertidas exatamente como você as digita:

          >>> def f(x):
          ...     r'''Backslashes in a raw docstring: m\n'''
          ...
          >>> print(f.__doc__)
          Backslashes in a raw docstring: m\n

     Caso contrário, a barra invertida será interpretada como parte da
     string.  Por exemplo, o ‘\n’ acima seria interpretado como um
     caractere de nova linha.  Alternativamente, você pode duplicar cada
     barra invertida na versão doctest (e não usar uma string bruta):

          >>> def f(x):
          ...     '''Backslashes in a raw docstring: m\\n'''
          ...
          >>> print(f.__doc__)
          Backslashes in a raw docstring: m\n

   * A coluna inicial não importa:

          >>> assert "Easy!"
                >>> import math
                    >>> math.floor(1.9)
                    1

     e tantos caracteres de espaço em branco iniciais são removidos da
     saída esperada quantos apareceram na linha inicial ‘'>>> '’ que
     iniciou o exemplo.


File: python.info,  Node: Qual é o contexto de execução?,  Next: E quanto às exceções?,  Prev: Como os exemplos de docstrings são reconhecidos?,  Up: Como ele funciona

5.26.4.7 Qual é o contexto de execução?
.......................................

Por padrão, cada vez que *note doctest: 3a. encontra uma docstring para
testar, ele usa uma 'cópia superficial' dos globais de ‘M’, para que a
execução de testes não altere os globais reais do módulo, e para que um
teste em ‘M’ não possa deixar migalhas que acidentalmente permitam que
outro teste funcione.  Isso significa que os exemplos podem usar
livremente quaisquer nomes definidos no nível superior em ‘M’ e nomes
definidos anteriormente na docstring que está sendo executada.  Os
exemplos não podem ver nomes definidos em outras docstrings.

Você pode forçar o uso de seu próprio dicionário como contexto de
execução passando ‘globs=seu_dicionario’ para *note testmod(): 14b5. ou
*note testfile(): 420b.


File: python.info,  Node: E quanto às exceções?,  Next: Flags opcionais,  Prev: Qual é o contexto de execução?,  Up: Como ele funciona

5.26.4.8 E quanto às exceções?
..............................

Não tem problema, desde que o traceback seja a única saída produzida
pelo exemplo: basta colar o traceback.  (1)  Como os tracebacks contêm
detalhes que provavelmente mudarão rapidamente (por exemplo, caminhos
exatos de arquivos e números de linha), este é um caso em que o doctest
trabalha duro para ser flexível no que aceita.

Exemplo simples:

     >>> [1, 2, 3].remove(42)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     ValueError: list.remove(x): x not in list

Esse doctest será bem-sucedido se *note ValueError: 202. for levantada,
com o detalhe ‘list.remove(x): x not in list’, conforme mostrado.

A saída esperada para uma exceção deve começar com um cabeçalho do
traceback, que pode ser qualquer uma das duas linhas a seguir,
indentadas da mesma forma que a primeira linha do exemplo:

     Traceback (most recent call last):
     Traceback (innermost last):

The traceback header is followed by an optional traceback stack, whose
contents are ignored by doctest.  The traceback stack is typically
omitted, or copied verbatim from an interactive session.

The traceback stack is followed by the most interesting part: the
line(s) containing the exception type and detail.  This is usually the
last line of a traceback, but can extend across multiple lines if the
exception has a multi-line detail:

     >>> raise ValueError('multi\n    line\ndetail')
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     ValueError: multi
         line
     detail

The last three lines (starting with *note ValueError: 202.) are compared
against the exception’s type and detail, and the rest are ignored.

Best practice is to omit the traceback stack, unless it adds significant
documentation value to the example.  So the last example is probably
better as:

     >>> raise ValueError('multi\n    line\ndetail')
     Traceback (most recent call last):
         ...
     ValueError: multi
         line
     detail

Note that tracebacks are treated very specially.  In particular, in the
rewritten example, the use of ‘...’ is independent of doctest’s *note
ELLIPSIS: 14b6. option.  The ellipsis in that example could be left out,
or could just as well be three (or three hundred) commas or digits, or
an indented transcript of a Monty Python skit.

Some details you should read once, but won’t need to remember:

   * Doctest can’t guess whether your expected output came from an
     exception traceback or from ordinary printing.  So, e.g., an
     example that expects ‘ValueError: 42 is prime’ will pass whether
     *note ValueError: 202. is actually raised or if the example merely
     prints that traceback text.  In practice, ordinary output rarely
     begins with a traceback header line, so this doesn’t create real
     problems.

   * Each line of the traceback stack (if present) must be indented
     further than the first line of the example, 'or' start with a
     non-alphanumeric character.  The first line following the traceback
     header indented the same and starting with an alphanumeric is taken
     to be the start of the exception detail.  Of course this does the
     right thing for genuine tracebacks.

   * When the *note IGNORE_EXCEPTION_DETAIL: 134d. doctest option is
     specified, everything following the leftmost colon and any module
     information in the exception name is ignored.

   * The interactive shell omits the traceback header line for some
     *note SyntaxError: 18d.s.  But doctest uses the traceback header
     line to distinguish exceptions from non-exceptions.  So in the rare
     case where you need to test a ‘SyntaxError’ that omits the
     traceback header, you will need to manually add the traceback
     header line to your test example.

   * For some exceptions, Python displays the position of the error
     using ‘^’ markers and tildes:

          >>> 1 + None
            File "<stdin>", line 1
              1 + None
              ~~^~~~~~
          TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

     Since the lines showing the position of the error come before the
     exception type and detail, they are not checked by doctest.  For
     example, the following test would pass, even though it puts the ‘^’
     marker in the wrong location:

          >>> 1 + None
            File "<stdin>", line 1
              1 + None
              ^~~~~~~~
          TypeError: unsupported operand type(s) for +: 'int' and 'NoneType'

   ---------- Footnotes ----------

   (1) Examples containing both expected output and an exception are not
supported.  Trying to guess where one ends and the other begins is too
error-prone, and that also makes for a confusing test.


File: python.info,  Node: Flags opcionais,  Next: Directives,  Prev: E quanto às exceções?,  Up: Como ele funciona

5.26.4.9 Flags opcionais
........................

A number of option flags control various aspects of doctest’s behavior.
Symbolic names for the flags are supplied as module constants, which can
be *note bitwise ORed: 2202. together and passed to various functions.
The names can also be used in *note doctest directives: 421b, and may be
passed to the doctest command line interface via the ‘-o’ option.

The first group of options define test semantics, controlling aspects of
how doctest decides whether actual output matches an example’s expected
output:

 -- Dado: doctest.DONT_ACCEPT_TRUE_FOR_1

     By default, if an expected output block contains just ‘1’, an
     actual output block containing just ‘1’ or just ‘True’ is
     considered to be a match, and similarly for ‘0’ versus ‘False’.
     When *note DONT_ACCEPT_TRUE_FOR_1: 4223. is specified, neither
     substitution is allowed.  The default behavior caters to that
     Python changed the return type of many functions from integer to
     boolean; doctests expecting “little integer” output still work in
     these cases.  This option will probably go away, but not for
     several years.

 -- Dado: doctest.DONT_ACCEPT_BLANKLINE

     By default, if an expected output block contains a line containing
     only the string ‘<BLANKLINE>’, then that line will match a blank
     line in the actual output.  Because a genuinely blank line delimits
     the expected output, this is the only way to communicate that a
     blank line is expected.  When *note DONT_ACCEPT_BLANKLINE: 4224. is
     specified, this substitution is not allowed.

 -- Dado: doctest.NORMALIZE_WHITESPACE

     When specified, all sequences of whitespace (blanks and newlines)
     are treated as equal.  Any sequence of whitespace within the
     expected output will match any sequence of whitespace within the
     actual output.  By default, whitespace must match exactly.  *note
     NORMALIZE_WHITESPACE: 421a. is especially useful when a line of
     expected output is very long, and you want to wrap it across
     multiple lines in your source.

 -- Dado: doctest.ELLIPSIS

     When specified, an ellipsis marker (‘...’) in the expected output
     can match any substring in the actual output.  This includes
     substrings that span line boundaries, and empty substrings, so it’s
     best to keep usage of this simple.  Complicated uses can lead to
     the same kinds of “oops, it matched too much!” surprises that ‘.*’
     is prone to in regular expressions.

 -- Dado: doctest.IGNORE_EXCEPTION_DETAIL

     When specified, doctests expecting exceptions pass so long as an
     exception of the expected type is raised, even if the details
     (message and fully qualified exception name) don’t match.

     For example, an example expecting ‘ValueError: 42’ will pass if the
     actual exception raised is ‘ValueError: 3*14’, but will fail if,
     say, a *note TypeError: 2c3. is raised instead.  It will also
     ignore any fully qualified name included before the exception
     class, which can vary between implementations and versions of
     Python and the code/libraries in use.  Hence, all three of these
     variations will work with the flag specified:

          >>> raise Exception('message')
          Traceback (most recent call last):
          Exception: message

          >>> raise Exception('message')
          Traceback (most recent call last):
          builtins.Exception: message

          >>> raise Exception('message')
          Traceback (most recent call last):
          __main__.Exception: message

     Note that *note ELLIPSIS: 14b6. can also be used to ignore the
     details of the exception message, but such a test may still fail
     based on whether the module name is present or matches exactly.

     Alterado na versão 3.2: *note IGNORE_EXCEPTION_DETAIL: 134d. now
     also ignores any information relating to the module containing the
     exception under test.

 -- Dado: doctest.SKIP

     When specified, do not run the example at all.  This can be useful
     in contexts where doctest examples serve as both documentation and
     test cases, and an example should be included for documentation
     purposes, but should not be checked.  E.g., the example’s output
     might be random; or the example might depend on resources which
     would be unavailable to the test driver.

     The SKIP flag can also be used for temporarily “commenting out”
     examples.

 -- Dado: doctest.COMPARISON_FLAGS

     A bitmask or’ing together all the comparison flags above.

The second group of options controls how test failures are reported:

 -- Dado: doctest.REPORT_UDIFF

     When specified, failures that involve multi-line expected and
     actual outputs are displayed using a unified diff.

 -- Dado: doctest.REPORT_CDIFF

     When specified, failures that involve multi-line expected and
     actual outputs will be displayed using a context diff.

 -- Dado: doctest.REPORT_NDIFF

     When specified, differences are computed by ‘difflib.Differ’, using
     the same algorithm as the popular ‘ndiff.py’ utility.  This is the
     only method that marks differences within lines as well as across
     lines.  For example, if a line of expected output contains digit
     ‘1’ where actual output contains letter ‘l’, a line is inserted
     with a caret marking the mismatching column positions.

 -- Dado: doctest.REPORT_ONLY_FIRST_FAILURE

     When specified, display the first failing example in each doctest,
     but suppress output for all remaining examples.  This will prevent
     doctest from reporting correct examples that break because of
     earlier failures; but it might also hide incorrect examples that
     fail independently of the first failure.  When *note
     REPORT_ONLY_FIRST_FAILURE: 4227. is specified, the remaining
     examples are still run, and still count towards the total number of
     failures reported; only the output is suppressed.

 -- Dado: doctest.FAIL_FAST

     When specified, exit after the first failing example and don’t
     attempt to run the remaining examples.  Thus, the number of
     failures reported will be at most 1.  This flag may be useful
     during debugging, since examples after the first failure won’t even
     produce debugging output.

 -- Dado: doctest.REPORTING_FLAGS

     A bitmask or’ing together all the reporting flags above.

There is also a way to register new option flag names, though this isn’t
useful unless you intend to extend *note doctest: 3a. internals via
subclassing:

 -- Função: doctest.register_optionflag (name)

     Create a new option flag with a given name, and return the new
     flag’s integer value.  *note register_optionflag(): 4229. can be
     used when subclassing *note OutputChecker: 422a. or *note
     DocTestRunner: 422b. to create new options that are supported by
     your subclasses.  *note register_optionflag(): 4229. should always
     be called using the following idiom:

          MY_FLAG = register_optionflag('MY_FLAG')


File: python.info,  Node: Directives,  Next: Avisos<2>,  Prev: Flags opcionais,  Up: Como ele funciona

5.26.4.10 Directives
....................

Doctest directives may be used to modify the *note option flags: f66.
for an individual example.  Doctest directives are special Python
comments following an example’s source code:

     directive             ::= "#" "doctest:" *note directive_options: 422e.
     directive_options     ::= *note directive_option: 422f. ("," *note directive_option: 422f.)*
     directive_option      ::= *note on_or_off: 4230. *note directive_option_name: 4231.
     on_or_off             ::= "+" | "-"
     directive_option_name ::= "DONT_ACCEPT_BLANKLINE" | "NORMALIZE_WHITESPACE" | ...

Whitespace is not allowed between the ‘+’ or ‘-’ and the directive
option name.  The directive option name can be any of the option flag
names explained above.

An example’s doctest directives modify doctest’s behavior for that
single example.  Use ‘+’ to enable the named behavior, or ‘-’ to disable
it.

Por exemplo, este teste é aprovado:

     >>> print(list(range(20)))  # doctest: +NORMALIZE_WHITESPACE
     [0,   1,  2,  3,  4,  5,  6,  7,  8,  9,
     10,  11, 12, 13, 14, 15, 16, 17, 18, 19]

Without the directive it would fail, both because the actual output
doesn’t have two blanks before the single-digit list elements, and
because the actual output is on a single line.  This test also passes,
and also requires a directive to do so:

     >>> print(list(range(20)))  # doctest: +ELLIPSIS
     [0, 1, ..., 18, 19]

Multiple directives can be used on a single physical line, separated by
commas:

     >>> print(list(range(20)))  # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE
     [0,    1, ...,   18,    19]

If multiple directive comments are used for a single example, then they
are combined:

     >>> print(list(range(20)))  # doctest: +ELLIPSIS
     ...                         # doctest: +NORMALIZE_WHITESPACE
     [0,    1, ...,   18,    19]

As the previous example shows, you can add ‘...’ lines to your example
containing only directives.  This can be useful when an example is too
long for a directive to comfortably fit on the same line:

     >>> print(list(range(5)) + list(range(10, 20)) + list(range(30, 40)))
     ... # doctest: +ELLIPSIS
     [0, ..., 4, 10, ..., 19, 30, ..., 39]

Note that since all options are disabled by default, and directives
apply only to the example they appear in, enabling options (via ‘+’ in a
directive) is usually the only meaningful choice.  However, option flags
can also be passed to functions that run doctests, establishing
different defaults.  In such cases, disabling an option via ‘-’ in a
directive can be useful.


File: python.info,  Node: Avisos<2>,  Prev: Directives,  Up: Como ele funciona

5.26.4.11 Avisos
................

*note doctest: 3a. is serious about requiring exact matches in expected
output.  If even a single character doesn’t match, the test fails.  This
will probably surprise you a few times, as you learn exactly what Python
does and doesn’t guarantee about output.  For example, when printing a
set, Python doesn’t guarantee that the element is printed in any
particular order, so a test like

     >>> foo()
     {"spam", "eggs"}

is vulnerable!  One workaround is to do

     >>> foo() == {"spam", "eggs"}
     True

instead.  Another is to do

     >>> d = sorted(foo())
     >>> d
     ['eggs', 'spam']

There are others, but you get the idea.

Another bad idea is to print things that embed an object address, like

     >>> id(1.0)  # certain to fail some of the time
     7948648
     >>> class C: pass
     >>> C()  # the default repr() for instances embeds an address
     <C object at 0x00AC18F0>

The *note ELLIPSIS: 14b6. directive gives a nice approach for the last
example:

     >>> C()  # doctest: +ELLIPSIS
     <C object at 0x...>

Floating-point numbers are also subject to small output variations
across platforms, because Python defers to the platform C library for
some floating-point calculations, and C libraries vary widely in quality
here.

     >>> 1000**0.1  # risky
     1.9952623149688797
     >>> round(1000**0.1, 9) # safer
     1.995262315
     >>> print(f'{1000**0.1:.4f}') # much safer
     1.9953

Numbers of the form ‘I/2.**J’ are safe across all platforms, and I often
contrive doctest examples to produce numbers of that form:

     >>> 3./4  # utterly safe
     0.75

Simple fractions are also easier for people to understand, and that
makes for better documentation.


File: python.info,  Node: Basic API,  Next: API do Unittest,  Prev: Como ele funciona,  Up: doctest — Teste exemplos interativos de Python

5.26.4.12 Basic API
...................

The functions *note testmod(): 14b5. and *note testfile(): 420b. provide
a simple interface to doctest that should be sufficient for most basic
uses.  For a less formal introduction to these two functions, see
sections *note Uso simples; verificando exemplos em Docstrings: 4205.
and *note Utilização comum; Verificando exemplos em um arquivo texto:
4209.

 -- Função: doctest.testfile (filename, module_relative=True, name=None,
          package=None, globs=None, verbose=None, report=True,
          optionflags=0, extraglobs=None, raise_on_error=False,
          parser=DocTestParser(), encoding=None)

     All arguments except 'filename' are optional, and should be
     specified in keyword form.

     Test examples in the file named 'filename'.  Return
     ‘(failure_count, test_count)’.

     Optional argument 'module_relative' specifies how the filename
     should be interpreted:

        * If 'module_relative' is ‘True’ (the default), then 'filename'
          specifies an OS-independent module-relative path.  By default,
          this path is relative to the calling module’s directory; but
          if the 'package' argument is specified, then it is relative to
          that package.  To ensure OS-independence, 'filename' should
          use ‘/’ characters to separate path segments, and may not be
          an absolute path (i.e., it may not begin with ‘/’).

        * If 'module_relative' is ‘False’, then 'filename' specifies an
          OS-specific path.  The path may be absolute or relative;
          relative paths are resolved with respect to the current
          working directory.

     Optional argument 'name' gives the name of the test; by default, or
     if ‘None’, ‘os.path.basename(filename)’ is used.

     Optional argument 'package' is a Python package or the name of a
     Python package whose directory should be used as the base directory
     for a module-relative filename.  If no package is specified, then
     the calling module’s directory is used as the base directory for
     module-relative filenames.  It is an error to specify 'package' if
     'module_relative' is ‘False’.

     Optional argument 'globs' gives a dict to be used as the globals
     when executing examples.  A new shallow copy of this dict is
     created for the doctest, so its examples start with a clean slate.
     By default, or if ‘None’, a new empty dict is used.

     Optional argument 'extraglobs' gives a dict merged into the globals
     used to execute examples.  This works like *note dict.update():
     14ad.: if 'globs' and 'extraglobs' have a common key, the
     associated value in 'extraglobs' appears in the combined dict.  By
     default, or if ‘None’, no extra globals are used.  This is an
     advanced feature that allows parameterization of doctests.  For
     example, a doctest can be written for a base class, using a generic
     name for the class, then reused to test any number of subclasses by
     passing an 'extraglobs' dict mapping the generic name to the
     subclass to be tested.

     Optional argument 'verbose' prints lots of stuff if true, and
     prints only failures if false; by default, or if ‘None’, it’s true
     if and only if ‘'-v'’ is in *note sys.argv: 12a6.

     Optional argument 'report' prints a summary at the end when true,
     else prints nothing at the end.  In verbose mode, the summary is
     detailed, else the summary is very brief (in fact, empty if all
     tests passed).

     Optional argument 'optionflags' (default value ‘0’) takes the *note
     bitwise OR: 2202. of option flags.  See section *note Flags
     opcionais: f66.

     Optional argument 'raise_on_error' defaults to false.  If true, an
     exception is raised upon the first failure or unexpected exception
     in an example.  This allows failures to be post-mortem debugged.
     Default behavior is to continue running examples.

     Optional argument 'parser' specifies a *note DocTestParser: 421c.
     (or subclass) that should be used to extract tests from the files.
     It defaults to a normal parser (i.e., ‘DocTestParser()’).

     Optional argument 'encoding' specifies an encoding that should be
     used to convert the file to unicode.

 -- Função: doctest.testmod (m=None, name=None, globs=None,
          verbose=None, report=True, optionflags=0, extraglobs=None,
          raise_on_error=False, exclude_empty=False)

     All arguments are optional, and all except for 'm' should be
     specified in keyword form.

     Test examples in docstrings in functions and classes reachable from
     module 'm' (or module *note __main__: 1. if 'm' is not supplied or
     is ‘None’), starting with ‘m.__doc__’.

     Also test examples reachable from dict ‘m.__test__’, if it exists.
     ‘m.__test__’ maps names (strings) to functions, classes and
     strings; function and class docstrings are searched for examples;
     strings are searched directly, as if they were docstrings.

     Only docstrings attached to objects belonging to module 'm' are
     searched.

     Return ‘(failure_count, test_count)’.

     Optional argument 'name' gives the name of the module; by default,
     or if ‘None’, ‘m.__name__’ is used.

     Optional argument 'exclude_empty' defaults to false.  If true,
     objects for which no doctests are found are excluded from
     consideration.  The default is a backward compatibility hack, so
     that code still using *note doctest.master.summarize: 4235. in
     conjunction with *note testmod(): 14b5. continues to get output for
     objects with no tests.  The 'exclude_empty' argument to the newer
     *note DocTestFinder: 171e. constructor defaults to true.

     Optional arguments 'extraglobs', 'verbose', 'report',
     'optionflags', 'raise_on_error', and 'globs' are the same as for
     function *note testfile(): 420b. above, except that 'globs'
     defaults to ‘m.__dict__’.

 -- Função: doctest.run_docstring_examples (f, globs, verbose=False,
          name='NoName', compileflags=None, optionflags=0)

     Test examples associated with object 'f'; for example, 'f' may be a
     string, a module, a function, or a class object.

     A shallow copy of dictionary argument 'globs' is used for the
     execution context.

     Optional argument 'name' is used in failure messages, and defaults
     to ‘"NoName"’.

     If optional argument 'verbose' is true, output is generated even if
     there are no failures.  By default, output is generated only in
     case of an example failure.

     Optional argument 'compileflags' gives the set of flags that should
     be used by the Python compiler when running the examples.  By
     default, or if ‘None’, flags are deduced corresponding to the set
     of future features found in 'globs'.

     Optional argument 'optionflags' works as for function *note
     testfile(): 420b. above.


File: python.info,  Node: API do Unittest,  Next: Advanced API,  Prev: Basic API,  Up: doctest — Teste exemplos interativos de Python

5.26.4.13 API do Unittest
.........................

As your collection of doctest’ed modules grows, you’ll want a way to run
all their doctests systematically.  *note doctest: 3a. provides two
functions that can be used to create *note unittest: 106. test suites
from modules and text files containing doctests.  To integrate with
*note unittest: 106. test discovery, include a *note load_tests: 4239.
function in your test module:

     import unittest
     import doctest
     import my_module_with_doctests

     def load_tests(loader, tests, ignore):
         tests.addTests(doctest.DocTestSuite(my_module_with_doctests))
         return tests

There are two main functions for creating *note unittest.TestSuite: e20.
instances from text files and modules with doctests:

 -- Função: doctest.DocFileSuite (*paths, module_relative=True,
          package=None, setUp=None, tearDown=None, globs=None,
          optionflags=0, parser=DocTestParser(), encoding=None)

     Convert doctest tests from one or more text files to a *note
     unittest.TestSuite: e20.

     The returned *note unittest.TestSuite: e20. is to be run by the
     unittest framework and runs the interactive examples in each file.
     If an example in any file fails, then the synthesized unit test
     fails, and a *note failureException: 423b. exception is raised
     showing the name of the file containing the test and a (sometimes
     approximate) line number.  If all the examples in a file are
     skipped, then the synthesized unit test is also marked as skipped.

     Pass one or more paths (as strings) to text files to be examined.

     Options may be provided as keyword arguments:

     Optional argument 'module_relative' specifies how the filenames in
     'paths' should be interpreted:

        * If 'module_relative' is ‘True’ (the default), then each
          filename in 'paths' specifies an OS-independent
          module-relative path.  By default, this path is relative to
          the calling module’s directory; but if the 'package' argument
          is specified, then it is relative to that package.  To ensure
          OS-independence, each filename should use ‘/’ characters to
          separate path segments, and may not be an absolute path (i.e.,
          it may not begin with ‘/’).

        * If 'module_relative' is ‘False’, then each filename in 'paths'
          specifies an OS-specific path.  The path may be absolute or
          relative; relative paths are resolved with respect to the
          current working directory.

     Optional argument 'package' is a Python package or the name of a
     Python package whose directory should be used as the base directory
     for module-relative filenames in 'paths'.  If no package is
     specified, then the calling module’s directory is used as the base
     directory for module-relative filenames.  It is an error to specify
     'package' if 'module_relative' is ‘False’.

     Optional argument 'setUp' specifies a set-up function for the test
     suite.  This is called before running the tests in each file.  The
     'setUp' function will be passed a *note DocTest: 17a5. object.  The
     'setUp' function can access the test globals as the *note globs:
     423c. attribute of the test passed.

     Optional argument 'tearDown' specifies a tear-down function for the
     test suite.  This is called after running the tests in each file.
     The 'tearDown' function will be passed a *note DocTest: 17a5.
     object.  The 'tearDown' function can access the test globals as the
     *note globs: 423c. attribute of the test passed.

     Optional argument 'globs' is a dictionary containing the initial
     global variables for the tests.  A new copy of this dictionary is
     created for each test.  By default, 'globs' is a new empty
     dictionary.

     Optional argument 'optionflags' specifies the default doctest
     options for the tests, created by or-ing together individual option
     flags.  See section *note Flags opcionais: f66.  See function *note
     set_unittest_reportflags(): 423d. below for a better way to set
     reporting options.

     Optional argument 'parser' specifies a *note DocTestParser: 421c.
     (or subclass) that should be used to extract tests from the files.
     It defaults to a normal parser (i.e., ‘DocTestParser()’).

     Optional argument 'encoding' specifies an encoding that should be
     used to convert the file to unicode.

     The global ‘__file__’ is added to the globals provided to doctests
     loaded from a text file using *note DocFileSuite(): 423a.

 -- Função: doctest.DocTestSuite (module=None, globs=None,
          extraglobs=None, test_finder=None, setUp=None, tearDown=None,
          optionflags=0, checker=None)

     Convert doctest tests for a module to a *note unittest.TestSuite:
     e20.

     The returned *note unittest.TestSuite: e20. is to be run by the
     unittest framework and runs each doctest in the module.  Each
     docstring is run as a separate unit test.  If any of the doctests
     fail, then the synthesized unit test fails, and a *note
     unittest.TestCase.failureException: 423b. exception is raised
     showing the name of the file containing the test and a (sometimes
     approximate) line number.  If all the examples in a docstring are
     skipped, then the

     Optional argument 'module' provides the module to be tested.  It
     can be a module object or a (possibly dotted) module name.  If not
     specified, the module calling this function is used.

     Optional argument 'globs' is a dictionary containing the initial
     global variables for the tests.  A new copy of this dictionary is
     created for each test.  By default, 'globs' is the module’s *note
     __dict__: 20b2.

     Optional argument 'extraglobs' specifies an extra set of global
     variables, which is merged into 'globs'.  By default, no extra
     globals are used.

     Optional argument 'test_finder' is the *note DocTestFinder: 171e.
     object (or a drop-in replacement) that is used to extract doctests
     from the module.

     Optional arguments 'setUp', 'tearDown', and 'optionflags' are the
     same as for function *note DocFileSuite(): 423a. above, but they
     are called for each docstring.

     This function uses the same search technique as *note testmod():
     14b5.

     Alterado na versão 3.5: *note DocTestSuite(): e1f. returns an empty
     *note unittest.TestSuite: e20. if 'module' contains no docstrings
     instead of raising *note ValueError: 202.

Under the covers, *note DocTestSuite(): e1f. creates a *note
unittest.TestSuite: e20. out of ‘doctest.DocTestCase’ instances, and
‘DocTestCase’ is a subclass of *note unittest.TestCase: 44f.
‘DocTestCase’ isn’t documented here (it’s an internal detail), but
studying its code can answer questions about the exact details of *note
unittest: 106. integration.

Similarly, *note DocFileSuite(): 423a. creates a *note
unittest.TestSuite: e20. out of ‘doctest.DocFileCase’ instances, and
‘DocFileCase’ is a subclass of ‘DocTestCase’.

So both ways of creating a *note unittest.TestSuite: e20. run instances
of ‘DocTestCase’.  This is important for a subtle reason: when you run
*note doctest: 3a. functions yourself, you can control the ‘doctest’
options in use directly, by passing option flags to ‘doctest’ functions.
However, if you’re writing a *note unittest: 106. framework, ‘unittest’
ultimately controls when and how tests get run.  The framework author
typically wants to control ‘doctest’ reporting options (perhaps, e.g.,
specified by command line options), but there’s no way to pass options
through ‘unittest’ to ‘doctest’ test runners.

For this reason, *note doctest: 3a. also supports a notion of ‘doctest’
reporting flags specific to *note unittest: 106. support, via this
function:

 -- Função: doctest.set_unittest_reportflags (flags)

     Set the *note doctest: 3a. reporting flags to use.

     Argument 'flags' takes the *note bitwise OR: 2202. of option flags.
     See section *note Flags opcionais: f66.  Only “reporting flags” can
     be used.

     This is a module-global setting, and affects all future doctests
     run by module *note unittest: 106.: the ‘runTest()’ method of
     ‘DocTestCase’ looks at the option flags specified for the test case
     when the ‘DocTestCase’ instance was constructed.  If no reporting
     flags were specified (which is the typical and expected case),
     ‘doctest’’s ‘unittest’ reporting flags are *note bitwise ORed:
     2202. into the option flags, and the option flags so augmented are
     passed to the *note DocTestRunner: 422b. instance created to run
     the doctest.  If any reporting flags were specified when the
     ‘DocTestCase’ instance was constructed, ‘doctest’’s ‘unittest’
     reporting flags are ignored.

     The value of the *note unittest: 106. reporting flags in effect
     before the function was called is returned by the function.


File: python.info,  Node: Advanced API,  Next: Depuração,  Prev: API do Unittest,  Up: doctest — Teste exemplos interativos de Python

5.26.4.14 Advanced API
......................

The basic API is a simple wrapper that’s intended to make doctest easy
to use.  It is fairly flexible, and should meet most users’ needs;
however, if you require more fine-grained control over testing, or wish
to extend doctest’s capabilities, then you should use the advanced API.

The advanced API revolves around two container classes, which are used
to store the interactive examples extracted from doctest cases:

   * *note Example: 4240.: A single Python *note statement: 2935, paired
     with its expected output.

   * *note DocTest: 17a5.: A collection of *note Example: 4240.s,
     typically extracted from a single docstring or text file.

Additional processing classes are defined to find, parse, and run, and
check doctest examples:

   * *note DocTestFinder: 171e.: Finds all docstrings in a given module,
     and uses a *note DocTestParser: 421c. to create a *note DocTest:
     17a5. from every docstring that contains interactive examples.

   * *note DocTestParser: 421c.: Creates a *note DocTest: 17a5. object
     from a string (such as an object’s docstring).

   * *note DocTestRunner: 422b.: Executes the examples in a *note
     DocTest: 17a5, and uses an *note OutputChecker: 422a. to verify
     their output.

   * *note OutputChecker: 422a.: Compares the actual output from a
     doctest example with the expected output, and decides whether they
     match.

The relationships among these processing classes are summarized in the
following diagram:

                                 list of:
     +------+                   +---------+
     |module| --DocTestFinder-> | DocTest | --DocTestRunner-> results
     +------+    |        ^     +---------+     |       ^    (printed)
                 |        |     | Example |     |       |
                 v        |     |   ...   |     v       |
                DocTestParser   | Example |   OutputChecker
                                +---------+

* Menu:

* DocTest Objects::
* Example Objects::
* DocTestFinder objects::
* DocTestParser objects::
* TestResults objects::
* DocTestRunner objects::
* OutputChecker objects::


File: python.info,  Node: DocTest Objects,  Next: Example Objects,  Up: Advanced API

5.26.4.15 DocTest Objects
.........................

 -- Classe: doctest.DocTest (examples, globs, name, filename, lineno,
          docstring)

     A collection of doctest examples that should be run in a single
     namespace.  The constructor arguments are used to initialize the
     attributes of the same names.

     *note DocTest: 17a5. defines the following attributes.  They are
     initialized by the constructor, and should not be modified
     directly.

      -- Atributo: examples

          A list of *note Example: 4240. objects encoding the individual
          interactive Python examples that should be run by this test.

      -- Atributo: globs

          The namespace (aka globals) that the examples should be run
          in.  This is a dictionary mapping names to values.  Any
          changes to the namespace made by the examples (such as binding
          new variables) will be reflected in *note globs: 423c. after
          the test is run.

      -- Atributo: name

          A string name identifying the *note DocTest: 17a5.  Typically,
          this is the name of the object or file that the test was
          extracted from.

      -- Atributo: filename

          The name of the file that this *note DocTest: 17a5. was
          extracted from; or ‘None’ if the filename is unknown, or if
          the ‘DocTest’ was not extracted from a file.

      -- Atributo: lineno

          The line number within *note filename: 4245. where this *note
          DocTest: 17a5. begins, or ‘None’ if the line number is
          unavailable.  This line number is zero-based with respect to
          the beginning of the file.

      -- Atributo: docstring

          The string that the test was extracted from, or ‘None’ if the
          string is unavailable, or if the test was not extracted from a
          string.


File: python.info,  Node: Example Objects,  Next: DocTestFinder objects,  Prev: DocTest Objects,  Up: Advanced API

5.26.4.16 Example Objects
.........................

 -- Classe: doctest.Example (source, want, exc_msg=None, lineno=0,
          indent=0, options=None)

     A single interactive example, consisting of a Python statement and
     its expected output.  The constructor arguments are used to
     initialize the attributes of the same names.

     *note Example: 4240. defines the following attributes.  They are
     initialized by the constructor, and should not be modified
     directly.

      -- Atributo: source

          A string containing the example’s source code.  This source
          code consists of a single Python statement, and always ends
          with a newline; the constructor adds a newline when necessary.

      -- Atributo: want

          The expected output from running the example’s source code
          (either from stdout, or a traceback in case of exception).
          *note want: 424a. ends with a newline unless no output is
          expected, in which case it’s an empty string.  The constructor
          adds a newline when necessary.

      -- Atributo: exc_msg

          The exception message generated by the example, if the example
          is expected to generate an exception; or ‘None’ if it is not
          expected to generate an exception.  This exception message is
          compared against the return value of *note
          traceback.format_exception_only(): 851.  *note exc_msg: 424b.
          ends with a newline unless it’s ‘None’.  The constructor adds
          a newline if needed.

      -- Atributo: lineno

          The line number within the string containing this example
          where the example begins.  This line number is zero-based with
          respect to the beginning of the containing string.

      -- Atributo: indent

          The example’s indentation in the containing string, i.e., the
          number of space characters that precede the example’s first
          prompt.

      -- Atributo: options

          A dictionary mapping from option flags to ‘True’ or ‘False’,
          which is used to override default options for this example.
          Any option flags not contained in this dictionary are left at
          their default value (as specified by the *note DocTestRunner:
          422b.’s *note optionflags: f66.).  By default, no options are
          set.


File: python.info,  Node: DocTestFinder objects,  Next: DocTestParser objects,  Prev: Example Objects,  Up: Advanced API

5.26.4.17 DocTestFinder objects
...............................

 -- Classe: doctest.DocTestFinder (verbose=False,
          parser=DocTestParser(), recurse=True, exclude_empty=True)

     A processing class used to extract the *note DocTest: 17a5.s that
     are relevant to a given object, from its docstring and the
     docstrings of its contained objects.  *note DocTest: 17a5.s can be
     extracted from modules, classes, functions, methods, staticmethods,
     classmethods, and properties.

     The optional argument 'verbose' can be used to display the objects
     searched by the finder.  It defaults to ‘False’ (no output).

     The optional argument 'parser' specifies the *note DocTestParser:
     421c. object (or a drop-in replacement) that is used to extract
     doctests from docstrings.

     If the optional argument 'recurse' is false, then *note
     DocTestFinder.find(): 17f1. will only examine the given object, and
     not any contained objects.

     If the optional argument 'exclude_empty' is false, then *note
     DocTestFinder.find(): 17f1. will include tests for objects with
     empty docstrings.

     *note DocTestFinder: 171e. defines the following method:

      -- Método: find (obj[, name][, module][, globs][, extraglobs])

          Return a list of the *note DocTest: 17a5.s that are defined by
          'obj'’s docstring, or by any of its contained objects’
          docstrings.

          The optional argument 'name' specifies the object’s name; this
          name will be used to construct names for the returned *note
          DocTest: 17a5.s.  If 'name' is not specified, then
          ‘obj.__name__’ is used.

          The optional parameter 'module' is the module that contains
          the given object.  If the module is not specified or is
          ‘None’, then the test finder will attempt to automatically
          determine the correct module.  The object’s module is used:

             * As a default namespace, if 'globs' is not specified.

             * To prevent the DocTestFinder from extracting DocTests
               from objects that are imported from other modules.
               (Contained objects with modules other than 'module' are
               ignored.)

             * To find the name of the file containing the object.

             * To help find the line number of the object within its
               file.

          If 'module' is ‘False’, no attempt to find the module will be
          made.  This is obscure, of use mostly in testing doctest
          itself: if 'module' is ‘False’, or is ‘None’ but cannot be
          found automatically, then all objects are considered to belong
          to the (non-existent) module, so all contained objects will
          (recursively) be searched for doctests.

          The globals for each *note DocTest: 17a5. is formed by
          combining 'globs' and 'extraglobs' (bindings in 'extraglobs'
          override bindings in 'globs').  A new shallow copy of the
          globals dictionary is created for each ‘DocTest’.  If 'globs'
          is not specified, then it defaults to the module’s *note
          __dict__: 20b2, if specified, or ‘{}’ otherwise.  If
          'extraglobs' is not specified, then it defaults to ‘{}’.


File: python.info,  Node: DocTestParser objects,  Next: TestResults objects,  Prev: DocTestFinder objects,  Up: Advanced API

5.26.4.18 DocTestParser objects
...............................

 -- Classe: doctest.DocTestParser

     A processing class used to extract interactive examples from a
     string, and use them to create a *note DocTest: 17a5. object.

     *note DocTestParser: 421c. defines the following methods:

      -- Método: get_doctest (string, globs, name, filename, lineno)

          Extract all doctest examples from the given string, and
          collect them into a *note DocTest: 17a5. object.

          'globs', 'name', 'filename', and 'lineno' are attributes for
          the new ‘DocTest’ object.  See the documentation for *note
          DocTest: 17a5. for more information.

      -- Método: get_examples (string, name='<string>')

          Extract all doctest examples from the given string, and return
          them as a list of *note Example: 4240. objects.  Line numbers
          are 0-based.  The optional argument 'name' is a name
          identifying this string, and is only used for error messages.

      -- Método: parse (string, name='<string>')

          Divide the given string into examples and intervening text,
          and return them as a list of alternating *note Example: 4240.s
          and strings.  Line numbers for the ‘Example’s are 0-based.
          The optional argument 'name' is a name identifying this
          string, and is only used for error messages.


File: python.info,  Node: TestResults objects,  Next: DocTestRunner objects,  Prev: DocTestParser objects,  Up: Advanced API

5.26.4.19 TestResults objects
.............................

 -- Classe: doctest.TestResults (failed, attempted)

      -- Atributo: failed

          Number of failed tests.

      -- Atributo: attempted

          Number of attempted tests.

      -- Atributo: skipped

          Number of skipped tests.

          Adicionado na versão 3.13.


File: python.info,  Node: DocTestRunner objects,  Next: OutputChecker objects,  Prev: TestResults objects,  Up: Advanced API

5.26.4.20 DocTestRunner objects
...............................

 -- Classe: doctest.DocTestRunner (checker=None, verbose=None,
          optionflags=0)

     A processing class used to execute and verify the interactive
     examples in a *note DocTest: 17a5.

     The comparison between expected outputs and actual outputs is done
     by an *note OutputChecker: 422a.  This comparison may be customized
     with a number of option flags; see section *note Flags opcionais:
     f66. for more information.  If the option flags are insufficient,
     then the comparison may also be customized by passing a subclass of
     ‘OutputChecker’ to the constructor.

     The test runner’s display output can be controlled in two ways.
     First, an output function can be passed to *note run(): 1dc.; this
     function will be called with strings that should be displayed.  It
     defaults to ‘sys.stdout.write’.  If capturing the output is not
     sufficient, then the display output can be also customized by
     subclassing DocTestRunner, and overriding the methods *note
     report_start(): 425c, *note report_success(): 425d, *note
     report_unexpected_exception(): 425e, and *note report_failure():
     425f.

     The optional keyword argument 'checker' specifies the *note
     OutputChecker: 422a. object (or drop-in replacement) that should be
     used to compare the expected outputs to the actual outputs of
     doctest examples.

     The optional keyword argument 'verbose' controls the *note
     DocTestRunner: 422b.’s verbosity.  If 'verbose' is ‘True’, then
     information is printed about each example, as it is run.  If
     'verbose' is ‘False’, then only failures are printed.  If 'verbose'
     is unspecified, or ‘None’, then verbose output is used iff the
     command-line switch ‘-v’ is used.

     The optional keyword argument 'optionflags' can be used to control
     how the test runner compares expected output to actual output, and
     how it displays failures.  For more information, see section *note
     Flags opcionais: f66.

     The test runner accumulates statistics.  The aggregated number of
     attempted, failed and skipped examples is also available via the
     *note tries: 4260, *note failures: 4261. and *note skips: 1dd.
     attributes.  The *note run(): 1dc. and *note summarize(): 4235.
     methods return a *note TestResults: 4257. instance.

     *note DocTestRunner: 422b. defines the following methods:

      -- Método: report_start (out, test, example)

          Report that the test runner is about to process the given
          example.  This method is provided to allow subclasses of *note
          DocTestRunner: 422b. to customize their output; it should not
          be called directly.

          'example' is the example about to be processed.  'test' is the
          test containing 'example'.  'out' is the output function that
          was passed to *note DocTestRunner.run(): 1dc.

      -- Método: report_success (out, test, example, got)

          Report that the given example ran successfully.  This method
          is provided to allow subclasses of *note DocTestRunner: 422b.
          to customize their output; it should not be called directly.

          'example' is the example about to be processed.  'got' is the
          actual output from the example.  'test' is the test containing
          'example'.  'out' is the output function that was passed to
          *note DocTestRunner.run(): 1dc.

      -- Método: report_failure (out, test, example, got)

          Report that the given example failed.  This method is provided
          to allow subclasses of *note DocTestRunner: 422b. to customize
          their output; it should not be called directly.

          'example' is the example about to be processed.  'got' is the
          actual output from the example.  'test' is the test containing
          'example'.  'out' is the output function that was passed to
          *note DocTestRunner.run(): 1dc.

      -- Método: report_unexpected_exception (out, test, example,
               exc_info)

          Report that the given example raised an unexpected exception.
          This method is provided to allow subclasses of *note
          DocTestRunner: 422b. to customize their output; it should not
          be called directly.

          'example' is the example about to be processed.  'exc_info' is
          a tuple containing information about the unexpected exception
          (as returned by *note sys.exc_info(): 68a.).  'test' is the
          test containing 'example'.  'out' is the output function that
          was passed to *note DocTestRunner.run(): 1dc.

      -- Método: run (test, compileflags=None, out=None,
               clear_globs=True)

          Run the examples in 'test' (a *note DocTest: 17a5. object),
          and display the results using the writer function 'out'.
          Return a *note TestResults: 4257. instance.

          The examples are run in the namespace ‘test.globs’.  If
          'clear_globs' is true (the default), then this namespace will
          be cleared after the test runs, to help with garbage
          collection.  If you would like to examine the namespace after
          the test completes, then use 'clear_globs=False'.

          'compileflags' gives the set of flags that should be used by
          the Python compiler when running the examples.  If not
          specified, then it will default to the set of future-import
          flags that apply to 'globs'.

          The output of each example is checked using the *note
          DocTestRunner: 422b.’s output checker, and the results are
          formatted by the ‘DocTestRunner.report_*()’ methods.

      -- Método: summarize (verbose=None)

          Print a summary of all the test cases that have been run by
          this DocTestRunner, and return a *note TestResults: 4257.
          instance.

          The optional 'verbose' argument controls how detailed the
          summary is.  If the verbosity is not specified, then the *note
          DocTestRunner: 422b.’s verbosity is used.

     *note DocTestParser: 421c. has the following attributes:

      -- Atributo: tries

          Number of attempted examples.

      -- Atributo: failures

          Number of failed examples.

      -- Atributo: skips

          Number of skipped examples.

          Adicionado na versão 3.13.


File: python.info,  Node: OutputChecker objects,  Prev: DocTestRunner objects,  Up: Advanced API

5.26.4.21 OutputChecker objects
...............................

 -- Classe: doctest.OutputChecker

     A class used to check the whether the actual output from a doctest
     example matches the expected output.  *note OutputChecker: 422a.
     defines two methods: *note check_output(): 4264, which compares a
     given pair of outputs, and returns ‘True’ if they match; and *note
     output_difference(): 4265, which returns a string describing the
     differences between two outputs.

     *note OutputChecker: 422a. define os seguintes métodos:

      -- Método: check_output (want, got, optionflags)

          Return ‘True’ iff the actual output from an example ('got')
          matches the expected output ('want').  These strings are
          always considered to match if they are identical; but
          depending on what option flags the test runner is using,
          several non-exact match types are also possible.  See section
          *note Flags opcionais: f66. for more information about option
          flags.

      -- Método: output_difference (example, got, optionflags)

          Return a string describing the differences between the
          expected output for a given example ('example') and the actual
          output ('got').  'optionflags' is the set of option flags used
          to compare 'want' and 'got'.


File: python.info,  Node: Depuração,  Next: Soapbox,  Prev: Advanced API,  Up: doctest — Teste exemplos interativos de Python

5.26.4.22 Depuração
...................

Doctest provides several mechanisms for debugging doctest examples:

   * Several functions convert doctests to executable Python programs,
     which can be run under the Python debugger, *note pdb: a5.

   * The *note DebugRunner: 4268. class is a subclass of *note
     DocTestRunner: 422b. that raises an exception for the first failing
     example, containing information about that example.  This
     information can be used to perform post-mortem debugging on the
     example.

   * The *note unittest: 106. cases generated by *note DocTestSuite():
     e1f. support the *note debug(): 4269. method defined by *note
     unittest.TestCase: 44f.

   * You can add a call to *note pdb.set_trace(): 235. in a doctest
     example, and you’ll drop into the Python debugger when that line is
     executed.  Then you can inspect current values of variables, and so
     on.  For example, suppose ‘a.py’ contains just this module
     docstring:

          """
          >>> def f(x):
          ...     g(x*2)
          >>> def g(x):
          ...     print(x+3)
          ...     import pdb; pdb.set_trace()
          >>> f(3)
          9
          """

     Then an interactive Python session may look like this:

          >>> import a, doctest
          >>> doctest.testmod(a)
          --Return--
          > <doctest a[1]>(3)g()->None
          -> import pdb; pdb.set_trace()
          (Pdb) list
            1     def g(x):
            2         print(x+3)
            3  ->     import pdb; pdb.set_trace()
          [EOF]
          (Pdb) p x
          6
          (Pdb) step
          --Return--
          > <doctest a[0]>(2)f()->None
          -> g(x*2)
          (Pdb) list
            1     def f(x):
            2  ->     g(x*2)
          [EOF]
          (Pdb) p x
          3
          (Pdb) step
          --Return--
          > <doctest a[2]>(1)?()->None
          -> f(3)
          (Pdb) cont
          (0, 3)
          >>>

Functions that convert doctests to Python code, and possibly run the
synthesized code under the debugger:

 -- Função: doctest.script_from_examples (s)

     Convert text with examples to a script.

     Argument 's' is a string containing doctest examples.  The string
     is converted to a Python script, where doctest examples in 's' are
     converted to regular code, and everything else is converted to
     Python comments.  The generated script is returned as a string.
     For example,

          import doctest
          print(doctest.script_from_examples(r"""
              Set x and y to 1 and 2.
              >>> x, y = 1, 2

              Print their sum:
              >>> print(x+y)
              3
          """))

     displays:

          # Set x and y to 1 and 2.
          x, y = 1, 2
          #
          # Print their sum:
          print(x+y)
          # Expected:
          ## 3

     This function is used internally by other functions (see below),
     but can also be useful when you want to transform an interactive
     Python session into a Python script.

 -- Função: doctest.testsource (module, name)

     Convert the doctest for an object to a script.

     Argument 'module' is a module object, or dotted name of a module,
     containing the object whose doctests are of interest.  Argument
     'name' is the name (within the module) of the object with the
     doctests of interest.  The result is a string, containing the
     object’s docstring converted to a Python script, as described for
     *note script_from_examples(): 426a. above.  For example, if module
     ‘a.py’ contains a top-level function ‘f()’, then

          import a, doctest
          print(doctest.testsource(a, "a.f"))

     prints a script version of function ‘f()’’s docstring, with
     doctests converted to code, and the rest placed in comments.

 -- Função: doctest.debug (module, name, pm=False)

     Debug the doctests for an object.

     The 'module' and 'name' arguments are the same as for function
     *note testsource(): 426b. above.  The synthesized Python script for
     the named object’s docstring is written to a temporary file, and
     then that file is run under the control of the Python debugger,
     *note pdb: a5.

     A shallow copy of ‘module.__dict__’ is used for both local and
     global execution context.

     Optional argument 'pm' controls whether post-mortem debugging is
     used.  If 'pm' has a true value, the script file is run directly,
     and the debugger gets involved only if the script terminates via
     raising an unhandled exception.  If it does, then post-mortem
     debugging is invoked, via *note pdb.post_mortem(): 1421, passing
     the traceback object from the unhandled exception.  If 'pm' is not
     specified, or is false, the script is run under the debugger from
     the start, via passing an appropriate *note exec(): 17f. call to
     *note pdb.run(): 426c.

 -- Função: doctest.debug_src (src, pm=False, globs=None)

     Debug the doctests in a string.

     This is like function *note debug(): 4269. above, except that a
     string containing doctest examples is specified directly, via the
     'src' argument.

     Optional argument 'pm' has the same meaning as in function *note
     debug(): 4269. above.

     Optional argument 'globs' gives a dictionary to use as both local
     and global execution context.  If not specified, or ‘None’, an
     empty dictionary is used.  If specified, a shallow copy of the
     dictionary is used.

The *note DebugRunner: 4268. class, and the special exceptions it may
raise, are of most interest to testing framework authors, and will only
be sketched here.  See the source code, and especially *note
DebugRunner: 4268.’s docstring (which is a doctest!)  for more details:

 -- Classe: doctest.DebugRunner (checker=None, verbose=None,
          optionflags=0)

     A subclass of *note DocTestRunner: 422b. that raises an exception
     as soon as a failure is encountered.  If an unexpected exception
     occurs, an *note UnexpectedException: 426e. exception is raised,
     containing the test, the example, and the original exception.  If
     the output doesn’t match, then a *note DocTestFailure: 426f.
     exception is raised, containing the test, the example, and the
     actual output.

     For information about the constructor parameters and methods, see
     the documentation for *note DocTestRunner: 422b. in section *note
     Advanced API: 423f.

There are two exceptions that may be raised by *note DebugRunner: 4268.
instances:

 -- Exceção: doctest.DocTestFailure (test, example, got)

     An exception raised by *note DocTestRunner: 422b. to signal that a
     doctest example’s actual output did not match its expected output.
     The constructor arguments are used to initialize the attributes of
     the same names.

*note DocTestFailure: 426f. defines the following attributes:

 -- Atributo: DocTestFailure.test

     The *note DocTest: 17a5. object that was being run when the example
     failed.

 -- Atributo: DocTestFailure.example

     The *note Example: 4240. that failed.

 -- Atributo: DocTestFailure.got

     The example’s actual output.

 -- Exceção: doctest.UnexpectedException (test, example, exc_info)

     An exception raised by *note DocTestRunner: 422b. to signal that a
     doctest example raised an unexpected exception.  The constructor
     arguments are used to initialize the attributes of the same names.

*note UnexpectedException: 426e. define os seguintes atributos:

 -- Atributo: UnexpectedException.test

     The *note DocTest: 17a5. object that was being run when the example
     failed.

 -- Atributo: UnexpectedException.example

     The *note Example: 4240. that failed.

 -- Atributo: UnexpectedException.exc_info

     A tuple containing information about the unexpected exception, as
     returned by *note sys.exc_info(): 68a.


File: python.info,  Node: Soapbox,  Prev: Depuração,  Up: doctest — Teste exemplos interativos de Python

5.26.4.23 Soapbox
.................

As mentioned in the introduction, *note doctest: 3a. has grown to have
three primary uses:

  1. Checking examples in docstrings.

  2. Regression testing.

  3. Executable documentation / literate testing.

These uses have different requirements, and it is important to
distinguish them.  In particular, filling your docstrings with obscure
test cases makes for bad documentation.

When writing a docstring, choose docstring examples with care.  There’s
an art to this that needs to be learned—it may not be natural at first.
Examples should add genuine value to the documentation.  A good example
can often be worth many words.  If done with care, the examples will be
invaluable for your users, and will pay back the time it takes to
collect them many times over as the years go by and things change.  I’m
still amazed at how often one of my *note doctest: 3a. examples stops
working after a “harmless” change.

Doctest also makes an excellent tool for regression testing, especially
if you don’t skimp on explanatory text.  By interleaving prose and
examples, it becomes much easier to keep track of what’s actually being
tested, and why.  When a test fails, good prose can make it much easier
to figure out what the problem is, and how it should be fixed.  It’s
true that you could write extensive comments in code-based testing, but
few programmers do.  Many have found that using doctest approaches
instead leads to much clearer tests.  Perhaps this is simply because
doctest makes writing prose a little easier than writing code, while
writing comments in code is a little harder.  I think it goes deeper
than just that: the natural attitude when writing a doctest-based test
is that you want to explain the fine points of your software, and
illustrate them with examples.  This in turn naturally leads to test
files that start with the simplest features, and logically progress to
complications and edge cases.  A coherent narrative is the result,
instead of a collection of isolated functions that test isolated bits of
functionality seemingly at random.  It’s a different attitude, and
produces different results, blurring the distinction between testing and
explaining.

Regression testing is best confined to dedicated objects or files.
There are several options for organizing tests:

   * Write text files containing test cases as interactive examples, and
     test the files using *note testfile(): 420b. or *note
     DocFileSuite(): 423a.  This is recommended, although is easiest to
     do for new projects, designed from the start to use doctest.

   * Define functions named ‘_regrtest_topic’ that consist of single
     docstrings, containing test cases for the named topics.  These
     functions can be included in the same file as the module, or
     separated out into a separate test file.

   * Define a *note __test__: 4217. dictionary mapping from regression
     test topics to docstrings containing test cases.

When you have placed your tests in a module, the module can itself be
the test runner.  When a test fails, you can arrange for your test
runner to re-run only the failing doctest while you debug the problem.
Here is a minimal example of such a test runner:

     if __name__ == '__main__':
         import doctest
         flags = doctest.REPORT_NDIFF|doctest.FAIL_FAST
         if len(sys.argv) > 1:
             name = sys.argv[1]
             if name in globals():
                 obj = globals()[name]
             else:
                 obj = __test__[name]
             doctest.run_docstring_examples(obj, globals(), name=name,
                                            optionflags=flags)
         else:
             fail, total = doctest.testmod(optionflags=flags)
             print(f"{fail} failures out of {total} tests")


File: python.info,  Node: unittest — Framework de testes unitários,  Next: unittest mock — mock object library,  Prev: doctest — Teste exemplos interativos de Python,  Up: Ferramentas de Desenvolvimento

5.26.5 ‘unittest’ — Framework de testes unitários
-------------------------------------------------

'Código-fonte:' Lib/unittest/__init__.py(1)

__________________________________________________________________

(Caso já estejas familiarizado com os conceitos básicos de testes,
poderás querer ignorar *note a lista de métodos assertivos: 427b.)

O framework de testes unitários *note unittest: 106. foi originalmente
inspirado no JUnit e tem um sabor semelhante contendo as principais
estruturas de teste de unidades existentes em outras linguagens.  Ele
suporta a automação de testes, compartilhamento de configuração e código
de desligamento para testes, agregação de testes em coleções e
independência dos testes do framework de relatórios.

Para conseguir isso, o módulo *note unittest: 106. suporta alguns
conceitos importantes de forma orientada a objetos:

definição de contexto de teste

     Uma 'definição de contexto de teste' representa a preparação
     necessária pra performar um ou mais testes, além de quaisquer ações
     de limpeza relacionadas.  Isso pode envolver, por exemplo, criar
     bancos de dados proxy ou temporários, diretórios ou iniciar um
     processo de servidor.

caso de teste

     Um 'test case' é uma unidade de teste individual.  O mesmo verifica
     uma resposta específica a um determinado conjunto de entradas.  O
     *note unittest: 106. fornece uma classe base, *note TestCase: 44f,
     que pode ser usada para criar novos casos de teste.

Suíte de Testes

     Uma 'test suite' é uma coleção de casos de teste, conjuntos de
     teste ou ambos.  O mesmo é usado para agregar testes que devem ser
     executados juntos.

test runner

     Um 'test runner' é um componente que orquestra a execução de testes
     e fornece o resultado para o usuário.  O runner pode usar uma
     interface gráfica, uma interface textual ou retornar um valor
     especial para indicar os resultados da execução dos testes.

Ver também
..........

Módulo *note doctest: 3a.

     Outro módulo de suporte a testes com um sabor muito diferente.

Simple Smalltalk Testing: With Patterns(2)

     O documento original de Kent Beck sobre estruturas de teste usando
     o padrão compartilhado por *note unittest: 106.

pytest(3)

     É um framework externo do unittest com uma sintaxe mais leve para
     escrever testes.  Por exemplo, ‘assert func(10) == 42’.

The Python Testing Tools Taxonomy(4)

     Uma extensa lista de ferramentas para testar código Python,
     incluindo estruturas de teste funcionais e bibliotecas de objetos
     simulados.

Testing in Python Mailing List(5)

     Um grupo de interesse especial para discussão de testes e
     ferramentas de teste, em Python.

The script ‘Tools/unittestgui/unittestgui.py’ in the Python source
distribution is a GUI tool for test discovery and execution.  This is
intended largely for ease of use for those new to unit testing.  For
production environments it is recommended that tests be driven by a
continuous integration system such as Buildbot(6), Jenkins(7), GitHub
Actions(8), or AppVeyor(9).

* Menu:

* Exemplo Básico::
* Interface de linha de comando: Interface de linha de comando<8>.
* Test Discovery::
* Organizando código teste::
* Reutilizando códigos de teste antigos::
* Ignorando testes e falhas esperadas::
* Distinguindo iterações de teste utilizando subtestes::
* Classes e funções::
* Classes e Módulos de Definição de Contexto::
* Tratamento de sinal::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/unittest/__init__.py

   (2) 
https://web.archive.org/web/20150315073817/http://www.xprogramming.com/testfram.htm

   (3) https://docs.pytest.org/

   (4) https://wiki.python.org/moin/PythonTestingToolsTaxonomy

   (5) http://lists.idyll.org/listinfo/testing-in-python

   (6) https://buildbot.net/

   (7) https://www.jenkins.io/

   (8) https://github.com/features/actions

   (9) https://www.appveyor.com/


File: python.info,  Node: Exemplo Básico,  Next: Interface de linha de comando<8>,  Up: unittest — Framework de testes unitários

5.26.5.1 Exemplo Básico
.......................

O módulo *note unittest: 106. fornece um conjunto amplo de ferramentas
para a construção e execução de testes.  Esta seção demonstra que um
pequeno subconjunto das ferramentas é suficiente para atender às
necessidades da maioria dos usuários.

Aqui temos um simples Script para testar três métodos de String:

     import unittest

     class TestStringMethods(unittest.TestCase):

         def test_upper(self):
             self.assertEqual('foo'.upper(), 'FOO')

         def test_isupper(self):
             self.assertTrue('FOO'.isupper())
             self.assertFalse('Foo'.isupper())

         def test_split(self):
             s = 'hello world'
             self.assertEqual(s.split(), ['hello', 'world'])
             # check that s.split fails when the separator is not a string
             with self.assertRaises(TypeError):
                 s.split(2)

     if __name__ == '__main__':
         unittest.main()

A test case is created by subclassing *note unittest.TestCase: 44f.  The
three individual tests are defined with methods whose names start with
the letters ‘test’.  This naming convention informs the test runner
about which methods represent tests.

O cerne de cada teste é a invocação de um método *note assertEqual():
529. para verificar se há um resultado esperado; *note assertTrue():
527. ou *note assertFalse(): 528. para verificar uma condição; ou *note
assertRaises(): 52d. para verificar se uma exceção específica será
levantada.  Esses métodos são usados ao invés de utilizar a expressão
*note assert: 96f. para que o runner de teste possa acumular todos os
resultados do teste e produzir um relatório.

Os métodos *note setUp(): 137e. e *note tearDown(): 137f. permitem que
você defina instruções que serão executadas antes e depois de cada
método de teste.  Eles são abordados em mais detalhes na seção *note
Organizando código teste: 427e.

O bloco final mostra uma maneira simples de executar os testes.  A
função *note unittest.main(): 1019. fornece uma interface de linha de
comando para o Script de teste.  Quando executado a partir da linha de
comando, o Script acima produz uma saída que se parece com isso:

     ...
     ----------------------------------------------------------------------
     Ran 3 tests in 0.000s

     OK

Passando a opção ‘-v’ para o nosso Script de teste instruirá a função
*note unittest.main(): 1019. a habilitar um nível mais alto de
verbosidade e produzirá a seguinte saída:

     test_isupper (__main__.TestStringMethods.test_isupper) ... ok
     test_split (__main__.TestStringMethods.test_split) ... ok
     test_upper (__main__.TestStringMethods.test_upper) ... ok

     ----------------------------------------------------------------------
     Ran 3 tests in 0.001s

     OK

Os exemplos acima mostram os recursos mais utilizados *note unittest:
106. que são suficientes para atender a muitas necessidades de testes
diários.  O restante da documentação explora o conjunto completo de
recursos desde os primeiros princípios.

Alterado na versão 3.11: The behavior of returning a value from a test
method (other than the default ‘None’ value), is now deprecated.


File: python.info,  Node: Interface de linha de comando<8>,  Next: Test Discovery,  Prev: Exemplo Básico,  Up: unittest — Framework de testes unitários

5.26.5.2 Interface de linha de comando
......................................

O módulo unittest pode ser usado diretamente da linha de comando para
executar testes de módulos, classes ou mesmo testes de métodos
individuais:

     python -m unittest test_module1 test_module2
     python -m unittest test_module.TestClass
     python -m unittest test_module.TestClass.test_method

Você pode passar uma lista com qualquer combinação de nomes de módulos e
nomes de classes ou métodos totalmente qualificados.

Os módulos de teste podem ser especificados por caminhos de arquivo
também:

     python -m unittest tests/test_something.py

Isso permite que você use o auto-completar do console/shell para
especificar o módulo de teste.  O arquivo especificado precisa ser
“importável” como um módulo.  O caminho é convertido para um nome de
módulo ao remover a extensão ‘.py’ e conversando os separadores do
caminho em ‘.’.  Se você quer executar um arquivo de teste que não é
importável como um módulo, você deve executar o arquivo diretamente.

Você pode executar os testes com mais detalhes (maior verbosidade) ao
usar o sinalizador -v:

     python -m unittest -v test_module

Quando executado sem argumentos *note Test Discovery: 4281. é iniciado:

     python -m unittest

Para uma lista de todas as opções de linha de comando:

     python -m unittest -h

Alterado na versão 3.2: Em versões mais antigas, era possível de
executar apenas testes de métodos individuais e não de módulos ou
classes.

* Menu:

* Opções de linha de comando: Opções de linha de comando<4>.


File: python.info,  Node: Opções de linha de comando<4>,  Up: Interface de linha de comando<8>

5.26.5.3 Opções de linha de comando
...................................

‘unittest’ suporta as seguintes opções de linha de comando:

 -- Option: -b, --buffer

     Os streams da saída padrão e do erro padrão são carregados durante
     a execução do teste.  A saída de um teste que passou é descartada.
     A saída geralmente é mostrada quando um teste falha e é adicionada
     às mensagens de falha.

 -- Option: -c, --catch

     ‘Control’-‘C’ durante a execução do teste aguarda até que o teste
     corrente termine e a partir disso mostra todos os resultados até o
     momento.  Um segundo ‘Control’-‘C’ invoca uma exceção *note
     KeyboardInterrupt: 9d9. comum.

     Veja *note Signal Handling: 4285. para as funções que provêm essa
     funcionalidade.

 -- Option: -f, --failfast

     Parar a execução do teste no primeiro erro ou falha.

 -- Option: -k

     Only run test methods and classes that match the pattern or
     substring.  This option may be used multiple times, in which case
     all test cases that match any of the given patterns are included.

     Padrões que contém um caractere curinga (‘*’) são combinados com os
     testes pelo método *note fnmatch.fnmatchcase(): 19e0.; caso
     contrário, é utilizada uma combinação simples de substrings,
     diferenciando-se letras maiúsculas e minúsculas.

     Padrões são combinados com o nome completo qualificado do método de
     teste no formato que ele é importado pelo carregador.

     Por exemplo, ‘-k foo’ combina com
     ‘foo_tests.SomeTest.test_something’, ‘bar_tests.SomeTest.test_foo’,
     mas não com ‘bar_tests.FooTest.test_something’.

 -- Option: --locals

     Mostra variáveis locais no traceback.

 -- Option: --durations N

     Show the N slowest test cases (N=0 for all).

Adicionado na versão 3.2: As opções de linha de comando ‘-b’, ‘-c’ e
‘-f’ foram adicionadas.

Adicionado na versão 3.5: A opção de linha de comando ‘--locals’.

Adicionado na versão 3.7: A opção de linha de comando ‘-k’.

Adicionado na versão 3.12: The command-line option ‘--durations’.

A linha de comando também pode ser usada para descobrir testes, para
executar todos os testes de um projeto ou apenas de um subconjunto.


File: python.info,  Node: Test Discovery,  Next: Organizando código teste,  Prev: Interface de linha de comando<8>,  Up: unittest — Framework de testes unitários

5.26.5.4 Test Discovery
.......................

Adicionado na versão 3.2.

Unittest supports simple test discovery.  In order to be compatible with
test discovery, all of the test files must be *note modules: 1ddc. or
*note packages: 1ded. importable from the top-level directory of the
project (this means that their filenames must be valid *note
identifiers: 2021.).

O descobrimento de testes é implementado no *note TestLoader.discover():
101b, mas também pode ser utilizado a partir da linha de comando.  O
comando básico para uso é:

     cd project_directory
     python -m unittest discover

     Nota: Como um atalho, ‘python -m unittest’ é o equivalente a
     ‘python -m unittest discover’.  Se você deseja passar argumentos
     para a descoberta de testes, o subcomando ‘discover’ deve ser usado
     explicitamente.

O sub-comando ‘discover’ (descubra) tem as seguintes opções:

 -- Option: -v, --verbose

     Saída verbosa

 -- Option: -s, --start-directory directory

     Diretório no qual se inicia o descobrimento (‘.’ por padrão)

 -- Option: -p, --pattern pattern

     Padrão de texto para se descobrir os arquivos de teste (‘test*.py’
     por padrão)

 -- Option: -t, --top-level-directory directory

     Diretório raiz do projeto (diretório de início por padrão)

As opções *note -s: 428d, *note -p: 428f. e *note -t: 4291. podem ser
passadas como argumentos posicionais nessa ordem.  As duas linhas de
comando seguintes são equivalentes:

     python -m unittest discover -s project_directory -p "*_test.py"
     python -m unittest discover project_directory "*_test.py"

Além de aceitar caminhos, também é possível passar o nome de um pacote,
como ‘myproject.subpackage.test’, como diretório de início.  O nome do
pacote que for passado será importado e sua localização no sistema de
arquivos será utilizada como diretório de início.

     Cuidado: O descobridor de testes importa os testes para
     carregá-los.  Uma vez que o descobridor tiver encontrado todos os
     arquivos de teste a partir do diretório de início especificado, ele
     transforma os caminhos em nomes de pacotes para conseguir
     importá-los.  Por exemplo, ‘foo/bar/baz.py’ será importado como
     ‘foo.bar.baz’.

     Se você possuir um pacote instalado globalmente e tentar executar o
     descobrimento em uma versão diferente deste mesmo pacote, a
     importação 'pode' acontecer do lugar errado.  Se isso acontecer, o
     descobridor de testes irá emitir um alerta e encerrar a execução.

     Se você configurar o diretório de início como sendo um nome de
     pacote, não um caminho para um diretório, o descobridor irá
     presumir que qualquer local do qual ele importar é o local correto.
     Neste caso, nenhum alerta será emitido.

Módulos de testes e pacotes podem conter customizações no carregamento
de testes utilizando *note load_tests protocol: 4293.

Alterado na versão 3.4: Descoberta de testes suporta *note pacote de
espaço de nomes: 1dee. para o diretório de início.  Perceba que você
precisa especificar o diretório de nível superior também (ex: ‘python -m
unittest discover -s root/namespace -t root’).

Alterado na versão 3.11: *note unittest: 106. dropped the *note
namespace packages: 1dee. support in Python 3.11.  It has been broken
since Python 3.7.  Start directory and subdirectories containing tests
must be regular package that have ‘__init__.py’ file.

Directories containing start directory still can be a namespace package.
In this case, you need to specify start directory as dotted package
name, and target directory explicitly.  For example:

     # proj/  <-- current directory
     #   namespace/
     #     mypkg/
     #       __init__.py
     #       test_mypkg.py

     python -m unittest discover -s namespace.mypkg -t .


File: python.info,  Node: Organizando código teste,  Next: Reutilizando códigos de teste antigos,  Prev: Test Discovery,  Up: unittest — Framework de testes unitários

5.26.5.5 Organizando código teste
.................................

O bloco básico de construção dos testes unitários são os 'casos de
teste' — cenários únicos que devem ser configurados e avaliados em sua
correção.  No *note unittest: 106, casos de teste são representados por
instâncias *note unittest.TestCase: 44f.  Para criar seus próprios casos
de teste, você deve escrever subclasses de *note TestCase: 44f. ou
utilizar *note FunctionTestCase: 17fb.

O código de teste em uma instância da classe *note TestCase: 44f. deve
ser completamente auto-contido, de maneira que ele possa ser executado
isoladamente ou combinado, de forma arbitrária, com quaisquer outros
casos de teste.

A mais simples subclasse de *note TestCase: 44f. irá implementar um
método de teste (i.e.  um método cujo nome começa com ‘test’) para
executar um teste:

     import unittest

     class DefaultWidgetSizeTestCase(unittest.TestCase):
         def test_default_widget_size(self):
             widget = Widget('The widget')
             self.assertEqual(widget.size(), (50, 50))

Note that in order to test something, we use one of the *note assert*
methods: 427b. provided by the *note TestCase: 44f. base class.  If the
test fails, an exception will be raised with an explanatory message, and
*note unittest: 106. will identify the test case as a 'failure'.  Any
other exceptions will be treated as 'errors'.

Os testes podem ser muitos, e as configurações podem ser repetitivas.
Por sorte, temos como reaproveitar estas configurações implementando um
método chamado *note setUp(): 137e, o qual será automaticamente chamado
pelo framework de teste para cada teste único que executarmos:

     import unittest

     class WidgetTestCase(unittest.TestCase):
         def setUp(self):
             self.widget = Widget('The widget')

         def test_default_widget_size(self):
             self.assertEqual(self.widget.size(), (50,50),
                              'incorrect default size')

         def test_widget_resize(self):
             self.widget.resize(100,150)
             self.assertEqual(self.widget.size(), (100,150),
                              'wrong size after resize')

     Nota: A ordem de execução dos testes será feita com base na
     ordenação dos nomes dos métodos de teste respeitando os critérios
     da ordenação de strings embutida.

Se o método *note setUp(): 137e. levantar uma exceção durante a sua
execução, o framework irá considerar que o teste sofreu um erro e o
método de teste não será executado.

De maneira similar, pode-se definir um método *note tearDown(): 137f.
que limpa o ambiente após a execução do método de teste:

     import unittest

     class WidgetTestCase(unittest.TestCase):
         def setUp(self):
             self.widget = Widget('The widget')

         def tearDown(self):
             self.widget.dispose()

Se o método *note setUp(): 137e. for bem sucedido, o método *note
tearDown(): 137f. será executado, independente do resultado do método de
teste.

Such a working environment for the testing code is called a 'test
fixture'.  A new TestCase instance is created as a unique test fixture
used to execute each individual test method.  Thus *note setUp(): 137e,
*note tearDown(): 137f, and ‘TestCase.__init__()’ will be called once
per test.

É recomendado utilizar implementações de TestCase para agrupar testes de
acordo com as funcionalidades que eles testam.  *note unittest: 106.
disponibiliza um mecanismo para isso: a 'suíte de testes', representada
pela classe *note TestSuite: e20. do módulo *note unittest: 106.  Em
grande parte dos casos, chamar *note unittest.main(): 1019. é suficiente
para coletar todos os casos de teste do módulo e executá-los para você.

Entretanto, caso você queira customizar a construção da sua suíte de
testes, é possível fazê-la desta forma:

     def suite():
         suite = unittest.TestSuite()
         suite.addTest(WidgetTestCase('test_default_widget_size'))
         suite.addTest(WidgetTestCase('test_widget_resize'))
         return suite

     if __name__ == '__main__':
         runner = unittest.TextTestRunner()
         runner.run(suite())

Você pode colocar as definições dos casos de teste e suíte de testes em
um mesmo módulo que contém o código a ser testado (tal como
‘widget.py’), mas existem várias vantagens ao colocar o código dos
testes em um módulo separado, como ‘test_widget.py’:

   * O módulo de teste pode ser executado de maneira isolada a partir da
     linha de comando.

   * O código de teste pode ser mais facilmente separado do código a ser
     entregue.

   * Há uma menor tentação para modificar o código de teste para que ele
     se adéque ao código testado sem que haja uma boa razão.

   * O código de teste deve ser modificado muito menos frequentemente do
     que o código que ele testa.

   * Código testado pode ser reformulado mais facilmente.

   * Testes para módulos escritos em C devem ser, obrigatoriamente,
     colocados em módulos separados, então por que não manter a
     consistência?

   * Se as estratégias de teste mudarem, não há a necessidade de mudar o
     código-fonte.


File: python.info,  Node: Reutilizando códigos de teste antigos,  Next: Ignorando testes e falhas esperadas,  Prev: Organizando código teste,  Up: unittest — Framework de testes unitários

5.26.5.6 Reutilizando códigos de teste antigos
..............................................

Alguns usuários irão encontrar antigos códigos de teste que eles
gostariam de executar com *note unittest: 106. sem converter cada função
antiga para uma subclasse de *note TestCase: 44f.

Por isso, *note unittest: 106. contém uma classe *note FunctionTestCase:
17fb.  Esta subclasse de *note TestCase: 44f. pode ser utilizada para
englobar funções de teste existentes.  Funções de definição de estado
inicial e final (set-up e tear-down) também podem ser fornecidas.

Dadas as seguintes funções de teste:

     def testSomething():
         something = makeSomething()
         assert something.name is not None
         # ...

é possível criar uma instância de caso de teste, com métodos opcionais
de configuração inicial e final (set-up e tear-down), como mostrado a
seguir:

     testcase = unittest.FunctionTestCase(testSomething,
                                          setUp=makeSomethingDB,
                                          tearDown=deleteSomethingDB)

     Nota: Apesar da classe *note FunctionTestCase: 17fb. poder ser
     utilizada para converter rapidamente um teste existente em um teste
     do módulo *note unittest: 106, esta abordagem não é recomendada.
     Investir tempo para configurar corretamente uma subclasse de *note
     TestCase: 44f. irá tornar futuras refatorações infinitamente mais
     fáceis.

In some cases, the existing tests may have been written using the *note
doctest: 3a. module.  If so, *note doctest: 3a. provides a *note
DocTestSuite: e1f. class that can automatically build *note
unittest.TestSuite: e20. instances from the existing *note doctest:
3a.-based tests.


File: python.info,  Node: Ignorando testes e falhas esperadas,  Next: Distinguindo iterações de teste utilizando subtestes,  Prev: Reutilizando códigos de teste antigos,  Up: unittest — Framework de testes unitários

5.26.5.7 Ignorando testes e falhas esperadas
............................................

Adicionado na versão 3.1.

Unittest suporta ignorar métodos de teste individuais e, até mesmo,
classes de teste inteiras.  Além disso, há suporte para a marcação de um
teste como uma “falha esperada”, um teste que está incorreto e irá
falhar, mas não deve ser considerado como uma falha no *note TestResult:
11a6.

Ignorar um teste é simplesmente uma questão de utilizar o *note
decorador: 731. *note skip(): 1b50. ou uma de suas variantes
condicionais, chamando *note TestCase.skipTest(): 4299. em um *note
setUp(): 137e. ou método de teste, ou levantando *note SkipTest: 101a.
diretamente.

Ignorar se parece basicamente com:

     class MyTestCase(unittest.TestCase):

         @unittest.skip("demonstrating skipping")
         def test_nothing(self):
             self.fail("shouldn't happen")

         @unittest.skipIf(mylib.__version__ < (1, 3),
                          "not supported in this library version")
         def test_format(self):
             # Tests that work for only a certain version of the library.
             pass

         @unittest.skipUnless(sys.platform.startswith("win"), "requires Windows")
         def test_windows_support(self):
             # windows specific testing code
             pass

         def test_maybe_skipped(self):
             if not external_resource_available():
                 self.skipTest("external resource not available")
             # test code that depends on the external resource
             pass

Esta é a saída da execução do exemplo acima em modo verboso:

     test_format (__main__.MyTestCase.test_format) ... skipped 'not supported in this library version'
     test_nothing (__main__.MyTestCase.test_nothing) ... skipped 'demonstrating skipping'
     test_maybe_skipped (__main__.MyTestCase.test_maybe_skipped) ... skipped 'external resource not available'
     test_windows_support (__main__.MyTestCase.test_windows_support) ... skipped 'requires Windows'

     ----------------------------------------------------------------------
     Ran 4 tests in 0.005s

     OK (skipped=4)

Classes podem ser puladas assim como métodos:

     @unittest.skip("showing class skipping")
     class MySkippedTestCase(unittest.TestCase):
         def test_not_run(self):
             pass

*note TestCase.setUp(): 137e. também pode ignorar o teste.  Isso é útil
quando um recurso que precisa ser configurado não está disponível.

Falhas esperadas usam o decorador *note expectedFailure(): 429a.:

     class ExpectedFailureTestCase(unittest.TestCase):
         @unittest.expectedFailure
         def test_fail(self):
             self.assertEqual(1, 0, "broken")

É simples ignorar com decoradores customizados, basta fazer um decorador
que chama *note skip(): 1b50. no teste quando ele deve ser ignorado.
Este decorador ignora o teste a não ser que o objeto fornecido tenha um
determinado atributo:

     def skipUnlessHasattr(obj, attr):
         if hasattr(obj, attr):
             return lambda func: func
         return unittest.skip("{!r} doesn't have {!r}".format(obj, attr))

Os decoradores e exceção seguintes ignoram testes e falhas esperadas:

 -- Função: @unittest.skip (reason)

     Ignora incondicionalmente o teste decorado.  'reason' deve
     descrever a razão pela qual o teste está sendo ignorado.

 -- Função: @unittest.skipIf (condition, reason)

     Ignora o teste decorado se 'condition' for verdadeiro.

 -- Função: @unittest.skipUnless (condition, reason)

     Ignora o teste decorado a não ser que 'condition' seja verdadeiro.

 -- Função: @unittest.expectedFailure

     Marca o teste como uma falha ou erro esperado.  Se o teste falhar
     ou ocorrerem erros na função de teste mesmo (ao invés de em um dos
     métodos 'test fixture'), então ele será considerado como executado
     com sucesso.  Se o teste passar, ele será considerado como uma
     falha.

 -- Exceção: unittest.SkipTest (reason)

     Esta exceção é levantada para ignorar um teste.

     Normalmente, você pode utilizar *note TestCase.skipTest(): 4299. ou
     um dos decoradores para ignorar sem ter de levantar esta exceção
     diretamente.

Testes ignorados não terão seus métodos *note setUp(): 137e. ou *note
tearDown(): 137f. executados.  Classes ignoradas não terão seus métodos
*note setUpClass(): a58. ou *note tearDownClass(): 137c. executados.
Módulos ignorados não terão seus métodos *note setUpModule(): a57. ou
*note tearDownModule(): 137b. executados.


File: python.info,  Node: Distinguindo iterações de teste utilizando subtestes,  Next: Classes e funções,  Prev: Ignorando testes e falhas esperadas,  Up: unittest — Framework de testes unitários

5.26.5.8 Distinguindo iterações de teste utilizando subtestes
.............................................................

Adicionado na versão 3.4.

Quando existem pequenas diferenças entre os seus testes, por exemplo
alguns parâmetros, unittest permite que você distinga-os dentro do corpo
de um método de teste utilizando o gerenciador de contexto *note
subTest(): 1017.

Por exemplo, o teste seguinte:

     class NumbersTest(unittest.TestCase):

         def test_even(self):
             """
             Test that numbers between 0 and 5 are all even.
             """
             for i in range(0, 6):
                 with self.subTest(i=i):
                     self.assertEqual(i % 2, 0)

irá produzir a seguinte saída:

     ======================================================================
     FAIL: test_even (__main__.NumbersTest.test_even) (i=1)
     Test that numbers between 0 and 5 are all even.
     ----------------------------------------------------------------------
     Traceback (most recent call last):
       File "subtests.py", line 11, in test_even
         self.assertEqual(i % 2, 0)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^
     AssertionError: 1 != 0

     ======================================================================
     FAIL: test_even (__main__.NumbersTest.test_even) (i=3)
     Test that numbers between 0 and 5 are all even.
     ----------------------------------------------------------------------
     Traceback (most recent call last):
       File "subtests.py", line 11, in test_even
         self.assertEqual(i % 2, 0)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^
     AssertionError: 1 != 0

     ======================================================================
     FAIL: test_even (__main__.NumbersTest.test_even) (i=5)
     Test that numbers between 0 and 5 are all even.
     ----------------------------------------------------------------------
     Traceback (most recent call last):
       File "subtests.py", line 11, in test_even
         self.assertEqual(i % 2, 0)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^
     AssertionError: 1 != 0

Sem usar um subteste, a execução para depois da primeira falha e o erro
será menos fácil de ser diagnosticado porque o valor de ‘i’ não será
mostrado:

     ======================================================================
     FAIL: test_even (__main__.NumbersTest.test_even)
     ----------------------------------------------------------------------
     Traceback (most recent call last):
       File "subtests.py", line 32, in test_even
         self.assertEqual(i % 2, 0)
     AssertionError: 1 != 0


File: python.info,  Node: Classes e funções,  Next: Classes e Módulos de Definição de Contexto,  Prev: Distinguindo iterações de teste utilizando subtestes,  Up: unittest — Framework de testes unitários

5.26.5.9 Classes e funções
..........................

Esta seção descreve de maneira aprofundada a API do módulo *note
unittest: 106.

* Menu:

* Casos de teste::
* Grouping tests::
* Carregando e executando testes::


File: python.info,  Node: Casos de teste,  Next: Grouping tests,  Up: Classes e funções

5.26.5.10 Casos de teste
........................

 -- Classe: unittest.TestCase (methodName='runTest')

     Instâncias da classe *note TestCase: 44f. representam unidades
     lógicas de teste no universo do *note unittest: 106.  Esta classe
     deve ser utilizada como classe base, com testes específicos sendo
     implementados por subclasses concretas.  Esta classe implementa a
     interface requerida pelo executor de testes, para permitir o
     controle dos testes, e métodos que o código de teste pode utilizar
     para checar e reportar diversos tipos de falhas.

     Cada instância da classe *note TestCase: 44f. irá executar um único
     método base: o método chamado 'methodName'.  Em muitos casos de uso
     da classe *note TestCase: 44f, você não precisará modificar o
     'methodName' ou reimplementar o método ‘runTest()’ padrão.

     Alterado na versão 3.2: *note TestCase: 44f. pode ser instanciada
     com sucesso sem fornecer um 'methodName'.  Isso torna mais fácil
     experimentar com *note TestCase: 44f. a partir de um interpretador
     interativo.

     Instâncias *note TestCase: 44f. possuem três grupos de métodos: um
     grupo utilizado para executar o teste, outro utilizado pela
     implementação do teste para checar as condições e reportar falhas,
     e alguns métodos de investigação para permitir coletar dados sobre
     o teste em si.

     Os métodos do primeiro grupo (que executam os testes) são:

      -- Método: setUp ()

          Método chamado para preparar a definição de contexto de teste.
          Chamado imediatamente após chamar o método de teste; exceto
          pelo *note AssertionError: 6a9. ou *note SkipTest: 101a,
          qualquer exceção levantada por este método será considerada um
          erro além de uma simples falha de teste.  A implementação
          padrão não faz nada.

      -- Método: tearDown ()

          Método chamado imediatamente após o método de teste ter sido
          chamado e o resultado registrado.  Este método é chamado mesmo
          se o método de teste tiver levantado uma exceção, então a
          implementação em subclasses deve ser feita com cautela ao
          verificar o estado interno.  Qualquer exceção além de *note
          AssertionError: 6a9. ou *note SkipTest: 101a. levantada por
          este método será considerado um erro adicional, e não uma
          simples falha de teste (que incrementaria o número total de
          erros no relatório final de testes).  Este método será
          executado apenas se o método *note setUp(): 137e. for bem
          sucedido, independente do resultado do método de teste.  A
          implementação padrão não faz nada.

      -- Método: setUpClass ()

          Um método de classe chamado antes da execução dos testes de
          uma classe específica.  O método ‘setUpClass’ é chamado com a
          classe sendo o único argumento e deve ser decorada como um
          *note classmethod(): 166.:

               @classmethod
               def setUpClass(cls):
                   ...

          Veja *note Classes e Módulos de Definição de Contexto: 42a2.
          para mais detalhes.

          Adicionado na versão 3.2.

      -- Método: tearDownClass ()

          Um método de classe chamado depois da execução dos testes de
          uma classe específica.  O método ‘tearDownClass’ é chamado com
          a classe sendo o único argumento e deve ser decorada como um
          *note classmethod(): 166.:

               @classmethod
               def tearDownClass(cls):
                   ...

          Veja *note Classes e Módulos de Definição de Contexto: 42a2.
          para mais detalhes.

          Adicionado na versão 3.2.

      -- Método: run (result=None)

          Executa o teste, registrando as informações no objeto
          resultado *note TestResult: 11a6, passado como 'result'.  Se
          'result' for omitido, ou definido como ‘None’, um objeto
          resultado temporário é criado (chamando o método *note
          defaultTestResult(): 42a3.) e utilizado.  O objeto resultado é
          retornado para quem chamou o método *note run(): 11a5.

          O mesmo efeito pode ser obtido ao chamar uma instância da
          classe *note TestCase: 44f.

          Alterado na versão 3.3: Versões anteriores de ‘run’ não
          retornavam o resultado.  Nem chamando por uma instância.

      -- Método: skipTest (reason)

          Ao se executar durante um método de teste ou *note setUp():
          137e, pula o teste em execução.  Veja *note Ignorando testes e
          falhas esperadas: 4298. para mais informações.

          Adicionado na versão 3.1.

      -- Método: subTest (msg=None, **params)

          Retorna um gerenciador de contexto que executa, como subteste,
          o bloco de código englobado.  'msg' e 'params' são valores
          opcionais e arbitrários que são mostrados sempre quando um
          subteste falha, permitindo identificá-los claramente.

          Um caso de teste pode conter inúmeras declarações de subteste
          e elas podem ser aninhadas de forma arbitrária.

          Veja *note Distinguindo iterações de teste utilizando
          subtestes: 1018. para mais informações.

          Adicionado na versão 3.4.

      -- Método: debug ()

          Executa o teste sem coletar o resultado.  Permite propagar
          exceções levantadas pelo teste e pode ser utilizado para
          oferecer suporte aos testes sob um depurador.
     A classe *note TestCase: 44f. oferece diversos métodos de asserção
     para checar e reportar falhas.  A tabela a seguir lista os métodos
     mais utilizados (veja as tabelas abaixo para mais métodos de
     asserção).

     Método                                        Avalia se                         Novo em
                                                                                     
     ----------------------------------------------------------------------------------------------------
                                                                                     
     *note assertEqual(a, b): 529.                 ‘a == b’
                                                   
                                                                                     
     *note assertNotEqual(a, b): 52a.              ‘a != b’
                                                   
                                                                                     
     *note assertTrue(x): 527.                     ‘bool(x) is True’
                                                   
                                                                                     
     *note assertFalse(x): 528.                    ‘bool(x) is False’
                                                   
                                                                                     
     *note assertIs(a, b): 1380.                   ‘a is b’                          3.1
                                                                                     
                                                                                     
     *note assertIsNot(a, b): 1381.                ‘a is not b’                      3.1
                                                                                     
                                                                                     
     *note assertIsNone(x): 12cc.                  ‘x is None’                       3.1
                                                                                     
                                                                                     
     *note assertIsNotNone(x): 12cd.               ‘x is not None’                   3.1
                                                                                     
                                                                                     
     *note assertIn(a, b): 1389.                   ‘a in b’                          3.1
                                                                                     
                                                                                     
     *note assertNotIn(a, b): 138a.                ‘a not in b’                      3.1
                                                                                     
                                                                                     
     *note assertIsInstance(a, b): 1382.           ‘isinstance(a, b)’                3.2
                                                                                     
                                                                                     
     *note assertNotIsInstance(a, b): 1383.        ‘not isinstance(a, b)’            3.2
                                                                                     

     Todos os métodos de asserção aceitam um argumento 'msg' que, se
     especificado, é utilizado como a mensagem de erro em caso de falha
     (veja também *note longMessage: 137a.).  Note que o argumento
     nomeado 'msg' pode ser passado para *note assertRaises(): 52d,
     *note assertRaisesRegex(): 52f, *note assertWarns(): 11a3. e *note
     assertWarnsRegex(): 11a4. apenas quando eles são utilizados como
     gerenciador de contexto.

      -- Método: assertEqual (first, second, msg=None)

          Testa se 'first' e 'second' são iguais.  Se o resultado da
          comparação não indicar igualdade, o teste irá falhar.

          Além disso, se 'first' e 'second' são exatamente do mesmo tipo
          e são uma lista, tupla, dict, set, frozenset, str, ou qualquer
          outro tipo que é registrado na subclasse com *note
          addTypeEqualityFunc(): 138d, a função de igualdade específica
          do tipo é será chamada para gerar uma mensagem de erro mais
          útil (veja também *note lista de métodos específicos por tipo:
          42a4.)

          Alterado na versão 3.1: Adição da chamada automática da função
          específica por tipo.

          Alterado na versão 3.2: método *note assertMultiLineEqual():
          1388. adicionado como função de igualdade padrão para o tipo
          string.

      -- Método: assertNotEqual (first, second, msg=None)

          Testa se 'first' e 'second' não são iguais.  Se o resultado da
          comparação indicar igualdade, o teste irá falhar.

      -- Método: assertTrue (expr, msg=None)
      -- Método: assertFalse (expr, msg=None)

          Testa se a expressão 'expr' é verdadeira (ou falsa).

          Note que isso é equivalente a ‘bool(expr) is True’ e não a
          ‘expr is True’ (use ‘assertIs(expr, True)’ neste último caso).
          Este método também deve ser evitado quando outros métodos mais
          específicos estão disponíveis (e.g.  ‘assertEqual(a, b)’ no
          lugar de ‘assertTrue(a == b)’), já que estes podem ter uma
          melhor mensagem de erro em caso de falha.

      -- Método: assertIs (first, second, msg=None)
      -- Método: assertIsNot (first, second, msg=None)

          Testa que 'first' e 'second' são (ou não são) o mesmo objeto.

          Adicionado na versão 3.1.

      -- Método: assertIsNone (expr, msg=None)
      -- Método: assertIsNotNone (expr, msg=None)

          Testa se 'expr' é (ou não é) ‘None’.

          Adicionado na versão 3.1.

      -- Método: assertIn (member, container, msg=None)
      -- Método: assertNotIn (member, container, msg=None)

          Testa se 'member' está (ou não está) em 'container'.

          Adicionado na versão 3.1.

      -- Método: assertIsInstance (obj, cls, msg=None)
      -- Método: assertNotIsInstance (obj, cls, msg=None)

          Testa se 'obj' é (ou não é) uma instância de 'cls' (que pode
          ser uma classe ou uma tupla de classes, como suportado pela
          função *note isinstance(): 442.).  Para checar pelo tipo
          exato, use *note assertIs(type(obj), cls): 1380.

          Adicionado na versão 3.2.

     Também é possível checar a produção de exceções, avisos e mensagens
     de log usando os seguintes métodos:

     Método                                                        Avalia se                                  Novo em
                                                                                                              
     --------------------------------------------------------------------------------------------------------------------------
                                                                                                              
     *note assertRaises(exc, fun, *args, **kwds): 52d.             ‘fun(*args, **kwds)’ levanta 'exc'
                                                                   
                                                                                                              
     *note assertRaisesRegex(exc, r, fun, *args, **kwds): 52f.     ‘fun(*args, **kwds)’ levanta 'exc' e a     3.1
                                                                   mensagem casa com a expressão regular      
                                                                   'r'
                                                                   
                                                                                                              
     *note assertWarns(warn, fun, *args, **kwds): 11a3.            ‘fun(*args, **kwds)’ levanta 'warn'        3.2
                                                                                                              
                                                                                                              
     *note assertWarnsRegex(warn, r, fun, *args, **kwds): 11a4.    ‘fun(*args, **kwds)’ levanta 'warn' e a    3.2
                                                                   mensagem casa com a expressão regular      
                                                                   'r'
                                                                   
                                                                                                              
     *note assertLogs(logger, level): 85c.                         O bloco ‘with’ registra logs no 'logger'   Módulos para
                                                                   com pelo menos um nível 'level'            processamento
                                                                                                              de XML
                                                                                                              
                                                                                                              
     *note assertNoLogs(logger, level): 85b.                       O bloco ‘with’ não loga em                 3.10
                                                                                                              
                                                                        'logger' com 'level' mínimo
                                                                   

      -- Método: assertRaises (exception, callable, *args, **kwds)

      -- Método: assertRaises (exception, *, msg=None)

          Testa se uma exceção é levantada quando 'callable' é chamado
          com quaisquer argumentos nomeados ou posicionais que também
          são passados para *note assertRaises(): 52d.  O teste passa se
          'exception' for levantada e falha se outra exceção ou nenhuma
          exceção for levantada.

          Se somente os argumentos 'exception' e, possivelmente, 'msg'
          forem passados, retorna um gerenciador de contexto para que o
          código sob teste possa ser escrito de forma embutida ao invés
          de ser definido como uma função:

               with self.assertRaises(SomeException):
                   do_something()

          Quando utilizado como gerenciador de contexto, *note
          assertRaises(): 52d. aceita o argumento nomeado adicional
          'msg'.

          The context manager will store the caught exception object in
          its ‘exception’ attribute.  This can be useful if the
          intention is to perform additional checks on the exception
          raised:

               with self.assertRaises(SomeException) as cm:
                   do_something()

               the_exception = cm.exception
               self.assertEqual(the_exception.error_code, 3)

          Alterado na versão 3.1: Adicionada a possibilidade de se
          utilizar *note assertRaises(): 52d. como gerenciador de
          contexto.

          Alterado na versão 3.2: Added the ‘exception’ attribute.

          Alterado na versão 3.3: Adicionado o argumento nomeado 'msg'
          quando utilizado como gerenciador de contexto.

      -- Método: assertRaisesRegex (exception, regex, callable, *args,
               **kwds)

      -- Método: assertRaisesRegex (exception, regex, *, msg=None)

          Similar ao *note assertRaises(): 52d. mas também testa se
          'regex' casa com a representação em string da exceção
          levantada.  'regex' pode ser um objeto expressão regular ou
          uma string contendo uma expressão regular compatível com o uso
          pela função *note re.search(): 126d.  Exemplos:

               self.assertRaisesRegex(ValueError, "invalid literal for.*XYZ'$",
                                      int, 'XYZ')

          ou:

               with self.assertRaisesRegex(ValueError, 'literal'):
                  int('XYZ')

          Adicionado na versão 3.1: Adicionado com o nome
          ‘assertRaisesRegexp’.

          Alterado na versão 3.2: Renomeado para *note
          assertRaisesRegex(): 52f.

          Alterado na versão 3.3: Adicionado o argumento nomeado 'msg'
          quando utilizado como gerenciador de contexto.

      -- Método: assertWarns (warning, callable, *args, **kwds)

      -- Método: assertWarns (warning, *, msg=None)

          Testa se o aviso 'warning' é acionado quando 'callable' é
          chamado com quaisquer argumentos nomeados ou posicionais que
          também são passados para *note assertWarns(): 11a3.  O teste
          passa se 'warning' for acionado e falha se não for.  Qualquer
          exceção é considerada como falha.  Para capturar qualquer
          aviso presente em um grupo de avisos, uma tupla contendo as
          classes de aviso podem ser passadas como 'warning'.

          Se apenas os argumentos 'warning' e, possivelmente, 'msg'
          forem passados, retorna um gerenciador de contexto para que o
          código sob teste possa ser escrito de forma embutida ao invés
          de ser definido como uma função:

               with self.assertWarns(SomeWarning):
                   do_something()

          Quando usado como gerenciador de contexto, *note
          assertWarns(): 11a3. aceita o argumento nomeado adicional
          'msg'.

          The context manager will store the caught warning object in
          its ‘warning’ attribute, and the source line which triggered
          the warnings in the ‘filename’ and ‘lineno’ attributes.  This
          can be useful if the intention is to perform additional checks
          on the warning caught:

               with self.assertWarns(SomeWarning) as cm:
                   do_something()

               self.assertIn('myfile.py', cm.filename)
               self.assertEqual(320, cm.lineno)

          Este método funciona independente dos filtros de aviso
          configurados no momento em que é chamado.

          Adicionado na versão 3.2.

          Alterado na versão 3.3: Adicionado o argumento nomeado 'msg'
          quando utilizado como gerenciador de contexto.

      -- Método: assertWarnsRegex (warning, regex, callable, *args,
               **kwds)

      -- Método: assertWarnsRegex (warning, regex, *, msg=None)

          Similar ao *note assertWarns(): 11a3. mas também testa se
          'regex' casa com a mensagem do aviso acionado.  'regex' pode
          ser um objeto expressão regular ou uma string contendo uma
          expressão regular compatível para uso pela função *note
          re.search(): 126d.  Exemplo:

               self.assertWarnsRegex(DeprecationWarning,
                                     r'legacy_function\(\) is deprecated',
                                     legacy_function, 'XYZ')

          ou:

               with self.assertWarnsRegex(RuntimeWarning, 'unsafe frobnicating'):
                   frobnicate('/etc/passwd')

          Adicionado na versão 3.2.

          Alterado na versão 3.3: Adicionado o argumento nomeado 'msg'
          quando utilizado como gerenciador de contexto.

      -- Método: assertLogs (logger=None, level=None)

          Um gerenciador de contexto para testar se pelo menos uma
          mensagem é inserida em 'logger' ou em um de seus filhos, com
          pelo menos um nível 'level'.

          Se fornecido, 'logger' deve ser um objeto *note
          logging.Logger: b64. ou uma *note str: 44c. fornecendo o nome
          de um logger.  O padrão é o logger root, o qual irá capturar
          todas as mensagens que não foram bloqueadas por um logger
          descendente não-propagante.

          If given, 'level' should be either a numeric logging level or
          its string equivalent (for example either ‘"ERROR"’ or *note
          logging.ERROR: 2e42.).  The default is *note logging.INFO:
          2e3b.

          O teste passa se pelo menos uma das mensagens emitidas dentro
          do bloco ‘with’ casa com as condições dadas por 'logger' e
          'level', falhando caso contrário.

          O objeto retornado pelo gerenciador de contexto é um registro
          auxiliar que mantém os rastros das mensagens de log capturadas
          de acordo com os critérios dados.  Ele possui dois atributos:

           -- Atributo: records

               Uma lista de objetos de log da classe *note
               logging.LogRecord: 101c. que foram compatíveis com os
               critérios dados.

           -- Atributo: output

               Uma lista de objetos da classe *note str: 44c. com a
               saída formatada das mensagens de log compatíveis com os
               critérios dados.

          Exemplo:

               with self.assertLogs('foo', level='INFO') as cm:
                   logging.getLogger('foo').info('first message')
                   logging.getLogger('foo.bar').error('second message')
               self.assertEqual(cm.output, ['INFO:foo:first message',
                                            'ERROR:foo.bar:second message'])

          Adicionado na versão 3.4.

      -- Método: assertNoLogs (logger=None, level=None)

          Um gerenciador de contexto para testar que nenhuma mensagem é
          logada no 'logger' ou um dos seus filhos, com pelo menos o
          'level' fornecido.

          Se passado, 'logger' deve ser um objeto da classe *note
          logging.Logger: b64. ou um objeto da classe *note str: 44c.
          com o nome do registrador de logs.  O padrão é o registrador
          de log raiz, que irá capturar todas as mensagens.

          If given, 'level' should be either a numeric logging level or
          its string equivalent (for example either ‘"ERROR"’ or *note
          logging.ERROR: 2e42.).  The default is *note logging.INFO:
          2e3b.

          Ao contrário de *note assertLogs(): 85c, nada será retornado
          pelo gerenciador de contexto.

          Adicionado na versão 3.10.

     Existem também outros métodos usados para executar verificações
     mais específicas, como:

     Método                                      Avalia se                            Novo em
                                                                                      
     ----------------------------------------------------------------------------------------------------
                                                                                      
     *note assertAlmostEqual(a, b): 52b.         ‘round(a-b, 7) == 0’
                                                 
                                                                                      
     *note assertNotAlmostEqual(a, b): 52c.      ‘round(a-b, 7) != 0’
                                                 
                                                                                      
     *note assertGreater(a, b): 1384.            ‘a > b’                              3.1
                                                                                      
                                                                                      
     *note assertGreaterEqual(a, b): 1385.       ‘a >= b’                             3.1
                                                                                      
                                                                                      
     *note assertLess(a, b): 1386.               ‘a < b’                              3.1
                                                                                      
                                                                                      
     *note assertLessEqual(a, b): 1387.          ‘a <= b’                             3.1
                                                                                      
                                                                                      
     *note assertRegex(s, r): 52e.               ‘r.search(s)’                        3.1
                                                                                      
                                                                                      
     *note assertNotRegex(s, r): 530.            ‘not r.search(s)’                    3.2
                                                                                      
                                                                                      
     *note assertCountEqual(a, b): 126b.         'a' e 'b' possuem os mesmos          3.2
                                                 elementos na mesma quantidade,       
                                                 independente da sua ordem.
                                                 

      -- Método: assertAlmostEqual (first, second, places=7, msg=None,
               delta=None)
      -- Método: assertNotAlmostEqual (first, second, places=7,
               msg=None, delta=None)

          Testa se 'first' e 'second' são (ou não são) aproximadamente
          iguais considerando a diferença entre eles, arredondando para
          o número de casas decimais dado (7 por padrão), e comparando a
          zero.  Note que estes métodos arredondam os valores
          considerando o número de casas decimais (i.e.  como a função
          *note round(): 131d.) e não o número de algarismos
          significativos.

          Se 'delta' é fornecido no lugar de 'places', a diferença entre
          'first' e 'second' deve ser menor ou igual a (ou maior que)
          'delta'.

          Passar 'delta' e 'places' ao mesmo tempo levanta a exceção
          *note TypeError: 2c3.

          Alterado na versão 3.2: *note assertAlmostEqual(): 52b.
          considera, automaticamente, objetos quase iguais que possuem a
          comparação de igualdade dada como verdadeira.  *note
          assertNotAlmostEqual(): 52c. falha automaticamente se os
          objetos possuem a comparação de igualdade dada como
          verdadeira.  Adicionado o argumento nomeado 'delta'.

      -- Método: assertGreater (first, second, msg=None)
      -- Método: assertGreaterEqual (first, second, msg=None)
      -- Método: assertLess (first, second, msg=None)
      -- Método: assertLessEqual (first, second, msg=None)

          Testa que 'first' é respectivamente >, >=, < ou <= que
          'second', dependendo do nome do método.  Se não for, o teste
          irá falhar:

               >>> self.assertGreaterEqual(3, 4)
               AssertionError: "3" unexpectedly not greater than or equal to "4"

          Adicionado na versão 3.1.

      -- Método: assertRegex (text, regex, msg=None)
      -- Método: assertNotRegex (text, regex, msg=None)

          Testa que uma procura por 'regex' corresponde (ou não
          corresponde) a 'text'.  Em caso de falha, a mensagem de erro
          irá incluir o padrão e o 'text' (ou o padrão e a parte do
          'text' que inesperadamente correspondeu).  'regex' pode ser um
          objeto de expressão regular ou uma string contendo uma
          expressão regular adequada para uso por *note re.search():
          126d.

          Adicionado na versão 3.1: Adicionada abaixo do nome
          ‘assertRegexpMatches’.

          Alterado na versão 3.2: O método ‘assertRegexpMatches()’ foi
          renomeado para *note assertRegex(): 52e.

          Adicionado na versão 3.2: *note assertNotRegex(): 530.

      -- Método: assertCountEqual (first, second, msg=None)

          Test that sequence 'first' contains the same elements as
          'second', regardless of their order.  When they don’t, an
          error message listing the differences between the sequences
          will be generated.

          Elementos duplicados 'não' são ignorados ao comparar 'first' e
          'second'.  É verificado se cada elemento tem a mesma contagem
          em ambas sequências.  Equivalente a:
          ‘assertEqual(Counter(list(first)), Counter(list(second)))’,
          mas também funciona com sequências de objetos não hasheáveis.

          Adicionado na versão 3.2.

     The *note assertEqual(): 529. method dispatches the equality check
     for objects of the same type to different type-specific methods.
     These methods are already implemented for most of the built-in
     types, but it’s also possible to register new methods using *note
     addTypeEqualityFunc(): 138d.:

      -- Método: addTypeEqualityFunc (typeobj, function)

          Registers a type-specific method called by *note
          assertEqual(): 529. to check if two objects of exactly the
          same 'typeobj' (not subclasses) compare equal.  'function'
          must take two positional arguments and a third msg=None
          keyword argument just as *note assertEqual(): 529. does.  It
          must raise *note self.failureException(msg): 423b. when
          inequality between the first two parameters is detected –
          possibly providing useful information and explaining the
          inequalities in details in the error message.

          Adicionado na versão 3.1.

     The list of type-specific methods automatically used by *note
     assertEqual(): 529. are summarized in the following table.  Note
     that it’s usually not necessary to invoke these methods directly.

     Método                                        Usado para comparar               Novo em
                                                                                     
     ---------------------------------------------------------------------------------------------------
                                                                                     
     *note assertMultiLineEqual(a, b): 1388.       strings                           3.1
                                                                                     
                                                                                     
     *note assertSequenceEqual(a, b): 12cb.        sequências                        3.1
                                                                                     
                                                                                     
     *note assertListEqual(a, b): 12c9.            listas                            3.1
                                                                                     
                                                                                     
     *note assertTupleEqual(a, b): 12ca.           tuplas                            3.1
                                                                                     
                                                                                     
     *note assertSetEqual(a, b): 12c7.             sets ou frozensets                3.1
                                                                                     
                                                                                     
     *note assertDictEqual(a, b): 12c8.            dicionários                       3.1
                                                                                     

      -- Método: assertMultiLineEqual (first, second, msg=None)

          Test that the multiline string 'first' is equal to the string
          'second'.  When not equal a diff of the two strings
          highlighting the differences will be included in the error
          message.  This method is used by default when comparing
          strings with *note assertEqual(): 529.

          Adicionado na versão 3.1.

      -- Método: assertSequenceEqual (first, second, msg=None,
               seq_type=None)

          Tests that two sequences are equal.  If a 'seq_type' is
          supplied, both 'first' and 'second' must be instances of
          'seq_type' or a failure will be raised.  If the sequences are
          different an error message is constructed that shows the
          difference between the two.

          This method is not called directly by *note assertEqual():
          529, but it’s used to implement *note assertListEqual(): 12c9.
          and *note assertTupleEqual(): 12ca.

          Adicionado na versão 3.1.

      -- Método: assertListEqual (first, second, msg=None)
      -- Método: assertTupleEqual (first, second, msg=None)

          Tests that two lists or tuples are equal.  If not, an error
          message is constructed that shows only the differences between
          the two.  An error is also raised if either of the parameters
          are of the wrong type.  These methods are used by default when
          comparing lists or tuples with *note assertEqual(): 529.

          Adicionado na versão 3.1.

      -- Método: assertSetEqual (first, second, msg=None)

          Tests that two sets are equal.  If not, an error message is
          constructed that lists the differences between the sets.  This
          method is used by default when comparing sets or frozensets
          with *note assertEqual(): 529.

          Fails if either of 'first' or 'second' does not have a *note
          difference(): 23cc. method.

          Adicionado na versão 3.1.

      -- Método: assertDictEqual (first, second, msg=None)

          Test that two dictionaries are equal.  If not, an error
          message is constructed that shows the differences in the
          dictionaries.  This method will be used by default to compare
          dictionaries in calls to *note assertEqual(): 529.

          Adicionado na versão 3.1.

     Finally the *note TestCase: 44f. provides the following methods and
     attributes:

      -- Método: fail (msg=None)

          Signals a test failure unconditionally, with 'msg' or ‘None’
          for the error message.

      -- Atributo: failureException

          This class attribute gives the exception raised by the test
          method.  If a test framework needs to use a specialized
          exception, possibly to carry additional information, it must
          subclass this exception in order to “play fair” with the
          framework.  The initial value of this attribute is *note
          AssertionError: 6a9.

      -- Atributo: longMessage

          This class attribute determines what happens when a custom
          failure message is passed as the msg argument to an assertXYY
          call that fails.  ‘True’ is the default value.  In this case,
          the custom message is appended to the end of the standard
          failure message.  When set to ‘False’, the custom message
          replaces the standard message.

          The class setting can be overridden in individual test methods
          by assigning an instance attribute, self.longMessage, to
          ‘True’ or ‘False’ before calling the assert methods.

          The class setting gets reset before each test call.

          Adicionado na versão 3.1.

      -- Atributo: maxDiff

          This attribute controls the maximum length of diffs output by
          assert methods that report diffs on failure.  It defaults to
          80*8 characters.  Assert methods affected by this attribute
          are *note assertSequenceEqual(): 12cb. (including all the
          sequence comparison methods that delegate to it), *note
          assertDictEqual(): 12c8. and *note assertMultiLineEqual():
          1388.

          Setting ‘maxDiff’ to ‘None’ means that there is no maximum
          length of diffs.

          Adicionado na versão 3.2.

     Frameworks de teste podem usar os seguintes métodos para coletar
     informações sobre o teste:

      -- Método: countTestCases ()

          Retorna o número de testes representados por esse objeto de
          teste.  Para instâncias *note TestCase: 44f. será sempre ‘1’.

      -- Método: defaultTestResult ()

          Return an instance of the test result class that should be
          used for this test case class (if no other result instance is
          provided to the *note run(): 11a5. method).

          For *note TestCase: 44f. instances, this will always be an
          instance of *note TestResult: 11a6.; subclasses of *note
          TestCase: 44f. should override this as necessary.

      -- Método: id ()

          Retorna uma string identificando o caso de teste específico.
          Geralmente é o nome completo do método do teste, incluindo o
          módulo e o nome da classe.

      -- Método: shortDescription ()

          Retorna uma descrição do teste ou ‘None’ se nenhuma descrição
          for fornecida.  A implementação padrão desse método retorna a
          primeira linha da docstring do método do teste, se disponível,
          ou ‘None’.

          Alterado na versão 3.1: In 3.1 this was changed to add the
          test name to the short description even in the presence of a
          docstring.  This caused compatibility issues with unittest
          extensions and adding the test name was moved to the *note
          TextTestResult: 531. in Python 3.2.

      -- Método: addCleanup (function, /, *args, **kwargs)

          Add a function to be called after *note tearDown(): 137f. to
          cleanup resources used during the test.  Functions will be
          called in reverse order to the order they are added (LIFO).
          They are called with any arguments and keyword arguments
          passed into *note addCleanup(): a8b. when they are added.

          If *note setUp(): 137e. fails, meaning that *note tearDown():
          137f. is not called, then any cleanup functions added will
          still be called.

          Adicionado na versão 3.1.

      -- Método: enterContext (cm)

          Enter the supplied *note context manager: 5d4.  If successful,
          also add its *note __exit__(): 1344. method as a cleanup
          function by *note addCleanup(): a8b. and return the result of
          the *note __enter__(): 5c8. method.

          Adicionado na versão 3.11.

      -- Método: doCleanups ()

          This method is called unconditionally after *note tearDown():
          137f, or after *note setUp(): 137e. if *note setUp(): 137e.
          raises an exception.

          It is responsible for calling all the cleanup functions added
          by *note addCleanup(): a8b.  If you need cleanup functions to
          be called 'prior' to *note tearDown(): 137f. then you can call
          *note doCleanups(): 137d. yourself.

          *note doCleanups(): 137d. pops methods off the stack of
          cleanup functions one at a time, so it can be called at any
          time.

          Adicionado na versão 3.1.

      -- Método: classmethod addClassCleanup (function, /, *args,
               **kwargs)

          Add a function to be called after *note tearDownClass(): 137c.
          to cleanup resources used during the test class.  Functions
          will be called in reverse order to the order they are added
          (LIFO).  They are called with any arguments and keyword
          arguments passed into *note addClassCleanup(): a56. when they
          are added.

          If *note setUpClass(): a58. fails, meaning that *note
          tearDownClass(): 137c. is not called, then any cleanup
          functions added will still be called.

          Adicionado na versão 3.8.

      -- Método: classmethod enterClassContext (cm)

          Enter the supplied *note context manager: 5d4.  If successful,
          also add its *note __exit__(): 1344. method as a cleanup
          function by *note addClassCleanup(): a56. and return the
          result of the *note __enter__(): 5c8. method.

          Adicionado na versão 3.11.

      -- Método: classmethod doClassCleanups ()

          This method is called unconditionally after *note
          tearDownClass(): 137c, or after *note setUpClass(): a58. if
          *note setUpClass(): a58. raises an exception.

          It is responsible for calling all the cleanup functions added
          by *note addClassCleanup(): a56.  If you need cleanup
          functions to be called 'prior' to *note tearDownClass(): 137c.
          then you can call *note doClassCleanups(): 42ac. yourself.

          *note doClassCleanups(): 42ac. pops methods off the stack of
          cleanup functions one at a time, so it can be called at any
          time.

          Adicionado na versão 3.8.

 -- Classe: unittest.IsolatedAsyncioTestCase (methodName='runTest')

     This class provides an API similar to *note TestCase: 44f. and also
     accepts coroutines as test functions.

     Adicionado na versão 3.8.

      -- Atributo: loop_factory

          The 'loop_factory' passed to *note asyncio.Runner: 600.
          Override in subclasses with *note asyncio.EventLoop: 17e9. to
          avoid using the asyncio policy system.

          Adicionado na versão 3.13.

      -- Método: async asyncSetUp ()

          Method called to prepare the test fixture.  This is called
          after *note TestCase.setUp(): 137e.  This is called
          immediately before calling the test method; other than *note
          AssertionError: 6a9. or *note SkipTest: 101a, any exception
          raised by this method will be considered an error rather than
          a test failure.  The default implementation does nothing.

      -- Método: async asyncTearDown ()

          Method called immediately after the test method has been
          called and the result recorded.  This is called before *note
          tearDown(): 137f.  This is called even if the test method
          raised an exception, so the implementation in subclasses may
          need to be particularly careful about checking internal state.
          Any exception, other than *note AssertionError: 6a9. or *note
          SkipTest: 101a, raised by this method will be considered an
          additional error rather than a test failure (thus increasing
          the total number of reported errors).  This method will only
          be called if the *note asyncSetUp(): 42ae. succeeds,
          regardless of the outcome of the test method.  The default
          implementation does nothing.

      -- Método: addAsyncCleanup (function, /, *args, **kwargs)

          This method accepts a coroutine that can be used as a cleanup
          function.

      -- Método: async enterAsyncContext (cm)

          Enter the supplied *note asynchronous context manager: 5d7.
          If successful, also add its *note __aexit__(): 1716. method as
          a cleanup function by *note addAsyncCleanup(): 42b0. and
          return the result of the *note __aenter__(): 215e. method.

          Adicionado na versão 3.11.

      -- Método: run (result=None)

          Sets up a new event loop to run the test, collecting the
          result into the *note TestResult: 11a6. object passed as
          'result'.  If 'result' is omitted or ‘None’, a temporary
          result object is created (by calling the *note
          defaultTestResult(): 42a3. method) and used.  The result
          object is returned to *note run(): 42b1.’s caller.  At the end
          of the test all the tasks in the event loop are cancelled.

     An example illustrating the order:

          from unittest import IsolatedAsyncioTestCase

          events = []


          class Test(IsolatedAsyncioTestCase):


              def setUp(self):
                  events.append("setUp")

              async def asyncSetUp(self):
                  self._async_connection = await AsyncConnection()
                  events.append("asyncSetUp")

              async def test_response(self):
                  events.append("test_response")
                  response = await self._async_connection.get("https://example.com")
                  self.assertEqual(response.status_code, 200)
                  self.addAsyncCleanup(self.on_cleanup)

              def tearDown(self):
                  events.append("tearDown")

              async def asyncTearDown(self):
                  await self._async_connection.close()
                  events.append("asyncTearDown")

              async def on_cleanup(self):
                  events.append("cleanup")

          if __name__ == "__main__":
              unittest.main()

     After running the test, ‘events’ would contain ‘["setUp",
     "asyncSetUp", "test_response", "asyncTearDown", "tearDown",
     "cleanup"]’.

 -- Classe: unittest.FunctionTestCase (testFunc, setUp=None,
          tearDown=None, description=None)

     This class implements the portion of the *note TestCase: 44f.
     interface which allows the test runner to drive the test, but does
     not provide the methods which test code can use to check and report
     errors.  This is used to create test cases using legacy test code,
     allowing it to be integrated into a *note unittest: 106.-based test
     framework.


File: python.info,  Node: Grouping tests,  Next: Carregando e executando testes,  Prev: Casos de teste,  Up: Classes e funções

5.26.5.11 Grouping tests
........................

 -- Classe: unittest.TestSuite (tests=())

     This class represents an aggregation of individual test cases and
     test suites.  The class presents the interface needed by the test
     runner to allow it to be run as any other test case.  Running a
     *note TestSuite: e20. instance is the same as iterating over the
     suite, running each test individually.

     If 'tests' is given, it must be an iterable of individual test
     cases or other test suites that will be used to build the suite
     initially.  Additional methods are provided to add test cases and
     suites to the collection later on.

     *note TestSuite: e20. objects behave much like *note TestCase: 44f.
     objects, except they do not actually implement a test.  Instead,
     they are used to aggregate tests into groups of tests that should
     be run together.  Some additional methods are available to add
     tests to *note TestSuite: e20. instances:

      -- Método: addTest (test)

          Add a *note TestCase: 44f. or *note TestSuite: e20. to the
          suite.

      -- Método: addTests (tests)

          Add all the tests from an iterable of *note TestCase: 44f. and
          *note TestSuite: e20. instances to this test suite.

          This is equivalent to iterating over 'tests', calling *note
          addTest(): 42b4. for each element.

     *note TestSuite: e20. shares the following methods with *note
     TestCase: 44f.:

      -- Método: run (result)

          Run the tests associated with this suite, collecting the
          result into the test result object passed as 'result'.  Note
          that unlike *note TestCase.run(): 11a5, *note TestSuite.run():
          42b6. requires the result object to be passed in.

      -- Método: debug ()

          Run the tests associated with this suite without collecting
          the result.  This allows exceptions raised by the test to be
          propagated to the caller and can be used to support running
          tests under a debugger.

      -- Método: countTestCases ()

          Return the number of tests represented by this test object,
          including all individual tests and sub-suites.

      -- Método: __iter__ ()

          Tests grouped by a *note TestSuite: e20. are always accessed
          by iteration.  Subclasses can lazily provide tests by
          overriding ‘__iter__()’.  Note that this method may be called
          several times on a single suite (for example when counting
          tests or comparing for equality) so the tests returned by
          repeated iterations before *note TestSuite.run(): 42b6. must
          be the same for each call iteration.  After *note
          TestSuite.run(): 42b6, callers should not rely on the tests
          returned by this method unless the caller uses a subclass that
          overrides ‘TestSuite._removeTestAtIndex()’ to preserve test
          references.

          Alterado na versão 3.2: In earlier versions the *note
          TestSuite: e20. accessed tests directly rather than through
          iteration, so overriding ‘__iter__()’ wasn’t sufficient for
          providing tests.

          Alterado na versão 3.4: In earlier versions the *note
          TestSuite: e20. held references to each *note TestCase: 44f.
          after *note TestSuite.run(): 42b6.  Subclasses can restore
          that behavior by overriding ‘TestSuite._removeTestAtIndex()’.

     In the typical usage of a *note TestSuite: e20. object, the *note
     run(): 42b6. method is invoked by a ‘TestRunner’ rather than by the
     end-user test harness.


File: python.info,  Node: Carregando e executando testes,  Prev: Grouping tests,  Up: Classes e funções

5.26.5.12 Carregando e executando testes
........................................

 -- Classe: unittest.TestLoader

     The *note TestLoader: 28e. class is used to create test suites from
     classes and modules.  Normally, there is no need to create an
     instance of this class; the *note unittest: 106. module provides an
     instance that can be shared as *note unittest.defaultTestLoader:
     42ba.  Using a subclass or instance, however, allows customization
     of some configurable properties.

     Objetos da classe *note TestLoader: 28e. possuem os seguintes
     atributos:

      -- Atributo: errors

          A list of the non-fatal errors encountered while loading
          tests.  Not reset by the loader at any point.  Fatal errors
          are signalled by the relevant method raising an exception to
          the caller.  Non-fatal errors are also indicated by a
          synthetic test that will raise the original error when run.

          Adicionado na versão 3.5.

     Objetos da classe *note TestLoader: 28e. possuem os seguintes
     métodos:

      -- Método: loadTestsFromTestCase (testCaseClass)

          Return a suite of all test cases contained in the *note
          TestCase: 44f.-derived ‘testCaseClass’.

          A test case instance is created for each method named by *note
          getTestCaseNames(): 291.  By default these are the method
          names beginning with ‘test’.  If *note getTestCaseNames():
          291. returns no methods, but the ‘runTest()’ method is
          implemented, a single test case is created for that method
          instead.

      -- Método: loadTestsFromModule (module, *, pattern=None)

          Return a suite of all test cases contained in the given
          module.  This method searches 'module' for classes derived
          from *note TestCase: 44f. and creates an instance of the class
          for each test method defined for the class.

               Nota: While using a hierarchy of *note TestCase:
               44f.-derived classes can be convenient in sharing
               fixtures and helper functions, defining test methods on
               base classes that are not intended to be instantiated
               directly does not play well with this method.  Doing so,
               however, can be useful when the fixtures are different
               and defined in subclasses.

          If a module provides a ‘load_tests’ function it will be called
          to load the tests.  This allows modules to customize test
          loading.  This is the *note load_tests protocol: 4293.  The
          'pattern' argument is passed as the third argument to
          ‘load_tests’.

          Alterado na versão 3.2: Suporte para ‘load_tests’ adicionado.

          Alterado na versão 3.5: Support for a keyword-only argument
          'pattern' has been added.

          Alterado na versão 3.12: The undocumented and unofficial
          'use_load_tests' parameter has been removed.

      -- Método: loadTestsFromName (name, module=None)

          Return a suite of all test cases given a string specifier.

          The specifier 'name' is a “dotted name” that may resolve
          either to a module, a test case class, a test method within a
          test case class, a *note TestSuite: e20. instance, or a
          callable object which returns a *note TestCase: 44f. or *note
          TestSuite: e20. instance.  These checks are applied in the
          order listed here; that is, a method on a possible test case
          class will be picked up as “a test method within a test case
          class”, rather than “a callable object”.

          For example, if you have a module ‘SampleTests’ containing a
          *note TestCase: 44f.-derived class ‘SampleTestCase’ with three
          test methods (‘test_one()’, ‘test_two()’, and ‘test_three()’),
          the specifier ‘'SampleTests.SampleTestCase'’ would cause this
          method to return a suite which will run all three test
          methods.  Using the specifier
          ‘'SampleTests.SampleTestCase.test_two'’ would cause it to
          return a test suite which will run only the ‘test_two()’ test
          method.  The specifier can refer to modules and packages which
          have not been imported; they will be imported as a
          side-effect.

          O método opcionalmente resolve o 'nome' relativo ao 'módulo'
          dado.

          Alterado na versão 3.5: If an *note ImportError: 419. or *note
          AttributeError: 34b. occurs while traversing 'name' then a
          synthetic test that raises that error when run will be
          returned.  These errors are included in the errors accumulated
          by self.errors.

      -- Método: loadTestsFromNames (names, module=None)

          Similar to *note loadTestsFromName(): 138b, but takes a
          sequence of names rather than a single name.  The return value
          is a test suite which supports all the tests defined for each
          name.

      -- Método: getTestCaseNames (testCaseClass)

          Return a sorted sequence of method names found within
          'testCaseClass'; this should be a subclass of *note TestCase:
          44f.

      -- Método: discover (start_dir, pattern='test*.py',
               top_level_dir=None)

          Find all the test modules by recursing into subdirectories
          from the specified start directory, and return a TestSuite
          object containing them.  Only test files that match 'pattern'
          will be loaded.  (Using shell style pattern matching.)  Only
          module names that are importable (i.e.  are valid Python
          identifiers) will be loaded.

          All test modules must be importable from the top level of the
          project.  If the start directory is not the top level
          directory then 'top_level_dir' must be specified separately.

          If importing a module fails, for example due to a syntax
          error, then this will be recorded as a single error and
          discovery will continue.  If the import failure is due to
          *note SkipTest: 101a. being raised, it will be recorded as a
          skip instead of an error.

          If a package (a directory containing a file named
          ‘__init__.py’) is found, the package will be checked for a
          ‘load_tests’ function.  If this exists then it will be called
          ‘package.load_tests(loader, tests, pattern)’.  Test discovery
          takes care to ensure that a package is only checked for tests
          once during an invocation, even if the load_tests function
          itself calls ‘loader.discover’.

          If ‘load_tests’ exists then discovery does 'not' recurse into
          the package, ‘load_tests’ is responsible for loading all tests
          in the package.

          The pattern is deliberately not stored as a loader attribute
          so that packages can continue discovery themselves.

          'top_level_dir' is stored internally, and used as a default to
          any nested calls to ‘discover()’.  That is, if a package’s
          ‘load_tests’ calls ‘loader.discover()’, it does not need to
          pass this argument.

          'start_dir' can be a dotted module name as well as a
          directory.

          Adicionado na versão 3.2.

          Alterado na versão 3.4: Modules that raise *note SkipTest:
          101a. on import are recorded as skips, not errors.

          Alterado na versão 3.4: 'start_dir' can be a *note namespace
          packages: 1dee.

          Alterado na versão 3.4: Paths are sorted before being imported
          so that execution order is the same even if the underlying
          file system’s ordering is not dependent on file name.

          Alterado na versão 3.5: Found packages are now checked for
          ‘load_tests’ regardless of whether their path matches
          'pattern', because it is impossible for a package name to
          match the default pattern.

          Alterado na versão 3.11: 'start_dir' can not be a *note
          namespace packages: 1dee.  It has been broken since Python 3.7
          and Python 3.11 officially remove it.

          Alterado na versão 3.13: 'top_level_dir' is only stored for
          the duration of 'discover' call.

     The following attributes of a *note TestLoader: 28e. can be
     configured either by subclassing or assignment on an instance:

      -- Atributo: testMethodPrefix

          String giving the prefix of method names which will be
          interpreted as test methods.  The default value is ‘'test'’.

          This affects *note getTestCaseNames(): 291. and all the
          ‘loadTestsFrom*’ methods.

      -- Atributo: sortTestMethodsUsing

          Function to be used to compare method names when sorting them
          in *note getTestCaseNames(): 291. and all the ‘loadTestsFrom*’
          methods.

      -- Atributo: suiteClass

          Callable object that constructs a test suite from a list of
          tests.  No methods on the resulting object are needed.  The
          default value is the *note TestSuite: e20. class.

          This affects all the ‘loadTestsFrom*’ methods.

      -- Atributo: testNamePatterns

          List of Unix shell-style wildcard test name patterns that test
          methods have to match to be included in test suites (see ‘-k’
          option).

          If this attribute is not ‘None’ (the default), all test
          methods to be included in test suites must match one of the
          patterns in this list.  Note that matches are always performed
          using *note fnmatch.fnmatchcase(): 19e0, so unlike patterns
          passed to the ‘-k’ option, simple substring patterns will have
          to be converted using ‘*’ wildcards.

          This affects all the ‘loadTestsFrom*’ methods.

          Adicionado na versão 3.7.

 -- Classe: unittest.TestResult

     This class is used to compile information about which tests have
     succeeded and which have failed.

     A *note TestResult: 11a6. object stores the results of a set of
     tests.  The *note TestCase: 44f. and *note TestSuite: e20. classes
     ensure that results are properly recorded; test authors do not need
     to worry about recording the outcome of tests.

     Testing frameworks built on top of *note unittest: 106. may want
     access to the *note TestResult: 11a6. object generated by running a
     set of tests for reporting purposes; a *note TestResult: 11a6.
     instance is returned by the ‘TestRunner.run()’ method for this
     purpose.

     *note TestResult: 11a6. instances have the following attributes
     that will be of interest when inspecting the results of running a
     set of tests:

      -- Atributo: errors

          A list containing 2-tuples of *note TestCase: 44f. instances
          and strings holding formatted tracebacks.  Each tuple
          represents a test which raised an unexpected exception.

      -- Atributo: failures

          A list containing 2-tuples of *note TestCase: 44f. instances
          and strings holding formatted tracebacks.  Each tuple
          represents a test where a failure was explicitly signalled
          using the *note assert* methods: 427b.

      -- Atributo: skipped

          A list containing 2-tuples of *note TestCase: 44f. instances
          and strings holding the reason for skipping the test.

          Adicionado na versão 3.1.

      -- Atributo: expectedFailures

          A list containing 2-tuples of *note TestCase: 44f. instances
          and strings holding formatted tracebacks.  Each tuple
          represents an expected failure or error of the test case.

      -- Atributo: unexpectedSuccesses

          A list containing *note TestCase: 44f. instances that were
          marked as expected failures, but succeeded.

      -- Atributo: collectedDurations

          A list containing 2-tuples of test case names and floats
          representing the elapsed time of each test which was run.

          Adicionado na versão 3.12.

      -- Atributo: shouldStop

          Set to ‘True’ when the execution of tests should stop by *note
          stop(): 42c5.

      -- Atributo: testsRun

          The total number of tests run so far.

      -- Atributo: buffer

          If set to true, ‘sys.stdout’ and ‘sys.stderr’ will be buffered
          in between *note startTest(): 42c8. and *note stopTest():
          42c9. being called.  Collected output will only be echoed onto
          the real ‘sys.stdout’ and ‘sys.stderr’ if the test fails or
          errors.  Any output is also attached to the failure / error
          message.

          Adicionado na versão 3.2.

      -- Atributo: failfast

          Se definido como true (verdadeiro) *note stop(): 42c5. será
          chamado na primeira falha ou erro, interrompendo a execução do
          teste.

          Adicionado na versão 3.2.

      -- Atributo: tb_locals

          If set to true then local variables will be shown in
          tracebacks.

          Adicionado na versão 3.5.

      -- Método: wasSuccessful ()

          Return ‘True’ if all tests run so far have passed, otherwise
          returns ‘False’.

          Alterado na versão 3.4: Returns ‘False’ if there were any
          *note unexpectedSuccesses: 42c3. from tests marked with the
          *note expectedFailure(): 429a. decorator.

      -- Método: stop ()

          This method can be called to signal that the set of tests
          being run should be aborted by setting the *note shouldStop:
          42c4. attribute to ‘True’.  ‘TestRunner’ objects should
          respect this flag and return without running any additional
          tests.

          For example, this feature is used by the *note TextTestRunner:
          183e. class to stop the test framework when the user signals
          an interrupt from the keyboard.  Interactive tools which
          provide ‘TestRunner’ implementations can use this in a similar
          manner.

     The following methods of the *note TestResult: 11a6. class are used
     to maintain the internal data structures, and may be extended in
     subclasses to support additional reporting requirements.  This is
     particularly useful in building tools which support interactive
     reporting while tests are being run.

      -- Método: startTest (test)

          Called when the test case 'test' is about to be run.

      -- Método: stopTest (test)

          Called after the test case 'test' has been executed,
          regardless of the outcome.

      -- Método: startTestRun ()

          Called once before any tests are executed.

          Adicionado na versão 3.1.

      -- Método: stopTestRun ()

          Called once after all tests are executed.

          Adicionado na versão 3.1.

      -- Método: addError (test, err)

          Called when the test case 'test' raises an unexpected
          exception.  'err' is a tuple of the form returned by *note
          sys.exc_info(): 68a.: ‘(type, value, traceback)’.

          The default implementation appends a tuple ‘(test,
          formatted_err)’ to the instance’s *note errors: 42bf.
          attribute, where 'formatted_err' is a formatted traceback
          derived from 'err'.

      -- Método: addFailure (test, err)

          Called when the test case 'test' signals a failure.  'err' is
          a tuple of the form returned by *note sys.exc_info(): 68a.:
          ‘(type, value, traceback)’.

          The default implementation appends a tuple ‘(test,
          formatted_err)’ to the instance’s *note failures: 42c0.
          attribute, where 'formatted_err' is a formatted traceback
          derived from 'err'.

      -- Método: addSuccess (test)

          Called when the test case 'test' succeeds.

          The default implementation does nothing.

      -- Método: addSkip (test, reason)

          Called when the test case 'test' is skipped.  'reason' is the
          reason the test gave for skipping.

          The default implementation appends a tuple ‘(test, reason)’ to
          the instance’s *note skipped: 42c1. attribute.

      -- Método: addExpectedFailure (test, err)

          Called when the test case 'test' fails or errors, but was
          marked with the *note expectedFailure(): 429a. decorator.

          The default implementation appends a tuple ‘(test,
          formatted_err)’ to the instance’s *note expectedFailures:
          42c2. attribute, where 'formatted_err' is a formatted
          traceback derived from 'err'.

      -- Método: addUnexpectedSuccess (test)

          Called when the test case 'test' was marked with the *note
          expectedFailure(): 429a. decorator, but succeeded.

          The default implementation appends the test to the instance’s
          *note unexpectedSuccesses: 42c3. attribute.

      -- Método: addSubTest (test, subtest, outcome)

          Called when a subtest finishes.  'test' is the test case
          corresponding to the test method.  'subtest' is a custom *note
          TestCase: 44f. instance describing the subtest.

          If 'outcome' is *note None: 675, the subtest succeeded.
          Otherwise, it failed with an exception where 'outcome' is a
          tuple of the form returned by *note sys.exc_info(): 68a.:
          ‘(type, value, traceback)’.

          The default implementation does nothing when the outcome is a
          success, and records subtest failures as normal failures.

          Adicionado na versão 3.4.

      -- Método: addDuration (test, elapsed)

          Called when the test case finishes.  'elapsed' is the time
          represented in seconds, and it includes the execution of
          cleanup functions.

          Adicionado na versão 3.12.

 -- Classe: unittest.TextTestResult (stream, descriptions, verbosity, *,
          durations=None)

     A concrete implementation of *note TestResult: 11a6. used by the
     *note TextTestRunner: 183e.  Subclasses should accept ‘**kwargs’ to
     ensure compatibility as the interface changes.

     Adicionado na versão 3.2.

     Alterado na versão 3.12: Added the 'durations' keyword parameter.

 -- Dado: unittest.defaultTestLoader

     Instance of the *note TestLoader: 28e. class intended to be shared.
     If no customization of the *note TestLoader: 28e. is needed, this
     instance can be used instead of repeatedly creating new instances.

 -- Classe: unittest.TextTestRunner (stream=None, descriptions=True,
          verbosity=1, failfast=False, buffer=False, resultclass=None,
          warnings=None, *, tb_locals=False, durations=None)

     A basic test runner implementation that outputs results to a
     stream.  If 'stream' is ‘None’, the default, *note sys.stderr: 940.
     is used as the output stream.  This class has a few configurable
     parameters, but is essentially very simple.  Graphical applications
     which run test suites should provide alternate implementations.
     Such implementations should accept ‘**kwargs’ as the interface to
     construct runners changes when features are added to unittest.

     By default this runner shows *note DeprecationWarning: 1a5, *note
     PendingDeprecationWarning: 8ce, *note ResourceWarning: 244. and
     *note ImportWarning: 4fa. even if they are *note ignored by
     default: 42d0.  This behavior can be overridden using Python’s
     ‘-Wd’ or ‘-Wa’ options (see *note Warning control: 1ec0.) and
     leaving 'warnings' to ‘None’.

     Alterado na versão 3.2: Added the 'warnings' parameter.

     Alterado na versão 3.2: The default stream is set to *note
     sys.stderr: 940. at instantiation time rather than import time.

     Alterado na versão 3.5: Added the 'tb_locals' parameter.

     Alterado na versão 3.12: Added the 'durations' parameter.

      -- Método: _makeResult ()

          This method returns the instance of ‘TestResult’ used by *note
          run(): 42d2.  It is not intended to be called directly, but
          can be overridden in subclasses to provide a custom
          ‘TestResult’.

          ‘_makeResult()’ instantiates the class or callable passed in
          the ‘TextTestRunner’ constructor as the ‘resultclass’
          argument.  It defaults to *note TextTestResult: 531. if no
          ‘resultclass’ is provided.  The result class is instantiated
          with the following arguments:

               stream, descriptions, verbosity

      -- Método: run (test)

          This method is the main public interface to the
          ‘TextTestRunner’.  This method takes a *note TestSuite: e20.
          or *note TestCase: 44f. instance.  A *note TestResult: 11a6.
          is created by calling *note _makeResult(): 42d1. and the
          test(s) are run and the results printed to stdout.

 -- Função: unittest.main (module='__main__', defaultTest=None,
          argv=None, testRunner=None,
          testLoader=unittest.defaultTestLoader, exit=True, verbosity=1,
          failfast=None, catchbreak=None, buffer=None, warnings=None)

     A command-line program that loads a set of tests from 'module' and
     runs them; this is primarily for making test modules conveniently
     executable.  The simplest use for this function is to include the
     following line at the end of a test script:

          if __name__ == '__main__':
              unittest.main()

     You can run tests with more detailed information by passing in the
     verbosity argument:

          if __name__ == '__main__':
              unittest.main(verbosity=2)

     The 'defaultTest' argument is either the name of a single test or
     an iterable of test names to run if no test names are specified via
     'argv'.  If not specified or ‘None’ and no test names are provided
     via 'argv', all tests found in 'module' are run.

     O argumento 'argv' pode ser uma lista de opções passada para o
     programa, com o primeiro elemento sendo o nome do programa.  Se não
     for especificado ou for ‘None’, os valores de *note sys.argv: 12a6.
     são usados.

     The 'testRunner' argument can either be a test runner class or an
     already created instance of it.  By default ‘main’ calls *note
     sys.exit(): 138e. with an exit code indicating success (0) or
     failure (1) of the tests run.  An exit code of 5 indicates that no
     tests were run or skipped.

     The 'testLoader' argument has to be a *note TestLoader: 28e.
     instance, and defaults to *note defaultTestLoader: 42ba.

     ‘main’ supports being used from the interactive interpreter by
     passing in the argument ‘exit=False’.  This displays the result on
     standard output without calling *note sys.exit(): 138e.:

          >>> from unittest import main
          >>> main(module='test_module', exit=False)

     The 'failfast', 'catchbreak' and 'buffer' parameters have the same
     effect as the same-name *note command-line options: 4282.

     The 'warnings' argument specifies the *note warning filter: 8cf.
     that should be used while running the tests.  If it’s not
     specified, it will remain ‘None’ if a ‘-W’ option is passed to
     ‘python’ (see *note Warning control: 1ec0.), otherwise it will be
     set to ‘'default'’.

     Calling ‘main’ returns an object with the ‘result’ attribute that
     contains the result of the tests run as a *note
     unittest.TestResult: 11a6.

     Alterado na versão 3.1: The 'exit' parameter was added.

     Alterado na versão 3.2: The 'verbosity', 'failfast', 'catchbreak',
     'buffer' and 'warnings' parameters were added.

     Alterado na versão 3.4: The 'defaultTest' parameter was changed to
     also accept an iterable of test names.

* Menu:

* load_tests Protocol::


File: python.info,  Node: load_tests Protocol,  Up: Carregando e executando testes

5.26.5.13 load_tests Protocol
.............................

Adicionado na versão 3.2.

Modules or packages can customize how tests are loaded from them during
normal test runs or test discovery by implementing a function called
‘load_tests’.

If a test module defines ‘load_tests’ it will be called by *note
TestLoader.loadTestsFromModule(): 28f. with the following arguments:

     load_tests(loader, standard_tests, pattern)

where 'pattern' is passed straight through from ‘loadTestsFromModule’.
It defaults to ‘None’.

It should return a *note TestSuite: e20.

'loader' is the instance of *note TestLoader: 28e. doing the loading.
'standard_tests' are the tests that would be loaded by default from the
module.  It is common for test modules to only want to add or remove
tests from the standard set of tests.  The third argument is used when
loading packages as part of test discovery.

A typical ‘load_tests’ function that loads tests from a specific set of
*note TestCase: 44f. classes may look like:

     test_cases = (TestCase1, TestCase2, TestCase3)

     def load_tests(loader, tests, pattern):
         suite = TestSuite()
         for test_class in test_cases:
             tests = loader.loadTestsFromTestCase(test_class)
             suite.addTests(tests)
         return suite

If discovery is started in a directory containing a package, either from
the command line or by calling *note TestLoader.discover(): 101b, then
the package ‘__init__.py’ will be checked for ‘load_tests’.  If that
function does not exist, discovery will recurse into the package as
though it were just another directory.  Otherwise, discovery of the
package’s tests will be left up to ‘load_tests’ which is called with the
following arguments:

     load_tests(loader, standard_tests, pattern)

This should return a *note TestSuite: e20. representing all the tests
from the package.  (‘standard_tests’ will only contain tests collected
from ‘__init__.py’.)

Because the pattern is passed into ‘load_tests’ the package is free to
continue (and potentially modify) test discovery.  A ‘do nothing’
‘load_tests’ function for a test package would look like:

     def load_tests(loader, standard_tests, pattern):
         # top level directory cached on loader instance
         this_dir = os.path.dirname(__file__)
         package_tests = loader.discover(start_dir=this_dir, pattern=pattern)
         standard_tests.addTests(package_tests)
         return standard_tests

Alterado na versão 3.5: Discovery no longer checks package names for
matching 'pattern' due to the impossibility of package names matching
the default pattern.


File: python.info,  Node: Classes e Módulos de Definição de Contexto,  Next: Tratamento de sinal,  Prev: Classes e funções,  Up: unittest — Framework de testes unitários

5.26.5.14 Classes e Módulos de Definição de Contexto
....................................................

Class and module level fixtures are implemented in *note TestSuite: e20.
When the test suite encounters a test from a new class then *note
tearDownClass(): 137c. from the previous class (if there is one) is
called, followed by *note setUpClass(): a58. from the new class.

Similarly if a test is from a different module from the previous test
then ‘tearDownModule’ from the previous module is run, followed by
‘setUpModule’ from the new module.

Após executar todos os testes, haverá a execução final do
‘tearDownClass’ e do ‘tearDownModule’.

Note that shared fixtures do not play well with [potential] features
like test parallelization and they break test isolation.  They should be
used with care.

The default ordering of tests created by the unittest test loaders is to
group all tests from the same modules and classes together.  This will
lead to ‘setUpClass’ / ‘setUpModule’ (etc) being called exactly once per
class and module.  If you randomize the order, so that tests from
different modules and classes are adjacent to each other, then these
shared fixture functions may be called multiple times in a single test
run.

Shared fixtures are not intended to work with suites with non-standard
ordering.  A ‘BaseTestSuite’ still exists for frameworks that don’t want
to support shared fixtures.

If there are any exceptions raised during one of the shared fixture
functions the test is reported as an error.  Because there is no
corresponding test instance an ‘_ErrorHolder’ object (that has the same
interface as a *note TestCase: 44f.) is created to represent the error.
If you are just using the standard unittest test runner then this detail
doesn’t matter, but if you are a framework author it may be relevant.

* Menu:

* setUpClass and tearDownClass::
* setUpModule and tearDownModule::


File: python.info,  Node: setUpClass and tearDownClass,  Next: setUpModule and tearDownModule,  Up: Classes e Módulos de Definição de Contexto

5.26.5.15 setUpClass and tearDownClass
......................................

These must be implemented as class methods:

     import unittest

     class Test(unittest.TestCase):
         @classmethod
         def setUpClass(cls):
             cls._connection = createExpensiveConnectionObject()

         @classmethod
         def tearDownClass(cls):
             cls._connection.destroy()

If you want the ‘setUpClass’ and ‘tearDownClass’ on base classes called
then you must call up to them yourself.  The implementations in *note
TestCase: 44f. are empty.

If an exception is raised during a ‘setUpClass’ then the tests in the
class are not run and the ‘tearDownClass’ is not run.  Skipped classes
will not have ‘setUpClass’ or ‘tearDownClass’ run.  If the exception is
a *note SkipTest: 101a. exception then the class will be reported as
having been skipped instead of as an error.


File: python.info,  Node: setUpModule and tearDownModule,  Prev: setUpClass and tearDownClass,  Up: Classes e Módulos de Definição de Contexto

5.26.5.16 setUpModule and tearDownModule
........................................

These should be implemented as functions:

     def setUpModule():
         createConnection()

     def tearDownModule():
         closeConnection()

If an exception is raised in a ‘setUpModule’ then none of the tests in
the module will be run and the ‘tearDownModule’ will not be run.  If the
exception is a *note SkipTest: 101a. exception then the module will be
reported as having been skipped instead of as an error.

To add cleanup code that must be run even in the case of an exception,
use ‘addModuleCleanup’:

 -- Função: unittest.addModuleCleanup (function, /, *args, **kwargs)

     Add a function to be called after *note tearDownModule(): 137b. to
     cleanup resources used during the test class.  Functions will be
     called in reverse order to the order they are added (LIFO).  They
     are called with any arguments and keyword arguments passed into
     *note addModuleCleanup(): a55. when they are added.

     If *note setUpModule(): a57. fails, meaning that *note
     tearDownModule(): 137b. is not called, then any cleanup functions
     added will still be called.

     Adicionado na versão 3.8.

 -- Função: unittest.enterModuleContext (cm)

     Enter the supplied *note context manager: 5d4.  If successful, also
     add its *note __exit__(): 1344. method as a cleanup function by
     *note addModuleCleanup(): a55. and return the result of the *note
     __enter__(): 5c8. method.

     Adicionado na versão 3.11.

 -- Função: unittest.doModuleCleanups ()

     This function is called unconditionally after *note
     tearDownModule(): 137b, or after *note setUpModule(): a57. if *note
     setUpModule(): a57. raises an exception.

     It is responsible for calling all the cleanup functions added by
     *note addModuleCleanup(): a55.  If you need cleanup functions to be
     called 'prior' to *note tearDownModule(): 137b. then you can call
     *note doModuleCleanups(): 195d. yourself.

     *note doModuleCleanups(): 195d. pops methods off the stack of
     cleanup functions one at a time, so it can be called at any time.

     Adicionado na versão 3.8.


File: python.info,  Node: Tratamento de sinal,  Prev: Classes e Módulos de Definição de Contexto,  Up: unittest — Framework de testes unitários

5.26.5.17 Tratamento de sinal
.............................

Adicionado na versão 3.2.

The *note -c/-catch: 1377. command-line option to unittest, along with
the ‘catchbreak’ parameter to *note unittest.main(): 1019, provide more
friendly handling of control-C during a test run.  With catch break
behavior enabled control-C will allow the currently running test to
complete, and the test run will then end and report all the results so
far.  A second control-c will raise a *note KeyboardInterrupt: 9d9. in
the usual way.

The control-c handling signal handler attempts to remain compatible with
code or tests that install their own *note signal.SIGINT: 847. handler.
If the ‘unittest’ handler is called but 'isn’t' the installed *note
signal.SIGINT: 847. handler, i.e.  it has been replaced by the system
under test and delegated to, then it calls the default handler.  This
will normally be the expected behavior by code that replaces an
installed handler and delegates to it.  For individual tests that need
‘unittest’ control-c handling disabled the *note removeHandler(): 1378.
decorator can be used.

There are a few utility functions for framework authors to enable
control-c handling functionality within test frameworks.

 -- Função: unittest.installHandler ()

     Install the control-c handler.  When a *note signal.SIGINT: 847. is
     received (usually in response to the user pressing control-c) all
     registered results have *note stop(): 42c5. called.

 -- Função: unittest.registerResult (result)

     Register a *note TestResult: 11a6. object for control-c handling.
     Registering a result stores a weak reference to it, so it doesn’t
     prevent the result from being garbage collected.

     Registering a *note TestResult: 11a6. object has no side-effects if
     control-c handling is not enabled, so test frameworks can
     unconditionally register all results they create independently of
     whether or not handling is enabled.

 -- Função: unittest.removeResult (result)

     Remove um resultado registrado.  Dado que um resultado for
     removido, então *note stop(): 42c5. não será mais chamado no objeto
     resultado em resposta a um Ctrl+C

 -- Função: unittest.removeHandler (function=None)

     When called without arguments this function removes the control-c
     handler if it has been installed.  This function can also be used
     as a test decorator to temporarily remove the handler while the
     test is being executed:

          @unittest.removeHandler
          def test_signal_handling(self):
              ...


File: python.info,  Node: unittest mock — mock object library,  Next: unittest mock — primeiros passos,  Prev: unittest — Framework de testes unitários,  Up: Ferramentas de Desenvolvimento

5.26.6 ‘unittest.mock’ — mock object library
--------------------------------------------

Adicionado na versão 3.3.

'Código-fonte:' Lib/unittest/mock.py(1)

__________________________________________________________________

*note unittest.mock: 107. é uma biblioteca para teste em Python.  Que
permite substituir partes do seu sistema em teste por objetos simulados
e fazer afirmações sobre como elas foram usadas.

*note unittest.mock: 107. fornece uma classe core *note Mock: a54.
removendo a necessidade de criar uma série de stubs em todo o seu
conjunto de testes.  Depois de executar uma ação, você pode fazer
afirmações sobre quais métodos / atributos foram usados e com quais
argumentos foram chamados.  Você também pode especificar valores de
retorno e definir os atributos necessários da maneira normal.

Adicionalmente, o mock fornece um decorador *note patch(): ec1. que lida
com os atributos do módulo de patch e do nível de classe no escopo de um
teste, junto com *note sentinel: bb8. para criar objetos únicos.  Veja o
*note guia rápido: 42db. para alguns exemplos de como usar *note Mock:
a54, *note MagicMock: ebe. e *note patch(): ec1.

Mock foi projetado para uso com *note unittest: 106. e é baseado no
padrão ‘ação -> asserção’ em vez de ‘gravar -> reproduzir’ usado por
muitas estruturas de simulação.

There is a backport of *note unittest.mock: 107. for earlier versions of
Python, available as mock(2) on PyPI.

* Menu:

* Guia Rápido::
* A classe Mock::
* Os criadores de patches::
* MagicMock and magic method support::
* Ajudantes::
* Order of precedence of side_effect, return_value and wraps: Order of precedence of side_effect return_value and wraps.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/unittest/mock.py

   (2) https://pypi.org/project/mock/


File: python.info,  Node: Guia Rápido,  Next: A classe Mock,  Up: unittest mock — mock object library

5.26.6.1 Guia Rápido
....................

Os objetos *note Mock: a54. e *note MagicMock: ebe. criam todos os
atributos e métodos à medida que você os acessa e armazena detalhes de
como eles foram usados.  Você pode configurá-los, especificar valores de
retorno ou limitar quais atributos estão disponíveis e, em seguida,
fazer afirmações sobre como eles foram usados:

     >>> from unittest.mock import MagicMock
     >>> thing = ProductionClass()
     >>> thing.method = MagicMock(return_value=3)
     >>> thing.method(3, 4, 5, key='value')
     3
     >>> thing.method.assert_called_with(3, 4, 5, key='value')

*note side_effect: 42dc. allows you to perform side effects, including
raising an exception when a mock is called:

     >>> from unittest.mock import Mock
     >>> mock = Mock(side_effect=KeyError('foo'))
     >>> mock()
     Traceback (most recent call last):
      ...
     KeyError: 'foo'

     >>> values = {'a': 1, 'b': 2, 'c': 3}
     >>> def side_effect(arg):
     ...     return values[arg]
     ...
     >>> mock.side_effect = side_effect
     >>> mock('a'), mock('b'), mock('c')
     (1, 2, 3)
     >>> mock.side_effect = [5, 4, 3, 2, 1]
     >>> mock(), mock(), mock()
     (5, 4, 3)

O Mock tem muitas outras maneiras de configurá-lo e controlar seu
comportamento.  Por exemplo, o argumento 'spec' configura o mock para
obter sua especificação de outro objeto.  Tentar acessar atributos ou
métodos no mock que não existem no spec falhará com um *note
AttributeError: 34b.

O gerenciador de contexto / decorador *note patch(): ec1. facilita a
simulação de classes ou objetos em um módulo em teste.  O objeto que
você especificar será substituído por um mock (ou outro objeto) durante
o teste e restaurado quando o teste terminar:

     >>> from unittest.mock import patch
     >>> @patch('module.ClassName2')
     ... @patch('module.ClassName1')
     ... def test(MockClass1, MockClass2):
     ...     module.ClassName1()
     ...     module.ClassName2()
     ...     assert MockClass1 is module.ClassName1
     ...     assert MockClass2 is module.ClassName2
     ...     assert MockClass1.called
     ...     assert MockClass2.called
     ...
     >>> test()

     Nota: Quando você aninha decoradores de patches, as simulações são
     passadas para a função decorada na mesma ordem em que foram
     aplicadas (a ordem normal 'Python' em que os decoradores são
     aplicados).  Isso significa de baixo para cima, portanto, no
     exemplo acima, a simulação para ‘module.ClassName1’ é passada
     primeiro.

     Com *note patch(): ec1, é importante que você faça o patch de
     objetos no espaço de nomes onde eles são procurados.  Normalmente,
     isso é simples, mas para um guia rápido, leia *note onde fazer o
     patch: 42dd.

Assim como um decorador *note patch(): ec1. pode ser usado como um
gerenciador de contexto em uma instrução with:

     >>> with patch.object(ProductionClass, 'method', return_value=None) as mock_method:
     ...     thing = ProductionClass()
     ...     thing.method(1, 2, 3)
     ...
     >>> mock_method.assert_called_once_with(1, 2, 3)

Também existe *note patch.dict(): 1b6a. para definir valores em um
dicionário apenas durante um escopo e restaurar o dicionário ao seu
estado original quando o teste termina:

     >>> foo = {'key': 'value'}
     >>> original = foo.copy()
     >>> with patch.dict(foo, {'newkey': 'newvalue'}, clear=True):
     ...     assert foo == {'newkey': 'newvalue'}
     ...
     >>> assert foo == original

Mock possui suporte a simulação de *note métodos mágicos: 42de. de
Python.  A maneira mais fácil de usar métodos mágicos é com a classe
*note MagicMock: ebe.  Ele permite que você faça coisas como:

     >>> mock = MagicMock()
     >>> mock.__str__.return_value = 'foobarbaz'
     >>> str(mock)
     'foobarbaz'
     >>> mock.__str__.assert_called_with()

Mock permite atribuir funções (ou outras instâncias do Mock) a métodos
mágicos e elas serão chamadas apropriadamente.  A classe *note
MagicMock: ebe. é apenas uma variante do Mock que possui todos os
métodos mágicos pré-criados para você (bem, todos os úteis de qualquer
maneira).

A seguir, é apresentado um exemplo do uso de métodos mágicos com a
classe Mock comum:

     >>> mock = Mock()
     >>> mock.__str__ = Mock(return_value='wheeeeee')
     >>> str(mock)
     'wheeeeee'

Para garantir que os objetos mock em seus testes tenham a mesmo API que
os objetos que eles estão substituindo, você pode usar *note
especificação automática: 42df.  A especificação automática pode ser
feita por meio do argumento 'autospec' para fazer patch ou pela função
*note create_autospec(): 16f4.  A especificação automática cria objetos
mock que têm os mesmos atributos e métodos que os objetos que estão
substituindo, e qualquer funções e métodos (incluindo construtores) têm
a mesma assinatura de chamada que o objeto real.

Isso garante que seus mocks falharão da mesma forma que o código de
produção se forem usados incorretamente:

     >>> from unittest.mock import create_autospec
     >>> def function(a, b, c):
     ...     pass
     ...
     >>> mock_function = create_autospec(function, return_value='fishy')
     >>> mock_function(1, 2, 3)
     'fishy'
     >>> mock_function.assert_called_once_with(1, 2, 3)
     >>> mock_function('wrong arguments')
     Traceback (most recent call last):
      ...
     TypeError: missing a required argument: 'b'

*note create_autospec(): 16f4. também pode ser usada com classes, onde
copia a assinatura do método ‘__init__’, e com objetos chamáveis onde
copia a assinatura do método ‘__call__’.


File: python.info,  Node: A classe Mock,  Next: Os criadores de patches,  Prev: Guia Rápido,  Up: unittest mock — mock object library

5.26.6.2 A classe Mock
......................

*note Mock: a54. é um objeto simulado flexível destinado a substituir o
uso de 'stubs' e dublês de teste em todo o seu código.  Os mocks são
chamáveis e cria atributos como novos mocks à medida que você os acessa
(1).  Acessar o mesmo atributo sempre retorna o mesmo mock.  Os mocks
registram como você os utiliza, permitindo que você faça asserções sobre
o que o seu código fez com eles.

*note MagicMock: ebe. é uma subclasse de *note Mock: a54. com todos os
métodos mágicos pré-criados e prontos para uso.  Existem também
variantes não chamáveis, úteis quando você está simulando objetos que
não são chamáveis: *note NonCallableMock: 42e1. e *note
NonCallableMagicMock: 42e2.

The *note patch(): ec1. decorators makes it easy to temporarily replace
classes in a particular module with a *note Mock: a54. object.  By
default *note patch(): ec1. will create a *note MagicMock: ebe. for you.
You can specify an alternative class of *note Mock: a54. using the
'new_callable' argument to *note patch(): ec1.

 -- Classe: unittest.mock.Mock (spec=None, side_effect=None,
          return_value=DEFAULT, wraps=None, name=None, spec_set=None,
          unsafe=False, **kwargs)

     Create a new *note Mock: a54. object.  *note Mock: a54. takes
     several optional arguments that specify the behaviour of the Mock
     object:

        * 'spec': This can be either a list of strings or an existing
          object (a class or instance) that acts as the specification
          for the mock object.  If you pass in an object then a list of
          strings is formed by calling dir on the object (excluding
          unsupported magic attributes and methods).  Accessing any
          attribute not in this list will raise an *note AttributeError:
          34b.

          If 'spec' is an object (rather than a list of strings) then
          *note __class__: 14f5. returns the class of the spec object.
          This allows mocks to pass *note isinstance(): 442. tests.

        * 'spec_set': A stricter variant of 'spec'.  If used, attempting
          to 'set' or get an attribute on the mock that isn’t on the
          object passed as 'spec_set' will raise an *note
          AttributeError: 34b.

        * 'side_effect': A function to be called whenever the Mock is
          called.  See the *note side_effect: 42dc. attribute.  Useful
          for raising exceptions or dynamically changing return values.
          The function is called with the same arguments as the mock,
          and unless it returns *note DEFAULT: 42e3, the return value of
          this function is used as the return value.

          Alternatively 'side_effect' can be an exception class or
          instance.  In this case the exception will be raised when the
          mock is called.

          If 'side_effect' is an iterable then each call to the mock
          will return the next value from the iterable.

          A 'side_effect' can be cleared by setting it to ‘None’.

        * 'return_value': The value returned when the mock is called.
          By default this is a new Mock (created on first access).  See
          the *note return_value: 42e4. attribute.

        * 'unsafe': By default, accessing any attribute whose name
          starts with 'assert', 'assret', 'asert', 'aseert' or 'assrt'
          will raise an *note AttributeError: 34b.  Passing
          ‘unsafe=True’ will allow access to these attributes.

          Adicionado na versão 3.5.

        * 'wraps': Item for the mock object to wrap.  If 'wraps' is not
          ‘None’ then calling the Mock will pass the call through to the
          wrapped object (returning the real result).  Attribute access
          on the mock will return a Mock object that wraps the
          corresponding attribute of the wrapped object (so attempting
          to access an attribute that doesn’t exist will raise an *note
          AttributeError: 34b.).

          If the mock has an explicit 'return_value' set then calls are
          not passed to the wrapped object and the 'return_value' is
          returned instead.

        * 'name': If the mock has a name then it will be used in the
          repr of the mock.  This can be useful for debugging.  The name
          is propagated to child mocks.

     Mocks can also be called with arbitrary keyword arguments.  These
     will be used to set attributes on the mock after it is created.
     See the *note configure_mock(): 42e5. method for details.

      -- Método: assert_called ()

          Afirmar que o mock foi chamado pelo menos uma vez.

               >>> mock = Mock()
               >>> mock.method()
               <Mock name='mock.method()' id='...'>
               >>> mock.method.assert_called()

          Adicionado na versão 3.6.

      -- Método: assert_called_once ()

          Afirma que o mock foi chamado exatamente uma vez.

               >>> mock = Mock()
               >>> mock.method()
               <Mock name='mock.method()' id='...'>
               >>> mock.method.assert_called_once()
               >>> mock.method()
               <Mock name='mock.method()' id='...'>
               >>> mock.method.assert_called_once()
               Traceback (most recent call last):
               ...
               AssertionError: Expected 'method' to have been called once. Called 2 times.
               Calls: [call(), call()].

          Adicionado na versão 3.6.

      -- Método: assert_called_with (*args, **kwargs)

          This method is a convenient way of asserting that the last
          call has been made in a particular way:

               >>> mock = Mock()
               >>> mock.method(1, 2, 3, test='wow')
               <Mock name='mock.method()' id='...'>
               >>> mock.method.assert_called_with(1, 2, 3, test='wow')

      -- Método: assert_called_once_with (*args, **kwargs)

          Assert that the mock was called exactly once and that call was
          with the specified arguments.

               >>> mock = Mock(return_value=None)
               >>> mock('foo', bar='baz')
               >>> mock.assert_called_once_with('foo', bar='baz')
               >>> mock('other', bar='values')
               >>> mock.assert_called_once_with('other', bar='values')
               Traceback (most recent call last):
                 ...
               AssertionError: Expected 'mock' to be called once. Called 2 times.
               Calls: [call('foo', bar='baz'), call('other', bar='values')].

      -- Método: assert_any_call (*args, **kwargs)

          assert the mock has been called with the specified arguments.

          The assert passes if the mock has 'ever' been called, unlike
          *note assert_called_with(): 1b99. and *note
          assert_called_once_with(): 42e6. that only pass if the call is
          the most recent one, and in the case of *note
          assert_called_once_with(): 42e6. it must also be the only
          call.

               >>> mock = Mock(return_value=None)
               >>> mock(1, 2, arg='thing')
               >>> mock('some', 'thing', 'else')
               >>> mock.assert_any_call(1, 2, arg='thing')

      -- Método: assert_has_calls (calls, any_order=False)

          assert the mock has been called with the specified calls.  The
          *note mock_calls: 42e8. list is checked for the calls.

          If 'any_order' is false then the calls must be sequential.
          There can be extra calls before or after the specified calls.

          If 'any_order' is true then the calls can be in any order, but
          they must all appear in *note mock_calls: 42e8.

               >>> mock = Mock(return_value=None)
               >>> mock(1)
               >>> mock(2)
               >>> mock(3)
               >>> mock(4)
               >>> calls = [call(2), call(3)]
               >>> mock.assert_has_calls(calls)
               >>> calls = [call(4), call(2), call(3)]
               >>> mock.assert_has_calls(calls, any_order=True)

      -- Método: assert_not_called ()

          Afirma que o mock nunca foi chamado.

               >>> m = Mock()
               >>> m.hello.assert_not_called()
               >>> obj = m.hello()
               >>> m.hello.assert_not_called()
               Traceback (most recent call last):
                 ...
               AssertionError: Expected 'hello' to not have been called. Called 1 times.
               Calls: [call()].

          Adicionado na versão 3.5.

      -- Método: reset_mock (*, return_value=False, side_effect=False)

          The reset_mock method resets all the call attributes on a mock
          object:

               >>> mock = Mock(return_value=None)
               >>> mock('hello')
               >>> mock.called
               True
               >>> mock.reset_mock()
               >>> mock.called
               False

          This can be useful where you want to make a series of
          assertions that reuse the same object.

          'return_value' parameter when set to ‘True’ resets *note
          return_value: 42e4.:

               >>> mock = Mock(return_value=5)
               >>> mock('hello')
               5
               >>> mock.reset_mock(return_value=True)
               >>> mock('hello')
               <Mock name='mock()' id='...'>

          'side_effect' parameter when set to ‘True’ resets *note
          side_effect: 42dc.:

               >>> mock = Mock(side_effect=ValueError)
               >>> mock('hello')
               Traceback (most recent call last):
                 ...
               ValueError
               >>> mock.reset_mock(side_effect=True)
               >>> mock('hello')
               <Mock name='mock()' id='...'>

          Note that *note reset_mock(): d1b. 'doesn’t' clear the *note
          return_value: 42e4, *note side_effect: 42dc. or any child
          attributes you have set using normal assignment by default.

          Child mocks are reset as well.

          Alterado na versão 3.6: Foram adicionados dois argumentos
          somente-nomeado à função reset_mock.

      -- Método: mock_add_spec (spec, spec_set=False)

          Add a spec to a mock.  'spec' can either be an object or a
          list of strings.  Only attributes on the 'spec' can be fetched
          as attributes from the mock.

          If 'spec_set' is true then only attributes on the spec can be
          set.

      -- Método: attach_mock (mock, attribute)

          Attach a mock as an attribute of this one, replacing its name
          and parent.  Calls to the attached mock will be recorded in
          the *note method_calls: 42ea. and *note mock_calls: 42e8.
          attributes of this one.

      -- Método: configure_mock (**kwargs)

          Define atributos no mock por meio de argumentos nomeados.

          Attributes plus return values and side effects can be set on
          child mocks using standard dot notation and unpacking a
          dictionary in the method call:

               >>> mock = Mock()
               >>> attrs = {'method.return_value': 3, 'other.side_effect': KeyError}
               >>> mock.configure_mock(**attrs)
               >>> mock.method()
               3
               >>> mock.other()
               Traceback (most recent call last):
                 ...
               KeyError

          The same thing can be achieved in the constructor call to
          mocks:

               >>> attrs = {'method.return_value': 3, 'other.side_effect': KeyError}
               >>> mock = Mock(some_attribute='eggs', **attrs)
               >>> mock.some_attribute
               'eggs'
               >>> mock.method()
               3
               >>> mock.other()
               Traceback (most recent call last):
                 ...
               KeyError

          *note configure_mock(): 42e5. exists to make it easier to do
          configuration after the mock has been created.

      -- Método: __dir__ ()

          *note Mock: a54. objects limit the results of ‘dir(some_mock)’
          to useful results.  For mocks with a 'spec' this includes all
          the permitted attributes for the mock.

          See *note FILTER_DIR: 42ec. for what this filtering does, and
          how to switch it off.

      -- Método: _get_child_mock (**kw)

          Create the child mocks for attributes and return value.  By
          default child mocks will be the same type as the parent.
          Subclasses of Mock may want to override this to customize the
          way child mocks are made.

          For non-callable mocks the callable variant will be used
          (rather than any custom subclass).

      -- Atributo: called

          A boolean representing whether or not the mock object has been
          called:

               >>> mock = Mock(return_value=None)
               >>> mock.called
               False
               >>> mock()
               >>> mock.called
               True

      -- Atributo: call_count

          An integer telling you how many times the mock object has been
          called:

               >>> mock = Mock(return_value=None)
               >>> mock.call_count
               0
               >>> mock()
               >>> mock()
               >>> mock.call_count
               2

      -- Atributo: return_value

          Set this to configure the value returned by calling the mock:

               >>> mock = Mock()
               >>> mock.return_value = 'fish'
               >>> mock()
               'fish'

          The default return value is a mock object and you can
          configure it in the normal way:

               >>> mock = Mock()
               >>> mock.return_value.attribute = sentinel.Attribute
               >>> mock.return_value()
               <Mock name='mock()()' id='...'>
               >>> mock.return_value.assert_called_with()

          *note return_value: 42e4. também pode ser definido no
          construtor:

               >>> mock = Mock(return_value=3)
               >>> mock.return_value
               3
               >>> mock()
               3

      -- Atributo: side_effect

          This can either be a function to be called when the mock is
          called, an iterable or an exception (class or instance) to be
          raised.

          If you pass in a function it will be called with same
          arguments as the mock and unless the function returns the
          *note DEFAULT: 42e3. singleton the call to the mock will then
          return whatever the function returns.  If the function returns
          *note DEFAULT: 42e3. then the mock will return its normal
          value (from the *note return_value: 42e4.).

          If you pass in an iterable, it is used to retrieve an iterator
          which must yield a value on every call.  This value can either
          be an exception instance to be raised, or a value to be
          returned from the call to the mock (*note DEFAULT: 42e3.
          handling is identical to the function case).

          An example of a mock that raises an exception (to test
          exception handling of an API):

               >>> mock = Mock()
               >>> mock.side_effect = Exception('Boom!')
               >>> mock()
               Traceback (most recent call last):
                 ...
               Exception: Boom!

          Usando *note side_effect: 42dc. para retornar um sequência de
          valores:

               >>> mock = Mock()
               >>> mock.side_effect = [3, 2, 1]
               >>> mock(), mock(), mock()
               (3, 2, 1)

          Usando um chamável:

               >>> mock = Mock(return_value=3)
               >>> def side_effect(*args, **kwargs):
               ...     return DEFAULT
               ...
               >>> mock.side_effect = side_effect
               >>> mock()
               3

          *note side_effect: 42dc. can be set in the constructor.
          Here’s an example that adds one to the value the mock is
          called with and returns it:

               >>> side_effect = lambda value: value + 1
               >>> mock = Mock(side_effect=side_effect)
               >>> mock(3)
               4
               >>> mock(-8)
               -7

          Configuração *note side_effect: 42dc. para ‘None’ limpa isso:

               >>> m = Mock(side_effect=KeyError, return_value=3)
               >>> m()
               Traceback (most recent call last):
                ...
               KeyError
               >>> m.side_effect = None
               >>> m()
               3

      -- Atributo: call_args

          This is either ‘None’ (if the mock hasn’t been called), or the
          arguments that the mock was last called with.  This will be in
          the form of a tuple: the first member, which can also be
          accessed through the ‘args’ property, is any positional
          arguments the mock was called with (or an empty tuple) and the
          second member, which can also be accessed through the ‘kwargs’
          property, is any keyword arguments (or an empty dictionary).

               >>> mock = Mock(return_value=None)
               >>> print(mock.call_args)
               None
               >>> mock()
               >>> mock.call_args
               call()
               >>> mock.call_args == ()
               True
               >>> mock(3, 4)
               >>> mock.call_args
               call(3, 4)
               >>> mock.call_args == ((3, 4),)
               True
               >>> mock.call_args.args
               (3, 4)
               >>> mock.call_args.kwargs
               {}
               >>> mock(3, 4, 5, key='fish', next='w00t!')
               >>> mock.call_args
               call(3, 4, 5, key='fish', next='w00t!')
               >>> mock.call_args.args
               (3, 4, 5)
               >>> mock.call_args.kwargs
               {'key': 'fish', 'next': 'w00t!'}

          *note call_args: 1af8, along with members of the lists *note
          call_args_list: 42ef, *note method_calls: 42ea. and *note
          mock_calls: 42e8. are *note call: 1b45. objects.  These are
          tuples, so they can be unpacked to get at the individual
          arguments and make more complex assertions.  See *note calls
          as tuples: 42f0.

          Alterado na versão 3.8: Adicionadas propriedades ‘args’ e
          ‘kwargs’.

      -- Atributo: call_args_list

          This is a list of all the calls made to the mock object in
          sequence (so the length of the list is the number of times it
          has been called).  Before any calls have been made it is an
          empty list.  The *note call: 1b45. object can be used for
          conveniently constructing lists of calls to compare with *note
          call_args_list: 42ef.

               >>> mock = Mock(return_value=None)
               >>> mock()
               >>> mock(3, 4)
               >>> mock(key='fish', next='w00t!')
               >>> mock.call_args_list
               [call(), call(3, 4), call(key='fish', next='w00t!')]
               >>> expected = [(), ((3, 4),), ({'key': 'fish', 'next': 'w00t!'},)]
               >>> mock.call_args_list == expected
               True

          Members of *note call_args_list: 42ef. are *note call: 1b45.
          objects.  These can be unpacked as tuples to get at the
          individual arguments.  See *note calls as tuples: 42f0.

      -- Atributo: method_calls

          As well as tracking calls to themselves, mocks also track
          calls to methods and attributes, and 'their' methods and
          attributes:

               >>> mock = Mock()
               >>> mock.method()
               <Mock name='mock.method()' id='...'>
               >>> mock.property.method.attribute()
               <Mock name='mock.property.method.attribute()' id='...'>
               >>> mock.method_calls
               [call.method(), call.property.method.attribute()]

          Members of *note method_calls: 42ea. are *note call: 1b45.
          objects.  These can be unpacked as tuples to get at the
          individual arguments.  See *note calls as tuples: 42f0.

      -- Atributo: mock_calls

          *note mock_calls: 42e8. records 'all' calls to the mock
          object, its methods, magic methods 'and' return value mocks.

               >>> mock = MagicMock()
               >>> result = mock(1, 2, 3)
               >>> mock.first(a=3)
               <MagicMock name='mock.first()' id='...'>
               >>> mock.second()
               <MagicMock name='mock.second()' id='...'>
               >>> int(mock)
               1
               >>> result(1)
               <MagicMock name='mock()()' id='...'>
               >>> expected = [call(1, 2, 3), call.first(a=3), call.second(),
               ... call.__int__(), call()(1)]
               >>> mock.mock_calls == expected
               True

          Members of *note mock_calls: 42e8. are *note call: 1b45.
          objects.  These can be unpacked as tuples to get at the
          individual arguments.  See *note calls as tuples: 42f0.

               Nota: The way *note mock_calls: 42e8. are recorded means
               that where nested calls are made, the parameters of
               ancestor calls are not recorded and so will always
               compare equal:

                    >>> mock = MagicMock()
                    >>> mock.top(a=3).bottom()
                    <MagicMock name='mock.top().bottom()' id='...'>
                    >>> mock.mock_calls
                    [call.top(a=3), call.top().bottom()]
                    >>> mock.mock_calls[-1] == call.top(a=-1).bottom()
                    True

      -- Atributo: __class__

          Normally the ‘__class__’ attribute of an object will return
          its type.  For a mock object with a ‘spec’, ‘__class__’
          returns the spec class instead.  This allows mock objects to
          pass *note isinstance(): 442. tests for the object they are
          replacing / masquerading as:

               >>> mock = Mock(spec=3)
               >>> isinstance(mock, int)
               True

          ‘__class__’ is assignable to, this allows a mock to pass an
          *note isinstance(): 442. check without forcing you to use a
          spec:

               >>> mock = Mock()
               >>> mock.__class__ = dict
               >>> isinstance(mock, dict)
               True

 -- Classe: unittest.mock.NonCallableMock (spec=None, wraps=None,
          name=None, spec_set=None, **kwargs)

     A non-callable version of *note Mock: a54.  The constructor
     parameters have the same meaning of *note Mock: a54, with the
     exception of 'return_value' and 'side_effect' which have no meaning
     on a non-callable mock.

Mock objects that use a class or an instance as a ‘spec’ or ‘spec_set’
are able to pass *note isinstance(): 442. tests:

     >>> mock = Mock(spec=SomeClass)
     >>> isinstance(mock, SomeClass)
     True
     >>> mock = Mock(spec_set=SomeClass())
     >>> isinstance(mock, SomeClass)
     True

The *note Mock: a54. classes have support for mocking magic methods.
See *note magic methods: 42de. for the full details.

The mock classes and the *note patch(): ec1. decorators all take
arbitrary keyword arguments for configuration.  For the *note patch():
ec1. decorators the keywords are passed to the constructor of the mock
being created.  The keyword arguments are for configuring attributes of
the mock:

     >>> m = MagicMock(attribute=3, other='fish')
     >>> m.attribute
     3
     >>> m.other
     'fish'

The return value and side effect of child mocks can be set in the same
way, using dotted notation.  As you can’t use dotted names directly in a
call you have to create a dictionary and unpack it using ‘**’:

     >>> attrs = {'method.return_value': 3, 'other.side_effect': KeyError}
     >>> mock = Mock(some_attribute='eggs', **attrs)
     >>> mock.some_attribute
     'eggs'
     >>> mock.method()
     3
     >>> mock.other()
     Traceback (most recent call last):
       ...
     KeyError

A callable mock which was created with a 'spec' (or a 'spec_set') will
introspect the specification object’s signature when matching calls to
the mock.  Therefore, it can match the actual call’s arguments
regardless of whether they were passed positionally or by name:

     >>> def f(a, b, c): pass
     ...
     >>> mock = Mock(spec=f)
     >>> mock(1, 2, c=3)
     <Mock name='mock()' id='140161580456576'>
     >>> mock.assert_called_with(1, 2, 3)
     >>> mock.assert_called_with(a=1, b=2, c=3)

This applies to *note assert_called_with(): 1b99, *note
assert_called_once_with(): 42e6, *note assert_has_calls(): 179d. and
*note assert_any_call(): 42e7.  When *note Especificação automática:
42df, it will also apply to method calls on the mock object.

Alterado na versão 3.4: Adicionada introspecção de assinatura em objetos
mock especificados e auto-especificados.

 -- Classe: unittest.mock.PropertyMock (*args, **kwargs)

     A mock intended to be used as a *note property: 194, or other *note
     descriptor: 1658, on a class.  *note PropertyMock: 42f2. provides
     *note __get__(): 1530. and *note __set__(): 20f7. methods so you
     can specify a return value when it is fetched.

     Fetching a *note PropertyMock: 42f2. instance from an object calls
     the mock, with no args.  Setting it calls the mock with the value
     being set.

          >>> class Foo:
          ...     @property
          ...     def foo(self):
          ...         return 'something'
          ...     @foo.setter
          ...     def foo(self, value):
          ...         pass
          ...
          >>> with patch('__main__.Foo.foo', new_callable=PropertyMock) as mock_foo:
          ...     mock_foo.return_value = 'mockity-mock'
          ...     this_foo = Foo()
          ...     print(this_foo.foo)
          ...     this_foo.foo = 6
          ...
          mockity-mock
          >>> mock_foo.mock_calls
          [call(), call(6)]

Because of the way mock attributes are stored you can’t directly attach
a *note PropertyMock: 42f2. to a mock object.  Instead you can attach it
to the mock type object:

     >>> m = MagicMock()
     >>> p = PropertyMock(return_value=3)
     >>> type(m).foo = p
     >>> m.foo
     3
     >>> p.assert_called_once_with()

     Cuidado: If an *note AttributeError: 34b. is raised by *note
     PropertyMock: 42f2, it will be interpreted as a missing descriptor
     and *note __getattr__(): 4d3. will be called on the parent mock:

          >>> m = MagicMock()
          >>> no_attribute = PropertyMock(side_effect=AttributeError)
          >>> type(m).my_property = no_attribute
          >>> m.my_property
          <MagicMock name='mock.my_property' id='140165240345424'>

     See *note __getattr__(): 4d3. for details.

 -- Classe: unittest.mock.AsyncMock (spec=None, side_effect=None,
          return_value=DEFAULT, wraps=None, name=None, spec_set=None,
          unsafe=False, **kwargs)

     An asynchronous version of *note MagicMock: ebe.  The *note
     AsyncMock: a53. object will behave so the object is recognized as
     an async function, and the result of a call is an awaitable.

          >>> mock = AsyncMock()
          >>> asyncio.iscoroutinefunction(mock)
          True
          >>> inspect.isawaitable(mock())
          True

     The result of ‘mock()’ is an async function which will have the
     outcome of ‘side_effect’ or ‘return_value’ after it has been
     awaited:

        - if ‘side_effect’ is a function, the async function will return
          the result of that function,

        - if ‘side_effect’ is an exception, the async function will
          raise the exception,

        - if ‘side_effect’ is an iterable, the async function will
          return the next value of the iterable, however, if the
          sequence of result is exhausted, ‘StopAsyncIteration’ is
          raised immediately,

        - if ‘side_effect’ is not defined, the async function will
          return the value defined by ‘return_value’, hence, by default,
          the async function returns a new *note AsyncMock: a53. object.

     Setting the 'spec' of a *note Mock: a54. or *note MagicMock: ebe.
     to an async function will result in a coroutine object being
     returned after calling.

          >>> async def async_func(): pass
          ...
          >>> mock = MagicMock(async_func)
          >>> mock
          <MagicMock spec='function' id='...'>
          >>> mock()
          <coroutine object AsyncMockMixin._mock_call at ...>

     Setting the 'spec' of a *note Mock: a54, *note MagicMock: ebe, or
     *note AsyncMock: a53. to a class with asynchronous and synchronous
     functions will automatically detect the synchronous functions and
     set them as *note MagicMock: ebe. (if the parent mock is *note
     AsyncMock: a53. or *note MagicMock: ebe.) or *note Mock: a54. (if
     the parent mock is *note Mock: a54.).  All asynchronous functions
     will be *note AsyncMock: a53.

          >>> class ExampleClass:
          ...     def sync_foo():
          ...         pass
          ...     async def async_foo():
          ...         pass
          ...
          >>> a_mock = AsyncMock(ExampleClass)
          >>> a_mock.sync_foo
          <MagicMock name='mock.sync_foo' id='...'>
          >>> a_mock.async_foo
          <AsyncMock name='mock.async_foo' id='...'>
          >>> mock = Mock(ExampleClass)
          >>> mock.sync_foo
          <Mock name='mock.sync_foo' id='...'>
          >>> mock.async_foo
          <AsyncMock name='mock.async_foo' id='...'>

     Adicionado na versão 3.8.

      -- Método: assert_awaited ()

          Assert that the mock was awaited at least once.  Note that
          this is separate from the object having been called, the
          ‘await’ keyword must be used:

               >>> mock = AsyncMock()
               >>> async def main(coroutine_mock):
               ...     await coroutine_mock
               ...
               >>> coroutine_mock = mock()
               >>> mock.called
               True
               >>> mock.assert_awaited()
               Traceback (most recent call last):
               ...
               AssertionError: Expected mock to have been awaited.
               >>> asyncio.run(main(coroutine_mock))
               >>> mock.assert_awaited()

      -- Método: assert_awaited_once ()

          Afirme que o mock foi aguardado exatamente uma vez.

               >>> mock = AsyncMock()
               >>> async def main():
               ...     await mock()
               ...
               >>> asyncio.run(main())
               >>> mock.assert_awaited_once()
               >>> asyncio.run(main())
               >>> mock.assert_awaited_once()
               Traceback (most recent call last):
               ...
               AssertionError: Expected mock to have been awaited once. Awaited 2 times.

      -- Método: assert_awaited_with (*args, **kwargs)

          Assert that the last await was with the specified arguments.

               >>> mock = AsyncMock()
               >>> async def main(*args, **kwargs):
               ...     await mock(*args, **kwargs)
               ...
               >>> asyncio.run(main('foo', bar='bar'))
               >>> mock.assert_awaited_with('foo', bar='bar')
               >>> mock.assert_awaited_with('other')
               Traceback (most recent call last):
               ...
               AssertionError: expected await not found.
               Expected: mock('other')
               Actual: mock('foo', bar='bar')

      -- Método: assert_awaited_once_with (*args, **kwargs)

          Assert that the mock was awaited exactly once and with the
          specified arguments.

               >>> mock = AsyncMock()
               >>> async def main(*args, **kwargs):
               ...     await mock(*args, **kwargs)
               ...
               >>> asyncio.run(main('foo', bar='bar'))
               >>> mock.assert_awaited_once_with('foo', bar='bar')
               >>> asyncio.run(main('foo', bar='bar'))
               >>> mock.assert_awaited_once_with('foo', bar='bar')
               Traceback (most recent call last):
               ...
               AssertionError: Expected mock to have been awaited once. Awaited 2 times.

      -- Método: assert_any_await (*args, **kwargs)

          Assert the mock has ever been awaited with the specified
          arguments.

               >>> mock = AsyncMock()
               >>> async def main(*args, **kwargs):
               ...     await mock(*args, **kwargs)
               ...
               >>> asyncio.run(main('foo', bar='bar'))
               >>> asyncio.run(main('hello'))
               >>> mock.assert_any_await('foo', bar='bar')
               >>> mock.assert_any_await('other')
               Traceback (most recent call last):
               ...
               AssertionError: mock('other') await not found

      -- Método: assert_has_awaits (calls, any_order=False)

          Assert the mock has been awaited with the specified calls.
          The *note await_args_list: 1af7. list is checked for the
          awaits.

          If 'any_order' is false then the awaits must be sequential.
          There can be extra calls before or after the specified awaits.

          If 'any_order' is true then the awaits can be in any order,
          but they must all appear in *note await_args_list: 1af7.

               >>> mock = AsyncMock()
               >>> async def main(*args, **kwargs):
               ...     await mock(*args, **kwargs)
               ...
               >>> calls = [call("foo"), call("bar")]
               >>> mock.assert_has_awaits(calls)
               Traceback (most recent call last):
               ...
               AssertionError: Awaits not found.
               Expected: [call('foo'), call('bar')]
               Actual: []
               >>> asyncio.run(main('foo'))
               >>> asyncio.run(main('bar'))
               >>> mock.assert_has_awaits(calls)

      -- Método: assert_not_awaited ()

          Afirma que o mock nunca foi aguardado.

               >>> mock = AsyncMock()
               >>> mock.assert_not_awaited()

      -- Método: reset_mock (*args, **kwargs)

          See *note Mock.reset_mock(): d1b.  Also sets *note
          await_count: 42fb. to 0, *note await_args: 42fc. to None, and
          clears the *note await_args_list: 1af7.

      -- Atributo: await_count

          An integer keeping track of how many times the mock object has
          been awaited.

               >>> mock = AsyncMock()
               >>> async def main():
               ...     await mock()
               ...
               >>> asyncio.run(main())
               >>> mock.await_count
               1
               >>> asyncio.run(main())
               >>> mock.await_count
               2

      -- Atributo: await_args

          This is either ‘None’ (if the mock hasn’t been awaited), or
          the arguments that the mock was last awaited with.  Functions
          the same as *note Mock.call_args: 1af8.

               >>> mock = AsyncMock()
               >>> async def main(*args):
               ...     await mock(*args)
               ...
               >>> mock.await_args
               >>> asyncio.run(main('foo'))
               >>> mock.await_args
               call('foo')
               >>> asyncio.run(main('bar'))
               >>> mock.await_args
               call('bar')

      -- Atributo: await_args_list

          This is a list of all the awaits made to the mock object in
          sequence (so the length of the list is the number of times it
          has been awaited).  Before any awaits have been made it is an
          empty list.

               >>> mock = AsyncMock()
               >>> async def main(*args):
               ...     await mock(*args)
               ...
               >>> mock.await_args_list
               []
               >>> asyncio.run(main('foo'))
               >>> mock.await_args_list
               [call('foo')]
               >>> asyncio.run(main('bar'))
               >>> mock.await_args_list
               [call('foo'), call('bar')]

 -- Classe: unittest.mock.ThreadingMock (spec=None, side_effect=None,
          return_value=DEFAULT, wraps=None, name=None, spec_set=None,
          unsafe=False, *, timeout=UNSET, **kwargs)

     A version of *note MagicMock: ebe. for multithreading tests.  The
     *note ThreadingMock: 42fd. object provides extra methods to wait
     for a call to be invoked, rather than assert on it immediately.

     The default timeout is specified by the ‘timeout’ argument, or if
     unset by the *note ThreadingMock.DEFAULT_TIMEOUT: 42fe. attribute,
     which defaults to blocking (‘None’).

     You can configure the global default timeout by setting *note
     ThreadingMock.DEFAULT_TIMEOUT: 42fe.

      -- Método: wait_until_called (*, timeout=UNSET)

          Waits until the mock is called.

          If a timeout was passed at the creation of the mock or if a
          timeout argument is passed to this function, the function
          raises an *note AssertionError: 6a9. if the call is not
          performed in time.

               >>> mock = ThreadingMock()
               >>> thread = threading.Thread(target=mock)
               >>> thread.start()
               >>> mock.wait_until_called(timeout=1)
               >>> thread.join()

      -- Método: wait_until_any_call_with (*args, **kwargs)

          Waits until the mock is called with the specified arguments.

          If a timeout was passed at the creation of the mock the
          function raises an *note AssertionError: 6a9. if the call is
          not performed in time.

               >>> mock = ThreadingMock()
               >>> thread = threading.Thread(target=mock, args=("arg1", "arg2",), kwargs={"arg": "thing"})
               >>> thread.start()
               >>> mock.wait_until_any_call_with("arg1", "arg2", arg="thing")
               >>> thread.join()

      -- Atributo: DEFAULT_TIMEOUT

          Global default timeout in seconds to create instances of *note
          ThreadingMock: 42fd.

     Adicionado na versão 3.13.

* Menu:

* Fazendo chamadas::
* Deletando Atributos::
* Nomes de Mock e o atributo name::
* Anexando Mocks como Atributos::

   ---------- Footnotes ----------

   (1) The only exceptions are magic methods and attributes (those that
have leading and trailing double underscores).  Mock doesn’t create
these but instead raises an *note AttributeError: 34b.  This is because
the interpreter will often implicitly request these methods, and gets
'very' confused to get a new Mock object when it expects a magic method.
If you need magic method support see *note magic methods: 42de.


File: python.info,  Node: Fazendo chamadas,  Next: Deletando Atributos,  Up: A classe Mock

5.26.6.3 Fazendo chamadas
.........................

Mock objects are callable.  The call will return the value set as the
*note return_value: 42e4. attribute.  The default return value is a new
Mock object; it is created the first time the return value is accessed
(either explicitly or by calling the Mock) - but it is stored and the
same one returned each time.

Calls made to the object will be recorded in the attributes like *note
call_args: 1af8. and *note call_args_list: 42ef.

If *note side_effect: 42dc. is set then it will be called after the call
has been recorded, so if ‘side_effect’ raises an exception the call is
still recorded.

The simplest way to make a mock raise an exception when called is to
make *note side_effect: 42dc. an exception class or instance:

     >>> m = MagicMock(side_effect=IndexError)
     >>> m(1, 2, 3)
     Traceback (most recent call last):
       ...
     IndexError
     >>> m.mock_calls
     [call(1, 2, 3)]
     >>> m.side_effect = KeyError('Bang!')
     >>> m('two', 'three', 'four')
     Traceback (most recent call last):
       ...
     KeyError: 'Bang!'
     >>> m.mock_calls
     [call(1, 2, 3), call('two', 'three', 'four')]

If *note side_effect: 42dc. is a function then whatever that function
returns is what calls to the mock return.  The ‘side_effect’ function is
called with the same arguments as the mock.  This allows you to vary the
return value of the call dynamically, based on the input:

     >>> def side_effect(value):
     ...     return value + 1
     ...
     >>> m = MagicMock(side_effect=side_effect)
     >>> m(1)
     2
     >>> m(2)
     3
     >>> m.mock_calls
     [call(1), call(2)]

If you want the mock to still return the default return value (a new
mock), or any set return value, then there are two ways of doing this.
Either return *note return_value: 42e4. from inside *note side_effect:
42dc, or return *note DEFAULT: 42e3.:

     >>> m = MagicMock()
     >>> def side_effect(*args, **kwargs):
     ...     return m.return_value
     ...
     >>> m.side_effect = side_effect
     >>> m.return_value = 3
     >>> m()
     3
     >>> def side_effect(*args, **kwargs):
     ...     return DEFAULT
     ...
     >>> m.side_effect = side_effect
     >>> m()
     3

To remove a *note side_effect: 42dc, and return to the default
behaviour, set the ‘side_effect’ to ‘None’:

     >>> m = MagicMock(return_value=6)
     >>> def side_effect(*args, **kwargs):
     ...     return 3
     ...
     >>> m.side_effect = side_effect
     >>> m()
     3
     >>> m.side_effect = None
     >>> m()
     6

The *note side_effect: 42dc. can also be any iterable object.  Repeated
calls to the mock will return values from the iterable (until the
iterable is exhausted and a *note StopIteration: c15. is raised):

     >>> m = MagicMock(side_effect=[1, 2, 3])
     >>> m()
     1
     >>> m()
     2
     >>> m()
     3
     >>> m()
     Traceback (most recent call last):
       ...
     StopIteration

If any members of the iterable are exceptions they will be raised
instead of returned:

     >>> iterable = (33, ValueError, 66)
     >>> m = MagicMock(side_effect=iterable)
     >>> m()
     33
     >>> m()
     Traceback (most recent call last):
      ...
     ValueError
     >>> m()
     66


File: python.info,  Node: Deletando Atributos,  Next: Nomes de Mock e o atributo name,  Prev: Fazendo chamadas,  Up: A classe Mock

5.26.6.4 Deletando Atributos
............................

Mock objects create attributes on demand.  This allows them to pretend
to be objects of any type.

You may want a mock object to return ‘False’ to a *note hasattr(): 4d2.
call, or raise an *note AttributeError: 34b. when an attribute is
fetched.  You can do this by providing an object as a ‘spec’ for a mock,
but that isn’t always convenient.

You “block” attributes by deleting them.  Once deleted, accessing an
attribute will raise an *note AttributeError: 34b.

     >>> mock = MagicMock()
     >>> hasattr(mock, 'm')
     True
     >>> del mock.m
     >>> hasattr(mock, 'm')
     False
     >>> del mock.f
     >>> mock.f
     Traceback (most recent call last):
         ...
     AttributeError: f


File: python.info,  Node: Nomes de Mock e o atributo name,  Next: Anexando Mocks como Atributos,  Prev: Deletando Atributos,  Up: A classe Mock

5.26.6.5 Nomes de Mock e o atributo 'name'
..........................................

Since “name” is an argument to the *note Mock: a54. constructor, if you
want your mock object to have a “name” attribute you can’t just pass it
in at creation time.  There are two alternatives.  One option is to use
*note configure_mock(): 42e5.:

     >>> mock = MagicMock()
     >>> mock.configure_mock(name='my_name')
     >>> mock.name
     'my_name'

A simpler option is to simply set the “name” attribute after mock
creation:

     >>> mock = MagicMock()
     >>> mock.name = "foo"


File: python.info,  Node: Anexando Mocks como Atributos,  Prev: Nomes de Mock e o atributo name,  Up: A classe Mock

5.26.6.6 Anexando Mocks como Atributos
......................................

When you attach a mock as an attribute of another mock (or as the return
value) it becomes a “child” of that mock.  Calls to the child are
recorded in the *note method_calls: 42ea. and *note mock_calls: 42e8.
attributes of the parent.  This is useful for configuring child mocks
and then attaching them to the parent, or for attaching mocks to a
parent that records all calls to the children and allows you to make
assertions about the order of calls between mocks:

     >>> parent = MagicMock()
     >>> child1 = MagicMock(return_value=None)
     >>> child2 = MagicMock(return_value=None)
     >>> parent.child1 = child1
     >>> parent.child2 = child2
     >>> child1(1)
     >>> child2(2)
     >>> parent.mock_calls
     [call.child1(1), call.child2(2)]

The exception to this is if the mock has a name.  This allows you to
prevent the “parenting” if for some reason you don’t want it to happen.

     >>> mock = MagicMock()
     >>> not_a_child = MagicMock(name='not-a-child')
     >>> mock.attribute = not_a_child
     >>> mock.attribute()
     <MagicMock name='not-a-child()' id='...'>
     >>> mock.mock_calls
     []

Mocks created for you by *note patch(): ec1. are automatically given
names.  To attach mocks that have names to a parent you use the *note
attach_mock(): 16fa. method:

     >>> thing1 = object()
     >>> thing2 = object()
     >>> parent = MagicMock()
     >>> with patch('__main__.thing1', return_value=None) as child1:
     ...     with patch('__main__.thing2', return_value=None) as child2:
     ...         parent.attach_mock(child1, 'child1')
     ...         parent.attach_mock(child2, 'child2')
     ...         child1('one')
     ...         child2('two')
     ...
     >>> parent.mock_calls
     [call.child1('one'), call.child2('two')]


File: python.info,  Node: Os criadores de patches,  Next: MagicMock and magic method support,  Prev: A classe Mock,  Up: unittest mock — mock object library

5.26.6.7 Os criadores de patches
................................

The patch decorators are used for patching objects only within the scope
of the function they decorate.  They automatically handle the unpatching
for you, even if exceptions are raised.  All of these functions can also
be used in with statements or as class decorators.

* Menu:

* patch::
* patch.object: patch object.
* patch.dict: patch dict.
* patch.multiple: patch multiple.
* métodos do patch; start e stop: métodos do patch start e stop.
* patch de embutidos::
* TEST_PREFIX::
* Aninhando Decoradores Patch::
* Onde fazer patch::
* Patching Descriptors and Proxy Objects::


File: python.info,  Node: patch,  Next: patch object,  Up: Os criadores de patches

5.26.6.8 patch
..............

     Nota: The key is to do the patching in the right namespace.  See
     the section *note where to patch: 4308.

 -- Função: unittest.mock.patch (target, new=DEFAULT, spec=None,
          create=False, spec_set=None, autospec=None, new_callable=None,
          **kwargs)

     *note patch(): ec1. acts as a function decorator, class decorator
     or a context manager.  Inside the body of the function or with
     statement, the 'target' is patched with a 'new' object.  When the
     function/with statement exits the patch is undone.

     If 'new' is omitted, then the target is replaced with an *note
     AsyncMock: a53. if the patched object is an async function or a
     *note MagicMock: ebe. otherwise.  If *note patch(): ec1. is used as
     a decorator and 'new' is omitted, the created mock is passed in as
     an extra argument to the decorated function.  If *note patch():
     ec1. is used as a context manager the created mock is returned by
     the context manager.

     'target' should be a string in the form
     ‘'package.module.ClassName'’.  The 'target' is imported and the
     specified object replaced with the 'new' object, so the 'target'
     must be importable from the environment you are calling *note
     patch(): ec1. from.  The target is imported when the decorated
     function is executed, not at decoration time.

     The 'spec' and 'spec_set' keyword arguments are passed to the *note
     MagicMock: ebe. if patch is creating one for you.

     In addition you can pass ‘spec=True’ or ‘spec_set=True’, which
     causes patch to pass in the object being mocked as the
     spec/spec_set object.

     'new_callable' allows you to specify a different class, or callable
     object, that will be called to create the 'new' object.  By default
     *note AsyncMock: a53. is used for async functions and *note
     MagicMock: ebe. for the rest.

     A more powerful form of 'spec' is 'autospec'.  If you set
     ‘autospec=True’ then the mock will be created with a spec from the
     object being replaced.  All attributes of the mock will also have
     the spec of the corresponding attribute of the object being
     replaced.  Methods and functions being mocked will have their
     arguments checked and will raise a *note TypeError: 2c3. if they
     are called with the wrong signature.  For mocks replacing a class,
     their return value (the ‘instance’) will have the same spec as the
     class.  See the *note create_autospec(): 16f4. function and *note
     Especificação automática: 42df.

     Instead of ‘autospec=True’ you can pass ‘autospec=some_object’ to
     use an arbitrary object as the spec instead of the one being
     replaced.

     By default *note patch(): ec1. will fail to replace attributes that
     don’t exist.  If you pass in ‘create=True’, and the attribute
     doesn’t exist, patch will create the attribute for you when the
     patched function is called, and delete it again after the patched
     function has exited.  This is useful for writing tests against
     attributes that your production code creates at runtime.  It is off
     by default because it can be dangerous.  With it switched on you
     can write passing tests against APIs that don’t actually exist!

          Nota: 
          Alterado na versão 3.5: If you are patching builtins in a
          module then you don’t need to pass ‘create=True’, it will be
          added by default.

     Patch can be used as a *note TestCase: 44f. class decorator.  It
     works by decorating each test method in the class.  This reduces
     the boilerplate code when your test methods share a common
     patchings set.  *note patch(): ec1. finds tests by looking for
     method names that start with ‘patch.TEST_PREFIX’.  By default this
     is ‘'test'’, which matches the way *note unittest: 106. finds
     tests.  You can specify an alternative prefix by setting
     ‘patch.TEST_PREFIX’.

     Patch can be used as a context manager, with the with statement.
     Here the patching applies to the indented block after the with
     statement.  If you use “as” then the patched object will be bound
     to the name after the “as”; very useful if *note patch(): ec1. is
     creating a mock object for you.

     *note patch(): ec1. takes arbitrary keyword arguments.  These will
     be passed to *note AsyncMock: a53. if the patched object is
     asynchronous, to *note MagicMock: ebe. otherwise or to
     'new_callable' if specified.

     ‘patch.dict(...)’, ‘patch.multiple(...)’ e ‘patch.object(...)’
     estão disponíveis para casos de uso alternativos.

*note patch(): ec1. as function decorator, creating the mock for you and
passing it into the decorated function:

     >>> @patch('__main__.SomeClass')
     ... def function(normal_argument, mock_class):
     ...     print(mock_class is SomeClass)
     ...
     >>> function(None)
     True

Patching a class replaces the class with a *note MagicMock: ebe.
'instance'.  If the class is instantiated in the code under test then it
will be the *note return_value: 42e4. of the mock that will be used.

If the class is instantiated multiple times you could use *note
side_effect: 42dc. to return a new mock each time.  Alternatively you
can set the 'return_value' to be anything you want.

To configure return values on methods of 'instances' on the patched
class you must do this on the *note return_value: 42e4.  For example:

     >>> class Class:
     ...     def method(self):
     ...         pass
     ...
     >>> with patch('__main__.Class') as MockClass:
     ...     instance = MockClass.return_value
     ...     instance.method.return_value = 'foo'
     ...     assert Class() is instance
     ...     assert Class().method() == 'foo'
     ...

If you use 'spec' or 'spec_set' and *note patch(): ec1. is replacing a
'class', then the return value of the created mock will have the same
spec.

     >>> Original = Class
     >>> patcher = patch('__main__.Class', spec=True)
     >>> MockClass = patcher.start()
     >>> instance = MockClass()
     >>> assert isinstance(instance, Original)
     >>> patcher.stop()

The 'new_callable' argument is useful where you want to use an
alternative class to the default *note MagicMock: ebe. for the created
mock.  For example, if you wanted a *note NonCallableMock: 42e1. to be
used:

     >>> thing = object()
     >>> with patch('__main__.thing', new_callable=NonCallableMock) as mock_thing:
     ...     assert thing is mock_thing
     ...     thing()
     ...
     Traceback (most recent call last):
       ...
     TypeError: 'NonCallableMock' object is not callable

Another use case might be to replace an object with an *note
io.StringIO: f59. instance:

     >>> from io import StringIO
     >>> def foo():
     ...     print('Something')
     ...
     >>> @patch('sys.stdout', new_callable=StringIO)
     ... def test(mock_stdout):
     ...     foo()
     ...     assert mock_stdout.getvalue() == 'Something\n'
     ...
     >>> test()

When *note patch(): ec1. is creating a mock for you, it is common that
the first thing you need to do is to configure the mock.  Some of that
configuration can be done in the call to patch.  Any arbitrary keywords
you pass into the call will be used to set attributes on the created
mock:

     >>> patcher = patch('__main__.thing', first='one', second='two')
     >>> mock_thing = patcher.start()
     >>> mock_thing.first
     'one'
     >>> mock_thing.second
     'two'

As well as attributes on the created mock attributes, like the *note
return_value: 42e4. and *note side_effect: 42dc, of child mocks can also
be configured.  These aren’t syntactically valid to pass in directly as
keyword arguments, but a dictionary with these as keys can still be
expanded into a *note patch(): ec1. call using ‘**’:

     >>> config = {'method.return_value': 3, 'other.side_effect': KeyError}
     >>> patcher = patch('__main__.thing', **config)
     >>> mock_thing = patcher.start()
     >>> mock_thing.method()
     3
     >>> mock_thing.other()
     Traceback (most recent call last):
       ...
     KeyError

By default, attempting to patch a function in a module (or a method or
an attribute in a class) that does not exist will fail with *note
AttributeError: 34b.:

     >>> @patch('sys.non_existing_attribute', 42)
     ... def test():
     ...     assert sys.non_existing_attribute == 42
     ...
     >>> test()
     Traceback (most recent call last):
       ...
     AttributeError: <module 'sys' (built-in)> does not have the attribute 'non_existing_attribute'

but adding ‘create=True’ in the call to *note patch(): ec1. will make
the previous example work as expected:

     >>> @patch('sys.non_existing_attribute', 42, create=True)
     ... def test(mock_stdout):
     ...     assert sys.non_existing_attribute == 42
     ...
     >>> test()

Alterado na versão 3.8: *note patch(): ec1. now returns an *note
AsyncMock: a53. if the target is an async function.


File: python.info,  Node: patch object,  Next: patch dict,  Prev: patch,  Up: Os criadores de patches

5.26.6.9 patch.object
.....................

 -- Função: patch.object (target, attribute, new=DEFAULT, spec=None,
          create=False, spec_set=None, autospec=None, new_callable=None,
          **kwargs)

     patch the named member ('attribute') on an object ('target') with a
     mock object.

     *note patch.object(): 167f. can be used as a decorator, class
     decorator or a context manager.  Arguments 'new', 'spec', 'create',
     'spec_set', 'autospec' and 'new_callable' have the same meaning as
     for *note patch(): ec1.  Like *note patch(): ec1, *note
     patch.object(): 167f. takes arbitrary keyword arguments for
     configuring the mock object it creates.

     When used as a class decorator *note patch.object(): 167f. honours
     ‘patch.TEST_PREFIX’ for choosing which methods to wrap.

You can either call *note patch.object(): 167f. with three arguments or
two arguments.  The three argument form takes the object to be patched,
the attribute name and the object to replace the attribute with.

When calling with the two argument form you omit the replacement object,
and a mock is created for you and passed in as an extra argument to the
decorated function:

     >>> @patch.object(SomeClass, 'class_method')
     ... def test(mock_method):
     ...     SomeClass.class_method(3)
     ...     mock_method.assert_called_with(3)
     ...
     >>> test()

'spec', 'create' and the other arguments to *note patch.object(): 167f.
have the same meaning as they do for *note patch(): ec1.


File: python.info,  Node: patch dict,  Next: patch multiple,  Prev: patch object,  Up: Os criadores de patches

5.26.6.10 patch.dict
....................

 -- Função: patch.dict (in_dict, values=(), clear=False, **kwargs)

     Patch a dictionary, or dictionary like object, and restore the
     dictionary to its original state after the test.

     'in_dict' can be a dictionary or a mapping like container.  If it
     is a mapping then it must at least support getting, setting and
     deleting items plus iterating over keys.

     'in_dict' can also be a string specifying the name of the
     dictionary, which will then be fetched by importing it.

     'values' can be a dictionary of values to set in the dictionary.
     'values' can also be an iterable of ‘(key, value)’ pairs.

     If 'clear' is true then the dictionary will be cleared before the
     new values are set.

     *note patch.dict(): 1b6a. can also be called with arbitrary keyword
     arguments to set values in the dictionary.

     Alterado na versão 3.8: *note patch.dict(): 1b6a. now returns the
     patched dictionary when used as a context manager.

*note patch.dict(): 1b6a. can be used as a context manager, decorator or
class decorator:

     >>> foo = {}
     >>> @patch.dict(foo, {'newkey': 'newvalue'})
     ... def test():
     ...     assert foo == {'newkey': 'newvalue'}
     ...
     >>> test()
     >>> assert foo == {}

When used as a class decorator *note patch.dict(): 1b6a. honours
‘patch.TEST_PREFIX’ (default to ‘'test'’) for choosing which methods to
wrap:

     >>> import os
     >>> import unittest
     >>> from unittest.mock import patch
     >>> @patch.dict('os.environ', {'newkey': 'newvalue'})
     ... class TestSample(unittest.TestCase):
     ...     def test_sample(self):
     ...         self.assertEqual(os.environ['newkey'], 'newvalue')

If you want to use a different prefix for your test, you can inform the
patchers of the different prefix by setting ‘patch.TEST_PREFIX’.  For
more details about how to change the value of see *note TEST_PREFIX:
430b.

*note patch.dict(): 1b6a. can be used to add members to a dictionary, or
simply let a test change a dictionary, and ensure the dictionary is
restored when the test ends.

     >>> foo = {}
     >>> with patch.dict(foo, {'newkey': 'newvalue'}) as patched_foo:
     ...     assert foo == {'newkey': 'newvalue'}
     ...     assert patched_foo == {'newkey': 'newvalue'}
     ...     # You can add, update or delete keys of foo (or patched_foo, it's the same dict)
     ...     patched_foo['spam'] = 'eggs'
     ...
     >>> assert foo == {}
     >>> assert patched_foo == {}

     >>> import os
     >>> with patch.dict('os.environ', {'newkey': 'newvalue'}):
     ...     print(os.environ['newkey'])
     ...
     newvalue
     >>> assert 'newkey' not in os.environ

Keywords can be used in the *note patch.dict(): 1b6a. call to set values
in the dictionary:

     >>> mymodule = MagicMock()
     >>> mymodule.function.return_value = 'fish'
     >>> with patch.dict('sys.modules', mymodule=mymodule):
     ...     import mymodule
     ...     mymodule.function('some', 'args')
     ...
     'fish'

*note patch.dict(): 1b6a. can be used with dictionary like objects that
aren’t actually dictionaries.  At the very minimum they must support
item getting, setting, deleting and either iteration or membership test.
This corresponds to the magic methods *note __getitem__(): 283, *note
__setitem__(): 130e, *note __delitem__(): 130f. and either *note
__iter__(): 1e4a. or *note __contains__(): 1400.

     >>> class Container:
     ...     def __init__(self):
     ...         self.values = {}
     ...     def __getitem__(self, name):
     ...         return self.values[name]
     ...     def __setitem__(self, name, value):
     ...         self.values[name] = value
     ...     def __delitem__(self, name):
     ...         del self.values[name]
     ...     def __iter__(self):
     ...         return iter(self.values)
     ...
     >>> thing = Container()
     >>> thing['one'] = 1
     >>> with patch.dict(thing, one=2, two=3):
     ...     assert thing['one'] == 2
     ...     assert thing['two'] == 3
     ...
     >>> assert thing['one'] == 1
     >>> assert list(thing) == ['one']


File: python.info,  Node: patch multiple,  Next: métodos do patch start e stop,  Prev: patch dict,  Up: Os criadores de patches

5.26.6.11 patch.multiple
........................

 -- Função: patch.multiple (target, spec=None, create=False,
          spec_set=None, autospec=None, new_callable=None, **kwargs)

     Perform multiple patches in a single call.  It takes the object to
     be patched (either as an object or a string to fetch the object by
     importing) and keyword arguments for the patches:

          with patch.multiple(settings, FIRST_PATCH='one', SECOND_PATCH='two'):
              ...

     Use *note DEFAULT: 42e3. as the value if you want *note
     patch.multiple(): 430d. to create mocks for you.  In this case the
     created mocks are passed into a decorated function by keyword, and
     a dictionary is returned when *note patch.multiple(): 430d. is used
     as a context manager.

     *note patch.multiple(): 430d. can be used as a decorator, class
     decorator or a context manager.  The arguments 'spec', 'spec_set',
     'create', 'autospec' and 'new_callable' have the same meaning as
     for *note patch(): ec1.  These arguments will be applied to 'all'
     patches done by *note patch.multiple(): 430d.

     When used as a class decorator *note patch.multiple(): 430d.
     honours ‘patch.TEST_PREFIX’ for choosing which methods to wrap.

If you want *note patch.multiple(): 430d. to create mocks for you, then
you can use *note DEFAULT: 42e3. as the value.  If you use *note
patch.multiple(): 430d. as a decorator then the created mocks are passed
into the decorated function by keyword.

     >>> thing = object()
     >>> other = object()

     >>> @patch.multiple('__main__', thing=DEFAULT, other=DEFAULT)
     ... def test_function(thing, other):
     ...     assert isinstance(thing, MagicMock)
     ...     assert isinstance(other, MagicMock)
     ...
     >>> test_function()

*note patch.multiple(): 430d. can be nested with other ‘patch’
decorators, but put arguments passed by keyword 'after' any of the
standard arguments created by *note patch(): ec1.:

     >>> @patch('sys.exit')
     ... @patch.multiple('__main__', thing=DEFAULT, other=DEFAULT)
     ... def test_function(mock_exit, other, thing):
     ...     assert 'other' in repr(other)
     ...     assert 'thing' in repr(thing)
     ...     assert 'exit' in repr(mock_exit)
     ...
     >>> test_function()

If *note patch.multiple(): 430d. is used as a context manager, the value
returned by the context manager is a dictionary where created mocks are
keyed by name:

     >>> with patch.multiple('__main__', thing=DEFAULT, other=DEFAULT) as values:
     ...     assert 'other' in repr(values['other'])
     ...     assert 'thing' in repr(values['thing'])
     ...     assert values['thing'] is thing
     ...     assert values['other'] is other
     ...


File: python.info,  Node: métodos do patch start e stop,  Next: patch de embutidos,  Prev: patch multiple,  Up: Os criadores de patches

5.26.6.12 métodos do patch: 'start' e 'stop'
............................................

All the patchers have ‘start()’ and ‘stop()’ methods.  These make it
simpler to do patching in ‘setUp’ methods or where you want to do
multiple patches without nesting decorators or with statements.

To use them call *note patch(): ec1, *note patch.object(): 167f. or
*note patch.dict(): 1b6a. as normal and keep a reference to the returned
‘patcher’ object.  You can then call ‘start()’ to put the patch in place
and ‘stop()’ to undo it.

If you are using *note patch(): ec1. to create a mock for you then it
will be returned by the call to ‘patcher.start’.

     >>> patcher = patch('package.module.ClassName')
     >>> from package import module
     >>> original = module.ClassName
     >>> new_mock = patcher.start()
     >>> assert module.ClassName is not original
     >>> assert module.ClassName is new_mock
     >>> patcher.stop()
     >>> assert module.ClassName is original
     >>> assert module.ClassName is not new_mock

A typical use case for this might be for doing multiple patches in the
‘setUp’ method of a *note TestCase: 44f.:

     >>> class MyTest(unittest.TestCase):
     ...     def setUp(self):
     ...         self.patcher1 = patch('package.module.Class1')
     ...         self.patcher2 = patch('package.module.Class2')
     ...         self.MockClass1 = self.patcher1.start()
     ...         self.MockClass2 = self.patcher2.start()
     ...
     ...     def tearDown(self):
     ...         self.patcher1.stop()
     ...         self.patcher2.stop()
     ...
     ...     def test_something(self):
     ...         assert package.module.Class1 is self.MockClass1
     ...         assert package.module.Class2 is self.MockClass2
     ...
     >>> MyTest('test_something').run()

     Cuidado: If you use this technique you must ensure that the
     patching is “undone” by calling ‘stop’.  This can be fiddlier than
     you might think, because if an exception is raised in the ‘setUp’
     then ‘tearDown’ is not called.  *note
     unittest.TestCase.addCleanup(): a8b. makes this easier:

          >>> class MyTest(unittest.TestCase):
          ...     def setUp(self):
          ...         patcher = patch('package.module.Class')
          ...         self.MockClass = patcher.start()
          ...         self.addCleanup(patcher.stop)
          ...
          ...     def test_something(self):
          ...         assert package.module.Class is self.MockClass
          ...

     As an added bonus you no longer need to keep a reference to the
     ‘patcher’ object.

It is also possible to stop all patches which have been started by using
*note patch.stopall(): 4310.

 -- Função: patch.stopall ()

     Stop all active patches.  Only stops patches started with ‘start’.


File: python.info,  Node: patch de embutidos,  Next: TEST_PREFIX,  Prev: métodos do patch start e stop,  Up: Os criadores de patches

5.26.6.13 patch de embutidos
............................

You can patch any builtins within a module.  The following example
patches builtin *note ord(): 2080.:

     >>> @patch('__main__.ord')
     ... def test(mock_ord):
     ...     mock_ord.return_value = 101
     ...     print(ord('c'))
     ...
     >>> test()
     101


File: python.info,  Node: TEST_PREFIX,  Next: Aninhando Decoradores Patch,  Prev: patch de embutidos,  Up: Os criadores de patches

5.26.6.14 TEST_PREFIX
.....................

All of the patchers can be used as class decorators.  When used in this
way they wrap every test method on the class.  The patchers recognise
methods that start with ‘'test'’ as being test methods.  This is the
same way that the *note unittest.TestLoader: 28e. finds test methods by
default.

It is possible that you want to use a different prefix for your tests.
You can inform the patchers of the different prefix by setting
‘patch.TEST_PREFIX’:

     >>> patch.TEST_PREFIX = 'foo'
     >>> value = 3
     >>>
     >>> @patch('__main__.value', 'not three')
     ... class Thing:
     ...     def foo_one(self):
     ...         print(value)
     ...     def foo_two(self):
     ...         print(value)
     ...
     >>>
     >>> Thing().foo_one()
     not three
     >>> Thing().foo_two()
     not three
     >>> value
     3


File: python.info,  Node: Aninhando Decoradores Patch,  Next: Onde fazer patch,  Prev: TEST_PREFIX,  Up: Os criadores de patches

5.26.6.15 Aninhando Decoradores Patch
.....................................

If you want to perform multiple patches then you can simply stack up the
decorators.

You can stack up multiple patch decorators using this pattern:

     >>> @patch.object(SomeClass, 'class_method')
     ... @patch.object(SomeClass, 'static_method')
     ... def test(mock1, mock2):
     ...     assert SomeClass.static_method is mock1
     ...     assert SomeClass.class_method is mock2
     ...     SomeClass.static_method('foo')
     ...     SomeClass.class_method('bar')
     ...     return mock1, mock2
     ...
     >>> mock1, mock2 = test()
     >>> mock1.assert_called_once_with('foo')
     >>> mock2.assert_called_once_with('bar')

Note that the decorators are applied from the bottom upwards.  This is
the standard way that Python applies decorators.  The order of the
created mocks passed into your test function matches this order.


File: python.info,  Node: Onde fazer patch,  Next: Patching Descriptors and Proxy Objects,  Prev: Aninhando Decoradores Patch,  Up: Os criadores de patches

5.26.6.16 Onde fazer patch
..........................

*note patch(): ec1. works by (temporarily) changing the object that a
'name' points to with another one.  There can be many names pointing to
any individual object, so for patching to work you must ensure that you
patch the name used by the system under test.

The basic principle is that you patch where an object is 'looked up',
which is not necessarily the same place as where it is defined.  A
couple of examples will help to clarify this.

Imagine we have a project that we want to test with the following
structure:

     a.py
         -> Defines SomeClass

     b.py
         -> from a import SomeClass
         -> some_function instantiates SomeClass

Now we want to test ‘some_function’ but we want to mock out ‘SomeClass’
using *note patch(): ec1.  The problem is that when we import module b,
which we will have to do when it imports ‘SomeClass’ from module a.  If
we use *note patch(): ec1. to mock out ‘a.SomeClass’ then it will have
no effect on our test; module b already has a reference to the 'real'
‘SomeClass’ and it looks like our patching had no effect.

The key is to patch out ‘SomeClass’ where it is used (or where it is
looked up).  In this case ‘some_function’ will actually look up
‘SomeClass’ in module b, where we have imported it.  The patching should
look like:

     @patch('b.SomeClass')

However, consider the alternative scenario where instead of ‘from a
import SomeClass’ module b does ‘import a’ and ‘some_function’ uses
‘a.SomeClass’.  Both of these import forms are common.  In this case the
class we want to patch is being looked up in the module and so we have
to patch ‘a.SomeClass’ instead:

     @patch('a.SomeClass')


File: python.info,  Node: Patching Descriptors and Proxy Objects,  Prev: Onde fazer patch,  Up: Os criadores de patches

5.26.6.17 Patching Descriptors and Proxy Objects
................................................

Both *note patch: 4307. and *note patch.object: 4309. correctly patch
and restore descriptors: class methods, static methods and properties.
You should patch these on the 'class' rather than an instance.  They
also work with 'some' objects that proxy attribute access, like the
django settings object(1).

   ---------- Footnotes ----------

   (1) 
https://web.archive.org/web/20200603181648/http://www.voidspace.org.uk/python/weblog/arch_d7_2010_12_04.shtml#e1198


File: python.info,  Node: MagicMock and magic method support,  Next: Ajudantes,  Prev: Os criadores de patches,  Up: unittest mock — mock object library

5.26.6.18 MagicMock and magic method support
............................................

* Menu:

* Simulando Métodos Mágicos::
* Magic Mock::


File: python.info,  Node: Simulando Métodos Mágicos,  Next: Magic Mock,  Up: MagicMock and magic method support

5.26.6.19 Simulando Métodos Mágicos
...................................

*note Mock: a54. supports mocking the Python protocol methods, also
known as *note “magic methods”: 4318.  This allows mock objects to
replace containers or other objects that implement Python protocols.

Because magic methods are looked up differently from normal methods (1),
this support has been specially implemented.  This means that only
specific magic methods are supported.  The supported list includes
'almost' all of them.  If there are any missing that you need please let
us know.

You mock magic methods by setting the method you are interested in to a
function or a mock instance.  If you are using a function then it 'must'
take ‘self’ as the first argument (2).

     >>> def __str__(self):
     ...     return 'fooble'
     ...
     >>> mock = Mock()
     >>> mock.__str__ = __str__
     >>> str(mock)
     'fooble'

     >>> mock = Mock()
     >>> mock.__str__ = Mock()
     >>> mock.__str__.return_value = 'fooble'
     >>> str(mock)
     'fooble'

     >>> mock = Mock()
     >>> mock.__iter__ = Mock(return_value=iter([]))
     >>> list(mock)
     []

One use case for this is for mocking objects used as context managers in
a *note with: 5d2. statement:

     >>> mock = Mock()
     >>> mock.__enter__ = Mock(return_value='foo')
     >>> mock.__exit__ = Mock(return_value=False)
     >>> with mock as m:
     ...     assert m == 'foo'
     ...
     >>> mock.__enter__.assert_called_with()
     >>> mock.__exit__.assert_called_with(None, None, None)

Calls to magic methods do not appear in *note method_calls: 42ea, but
they are recorded in *note mock_calls: 42e8.

     Nota: If you use the 'spec' keyword argument to create a mock then
     attempting to set a magic method that isn’t in the spec will raise
     an *note AttributeError: 34b.

A lista completa de métodos mágicos compatíveis é:

   * ‘__hash__’, ‘__sizeof__’, ‘__repr__’ e ‘__str__’

   * ‘__dir__’, ‘__format__’ e ‘__subclasses__’

   * ‘__round__’, ‘__floor__’, ‘__trunc__’ e ‘__ceil__’

   * Comparações: ‘__lt__’, ‘__gt__’, ‘__le__’, ‘__ge__’, ‘__eq__’ e
     ‘__ne__’

   * Container methods: ‘__getitem__’, ‘__setitem__’, ‘__delitem__’,
     ‘__contains__’, ‘__len__’, ‘__iter__’, ‘__reversed__’ and
     ‘__missing__’

   * Gerenciador de contexto: ‘__enter__’, ‘__exit__’, ‘__aenter__’ e
     ‘__aexit__’

   * Métodos numéricos unários: ‘__neg__’, ‘__pos__’ e ‘__invert__’

   * The numeric methods (including right hand and in-place variants):
     ‘__add__’, ‘__sub__’, ‘__mul__’, ‘__matmul__’, ‘__truediv__’,
     ‘__floordiv__’, ‘__mod__’, ‘__divmod__’, ‘__lshift__’,
     ‘__rshift__’, ‘__and__’, ‘__xor__’, ‘__or__’, and ‘__pow__’

   * Métodos de conversão numérica: ‘__complex__’, ‘__int__’,
     ‘__float__’ e ‘__index__’

   * Métodos descritores: ‘__get__’, ‘__set__’ e ‘__delete__’

   * Pickling: ‘__reduce__’, ‘__reduce_ex__’, ‘__getinitargs__’,
     ‘__getnewargs__’, ‘__getstate__’ e ‘__setstate__’

   * File system path representation: ‘__fspath__’

   * Métodos de iteração assíncrona: ‘__aiter__’ e ‘__anext__’

Alterado na versão 3.8: Adicionado suporte para *note
os.PathLike.__fspath__(): c6d.

Alterado na versão 3.8: Adicionado suporte para ‘__aenter__’,
‘__aexit__’, ‘__aiter__’ e ‘__anext__’.

The following methods exist but are 'not' supported as they are either
in use by mock, can’t be set dynamically, or can cause problems:

   * ‘__getattr__’, ‘__setattr__’, ‘__init__’ e ‘__new__’

   * ‘__prepare__’, ‘__instancecheck__’, ‘__subclasscheck__’, ‘__del__’

   ---------- Footnotes ----------

   (1) Magic methods 'should' be looked up on the class rather than the
instance.  Different versions of Python are inconsistent about applying
this rule.  The supported protocol methods should work with all
supported versions of Python.

   (2) The function is basically hooked up to the class, but each ‘Mock’
instance is kept isolated from the others.


File: python.info,  Node: Magic Mock,  Prev: Simulando Métodos Mágicos,  Up: MagicMock and magic method support

5.26.6.20 Magic Mock
....................

Existem duas variantes de ‘MagicMock’: *note MagicMock: ebe. e *note
NonCallableMagicMock: 42e2.

 -- Classe: unittest.mock.MagicMock (*args, **kw)

     ‘MagicMock’ is a subclass of *note Mock: a54. with default
     implementations of most of the *note magic methods: 4318.  You can
     use ‘MagicMock’ without having to configure the magic methods
     yourself.

     The constructor parameters have the same meaning as for *note Mock:
     a54.

     If you use the 'spec' or 'spec_set' arguments then 'only' magic
     methods that exist in the spec will be created.

 -- Classe: unittest.mock.NonCallableMagicMock (*args, **kw)

     Uma versão não-chamável de *note MagicMock: ebe.

     The constructor parameters have the same meaning as for *note
     MagicMock: ebe, with the exception of 'return_value' and
     'side_effect' which have no meaning on a non-callable mock.

The magic methods are setup with *note MagicMock: ebe. objects, so you
can configure them and use them in the usual way:

     >>> mock = MagicMock()
     >>> mock[3] = 'fish'
     >>> mock.__setitem__.assert_called_with(3, 'fish')
     >>> mock.__getitem__.return_value = 'result'
     >>> mock[2]
     'result'

By default many of the protocol methods are required to return objects
of a specific type.  These methods are preconfigured with a default
return value, so that they can be used without you having to do anything
if you aren’t interested in the return value.  You can still 'set' the
return value manually if you want to change the default.

Métodos e seus padrões:

   * ‘__lt__’: *note NotImplemented: 7d3.

   * ‘__gt__’: ‘NotImplemented’

   * ‘__le__’: ‘NotImplemented’

   * ‘__ge__’: ‘NotImplemented’

   * ‘__int__’: ‘1’

   * ‘__contains__’: ‘False’

   * ‘__len__’: ‘0’

   * ‘__iter__’: ‘iter([])’

   * ‘__exit__’: ‘False’

   * ‘__aexit__’: ‘False’

   * ‘__complex__’: ‘1j’

   * ‘__float__’: ‘1.0’

   * ‘__bool__’: ‘True’

   * ‘__index__’: ‘1’

   * ‘__hash__’: hash padrão para o mock

   * ‘__str__’: 'str' padrão para o mock

   * ‘__sizeof__’: 'sizeof' padrão para o mock

Por exemplo:

     >>> mock = MagicMock()
     >>> int(mock)
     1
     >>> len(mock)
     0
     >>> list(mock)
     []
     >>> object() in mock
     False

The two equality methods, ‘__eq__()’ and ‘__ne__()’, are special.  They
do the default equality comparison on identity, using the *note
side_effect: 42dc. attribute, unless you change their return value to
return something else:

     >>> MagicMock() == 3
     False
     >>> MagicMock() != 3
     True
     >>> mock = MagicMock()
     >>> mock.__eq__.return_value = True
     >>> mock == 3
     True

The return value of ‘MagicMock.__iter__()’ can be any iterable object
and isn’t required to be an iterator:

     >>> mock = MagicMock()
     >>> mock.__iter__.return_value = ['a', 'b', 'c']
     >>> list(mock)
     ['a', 'b', 'c']
     >>> list(mock)
     ['a', 'b', 'c']

If the return value 'is' an iterator, then iterating over it once will
consume it and subsequent iterations will result in an empty list:

     >>> mock.__iter__.return_value = iter(['a', 'b', 'c'])
     >>> list(mock)
     ['a', 'b', 'c']
     >>> list(mock)
     []

‘MagicMock’ has all of the supported magic methods configured except for
some of the obscure and obsolete ones.  You can still set these up if
you want.

Magic methods that are supported but not setup by default in ‘MagicMock’
are:

   * ‘__subclasses__’

   * ‘__dir__’

   * ‘__format__’

   * ‘__get__’, ‘__set__’ e ‘__delete__’

   * ‘__reversed__’ e ‘__missing__’

   * ‘__reduce__’, ‘__reduce_ex__’, ‘__getinitargs__’, ‘__getnewargs__’,
     ‘__getstate__’ e ‘__setstate__’

   * ‘__getformat__’


File: python.info,  Node: Ajudantes,  Next: Order of precedence of side_effect return_value and wraps,  Prev: MagicMock and magic method support,  Up: unittest mock — mock object library

5.26.6.21 Ajudantes
...................

* Menu:

* sentinel::
* DEFAULT::
* chamada::
* create_autospec::
* ANY::
* FILTER_DIR::
* mock_open::
* Especificação automática::
* Vedando mocks::


File: python.info,  Node: sentinel,  Next: DEFAULT,  Up: Ajudantes

5.26.6.22 sentinel
..................

 -- Dado: unittest.mock.sentinel

     The ‘sentinel’ object provides a convenient way of providing unique
     objects for your tests.

     Attributes are created on demand when you access them by name.
     Accessing the same attribute will always return the same object.
     The objects returned have a sensible repr so that test failure
     messages are readable.

     Alterado na versão 3.7: The ‘sentinel’ attributes now preserve
     their identity when they are *note copied: 25. or *note pickled:
     a6.

Sometimes when testing you need to test that a specific object is passed
as an argument to another method, or returned.  It can be common to
create named sentinel objects to test this.  *note sentinel: bb8.
provides a convenient way of creating and testing the identity of
objects like this.

In this example we monkey patch ‘method’ to return
‘sentinel.some_object’:

     >>> real = ProductionClass()
     >>> real.method = Mock(name="method")
     >>> real.method.return_value = sentinel.some_object
     >>> result = real.method()
     >>> assert result is sentinel.some_object
     >>> result
     sentinel.some_object


File: python.info,  Node: DEFAULT,  Next: chamada,  Prev: sentinel,  Up: Ajudantes

5.26.6.23 DEFAULT
.................

 -- Dado: unittest.mock.DEFAULT

     The *note DEFAULT: 42e3. object is a pre-created sentinel (actually
     ‘sentinel.DEFAULT’).  It can be used by *note side_effect: 42dc.
     functions to indicate that the normal return value should be used.


File: python.info,  Node: chamada,  Next: create_autospec,  Prev: DEFAULT,  Up: Ajudantes

5.26.6.24 chamada
.................

 -- Função: unittest.mock.call (*args, **kwargs)

     *note call(): 1b45. is a helper object for making simpler
     assertions, for comparing with *note call_args: 1af8, *note
     call_args_list: 42ef, *note mock_calls: 42e8. and *note
     method_calls: 42ea.  *note call(): 1b45. can also be used with
     *note assert_has_calls(): 179d.

          >>> m = MagicMock(return_value=None)
          >>> m(1, 2, a='foo', b='bar')
          >>> m()
          >>> m.call_args_list == [call(1, 2, a='foo', b='bar'), call()]
          True

 -- Método: call.call_list ()

     For a call object that represents multiple calls, *note
     call_list(): 431e. returns a list of all the intermediate calls as
     well as the final call.

‘call_list’ is particularly useful for making assertions on “chained
calls”.  A chained call is multiple calls on a single line of code.
This results in multiple entries in *note mock_calls: 42e8. on a mock.
Manually constructing the sequence of calls can be tedious.

*note call_list(): 431e. can construct the sequence of calls from the
same chained call:

     >>> m = MagicMock()
     >>> m(1).method(arg='foo').other('bar')(2.0)
     <MagicMock name='mock().method().other()()' id='...'>
     >>> kall = call(1).method(arg='foo').other('bar')(2.0)
     >>> kall.call_list()
     [call(1),
      call().method(arg='foo'),
      call().method().other('bar'),
      call().method().other()(2.0)]
     >>> m.mock_calls == kall.call_list()
     True
A ‘call’ object is either a tuple of (positional args, keyword args) or
(name, positional args, keyword args) depending on how it was
constructed.  When you construct them yourself this isn’t particularly
interesting, but the ‘call’ objects that are in the *note
Mock.call_args: 1af8, *note Mock.call_args_list: 42ef. and *note
Mock.mock_calls: 42e8. attributes can be introspected to get at the
individual arguments they contain.

The ‘call’ objects in *note Mock.call_args: 1af8. and *note
Mock.call_args_list: 42ef. are two-tuples of (positional args, keyword
args) whereas the ‘call’ objects in *note Mock.mock_calls: 42e8, along
with ones you construct yourself, are three-tuples of (name, positional
args, keyword args).

You can use their “tupleness” to pull out the individual arguments for
more complex introspection and assertions.  The positional arguments are
a tuple (an empty tuple if there are no positional arguments) and the
keyword arguments are a dictionary:

     >>> m = MagicMock(return_value=None)
     >>> m(1, 2, 3, arg='one', arg2='two')
     >>> kall = m.call_args
     >>> kall.args
     (1, 2, 3)
     >>> kall.kwargs
     {'arg': 'one', 'arg2': 'two'}
     >>> kall.args is kall[0]
     True
     >>> kall.kwargs is kall[1]
     True

     >>> m = MagicMock()
     >>> m.foo(4, 5, 6, arg='two', arg2='three')
     <MagicMock name='mock.foo()' id='...'>
     >>> kall = m.mock_calls[0]
     >>> name, args, kwargs = kall
     >>> name
     'foo'
     >>> args
     (4, 5, 6)
     >>> kwargs
     {'arg': 'two', 'arg2': 'three'}
     >>> name is m.mock_calls[0][0]
     True


File: python.info,  Node: create_autospec,  Next: ANY,  Prev: chamada,  Up: Ajudantes

5.26.6.25 create_autospec
.........................

 -- Função: unittest.mock.create_autospec (spec, spec_set=False,
          instance=False, **kwargs)

     Create a mock object using another object as a spec.  Attributes on
     the mock will use the corresponding attribute on the 'spec' object
     as their spec.

     Functions or methods being mocked will have their arguments checked
     to ensure that they are called with the correct signature.

     If 'spec_set' is ‘True’ then attempting to set attributes that
     don’t exist on the spec object will raise an *note AttributeError:
     34b.

     If a class is used as a spec then the return value of the mock (the
     instance of the class) will have the same spec.  You can use a
     class as the spec for an instance object by passing
     ‘instance=True’.  The returned mock will only be callable if
     instances of the mock are callable.

     *note create_autospec(): 16f4. also takes arbitrary keyword
     arguments that are passed to the constructor of the created mock.

See *note Especificação automática: 42df. for examples of how to use
auto-speccing with *note create_autospec(): 16f4. and the 'autospec'
argument to *note patch(): ec1.

Alterado na versão 3.8: *note create_autospec(): 16f4. now returns an
*note AsyncMock: a53. if the target is an async function.


File: python.info,  Node: ANY,  Next: FILTER_DIR,  Prev: create_autospec,  Up: Ajudantes

5.26.6.26 ANY
.............

 -- Dado: unittest.mock.ANY

Sometimes you may need to make assertions about 'some' of the arguments
in a call to mock, but either not care about some of the arguments or
want to pull them individually out of *note call_args: 1af8. and make
more complex assertions on them.

To ignore certain arguments you can pass in objects that compare equal
to 'everything'.  Calls to *note assert_called_with(): 1b99. and *note
assert_called_once_with(): 42e6. will then succeed no matter what was
passed in.

     >>> mock = Mock(return_value=None)
     >>> mock('foo', bar=object())
     >>> mock.assert_called_once_with('foo', bar=ANY)

*note ANY: 1b43. can also be used in comparisons with call lists like
*note mock_calls: 42e8.:

     >>> m = MagicMock(return_value=None)
     >>> m(1)
     >>> m(1, 2)
     >>> m(object())
     >>> m.mock_calls == [call(1), call(1, 2), ANY]
     True

*note ANY: 1b43. is not limited to comparisons with call objects and so
can also be used in test assertions:

     class TestStringMethods(unittest.TestCase):

         def test_split(self):
             s = 'hello world'
             self.assertEqual(s.split(), ['hello', ANY])


File: python.info,  Node: FILTER_DIR,  Next: mock_open,  Prev: ANY,  Up: Ajudantes

5.26.6.27 FILTER_DIR
....................

 -- Dado: unittest.mock.FILTER_DIR

*note FILTER_DIR: 42ec. is a module level variable that controls the way
mock objects respond to *note dir(): 632.  The default is ‘True’, which
uses the filtering described below, to only show useful members.  If you
dislike this filtering, or need to switch it off for diagnostic
purposes, then set ‘mock.FILTER_DIR = False’.

With filtering on, ‘dir(some_mock)’ shows only useful attributes and
will include any dynamically created attributes that wouldn’t normally
be shown.  If the mock was created with a 'spec' (or 'autospec' of
course) then all the attributes from the original are shown, even if
they haven’t been accessed yet:

     >>> dir(Mock())
     ['assert_any_call',
      'assert_called',
      'assert_called_once',
      'assert_called_once_with',
      'assert_called_with',
      'assert_has_calls',
      'assert_not_called',
      'attach_mock',
      ...
     >>> from urllib import request
     >>> dir(Mock(spec=request))
     ['AbstractBasicAuthHandler',
      'AbstractDigestAuthHandler',
      'AbstractHTTPHandler',
      'BaseHandler',
      ...

Many of the not-very-useful (private to *note Mock: a54. rather than the
thing being mocked) underscore and double underscore prefixed attributes
have been filtered from the result of calling *note dir(): 632. on a
*note Mock: a54.  If you dislike this behaviour you can switch it off by
setting the module level switch *note FILTER_DIR: 42ec.:

     >>> from unittest import mock
     >>> mock.FILTER_DIR = False
     >>> dir(mock.Mock())
     ['_NonCallableMock__get_return_value',
      '_NonCallableMock__get_side_effect',
      '_NonCallableMock__return_value_doc',
      '_NonCallableMock__set_return_value',
      '_NonCallableMock__set_side_effect',
      '__call__',
      '__class__',
      ...

Alternatively you can just use ‘vars(my_mock)’ (instance members) and
‘dir(type(my_mock))’ (type members) to bypass the filtering irrespective
of *note FILTER_DIR: 42ec.


File: python.info,  Node: mock_open,  Next: Especificação automática,  Prev: FILTER_DIR,  Up: Ajudantes

5.26.6.28 mock_open
...................

 -- Função: unittest.mock.mock_open (mock=None, read_data=None)

     A helper function to create a mock to replace the use of *note
     open(): 51c.  It works for *note open(): 51c. called directly or
     used as a context manager.

     The 'mock' argument is the mock object to configure.  If ‘None’
     (the default) then a *note MagicMock: ebe. will be created for you,
     with the API limited to methods or attributes available on standard
     file handles.

     'read_data' is a string for the *note read(): e48, *note
     readline(): 241f, and *note readlines(): 24c7. methods of the file
     handle to return.  Calls to those methods will take data from
     'read_data' until it is depleted.  The mock of these methods is
     pretty simplistic: every time the 'mock' is called, the 'read_data'
     is rewound to the start.  If you need more control over the data
     that you are feeding to the tested code you will need to customize
     this mock for yourself.  When that is insufficient, one of the
     in-memory filesystem packages on PyPI(1) can offer a realistic
     filesystem for testing.

     Alterado na versão 3.4: Added *note readline(): 241f. and *note
     readlines(): 24c7. support.  The mock of *note read(): e48. changed
     to consume 'read_data' rather than returning it on each call.

     Alterado na versão 3.5: 'read_data' is now reset on each call to
     the 'mock'.

     Alterado na versão 3.8: Added *note __iter__(): 1e4a. to
     implementation so that iteration (such as in for loops) correctly
     consumes 'read_data'.

Using *note open(): 51c. as a context manager is a great way to ensure
your file handles are closed properly and is becoming common:

     with open('/some/path', 'w') as f:
         f.write('something')

The issue is that even if you mock out the call to *note open(): 51c. it
is the 'returned object' that is used as a context manager (and has
*note __enter__(): 5c8. and *note __exit__(): 1344. called).

Mocking context managers with a *note MagicMock: ebe. is common enough
and fiddly enough that a helper function is useful.

     >>> m = mock_open()
     >>> with patch('__main__.open', m):
     ...     with open('foo', 'w') as h:
     ...         h.write('some stuff')
     ...
     >>> m.mock_calls
     [call('foo', 'w'),
      call().__enter__(),
      call().write('some stuff'),
      call().__exit__(None, None, None)]
     >>> m.assert_called_once_with('foo', 'w')
     >>> handle = m()
     >>> handle.write.assert_called_once_with('some stuff')

E para ler arquivos:

     >>> with patch('__main__.open', mock_open(read_data='bibble')) as m:
     ...     with open('foo') as h:
     ...         result = h.read()
     ...
     >>> m.assert_called_once_with('foo')
     >>> assert result == 'bibble'

   ---------- Footnotes ----------

   (1) https://pypi.org


File: python.info,  Node: Especificação automática,  Next: Vedando mocks,  Prev: mock_open,  Up: Ajudantes

5.26.6.29 Especificação automática
..................................

Autospeccing is based on the existing ‘spec’ feature of mock.  It limits
the api of mocks to the api of an original object (the spec), but it is
recursive (implemented lazily) so that attributes of mocks only have the
same api as the attributes of the spec.  In addition mocked functions /
methods have the same call signature as the original so they raise a
*note TypeError: 2c3. if they are called incorrectly.

Before I explain how auto-speccing works, here’s why it is needed.

*note Mock: a54. is a very powerful and flexible object, but it suffers
from a flaw which is general to mocking.  If you refactor some of your
code, rename members and so on, any tests for code that is still using
the 'old api' but uses mocks instead of the real objects will still
pass.  This means your tests can all pass even though your code is
broken.

Alterado na versão 3.5: Before 3.5, tests with a typo in the word assert
would silently pass when they should raise an error.  You can still
achieve this behavior by passing ‘unsafe=True’ to Mock.

Note that this is another reason why you need integration tests as well
as unit tests.  Testing everything in isolation is all fine and dandy,
but if you don’t test how your units are “wired together” there is still
lots of room for bugs that tests might have caught.

*note unittest.mock: 107. already provides a feature to help with this,
called speccing.  If you use a class or instance as the ‘spec’ for a
mock then you can only access attributes on the mock that exist on the
real class:

     >>> from urllib import request
     >>> mock = Mock(spec=request.Request)
     >>> mock.assret_called_with  # Intentional typo!
     Traceback (most recent call last):
      ...
     AttributeError: Mock object has no attribute 'assret_called_with'

The spec only applies to the mock itself, so we still have the same
issue with any methods on the mock:

     >>> mock.header_items()
     <mock.Mock object at 0x...>
     >>> mock.header_items.assret_called_with()  # Intentional typo!

Auto-speccing solves this problem.  You can either pass ‘autospec=True’
to *note patch(): ec1. / *note patch.object(): 167f. or use the *note
create_autospec(): 16f4. function to create a mock with a spec.  If you
use the ‘autospec=True’ argument to *note patch(): ec1. then the object
that is being replaced will be used as the spec object.  Because the
speccing is done “lazily” (the spec is created as attributes on the mock
are accessed) you can use it with very complex or deeply nested objects
(like modules that import modules that import modules) without a big
performance hit.

Aqui está um exemplo disso em uso:

     >>> from urllib import request
     >>> patcher = patch('__main__.request', autospec=True)
     >>> mock_request = patcher.start()
     >>> request is mock_request
     True
     >>> mock_request.Request
     <MagicMock name='request.Request' spec='Request' id='...'>

You can see that ‘request.Request’ has a spec.  ‘request.Request’ takes
two arguments in the constructor (one of which is 'self').  Here’s what
happens if we try to call it incorrectly:

     >>> req = request.Request()
     Traceback (most recent call last):
      ...
     TypeError: <lambda>() takes at least 2 arguments (1 given)

The spec also applies to instantiated classes (i.e.  the return value of
specced mocks):

     >>> req = request.Request('foo')
     >>> req
     <NonCallableMagicMock name='request.Request()' spec='Request' id='...'>

‘Request’ objects are not callable, so the return value of instantiating
our mocked out ‘request.Request’ is a non-callable mock.  With the spec
in place any typos in our asserts will raise the correct error:

     >>> req.add_header('spam', 'eggs')
     <MagicMock name='request.Request().add_header()' id='...'>
     >>> req.add_header.assret_called_with  # Intentional typo!
     Traceback (most recent call last):
      ...
     AttributeError: Mock object has no attribute 'assret_called_with'
     >>> req.add_header.assert_called_with('spam', 'eggs')

In many cases you will just be able to add ‘autospec=True’ to your
existing *note patch(): ec1. calls and then be protected against bugs
due to typos and api changes.

As well as using 'autospec' through *note patch(): ec1. there is a *note
create_autospec(): 16f4. for creating autospecced mocks directly:

     >>> from urllib import request
     >>> mock_request = create_autospec(request)
     >>> mock_request.Request('foo', 'bar')
     <NonCallableMagicMock name='mock.Request()' spec='Request' id='...'>

This isn’t without caveats and limitations however, which is why it is
not the default behaviour.  In order to know what attributes are
available on the spec object, autospec has to introspect (access
attributes) the spec.  As you traverse attributes on the mock a
corresponding traversal of the original object is happening under the
hood.  If any of your specced objects have properties or descriptors
that can trigger code execution then you may not be able to use
autospec.  On the other hand it is much better to design your objects so
that introspection is safe (1).

A more serious problem is that it is common for instance attributes to
be created in the *note __init__(): 6b0. method and not to exist on the
class at all.  'autospec' can’t know about any dynamically created
attributes and restricts the api to visible attributes.

     >>> class Something:
     ...   def __init__(self):
     ...     self.a = 33
     ...
     >>> with patch('__main__.Something', autospec=True):
     ...   thing = Something()
     ...   thing.a
     ...
     Traceback (most recent call last):
       ...
     AttributeError: Mock object has no attribute 'a'

There are a few different ways of resolving this problem.  The easiest,
but not necessarily the least annoying, way is to simply set the
required attributes on the mock after creation.  Just because 'autospec'
doesn’t allow you to fetch attributes that don’t exist on the spec it
doesn’t prevent you setting them:

     >>> with patch('__main__.Something', autospec=True):
     ...   thing = Something()
     ...   thing.a = 33
     ...

There is a more aggressive version of both 'spec' and 'autospec' that
'does' prevent you setting non-existent attributes.  This is useful if
you want to ensure your code only 'sets' valid attributes too, but
obviously it prevents this particular scenario:

     >>> with patch('__main__.Something', autospec=True, spec_set=True):
     ...   thing = Something()
     ...   thing.a = 33
     ...
     Traceback (most recent call last):
      ...
     AttributeError: Mock object has no attribute 'a'

Probably the best way of solving the problem is to add class attributes
as default values for instance members initialised in *note __init__():
6b0.  Note that if you are only setting default attributes in
‘__init__()’ then providing them via class attributes (shared between
instances of course) is faster too.  e.g.

     class Something:
         a = 33

This brings up another issue.  It is relatively common to provide a
default value of ‘None’ for members that will later be an object of a
different type.  ‘None’ would be useless as a spec because it wouldn’t
let you access 'any' attributes or methods on it.  As ‘None’ is 'never'
going to be useful as a spec, and probably indicates a member that will
normally of some other type, autospec doesn’t use a spec for members
that are set to ‘None’.  These will just be ordinary mocks (well -
MagicMocks):

     >>> class Something:
     ...     member = None
     ...
     >>> mock = create_autospec(Something)
     >>> mock.member.foo.bar.baz()
     <MagicMock name='mock.member.foo.bar.baz()' id='...'>

If modifying your production classes to add defaults isn’t to your
liking then there are more options.  One of these is simply to use an
instance as the spec rather than the class.  The other is to create a
subclass of the production class and add the defaults to the subclass
without affecting the production class.  Both of these require you to
use an alternative object as the spec.  Thankfully *note patch(): ec1.
supports this - you can simply pass the alternative object as the
'autospec' argument:

     >>> class Something:
     ...   def __init__(self):
     ...     self.a = 33
     ...
     >>> class SomethingForTest(Something):
     ...   a = 33
     ...
     >>> p = patch('__main__.Something', autospec=SomethingForTest)
     >>> mock = p.start()
     >>> mock.a
     <NonCallableMagicMock name='Something.a' spec='int' id='...'>

   ---------- Footnotes ----------

   (1) This only applies to classes or already instantiated objects.
Calling a mocked class to create a mock instance 'does not' create a
real instance.  It is only attribute lookups - along with calls to *note
dir(): 632. - that are done.


File: python.info,  Node: Vedando mocks,  Prev: Especificação automática,  Up: Ajudantes

5.26.6.30 Vedando mocks
.......................

 -- Função: unittest.mock.seal (mock)

     Seal will disable the automatic creation of mocks when accessing an
     attribute of the mock being sealed or any of its attributes that
     are already mocks recursively.

     If a mock instance with a name or a spec is assigned to an
     attribute it won’t be considered in the sealing chain.  This allows
     one to prevent seal from fixing part of the mock object.

          >>> mock = Mock()
          >>> mock.submock.attribute1 = 2
          >>> mock.not_submock = mock.Mock(name="sample_name")
          >>> seal(mock)
          >>> mock.new_attribute  # This will raise AttributeError.
          >>> mock.submock.attribute2  # This will raise AttributeError.
          >>> mock.not_submock.attribute2  # This won't raise.

     Adicionado na versão 3.7.


File: python.info,  Node: Order of precedence of side_effect return_value and wraps,  Prev: Ajudantes,  Up: unittest mock — mock object library

5.26.6.31 Order of precedence of ‘side_effect’, ‘return_value’ and 'wraps'
..........................................................................

The order of their precedence is:

  1. *note side_effect: 42dc.

  2. *note return_value: 42e4.

  3. 'wraps'

If all three are set, mock will return the value from *note side_effect:
42dc, ignoring *note return_value: 42e4. and the wrapped object
altogether.  If any two are set, the one with the higher precedence will
return the value.  Regardless of the order of which was set first, the
order of precedence remains unchanged.

     >>> from unittest.mock import Mock
     >>> class Order:
     ...     @staticmethod
     ...     def get_value():
     ...         return "third"
     ...
     >>> order_mock = Mock(spec=Order, wraps=Order)
     >>> order_mock.get_value.side_effect = ["first"]
     >>> order_mock.get_value.return_value = "second"
     >>> order_mock.get_value()
     'first'

As ‘None’ is the default value of *note side_effect: 42dc, if you
reassign its value back to ‘None’, the order of precedence will be
checked between *note return_value: 42e4. and the wrapped object,
ignoring *note side_effect: 42dc.

     >>> order_mock.get_value.side_effect = None
     >>> order_mock.get_value()
     'second'

If the value being returned by *note side_effect: 42dc. is *note
DEFAULT: 42e3, it is ignored and the order of precedence moves to the
successor to obtain the value to return.

     >>> from unittest.mock import DEFAULT
     >>> order_mock.get_value.side_effect = [DEFAULT]
     >>> order_mock.get_value()
     'second'

When *note Mock: a54. wraps an object, the default value of *note
return_value: 42e4. will be *note DEFAULT: 42e3.

     >>> order_mock = Mock(spec=Order, wraps=Order)
     >>> order_mock.return_value
     sentinel.DEFAULT
     >>> order_mock.get_value.return_value
     sentinel.DEFAULT

The order of precedence will ignore this value and it will move to the
last successor which is the wrapped object.

As the real call is being made to the wrapped object, creating an
instance of this mock will return the real instance of the class.  The
positional arguments, if any, required by the wrapped object must be
passed.

     >>> order_mock_instance = order_mock()
     >>> isinstance(order_mock_instance, Order)
     True
     >>> order_mock_instance.get_value()
     'third'

     >>> order_mock.get_value.return_value = DEFAULT
     >>> order_mock.get_value()
     'third'

     >>> order_mock.get_value.return_value = "second"
     >>> order_mock.get_value()
     'second'

But if you assign ‘None’ to it, this will not be ignored as it is an
explicit assignment.  So, the order of precedence will not move to the
wrapped object.

     >>> order_mock.get_value.return_value = None
     >>> order_mock.get_value() is None
     True

Even if you set all three at once when initializing the mock, the order
of precedence remains the same:

     >>> order_mock = Mock(spec=Order, wraps=Order,
     ...                   **{"get_value.side_effect": ["first"],
     ...                      "get_value.return_value": "second"}
     ...                   )
     ...
     >>> order_mock.get_value()
     'first'
     >>> order_mock.get_value.side_effect = None
     >>> order_mock.get_value()
     'second'
     >>> order_mock.get_value.return_value = DEFAULT
     >>> order_mock.get_value()
     'third'

If *note side_effect: 42dc. is exhausted, the order of precedence will
not cause a value to be obtained from the successors.  Instead,
‘StopIteration’ exception is raised.

     >>> order_mock = Mock(spec=Order, wraps=Order)
     >>> order_mock.get_value.side_effect = ["first side effect value",
     ...                                     "another side effect value"]
     >>> order_mock.get_value.return_value = "second"

     >>> order_mock.get_value()
     'first side effect value'
     >>> order_mock.get_value()
     'another side effect value'

     >>> order_mock.get_value()
     Traceback (most recent call last):
      ...
     StopIteration


File: python.info,  Node: unittest mock — primeiros passos,  Next: test — Pacote de Testes de Regressão do Python,  Prev: unittest mock — mock object library,  Up: Ferramentas de Desenvolvimento

5.26.7 ‘unittest.mock’ — primeiros passos
-----------------------------------------

Adicionado na versão 3.3.

* Menu:

* Usando Mock::
* Patch Decorators::
* Further Examples::


File: python.info,  Node: Usando Mock,  Next: Patch Decorators,  Up: unittest mock — primeiros passos

5.26.7.1 Usando Mock
....................

* Menu:

* Métodos de aplicação de patches em Mock::
* Mock de chamadas de métodos em um objeto::
* Mocking Classes::
* Nomeando os mocks::
* Rastreando todas as chamadas::
* Setting Return Values and Attributes::
* Raising exceptions with mocks::
* Side effect functions and iterables::
* Mocking asynchronous iterators::
* Mocking asynchronous context manager::
* Creating a Mock from an Existing Object::
* Using side_effect to return per file content::


File: python.info,  Node: Métodos de aplicação de patches em Mock,  Next: Mock de chamadas de métodos em um objeto,  Up: Usando Mock

5.26.7.2 Métodos de aplicação de patches em Mock
................................................

Usos comuns para objetos *note Mock: a54. incluem:

   * Métodos de aplicação de patches

   * Método de gravação que invoca objetos

Talvez você queira substituir um método em um objeto para verificar se
ele foi chamado com os argumentos corretos por outra parte do sistema:

     >>> real = SomeClass()
     >>> real.method = MagicMock(name='method')
     >>> real.method(3, 4, 5, key='value')
     <MagicMock name='method()' id='...'>

Depois que nosso mock for usado (‘real.method’ neste exemplo), ele terá
métodos e atributos que permitem que você faça afirmações sobre como ele
foi usado.

     Nota: Na maioria desses exemplos, as classes *note Mock: a54. e
     *note MagicMock: ebe. são intercambiáveis.  Como a ‘MagicMock’ é a
     classe mais capaz, ela faz sentido para ser usada por padrão.

Uma vez que o mock foi chamado, seu atributo *note called: 42ee. é
definido como ‘True’.  Mais importante, podemos usar o método *note
assert_called_with(): 1b99. ou *note assert_called_once_with(): 42e6.
para verificar se ele foi chamado com os argumentos corretos.

Este exemplo testa se a chamada de ‘ProductionClass().method’ resulta em
uma chamada para o método ‘something’:

     >>> class ProductionClass:
     ...     def method(self):
     ...         self.something(1, 2, 3)
     ...     def something(self, a, b, c):
     ...         pass
     ...
     >>> real = ProductionClass()
     >>> real.something = MagicMock()
     >>> real.method()
     >>> real.something.assert_called_once_with(1, 2, 3)


File: python.info,  Node: Mock de chamadas de métodos em um objeto,  Next: Mocking Classes,  Prev: Métodos de aplicação de patches em Mock,  Up: Usando Mock

5.26.7.3 Mock de chamadas de métodos em um objeto
.................................................

No último exemplo, aplicamos um patch em um método diretamente em um
objeto para verificar se ele foi chamado corretamente.  Outro caso de
uso comum é passar um objeto para um método (ou alguma parte do sistema
em teste) e então verificar se ele é usado da maneira correta.

O ‘ProductionClass’ simples abaixo tem um método ‘closer’.  Se ele for
chamado com um objeto, então ele chama ‘close’ nele.

     >>> class ProductionClass:
     ...     def closer(self, something):
     ...         something.close()
     ...

Então, para testá-lo, precisamos passar um objeto com um método ‘close’
e verificar se ele foi chamado corretamente.

     >>> real = ProductionClass()
     >>> mock = Mock()
     >>> real.closer(mock)
     >>> mock.close.assert_called_with()

Não precisamos fazer nenhum trabalho para fornecer o método ‘close’ em
nosso mock.  Acessar close o cria.  Então, se ‘close’ ainda não foi
chamado, acessá-lo no teste o criará, mas *note assert_called_with():
1b99. levantará uma exceção de falha.


File: python.info,  Node: Mocking Classes,  Next: Nomeando os mocks,  Prev: Mock de chamadas de métodos em um objeto,  Up: Usando Mock

5.26.7.4 Mocking Classes
........................

A common use case is to mock out classes instantiated by your code under
test.  When you patch a class, then that class is replaced with a mock.
Instances are created by 'calling the class'.  This means you access the
“mock instance” by looking at the return value of the mocked class.

In the example below we have a function ‘some_function’ that
instantiates ‘Foo’ and calls a method on it.  The call to *note patch():
ec1. replaces the class ‘Foo’ with a mock.  The ‘Foo’ instance is the
result of calling the mock, so it is configured by modifying the mock
*note return_value: 42e4.

     >>> def some_function():
     ...     instance = module.Foo()
     ...     return instance.method()
     ...
     >>> with patch('module.Foo') as mock:
     ...     instance = mock.return_value
     ...     instance.method.return_value = 'the result'
     ...     result = some_function()
     ...     assert result == 'the result'


File: python.info,  Node: Nomeando os mocks,  Next: Rastreando todas as chamadas,  Prev: Mocking Classes,  Up: Usando Mock

5.26.7.5 Nomeando os mocks
..........................

It can be useful to give your mocks a name.  The name is shown in the
repr of the mock and can be helpful when the mock appears in test
failure messages.  The name is also propagated to attributes or methods
of the mock:

     >>> mock = MagicMock(name='foo')
     >>> mock
     <MagicMock name='foo' id='...'>
     >>> mock.method
     <MagicMock name='foo.method' id='...'>


File: python.info,  Node: Rastreando todas as chamadas,  Next: Setting Return Values and Attributes,  Prev: Nomeando os mocks,  Up: Usando Mock

5.26.7.6 Rastreando todas as chamadas
.....................................

Frequentemente você quer rastrear mais de uma chamada para um método.  O
atributo *note mock_calls: 42e8. registra todas as chamadas para
atributos filhos do mock - e também para seus filhos.

     >>> mock = MagicMock()
     >>> mock.method()
     <MagicMock name='mock.method()' id='...'>
     >>> mock.attribute.method(10, x=53)
     <MagicMock name='mock.attribute.method()' id='...'>
     >>> mock.mock_calls
     [call.method(), call.attribute.method(10, x=53)]

If you make an assertion about ‘mock_calls’ and any unexpected methods
have been called, then the assertion will fail.  This is useful because
as well as asserting that the calls you expected have been made, you are
also checking that they were made in the right order and with no
additional calls:

You use the *note call: 1b45. object to construct lists for comparing
with ‘mock_calls’:

     >>> expected = [call.method(), call.attribute.method(10, x=53)]
     >>> mock.mock_calls == expected
     True

However, parameters to calls that return mocks are not recorded, which
means it is not possible to track nested calls where the parameters used
to create ancestors are important:

     >>> m = Mock()
     >>> m.factory(important=True).deliver()
     <Mock name='mock.factory().deliver()' id='...'>
     >>> m.mock_calls[-1] == call.factory(important=False).deliver()
     True


File: python.info,  Node: Setting Return Values and Attributes,  Next: Raising exceptions with mocks,  Prev: Rastreando todas as chamadas,  Up: Usando Mock

5.26.7.7 Setting Return Values and Attributes
.............................................

Setting the return values on a mock object is trivially easy:

     >>> mock = Mock()
     >>> mock.return_value = 3
     >>> mock()
     3

Of course you can do the same for methods on the mock:

     >>> mock = Mock()
     >>> mock.method.return_value = 3
     >>> mock.method()
     3

The return value can also be set in the constructor:

     >>> mock = Mock(return_value=3)
     >>> mock()
     3

If you need an attribute setting on your mock, just do it:

     >>> mock = Mock()
     >>> mock.x = 3
     >>> mock.x
     3

Sometimes you want to mock up a more complex situation, like for example
‘mock.connection.cursor().execute("SELECT 1")’.  If we wanted this call
to return a list, then we have to configure the result of the nested
call.

We can use *note call: 1b45. to construct the set of calls in a “chained
call” like this for easy assertion afterwards:

     >>> mock = Mock()
     >>> cursor = mock.connection.cursor.return_value
     >>> cursor.execute.return_value = ['foo']
     >>> mock.connection.cursor().execute("SELECT 1")
     ['foo']
     >>> expected = call.connection.cursor().execute("SELECT 1").call_list()
     >>> mock.mock_calls
     [call.connection.cursor(), call.connection.cursor().execute('SELECT 1')]
     >>> mock.mock_calls == expected
     True

It is the call to ‘.call_list()’ that turns our call object into a list
of calls representing the chained calls.


File: python.info,  Node: Raising exceptions with mocks,  Next: Side effect functions and iterables,  Prev: Setting Return Values and Attributes,  Up: Usando Mock

5.26.7.8 Raising exceptions with mocks
......................................

A useful attribute is *note side_effect: 42dc.  If you set this to an
exception class or instance then the exception will be raised when the
mock is called.

     >>> mock = Mock(side_effect=Exception('Boom!'))
     >>> mock()
     Traceback (most recent call last):
       ...
     Exception: Boom!


File: python.info,  Node: Side effect functions and iterables,  Next: Mocking asynchronous iterators,  Prev: Raising exceptions with mocks,  Up: Usando Mock

5.26.7.9 Side effect functions and iterables
............................................

‘side_effect’ can also be set to a function or an iterable.  The use
case for ‘side_effect’ as an iterable is where your mock is going to be
called several times, and you want each call to return a different
value.  When you set ‘side_effect’ to an iterable every call to the mock
returns the next value from the iterable:

     >>> mock = MagicMock(side_effect=[4, 5, 6])
     >>> mock()
     4
     >>> mock()
     5
     >>> mock()
     6

For more advanced use cases, like dynamically varying the return values
depending on what the mock is called with, ‘side_effect’ can be a
function.  The function will be called with the same arguments as the
mock.  Whatever the function returns is what the call returns:

     >>> vals = {(1, 2): 1, (2, 3): 2}
     >>> def side_effect(*args):
     ...     return vals[args]
     ...
     >>> mock = MagicMock(side_effect=side_effect)
     >>> mock(1, 2)
     1
     >>> mock(2, 3)
     2


File: python.info,  Node: Mocking asynchronous iterators,  Next: Mocking asynchronous context manager,  Prev: Side effect functions and iterables,  Up: Usando Mock

5.26.7.10 Mocking asynchronous iterators
........................................

Since Python 3.8, ‘AsyncMock’ and ‘MagicMock’ have support to mock *note
Iteradores assíncronos: d9f. through ‘__aiter__’.  The *note
return_value: 42e4. attribute of ‘__aiter__’ can be used to set the
return values to be used for iteration.

     >>> mock = MagicMock()  # AsyncMock also works here
     >>> mock.__aiter__.return_value = [1, 2, 3]
     >>> async def main():
     ...     return [i async for i in mock]
     ...
     >>> asyncio.run(main())
     [1, 2, 3]


File: python.info,  Node: Mocking asynchronous context manager,  Next: Creating a Mock from an Existing Object,  Prev: Mocking asynchronous iterators,  Up: Usando Mock

5.26.7.11 Mocking asynchronous context manager
..............................................

Since Python 3.8, ‘AsyncMock’ and ‘MagicMock’ have support to mock *note
Gerenciadores de contexto assíncronos: 5fc. through ‘__aenter__’ and
‘__aexit__’.  By default, ‘__aenter__’ and ‘__aexit__’ are ‘AsyncMock’
instances that return an async function.

     >>> class AsyncContextManager:
     ...     async def __aenter__(self):
     ...         return self
     ...     async def __aexit__(self, exc_type, exc, tb):
     ...         pass
     ...
     >>> mock_instance = MagicMock(AsyncContextManager())  # AsyncMock also works here
     >>> async def main():
     ...     async with mock_instance as result:
     ...         pass
     ...
     >>> asyncio.run(main())
     >>> mock_instance.__aenter__.assert_awaited_once()
     >>> mock_instance.__aexit__.assert_awaited_once()


File: python.info,  Node: Creating a Mock from an Existing Object,  Next: Using side_effect to return per file content,  Prev: Mocking asynchronous context manager,  Up: Usando Mock

5.26.7.12 Creating a Mock from an Existing Object
.................................................

One problem with over use of mocking is that it couples your tests to
the implementation of your mocks rather than your real code.  Suppose
you have a class that implements ‘some_method’.  In a test for another
class, you provide a mock of this object that 'also' provides
‘some_method’.  If later you refactor the first class, so that it no
longer has ‘some_method’ - then your tests will continue to pass even
though your code is now broken!

*note Mock: a54. allows you to provide an object as a specification for
the mock, using the 'spec' keyword argument.  Accessing methods /
attributes on the mock that don’t exist on your specification object
will immediately raise an attribute error.  If you change the
implementation of your specification, then tests that use that class
will start failing immediately without you having to instantiate the
class in those tests.

     >>> mock = Mock(spec=SomeClass)
     >>> mock.old_method()
     Traceback (most recent call last):
        ...
     AttributeError: Mock object has no attribute 'old_method'. Did you mean: 'class_method'?

Using a specification also enables a smarter matching of calls made to
the mock, regardless of whether some parameters were passed as
positional or named arguments:

     >>> def f(a, b, c): pass
     ...
     >>> mock = Mock(spec=f)
     >>> mock(1, 2, 3)
     <Mock name='mock()' id='140161580456576'>
     >>> mock.assert_called_with(a=1, b=2, c=3)

If you want this smarter matching to also work with method calls on the
mock, you can use *note auto-speccing: 42df.

If you want a stronger form of specification that prevents the setting
of arbitrary attributes as well as the getting of them then you can use
'spec_set' instead of 'spec'.


File: python.info,  Node: Using side_effect to return per file content,  Prev: Creating a Mock from an Existing Object,  Up: Usando Mock

5.26.7.13 Using side_effect to return per file content
......................................................

*note mock_open(): 101d. is used to patch *note open(): 51c. method.
*note side_effect: 42dc. can be used to return a new Mock object per
call.  This can be used to return different contents per file stored in
a dictionary:

     DEFAULT = "default"
     data_dict = {"file1": "data1",
                  "file2": "data2"}

     def open_side_effect(name):
         return mock_open(read_data=data_dict.get(name, DEFAULT))()

     with patch("builtins.open", side_effect=open_side_effect):
         with open("file1") as file1:
             assert file1.read() == "data1"

         with open("file2") as file2:
             assert file2.read() == "data2"

         with open("file3") as file2:
             assert file2.read() == "default"


File: python.info,  Node: Patch Decorators,  Next: Further Examples,  Prev: Usando Mock,  Up: unittest mock — primeiros passos

5.26.7.14 Patch Decorators
..........................

     Nota: Com *note patch(): ec1, é importante que você faça o patch de
     objetos no espaço de nomes onde eles são procurados.  Normalmente,
     isso é simples, mas para um guia rápido, leia *note onde fazer o
     patch: 42dd.

A common need in tests is to patch a class attribute or a module
attribute, for example patching a builtin or patching a class in a
module to test that it is instantiated.  Modules and classes are
effectively global, so patching on them has to be undone after the test
or the patch will persist into other tests and cause hard to diagnose
problems.

mock provides three convenient decorators for this: *note patch(): ec1,
*note patch.object(): 167f. and *note patch.dict(): 1b6a.  ‘patch’ takes
a single string, of the form ‘package.module.Class.attribute’ to specify
the attribute you are patching.  It also optionally takes a value that
you want the attribute (or class or whatever) to be replaced with.
‘patch.object’ takes an object and the name of the attribute you would
like patched, plus optionally the value to patch it with.

‘patch.object’:

     >>> original = SomeClass.attribute
     >>> @patch.object(SomeClass, 'attribute', sentinel.attribute)
     ... def test():
     ...     assert SomeClass.attribute == sentinel.attribute
     ...
     >>> test()
     >>> assert SomeClass.attribute == original

     >>> @patch('package.module.attribute', sentinel.attribute)
     ... def test():
     ...     from package.module import attribute
     ...     assert attribute is sentinel.attribute
     ...
     >>> test()

If you are patching a module (including *note builtins: 12.) then use
*note patch(): ec1. instead of *note patch.object(): 167f.:

     >>> mock = MagicMock(return_value=sentinel.file_handle)
     >>> with patch('builtins.open', mock):
     ...     handle = open('filename', 'r')
     ...
     >>> mock.assert_called_with('filename', 'r')
     >>> assert handle == sentinel.file_handle, "incorrect file handle returned"

The module name can be ‘dotted’, in the form ‘package.module’ if needed:

     >>> @patch('package.module.ClassName.attribute', sentinel.attribute)
     ... def test():
     ...     from package.module import ClassName
     ...     assert ClassName.attribute == sentinel.attribute
     ...
     >>> test()

A nice pattern is to actually decorate test methods themselves:

     >>> class MyTest(unittest.TestCase):
     ...     @patch.object(SomeClass, 'attribute', sentinel.attribute)
     ...     def test_something(self):
     ...         self.assertEqual(SomeClass.attribute, sentinel.attribute)
     ...
     >>> original = SomeClass.attribute
     >>> MyTest('test_something').test_something()
     >>> assert SomeClass.attribute == original

If you want to patch with a Mock, you can use *note patch(): ec1. with
only one argument (or *note patch.object(): 167f. with two arguments).
The mock will be created for you and passed into the test function /
method:

     >>> class MyTest(unittest.TestCase):
     ...     @patch.object(SomeClass, 'static_method')
     ...     def test_something(self, mock_method):
     ...         SomeClass.static_method()
     ...         mock_method.assert_called_with()
     ...
     >>> MyTest('test_something').test_something()

You can stack up multiple patch decorators using this pattern:

     >>> class MyTest(unittest.TestCase):
     ...     @patch('package.module.ClassName1')
     ...     @patch('package.module.ClassName2')
     ...     def test_something(self, MockClass2, MockClass1):
     ...         self.assertIs(package.module.ClassName1, MockClass1)
     ...         self.assertIs(package.module.ClassName2, MockClass2)
     ...
     >>> MyTest('test_something').test_something()

When you nest patch decorators the mocks are passed in to the decorated
function in the same order they applied (the normal 'Python' order that
decorators are applied).  This means from the bottom up, so in the
example above the mock for ‘test_module.ClassName2’ is passed in first.

Também existe *note patch.dict(): 1b6a. para definir valores em um
dicionário apenas durante um escopo e restaurar o dicionário ao seu
estado original quando o teste termina:

     >>> foo = {'key': 'value'}
     >>> original = foo.copy()
     >>> with patch.dict(foo, {'newkey': 'newvalue'}, clear=True):
     ...     assert foo == {'newkey': 'newvalue'}
     ...
     >>> assert foo == original

‘patch’, ‘patch.object’ and ‘patch.dict’ can all be used as context
managers.

Where you use *note patch(): ec1. to create a mock for you, you can get
a reference to the mock using the “as” form of the with statement:

     >>> class ProductionClass:
     ...     def method(self):
     ...         pass
     ...
     >>> with patch.object(ProductionClass, 'method') as mock_method:
     ...     mock_method.return_value = None
     ...     real = ProductionClass()
     ...     real.method(1, 2, 3)
     ...
     >>> mock_method.assert_called_with(1, 2, 3)

As an alternative ‘patch’, ‘patch.object’ and ‘patch.dict’ can be used
as class decorators.  When used in this way it is the same as applying
the decorator individually to every method whose name starts with
“test”.


File: python.info,  Node: Further Examples,  Prev: Patch Decorators,  Up: unittest mock — primeiros passos

5.26.7.15 Further Examples
..........................

Here are some more examples for some slightly more advanced scenarios.

* Menu:

* Mocking chained calls::
* Partial mocking::
* Mocking a Generator Method::
* Applying the same patch to every test method::
* Mocking Unbound Methods::
* Checking multiple calls with mock::
* Coping with mutable arguments::
* Nesting Patches::
* Mocking a dictionary with MagicMock::
* Mock subclasses and their attributes::
* Mocking imports with patch.dict: Mocking imports with patch dict.
* Tracking order of calls and less verbose call assertions::
* More complex argument matching::


File: python.info,  Node: Mocking chained calls,  Next: Partial mocking,  Up: Further Examples

5.26.7.16 Mocking chained calls
...............................

Mocking chained calls is actually straightforward with mock once you
understand the *note return_value: 42e4. attribute.  When a mock is
called for the first time, or you fetch its ‘return_value’ before it has
been called, a new *note Mock: a54. is created.

This means that you can see how the object returned from a call to a
mocked object has been used by interrogating the ‘return_value’ mock:

     >>> mock = Mock()
     >>> mock().foo(a=2, b=3)
     <Mock name='mock().foo()' id='...'>
     >>> mock.return_value.foo.assert_called_with(a=2, b=3)

From here it is a simple step to configure and then make assertions
about chained calls.  Of course another alternative is writing your code
in a more testable way in the first place…

So, suppose we have some code that looks a little bit like this:

     >>> class Something:
     ...     def __init__(self):
     ...         self.backend = BackendProvider()
     ...     def method(self):
     ...         response = self.backend.get_endpoint('foobar').create_call('spam', 'eggs').start_call()
     ...         # more code

Assuming that ‘BackendProvider’ is already well tested, how do we test
‘method()’?  Specifically, we want to test that the code section ‘# more
code’ uses the response object in the correct way.

As this chain of calls is made from an instance attribute we can monkey
patch the ‘backend’ attribute on a ‘Something’ instance.  In this
particular case we are only interested in the return value from the
final call to ‘start_call’ so we don’t have much configuration to do.
Let’s assume the object it returns is ‘file-like’, so we’ll ensure that
our response object uses the builtin *note open(): 51c. as its ‘spec’.

To do this we create a mock instance as our mock backend and create a
mock response object for it.  To set the response as the return value
for that final ‘start_call’ we could do this:

     mock_backend.get_endpoint.return_value.create_call.return_value.start_call.return_value = mock_response

We can do that in a slightly nicer way using the *note configure_mock():
42e5. method to directly set the return value for us:

     >>> something = Something()
     >>> mock_response = Mock(spec=open)
     >>> mock_backend = Mock()
     >>> config = {'get_endpoint.return_value.create_call.return_value.start_call.return_value': mock_response}
     >>> mock_backend.configure_mock(**config)

With these we monkey patch the “mock backend” in place and can make the
real call:

     >>> something.backend = mock_backend
     >>> something.method()

Using *note mock_calls: 42e8. we can check the chained call with a
single assert.  A chained call is several calls in one line of code, so
there will be several entries in ‘mock_calls’.  We can use *note
call.call_list(): 431e. to create this list of calls for us:

     >>> chained = call.get_endpoint('foobar').create_call('spam', 'eggs').start_call()
     >>> call_list = chained.call_list()
     >>> assert mock_backend.mock_calls == call_list


File: python.info,  Node: Partial mocking,  Next: Mocking a Generator Method,  Prev: Mocking chained calls,  Up: Further Examples

5.26.7.17 Partial mocking
.........................

For some tests, you may want to mock out a call to *note
datetime.date.today(): 1512. to return a known date, but don’t want to
prevent the code under test from creating new date objects.
Unfortunately *note datetime.date: 1cd. is written in C, so you cannot
just monkey-patch out the static *note datetime.date.today(): 1512.
method.

Instead, you can effectively wrap the date class with a mock, while
passing through calls to the constructor to the real class (and
returning real instances).

The *note patch decorator: ec1. is used here to mock out the ‘date’
class in the module under test.  The *note side_effect: 42dc. attribute
on the mock date class is then set to a lambda function that returns a
real date.  When the mock date class is called a real date will be
constructed and returned by ‘side_effect’.

     >>> from datetime import date
     >>> with patch('mymodule.date') as mock_date:
     ...     mock_date.today.return_value = date(2010, 10, 8)
     ...     mock_date.side_effect = lambda *args, **kw: date(*args, **kw)
     ...
     ...     assert mymodule.date.today() == date(2010, 10, 8)
     ...     assert mymodule.date(2009, 6, 8) == date(2009, 6, 8)

Note that we don’t patch *note datetime.date: 1cd. globally, we patch
‘date’ in the module that 'uses' it.  See *note where to patch: 42dd.

When ‘date.today()’ is called a known date is returned, but calls to the
‘date(...)’ constructor still return normal dates.  Without this you can
find yourself having to calculate an expected result using exactly the
same algorithm as the code under test, which is a classic testing
anti-pattern.

Calls to the date constructor are recorded in the ‘mock_date’ attributes
(‘call_count’ and friends) which may also be useful for your tests.

Uma forma alternativa de lidar com datas de mock, ou outras classes
embutidas, é discutida nesta entrada de blog(1).

   ---------- Footnotes ----------

   (1) 
https://williambert.online/2011/07/how-to-unit-testing-in-django-with-mocking-and-patching/


File: python.info,  Node: Mocking a Generator Method,  Next: Applying the same patch to every test method,  Prev: Partial mocking,  Up: Further Examples

5.26.7.18 Mocking a Generator Method
....................................

A Python generator is a function or method that uses the *note yield:
9d5. statement to return a series of values when iterated over (1).

A generator method / function is called to return the generator object.
It is the generator object that is then iterated over.  The protocol
method for iteration is *note __iter__(): 1e4a, so we can mock this
using a *note MagicMock: ebe.

Here’s an example class with an “iter” method implemented as a
generator:

     >>> class Foo:
     ...     def iter(self):
     ...         for i in [1, 2, 3]:
     ...             yield i
     ...
     >>> foo = Foo()
     >>> list(foo.iter())
     [1, 2, 3]

How would we mock this class, and in particular its “iter” method?

To configure the values returned from the iteration (implicit in the
call to *note list: 611.), we need to configure the object returned by
the call to ‘foo.iter()’.

     >>> mock_foo = MagicMock()
     >>> mock_foo.iter.return_value = iter([1, 2, 3])
     >>> list(mock_foo.iter())
     [1, 2, 3]

   ---------- Footnotes ----------

   (1) There are also generator expressions and more advanced uses
(http://www.dabeaz.com/coroutines/index.html) of generators, but we
aren’t concerned about them here.  A very good introduction to
generators and how powerful they are is: Generator Tricks for Systems
Programmers (http://www.dabeaz.com/generators/).


File: python.info,  Node: Applying the same patch to every test method,  Next: Mocking Unbound Methods,  Prev: Mocking a Generator Method,  Up: Further Examples

5.26.7.19 Applying the same patch to every test method
......................................................

If you want several patches in place for multiple test methods the
obvious way is to apply the patch decorators to every method.  This can
feel like unnecessary repetition.  Instead, you can use *note patch():
ec1. (in all its various forms) as a class decorator.  This applies the
patches to all test methods on the class.  A test method is identified
by methods whose names start with ‘test’:

     >>> @patch('mymodule.SomeClass')
     ... class MyTest(unittest.TestCase):
     ...
     ...     def test_one(self, MockSomeClass):
     ...         self.assertIs(mymodule.SomeClass, MockSomeClass)
     ...
     ...     def test_two(self, MockSomeClass):
     ...         self.assertIs(mymodule.SomeClass, MockSomeClass)
     ...
     ...     def not_a_test(self):
     ...         return 'something'
     ...
     >>> MyTest('test_one').test_one()
     >>> MyTest('test_two').test_two()
     >>> MyTest('test_two').not_a_test()
     'something'

An alternative way of managing patches is to use the *note métodos do
patch; start e stop: 430f.  These allow you to move the patching into
your ‘setUp’ and ‘tearDown’ methods.

     >>> class MyTest(unittest.TestCase):
     ...     def setUp(self):
     ...         self.patcher = patch('mymodule.foo')
     ...         self.mock_foo = self.patcher.start()
     ...
     ...     def test_foo(self):
     ...         self.assertIs(mymodule.foo, self.mock_foo)
     ...
     ...     def tearDown(self):
     ...         self.patcher.stop()
     ...
     >>> MyTest('test_foo').run()

If you use this technique you must ensure that the patching is “undone”
by calling ‘stop’.  This can be fiddlier than you might think, because
if an exception is raised in the setUp then tearDown is not called.
*note unittest.TestCase.addCleanup(): a8b. makes this easier:

     >>> class MyTest(unittest.TestCase):
     ...     def setUp(self):
     ...         patcher = patch('mymodule.foo')
     ...         self.addCleanup(patcher.stop)
     ...         self.mock_foo = patcher.start()
     ...
     ...     def test_foo(self):
     ...         self.assertIs(mymodule.foo, self.mock_foo)
     ...
     >>> MyTest('test_foo').run()


File: python.info,  Node: Mocking Unbound Methods,  Next: Checking multiple calls with mock,  Prev: Applying the same patch to every test method,  Up: Further Examples

5.26.7.20 Mocking Unbound Methods
.................................

Sometimes a test needs to patch an 'unbound method', which means
patching the method on the class rather than on the instance.  In order
to make assertions about which objects were calling this particular
method, you need to pass ‘self’ as the first argument.  The issue is
that you can’t patch with a mock for this, because if you replace an
unbound method with a mock it doesn’t become a bound method when fetched
from the instance, and so it doesn’t get ‘self’ passed in.  The
workaround is to patch the unbound method with a real function instead.
The *note patch(): ec1. decorator makes it so simple to patch out
methods with a mock that having to create a real function becomes a
nuisance.

If you pass ‘autospec=True’ to patch then it does the patching with a
'real' function object.  This function object has the same signature as
the one it is replacing, but delegates to a mock under the hood.  You
still get your mock auto-created in exactly the same way as before.
What it means though, is that if you use it to patch out an unbound
method on a class the mocked function will be turned into a bound method
if it is fetched from an instance.  It will have ‘self’ passed in as the
first argument, which is exactly what was needed:

     >>> class Foo:
     ...   def foo(self):
     ...     pass
     ...
     >>> with patch.object(Foo, 'foo', autospec=True) as mock_foo:
     ...   mock_foo.return_value = 'foo'
     ...   foo = Foo()
     ...   foo.foo()
     ...
     'foo'
     >>> mock_foo.assert_called_once_with(foo)

If we don’t use ‘autospec=True’ then the unbound method is patched out
with a Mock instance instead, and isn’t called with ‘self’.


File: python.info,  Node: Checking multiple calls with mock,  Next: Coping with mutable arguments,  Prev: Mocking Unbound Methods,  Up: Further Examples

5.26.7.21 Checking multiple calls with mock
...........................................

mock has a nice API for making assertions about how your mock objects
are used.

     >>> mock = Mock()
     >>> mock.foo_bar.return_value = None
     >>> mock.foo_bar('baz', spam='eggs')
     >>> mock.foo_bar.assert_called_with('baz', spam='eggs')

If your mock is only being called once you can use the *note
assert_called_once_with(): 42e6. method that also asserts that the *note
call_count: 15aa. is one.

     >>> mock.foo_bar.assert_called_once_with('baz', spam='eggs')
     >>> mock.foo_bar()
     >>> mock.foo_bar.assert_called_once_with('baz', spam='eggs')
     Traceback (most recent call last):
         ...
     AssertionError: Expected 'foo_bar' to be called once. Called 2 times.
     Calls: [call('baz', spam='eggs'), call()].

Both ‘assert_called_with’ and ‘assert_called_once_with’ make assertions
about the 'most recent' call.  If your mock is going to be called
several times, and you want to make assertions about 'all' those calls
you can use *note call_args_list: 42ef.:

     >>> mock = Mock(return_value=None)
     >>> mock(1, 2, 3)
     >>> mock(4, 5, 6)
     >>> mock()
     >>> mock.call_args_list
     [call(1, 2, 3), call(4, 5, 6), call()]

The *note call: 1b45. helper makes it easy to make assertions about
these calls.  You can build up a list of expected calls and compare it
to ‘call_args_list’.  This looks remarkably similar to the repr of the
‘call_args_list’:

     >>> expected = [call(1, 2, 3), call(4, 5, 6), call()]
     >>> mock.call_args_list == expected
     True


File: python.info,  Node: Coping with mutable arguments,  Next: Nesting Patches,  Prev: Checking multiple calls with mock,  Up: Further Examples

5.26.7.22 Coping with mutable arguments
.......................................

Another situation is rare, but can bite you, is when your mock is called
with mutable arguments.  ‘call_args’ and ‘call_args_list’ store
'references' to the arguments.  If the arguments are mutated by the code
under test then you can no longer make assertions about what the values
were when the mock was called.

Here’s some example code that shows the problem.  Imagine the following
functions defined in ‘mymodule’:

     def frob(val):
         pass

     def grob(val):
         "First frob and then clear val"
         frob(val)
         val.clear()

When we try to test that ‘grob’ calls ‘frob’ with the correct argument
look what happens:

     >>> with patch('mymodule.frob') as mock_frob:
     ...     val = {6}
     ...     mymodule.grob(val)
     ...
     >>> val
     set()
     >>> mock_frob.assert_called_with({6})
     Traceback (most recent call last):
         ...
     AssertionError: Expected: (({6},), {})
     Called with: ((set(),), {})

One possibility would be for mock to copy the arguments you pass in.
This could then cause problems if you do assertions that rely on object
identity for equality.

Here’s one solution that uses the *note side_effect: 42dc.
functionality.  If you provide a ‘side_effect’ function for a mock then
‘side_effect’ will be called with the same args as the mock.  This gives
us an opportunity to copy the arguments and store them for later
assertions.  In this example I’m using 'another' mock to store the
arguments so that I can use the mock methods for doing the assertion.
Again a helper function sets this up for me.

     >>> from copy import deepcopy
     >>> from unittest.mock import Mock, patch, DEFAULT
     >>> def copy_call_args(mock):
     ...     new_mock = Mock()
     ...     def side_effect(*args, **kwargs):
     ...         args = deepcopy(args)
     ...         kwargs = deepcopy(kwargs)
     ...         new_mock(*args, **kwargs)
     ...         return DEFAULT
     ...     mock.side_effect = side_effect
     ...     return new_mock
     ...
     >>> with patch('mymodule.frob') as mock_frob:
     ...     new_mock = copy_call_args(mock_frob)
     ...     val = {6}
     ...     mymodule.grob(val)
     ...
     >>> new_mock.assert_called_with({6})
     >>> new_mock.call_args
     call({6})

‘copy_call_args’ is called with the mock that will be called.  It
returns a new mock that we do the assertion on.  The ‘side_effect’
function makes a copy of the args and calls our ‘new_mock’ with the
copy.

     Nota: If your mock is only going to be used once there is an easier
     way of checking arguments at the point they are called.  You can
     simply do the checking inside a ‘side_effect’ function.

          >>> def side_effect(arg):
          ...     assert arg == {6}
          ...
          >>> mock = Mock(side_effect=side_effect)
          >>> mock({6})
          >>> mock(set())
          Traceback (most recent call last):
              ...
          AssertionError

An alternative approach is to create a subclass of *note Mock: a54. or
*note MagicMock: ebe. that copies (using *note copy.deepcopy(): b84.)
the arguments.  Here’s an example implementation:

     >>> from copy import deepcopy
     >>> class CopyingMock(MagicMock):
     ...     def __call__(self, /, *args, **kwargs):
     ...         args = deepcopy(args)
     ...         kwargs = deepcopy(kwargs)
     ...         return super().__call__(*args, **kwargs)
     ...
     >>> c = CopyingMock(return_value=None)
     >>> arg = set()
     >>> c(arg)
     >>> arg.add(1)
     >>> c.assert_called_with(set())
     >>> c.assert_called_with(arg)
     Traceback (most recent call last):
         ...
     AssertionError: expected call not found.
     Expected: mock({1})
     Actual: mock(set())
     >>> c.foo
     <CopyingMock name='mock.foo' id='...'>

When you subclass ‘Mock’ or ‘MagicMock’ all dynamically created
attributes, and the ‘return_value’ will use your subclass automatically.
That means all children of a ‘CopyingMock’ will also have the type
‘CopyingMock’.


File: python.info,  Node: Nesting Patches,  Next: Mocking a dictionary with MagicMock,  Prev: Coping with mutable arguments,  Up: Further Examples

5.26.7.23 Nesting Patches
.........................

Using patch as a context manager is nice, but if you do multiple patches
you can end up with nested with statements indenting further and further
to the right:

     >>> class MyTest(unittest.TestCase):
     ...
     ...     def test_foo(self):
     ...         with patch('mymodule.Foo') as mock_foo:
     ...             with patch('mymodule.Bar') as mock_bar:
     ...                 with patch('mymodule.Spam') as mock_spam:
     ...                     assert mymodule.Foo is mock_foo
     ...                     assert mymodule.Bar is mock_bar
     ...                     assert mymodule.Spam is mock_spam
     ...
     >>> original = mymodule.Foo
     >>> MyTest('test_foo').test_foo()
     >>> assert mymodule.Foo is original

With unittest ‘cleanup’ functions and the *note métodos do patch; start
e stop: 430f. we can achieve the same effect without the nested
indentation.  A simple helper method, ‘create_patch’, puts the patch in
place and returns the created mock for us:

     >>> class MyTest(unittest.TestCase):
     ...
     ...     def create_patch(self, name):
     ...         patcher = patch(name)
     ...         thing = patcher.start()
     ...         self.addCleanup(patcher.stop)
     ...         return thing
     ...
     ...     def test_foo(self):
     ...         mock_foo = self.create_patch('mymodule.Foo')
     ...         mock_bar = self.create_patch('mymodule.Bar')
     ...         mock_spam = self.create_patch('mymodule.Spam')
     ...
     ...         assert mymodule.Foo is mock_foo
     ...         assert mymodule.Bar is mock_bar
     ...         assert mymodule.Spam is mock_spam
     ...
     >>> original = mymodule.Foo
     >>> MyTest('test_foo').run()
     >>> assert mymodule.Foo is original


File: python.info,  Node: Mocking a dictionary with MagicMock,  Next: Mock subclasses and their attributes,  Prev: Nesting Patches,  Up: Further Examples

5.26.7.24 Mocking a dictionary with MagicMock
.............................................

You may want to mock a dictionary, or other container object, recording
all access to it whilst having it still behave like a dictionary.

We can do this with *note MagicMock: ebe, which will behave like a
dictionary, and using *note side_effect: 42dc. to delegate dictionary
access to a real underlying dictionary that is under our control.

When the *note __getitem__(): 283. and *note __setitem__(): 130e.
methods of our ‘MagicMock’ are called (normal dictionary access) then
‘side_effect’ is called with the key (and in the case of ‘__setitem__’
the value too).  We can also control what is returned.

After the ‘MagicMock’ has been used we can use attributes like *note
call_args_list: 42ef. to assert about how the dictionary was used:

     >>> my_dict = {'a': 1, 'b': 2, 'c': 3}
     >>> def getitem(name):
     ...      return my_dict[name]
     ...
     >>> def setitem(name, val):
     ...     my_dict[name] = val
     ...
     >>> mock = MagicMock()
     >>> mock.__getitem__.side_effect = getitem
     >>> mock.__setitem__.side_effect = setitem

     Nota: An alternative to using ‘MagicMock’ is to use ‘Mock’ and
     'only' provide the magic methods you specifically want:

          >>> mock = Mock()
          >>> mock.__getitem__ = Mock(side_effect=getitem)
          >>> mock.__setitem__ = Mock(side_effect=setitem)

     A 'third' option is to use ‘MagicMock’ but passing in ‘dict’ as the
     'spec' (or 'spec_set') argument so that the ‘MagicMock’ created
     only has dictionary magic methods available:

          >>> mock = MagicMock(spec_set=dict)
          >>> mock.__getitem__.side_effect = getitem
          >>> mock.__setitem__.side_effect = setitem

With these side effect functions in place, the ‘mock’ will behave like a
normal dictionary but recording the access.  It even raises a *note
KeyError: 344. if you try to access a key that doesn’t exist.

     >>> mock['a']
     1
     >>> mock['c']
     3
     >>> mock['d']
     Traceback (most recent call last):
         ...
     KeyError: 'd'
     >>> mock['b'] = 'fish'
     >>> mock['d'] = 'eggs'
     >>> mock['b']
     'fish'
     >>> mock['d']
     'eggs'

After it has been used you can make assertions about the access using
the normal mock methods and attributes:

     >>> mock.__getitem__.call_args_list
     [call('a'), call('c'), call('d'), call('b'), call('d')]
     >>> mock.__setitem__.call_args_list
     [call('b', 'fish'), call('d', 'eggs')]
     >>> my_dict
     {'a': 1, 'b': 'fish', 'c': 3, 'd': 'eggs'}


File: python.info,  Node: Mock subclasses and their attributes,  Next: Mocking imports with patch dict,  Prev: Mocking a dictionary with MagicMock,  Up: Further Examples

5.26.7.25 Mock subclasses and their attributes
..............................................

There are various reasons why you might want to subclass *note Mock:
a54.  One reason might be to add helper methods.  Here’s a silly
example:

     >>> class MyMock(MagicMock):
     ...     def has_been_called(self):
     ...         return self.called
     ...
     >>> mymock = MyMock(return_value=None)
     >>> mymock
     <MyMock id='...'>
     >>> mymock.has_been_called()
     False
     >>> mymock()
     >>> mymock.has_been_called()
     True

The standard behaviour for ‘Mock’ instances is that attributes and the
return value mocks are of the same type as the mock they are accessed
on.  This ensures that ‘Mock’ attributes are ‘Mocks’ and ‘MagicMock’
attributes are ‘MagicMocks’ (1).  So if you’re subclassing to add helper
methods then they’ll also be available on the attributes and return
value mock of instances of your subclass.

     >>> mymock.foo
     <MyMock name='mock.foo' id='...'>
     >>> mymock.foo.has_been_called()
     False
     >>> mymock.foo()
     <MyMock name='mock.foo()' id='...'>
     >>> mymock.foo.has_been_called()
     True

Sometimes this is inconvenient.  For example, one user(2) is subclassing
mock to created a Twisted adaptor(3).  Having this applied to attributes
too actually causes errors.

‘Mock’ (in all its flavours) uses a method called ‘_get_child_mock’ to
create these “sub-mocks” for attributes and return values.  You can
prevent your subclass being used for attributes by overriding this
method.  The signature is that it takes arbitrary keyword arguments
(‘**kwargs’) which are then passed onto the mock constructor:

     >>> class Subclass(MagicMock):
     ...     def _get_child_mock(self, /, **kwargs):
     ...         return MagicMock(**kwargs)
     ...
     >>> mymock = Subclass()
     >>> mymock.foo
     <MagicMock name='mock.foo' id='...'>
     >>> assert isinstance(mymock, Subclass)
     >>> assert not isinstance(mymock.foo, Subclass)
     >>> assert not isinstance(mymock(), Subclass)

   ---------- Footnotes ----------

   (1) An exception to this rule are the non-callable mocks.  Attributes
use the callable variant because otherwise non-callable mocks couldn’t
have callable methods.

   (2) https://code.google.com/archive/p/mock/issues/105

   (3) 
https://twisted.org/documents/11.0.0/api/twisted.python.components.html


File: python.info,  Node: Mocking imports with patch dict,  Next: Tracking order of calls and less verbose call assertions,  Prev: Mock subclasses and their attributes,  Up: Further Examples

5.26.7.26 Mocking imports with patch.dict
.........................................

One situation where mocking can be hard is where you have a local import
inside a function.  These are harder to mock because they aren’t using
an object from the module namespace that we can patch out.

Generally local imports are to be avoided.  They are sometimes done to
prevent circular dependencies, for which there is 'usually' a much
better way to solve the problem (refactor the code) or to prevent “up
front costs” by delaying the import.  This can also be solved in better
ways than an unconditional local import (store the module as a class or
module attribute and only do the import on first use).

That aside there is a way to use ‘mock’ to affect the results of an
import.  Importing fetches an 'object' from the *note sys.modules: 1636.
dictionary.  Note that it fetches an 'object', which need not be a
module.  Importing a module for the first time results in a module
object being put in ‘sys.modules’, so usually when you import something
you get a module back.  This need not be the case however.

This means you can use *note patch.dict(): 1b6a. to 'temporarily' put a
mock in place in *note sys.modules: 1636.  Any imports whilst this patch
is active will fetch the mock.  When the patch is complete (the
decorated function exits, the with statement body is complete or
‘patcher.stop()’ is called) then whatever was there previously will be
restored safely.

Here’s an example that mocks out the ‘fooble’ module.

     >>> import sys
     >>> mock = Mock()
     >>> with patch.dict('sys.modules', {'fooble': mock}):
     ...    import fooble
     ...    fooble.blob()
     ...
     <Mock name='mock.blob()' id='...'>
     >>> assert 'fooble' not in sys.modules
     >>> mock.blob.assert_called_once_with()

As you can see the ‘import fooble’ succeeds, but on exit there is no
‘fooble’ left in *note sys.modules: 1636.

This also works for the ‘from module import name’ form:

     >>> mock = Mock()
     >>> with patch.dict('sys.modules', {'fooble': mock}):
     ...    from fooble import blob
     ...    blob.blip()
     ...
     <Mock name='mock.blob.blip()' id='...'>
     >>> mock.blob.blip.assert_called_once_with()

With slightly more work you can also mock package imports:

     >>> mock = Mock()
     >>> modules = {'package': mock, 'package.module': mock.module}
     >>> with patch.dict('sys.modules', modules):
     ...    from package.module import fooble
     ...    fooble()
     ...
     <Mock name='mock.module.fooble()' id='...'>
     >>> mock.module.fooble.assert_called_once_with()


File: python.info,  Node: Tracking order of calls and less verbose call assertions,  Next: More complex argument matching,  Prev: Mocking imports with patch dict,  Up: Further Examples

5.26.7.27 Tracking order of calls and less verbose call assertions
..................................................................

The *note Mock: a54. class allows you to track the 'order' of method
calls on your mock objects through the *note method_calls: 42ea.
attribute.  This doesn’t allow you to track the order of calls between
separate mock objects, however we can use *note mock_calls: 42e8. to
achieve the same effect.

Because mocks track calls to child mocks in ‘mock_calls’, and accessing
an arbitrary attribute of a mock creates a child mock, we can create our
separate mocks from a parent one.  Calls to those child mock will then
all be recorded, in order, in the ‘mock_calls’ of the parent:

     >>> manager = Mock()
     >>> mock_foo = manager.foo
     >>> mock_bar = manager.bar

     >>> mock_foo.something()
     <Mock name='mock.foo.something()' id='...'>
     >>> mock_bar.other.thing()
     <Mock name='mock.bar.other.thing()' id='...'>

     >>> manager.mock_calls
     [call.foo.something(), call.bar.other.thing()]

We can then assert about the calls, including the order, by comparing
with the ‘mock_calls’ attribute on the manager mock:

     >>> expected_calls = [call.foo.something(), call.bar.other.thing()]
     >>> manager.mock_calls == expected_calls
     True

If ‘patch’ is creating, and putting in place, your mocks then you can
attach them to a manager mock using the *note attach_mock(): 16fa.
method.  After attaching calls will be recorded in ‘mock_calls’ of the
manager.

     >>> manager = MagicMock()
     >>> with patch('mymodule.Class1') as MockClass1:
     ...     with patch('mymodule.Class2') as MockClass2:
     ...         manager.attach_mock(MockClass1, 'MockClass1')
     ...         manager.attach_mock(MockClass2, 'MockClass2')
     ...         MockClass1().foo()
     ...         MockClass2().bar()
     <MagicMock name='mock.MockClass1().foo()' id='...'>
     <MagicMock name='mock.MockClass2().bar()' id='...'>
     >>> manager.mock_calls
     [call.MockClass1(),
     call.MockClass1().foo(),
     call.MockClass2(),
     call.MockClass2().bar()]

If many calls have been made, but you’re only interested in a particular
sequence of them then an alternative is to use the *note
assert_has_calls(): 179d. method.  This takes a list of calls
(constructed with the *note call: 1b45. object).  If that sequence of
calls are in *note mock_calls: 42e8. then the assert succeeds.

     >>> m = MagicMock()
     >>> m().foo().bar().baz()
     <MagicMock name='mock().foo().bar().baz()' id='...'>
     >>> m.one().two().three()
     <MagicMock name='mock.one().two().three()' id='...'>
     >>> calls = call.one().two().three().call_list()
     >>> m.assert_has_calls(calls)

Even though the chained call ‘m.one().two().three()’ aren’t the only
calls that have been made to the mock, the assert still succeeds.

Sometimes a mock may have several calls made to it, and you are only
interested in asserting about 'some' of those calls.  You may not even
care about the order.  In this case you can pass ‘any_order=True’ to
‘assert_has_calls’:

     >>> m = MagicMock()
     >>> m(1), m.two(2, 3), m.seven(7), m.fifty('50')
     (...)
     >>> calls = [call.fifty('50'), call(1), call.seven(7)]
     >>> m.assert_has_calls(calls, any_order=True)


File: python.info,  Node: More complex argument matching,  Prev: Tracking order of calls and less verbose call assertions,  Up: Further Examples

5.26.7.28 More complex argument matching
........................................

Using the same basic concept as *note ANY: 1b43. we can implement
matchers to do more complex assertions on objects used as arguments to
mocks.

Suppose we expect some object to be passed to a mock that by default
compares equal based on object identity (which is the Python default for
user defined classes).  To use *note assert_called_with(): 1b99. we
would need to pass in the exact same object.  If we are only interested
in some of the attributes of this object then we can create a matcher
that will check these attributes for us.

You can see in this example how a ‘standard’ call to
‘assert_called_with’ isn’t sufficient:

     >>> class Foo:
     ...     def __init__(self, a, b):
     ...         self.a, self.b = a, b
     ...
     >>> mock = Mock(return_value=None)
     >>> mock(Foo(1, 2))
     >>> mock.assert_called_with(Foo(1, 2))
     Traceback (most recent call last):
         ...
     AssertionError: expected call not found.
     Expected: mock(<__main__.Foo object at 0x...>)
     Actual: mock(<__main__.Foo object at 0x...>)

A comparison function for our ‘Foo’ class might look something like
this:

     >>> def compare(self, other):
     ...     if not type(self) == type(other):
     ...         return False
     ...     if self.a != other.a:
     ...         return False
     ...     if self.b != other.b:
     ...         return False
     ...     return True
     ...

And a matcher object that can use comparison functions like this for its
equality operation would look something like this:

     >>> class Matcher:
     ...     def __init__(self, compare, some_obj):
     ...         self.compare = compare
     ...         self.some_obj = some_obj
     ...     def __eq__(self, other):
     ...         return self.compare(self.some_obj, other)
     ...

Putting all this together:

     >>> match_foo = Matcher(compare, Foo(1, 2))
     >>> mock.assert_called_with(match_foo)

The ‘Matcher’ is instantiated with our compare function and the ‘Foo’
object we want to compare against.  In ‘assert_called_with’ the
‘Matcher’ equality method will be called, which compares the object the
mock was called with against the one we created our matcher with.  If
they match then ‘assert_called_with’ passes, and if they don’t an *note
AssertionError: 6a9. is raised:

     >>> match_wrong = Matcher(compare, Foo(3, 4))
     >>> mock.assert_called_with(match_wrong)
     Traceback (most recent call last):
         ...
     AssertionError: Expected: ((<Matcher object at 0x...>,), {})
     Called with: ((<Foo object at 0x...>,), {})

With a bit of tweaking you could have the comparison function raise the
*note AssertionError: 6a9. directly and provide a more useful failure
message.

As of version 1.5, the Python testing library PyHamcrest(1) provides
similar functionality, that may be useful here, in the form of its
equality matcher (hamcrest.library.integration.match_equality(2)).

   ---------- Footnotes ----------

   (1) https://pyhamcrest.readthedocs.io/

   (2) 
https://pyhamcrest.readthedocs.io/en/release-1.8/integration/#module-hamcrest.library.integration.match_equality


File: python.info,  Node: test — Pacote de Testes de Regressão do Python,  Next: test support — Utilitários para o conjunto de teste do Python,  Prev: unittest mock — primeiros passos,  Up: Ferramentas de Desenvolvimento

5.26.8 ‘test’ — Pacote de Testes de Regressão do Python
-------------------------------------------------------

     Nota: O pacote *note test: e2. é apenas para uso interno do Python.
     O mesmo está sendo documentado para o benefício dos principais
     desenvolvedores do Python.  Qualquer uso deste pacote fora da
     biblioteca padrão do Python é desencorajado, pois, o código
     mencionado aqui pode ser alterado ou removido sem aviso prévio
     entre as versões do Python.

__________________________________________________________________

O pacote *note test: e2. contém todos os testes de regressão do Python,
bem como os módulos *note test.support: e4. e *note test.regrtest: e3.
*note test.support: e4. é utilizado para aprimorar seus testes enquanto
o *note test.regrtest: e3. direciona a suite de testes.

Cada módulo no pacote *note test: e2. cujo nome começa com ‘test_’ é um
conjunto de testes para um módulo ou recurso específico.  Todos os novos
testes devem ser escritos usando o módulo *note unittest: 106. ou *note
doctest: 3a.  Alguns testes mais antigos são escritos usando um estilo
de teste “tradicional” que compara a saída impressa a ‘sys.stdout’.
Este estilo de teste foi considerado descontinuado.

Ver também
..........

Módulo *note unittest: 106.

     Escrevendo testes de regressão PyUnit.

Módulo *note doctest: 3a.

     Testes embutidos em Strings da documentação.

* Menu:

* Escrever testes unitários para o pacote test::
* Executando testes usando a interface de linha de comando::


File: python.info,  Node: Escrever testes unitários para o pacote test,  Next: Executando testes usando a interface de linha de comando,  Up: test — Pacote de Testes de Regressão do Python

5.26.8.1 Escrever testes unitários para o pacote ‘test’
.......................................................

É preferível que os testes que usam o módulo *note unittest: 106. sigam
algumas diretrizes.  Uma é nomear o módulo de teste iniciando-o com
‘test_’ e termine com o nome do módulo que está sendo testado.  Os
métodos de teste no módulo de teste deve começar com ‘test_’ e terminar
com uma descrição do que o método está testando.  Isso é necessário para
que os métodos sejam reconhecidos pelo driver de teste como métodos de
teste.  Além disso, na string de documentação para o método deve ser
incluído.  Um comentário (como os ‘# Tests function returns only True or
False’) deve ser usado para fornecer documentação para testar métodos.
Isso é feito porque as strings de documentação são impressas se existem
e, portanto, qual teste está sendo executado não é indicado.

Um boilerplate básico é muitas vezes usado:

     import unittest
     from test import support

     class MyTestCase1(unittest.TestCase):

         # Só use setUp() e tearDown() se necessário

         def setUp(self):
             ... código para executar na preparação de testes ...

         def tearDown(self):
             ... código para executar a limpeza após os testes ...

         def test_feature_one(self):
             # Testa o recurso um.
             ... código de teste ...

         def test_feature_two(self):
             # Testa o recurso dois.
             ... código de teste ...

         ... mais métodos de teste ...

     class MyTestCase2(unittest.TestCase):
         ... mesma estrutura que MyTestCase1 ...

     ... mais classes de teste ...

     if __name__ == '__main__':
         unittest.main()

Este padrão de código permite que o conjunto de testes seja executado
pelo *note test.regrtest: e3, por conta própria, como um script que
suporte o *note unittest: 106. CLI, ou através do ‘python -m unittest’
CLI.

O objetivo do teste de regressão é tentar quebrar o código.  Isso leva a
algumas diretrizes que devemos seguir:

   * O conjunto de testes deve exercitar todas as classes, funções e
     constantes.  Isso inclui não apenas a API externa que deve ser
     apresentada ao mundo exterior, mas também o código “privado”.

   * Os testes de Whitebox (que examinam o código que está sendo testado
     quando os testes estão sendo gravados) são preferidos.  O teste
     Blackbox (que testa apenas a interface do público de usuário) não é
     completo o suficiente para garantir que todos os casos de limite e
     extremos sejam testados.

   * Certifique-se de que todos os valores possíveis sejam testados,
     incluindo os inválidos.  Isso garante que não apenas todos os
     valores válidos são aceitos, mas também, que os valores impróprios
     são tratados corretamente.

   * Esgote o maior número possível de caminhos de código.  Teste onde
     ocorre a ramificação e, assim, personalize a entrada para garantir
     que tantos caminhos diferentes pelo código sejam tomados.

   * Adicione um teste explícito para quaisquer bugs descobertos ao
     código testado.  Isso garantirá que o erro não apareça novamente se
     o código for alterado no futuro.

   * Certifique-se de limpar após seus testes (como fechar e remover
     todos os arquivos temporários).

   * Se um teste depende de uma condição específica do sistema
     operacional, então verifica se a condição já existe antes de tentar
     o teste.

   * Importa o menor número de módulos possível e faça isso o mais
     rápido possível.  Isso minimiza dependências externas de testes, e
     também minimiza possíveis comportamento anômalo dos efeitos
     colaterais da importação de um módulo.

   * Tente maximizar a reutilização de código.  Ocasionalmente, os
     testes variam em algo tão pequeno quanto o tipo de entrada é usado.
     Minimize a duplicação de código criando uma subclasse básica de
     testes com uma classe que especifica o input:

          class TestFuncAcceptsSequencesMixin:

              func = mySuperWhammyFunction

              def test_func(self):
                  self.func(self.arg)

          class AcceptLists(TestFuncAcceptsSequencesMixin, unittest.TestCase):
              arg = [1, 2, 3]

          class AcceptStrings(TestFuncAcceptsSequencesMixin, unittest.TestCase):
              arg = 'abc'

          class AcceptTuples(TestFuncAcceptsSequencesMixin, unittest.TestCase):
              arg = (1, 2, 3)

     Ao usar este padrão, lembre-se que todas as classes que herdam de
     *note unittest.TestCase: 44f. são executadas como testes.  A classe
     ‘TestFuncAcceptsSequencesMixin’ no exemplo acima não tem nenhum
     dado e, portanto, não pode ser executada sozinha, portanto, ela não
     herda de *note unittest.TestCase: 44f.

Ver também
..........

Test Driven Development

     Um livro de Kent Beck sobre escrita de testes antes do código.


File: python.info,  Node: Executando testes usando a interface de linha de comando,  Prev: Escrever testes unitários para o pacote test,  Up: test — Pacote de Testes de Regressão do Python

5.26.8.2 Executando testes usando a interface de linha de comando
.................................................................

O pacote *note test: e2. pode ser executado como um script para conduzir
o conjunto de testes de regressão do Python, graças à opção *note -m:
5e1.: ‘python -m test’.  Nos bastidores, ele usa *note test.regrtest:
e3.; a chamada ‘python -m test.regrtest’ usado nas versões anteriores do
Python ainda funciona.  Executar o script por si só começa a executar
todos os testes de regressão no pacote *note test: e2.  Ele faz isso
encontrando todos os módulos no pacote cujo nome começa com ‘test_’,
importando-os e executando a função ‘test_main()’ se presente ou
carregando os testes via unittest.TestLoader.loadTestsFromModule se
‘test_main’ não existir.  Os nomes dos testes a serem executados também
podem ser passados para o script.  Especificando um teste de regressão
simples (‘python -m test test_spam’) minimizará saiba e imprima apenas
se o teste passou ou falhou.

A execução de *note test: e2. permite definir diretamente quais recursos
estão disponíveis para os testes usarem.  Você faz isso usando a opção
de linha de comando ‘-u’.  Especificar ‘all’ como o valor para a opção
‘-u’ ativa todos os recursos possíveis: ‘python -m test -uall’.  Se
todos menos um recurso for desejado (um caso mais comum), uma lista
separada por vírgulas de recursos que não são desejados pode ser listada
após ‘all’.  O comando ‘python -m test -uall,-audio,-largefile’
executará *note test: e2. com todos os recursos, exceto os recursos
‘audio’ e ‘largefile’.  Para obter uma lista de todos os recursos e mais
opções de linha de comando, execute ‘python -m test -h’.

Alguns outros meios para executar os testes de regressão dependem em
qual plataforma os testes estão sendo executados.  No Unix, você pode
executar: programa: ‘ make test’ no diretório de mais alto nível onde o
Python foi construído.  No Windows, executar: programa ‘rt.bat’ do seu
diretório: file: ‘PCbuild’ executará todos os testes de regressão.


File: python.info,  Node: test support — Utilitários para o conjunto de teste do Python,  Next: test support socket_helper — Utilities for socket tests,  Prev: test — Pacote de Testes de Regressão do Python,  Up: Ferramentas de Desenvolvimento

5.26.9 ‘test.support’ — Utilitários para o conjunto de teste do Python
----------------------------------------------------------------------

O módulo *note test.support: e4. fornece suporte para a suíte de testes
de regressão do Python.

     Nota: *note test.support: e4. is not a public module.  It is
     documented here to help Python developers write tests.  The API of
     this module is subject to change without backwards compatibility
     concerns between releases.

Esse módulo define as seguintes exceções:

 -- Exceção: test.support.TestFailed

     Exceção a ser levantada quando um teste falha.  Isto foi
     descontinuado em favor dos testes baseados em *note unittest: 106.
     e métodos de asserção de *note unittest.TestCase: 44f.

 -- Exceção: test.support.ResourceDenied

     Subclasse de *note unittest.SkipTest: 101a.  Levantada quando um
     recurso (como uma conexão de rede) não está disponível.  Levantada
     pela função *note requires(): 4350.

O módulo *note test.support: e4. define as seguintes constantes:

 -- Dado: test.support.verbose

     ‘True’ quando a saída detalhada está habilitada.  Deve ser
     verificado quando informações mais detalhadas são desejadas sobre
     um teste em execução.  'verbose' é definido por *note
     test.regrtest: e3.

 -- Dado: test.support.is_jython

     ‘True’ se o interpretador em execução for Jython.

 -- Dado: test.support.is_android

     ‘True’ se o sistema é Android.

 -- Dado: test.support.unix_shell

     Caminho para o console se não estiver no Windows; por outro lado
     ‘None’

 -- Dado: test.support.LOOPBACK_TIMEOUT

     Tempo limite em segundos para testes usando um servidor de rede
     escutando na interface de loopback local da rede como ‘127.0.0.1’.

     O tempo limite é longo o suficiente para evitar a falha do teste:
     leva em consideração que o cliente e o servidor podem ser
     executados em diferentes threads ou mesmo processos diferentes.

     O tempo limite deve ser longo o suficiente para os métodos *note
     connect(): dcb, *note recv(): dcc. e *note send(): dcf. de *note
     socket.socket: dc9.

     Seu valor padrão é 5 segundos.

     Veja também *note INTERNET_TIMEOUT: 1b2c.

 -- Dado: test.support.INTERNET_TIMEOUT

     Tempo limite em segundos para solicitações de rede indo para a
     Internet.

     O tempo limite é curto o suficiente para evitar que um teste espere
     muito tempo se a requisição da Internet for bloqueada por qualquer
     motivo.

     Normalmente, um tempo limite usando *note INTERNET_TIMEOUT: 1b2c.
     não deve marcar um teste como falhado, mas ignorá-lo: veja *note
     transient_internet(): 4355.

     Seu valor padrão é 1 minuto.

     Veja também *note LOOPBACK_TIMEOUT: 1b2b.

 -- Dado: test.support.SHORT_TIMEOUT

     Tempo limite em segundos para marcar um teste como falho se o teste
     demorar “muito tempo”.

     O valor do tempo limite depende da opção da linha de comando
     regrtest ‘--timeout’.

     Se um teste usando *note SHORT_TIMEOUT: 19ee. começar a falhar
     aleatoriamente em buildbots lentos, use *note LONG_TIMEOUT: 1b2d.

     Seu valor padrão é 30 segundos.

 -- Dado: test.support.LONG_TIMEOUT

     Tempo limite em segundos para detectar quando um teste trava.

     É longo o suficiente para reduzir o risco de falha de teste nos
     buildbots Python mais lentos.  Não deve ser usado para marcar um
     teste como reprovado se o teste demorar “muito tempo”.  O valor do
     tempo limite depende da opção de linha de comando regrtest
     ‘--timeout’.

     Seu valor padrão é 5 minutos.

     Veja também *note LOOPBACK_TIMEOUT: 1b2b, *note INTERNET_TIMEOUT:
     1b2c. e *note SHORT_TIMEOUT: 19ee.

 -- Dado: test.support.PGO

     Definido quando os testes podem ser ignorados quando não são úteis
     para PGO.

 -- Dado: test.support.PIPE_MAX_SIZE

     Uma constante que provavelmente é maior que o tamanho do buffer de
     canal do sistema operacional subjacente, para fazer o bloqueio de
     escritas.

 -- Dado: test.support.Py_DEBUG

     ‘True’ se o Python foi criado com a macro *note Py_DEBUG: 4359.
     definida, ou seja, se o Python foi *note criado no modo de
     depuração: 1f9.

     Adicionado na versão 3.12.

 -- Dado: test.support.SOCK_MAX_SIZE

     Uma constante que provavelmente é maior que o tamanho do buffer de
     soquete do sistema operacional subjacente, para fazer o bloqueio de
     escritas.

 -- Dado: test.support.TEST_SUPPORT_DIR

     Define o diretório de mais alto nível que contém *note
     test.support: e4.

 -- Dado: test.support.TEST_HOME_DIR

     Define o diretório de mais alto nível para o pacote de teste.

 -- Dado: test.support.TEST_DATA_DIR

     Define o diretório ‘data’ de dentro do pacote de teste.

 -- Dado: test.support.MAX_Py_ssize_t

     Define *note sys.maxsize: 1205. para grandes testes de memória.

 -- Dado: test.support.max_memuse

     Set by *note set_memlimit(): 4360. as the memory limit for big
     memory tests.  Limited by *note MAX_Py_ssize_t: 435e.

 -- Dado: test.support.real_max_memuse

     Set by *note set_memlimit(): 4360. as the memory limit for big
     memory tests.  Not limited by *note MAX_Py_ssize_t: 435e.

 -- Dado: test.support.MISSING_C_DOCSTRINGS

     Set to ‘True’ if Python is built without docstrings (the
     ‘WITH_DOC_STRINGS’ macro is not defined).  See the *note configure
     -without-doc-strings: 1f37. option.

     See also the *note HAVE_DOCSTRINGS: 4363. variable.

 -- Dado: test.support.HAVE_DOCSTRINGS

     Set to ‘True’ if function docstrings are available.  See the *note
     python -OO: ddd. option, which strips docstrings of functions
     implemented in Python.

     See also the *note MISSING_C_DOCSTRINGS: 4362. variable.

 -- Dado: test.support.TEST_HTTP_URL

     Define the URL of a dedicated HTTP server for the network tests.

 -- Dado: test.support.ALWAYS_EQ

     Object that is equal to anything.  Used to test mixed type
     comparison.

 -- Dado: test.support.NEVER_EQ

     Object that is not equal to anything (even to *note ALWAYS_EQ:
     4365.).  Used to test mixed type comparison.

 -- Dado: test.support.LARGEST

     Object that is greater than anything (except itself).  Used to test
     mixed type comparison.

 -- Dado: test.support.SMALLEST

     Object that is less than anything (except itself).  Used to test
     mixed type comparison.

O módulo *note test.support: e4. define as seguintes funções:

 -- Função: test.support.busy_retry (timeout, err_msg=None, /, *,
          error=True)

     Run the loop body until ‘break’ stops the loop.

     After 'timeout' seconds, raise an *note AssertionError: 6a9. if
     'error' is true, or just stop the loop if 'error' is false.

     Exemplo:

          for _ in support.busy_retry(support.SHORT_TIMEOUT):
              if check():
                  break

     Example of error=False usage:

          for _ in support.busy_retry(support.SHORT_TIMEOUT, error=False):
              if check():
                  break
          else:
              raise RuntimeError('my custom error')

 -- Função: test.support.sleeping_retry (timeout, err_msg=None, /, *,
          init_delay=0.010, max_delay=1.0, error=True)

     Wait strategy that applies exponential backoff.

     Run the loop body until ‘break’ stops the loop.  Sleep at each loop
     iteration, but not at the first iteration.  The sleep delay is
     doubled at each iteration (up to 'max_delay' seconds).

     See *note busy_retry(): 4369. documentation for the parameters
     usage.

     Example raising an exception after SHORT_TIMEOUT seconds:

          for _ in support.sleeping_retry(support.SHORT_TIMEOUT):
              if check():
                  break

     Example of error=False usage:

          for _ in support.sleeping_retry(support.SHORT_TIMEOUT, error=False):
              if check():
                  break
          else:
              raise RuntimeError('my custom error')

 -- Função: test.support.is_resource_enabled (resource)

     Return ‘True’ if 'resource' is enabled and available.  The list of
     available resources is only set when *note test.regrtest: e3. is
     executing the tests.

 -- Função: test.support.get_resource_value (resource)

     Return the value specified for 'resource' (as ‘-u RESOURCE=VALUE’).
     Return ‘None’ if 'resource' is disabled or no value is specified.

 -- Função: test.support.python_is_optimized ()

     Return ‘True’ if Python was not built with ‘-O0’ or ‘-Og’.

 -- Função: test.support.with_pymalloc ()

     Return ‘_testcapi.WITH_PYMALLOC’.

 -- Função: test.support.requires (resource, msg=None)

     Raise *note ResourceDenied: 434f. if 'resource' is not available.
     'msg' is the argument to *note ResourceDenied: 434f. if it is
     raised.  Always returns ‘True’ if called by a function whose
     ‘__name__’ is ‘'__main__'’.  Used when tests are executed by *note
     test.regrtest: e3.

 -- Função: test.support.sortdict (dict)

     Return a repr of 'dict' with keys sorted.

 -- Função: test.support.findfile (filename, subdir=None)

     Return the path to the file named 'filename'.  If no match is found
     'filename' is returned.  This does not equal a failure since it
     could be the path to the file.

     Setting 'subdir' indicates a relative path to use to find the file
     rather than looking directly in the path directories.

 -- Função: test.support.get_pagesize ()

     Get size of a page in bytes.

     Adicionado na versão 3.12.

 -- Função: test.support.setswitchinterval (interval)

     Set the *note sys.setswitchinterval(): 951. to the given
     'interval'.  Defines a minimum interval for Android systems to
     prevent the system from hanging.

 -- Função: test.support.check_impl_detail (**guards)

     Use this check to guard CPython’s implementation-specific tests or
     to run them only on the implementations guarded by the arguments.
     This function returns ‘True’ or ‘False’ depending on the host
     platform.  Example usage:

          check_impl_detail()               # Only on CPython (default).
          check_impl_detail(jython=True)    # Only on Jython.
          check_impl_detail(cpython=False)  # Everywhere except CPython.

 -- Função: test.support.set_memlimit (limit)

     Define os valores para *note max_memuse: 435f. e *note
     real_max_memuse: 4361. para grandes testes de memória.

 -- Função: test.support.record_original_stdout (stdout)

     Armazena o valor de 'stdout'.  Destina-se a manter o stdout no
     momento em que o registro começou.

 -- Função: test.support.get_original_stdout ()

     Retorna o stdout original definido por *note
     record_original_stdout(): 4374. ou ‘sys.stdout’ se não estiver
     definido.

 -- Função: test.support.args_from_interpreter_flags ()

     Retorna uma lista de argumentos de linha de comando reproduzindo as
     configurações em ‘sys.flags’ e ‘sys.warnoptions’.

 -- Função: test.support.optim_args_from_interpreter_flags ()

     Retorna a lista de argumentos da linha de comando reproduzindo as
     configurações de otimização atuais em ‘sys.flags’.

 -- Função: test.support.captured_stdin ()
 -- Função: test.support.captured_stdout ()
 -- Função: test.support.captured_stderr ()

     Um gerenciador de contexto que substitui temporariamente o fluxo
     nomeado pelo objeto *note io.StringIO: f59.

     Exemplo do uso com fluxos de saída:

          with captured_stdout() as stdout, captured_stderr() as stderr:
              print("hello")
              print("error", file=sys.stderr)
          assert stdout.getvalue() == "hello\n"
          assert stderr.getvalue() == "error\n"

     Exemplo de uso com fluxo de entrada:

          with captured_stdin() as stdin:
              stdin.write('hello\n')
              stdin.seek(0)
              # call test code that consumes from sys.stdin
              captured = input()
          self.assertEqual(captured, "hello")

 -- Função: test.support.disable_faulthandler ()

     Um gerenciador de contexto que desativa temporariamente *note
     faulthandler: 58.

 -- Função: test.support.gc_collect ()

     Força a coleta de tantos objetos quanto possível.  Isso é
     necessário porque a desalocação oportuna não é garantida pelo
     coletor de lixo.  Isso significa que os métodos ‘__del__’ podem ser
     chamados mais tarde do que o esperado e as referência fraca podem
     permanecer ativas por mais tempo do que o esperado.

 -- Função: test.support.disable_gc ()

     A context manager that disables the garbage collector on entry.  On
     exit, the garbage collector is restored to its prior state.

 -- Função: test.support.swap_attr (obj, attr, new_val)

     Context manager to swap out an attribute with a new object.

     Uso:

          with swap_attr(obj, "attr", 5):
              ...

     This will set ‘obj.attr’ to 5 for the duration of the ‘with’ block,
     restoring the old value at the end of the block.  If ‘attr’ doesn’t
     exist on ‘obj’, it will be created and then deleted at the end of
     the block.

     The old value (or ‘None’ if it doesn’t exist) will be assigned to
     the target of the “as” clause, if there is one.

 -- Função: test.support.swap_item (obj, attr, new_val)

     Context manager to swap out an item with a new object.

     Uso:

          with swap_item(obj, "item", 5):
              ...

     This will set ‘obj["item"]’ to 5 for the duration of the ‘with’
     block, restoring the old value at the end of the block.  If ‘item’
     doesn’t exist on ‘obj’, it will be created and then deleted at the
     end of the block.

     The old value (or ‘None’ if it doesn’t exist) will be assigned to
     the target of the “as” clause, if there is one.

 -- Função: test.support.flush_std_streams ()

     Call the ‘flush()’ method on *note sys.stdout: ae6. and then on
     *note sys.stderr: 940.  It can be used to make sure that the logs
     order is consistent before writing into stderr.

     Adicionado na versão 3.11.

 -- Função: test.support.print_warning (msg)

     Print a warning into *note sys.__stderr__: 4381.  Format the
     message as: ‘f"Warning -- {msg}"’.  If 'msg' is made of multiple
     lines, add ‘"Warning -- "’ prefix to each line.

     Adicionado na versão 3.9.

 -- Função: test.support.wait_process (pid, *, exitcode, timeout=None)

     Wait until process 'pid' completes and check that the process exit
     code is 'exitcode'.

     Raise an *note AssertionError: 6a9. if the process exit code is not
     equal to 'exitcode'.

     If the process runs longer than 'timeout' seconds (*note
     SHORT_TIMEOUT: 19ee. by default), kill the process and raise an
     *note AssertionError: 6a9.  The timeout feature is not available on
     Windows.

     Adicionado na versão 3.9.

 -- Função: test.support.calcobjsize (fmt)

     Return the size of the *note PyObject: 339. whose structure members
     are defined by 'fmt'.  The returned value includes the size of the
     Python object header and alignment.

 -- Função: test.support.calcvobjsize (fmt)

     Return the size of the *note PyVarObject: 4384. whose structure
     members are defined by 'fmt'.  The returned value includes the size
     of the Python object header and alignment.

 -- Função: test.support.checksizeof (test, o, size)

     For testcase 'test', assert that the ‘sys.getsizeof’ for 'o' plus
     the GC header size equals 'size'.

 -- Função: @test.support.anticipate_failure (condition)

     A decorator to conditionally mark tests with *note
     unittest.expectedFailure(): 429a.  Any use of this decorator should
     have an associated comment identifying the relevant tracker issue.

 -- Função: test.support.system_must_validate_cert (f)

     A decorator that skips the decorated test on TLS certification
     validation failures.

 -- Função: @test.support.run_with_locale (catstr, *locales)

     A decorator for running a function in a different locale, correctly
     resetting it after it has finished.  'catstr' is the locale
     category as a string (for example ‘"LC_ALL"’).  The 'locales'
     passed will be tried sequentially, and the first valid locale will
     be used.

 -- Função: @test.support.run_with_tz (tz)

     A decorator for running a function in a specific timezone,
     correctly resetting it after it has finished.

 -- Função: @test.support.requires_freebsd_version (*min_version)

     Decorator for the minimum version when running test on FreeBSD. If
     the FreeBSD version is less than the minimum, the test is skipped.

 -- Função: @test.support.requires_linux_version (*min_version)

     Decorator for the minimum version when running test on Linux.  If
     the Linux version is less than the minimum, the test is skipped.

 -- Função: @test.support.requires_mac_version (*min_version)

     Decorator for the minimum version when running test on macOS. If
     the macOS version is less than the minimum, the test is skipped.

 -- Função: @test.support.requires_gil_enabled

     Decorador para pular testes na construção com threads livres.  Se a
     *note GIL: 159. estiver desabilitada, o teste será ignorado.

 -- Função: @test.support.requires_IEEE_754

     Decorator for skipping tests on non-IEEE 754 platforms.

 -- Função: @test.support.requires_zlib

     Decorator for skipping tests if *note zlib: 133. doesn’t exist.

 -- Função: @test.support.requires_gzip

     Decorator for skipping tests if *note gzip: 67. doesn’t exist.

 -- Função: @test.support.requires_bz2

     Decorator for skipping tests if *note bz2: 13. doesn’t exist.

 -- Função: @test.support.requires_lzma

     Decorator for skipping tests if *note lzma: 8a. doesn’t exist.

 -- Função: @test.support.requires_resource (resource)

     Decorator for skipping tests if 'resource' is not available.

 -- Função: @test.support.requires_docstrings

     Decorator for only running the test if *note HAVE_DOCSTRINGS: 4363.

 -- Função: @test.support.requires_limited_api

     Decorator for only running the test if *note Limited C API: 396. is
     available.

 -- Função: @test.support.cpython_only

     Decorator for tests only applicable to CPython.

 -- Função: @test.support.impl_detail (msg=None, **guards)

     Decorator for invoking *note check_impl_detail(): 4373. on
     'guards'.  If that returns ‘False’, then uses 'msg' as the reason
     for skipping the test.

 -- Função: @test.support.no_tracing

     Decorator to temporarily turn off tracing for the duration of the
     test.

 -- Função: @test.support.refcount_test

     Decorator for tests which involve reference counting.  The
     decorator does not run the test if it is not run by CPython.  Any
     trace function is unset for the duration of the test to prevent
     unexpected refcounts caused by the trace function.

 -- Função: @test.support.bigmemtest (size, memuse, dry_run=True)

     Decorator for bigmem tests.

     'size' is a requested size for the test (in arbitrary,
     test-interpreted units.)  'memuse' is the number of bytes per unit
     for the test, or a good estimate of it.  For example, a test that
     needs two byte buffers, of 4 GiB each, could be decorated with
     ‘@bigmemtest(size=_4G, memuse=2)’.

     The 'size' argument is normally passed to the decorated test method
     as an extra argument.  If 'dry_run' is ‘True’, the value passed to
     the test method may be less than the requested value.  If 'dry_run'
     is ‘False’, it means the test doesn’t support dummy runs when ‘-M’
     is not specified.

 -- Função: @test.support.bigaddrspacetest

     Decorador para testes que preenche o espaço do endereço.

 -- Função: test.support.check_syntax_error (testcase, statement,
          errtext='', *, lineno=None, offset=None)

     Test for syntax errors in 'statement' by attempting to compile
     'statement'.  'testcase' is the *note unittest: 106. instance for
     the test.  'errtext' is the regular expression which should match
     the string representation of the raised *note SyntaxError: 18d.  If
     'lineno' is not ‘None’, compares to the line of the exception.  If
     'offset' is not ‘None’, compares to the offset of the exception.

 -- Função: test.support.open_urlresource (url, *args, **kw)

     Abre 'url'.  Se falhar em abrir, levanta *note TestFailed: 434e.

 -- Função: test.support.reap_children ()

     Use this at the end of ‘test_main’ whenever sub-processes are
     started.  This will help ensure that no extra children (zombies)
     stick around to hog resources and create problems when looking for
     refleaks.

 -- Função: test.support.get_attribute (obj, name)

     Get an attribute, raising *note unittest.SkipTest: 101a. if *note
     AttributeError: 34b. is raised.

 -- Função: test.support.catch_unraisable_exception ()

     Context manager catching unraisable exception using *note
     sys.unraisablehook(): 1f7.

     Storing the exception value (‘cm.unraisable.exc_value’) creates a
     reference cycle.  The reference cycle is broken explicitly when the
     context manager exits.

     Storing the object (‘cm.unraisable.object’) can resurrect it if it
     is set to an object which is being finalized.  Exiting the context
     manager clears the stored object.

     Uso:

          with support.catch_unraisable_exception() as cm:
              # code creating an "unraisable exception"
              ...

              # check the unraisable exception: use cm.unraisable
              ...

          # cm.unraisable attribute no longer exists at this point
          # (to break a reference cycle)

     Adicionado na versão 3.8.

 -- Função: test.support.load_package_tests (pkg_dir, loader,
          standard_tests, pattern)

     Generic implementation of the *note unittest: 106. ‘load_tests’
     protocol for use in test packages.  'pkg_dir' is the root directory
     of the package; 'loader', 'standard_tests', and 'pattern' are the
     arguments expected by ‘load_tests’.  In simple cases, the test
     package’s ‘__init__.py’ can be the following:

          import os
          from test.support import load_package_tests

          def load_tests(*args):
              return load_package_tests(os.path.dirname(__file__), *args)

 -- Função: test.support.detect_api_mismatch (ref_api, other_api, *,
          ignore=())

     Returns the set of attributes, functions or methods of 'ref_api'
     not found on 'other_api', except for a defined list of items to be
     ignored in this check specified in 'ignore'.

     By default this skips private attributes beginning with ‘_’ but
     includes all magic methods, i.e.  those starting and ending in
     ‘__’.

     Adicionado na versão 3.5.

 -- Função: test.support.patch (test_instance, object_to_patch,
          attr_name, new_value)

     Override 'object_to_patch.attr_name' with 'new_value'.  Also add
     cleanup procedure to 'test_instance' to restore 'object_to_patch'
     for 'attr_name'.  The 'attr_name' should be a valid attribute for
     'object_to_patch'.

 -- Função: test.support.run_in_subinterp (code)

     Run 'code' in subinterpreter.  Raise *note unittest.SkipTest: 101a.
     if *note tracemalloc: ff. is enabled.

 -- Função: test.support.check_free_after_iterating (test, iter, cls,
          args=())

     Assert instances of 'cls' are deallocated after iterating.

 -- Função: test.support.missing_compiler_executable (cmd_names=[])

     Check for the existence of the compiler executables whose names are
     listed in 'cmd_names' or all the compiler executables when
     'cmd_names' is empty and return the first missing executable or
     ‘None’ when none is found missing.

 -- Função: test.support.check__all__ (test_case, module,
          name_of_module=None, extra=(), not_exported=())

     Assert that the ‘__all__’ variable of 'module' contains all public
     names.

     The module’s public names (its API) are detected automatically
     based on whether they match the public name convention and were
     defined in 'module'.

     The 'name_of_module' argument can specify (as a string or tuple
     thereof) what module(s) an API could be defined in order to be
     detected as a public API. One case for this is when 'module'
     imports part of its public API from other modules, possibly a C
     backend (like ‘csv’ and its ‘_csv’).

     The 'extra' argument can be a set of names that wouldn’t otherwise
     be automatically detected as “public”, like objects without a
     proper *note __module__: 240c. attribute.  If provided, it will be
     added to the automatically detected ones.

     The 'not_exported' argument can be a set of names that must not be
     treated as part of the public API even though their names indicate
     otherwise.

     Exemplo de uso:

          import bar
          import foo
          import unittest
          from test import support

          class MiscTestCase(unittest.TestCase):
              def test__all__(self):
                  support.check__all__(self, foo)

          class OtherTestCase(unittest.TestCase):
              def test__all__(self):
                  extra = {'BAR_CONST', 'FOO_CONST'}
                  not_exported = {'baz'}  # Undocumented name.
                  # bar imports part of its API from _bar.
                  support.check__all__(self, bar, ('bar', '_bar'),
                                       extra=extra, not_exported=not_exported)

     Adicionado na versão 3.6.

 -- Função: test.support.skip_if_broken_multiprocessing_synchronize ()

     Skip tests if the ‘multiprocessing.synchronize’ module is missing,
     if there is no available semaphore implementation, or if creating a
     lock raises an *note OSError: 417.

     Adicionado na versão 3.10.

 -- Função: test.support.check_disallow_instantiation (test_case, tp,
          *args, **kwds)

     Assert that type 'tp' cannot be instantiated using 'args' and
     'kwds'.

     Adicionado na versão 3.10.

 -- Função: test.support.adjust_int_max_str_digits (max_digits)

     This function returns a context manager that will change the global
     *note sys.set_int_max_str_digits(): 18c5. setting for the duration
     of the context to allow execution of test code that needs a
     different limit on the number of digits when converting between an
     integer and string.

     Adicionado na versão 3.11.

The *note test.support: e4. module defines the following classes:

 -- Classe: test.support.SuppressCrashReport

     A context manager used to try to prevent crash dialog popups on
     tests that are expected to crash a subprocess.

     No Windows, desativa as caixas de diálogo Relatório de Erros do
     Windows usando SetErrorMode
     <‘https://msdn.microsoft.com/en-us/library/windows/desktop/ms680621.aspx’>_.

     On UNIX, *note resource.setrlimit(): 1605. is used to set *note
     resource.RLIMIT_CORE: 43a9.’s soft limit to 0 to prevent coredump
     file creation.

     On both platforms, the old value is restored by *note __exit__():
     1344.

 -- Classe: test.support.SaveSignals

     Class to save and restore signal handlers registered by the Python
     signal handler.

      -- Método: save (self)

          Save the signal handlers to a dictionary mapping signal
          numbers to the current signal handler.

      -- Método: restore (self)

          Set the signal numbers from the *note save(): 43ab. dictionary
          to the saved handler.

 -- Classe: test.support.Matcher

      -- Método: matches (self, d, **kwargs)

          Tenta corresponder um único dicionário com os argumentos
          fornecidos.

      -- Método: match_value (self, k, dv, v)

          Tente combinar um único valor armazenado ('dv') com um valor
          fornecido ('v').


File: python.info,  Node: test support socket_helper — Utilities for socket tests,  Next: test support script_helper — Utilities for the Python execution tests,  Prev: test support — Utilitários para o conjunto de teste do Python,  Up: Ferramentas de Desenvolvimento

5.26.10 ‘test.support.socket_helper’ — Utilities for socket tests
-----------------------------------------------------------------

The *note test.support.socket_helper: e9. module provides support for
socket tests.

Adicionado na versão 3.9.

 -- Dado: test.support.socket_helper.IPV6_ENABLED

     Set to ‘True’ if IPv6 is enabled on this host, ‘False’ otherwise.

 -- Função: test.support.socket_helper.find_unused_port
          (family=socket.AF_INET, socktype=socket.SOCK_STREAM)

     Returns an unused port that should be suitable for binding.  This
     is achieved by creating a temporary socket with the same family and
     type as the ‘sock’ parameter (default is *note AF_INET: 1938, *note
     SOCK_STREAM: 1337.), and binding it to the specified host address
     (defaults to ‘0.0.0.0’) with the port set to 0, eliciting an unused
     ephemeral port from the OS. The temporary socket is then closed and
     deleted, and the ephemeral port is returned.

     Either this method or *note bind_port(): 43b3. should be used for
     any tests where a server socket needs to be bound to a particular
     port for the duration of the test.  Which one to use depends on
     whether the calling code is creating a Python socket, or if an
     unused port needs to be provided in a constructor or passed to an
     external program (i.e.  the ‘-accept’ argument to openssl’s
     s_server mode).  Always prefer *note bind_port(): 43b3. over *note
     find_unused_port(): 43b2. where possible.  Using a hard coded port
     is discouraged since it can make multiple instances of the test
     impossible to run simultaneously, which is a problem for buildbots.

 -- Função: test.support.socket_helper.bind_port (sock, host=HOST)

     Bind the socket to a free port and return the port number.  Relies
     on ephemeral ports in order to ensure we are using an unbound port.
     This is important as many tests may be running simultaneously,
     especially in a buildbot environment.  This method raises an
     exception if the ‘sock.family’ is *note AF_INET: 1938. and
     ‘sock.type’ is *note SOCK_STREAM: 1337, and the socket has
     ‘SO_REUSEADDR’ or ‘SO_REUSEPORT’ set on it.  Tests should never set
     these socket options for TCP/IP sockets.  The only case for setting
     these options is testing multicasting via multiple UDP sockets.

     Additionally, if the ‘SO_EXCLUSIVEADDRUSE’ socket option is
     available (i.e.  on Windows), it will be set on the socket.  This
     will prevent anyone else from binding to our host/port for the
     duration of the test.

 -- Função: test.support.socket_helper.bind_unix_socket (sock, addr)

     Bind a Unix socket, raising *note unittest.SkipTest: 101a. if *note
     PermissionError: d65. is raised.

 -- Função: @test.support.socket_helper.skip_unless_bind_unix_socket

     A decorator for running tests that require a functional ‘bind()’
     for Unix sockets.

 -- Função: test.support.socket_helper.transient_internet
          (resource_name, *, timeout=30.0, errnos=())

     A context manager that raises *note ResourceDenied: 434f. when
     various issues with the internet connection manifest themselves as
     exceptions.


File: python.info,  Node: test support script_helper — Utilities for the Python execution tests,  Next: test support bytecode_helper — Ferramentas de suporte para testar a geração correta de bytecode,  Prev: test support socket_helper — Utilities for socket tests,  Up: Ferramentas de Desenvolvimento

5.26.11 ‘test.support.script_helper’ — Utilities for the Python execution tests
-------------------------------------------------------------------------------

The *note test.support.script_helper: e8. module provides support for
Python’s script execution tests.

 -- Função: test.support.script_helper.interpreter_requires_environment
          ()

     Return ‘True’ if ‘sys.executable interpreter’ requires environment
     variables in order to be able to run at all.

     This is designed to be used with ‘@unittest.skipIf()’ to annotate
     tests that need to use an ‘assert_python*()’ function to launch an
     isolated mode (‘-I’) or no environment mode (‘-E’) sub-interpreter
     process.

     A normal build & test does not run into this situation but it can
     happen when trying to run the standard library test suite from an
     interpreter that doesn’t have an obvious home with Python’s current
     home finding logic.

     Setting *note PYTHONHOME: 3bc. is one way to get most of the
     testsuite to run in that situation.  *note PYTHONPATH: 1053. or
     ‘PYTHONUSERSITE’ are other common environment variables that might
     impact whether or not the interpreter can start.

 -- Função: test.support.script_helper.run_python_until_end (*args,
          **env_vars)

     Set up the environment based on 'env_vars' for running the
     interpreter in a subprocess.  The values can include ‘__isolated’,
     ‘__cleanenv’, ‘__cwd’, and ‘TERM’.

     Alterado na versão 3.9: The function no longer strips whitespaces
     from 'stderr'.

 -- Função: test.support.script_helper.assert_python_ok (*args,
          **env_vars)

     Assert that running the interpreter with 'args' and optional
     environment variables 'env_vars' succeeds (‘rc == 0’) and return a
     ‘(return code, stdout, stderr)’ tuple.

     If the '__cleanenv' keyword-only parameter is set, 'env_vars' is
     used as a fresh environment.

     Python is started in isolated mode (command line option ‘-I’),
     except if the '__isolated' keyword-only parameter is set to
     ‘False’.

     Alterado na versão 3.9: The function no longer strips whitespaces
     from 'stderr'.

 -- Função: test.support.script_helper.assert_python_failure (*args,
          **env_vars)

     Assert that running the interpreter with 'args' and optional
     environment variables 'env_vars' fails (‘rc != 0’) and return a
     ‘(return code, stdout, stderr)’ tuple.

     See *note assert_python_ok(): 43b9. for more options.

     Alterado na versão 3.9: The function no longer strips whitespaces
     from 'stderr'.

 -- Função: test.support.script_helper.spawn_python (*args,
          stdout=subprocess.PIPE, stderr=subprocess.STDOUT, **kw)

     Run a Python subprocess with the given arguments.

     'kw' is extra keyword args to pass to *note subprocess.Popen():
     199.  Returns a *note subprocess.Popen: 199. object.

 -- Função: test.support.script_helper.kill_python (p)

     Run the given *note subprocess.Popen: 199. process until completion
     and return stdout.

 -- Função: test.support.script_helper.make_script (script_dir,
          script_basename, source, omit_suffix=False)

     Cria um script contendo 'source' no caminho 'script_dir' e
     'script_basename'.  Se 'omit_suffix' ‘False’, acrescente ‘.py’ ao
     nome.  Retorna o caminho completo do script.

 -- Função: test.support.script_helper.make_zip_script (zip_dir,
          zip_basename, script_name, name_in_zip=None)

     Cria um arquivo zip em 'zip_dir' e 'zip_basename' com a extensão
     ‘zip’ que contém os arquivos em 'script_name'.  'name_in_zip' é o
     nome do arquivo.  Retorna uma tupla contendo ‘(full path, full path
     of archive name)’.

 -- Função: test.support.script_helper.make_pkg (pkg_dir,
          init_source='')

     Cria um diretório nomeado 'pkg_dir' contendo um arquivo ‘__init__’
     com 'init_source' como seus conteúdos.

 -- Função: test.support.script_helper.make_zip_pkg (zip_dir,
          zip_basename, pkg_name, script_basename, source, depth=1,
          compiled=False)

     Create a zip package directory with a path of 'zip_dir' and
     'zip_basename' containing an empty ‘__init__’ file and a file
     'script_basename' containing the 'source'.  If 'compiled' is
     ‘True’, both source files will be compiled and added to the zip
     package.  Return a tuple of the full zip path and the archive name
     for the zip file.


File: python.info,  Node: test support bytecode_helper — Ferramentas de suporte para testar a geração correta de bytecode,  Next: test support threading_helper — Utilities for threading tests,  Prev: test support script_helper — Utilities for the Python execution tests,  Up: Ferramentas de Desenvolvimento

5.26.12 ‘test.support.bytecode_helper’ — Ferramentas de suporte para testar a geração correta de bytecode
---------------------------------------------------------------------------------------------------------

The *note test.support.bytecode_helper: e5. module provides support for
testing and inspecting bytecode generation.

Adicionado na versão 3.9.

O módulo define a seguinte classe:

 -- Classe: test.support.bytecode_helper.BytecodeTestCase
          (unittest.TestCase)

     This class has custom assertion methods for inspecting bytecode.

 -- Método: BytecodeTestCase.get_disassembly_as_string (co)

     Return the disassembly of 'co' as string.

 -- Método: BytecodeTestCase.assertInBytecode (x, opname,
          argval=_UNSPECIFIED)

     Return instr if 'opname' is found, otherwise throws *note
     AssertionError: 6a9.

 -- Método: BytecodeTestCase.assertNotInBytecode (x, opname,
          argval=_UNSPECIFIED)

     Throws *note AssertionError: 6a9. if 'opname' is found.


File: python.info,  Node: test support threading_helper — Utilities for threading tests,  Next: test support os_helper — Utilities for os tests,  Prev: test support bytecode_helper — Ferramentas de suporte para testar a geração correta de bytecode,  Up: Ferramentas de Desenvolvimento

5.26.13 ‘test.support.threading_helper’ — Utilities for threading tests
-----------------------------------------------------------------------

The *note test.support.threading_helper: ea. module provides support for
threading tests.

Adicionado na versão 3.10.

 -- Função: test.support.threading_helper.join_thread (thread,
          timeout=None)

     Join a 'thread' within 'timeout'.  Raise an *note AssertionError:
     6a9. if thread is still alive after 'timeout' seconds.

 -- Função: @test.support.threading_helper.reap_threads

     Decorator to ensure the threads are cleaned up even if the test
     fails.

 -- Função: test.support.threading_helper.start_threads (threads,
          unlock=None)

     Context manager to start 'threads', which is a sequence of threads.
     'unlock' is a function called after the threads are started, even
     if an exception was raised; an example would be *note
     threading.Event.set(): 3316.  ‘start_threads’ will attempt to join
     the started threads upon exit.

 -- Função: test.support.threading_helper.threading_cleanup
          (*original_values)

     Cleanup up threads not specified in 'original_values'.  Designed to
     emit a warning if a test leaves running threads in the background.

 -- Função: test.support.threading_helper.threading_setup ()

     Return current thread count and copy of dangling threads.

 -- Função: test.support.threading_helper.wait_threads_exit
          (timeout=None)

     Context manager to wait until all threads created in the ‘with’
     statement exit.

 -- Função: test.support.threading_helper.catch_threading_exception ()

     Context manager catching *note threading.Thread: 953. exception
     using *note threading.excepthook(): 84e.

     Attributes set when an exception is caught:

        * ‘exc_type’

        * ‘exc_value’

        * ‘exc_traceback’

        * ‘thread’

     See *note threading.excepthook(): 84e. documentation.

     These attributes are deleted at the context manager exit.

     Uso:

          with threading_helper.catch_threading_exception() as cm:
              # code spawning a thread which raises an exception
              ...

              # check the thread exception, use cm attributes:
              # exc_type, exc_value, exc_traceback, thread
              ...

          # exc_type, exc_value, exc_traceback, thread attributes of cm no longer
          # exists at this point
          # (to avoid reference cycles)

     Adicionado na versão 3.8.


File: python.info,  Node: test support os_helper — Utilities for os tests,  Next: test support import_helper — Utilities for import tests,  Prev: test support threading_helper — Utilities for threading tests,  Up: Ferramentas de Desenvolvimento

5.26.14 ‘test.support.os_helper’ — Utilities for os tests
---------------------------------------------------------

The *note test.support.os_helper: e7. module provides support for os
tests.

Adicionado na versão 3.10.

 -- Dado: test.support.os_helper.FS_NONASCII

     A non-ASCII character encodable by *note os.fsencode(): c70.

 -- Dado: test.support.os_helper.SAVEDCWD

     Set to *note os.getcwd(): 1682.

 -- Dado: test.support.os_helper.TESTFN

     Set to a name that is safe to use as the name of a temporary file.
     Any temporary file that is created should be closed and unlinked
     (removed).

 -- Dado: test.support.os_helper.TESTFN_NONASCII

     Set to a filename containing the *note FS_NONASCII: 43cf.
     character, if it exists.  This guarantees that if the filename
     exists, it can be encoded and decoded with the default filesystem
     encoding.  This allows tests that require a non-ASCII filename to
     be easily skipped on platforms where they can’t work.

 -- Dado: test.support.os_helper.TESTFN_UNENCODABLE

     Define o nome de arquivo (tipo str) que não pode ser codificado
     pela codificação do sistema de arquivos no modo estrito.  Ele pode
     ser ‘None’ se não for possível gerar como um nome de arquivo.

 -- Dado: test.support.os_helper.TESTFN_UNDECODABLE

     Define o nome de arquivo (tipo str) que não pode ser codificado
     pela codificação do sistema de arquivos no modo estrito.  Ele pode
     ser ‘None’ se não for possível ser gerado com um nome de arquivo.

 -- Dado: test.support.os_helper.TESTFN_UNICODE

     Define um nome não-ASCII para o arquivo temporário.

 -- Classe: test.support.os_helper.EnvironmentVarGuard

     Class used to temporarily set or unset environment variables.
     Instances can be used as a context manager and have a complete
     dictionary interface for querying/modifying the underlying
     ‘os.environ’.  After exit from the context manager all changes to
     environment variables done through this instance will be rolled
     back.

     Alterado na versão 3.1: Adicionada uma interface para dicionário.

 -- Classe: test.support.os_helper.FakePath (path)

     Simple *note path-like object: 2a0.  It implements the *note
     __fspath__(): c6d. method which just returns the 'path' argument.
     If 'path' is an exception, it will be raised in ‘__fspath__()’.

 -- Método: EnvironmentVarGuard.set (envvar, value)

     Temporariamente define a variável de ambiente ‘envvar’ para o valor
     ‘value’.

 -- Método: EnvironmentVarGuard.unset (envvar)

     Desativa temporariamente a variável de ambiente ‘envvar’.

 -- Função: test.support.os_helper.can_symlink ()

     Return ‘True’ if the OS supports symbolic links, ‘False’ otherwise.

 -- Função: test.support.os_helper.can_xattr ()

     Return ‘True’ if the OS supports xattr, ‘False’ otherwise.

 -- Função: test.support.os_helper.change_cwd (path, quiet=False)

     A context manager that temporarily changes the current working
     directory to 'path' and yields the directory.

     If 'quiet' is ‘False’, the context manager raises an exception on
     error.  Otherwise, it issues only a warning and keeps the current
     working directory the same.

 -- Função: test.support.os_helper.create_empty_file (filename)

     Create an empty file with 'filename'.  If it already exists,
     truncate it.

 -- Função: test.support.os_helper.fd_count ()

     Conta o número de descritores de arquivos abertos.

 -- Função: test.support.os_helper.fs_is_case_insensitive (directory)

     Return ‘True’ if the file system for 'directory' is
     case-insensitive.

 -- Função: test.support.os_helper.make_bad_fd ()

     Cria um descritor de arquivo inválido abrindo e fechando um arquivo
     temporário e retornando seu descritor.

 -- Função: test.support.os_helper.rmdir (filename)

     Call *note os.rmdir(): 1132. on 'filename'.  On Windows platforms,
     this is wrapped with a wait loop that checks for the existence of
     the file, which is needed due to antivirus programs that can hold
     files open and prevent deletion.

 -- Função: test.support.os_helper.rmtree (path)

     Call *note shutil.rmtree(): 301. on 'path' or call *note
     os.lstat(): 4a1. and *note os.rmdir(): 1132. to remove a path and
     its contents.  As with *note rmdir(): 43e0, on Windows platforms
     this is wrapped with a wait loop that checks for the existence of
     the files.

 -- Função: @test.support.os_helper.skip_unless_symlink

     Um decorador para executar testes que requerem suporte para links
     simbólicos.

 -- Função: @test.support.os_helper.skip_unless_xattr

     Um decorador para execução de testes que requerem suporte para
     xattr.

 -- Função: test.support.os_helper.temp_cwd (name='tempcwd',
          quiet=False)

     Um gerenciador de contexto que cria temporariamente um novo
     diretório e altera o diretório de trabalho atual (CWD).

     The context manager creates a temporary directory in the current
     directory with name 'name' before temporarily changing the current
     working directory.  If 'name' is ‘None’, the temporary directory is
     created using *note tempfile.mkdtemp(): 21f.

     Se 'quiet' é ‘False’ e ele não possibilita criar ou alterar o CWD,
     um erro é levantado.  Por outro lado, somente um aviso surge e o
     CWD original é utilizado.

 -- Função: test.support.os_helper.temp_dir (path=None, quiet=False)

     Um gerenciador de contexto que cria um diretório temporário no
     'path' e produz o diretório.

     If 'path' is ‘None’, the temporary directory is created using *note
     tempfile.mkdtemp(): 21f.  If 'quiet' is ‘False’, the context
     manager raises an exception on error.  Otherwise, if 'path' is
     specified and cannot be created, only a warning is issued.

 -- Função: test.support.os_helper.temp_umask (umask)

     Um gerenciador de contexto que temporariamente define o umask do
     processo.

 -- Função: test.support.os_helper.unlink (filename)

     Call *note os.unlink(): 1134. on 'filename'.  As with *note
     rmdir(): 43e0, on Windows platforms, this is wrapped with a wait
     loop that checks for the existence of the file.


File: python.info,  Node: test support import_helper — Utilities for import tests,  Next: test support warnings_helper — Utilities for warnings tests,  Prev: test support os_helper — Utilities for os tests,  Up: Ferramentas de Desenvolvimento

5.26.15 ‘test.support.import_helper’ — Utilities for import tests
-----------------------------------------------------------------

The *note test.support.import_helper: e6. module provides support for
import tests.

Adicionado na versão 3.10.

 -- Função: test.support.import_helper.forget (module_name)

     Remove the module named 'module_name' from ‘sys.modules’ and delete
     any byte-compiled files of the module.

 -- Função: test.support.import_helper.import_fresh_module (name,
          fresh=(), blocked=(), deprecated=False)

     This function imports and returns a fresh copy of the named Python
     module by removing the named module from ‘sys.modules’ before doing
     the import.  Note that unlike ‘reload()’, the original module is
     not affected by this operation.

     'fresh' is an iterable of additional module names that are also
     removed from the ‘sys.modules’ cache before doing the import.

     'blocked' is an iterable of module names that are replaced with
     ‘None’ in the module cache during the import to ensure that
     attempts to import them raise *note ImportError: 419.

     The named module and any modules named in the 'fresh' and 'blocked'
     parameters are saved before starting the import and then reinserted
     into ‘sys.modules’ when the fresh import is complete.

     Module and package deprecation messages are suppressed during this
     import if 'deprecated' is ‘True’.

     This function will raise *note ImportError: 419. if the named
     module cannot be imported.

     Exemplo de uso:

          # Get copies of the warnings module for testing without affecting the
          # version being used by the rest of the test suite. One copy uses the
          # C implementation, the other is forced to use the pure Python fallback
          # implementation
          py_warnings = import_fresh_module('warnings', blocked=['_warnings'])
          c_warnings = import_fresh_module('warnings', fresh=['_warnings'])

     Adicionado na versão 3.1.

 -- Função: test.support.import_helper.import_module (name,
          deprecated=False, *, required_on=())

     This function imports and returns the named module.  Unlike a
     normal import, this function raises *note unittest.SkipTest: 101a.
     if the module cannot be imported.

     Module and package deprecation messages are suppressed during this
     import if 'deprecated' is ‘True’.  If a module is required on a
     platform but optional for others, set 'required_on' to an iterable
     of platform prefixes which will be compared against *note
     sys.platform: a97.

     Adicionado na versão 3.1.

 -- Função: test.support.import_helper.modules_setup ()

     Retorna a cópia de *note sys.modules: 1636.

 -- Função: test.support.import_helper.modules_cleanup (oldmodules)

     Remove modules except for 'oldmodules' and ‘encodings’ in order to
     preserve internal cache.

 -- Função: test.support.import_helper.unload (name)

     Exclui o 'name' de ‘sys.modules’.

 -- Função: test.support.import_helper.make_legacy_pyc (source)

     Move a PEP 3147(1)/ PEP 488(2) pyc file to its legacy pyc location
     and return the file system path to the legacy pyc file.  The
     'source' value is the file system path to the source file.  It does
     not need to exist, however the PEP 3147/488 pyc file must exist.

 -- Classe: test.support.import_helper.CleanImport (*module_names)

     A context manager to force import to return a new module reference.
     This is useful for testing module-level behaviors, such as the
     emission of a *note DeprecationWarning: 1a5. on import.  Example
     usage:

          with CleanImport('foo'):
              importlib.import_module('foo')  # New reference.

 -- Classe: test.support.import_helper.DirsOnSysPath (*paths)

     A context manager to temporarily add directories to *note sys.path:
     3b4.

     This makes a copy of *note sys.path: 3b4, appends any directories
     given as positional arguments, then reverts *note sys.path: 3b4. to
     the copied settings when the context ends.

     Note that 'all' *note sys.path: 3b4. modifications in the body of
     the context manager, including replacement of the object, will be
     reverted at the end of the block.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3147/

   (2) https://peps.python.org/pep-0488/


File: python.info,  Node: test support warnings_helper — Utilities for warnings tests,  Prev: test support import_helper — Utilities for import tests,  Up: Ferramentas de Desenvolvimento

5.26.16 ‘test.support.warnings_helper’ — Utilities for warnings tests
---------------------------------------------------------------------

The *note test.support.warnings_helper: eb. module provides support for
warnings tests.

Adicionado na versão 3.10.

 -- Função: test.support.warnings_helper.ignore_warnings (*, category)

     Suppress warnings that are instances of 'category', which must be
     *note Warning: 244a. or a subclass.  Roughly equivalent to *note
     warnings.catch_warnings(): 584. with *note
     warnings.simplefilter('ignore', category=category): 6c1.  For
     example:

          @warning_helper.ignore_warnings(category=DeprecationWarning)
          def test_suppress_warning():
              # do something

     Adicionado na versão 3.8.

 -- Função: test.support.warnings_helper.check_no_resource_warning
          (testcase)

     Context manager to check that no *note ResourceWarning: 244. was
     raised.  You must remove the object which may emit *note
     ResourceWarning: 244. before the end of the context manager.

 -- Função: test.support.warnings_helper.check_syntax_warning (testcase,
          statement, errtext='', *, lineno=1, offset=None)

     Test for syntax warning in 'statement' by attempting to compile
     'statement'.  Test also that the *note SyntaxWarning: 466. is
     emitted only once, and that it will be converted to a *note
     SyntaxError: 18d. when turned into error.  'testcase' is the *note
     unittest: 106. instance for the test.  'errtext' is the regular
     expression which should match the string representation of the
     emitted *note SyntaxWarning: 466. and raised *note SyntaxError:
     18d.  If 'lineno' is not ‘None’, compares to the line of the
     warning and exception.  If 'offset' is not ‘None’, compares to the
     offset of the exception.

     Adicionado na versão 3.8.

 -- Função: test.support.warnings_helper.check_warnings (*filters,
          quiet=True)

     A convenience wrapper for *note warnings.catch_warnings(): 584.
     that makes it easier to test that a warning was correctly raised.
     It is approximately equivalent to calling
     ‘warnings.catch_warnings(record=True)’ with *note
     warnings.simplefilter(): 6c1. set to ‘always’ and with the option
     to automatically validate the results that are recorded.

     ‘check_warnings’ accepts 2-tuples of the form ‘("message regexp",
     WarningCategory)’ as positional arguments.  If one or more
     'filters' are provided, or if the optional keyword argument 'quiet'
     is ‘False’, it checks to make sure the warnings are as expected:
     each specified filter must match at least one of the warnings
     raised by the enclosed code or the test fails, and if any warnings
     are raised that do not match any of the specified filters the test
     fails.  To disable the first of these checks, set 'quiet' to
     ‘True’.

     Se nenhum argumento é especificado, o padrão é:

          check_warnings(("", Warning), quiet=True)

     Nesse caso, todos os avisos são capturados e nenhum erro é gerado.

     On entry to the context manager, a ‘WarningRecorder’ instance is
     returned.  The underlying warnings list from *note
     catch_warnings(): 584. is available via the recorder object’s *note
     warnings: 112. attribute.  As a convenience, the attributes of the
     object representing the most recent warning can also be accessed
     directly through the recorder object (see example below).  If no
     warning has been raised, then any of the attributes that would
     otherwise be expected on an object representing a warning will
     return ‘None’.

     The recorder object also has a ‘reset()’ method, which clears the
     warnings list.

     O gerenciador de contexto é desenhado para ser utilizado dessa
     forma:

          with check_warnings(("assertion is always true", SyntaxWarning),
                              ("", UserWarning)):
              exec('assert(False, "Hey!")')
              warnings.warn(UserWarning("Hide me!"))

     No caso, se um aviso não foi levantado, ou algum outro aviso não
     foi levantado, *note check_warnings(): 43f5. deveria aparecer como
     um erro.

     When a test needs to look more deeply into the warnings, rather
     than just checking whether or not they occurred, code like this can
     be used:

          with check_warnings(quiet=True) as w:
              warnings.warn("foo")
              assert str(w.args[0]) == "foo"
              warnings.warn("bar")
              assert str(w.args[0]) == "bar"
              assert str(w.warnings[0].args[0]) == "foo"
              assert str(w.warnings[1].args[0]) == "bar"
              w.reset()
              assert len(w.warnings) == 0

     Aqui todos os avisos serão capturados e o código de teste testa os
     avisos diretamente capturados.

     Alterado na versão 3.2: Novos argumentos opcionais 'filters' e
     'quiet'.

 -- Classe: test.support.warnings_helper.WarningsRecorder

     Class used to record warnings for unit tests.  See documentation of
     *note check_warnings(): 43f5. above for more details.


File: python.info,  Node: Depuração e perfilamento,  Next: Empacotamento e Distribuição de Software,  Prev: Ferramentas de Desenvolvimento,  Up: A Biblioteca Padrão do Python

5.27 Depuração e perfilamento
=============================

Essas bibliotecas ajudam no desenvolvimento do Python: o depurador
permite que você percorra o código, analise os quadros de pilha e defina
pontos de interrupção etc., e os criadores de perfil executam o código e
fornecem uma análise detalhada dos tempos de execução, permitindo
identificar gargalos em seus programas.  Os eventos de auditoria
fornecem visibilidade dos comportamentos de tempo de execução que, de
outra forma, exigiriam depuração ou correção intrusiva.

* Menu:

* Tabela de eventos de auditoria::
* bdb — Framework do depurador::
* faulthandler — Dump the Python traceback::
* pdb — O depurador do Python::
* Os Profilers do Python::
* timeit — Mede o tempo de execução de pequenos trechos de código::
* trace — Rastreia ou acompanha a execução de instruções Python::
* tracemalloc — Trace memory allocations::


File: python.info,  Node: Tabela de eventos de auditoria,  Next: bdb — Framework do depurador,  Up: Depuração e perfilamento

5.27.1 Tabela de eventos de auditoria
-------------------------------------

Esta tabela contém todos os eventos levantados por chamadas de *note
sys.audit(): 16a0. ou *note PySys_Audit(): 36f. durante todo o tempo de
execução do CPython e da biblioteca padrão.  Essas chamadas foram
adicionadas na versão 3.8 ou posterior (veja PEP 578(1)).

Veja *note sys.addaudithook(): 43fc. e *note PySys_AddAuditHook(): 43fd.
para informações sobre como tratar estes eventos.

Esta tabela é gerada a partir da documentação do CPython e pode não
representar eventos levantados por outras implementações.  Consulte a
documentação específica de tempo de execução para obter eventos reais
levantados.

Audit event                        Arguments                                                   References
                                                                                               
-------------------------------------------------------------------------------------------------------------------
                                                                                               
_thread.start_new_thread           ‘function’, ‘args’, ‘kwargs’                                *note [1]: 43fe.
                                                                                               
                                                                                               
array.__new__                      ‘typecode’, ‘initializer’                                   *note [1]: 1a0.
                                                                                               
                                                                                               
builtins.breakpoint                ‘breakpointhook’                                            *note [1]: 234.
                                                                                               
                                                                                               
builtins.id                        ‘id’                                                        *note [1]: 146a.
                                                                                               
                                                                                               
builtins.input                     ‘prompt’                                                    *note [1]: 131b.
                                                                                               
                                                                                               
builtins.input/result              ‘result’                                                    *note [1]: 131b.
                                                                                               
                                                                                               
code.__new__                       ‘code’, ‘filename’, ‘name’, ‘argcount’,                     *note [1]: 2df.
                                   ‘posonlyargcount’, ‘kwonlyargcount’, ‘nlocals’,             
                                   ‘stacksize’, ‘flags’
                                   
                                                                                               
compile                            ‘source’, ‘filename’                                        *note [1]: 192.
                                                                                               
                                                                                               
cpython.PyInterpreterState_Clear                                                               *note [1]: 43ff.
                                                                                               
                                                                                               
cpython.PyInterpreterState_New                                                                 *note [1]: 4400.
                                                                                               
                                                                                               
cpython._PySys_ClearAuditHooks                                                                 *note [1]: d37.
                                                                                               
                                                                                               
cpython.run_command                ‘command’                                                   *note [1]: 5e0.
                                                                                               
                                                                                               
cpython.run_file                   ‘filename’                                                  *note [1]: 4401.
                                                                                               
                                                                                               
cpython.run_interactivehook        ‘hook’                                                      *note [1]: ffd.
                                                                                               
                                                                                               
cpython.run_module                 ‘module-name’                                               *note [1]: 5e1.
                                                                                               
                                                                                               
cpython.run_startup                ‘filename’                                                  *note [1]: ffe.
                                                                                               
                                                                                               
cpython.run_stdin                                                                              *note [1]: 4402.*note [2]: 4403.*note [3]: 4404.
                                                                                               
                                                                                               
ctypes.addressof                   ‘obj’                                                       *note [1]: 301d.
                                                                                               
                                                                                               
ctypes.call_function               ‘func_pointer’, ‘arguments’                                 *note [1]: 3015.
                                                                                               
                                                                                               
ctypes.cdata                       ‘address’                                                   *note [1]: 302f.
                                                                                               
                                                                                               
ctypes.cdata/buffer                ‘pointer’, ‘size’, ‘offset’                                 *note [1]: 302d.*note [2]: 302e.
                                                                                               
                                                                                               
ctypes.create_string_buffer        ‘init’, ‘size’                                              *note [1]: 2fd3.
                                                                                               
                                                                                               
ctypes.create_unicode_buffer       ‘init’, ‘size’                                              *note [1]: 1b46.
                                                                                               
                                                                                               
ctypes.dlopen                      ‘name’                                                      *note [1]: 3013.
                                                                                               
                                                                                               
ctypes.dlsym                       ‘library’, ‘name’                                           *note [1]: 3013.
                                                                                               
                                                                                               
ctypes.dlsym/handle                ‘handle’, ‘name’                                            *note [1]: 3013.
                                                                                               
                                                                                               
ctypes.get_errno                                                                               *note [1]: 300d.
                                                                                               
                                                                                               
ctypes.get_last_error                                                                          *note [1]: 300f.
                                                                                               
                                                                                               
ctypes.set_errno                   ‘errno’                                                     *note [1]: 300e.
                                                                                               
                                                                                               
ctypes.set_exception               ‘code’                                                      *note [1]: 3015.
                                                                                               
                                                                                               
ctypes.set_last_error              ‘error’                                                     *note [1]: 3010.
                                                                                               
                                                                                               
ctypes.string_at                   ‘ptr’, ‘size’                                               *note [1]: 3026.
                                                                                               
                                                                                               
ctypes.wstring_at                  ‘ptr’, ‘size’                                               *note [1]: 3028.
                                                                                               
                                                                                               
ensurepip.bootstrap                ‘root’                                                      *note [1]: 4405.
                                                                                               
                                                                                               
exec                               ‘code_object’                                               *note [1]: 180.*note [2]: 17f.
                                                                                               
                                                                                               
fcntl.fcntl                        ‘fd’, ‘cmd’, ‘arg’                                          *note [1]: 3652.
                                                                                               
                                                                                               
fcntl.flock                        ‘fd’, ‘operation’                                           *note [1]: 4406.
                                                                                               
                                                                                               
fcntl.ioctl                        ‘fd’, ‘request’, ‘arg’                                      *note [1]: 14c3.
                                                                                               
                                                                                               
fcntl.lockf                        ‘fd’, ‘cmd’, ‘len’, ‘start’, ‘whence’                       *note [1]: 1433.
                                                                                               
                                                                                               
ftplib.connect                     ‘self’, ‘host’, ‘port’                                      *note [1]: 3cb7.
                                                                                               
                                                                                               
ftplib.sendcmd                     ‘self’, ‘cmd’                                               *note [1]: 3cbc.*note [2]: 3cbd.
                                                                                               
                                                                                               
function.__new__                   ‘code’                                                      *note [1]: 887.
                                                                                               
                                                                                               
gc.get_objects                     ‘generation’                                                *note [1]: 806.
                                                                                               
                                                                                               
gc.get_referents                   ‘objs’                                                      *note [1]: 808.
                                                                                               
                                                                                               
gc.get_referrers                   ‘objs’                                                      *note [1]: 807.
                                                                                               
                                                                                               
glob.glob                          ‘pathname’, ‘recursive’                                     *note [1]: 29f.*note [2]: 80a.
                                                                                               
                                                                                               
glob.glob/2                        ‘pathname’, ‘recursive’, ‘root_dir’, ‘dir_fd’               *note [1]: 29f.*note [2]: 80a.
                                                                                               
                                                                                               
http.client.connect                ‘self’, ‘host’, ‘port’                                      *note [1]: 3c9a.
                                                                                               
                                                                                               
http.client.send                   ‘self’, ‘data’                                              *note [1]: 3c9e.
                                                                                               
                                                                                               
imaplib.open                       ‘self’, ‘host’, ‘port’                                      *note [1]: 90b.
                                                                                               
                                                                                               
imaplib.send                       ‘self’, ‘data’                                              *note [1]: 3d0d.
                                                                                               
                                                                                               
import                             ‘module’, ‘filename’, ‘sys.path’, ‘sys.meta_path’,          *note [1]: 5e2.
                                   ‘sys.path_hooks’                                            
                                   
                                                                                               
marshal.dumps                      ‘value’, ‘version’                                          *note [1]: 2a76.
                                                                                               
                                                                                               
marshal.load                                                                                   *note [1]: 1b8b.
                                                                                               
                                                                                               
marshal.loads                      ‘bytes’                                                     *note [1]: 1b8b.
                                                                                               
                                                                                               
mmap.__new__                       ‘fileno’, ‘length’, ‘access’, ‘offset’                      *note [1]: 20b.
                                                                                               
                                                                                               
msvcrt.get_osfhandle               ‘fd’                                                        *note [1]: 4407.
                                                                                               
                                                                                               
msvcrt.locking                     ‘fd’, ‘mode’, ‘nbytes’                                      *note [1]: 4408.
                                                                                               
                                                                                               
msvcrt.open_osfhandle              ‘handle’, ‘flags’                                           *note [1]: 4409.
                                                                                               
                                                                                               
object.__delattr__                 ‘obj’, ‘name’                                               *note [1]: 20c0.
                                                                                               
                                                                                               
object.__getattr__                 ‘obj’, ‘name’                                               *note [1]: beb.
                                                                                               
                                                                                               
object.__setattr__                 ‘obj’, ‘name’, ‘value’                                      *note [1]: 20bf.
                                                                                               
                                                                                               
open                               ‘path’, ‘mode’, ‘flags’                                     *note [1]: 51c.*note [2]: 51d.*note [3]: dba.
                                                                                               
                                                                                               
os.add_dll_directory               ‘path’                                                      *note [1]: 9f2.
                                                                                               
                                                                                               
os.chdir                           ‘path’                                                      *note [1]: 60d.*note [2]: db1.
                                                                                               
                                                                                               
os.chflags                         ‘path’, ‘flags’                                             *note [1]: 112c.*note [2]: 2d5b.
                                                                                               
                                                                                               
os.chmod                           ‘path’, ‘mode’, ‘dir_fd’                                    *note [1]: 21b.*note [2]: 21c.*note [3]: 21a.
                                                                                               
                                                                                               
os.chown                           ‘path’, ‘uid’, ‘gid’, ‘dir_fd’                              *note [1]: 112d.*note [2]: db2.*note [3]: 2d5c.
                                                                                               
                                                                                               
os.exec                            ‘path’, ‘args’, ‘env’                                       *note [1]: 2d95.
                                                                                               
                                                                                               
os.fork                                                                                        *note [1]: 197.
                                                                                               
                                                                                               
os.forkpty                                                                                     *note [1]: 198.
                                                                                               
                                                                                               
os.fwalk                           ‘top’, ‘topdown’, ‘onerror’, ‘follow_symlinks’, ‘dir_fd’    *note [1]: b71.
                                                                                               
                                                                                               
os.getxattr                        ‘path’, ‘attribute’                                         *note [1]: 1143.
                                                                                               
                                                                                               
os.kill                            ‘pid’, ‘sig’                                                *note [1]: 13ae.
                                                                                               
                                                                                               
os.killpg                          ‘pgid’, ‘sig’                                               *note [1]: 1b4d.
                                                                                               
                                                                                               
os.link                            ‘src’, ‘dst’, ‘src_dir_fd’, ‘dst_dir_fd’                    *note [1]: 112e.
                                                                                               
                                                                                               
os.listdir                         ‘path’                                                      *note [1]: 1139.
                                                                                               
                                                                                               
os.listdrives                                                                                  *note [1]: 49d.
                                                                                               
                                                                                               
os.listmounts                      ‘volume’                                                    *note [1]: 49f.
                                                                                               
                                                                                               
os.listvolumes                                                                                 *note [1]: 49e.
                                                                                               
                                                                                               
os.listxattr                       ‘path’                                                      *note [1]: 1144.
                                                                                               
                                                                                               
os.lockf                           ‘fd’, ‘cmd’, ‘len’                                          *note [1]: 1152.
                                                                                               
                                                                                               
os.mkdir                           ‘path’, ‘mode’, ‘dir_fd’                                    *note [1]: 21e.*note [2]: 21d.
                                                                                               
                                                                                               
os.posix_spawn                     ‘path’, ‘argv’, ‘env’                                       *note [1]: 220.*note [2]: 1ba7.
                                                                                               
                                                                                               
os.putenv                          ‘key’, ‘value’                                              *note [1]: 922.
                                                                                               
                                                                                               
os.remove                          ‘path’, ‘dir_fd’                                            *note [1]: 112f.*note [2]: 2d60.*note [3]: 1134.
                                                                                               
                                                                                               
os.removexattr                     ‘path’, ‘attribute’                                         *note [1]: 1145.
                                                                                               
                                                                                               
os.rename                          ‘src’, ‘dst’, ‘src_dir_fd’, ‘dst_dir_fd’                    *note [1]: 1130.*note [2]: 2d61.*note [3]: 1131.
                                                                                               
                                                                                               
os.rmdir                           ‘path’, ‘dir_fd’                                            *note [1]: 1132.
                                                                                               
                                                                                               
os.scandir                         ‘path’                                                      *note [1]: a68.
                                                                                               
                                                                                               
os.setxattr                        ‘path’, ‘attribute’, ‘value’, ‘flags’                       *note [1]: 1146.
                                                                                               
                                                                                               
os.spawn                           ‘mode’, ‘path’, ‘args’, ‘env’                               *note [1]: 1826.
                                                                                               
                                                                                               
os.startfile                       ‘path’, ‘operation’                                         *note [1]: 1a0f.
                                                                                               
                                                                                               
os.startfile/2                     ‘path’, ‘operation’, ‘arguments’, ‘cwd’, ‘show_cmd’         *note [1]: 1a0f.
                                                                                               
                                                                                               
os.symlink                         ‘src’, ‘dst’, ‘dir_fd’                                      *note [1]: 1133.
                                                                                               
                                                                                               
os.system                          ‘command’                                                   *note [1]: 14a5.
                                                                                               
                                                                                               
os.truncate                        ‘fd’, ‘length’                                              *note [1]: db7.*note [2]: e69.
                                                                                               
                                                                                               
os.unsetenv                        ‘key’                                                       *note [1]: 921.
                                                                                               
                                                                                               
os.utime                           ‘path’, ‘times’, ‘ns’, ‘dir_fd’                             *note [1]: 1135.
                                                                                               
                                                                                               
os.walk                            ‘top’, ‘topdown’, ‘onerror’, ‘followlinks’                  *note [1]: 4a9.
                                                                                               
                                                                                               
pathlib.Path.glob                  ‘self’, ‘pattern’                                           *note [1]: 22d.
                                                                                               
                                                                                               
pathlib.Path.rglob                 ‘self’, ‘pattern’                                           *note [1]: 22e.
                                                                                               
                                                                                               
pdb.Pdb                                                                                        *note [1]: 928.
                                                                                               
                                                                                               
pickle.find_class                  ‘module’, ‘name’                                            *note [1]: 2a51.
                                                                                               
                                                                                               
poplib.connect                     ‘self’, ‘host’, ‘port’                                      *note [1]: 92a.*note [2]: 92b.
                                                                                               
                                                                                               
poplib.putline                     ‘self’, ‘line’                                              *note [1]: 92a.*note [2]: 92b.
                                                                                               
                                                                                               
pty.spawn                          ‘argv’                                                      *note [1]: fb6.
                                                                                               
                                                                                               
resource.prlimit                   ‘pid’, ‘resource’, ‘limits’                                 *note [1]: fbe.
                                                                                               
                                                                                               
resource.setrlimit                 ‘resource’, ‘limits’                                        *note [1]: 1605.
                                                                                               
                                                                                               
setopencodehook                                                                                *note [1]: 181e.
                                                                                               
                                                                                               
shutil.chown                       ‘path’, ‘user’, ‘group’                                     *note [1]: 240.
                                                                                               
                                                                                               
shutil.copyfile                    ‘src’, ‘dst’                                                *note [1]: a64.*note [2]: a65.*note [3]: a63.
                                                                                               
                                                                                               
shutil.copymode                    ‘src’, ‘dst’                                                *note [1]: a64.*note [2]: 179f.
                                                                                               
                                                                                               
shutil.copystat                    ‘src’, ‘dst’                                                *note [1]: a65.*note [2]: 116d.
                                                                                               
                                                                                               
shutil.copytree                    ‘src’, ‘dst’                                                *note [1]: a33.
                                                                                               
                                                                                               
shutil.make_archive                ‘base_name’, ‘format’, ‘root_dir’, ‘base_dir’               *note [1]: 4b3.
                                                                                               
                                                                                               
shutil.move                        ‘src’, ‘dst’                                                *note [1]: e82.
                                                                                               
                                                                                               
shutil.rmtree                      ‘path’, ‘dir_fd’                                            *note [1]: 301.
                                                                                               
                                                                                               
shutil.unpack_archive              ‘filename’, ‘extract_dir’, ‘format’                         *note [1]: 46b.
                                                                                               
                                                                                               
signal.pthread_kill                ‘thread_id’, ‘signalnum’                                    *note [1]: 1170.
                                                                                               
                                                                                               
smtplib.connect                    ‘self’, ‘host’, ‘port’                                      *note [1]: 1b41.
                                                                                               
                                                                                               
smtplib.send                       ‘self’, ‘data’                                              *note [1]: 934.
                                                                                               
                                                                                               
socket.__new__                     ‘self’, ‘family’, ‘type’, ‘protocol’                        *note [1]: dc9.
                                                                                               
                                                                                               
socket.bind                        ‘self’, ‘address’                                           *note [1]: 1583.
                                                                                               
                                                                                               
socket.connect                     ‘self’, ‘address’                                           *note [1]: dcb.*note [2]: 1582.
                                                                                               
                                                                                               
socket.getaddrinfo                 ‘host’, ‘port’, ‘family’, ‘type’, ‘protocol’                *note [1]: 184b.
                                                                                               
                                                                                               
socket.gethostbyaddr               ‘ip_address’                                                *note [1]: 1a10.
                                                                                               
                                                                                               
socket.gethostbyname               ‘hostname’                                                  *note [1]: 3647.*note [2]: 1a11.
                                                                                               
                                                                                               
socket.gethostname                                                                             *note [1]: 2d06.
                                                                                               
                                                                                               
socket.getnameinfo                 ‘sockaddr’                                                  *note [1]: 17b6.
                                                                                               
                                                                                               
socket.getservbyname               ‘servicename’, ‘protocolname’                               *note [1]: 3649.
                                                                                               
                                                                                               
socket.getservbyport               ‘port’, ‘protocolname’                                      *note [1]: 364a.
                                                                                               
                                                                                               
socket.sendmsg                     ‘self’, ‘address’                                           *note [1]: 476.
                                                                                               
                                                                                               
socket.sendto                      ‘self’, ‘address’                                           *note [1]: dd1.
                                                                                               
                                                                                               
socket.sethostname                 ‘name’                                                      *note [1]: 117a.
                                                                                               
                                                                                               
sqlite3.connect                    ‘database’                                                  *note [1]: 2a8.
                                                                                               
                                                                                               
sqlite3.connect/handle             ‘connection_handle’                                         *note [1]: 2a8.
                                                                                               
                                                                                               
sqlite3.enable_load_extension      ‘connection’, ‘enabled’                                     *note [1]: 841.
                                                                                               
                                                                                               
sqlite3.load_extension             ‘connection’, ‘path’                                        *note [1]: 4b8.
                                                                                               
                                                                                               
subprocess.Popen                   ‘executable’, ‘args’, ‘cwd’, ‘env’                          *note [1]: 199.
                                                                                               
                                                                                               
sys._current_exceptions                                                                        *note [1]: 4c2.
                                                                                               
                                                                                               
sys._current_frames                                                                            *note [1]: 147a.
                                                                                               
                                                                                               
sys._getframe                      ‘frame’                                                     *note [1]: 6e1.
                                                                                               
                                                                                               
sys._getframemodulename            ‘depth’                                                     *note [1]: 1867.
                                                                                               
                                                                                               
sys.addaudithook                                                                               *note [1]: 43fd.*note [2]: 43fc.
                                                                                               
                                                                                               
sys.excepthook                     ‘hook’, ‘type’, ‘value’, ‘traceback’                        *note [1]: 80e.
                                                                                               
                                                                                               
sys.monitoring.register_callback   ‘func’                                                      *note [1]: 440a.
                                                                                               
                                                                                               
sys.set_asyncgen_hooks_finalizer                                                               *note [1]: 1712.
                                                                                               
                                                                                               
sys.set_asyncgen_hooks_firstiter                                                               *note [1]: 1712.
                                                                                               
                                                                                               
sys.setprofile                                                                                 *note [1]: 1546.
                                                                                               
                                                                                               
sys.settrace                                                                                   *note [1]: 1547.
                                                                                               
                                                                                               
sys.unraisablehook                 ‘hook’, ‘unraisable’                                        *note [1]: 1f7.
                                                                                               
                                                                                               
syslog.closelog                                                                                *note [1]: 53f.
                                                                                               
                                                                                               
syslog.openlog                     ‘ident’, ‘logoption’, ‘facility’                            *note [1]: 53e.
                                                                                               
                                                                                               
syslog.setlogmask                  ‘maskpri’                                                   *note [1]: 440b.
                                                                                               
                                                                                               
syslog.syslog                      ‘priority’, ‘message’                                       *note [1]: 540.
                                                                                               
                                                                                               
tempfile.mkdtemp                   ‘fullpath’                                                  *note [1]: 1275.*note [2]: 21f.
                                                                                               
                                                                                               
tempfile.mkstemp                   ‘fullpath’                                                  *note [1]: 4c6.*note [2]: 2a02.*note [3]: 2a03.
                                                                                               
                                                                                               
time.sleep                         ‘secs’                                                      *note [1]: 440c.
                                                                                               
                                                                                               
urllib.Request                     ‘fullurl’, ‘data’, ‘headers’, ‘method’                      *note [1]: 293.
                                                                                               
                                                                                               
webbrowser.open                    ‘url’                                                       *note [1]: 3b73.
                                                                                               
                                                                                               
winreg.ConnectRegistry             ‘computer_name’, ‘key’                                      *note [1]: 440d.
                                                                                               
                                                                                               
winreg.CreateKey                   ‘key’, ‘sub_key’, ‘access’                                  *note [1]: 440e.*note [2]: 13a9.
                                                                                               
                                                                                               
winreg.DeleteKey                   ‘key’, ‘sub_key’, ‘access’                                  *note [1]: 440f.*note [2]: 13aa.
                                                                                               
                                                                                               
winreg.DeleteValue                 ‘key’, ‘value’                                              *note [1]: 4410.
                                                                                               
                                                                                               
winreg.DisableReflectionKey        ‘key’                                                       *note [1]: 13ab.
                                                                                               
                                                                                               
winreg.EnableReflectionKey         ‘key’                                                       *note [1]: 13ac.
                                                                                               
                                                                                               
winreg.EnumKey                     ‘key’, ‘index’                                              *note [1]: 4411.
                                                                                               
                                                                                               
winreg.EnumValue                   ‘key’, ‘index’                                              *note [1]: 4412.
                                                                                               
                                                                                               
winreg.ExpandEnvironmentStrings    ‘str’                                                       *note [1]: 143f.
                                                                                               
                                                                                               
winreg.LoadKey                     ‘key’, ‘sub_key’, ‘file_name’                               *note [1]: 4413.
                                                                                               
                                                                                               
winreg.OpenKey                     ‘key’, ‘sub_key’, ‘access’                                  *note [1]: 4414.
                                                                                               
                                                                                               
winreg.OpenKey/result              ‘key’                                                       *note [1]: 440e.*note [2]: 13a9.*note [3]: 4414.
                                                                                               
                                                                                               
winreg.PyHKEY.Detach               ‘key’                                                       *note [1]: 4415.
                                                                                               
                                                                                               
winreg.QueryInfoKey                ‘key’                                                       *note [1]: 4416.
                                                                                               
                                                                                               
winreg.QueryReflectionKey          ‘key’                                                       *note [1]: 13ad.
                                                                                               
                                                                                               
winreg.QueryValue                  ‘key’, ‘sub_key’, ‘value_name’                              *note [1]: 4417.*note [2]: 15ab.
                                                                                               
                                                                                               
winreg.SaveKey                     ‘key’, ‘file_name’                                          *note [1]: 4418.
                                                                                               
                                                                                               
winreg.SetValue                    ‘key’, ‘sub_key’, ‘type’, ‘value’                           *note [1]: 4419.*note [2]: 188b.
                                                                                               

Os eventos a seguir são levantados internamente e não correspondem a
nenhuma API pública de CPython:

Evento de auditoria            Argumentos
                               
-------------------------------------------------------------------------------
                               
_winapi.CreateFile             ‘file_name’, ‘desired_access’, ‘share_mode’,
                               ‘creation_disposition’,
                               ‘flags_and_attributes’
                               
                               
_winapi.CreateJunction         ‘src_path’, ‘dst_path’
                               
                               
_winapi.CreateNamedPipe        ‘name’, ‘open_mode’, ‘pipe_mode’
                               
                               
_winapi.CreatePipe

_winapi.CreateProcess          ‘application_name’, ‘command_line’,
                               ‘current_directory’
                               
                               
_winapi.OpenProcess            ‘process_id’, ‘desired_access’
                               
                               
_winapi.TerminateProcess       ‘handle’, ‘exit_code’
                               
                               
ctypes.PyObj_FromPtr           ‘obj’
                               

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0578/


File: python.info,  Node: bdb — Framework do depurador,  Next: faulthandler — Dump the Python traceback,  Prev: Tabela de eventos de auditoria,  Up: Depuração e perfilamento

5.27.2 ‘bdb’ — Framework do depurador
-------------------------------------

'Código-fonte:' Lib/bdb.py(1)

__________________________________________________________________

O módulo *note bdb: f. lida com funções básicas do depurador, como
definir pontos de interrupção ou gerenciar a execução por meio do
depurador.

A seguinte exceção é definida:

 -- Exceção: bdb.BdbQuit

     Exceção levantada pela classe *note Bdb: 1346. para sair do
     depurador.

O módulo *note bdb: f. também define duas classes:

 -- Classe: bdb.Breakpoint (self, file, line, temporary=False,
          cond=None, funcname=None)

     Esta classe implementa pontos de interrupção temporários, contagens
     de ignorar, desativação e (re)ativação, além de condicionais.

     Os pontos de interrupção são indexados por número por meio de uma
     lista chamada *note bpbynumber: 441f. e por pares ‘(file, line)’
     por meio de *note bplist: 4420.  O primeiro aponta para uma única
     instância da classe *note Breakpoint: 441e.  O segundo aponta para
     uma lista dessas instâncias, já que pode haver mais de um ponto de
     interrupção por linha.

     Ao criar um ponto de interrupção, seu *note nome do arquivo: 4421.
     associado deve estar no formato canônico.  Se um *note funcname:
     4422. for definido, um ponto de interrupção *note atingido: 4423.
     será contado quando a primeira linha dessa função for executada.
     Um ponto de interrupção *note condicional: 4424. sempre conta um
     *note atingido: 4423.

     As instâncias de *note Breakpoint: 441e. têm os seguintes métodos:

      -- Método: deleteMe ()

          Exclui o ponto de interrupção da lista associada a um
          arquivo/linha.  Se for o último ponto de interrupção nessa
          posição, ele também excluirá a entrada do arquivo/linha.

      -- Método: enable ()

          Marca o ponto de interrupção como ativado.

      -- Método: disable ()

          Marca o ponto de interrupção como desativado.

      -- Método: bpformat ()

          Retorna uma string com todas as informações sobre o ponto de
          interrupção, formatadas de maneira clara:

             * Número do ponto de interrupção.

             * Status temporário (del ou keep).

             * Posição do arquivo/linha.

             * Condição de interrupção.

             * Número de vezes para ignorar.

             * Número de vezes atingido.

          Adicionado na versão 3.2.

      -- Método: bpprint (out=None)

          Exibe a saída de *note bpformat(): 4428. no arquivo 'out' ou,
          se for ‘None’, na saída padrão.

     Instâncias *note Breakpoint: 441e. possuem os seguintes atributos:

      -- Atributo: file

          Nome do arquivo do *note Breakpoint: 441e.

      -- Atributo: line

          Número da linha do *note Breakpoint: 441e. dentro de *note
          file: 4421.

      -- Atributo: temporary

          ‘True’ se um *note Breakpoint: 441e. em (file, line) for
          temporário.

      -- Atributo: cond

          Condição para avaliar um *note Breakpoint: 441e. em (file,
          line).

      -- Atributo: funcname

          Nome da função que define se um *note Breakpoint: 441e. é
          atingido ao entrar na função.

      -- Atributo: enabled

          ‘True’ se *note Breakpoint: 441e. estiver ativado.

      -- Atributo: bpbynumber

          Índice numérico de uma única instância de *note Breakpoint:
          441e.

      -- Atributo: bplist

          Dicionário de instâncias de *note Breakpoint: 441e. indexadas
          por tuplas (*note file: 4421, *note line: 442a.).

      -- Atributo: ignore

          Número de vezes para ignorar o *note Breakpoint: 441e.

      -- Atributo: hits

          Contagem do número de vezes que um *note Breakpoint: 441e. foi
          atingido.

 -- Classe: bdb.Bdb (skip=None)

     A *note Bdb: 1346. atua como uma classe base genérica de depurador
     em Python.

     Esta classe cuida dos detalhes do mecanismo de rastreamento; uma
     classe derivada deve implementar a interação com o usuário.  A
     classe de depuração padrão (*note pdb.Pdb: 928.) é um exemplo.

     O argumento 'skip', se fornecido, deve ser um iterável de padrões
     de nomes de módulos no estilo glob.  O depurador não entrará em
     frames que se originam em um módulo que corresponda a um desses
     padrões.  Se um frame é considerado como originado em determinado
     módulo é determinado pelo valor de ‘__name__’ nos globals do frame.

     Alterado na versão 3.1: Adicionado o parâmetro 'skip'.

     Os seguintes métodos de *note Bdb: 1346. normalmente não precisam
     ser substituídos.

      -- Método: canonic (filename)

          Retorna a forma canônica de 'filename'.

          Para nomes de arquivos reais, a forma canônica é um *note
          caminho absoluto: 135f, *note normalizado para distinguir
          maiúsculas e minúsculas: 298f, dependente do sistema
          operacional.  Um 'filename' com colchetes angulares, como
          ‘"<stdin>"’ gerado no modo interativo, é retornado sem
          alterações.

      -- Método: reset ()

          Define os atributos ‘botframe’, ‘stopframe’, ‘returnframe’ e
          *note quitting: 4430. com valores prontos para iniciar a
          depuração.

      -- Método: trace_dispatch (frame, event, arg)

          Esta função é instalada como a função de rastreamento dos
          frames depurados.  Seu valor de retorno é a nova função de
          rastreamento (na maioria dos casos, ela própria).

          A implementação padrão decide como despachar um frame,
          dependendo do tipo de evento (passado como string) que está
          prestes a ser executado.  'event' pode ser um dos seguintes:

             * ‘"line"’: Uma nova linha de código será executada.

             * ‘"call"’: Um função está prestes a ser chamada, ou outro
               bloco de código foi inserido.

             * ‘"retorno"’: Um função ou outro bloco de código está
               prestes a retornar.

             * ‘"exception"’: Ocorreu uma exceção.

             * ‘"c_call"’: Uma função C está prestes a ser chamada.

             * ‘"c_return"’: Uma função C retornou.

             * ‘"c_exception"’: Uma função C levantou uma exceção.

          Para os eventos Python, são chamadas função especializadas
          (consulte abaixo).  Para os eventos de C, nenhuma ação é
          tomada.

          O parâmetro 'arg' depende do evento anterior.

          Consulte a documentação de *note sys.settrace(): 1547. para
          mais informações sobre a função de rastreamento.  Para mais
          informações sobre objetos de código e de frame, consulte *note
          A hierarquia de tipos padrão: 2075.

      -- Método: dispatch_line (frame)

          Se o depurador deve parar na linha atual, invoca o método
          *note user_line(): 4433. (que deve ser substituído em
          subclasses).  Levanta a exceção *note BdbQuit: 441d. se o
          sinalizador *note quitting: 4430. estiver definido (ele pode
          ser definido a partir de *note user_line(): 4433.).  Retorna
          uma referência ao método *note trace_dispatch(): 4431. para
          continuar o rastreamento nesse escopo.

      -- Método: dispatch_call (frame, arg)

          Se o depurador deve parar nesta chamada de função, invoca o
          método *note user_call(): 4435. (que deve ser substituído em
          subclasses).  Levanta a exceção *note BdbQuit: 441d. se o
          sinalizador *note quitting: 4430. estiver definido (ele pode
          ser definido a partir de *note user_call(): 4435.).  Retorna
          uma referência ao método *note trace_dispatch(): 4431. para
          continuar o rastreamento nesse escopo.

      -- Método: dispatch_return (frame, arg)

          Se o depurador deve parar no retorno desta função, invoca o
          método *note user_return(): 4437. (que deve ser substituído em
          subclasses).  Levanta a exceção *note BdbQuit: 441d. se o
          sinalizador *note quitting: 4430. estiver definido (ele pode
          ser definido a partir de *note user_return(): 4437.).  Retorna
          uma referência ao método *note trace_dispatch(): 4431. para
          continuar o rastreamento nesse escopo.

      -- Método: dispatch_exception (frame, arg)

          Se o depurador deve parar nesta exceção, invoca o método *note
          user_exception(): 4439. (que deve ser substituído em
          subclasses).  Levanta a exceção *note BdbQuit: 441d. se o
          sinalizador *note quitting: 4430. estiver definido (ele pode
          ser definido a partir de *note user_exception(): 4439.).
          Retorna uma referência ao método *note trace_dispatch(): 4431.
          para continuar o rastreamento nesse escopo.

     Normalmente, as classes derivadas não substituem o seguinte
     métodos, mas podem fazê-lo se quiserem redefinir a definição de
     parada e de pontos de interrupção.

      -- Método: is_skipped_module (module_name)

          Retorna ‘True’ se 'module_name' corresponder a algum padrão de
          skip.

      -- Método: stop_here (frame)

          Retorna ‘True’ se frame estiver abaixo do frame inicial na
          pilha.

      -- Método: break_here (frame)

          Retorna ‘True’ se houver um ponto de interrupção efetivo para
          essa linha.

          Verifica se uma linha ou função ponto de interrupção existe e
          está em vigor.  Exclua os pontos de interrupção temporários
          com base nas informações de *note effective(): 443d.

      -- Método: break_anywhere (frame)

          Retorna ‘True’ se existir algum ponto de interrupção para o
          nome de arquivo de 'frame'’s.

     As classes derivadas devem substituir esses métodos para obter
     controle sobre a operação da depurador.

      -- Método: user_call (frame, argument_list)

          Chamado a partir de *note dispatch_call(): 4434. se um ponto
          de interrupção puder parar dentro da função chamada.

          'argument_list' não é mais usado e sempre será ‘None’.  O
          argumento é mantido por retrocompatibilidade.

      -- Método: user_line (frame)

          Chamado a partir de *note dispatch_line(): 4432. quando *note
          stop_here(): 443b. ou *note break_here(): 443c. retornam
          ‘True’.

      -- Método: user_return (frame, return_value)

          Chamado a partir de *note dispatch_return(): 4436. quando
          *note stop_here(): 443b. retorna ‘True’.

      -- Método: user_exception (frame, exc_info)

          Chamado a partir de *note dispatch_exception(): 4438. quando
          *note stop_here(): 443b. retorna ‘True’.

      -- Método: do_clear (arg)

          Manipula como um ponto de interrupção deve ser removido quando
          for temporário.

          Esse método deve ser implementado por classes derivadas.

     As classes derivadas e os clientes podem chamar os métodos a seguir
     para afetar o estado de stepping.

      -- Método: set_step ()

          Parar após uma linha de código.

      -- Método: set_next (frame)

          Parar na próxima linha no frame fornecido ou abaixo dele.

      -- Método: set_return (frame)

          Parar ao retornar do frame fornecido.

      -- Método: set_until (frame, lineno=None)

          Parar quando a linha com 'lineno' maior que a atual for
          alcançada ou ao retornar do frame atual.

      -- Método: set_trace ([frame])

          Inicia a depuração a partir de 'frame'.  Se 'frame' não for
          especificado, a depuração começa a partir do frame do
          chamador.

          Alterado na versão 3.13: *note set_trace(): 4445. entrará no
          depurador imediatamente, em vez da próxima linha de código a
          ser executada.

      -- Método: set_continue ()

          Pare somente nos pontos de interrupção ou quando terminar.  Se
          não houver pontos de interrupção, defina o sistema função de
          rastreamento como ‘None’.

      -- Método: set_quit ()

          Defina o atributo ‘quitting’ como ‘True’.  Isso levanta *note
          BdbQuit: 441d. na próxima chamada de um dos métodos
          ‘dispatch_*()’.

     Classes derivadas e clientes podem chamar os métodos a seguir para
     manipular pontos de interrupção.  Esses métodos retornam uma string
     contendo uma mensagem de erro se algo der errado, ou ‘None’ se tudo
     estiver correto.

      -- Método: set_break (filename, lineno, temporary=False,
               cond=None, funcname=None)

          Define um novo ponto de interrupção.  Se a linha 'lineno' não
          existir para o 'filename' passado como argumento, retorna uma
          mensagem de erro.  O 'filename' deve estar na forma canônica,
          conforme descrito no método *note canonic(): 442e.

      -- Método: clear_break (filename, lineno)

          Exclui os pontos de interrupção em 'filename' e 'lineno'.  Se
          nenhum tiver sido definido, retorna uma mensagem de erro.

      -- Método: clear_bpbynumber (arg)

          Exclui o ponto de interrupção cujo índice é 'arg' em *note
          Breakpoint.bpbynumber: 441f.  Se 'arg' não for numérico ou
          estiver fora do intervalo, retorna uma mensagem de erro.

      -- Método: clear_all_file_breaks (filename)

          Exclui todos os pontos de interrupção em 'filename'.  Se
          nenhum tiver sido definido, retorna uma mensagem de erro.

      -- Método: clear_all_breaks ()

          Exclui todos os pontos de interrupção existentes.  Se nenhum
          tiver sido definido, retorna uma mensagem de erro.

      -- Método: get_bpbynumber (arg)

          Retorna o ponto de interrupção especificado pelo número
          fornecido.  Se 'arg' for uma string, ele será convertido para
          um número.  Se 'arg' for uma string não numérica, se o ponto
          de interrupção nunca tiver existido ou tiver sido excluído,
          uma *note ValueError: 202. será levantada.

          Adicionado na versão 3.2.

      -- Método: get_break (filename, lineno)

          Retorna ‘True’ se houver um ponto de interrupção para 'lineno'
          em 'filename'.

      -- Método: get_breaks (filename, lineno)

          Retorna todos os pontos de interrupção para 'lineno' em
          'filename', ou uma lista vazia se nenhum estiver definido.

      -- Método: get_file_breaks (filename)

          Retorna todos os pontos de interrupção em 'filename', ou uma
          lista vazia se nenhum estiver definido.

      -- Método: get_all_breaks ()

          Retorna todos os pontos de interrupção definidos.

     Classes derivadas e clientes podem chamar os métodos a seguir para
     obter uma estrutura de dados que represente um stack trace
     (situação da pilha de execução).

      -- Método: get_stack (f, t)

          Retorna uma lista de tuplas (frame, lineno) em um stack trace
          e um tamanho.

          O frame chamado mais recentemente é o último da lista.  O
          tamanho é o número de frames abaixo do frame onde o depurador
          foi invocado.

      -- Método: format_stack_entry (frame_lineno, lprefix=': ')

          Retorna uma string com informações sobre uma entrada da pilha,
          que é uma tupla ‘(frame, lineno)’.  A string retornada contém:

             * O nome de arquivo canônico que contém o quadro.

             * O nome da função ou ‘"<lambda>"’.

             * O argumento de entrada.

             * O valor de retorno.

             * A linha de código (se existir).

     Os dois métodos a seguir podem ser chamados pelos clientes para
     usar um depurador e depurar uma *note instrução: 2935, fornecida
     como uma string.

      -- Método: run (cmd, globals=None, locals=None)

          Depura uma instrução executada por meio da função *note
          exec(): 17f.  globals assume por padrão ‘__main__.__dict__’,
          locals assume por padrão globals.

      -- Método: runeval (expr, globals=None, locals=None)

          Depura uma expressão executada por meio da função *note
          eval(): 180.  globals e locals têm o mesmo significado que em
          *note run(): 4453.

      -- Método: runctx (cmd, globals, locals)

          Por retrocompatibilidade.  Chama o método *note run(): 4453.

      -- Método: runcall (func, /, *args, **kwds)

          Depura uma única chamada de função e retorna seu resultado.

Por fim, o módulo define as funções a seguir:

 -- Função: bdb.checkfuncname (b, frame)

     Retorna ‘True’ se devemos interromper aqui, dependendo da forma
     como o *note Breakpoint: 441e. foi configurado.

     If it was set via line number, it checks if *note b.line: 442a. is
     the same as the one in 'frame'.  If the breakpoint was set via
     *note function name: 4422, we have to check we are in the right
     'frame' (the right function) and if we are on its first executable
     line.

 -- Função: bdb.effective (file, line, frame)

     Retorna ‘(active breakpoint, delete temporary flag)’ ou ‘(None,
     None)’ como o ponto de interrupção sobre o qual agir.

     The 'active breakpoint' is the first entry in *note bplist: 4420.
     for the (*note file: 4421, *note line: 442a.) (which must exist)
     that is *note enabled: 442c, for which *note checkfuncname(): 4456.
     is true, and that has neither a false *note condition: 4424. nor
     positive *note ignore: 442d. count.  The 'flag', meaning that a
     temporary breakpoint should be deleted, is ‘False’ only when the
     *note cond: 4424. cannot be evaluated (in which case, *note ignore:
     442d. count is ignored).

     Se essa entrada não existir, será retornado ‘(None, None)’.

 -- Função: bdb.set_trace ()

     Inicie a depuração com uma instância de *note Bdb: 1346. a partir
     do frame do chamador.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/bdb.py


File: python.info,  Node: faulthandler — Dump the Python traceback,  Next: pdb — O depurador do Python,  Prev: bdb — Framework do depurador,  Up: Depuração e perfilamento

5.27.3 ‘faulthandler’ — Dump the Python traceback
-------------------------------------------------

Adicionado na versão 3.3.

__________________________________________________________________

This module contains functions to dump Python tracebacks explicitly, on
a fault, after a timeout, or on a user signal.  Call *note
faulthandler.enable(): cbe. to install fault handlers for the *note
SIGSEGV: 10b9, *note SIGFPE: 10ba, *note SIGABRT: 10bb, *note SIGBUS:
10bc, and *note SIGILL: 10bd. signals.  You can also enable them at
startup by setting the *note PYTHONFAULTHANDLER: 10be. environment
variable or by using the *note -X: 176. ‘faulthandler’ command line
option.

The fault handler is compatible with system fault handlers like Apport
or the Windows fault handler.  The module uses an alternative stack for
signal handlers if the ‘sigaltstack()’ function is available.  This
allows it to dump the traceback even on a stack overflow.

The fault handler is called on catastrophic cases and therefore can only
use signal-safe functions (e.g.  it cannot allocate memory on the heap).
Because of this limitation traceback dumping is minimal compared to
normal Python tracebacks:

   * Only ASCII is supported.  The ‘backslashreplace’ error handler is
     used on encoding.

   * Each string is limited to 500 characters.

   * Only the filename, the function name and the line number are
     displayed.  (no source code)

   * It is limited to 100 frames and 100 threads.

   * The order is reversed: the most recent call is shown first.

By default, the Python traceback is written to *note sys.stderr: 940.
To see tracebacks, applications must be run in the terminal.  A log file
can alternatively be passed to *note faulthandler.enable(): cbe.

The module is implemented in C, so tracebacks can be dumped on a crash
or when Python is deadlocked.

The *note Python Development Mode: 1f8. calls *note
faulthandler.enable(): cbe. at Python startup.

Ver também
..........

Module *note pdb: a5.

     Interactive source code debugger for Python programs.

Módulo *note traceback: fe.

     Interface padrão para extrair, formatar e imprimir rastreamentos de
     pilha de programas Python.

* Menu:

* Dumping the traceback::
* Fault handler state::
* Dumping the tracebacks after a timeout::
* Dumping the traceback on a user signal::
* Issue with file descriptors::
* Exemplo: Exemplo<13>.


File: python.info,  Node: Dumping the traceback,  Next: Fault handler state,  Up: faulthandler — Dump the Python traceback

5.27.3.1 Dumping the traceback
..............................

 -- Função: faulthandler.dump_traceback (file=sys.stderr,
          all_threads=True)

     Dump the tracebacks of all threads into 'file'.  If 'all_threads'
     is ‘False’, dump only the current thread.

     Ver também
     ..........

     *note traceback.print_tb(): eb4, which can be used to print a
     traceback object.

     Alterado na versão 3.5: Added support for passing file descriptor
     to this function.


File: python.info,  Node: Fault handler state,  Next: Dumping the tracebacks after a timeout,  Prev: Dumping the traceback,  Up: faulthandler — Dump the Python traceback

5.27.3.2 Fault handler state
............................

 -- Função: faulthandler.enable (file=sys.stderr, all_threads=True)

     Enable the fault handler: install handlers for the *note SIGSEGV:
     10b9, *note SIGFPE: 10ba, *note SIGABRT: 10bb, *note SIGBUS: 10bc.
     and *note SIGILL: 10bd. signals to dump the Python traceback.  If
     'all_threads' is ‘True’, produce tracebacks for every running
     thread.  Otherwise, dump only the current thread.

     The 'file' must be kept open until the fault handler is disabled:
     see *note issue with file descriptors: 445c.

     Alterado na versão 3.5: Added support for passing file descriptor
     to this function.

     Alterado na versão 3.6: On Windows, a handler for Windows exception
     is also installed.

     Alterado na versão 3.10: The dump now mentions if a garbage
     collector collection is running if 'all_threads' is true.

 -- Função: faulthandler.disable ()

     Disable the fault handler: uninstall the signal handlers installed
     by *note enable(): cbe.

 -- Função: faulthandler.is_enabled ()

     Check if the fault handler is enabled.


File: python.info,  Node: Dumping the tracebacks after a timeout,  Next: Dumping the traceback on a user signal,  Prev: Fault handler state,  Up: faulthandler — Dump the Python traceback

5.27.3.3 Dumping the tracebacks after a timeout
...............................................

 -- Função: faulthandler.dump_traceback_later (timeout, repeat=False,
          file=sys.stderr, exit=False)

     Dump the tracebacks of all threads, after a timeout of 'timeout'
     seconds, or every 'timeout' seconds if 'repeat' is ‘True’.  If
     'exit' is ‘True’, call ‘_exit()’ with status=1 after dumping the
     tracebacks.  (Note ‘_exit()’ exits the process immediately, which
     means it doesn’t do any cleanup like flushing file buffers.)  If
     the function is called twice, the new call replaces previous
     parameters and resets the timeout.  The timer has a sub-second
     resolution.

     The 'file' must be kept open until the traceback is dumped or *note
     cancel_dump_traceback_later(): 4460. is called: see *note issue
     with file descriptors: 445c.

     This function is implemented using a watchdog thread.

     Alterado na versão 3.5: Added support for passing file descriptor
     to this function.

     Alterado na versão 3.7: This function is now always available.

 -- Função: faulthandler.cancel_dump_traceback_later ()

     Cancel the last call to *note dump_traceback_later(): e2b.


File: python.info,  Node: Dumping the traceback on a user signal,  Next: Issue with file descriptors,  Prev: Dumping the tracebacks after a timeout,  Up: faulthandler — Dump the Python traceback

5.27.3.4 Dumping the traceback on a user signal
...............................................

 -- Função: faulthandler.register (signum, file=sys.stderr,
          all_threads=True, chain=False)

     Register a user signal: install a handler for the 'signum' signal
     to dump the traceback of all threads, or of the current thread if
     'all_threads' is ‘False’, into 'file'.  Call the previous handler
     if chain is ‘True’.

     The 'file' must be kept open until the signal is unregistered by
     *note unregister(): 4462.: see *note issue with file descriptors:
     445c.

     Não disponível no Windows.

     Alterado na versão 3.5: Added support for passing file descriptor
     to this function.

 -- Função: faulthandler.unregister (signum)

     Unregister a user signal: uninstall the handler of the 'signum'
     signal installed by *note register(): e29.  Return ‘True’ if the
     signal was registered, ‘False’ otherwise.

     Não disponível no Windows.


File: python.info,  Node: Issue with file descriptors,  Next: Exemplo<13>,  Prev: Dumping the traceback on a user signal,  Up: faulthandler — Dump the Python traceback

5.27.3.5 Issue with file descriptors
....................................

*note enable(): cbe, *note dump_traceback_later(): e2b. and *note
register(): e29. keep the file descriptor of their 'file' argument.  If
the file is closed and its file descriptor is reused by a new file, or
if *note os.dup2(): b79. is used to replace the file descriptor, the
traceback will be written into a different file.  Call these functions
again each time that the file is replaced.


File: python.info,  Node: Exemplo<13>,  Prev: Issue with file descriptors,  Up: faulthandler — Dump the Python traceback

5.27.3.6 Exemplo
................

Example of a segmentation fault on Linux with and without enabling the
fault handler:

     $ python -c "import ctypes; ctypes.string_at(0)"
     Segmentation fault

     $ python -q -X faulthandler
     >>> import ctypes
     >>> ctypes.string_at(0)
     Fatal Python error: Segmentation fault

     Current thread 0x00007fb899f39700 (most recent call first):
       File "/home/python/cpython/Lib/ctypes/__init__.py", line 486 in string_at
       File "<stdin>", line 1 in <module>
     Segmentation fault


File: python.info,  Node: pdb — O depurador do Python,  Next: Os Profilers do Python,  Prev: faulthandler — Dump the Python traceback,  Up: Depuração e perfilamento

5.27.4 ‘pdb’ — O depurador do Python
------------------------------------

'Código-fonte:' Lib/pdb.py(1)

__________________________________________________________________

O módulo *note pdb: a5. define um depurador de código-fonte interativo
para programas Python.  Ele possui suporte a definição de pontos de
interrupção (condicionais) e passo único no nível da linha de origem,
inspeção de quadros de pilha, listagem de código-fonte e avaliação de
código Python arbitrário no contexto de qualquer quadro de pilha.  Ele
também tem suporte a depuração 'post-mortem' e pode ser chamado sob
controle do programa.

O depurador é extensível – na verdade, ele é definido como a classe
*note Pdb: 928.  Atualmente, isso não está documentado, mas é facilmente
compreendido pela leitura do código-fonte.  A interface de extensão usa
os módulos *note bdb: f. e *note cmd: 19.

Ver também
..........

Módulo *note faulthandler: 58.

     Usado para despejar tracebacks (situação da pilha de execução) do
     Python explicitamente, em uma falha, após um tempo limite ou em um
     sinal do usuário.

Módulo *note traceback: fe.

     Interface padrão para extrair, formatar e imprimir rastreamentos de
     pilha de programas Python.

O uso típico para entrar no depurador é inserir:

     import pdb; pdb.set_trace()

ou:

     breakpoint()

no local que você deseja entrar o depurador e, em seguida, executar o
programa.  Você pode percorrer o código seguindo esta instrução e
continuar executando sem o depurador usando o comando *note continue:
4469.

Alterado na versão 3.7: A função embutida *note breakpoint(): 234,
quando chamada com valores padrão, pode ser usada em vez de ‘import pdb;
pdb.set_trace()’.

     def double(x):
        breakpoint()
        return x * 2
     val = 3
     print(f"{val} * 2 is {double(val)}")

O prompt do depurador é ‘(Pdb)’, que é o indicador de que você está no
modo de depuração:

     > ...(2)double()
     -> breakpoint()
     (Pdb) p x
     3
     (Pdb) continue
     3 * 2 is 6

Alterado na versão 3.3: O preenchimento por tabulação através do módulo
*note readline: ba. está disponível para comandos e argumentos de
comando, por exemplo os nomes globais e locais atuais são oferecidos
como argumentos do comando ‘p’.

* Menu:

* Interface de linha de comando: Interface de linha de comando<9>.
* Comandos de depuração::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/pdb.py


File: python.info,  Node: Interface de linha de comando<9>,  Next: Comandos de depuração,  Up: pdb — O depurador do Python

5.27.4.1 Interface de linha de comando
......................................

Você também pode invocar *note pdb: a5. na linha de comando para depurar
outros scripts.  Por exemplo:

     python -m pdb [-c comando] (-m módulo | arquivo-python) [args ...]

Quando invocado como um módulo, o pdb entra automaticamente na depuração
'post-mortem' se o programa que está sendo depurado for encerrado de
forma anormal.  Após a depuração 'post-mortem' (ou após a saída normal
do programa), o pdb reiniciará o programa.  A reinicialização automática
preserva o estado do pdb (p.ex., pontos de interrupção) e, na maioria
dos casos, é mais útil do que encerrar o depurador na saída do programa.

 -- Option: -c, --command <command>

     Para executar comandos como se fossem dados em um arquivo ‘.pdbrc’.
     Veja *note Comandos de depuração: 446e.

     Alterado na versão 3.2: Adicionada a opção ‘-c’.

 -- Option: -m <module>

     Para executar módulos de maneira similar ao ‘python -m’.  Assim
     como em um script, o depurador pausará a execução logo antes da
     primeira linha do módulo.

     Alterado na versão 3.7: Adicionada a opção ‘-m’.

O uso típico para executar uma instrução sob o controle do depurador é:

     >>> import pdb
     >>> def f(x):
     ...     print(1 / x)
     >>> pdb.run("f(2)")
     > <string>(1)<module>()
     (Pdb) continue
     0.5
     >>>

O uso típico para inspecionar um programa com falha é:

     >>> import pdb
     >>> def f(x):
     ...     print(1 / x)
     ...
     >>> f(0)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
       File "<stdin>", line 2, in f
     ZeroDivisionError: division by zero
     >>> pdb.pm()
     > <stdin>(2)f()
     (Pdb) p x
     0
     (Pdb)

Alterado na versão 3.13: A implementação da PEP 667(1) significa que
atribuições de nomes feitas via ‘pdb’ afetarão imediatamente o escopo
ativo, mesmo quando executado dentro de um *note escopo otimizado: 17e.

O módulo define as seguintes funções; cada uma entra no depurador de uma
maneira ligeiramente diferente:

 -- Função: pdb.run (statement, globals=None, locals=None)

     Executa a instrução 'statement' (fornecida como uma string ou um
     objeto código) sob controle do depurador.  O prompt do depurador
     aparece antes de qualquer código ser executado; você pode definir
     pontos de interrupção e digitar *note continue: 4469. ou pode
     percorrer a instrução usando *note step: 4470. ou *note next: 4471.
     (todos esses comandos são explicados abaixo).  Os argumentos
     opcionais 'globals' e 'locals' especificam o ambiente em que o
     código é executado; por padrão, o dicionário do módulo *note
     __main__: 1. é usado.  (Veja a explicação das funções embutidas
     *note exec(): 17f. ou *note eval(): 180.)

 -- Função: pdb.runeval (expression, globals=None, locals=None)

     Avalia a expressão 'expression' (fornecida como uma string ou um
     objeto código) sob controle do depurador.  Quando *note runeval():
     4472. retorna, ele retorna o valor de 'expression'.  Caso
     contrário, esta função é semelhante a *note run(): 426c.

 -- Função: pdb.runcall (function, *args, **kwds)

     Chama a função 'function' (um objeto função ou método, não uma
     string) com os argumentos fornecidos.  Quando *note runcall():
     4473. retorna, ele retorna qualquer que seja a chamada de função
     retornada.  O prompt do depurador aparece assim que a função é
     inserida.

 -- Função: pdb.set_trace (*, header=None)

     Entra no depurador no quadro da pilha de chamada.  Isso é útil para
     codificar um ponto de interrupção em um determinado ponto de um
     programa, mesmo que o código não esteja sendo depurado de outra
     forma (por exemplo, quando uma asserção falha).  Se fornecido,
     'header' é impresso no console imediatamente antes do início da
     depuração.

     Alterado na versão 3.7: O argumento somente-nomeado 'header'.

     Alterado na versão 3.13: *note set_trace(): 235. entrará no
     depurador imediatamente, em vez da próxima linha de código a ser
     executada.

 -- Função: pdb.post_mortem (t=None)

     Entra em depuração post-mortem da exceção fornecida ou *note objeto
     traceback: b07.  Se nenhum valor for fornecido, usa a exceção que
     está sendo tratada no momento ou levanta ‘ValueError’ se não houver
     nenhuma.

     Alterado na versão 3.13: Adiciona suporte a objetos exceção.

 -- Função: pdb.pm ()

     Entra a depuração post-mortem da exceção encontrada em *note
     sys.last_exc: 4be.

As funções ‘run*’ e a *note set_trace(): 235. são aliases, ou apelidos,
para instanciar a classe *note Pdb: 928. e chamar o método com o mesmo
nome.  Se você deseja acessar outros recursos, faça você mesmo:

 -- Classe: pdb.Pdb (completekey='tab', stdin=None, stdout=None,
          skip=None, nosigint=False, readrc=True)

     *note Pdb: 928. é a classe do depurador.

     Os argumentos 'completekey', 'stdin' e 'stdout' são passados para a
     classe subjacente *note cmd.Cmd: 17b8.; veja a descrição lá.

     O argumento 'skip', se fornecido, deve ser um iterável de padrões
     de nome de módulo no estilo glob.  O depurador não entrará nos
     quadros que se originam em um módulo que corresponde a um desses
     padrões.  (2)

     Por padrão, o Pdb define um manipulador para o sinal SIGINT (que é
     enviado quando o usuário pressiona ‘Ctrl’-‘C’ no console) quando
     você dá um comando *note continue: 4469.  Isso permite que você
     entre no depurador novamente pressionando ‘Ctrl’-‘C’.  Se você
     deseja que o Pdb não toque no manipulador SIGINT, defina 'nosigint'
     como verdadeiro.

     O argumento 'readrc' é padronizado como verdadeiro e controla se o
     Pdb carregará arquivos .pdbrc do sistema de arquivos.

     Exemplo de chamada para habilitar rastreamento com 'skip':

          import pdb; pdb.Pdb(skip=['django.*']).set_trace()

     Levanta um *note evento de auditoria: 19fa. ‘pdb.Pdb’ sem
     argumentos.

     Alterado na versão 3.1: Adicionado o parâmetro 'skip'.

     Alterado na versão 3.2: Adicionado o parâmetro 'nosigint'.
     Anteriormente, um manipulador de SIGINT nunca era definido por Pdb.

     Alterado na versão 3.6: O argumento 'readrc'.

      -- Método: run (statement, globals=None, locals=None)
      -- Método: runeval (expression, globals=None, locals=None)
      -- Método: runcall (function, *args, **kwds)
      -- Método: set_trace ()

          Consulte a documentação para as funções explicadas acima.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0667/

   (2) Se um quadro é considerado originário de um determinado módulo é
determinado pelo ‘__name__’ nos globais do quadro.


File: python.info,  Node: Comandos de depuração,  Prev: Interface de linha de comando<9>,  Up: pdb — O depurador do Python

5.27.4.2 Comandos de depuração
..............................

Os comandos reconhecidos pelo depurador estão listados abaixo.  A
maioria dos comandos pode ser abreviada para uma ou duas letras,
conforme indicado; por exemplo, ‘h(elp)’ significa que ‘h’ ou ‘help’
podem ser usados para inserir o comando de ajuda (mas não ‘he’ ou ‘hel’,
nem ‘H’ ou ‘Help’ ou ‘HELP’).  Os argumentos para os comandos devem ser
separados por espaços em branco (espaços ou tabulações).  Os argumentos
opcionais estão entre colchetes (‘[]’) na sintaxe do comando; os
colchetes não devem ser digitados.  As alternativas na sintaxe de
comando são separadas por uma barra vertical (‘|’).

Digitar uma linha em branco repete o último comando digitado.  Exceção:
se o último comando foi um comando *note list: 4479, as próximas 11
linhas serão listadas.

Os comandos que o depurador não reconhece são presumidos como instruções
Python e são executados no contexto do programa que está sendo depurado.
As instruções Python também podem ser prefixadas com um ponto de
exclamação (‘!’).  Essa é uma maneira poderosa de inspecionar o programa
que está sendo depurado; é até possível alterar uma variável ou chamar
uma função.  Quando ocorre uma exceção em uma instrução, o nome da
exceção é impresso, mas o estado do depurador não é alterado.

Alterado na versão 3.13: Expressões/instruções, cujo prefixo é um
comando pdb, agora são identificadas e executadas corretamente.

O depurador possui suporte a *note aliases: 447a.  Os aliases podem ter
parâmetros que permitem um certo nível de adaptabilidade ao contexto em
exame.

Vários comandos podem ser inseridos em uma única linha, separados por
‘;;’.  (Um único ‘;’ não é usado, pois é o separador para vários
comandos em uma linha que é passada para o analisador Python.)  Nenhuma
inteligência é aplicada para separar os comandos; a entrada é dividida
no primeiro par ‘;;’, mesmo que esteja no meio de uma string entre
aspas.  Uma solução alternativa para strings com caractere de ponto e
vírgula duplo é usar a concatenação de string implícita ‘';'';'’ ou
‘";"";"’.

Para definir uma variável global temporária, use uma 'variável de
conveniência'.  Uma 'variável de conveniência' é uma variável cujo nome
começa com ‘$’.  Por exemplo, ‘$foo = 1’ define uma variável global
‘$foo’ que você pode usar na sessão do depurador.  As 'variáveis de
conveniência' são limpas quando o programa retoma a execução, portanto é
menos provável que interfira em seu programa em comparação ao uso de
variáveis normais como ‘foo = 1’.

Existem três 'variáveis de conveniência' predefinidas:

   * ‘$_frame’: o quadro atual que você está depurando

   * ‘$_retval’: o valor de retorno se o quadro estiver retornando

   * ‘$_exception’: a exceção se o quadro estiver levantando uma exceção

Adicionado na versão 3.12: Adicionado o recurso de 'variável de
conveniência'.

Se um arquivo ‘.pdbrc’ existe no diretório inicial do usuário ou no
diretório atual, ele é lido com a codificação ‘'utf-8'’ e executado como
se tivesse sido digitado no prompt do depurador, com a exceção de que
linhas vazias e linhas iniciando com ‘#’ são ignoradas.  Isso é
particularmente útil para aliases.  Se ambos os arquivos existirem,
aquele no diretório inicial será lido primeiro e os aliases definidos
poderão ser substituídos pelo arquivo local.

Alterado na versão 3.2: ‘.pdbrc’ agora pode conter comandos que
continuam a depuração, como *note continue: 4469. ou *note next: 4471.
Anteriormente, esses comandos não tinham efeito.

Alterado na versão 3.11: ‘.pdbrc’ agora é lido com a codificação
‘'utf-8'’.  Anteriormente, ele era lido com a codificação da localidade
do sistema.

 -- Pdbcommand: h(elp) [command]

     Sem argumento, imprime a lista de comandos disponíveis.  Com um
     'command' como argumento, imprime ajuda sobre esse comando.  ‘help
     pdb’ exibe a documentação completa (a docstring do módulo *note
     pdb: a5.).  Como o argumento 'command' deve ser um identificador,
     ‘help exec’ deve ser inserido para obter ajuda sobre o comando ‘!’.

 -- Pdbcommand: w(here)

     Exibe um stack trace (situação da pilha de execução), com o quadro
     mais recente na parte inferior.  Uma seta (‘>’) indica o quadro
     atual, que determina o contexto da maioria dos comandos.

 -- Pdbcommand: d(own) [count]

     Move os níveis do quadro atual 'count' (padrão 1) para baixo no
     stack trace (para um quadro mais recente).

 -- Pdbcommand: u(p) [count]

     Move os níveis do quadro atual na 'count' (padrão 1) para cima no
     stack trace (para um quadro mais antigo).

 -- Pdbcommand: b(reak) [([filename:]lineno | function) [, condition]]

     Com um argumento 'lineno', define uma quebra na linha 'lineno' no
     arquivo atual.  O número da linha pode ser prefixado com 'filename'
     e dois pontos, para especificar um ponto de interrupção em outro
     arquivo (possivelmente um que ainda não tenha sido carregado).  O
     arquivo é pesquisado em *note sys.path: 3b4.  Formas aceitáveis de
     'filename' são ‘/caminhoabsoluto/para/arquivo.py’,
     ‘caminhorelativo/do/arquivo.py’, ‘módulo’ e ‘pacote.módulo’.

     Com um argumento 'function', define uma interrupção na primeira
     instrução executável dentro dessa função.  'function' pode ser
     qualquer expressão avaliada como uma função no espaço de nomes
     atual.

     Se um segundo argumento estiver presente, é uma expressão que deve
     ser avaliada como verdadeira antes que o ponto de interrupção seja
     respeitado.

     Sem argumento, lista todas as quebras, inclusive para cada ponto de
     interrupção, o número de vezes que o ponto de interrupção foi
     atingido, a contagem atual de ignorados e a condição associada, se
     houver.

     Cada ponto de interrupção recebe um número ao qual todos os outros
     comandos de ponto de interrupção se referem.

 -- Pdbcommand: tbreak [([filename:]lineno | function) [, condition]]

     Ponto de interrupção temporário, que é removido automaticamente
     quando é atingido pela primeira vez.  Os argumentos são os mesmos
     que para *note break: 447f.

 -- Pdbcommand: cl(ear) [filename:lineno | bpnumber ...]

     Com um argumento 'filename:lineno', limpa todos os pontos de
     interrupção nessa linha.  Com uma lista separada por espaços de
     números de ponto de interrupção, limpa esses pontos de interrupção.
     Sem argumento, limpa todas as quebras (mas primeiro pede a
     confirmação).

 -- Pdbcommand: disable bpnumber [bpnumber ...]

     Desativa os pontos de interrupção fornecidos como uma lista
     separada por espaços de números de pontos de interrupção.
     Desabilitar um ponto de interrupção significa que ele não pode
     interromper a execução do programa, mas, ao contrário de limpar um
     ponto de interrupção, ele permanece na lista de pontos de
     interrupção e pode ser (re)ativado.

 -- Pdbcommand: enable bpnumber [bpnumber ...]

     Ativa o ponto de interrupção especificado.

 -- Pdbcommand: ignore bpnumber [count]

     Define a contagem de ignorados para o número do ponto de
     interrupção especificado.  Se 'count' for omitida, a contagem de
     ignorados será definida como 0.  Um ponto de interrupção se torna
     ativo quando a contagem de ignorados é zero.  Quando diferente de
     zero, a contagem é decrementada cada vez que o ponto de interrupção
     é atingido e o ponto de interrupção não é desativado e qualquer
     condição associada é avaliada como verdadeira.

 -- Pdbcommand: condition bpnumber [condition]

     Define uma nova 'condition' para o ponto de interrupção, uma
     expressão que deve ser avaliada como verdadeira antes que o ponto
     de interrupção seja respeitado.  Se 'condition' for omitida,
     qualquer condição existente será removida; isto é, o ponto de
     interrupção é tornado incondicional.

 -- Pdbcommand: commands [bpnumber]

     Especifica uma lista de comandos para o número do ponto de
     interrupção 'bpnumber'.  Os próprios comandos aparecem nas linhas
     seguintes.  Digite em uma linha contendo apenas ‘end’ para
     finalizar os comandos.  Um exemplo:

          (Pdb) commands 1
          (com) p alguma_variável
          (com) end
          (Pdb)

     Para remover todos os comandos de um ponto de interrupção, digite
     ‘commands’ e siga-o imediatamente com ‘end’; isto é, não dê
     comandos.

     Sem argumento 'bpnumber', ‘commands’ refere-se ao último conjunto
     de pontos de interrupção.

     Você pode usar comandos de ponto de interrupção para iniciar seu
     programa novamente.  Simplesmente use o comando *note continue:
     4469, ou *note step: 4470, ou qualquer outro comando que reinicie a
     execução.

     Especificar qualquer comando que retome a execução (atualmente
     *note continue: 4469, *note step: 4470, *note next: 4471, *note
     return: 4487, *note jump: 4488, *note quit: 4489. e suas
     abreviações) finaliza a lista de comandos (como se esse comando
     fosse imediatamente seguido pelo final).  Isso ocorre sempre que
     você retoma a execução (mesmo com uma simples etapa ou etapa), você
     pode encontrar outro ponto de interrupção — que pode ter sua
     própria lista de comandos, levando a ambiguidades sobre qual lista
     executar.

     Se você usar o comando ‘silent’ na lista de comandos, a mensagem
     usual sobre a parada em um ponto de interrupção não será impressa.
     Isso pode ser desejável para pontos de interrupção que devem
     imprimir uma mensagem específica e continuar.  Se nenhum dos outros
     comandos imprimir alguma coisa, você não vê sinal de que o ponto de
     interrupção foi atingido.

 -- Pdbcommand: s(tep)

     Executa a linha atual, interrompe na primeira ocasião possível (em
     uma função chamada ou na próxima linha na função atual).

 -- Pdbcommand: n(ext)

     Continua a execução até que a próxima linha na função atual seja
     atingida ou ela retorne.  (A diferença entre *note next: 4471. e
     *note step: 4470. é que *note step: 4470. para dentro de uma função
     chamada, enquanto *note next: 4471. executa funções chamadas em
     (quase) velocidade máxima, parando apenas na próxima linha da
     função atual.)

 -- Pdbcommand: unt(il) [lineno]

     Sem argumento, continua a execução até que a linha com um número
     maior que o atual seja atingida.

     Com 'lineno', continua a execução até que uma linha com um número
     maior ou igual a 'lineno' ser alcançada.  Nos dois casos, também
     interrompe quando o quadro atual retornar.

     Alterado na versão 3.2: Permite fornecer um número de linha
     explícito.

 -- Pdbcommand: r(eturn)

     Continua a execução até que a função atual retorne.

 -- Pdbcommand: c(ont(inue))

     Continua a execução, interrompe apenas quando um ponto de
     interrupção for encontrado.

 -- Pdbcommand: j(ump) lineno

     Define a próxima linha que será executada.  Disponível apenas no
     quadro mais inferior.  Isso permite voltar e executar o código
     novamente ou avançar para pular o código que você não deseja
     executar.

     Deve-se notar que nem todos os saltos são permitidos – por exemplo,
     não é possível pular para o meio de um loop de *note for: 2f2. ou
     sair de uma cláusula *note finally: 9d2.

 -- Pdbcommand: l(ist) [first[, last]]

     Lista o código-fonte do arquivo atual.  Sem argumentos, lista 11
     linhas ao redor da linha atual ou continue a listagem anterior.
     Com ‘.’ como argumento, lista 11 linhas ao redor da linha atual.
     Com um argumento, lista 11 linhas nessa linha.  Com dois
     argumentos, lista o intervalo especificado; se o segundo argumento
     for menor que o primeiro, ele será interpretado como uma contagem.

     A linha atual no quadro atual é indicada por ‘->’.  Se uma exceção
     estiver sendo depurada, a linha em que a exceção foi originalmente
     gerada ou propagada é indicada por ‘>>’, se for diferente da linha
     atual.

     Alterado na versão 3.2: Adicionado o marcador ‘>>’.

 -- Pdbcommand: ll | longlist

     Lista todo o código-fonte da função ou quadro atual.  As linhas
     interessantes estão marcadas como para *note list: 4479.

     Adicionado na versão 3.2.

 -- Pdbcommand: a(rgs)

     Imprime os argumentos da função atual e seus valores atuais.

 -- Pdbcommand: p expression

     Avalia 'expression' no contexto atual e imprima seu valor.

          Nota: ‘print()’ também pode ser usado, mas não é um comando de
          depuração — isso executa a função Python *note print(): fa9.

 -- Pdbcommand: pp expression

     Como o comando *note p: faa, exceto que o valor de 'expression' é
     bastante impresso usando o módulo *note pprint: ae.

 -- Pdbcommand: whatis expression

     Exibe o tipo de 'expression'.

 -- Pdbcommand: source expression

     Tenta obter o código-fonte de 'expression' e exibe-o.

     Adicionado na versão 3.2.

 -- Pdbcommand: display [expression]

     Exibe o valor de 'expression' caso ela tenha sido alterada, sempre
     que a execução for interrompida no quadro atual.

     Sem 'expression', lista todas as expressões de exibição para o
     quadro atual.

          Nota: Display avalia 'expression' e compara com o resultado da
          avaliação anterior de 'expression', portanto, quando o
          resultado é mutável, display pode não ser capaz de captar as
          alterações.

     Exemplo:

          lst = []
          breakpoint()
          pass
          lst.append(1)
          print(lst)

     Display não perceberá que ‘lst’ foi alterado porque o resultado da
     avaliação foi modificado internamente por ‘lst.append(1)’ antes de
     ser comparado:

          > example.py(3)<module>()
          -> pass
          (Pdb) display lst
          display lst: []
          (Pdb) n
          > example.py(4)<module>()
          -> lst.append(1)
          (Pdb) n
          > example.py(5)<module>()
          -> print(lst)
          (Pdb)

     Você pode fazer alguns truques com o mecanismo de cópia para
     fazê-lo funcionar:

          > example.py(3)<module>()
          -> pass
          (Pdb) display lst[:]
          display lst[:]: []
          (Pdb) n
          > example.py(4)<module>()
          -> lst.append(1)
          (Pdb) n
          > example.py(5)<module>()
          -> print(lst)
          display lst[:]: [1]  [old: []]
          (Pdb)

     Adicionado na versão 3.2.

 -- Pdbcommand: undisplay [expression]

     Não exibe mais 'expression' no quadro atual.  Sem expressão, limpa
     todas as expressões de exibição para o quadro atual.

     Adicionado na versão 3.2.

 -- Pdbcommand: interact

     Inicia um interpretador interativo (usando o módulo *note code:
     1a.) em um novo espaço de nomes global inicializado a partir dos
     espaços de nomes locais e globais para o escopo atual.  Use
     ‘exit()’ ou ‘quit()’ para sair do interpretador e retornar ao
     depurador.

          Nota: Como ‘interact’ cria um novo espaço de nomes dedicado
          para execução de código, atribuições a variáveis não afetarão
          os espaços de nomes originais.  No entanto, as modificações em
          quaisquer objetos mutáveis referenciados serão refletidas nos
          espaços de nomes originais, como de costume.

     Adicionado na versão 3.2.

     Alterado na versão 3.13: ‘exit()’ e ‘quit()’ podem ser usados para
     sair do comando *note interact: 4492.

     Alterado na versão 3.13: *note interact: 4492. direciona sua saída
     para o canal de saída do depurador em vez de *note sys.stderr: 940.

 -- Pdbcommand: alias [name [command]]

     Cria um apelido chamado 'name' que executa 'command'.  O comando
     'command' 'não' deve ser colocado entre aspas.  Parâmetros
     substituíveis podem ser indicados por ‘%1’, ‘%2’, … e ‘%9’,
     enquanto ‘%*’ é substituído por todos os parâmetros.  Se 'command'
     for omitido, o apelido atual para 'name' será mostrado.  Se nenhum
     argumento for fornecido, todos os apelidos serão listados.

     Os aliases podem ser aninhados e podem conter qualquer coisa que
     possa ser digitada legalmente no prompt do pdb.  Observe que os
     comandos internos do pdb 'podem' ser substituídos por aliases.
     Esse comando é oculto até que o alias seja removido.  O alias é
     aplicado recursivamente à primeira palavra da linha de comando;
     todas as outras palavras da linha são deixadas em paz.

     Como exemplo, aqui estão dois aliases úteis (especialmente quando
     colocados no arquivo ‘.pdbrc’):

          # Exibe variáveis de instância (use em "pi classInst")
          alias pi for k in %1.__dict__.keys(): print(f"%1.{k} = {%1.__dict__[k]}")
          # Exibe variáveis de instância em self
          alias ps pi self

 -- Pdbcommand: unalias name

     Executa o alias 'name' especificado.

 -- Pdbcommand: ! statement

     Executa a instrução 'statement' (de uma só linha) no contexto do
     quadro de pilha atual.  O ponto de exclamação pode ser omitido, a
     menos que a primeira palavra da instrução seja semelhante a um
     comando de depuração, por exemplo:

          (Pdb) ! n=42
          (Pdb)

     Para definir uma variável global, você pode prefixar o comando de
     atribuição com uma instrução *note global: 18a. na mesma linha, por
     exemplo:

          (Pdb) global list_options; list_options = ['-l']
          (Pdb)

 -- Pdbcommand: run [args ...]
 -- Pdbcommand: restart [args ...]

     Reinicia o programa Python depurado.  Se 'args' for fornecido, ele
     é dividido com *note shlex: c4. e o resultado é usado como o novo
     *note sys.argv: 12a6.  Histórico, pontos de interrupção, ações e
     opções do depurador são preservados.  *note restart: 4497. é um
     apelido para *note run: 4496.

 -- Pdbcommand: q(uit)

     Sai do depurador.  O programa que está sendo executado é abortado.

 -- Pdbcommand: debug code

     Entra em um depurador recursivo que percorre 'code' (que é uma
     expressão ou instrução arbitrária a ser executada no ambiente
     atual).

 -- Pdbcommand: retval

     Exibe o valor de retorno para o último retorno de a função atual.

 -- Pdbcommand: exceptions [excnumber]

     Lista ou salta entre exceções encadeadas.

     Ao usar ‘pdb.pm()’ ou ‘Pdb.post_mortem(...)’ com uma exceção
     encadeada em vez de um traceback, permite ao usuário mover entre as
     exceções encadeadas usando o comando ‘exceptions’ para listar
     exceções e ‘exceptions <número>’ para mudar para essa exceção.

     Exemplo:

          def out():
              try:
                  middle()
              except Exception as e:
                  raise ValueError("reraise middle() error") from e

          def middle():
              try:
                  return inner(0)
              except Exception as e:
                  raise ValueError("Middle fail")

          def inner(x):
              1 / x

           out()

     chamar ‘pdb.pm()’ permitirá mover entre exceções:

          > example.py(5)out()
          -> raise ValueError("reraise middle() error") from e

          (Pdb) exceptions
            0 ZeroDivisionError('division by zero')
            1 ValueError('Middle fail')
          > 2 ValueError('reraise middle() error')

          (Pdb) exceptions 0
          > example.py(16)inner()
          -> 1 / x

          (Pdb) up
          > example.py(10)middle()
          -> return inner(0)

     Adicionado na versão 3.13.


File: python.info,  Node: Os Profilers do Python,  Next: timeit — Mede o tempo de execução de pequenos trechos de código,  Prev: pdb — O depurador do Python,  Up: Depuração e perfilamento

5.27.5 Os Profilers do Python
-----------------------------

'Código-fonte:' Lib/profile.py(1) and Lib/pstats.py(2)

__________________________________________________________________

* Menu:

* Introdução aos profilers::
* Instant User’s Manual::
* profile and cProfile Module Reference::
* A classe Stats::
* What Is Deterministic Profiling?::
* Limitações::
* Calibration::
* Using a custom timer::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/profile.py

   (2) https://github.com/python/cpython/tree/3.13/Lib/pstats.py


File: python.info,  Node: Introdução aos profilers,  Next: Instant User’s Manual,  Up: Os Profilers do Python

5.27.5.1 Introdução aos profilers
.................................

*note cProfile: 27. and *note profile: af. provide 'deterministic
profiling' of Python programs.  A 'profile' is a set of statistics that
describes how often and for how long various parts of the program
executed.  These statistics can be formatted into reports via the *note
pstats: b0. module.

A biblioteca padrão do Python tem duas implementações diferentes para a
mesma interface de profiling:

  1. *note cProfile: 27. is recommended for most users; it’s a C
     extension with reasonable overhead that makes it suitable for
     profiling long-running programs.  Based on ‘lsprof’, contributed by
     Brett Rosen and Ted Czotter.

  2. *note profile: af, a pure Python module whose interface is imitated
     by *note cProfile: 27, but which adds significant overhead to
     profiled programs.  If you’re trying to extend the profiler in some
     way, the task might be easier with this module.  Originally
     designed and written by Jim Roskind.

     Nota: The profiler modules are designed to provide an execution
     profile for a given program, not for benchmarking purposes (for
     that, there is *note timeit: ef. for reasonably accurate results).
     This particularly applies to benchmarking Python code against C
     code: the profilers introduce overhead for Python code, but not for
     C-level functions, and so the C code would seem faster than any
     Python one.


File: python.info,  Node: Instant User’s Manual,  Next: profile and cProfile Module Reference,  Prev: Introdução aos profilers,  Up: Os Profilers do Python

5.27.5.2 Instant User’s Manual
..............................

This section is provided for users that “don’t want to read the manual.”
It provides a very brief overview, and allows a user to rapidly perform
profiling on an existing application.

Para realizar profile de uma função que recebe apenas um argumento, você
pode fazer:

     import cProfile
     import re
     cProfile.run('re.compile("foo|bar")')

(Use *note profile: af. instead of *note cProfile: 27. if the latter is
not available on your system.)

The above action would run *note re.compile(): bee. and print profile
results like the following:

           214 function calls (207 primitive calls) in 0.002 seconds

     Ordered by: cumulative time

     ncalls  tottime  percall  cumtime  percall filename:lineno(function)
          1    0.000    0.000    0.002    0.002 {built-in method builtins.exec}
          1    0.000    0.000    0.001    0.001 <string>:1(<module>)
          1    0.000    0.000    0.001    0.001 __init__.py:250(compile)
          1    0.000    0.000    0.001    0.001 __init__.py:289(_compile)
          1    0.000    0.000    0.000    0.000 _compiler.py:759(compile)
          1    0.000    0.000    0.000    0.000 _parser.py:937(parse)
          1    0.000    0.000    0.000    0.000 _compiler.py:598(_code)
          1    0.000    0.000    0.000    0.000 _parser.py:435(_parse_sub)

The first line indicates that 214 calls were monitored.  Of those calls,
207 were 'primitive', meaning that the call was not induced via
recursion.  The next line: ‘Ordered by: cumulative time’ indicates the
output is sorted by the ‘cumtime’ values.  The column headings include:

ncalls

     for the number of calls.

tottime

     for the total time spent in the given function (and excluding time
     made in calls to sub-functions)

percall

     is the quotient of ‘tottime’ divided by ‘ncalls’

cumtime

     is the cumulative time spent in this and all subfunctions (from
     invocation till exit).  This figure is accurate 'even' for
     recursive functions.

percall

     is the quotient of ‘cumtime’ divided by primitive calls

filename:lineno(function)

     provides the respective data of each function

When there are two numbers in the first column (for example ‘3/1’), it
means that the function recursed.  The second value is the number of
primitive calls and the former is the total number of calls.  Note that
when the function does not recurse, these two values are the same, and
only the single figure is printed.

Instead of printing the output at the end of the profile run, you can
save the results to a file by specifying a filename to the ‘run()’
function:

     import cProfile
     import re
     cProfile.run('re.compile("foo|bar")', 'restats')

The *note pstats.Stats: 44a2. class reads profile results from a file
and formats them in various ways.  The files *note cProfile: 27. and
*note profile: af. can also be invoked as a script to profile another
script.  For example:

     python -m cProfile [-o output_file] [-s sort_order] (-m module | myscript.py)

 -- Option: -o <output_file>

     Writes the profile results to a file instead of to stdout.

 -- Option: -s <sort_order>

     Specifies one of the *note sort_stats(): 44a6. sort values to sort
     the output by.  This only applies when *note -o: 44a4. is not
     supplied.

 -- Option: -m <module>

     Specifies that a module is being profiled instead of a script.

     Adicionado na versão 3.7: Added the ‘-m’ option to *note cProfile:
     27.

     Adicionado na versão 3.8: Added the ‘-m’ option to *note profile:
     af.

The *note pstats: b0. module’s *note Stats: 44a2. class has a variety of
methods for manipulating and printing the data saved into a profile
results file:

     import pstats
     from pstats import SortKey
     p = pstats.Stats('restats')
     p.strip_dirs().sort_stats(-1).print_stats()

The *note strip_dirs(): 44a8. method removed the extraneous path from
all the module names.  The *note sort_stats(): 44a6. method sorted all
the entries according to the standard module/line/name string that is
printed.  The *note print_stats(): 44a9. method printed out all the
statistics.  You might try the following sort calls:

     p.sort_stats(SortKey.NAME)
     p.print_stats()

The first call will actually sort the list by function name, and the
second call will print out the statistics.  The following are some
interesting calls to experiment with:

     p.sort_stats(SortKey.CUMULATIVE).print_stats(10)

This sorts the profile by cumulative time in a function, and then only
prints the ten most significant lines.  If you want to understand what
algorithms are taking time, the above line is what you would use.

If you were looking to see what functions were looping a lot, and taking
a lot of time, you would do:

     p.sort_stats(SortKey.TIME).print_stats(10)

to sort according to time spent within each function, and then print the
statistics for the top ten functions.

Você pode tentar também:

     p.sort_stats(SortKey.FILENAME).print_stats('__init__')

This will sort all the statistics by file name, and then print out
statistics for only the class init methods (since they are spelled with
‘__init__’ in them).  As one final example, you could try:

     p.sort_stats(SortKey.TIME, SortKey.CUMULATIVE).print_stats(.5, 'init')

This line sorts statistics with a primary key of time, and a secondary
key of cumulative time, and then prints out some of the statistics.  To
be specific, the list is first culled down to 50% (re: ‘.5’) of its
original size, then only lines containing ‘init’ are maintained, and
that sub-sub-list is printed.

If you wondered what functions called the above functions, you could now
(‘p’ is still sorted according to the last criteria) do:

     p.print_callers(.5, 'init')

and you would get a list of callers for each of the listed functions.

If you want more functionality, you’re going to have to read the manual,
or guess what the following functions do:

     p.print_callees()
     p.add('restats')

Invoked as a script, the *note pstats: b0. module is a statistics
browser for reading and examining profile dumps.  It has a simple
line-oriented interface (implemented using *note cmd: 19.) and
interactive help.


File: python.info,  Node: profile and cProfile Module Reference,  Next: A classe Stats,  Prev: Instant User’s Manual,  Up: Os Profilers do Python

5.27.5.3 ‘profile’ and ‘cProfile’ Module Reference
..................................................

Both the *note profile: af. and *note cProfile: 27. modules provide the
following functions:

 -- Função: profile.run (command, filename=None, sort=-1)

     This function takes a single argument that can be passed to the
     *note exec(): 17f. function, and an optional file name.  In all
     cases this routine executes:

          exec(command, __main__.__dict__, __main__.__dict__)

     and gathers profiling statistics from the execution.  If no file
     name is present, then this function automatically creates a *note
     Stats: 44a2. instance and prints a simple profiling report.  If the
     sort value is specified, it is passed to this *note Stats: 44a2.
     instance to control how the results are sorted.

 -- Função: profile.runctx (command, globals, locals, filename=None,
          sort=-1)

     This function is similar to *note run(): 44ab, with added arguments
     to supply the globals and locals mappings for the 'command' string.
     This routine executes:

          exec(command, globals, locals)

     and gathers profiling statistics as in the *note run(): 44ab.
     function above.

 -- Classe: profile.Profile (timer=None, timeunit=0.0, subcalls=True,
          builtins=True)

     This class is normally only used if more precise control over
     profiling is needed than what the ‘cProfile.run()’ function
     provides.

     A custom timer can be supplied for measuring how long code takes to
     run via the 'timer' argument.  This must be a function that returns
     a single number representing the current time.  If the number is an
     integer, the 'timeunit' specifies a multiplier that specifies the
     duration of each unit of time.  For example, if the timer returns
     times measured in thousands of seconds, the time unit would be
     ‘.001’.

     Directly using the *note Profile: 9eb. class allows formatting
     profile results without writing the profile data to a file:

          import cProfile, pstats, io
          from pstats import SortKey
          pr = cProfile.Profile()
          pr.enable()
          # ... do something ...
          pr.disable()
          s = io.StringIO()
          sortby = SortKey.CUMULATIVE
          ps = pstats.Stats(pr, stream=s).sort_stats(sortby)
          ps.print_stats()
          print(s.getvalue())

     The *note Profile: 9eb. class can also be used as a context manager
     (supported only in *note cProfile: 27. module.  see *note Tipos de
     Gerenciador de Contexto: 214e.):

          import cProfile

          with cProfile.Profile() as pr:
              # ... do something ...

              pr.print_stats()

     Alterado na versão 3.8: Adicionado suporte a gerenciador de
     contexto.

      -- Método: enable ()

          Inicia a coleta de dados de profilling.  Apenas em *note
          cProfile: 27.

      -- Método: disable ()

          Para de coletar dados de profilling.  Apenas em *note
          cProfile: 27.

      -- Método: create_stats ()

          Stop collecting profiling data and record the results
          internally as the current profile.

      -- Método: print_stats (sort=-1)

          Cria um objeto *note Stats: 44a2. com base no perfil atual e
          imprime os resultados para stdout.

          The 'sort' parameter specifies the sorting order of the
          displayed statistics.  It accepts a single key or a tuple of
          keys to enable multi-level sorting, as in *note
          Stats.sort_stats: 44a6.

          Adicionado na versão 3.13: *note print_stats(): 44b0. now
          accepts a tuple of keys.

      -- Método: dump_stats (filename)

          Escreve os resultados do profile atual para 'filename'.

      -- Método: run (cmd)

          Profile the cmd via *note exec(): 17f.

      -- Método: runctx (cmd, globals, locals)

          Profile the cmd via *note exec(): 17f. with the specified
          global and local environment.

      -- Método: runcall (func, /, *args, **kwargs)

          Profile ‘func(*args, **kwargs)’

Note that profiling will only work if the called command/function
actually returns.  If the interpreter is terminated (e.g.  via a *note
sys.exit(): 138e. call during the called command/function execution) no
profiling results will be printed.


File: python.info,  Node: A classe Stats,  Next: What Is Deterministic Profiling?,  Prev: profile and cProfile Module Reference,  Up: Os Profilers do Python

5.27.5.4 A classe ‘Stats’
.........................

Analysis of the profiler data is done using the *note Stats: 44a2.
class.

 -- Classe: pstats.Stats (*filenames or profile, stream=sys.stdout)

     This class constructor creates an instance of a “statistics object”
     from a 'filename' (or list of filenames) or from a ‘Profile’
     instance.  Output will be printed to the stream specified by
     'stream'.

     The file selected by the above constructor must have been created
     by the corresponding version of *note profile: af. or *note
     cProfile: 27.  To be specific, there is 'no' file compatibility
     guaranteed with future versions of this profiler, and there is no
     compatibility with files produced by other profilers, or the same
     profiler run on a different operating system.  If several files are
     provided, all the statistics for identical functions will be
     coalesced, so that an overall view of several processes can be
     considered in a single report.  If additional files need to be
     combined with data in an existing *note Stats: 44a2. object, the
     *note add(): 44b6. method can be used.

     Instead of reading the profile data from a file, a
     ‘cProfile.Profile’ or *note profile.Profile: 9eb. object can be
     used as the profile data source.

     Os objetos de *note Stats: 44a2. tem os seguintes métodos:

      -- Método: strip_dirs ()

          This method for the *note Stats: 44a2. class removes all
          leading path information from file names.  It is very useful
          in reducing the size of the printout to fit within (close to)
          80 columns.  This method modifies the object, and the stripped
          information is lost.  After performing a strip operation, the
          object is considered to have its entries in a “random” order,
          as it was just after object initialization and loading.  If
          *note strip_dirs(): 44a8. causes two function names to be
          indistinguishable (they are on the same line of the same
          filename, and have the same function name), then the
          statistics for these two entries are accumulated into a single
          entry.

      -- Método: add (*filenames)

          This method of the *note Stats: 44a2. class accumulates
          additional profiling information into the current profiling
          object.  Its arguments should refer to filenames created by
          the corresponding version of *note profile.run(): 44ab. or
          ‘cProfile.run()’.  Statistics for identically named (re: file,
          line, name) functions are automatically accumulated into
          single function statistics.

      -- Método: dump_stats (filename)

          Save the data loaded into the *note Stats: 44a2. object to a
          file named 'filename'.  The file is created if it does not
          exist, and is overwritten if it already exists.  This is
          equivalent to the method of the same name on the *note
          profile.Profile: 9eb. and ‘cProfile.Profile’ classes.

      -- Método: sort_stats (*keys)

          This method modifies the *note Stats: 44a2. object by sorting
          it according to the supplied criteria.  The argument can be
          either a string or a SortKey enum identifying the basis of a
          sort (example: ‘'time'’, ‘'name'’, ‘SortKey.TIME’ or
          ‘SortKey.NAME’).  The SortKey enums argument have advantage
          over the string argument in that it is more robust and less
          error prone.

          When more than one key is provided, then additional keys are
          used as secondary criteria when there is equality in all keys
          selected before them.  For example, ‘sort_stats(SortKey.NAME,
          SortKey.FILE)’ will sort all the entries according to their
          function name, and resolve all ties (identical function names)
          by sorting by file name.

          For the string argument, abbreviations can be used for any key
          names, as long as the abbreviation is unambiguous.

          The following are the valid string and SortKey:

          Valid String Arg       Valid enum Arg            Significado
                                                           
          ----------------------------------------------------------------------------
                                                           
          ‘'calls'’              SortKey.CALLS             call count
                                                           
                                                           
          ‘'cumulative'’         SortKey.CUMULATIVE        cumulative time
                                                           
                                                           
          ‘'cumtime'’            N/D                       cumulative time
                                                           
                                                           
          ‘'file'’               N/D                       file name
                                                           
                                                           
          ‘'filename'’           SortKey.FILENAME          file name
                                                           
                                                           
          ‘'module'’             N/D                       file name
                                                           
                                                           
          ‘'ncalls'’             N/D                       call count
                                                           
                                                           
          ‘'pcalls'’             SortKey.PCALLS            primitive call count
                                                           
                                                           
          ‘'line'’               SortKey.LINE              line number
                                                           
                                                           
          ‘'name'’               SortKey.NAME              function name
                                                           
                                                           
          ‘'nfl'’                SortKey.NFL               name/file/line
                                                           
                                                           
          ‘'stdname'’            SortKey.STDNAME           standard name
                                                           
                                                           
          ‘'time'’               SortKey.TIME              internal time
                                                           
                                                           
          ‘'tottime'’            N/D                       internal time
                                                           

          Note that all sorts on statistics are in descending order
          (placing most time consuming items first), where as name,
          file, and line number searches are in ascending order
          (alphabetical).  The subtle distinction between ‘SortKey.NFL’
          and ‘SortKey.STDNAME’ is that the standard name is a sort of
          the name as printed, which means that the embedded line
          numbers get compared in an odd way.  For example, lines 3, 20,
          and 40 would (if the file names were the same) appear in the
          string order 20, 3 and 40.  In contrast, ‘SortKey.NFL’ does a
          numeric compare of the line numbers.  In fact,
          ‘sort_stats(SortKey.NFL)’ is the same as
          ‘sort_stats(SortKey.NAME, SortKey.FILENAME, SortKey.LINE)’.

          For backward-compatibility reasons, the numeric arguments
          ‘-1’, ‘0’, ‘1’, and ‘2’ are permitted.  They are interpreted
          as ‘'stdname'’, ‘'calls'’, ‘'time'’, and ‘'cumulative'’
          respectively.  If this old style format (numeric) is used,
          only one sort key (the numeric key) will be used, and
          additional arguments will be silently ignored.

          Adicionado na versão 3.7: Added the SortKey enum.

      -- Método: reverse_order ()

          This method for the *note Stats: 44a2. class reverses the
          ordering of the basic list within the object.  Note that by
          default ascending vs descending order is properly selected
          based on the sort key of choice.

      -- Método: print_stats (*restrictions)

          This method for the *note Stats: 44a2. class prints out a
          report as described in the *note profile.run(): 44ab.
          definition.

          The order of the printing is based on the last *note
          sort_stats(): 44a6. operation done on the object (subject to
          caveats in *note add(): 44b6. and *note strip_dirs(): 44a8.).

          The arguments provided (if any) can be used to limit the list
          down to the significant entries.  Initially, the list is taken
          to be the complete set of profiled functions.  Each
          restriction is either an integer (to select a count of lines),
          or a decimal fraction between 0.0 and 1.0 inclusive (to select
          a percentage of lines), or a string that will be interpreted
          as a regular expression (to pattern match the standard name
          that is printed).  If several restrictions are provided, then
          they are applied sequentially.  For example:

               print_stats(.1, 'foo:')

          would first limit the printing to first 10% of list, and then
          only print functions that were part of filename ‘.*foo:’.  In
          contrast, the command:

               print_stats('foo:', .1)

          would limit the list to all functions having file names
          ‘.*foo:’, and then proceed to only print the first 10% of
          them.

      -- Método: print_callers (*restrictions)

          This method for the *note Stats: 44a2. class prints a list of
          all functions that called each function in the profiled
          database.  The ordering is identical to that provided by *note
          print_stats(): 44a9, and the definition of the restricting
          argument is also identical.  Each caller is reported on its
          own line.  The format differs slightly depending on the
          profiler that produced the stats:

             * With *note profile: af, a number is shown in parentheses
               after each caller to show how many times this specific
               call was made.  For convenience, a second
               non-parenthesized number repeats the cumulative time
               spent in the function at the right.

             * With *note cProfile: 27, each caller is preceded by three
               numbers: the number of times this specific call was made,
               and the total and cumulative times spent in the current
               function while it was invoked by this specific caller.

      -- Método: print_callees (*restrictions)

          This method for the *note Stats: 44a2. class prints a list of
          all function that were called by the indicated function.
          Aside from this reversal of direction of calls (re: called vs
          was called by), the arguments and ordering are identical to
          the *note print_callers(): 44b9. method.

      -- Método: get_stats_profile ()

          This method returns an instance of StatsProfile, which
          contains a mapping of function names to instances of
          FunctionProfile.  Each FunctionProfile instance holds
          information related to the function’s profile such as how long
          the function took to run, how many times it was called, etc…

          Adicionado na versão 3.9: Added the following dataclasses:
          StatsProfile, FunctionProfile.  Added the following function:
          get_stats_profile.


File: python.info,  Node: What Is Deterministic Profiling?,  Next: Limitações,  Prev: A classe Stats,  Up: Os Profilers do Python

5.27.5.5 What Is Deterministic Profiling?
.........................................

'Deterministic profiling' is meant to reflect the fact that all
'function call', 'function return', and 'exception' events are
monitored, and precise timings are made for the intervals between these
events (during which time the user’s code is executing).  In contrast,
'statistical profiling' (which is not done by this module) randomly
samples the effective instruction pointer, and deduces where time is
being spent.  The latter technique traditionally involves less overhead
(as the code does not need to be instrumented), but provides only
relative indications of where time is being spent.

In Python, since there is an interpreter active during execution, the
presence of instrumented code is not required in order to do
deterministic profiling.  Python automatically provides a 'hook'
(optional callback) for each event.  In addition, the interpreted nature
of Python tends to add so much overhead to execution, that deterministic
profiling tends to only add small processing overhead in typical
applications.  The result is that deterministic profiling is not that
expensive, yet provides extensive run time statistics about the
execution of a Python program.

Call count statistics can be used to identify bugs in code (surprising
counts), and to identify possible inline-expansion points (high call
counts).  Internal time statistics can be used to identify “hot loops”
that should be carefully optimized.  Cumulative time statistics should
be used to identify high level errors in the selection of algorithms.
Note that the unusual handling of cumulative times in this profiler
allows statistics for recursive implementations of algorithms to be
directly compared to iterative implementations.


File: python.info,  Node: Limitações,  Next: Calibration,  Prev: What Is Deterministic Profiling?,  Up: Os Profilers do Python

5.27.5.6 Limitações
...................

One limitation has to do with accuracy of timing information.  There is
a fundamental problem with deterministic profilers involving accuracy.
The most obvious restriction is that the underlying “clock” is only
ticking at a rate (typically) of about .001 seconds.  Hence no
measurements will be more accurate than the underlying clock.  If enough
measurements are taken, then the “error” will tend to average out.
Unfortunately, removing this first error induces a second source of
error.

The second problem is that it “takes a while” from when an event is
dispatched until the profiler’s call to get the time actually 'gets' the
state of the clock.  Similarly, there is a certain lag when exiting the
profiler event handler from the time that the clock’s value was obtained
(and then squirreled away), until the user’s code is once again
executing.  As a result, functions that are called many times, or call
many functions, will typically accumulate this error.  The error that
accumulates in this fashion is typically less than the accuracy of the
clock (less than one clock tick), but it 'can' accumulate and become
very significant.

The problem is more important with *note profile: af. than with the
lower-overhead *note cProfile: 27.  For this reason, *note profile: af.
provides a means of calibrating itself for a given platform so that this
error can be probabilistically (on the average) removed.  After the
profiler is calibrated, it will be more accurate (in a least square
sense), but it will sometimes produce negative numbers (when call counts
are exceptionally low, and the gods of probability work against you :-).
)  Do 'not' be alarmed by negative numbers in the profile.  They should
'only' appear if you have calibrated your profiler, and the results are
actually better than without calibration.


File: python.info,  Node: Calibration,  Next: Using a custom timer,  Prev: Limitações,  Up: Os Profilers do Python

5.27.5.7 Calibration
....................

The profiler of the *note profile: af. module subtracts a constant from
each event handling time to compensate for the overhead of calling the
time function, and socking away the results.  By default, the constant
is 0.  The following procedure can be used to obtain a better constant
for a given platform (see *note Limitações: 44bf.).

     import profile
     pr = profile.Profile()
     for i in range(5):
         print(pr.calibrate(10000))

The method executes the number of Python calls given by the argument,
directly and again under the profiler, measuring the time for both.  It
then computes the hidden overhead per profiler event, and returns that
as a float.  For example, on a 1.8Ghz Intel Core i5 running macOS, and
using Python’s time.process_time() as the timer, the magical number is
about 4.04e-6.

The object of this exercise is to get a fairly consistent result.  If
your computer is 'very' fast, or your timer function has poor
resolution, you might have to pass 100000, or even 1000000, to get
consistent results.

When you have a consistent answer, there are three ways you can use it:

     import profile

     # 1. Apply computed bias to all Profile instances created hereafter.
     profile.Profile.bias = your_computed_bias

     # 2. Apply computed bias to a specific Profile instance.
     pr = profile.Profile()
     pr.bias = your_computed_bias

     # 3. Specify computed bias in instance constructor.
     pr = profile.Profile(bias=your_computed_bias)

If you have a choice, you are better off choosing a smaller constant,
and then your results will “less often” show up as negative in profile
statistics.


File: python.info,  Node: Using a custom timer,  Prev: Calibration,  Up: Os Profilers do Python

5.27.5.8 Using a custom timer
.............................

If you want to change how current time is determined (for example, to
force use of wall-clock time or elapsed process time), pass the timing
function you want to the ‘Profile’ class constructor:

     pr = profile.Profile(your_time_func)

The resulting profiler will then call ‘your_time_func’.  Depending on
whether you are using *note profile.Profile: 9eb. or ‘cProfile.Profile’,
‘your_time_func’’s return value will be interpreted differently:

*note profile.Profile: 9eb.

     ‘your_time_func’ should return a single number, or a list of
     numbers whose sum is the current time (like what *note os.times():
     1154. returns).  If the function returns a single time number, or
     the list of returned numbers has length 2, then you will get an
     especially fast version of the dispatch routine.

     Be warned that you should calibrate the profiler class for the
     timer function that you choose (see *note Calibration: 44c1.).  For
     most machines, a timer that returns a lone integer value will
     provide the best results in terms of low overhead during profiling.
     (*note os.times(): 1154. is 'pretty' bad, as it returns a tuple of
     floating-point values).  If you want to substitute a better timer
     in the cleanest fashion, derive a class and hardwire a replacement
     dispatch method that best handles your timer call, along with the
     appropriate calibration constant.

‘cProfile.Profile’

     ‘your_time_func’ should return a single number.  If it returns
     integers, you can also invoke the class constructor with a second
     argument specifying the real duration of one unit of time.  For
     example, if ‘your_integer_time_func’ returns times measured in
     thousands of seconds, you would construct the ‘Profile’ instance as
     follows:

          pr = cProfile.Profile(your_integer_time_func, 0.001)

     As the ‘cProfile.Profile’ class cannot be calibrated, custom timer
     functions should be used with care and should be as fast as
     possible.  For the best results with a custom timer, it might be
     necessary to hard-code it in the C source of the internal ‘_lsprof’
     module.

Python 3.3 adds several new functions in *note time: ee. that can be
used to make precise measurements of process or wall-clock time.  For
example, see *note time.perf_counter(): a92.


File: python.info,  Node: timeit — Mede o tempo de execução de pequenos trechos de código,  Next: trace — Rastreia ou acompanha a execução de instruções Python,  Prev: Os Profilers do Python,  Up: Depuração e perfilamento

5.27.6 ‘timeit’ — Mede o tempo de execução de pequenos trechos de código
------------------------------------------------------------------------

'Código-fonte:' Lib/timeit.py(1)

__________________________________________________________________

Este módulo fornece uma maneira simples de cronometrar pequenos trechos
do código Python.  Ele tem uma *note Interface de linha de comando:
44c7. e um *note chamável: 44c8.  Ele evita uma série de armadilhas
comuns para medir os tempos de execução de um script.  Veja também o
capítulo “Algorithms” de Tim Peters, na segunda edição do 'Python
Cookbook', publicado pela O’Reilly.

* Menu:

* Exemplos básicos: Exemplos básicos<2>.
* Interface em Python::
* Interface de linha de comando: Interface de linha de comando<10>.
* Exemplos: Exemplos<30>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/timeit.py


File: python.info,  Node: Exemplos básicos<2>,  Next: Interface em Python,  Up: timeit — Mede o tempo de execução de pequenos trechos de código

5.27.6.1 Exemplos básicos
.........................

O exemplo a seguir mostra como a *note Interface de linha de comando:
44c7. pode ser usado para comparar três expressões diferentes:

     $ python -m timeit "'-'.join(str(n) for n in range(100))"
     10000 loops, best of 5: 30.2 usec per loop
     $ python -m timeit "'-'.join([str(n) for n in range(100)])"
     10000 loops, best of 5: 27.5 usec per loop
     $ python -m timeit "'-'.join(map(str, range(100)))"
     10000 loops, best of 5: 23.2 usec per loop

Isso pode ser obtido da interface *note Interface em Python: 44c8.

     >>> import timeit
     >>> timeit.timeit('"-".join(str(n) for n in range(100))', number=10000)
     0.3018611848820001
     >>> timeit.timeit('"-".join([str(n) for n in range(100)])', number=10000)
     0.2727368790656328
     >>> timeit.timeit('"-".join(map(str, range(100)))', number=10000)
     0.23702679807320237

Um chamável também pode ser passado para a *note Interface em Python:
44c8.:

     >>> timeit.timeit(lambda: "-".join(map(str, range(100))), number=10000)
     0.19665591977536678

Observe, entretanto, que *note timeit(): ead. determinará
automaticamente o número de repetições somente quando a interface de
linha de comando for usada.  Na seção *note Exemplos: 44ca. você
encontrará exemplos mais avançados.


File: python.info,  Node: Interface em Python,  Next: Interface de linha de comando<10>,  Prev: Exemplos básicos<2>,  Up: timeit — Mede o tempo de execução de pequenos trechos de código

5.27.6.2 Interface em Python
............................

Este módulo define três funções e uma classe pública:

 -- Função: timeit.timeit (stmt='pass', setup='pass', timer=<default
          timer>, number=1000000, globals=None)

     Cria uma instância de *note Timer: 1510. com o código de 'setup' e
     a função 'timer' função para executar o método *note timeit(): d0e.
     com o total de execuções informado em 'number'.  O argumento
     opcional 'globals' especifica um espaço de nomes no qual o código
     será executado.

     Alterado na versão 3.5: O parâmetro opcional 'globals' foi
     adicionado.

 -- Função: timeit.repeat (stmt='pass', setup='pass', timer=<default
          timer>, repeat=5, number=1000000, globals=None)

     Cria uma instância *note Timer: 1510. com a instrução fornecida, o
     código de 'setup' e a função 'timer' e para executar o método *note
     repeat(): 44cd. com o total de execuções informando em 'repeat' e o
     'número' de execuções fornecidos.  O argumento opcional 'globals'
     especifica um espaço de nomes no qual executar o código.

     Alterado na versão 3.5: O parâmetro opcional 'globals' foi
     adicionado.

     Alterado na versão 3.7: Valor padrão de 'repetição' mudou de 3 para
     5.

 -- Função: timeit.default_timer ()

     O cronômetro padrão, que é sempre time.perf_counter(), retorna
     segundos com ponto flutuante.  Uma alternativa,
     time.perf_counter_ns, retorna um inteiro em nanossegundos.

     Alterado na versão 3.3: *note time.perf_counter(): a92. é o
     cronômetro padrão agora.

 -- Classe: timeit.Timer (stmt='pass', setup='pass', timer=<timer
          function>, globals=None)

     Classe para cronometrar a velocidade de execução de pequenos
     trechos de código.

     O construtor recebe uma instrução a ser cronometrada, uma instrução
     adicional usada para configuração e uma função de timer.  Ambas as
     instruções têm como padrão ‘'pass'’; a função de timer é dependente
     da plataforma (veja a string do documento do módulo).  'stmt' e
     'setup' também podem conter múltiplas instruções separadas por ‘;’
     ou novas linhas, desde que não contenham literais de string
     multilinhas.  A instrução será, por padrão, executada dentro do
     espaço de nomes do 'timeit'; esse comportamento pode ser controlado
     passando um espaço de nomes para 'globals'.

     Para medir o tempo de execução da primeira instrução use o método
     *note timeit(): d0e.  Os métodos *note repeat(): 44cd. e *note
     autorange(): d0d. são convenientes para chamar *note timeit(): d0e.
     várias vezes.

     O tempo de execução de 'setup' é excluído do tempo total de
     execução cronometrado.

     Os parâmetros 'stmt' e 'setup' também podem receber objetos que
     podem ser chamados sem argumentos.  Isso incorporará chamadas a
     eles em uma função de timer que será executada por *note timeit():
     d0e.  Observe que a sobrecarga de temporização é um pouco maior
     neste caso por causa das chamadas de função extras.

     Alterado na versão 3.5: O parâmetro opcional 'globals' foi
     adicionado.

      -- Método: timeit (number=1000000)

          Mede o tempo para a quantidade 'number' de execuções da
          instrução principal.  Isso executa a instrução setup uma vez
          e, em seguida, retorna o tempo necessário para executar a
          instrução principal várias vezes.  O temporizador padrão
          retorna segundos como um float.  O argumento é o número de
          vezes que o laço passa, com padrão de um milhão.  A instrução
          principal, a instrução de configuração e a função de timer a
          ser usada são passadas para o construtor.

               Nota: Por padrão, *note timeit(): d0e. desativa
               temporariamente *note coleta de lixo: 1a69. durante a
               temporização.  A vantagem dessa abordagem é que ela torna
               temporizações independentes mais comparáveis.  A
               desvantagem é que o GC pode ser um componente importante
               do desempenho da função que está sendo medida.  Se for
               assim, o GC pode ser reativado como a primeira instrução
               na string 'setup'.  Por exemplo:

                    timeit.Timer('for i in range(10): oct(i)', 'gc.enable()').timeit()

      -- Método: autorange (callback=None)

          Determina automaticamente quantas vezes chamar *note timeit():
          d0e.

          Esta é uma função de conveniência que chama *note timeit():
          d0e. repetidamente para que o tempo total seja >= 0,2
          segundos, retornando o eventual (número de voltas, tempo gasto
          para esse número de voltas).  Ela chama *note timeit(): d0e.
          com números crescentes da sequência 1, 2, 5, 10, 20, 50, … até
          que o tempo gasto seja de pelo menos 0,2 segundos.

          Se 'callback' for fornecido e não for ‘None’, ele será chamado
          após cada tentativa e tem dois argumento: ‘callback(number,
          time_taken)’.

          Adicionado na versão 3.6.

      -- Método: repeat (repeat=5, number=1000000)

          Chama *note timeit(): d0e. algumas vezes.

          Esse é um função de conveniência que chama o *note timeit():
          d0e. repetidamente e retorna uma lista de resultados.  O
          primeiro argumento especifica quantas vezes deve chamar o
          *note timeit(): d0e.  O segundo argumento especifica o
          argumento 'number' para *note timeit(): d0e.

               Nota: É tentador calcular a média e o desvio padrão do
               vetor de resultados e relatá-los.  No entanto, isso não é
               muito útil.  Em um caso típico, o menor valor fornece um
               limite inferior para a velocidade com que sua máquina
               pode executar o trecho de código fornecido; valores mais
               altos no vetor de resultados normalmente não são causados
               pela variabilidade na velocidade do Python, mas por
               outros processos que interferem na precisão do seu tempo.
               Portanto, o *note min(): f3a. do resultado é
               provavelmente o único número no qual você deve se
               interessar.  Depois disso, você deve analisar o vetor
               inteiro e aplicar o bom senso em vez de estatística.

          Alterado na versão 3.7: Valor padrão de 'repetição' mudou de 3
          para 5.

      -- Método: print_exc (file=None)

          Função auxiliar para imprimir um traceback do código
          cronometrado.

          Uso típico:

               t = Timer(...)       # fora do try/except
               try:
                   t.timeit(...)    # ou t.repeat(...)
               except Exception:
                   t.print_exc()

          A vantagem em relação ao traceback padrão é que as linhas de
          origem no modelo compilado serão exibidas.  O argumento
          opcional 'file' direciona para onde o traceback é enviado; o
          padrão é *note sys.stderr: 940.


File: python.info,  Node: Interface de linha de comando<10>,  Next: Exemplos<30>,  Prev: Interface em Python,  Up: timeit — Mede o tempo de execução de pequenos trechos de código

5.27.6.3 Interface de linha de comando
......................................

Quando chamado como um programa a partir da linha de comando, as
seguintes opções estão disponíveis:

     python -m timeit [-n N] [-r N] [-u U] [-s S] [-p] [-v] [-h] [instrução ...]

As seguintes opções são permitidas

 -- Option: -n N, --number=N

     Quantas vezes deve executar ‘statement’

 -- Option: -r N, --repeat=N

     Quantidade de vezes para repetir o cronômetro (o valor padrão é 5)

 -- Option: -s S, --setup=S

     instrução a ser executada apenas uma vez e quando iniciada (padrão
     ‘pass’ )

 -- Option: -p, --process

     mede apenas o tempo de processamento, e não o tempo total de
     execução, usando *note time.process_time(): a93. em vez de *note
     time.perf_counter(): a92, que é o padrão

     Adicionado na versão 3.3.

 -- Option: -u, --unit=U

     especifique uma unidade de tempo para a saída do cronômetro; pode
     selecionar ‘nsec’, ‘usec’, ‘msec’, ou ‘sec’

     Adicionado na versão 3.5.

 -- Option: -v, --verbose

     imprime resultados brutos de tempo; repetir para obter mais
     precisão de dígitos

 -- Option: -h, --help

     imprime uma mensagem curta de uso e sai

Uma instrução multilinha pode ser fornecida especificando cada linha
como um argumento de instrução separado; linhas indentadas são possíveis
colocando um argumento entre aspas e usando espaços à esquerda.
Múltiplas opções *note -s: 44d5. são tratadas de forma semelhante.

Se *note -n: 44d1. não for informada, um número adequado de loops será
calculado tentando adicionar números numa sequência como 1, 2, 5, 10,
20, 50, … até que o tempo total seja de pelo menos 0,2 segundos.

As medições de *note default_timer(): 44ce. podem ser afetadas por
outros programas em execução na mesma máquina, portanto, a melhor coisa
a fazer quando uma cronometragem precisa é repeti-la algumas vezes e
usar o melhor tempo.  A opção *note -r: 44d3. é boa para isso; o padrão
de 5 repetições provavelmente é suficiente na maioria dos casos.  Você
pode usar *note time.process_time(): a93. para medir o tempo de CPU.

     Nota: Há uma certa sobrecarga padrão associada à execução de uma
     instrução 'pass'.  O código aqui não tenta ocultá-lo, mas você deve
     estar ciente disso.  A sobrecarga padrão pode ser medida invocando
     pelo programa sem argumento, e pode ser diferente entre diferentes
     versões Python.


File: python.info,  Node: Exemplos<30>,  Prev: Interface de linha de comando<10>,  Up: timeit — Mede o tempo de execução de pequenos trechos de código

5.27.6.4 Exemplos
.................

É possível fornecer uma instrução de configuração que é executada apenas
uma vez no início:

     $ python -m timeit -s "text = 'sample string'; char = 'g'" "char in text"
     5000000 loops, best of 5: 0.0877 usec per loop
     $ python -m timeit -s "text = 'sample string'; char = 'g'" "text.find(char)"
     1000000 loops, best of 5: 0.342 usec per loop

Na saída, existem três campos.  A contagem de laços, que informa quantas
vezes o corpo da instrução foi executado por repetição do laço de
temporização.  A contagem de repetições (‘melhor de 5’) que informa
quantas vezes o laço de temporização foi repetido e, finalmente, o tempo
que o corpo da instrução levou, em média, na melhor repetição do laço de
temporização.  Ou seja, o tempo necessário para a repetição mais rápida
dividido pela contagem de interações.

     >>> import timeit
     >>> timeit.timeit('char in text', setup='text = "sample string"; char = "g"')
     0.41440500499993504
     >>> timeit.timeit('text.find(char)', setup='text = "sample string"; char = "g"')
     1.7246671520006203

O mesmo pode ser feito usando a classe *note Timer: 1510. e seus
métodos:

     >>> import timeit
     >>> t = timeit.Timer('char in text', setup='text = "sample string"; char = "g"')
     >>> t.timeit()
     0.3955516149999312
     >>> t.repeat()
     [0.40183617287970225, 0.37027556854118704, 0.38344867356679524, 0.3712595970846668, 0.37866875250654886]

Os exemplos a seguir mostram como cronometrar expressões que contêm
várias linhas.  Aqui comparamos o custo de usar *note hasattr(): 4d2.
vs.  *note try: 6e9./*note except: 18b. para testar atributos de objetos
presentes e ausentes:

     $ python -m timeit "try:" "  str.__bool__" "except AttributeError:" "  pass"
     20000 loops, best of 5: 15.7 usec per loop
     $ python -m timeit "if hasattr(str, '__bool__'): pass"
     50000 loops, best of 5: 4.26 usec per loop

     $ python -m timeit "try:" "  int.__bool__" "except AttributeError:" "  pass"
     200000 loops, best of 5: 1.43 usec per loop
     $ python -m timeit "if hasattr(int, '__bool__'): pass"
     100000 loops, best of 5: 2.23 usec per loop

     >>> import timeit
     >>> # atributo está em falta
     >>> s = """\
     ... try:
     ...     str.__bool__
     ... except AttributeError:
     ...     pass
     ... """
     >>> timeit.timeit(stmt=s, number=100000)
     0.9138244460009446
     >>> s = "if hasattr(str, '__bool__'): pass"
     >>> timeit.timeit(stmt=s, number=100000)
     0.5829014980008651
     >>>
     >>> # atributo está presente
     >>> s = """\
     ... try:
     ...     int.__bool__
     ... except AttributeError:
     ...     pass
     ... """
     >>> timeit.timeit(stmt=s, number=100000)
     0.04215312199994514
     >>> s = "if hasattr(int, '__bool__'): pass"
     >>> timeit.timeit(stmt=s, number=100000)
     0.08588060699912603

Para dar ao módulo *note timeit: ef. acesso as funções que você definiu,
você pode passar o parâmetro 'setup', que contém um instrução de
importar:

     def test():
         """Stupid test function"""
         L = [i for i in range(100)]

     if __name__ == '__main__':
         import timeit
         print(timeit.timeit("test()", setup="from __main__ import test"))

Outra opção é passar *note globals(): 1993. para o parâmetro 'globals',
o que fará com que o código seja executado em seu espaço de nomes
global.  Isso pode ser mais conveniente do que especificar
individualmente imports:

     def f(x):
         return x**2
     def g(x):
         return x**4
     def h(x):
         return x**8

     import timeit
     print(timeit.timeit('[func(42) for func in (f,g,h)]', globals=globals()))


File: python.info,  Node: trace — Rastreia ou acompanha a execução de instruções Python,  Next: tracemalloc — Trace memory allocations,  Prev: timeit — Mede o tempo de execução de pequenos trechos de código,  Up: Depuração e perfilamento

5.27.7 ‘trace’ — Rastreia ou acompanha a execução de instruções Python
----------------------------------------------------------------------

'Código-fonte:' Lib/trace.py(1)

__________________________________________________________________

O módulo *note trace: fd. permite que você rastreie a execução do
programa, gere listagens de cobertura de instrução anotada, imprima
relações de chamador/receptor e funções de lista executadas durante a
execução de um programa.  Ele pode ser usado em outro programa ou na
linha de comando.

Ver também
..........

Coverage.py(2)

     Uma popular ferramenta de cobertura de terceiros que fornece saída
     HTML junto com recursos avançados, como cobertura de ramificações.

* Menu:

* Uso na linha de comando: Uso na linha de comando<7>.
* Interface programática::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/trace.py

   (2) https://coverage.readthedocs.io/


File: python.info,  Node: Uso na linha de comando<7>,  Next: Interface programática,  Up: trace — Rastreia ou acompanha a execução de instruções Python

5.27.7.1 Uso na linha de comando
................................

O módulo *note trace: fd. pode ser chamado a partir da linha de comando.
Pode ser tão simples quanto:

     python -m trace --count -C . algumarquivo.py ...

O comando acima irá executar ‘algumarquivo.py’ e gerar listagens
anotadas de todos os módulos Python importados durante a execução para o
diretório atual.

 -- Option: --help

     Exibe o modo de uso e sai.

 -- Option: --version

     Exibe a versão do módulo e sai.

Adicionado na versão 3.8: Adicionada a opção ‘--module’ que permite
executar um módulo executável.

* Menu:

* Opções principais::
* Modificadores::
* Filtros::


File: python.info,  Node: Opções principais,  Next: Modificadores,  Up: Uso na linha de comando<7>

5.27.7.2 Opções principais
..........................

Pelo menos uma das seguintes opções deve ser especificada ao invocar
*note trace: fd.  A opção *note -listfuncs: 44e8. é mutuamente exclusiva
com as opções *note -trace: 44e9. e *note -count: 44ea.  Quando *note
-listfuncs: 44e8. é fornecida, nem *note -count: 44ea. nem *note -trace:
44e9. são aceitas, e vice-versa.

 -- Option: -c, --count

     Produz um conjunto de arquivos de listagem anotada após a conclusão
     do programa que mostra quantas vezes cada instrução foi executada.
     Veja também *note -coverdir: 44ec, *note -file: 44ed. e *note
     -no-report: 44ee. abaixo.

 -- Option: -t, --trace

     Exibe linhas como elas são executadas.

 -- Option: -l, --listfuncs

     Exibe as funções executadas executando o programa.

 -- Option: -r, --report

     Produz uma lista anotada de uma execução de programa anterior que
     usava a opção *note -count: 44ea. e *note -file: 44ed.  Isso não
     executa nenhum código.

 -- Option: -T, --trackcalls

     Exibe os relacionamentos de chamada expostos ao executar o
     programa.


File: python.info,  Node: Modificadores,  Next: Filtros,  Prev: Opções principais,  Up: Uso na linha de comando<7>

5.27.7.3 Modificadores
......................

 -- Option: -f, --file=<file>

     Nome de um arquivo para acumular contagens em várias execuções de
     rastreamento.  Deve ser usado com a opção *note -count: 44ea.

 -- Option: -C, --coverdir=<dir>

     Diretório para onde vão os arquivos de relatório.  O relatório de
     cobertura para ‘pacote.módulo’ é escrito em arquivo
     ‘`dir'/`pacote'/`módulo'.cover’.

 -- Option: -m, --missing

     Ao gerar listagens anotadas, marca as linhas que não foram
     executadas com ‘>>>>>>’.

 -- Option: -s, --summary

     Ao usar *note -count: 44ea. ou *note -report: 44f1, escreve um
     breve resumo no stdout para cada arquivo processado.

 -- Option: -R, --no-report

     Não gera listagens anotadas.  Isso é útil se você pretende fazer
     várias execuções com *note -count: 44ea, e então produzir um único
     conjunto de listagens anotadas no final.

 -- Option: -g, --timing

     Prefixa cada linha com o tempo desde o início do programa.  Usado
     apenas durante o rastreamento.


File: python.info,  Node: Filtros,  Prev: Modificadores,  Up: Uso na linha de comando<7>

5.27.7.4 Filtros
................

Essas opções podem ser repetidas várias vezes.

 -- Option: --ignore-module=<mod>

     Ignora cada um dos nomes de módulo fornecidos e seus submódulos (se
     for um pacote).  O argumento pode ser uma lista de nomes separados
     por uma vírgula.

 -- Option: --ignore-dir=<dir>

     Ignora todos os módulos e pacotes no diretório e subdiretórios
     nomeados.  O argumento pode ser uma lista de diretórios separados
     por *note os.pathsep: 1ecc.


File: python.info,  Node: Interface programática,  Prev: Uso na linha de comando<7>,  Up: trace — Rastreia ou acompanha a execução de instruções Python

5.27.7.5 Interface programática
...............................

 -- Classe: trace.Trace (count=1, trace=1, countfuncs=0, countcallers=0,
          ignoremods=(), ignoredirs=(), infile=None, outfile=None,
          timing=False)

     Cria um objeto para rastrear a execução de uma única instrução ou
     expressão.  Todos os parâmetros são opcionais.  'count' ativa a
     contagem de números de linha.  'trace' ativa o rastreamento de
     execução de linha.  'countfuncs' ativa a listagem das funções
     chamadas durante a execução.  'countcallers' ativa o rastreamento
     de relacionamento de chamada.  'ignoremods' é uma lista de módulos
     ou pacotes a serem ignorados.  'ignoreirs' é uma lista de
     diretórios cujos módulos ou pacotes devem ser ignorados.  'infile'
     é o nome do arquivo do qual deve ler as informações de contagem
     armazenadas.  'outfile' é o nome do arquivo no qual deve escrever
     as informações de contagem atualizadas.  'timing' ativa a exibição
     de um carimbo de data/hora relativo ao momento em que o
     rastreamento foi iniciado.

      -- Método: run (cmd)

          Executa o comando e reúne estatísticas da execução com os
          parâmetros de rastreamento atuais.  'cmd' deve ser uma string
          ou objeto código, adequado para passar para *note exec(): 17f.

      -- Método: runctx (cmd, globals=None, locals=None)

          Executa o comando e reúne estatísticas da execução com os
          parâmetros de rastreamento atuais, nos ambientes global e
          local definidos.  Se não for definido, 'globals' e 'locals'
          usam como padrão dicionários vazios.

      -- Método: runfunc (func, /, *args, **kwds)

          Chama 'func' com os argumentos fornecidos sob controle do
          objeto *note Trace: 4504. com os parâmetros de rastreamento
          atuais.

      -- Método: results ()

          Retorna um objeto *note CoverageResults: 4508. que contém os
          resultados cumulativos de todas as chamadas anteriores para
          ‘run’, ‘runctx’ e ‘runfunc’ para a instância *note Trace:
          4504. fornecida.  Não redefine os resultados de rastreamento
          acumulados.

 -- Classe: trace.CoverageResults

     Um contêiner para resultados de cobertura, criado por *note
     Trace.results(): 4507.  Não deve ser criado diretamente pelo
     usuário.

      -- Método: update (other)

          Mescla dados de outro objeto *note CoverageResults: 4508.

      -- Método: write_results (show_missing=True, summary=False,
               coverdir=None, *, ignore_missing_files=False)

          Escreve os resultados da cobertura.  Defina 'show_missing'
          para mostrar as linhas que não tiveram ocorrências.  Defina o
          'summary' para incluir na saída o resumo da cobertura por
          módulo.  'coverdir' especifica o diretório no qual os arquivos
          de resultados de cobertura serão enviados.  Se for ‘None’, os
          resultados de cada arquivo de origem são colocados em seu
          diretório.

          Se 'ignore_missing_files' for ‘True’, as contagens de
          cobertura para arquivos que não existem mais serão ignoradas
          silenciosamente.  Caso contrário, um arquivo ausente vai
          levantar *note FileNotFoundError: 42b.

          Alterado na versão 3.13: Adicionado o parâmetro
          'ignore_missing_files'.

Um exemplo simples que demonstra o uso da interface programática:

     import sys
     import trace

     # cria um objeto Trace, dizendo a ele o que ignorar e se deve
     # fazer rastreamento ou contagem de linhas ou ambos.
     tracer = trace.Trace(
         ignoredirs=[sys.prefix, sys.exec_prefix],
         trace=0,
         count=1)

     # executa o novo comando usando o rastreador fornecido
     tracer.run('main()')

     # faz um relatório, colocando a saída no diretório atual
     r = tracer.results()
     r.write_results(show_missing=True, coverdir=".")


File: python.info,  Node: tracemalloc — Trace memory allocations,  Prev: trace — Rastreia ou acompanha a execução de instruções Python,  Up: Depuração e perfilamento

5.27.8 ‘tracemalloc’ — Trace memory allocations
-----------------------------------------------

Adicionado na versão 3.4.

'Código-fonte:' Lib/tracemalloc.py(1)

__________________________________________________________________

The tracemalloc module is a debug tool to trace memory blocks allocated
by Python.  It provides the following information:

   * Traceback where an object was allocated

   * Statistics on allocated memory blocks per filename and per line
     number: total size, number and average size of allocated memory
     blocks

   * Compute the differences between two snapshots to detect memory
     leaks

To trace most memory blocks allocated by Python, the module should be
started as early as possible by setting the *note PYTHONTRACEMALLOC:
1ec4. environment variable to ‘1’, or by using *note -X: 176.
‘tracemalloc’ command line option.  The *note tracemalloc.start(): 1ec3.
function can be called at runtime to start tracing Python memory
allocations.

By default, a trace of an allocated memory block only stores the most
recent frame (1 frame).  To store 25 frames at startup: set the *note
PYTHONTRACEMALLOC: 1ec4. environment variable to ‘25’, or use the *note
-X: 176. ‘tracemalloc=25’ command line option.

* Menu:

* Exemplos: Exemplos<31>.
* API::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/tracemalloc.py


File: python.info,  Node: Exemplos<31>,  Next: API,  Up: tracemalloc — Trace memory allocations

5.27.8.1 Exemplos
.................

* Menu:

* Exibe o top 10::
* Compute differences::
* Get the traceback of a memory block::
* Pretty top::


File: python.info,  Node: Exibe o top 10,  Next: Compute differences,  Up: Exemplos<31>

5.27.8.2 Exibe o top 10
.......................

Display the 10 files allocating the most memory:

     import tracemalloc

     tracemalloc.start()

     # ... run your application ...

     snapshot = tracemalloc.take_snapshot()
     top_stats = snapshot.statistics('lineno')

     print("[ Top 10 ]")
     for stat in top_stats[:10]:
         print(stat)

Example of output of the Python test suite:

     [ Top 10 ]
     <frozen importlib._bootstrap>:716: size=4855 KiB, count=39328, average=126 B
     <frozen importlib._bootstrap>:284: size=521 KiB, count=3199, average=167 B
     /usr/lib/python3.4/collections/__init__.py:368: size=244 KiB, count=2315, average=108 B
     /usr/lib/python3.4/unittest/case.py:381: size=185 KiB, count=779, average=243 B
     /usr/lib/python3.4/unittest/case.py:402: size=154 KiB, count=378, average=416 B
     /usr/lib/python3.4/abc.py:133: size=88.7 KiB, count=347, average=262 B
     <frozen importlib._bootstrap>:1446: size=70.4 KiB, count=911, average=79 B
     <frozen importlib._bootstrap>:1454: size=52.0 KiB, count=25, average=2131 B
     <string>:5: size=49.7 KiB, count=148, average=344 B
     /usr/lib/python3.4/sysconfig.py:411: size=48.0 KiB, count=1, average=48.0 KiB

We can see that Python loaded ‘4855 KiB’ data (bytecode and constants)
from modules and that the *note collections: 1d. module allocated ‘244
KiB’ to build *note namedtuple: 1ca. types.

See *note Snapshot.statistics(): 4510. for more options.


File: python.info,  Node: Compute differences,  Next: Get the traceback of a memory block,  Prev: Exibe o top 10,  Up: Exemplos<31>

5.27.8.3 Compute differences
............................

Take two snapshots and display the differences:

     import tracemalloc
     tracemalloc.start()
     # ... start your application ...

     snapshot1 = tracemalloc.take_snapshot()
     # ... call the function leaking memory ...
     snapshot2 = tracemalloc.take_snapshot()

     top_stats = snapshot2.compare_to(snapshot1, 'lineno')

     print("[ Top 10 differences ]")
     for stat in top_stats[:10]:
         print(stat)

Example of output before/after running some tests of the Python test
suite:

     [ Top 10 differences ]
     <frozen importlib._bootstrap>:716: size=8173 KiB (+4428 KiB), count=71332 (+39369), average=117 B
     /usr/lib/python3.4/linecache.py:127: size=940 KiB (+940 KiB), count=8106 (+8106), average=119 B
     /usr/lib/python3.4/unittest/case.py:571: size=298 KiB (+298 KiB), count=589 (+589), average=519 B
     <frozen importlib._bootstrap>:284: size=1005 KiB (+166 KiB), count=7423 (+1526), average=139 B
     /usr/lib/python3.4/mimetypes.py:217: size=112 KiB (+112 KiB), count=1334 (+1334), average=86 B
     /usr/lib/python3.4/http/server.py:848: size=96.0 KiB (+96.0 KiB), count=1 (+1), average=96.0 KiB
     /usr/lib/python3.4/inspect.py:1465: size=83.5 KiB (+83.5 KiB), count=109 (+109), average=784 B
     /usr/lib/python3.4/unittest/mock.py:491: size=77.7 KiB (+77.7 KiB), count=143 (+143), average=557 B
     /usr/lib/python3.4/urllib/parse.py:476: size=71.8 KiB (+71.8 KiB), count=969 (+969), average=76 B
     /usr/lib/python3.4/contextlib.py:38: size=67.2 KiB (+67.2 KiB), count=126 (+126), average=546 B

We can see that Python has loaded ‘8173 KiB’ of module data (bytecode
and constants), and that this is ‘4428 KiB’ more than had been loaded
before the tests, when the previous snapshot was taken.  Similarly, the
*note linecache: 85. module has cached ‘940 KiB’ of Python source code
to format tracebacks, all of it since the previous snapshot.

If the system has little free memory, snapshots can be written on disk
using the *note Snapshot.dump(): 4512. method to analyze the snapshot
offline.  Then use the *note Snapshot.load(): 4513. method reload the
snapshot.


File: python.info,  Node: Get the traceback of a memory block,  Next: Pretty top,  Prev: Compute differences,  Up: Exemplos<31>

5.27.8.4 Get the traceback of a memory block
............................................

Code to display the traceback of the biggest memory block:

     import tracemalloc

     # Store 25 frames
     tracemalloc.start(25)

     # ... run your application ...

     snapshot = tracemalloc.take_snapshot()
     top_stats = snapshot.statistics('traceback')

     # pick the biggest memory block
     stat = top_stats[0]
     print("%s memory blocks: %.1f KiB" % (stat.count, stat.size / 1024))
     for line in stat.traceback.format():
         print(line)

Example of output of the Python test suite (traceback limited to 25
frames):

     903 memory blocks: 870.1 KiB
       File "<frozen importlib._bootstrap>", line 716
       File "<frozen importlib._bootstrap>", line 1036
       File "<frozen importlib._bootstrap>", line 934
       File "<frozen importlib._bootstrap>", line 1068
       File "<frozen importlib._bootstrap>", line 619
       File "<frozen importlib._bootstrap>", line 1581
       File "<frozen importlib._bootstrap>", line 1614
       File "/usr/lib/python3.4/doctest.py", line 101
         import pdb
       File "<frozen importlib._bootstrap>", line 284
       File "<frozen importlib._bootstrap>", line 938
       File "<frozen importlib._bootstrap>", line 1068
       File "<frozen importlib._bootstrap>", line 619
       File "<frozen importlib._bootstrap>", line 1581
       File "<frozen importlib._bootstrap>", line 1614
       File "/usr/lib/python3.4/test/support/__init__.py", line 1728
         import doctest
       File "/usr/lib/python3.4/test/test_pickletools.py", line 21
         support.run_doctest(pickletools)
       File "/usr/lib/python3.4/test/regrtest.py", line 1276
         test_runner()
       File "/usr/lib/python3.4/test/regrtest.py", line 976
         display_failure=not verbose)
       File "/usr/lib/python3.4/test/regrtest.py", line 761
         match_tests=ns.match_tests)
       File "/usr/lib/python3.4/test/regrtest.py", line 1563
         main()
       File "/usr/lib/python3.4/test/__main__.py", line 3
         regrtest.main_in_temp_cwd()
       File "/usr/lib/python3.4/runpy.py", line 73
         exec(code, run_globals)
       File "/usr/lib/python3.4/runpy.py", line 160
         "__main__", fname, loader, pkg_name)

We can see that the most memory was allocated in the *note importlib:
77. module to load data (bytecode and constants) from modules: ‘870.1
KiB’.  The traceback is where the *note importlib: 77. loaded data most
recently: on the ‘import pdb’ line of the *note doctest: 3a. module.
The traceback may change if a new module is loaded.


File: python.info,  Node: Pretty top,  Prev: Get the traceback of a memory block,  Up: Exemplos<31>

5.27.8.5 Pretty top
...................

Code to display the 10 lines allocating the most memory with a pretty
output, ignoring ‘<frozen importlib._bootstrap>’ and ‘<unknown>’ files:

     import linecache
     import os
     import tracemalloc

     def display_top(snapshot, key_type='lineno', limit=10):
         snapshot = snapshot.filter_traces((
             tracemalloc.Filter(False, "<frozen importlib._bootstrap>"),
             tracemalloc.Filter(False, "<unknown>"),
         ))
         top_stats = snapshot.statistics(key_type)

         print("Top %s lines" % limit)
         for index, stat in enumerate(top_stats[:limit], 1):
             frame = stat.traceback[0]
             print("#%s: %s:%s: %.1f KiB"
                   % (index, frame.filename, frame.lineno, stat.size / 1024))
             line = linecache.getline(frame.filename, frame.lineno).strip()
             if line:
                 print('    %s' % line)

         other = top_stats[limit:]
         if other:
             size = sum(stat.size for stat in other)
             print("%s other: %.1f KiB" % (len(other), size / 1024))
         total = sum(stat.size for stat in top_stats)
         print("Total allocated size: %.1f KiB" % (total / 1024))

     tracemalloc.start()

     # ... run your application ...

     snapshot = tracemalloc.take_snapshot()
     display_top(snapshot)

Example of output of the Python test suite:

     Top 10 lines
     #1: Lib/base64.py:414: 419.8 KiB
         _b85chars2 = [(a + b) for a in _b85chars for b in _b85chars]
     #2: Lib/base64.py:306: 419.8 KiB
         _a85chars2 = [(a + b) for a in _a85chars for b in _a85chars]
     #3: collections/__init__.py:368: 293.6 KiB
         exec(class_definition, namespace)
     #4: Lib/abc.py:133: 115.2 KiB
         cls = super().__new__(mcls, name, bases, namespace)
     #5: unittest/case.py:574: 103.1 KiB
         testMethod()
     #6: Lib/linecache.py:127: 95.4 KiB
         lines = fp.readlines()
     #7: urllib/parse.py:476: 71.8 KiB
         for a in _hexdig for b in _hexdig}
     #8: <string>:5: 62.0 KiB
     #9: Lib/_weakrefset.py:37: 60.0 KiB
         self.data = set()
     #10: Lib/base64.py:142: 59.8 KiB
         _b32tab2 = [a + b for a in _b32tab for b in _b32tab]
     6220 other: 3602.8 KiB
     Total allocated size: 5303.1 KiB

See *note Snapshot.statistics(): 4510. for more options.

* Menu:

* Record the current and peak size of all traced memory blocks::


File: python.info,  Node: Record the current and peak size of all traced memory blocks,  Up: Pretty top

5.27.8.6 Record the current and peak size of all traced memory blocks
.....................................................................

The following code computes two sums like ‘0 + 1 + 2 + ...’
inefficiently, by creating a list of those numbers.  This list consumes
a lot of memory temporarily.  We can use *note get_traced_memory():
4517. and *note reset_peak(): 942. to observe the small memory usage
after the sum is computed as well as the peak memory usage during the
computations:

     import tracemalloc

     tracemalloc.start()

     # Example code: compute a sum with a large temporary list
     large_sum = sum(list(range(100000)))

     first_size, first_peak = tracemalloc.get_traced_memory()

     tracemalloc.reset_peak()

     # Example code: compute a sum with a small temporary list
     small_sum = sum(list(range(1000)))

     second_size, second_peak = tracemalloc.get_traced_memory()

     print(f"{first_size=}, {first_peak=}")
     print(f"{second_size=}, {second_peak=}")

Saída:

     first_size=664, first_peak=3592984
     second_size=804, second_peak=29704

Using *note reset_peak(): 942. ensured we could accurately record the
peak during the computation of ‘small_sum’, even though it is much
smaller than the overall peak size of memory blocks since the *note
start(): 1ec3. call.  Without the call to *note reset_peak(): 942,
‘second_peak’ would still be the peak from the computation ‘large_sum’
(that is, equal to ‘first_peak’).  In this case, both peaks are much
higher than the final memory usage, and which suggests we could optimise
(by removing the unnecessary call to *note list: 611, and writing
‘sum(range(...))’).


File: python.info,  Node: API,  Prev: Exemplos<31>,  Up: tracemalloc — Trace memory allocations

5.27.8.7 API
............

* Menu:

* Funções: Funções<11>.
* DomainFilter::
* Filter::
* Frame::
* Snapshot::
* Statistic::
* StatisticDiff::
* Trace::
* Traceback::


File: python.info,  Node: Funções<11>,  Next: DomainFilter,  Up: API

5.27.8.8 Funções
................

 -- Função: tracemalloc.clear_traces ()

     Clear traces of memory blocks allocated by Python.

     See also *note stop(): 1668.

 -- Função: tracemalloc.get_object_traceback (obj)

     Get the traceback where the Python object 'obj' was allocated.
     Return a *note Traceback: bae. instance, or ‘None’ if the *note
     tracemalloc: ff. module is not tracing memory allocations or did
     not trace the allocation of the object.

     See also *note gc.get_referrers(): 807. and *note sys.getsizeof():
     1863. functions.

 -- Função: tracemalloc.get_traceback_limit ()

     Get the maximum number of frames stored in the traceback of a
     trace.

     The *note tracemalloc: ff. module must be tracing memory
     allocations to get the limit, otherwise an exception is raised.

     The limit is set by the *note start(): 1ec3. function.

 -- Função: tracemalloc.get_traced_memory ()

     Get the current size and peak size of memory blocks traced by the
     *note tracemalloc: ff. module as a tuple: ‘(current: int, peak:
     int)’.

 -- Função: tracemalloc.reset_peak ()

     Set the peak size of memory blocks traced by the *note tracemalloc:
     ff. module to the current size.

     Do nothing if the *note tracemalloc: ff. module is not tracing
     memory allocations.

     This function only modifies the recorded peak size, and does not
     modify or clear any traces, unlike *note clear_traces(): 451a.
     Snapshots taken with *note take_snapshot(): 451c. before a call to
     *note reset_peak(): 942. can be meaningfully compared to snapshots
     taken after the call.

     See also *note get_traced_memory(): 4517.

     Adicionado na versão 3.9.

 -- Função: tracemalloc.get_tracemalloc_memory ()

     Get the memory usage in bytes of the *note tracemalloc: ff. module
     used to store traces of memory blocks.  Return an *note int: 257.

 -- Função: tracemalloc.is_tracing ()

     ‘True’ if the *note tracemalloc: ff. module is tracing Python
     memory allocations, ‘False’ otherwise.

     See also *note start(): 1ec3. and *note stop(): 1668. functions.

 -- Função: tracemalloc.start (nframe: int = 1)

     Start tracing Python memory allocations: install hooks on Python
     memory allocators.  Collected tracebacks of traces will be limited
     to 'nframe' frames.  By default, a trace of a memory block only
     stores the most recent frame: the limit is ‘1’.  'nframe' must be
     greater or equal to ‘1’.

     You can still read the original number of total frames that
     composed the traceback by looking at the *note
     Traceback.total_nframe: 451f. attribute.

     Storing more than ‘1’ frame is only useful to compute statistics
     grouped by ‘'traceback'’ or to compute cumulative statistics: see
     the *note Snapshot.compare_to(): 4520. and *note
     Snapshot.statistics(): 4510. methods.

     Storing more frames increases the memory and CPU overhead of the
     *note tracemalloc: ff. module.  Use the *note
     get_tracemalloc_memory(): 451d. function to measure how much memory
     is used by the *note tracemalloc: ff. module.

     The *note PYTHONTRACEMALLOC: 1ec4. environment variable
     (‘PYTHONTRACEMALLOC=NFRAME’) and the *note -X: 176.
     ‘tracemalloc=NFRAME’ command line option can be used to start
     tracing at startup.

     See also *note stop(): 1668, *note is_tracing(): 451e. and *note
     get_traceback_limit(): 451b. functions.

 -- Função: tracemalloc.stop ()

     Stop tracing Python memory allocations: uninstall hooks on Python
     memory allocators.  Also clears all previously collected traces of
     memory blocks allocated by Python.

     Call *note take_snapshot(): 451c. function to take a snapshot of
     traces before clearing them.

     See also *note start(): 1ec3, *note is_tracing(): 451e. and *note
     clear_traces(): 451a. functions.

 -- Função: tracemalloc.take_snapshot ()

     Take a snapshot of traces of memory blocks allocated by Python.
     Return a new *note Snapshot: 4521. instance.

     The snapshot does not include memory blocks allocated before the
     *note tracemalloc: ff. module started to trace memory allocations.

     Tracebacks of traces are limited to *note get_traceback_limit():
     451b. frames.  Use the 'nframe' parameter of the *note start():
     1ec3. function to store more frames.

     The *note tracemalloc: ff. module must be tracing memory
     allocations to take a snapshot, see the *note start(): 1ec3.
     function.

     See also the *note get_object_traceback(): 1cd2. function.


File: python.info,  Node: DomainFilter,  Next: Filter,  Prev: Funções<11>,  Up: API

5.27.8.9 DomainFilter
.....................

 -- Classe: tracemalloc.DomainFilter (inclusive: bool, domain: int)

     Filter traces of memory blocks by their address space (domain).

     Adicionado na versão 3.6.

      -- Atributo: inclusive

          If 'inclusive' is ‘True’ (include), match memory blocks
          allocated in the address space *note domain: 4524.

          If 'inclusive' is ‘False’ (exclude), match memory blocks not
          allocated in the address space *note domain: 4524.

      -- Atributo: domain

          Address space of a memory block (‘int’).  Read-only property.


File: python.info,  Node: Filter,  Next: Frame,  Prev: DomainFilter,  Up: API

5.27.8.10 Filter
................

 -- Classe: tracemalloc.Filter (inclusive: bool, filename_pattern: str,
          lineno: int = None, all_frames: bool = False, domain: int =
          None)

     Filter on traces of memory blocks.

     See the *note fnmatch.fnmatch(): 19df. function for the syntax of
     'filename_pattern'.  The ‘'.pyc'’ file extension is replaced with
     ‘'.py'’.

     Exemplos:

        * ‘Filter(True, subprocess.__file__)’ only includes traces of
          the *note subprocess: d6. module

        * ‘Filter(False, tracemalloc.__file__)’ excludes traces of the
          *note tracemalloc: ff. module

        * ‘Filter(False, "<unknown>")’ excludes empty tracebacks

     Alterado na versão 3.5: The ‘'.pyo'’ file extension is no longer
     replaced with ‘'.py'’.

     Alterado na versão 3.6: Added the *note domain: 4527. attribute.

      -- Atributo: domain

          Address space of a memory block (‘int’ or ‘None’).

          tracemalloc uses the domain ‘0’ to trace memory allocations
          made by Python.  C extensions can use other domains to trace
          other resources.

      -- Atributo: inclusive

          If 'inclusive' is ‘True’ (include), only match memory blocks
          allocated in a file with a name matching *note
          filename_pattern: 4529. at line number *note lineno: 452a.

          If 'inclusive' is ‘False’ (exclude), ignore memory blocks
          allocated in a file with a name matching *note
          filename_pattern: 4529. at line number *note lineno: 452a.

      -- Atributo: lineno

          Line number (‘int’) of the filter.  If 'lineno' is ‘None’, the
          filter matches any line number.

      -- Atributo: filename_pattern

          Filename pattern of the filter (‘str’).  Read-only property.

      -- Atributo: all_frames

          If 'all_frames' is ‘True’, all frames of the traceback are
          checked.  If 'all_frames' is ‘False’, only the most recent
          frame is checked.

          This attribute has no effect if the traceback limit is ‘1’.
          See the *note get_traceback_limit(): 451b. function and *note
          Snapshot.traceback_limit: 452c. attribute.


File: python.info,  Node: Frame,  Next: Snapshot,  Prev: Filter,  Up: API

5.27.8.11 Frame
...............

 -- Classe: tracemalloc.Frame

     Frame de um Traceback

     The *note Traceback: bae. class is a sequence of *note Frame: 452e.
     instances.

      -- Atributo: filename

          Filename (‘str’).

      -- Atributo: lineno

          Número da linha (‘int’).


File: python.info,  Node: Snapshot,  Next: Statistic,  Prev: Frame,  Up: API

5.27.8.12 Snapshot
..................

 -- Classe: tracemalloc.Snapshot

     Snapshot of traces of memory blocks allocated by Python.

     The *note take_snapshot(): 451c. function creates a snapshot
     instance.

      -- Método: compare_to (old_snapshot: Snapshot, key_type: str,
               cumulative: bool = False)

          Compute the differences with an old snapshot.  Get statistics
          as a sorted list of *note StatisticDiff: 4532. instances
          grouped by 'key_type'.

          See the *note Snapshot.statistics(): 4510. method for
          'key_type' and 'cumulative' parameters.

          The result is sorted from the biggest to the smallest by:
          absolute value of *note StatisticDiff.size_diff: 4533, *note
          StatisticDiff.size: 4534, absolute value of *note
          StatisticDiff.count_diff: 4535, *note Statistic.count: 4536.
          and then by *note StatisticDiff.traceback: 4537.

      -- Método: dump (filename)

          Write the snapshot into a file.

          Use *note load(): 4513. to reload the snapshot.

      -- Método: filter_traces (filters)

          Create a new *note Snapshot: 4521. instance with a filtered
          *note traces: 4539. sequence, 'filters' is a list of *note
          DomainFilter: d12. and *note Filter: 4526. instances.  If
          'filters' is an empty list, return a new *note Snapshot: 4521.
          instance with a copy of the traces.

          All inclusive filters are applied at once, a trace is ignored
          if no inclusive filters match it.  A trace is ignored if at
          least one exclusive filter matches it.

          Alterado na versão 3.6: *note DomainFilter: d12. instances are
          now also accepted in 'filters'.

      -- Método: classmethod load (filename)

          Load a snapshot from a file.

          See also *note dump(): 4512.

      -- Método: statistics (key_type: str, cumulative: bool = False)

          Get statistics as a sorted list of *note Statistic: 453a.
          instances grouped by 'key_type':

          key_type                  description
                                    
          -------------------------------------------------------
                                    
          ‘'filename'’              filename
                                    
                                    
          ‘'lineno'’                filename and line number
                                    
                                    
          ‘'traceback'’             traceback
                                    

          If 'cumulative' is ‘True’, cumulate size and count of memory
          blocks of all frames of the traceback of a trace, not only the
          most recent frame.  The cumulative mode can only be used with
          'key_type' equals to ‘'filename'’ and ‘'lineno'’.

          The result is sorted from the biggest to the smallest by:
          *note Statistic.size: 453b, *note Statistic.count: 4536. and
          then by *note Statistic.traceback: 453c.

      -- Atributo: traceback_limit

          Maximum number of frames stored in the traceback of *note
          traces: 4539.: result of the *note get_traceback_limit():
          451b. when the snapshot was taken.

      -- Atributo: traces

          Traces of all memory blocks allocated by Python: sequence of
          *note Trace: 453d. instances.

          The sequence has an undefined order.  Use the *note
          Snapshot.statistics(): 4510. method to get a sorted list of
          statistics.


File: python.info,  Node: Statistic,  Next: StatisticDiff,  Prev: Snapshot,  Up: API

5.27.8.13 Statistic
...................

 -- Classe: tracemalloc.Statistic

     Statistic on memory allocations.

     *note Snapshot.statistics(): 4510. returns a list of *note
     Statistic: 453a. instances.

     See also the *note StatisticDiff: 4532. class.

      -- Atributo: count

          Number of memory blocks (‘int’).

      -- Atributo: size

          Total size of memory blocks in bytes (‘int’).

      -- Atributo: traceback

          Traceback where the memory block was allocated, *note
          Traceback: bae. instance.


File: python.info,  Node: StatisticDiff,  Next: Trace,  Prev: Statistic,  Up: API

5.27.8.14 StatisticDiff
.......................

 -- Classe: tracemalloc.StatisticDiff

     Statistic difference on memory allocations between an old and a new
     *note Snapshot: 4521. instance.

     *note Snapshot.compare_to(): 4520. returns a list of *note
     StatisticDiff: 4532. instances.  See also the *note Statistic:
     453a. class.

      -- Atributo: count

          Number of memory blocks in the new snapshot (‘int’): ‘0’ if
          the memory blocks have been released in the new snapshot.

      -- Atributo: count_diff

          Difference of number of memory blocks between the old and the
          new snapshots (‘int’): ‘0’ if the memory blocks have been
          allocated in the new snapshot.

      -- Atributo: size

          Total size of memory blocks in bytes in the new snapshot
          (‘int’): ‘0’ if the memory blocks have been released in the
          new snapshot.

      -- Atributo: size_diff

          Difference of total size of memory blocks in bytes between the
          old and the new snapshots (‘int’): ‘0’ if the memory blocks
          have been allocated in the new snapshot.

      -- Atributo: traceback

          Traceback where the memory blocks were allocated, *note
          Traceback: bae. instance.


File: python.info,  Node: Trace,  Next: Traceback,  Prev: StatisticDiff,  Up: API

5.27.8.15 Trace
...............

 -- Classe: tracemalloc.Trace

     Trace of a memory block.

     The *note Snapshot.traces: 4539. attribute is a sequence of *note
     Trace: 453d. instances.

     Alterado na versão 3.6: Added the *note domain: 4542. attribute.

      -- Atributo: domain

          Address space of a memory block (‘int’).  Read-only property.

          tracemalloc uses the domain ‘0’ to trace memory allocations
          made by Python.  C extensions can use other domains to trace
          other resources.

      -- Atributo: size

          Size of the memory block in bytes (‘int’).

      -- Atributo: traceback

          Traceback where the memory block was allocated, *note
          Traceback: bae. instance.


File: python.info,  Node: Traceback,  Prev: Trace,  Up: API

5.27.8.16 Traceback
...................

 -- Classe: tracemalloc.Traceback

     Sequence of *note Frame: 452e. instances sorted from the oldest
     frame to the most recent frame.

     A traceback contains at least ‘1’ frame.  If the ‘tracemalloc’
     module failed to get a frame, the filename ‘"<unknown>"’ at line
     number ‘0’ is used.

     When a snapshot is taken, tracebacks of traces are limited to *note
     get_traceback_limit(): 451b. frames.  See the *note
     take_snapshot(): 451c. function.  The original number of frames of
     the traceback is stored in the *note Traceback.total_nframe: 451f.
     attribute.  That allows to know if a traceback has been truncated
     by the traceback limit.

     The *note Trace.traceback: 4544. attribute is an instance of *note
     Traceback: bae. instance.

     Alterado na versão 3.7: Frames are now sorted from the oldest to
     the most recent, instead of most recent to oldest.

      -- Atributo: total_nframe

          Total number of frames that composed the traceback before
          truncation.  This attribute can be set to ‘None’ if the
          information is not available.

     Alterado na versão 3.9: The *note Traceback.total_nframe: 451f.
     attribute was added.

      -- Método: format (limit=None, most_recent_first=False)

          Format the traceback as a list of lines.  Use the *note
          linecache: 85. module to retrieve lines from the source code.
          If 'limit' is set, format the 'limit' most recent frames if
          'limit' is positive.  Otherwise, format the ‘abs(limit)’
          oldest frames.  If 'most_recent_first' is ‘True’, the order of
          the formatted frames is reversed, returning the most recent
          frame first instead of last.

          Similar to the *note traceback.format_tb(): 4546. function,
          except that *note format(): baf. does not include newlines.

          Exemplo:

               print("Traceback (most recent call first):")
               for line in traceback:
                   print(line)

          Saída:

               Traceback (most recent call first):
                 File "test.py", line 9
                   obj = Object()
                 File "test.py", line 12
                   tb = tracemalloc.get_object_traceback(f())


File: python.info,  Node: Empacotamento e Distribuição de Software,  Next: Serviços de Tempo de Execução Python,  Prev: Depuração e perfilamento,  Up: A Biblioteca Padrão do Python

5.28 Empacotamento e Distribuição de Software
=============================================

Essas bibliotecas ajudam você a publicar e instalar software do Python.
Embora esses módulos sejam projetados para funcionar em conjunto com o
Python Package Index(1), eles também podem ser usados com um servidor de
indexação local ou sem qualquer servidor de indexação.

* Menu:

* ensurepip — Inicialização do instalador do pip::
* venv — Criação de ambientes virtuais::
* zipapp — Gerencia arquivos zip executáveis do Python::

   ---------- Footnotes ----------

   (1) https://pypi.org


File: python.info,  Node: ensurepip — Inicialização do instalador do pip,  Next: venv — Criação de ambientes virtuais,  Up: Empacotamento e Distribuição de Software

5.28.1 ‘ensurepip’ — Inicialização do instalador do ‘pip’
---------------------------------------------------------

Adicionado na versão 3.4.

'Código-fonte:' Lib/ensurepip(1)

__________________________________________________________________

O pacote *note ensurepip: 55. fornece suporte a fazer bootstrapping, ou
seja, inicializar o instalador do ‘pip’ em uma instalação existente do
Python ou em um ambiente virtual.  Essa abordagem de bootstrapping
reflete o fato de que ‘pip’ é um projeto independente com seu próprio
ciclo de lançamento, e a última versão estável disponível é fornecida
com manutenção e lançamentos de recursos do interpretador de referência
CPython.

Na maioria dos casos, os usuários finais do Python não precisam invocar
esse módulo diretamente (como ‘pip’ deve ser inicializado por padrão),
mas pode ser necessário se a instalação do ‘pip’ foi ignorada ao
instalar o Python (ou ao criar um ambiente virtual) ou após desinstalar
explicitamente ‘pip’.

     Nota: Este módulo 'não' acessa a Internet.  Todos os componentes
     necessários para iniciar o ‘pip’ estão incluídos como partes
     internas do pacote.

Ver também
..........

*note Instalando módulos Python: f27.

     O guia do usuário final para instalar pacotes Python

PEP 453(2): Inicialização explícita de pip em instalações Python

     A justificativa e especificação originais para este módulo.

*note Disponibilidade: 1ed8.: not Android, not iOS, not WASI.

Este módulo não tem suporte em *note plataformas móveis: 1fde. ou *note
plataformas WebAssembly: 18f5.

* Menu:

* Interface de linha de comando: Interface de linha de comando<11>.
* API do módulo::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/ensurepip

   (2) https://peps.python.org/pep-0453/


File: python.info,  Node: Interface de linha de comando<11>,  Next: API do módulo,  Up: ensurepip — Inicialização do instalador do pip

5.28.1.1 Interface de linha de comando
......................................

A interface da linha de comando é chamada usando a opção ‘-m’ do
interpretador.

A invocação mais simples possível é:

     python -m ensurepip

Essa invocação instalará ‘pip’ se ainda não estiver instalada, mas, caso
contrário, não fará nada.  Para garantir que a versão instalada do ‘pip’
seja pelo menos tão recente quanto a disponível do ‘ensurepip’, passe a
opção ‘--upgrade’:

     python -m ensurepip --upgrade

Por padrão, ‘pip’ é instalado no ambiente virtual atual (se houver um
ativo) ou nos pacotes de sites do sistema (se não houver um ambiente
virtual ativo).  O local da instalação pode ser controlado através de
duas opções adicionais de linha de comando:

 -- Option: --root <dir>

     Instala ‘pip’ em relação ao diretório raiz fornecido, em vez da
     raiz do ambiente virtual atualmente ativo (se houver) ou a raiz
     padrão da instalação atual do Python.

 -- Option: --user

     Instala ‘pip’ no diretório de pacotes do site do usuário em vez de
     globalmente para a instalação atual do Python (essa opção não é
     permitida dentro de um ambiente virtual ativo).

Por padrão, os scripts ‘pipX’ e ‘pipX.Y’ serão instalados (onde X.Y
representa a versão do Python usada para invocar ‘ensurepip’).  Os
scripts instalados podem ser controlados através de duas opções
adicionais de linha de comando:

 -- Option: --altinstall

     Se uma instalação alternativa for solicitada, o script ‘pipX’ 'não'
     será instalado.

 -- Option: --default-pip

     Se uma instalação “pip padrão” for solicitada, o script ‘pip’ será
     instalado junto com os dois scripts comuns.

Fornecer as duas opções de seleção de script acionará uma exceção.


File: python.info,  Node: API do módulo,  Prev: Interface de linha de comando<11>,  Up: ensurepip — Inicialização do instalador do pip

5.28.1.2 API do módulo
......................

O *note ensurepip: 55. expõe duas funções para uso programático:

 -- Função: ensurepip.version ()

     Retorna uma string que especifica a versão disponível do pip que
     será instalado ao inicializar um ambiente.

 -- Função: ensurepip.bootstrap (root=None, upgrade=False, user=False,
          altinstall=False, default_pip=False, verbosity=0)

     Inicializa ‘pip’ no ambiente atual ou designado.

     'root' especifica um diretório raiz alternativo para instalar em
     relação a.  Se 'root' for ‘None’, a instalação utilizará o local de
     instalação padrão para o ambiente atual.

     'upgrade' indica se deve ou não atualizar uma instalação existente
     de uma versão anterior do ‘pip’ para a versão disponível.

     'user' indica se é necessário usar o esquema do usuário em vez de
     instalar globalmente.

     Por padrão, os scripts ‘pipX’ e ‘pipX.Y’ serão instalados (onde X.Y
     significa a versão atual do Python).

     Se 'altinstall' estiver definido, o ‘pipX’ 'não' será instalado.

     Se 'default_pip' estiver definido, o ‘pip’ será instalado além dos
     dois scripts comuns.

     Definir 'altinstall' e 'default_pip' acionará *note ValueError:
     202.

     'verbosity' controla o nível de saída para *note sys.stdout: ae6.
     da operação de inicialização.

     Levanta um *note evento de auditoria: 19fa. ‘ensurepip.bootstrap’
     com o argumento ‘root’.

          Nota: O processo de inicialização tem efeitos colaterais em
          ‘sys.path’ e ‘os.environ’.  Invocar a interface da linha de
          comando em um subprocesso permite que esses efeitos colaterais
          sejam evitados.

          Nota: O processo de inicialização pode instalar módulos
          adicionais exigidos pelo ‘pip’, mas outro software não deve
          presumir que essas dependências sempre estarão presentes por
          padrão (como as dependências podem ser removidas em uma versão
          futura do ‘pip’).


File: python.info,  Node: venv — Criação de ambientes virtuais,  Next: zipapp — Gerencia arquivos zip executáveis do Python,  Prev: ensurepip — Inicialização do instalador do pip,  Up: Empacotamento e Distribuição de Software

5.28.2 ‘venv’ — Criação de ambientes virtuais
---------------------------------------------

Adicionado na versão 3.3.

'Código-fonte:' Lib/venv/(1)

__________________________________________________________________

O módulo ‘venv’ oferece suporte à criação de “ambientes virtuais” leves,
cada um com seu próprio conjunto independente de pacotes Python
instalados em seus diretórios *note site: c7.  Um ambiente virtual é
criado sobre uma instalação existente do Python, conhecido como o Python
“base” do ambiente virtual, e por padrão está isolado dos pacotes no
ambiente base, de modo que apenas aqueles explicitamente instalados no
ambiente virtual estejam disponíveis.

Quando usadas em um ambiente virtual, ferramentas de instalação comuns,
como pip(2), instalarão pacotes Python em um ambiente virtual sem
precisar ser instruído a fazê-lo explicitamente.

Um ambiente virtual é (dentre outras coisas):

   * Usado para conter um interpretador Python específico e bibliotecas
     de software e binários necessários para dar suporte a um projeto
     (biblioteca ou aplicação).  Eles são, por padrão, isolados de
     software em outros ambientes virtuais e de interpretadores e
     bibliotecas Python instalados no sistema operacional.

   * Contido em um diretório, convencionalmente denominado ‘.venv’ ou
     ‘venv’ no diretório do projeto, ou em um diretório contêiner para
     vários ambientes virtuais, como ‘~/.virtualenvs’.

   * Não inserido em sistemas de controle de código-fonte, como Git.

   * Considerado descartável – deve ser simples excluí-lo e recriá-lo do
     zero.  Você não coloca nenhum código de projeto no ambiente.

   * Não é considerado móvel ou copiável – basta recriar o mesmo
     ambiente no local de destino.

Veja PEP 405(3) para mais informações sobre ambientes virtuais do
Python.

Ver também
..........

Python Packaging User Guide: Criar e usar ambientes virtuais(4)

*note Disponibilidade: 1ed8.: not Android, not iOS, not WASI.

Este módulo não tem suporte em *note plataformas móveis: 1fde. ou *note
plataformas WebAssembly: 18f5.

* Menu:

* Criando ambientes virtuais: Criando ambientes virtuais<2>.
* Como funcionam os venvs::
* API: API<2>.
* Um exemplo de extensão de EnvBuilder::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/venv/

   (2) https://pypi.org/project/pip/

   (3) https://peps.python.org/pep-0405/

   (4) 
https://packaging.python.org/pt-br/latest/guides/installing-using-pip-and-virtual-environments/#create-and-use-virtual-environments


File: python.info,  Node: Criando ambientes virtuais<2>,  Next: Como funcionam os venvs,  Up: venv — Criação de ambientes virtuais

5.28.2.1 Criando ambientes virtuais
...................................

As *note ambiente virtuais: 4557. são criadas executando o módulo
‘venv’:

     python -m venv /caminho/para/novo/ambiente/virtual

Isso cria o diretório de destino (incluindo diretórios pais conforme
necessário) e coloca um arquivo ‘pyvenv.cfg’ nele com uma chave ‘home’
apontando para a instalação do Python da qual o comando foi executado.
Ele também cria um subdiretório ‘bin’ (ou ‘Scripts’ no Windows) contendo
uma cópia ou link simbólico do executável Python (conforme apropriado
para a plataforma ou argumentos usados no momento da criação do
ambiente).  Ele também cria um subdiretório
‘lib/pythonX.Y/site-packages’ (no Windows, este é ‘Lib\site-packages’).
Se um diretório existente for especificado, ele será reutilizado.

Alterado na versão 3.5: O uso de ‘venv’ agora é recomendado para a
criação de ambientes virtuais.

Descontinuado desde a versão 3.6, removido na versão 3.8: ‘pyvenv’ era a
ferramenta recomendada para criar ambientes virtuais para Python 3.3 e
3.4, e foi substituída na versão 3.5 pela execução direta de ‘venv’.

No Windows, invoque o comando ‘venv’ da seguinte forma:

     PS> python -m venv C:\caminho\para\novo\ambiente\virtual

O comando, se executado com ‘-h’, mostrará as opções disponíveis:

     usage: venv [-h] [--system-site-packages] [--symlinks | --copies] [--clear]
                 [--upgrade] [--without-pip] [--prompt PROMPT] [--upgrade-deps]
                 [--without-scm-ignore-files]
                 ENV_DIR [ENV_DIR ...]

     Creates virtual Python environments in one or more target directories.

     Once an environment has been created, you may wish to activate it, e.g. by
     sourcing an activate script in its bin directory.

 -- Option: ENV_DIR

     Um argumento obrigatório que especifica o diretório para criar o
     ambiente.

 -- Option: --system-site-packages

     Fornece ao ambiente virtual acesso ao diretório site-packages do
     sistema.

 -- Option: --symlinks

     Tenta usar links simbólicos em vez de cópias, quando links
     simbólicos não forem o padrão para a plataforma.

 -- Option: --copies

     Tenta usar cópias em vez de links simbólicos, mesmo quando os links
     simbólicos forem o padrão para a plataforma.

 -- Option: --clear

     Exclui o conteúdo do diretório do ambiente, se ele já existir,
     antes da criação do ambiente.

 -- Option: --upgrade

     Atualiza o diretório do ambiente para usar esta versão do Python,
     supondo que o Python tenha sido atualizado no local.

 -- Option: --without-pip

     Ignora a instalação ou atualização do pip no ambiente virtual (o
     pip é inicializado por padrão).

 -- Option: --prompt <PROMPT>

     Fornece um prefixo de prompt alternativo para este ambiente.

 -- Option: --upgrade-deps

     Atualiza as dependências principais (pip) para a versão mais
     recente no PyPI.

 -- Option: --without-scm-ignore-files

     Ignora a adição de arquivos para ignorar do SCM ao diretório do
     ambiente (o Git é suportado por padrão).

Alterado na versão 3.4: Instala o pip por padrão, adicionadas as opções
‘--without-pip’ e ‘--copies’.

Alterado na versão 3.4: Nas versões anteriores, se o diretório de
destino já existia, era levantado um erro, a menos que a opção ‘--clear’
ou ‘--upgrade’ fosse fornecida.

Alterado na versão 3.9: Adiciona a opção ‘--upgrade-deps’ para atualizar
pip + setuptools para a última no PyPI.

Alterado na versão 3.12: ‘setuptools’ não é mais uma dependência central
do venv.

Alterado na versão 3.13: Adicionada a opção
‘--without-scm-ignore-files’.

Alterado na versão 3.13: ‘venv’ agora cria um arquivo ‘.gitignore’ para
Git por padrão.

     Nota: Embora haja suporte a links simbólicos no Windows, eles não
     são recomendados.  É importante notar que clicar duas vezes em
     ‘python.exe’ no Explorador de Arquivos resolverá o link simbólico
     com entusiasmo e ignorará o ambiente virtual.

     Nota: No Microsoft Windows, pode ser necessário ativar o script
     ‘Activate.ps1’, definindo a política de execução para o usuário.
     Você pode fazer isso executando o seguinte comando do PowerShell:

          PS C:\> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

     Consulte About Execution Policies(1) para mais informações.

O arquivo ‘pyvenv.cfg’ criado também inclui a chave
‘include-system-site-packages’, definida como ‘true’ se ‘venv’ for
executado com a opção ‘--system-site-packages’; caso contrário, ‘false’.

A menos que a opção ‘--without-pip’ seja dada, *note ensurepip: 55. será
chamado para inicializar o ‘pip’ no ambiente virtual.

Vários caminhos podem ser dados para ‘venv’, caso em que um ambiente
virtual idêntico será criado, de acordo com as opções fornecidas, em
cada caminho fornecido.

   ---------- Footnotes ----------

   (1) https://go.microsoft.com/fwlink/?LinkID=135170


File: python.info,  Node: Como funcionam os venvs,  Next: API<2>,  Prev: Criando ambientes virtuais<2>,  Up: venv — Criação de ambientes virtuais

5.28.2.2 Como funcionam os venvs
................................

Quando um interpretador Python está sendo executado a partir de um
ambiente virtual, *note sys.prefix: 3b6. e *note sys.exec_prefix: 3b2.
apontam para os diretórios do ambiente virtual, enquanto *note
sys.base_prefix: 3ef. e *note sys.base_exec_prefix: 3ee. apontam para
aqueles do Python base usado para criar o ambiente.  É suficiente
verificar ‘sys.prefix != sys.base_prefix’ para determinar se o
interpretador atual está sendo executado a partir de um ambiente
virtual.

Um ambiente virtual pode ser “ativado” usando um script em seu diretório
binário (‘bin’ no POSIX; ‘Scripts’ no Windows).  Isso precederá esse
diretório ao seu ‘PATH’, de modo que a execução de ‘python’ invoque o
interpretador Python do ambiente e você possa executar os scripts
instalados sem precisar usar o caminho completo.  A invocação do script
de ativação é específica da plataforma (‘<VENV>’ deve ser substituído
pelo caminho para o diretório que contém o ambiente virtual):

Plataforma        Shell            Comando para ativar o ambiente virtual
                                   
------------------------------------------------------------------------------------------
                                   
POSIX             bash/zsh         ‘$ source <VENV>/bin/activate’
                                   
                  
fish              ‘$ source
                  <VENV>/bin/activate.fish’
                  
                  
csh/tcsh          ‘$ source
                  <VENV>/bin/activate.csh’
                  
                  
pwsh              ‘$
                  <VENV>/bin/Activate.ps1’
                  
                                   
Windows           cmd.exe          ‘C:\> <VENV>\Scripts\activate.bat’
                                   
                  
PowerShell        ‘PS C:\>
                  <VENV>\Scripts\Activate.ps1’
                  

Adicionado na versão 3.4: Os scripts de ativação ‘fish’ e ‘csh’.

Adicionado na versão 3.8: Scripts de ativação de PowerShell instalados
sob POSIX para suporte a PowerShell Core.

Você não 'precisa' especificamente ativar um ambiente virtual, pois pode
apenas especificar o caminho completo para o interpretador Python desse
ambiente ao invocar o Python.  Além disso, todos os scripts instalados
no ambiente devem ser executáveis sem ativá-lo.

Para isso, os scripts instalados em ambientes virtuais possuem uma linha
“shebang” que aponta para o interpretador Python do ambiente
‘#!/<CAMINHO-PARA-VENV>/bin/python’.  Isso significa que o script será
executado com esse interpretador independentemente do valor de ‘PATH’.
No Windows, o processamento de linha “shebang” é suportado se você tiver
o *note Inicializador Python para Windows: 5be. instalado.  Assim,
clicar duas vezes em um script instalado em uma janela do Windows
Explorer deve executá-lo com o interpretador correto sem que o ambiente
precise ser ativado ou no ‘PATH’.

Quando um ambiente virtual é ativado, a variável de ambiente
‘VIRTUAL_ENV’ é definida como o caminho do ambiente.  Como não é
necessário ativar explicitamente um ambiente virtual para usá-lo,
‘VIRTUAL_ENV’ não pode ser usado para determinar se um ambiente virtual
está sendo usado.

     Aviso: Como os scripts instalados em ambientes não devem esperar
     que o ambiente seja ativado, suas linhas shebang contêm os caminhos
     absolutos para os interpretadores de seus ambientes.  Por causa
     disso, os ambientes são inerentemente não portáteis, no caso geral.
     Você sempre deve ter um meio simples de recriar um ambiente (por
     exemplo, se você tiver um arquivo de requisitos ‘requirements.txt’,
     você pode invocar ‘pip install -r requirements.txt’ usando o ‘pip’
     do ambiente para instalar todos os pacotes necessários para o
     ambiente).  Se por algum motivo você precisar mover o ambiente para
     um novo local, deverá recriá-lo no local desejado e excluir o do
     local antigo.  Se você mover um ambiente porque moveu um diretório
     pai dele, deverá recriar o ambiente em seu novo local.  Caso
     contrário, o software instalado no ambiente pode não funcionar
     conforme o esperado.

Você pode desativar um ambiente virtual digitando ‘deactivate’ em seu
shell.  O mecanismo exato é específico da plataforma e é um detalhe de
implementação interna (normalmente, um script ou função de shell será
usado).


File: python.info,  Node: API<2>,  Next: Um exemplo de extensão de EnvBuilder,  Prev: Como funcionam os venvs,  Up: venv — Criação de ambientes virtuais

5.28.2.3 API
............

O método de alto nível descrito acima utiliza uma API simples que
fornece mecanismos para que criadores de ambientes virtuais de terceiros
personalizem a criação do ambiente de acordo com suas necessidades, a
classe *note EnvBuilder: 26a.

 -- Classe: venv.EnvBuilder (system_site_packages=False, clear=False,
          symlinks=False, upgrade=False, with_pip=False, prompt=None,
          upgrade_deps=False, *, scm_ignore_files=frozenset())

     A classe *note EnvBuilder: 26a. aceita os seguintes argumentos
     nomeados na instanciação:

        * 'system_site_packages' – um valor booleano indicando que os
          pacotes de sites do sistema Python devem estar disponíveis
          para o ambiente (o padrão é ‘False’).

        * 'clear' – um valor booleano que, se verdadeiro, excluirá o
          conteúdo de qualquer diretório de destino existente, antes de
          criar o ambiente.

        * 'symlinks' – um valor booleano que indica se você deseja
          vincular o binário Python ao invés de copiar.

        * 'upgrade' – um valor booleano que, se verdadeiro, atualizará
          um ambiente existente com o Python em execução - para uso
          quando o Python tiver sido atualizado localmente (o padrão é
          ‘False’).

        * 'with_pip' – um valor booleano que, se verdadeiro, garante que
          o pip seja instalado no ambiente virtual.  Isso usa *note
          ensurepip: 55. com a opção ‘--default-pip’.

        * 'prompt' – uma string a ser usada após o ambiente virtual ser
          ativado (o padrão é ‘None’, o que significa que o nome do
          diretório do ambiente seria usado).  Se a string especial
          ‘"."’ for fornecida, o nome da base do diretório atual será
          usado como prompt.

        * 'upgrade_deps' – Atualiza os módulos base do venv para os mais
          recentes no PyPI

        * 'scm_ignore_files' – Cria arquivos com lista de ignorados com
          base nos gerenciadores de controle de fonte (SCM)
          especificados no iterável.  O suporte é definido por ter um
          método chamado ‘create_{scm}_ignore_file’.  O único valor
          suportado por padrão é ‘"git"’ via *note
          create_git_ignore_file(): 4567.

     Alterado na versão 3.4: Adicionado o parâmetro ‘with_pip’

     Alterado na versão 3.6: Adicionado o parâmetro ‘prompt’

     Alterado na versão 3.9: Adicionado o parâmetro ‘upgrade_deps’

     Alterado na versão 3.13: Adicionado o parâmetro ‘scm_ignore_files’

     *note EnvBuilder: 26a. pode ser usado como uma classe base.

      -- Método: create (env_dir)

          Cria um ambiente virtual especificando o diretório de destino
          (absoluto ou relativo ao diretório atual) que deve conter o
          ambiente virtual.  O método ‘create’ cria o ambiente no
          diretório especificado ou levanta uma exceção apropriada.

          O método ‘create’ da classe *note EnvBuilder: 26a. ilustra os
          ganchos disponíveis para personalização de subclasse:

               def create(self, env_dir):
                   """
                   Cria um ambiente Python virtualizado em um diretório.
                   env_dir é o diretório de destino para criar um ambiente.
                   """
                   env_dir = os.path.abspath(env_dir)
                   context = self.ensure_directories(env_dir)
                   self.create_configuration(context)
                   self.setup_python(context)
                   self.setup_scripts(context)
                   self.post_setup(context)

          Cada um dos métodos *note ensure_directories(): 4569, *note
          create_configuration(): 456a, *note setup_python(): 456b,
          *note setup_scripts(): 456c. e *note post_setup(): 456d. pode
          ser substituído.

      -- Método: ensure_directories (env_dir)

          Cria o diretório do ambiente e todos os subdiretórios
          necessários que ainda não existem e retorna um objeto de
          contexto.  Este objeto de contexto é apenas um detentor de
          atributos (como caminhos) para uso pelos outros métodos.  Se o
          *note EnvBuilder: 26a. for criado com o argumento
          ‘clear=True’, o conteúdo do diretório do ambiente será limpo e
          todos os subdiretórios necessários serão recriados.

          O objeto de contexto retornado é um *note
          types.SimpleNamespace: 1d1. com os seguintes atributos:

             * ‘env_dir’ - A localização do ambiente virtual.  Usado
               para ‘__VENV_DIR__’ em scripts de ativação (veja *note
               install_scripts(): 456e.).

             * ‘env_name’ - O nome do ambiente virtual.  Usado para
               ‘__VENV_NAME__’ em scripts de ativação (veja *note
               install_scripts(): 456e.).

             * ‘prompt’ - O prompt a ser usado pelos scripts de
               ativação.  Usado para ‘__VENV_PROMPT__’ em scripts de
               ativação (veja *note install_scripts(): 456e.).

             * ‘executable’ - O executável Python subjacente usado pelo
               ambiente virtual.  Isso leva em consideração o caso em
               que um ambiente virtual é criado a partir de outro
               ambiente virtual.

             * ‘inc_path’ - O caminho de inclusão para o ambiente
               virtual.

             * ‘lib_path’ - O caminho purelib para o ambiente virtual.

             * ‘bin_path’ - O caminho do script para o ambiente virtual.

             * ‘bin_name’ - O nome do caminho do script relativo ao
               local do ambiente virtual.  Usado para
               ‘__VENV_BIN_NAME__’ em scripts de ativação (consulte
               *note install_scripts(): 456e.).

             * ‘env_exe’ - O nome do interpretador Python no ambiente
               virtual.  Usado para ‘__VENV_PYTHON__’ em scripts de
               ativação (veja *note install_scripts(): 456e.).

             * ‘env_exec_cmd’ - O nome do interpretador Python, levando
               em consideração os redirecionamentos do sistema de
               arquivos.  Isso pode ser usado para executar o Python no
               ambiente virtual.

          Alterado na versão 3.11: O *note esquema de instalação de
          sysconfig: 68f. do 'venv' é usado para construir os caminhos
          dos diretórios criados.

          Alterado na versão 3.12: O atributo ‘lib_path’ foi adicionado
          ao contexto, e o objeto de contexto foi documentado.

      -- Método: create_configuration (context)

          Cria o arquivo de configuração ‘pyvenv.cfg’ no ambiente.

      -- Método: setup_python (context)

          Cria uma cópia ou link simbólico para o executável Python no
          ambiente.  Nos sistemas POSIX, se um executável específico
          ‘python3.x’ foi usado, links simbólicos para ‘python’ e
          ‘python3’ serão criados apontando para esse executável, a
          menos que já existam arquivos com esses nomes.

      -- Método: setup_scripts (context)

          Instala scripts de ativação apropriados para a plataforma no
          ambiente virtual.

      -- Método: upgrade_dependencies (context)

          Atualiza os principais pacotes de dependência do venv
          (atualmente pip(1)) no ambiente.  Isso é feito através da
          distribuição do executável ‘pip’ no ambiente.

          Adicionado na versão 3.9.

          Alterado na versão 3.12: setuptools(2) não é mais uma
          dependência central do venv.

      -- Método: post_setup (context)

          Um método de espaço reservado que pode ser substituído em
          implementações de terceiros para pré-instalar pacotes no
          ambiente virtual ou executar outras etapas pós-criação.

      -- Método: install_scripts (context, path)

          Este método utilitário que pode ser chamado de *note
          setup_scripts(): 456c. ou *note post_setup(): 456d. nas
          subclasses para ajudar na instalação de scripts personalizados
          no ambiente virtual.

          'path' é o caminho para um diretório que deve conter
          subdiretórios ‘common’, ‘posix’, ‘nt’; cada um contendo
          scripts destinados ao diretório ‘bin’ no ambiente.  O conteúdo
          de ‘common’ e o diretório correspondente a *note os.name:
          2ce3. são copiados após alguma substituição de texto dos
          espaços reservados:

             * ‘__VENV_DIR__’ é substituído pelo caminho absoluto do
               diretório do ambiente.

             * ‘__VENV_NAME__’ é substituído pelo nome do ambiente
               (segmento do caminho final do diretório do ambiente).

             * ‘__VENV_PROMPT__’ é substituído pelo prompt (o nome do
               ambiente entre parênteses e com o seguinte espaço)

             * ‘__VENV_BIN_NAME__’ é substituído pelo nome do diretório
               bin (‘bin’ ou ‘Scripts’).

             * ‘__VENV_PYTHON__’ é substituído pelo caminho absoluto do
               executável do ambiente.

          É permitido que os diretórios existam (para quando um ambiente
          existente estiver sendo atualizado).

      -- Método: create_git_ignore_file (context)

          Cria um arquivo ‘.gitignore’ dentro do ambiente virtual que
          faz com que todo o diretório seja ignorado pelo gerenciador de
          controle de fonte Git.

          Adicionado na versão 3.13.

     Alterado na versão 3.7.2: O Windows agora usa scripts
     redirecionadores para ‘python[w].exe’ em vez de copiar os binários
     reais.  No 3.7.2, somente *note setup_python(): 456b. não faz nada
     a menos que seja executado a partir de uma construção na árvore de
     origem.

     Alterado na versão 3.7.3: O Windows copia os scripts
     redirecionadores como parte do *note setup_python(): 456b. em vez
     de *note setup_scripts(): 456c.  Este não foi o caso em 3.7.2.  Ao
     usar links simbólicos, será feito link para os executáveis
     originais.

Há também uma função de conveniência no nível do módulo:

 -- Função: venv.create (env_dir, system_site_packages=False,
          clear=False, symlinks=False, with_pip=False, prompt=None,
          upgrade_deps=False, *, scm_ignore_files=frozenset())

     Cria um *note EnvBuilder: 26a. com os argumentos nomeados
     fornecidos e chame seu método *note create(): 4568. com o argumento
     'env_dir'.

     Adicionado na versão 3.3.

     Alterado na versão 3.4: Adicionado o parâmetro 'with_pip'

     Alterado na versão 3.6: Adicionado o parâmetro 'prompt'

     Alterado na versão 3.9: Adicionado o parâmetro 'upgrade_deps'

     Alterado na versão 3.13: Adicionado o parâmetro 'scm_ignore_files'

   ---------- Footnotes ----------

   (1) https://pypi.org/project/pip/

   (2) https://pypi.org/project/setuptools/


File: python.info,  Node: Um exemplo de extensão de EnvBuilder,  Prev: API<2>,  Up: venv — Criação de ambientes virtuais

5.28.2.4 Um exemplo de extensão de ‘EnvBuilder’
...............................................

O script a seguir mostra como estender *note EnvBuilder: 26a.
implementando uma subclasse que instala setuptools e pip em um ambiente
virtual criado:

     import os
     import os.path
     from subprocess import Popen, PIPE
     import sys
     from threading import Thread
     from urllib.parse import urlparse
     from urllib.request import urlretrieve
     import venv

     class ExtendedEnvBuilder(venv.EnvBuilder):
         """
         This builder installs setuptools and pip so that you can pip or
         easy_install other packages into the created virtual environment.

         :param nodist: If true, setuptools and pip are not installed into the
                        created virtual environment.
         :param nopip: If true, pip is not installed into the created
                       virtual environment.
         :param progress: If setuptools or pip are installed, the progress of the
                          installation can be monitored by passing a progress
                          callable. If specified, it is called with two
                          arguments: a string indicating some progress, and a
                          context indicating where the string is coming from.
                          The context argument can have one of three values:
                          'main', indicating that it is called from virtualize()
                          itself, and 'stdout' and 'stderr', which are obtained
                          by reading lines from the output streams of a subprocess
                          which is used to install the app.

                          If a callable is not specified, default progress
                          information is output to sys.stderr.
         """

         def __init__(self, *args, **kwargs):
             self.nodist = kwargs.pop('nodist', False)
             self.nopip = kwargs.pop('nopip', False)
             self.progress = kwargs.pop('progress', None)
             self.verbose = kwargs.pop('verbose', False)
             super().__init__(*args, **kwargs)

         def post_setup(self, context):
             """
             Set up any packages which need to be pre-installed into the
             virtual environment being created.

             :param context: The information for the virtual environment
                             creation request being processed.
             """
             os.environ['VIRTUAL_ENV'] = context.env_dir
             if not self.nodist:
                 self.install_setuptools(context)
             # Can't install pip without setuptools
             if not self.nopip and not self.nodist:
                 self.install_pip(context)

         def reader(self, stream, context):
             """
             Read lines from a subprocess' output stream and either pass to a progress
             callable (if specified) or write progress information to sys.stderr.
             """
             progress = self.progress
             while True:
                 s = stream.readline()
                 if not s:
                     break
                 if progress is not None:
                     progress(s, context)
                 else:
                     if not self.verbose:
                         sys.stderr.write('.')
                     else:
                         sys.stderr.write(s.decode('utf-8'))
                     sys.stderr.flush()
             stream.close()

         def install_script(self, context, name, url):
             _, _, path, _, _, _ = urlparse(url)
             fn = os.path.split(path)[-1]
             binpath = context.bin_path
             distpath = os.path.join(binpath, fn)
             # Download script into the virtual environment's binaries folder
             urlretrieve(url, distpath)
             progress = self.progress
             if self.verbose:
                 term = '\n'
             else:
                 term = ''
             if progress is not None:
                 progress('Installing %s ...%s' % (name, term), 'main')
             else:
                 sys.stderr.write('Installing %s ...%s' % (name, term))
                 sys.stderr.flush()
             # Install in the virtual environment
             args = [context.env_exe, fn]
             p = Popen(args, stdout=PIPE, stderr=PIPE, cwd=binpath)
             t1 = Thread(target=self.reader, args=(p.stdout, 'stdout'))
             t1.start()
             t2 = Thread(target=self.reader, args=(p.stderr, 'stderr'))
             t2.start()
             p.wait()
             t1.join()
             t2.join()
             if progress is not None:
                 progress('done.', 'main')
             else:
                 sys.stderr.write('done.\n')
             # Clean up - no longer needed
             os.unlink(distpath)

         def install_setuptools(self, context):
             """
             Install setuptools in the virtual environment.

             :param context: The information for the virtual environment
                             creation request being processed.
             """
             url = "https://bootstrap.pypa.io/ez_setup.py"
             self.install_script(context, 'setuptools', url)
             # clear up the setuptools archive which gets downloaded
             pred = lambda o: o.startswith('setuptools-') and o.endswith('.tar.gz')
             files = filter(pred, os.listdir(context.bin_path))
             for f in files:
                 f = os.path.join(context.bin_path, f)
                 os.unlink(f)

         def install_pip(self, context):
             """
             Install pip in the virtual environment.

             :param context: The information for the virtual environment
                             creation request being processed.
             """
             url = 'https://bootstrap.pypa.io/get-pip.py'
             self.install_script(context, 'pip', url)


     def main(args=None):
         import argparse

         parser = argparse.ArgumentParser(prog=__name__,
                                          description='Creates virtual Python '
                                                      'environments in one or '
                                                      'more target '
                                                      'directories.')
         parser.add_argument('dirs', metavar='ENV_DIR', nargs='+',
                             help='A directory in which to create the '
                                  'virtual environment.')
         parser.add_argument('--no-setuptools', default=False,
                             action='store_true', dest='nodist',
                             help="Don't install setuptools or pip in the "
                                  "virtual environment.")
         parser.add_argument('--no-pip', default=False,
                             action='store_true', dest='nopip',
                             help="Don't install pip in the virtual "
                                  "environment.")
         parser.add_argument('--system-site-packages', default=False,
                             action='store_true', dest='system_site',
                             help='Give the virtual environment access to the '
                                  'system site-packages dir.')
         if os.name == 'nt':
             use_symlinks = False
         else:
             use_symlinks = True
         parser.add_argument('--symlinks', default=use_symlinks,
                             action='store_true', dest='symlinks',
                             help='Try to use symlinks rather than copies, '
                                  'when symlinks are not the default for '
                                  'the platform.')
         parser.add_argument('--clear', default=False, action='store_true',
                             dest='clear', help='Delete the contents of the '
                                                'virtual environment '
                                                'directory if it already '
                                                'exists, before virtual '
                                                'environment creation.')
         parser.add_argument('--upgrade', default=False, action='store_true',
                             dest='upgrade', help='Upgrade the virtual '
                                                  'environment directory to '
                                                  'use this version of '
                                                  'Python, assuming Python '
                                                  'has been upgraded '
                                                  'in-place.')
         parser.add_argument('--verbose', default=False, action='store_true',
                             dest='verbose', help='Display the output '
                                                  'from the scripts which '
                                                  'install setuptools and pip.')
         options = parser.parse_args(args)
         if options.upgrade and options.clear:
             raise ValueError('you cannot supply --upgrade and --clear together.')
         builder = ExtendedEnvBuilder(system_site_packages=options.system_site,
                                        clear=options.clear,
                                        symlinks=options.symlinks,
                                        upgrade=options.upgrade,
                                        nodist=options.nodist,
                                        nopip=options.nopip,
                                        verbose=options.verbose)
         for d in options.dirs:
             builder.create(d)

     if __name__ == '__main__':
         rc = 1
         try:
             main()
             rc = 0
         except Exception as e:
             print('Error: %s' % e, file=sys.stderr)
         sys.exit(rc)

Esse script também está disponível para download online(1).

   ---------- Footnotes ----------

   (1) https://gist.github.com/vsajip/4673395


File: python.info,  Node: zipapp — Gerencia arquivos zip executáveis do Python,  Prev: venv — Criação de ambientes virtuais,  Up: Empacotamento e Distribuição de Software

5.28.3 ‘zipapp’ — Gerencia arquivos zip executáveis do Python
-------------------------------------------------------------

Adicionado na versão 3.5.

'Código-fonte:' Lib/zipapp.py(1)

__________________________________________________________________

Este módulo fornece ferramentas para gerenciar a criação de arquivos zip
contendo código Python, que pode ser *note executado diretamente pelo
interpretador Python: 1eb3.  O módulo fornece uma *note Interface de
linha de comando: 4574. e uma *note API do Python: 4575.

* Menu:

* Exemplo básico::
* Interface de linha de comando: Interface de linha de comando<12>.
* API do Python::
* Exemplos: Exemplos<32>.
* Especificando o interpretador::
* Criando aplicações autônomas com zipapp::
* O formato de arquivo da aplicação zip Python::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/zipapp.py


File: python.info,  Node: Exemplo básico,  Next: Interface de linha de comando<12>,  Up: zipapp — Gerencia arquivos zip executáveis do Python

5.28.3.1 Exemplo básico
.......................

O exemplo a seguir mostra como a *note Interface de linha de comando:
4574. pode ser usada para criar um arquivo executável a partir de um
diretório contendo código Python.  Quando executado, o arquivo executará
a função ‘main’ do módulo ‘myapp’ no arquivo.

     $ python -m zipapp myapp -m "myapp:main"
     $ python myapp.pyz
     <output from myapp>


File: python.info,  Node: Interface de linha de comando<12>,  Next: API do Python,  Prev: Exemplo básico,  Up: zipapp — Gerencia arquivos zip executáveis do Python

5.28.3.2 Interface de linha de comando
......................................

Quando chamado como um programa a partir da linha de comando, as
seguintes opções estão disponíveis:

     $ python -m zipapp source [options]

Se 'source' for um diretório, isso criará um arquivo a partir do
conteúdo de 'source'.  Se 'source' for um arquivo, ele deve ser um
arquivo, e será copiado para o arquivo de destino (ou o conteúdo de sua
linha shebang será exibido se a opção –info for especificada).

As seguintes opções são compreendidas:

 -- Option: -o <output>, --output=<output>

     Escreve a saída em um arquivo chamado 'output'.  Se essa opção não
     for especificada, o nome do arquivo de saída será o mesmo que o
     'source' de entrada, com a extensão ‘.pyz’ adicionada.  Se um nome
     de arquivo explícito for fornecido, ele será usado como está (então
     uma extensão ‘.pyz’ deve ser incluída se necessário).

     Um nome de arquivo de saída deve ser especificado se 'source' for
     um arquivo (e nesse caso, 'output' não deve ser o mesmo que
     'source').

 -- Option: -p <interpreter>, --python=<interpreter>

     Adiciona uma linha ‘#!’ ao arquivo especificando 'interpreter' como
     o comando a ser executado.  Além disso, no POSIX, torne o arquivo
     executável.  O padrão é não escrever nenhuma linha ‘#!’ e não
     tornar o arquivo executável.

 -- Option: -m <mainfn>, --main=<mainfn>

     Escreve um arquivo ‘__main__.py’ no arquivo que executa 'mainfn'.
     O argumento 'mainfn' deve ter o formato “pkg.mod:fn”, onde
     “pkg.mod” é um pacote/módulo no arquivo, e “fn” é um chamável no
     módulo fornecido.  O arquivo ‘__main__.py’ executará esse chamável.

     *note -main: 457c. não pode ser especificado ao copiar um arquivo.

 -- Option: -c, --compress

     Compacta arquivos com o método deflate, reduzindo o tamanho do
     arquivo de saída.  Por padrão, os arquivos são armazenados
     descompactados no arquivo.

     *note -compress: 457e. não tem efeito ao copiar um arquivo.

     Adicionado na versão 3.7.

 -- Option: --info

     Exibe o interpretador incorporado no arquivo, para fins de
     diagnóstico.  Neste caso, quaisquer outras opções são ignoradas e
     SOURCE deve ser um arquivo, não um diretório.

 -- Option: -h, --help

     Exibe uma mensagem curta de uso e sai


File: python.info,  Node: API do Python,  Next: Exemplos<32>,  Prev: Interface de linha de comando<12>,  Up: zipapp — Gerencia arquivos zip executáveis do Python

5.28.3.3 API do Python
......................

O módulo define duas funções de conveniência:

 -- Função: zipapp.create_archive (source, target=None,
          interpreter=None, main=None, filter=None, compressed=False)

     Cria um arquivo de aplicação a partir de 'source'.  A fonte pode
     ser qualquer um dos seguintes:

        * O nome de um diretório, ou um *note objeto caminho ou similar:
          2a0. referente a um diretório, caso em que um novo arquivo de
          aplicação será criado a partir do conteúdo desse diretório.

        * O nome de um arquivo de aplicação existente, ou um *note
          objeto caminho ou similar: 2a0. referindo-se a tal arquivo, em
          cujo caso o arquivo é copiado para o alvo (modificando-o para
          refletir o valor dado para o argumento 'interpreter').  O nome
          do arquivo deve incluir a extensão ‘.pyz’, se necessário.

        * Um objeto arquivo aberto para leitura no modo bytes.  O
          conteúdo do arquivo deve ser um arquivo de aplicação, e o
          objeto arquivo é presumido como estando posicionado no início
          do arquivo.

     O argumento 'target' determina onde o arquivo resultante será
     escrito:

        * Se for o nome de um arquivo ou um *note objeto caminho ou
          similar: 2a0, o arquivo será escrito nesse arquivo.

        * Se for um objeto arquivo aberto, o arquivo será escrito
          naquele objeto arquivo, que deve estar aberto para escrita no
          modo bytes.

        * Se o destino for omitido (ou ‘Nenhum’), a fonte deverá ser um
          diretório e o destino será um arquivo com o mesmo nome da
          fonte, com uma extensão ‘.pyz’ adicionada.

     O argumento 'interpreter' especifica o nome do interpretador Python
     com o qual o arquivo será executado.  Ele é escrito como uma linha
     “shebang” no início do arquivo.  No POSIX, isso será interpretado
     pelo sistema operacional, e no Windows será manipulado pelo
     inicializador Python.  Omitir o 'interpreter' resulta em nenhuma
     linha shebang sendo escrita.  Se um interpretador for especificado,
     e o alvo for um nome de arquivo, o bit executável do arquivo alvo
     será definido.

     O argumento 'main' especifica o nome de um chamável que será usado
     como o programa principal para o arquivo.  Ele só pode ser
     especificado se a fonte for um diretório, e a fonte ainda não
     contiver um arquivo ‘__main__.py’.  O argumento 'main' deve ter o
     formato “pkg.módulo:chamável” e o arquivo será executado importando
     “pkg.módulo” e executando o chamável fornecido sem argumentos.  É
     um erro omitir 'main' se a fonte for um diretório e não contiver um
     arquivo ‘__main__.py’, pois, caso contrário, o arquivo resultante
     não seria executável.

     O argumento opcional 'filter' especifica uma função de retorno de
     chamada que recebe um objeto Path representando o caminho para o
     arquivo que está sendo adicionado (relativo ao diretório da fonte).
     Ele deve retornar ‘True’ se o arquivo for adicionado.

     O argumento opcional 'compressed' determina se os arquivos são
     compactados.  Se definido como ‘True’, os arquivos no arquivo são
     compactados com o método deflate; caso contrário, os arquivos são
     armazenados descompactados.  Este argumento não tem efeito ao
     copiar um arquivo existente.

     Se um objeto arquivo for especificado para 'source' ou 'target', é
     responsabilidade do chamador fechá-lo após chamar create_archive.

     Ao copiar um arquivo existente, os objetos arquivo fornecidos
     precisam apenas dos métodos ‘read’ e ‘readline’ ou ‘write’.  Ao
     criar um arquivo de um diretório, se o alvo for um objeto arquivo,
     ele será passado para a classe ‘zipfile.ZipFile’ e deve fornecer os
     métodos necessários para essa classe.

     Alterado na versão 3.7: Adicionados os parâmetros 'filter' e
     'compressed'.

 -- Função: zipapp.get_interpreter (archive)

     Retorna o interpretador especificado na linha ‘#!’ no início do
     arquivo.  Se não houver nenhuma linha ‘#!’, retorna *note None:
     675.  O argumento 'archive' pode ser um nome de arquivo ou um
     objeto arquivo ou similar aberto para leitura no modo bytes.  É
     presumido esteja no início do arquivo.


File: python.info,  Node: Exemplos<32>,  Next: Especificando o interpretador,  Prev: API do Python,  Up: zipapp — Gerencia arquivos zip executáveis do Python

5.28.3.4 Exemplos
.................

Compacte um diretório em um arquivo e execute-o.

     $ python -m zipapp myapp
     $ python myapp.pyz
     <output from myapp>

O mesmo pode ser feito usando a função *note create_archive(): bc8.:

     >>> import zipapp
     >>> zipapp.create_archive('myapp', 'myapp.pyz')

Para tornar o aplicativo diretamente executável no POSIX, especifique um
interpretador a ser usado.

     $ python -m zipapp myapp -p "/usr/bin/env python"
     $ ./myapp.pyz
     <saída de myapp>

Para substituir a linha shebang em um arquivo existente, crie um arquivo
modificado usando a função *note create_archive(): bc8.:

     >>> import zipapp
     >>> zipapp.create_archive('old_archive.pyz', 'new_archive.pyz', '/usr/bin/python3')

Para atualizar o arquivo no local, faça a substituição na memória usando
um objeto *note BytesIO: ed3. e, em seguida, sobrescreva a fonte depois.
Observe que há um risco ao sobrescrever um arquivo no local de que um
erro resultará na perda do arquivo original.  Este código não protege
contra tais erros, mas o código de produção deve fazê-lo.  Além disso,
este método só funcionará se o arquivo couber na memória:

     >>> import zipapp
     >>> import io
     >>> temp = io.BytesIO()
     >>> zipapp.create_archive('myapp.pyz', temp, '/usr/bin/python2')
     >>> with open('myapp.pyz', 'wb') as f:
     >>>     f.write(temp.getvalue())


File: python.info,  Node: Especificando o interpretador,  Next: Criando aplicações autônomas com zipapp,  Prev: Exemplos<32>,  Up: zipapp — Gerencia arquivos zip executáveis do Python

5.28.3.5 Especificando o interpretador
......................................

Observe que se você especificar um interpretador e então distribuir seu
arquivo de aplicação, você precisa garantir que o interpretador usado
seja portátil.  O inicializador Python para Windows oferece suporte às
formas mais comuns da linha POSIX ‘#!’, mas há outras questões a serem
consideradas:

   * Se você usar “/usr/bin/env python” (ou outras formas do comando
     “python”, como “/usr/bin/python”), você precisa considerar que seus
     usuários podem ter Python 2 ou Python 3 como padrão, e escrever seu
     código para funcionar em ambas as versões.

   * Se você usar uma versão explícita, por exemplo “/usr/bin/env
     python3”, sua aplicação não funcionará para usuários que não tenham
     essa versão.  (Isso pode ser o que você quer se não tiver tornado
     seu código compatível com Python 2).

   * Não há como dizer “python X.Y ou posterior”, então tome cuidado ao
     usar uma versão exata como “/usr/bin/env python3.4”, pois você
     precisará alterar sua linha shebang para usuários do Python 3.5,
     por exemplo.

Normalmente, você deve usar “/usr/bin/env python2” ou “/usr/bin/env
python3”, dependendo se seu código foi escrito para Python 2 ou 3.


File: python.info,  Node: Criando aplicações autônomas com zipapp,  Next: O formato de arquivo da aplicação zip Python,  Prev: Especificando o interpretador,  Up: zipapp — Gerencia arquivos zip executáveis do Python

5.28.3.6 Criando aplicações autônomas com zipapp
................................................

Usando o módulo *note zipapp: 130, é possível criar programas Python
autocontidos, que podem ser distribuídos para usuários finais que
precisam apenas ter uma versão adequada do Python instalada em seu
sistema.  A chave para fazer isso é agrupar todas as dependências da
aplicação no arquivo, junto com o código da aplicação.

As etapas para criar um arquivo autônomo são as seguintes:

  1. Crie sua aplicação em um diretório normalmente, para que você tenha
     um diretório ‘myapp’ contendo um arquivo ‘__main__.py’ e qualquer
     código de aplicação de suporte.

  2. Instale todas as dependências da sua aplicação no diretório
     ‘myapp’, usando pip:

          $ python -m pip install -r requirements.txt --target myapp

     (isso presume que você tenha os requisitos do seu projeto em um
     arquivo ‘requirements.txt’ - caso contrário, você pode simplesmente
     listar as dependências manualmente na linha de comando do pip).

  3. Empacote a aplicação usando:

          $ python -m zipapp -p "interpreter" myapp

Isso produzirá um executável autônomo, que pode ser executado em
qualquer máquina com o interpretador apropriado disponível.  Veja *note
Especificando o interpretador: 4588. para detalhes.  Ele pode ser
enviado aos usuários como um único arquivo.

No Unix, o arquivo ‘myapp.pyz’ é executável como está.  Você pode
renomear o arquivo para remover a extensão ‘.pyz’ se preferir um nome de
comando “simples”.  No Windows, o arquivo ‘myapp.pyz[w]’ é executável em
virtude do fato de que o interpretador Python registra as extensões de
arquivo ‘.pyz’ e ‘.pyzw’ quando instalado.

* Menu:

* Advertência::


File: python.info,  Node: Advertência,  Up: Criando aplicações autônomas com zipapp

5.28.3.7 Advertência
....................

Se sua aplicação depende de um pacote que inclui uma extensão C, esse
pacote não pode ser executado a partir de um arquivo zip (essa é uma
limitação do sistema operacional, pois o código executável deve estar
presente no sistema de arquivos para que o carregador do sistema
operacional o carregue).  Nesse caso, você pode excluir essa dependência
do arquivo zip e exigir que seus usuários o tenham instalado ou enviá-lo
junto com seu arquivo zip e adicionar código ao seu ‘__main__.py’ para
incluir o diretório que contém o módulo descompactado em ‘sys.path’.
Nesse caso, você precisará certificar-se de enviar binários apropriados
para sua(s) arquitetura(s) de destino (e potencialmente escolher a
versão correta para adicionar ao ‘sys.path’ no tempo de execução, com
base na máquina do usuário).


File: python.info,  Node: O formato de arquivo da aplicação zip Python,  Prev: Criando aplicações autônomas com zipapp,  Up: zipapp — Gerencia arquivos zip executáveis do Python

5.28.3.8 O formato de arquivo da aplicação zip Python
.....................................................

O Python tem sido capaz de executar arquivos zip que contêm um arquivo
‘__main__.py’ desde a versão 2.6.  Para ser executado pelo Python, um
arquivo de aplicação simplesmente tem que ser um arquivo zip padrão
contendo um arquivo ‘__main__.py’ que será executado como o ponto de
entrada para o aplicativo.  Como de costume para qualquer script Python,
o pai do script (neste caso, o arquivo zip) será colocado em *note
sys.path: 3b4. e, portanto, outros módulos podem ser importados do
arquivo zip.

O formato de arquivo zip permite que dados arbitrários sejam prefixados
a um arquivo zip.  O formato de aplicação zip usa essa habilidade para
prefixar uma linha “shebang” padrão POSIX ao arquivo
(‘#!/caminho/para/interpretador’).

Formalmente, o formato de aplicação zip Python é:

  1. Uma linha shebang opcional, contendo os caracteres ‘b'#!'’ seguidos
     por um nome de interpretador e, em seguida, um caractere de nova
     linha (‘b'\n'’).  O nome do interpretador pode ser qualquer coisa
     aceitável para o processamento “shebang” do sistema operacional ou
     o inicializador Python no Windows.  O interpretador deve ser
     codificado em UTF-8 no Windows e em *note
     sys.getfilesystemencoding(): c74. no POSIX.

  2. Dados padrão do zipfile, conforme gerados pelo módulo *note
     zipfile: 131.  O conteúdo do zipfile 'deve' incluir um arquivo
     chamado ‘__main__.py’ (que deve estar na “raiz” do zipfile - ou
     seja, não pode estar em um subdiretório).  Os dados do zipfile
     podem ser compactados ou descompactados.

Se um arquivo de aplicação tiver uma linha shebang, ele poderá ter o bit
executável definido em sistemas POSIX, para permitir que seja executado
diretamente.

Não há exigência de que as ferramentas neste módulo sejam usadas para
criar arquivos de aplicações - o módulo é uma conveniência, mas arquivos
no formato acima criados por qualquer meio são aceitáveis para Python.


File: python.info,  Node: Serviços de Tempo de Execução Python,  Next: Interpretadores Python Personalizados,  Prev: Empacotamento e Distribuição de Software,  Up: A Biblioteca Padrão do Python

5.29 Serviços de Tempo de Execução Python
=========================================

Os módulos descritos neste capítulo oferecem uma ampla gama de serviços
relacionados ao interpretador Python e sua interação com o ambiente.
Aqui está uma visão geral:

* Menu:

* sys — Parâmetros e funções específicas do sistema::
* sys.monitoring — Monitoramento de eventos de execução: sys monitoring — Monitoramento de eventos de execução.
* sysconfig — Fornece acesso às informações de configuração do Python::
* builtins — Objetos embutidos::
* __main__ — Ambiente de código principal::
* warnings — Controle de avisos::
* dataclasses — Data Classes::
* contextlib — Utilitários para contextos da instrução with::
* abc — Classes base abstratas::
* atexit — Manipuladores de saída::
* traceback — Imprime ou recupera um traceback da pilha::
* __future__ — Definições de instruções future::
* gc — Interface para o coletor de lixo::
* inspect — Inspecione objetos vivos::
* site — Gancho de configuração específico do site::


File: python.info,  Node: sys — Parâmetros e funções específicas do sistema,  Next: sys monitoring — Monitoramento de eventos de execução,  Up: Serviços de Tempo de Execução Python

5.29.1 ‘sys’ — Parâmetros e funções específicas do sistema
----------------------------------------------------------

__________________________________________________________________

Este módulo fornece acesso a algumas variáveis usadas ou mantidas pelo
interpretador e a funções que interagem fortemente com o interpretador.
Sempre disponível.  A menos que explicitamente indicado o contrário,
todas as variáveis são somente leitura.

 -- Dado: sys.abiflags

     Em sistemas POSIX onde Python foi construído com o script
     ‘configure’ padrão, ele contém os sinalizadores ABI conforme
     especificado por PEP 3149(1).

     Adicionado na versão 3.2.

     Alterado na versão 3.8: Os sinalizadores padrões se tornaram uma
     string vazia (o sinalizador ‘m’ para pymalloc foi removido).

     *note Disponibilidade: 1ed8.: Unix.

 -- Função: sys.addaudithook (hook)

     Anexa o 'hook' chamável à lista de ganchos de auditoria ativos para
     o (sub)interpretador atual.

     Quando um evento de auditoria é levantado através da função *note
     sys.audit(): 16a0, cada gancho será chamado na ordem em que foi
     adicionado com o nome do evento e a tupla de argumentos.  Ganchos
     nativos adicionados por *note PySys_AddAuditHook(): 43fd. são
     chamados primeiro, seguidos por ganchos adicionados no
     (sub)interpretador atual.  Os ganchos podem registrar o evento,
     levantar uma exceção para cancelar a operação ou encerrar o
     processo completamente.

     Observe que os ganchos de auditoria são principalmente para coletar
     informações sobre ações internas ou não observáveis, seja por
     Python ou bibliotecas escritas em Python.  Eles não são adequados
     para implementar um ambiente isolado estilo “sandbox”.  Em
     particular, o código malicioso pode desabilitar ou ignorar os
     ganchos adicionados usando esta função.  No mínimo, quaisquer
     ganchos sensíveis à segurança devem ser adicionados usando a API C
     *note PySys_AddAuditHook(): 43fd. antes de inicializar o tempo de
     execução, e quaisquer módulos que permitam modificação arbitrária
     da memória (como *note ctypes: 2a.) devem ser completamente
     removidos ou monitorados de perto.

     Chamar *note sys.addaudithook(): 43fc. levantará um evento de
     auditoria denominado ‘sys.addaudithook’ sem argumentos.  Se
     qualquer gancho existente levantar uma exceção derivada de *note
     RuntimeError: 195, o novo gancho não será adicionado e a exceção
     será suprimida.  Como resultado, os chamadores não podem presumir
     que seu gancho foi adicionado, a menos que controlem todos os
     ganchos existentes.

     Veja *note tabela de eventos de auditoria: 199c. para todos os
     eventos levantados pelo CPython, e PEP 578(2) para a discussão do
     projeto original.

     Adicionado na versão 3.8.

     Alterado na versão 3.8.1: Exceções derivadas de *note Exception:
     9e2, mas não de *note RuntimeError: 195, não são mais suprimidas.

     Quando o rastreamento está ativado (consulte *note settrace():
     1547.), os ganchos do Python são rastreados apenas se o chamável
     tiver um membro ‘__cantrace__’ definido como um valor verdadeiro.
     Caso contrário, as funções de rastreamento ignorarão o gancho.

 -- Dado: sys.argv

     A lista de argumentos de linha de comando passados para um script
     Python.  ‘argv[0]’ é o nome do script (depende do sistema
     operacional se este é um nome de caminho completo ou não).  Se o
     comando foi executado usando a opção de linha de comando *note -c:
     5e0. para o interpretador, ‘argv[0]’ é definido como a string
     ‘'-c'’.  Se nenhum nome de script foi passado para o interpretador
     Python, ‘argv[0]’ é a string vazia.

     Para percorrer a entrada padrão ou a lista de arquivos fornecida na
     linha de comando, consulte o módulo *note fileinput: 5b.

     Veja também *note sys.orig_argv: 843.

          Nota: No Unix, os argumentos da linha de comando são passados
          por bytes do sistema operacional.  O Python os decodifica com
          a codificação do sistema de arquivos e o tratador de erros
          “surrogateescape”.  Quando você precisar de bytes originais,
          você pode obtê-los por ‘[os.fsencode(arg) for arg in
          sys.argv]’.

 -- Função: sys.audit (event, *args)

     Levanta um evento de auditoria e aciona quaisquer ganchos de
     auditoria ativos.  'event' é uma string que identifica o evento e
     'args' pode conter argumentos opcionais com mais informações sobre
     o evento.  O número e os tipos de argumentos para um determinado
     evento são considerados uma API pública e estável e não devem ser
     modificados entre as versões.

     Por exemplo, um evento de auditoria é denominado ‘os.chdir’.  Este
     evento tem um argumento chamado 'path' que conterá o novo diretório
     de trabalho solicitado.

     *note sys.audit(): 16a0. chamará os ganchos de auditoria
     existentes, passando o nome do evento e os argumentos, e levantará
     novamente a primeira exceção de qualquer gancho.  Em geral, se uma
     exceção for levantada, ela não deve ser tratada e o processo deve
     ser encerrado o mais rápido possível.  Isso permite que as
     implementações de gancho decidam como responder a eventos
     específicos: elas podem simplesmente registrar o evento ou abortar
     a operação levantando uma exceção.

     Ganchos são adicionados usando as funções *note sys.addaudithook():
     43fc. ou *note PySys_AddAuditHook(): 43fd.

     O equivalente nativo desta função é *note PySys_Audit(): 36f.  Usar
     a função nativa é preferível quando possível.

     Veja *note tabela de eventos de auditoria: 199c. para todos os
     eventos levantados pelo CPython.

     Adicionado na versão 3.8.

 -- Dado: sys.base_exec_prefix

     Definido durante a inicialização do Python, antes de ‘site.py’ ser
     executado, para o mesmo valor que *note exec_prefix: 3b2.  Se não
     estiver executando em um *note ambiente virtual: 4557, os valores
     permanecerão os mesmos; se ‘site.py’ descobrir que um ambiente
     virtual está em uso, os valores de *note prefix: 3b6. e *note
     exec_prefix: 3b2. serão alterados para apontar para o ambiente
     virtual, enquanto *note base_prefix: 3ef. e *note base_exec_prefix:
     3ee. permanecerá apontando para a instalação base do Python (aquela
     a partir da qual o ambiente virtual foi criado).

     Adicionado na versão 3.3.

 -- Dado: sys.base_prefix

     Definido durante a inicialização do Python, antes de ‘site.py’ ser
     executado, para o mesmo valor que *note prefix: 3b6.  Se não
     estiver executando em um *note ambiente virtual: 4557, os valores
     permanecerão os mesmos; se ‘site.py’ descobrir que um ambiente
     virtual está em uso, os valores de *note prefix: 3b6. e *note
     exec_prefix: 3b2. serão alterados para apontar para o ambiente
     virtual, enquanto *note base_prefix: 3ef. e *note base_exec_prefix:
     3ee. permanecerá apontando para a instalação base do Python (aquela
     a partir da qual o ambiente virtual foi criado).

     Adicionado na versão 3.3.

 -- Dado: sys.byteorder

     Um indicador da ordem nativa de bytes.  Isso terá o valor ‘'big'’
     em plataformas big endian (byte mais significativo primeiro) e
     ‘'little'’ em plataformas little endian (byte menos significativo
     primeiro).

 -- Dado: sys.builtin_module_names

     Uma tupla de strings contendo os nomes de todos os módulos
     compilados neste interpretador Python.  (Esta informação não está
     disponível de nenhuma outra forma — ‘modules.keys()’ apenas lista
     os módulos importados.)

     Veja também a lista de *note sys.stdlib_module_names: 844.

 -- Função: sys.call_tracing (func, args)

     Chama ‘func(*args)’, enquanto o rastreamento está habilitado.  O
     estado de rastreamento é salvo e restaurado posteriormente.  Isso
     deve ser chamado de um depurador de um ponto de verificação, para
     depurar ou analisar o desempenho recursivamente algum outro código.

     O rastreamento é suspenso ao chamar uma função de rastreamento
     definida por *note settrace(): 1547. ou *note setprofile(): 1546.
     para evitar recursão infinita.  ‘call_tracing()’ habilita a
     recursão explícita da função de rastreamento.

 -- Dado: sys.copyright

     Uma string contendo os direitos autorais pertencentes ao
     interpretador Python.

 -- Função: sys._clear_type_cache ()

     Limpa o cache de tipo interno.  O cache de tipo é usado para
     acelerar pesquisas de atributos e métodos.  Use a função 'apenas'
     para descartar referências desnecessárias durante a depuração de
     vazamento de referência.

     Esta função deve ser usada apenas para fins internos e
     especializados.

     Descontinuado desde a versão 3.13: Em vez disso, use a função mais
     geral *note _clear_internal_caches(): 1766.

 -- Função: sys._clear_internal_caches ()

     Limpa todos os caches internos relacionados ao desempenho.  Use
     esta função 'somente' para liberar referências e blocos de memória
     desnecessários ao procurar por vazamentos.

     Adicionado na versão 3.13.

 -- Função: sys._current_frames ()

     Retorna um dicionário mapeando o identificador de cada encadeamento
     ('thread') para o quadro de pilha mais alto atualmente ativo nesse
     encadeamento no momento em que a função é chamada.  Observe que as
     funções no módulo *note traceback: fe. podem construir a pilha de
     chamadas dado tal quadro.

     Isso é mais útil para fazer a depuração de impasses: esta função
     não requer a cooperação das threads em impasse e as pilhas de
     chamadas de tais threads são congeladas enquanto permanecerem em
     impasse ('deadlock').  O quadro retornado para uma thread sem
     impasse pode não ter nenhuma relação com a atividade atual da
     thread no momento em que o código de chamada examina o quadro.

     Esta função deve ser usada apenas para fins internos e
     especializados.

     Levanta um *note evento de auditoria: 19fa. ‘sys._current_frames’
     sem argumentos.

 -- Função: sys._current_exceptions ()

     Retorna um dicionário mapeando o identificador de cada encadeamento
     ('thread') para a exceção mais alta atualmente ativo nesse
     encadeamento no momento em que a função é chamada.  Se um
     encadeamento não estiver manipulando uma exceção no momento, ele
     não será incluído no dicionário de resultados.

     Isso é mais útil para criação de perfil estatístico.

     Esta função deve ser usada apenas para fins internos e
     especializados.

     Levanta um *note evento de auditoria: 19fa.
     ‘sys._current_exceptions’ sem argumentos.

     Alterado na versão 3.12: Cada valor no dicionário agora é uma única
     instância de exceção, em vez de uma tupla de 3 elementos, como
     retornado de ‘sys.exc_info()’.

 -- Função: sys.breakpointhook ()

     Esta função de gancho é chamada pela função embutida *note
     breakpoint(): 234.  Por padrão, ela leva você ao depurador *note
     pdb: a5, mas pode ser configurado para qualquer outra função para
     que você possa escolher qual depurador será usado.

     A assinatura dessa função depende do que ela chama.  Por exemplo, a
     ligação padrão (por exemplo, ‘pdb.set_trace()’) não espera nenhum
     argumento, mas você pode vinculá-la a uma função que espera
     argumentos adicionais (posicionais e/ou nomeados).  A função
     embutida ‘breakpoint()’ passa seus ‘*args’ e ‘**kws’ diretamente.
     O que quer que ‘breakpointhooks()’ retorne é retornado de
     ‘breakpoint()’.

     A implementação padrão primeiro consulta a variável de ambiente
     *note PYTHONBREAKPOINT: aeb.  Se for definido como ‘"0"’, então
     esta função retorna imediatamente; ou seja, é um no-op.  Se a
     variável de ambiente não for definida, ou for definida como uma
     string vazia, ‘pdb.set_trace()’ será chamado.  Caso contrário, essa
     variável deve nomear uma função a ser executada, usando a
     nomenclatura de importação pontilhada do Python, por exemplo
     ‘package.subpackage.module.function’.  Neste caso,
     ‘package.subpackage.module’ seria importado e o módulo resultante
     deve ter um chamável chamado ‘function()’.  Isso é executado,
     passando ‘*args’ e ‘**kws’, e qualquer que seja o retorno de
     ‘function()’, ‘sys.breakpointhook()’ retorna para a função embutida
     *note breakpoint(): 234.

     Observe que se algo der errado ao importar o chamável nomeado por
     *note PYTHONBREAKPOINT: aeb, uma *note RuntimeWarning: 1bd. é
     relatado e o ponto de interrupção é ignorado.

     Observe também que se ‘sys.breakpointhook()’ for sobrescrito
     programaticamente, *note PYTHONBREAKPOINT: aeb. 'não' será
     consultado.

     Adicionado na versão 3.7.

 -- Função: sys._debugmallocstats ()

     Imprima informações de baixo nível para stderr sobre o estado do
     alocador de memória do CPython.

     Se o Python for *note compilado no modo de depuração: 1f9. (*note
     opção -with-pydebug do configure: 424.), ele também executa algumas
     verificações de consistência interna custosas.

     Adicionado na versão 3.3.

     Esta função é específica para CPython.  O formato de saída exato
     não é definido aqui e pode mudar.

 -- Dado: sys.dllhandle

     Número inteiro que especifica o identificador da DLL do Python.

     *note Disponibilidade: 1ed8.: Windows.

 -- Função: sys.displayhook (value)

     Se 'value' não for ‘None’, esta função imprime ‘repr(value)’ em
     ‘sys.stdout’, e salva 'value' em ‘builtins._’.  Se ‘repr(value)’
     não for codificável para ‘sys.stdout.encoding’ com o tratador de
     erros ‘sys.stdout.errors’ (que provavelmente é ‘'strict'’),
     codifica-o para ‘sys.stdout.encoding’ com tratador de erros
     ‘'backslashreplace'’.

     ‘sys.displayhook’ é chamado no resultado da avaliação de uma *note
     expressão: 2111. inserida em uma sessão interativa do Python.  A
     exibição desses valores pode ser personalizada atribuindo outra
     função de um argumento a ‘sys.displayhook’.

     Pseudocódigo:

          def displayhook(value):
              if value is None:
                  return
              # Define '_' como None para evitar recursão
              builtins._ = None
              text = repr(value)
              try:
                  sys.stdout.write(text)
              except UnicodeEncodeError:
                  bytes = text.encode(sys.stdout.encoding, 'backslashreplace')
                  if hasattr(sys.stdout, 'buffer'):
                      sys.stdout.buffer.write(bytes)
                  else:
                      text = bytes.decode(sys.stdout.encoding, 'strict')
                      sys.stdout.write(text)
              sys.stdout.write("\n")
              builtins._ = value

     Alterado na versão 3.2: Usa o tratador de erros
     ‘'backslashreplace'’ ao ser levantada *note UnicodeEncodeError:
     677.

 -- Dado: sys.dont_write_bytecode

     Se isso for true, o Python não tentará escrever arquivos ‘.pyc’ na
     importação de módulos fonte.  Este valor é inicialmente definido
     como ‘True’ ou ‘False’ dependendo da opção de linha de comando
     *note -B: 1414. e da variável de ambiente *note
     PYTHONDONTWRITEBYTECODE: 1415, mas você mesmo pode configurá-lo
     para controlar geração de arquivo bytecode.

 -- Dado: sys._emscripten_info

     Um *note tupla nomeada: 64e. contendo informações sobre o ambiente
     na plataforma 'wasm32-emscripten'.  A tupla nomeada é provisória e
     pode mudar no futuro.

      -- Atributo: _emscripten_info.emscripten_version

          Versão emscripten como tupla de ints (maior, menor, micro),
          por exemplo ‘(3, 1, 8)’.

      -- Atributo: _emscripten_info.runtime

          String em tempo de execução; por exemplo, user-agent do
          navegador, ‘'Node.js v14.18.2'’, ou ‘'UNKNOWN'’.

      -- Atributo: _emscripten_info.pthreads

          ‘True’ se o Python for compilado com suporte a pthreads do
          Emscripten.

      -- Atributo: _emscripten_info.shared_memory

          ‘True’ se o Python for compilado com suporte a memória
          compartilhada.

     *note Disponibilidade: 1ed8.: Emscripten.

     Adicionado na versão 3.11.

 -- Dado: sys.pycache_prefix

     Se for definido (não ‘None’), o Python escreverá arquivos de cache
     de bytecode ‘.pyc’ para (e os lerá de) uma árvore de diretórios
     paralela com raiz neste diretório, em vez de diretórios
     ‘__pycache__’ na árvore de código-fonte.  Quaisquer diretórios
     ‘__pycache__’ na árvore de código-fonte serão ignorados e novos
     arquivos ‘.pyc’ gravados dentro do prefixo pycache.  Portanto, se
     você usar *note compileall: 20. como uma etapa de pré-compilação,
     certifique-se de executá-lo com o mesmo prefixo pycache (se houver)
     que usará em tempo de execução.

     Um caminho relativo é interpretado em relação ao diretório de
     trabalho atual.

     Este valor é definido inicialmente com base no valor da opção de
     linha de comando *note -X: 176. ‘pycache_prefix=PATH’ ou na
     variável de ambiente *note PYTHONPYCACHEPREFIX: 9ab. (a linha de
     comando tem precedência).  Se nenhum estiver definido, é ‘None’.

     Adicionado na versão 3.8.

 -- Função: sys.excepthook (type, value, traceback)

     Esta função imprime um determinado traceback (situação da pilha de
     execução) e exceção para ‘sys.stderr’.

     Quando uma exceção além da *note SystemExit: d63. é levantada e não
     capturada, o interpretador chama ‘sys.excepthook’ com três
     argumentos, a classe de exceção, a instância de exceção e um objeto
     traceback.  Em uma sessão interativa, isso acontece logo antes de o
     controle retornar ao prompt; em um programa Python, isso acontece
     pouco antes de o programa ser encerrado.  A manipulação de tais
     exceções de nível superior pode ser personalizada atribuindo outra
     função de três argumentos a ‘sys.excepthook’.

     Levanta um evento de auditoria ‘sys.excepthook’ com os argumentos
     ‘hook’, ‘type’, ‘value’, ‘traceback’ quando ocorre uma exceção não
     capturada.  Se nenhum gancho foi definido, ‘hook’ pode ser ‘None’.
     Se algum gancho gerar uma exceção derivada de *note RuntimeError:
     195, a chamada para o gancho será suprimida.  Caso contrário, a
     exceção de gancho de auditoria será relatada como não aumentável e
     ‘sys.excepthook’ será chamado.

     Ver também
     ..........

     A função *note sys.unraisablehook(): 1f7. lida com exceções que não
     podem ser levantadas e a função *note threading.excepthook(): 84e.
     trata exceções levantadas por *note threading.Thread.run(): a46.

 -- Dado: sys.__breakpointhook__
 -- Dado: sys.__displayhook__
 -- Dado: sys.__excepthook__
 -- Dado: sys.__unraisablehook__

     Esses objetos contêm os valores originais de ‘breakpointhook’,
     ‘displayhook’, ‘excepthook’ e ‘unraisablehook’ no início do
     programa.  Eles são salvos para que ‘breakpointhook’, ‘displayhook’
     e ‘excepthook’, ‘unraisablehook’ possam ser restaurados caso sejam
     substituídos por objetos quebrados ou alternativos.

     Adicionado na versão 3.7: __breakpointhook__

     Adicionado na versão 3.8: __unraisablehook__

 -- Função: sys.exception ()

     Esta função, quando chamada enquanto um tratador de exceção está em
     execução (como uma cláusula ‘except’ ou ‘except*’), retorna a
     instância da exceção que foi capturada por este tratador.  Quando
     os manipuladores de exceção estão aninhados um dentro do outro,
     apenas a exceção tratada pelo tratador mais interno é acessível.

     Se nenhum tratador de exceções estiver em execução, esta função
     retornará ‘None’.

     Adicionado na versão 3.11.

 -- Função: sys.exc_info ()

     Essa função retorna a representação de estilo antigo da exceção
     tratada.  Se uma exceção ‘e’ é tratada atualmente (de forma que
     *note exception(): 68b. retornaria ‘e’), *note exc_info(): 68a.
     retorna a tupla ‘(type(e), e, e.__traceback__)’.  Ou seja, uma
     tupla contendo o tipo da exceção (uma subclasse de *note
     BaseException: 5bb.), a própria exceção e um *note objeto de
     traceback: b07. que normalmente encapsula a pilha de chamadas no
     ponto em que a última exceção ocorreu.

     Se nenhuma exceção estiver sendo tratada em qualquer lugar da
     pilha, esta função retornará uma tupla contendo três valores
     ‘None’.

     Alterado na versão 3.11: Os campos ‘type’ e ‘traceback’ agora são
     derivados do ‘value’ (a instância da exceção), portanto, quando uma
     exceção é modificada enquanto está sendo tratada, as alterações são
     refletidas nos resultados das subsequentes chamadas para *note
     exc_info(): 68a.

 -- Dado: sys.exec_prefix

     Uma string que fornece o prefixo do diretório específico do site
     onde os arquivos Python dependentes da plataforma são instalados;
     por padrão, também é ‘'/usr/local'’.  Isso pode ser definido em
     tempo de compilação com o argumento ‘--exec-prefix’ para o script
     ‘configure’.  Especificamente, todos os arquivos de configuração
     (por exemplo, o arquivo de cabeçalho ‘pyconfig.h’) são instalados
     no diretório ‘`exec_prefix'/lib/python`X.Y'/config’, e os módulos
     da biblioteca compartilhada são instalados em
     ‘`exec_prefix'/lib/python`X.Y'/lib-dynload’, onde 'X.Y' é o número
     da versão do Python, por exemplo ‘3.2’.

          Nota: Se um *note ambiente virtual: 4557. estiver em vigor,
          este valor será alterado em ‘site.py’ para apontar para o
          ambiente virtual.  O valor para a instalação do Python ainda
          estará disponível, via *note base_exec_prefix: 3ee.

 -- Dado: sys.executable

     Uma string que fornece o caminho absoluto do binário executável
     para o interpretador Python, em sistemas onde isso faz sentido.  Se
     o Python não conseguir recuperar o caminho real para seu
     executável, *note sys.executable: 3b8. será uma string vazia ou
     ‘None’.

 -- Função: sys.exit ([arg])

     Levanta uma exceção *note SystemExit: d63, sinalizando a intenção
     de sair do interpretador.

     O argumento opcional 'arg' pode ser um número inteiro dando o
     status de saída (o padrão é zero) ou outro tipo de objeto.  Se for
     um número inteiro, zero é considerado “terminação bem-sucedida” e
     qualquer valor diferente de zero é considerado “terminação anormal”
     por shells e similares.  A maioria dos sistemas exige que ele
     esteja no intervalo de 0 a 127 e, caso contrário, produz resultados
     indefinidos.  Alguns sistemas têm uma convenção para atribuir
     significados específicos a códigos de saída específicos, mas estes
     são geralmente pouco desenvolvidos; programas Unix geralmente usam
     2 para erros de sintaxe de linha de comando e 1 para todos os
     outros tipos de erros.  Se outro tipo de objeto for passado, ‘None’
     é equivalente a passar zero, e qualquer outro objeto é impresso em
     *note stderr: 940. e resulta em um código de saída de 1.  Em
     particular, ‘sys.exit( "alguma mensagem de erro")’ é uma maneira
     rápida de sair de um programa quando ocorre um erro.

     Uma vez que *note exit(): 2320. em última análise, “apenas” gera
     uma exceção, ele só sairá do processo quando chamado da thread
     principal e a exceção não é interceptada.  As ações de limpeza
     especificadas pelas cláusulas finally de instruções *note try: 6e9.
     são honradas e é possível interceptar a tentativa de saída em um
     nível externo.

     Alterado na versão 3.6: Se ocorrer um erro na limpeza após o
     interpretador Python ter capturado *note SystemExit: d63. (como um
     erro ao liberar dados em buffer nos fluxos padrão), o status de
     saída é alterado para 120.

 -- Dado: sys.flags

     A *note tupla nomeada: 64e. 'flags' expõe o status dos
     sinalizadores de linha de comando.  Os atributos são somente
     leitura.

      -- Atributo: flags.debug                              *note -d: 1ebb.
                                                            
                                                            
      -- Atributo: flags.inspect                            *note -i: 1523.
                                                            
                                                            
      -- Atributo: flags.interactive                        *note -i: 1523.
                                                            
                                                            
      -- Atributo: flags.isolated                           *note -I: 965.
                                                            
                                                            
      -- Atributo: flags.optimize                           *note -O: ddd. ou *note -OO: dde.
                                                            
                                                            
      -- Atributo: flags.dont_write_bytecode                *note -B: 1414.
                                                            
                                                            
      -- Atributo: flags.no_user_site                       *note -s: 13d5.
                                                            
                                                            
      -- Atributo: flags.no_site                            *note -S: 11e7.
                                                            
                                                            
      -- Atributo: flags.ignore_environment                 *note -E: 964.
                                                            
                                                            
      -- Atributo: flags.verbose                            *note -v: 146c.
                                                            
                                                            
      -- Atributo: flags.bytes_warning                      *note -b: 5e3.
                                                            
                                                            
      -- Atributo: flags.quiet                              *note -q: 15a5.
                                                            
                                                            
      -- Atributo: flags.hash_randomization                 *note -R: 1c11.
                                                            
                                                            
      -- Atributo: flags.dev_mode                           *note -X dev: 176.
                                                            (*note Modo de Desenvolvimento do Python: 1f8.)
                                                            
                                                            
      -- Atributo: flags.utf8_mode                          *note -X utf8: 176.
                                                            
                                                            
      -- Atributo: flags.safe_path                          *note -P: 5a4.
                                                            
                                                            
      -- Atributo: flags.int_max_str_digits                 *note -X int_max_str_digits: 176.
                                                            (*note limitação de comprimento de string na conversão para inteiro: 5f5.)
                                                            
                                                            
      -- Atributo: flags.warn_default_encoding              *note -X warn_default_encoding: 176.
                                                            

     Alterado na versão 3.2: Adicionado o atributo ‘quiet’ para o novo
     sinalizador *note -q: 15a5.

     Adicionado na versão 3.2.3: O atributo ‘hash_randomization’.

     Alterado na versão 3.3: Removido o atributo obsoleto
     ‘division_warning’.

     Alterado na versão 3.4: Adicionado o atributo ‘isolated’ para o
     sinalizador *note -I: 965. ‘isolated’.

     Alterado na versão 3.7: Adicionado o atributo ‘dev_mode’ para o
     novo *note Modo de Desenvolvimento do Python: 1f8. e o atributo
     ‘utf8_mode’ para o novo sinalizador *note -X: 176. ‘utf8’.

     Alterado na versão 3.10: Adicionado o atributo
     ‘warn_default_encoding’ para o sinalizador *note -X: 176.
     ‘warn_default_encoding’.

     Alterado na versão 3.11: Adicionado o atributo ‘safe_path’ para a
     opção *note -P: 5a4.

     Alterado na versão 3.11: Adicionado o atributo
     ‘int_max_str_digits’.

 -- Dado: sys.float_info

     Uma *note tupla nomeada: 64e. contendo informações sobre o tipo
     float, ponto flutuante.  Ele contém informações de baixo nível
     sobre a precisão e a representação interna.  Os valores
     correspondem às várias constantes de ponto flutuante definidas no
     arquivo de cabeçalho padrão ‘float.h’ para a linguagem de
     programação ‘C’; consulte a seção 5.2.4.2.2 do padrão ISO/IEC C de
     1999 *note [C99]: 45ac, ‘Características dos tipos flutuantes’,
     para obter detalhes.  Atributos da tupla nomeada ‘float_info’

     atributo                              macro em float.h                      explicação
                                                                                 
     ------------------------------------------------------------------------------------------------------------------
                                                                                 
      -- Atributo: float_info.epsilon      ‘DBL_EPSILON’                         diferença entre 1,0 e o menor valor
                                                                                 maior que 1,0 que pode ser
                                                                                 representado como ponto flutuante.
                                                                                 
                                                                                 Veja também ‘math.ulp.()’
                                                                                 
                                                                                 
      -- Atributo: float_info.dig          ‘DBL_DIG’                             O número máximo de dígitos decimais
                                                                                 que podem ser fielmente
                                                                                 representados em um ponto
                                                                                 flutuante; veja abaixo.
                                                                                 
                                                                                 
      -- Atributo: float_info.mant_dig     ‘DBL_MANT_DIG’                        Precisão do ponto flutuante: o
                                                                                 número de dígitos de base ‘radix’
                                                                                 no significando de um ponto
                                                                                 flutuante.
                                                                                 
                                                                                 
      -- Atributo: float_info.max          ‘DBL_MAX’                             O ponto flutuante finito positivo
                                                                                 máximo representável.
                                                                                 
                                                                                 
      -- Atributo: float_info.max_exp      ‘DBL_MAX_EXP’                         O inteiro máximo 'e' de tal modo
                                                                                 que ‘radix**(e-1)’ é um ponto
                                                                                 flutuante finito representável.
                                                                                 
                                                                                 
      -- Atributo: float_info.max_10_exp   ‘DBL_MAX_10_EXP’                      O inteiro máximo 'e' de tal modo
                                                                                 que ‘10**e’ é um intervalo de
                                                                                 pontos flutuantes finitos
                                                                                 representáveis.
                                                                                 
                                                                                 
      -- Atributo: float_info.min          ‘DBL_MIN’                             O ponto flutuante 'normalizado'
                                                                                 positivo mínimo representável.
                                                                                 
                                                                                 Use *note math.ulp(0.0): 918. para
                                                                                 obter o menor ponto flutuante
                                                                                 representável positivo
                                                                                 'desnormalizado'.
                                                                                 
                                                                                 
      -- Atributo: float_info.min_exp      ‘DBL_MIN_EXP’                         O inteiro mínimo 'e' de tal modo
                                                                                 que ‘radix**(e-1)’ é um ponto
                                                                                 flutuante normalizado.
                                                                                 
                                                                                 
      -- Atributo: float_info.min_10_exp   ‘DBL_MIN_10_EXP’                      O inteiro mínimo 'e' de tal modo
                                                                                 que ‘10**e’ é um ponto flutuante
                                                                                 normalizado.
                                                                                 
                                                                                 
      -- Atributo: float_info.radix        ‘FLT_RADIX’                           A raiz da representação do
                                                                                 expoente.
                                                                                 
                                                                                 
      -- Atributo: float_info.rounds       ‘FLT_ROUNDS’                          Um inteiro representando o modo de
                                                                                 arredondamento para aritmética de
                                                                                 ponto flutuante.  Isso reflete o
                                                                                 valor da macro do sistema
                                                                                 ‘FLT_ROUNDS’ no momento da
                                                                                 inicialização do interpretador:
                                                                                 
                                                                                    * ‘-1’: indeterminável
                                                                                 
                                                                                    * ‘0’: em direção a zero
                                                                                 
                                                                                    * ‘1’: para o mais próximo
                                                                                 
                                                                                    * ‘2’: em direção ao infinito
                                                                                      positivo
                                                                                 
                                                                                    * ‘3’: em direção ao infinito
                                                                                      negativo
                                                                                 
                                                                                 Todos os outros valores para
                                                                                 ‘FLT_ROUNDS’ caracterizam o
                                                                                 comportamento de arredondamento
                                                                                 definido pela implementação.
                                                                                 

     O atributo *note sys.float_info.dig: 45ae. precisa de mais
     explicações.  Se ‘s’ for qualquer string representando um número
     decimal com no máximo ‘sys.float_info.dig’ dígitos significativos,
     então converter ‘s’ para ponto flutuante e vice-versa recuperará
     uma string representando o mesmo decimal valor:

          >>> import sys
          >>> sys.float_info.dig
          15
          >>> s = '3.14159265358979'    # string decimal com 15 dígitos significativos
          >>> format(float(s), '.15g')  # converter para float e desconverter retorna mesmo valor
          '3.14159265358979'

     Mas para strings com mais de *note sys.float_info.dig: 45ae.
     dígitos significativos, isso nem sempre é verdade:

          >>> s = '9876543211234567'    # 16 dígitos significativos é muito!
          >>> format(float(s), '.16g')  # a conversão muda o valor
          '9876543211234568'

 -- Dado: sys.float_repr_style

     Uma string indicando como a função *note repr(): 800. se comporta
     para floats.  Se a string tem valor ‘'short'’ então para um ponto
     flutuante finito ‘x’, ‘repr(x)’ visa produzir uma string curta com
     a propriedade que ‘float(repr(x)) == x’.  Este é o comportamento
     usual no Python 3.1 e posterior.  Caso contrário,
     ‘float_repr_style’ tem valor ‘'legacy'’ e ‘repr(x)’ se comporta da
     mesma forma que nas versões do Python anteriores a 3.1.

     Adicionado na versão 3.1.

 -- Função: sys.getallocatedblocks ()

     Retorna a quantidade de blocos de memória alocados atualmente pelo
     interpretador, independentemente do tamanho.  Esta função é útil
     principalmente ao acompanhar e depurar vazamentos de memória.
     Devido aos caches internos do interpretador, o resultado pode
     variar de chamada a chamada; você pode ter que chamar *note
     _clear_internal_caches(): 1766. e *note gc.collect(): a43. para
     obter resultados mais previsíveis.

     Se uma construção ou implementação do Python não puder computar
     razoavelmente essas informações, *note getallocatedblocks(): ffb.
     poderá retornar 0 em seu lugar.

     Adicionado na versão 3.4.

 -- Função: sys.getunicodeinternedsize ()

     Retorna o número de objetos unicode que foram internalizados.

     Adicionado na versão 3.12.

 -- Função: sys.getandroidapilevel ()

     Retorna o nível de API de tempo de construção do Android como um
     inteiro.  Isso representa a versão mínima do Android em que esta
     construção do Python pode ser executada.  Para obter informações
     sobre a versão de tempo de execução, consulte *note
     platform.android_ver(): 173d.

     *note Disponibilidade: 1ed8.: Android.

     Adicionado na versão 3.7.

 -- Função: sys.getdefaultencoding ()

     Retorna ‘'utf-8'’.  Este é o nome da codificação de string padrão,
     usada em métodos como *note str.encode(): 8db.

 -- Função: sys.getdlopenflags ()

     Retorna o valor atual dos sinalizadores que são usados para
     chamadas ‘dlopen()’.  Nomes simbólicos para os valores dos
     sinalizadores podem ser encontrados no módulo *note os: a1.
     (constantes ‘RTLD_XXX’, por exemplo *note os.RTLD_LAZY: 1157.).

     *note Disponibilidade: 1ed8.: Unix.

 -- Função: sys.getfilesystemencoding ()

     Obtém o *note codificação do sistema de arquivos: 53b.: a
     codificação usada com o *note manipulador de erros do sistema de
     arquivos: 53b. para converter entre nomes de arquivos Unicode e
     nomes de arquivos de bytes.  O manipulador de erros do sistema de
     arquivos é retornado de *note getfilesystemencodeerrors(): d07.

     Para melhor compatibilidade, str deve ser usado para nomes de
     arquivos em todos os casos, embora a representação de nomes de
     arquivos como bytes também seja suportada.  As funções que aceitam
     ou retornam nomes de arquivo devem suportar str ou bytes e
     converter internamente para a representação preferencial do
     sistema.

     *note os.fsencode(): c70. e *note os.fsdecode(): c6f. devem ser
     usados para garantir que a codificação correta e o modo de erros
     sejam usados.

     O *note tratador de erros e codificação do sistema de arquivos:
     53b. são configurados na inicialização do Python pela função *note
     PyConfig_Read(): 790.: veja os membros *note filesystem_encoding:
     3e8. e *note filesystem_errors: 3e9. do *note PyConfig: 3a6.

     Alterado na versão 3.2: O resultado de *note
     getfilesystemencoding(): c74. não pode mais ser ‘None’.

     Alterado na versão 3.6: O Windows não tem mais garantia de retornar
     ‘'mbcs'’.  Veja PEP 529(3) e *note
     _enablelegacywindowsfsencoding(): 2ae. para mais informações.

     Alterado na versão 3.7: Retorna ‘'utf-8'’ se o *note Modo UTF-8 do
     Python: 656. estiver ativado.

 -- Função: sys.getfilesystemencodeerrors ()

     Obtém o *note manipulador de erros do sistema de arquivos: 53b.: o
     manipulador de erros usado com a *note codificação do sistema de
     arquivos: 53b. para converter entre nomes de arquivos Unicode e
     nomes de arquivos de bytes.  A codificação do sistema de arquivos é
     retornado de *note getfilesystemencoding(): c74.

     *note os.fsencode(): c70. e *note os.fsdecode(): c6f. devem ser
     usados para garantir que a codificação correta e o modo de erros
     sejam usados.

     O *note tratador de erros e codificação do sistema de arquivos:
     53b. são configurados na inicialização do Python pela função *note
     PyConfig_Read(): 790.: veja os membros *note filesystem_encoding:
     3e8. e *note filesystem_errors: 3e9. do *note PyConfig: 3a6.

     Adicionado na versão 3.6.

 -- Função: sys.get_int_max_str_digits ()

     Retorna o valor atual para a *note limitação de comprimento de
     string na conversão para inteiro: 5f5.  Veja também *note
     set_int_max_str_digits(): 18c5.

     Adicionado na versão 3.11.

 -- Função: sys.getrefcount (object)

     Retorna a contagem de referências do 'object'.  A contagem
     retornada é geralmente um valor maior do que o esperado, porque
     inclui a referência (temporária) passada como argumento para *note
     getrefcount(): 45ba.

     Observe que o valor retornado pode não refletir realmente quantas
     referências ao objeto são realmente mantidas.  Por exemplo, alguns
     objetos são *note imortais: 45bb. e têm uma contagem de referências
     muito alta, que não reflete o número real de referências.
     Consequentemente, não confie no valor retornado para ser preciso,
     exceto um valor de 0 ou 1.

     Alterado na versão 3.12: Objetos imortais têm contagens de
     referência muito grandes que não correspondem ao número real de
     referências ao objeto.

 -- Função: sys.getrecursionlimit ()

     Retorna o valor atual do limite de recursão, a profundidade máxima
     da pilha do interpretador Python.  Esse limite evita que a recursão
     infinita cause um estouro da pilha C e falhe o Python.  Pode ser
     definido por *note setrecursionlimit(): 4c3.

 -- Função: sys.getsizeof (object[, default])

     Retorna o tamanho de um objeto em bytes.  O objeto pode ser
     qualquer tipo de objeto.  Todos os objetos embutidos retornarão
     resultados corretos, mas isso não precisa ser verdadeiro para
     extensões de terceiros, pois é específico da implementação.

     Apenas o consumo de memória diretamente atribuído ao objeto é
     contabilizado, não o consumo de memória dos objetos a que ele se
     refere.

     Se fornecido, 'default' será retornado se o objeto não fornecer
     meios para recuperar o tamanho.  Caso contrário, uma exceção *note
     TypeError: 2c3. será levantada.

     *note getsizeof(): 1863. chama o método ‘__sizeof__’ do objeto e
     adiciona uma sobrecarga adicional do coletor de lixo se o objeto
     for gerenciado pelo coletor de lixo.

     Consulte receita de tamanho recursivo(4) para obter um exemplo de
     uso de *note getsizeof(): 1863. recursivamente para encontrar o
     tamanho dos contêineres e todo o seu conteúdo.

 -- Função: sys.getswitchinterval ()

     Retorna o “intervalo de troca de thread” do interpretador em
     segundos; veja *note setswitchinterval(): 951.

     Adicionado na versão 3.2.

 -- Função: sys._getframe ([depth])

     Retorna um objeto quadro da pilha de chamadas.  Se o inteiro
     opcional 'depth' for fornecido, retorna o objeto de quadro que
     muitos chamam abaixo do topo da pilha.  Se for mais profundo do que
     a pilha de chamadas, *note ValueError: 202. é levantada.  O padrão
     para 'depth' é zero, retornando o quadro no topo da pilha de
     chamadas.

     Levanta um *note evento de auditoria: 19fa. ‘sys._getframe’ com o
     argumento ‘frame’.

     Esta função deve ser usada apenas para fins internos e
     especializados.  Não é garantido que exista em todas as
     implementações do Python.

 -- Função: sys._getframemodulename ([depth])

     Retorna o nome de um módulo da pilha de chamadas.  Se o inteiro
     opcional 'depth' for fornecido, retorna o módulo que muitas
     chamadas abaixo do topo da pilha.  Se for mais profundo do que a
     pilha de chamadas, ou se o módulo não for identificável, ‘None’ é
     retornado.  O padrão para 'depth' é zero, retornando o módulo no
     topo da pilha de chamadas.

     Levanta um *note evento de auditoria: 19fa.
     ‘sys._getframemodulename’ com o argumento ‘depth’.

     Esta função deve ser usada apenas para fins internos e
     especializados.  Não é garantido que exista em todas as
     implementações do Python.

     Adicionado na versão 3.12.

 -- Função: sys.getobjects (limit[, type])

     Esta função só existe se o CPython foi construído usando a opção de
     configuração especializada *note -with-trace-refs: 395.  Ela é
     destinada apenas para depurar problemas de coleta de lixo.

     Retorna uma lista de até 'limit' objetos Python alocados
     dinamicamente.  Se 'type' for fornecido, somente objetos daquele
     tipo exato (não subtipos) serão incluídos.

     Objetos da lista não são seguros para uso.  Especificamente, o
     resultado incluirá objetos de todos os interpretadores que
     compartilham seu estado de alocador de objetos (ou seja, aqueles
     criados com *note PyInterpreterConfig.use_main_obmalloc: 45bc.
     definido como 1 ou usando *note Py_NewInterpreter(): 18b9. e o
     *note interpretador principal: 587.).  Misturar objetos de
     diferentes iinterpretadores pode levar a travamentos ou outros
     comportamentos inesperados.

     Esta função deve ser usada apenas para fins especializados.  Não é
     garantido que exista em todas as implementações do Python.

     Alterado na versão 3.13.1: O resultado pode incluir objetos de
     outros interpretadores.

 -- Função: sys.getprofile ()

     Obtém a função do criador de perfil conforme definido por *note
     setprofile(): 1546.

 -- Função: sys.gettrace ()

     Obtém a função trace conforme definido por *note settrace(): 1547.

     A função *note gettrace(): 1428. destina-se apenas à implementação
     de depuradores, perfiladores, ferramentas de cobertura e similares.
     Seu comportamento faz parte da plataforma de implementação, e não
     da definição da linguagem e, portanto, pode não estar disponível em
     todas as implementações do Python.

 -- Função: sys.getwindowsversion ()

     Retorna uma tupla nomeada que descreve a versão do Windows em
     execução no momento.  Os elementos nomeados são 'major', 'minor',
     'build', 'platform', 'service_pack', 'service_pack_minor',
     'service_pack_major', 'suite_mask', 'product_type' e
     'platform_version'.  'service_pack' contém uma string,
     'platform_version' uma tupla de 3 elementos e todos os outros
     valores são inteiros.  Os componentes também podem ser acessados
     pelo nome, então ‘sys.getwindowsversion()[0]’ é equivalente a
     ‘sys.getwindowsversion().major’.  Para compatibilidade com versões
     anteriores, apenas os primeiros 5 elementos são recuperáveis por
     indexação.

     'platform' será ‘2’ (VER_PLATFORM_WIN32_NT).

     'product_type' pode ser um dos seguintes valores:

     Constante                                   Significado
                                                 
     ----------------------------------------------------------------------------------
                                                 
     ‘1’ (VER_NT_WORKSTATION)                    O sistema é uma estação de trabalho
                                                 
                                                 
     ‘2’ (VER_NT_DOMAIN_CONTROLLER)              O sistema é um controlador de
                                                 domínio.
                                                 
                                                 
     ‘3’ (VER_NT_SERVER)                         O sistema é um servidor, mas não um
                                                 controlador de domínio.
                                                 

     Esta função atua como um envólucro em volta da função Win32
     ‘GetVersionEx()’; consulte a documentação da Microsoft em
     ‘OSVERSIONINFOEX()’ para obter mais informações sobre esses campos.

     'platform_version' retorna a versão principal, a versão secundária
     e o número de compilação do sistema operacional atual, em vez da
     versão que está sendo emulada para o processo.  Destina-se a ser
     usado no registro, e não na detecção de recursos.

          Nota: 'platform_version' deriva a versão de kernel32.dll que
          pode ser de uma versão diferente da versão do sistema
          operacional.  Use o módulo *note platform: aa. para obter a
          versão precisa do sistema operacional.

     *note Disponibilidade: 1ed8.: Windows.

     Alterado na versão 3.2: Alterado para uma tupla nomeada e
     adicionado 'service_pack_minor', 'service_pack_major', 'suite_mask'
     e 'product_type'.

     Alterado na versão 3.6: Adicionado 'platform_version'

 -- Função: sys.get_asyncgen_hooks ()

     Retorna um objeto 'asyncgen_hooks', que é semelhante a um *note
     namedtuple: 1ca. no formato ‘(firstiter, finalizer)’, onde
     'firstiter' e 'finalizer' devem ser ‘None’ ou funções que recebem
     um *note iterador gerador assíncrono: 45bd. como argumento e são
     usadas para agendar a finalização de um gerador assíncrono por um
     laço de eventos.

     Adicionado na versão 3.6: Veja PEP 525(5) para mais detalhes.

          Nota: Esta função foi adicionada provisoriamente (veja PEP
          411(6) para detalhes.)

 -- Função: sys.get_coroutine_origin_tracking_depth ()

     Obtém a profundidade de rastreamento da origem da corrotina atual,
     conforme definido por *note set_coroutine_origin_tracking_depth():
     ba4.

     Adicionado na versão 3.7.

          Nota: Esta função foi adicionada provisoriamente (veja PEP
          411(7) para detalhes.)  Use-a apenas para propósitos de
          depuração.

 -- Dado: sys.hash_info

     Uma *note tupla nomeada: 64e. fornecendo parâmetros da
     implementação de hash numérico.  Para mais detalhes sobre hashing
     de tipos numéricos, veja *note Hashing de tipos numéricos: 2335.

      -- Atributo: hash_info.width

          A largura em bits usada para fazer hash de valores

      -- Atributo: hash_info.modulus

          O módulo primo P usado para esquema de hash numérico

      -- Atributo: hash_info.inf

          O valor de hash retornado para um infinito positivo

      -- Atributo: hash_info.nan

          (Este atributo não é mais usado)

      -- Atributo: hash_info.imag

          O multiplicador usado para a parte imaginária de um número
          complexo

      -- Atributo: hash_info.algorithm

          O nome do algoritmo para hash de str, bytes e memoryview

      -- Atributo: hash_info.hash_bits

          O tamanho da saída interna do algoritmo de hash

      -- Atributo: hash_info.seed_bits

          O tamanho da chave semente do algoritmo hash

      -- Atributo: hash_info.cutoff

          Limite para otimização de strings pequenas DJBX33A no
          intervalo ‘[1, cutoff)’.

     Adicionado na versão 3.2.

     Alterado na versão 3.4: Adicionados 'algorithm', 'hash_bits',
     'seed_bits' e 'cutoff'.

 -- Dado: sys.hexversion

     O número da versão codificado como um único inteiro.  Isso é
     garantido para aumentar com cada versão, incluindo suporte adequado
     para lançamentos de não produção.  Por exemplo, para testar se o
     interpretador Python é pelo menos a versão 1.5.2, use:

          if sys.hexversion >= 0x010502F0:
              # usa algum recurso avançado
              ...
          else:
              # usa uma implementação alternativa ou adverte o usuário
              ...

     Isso é chamado ‘hexversion’ já que só parece realmente
     significativo quando visto como o resultado de passá-lo para a
     função embutida *note hex(): 1312.  A *note tupla nomeada: 64e.
     *note sys.version_info: 6a0. pode ser usada para uma codificação
     mais amigável das mesmas informações.

     Mais detalhes sobre ‘hexversion’ podem ser encontrados em *note API
     e Versionamento de ABI: 45c7.

 -- Dado: sys.implementation

     Um objeto que contém informações sobre a implementação do
     interpretador Python em execução no momento.  Os atributos a seguir
     devem existir em todas as implementações do Python.

     'name' é o identificador da implementação, por exemplo ‘'cpython'’.
     A string real é definida pela implementação do Python, mas é
     garantido que seja minúscula.

     'version' é uma tupla nomeada, no mesmo formato que *note
     sys.version_info: 6a0.  Ela representa a versão da implementação
     Python em 'implementation'.  Isso tem um significado distinto da
     versão específica da 'linguagem' Python à qual o interpretador em
     execução no momento está em conformidade, que ‘sys.version_info’
     representa.  Por exemplo, para PyPy 1.8
     ‘sys.implementation.version’ pode ser ‘sys.version_info(1, 8, 0,
     'final', 0)’, enquanto ‘sys.version_info’ seria
     ‘sys.version_info(2, 7, 2, 'final', 0)’.  Para CPython, eles são o
     mesmo valor, pois é a implementação de referência.

     'hexversion' é a versão de implementação em formato hexadecimal,
     como *note sys.hexversion: 45c6.

     'cache_tag' é a tag usada pelo mecanismo de importação nos nomes de
     arquivo dos módulos em cache.  Por convenção, seria um composto do
     nome e da versão da implementação, como ‘'cpython-33'’.  No
     entanto, uma implementação Python pode usar algum outro valor, se
     apropriado.  Se ‘cache_tag’ for definido como ‘None’, isso indica
     que o cache do módulo deve ser desabilitado.

     *note sys.implementation: 517. pode conter atributos adicionais
     específicos para a implementação do Python.  Esses atributos não
     padrão devem começar com um sublinhado e não são descritos aqui.
     Independentemente do seu conteúdo, *note sys.implementation: 517.
     não mudará durante uma execução do interpretador, nem entre versões
     de implementação.  (No entanto, ele pode mudar entre versões da
     linguagem Python.)  Veja a PEP 421(8) para mais informações.

     Adicionado na versão 3.3.

          Nota: A adição de novos atributos obrigatórios deve passar
          pelo processo normal de PEPs.  Veja a PEP 421(9) para mais
          informações.

 -- Dado: sys.int_info

     Uma *note tupla nomeada: 64e. que contém informações sobre a
     representação interna de inteiros do Python.  Os atributos são
     somente leitura.

      -- Atributo: int_info.bits_per_digit

          O número de bits mantidos em cada dígito.  Os inteiros do
          Python são armazenados internamente na base
          ‘2**int_info.bits_per_digit’.

      -- Atributo: int_info.sizeof_digit

          O tamanho em bytes do tipo C usado para representar um dígito.

      -- Atributo: int_info.default_max_str_digits

          O valor padrão para *note sys.get_int_max_str_digits(): 1614.
          quando não estiver explicitamente configurado.

      -- Atributo: int_info.str_digits_check_threshold

          O valor mínimo diferente de zero para *note
          sys.set_int_max_str_digits(): 18c5, *note
          PYTHONINTMAXSTRDIGITS: 18c2. ou *note -X int_max_str_digits:
          176.

     Adicionado na versão 3.1.

     Alterado na versão 3.11: Adicionados *note default_max_str_digits:
     2411. e *note str_digits_check_threshold: 45ca.

 -- Dado: sys.__interactivehook__

     Quando esse atributo existe, seu valor é chamado automaticamente
     (sem argumentos) quando o interpretador é iniciado em *note modo
     interativo: ffc.  Isso é feito após o arquivo *note PYTHONSTARTUP:
     ffe. ser lido, para que você possa definir esse gancho lá.  O
     módulo *note site: c7. *note define isso: fff.

     Levanta um *note evento de auditoria: 19fa.
     ‘cpython.run_interactivehook’ com o objeto gancho como o argumento
     quando o gancho é chamado na inicialização.

     Adicionado na versão 3.4.

 -- Função: sys.intern (string)

     Insere 'string' na tabela de strings “internalizadas” e retorna a
     string internalizada – que é a própria 'string' ou uma cópia.
     Strings internalizadas são úteis para obter um pouco de desempenho
     na pesquisa de dicionário – se as chaves em um dicionário foram
     internalizadas, e a chave de pesquisa para internalizada, já que
     comparações de chaves (após o hash) podem ser feitas por uma
     comparação de ponteiros em vez de uma comparação de strings.
     Normalmente, os nomes usados em programas Python são internalizados
     automaticamente, e os dicionários usados para armazenar atributos
     de módulo, classe ou instância têm chaves internalizadas.

     Strings internalizadas não são *note imortais: 45bb.; você deve
     manter uma referência ao valor de retorno de *note intern(): 131e.
     para se beneficiar dela.

 -- Função: sys._is_gil_enabled ()

     Retorna *note True: c27. se a *note GIL: 159. estiver habiltada e
     *note False: b49. caso contrário.

     Adicionado na versão 3.13.

     Não há garantia de que exista em todas as implementações do Python.

 -- Função: sys.is_finalizing ()

     Retorna *note True: c27. se o interpretador Python principal
     estiver *note desligando: 14e.  Retorna *note False: b49. caso
     contrário.

     Veja também a exceção *note PythonFinalizationError: 14d.

     Adicionado na versão 3.5.

 -- Dado: sys.last_exc

     Esta variável nem sempre está definida; ela é definida para a
     instância de exceção quando uma exceção não é tratada e o
     interpretador imprime uma mensagem de erro e um stack traceback.
     Seu uso pretendido é permitir que um usuário interativo importe um
     módulo depurador e se envolva na depuração post-mortem sem ter que
     reexecutar o comando que causou o erro.  (O uso típico é ‘import
     pdb; pdb.pm()’ para entrar no depurador post-mortem; veja o módulo
     *note pdb: a5. para mais informações.)

     Adicionado na versão 3.12.

 -- Função: sys._is_interned (string)

     Retorna *note True: c27. se a string fornecida for “internalizada”,
     *note False: b49. caso contrário.

     Adicionado na versão 3.13.

     Não há garantia de que exista em todas as implementações do Python.

 -- Dado: sys.last_type
 -- Dado: sys.last_value
 -- Dado: sys.last_traceback

     Essas três variáveis estão descontinuadas; use *note sys.last_exc:
     4be. em vez disso.  Elas mantêm a representação legada de
     ‘sys.last_exc’, conforme retornada de *note exc_info(): 68a. acima.

 -- Dado: sys.maxsize

     Um inteiro que fornece o valor máximo que uma variável do tipo
     *note Py_ssize_t: a69. pode assumir.  Geralmente é ‘2**31 - 1’ em
     uma plataforma de 32 bits e ‘2**63 - 1’ em uma plataforma de 64
     bits.

 -- Dado: sys.maxunicode

     Um inteiro que fornece o valor do maior ponto de código Unicode, ou
     seja, ‘1114111’ (‘0x10FFFF’ em hexadecimal).

     Alterado na versão 3.3: Antes da PEP 393(10), ‘sys.maxunicode’
     costumava ser ‘0xFFFF’ ou ‘0x10FFFF’, dependendo da opção de
     configuração que especificava se os caracteres Unicode eram
     armazenados como UCS-2 ou UCS-4.

 -- Dado: sys.meta_path

     Uma lista de objetos *note localizadores de metacaminho: 10a9. que
     têm seus métodos *note find_spec(): 86c. chamados para que algum
     deles localize o módulo a ser importado.  Por padrão, armazena
     entradas que implementam a semântica de importação padrão de
     Python.  O método *note find_spec(): 86c. é chamado com pelo menos
     o nome absoluto do módulo a ser importado.  Se o módulo a ser
     importado estiver contido num pacote, o atributo *note __path__:
     1df4. do pacote pai é passado como segundo argumento.  O método
     retorna um *note spec de módulo: 20a6, ou ‘None’ se o módulo não
     for encontrado.

     Ver também
     ..........

     *note importlib.abc.MetaPathFinder: 872.

          A classe base abstrata que define a interface dos objetos
          localizadores em *note meta_path: d4d.

     *note importlib.machinery.ModuleSpec: 1fee.

          A classe concreta da qual *note find_spec(): 86c. deve
          retornar instâncias.

     Alterado na versão 3.4: *note Especificações de módulo: 20a6. foram
     introduzidas no Python 3.4, pela PEP 451(11).

     Alterado na versão 3.12: Foi removido o alternativa que procurava
     um método ‘find_module()’ se uma entrada *note meta_path: d4d. não
     tivesse um método *note find_spec(): 86c.

 -- Dado: sys.modules

     Este é um dicionário que mapeia nomes de módulos para módulos que
     já foram carregados.  Isso pode ser manipulado para forçar o
     recarregamento de módulos e outros truques.  No entanto, substituir
     o dicionário não vai funcionar necessariamente como esperado e
     excluir itens essenciais do dicionário pode fazer com que o Python
     falhe.  Se você quiser iterar sobre este dicionário global, sempre
     use ‘sys.modules.copy()’ ou ‘tuple(sys.modules)’ para evitar
     exceções, pois seu tamanho pode mudar durante a iteração como um
     efeito colateral do código ou atividade em outros threads.

 -- Dado: sys.orig_argv

     A lista dos argumentos originais da linha de comando passados para
     o executável Python.

     Os elementos de *note sys.orig_argv: 843. são os argumentos para o
     interpretador Python, enquanto os elementos de *note sys.argv:
     12a6. são os argumentos para o programa do usuário.  Os argumentos
     consumidos pelo próprio interpretador estarão presentes em *note
     sys.orig_argv: 843. e ausentes em *note sys.argv: 12a6.

     Adicionado na versão 3.10.

 -- Dado: sys.path

     Uma lista de strings que especifica o caminho de pesquisa para
     módulos.  Inicializado a partir da variável de ambiente *note
     PYTHONPATH: 1053, mais um padrão dependente da instalação.

     Por padrão, conforme inicializado na inicialização do programa, um
     caminho potencialmente inseguro é adicionado ao *note sys.path:
     3b4. ('antes' das entradas inseridas como resultado de *note
     PYTHONPATH: 1053.):

        * A linha de comando ‘python -m módulo’: adiciona o diretório de
          trabalho atual

        * A linha de comando ‘python script.py’: prefixa o diretório do
          script.  Se for um link simbólico, resolve links simbólicos.

        * As linhas de comando ‘python -c código’ e ‘python’ (REPL):
          adiciona uma string vazia, que indica o diretório de trabalho
          atual.

     Para não acrescentar esse caminho potencialmente inseguro, use a
     opção de linha de comando *note -P: 5a4. ou a variável de ambiente
     *note PYTHONSAFEPATH: 5a5.

     Um programa é livre para modificar esta lista para seus próprios
     propósitos.  Somente strings devem ser adicionadas a *note
     sys.path: 3b4.; todos os outros tipos de dados são ignorados
     durante a importação.

     Ver também
     ..........

        * Módulo *note site: c7. Descreve como usar arquivos .pth para
          estender *note sys.path: 3b4.

 -- Dado: sys.path_hooks

     Uma lista de chamáveis que recebem um argumento de caminho para
     tentar criar um *note localizador: 20ae. para o caminho.  Se um
     localizador puder ser criado, ele deve ser retornado pelo chamável,
     senão, ele levanta *note ImportError: 419.

     Originalmente especificado na PEP 302(12).

 -- Dado: sys.path_importer_cache

     Um dicionário atuando como um cache para objetos do *note
     localizador: 20ae.  As chaves são caminhos que foram passados para
     *note sys.path_hooks: 105a. e os valores são os localizadores que
     são encontrados.  Se um caminho for um caminho de sistema de
     arquivo válido, mas nenhum localizador for encontrado em *note
     sys.path_hooks: 105a, então ‘None’ é armazenado.

     Originalmente especificado na PEP 302(13).

 -- Dado: sys.platform

     Uma string contendo um identificador da plataforma.  Valores
     conhecidos são:

     Sistema              Valor de ‘platform’
                          
     -----------------------------------------------------
                          
     AIX                  ‘'aix'’
                          
                          
     Android              ‘'android'’
                          
                          
     Emscripten           ‘'emscripten'’
                          
                          
     iOS                  ‘'ios'’
                          
                          
     Linux                ‘'linux'’
                          
                          
     macOS                ‘'darwin'’
                          
                          
     Windows              ‘'win32'’
                          
                          
     Windows/Cygwin       ‘'cygwin'’
                          
                          
     WASI                 ‘'wasi'’
                          

     Em sistemas Unix não listados na tabela, o valor é o nome do
     sistema operacional em letras minúsculas, conforme retornado por
     ‘uname -s’, com a primeira parte da versão, conforme retornado por
     ‘uname -r’ anexada, por exemplo, ‘'sunos5'’ ou ‘'freebsd8'’, 'no
     momento em que o Python foi construído'.  A menos que você queira
     testar uma versão específica do sistema, é recomendável usar o
     seguinte idioma:

          if sys.platform.startswith('freebsd'):
              # Código para FreeBSD aqui...

     Alterado na versão 3.3: No Linux, *note sys.platform: a97. não
     contém mais a versão principal.  É sempre ‘'linux'’, em vez de
     ‘'linux2'’ ou ‘'linux3'’.

     Alterado na versão 3.8: No AIX, *note sys.platform: a97. não contém
     mais a versão principal.  É sempre ‘'aix'’, em vez de ‘'aix5'’ ou
     ‘'aix7'’.

     Alterado na versão 3.13: No Android, *note sys.platform: a97. agora
     retorna ‘'android'’ em vez de ‘'linux'’.

     Ver também
     ..........

     *note os.name: 2ce3. tem uma granularidade mais substancial.  *note
     os.uname(): 1155. fornece informações de versão dependentes do
     sistema.

     O módulo *note platform: aa. fornece verificações detalhadas sobre
     a identificação do sistema.

 -- Dado: sys.platlibdir

     Nome do diretório da biblioteca específica da plataforma.  É usado
     para construir o caminho da biblioteca padrão e os caminhos dos
     módulos de extensão instalados.

     É igual a ‘"lib"’ na maioria das plataformas.  No Fedora e SuSE, é
     igual a ‘"lib64"’ em plataformas de 64 bits, o que fornece os
     seguintes caminhos ‘sys.path’ (onde ‘X.Y’ é a versão ‘major.minor’
     do Python):

        * ‘/usr/lib64/pythonX.Y/’: Biblioteca padrão (como ‘os.py’ do
          módulo *note os: a1.)

        * ‘/usr/lib64/pythonX.Y/lib-dynload/’: Módulos de extensão C da
          biblioteca padrão (como o módulo *note errno: 57, o nome exato
          do arquivo é específico da plataforma)

        * ‘/usr/lib/pythonX.Y/site-packages/’ (sempre usa ‘lib’, não
          *note sys.platlibdir: 93f.): Módulos de terceiros

        * ‘/usr/lib64/pythonX.Y/site-packages/’: Módulos de extensão C
          de pacotes de terceiros

     Adicionado na versão 3.9.

 -- Dado: sys.prefix

     Uma string que fornece o prefixo do diretório específico do site
     onde os arquivos Python independentes de plataforma são instalados;
     no Unix, o padrão é ‘/usr/local’.  Isso pode ser definido no
     momento da construção com o argumento *note -prefix: 1ee7. para o
     script ‘configure’.  Veja *note Caminhos de instalação: 68f. para
     caminhos derivados.

          Nota: Se um *note ambiente virtual: 4557. estiver em vigor,
          este valor será alterado em ‘site.py’ para apontar para o
          ambiente virtual.  O valor para a instalação do Python ainda
          estará disponível, via *note base_prefix: 3ef.

 -- Dado: sys.ps1
 -- Dado: sys.ps2

     Strings especificando o prompt primário e secundário do
     interpretador.  Elas são definidas somente se o interpretador
     estiver no modo interativo.  Seus valores iniciais neste caso são
     ‘'>>> '’ e ‘'... '’.  Se um objeto não string for atribuído a
     qualquer variável, seu *note str(): 44c. é reavaliado cada vez que
     o interpretador se prepara para ler um novo comando interativo;
     isso pode ser usado para implementar um prompt dinâmico.

 -- Função: sys.setdlopenflags (n)

     Define os sinalizadores usados pelo interpretador para chamadas
     ‘dlopen()’, como quando o interpretador carrega módulos de
     extensão.  Entre outras coisas, isso habilitará uma resolução
     preguiçosa de símbolos ao importar um módulo, se chamado como
     ‘sys.setdlopenflags(0)’.  Para compartilhar símbolos entre módulos
     de extensão, chame como ‘sys.setdlopenflags(os.RTLD_GLOBAL)’.
     Nomes simbólicos para os valores de sinalizadores podem ser
     encontrados no módulo *note os: a1. (constantes ‘RTLD_XXX’, por
     exemplo, *note os.RTLD_LAZY: 1157.).

     *note Disponibilidade: 1ed8.: Unix.

 -- Função: sys.set_int_max_str_digits (maxdigits)

     Define a *note limitação de comprimento de string na conversão para
     inteiro: 5f5. usada por este interpretador.  Veja também *note
     get_int_max_str_digits(): 1614.

     Adicionado na versão 3.11.

 -- Função: sys.setprofile (profilefunc)

     Define a função de perfil do sistema, que permite implementar um
     perfilador de código-fonte Python em Python.  Veja o capítulo *note
     Os Profilers do Python: 449b. para mais informações sobre o
     perfilador Python.  A função de perfil do sistema é chamada de
     forma semelhante à função de rastreamento do sistema (veja *note
     settrace(): 1547.), mas é chamada com eventos diferentes, por
     exemplo, não é chamada para cada linha de código executada (apenas
     na chamada e retorno, mas o evento de retorno é relatado mesmo
     quando uma exceção foi definida).  A função é específica do thread,
     mas não há como o perfilador saber sobre trocas de contexto entre
     threads, então não faz sentido usá-la na presença de vários
     threads.  Além disso, seu valor de retorno não é usado, então ele
     pode simplesmente retornar ‘None’.  Um erro na função de perfil
     fará com que sua própria definição seja removida.

          Nota: O mesmo mecanismo de rastreamento é usado para
          ‘setprofile()’ como *note settrace(): 1547.  Para rastrear
          chamadas com ‘setprofile()’ dentro de uma função de
          rastreamento (por exemplo, em um ponto de interrupção do
          depurador), consulte *note call_tracing(): 194d.

     As funções de perfil devem ter três argumentos: 'frame', 'event' e
     'arg'.  'frame' é o quadro de pilha atual.  'event' é uma string:
     ‘'call'’, ‘'return'’, ‘'c_call'’, ‘'c_return'’ ou ‘'c_exception'’.
     'arg' depende do tipo de evento.

     Os eventos têm o seguinte significado:

     ‘'call'’

          Uma função é chamada (ou algum outro bloco de código é
          inserido).  A função de perfil é chamada; 'arg' é ‘None’.

     ‘'return'’

          Uma função (ou outro bloco de código) está prestes a retornar.
          A função de perfilação é chamada; 'arg' é o valor que será
          retornado, ou ‘None’ se o evento for causado por uma exceção
          sendo levantada.

     ‘'c_call'’

          Uma função C está prestes a ser chamada.  Pode ser uma função
          de extensão ou uma embutida.  'arg' é o objeto da função C.

     ‘'c_return'’

          Uma função C foi retornada.  'arg' é o objeto da função C.

     ‘'c_exception'’

          Uma função C levantou uma exceção.  'arg' é o objeto da função
          C.

     Levanta um *note evento de auditoria: 19fa. ‘sys.setprofile’ sem
     argumentos.

 -- Função: sys.setrecursionlimit (limit)

     Define a profundidade máxima da pilha do interpretador Python para
     'limit'.  Esse limite impede que a recursão infinita cause um
     estouro da pilha C e trave o Python.

     O limite mais alto possível depende da plataforma.  Um usuário pode
     precisar definir o limite mais alto quando tiver um programa que
     exija recursão profunda e uma plataforma que dê suporte a um limite
     mais alto.  Isso deve ser feito com cuidado, porque um limite muito
     alto pode levar a uma falha.

     Se o novo limite for muito baixo na profundidade de recursão atual,
     uma exceção *note RecursionError: d90. será levantada.

     Alterado na versão 3.5.1: Uma exceção *note RecursionError: d90.
     agora é levantada se o novo limite for muito baixo na profundidade
     de recursão atual.

 -- Função: sys.setswitchinterval (interval)

     Define o intervalo de troca de thread do interpretador (em
     segundos).  Este valor de ponto flutuante determina a duração ideal
     das “fatias de tempo” alocadas para threads Python em execução
     simultânea.  Observe que o valor real pode ser maior, especialmente
     se funções ou métodos internos de execução longa forem usados.
     Além disso, qual thread se torna agendada no final do intervalo é
     uma decisão do sistema operacional.  O interpretador não tem seu
     próprio escalonador.

     Adicionado na versão 3.2.

 -- Função: sys.settrace (tracefunc)

     Define a função trace do sistema, que permite que você implemente
     um depurador de código-fonte Python em Python.  A função é
     específica de thread; para um depurador suportar múltiplas threads,
     ele deve registrar uma função trace usando *note settrace(): 1547.
     para cada thread que está sendo depurada ou usar *note
     threading.settrace(): 84b.

     As funções de rastreamento devem ter três argumentos: 'frame',
     'event' e 'arg'.  'frame' é o *note quadro de pilha atual: 6e0.
     'event' é uma string: ‘'call'’, ‘'line'’, ‘'return'’, ‘'exception'’
     ou ‘'opcode'’.  'arg' depende do tipo de evento.

     A função de rastreamento é invocada (com 'event' definido como
     ‘'call'’) sempre que um novo escopo local é inserido; ela deve
     retornar uma referência a uma função de rastreamento local a ser
     usada para o novo escopo, ou ‘None’ se o escopo não deve ser
     rastreado.

     A função de rastreamento local deve retornar uma referência a si
     mesma ou a outra função que seria então usada como a função de
     rastreamento local para o escopo.

     Se ocorrer algum erro na função de rastreamento, ela será
     desativada, assim como ‘settrace(None)’ é chamado.

          Nota: O rastreamento é desabilitado ao chamar a função de
          rastreamento (por exemplo, uma função definida por
          ‘settrace()’).  Para rastreamento recursivo, veja *note
          call_tracing(): 194d.

     Os eventos têm o seguinte significado:

     ‘'call'’

          Uma função é chamada (ou algum outro bloco de código é
          inserido).  A função de rastreamento global é chamada; 'arg' é
          ‘None’; o valor de retorno especifica a função de rastreamento
          local.

     ‘'line'’

          O interpretador está prestes a executar uma nova linha de
          código ou reexecutar a condição de um laço.  A função de
          rastreamento local é chamada; 'arg' é ‘None’; o valor de
          retorno especifica a nova função de rastreamento local.  Veja
          ‘Objects/lnotab_notes.txt’ para uma explicação detalhada de
          como isso funciona.  Eventos por linha podem ser desabilitados
          para um quadro definindo *note f_trace_lines: bf6. como *note
          False: b49. naquele *note quadro: 6e0.

     ‘'return'’

          Uma função (ou outro bloco de código) está prestes a retornar.
          A função de rastreamento local é chamada; 'arg' é o valor que
          será retornado, ou ‘None’ se o evento for causado por uma
          exceção sendo levantada.  O valor de retorno da função de
          rastreamento é ignorado.

     ‘'exception'’

          Ocorreu uma exceção.  A função de rastreamento local é
          chamada; 'arg' é uma tupla ‘(exception, value, traceback)’; o
          valor de retorno especifica a nova função de rastreamento
          local.

     ‘'opcode'’

          O interpretador está prestes a executar um novo opcode (veja
          *note dis: 38. para detalhes do opcode).  A função de
          rastreamento local é chamada; 'arg' é ‘None’; o valor de
          retorno especifica a nova função de rastreamento local.
          Eventos por opcode não são emitidos por padrão: eles devem ser
          explicitamente solicitados definindo *note f_trace_opcodes:
          bf7. como *note True: c27. no *note quadro: 6e0.

     Observe que, à medida que uma exceção é propagada pela cadeia de
     chamadores, um evento ‘'exception'’ é gerado em cada nível.

     Para um uso mais refinado, é possível definir uma função de
     rastreamento atribuindo ‘frame.f_trace = tracefunc’ explicitamente,
     em vez de depender de ser definida indiretamente por meio do valor
     de retorno de uma função de rastreamento já instalada.  Isso também
     é necessário para ativar a função de rastreamento no quadro atual,
     o que *note settrace(): 1547. não faz.  Observe que, para que isso
     funcione, uma função de rastreamento global deve ter sido instalada
     com *note settrace(): 1547. para habilitar o maquinário de
     rastreamento em tempo de execução, mas não precisa ser a mesma
     função de rastreamento (por exemplo, pode ser uma função de
     rastreamento de baixa sobrecarga que simplesmente retorna ‘None’
     para se desabilitar imediatamente em cada quadro).

     Para mais informações sobre objetos de código e quadro, consulte
     *note A hierarquia de tipos padrão: 2075.

     Levanta um *note evento de auditoria: 19fa. ‘sys.settrace’ sem
     argumentos.

     A função *note settrace(): 1547. destina-se apenas à implementação
     de depuradores, perfiladores, ferramentas de cobertura e similares.
     Seu comportamento faz parte da plataforma de implementação, e não
     da definição da linguagem e, portanto, pode não estar disponível em
     todas as implementações do Python.

     Alterado na versão 3.7: Tipo de evento ‘'opcode'’ adicionado;
     atributos *note f_trace_lines: bf6. e *note f_trace_opcodes: bf7.
     adicionados a quadros

 -- Função: sys.set_asyncgen_hooks ([firstiter] [, finalizer])

     Aceita dois argumentos nomeados opcionais que são chamáveis que
     aceitam um *note iterador gerador assíncrono: 45bd. como argumento.
     O chamável 'firstiter' será chamado quando um gerador assíncrono
     for iterado pela primeira vez.  O 'finalizer' será chamado quando
     um gerador assíncrono estiver prestes a ser coletado como lixo.

     Levanta um *note evento de auditoria: 19fa.
     ‘sys.set_asyncgen_hooks_firstiter’ sem argumentos.

     Levanta um *note evento de auditoria: 19fa.
     ‘sys.set_asyncgen_hooks_finalizer’ sem argumentos.

     Dois eventos de auditoria são gerados porque a API subjacente
     consiste em duas chamadas, cada uma das quais deve levantar seu
     próprio evento.

     Adicionado na versão 3.6: Veja a PEP 525(14) para mais detalhes, e
     para um exemplo de referência de um método 'finalizer' veja a
     implementação de ‘asyncio.Loop.shutdown_asyncgens’ em
     Lib/asyncio/base_events.py(15)

          Nota: Esta função foi adicionada provisoriamente (veja PEP
          411(16) para detalhes.)

 -- Função: sys.set_coroutine_origin_tracking_depth (depth)

     Permite habilitar ou desabilitar o rastreamento de origem de
     corrotina.  Quando habilitado, o atributo ‘cr_origin’ em objetos de
     corrotina conterá uma tupla de tuplas (nome do arquivo, número da
     linha, nome da função) descrevendo o traceback onde o objeto
     corrotina foi criado, com a chamada mais recente primeiro.  Quando
     desabilitado, ‘cr_origin’ será ‘None’.

     Para habilitar, passe um valor 'depth' maior que zero; isso define
     o número de quadros cujas informações serão capturadas.  Para
     desabilitar, defina 'depth' para zero.

     Esta configuração é específica do thread.

     Adicionado na versão 3.7.

          Nota: Esta função foi adicionada provisoriamente (veja PEP
          411(17) para detalhes.)  Use-a apenas para propósitos de
          depuração.

 -- Função: sys.activate_stack_trampoline (backend, /)

     Ativa o trampolim do perfilador de pilha 'backend'.  O único
     backend suportado é ‘"perf"’.

     *note Disponibilidade: 1ed8.: Linux.

     Adicionado na versão 3.12.

     Ver também
     ..........

        * *note Suporte do Python ao perfilador perf do Linux: 18f.

        * ‘https://perf.wiki.kernel.org’

 -- Função: sys.deactivate_stack_trampoline ()

     Desativa o backend trampolim do perfilador de pilha atual.

     Se nenhum perfilador de pilha estiver ativado, esta função não terá
     efeito.

     *note Disponibilidade: 1ed8.: Linux.

     Adicionado na versão 3.12.

 -- Função: sys.is_stack_trampoline_active ()

     Retorna ‘True’ se um trampolim de perfilador de pilha estiver
     ativo.

     *note Disponibilidade: 1ed8.: Linux.

     Adicionado na versão 3.12.

 -- Função: sys._enablelegacywindowsfsencoding ()

     Altera *note tratador de erros e codificação do sistema de
     arquivos: 53b. para ‘replace’ e ‘mbcs’ respectivamente, para
     consistência com versões do Python anteriores à 3.6.

     Isso é equivalente a definir a variável de ambiente *note
     PYTHONLEGACYWINDOWSFSENCODING: 2af. antes de iniciar o Python.

     Veja também *note sys.getfilesystemencoding(): c74. e *note
     sys.getfilesystemencodeerrors(): d07.

     *note Disponibilidade: 1ed8.: Windows.

          Nota: Alterar a codificação do sistema de arquivos após a
          inicialização do Python é arriscado porque o fsencoding antigo
          ou os caminhos codificados pelo fsencoding antigo podem estar
          armazenados em cache em algum lugar.  Use *note
          PYTHONLEGACYWINDOWSFSENCODING: 2af. em vez disso.

     Adicionado na versão 3.6: Veja PEP 529(18) para mais detalhes.

     Descontinuado desde a versão 3.13, será removido na versão 3.16:
     Use *note PYTHONLEGACYWINDOWSFSENCODING: 2af.

 -- Dado: sys.stdin
 -- Dado: sys.stdout
 -- Dado: sys.stderr

     *note Objetos arquivo: 1203. usados pelo interpretador para entrada
     padrão, saída e erros:

        * ‘stdin’ é usado para todas as entradas interativas (incluindo
          chamadas para *note input(): 131b.);

        * ‘stdout’ é usado para a saída das instruções *note print():
          fa9. e *note expressões: 2111. e para os prompts de *note
          input(): 131b.;

        * Os prompts do próprio interpretador e suas mensagens de erro
          vão para ‘stderr’.

     Esses fluxos são *note arquivos texto: 1e0d. regulares como aqueles
     retornados pela função *note open(): 51c.  Seus parâmetros são
     escolhidos da seguinte forma:

        * A codificação e o tratamento de erros são inicializados a
          partir de *note PyConfig.stdio_encoding: 3a3. e *note
          PyConfig.stdio_errors: 45cc.

          No Windows, o UTF-8 é usado para o dispositivo de console.
          Dispositivos não-caracteres, como arquivos de disco e pipes,
          usam a codificação da localidade do sistema (ou seja, a página
          de código ANSI). Dispositivos de caracteres não-console, como
          NUL (ou seja, onde ‘isatty()’ retorna ‘True’) usam o valor das
          páginas de código de entrada e saída do console na
          inicialização, respectivamente para stdin e stdout/stderr.
          Isso assume como padrão a *note codificação da localidade:
          242. do sistema se o processo não for inicialmente anexado a
          um console.

          O comportamento especial do console pode ser substituído
          definindo a variável de ambiente PYTHONLEGACYWINDOWSSTDIO
          antes de iniciar o Python.  Nesse caso, as páginas de código
          do console são usadas como para qualquer outro dispositivo de
          caractere.

          Em todas as plataformas, você pode substituir a codificação de
          caracteres definindo a variável de ambiente *note
          PYTHONIOENCODING: 1040. antes de iniciar o Python ou usando a
          nova opção de linha de comando *note -X: 176. ‘utf8’ e a
          variável de ambiente *note PYTHONUTF8: ae8.  No entanto, para
          o console do Windows, isso só se aplica quando *note
          PYTHONLEGACYWINDOWSSTDIO: c76. também está definido.

        * Quando interativo, o fluxo ‘stdout’ é armazenado em buffer de
          linha.  Caso contrário, ele é armazenado em buffer de bloco
          como arquivos texto comuns.  O fluxo ‘stderr’ é armazenado em
          buffer de linha em ambos os casos.  Você pode tornar ambos os
          fluxos sem buffer passando a opção de linha de comando *note
          -u: 1b1c. ou definindo a variável de ambiente *note
          PYTHONUNBUFFERED: 1b1d.

     Alterado na versão 3.9: ‘stderr’ não interativo agora é armazenado
     em buffer de linha em vez de totalmente armazenado em buffer.

          Nota: Para escrever ou ler dados binários de/para os fluxos
          padrão, use o objeto binário subjacente *note buffer: 12e5.
          Por exemplo, para escrever bytes em *note stdout: ae6, use
          ‘sys.stdout.buffer.write(b'abc')’.

          Entretanto, se você estiver escrevendo uma biblioteca (e não
          controlar em qual contexto seu código será executado), esteja
          ciente de que os fluxos padrão podem ser substituídos por
          objetos arquivo ou similares, como *note io.StringIO: f59, que
          não oferecem suporte ao atributo ‘buffer’.

 -- Dado: sys.__stdin__
 -- Dado: sys.__stdout__
 -- Dado: sys.__stderr__

     Esses objetos contêm os valores originais de ‘stdin’, ‘stderr’ e
     ‘stdout’ no início do programa.  Eles são usados durante a
     finalização e podem ser úteis para imprimir no fluxo padrão real,
     não importa se o objeto ‘sys.std*’ foi redirecionado.

     Ele também pode ser usado para restaurar os arquivos reais para
     objetos arquivo de trabalho conhecidos, caso tenham sido
     substituídos por um objeto quebrado.  No entanto, a maneira
     preferida de fazer isso é salvar explicitamente o fluxo anterior
     antes de substituí-lo e restaurar o objeto salvo.

          Nota: Sob algumas condições, ‘stdin’, ‘stdout’ e ‘stderr’, bem
          como os valores originais de ‘__stdin__’, ‘__stdout__’ e
          ‘__stderr__’ podem ser ‘None’.  Geralmente é o caso de
          aplicativos GUI do Windows que não estão conectados a um
          console e aplicativos Python iniciados com ‘pythonw’.

 -- Dado: sys.stdlib_module_names

     Um frozenset de strings contendo os nomes dos módulos da biblioteca
     padrão.

     É o mesmo em todas as plataformas.  Módulos que não estão
     disponíveis em algumas plataformas e módulos desabilitados na
     construção do Python também são listados.  Todos os tipos de
     módulos são listados: Python puro, módulos embutidos, congelados e
     de extensão.  Módulos de teste são excluídos.

     Para pacotes, somente o pacote principal é listado: subpacotes e
     submódulos não são listados.  Por exemplo, o pacote ‘email’ é
     listado, mas o subpacote ‘email.mime’ e o submódulo ‘email.message’
     não são listados.

     Veja também a lista de *note sys.builtin_module_names: 1de5.

     Adicionado na versão 3.10.

 -- Dado: sys.thread_info

     Uma *note tupla nomeada: 64e. contendo informações sobre a
     implementação de threads.

      -- Atributo: thread_info.name

          O nome da implementação da thread:

             * ‘"nt"’: Threads do Windows

             * ‘"pthread"’: Threads do POSIX

             * ‘"pthread-stubs"’: stubs de threads POSIX (em plataformas
               WebAssembly que não implementam threads).

             * ‘"solaris"’: Threads do Solaris

      -- Atributo: thread_info.lock

          O nome da implementação de trava.

             * ‘"semaphore"’: uma trava usa um semáforo

             * ‘"mutex+cond"’: uma trava usa um mutex e uma variável de
               condição

             * ‘None’ se essa informação for desconhecida

      -- Atributo: thread_info.version

          O nome e a versão da biblioteca de threads.  É uma string, ou
          ‘None’ se essa informação for desconhecida.

     Adicionado na versão 3.3.

 -- Dado: sys.tracebacklimit

     Quando essa variável é definida como um valor inteiro, ela
     determina o número máximo de níveis de informações de traceback
     impressas quando ocorre uma exceção não tratada.  O padrão é
     ‘1000’.  Quando definida como ‘0’ ou menos, todas as informações de
     traceback são suprimidas e apenas o tipo e o valor da exceção são
     impressos.

 -- Função: sys.unraisablehook (unraisable, /)

     Manipula uma exceção não levantada

     Chamada quando uma exceção ocorreu, mas não há como o Python
     manipulá-la.  Por exemplo, quando um destrutor levanta uma exceção
     ou durante a coleta de lixo (*note gc.collect(): a43.).

     O argumento 'unraisable' tem os seguintes atributos:

        * ‘exc_type’: Tipo de exceção.

        * ‘exc_value’: Valor da exceção, pode ser ‘None’.

        * ‘exc_traceback’: Traceback da exceção, pode ser ‘None’.

        * ‘err_msg’: Mensagem de erro, pode ser ‘None’.

        * ‘object’: O objeto que causa a exceção pode ser ‘None’.

     Os formatos de gancho padrão ‘err_msg’ e ‘object’ como:
     ‘f'{err_msg}: {object!r}'’; usa a mensagem de erro “Exception
     ignored in” se ‘err_msg’ for ‘None’.

     *note sys.unraisablehook(): 1f7. pode ser substituída para
     controlar como exceções não levantáveis são manipuladas.

     Ver também
     ..........

     *note excepthook(): 80e, que manipula exceções não capturadas.

          Aviso: Armazena ‘exc_value’ usando um gancho personalizado
          pode criar um ciclo de referência.  Ele deve ser limpo
          explicitamente para quebrar o ciclo de referência quando a
          exceção não for mais necessária.

          Armazenar ‘object’ usando um gancho personalizado pode
          ressuscitá-lo se ele for definido como um objeto que está
          sendo finalizado.  Evite armazenar ‘object’ após o gancho
          personalizado ser concluído para evitar ressuscitar objetos.

     Levanta um evento de auditoria ‘sys.unraisablehook’ com argumentos
     'hook' e 'unraisable' quando ocorrer uma exceção que não puder ser
     manipulada.  O objeto 'unraisable' é o mesmo que será passado para
     o gancho.  Se nenhum gancho tiver sido definido, 'hook' pode ser
     ‘None’.

     Adicionado na versão 3.8.

 -- Dado: sys.version

     Uma string contendo o número da versão do interpretador Python mais
     informações adicionais sobre o número da construção e o compilador
     usado.  Esta string é exibida quando o interpretador interativo é
     iniciado.  Não extraia informações de versão dela, em vez disso,
     use *note version_info: 6a0. e as funções fornecidas pelo módulo
     *note platform: aa.

 -- Dado: sys.api_version

     A versão da API C para este interpretador.  Programadores podem
     achar isso útil ao depurar conflitos de versão entre Python e
     módulos de extensão.

 -- Dado: sys.version_info

     Uma tupla contendo os cinco componentes do número da versão:
     'major', 'minor', 'micro', 'releaselevel' e 'serial'.  Todos os
     valores, exceto 'releaselevel', são inteiros; o nível de versão é
     ‘'alpha'’, ‘'beta'’, ‘'candidate'’ ou ‘'final'’.  O valor
     ‘version_info’ correspondente à versão 2.0 do Python é ‘(2, 0, 0,
     'final', 0)’.  Os componentes também podem ser acessados por nome,
     então ‘sys.version_info[0]’ é equivalente a
     ‘sys.version_info.major’ e assim por diante.

     Alterado na versão 3.1: Adiciona componentes nomeados como
     atributos.

 -- Dado: sys.warnoptions

     Este é um detalhe de implementação do framework de avisos; não
     modifique este valor.  Consulte o módulo *note warnings: 112. para
     obter mais informações sobre o framework de avisos.

 -- Dado: sys.winver

     O número da versão usado para formar chaves de registro em
     plataformas Windows.  Isso é armazenado como recurso de string 1000
     na DLL do Python.  O valor normalmente é a versão principal e
     secundária do interpretador Python em execução.  Ele é fornecido no
     módulo *note sys: d9. para fins informativos; modificar esse valor
     não tem efeito nas chaves de registro usadas pelo Python.

     *note Disponibilidade: 1ed8.: Windows.

 -- Dado: sys.monitoring

     Espaço de nomes contendo funções e constantes para função de
     retorno de registro e controle de eventos de monitoramento.  Veja
     *note sys.monitoring: da. para detalhes.

 -- Dado: sys._xoptions

     Um dicionário dos vários sinalizadores específicos de implementação
     passados pela opção de linha de comando *note -X: 176.  Os nomes de
     opção são mapeados para seus valores, se fornecidos explicitamente,
     ou para *note True: c27.  Exemplo:

          $ ./python -Xa=b -Xc
          Python 3.2a3+ (py3k, Oct 16 2010, 20:14:50)
          [GCC 4.4.3] on linux2
          Type "help", "copyright", "credits" or "license" for more information.
          >>> import sys
          >>> sys._xoptions
          {'a': 'b', 'c': True}

     Esta é uma maneira específica do CPython de acessar opções passadas
     por *note -X: 176.  Outras implementações podem exportá-las por
     outros meios, ou não exportá-las.

     Adicionado na versão 3.2.

Citações
........

(C99) ISO/IEC 9899:1999.  “Programming languages – C.” Um rascunho
público desta norma está disponível em
‘https://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf’.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3149/

   (2) https://peps.python.org/pep-0578/

   (3) https://peps.python.org/pep-0529/

   (4) 
https://code.activestate.com/recipes/577504-compute-memory-footprint-of-an-object-and-its-cont/

   (5) https://peps.python.org/pep-0525/

   (6) https://peps.python.org/pep-0411/

   (7) https://peps.python.org/pep-0411/

   (8) https://peps.python.org/pep-0421/

   (9) https://peps.python.org/pep-0421/

   (10) https://peps.python.org/pep-0393/

   (11) https://peps.python.org/pep-0451/

   (12) https://peps.python.org/pep-0302/

   (13) https://peps.python.org/pep-0302/

   (14) https://peps.python.org/pep-0525/

   (15) 
https://github.com/python/cpython/tree/3.13/Lib/asyncio/base_events.py

   (16) https://peps.python.org/pep-0411/

   (17) https://peps.python.org/pep-0411/

   (18) https://peps.python.org/pep-0529/


File: python.info,  Node: sys monitoring — Monitoramento de eventos de execução,  Next: sysconfig — Fornece acesso às informações de configuração do Python,  Prev: sys — Parâmetros e funções específicas do sistema,  Up: Serviços de Tempo de Execução Python

5.29.2 ‘sys.monitoring’ — Monitoramento de eventos de execução
--------------------------------------------------------------

Adicionado na versão 3.12.

__________________________________________________________________

     Nota: *note sys.monitoring: da. é um espaço de nomes dentro do
     módulo *note sys: d9, não um módulo independente, então não há
     necessidade de importá-lo com ‘import sys.monitoring’, bastando
     usar ‘import sys’ e então usar ‘sys.monitoring’.

Esse espaço de nomes fornece acesso às funções e constantes necessárias
para ativar e controlar o monitoramento de eventos.

À medida que os programas são executados, ocorrem eventos que podem ser
de interesse para as ferramentas que monitoram a execução.  O espaço de
nomes *note sys.monitoring: da. fornece meios para receber retornos de
chamada quando ocorrem eventos de interesse.

A API de monitoramento consiste em três componentes:

   * *note Identificadores de ferramenta: 45d6.

   * *note Eventos: 45d7.

   * *note Funções de retorno de chamadas: 45d8.

* Menu:

* Identificadores de ferramenta::
* Eventos::
* Ativação e desativação de eventos::
* Registro de funções de retorno de chamada::


File: python.info,  Node: Identificadores de ferramenta,  Next: Eventos,  Up: sys monitoring — Monitoramento de eventos de execução

5.29.2.1 Identificadores de ferramenta
......................................

Um identificador de ferramenta é um número inteiro e o nome associado.
Os identificadores de ferramenta são usados para evitar que as
ferramentas interfiram umas nas outras e para permitir que várias
ferramentas operem ao mesmo tempo.  Atualmente, as ferramentas são
totalmente independentes e não podem ser usadas para monitorar umas às
outras.  Essa restrição poderá ser suspensa no futuro.

Antes de registrar ou ativar eventos, uma ferramenta deve escolher um
identificador.  Os identificadores são números inteiros no intervalo de
0 a 5, inclusive.

* Menu:

* Registro e uso de ferramentas::


File: python.info,  Node: Registro e uso de ferramentas,  Up: Identificadores de ferramenta

5.29.2.2 Registro e uso de ferramentas
......................................

 -- Função: sys.monitoring.use_tool_id (tool_id: int, name: str, /) ->
          None

     Deve ser chamado antes que 'tool_id' possa ser usado.  'tool_id'
     deve estar no intervalo de 0 a 5, inclusive.  Levanta um *note
     ValueError: 202. se 'tool_id' estiver em uso.

 -- Função: sys.monitoring.free_tool_id (tool_id: int, /) -> None

     Deve ser chamado quando uma ferramenta não precisar mais do
     endereço 'tool_id'.

     Nota: *note free_tool_id(): 45db. não desabilitará eventos globais
     ou locais associados a 'tool_id', nem cancelará o registro de
     qualquer função de retorno.  Essa função deve ser usada apenas para
     notificar a VM de que o 'tool_id' específico não está mais em uso.

 -- Função: sys.monitoring.get_tool (tool_id: int, /) -> str | None

     Retorna o nome da ferramenta se 'tool_id' estiver em uso; caso
     contrário, retorna ‘None’.  'tool_id' deve estar no intervalo de 0
     a 5, inclusive.

Todas as IDs são tratadas da mesma forma pela VM com relação aos
eventos, mas as seguintes IDs são predefinidas para facilitar a
cooperação entre as ferramentas:

     sys.monitoring.DEBUGGER_ID = 0
     sys.monitoring.COVERAGE_ID = 1
     sys.monitoring.PROFILER_ID = 2
     sys.monitoring.OPTIMIZER_ID = 5


File: python.info,  Node: Eventos,  Next: Ativação e desativação de eventos,  Prev: Identificadores de ferramenta,  Up: sys monitoring — Monitoramento de eventos de execução

5.29.2.3 Eventos
................

Os seguintes eventos são suportados:

 -- monitoring-event: sys.monitoring.events.BRANCH

     Uma ramificação condicional é feita (ou não).

 -- monitoring-event: sys.monitoring.events.CALL

     Uma chamada no código Python (o evento ocorre antes da chamada).

 -- monitoring-event: sys.monitoring.events.C_RAISE

     Uma exceção levantada por qualquer chamável, exceto funções Python
     (o evento ocorre após a saída).

 -- monitoring-event: sys.monitoring.events.C_RETURN

     Retorno de qualquer chamável, exceto por funções Python (o evento
     ocorre após o retorno).

 -- monitoring-event: sys.monitoring.events.EXCEPTION_HANDLED

     Uma exceção é tratada.

 -- monitoring-event: sys.monitoring.events.INSTRUCTION

     Uma instrução VM está prestes a ser executada.

 -- monitoring-event: sys.monitoring.events.JUMP

     É feito um salto incondicional no gráfico do fluxo de controle.

 -- monitoring-event: sys.monitoring.events.LINE

     Está prestes a ser executada uma instrução que tem um número de
     linha diferente da instrução anterior.

 -- monitoring-event: sys.monitoring.events.PY_RESUME

     Retomada de uma função Python (para funções geradoras e de
     corrotina), exceto para chamadas ‘throw()’.

 -- monitoring-event: sys.monitoring.events.PY_RETURN

     Retorno de uma função Python (ocorre imediatamente antes do
     retorno, o quadro do receptor estará na pilha).

 -- monitoring-event: sys.monitoring.events.PY_START

     Início de uma função Python (ocorre imediatamente após a chamada, o
     quadro do receptor da chamada estará na pilha)

 -- monitoring-event: sys.monitoring.events.PY_THROW

     Uma função Python é retomada por uma chamada ‘throw()’.

 -- monitoring-event: sys.monitoring.events.PY_UNWIND

     Saída de uma função Python durante o desenrolar da exceção.

 -- monitoring-event: sys.monitoring.events.PY_YIELD

     Produz de uma função Python (ocorre imediatamente antes do yield, o
     quadro do receptor estará na pilha).

 -- monitoring-event: sys.monitoring.events.RAISE

     Uma exceção é levantada, exceto aquelas que causam um evento *note
     STOP_ITERATION: 45ea.

 -- monitoring-event: sys.monitoring.events.RERAISE

     Uma exceção é levantada novamente, por exemplo, no final de um
     bloco *note finally: 9d2.

 -- monitoring-event: sys.monitoring.events.STOP_ITERATION

     Uma exceção artificial *note StopIteration: c15. é levantada;
     consulte *note o evento STOP_ITERATION: 45ec.

Mais eventos poderão ser adicionados no futuro.

Esses eventos são atributos do espaço de nomes ‘sys.monitoring.events’.
Cada evento é representado como uma constante de potência de 2 inteiros.
Para definir um conjunto de eventos, basta aplicar OU (OR) bit a bit nos
eventos individuais juntos.  Por exemplo, para especificar os eventos
*note PY_RETURN: 45e5. e *note PY_START: 45e6, use a expressão
‘PY_RETURN | PY_START’.

 -- monitoring-event: sys.monitoring.events.NO_EVENTS

     Um apelido para ‘0’ para que os usuários possam fazer comparações
     explícitas como:

          if get_events(DEBUGGER_ID) == NO_EVENTS:
              ...

Os eventos são divididos em três grupos:

* Menu:

* Eventos locais::
* Eventos auxiliares::
* Outros eventos::
* O evento STOP_ITERATION::


File: python.info,  Node: Eventos locais,  Next: Eventos auxiliares,  Up: Eventos

5.29.2.4 Eventos locais
.......................

Os eventos locais estão associados à execução normal do programa e
ocorrem em locais claramente definidos.  Todos os eventos locais podem
ser desativados.  Os eventos locais são:

   * *note PY_START: 45e6.

   * *note PY_RESUME: 45e4.

   * *note PY_RETURN: 45e5.

   * *note PY_YIELD: 45e9.

   * *note CALL: 1734.

   * *note LINE: 45e3.

   * *note INSTRUCTION: 45e1.

   * *note JUMP: 45e2.

   * *note BRANCH: 45dd.

   * *note STOP_ITERATION: 45ea.


File: python.info,  Node: Eventos auxiliares,  Next: Outros eventos,  Prev: Eventos locais,  Up: Eventos

5.29.2.5 Eventos auxiliares
...........................

Os eventos auxiliares podem ser monitorados como outros eventos, mas são
controlados por outro evento:

   * *note C_RAISE: 45de.

   * *note C_RETURN: 45df.

Os eventos *note C_RETURN: 45df. e *note C_RAISE: 45de. são controlados
pelo evento *note CALL: 1734.  Os eventos *note C_RETURN: 45df. e *note
C_RAISE: 45de. só serão vistos se o evento *note CALL: 1734.
correspondente estiver sendo monitorado.


File: python.info,  Node: Outros eventos,  Next: O evento STOP_ITERATION,  Prev: Eventos auxiliares,  Up: Eventos

5.29.2.6 Outros eventos
.......................

Outros eventos não estão necessariamente vinculados a um local
específico no programa e não podem ser desativados individualmente via
*note DISABLE: 45f3.

Os outros eventos que podem ser monitorados são:

   * *note PY_THROW: 45e7.

   * *note PY_UNWIND: 45e8.

   * *note RAISE: 16da.

   * *note EXCEPTION_HANDLED: 45e0.


File: python.info,  Node: O evento STOP_ITERATION,  Prev: Outros eventos,  Up: Eventos

5.29.2.7 O evento STOP_ITERATION
................................

PEP 380(1) especifica que uma exceção *note StopIteration: c15. é
levantada ao retornar um valor de um gerador ou corrotina.  No entanto,
essa é uma maneira muito ineficiente de retornar um valor, portanto,
algumas implementações do Python, especialmente o CPython 3.12+, não
levantam uma exceção, a menos que ela seja visível para outro código.

Para permitir que as ferramentas monitorem exceções reais sem reduzir a
velocidade dos geradores e das corrotinas, o evento *note
STOP_ITERATION: 45ea. é fornecido.  O *note STOP_ITERATION: 45ea. pode
ser desativado localmente, ao contrário do *note RAISE: 16da.

   ---------- Footnotes ----------

   (1) 
https://peps.python.org/pep-0380/#use-of-stopiteration-to-return-values


File: python.info,  Node: Ativação e desativação de eventos,  Next: Registro de funções de retorno de chamada,  Prev: Eventos,  Up: sys monitoring — Monitoramento de eventos de execução

5.29.2.8 Ativação e desativação de eventos
..........................................

Para monitorar um evento, ele deve ser ativado e uma função de retorno
correspondente deve ser registrada.  Os eventos podem ser ativados ou
desativados definindo-os globalmente ou para um objeto código
específico.

* Menu:

* Definir eventos globalmente::
* Eventos por objeto código::
* Desativação de eventos::


File: python.info,  Node: Definir eventos globalmente,  Next: Eventos por objeto código,  Up: Ativação e desativação de eventos

5.29.2.9 Definir eventos globalmente
....................................

Os eventos podem ser controlados globalmente, modificando o conjunto de
eventos que estão sendo monitorados.

 -- Função: sys.monitoring.get_events (tool_id: int, /) -> int

     Retorna o endereço ‘int’ que representa todos os eventos ativos.

 -- Função: sys.monitoring.set_events (tool_id: int, event_set: int, /)
          -> None

     Ativa todos os eventos definidos em 'event_set'.  Levanta um *note
     ValueError: 202. se 'tool_id' não estiver em uso.

Nenhum evento está ativo por padrão.


File: python.info,  Node: Eventos por objeto código,  Next: Desativação de eventos,  Prev: Definir eventos globalmente,  Up: Ativação e desativação de eventos

5.29.2.10 Eventos por objeto código
...................................

Os eventos também podem ser controlados por objeto código.  As funções
definidas abaixo que aceitam um *note types.CodeType: 2df. devem estar
preparadas para aceitar um objeto semelhante de funções que não são
definidas no Python (veja *note API C de monitoramento: 15c.).

 -- Função: sys.monitoring.get_local_events (tool_id: int, code:
          CodeType, /) -> int

     Retorna todos os *note eventos locais: 45ef. para 'code'

 -- Função: sys.monitoring.set_local_events (tool_id: int, code:
          CodeType, event_set: int, /) -> None

     Ativa todos os *note eventos locais: 45ef. para 'code' que estão
     definidos em 'event_set'.  Levanta a *note ValueError: 202. se
     'tool_id' não estiver em uso.

Os eventos locais são adicionados aos eventos globais, mas não os
mascaram.  Em outras palavras, todos os eventos globais serão acionados
para um objeto código, independentemente dos eventos locais.


File: python.info,  Node: Desativação de eventos,  Prev: Eventos por objeto código,  Up: Ativação e desativação de eventos

5.29.2.11 Desativação de eventos
................................

 -- Dado: sys.monitoring.DISABLE

     Um valor especial que pode ser retornado de um função de retorno
     função para desativar eventos para o local do código atual.

Os *note eventos locais: 45ef. podem ser desativados para um local de
código específico, retornando *note sys.monitoring.DISABLE: 45f3. de uma
função de retorno de chamada.  Isso não altera quais eventos são
definidos ou quaisquer outros locais de código para o mesmo evento.

A desativação de eventos para locais específicos é muito importante para
o monitoramento de alto desempenho.  Por exemplo, um programa pode ser
executado em um depurador sem sobrecarga se o depurador desativar todo o
monitoramento, exceto alguns pontos de interrupção.

Se *note DISABLE: 45f3. for retornado por um função de retorno
(callback) para um *note evento global: 45f1, *note ValueError: 202.
será levantada pelo interpretador em um local não específico (ou seja,
nenhum traceback será fornecido).

 -- Função: sys.monitoring.restart_events () -> None

     Habilita todos os eventos que foram desabilitados por *note
     sys.monitoring.DISABLE: 45f3. para todas as ferramentas.


File: python.info,  Node: Registro de funções de retorno de chamada,  Prev: Ativação e desativação de eventos,  Up: sys monitoring — Monitoramento de eventos de execução

5.29.2.12 Registro de funções de retorno de chamada
...................................................

Para registrar um chamável para eventos, chame

 -- Função: sys.monitoring.register_callback (tool_id: int, event: int,
          func: Callable | None, /) -> Callable | None

     Registra o chamável 'func' para o 'event' com o 'tool_id' fornecido

     Se outra função de retorno tiver sido registrada para o 'tool_id' e
     o 'event' fornecidos, ela será cancelada e retornada.  Caso
     contrário, *note register_callback(): 440a. retorna ‘None’.

     Levanta um *note evento de auditoria: 19fa.
     ‘sys.monitoring.register_callback’ com o argumento ‘func’.

As funções podem ser canceladas chamando
‘sys.monitoring.register_callback(tool_id, event, None)’.

As funções de retorno de chamada podem ser registradas e canceladas a
qualquer momento.

* Menu:

* Argumentos da função de retorno de chamada::


File: python.info,  Node: Argumentos da função de retorno de chamada,  Up: Registro de funções de retorno de chamada

5.29.2.13 Argumentos da função de retorno de chamada
....................................................

 -- Dado: sys.monitoring.MISSING

     Um valor especial que é passado para uma função de retorno para
     indicar que não há argumento para a chamada.

Quando ocorre um evento ativo, a função de retorno de chamada registrada
é chamada.  Eventos diferentes fornecerão à função de retorno de chamada
argumentos diferentes, como segue:

   * *note PY_START: 45e6. e *note PY_RESUME: 45e4.:

          func(code: CodeType, instruction_offset: int) -> DISABLE | Any

   * *note PY_RETURN: 45e5. e *note PY_YIELD: 45e9.:

          func(code: CodeType, instruction_offset: int, retval: object) -> DISABLE | Any

   * *note CALL: 1734, *note C_RAISE: 45de. e *note C_RETURN: 45df.:

          func(code: CodeType, instruction_offset: int, callable: object, arg0: object | MISSING) -> DISABLE | Any

     Se não houver argumentos, 'arg0' será definido como *note
     sys.monitoring.MISSING: 45ff.

   * *note RAISE: 16da, *note RERAISE: 45eb, *note EXCEPTION_HANDLED:
     45e0, *note PY_UNWIND: 45e8, *note PY_THROW: 45e7. e *note
     STOP_ITERATION: 45ea.:

          func(code: CodeType, instruction_offset: int, exception: BaseException) -> DISABLE | Any

   * *note LINE: 45e3.:

          func(code: CodeType, line_number: int) -> DISABLE | Any

   * *note BRANCH: 45dd. e *note JUMP: 45e2.:

          func(code: CodeType, instruction_offset: int, destination_offset: int) -> DISABLE | Any

     Observe que 'destination_offset' é onde o código será executado em
     seguida.  Para uma ramificação não executada, esse será o
     deslocamento da instrução que segue a ramificação.

   * *note INSTRUCTION: 45e1.:

          func(code: CodeType, instruction_offset: int) -> DISABLE | Any


File: python.info,  Node: sysconfig — Fornece acesso às informações de configuração do Python,  Next: builtins — Objetos embutidos,  Prev: sys monitoring — Monitoramento de eventos de execução,  Up: Serviços de Tempo de Execução Python

5.29.3 ‘sysconfig’ — Fornece acesso às informações de configuração do Python
----------------------------------------------------------------------------

Adicionado na versão 3.2.

'Código-fonte:' Lib/sysconfig(1)

__________________________________________________________________

O módulo *note sysconfig: db. fornece acesso às informações de
configuração do Python, como a lista de caminhos de instalação e as
variáveis de configuração relevantes para a plataforma atual.

* Menu:

* Variáveis de configuração::
* Caminhos de instalação::
* Esquema de usuário::
* Esquema de home::
* Esquema de prefixo::
* Funções de caminho de instalação::
* Outras funções: Outras funções<3>.
* Uso na linha de comando: Uso na linha de comando<8>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/sysconfig


File: python.info,  Node: Variáveis de configuração,  Next: Caminhos de instalação,  Up: sysconfig — Fornece acesso às informações de configuração do Python

5.29.3.1 Variáveis de configuração
..................................

Uma distribuição do Python contém um arquivo de cabeçalho ‘Makefile’ e
‘pyconfig.h’ que são necessários para construir o próprio binário do
Python e extensões C de terceiros compiladas usando ‘setuptools’.

*note sysconfig: db. coloca todas as variáveis encontradas nestes
arquivos em um dicionário que pode ser acessado usando *note
get_config_vars(): 1064. ou *note get_config_var(): 1063.

Note que no Windows, é um conjunto muito menor.

 -- Função: sysconfig.get_config_vars (*args)

     Sem argumentos, retorna um dicionário de todas as variáveis de
     configuração relevantes para a plataforma atual.

     Com argumentos, retorna uma lista de valores resultantes da
     pesquisa de cada argumento no dicionário de variáveis de
     configuração.

     Para cada argumento, se o valor não for encontrado, retorna ‘None’.

 -- Função: sysconfig.get_config_var (name)

     Retorna o valor de uma única variável 'name'.  Equivalente a
     ‘get_config_vars().get(name)’.

     Se 'name' não for encontrado, retorna ‘None’.

Exemplo de uso:

     >>> import sysconfig
     >>> sysconfig.get_config_var('Py_ENABLE_SHARED')
     0
     >>> sysconfig.get_config_var('LIBDIR')
     '/usr/local/lib'
     >>> sysconfig.get_config_vars('AR', 'CXX')
     ['ar', 'g++']


File: python.info,  Node: Caminhos de instalação,  Next: Esquema de usuário,  Prev: Variáveis de configuração,  Up: sysconfig — Fornece acesso às informações de configuração do Python

5.29.3.2 Caminhos de instalação
...............................

O Python usa um esquema de instalação que difere dependendo da
plataforma e das opções de instalação.  Esses esquemas são armazenados
em *note sysconfig: db. sob identificadores únicos baseados no valor
retornado por *note os.name: 2ce3.  Os esquemas são usados por
instaladores de pacote para determinar para onde copiar arquivos.

Python atualmente oferece suporte a nove esquemas:

   - 'posix_prefix': esquema para plataformas POSIX como Linux ou macOS.
     Este é o esquema padrão usado quando o Python ou um componente é
     instalado.

   - 'posix_home': esquema para plataformas POSIX, quando a opção 'home'
     é usada.  Esse esquema define caminhos localizados sob um prefixo
     inicial específico.

   - 'posix_user': esquema para plataformas POSIX, quando a opção 'user'
     é usada.  Esse esquema define caminhos localizados sob o diretório
     pessoal (home) do usuário (*note site.USER_BASE: 1361.).

   - 'posix_venv': esquema para *note ambientes virtuais do Python: 111.
     em plataformas POSIX; por padrão, é o mesmo que 'posix_prefix'.

   - 'nt': esquema para Windows.  Este é o esquema padrão usado quando o
     Python ou um componente é instalado.

   - 'nt_user': esquema para Windows, quando utilizada a opção 'user'.

   - 'nt_venv': esquema para *note ambientes virtuais do Python: 111. no
     Windows; por padrão, é o mesmo que 'nt_prefix'.

   - 'venv': um esquema com valores de 'posix_venv' ou 'nt_venv'
     dependendo da plataforma em que o Python é executado.

   - 'osx_framework_user': esquema para plataformas macOS, quando
     utilizada a opção 'user'.

Cada esquema é composto por uma série de caminhos e cada caminho possui
um identificador único.  Python atualmente usa oito caminhos:

   - 'stdlib': diretório que contém os arquivos da biblioteca Python
     padrão que não são específicos da plataforma.

   - 'platstdlib': diretório que contém os arquivos da biblioteca Python
     padrão que são específicos da plataforma.

   - 'platlib': diretório para arquivos específicos do site e
     específicos da plataforma.

   - 'purelib': diretório para arquivos específicos do site e não
     específicos da plataforma (Python ‘pure’).

   - 'include': diretório para arquivos de cabeçalho não específicos da
     plataforma para a API C do Python.

   - 'platinclude': diretório para arquivos de cabeçalho específicos da
     plataforma para a API C do Python.

   - 'scripts': diretório para arquivos de script.

   - 'data': diretório para arquivos de dados.


File: python.info,  Node: Esquema de usuário,  Next: Esquema de home,  Prev: Caminhos de instalação,  Up: sysconfig — Fornece acesso às informações de configuração do Python

5.29.3.3 Esquema de usuário
...........................

Este esquema foi projetado para ser a solução mais conveniente para
usuários que não têm permissão de escrita no diretório global de pacotes
de sites ou não desejam instalar nele.

Os arquivos serão instalados em subdiretórios de *note site.USER_BASE:
1361. (escrito como ‘`userbase'’ daqui em diante).  Este esquema instala
módulos Python puros e módulos de extensão no mesmo local (também
conhecido como *note site.USER_SITE: 1ecf.).

* Menu:

* posix_user::
* nt_user::
* osx_framework_user::


File: python.info,  Node: posix_user,  Next: nt_user,  Up: Esquema de usuário

5.29.3.4 ‘posix_user’
.....................

Caminho            Diretório de instalação
                   
-----------------------------------------------------------------------------------
                   
'stdlib'           ‘`userbase'/lib/python`X.Y'’
                   
                   
'platstdlib'       ‘`userbase'/lib/python`X.Y'’
                   
                   
'platlib'          ‘`userbase'/lib/python`X.Y'/site-packages’
                   
                   
'purelib'          ‘`userbase'/lib/python`X.Y'/site-packages’
                   
                   
'include'          ‘`userbase'/include/python`X.Y'’
                   
                   
'scripts'          ‘`userbase'/bin’
                   
                   
'data'             ‘`userbase'’
                   


File: python.info,  Node: nt_user,  Next: osx_framework_user,  Prev: posix_user,  Up: Esquema de usuário

5.29.3.5 ‘nt_user’
..................

Caminho            Diretório de instalação
                   
-----------------------------------------------------------------------------------
                   
'stdlib'           ‘`userbase'\Python`XY'’
                   
                   
'platstdlib'       ‘`userbase'\Python`XY'’
                   
                   
'platlib'          ‘`userbase'\Python`XY'\site-packages’
                   
                   
'purelib'          ‘`userbase'\Python`XY'\site-packages’
                   
                   
'include'          ‘`userbase'\Python`XY'\Include’
                   
                   
'scripts'          ‘`userbase'\Python`XY'\Scripts’
                   
                   
'data'             ‘`userbase'’
                   


File: python.info,  Node: osx_framework_user,  Prev: nt_user,  Up: Esquema de usuário

5.29.3.6 ‘osx_framework_user’
.............................

Caminho            Diretório de instalação
                   
-----------------------------------------------------------------------------------
                   
'stdlib'           ‘`userbase'/lib/python’
                   
                   
'platstdlib'       ‘`userbase'/lib/python’
                   
                   
'platlib'          ‘`userbase'/lib/python/site-packages’
                   
                   
'purelib'          ‘`userbase'/lib/python/site-packages’
                   
                   
'include'          ‘`userbase'/include/python`X.Y'’
                   
                   
'scripts'          ‘`userbase'/bin’
                   
                   
'data'             ‘`userbase'’
                   


File: python.info,  Node: Esquema de home,  Next: Esquema de prefixo,  Prev: Esquema de usuário,  Up: sysconfig — Fornece acesso às informações de configuração do Python

5.29.3.7 Esquema de home
........................

A ideia por trás do “esquema home” é que você construa e mantenha um
estoque pessoal de módulos Python.  O nome deste esquema é derivado da
ideia de um diretório “home” no Unix, uma vez que não é incomum para um
usuário Unix fazer seu diretório home ter um layout semelhante a ‘/usr/’
ou ‘/usr/local/’.  Este esquema pode ser usado por qualquer pessoa,
independentemente do sistema operacional para o qual está instalando.

* Menu:

* posix_home::


File: python.info,  Node: posix_home,  Up: Esquema de home

5.29.3.8 ‘posix_home’
.....................

Caminho            Diretório de instalação
                   
-----------------------------------------------------------------------------------
                   
'stdlib'           ‘`home'/lib/python’
                   
                   
'platstdlib'       ‘`home'/lib/python’
                   
                   
'platlib'          ‘`home'/lib/python’
                   
                   
'purelib'          ‘`home'/lib/python’
                   
                   
'include'          ‘`home'/include/python’
                   
                   
'platinclude'      ‘`home'/include/python’
                   
                   
'scripts'          ‘`home'/bin’
                   
                   
'data'             ‘`home'’
                   


File: python.info,  Node: Esquema de prefixo,  Next: Funções de caminho de instalação,  Prev: Esquema de home,  Up: sysconfig — Fornece acesso às informações de configuração do Python

5.29.3.9 Esquema de prefixo
...........................

O “esquema prefixo” é útil quando você deseja usar uma instalação Python
para realizar a compilação/instalação (ou seja, para executar o script
de configuração), mas instalar módulos no diretório de módulo de
terceiros de uma instalação Python diferente (ou algo que parece uma
instalação diferente do Python).  Se isso parece um pouco incomum, então
é – é por isso que os esquemas usuário e home vêm antes.  No entanto,
existem pelo menos dois casos conhecidos em que o esquema prefixo será
útil.

Primeiro, considere que muitas distribuições Linux colocam Python em
‘/usr’, ao invés do mais tradicional ‘/usr/local’.  Isso é totalmente
apropriado, já que, nesses casos, o Python é parte do “sistema” em vez
de um complemento local.  No entanto, se você estiver instalando módulos
Python a partir do código-fonte, provavelmente deseja que eles entrem em
‘/usr/local/lib/python2.`X'’ em vez de ‘/usr/lib/python2.`X'’.

Outra possibilidade é um sistema de arquivos de rede onde o nome usado
para escrever em um diretório remoto é diferente do nome usado para
lê-lo: por exemplo, o interpretador Python acessado como
‘/usr/local/bin/python’ pode pesquisar por módulos em
‘/usr/local/lib/python2.`X'’, mas esses módulos teriam que ser
instalados em, digamos, ‘/mnt/`@server'/export/lib/python2.`X'’.

* Menu:

* posix_prefix::
* nt::


File: python.info,  Node: posix_prefix,  Next: nt,  Up: Esquema de prefixo

5.29.3.10 ‘posix_prefix’
........................

Caminho            Diretório de instalação
                   
----------------------------------------------------------------------------------
                   
'stdlib'           ‘`prefix'/lib/python`X.Y'’
                   
                   
'platstdlib'       ‘`prefix'/lib/python`X.Y'’
                   
                   
'platlib'          ‘`prefix'/lib/python`X.Y'/site-packages’
                   
                   
'purelib'          ‘`prefix'/lib/python`X.Y'/site-packages’
                   
                   
'include'          ‘`prefix'/include/python`X.Y'’
                   
                   
'platinclude'      ‘`prefix'/include/python`X.Y'’
                   
                   
'scripts'          ‘`prefix'/bin’
                   
                   
'data'             ‘`prefix'’
                   


File: python.info,  Node: nt,  Prev: posix_prefix,  Up: Esquema de prefixo

5.29.3.11 ‘nt’
..............

Caminho            Diretório de instalação
                   
----------------------------------------------------------------------------------
                   
'stdlib'           ‘`prefix'\Lib’
                   
                   
'platstdlib'       ‘`prefix'\Lib’
                   
                   
'platlib'          ‘`prefix'\Lib\site-packages’
                   
                   
'purelib'          ‘`prefix'\Lib\site-packages’
                   
                   
'include'          ‘`prefix'\Include’
                   
                   
'platinclude'      ‘`prefix'\Include’
                   
                   
'scripts'          ‘`prefix'\Scripts’
                   
                   
'data'             ‘`prefix'’
                   


File: python.info,  Node: Funções de caminho de instalação,  Next: Outras funções<3>,  Prev: Esquema de prefixo,  Up: sysconfig — Fornece acesso às informações de configuração do Python

5.29.3.12 Funções de caminho de instalação
..........................................

*note sysconfig: db. fornece algumas funções para determinar esses
caminhos de instalação.

 -- Função: sysconfig.get_scheme_names ()

     Retorna uma tupla contendo todos os esquemas atualmente suportados
     em *note sysconfig: db.

 -- Função: sysconfig.get_default_scheme ()

     Retorna o nome do esquema padrão para a plataforma atual.

     Adicionado na versão 3.10: Esta função era chamada de
     ‘_get_default_scheme()’ e considerada um detalhe de implementação.

     Alterado na versão 3.11: Quando o Python é executado em um ambiente
     virtual, o esquema 'venv' é retornado.

 -- Função: sysconfig.get_preferred_scheme (key)

     Retorna um nome de esquema preferido para um layout de instalação
     especificado por 'key'.

     'key' deve ser ‘"prefix"’, ‘"home"’ ou ‘"user"’.

     O valor de retorno é um nome de esquema listado em *note
     get_scheme_names(): 4611.  Ele pode ser passado para as funções
     *note sysconfig: db. que recebem um argumento 'scheme', como *note
     get_paths(): 1285.

     Adicionado na versão 3.10.

     Alterado na versão 3.11: Quando o Python é executado em um ambiente
     virtual e ‘key="prefix"’, o esquema 'venv' é retornado.

 -- Função: sysconfig._get_preferred_schemes ()

     Retorna um dict contendo nomes de esquema preferidos na plataforma
     atual.  Os implementadores e redistribuidores do Python podem
     adicionar seus esquemas preferidos ao valor global de nível de
     módulo ‘_INSTALL_SCHEMES’ e modificar esta função para retornar
     esses nomes de esquema.  Por exemplo, fornecer esquemas diferentes
     para os gerenciadores de pacotes de sistema e idioma usarem, de
     modo que os pacotes instalados por um não se misturem com os do
     outro.

     Os usuários finais não devem usar esta função, mas *note
     get_default_scheme(): 193f. e *note get_preferred_scheme(): 690.

     Adicionado na versão 3.10.

 -- Função: sysconfig.get_path_names ()

     Retorna uma tupla contendo todos os nomes de caminhos atualmente
     suportados em *note sysconfig: db.

 -- Função: sysconfig.get_path (name[, scheme[, vars[, expand]]])

     Retorna um caminho de instalação correspondente ao caminho 'name',
     do esquema de instalação denominado 'scheme'.

     'name' deve ser um valor da lista retornada por *note
     get_path_names(): 4613.

     *note sysconfig: db. armazena os caminhos de instalação
     correspondentes a cada nome de caminho, para cada plataforma, com
     variáveis a serem expandidas.  Por exemplo, o caminho 'stdlib' para
     o esquema 'nt' é: ‘{base}/Lib’.

     *note get_path(): 1372. usará as variáveis retornadas por *note
     get_config_vars(): 1064. para expandir o caminho.  Todas as
     variáveis possuem valores padrão para cada plataforma, portanto,
     pode-se chamar esta função e obter o valor padrão.

     Se 'scheme' for fornecido, deve ser um valor da lista retornada por
     *note get_scheme_names(): 4611.  Caso contrário, o esquema padrão
     para a plataforma atual é usado.

     Se 'vars' for fornecido, deve ser um dicionário de variáveis que
     atualizará o dicionário retornado por *note get_config_vars():
     1064.

     Se 'expand' for definido como ‘False’, o caminho não será expandido
     usando as variáveis.

     Se 'name' não for encontrado, levanta uma *note KeyError: 344.

 -- Função: sysconfig.get_paths ([scheme[, vars[, expand]]])

     Retorna um dicionário contendo todos os caminhos de instalação
     correspondentes a um esquema de instalação.  Veja *note get_path():
     1372. para mais informações.

     Se 'esquema' não for fornecido, usará o esquema padrão para a
     plataforma atual.

     Se 'vars' for fornecido, deve ser um dicionário de variáveis que
     atualizará o dicionário usado para expandir os caminhos.

     Se 'expand' for definido como falso, os caminhos não serão
     expandidos.

     Se 'scheme' não for um esquema existente, *note get_paths(): 1285.
     vai levantar uma *note KeyError: 344.


File: python.info,  Node: Outras funções<3>,  Next: Uso na linha de comando<8>,  Prev: Funções de caminho de instalação,  Up: sysconfig — Fornece acesso às informações de configuração do Python

5.29.3.13 Outras funções
........................

 -- Função: sysconfig.get_python_version ()

     Retorna o número da versão Python ‘MAJOR.MINOR’ como uma string.
     Semelhante a ‘'%d.%d' % sys.version_info[:2]’.

 -- Função: sysconfig.get_platform ()

     Retorna uma string que identifica a plataforma atual.

     Isso é usado principalmente para distinguir diretórios de
     construção específicos da plataforma e distribuições construídas
     específicas da plataforma.  Geralmente inclui o nome e a versão do
     sistema operacional e a arquitetura (conforme fornecido por *note
     os.uname(): 1155.), embora as informações exatas incluídas dependam
     do sistema operacional; por exemplo, no Linux, a versão do kernel
     não é particularmente importante.

     Exemplos de valores retornados:

     Windows:

        - win-amd64 (Windows 64 bits no AMD64, isto é, x86_64, Intel64 e
          EM64T)

        - win-arm64 (Windows 64 bits no ARM64, isto é, AArch64)

        - win32 (todos os demais - especificamente, sys.platform é
          retornado)

     SO baseado em POSIX:

        - linux-x86_64

        - macosx-15.5-arm64

        - macosx-26.0-universal2 (macOS sobre Apple Silicon ou Intel)

        - android-24-arm64_v8a

     Para outras plataformas não POSIX, é retornado apenas *note
     sys.platform: a97.

 -- Função: sysconfig.is_python_build ()

     Retorna ‘True’ se o interpretador Python em execução foi construído
     a partir do código-fonte e está sendo executado a partir de seu
     local de construção, e não de um local resultante de, por exemplo,
     executando ‘make install’ ou instalando através de um instalador
     binário.

 -- Função: sysconfig.parse_config_h (fp[, vars])

     Analisa um arquivo no estilo ‘config.h’.

     'fp' é um objeto arquivo ou similar apontando para o arquivo
     ‘config.h’ ou similar.

     Um dicionário contendo pares nome/valor é retornado.  Se um
     dicionário opcional for passado como segundo argumento, ele será
     usado no lugar de um novo dicionário e atualizado com os valores
     lidos no arquivo.

 -- Função: sysconfig.get_config_h_filename ()

     Retorna o caminho do ‘pyconfig.h’.

 -- Função: sysconfig.get_makefile_filename ()

     Retorna o caminho do ‘Makefile’.


File: python.info,  Node: Uso na linha de comando<8>,  Prev: Outras funções<3>,  Up: sysconfig — Fornece acesso às informações de configuração do Python

5.29.3.14 Uso na linha de comando
.................................

Você pode usar *note sysconfig: db. como um script com a opção '-m' do
Python:

     $ python -m sysconfig
     Platform: "macosx-10.4-i386"
     Python version: "3.2"
     Current installation scheme: "posix_prefix"

     Paths:
             data = "/usr/local"
             include = "/Users/tarek/Dev/svn.python.org/py3k/Include"
             platinclude = "."
             platlib = "/usr/local/lib/python3.2/site-packages"
             platstdlib = "/usr/local/lib/python3.2"
             purelib = "/usr/local/lib/python3.2/site-packages"
             scripts = "/usr/local/bin"
             stdlib = "/usr/local/lib/python3.2"

     Variables:
             AC_APPLE_UNIVERSAL_BUILD = "0"
             AIX_GENUINE_CPLUSPLUS = "0"
             AR = "ar"
             ARFLAGS = "rc"
             ...

Esta chamada imprimirá na saída padrão as informações retornadas por
*note get_platform(): 1283, *note get_python_version(): 1284, *note
get_path(): 1372. e *note get_config_vars(): 1064.


File: python.info,  Node: builtins — Objetos embutidos,  Next: __main__ — Ambiente de código principal,  Prev: sysconfig — Fornece acesso às informações de configuração do Python,  Up: Serviços de Tempo de Execução Python

5.29.4 ‘builtins’ — Objetos embutidos
-------------------------------------

__________________________________________________________________

Este módulo fornece acesso direto a todos os identificadores embutidos
do Python; Por exemplo, ‘builtins.open’ é o nome completo para a função
embutida *note open(): 51c.

Este módulo normalmente não é acessado explicitamente pela maioria dos
aplicativos, mas pode ser útil em módulos que fornecem objetos com o
mesmo nome como um valor embutido, mas em que o objeto embutido desse
nome também é necessário.  Por exemplo, em um módulo que deseja
implementar uma função *note open(): 51c. que envolve o embutido *note
open(): 51c, este módulo pode ser usado diretamente:

     import builtins

     def open(path):
         f = builtins.open(path, 'r')
         return UpperCaser(f)

     class UpperCaser:
         '''Envoltório em volta de um arquivo que converte saída para maiúsculo.'''

         def __init__(self, f):
             self._f = f

         def read(self, count=-1):
             return self._f.read(count).upper()

         # ...

Como um detalhe de implementação, a maioria dos módulos tem o nome
‘__builtins__’ disponibilizados como parte de seus globais.  O valor de
‘__builtins__’ normalmente, este é o módulo ou o valor desse módulo
*note __dict__: 55b. atributo.  Uma vez que este é um detalhe de
implementação, ele não pode ser usado por implementações alternativas do
Python.

Ver também
..........

   * *note Constantes embutidas: 231a.

   * *note Exceções embutidas: 19b1.

   * *note Funções embutidas: 129e.

   * *note Tipos embutidos: 2322.


File: python.info,  Node: __main__ — Ambiente de código principal,  Next: warnings — Controle de avisos,  Prev: builtins — Objetos embutidos,  Up: Serviços de Tempo de Execução Python

5.29.5 ‘__main__’ — Ambiente de código principal
------------------------------------------------

__________________________________________________________________

Em Python, o nome especial ‘__main__’ é usado em duas construções
importantes:

  1. O nome do ambiente principal do programa, que pode ser verificado
     usando a expressão ‘__name__ == '__main__'’; e

  2. o arquivo ‘__main__.py’ em pacotes Python.

Ambas as formas estão relacionadas aos módulos Python; como os usuários
interagem com eles e como eles interagem entre si.  Eles serão
explicados em detalhes abaixo.  Se você ainda não conhece módulos
Python, veja a seção *note Módulos: 1ddc. para uma introdução.

* Menu:

* __name__ == '__main__'::
* __main__.py em pacotes Python: __main__ py em pacotes Python.
* import __main__::


File: python.info,  Node: __name__ == '__main__',  Next: __main__ py em pacotes Python,  Up: __main__ — Ambiente de código principal

5.29.5.1 ‘__name__ == '__main__'’
.................................

Quando um pacote ou módulo Python é importado, ‘__name__’ é definido
como o nome do módulo.  Normalmente, este é o nome do próprio arquivo
Python sem a extensão ‘.py’:

     >>> import configparser
     >>> configparser.__name__
     'configparser'

Caso o arquivo seja parte de um pacote, ‘__name__’ também incluirá o
nome da pasta raiz do pacote.

     >>> from concurrent.futures import process
     >>> process.__name__
     'concurrent.futures.process'

Porém, se o módulo for executado como o código principal, ‘__name__’
passa a ser definido como a string ‘'__main__'’

* Menu:

* O que é o “ambiente de código principal”?::
* Uso idiomático::
* Considerações sobre pacotes::


File: python.info,  Node: O que é o “ambiente de código principal”?,  Next: Uso idiomático,  Up: __name__ == '__main__'

5.29.5.2 O que é o “ambiente de código principal”?
..................................................

‘__main__’ é o nome do ambiente principal no qual o código é executado.
“Ambiente de código principal” é o primeiro módulo Python definido pelo
usuário que começa a ser executado.  É considerado principal porque ele
importa todos os outros módulos que o programa precisa.  As vezes,
“ambiente principal” também pode ser chamado de “ponto de entrada” da
aplicação.

O ambiente de código principal pode ser:

   * o escopo de um prompt de comando interativo:

          >>> __name__
          '__main__'

   * o módulo Python passado ao interpretador do Python como um
     argumento correspondente ao nome do arquivo:

          $ python helloworld.py
          Hello, world!

   * o módulo ou pacote Python passado ao interpretador do Python com o
     argumento *note -m: 5e1.:

          $ python -m tarfile
          usage: tarfile.py [-h] [-v] (...)

   * código Python lido pelo interpretador através da entrada padrão de
     linha de comando:

          $ echo "import this" | python
          The Zen of Python, by Tim Peters

          Beautiful is better than ugly.
          Explicit is better than implicit.
          ...

   * código Python passado ao interpretador do Python com o argumento
     *note -c: 5e0.:

          $ python -c "import this"
          The Zen of Python, by Tim Peters

          Beautiful is better than ugly.
          Explicit is better than implicit.
          ...

Em cada uma destas situações, a variável especial ‘__name__’ passa a ser
definida como ‘'__main__'’.

Como resultado, um módulo pode saber se está ou não sendo executado no
ambiente principal verificando seu próprio ‘__name__’, que habilita um
termo comum para executar código condicionalmente quando o módulo não é
inicializado a partir de uma instrução de importação:

     if __name__ == '__main__':
         # Executa quando o módulo não é inicializado por uma instrução de importação.
         ...

Ver também
..........

Para uma visão mais detalhada sobre como ‘__name__’ é definido em todas
as situações, veja a sessão *note Módulos: 1ddc.


File: python.info,  Node: Uso idiomático,  Next: Considerações sobre pacotes,  Prev: O que é o “ambiente de código principal”?,  Up: __name__ == '__main__'

5.29.5.3 Uso idiomático
.......................

Alguns módulos contém códigos que são específicos para serem usados como
scripts, como análise de argumentos através de linha de comando ou
leitura de dados da entrada padrão.  Se um módulo como o citado for
importado em um outro módulo diferente, por exemplo em testes unitários,
o código do script também seria executado de forma indesejada.

É aqui onde o uso do trecho de código ‘if __name__ == '__main__'’
revela-se útil.  Os códigos dentro desta condicional não rodarão ao não
ser que o módulo seja executado através do ambiente principal.

Colocar o mínimo de instruções possível no bloco abaixo de ‘if __name__
== '__main__'’ pode melhorar a clareza e a precisão do código.  Na
maioria das vezes, uma função chamada de ‘main’ encapsula o
comportamento principal do programa:

     # echo.py

     import shlex
     import sys

     def echo(phrase: str) -> None:
        """Um invólucro fictício sobre print."""
        # com propósito de demonstração, imagine que existe
        # uma lógica reutilizável valiosa nesta função
        print(phrase)

     def main() -> int:
         """Ecoa os argumentos de entrada para a saída padrão."""
         phrase = shlex.join(sys.argv)
         echo(phrase)
         return 0

     if __name__ == '__main__':
         sys.exit(main())  # a próxima seção explica o uso de sys.exit

Repare quem se o módulo, ao invés de ter encapsulado o código dentro da
função ‘main’, fosse colocado direto dentro do bloco ‘if __name__ ==
'__main__'’, a variável ‘phrase’ seria global para todo o módulo.  Isto
é suscetível à erros pois outras funções dentro do módulo poderiam
inadvertidamente usar a variável global ao invés da local.  A função
‘main’ resolve este problema.

O uso da função ‘main’ tem o benefício adicional de a própria função
‘echo’ ser isolada e importável em outro lugar.  Quando ‘echo.py’ é
importado, as funções ‘echo’ e ‘main’ serão definidas, mas nenhuma delas
será chamada por conta do bloco ‘__name__ != '__main__'’.


File: python.info,  Node: Considerações sobre pacotes,  Prev: Uso idiomático,  Up: __name__ == '__main__'

5.29.5.4 Considerações sobre pacotes
....................................

‘main’ são funções frequentemente usadas para criar ferramentas de linha
de comando especificando-as como pontos de entrada para scripts de
console.  Quando isto é feito, pip(1) insere a chamada da função em um
modelo de script, onde o valor de retorno de ‘main’ é passado para *note
sys.exit(): 138e.  Por exemplo:

     sys.exit(main())

Uma vez que a chamada à ‘main’ está embutida dentro de *note sys.exit():
138e, a expectativa é que a sua função retorne somente valores aceitável
para *note sys.exit(): 138e.; normalmente um inteiro ou ‘None’
(retornado de forma implícita, caso a sua função não tenha uma instrução
de retorno).

Seguindo proativamente essa convenção, nosso módulo terá o mesmo
comportamento quando executado diretamente (ou seja, ‘python echo.py’)
como terá também se posteriormente criarmos um pacote como um ponto de
entrada de script de console em um pacote instalável via pip.

Em particular, tenha cuidado ao retornar strings de sua função ‘main’.
*note sys.exit(): 138e. interpretará um argumento de string como uma
mensagem de falha, então seu programa terá um código de saída ‘1’,
indicando falha, e a string será escrita em *note sys.stderr: 940.  O
exemplo anterior de ‘echo.py’ exemplifica o uso da convenção
‘sys.exit(main())’.

Ver também
..........

O Guia de Usuário para Empacotamento de Python(2) contém uma coleção de
tutoriais e referências sobre como distribuir e instalar pacotes Python
com ferramentas modernas.

   ---------- Footnotes ----------

   (1) https://pip.pypa.io/

   (2) https://packaging.python.org/


File: python.info,  Node: __main__ py em pacotes Python,  Next: import __main__,  Prev: __name__ == '__main__',  Up: __main__ — Ambiente de código principal

5.29.5.5 ‘__main__.py’ em pacotes Python
........................................

Se você não estiver familiarizado com pacotes Python, veja a seção *note
Pacotes: 1ded. do tutorial.  Mais comumente, o arquivo ‘__main__.py’ é
usado para fornecer uma interface de linha de comando para um pacote.
Considere o seguinte pacote hipotético, “bandclass”:

     bandclass
       ├── __init__.py
       ├── __main__.py
       └── student.py

‘__main__.py’ será executado quando o próprio pacote for invocado
diretamente da linha de comando usando o sinalizador *note -m: 5e1.  Por
exemplo:

     $ python -m bandclass

Este comando fará com que ‘__main__.py’ seja executado.  Como você
utiliza esse mecanismo dependerá da natureza do pacote que você está
escrevendo, mas neste caso hipotético, pode fazer sentido permitir que o
professor procure alunos:

     # bandclass/__main__.py

     import sys
     from .student import search_students

     student_name = sys.argv[1] if len(sys.argv) >= 2 else ''
     print(f'Estudante encontrado(a): {search_students(student_name)}')

Observe que ‘from .student import search_students’ é um exemplo de
importação relativa.  Esse estilo de importação pode ser usado ao fazer
referência a módulos em um pacote.  Para mais detalhes, veja *note
Referências em um mesmo pacote: 1df2. na seção *note Módulos: 1ddc. do
tutorial.

* Menu:

* Uso idiomático: Uso idiomático<2>.


File: python.info,  Node: Uso idiomático<2>,  Up: __main__ py em pacotes Python

5.29.5.6 Uso idiomático
.......................

O conteúdo do ‘__main__.py’ normalmente não é protegido por um bloco ‘if
__name__ == '__main__'’ .  Em vez disso, esses arquivos são mantidos
curtos e importa funções para serem executados a partir de outros
módulos.  Esses outros módulos podem então ter suas unidades facilmente
testadas e são adequadamente reutilizáveis.

Se usado, o bloco condicional ‘if __name__ == '__main__'’ ainda
funcionará como esperado para o arquivo ‘__main__.py’ dentro de um
pacote, pois seu atributo ‘__name__’ incluirá o caminho do pacote se
importado:

     >>> import asyncio.__main__
     >>> asyncio.__main__.__name__
     'asyncio.__main__'

Porém, isso não funcionará para arquivos ‘__main__.py’ no diretório raiz
de um arquivo ‘.zip’.  Portanto, para consistência, é preferível um
‘__main__.py’ mínimo sem uma verificação de ‘__name__’.

Ver também
..........

Veja *note venv: 111, da biblioteca padrão, para um exemplo de pacote
com um ‘__main__.py’ minimalista.  Ele não contém um bloco ‘if __name__
== '__main__'’.  Você pode invocá-lo com ‘python -m venv [directory]’.

Veja *note runpy: be. para mais detalhes sobre o sinalizador *note -m:
5e1. para o executável do interpretador.

Veja *note zipapp: 130. para saber como executar aplicativos compactados
como arquivos '.zip'.  Nesse caso, o Python procura um arquivo
‘__main__.py’ no diretório raiz do arquivo.


File: python.info,  Node: import __main__,  Prev: __main__ py em pacotes Python,  Up: __main__ — Ambiente de código principal

5.29.5.7 ‘import __main__’
..........................

Independentemente do módulo com o qual um programa Python foi iniciado,
outros módulos executados no mesmo programa podem importar o escopo do
ambiente principal (*note espaço de nomes: 1ddd.) importando o módulo
‘__main__’.  Isso não faz a importação de um arquivo ‘__main__.py’, mas
sim qualquer módulo que recebeu o nome especial ‘'__main__'’.

Aqui está um módulo de exemplo que consome o espaço de nomes ‘__main__’:

     # namely.py

     import __main__

     def did_user_define_their_name():
         return 'my_name' in dir(__main__)

     def print_user_name():
         if not did_user_define_their_name():
             raise ValueError('Defina a variável `my_name`!')

         if '__file__' in dir(__main__):
             print(__main__.my_name, "encontrado no arquivo", __main__.__file__)
         else:
             print(__main__.my_name)

Exemplo de uso deste módulo pode ser como abaixo:

     # start.py

     import sys

     from namely import print_user_name

     # my_name = "Dinsdale"

     def main():
         try:
             print_user_name()
         except ValueError as ve:
             return str(ve)

     if __name__ == "__main__":
         sys.exit(main())

Agora, se iniciarmos nosso programa, o resultado seria assim:

     $ python start.py
     Defina a variável `my_name`!

O código de saída do programa seria 1, indicando um erro.  Descomentar a
linha com ‘my_name = "Dinsdale"’ corrige o programa e agora ele sai com
o código de status 0, indicando sucesso:

     $ python start.py
     Dinsdale encontrado no arquivo /path/to/start.py

Observe que a importação de ‘__main__’ não causa nenhum problema com a
execução involuntária de código principal destinado ao uso de script que
é colocado no bloco ‘if __name__ == "__main__"’ do módulo ‘start’.  Por
que isso funciona?

O Python insere um módulo ‘__main__’ vazio em *note sys.modules: 1636.
na inicialização do interpretador e o preenche executando o código
principal.  Em nosso exemplo, este é o módulo ‘start’ que executa linha
por linha e importa ‘namely’.  Por sua vez, ‘namely’ importa ‘__main__’
(que é realmente ‘start’).  Isso é um ciclo de importação!  Felizmente,
como o módulo ‘__main__’ parcialmente preenchido está presente em *note
sys.modules: 1636, o Python o passa para ‘namely’.  Veja *note
Considerações especiais sobre __main__: 219a. na referência do sistema
de importação para detalhes sobre como isso funciona.

O REPL do Python é outro exemplo de um “ambiente principal”, então
qualquer coisa definida no REPL se torna parte do escopo do ‘__main__’:

     >>> import namely
     >>> namely.did_user_define_their_name()
     False
     >>> namely.print_user_name()
     Traceback (most recent call last):
     ...
     ValueError: Defina a variável `my_name`!
     >>> my_name = 'Jabberwocky'
     >>> namely.did_user_define_their_name()
     True
     >>> namely.print_user_name()
     Jabberwocky

Note que neste caso o escopo ‘__main__’ não contém um atributo
‘__file__’, pois é interativo.

O escopo ‘__main__’ é usado na implementação de *note pdb: a5. e *note
rlcompleter: bd.


File: python.info,  Node: warnings — Controle de avisos,  Next: dataclasses — Data Classes,  Prev: __main__ — Ambiente de código principal,  Up: Serviços de Tempo de Execução Python

5.29.6 ‘warnings’ — Controle de avisos
--------------------------------------

'Código-fonte:' Lib/warnings.py(1)

__________________________________________________________________

As mensagens de aviso são normalmente emitidas em situações em que é
útil alertar o usuário sobre alguma condição em um programa, em que essa
condição (normalmente) não garante o levantamento de uma exceção nem o
encerramento do programa.  Por exemplo, pode-se querer emitir um aviso
quando um programa usa um módulo obsoleto.

Pessoas que programam em Python emitem avisos chamando a função *note
warn(): 1562. definida neste módulo.  (Com C usam *note PyErr_WarnEx():
1494.; veja *note Tratamento de exceções: 462c. para detalhes).

Mensagens de aviso são normalmente escritas no *note sys.stderr: 940,
mas sua disposição pode ser alterada de forma flexível, desde ignorar
todos os avisos até transformá-los em exceções.  A disposição dos avisos
pode variar de acordo com a *note categoria de aviso: 2449, o texto da
mensagem de aviso e o local de origem em que ela é emitida.  As
repetições de um aviso específico para o mesmo local de origem são
normalmente suprimidas.

Existem duas etapas no controle de avisos: primeiro, cada vez que um
aviso é emitido, determina-se se uma mensagem deve ser emitida ou não; a
seguir, se uma mensagem deve ser emitida, ela é formatada e impressa
usando um gancho configurável pelo usuário.

A determinação de emitir ou não uma mensagem de aviso é controlada pelo
*note filtro de aviso: 8cf, que é uma sequência de regras e ações
correspondentes.  As regras podem ser adicionadas ao filtro chamando
*note filterwarnings(): 14f1. e redefinidas para o estado padrão
chamando *note resetwarnings(): 462d.

A exibição de mensagens de aviso é feita chamando *note showwarning():
462e, que pode ser substituída; a implementação padrão desta função
formata a mensagem chamando *note formatwarning(): 1b8d, que também está
disponível para uso por implementações personalizadas.

Ver também
..........

*note logging.captureWarnings(): 2e89. permite que você manipule todos
os avisos com a infraestrutura de registro padrão.

* Menu:

* Categorias de avisos::
* O filtro de avisos::
* Temporarily Suppressing Warnings::
* Testing Warnings::
* Updating Code For New Versions of Dependencies::
* Funções disponíveis::
* Gerenciadores de contexto disponíveis::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/warnings.py


File: python.info,  Node: Categorias de avisos,  Next: O filtro de avisos,  Up: warnings — Controle de avisos

5.29.6.1 Categorias de avisos
.............................

Existem várias exceções embutidas que representam categorias de aviso.
Essa categorização é útil para filtrar grupos de avisos.

Embora sejam tecnicamente *note exceções embutidas: 2447, elas são
documentadas aqui, porque conceitualmente pertencem ao mecanismo de
avisos.

O código do usuário pode definir categorias de aviso adicionais criando
uma subclasse de uma das categorias de aviso padrão.  Uma categoria de
aviso deve ser sempre uma subclasse da classe *note Warning: 244a.

As seguintes classes de categorias de avisos estão definidas atualmente:

Classe                                 Descrição
                                       
-------------------------------------------------------------------------------------------
                                       
*note Warning: 244a.                   Esta é a classe base de todas as classes de
                                       categoria de aviso.  É uma subclasse de
                                       *note Exception: 9e2.
                                       
                                       
*note UserWarning: 244b.               A categoria padrão para *note warn(): 1562.
                                       
                                       
*note DeprecationWarning: 1a5.         Categoria base para avisos sobre recursos
                                       descontinuados quando esses avisos são destinados
                                       a outros desenvolvedores Python (ignorado por
                                       padrão, a menos que acionado por código em
                                       ‘__main__’).
                                       
                                       
*note SyntaxWarning: 466.              Categoria base para avisos sobre recursos
                                       sintáticos duvidosos (normalmente emitidos ao
                                       compilar código-fonte Python e, portanto, não
                                       podem ser suprimidos por filtros de tempo de
                                       execução)
                                       
                                       
*note RuntimeWarning: 1bd.             Categoria base para avisos sobre recursos
                                       duvidosos de tempo de execução.
                                       
                                       
*note FutureWarning: 415.              Categoria base para avisos sobre recursos
                                       descontinuados quando esses avisos se destinam a
                                       usuários finais de aplicações escritas em Python.
                                       
                                       
*note PendingDeprecationWarning: 8ce.  Categoria base para avisos sobre recursos que
                                       serão descontinuados no futuro (ignorados por
                                       padrão).
                                       
                                       
*note ImportWarning: 4fa.              Categoria base para avisos acionados durante o
                                       processo de importação de um módulo (ignorado por
                                       padrão).
                                       
                                       
*note UnicodeWarning: 146b.            Categoria base para avisos relacionados a
                                       Unicode.
                                       
                                       
*note BytesWarning: c3d.               Categoria base para avisos relacionados a
                                       *note bytes: 1c2. e *note bytearray: 2ea.
                                       
                                       
*note ResourceWarning: 244.            Categoria base para avisos relacionados a uso de
                                       recursos (ignorado por padrão).
                                       

Alterado na versão 3.7: Anteriormente, *note DeprecationWarning: 1a5. e
*note FutureWarning: 415. eram diferenciadas com base em se um recurso
estava sendo removido completamente ou mudando seu comportamento.  Elas
agora são diferenciadas com base em seu público-alvo e na maneira como
são tratadas pelos filtros de avisos padrão.


File: python.info,  Node: O filtro de avisos,  Next: Temporarily Suppressing Warnings,  Prev: Categorias de avisos,  Up: warnings — Controle de avisos

5.29.6.2 O filtro de avisos
...........................

O filtro de avisos controla se os avisos são ignorados, exibidos ou
transformados em erros (levantando uma exceção).

Conceitualmente, o filtro de avisos mantém uma lista ordenada de
especificações de filtro; qualquer aviso específico é comparado a cada
especificação de filtro na lista, até que uma correspondência seja
encontrada; o filtro determina a disposição da correspondência.  Cada
entrada é uma tupla no formato ('action', 'message', 'category',
'module', 'lineno'), sendo:

   * 'action' é uma das seguintes strings:

     Valor               Disposição
                         
     -----------------------------------------------------------------------
                         
     ‘"default"’         exibe a primeira ocorrência de avisos
                         correspondentes para cada local (módulo + número
                         da linha) onde o aviso é emitido
                         
                         
     ‘"error"’           transforma avisos correspondentes em exceções
                         
                         
     ‘"ignore"’          nunca exibe avisos correspondentes
                         
                         
     ‘"always"’          sempre exibe avisos correspondentes
                         
                         
     ‘"module"’          exibe a primeira ocorrência de avisos
                         correspondentes para cada módulo onde o aviso é
                         emitido (independentemente do número da linha)
                         
                         
     ‘"once"’            exibe apenas a primeira ocorrência de avisos
                         correspondentes, independentemente da
                         localização
                         

   * 'message' é uma string contendo uma expressão regular à qual o
     início da mensagem de aviso deve corresponder, sem distinção entre
     maiúsculas e minúsculas.  Em *note -W: 8cd. e em *note
     PYTHONWARNINGS: bc2, 'message' é uma string literal que o início da
     mensagem de aviso deve conter (sem distinção entre maiúsculas e
     minúsculas), ignorando qualquer espaço em branco no início ou no
     fim de 'message'.

   * 'category' é uma classe (uma subclasse de *note Warning: 244a.) da
     qual a categoria de aviso deve ser uma subclasse para corresponder.

   * 'module' é uma string contendo uma expressão regular que o início
     do nome do módulo totalmente qualificado deve corresponder,
     diferenciando maiúsculas de minúsculas.  Em *note -W: 8cd. e em
     *note PYTHONWARNINGS: bc2, 'module' é uma string literal cujo nome,
     o módulo totalmente qualificado, deve ser igual a (diferenciando
     maiúsculas de minúsculas), ignorando qualquer espaço em branco no
     início ou no fim de 'module'.

   * 'lineno' é um número inteiro que deve corresponder ao número da
     linha onde ocorreu o aviso, ou ‘0’ para corresponder a todos os
     números de linha.

Como a classe *note Warning: 244a. é derivada da classe embutida *note
Exception: 9e2, para transformar um aviso em um erro, basta levantarmos
‘category(message)’.

Se um aviso for relatado e não corresponder a nenhum filtro registrado,
a ação “default” (padrão em inglês) será aplicada (daí o nome).

* Menu:

* Critérios de supressão de avisos repetidos::
* Descrevendo filtros de aviso::
* Filtro de avisos padrão::
* Overriding the default filter::


File: python.info,  Node: Critérios de supressão de avisos repetidos,  Next: Descrevendo filtros de aviso,  Up: O filtro de avisos

5.29.6.3 Critérios de supressão de avisos repetidos
...................................................

Os filtros que suprimem avisos repetidos aplicam os seguintes critérios
para determinar se um aviso é considerado uma repetição:

   - ‘"default"’: Um aviso é considerado uma repetição somente se
     ('message', 'category', 'module', 'lineno') forem todos iguais.

   - ‘"module"’: Um aviso é considerado uma repetição se ('message',
     'category', 'module') forem os mesmos, ignorando o número da linha.

   - ‘"once"’: Um aviso é considerado uma repetição se ('message',
     'category') forem os mesmos, ignorando o módulo e o número da
     linha.


File: python.info,  Node: Descrevendo filtros de aviso,  Next: Filtro de avisos padrão,  Prev: Critérios de supressão de avisos repetidos,  Up: O filtro de avisos

5.29.6.4 Descrevendo filtros de aviso
.....................................

O filtro de avisos é inicializado pelas opções *note -W: 8cd. passadas
para a linha de comando do interpretador Python e para a variável de
ambiente *note PYTHONWARNINGS: bc2.  O interpretador salva os argumentos
para todas as entradas fornecidas sem interpretação em *note
sys.warnoptions: 3b0.; o módulo *note warnings: 112. os analisa na
primeira importação (opções inválidas são ignoradas após a exibição de
uma mensagem em *note sys.stderr: 940.).

Os filtros de avisos individuais são especificados como uma sequência de
campos separados por dois pontos:

     action:message:category:module:line

The meaning of each of these fields is as described in *note O filtro de
avisos: 8cf.  When listing multiple filters on a single line (as for
*note PYTHONWARNINGS: bc2.), the individual filters are separated by
commas and the filters listed later take precedence over those listed
before them (as they’re applied left-to-right, and the most recently
applied filters take precedence over earlier ones).

Commonly used warning filters apply to either all warnings, warnings in
a particular category, or warnings raised by particular modules or
packages.  Some examples:

     default                      # Show all warnings (even those ignored by default)
     ignore                       # Ignore all warnings
     error                        # Convert all warnings to errors
     error::ResourceWarning       # Treat ResourceWarning messages as errors
     default::DeprecationWarning  # Show DeprecationWarning messages
     ignore,default:::mymodule    # Only report warnings triggered by "mymodule"
     error:::mymodule             # Convert warnings to errors in "mymodule"


File: python.info,  Node: Filtro de avisos padrão,  Next: Overriding the default filter,  Prev: Descrevendo filtros de aviso,  Up: O filtro de avisos

5.29.6.5 Filtro de avisos padrão
................................

By default, Python installs several warning filters, which can be
overridden by the *note -W: 8cd. command-line option, the *note
PYTHONWARNINGS: bc2. environment variable and calls to *note
filterwarnings(): 14f1.

In regular release builds, the default warning filter has the following
entries (in order of precedence):

     default::DeprecationWarning:__main__
     ignore::DeprecationWarning
     ignore::PendingDeprecationWarning
     ignore::ImportWarning
     ignore::ResourceWarning

In a *note debug build: 1f9, the list of default warning filters is
empty.

Alterado na versão 3.2: *note DeprecationWarning: 1a5. is now ignored by
default in addition to *note PendingDeprecationWarning: 8ce.

Alterado na versão 3.7: *note DeprecationWarning: 1a5. is once again
shown by default when triggered directly by code in ‘__main__’.

Alterado na versão 3.7: *note BytesWarning: c3d. no longer appears in
the default filter list and is instead configured via *note
sys.warnoptions: 3b0. when *note -b: 5e3. is specified twice.


File: python.info,  Node: Overriding the default filter,  Prev: Filtro de avisos padrão,  Up: O filtro de avisos

5.29.6.6 Overriding the default filter
......................................

Developers of applications written in Python may wish to hide 'all'
Python level warnings from their users by default, and only display them
when running tests or otherwise working on the application.  The *note
sys.warnoptions: 3b0. attribute used to pass filter configurations to
the interpreter can be used as a marker to indicate whether or not
warnings should be disabled:

     import sys

     if not sys.warnoptions:
         import warnings
         warnings.simplefilter("ignore")

Developers of test runners for Python code are advised to instead ensure
that 'all' warnings are displayed by default for the code under test,
using code like:

     import sys

     if not sys.warnoptions:
         import os, warnings
         warnings.simplefilter("default") # Change the filter in this process
         os.environ["PYTHONWARNINGS"] = "default" # Also affect subprocesses

Finally, developers of interactive shells that run user code in a
namespace other than ‘__main__’ are advised to ensure that *note
DeprecationWarning: 1a5. messages are made visible by default, using
code like the following (where ‘user_ns’ is the module used to execute
code entered interactively):

     import warnings
     warnings.filterwarnings("default", category=DeprecationWarning,
                                        module=user_ns.get("__name__"))


File: python.info,  Node: Temporarily Suppressing Warnings,  Next: Testing Warnings,  Prev: O filtro de avisos,  Up: warnings — Controle de avisos

5.29.6.7 Temporarily Suppressing Warnings
.........................................

If you are using code that you know will raise a warning, such as a
deprecated function, but do not want to see the warning (even when
warnings have been explicitly configured via the command line), then it
is possible to suppress the warning using the *note catch_warnings: 584.
context manager:

     import warnings

     def fxn():
         warnings.warn("deprecated", DeprecationWarning)

     with warnings.catch_warnings():
         warnings.simplefilter("ignore")
         fxn()

While within the context manager all warnings will simply be ignored.
This allows you to use known-deprecated code without having to see the
warning while not suppressing the warning for other code that might not
be aware of its use of deprecated code.  Note: this can only be
guaranteed in a single-threaded application.  If two or more threads use
the *note catch_warnings: 584. context manager at the same time, the
behavior is undefined.


File: python.info,  Node: Testing Warnings,  Next: Updating Code For New Versions of Dependencies,  Prev: Temporarily Suppressing Warnings,  Up: warnings — Controle de avisos

5.29.6.8 Testing Warnings
.........................

To test warnings raised by code, use the *note catch_warnings: 584.
context manager.  With it you can temporarily mutate the warnings filter
to facilitate your testing.  For instance, do the following to capture
all raised warnings to check:

     import warnings

     def fxn():
         warnings.warn("deprecated", DeprecationWarning)

     with warnings.catch_warnings(record=True) as w:
         # Cause all warnings to always be triggered.
         warnings.simplefilter("always")
         # Trigger a warning.
         fxn()
         # Verify some things
         assert len(w) == 1
         assert issubclass(w[-1].category, DeprecationWarning)
         assert "deprecated" in str(w[-1].message)

One can also cause all warnings to be exceptions by using ‘error’
instead of ‘always’.  One thing to be aware of is that if a warning has
already been raised because of a ‘once’/‘default’ rule, then no matter
what filters are set the warning will not be seen again unless the
warnings registry related to the warning has been cleared.

Once the context manager exits, the warnings filter is restored to its
state when the context was entered.  This prevents tests from changing
the warnings filter in unexpected ways between tests and leading to
indeterminate test results.  The *note showwarning(): 462e. function in
the module is also restored to its original value.  Note: this can only
be guaranteed in a single-threaded application.  If two or more threads
use the *note catch_warnings: 584. context manager at the same time, the
behavior is undefined.

When testing multiple operations that raise the same kind of warning, it
is important to test them in a manner that confirms each operation is
raising a new warning (e.g.  set warnings to be raised as exceptions and
check the operations raise exceptions, check that the length of the
warning list continues to increase after each operation, or else delete
the previous entries from the warnings list before each new operation).


File: python.info,  Node: Updating Code For New Versions of Dependencies,  Next: Funções disponíveis,  Prev: Testing Warnings,  Up: warnings — Controle de avisos

5.29.6.9 Updating Code For New Versions of Dependencies
.......................................................

Warning categories that are primarily of interest to Python developers
(rather than end users of applications written in Python) are ignored by
default.

Notably, this “ignored by default” list includes *note
DeprecationWarning: 1a5. (for every module except ‘__main__’), which
means developers should make sure to test their code with typically
ignored warnings made visible in order to receive timely notifications
of future breaking API changes (whether in the standard library or third
party packages).

In the ideal case, the code will have a suitable test suite, and the
test runner will take care of implicitly enabling all warnings when
running tests (the test runner provided by the *note unittest: 106.
module does this).

In less ideal cases, applications can be checked for use of deprecated
interfaces by passing *note -Wd: 8cd. to the Python interpreter (this is
shorthand for ‘-W default’) or setting ‘PYTHONWARNINGS=default’ in the
environment.  This enables default handling for all warnings, including
those that are ignored by default.  To change what action is taken for
encountered warnings you can change what argument is passed to *note -W:
8cd. (e.g.  ‘-W error’).  See the *note -W: 8cd. flag for more details
on what is possible.


File: python.info,  Node: Funções disponíveis,  Next: Gerenciadores de contexto disponíveis,  Prev: Updating Code For New Versions of Dependencies,  Up: warnings — Controle de avisos

5.29.6.10 Funções disponíveis
.............................

 -- Função: warnings.warn (message, category=None, stacklevel=1,
          source=None, *, skip_file_prefixes=())

     Issue a warning, or maybe ignore it or raise an exception.  The
     'category' argument, if given, must be a *note warning category
     class: 2449.; it defaults to *note UserWarning: 244b.
     Alternatively, 'message' can be a *note Warning: 244a. instance, in
     which case 'category' will be ignored and ‘message.__class__’ will
     be used.  In this case, the message text will be ‘str(message)’.
     This function raises an exception if the particular warning issued
     is changed into an error by the *note warnings filter: 8cf.  The
     'stacklevel' argument can be used by wrapper functions written in
     Python, like this:

          def deprecated_api(message):
              warnings.warn(message, DeprecationWarning, stacklevel=2)

     This makes the warning refer to ‘deprecated_api’’s caller, rather
     than to the source of ‘deprecated_api’ itself (since the latter
     would defeat the purpose of the warning message).

     The 'skip_file_prefixes' keyword argument can be used to indicate
     which stack frames are ignored when counting stack levels.  This
     can be useful when you want the warning to always appear at call
     sites outside of a package when a constant 'stacklevel' does not
     fit all call paths or is otherwise challenging to maintain.  If
     supplied, it must be a tuple of strings.  When prefixes are
     supplied, stacklevel is implicitly overridden to be ‘max(2,
     stacklevel)’.  To cause a warning to be attributed to the caller
     from outside of the current package you might write:

          # example/lower.py
          _warn_skips = (os.path.dirname(__file__),)

          def one_way(r_luxury_yacht=None, t_wobbler_mangrove=None):
              if r_luxury_yacht:
                  warnings.warn("Please migrate to t_wobbler_mangrove=.",
                                skip_file_prefixes=_warn_skips)

          # example/higher.py
          from . import lower

          def another_way(**kw):
              lower.one_way(**kw)

     This makes the warning refer to both the ‘example.lower.one_way()’
     and ‘example.higher.another_way()’ call sites only from calling
     code living outside of ‘example’ package.

     'source', if supplied, is the destroyed object which emitted a
     *note ResourceWarning: 244.

     Alterado na versão 3.6: Adicionado o parâmetro 'source'.

     Alterado na versão 3.12: Added 'skip_file_prefixes'.

 -- Função: warnings.warn_explicit (message, category, filename, lineno,
          module=None, registry=None, module_globals=None, source=None)

     This is a low-level interface to the functionality of *note warn():
     1562, passing in explicitly the message, category, filename and
     line number, and optionally other arguments.  'message' must be a
     string and 'category' a subclass of *note Warning: 244a. or
     'message' may be a *note Warning: 244a. instance, in which case
     'category' will be ignored.

     'module', if supplied, should be the module name.  If no module is
     passed, the filename with ‘.py’ stripped is used.

     'registry', if supplied, should be the ‘__warningregistry__’
     dictionary of the module.  If no registry is passed, each warning
     is treated as the first occurrence, that is, filter actions
     ‘"default"’, ‘"module"’ and ‘"once"’ are handled as ‘"always"’.

     'module_globals', if supplied, should be the global namespace in
     use by the code for which the warning is issued.  (This argument is
     used to support displaying source for modules found in zipfiles or
     other non-filesystem import sources).

     'source', if supplied, is the destroyed object which emitted a
     *note ResourceWarning: 244.

     Alterado na versão 3.6: Adiciona o parâmetro 'source'.

 -- Função: warnings.showwarning (message, category, filename, lineno,
          file=None, line=None)

     Write a warning to a file.  The default implementation calls
     ‘formatwarning(message, category, filename, lineno, line)’ and
     writes the resulting string to 'file', which defaults to *note
     sys.stderr: 940.  You may replace this function with any callable
     by assigning to ‘warnings.showwarning’.  'line' is a line of source
     code to be included in the warning message; if 'line' is not
     supplied, *note showwarning(): 462e. will try to read the line
     specified by 'filename' and 'lineno'.

 -- Função: warnings.formatwarning (message, category, filename, lineno,
          line=None)

     Format a warning the standard way.  This returns a string which may
     contain embedded newlines and ends in a newline.  'line' is a line
     of source code to be included in the warning message; if 'line' is
     not supplied, *note formatwarning(): 1b8d. will try to read the
     line specified by 'filename' and 'lineno'.

 -- Função: warnings.filterwarnings (action, message='',
          category=Warning, module='', lineno=0, append=False)

     Insert an entry into the list of *note warnings filter
     specifications: 8cf.  The entry is inserted at the front by
     default; if 'append' is true, it is inserted at the end.  This
     checks the types of the arguments, compiles the 'message' and
     'module' regular expressions, and inserts them as a tuple in the
     list of warnings filters.  Entries closer to the front of the list
     override entries later in the list, if both match a particular
     warning.  Omitted arguments default to a value that matches
     everything.

 -- Função: warnings.simplefilter (action, category=Warning, lineno=0,
          append=False)

     Insert a simple entry into the list of *note warnings filter
     specifications: 8cf.  The meaning of the function parameters is as
     for *note filterwarnings(): 14f1, but regular expressions are not
     needed as the filter inserted always matches any message in any
     module as long as the category and line number match.

 -- Função: warnings.resetwarnings ()

     Reset the warnings filter.  This discards the effect of all
     previous calls to *note filterwarnings(): 14f1, including that of
     the *note -W: 8cd. command line options and calls to *note
     simplefilter(): 6c1.

 -- Função: @warnings.deprecated (msg, *, category=DeprecationWarning,
          stacklevel=1)

     Decorator to indicate that a class, function or overload is
     deprecated.

     When this decorator is applied to an object, deprecation warnings
     may be emitted at runtime when the object is used.  *note static
     type checkers: 26d. will also generate a diagnostic on usage of the
     deprecated object.

     Uso:

          from warnings import deprecated
          from typing import overload

          @deprecated("Use B instead")
          class A:
              pass

          @deprecated("Use g instead")
          def f():
              pass

          @overload
          @deprecated("int support is deprecated")
          def g(x: int) -> int: ...
          @overload
          def g(x: str) -> int: ...

     The warning specified by 'category' will be emitted at runtime on
     use of deprecated objects.  For functions, that happens on calls;
     for classes, on instantiation and on creation of subclasses.  If
     the 'category' is ‘None’, no warning is emitted at runtime.  The
     'stacklevel' determines where the warning is emitted.  If it is ‘1’
     (the default), the warning is emitted at the direct caller of the
     deprecated object; if it is higher, it is emitted further up the
     stack.  Static type checker behavior is not affected by the
     'category' and 'stacklevel' arguments.

     The deprecation message passed to the decorator is saved in the
     ‘__deprecated__’ attribute on the decorated object.  If applied to
     an overload, the decorator must be after the *note
     @~typing.overload: 41c6. decorator for the attribute to exist on
     the overload as returned by *note typing.get_overloads(): 6ae.

     Adicionado na versão 3.13: See PEP 702(1).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0702/


File: python.info,  Node: Gerenciadores de contexto disponíveis,  Prev: Funções disponíveis,  Up: warnings — Controle de avisos

5.29.6.11 Gerenciadores de contexto disponíveis
...............................................

 -- Classe: warnings.catch_warnings (*, record=False, module=None,
          action=None, category=Warning, lineno=0, append=False)

     Um gerenciador de contexto que copia e, ao sair, restaura o filtro
     de avisos e a função *note showwarning(): 462e.  Se o argumento
     'record' for *note False: b49. (o padrão), o gerenciador de
     contexto retorna *note None: 675. na entrada.  Se 'record' for
     *note True: c27, será retornada uma lista que é preenchida
     progressivamente com objetos conforme vistos por uma função *note
     showwarning(): 462e. personalizada (que também suprime a saída para
     ‘sys.stdout’).  Cada objeto na lista tem atributos com os mesmos
     nomes que os argumentos de *note showwarning(): 462e.

     O argumento 'module' recebe um módulo que será usado em vez do
     módulo retornado quando você importar *note warnings: 112. cujo
     filtro será protegido.  Esse argumento serve principalmente para
     testar o módulo *note warnings: 112. em si.

     Se o argumento 'action' não for ‘None’, os argumentos restantes
     serão passados para *note simplefilter(): 6c1. como se fossem
     chamados imediatamente ao entrar no contexto.

     Consulte *note O filtro de avisos: 8cf. para saber o significado de
     'category' e 'lineno'.

          Nota: The *note catch_warnings: 584. manager works by
          replacing and then later restoring the module’s *note
          showwarning(): 462e. function and internal list of filter
          specifications.  This means the context manager is modifying
          global state and therefore is not thread-safe.

     Alterado na versão 3.11: Adicionados os parâmetros 'action',
     'category', 'lineno' e 'append'.


File: python.info,  Node: dataclasses — Data Classes,  Next: contextlib — Utilitários para contextos da instrução with,  Prev: warnings — Controle de avisos,  Up: Serviços de Tempo de Execução Python

5.29.7 ‘dataclasses’ — Data Classes
-----------------------------------

'Código-fonte:' Lib/dataclasses.py(1)

__________________________________________________________________

Este módulo fornece um decorador e funções para adicionar
automaticamente *note métodos especiais: 19eb. tais como *note
__init__(): 6b0. e *note __repr__(): 61c. a classes definidas pelo
usuário.  Foi originalmente descrita em PEP 557(2).

Variáveis-membro a serem usadas nesses métodos gerados são definidas
usando as anotações de tipo da PEP 526(3).  Por exemplo, esse código:

     from dataclasses import dataclass

     @dataclass
     class InventoryItem:
         """Class for keeping track of an item in inventory."""
         name: str
         unit_price: float
         quantity_on_hand: int = 0

         def total_cost(self) -> float:
             return self.unit_price * self.quantity_on_hand

adicionará, entre outras coisas, um ‘__init__()’ como esse:

     def __init__(self, name: str, unit_price: float, quantity_on_hand: int = 0):
         self.name = name
         self.unit_price = unit_price
         self.quantity_on_hand = quantity_on_hand

Observe que este método é adicionado automaticamente à classe: ele não é
especificado diretamente na definição ‘InventoryItem’ mostrada acima.

Adicionado na versão 3.7.

* Menu:

* Conteúdo do módulo: Conteúdo do módulo<8>.
* Processamento pós-inicialização::
* Variáveis de classe::
* Variáveis de inicialização apenas::
* Frozen instances::
* Herança: Herança<2>.
* Re-ordering of keyword-only parameters in __init__(): Re-ordering of keyword-only parameters in __init__.
* Funções padrão de fábrica::
* Valores padrão mutáveis::
* Descriptor-typed fields::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/dataclasses.py

   (2) https://peps.python.org/pep-0557/

   (3) https://peps.python.org/pep-0526/


File: python.info,  Node: Conteúdo do módulo<8>,  Next: Processamento pós-inicialização,  Up: dataclasses — Data Classes

5.29.7.1 Conteúdo do módulo
...........................

 -- Função: @dataclasses.dataclass (*, init=True, repr=True, eq=True,
          order=False, unsafe_hash=False, frozen=False, match_args=True,
          kw_only=False, slots=False, weakref_slot=False)

     Esta função é um *note decorador: 731. que é usado para adicionar
     *note métodos especiais: 19eb. para classes, conforme descrito
     abaixo.

     O decorador ‘@dataclass’ examina a classe para encontrar campos
     (‘field’.  Um ‘field’ é definido como uma variável de classe que
     tem uma *note anotação de tipo: d79.  Com duas exceções, descritas
     mais adiante, ‘@dataclass’ não examina o tipo especificado na
     anotação de variável.

     A ordem dos campos em todos os métodos gerados é a ordem em que
     eles aparecem na definição de classe.

     O decorador ‘@dataclass’ adicionará vários métodos “dunder” à
     classe, descritos abaixo.  Se algum dos métodos adicionados já
     existir na classe, o comportamento dependerá do parâmetro, conforme
     documentado abaixo.  O decorador retorna a mesma classe decorada;
     nenhuma nova classe é criada.

     Se ‘@dataclass’ for usado apenas como um simples decorador, sem
     parâmetros, ele age como se tivesse os valores padrão documentados
     nessa assinatura.  Ou seja, esses três usos de ‘@dataclass’ são
     equivalentes:

          @dataclass
          class C:
              ...

          @dataclass()
          class C:
              ...

          @dataclass(init=True, repr=True, eq=True, order=False, unsafe_hash=False, frozen=False,
                     match_args=True, kw_only=False, slots=False, weakref_slot=False)
          class C:
              ...

     Os parâmetros do ‘@dataclass’ são:

        - 'init': Se verdadeiro (o padrão), o método *note __init__():
          6b0. será gerado.

          Se a classe do usuário definir ‘__init__()’ esse parâmetro é
          ignorado.

        - 'repr': Se verdadeiro (o padrão), um método *note __repr__():
          61c. será gerado.  A sequência de string de representação
          gerada terá o nome da classe e o nome e representação de cada
          campo, na ordem em que são definidos na classe.  Os campos
          marcados como excluídos da representação não são incluídos.
          Por exemplo: ‘InventoryItem(name='widget', unit_price=3.0,
          quantity_on_hand=10)’.

          Se a classe do usuário já define ‘__repr__()’ esse parâmetro é
          ignorado.

        - 'eq': Se verdadeiro (o padrão), um método *note __eq__(): b0d.
          será gerado.  Este método compara a classe como se fosse uma
          tupla de campos, em ordem.  Ambas as instâncias na comparação
          devem ser de tipo idêntico.

          Se a classe do usuário já define ‘__eq__()’ esse parâmetro é
          ignorado.

        - 'order': Se verdadeiro (o padrão é ‘False’), os métodos *note
          __lt__(): 12e2, *note __le__(): 134f, *note __gt__(): 1350. e
          *note __ge__(): 1351. serão gerados.  Comparam a classe como
          se fosse uma tupla de campos, em ordem.  Ambas instâncias na
          comparação devem ser de tipo idêntico.  Se 'order' é
          verdadeiro e 'eq' é falso, a exceção *note ValueError: 202. é
          levantada.

          Se a classe do usuário já define algum dentre ‘__lt__()’,
          ‘__le__()’, ‘__gt__()’ ou ‘__ge__()’, então *note TypeError:
          2c3. é levantada.

        - 'unsafe_hash': Se verdadeiro, força ‘dataclasses’ a criar um
          método *note __hash__(): b0e, mesmo que não seja seguro
          fazê-lo.  Caso contrário, gera um método *note __hash__():
          b0e. de acordo com a configuração de 'eq' e 'frozen'.  O valor
          padrão é ‘False’.

          ‘__hash__()’ é usado para prover o método embutido *note
          hash(): 5eb, e quando objetos são adicionados a coleções do
          tipo dicionário ou conjunto.  Ter um método ‘__hash__()’
          implica que instâncias da classe serão imutáveis.
          Mutabilidade é uma propriedade complicada, que depende da
          intenção do programador, da existência e comportamento do
          método ‘__eq__()’, e dos valores dos parâmetros 'eq' e
          'frozen' no decorador ‘@dataclass’.

          Por padrão, ‘@dataclass’ não vai adicionar implicitamente um
          método *note __hash__(): b0e, a menos que seja seguro fazê-lo.
          Nem irá adicionar ou modificar um método ‘__hash__()’
          existente, definido explicitamente.  Configurar o atributo de
          classe ‘__hash__ = None’ tem um significado específico para o
          Python, conforme descrito na documentação de ‘__hash__()’.

          Se ‘__hash__()’ não é definido explicitamente, ou se é
          configurado como ‘None’, então ‘@dataclass’ 'pode' adicionar
          um método ‘__hash__()’ implícito.  Mesmo que não seja
          recomendado, pode-se forçar ‘@dataclass’ a criar um método
          ‘__hash__()’ com ‘unsafe_hash=True’.  Este pode ser o caso se
          sua classe é logicamente imutável, mas na prática pode ser
          mudada.  Esse é um caso de uso específico e deve ser
          considerado com muito cuidado.

          Essas são as regras governando a criação implícita de um
          método ‘__hash__()’.  Observe que não pode ter um método
          ‘__hash__()’ explícito na dataclass e configurar
          ‘unsafe_hash=True’; isso resultará em um *note TypeError: 2c3.

          Se 'eq' e 'frozen' são ambos verdadeiros, por padrão
          ‘@dataclass’ vai gerar um método ‘__hash__()’.  Se 'eq' é
          verdadeiro e 'frozen' é falso, ‘__hash__()’ será configurado
          para ‘None’, marcando a classe como não-hasheável (já que é
          mutável).  Se 'eq' é falso, ‘__hash__()’ será deixado
          intocado, o que significa que o método ‘__hash__()’ da
          superclasse será usado (se a superclasse é *note object: a96,
          significa que voltará para o hash baseado em id).

        - 'frozen': If true (the default is ‘False’), assigning to
          fields will generate an exception.  This emulates read-only
          frozen instances.  See the *note discussion: 4644. below.

          If *note __setattr__(): 20bf. or *note __delattr__(): 20c0. is
          defined in the class and 'frozen' is true, then *note
          TypeError: 2c3. is raised.

        - 'match_args': Se verdadeiro (o padrão é ‘True’), a tupla *note
          __match_args__: 1a01. será criada a partir da lista de
          parâmetros não-somente-nomeado para o método *note __init__():
          6b0. gerado (mesmo se ‘__init__()’ não for gerado, veja
          acima).  Se falso, ou se ‘__match_args__’ já estiver definido
          na classe, então ‘__match_args__’ não será gerado.

          Adicionado na versão 3.10.

        - 'kw_only': Se verdadeiro (o valor padrão é ‘False’), então
          todos os campos serão marcados como somente-nomeado.  Se um
          campo for marcado como somente-nomeado, então o único efeito é
          que o parâmetro *note __init__(): 6b0. gerado a partir de um
          campo somente-nomeado deve ser especificado com um campo
          quando ‘__init__()’ é chamado.  Veja a entrada *note
          parâmetro: 208f. do glossário para detalhes.  Veja também a
          seção *note KW_ONLY: 4645.

          Campos somente-nomeados não são incluídos em ‘__match_args__’.

          Adicionado na versão 3.10.

        - 'slots': Se true (o padrão é ‘False’), o atributo *note
          __slots__: 1533. será gerado e uma nova classe será retornada
          no lugar da original.  Se ‘__slots__’ já estiver definido na
          classe, então *note TypeError: 2c3. será levantada.

               Aviso: Calling no-arg *note super(): 4db. in dataclasses
               using ‘slots=True’ will result in the following exception
               being raised: ‘TypeError: super(type, obj): obj must be
               an instance or subtype of type’.  The two-arg *note
               super(): 4db. is a valid workaround.  See gh-90562(1) for
               full details.

               Aviso: Passar parâmetros para uma classe base *note
               __init_subclass__(): 631. ao usar ‘slots=True’ resultará
               em um *note TypeError: 2c3.  Use ‘__init_subclass__’ sem
               parâmetros ou use valores padrão como solução
               alternativa.  Consulte gh-91126(2) para obter detalhes
               completos.

          Adicionado na versão 3.10.

          Alterado na versão 3.11: Se um nome de campo já estiver
          incluído no ‘__slots__’ de uma classe base, ele não será
          incluído no ‘__slots__’ gerado para evitar *note
          substitui-los: 20fc.  Portanto, não use ‘__slots__’ para
          recuperar os nomes dos campos de uma classe de dados.  Use
          *note fields(): 183b. em vez disso.  Para poder determinar os
          slots herdados, a classe base ‘__slots__’ pode ser qualquer
          iterável, mas 'não' um iterador.

        - 'weakref_slot': Se verdadeiro (o padrão é ‘False’), adicione
          um slot chamado “__weakref__”, que é necessário para tornar
          uma instância *note fraca: 1026.  É um erro especificar
          ‘weakref_slot=True’ sem também especificar ‘slots=True’.

          Adicionado na versão 3.11.

     ‘field’s pode opcionalmente especificar um valor padrão, usando
     sintaxe Python normal:

          @dataclass
          class C:
              a: int       # 'a' tem nenhum valor mínimo
              b: int = 0   # atribui um valor padrão para 'b'

     Nesse exemplo, ‘a’ e ‘b’ serão incluídos no método *note
     __init__(): 6b0. adicionado, que será definido como:

          def __init__(self, a: int, b: int = 0):

     *note TypeError: 2c3. será levantada se um campo sem valor padrão
     for definido após um campo com valor padrão.  Isso é verdadeiro se
     ocorrer numa classe simples, ou como resultado de uma herança de
     classe.

 -- Função: dataclasses.field (*, default=MISSING,
          default_factory=MISSING, init=True, repr=True, hash=None,
          compare=True, metadata=None, kw_only=MISSING)

     Para casos de uso comuns e simples, nenhuma outra funcionalidade é
     necessária.  Existem, no entanto, alguns recursos que requerem
     informações adicionais por campo.  Para satisfazer essa necessidade
     de informações adicionais, você pode substituir o valor do campo
     padrão por uma chamada para a função ‘field()’ fornecida.  Por
     exemplo:

          @dataclass
          class C:
              mylist: list[int] = field(default_factory=list)

          c = C()
          c.mylist += [1, 2, 3]

     Como mostrado acima, o valor *note MISSING: 4646. é um objeto
     sentinela usado para detectar se alguns parâmetros são fornecidos
     pelo usuário.  Este sentinela é usado porque ‘None’ é um valor
     válido para alguns parâmetros com um significado distinto.  Nenhum
     código deve usar diretamente o valor *note MISSING: 4646.

     Os parâmetros de ‘field()’ são:

        - 'default': Se fornecido, este será o valor padrão para este
          campo.  Isso é necessário porque a própria chamada ‘field()’
          substitui a posição normal do valor padrão.

        - 'default_factory': Se fornecido, deve ser um chamável sem
          argumento que será chamado quando um valor padrão for
          necessário para este campo.  Entre outras finalidades, isso
          pode ser usado para especificar campos com valores padrão
          mutáveis, conforme discutido abaixo.  É um erro especificar
          ambos 'default' e 'default_factory'.

        - 'init': Se verdadeiro (o padrão), este campo é incluído como
          um parâmetro para o método *note __init__(): 6b0. gerado.

        - 'repr': Se verdadeiro (o padrão), este campo é incluído na
          string retornada pelo método *note __repr__(): 61c. gerado.

        - 'hash': Pode ser um bool ou ‘None’.  Se verdadeiro, este campo
          é incluído no método *note __hash__(): b0e. gerado.  Se false,
          este campo é excluído do *note __hash__(): b0e. gerado.  Se
          ‘None’ (o padrão), usa o valor de 'compare': este seria
          normalmente o comportamento esperado, já que um campo deve ser
          incluído no hash se for usado para comparações.  Definir este
          valor para algo diferente de ‘None’ é desencorajado.

          Uma possível razão para definir ‘hash=False’ mas
          ‘compare=True’ seria se um campo for caro para calcular um
          valor de hash, esse campo for necessário para teste de
          igualdade e houver outros campos que contribuem para o valor
          de hash do tipo.  Mesmo que um campo seja excluído do hash,
          ele ainda será usado para comparações.

        - 'compare': Se verdadeiro (o padrão), este campo é incluído nos
          métodos de igualdade e comparação gerados (*note __eq__():
          b0d, *note __gt__(): 1350, etc.).

        - 'metadata': Pode ser um mapeamento ou ‘None’.  ‘None’ é
          tratado como um dicionário vazio.  Este valor é agrupado em
          *note MappingProxyType(): 46d. para torná-lo somente leitura e
          exposto no objeto *note Field: 23ea.  Ele não é usado por Data
          Classes e é fornecido como um mecanismo de extensão de
          terceiros.  Vários terceiros podem ter sua própria chave, para
          usar como um espaço de nomes nos metadados.

        - 'kw_only': Se verdadeiro, este campo será marcado como
          somente-nomeado.  Isso é usado quando os parâmetros do método
          *note __init__(): 6b0. gerados são calculados.

          Campos somente-nomeados também não são incluídos em
          ‘__match_args__’.

          Adicionado na versão 3.10.

     If the default value of a field is specified by a call to
     ‘field()’, then the class attribute for this field will be replaced
     by the specified 'default' value.  If 'default' is not provided,
     then the class attribute will be deleted.  The intent is that after
     the *note @dataclass: 1cb. decorator runs, the class attributes
     will all contain the default values for the fields, just as if the
     default value itself were specified.  For example, after:

          @dataclass
          class C:
              x: int
              y: int = field(repr=False)
              z: int = field(repr=False, default=10)
              t: int = 20

     The class attribute ‘C.z’ will be ‘10’, the class attribute ‘C.t’
     will be ‘20’, and the class attributes ‘C.x’ and ‘C.y’ will not be
     set.

 -- Classe: dataclasses.Field

     ‘Field’ objects describe each defined field.  These objects are
     created internally, and are returned by the *note fields(): 183b.
     module-level method (see below).  Users should never instantiate a
     ‘Field’ object directly.  Its documented attributes are:

        - ‘name’: The name of the field.

        - ‘type’: The type of the field.

        - ‘default’, ‘default_factory’, ‘init’, ‘repr’, ‘hash’,
          ‘compare’, ‘metadata’, and ‘kw_only’ have the identical
          meaning and values as they do in the *note field(): 1b98.
          function.

     Outros atributos podem existir, mas são privados e não devem ser
     inspecionados ou confiáveis.

 -- Classe: dataclasses.InitVar

     ‘InitVar[T]’ type annotations describe variables that are *note
     init-only: 4647.  Fields annotated with ‘InitVar’ are considered
     pseudo-fields, and thus are neither returned by the *note fields():
     183b. function nor used in any way except adding them as parameters
     to *note __init__(): 6b0. and an optional *note __post_init__():
     4648.

 -- Função: dataclasses.fields (class_or_instance)

     Retorna uma tupla de objetos *note Field: 23ea. que definem os
     campos para esta classe de dados.  Aceita uma classe de dados ou
     uma instância de uma classe de dados.  Levanta *note TypeError:
     2c3. se não for passada uma classe de dados ou instância de uma.
     Não retorna pseudocampos que são ‘ClassVar’ ou ‘InitVar’.

 -- Função: dataclasses.asdict (obj, *, dict_factory=dict)

     Converts the dataclass 'obj' to a dict (by using the factory
     function 'dict_factory').  Each dataclass is converted to a dict of
     its fields, as ‘name: value’ pairs.  dataclasses, dicts, lists, and
     tuples are recursed into.  Other objects are copied with *note
     copy.deepcopy(): b84.

     Example of using ‘asdict()’ on nested dataclasses:

          @dataclass
          class Point:
               x: int
               y: int

          @dataclass
          class C:
               mylist: list[Point]

          p = Point(10, 20)
          assert asdict(p) == {'x': 10, 'y': 20}

          c = C([Point(0, 0), Point(10, 4)])
          assert asdict(c) == {'mylist': [{'x': 0, 'y': 0}, {'x': 10, 'y': 4}]}

     Para criar uma cópia rasa, a seguinte solução alternativa pode ser
     usada:

          {field.name: getattr(obj, field.name) for field in fields(obj)}

     ‘asdict()’ raises *note TypeError: 2c3. if 'obj' is not a dataclass
     instance.

 -- Função: dataclasses.astuple (obj, *, tuple_factory=tuple)

     Converts the dataclass 'obj' to a tuple (by using the factory
     function 'tuple_factory').  Each dataclass is converted to a tuple
     of its field values.  dataclasses, dicts, lists, and tuples are
     recursed into.  Other objects are copied with *note
     copy.deepcopy(): b84.

     Continuando a partir do exemplo anterior:

          assert astuple(p) == (10, 20)
          assert astuple(c) == ([(0, 0), (10, 4)],)

     Para criar uma cópia rasa, a seguinte solução alternativa pode ser
     usada:

          tuple(getattr(obj, field.name) for field in dataclasses.fields(obj))

     ‘astuple()’ raises *note TypeError: 2c3. if 'obj' is not a
     dataclass instance.

 -- Função: dataclasses.make_dataclass (cls_name, fields, *, bases=(),
          namespace=None, init=True, repr=True, eq=True, order=False,
          unsafe_hash=False, frozen=False, match_args=True,
          kw_only=False, slots=False, weakref_slot=False, module=None)

     Creates a new dataclass with name 'cls_name', fields as defined in
     'fields', base classes as given in 'bases', and initialized with a
     namespace as given in 'namespace'.  'fields' is an iterable whose
     elements are each either ‘name’, ‘(name, type)’, or ‘(name, type,
     Field)’.  If just ‘name’ is supplied, *note typing.Any: 6ac. is
     used for ‘type’.  The values of 'init', 'repr', 'eq', 'order',
     'unsafe_hash', 'frozen', 'match_args', 'kw_only', 'slots', and
     'weakref_slot' have the same meaning as they do in *note
     @dataclass: 1cb.

     If 'module' is defined, the ‘__module__’ attribute of the dataclass
     is set to that value.  By default, it is set to the module name of
     the caller.

     This function is not strictly required, because any Python
     mechanism for creating a new class with ‘__annotations__’ can then
     apply the *note @dataclass: 1cb. function to convert that class to
     a dataclass.  This function is provided as a convenience.  For
     example:

          C = make_dataclass('C',
                             [('x', int),
                               'y',
                              ('z', int, field(default=5))],
                             namespace={'add_one': lambda self: self.x + 1})

     É equivalente a:

          @dataclass
          class C:
              x: int
              y: 'typing.Any'
              z: int = 5

              def add_one(self):
                  return self.x + 1

 -- Função: dataclasses.replace (obj, /, **changes)

     Creates a new object of the same type as 'obj', replacing fields
     with values from 'changes'.  If 'obj' is not a Data Class, raises
     *note TypeError: 2c3.  If keys in 'changes' are not field names of
     the given dataclass, raises *note TypeError: 2c3.

     The newly returned object is created by calling the *note
     __init__(): 6b0. method of the dataclass.  This ensures that *note
     __post_init__(): 4648, if present, is also called.

     Init-only variables without default values, if any exist, must be
     specified on the call to ‘replace()’ so that they can be passed to
     ‘__init__()’ and *note __post_init__(): 4648.

     It is an error for 'changes' to contain any fields that are defined
     as having ‘init=False’.  A *note ValueError: 202. will be raised in
     this case.

     Be forewarned about how ‘init=False’ fields work during a call to
     ‘replace()’.  They are not copied from the source object, but
     rather are initialized in *note __post_init__(): 4648, if they’re
     initialized at all.  It is expected that ‘init=False’ fields will
     be rarely and judiciously used.  If they are used, it might be wise
     to have alternate class constructors, or perhaps a custom
     ‘replace()’ (or similarly named) method which handles instance
     copying.

     Dataclass instances are also supported by generic function *note
     copy.replace(): 151.

 -- Função: dataclasses.is_dataclass (obj)

     Return ‘True’ if its parameter is a dataclass (including subclasses
     of a dataclass) or an instance of one, otherwise return ‘False’.

     Se você precisa saber se a classe é uma instância de dataclass (e
     não a dataclass de fato), então adicione uma verificação para ‘not
     isinstance(obj, type)’:

          def is_dataclass_instance(obj):
              return is_dataclass(obj) and not isinstance(obj, type)

 -- Dado: dataclasses.MISSING

     A sentinel value signifying a missing default or default_factory.

 -- Dado: dataclasses.KW_ONLY

     A sentinel value used as a type annotation.  Any fields after a
     pseudo-field with the type of ‘KW_ONLY’ are marked as keyword-only
     fields.  Note that a pseudo-field of type ‘KW_ONLY’ is otherwise
     completely ignored.  This includes the name of such a field.  By
     convention, a name of ‘_’ is used for a ‘KW_ONLY’ field.
     Keyword-only fields signify *note __init__(): 6b0. parameters that
     must be specified as keywords when the class is instantiated.

     In this example, the fields ‘y’ and ‘z’ will be marked as
     keyword-only fields:

          @dataclass
          class Point:
              x: float
              _: KW_ONLY
              y: float
              z: float

          p = Point(0, y=1.5, z=2.0)

     In a single dataclass, it is an error to specify more than one
     field whose type is ‘KW_ONLY’.

     Adicionado na versão 3.10.

 -- Exceção: dataclasses.FrozenInstanceError

     Raised when an implicitly defined *note __setattr__(): 20bf. or
     *note __delattr__(): 20c0. is called on a dataclass which was
     defined with ‘frozen=True’.  It is a subclass of *note
     AttributeError: 34b.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/90562

   (2) https://github.com/python/cpython/issues/91126


File: python.info,  Node: Processamento pós-inicialização,  Next: Variáveis de classe,  Prev: Conteúdo do módulo<8>,  Up: dataclasses — Data Classes

5.29.7.2 Processamento pós-inicialização
........................................

 -- Função: dataclasses.__post_init__ ()

     When defined on the class, it will be called by the generated *note
     __init__(): 6b0, normally as ‘self.__post_init__()’.  However, if
     any ‘InitVar’ fields are defined, they will also be passed to
     ‘__post_init__()’ in the order they were defined in the class.  If
     no ‘__init__()’ method is generated, then ‘__post_init__()’ will
     not automatically be called.

     Among other uses, this allows for initializing field values that
     depend on one or more other fields.  For example:

          @dataclass
          class C:
              a: float
              b: float
              c: float = field(init=False)

              def __post_init__(self):
                  self.c = self.a + self.b

The *note __init__(): 6b0. method generated by *note @dataclass: 1cb.
does not call base class ‘__init__()’ methods.  If the base class has an
‘__init__()’ method that has to be called, it is common to call this
method in a *note __post_init__(): 4648. method:

     class Rectangle:
         def __init__(self, height, width):
             self.height = height
             self.width = width

     @dataclass
     class Square(Rectangle):
         side: float

         def __post_init__(self):
             super().__init__(self.side, self.side)

Note, however, that in general the dataclass-generated ‘__init__()’
methods don’t need to be called, since the derived dataclass will take
care of initializing all fields of any base class that is a dataclass
itself.

See the section below on init-only variables for ways to pass parameters
to ‘__post_init__()’.  Also see the warning about how *note replace():
17ec. handles ‘init=False’ fields.


File: python.info,  Node: Variáveis de classe,  Next: Variáveis de inicialização apenas,  Prev: Processamento pós-inicialização,  Up: dataclasses — Data Classes

5.29.7.3 Variáveis de classe
............................

One of the few places where *note @dataclass: 1cb. actually inspects the
type of a field is to determine if a field is a class variable as
defined in PEP 526(1).  It does this by checking if the type of the
field is *note typing.ClassVar: 266.  If a field is a ‘ClassVar’, it is
excluded from consideration as a field and is ignored by the dataclass
mechanisms.  Such ‘ClassVar’ pseudo-fields are not returned by the
module-level *note fields(): 183b. function.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0526/


File: python.info,  Node: Variáveis de inicialização apenas,  Next: Frozen instances,  Prev: Variáveis de classe,  Up: dataclasses — Data Classes

5.29.7.4 Variáveis de inicialização apenas
..........................................

Another place where *note @dataclass: 1cb. inspects a type annotation is
to determine if a field is an init-only variable.  It does this by
seeing if the type of a field is of type *note InitVar: 193e.  If a
field is an *note InitVar: 193e, it is considered a pseudo-field called
an init-only field.  As it is not a true field, it is not returned by
the module-level *note fields(): 183b. function.  Init-only fields are
added as parameters to the generated *note __init__(): 6b0. method, and
are passed to the optional *note __post_init__(): 4648. method.  They
are not otherwise used by dataclasses.

For example, suppose a field will be initialized from a database, if a
value is not provided when creating the class:

     @dataclass
     class C:
         i: int
         j: int | None = None
         database: InitVar[DatabaseType | None] = None

         def __post_init__(self, database):
             if self.j is None and database is not None:
                 self.j = database.lookup('j')

     c = C(10, database=my_database)

In this case, *note fields(): 183b. will return *note Field: 23ea.
objects for ‘i’ and ‘j’, but not for ‘database’.


File: python.info,  Node: Frozen instances,  Next: Herança<2>,  Prev: Variáveis de inicialização apenas,  Up: dataclasses — Data Classes

5.29.7.5 Frozen instances
.........................

It is not possible to create truly immutable Python objects.  However,
by passing ‘frozen=True’ to the *note @dataclass: 1cb. decorator you can
emulate immutability.  In that case, dataclasses will add *note
__setattr__(): 20bf. and *note __delattr__(): 20c0. methods to the
class.  These methods will raise a *note FrozenInstanceError: 4649. when
invoked.

There is a tiny performance penalty when using ‘frozen=True’: *note
__init__(): 6b0. cannot use simple assignment to initialize fields, and
must use ‘object.__setattr__()’.


File: python.info,  Node: Herança<2>,  Next: Re-ordering of keyword-only parameters in __init__,  Prev: Frozen instances,  Up: dataclasses — Data Classes

5.29.7.6 Herança
................

When the dataclass is being created by the *note @dataclass: 1cb.
decorator, it looks through all of the class’s base classes in reverse
MRO (that is, starting at *note object: a96.) and, for each dataclass
that it finds, adds the fields from that base class to an ordered
mapping of fields.  After all of the base class fields are added, it
adds its own fields to the ordered mapping.  All of the generated
methods will use this combined, calculated ordered mapping of fields.
Because the fields are in insertion order, derived classes override base
classes.  An example:

     @dataclass
     class Base:
         x: Any = 15.0
         y: int = 0

     @dataclass
     class C(Base):
         z: int = 10
         x: int = 15

The final list of fields is, in order, ‘x’, ‘y’, ‘z’.  The final type of
‘x’ is *note int: 257, as specified in class ‘C’.

The generated *note __init__(): 6b0. method for ‘C’ will look like:

     def __init__(self, x: int = 15, y: int = 0, z: int = 10):


File: python.info,  Node: Re-ordering of keyword-only parameters in __init__,  Next: Funções padrão de fábrica,  Prev: Herança<2>,  Up: dataclasses — Data Classes

5.29.7.7 Re-ordering of keyword-only parameters in ‘__init__()’
...............................................................

After the parameters needed for *note __init__(): 6b0. are computed, any
keyword-only parameters are moved to come after all regular
(non-keyword-only) parameters.  This is a requirement of how
keyword-only parameters are implemented in Python: they must come after
non-keyword-only parameters.

In this example, ‘Base.y’, ‘Base.w’, and ‘D.t’ are keyword-only fields,
and ‘Base.x’ and ‘D.z’ are regular fields:

     @dataclass
     class Base:
         x: Any = 15.0
         _: KW_ONLY
         y: int = 0
         w: int = 1

     @dataclass
     class D(Base):
         z: int = 10
         t: int = field(kw_only=True, default=0)

The generated ‘__init__()’ method for ‘D’ will look like:

     def __init__(self, x: Any = 15.0, z: int = 10, *, y: int = 0, w: int = 1, t: int = 0):

Note that the parameters have been re-ordered from how they appear in
the list of fields: parameters derived from regular fields are followed
by parameters derived from keyword-only fields.

The relative ordering of keyword-only parameters is maintained in the
re-ordered ‘__init__()’ parameter list.


File: python.info,  Node: Funções padrão de fábrica,  Next: Valores padrão mutáveis,  Prev: Re-ordering of keyword-only parameters in __init__,  Up: dataclasses — Data Classes

5.29.7.8 Funções padrão de fábrica
..................................

If a *note field(): 1b98. specifies a 'default_factory', it is called
with zero arguments when a default value for the field is needed.  For
example, to create a new instance of a list, use:

     mylist: list = field(default_factory=list)

If a field is excluded from *note __init__(): 6b0. (using ‘init=False’)
and the field also specifies 'default_factory', then the default factory
function will always be called from the generated ‘__init__()’ function.
This happens because there is no other way to give the field an initial
value.


File: python.info,  Node: Valores padrão mutáveis,  Next: Descriptor-typed fields,  Prev: Funções padrão de fábrica,  Up: dataclasses — Data Classes

5.29.7.9 Valores padrão mutáveis
................................

Python stores default member variable values in class attributes.
Consider this example, not using dataclasses:

     class C:
         x = []
         def add(self, element):
             self.x.append(element)

     o1 = C()
     o2 = C()
     o1.add(1)
     o2.add(2)
     assert o1.x == [1, 2]
     assert o1.x is o2.x

Note that the two instances of class ‘C’ share the same class variable
‘x’, as expected.

Usando dataclasses, 'se' este código fosse válido:

     @dataclass
     class D:
         x: list = []      # This code raises ValueError
         def add(self, element):
             self.x.append(element)

Geraria código similar a:

     class D:
         x = []
         def __init__(self, x=x):
             self.x = x
         def add(self, element):
             self.x.append(element)

     assert D().x is D().x

This has the same issue as the original example using class ‘C’.  That
is, two instances of class ‘D’ that do not specify a value for ‘x’ when
creating a class instance will share the same copy of ‘x’.  Because
dataclasses just use normal Python class creation they also share this
behavior.  There is no general way for Data Classes to detect this
condition.  Instead, the *note @dataclass: 1cb. decorator will raise a
*note ValueError: 202. if it detects an unhashable default parameter.
The assumption is that if a value is unhashable, it is mutable.  This is
a partial solution, but it does protect against many common errors.

Using default factory functions is a way to create new instances of
mutable types as default values for fields:

     @dataclass
     class D:
         x: list = field(default_factory=list)

     assert D().x is not D().x

Alterado na versão 3.11: Instead of looking for and disallowing objects
of type *note list: 611, *note dict: 256, or *note set: 5d9, unhashable
objects are now not allowed as default values.  Unhashability is used to
approximate mutability.


File: python.info,  Node: Descriptor-typed fields,  Prev: Valores padrão mutáveis,  Up: dataclasses — Data Classes

5.29.7.10 Descriptor-typed fields
.................................

Fields that are assigned *note descriptor objects: c6a. as their default
value have the following special behaviors:

   * The value for the field passed to the dataclass’s *note __init__():
     6b0. method is passed to the descriptor’s *note __set__(): 20f7.
     method rather than overwriting the descriptor object.

   * Similarly, when getting or setting the field, the descriptor’s
     *note __get__(): 1530. or ‘__set__()’ method is called rather than
     returning or overwriting the descriptor object.

   * To determine whether a field contains a default value, *note
     @dataclass: 1cb. will call the descriptor’s ‘__get__()’ method
     using its class access form: ‘descriptor.__get__(obj=None,
     type=cls)’.  If the descriptor returns a value in this case, it
     will be used as the field’s default.  On the other hand, if the
     descriptor raises *note AttributeError: 34b. in this situation, no
     default value will be provided for the field.

     class IntConversionDescriptor:
         def __init__(self, *, default):
             self._default = default

         def __set_name__(self, owner, name):
             self._name = "_" + name

         def __get__(self, obj, type):
             if obj is None:
                 return self._default

             return getattr(obj, self._name, self._default)

         def __set__(self, obj, value):
             setattr(obj, self._name, int(value))

     @dataclass
     class InventoryItem:
         quantity_on_hand: IntConversionDescriptor = IntConversionDescriptor(default=100)

     i = InventoryItem()
     print(i.quantity_on_hand)   # 100
     i.quantity_on_hand = 2.5    # calls __set__ with 2.5
     print(i.quantity_on_hand)   # 2

Note that if a field is annotated with a descriptor type, but is not
assigned a descriptor object as its default value, the field will act
like a normal field.


File: python.info,  Node: contextlib — Utilitários para contextos da instrução with,  Next: abc — Classes base abstratas,  Prev: dataclasses — Data Classes,  Up: Serviços de Tempo de Execução Python

5.29.8 ‘contextlib’ — Utilitários para contextos da instrução ‘with’
--------------------------------------------------------------------

'Código-fonte:' Lib/contextlib.py(1)

__________________________________________________________________

Este módulo fornece utilitários para tarefas comuns envolvendo a
instrução *note with: 5d2.  Para mais informações, veja também *note
Tipos de Gerenciador de Contexto: 214e. e *note Gerenciadores de
contexto da instrução with: 214c.

* Menu:

* Utilitários::
* Exemplos e receitas: Exemplos e receitas<3>.
* Single use, reusable and reentrant context managers: Single use reusable and reentrant context managers.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/contextlib.py


File: python.info,  Node: Utilitários,  Next: Exemplos e receitas<3>,  Up: contextlib — Utilitários para contextos da instrução with

5.29.8.1 Utilitários
....................

Funções e classes fornecidas:

 -- Classe: contextlib.AbstractContextManager

     Uma *note classe base abstrata: 11f5. para classes que implementam
     *note object.__enter__(): 5c8. e *note object.__exit__(): 1344.
     Uma implementação padrão para *note object.__enter__(): 5c8. é
     fornecida, que retorna ‘self’, enquanto *note object.__exit__():
     1344. é um método abstrato que, por padrão, retorna ‘None’.  Veja
     também a definição de *note Tipos de Gerenciador de Contexto: 214e.

     Adicionado na versão 3.6.

 -- Classe: contextlib.AbstractAsyncContextManager

     Uma *note classe base abstrata: 11f5. para classes que implementam
     *note object.__aenter__(): 215e. e *note object.__aexit__(): 1716.
     Uma implementação padrão para *note object.__aenter__(): 215e. é
     fornecida, que retorna ‘self’, enquanto *note object.__aexit__():
     1716. é um método abstrato que, por padrão, retorna ‘None’.  Veja
     também a definição de *note Gerenciadores de contexto assíncronos:
     5fc.

     Adicionado na versão 3.7.

 -- Função: @contextlib.contextmanager

     Esta função é um *note decorador: 731. que pode ser usado para
     definir uma função de fábrica para gerenciadores de contexto de
     instrução *note with: 5d2, sem precisar criar uma classe ou separar
     os métodos *note __enter__(): 5c8. e *note __exit__(): 1344.

     While many objects natively support use in with statements,
     sometimes a resource needs to be managed that isn’t a context
     manager in its own right, and doesn’t implement a ‘close()’ method
     for use with ‘contextlib.closing’.

     Um exemplo abstrato seria o seguinte para garantir o gerenciamento
     correto dos recursos:

          from contextlib import contextmanager

          @contextmanager
          def managed_resource(*args, **kwds):
              # Códigopara obter recursos como, por exemplo:
              resource = acquire_resource(*args, **kwds)
              try:
                  yield resource
              finally:
                  # Código para liberar recursos como, por exemplo:
                  release_resource(resource)

     A função pode, então, ser usada da seguinte forma:

          >>> with managed_resource(timeout=3600) as resource:
          ...     # O recurso é liberado no final deste bloco,
          ...     # mesmo que o código no bloco levante uma exceção

     A função que está sendo decorada deve retornar um iterador *note
     gerador: 109a. quando chamada.  Este iterador deve produzir
     exatamente um valor, que será vinculado aos alvos na cláusula ‘as’
     da instrução *note with: 5d2, se houver.

     No ponto em que o gerador é produzido, o bloco aninhado na
     instrução *note with: 5d2. é executado.  O gerador é então retomado
     após o bloco ser encerrado.  Se uma exceção não tratada ocorrer no
     bloco, ela será levantada novamente dentro do gerador no ponto em
     que a produção ocorreu.  Assim, você pode usar uma instrução *note
     try: 6e9.…*note except: 18b.…*note finally: 9d2. para capturar o
     erro (se houver), ou garantir que alguma limpeza ocorra.  Se uma
     exceção for capturada apenas para registrá-la ou para executar
     alguma ação (em vez de suprimi-la completamente), o gerador deve
     levantar novamente essa exceção.  Caso contrário, o gerenciador de
     contexto do gerador indicará à instrução ‘with’ que a exceção foi
     tratada, e a execução será retomada com a instrução imediatamente
     após a instrução ‘with’.

     *note contextmanager(): 1242. usa *note ContextDecorator: 1241.
     para que os gerenciadores de contexto que ela cria possam ser
     usados como decoradores, bem como em instruções *note with: 5d2.
     Quando usada como um decorador, uma nova instância do gerador é
     implicitamente criada em cada chamada de função (isso permite que
     os gerenciadores de contexto criados por *note contextmanager():
     1242. atendam ao requisito de que os gerenciadores de contexto
     ofereçam suporte a múltiplas invocações para serem usados como
     decoradores).

     Alterado na versão 3.2: Uso de *note ContextDecorator: 1241.

 -- Função: @contextlib.asynccontextmanager

     Semelhante a *note contextmanager(): 1242, mas cria um *note
     gerenciador de contexto assíncrono: 5fc.

     Esta função é um *note decorador: 731. que pode ser usado para
     definir uma função de fábrica para gerenciadores de contexto
     assíncronos de instrução *note async with: 5d5, sem precisar criar
     uma classe ou separar os métodos *note __aenter__(): 215e. e *note
     __aexit__(): 1716.  Ela deve ser aplicada a uma função que atua
     como *note gerador assíncrono: 21cf.

     Um exemplo simples:

          from contextlib import asynccontextmanager

          @asynccontextmanager
          async def get_connection():
              conn = await acquire_db_connection()
              try:
                  yield conn
              finally:
                  await release_db_connection(conn)

          async def get_all_users():
              async with get_connection() as conn:
                  return conn.query('SELECT ...')

     Adicionado na versão 3.7.

     Gerenciadores de contexto definidos com *note
     asynccontextmanager(): b3c. podem ser usados como decoradores ou
     com instruções *note async with: 5d5.:

          import time
          from contextlib import asynccontextmanager

          @asynccontextmanager
          async def timeit():
              now = time.monotonic()
              try:
                  yield
              finally:
                  print(f'it took {time.monotonic() - now}s to run')

          @timeit()
          async def main():
              # ... código do async ...

     Quando usada como um decorador, uma nova instância do gerador é
     implicitamente criada em cada chamada de função.  Isso permite que
     os gerenciadores de contexto criados por *note
     asynccontextmanager(): b3c. atendam ao requisito de que os
     gerenciadores de contexto ofereçam suporte a múltiplas invocações
     para serem usados como decoradores.

     Alterado na versão 3.10: Gerenciadores de contexto assíncronos
     criados com *note asynccontextmanager(): b3c. podem ser usados como
     decoradores.

 -- Função: contextlib.closing (thing)

     Retorna um gerenciador de contexto que fecha 'thing' após a
     conclusão do bloco.  Isso basicamente equivale a:

          from contextlib import contextmanager

          @contextmanager
          def closing(thing):
              try:
                  yield thing
              finally:
                  thing.close()

     E permite que você escreva código como isso:

          from contextlib import closing
          from urllib.request import urlopen

          with closing(urlopen('https://www.python.org')) as page:
              for line in page:
                  print(line)

     sem precisar fechar explicitamente ‘page’.  Mesmo se ocorrer um
     erro, ‘page.close()’ será chamado quando o bloco *note with: 5d2.
     for encerrado.

          Nota: A maioria dos tipos que gerenciam recursos suporta o
          protocolo de *note gerenciador de contexto: 5d4, que fecha
          'thing' ao sair da declaração *note with: 5d2.  Como tal,
          ‘closing()’ é mais útil para tipos de terceiros que não
          oferecem suporte a gerenciadores de contexto.  Este exemplo é
          puramente para fins ilustrativos, pois *note urlopen(): 293.
          normalmente seria usado em um gerenciador de contexto.

 -- Função: contextlib.aclosing (thing)

     Retorna um gerenciador de contexto async que chama o método
     ‘aclose()’ de 'thing' após a conclusão do bloco.  Isso basicamente
     equivale a:

          from contextlib import asynccontextmanager

          @asynccontextmanager
          async def aclosing(thing):
              try:
                  yield thing
              finally:
                  await thing.aclose()

     De forma significativa, ‘aclosing()’ oferece suporte a limpeza
     determinística de geradores assíncronos quando eles são encerrados
     mais cedo por *note break: ab8. ou uma exceção.  Por exemplo:

          from contextlib import aclosing

          async with aclosing(my_generator()) as values:
              async for value in values:
                  if value == 42:
                      break

     Esse padrão garante que o código de saída assíncrono do gerador
     seja executado no mesmo contexto que suas iterações (para que
     exceções e variáveis de contexto funcionem conforme o esperado, e o
     código de saída não seja executado após o tempo de vida de alguma
     tarefa da qual ele depende).

     Adicionado na versão 3.10.

 -- Função: contextlib.nullcontext (enter_result=None)

     Retorna um gerenciador de contexto que retorna 'enter_result' de
     ‘__enter__’, mas não faz nada de outra forma.  Ele foi criado para
     ser usado como um substituto para um gerenciador de contexto
     opcional, por exemplo:

          def myfunction(arg, ignore_exceptions=False):
              if ignore_exceptions:
                  # Usa suppress para ignorar todas as exceções.
                  cm = contextlib.suppress(Exception)
              else:
                  # Não ignora quaisquer exceções, cm não tem efeito.
                  cm = contextlib.nullcontext()
              with cm:
                  # Faz algo

     Um exemplo usando 'enter_result':

          def process_file(file_or_path):
              if isinstance(file_or_path, str):
                  # Se for uma string, abre o arquivo
                  cm = open(file_or_path)
              else:
                  # O chamador é responsável por fechar o arquivo
                  cm = nullcontext(file_or_path)

              with cm as file:
                  # Efetua um processamento no arquivo

     Também pode ser usado como um substituto para *note gerenciadores
     de contexto assíncronos: 5fc.:

          async def send_http(session=None):
              if not session:
                  # Se houver nenhuma sessão http, cria-a com aiohttp
                  cm = aiohttp.ClientSession()
              else:
                  # O chamador é responsável por fechar a sessão
                  cm = nullcontext(session)

              async with cm as session:
                  # Envia requisições http com sessão

     Adicionado na versão 3.7.

     Alterado na versão 3.10: Suporte a *note gerenciador de contexto
     assíncrono: 5d7. foi adicionado.

 -- Função: contextlib.suppress (*exceptions)

     Retorna um gerenciador de contexto que suprime qualquer uma das
     exceções especificadas se elas ocorrerem no corpo de uma instrução
     ‘with’ e então retoma a execução com a primeira instrução após o
     final da instrução ‘with’.

     Como qualquer outro mecanismo que suprime completamente exceções,
     este gerenciador de contexto deve ser usado apenas para cobrir
     erros muito específicos, onde continuar silenciosamente com a
     execução do programa é considerado a coisa certa a fazer.

     Por exemplo:

          from contextlib import suppress

          with suppress(FileNotFoundError):
              os.remove('algumarquivo.tmp')

          with suppress(FileNotFoundError):
              os.remove('outroarquivo.tmp')

     Este código equivale a:

          try:
              os.remove('algumarquivo.tmp')
          except FileNotFoundError:
              pass

          try:
              os.remove('outroarquivo.tmp')
          except FileNotFoundError:
              pass

     O gerenciador de contexto é *note reentrante: 465b.

     Se o código dentro do bloco ‘with’ levantar uma exceção *note
     BaseExceptionGroup: 25f, exceções suprimidas são removidas do
     grupo.  Quaisquer exceções do grupo que não forem suprimidas são
     levantadas novamente em um novo grupo que é criado usando o método
     *note derive(): 17b3. do grupo original.

     Adicionado na versão 3.4.

     Alterado na versão 3.12: ‘suppress’ now supports suppressing
     exceptions raised as part of a *note BaseExceptionGroup: 25f.

 -- Função: contextlib.redirect_stdout (new_target)

     Context manager for temporarily redirecting *note sys.stdout: ae6.
     to another file or file-like object.

     This tool adds flexibility to existing functions or classes whose
     output is hardwired to stdout.

     For example, the output of *note help(): 8dd. normally is sent to
     'sys.stdout'.  You can capture that output in a string by
     redirecting the output to an *note io.StringIO: f59. object.  The
     replacement stream is returned from the ‘__enter__’ method and so
     is available as the target of the *note with: 5d2. statement:

          with redirect_stdout(io.StringIO()) as f:
              help(pow)
          s = f.getvalue()

     To send the output of *note help(): 8dd. to a file on disk,
     redirect the output to a regular file:

          with open('help.txt', 'w') as f:
              with redirect_stdout(f):
                  help(pow)

     To send the output of *note help(): 8dd. to 'sys.stderr':

          with redirect_stdout(sys.stderr):
              help(pow)

     Note that the global side effect on *note sys.stdout: ae6. means
     that this context manager is not suitable for use in library code
     and most threaded applications.  It also has no effect on the
     output of subprocesses.  However, it is still a useful approach for
     many utility scripts.

     O gerenciador de contexto é *note reentrante: 465b.

     Adicionado na versão 3.4.

 -- Função: contextlib.redirect_stderr (new_target)

     Similar to *note redirect_stdout(): e12. but redirecting *note
     sys.stderr: 940. to another file or file-like object.

     O gerenciador de contexto é *note reentrante: 465b.

     Adicionado na versão 3.5.

 -- Função: contextlib.chdir (path)

     Non parallel-safe context manager to change the current working
     directory.  As this changes a global state, the working directory,
     it is not suitable for use in most threaded or async contexts.  It
     is also not suitable for most non-linear code execution, like
     generators, where the program execution is temporarily relinquished
     – unless explicitly desired, you should not yield when this context
     manager is active.

     This is a simple wrapper around *note chdir(): 60d, it changes the
     current working directory upon entering and restores the old one on
     exit.

     O gerenciador de contexto é *note reentrante: 465b.

     Adicionado na versão 3.11.

 -- Classe: contextlib.ContextDecorator

     A base class that enables a context manager to also be used as a
     decorator.

     Context managers inheriting from ‘ContextDecorator’ have to
     implement ‘__enter__’ and ‘__exit__’ as normal.  ‘__exit__’ retains
     its optional exception handling even when used as a decorator.

     ‘ContextDecorator’ is used by *note contextmanager(): 1242, so you
     get this functionality automatically.

     Example of ‘ContextDecorator’:

          from contextlib import ContextDecorator

          class mycontext(ContextDecorator):
              def __enter__(self):
                  print('Starting')
                  return self

              def __exit__(self, *exc):
                  print('Finishing')
                  return False

     The class can then be used like this:

          >>> @mycontext()
          ... def function():
          ...     print('The bit in the middle')
          ...
          >>> function()
          Starting
          The bit in the middle
          Finishing

          >>> with mycontext():
          ...     print('The bit in the middle')
          ...
          Starting
          The bit in the middle
          Finishing

     This change is just syntactic sugar for any construct of the
     following form:

          def f():
              with cm():
                  # Do stuff

     ‘ContextDecorator’ lets you instead write:

          @cm()
          def f():
              # Do stuff

     It makes it clear that the ‘cm’ applies to the whole function,
     rather than just a piece of it (and saving an indentation level is
     nice, too).

     Existing context managers that already have a base class can be
     extended by using ‘ContextDecorator’ as a mixin class:

          from contextlib import ContextDecorator

          class mycontext(ContextBaseClass, ContextDecorator):
              def __enter__(self):
                  return self

              def __exit__(self, *exc):
                  return False

          Nota: As the decorated function must be able to be called
          multiple times, the underlying context manager must support
          use in multiple *note with: 5d2. statements.  If this is not
          the case, then the original construct with the explicit ‘with’
          statement inside the function should be used.

     Adicionado na versão 3.2.

 -- Classe: contextlib.AsyncContextDecorator

     Similar to *note ContextDecorator: 1241. but only for asynchronous
     functions.

     Example of ‘AsyncContextDecorator’:

          from asyncio import run
          from contextlib import AsyncContextDecorator

          class mycontext(AsyncContextDecorator):
              async def __aenter__(self):
                  print('Starting')
                  return self

              async def __aexit__(self, *exc):
                  print('Finishing')
                  return False

     The class can then be used like this:

          >>> @mycontext()
          ... async def function():
          ...     print('The bit in the middle')
          ...
          >>> run(function())
          Starting
          The bit in the middle
          Finishing

          >>> async def function():
          ...    async with mycontext():
          ...         print('The bit in the middle')
          ...
          >>> run(function())
          Starting
          The bit in the middle
          Finishing

     Adicionado na versão 3.10.

 -- Classe: contextlib.ExitStack

     A context manager that is designed to make it easy to
     programmatically combine other context managers and cleanup
     functions, especially those that are optional or otherwise driven
     by input data.

     For example, a set of files may easily be handled in a single with
     statement as follows:

          with ExitStack() as stack:
              files = [stack.enter_context(open(fname)) for fname in filenames]
              # All opened files will automatically be closed at the end of
              # the with statement, even if attempts to open files later
              # in the list raise an exception

     The *note __enter__(): 5c8. method returns the *note ExitStack:
     b3b. instance, and performs no additional operations.

     Each instance maintains a stack of registered callbacks that are
     called in reverse order when the instance is closed (either
     explicitly or implicitly at the end of a *note with: 5d2.
     statement).  Note that callbacks are 'not' invoked implicitly when
     the context stack instance is garbage collected.

     This stack model is used so that context managers that acquire
     their resources in their ‘__init__’ method (such as file objects)
     can be handled correctly.

     Since registered callbacks are invoked in the reverse order of
     registration, this ends up behaving as if multiple nested *note
     with: 5d2. statements had been used with the registered set of
     callbacks.  This even extends to exception handling - if an inner
     callback suppresses or replaces an exception, then outer callbacks
     will be passed arguments based on that updated state.

     This is a relatively low level API that takes care of the details
     of correctly unwinding the stack of exit callbacks.  It provides a
     suitable foundation for higher level context managers that
     manipulate the exit stack in application specific ways.

     Adicionado na versão 3.3.

      -- Método: enter_context (cm)

          Enters a new context manager and adds its *note __exit__():
          1344. method to the callback stack.  The return value is the
          result of the context manager’s own *note __enter__(): 5c8.
          method.

          These context managers may suppress exceptions just as they
          normally would if used directly as part of a *note with: 5d2.
          statement.

          Alterado na versão 3.11: Raises *note TypeError: 2c3. instead
          of *note AttributeError: 34b. if 'cm' is not a context
          manager.

      -- Método: push (exit)

          Adds a context manager’s *note __exit__(): 1344. method to the
          callback stack.

          As ‘__enter__’ is 'not' invoked, this method can be used to
          cover part of an *note __enter__(): 5c8. implementation with a
          context manager’s own *note __exit__(): 1344. method.

          If passed an object that is not a context manager, this method
          assumes it is a callback with the same signature as a context
          manager’s *note __exit__(): 1344. method and adds it directly
          to the callback stack.

          By returning true values, these callbacks can suppress
          exceptions the same way context manager *note __exit__():
          1344. methods can.

          The passed in object is returned from the function, allowing
          this method to be used as a function decorator.

      -- Método: callback (callback, /, *args, **kwds)

          Accepts an arbitrary callback function and arguments and adds
          it to the callback stack.

          Unlike the other methods, callbacks added this way cannot
          suppress exceptions (as they are never passed the exception
          details).

          The passed in callback is returned from the function, allowing
          this method to be used as a function decorator.

      -- Método: pop_all ()

          Transfers the callback stack to a fresh *note ExitStack: b3b.
          instance and returns it.  No callbacks are invoked by this
          operation - instead, they will now be invoked when the new
          stack is closed (either explicitly or implicitly at the end of
          a *note with: 5d2. statement).

          For example, a group of files can be opened as an “all or
          nothing” operation as follows:

               with ExitStack() as stack:
                   files = [stack.enter_context(open(fname)) for fname in filenames]
                   # Hold onto the close method, but don't call it yet.
                   close_files = stack.pop_all().close
                   # If opening any file fails, all previously opened files will be
                   # closed automatically. If all files are opened successfully,
                   # they will remain open even after the with statement ends.
                   # close_files() can then be invoked explicitly to close them all.

      -- Método: close ()

          Immediately unwinds the callback stack, invoking callbacks in
          the reverse order of registration.  For any context managers
          and exit callbacks registered, the arguments passed in will
          indicate that no exception occurred.

 -- Classe: contextlib.AsyncExitStack

     An *note asynchronous context manager: 5fc, similar to *note
     ExitStack: b3b, that supports combining both synchronous and
     asynchronous context managers, as well as having coroutines for
     cleanup logic.

     The *note close(): 465e. method is not implemented; *note aclose():
     465f. must be used instead.

      -- Método: async enter_async_context (cm)

          Similar to *note ExitStack.enter_context(): 5d3. but expects
          an asynchronous context manager.

          Alterado na versão 3.11: Raises *note TypeError: 2c3. instead
          of *note AttributeError: 34b. if 'cm' is not an asynchronous
          context manager.

      -- Método: push_async_exit (exit)

          Similar to *note ExitStack.push(): 465c. but expects either an
          asynchronous context manager or a coroutine function.

      -- Método: push_async_callback (callback, /, *args, **kwds)

          Similar to *note ExitStack.callback(): a8d. but expects a
          coroutine function.

      -- Método: async aclose ()

          Similar to *note ExitStack.close(): 465e. but properly handles
          awaitables.

     Continuing the example for *note asynccontextmanager(): b3c.:

          async with AsyncExitStack() as stack:
              connections = [await stack.enter_async_context(get_connection())
                  for i in range(5)]
              # All opened connections will automatically be released at the end of
              # the async with statement, even if attempts to open a connection
              # later in the list raise an exception.

     Adicionado na versão 3.7.


File: python.info,  Node: Exemplos e receitas<3>,  Next: Single use reusable and reentrant context managers,  Prev: Utilitários,  Up: contextlib — Utilitários para contextos da instrução with

5.29.8.2 Exemplos e receitas
............................

This section describes some examples and recipes for making effective
use of the tools provided by *note contextlib: 23.

* Menu:

* Supporting a variable number of context managers::
* Catching exceptions from __enter__ methods::
* Cleaning up in an __enter__ implementation::
* Replacing any use of try-finally and flag variables::
* Using a context manager as a function decorator::


File: python.info,  Node: Supporting a variable number of context managers,  Next: Catching exceptions from __enter__ methods,  Up: Exemplos e receitas<3>

5.29.8.3 Supporting a variable number of context managers
.........................................................

The primary use case for *note ExitStack: b3b. is the one given in the
class documentation: supporting a variable number of context managers
and other cleanup operations in a single *note with: 5d2. statement.
The variability may come from the number of context managers needed
being driven by user input (such as opening a user specified collection
of files), or from some of the context managers being optional:

     with ExitStack() as stack:
         for resource in resources:
             stack.enter_context(resource)
         if need_special_resource():
             special = acquire_special_resource()
             stack.callback(release_special_resource, special)
         # Perform operations that use the acquired resources

As shown, *note ExitStack: b3b. also makes it quite easy to use *note
with: 5d2. statements to manage arbitrary resources that don’t natively
support the context management protocol.


File: python.info,  Node: Catching exceptions from __enter__ methods,  Next: Cleaning up in an __enter__ implementation,  Prev: Supporting a variable number of context managers,  Up: Exemplos e receitas<3>

5.29.8.4 Catching exceptions from ‘__enter__’ methods
.....................................................

It is occasionally desirable to catch exceptions from an ‘__enter__’
method implementation, 'without' inadvertently catching exceptions from
the *note with: 5d2. statement body or the context manager’s ‘__exit__’
method.  By using *note ExitStack: b3b. the steps in the context
management protocol can be separated slightly in order to allow this:

     stack = ExitStack()
     try:
         x = stack.enter_context(cm)
     except Exception:
         # handle __enter__ exception
     else:
         with stack:
             # Handle normal case

Actually needing to do this is likely to indicate that the underlying
API should be providing a direct resource management interface for use
with *note try: 6e9./*note except: 18b./*note finally: 9d2. statements,
but not all APIs are well designed in that regard.  When a context
manager is the only resource management API provided, then *note
ExitStack: b3b. can make it easier to handle various situations that
can’t be handled directly in a *note with: 5d2. statement.


File: python.info,  Node: Cleaning up in an __enter__ implementation,  Next: Replacing any use of try-finally and flag variables,  Prev: Catching exceptions from __enter__ methods,  Up: Exemplos e receitas<3>

5.29.8.5 Cleaning up in an ‘__enter__’ implementation
.....................................................

As noted in the documentation of *note ExitStack.push(): 465c, this
method can be useful in cleaning up an already allocated resource if
later steps in the *note __enter__(): 5c8. implementation fail.

Here’s an example of doing this for a context manager that accepts
resource acquisition and release functions, along with an optional
validation function, and maps them to the context management protocol:

     from contextlib import contextmanager, AbstractContextManager, ExitStack

     class ResourceManager(AbstractContextManager):

         def __init__(self, acquire_resource, release_resource, check_resource_ok=None):
             self.acquire_resource = acquire_resource
             self.release_resource = release_resource
             if check_resource_ok is None:
                 def check_resource_ok(resource):
                     return True
             self.check_resource_ok = check_resource_ok

         @contextmanager
         def _cleanup_on_error(self):
             with ExitStack() as stack:
                 stack.push(self)
                 yield
                 # The validation check passed and didn't raise an exception
                 # Accordingly, we want to keep the resource, and pass it
                 # back to our caller
                 stack.pop_all()

         def __enter__(self):
             resource = self.acquire_resource()
             with self._cleanup_on_error():
                 if not self.check_resource_ok(resource):
                     msg = "Failed validation for {!r}"
                     raise RuntimeError(msg.format(resource))
             return resource

         def __exit__(self, *exc_details):
             # We don't need to duplicate any of our resource release logic
             self.release_resource()


File: python.info,  Node: Replacing any use of try-finally and flag variables,  Next: Using a context manager as a function decorator,  Prev: Cleaning up in an __enter__ implementation,  Up: Exemplos e receitas<3>

5.29.8.6 Replacing any use of ‘try-finally’ and flag variables
..............................................................

A pattern you will sometimes see is a ‘try-finally’ statement with a
flag variable to indicate whether or not the body of the ‘finally’
clause should be executed.  In its simplest form (that can’t already be
handled just by using an ‘except’ clause instead), it looks something
like this:

     cleanup_needed = True
     try:
         result = perform_operation()
         if result:
             cleanup_needed = False
     finally:
         if cleanup_needed:
             cleanup_resources()

As with any ‘try’ statement based code, this can cause problems for
development and review, because the setup code and the cleanup code can
end up being separated by arbitrarily long sections of code.

*note ExitStack: b3b. makes it possible to instead register a callback
for execution at the end of a ‘with’ statement, and then later decide to
skip executing that callback:

     from contextlib import ExitStack

     with ExitStack() as stack:
         stack.callback(cleanup_resources)
         result = perform_operation()
         if result:
             stack.pop_all()

This allows the intended cleanup behaviour to be made explicit up front,
rather than requiring a separate flag variable.

If a particular application uses this pattern a lot, it can be
simplified even further by means of a small helper class:

     from contextlib import ExitStack

     class Callback(ExitStack):
         def __init__(self, callback, /, *args, **kwds):
             super().__init__()
             self.callback(callback, *args, **kwds)

         def cancel(self):
             self.pop_all()

     with Callback(cleanup_resources) as cb:
         result = perform_operation()
         if result:
             cb.cancel()

If the resource cleanup isn’t already neatly bundled into a standalone
function, then it is still possible to use the decorator form of *note
ExitStack.callback(): a8d. to declare the resource cleanup in advance:

     from contextlib import ExitStack

     with ExitStack() as stack:
         @stack.callback
         def cleanup_resources():
             ...
         result = perform_operation()
         if result:
             stack.pop_all()

Devido à maneira como o protocolo decorador funciona, uma função de
retorno de chamada declarada dessa forma não pode receber nenhum
parâmetro.  Em vez disso, quaisquer recursos a serem liberados devem ser
acessados como variáveis de clausura.


File: python.info,  Node: Using a context manager as a function decorator,  Prev: Replacing any use of try-finally and flag variables,  Up: Exemplos e receitas<3>

5.29.8.7 Using a context manager as a function decorator
........................................................

*note ContextDecorator: 1241. makes it possible to use a context manager
in both an ordinary ‘with’ statement and also as a function decorator.

For example, it is sometimes useful to wrap functions or groups of
statements with a logger that can track the time of entry and time of
exit.  Rather than writing both a function decorator and a context
manager for the task, inheriting from *note ContextDecorator: 1241.
provides both capabilities in a single definition:

     from contextlib import ContextDecorator
     import logging

     logging.basicConfig(level=logging.INFO)

     class track_entry_and_exit(ContextDecorator):
         def __init__(self, name):
             self.name = name

         def __enter__(self):
             logging.info('Entering: %s', self.name)

         def __exit__(self, exc_type, exc, exc_tb):
             logging.info('Exiting: %s', self.name)

Instances of this class can be used as both a context manager:

     with track_entry_and_exit('widget loader'):
         print('Some time consuming activity goes here')
         load_widget()

And also as a function decorator:

     @track_entry_and_exit('widget loader')
     def activity():
         print('Some time consuming activity goes here')
         load_widget()

Note that there is one additional limitation when using context managers
as function decorators: there’s no way to access the return value of
*note __enter__(): 5c8.  If that value is needed, then it is still
necessary to use an explicit ‘with’ statement.

Ver também
..........

PEP 343(1) - A instrução “with”

     A especificação, o histórico e os exemplos para a instrução Python
     *note with: 5d2.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0343/


File: python.info,  Node: Single use reusable and reentrant context managers,  Prev: Exemplos e receitas<3>,  Up: contextlib — Utilitários para contextos da instrução with

5.29.8.8 Single use, reusable and reentrant context managers
............................................................

Most context managers are written in a way that means they can only be
used effectively in a *note with: 5d2. statement once.  These single use
context managers must be created afresh each time they’re used -
attempting to use them a second time will trigger an exception or
otherwise not work correctly.

This common limitation means that it is generally advisable to create
context managers directly in the header of the *note with: 5d2.
statement where they are used (as shown in all of the usage examples
above).

Files are an example of effectively single use context managers, since
the first *note with: 5d2. statement will close the file, preventing any
further IO operations using that file object.

Context managers created using *note contextmanager(): 1242. are also
single use context managers, and will complain about the underlying
generator failing to yield if an attempt is made to use them a second
time:

     >>> from contextlib import contextmanager
     >>> @contextmanager
     ... def singleuse():
     ...     print("Before")
     ...     yield
     ...     print("After")
     ...
     >>> cm = singleuse()
     >>> with cm:
     ...     pass
     ...
     Before
     After
     >>> with cm:
     ...     pass
     ...
     Traceback (most recent call last):
         ...
     RuntimeError: generator didn't yield

* Menu:

* Reentrant context managers::
* Gerenciadores de contexto reutilizáveis::


File: python.info,  Node: Reentrant context managers,  Next: Gerenciadores de contexto reutilizáveis,  Up: Single use reusable and reentrant context managers

5.29.8.9 Reentrant context managers
...................................

More sophisticated context managers may be “reentrant”.  These context
managers can not only be used in multiple *note with: 5d2. statements,
but may also be used 'inside' a ‘with’ statement that is already using
the same context manager.

*note threading.RLock: 2de. is an example of a reentrant context
manager, as are *note suppress(): f58, *note redirect_stdout(): e12, and
*note chdir(): 60c.  Here’s a very simple example of reentrant use:

     >>> from contextlib import redirect_stdout
     >>> from io import StringIO
     >>> stream = StringIO()
     >>> write_to_stream = redirect_stdout(stream)
     >>> with write_to_stream:
     ...     print("This is written to the stream rather than stdout")
     ...     with write_to_stream:
     ...         print("This is also written to the stream")
     ...
     >>> print("This is written directly to stdout")
     This is written directly to stdout
     >>> print(stream.getvalue())
     This is written to the stream rather than stdout
     This is also written to the stream

Real world examples of reentrancy are more likely to involve multiple
functions calling each other and hence be far more complicated than this
example.

Note also that being reentrant is 'not' the same thing as being thread
safe.  *note redirect_stdout(): e12, for example, is definitely not
thread safe, as it makes a global modification to the system state by
binding *note sys.stdout: ae6. to a different stream.


File: python.info,  Node: Gerenciadores de contexto reutilizáveis,  Prev: Reentrant context managers,  Up: Single use reusable and reentrant context managers

5.29.8.10 Gerenciadores de contexto reutilizáveis
.................................................

Distinct from both single use and reentrant context managers are
“reusable” context managers (or, to be completely explicit, “reusable,
but not reentrant” context managers, since reentrant context managers
are also reusable).  These context managers support being used multiple
times, but will fail (or otherwise not work correctly) if the specific
context manager instance has already been used in a containing with
statement.

*note threading.Lock: 176d. is an example of a reusable, but not
reentrant, context manager (for a reentrant lock, it is necessary to use
*note threading.RLock: 2de. instead).

Another example of a reusable, but not reentrant, context manager is
*note ExitStack: b3b, as it invokes 'all' currently registered callbacks
when leaving any with statement, regardless of where those callbacks
were added:

     >>> from contextlib import ExitStack
     >>> stack = ExitStack()
     >>> with stack:
     ...     stack.callback(print, "Callback: from first context")
     ...     print("Leaving first context")
     ...
     Leaving first context
     Callback: from first context
     >>> with stack:
     ...     stack.callback(print, "Callback: from second context")
     ...     print("Leaving second context")
     ...
     Leaving second context
     Callback: from second context
     >>> with stack:
     ...     stack.callback(print, "Callback: from outer context")
     ...     with stack:
     ...         stack.callback(print, "Callback: from inner context")
     ...         print("Leaving inner context")
     ...     print("Leaving outer context")
     ...
     Leaving inner context
     Callback: from inner context
     Callback: from outer context
     Leaving outer context

As the output from the example shows, reusing a single stack object
across multiple with statements works correctly, but attempting to nest
them will cause the stack to be cleared at the end of the innermost with
statement, which is unlikely to be desirable behaviour.

Using separate *note ExitStack: b3b. instances instead of reusing a
single instance avoids that problem:

     >>> from contextlib import ExitStack
     >>> with ExitStack() as outer_stack:
     ...     outer_stack.callback(print, "Callback: from outer context")
     ...     with ExitStack() as inner_stack:
     ...         inner_stack.callback(print, "Callback: from inner context")
     ...         print("Leaving inner context")
     ...     print("Leaving outer context")
     ...
     Leaving inner context
     Callback: from inner context
     Leaving outer context
     Callback: from outer context


File: python.info,  Node: abc — Classes base abstratas,  Next: atexit — Manipuladores de saída,  Prev: contextlib — Utilitários para contextos da instrução with,  Up: Serviços de Tempo de Execução Python

5.29.9 ‘abc’ — Classes base abstratas
-------------------------------------

'Código-fonte:' Lib/abc.py(1)

__________________________________________________________________

Este módulo fornece a infraestrutura para definir *note classes base
abstratas: 11f5. (ABCs, do inglês 'abstract base class') em Python, como
delineado em PEP 3119(2); veja o PEP para entender o porquê isto foi
adicionado ao Python.  (Veja também PEP 3141(3) e o módulo *note
numbers: 9e. sobre uma hierarquia de tipo para números baseado nas
ABCs.)

O módulo *note collections: 1d. tem algumas classes concretas que
derivam de ABCs; essas podem, evidentemente, ser ainda mais derivadas.
Além disso, o submódulo *note collections.abc: 1e. tem algumas ABCs que
podem ser usadas para testar se uma classe ou instância oferece uma
interface particular, por exemplo, se é *note hasheável: 610. ou se é um
*note mapeamento: 11fb.

Este módulo fornece a metaclasse *note ABCMeta: f4a. para definir ABCs e
uma classe auxiliar *note ABC: f49. para alternativamente definir ABCs
através de herança:

 -- Classe: abc.ABC

     Uma classe auxiliar que tem *note ABCMeta: f4a. como sua
     metaclasse.  Com essa classe, uma classe base abstrata pode ser
     criada simplesmente derivando da ‘ABC’ evitando às vezes confundir
     o uso da metaclasse, por exemplo:

          from abc import ABC

          class MyABC(ABC):
              pass

     Note que o tipo da classe ‘ABC’ ainda é *note ABCMeta: f4a,
     portanto herdar da ‘ABC’ requer as precauções usuais a respeito do
     uso da metaclasse, pois herança múltipla pode levar a conflitos de
     metaclasse.  Pode-se também definir uma classe base abstrata ao
     passar a palavra reservada metaclasse e usar ‘ABCMeta’ diretamente,
     por exemplo:

          from abc import ABCMeta

          class MyABC(metaclass=ABCMeta):
              pass

     Adicionado na versão 3.4.

 -- Classe: abc.ABCMeta

     Metaclasse para definir Classe Base Abstrata (ABCs).

     Use esta metaclasse para criar uma ABC. Uma ABC pode ser
     diretamente estendida, e então agir como uma classe misturada.
     Você também pode registrar classes concretas não relacionadas (até
     mesmo classes embutidas) e ABCs não relacionadas como “subclasses
     virtuais” – estas e suas descendentes serão consideradas subclasses
     da ABC de registro pela função embutida *note issubclass(): 7c2,
     mas a ABC de registro não irá aparecer na MRO (Ordem de Resolução
     do Método) e nem as implementações do método definidas pela ABC de
     registro será chamável (nem mesmo via *note super(): 4db.).  (4)

     Classes criadas com a metaclasse de ‘ABCMeta’ tem o seguinte
     método:

      -- Método: register (subclass)

          Registra 'subclass' como uma “subclasse virtual” desta ABC.
          Por exemplo:

               from abc import ABC

               class MyABC(ABC):
                   pass

               MyABC.register(tuple)

               assert issubclass(tuple, MyABC)
               assert isinstance((), MyABC)

          Alterado na versão 3.3: Retorna a subclasse registrada, para
          permitir o uso como um decorador de classe.

          Alterado na versão 3.4: Para detectar chamadas para
          ‘register()’, você pode usar a função *note get_cache_token():
          f48.

     Você também pode sobrepor este método em uma classe base abstrata:

      -- Método: __subclasshook__ (subclass)

          (Deve obrigatoriamente ser definido como um método de classe.)

          Verifica se 'subclass' é considerada uma subclasse desta ABC.
          Isto significa que você pode personalizar ainda mais o
          comportamento de *note issubclass(): 7c2. sem a necessidade de
          chamar *note register(): 10c7. em toda classe que você queira
          considerar uma subclasse da ABC. (Este método de classe é
          chamado do método *note __subclasscheck__(): 2109. da ABC.)

          Este método deve retornar ‘True’, ‘False’ ou *note
          NotImplemented: 7d3.  Se retornar ‘True’, 'subclass' é
          considerada uma subclasse desta ABC. Se retornar ‘False’,
          'subclass' não é considerada uma subclasse desta ABC, mesmo
          que normalmente seria uma.  Se retornar ‘NotImplemented’, a
          verificação da subclasse é continuada com o mecanismo usual.

     Para uma demonstração destes conceitos, veja este exemplo de
     definição ABC:

          class Foo:
              def __getitem__(self, index):
                  ...
              def __len__(self):
                  ...
              def get_iterator(self):
                  return iter(self)

          class MyIterable(ABC):

              @abstractmethod
              def __iter__(self):
                  while False:
                      yield None

              def get_iterator(self):
                  return self.__iter__()

              @classmethod
              def __subclasshook__(cls, C):
                  if cls is MyIterable:
                      if any("__iter__" in B.__dict__ for B in C.__mro__):
                          return True
                  return NotImplemented

          MyIterable.register(Foo)

     A ‘MyIterable’ da ABC define o método iterável padrão, *note
     __iter__(): c8a, como um método abstrato.  A implementação dada
     aqui pode ainda ser chamada da subclasse.  O método
     ‘get_iterator()’ é também parte da classe base abstrata
     ‘MyIterable’, mas não precisa ser substituído nas classes derivadas
     não abstratas.

     O método de classe *note __subclasshook__(): 26cb. definido aqui
     diz que qualquer classe que tenha um método *note __iter__(): c8a.
     em seu *note __dict__: 55b. (ou no de uma de suas classes base,
     acessados via lista *note __mro__: 20bb.) é considerada uma
     ‘MyIterable’ também.

     Finalmente, a última linha faz de ‘Foo’ uma subclasse virtual da
     ‘MyIterable’, apesar de não definir um método *note __iter__():
     c8a. (ela usa o protocolo iterável antigo, definido em termos de
     *note __len__(): 15b4. e *note __getitem__(): 283.).  Note que isto
     não fará o ‘get_iterator’ disponível como um método de ‘Foo’, então
     ele é fornecido separadamente.

O módulo ‘abc’ também fornece o seguinte decorador:

 -- Função: @abc.abstractmethod

     Um decorador indicando métodos abstratos.

     Usar este decorador requer que a metaclasse da classe seja *note
     ABCMeta: f4a. ou seja derivada desta.  Uma classe que tem uma
     metaclasse derivada de ‘ABCMeta’ não pode ser instanciada, a menos
     que todos os seus métodos abstratos e propriedades estejam
     substituídos.  Os métodos abstratos podem ser chamados usando
     qualquer um dos mecanismos normais de chamadas a ‘super’.
     ‘abstractmethod()’ pode ser usado para declarar métodos abstratos
     para propriedades e descritores.

     Adicionar dinamicamente métodos abstratos a uma classe, ou tentar
     modificar o status de abstração de um método ou classe uma vez que
     estejam criados, só é suportado usando a função *note
     update_abstractmethods(): 466e.  A ‘abstractmethod()’ afeta apenas
     subclasses derivadas usando herança regular; “subclasses virtuais”
     registradas com o método *note register(): 10c7. da ABC não são
     afetadas.

     Quando ‘abstractmethod()’ é aplicado em combinação com outros
     descritores de método, ele deve ser aplicado como o decorador mais
     interno, como mostrado nos seguintes exemplos de uso:

          class C(ABC):
              @abstractmethod
              def my_abstract_method(self, arg1):
                  ...
              @classmethod
              @abstractmethod
              def my_abstract_classmethod(cls, arg2):
                  ...
              @staticmethod
              @abstractmethod
              def my_abstract_staticmethod(arg3):
                  ...

              @property
              @abstractmethod
              def my_abstract_property(self):
                  ...
              @my_abstract_property.setter
              @abstractmethod
              def my_abstract_property(self, val):
                  ...

              @abstractmethod
              def _get_x(self):
                  ...
              @abstractmethod
              def _set_x(self, val):
                  ...
              x = property(_get_x, _set_x)

     Para que interopere corretamente com o maquinário da classe base
     abstrata, o descritor precisa identificar-se como abstrato usando
     ‘__isabstractmethod__’.  No geral, este atributo deve ser ‘True’ se
     algum dos métodos usados para compor o descritor for abstrato.  Por
     exemplo, a *note property: 194. embutida do Python faz o
     equivalente a:

          class Descriptor:
              ...
              @property
              def __isabstractmethod__(self):
                  return any(getattr(f, '__isabstractmethod__', False) for
                             f in (self._fget, self._fset, self._fdel))

          Nota: Diferente de métodos abstratos Java, esses métodos
          abstratos podem ter uma implementação.  Esta implementação
          pode ser chamada via mecanismo da *note super(): 4db. da
          classe que a substitui.  Isto pode ser útil como um ponto
          final para uma super chamada em um framework que usa herança
          múltipla cooperativa.

O módulo ‘abc’ também suporta os seguintes decoradores herdados:

 -- Função: @abc.abstractclassmethod

     Adicionado na versão 3.2.

     Descontinuado desde a versão 3.3: Agora é possível usar *note
     classmethod: 166. com *note abstractmethod(): 10c4, tornando
     redundante este decorador.

     Uma subclasse da *note classmethod(): 166. embutida, indicando um
     método de classe abstrato.  Caso contrário, é similar à *note
     abstractmethod(): 10c4.

     Este caso especial está descontinuado, pois o decorador da *note
     classmethod(): 166. está agora corretamente identificado como
     abstrato quando aplicado a um método abstrato:

          class C(ABC):
              @classmethod
              @abstractmethod
              def my_abstract_classmethod(cls, arg):
                  ...

 -- Função: @abc.abstractstaticmethod

     Adicionado na versão 3.2.

     Descontinuado desde a versão 3.3: Agora é possível usar *note
     staticmethod: 416. com *note abstractmethod(): 10c4, tornando
     redundante este decorador.

     Uma subclasse da *note staticmethod(): 416. embutida, indicando um
     método estático abstrato.  Caso contrário, ela é similar à *note
     abstractmethod(): 10c4.

     Este caso especial está descontinuado, pois o decorador da *note
     staticmethod(): 416. está agora corretamente identificado como
     abstrato quando aplicado a um método abstrato:

          class C(ABC):
              @staticmethod
              @abstractmethod
              def my_abstract_staticmethod(arg):
                  ...

 -- Função: @abc.abstractproperty

     Descontinuado desde a versão 3.3: Agora é possível usar *note
     property: 194, *note property.getter(): 1750, *note
     property.setter(): 1751. e *note property.deleter(): 1752. com
     *note abstractmethod(): 10c4, tornando redundante este decorador.

     Uma subclasse da *note property(): 194. embutida, indicando uma
     propriedade abstrata.

     Este caso especial está descontinuado, pois o decorador da *note
     property(): 194. está agora corretamente identificado como abstrato
     quando aplicado a um método abstrato:

          class C(ABC):
              @property
              @abstractmethod
              def my_abstract_property(self):
                  ...

     O exemplo acima define uma propriedade somente leitura; você também
     pode definir uma propriedade abstrata de leitura e escrita marcando
     apropriadamente um ou mais dos métodos subjacentes como abstratos:

          class C(ABC):
              @property
              def x(self):
                  ...

              @x.setter
              @abstractmethod
              def x(self, val):
                  ...

     Se apenas alguns componentes são abstratos, apenas estes
     componentes precisam ser atualizados para criar uma propriedade
     concreta em uma subclasse:

          class D(C):
              @C.x.setter
              def x(self, val):
                  ...

O módulo ‘abc’ também fornece as seguintes funções:

 -- Função: abc.get_cache_token ()

     Retorna o token de cache da classe base abstrata atual.

     O token é um objeto opaco (que suporta teste de igualdade)
     identificando a versão atual do cache da classe base abstrata para
     subclasses virtuais.  O token muda a cada chamada ao *note
     ABCMeta.register(): 10c7. em qualquer CBA.

     Adicionado na versão 3.4.

 -- Função: abc.update_abstractmethods (cls)

     Uma função para recalcular o status de abstração de uma classe
     abstrata.  Esta função deve ser chamada se os métodos abstratos de
     uma classe foram implementados ou alterados após sua criação.
     Normalmente, essa função deve ser chamada de dentro de um decorador
     de classe.

     Retorna 'cls', para permitir o uso como decorador de classe.

     Se 'cls' não for uma instância de *note ABCMeta: f4a, não faz nada.

          Nota: Esta função presume que as superclasses de 'cls' já
          estão atualizadas.  Ele não atualiza nenhuma subclasse.

     Adicionado na versão 3.10.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/abc.py

   (2) https://peps.python.org/pep-3119/

   (3) https://peps.python.org/pep-3141/

   (4) Programadores C++ devem notar que o conceito da classe base
virtual do Python não é o mesmo que o de C++.


File: python.info,  Node: atexit — Manipuladores de saída,  Next: traceback — Imprime ou recupera um traceback da pilha,  Prev: abc — Classes base abstratas,  Up: Serviços de Tempo de Execução Python

5.29.10 ‘atexit’ — Manipuladores de saída
-----------------------------------------

__________________________________________________________________

O módulo *note atexit: c. define funções para registrar e cancelar o
registro de funções de limpeza.  As funções assim registradas são
executadas automaticamente após a conclusão normal do interpretador.  O
módulo *note atexit: c. executa essas funções na ordem 'reversa' na qual
foram registradas; se você inscrever ‘A’, ‘B’ e ‘C’, no momento do
término do interpretador, eles serão executados na ordem ‘C’, ‘B’, ‘A’ .

'Nota:' As funções registradas através deste módulo não são invocadas
quando o programa é morto por um sinal não tratado pelo Python, quando
um erro interno fatal do Python é detectado ou quando a função *note
os._exit(): 242f. é invocada.

'Nota:' O efeito de registrar ou cancelar o registro de funções dentro
de uma função de limpeza é indefinido.

Alterado na versão 3.7: Quando usadas com os subinterpretadores de
C-API, as funções registradas são locais para o interpretador em que
foram registradas.

 -- Função: atexit.register (func, *args, **kwargs)

     Registre 'func' como uma função a ser executada no término.
     Qualquer o argumento opcional que deve ser passado para 'func' for
     passado como argumento para *note register(): 882.  É possível
     registrar mais ou menos a mesma função e argumentos.

     Na terminação normal do programa (por exemplo, se *note sys.exit():
     138e. for chamado ou a execução do módulo principal for concluída),
     todas as funções registradas serão chamadas por último, pela
     primeira ordem.  A suposição é que os módulos de nível inferior
     normalmente serão importados antes dos módulos de nível mais alto
     e, portanto, devem ser limpos posteriormente.

     Se uma exceção é levantada durante a execução dos manipuladores de
     saída, um traceback é impresso (a menos que *note SystemExit: d63.
     seja levantada) e as informações de exceção sejam salvas.  Depois
     de todos os manipuladores de saída terem tido a chance de executar
     a última exceção a ser levantada, é levantada novamente.

     Esta função retorna 'func', o que torna possível usá-la como um
     decorador.

          Aviso: Iniciar novas threads ou chamar *note os.fork(): 197.
          de uma função registrada pode levar a uma condição de corrida
          entre os estados de thread de liberação de thread principal do
          tempo de execução do Python enquanto as rotinas internas *note
          threading: ed. ou o novo processo tentam usar esse estado.
          Isso pode levar a travamentos em vez de desligamento normal.

     Alterado na versão 3.12: Tentativas de iniciar uma nova thread ou
     *note os.fork(): 197. um novo processo em uma função registrada
     agora leva a *note RuntimeError: 195.

 -- Função: atexit.unregister (func)

     Remove 'func' da lista de funções a serem executadas no
     desligamento do interpretador.  *note unregister(): 15a6.
     silenciosamente não faz nada se 'func' não foi registrado
     anteriormente.  Se 'func' foi registrado mais de uma vez, cada
     ocorrência dessa função na pilha de chamada *note atexit: c. será
     removida.  Comparações de igualdade (‘==’) são usadas internamente
     durante o cancelamento do registro, portanto, as referências de
     função não precisam ter identidades correspondentes.

Ver também
..........

Módulo *note readline: ba.

     Exemplo útil de *note atexit: c. para ler e escrever arquivos de
     histórico de *note readline: ba.

* Menu:

* Exemplo do atexit::


File: python.info,  Node: Exemplo do atexit,  Up: atexit — Manipuladores de saída

5.29.10.1 Exemplo do ‘atexit’
.............................

O exemplo simples a seguir demonstra como um módulo pode inicializar um
contador de um arquivo quando ele é importado e salvar automaticamente o
valor atualizado do contador quando o programa termina, sem depender que
a aplicação faça uma chamada explícita nesse módulo na finalização.

     try:
         with open('counterfile') as infile:
             _count = int(infile.read())
     except FileNotFoundError:
         _count = 0

     def incrcounter(n):
         global _count
         _count = _count + n

     def savecounter():
         with open('counterfile', 'w') as outfile:
             outfile.write('%d' % _count)

     import atexit

     atexit.register(savecounter)

Os argumentos posicional e de palavra reservada também podem ser
passados para *note register(): 882. para ser passada para a função
registrada quando é chamada

     def goodbye(name, adjective):
         print('Goodbye %s, it was %s to meet you.' % (name, adjective))

     import atexit

     atexit.register(goodbye, 'Donny', 'nice')
     # ou:
     atexit.register(goodbye, adjective='nice', name='Donny')

Utilizado como um *note decorador: 731.:

     import atexit

     @atexit.register
     def goodbye():
         print('You are now leaving the Python sector.')

Isso só funciona com funções que podem ser invocadas sem argumentos.


File: python.info,  Node: traceback — Imprime ou recupera um traceback da pilha,  Next: __future__ — Definições de instruções future,  Prev: atexit — Manipuladores de saída,  Up: Serviços de Tempo de Execução Python

5.29.11 ‘traceback’ — Imprime ou recupera um traceback da pilha
---------------------------------------------------------------

'Código-fonte:' Lib/traceback.py(1)

__________________________________________________________________

This module provides a standard interface to extract, format and print
stack traces of Python programs.  It is more flexible than the
interpreter’s default traceback display, and therefore makes it possible
to configure certain aspects of the output.  Finally, it contains a
utility for capturing enough information about an exception to print it
later, without the need to save a reference to the actual exception.
Since exceptions can be the roots of large objects graph, this utility
can significantly improve memory management.

The module uses *note traceback objects: b07. — these are objects of
type *note types.TracebackType: b05, which are assigned to the *note
__traceback__: 1309. field of *note BaseException: 5bb. instances.

Ver também
..........

Módulo *note faulthandler: 58.

     Usado para despejar tracebacks (situação da pilha de execução) do
     Python explicitamente, em uma falha, após um tempo limite ou em um
     sinal do usuário.

Module *note pdb: a5.

     Interactive source code debugger for Python programs.

The module’s API can be divided into two parts:

   * Module-level functions offering basic functionality, which are
     useful for interactive inspection of exceptions and tracebacks.

   * *note TracebackException: 25c. class and its helper classes *note
     StackSummary: eb2. and *note FrameSummary: eb3.  These offer both
     more flexibility in the output generated and the ability to store
     the information necessary for later formatting without holding
     references to actual exception and traceback objects.

* Menu:

* Funções de nível de módulo: Funções de nível de módulo<2>.
* TracebackException Objects::
* StackSummary Objects::
* FrameSummary Objects::
* Examples of Using the Module-Level Functions::
* Examples of Using TracebackException::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/traceback.py


File: python.info,  Node: Funções de nível de módulo<2>,  Next: TracebackException Objects,  Up: traceback — Imprime ou recupera um traceback da pilha

5.29.11.1 Funções de nível de módulo
....................................

 -- Função: traceback.print_tb (tb, limit=None, file=None)

     Print up to 'limit' stack trace entries from *note traceback
     object: b07. 'tb' (starting from the caller’s frame) if 'limit' is
     positive.  Otherwise, print the last ‘abs(limit)’ entries.  If
     'limit' is omitted or ‘None’, all entries are printed.  If 'file'
     is omitted or ‘None’, the output goes to *note sys.stderr: 940.;
     otherwise it should be an open *note file: 1203. or *note file-like
     object: 15cf. to receive the output.

          Nota: The meaning of the 'limit' parameter is different than
          the meaning of *note sys.tracebacklimit: 16c4.  A negative
          'limit' value corresponds to a positive value of
          ‘sys.tracebacklimit’, whereas the behaviour of a positive
          'limit' value cannot be achieved with ‘sys.tracebacklimit’.

     Alterado na versão 3.5: Added negative 'limit' support.

 -- Função: traceback.print_exception (exc, /[, value, tb], limit=None,
          file=None, chain=True)

     Print exception information and stack trace entries from *note
     traceback object: b07. 'tb' to 'file'.  This differs from *note
     print_tb(): eb4. in the following ways:

        * if 'tb' is not ‘None’, it prints a header ‘Traceback (most
          recent call last):’

        * it prints the exception type and 'value' after the stack trace

        * if 'type(value)' is *note SyntaxError: 18d. and 'value' has
          the appropriate format, it prints the line where the syntax
          error occurred with a caret indicating the approximate
          position of the error.

     Since Python 3.10, instead of passing 'value' and 'tb', an
     exception object can be passed as the first argument.  If 'value'
     and 'tb' are provided, the first argument is ignored in order to
     provide backwards compatibility.

     The optional 'limit' argument has the same meaning as for *note
     print_tb(): eb4.  If 'chain' is true (the default), then chained
     exceptions (the *note __cause__: 130b. or *note __context__: 130a.
     attributes of the exception) will be printed as well, like the
     interpreter itself does when printing an unhandled exception.

     Alterado na versão 3.5: The 'etype' argument is ignored and
     inferred from the type of 'value'.

     Alterado na versão 3.10: The 'etype' parameter has been renamed to
     'exc' and is now positional-only.

 -- Função: traceback.print_exc (limit=None, file=None, chain=True)

     This is a shorthand for ‘print_exception(sys.exception(),
     limit=limit, file=file, chain=chain)’.

 -- Função: traceback.print_last (limit=None, file=None, chain=True)

     This is a shorthand for ‘print_exception(sys.last_exc, limit=limit,
     file=file, chain=chain)’.  In general it will work only after an
     exception has reached an interactive prompt (see *note
     sys.last_exc: 4be.).

 -- Função: traceback.print_stack (f=None, limit=None, file=None)

     Print up to 'limit' stack trace entries (starting from the
     invocation point) if 'limit' is positive.  Otherwise, print the
     last ‘abs(limit)’ entries.  If 'limit' is omitted or ‘None’, all
     entries are printed.  The optional 'f' argument can be used to
     specify an alternate *note stack frame: 6e0. to start.  The
     optional 'file' argument has the same meaning as for *note
     print_tb(): eb4.

     Alterado na versão 3.5: Added negative 'limit' support.

 -- Função: traceback.extract_tb (tb, limit=None)

     Return a *note StackSummary: eb2. object representing a list of
     “pre-processed” stack trace entries extracted from the *note
     traceback object: b07. 'tb'.  It is useful for alternate formatting
     of stack traces.  The optional 'limit' argument has the same
     meaning as for *note print_tb(): eb4.  A “pre-processed” stack
     trace entry is a *note FrameSummary: eb3. object containing
     attributes *note filename: 467a, *note lineno: 467b, *note name:
     467c, and *note line: 467d. representing the information that is
     usually printed for a stack trace.

 -- Função: traceback.extract_stack (f=None, limit=None)

     Extract the raw traceback from the current *note stack frame: 6e0.
     The return value has the same format as for *note extract_tb():
     4679.  The optional 'f' and 'limit' arguments have the same meaning
     as for *note print_stack(): eb5.

 -- Função: traceback.print_list (extracted_list, file=None)

     Print the list of tuples as returned by *note extract_tb(): 4679.
     or *note extract_stack(): 467e. as a formatted stack trace to the
     given file.  If 'file' is ‘None’, the output is written to *note
     sys.stderr: 940.

 -- Função: traceback.format_list (extracted_list)

     Given a list of tuples or *note FrameSummary: eb3. objects as
     returned by *note extract_tb(): 4679. or *note extract_stack():
     467e, return a list of strings ready for printing.  Each string in
     the resulting list corresponds to the item with the same index in
     the argument list.  Each string ends in a newline; the strings may
     contain internal newlines as well, for those items whose source
     text line is not ‘None’.

 -- Função: traceback.format_exception_only (exc, /[, value], *,
          show_group=False)

     Format the exception part of a traceback using an exception value
     such as given by *note sys.last_value: 4c0.  The return value is a
     list of strings, each ending in a newline.  The list contains the
     exception’s message, which is normally a single string; however,
     for *note SyntaxError: 18d. exceptions, it contains several lines
     that (when printed) display detailed information about where the
     syntax error occurred.  Following the message, the list contains
     the exception’s *note notes: 2419.

     Since Python 3.10, instead of passing 'value', an exception object
     can be passed as the first argument.  If 'value' is provided, the
     first argument is ignored in order to provide backwards
     compatibility.

     When 'show_group' is ‘True’, and the exception is an instance of
     *note BaseExceptionGroup: 25f, the nested exceptions are included
     as well, recursively, with indentation relative to their nesting
     depth.

     Alterado na versão 3.10: The 'etype' parameter has been renamed to
     'exc' and is now positional-only.

     Alterado na versão 3.11: The returned list now includes any *note
     notes: 2419. attached to the exception.

     Alterado na versão 3.13: 'show_group' parameter was added.

 -- Função: traceback.format_exception (exc, /[, value, tb], limit=None,
          chain=True)

     Format a stack trace and the exception information.  The arguments
     have the same meaning as the corresponding arguments to *note
     print_exception(): 852.  The return value is a list of strings,
     each ending in a newline and some containing internal newlines.
     When these lines are concatenated and printed, exactly the same
     text is printed as does *note print_exception(): 852.

     Alterado na versão 3.5: The 'etype' argument is ignored and
     inferred from the type of 'value'.

     Alterado na versão 3.10: This function’s behavior and signature
     were modified to match *note print_exception(): 852.

 -- Função: traceback.format_exc (limit=None, chain=True)

     This is like ‘print_exc(limit)’ but returns a string instead of
     printing to a file.

 -- Função: traceback.format_tb (tb, limit=None)

     A shorthand for ‘format_list(extract_tb(tb, limit))’.

 -- Função: traceback.format_stack (f=None, limit=None)

     A shorthand for ‘format_list(extract_stack(f, limit))’.

 -- Função: traceback.clear_frames (tb)

     Clears the local variables of all the stack frames in a *note
     traceback: b07. 'tb' by calling the *note clear(): 280. method of
     each *note frame object: 6e0.

     Adicionado na versão 3.4.

 -- Função: traceback.walk_stack (f)

     Walk a stack following *note f.f_back: 78c. from the given frame,
     yielding the frame and line number for each frame.  If 'f' is
     ‘None’, the current stack is used.  This helper is used with *note
     StackSummary.extract(): 4683.

     Adicionado na versão 3.5.

 -- Função: traceback.walk_tb (tb)

     Walk a traceback following *note tb_next: b06. yielding the frame
     and line number for each frame.  This helper is used with *note
     StackSummary.extract(): 4683.

     Adicionado na versão 3.5.


File: python.info,  Node: TracebackException Objects,  Next: StackSummary Objects,  Prev: Funções de nível de módulo<2>,  Up: traceback — Imprime ou recupera um traceback da pilha

5.29.11.2 ‘TracebackException’ Objects
......................................

Adicionado na versão 3.5.

‘TracebackException’ objects are created from actual exceptions to
capture data for later printing.  They offer a more lightweight method
of storing this information by avoiding holding references to *note
traceback: b07. and *note frame: 6e0. objects.  In addition, they expose
more options to configure the output compared to the module-level
functions described above.

 -- Classe: traceback.TracebackException (exc_type, exc_value,
          exc_traceback, *, limit=None, lookup_lines=True,
          capture_locals=False, compact=False, max_group_width=15,
          max_group_depth=10)

     Capture an exception for later rendering.  The meaning of 'limit',
     'lookup_lines' and 'capture_locals' are as for the *note
     StackSummary: eb2. class.

     If 'compact' is true, only data that is required by
     ‘TracebackException’’s *note format(): 61f. method is saved in the
     class attributes.  In particular, the *note __context__: 4685.
     field is calculated only if *note __cause__: 4686. is ‘None’ and
     *note __suppress_context__: 4687. is false.

     Note that when locals are captured, they are also shown in the
     traceback.

     'max_group_width' and 'max_group_depth' control the formatting of
     exception groups (see *note BaseExceptionGroup: 25f.).  The depth
     refers to the nesting level of the group, and the width refers to
     the size of a single exception group’s exceptions array.  The
     formatted output is truncated when either limit is exceeded.

     Alterado na versão 3.10: Adicionado o parâmetro 'compact'.

     Alterado na versão 3.11: Added the 'max_group_width' and
     'max_group_depth' parameters.

      -- Atributo: __cause__

          A ‘TracebackException’ of the original *note __cause__: 130b.

      -- Atributo: __context__

          A ‘TracebackException’ of the original *note __context__:
          130a.

      -- Atributo: exceptions

          If ‘self’ represents an *note ExceptionGroup: 1b6, this field
          holds a list of ‘TracebackException’ instances representing
          the nested exceptions.  Otherwise it is ‘None’.

          Adicionado na versão 3.11.

      -- Atributo: __suppress_context__

          The *note __suppress_context__: 224a. value from the original
          exception.

      -- Atributo: __notes__

          The *note __notes__: 2419. value from the original exception,
          or ‘None’ if the exception does not have any notes.  If it is
          not ‘None’ is it formatted in the traceback after the
          exception string.

          Adicionado na versão 3.11.

      -- Atributo: stack

          A *note StackSummary: eb2. representing the traceback.

      -- Atributo: exc_type

          The class of the original traceback.

          Descontinuado desde a versão 3.13.

      -- Atributo: exc_type_str

          String display of the class of the original exception.

          Adicionado na versão 3.13.

      -- Atributo: filename

          For syntax errors - the file name where the error occurred.

      -- Atributo: lineno

          For syntax errors - the line number where the error occurred.

      -- Atributo: end_lineno

          For syntax errors - the end line number where the error
          occurred.  Can be ‘None’ if not present.

          Adicionado na versão 3.10.

      -- Atributo: text

          For syntax errors - the text where the error occurred.

      -- Atributo: offset

          For syntax errors - the offset into the text where the error
          occurred.

      -- Atributo: end_offset

          For syntax errors - the end offset into the text where the
          error occurred.  Can be ‘None’ if not present.

          Adicionado na versão 3.10.

      -- Atributo: msg

          For syntax errors - the compiler error message.

      -- Método: classmethod from_exception (exc, *, limit=None,
               lookup_lines=True, capture_locals=False)

          Capture an exception for later rendering.  'limit',
          'lookup_lines' and 'capture_locals' are as for the *note
          StackSummary: eb2. class.

          Note that when locals are captured, they are also shown in the
          traceback.

      -- Método: print (*, file=None, chain=True)

          Print to 'file' (default ‘sys.stderr’) the exception
          information returned by *note format(): 61f.

          Adicionado na versão 3.11.

      -- Método: format (*, chain=True)

          Format the exception.

          If 'chain' is not ‘True’, *note __cause__: 4686. and *note
          __context__: 4685. will not be formatted.

          The return value is a generator of strings, each ending in a
          newline and some containing internal newlines.  *note
          print_exception(): 852. is a wrapper around this method which
          just prints the lines to a file.

      -- Método: format_exception_only (*, show_group=False)

          Format the exception part of the traceback.

          The return value is a generator of strings, each ending in a
          newline.

          When 'show_group' is ‘False’, the generator emits the
          exception’s message followed by its notes (if it has any).
          The exception message is normally a single string; however,
          for *note SyntaxError: 18d. exceptions, it consists of several
          lines that (when printed) display detailed information about
          where the syntax error occurred.

          When 'show_group' is ‘True’, and the exception is an instance
          of *note BaseExceptionGroup: 25f, the nested exceptions are
          included as well, recursively, with indentation relative to
          their nesting depth.

          Alterado na versão 3.11: The exception’s *note notes: 2419.
          are now included in the output.

          Alterado na versão 3.13: Added the 'show_group' parameter.


File: python.info,  Node: StackSummary Objects,  Next: FrameSummary Objects,  Prev: TracebackException Objects,  Up: traceback — Imprime ou recupera um traceback da pilha

5.29.11.3 ‘StackSummary’ Objects
................................

Adicionado na versão 3.5.

‘StackSummary’ objects represent a call stack ready for formatting.

 -- Classe: traceback.StackSummary

      -- Método: classmethod extract (frame_gen, *, limit=None,
               lookup_lines=True, capture_locals=False)

          Construct a ‘StackSummary’ object from a frame generator (such
          as is returned by *note walk_stack(): eb0. or *note walk_tb():
          eb1.).

          If 'limit' is supplied, only this many frames are taken from
          'frame_gen'.  If 'lookup_lines' is ‘False’, the returned *note
          FrameSummary: eb3. objects will not have read their lines in
          yet, making the cost of creating the ‘StackSummary’ cheaper
          (which may be valuable if it may not actually get formatted).
          If 'capture_locals' is ‘True’ the local variables in each
          ‘FrameSummary’ are captured as object representations.

          Alterado na versão 3.12: Exceptions raised from *note repr():
          800. on a local variable (when 'capture_locals' is ‘True’) are
          no longer propagated to the caller.

      -- Método: classmethod from_list (a_list)

          Construct a ‘StackSummary’ object from a supplied list of
          *note FrameSummary: eb3. objects or old-style list of tuples.
          Each tuple should be a 4-tuple with 'filename', 'lineno',
          'name', 'line' as the elements.

      -- Método: format ()

          Returns a list of strings ready for printing.  Each string in
          the resulting list corresponds to a single *note frame: 6e0.
          from the stack.  Each string ends in a newline; the strings
          may contain internal newlines as well, for those items with
          source text lines.

          For long sequences of the same frame and line, the first few
          repetitions are shown, followed by a summary line stating the
          exact number of further repetitions.

          Alterado na versão 3.6: Long sequences of repeated frames are
          now abbreviated.

      -- Método: format_frame_summary (frame_summary)

          Returns a string for printing one of the *note frames: 6e0.
          involved in the stack.  This method is called for each *note
          FrameSummary: eb3. object to be printed by *note
          StackSummary.format(): 4696.  If it returns ‘None’, the frame
          is omitted from the output.

          Adicionado na versão 3.11.


File: python.info,  Node: FrameSummary Objects,  Next: Examples of Using the Module-Level Functions,  Prev: StackSummary Objects,  Up: traceback — Imprime ou recupera um traceback da pilha

5.29.11.4 ‘FrameSummary’ Objects
................................

Adicionado na versão 3.5.

A ‘FrameSummary’ object represents a single *note frame: 6e0. in a *note
traceback: b07.

 -- Classe: traceback.FrameSummary (filename, lineno, name, *,
          lookup_line=True, locals=None, line=None, end_lineno=None,
          colno=None, end_colno=None)

     Represents a single *note frame: 6e0. in the *note traceback: b07.
     or stack that is being formatted or printed.  It may optionally
     have a stringified version of the frame’s locals included in it.
     If 'lookup_line' is ‘False’, the source code is not looked up until
     the ‘FrameSummary’ has the *note line: 467d. attribute accessed
     (which also happens when casting it to a *note tuple: 370.).  *note
     line: 467d. may be directly provided, and will prevent line lookups
     happening at all.  'locals' is an optional local variable mapping,
     and if supplied the variable representations are stored in the
     summary for later display.

     ‘FrameSummary’ instances have the following attributes:

      -- Atributo: filename

          The filename of the source code for this frame.  Equivalent to
          accessing *note f.f_code.co_filename: 13b4. on a *note frame
          object: 6e0. 'f'.

      -- Atributo: lineno

          The line number of the source code for this frame.

      -- Atributo: name

          Equivalent to accessing *note f.f_code.co_name: 20c8. on a
          *note frame object: 6e0. 'f'.

      -- Atributo: line

          A string representing the source code for this frame, with
          leading and trailing whitespace stripped.  If the source is
          not available, it is ‘None’.

      -- Atributo: end_lineno

          The last line number of the source code for this frame.  By
          default, it is set to ‘lineno’ and indexation starts from 1.

          Alterado na versão 3.13: The default value changed from ‘None’
          to ‘lineno’.

      -- Atributo: colno

          The column number of the source code for this frame.  By
          default, it is ‘None’ and indexation starts from 0.

      -- Atributo: end_colno

          The last column number of the source code for this frame.  By
          default, it is ‘None’ and indexation starts from 0.


File: python.info,  Node: Examples of Using the Module-Level Functions,  Next: Examples of Using TracebackException,  Prev: FrameSummary Objects,  Up: traceback — Imprime ou recupera um traceback da pilha

5.29.11.5 Examples of Using the Module-Level Functions
......................................................

This simple example implements a basic read-eval-print loop, similar to
(but less useful than) the standard Python interactive interpreter loop.
For a more complete implementation of the interpreter loop, refer to the
*note code: 1a. module.

     import sys, traceback

     def run_user_code(envdir):
         source = input(">>> ")
         try:
             exec(source, envdir)
         except Exception:
             print("Exception in user code:")
             print("-"*60)
             traceback.print_exc(file=sys.stdout)
             print("-"*60)

     envdir = {}
     while True:
         run_user_code(envdir)

The following example demonstrates the different ways to print and
format the exception and traceback:

     import sys, traceback

     def lumberjack():
         bright_side_of_life()

     def bright_side_of_life():
         return tuple()[0]

     try:
         lumberjack()
     except IndexError as exc:
         print("*** print_tb:")
         traceback.print_tb(exc.__traceback__, limit=1, file=sys.stdout)
         print("*** print_exception:")
         traceback.print_exception(exc, limit=2, file=sys.stdout)
         print("*** print_exc:")
         traceback.print_exc(limit=2, file=sys.stdout)
         print("*** format_exc, first and last line:")
         formatted_lines = traceback.format_exc().splitlines()
         print(formatted_lines[0])
         print(formatted_lines[-1])
         print("*** format_exception:")
         print(repr(traceback.format_exception(exc)))
         print("*** extract_tb:")
         print(repr(traceback.extract_tb(exc.__traceback__)))
         print("*** format_tb:")
         print(repr(traceback.format_tb(exc.__traceback__)))
         print("*** tb_lineno:", exc.__traceback__.tb_lineno)

The output for the example would look similar to this:

     *** print_tb:
       File "<doctest...>", line 10, in <module>
         lumberjack()
         ~~~~~~~~~~^^
     *** print_exception:
     Traceback (most recent call last):
       File "<doctest...>", line 10, in <module>
         lumberjack()
         ~~~~~~~~~~^^
       File "<doctest...>", line 4, in lumberjack
         bright_side_of_life()
         ~~~~~~~~~~~~~~~~~~~^^
     IndexError: tuple index out of range
     *** print_exc:
     Traceback (most recent call last):
       File "<doctest...>", line 10, in <module>
         lumberjack()
         ~~~~~~~~~~^^
       File "<doctest...>", line 4, in lumberjack
         bright_side_of_life()
         ~~~~~~~~~~~~~~~~~~~^^
     IndexError: tuple index out of range
     *** format_exc, first and last line:
     Traceback (most recent call last):
     IndexError: tuple index out of range
     *** format_exception:
     ['Traceback (most recent call last):\n',
      '  File "<doctest default[0]>", line 10, in <module>\n    lumberjack()\n    ~~~~~~~~~~^^\n',
      '  File "<doctest default[0]>", line 4, in lumberjack\n    bright_side_of_life()\n    ~~~~~~~~~~~~~~~~~~~^^\n',
      '  File "<doctest default[0]>", line 7, in bright_side_of_life\n    return tuple()[0]\n           ~~~~~~~^^^\n',
      'IndexError: tuple index out of range\n']
     *** extract_tb:
     [<FrameSummary file <doctest...>, line 10 in <module>>,
      <FrameSummary file <doctest...>, line 4 in lumberjack>,
      <FrameSummary file <doctest...>, line 7 in bright_side_of_life>]
     *** format_tb:
     ['  File "<doctest default[0]>", line 10, in <module>\n    lumberjack()\n    ~~~~~~~~~~^^\n',
      '  File "<doctest default[0]>", line 4, in lumberjack\n    bright_side_of_life()\n    ~~~~~~~~~~~~~~~~~~~^^\n',
      '  File "<doctest default[0]>", line 7, in bright_side_of_life\n    return tuple()[0]\n           ~~~~~~~^^^\n']
     *** tb_lineno: 10

The following example shows the different ways to print and format the
stack:

     >>> import traceback
     >>> def another_function():
     ...     lumberstack()
     ...
     >>> def lumberstack():
     ...     traceback.print_stack()
     ...     print(repr(traceback.extract_stack()))
     ...     print(repr(traceback.format_stack()))
     ...
     >>> another_function()
       File "<doctest>", line 10, in <module>
         another_function()
       File "<doctest>", line 3, in another_function
         lumberstack()
       File "<doctest>", line 6, in lumberstack
         traceback.print_stack()
     [('<doctest>', 10, '<module>', 'another_function()'),
      ('<doctest>', 3, 'another_function', 'lumberstack()'),
      ('<doctest>', 7, 'lumberstack', 'print(repr(traceback.extract_stack()))')]
     ['  File "<doctest>", line 10, in <module>\n    another_function()\n',
      '  File "<doctest>", line 3, in another_function\n    lumberstack()\n',
      '  File "<doctest>", line 8, in lumberstack\n    print(repr(traceback.format_stack()))\n']

This last example demonstrates the final few formatting functions:

     >>> import traceback
     >>> traceback.format_list([('spam.py', 3, '<module>', 'spam.eggs()'),
     ...                        ('eggs.py', 42, 'eggs', 'return "bacon"')])
     ['  File "spam.py", line 3, in <module>\n    spam.eggs()\n',
      '  File "eggs.py", line 42, in eggs\n    return "bacon"\n']
     >>> an_error = IndexError('tuple index out of range')
     >>> traceback.format_exception_only(an_error)
     ['IndexError: tuple index out of range\n']


File: python.info,  Node: Examples of Using TracebackException,  Prev: Examples of Using the Module-Level Functions,  Up: traceback — Imprime ou recupera um traceback da pilha

5.29.11.6 Examples of Using ‘TracebackException’
................................................

With the helper class, we have more options:

     >>> import sys
     >>> from traceback import TracebackException
     >>>
     >>> def lumberjack():
     ...     bright_side_of_life()
     ...
     >>> def bright_side_of_life():
     ...     t = "bright", "side", "of", "life"
     ...     return t[5]
     ...
     >>> try:
     ...     lumberjack()
     ... except IndexError as e:
     ...     exc = e
     ...
     >>> try:
     ...     try:
     ...         lumberjack()
     ...     except:
     ...         1/0
     ... except Exception as e:
     ...     chained_exc = e
     ...
     >>> # limit works as with the module-level functions
     >>> TracebackException.from_exception(exc, limit=-2).print()
     Traceback (most recent call last):
       File "<python-input-1>", line 6, in lumberjack
         bright_side_of_life()
         ~~~~~~~~~~~~~~~~~~~^^
       File "<python-input-1>", line 10, in bright_side_of_life
         return t[5]
                ~^^^
     IndexError: tuple index out of range

     >>> # capture_locals adds local variables in frames
     >>> TracebackException.from_exception(exc, limit=-2, capture_locals=True).print()
     Traceback (most recent call last):
       File "<python-input-1>", line 6, in lumberjack
         bright_side_of_life()
         ~~~~~~~~~~~~~~~~~~~^^
       File "<python-input-1>", line 10, in bright_side_of_life
         return t[5]
                ~^^^
         t = ("bright", "side", "of", "life")
     IndexError: tuple index out of range

     >>> # The *chain* kwarg to print() controls whether chained
     >>> # exceptions are displayed
     >>> TracebackException.from_exception(chained_exc).print()
     Traceback (most recent call last):
       File "<python-input-19>", line 4, in <module>
         lumberjack()
         ~~~~~~~~~~^^
       File "<python-input-8>", line 7, in lumberjack
         bright_side_of_life()
         ~~~~~~~~~~~~~~~~~~~^^
       File "<python-input-8>", line 11, in bright_side_of_life
         return t[5]
                ~^^^
     IndexError: tuple index out of range

     During handling of the above exception, another exception occurred:

     Traceback (most recent call last):
       File "<python-input-19>", line 6, in <module>
         1/0
         ~^~
     ZeroDivisionError: division by zero

     >>> TracebackException.from_exception(chained_exc).print(chain=False)
     Traceback (most recent call last):
       File "<python-input-19>", line 6, in <module>
         1/0
         ~^~
     ZeroDivisionError: division by zero


File: python.info,  Node: __future__ — Definições de instruções future,  Next: gc — Interface para o coletor de lixo,  Prev: traceback — Imprime ou recupera um traceback da pilha,  Up: Serviços de Tempo de Execução Python

5.29.12 ‘__future__’ — Definições de instruções future
------------------------------------------------------

'Código-fonte:' Lib/__future__.py(1)

__________________________________________________________________

Instruções do tipo ‘from __future__ import feature’ são chamadas de
*note instruções future: 189.  Esses são casos especiais do compilador
do Python para permitir o uso de novos recursos do Python em módulos que
contêm a instrução future antes da versão em que o recurso se torna
padrão.

Embora o compilador Python dê um significado especial adicional a essas
instruções future, elas ainda são executadas como qualquer outra
instrução de importação.  O módulo *note __future__: 0. existe e é
tratado pelo sistema de importação da mesma forma que qualquer outro
módulo Python.  Isso serve a três propósitos:

   * Para evitar confundir as ferramentas existentes que analisam as
     instruções de importação e esperam encontrar os módulos sendo
     importados.

   * Para documentar quando as mudanças incompatíveis foram introduzidas
     e quando elas serão — ou foram — obrigatórias.  Esta é uma forma de
     documentação executável e pode ser inspecionada programaticamente
     por meio da importação *note __future__: 0. e da análise de seus
     conteúdos.

   * Para garantir que *note instruções future: 189. sejam executadas em
     versões anteriores a Python 2.1, pelo menos, processe exceções de
     tempo de execução (a importação de *note __future__: 0. falhará,
     porque não havia nenhum módulo com esse nome antes de 2.1).

* Menu:

* Conteúdo do módulo: Conteúdo do módulo<9>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/__future__.py


File: python.info,  Node: Conteúdo do módulo<9>,  Up: __future__ — Definições de instruções future

5.29.12.1 Conteúdo do módulo
............................

Nenhuma descrição de característica será excluída de *note __future__:
0.  Desde a sua introdução no Python 2.1, os seguintes recursos
encontraram o caminho para o idioma usando esse mecanismo:

característica                opcional em                   obrigatório em                efeito
                                                                                          
------------------------------------------------------------------------------------------------------------------------
                                                                                          
 -- Dado:                     2.1.0b1                       2.2                           PEP 227(1): 'Statically
          __future__.nested_scopes                                                        Nested Scopes'
                                                                                          
                                                                                          
 -- Dado:                     2.2.0a1                       2.3                           PEP 255(2): 'Simple
          __future__.generators                                                           Generators'
                                                                                          
                                                                                          
 -- Dado:                     2.2.0a2                       3.0                           PEP 238(3): 'Changing the
          __future__.division                                                             Division Operator'
                                                                                          
                                                                                          
 -- Dado:                     2.5.0a1                       3.0                           PEP 328(4): 'Imports:
          __future__.absolute_import                                                      Multi-Line and
                                                                                          Absolute/Relative'
                                                                                          
                                                                                          
 -- Dado:                     2.5.0a1                       2.6                           PEP 343(5): 'The “with”
          __future__.with_statement                                                       Statement'
                                                                                          
                                                                                          
 -- Dado:                     2.6.0a2                       3.0                           PEP 3105(6): 'Make print a
          __future__.print_function                                                       function'
                                                                                          
                                                                                          
 -- Dado:                     2.6.0a2                       3.0                           PEP 3112(7): 'Bytes
          __future__.unicode_literals                                                     literals in Python 3000'
                                                                                          
                                                                                          
 -- Dado:                     3.5.0b1                       3.7                           PEP 479(8): 'StopIteration
          __future__.generator_stop                                                       handling inside generators'
                                                                                          
                                                                                          
 -- Dado:                     3.7.0b1                       Nunca (9)                     PEP 563(10): 'Postponed
          __future__.annotations                                                          evaluation of annotations'
                                                                                          

 -- Classe: __future__._Feature

     Cada instrução em ‘__future__.py’ é da forma:

          FeatureName = _Feature(OptionalRelease, MandatoryRelease,
                                 CompilerFlag)

     Onde, normalmente, 'OptionalRelease' é inferior a
     'MandatoryRelease', e ambos são tuplas de 5 entradas da mesma forma
     que *note sys.version_info: 6a0.:

          (PY_MAJOR_VERSION, # o 2 em 2.1.0a3; um int
           PY_MINOR_VERSION, # o 1; um int
           PY_MICRO_VERSION, # o 0; um int
           PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" ou "final"; uma string
           PY_RELEASE_SERIAL # o 3; um int
          )

 -- Método: _Feature.getOptionalRelease ()

     'OptionalRelease' registra o primeiro lançamento no qual o recurso
     foi aceito.

 -- Método: _Feature.getMandatoryRelease ()

     No caso de um 'MandatoryRelease' que ainda não ocorreu,
     'MandatoryRelease' prevê o lançamento em que o recurso se tornará
     parte da linguagem.

     Senão 'MandatoryRelease' registra quando o recurso se tornou parte
     do idioma; Em versões em ou depois disso, os módulos não precisam
     mais de uma instrução future para usar o recurso em questão, mas
     podem continuar a usar essas importações.

     'MandatoryRelease' também pode ser ‘None’, o que significa que uma
     característica planejada foi descartada ou que isso ainda não está
     decidido.

 -- Atributo: _Feature.compiler_flag

     'CompilerFlag' é o sinalizador (bitfield) que deve ser passado no
     quarto argumento para a função embutida *note compile(): 192. para
     habilitar o recurso no código compilado dinamicamente.  Este
     sinalizador é armazenado no atributo *note _Feature.compiler_flag:
     20d8. em instâncias de *note _Feature: 22fd.

Ver também
..........

*note Instruções future: 189.

     Como o compilador trata as importações de future.

PEP 236(11) - De volta ao __future__

     A proposta original para o mecanismo do __future__.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0227/

   (2) https://peps.python.org/pep-0255/

   (3) https://peps.python.org/pep-0238/

   (4) https://peps.python.org/pep-0328/

   (5) https://peps.python.org/pep-0343/

   (6) https://peps.python.org/pep-3105/

   (7) https://peps.python.org/pep-3112/

   (8) https://peps.python.org/pep-0479/

   (9) ‘from __future__ import annotations’ foi programado anteriormente
para se tornar obrigatório no Python 3.10, mas o Python Steering Council
decidiu duas vezes adiar a mudança (anúncio para o Python 3.10
(https://mail.python.org/archives/list/python-dev@python.org/message/CLVXXPQ2T2LQ5MP2Y53VVQFCXYWQJHKZ/);
anúncio para o Python 3.11
(https://mail.python.org/archives/list/python-dev@python.org/message/VIZEBX5EYMSYIJNDBF6DMUMZOCWHARSO/)).
Nenhuma decisão final foi tomada ainda.  Veja também PEP 563
(https://peps.python.org/pep-0563/) e PEP 649
(https://peps.python.org/pep-0649/).

   (10) https://peps.python.org/pep-0563/

   (11) https://peps.python.org/pep-0236/


File: python.info,  Node: gc — Interface para o coletor de lixo,  Next: inspect — Inspecione objetos vivos,  Prev: __future__ — Definições de instruções future,  Up: Serviços de Tempo de Execução Python

5.29.13 ‘gc’ — Interface para o coletor de lixo
-----------------------------------------------

__________________________________________________________________

Este módulo fornece uma interface para o coletor de lixo opcional.  Ele
permite desabilitar o coletor, ajustar a frequência de coleta e
configurar as opções de depuração.  Ele também fornece acesso a objetos
inacessíveis que o coletor encontra, mas não pode “limpar”.  Como o
coletor complementa a contagem de referência já usada em Python, você
pode desabilitá-lo se tem certeza de que seu programa não cria ciclos de
referência.  A coleta automática pode ser desativada pela chamada
‘gc.disable()’.  Para depurar um programa vazando, chame
‘gc.set_debug(gc.DEBUG_LEAK)’.  Perceba que isto inclui
‘gc.DEBUG_SAVEALL’, fazendo com que os objetos coletados pelo coletor de
lixo sejam salvos para inspeção em gc.garbage.

O módulo *note gc: 60. fornece as seguintes funções:

 -- Função: gc.enable ()

     Habilita a coleta de lixo automática.

 -- Função: gc.disable ()

     Desabilita a coleta de lixo automática.

 -- Função: gc.isenabled ()

     Retorna ‘True’ se a coleta automática estiver habilitada.

 -- Função: gc.collect (generation=2)

     Sem argumentos, execute uma coleta completa.  O argumento opcional
     'generation' pode ser um inteiro especificando qual geração coletar
     (de 0 a 2).  Uma exceção *note ValueError: 202. é levantada se o
     número de geração for inválido.  A soma dos objetos coletados e dos
     objetos incoletáveis é retornada.

     As listas livres mantidas para vários tipos embutidos são limpas
     sempre que uma coleta completa ou a da geração mais alta (2) é
     executada.  Nem todos os itens em algumas listas livres podem ser
     liberados devido à implementação particular, em particular *note
     float: 2f7.

     O efeito de chamar ‘gc.collect()’ enquanto o interpretador já está
     realizando uma coleta é indefinido.

 -- Função: gc.set_debug (flags)

     Define os sinalizadores de depuração da coleta de lixo.  As
     informações de depuração serão gravadas em ‘sys.stderr’.  Veja
     abaixo uma lista de sinalizadores de depuração que podem ser
     combinados usando operações de bit para controlar a depuração.

 -- Função: gc.get_debug ()

     Retorna os sinalizadores de depuração atualmente definidos.

 -- Função: gc.get_objects (generation=None)

     Retorna uma lista de todos os objetos rastreados pelo coletor,
     excluindo a lista retornada.  Se 'generation' não for ‘None’,
     retorna apenas os objetos rastreados pelo coletor que estão nessa
     geração.

     Alterado na versão 3.8: Novo parâmetro 'generation'.

     Levanta um *note evento de auditoria: 19fa. ‘gc.get_objects’ com o
     argumento ‘generation’.

 -- Função: gc.get_stats ()

     Retorna uma lista de três dicionários por geração contendo
     estatísticas de coleta desde o início do interpretador.  O número
     de chaves pode mudar no futuro, mas atualmente cada dicionário
     conterá os seguintes itens:

        * ‘collections’ é o número de vezes que esta geração foi
          coletada;

        * ‘collected’ é o número total de objetos coletados nesta
          geração;

        * ‘uncollectable’ é o número total de objetos que foram
          considerados incobráveis (e, portanto, movidos para a lista
          *note garbage: 1201.) dentro desta geração.

     Adicionado na versão 3.4.

 -- Função: gc.set_threshold (threshold0[, threshold1[, threshold2]])

     Define os limites de coleta de lixo (a frequência de coleta).
     Definir 'threshold0' como zero desativa a coleta.

     O GC classifica os objetos em três gerações, dependendo de quantas
     varreduras de coleta eles sobreviveram.  Novos objetos são
     colocados na geração mais nova (geração ‘0’).  Se um objeto
     sobreviver a uma coleção, ele será movido para a próxima geração
     mais antiga.  Como a geração ‘2’ é a geração mais antiga, os
     objetos dessa geração permanecem lá após uma coleta.  Para decidir
     quando executar, o coletor acompanha o número de alocações e
     desalocações de objetos desde a última coleta.  Quando o número de
     alocações menos o número de desalocações exceder 'threshold0', a
     coleta será iniciada.  Inicialmente, apenas a geração ‘0’ é
     examinada.  Se a geração ‘0’ foi examinada mais de 'threshold1'
     vezes desde que a geração ‘1’ foi examinada, então a geração ‘1’
     também é examinada.  Com a terceira geração, as coisas são um pouco
     mais complicadas, veja Coletando a geração mais antiga(1) para mais
     informações.

 -- Função: gc.get_count ()

     Retorna as contagens da coleta atual como uma tupla de ‘(count0,
     count1, count2)’.

 -- Função: gc.get_threshold ()

     Retorna os limites da coleta atual como uma tupla de ‘(threshold0,
     threshold1, threshold2)’.

 -- Função: gc.get_referrers (*objs)

     Retorna a lista de objetos que se referem diretamente a qualquer um
     dos objs.  Esta função localizará apenas os contêineres que
     suportam coleta de lixo; tipos de extensão que se referem a outros
     objetos, mas não suportam coleta de lixo, não serão encontrados.

     Observe que os objetos que já foram desreferenciados, mas que vivem
     em ciclos e ainda não foram coletados pelo coletor de lixo podem
     ser listados entre os referenciadores resultantes.  Para obter
     apenas os objetos atualmente ativos, chame *note collect(): a43.
     antes de chamar *note get_referrers(): 807.

          Aviso: Deve-se tomar cuidado ao usar objetos retornados por
          *note get_referrers(): 807. porque alguns deles ainda podem
          estar em construção e, portanto, em um estado temporariamente
          inválido.  Evite usar *note get_referrers(): 807. para
          qualquer finalidade que não seja depuração.

     Levanta um *note evento de auditoria: 19fa. ‘gc.get_referrers’ com
     o argumento ‘objs’.

 -- Função: gc.get_referents (*objs)

     Retorna uma lista de objetos diretamente referenciados por qualquer
     um dos argumentos.  Os referentes retornados são aqueles objetos
     visitados pelos métodos a nível do C *note tp_traverse: 77e. dos
     argumentos (se houver), e podem não ser todos os objetos
     diretamente alcançáveis.  Os métodos *note tp_traverse: 77e. são
     suportados apenas por objetos que suportam coleta de lixo e são
     necessários apenas para visitar objetos que possam estar envolvidos
     em um ciclo.  Assim, por exemplo, se um número inteiro pode ser
     acessado diretamente de um argumento, esse objeto inteiro pode ou
     não aparecer na lista de resultados.

     Levanta um *note evento de auditoria: 19fa. ‘gc.get_referents’ com
     o argumento ‘objs’.

 -- Função: gc.is_tracked (obj)

     Retorna ‘True’ se o objeto está atualmente rastreado pelo coletor
     de lixo, ‘False’ caso contrário.  Como regra geral, as instâncias
     de tipos atômicos não são rastreadas e as instâncias de tipos não
     atômicos (contêineres, objetos definidos pelo usuário…) são.  No
     entanto, algumas otimizações específicas do tipo podem estar
     presentes para suprimir a pegada do coletor de lixo de instâncias
     simples (por exemplo, dicts contendo apenas chaves e valores
     atômicos):

          >>> gc.is_tracked(0)
          False
          >>> gc.is_tracked("a")
          False
          >>> gc.is_tracked([])
          True
          >>> gc.is_tracked({})
          False
          >>> gc.is_tracked({"a": 1})
          False
          >>> gc.is_tracked({"a": []})
          True

     Adicionado na versão 3.1.

 -- Função: gc.is_finalized (obj)

     Retorna ‘True’ se o objeto fornecido foi finalizado pelo coletor de
     lixo, ‘False’ caso contrário.

          >>> x = None
          >>> class Lazarus:
          ...     def __del__(self):
          ...         global x
          ...         x = self
          ...
          >>> lazarus = Lazarus()
          >>> gc.is_finalized(lazarus)
          False
          >>> del lazarus
          >>> gc.is_finalized(x)
          True

     Adicionado na versão 3.9.

 -- Função: gc.freeze ()

     Congela todos os objetos rastreados pelo coletor de lixo; move-os
     para uma geração permanente e ignora-os em todas as coleções
     futuras.

     Se um processo for ‘fork()’ sem ‘exec()’, evitar cópia em gravação
     (copy-on-write) desnecessário em processos filho maximizará o
     compartilhamento de memória e reduzirá o uso geral de memória.
     Isso requer evitar a criação de “buracos” liberados nas páginas de
     memória no processo pai e garantir que as coleções GC nos processos
     filho não toquem no contador ‘gc_refs’ de objetos de vida longa
     originados no processo pai.  Para realizar ambos, chame
     ‘gc.disable()’ no início do processo pai, ‘gc.freeze()’ logo antes
     de ‘fork()’ e ‘gc.enable()’ no início em processos filhos.

     Adicionado na versão 3.7.

 -- Função: gc.unfreeze ()

     Descongela os objetos na geração permanente, coloca-os de volta na
     geração mais antiga.

     Adicionado na versão 3.7.

 -- Função: gc.get_freeze_count ()

     Retorna o número de objetos na geração permanente.

     Adicionado na versão 3.7.

As seguintes variáveis são fornecidas para acesso somente leitura (você
pode alterar os valores, mas não deve revinculá-los):

 -- Dado: gc.garbage

     Uma lista de objetos que o coletor considerou inacessíveis, mas não
     puderam ser liberados (objetos não coletáveis).  A partir do Python
     3.4, esta lista deve estar vazia na maioria das vezes, exceto ao
     usar instâncias de tipos de extensão C com um slot ‘tp_del’
     não-‘NULL’.

     Se *note DEBUG_SAVEALL: 46b9. for definido, todos os objetos
     inacessíveis serão adicionados a esta lista ao invés de liberados.

     Alterado na versão 3.2: Se esta lista não estiver vazia no *note
     desligamento do interpretador: 14e, um *note ResourceWarning: 244.
     é emitido, que é silencioso por padrão.  Se *note
     DEBUG_UNCOLLECTABLE: 1202. for definido, além disso, todos os
     objetos não coletáveis serão impressos.

     Alterado na versão 3.4: Seguindo a PEP 442(2), objetos com um
     método *note __del__(): 1033. não vão mais para *note gc.garbage:
     1201.

 -- Dado: gc.callbacks

     Uma lista de retornos de chamada que serão invocados pelo coletor
     de lixo antes e depois da coleta.  As funções de retorno serão
     chamadas com dois argumentos, 'phase' e 'info'.

     'phase' pode ser um dos dois valores:

          “start”: A coleta de lixo está prestes a começar.

          “stop”: A coleta de lixo terminou.

     'info' é um ditado que fornece mais informações para a função de
     retorno.  As seguintes chaves estão atualmente definidas:

          “generation”: A geração mais antiga sendo coletada.

          “collected”: Quando 'phase' é “stop”, o número de objetos
          coletados com sucesso.

          “uncollectable”: Quando 'phase' é “stop”, o número de objetos
          que não puderam ser coletados e foram colocados em *note
          garbage: 1201.

     As aplicações podem adicionar suas próprias funções de retorno a
     essa lista.  Os principais casos de uso são:

          Reunir estatísticas sobre coleta de lixo, como com que
          frequência várias gerações são coletadas e quanto tempo leva a
          coleta.

          Permitindo que os aplicativos identifiquem e limpem seus
          próprios tipos não colecionáveis quando eles aparecem em *note
          garbage: 1201.

     Adicionado na versão 3.3.

As seguintes constantes são fornecidas para uso com *note set_debug():
46b4.:

 -- Dado: gc.DEBUG_STATS

     Imprimir estatísticas durante a coleta.  Esta informação pode ser
     útil ao sintonizar a frequência de coleta.

 -- Dado: gc.DEBUG_COLLECTABLE

     Imprimir informações sobre objetos colecionáveis encontrados.

 -- Dado: gc.DEBUG_UNCOLLECTABLE

     Imprime informações de objetos não colecionáveis encontrados
     (objetos que não são alcançáveis, mas não podem ser liberados pelo
     coletor).  Esses objetos serão adicionados à lista ‘garbage’.

     Alterado na versão 3.2: Imprime também o conteúdo da lista *note
     garbage: 1201. em *note desligamento do interpretador: 14e, se não
     estiver vazia.

 -- Dado: gc.DEBUG_SAVEALL

     Quando definido, todos os objetos inacessíveis encontrados serão
     anexados ao 'lixo' em vez de serem liberados.  Isso pode ser útil
     para depurar um programa com vazamento.

 -- Dado: gc.DEBUG_LEAK

     Os sinalizadores de depuração necessários para o coletor imprimir
     informações sobre um programa com vazamento (igual a
     ‘DEBUG_COLLECTABLE | DEBUG_UNCOLLECTABLE | DEBUG_SAVEALL’).

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/blob/ff0ef0a54bef26fc507fbf9b7a6009eb7d3f17f5/InternalDocs/garbage_collector.md#collecting-the-oldest-generation

   (2) https://peps.python.org/pep-0442/


File: python.info,  Node: inspect — Inspecione objetos vivos,  Next: site — Gancho de configuração específico do site,  Prev: gc — Interface para o coletor de lixo,  Up: Serviços de Tempo de Execução Python

5.29.14 ‘inspect’ — Inspecione objetos vivos
--------------------------------------------

'Código-fonte:' Lib/inspect.py(1)

__________________________________________________________________

O módulo *note inspect: 7e. fornece diversas funções úteis para ajudar a
obter informações sobre objetos ativos, como módulos, classes, métodos,
funções, tracebacks, objetos quadro e objetos código.  Por exemplo, ele
pode ajudar você a examinar o conteúdo de uma classe, recuperar o
código-fonte de um método, extrair e formatar a lista de argumentos de
uma função ou obter todas as informações necessárias para exibir um
traceback detalhado.

Há quatro tipos principais de serviços fornecidos por este módulo:
verificação de tipos, obtenção de código-fonte, inspeção de classes e
funções e exame da pilha do interpretador.

* Menu:

* Tipos e membros::
* Retrieving source code::
* Introspecting callables with the Signature object::
* Classes e funções: Classes e funções<2>.
* A pilha to interpretador::
* Fetching attributes statically::
* Current State of Generators, Coroutines, and Asynchronous Generators: Current State of Generators Coroutines and Asynchronous Generators.
* Code Objects Bit Flags::
* Buffer flags::
* Interface de linha de comando: Interface de linha de comando<13>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/inspect.py


File: python.info,  Node: Tipos e membros,  Next: Retrieving source code,  Up: inspect — Inspecione objetos vivos

5.29.14.1 Tipos e membros
.........................

A função *note getmembers(): 197a. recupera os membros de um objeto,
como uma classe ou módulo.  As funções cujos nomes começam com “is” são
fornecidas principalmente como opções convenientes para o segundo
argumento de *note getmembers(): 197a.  Elas também ajudam a determinar
quando você pode esperar encontrar os seguintes atributos especiais
(consulte *note Atributos relacionados à importação em objetos de
módulo: 20a4. para atributos de módulo):

Tipo                  Atributo                Descrição
                                              
------------------------------------------------------------------------------
                                              
classe                __doc__                 string de documentação
                                              
                                              
                      __name__                nome com o qual esta classe
                                              foi definida
                                              
                                              
                      __qualname__            nome qualificado
                                              
                                              
                      __module__              nome do módulo no qual esta
                                              classe foi definida
                                              
                                              
                      __type_params__         Uma tupla contendo os
                                              *note parâmetros de tipo: 2b3.
                                              de uma classe genérica
                                              
                                              
método                __doc__                 string de documentação
                                              
                                              
                      __name__                nome com o qual este método
                                              foi definido
                                              
                                              
                      __qualname__            nome qualificado
                                              
                                              
                      __func__                objeto função contendo
                                              implementação de método
                                              
                                              
                      __self__                instância para o qual este
                                              método está vinculado, ou
                                              ‘None’.
                                              
                                              
                      __module__              nome do módulo no qual este
                                              método foi definido
                                              
                                              
função                __doc__                 string de documentação
                                              
                                              
                      __name__                nome com o qual esta função
                                              foi definida
                                              
                                              
                      __qualname__            nome qualificado
                                              
                                              
                      __code__                objeto código contendo
                                              *note bytecode: 187. da
                                              função compilada
                                              
                                              
                      __defaults__            tupla de quaisquer valores
                                              padrão para parâmetros
                                              posicionais ou de parâmetros
                                              nomeados
                                              
                                              
                      __kwdefaults__          mapeamento de quaisquer
                                              valores padrão para
                                              parâmetros somente-nomeados
                                              
                                              
                      __globals__             espaço de nomes global no
                                              qual esta função foi definida
                                              
                                              
                      __builtins__            espaço de nomes de métodos e
                                              funções embutidas
                                              
                                              
                      __annotations__         mapeamento de nomes de
                                              parâmetros para anotações; a
                                              chave ‘"return"’ é reservada
                                              para anotações de retorno.
                                              
                                              
                      __type_params__         Uma tupla contendo os
                                              *note parâmetros de tipo: 2b3.
                                              de uma função genérica
                                              
                                              
                      __module__              nome do módulo no qual esta
                                              função foi definida
                                              
                                              
traceback             tb_frame                objeto quadro neste nível
                                              
                                              
                      tb_lasti                índice da última instrução
                                              tentada no bytecode
                                              
                                              
                      tb_lineno               número da linha atual no
                                              código-fonte do Python
                                              
                                              
                      tb_next                 próximo objeto de traceback
                                              interno (chamado por este
                                              nível)
                                              
                                              
quadro                f_back                  próximo objeto de quadro
                                              externo (chamador deste
                                              quadro)
                                              
                                              
                      f_builtins              espaço de nomes de métodos e
                                              funçõess embutidas visto por
                                              este quadro
                                              
                                              
                      f_code                  objeto código sendo executado
                                              neste quadro
                                              
                                              
                      f_globals               espaço de nomes global visto
                                              por este quadro
                                              
                                              
                      f_lasti                 índice da última instrução
                                              tentada no bytecode
                                              
                                              
                      f_lineno                número da linha atual no
                                              código-fonte do Python
                                              
                                              
                      f_locals                espaço de nomes local visto
                                              por este quadro
                                              
                                              
                      f_trace                 função de rastreamento para
                                              este quadro, ou ‘None’
                                              
                                              
código                co_argcount             número de argumentos (não
                                              incluindo argumentos
                                              somente-nomeados, args * ou
                                              **)
                                              
                                              
                      co_code                 string de bytecode compilado
                                              bruto
                                              
                                              
                      co_cellvars             tuple of names of cell
                                              variables (referenced by
                                              containing scopes)
                                              
                                              
                      co_consts               tuple of constants used in
                                              the bytecode
                                              
                                              
                      co_filename             name of file in which this
                                              code object was created
                                              
                                              
                      co_firstlineno          number of first line in
                                              Python source code
                                              
                                              
                      co_flags                bitmap of ‘CO_*’ flags, read
                                              more *note here: 20d7.
                                              
                                              
                      co_lnotab               encoded mapping of line
                                              numbers to bytecode indices
                                              
                                              
                      co_freevars             tuple of names of free
                                              variables (referenced via a
                                              function’s closure)
                                              
                                              
                      co_posonlyargcount      number of positional only
                                              arguments
                                              
                                              
                      co_kwonlyargcount       number of keyword only
                                              arguments (not including **
                                              arg)
                                              
                                              
                      co_name                 name with which this code
                                              object was defined
                                              
                                              
                      co_qualname             fully qualified name with
                                              which this code object was
                                              defined
                                              
                                              
                      co_names                tuple of names other than
                                              arguments and function locals
                                              
                                              
                      co_nlocals              number of local variables
                                              
                                              
                      co_stacksize            virtual machine stack space
                                              required
                                              
                                              
                      co_varnames             tuple of names of arguments
                                              and local variables
                                              
                                              
gerador               __name__                nome
                                              
                                              
                      __qualname__            nome qualificado
                                              
                                              
                      gi_frame                quadro
                                              
                                              
                      gi_running              is the generator running?
                                              
                                              
                      gi_suspended            is the generator suspended?
                                              
                                              
                      gi_code                 código
                                              
                                              
                      gi_yieldfrom            object being iterated by
                                              ‘yield from’, or ‘None’
                                              
                                              
async generator       __name__                nome
                                              
                                              
                      __qualname__            nome qualificado
                                              
                                              
                      ag_await                object being awaited on, or
                                              ‘None’
                                              
                                              
                      ag_frame                quadro
                                              
                                              
                      ag_running              is the generator running?
                                              
                                              
                      ag_suspended            is the generator suspended?
                                              
                                              
                      ag_code                 código
                                              
                                              
corrotina             __name__                nome
                                              
                                              
                      __qualname__            nome qualificado
                                              
                                              
                      cr_await                object being awaited on, or
                                              ‘None’
                                              
                                              
                      cr_frame                quadro
                                              
                                              
                      cr_running              is the coroutine running?
                                              
                                              
                      cr_suspended            is the coroutine suspended?
                                              
                                              
                      cr_code                 código
                                              
                                              
                      cr_origin               where coroutine was created,
                                              or ‘None’.  See
                                              *note sys.set_coroutine_origin_tracking_depth(): ba4.
                                              
                                              
builtin               __doc__                 string de documentação
                                              
                                              
                      __name__                original name of this
                                              function or method
                                              
                                              
                      __qualname__            nome qualificado
                                              
                                              
                      __self__                instance to which a method is
                                              bound, or ‘None’
                                              

Alterado na versão 3.5: Add ‘__qualname__’ and ‘gi_yieldfrom’ attributes
to generators.

The ‘__name__’ attribute of generators is now set from the function
name, instead of the code name, and it can now be modified.

Alterado na versão 3.7: Add ‘cr_origin’ attribute to coroutines.

Alterado na versão 3.10: Add ‘__builtins__’ attribute to functions.

Alterado na versão 3.11: Add ‘gi_suspended’ attribute to generators.

Alterado na versão 3.11: Add ‘cr_suspended’ attribute to coroutines.

Alterado na versão 3.12: Add ‘ag_suspended’ attribute to async
generators.

 -- Função: inspect.getmembers (object[, predicate])

     Return all the members of an object in a list of ‘(name, value)’
     pairs sorted by name.  If the optional 'predicate' argument—which
     will be called with the ‘value’ object of each member—is supplied,
     only members for which the predicate returns a true value are
     included.

          Nota: *note getmembers(): 197a. will only return class
          attributes defined in the metaclass when the argument is a
          class and those attributes have been listed in the metaclass’
          custom *note __dir__(): 15fe.

 -- Função: inspect.getmembers_static (object[, predicate])

     Return all the members of an object in a list of ‘(name, value)’
     pairs sorted by name without triggering dynamic lookup via the
     descriptor protocol, __getattr__ or __getattribute__.  Optionally,
     only return members that satisfy a given predicate.

          Nota: *note getmembers_static(): 649. may not be able to
          retrieve all members that getmembers can fetch (like
          dynamically created attributes) and may find members that
          getmembers can’t (like descriptors that raise AttributeError).
          It can also return descriptor objects instead of instance
          members in some cases.

     Adicionado na versão 3.11.

 -- Função: inspect.getmodulename (path)

     Return the name of the module named by the file 'path', without
     including the names of enclosing packages.  The file extension is
     checked against all of the entries in *note
     importlib.machinery.all_suffixes(): 46c1.  If it matches, the final
     path component is returned with the extension removed.  Otherwise,
     ‘None’ is returned.

     Note that this function 'only' returns a meaningful name for actual
     Python modules - paths that potentially refer to Python packages
     will still return ‘None’.

     Alterado na versão 3.3: The function is based directly on *note
     importlib: 77.

 -- Função: inspect.ismodule (object)

     Return ‘True’ if the object is a module.

 -- Função: inspect.isclass (object)

     Return ‘True’ if the object is a class, whether built-in or created
     in Python code.

 -- Função: inspect.ismethod (object)

     Return ‘True’ if the object is a bound method written in Python.

 -- Função: inspect.isfunction (object)

     Return ‘True’ if the object is a Python function, which includes
     functions created by a *note lambda: 28ec. expression.

 -- Função: inspect.isgeneratorfunction (object)

     Return ‘True’ if the object is a Python generator function.

     Alterado na versão 3.8: Functions wrapped in *note
     functools.partial(): 414. now return ‘True’ if the wrapped function
     is a Python generator function.

     Alterado na versão 3.13: Functions wrapped in *note
     functools.partialmethod(): a85. now return ‘True’ if the wrapped
     function is a Python generator function.

 -- Função: inspect.isgenerator (object)

     Return ‘True’ if the object is a generator.

 -- Função: inspect.iscoroutinefunction (object)

     Return ‘True’ if the object is a *note coroutine function: d9b. (a
     function defined with an *note async def: 5d1. syntax), a *note
     functools.partial(): 414. wrapping a *note coroutine function: d9b,
     or a sync function marked with *note markcoroutinefunction(): 490.

     Adicionado na versão 3.5.

     Alterado na versão 3.8: Functions wrapped in *note
     functools.partial(): 414. now return ‘True’ if the wrapped function
     is a *note coroutine function: d9b.

     Alterado na versão 3.12: Sync functions marked with *note
     markcoroutinefunction(): 490. now return ‘True’.

     Alterado na versão 3.13: Functions wrapped in *note
     functools.partialmethod(): a85. now return ‘True’ if the wrapped
     function is a *note coroutine function: d9b.

 -- Função: inspect.markcoroutinefunction (func)

     Decorator to mark a callable as a *note coroutine function: d9b. if
     it would not otherwise be detected by *note iscoroutinefunction():
     2e4.

     This may be of use for sync functions that return a *note
     coroutine: 491, if the function is passed to an API that requires
     *note iscoroutinefunction(): 2e4.

     When possible, using an *note async def: 5d1. function is
     preferred.  Also acceptable is calling the function and testing the
     return with *note iscoroutine(): e42.

     Adicionado na versão 3.12.

 -- Função: inspect.iscoroutine (object)

     Return ‘True’ if the object is a *note coroutine: 491. created by
     an *note async def: 5d1. function.

     Adicionado na versão 3.5.

 -- Função: inspect.isawaitable (object)

     Return ‘True’ if the object can be used in *note await: 1b9.
     expression.

     Can also be used to distinguish generator-based coroutines from
     regular generators:

          import types

          def gen():
              yield
          @types.coroutine
          def gen_coro():
              yield

          assert not isawaitable(gen())
          assert isawaitable(gen_coro())

     Adicionado na versão 3.5.

 -- Função: inspect.isasyncgenfunction (object)

     Return ‘True’ if the object is an *note asynchronous generator:
     21cf. function, for example:

          >>> async def agen():
          ...     yield 1
          ...
          >>> inspect.isasyncgenfunction(agen)
          True

     Adicionado na versão 3.6.

     Alterado na versão 3.8: Functions wrapped in *note
     functools.partial(): 414. now return ‘True’ if the wrapped function
     is an *note asynchronous generator: 21cf. function.

     Alterado na versão 3.13: Functions wrapped in *note
     functools.partialmethod(): a85. now return ‘True’ if the wrapped
     function is a *note asynchronous generator: 21cf. function.

 -- Função: inspect.isasyncgen (object)

     Return ‘True’ if the object is an *note asynchronous generator
     iterator: 45bd. created by an *note asynchronous generator: 21cf.
     function.

     Adicionado na versão 3.6.

 -- Função: inspect.istraceback (object)

     Return ‘True’ if the object is a traceback.

 -- Função: inspect.isframe (object)

     Return ‘True’ if the object is a frame.

 -- Função: inspect.iscode (object)

     Return ‘True’ if the object is a code.

 -- Função: inspect.isbuiltin (object)

     Return ‘True’ if the object is a built-in function or a bound
     built-in method.

 -- Função: inspect.ismethodwrapper (object)

     Return ‘True’ if the type of object is a *note MethodWrapperType:
     64b.

     These are instances of *note MethodWrapperType: 64b, such as *note
     __str__(): 61d, *note __eq__(): b0d. and *note __repr__(): 61c.

     Adicionado na versão 3.11.

 -- Função: inspect.isroutine (object)

     Return ‘True’ if the object is a user-defined or built-in function
     or method.

 -- Função: inspect.isabstract (object)

     Return ‘True’ if the object is an abstract base class.

 -- Função: inspect.ismethoddescriptor (object)

     Return ‘True’ if the object is a method descriptor, but not if
     *note ismethod(): 46c4, *note isclass(): 46c3, *note isfunction():
     46c5. or *note isbuiltin(): 46cb. are true.

     This, for example, is true of ‘int.__add__’.  An object passing
     this test has a *note __get__(): 1530. method, but not a *note
     __set__(): 20f7. method or a *note __delete__(): 16f5. method.
     Beyond that, the set of attributes varies.  A *note __name__: 109f.
     attribute is usually sensible, and *note __doc__: 92e. often is.

     Methods implemented via descriptors that also pass one of the other
     tests return ‘False’ from the *note ismethoddescriptor(): 16d5.
     test, simply because the other tests promise more – you can, e.g.,
     count on having the *note __func__: 1340. attribute (etc) when an
     object passes *note ismethod(): 46c4.

     Alterado na versão 3.13: This function no longer incorrectly
     reports objects with *note __get__(): 1530. and *note __delete__():
     16f5, but not *note __set__(): 20f7, as being method descriptors
     (such objects are data descriptors, not method descriptors).

 -- Função: inspect.isdatadescriptor (object)

     Return ‘True’ if the object is a data descriptor.

     Data descriptors have a *note __set__: 20f7. or a *note __delete__:
     16f5. method.  Examples are properties (defined in Python),
     getsets, and members.  The latter two are defined in C and there
     are more specific tests available for those types, which is robust
     across Python implementations.  Typically, data descriptors will
     also have *note __name__: 109f. and ‘__doc__’ attributes
     (properties, getsets, and members have both of these attributes),
     but this is not guaranteed.

 -- Função: inspect.isgetsetdescriptor (object)

     Return ‘True’ if the object is a getset descriptor.

     'Detalhes da implementação do CPython:' getsets are attributes
     defined in extension modules via *note PyGetSetDef: bd1.
     structures.  For Python implementations without such types, this
     method will always return ‘False’.

 -- Função: inspect.ismemberdescriptor (object)

     Return ‘True’ if the object is a member descriptor.

     'Detalhes da implementação do CPython:' Member descriptors are
     attributes defined in extension modules via *note PyMemberDef: 54f.
     structures.  For Python implementations without such types, this
     method will always return ‘False’.


File: python.info,  Node: Retrieving source code,  Next: Introspecting callables with the Signature object,  Prev: Tipos e membros,  Up: inspect — Inspecione objetos vivos

5.29.14.2 Retrieving source code
................................

 -- Função: inspect.getdoc (object)

     Get the documentation string for an object, cleaned up with *note
     cleandoc(): 17a8.  If the documentation string for an object is not
     provided and the object is a class, a method, a property or a
     descriptor, retrieve the documentation string from the inheritance
     hierarchy.  Return ‘None’ if the documentation string is invalid or
     missing.

     Alterado na versão 3.5: Strings de documentação agora são herdadas,
     se não forem sobrescritas.

 -- Função: inspect.getcomments (object)

     Return in a single string any lines of comments immediately
     preceding the object’s source code (for a class, function, or
     method), or at the top of the Python source file (if the object is
     a module).  If the object’s source code is unavailable, return
     ‘None’.  This could happen if the object has been defined in C or
     the interactive shell.

 -- Função: inspect.getfile (object)

     Retorna o nome do arquivo (texto ou binário) no qual um objeto foi
     definido.  Isso falhará com um *note TypeError: 2c3. se o objeto
     for um módulo, classe ou função embutidos.

 -- Função: inspect.getmodule (object)

     Try to guess which module an object was defined in.  Return ‘None’
     if the module cannot be determined.

 -- Função: inspect.getsourcefile (object)

     Return the name of the Python source file in which an object was
     defined or ‘None’ if no way can be identified to get the source.
     This will fail with a *note TypeError: 2c3. if the object is a
     built-in module, class, or function.

 -- Função: inspect.getsourcelines (object)

     Return a list of source lines and starting line number for an
     object.  The argument may be a module, class, method, function,
     traceback, frame, or code object.  The source code is returned as a
     list of the lines corresponding to the object and the line number
     indicates where in the original source file the first line of code
     was found.  An *note OSError: 417. is raised if the source code
     cannot be retrieved.  A *note TypeError: 2c3. is raised if the
     object is a built-in module, class, or function.

     Alterado na versão 3.3: *note OSError: 417. is raised instead of
     *note IOError: 108b, now an alias of the former.

 -- Função: inspect.getsource (object)

     Return the text of the source code for an object.  The argument may
     be a module, class, method, function, traceback, frame, or code
     object.  The source code is returned as a single string.  An *note
     OSError: 417. is raised if the source code cannot be retrieved.  A
     *note TypeError: 2c3. is raised if the object is a built-in module,
     class, or function.

     Alterado na versão 3.3: *note OSError: 417. is raised instead of
     *note IOError: 108b, now an alias of the former.

 -- Função: inspect.cleandoc (doc)

     Clean up indentation from docstrings that are indented to line up
     with blocks of code.

     All leading whitespace is removed from the first line.  Any leading
     whitespace that can be uniformly removed from the second line
     onwards is removed.  Empty lines at the beginning and end are
     subsequently removed.  Also, all tabs are expanded to spaces.


File: python.info,  Node: Introspecting callables with the Signature object,  Next: Classes e funções<2>,  Prev: Retrieving source code,  Up: inspect — Inspecione objetos vivos

5.29.14.3 Introspecting callables with the Signature object
...........................................................

Adicionado na versão 3.3.

The *note Signature: 1cf. object represents the call signature of a
callable object and its return annotation.  To retrieve a ‘Signature’
object, use the ‘signature()’ function.

 -- Função: inspect.signature (callable, *, follow_wrapped=True,
          globals=None, locals=None, eval_str=False)

     Return a *note Signature: 1cf. object for the given 'callable':

          >>> from inspect import signature
          >>> def foo(a, *, b:int, **kwargs):
          ...     pass

          >>> sig = signature(foo)

          >>> str(sig)
          '(a, *, b: int, **kwargs)'

          >>> str(sig.parameters['b'])
          'b: int'

          >>> sig.parameters['b'].annotation
          <class 'int'>

     Accepts a wide range of Python callables, from plain functions and
     classes to *note functools.partial(): 414. objects.

     For objects defined in modules using stringized annotations (‘from
     __future__ import annotations’), *note signature(): 738. will
     attempt to automatically un-stringize the annotations using *note
     get_annotations(): 816.  The 'globals', 'locals', and 'eval_str'
     parameters are passed into *note get_annotations(): 816. when
     resolving the annotations; see the documentation for *note
     get_annotations(): 816. for instructions on how to use these
     parameters.

     Raises *note ValueError: 202. if no signature can be provided, and
     *note TypeError: 2c3. if that type of object is not supported.
     Also, if the annotations are stringized, and 'eval_str' is not
     false, the ‘eval()’ call(s) to un-stringize the annotations in
     *note get_annotations(): 816. could potentially raise any kind of
     exception.

     A slash(/) in the signature of a function denotes that the
     parameters prior to it are positional-only.  For more info, see
     *note the FAQ entry on positional-only parameters: 230b.

     Alterado na versão 3.5: The 'follow_wrapped' parameter was added.
     Pass ‘False’ to get a signature of 'callable' specifically
     (‘callable.__wrapped__’ will not be used to unwrap decorated
     callables.)

     Alterado na versão 3.10: The 'globals', 'locals', and 'eval_str'
     parameters were added.

          Nota: Some callables may not be introspectable in certain
          implementations of Python.  For example, in CPython, some
          built-in functions defined in C provide no metadata about
          their arguments.

     'Detalhes da implementação do CPython:' If the passed object has a
     ‘__signature__’ attribute, we may use it to create the signature.
     The exact semantics are an implementation detail and are subject to
     unannounced changes.  Consult the source code for current
     semantics.

 -- Classe: inspect.Signature (parameters=None, *,
          return_annotation=Signature.empty)

     A ‘Signature’ object represents the call signature of a function
     and its return annotation.  For each parameter accepted by the
     function it stores a *note Parameter: 1d0. object in its *note
     parameters: 46d4. collection.

     The optional 'parameters' argument is a sequence of *note
     Parameter: 1d0. objects, which is validated to check that there are
     no parameters with duplicate names, and that the parameters are in
     the right order, i.e.  positional-only first, then
     positional-or-keyword, and that parameters with defaults follow
     parameters without defaults.

     The optional 'return_annotation' argument can be an arbitrary
     Python object.  It represents the “return” annotation of the
     callable.

     ‘Signature’ objects are 'immutable'.  Use *note
     Signature.replace(): 46d5. or *note copy.replace(): 151. to make a
     modified copy.

     Alterado na versão 3.5: ‘Signature’ objects are now picklable and
     *note hashable: 610.

      -- Atributo: empty

          A special class-level marker to specify absence of a return
          annotation.

      -- Atributo: parameters

          An ordered mapping of parameters’ names to the corresponding
          *note Parameter: 1d0. objects.  Parameters appear in strict
          definition order, including keyword-only parameters.

          Alterado na versão 3.7: Python only explicitly guaranteed that
          it preserved the declaration order of keyword-only parameters
          as of version 3.7, although in practice this order had always
          been preserved in Python 3.

      -- Atributo: return_annotation

          The “return” annotation for the callable.  If the callable has
          no “return” annotation, this attribute is set to *note
          Signature.empty: 46d6.

      -- Método: bind (*args, **kwargs)

          Create a mapping from positional and keyword arguments to
          parameters.  Returns *note BoundArguments: 10a2. if ‘*args’
          and ‘**kwargs’ match the signature, or raises a *note
          TypeError: 2c3.

      -- Método: bind_partial (*args, **kwargs)

          Works the same way as *note Signature.bind(): 1648, but allows
          the omission of some required arguments (mimics *note
          functools.partial(): 414. behavior.)  Returns *note
          BoundArguments: 10a2, or raises a *note TypeError: 2c3. if the
          passed arguments do not match the signature.

      -- Método: replace (*[, parameters][, return_annotation])

          Create a new *note Signature: 1cf. instance based on the
          instance *note replace(): 46d5. was invoked on.  It is
          possible to pass different 'parameters' and/or
          'return_annotation' to override the corresponding properties
          of the base signature.  To remove ‘return_annotation’ from the
          copied ‘Signature’, pass in *note Signature.empty: 46d6.

               >>> def test(a, b):
               ...     pass
               ...
               >>> sig = signature(test)
               >>> new_sig = sig.replace(return_annotation="new return anno")
               >>> str(new_sig)
               "(a, b) -> 'new return anno'"

          *note Signature: 1cf. objects are also supported by the
          generic function *note copy.replace(): 151.

      -- Método: format (*, max_width=None)

          Create a string representation of the *note Signature: 1cf.
          object.

          If 'max_width' is passed, the method will attempt to fit the
          signature into lines of at most 'max_width' characters.  If
          the signature is longer than 'max_width', all parameters will
          be on separate lines.

          Adicionado na versão 3.13.

      -- Método: classmethod from_callable (obj, *, follow_wrapped=True,
               globals=None, locals=None, eval_str=False)

          Return a *note Signature: 1cf. (or its subclass) object for a
          given callable 'obj'.

          This method simplifies subclassing of *note Signature: 1cf.:

               class MySignature(Signature):
                   pass
               sig = MySignature.from_callable(sum)
               assert isinstance(sig, MySignature)

          Its behavior is otherwise identical to that of *note
          signature(): 738.

          Adicionado na versão 3.5.

          Alterado na versão 3.10: The 'globals', 'locals', and
          'eval_str' parameters were added.

 -- Classe: inspect.Parameter (name, kind, *, default=Parameter.empty,
          annotation=Parameter.empty)

     Objetos ‘Parameter’ são 'imutáveis'.  Em vez de modificar um objeto
     ‘Parameter’, você pode usar *note Parameter.replace(): 46da. ou
     *note copy.replace(): 151. para criar uma cópia modificada.

     Alterado na versão 3.5: Objetos Parameter agora são compatíveis com
     pickle e *note hasheável: 610.

      -- Atributo: empty

          Um marcador de nível de classe especial para especificar a
          ausência de valor padrão e anotação.

      -- Atributo: name

          O nome do parâmetro como uma string.  O nome deve ser um
          identificador Python válido.

          CPython gera nomes de parâmetro implícito na forma ‘.0’ no
          código objeto usado para implementar compreensão e expressão
          geradora.

          Alterado na versão 3.6: Esses nomes de parâmetro agora são
          expostos por este módulo como nomes como ‘implicit0’.

      -- Atributo: default

          O padrão valor para o parâmetro.  Se o parâmetro não tiver
          padrão valor, esse atributo será definido como *note
          Parameter.empty: 46db.

      -- Atributo: annotation

          A anotação para o parâmetro.  Se o parâmetro não tiver
          anotação, esse atributo será definido como *note
          Parameter.empty: 46db.

      -- Atributo: kind

          Descreve como valores de argumento são vinculados ao
          parâmetro.  Os possíveis valores são acessíveis via *note
          Parameter: 1d0. (como ‘Parameter.KEYWORD_ONLY’) e tem suporte
          para comparação e ordenação, na seguinte ordem:

          Nome                         Significado
                                       
          --------------------------------------------------------------------------------
                                       
          'POSITIONAL_ONLY'            Valor deve ser fornecido como argumento
                                       posicional.  Parâmetros somente-posicionais são
                                       aqueles que aparecem antes de uma entrada ‘/’
                                       (se presente) em uma definição de função Python.
                                       
                                       
          'POSITIONAL_OR_KEYWORD'      Valor pode ser fornecido como argumento
                                       posicional ou nomeado (esse é o comportamento de
                                       ligação padrão para funções implementadas em
                                       Python).
                                       
                                       
          ‘`*VAR_POSITIONAL*`’         Uma tupla de argumentos posicionais que não
                                       estão vinculados a nenhum outro parâmetro.  Isso
                                       corresponde a um parâmetro ‘*args’ em uma
                                       definição de função Python.
                                       
                                       
          'KEYWORD_ONLY'               Valor deve ser fornecido como argumento nomeado.
                                       Parâmetros somente-nomeados são aqueles que
                                       aparecem após uma entrada ‘*’ ou ‘*args’ em uma
                                       definição de função Python.
                                       
                                       
          'VAR_KEYWORD'                Um dicionário de argumentos nomeados que não
                                       estão vinculados a nenhum outro parâmetro.  Isso
                                       corresponde a um parâmetro ‘**kwargs’ em uma
                                       definição de função Python.
                                       

          Exemplo: exibir todos argumentos somente-nomeados sem padrão
          valor:

               >>> def foo(a, b, *, c, d=10):
               ...     pass

               >>> sig = signature(foo)
               >>> for param in sig.parameters.values():
               ...     if (param.kind == param.KEYWORD_ONLY and
               ...                        param.default is param.empty):
               ...         print('Parameter:', param)
               Parameter: c

      -- Atributo: kind.description

          Descreve um valor enumerado de *note Parameter.kind: 46df.

          Adicionado na versão 3.8.

          Exemplo: exibir as descrições de todos os argumento:

               >>> def foo(a, b, *, c, d=10):
               ...     pass

               >>> sig = signature(foo)
               >>> for param in sig.parameters.values():
               ...     print(param.kind.description)
               positional or keyword
               positional or keyword
               keyword-only
               keyword-only

      -- Método: replace (*[, name][, kind][, default][, annotation])

          Cria uma nova instância de *note Parameter: 1d0. com base na
          instância em que o método foi chamado.  Para substituir um
          atributo de ‘Parameter’, passe o argumento correspondente.
          Para remover um valor padrão ou/e uma anotação de um
          ‘Parameter’, passe *note Parameter.empty: 46db.

               >>> from inspect import Parameter
               >>> param = Parameter('foo', Parameter.KEYWORD_ONLY, default=42)
               >>> str(param)
               'foo=42'

               >>> str(param.replace()) # Criará uma cópia rasa de 'param'
               'foo=42'

               >>> str(param.replace(default=Parameter.empty, annotation='spam'))
               "foo: 'spam'"

          Objetos *note Parameter: 1d0. também são suportados pela
          função genérica *note copy.replace(): 151.

     Alterado na versão 3.4: Em Python 3.3, era permitido objetos *note
     Parameter: 1d0. terem ‘name’ definido como ‘None’ se ‘kind’
     estivesse definido como ‘POSITIONAL_ONLY’.  Isso não é mais
     permitido.

 -- Classe: inspect.BoundArguments

     Result of a *note Signature.bind(): 1648. or *note
     Signature.bind_partial(): 46d8. call.  Holds the mapping of
     arguments to the function’s parameters.

      -- Atributo: arguments

          A mutable mapping of parameters’ names to arguments’ values.
          Contains only explicitly bound arguments.  Changes in *note
          arguments: 912. will reflect in *note args: 46e1. and *note
          kwargs: 46e2.

          Should be used in conjunction with *note Signature.parameters:
          46d4. for any argument processing purposes.

               Nota: Arguments for which *note Signature.bind(): 1648.
               or *note Signature.bind_partial(): 46d8. relied on a
               default value are skipped.  However, if needed, use *note
               BoundArguments.apply_defaults(): e41. to add them.

          Alterado na versão 3.9: *note arguments: 912. is now of type
          *note dict: 256.  Formerly, it was of type *note
          collections.OrderedDict: 5db.

      -- Atributo: args

          A tuple of positional arguments values.  Dynamically computed
          from the *note arguments: 912. attribute.

      -- Atributo: kwargs

          A dict of keyword arguments values.  Dynamically computed from
          the *note arguments: 912. attribute.  Arguments that can be
          passed positionally are included in *note args: 46e1. instead.

      -- Atributo: signature

          A reference to the parent *note Signature: 1cf. object.

      -- Método: apply_defaults ()

          Set default values for missing arguments.

          For variable-positional arguments (‘*args’) the default is an
          empty tuple.

          For variable-keyword arguments (‘**kwargs’) the default is an
          empty dict.

               >>> def foo(a, b='ham', *args): pass
               >>> ba = inspect.signature(foo).bind('spam')
               >>> ba.apply_defaults()
               >>> ba.arguments
               {'a': 'spam', 'b': 'ham', 'args': ()}

          Adicionado na versão 3.5.

     The *note args: 46e1. and *note kwargs: 46e2. properties can be
     used to invoke functions:

          def test(a, *, b):
              ...

          sig = signature(test)
          ba = sig.bind(10, b=20)
          test(*ba.args, **ba.kwargs)

Ver também
..........

PEP 362(1) - Function Signature Object.

     The detailed specification, implementation details and examples.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0362/


File: python.info,  Node: Classes e funções<2>,  Next: A pilha to interpretador,  Prev: Introspecting callables with the Signature object,  Up: inspect — Inspecione objetos vivos

5.29.14.4 Classes e funções
...........................

 -- Função: inspect.getclasstree (classes, unique=False)

     Arrange the given list of classes into a hierarchy of nested lists.
     Where a nested list appears, it contains classes derived from the
     class whose entry immediately precedes the list.  Each entry is a
     2-tuple containing a class and a tuple of its base classes.  If the
     'unique' argument is true, exactly one entry appears in the
     returned structure for each class in the given list.  Otherwise,
     classes using multiple inheritance and their descendants will
     appear multiple times.

 -- Função: inspect.getfullargspec (func)

     Get the names and default values of a Python function’s parameters.
     A *note named tuple: 64e. is returned:

     ‘FullArgSpec(args, varargs, varkw, defaults, kwonlyargs,
     kwonlydefaults, annotations)’

     'args' is a list of the positional parameter names.  'varargs' is
     the name of the ‘*’ parameter or ‘None’ if arbitrary positional
     arguments are not accepted.  'varkw' is the name of the ‘**’
     parameter or ‘None’ if arbitrary keyword arguments are not
     accepted.  'defaults' is an 'n'-tuple of default argument values
     corresponding to the last 'n' positional parameters, or ‘None’ if
     there are no such defaults defined.  'kwonlyargs' is a list of
     keyword-only parameter names in declaration order.
     'kwonlydefaults' is a dictionary mapping parameter names from
     'kwonlyargs' to the default values used if no argument is supplied.
     'annotations' is a dictionary mapping parameter names to
     annotations.  The special key ‘"return"’ is used to report the
     function return value annotation (if any).

     Note that *note signature(): 738. and *note Signature Object: 46d2.
     provide the recommended API for callable introspection, and support
     additional behaviours (like positional-only arguments) that are
     sometimes encountered in extension module APIs.  This function is
     retained primarily for use in code that needs to maintain
     compatibility with the Python 2 ‘inspect’ module API.

     Alterado na versão 3.4: This function is now based on *note
     signature(): 738, but still ignores ‘__wrapped__’ attributes and
     includes the already bound first parameter in the signature output
     for bound methods.

     Alterado na versão 3.6: This method was previously documented as
     deprecated in favour of *note signature(): 738. in Python 3.5, but
     that decision has been reversed in order to restore a clearly
     supported standard interface for single-source Python 2/3 code
     migrating away from the legacy ‘getargspec()’ API.

     Alterado na versão 3.7: Python only explicitly guaranteed that it
     preserved the declaration order of keyword-only parameters as of
     version 3.7, although in practice this order had always been
     preserved in Python 3.

 -- Função: inspect.getargvalues (frame)

     Get information about arguments passed into a particular frame.  A
     *note named tuple: 64e. ‘ArgInfo(args, varargs, keywords, locals)’
     is returned.  'args' is a list of the argument names.  'varargs'
     and 'keywords' are the names of the ‘*’ and ‘**’ arguments or
     ‘None’.  'locals' is the locals dictionary of the given frame.

          Nota: This function was inadvertently marked as deprecated in
          Python 3.5.

 -- Função: inspect.formatargvalues (args[, varargs, varkw, locals,
          formatarg, formatvarargs, formatvarkw, formatvalue])

     Format a pretty argument spec from the four values returned by
     *note getargvalues(): eee.  The format* arguments are the
     corresponding optional formatting functions that are called to turn
     names and values into strings.

          Nota: This function was inadvertently marked as deprecated in
          Python 3.5.

 -- Função: inspect.getmro (cls)

     Return a tuple of class cls’s base classes, including cls, in
     method resolution order.  No class appears more than once in this
     tuple.  Note that the method resolution order depends on cls’s
     type.  Unless a very peculiar user-defined metatype is in use, cls
     will be the first element of the tuple.

 -- Função: inspect.getcallargs (func, /, *args, **kwds)

     Bind the 'args' and 'kwds' to the argument names of the Python
     function or method 'func', as if it was called with them.  For
     bound methods, bind also the first argument (typically named
     ‘self’) to the associated instance.  A dict is returned, mapping
     the argument names (including the names of the ‘*’ and ‘**’
     arguments, if any) to their values from 'args' and 'kwds'.  In case
     of invoking 'func' incorrectly, i.e.  whenever ‘func(*args,
     **kwds)’ would raise an exception because of incompatible
     signature, an exception of the same type and the same or similar
     message is raised.  For example:

          >>> from inspect import getcallargs
          >>> def f(a, b=1, *pos, **named):
          ...     pass
          ...
          >>> getcallargs(f, 1, 2, 3) == {'a': 1, 'named': {}, 'b': 2, 'pos': (3,)}
          True
          >>> getcallargs(f, a=2, x=4) == {'a': 2, 'named': {'x': 4}, 'b': 1, 'pos': ()}
          True
          >>> getcallargs(f)
          Traceback (most recent call last):
          ...
          TypeError: f() missing 1 required positional argument: 'a'

     Adicionado na versão 3.2.

     Descontinuado desde a versão 3.5: Use *note Signature.bind(): 1648.
     and *note Signature.bind_partial(): 46d8. instead.

 -- Função: inspect.getclosurevars (func)

     Get the mapping of external name references in a Python function or
     method 'func' to their current values.  A *note named tuple: 64e.
     ‘ClosureVars(nonlocals, globals, builtins, unbound)’ is returned.
     'nonlocals' maps referenced names to lexical closure variables,
     'globals' to the function’s module globals and 'builtins' to the
     builtins visible from the function body.  'unbound' is the set of
     names referenced in the function that could not be resolved at all
     given the current module globals and builtins.

     *note TypeError: 2c3. is raised if 'func' is not a Python function
     or method.

     Adicionado na versão 3.3.

 -- Função: inspect.unwrap (func, *, stop=None)

     Get the object wrapped by 'func'.  It follows the chain of
     ‘__wrapped__’ attributes returning the last object in the chain.

     'stop' is an optional callback accepting an object in the wrapper
     chain as its sole argument that allows the unwrapping to be
     terminated early if the callback returns a true value.  If the
     callback never returns a true value, the last object in the chain
     is returned as usual.  For example, *note signature(): 738. uses
     this to stop unwrapping if any object in the chain has a
     ‘__signature__’ attribute defined.

     *note ValueError: 202. is raised if a cycle is encountered.

     Adicionado na versão 3.4.

 -- Função: inspect.get_annotations (obj, *, globals=None, locals=None,
          eval_str=False)

     Calcula o dicionário de anotações para um objeto.

     ‘obj’ may be a callable, class, or module.  Passing in an object of
     any other type raises *note TypeError: 2c3.

     Returns a dict.  ‘get_annotations()’ returns a new dict every time
     it’s called; calling it twice on the same object will return two
     different but equivalent dicts.

     Esta função cuida de vários detalhes para você:

        * If ‘eval_str’ is true, values of type ‘str’ will be
          un-stringized using *note eval(): 180.  This is intended for
          use with stringized annotations (‘from __future__ import
          annotations’).

        * If ‘obj’ doesn’t have an annotations dict, returns an empty
          dict.  (Functions and methods always have an annotations dict;
          classes, modules, and other types of callables may not.)

        * Ignores inherited annotations on classes.  If a class doesn’t
          have its own annotations dict, returns an empty dict.

        * Todos os acessos aos membros do objeto e valores do dicionário
          são feitos usando ‘getattr()’ e ‘dict.get()’ por segurança.

        * Always, always, always returns a freshly created dict.

     ‘eval_str’ controls whether or not values of type ‘str’ are
     replaced with the result of calling *note eval(): 180. on those
     values:

        * If eval_str is true, *note eval(): 180. is called on values of
          type ‘str’.  (Note that ‘get_annotations’ doesn’t catch
          exceptions; if *note eval(): 180. raises an exception, it will
          unwind the stack past the ‘get_annotations’ call.)

        * If eval_str is false (the default), values of type ‘str’ are
          unchanged.

     ‘globals’ and ‘locals’ are passed in to *note eval(): 180.; see the
     documentation for *note eval(): 180. for more information.  If
     ‘globals’ or ‘locals’ is ‘None’, this function may replace that
     value with a context-specific default, contingent on ‘type(obj)’:

        * If ‘obj’ is a module, ‘globals’ defaults to ‘obj.__dict__’.

        * If ‘obj’ is a class, ‘globals’ defaults to
          ‘sys.modules[obj.__module__].__dict__’ and ‘locals’ defaults
          to the ‘obj’ class namespace.

        * If ‘obj’ is a callable, ‘globals’ defaults to *note
          obj.__globals__: 1316, although if ‘obj’ is a wrapped function
          (using *note functools.update_wrapper(): 1058.) it is first
          unwrapped.

     Calling ‘get_annotations’ is best practice for accessing the
     annotations dict of any object.  See *note Boas práticas para
     anotações: 7da. for more information on annotations best practices.

     Adicionado na versão 3.10.


File: python.info,  Node: A pilha to interpretador,  Next: Fetching attributes statically,  Prev: Classes e funções<2>,  Up: inspect — Inspecione objetos vivos

5.29.14.5 A pilha to interpretador
..................................

Some of the following functions return *note FrameInfo: 64c. objects.
For backwards compatibility these objects allow tuple-like operations on
all attributes except ‘positions’.  This behavior is considered
deprecated and may be removed in the future.

 -- Classe: inspect.FrameInfo

      -- Atributo: frame

          The *note frame object: 6e0. that the record corresponds to.

      -- Atributo: filename

          The file name associated with the code being executed by the
          frame this record corresponds to.

      -- Atributo: lineno

          The line number of the current line associated with the code
          being executed by the frame this record corresponds to.

      -- Atributo: function

          The function name that is being executed by the frame this
          record corresponds to.

      -- Atributo: code_context

          A list of lines of context from the source code that’s being
          executed by the frame this record corresponds to.

      -- Atributo: index

          The index of the current line being executed in the *note
          code_context: 46ee. list.

      -- Atributo: positions

          A *note dis.Positions: 46f1. object containing the start line
          number, end line number, start column offset, and end column
          offset associated with the instruction being executed by the
          frame this record corresponds to.

     Alterado na versão 3.5: Return a *note named tuple: 64e. instead of
     a *note tuple: 370.

     Alterado na versão 3.11: ‘FrameInfo’ is now a class instance (that
     is backwards compatible with the previous *note named tuple: 64e.).

 -- Classe: inspect.Traceback

      -- Atributo: filename

          The file name associated with the code being executed by the
          frame this traceback corresponds to.

      -- Atributo: lineno

          The line number of the current line associated with the code
          being executed by the frame this traceback corresponds to.

      -- Atributo: function

          The function name that is being executed by the frame this
          traceback corresponds to.

      -- Atributo: code_context

          A list of lines of context from the source code that’s being
          executed by the frame this traceback corresponds to.

      -- Atributo: index

          The index of the current line being executed in the *note
          code_context: 46f5. list.

      -- Atributo: positions

          A *note dis.Positions: 46f1. object containing the start line
          number, end line number, start column offset, and end column
          offset associated with the instruction being executed by the
          frame this traceback corresponds to.

     Alterado na versão 3.11: ‘Traceback’ is now a class instance (that
     is backwards compatible with the previous *note named tuple: 64e.).

     Nota: Keeping references to frame objects, as found in the first
     element of the frame records these functions return, can cause your
     program to create reference cycles.  Once a reference cycle has
     been created, the lifespan of all objects which can be accessed
     from the objects which form the cycle can become much longer even
     if Python’s optional cycle detector is enabled.  If such cycles
     must be created, it is important to ensure they are explicitly
     broken to avoid the delayed destruction of objects and increased
     memory consumption which occurs.

     Though the cycle detector will catch these, destruction of the
     frames (and local variables) can be made deterministic by removing
     the cycle in a *note finally: 9d2. clause.  This is also important
     if the cycle detector was disabled when Python was compiled or
     using *note gc.disable(): 46b2.  For example:

          def handle_stackframe_without_leak():
              frame = inspect.currentframe()
              try:
                  # do something with the frame
              finally:
                  del frame

     If you want to keep the frame around (for example to print a
     traceback later), you can also break reference cycles by using the
     *note frame.clear(): 280. method.

The optional 'context' argument supported by most of these functions
specifies the number of lines of context to return, which are centered
around the current line.

 -- Função: inspect.getframeinfo (frame, context=1)

     Get information about a frame or traceback object.  A *note
     Traceback: 64d. object is returned.

     Alterado na versão 3.11: A *note Traceback: 64d. object is returned
     instead of a named tuple.

 -- Função: inspect.getouterframes (frame, context=1)

     Get a list of *note FrameInfo: 64c. objects for a frame and all
     outer frames.  These frames represent the calls that lead to the
     creation of 'frame'.  The first entry in the returned list
     represents 'frame'; the last entry represents the outermost call on
     'frame'’s stack.

     Alterado na versão 3.5: A list of *note named tuples: 64e.
     ‘FrameInfo(frame, filename, lineno, function, code_context, index)’
     is returned.

     Alterado na versão 3.11: A list of *note FrameInfo: 64c. objects is
     returned.

 -- Função: inspect.getinnerframes (traceback, context=1)

     Get a list of *note FrameInfo: 64c. objects for a traceback’s frame
     and all inner frames.  These frames represent calls made as a
     consequence of 'frame'.  The first entry in the list represents
     'traceback'; the last entry represents where the exception was
     raised.

     Alterado na versão 3.5: A list of *note named tuples: 64e.
     ‘FrameInfo(frame, filename, lineno, function, code_context, index)’
     is returned.

     Alterado na versão 3.11: A list of *note FrameInfo: 64c. objects is
     returned.

 -- Função: inspect.currentframe ()

     Return the frame object for the caller’s stack frame.

     'Detalhes da implementação do CPython:' This function relies on
     Python stack frame support in the interpreter, which isn’t
     guaranteed to exist in all implementations of Python.  If running
     in an implementation without Python stack frame support this
     function returns ‘None’.

 -- Função: inspect.stack (context=1)

     Return a list of *note FrameInfo: 64c. objects for the caller’s
     stack.  The first entry in the returned list represents the caller;
     the last entry represents the outermost call on the stack.

     Alterado na versão 3.5: A list of *note named tuples: 64e.
     ‘FrameInfo(frame, filename, lineno, function, code_context, index)’
     is returned.

     Alterado na versão 3.11: A list of *note FrameInfo: 64c. objects is
     returned.

 -- Função: inspect.trace (context=1)

     Return a list of *note FrameInfo: 64c. objects for the stack
     between the current frame and the frame in which an exception
     currently being handled was raised in.  The first entry in the list
     represents the caller; the last entry represents where the
     exception was raised.

     Alterado na versão 3.5: A list of *note named tuples: 64e.
     ‘FrameInfo(frame, filename, lineno, function, code_context, index)’
     is returned.

     Alterado na versão 3.11: A list of *note FrameInfo: 64c. objects is
     returned.


File: python.info,  Node: Fetching attributes statically,  Next: Current State of Generators Coroutines and Asynchronous Generators,  Prev: A pilha to interpretador,  Up: inspect — Inspecione objetos vivos

5.29.14.6 Fetching attributes statically
........................................

Both *note getattr(): bea. and *note hasattr(): 4d2. can trigger code
execution when fetching or checking for the existence of attributes.
Descriptors, like properties, will be invoked and *note __getattr__():
4d3. and *note __getattribute__(): beb. may be called.

For cases where you want passive introspection, like documentation
tools, this can be inconvenient.  *note getattr_static(): 494. has the
same signature as *note getattr(): bea. but avoids executing code when
it fetches attributes.

 -- Função: inspect.getattr_static (obj, attr, default=None)

     Retrieve attributes without triggering dynamic lookup via the
     descriptor protocol, *note __getattr__(): 4d3. or *note
     __getattribute__(): beb.

     Note: this function may not be able to retrieve all attributes that
     getattr can fetch (like dynamically created attributes) and may
     find attributes that getattr can’t (like descriptors that raise
     AttributeError).  It can also return descriptors objects instead of
     instance members.

     If the instance *note __dict__: 55b. is shadowed by another member
     (for example a property) then this function will be unable to find
     instance members.

     Adicionado na versão 3.2.

*note getattr_static(): 494. does not resolve descriptors, for example
slot descriptors or getset descriptors on objects implemented in C. The
descriptor object is returned instead of the underlying attribute.

You can handle these with code like the following.  Note that for
arbitrary getset descriptors invoking these may trigger code execution:

     # example code for resolving the builtin descriptor types
     class _foo:
         __slots__ = ['foo']

     slot_descriptor = type(_foo.foo)
     getset_descriptor = type(type(open(__file__)).name)
     wrapper_descriptor = type(str.__dict__['__add__'])
     descriptor_types = (slot_descriptor, getset_descriptor, wrapper_descriptor)

     result = getattr_static(some_object, 'foo')
     if type(result) in descriptor_types:
         try:
             result = result.__get__()
         except AttributeError:
             # descriptors can raise AttributeError to
             # indicate there is no underlying value
             # in which case the descriptor itself will
             # have to do
             pass


File: python.info,  Node: Current State of Generators Coroutines and Asynchronous Generators,  Next: Code Objects Bit Flags,  Prev: Fetching attributes statically,  Up: inspect — Inspecione objetos vivos

5.29.14.7 Current State of Generators, Coroutines, and Asynchronous Generators
..............................................................................

When implementing coroutine schedulers and for other advanced uses of
generators, it is useful to determine whether a generator is currently
executing, is waiting to start or resume or execution, or has already
terminated.  *note getgeneratorstate(): 1277. allows the current state
of a generator to be determined easily.

 -- Função: inspect.getgeneratorstate (generator)

     Get current state of a generator-iterator.

     Possible states are:

        * GEN_CREATED: Waiting to start execution.

        * GEN_RUNNING: Currently being executed by the interpreter.

        * GEN_SUSPENDED: Currently suspended at a yield expression.

        * GEN_CLOSED: Execution has completed.

     Adicionado na versão 3.2.

 -- Função: inspect.getcoroutinestate (coroutine)

     Get current state of a coroutine object.  The function is intended
     to be used with coroutine objects created by *note async def: 5d1.
     functions, but will accept any coroutine-like object that has
     ‘cr_running’ and ‘cr_frame’ attributes.

     Possible states are:

        * CORO_CREATED: Waiting to start execution.

        * CORO_RUNNING: Currently being executed by the interpreter.

        * CORO_SUSPENDED: Currently suspended at an await expression.

        * CORO_CLOSED: Execution has completed.

     Adicionado na versão 3.5.

 -- Função: inspect.getasyncgenstate (agen)

     Get current state of an asynchronous generator object.  The
     function is intended to be used with asynchronous iterator objects
     created by *note async def: 5d1. functions which use the *note
     yield: 9d5. statement, but will accept any asynchronous
     generator-like object that has ‘ag_running’ and ‘ag_frame’
     attributes.

     Possible states are:

        * AGEN_CREATED: Waiting to start execution.

        * AGEN_RUNNING: Currently being executed by the interpreter.

        * AGEN_SUSPENDED: Currently suspended at a yield expression.

        * AGEN_CLOSED: Execution has completed.

     Adicionado na versão 3.12.

The current internal state of the generator can also be queried.  This
is mostly useful for testing purposes, to ensure that internal state is
being updated as expected:

 -- Função: inspect.getgeneratorlocals (generator)

     Get the mapping of live local variables in 'generator' to their
     current values.  A dictionary is returned that maps from variable
     names to values.  This is the equivalent of calling *note locals():
     141. in the body of the generator, and all the same caveats apply.

     If 'generator' is a *note generator: 109a. with no currently
     associated frame, then an empty dictionary is returned.  *note
     TypeError: 2c3. is raised if 'generator' is not a Python generator
     object.

     'Detalhes da implementação do CPython:' This function relies on the
     generator exposing a Python stack frame for introspection, which
     isn’t guaranteed to be the case in all implementations of Python.
     In such cases, this function will always return an empty
     dictionary.

     Adicionado na versão 3.3.

 -- Função: inspect.getcoroutinelocals (coroutine)

     This function is analogous to *note getgeneratorlocals(): 1115, but
     works for coroutine objects created by *note async def: 5d1.
     functions.

     Adicionado na versão 3.5.

 -- Função: inspect.getasyncgenlocals (agen)

     This function is analogous to *note getgeneratorlocals(): 1115, but
     works for asynchronous generator objects created by *note async
     def: 5d1. functions which use the *note yield: 9d5. statement.

     Adicionado na versão 3.12.


File: python.info,  Node: Code Objects Bit Flags,  Next: Buffer flags,  Prev: Current State of Generators Coroutines and Asynchronous Generators,  Up: inspect — Inspecione objetos vivos

5.29.14.8 Code Objects Bit Flags
................................

Python code objects have a *note co_flags: 20d6. attribute, which is a
bitmap of the following flags:

 -- Dado: inspect.CO_OPTIMIZED

     The code object is optimized, using fast locals.

 -- Dado: inspect.CO_NEWLOCALS

     If set, a new dict will be created for the frame’s *note f_locals:
     182. when the code object is executed.

 -- Dado: inspect.CO_VARARGS

     The code object has a variable positional parameter (‘*args’-like).

 -- Dado: inspect.CO_VARKEYWORDS

     The code object has a variable keyword parameter (‘**kwargs’-like).

 -- Dado: inspect.CO_NESTED

     The flag is set when the code object is a nested function.

 -- Dado: inspect.CO_GENERATOR

     The flag is set when the code object is a generator function, i.e.
     a generator object is returned when the code object is executed.

 -- Dado: inspect.CO_COROUTINE

     The flag is set when the code object is a coroutine function.  When
     the code object is executed it returns a coroutine object.  See PEP
     492(1) for more details.

     Adicionado na versão 3.5.

 -- Dado: inspect.CO_ITERABLE_COROUTINE

     The flag is used to transform generators into generator-based
     coroutines.  Generator objects with this flag can be used in
     ‘await’ expression, and can ‘yield from’ coroutine objects.  See
     PEP 492(2) for more details.

     Adicionado na versão 3.5.

 -- Dado: inspect.CO_ASYNC_GENERATOR

     The flag is set when the code object is an asynchronous generator
     function.  When the code object is executed it returns an
     asynchronous generator object.  See PEP 525(3) for more details.

     Adicionado na versão 3.6.

     Nota: The flags are specific to CPython, and may not be defined in
     other Python implementations.  Furthermore, the flags are an
     implementation detail, and can be removed or deprecated in future
     Python releases.  It’s recommended to use public APIs from the
     *note inspect: 7e. module for any introspection needs.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0492/

   (2) https://peps.python.org/pep-0492/

   (3) https://peps.python.org/pep-0525/


File: python.info,  Node: Buffer flags,  Next: Interface de linha de comando<13>,  Prev: Code Objects Bit Flags,  Up: inspect — Inspecione objetos vivos

5.29.14.9 Buffer flags
......................

 -- Classe: inspect.BufferFlags

     This is an *note enum.IntFlag: cbb. that represents the flags that
     can be passed to the *note __buffer__(): 45f. method of objects
     implementing the *note buffer protocol: 2e8.

     The meaning of the flags is explained at *note Tipos de solicitação
     do buffer: 4705.

      -- Atributo: SIMPLE

      -- Atributo: WRITABLE

      -- Atributo: FORMAT

      -- Atributo: ND

      -- Atributo: STRIDES

      -- Atributo: C_CONTIGUOUS

      -- Atributo: F_CONTIGUOUS

      -- Atributo: ANY_CONTIGUOUS

      -- Atributo: INDIRECT

      -- Atributo: CONTIG

      -- Atributo: CONTIG_RO

      -- Atributo: STRIDED

      -- Atributo: STRIDED_RO

      -- Atributo: RECORDS

      -- Atributo: RECORDS_RO

      -- Atributo: FULL

      -- Atributo: FULL_RO

      -- Atributo: READ

      -- Atributo: WRITE

     Adicionado na versão 3.12.


File: python.info,  Node: Interface de linha de comando<13>,  Prev: Buffer flags,  Up: inspect — Inspecione objetos vivos

5.29.14.10 Interface de linha de comando
........................................

The *note inspect: 7e. module also provides a basic introspection
capability from the command line.

By default, accepts the name of a module and prints the source of that
module.  A class or function within the module can be printed instead by
appended a colon and the qualified name of the target object.

 -- Option: --details

     Print information about the specified object rather than the source
     code


File: python.info,  Node: site — Gancho de configuração específico do site,  Prev: inspect — Inspecione objetos vivos,  Up: Serviços de Tempo de Execução Python

5.29.15 ‘site’ — Gancho de configuração específico do site
----------------------------------------------------------

'Código-fonte:' Lib/site.py(1)

__________________________________________________________________

'Este módulo é importado automaticamente durante a inicialização.'  A
importação automática pode ser suprimida usando a opção *note -S: 11e7.
do interpretador.

A importação deste módulo normalmente anexa caminhos específicos do site
ao caminho de pesquisa de módulos e adiciona *note chamáveis: 231e,
incluindo *note help(): 8dd. ao espaço de nomes embutido.  No entanto, a
opção de inicialização do Python *note -S: 11e7. bloqueia isso e este
módulo pode ser importado com segurança sem modificações automáticas no
caminho de pesquisa de módulos ou adições aos módulos embutidos.  Para
acionar explicitamente as adições usuais específicas do site, chame a
função *note main(): 1ebe.

Alterado na versão 3.3: A importação do módulo usado para acionar a
manipulação de caminhos, mesmo ao usar *note -S: 11e7.

Ele começa construindo até quatro diretórios a partir de uma parte no
início e uma no final.  Para a parte no início, ele usa ‘sys.prefix’ e
‘sys.exec_prefix’; inícios vazios são ignorados.  Para a parte no final,
ele usa a string vazia e então ‘lib/site-packages’ (no Windows) ou
‘lib/python`X.Y[t]'/site-packages’ (no Unix e macOS). (O sufixo opcional
“t” indica a construção com *note threads livres: 15e4. e é anexado se
‘"t"’ estiver presente na constante *note sys.abiflags: a6d.)  Para cada
uma das combinações distintas início-fim, ele vê se se refere a um
diretório existente e, se sim, adiciona-o a ‘sys.path’ e também
inspeciona o caminho recém-adicionado para arquivos de configuração.

Alterado na versão 3.5: Suporte para o diretório “site-python” foi
removido.

Alterado na versão 3.13: No Unix, as instalações do Python *note threads
livres: 15e4. são identificadas pelo sufixo “t” no nome do diretório
específico da versão, como ‘lib/python3.13t/’.

Se um arquivo chamado “pyvenv.cfg” existir em um diretório acima, então
sys.executable, sys.prefix e sys.exec_prefix serão configurados para
esse diretório e também será verificado se há site-packages
(sys.base_prefix e sys.base_exec_prefix será sempre os prefixos “reais”
da instalação do Python).  Se “pyvenv.cfg” (um arquivo de configuração
de autoinicialização) contiver a chave “include-system-site-packages”
configurada para algo diferente de “true” (sem distinção entre
maiúsculas e minúsculas), os prefixos no nível do sistema não serão
pesquisados quanto ao site-packages; caso contrário, eles irão.

Um arquivo de configuração de caminho é aquele cujo nome tem o formato
‘`name'.pth’ e que existe em um dos quatro diretórios mencionados acima;
seu conteúdo são itens adicionais (um por linha) a serem adicionados ao
‘sys.path’.  Itens inexistentes nunca são adicionados ao ‘sys.path’ e
não é verificado se o item se refere a um diretório, e não a um arquivo.
Nenhum item é adicionado ao ‘sys.path’ mais de uma vez.  Linhas em
branco e linhas iniciadas com ‘#’ são ignoradas.  Linhas iniciadas com
‘import’ (seguidas de espaço ou tabulação) são executadas.

     Nota: Uma linha executável em um arquivo ‘.pth’ é executada a cada
     inicialização do Python, independentemente de um módulo em
     particular ser realmente usado.  Seu impacto deve, portanto, ser
     reduzido ao mínimo.  O objetivo principal das linhas executáveis é
     tornar o(s) módulo(s) correspondente(s) importável (carregar
     ganchos de importação de terceiros, ajustar ‘PATH’ etc).  Qualquer
     outra inicialização deve ser feita na importação real de um módulo,
     se e quando isso acontecer.  Limitar um fragmento de código a uma
     única linha é uma medida deliberada para desencorajar colocar
     qualquer coisa mais complexa aqui.

Alterado na versão 3.13: Os arquivos ‘.pth’ agora são decodificados
primeiro por UTF-8 e depois pela *note codificação da localidade: 242.
se falhar.

Por exemplo, suponha que ‘sys.prefix’ e ‘sys.exec_prefix’ sejam
definidos com ‘/usr/local’.  A biblioteca Python X.Y é instalado em
‘/usr/local/lib/python`X.Y'’.  Suponha que isso tenha um subdiretório
‘/usr/local/lib/python`X.Y'/site-packages’ com três subsubdiretórios,
‘foo’, ‘bar’ e ‘spam’, e dois caminhos arquivos de configuração,
‘foo.pth’ e ‘bar.pth’.  Presuma que ‘foo.pth’ contém o seguinte:

     # configuração do pacote foo

     foo
     bar
     bletch

e que ‘bar.pth’ contém:

     # configuração do pacote bar

     bar

Em seguida, os seguintes diretórios específicos da versão são
adicionados a ‘sys.path’, nesta ordem:

     /usr/local/lib/pythonX.Y/site-packages/bar
     /usr/local/lib/pythonX.Y/site-packages/foo

Observe que ‘bletch’ é omitido porque não existe; o diretório ‘bar’
precede o diretório ‘foo’ porque ‘bar.pth’ vem em ordem alfabética antes
de ‘foo.pth’; e ‘spam’ é omitido porque não é mencionado em nenhum dos
arquivos de configuração de caminho.

* Menu:

* sitecustomize::
* usercustomize::
* Configuração Readline::
* Conteúdo do módulo: Conteúdo do módulo<10>.
* Interface de linha de comando: Interface de linha de comando<14>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/site.py


File: python.info,  Node: sitecustomize,  Next: usercustomize,  Up: site — Gancho de configuração específico do site

5.29.15.1 ‘sitecustomize’
.........................

Após essas manipulações de caminho, é feita uma tentativa de importar um
módulo chamado *note sitecustomize: c8, que pode executar
personalizações arbitrárias específicas do site.  Ele é normalmente
criado por um administrador de sistema no diretório site-packages.  Se
essa importação falhar com uma *note ImportError: 419. ou sua exceção de
subclasse, e o atributo *note name: 2420. da exceção for igual a
‘'sitecustomize'’, ele será ignorado silenciosamente.  Se o Python for
iniciado sem fluxos de saída disponíveis, como com ‘pythonw.exe’ no
Windows (que é usado por padrão para iniciar o IDLE), a tentativa de
saída de *note sitecustomize: c8. será ignorada.  Qualquer outra exceção
causa uma falha silenciosa e talvez misteriosa do processo.


File: python.info,  Node: usercustomize,  Next: Configuração Readline,  Prev: sitecustomize,  Up: site — Gancho de configuração específico do site

5.29.15.2 ‘usercustomize’
.........................

Depois disso, é feita uma tentativa de importar um módulo chamado *note
usercustomize: 10e, que pode executar personalizações arbitrárias
específicas do usuário, se *note ENABLE_USER_SITE: 471e. for true.  Este
arquivo deve ser criado no diretório site-packages de usuário (veja
abaixo), que faz parte de ‘sys.path’ a menos que seja desabilitado por
*note -s: 13d5.  Se esta importação falhar com um *note ImportError:
419. ou sua exceção de subclasse, e o atributo *note name: 2420. da
exceção for igual a ‘'usercustomize'’, ele será ignorado
silenciosamente.

Observe que, para alguns sistemas não Unix, ‘sys.prefix’ e
‘sys.exec_prefix’ estão vazios, e as manipulações de caminho são
ignoradas; no entanto, a importação de *note sitecustomize: c8. e *note
usercustomize: 10e. ainda é tentada.


File: python.info,  Node: Configuração Readline,  Next: Conteúdo do módulo<10>,  Prev: usercustomize,  Up: site — Gancho de configuração específico do site

5.29.15.3 Configuração Readline
...............................

Em sistemas que oferecem suporte a *note readline: ba, este módulo
também importará e configurará o módulo *note rlcompleter: bd, se o
Python for iniciado em *note modo interativo: ffc. e sem a opção *note
-S: 11e7.  O comportamento padrão é habilitar tab-completion e usar
‘~/.python_history’ como o arquivo de salvamento do histórico.  Para
desabilitá-lo, exclua (ou substitua) o atributo *note
sys.__interactivehook__: ffd. no seu módulo *note sitecustomize: c8. ou
*note usercustomize: 10e. ou no seu arquivo *note PYTHONSTARTUP: ffe.

Alterado na versão 3.4: A ativação do rlcompleter e do histórico foi
feita automaticamente.


File: python.info,  Node: Conteúdo do módulo<10>,  Next: Interface de linha de comando<14>,  Prev: Configuração Readline,  Up: site — Gancho de configuração específico do site

5.29.15.4 Conteúdo do módulo
............................

 -- Dado: site.PREFIXES

     Uma lista de prefixos para diretórios site-package.

 -- Dado: site.ENABLE_USER_SITE

     Sinalizador mostrando o status do diretório site-packages do
     usuário.  ‘True’ significa que ele está habilitado e foi adicionado
     a ‘sys.path’.  ‘False’ significa que ele foi desabilitado por
     solicitação do usuário (com *note -s: 13d5. ou *note
     PYTHONNOUSERSITE: 13d6.).  ‘None’ significa que ele foi
     desabilitado por motivos de segurança (incompatibilidade entre o ID
     do usuário ou grupo e o ID efetivo) ou por um administrador.

 -- Dado: site.USER_SITE

     Caminho para o usuário site-packages para o Python em execução.
     Pode ser ‘None’ se *note getusersitepackages(): 1281. ainda não
     tiver sido chamado.  O valor padrão é
     ‘~/.local/lib/python`X.Y'[t]/site-packages’ para construções UNIX e
     macOS não-framework,
     ‘~/Library/Python/`X.Y'/lib/python/site-packages’ para construções
     macOS framework e ‘`%APPDATA%'\Python\Python`XY'\site-packages’ no
     Windows.  O “t” opcional indica a construção com threads livres.
     Este diretório é um diretório de site, o que significa que os
     arquivos ‘.pth’ nele serão processados.

 -- Dado: site.USER_BASE

     Caminho para o diretório base para os pacotes do site do usuário.
     Pode ser ‘None’ se *note getuserbase(): 1280. ainda não tiver sido
     chamado.  O valor padrão é ‘~/.local’ para construções
     não-framework UNIX e macOS, ‘~/Library/Python/`X.Y'’ para
     construções de framework macOS e ‘`%APPDATA%'\Python’ para Windows.
     Este valor é usado para calcular os diretórios de instalação para
     scripts, arquivos de dados, módulos Python, etc.  para o *note
     esquema de instalação de usuário: 1ed0.  Veja também *note
     PYTHONUSERBASE: 13d4.

 -- Função: site.main ()

     Adiciona todos os diretórios padrão específicos do site ao caminho
     de pesquisa de módulos.  Esta função é chamada automaticamente
     quando este módulo é importado, a menos que o interpretador Python
     tenha sido iniciado com o sinalizador *note -S: 11e7.

     Alterado na versão 3.3: Esta função costumava ser chamada
     incondicionalmente.

 -- Função: site.addsitedir (sitedir, known_paths=None)

     Adiciona um diretório a sys.path e processa seus arquivos ‘.pth’.
     Normalmente usado em *note sitecustomize: c8. ou *note
     usercustomize: 10e. (veja acima).

 -- Função: site.getsitepackages ()

     Retorna uma lista contendo todos os diretórios globais de pacotes
     de sites.

     Adicionado na versão 3.2.

 -- Função: site.getuserbase ()

     Retorna o caminho do diretório base do usuário, *note USER_BASE:
     1361.  Se ele ainda não foi inicializado, esta função também o
     definirá, respeitando *note PYTHONUSERBASE: 13d4.

     Adicionado na versão 3.2.

 -- Função: site.getusersitepackages ()

     Retorna o caminho do diretório site-packages específico do usuário,
     *note USER_SITE: 1ecf.  Se ele ainda não foi inicializado, esta
     função também o definirá, respeitando *note USER_BASE: 1361.  Para
     determinar se o site-packages específico do usuário foi adicionado
     a ‘sys.path’, *note ENABLE_USER_SITE: 471e. deve ser usado.

     Adicionado na versão 3.2.


File: python.info,  Node: Interface de linha de comando<14>,  Prev: Conteúdo do módulo<10>,  Up: site — Gancho de configuração específico do site

5.29.15.5 Interface de linha de comando
.......................................

O módulo *note site: c7. também fornece uma maneira de obter os
diretórios do usuário a partir da linha de comando:

     $ python -m site --user-site
     /home/user/.local/lib/python3.11/site-packages

Se for chamado sem argumentos, ele vai exibir o conteúdo de *note
sys.path: 3b4. na saída padrão, seguido pelo valor de *note USER_BASE:
1361. e se o diretório existe, depois o mesmo para *note USER_SITE:
1ecf. e, finalmente, o valor de *note ENABLE_USER_SITE: 471e.

 -- Option: --user-base

     Exibe o caminho para o diretório base do usuário.

 -- Option: --user-site

     Exibe o caminho para o diretório site-packages do usuário.

Se ambas as opções forem fornecidas, a base do usuário e o site do
usuário serão exibidos (sempre nesta ordem), separados por *note
os.pathsep: 1ecc.

Se qualquer opção for fornecida, o script sairá com um destes valores:
‘0’ se o diretório site-packages do usuário estiver habilitado, ‘1’ se
ele foi desabilitado pelo usuário, ‘2’ se ele foi desabilitado por
motivos de segurança ou por um administrador, e um valor maior que 2 se
houver um erro.

Ver também
..........

   * PEP 370(1) – Diretório site-packages por usuário.

   * *note A inicialização do caminho de pesquisa de módulos sys.path:
     1de6. – A inicialização de *note sys.path: 3b4.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0370/


File: python.info,  Node: Interpretadores Python Personalizados,  Next: Importando módulos,  Prev: Serviços de Tempo de Execução Python,  Up: A Biblioteca Padrão do Python

5.30 Interpretadores Python Personalizados
==========================================

Os módulos descritos neste capítulo permitem a escrita de interfaces
semelhantes ao interpretador interativo da Python.  Se você quer um
interpretador de Python que suporte algum recurso especial, além do
idioma de Python, você deve olhar para o módulo *note code: 1a.  (O
módulo *note codeop: 1c. é de nível inferior, usado para suportar
compilação de um pedaço possivelmente incompleto do código Python).

A lista completa de módulos descritos neste capítulo é:

* Menu:

* code — Classes bases do interpretador::
* codeop — Compila código Python::


File: python.info,  Node: code — Classes bases do interpretador,  Next: codeop — Compila código Python,  Up: Interpretadores Python Personalizados

5.30.1 ‘code’ — Classes bases do interpretador
----------------------------------------------

'Código-fonte:' Lib/code.py(1)

__________________________________________________________________

O módulo ‘code’ fornece facilidades para implementar laços de
leitura-execução-escrita no código Python.  São incluídas duas classes e
funções de conveniência que podem ser usadas para criar aplicações que
fornecem um prompt de interpretador interativo.

 -- Classe: code.InteractiveInterpreter (locals=None)

     Esta classe trata de análise e estado do interpretador (espaço de
     nomes do usuário); o mesmo não lida com buffer de entrada ou
     solicitação ou nomeação de arquivo de entrada (o nome do arquivo é
     sempre passado explicitamente).  O argumento opcional 'locals'
     especifica um mapeamento para usar como espaço de nomes no qual o
     código será executado; ele é padrão para um dicionário recém-criado
     com a chave ‘'__name__'’ definida com ‘'__console__'’ e a chave
     ‘'__doc__'’ definida com ‘None’.

     Observe que objetos funções e classes criados sob uma instância
     ‘InteractiveInterpreter’ pertencerão ao espaço de nomes
     especificado por 'locals'.  Só serão selecionáveis se 'locals' for
     o espaço de nomes de um módulo existente.

 -- Classe: code.InteractiveConsole (locals=None, filename='<console>',
          local_exit=False)

     Emula de forma muito semelhante o comportamento do interpretador
     Python interativo.  Esta classe baseia-se em *note
     InteractiveInterpreter: 16c3. e adiciona prompts usando os
     familiares ‘sys.ps1’ e ‘sys.ps2’, e buffer de entrada.  Se
     'local_exit' for verdadeiro, ‘exit()’ e ‘quit()’ no console não
     levantarão *note SystemExit: d63, mas retornarão ao código de
     chamada.

     Alterado na versão 3.13: Adicionado o parâmetro 'local_exit'.

 -- Função: code.interact (banner=None, readfunc=None, local=None,
          exitmsg=None, local_exit=False)

     Função de conveniência para executar um laço de
     leitura-execução-impressão.  Isto cria uma nova instância de *note
     InteractiveConsole: 2533. e define 'readfunc' para ser usado como o
     método *note InteractiveConsole.raw_input(): 472c, se fornecido.
     Se 'local' for fornecido, ele será passado para o construtor *note
     InteractiveConsole: 2533. para uso como espaço de nomes padrão para
     o laço do interpretador.  Se 'local_exit' for fornecido, ele será
     passado para o construtor *note InteractiveConsole: 2533.  O método
     *note interact(): 472d. da instância é então executado com 'banner'
     e 'exitmsg' passados como banner e mensagem de saída a serem
     usados, se fornecidos.  O objeto console é descartado após o uso.

     Alterado na versão 3.6: Parâmetro adicionado 'exitmsg'.

     Alterado na versão 3.13: Adicionado o parâmetro 'local_exit'.

 -- Função: code.compile_command (source, filename='<input>',
          symbol='single')

     Esta função é útil para programas que desejam emular o laço
     principal do interpretador Python (também conhecido como laço de
     leitura-execução-impressão).  A parte complicada é determinar
     quando o usuário digitou um comando incompleto que pode ser
     concluído inserindo mais texto (em vez de um comando completo ou um
     erro de sintaxe).  Esta função 'quase' sempre toma a mesma decisão
     que o laço principal do interpretador real.

     'source' é a string fonte; 'filename' é o nome do arquivo opcional
     do qual a fonte foi lida, sendo o padrão ‘'<input>'’; e 'symbol' é
     o símbolo opcional de início da gramática, que deve ser ‘'single'’
     (o padrão), ‘'eval'’ ou ‘'exec'’.

     Retorna um objeto código (o mesmo que ‘compile(source, filename,
     symbol)’) se o comando for completo e válido; ‘None’ se o comando
     estiver incompleto; levanta *note SyntaxError: 18d. se o comando
     estiver completo e contém um erro de sintaxe, ou levanta *note
     OverflowError: 885. ou *note ValueError: 202. se o comando contiver
     um literal inválido.

* Menu:

* Objetos de interpretador interativo::
* Objetos de console Interativo::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/code.py


File: python.info,  Node: Objetos de interpretador interativo,  Next: Objetos de console Interativo,  Up: code — Classes bases do interpretador

5.30.1.1 Objetos de interpretador interativo
............................................

 -- Método: InteractiveInterpreter.runsource (source,
          filename='<input>', symbol='single')

     Compila e executa alguma fonte no interpretador.  Os argumentos são
     os mesmos de *note compile_command(): 472e.; o padrão para
     'filename' é ‘'<input>'’, e para 'symbol' é ‘'single'’.  Uma de
     várias coisas pode acontecer:

        * A entrada está incorreta; *note compile_command(): 472e.
          levantou uma exceção (*note SyntaxError: 18d. ou *note
          OverflowError: 885.).  Um traceback da sintaxe será impresso
          chamando o método *note showsyntaxerror(): 4732.  *note
          runsource(): 4731. retorna ‘False’.

        * A entrada está incompleta e são necessárias mais entradas;
          *note compile_command(): 472e. retornou ‘None’.  *note
          runsource(): 4731. retorna ‘True’.

        * A entrada está completa; *note compile_command(): 472e.
          retornou um objeto código.  O código é executado chamando
          *note runcode(): 4733. (que também lida com exceções de tempo
          de execução, exceto *note SystemExit: d63.).  *note
          runsource(): 4731. retorna ‘False’.

     O valor de retorno pode ser usado para decidir se usar ‘sys.ps1’ ou
     ‘sys.ps2’ para solicitar a próxima linha.

 -- Método: InteractiveInterpreter.runcode (code)

     Executa um objeto código.  Quando ocorre uma exceção, *note
     showtraceback(): df8. é chamado para exibir um traceback.  Todas as
     exceções são capturadas, exceto *note SystemExit: d63, que pode ser
     propagada.

     Uma observação sobre *note KeyboardInterrupt: 9d9.: esta exceção
     pode ocorrer em outro lugar neste código e nem sempre pode ser
     detectada.  O chamador deve estar preparado para lidar com isso.

 -- Método: InteractiveInterpreter.showsyntaxerror (filename=None)

     Exibe o erro de sintaxe que acabou de ocorrer.  Isso não exibe um
     stack trace (situação da pilha de execução) porque não há um para
     erros de sintaxe.  Se 'filename' for fornecido, ele será inserido
     na exceção em vez do nome de arquivo padrão fornecido pelo
     analisador sintático do Python, porque ele sempre usa ‘'<string>'’
     ao ler uma string.  A saída é escrita pelo método *note write():
     4734.

 -- Método: InteractiveInterpreter.showtraceback ()

     Exibe a exceção que acabou de ocorrer.  Removemos o primeiro item
     da pilha porque ele está dentro da implementação do objeto
     interpretador.  A saída é escrita pelo método *note write(): 4734.

     Alterado na versão 3.5: O traceback encadeado completo é exibido em
     vez de apenas o traceback primário.

 -- Método: InteractiveInterpreter.write (data)

     Escreve uma string no fluxo de erro padrão (‘sys.stderr’).  As
     classes derivadas devem substituir isso para fornecer o tratamento
     de saída apropriado conforme necessário.


File: python.info,  Node: Objetos de console Interativo,  Prev: Objetos de interpretador interativo,  Up: code — Classes bases do interpretador

5.30.1.2 Objetos de console Interativo
......................................

A classe *note InteractiveConsole: 2533. é uma subclasse de *note
InteractiveInterpreter: 16c3. e, portanto, oferece todos os métodos dos
objetos interpretadores, bem como as seguintes adições.

 -- Método: InteractiveConsole.interact (banner=None, exitmsg=None)

     Emula de forma muito semelhante o console interativo do Python.  O
     argumento opcional 'banner' especifica o banner a ser impresso
     antes da primeira interação; por padrão ele imprime um banner
     semelhante ao impresso pelo interpretador Python padrão, seguido
     pelo nome da classe do objeto console entre parênteses (para não
     confundir isso com o interpretador real – já que está tão
     próximo!).

     O argumento opcional 'exitmsg' especifica uma mensagem de saída
     impressa ao sair.  Passe a string vazia para suprimir a mensagem de
     saída.  Se 'exitmsg' não for fornecido ou ‘None’, uma mensagem
     padrão será impressa.

     Alterado na versão 3.4: Para suprimir a impressão de qualquer
     banner, passe uma string vazia.

     Alterado na versão 3.6: Imprime uma mensagem de saída ao sair.

 -- Método: InteractiveConsole.push (line)

     Envia uma linha do texto fonte para o interpretador.  A linha não
     deve ter uma nova linha à direita; pode ter novas linhas internas.
     A linha é anexada a um buffer e o método *note runsource(): 4731.
     do interpretador é chamado com o conteúdo concatenado do buffer
     como fonte.  Se isso indicar que o comando foi executado ou é
     inválido, o buffer será redefinido; caso contrário, o comando
     estará incompleto e o buffer permanecerá como estava após a linha
     ser anexada.  O valor de retorno é ‘True’ se mais entrada for
     necessária, ‘False’ se a linha foi tratada de alguma forma (isto é
     o mesmo que ‘runsource()’).

 -- Método: InteractiveConsole.resetbuffer ()

     Remove qualquer texto fonte não tratado do buffer de entrada.

 -- Método: InteractiveConsole.raw_input (prompt='')

     Escreve um prompt e leia uma linha.  A linha retornada não inclui a
     nova linha final.  Quando o usuário insere a sequência de teclas de
     fim de linha, uma exceção *note EOFError: 131c. é levantada.  A
     implementação base lê ‘sys.stdin’; uma subclasse pode substituir
     isso por uma implementação diferente.


File: python.info,  Node: codeop — Compila código Python,  Prev: code — Classes bases do interpretador,  Up: Interpretadores Python Personalizados

5.30.2 ‘codeop’ — Compila código Python
---------------------------------------

'Código-fonte:' Lib/codeop.py(1)

__________________________________________________________________

O módulo *note codeop: 1c. fornece utilitários sobre os quais o loop de
leitura-execução-exibição do Python pode ser emulado, como é feito no
módulo *note code: 1a.  Como resultado, você provavelmente não deseja
usar o módulo diretamente; se você deseja incluir tal loop em seu
programa, você provavelmente deseja usar o módulo *note code: 1a.

Há duas partes para esta tarefa:

  1. Ser capaz de dizer se uma linha de entrada completa uma instrução
     Python: em suma, dizer se deve exibir ‘‘>>>’’ ou ‘‘...’’ em
     seguida.

  2. Lembrar quais instruções futuras o usuário inseriu, para que as
     entradas subsequentes possam ser compiladas com essas declarações
     em vigor.

O módulo *note codeop: 1c. fornece uma maneira de fazer cada uma dessas
coisas e uma maneira de fazer as duas coisas.

Para fazer apenas a primeira:

 -- Função: codeop.compile_command (source, filename='<input>',
          symbol='single')

     Tenta compilar 'source', que deve ser uma string de código Python e
     retornar um objeto código se 'source' for um código Python válido.
     Nesse caso, o atributo de nome de arquivo do objeto código será
     'filename', cujo padrão é ‘'<input>'’.  Retorna ‘None’ se 'source'
     'não' é um código Python válido, mas é um prefixo de código Python
     válido.

     Se houver um problema com 'source', uma exceção será levantada.
     *note SyntaxError: 18d. é levantada se houver sintaxe Python
     inválida, e *note OverflowError: 885. ou *note ValueError: 202. se
     houver um literal inválido.

     O argumento 'symbol' determina se 'source' é compilado como uma
     instrução (‘'single'’, o padrão), como uma sequência de *note
     instruções: 2935. (‘'exec'’) ou como uma *note expressão: 2111.
     (‘'eval'’).  Qualquer outro valor fará com que *note ValueError:
     202. seja levantada.

          Nota: É possível (mas não provável) que o analisador sintático
          pare de analisar com um resultado bem-sucedido antes de chegar
          ao final da fonte; neste caso, os símbolos finais podem ser
          ignorados em vez de causar um erro.  Por exemplo, uma barra
          invertida seguida por duas novas linhas pode ser seguida por
          lixo arbitrário.  Isso será corrigido quando a API para o
          analisador for melhor.

 -- Classe: codeop.Compile

     Instâncias desta classe têm métodos *note __call__(): 558.
     idênticos em assinatura à função embutida *note compile(): 192, mas
     com a diferença de que se a instância compilar o texto do programa
     contendo uma instrução *note __future__: 0, a instância se “lembra”
     e compila todos os textos de programa subsequentes com a instrução
     em vigor.

 -- Classe: codeop.CommandCompiler

     Instâncias desta classe têm métodos *note __call__(): 558.
     idênticos em assinatura a *note compile_command(): 18dd.; a
     diferença é que se a instância compila o texto do programa contendo
     uma instrução *note __future__: 0, a instância se “lembra” e
     compila todos os textos do programa subsequentes com a instrução em
     vigor.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/codeop.py


File: python.info,  Node: Importando módulos,  Next: Serviços da Linguagem Python,  Prev: Interpretadores Python Personalizados,  Up: A Biblioteca Padrão do Python

5.31 Importando módulos
=======================

Os módulos descritos neste capítulo fornecem novas maneiras de importar
outros módulos Python e hooks para personalizar o processo de
importação.

A lista completa de módulos descritos neste capítulo é:

* Menu:

* zipimport - Importa módulos de arquivos Zip::
* pkgutil — Utilitário de extensão de pacote::
* modulefinder — Procura módulos usados por um script::
* runpy — Localizando e executando módulos Python::
* importlib — A implementação de import::
* importlib.resources – Leitura, abertura e acesso a recursos de pacotes: importlib resources – Leitura abertura e acesso a recursos de pacotes.
* importlib.resources.abc – Classes base abstratas para recursos: importlib resources abc – Classes base abstratas para recursos.
* importlib.metadata – Acessando metadados do pacote: importlib metadata – Acessando metadados do pacote.
* A inicialização do caminho de pesquisa de módulos sys.path: A inicialização do caminho de pesquisa de módulos sys path.


File: python.info,  Node: zipimport - Importa módulos de arquivos Zip,  Next: pkgutil — Utilitário de extensão de pacote,  Up: Importando módulos

5.31.1 ‘zipimport’ - Importa módulos de arquivos Zip
----------------------------------------------------

'Código-fonte:' Lib/zipimport.py(1)

__________________________________________________________________

Este módulo adiciona a capacidade de importar módulos Python (‘*.py’,
‘*.pyc’) e pacotes de arquivos em formato ZIP. Normalmente, não é
necessário usar o módulo *note zipimport: 132. explicitamente; ele é
usado automaticamente pelo mecanismo embutido no *note import: 5e2. para
itens *note sys.path: 3b4. que são caminhos para arquivos ZIP.

Normalmente, *note sys.path: 3b4. é uma lista de nomes de diretórios
como strings.  Este módulo também permite que um item de *note sys.path:
3b4. seja uma string que nomeia um arquivo ZIP. O arquivo ZIP pode
conter uma estrutura de subdiretório para suportar importações de
pacotes, e um caminho dentro do arquivo pode ser especificado para
importar apenas de um subdiretório.  Por exemplo, o caminho
‘example.zip/lib/’ importaria apenas do subdiretório ‘lib/’ dentro do
arquivo.

Quaisquer arquivos podem estar presentes no arquivo ZIP, mas os
importadores são invocados apenas para os arquivos ‘.py’ e ‘.pyc’.  A
importação ZIP de módulos dinâmicos (‘.pyd’, ‘.so’) não é permitida.
Observe que, se um arquivo contiver apenas arquivos ‘.py’, o Python não
tentará modificá-lo adicionando o arquivo ‘.pyc’ correspondente, o que
significa que, se um arquivo ZIP não contiver arquivos ‘.pyc’, a
importação poderá ser bastante lenta.

Alterado na versão 3.13: Suporte para ZIP64.

Alterado na versão 3.8: Anteriormente, não havia suporte para arquivos
ZIP com um comentário de arquivo.

Ver também
..........

Nota da aplicação PKZIP(2)

     Documentação do formato de arquivo ZIP feita por Phil Katz, criador
     do formato e dos algoritmos usados.

PEP 273(3) - Import Modules from Zip Archives

     Escrito por James C. Ahlstrom, que também forneceu uma
     implementação.  O Python 2.3 segue a especificação em PEP 273(4),
     mas usa uma implementação escrita por Just van Rossum que utiliza
     os ganchos de importação descritos em PEP 302(5).

*note importlib: 77. - A importação do maquinário de importação

     Pacote que fornece os protocolos relevantes para todos os
     importadores implementarem.

Este módulo define uma exceção:

 -- Exceção: zipimport.ZipImportError

     Exceção levantada por objetos zipimporter.  É uma subclasse de
     *note ImportError: 419, portanto, também pode ser capturada como
     *note ImportError: 419.

* Menu:

* Objetos zipimporter::
* Exemplos: Exemplos<33>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/zipimport.py

   (2) https://pkware.cachefly.net/webdocs/casestudies/APPNOTE.TXT

   (3) https://peps.python.org/pep-0273/

   (4) https://peps.python.org/pep-0273/

   (5) https://peps.python.org/pep-0302/


File: python.info,  Node: Objetos zipimporter,  Next: Exemplos<33>,  Up: zipimport - Importa módulos de arquivos Zip

5.31.1.1 Objetos zipimporter
............................

*note zipimporter: 4747. é a classe para importar arquivos ZIP.

 -- Classe: zipimport.zipimporter (archivepath)

     Cria uma nova instância de zipimporter.  'archivepath' deve ser um
     caminho para um arquivo ZIP ou para um caminho específico dentro de
     um arquivo ZIP. Por exemplo, um 'archivepath' de ‘foo/bar.zip/lib’
     procurará módulos no diretório ‘lib’ dentro do arquivo ZIP
     ‘foo/bar.zip’ (desde que exista).

     *note ZipImportError: 4744. é levantada se 'archivepath' não
     apontar para um arquivo ZIP válido.

     Alterado na versão 3.12: Os métodos ‘find_loader()’ e
     ‘find_module()’, descontinuados na versão 3.10, foram removidos.
     Em vez disso, use *note find_spec(): 861.

      -- Método: create_module (spec)

          Implementação de *note importlib.abc.Loader.create_module():
          cce. que retorna *note None: 675. para solicitar
          explicitamente a semântica padrão.

          Adicionado na versão 3.10.

      -- Método: exec_module (module)

          Implementação de *note importlib.abc.Loader.exec_module():
          86e.

          Adicionado na versão 3.10.

      -- Método: find_spec (fullname, target=None)

          Uma implementação de *note
          importlib.abc.PathEntryFinder.find_spec(): 870.

          Adicionado na versão 3.10.

      -- Método: get_code (fullname)

          Retorna o objeto código para o módulo especificado.  Levanta
          *note ZipImportError: 4744. se o módulo não puder ser
          importado.

      -- Método: get_data (pathname)

          Retorna os dados associados a 'pathname'.  Levanta *note
          OSError: 417. se o arquivo não for encontrado.

          Alterado na versão 3.3: *note IOError: 108b. costumava ser
          levantada, agora ela é um apelido para *note OSError: 417.

      -- Método: get_filename (fullname)

          Retorna o valor que ‘__file__’ seria definido se o módulo
          especificado fosse importado.  Levanta *note ZipImportError:
          4744. se o módulo não puder ser importado.

          Adicionado na versão 3.1.

      -- Método: get_source (fullname)

          Retorna o código-fonte do módulo especificado.  Levanta *note
          ZipImportError: 4744. se o módulo não puder ser encontrado, e
          retorna *note None: 675. se o arquivo contiver o módulo, mas
          não tiver o código-fonte para ele.

      -- Método: is_package (fullname)

          Retorna ‘True’ se o módulo especificado por 'fullname' é um
          pacote.  Levanta *note ZipImportError: 4744. se o módulo não
          pode ser localizado.

      -- Método: load_module (fullname)

          Carrega o módulo especificado por 'fullname'.  'fullname' deve
          ser o nome completo (com pontos) do módulo.  Retorna o módulo
          importado em caso de sucesso e levanta *note ZipImportError:
          4744. em caso de falha.

          Descontinuado desde a versão 3.10: Use *note exec_module():
          312.

      -- Método: invalidate_caches ()

          Limpa o cache interno de informações sobre arquivos
          encontrados no arquivo ZIP.

          Adicionado na versão 3.10.

      -- Atributo: archive

          O nome do arquivo ZIP associado ao importador, sem um possível
          subcaminho.

      -- Atributo: prefix

          O subcaminho dentro do arquivo ZIP onde os módulos são
          pesquisados.  Esta é a string vazia para objetos zipimporter
          que apontam para a raiz do arquivo ZIP.

     Os atributos *note archive: 474d. e *note prefix: 474e, quando
     combinados com uma barra, são iguais ao argumento original
     'archivepath' fornecido ao construtor da *note zipimporter: 4747.


File: python.info,  Node: Exemplos<33>,  Prev: Objetos zipimporter,  Up: zipimport - Importa módulos de arquivos Zip

5.31.1.2 Exemplos
.................

Aqui está um exemplo que importa um módulo de um arquivo ZIP - observe
que o módulo *note zipimport: 132. não é usado explicitamente.

     $ unzip -l arquivo_exemplo.zip
     Archive:  arquivo_exemplo.zip
       Length     Date   Time    Name
      --------    ----   ----    ----
          8467  01-01-00 12:30   exemplo.py
      --------                   -------
          8467                   1 file

     >>> import sys
     >>> # Adiciona o arquivo para a frente do caminho de pesquisa de módulos
     >>> sys.path.insert(0, 'arquivo_exemplo.zip')
     >>> import exemplo
     >>> exemplo.__file__
     'arquivo_exemplo.zip/exemplo.py'


File: python.info,  Node: pkgutil — Utilitário de extensão de pacote,  Next: modulefinder — Procura módulos usados por um script,  Prev: zipimport - Importa módulos de arquivos Zip,  Up: Importando módulos

5.31.2 ‘pkgutil’ — Utilitário de extensão de pacote
---------------------------------------------------

'Código-fonte:' Lib/pkgutil.py(1)

__________________________________________________________________

Este módulo fornece utilitários para o sistema de importação, em
particular suporte a pacotes.

 -- Classe: pkgutil.ModuleInfo (module_finder, name, ispkg)

     Um namedtuple que contém um breve resumo das informações de um
     módulo.

     Adicionado na versão 3.6.

 -- Função: pkgutil.extend_path (path, name)

     Estende o caminho de pesquisa para os módulos que compõem um
     pacote.  O uso pretendido é colocar o seguinte código no
     ‘__init__.py’ de um pacote:

          from pkgutil import extend_path
          __path__ = extend_path(__path__, __name__)

     Para cada diretório em *note sys.path: 3b4. que tenha um
     subdiretório que corresponda ao nome do pacote, adiciona o
     subdiretório ao *note __path__: 1df4. do pacote.  Isto é útil se
     quisermos distribuir diferentes partes de um único pacote lógico
     como múltiplos diretórios.

     Também procura por arquivos ‘*.pkg’ que começam onde ‘*’
     corresponde ao argumento 'name'.  Este recurso é semelhante aos
     arquivos ‘*.pth’ (consulte o módulo *note site: c7. para mais
     informações), exceto que não considera casos especiais para linhas
     que começam com ‘import’.  Um arquivo ‘*.pkg’ é confiável por
     natureza: além de pular linhas em branco e ignorar comentários,
     todas as entradas encontradas em um arquivo ‘*.pkg’ são adicionadas
     ao caminho, independentemente de existirem ou não no sistema de
     arquivos (este é um recurso).

     Se o caminho de entrada não for uma lista (como é o caso de pacotes
     congelados), ele será retornado inalterado.  O caminho de entrada
     não é modificado; uma cópia estendida é retornada.  Os itens são
     anexados à cópia apenas no final.

     Presume-se que *note sys.path: 3b4. seja uma sequência.  Itens de
     *note sys.path: 3b4. que não sejam strings referentes a diretórios
     existentes são ignorados.  Itens Unicode em *note sys.path: 3b4.
     que causam erros quando usados como nomes de arquivo podem fazer
     com que esta função levante uma exceção (em linha com o
     comportamento de *note os.path.isdir(): a1a.).

 -- Função: pkgutil.find_loader (fullname)

     Recupera o *note carregador: 17a4. de um módulo para o 'fullname'
     fornecido.

     Este é um invólucro para retrocompatibilidade em torno de *note
     importlib.util.find_spec(): 2cd. que converte a maioria das falhas
     em *note ImportError: 419. e retorna apenas o carregador, em vez do
     *note importlib.machinery.ModuleSpec: 1fee. completo.

     Alterado na versão 3.3: Atualizado para ser baseado diretamente em
     *note importlib: 77. em vez de depender da emulação de importação
     interna do pacote da PEP 302(2).

     Alterado na versão 3.4: Atualizado para ser baseado na PEP 451(3)

     Descontinuado desde a versão 3.12, será removido na versão 3.14:
     Use *note importlib.util.find_spec(): 2cd.

 -- Função: pkgutil.get_importer (path_item)

     Recupera um *note localizador: 20ae. para o 'path_item' fornecido.

     O localizador retornado é armazenado em cache em *note
     sys.path_importer_cache: 5e4. se ele foi criado recentemente por um
     gancho de caminho.

     O cache (ou parte dele) pode ser limpo manualmente se uma nova
     varredura de *note sys.path_hooks: 105a. for necessária.

     Alterado na versão 3.3: Atualizado para ser baseado diretamente em
     *note importlib: 77. em vez de depender da emulação de importação
     interna do pacote da PEP 302(4).

 -- Função: pkgutil.get_loader (module_or_name)

     Obtém um objeto *note carregador: 17a4. para 'module_or_name'.

     Se o módulo ou pacote estiver acessível pelo mecanismo de
     importação normal, um invólucro em torno da parte relevante desse
     maquinário será retornado.  Retorna ‘None’ se o módulo não puder
     ser encontrado ou importado.  Se o módulo nomeado ainda não tiver
     sido importado, o pacote que o contém (se houver) será importado
     para estabelecer o pacote ‘__path__’.

     Alterado na versão 3.3: Atualizado para ser baseado diretamente em
     *note importlib: 77. em vez de depender da emulação de importação
     interna do pacote da PEP 302(5).

     Alterado na versão 3.4: Atualizado para ser baseado na PEP 451(6)

     Descontinuado desde a versão 3.12, será removido na versão 3.14:
     Use *note importlib.util.find_spec(): 2cd.

 -- Função: pkgutil.iter_importers (fullname='')

     Produz objetos *note localizador: 20ae. para o nome do módulo
     fornecido.

     Se 'fullname' contiver ‘'.'’, os localizadores serão para o pacote
     que contém 'fullname', caso contrário, serão todos os localizadores
     de nível superior registrados (ou seja, aqueles em *note
     sys.meta_path: d4d. e *note sys.path_hooks: 105a.).

     Se o módulo nomeado estiver em um pacote, esse pacote será
     importado como um efeito colateral da invocação desta função.

     Se nenhum nome de módulo for especificado, todos os localizadores
     de nível superior serão produzidos.

     Alterado na versão 3.3: Atualizado para ser baseado diretamente em
     *note importlib: 77. em vez de depender da emulação de importação
     interna do pacote da PEP 302(7).

 -- Função: pkgutil.iter_modules (path=None, prefix='')

     Levanta *note ModuleInfo: d6f. para todos os submódulos em 'path'
     ou, se 'path' for ‘None’, todos os módulos de nível superior em
     *note sys.path: 3b4.

     'path' deve ser ‘None’ ou uma lista de caminhos para procurar
     módulos.

     'prefix' é uma string a ser exibida na frente de cada nome de
     módulo na saída.

          Nota: Funciona apenas para um *note localizador: 20ae. que
          define um método ‘iter_modules()’.  Esta interface não é
          padrão, portanto, o módulo também fornece implementações para
          *note importlib.machinery.FileFinder: 10ab. e *note
          zipimport.zipimporter: 4747.

     Alterado na versão 3.3: Atualizado para ser baseado diretamente em
     *note importlib: 77. em vez de depender da emulação de importação
     interna do pacote da PEP 302(8).

 -- Função: pkgutil.walk_packages (path=None, prefix='', onerror=None)

     Levanta *note ModuleInfo: d6f. para todos os módulos recursivamente
     em 'path', ou, se 'path' for ‘None’, todos os módulos acessíveis.

     'path' deve ser ‘None’ ou uma lista de caminhos para procurar
     módulos.

     'prefix' é uma string a ser exibida na frente de cada nome de
     módulo na saída.

     Observe que esta função deve importar todos os 'pacotes' ('não'
     todos os módulos!)  no caminho 'path' fornecido, para acessar o
     atributo ‘__path__’ para encontrar submódulos.

     'onerror' é uma função que é chamada com um argumento (o nome do
     pacote que estava sendo importado) caso ocorra alguma exceção
     durante a tentativa de importação de um pacote.  Se nenhuma função
     'onerror' for fornecida, *note ImportError: 419.s são capturadas e
     ignoradas, enquanto todas as outras exceções são propagadas,
     encerrando a busca.

     Exemplos:

          # lista todos os módulos que o python consegue acessars
          walk_packages()

          # lista todos os submódulos de ctypes
          walk_packages(ctypes.__path__, ctypes.__name__ + '.')

          Nota: Funciona apenas para um *note localizador: 20ae. que
          define um método ‘iter_modules()’.  Esta interface não é
          padrão, portanto, o módulo também fornece implementações para
          *note importlib.machinery.FileFinder: 10ab. e *note
          zipimport.zipimporter: 4747.

     Alterado na versão 3.3: Atualizado para ser baseado diretamente em
     *note importlib: 77. em vez de depender da emulação de importação
     interna do pacote da PEP 302(9).

 -- Função: pkgutil.get_data (package, resource)

     Obtém um recurso de um pacote.

     Este é um invólucro para a API *note get_data: 4756. do *note
     carregador: 17a4.  O argumento 'package' deve ser o nome de um
     pacote, no formato de módulo padrão (‘foo.bar’).  O argumento
     'resource' deve estar no formato de um nome de arquivo relativo,
     usando ‘/’ como separador de caminho.  O nome do diretório pai ‘..’
     não é permitido, nem um nome raiz (começando com ‘/’).

     A função retorna uma string binária que é o conteúdo do recurso
     especificado.

     Para pacotes localizados no sistema de arquivos, que já foram
     importados, isso é o equivalente aproximado de:

          d = os.path.dirname(sys.modules[package].__file__)
          data = open(os.path.join(d, resource), 'rb').read()

     Se o pacote não puder ser localizado ou carregado, ou se usar um
     *note carregador: 17a4. que não oferece suporte a *note get_data:
     4756, ‘None’ será retornado.  Em particular, o *note carregador:
     17a4. para *note pacotes de espaço de nomes: 1dee. não oferece
     suporte a *note get_data: 4756.

 -- Função: pkgutil.resolve_name (name)

     Resolve um nome a um objeto.

     Essa funcionalidade é usada em vários lugares na biblioteca padrão
     (veja bpo-12915(10)) - e funcionalidades equivalentes também estão
     amplamente utilizadas em pacotes de terceiros, como setuptools,
     Django e Pyramid.

     Espera-se que 'name' seja uma string em um dos seguintes formatos,
     onde W é uma abreviação para um identificador Python válido e ponto
     representa um ponto literal nessas pseudo-regexes:

        * ‘W(.W)*’

        * ‘W(.W)*:(W(.W)*)?’

     A primeira forma destina-se apenas à retrocompatibilidade.  Ela
     presume que parte do nome pontilhado seja um pacote e o restante
     seja um objeto em algum lugar dentro desse pacote, possivelmente
     aninhado dentro de outros objetos.  Como o ponto onde o pacote
     termina e a hierarquia de objetos começa não pode ser inferido por
     inspeção, tentativas repetidas de importação devem ser feitas com
     esta forma.

     Na segunda forma, o chamador deixa claro o ponto de divisão por
     meio de um caractere de dois pontos: o nome pontilhado à esquerda
     do caractere de dois pontos representa um pacote a ser importado, e
     o nome pontilhado à direita representa a hierarquia de objetos
     dentro desse pacote.  Apenas uma importação é necessária nesta
     forma.  Se terminar com caractere de dois pontos, um objeto de
     módulo será retornado.

     A função retornará um objeto (que pode ser um módulo) ou levantará
     uma das seguintes exceções:

     *note ValueError: 202. – se 'name' não estiver em um formato
     reconhecido.

     *note ImportError: 419. – se uma importação falhou quando não
     deveria.

     *note AttributeError: 34b. – Se ocorrer uma falha ao percorrer a
     hierarquia de objetos dentro do pacote importado para chegar ao
     objeto desejado.

     Adicionado na versão 3.9.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/pkgutil.py

   (2) https://peps.python.org/pep-0302/

   (3) https://peps.python.org/pep-0451/

   (4) https://peps.python.org/pep-0302/

   (5) https://peps.python.org/pep-0302/

   (6) https://peps.python.org/pep-0451/

   (7) https://peps.python.org/pep-0302/

   (8) https://peps.python.org/pep-0302/

   (9) https://peps.python.org/pep-0302/

   (10) https://bugs.python.org/issue?@action=redirect&bpo=12915


File: python.info,  Node: modulefinder — Procura módulos usados por um script,  Next: runpy — Localizando e executando módulos Python,  Prev: pkgutil — Utilitário de extensão de pacote,  Up: Importando módulos

5.31.3 ‘modulefinder’ — Procura módulos usados por um script
------------------------------------------------------------

'Código-fonte:' Lib/modulefinder.py(1)

__________________________________________________________________

Este módulo fornece uma classe *note ModuleFinder: 1b7a. que pode ser
usada para determinar o conjunto de módulos importados por um script.  O
‘modulefinder.py’ também pode ser executado como um script, fornecendo o
nome do arquivo de um script Python como seu argumento, após o qual um
relatório dos módulos importados será impresso.

 -- Função: modulefinder.AddPackagePath (pkg_name, path)

     Registra que o pacote chamado 'pkg_name' pode ser encontrado no
     caminho especificado em 'path'

 -- Função: modulefinder.ReplacePackage (oldname, newname)

     Permite especificar que o módulo chamado 'oldname' é de fato o
     pacote chamado 'newname'.

 -- Classe: modulefinder.ModuleFinder (path=None, debug=0, excludes=[],
          replace_paths=[])

     Esta classe fornece os métodos *note run_script(): 475d. e *note
     report(): 475e. para determinar o conjunto de módulos importados
     por um script.  'path' pode ser uma lista de diretórios para
     procurar por módulos; se não especificado, ‘sys.path’ é usado.
     'debug' define o nível de depuração; valores mais altos fazem a
     classe imprimir mensagens de depuração sobre o que está fazendo.
     'excludes' é uma lista de nomes de módulos a serem excluídos da
     análise.  'replace_paths' é uma lista de tuplas ‘(oldpath,
     newpath)’ que serão substituídas nos caminhos dos módulos.

      -- Método: report ()

          Imprime um relatório na saída padrão que lista os módulos
          importados pelo script e seus caminhos, bem como os módulos
          que estão faltando ou parecem estar ausentes.

      -- Método: run_script (pathname)

          Analisa o conteúdo do arquivo 'pathname', que deve conter o
          código Python.

      -- Atributo: modules

          Um nome de módulo de mapeamento de dicionário para módulos.
          Veja *note Exemplo de uso de ModuleFinder: 4760.

* Menu:

* Exemplo de uso de ModuleFinder::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/modulefinder.py


File: python.info,  Node: Exemplo de uso de ModuleFinder,  Up: modulefinder — Procura módulos usados por um script

5.31.3.1 Exemplo de uso de ‘ModuleFinder’
.........................................

O script que será analisado posteriormente (bacon.py):

     import re, itertools

     try:
         import baconhameggs
     except ImportError:
         pass

     try:
         import guido.python.ham
     except ImportError:
         pass

O script que irá gerar o relatório de bacon.py:

     from modulefinder import ModuleFinder

     finder = ModuleFinder()
     finder.run_script('bacon.py')

     print('Loaded modules:')
     for name, mod in finder.modules.items():
         print('%s: ' % name, end='')
         print(','.join(list(mod.globalnames.keys())[:3]))

     print('-'*50)
     print('Modules not imported:')
     print('\n'.join(finder.badmodules.keys()))

Exemplo de saída (pode variar dependendo da arquitetura):

     Loaded modules:
     _types:
     copyreg:  _inverted_registry,_slotnames,__all__
     re._compiler:  isstring,_sre,_optimize_unicode
     _sre:
     re._constants:  REPEAT_ONE,makedict,AT_END_LINE
     sys:
     re:  __module__,finditer,_expand
     itertools:
     __main__:  re,itertools,baconhameggs
     re._parser:  _PATTERNENDERS,SRE_FLAG_UNICODE
     array:
     types:  __module__,IntType,TypeType
     ---------------------------------------------------
     Modules not imported:
     guido.python.ham
     baconhameggs


File: python.info,  Node: runpy — Localizando e executando módulos Python,  Next: importlib — A implementação de import,  Prev: modulefinder — Procura módulos usados por um script,  Up: Importando módulos

5.31.4 ‘runpy’ — Localizando e executando módulos Python
--------------------------------------------------------

'Código-fonte:' Lib/runpy.py(1)

__________________________________________________________________

O módulo *note runpy: be. é usado para localizar e executar módulos
Python sem importá-los primeiro.  Seu principal uso é implementar a
opção de linha de comando *note -m: 5e1. que permite que os scripts
sejam localizados usando o espaço de nomes do módulo Python em vez do
sistema de arquivos.

Observe que este 'não' é um módulo isolado - todo o código é executado
no processo atual, e quaisquer efeitos colaterais (como importações em
cache de outros módulos) irão permanecer em vigor após o retorno da
função.

Além disso, quaisquer funções e classes definidas pelo código executado
não têm garantia de funcionar corretamente após o retorno de uma função
*note runpy: be.  Se essa limitação não for aceitável para um
determinado caso de uso, *note importlib: 77. provavelmente será uma
escolha mais adequada do que este módulo.

O módulo *note runpy: be. fornece duas funções:

 -- Função: runpy.run_module (mod_name, init_globals=None,
          run_name=None, alter_sys=False)

     Executa o código do módulo especificado e retorna o dicionário de
     globals do módulo resultante.  O código do módulo é localizado
     primeiro usando o mecanismo de importação padrão (consulte PEP
     302(2) para detalhes) e então executado em um novo espaço de nomes
     de módulo.

     O argumento 'mod_name' deve ser um nome de módulo absoluto.  Se o
     nome do módulo se referir a um pacote ao invés de um módulo normal,
     então esse pacote é importado e o submódulo *note __main__: 1.
     dentro desse pacote é então executado e o dicionário global do
     módulo resultante retornado.

     O argumento opcional de dicionário 'init_globals' pode ser usado
     para preencher previamente o dicionário global do módulo antes do
     código ser executado.  'init_globals' não será modificado.  Se
     qualquer uma das variáveis globais especiais abaixo for definida em
     'init_globals', estas definições serão substituídas por *note
     run_module(): 1922.

     As variáveis globais especiais ‘__name__’, ‘__spec__’, ‘__file__’,
     ‘__cached__’, ‘__loader__’ e ‘__package__’ são definidas no
     dicionário global antes que o código do módulo seja executado
     (Observe que este é um conjunto mínimo de variáveis - outras
     variáveis podem ser definidas implicitamente como um detalhe de
     implementação do interpretador).

     ‘__name__’ é definido como 'run_name' se este argumento opcional
     não for *note None: 675, para ‘mod_name + '.__main__'’ se o módulo
     nomeado for um pacote e para o argumento 'mod_name' caso contrário
     .

     ‘__spec__’ será definido adequadamente para o módulo 'efetivamente'
     importado (isto é, ‘__spec__.name’ vai sempre ser 'mod_name' ou
     ‘mod_name + '.__main__'’, nunca 'run_name').

     ‘__file__’, ‘__cached__’, ‘__loader__’ e ‘__package__’ são *note
     definidos como normal: 20a4. com base no spec de módulo.

     Se o argumento 'alter_sys' for fornecido e for avaliado como *note
     True: c27, então ‘sys.argv[0]’ será atualizado com o valor de
     ‘__file__’ e ‘sys.modules[__name__]’ é atualizado com um objeto de
     módulo temporário para o módulo que está sendo executado.  Ambos
     ‘sys.argv[0]’ e ‘sys.modules[__name__]’ são restaurados para seus
     valores originais antes que a função retorne.

     Note que esta manipulação de *note sys: d9. não é segura para
     thread.  Outras threads podem ver o módulo parcialmente
     inicializado, bem como a lista alterada de argumentos.  É
     recomendado que o módulo ‘sys’ seja deixado sozinho ao invocar esta
     função a partir do código encadeado.

     Ver também
     ..........

     A opção *note -m: 5e1. oferece funcionalidade equivalente na linha
     de comando.

     Alterado na versão 3.1: Adicionada capacidade de executar pacotes
     procurando por um submódulo *note __main__: 1.

     Alterado na versão 3.2: Adicionada a variável global ‘__cached__’
     (veja PEP 3147(3)).

     Alterado na versão 3.4: Atualizado para aproveitar o recurso de
     spec de módulo adicionado por PEP 451(4).  Isso permite que
     ‘__cached__’ seja configurado corretamente para módulos executados
     desta forma, assim como garante que o nome real do módulo esteja
     sempre acessível como ‘__spec__.name’.

     Alterado na versão 3.12: A definição de ‘__cached__’, ‘__loader__’
     e ‘__package__’ foi descontinuada.  Veja *note ModuleSpec: 1fee.
     para alternativas.

 -- Função: runpy.run_path (path_name, init_globals=None, run_name=None)

     Executa o código no local do sistema de arquivos nomeado e retorna
     o dicionário de globals do módulo resultante.  Assim como um nome
     de script fornecido à linha de comando CPython, 'file_path' pode se
     referir a um arquivo fonte Python, um arquivo compilado em bytecode
     ou uma entrada válida de *note sys.path: 3b4. contendo um módulo
     *note __main__: 1. (por exemplo, um arquivo zip contendo um arquivo
     de nível superior ‘__main__.py’).

     Para um script simples, o código especificado é simplesmente
     executado em um novo espaço de nomes de módulo.  Para uma entrada
     válida *note sys.path: 3b4. (normalmente um arquivo zip ou
     diretório), a entrada é primeiro adicionada ao início de
     ‘sys.path’.  A função então procura e executa um módulo *note
     __main__: 1. usando o caminho atualizado.  Observe que não há
     proteção especial contra invocar uma entrada ‘__main__’ existente
     localizada em outro lugar em ‘sys.path’ se não houver tal módulo no
     local especificado.

     O argumento opcional de dicionário 'init_globals' pode ser usado
     para preencher previamente o dicionário de globals do módulo antes
     do código ser executado.  'init_globals' não será modificado.  Se
     qualquer uma das variáveis globais especiais abaixo for definida em
     'init_globals', estas definições serão substituídas por *note
     run_path(): 181.

     As variáveis globais especiais ‘__name__’, ‘__spec__’, ‘__file__’,
     ‘__cached__’, ‘__loader__’ e ‘__package__’ são definidas no
     dicionário global antes que o código do módulo seja executado
     (Observe que este é um conjunto mínimo de variáveis - outras
     variáveis podem ser definidas implicitamente como um detalhe de
     implementação do interpretador).

     ‘__name__’ é definido como 'run_name' se este argumento opcional
     não for *note None: 675. e como ‘'<run_path>'’ caso contrário.

     Se 'file_path' fizer referência diretamente a um arquivo de script
     (seja como fonte ou como bytecode pré-compilado), então ‘__file__’
     será definido para 'file_path' e ‘__spec__’, ‘__cached__’,
     ‘__loader__’ e ‘__package__’ serão todos definidos como *note None:
     675.

     Se 'file_path' for uma referência a uma entrada válida de *note
     sys.path: 3b4, então ‘__spec__’ será definido apropriadamente para
     o módulo *note __main__: 1. importado (ou seja, ‘__spec__.name’
     sempre será ‘__main__’).  ‘__file__’, ‘__cached__’, ‘__loader__’ e
     ‘__package__’ serão *note definidos como normal: 20a4. com base no
     spec de módulo.

     Várias alterações também são feitas no módulo *note sys: d9.
     Primeiramente, *note sys.path: 3b4. pode ser alterado conforme
     descrito acima.  ‘sys.argv[0]’ é atualizado com o valor de
     'file_path' e ‘sys.modules[__name__]’ é atualizado com um objeto de
     módulo temporário para o módulo que está sendo executado.  Todas as
     modificações em itens em *note sys: d9. são revertidas antes que a
     função retorne.

     Note que, diferentemente de *note run_module(): 1922, as alterações
     feitas em *note sys: d9. não são opcionais nesta função, pois esses
     ajustes são essenciais para permitir a execução das entradas do
     *note sys.path: 3b4.  Como as limitações de segurança de threads
     ainda se aplicam, o uso dessa função no código encadeado deve ser
     serializado com a trava de importação ou delegado a um processo
     separado.

     Ver também
     ..........

     *note Opções de interface: 1eb3. para funcionalidade equivalente na
     linha de comando (‘python path/to/script’).

     Adicionado na versão 3.2.

     Alterado na versão 3.4: Atualizado para aproveitar o recurso de
     spec de módulo adicionado por PEP 451(5).  Isso permite que
     ‘__cached__’ seja definido corretamente no caso em que ‘__main__’ é
     importado de uma entrada *note sys.path: 3b4. válida em vez de ser
     executado diretamente.

     Alterado na versão 3.12: A definição de ‘__cached__’, ‘__loader__’
     e ‘__package__’ foi descontinuada.

Ver também
..........

PEP 338(6) – Executando módulos como scripts

     PEP escrita e implementada por Nick Coghlan.

PEP 366(7) – Importações relativas explícitas do módulo principal

     PEP escrita e implementada por Nick Coghlan.

PEP 451(8) – Um tipo ModuleSpec para o sistema de importação

     PEP escrita e implementada por Eric Snow

*note Linha de comando e ambiente: 1b36. - Detalhes da linha de comando
do CPython

A função *note importlib.import_module(): 518.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/runpy.py

   (2) https://peps.python.org/pep-0302/

   (3) https://peps.python.org/pep-3147/

   (4) https://peps.python.org/pep-0451/

   (5) https://peps.python.org/pep-0451/

   (6) https://peps.python.org/pep-0338/

   (7) https://peps.python.org/pep-0366/

   (8) https://peps.python.org/pep-0451/


File: python.info,  Node: importlib — A implementação de import,  Next: importlib resources – Leitura abertura e acesso a recursos de pacotes,  Prev: runpy — Localizando e executando módulos Python,  Up: Importando módulos

5.31.5 ‘importlib’ — A implementação de ‘import’
------------------------------------------------

Adicionado na versão 3.1.

'Código-fonte:' Lib/importlib/__init__.py(1)

__________________________________________________________________

* Menu:

* Introdução: Introdução<12>.
* Funções: Funções<12>.
* importlib.abc – classes base abstratas relacionadas a importação: importlib abc – classes base abstratas relacionadas a importação.
* importlib.machinery – Importadores e ganchos de caminho: importlib machinery – Importadores e ganchos de caminho.
* importlib.util – Utility code for importers: importlib util – Utility code for importers.
* Exemplos: Exemplos<34>.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/importlib/__init__.py


File: python.info,  Node: Introdução<12>,  Next: Funções<12>,  Up: importlib — A implementação de import

5.31.5.1 Introdução
...................

O pacote *note importlib: 77. tem três propósitos.

Uma é fornecer a implementação da instrução *note import: 5e2. (e,
portanto, por extensão, a função *note __import__(): 8da.) no
código-fonte Python.  Isso fornece uma implementação de ‘import’ que é
portável para qualquer interpretador Python.  Isso também fornece uma
implementação que é mais fácil de compreender do que aquela implementada
em uma linguagem de programação diferente do Python.

Dois, os componentes para implementar *note import: 5e2. são expostos
neste pacote, tornando mais fácil para os usuários criarem seus próprios
objetos personalizados (conhecidos genericamente como *note importador:
2184.) para participar do processo de importação.

Terceiro, o pacote contém módulos que expõem funcionalidades adicionais
para gerenciar aspectos de pacotes Python:

   * *note importlib.metadata: 7a. apresenta acesso a metadados de
     distribuições de terceiros.

   * *note importlib.resources: 7b. fornece rotinas para acessar
     “recursos” não codificados de pacotes Python.

Ver também
..........

*note A instrução import: 5e2.

     A referência da linguagem para a instrução *note import: 5e2.

Especificação dos pacotes(1)

     Especificação original dos pacotes.  Algumas semânticas mudaram
     desde a redação deste documento (por exemplo, redirecionamento
     baseado em ‘None’ em *note sys.modules: 1636.).

A função *note __import__(): 10a6.

     A instrução *note import: 5e2. é um açúcar sintático para esta
     função.

*note A inicialização do caminho de pesquisa de módulos sys.path: 1de6.

     A inicialização de *note sys.path: 3b4.

PEP 235(2)

     Importação em plataformas que diferenciam maiúsculo de minúsculo

PEP 263(3)

     Definindo codificações do código-fonte do Python

PEP 302(4)

     Novos ganchos de importação

PEP 328(5)

     Importações: Multilinha e Absoluto/Relativo

PEP 366(6)

     Importações relativas explícitas do módulo principal

PEP 420(7)

     Pacotes de espaço de nomes implícitos

PEP 451(8)

     Um tipo de ModuleSpec para o sistema de importação

PEP 488(9)

     Eliminação de arquivos PYO

PEP 489(10)

     Inicialização de módulo extensão multifase

PEP 552(11)

     pycs determinísticos

PEP 3120(12)

     Usando UTF-8 como fonte padrão de codificação

PEP 3147(13)

     Diretórios de repositório de PYC

   ---------- Footnotes ----------

   (1) https://www.python.org/doc/essays/packages/

   (2) https://peps.python.org/pep-0235/

   (3) https://peps.python.org/pep-0263/

   (4) https://peps.python.org/pep-0302/

   (5) https://peps.python.org/pep-0328/

   (6) https://peps.python.org/pep-0366/

   (7) https://peps.python.org/pep-0420/

   (8) https://peps.python.org/pep-0451/

   (9) https://peps.python.org/pep-0488/

   (10) https://peps.python.org/pep-0489/

   (11) https://peps.python.org/pep-0552/

   (12) https://peps.python.org/pep-3120/

   (13) https://peps.python.org/pep-3147/


File: python.info,  Node: Funções<12>,  Next: importlib abc – classes base abstratas relacionadas a importação,  Prev: Introdução<12>,  Up: importlib — A implementação de import

5.31.5.2 Funções
................

 -- Função: importlib.__import__ (name, globals=None, locals=None,
          fromlist=(), level=0)

     Uma implementação da função embutida *note __import__(): 8da.

          Nota: A importação programática de módulos deve usar *note
          import_module(): 518. em vez desta função.

 -- Função: importlib.import_module (name, package=None)

     Importa um módulo.  O argumento 'name' especifica qual módulo
     importar em termos absolutos ou relativos (por exemplo, ‘pkg.mod’
     ou ‘..mod’).  Se o nome for especificado em termos relativos, então
     o argumento 'package' deve ser definido como o nome do pacote que
     atuará como âncora para resolver o nome do pacote (por exemplo,
     ‘import_module('..mod', 'pkg.subpkg')’ importará ‘pkg.mod’).

     A função *note import_module(): 518. atua como um wrapper
     simplificador em torno de *note importlib.__import__(): 10a6.  Isso
     significa que toda a semântica da função é derivada de *note
     importlib.__import__(): 10a6.  A diferença mais importante entre
     essas duas funções é que *note import_module(): 518. retorna o
     pacote ou módulo especificado (por exemplo, ‘pkg.mod’), enquanto
     *note __import__(): 8da. retorna o pacote ou módulo de nível
     superior (por exemplo, ‘pkg’).

     Se você estiver importando dinamicamente um módulo que foi criado
     desde que o interpretador iniciou a execução (por exemplo, criou um
     arquivo fonte Python), você pode precisar chamar *note
     invalidate_caches(): c2a. para que o novo módulo seja notado pelo
     sistema de importação.

     Alterado na versão 3.3: Os pacotes pai são importados
     automaticamente.

 -- Função: importlib.invalidate_caches ()

     Invalida os caches internos dos localizadores armazenados em *note
     sys.meta_path: d4d.  Se um localizador implementar
     ‘invalidate_caches()’ então ele será chamado para realizar a
     invalidação.  Esta função deve ser chamada se algum módulo for
     criado/instalado enquanto seu programa estiver em execução para
     garantir que todos os localizadores notarão a existência do novo
     módulo.

     Adicionado na versão 3.3.

     Alterado na versão 3.10: Pacotes de espaço de nomes
     criados/instalados em um local *note sys.path: 3b4. diferente após
     o mesmo espaço de nomes já ter sido importado são notados.

 -- Função: importlib.reload (module)

     Recarrega um 'module' importado anteriormente.  O argumento deve
     ser um objeto módulo, portanto deve ter sido importado com êxito
     antes.  Isso é útil se você editou o arquivo fonte do módulo usando
     um editor externo e deseja experimentar a nova versão sem sair do
     interpretador Python.  O valor de retorno é o objeto módulo (que
     pode ser diferente se a reimportação fizer com que um objeto
     diferente seja colocado em *note sys.modules: 1636.).

     Quando *note reload(): 519. é executado:

        * O código do módulo Python é recompilado e o código em nível de
          módulo é reexecutado, definindo um novo conjunto de objetos
          que são vinculados a nomes no dicionário do módulo
          reutilizando o *note carregador: 17a4. que originalmente
          carregou o módulo.  A função ‘init’ dos módulos de extensão
          não é chamada uma segunda vez.

        * Tal como acontece com todos os outros objetos em Python, os
          objetos antigos só são recuperados depois que suas contagens
          de referências caem para zero.

        * Os nomes no espaço de nomes do módulo são atualizados para
          apontar para quaisquer objetos novos ou alterados.

        * Outras referências aos objetos antigos (como nomes externos ao
          módulo) não são religadas para se referir aos novos objetos e
          devem ser atualizadas em cada espaço de nomes onde ocorrem, se
          isso for desejado.

     Existem várias outras ressalvas:

     Quando um módulo é recarregado, seu dicionário (contendo as
     variáveis globais do módulo) é retido.  As redefinições de nomes
     vão substituir as definições antigas, portanto isso geralmente não
     é um problema.  Se a nova versão de um módulo não definir um nome
     definido pela versão antiga, a definição antiga permanecerá.  Este
     recurso pode ser usado para vantagem do módulo se ele mantiver uma
     tabela global ou cache de objetos – com uma instrução *note try:
     6e9. ele pode testar a presença da tabela e pular sua inicialização
     se desejar:

          try:
              cache
          except NameError:
              cache = {}

     Geralmente não é muito útil recarregar módulos embutidos ou
     carregados dinamicamente.  Recarregar *note sys: d9, *note
     __main__: 1, *note builtins: 12. e outros módulos principais não é
     recomendado.  Em muitos casos, os módulos de extensão não são
     projetados para serem inicializados mais de uma vez e podem falhar
     de maneiras arbitrárias quando recarregados.

     Se um módulo importa objetos de outro módulo usando *note from:
     12ee. … *note import: 5e2. …, chamar *note reload(): 519. para o
     outro módulo não redefine os objetos importados dele – uma maneira
     de contornar isso é executar novamente a instrução ‘from’, outra é
     usar ‘import’ e nomes qualificados ('module.name').

     Se um módulo instancia instâncias de uma classe, recarregar o
     módulo que define a classe não afeta as definições de método das
     instâncias – elas continuam a usar a definição de classe antiga.  O
     mesmo se aplica às classes derivadas.

     Adicionado na versão 3.4.

     Alterado na versão 3.7: *note ModuleNotFoundError: b5b. é levantada
     quando o módulo que está sendo recarregado não possui um *note
     ModuleSpec: 1fee.

          Aviso: This function is not thread-safe.  Calling it from
          multiple threads can result in unexpected behavior.  It’s
          recommended to use the *note threading.Lock: 176d. or other
          synchronization primitives for thread-safe module reloading.


File: python.info,  Node: importlib abc – classes base abstratas relacionadas a importação,  Next: importlib machinery – Importadores e ganchos de caminho,  Prev: Funções<12>,  Up: importlib — A implementação de import

5.31.5.3 ‘importlib.abc’ – classes base abstratas relacionadas a importação
...........................................................................

'Código-fonte:' Lib/importlib/abc.py(1)

__________________________________________________________________

O módulo *note importlib.abc: 78. contém todas as principais classes
base abstratas usadas por *note import: 5e2.  Algumas subclasses das
classes base abstratas principais também são fornecidas para ajudar na
implementação dss ABCs principais.

Hierarquia de ABC:

     object
      +-- MetaPathFinder
      +-- PathEntryFinder
      +-- Loader
           +-- ResourceLoader --------+
           +-- InspectLoader          |
                +-- ExecutionLoader --+
                                      +-- FileLoader
                                      +-- SourceLoader

 -- Classe: importlib.abc.MetaPathFinder

     Uma classe base abstrata que representa um *note localizador de
     metacaminho: 10a9.

     Adicionado na versão 3.3.

     Alterado na versão 3.10: Não é mais uma subclasse de ‘Finder’.

      -- Método: find_spec (fullname, path, target=None)

          Um método abstrato para encontrar um *note spec: 20a6. para o
          módulo especificado.  Se esta for uma importação de nível
          superior, 'path' será ‘None’.  Caso contrário, esta é uma
          busca por um subpacote ou módulo e 'path' será o valor de
          *note __path__: 1df4. do pacote pai.  Se um spec não puder ser
          encontrado, ‘None’ será retornado.  Quando passado, ‘target’ é
          um objeto de módulo que o localizador pode usar para fazer uma
          estimativa mais informada sobre qual spec retornar.  *note
          importlib.util.spec_from_loader(): 871. pode ser útil para
          implementar ‘MetaPathFinders’ concretos.

          Adicionado na versão 3.4.

      -- Método: invalidate_caches ()

          Um método opcional que, quando chamado, deve invalidar
          qualquer cache interno usado pelo localizador.  Usado por
          *note importlib.invalidate_caches(): c2a. ao invalidar os
          caches de todos os localizadores em *note sys.meta_path: d4d.

          Alterado na versão 3.4: Retorna ‘None’ quando chamado em vez
          de *note NotImplemented: 7d3.

 -- Classe: importlib.abc.PathEntryFinder

     Uma classe base abstrata que representa um *note localizador de
     entrada de caminho: 10aa.  Embora tenha algumas semelhanças com
     *note MetaPathFinder: 872, ‘PathEntryFinder’ deve ser usado apenas
     dentro do subsistema de importação baseado em caminho fornecido por
     *note importlib.machinery.PathFinder: 1059.

     Adicionado na versão 3.3.

     Alterado na versão 3.10: Não é mais uma subclasse de ‘Finder’.

      -- Método: find_spec (fullname, target=None)

          Um método abstrato para encontrar um *note spec: 20a6. para o
          módulo especificado.  O localizador irá procurar pelo módulo
          apenas dentro do *note entrada de caminho: 2193. ao qual ele
          está atribuído.  Se um spec não puder ser encontrado, ‘None’
          será retornado.  Quando passado, ‘target’ é um objeto de
          módulo que o localizador pode usar para fazer uma estimativa
          mais informada sobre qual spec retornar.  *note
          importlib.util.spec_from_loader(): 871. pode ser útil para
          implementar ‘PathEntryFinders’ concretos.

          Adicionado na versão 3.4.

      -- Método: invalidate_caches ()

          Um método opcional que, quando chamado, deve invalidar
          qualquer cache interno usado pelo localizador.  Usado por
          *note importlib.machinery.PathFinder.invalidate_caches(): c29.
          ao invalidar os caches de todos os localizadores em cache.

 -- Classe: importlib.abc.Loader

     Uma classe base abstrata para um *note carregador: 17a4.  Veja PEP
     302(2) para a definição exata de um carregador.

     Carregadores que desejam oferecer suporte a leitura de recursos
     devem implementar um método ‘get_resource_reader()’ conforme
     especificado por *note importlib.resources.abc.ResourceReader:
     476d.

     Alterado na versão 3.7: Introduzido o método opcional
     ‘get_resource_reader()’.

      -- Método: create_module (spec)

          Um método que retorna o objeto do módulo a ser usado ao
          importar um módulo.  Este método pode retornar ‘None’,
          indicando que a semântica padrão de criação do módulo deve
          ocorrer.

          Adicionado na versão 3.4.

          Alterado na versão 3.6: Este método não é mais opcional quando
          *note exec_module(): 86e. é definido.

      -- Método: exec_module (module)

          Um método abstrato que executa o módulo em seu próprio espaço
          de nomes quando um módulo é importado ou recarregado.  O
          módulo já deve estar inicializado quando *note exec_module():
          86e. for chamado.  Quando este método existir, *note
          create_module(): cce. deve ser definido.

          Adicionado na versão 3.4.

          Alterado na versão 3.6: *note create_module(): cce. deve ser
          definido.

      -- Método: load_module (fullname)

          Um método legado para carregar um módulo.  Se o módulo não
          puder ser carregado, *note ImportError: 419. será levantada,
          caso contrário, o módulo carregado será retornado.

          Se o módulo solicitado já existir em *note sys.modules: 1636,
          esse módulo deverá ser usado e recarregado.  Caso contrário, o
          carregador deve criar um novo módulo e inseri-lo em *note
          sys.modules: 1636. antes de qualquer carregamento começar,
          para evitar a recursão da importação.  Se o carregador inseriu
          um módulo e o carregamento falhar, ele deverá ser removido
          pelo carregador de *note sys.modules: 1636.; módulos já em
          *note sys.modules: 1636. antes do carregador iniciar a
          execução devem ser deixados sozinhos.

          O carregador deve definir vários atributos no módulo (observe
          que alguns desses atributos podem mudar quando um módulo é
          recarregado):

             - *note module.__name__: 13d2.

             - *note module.__file__: 20ad.

             - *note module.__cached__: 2d5. '(descontinuado)'

             - *note module.__path__: 1df4.

             - *note module.__package__: 2d7. '(descontinuado)'

             - *note module.__loader__: 2e2. '(descontinuado)'

          Quando *note exec_module(): 86e. está disponível, então a
          funcionalidade compatível com versões anteriores é fornecida.

          Alterado na versão 3.4: Levanta *note ImportError: 419. quando
          chamado em vez de *note NotImplementedError: 228.
          Funcionalidade fornecida quando *note exec_module(): 86e. está
          disponível.

          Descontinuado desde a versão 3.4, será removido na versão
          3.15: A API recomendada para carregar um módulo é *note
          exec_module(): 86e. (e *note create_module(): cce.).  Os
          carregadores devem implementá-lo em vez de *note
          load_module(): 86d.  O mecanismo de importação cuida de todas
          as outras responsabilidades de *note load_module(): 86d.
          quando *note exec_module(): 86e. é implementado.

 -- Classe: importlib.abc.ResourceLoader

     'Substituída por TraversableResources'

          Uma classe base abstrata para um *note carregador: 17a4. que
          implementa o protocolo opcional PEP 302(3) para carregar
          recursos arbitrários do back-end de armazenamento.

          Descontinuado desde a versão 3.7: Este ABC foi descontinuado
          em favor do suporte ao carregamento de recursos por meio de
          *note importlib.resources.abc.TraversableResources: 2c5.

           -- Método: abstractmethod get_data (path)

                    Um método abstrato para retornar os bytes dos dados
                    localizados em 'path'.  Carregadores que possuem um
                    backend de armazenamento arquivo ou similar que
                    permite o armazenamento de dados arbitrários podem
                    implementar esse método abstrato para fornecer
                    acesso direto aos dados armazenados.  *note OSError:
                    417. deve ser levantada se o 'path' não puder ser
                    encontrado.  Espera-se que o 'path' seja construído
                    usando o atributo *note __file__: 20ad. de um módulo
                    ou um item de *note __path__: 1df4. de um pacote.

                    Alterado na versão 3.4: Levanta *note OSError: 417.
                    em vez de *note NotImplementedError: 228.

 -- Classe: importlib.abc.InspectLoader

     Uma classe base abstrata para um *note carregador: 17a4. que
     implementa o protocolo opcional da PEP 302(4) para carregadores que
     inspecionam módulos.

      -- Método: get_code (fullname)

          Retorna o objeto de código para um módulo, ou ‘None’ se o
          módulo não tiver um objeto código (como seria o caso, por
          exemplo, para um módulo embutido).  Levanta um *note
          ImportError: 419. se o carregador não conseguir encontrar o
          módulo solicitado.

               Nota: Embora o método tenha uma implementação padrão,
               sugere-se que ele seja substituído, se possível, para
               desempenho.

          Alterado na versão 3.4: Não é mais abstrato e uma
          implementação concreta é fornecida.

      -- Método: abstractmethod get_source (fullname)

               Um método abstrato para retornar a fonte de um módulo.
               Ele é retornado como uma string de texto usando *note
               novas linhas universais: d5c, traduzindo todos os
               separadores de linha reconhecidos em caracteres ‘'\n'’.
               Retorna ‘None’ se nenhuma fonte estiver disponível (por
               exemplo, um módulo embutido).  Levanta *note ImportError:
               419. se o carregador não puder encontrar o módulo
               especificado.

               Alterado na versão 3.4: Levanta *note ImportError: 419.
               em vez de *note NotImplementedError: 228.

      -- Método: is_package (fullname)

          Um método opcional para retornar um valor verdadeiro se o
          módulo for um pacote, um valor falso caso contrário.  *note
          ImportError: 419. é levantada se o *note carregador: 17a4. não
          puder encontrar o módulo.

          Alterado na versão 3.4: Levanta *note ImportError: 419. em vez
          de *note NotImplementedError: 228.

      -- Método: static source_to_code (data, path='<string>')

          Cria um objeto código a partir de código-fonte Python

          O argumento 'data' pode ser qualquer coisa a qual a função
          *note compile(): 192. tenha suporte (por exemplo, string ou
          bytes).  O argumento 'path' deve ser o “caminho” de onde o
          código-fonte se originou, o que pode ser um conceito abstrato
          (por exemplo, local em um arquivo zip).

          Com o objeto de código subsequente, é possível executá-lo em
          um módulo executando ‘exec(code, module.__dict__)’.

          Adicionado na versão 3.4.

          Alterado na versão 3.5: O método foi tornado estático.

      -- Método: exec_module (module)

          Implementação de *note Loader.exec_module(): 86e.

          Adicionado na versão 3.4.

      -- Método: load_module (fullname)

          Implementação de *note Loader.load_module(): 86d.

          Descontinuado desde a versão 3.4, será removido na versão
          3.15: use *note exec_module(): 1048.

 -- Classe: importlib.abc.ExecutionLoader

     Uma classe base abstrata que herda de *note InspectLoader: f88.
     que, quando implementada, ajuda um módulo a ser executado como um
     script.  A ABC representa um protocolo opcional da PEP 302(5).

      -- Método: abstractmethod get_filename (fullname)

               Um método abstrato que deve retornar o valor de *note
               __file__: 20ad. para o módulo especificado.  Se nenhum
               caminho estiver disponível, *note ImportError: 419. é
               levantada.

               Se o código-fonte estiver disponível, o método deverá
               retornar o caminho para o arquivo fonte,
               independentemente de um bytecode ter sido usado para
               carregar o módulo.

               Alterado na versão 3.4: Levanta *note ImportError: 419.
               em vez de *note NotImplementedError: 228.

 -- Classe: importlib.abc.FileLoader (fullname, path)

     Uma classe base abstrata que herda de *note ResourceLoader: c02. e
     *note ExecutionLoader: 4770, fornecendo implementações concretas de
     *note ResourceLoader.get_data(): 4756. e *note
     ExecutionLoader.get_filename(): 4771.

     O argumento 'fullname' é um nome totalmente resolvido do módulo que
     o carregador deve manipular.  O argumento 'path' é o caminho para o
     arquivo do módulo.

     Adicionado na versão 3.3.

      -- Atributo: name

          O nome do módulo que o carregador pode manipular.

      -- Atributo: path

          Caminho para o arquivo do módulo

      -- Método: load_module (fullname)

          Chama ‘load_module()’ do super.

          Descontinuado desde a versão 3.4, será removido na versão
          3.15: Use *note Loader.exec_module(): 86e.

      -- Método: abstractmethod get_filename (fullname)

          Retorna *note path: 4773.

      -- Método: abstractmethod get_data (path)

          Lê 'caminho' como um arquivo binário e retorna os bytes dele.

 -- Classe: importlib.abc.SourceLoader

     Uma classe base abstrata para implementar o carregamento de arquivo
     fonte (e opcionalmente bytecode).  A classe herda de *note
     ResourceLoader: c02. e *note ExecutionLoader: 4770, exigindo a
     implementação de:

        * *note ResourceLoader.get_data(): 4756.

        * 
          *note ExecutionLoader.get_filename(): 4771.

               Deve retornar apenas o caminho para o arquivo fonte; o
               carregamento sem fonte não é suportado.

     Os métodos abstratos definidos por esta classe são para adicionar
     suporte opcional ao arquivo bytecode.  Não implementar esses
     métodos opcionais (ou fazer com que eles levantem *note
     NotImplementedError: 228.) faz com que o carregador funcione apenas
     com código-fonte.  Implementar os métodos permite que o carregador
     funcione com arquivos de código-fonte 'e' bytecode; ele não permite
     carregamento 'sem fonte' onde apenas o bytecode é fornecido.
     Arquivos de bytecode são uma otimização para acelerar o
     carregamento removendo a etapa de análise do compilador do Python
     e, portanto, nenhuma API específica de bytecode é exposta.

      -- Método: path_stats (path)

          Método abstrato opcional que retorna um *note dict: 256.
          contendo metadados sobre o caminho especificado.  As chaves de
          dicionário suportadas são:

             - ‘'mtime'’ (obrigatório): um número inteiro ou de ponto
               flutuante que representa o tempo de modificação do
               código-fonte;

             - ‘'size'’ (opcional): o tamanho em bytes do código-fonte.

          Quaisquer outras chaves no dicionário são ignoradas, para
          permitir extensões futuras.  Se o caminho não puder ser
          manipulado, *note OSError: 417. é levantada.

          Adicionado na versão 3.3.

          Alterado na versão 3.4: Levanta *note OSError: 417. em vez de
          *note NotImplementedError: 228.

      -- Método: path_mtime (path)

          Método abstrato opcional que retorna o horário de modificação
          do caminho especificado.

          Descontinuado desde a versão 3.3: Este método foi
          descontinuado em favor de *note path_stats(): 11c9.  Você não
          precisa implementá-lo, mas ele ainda está disponível para fins
          de compatibilidade.  Levanta *note OSError: 417. se o caminho
          não puder ser manipulado.

          Alterado na versão 3.4: Levanta *note OSError: 417. em vez de
          *note NotImplementedError: 228.

      -- Método: set_data (path, data)

          Método abstrato opcional que grava os bytes especificados em
          um caminho de arquivo.  Quaisquer diretórios intermediários
          que não existam devem ser criados automaticamente.

          Quando a gravação no caminho falhar porque o caminho é somente
          leitura (*note errno.EACCES: 2444./*note PermissionError:
          d65.), não propaga a exceção.

          Alterado na versão 3.4: Não mais levanta *note
          NotImplementedError: 228. quando chamado.

      -- Método: get_code (fullname)

          Implementação concreta de *note InspectLoader.get_code(): f89.

      -- Método: exec_module (module)

          Implementação concreta de *note Loader.exec_module(): 86e.

          Adicionado na versão 3.4.

      -- Método: load_module (fullname)

          Implementação concreta de *note Loader.load_module(): 86d.

          Descontinuado desde a versão 3.4, será removido na versão
          3.15: Use *note exec_module(): 1049.

      -- Método: get_source (fullname)

          Implementação concreta de *note InspectLoader.get_source():
          f8c.

      -- Método: is_package (fullname)

          Implementação concreta de *note InspectLoader.is_package():
          476e.  Um módulo é determinado como um pacote se seu caminho
          de arquivo (conforme fornecido por *note
          ExecutionLoader.get_filename(): 4771.) for um arquivo chamado
          ‘__init__’ quando a extensão do arquivo for removida 'e' o
          nome do módulo em si não terminar em ‘__init__’.

 -- Classe: importlib.abc.ResourceReader

     'Substituída por TraversableResources'

     Uma *note classe base abstrata: 11f5. para fornecer a capacidade de
     ler 'recursos'.

     Da perspectiva deste ABC, um 'recurso' é um artefato binário que é
     enviado dentro de um pacote.  Normalmente isso é algo como um
     arquivo de dados que fica próximo ao arquivo ‘__init__.py’ do
     pacote.  O objetivo desta classe é ajudar a abstrair o acesso a
     tais arquivos de dados para que não importe se o pacote e seu(s)
     arquivo(s) de dados estão armazenados, por exemplo, em um arquivo
     zip versus no sistema de arquivos.

     Para qualquer um dos métodos desta classe, espera-se que o
     argumento 'resource' seja um *note objeto caminho ou similar: 2a0.
     que representa conceitualmente apenas um nome de arquivo.  Isso
     significa que nenhum caminho de subdiretório deve ser incluído no
     argumento 'resource'.  Isso ocorre porque a localização do pacote
     para o qual o leitor se destina, atua como o “diretório”.
     Portanto, a metáfora para diretórios e nomes de arquivos são
     pacotes e recursos, respectivamente.  É também por isso que se
     espera que as instâncias dessa classe se correlacionem diretamente
     a um pacote específico (em vez de representar potencialmente vários
     pacotes ou um módulo).

     Carregadores que desejam oferecer suporte à leitura de recursos
     devem fornecer um método chamado
     ‘get_resource_reader(nomecompleto)’ que retorna um objeto
     implementando esta interface ABC. Se o módulo especificado por
     nomecompleto não for um pacote, este método deve retornar *note
     None: 675.  Um objeto compatível com este ABC só deve ser retornado
     quando o módulo especificado for um pacote.

     Adicionado na versão 3.7.

     Descontinuado desde a versão 3.12, será removido na versão 3.14:
     Use *note importlib.resources.abc.TraversableResources: 2c5.

      -- Método: abstractmethod open_resource (resource)

               Retorna um *note objeto arquivo ou similar: 15cf. aberto
               para leitura binária de 'resource'.

               Se o recurso não puder ser encontrado, *note
               FileNotFoundError: 42b. é levantada.

      -- Método: abstractmethod resource_path (resource)

               Retorna o caminho do sistema de arquivos para 'resource'.

               Se o recurso não existir concretamente no sistema de
               arquivos, levanta *note FileNotFoundError: 42b.

      -- Método: abstractmethod is_resource (name)

               Retorna ‘True’ se o 'name' nomeado for considerado um
               recurso.  *note FileNotFoundError: 42b. é levantada se
               'name' não existir.

      -- Método: abstractmethod contents ()

               Retorna um *note iterável: 1268. de strings sobre o
               conteúdo do pacote.  Observe que não é necessário que
               todos os nomes retornados pelo iterador sejam recursos
               reais, por exemplo, é aceitável retornar nomes para os
               quais *note is_resource(): 477e. seria falso.

               Permitir que nomes que não são recursos sejam retornados
               é permitir situações em que a forma como um pacote e seus
               recursos são armazenados é conhecida a priori e os nomes
               que não são recursos seriam úteis.  Por exemplo, o
               retorno de nomes de subdiretórios é permitido para que,
               quando se souber que o pacote e os recursos estão
               armazenados no sistema de arquivos, esses nomes de
               subdiretórios possam ser usados diretamente.

               O método abstrato retorna um iterável sem itens.

 -- Classe: importlib.abc.Traversable

     Um objeto com um subconjunto de métodos de *note pathlib.Path: 229.
     adequados para percorrer diretórios e abrir arquivos.

     Para uma representação do objeto no sistema de arquivos, use *note
     importlib.resources.as_file(): 48d.

     Adicionado na versão 3.9.

     Descontinuado desde a versão 3.12, será removido na versão 3.14:
     Use *note importlib.resources.abc.Traversable: 1f3.

      -- Atributo: name

          Abstrato.  O nome base deste objeto sem nenhuma referência
          pai.

      -- Método: abstractmethod iterdir ()

          Produz objetos ‘Traversable’ em ‘self’.

      -- Método: abstractmethod is_dir ()

          Retorna ‘True’ se ‘self’ for um diretório.

      -- Método: abstractmethod is_file ()

          Retorna ‘True’ se ‘self’ for um arquivo.

      -- Método: abstractmethod joinpath (child)

          Retorna o filho Traversable em ‘self’.

      -- Método: abstractmethod __truediv__ (child)

          Retorna o filho ‘Traversable’ em ‘self’.

      -- Método: abstractmethod open (mode='r', *args, **kwargs)

          'mode' pode ser ‘r’ ou ‘rb’ para abrir como texto ou binário.
          Retorna um manipulador adequado para leitura (o mesmo que
          *note pathlib.Path.open: 2976.).

          Ao abrir como texto, aceita parâmetros de codificação como os
          aceitos por *note io.TextIOWrapper: 7bc.

      -- Método: read_bytes ()

          Lê o conteúdo de ‘self’ como bytes.

      -- Método: read_text (encoding=None)

          Lê o conteúdo de ‘self’ como texto.

 -- Classe: importlib.abc.TraversableResources

     Uma classe base abstrata para leitores de recursos capaz de servir
     a interface *note importlib.resources.files(): 48e.  Subclasse
     *note importlib.resources.abc.ResourceReader: 476d. e fornece
     implementações concretas dos métodos abstratos de *note
     importlib.resources.abc.ResourceReader: 476d.  Portanto, qualquer
     carregador que forneça *note importlib.abc.TraversableResources:
     19b0. também fornece ResourceReader.

     Espera-se que os carregadores que desejam oferecer suporte à
     leitura de recursos implementem essa interface.

     Adicionado na versão 3.9.

     Descontinuado desde a versão 3.12, será removido na versão 3.14:
     Use *note importlib.resources.abc.TraversableResources: 2c5.

      -- Método: abstractmethod files ()

          Retorna um objeto *note importlib.resources.abc.Traversable:
          1f3. para o pacote carregado.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/importlib/abc.py

   (2) https://peps.python.org/pep-0302/

   (3) https://peps.python.org/pep-0302/

   (4) https://peps.python.org/pep-0302/

   (5) https://peps.python.org/pep-0302/


File: python.info,  Node: importlib machinery – Importadores e ganchos de caminho,  Next: importlib util – Utility code for importers,  Prev: importlib abc – classes base abstratas relacionadas a importação,  Up: importlib — A implementação de import

5.31.5.4 ‘importlib.machinery’ – Importadores e ganchos de caminho
..................................................................

'Código-fonte:' Lib/importlib/machinery.py(1)

__________________________________________________________________

Este módulo contém vários objetos que ajudam o *note import: 5e2. a
localizar e carregar módulos.

 -- Dado: importlib.machinery.SOURCE_SUFFIXES

     Uma lista de strings representando os sufixos de arquivo
     reconhecidos para módulos em código-fonte.

     Adicionado na versão 3.3.

 -- Dado: importlib.machinery.DEBUG_BYTECODE_SUFFIXES

     Uma lista de strings representando os sufixos de arquivo para
     módulos em bytecode não otimizado.

     Adicionado na versão 3.3.

     Descontinuado desde a versão 3.5: Use *note BYTECODE_SUFFIXES: 516.
     instead.

 -- Dado: importlib.machinery.OPTIMIZED_BYTECODE_SUFFIXES

     Uma lista de strings representando os sufixos de arquivo para
     módulos em bytecode otimizado.

     Adicionado na versão 3.3.

     Descontinuado desde a versão 3.5: Use *note BYTECODE_SUFFIXES: 516.
     instead.

 -- Dado: importlib.machinery.BYTECODE_SUFFIXES

     Uma lista de strings representando os sufixos de arquivo
     reconhecidos para módulos em bytecode (incluindo com ponto no
     início).

     Adicionado na versão 3.3.

     Alterado na versão 3.5: O valor não mais depende de ‘__debug__’.

 -- Dado: importlib.machinery.EXTENSION_SUFFIXES

     Uma lista de strings representando os sufixos de arquivo
     reconhecidos para módulos de extensão.

     Adicionado na versão 3.3.

 -- Função: importlib.machinery.all_suffixes ()

     Retorna uma lista combinada de strings representando todos os
     sufixos de arquivo para módulos reconhecidos pelo maquinário de
     importação padrão.  Este é um auxiliar para código que simplesmente
     precisa saber se um caminho de sistema de arquivos potencialmente
     se refere a um módulo sem precisar de detalhes sobre o tipo de
     módulo (por exemplo, *note inspect.getmodulename(): d5b.).

     Adicionado na versão 3.3.

 -- Classe: importlib.machinery.BuiltinImporter

     Um *note importador: 2184. para módulos embutidos.  Todos os
     módulos embutidos conhecidos estão listados em *note
     sys.builtin_module_names: 1de5.  Esta classe implementa os ABCs
     *note importlib.abc.MetaPathFinder: 872. e *note
     importlib.abc.InspectLoader: f88.

     Somente métodos de classe são definidos por esta classe para
     aliviar a necessidade de instanciação.

     Alterado na versão 3.5: Como parte da PEP 489(2), o importador
     embutido agora implementa ‘Loader.create_module()’ e
     ‘Loader.exec_module()’

 -- Classe: importlib.machinery.FrozenImporter

     Um *note importador: 2184. para módulos congelados.  Esta classe
     implementa os ABCs *note importlib.abc.MetaPathFinder: 872. e *note
     importlib.abc.InspectLoader: f88.

     Somente métodos de classe são definidos por esta classe para
     aliviar a necessidade de instanciação.

     Alterado na versão 3.4: Ganhou os métodos ‘create_module()’ e
     ‘exec_module()’.

 -- Classe: importlib.machinery.WindowsRegistryFinder

     *note Localizador: 20ae. para módulos declarados no registro do
     Windows.  Esta classe implementa a ABC *note
     importlib.abc.MetaPathFinder: 872.

     Somente métodos de classe são definidos por esta classe para
     aliviar a necessidade de instanciação.

     Adicionado na versão 3.3.

     Descontinuado desde a versão 3.6: Use a configuração de *note site:
     c7. em vez disso.  Versões futuras do Python podem não habilitar
     esse localizador por padrão.

 -- Classe: importlib.machinery.PathFinder

     Um *note Localizador: 20ae. para atributos *note sys.path: 3b4. e
     pacote ‘__path__’.  Esta classe implementa a ABC *note
     importlib.abc.MetaPathFinder: 872.

     Somente métodos de classe são definidos por esta classe para
     aliviar a necessidade de instanciação.

      -- Método: classmethod find_spec (fullname, path=None,
               target=None)

          Método de classe que tenta encontrar um *note spec: 20a6. para
          o módulo especificado por 'fullname' em *note sys.path: 3b4.
          ou, se definido, em 'path'.  Para cada entrada de caminho
          pesquisada, *note sys.path_importer_cache: 5e4. é verificado.
          Se um objeto não falso for encontrado, ele será usado como o
          *note localizador de entrada de caminho: 10aa. para procurar o
          módulo que está sendo pesquisado.  Se nenhuma entrada for
          encontrada em *note sys.path_importer_cache: 5e4, então *note
          sys.path_hooks: 105a. será pesquisado para um localizador para
          a entrada de caminho e, se encontrado, será armazenado em
          *note sys.path_importer_cache: 5e4. junto com a consulta sobre
          o módulo.  Se nenhum localizador for encontrado, então ‘None’
          será armazenado no cache e retornado.

          Adicionado na versão 3.4.

          Alterado na versão 3.5: Se o diretório de trabalho atual —
          representado por uma string vazia — não for mais válido,
          ‘None’ será retornado, mas nenhum valor será armazenado em
          cache em *note sys.path_importer_cache: 5e4.

      -- Método: classmethod invalidate_caches ()

          Chama *note importlib.abc.PathEntryFinder.invalidate_caches():
          476c. em todos os localizadores armazenados em *note
          sys.path_importer_cache: 5e4. que definem o método.  Caso
          contrário, as entradas em *note sys.path_importer_cache: 5e4.
          definidas como ‘None’ são excluídas.

          Alterado na versão 3.7: Entradas de ‘None’ em *note
          sys.path_importer_cache: 5e4. são excluídas.

     Alterado na versão 3.4: Chama objetos em *note sys.path_hooks:
     105a. com o diretório de trabalho atual para ‘''’ (ou seja, a
     string vazia).

 -- Classe: importlib.machinery.FileFinder (path, *loader_details)

     Uma implementação concreta de *note importlib.abc.PathEntryFinder:
     873. que armazena em cache os resultados do sistema de arquivos.

     O argumento 'path' é o diretório que o localizador é responsável
     por pesquisar.

     O argumento 'loader_details' é um número variável de tuplas de 2
     itens, cada uma contendo um carregador e uma sequência de sufixos
     de arquivo que o carregador reconhece.  Espera-se que os
     carregadores sejam chamáveis que aceitam dois argumentos do nome do
     módulo e o caminho para o arquivo encontrado.

     O localizador armazenará em cache o conteúdo do diretório conforme
     necessário, fazendo chamadas de “stat” para cada pesquisa de módulo
     para verificar se o cache não está desatualizado.  Como a
     obsolescência do cache depende da granularidade das informações de
     estado do sistema operacional do sistema de arquivos, há uma
     condição de corrida potencial de busca por um módulo, criação de um
     novo arquivo e, em seguida, busca pelo módulo que o novo arquivo
     representa.  Se as operações ocorrerem rápido o suficiente para
     caber na granularidade das chamadas de “stat”, a pesquisa do módulo
     falhará.  Para evitar que isso aconteça, ao criar um módulo
     dinamicamente, certifique-se de chamar *note
     importlib.invalidate_caches(): c2a.

     Adicionado na versão 3.3.

      -- Atributo: path

          O caminho que o localizador irá procurar.

      -- Método: find_spec (fullname, target=None)

          Tenta encontrar o spec para manipular 'fullname' dentro de
          *note path: 478c.

          Adicionado na versão 3.4.

      -- Método: invalidate_caches ()

          Limpa o cache interno.

      -- Método: classmethod path_hook (*loader_details)

          Um método de classe que retorna uma clausura para uso em *note
          sys.path_hooks: 105a.  Uma instância de *note FileFinder:
          10ab. é retornada pela clausura usando o argumento de caminho
          dado à clausura diretamente e 'loader_details' indiretamente.

          Se o argumento para a clausura não for um diretório existente,
          *note ImportError: 419. será levantada.

 -- Classe: importlib.machinery.SourceFileLoader (fullname, path)

     Uma implementação concreta de *note importlib.abc.SourceLoader:
     4777. subclassificando *note importlib.abc.FileLoader: 10ac. e
     fornecendo algumas implementações concretas de outros métodos.

     Adicionado na versão 3.3.

      -- Atributo: name

          O nome do módulo que este carregador irá manipular.

      -- Atributo: path

          O caminho para o arquivo fonte.

      -- Método: is_package (fullname)

          Retorna ‘True’ se *note path: 4790. parecer ser para um
          pacote.

      -- Método: path_stats (path)

          Implementação concreta de *note
          importlib.abc.SourceLoader.path_stats(): 11c9.

      -- Método: set_data (path, data)

          Implementação concreta de *note
          importlib.abc.SourceLoader.set_data(): 4778.

      -- Método: load_module (name=None)

          Implementação concreta de *note
          importlib.abc.Loader.load_module(): 86d. onde a especificação
          do nome do módulo para carregar é opcional

          Descontinuado desde a versão 3.6, será removido na versão
          3.15: Use *note importlib.abc.Loader.exec_module(): 86e.

 -- Classe: importlib.machinery.SourcelessFileLoader (fullname, path)

     Uma implementação concreta de *note importlib.abc.FileLoader: 10ac.
     que pode importar arquivos de bytecode (ou seja, não existem
     arquivos de código-fonte).

     Observe que o uso direto de arquivos de bytecode (e, portanto, não
     de arquivos de código-fonte) impede que seus módulos sejam
     utilizáveis por todas as implementações do Python ou novas versões
     do Python que alteram o formato do bytecode.

     Adicionado na versão 3.3.

      -- Atributo: name

          O nome do módulo que o carregador vai manipular.

      -- Atributo: path

          O caminho para o arquivo de bytecode.

      -- Método: is_package (fullname)

          Determina se o módulo é um pacote baseado em *note path: 4795.

      -- Método: get_code (fullname)

          Retorna o objeto código para *note name: 4794. criado a partir
          de *note path: 4795.

      -- Método: get_source (fullname)

          Retorna ‘None’, pois os arquivos de bytecode não têm
          código-fonte quando este carregador é usado.

      -- Método: load_module (name=None)

     Implementação concreta de *note importlib.abc.Loader.load_module():
     86d. onde a especificação do nome do módulo para carregar é
     opcional

     Descontinuado desde a versão 3.6, será removido na versão 3.15: Use
     *note importlib.abc.Loader.exec_module(): 86e.

 -- Classe: importlib.machinery.ExtensionFileLoader (fullname, path)

     Uma implementação concreta de *note importlib.abc.ExecutionLoader:
     4770. para módulos de extensão.

     O argumento 'fullname' especifica o nome do módulo ao qual o
     carregador deve dar suporte.  O argumento 'path' é o caminho para o
     arquivo do módulo de extensão.

     Observe que, por padrão, a importação de um módulo de extensão
     falhará em subinterpretadores se ele não implementar inicialização
     multifásica (consulte a PEP 489(3)), mesmo que ele seja importado
     com sucesso.

     Adicionado na versão 3.3.

     Alterado na versão 3.12: A inicialização multifásica agora é
     necessária para uso em subinterpretadores.

      -- Atributo: name

          Nome do módulo ao qual o carregador dá suporte.

      -- Atributo: path

          Caminho para o módulo de extensão.

      -- Método: create_module (spec)

          Cria o objeto do módulo a partir da especificação fornecida de
          acordo com a PEP 489(4).

          Adicionado na versão 3.5.

      -- Método: exec_module (module)

          Inicializa o objeto do módulo fornecido de acordo com a PEP
          489(5).

          Adicionado na versão 3.5.

      -- Método: is_package (fullname)

          Returns ‘True’ if the file path points to a package’s
          ‘__init__’ module based on *note EXTENSION_SUFFIXES: 515.

      -- Método: get_code (fullname)

          Retorna ‘None’, pois os módulos de extensão não possuem um
          objeto código.

      -- Método: get_source (fullname)

          Retorna ‘None’ pois os módulos de extensão não possuem
          código-fonte.

      -- Método: get_filename (fullname)

          Retorna *note path: 479a.

          Adicionado na versão 3.4.

 -- Classe: importlib.machinery.NamespaceLoader (name, path,
          path_finder)

     Uma implementação concreta de *note importlib.abc.InspectLoader:
     f88. para pacotes de espaço de nomes.  Este é um apelido para uma
     classe privada e só é tornado público para introspecção do atributo
     ‘__loader__’ em pacotes de espaço de nomes:

          >>> from importlib.machinery import NamespaceLoader
          >>> import my_namespace
          >>> isinstance(my_namespace.__loader__, NamespaceLoader)
          True
          >>> import importlib.abc
          >>> isinstance(my_namespace.__loader__, importlib.abc.Loader)
          True

     Adicionado na versão 3.11.

 -- Classe: importlib.machinery.ModuleSpec (name, loader, *,
          origin=None, loader_state=None, is_package=None)

     A specification for a module’s import-system-related state.  This
     is typically exposed as the module’s *note __spec__: 20a7.
     attribute.  Many of these attributes are also available directly on
     a module: for example, ‘module.__spec__.origin == module.__file__’.
     Note, however, that while the 'values' are usually equivalent, they
     can differ since there is no synchronization between the two
     objects.  For example, it is possible to update the module’s *note
     __file__: 20ad. at runtime and this will not be automatically
     reflected in the module’s *note __spec__.origin: 47a0, and vice
     versa.

     Adicionado na versão 3.4.

      -- Atributo: name

          The module’s fully qualified name (see *note module.__name__:
          13d2.).  The *note finder: 20ae. should always set this
          attribute to a non-empty string.

      -- Atributo: loader

          The *note loader: 17a4. used to load the module (see *note
          module.__loader__: 2e2.).  The *note finder: 20ae. should
          always set this attribute.

      -- Atributo: origin

          The location the *note loader: 17a4. should use to load the
          module (see *note module.__file__: 20ad.).  For example, for
          modules loaded from a ‘.py’ file this is the filename.  The
          *note finder: 20ae. should always set this attribute to a
          meaningful value for the *note loader: 17a4. to use.  In the
          uncommon case that there is not one (like for namespace
          packages), it should be set to ‘None’.

      -- Atributo: submodule_search_locations

          A (possibly empty) *note sequence: 4f1. of strings enumerating
          the locations in which a package’s submodules will be found
          (see *note module.__path__: 1df4.).  Most of the time there
          will only be a single directory in this list.

          The *note finder: 20ae. should set this attribute to a
          sequence, even an empty one, to indicate to the import system
          that the module is a package.  It should be set to ‘None’ for
          non-package modules.  It is set automatically later to a
          special object for namespace packages.

      -- Atributo: loader_state

          The *note finder: 20ae. may set this attribute to an object
          containing additional, module-specific data to use when
          loading the module.  Otherwise it should be set to ‘None’.

      -- Atributo: cached

          The filename of a compiled version of the module’s code (see
          *note module.__cached__: 2d5.).  The *note finder: 20ae.
          should always set this attribute but it may be ‘None’ for
          modules that do not need compiled code stored.

      -- Atributo: parent

          (Read-only) The fully qualified name of the package the module
          is in (or the empty string for a top-level module).  See *note
          module.__package__: 2d7.  If the module is a package then this
          is the same as *note name: 20a8.

      -- Atributo: has_location

          ‘True’ if the spec’s *note origin: 47a0. refers to a loadable
          location, ‘False’ otherwise.  This value impacts how ‘origin’
          is interpreted and how the module’s *note __file__: 20ad. is
          populated.

 -- Classe: importlib.machinery.AppleFrameworkLoader (name, path)

     A specialization of *note importlib.machinery.ExtensionFileLoader:
     cd0. that is able to load extension modules in Framework format.

     For compatibility with the iOS App Store, 'all' binary modules in
     an iOS app must be dynamic libraries, contained in a framework with
     appropriate metadata, stored in the ‘Frameworks’ folder of the
     packaged app.  There can be only a single binary per framework, and
     there can be no executable binary material outside the Frameworks
     folder.

     To accommodate this requirement, when running on iOS, extension
     module binaries are 'not' packaged as ‘.so’ files on ‘sys.path’,
     but as individual standalone frameworks.  To discover those
     frameworks, this loader is registered against the ‘.fwork’ file
     extension, with a ‘.fwork’ file acting as a placeholder in the
     original location of the binary on ‘sys.path’.  The ‘.fwork’ file
     contains the path of the actual binary in the ‘Frameworks’ folder,
     relative to the app bundle.  To allow for resolving a
     framework-packaged binary back to the original location, the
     framework is expected to contain a ‘.origin’ file that contains the
     location of the ‘.fwork’ file, relative to the app bundle.

     Por exemplo, considere o caso de uma importação ‘from foo.bar
     import _whiz’, onde ‘_whiz’ é implementado com o módulo binário
     ‘sources/foo/bar/_whiz.abi3.so’, com ‘sources’ sendo o local
     registrado em ‘sys.path’, relativo ao pacote da aplicação.  Este
     módulo 'deve' ser distribuído como
     ‘Frameworks/foo.bar._whiz.framework/foo.bar._whiz’ (criando o nome
     do framework a partir do caminho de importação completo do módulo),
     com um arquivo ‘Info.plist’ no diretório ‘.framework’ identificando
     o binário como um framework.  O módulo ‘foo.bar._whiz’ seria
     representado no local original com um arquivo marcador
     ‘sources/foo/bar/_whiz.abi3.fwork’, contendo o caminho
     ‘Frameworks/foo.bar._whiz/foo.bar._whiz’.  O framework também
     conteria ‘Frameworks/foo.bar._whiz.framework/foo.bar._whiz.origin’,
     contendo o caminho para o arquivo ‘.fwork’.

     Quando um módulo é carregado com este carregador, o ‘__file__’ para
     o módulo será reportado como o local do arquivo ‘.fwork’.  Isso
     permite que o código use o ‘__file__’ de um módulo como uma âncora
     para travessia do sistema de arquivos.  No entanto, a origem do
     spec fará referência ao local do binário 'real' na pasta
     ‘.framework’.

     The Xcode project building the app is responsible for converting
     any ‘.so’ files from wherever they exist in the ‘PYTHONPATH’ into
     frameworks in the ‘Frameworks’ folder (including stripping
     extensions from the module file, the addition of framework
     metadata, and signing the resulting framework), and creating the
     ‘.fwork’ and ‘.origin’ files.  This will usually be done with a
     build step in the Xcode project; see the iOS documentation for
     details on how to construct this build step.

     Adicionado na versão 3.13.

     *note Disponibilidade: 1ed8.: iOS.

      -- Atributo: name

          Nome do módulo ao qual o carregador dá suporte.

      -- Atributo: path

          Path to the ‘.fwork’ file for the extension module.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/importlib/machinery.py

   (2) https://peps.python.org/pep-0489/

   (3) https://peps.python.org/pep-0489/

   (4) https://peps.python.org/pep-0489/

   (5) https://peps.python.org/pep-0489/


File: python.info,  Node: importlib util – Utility code for importers,  Next: Exemplos<34>,  Prev: importlib machinery – Importadores e ganchos de caminho,  Up: importlib — A implementação de import

5.31.5.5 ‘importlib.util’ – Utility code for importers
......................................................

'Source code:' Lib/importlib/util.py(1)

__________________________________________________________________

This module contains the various objects that help in the construction
of an *note importer: 2184.

 -- Dado: importlib.util.MAGIC_NUMBER

     The bytes which represent the bytecode version number.  If you need
     help with loading/writing bytecode then consider *note
     importlib.abc.SourceLoader: 4777.

     Adicionado na versão 3.4.

 -- Função: importlib.util.cache_from_source (path, debug_override=None,
          *, optimization=None)

     Return the PEP 3147(2)/ PEP 488(3) path to the byte-compiled file
     associated with the source 'path'.  For example, if 'path' is
     ‘/foo/bar/baz.py’ the return value would be
     ‘/foo/bar/__pycache__/baz.cpython-32.pyc’ for Python 3.2.  The
     ‘cpython-32’ string comes from the current magic tag (see
     ‘get_tag()’; if ‘sys.implementation.cache_tag’ is not defined then
     *note NotImplementedError: 228. will be raised).

     The 'optimization' parameter is used to specify the optimization
     level of the bytecode file.  An empty string represents no
     optimization, so ‘/foo/bar/baz.py’ with an 'optimization' of ‘''’
     will result in a bytecode path of
     ‘/foo/bar/__pycache__/baz.cpython-32.pyc’.  ‘None’ causes the
     interpreter’s optimization level to be used.  Any other value’s
     string representation is used, so ‘/foo/bar/baz.py’ with an
     'optimization' of ‘2’ will lead to the bytecode path of
     ‘/foo/bar/__pycache__/baz.cpython-32.opt-2.pyc’.  The string
     representation of 'optimization' can only be alphanumeric, else
     *note ValueError: 202. is raised.

     The 'debug_override' parameter is deprecated and can be used to
     override the system’s value for ‘__debug__’.  A ‘True’ value is the
     equivalent of setting 'optimization' to the empty string.  A
     ‘False’ value is the same as setting 'optimization' to ‘1’.  If
     both 'debug_override' an 'optimization' are not ‘None’ then *note
     TypeError: 2c3. is raised.

     Adicionado na versão 3.4.

     Alterado na versão 3.5: The 'optimization' parameter was added and
     the 'debug_override' parameter was deprecated.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: importlib.util.source_from_cache (path)

     Given the 'path' to a PEP 3147(4) file name, return the associated
     source code file path.  For example, if 'path' is
     ‘/foo/bar/__pycache__/baz.cpython-32.pyc’ the returned path would
     be ‘/foo/bar/baz.py’.  'path' need not exist, however if it does
     not conform to PEP 3147(5) or PEP 488(6) format, a *note
     ValueError: 202. is raised.  If ‘sys.implementation.cache_tag’ is
     not defined, *note NotImplementedError: 228. is raised.

     Adicionado na versão 3.4.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: importlib.util.decode_source (source_bytes)

     Decode the given bytes representing source code and return it as a
     string with universal newlines (as required by *note
     importlib.abc.InspectLoader.get_source(): f8c.).

     Adicionado na versão 3.4.

 -- Função: importlib.util.resolve_name (name, package)

     Resolve a relative module name to an absolute one.

     If 'name' has no leading dots, then 'name' is simply returned.
     This allows for usage such as ‘importlib.util.resolve_name('sys',
     __spec__.parent)’ without doing a check to see if the 'package'
     argument is needed.

     *note ImportError: 419. is raised if 'name' is a relative module
     name but 'package' is a false value (e.g.  ‘None’ or the empty
     string).  *note ImportError: 419. is also raised if a relative name
     would escape its containing package (e.g.  requesting ‘..bacon’
     from within the ‘spam’ package).

     Adicionado na versão 3.3.

     Alterado na versão 3.9: To improve consistency with import
     statements, raise *note ImportError: 419. instead of *note
     ValueError: 202. for invalid relative import attempts.

 -- Função: importlib.util.find_spec (name, package=None)

     Localiza o *note spec: 20a6. para um módulo, opcionalmente relativo
     ao nome do 'package' especificado.  Se o módulo estiver em *note
     sys.modules: 1636, então ‘sys.modules[name].__spec__’ será
     retornado (a menos que o spec seja ‘None’ ou não esteja definido,
     nesse caso *note ValueError: 202. é levantada).  Caso contrário,
     uma pesquisa usando *note sys.meta_path: d4d. é feita.  ‘None’ é
     retornado se nenhum spec for encontrada.

     If 'name' is for a submodule (contains a dot), the parent module is
     automatically imported.

     'name' and 'package' work the same as for ‘import_module()’.

     Adicionado na versão 3.4.

     Alterado na versão 3.7: Raises *note ModuleNotFoundError: b5b.
     instead of *note AttributeError: 34b. if 'package' is in fact not a
     package (i.e.  lacks a *note __path__: 1df4. attribute).

 -- Função: importlib.util.module_from_spec (spec)

     Create a new module based on 'spec' and *note
     spec.loader.create_module: cce.

     If *note spec.loader.create_module: cce. does not return ‘None’,
     then any pre-existing attributes will not be reset.  Also, no *note
     AttributeError: 34b. will be raised if triggered while accessing
     'spec' or setting an attribute on the module.

     This function is preferred over using *note types.ModuleType: e3f.
     to create a new module as 'spec' is used to set as many
     import-controlled attributes on the module as possible.

     Adicionado na versão 3.5.

 -- Função: importlib.util.spec_from_loader (name, loader, *,
          origin=None, is_package=None)

     A factory function for creating a *note ModuleSpec: 1fee. instance
     based on a loader.  The parameters have the same meaning as they do
     for ModuleSpec.  The function uses available *note loader: 17a4.
     APIs, such as ‘InspectLoader.is_package()’, to fill in any missing
     information on the spec.

     Adicionado na versão 3.4.

 -- Função: importlib.util.spec_from_file_location (name, location, *,
          loader=None, submodule_search_locations=None)

     A factory function for creating a *note ModuleSpec: 1fee. instance
     based on the path to a file.  Missing information will be filled in
     on the spec by making use of loader APIs and by the implication
     that the module will be file-based.

     Adicionado na versão 3.4.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- Função: importlib.util.source_hash (source_bytes)

     Return the hash of 'source_bytes' as bytes.  A hash-based ‘.pyc’
     file embeds the *note source_hash(): b5c. of the corresponding
     source file’s contents in its header.

     Adicionado na versão 3.7.

 -- Função: importlib.util._incompatible_extension_module_restrictions
          (*, disable_check)

     A context manager that can temporarily skip the compatibility check
     for extension modules.  By default the check is enabled and will
     fail when a single-phase init module is imported in a
     subinterpreter.  It will also fail for a multi-phase init module
     that doesn’t explicitly support a per-interpreter GIL, when
     imported in an interpreter with its own GIL.

     Note that this function is meant to accommodate an unusual case;
     one which is likely to eventually go away.  There’s is a pretty
     good chance this is not what you were looking for.

     You can get the same effect as this function by implementing the
     basic interface of multi-phase init ( PEP 489(7)) and lying about
     support for multiple interpreters (or per-interpreter GIL).

          Aviso: Using this function to disable the check can lead to
          unexpected behavior and even crashes.  It should only be used
          during extension module development.

     Adicionado na versão 3.12.

 -- Classe: importlib.util.LazyLoader (loader)

     A class which postpones the execution of the loader of a module
     until the module has an attribute accessed.

     This class 'only' works with loaders that define *note
     exec_module(): 86e. as control over what module type is used for
     the module is required.  For those same reasons, the loader’s *note
     create_module(): cce. method must return ‘None’ or a type for which
     its ‘__class__’ attribute can be mutated along with not using *note
     slots: 5df.  Finally, modules which substitute the object placed
     into *note sys.modules: 1636. will not work as there is no way to
     properly replace the module references throughout the interpreter
     safely; *note ValueError: 202. is raised if such a substitution is
     detected.

          Nota: For projects where startup time is critical, this class
          allows for potentially minimizing the cost of loading a module
          if it is never used.  For projects where startup time is not
          essential then use of this class is 'heavily' discouraged due
          to error messages created during loading being postponed and
          thus occurring out of context.

     Adicionado na versão 3.5.

     Alterado na versão 3.6: Began calling *note create_module(): cce,
     removing the compatibility warning for *note
     importlib.machinery.BuiltinImporter: ccf. and *note
     importlib.machinery.ExtensionFileLoader: cd0.

      -- Método: classmethod factory (loader)

          A class method which returns a callable that creates a lazy
          loader.  This is meant to be used in situations where the
          loader is passed by class instead of by instance.

               suffixes = importlib.machinery.SOURCE_SUFFIXES
               loader = importlib.machinery.SourceFileLoader
               lazy_loader = importlib.util.LazyLoader.factory(loader)
               finder = importlib.machinery.FileFinder(path, (lazy_loader, suffixes))

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/importlib/util.py

   (2) https://peps.python.org/pep-3147/

   (3) https://peps.python.org/pep-0488/

   (4) https://peps.python.org/pep-3147/

   (5) https://peps.python.org/pep-3147/

   (6) https://peps.python.org/pep-0488/

   (7) https://peps.python.org/pep-0489/


File: python.info,  Node: Exemplos<34>,  Prev: importlib util – Utility code for importers,  Up: importlib — A implementação de import

5.31.5.6 Exemplos
.................

* Menu:

* Importing programmatically::
* Checando se o módulo pode ser importado::
* Importa o arquivo de origem diretamente::
* Implementing lazy imports::
* Setting up an importer::
* Approximating importlib.import_module(): Approximating importlib import_module.


File: python.info,  Node: Importing programmatically,  Next: Checando se o módulo pode ser importado,  Up: Exemplos<34>

5.31.5.7 Importing programmatically
...................................

To programmatically import a module, use *note
importlib.import_module(): 518.

     import importlib

     itertools = importlib.import_module('itertools')


File: python.info,  Node: Checando se o módulo pode ser importado,  Next: Importa o arquivo de origem diretamente,  Prev: Importing programmatically,  Up: Exemplos<34>

5.31.5.8 Checando se o módulo pode ser importado
................................................

If you need to find out if a module can be imported without actually
doing the import, then you should use *note importlib.util.find_spec():
2cd.

Note that if ‘name’ is a submodule (contains a dot), *note
importlib.util.find_spec(): 2cd. will import the parent module.

     import importlib.util
     import sys

     # For illustrative purposes.
     name = 'itertools'

     if name in sys.modules:
         print(f"{name!r} already in sys.modules")
     elif (spec := importlib.util.find_spec(name)) is not None:
         # If you chose to perform the actual import ...
         module = importlib.util.module_from_spec(spec)
         sys.modules[name] = module
         spec.loader.exec_module(module)
         print(f"{name!r} has been imported")
     else:
         print(f"can't find the {name!r} module")


File: python.info,  Node: Importa o arquivo de origem diretamente,  Next: Implementing lazy imports,  Prev: Checando se o módulo pode ser importado,  Up: Exemplos<34>

5.31.5.9 Importa o arquivo de origem diretamente
................................................

This recipe should be used with caution: it is an approximation of an
import statement where the file path is specified directly, rather than
*note sys.path: 3b4. being searched.  Alternatives should first be
considered first, such as modifying *note sys.path: 3b4. when a proper
module is required, or using *note runpy.run_path(): 181. when the
global namespace resulting from running a Python file is appropriate.

To import a Python source file directly from a path, use the following
recipe:

     import importlib.util
     import sys


     def import_from_path(module_name, file_path):
         spec = importlib.util.spec_from_file_location(module_name, file_path)
         module = importlib.util.module_from_spec(spec)
         sys.modules[module_name] = module
         spec.loader.exec_module(module)
         return module


     # For illustrative purposes only (use of `json` is arbitrary).
     import json
     file_path = json.__file__
     module_name = json.__name__

     # Similar outcome as `import json`.
     json = import_from_path(module_name, file_path)


File: python.info,  Node: Implementing lazy imports,  Next: Setting up an importer,  Prev: Importa o arquivo de origem diretamente,  Up: Exemplos<34>

5.31.5.10 Implementing lazy imports
...................................

The example below shows how to implement lazy imports:

     >>> import importlib.util
     >>> import sys
     >>> def lazy_import(name):
     ...     spec = importlib.util.find_spec(name)
     ...     loader = importlib.util.LazyLoader(spec.loader)
     ...     spec.loader = loader
     ...     module = importlib.util.module_from_spec(spec)
     ...     sys.modules[name] = module
     ...     loader.exec_module(module)
     ...     return module
     ...
     >>> lazy_typing = lazy_import("typing")
     >>> #lazy_typing is a real module object,
     >>> #but it is not loaded in memory yet.
     >>> lazy_typing.TYPE_CHECKING
     False


File: python.info,  Node: Setting up an importer,  Next: Approximating importlib import_module,  Prev: Implementing lazy imports,  Up: Exemplos<34>

5.31.5.11 Setting up an importer
................................

For deep customizations of import, you typically want to implement an
*note importer: 2184.  This means managing both the *note finder: 20ae.
and *note loader: 17a4. side of things.  For finders there are two
flavours to choose from depending on your needs: a *note meta path
finder: 10a9. or a *note path entry finder: 10aa.  The former is what
you would put on *note sys.meta_path: d4d. while the latter is what you
create using a *note path entry hook: 2195. on *note sys.path_hooks:
105a. which works with *note sys.path: 3b4. entries to potentially
create a finder.  This example will show you how to register your own
importers so that import will use them (for creating an importer for
yourself, read the documentation for the appropriate classes defined
within this package):

     import importlib.machinery
     import sys

     # For illustrative purposes only.
     SpamMetaPathFinder = importlib.machinery.PathFinder
     SpamPathEntryFinder = importlib.machinery.FileFinder
     loader_details = (importlib.machinery.SourceFileLoader,
                       importlib.machinery.SOURCE_SUFFIXES)

     # Setting up a meta path finder.
     # Make sure to put the finder in the proper location in the list in terms of
     # priority.
     sys.meta_path.append(SpamMetaPathFinder)

     # Setting up a path entry finder.
     # Make sure to put the path hook in the proper location in the list in terms
     # of priority.
     sys.path_hooks.append(SpamPathEntryFinder.path_hook(loader_details))


File: python.info,  Node: Approximating importlib import_module,  Prev: Setting up an importer,  Up: Exemplos<34>

5.31.5.12 Approximating ‘importlib.import_module()’
...................................................

Import itself is implemented in Python code, making it possible to
expose most of the import machinery through importlib.  The following
helps illustrate the various APIs that importlib exposes by providing an
approximate implementation of *note importlib.import_module(): 518.:

     import importlib.util
     import sys

     def import_module(name, package=None):
         """An approximate implementation of import."""
         absolute_name = importlib.util.resolve_name(name, package)
         try:
             return sys.modules[absolute_name]
         except KeyError:
             pass

         path = None
         if '.' in absolute_name:
             parent_name, _, child_name = absolute_name.rpartition('.')
             parent_module = import_module(parent_name)
             path = parent_module.__spec__.submodule_search_locations
         for finder in sys.meta_path:
             spec = finder.find_spec(absolute_name, path)
             if spec is not None:
                 break
         else:
             msg = f'No module named {absolute_name!r}'
             raise ModuleNotFoundError(msg, name=absolute_name)
         module = importlib.util.module_from_spec(spec)
         sys.modules[absolute_name] = module
         spec.loader.exec_module(module)
         if path is not None:
             setattr(parent_module, child_name, module)
         return module


File: python.info,  Node: importlib resources – Leitura abertura e acesso a recursos de pacotes,  Next: importlib resources abc – Classes base abstratas para recursos,  Prev: importlib — A implementação de import,  Up: Importando módulos

5.31.6 ‘importlib.resources’ – Leitura, abertura e acesso a recursos de pacotes
-------------------------------------------------------------------------------

'Código-fonte:' Lib/importlib/resources/__init__.py(1)

__________________________________________________________________

Adicionado na versão 3.7.

Esse módulo aproveita o sistema de importação do Python para fornecer
acesso a 'recursos' dentro de 'pacotes'.

“Recursos” são recursos arquivo ou similares associados a um módulo ou
pacote em Python.  Os recursos podem estar contidos diretamente em um
pacote, em um subdiretório contido nesse pacote ou adjacentes a módulos
fora de um pacote.  Os recursos podem ser de texto ou binários.  Como
resultado, as fontes de módulos Python de um pacote (.py), artefatos de
compilação (pycache) e artefatos de instalação (como *note nomes de
arquivos reservados: 223. em diretórios) são tecnicamente recursos de
fato desse pacote.  Na prática, entretanto, os recursos são
principalmente os artefatos não-Python expostos especificamente pelo
autor do pacote.

Os recursos podem ser abertos ou lidos no modo binário ou de texto.

Os recursos são mais ou menos semelhantes a arquivos dentro de
diretórios, embora seja importante ter em mente que isso é apenas uma
metáfora.  Recursos e pacotes 'não' precisam existir como arquivos e
diretórios físicos no sistema de arquivos: por exemplo, um pacote e seus
recursos podem ser importados de um arquivo zip usando *note zipimport:
132.

     Nota: Esse módulo fornece funcionalidade semelhante ao Basic
     Resource Access(2) do pkg_resources(3) sem a sobrecarga de
     desempenho desse pacote.  Isso facilita a leitura de recursos
     incluídos em pacotes, com uma semântica mais estável e consistente.

     O backport autônomo desse módulo fornece mais informações sobre uso
     do importlib.resources(4) e migração do pkg_resources para o
     importlib.resources(5).

*note Loaders: ef6. que desejam oferecer suporte à leitura de recursos
devem implementar um método ‘get_resource_reader(fullname)’ conforme
especificado por *note importlib.resources.abc.ResourceReader: 476d.

 -- Classe: importlib.resources.Anchor

     Representa uma âncora para recursos, seja um *note objeto módulo:
     e3f. ou um nome de módulo como uma string.  Definido como
     ‘Union[str, ModuleType]’.

 -- Função: importlib.resources.files (anchor: Anchor | None = None)

     Retorna um objeto *note Traversable: 1f3. que representa o
     contêiner de recursos (pense em diretório) e seus recursos (pense
     em arquivos).  Um Traversable pode conter outros contêineres (pense
     em subdiretórios).

     'anchor' é um *note Anchor: 47b3. opcional.  Se a âncora for um
     pacote, os recursos são resolvidos a partir desse pacote.  Se for
     um módulo, os recursos são resolvidos ao lado desse módulo (no
     mesmo pacote ou na raiz do pacote).  Se a âncora for omitida, o
     módulo do chamador é usado.

     Adicionado na versão 3.9.

     Alterado na versão 3.12: O parâmetro 'package' foi renomeado para
     'anchor'.  'anchor' agora pode ser um módulo sem ser pacote e, se
     omitido, será o módulo do chamador por padrão.  'package' ainda é
     aceito por compatibilidade, mas irá levantar um *note
     DeprecationWarning: 1a5.  Considere passar a posição da âncora de
     forma posicional ou usar ‘importlib_resources >= 5.10’ para uma
     interface compatível em versões mais antigas do Python.

 -- Função: importlib.resources.as_file (traversable)

     Dado um objeto *note Traversable: 1f3. que representa um arquivo ou
     diretório, normalmente de *note importlib.resources.files(): 48e,
     retorna um gerenciador de contexto para uso em uma instrução *note
     with: 5d2.  O gerenciador de contexto fornece um objeto *note
     pathlib.Path: 229.

     Sair do gerenciador de contexto limpa qualquer arquivo ou diretório
     temporário criado quando o recurso foi extraído, por exemplo, de um
     arquivo zip.

     Use ‘as_file’ quando os métodos de Traversable (‘read_text’, etc.)
     forem insuficientes e for necessário um arquivo ou diretório real
     no sistema de arquivos.

     Adicionado na versão 3.9.

     Alterado na versão 3.12: Adicionado suporte para 'traversable'
     representando um diretório.

* Menu:

* API funcional::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/importlib/resources/__init__.py

   (2) 
https://setuptools.readthedocs.io/en/latest/pkg_resources.html#basic-resource-access

   (3) https://setuptools.readthedocs.io/en/latest/pkg_resources.html

   (4) https://importlib-resources.readthedocs.io/en/latest/using.html

   (5) 
https://importlib-resources.readthedocs.io/en/latest/migration.html


File: python.info,  Node: API funcional,  Up: importlib resources – Leitura abertura e acesso a recursos de pacotes

5.31.6.1 API funcional
......................

Um conjunto de auxiliares simplificados e compatíveis com versões
anteriores está disponível.  Estes permitem operações comuns em uma
única chamada de função.

Para todas as funções a seguir:

   - 'anchor' é um *note Anchor: 47b3, assim como em *note files(): 48e.
     Ao contrário do comportamento em ‘files’, 'anchor' aqui não pode
     ser omitido.

   - 'path_names' são componentes do nome do caminho de um recurso,
     relativo à âncora.  Por exemplo, para obter o texto de um recurso
     chamado ‘info.txt’, use:

          importlib.resources.read_text(my_module, "info.txt")

     Assim como em *note Traversable.joinpath: 1f3, os componentes
     individuais devem usar barras ordinárias (‘/’) como separadores do
     caminho.  Por exemplo, as seguintes chamadas são equivalentes:

          importlib.resources.read_binary(my_module, "pics/painting.png")
          importlib.resources.read_binary(my_module, "pics", "painting.png")

     Por motivos de compatibilidade com versões anteriores, funções que
     leem texto requerem um argumento 'encoding' explícito se múltiplos
     'path_names' forem fornecidos.  Por exemplo, para obter o texto de
     ‘info/chapter1.txt’, use:

          importlib.resources.read_text(my_module, "info", "chapter1.txt",
                                        encoding='utf-8')

 -- Função: importlib.resources.open_binary (anchor, *path_names)

     Abre o recurso nomeado para leitura binária.

     Veja *note a introdução: 47b5. para detalhes sobre 'anchor' e
     'path_names'.

     Esta função retorna um objeto *note BinaryIO: 41c4, isto é, um
     fluxo binário aberto para leitura.

     Esta função é mais ou menos equivalente a:

          files(anchor).joinpath(*path_names).open('rb')

     Alterado na versão 3.13: Múltiplos 'path_names' são aceitos.

 -- Função: importlib.resources.open_text (anchor, *path_names,
          encoding='utf-8', errors='strict')

     Abre o recurso nomeado para leitura de texto.  Por padrão, o
     conteúdo é lido como UTF-8 estrito.

     Veja *note a introdução: 47b5. para detalhes sobre 'anchor' e
     'path_names'.  'encoding' e 'errors' têm o mesmo significado que na
     embutida *note open(): 51c.

     Por motivos de compatibilidade com versões anteriores, o argumento
     'encoding' precisa ser passado explicitamente se houver múltiplos
     'path_names'.  Essa limitação está agendada para ser removida no
     Python 3.15.

     Esta função retorna um objeto *note TextIO: 41c3, isto é, um fluxo
     de texto aberto para leitura.

     Esta função é mais ou menos equivalente a:

          files(anchor).joinpath(*path_names).open('r', encoding=encoding)

     Alterado na versão 3.13: Múltiplos 'path_names' são aceitos.
     'encoding' e 'errors' precisam ser fornecidos como argumentos
     nomeados.

 -- Função: importlib.resources.read_binary (anchor, *path_names)

     Lê e retorna o conteúdo do recurso nomeado como *note bytes: 1c2.

     Veja *note a introdução: 47b5. para detalhes sobre 'anchor' e
     'path_names'.

     Esta função é mais ou menos equivalente a:

          files(anchor).joinpath(*path_names).read_bytes()

     Alterado na versão 3.13: Múltiplos 'path_names' são aceitos.

 -- Função: importlib.resources.read_text (anchor, *path_names,
          encoding='utf-8', errors='strict')

     Lê e retorna o conteúdo do recurso nomeado como *note str: 44c.
     Por padrão, o conteúdo é lido como UTF-8 estrito.

     Veja *note a introdução: 47b5. para detalhes sobre 'anchor' e
     'path_names'.  'encoding' e 'errors' têm o mesmo significado que na
     embutida *note open(): 51c.

     Por motivos de compatibilidade com versões anteriores, o argumento
     'encoding' precisa ser passado explicitamente se houver múltiplos
     'path_names'.  Essa limitação está agendada para ser removida no
     Python 3.15.

     Esta função é mais ou menos equivalente a:

          files(anchor).joinpath(*path_names).read_text(encoding=encoding)

     Alterado na versão 3.13: Múltiplos 'path_names' são aceitos.
     'encoding' e 'errors' precisam ser fornecidos como argumentos
     nomeados.

 -- Função: importlib.resources.path (anchor, *path_names)

     Fornece o caminho para o 'resource' como um caminho real do sistema
     de arquivos.  Essa função retorna um gerenciador de contexto para
     uso em uma instrução *note with: 5d2.  O gerenciador de contexto
     fornece um objeto *note pathlib.Path: 229.

     Sair do gerenciador de contexto limpa qualquer arquivo temporário
     criado, por exemplo quando o recurso precisa ser extraído de um
     arquivo zip.

     Por exemplo, o método *note stat(): 826. requer um caminho real em
     um sistema de arquivos; ele pode ser usado assim:

          with importlib.resources.path(anchor, "resource.txt") as fspath:
              result = fspath.stat()

     Veja *note a introdução: 47b5. para detalhes sobre 'anchor' e
     'path_names'.

     Esta função é mais ou menos equivalente a:

          as_file(files(anchor).joinpath(*path_names))

     Alterado na versão 3.13: Múltiplos 'path_names' são aceitos.
     'encoding' e 'errors' precisam ser fornecidos como argumentos
     nomeados.

 -- Função: importlib.resources.is_resource (anchor, *path_names)

     Retorna ‘True’ se o recurso nomeado existe, senão ‘False’.  Esta
     função não considera diretórios como sendo recursos.

     Veja *note a introdução: 47b5. para detalhes sobre 'anchor' e
     'path_names'.

     Esta função é mais ou menos equivalente a:

          files(anchor).joinpath(*path_names).is_file()

     Alterado na versão 3.13: Múltiplos 'path_names' são aceitos.

 -- Função: importlib.resources.contents (anchor, *path_names)

     Retorna um iterável sobre os itens nomeados no pacote ou caminho.
     O iterável retorna nomes de recursos (por exemplo, arquivos) e
     outros itens que não recursos (por exemplo, diretórios) como *note
     str: 44c.  O iterável não recorre em subdiretórios.

     Veja *note a introdução: 47b5. para detalhes sobre 'anchor' e
     'path_names'.

     Esta função é mais ou menos equivalente a:

          for resource in files(anchor).joinpath(*path_names).iterdir():
              yield resource.name

     Descontinuado desde a versão 3.11: Prefira ‘iterdir()’ como acima,
     que oferece mais controle sobre os resultados e funcionalidade mais
     rica.


File: python.info,  Node: importlib resources abc – Classes base abstratas para recursos,  Next: importlib metadata – Acessando metadados do pacote,  Prev: importlib resources – Leitura abertura e acesso a recursos de pacotes,  Up: Importando módulos

5.31.7 ‘importlib.resources.abc’ – Classes base abstratas para recursos
-----------------------------------------------------------------------

'Código-fonte:' Lib/importlib/resources/abc.py(1)

__________________________________________________________________

Adicionado na versão 3.11.

 -- Classe: importlib.resources.abc.ResourceReader

     'Substituída por TraversableResources'

     Uma *note classe base abstrata: 11f5. para fornecer a capacidade de
     ler 'recursos'.

     Da perspectiva deste ABC, um 'recurso' é um artefato binário que é
     enviado dentro de um pacote.  Normalmente isso é algo como um
     arquivo de dados que fica próximo ao arquivo ‘__init__.py’ do
     pacote.  O objetivo desta classe é ajudar a abstrair o acesso a
     tais arquivos de dados para que não importe se o pacote e seu(s)
     arquivo(s) de dados estão armazenados, por exemplo, em um arquivo
     zip versus no sistema de arquivos.

     Para qualquer um dos métodos desta classe, espera-se que o
     argumento 'resource' seja um *note objeto caminho ou similar: 2a0.
     que representa conceitualmente apenas um nome de arquivo.  Isso
     significa que nenhum caminho de subdiretório deve ser incluído no
     argumento 'resource'.  Isso ocorre porque a localização do pacote
     para o qual o leitor se destina, atua como o “diretório”.
     Portanto, a metáfora para diretórios e nomes de arquivos são
     pacotes e recursos, respectivamente.  É também por isso que se
     espera que as instâncias dessa classe se correlacionem diretamente
     a um pacote específico (em vez de representar potencialmente vários
     pacotes ou um módulo).

     Carregadores que desejam oferecer suporte à leitura de recursos
     devem fornecer um método chamado
     ‘get_resource_reader(nomecompleto)’ que retorna um objeto
     implementando esta interface ABC. Se o módulo especificado por
     nomecompleto não for um pacote, este método deve retornar *note
     None: 675.  Um objeto compatível com este ABC só deve ser retornado
     quando o módulo especificado for um pacote.

     Descontinuado desde a versão 3.12: Use *note
     importlib.resources.abc.TraversableResources: 2c5.

      -- Método: abstractmethod open_resource (resource)

          Retorna um *note objeto arquivo ou similar: 15cf. aberto para
          leitura binária de 'resource'.

          Se o recurso não puder ser encontrado, *note
          FileNotFoundError: 42b. é levantada.

      -- Método: abstractmethod resource_path (resource)

          Retorna o caminho do sistema de arquivos para 'resource'.

          Se o recurso não existir concretamente no sistema de arquivos,
          levanta *note FileNotFoundError: 42b.

      -- Método: abstractmethod is_resource (path)

          Returns ‘True’ if the named 'path' is considered a resource.
          *note FileNotFoundError: 42b. is raised if 'path' does not
          exist.

          Alterado na versão 3.10: The argument 'name' was renamed to
          'path'.

      -- Método: abstractmethod contents ()

          Retorna um *note iterável: 1268. de strings sobre o conteúdo
          do pacote.  Observe que não é necessário que todos os nomes
          retornados pelo iterador sejam recursos reais, por exemplo, é
          aceitável retornar nomes para os quais *note is_resource():
          47bb. seria falso.

          Permitir que nomes que não são recursos sejam retornados é
          permitir situações em que a forma como um pacote e seus
          recursos são armazenados é conhecida a priori e os nomes que
          não são recursos seriam úteis.  Por exemplo, o retorno de
          nomes de subdiretórios é permitido para que, quando se souber
          que o pacote e os recursos estão armazenados no sistema de
          arquivos, esses nomes de subdiretórios possam ser usados
          diretamente.

          O método abstrato retorna um iterável sem itens.

 -- Classe: importlib.resources.abc.Traversable

     Um objeto com um subconjunto de métodos de *note pathlib.Path: 229.
     adequados para percorrer diretórios e abrir arquivos.

     Para uma representação do objeto no sistema de arquivos, use *note
     importlib.resources.as_file(): 48d.

      -- Atributo: name

          Abstrato.  O nome base deste objeto sem nenhuma referência
          pai.

      -- Método: abstractmethod iterdir ()

          Produz objetos Traversable em self.

      -- Método: abstractmethod is_dir ()

          Retorna ‘True’ se self for um diretório.

      -- Método: abstractmethod is_file ()

          Retorna ‘True’ se self for um arquivo.

      -- Método: abstractmethod joinpath (*pathsegments)

          Percorre os diretórios de acordo com 'pathsegments' e retorna
          o resultado como ‘Traversable’.

          Cada argumento 'pathsegments' pode conter vários nomes
          separados por barras (‘/’, ‘posixpath.sep’).  Por exemplo, os
          seguintes são equivalentes:

               files.joinpath('subdir', 'subsuddir', 'arquivo.txt')
               files.joinpath('subdir/subsuddir/arquivo.txt')

          Observe que algumas implementações de ‘Traversable’ podem não
          ser atualizadas para a versão mais recente do protocolo.  Para
          compatibilidade com tais implementações, forneça um único
          argumento sem separadores de caminho para cada chamada para
          ‘joinpath’.  Por exemplo:

               files.joinpath('subdir').joinpath('subsubdir').joinpath('arquivo.txt')

          Alterado na versão 3.11: ‘joinpath’ aceita múltiplos
          'pathsegments', e estes segmentos podem conter barras como
          separadores de caminho.  Anteriormente, apenas um único
          argumento 'child' era aceito.

      -- Método: abstractmethod __truediv__ (child)

          Retorna um filho Traversable em si mesmo.  Equivalente a
          ‘joinpath(child)’.

      -- Método: abstractmethod open (mode='r', *args, **kwargs)

          'mode' pode ser ‘r’ ou ‘rb’ para abrir como texto ou binário.
          Retorna um manipulador adequado para leitura (o mesmo que
          *note pathlib.Path.open: 2976.).

          Ao abrir como texto, aceita parâmetros de codificação como os
          aceitos por *note io.TextIOWrapper: 7bc.

      -- Método: read_bytes ()

          Lê o conteúdo de self como bytes.

      -- Método: read_text (encoding=None)

          Lê o conteúdo de self como texto.

 -- Classe: importlib.resources.abc.TraversableResources

     Uma classe base abstrata para leitores de recursos capaz de servir
     a interface *note importlib.resources.files(): 48e.  É uma
     subclasse de *note ResourceReader: 476d. e fornece implementações
     concretas dos métodos abstratos de ‘ResourceReader’.  Portanto,
     qualquer carregador que forneça ‘TraversableResources’ também
     fornece ‘ResourceReader’.

     Espera-se que os carregadores que desejam oferecer suporte à
     leitura de recursos implementem essa interface.

      -- Método: abstractmethod files ()

          Retorna um objeto *note importlib.resources.abc.Traversable:
          1f3. para o pacote carregado.

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/importlib/resources/abc.py


File: python.info,  Node: importlib metadata – Acessando metadados do pacote,  Next: A inicialização do caminho de pesquisa de módulos sys path,  Prev: importlib resources abc – Classes base abstratas para recursos,  Up: Importando módulos

5.31.8 ‘importlib.metadata’ – Acessando metadados do pacote
-----------------------------------------------------------

Adicionado na versão 3.8.

Alterado na versão 3.10: ‘importlib.metadata’ não é mais provisório.

'Código-fonte:' Lib/importlib/metadata/__init__.py(1)

‘importlib.metadata’ é uma biblioteca que fornece acesso aos metadados
de um Pacote de Distribuição(2) instalado, como seus pontos de entrada
ou seus nomes de nível superior (Pacotes de Importação(3), módulos, se
houver).  Construída em parte no sistema de importação do Python, esta
biblioteca pretende substituir funcionalidades semelhantes na API de
ponto de entrada(4) e API de metadados(5) de ‘pkg_resources’.  Junto com
*note importlib.resources: 7b, este pacote pode eliminar a necessidade
de usar o pacote ‘pkg_resources’ mais antigo e menos eficiente.

‘importlib.metadata’ opera em 'pacotes de distribuição' de terceiros
instalados no diretório ‘site-packages’ do Python através de ferramentas
como pip(6).  Especificamente, ele funciona com distribuições com
diretórios ‘dist-info’ ou ‘egg-info’ detectáveis, e metadados definidos
pelas Especificações de metadados principais(7).

     Importante: Eles 'não' são necessariamente equivalentes ou
     correspondem 1:1 aos nomes de 'pacotes de importação' de nível
     superior que podem ser importados dentro do código Python.  Um
     'pacote de distribuição' pode conter vários 'pacotes de importação'
     (e módulos únicos), e um 'pacote de importação' de nível superior
     pode ser mapeado para vários 'pacotes de distribuição' se for um
     pacote de espaço de nomes.  Você pode usar *note
     packages_distributions(): 813. para obter um mapeamento entre eles.

Por padrão, os metadados de distribuição podem residir no sistema de
arquivos ou em arquivos zip em *note sys.path: 3b4.  Através de um
mecanismo de extensão, os metadados podem residir em praticamente
qualquer lugar.

Ver também
..........

‘https://importlib-metadata.readthedocs.io/’

     A documentação para ‘importlib_metadata’, que fornece um backport
     de ‘importlib.metadata’.  Isso inclui uma referência de API(8) para
     as classes e funções deste módulo, bem como um guia de migração(9)
     para usuários existentes de ‘pkg_resources’.

* Menu:

* Visão Geral: Visão Geral<3>.
* API funcional: API funcional<2>.
* Distribuições::
* Descoberta de distribuição::
* Estendendo o algoritmo de pesquisa::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/Lib/importlib/metadata/__init__.py

   (2) 
https://packaging.python.org/pt_BR/latest/glossary/#term-Import-Package

   (3) 
https://packaging.python.org/pt_BR/latest/glossary/#term-Import-Package

   (4) 
https://setuptools.readthedocs.io/en/latest/pkg_resources.html#entry-points

   (5) 
https://setuptools.readthedocs.io/en/latest/pkg_resources.html#metadata-api

   (6) https://pypi.org/project/pip/

   (7) 
https://packaging.python.org/pt_BR/latest/specifications/core-metadata/#core-metadata

   (8) https://importlib-metadata.readthedocs.io/en/latest/api.html

   (9) 
https://importlib-metadata.readthedocs.io/en/latest/migration.html


File: python.info,  Node: Visão Geral<3>,  Next: API funcional<2>,  Up: importlib metadata – Acessando metadados do pacote

5.31.8.1 Visão Geral
....................

Digamos que você queira obter a string da versão de um Pacote de
Distribuição(1) que você instalou usando ‘pip’.  Começamos criando um
ambiente virtual e instalando algo nele:

     $ python -m venv exemplo
     $ source exemplo/bin/activate
     (exemplo) $ python -m pip install wheel

Você pode obter a string de versão para ‘wheel’ executando o seguinte:

     (example) $ python
     >>> from importlib.metadata import version
     >>> version('wheel')
     '0.32.3'

Você também pode obter uma coleção de pontos de entrada selecionáveis
pelas propriedades do EntryPoint (normalmente ‘group’ ou ‘name’), como
‘console_scripts’, ‘distutils.commands’ e outros.  Cada grupo contém uma
coleção de objetos *note EntryPoint: 284.

Você pode obter os *note metadados para uma distribuição: 47cc.:

     >>> list(metadata('wheel'))
     ['Metadata-Version', 'Name', 'Version', 'Summary', 'Home-page', 'Author', 'Author-email', 'Maintainer', 'Maintainer-email', 'License', 'Project-URL', 'Project-URL', 'Project-URL', 'Keywords', 'Platform', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Classifier', 'Requires-Python', 'Provides-Extra', 'Requires-Dist', 'Requires-Dist']

Você também pode obter uma *note número da versão da distribuição: 47cd,
listar seus *note arquivos constituintes: 47ce. e obter uma lista dos
*note Requisitos de distribuição: 47cf. da distribuição.

 -- Exceção: importlib.metadata.PackageNotFoundError

     Subclasse de *note ModuleNotFoundError: b5b. levantada por diversas
     funções neste módulo quando consultada sobre um pacote de
     distribuição que não está instalado no ambiente Python atual.

   ---------- Footnotes ----------

   (1) 
https://packaging.python.org/pt_BR/latest/glossary/#term-Distribution-Package


File: python.info,  Node: API funcional<2>,  Next: Distribuições,  Prev: Visão Geral<3>,  Up: importlib metadata – Acessando metadados do pacote

5.31.8.2 API funcional
......................

Este pacote fornece a seguinte funcionalidade por meio de sua API
pública.

* Menu:

* Pontos de entrada::
* Metadados de distribuição::
* Versões de distribuição::
* Arquivos de distribuição::
* Requisitos de distribuição::
* Mapeando importação pra pacotes de distribuição::


File: python.info,  Node: Pontos de entrada,  Next: Metadados de distribuição,  Up: API funcional<2>

5.31.8.3 Pontos de entrada
..........................

 -- Função: importlib.metadata.entry_points (**select_params)

     Retorna uma instância de *note EntryPoints: 47d4. descrevendo
     pontos de entrada para o ambiente atual.  Quaisquer parâmetros
     nomeados fornecidos são passados para o método ‘select()’ para
     comparação com os atributos das definições de pontos de entrada
     individuais.

     Observação: atualmente não é possível consultar pontos de entrada
     com base no atributo ‘EntryPoint.dist’ (já que instâncias
     diferentes de ‘Distribution’ não são comparadas como iguais, mesmo
     que tenham os mesmos atributos)

 -- Classe: importlib.metadata.EntryPoints

     Detalhes de uma coleção de pontos de entrada instalados.

     Também fornece um atributo ‘.groups’ que relata todos os grupos de
     pontos de entrada identificados e um atributo ‘.names’ que relata
     todos os nomes de pontos de entrada identificados.

 -- Classe: importlib.metadata.EntryPoint

     Detalhes de um ponto de entrada instalado.

     Cada instância de ‘EntryPoint’ tem os atributos ‘.name’, ‘.group’ e
     ‘.value’ e um método ‘.load()’ para resolver o valor.  Há também os
     atributos ‘.module’, ‘.attr’ e ‘.extras’ para obter os componentes
     do atributo ‘.value’ e ‘.dist’ para obter informações sobre o
     pacote de distribuição que fornece o ponto de entrada.

Consultar todos os pontos de entrada:

     >>> eps = entry_points()

A função ‘entry_points()’ retorna um objeto ‘EntryPoints’, uma coleção
de todos os objetos ‘EntryPoint’ com atributos ‘names’ e ‘groups’ por
conveniência:

     >>> sorted(eps.groups)
     ['console_scripts', 'distutils.commands', 'distutils.setup_keywords', 'egg_info.writers', 'setuptools.installation']

‘EntryPoints’ possui um método ‘select()’ para selecionar pontos de
entrada correspondendo a propriedades específicas.  Selecione pontos de
entrada no grupo ‘console_scripts’:

     >>> scripts = eps.select(group='console_scripts')

Equivalentemente, já que ‘entry_points()’ passa argumentos nomeados para
a seleção:

     >>> scripts = entry_points(group='console_scripts')

Escolha um script específico chamado “wheel” (encontrado no projeto
wheel):

     >>> 'wheel' in scripts.names
     True
     >>> wheel = scripts['wheel']

De forma equivalente, consulte esse ponto de entrada durante a seleção:

     >>> (wheel,) = entry_points(group='console_scripts', name='wheel')
     >>> (wheel,) = entry_points().select(group='console_scripts', name='wheel')

Inspecione o ponto de entrada resolvido:

     >>> wheel
     EntryPoint(name='wheel', value='wheel.cli:main', group='console_scripts')
     >>> wheel.module
     'wheel.cli'
     >>> wheel.attr
     'main'
     >>> wheel.extras
     []
     >>> main = wheel.load()
     >>> main
     <function main at 0x103528488>

O ‘group’ e ‘name’ são valores arbitrários definidos pelo autor do
pacote e normalmente um cliente desejará resolver todos os pontos de
entrada para um grupo específico.  Leia a documentação do setuptools(1)
para obter mais informações sobre pontos de entrada, sua definição e
uso.

Alterado na versão 3.12: Os pontos de entrada “selecionáveis” foram
introduzidos em ‘importlib_metadata’ 3.6 e Python 3.10.  Antes dessas
mudanças, ‘entry_points’ não aceitava parâmetros e sempre retornava um
dicionário de pontos de entrada, chaveado por grupo.  Com
‘importlib_metadata’ 5.0 e Python 3.12, ‘entry_points’ sempre retorna um
objeto ‘EntryPoints’.  Veja backports.entry_points_selectable(2) para
opções de compatibilidade.

Alterado na versão 3.13: Objetos ‘EntryPoint’ não apresentam mais uma
interface tupla ou similar (*note __getitem__(): 283.).

   ---------- Footnotes ----------

   (1) https://setuptools.pypa.io/en/latest/userguide/entry_point.html

   (2) https://pypi.org/project/backports.entry_points_selectable/


File: python.info,  Node: Metadados de distribuição,  Next: Versões de distribuição,  Prev: Pontos de entrada,  Up: API funcional<2>

5.31.8.4 Metadados de distribuição
..................................

 -- Função: importlib.metadata.metadata (distribution_name)

     Retorna os metadados de distribuição correspondentes ao pacote de
     distribuição nomeado como uma instância de *note PackageMetadata:
     47d8.

     Levanta *note PackageNotFoundError: 47d0. se o pacote de
     distribuição nomeado não estiver instalado no ambiente Python
     atual.

 -- Classe: importlib.metadata.PackageMetadata

     Uma implementação concreta do protocolo PackageMetadata(1).

     Além de fornecer os métodos e atributos de protocolo definidos,
     subscrever a instância é equivalente a chamar o método ‘get()’.

Cada Pacote de Distribuição(2) inclui alguns metadados, que você pode
extrair usando a função ‘metadata()’:

     >>> wheel_metadata = metadata('wheel')

As chaves da estrutura de dados retornada nomeiam as palavras reservadas
dos metadados, e os valores são retornados sem análise dos metadados de
distribuição:

     >>> wheel_metadata['Requires-Python']
     '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*'

*note PackageMetadata: 47d8. também apresenta um atributo ‘json’ que
retorna todos os metadados em um formato compatível com JSON pela PEP
566(3):

     >>> wheel_metadata.json['requires_python']
     '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*'

O conjunto completo de metadados disponíveis não é descrito aqui.
Consulte a especificação de metadados principais do PyPA(4) para obter
detalhes adicionais.

Alterado na versão 3.10: A ‘Description’ agora é incluída nos metadados
quando apresentada através do payload.  Os caracteres de continuação de
linha foram removidos.

O atributo ‘json’ foi adicionado.

   ---------- Footnotes ----------

   (1) 
https://importlib-metadata.readthedocs.io/en/latest/api.html#importlib_metadata.PackageMetadata

   (2) 
https://packaging.python.org/pt_BR/latest/glossary/#term-Distribution-Package

   (3) https://peps.python.org/pep-0566/

   (4) 
https://packaging.python.org/pt_BR/latest/specifications/core-metadata/#core-metadata


File: python.info,  Node: Versões de distribuição,  Next: Arquivos de distribuição,  Prev: Metadados de distribuição,  Up: API funcional<2>

5.31.8.5 Versões de distribuição
................................

 -- Função: importlib.metadata.version (distribution_name)

     Retorna a versão(1) do pacote de distribuição instalado para o
     pacote de distribuição nomeado.

     Levanta *note PackageNotFoundError: 47d0. se o pacote de
     distribuição nomeado não estiver instalado no ambiente Python
     atual.

A função ‘version()’ é a maneira mais rápida de obter o número de versão
de um Pacote de Distribuição(2), como uma string:

     >>> version('wheel')
     '0.32.3'

   ---------- Footnotes ----------

   (1) 
https://packaging.python.org/pt-br/latest/specifications/core-metadata/#version

   (2) 
https://packaging.python.org/pt_BR/latest/glossary/#term-Distribution-Package


File: python.info,  Node: Arquivos de distribuição,  Next: Requisitos de distribuição,  Prev: Versões de distribuição,  Up: API funcional<2>

5.31.8.6 Arquivos de distribuição
.................................

 -- Função: importlib.metadata.files (distribution_name)

     Retorna o conjunto completo de arquivos contidos no pacote de
     distribuição nomeado.

     Levanta *note PackageNotFoundError: 47d0. se o pacote de
     distribuição nomeado não estiver instalado no ambiente Python
     atual.

     Retorna *note None: 675. se a distribuição for encontrada, mas os
     registros do banco de dados de instalação que relatam os arquivos
     associados ao pacote de distribuição estiverem ausentes.

 -- Classe: importlib.metadata.PackagePath

     Um objeto derivado de *note pathlib.PurePath: 4a6. com propriedades
     adicionais ‘dist’, ‘size’ e ‘hash’ correspondentes aos metadados de
     instalação do pacote de distribuição para esse arquivo.

A função ‘files()’ pega um nome Pacote de Distribuição(1) e retorna
todos os arquivos instalados por este distribuição.  Cada arquivo é é
relatado como uma instância de *note PackagePath: 47dc.  Por exemplo:

     >>> util = [p for p in files('wheel') if 'util.py' in str(p)][0]
     >>> util
     PackagePath('wheel/util.py')
     >>> util.size
     859
     >>> util.dist
     <importlib.metadata._hooks.PathDistribution object at 0x101e0cef0>
     >>> util.hash
     <FileHash mode: sha256 value: bYkw5oMccfazVCoYQwKkkemoVyMAFoR34mmKBx8R1NI>

Uma vez que tenha o arquivo, você também pode ler seu conteúdo:

     >>> print(util.read_text())
     import base64
     import sys
     ...
     def as_bytes(s):
         if isinstance(s, text_type):
             return s.encode('utf-8')
         return s

Você também pode usar o método ‘locate()’ para obter o caminho absoluto
para o arquivo:

     >>> util.locate()
     PosixPath('/home/gustav/example/lib/site-packages/wheel/util.py')

No caso em que o arquivo de metadados que lista os arquivos (‘RECORD’ ou
‘SOURCES.txt’) estiver faltando, ‘files()’ retornará *note None: 675.  O
chamador pode querer agrupar chamadas para ‘files()’ em
always_iterable(2) ou de outra forma se proteger contra isso condição se
a distribuição de destino não for conhecida por ter os metadados
presentes.

   ---------- Footnotes ----------

   (1) 
https://packaging.python.org/pt_BR/latest/glossary/#term-Distribution-Package

   (2) 
https://more-itertools.readthedocs.io/en/stable/api.html#more_itertools.always_iterable


File: python.info,  Node: Requisitos de distribuição,  Next: Mapeando importação pra pacotes de distribuição,  Prev: Arquivos de distribuição,  Up: API funcional<2>

5.31.8.7 Requisitos de distribuição
...................................

 -- Função: importlib.metadata.requires (distribution_name)

     Retorna os especificadores de dependência declarados para o pacote
     de distribuição nomeado.

     Levanta *note PackageNotFoundError: 47d0. se o pacote de
     distribuição nomeado não estiver instalado no ambiente Python
     atual.

Para obter o conjunto completo de requisitos para um Pacote de
Distribuição(1), use a função ‘requires()’:

     >>> requires('wheel')
     ["pytest (>=3.0.0) ; extra == 'test'", "pytest-cov ; extra == 'test'"]

   ---------- Footnotes ----------

   (1) 
https://packaging.python.org/pt_BR/latest/glossary/#term-Distribution-Package


File: python.info,  Node: Mapeando importação pra pacotes de distribuição,  Prev: Requisitos de distribuição,  Up: API funcional<2>

5.31.8.8 Mapeando importação pra pacotes de distribuição
........................................................

 -- Função: importlib.metadata.packages_distributions ()

     Retorna um mapeamento do módulo de nível superior e importa os
     nomes dos pacotes encontrados via *note sys.meta_path: d4d. para os
     nomes dos pacotes de distribuição (se houver) que fornecem os
     arquivos correspondentes.

     Para permitir pacotes de espaço de nomes (que podem ter membros
     fornecidos por vários pacotes de distribuição), cada nome de
     importação de nível superior é mapeado para uma lista de nomes de
     distribuição em vez de mapear diretamente para um único nome.

Um método conveniente para resolver o nome do Pacote de Distribuição(1)
(ou nomes, no caso de um pacote de espaço de nomes) que fornece cada
módulo Python de nível superior importável ou Pacote de Importação(2):

     >>> packages_distributions()
     {'importlib_metadata': ['importlib-metadata'], 'yaml': ['PyYAML'], 'jaraco': ['jaraco.classes', 'jaraco.functools'], ...}

Algumas instalações editáveis não fornecem nomes de nível superior(3) e,
portanto, esta função não é confiável com tais instalações.

Adicionado na versão 3.10.

   ---------- Footnotes ----------

   (1) 
https://packaging.python.org/pt_BR/latest/glossary/#term-Distribution-Package

   (2) 
https://packaging.python.org/pt_BR/latest/glossary/#term-Import-Package

   (3) https://github.com/pypa/packaging-problems/issues/609


File: python.info,  Node: Distribuições,  Next: Descoberta de distribuição,  Prev: API funcional<2>,  Up: importlib metadata – Acessando metadados do pacote

5.31.8.9 Distribuições
......................

 -- Função: importlib.metadata.distribution (distribution_name)

     Retorna uma instância de *note Distribution: 47e4. descrevendo o
     pacote de distribuição nomeado.

     Levanta *note PackageNotFoundError: 47d0. se o pacote de
     distribuição nomeado não estiver instalado no ambiente Python
     atual.

 -- Classe: importlib.metadata.Distribution

     Detalhes de um pacote de distribuição instalado.

     Observação: instâncias diferentes de ‘Distribution’ não são
     atualmente consideradas iguais em uma comparação, mesmo que estejam
     relacionadas à mesma distribuição instalada e, portanto, tenham os
     mesmos atributos.

Embora a API de nível de módulo descrita acima seja o uso mais comum e
conveniente, você pode obter todas essas informações da classe
‘Distribution’.  ‘Distribution’ é um objeto abstrato que representa os
metadados para um Pacote de Distribuição(1) Python.  Você pode obter a
instância concreta de subclasse de ‘Distribution’ para um pacote de
distribuição instalado chamando a função *note distribution(): 47e3.:

     >>> from importlib.metadata import distribution
     >>> dist = distribution('wheel')
     >>> type(dist)
     <class 'importlib.metadata.PathDistribution'>

Assim, uma forma alternativa de obter o número da versão é através da
instância ‘Distribution’:

     >>> dist.version
     '0.32.3'

Existem todos os tipos de metadados adicionais disponíveis em instâncias
de ‘Distribution’:

     >>> dist.metadata['Requires-Python']
     '>=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*'
     >>> dist.metadata['License']
     'MIT'

Para pacotes editáveis, uma propriedade ‘origin’ pode apresentar
metadados conforme a PEP 610(2):

     >>> dist.origin.url
     'file:///caminho/para/wheel-0.32.3.editable-py3-none-any.whl'

O conjunto completo de metadados disponíveis não é descrito aqui.
Consulte a especificação de metadados principais do PyPA(3) para obter
detalhes adicionais.

Adicionado na versão 3.13: A propriedade ‘.origin’ foi adicionada.

   ---------- Footnotes ----------

   (1) 
https://packaging.python.org/pt_BR/latest/glossary/#term-Distribution-Package

   (2) https://peps.python.org/pep-0610/

   (3) 
https://packaging.python.org/pt_BR/latest/specifications/core-metadata/#core-metadata


File: python.info,  Node: Descoberta de distribuição,  Next: Estendendo o algoritmo de pesquisa,  Prev: Distribuições,  Up: importlib metadata – Acessando metadados do pacote

5.31.8.10 Descoberta de distribuição
....................................

Por padrão, este pacote fornece suporte embutido para descoberta de
metadados para sistema de arquivos e arquivo zip Pacotes de
Distribuição(1).  Esta pesquisa do localizador de metadados tem como
padrão ‘sys.path’, mas varia um pouco na maneira como ela interpreta
esses valores em relação a outras mecanismo de importação.  Em
particular:

   - ‘importlib.metadata’ não honra objetos *note bytes: 1c2. em
     ‘sys.path’.

   - ‘importlib.metadata’ irá incidentalmente honrar objetos *note
     pathlib.Path: 229. em ‘sys.path’ mesmo que tais valores sejam
     ignorados para importações.

   ---------- Footnotes ----------

   (1) 
https://packaging.python.org/pt_BR/latest/glossary/#term-Distribution-Package


File: python.info,  Node: Estendendo o algoritmo de pesquisa,  Prev: Descoberta de distribuição,  Up: importlib metadata – Acessando metadados do pacote

5.31.8.11 Estendendo o algoritmo de pesquisa
............................................

Como os metadados de Pacote de Distribuição(1) não estão disponíveis por
meio de pesquisas a *note sys.path: 3b4. ou carregadores de pacotes
diretamente, os metadados de uma distribuição são encontrados através de
*note localizadores: 2182. do sistema de importação.  Para encontrar os
metadados de um pacote de distribuição, ‘importlib.metadata’ consulta a
lista de *note localizadores de metacaminho: 10a9. em *note
sys.meta_path: d4d.

Por padrão ‘importlib.metadata’ instala um localizador para pacotes de
distribuição encontrados no sistema de arquivos.  Na verdade, esse
localizador não encontra nenhuma 'distribuição', mas pode encontrar seus
metadados.

A classe abstrata *note importlib.abc.MetaPathFinder: 872. define a
interface esperada dos localizadores pelo sistema de importação do
Python.  ‘importlib.metadata’ estende este protocolo procurando por um
chamável ‘find_distributions’ opcional nos localizadores de *note
sys.meta_path: d4d. e apresenta esta interface estendida como a classe
base abstrata ‘DistributionFinder’, que define este método abstrato:

     @abc.abstractmethod
     def find_distributions(context=DistributionFinder.Context()):
         """Return an iterable of all Distribution instances capable of
         loading the metadata for packages for the indicated ``context``.
         """

O objeto ‘DistributionFinder.Context’ fornece propriedades ‘.path’ e
‘.name’ indicando o caminho para pesquisar e o nome a ser correspondido
e pode fornecer outro contexto relevante.

O que isso significa na prática é que para prover suporte à localização
de metadados de pacotes de distribuição em outros locais fora do sistema
de arquivos, crie uma subclasse ‘Distribution’ e implemente os métodos
abstratos.  Então, a partir de um localizador personalizado, retorne
instâncias deste derivado de ‘Distribution’ no método
‘find_distributions()’.

* Menu:

* Exemplo: Exemplo<14>.

   ---------- Footnotes ----------

   (1) 
https://packaging.python.org/pt_BR/latest/glossary/#term-Distribution-Package


File: python.info,  Node: Exemplo<14>,  Up: Estendendo o algoritmo de pesquisa

5.31.8.12 Exemplo
.................

Considere, por exemplo, um localizador personalizado que carrega módulos
Python de um banco de dados:

     class DatabaseImporter(importlib.abc.MetaPathFinder):
         def __init__(self, db):
             self.db = db

         def find_spec(self, fullname, target=None) -> ModuleSpec:
             return self.db.spec_from_name(fullname)

     sys.meta_path.append(DatabaseImporter(connect_db(...)))

Esse importador agora provavelmente fornece módulos importáveis de um
banco de dados, mas não fornece metadados ou pontos de entrada.  Para
que este importador personalizado forneça metadados, ele também
precisaria implementar ‘DistributionFinder’:

     from importlib.metadata import DistributionFinder

     class DatabaseImporter(DistributionFinder):
         ...

         def find_distributions(self, context=DistributionFinder.Context()):
             query = dict(name=context.name) if context.name else {}
             for dist_record in self.db.query_distributions(query):
                 yield DatabaseDistribution(dist_record)

Desta forma, ‘query_distributions’ retornaria registros para cada
distribuição servida pelo banco de dados correspondente à consulta.  Por
exemplo, se ‘requests-1.0’ estiver no banco de dados,
‘find_distributions’ produziria um ‘DatabaseDistribution’ para
‘Context(name='requests')’ ou ‘Context(name=None)’.

Por uma questão de simplicidade, este exemplo ignora ‘context.path’.  O
atributo ‘path’ tem como padrão ‘sys.path’ e é o conjunto de caminhos de
importação a serem considerados na pesquisa.  Um ‘DatabaseImporter’
poderia funcionar potencialmente sem qualquer preocupação com um caminho
de pesquisa.  Supondo que o importador não faça particionamento, o
caminho “path” seria irrelevante.  Para ilustrar o propósito de ‘path’,
o exemplo precisaria ilustrar um ‘DatabaseImporter’ mais complexo cujo
comportamento variasse dependendo de ‘sys.path’/‘PYTHONPATH’.  Nesse
caso, ‘find_distributions’ deve respeitar o ‘context.path’ e produzir
apenas ‘Distribution’s pertinentes a esse caminho.

‘DatabaseDistribution’, então, se pareceria com algo como:

     class DatabaseDistribution(importlib.metadata.Distribution):
         def __init__(self, record):
             self.record = record

         def read_text(self, filename):
             """
             Lê um arquivo como "METADATA" para a atual distribuição.
             """
             if filename == "METADATA":
                 return f"""Name: {self.record.name}
     Version: {self.record.version}
     """
             if filename == "entry_points.txt":
                 return "\n".join(
                   f"""[{ep.group}]\n{ep.name}={ep.value}"""
                   for ep in self.record.entry_points)

         def locate_file(self, path):
             raise RuntimeError("This distribution has no file system")

Esta implementação básica deve fornecer metadados e pontos de entrada
para pacotes servidos pelo ‘DatabaseImporter’, presumindo que o ‘record’
forneça os atributos ‘.name’, ‘.version’ e ‘.entry_points’ adequados.

O ‘DatabaseDistribution’ também pode fornecer outros arquivos de
metadados, como ‘RECORD’ (necessário para ‘Distribution.files’) ou
substituir a implementação de ‘Distribution.files’.  Veja o código-fonte
para mais inspiração.


File: python.info,  Node: A inicialização do caminho de pesquisa de módulos sys path,  Prev: importlib metadata – Acessando metadados do pacote,  Up: Importando módulos

5.31.9 A inicialização do caminho de pesquisa de módulos ‘sys.path’
-------------------------------------------------------------------

Um caminho de pesquisa de módulos é inicializado quando o Python é
iniciado.  Este caminho de pesquisa de módulos pode ser acessado em
*note sys.path: 3b4.

A primeira entrada no caminho de pesquisa de módulos é o diretório que
contém o script de entrada, se houver.  Caso contrário, a primeira
entrada é o diretório atual, que é o caso ao executar o console
interativo, um comando com *note -c: 5e0. ou um módulo com *note -m:
5e1.

A variável de ambiente *note PYTHONPATH: 1053. é frequentemente usada
para adicionar diretórios ao caminho de pesquisa.  Se esta variável de
ambiente for encontrada, o conteúdo será adicionado ao caminho de
pesquisa de módulos.

     Nota: *note PYTHONPATH: 1053. afetará todas as versões/ambientes
     Python instalados.  Tenha cuidado ao definir isso em seu perfil do
     shell ou em variáveis de ambiente globais.  O módulo *note site:
     c7. oferece técnicas mais diferenciadas, conforme mencionado
     abaixo.

Os próximos itens adicionados são os diretórios contendo módulos padrão
do Python, bem como quaisquer *note módulos de extensão: 47eb. dos quais
esses módulos dependem.  Módulos de extensão são arquivos ‘.pyd’ no
Windows e arquivos ‘.so’ em outras plataformas.  O diretório com os
módulos Python independentes de plataforma é chamado ‘prefix’.  O
diretório com os módulos de extensão é chamado ‘exec_prefix’.

A variável de ambiente *note PYTHONHOME: 3bc. pode ser usada para
definir os locais ‘prefix’ e ‘exec_prefix’.  Caso contrário, esses
diretórios serão encontrados usando o executável Python como ponto de
partida e, em seguida, procurando por vários arquivos e diretórios “de
referência”.  Observe que todos os links simbólicos são seguidos para
que o local real do executável do Python seja usado como ponto de
partida da pesquisa.  O local do executável do Python é chamado ‘home’.

Uma vez que ‘home’ é determinado, o diretório ‘prefix’ é encontrado
procurando primeiro por ‘python`majorversion'`minorversion'.zip’
(‘python311.zip’).  No Windows, o arquivo zip é procurado em ‘home’ e no
Unix espera-se que o arquivo esteja em ‘lib’.  Observe que o local
esperado do arquivo zip é adicionado ao caminho de pesquisa de módulos,
mesmo que o arquivo não exista.  Se nenhum arquivo for encontrado, o
Python no Windows continuará a pesquisa por ‘prefix’ procurando por
‘Lib\os.py’.  Python no Unix procurará por
‘lib/python`majorversion'.`minorversion'/os.py’
(‘lib/python3.11/os.py’).  No Windows, ‘prefix’ e ‘exec_prefix’ são
iguais, porém em outras plataformas
‘lib/python`majorversion'.`minorversion'/lib-dynload’
(‘lib/python3.11/lib-dynload’) é pesquisado e usado como âncora para
‘exec_prefix’.  Em algumas plataformas, ‘lib’ pode ser ‘lib64’ ou outro
valor, veja *note sys.platlibdir: 93f. e *note PYTHONPLATLIBDIR: 1ab0.

Uma vez encontrados, ‘prefix’ e ‘exec_prefix’ estão disponíveis em *note
sys.prefix: 3b6. e *note sys.exec_prefix: 3b2, respectivamente.

Finalmente, o módulo *note site: c7. é processado e os diretórios
‘site-packages’ são adicionados ao caminho de pesquisa de módulos.  Uma
maneira comum de personalizar o caminho de pesquisa é criar módulos
*note sitecustomize: c8. ou *note usercustomize: 10e. conforme descrito
na documentação do módulo *note site: c7.

     Nota: Certas opções de linha de comando podem afetar ainda mais os
     cálculos de caminho.  Veja *note -E: 964, *note -I: 965, *note -s:
     13d5. e *note -S: 11e7. para mais detalhes.

* Menu:

* Ambientes virtuais: Ambientes virtuais<2>.
* Arquivos _pth::
* Python embarcado::


File: python.info,  Node: Ambientes virtuais<2>,  Next: Arquivos _pth,  Up: A inicialização do caminho de pesquisa de módulos sys path

5.31.9.1 Ambientes virtuais
...........................

Se Python for executado em um ambiente virtual (conforme descrito em
*note Ambientes virtuais e pacotes: 1e83.), então ‘prefix’ e
‘exec_prefix’ são específicos para o ambiente virtual.

Se um arquivo ‘pyvenv.cfg’ for encontrado juntamente com o principal
executável, ou no diretório um nível acima do executável, as seguintes
variações se aplicam:

   * Se ‘home’ é um caminho absoluto e *note PYTHONHOME: 3bc. não está
     definido, o caminho é usado ao invés do caminho ao principal
     executável quando deduzindo ‘prefix’ e ‘exec_prefix’.


File: python.info,  Node: Arquivos _pth,  Next: Python embarcado,  Prev: Ambientes virtuais<2>,  Up: A inicialização do caminho de pesquisa de módulos sys path

5.31.9.2 Arquivos _pth
......................

Para substituir completamente *note sys.path: 3b4, crie um arquivo
‘._pth’ com o mesmo nome da biblioteca compartilhada ou executável
(‘python._pth’ ou ‘python311._pth’).  O caminho da biblioteca
compartilhada é sempre conhecido no Windows, mas pode não estar
disponível em outras plataformas.  No arquivo ‘._pth’, especifique uma
linha para cada caminho a ser adicionado a *note sys.path: 3b4.  O
arquivo baseado no nome da biblioteca compartilhada substitui aquele
baseado no executável, o que permite que os caminhos sejam restritos
para qualquer programa que carregue o tempo de execução, se desejado.

Quando o arquivo existe, todos os registros e variáveis de ambiente são
ignorados, o modo isolado é ativado, e *note site: c7. não é importado a
menos que uma linha do arquivo especifique ‘import site’.  Caminhos em
branco e linhas começando com ‘#’ são ignorados.  Cada caminho pode ser
absoluto ou relativo ao local do arquivo.  Instruções de importação
diferente de ‘site’ não são permitidas, e código arbitrário não pode ser
especificado.

Note que arquivos ‘.pth’ (sem o sublinhado no início) serão processados
normalmente pelo módulo *note site: c7. quando ‘import site’ tiver sido
especificado.


File: python.info,  Node: Python embarcado,  Prev: Arquivos _pth,  Up: A inicialização do caminho de pesquisa de módulos sys path

5.31.9.3 Python embarcado
.........................

Se o Python estiver incorporado em outra aplicação, *note
Py_InitializeFromConfig(): 3c5. e a estrutura *note PyConfig: 3a6. podem
ser usados para inicializar o Python.  Os detalhes específicos do
caminho estão descritos em *note Python Path Configuration: 8b2.

Ver também
..........

   * *note Encontrando módulos: c3b. para observações detalhadas do
     Windows.

   * *note Utilizando Python em plataformas Unix: 1edd. para detalhes do
     Unix.


File: python.info,  Node: Serviços da Linguagem Python,  Next: Serviços Específicos do MS Windows,  Prev: Importando módulos,  Up: A Biblioteca Padrão do Python

5.32 Serviços da Linguagem Python
=================================

O Python fornece vários módulos para ajudar a trabalhar com a linguagem
Python.  Estes módulos suportam tokenizing, parsing, análise de sintaxe,
disassembly de bytecode e várias outras facilidades.

Esses módulos incluem:

* Menu:

* ast — Árvores de Sintaxe Abstrata::
* symtable — Acesso a tabela de símbolos do compilador::
* token — Constantes usadas com árvores de análises do Python::
* keyword — Testando palavras reservadas do Python::
* tokenize — Tokenizador para código-fonte Python::
* tabnanny — Detecção de indentação ambígua::
* pyclbr — Suporte a navegador de módulos do Python::
* py_compile — Compila arquivos fonte do Python::
* compileall — Compilar bibliotecas do Python para bytecode::
* dis — Disassembler de bytecode do Python::
* pickletools — Ferramentas para desenvolvedores pickle::


File: python.info,  Node: ast — Árvores de Sintaxe Abstrata,  Next: symtable — Acesso a tabela de símbolos do compilador,  Up: Serviços da Linguagem Python

5.32.1 ‘ast’ — Árvores de Sintaxe Abstrata
------------------------------------------

'Código-fonte:' Lib/ast.py(1)

__________________________________________________________________

O módulo *note ast: 8. ajuda as aplicações Python a processar árvores da
gramática de sintaxe abstrata do Python.  A sintaxe abstrata em si pode
mudar em cada lançamento do Python; este módulo ajuda a descobrir
programaticamente como é a gramática atual.

Uma árvore de sintaxe abstrata pode ser gerada passando *note
ast.PyCF_ONLY_AST: 47f5. como um sinalizador para a função embutida
*note compile(): 192, ou usando o auxiliar *note parse(): 1a8. fornecido
neste módulo.  O resultado será uma árvore de objetos cujas classes
herdam de *note ast.AST: 1a6.  Uma árvore de sintaxe abstrata pode ser
compilada em um objeto código Python usando a função embutida *note
compile(): 192.

* Menu:

* Gramática Abstrata::
* Classes de nós::
* Auxiliares de ast::
* Sinalizadores do compilador: Sinalizadores do compilador<2>.
* Uso na linha de comando: Uso na linha de comando<9>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/ast.py


File: python.info,  Node: Gramática Abstrata,  Next: Classes de nós,  Up: ast — Árvores de Sintaxe Abstrata

5.32.1.1 Gramática Abstrata
...........................

A gramática abstrata está atualmente definida da seguinte forma:

     -- 4 tipos embutidos da ASDL são:
     -- identifier, int, string, constant

     module Python
     {
         mod = Module(stmt* body, type_ignore* type_ignores)
             | Interactive(stmt* body)
             | Expression(expr body)
             | FunctionType(expr* argtypes, expr returns)

         stmt = FunctionDef(identifier name, arguments args,
                            stmt* body, expr* decorator_list, expr? returns,
                            string? type_comment, type_param* type_params)
               | AsyncFunctionDef(identifier name, arguments args,
                                  stmt* body, expr* decorator_list, expr? returns,
                                  string? type_comment, type_param* type_params)

               | ClassDef(identifier name,
                  expr* bases,
                  keyword* keywords,
                  stmt* body,
                  expr* decorator_list,
                  type_param* type_params)
               | Return(expr? value)

               | Delete(expr* targets)
               | Assign(expr* targets, expr value, string? type_comment)
               | TypeAlias(expr name, type_param* type_params, expr value)
               | AugAssign(expr target, operator op, expr value)
               -- 'simple' indica que anotamos nome simples sem parênteses
               | AnnAssign(expr target, expr annotation, expr? value, int simple)

               -- usa 'orelse' porque else é uma palavra reservada em idiomas alvos
               | For(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)
               | AsyncFor(expr target, expr iter, stmt* body, stmt* orelse, string? type_comment)
               | While(expr test, stmt* body, stmt* orelse)
               | If(expr test, stmt* body, stmt* orelse)
               | With(withitem* items, stmt* body, string? type_comment)
               | AsyncWith(withitem* items, stmt* body, string? type_comment)

               | Match(expr subject, match_case* cases)

               | Raise(expr? exc, expr? cause)
               | Try(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)
               | TryStar(stmt* body, excepthandler* handlers, stmt* orelse, stmt* finalbody)
               | Assert(expr test, expr? msg)

               | Import(alias* names)
               | ImportFrom(identifier? module, alias* names, int? level)

               | Global(identifier* names)
               | Nonlocal(identifier* names)
               | Expr(expr value)
               | Pass | Break | Continue

               -- col_offset é o deslocamente do bytes na string utf8 que o analisador sintático usa
               attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)

               -- BoolOp() pode usar esquerda e direita?
         expr = BoolOp(boolop op, expr* values)
              | NamedExpr(expr target, expr value)
              | BinOp(expr left, operator op, expr right)
              | UnaryOp(unaryop op, expr operand)
              | Lambda(arguments args, expr body)
              | IfExp(expr test, expr body, expr orelse)
              | Dict(expr* keys, expr* values)
              | Set(expr* elts)
              | ListComp(expr elt, comprehension* generators)
              | SetComp(expr elt, comprehension* generators)
              | DictComp(expr key, expr value, comprehension* generators)
              | GeneratorExp(expr elt, comprehension* generators)
              -- as restrições gramaticais onde yield expressions pode ocorrer
              | Await(expr value)
              | Yield(expr? value)
              | YieldFrom(expr value)
              -- precisa de sequências para comparar para distringuir entre
              -- x < 4 < 3 and (x < 4) < 3
              | Compare(expr left, cmpop* ops, expr* comparators)
              | Call(expr func, expr* args, keyword* keywords)
              | FormattedValue(expr value, int conversion, expr? format_spec)
              | JoinedStr(expr* values)
              | Constant(constant value, string? kind)

              -- a expressão a seguir pode aparecer no contexto da atribuição
              | Attribute(expr value, identifier attr, expr_context ctx)
              | Subscript(expr value, expr slice, expr_context ctx)
              | Starred(expr value, expr_context ctx)
              | Name(identifier id, expr_context ctx)
              | List(expr* elts, expr_context ctx)
              | Tuple(expr* elts, expr_context ctx)

              -- pode aparecer apenas em subscrição
              | Slice(expr? lower, expr? upper, expr? step)

               -- col_offset é o deslocamente do bytes na string utf8 que o analisador sintático usa
               attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)

         expr_context = Load | Store | Del

         boolop = And | Or

         operator = Add | Sub | Mult | MatMult | Div | Mod | Pow | LShift
                      | RShift | BitOr | BitXor | BitAnd | FloorDiv

         unaryop = Invert | Not | UAdd | USub

         cmpop = Eq | NotEq | Lt | LtE | Gt | GtE | Is | IsNot | In | NotIn

         comprehension = (expr target, expr iter, expr* ifs, int is_async)

         excepthandler = ExceptHandler(expr? type, identifier? name, stmt* body)
                         attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)

         arguments = (arg* posonlyargs, arg* args, arg? vararg, arg* kwonlyargs,
                      expr* kw_defaults, arg? kwarg, expr* defaults)

         arg = (identifier arg, expr? annotation, string? type_comment)
                attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)

         -- argumentos nomeados fornecidos à chamada (identificador NULL para **kwargs)
         keyword = (identifier? arg, expr value)
                    attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)

         -- nomes de importação com o apelido opcional 'as'.
         alias = (identifier name, identifier? asname)
                  attributes (int lineno, int col_offset, int? end_lineno, int? end_col_offset)

         withitem = (expr context_expr, expr? optional_vars)

         match_case = (pattern pattern, expr? guard, stmt* body)

         pattern = MatchValue(expr value)
                 | MatchSingleton(constant value)
                 | MatchSequence(pattern* patterns)
                 | MatchMapping(expr* keys, pattern* patterns, identifier? rest)
                 | MatchClass(expr cls, pattern* patterns, identifier* kwd_attrs, pattern* kwd_patterns)

                 | MatchStar(identifier? name)
                 -- O parâmetro opcional de MatchMapping "rest" lida com a captura de chaves extras de mapeamento

                 | MatchAs(pattern? pattern, identifier? name)
                 | MatchOr(pattern* patterns)

                  attributes (int lineno, int col_offset, int end_lineno, int end_col_offset)

         type_ignore = TypeIgnore(int lineno, string tag)

         type_param = TypeVar(identifier name, expr? bound, expr? default_value)
                    | ParamSpec(identifier name, expr? default_value)
                    | TypeVarTuple(identifier name, expr? default_value)
                    attributes (int lineno, int col_offset, int end_lineno, int end_col_offset)
     }


File: python.info,  Node: Classes de nós,  Next: Auxiliares de ast,  Prev: Gramática Abstrata,  Up: ast — Árvores de Sintaxe Abstrata

5.32.1.2 Classes de nós
.......................

 -- Classe: ast.AST

     Esta é a base de todas as classes de nós de AST. As classes de nós
     reais são derivadas do arquivo ‘Parser/Python.asdl’, que é
     reproduzido *note acima: 47f6.  Elas são definidas no módulo C
     ‘_ast’ e reexportadas no *note ast: 8.

     Há uma classe definida para cada símbolo do lado esquerdo na
     gramática abstrata (por exemplo, ‘ast.stmt’ ou ‘ast.expr’).  Além
     disso, existe uma classe definida para cada construtor no lado
     direito; essas classes herdam das classes para as árvores do lado
     esquerdo.  Por exemplo, *note ast.BinOp: 1b44. herda de ‘ast.expr’.
     Para regras de produção com alternativas (“somas”), a classe do
     lado esquerdo é abstrata: apenas instâncias de nós construtores
     específicos são criadas.

      -- Atributo: _fields

          Cada classe concreta possui um atributo ‘_fields’ que fornece
          os nomes de todos os nós filhos.

          Cada instância de uma classe concreta tem um atributo para
          cada nó filho, do tipo definido na gramática.  Por exemplo, as
          instâncias *note ast.BinOp: 1b44. possuem um atributo ‘left’
          do tipo ‘ast.expr’.

          Se estes atributos estiverem marcados como opcionais na
          gramática (usando um ponto de interrogação), o valor pode ser
          ‘None’.  Se os atributos puderem ter valor zero ou mais
          (marcados com um asterisco), os valores serão representados
          como listas do Python.  Todos os atributos possíveis devem
          estar presentes e ter valores válidos ao compilar uma AST com
          *note compile(): 192.

      -- Atributo: _field_types

          O atributo ‘_field_types’ em cada classe concreta é um
          dicionário que mapeia nomes de campos (como também listado em
          *note _fields: 15e3.) para seus tipos.

               >>> ast.TypeVar._field_types
               {'name': <class 'str'>, 'bound': ast.expr | None, 'default_value': ast.expr | None}

          Adicionado na versão 3.13.

      -- Atributo: lineno
      -- Atributo: col_offset
      -- Atributo: end_lineno
      -- Atributo: end_col_offset

          As instâncias das subclasses ‘ast.expr’ e ‘ast.stmt’ possuem
          os atributos *note lineno: 47f9, *note col_offset: 47fa, *note
          end_lineno: 47fb. e *note end_col_offset: 47fc.  O *note
          lineno: 47f9. e *note end_lineno: 47fb. são o primeiro e o
          último número de linha do intervalo do texto de origem
          (indexado em 1, para que a primeira linha seja a linha 1) e o
          *note col_offset: 47fa. e *note end_col_offset: 47fc. são os
          deslocamentos de byte UTF-8 correspondentes do primeiro e do
          último tokens que geraram o nó.  O deslocamento UTF-8 é
          registrado porque o analisador sintático usa UTF-8
          internamente.

          Observe que as posições finais não são exigidas pelo
          compilador e, portanto, são opcionais.  O deslocamento final
          está 'após' o último símbolo, por exemplo, é possível obter o
          segmento de origem de um nó de expressão de uma linha usando
          ‘source_line[node.col_offset : node.end_col_offset]’.

     O construtor de uma classe ‘ast.T’ analisa seus argumentos da
     seguinte forma:

        * Se houver argumentos posicionais, deve haver tantos quanto
          houver itens em ‘T._fields’; eles serão atribuídos como
          atributos desses nomes.

        * Se houver argumentos nomeados, eles definirão os atributos dos
          mesmos nomes para os valores fornecidos.

     Por exemplo, para criar e popular um nó *note ast.UnaryOp: 47fd,
     você poderia usar

          node = ast.UnaryOp(ast.USub(), ast.Constant(5, lineno=0, col_offset=0),
                             lineno=0, col_offset=0)

     Se um campo que é opcional na gramática for omitido do construtor,
     o padrão é ‘None’.  Se um campo de lista for omitido, o padrão será
     a lista vazia.  Se um campo do tipo ‘ast.expr_context’ for omitido,
     o padrão é *note Load(): 1a4.  Se qualquer outro campo for omitido,
     uma *note DeprecationWarning: 1a5. será levantada e o nó AST não
     terá este campo.  No Python 3.15, esta condição levantará um erro.

Alterado na versão 3.8: A classe *note ast.Constant: 2b9. é agora usada
para todas as constantes.

Alterado na versão 3.9: Os índices simples são representados por seus
valores, as fatias estendidas são representadas como tuplas.

Descontinuado desde a versão 3.8: Classes antigas ‘ast.Num’, ‘ast.Str’,
‘ast.Bytes’, ‘ast.NameConstant’ e ‘ast.Ellipsis’ ainda estão
disponíveis, mas serão removidos em versões futuras do Python.  Enquanto
isso, instanciá-las retornará uma instância de uma classe diferente.

Descontinuado desde a versão 3.9: Classes antigas ‘ast.Index’ e
‘ast.ExtSlice’ ainda estão disponíveis, mas serão removidos em versões
futuras do Python.  Enquanto isso, instanciá-las retornará uma instância
de uma classe diferente.

Descontinuado desde a versão 3.13, será removido na versão 3.15: Versões
anteriores do Python permitiam a criação de nós AST sem campos
obrigatórios.  Da mesma forma, os construtores do nó AST permitiam
argumentos nomeados arbitrários que eram definidos como atributos do nó
AST, mesmo que não correspondessem a nenhum dos campos do nó AST. Este
comportamento foi descontinuado e será removido no Python 3.15.

     Nota: As descrições das classes de nós específicas exibidas aqui
     foram inicialmente adaptadas do fantástico projeto Green Tree
     Snakes(1) e de todos os seus contribuidores.

* Menu:

* Nós raízes::
* Literais: Literais<3>.
* Variáveis::
* Expressões: Expressões<2>.
* Instruções::
* Fluxo de controle::
* Correspondência de padrões::
* Anotações de tipos::
* Parâmetros de tipo::
* Definições de função e classe::
* Async e await::

   ---------- Footnotes ----------

   (1) https://greentreesnakes.readthedocs.io/en/latest/


File: python.info,  Node: Nós raízes,  Next: Literais<3>,  Up: Classes de nós

5.32.1.3 Nós raízes
...................

 -- Classe: ast.Module (body, type_ignores)

     Um módulo Python, como *note entrada de arquivo: 22d3.  Tipo de nó
     gerado por *note ast.parse(): 1a8. com 'mode' no padrão ‘"exec"’.

     ‘body’ é uma *note list: 611. das *note Instruções: 4801. do
     módulo.

     ‘type_ignores’ é uma *note list: 611. dos comentários de ignorar
     tipo do módulo; veja *note ast.parse(): 1a8. para mais detalhes.

          >>> print(ast.dump(ast.parse('x = 1'), indent=4))
          Module(
              body=[
                  Assign(
                      targets=[
                          Name(id='x', ctx=Store())],
                      value=Constant(value=1))])

 -- Classe: ast.Expression (body)

     Uma única *note entrada de expressão: 22d9. Python.  Tipo de nó
     gerado por *note ast.parse(): 1a8. quando 'mode' é ‘"eval"’.

     ‘body’ é um nó único, um dos *note tipos de expressão: 4803.

          >>> print(ast.dump(ast.parse('123', mode='eval'), indent=4))
          Expression(
              body=Constant(value=123))

 -- Classe: ast.Interactive (body)

     Uma única *note entrada interativa: 22d6, como em *note Modo
     interativo: 16f.  Tipo de nó gerado por *note ast.parse(): 1a8.
     quando 'mode' é ‘"single"’.

     ‘body’ é uma *note list: 611. de *note nós de instrução: 4801.

          >>> print(ast.dump(ast.parse('x = 1; y = 2', mode='single'), indent=4))
          Interactive(
              body=[
                  Assign(
                      targets=[
                          Name(id='x', ctx=Store())],
                      value=Constant(value=1)),
                  Assign(
                      targets=[
                          Name(id='y', ctx=Store())],
                      value=Constant(value=2))])

 -- Classe: ast.FunctionType (argtypes, returns)

     Uma representação de comentários de tipo antigo para funções, já
     que as versões do Python anteriores a 3.5 não davam suporte às
     anotações da PEP 484(1).  Tipo de nó gerado por *note ast.parse():
     1a8. quando 'mode' é ‘"func_type"’.

     Esses comentários de tipo ficariam assim:

          def sum_two_number(a, b):
              # tipo: (int, int) -> int
              return a + b

     ‘argtypes’ é uma *note list: 611. de *note nós de expressão: 4803.

     ‘returns’ é um único *note nó de expressão: 4803.

          >>> print(ast.dump(ast.parse('(int, str) -> List[int]', mode='func_type'), indent=4))
          FunctionType(
              argtypes=[
                  Name(id='int', ctx=Load()),
                  Name(id='str', ctx=Load())],
              returns=Subscript(
                  value=Name(id='List', ctx=Load()),
                  slice=Name(id='int', ctx=Load()),
                  ctx=Load()))

     Adicionado na versão 3.8.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/


File: python.info,  Node: Literais<3>,  Next: Variáveis,  Prev: Nós raízes,  Up: Classes de nós

5.32.1.4 Literais
.................

 -- Classe: ast.Constant (value)

     Um valor constante.  O atributo ‘value’ do literal ‘Constant’
     contém o objeto Python que ele representa.  Os valores
     representados podem ser instâncias de *note str: 44c, *note bytes:
     1c2, *note int: 257, *note float: 2f7, *note complex: 2f8. e *note
     bool: 468, e as constantes *note None: 675. e *note Ellipsis: 231c.

          >>> print(ast.dump(ast.parse('123', mode='eval'), indent=4))
          Expression(
              body=Constant(value=123))

 -- Classe: ast.FormattedValue (value, conversion, format_spec)

     Nó que representa um único campo de formatação em uma f-string.  Se
     a string contiver um único campo de formatação e nada mais, o nó
     poderá ser isolado, caso contrário ele aparecerá em *note
     JoinedStr: 17de.

        * ‘value’ é qualquer nó de expressão (como um literal, uma
          variável ou uma chamada de função).

        * ‘conversion’ é um inteiro:

             * -1: sem formatação

             * 115: ‘!s’ formatação de string

             * 114: ‘!r’ formatação de repr

             * 97: ‘!a’ formatação ascii

        * ‘format_spec’ é um nó *note JoinedStr: 17de. que representa a
          formatação do valor, ou ‘None’ se nenhum formato foi
          especificado.  Tanto ‘conversion’ quanto ‘format_spec’ podem
          ser configurados ao mesmo tempo.

 -- Classe: ast.JoinedStr (values)

     Uma f-string, compreendendo uma série de nós *note FormattedValue:
     4807. e *note Constant: 2b9.

          >>> print(ast.dump(ast.parse('f"sin({a}) is {sin(a):.3}"', mode='eval'), indent=4))
          Expression(
              body=JoinedStr(
                  values=[
                      Constant(value='sin('),
                      FormattedValue(
                          value=Name(id='a', ctx=Load()),
                          conversion=-1),
                      Constant(value=') is '),
                      FormattedValue(
                          value=Call(
                              func=Name(id='sin', ctx=Load()),
                              args=[
                                  Name(id='a', ctx=Load())]),
                          conversion=-1,
                          format_spec=JoinedStr(
                              values=[
                                  Constant(value='.3')]))]))

 -- Classe: ast.List (elts, ctx)
 -- Classe: ast.Tuple (elts, ctx)

     Uma lista ou tupla.  ‘elts’ contém uma lista de nós que representam
     os elementos.  ‘ctx’ é *note Store: 480a. se o contêiner for um
     alvo de atribuição (ou seja, ‘(x,y)=algumacoisa’), e *note Load:
     1a4. caso contrário.

          >>> print(ast.dump(ast.parse('[1, 2, 3]', mode='eval'), indent=4))
          Expression(
              body=List(
                  elts=[
                      Constant(value=1),
                      Constant(value=2),
                      Constant(value=3)],
                  ctx=Load()))
          >>> print(ast.dump(ast.parse('(1, 2, 3)', mode='eval'), indent=4))
          Expression(
              body=Tuple(
                  elts=[
                      Constant(value=1),
                      Constant(value=2),
                      Constant(value=3)],
                  ctx=Load()))

 -- Classe: ast.Set (elts)

     Um conjunto.  ‘elts’ contém uma lista de nós que representam os
     elementos do conjunto.

          >>> print(ast.dump(ast.parse('{1, 2, 3}', mode='eval'), indent=4))
          Expression(
              body=Set(
                  elts=[
                      Constant(value=1),
                      Constant(value=2),
                      Constant(value=3)]))

 -- Classe: ast.Dict (keys, values)

     Um dicionário.  ‘keys’ e ‘values’ contêm listas de nós que
     representam as chaves e os valores respectivamente, em ordem
     correspondente (o que seria retornado ao chamar ‘dictionary.keys()’
     e ‘dictionary.values()’).

     Ao desempacotar o dicionário usando literais de dicionário, a
     expressão a ser expandida vai para a lista ‘values’, com um ‘None’
     na posição correspondente em ‘keys’.

          >>> print(ast.dump(ast.parse('{"a":1, **d}', mode='eval'), indent=4))
          Expression(
              body=Dict(
                  keys=[
                      Constant(value='a'),
                      None],
                  values=[
                      Constant(value=1),
                      Name(id='d', ctx=Load())]))


File: python.info,  Node: Variáveis,  Next: Expressões<2>,  Prev: Literais<3>,  Up: Classes de nós

5.32.1.5 Variáveis
..................

 -- Classe: ast.Name (id, ctx)

     Um nome de variável.  ‘id’ contém o nome como uma string e ‘ctx’ é
     um dos seguintes tipos.

 -- Classe: ast.Load
 -- Classe: ast.Store
 -- Classe: ast.Del

     As referências de variáveis podem ser usadas para carregar o valor
     de uma variável, para atribuir um novo valor a ela ou para
     excluí-la.  As referências de variáveis recebem um contexto para
     distinguir esses casos.

          >>> print(ast.dump(ast.parse('a'), indent=4))
          Module(
              body=[
                  Expr(
                      value=Name(id='a', ctx=Load()))])

          >>> print(ast.dump(ast.parse('a = 1'), indent=4))
          Module(
              body=[
                  Assign(
                      targets=[
                          Name(id='a', ctx=Store())],
                      value=Constant(value=1))])

          >>> print(ast.dump(ast.parse('del a'), indent=4))
          Module(
              body=[
                  Delete(
                      targets=[
                          Name(id='a', ctx=Del())])])

 -- Classe: ast.Starred (value, ctx)

     Uma referência de variável ‘*var’.  ‘value’ contém a variável,
     normalmente um nó *note Name: 1aaf.  Este tipo deve ser usado ao
     construir um nó *note Call: 480f. com ‘*args’.

          >>> print(ast.dump(ast.parse('a, *b = it'), indent=4))
          Module(
              body=[
                  Assign(
                      targets=[
                          Tuple(
                              elts=[
                                  Name(id='a', ctx=Store()),
                                  Starred(
                                      value=Name(id='b', ctx=Store()),
                                      ctx=Store())],
                              ctx=Store())],
                      value=Name(id='it', ctx=Load()))])


File: python.info,  Node: Expressões<2>,  Next: Instruções,  Prev: Variáveis,  Up: Classes de nós

5.32.1.6 Expressões
...................

 -- Classe: ast.Expr (value)

     Quando uma expressão, como uma chamada de função, aparece como uma
     instrução por si só com seu valor de retorno não usado ou
     armazenado, ela é encapsulada neste contêiner.  ‘value’ contém um
     dos outros nós nesta seção, um nó *note Constant: 2b9, um *note
     Name: 1aaf, um *note Lambda: 4812, um *note Yield: 4813. ou *note
     YieldFrom: 4814.

          >>> print(ast.dump(ast.parse('-a'), indent=4))
          Module(
              body=[
                  Expr(
                      value=UnaryOp(
                          op=USub(),
                          operand=Name(id='a', ctx=Load())))])

 -- Classe: ast.UnaryOp (op, operand)

     Uma operação unária.  ‘op’ é o operador e ‘operand’ qualquer nó de
     expressão.

 -- Classe: ast.UAdd
 -- Classe: ast.USub
 -- Classe: ast.Not
 -- Classe: ast.Invert

     Tokens de operador unário.  *note Not: 4817. é a palavra reservada
     ‘not’, *note Invert: 4818. é o operador ‘~’.

          >>> print(ast.dump(ast.parse('not x', mode='eval'), indent=4))
          Expression(
              body=UnaryOp(
                  op=Not(),
                  operand=Name(id='x', ctx=Load())))

 -- Classe: ast.BinOp (left, op, right)

     Uma operação binária (como adição ou divisão).  ‘op’ é o operador,
     e ‘left’ e ‘right’ são quaisquer nós de expressão.

          >>> print(ast.dump(ast.parse('x + y', mode='eval'), indent=4))
          Expression(
              body=BinOp(
                  left=Name(id='x', ctx=Load()),
                  op=Add(),
                  right=Name(id='y', ctx=Load())))

 -- Classe: ast.Add
 -- Classe: ast.Sub
 -- Classe: ast.Mult
 -- Classe: ast.Div
 -- Classe: ast.FloorDiv
 -- Classe: ast.Mod
 -- Classe: ast.Pow
 -- Classe: ast.LShift
 -- Classe: ast.RShift
 -- Classe: ast.BitOr
 -- Classe: ast.BitXor
 -- Classe: ast.BitAnd
 -- Classe: ast.MatMult

     Tokens de operador binário.

 -- Classe: ast.BoolOp (op, values)

     Uma operação booleana, ‘or’ ou ‘and’.  ‘op’ é *note Or: 4827. ou
     *note And: 4828.  ‘values’ são os valores envolvidos.  Operações
     consecutivas com o mesmo operador, como ‘a or b or c’, são
     recolhidas em um nó com vários valores.

     Isso não inclui ‘not’, que é um *note UnaryOp: 47fd.

          >>> print(ast.dump(ast.parse('x or y', mode='eval'), indent=4))
          Expression(
              body=BoolOp(
                  op=Or(),
                  values=[
                      Name(id='x', ctx=Load()),
                      Name(id='y', ctx=Load())]))

 -- Classe: ast.And
 -- Classe: ast.Or

     Tokens de operador booleano.

 -- Classe: ast.Compare (left, ops, comparators)

     Uma comparação de dois ou mais valores.  ‘left’ é o primeiro valor
     na comparação, ‘ops’ a lista de operadores e ‘comparators’ a lista
     de valores após o primeiro elemento na comparação.

          >>> print(ast.dump(ast.parse('1 <= a < 10', mode='eval'), indent=4))
          Expression(
              body=Compare(
                  left=Constant(value=1),
                  ops=[
                      LtE(),
                      Lt()],
                  comparators=[
                      Name(id='a', ctx=Load()),
                      Constant(value=10)]))

 -- Classe: ast.Eq
 -- Classe: ast.NotEq
 -- Classe: ast.Lt
 -- Classe: ast.LtE
 -- Classe: ast.Gt
 -- Classe: ast.GtE
 -- Classe: ast.Is
 -- Classe: ast.IsNot
 -- Classe: ast.In
 -- Classe: ast.NotIn

     Tokens de operador de comparação.

 -- Classe: ast.Call (func, args, keywords)

     Uma chamada de função.  ‘func’ é a função, que geralmente será um
     objeto *note Name: 1aaf. ou *note Attribute: 4834.  Dos argumentos:

        * ‘args’ contém uma lista dos argumentos passados por posição.

        * ‘keywords’ contém uma lista de objetos *note keyword: 4835.
          representando argumentos passados como nomeados.

     Os argumentos ‘args’ e ‘keywords’ são opcionais e padrão para
     listas vazias.

          >>> print(ast.dump(ast.parse('func(a, b=c, *d, **e)', mode='eval'), indent=4))
          Expression(
              body=Call(
                  func=Name(id='func', ctx=Load()),
                  args=[
                      Name(id='a', ctx=Load()),
                      Starred(
                          value=Name(id='d', ctx=Load()),
                          ctx=Load())],
                  keywords=[
                      keyword(
                          arg='b',
                          value=Name(id='c', ctx=Load())),
                      keyword(
                          value=Name(id='e', ctx=Load()))]))

 -- Classe: ast.keyword (arg, value)

     Um argumento nomeado para uma chamada de função ou definição de
     classe.  ‘arg’ é uma string bruta do nome do parâmetro, ‘value’ é
     um nó para passar.

 -- Classe: ast.IfExp (test, body, orelse)

     Uma expressão como ‘a if b else c’.  Cada campo contém um único nó,
     portanto, no exemplo a seguir, todos os três são nós *note Name:
     1aaf.

          >>> print(ast.dump(ast.parse('a if b else c', mode='eval'), indent=4))
          Expression(
              body=IfExp(
                  test=Name(id='b', ctx=Load()),
                  body=Name(id='a', ctx=Load()),
                  orelse=Name(id='c', ctx=Load())))

 -- Classe: ast.Attribute (value, attr, ctx)

     Acesso a atributo como, por exemplo, ‘d.keys’.  ‘value’ é um nó,
     normalmente um *note Name: 1aaf.  ‘attr’ é uma string simples
     fornecendo o nome do atributo, e ‘ctx’ é *note Load: 1a4, *note
     Store: 480a. ou *note Del: 480d. de acordo com como o atributo é
     acionado sobre.

          >>> print(ast.dump(ast.parse('snake.colour', mode='eval'), indent=4))
          Expression(
              body=Attribute(
                  value=Name(id='snake', ctx=Load()),
                  attr='colour',
                  ctx=Load()))

 -- Classe: ast.NamedExpr (target, value)

     Uma expressão nomeada.  Este nó de AST é produzido pelo operador de
     expressões de atribuição (também conhecido como operador morsa).
     Ao contrário do nó *note Assign: 4838. no qual o primeiro argumento
     pode ser múltiplos nós, neste caso ambos ‘target’ e ‘value’ devem
     ser nós únicos.

          >>> print(ast.dump(ast.parse('(x := 4)', mode='eval'), indent=4))
          Expression(
              body=NamedExpr(
                  target=Name(id='x', ctx=Store()),
                  value=Constant(value=4)))

     Adicionado na versão 3.8.

* Menu:

* Subscrição::
* Compreensões::


File: python.info,  Node: Subscrição,  Next: Compreensões,  Up: Expressões<2>

5.32.1.7 Subscrição
...................

 -- Classe: ast.Subscript (value, slice, ctx)

     Um subscrito, como ‘l[1]’.  ‘value’ é o objeto subscrito
     (geralmente sequência ou mapeamento).  ‘slice’ é um índice, fatia
     ou chave.  Pode ser uma *note Tuple: 4809. e conter uma *note
     Slice: 483b.  ‘ctx’ é *note Load: 1a4, *note Store: 480a. ou *note
     Del: 480d. de acordo com a ação realizada com o subscrito.

          >>> print(ast.dump(ast.parse('l[1:2, 3]', mode='eval'), indent=4))
          Expression(
              body=Subscript(
                  value=Name(id='l', ctx=Load()),
                  slice=Tuple(
                      elts=[
                          Slice(
                              lower=Constant(value=1),
                              upper=Constant(value=2)),
                          Constant(value=3)],
                      ctx=Load()),
                  ctx=Load()))

 -- Classe: ast.Slice (lower, upper, step)

     Fatiamento regular (no formato ‘lower:upper’ ou
     ‘lower:upper:step’).  Pode ocorrer apenas dentro do campo 'slice'
     de *note Subscript: 483a, diretamente ou como um elemento de *note
     Tuple: 4809.

          >>> print(ast.dump(ast.parse('l[1:2]', mode='eval'), indent=4))
          Expression(
              body=Subscript(
                  value=Name(id='l', ctx=Load()),
                  slice=Slice(
                      lower=Constant(value=1),
                      upper=Constant(value=2)),
                  ctx=Load()))


File: python.info,  Node: Compreensões,  Prev: Subscrição,  Up: Expressões<2>

5.32.1.8 Compreensões
.....................

 -- Classe: ast.ListComp (elt, generators)
 -- Classe: ast.SetComp (elt, generators)
 -- Classe: ast.GeneratorExp (elt, generators)
 -- Classe: ast.DictComp (key, value, generators)

     Lista e define compreensões, expressões geradoras e compreensões de
     dicionário.  ‘elt’ (ou ‘key’ e ‘value’) é um único nó que
     representa a parte que será avaliada para cada item.

     ‘generators’ é uma lista de nós de *note comprehension: 4841.

          >>> print(ast.dump(
          ...     ast.parse('[x for x in numbers]', mode='eval'),
          ...     indent=4,
          ... ))
          Expression(
              body=ListComp(
                  elt=Name(id='x', ctx=Load()),
                  generators=[
                      comprehension(
                          target=Name(id='x', ctx=Store()),
                          iter=Name(id='numbers', ctx=Load()),
                          is_async=0)]))
          >>> print(ast.dump(
          ...     ast.parse('{x: x**2 for x in numbers}', mode='eval'),
          ...     indent=4,
          ... ))
          Expression(
              body=DictComp(
                  key=Name(id='x', ctx=Load()),
                  value=BinOp(
                      left=Name(id='x', ctx=Load()),
                      op=Pow(),
                      right=Constant(value=2)),
                  generators=[
                      comprehension(
                          target=Name(id='x', ctx=Store()),
                          iter=Name(id='numbers', ctx=Load()),
                          is_async=0)]))
          >>> print(ast.dump(
          ...     ast.parse('{x for x in numbers}', mode='eval'),
          ...     indent=4,
          ... ))
          Expression(
              body=SetComp(
                  elt=Name(id='x', ctx=Load()),
                  generators=[
                      comprehension(
                          target=Name(id='x', ctx=Store()),
                          iter=Name(id='numbers', ctx=Load()),
                          is_async=0)]))

 -- Classe: ast.comprehension (target, iter, ifs, is_async)

     Uma cláusula ‘for’ em uma compreensão.  ‘target’ é a referência a
     ser usada para cada elemento - normalmente um nó *note Name: 1aaf.
     ou *note Tuple: 4809.  ‘iter’ é o objeto sobre o qual iterar.
     ‘ifs’ é uma lista de expressões de teste: cada cláusula ‘for’ pode
     ter múltiplos ‘ifs’.

     ‘is_async’ indica que uma compreensão é assíncrona (usando um
     ‘async for’ em vez de ‘for’).  O valor é um número inteiro (0 ou
     1).

          >>> print(ast.dump(ast.parse('[ord(c) for line in file for c in line]', mode='eval'),
          ...                indent=4)) # Várias compreensões em uma.
          Expression(
              body=ListComp(
                  elt=Call(
                      func=Name(id='ord', ctx=Load()),
                      args=[
                          Name(id='c', ctx=Load())]),
                  generators=[
                      comprehension(
                          target=Name(id='line', ctx=Store()),
                          iter=Name(id='file', ctx=Load()),
                          is_async=0),
                      comprehension(
                          target=Name(id='c', ctx=Store()),
                          iter=Name(id='line', ctx=Load()),
                          is_async=0)]))

          >>> print(ast.dump(ast.parse('(n**2 for n in it if n>5 if n<10)', mode='eval'),
          ...                indent=4)) # compreensão de gerador
          Expression(
              body=GeneratorExp(
                  elt=BinOp(
                      left=Name(id='n', ctx=Load()),
                      op=Pow(),
                      right=Constant(value=2)),
                  generators=[
                      comprehension(
                          target=Name(id='n', ctx=Store()),
                          iter=Name(id='it', ctx=Load()),
                          ifs=[
                              Compare(
                                  left=Name(id='n', ctx=Load()),
                                  ops=[
                                      Gt()],
                                  comparators=[
                                      Constant(value=5)]),
                              Compare(
                                  left=Name(id='n', ctx=Load()),
                                  ops=[
                                      Lt()],
                                  comparators=[
                                      Constant(value=10)])],
                          is_async=0)]))

          >>> print(ast.dump(ast.parse('[i async for i in soc]', mode='eval'),
          ...                indent=4)) # compreensão de async
          Expression(
              body=ListComp(
                  elt=Name(id='i', ctx=Load()),
                  generators=[
                      comprehension(
                          target=Name(id='i', ctx=Store()),
                          iter=Name(id='soc', ctx=Load()),
                          is_async=1)]))


File: python.info,  Node: Instruções,  Next: Fluxo de controle,  Prev: Expressões<2>,  Up: Classes de nós

5.32.1.9 Instruções
...................

 -- Classe: ast.Assign (targets, value, type_comment)

     Uma atribuição.  ‘targets’ é uma lista de nós e ‘value’ é um único
     nó.

     Vários nós em ‘targets’ representam a atribuição do mesmo valor a
     cada um.  O desempacotamento é representada colocando uma *note
     Tuple: 4809. ou *note List: 4808. dentro de ‘targets’.

      -- Atributo: type_comment

          ‘type_comment’ é uma string opcional com a anotação de tipo
          como comentário.

          >>> print(ast.dump(ast.parse('a = b = 1'), indent=4)) # Multiple assignment
          Module(
              body=[
                  Assign(
                      targets=[
                          Name(id='a', ctx=Store()),
                          Name(id='b', ctx=Store())],
                      value=Constant(value=1))])

          >>> print(ast.dump(ast.parse('a,b = c'), indent=4)) # Unpacking
          Module(
              body=[
                  Assign(
                      targets=[
                          Tuple(
                              elts=[
                                  Name(id='a', ctx=Store()),
                                  Name(id='b', ctx=Store())],
                              ctx=Store())],
                      value=Name(id='c', ctx=Load()))])

 -- Classe: ast.AnnAssign (target, annotation, value, simple)

     Uma atribuição com uma anotação de tipo.  ‘target’ é um nó único e
     pode ser uma classe *note Name: 1aaf, *note Attribute: 4834. ou
     *note Subscript: 483a.  ‘annotation’ é a anotação, como um nó *note
     Constant: 2b9. ou *note Name: 1aaf.  ‘value’ é um único nó
     opcional.

     ‘simple’ é sempre 0 (indicando um alvo “complexo”) ou 1 (indicando
     um alvo “simples”).  Um alvo “simples” consiste apenas em um nó
     *note Name: 1aaf. que não aparece entre parênteses; todos os outros
     alvos são considerados complexos.  Apenas alvos simples aparecem no
     dicionário ‘__annotations__’ de módulos e classes.

          >>> print(ast.dump(ast.parse('c: int'), indent=4))
          Module(
              body=[
                  AnnAssign(
                      target=Name(id='c', ctx=Store()),
                      annotation=Name(id='int', ctx=Load()),
                      simple=1)])

          >>> print(ast.dump(ast.parse('(a): int = 1'), indent=4)) # Annotation with parenthesis
          Module(
              body=[
                  AnnAssign(
                      target=Name(id='a', ctx=Store()),
                      annotation=Name(id='int', ctx=Load()),
                      value=Constant(value=1),
                      simple=0)])

          >>> print(ast.dump(ast.parse('a.b: int'), indent=4)) # Attribute annotation
          Module(
              body=[
                  AnnAssign(
                      target=Attribute(
                          value=Name(id='a', ctx=Load()),
                          attr='b',
                          ctx=Store()),
                      annotation=Name(id='int', ctx=Load()),
                      simple=0)])

          >>> print(ast.dump(ast.parse('a[1]: int'), indent=4)) # Subscript annotation
          Module(
              body=[
                  AnnAssign(
                      target=Subscript(
                          value=Name(id='a', ctx=Load()),
                          slice=Constant(value=1),
                          ctx=Store()),
                      annotation=Name(id='int', ctx=Load()),
                      simple=0)])

 -- Classe: ast.AugAssign (target, op, value)

     Atribuição aumentada, como ‘a += 1’.  No exemplo a seguir, ‘target’
     é um nó *note Name: 1aaf. para ‘x’ (com o contexto *note Store:
     480a.), ‘op’ é *note Add: 4819, e ‘value’ é uma *note Constant:
     2b9. com valor para 1.

     O atributo ‘target’ não pode ser da classe *note Tuple: 4809. ou
     *note List: 4808, diferentemente dos alvos de *note Assign: 4838.

          >>> print(ast.dump(ast.parse('x += 2'), indent=4))
          Module(
              body=[
                  AugAssign(
                      target=Name(id='x', ctx=Store()),
                      op=Add(),
                      value=Constant(value=2))])

 -- Classe: ast.Raise (exc, cause)

     Uma instrução ‘raise’.  ‘exc’ é o objeto de exceção a ser
     levantado, normalmente uma *note Call: 480f. ou *note Name: 1aaf,
     ou ‘None’ para um ‘raise’ independente.  ‘cause’ é a parte opcional
     para ‘y’ em ‘raise x from y’.

          >>> print(ast.dump(ast.parse('raise x from y'), indent=4))
          Module(
              body=[
                  Raise(
                      exc=Name(id='x', ctx=Load()),
                      cause=Name(id='y', ctx=Load()))])

 -- Classe: ast.Assert (test, msg)

     Uma asserção.  ‘test’ contém a condição, como um nó *note Compare:
     4829.  ‘msg’ contém a mensagem de falha.

          >>> print(ast.dump(ast.parse('assert x,y'), indent=4))
          Module(
              body=[
                  Assert(
                      test=Name(id='x', ctx=Load()),
                      msg=Name(id='y', ctx=Load()))])

 -- Classe: ast.Delete (targets)

     Representa uma instrução ‘del’.  ‘targets’ é uma lista de nós, como
     nós *note Name: 1aaf, *note Attribute: 4834. ou *note Subscript:
     483a.

          >>> print(ast.dump(ast.parse('del x,y,z'), indent=4))
          Module(
              body=[
                  Delete(
                      targets=[
                          Name(id='x', ctx=Del()),
                          Name(id='y', ctx=Del()),
                          Name(id='z', ctx=Del())])])

 -- Classe: ast.Pass

     Uma instrução ‘pass’.

          >>> print(ast.dump(ast.parse('pass'), indent=4))
          Module(
              body=[
                  Pass()])

 -- Classe: ast.TypeAlias (name, type_params, value)

     Um *note apelido de tipo: 454. criado através da instrução *note
     type: 438.  ‘name’ é o nome do apelido, ‘type_params’ é uma lista
     de *note parâmetros de tipo: 484a, e ‘value’ é o valor do apelido
     do tipo.

          >>> print(ast.dump(ast.parse('type Alias = int'), indent=4))
          Module(
              body=[
                  TypeAlias(
                      name=Name(id='Alias', ctx=Store()),
                      value=Name(id='int', ctx=Load()))])

     Adicionado na versão 3.12.

Outras instruções que são aplicáveis apenas dentro de funções ou laços
são descritas em outras seções.

* Menu:

* Importações::


File: python.info,  Node: Importações,  Up: Instruções

5.32.1.10 Importações
.....................

 -- Classe: ast.Import (names)

     Uma instrução de importação.  ‘names’ é uma lista de nós de *note
     alias: 1a00.

          >>> print(ast.dump(ast.parse('import x,y,z'), indent=4))
          Module(
              body=[
                  Import(
                      names=[
                          alias(name='x'),
                          alias(name='y'),
                          alias(name='z')])])

 -- Classe: ast.ImportFrom (module, names, level)

     Representa ‘from x import y’.  ‘module’ é uma string bruta do nome
     ‘from’, sem quaisquer pontos iniciais, ou ‘None’ para instruções
     como ‘from . import foo’.  ‘level’ é um número inteiro que contém o
     nível da importação relativa (0 significa importação absoluta).

          >>> print(ast.dump(ast.parse('from y import x,y,z'), indent=4))
          Module(
              body=[
                  ImportFrom(
                      module='y',
                      names=[
                          alias(name='x'),
                          alias(name='y'),
                          alias(name='z')],
                      level=0)])

 -- Classe: ast.alias (name, asname)

     Ambos os parâmetros são strings brutas dos nomes.  ‘asname’ pode
     ser ‘None’ se o nome normal for usado.

          >>> print(ast.dump(ast.parse('from ..foo.bar import a as b, c'), indent=4))
          Module(
              body=[
                  ImportFrom(
                      module='foo.bar',
                      names=[
                          alias(name='a', asname='b'),
                          alias(name='c')],
                      level=2)])


File: python.info,  Node: Fluxo de controle,  Next: Correspondência de padrões,  Prev: Instruções,  Up: Classes de nós

5.32.1.11 Fluxo de controle
...........................

     Nota: Cláusulas opcionais como ‘else’ são armazenadas como uma
     lista vazia se não estiverem presentes.

 -- Classe: ast.If (test, body, orelse)

     Uma instrução ‘if’.  ‘test’ contém um único nó, como um nó *note
     Compare: 4829.  ‘body’ e ‘orelse’ contêm, cada um, uma lista de
     nós.

     As cláusulas ‘elif’ não têm uma representação especial no AST, mas
     aparecem como nós extras de *note If: 484f. dentro da seção
     ‘orelse’ da cláusula anterior.

          >>> print(ast.dump(ast.parse("""
          ... if x:
          ...    ...
          ... elif y:
          ...    ...
          ... else:
          ...    ...
          ... """), indent=4))
          Module(
              body=[
                  If(
                      test=Name(id='x', ctx=Load()),
                      body=[
                          Expr(
                              value=Constant(value=Ellipsis))],
                      orelse=[
                          If(
                              test=Name(id='y', ctx=Load()),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))],
                              orelse=[
                                  Expr(
                                      value=Constant(value=Ellipsis))])])])

 -- Classe: ast.For (target, iter, body, orelse, type_comment)

     Um laço ‘for’.  ‘target’ contém as variáveis às quais o laço
     atribui, como um único nó de *note Name: 1aaf, *note Tuple: 4809,
     *note List: 4808, *note Attribute: 4834. ou *note Subscript: 483a.
     ‘iter’ contém o item a ser repetido, novamente como um único nó.
     ‘body’ e ‘orelse’ contêm listas de nós para executar.  Aqueles em
     ‘orelse’ são executados se o laço terminar normalmente, ao invés de
     através de uma instrução ‘break’.

      -- Atributo: type_comment

          ‘type_comment’ é uma string opcional com a anotação de tipo
          como comentário.

          >>> print(ast.dump(ast.parse("""
          ... for x in y:
          ...     ...
          ... else:
          ...     ...
          ... """), indent=4))
          Module(
              body=[
                  For(
                      target=Name(id='x', ctx=Store()),
                      iter=Name(id='y', ctx=Load()),
                      body=[
                          Expr(
                              value=Constant(value=Ellipsis))],
                      orelse=[
                          Expr(
                              value=Constant(value=Ellipsis))])])

 -- Classe: ast.While (test, body, orelse)

     Um laço ‘while’.  ‘test’ contém a condição, como um nó de *note
     Compare: 4829.

          >>> print(ast.dump(ast.parse("""
          ... while x:
          ...    ...
          ... else:
          ...    ...
          ... """), indent=4))
          Module(
              body=[
                  While(
                      test=Name(id='x', ctx=Load()),
                      body=[
                          Expr(
                              value=Constant(value=Ellipsis))],
                      orelse=[
                          Expr(
                              value=Constant(value=Ellipsis))])])

 -- Classe: ast.Break
 -- Classe: ast.Continue

     As instruções ‘break’ e ‘continue’.

          >>> print(ast.dump(ast.parse("""\
          ... for a in b:
          ...     if a > 5:
          ...         break
          ...     else:
          ...         continue
          ...
          ... """), indent=4))
          Module(
              body=[
                  For(
                      target=Name(id='a', ctx=Store()),
                      iter=Name(id='b', ctx=Load()),
                      body=[
                          If(
                              test=Compare(
                                  left=Name(id='a', ctx=Load()),
                                  ops=[
                                      Gt()],
                                  comparators=[
                                      Constant(value=5)]),
                              body=[
                                  Break()],
                              orelse=[
                                  Continue()])])])

 -- Classe: ast.Try (body, handlers, orelse, finalbody)

     Blocos ‘try’.  Todos os atributos são uma lista de nós a serem
     executados, exceto ‘handlers’, que é uma lista de nós de *note
     ExceptHandler: 4856.

          >>> print(ast.dump(ast.parse("""
          ... try:
          ...    ...
          ... except Exception:
          ...    ...
          ... except OtherException as e:
          ...    ...
          ... else:
          ...    ...
          ... finally:
          ...    ...
          ... """), indent=4))
          Module(
              body=[
                  Try(
                      body=[
                          Expr(
                              value=Constant(value=Ellipsis))],
                      handlers=[
                          ExceptHandler(
                              type=Name(id='Exception', ctx=Load()),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))]),
                          ExceptHandler(
                              type=Name(id='OtherException', ctx=Load()),
                              name='e',
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))])],
                      orelse=[
                          Expr(
                              value=Constant(value=Ellipsis))],
                      finalbody=[
                          Expr(
                              value=Constant(value=Ellipsis))])])

 -- Classe: ast.TryStar (body, handlers, orelse, finalbody)

     Blocos ‘try’ que são seguidos por cláusulas ‘except*’.  Os
     atributos são os mesmos de *note Try: 4855, mas os nós *note
     ExceptHandler: 4856. em ‘handlers’ são interpretados como blocos
     ‘except*’ em vez de ‘except’.

          >>> print(ast.dump(ast.parse("""
          ... try:
          ...    ...
          ... except* Exception:
          ...    ...
          ... """), indent=4))
          Module(
              body=[
                  TryStar(
                      body=[
                          Expr(
                              value=Constant(value=Ellipsis))],
                      handlers=[
                          ExceptHandler(
                              type=Name(id='Exception', ctx=Load()),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))])])])

     Adicionado na versão 3.11.

 -- Classe: ast.ExceptHandler (type, name, body)

     Uma única cláusula ‘except’.  ‘type’ é o tipo de exceção que irá
     corresponder, normalmente um nó de *note Name: 1aaf. (ou ‘None’
     para uma cláusula abrangente ‘except:’).  ‘name’ é uma string bruta
     para o nome conter a exceção, ou ‘None’ se a cláusula não tiver ‘as
     foo’.  ‘body’ é uma lista de nós.

          >>> print(ast.dump(ast.parse("""\
          ... try:
          ...     a + 1
          ... except TypeError:
          ...     pass
          ... """), indent=4))
          Module(
              body=[
                  Try(
                      body=[
                          Expr(
                              value=BinOp(
                                  left=Name(id='a', ctx=Load()),
                                  op=Add(),
                                  right=Constant(value=1)))],
                      handlers=[
                          ExceptHandler(
                              type=Name(id='TypeError', ctx=Load()),
                              body=[
                                  Pass()])])])

 -- Classe: ast.With (items, body, type_comment)

     Um bloco ‘with’.  ‘items’ é uma lista de nós *note withitem: 4859.
     representando os gerenciadores de contexto, e ‘body’ é o bloco
     indentado dentro do contexto.

      -- Atributo: type_comment

          ‘type_comment’ é uma string opcional com a anotação de tipo
          como comentário.

 -- Classe: ast.withitem (context_expr, optional_vars)

     Um único gerenciador de contexto em um bloco ‘with’.
     ‘context_expr’ é o gerenciador de contexto, geralmente um nó de
     *note Call: 480f.  ‘optional_vars’ é um *note Name: 1aaf, *note
     Tuple: 4809. ou *note List: 4808. para a parte ‘as foo’, ou ‘None’
     se não for usado.

          >>> print(ast.dump(ast.parse("""\
          ... with a as b, c as d:
          ...    something(b, d)
          ... """), indent=4))
          Module(
              body=[
                  With(
                      items=[
                          withitem(
                              context_expr=Name(id='a', ctx=Load()),
                              optional_vars=Name(id='b', ctx=Store())),
                          withitem(
                              context_expr=Name(id='c', ctx=Load()),
                              optional_vars=Name(id='d', ctx=Store()))],
                      body=[
                          Expr(
                              value=Call(
                                  func=Name(id='something', ctx=Load()),
                                  args=[
                                      Name(id='b', ctx=Load()),
                                      Name(id='d', ctx=Load())]))])])


File: python.info,  Node: Correspondência de padrões,  Next: Anotações de tipos,  Prev: Fluxo de controle,  Up: Classes de nós

5.32.1.12 Correspondência de padrões
....................................

 -- Classe: ast.Match (subject, cases)

     Uma instrução ‘match’.  ‘subject’ contém o assunto da
     correspondência (o objeto que está sendo comparado com os casos) e
     ‘cases’ contém um iterável de nós de *note match_case: 485d. com os
     diferentes casos.

     Adicionado na versão 3.10.

 -- Classe: ast.match_case (pattern, guard, body)

     Um padrão de caso único em uma instrução ‘match’.  ‘pattern’ contém
     o padrão de correspondência com o qual o assunto será comparado.
     Observe que os nós *note AST: 1a6. produzidos para padrões diferem
     daqueles produzidos para expressões, mesmo quando compartilham a
     mesma sintaxe.

     O atributo ‘guard’ contém uma expressão que será avaliada se o
     padrão corresponder ao assunto.

     ‘body’ contém uma lista de nós a serem executados se o padrão
     corresponder e o resultado da avaliação da expressão de guarda for
     verdadeiro.

          >>> print(ast.dump(ast.parse("""
          ... match x:
          ...     case [x] if x>0:
          ...         ...
          ...     case tuple():
          ...         ...
          ... """), indent=4))
          Module(
              body=[
                  Match(
                      subject=Name(id='x', ctx=Load()),
                      cases=[
                          match_case(
                              pattern=MatchSequence(
                                  patterns=[
                                      MatchAs(name='x')]),
                              guard=Compare(
                                  left=Name(id='x', ctx=Load()),
                                  ops=[
                                      Gt()],
                                  comparators=[
                                      Constant(value=0)]),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))]),
                          match_case(
                              pattern=MatchClass(
                                  cls=Name(id='tuple', ctx=Load())),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))])])])

     Adicionado na versão 3.10.

 -- Classe: ast.MatchValue (value)

     Um literal de correspondência ou padrão de valor que é comparado
     por igualdade.  ‘value’ é um nó de expressão.  Os nós de valor
     permitido são restritos conforme descrito na documentação da
     instrução de correspondência.  Este padrão será bem-sucedido se o
     assunto da correspondência for igual ao valor avaliado.

          >>> print(ast.dump(ast.parse("""
          ... match x:
          ...     case "Relevant":
          ...         ...
          ... """), indent=4))
          Module(
              body=[
                  Match(
                      subject=Name(id='x', ctx=Load()),
                      cases=[
                          match_case(
                              pattern=MatchValue(
                                  value=Constant(value='Relevant')),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))])])])

     Adicionado na versão 3.10.

 -- Classe: ast.MatchSingleton (value)

     Um padrão literal de correspondência que compara por identidade.
     ‘value’ é o singleton a ser comparado com: ‘None’, ‘True’ ou
     ‘False’.  Este padrão será bem-sucedido se o assunto da
     correspondência for a constante fornecida.

          >>> print(ast.dump(ast.parse("""
          ... match x:
          ...     case None:
          ...         ...
          ... """), indent=4))
          Module(
              body=[
                  Match(
                      subject=Name(id='x', ctx=Load()),
                      cases=[
                          match_case(
                              pattern=MatchSingleton(value=None),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))])])])

     Adicionado na versão 3.10.

 -- Classe: ast.MatchSequence (patterns)

     Um padrão de sequência de correspondência.  ‘patterns’ contém os
     padrões a serem comparados aos elementos do assunto se o assunto
     for uma sequência.  Corresponde a uma sequência de comprimento
     variável se um dos subpadrões for um nó ‘MatchStar’, caso contrário
     corresponde a uma sequência de comprimento fixo.

          >>> print(ast.dump(ast.parse("""
          ... match x:
          ...     case [1, 2]:
          ...         ...
          ... """), indent=4))
          Module(
              body=[
                  Match(
                      subject=Name(id='x', ctx=Load()),
                      cases=[
                          match_case(
                              pattern=MatchSequence(
                                  patterns=[
                                      MatchValue(
                                          value=Constant(value=1)),
                                      MatchValue(
                                          value=Constant(value=2))]),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))])])])

     Adicionado na versão 3.10.

 -- Classe: ast.MatchStar (name)

     Corresponde ao restante da sequência em um padrão de sequência de
     correspondência de comprimento variável.  Se ‘name’ não for ‘None’,
     uma lista contendo os elementos restantes da sequência será
     vinculada a esse nome se o padrão de sequência geral for
     bem-sucedido.

          >>> print(ast.dump(ast.parse("""
          ... match x:
          ...     case [1, 2, *rest]:
          ...         ...
          ...     case [*_]:
          ...         ...
          ... """), indent=4))
          Module(
              body=[
                  Match(
                      subject=Name(id='x', ctx=Load()),
                      cases=[
                          match_case(
                              pattern=MatchSequence(
                                  patterns=[
                                      MatchValue(
                                          value=Constant(value=1)),
                                      MatchValue(
                                          value=Constant(value=2)),
                                      MatchStar(name='rest')]),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))]),
                          match_case(
                              pattern=MatchSequence(
                                  patterns=[
                                      MatchStar()]),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))])])])

     Adicionado na versão 3.10.

 -- Classe: ast.MatchMapping (keys, patterns, rest)

     Um padrão de mapeamento de correspondência.  ‘keys’ é uma sequência
     de nós de expressão.  ‘patterns’ é uma sequência correspondente de
     nós padrão.  ‘rest’ é um nome opcional que pode ser especificado
     para capturar os elementos restantes do mapeamento.  As
     expressões-chave permitidas são restritas conforme descrito na
     documentação da instrução match.

     Este padrão será bem-sucedido se o assunto for um mapeamento, todas
     as expressões-chave avaliadas estiverem presentes no mapeamento e o
     valor correspondente a cada chave corresponder ao subpadrão
     correspondente.  Se ‘rest’ não for ‘None’, um dict contendo os
     elementos de mapeamento restantes será vinculado a esse nome se o
     padrão de mapeamento geral for bem-sucedido.

          >>> print(ast.dump(ast.parse("""
          ... match x:
          ...     case {1: _, 2: _}:
          ...         ...
          ...     case {**rest}:
          ...         ...
          ... """), indent=4))
          Module(
              body=[
                  Match(
                      subject=Name(id='x', ctx=Load()),
                      cases=[
                          match_case(
                              pattern=MatchMapping(
                                  keys=[
                                      Constant(value=1),
                                      Constant(value=2)],
                                  patterns=[
                                      MatchAs(),
                                      MatchAs()]),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))]),
                          match_case(
                              pattern=MatchMapping(rest='rest'),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))])])])

     Adicionado na versão 3.10.

 -- Classe: ast.MatchClass (cls, patterns, kwd_attrs, kwd_patterns)

     Um padrão de classe de correspondência.  ‘cls’ é uma expressão que
     fornece a classe nominal a ser correspondida.  ‘patterns’ é uma
     sequência de nós padrão a serem comparados com a sequência definida
     pela classe de atributos de correspondência de padrões.
     ‘kwd_attrs’ é uma sequência de atributos adicionais a serem
     correspondidos (especificados como argumentos nomeados no padrão de
     classe), ‘kwd_patterns’ são os padrões correspondentes
     (especificados como valores de argumentos nomeados no padrão de
     classe).

     Esse padrão será bem-sucedido se o assunto for uma instância da
     classe indicada, todos os padrões posicionais corresponderem aos
     atributos correspondentes definidos pela classe e quaisquer
     atributos, passados como argumentos nomeados, especificados
     corresponderem ao seu padrão correspondente.

     Nota: as classes podem definir uma propriedade que retorna self
     para corresponder um nó padrão à instância que está sendo
     correspondida.  Vários tipos internos também são combinados dessa
     forma, conforme descrito na documentação da instrução match.

          >>> print(ast.dump(ast.parse("""
          ... match x:
          ...     case Point2D(0, 0):
          ...         ...
          ...     case Point3D(x=0, y=0, z=0):
          ...         ...
          ... """), indent=4))
          Module(
              body=[
                  Match(
                      subject=Name(id='x', ctx=Load()),
                      cases=[
                          match_case(
                              pattern=MatchClass(
                                  cls=Name(id='Point2D', ctx=Load()),
                                  patterns=[
                                      MatchValue(
                                          value=Constant(value=0)),
                                      MatchValue(
                                          value=Constant(value=0))]),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))]),
                          match_case(
                              pattern=MatchClass(
                                  cls=Name(id='Point3D', ctx=Load()),
                                  kwd_attrs=[
                                      'x',
                                      'y',
                                      'z'],
                                  kwd_patterns=[
                                      MatchValue(
                                          value=Constant(value=0)),
                                      MatchValue(
                                          value=Constant(value=0)),
                                      MatchValue(
                                          value=Constant(value=0))]),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))])])])

     Adicionado na versão 3.10.

 -- Classe: ast.MatchAs (pattern, name)

     Uma correspondência “como padrão”, padrão de captura ou padrão
     curinga.  ‘pattern’ contém o padrão de correspondência com o qual o
     assunto será comparado.  Se o padrão for ‘None’, o nó representa um
     padrão de captura (ou seja, um nome simples) e sempre terá sucesso.

     O atributo ‘name’ contém o nome que será vinculado se o padrão for
     bem-sucedido.  Se ‘name’ for ‘None’, ‘pattern’ também deverá ser
     ‘None’ e o nó representa o padrão curinga.

          >>> print(ast.dump(ast.parse("""
          ... match x:
          ...     case [x] as y:
          ...         ...
          ...     case _:
          ...         ...
          ... """), indent=4))
          Module(
              body=[
                  Match(
                      subject=Name(id='x', ctx=Load()),
                      cases=[
                          match_case(
                              pattern=MatchAs(
                                  pattern=MatchSequence(
                                      patterns=[
                                          MatchAs(name='x')]),
                                  name='y'),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))]),
                          match_case(
                              pattern=MatchAs(),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))])])])

     Adicionado na versão 3.10.

 -- Classe: ast.MatchOr (patterns)

     Uma correspondência de “padrão ou”.  Um “padrão ou” corresponde
     cada um de seus subpadrões com o assunto, até que um seja
     bem-sucedido.  O “padrão ou” é então considerado bem-sucedido.  Se
     nenhum dos subpadrões for bem-sucedido, o padrão or falhará.  O
     atributo ‘patterns’ contém uma lista de nós de padrões de
     correspondência que serão comparados com o assunto.

          >>> print(ast.dump(ast.parse("""
          ... match x:
          ...     case [x] | (y):
          ...         ...
          ... """), indent=4))
          Module(
              body=[
                  Match(
                      subject=Name(id='x', ctx=Load()),
                      cases=[
                          match_case(
                              pattern=MatchOr(
                                  patterns=[
                                      MatchSequence(
                                          patterns=[
                                              MatchAs(name='x')]),
                                      MatchAs(name='y')]),
                              body=[
                                  Expr(
                                      value=Constant(value=Ellipsis))])])])

     Adicionado na versão 3.10.


File: python.info,  Node: Anotações de tipos,  Next: Parâmetros de tipo,  Prev: Correspondência de padrões,  Up: Classes de nós

5.32.1.13 Anotações de tipos
............................

 -- Classe: ast.TypeIgnore (lineno, tag)

     Um comentário ‘# type: ignore’ localizado em 'lineno'.  'tag' é a
     tag opcional especificada pelo formato ‘# type: ignore <tag>’.

          >>> print(ast.dump(ast.parse('x = 1 # type: ignore', type_comments=True), indent=4))
          Module(
              body=[
                  Assign(
                      targets=[
                          Name(id='x', ctx=Store())],
                      value=Constant(value=1))],
              type_ignores=[
                  TypeIgnore(lineno=1, tag='')])
          >>> print(ast.dump(ast.parse('x: bool = 1 # type: ignore[assignment]', type_comments=True), indent=4))
          Module(
              body=[
                  AnnAssign(
                      target=Name(id='x', ctx=Store()),
                      annotation=Name(id='bool', ctx=Load()),
                      value=Constant(value=1),
                      simple=1)],
              type_ignores=[
                  TypeIgnore(lineno=1, tag='[assignment]')])

          Nota: Os nós ‘TypeIgnore’ não são gerados quando o parâmetro
          'type_comments' está definido como ‘False’ (padrão).  Consulte
          *note ast.parse(): 1a8. para obter mais detalhes.

     Adicionado na versão 3.8.


File: python.info,  Node: Parâmetros de tipo,  Next: Definições de função e classe,  Prev: Anotações de tipos,  Up: Classes de nós

5.32.1.14 Parâmetros de tipo
............................

*note Parâmetros de tipo: 2b3. podem existir em classes, funções e
apelidos de tipo.

 -- Classe: ast.TypeVar (name, bound, default_value)

     Uma *note typing.TypeVar: 15d.  ‘name’ é o nome da variável de
     tipo.  ‘bound’ é o limite ou as restrições, se houver.  Se ‘bound’
     for uma *note Tuple: 4809, ele representa restrições; caso
     contrário, representa o limite.  ‘default_value’ é o valor padrão;
     se ‘TypeVar’ não tiver padrão, este atributo será definido como
     ‘None’.

          >>> print(ast.dump(ast.parse("type Alias[T: int = bool] = list[T]"), indent=4))
          Module(
              body=[
                  TypeAlias(
                      name=Name(id='Alias', ctx=Store()),
                      type_params=[
                          TypeVar(
                              name='T',
                              bound=Name(id='int', ctx=Load()),
                              default_value=Name(id='bool', ctx=Load()))],
                      value=Subscript(
                          value=Name(id='list', ctx=Load()),
                          slice=Name(id='T', ctx=Load()),
                          ctx=Load()))])

     Adicionado na versão 3.12.

     Alterado na versão 3.13: Adicionado o parâmetro 'default_value'.

 -- Classe: ast.ParamSpec (name, default_value)

     Uma *note typing.ParamSpec: 15e.  ‘name’ é o nome da especificação
     do parâmetro.  ‘default_value’ é o valor padrão; se ‘ParamSpec’ não
     tiver padrão, este atributo será definido como ‘None’.

          >>> print(ast.dump(ast.parse("type Alias[**P = [int, str]] = Callable[P, int]"), indent=4))
          Module(
              body=[
                  TypeAlias(
                      name=Name(id='Alias', ctx=Store()),
                      type_params=[
                          ParamSpec(
                              name='P',
                              default_value=List(
                                  elts=[
                                      Name(id='int', ctx=Load()),
                                      Name(id='str', ctx=Load())],
                                  ctx=Load()))],
                      value=Subscript(
                          value=Name(id='Callable', ctx=Load()),
                          slice=Tuple(
                              elts=[
                                  Name(id='P', ctx=Load()),
                                  Name(id='int', ctx=Load())],
                              ctx=Load()),
                          ctx=Load()))])

     Adicionado na versão 3.12.

     Alterado na versão 3.13: Adicionado o parâmetro 'default_value'.

 -- Classe: ast.TypeVarTuple (name, default_value)

     Uma *note typing.TypeVarTuple: 15f.  ‘name’ é o nome da tupla da
     variável de tipo.  ‘default_value’ é o valor padrão; se
     ‘TypeVarTuple’ não tiver padrão, este atributo será definido como
     ‘None’.

          >>> print(ast.dump(ast.parse("type Alias[*Ts = ()] = tuple[*Ts]"), indent=4))
          Module(
              body=[
                  TypeAlias(
                      name=Name(id='Alias', ctx=Store()),
                      type_params=[
                          TypeVarTuple(
                              name='Ts',
                              default_value=Tuple(ctx=Load()))],
                      value=Subscript(
                          value=Name(id='tuple', ctx=Load()),
                          slice=Tuple(
                              elts=[
                                  Starred(
                                      value=Name(id='Ts', ctx=Load()),
                                      ctx=Load())],
                              ctx=Load()),
                          ctx=Load()))])

     Adicionado na versão 3.12.

     Alterado na versão 3.13: Adicionado o parâmetro 'default_value'.


File: python.info,  Node: Definições de função e classe,  Next: Async e await,  Prev: Parâmetros de tipo,  Up: Classes de nós

5.32.1.15 Definições de função e classe
.......................................

 -- Classe: ast.FunctionDef (name, args, body, decorator_list, returns,
          type_comment, type_params)

     Uma definição de função

        * ‘name’ é uma string bruta do nome da função.

        * ‘args’ é um nó *note arguments: 486c.

        * ‘body’ é a lista de nós dentro da função.

        * ‘decorator_list’ é a lista de decoradores a serem aplicados,
          armazenados primeiro na parte externa (ou seja, o primeiro da
          lista será aplicado por último).

        * ‘returns’ é a anotação de retorno.

        * ‘type_params’ é uma lista de *note parâmetros de tipo: 484a.

      -- Atributo: type_comment

          ‘type_comment’ é uma string opcional com a anotação de tipo
          como comentário.

     Alterado na versão 3.12: Adicionado ‘type_params’.

 -- Classe: ast.Lambda (args, body)

     ‘lambda’ é uma definição mínima de função que pode ser usada dentro
     de uma expressão.  Ao contrário de *note FunctionDef: 17fa, ‘body’
     contém um único nó.

          >>> print(ast.dump(ast.parse('lambda x,y: ...'), indent=4))
          Module(
              body=[
                  Expr(
                      value=Lambda(
                          args=arguments(
                              args=[
                                  arg(arg='x'),
                                  arg(arg='y')]),
                          body=Constant(value=Ellipsis)))])

 -- Classe: ast.arguments (posonlyargs, args, vararg, kwonlyargs,
          kw_defaults, kwarg, defaults)

     Os argumentos para uma função.

        * ‘posonlyargs’, ‘args’ e ‘kwonlyargs’ são listas de nós *note
          arg: 486e.

        * ‘vararg’ e ‘kwarg’ são nós *note arg: 486e. únicos,
          referindo-se aos parâmetros ‘*args, **kwargs’.

        * ‘kw_defaults’ é uma lista de valores padrão para argumentos
          somente-nomeados.  Se um for ‘None’, o argumento
          correspondente é necessário.

        * ‘defaults’ é uma lista de valores padrão para argumentos que
          podem ser passados posicionalmente.  Se houver menos padrões,
          eles corresponderão aos últimos n argumentos.

 -- Classe: ast.arg (arg, annotation, type_comment)

     Um único argumento em uma lista.  ‘arg’ é uma string bruta do nome
     do argumento; ‘annotation’ é sua anotação, como um nó *note Name:
     1aaf.

      -- Atributo: type_comment

          ‘type_comment’ é uma string opcional com a anotação de tipo
          como comentário

          >>> print(ast.dump(ast.parse("""\
          ... @decorator1
          ... @decorator2
          ... def f(a: 'annotation', b=1, c=2, *d, e, f=3, **g) -> 'return annotation':
          ...     pass
          ... """), indent=4))
          Module(
              body=[
                  FunctionDef(
                      name='f',
                      args=arguments(
                          args=[
                              arg(
                                  arg='a',
                                  annotation=Constant(value='annotation')),
                              arg(arg='b'),
                              arg(arg='c')],
                          vararg=arg(arg='d'),
                          kwonlyargs=[
                              arg(arg='e'),
                              arg(arg='f')],
                          kw_defaults=[
                              None,
                              Constant(value=3)],
                          kwarg=arg(arg='g'),
                          defaults=[
                              Constant(value=1),
                              Constant(value=2)]),
                      body=[
                          Pass()],
                      decorator_list=[
                          Name(id='decorator1', ctx=Load()),
                          Name(id='decorator2', ctx=Load())],
                      returns=Constant(value='return annotation'))])

 -- Classe: ast.Return (value)

     Uma instrução ‘return’.

          >>> print(ast.dump(ast.parse('return 4'), indent=4))
          Module(
              body=[
                  Return(
                      value=Constant(value=4))])

 -- Classe: ast.Yield (value)
 -- Classe: ast.YieldFrom (value)

     Uma expressão ‘yield’ ou ‘yield from’.  Por serem expressões, elas
     devem ser agrupadas em um nó *note Expr: 4811. se o valor enviado
     de volta não for usado.

          >>> print(ast.dump(ast.parse('yield x'), indent=4))
          Module(
              body=[
                  Expr(
                      value=Yield(
                          value=Name(id='x', ctx=Load())))])

          >>> print(ast.dump(ast.parse('yield from x'), indent=4))
          Module(
              body=[
                  Expr(
                      value=YieldFrom(
                          value=Name(id='x', ctx=Load())))])

 -- Classe: ast.Global (names)
 -- Classe: ast.Nonlocal (names)

     Instruções ‘global’ e ‘nonlocal’.  ‘names’ é uma lista de strings
     brutas.

          >>> print(ast.dump(ast.parse('global x,y,z'), indent=4))
          Module(
              body=[
                  Global(
                      names=[
                          'x',
                          'y',
                          'z'])])

          >>> print(ast.dump(ast.parse('nonlocal x,y,z'), indent=4))
          Module(
              body=[
                  Nonlocal(
                      names=[
                          'x',
                          'y',
                          'z'])])

 -- Classe: ast.ClassDef (name, bases, keywords, body, decorator_list,
          type_params)

     Uma definição de classe

        * ‘name’ é uma string bruta para o nome da classe

        * ‘bases’ é uma lista de nós para classes base especificadas
          explicitamente.

        * ‘keywords’ é uma lista de nós *note keyword: 4835,
          principalmente para ‘metaclass’.  Outras argumentos nomeados
          serão passadas para a metaclasse, conforme a PEP 3115(1).

        * ‘body’ é uma lista de nós que representam o código dentro da
          definição de classe.

        * ‘decorator_list’ é uma lista de nós, como em *note
          FunctionDef: 17fa.

        * ‘type_params’ é uma lista de *note parâmetros de tipo: 484a.

          >>> print(ast.dump(ast.parse("""\
          ... @decorator1
          ... @decorator2
          ... class Foo(base1, base2, metaclass=meta):
          ...     pass
          ... """), indent=4))
          Module(
              body=[
                  ClassDef(
                      name='Foo',
                      bases=[
                          Name(id='base1', ctx=Load()),
                          Name(id='base2', ctx=Load())],
                      keywords=[
                          keyword(
                              arg='metaclass',
                              value=Name(id='meta', ctx=Load()))],
                      body=[
                          Pass()],
                      decorator_list=[
                          Name(id='decorator1', ctx=Load()),
                          Name(id='decorator2', ctx=Load())])])

     Alterado na versão 3.12: Adicionado ‘type_params’.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3115/


File: python.info,  Node: Async e await,  Prev: Definições de função e classe,  Up: Classes de nós

5.32.1.16 Async e await
.......................

 -- Classe: ast.AsyncFunctionDef (name, args, body, decorator_list,
          returns, type_comment, type_params)

     Uma definição de função ‘async def’.  Possui os mesmos campos que
     *note FunctionDef: 17fa.

     Alterado na versão 3.12: Adicionado ‘type_params’.

 -- Classe: ast.Await (value)

     Uma expressão ‘await’.  ‘value’ é o que ela espera.  Válido apenas
     no corpo de um *note AsyncFunctionDef: 17f9.

     >>> print(ast.dump(ast.parse("""\
     ... async def f():
     ...     await other_func()
     ... """), indent=4))
     Module(
         body=[
             AsyncFunctionDef(
                 name='f',
                 args=arguments(),
                 body=[
                     Expr(
                         value=Await(
                             value=Call(
                                 func=Name(id='other_func', ctx=Load()))))])])

 -- Classe: ast.AsyncFor (target, iter, body, orelse, type_comment)
 -- Classe: ast.AsyncWith (items, body, type_comment)

     Laços ‘async for’ e gerenciadores de contexto ‘async with’.  Eles
     têm os mesmos campos que *note For: 4850. e *note With: 4858,
     respectivamente.  Válido apenas no corpo de *note AsyncFunctionDef:
     17f9.

     Nota: Quando uma string é analisada por *note ast.parse(): 1a8, os
     nós operadores (subclasses de ‘ast.operator’, ‘ast.unaryop’,
     ‘ast.cmpop’, ‘ast.boolop’ e ‘ast.expr_context’) na árvore retornada
     serão singletons.  As alterações em um serão refletidas em todas as
     outras ocorrências do mesmo valor (por exemplo, *note ast.Add:
     4819.).


File: python.info,  Node: Auxiliares de ast,  Next: Sinalizadores do compilador<2>,  Prev: Classes de nós,  Up: ast — Árvores de Sintaxe Abstrata

5.32.1.17 Auxiliares de ‘ast’
.............................

Além das classes de nós, o módulo *note ast: 8. define essas funções e
classes utilitárias para percorrer árvores de sintaxe abstrata:

 -- Função: ast.parse (source, filename='<unknown>', mode='exec', *,
          type_comments=False, feature_version=None, optimize=-1)

     Analisa a fonte como um nó AST. Equivalente a ‘compile(source,
     filename, mode, flags=FLAGS_VALUE, optimize=optimize)’, onde
     ‘FLAGS_VALUE’ é ‘ast.PyCF_ONLY_AST’ se ‘optimize <= 0’ e
     ‘ast.PyCF_OPTIMIZED_AST’ caso contrário.

     Se ‘type_comments=True’ é fornecido, o analisador é modificado para
     verificar e retornar comentários do tipo, conforme especificado por
     PEP 484(1) e PEP 526(2).  Isso é equivalente a adicionar *note
     ast.PyCF_TYPE_COMMENTS: 4878. aos sinalizadores passados para *note
     compile(): 192.  Isso relatará erros de sintaxe para comentários do
     tipo extraviado.  Sem esse sinalizador, os comentários do tipo
     serão ignorados e o campo ‘type_comment’ nos nós AST selecionados
     sempre será ‘None’.  Além disso, os locais dos comentários ‘# type:
     ignore’ serão retornados como o atributo ‘type_ignores’ de *note
     Module: 4800. (caso contrário, é sempre uma lista vazia).

     Além disso, se ‘mode’ for ‘'func_type'’, a sintaxe de entrada é
     modificada para corresponder a “comentários de tipo de assinatura”
     de PEP 484(3), por exemplo, ‘(str, int) -> List[str]’.

     Definir ‘feature_version’ como uma tupla ‘(major, minor)’ resultará
     em uma tentativa de “melhor esforço” de análise usando a gramática
     daquela versão do Python.  Por exemplo, definir
     ‘feature_version=(3, 9)’ tentará proibir a análise de instruções
     *note match: 810.  Atualmente ‘major’ deve ser igual a ‘3’.  A
     versão mais baixa suportada é ‘(3, 7)’ (e isso pode aumentar em
     versões futuras do Python); o mais alto é ‘sys.version_info[0:2]’.
     A tentativa de “melhor esforço” significa que não há garantia de
     que a análise (ou sucesso da análise) seja a mesma que quando
     executada na versão Python correspondente a ‘feature_version’.

     Se a fonte contém um caractere nulo (‘\0’), *note ValueError: 202.
     é levantada.

          Aviso: Observe que a análise bem-sucedida do código-fonte em
          um objeto AST não garante que o código-fonte fornecido seja um
          código Python válido que pode ser executado, pois a etapa de
          compilação pode levantar mais exceções *note SyntaxError: 18d.
          Por exemplo, a fonte ‘return 42’ gera um nó AST válido para
          uma instrução return, mas não pode ser compilado sozinho
          (precisa estar dentro de um nó de função).

          Em particular, *note ast.parse(): 1a8. não fará nenhuma
          verificação de escopo, o que a etapa de compilação faz.

          Aviso: É possível travar o interpretador Python com uma string
          suficientemente grande/complexa devido às limitações de
          profundidade da pilha no compilador de AST do Python.

     Alterado na versão 3.8: Adicionado ‘type_comments’,
     ‘mode='func_type'’ e ‘feature_version’.

     Alterado na versão 3.13: A versão mínima suportada para
     ‘feature_version’ agora é ‘(3, 7)’.  O argumento ‘optimize’ foi
     adicionado.

 -- Função: ast.unparse (ast_obj)

     Desfaz análise de um objeto *note ast.AST: 1a6. e gera uma string
     com código que produziria um objeto *note ast.AST: 1a6. equivalente
     se analisado novamente com *note ast.parse(): 1a8.

          Aviso: A string de código produzida não será necessariamente
          igual ao código original que gerou o objeto *note ast.AST:
          1a6. (sem quaisquer otimizações do compilador, como
          tuplas/frozensets constantes).

          Aviso: Tentar desfazer análise de uma expressão altamente
          complexa resultaria em *note RecursionError: d90.

     Adicionado na versão 3.9.

 -- Função: ast.literal_eval (node_or_string)

     Avalia um nó de expressão ou uma string contendo apenas um literal
     Python ou uma exibição de contêiner.  A string ou nó fornecido pode
     consistir apenas nas seguintes estruturas literais Python: strings,
     bytes, números, tuplas, listas, dicionários, conjuntos, booleanos,
     ‘None’ e ‘Ellipsis’.

     Isso pode ser usado para avaliar strings contendo valores Python
     sem a necessidade de analisar os valores por conta própria.  Não é
     capaz de avaliar expressões arbitrariamente complexas, por exemplo,
     envolvendo operadores ou indexação.

     Esta função foi documentada como “segura” no passado sem definir o
     que isso significava.  Isso foi enganoso.  Isso foi projetado
     especificamente para não executar código Python, ao contrário do
     *note eval(): 180. mais geral.  Não há espaço de nomes, pesquisas
     de nome ou capacidade de chamada.  Mas não está livre de ataques:
     uma entrada relativamente pequena pode levar ao esgotamento da
     memória ou ao esgotamento da pilha C, travando o processo.  Também
     existe a possibilidade de negação de serviço por consumo excessivo
     de CPU em algumas entradas.  Portanto, não é recomendado chamá-la
     em dados não confiáveis.

          Aviso: É possível travar o interpretador Python devido às
          limitações de profundidade da pilha no compilador AST do
          Python.

          Pode levantar *note ValueError: 202, *note TypeError: 2c3,
          *note SyntaxError: 18d, *note MemoryError: 15c5. e *note
          RecursionError: d90. dependendo da entrada malformada.

     Alterado na versão 3.2: Agora permite bytes e literais de
     conjuntos.

     Alterado na versão 3.9: Agora oferece suporte à criação de
     conjuntos vazios com ‘'set()'’.

     Alterado na versão 3.10: Para entradas de string, os espaços
     iniciais e tabulações agora são removidos.

 -- Função: ast.get_docstring (node, clean=True)

     Retorna a docstring do 'node' dado (que deve ser um nó *note
     FunctionDef: 17fa, *note AsyncFunctionDef: 17f9, *note ClassDef:
     17f8. ou *note Module: 4800.) ou ‘None’ se não tiver uma docstring.
     Se 'clean' for verdadeiro, limpa o recuo da docstring com *note
     inspect.cleandoc(): 17a8.

     Alterado na versão 3.5: Não há suporte a *note AsyncFunctionDef:
     17f9.

 -- Função: ast.get_source_segment (source, node, *, padded=False)

     Obtém o segmento de código-fonte do 'source' que gerou o 'node'.
     Se alguma informação de localização (*note lineno: 47f9, *note
     end_lineno: 47fb, *note col_offset: 47fa. ou *note end_col_offset:
     47fc.) está faltando, retorna ‘None’.

     Se 'padded' for ‘True’, a primeira linha de uma instrução
     multilinha será preenchida com espaços para corresponder à sua
     posição original.

     Adicionado na versão 3.8.

 -- Função: ast.fix_missing_locations (node)

     Quando você compila uma árvore de nós com *note compile(): 192, o
     compilador espera atributos *note lineno: 47f9. e *note col_offset:
     47fa. para cada nó que os suporta.  Isso é tedioso para preencher
     nós gerados, portanto, esse auxiliar adiciona esses atributos
     recursivamente, onde ainda não estão definidos, definindo-os para
     os valores do nó pai.  Ele funciona recursivamente a partir do
     'node'.

 -- Função: ast.increment_lineno (node, n=1)

     Incrementa o número da linhas e o número da linha final de cada nó
     na árvore começando em 'node' em 'n'.  Isso é útil para “mover
     código” para um local diferente em um arquivo.

 -- Função: ast.copy_location (new_node, old_node)

     Copia o local de origem (*note lineno: 47f9, *note col_offset:
     47fa, *note end_lineno: 47fb. e *note end_col_offset: 47fc.) de
     'old_node' para 'new_node' se possível e, então, retorna
     'new_node'.

 -- Função: ast.iter_fields (node)

     Produz uma tupla de ‘(fieldname, value)’ para cada campo em
     ‘node._fields’ que esteja presente em 'node'.

 -- Função: ast.iter_child_nodes (node)

     Produz todos os nós filhos diretos de 'node', ou seja, todos os
     campos que são nós e todos os itens de campos que são listas de
     nós.

 -- Função: ast.walk (node)

     Produz recursivamente todos os nós descendentes na árvore começando
     em 'node' (incluindo o próprio 'node'), em nenhuma ordem
     especificada.  Isso é útil se você quiser apenas modificar nós no
     lugar e não se importar com o contexto.

 -- Classe: ast.NodeVisitor

     Uma classe base de visitante de nó que percorre a árvore de sintaxe
     abstrata e chama uma função de visitante para cada nó encontrado.
     Esta função pode retornar um valor que é encaminhado pelo método
     *note visit(): 487e.

     Esta classe deve ser uma subclasse, com a subclasse adicionando
     métodos visitantes.

      -- Método: visit (node)

          Visita um nó.  A implementação padrão chama o método chamado
          ‘self.visit_NOMEDACLASSE’ sendo 'nomedaclasse' o nome da
          classe do nó, ou *note generic_visit(): 487f. se aquele método
          não existir.

      -- Método: generic_visit (node)

          Este visitante chama *note visit(): 487e. em todos os filhos
          do nó.

          Observe que nós filhos de nós que possuem um método de
          visitante personalizado não serão visitados, a menos que o
          visitante chame *note generic_visit(): 487f. ou os visite por
          conta própria.

      -- Método: visit_Constant (node)

          Manipula todos os nós constantes.

     Não use o *note NodeVisitor: a77. se você quiser aplicar mudanças
     nos nós durante a travessia.  Para isso existe um visitante
     especial (*note NodeTransformer: 4880.) que permite modificações.

     Descontinuado desde a versão 3.8: Os métodos ‘visit_Num()’,
     ‘visit_Str()’, ‘visit_Bytes()’, ‘visit_NameConstant()’ e
     ‘visit_Ellipsis()’ estão agora descontinuados e não serão chamados
     em futuras versões do Python.  Adicione um método *note
     visit_Constant(): a78. para lidar com nós de constantes.

 -- Classe: ast.NodeTransformer

     A subclasse *note NodeVisitor: a77. que percorre a árvore de
     sintaxe abstrata e permite a modificação de nós.

     O *note NodeTransformer: 4880. percorrerá a AST e usará o valor de
     retorno dos métodos do visitante para substituir ou remover o nó
     antigo.  Se o valor de retorno do método visitante for ‘None’, o nó
     será removido de seu local, caso contrário, ele será substituído
     pelo valor de retorno.  O valor de retorno pode ser o nó original,
     caso em que não há substituição.

     Aqui está um exemplo de transformador que rescreve todas as
     ocorrências de procuras por nome (‘foo’) para ‘data['foo']’:

          class RewriteName(NodeTransformer):

              def visit_Name(self, node):
                  return Subscript(
                      value=Name(id='data', ctx=Load()),
                      slice=Constant(value=node.id),
                      ctx=node.ctx
                  )

     Tenha em mente que, se o nó em que você está operando tiver nós
     filhos, você deve transformar os nós filhos por conta própria ou
     chamar o método *note generic_visit(): 487f. para o nó primeiro.

     Para nós que faziam parte de uma coleção de instruções (que se
     aplica a todos os nós de instrução), o visitante também pode
     retornar uma lista de nós em vez de apenas um único nó.

     Se *note NodeTransformer: 4880. introduz novos nós (que não faziam
     parte da árvore original) sem fornecer informações de localização
     (como *note lineno: 47f9.), *note fix_missing_locations(): 4879.
     deve ser chamado com o novo subárvore para recalcular as
     informações de localização:

          tree = ast.parse('foo', mode='eval')
          new_tree = fix_missing_locations(RewriteName().visit(tree))

     Normalmente você usa o transformador assim:

          node = YourTransformer().visit(node)

 -- Função: ast.dump (node, annotate_fields=True,
          include_attributes=False, *, indent=None, show_empty=False)

     Retorne um despejo formatado da árvore em 'node'.  Isso é útil
     principalmente para fins de depuração.  Se 'annotate_fields' for
     verdadeiro (por padrão), a sequência retornada mostrará os nomes e
     os valores para os campos.  Se 'annotate_fields' for falso, a
     sequência de resultados será mais compacta ao omitir nomes de
     campos não ambíguos.  Atributos como números de linha e
     deslocamentos de coluna não são despejados por padrão.  Se isso for
     desejado, 'include_attributes' pode ser definido como verdadeiro.

     Se 'indent' for um inteiro não negativo ou uma string, então a
     árvore terá uma saída formatada com este nível de indentação.  Um
     nível de indentação 0, negativo ou ‘""’ apenas colocará novas
     linhas.  ‘None’ (o padrão) seleciona a representação de uma única
     linha.  Usando um inteiro positivo a indentação terá alguns espaços
     por nível.  Se 'indent' for uma string (como ‘"\t"’), essa string
     será usada para indentar cada nível.

     Se 'show_empty' for falso (o padrão), listas vazias opcionais serão
     omitidas da saída.  Valores opcionais ‘None’ são sempre omitidos.

     Alterado na versão 3.9: Adicionada a opção 'indent'.

     Alterado na versão 3.13: Adicionada a opção 'show_empty'.

          >>> print(ast.dump(ast.parse("""\
          ... async def f():
          ...     await other_func()
          ... """), indent=4, show_empty=True))
          Module(
              body=[
                  AsyncFunctionDef(
                      name='f',
                      args=arguments(
                          posonlyargs=[],
                          args=[],
                          kwonlyargs=[],
                          kw_defaults=[],
                          defaults=[]),
                      body=[
                          Expr(
                              value=Await(
                                  value=Call(
                                      func=Name(id='other_func', ctx=Load()),
                                      args=[],
                                      keywords=[])))],
                      decorator_list=[],
                      type_params=[])],
              type_ignores=[])

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/

   (2) https://peps.python.org/pep-0526/

   (3) https://peps.python.org/pep-0484/


File: python.info,  Node: Sinalizadores do compilador<2>,  Next: Uso na linha de comando<9>,  Prev: Auxiliares de ast,  Up: ast — Árvores de Sintaxe Abstrata

5.32.1.18 Sinalizadores do compilador
.....................................

Os seguintes sinalizadores podem ser passados para *note compile(): 192.
para alterar os efeitos na compilação de um programa:

 -- Dado: ast.PyCF_ALLOW_TOP_LEVEL_AWAIT

     Habilita suporte para ‘await’, ‘async for’, ‘async with’ e
     compreensões assíncronas de nível superior.

     Adicionado na versão 3.8.

 -- Dado: ast.PyCF_ONLY_AST

     Gera e retorna uma árvore de sintaxe abstrata em vez de retornar um
     objeto de código compilado.

 -- Dado: ast.PyCF_OPTIMIZED_AST

     O AST retornado é otimizado de acordo com o argumento 'optimize' em
     *note compile(): 192. ou *note ast.parse(): 1a8.

     Adicionado na versão 3.13.

 -- Dado: ast.PyCF_TYPE_COMMENTS

     Habilita suporte para comentários do tipo PEP 484(1) e PEP 526(2)
     (‘# type: <type>’, ‘# type: ignore <stuff>’).

     Adicionado na versão 3.8.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/

   (2) https://peps.python.org/pep-0526/


File: python.info,  Node: Uso na linha de comando<9>,  Prev: Sinalizadores do compilador<2>,  Up: ast — Árvores de Sintaxe Abstrata

5.32.1.19 Uso na linha de comando
.................................

Adicionado na versão 3.9.

O módulo *note ast: 8. pode ser executado como um script na linha de
comando.  É tão simples quanto:

     python -m ast [-m <mode>] [-a] [infile]

As seguintes opções são aceitas:

 -- Option: -h, --help

     Mostra a mensagem de ajuda e sai.

 -- Option: -m <mode>
 -- Option: --mode <mode>

     Especifica que tipo de código deve ser compilado, como o argumento
     'mode' em *note parse(): 1a8.

 -- Option: --no-type-comments

     Não analisa comentários de tipo.

 -- Option: -a, --include-attributes

     Inclui atributos como números de linha e deslocamentos de colunas.

 -- Option: -i <indent>
 -- Option: --indent <indent>

     indentação de nós em AST (número de espaços).

Se ‘infile’ for especificado, seu conteúdo será analisado no AST e
despejado no stdout.  Caso contrário, o conteúdo será lido em stdin.

Ver também
..........

Green Tree Snakes(1), um recurso de documentação externo, possui bons
detalhes sobre trabalhar com ASTs do Python.

ASTTokens(2) anota ASTs do Python com as posições de tokens e texto no
código-fonte que as gerou.  Isso é útil para ferramentas que fazem
transformações de código-fonte.

leoAst.py(3) unifica as visualizações baseadas em token e em árvore de
análise de programas python, inserindo links duas vias entre tokens e
nós de ast.

LibCST(4) analisa o código como uma árvore de sintaxe concreta que se
parece com uma árvore ast e mantém todos os detalhes de formatação.  É
útil para construir linters e aplicações de refatoração automatizada
(codemod).

Parso(5) é um analisador Python que oferece suporte a recuperação de
erros e análise de ida e volta para diferentes versões do Python (em
várias versões do Python).  Parso também é capaz de listar vários erros
de sintaxe em seu arquivo Python.

   ---------- Footnotes ----------

   (1) https://greentreesnakes.readthedocs.io/

   (2) https://asttokens.readthedocs.io/en/latest/user-guide.html

   (3) https://leo-editor.github.io/leo-editor/appendices.html#leoast-py

   (4) https://libcst.readthedocs.io/

   (5) https://parso.readthedocs.io


File: python.info,  Node: symtable — Acesso a tabela de símbolos do compilador,  Next: token — Constantes usadas com árvores de análises do Python,  Prev: ast — Árvores de Sintaxe Abstrata,  Up: Serviços da Linguagem Python

5.32.2 ‘symtable’ — Acesso a tabela de símbolos do compilador
-------------------------------------------------------------

'Código-fonte:' Lib/symtable.py(1)

__________________________________________________________________

Symbol tables are generated by the compiler from AST just before
bytecode is generated.  The symbol table is responsible for calculating
the scope of every identifier in the code.  *note symtable: d8. provides
an interface to examine these tables.

* Menu:

* Generating Symbol Tables::
* Examining Symbol Tables::
* Uso na linha de comando: Uso na linha de comando<10>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/symtable.py


File: python.info,  Node: Generating Symbol Tables,  Next: Examining Symbol Tables,  Up: symtable — Acesso a tabela de símbolos do compilador

5.32.2.1 Generating Symbol Tables
.................................

 -- Função: symtable.symtable (code, filename, compile_type)

     Return the toplevel *note SymbolTable: 4893. for the Python source
     'code'.  'filename' is the name of the file containing the code.
     'compile_type' is like the 'mode' argument to *note compile(): 192.


File: python.info,  Node: Examining Symbol Tables,  Next: Uso na linha de comando<10>,  Prev: Generating Symbol Tables,  Up: symtable — Acesso a tabela de símbolos do compilador

5.32.2.2 Examining Symbol Tables
................................

 -- Classe: symtable.SymbolTableType

     An enumeration indicating the type of a *note SymbolTable: 4893.
     object.

      -- Atributo: MODULE = "module"

          Used for the symbol table of a module.

      -- Atributo: FUNCTION = "function"

          Used for the symbol table of a function.

      -- Atributo: CLASS = "class"

          Used for the symbol table of a class.

     The following members refer to different flavors of *note
     annotation scopes: 188.

      -- Atributo: ANNOTATION = "annotation"

          Used for annotations if ‘from __future__ import annotations’
          is active.

      -- Atributo: TYPE_ALIAS = "type alias"

          Used for the symbol table of *note type: 438. constructions.

      -- Atributo: TYPE_PARAMETERS = "type parameters"

          Used for the symbol table of *note generic functions: 453. or
          *note generic classes: 452.

      -- Atributo: TYPE_VARIABLE = "type variable"

          Used for the symbol table of the bound, the constraint tuple
          or the default value of a single type variable in the formal
          sense, i.e., a TypeVar, a TypeVarTuple or a ParamSpec object
          (the latter two do not support a bound or a constraint tuple).

     Adicionado na versão 3.13.

 -- Classe: symtable.SymbolTable

     A namespace table for a block.  The constructor is not public.

      -- Método: get_type ()

          Return the type of the symbol table.  Possible values are
          members of the *note SymbolTableType: 16f8. enumeration.

          Alterado na versão 3.12: Added ‘'annotation'’, ‘'TypeVar
          bound'’, ‘'type alias'’, and ‘'type parameter'’ as possible
          return values.

          Alterado na versão 3.13: Return values are members of the
          *note SymbolTableType: 16f8. enumeration.

          The exact values of the returned string may change in the
          future, and thus, it is recommended to use *note
          SymbolTableType: 16f8. members instead of hard-coded strings.

      -- Método: get_id ()

          Return the table’s identifier.

      -- Método: get_name ()

          Return the table’s name.  This is the name of the class if the
          table is for a class, the name of the function if the table is
          for a function, or ‘'top'’ if the table is global (*note
          get_type(): 16f9. returns ‘'module'’).  For type parameter
          scopes (which are used for generic classes, functions, and
          type aliases), it is the name of the underlying class,
          function, or type alias.  For type alias scopes, it is the
          name of the type alias.  For *note TypeVar: 15d. bound scopes,
          it is the name of the ‘TypeVar’.

      -- Método: get_lineno ()

          Return the number of the first line in the block this table
          represents.

      -- Método: is_optimized ()

          Return ‘True’ if the locals in this table can be optimized.

      -- Método: is_nested ()

          Return ‘True’ if the block is a nested class or function.

      -- Método: has_children ()

          Return ‘True’ if the block has nested namespaces within it.
          These can be obtained with *note get_children(): 48a2.

      -- Método: get_identifiers ()

          Return a view object containing the names of symbols in the
          table.  See the *note documentation of view objects: 23d8.

      -- Método: lookup (name)

          Lookup 'name' in the table and return a *note Symbol: 17c1.
          instance.

      -- Método: get_symbols ()

          Return a list of *note Symbol: 17c1. instances for names in
          the table.

      -- Método: get_children ()

          Return a list of the nested symbol tables.

 -- Classe: symtable.Function

     A namespace for a function or method.  This class inherits from
     *note SymbolTable: 4893.

      -- Método: get_parameters ()

          Return a tuple containing names of parameters to this
          function.

      -- Método: get_locals ()

          Return a tuple containing names of locals in this function.

      -- Método: get_globals ()

          Return a tuple containing names of globals in this function.

      -- Método: get_nonlocals ()

          Return a tuple containing names of explicitly declared
          nonlocals in this function.

      -- Método: get_frees ()

          Return a tuple containing names of *note free (closure)
          variables: 20d1. in this function.

 -- Classe: symtable.Class

     A namespace of a class.  This class inherits from *note
     SymbolTable: 4893.

      -- Método: get_methods ()

          Return a tuple containing the names of method-like functions
          declared in the class.

          Here, the term ‘method’ designates 'any' function defined in
          the class body via *note def: 14a2. or *note async def: 5d1.

          Functions defined in a deeper scope (e.g., in an inner class)
          are not picked up by *note get_methods(): 2e5.

          Por exemplo:

               >>> import symtable
               >>> st = symtable.symtable('''
               ... def outer(): pass
               ...
               ... class A:
               ...    def f():
               ...        def w(): pass
               ...
               ...    def g(self): pass
               ...
               ...    @classmethod
               ...    async def h(cls): pass
               ...
               ...    global outer
               ...    def outer(self): pass
               ... ''', 'test', 'exec')
               >>> class_A = st.get_children()[1]
               >>> class_A.get_methods()
               ('f', 'g', 'h')

          Although ‘A().f()’ raises *note TypeError: 2c3. at runtime,
          ‘A.f’ is still considered as a method-like function.

 -- Classe: symtable.Symbol

     An entry in a *note SymbolTable: 4893. corresponding to an
     identifier in the source.  The constructor is not public.

      -- Método: get_name ()

          Return the symbol’s name.

      -- Método: is_referenced ()

          Return ‘True’ if the symbol is used in its block.

      -- Método: is_imported ()

          Return ‘True’ if the symbol is created from an import
          statement.

      -- Método: is_parameter ()

          Return ‘True’ if the symbol is a parameter.

      -- Método: is_global ()

          Return ‘True’ if the symbol is global.

      -- Método: is_nonlocal ()

          Return ‘True’ if the symbol is nonlocal.

      -- Método: is_declared_global ()

          Return ‘True’ if the symbol is declared global with a global
          statement.

      -- Método: is_local ()

          Return ‘True’ if the symbol is local to its block.

      -- Método: is_annotated ()

          Return ‘True’ if the symbol is annotated.

          Adicionado na versão 3.6.

      -- Método: is_free ()

          Return ‘True’ if the symbol is referenced in its block, but
          not assigned to.

      -- Método: is_assigned ()

          Return ‘True’ if the symbol is assigned to in its block.

      -- Método: is_namespace ()

          Return ‘True’ if name binding introduces new namespace.

          If the name is used as the target of a function or class
          statement, this will be true.

          Por exemplo:

               >>> table = symtable.symtable("def some_func(): pass", "string", "exec")
               >>> table.lookup("some_func").is_namespace()
               True

          Note that a single name can be bound to multiple objects.  If
          the result is ‘True’, the name may also be bound to other
          objects, like an int or list, that does not introduce a new
          namespace.

      -- Método: get_namespaces ()

          Return a list of namespaces bound to this name.

      -- Método: get_namespace ()

          Return the namespace bound to this name.  If more than one or
          no namespace is bound to this name, a *note ValueError: 202.
          is raised.


File: python.info,  Node: Uso na linha de comando<10>,  Prev: Examining Symbol Tables,  Up: symtable — Acesso a tabela de símbolos do compilador

5.32.2.3 Uso na linha de comando
................................

Adicionado na versão 3.13.

O módulo *note symtable: d8. pode ser invocado como um script na linha
de comando:

     python -m symtable [infile...]

Symbol tables are generated for the specified Python source files and
dumped to stdout.  If no input file is specified, the content is read
from stdin.


File: python.info,  Node: token — Constantes usadas com árvores de análises do Python,  Next: keyword — Testando palavras reservadas do Python,  Prev: symtable — Acesso a tabela de símbolos do compilador,  Up: Serviços da Linguagem Python

5.32.3 ‘token’ — Constantes usadas com árvores de análises do Python
--------------------------------------------------------------------

'Código-fonte:' Lib/token.py(1)

__________________________________________________________________

Este módulo fornece constantes que representam os valores numéricos dos
nós das folhas da árvore de análise (tokens terminais).  Consulte o
arquivo ‘Grammar/Tokens’ na distribuição Python para obter as definições
dos nomes no contexto da gramática da linguagem.  Os valores numéricos
específicos para os quais os nomes são mapeados podem mudar entre as
versões do Python.

O módulo também fornece um mapeamento de códigos numéricos para nomes e
algumas funções.  As funções espelham definições nos arquivos de
cabeçalho do Python C.

Observe que o valor de um token pode depender das opções do tokenizador.
Por exemplo, um token ‘"+"’ pode ser relatado como *note PLUS: 48be. ou
*note OP: 48bf, ou um token ‘"match"’ pode ser *note NAME: 48c0. ou
*note SOFT_KEYWORD: 48c1.

 -- Dado: token.tok_name

     Dicionário que mapeia os valores numéricos das constantes definidas
     neste módulo de volta para cadeias de nomes, permitindo que seja
     gerada uma representação mais legível de árvores de análise.

 -- Função: token.ISTERMINAL (x)

     Retorna ‘True’ para valores de tokens terminais.

 -- Função: token.ISNONTERMINAL (x)

     Retorna ‘True’ para valores de tokens não terminais.

 -- Função: token.ISEOF (x)

     Retorna ‘True’ se 'x' for o marcador que indica o final da entrada.

Os constantes de tokens são:

 -- Dado: token.NAME

     Valor de token que indica um *note identificador: 2021.  Observe
     que as palavras reservadas também são inicialmente tokenizadas como
     tokens ‘NAME’.

 -- Dado: token.NUMBER

     Valor de token que indica um *note literal numérico: 2052.

 -- Dado: token.STRING

     Valor de token que indica um *note literal de string ou byte: 2031,
     excluindo *note literais de strings formatadas: 9b1.  A string de
     token não é interpretada: ela inclui as aspas ao redor e o prefixo
     (se fornecido); contrabarras são incluídas literalmente, sem
     processar sequências de escape.

 -- Dado: token.OP

     Um valor de token genérico que indica um *note operador: 206c. ou
     *note delimitador: 206d.

     Este valor é relatado apenas pelo módulo *note tokenize: fb.
     Internamente, o tokenizador usa *note tipos exatos de tokens: 48c8.
     em vez disso.

 -- Dado: token.COMMENT

     Valor de token usado para indicar um comentário.  O analisador
     sintático ignora tokens ‘COMMENT’.

 -- Dado: token.NEWLINE

     Valor de token que indica o fim de uma *note linha lógica: 200e.

 -- Dado: token.NL

     Valor de token usado para indicar uma nova linha não terminante.
     Os tokens ‘NL’ são gerados quando uma linha lógica de código é
     continuada em várias linhas físicas.  O analisador sintático ignora
     os tokens ‘NL’.

 -- Dado: token.INDENT

     Valor de token usado no início de uma *note linha lógica: 200e.
     para indicar o início de um *note bloco indentado: 201c.

 -- Dado: token.DEDENT

     Valor de token usado no início de uma *note linha lógica: 200e.
     para indicar o fim de um *note bloco indentado: 201c.

 -- Dado: token.FSTRING_START

     Valor de token usado para indicar o início de um *note literal de
     f-string: 9b1.

     A string de token inclui o prefixo e as aspas iniciais, mas nenhum
     conteúdo do literal.

 -- Dado: token.FSTRING_MIDDLE

     Valor de token usado para texto literal dentro de um *note literal
     de f-string: 9b1, incluindo especificações de formato.

     Campos de substituição (ou seja, as partes não literais de
     f-strings) usam os mesmos tokens que outras expressões e são
     delimitados pelos tokens *note LBRACE: 48cf, *note RBRACE: 48d0,
     *note EXCLAMATION: 48d1. e *note COLON: 48d2.

 -- Dado: token.FSTRING_END

     Valor de token usado para indicar o fim de um *note literal de
     f-string: 9b1.

     A string do token contém as aspas de fechamento.

 -- Dado: token.ENDMARKER

     Valor de token que indica o fim da entrada.

 -- Dado: token.ENCODING

     Valor de token que indica a codificação usada para decodificar os
     bytes de origem em texto.  O primeiro token retornado por *note
     tokenize.tokenize(): 4d9. sempre será um token ‘ENCODING’.

     Este tipo de token não é usado pelo tokenizador do C, mas é
     necessário para o módulo *note tokenize: fb.

Os seguintes tipos de token não são produzidos pelo módulo *note
tokenize: fb. e são definidos para usos especiais no tokenizador ou
analisador:

 -- Dado: token.TYPE_IGNORE

     Valor de token indicando que um comentário ‘type: ignore’ foi
     reconhecido.  Tais tokens são produzidos em vez de tokens *note
     COMMENT: 48c9. regulares somente com o sinalizador *note
     PyCF_TYPE_COMMENTS: 4878.

 -- Dado: token.TYPE_COMMENT

     Valor de token indicando que um comentário de tipo foi reconhecido.
     Tais tokens são produzidos em vez de tokens *note COMMENT: 48c9.
     regulares somente com o sinalizador *note PyCF_TYPE_COMMENTS: 4878.

 -- Dado: token.SOFT_KEYWORD

     Valor de token indicando uma *note palavra reservada contextual:
     80f.

     O tokenizador nunca produz esse valor.  Para verificar uma palavra
     reservada contextual, passe uma string do token *note NAME: 48c0.
     para *note keyword.issoftkeyword(): 48d8.

 -- Dado: token.ERRORTOKEN

     Valor de token usado para indicar uma entrada errada.

     O módulo *note tokenize: fb. geralmente indica erros levantando
     exceções em vez de emitir este token.  Ele também pode emitir
     tokens como *note OP: 48bf. ou *note NAME: 48c0. com strings que
     são rejeitadas posteriormente pelo parser.
Os tokens restantes representam *note operadores: 206c. e *note
delimitadores: 206d. específicos.  (O módulo *note tokenize: fb. os
relata como *note OP: 48bf.; consulte ‘exact_type’ na documentação *note
tokenize: fb. para obter detalhes.)

Token                                                  Valor
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
 -- Dado: token.LPAR                                   ‘"("’
                                                       
                                                       
 -- Dado: token.RPAR                                   ‘")"’
                                                       
                                                       
 -- Dado: token.LSQB                                   ‘"["’
                                                       
                                                       
 -- Dado: token.RSQB                                   ‘"]"’
                                                       
                                                       
 -- Dado: token.COLON                                  ‘":"’
                                                       
                                                       
 -- Dado: token.COMMA                                  ‘","’
                                                       
                                                       
 -- Dado: token.SEMI                                   ‘";"’
                                                       
                                                       
 -- Dado: token.PLUS                                   ‘"+"’
                                                       
                                                       
 -- Dado: token.MINUS                                  ‘"-"’
                                                       
                                                       
 -- Dado: token.STAR                                   ‘"*"’
                                                       
                                                       
 -- Dado: token.SLASH                                  ‘"/"’
                                                       
                                                       
 -- Dado: token.VBAR                                   ‘"|"’
                                                       
                                                       
 -- Dado: token.AMPER                                  ‘"&"’
                                                       
                                                       
 -- Dado: token.LESS                                   ‘"<"’
                                                       
                                                       
 -- Dado: token.GREATER                                ‘">"’
                                                       
                                                       
 -- Dado: token.EQUAL                                  ‘"="’
                                                       
                                                       
 -- Dado: token.DOT                                    ‘"."’
                                                       
                                                       
 -- Dado: token.PERCENT                                ‘"%"’
                                                       
                                                       
 -- Dado: token.LBRACE                                 ‘"{"’
                                                       
                                                       
 -- Dado: token.RBRACE                                 ‘"}"’
                                                       
                                                       
 -- Dado: token.EQEQUAL                                ‘"=="’
                                                       
                                                       
 -- Dado: token.NOTEQUAL                               ‘"!="’
                                                       
                                                       
 -- Dado: token.LESSEQUAL                              ‘"<="’
                                                       
                                                       
 -- Dado: token.GREATEREQUAL                           ‘">="’
                                                       
                                                       
 -- Dado: token.TILDE                                  ‘"~"’
                                                       
                                                       
 -- Dado: token.CIRCUMFLEX                             ‘"^"’
                                                       
                                                       
 -- Dado: token.LEFTSHIFT                              ‘"<<"’
                                                       
                                                       
 -- Dado: token.RIGHTSHIFT                             ‘">>"’
                                                       
                                                       
 -- Dado: token.DOUBLESTAR                             ‘"**"’
                                                       
                                                       
 -- Dado: token.PLUSEQUAL                              ‘"+="’
                                                       
                                                       
 -- Dado: token.MINEQUAL                               ‘"-="’
                                                       
                                                       
 -- Dado: token.STAREQUAL                              ‘"*="’
                                                       
                                                       
 -- Dado: token.SLASHEQUAL                             ‘"/="’
                                                       
                                                       
 -- Dado: token.PERCENTEQUAL                           ‘"%="’
                                                       
                                                       
 -- Dado: token.AMPEREQUAL                             ‘"&="’
                                                       
                                                       
 -- Dado: token.VBAREQUAL                              ‘"|="’
                                                       
                                                       
 -- Dado: token.CIRCUMFLEXEQUAL                        ‘"^="’
                                                       
                                                       
 -- Dado: token.LEFTSHIFTEQUAL                         ‘"<<="’
                                                       
                                                       
 -- Dado: token.RIGHTSHIFTEQUAL                        ‘">>="’
                                                       
                                                       
 -- Dado: token.DOUBLESTAREQUAL                        ‘"**="’
                                                       
                                                       
 -- Dado: token.DOUBLESLASH                            ‘"//"’
                                                       
                                                       
 -- Dado: token.DOUBLESLASHEQUAL                       ‘"//="’
                                                       
                                                       
 -- Dado: token.AT                                     ‘"@"’
                                                       
                                                       
 -- Dado: token.ATEQUAL                                ‘"@="’
                                                       
                                                       
 -- Dado: token.RARROW                                 ‘"->"’
                                                       
                                                       
 -- Dado: token.ELLIPSIS                               ‘"..."’
                                                       
                                                       
 -- Dado: token.COLONEQUAL                             ‘":="’
                                                       
                                                       
 -- Dado: token.EXCLAMATION                            ‘"!"’
                                                       

As seguintes constantes não-tokens são fornecidas:

 -- Dado: token.N_TOKENS

     O número de tipos de token definidos neste módulo.

 -- Dado: token.EXACT_TOKEN_TYPES

     Um dicionário que mapeia a representação de string de um token para
     seu código numérico.

     Adicionado na versão 3.8.

Alterado na versão 3.5: Adicionados os tokens ‘AWAIT’ e ‘ASYNC’.

Alterado na versão 3.7: Adicionados os tokens *note COMMENT: 48c9, *note
NL: 48cb. e *note ENCODING: 48d5.

Alterado na versão 3.7: Removido os tokens ‘AWAIT’ e ‘ASYNC’.  “async” e
“await” são agora tokenizados como tokens *note NAME: 48c0.

Alterado na versão 3.8: Adicionados *note TYPE_COMMENT: 48d7, *note
TYPE_IGNORE: 48d6, *note COLONEQUAL: 4904.  Adicionados os tokens
‘AWAIT’ e ‘ASYNC’ (eles são necessários para dar suporte à análise de
versões mais antigas do Python para *note ast.parse(): 1a8. com
‘feature_version’ definido como 6 ou inferior).

Alterado na versão 3.12: Adicionado *note EXCLAMATION: 48d1.

Alterado na versão 3.13: Removidos novamente os tokens ‘AWAIT’ e
‘ASYNC’.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/token.py


File: python.info,  Node: keyword — Testando palavras reservadas do Python,  Next: tokenize — Tokenizador para código-fonte Python,  Prev: token — Constantes usadas com árvores de análises do Python,  Up: Serviços da Linguagem Python

5.32.4 ‘keyword’ — Testando palavras reservadas do Python
---------------------------------------------------------

'Código-fonte:' Lib/keyword.py(1)

__________________________________________________________________

Este módulo permite a um programa Python determinar se uma string é uma
*note palavra reservada: 2029. ou *note palavra reservada contextual:
80f.

 -- Função: keyword.iskeyword (s)

     Retorna ‘True’ se 's' for uma *note palavra reservada: 2029. do
     Python.

 -- Dado: keyword.kwlist

     Sequência contendo todas as *note palavras reservadas: 2029.
     definidas para o interpretador.  Se alguma palavra reservada
     estiver definida para apenas estar ativa quando instruções *note
     __future__: 0. específicas tiverem efeito, estas serão incluídas
     também.

 -- Função: keyword.issoftkeyword (s)

     Retorna ‘True’ se 's' for uma *note palavra reservada contextual:
     80f. do Python.

     Adicionado na versão 3.9.

 -- Dado: keyword.softkwlist

     Sequência contendo todas as *note palavras reservadas contextuais:
     80f. definidas para o interpretador.  Se alguma palavra reservada
     contextual estiver definida para apenas estar ativo quando
     instruções *note __future__: 0. tiverem efeito, estas serão
     incluídas também.

     Adicionado na versão 3.9.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/keyword.py


File: python.info,  Node: tokenize — Tokenizador para código-fonte Python,  Next: tabnanny — Detecção de indentação ambígua,  Prev: keyword — Testando palavras reservadas do Python,  Up: Serviços da Linguagem Python

5.32.5 ‘tokenize’ — Tokenizador para código-fonte Python
--------------------------------------------------------

'Código-fonte:' Lib/tokenize.py(1)

__________________________________________________________________

O módulo *note tokenize: fb. fornece um scanner léxico para código-fonte
Python, implementado em Python.  O scanner neste módulo retorna
comentários como tokens também, tornando-o útil para implementar
“pretty-printers”, incluindo colorizadores para exibições na tela.

Para simplificar o tratamento do fluxo de tokens, todos os tokens *note
operadores: 206c. e *note delimitadores: 206d. e *note Ellipsis: 231c.
são retornados usando o tipo de token genérico *note OP: 48bf.  O tipo
exato pode ser determinado verificando a propriedade ‘exact_type’ na
*note tupla nomeada: 64e. retornada de *note tokenize.tokenize(): 4d9.

     Aviso: Observe que as funções neste módulo são projetadas apenas
     para analisar código Python sintaticamente válido (código que não
     levanta exceção quando analisado usando *note ast.parse(): 1a8.).
     O comportamento das funções neste módulo é 'indefinido' ao fornecer
     código Python inválido e pode mudar a qualquer momento.

* Menu:

* Tokenizando entradas::
* Uso na linha de comando: Uso na linha de comando<11>.
* Exemplos: Exemplos<35>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/tokenize.py


File: python.info,  Node: Tokenizando entradas,  Next: Uso na linha de comando<11>,  Up: tokenize — Tokenizador para código-fonte Python

5.32.5.1 Tokenizando entradas
.............................

O ponto de entrada principal é um *note gerador: 109a.:

 -- Função: tokenize.tokenize (readline)

     O gerador *note tokenize(): 4d9. requer um argumento, 'readline',
     que deve ser um objeto chamável que fornece a mesma interface que o
     método *note io.IOBase.readline(): 241f. de objetos arquivo.  Cada
     chamada para a função deve retornar uma linha de entrada como
     bytes.

     O gerador produz tuplas de 5 elementos com estes membros: o tipo de
     token; a string de token; uma tupla de 2 elementos ‘(srow, scol)’
     de ints especificando a linha e a coluna onde o token começa na
     fonte; uma tupla de 2 elementos ‘(erow, ecol)’ de ints
     especificando a linha e a coluna onde o token termina na fonte; e a
     linha na qual o token foi encontrado.  A linha passada (o último
     item da tupla) é a linha 'física'.  A tupla 5 elementos é retornada
     como uma *note tupla nomeada: 64e. com os nomes dos campos: ‘tipo
     string início fim linha’.

     A *note tupla nomeada: 64e. retornada tem uma propriedade adicional
     chamada ‘exact_type’ que contém o tipo exato do operador para
     tokens *note OP: 48bf.  Para todos os outros tipos de token,
     ‘exact_type’ é igual ao campo ‘type’ da tupla nomeada.

     Alterado na versão 3.1: Adiciona suporte para tuplas nomeadas.

     Alterado na versão 3.3: Adicionado suporte para ‘exact_type’.

     *note tokenize(): 4d9. determina a codificação de origem do arquivo
     procurando por um BOM UTF-8 ou cookie de codificação, de acordo com
     PEP 263(1).

 -- Função: tokenize.generate_tokens (readline)

     Tokeniza uma fonte lendo strings unicode em vez de bytes.

     Assim como *note tokenize(): 4d9, o argumento 'readline' é um
     chamável que retorna uma única linha de entrada.  No entanto, *note
     generate_tokens(): 4da. espera que 'readline' retorne um objeto str
     em vez de bytes.

     O resultado é um iterador produzindo tuplas nomeadas, exatamente
     como *note tokenize(): 4d9.  Ele não produz um token *note
     ENCODING: 48d5.

Todas as constantes do módulo *note token: fa. também são exportadas de
*note tokenize: fb.

Outra função é fornecida para reverter o processo de tokenização.  Isso
é útil para criar ferramentas que tokenizam um script, modificam o fluxo
de tokens e escrevem de volta o script modificado.

 -- Função: tokenize.untokenize (iterable)

     Converte tokens de volta para o código-fonte Python.  O 'iterable'
     deve retornar sequências com pelo menos dois elementos, o tipo de
     token e a string do token.  Quaisquer elementos de sequência
     adicionais são ignorados.

     O resultado é garantido para tokenizar de volta para corresponder à
     entrada, de modo que a conversão seja sem perdas e as viagens de
     ida e volta sejam garantidas.  A garantia se aplica somente ao tipo
     de token e à sequência de tokens, pois o espaçamento entre os
     tokens (posições de coluna) pode mudar.

     Retorna bytes, codificados usando o token *note ENCODING: 48d5, que
     é a primeira sequência de tokens gerada por *note tokenize(): 4d9.
     Se não houver nenhum token de codificação na entrada, ele retorna
     um str em vez disso.

*note tokenize(): 4d9. precisa detectar a codificação dos arquivos fonte
que ele tokeniza.  A função que ele usa para fazer isso está disponível:

 -- Função: tokenize.detect_encoding (readline)

     A função *note detect_encoding(): 2a19. é usada para detectar a
     codificação que deve ser usada para decodificar um arquivo de
     origem Python.  Ela requer um argumento, readline, da mesma forma
     que o gerador *note tokenize(): 4d9.

     Ele chamará readline no máximo duas vezes e retornará a codificação
     usada (como uma string) e uma lista de todas as linhas (não
     decodificadas de bytes) que ele leu.

     Ele detecta a codificação a partir da presença de um BOM UTF-8 ou
     um cookie de codificação conforme especificado em PEP 263(2).  Se
     um BOM e um cookie estiverem presentes, mas discordarem, uma
     exceção *note SyntaxError: 18d. será levantada.  Observe que se o
     BOM for encontrado, ‘'utf-8-sig'’ será retornado como uma
     codificação.

     Se nenhuma codificação for especificada, o padrão ‘'utf-8'’ será
     retornado.

     Use *note open(): 2a18. para abrir arquivos de código-fonte Python:
     ele usa *note detect_encoding(): 2a19. para detectar a codificação
     do arquivo.

 -- Função: tokenize.open (filename)

     Abre um arquivo no modo somente leitura usando a codificação
     detectada por *note detect_encoding(): 2a19.

     Adicionado na versão 3.2.

 -- Exceção: tokenize.TokenError

     Levantada quando uma docstring ou expressão que pode ser dividida
     em várias linhas não é concluída em nenhum lugar do arquivo, por
     exemplo:

          """Início da
          docstring

     ou:

          [1,
           2,
           3

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0263/

   (2) https://peps.python.org/pep-0263/


File: python.info,  Node: Uso na linha de comando<11>,  Next: Exemplos<35>,  Prev: Tokenizando entradas,  Up: tokenize — Tokenizador para código-fonte Python

5.32.5.2 Uso na linha de comando
................................

Adicionado na versão 3.3.

O módulo *note tokenize: fb. pode ser executado como um script a partir
da linha de comando.  É tão simples quanto:

     python -m tokenize [-e] [nome-do-arquivo.py]

As seguintes opções são aceitas:

 -- Option: -h, --help

     mostra esta mensagem de ajuda e sai

 -- Option: -e, --exact

     exibe nomes de tokens usando o tipo exato

Se ‘nome-de-arquivo.py’ for especificado, seu conteúdo será tokenizado
para stdout.  Caso contrário, a tokenização será realizada em stdin.


File: python.info,  Node: Exemplos<35>,  Prev: Uso na linha de comando<11>,  Up: tokenize — Tokenizador para código-fonte Python

5.32.5.3 Exemplos
.................

Exemplo de um reescritor de script que transforma literais float em
objetos Decimal:

     from tokenize import tokenize, untokenize, NUMBER, STRING, NAME, OP
     from io import BytesIO

     def decistmt(s):
         """Substitui Decimals por floats em uma string de instruções.

         >>> from decimal import Decimal
         >>> s = 'print(+21.3e-5*-.1234/81.7)'
         >>> decistmt(s)
         "print (+Decimal ('21.3e-5')*-Decimal ('.1234')/Decimal ('81.7'))"

         O formato do expoente é herdado da biblioteca da plataforma C. Casos
         conhecidos são "e-007" (Windows) e "e-07" (não Windows). Como estamos
         mostrando apenas 12 dígitos, e o 13º não está próximo de 5, o restante
         da saída deve ser independente da plataforma.

         >>> exec(s)  #doctest: +ELLIPSIS
         -3.21716034272e-0...7

         A saída dos cálculos com Decimal deve ser idêntica em todas as
         plataformas.

         >>> exec(decistmt(s))
         -3.217160342717258261933904529E-7
         """
         result = []
         g = tokenize(BytesIO(s.encode('utf-8')).readline)  # tokenize the string
         for toknum, tokval, _, _, _ in g:
             if toknum == NUMBER and '.' in tokval:  # replace NUMBER tokens
                 result.extend([
                     (NAME, 'Decimal'),
                     (OP, '('),
                     (STRING, repr(tokval)),
                     (OP, ')')
                 ])
             else:
                 result.append((toknum, tokval))
         return untokenize(result).decode('utf-8')

Exemplo de tokenização a partir da linha de comando.  O script:

     def say_hello():
         print("Hello, World!")

     say_hello()

será tokenizado para a seguinte saída, onde a primeira coluna é o
intervalo das coordenadas da linha/coluna onde o token é encontrado, a
segunda coluna é o nome do token e a coluna final é o valor do token (se
houver)

     $ python -m tokenize hello.py
     0,0-0,0:            ENCODING       'utf-8'
     1,0-1,3:            NAME           'def'
     1,4-1,13:           NAME           'say_hello'
     1,13-1,14:          OP             '('
     1,14-1,15:          OP             ')'
     1,15-1,16:          OP             ':'
     1,16-1,17:          NEWLINE        '\n'
     2,0-2,4:            INDENT         '    '
     2,4-2,9:            NAME           'print'
     2,9-2,10:           OP             '('
     2,10-2,25:          STRING         '"Hello, World!"'
     2,25-2,26:          OP             ')'
     2,26-2,27:          NEWLINE        '\n'
     3,0-3,1:            NL             '\n'
     4,0-4,0:            DEDENT         ''
     4,0-4,9:            NAME           'say_hello'
     4,9-4,10:           OP             '('
     4,10-4,11:          OP             ')'
     4,11-4,12:          NEWLINE        '\n'
     5,0-5,0:            ENDMARKER      ''

Os nomes exatos dos tipos de token podem ser exibidos usando a opção
*note -e: 4913.:

     $ python -m tokenize -e hello.py
     0,0-0,0:            ENCODING       'utf-8'
     1,0-1,3:            NAME           'def'
     1,4-1,13:           NAME           'say_hello'
     1,13-1,14:          LPAR           '('
     1,14-1,15:          RPAR           ')'
     1,15-1,16:          COLON          ':'
     1,16-1,17:          NEWLINE        '\n'
     2,0-2,4:            INDENT         '    '
     2,4-2,9:            NAME           'print'
     2,9-2,10:           LPAR           '('
     2,10-2,25:          STRING         '"Hello, World!"'
     2,25-2,26:          RPAR           ')'
     2,26-2,27:          NEWLINE        '\n'
     3,0-3,1:            NL             '\n'
     4,0-4,0:            DEDENT         ''
     4,0-4,9:            NAME           'say_hello'
     4,9-4,10:           LPAR           '('
     4,10-4,11:          RPAR           ')'
     4,11-4,12:          NEWLINE        '\n'
     5,0-5,0:            ENDMARKER      ''

Exemplo de tokenização de um arquivo programaticamente, lendo strings
unicode em vez de bytes com *note generate_tokens(): 4da.:

     import tokenize

     with tokenize.open('hello.py') as f:
         tokens = tokenize.generate_tokens(f.readline)
         for token in tokens:
             print(token)

Ou lendo bytes diretamente com *note tokenize(): 4d9.:

     import tokenize

     with open('hello.py', 'rb') as f:
         tokens = tokenize.tokenize(f.readline)
         for token in tokens:
             print(token)


File: python.info,  Node: tabnanny — Detecção de indentação ambígua,  Next: pyclbr — Suporte a navegador de módulos do Python,  Prev: tokenize — Tokenizador para código-fonte Python,  Up: Serviços da Linguagem Python

5.32.6 ‘tabnanny’ — Detecção de indentação ambígua
--------------------------------------------------

'Código-fonte:' Lib/tabnanny.py(1)

__________________________________________________________________

Por enquanto, este módulo deve ser chamado como um script.  No entanto,
é possível importá-lo para um IDE e usar a função *note check(): 4919.
descrita abaixo.

     Nota: A API fornecida por este módulo provavelmente mudará em
     versões futuras; essas mudanças podem não ser compatíveis com
     versões anteriores.

 -- Função: tabnanny.check (file_or_dir)

     Se 'file_or_dir' for um diretório e não um link simbólico, desce
     recursivamente a árvore de diretórios nomeada por 'file_or_dir',
     verificando todos os arquivos ‘.py’ ao longo do caminho.  Se
     'file_or_dir' for um arquivo-fonte comum do Python, ele será
     verificado quanto a problemas relacionados ao espaço em branco.  As
     mensagens de diagnóstico são gravadas na saída padrão usando a
     função *note print(): fa9.

 -- Dado: tabnanny.verbose

     Sinalizador indicando se as mensagens detalhadas devem ser
     impressas.  Isso é incrementado pela opção ‘-v’ se chamado como um
     script.

 -- Dado: tabnanny.filename_only

     Sinalizador indicando se os nomes dos arquivos devem ser impressos
     apenas com problemas relacionados a espaços em branco.  Isso é
     definido como true pela opção ‘-q’ se chamado como um script.

 -- Exceção: tabnanny.NannyNag

     Levantada por *note process_tokens(): 491d. se detectar um recuo
     ambíguo.  Capturado e manipulado em *note check(): 4919.

 -- Função: tabnanny.process_tokens (tokens)

     Esta função é usada por *note check(): 4919. para processar os
     tokens gerados pelo módulo *note tokenize: fb.

Ver também
..........

Módulo *note tokenize: fb.

     Scanner léxico para código-fonte Python.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/tabnanny.py


File: python.info,  Node: pyclbr — Suporte a navegador de módulos do Python,  Next: py_compile — Compila arquivos fonte do Python,  Prev: tabnanny — Detecção de indentação ambígua,  Up: Serviços da Linguagem Python

5.32.7 ‘pyclbr’ — Suporte a navegador de módulos do Python
----------------------------------------------------------

'Código-fonte:' Lib/pyclbr.py(1)

__________________________________________________________________

O módulo *note pyclbr: b4. fornece informações limitadas sobre as
funções, classes e métodos definidos em um módulo codificado em Python.
As informações são suficientes para implementar um navegador de módulos.
As informações são extraídas do código-fonte do Python em vez de
importar o módulo, portanto, este módulo é seguro para uso com código
não confiável.  Essa restrição torna impossível o uso deste módulo com
módulos não implementados no Python, incluindo todos os módulos de
extensão padrão e opcionais.

 -- Função: pyclbr.readmodule (module, path=None)

     Retorna um dicionário que mapeia os nomes de classe no nível do
     módulo aos descritores de classe.  Se possível, descritores para
     classes base importadas estão incluídos.  O parâmetro 'module' é
     uma string com o nome do módulo a ser lido; pode ser o nome de um
     módulo dentro de um pacote.  Se fornecido, 'path' é uma sequência
     de caminhos de diretório anexada a ‘sys.path’, que é usada para
     localizar o código-fonte do módulo.

     Esta função é a interface original e é mantida apenas para
     compatibilidade reversa.  Ela retorna uma versão filtrada da
     seguinte.

 -- Função: pyclbr.readmodule_ex (module, path=None)

     Retorna uma árvore baseada em dicionário que contém uma função ou
     descritores de classe para cada função e classe definida no módulo
     com uma instrução ‘def’ ou ‘class’.  O dicionário retornado mapeia
     os nomes das funções e das classes no nível do módulo para seus
     descritores.  Objetos aninhados são inseridos no dicionário filho
     de seus pais.  Como em readmodule, 'module' nomeia o módulo a ser
     lido e 'path' é anexado ao sys.path.  Se o módulo que está sendo
     lido for um pacote, o dicionário retornado terá uma chave
     ‘'__path__'’ cujo valor é uma lista que contém o caminho de
     pesquisa do pacote.

Adicionado na versão 3.7: Descritores para definições aninhadas.  Eles
são acessados através do novo atributo filho.  Cada um tem um novo
atributo pai.

Os descritores retornados por essas funções são instâncias das classes
Function e Class.  Não se espera que os usuários criem instâncias dessas
classes.

* Menu:

* Objetos Function::
* Objetos classe: Objetos classe<2>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/pyclbr.py


File: python.info,  Node: Objetos Function,  Next: Objetos classe<2>,  Up: pyclbr — Suporte a navegador de módulos do Python

5.32.7.1 Objetos Function
.........................

 -- Classe: pyclbr.Function

     Instâncias da classe ‘Function’ descrevem funções definidas por
     instruções def.  Elas têm os seguintes atributos:

      -- Atributo: file

          Nome do arquivo no qual a função está definida.

      -- Atributo: module

          O nome do módulo que define a função descrita.

      -- Atributo: name

          O nome da função.

      -- Atributo: lineno

          O número da linha no arquivo em que a definição é iniciada.

      -- Atributo: parent

          Para funções de nível superior, ‘None’.  Para funções
          aninhadas, o pai.

          Adicionado na versão 3.7.

      -- Atributo: children

          Um *note dicionário: 256. que mapeia nomes para descritores
          para funções e classes aninhadas.

          Adicionado na versão 3.7.

      -- Atributo: is_async

          ‘True’ para funções que são definidas com o prefixo *note
          async: 5d1.  Caso contrário, ‘False’.

          Adicionado na versão 3.10.


File: python.info,  Node: Objetos classe<2>,  Prev: Objetos Function,  Up: pyclbr — Suporte a navegador de módulos do Python

5.32.7.2 Objetos classe
.......................

 -- Classe: pyclbr.Class

     Instâncias da classe ‘Class’ descrevem classes definidas por
     instruções class.  Elas têm os mesmos atributos que *note
     Functions: 4923. e mais dois.

      -- Atributo: file

          Nome do arquivo no qual a classe está definida.

      -- Atributo: module

          O nome do módulo que define a classe descrita.

      -- Atributo: name

          O nome da classe.

      -- Atributo: lineno

          O número da linha no arquivo em que a definição é iniciada.

      -- Atributo: parent

          Para classes de nível superior, ‘None’.  Para classes
          aninhadas, o pai.

          Adicionado na versão 3.7.

      -- Atributo: children

          Um dicionário que mapeia nomes para descritores para funções e
          classes aninhadas.

          Adicionado na versão 3.7.

      -- Atributo: super

          Uma lista de objetos ‘Class’ que descreve as classes base
          imediatas da classe que está sendo descrita.  Classes nomeadas
          como superclasses, mas que não podem ser descobertas por *note
          readmodule_ex(): 82f. são listadas como uma string com o nome
          da classe em vez de como objetos de ‘Class’.

      -- Atributo: methods

          Um *note dicionário: 256. que mapeia nomes de métodos para
          números de linha.  Isso pode ser derivado do dicionário *note
          children: 4933. mais novo, mas permanece para compatibilidade
          retroativa.


File: python.info,  Node: py_compile — Compila arquivos fonte do Python,  Next: compileall — Compilar bibliotecas do Python para bytecode,  Prev: pyclbr — Suporte a navegador de módulos do Python,  Up: Serviços da Linguagem Python

5.32.8 ‘py_compile’ — Compila arquivos fonte do Python
------------------------------------------------------

'Código-fonte:' Lib/py_compile.py(1)

__________________________________________________________________

O módulo *note py_compile: b3. fornece uma função para gerar um arquivo
de bytecode a partir de um arquivo fonte, e outra função usada quando o
arquivo fonte do módulo é chamado como um script.

Embora nem sempre seja necessária, essa função pode ser útil ao instalar
módulos para uso compartilhado, especialmente se alguns usuários não
tiverem permissão para gravar os arquivos de cache de bytecodes no
diretório que contém o código-fonte.

 -- Exceção: py_compile.PyCompileError

     Exceção levantada quando ocorre um erro ao tentar compilar o
     arquivo.

 -- Função: py_compile.compile (file, cfile=None, dfile=None,
          doraise=False, optimize=-1,
          invalidation_mode=PycInvalidationMode.TIMESTAMP, quiet=0)

     Compila um arquivo fonte para bytecode e grava o arquivo de cache
     de bytecode.  O código-fonte é carregado a partir do arquivo
     chamado 'file'.  O bytecode é gravado em 'cfile', cujo padrão é o
     caminho PEP 3147(2)/ PEP 488(3), terminando em ‘.pyc’.  Por
     exemplo, se 'file' for ‘/foo/bar/baz.py’, o 'cfile' será
     padronizado como ‘/foo/bar/__pycache__/baz.cpython-32.pyc’ para o
     Python 3.2.  Se 'dfile' for especificado, ele será usado em vez de
     'file' como o nome do arquivo fonte do qual as linhas de origem são
     obtidas para exibição em tracebacks de exceção.  Se 'doraise' for
     verdadeiro, a *note PyCompileError: 4939. será levantada quando um
     erro for encontrado durante a compilação de 'file'.  Se 'doraise'
     for false (o padrão), uma string de erros será gravada em
     ‘sys.stderr’, mas nenhuma exceção será levantada.  Essa função
     retorna o caminho para o arquivo compilado em bytes, ou seja,
     qualquer valor 'cfile' foi usado.

     Os argumentos 'doraise' e 'quiet' determinam como os erros são
     tratados durante a compilação do arquivo.  Se 'quiet' for 0 ou 1 e
     'doraise' for false, o comportamento padrão será ativado: uma
     string de erros será gravada em ‘sys.stderr’ e a função retornará
     ‘None’ em vez de um caminho.  Se 'doraise' for verdadeiro, uma
     *note PyCompileError: 4939. será levantada.  No entanto, se 'quiet'
     for 2, nenhuma mensagem será escrita e 'doraise' não terá efeito.

     Se o caminho que 'cfile' se tornar (especificado ou computado
     explicitamente) for um link simbólico ou um arquivo não regular,
     *note FileExistsError: 1056. será levantada.  Isso serve como um
     aviso de que a importação transformará esses caminhos em arquivos
     regulares se for permitido gravar arquivos compilados em bytes
     nesses caminhos.  Esse é um efeito colateral da importação usando a
     renomeação de arquivo para colocar o arquivo final compilado em
     bytecode para evitar problemas de gravação simultânea de arquivos.

     'optimize' controla o nível de otimização e é passado para a função
     embutida *note compile(): 192.  O padrão de ‘-1’ seleciona o nível
     de otimização do interpretador atual.

     'invalidation_mode' deve ser um membro da enum *note
     PycInvalidationMode: 493a. e controla como o cache do bytecode
     gerado é invalidado em tempo de execução.  O padrão é *note
     PycInvalidationMode.CHECKED_HASH: 493b. se a variável de ambiente
     ‘SOURCE_DATE_EPOCH’ estiver configurada, caso contrário, o padrão é
     *note PycInvalidationMode.TIMESTAMP: 493c.

     Alterado na versão 3.2: Alterado o valor padrão de 'cfile' para
     ficar em conformidade com a PEP 3147(4).  O padrão anterior era
     'file' + ‘'c'’ (‘'o'’ se a otimização estivesse ativada).  Também
     foi adicionado o parâmetro 'optimize'.

     Alterado na versão 3.4: Alterado o código para usar *note
     importlib: 77. para a gravação do arquivo de cache do bytecode.
     Isso significa que a semântica de criação/gravação de arquivo agora
     corresponde ao que *note importlib: 77. faz, por exemplo,
     permissões, semântica de gravação e movimentação, etc.  Também foi
     adicionada a ressalva de que *note FileExistsError: 1056. é
     levantada se 'cfile' for um link simbólico ou um arquivo não
     regular.

     Alterado na versão 3.7: O parâmetro 'invalidation_mode' foi
     adicionado conforme especificado em PEP 552(5).  Se a variável de
     ambiente ‘SOURCE_DATE_EPOCH’ estiver configurada,
     'invalidation_mode' será forçado a *note
     PycInvalidationMode.CHECKED_HASH: 493b.

     Alterado na versão 3.7.2: A variável de ambiente
     ‘SOURCE_DATE_EPOCH’ não substitui mais o valor do argumento
     'invalidation_mode' e, em vez disso, determina seu valor padrão.

     Alterado na versão 3.8: O parâmetro 'quiet' foi adicionado.

 -- Classe: py_compile.PycInvalidationMode

     Uma enumeração de métodos possíveis que o interpretador pode usar
     para determinar se um arquivo de bytecode está atualizado com um
     arquivo fonte.  O arquivo ‘.pyc’ indica o modo de invalidação
     desejado em seu cabeçalho.  Veja *note Invalidação de bytecode em
     cache: 5ec. para obter mais informações sobre como o Python
     invalida arquivos ‘.pyc’ em tempo de execução.

     Adicionado na versão 3.7.

      -- Atributo: TIMESTAMP

          O arquivo ‘.pyc’ inclui o carimbo de data e hora e o tamanho
          do arquivo fonte, que o Python comparará com os metadados do
          arquivo fonte no tempo de execução para determinar se o
          arquivo ‘.pyc’ precisa ser gerado novamente.

      -- Atributo: CHECKED_HASH

          O arquivo ‘.pyc’ inclui um hash do conteúdo do arquivo fonte,
          com o qual o Python comparará o fonte em tempo de execução
          para determinar se o arquivo ‘.pyc’ precisa ser gerado
          novamente.

      -- Atributo: UNCHECKED_HASH

          Como *note CHECKED_HASH: 493b, o arquivo ‘.pyc’ inclui um hash
          do conteúdo do arquivo fonte.  No entanto, em tempo de
          execução, o Python presumirá que o arquivo ‘.pyc’ está
          atualizado e não validará o ‘.pyc’ contra o arquivo fonte.

          Essa opção é útil quando os ‘.pycs’ são atualizados por algum
          sistema externo ao Python, como um sistema de compilação.

* Menu:

* Interface de linha de comando: Interface de linha de comando<15>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/py_compile.py

   (2) https://peps.python.org/pep-3147/

   (3) https://peps.python.org/pep-0488/

   (4) https://peps.python.org/pep-3147/

   (5) https://peps.python.org/pep-0552/


File: python.info,  Node: Interface de linha de comando<15>,  Up: py_compile — Compila arquivos fonte do Python

5.32.8.1 Interface de linha de comando
......................................

Este módulo pode ser invocado como um script para compilar vários
arquivos fonte.  Os arquivos nomeados em 'filenames' são compilados e o
bytecode resultante é armazenado em cache da maneira normal.  Este
programa não pesquisa uma estrutura de diretórios para localizar
arquivos de origem; ele apenas compila arquivos nomeados explicitamente.
O status de saída será diferente de zero se um dos arquivos não puder
ser compilado.

 -- Option: <file> ... <fileN>
 -- Option: -

     Argumentos posicionais são arquivos para compilar.  Se ‘-’ for o
     único parâmetro, a lista de arquivos será obtida da entrada padrão.

 -- Option: -q, --quiet

     Suprime a saída de erros.

Alterado na versão 3.2: Adicionado suporte a ‘-’.

Alterado na versão 3.10: Adicionado suporte a *note -q: 4942.

Ver também
..........

Módulo *note compileall: 20.

     Utilitários para compilar todos os arquivos fontes Python em uma
     árvore de diretórios.


File: python.info,  Node: compileall — Compilar bibliotecas do Python para bytecode,  Next: dis — Disassembler de bytecode do Python,  Prev: py_compile — Compila arquivos fonte do Python,  Up: Serviços da Linguagem Python

5.32.9 ‘compileall’ — Compilar bibliotecas do Python para bytecode
------------------------------------------------------------------

'Código-fonte:' Lib/compileall.py(1)

__________________________________________________________________

Este módulo fornece algumas funções utilitárias para dar suporte à
instalação de bibliotecas Python.  Essas funções compilam arquivos fonte
Python em uma árvore de diretórios.  Este módulo pode ser usado para
criar os arquivos de bytecodes em cache no momento da instalação da
biblioteca, o que os torna disponíveis para uso mesmo por usuários que
não têm permissão de gravação nos diretórios da biblioteca.

*note Disponibilidade: 1ed8.: not WASI.

Este módulo não funciona ou não está disponível em WebAssembly.  Veja
*note Plataformas WebAssembly: 18f5. para mais informações.

* Menu:

* Uso na linha de comando: Uso na linha de comando<12>.
* Funções públicas::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/compileall.py


File: python.info,  Node: Uso na linha de comando<12>,  Next: Funções públicas,  Up: compileall — Compilar bibliotecas do Python para bytecode

5.32.9.1 Uso na linha de comando
................................

Este módulo pode funcionar como um script (usando ‘python -m
compileall’) para compilar fontes do Python.

 -- Option: directory ...
 -- Option: file ...

     Argumentos posicionais são arquivos a serem compilados ou
     diretórios que contêm arquivos de origem, percorridos
     recursivamente.  Se nenhum argumento for fornecido, comporta-se
     como se a linha de comando fosse ‘-l <DIRETÓRIOS DO SYS.PATH>’.

 -- Option: -l

     Não atua recursivamente em subdiretórios, apenas compila arquivos
     de código-fonte diretamente contidos nos diretórios nomeados ou
     implícitos.

 -- Option: -f

     Força a recompilação, mesmo que os carimbos de data e hora estejam
     atualizados.

 -- Option: -q

     Não imprime a lista de arquivos compilados.  Se passado uma vez, as
     mensagens de erro ainda serão impressas.  Se passado duas vezes
     (‘-qq’), toda a saída é suprimida.

 -- Option: -d destdir

     Diretório anexado ao caminho de cada arquivo que está sendo
     compilado.  Isso aparecerá nos tracebacks em tempo de compilação e
     também será compilado no arquivo de bytecode, onde será usado em
     tracebacks e outras mensagens nos casos em que o arquivo de origem
     não exista no momento em que o arquivo de bytecode for executado.

 -- Option: -s strip_prefix

     Remove o prefixo especificado dos caminhos gravados nos arquivos
     ‘.pyc’.  Caminhos são tornados relativos ao prefixo.

     Esta opção pode ser usada com ‘-p’, mas não com ‘-d’.

 -- Option: -p prepend_prefix

     Adiciona o prefixo fornecido aos caminhos registrados nos arquivos
     ‘.pyc’.  Use ‘-p /’ para tornar os caminhos absolutos.

     Esta opção pode ser usada com ‘-s’, mas não com ‘-d’.

 -- Option: -x regex

     A expressão regular ‘regex’ é usada para pesquisar o caminho
     completo para cada arquivo considerado para compilação e, se a
     ‘regex’ produzir uma correspondência, o arquivo será ignorado.

 -- Option: -i list

     Lê o arquivo ‘list’ e adicione cada linha que ele contém à lista de
     arquivos e diretórios a serem compilados.  Se ‘list’ for ‘-’, lê as
     linhas do ‘stdin’.

 -- Option: -b

     Escreve os arquivos de bytecode em seus locais e nomes legados, que
     podem sobrescrever arquivos de bytecode criados por outra versão do
     Python.  O padrão é gravar arquivos em seus locais e nomes do PEP
     3147(1), o que permite que arquivos de bytecode de várias versões
     do Python coexistam.

 -- Option: -r

     Controla o nível máximo de recursão para subdiretórios.  Se isso
     for dado, a opção ‘-l’ não será levada em consideração.  ‘python -m
     compileall <diretório> -r 0’ é equivalente a ‘python -m compileall
     <diretório> -l’.

 -- Option: -j N

     Usa 'N' workers para compilar os arquivos dentro do diretório
     especificado.  Se ‘0’ for usado, o resultado de *note
     os.process_cpu_count(): 1c4. será usado.

 -- Option: --invalidation-mode [timestamp|checked-hash|unchecked-hash]

     Controla como os arquivos de bytecode gerados são invalidados no
     tempo de execução.  O valor ‘timestamp’ significa que os arquivos
     ‘.pyc’ com o carimbo de data/hora do fonte e o tamanho incorporado
     serão gerados.  Os valores ‘selected-hash’ e ‘unchecked-hash’ fazem
     com que os pycs baseados em hash sejam gerados.  Arquivos pycs
     baseados em hash incorporam um hash do conteúdo do arquivo fonte em
     vez de um carimbo de data/hora.  Veja *note Invalidação de bytecode
     em cache: 5ec. para obter mais informações sobre como o Python
     valida os arquivos de cache do bytecode em tempo de execução.  O
     padrão é ‘timestamp’ se a variável de ambiente ‘SOURCE_DATE_EPOCH’
     não estiver configurada e ‘selected-hash’ se a variável de ambiente
     ‘SOURCE_DATE_EPOCH’ estiver configurada.

 -- Option: -o level

     Compila com o nível de otimização fornecido.  Pode ser usado várias
     vezes para compilar para vários níveis por vez (por exemplo,
     ‘compileall -o 1 -o 2’).

 -- Option: -e dir

     Ignora links simbólicos que apontam para fora do diretório
     especificado.

 -- Option: --hardlink-dupes

     Se dois arquivos ‘.pyc’ com nível de otimização diferente tiverem o
     mesmo conteúdo, usa links físicos para consolidar arquivos
     duplicados.

Alterado na versão 3.2: Adicionadas as opções ‘-i’, ‘-b’ e ‘-h’.

Alterado na versão 3.5: Adicionadas as opções ‘-j’, ‘-r’ e ‘-qq’.  A
opção ‘-q’ foi alterada para um valor multinível.  ‘-b’ sempre produzirá
um arquivo de bytecodes que termina em ‘.pyc’, nunca em ‘.pyo’.

Alterado na versão 3.7: Adicionada a opção ‘--invalidation-mode’.

Alterado na versão 3.9: Adicionadas as opções ‘-s’, ‘-p’, ‘-e’ e
‘--hardlink-dupes’.  Aumentado o limite de recursão padrão de 10 para
*note sys.getrecursionlimit(): 4c4.  Adicionada a possibilidade de
especificar a opção ‘-o’ várias vezes.

Não há opção na linha de comando para controlar o nível de otimização
usado pela função *note compile(): 192. porque o próprio interpretador
Python já fornece a opção: ‘python -O -m compileall’.

Da mesma forma, a função *note compile(): 192. respeita a configuração
*note sys.pycache_prefix: 9ac.  O cache do bytecode gerado somente será
útil se *note compile(): 192. for executado com o mesmo *note
sys.pycache_prefix: 9ac. (se houver) que será usado em tempo de
execução.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3147/


File: python.info,  Node: Funções públicas,  Prev: Uso na linha de comando<12>,  Up: compileall — Compilar bibliotecas do Python para bytecode

5.32.9.2 Funções públicas
.........................

 -- Função: compileall.compile_dir (dir,
          maxlevels=sys.getrecursionlimit(), ddir=None, force=False,
          rx=None, quiet=0, legacy=False, optimize=-1, workers=1,
          invalidation_mode=None, *, stripdir=None, prependdir=None,
          limit_sl_dest=None, hardlink_dupes=False)

     Desce recursivamente a árvore de diretórios nomeada por 'dir',
     compilando todos os arquivos ‘.py’ ao longo do caminho.  Retorna um
     valor verdadeiro se todos os arquivos forem compilados com êxito e
     um valor falso caso contrário.

     O parâmetro 'maxlevels' é usado para limitar a profundidade da
     recursão; o padrão é ‘sys.getrecursionlimit()’.

     Se 'ddir' for fornecido, ele será anexado ao caminho de cada
     arquivo que está sendo compilado para uso em tracebacks em tempo de
     compilação e também será compilado no arquivo de bytecode, onde
     será usado em tracebacks e outras mensagens nos casos em que o
     arquivo de origem não existe no momento em que o arquivo de
     bytecode é executado.

     Se 'force' for verdadeiro, os módulos serão recompilados, mesmo que
     os carimbos de data e hora estejam atualizados.

     Se 'rx' for fornecido, seu método ‘search’ será chamado no caminho
     completo para cada arquivo considerado para compilação e, se
     retornar um valor verdadeiro, o arquivo será ignorado.  Isso pode
     ser usado para excluir arquivos correspondendo a uma expressão
     regular, dado como um objeto *note re.Pattern: fbb.

     Se 'quiet' for ‘False’ ou ‘0’ (o padrão), os nomes dos arquivos e
     outras informações serão impressos com o padrão.  Definido como
     ‘1’, apenas os erros são impressos.  Definido como ‘2’, toda a
     saída é suprimida.

     Se 'legacy' for verdadeiro, os arquivos de bytecodes serão gravados
     em seus locais e nomes herdados, o que poderá sobrescrever arquivos
     de bytecodes criados por outra versão do Python.  O padrão é gravar
     arquivos em seus locais e nomes do PEP 3147(1), o que permite que
     arquivos de bytecodes de várias versões do Python coexistam.

     'optimize' especifica o nível de otimização para o compilador.  Ele
     é passado para a função embutida *note compile(): 192.  Aceita
     também uma sequência de níveis de otimização que levam a várias
     compilações de um arquivo ‘.py’ em uma chamada.

     O argumento 'workers' especifica quantos workers são usados para
     compilar arquivos em paralelo.  O padrão é não usar vários workers.
     Se a plataforma não puder usar vários workers e o argumento
     'workers' for fornecido, a compilação sequencial será usada como
     reserva.  Se 'workers' for 0, o número de núcleos no sistema é
     usado.  Se 'workers' for menor que ‘0’, a *note ValueError: 202.
     será levantada.

     'invalidation_mode' deve ser um membro de enum *note
     py_compile.PycInvalidationMode: 493a. e controla como os pycs
     gerados são invalidados em tempo de execução.

     Os argumentos 'stripdir', 'prependdir' e 'limit_sl_dest'
     correspondem às opções ‘-s’, ‘-p’ e ‘-e’ descrita acima.  eles
     podem ser especificados como ‘str’ ou *note os.PathLike: c6c.

     Se 'hardlink_dupes' for verdadeiro e dois arquivos ‘.pyc’ com nível
     de otimização diferente tiverem o mesmo conteúdo, usa links físicos
     para consolidar arquivos duplicados.

     Alterado na versão 3.2: Adicionado os parâmetros 'legacy' e
     'optimize'.

     Alterado na versão 3.5: Adicionado o parâmetro 'workers'.

     Alterado na versão 3.5: O parâmetro 'quiet' foi alterado para um
     valor multinível.

     Alterado na versão 3.5: O parâmetro 'legacy' grava apenas arquivos
     ‘.pyc’, não os arquivos ‘.pyo’, independentemente do valor de
     'optimize'.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

     Alterado na versão 3.7: O parâmetro 'invalidation_mode' foi
     adicionado.

     Alterado na versão 3.7.2: O valor padrão do parâmetro
     'invalidation_mode' é atualizado para ‘None’.

     Alterado na versão 3.8: A definição de 'workers' como 0 agora
     escolhe o número ideal de núcleos.

     Alterado na versão 3.9: Adicionados os argumentos 'stripdir',
     'prependdir', 'limit_sl_dest' e 'hardlink_dupes'.  O valor padrão
     de 'maxlevels' foi alterado de ‘10’ para ‘sys.getrecursionlimit()’

 -- Função: compileall.compile_file (fullname, ddir=None, force=False,
          rx=None, quiet=0, legacy=False, optimize=-1,
          invalidation_mode=None, *, stripdir=None, prependdir=None,
          limit_sl_dest=None, hardlink_dupes=False)

     Compila o arquivo com o caminho 'fullname'.  Retorna um valor
     verdadeiro se o arquivo compilado com êxito e um valor falso caso
     contrário.

     Se 'ddir' for fornecido, ele será anexado ao caminho do arquivo que
     está sendo compilado para uso em rastreamentos em tempo de
     compilação e também será compilado no arquivo de bytecode, onde
     será usado em tracebacks e outras mensagens nos casos em que o
     arquivo fonte não existe no momento em que o arquivo de bytecode é
     executado.

     Se 'rx' for fornecido, seu método ‘search’ passará o nome do
     caminho completo para o arquivo que está sendo compilado e, se
     retornar um valor verdadeiro, o arquivo não será compilado e ‘True’
     será retornado.  Isso pode ser usado para excluir arquivos
     correspondendo a uma expressão regular, dado como um objeto *note
     re.Pattern: fbb.

     Se 'quiet' for ‘False’ ou ‘0’ (o padrão), os nomes dos arquivos e
     outras informações serão impressos com o padrão.  Definido como
     ‘1’, apenas os erros são impressos.  Definido como ‘2’, toda a
     saída é suprimida.

     Se 'legacy' for verdadeiro, os arquivos de bytecodes serão gravados
     em seus locais e nomes herdados, o que poderá sobrescrever arquivos
     de bytecodes criados por outra versão do Python.  O padrão é gravar
     arquivos em seus locais e nomes do PEP 3147(2), o que permite que
     arquivos de bytecodes de várias versões do Python coexistam.

     'optimize' especifica o nível de otimização para o compilador.  Ele
     é passado para a função embutida *note compile(): 192.  Aceita
     também uma sequência de níveis de otimização que levam a várias
     compilações de um arquivo ‘.py’ em uma chamada.

     'invalidation_mode' deve ser um membro de enum *note
     py_compile.PycInvalidationMode: 493a. e controla como os pycs
     gerados são invalidados em tempo de execução.

     Os argumentos 'stripdir', 'prependdir' e 'limit_sl_dest'
     correspondem às opções ‘-s’, ‘-p’ e ‘-e’ descrita acima.  eles
     podem ser especificados como ‘str’ ou *note os.PathLike: c6c.

     Se 'hardlink_dupes' for verdadeiro e dois arquivos ‘.pyc’ com nível
     de otimização diferente tiverem o mesmo conteúdo, usa links físicos
     para consolidar arquivos duplicados.

     Adicionado na versão 3.2.

     Alterado na versão 3.5: O parâmetro 'quiet' foi alterado para um
     valor multinível.

     Alterado na versão 3.5: O parâmetro 'legacy' grava apenas arquivos
     ‘.pyc’, não os arquivos ‘.pyo’, independentemente do valor de
     'optimize'.

     Alterado na versão 3.7: O parâmetro 'invalidation_mode' foi
     adicionado.

     Alterado na versão 3.7.2: O valor padrão do parâmetro
     'invalidation_mode' é atualizado para ‘None’.

     Alterado na versão 3.9: Adicionados os argumentos 'stripdir',
     'prependdir', 'limit_sl_dest' e 'hardlink_dupes'.

 -- Função: compileall.compile_path (skip_curdir=True, maxlevels=0,
          force=False, quiet=0, legacy=False, optimize=-1,
          invalidation_mode=None)

     Compila Byte para bytecodes todos os arquivos ‘.py’ encontrados ao
     longo de ‘sys.path’.  Retorna um valor verdadeiro se todos os
     arquivos forem compilados com êxito e um valor falso caso
     contrário.

     Se 'skip_curdir' for verdadeiro (o padrão), o diretório atual não
     será incluído na pesquisa.  Todos os outros parâmetros são passados
     para a função *note compile_dir(): b38.  Note que, ao contrário das
     outras funções de compilação, ‘maxlevels’ é padronizado como ‘0’.

     Alterado na versão 3.2: Adicionado os parâmetros 'legacy' e
     'optimize'.

     Alterado na versão 3.5: O parâmetro 'quiet' foi alterado para um
     valor multinível.

     Alterado na versão 3.5: O parâmetro 'legacy' grava apenas arquivos
     ‘.pyc’, não os arquivos ‘.pyo’, independentemente do valor de
     'optimize'.

     Alterado na versão 3.7: O parâmetro 'invalidation_mode' foi
     adicionado.

     Alterado na versão 3.7.2: O valor padrão do parâmetro
     'invalidation_mode' é atualizado para ‘None’.

Para forçar uma recompilação de todos os arquivos ‘.py’ no subdiretório
‘Lib/’ e todos os seus subdiretórios:

     import compileall

     compileall.compile_dir('Lib/', force=True)

     # Efetua a mesma compilação, excluindo arquivos em diretórios .svn.
     import re
     compileall.compile_dir('Lib/', rx=re.compile(r'[/\\][.]svn'), force=True)

     # Objetos pathlib.Path também podem ser usados.
     import pathlib
     compileall.compile_dir(pathlib.Path('Lib/'), force=True)

Ver também
..........

Módulo *note py_compile: b3.

     Compila para bytecode um único arquivo fonte.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3147/

   (2) https://peps.python.org/pep-3147/


File: python.info,  Node: dis — Disassembler de bytecode do Python,  Next: pickletools — Ferramentas para desenvolvedores pickle,  Prev: compileall — Compilar bibliotecas do Python para bytecode,  Up: Serviços da Linguagem Python

5.32.10 ‘dis’ — Disassembler de bytecode do Python
--------------------------------------------------

'Código-fonte:' Lib/dis.py(1)

__________________________________________________________________

O módulo *note dis: 38. oferece suporte à análise de *note bytecode:
187. do CPython, desmontando-o.  O bytecode do CPython que o módulo leva
como entrada é definido no arquivo ‘Include/opcode.h’ e usado pelo
compilador e pelo interpretador.

O bytecode é um detalhe de implementação do interpretador CPython.  Não
há garantias de que bytecodes não serão adicionados, removidos ou
alterados entre as versões do Python.  O uso deste módulo não deve ser
considerado que funcionará em todas as VMs do Python ou mesmo versões do
Python.

Alterado na versão 3.6: Cada instrução ocupa 2 bytes.  Anteriormente, o
número de bytes variava de acordo com a instrução.

Alterado na versão 3.10: O argumento para instruções de pulo, tratamento
de exceção e laço é agora o deslocamento em instruções, ao invés de em
bytes.

Alterado na versão 3.11: Algumas instruções vêm acompanhadas de uma ou
mais entradas de cache em linha, as quais assumem a forma de instruções
*note CACHE: 6f9.  Tais instruções são escondidas por padrão, mas podem
ser visualizadas passando ‘show_caches=True’ para qualquer utilidade do
*note dis: 38.  Além disso, o interpretador agora adapta o bytecode para
especializá-lo a diferentes condições de tempo de execução.  O bytecode
adaptativo pode ser visualizado passando ‘adaptive=True’.

Alterado na versão 3.12: O argumento de um pulo é o deslocamento da
instrução alvo relativo à instrução que aparece imediatamente após as
entradas *note CACHE: 6f9. da instrução de pulo.

Como consequência, a presença de instruções *note CACHE: 6f9. é
transparente para pulos adiante, mas precisa ser considerada ao lidar
com pulos para trás.

Alterado na versão 3.13: A saída agora mostra rótulos lógicos ao invés
dos deslocamentos das instruções para alvos de pulos e de tratadores de
exceções.  A opção de linha de comando ‘-O’ e o argumento ‘show_offsets’
foram adicionados.

Exemplo: Dada a função ‘myfunc()’:

     def myfunc(alist):
         return len(alist)

o comando a seguir pode ser usado para mostrar a desconstrução de
‘myfunc()’:

     >>> dis.dis(myfunc)
       2           RESUME                   0

       3           LOAD_GLOBAL              1 (len + NULL)
                   LOAD_FAST                0 (alist)
                   CALL                     1
                   RETURN_VALUE

(O “2” é o número da linha).

* Menu:

* Interface de linha de comando: Interface de linha de comando<16>.
* Análise de bytecode::
* Funções de análise::
* Instruções em bytecode do Python::
* Opcode collections::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/dis.py


File: python.info,  Node: Interface de linha de comando<16>,  Next: Análise de bytecode,  Up: dis — Disassembler de bytecode do Python

5.32.10.1 Interface de linha de comando
.......................................

O módulo *note dis: 38. pode ser invocado como um script na linha de
comando:

     python -m dis [-h] [-C] [-O] [infile]

As seguintes opções são aceitas:

 -- Option: -h, --help

     Exibe o modo de uso e sai.

 -- Option: -C, --show-caches

     Mostra caches em linha

     Adicionado na versão 3.13.

 -- Option: -O, --show-offsets

     Mostra os deslocamentos das instruções

     Adicionado na versão 3.13.

Se ‘infile’ for especificada, o seu código desmontado será escrito no
stdout.  Caso contrário, será feito o desmonte da compilação do
código-fonte recebido do stdin.


File: python.info,  Node: Análise de bytecode,  Next: Funções de análise,  Prev: Interface de linha de comando<16>,  Up: dis — Disassembler de bytecode do Python

5.32.10.2 Análise de bytecode
.............................

Adicionado na versão 3.4.

A API de análise de bytecode permite que partes do código Python sejam
encapsuladas em um objeto *note Bytecode: f61. que facilite o acesso aos
detalhes do código compilado.

 -- Classe: dis.Bytecode (x, *, first_line=None, current_offset=None,
          show_caches=False, adaptive=False, show_offsets=False)

     Analisa o bytecode correspondente a uma função, um gerador, um
     gerador assíncrono, uma corrotina, um método, uma string de
     código-fonte, ou um objeto de código (conforme retornado por *note
     compile(): 192.).

     Esta é um invólucro de conveniência que encapsula muitas das
     funções listadas abaixo, principalmente a *note get_instructions():
     1d9, já que iterar sobre sobre uma instância de *note Bytecode:
     f61. produz operações bytecode como instâncias de *note
     Instruction: 1da.

     Se 'first_line' não for ‘None’, ele indica o número de linha que
     deve ser reportado para a primeira linha de código-fonte no código
     desmontado.  Caso contrário, a informação de linha de código-fonte
     (se houver) é extraída diretamente da desconstrução do objeto de
     código.

     Se 'current_offset' não for ‘None’, ele é um deslocamento em
     instruções no código desconstruído.  Definir este argumento
     significa que o *note dis(): f62. vai mostrar um marcador de
     “instrução atual” sobre o opcode especificado.

     Se 'show_caches' for ‘True’, o *note dis(): f62. vai exibir
     entradas de cache em linha usadas pelo interpretador para
     especializar o bytecode.

     Se 'adaptive' for ‘True’, o *note dis(): f62. vai exibir bytecode
     especializado que pode ser diferente do bytecode original.

     Se 'show_offsets' for ‘True’, o *note dis(): f62. vai incluir
     deslocamentos em instruções na saída.

      -- Método: classmethod from_traceback (tb, *, show_caches=False)

          Constrói uma instância de *note Bytecode: f61. a partir do
          traceback fornecido, definindo 'current_offset' apontando para
          a instrução responsável pela exceção.

      -- Dado: codeobj

          O objeto de código compilado.

      -- Dado: first_line

          A primeira linha de código-fonte do objeto de código (caso
          disponível).

      -- Método: dis ()

          Retorna uma visualização formatada das operações em bytecode
          (as mesmas que seriam impressas pela *note dis.dis(): b46, mas
          retornadas como uma string multilinha).

      -- Método: info ()

          Retorna uma string multilinha formatada com informação
          detalhada sobre o objeto de código, como *note code_info():
          127a.

     Alterado na versão 3.7: Este método agora lida com objetos de
     corrotina e de gerador assíncrono.

     Alterado na versão 3.11: Adicionados os parâmetros 'show_caches' e
     'adaptive'.

Exemplo:

     >>> bytecode = dis.Bytecode(myfunc)
     >>> for instr in bytecode:
     ...     print(instr.opname)
     ...
     RESUME
     LOAD_GLOBAL
     LOAD_FAST
     CALL
     RETURN_VALUE


File: python.info,  Node: Funções de análise,  Next: Instruções em bytecode do Python,  Prev: Análise de bytecode,  Up: dis — Disassembler de bytecode do Python

5.32.10.3 Funções de análise
............................

O módulo *note dis: 38. também define as seguintes funções que convertem
a entrada diretamente para a saída desejada.  Elas podem ser úteis se
somente uma única operação está sendo feita, de forma que o objeto de
análise intermediário não é útil:

 -- Função: dis.code_info (x)

     Retorna uma string multilinha formatada com informação detalhada
     sobre o objeto de código correspondente à função, gerador, gerador
     assíncrono, corrotina, método, string de código-fonte ou objeto de
     código fornecido.

     Observe que o conteúdo exato de strings de informação de código são
     altamente dependentes da implementação e podem mudar de forma
     arbitrária através de VMs Python ou lançamentos do Python.

     Adicionado na versão 3.2.

     Alterado na versão 3.7: Este método agora lida com objetos de
     corrotina e de gerador assíncrono.

 -- Função: dis.show_code (x, *, file=None)

     Imprime no arquivo 'file' (ou ‘sys.stdout’ caso 'file' não seja
     especificado) informações detalhadas sobre o objeto de código
     correspondente à função, método, string de código-fonte fornecido.

     Este é um atalho conveniente para ‘print(code_info(x), file=file)’,
     destinado à exploração interativa no prompt do interpretador.

     Adicionado na versão 3.2.

     Alterado na versão 3.4: Adicionado o parâmetro 'file'.

 -- Função: dis.dis (x=None, *, file=None, depth=None,
          show_caches=False, adaptive=False)

     Desmonta o objeto 'x'.  'x' pode denotar um módulo, uma classe, um
     método, uma função, um gerador, um gerador assíncrono, uma
     corrotina, um objeto de código, uma string de código-fonte ou uma
     sequência de bytes contendo bytecode bruto.  Para um módulo, são
     desmontadas todas as funções.  Para uma classe, são desmontados
     todos os métodos (incluindo métodos de classe e estáticos).  Para
     um objeto de código ou sequência de bytecodes brutos, é impressa
     uma linha para cada instrução de bytecode.  Além disso, objetos de
     código aninhados são desmontados recursivamente.  Estes podem
     incluir expressões geradoras, funções aninhadas, corpos de classes
     aninhadas, e objetos de código usados para *note escopos de
     anotação: 188.  Strings são compiladas para objetos de código com a
     função embutida *note compile(): 192. antes de serem desmontadas.
     Se nenhum objeto for fornecido, o último traceback é desmontado.

     O resultado é escrito como texto no arquivo 'file' caso tenha sido
     fornecido como argumento, ou para ‘sys.stdout’ caso contrário.

     A profundidade máxima de recursão é limitada por 'depth' a menos
     que seja ‘None’.  ‘depth=0’ significa não fazer recursão.

     Se 'show_caches' for ‘True’, essa função vai exibir entradas de
     cache em linha usadas pelo interpretador para especializar o
     bytecode.

     Se 'adaptive' for ‘True’, essa função vai exibir bytecode
     especializado que pode ser diferente do bytecode original.

     Alterado na versão 3.4: Adicionado o parâmetro 'file'.

     Alterado na versão 3.7: Foi implementada a desmontagem recursiva, e
     adicionado o parâmetro 'depth'.

     Alterado na versão 3.7: Este método agora lida com objetos de
     corrotina e de gerador assíncrono.

     Alterado na versão 3.11: Adicionados os parâmetros 'show_caches' e
     'adaptive'.

 -- Função: dis.distb (tb=None, *, file=None, show_caches=False,
          adaptive=False, show_offset=False)

     Desmonta a função no topo da pilha de um traceback, usando o último
     traceback caso nenhum tenha sido passado.  A instrução que causou a
     exceção é indicada.

     O resultado é escrito como texto no arquivo 'file' caso tenha sido
     fornecido como argumento, ou para ‘sys.stdout’ caso contrário.

     Alterado na versão 3.4: Adicionado o parâmetro 'file'.

     Alterado na versão 3.11: Adicionados os parâmetros 'show_caches' e
     'adaptive'.

     Alterado na versão 3.13: Foi adicionado o parâmetro 'show_offsets'.

 -- Função: dis.disassemble (code, lasti=-1, *, file=None,
          show_caches=False, adaptive=False)

 -- Função: disco(code, lasti=-1, *, file=None, show_caches=False,
          adaptive=False,

 -- Função: show_offsets=False)

     Desmonta um objeto de código, indicando a última instrução se
     'lasti' tiver sido fornecido.  A saída é dividida em colunas da
     seguinte forma:

       1. o número da linha, para a primeira instrução de cada linha

       2. a instrução atual, indicada por ‘-->’,

       3. um rótulo da instrução, indicado com ‘>>’,

       4. o endereço da instrução

       5. o nome do código da operação,

       6. os parâmetros da operação, e

       7. a interpretação dos parâmetros, em parênteses.

     A interpretação dos parâmetros reconhece nomes de variáveis locais
     e globais, valores de constantes, alvos de ramificações, e
     operadores de comparação.

     O resultado é escrito como texto no arquivo 'file' caso tenha sido
     fornecido como argumento, ou para ‘sys.stdout’ caso contrário.

     Alterado na versão 3.4: Adicionado o parâmetro 'file'.

     Alterado na versão 3.11: Adicionados os parâmetros 'show_caches' e
     'adaptive'.

     Alterado na versão 3.13: Foi adicionado o parâmetro 'show_offsets'.

 -- Função: dis.get_instructions (x, *, first_line=None,
          show_caches=False, adaptive=False)

     Retorna um iterador sobre as instruções na função, método, string
     de código-fonte ou objeto de código fornecido.

     O iterador gera uma série de tuplas nomeadas *note Instruction:
     1da. contendo detalhes de cada operação no código fornecido.

     Se 'first_line' não for ‘None’, ele indica o número de linha que
     deve ser reportado para a primeira linha de código-fonte no código
     desmontado.  Caso contrário, a informação de linha de código-fonte
     (se houver) é extraída diretamente da desconstrução do objeto de
     código.

     O parâmetro 'adaptive' funciona assim como na função *note dis():
     38.

     Adicionado na versão 3.4.

     Alterado na versão 3.11: Adicionados os parâmetros 'show_caches' e
     'adaptive'.

     Alterado na versão 3.13: O parâmetro 'show_caches' foi
     descontinuado e não tem mais efeito.  O iterador gera as instâncias
     da *note Instruction: 1da. com o campo 'cache_info' populado
     (independentemente do valor de 'show_caches') e não gera mais items
     separados para as entradas de cache.

 -- Função: dis.findlinestarts (code)

     Essa função geradora usa o método *note co_lines(): 2fb. do *note
     objeto de código: 1d2. 'code' para encontrar as posições que
     correspondem aos inícios de cada linha do código-fonte.  Elas são
     geradas em pares ‘(offset, lineno)’.

     Alterado na versão 3.6: Números de linhas podem ser decrescentes.
     Antes, eles eram sempre crescentes.

     Alterado na versão 3.10: O método *note co_lines(): 2fb. da PEP
     626(1) é usado ao invés dos atributos *note co_firstlineno: 20d4. e
     *note co_lnotab: 2e0. do *note objeto de código: 1d2.

     Alterado na versão 3.13: Números de linha podem ser ‘None’ para
     bytecode que não corresponde a um código-fonte.

 -- Função: dis.findlabels (code)

     Detecta todas as posições na string de bytecode compilado bruto
     'code' que são alvos de pulos, e as retorna em uma lista.

 -- Função: dis.stack_effect (opcode, oparg=None, *, jump=None)

     Calcula o efeito que o 'opcode' com argumento 'oparg' tem na pilha.

     Se a operação tiver um alvo de pulo e 'jump' for ‘True’, *note
     stack_effect(): f64. vai retornar o efeito na pilha de realizar o
     pulo.  Se 'jump' for ‘False’, ela vai retornar o efeito na pilha de
     não pular.  E se 'jump' for ‘None’ (o padrão), vai retornar o
     efeito máximo na pilha dentre os dois casos.

     Adicionado na versão 3.4.

     Alterado na versão 3.8: Adicionado o parâmetro 'jump'.

     Alterado na versão 3.13: Se ‘oparg’ for omitido (ou ‘None’), agora
     é retornado o efeito na pilha para o caso ‘oparg=0’.  Anteriormente
     isso era um erro caso o opcode usasse o seu argumento.  Além disso,
     agora não é mais um erro passar um inteiro como ‘oparg’ quando o
     ‘opcode’ não o usa; o ‘oparg’ nesse caso é ignorado.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0626/


File: python.info,  Node: Instruções em bytecode do Python,  Next: Opcode collections,  Prev: Funções de análise,  Up: dis — Disassembler de bytecode do Python

5.32.10.4 Instruções em bytecode do Python
..........................................

A função *note get_instructions(): 1d9. e a classe *note Bytecode: f61.
fornecem detalhes de instruções de bytecode como instâncias de *note
Instruction: 1da.:

 -- Classe: dis.Instruction

     Detalhes de uma operação em bytecode

      -- Dado: opcode

          código numérico da operação, correspondendo aos valores dos
          opcodes listados abaixo e aos valores dos bytecodes nas *note
          Opcode collections: 496e.

      -- Dado: opname

          nome legível por humanos para a operação

      -- Dado: baseopcode

          código numérico para a operação base caso a operação seja
          especializada; caso contrário, igual ao *note opcode: 496d.

      -- Dado: baseopname

          nome legível por humanos para a operação base caso a operação
          seja especializada; caso contrário, igual ao *note opname:
          4972.

      -- Dado: arg

          argumento numérico para a operação (se houver), caso contrário
          ‘None’

      -- Dado: oparg

          apelido para *note arg: 4973.

      -- Dado: argval

          valor resolvido do argumento (se houver), caso contrário
          ‘None’

      -- Dado: argrepr

          descrição legível por humanos do argumento da operação (se
          houver), caso contrário uma string vazia.

      -- Dado: offset

          índice de início da operação dentro da sequência de bytecodes

      -- Dado: start_offset

          índice de início da operação dentro da sequência de bytecodes,
          incluindo as operações de ‘EXTENDED_ARG’ prefixadas, caso
          presentes; caso contrário, igual a *note offset: 4977.

      -- Dado: cache_offset

          índice de início das entradas de cache que seguem a operação

      -- Dado: end_offset

          índice de fim das entradas de cache que seguem a operação

      -- Dado: starts_line

          ‘True’ se esse opcode inicia uma linha, ‘False’ caso contrário

      -- Dado: line_number

          linha de código-fonte associada a esse opcode (se houver),
          senão ‘None’

      -- Dado: is_jump_target

          ‘True’ se algum outro código pula para cá, senão ‘False’

      -- Dado: jump_target

          índice do bytecode que é alvo do pulo caso essa seja uma
          operação de pulo, caso contrário ‘None’

      -- Dado: positions

          objeto *note dis.Positions: 46f1. contendo os pontos de início
          e fim cobertos por esta instrução.

      -- Dado: cache_info

          Informações sobre as entradas de cache desta instrução, como
          tripletos do formato ‘(nome, tamanho, dados)’, onde ‘nome’ e
          ‘tamanho’ descrevem o formato do cache e dados são o conteúdo
          do cache.  ‘cache_info’ é ‘None’ se a instrução não tiver
          caches.

     Adicionado na versão 3.4.

     Alterado na versão 3.11: Adicionado o campo ‘positions’.

     Alterado na versão 3.13: Alterado o campo ‘starts_line’.

     Adicionados os campos ‘start_offset’, ‘cache_offset’, ‘end_offset’,
     ‘baseopname’, ‘baseopcode’, ‘jump_target’, ‘oparg’, ‘line_number’ e
     ‘cache_info’.

 -- Classe: dis.Positions

     Caso a informação não esteja disponível, alguns campos podem ser
     ‘None’.

      -- Dado: lineno

      -- Dado: end_lineno

      -- Dado: col_offset

      -- Dado: end_col_offset

     Adicionado na versão 3.11.

O compilador de Python atualmente gera as seguintes instruções de
bytecode.

'Instruções gerais'

A seguir, vamos usar ‘STACK’ para nos referirmos à pilha do
interpretador, e vamos descrever operações nela como se ela fosse uma
lista do Python.  Nessa linguagem, ‘STACK[-1]’ é o topo da pilha.

 -- Opcode: NOP

     Código para não fazer nada.  Usado como espaço reservado pelo
     otimizador de bytecode, e para gerar eventos de rastreamento de
     linha.

 -- Opcode: POP_TOP

     Remove o item no topo da pilha:

          STACK.pop()

 -- Opcode: END_FOR

     Remove o item no topo da pilha.  Equivalente a ‘POP_TOP’.  Usado
     como limpeza ao final de laços, o que explica o nome.

     Adicionado na versão 3.12.

 -- Opcode: END_SEND

     Implementa ‘del STACK[-2]’.  Usado como limpeza quando um gerador
     termina.

     Adicionado na versão 3.12.

 -- Opcode: COPY (i)

     Coloca o i-ésimo item no topo da pilha sem removê-lo da sua posição
     original:

          assert i > 0
          STACK.append(STACK[-i])

     Adicionado na versão 3.11.

 -- Opcode: SWAP (i)

     Troca o topo da pilha de lugar com o i-ésimo elemento.

          STACK[-i], STACK[-1] = STACK[-1], STACK[-i]

     Adicionado na versão 3.11.

 -- Opcode: CACHE

     Ao invés de ser uma instrução de fato, este opcode é usado para
     demarcar espaço extra para o interpretador armazenar dados úteis
     diretamente no próprio bytecode.  É escondido automaticamente por
     todas as utilidades do ‘dis’, mas pode ser visualizado com
     ‘show_caches=True’.

     Do ponto de vista lógico, este espaço faz parte da instrução
     anterior.  Muitos opcodes esperam ser seguidos por um número exato
     de caches, e instruem o interpretador a pulá-los em tempo de
     execução.

     Caches populados podem se parecer com qualquer instrução, de forma
     que ler ou modificar bytecode adaptativo bruto contendo dados
     “quickened” requer muito cuidado.

     Adicionado na versão 3.11.

'Operações unárias'

Operações unárias tiram o topo da pilha, aplicam a operação, e põem o
resultado de volta na pilha.

 -- Opcode: UNARY_NEGATIVE

     Implementa ‘STACK[-1] = -STACK[-1]’.

 -- Opcode: UNARY_NOT

     Implementa ‘STACK[-1] = not STACK[-1]’.

     Alterado na versão 3.13: Essa instrução agora requer que o operando
     seja exatamente do tipo *note bool: 468.

 -- Opcode: UNARY_INVERT

     Implementa ‘STACK[-1] = ~STACK[-1]’.

 -- Opcode: GET_ITER

     Implementa ‘STACK[-1] = iter(STACK[-1])’.

 -- Opcode: GET_YIELD_FROM_ITER

     Se ‘STACK[-1]’ for um *note iterador gerador: bf9. ou um objeto
     *note corrotina: 491, nada acontece.  Caso contrário, implementa
     ‘STACK[-1] = iter(STACK[-1])’.

     Adicionado na versão 3.5.

 -- Opcode: TO_BOOL

     Implementa ‘STACK[-1] = bool(STACK[-1])’.

     Adicionado na versão 3.13.

'Operações binárias e internas'

Operações binárias removem os dois itens no topo da pilha (‘STACK[-1]’ e
‘STACK[-2]’).  A operação é realizada, e o resultado é colocado de volta
na pilha.

As operações internas são como as operações binárias, só que a operação
é feita internamente caso suportado por ‘STACK[-2]’, e o ‘STACK[-1]’
resultante pode ser (mas não necessariamente é) o ‘STACK[-2]’ original.

 -- Opcode: BINARY_OP (op)

     Implementa os operadores binários e locais (depende do valor de
     'op'):

          rhs = STACK.pop()
          lhs = STACK.pop()
          STACK.append(lhs op rhs)

     Adicionado na versão 3.11.

 -- Opcode: BINARY_SUBSCR

     Implementa:

          key = STACK.pop()
          container = STACK.pop()
          STACK.append(container[key])

 -- Opcode: STORE_SUBSCR

     Implementa:

          key = STACK.pop()
          container = STACK.pop()
          value = STACK.pop()
          container[key] = value

 -- Opcode: DELETE_SUBSCR

     Implementa:

          key = STACK.pop()
          container = STACK.pop()
          del container[key]

 -- Opcode: BINARY_SLICE

     Implementa:

          end = STACK.pop()
          start = STACK.pop()
          container = STACK.pop()
          STACK.append(container[start:end])

     Adicionado na versão 3.12.

 -- Opcode: STORE_SLICE

     Implementa:

          end = STACK.pop()
          start = STACK.pop()
          container = STACK.pop()
          value = STACK.pop()
          container[start:end] = value

     Adicionado na versão 3.12.

'Opcodes para corrotinas'

 -- Opcode: GET_AWAITABLE (where)

     Implementa ‘STACK[-1] = get_awaitable(STACK[-1])’, onde
     ‘get_awaitable(o)’ retorna ‘o’ se ‘o’ for um objeto de corrotina ou
     um gerador com o sinalizador *note CO_ITERABLE_COROUTINE: 4702, ou
     então resolve ‘o.__await__’.

          Se o operando ‘where’ não for zero, ele indica onde a
          instrução ocorre:

             * ‘1’: Após uma chamada a ‘__aenter__’

             * ‘2’: Após uma chamada a ‘__aexit__’

     Adicionado na versão 3.5.

     Alterado na versão 3.11: Anteriormente, esta instrução não tinha um
     oparg.

 -- Opcode: GET_AITER

     Implementa ‘STACK[-1] = STACK[-1].__aiter__()’.

     Adicionado na versão 3.5.

     Alterado na versão 3.7: Não é mais aceitado que o ‘__aiter__’
     retorne objetos aguardáveis.

 -- Opcode: GET_ANEXT

     Implementa ‘STACK.append(get_awaitable(STACK[-1].__anext__()))’.
     Veja ‘GET_AWAITABLE’ para o significado de ‘get_awaitable’.

     Adicionado na versão 3.5.

 -- Opcode: END_ASYNC_FOR

     Termina um laço *note async for: aba.  Trata exceções levantadas ao
     aguardar um item seguinte.  A pilha contém o iterável async em
     ‘STACK[-2]’ e a exceção levantada em ‘STACK[-1]’.  Ambos são
     retirados.  Se a exceção não for *note StopAsyncIteration: 1ba5,
     ela é re-levantada.

     Adicionado na versão 3.8.

     Alterado na versão 3.11: A representação da exceção na pilha
     consiste agora de um item, ao invés de três.

 -- Opcode: CLEANUP_THROW

     Trata uma exceção levantada durante um chamada a *note throw():
     4f8. ou *note close(): 15b9. através do quadro atual.  Se
     ‘STACK[-1]’ for uma instância de *note StopIteration: c15, remove
     três valores da pilha e põe de volta o seu membro ‘value’.  Caso
     contrário, re-levanta ‘STACK[-1]’.

     Adicionado na versão 3.12.

 -- Opcode: BEFORE_ASYNC_WITH

     Resolve os métodos especiais ‘__aenter__’ e ‘__aexit__’ de
     ‘STACK[-1]’.  Põe na pilha ‘__aexit__’ e o resultado de
     ‘__aenter__()’:

          STACK.extend((__aexit__, __aenter__())

     Adicionado na versão 3.5.

'Opcodes genéricos'

 -- Opcode: SET_ADD (i)

     Implementa:

          item = STACK.pop()
          set.add(STACK[-i], item)

     Usado para implementar compreensões de conjuntos.

 -- Opcode: LIST_APPEND (i)

     Implementa:

          item = STACK.pop()
          list.append(STACK[-i], item)

     Usado para implementar compreensões de lista.

 -- Opcode: MAP_ADD (i)

     Implementa:

          value = STACK.pop()
          key = STACK.pop()
          dict.__setitem__(STACK[-i], key, value)

     Usado para implementar compreensões de dicionário.

     Adicionado na versão 3.1.

     Alterado na versão 3.8: O valor do mapa é ‘STACK[-1]’, e a sua
     chave, ‘STACK[-2]’.  Antes, eles estavam ao contrário.

Para as instruções *note SET_ADD: 4991, *note LIST_APPEND: 4992. e *note
MAP_ADD: abb, o valor ou par chave/valor é removido da pilha, mas o
objeto de contêiner continua na pilha para que ele esteja disponível
para as iterações seguintes do laço.

 -- Opcode: RETURN_VALUE

     Retorna ‘STACK[-1]’ para quem chamou a função.

 -- Opcode: RETURN_CONST (consti)

     Retorna ‘co_consts[consti]’ para quem chamou a função.

     Adicionado na versão 3.12.

 -- Opcode: YIELD_VALUE

     Gera ‘STACK.pop()’ a partir de um *note gerador: 109a.

     Alterado na versão 3.11: oparg definido como sendo a profundidade
     da pilha.

     Alterado na versão 3.12: oparg definido como sendo a profundidade
     do bloco exception, para o fechamento eficiente de geradores.

     Alterado na versão 3.13: oparg é ‘1’ caso esta instrução seja parte
     de um yield-from ou await, e ‘0’ caso contrário.

 -- Opcode: SETUP_ANNOTATIONS

     Verifica se ‘__annotations__’ está definido em ‘locals()’ e, se não
     estiver, é inicializado como um ‘dict’ vazio.  Este opcode é
     emitido somente se o corpo de uma classe ou módulo contém *note
     anotações de variáveis: d79. estaticamente.

     Adicionado na versão 3.6.

 -- Opcode: POP_EXCEPT

     Remove o valor no topo da pilha, o qual é usado para restaurar o
     estado de exceção.

     Alterado na versão 3.11: A representação da exceção na pilha
     consiste agora de um item, ao invés de três.

 -- Opcode: RERAISE

     Re-levanta a exceção que se encontra no topo da pilha.  Se o oparg
     não for zero, remove um valor adicional do topo da pilha, o qual é
     atribuído ao *note f_lasti: 88c. do quadro atual.

     Adicionado na versão 3.9.

     Alterado na versão 3.11: A representação da exceção na pilha
     consiste agora de um item, ao invés de três.

 -- Opcode: PUSH_EXC_INFO

     Remove um valor do topo da pilha.  Põe a exceção atual no topo da
     pilha.  Põe de volta no topo da pilha o valor que foi removido
     inicialmente.  Usado em tratadores de exceções.

     Adicionado na versão 3.11.

 -- Opcode: CHECK_EXC_MATCH

     Verifica correspondências de exceções em ‘except’.  Testa de
     ‘STACK[-2]’ é uma exceção que corresponde a ‘STACK[-1]’.  Remove
     ‘STACK[-1]’ do topo da pilha, e põe no seu lugar o resultado
     booleano do teste.

     Adicionado na versão 3.11.

 -- Opcode: CHECK_EG_MATCH

     Verifica correspondências de exceções em ‘except*’.  Aplica
     ‘split(STACK[-1])’ no grupo de exceções que representa ‘STACK[-2]’.

     No caso de uma correspondência, remove dois itens do topo da pilha
     e põe nela o subgrupo que falhou a correspondência (‘None’ caso a
     correspondência tenha sido total), seguido pelo subgrupo que
     correspondeu.  Quando não há correspondência nenhuma, remove um
     item (o tipo da correspondência) e põe ‘None’ no seu lugar.

     Adicionado na versão 3.11.

 -- Opcode: WITH_EXCEPT_START

     Chama a função na posição 4 da pilha com argumentos (tipo, val, tb)
     representando a exceção no topo da pilha.  Usado para implementar a
     chamada ‘context_manager.__exit__(*exc_info())’ quando uma exceção
     ocorreu em uma instrução *note with: 5d2.

     Adicionado na versão 3.9.

     Alterado na versão 3.11: A função ‘__exit__’ fica agora na posição
     4 pilha, ao invés da 7.  A representação da exceção pilha consiste
     agora de um item, não três.

 -- Opcode: LOAD_ASSERTION_ERROR

     Põe *note AssertionError: 6a9. no topo da pilha.  Usado pela
     instrução *note assert: 96f.

     Adicionado na versão 3.9.

 -- Opcode: LOAD_BUILD_CLASS

     Põe a função ‘builtins.__build_class__()’ no topo da pilha.  Ela
     será chamada posteriormente para construir uma classe.

 -- Opcode: BEFORE_WITH

     Este opcode realiza várias operações antes do início de um bloco
     “with”.  Primeiro, ele carrega o *note __exit__(): 1344. do
     gerenciador de contexto e o coloca no topo da pilha para ser usado
     posteriormente pela *note WITH_EXCEPT_START: 4995.  Então, o método
     *note __enter__(): 5c8. é chamado.  Por fim, o resultado do
     ‘__enter__()’ é posto no topo da pilha.

     Adicionado na versão 3.11.

 -- Opcode: GET_LEN

     Executa ‘STACK.append(len(STACK[-1]))’.  Usado em instruções *note
     match: 810. onde a comparação com a estrutura do padrão é
     necessária.

     Adicionado na versão 3.10.

 -- Opcode: MATCH_MAPPING

     Se ‘STACK[-1]’ for uma instância de *note collections.abc.Mapping:
     8d0. (ou, de forma mais técnica: se tiver o sinalizador *note
     Py_TPFLAGS_MAPPING: 19e3. definido no seu *note tp_flags: 19fd.),
     põe ‘True’ no topo da pilha.  Caso contrário, põe ‘False’.

     Adicionado na versão 3.10.

 -- Opcode: MATCH_SEQUENCE

     Se ‘STACK[-1]’ for uma instância de *note collections.abc.Sequence:
     1204. e 'não' for uma instância de *note str: 44c./*note bytes:
     1c2./*note bytearray: 2ea. (ou, de forma mais técnica: se tiver o
     sinalizador *note Py_TPFLAGS_SEQUENCE: 19e4. definido no seu *note
     tp_flags: 19fd.), põe ‘True’ no topo da pilha.  Caso contrário, põe
     ‘False’.

     Adicionado na versão 3.10.

 -- Opcode: MATCH_KEYS

     ‘STACK[-1]’ é uma tupla de chaves de um mapeamento, e ‘STACK[-2]’ é
     o sujeito de uma correspondência.  Se ‘STACK[-2]’ contiver todas as
     chaves em ‘STACK[-1]’, põe no topo da pilha um *note tuple: 370.
     contendo os valores correspondentes.  Caso contrário, põe ‘None’.

     Adicionado na versão 3.10.

     Alterado na versão 3.11: Anteriormente, essa instrução também
     colocava na pilha um valor booleano indicando sucesso (‘True’) ou
     falha (‘False’).

 -- Opcode: STORE_NAME (namei)

     Implementa ‘name = STACK.pop()’.  'namei' é o índice de 'name' no
     atributo *note co_names: 20d3. do *note objeto de código: 1d2.  O
     compilador tenta usar *note STORE_FAST: 17e5. ou *note
     STORE_GLOBAL: 499b. se possível.

 -- Opcode: DELETE_NAME (namei)

     Implementa ‘del name’, onde 'namei' é o índice no atributo *note
     co_names: 20d3. do *note objeto de código: 1d2.

 -- Opcode: UNPACK_SEQUENCE (count)

     Desempacota ‘STACK[-1]’ em 'count' valores individuais, os quais
     são postos na pilha da direita para a esquerda.  Requer que haja
     exatamente 'count' valores:

          assert(len(STACK[-1]) == count)
          STACK.extend(STACK.pop()[:-count-1:-1])

 -- Opcode: UNPACK_EX (counts)

     Implementa atribuição com um alvo estrelado: desempacota o iterável
     ‘STACK[-1]’ em valores individuais, sendo que pode haver menos
     valores do que itens no iterável: um dos novos valores será a lista
     de todos os itens que sobraram.

     A quantidade de valores antes e após o valor que será a lista é
     limitada a 255.

     A quantidade de valores antes do valor lista é passada no argumento
     do opcode.  A quantidade de valores após a lista, se houver, é
     passada usando um ‘EXTENDED_ARG’.  A consequência é que o argumento
     pode ser visto como um valor de dois bytes, onde o byte “de baixo”
     de 'counts' é a quantidade de valores antes do valor lista, e o
     byte “de cima” de 'counts', a quantidade após.

     Os valores extraídos são postos na pilha da direita para a
     esquerda, ou seja, após executar ‘a, *b, c = d’ os valores serão
     armazenados como ‘STACK.extend((a, b, c))’.

 -- Opcode: STORE_ATTR (namei)

     Implementa:

          obj = STACK.pop()
          value = STACK.pop()
          obj.name = value

     onde 'namei' é o índice do nome no *note co_names: 20d3. do *note
     objeto de código: 1d2.

 -- Opcode: DELETE_ATTR (namei)

     Implementa:

          obj = STACK.pop()
          del obj.name

     onde 'namei' é o índice do nome no *note co_names: 20d3. do *note
     objeto de código: 1d2.

 -- Opcode: STORE_GLOBAL (namei)

     Funciona como o *note STORE_NAME: 499a, mas o nome é armazenado com
     um nome global.

 -- Opcode: DELETE_GLOBAL (namei)

     Funciona como o *note DELETE_NAME: 499c, mas deleta um nome global.

 -- Opcode: LOAD_CONST (consti)

     Põe ‘co_consts[consti]’ no topo da pilha.

 -- Opcode: LOAD_NAME (namei)

     Põe no topo da pilha o valor associado a ‘co_names[namei]’.  O nome
     é procurado nos locais, nos globais, e então nos embutidos.

 -- Opcode: LOAD_LOCALS

     Envia uma referência ao dicionário local para a pilha.  Isso é
     usado para preparar dicionários de espaço de nomes para *note
     LOAD_FROM_DICT_OR_DEREF: 4e6. e *note LOAD_FROM_DICT_OR_GLOBALS:
     4e7.

     Adicionado na versão 3.12.

 -- Opcode: LOAD_FROM_DICT_OR_GLOBALS (i)

     Extrai um mapeamento da pilha e procura o valor de
     ‘co_names[namei]’.  Se o nome não for encontrado, procura-o nas
     variáveis globais e, em seguida, nas variáveis embutidas,
     semelhante a *note LOAD_GLOBAL: 17dc.  Isso é usado para carregar
     variáveis globais em *note escopos de anotação: 188. dentro dos
     corpos de classe.

     Adicionado na versão 3.12.

 -- Opcode: BUILD_TUPLE (count)

     Creates a tuple consuming 'count' items from the stack, and pushes
     the resulting tuple onto the stack:

          if count == 0:
              value = ()
          else:
              value = tuple(STACK[-count:])
              STACK = STACK[:-count]

          STACK.append(value)

 -- Opcode: BUILD_LIST (count)

     Works as *note BUILD_TUPLE: 49a2, but creates a list.

 -- Opcode: BUILD_SET (count)

     Works as *note BUILD_TUPLE: 49a2, but creates a set.

 -- Opcode: BUILD_MAP (count)

     Pushes a new dictionary object onto the stack.  Pops ‘2 * count’
     items so that the dictionary holds 'count' entries: ‘{...,
     STACK[-4]: STACK[-3], STACK[-2]: STACK[-1]}’.

     Alterado na versão 3.5: The dictionary is created from stack items
     instead of creating an empty dictionary pre-sized to hold 'count'
     items.

 -- Opcode: BUILD_CONST_KEY_MAP (count)

     The version of *note BUILD_MAP: 17d5. specialized for constant
     keys.  Pops the top element on the stack which contains a tuple of
     keys, then starting from ‘STACK[-2]’, pops 'count' values to form
     values in the built dictionary.

     Adicionado na versão 3.6.

 -- Opcode: BUILD_STRING (count)

     Concatenates 'count' strings from the stack and pushes the
     resulting string onto the stack.

     Adicionado na versão 3.6.

 -- Opcode: LIST_EXTEND (i)

     Implementa:

          seq = STACK.pop()
          list.extend(STACK[-i], seq)

     Used to build lists.

     Adicionado na versão 3.9.

 -- Opcode: SET_UPDATE (i)

     Implementa:

          seq = STACK.pop()
          set.update(STACK[-i], seq)

     Used to build sets.

     Adicionado na versão 3.9.

 -- Opcode: DICT_UPDATE (i)

     Implementa:

          map = STACK.pop()
          dict.update(STACK[-i], map)

     Used to build dicts.

     Adicionado na versão 3.9.

 -- Opcode: DICT_MERGE (i)

     Like *note DICT_UPDATE: 49a7. but raises an exception for duplicate
     keys.

     Adicionado na versão 3.9.

 -- Opcode: LOAD_ATTR (namei)

     If the low bit of ‘namei’ is not set, this replaces ‘STACK[-1]’
     with ‘getattr(STACK[-1], co_names[namei>>1])’.

     If the low bit of ‘namei’ is set, this will attempt to load a
     method named ‘co_names[namei>>1]’ from the ‘STACK[-1]’ object.
     ‘STACK[-1]’ is popped.  This bytecode distinguishes two cases: if
     ‘STACK[-1]’ has a method with the correct name, the bytecode pushes
     the unbound method and ‘STACK[-1]’.  ‘STACK[-1]’ will be used as
     the first argument (‘self’) by *note CALL: 707. or *note CALL_KW:
     17d6. when calling the unbound method.  Otherwise, ‘NULL’ and the
     object returned by the attribute lookup are pushed.

     Alterado na versão 3.12: If the low bit of ‘namei’ is set, then a
     ‘NULL’ or ‘self’ is pushed to the stack before the attribute or
     unbound method respectively.

 -- Opcode: LOAD_SUPER_ATTR (namei)

     This opcode implements *note super(): 4db, both in its
     zero-argument and two-argument forms (e.g.  ‘super().method()’,
     ‘super().attr’ and ‘super(cls, self).method()’, ‘super(cls,
     self).attr’).

     It pops three values from the stack (from top of stack down):

        * ‘self’: the first argument to the current method

        * ‘cls’: the class within which the current method was defined

        * the global ‘super’

     With respect to its argument, it works similarly to *note
     LOAD_ATTR: 4de, except that ‘namei’ is shifted left by 2 bits
     instead of 1.

     The low bit of ‘namei’ signals to attempt a method load, as with
     *note LOAD_ATTR: 4de, which results in pushing ‘NULL’ and the
     loaded method.  When it is unset a single value is pushed to the
     stack.

     The second-low bit of ‘namei’, if set, means that this was a
     two-argument call to *note super(): 4db. (unset means
     zero-argument).

     Adicionado na versão 3.12.

 -- Opcode: COMPARE_OP (opname)

     Performs a Boolean operation.  The operation name can be found in
     ‘cmp_op[opname >> 5]’.  If the fifth-lowest bit of ‘opname’ is set
     (‘opname & 16’), the result should be coerced to ‘bool’.

     Alterado na versão 3.13: The fifth-lowest bit of the oparg now
     indicates a forced conversion to *note bool: 468.

 -- Opcode: IS_OP (invert)

     Performs ‘is’ comparison, or ‘is not’ if ‘invert’ is 1.

     Adicionado na versão 3.9.

 -- Opcode: CONTAINS_OP (invert)

     Performs ‘in’ comparison, or ‘not in’ if ‘invert’ is 1.

     Adicionado na versão 3.9.

 -- Opcode: IMPORT_NAME (namei)

     Imports the module ‘co_names[namei]’.  ‘STACK[-1]’ and ‘STACK[-2]’
     are popped and provide the 'fromlist' and 'level' arguments of
     *note __import__(): 8da.  The module object is pushed onto the
     stack.  The current namespace is not affected: for a proper import
     statement, a subsequent *note STORE_FAST: 17e5. instruction
     modifies the namespace.

 -- Opcode: IMPORT_FROM (namei)

     Loads the attribute ‘co_names[namei]’ from the module found in
     ‘STACK[-1]’.  The resulting object is pushed onto the stack, to be
     subsequently stored by a *note STORE_FAST: 17e5. instruction.

 -- Opcode: JUMP_FORWARD (delta)

     Increments bytecode counter by 'delta'.

 -- Opcode: JUMP_BACKWARD (delta)

     Decrements bytecode counter by 'delta'.  Checks for interrupts.

     Adicionado na versão 3.11.

 -- Opcode: JUMP_BACKWARD_NO_INTERRUPT (delta)

     Decrements bytecode counter by 'delta'.  Does not check for
     interrupts.

     Adicionado na versão 3.11.

 -- Opcode: POP_JUMP_IF_TRUE (delta)

     If ‘STACK[-1]’ is true, increments the bytecode counter by 'delta'.
     ‘STACK[-1]’ is popped.

     Alterado na versão 3.11: The oparg is now a relative delta rather
     than an absolute target.  This opcode is a pseudo-instruction,
     replaced in final bytecode by the directed versions
     (forward/backward).

     Alterado na versão 3.12: This is no longer a pseudo-instruction.

     Alterado na versão 3.13: Essa instrução agora requer que o operando
     seja exatamente do tipo *note bool: 468.

 -- Opcode: POP_JUMP_IF_FALSE (delta)

     If ‘STACK[-1]’ is false, increments the bytecode counter by
     'delta'.  ‘STACK[-1]’ is popped.

     Alterado na versão 3.11: The oparg is now a relative delta rather
     than an absolute target.  This opcode is a pseudo-instruction,
     replaced in final bytecode by the directed versions
     (forward/backward).

     Alterado na versão 3.12: This is no longer a pseudo-instruction.

     Alterado na versão 3.13: Essa instrução agora requer que o operando
     seja exatamente do tipo *note bool: 468.

 -- Opcode: POP_JUMP_IF_NOT_NONE (delta)

     If ‘STACK[-1]’ is not ‘None’, increments the bytecode counter by
     'delta'.  ‘STACK[-1]’ is popped.

     Adicionado na versão 3.11.

     Alterado na versão 3.12: This is no longer a pseudo-instruction.

 -- Opcode: POP_JUMP_IF_NONE (delta)

     If ‘STACK[-1]’ is ‘None’, increments the bytecode counter by
     'delta'.  ‘STACK[-1]’ is popped.

     Adicionado na versão 3.11.

     Alterado na versão 3.12: This is no longer a pseudo-instruction.

 -- Opcode: FOR_ITER (delta)

     ‘STACK[-1]’ is an *note iterator: 1ac.  Call its *note __next__():
     1310. method.  If this yields a new value, push it on the stack
     (leaving the iterator below it).  If the iterator indicates it is
     exhausted then the byte code counter is incremented by 'delta'.

     Alterado na versão 3.12: Up until 3.11 the iterator was popped when
     it was exhausted.

 -- Opcode: LOAD_GLOBAL (namei)

     Loads the global named ‘co_names[namei>>1]’ onto the stack.

     Alterado na versão 3.11: If the low bit of ‘namei’ is set, then a
     ‘NULL’ is pushed to the stack before the global variable.

 -- Opcode: LOAD_FAST (var_num)

     Pushes a reference to the local ‘co_varnames[var_num]’ onto the
     stack.

     Alterado na versão 3.12: This opcode is now only used in situations
     where the local variable is guaranteed to be initialized.  It
     cannot raise *note UnboundLocalError: 157f.

 -- Opcode: LOAD_FAST_LOAD_FAST (var_nums)

     Pushes references to ‘co_varnames[var_nums >> 4]’ and
     ‘co_varnames[var_nums & 15]’ onto the stack.

     Adicionado na versão 3.13.

 -- Opcode: LOAD_FAST_CHECK (var_num)

     Pushes a reference to the local ‘co_varnames[var_num]’ onto the
     stack, raising an *note UnboundLocalError: 157f. if the local
     variable has not been initialized.

     Adicionado na versão 3.12.

 -- Opcode: LOAD_FAST_AND_CLEAR (var_num)

     Pushes a reference to the local ‘co_varnames[var_num]’ onto the
     stack (or pushes ‘NULL’ onto the stack if the local variable has
     not been initialized) and sets ‘co_varnames[var_num]’ to ‘NULL’.

     Adicionado na versão 3.12.

 -- Opcode: STORE_FAST (var_num)

     Stores ‘STACK.pop()’ into the local ‘co_varnames[var_num]’.

 -- Opcode: STORE_FAST_STORE_FAST (var_nums)

     Stores ‘STACK[-1]’ into ‘co_varnames[var_nums >> 4]’ and
     ‘STACK[-2]’ into ‘co_varnames[var_nums & 15]’.

     Adicionado na versão 3.13.

 -- Opcode: STORE_FAST_LOAD_FAST (var_nums)

     Stores ‘STACK.pop()’ into the local ‘co_varnames[var_nums >> 4]’
     and pushes a reference to the local ‘co_varnames[var_nums & 15]’
     onto the stack.

     Adicionado na versão 3.13.

 -- Opcode: DELETE_FAST (var_num)

     Deletes local ‘co_varnames[var_num]’.

 -- Opcode: MAKE_CELL (i)

     Creates a new cell in slot ‘i’.  If that slot is nonempty then that
     value is stored into the new cell.

     Adicionado na versão 3.11.

 -- Opcode: LOAD_DEREF (i)

     Loads the cell contained in slot ‘i’ of the “fast locals” storage.
     Pushes a reference to the object the cell contains on the stack.

     Alterado na versão 3.11: ‘i’ is no longer offset by the length of
     *note co_varnames: 20ce.

 -- Opcode: LOAD_FROM_DICT_OR_DEREF (i)

     Pops a mapping off the stack and looks up the name associated with
     slot ‘i’ of the “fast locals” storage in this mapping.  If the name
     is not found there, loads it from the cell contained in slot ‘i’,
     similar to *note LOAD_DEREF: 49b2.  This is used for loading *note
     closure variables: 20d1. in class bodies (which previously used
     ‘LOAD_CLASSDEREF’) and in *note annotation scopes: 188. within
     class bodies.

     Adicionado na versão 3.12.

 -- Opcode: STORE_DEREF (i)

     Stores ‘STACK.pop()’ into the cell contained in slot ‘i’ of the
     “fast locals” storage.

     Alterado na versão 3.11: ‘i’ is no longer offset by the length of
     *note co_varnames: 20ce.

 -- Opcode: DELETE_DEREF (i)

     Empties the cell contained in slot ‘i’ of the “fast locals”
     storage.  Used by the *note del: 18a7. statement.

     Adicionado na versão 3.2.

     Alterado na versão 3.11: ‘i’ is no longer offset by the length of
     *note co_varnames: 20ce.

 -- Opcode: COPY_FREE_VARS (n)

     Copia as ‘n’ *note variáveis livres (de clausura): 20d1. do
     fechamento para o quadro.  Remove a necessidade de código especial
     do lado do chamador ao chamar closures.

     Adicionado na versão 3.11.

 -- Opcode: RAISE_VARARGS (argc)

     Raises an exception using one of the 3 forms of the ‘raise’
     statement, depending on the value of 'argc':

        * 0: ‘raise’ (re-raise previous exception)

        * 1: ‘raise STACK[-1]’ (raise exception instance or type at
          ‘STACK[-1]’)

        * 2: ‘raise STACK[-2] from STACK[-1]’ (raise exception instance
          or type at ‘STACK[-2]’ with ‘__cause__’ set to ‘STACK[-1]’)

 -- Opcode: CALL (argc)

     Calls a callable object with the number of arguments specified by
     ‘argc’.  On the stack are (in ascending order):

        * The callable

        * ‘self’ or ‘NULL’

        * The remaining positional arguments

     ‘argc’ is the total of the positional arguments, excluding ‘self’.

     ‘CALL’ pops all arguments and the callable object off the stack,
     calls the callable object with those arguments, and pushes the
     return value returned by the callable object.

     Adicionado na versão 3.11.

     Alterado na versão 3.13: The callable now always appears at the
     same position on the stack.

     Alterado na versão 3.13: Calls with keyword arguments are now
     handled by *note CALL_KW: 17d6.

 -- Opcode: CALL_KW (argc)

     Calls a callable object with the number of arguments specified by
     ‘argc’, including one or more named arguments.  On the stack are
     (in ascending order):

        * The callable

        * ‘self’ or ‘NULL’

        * The remaining positional arguments

        * The named arguments

        * A *note tuple: 370. of keyword argument names

     ‘argc’ is the total of the positional and named arguments,
     excluding ‘self’.  The length of the tuple of keyword argument
     names is the number of named arguments.

     ‘CALL_KW’ pops all arguments, the keyword names, and the callable
     object off the stack, calls the callable object with those
     arguments, and pushes the return value returned by the callable
     object.

     Adicionado na versão 3.13.

 -- Opcode: CALL_FUNCTION_EX (flags)

     Calls a callable object with variable set of positional and keyword
     arguments.  If the lowest bit of 'flags' is set, the top of the
     stack contains a mapping object containing additional keyword
     arguments.  Before the callable is called, the mapping object and
     iterable object are each “unpacked” and their contents passed in as
     keyword and positional arguments respectively.  ‘CALL_FUNCTION_EX’
     pops all arguments and the callable object off the stack, calls the
     callable object with those arguments, and pushes the return value
     returned by the callable object.

     Adicionado na versão 3.6.

 -- Opcode: PUSH_NULL

     Pushes a ‘NULL’ to the stack.  Used in the call sequence to match
     the ‘NULL’ pushed by *note LOAD_METHOD: c39. for non-method calls.

     Adicionado na versão 3.11.

 -- Opcode: MAKE_FUNCTION

     Pushes a new function object on the stack built from the code
     object at ‘STACK[-1]’.

     Alterado na versão 3.10: Flag value ‘0x04’ is a tuple of strings
     instead of dictionary

     Alterado na versão 3.11: Qualified name at ‘STACK[-1]’ was removed.

     Alterado na versão 3.13: Extra function attributes on the stack,
     signaled by oparg flags, were removed.  They now use *note
     SET_FUNCTION_ATTRIBUTE: 49b6.

 -- Opcode: SET_FUNCTION_ATTRIBUTE (flag)

     Sets an attribute on a function object.  Expects the function at
     ‘STACK[-1]’ and the attribute value to set at ‘STACK[-2]’; consumes
     both and leaves the function at ‘STACK[-1]’.  The flag determines
     which attribute to set:

        * ‘0x01’ a tuple of default values for positional-only and
          positional-or-keyword parameters in positional order

        * ‘0x02’ a dictionary of keyword-only parameters’ default values

        * ‘0x04’ a tuple of strings containing parameters’ annotations

        * ‘0x08’ a tuple containing cells for free variables, making a
          closure

     Adicionado na versão 3.13.

 -- Opcode: BUILD_SLICE (argc)

     Pushes a slice object on the stack.  'argc' must be 2 or 3.  If it
     is 2, implements:

          end = STACK.pop()
          start = STACK.pop()
          STACK.append(slice(start, end))

     if it is 3, implements:

          step = STACK.pop()
          end = STACK.pop()
          start = STACK.pop()
          STACK.append(slice(start, end, step))

     See the *note slice(): 469. built-in function for more information.

 -- Opcode: EXTENDED_ARG (ext)

     Prefixes any opcode which has an argument too big to fit into the
     default one byte.  'ext' holds an additional byte which act as
     higher bits in the argument.  For each opcode, at most three
     prefixal ‘EXTENDED_ARG’ are allowed, forming an argument from
     two-byte to four-byte.

 -- Opcode: CONVERT_VALUE (oparg)

     Convert value to a string, depending on ‘oparg’:

          value = STACK.pop()
          result = func(value)
          STACK.append(result)

        * ‘oparg == 1’: call *note str(): 44c. on 'value'

        * ‘oparg == 2’: call *note repr(): 800. on 'value'

        * ‘oparg == 3’: call *note ascii(): 142d. on 'value'

     Used for implementing formatted string literals (f-strings).

     Adicionado na versão 3.13.

 -- Opcode: FORMAT_SIMPLE

     Formats the value on top of stack:

          value = STACK.pop()
          result = value.__format__("")
          STACK.append(result)

     Used for implementing formatted string literals (f-strings).

     Adicionado na versão 3.13.

 -- Opcode: FORMAT_WITH_SPEC

     Formats the given value with the given format spec:

          spec = STACK.pop()
          value = STACK.pop()
          result = value.__format__(spec)
          STACK.append(result)

     Used for implementing formatted string literals (f-strings).

     Adicionado na versão 3.13.

 -- Opcode: MATCH_CLASS (count)

     ‘STACK[-1]’ is a tuple of keyword attribute names, ‘STACK[-2]’ is
     the class being matched against, and ‘STACK[-3]’ is the match
     subject.  'count' is the number of positional sub-patterns.

     Pop ‘STACK[-1]’, ‘STACK[-2]’, and ‘STACK[-3]’.  If ‘STACK[-3]’ is
     an instance of ‘STACK[-2]’ and has the positional and keyword
     attributes required by 'count' and ‘STACK[-1]’, push a tuple of
     extracted attributes.  Otherwise, push ‘None’.

     Adicionado na versão 3.10.

     Alterado na versão 3.11: Anteriormente, essa instrução também
     colocava na pilha um valor booleano indicando sucesso (‘True’) ou
     falha (‘False’).

 -- Opcode: RESUME (context)

     A no-op.  Performs internal tracing, debugging and optimization
     checks.

     The ‘context’ oparand consists of two parts.  The lowest two bits
     indicate where the ‘RESUME’ occurs:

        * ‘0’ The start of a function, which is neither a generator,
          coroutine nor an async generator

        * ‘1’ Depois de uma expressão ‘yield’

        * ‘2’ After a ‘yield from’ expression

        * ‘3’ Depois de uma expressão ‘await’

     The next bit is ‘1’ if the RESUME is at except-depth ‘1’, and ‘0’
     otherwise.

     Adicionado na versão 3.11.

     Alterado na versão 3.13: The oparg value changed to include
     information about except-depth

 -- Opcode: RETURN_GENERATOR

     Create a generator, coroutine, or async generator from the current
     frame.  Used as first opcode of in code object for the above
     mentioned callables.  Clear the current frame and return the newly
     created generator.

     Adicionado na versão 3.11.

 -- Opcode: SEND (delta)

     Equivalent to ‘STACK[-1] = STACK[-2].send(STACK[-1])’.  Used in
     ‘yield from’ and ‘await’ statements.

     If the call raises *note StopIteration: c15, pop the top value from
     the stack, push the exception’s ‘value’ attribute, and increment
     the bytecode counter by 'delta'.

     Adicionado na versão 3.11.

 -- Opcode: HAVE_ARGUMENT

     This is not really an opcode.  It identifies the dividing line
     between opcodes in the range [0,255] which don’t use their argument
     and those that do (‘< HAVE_ARGUMENT’ and ‘>= HAVE_ARGUMENT’,
     respectively).

     If your application uses pseudo instructions or specialized
     instructions, use the *note hasarg: 29e. collection instead.

     Alterado na versão 3.6: Now every instruction has an argument, but
     opcodes ‘< HAVE_ARGUMENT’ ignore it.  Before, only opcodes ‘>=
     HAVE_ARGUMENT’ had an argument.

     Alterado na versão 3.12: Pseudo instructions were added to the
     *note dis: 38. module, and for them it is not true that comparison
     with ‘HAVE_ARGUMENT’ indicates whether they use their arg.

     Descontinuado desde a versão 3.13: Use *note hasarg: 29e. instead.

 -- Opcode: CALL_INTRINSIC_1

     Calls an intrinsic function with one argument.  Passes ‘STACK[-1]’
     as the argument and sets ‘STACK[-1]’ to the result.  Used to
     implement functionality that is not performance critical.

     The operand determines which intrinsic function is called:

     Operand                                 Descrição
                                             
     --------------------------------------------------------------------------------
                                             
     ‘INTRINSIC_1_INVALID’                   Not valid
                                             
                                             
     ‘INTRINSIC_PRINT’                       Prints the argument to standard out.
                                             Used in the REPL.
                                             
                                             
     ‘INTRINSIC_IMPORT_STAR’                 Performs ‘import *’ for the named
                                             module.
                                             
                                             
     ‘INTRINSIC_STOPITERATION_ERROR’         Extracts the return value from a
                                             ‘StopIteration’ exception.
                                             
                                             
     ‘INTRINSIC_ASYNC_GEN_WRAP’              Wraps an async generator value
                                             
                                             
     ‘INTRINSIC_UNARY_POSITIVE’              Performs the unary ‘+’ operation
                                             
                                             
     ‘INTRINSIC_LIST_TO_TUPLE’               Converts a list to a tuple
                                             
                                             
     ‘INTRINSIC_TYPEVAR’                     Cria um *note typing.TypeVar: 15d.
                                             
                                             
     ‘INTRINSIC_PARAMSPEC’                   Cria um *note typing.ParamSpec: 15e.
                                             
                                             
     ‘INTRINSIC_TYPEVARTUPLE’                Cria um
                                             *note typing.TypeVarTuple: 15f.
                                             
                                             
     ‘INTRINSIC_SUBSCRIPT_GENERIC’           Returns *note typing.Generic: 15d7.
                                             subscripted with the argument
                                             
                                             
     ‘INTRINSIC_TYPEALIAS’                   Creates a
                                             *note typing.TypeAliasType: 455.;
                                             used in the *note type: 438.
                                             statement.  The argument is a tuple
                                             of the type alias’s name, type
                                             parameters, and value.
                                             

     Adicionado na versão 3.12.

 -- Opcode: CALL_INTRINSIC_2

     Calls an intrinsic function with two arguments.  Used to implement
     functionality that is not performance critical:

          arg2 = STACK.pop()
          arg1 = STACK.pop()
          result = intrinsic2(arg1, arg2)
          STACK.append(result)

     The operand determines which intrinsic function is called:

     Operand                                      Descrição
                                                  
     -------------------------------------------------------------------------------------
                                                  
     ‘INTRINSIC_2_INVALID’                        Not valid
                                                  
                                                  
     ‘INTRINSIC_PREP_RERAISE_STAR’                Calculates the
                                                  *note ExceptionGroup: 1b6. to raise
                                                  from a ‘try-except*’.
                                                  
                                                  
     ‘INTRINSIC_TYPEVAR_WITH_BOUND’               Creates a *note typing.TypeVar: 15d.
                                                  with a bound.
                                                  
                                                  
     ‘INTRINSIC_TYPEVAR_WITH_CONSTRAINTS’         Creates a *note typing.TypeVar: 15d.
                                                  with constraints.
                                                  
                                                  
     ‘INTRINSIC_SET_FUNCTION_TYPE_PARAMS’         Sets the ‘__type_params__’ attribute
                                                  of a function.
                                                  

     Adicionado na versão 3.12.

'Pseudo-instructions'

These opcodes do not appear in Python bytecode.  They are used by the
compiler but are replaced by real opcodes or removed before bytecode is
generated.

 -- Opcode: SETUP_FINALLY (target)

     Set up an exception handler for the following code block.  If an
     exception occurs, the value stack level is restored to its current
     state and control is transferred to the exception handler at
     ‘target’.

 -- Opcode: SETUP_CLEANUP (target)

     Like ‘SETUP_FINALLY’, but in case of an exception also pushes the
     last instruction (‘lasti’) to the stack so that ‘RERAISE’ can
     restore it.  If an exception occurs, the value stack level and the
     last instruction on the frame are restored to their current state,
     and control is transferred to the exception handler at ‘target’.

 -- Opcode: SETUP_WITH (target)

     Like ‘SETUP_CLEANUP’, but in case of an exception one more item is
     popped from the stack before control is transferred to the
     exception handler at ‘target’.

     This variant is used in *note with: 5d2. and *note async with: 5d5.
     constructs, which push the return value of the context manager’s
     *note __enter__(): 5c8. or *note __aenter__(): 215e. to the stack.

 -- Opcode: POP_BLOCK

     Marks the end of the code block associated with the last
     ‘SETUP_FINALLY’, ‘SETUP_CLEANUP’ or ‘SETUP_WITH’.

 -- Opcode: JUMP

 -- Opcode: JUMP_NO_INTERRUPT

     Undirected relative jump instructions which are replaced by their
     directed (forward/backward) counterparts by the assembler.

 -- Opcode: LOAD_CLOSURE (i)

     Pushes a reference to the cell contained in slot ‘i’ of the “fast
     locals” storage.

     Note that ‘LOAD_CLOSURE’ is replaced with ‘LOAD_FAST’ in the
     assembler.

     Alterado na versão 3.13: This opcode is now a pseudo-instruction.

 -- Opcode: LOAD_METHOD

     Optimized unbound method lookup.  Emitted as a ‘LOAD_ATTR’ opcode
     with a flag set in the arg.


File: python.info,  Node: Opcode collections,  Prev: Instruções em bytecode do Python,  Up: dis — Disassembler de bytecode do Python

5.32.10.5 Opcode collections
............................

These collections are provided for automatic introspection of bytecode
instructions:

Alterado na versão 3.12: The collections now contain pseudo instructions
and instrumented instructions as well.  These are opcodes with values
‘>= MIN_PSEUDO_OPCODE’ and ‘>= MIN_INSTRUMENTED_OPCODE’.

 -- Dado: dis.opname

     Sequence of operation names, indexable using the bytecode.

 -- Dado: dis.opmap

     Dictionary mapping operation names to bytecodes.

 -- Dado: dis.cmp_op

     Sequence of all compare operation names.

 -- Dado: dis.hasarg

     Sequence of bytecodes that use their argument.

     Adicionado na versão 3.12.

 -- Dado: dis.hasconst

     Sequence of bytecodes that access a constant.

 -- Dado: dis.hasfree

     Sequence of bytecodes that access a *note free (closure) variable:
     20d1.  ‘free’ in this context refers to names in the current scope
     that are referenced by inner scopes or names in outer scopes that
     are referenced from this scope.  It does 'not' include references
     to global or builtin scopes.

 -- Dado: dis.hasname

     Sequence of bytecodes that access an attribute by name.

 -- Dado: dis.hasjump

     Sequence of bytecodes that have a jump target.  All jumps are
     relative.

     Adicionado na versão 3.13.

 -- Dado: dis.haslocal

     Sequence of bytecodes that access a local variable.

 -- Dado: dis.hascompare

     Sequence of bytecodes of Boolean operations.

 -- Dado: dis.hasexc

     Sequence of bytecodes that set an exception handler.

     Adicionado na versão 3.12.

 -- Dado: dis.hasjrel

     Sequence of bytecodes that have a relative jump target.

     Descontinuado desde a versão 3.13: All jumps are now relative.  Use
     *note hasjump: 49c6.

 -- Dado: dis.hasjabs

     Sequence of bytecodes that have an absolute jump target.

     Descontinuado desde a versão 3.13: All jumps are now relative.
     This list is empty.


File: python.info,  Node: pickletools — Ferramentas para desenvolvedores pickle,  Prev: dis — Disassembler de bytecode do Python,  Up: Serviços da Linguagem Python

5.32.11 ‘pickletools’ — Ferramentas para desenvolvedores pickle
---------------------------------------------------------------

'Código-fonte:' Lib/pickletools.py(1)

__________________________________________________________________

Este módulo contém várias constantes relacionadas aos detalhes íntimos
do módulo *note pickle: a6, alguns comentários extensos sobre a
implementação e algumas funções úteis para analisar dados em conserva.
O conteúdo deste módulo é útil para desenvolvedores do núcleo Python que
estão trabalhando no *note pickle: a6.; usuários comuns do módulo *note
pickle: a6. provavelmente não acharão o módulo *note pickletools: a7.
relevante.

* Menu:

* Uso na linha de comando: Uso na linha de comando<13>.
* Interface programática: Interface programática<2>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/pickletools.py


File: python.info,  Node: Uso na linha de comando<13>,  Next: Interface programática<2>,  Up: pickletools — Ferramentas para desenvolvedores pickle

5.32.11.1 Uso na linha de comando
.................................

Adicionado na versão 3.2.

Quando chamado a partir da linha de comando, ‘python -m pickletools’ irá
desmontar o conteúdo de um ou mais arquivos pickle.  Note que se você
quiser ver o objeto Python armazenado serializado em pickle ao invés dos
detalhes do formato pickle, você pode usar ‘-m pickle’.  No entanto,
quando o arquivo serializado em pickle que você deseja examinar vem de
uma fonte não confiável, ‘-m pickletools’ é uma opção mais segura porque
não executa bytecode pickle.

Por exemplo, com uma tupla ‘(1, 2)’ tratada com pickling no arquivo
‘x.pickle’:

     $ python -m pickle x.pickle
     (1, 2)

     $ python -m pickletools x.pickle
         0: \x80 PROTO      3
         2: K    BININT1    1
         4: K    BININT1    2
         6: \x86 TUPLE2
         7: q    BINPUT     0
         9: .    STOP
     highest protocol among opcodes = 2

* Menu:

* Opções da linha de comando: Opções da linha de comando<2>.


File: python.info,  Node: Opções da linha de comando<2>,  Up: Uso na linha de comando<13>

5.32.11.2 Opções da linha de comando
....................................

 -- Option: -a, --annotate

     Anota cada linha com uma descrição curta do código de operação.

 -- Option: -o, --output=<file>

     Nome de um arquivo no qual a saída deve ser escrita.

 -- Option: -l, --indentlevel=<num>

     O número de espaços em branco para indentar um novo nível MARK.

 -- Option: -m, --memo

     Quando vários objetos são desmontados, preserva memo entre as
     desmontagens.

 -- Option: -p, --preamble=<preamble>

     Quando mais de um arquivo serializado em pickle for especificado,
     imprime o preâmbulo fornecido antes de cada desmontagem.


File: python.info,  Node: Interface programática<2>,  Prev: Uso na linha de comando<13>,  Up: pickletools — Ferramentas para desenvolvedores pickle

5.32.11.3 Interface programática
................................

 -- Função: pickletools.dis (pickle, out=None, memo=None, indentlevel=4,
          annotate=0)

     Produz uma desmontagem simbólica do pickle para o objeto arquivo ou
     similar 'out', tendo como padrão ‘sys.stdout’.  'pickle' pode ser
     uma string ou um objeto arquivo ou similar.  'memo' pode ser um
     dicionário Python que será usado como memo do pickle; ele pode ser
     usado para realizar desmontagens em várias serializações com pickle
     criadas pelo mesmo pickler.  Níveis sucessivos, indicados por
     códigos de operação ‘MARK’ no fluxo, são indentados por espaços
     'indentlevel'.  Se um valor diferente de zero for fornecido para
     'annotate', cada código de operação na saída será anotado com uma
     breve descrição.  O valor de 'annotate' é usado como uma dica para
     a coluna onde a anotação deve começar.

     Alterado na versão 3.2: Adicionado o parâmetro 'annotate'.

 -- Função: pickletools.genops (pickle)

     Fornece um *note iterador: 1ac. sobre todos os códigos de operação
     em uma serialização com pickle, retornando uma sequência de triplos
     ‘(opcode, arg, pos)’.  'opcode' é uma instância de uma classe
     ‘OpcodeInfo’; 'arg' é o valor decodificado, como um objeto Python,
     do argumento do opcode; 'pos' é a posição em que este código de
     operação está localizado.  'pickle' pode ser uma string ou um
     objeto arquivo ou similar.

 -- Função: pickletools.optimize (picklestring)

     Retorna uma nova string pickle equivalente após eliminar códigos de
     operação ‘PUT’ não utilizados.  O pickle otimizado é mais curto,
     leva menos tempo de transmissão, requer menos espaço de
     armazenamento e efetua unpickling com mais eficiência.


File: python.info,  Node: Serviços Específicos do MS Windows,  Next: Serviços específicos do Unix,  Prev: Serviços da Linguagem Python,  Up: A Biblioteca Padrão do Python

5.33 Serviços Específicos do MS Windows
=======================================

Este capítulo descreve módulos que estão disponíveis somente na
plataformas MS Windows.

* Menu:

* msvcrt — Rotinas úteis do runtime MS VC++::
* winreg — Acesso aos registros do Windows::
* winsound — Interface de reprodução de som para o Windows::


File: python.info,  Node: msvcrt — Rotinas úteis do runtime MS VC++,  Next: winreg — Acesso aos registros do Windows,  Up: Serviços Específicos do MS Windows

5.33.1 ‘msvcrt’ — Rotinas úteis do runtime MS VC++
--------------------------------------------------

__________________________________________________________________

Essas funções fornecem acesso a alguns recursos úteis em plataformas
Windows.  Alguns módulos de nível superior usam essas funções para
construir as implementações de seus serviços no Windows.  Por exemplo, o
módulo *note getpass: 62. usa isso na implementação da função *note
getpass(): 62.

Mais documentação sobre essas funções pode ser encontrada na
documentação da API da plataforma.

O módulo implementa as variantes normal e ampla de caracteres da API de
E/S do console.  A API normal lida apenas com caracteres ASCII e é de
uso limitado para aplicativos internacionalizados.  A API ampla de
caracteres deve ser usada sempre que possível.

*note Disponibilidade: 1ed8.: Windows.

Alterado na versão 3.3: As operações neste módulo agora levantam *note
OSError: 417. onde *note IOError: 108b. foi levantado.

* Menu:

* Operações com arquivos::
* E/S de console::
* Outras funções: Outras funções<4>.


File: python.info,  Node: Operações com arquivos,  Next: E/S de console,  Up: msvcrt — Rotinas úteis do runtime MS VC++

5.33.1.1 Operações com arquivos
...............................

 -- Função: msvcrt.locking (fd, mode, nbytes)

     Trava parte de um arquivo com base no descritor de arquivo 'fd' do
     runtime do C. Levanta *note OSError: 417. em caso de falha.  A
     região travada do arquivo se estende da posição atual do arquivo
     por 'nbytes' bytes e pode continuar além do final do arquivo.
     'mode' deve ser uma das constantes ‘LK_*’ listadas abaixo.  Várias
     regiões em um arquivo podem ser travadas ao mesmo tempo, mas não
     podem se sobrepor.  Regiões adjacentes não são mescladas; elas
     devem ser destravadas individualmente.

     Levanta um *note evento de auditoria: 19fa. ‘msvcrt.locking’ com os
     argumentos ‘fd’, ‘mode’, ‘nbytes’.

 -- Dado: msvcrt.LK_LOCK
 -- Dado: msvcrt.LK_RLCK

     Trava os bytes especificados.  Se os bytes não puderem ser
     travados, o programa tenta novamente imediatamente após 1 segundo.
     Se, após 10 tentativas, os bytes não puderem ser travados, *note
     OSError: 417. é levantada.

 -- Dado: msvcrt.LK_NBLCK
 -- Dado: msvcrt.LK_NBRLCK

     Trava os bytes especificados.  Se os bytes não puderem ser
     travados, uma exceção *note OSError: 417. é levantada.

 -- Dado: msvcrt.LK_UNLCK

     Destrava os bytes especificados, que devem ter sido travados
     anteriormente.

 -- Função: msvcrt.setmode (fd, flags)

     Defina o modo de conversão de final de linha para o descritor de
     arquivo 'fd'.  Para configurá-lo no modo de texto, 'flags' deve ser
     *note os.O_TEXT: 2d35.; para binário, deve ser *note os.O_BINARY:
     2d26.

 -- Função: msvcrt.open_osfhandle (handle, flags)

     Crie um descritor de arquivo de tempo de execução do C a partir do
     identificador de arquivo 'handle'.  O parâmetro 'flags' deve ser um
     OU bit a bit de *note os.O_APPEND: 2d28, *note os.O_RDONLY: 2d24,
     *note os.O_TEXT: 2d35. e *note os.O_NOINHERIT: 2d30.  O descritor
     de arquivo retornado pode ser usado como parâmetro para *note
     os.fdopen(): 20c4. para criar um objeto de arquivo.

     O descritor de arquivo é herdável por padrão.  Passe o sinalizador
     *note os.O_NOINHERIT: 2d30. para torná-lo não herdável.

     Levanta um *note evento de auditoria: 19fa. ‘msvcrt.open_osfhandle’
     com os argumentos ‘handle’, ‘flags’.

 -- Função: msvcrt.get_osfhandle (fd)

     Retorna o identificador de arquivo para o descritor de arquivo
     'fd'.  Levanta *note OSError: 417. se 'fd' não for reconhecido.

     Levanta um *note evento de auditoria: 19fa. ‘msvcrt.get_osfhandle’
     com o argumento ‘fd’.


File: python.info,  Node: E/S de console,  Next: Outras funções<4>,  Prev: Operações com arquivos,  Up: msvcrt — Rotinas úteis do runtime MS VC++

5.33.1.2 E/S de console
.......................

 -- Função: msvcrt.kbhit ()

     Retorna um valor diferente de zero se houver uma tecla pressionada
     aguardando leitura.  Caso contrário, retorna 0.

 -- Função: msvcrt.getch ()

     Lê um pressionamento de tecla e retorna o caractere resultante como
     uma sequência de bytes.  Nada é ecoado no console.  Essa chamada
     será bloqueada se um pressionamento de tecla ainda não estiver
     disponível, mas não esperará que ‘Enter’ seja pressionado.  Se a
     tecla pressionada for uma tecla de função especial, ela retornará
     ‘'\000'’ ou ‘'\xe0'’; a próxima chamada retornará o código da
     chave.  A tecla ‘Control’-‘C’ não pode ser lida com esta função.

 -- Função: msvcrt.getwch ()

     Variante com caractere largo de *note getch(): 49ed, retornando um
     valor Unicode.

 -- Função: msvcrt.getche ()

     Semelhante a *note getch(): 49ed, mas o pressionamento de tecla
     será repetido se representar um caractere imprimível.

 -- Função: msvcrt.getwche ()

     Variante com caractere largo de *note getche(): 49ee, retornando um
     valor Unicode.

 -- Função: msvcrt.putch (char)

     Imprime a string de bytes 'char' no console sem armazenar em
     buffer.

 -- Função: msvcrt.putwch (unicode_char)

     Variante com caractere largo de *note putch(): 49ef, retornando um
     valor Unicode.

 -- Função: msvcrt.ungetch (char)

     Faz com que a string de bytes 'char' seja “empurrada” para o buffer
     do console; será o próximo caractere lido por *note getch(): 49ed.
     ou *note getche(): 49ee.

 -- Função: msvcrt.ungetwch (unicode_char)

     Variante com caractere largo de *note ungetch(): 49f0, retornando
     um valor Unicode.


File: python.info,  Node: Outras funções<4>,  Prev: E/S de console,  Up: msvcrt — Rotinas úteis do runtime MS VC++

5.33.1.3 Outras funções
.......................

 -- Função: msvcrt.heapmin ()

     Força o heap ‘malloc()’ a ser limpado e retorna os blocos não
     utilizados ao sistema operacional.  Em caso de falha, isso levanta
     *note OSError: 417.

 -- Função: msvcrt.set_error_mode (mode)

     Altera o local onde o ambiente de execução C grava uma mensagem de
     erro para um erro que pode encerrar o programa.  'mode' deve ser
     uma das constantes ‘OUT_*’ listadas abaixo ou *note REPORT_ERRMODE:
     49f6.  Retorna a configuração anterior ou -1 se ocorrer um erro.
     Disponível apenas na *note construção de depuração do Python: 1f9.

 -- Dado: msvcrt.OUT_TO_DEFAULT

     O destino dos erros é determinado pelo tipo da aplicação.
     Disponível apenas na *note construção de depuração do Python: 1f9.

 -- Dado: msvcrt.OUT_TO_STDERR

     O destino dos erros é um de erro padrão.  Disponível apenas na
     *note construção de depuração do Python: 1f9.

 -- Dado: msvcrt.OUT_TO_MSGBOX

     O destino dos erros é um de caixa de mensagem.  Disponível apenas
     na *note construção de depuração do Python: 1f9.

 -- Dado: msvcrt.REPORT_ERRMODE

     Relata o valor atual do modo de erro.  Disponível apenas na *note
     construção de depuração do Python: 1f9.

 -- Função: msvcrt.CrtSetReportMode (type, mode)

     Especifica o destino ou destinos para um tipo de relatório
     específico gerado por ‘_CrtDbgReport()’ no ambiente de execução do
     MS VC++.  'type' deve ser uma das constantes ‘CRT_*’ listadas
     abaixo.  'mode' deve ser uma das constantes ‘CRTDBG_*’ listadas
     abaixo.  Disponível apenas na *note construção de depuração do
     Python: 1f9.

 -- Função: msvcrt.CrtSetReportFile (type, file)

     Após usar *note CrtSetReportMode(): 49fa. para especificar *note
     CRTDBG_MODE_FILE: 49fc, você pode especificar o identificador do
     arquivo que receberá o texto da mensagem.  'type' deve ser uma das
     constantes ‘CRT_*’ listadas abaixo.  'file' deve ser o
     identificador do arquivo que você deseja especificar.  Disponível
     apenas na *note construção de depuração do Python: 1f9.

 -- Dado: msvcrt.CRT_WARN

     Avisos, mensagens e informações que não exigem atenção imediata.

 -- Dado: msvcrt.CRT_ERROR

     Erros, problemas irrecuperáveis e questões que exigem atenção
     imediata.

 -- Dado: msvcrt.CRT_ASSERT

     Falhas de asserção.

 -- Dado: msvcrt.CRTDBG_MODE_DEBUG

     Escreve a mensagem na janela de saída do depurador.

 -- Dado: msvcrt.CRTDBG_MODE_FILE

     Escreve a mensagem em um descritor de arquivo fornecido pelo
     usuário.  *note CrtSetReportFile(): 49fb. deve ser chamada para
     definir o arquivo ou fluxo específico a ser usado como destino.

 -- Dado: msvcrt.CRTDBG_MODE_WNDW

     Cria uma caixa de mensagem para exibir a mensagem juntamente com os
     botões ‘Abort’, ‘Retry’ e ‘Ignore’.

 -- Dado: msvcrt.CRTDBG_REPORT_MODE

     Retorna o 'modole' atual para o 'type' especificado.

 -- Dado: msvcrt.CRT_ASSEMBLY_VERSION

     A versão do CRT Assembly, do arquivo de cabeçalho ‘crtassem.h’.

 -- Dado: msvcrt.VC_ASSEMBLY_PUBLICKEYTOKEN

     O token da chave pública do VC Assembly, do arquivo de cabeçalho
     ‘crtassem.h’.

 -- Dado: msvcrt.LIBRARIES_ASSEMBLY_NAME_PREFIX

     O prefixo do nome de Libraries Assembly, do arquivo de cabeçalho
     ‘crtassem.h’.


File: python.info,  Node: winreg — Acesso aos registros do Windows,  Next: winsound — Interface de reprodução de som para o Windows,  Prev: msvcrt — Rotinas úteis do runtime MS VC++,  Up: Serviços Específicos do MS Windows

5.33.2 ‘winreg’ — Acesso aos registros do Windows
-------------------------------------------------

__________________________________________________________________

Essas funções expõem a API de registro do Windows ao Python.  Em vez de
usar um inteiro como identificador de registro, um *note objeto
identificador: 4a06. é usado para garantir que os identificadores sejam
fechados corretamente, mesmo que o programador não os feche
explicitamente.

*note Disponibilidade: 1ed8.: Windows.

Alterado na versão 3.3: Várias funções neste módulo costumavam levantar
um *note WindowsError: 108d. , que agora é um apelido de *note OSError:
417.

* Menu:

* Funções: Funções<13>.
* Constantes: Constantes<10>.
* Objetos identificador de registro::


File: python.info,  Node: Funções<13>,  Next: Constantes<10>,  Up: winreg — Acesso aos registros do Windows

5.33.2.1 Funções
................

Este módulo oferece as seguintes funções:

 -- Função: winreg.CloseKey (hkey)

     Fecha uma chave de registro aberta anteriormente.  O argumento
     'hkey' especifica uma chave aberta anteriormente.

          Nota: Se 'hkey' não for fechado usando este método (ou via
          *note hkey.Close(): 4a0b.), ele será fechado quando o objeto
          'hkey' for destruído pelo Python.

 -- Função: winreg.ConnectRegistry (computer_name, key)

     Estabelece uma conexão com um identificador de registro predefinido
     em outro computador e retorna um *note objeto identificador: 4a06.

     'computer_name' é o nome do computador remoto, no formato
     ‘r"\\computername"’.  Se ‘None’, o computador local será usado.

     'key' é o identificador predefinido para conexão.

     O valor de retorno é o identificador da chave aberta.  Se a função
     falhar, uma exceção *note OSError: 417. será levantada.

     Levanta um *note evento de auditoria: 19fa.
     ‘winreg.ConnectRegistry’ com os argumentos ‘computer_name’, ‘key’.

     Alterado na versão 3.3: Veja *note acima: 4a07.

 -- Função: winreg.CreateKey (key, sub_key)

     Cria ou abre a chave especificada, retornando um *note objeto
     identificador: 4a06.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     'sub_key' é uma string que nomeia a chave que este método abre ou
     cria.

     Se 'key' for uma das chaves predefinidas, 'sub_key' poderá ser
     ‘None’.  Nesse caso, o identificador retornado será o mesmo
     identificador de chave passado para a função.

     Se a chave já existir, esta função abre a chave existente.

     O valor de retorno é o identificador da chave aberta.  Se a função
     falhar, uma exceção *note OSError: 417. será levantada.

     Levanta um *note evento de auditoria: 19fa. ‘winreg.CreateKey’ com
     os argumentos ‘key’, ‘sub_key’, ‘access’.

     Levanta um *note evento de auditoria: 19fa. ‘winreg.OpenKey/result’
     com o argumento ‘key’.

     Alterado na versão 3.3: Veja *note acima: 4a07.

 -- Função: winreg.CreateKeyEx (key, sub_key, reserved=0,
          access=KEY_WRITE)

     Cria ou abre a chave especificada, retornando um *note objeto
     identificador: 4a06.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     'sub_key' é uma string que nomeia a chave que este método abre ou
     cria.

     'reserved' é um inteiro reservado e deve ser zero.  O padrão é
     zero.

     'access' é um inteiro que especifica uma máscara de acesso que
     descreve o acesso de segurança desejado para a chave.  O padrão é
     *note KEY_WRITE: 4a0d.  Consulte *note Direitos de acesso: 4a0e.
     para outros valores permitidos.

     Se 'key' for uma das chaves predefinidas, 'sub_key' poderá ser
     ‘None’.  Nesse caso, o identificador retornado será o mesmo
     identificador de chave passado para a função.

     Se a chave já existir, esta função abre a chave existente.

     O valor de retorno é o identificador da chave aberta.  Se a função
     falhar, uma exceção *note OSError: 417. será levantada.

     Levanta um *note evento de auditoria: 19fa. ‘winreg.CreateKey’ com
     os argumentos ‘key’, ‘sub_key’, ‘access’.

     Levanta um *note evento de auditoria: 19fa. ‘winreg.OpenKey/result’
     com o argumento ‘key’.

     Adicionado na versão 3.2.

     Alterado na versão 3.3: Veja *note acima: 4a07.

 -- Função: winreg.DeleteKey (key, sub_key)

     Exclui a chave especificada.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     'sub_key' é uma string que deve ser uma subchave da chave
     identificada pelo parâmetro 'key'.  Este valor não pode ser ‘None’,
     e a chave não pode ter subchaves.

     'Este método não pode excluir chaves com subchaves.'

     Se o método for bem-sucedido, a chave inteira, incluindo todos os
     seus valores, será removida.  Se o método falhar, uma exceção *note
     OSError: 417. será levantada.

     Levanta um *note evento de auditoria: 19fa. ‘winreg.DeleteKey’ com
     os argumentos ‘key’, ‘sub_key’, ‘access’.

     Alterado na versão 3.3: Veja *note acima: 4a07.

 -- Função: winreg.DeleteKeyEx (key, sub_key, access=KEY_WOW64_64KEY,
          reserved=0)

     Exclui a chave especificada.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     'sub_key' é uma string que deve ser uma subchave da chave
     identificada pelo parâmetro 'key'.  Este valor não pode ser ‘None’,
     e a chave não pode ter subchaves.

     'reserved' é um inteiro reservado e deve ser zero.  O padrão é
     zero.

     'access' é um inteiro que especifica uma máscara de acesso que
     descreve o acesso de segurança desejado para a chave.  O padrão é
     *note KEY_WOW64_64KEY: 4a0f.  No Windows de 32 bits, as constantes
     WOW64 são ignoradas.  Consulte *note Direitos de acesso: 4a0e. para
     outros valores permitidos.

     'Este método não pode excluir chaves com subchaves.'

     Se o método for bem-sucedido, a chave inteira, incluindo todos os
     seus valores, será removida.  Se o método falhar, uma exceção *note
     OSError: 417. será levantada.

     Em versões do Windows sem suporte, *note NotImplementedError: 228.
     é levantada.

     Levanta um *note evento de auditoria: 19fa. ‘winreg.DeleteKey’ com
     os argumentos ‘key’, ‘sub_key’, ‘access’.

     Adicionado na versão 3.2.

     Alterado na versão 3.3: Veja *note acima: 4a07.

 -- Função: winreg.DeleteValue (key, value)

     Remove um valor nomeado de uma chave de registro.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     'value' é uma string que identifica o valor a ser removido.

     Levanta um *note evento de auditoria: 19fa. ‘winreg.DeleteValue’
     com os argumentos ‘key’, ‘value’.

 -- Função: winreg.EnumKey (key, index)

     Enumera subchaves de uma chave de registro aberta, retornando uma
     string.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     'index' é um inteiro que identifica o índice da chave a ser
     recuperada.

     A função recupera o nome de uma subchave cada vez que é chamada.
     Normalmente, ela é chamada repetidamente até que uma exceção *note
     OSError: 417. seja levantada, indicando que não há mais valores
     disponíveis.

     Levanta um *note evento de auditoria: 19fa. ‘winreg.EnumKey’ com os
     argumentos ‘key’, ‘index’.

     Alterado na versão 3.3: Veja *note acima: 4a07.

 -- Função: winreg.EnumValue (key, index)

     Enumera valores de uma chave de registro aberta, retornando uma
     tupla.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     'index' é um inteiro que identifica o índice do valor a ser
     recuperado.

     A função recupera o nome de uma subchave cada vez que é chamada.
     Normalmente, ela é chamada repetidamente, até que uma exceção *note
     OSError: 417. seja levantada, indicando que não há mais valores.

     O resultado é uma tupla de 3 itens:

     Índice      Significado
                 
     -------------------------------------------------------------
                 
     ‘0’         Uma string que identifica o nome do valor
                 
                 
     ‘1’         Um objeto que contém os dados de valor e cujo
                 tipo depende do tipo de registro subjacente
                 
                 
     ‘2’         Um inteiro que identifica o tipo dos dados do
                 valor (veja a tabela na documentação para
                 *note SetValueEx(): 188b.)
                 

     Levanta um *note evento de auditoria: 19fa. ‘winreg.EnumValue’ com
     os argumentos ‘key’, ‘index’.

     Alterado na versão 3.3: Veja *note acima: 4a07.

 -- Função: winreg.ExpandEnvironmentStrings (str)

     Expande os espaços reservados de posição de variáveis de ambiente
     ‘%NAME%’ em strings como *note REG_EXPAND_SZ: 4a10.:

          >>> ExpandEnvironmentStrings('%windir%')
          'C:\\Windows'

     Levanta um *note evento de auditoria: 19fa.
     ‘winreg.ExpandEnvironmentStrings’ com o argumento ‘str’.

 -- Função: winreg.FlushKey (key)

     Grava todos os atributos de uma chave no registro.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     Não é necessário chamar *note FlushKey(): 4a11. para alterar uma
     chave.  As alterações do registro são descarregadas no disco pelo
     registro usando seu limpador lento.  As alterações do registro
     também são descarregadas no disco no desligamento do sistema.  Ao
     contrário de *note CloseKey(): 4a0a, o método *note FlushKey():
     4a11. retorna somente quando todos os dados foram gravados no
     registro.  Uma aplicação só deve chamar *note FlushKey(): 4a11. se
     precisar de certeza absoluta de que as alterações do registro estão
     no disco.

          Nota: Se você não sabe se uma chamada *note FlushKey(): 4a11.
          é necessária, provavelmente não é.

 -- Função: winreg.LoadKey (key, sub_key, file_name)

     Cria uma subchave sob a chave especificada e armazena informações
     de registro de um arquivo especificado nessa subchave.

     'key' é um identificador retornado por *note ConnectRegistry():
     440d. ou uma das constantes *note HKEY_USERS: 4a12. ou *note
     HKEY_LOCAL_MACHINE: 4a13.

     'sub_key' é uma string que identifica a subchave a ser carregada.

     'file_name' é o nome do arquivo do qual serão carregados os dados
     do registro.  Este arquivo deve ter sido criado com a função *note
     SaveKey(): 4418.  No sistema de arquivos da tabela de alocação de
     arquivos (FAT), o nome do arquivo não pode ter extensão.

     Uma chamada para *note LoadKey(): 4413. falhará se o processo de
     chamada não tiver o privilégio ‘SE_RESTORE_PRIVILEGE’.  Observe que
     privilégios são diferentes de permissões — consulte a documentação
     do RegLoadKey(1) para mais detalhes.

     Se 'key' for um identificador retornado por *note
     ConnectRegistry(): 440d, então o caminho especificado em
     'file_name' será relativo ao computador remoto.

     Levanta um *note evento de auditoria: 19fa. ‘winreg.LoadKey’ com os
     argumentos ‘key’, ‘sub_key’, ‘file_name’.

 -- Função: winreg.OpenKey (key, sub_key, reserved=0, access=KEY_READ)
 -- Função: winreg.OpenKeyEx (key, sub_key, reserved=0, access=KEY_READ)

     Abre a chave especificada, retornando um *note objeto
     identificador: 4a06.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     'sub_key' é uma string que identifica a sub_key a ser aberta.

     'reserved' é um inteiro reservado e deve ser zero.  O padrão é
     zero.

     'access' é um inteiro que especifica uma máscara de acesso que
     descreve o acesso de segurança desejado para a chave.  O padrão é
     *note KEY_READ: 4a15.  Consulte *note Direitos de acesso: 4a0e.
     para outros valores permitidos.

     O resultado é um novo identificador para a chave especificada.

     Se a função falhar, *note OSError: 417. será levantada.

     Levanta um *note evento de auditoria: 19fa. ‘winreg.OpenKey’ com os
     argumentos ‘key’, ‘sub_key’, ‘access’.

     Levanta um *note evento de auditoria: 19fa. ‘winreg.OpenKey/result’
     com o argumento ‘key’.

     Alterado na versão 3.2: Permite o uso de argumentos nomeados.

     Alterado na versão 3.3: Veja *note acima: 4a07.

 -- Função: winreg.QueryInfoKey (key)

     Retorna informações sobre uma chave, como uma tupla.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     O resultado é uma tupla de 3 itens:

     Índice      Significado
                 
     --------------------------------------------------------------
                 
     ‘0’         Um inteiro que fornece o número de subchaves
                 que esta chave possui.
                 
                 
     ‘1’         Um inteiro que fornece o número de valores que
                 esta chave possui.
                 
                 
     ‘2’         Um número inteiro que indica quando a chave foi
                 modificada pela última vez (se disponível) em
                 centenas de nanossegundos desde 1º de janeiro
                 de 1601.
                 

     Levanta um *note evento de auditoria: 19fa. ‘winreg.QueryInfoKey’
     com o argumento ‘key’.

 -- Função: winreg.QueryValue (key, sub_key)

     Recupera o valor sem nome de uma chave, como uma string.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     'sub_key' é uma string que contém o nome da subchave à qual o valor
     está associado.  Se este parâmetro for ‘None’ ou estiver vazio, a
     função recupera o valor definido pelo método *note SetValue():
     4419. para a chave identificada por 'key'.

     Os valores no registro têm componentes de nome, tipo e dados.  Este
     método recupera os dados do primeiro valor de uma chave que possui
     um nome ‘NULL’.  Mas a chamada de API subjacente não retorna o
     tipo, portanto, sempre use *note QueryValueEx(): 15ab. se possível.

     Levanta um *note evento de auditoria: 19fa. ‘winreg.QueryValue’ com
     os argumentos ‘key’, ‘sub_key’, ‘value_name’.

 -- Função: winreg.QueryValueEx (key, value_name)

     Recupera o tipo e os dados de um nome de valor especificado
     associado a uma chave de registro aberta.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     'value_name' é uma string que indica o valor a ser consultado.

     O resultado é uma tupla de 2 itens:

     Índice      Significado
                 
     ----------------------------------------------------------
                 
     ‘0’         O valor do item do registro.
                 
                 
     ‘1’         Um inteiro que fornece o tipo de registro
                 para este valor (veja a tabela na
                 documentação para
                 *note SetValueEx(): 188b.)
                 

     Levanta um *note evento de auditoria: 19fa. ‘winreg.QueryValue’ com
     os argumentos ‘key’, ‘sub_key’, ‘value_name’.

 -- Função: winreg.SaveKey (key, file_name)

     Salva a chave especificada e todas as suas subchaves no arquivo
     especificado.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     'file_name' é o nome do arquivo para salvar os dados do registro.
     Este arquivo não pode existir.  Se este nome de arquivo incluir uma
     extensão, ele não poderá ser usado em sistemas de arquivos FAT
     (tabela de alocação de arquivos) pelo método *note LoadKey(): 4413.

     Se 'key' representa uma chave em um computador remoto, o caminho
     descrito por 'file_name' é relativo ao computador remoto.  O
     chamador deste método deve possuir o privilégio de segurança
     'SeBackupPrivilege'.  Observe que privilégios são diferentes de
     permissões — consulte a documentação Conflitos entre Direitos e
     Permissões do Usuário(2) para obter mais detalhes.

     Esta função passa ‘NULL’ para 'security_attributes' para a API.

     Levanta um *note evento de auditoria: 19fa. ‘winreg.SaveKey’ com os
     argumentos ‘key’, ‘file_name’.

 -- Função: winreg.SetValue (key, sub_key, type, value)

     Associa um valor a uma chave especificada.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     'sub_key' é uma string que nomeia a subchave à qual o valor está
     associado.

     'type' é um inteiro que especifica o tipo dos dados.  Atualmente,
     deve ser *note REG_SZ: 4a16, o que significa que apenas strings são
     suportadas.  Use a função *note SetValueEx(): 188b. para suporte a
     outros tipos de dados.

     'valor' é uma string que especifica o novo valor.

     Se a chave especificada pelo parâmetro 'sub_key' não existir, a
     função SetValue a criará.

     O comprimento dos valores é limitado pela memória disponível.
     Valores longos (mais de 2048 bytes) devem ser armazenados como
     arquivos com os nomes dos arquivos armazenados no registro de
     configuração.  Isso ajuda o registro a funcionar com eficiência.

     A chave identificada pelo parâmetro 'key' deve ter sido aberta com
     acesso *note KEY_SET_VALUE: 4a17.

     Levanta um *note evento de auditoria: 19fa. ‘winreg.SetValue’ com
     os argumentos ‘key’, ‘sub_key’, ‘type’, ‘value’.

 -- Função: winreg.SetValueEx (key, value_name, reserved, type, value)

     Armazena dados no campo de valor de uma chave de registro aberta.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     'value_name' é uma string que nomeia a subchave à qual o valor está
     associado.

     'reserved' pode ser qualquer coisa – zero é sempre passado para a
     API.

     'type' é um inteiro que especifica o tipo dos dados.  Consulte
     *note Tipos de valor: 4a18. para os tipos disponíveis.

     'valor' é uma string que especifica o novo valor.

     Este método também pode definir informações adicionais de valor e
     tipo para a chave especificada.  A chave identificada pelo
     parâmetro key deve ter sido aberta com o acesso *note
     KEY_SET_VALUE: 4a17.

     Para abrir a chave, use os métodos *note CreateKey(): 440e. ou
     *note OpenKey(): 4414.

     O comprimento dos valores é limitado pela memória disponível.
     Valores longos (mais de 2048 bytes) devem ser armazenados como
     arquivos com os nomes dos arquivos armazenados no registro de
     configuração.  Isso ajuda o registro a funcionar com eficiência.

     Levanta um *note evento de auditoria: 19fa. ‘winreg.SetValue’ com
     os argumentos ‘key’, ‘sub_key’, ‘type’, ‘value’.

 -- Função: winreg.DisableReflectionKey (key)

     Desabilita a reflexão do registro para processos de 32 bits em
     execução em um sistema operacional de 64 bits.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     Geralmente levantará *note NotImplementedError: 228. se executado
     em um sistema operacional de 32 bits.

     Se a chave não estiver na lista de reflexão, a função será
     bem-sucedida, mas não terá efeito.  Desabilitar a reflexão para uma
     chave não afeta a reflexão de nenhuma subchave.

     Levanta um *note evento de auditoria: 19fa.
     ‘winreg.DisableReflectionKey’ com o argumento ‘key’.

 -- Função: winreg.EnableReflectionKey (key)

     Restaura a reflexão do registro para a chave desabilitada
     especificada.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     Geralmente levantará *note NotImplementedError: 228. se executado
     em um sistema operacional de 32 bits.

     Restaura a reflexão de uma chave não afeta a reflexão de nenhuma
     subchave.

     Levanta um *note evento de auditoria: 19fa.
     ‘winreg.EnableReflectionKey’ com o argumento ‘key’.

 -- Função: winreg.QueryReflectionKey (key)

     Determina o estado de reflexão para a chave especificada.

     'key' é uma chave já aberta, ou uma das constantes predefinidas
     *note HKEY_*: 4a0c.

     Retorna ‘True’ se a reflexão estiver desabilitada.

     Geralmente levantará *note NotImplementedError: 228. se executado
     em um sistema operacional de 32 bits.

     Levanta um *note evento de auditoria: 19fa.
     ‘winreg.QueryReflectionKey’ com o argumento ‘key’.

   ---------- Footnotes ----------

   (1) 
https://msdn.microsoft.com/en-us/library/ms724889%28v=VS.85%29.aspx

   (2) 
https://msdn.microsoft.com/en-us/library/ms724878%28v=VS.85%29.aspx


File: python.info,  Node: Constantes<10>,  Next: Objetos identificador de registro,  Prev: Funções<13>,  Up: winreg — Acesso aos registros do Windows

5.33.2.2 Constantes
...................

As seguintes constantes são definidas para uso em muitas funções *note
winreg: 116.

* Menu:

* Constantes HKEY_*::
* Direitos de acesso::
* Tipos de valores::


File: python.info,  Node: Constantes HKEY_*,  Next: Direitos de acesso,  Up: Constantes<10>

5.33.2.3 Constantes HKEY_*
..........................

 -- Dado: winreg.HKEY_CLASSES_ROOT

     Entradas de registro subordinadas a esta chave definem tipos (ou
     classes) de documentos e as propriedades associadas a esses tipos.
     Aplicações Shell e COM utilizam as informações armazenadas sob esta
     chave.

 -- Dado: winreg.HKEY_CURRENT_USER

     As entradas de registro subordinadas a esta chave definem as
     preferências do usuário atual.  Essas preferências incluem as
     configurações de variáveis de ambiente, dados sobre grupos de
     programas, cores, impressoras, conexões de rede e preferências de
     aplicações.

 -- Dado: winreg.HKEY_LOCAL_MACHINE

     As entradas de registro subordinadas a esta chave definem o estado
     físico do computador, incluindo dados sobre o tipo de barramento,
     memória do sistema e hardware e software instalados.

 -- Dado: winreg.HKEY_USERS

     As entradas de registro subordinadas a esta chave definem a
     configuração de usuário padrão para novos usuários no computador
     local e a configuração de usuário para o usuário atual.

 -- Dado: winreg.HKEY_PERFORMANCE_DATA

     Entradas de registro subordinadas a esta chave permitem que você
     acesse dados de desempenho.  Os dados não são armazenados no
     registro; as funções de registro fazem com que o sistema colete os
     dados de sua fonte.

 -- Dado: winreg.HKEY_CURRENT_CONFIG

     Contém informações sobre o perfil de hardware atual do sistema de
     computador local.

 -- Dado: winreg.HKEY_DYN_DATA

     Esta chave não é usada em versões do Windows posteriores à 98.


File: python.info,  Node: Direitos de acesso,  Next: Tipos de valores,  Prev: Constantes HKEY_*,  Up: Constantes<10>

5.33.2.4 Direitos de acesso
...........................

Para obter mais informações, consulte Segurança e acesso a chaves do
registro(1).

 -- Dado: winreg.KEY_ALL_ACCESS

     Combina os direitos de acesso STANDARD_RIGHTS_REQUIRED, *note
     KEY_QUERY_VALUE: 4a23, *note KEY_SET_VALUE: 4a17, *note
     KEY_CREATE_SUB_KEY: 4a24, *note KEY_ENUMERATE_SUB_KEYS: 4a25, *note
     KEY_NOTIFY: 4a26. e *note KEY_CREATE_LINK: 4a27.

 -- Dado: winreg.KEY_WRITE

     Combina os direitos de acesso STANDARD_RIGHTS_WRITE, *note
     KEY_SET_VALUE: 4a17. e *note KEY_CREATE_SUB_KEY: 4a24.

 -- Dado: winreg.KEY_READ

     Combina os valores STANDARD_RIGHTS_READ, *note KEY_QUERY_VALUE:
     4a23, *note KEY_ENUMERATE_SUB_KEYS: 4a25. e *note KEY_NOTIFY: 4a26.

 -- Dado: winreg.KEY_EXECUTE

     Equivalente a *note KEY_READ: 4a15.

 -- Dado: winreg.KEY_QUERY_VALUE

     Necessário para consultar os valores de uma chave de registro.

 -- Dado: winreg.KEY_SET_VALUE

     Necessário para criar, excluir ou definir um valor de registro.

 -- Dado: winreg.KEY_CREATE_SUB_KEY

     Necessário para criar uma subchave de uma chave de registro.

 -- Dado: winreg.KEY_ENUMERATE_SUB_KEYS

     Necessário para enumerar as subchaves de uma chave de registro.

 -- Dado: winreg.KEY_NOTIFY

     Necessário para solicitar notificações de alteração para uma chave
     de registro ou para subchaves de uma chave de registro.

 -- Dado: winreg.KEY_CREATE_LINK

     Reservado para uso pelo sistema.

* Menu:

* Específico de 64 bits::

   ---------- Footnotes ----------

   (1) 
https://msdn.microsoft.com/en-us/library/ms724878%28v=VS.85%29.aspx


File: python.info,  Node: Específico de 64 bits,  Up: Direitos de acesso

5.33.2.5 Específico de 64 bits
..............................

Para obter mais informações, consulte Acessando uma exibição alternativa
do Registro(1).

 -- Dado: winreg.KEY_WOW64_64KEY

     Indica que uma aplicação no Windows 64 bits deve operar na
     visualização de registro de 64 bits.  No Windows de 32 bits, esta
     constante é ignorada.

 -- Dado: winreg.KEY_WOW64_32KEY

     Indica que uma aplicação no Windows 64 bits deve operar na
     visualização de registro de 32 bits.  No Windows de 32 bits, esta
     constante é ignorada.

   ---------- Footnotes ----------

   (1) https://msdn.microsoft.com/en-us/library/aa384129(v=VS.85).aspx


File: python.info,  Node: Tipos de valores,  Prev: Direitos de acesso,  Up: Constantes<10>

5.33.2.6 Tipos de valores
.........................

Para obter mais informações, consulte Tipos de valor do Registro(1).

 -- Dado: winreg.REG_BINARY

     Dados binários em qualquer formato.

 -- Dado: winreg.REG_DWORD

     Número de 32 bits.

 -- Dado: winreg.REG_DWORD_LITTLE_ENDIAN

     Um número de 32 bits no formato little-endian.  Equivalente a *note
     REG_DWORD: 4a2e.

 -- Dado: winreg.REG_DWORD_BIG_ENDIAN

     Um número de 32 bits no formato big-endian.

 -- Dado: winreg.REG_EXPAND_SZ

     String terminada em nulo contendo referências a variáveis de
     ambiente (‘%PATH%’).

 -- Dado: winreg.REG_LINK

     Um link simbólico Unicode.

 -- Dado: winreg.REG_MULTI_SZ

     Uma sequência de strings terminadas em nulo, terminadas por dois
     caracteres nulos.  (O Python lida com essa terminação
     automaticamente.)

 -- Dado: winreg.REG_NONE

     Nenhum tipo de valor definido.

 -- Dado: winreg.REG_QWORD

     Um número de 64 bits.

     Adicionado na versão 3.6.

 -- Dado: winreg.REG_QWORD_LITTLE_ENDIAN

     Um número de 64 bits no formato little-endian.  Equivalente a *note
     REG_QWORD: d24.

     Adicionado na versão 3.6.

 -- Dado: winreg.REG_RESOURCE_LIST

     Uma lista de recursos de driver de dispositivo.

 -- Dado: winreg.REG_FULL_RESOURCE_DESCRIPTOR

     Uma configuração de hardware.

 -- Dado: winreg.REG_RESOURCE_REQUIREMENTS_LIST

     Uma lista de recursos de hardware.

 -- Dado: winreg.REG_SZ

     Uma string terminada em nulo.

   ---------- Footnotes ----------

   (1) 
https://msdn.microsoft.com/en-us/library/ms724884%28v=VS.85%29.aspx


File: python.info,  Node: Objetos identificador de registro,  Prev: Constantes<10>,  Up: winreg — Acesso aos registros do Windows

5.33.2.7 Objetos identificador de registro
..........................................

Este objeto encapsula um objeto HKEY do Windows, fechando-o
automaticamente quando o objeto é destruído.  Para garantir a limpeza,
você pode chamar o método *note Close(): 4a0b. no objeto ou a função
*note CloseKey(): 4a0a.

Todas as funções de registro neste módulo retornam um destes objetos.

Todas as funções de registro neste módulo que aceitam um objeto
identificador também aceitam um inteiro; no entanto, o uso do objeto
identificador é incentivado.

Objetos identificador fornecem semântica para *note __bool__(): 1318. –
portanto

     if handle:
         print("Sim")

vai exibir ‘Sim’ se o identificador for válido no momento (não foi
fechado ou desanexado).

Objetos identificador podem ser convertidos em um inteiro (por exemplo,
usando a função embutida *note int(): 257.), caso em que o valor do
identificador do Windows subjacente é retornado.  Você também pode usar
o método *note Detach(): 4415. para retornar o identificador inteiro e
também desconectar o identificador do Windows do objeto identificador.

 -- Método: PyHKEY.Close ()

     Fecha o identificador subjacente do Windows.

     Se o identificador já estiver fechado, nenhum erro será levantado.

 -- Método: PyHKEY.Detach ()

     Separa o identificador do Windows do objeto identificador.

     O resultado é um inteiro que contém o valor do identificador antes
     de ser destacado.  Se o identificador já estiver destacado ou
     fechado, isso retornará zero.

     Após chamar esta função, o identificador é efetivamente invalidado,
     mas não é fechado.  Você chamaria esta função quando precisasse que
     o identificador subjacente de Win32 existisse além do tempo de vida
     do objeto identificador.

     Levanta um *note evento de auditoria: 19fa. ‘winreg.PyHKEY.Detach’
     com o argumento ‘key’.

 -- Método: PyHKEY.__enter__ ()
 -- Método: PyHKEY.__exit__ (*exc_info)

     O objeto HKEY implementa *note __enter__(): 5c8. e *note
     __exit__(): 1344. e, portanto, oferece suporte ao protocolo de
     contexto para a instrução *note with: 5d2.:

          with OpenKey(HKEY_LOCAL_MACHINE, "foo") as key:
              ...  # trabalha com a chave "key"

     vai fechar automaticamente 'key' quando o controle sair do bloco
     *note with: 5d2.


File: python.info,  Node: winsound — Interface de reprodução de som para o Windows,  Prev: winreg — Acesso aos registros do Windows,  Up: Serviços Específicos do MS Windows

5.33.3 ‘winsound’ — Interface de reprodução de som para o Windows
-----------------------------------------------------------------

__________________________________________________________________

O módulo *note winsound: 117. fornece acesso ao mecanismo básico de
reprodução de som fornecido pelas plataformas Windows.  Inclui funções e
várias constantes.

*note Disponibilidade: 1ed8.: Windows.

 -- Função: winsound.Beep (frequency, duration)

     Emite um bipe no alto-falante do PC. O parâmetro 'frequency'
     especifica a frequência, em hertz, do som e deve estar no intervalo
     de 37 a 32.767.  O parâmetro 'duration' especifica o número de
     milissegundos que o som deve durar.  Se o sistema não conseguir
     emitir um bipe no alto-falante, *note RuntimeError: 195. é
     levantado.

 -- Função: winsound.PlaySound (sound, flags)

     Chama a função subjacente ‘PlaySound()’ da API da plataforma.  O
     parâmetro 'sound' pode ser um nome de arquivo, um apelido de som do
     sistema, dados de áudio como um *note objeto bytes ou similar: d4f.
     ou ‘None’.  Sua interpretação depende do valor de 'flags', que pode
     ser uma combinação OU bit a bit das constantes descritas abaixo.
     Se o parâmetro 'sound' for ‘None’, qualquer som de forma de onda em
     execução no momento será interrompido.  Se o sistema indicar um
     erro, *note RuntimeError: 195. será levantada.

 -- Função: winsound.MessageBeep (type=MB_OK)

     Chama a função subjacente ‘MessageBeep()’ da API da plataforma.
     Isso reproduz um som conforme especificado no registro.  O
     argumento 'type' especifica qual som reproduzir; os valores
     possíveis são ‘-1’, ‘MB_ICONASTERISK’, ‘MB_ICONEXCLAMATION’,
     ‘MB_ICONHAND’, ‘MB_ICONQUESTION’ e ‘MB_OK’, todos descritos abaixo.
     O valor ‘-1’ produz um “bipe simples”; este é o fallback final se
     um som não puder ser reproduzido de outra forma.  Se o sistema
     indicar um erro, *note RuntimeError: 195. será levantada.

 -- Dado: winsound.SND_FILENAME

     O parâmetro 'sound' é o nome de um arquivo WAV. Não use com *note
     SND_ALIAS: 4a3e.

 -- Dado: winsound.SND_ALIAS

     O parâmetro 'sound' é um nome de associação de som do registro.  Se
     o registro não contiver tal nome, reproduza o som padrão do
     sistema, a menos que *note SND_NODEFAULT: 4a3f. também seja
     especificado.  Se nenhum som padrão for registrado, levanta *note
     RuntimeError: 195.  Não use com *note SND_FILENAME: 4a3d.

     Todos os sistemas Win32 oferecem suporte a pelo menos o seguinte; a
     maioria dos sistemas oferecem suporte a muito mais:

     'name'                         Nome do som correspondente no Painel de
     *note PlaySound(): d28.        Controle
                                    
     ----------------------------------------------------------------------------
                                    
     ‘'SystemAsterisk'’             Asterisco
                                    
                                    
     ‘'SystemExclamation'’          Exclamação
                                    
                                    
     ‘'SystemExit'’                 Logoff do Windows
                                    
                                    
     ‘'SystemHand'’                 Parada crítica
                                    
                                    
     ‘'SystemQuestion'’             Pergunta
                                    

     Por exemplo:

          import winsound
          # Reproduz o som de logoff do Windows.
          winsound.PlaySound("SystemExit", winsound.SND_ALIAS)

          # Provavelmente reproduz o som padrão do Windows, se algum
          # estiver registrado (porque "*" provavelmente não é o nome registrado
          # de algum som).
          winsound.PlaySound("*", winsound.SND_ALIAS)

 -- Dado: winsound.SND_LOOP

     Reproduz o som repetidamente.  O sinalizador *note SND_ASYNC: 4a41.
     também deve ser usado para evitar bloqueio.  Não pode ser usado com
     *note SND_MEMORY: 4a42.

 -- Dado: winsound.SND_MEMORY

     O parâmetro 'sound' para *note PlaySound(): d28. é uma imagem de
     memória de um arquivo WAV, como um *note objeto bytes ou similar:
     d4f.

          Nota: Este módulo não oferece suporte à reprodução de uma
          imagem de memória de forma assíncrona, portanto, uma
          combinação deste sinalizador e *note SND_ASYNC: 4a41.
          levantará *note RuntimeError: 195.

 -- Dado: winsound.SND_PURGE

     Para de reproduzir todas as instâncias do som especificado.

          Nota: Não há suporte a este sinalizador em plataformas Windows
          modernas.

 -- Dado: winsound.SND_ASYNC

     Retorna imediatamente, permitindo que os sons sejam reproduzidos de
     forma assíncrona.

 -- Dado: winsound.SND_NODEFAULT

     Se o som especificado não for encontrado, o som padrão do sistema
     não será reproduzido.

 -- Dado: winsound.SND_NOSTOP

     Não interrompe os sons que estão sendo reproduzidos.

 -- Dado: winsound.SND_NOWAIT

     Retorna imediatamente se o driver de som estiver ocupado.

          Nota: Não há suporte a este sinalizador em plataformas Windows
          modernas.

 -- Dado: winsound.SND_APPLICATION

     O parâmetro 'sound' é um apelido específico da aplicação no
     registro.  Este sinalizador pode ser combinado com o sinalizador
     *note SND_ALIAS: 4a3e. para especificar um apelido de som definido
     pela aplicação.

 -- Dado: winsound.MB_ICONASTERISK

     Reproduz o som ‘SystemDefault’.

 -- Dado: winsound.MB_ICONEXCLAMATION

     Reproduz o som ‘SystemExclamation’.

 -- Dado: winsound.MB_ICONHAND

     Reproduz o som ‘SystemHand’.

 -- Dado: winsound.MB_ICONQUESTION

     Reproduz o som ‘SystemQuestion’.

 -- Dado: winsound.MB_OK

     Reproduz o som ‘SystemDefault’.


File: python.info,  Node: Serviços específicos do Unix,  Next: Interface de linha de comando CLI de módulos,  Prev: Serviços Específicos do MS Windows,  Up: A Biblioteca Padrão do Python

5.34 Serviços específicos do Unix
=================================

Os módulos descritos neste capítulo fornecem interfaces para recursos
que são exclusivos do sistema operacional Unix ou, em alguns casos, para
algumas ou várias variantes do mesmo.  Aqui está uma visão geral:

* Menu:

* shlex — Simple lexical analysis::
* posix — As chamadas de sistema mais comuns do POSIX::
* pwd — A senha do banco de dados::
* grp — O banco de dados de grupos::
* termios — Controle de tty no estilo POSIX::
* tty — Funções de controle de terminal::
* pty — Utilitários de pseudoterminal::
* fcntl — as chamadas de sistema fcntl e ioctl::
* resource — Informação de uso de recursos::
* syslog — Rotinas da biblioteca syslog do Unix::


File: python.info,  Node: shlex — Simple lexical analysis,  Next: posix — As chamadas de sistema mais comuns do POSIX,  Up: Serviços específicos do Unix

5.34.1 ‘shlex’ — Simple lexical analysis
----------------------------------------

'Código-fonte:' Lib/shlex.py(1)

__________________________________________________________________

The *note shlex: ced. class makes it easy to write lexical analyzers for
simple syntaxes resembling that of the Unix shell.  This will often be
useful for writing minilanguages, (for example, in run control files for
Python applications) or for parsing quoted strings.

The *note shlex: c4. module defines the following functions:

 -- Função: shlex.split (s, comments=False, posix=True)

     Split the string 's' using shell-like syntax.  If 'comments' is
     *note False: b49. (the default), the parsing of comments in the
     given string will be disabled (setting the *note commenters: 4a52.
     attribute of the *note shlex: ced. instance to the empty string).
     This function operates in POSIX mode by default, but uses non-POSIX
     mode if the 'posix' argument is false.

     Alterado na versão 3.12: Passing ‘None’ for 's' argument now raises
     an exception, rather than reading *note sys.stdin: 53d.

 -- Função: shlex.join (split_command)

     Concatenate the tokens of the list 'split_command' and return a
     string.  This function is the inverse of *note split(): 53c.

          >>> from shlex import join
          >>> print(join(['echo', '-n', 'Multiple words']))
          echo -n 'Multiple words'

     The returned value is shell-escaped to protect against injection
     vulnerabilities (see *note quote(): 27d.).

     Adicionado na versão 3.8.

 -- Função: shlex.quote (s)

     Return a shell-escaped version of the string 's'.  The returned
     value is a string that can safely be used as one token in a shell
     command line, for cases where you cannot use a list.
          Aviso: The ‘shlex’ module is 'only designed for Unix shells'.

          The *note quote(): 27d. function is not guaranteed to be
          correct on non-POSIX compliant shells or shells from other
          operating systems such as Windows.  Executing commands quoted
          by this module on such shells can open up the possibility of a
          command injection vulnerability.

          Consider using functions that pass command arguments with
          lists such as *note subprocess.run(): b9e. with ‘shell=False’.

     Este idioma seria inseguro:

          >>> filename = 'somefile; rm -rf ~'
          >>> command = 'ls -l {}'.format(filename)
          >>> print(command)  # executed by a shell: boom!
          ls -l somefile; rm -rf ~

     *note quote(): 27d. lets you plug the security hole:

          >>> from shlex import quote
          >>> command = 'ls -l {}'.format(quote(filename))
          >>> print(command)
          ls -l 'somefile; rm -rf ~'
          >>> remote_command = 'ssh home {}'.format(quote(command))
          >>> print(remote_command)
          ssh home 'ls -l '"'"'somefile; rm -rf ~'"'"''

     The quoting is compatible with UNIX shells and with *note split():
     53c.:

          >>> from shlex import split
          >>> remote_command = split(remote_command)
          >>> remote_command
          ['ssh', 'home', "ls -l 'somefile; rm -rf ~'"]
          >>> command = split(remote_command[-1])
          >>> command
          ['ls', '-l', 'somefile; rm -rf ~']

     Adicionado na versão 3.3.

The *note shlex: c4. module defines the following class:

 -- Classe: shlex.shlex (instream=None, infile=None, posix=False,
          punctuation_chars=False)

     A *note shlex: ced. instance or subclass instance is a lexical
     analyzer object.  The initialization argument, if present,
     specifies where to read characters from.  It must be a
     file-/stream-like object with *note read(): 1e0c. and *note
     readline(): 1e46. methods, or a string.  If no argument is given,
     input will be taken from ‘sys.stdin’.  The second optional argument
     is a filename string, which sets the initial value of the *note
     infile: 4a53. attribute.  If the 'instream' argument is omitted or
     equal to ‘sys.stdin’, this second argument defaults to “stdin”.
     The 'posix' argument defines the operational mode: when 'posix' is
     not true (default), the *note shlex: ced. instance will operate in
     compatibility mode.  When operating in POSIX mode, *note shlex:
     ced. will try to be as close as possible to the POSIX shell parsing
     rules.  The 'punctuation_chars' argument provides a way to make the
     behaviour even closer to how real shells parse.  This can take a
     number of values: the default value, ‘False’, preserves the
     behaviour seen under Python 3.5 and earlier.  If set to ‘True’,
     then parsing of the characters ‘();<>|&’ is changed: any run of
     these characters (considered punctuation characters) is returned as
     a single token.  If set to a non-empty string of characters, those
     characters will be used as the punctuation characters.  Any
     characters in the *note wordchars: 4a54. attribute that appear in
     'punctuation_chars' will be removed from *note wordchars: 4a54.
     See *note Improved Compatibility with Shells: cee. for more
     information.  'punctuation_chars' can be set only upon *note shlex:
     ced. instance creation and can’t be modified later.

     Alterado na versão 3.6: The 'punctuation_chars' parameter was
     added.

Ver também
..........

Module *note configparser: 22.

     Parser for configuration files similar to the Windows ‘.ini’ files.

* Menu:

* shlex Objects::
* Regras de análise::
* Improved Compatibility with Shells::

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/shlex.py


File: python.info,  Node: shlex Objects,  Next: Regras de análise,  Up: shlex — Simple lexical analysis

5.34.1.1 shlex Objects
......................

A *note shlex: ced. instance has the following methods:

 -- Método: shlex.get_token ()

     Return a token.  If tokens have been stacked using *note
     push_token(): 4a58, pop a token off the stack.  Otherwise, read one
     from the input stream.  If reading encounters an immediate
     end-of-file, *note eof: 4a59. is returned (the empty string (‘''’)
     in non-POSIX mode, and ‘None’ in POSIX mode).

 -- Método: shlex.push_token (str)

     Push the argument onto the token stack.

 -- Método: shlex.read_token ()

     Read a raw token.  Ignore the pushback stack, and do not interpret
     source requests.  (This is not ordinarily a useful entry point, and
     is documented here only for the sake of completeness.)

 -- Método: shlex.sourcehook (filename)

     When *note shlex: ced. detects a source request (see *note source:
     4a5c. below) this method is given the following token as argument,
     and expected to return a tuple consisting of a filename and an open
     file-like object.

     Normally, this method first strips any quotes off the argument.  If
     the result is an absolute pathname, or there was no previous source
     request in effect, or the previous source was a stream (such as
     ‘sys.stdin’), the result is left alone.  Otherwise, if the result
     is a relative pathname, the directory part of the name of the file
     immediately before it on the source inclusion stack is prepended
     (this behavior is like the way the C preprocessor handles ‘#include
     "file.h"’).

     The result of the manipulations is treated as a filename, and
     returned as the first component of the tuple, with *note open():
     51c. called on it to yield the second component.  (Note: this is
     the reverse of the order of arguments in instance initialization!)

     This hook is exposed so that you can use it to implement directory
     search paths, addition of file extensions, and other namespace
     hacks.  There is no corresponding ‘close’ hook, but a shlex
     instance will call the *note close(): 1f6. method of the sourced
     input stream when it returns EOF.

     For more explicit control of source stacking, use the *note
     push_source(): 4a5d. and *note pop_source(): 4a5e. methods.

 -- Método: shlex.push_source (newstream, newfile=None)

     Push an input source stream onto the input stack.  If the filename
     argument is specified it will later be available for use in error
     messages.  This is the same method used internally by the *note
     sourcehook(): 4a5b. method.

 -- Método: shlex.pop_source ()

     Pop the last-pushed input source from the input stack.  This is the
     same method used internally when the lexer reaches EOF on a stacked
     input stream.

 -- Método: shlex.error_leader (infile=None, lineno=None)

     This method generates an error message leader in the format of a
     Unix C compiler error label; the format is ‘'"%s", line %d: '’,
     where the ‘%s’ is replaced with the name of the current source file
     and the ‘%d’ with the current input line number (the optional
     arguments can be used to override these).

     This convenience is provided to encourage *note shlex: c4. users to
     generate error messages in the standard, parseable format
     understood by Emacs and other Unix tools.

Instances of *note shlex: ced. subclasses have some public instance
variables which either control lexical analysis or can be used for
debugging:

 -- Atributo: shlex.commenters

     The string of characters that are recognized as comment beginners.
     All characters from the comment beginner to end of line are
     ignored.  Includes just ‘'#'’ by default.

 -- Atributo: shlex.wordchars

     The string of characters that will accumulate into multi-character
     tokens.  By default, includes all ASCII alphanumerics and
     underscore.  In POSIX mode, the accented characters in the Latin-1
     set are also included.  If *note punctuation_chars: 1b48. is not
     empty, the characters ‘~-./*?=’, which can appear in filename
     specifications and command line parameters, will also be included
     in this attribute, and any characters which appear in
     ‘punctuation_chars’ will be removed from ‘wordchars’ if they are
     present there.  If *note whitespace_split: 4a60. is set to ‘True’,
     this will have no effect.

 -- Atributo: shlex.whitespace

     Characters that will be considered whitespace and skipped.
     Whitespace bounds tokens.  By default, includes space, tab,
     linefeed and carriage-return.

 -- Atributo: shlex.escape

     Characters that will be considered as escape.  This will be only
     used in POSIX mode, and includes just ‘'\'’ by default.

 -- Atributo: shlex.quotes

     Characters that will be considered string quotes.  The token
     accumulates until the same quote is encountered again (thus,
     different quote types protect each other as in the shell.)  By
     default, includes ASCII single and double quotes.

 -- Atributo: shlex.escapedquotes

     Characters in *note quotes: 4a63. that will interpret escape
     characters defined in *note escape: 4a62.  This is only used in
     POSIX mode, and includes just ‘'"'’ by default.

 -- Atributo: shlex.whitespace_split

     If ‘True’, tokens will only be split in whitespaces.  This is
     useful, for example, for parsing command lines with *note shlex:
     ced, getting tokens in a similar way to shell arguments.  When used
     in combination with *note punctuation_chars: 1b48, tokens will be
     split on whitespace in addition to those characters.

     Alterado na versão 3.8: The *note punctuation_chars: 1b48.
     attribute was made compatible with the *note whitespace_split:
     4a60. attribute.

 -- Atributo: shlex.infile

     The name of the current input file, as initially set at class
     instantiation time or stacked by later source requests.  It may be
     useful to examine this when constructing error messages.

 -- Atributo: shlex.instream

     The input stream from which this *note shlex: ced. instance is
     reading characters.

 -- Atributo: shlex.source

     This attribute is ‘None’ by default.  If you assign a string to it,
     that string will be recognized as a lexical-level inclusion request
     similar to the ‘source’ keyword in various shells.  That is, the
     immediately following token will be opened as a filename and input
     will be taken from that stream until EOF, at which point the *note
     close(): 1f6. method of that stream will be called and the input
     source will again become the original input stream.  Source
     requests may be stacked any number of levels deep.

 -- Atributo: shlex.debug

     If this attribute is numeric and ‘1’ or more, a *note shlex: ced.
     instance will print verbose progress output on its behavior.  If
     you need to use this, you can read the module source code to learn
     the details.

 -- Atributo: shlex.lineno

     Source line number (count of newlines seen so far plus one).

 -- Atributo: shlex.token

     The token buffer.  It may be useful to examine this when catching
     exceptions.

 -- Atributo: shlex.eof

     Token used to determine end of file.  This will be set to the empty
     string (‘''’), in non-POSIX mode, and to ‘None’ in POSIX mode.

 -- Atributo: shlex.punctuation_chars

     A read-only property.  Characters that will be considered
     punctuation.  Runs of punctuation characters will be returned as a
     single token.  However, note that no semantic validity checking
     will be performed: for example, ‘>>>’ could be returned as a token,
     even though it may not be recognised as such by shells.

     Adicionado na versão 3.6.


File: python.info,  Node: Regras de análise,  Next: Improved Compatibility with Shells,  Prev: shlex Objects,  Up: shlex — Simple lexical analysis

5.34.1.2 Regras de análise
..........................

When operating in non-POSIX mode, *note shlex: ced. will try to obey to
the following rules.

   * Quote characters are not recognized within words (‘Do"Not"Separate’
     is parsed as the single word ‘Do"Not"Separate’);

   * Escape characters are not recognized;

   * Enclosing characters in quotes preserve the literal value of all
     characters within the quotes;

   * Closing quotes separate words (‘"Do"Separate’ is parsed as ‘"Do"’
     and ‘Separate’);

   * If *note whitespace_split: 4a60. is ‘False’, any character not
     declared to be a word character, whitespace, or a quote will be
     returned as a single-character token.  If it is ‘True’, *note
     shlex: ced. will only split words in whitespaces;

   * EOF is signaled with an empty string (‘''’);

   * It’s not possible to parse empty strings, even if quoted.

When operating in POSIX mode, *note shlex: ced. will try to obey to the
following parsing rules.

   * Quotes are stripped out, and do not separate words
     (‘"Do"Not"Separate"’ is parsed as the single word ‘DoNotSeparate’);

   * Non-quoted escape characters (e.g.  ‘'\'’) preserve the literal
     value of the next character that follows;

   * Enclosing characters in quotes which are not part of *note
     escapedquotes: 4a64. (e.g.  ‘"'"’)  preserve the literal value of
     all characters within the quotes;

   * Enclosing characters in quotes which are part of *note
     escapedquotes: 4a64. (e.g.  ‘'"'’)  preserves the literal value of
     all characters within the quotes, with the exception of the
     characters mentioned in *note escape: 4a62.  The escape characters
     retain its special meaning only when followed by the quote in use,
     or the escape character itself.  Otherwise the escape character
     will be considered a normal character.

   * EOF is signaled with a *note None: 675. value;

   * Quoted empty strings (‘''’) are allowed.


File: python.info,  Node: Improved Compatibility with Shells,  Prev: Regras de análise,  Up: shlex — Simple lexical analysis

5.34.1.3 Improved Compatibility with Shells
...........................................

Adicionado na versão 3.6.

The *note shlex: c4. class provides compatibility with the parsing
performed by common Unix shells like ‘bash’, ‘dash’, and ‘sh’.  To take
advantage of this compatibility, specify the ‘punctuation_chars’
argument in the constructor.  This defaults to ‘False’, which preserves
pre-3.6 behaviour.  However, if it is set to ‘True’, then parsing of the
characters ‘();<>|&’ is changed: any run of these characters is returned
as a single token.  While this is short of a full parser for shells
(which would be out of scope for the standard library, given the
multiplicity of shells out there), it does allow you to perform
processing of command lines more easily than you could otherwise.  To
illustrate, you can see the difference in the following snippet:

     >>> import shlex
     >>> text = "a && b; c && d || e; f >'abc'; (def \"ghi\")"
     >>> s = shlex.shlex(text, posix=True)
     >>> s.whitespace_split = True
     >>> list(s)
     ['a', '&&', 'b;', 'c', '&&', 'd', '||', 'e;', 'f', '>abc;', '(def', 'ghi)']
     >>> s = shlex.shlex(text, posix=True, punctuation_chars=True)
     >>> s.whitespace_split = True
     >>> list(s)
     ['a', '&&', 'b', ';', 'c', '&&', 'd', '||', 'e', ';', 'f', '>', 'abc', ';',
     '(', 'def', 'ghi', ')']

Of course, tokens will be returned which are not valid for shells, and
you’ll need to implement your own error checks on the returned tokens.

Instead of passing ‘True’ as the value for the punctuation_chars
parameter, you can pass a string with specific characters, which will be
used to determine which characters constitute punctuation.  For example:

     >>> import shlex
     >>> s = shlex.shlex("a && b || c", punctuation_chars="|")
     >>> list(s)
     ['a', '&', '&', 'b', '||', 'c']

     Nota: When ‘punctuation_chars’ is specified, the *note wordchars:
     4a54. attribute is augmented with the characters ‘~-./*?=’.  That
     is because these characters can appear in file names (including
     wildcards) and command-line arguments (e.g.  ‘--color=auto’).
     Hence:

          >>> import shlex
          >>> s = shlex.shlex('~/a && b-c --color=auto || d *.py?',
          ...                 punctuation_chars=True)
          >>> list(s)
          ['~/a', '&&', 'b-c', '--color=auto', '||', 'd', '*.py?']

     However, to match the shell as closely as possible, it is
     recommended to always use ‘posix’ and *note whitespace_split: 4a60.
     when using *note punctuation_chars: 1b48, which will negate *note
     wordchars: 4a54. entirely.

For best effect, ‘punctuation_chars’ should be set in conjunction with
‘posix=True’.  (Note that ‘posix=False’ is the default for *note shlex:
ced.)


File: python.info,  Node: posix — As chamadas de sistema mais comuns do POSIX,  Next: pwd — A senha do banco de dados,  Prev: shlex — Simple lexical analysis,  Up: Serviços específicos do Unix

5.34.2 ‘posix’ — As chamadas de sistema mais comuns do POSIX
------------------------------------------------------------

__________________________________________________________________

Este módulo fornece acesso à funcionalidade do sistema operacional
padronizada pelo padrão C e pelo padrão POSIX (uma interface Unix
levemente disfarçada).

*note Disponibilidade: 1ed8.: Unix.

'Não importe este módulo diretamente.'  Em vez disso, importe o módulo
*note os: a1, que fornece uma versão 'portátil' dessa interface.  No
Unix, o módulo *note os: a1. fornece um superconjunto da interface *note
posix: ad.  Em sistemas operacionais não Unix, o módulo *note posix: ad.
não está disponível, mas um subconjunto está sempre disponível na
interface *note os: a1.  Uma vez que *note os: a1. é importado, seu uso
'não' causa penalidade de desempenho em comparação com *note posix: ad.
Além disso, *note os: a1. fornece algumas funcionalidades adicionais,
como chamar automaticamente *note putenv(): 922. quando uma entrada em
‘os.environ’ é alterada.

Erros são relatados como exceções.  As exceções usuais são dadas para
erros de tipo, enquanto os erros relatados pelas chamadas do sistema
levantam *note OSError: 417.

* Menu:

* Suporte a arquivos grandes::
* Conteúdo notável do módulo::


File: python.info,  Node: Suporte a arquivos grandes,  Next: Conteúdo notável do módulo,  Up: posix — As chamadas de sistema mais comuns do POSIX

5.34.2.1 Suporte a arquivos grandes
...................................

Vários sistemas operacionais (incluindo AIX e Solaris) fornecem suporte
a arquivos maiores que 2 GiB a partir de um modelo de programação C em
que int e long são valores de 32 bits.  Isso geralmente é realizado
definindo o tamanho relevante e os tipos de deslocamento como valores de
64 bits.  Esses arquivos às vezes são chamados de 'arquivos grandes'.

O suporte a arquivos grandes é ativado no Python quando o tamanho de um
‘off_t’ é maior que a long e long long é pelo menos tão grande quanto um
‘off_t’.  Pode ser necessário configurar e compilar o Python com certos
sinalizadores do compilador para ativar esse modo.  Por exemplo, com o
Solaris 2.6 e 2.7, você precisa fazer algo como:

     CFLAGS="`getconf LFS_CFLAGS`" OPT="-g -O2 $CFLAGS" \
             ./configure

Em sistemas Linux com capacidade para arquivos grandes, isso pode
funcionar:

     CFLAGS='-D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64' OPT="-g -O2 $CFLAGS" \
             ./configure


File: python.info,  Node: Conteúdo notável do módulo,  Prev: Suporte a arquivos grandes,  Up: posix — As chamadas de sistema mais comuns do POSIX

5.34.2.2 Conteúdo notável do módulo
...................................

Além de muitas funções descritas na documentação do módulo *note os: a1,
*note posix: ad. define o seguinte item de dados:

 -- Dado: posix.environ

     Um dicionário que representa o ambiente de strings no momento em
     que o interpretador foi iniciado.  Chaves e valores são bytes no
     Unix e str no Windows.  Por exemplo, ‘environ[b'HOME']’
     (‘environ['HOME']’ no Windows) é o nome do caminho do diretório
     inicial, equivalente a ‘getenv("HOME")’ em C .

     A modificação deste dicionário não afeta o ambiente de strings
     passado por *note execv(): 2cf9, *note popen(): a91. ou *note
     system(): 14a5.  Se você precisar alterar o ambiente, passe
     ‘environ’ para *note execve(): 1138. ou adicione atribuições de
     variável e instruções de exportação para a string de comando para
     *note system(): 14a5. ou *note popen(): a91.

     Alterado na versão 3.2: No Unix, chaves e valores são bytes.

          Nota: O módulo *note os: a1. fornece uma implementação
          alternativa de ‘environ’ que atualiza o ambiente ao ocorrerem
          modificações.  Observe também que a atualização de *note
          os.environ: 11f9. tornará este dicionário obsoleto.  O uso do
          módulo *note os: a1. é recomendado sobre o acesso direto ao
          módulo *note posix: ad.


File: python.info,  Node: pwd — A senha do banco de dados,  Next: grp — O banco de dados de grupos,  Prev: posix — As chamadas de sistema mais comuns do POSIX,  Up: Serviços específicos do Unix

5.34.3 ‘pwd’ — A senha do banco de dados
----------------------------------------

__________________________________________________________________

Este módulo provê acesso ao banco de dados das contas de usuário do
sistema e suas respectivas senhas.  Isto está disponível para todas as
versões do Unix.

*note Disponibilidade: 1ed8.: Unix, not WASI, not iOS.

As entradas do banco de dados de senhas são reportadas como um objeto do
tipo tupla, cujos atributos correspondem aos membros da estrutura
‘passwd’ (Campos dos atributos abaixo, veja ‘<pwd.h>’):

Índice      Atributo            Significado
                                
------------------------------------------------------------------
                                
0           ‘pw_name’           Nome de login
                                
                                
1           ‘pw_passwd’         Senha encriptada opcional
                                
                                
2           ‘pw_uid’            ID numérico do usuário
                                
                                
3           ‘pw_gid’            ID numérico do grupo
                                
                                
4           ‘pw_gecos’          Nome do usuário ou campo de
                                comentário
                                
                                
5           ‘pw_dir’            Diretório home do usuário
                                
                                
6           ‘pw_shell’          Interpretador de comandos do
                                usuário
                                

O uid e o gid são números inteiros, e os outros são strings.  *note
KeyError: 344. é levando se o campo requerido não puder ser encontrado.

     Nota: Em Unix tradicional, o campo ‘pw_passwd’ geralmente contém
     uma senha encriptada com um algoritmo derivado de DES. No entanto,
     a maioria dos sistemas tipo Unix modernos usam o chamado sistema
     'shadow password'.  Nesses Unixes o campo 'pw_passwd' só contém um
     asterisco (‘'*'’) ou a letra ‘'x'’ e a senha encriptada é guardada
     no arquivo ‘/etc/shadow’ o qual não é permitido o acesso irrestrito
     a leitura.  Se o campo 'pw_passwd' contém alguma coisa útil
     dependerá do sistema.

Isto define os seguintes itens

 -- Função: pwd.getpwuid (uid)

     Retorna a entrada do banco de dados de senhas para um dado ID de
     usuário

 -- Função: pwd.getpwnam (name)

     Retorna a entrada do banco de dados de senhas para um dado nome de
     usuário

 -- Função: pwd.getpwall ()

     Retorna uma lista de todos as entradas disponíveis no banco de
     dados de senhas, em uma ordem arbitrária.

Ver também
..........

Módulo *note grp: 66.

     Uma interface para o banco de dados do grupo, similar a esta.


File: python.info,  Node: grp — O banco de dados de grupos,  Next: termios — Controle de tty no estilo POSIX,  Prev: pwd — A senha do banco de dados,  Up: Serviços específicos do Unix

5.34.4 ‘grp’ — O banco de dados de grupos
-----------------------------------------

__________________________________________________________________

Este módulo fornece acesso ao banco de dados de grupos Unix.  Ele está
disponível em todas as versões do Unix.

*note Disponibilidade: 1ed8.: Unix, not WASI, not Android, not iOS.

As entradas do banco de dados de grupos são relatadas como um objeto
tupla ou similar, cujos atributos correspondem aos membros da estrutura
‘group’ (campo Atributo abaixo, consulte ‘<grp.h>’):

Índice      Atributo        Significado
                            
------------------------------------------------------------------
                            
0           gr_name         o nome do grupo
                            
                            
1           gr_passwd       a senha do grupo (criptografada);
                            geralmente vazia
                            
                            
2           gr_gid          O ID numérico do grupo
                            
                            
3           gr_mem          todos os nomes de usuários dos
                            membros do grupo
                            

O gid é um inteiro, nome e senha são strings, e a lista de membros é uma
lista de strings.  (Observe que a maioria dos usuários não são listados
explicitamente como membros do grupo em que estão, de acordo com o banco
de dados de senhas.  Verifique ambos os bancos de dados para obter
informações completas sobre associação.  Observe também que um ‘gr_name’
que começa com ‘+’ ou ‘-’ provavelmente é uma referência YP/NIS e pode
não ser acessível via *note getgrnam(): 33fe. ou *note getgrgid(): d48.)

Isto define os seguintes itens

 -- Função: grp.getgrgid (id)

     Retorna a entrada do banco de dados de grupos para o ID do grupo
     numérico fornecido.  *note KeyError: 344. é levantada se a entrada
     solicitada não puder ser encontrada.

     Alterado na versão 3.10: *note TypeError: 2c3. é levantada para
     argumentos não inteiros, como pontos flutuantes ou strings.

 -- Função: grp.getgrnam (name)

     Retorna a entrada do banco de dados de grupos para o nome do grupo
     fornecido.  *note KeyError: 344. é levantada se a entrada
     solicitada não puder ser encontrada.

 -- Função: grp.getgrall ()

     Retorna uma lista de todas as entradas de grupo disponíveis, em
     ordem arbitrária.

Ver também
..........

Módulo *note pwd: b2.

     Uma interface para o banco de dados de usuários, semelhante a esta.


File: python.info,  Node: termios — Controle de tty no estilo POSIX,  Next: tty — Funções de controle de terminal,  Prev: grp — O banco de dados de grupos,  Up: Serviços específicos do Unix

5.34.5 ‘termios’ — Controle de tty no estilo POSIX
--------------------------------------------------

__________________________________________________________________

Este módulo fornece uma interface para as chamadas POSIX para controle
de E/S do tty.  Para uma descrição completa dessas chamadas, consulte a
página de manual Unix ‘termios(3)(1)’.  Está disponível apenas para as
versões Unix que tenham suporte ao controle de E/S de tty no estilo
POSIX do 'termios' configurado durante a instalação.

*note Disponibilidade: 1ed8.: Unix.

Todas as funções neste módulo usam um descritor de arquivo 'fd' como seu
primeiro argumento.  Pode ser um descritor de arquivo de tipo inteiro,
como retornado por ‘sys.stdin.fileno()’, ou um *note objeto arquivo:
1203, como o próprio ‘sys.stdin’.

Este módulo também define todas as constantes necessárias para trabalhar
com as funções fornecidas aqui; estes têm o mesmo nome de seus
equivalentes em C. Consulte a documentação do sistema para mais
informações sobre o uso dessas interfaces de controle de terminal.

O módulo define as seguintes funções:

 -- Função: termios.tcgetattr (fd)

     Retorna uma lista contendo os atributos tty para o descritor de
     arquivo 'fd', da seguinte forma: ‘[iflag, oflag, cflag, lflag,
     ispeed, ospeed, cc]’ onde 'cc' é uma lista dos caracteres especiais
     do tty (cada uma string de comprimento 1, exceto os itens com
     índices ‘VMIN’ e ‘VTIME’, que são números inteiros quando esses
     campos são definidos).  A interpretação dos sinalizadores e as
     velocidades, bem como a indexação no vetor 'cc', devem ser feitas
     usando as constantes simbólicas definidas no módulo *note termios:
     e1.

 -- Função: termios.tcsetattr (fd, when, attributes)

     Define os atributos do tty para descritor de arquivo 'fd' a partir
     de 'attributes', que é uma lista como a retornada por *note
     tcgetattr(): 176c.  O argumento 'when' determina quando os
     atributos são alterados:

      -- Dado: termios.TCSANOW

          Altera os atributos imediatamente.

      -- Dado: termios.TCSADRAIN

          Altera os atributos depois de transmitir todas as saídas
          enfileiradas.

      -- Dado: termios.TCSAFLUSH

          Altera os atributos depois de transmitir todas as saídas
          enfileiradas e descartar todas as entradas enfileiradas.

 -- Função: termios.tcsendbreak (fd, duration)

     Envia uma quebra no descritor de arquivo 'fd'.  Uma duração zero,
     representada por 'duration', envia uma pausa por 0,25 a 0,5
     segundos; 'duration' com valor diferente de zero tem um significado
     dependente do sistema.

 -- Função: termios.tcdrain (fd)

     Aguarda até que toda a saída escrita no descritor de arquivo 'fd'
     seja transmitida.

 -- Função: termios.tcflush (fd, queue)

     Descarta dados na fila no descritor de arquivo 'fd'.  O seletor
     'queue' especifica qual fila: ‘TCIFLUSH’ para a fila de entrada,
     ‘TCOFLUSH’ para a fila de saída ou ‘TCIOFLUSH’ para as duas filas.

 -- Função: termios.tcflow (fd, action)

     Suspende ou retoma a entrada ou saída no descritor de arquivo 'fd'.
     O argumento 'action' pode ser ‘TCOOFF’ para suspender a saída,
     ‘TCOON’ para reiniciar a saída, ‘TCIOFF’ para suspender a entrada
     ou ‘TCION’ para reiniciar a entrada.

 -- Função: termios.tcgetwinsize (fd)

     Retorna uma tupla ‘(ws_row, ws_col)’ contendo o tamanho da janela
     de terminal para o descritor de arquivo 'fd'.  Requer
     ‘termios.TIOCGWINSZ’ ou ‘termios.TIOCGSIZE’.

     Adicionado na versão 3.11.

 -- Função: termios.tcsetwinsize (fd, winsize)

     Define o tamanho da janela de terminal para o descritor de arquivo
     'fd' de 'winsize', que é uma tupla de dois elementos ‘(ws_row,
     ws_col)’ como a retornada por *note tcgetwinsize(): 4a85.  Requer
     pelo menos um dos pares (‘termios.TIOCGWINSZ’,
     ‘termios.TIOCSWINSZ’); (‘termios.TIOCGSIZE’, ‘termios.TIOCSSIZE’) a
     ser definido.

     Adicionado na versão 3.11.

Ver também
..........

Módulo *note tty: 100.

     Funções de conveniência para operações comuns de controle de
     terminal.

* Menu:

* Exemplo: Exemplo<15>.

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/termios(3)


File: python.info,  Node: Exemplo<15>,  Up: termios — Controle de tty no estilo POSIX

5.34.5.1 Exemplo
................

Aqui está uma função que solicita uma senha com o eco desativado.
Observe a técnica usando uma chamada separada *note tcgetattr(): 176c. e
uma instrução *note try: 6e9. … *note finally: 9d2. para garantir que os
atributos tty antigos sejam restaurados exatamente, aconteça o que
acontecer:

     def getpass(prompt="Senha: "):
         import termios, sys
         fd = sys.stdin.fileno()
         old = termios.tcgetattr(fd)
         new = termios.tcgetattr(fd)
         new[3] = new[3] & ~termios.ECHO          # lflags
         try:
             termios.tcsetattr(fd, termios.TCSADRAIN, new)
             passwd = input(prompt)
         finally:
             termios.tcsetattr(fd, termios.TCSADRAIN, old)
         return passwd


File: python.info,  Node: tty — Funções de controle de terminal,  Next: pty — Utilitários de pseudoterminal,  Prev: termios — Controle de tty no estilo POSIX,  Up: Serviços específicos do Unix

5.34.6 ‘tty’ — Funções de controle de terminal
----------------------------------------------

'Código-fonte:' Lib/tty.py(1)

__________________________________________________________________

O módulo *note tty: 100. define funções para colocar o tty nos modos de
cbreak e não tratados (raw).

*note Disponibilidade: 1ed8.: Unix.

Por requerer o módulo *note termios: e1, ele funcionará apenas no Unix.

O módulo *note tty: 100. define as seguintes funções:

 -- Função: tty.cfmakeraw (mode)

     Converte a lista de atributos de tty 'mode', que é uma lista como a
     retornada por *note termios.tcgetattr(): 176c, para a de um tty em
     modo raw.

     Adicionado na versão 3.12.

 -- Função: tty.cfmakecbreak (mode)

     Converte a lista de atributos de tty 'mode', que é uma lista como a
     retornada por *note termios.tcgetattr(): 176c, para a de um tty em
     modo cbreak.

     Isto limpa os sinalizadores de modo local ‘ECHO’ e ‘ICANON’ em
     'mode' bem como configura a entrada mínima para 1 byte sem atraso.

     Adicionado na versão 3.12.

     Alterado na versão 3.12.2: O sinalizador ‘ICRNL’ não está mais
     limpo.  Isso corresponde ao comportamento ‘stty cbreak’ do Linux e
     macOS e ao que *note setcbreak(): 176e. historicamente fez.

 -- Função: tty.setraw (fd, when=termios.TCSAFLUSH)

     Altera o modo do descritor de arquivo 'fd' para raw.  Se 'when' for
     omitido, o padrão é *note termios.TCSAFLUSH: 4a80, e é passado para
     *note termios.tcsetattr(): 17eb.  O retorna valor de *note
     termios.tcgetattr(): 176c. é salvo antes de definir 'fd' para o
     modo raw; esse valor é retornado.

     Alterado na versão 3.12: O valor de retorno agora é o atributos
     originais do tty, em vez de ‘None’.

 -- Função: tty.setcbreak (fd, when=termios.TCSAFLUSH)

     Altera o modo de descritor de arquivo 'fd' para cbreak.  Se 'when'
     for omitido, o padrão é *note termios.TCSAFLUSH: 4a80, e é passado
     para *note termios.tcsetattr(): 17eb.  O retorna valor de *note
     termios.tcgetattr(): 176c. é salvo antes de definir 'fd' para o
     modo cbreak; esse valor é retornado.

     Isto limpa os sinalizadores de modo local ‘ECHO’ e ‘ICANON’ bem
     como configura a entrada mínima para 1 byte sem atraso.

     Alterado na versão 3.12: O valor de retorno agora é o atributos
     originais do tty, em vez de ‘None’.

     Alterado na versão 3.12.2: O sinalizador ‘ICRNL’ não está mais
     limpo.  Isso restaura o comportamento do Python 3.11 e anteriores,
     além de corresponder ao que Linux, macOS e BSDs descrevem em suas
     páginas de manual ‘stty(1)’ em relação ao modo cbreak.

Ver também
..........

Módulo *note termios: e1.

     Interface baixo nível para controle de terminal.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/tty.py


File: python.info,  Node: pty — Utilitários de pseudoterminal,  Next: fcntl — as chamadas de sistema fcntl e ioctl,  Prev: tty — Funções de controle de terminal,  Up: Serviços específicos do Unix

5.34.7 ‘pty’ — Utilitários de pseudoterminal
--------------------------------------------

'Código-fonte:' Lib/pty.py(1)

__________________________________________________________________

O módulo *note pty: b1. define operações para lidar com o conceito de
pseudoterminal: iniciar outro processo e poder gravar e ler de seu
terminal de controle programaticamente.

*note Disponibilidade: 1ed8.: Unix.

O tratamento do pseudoterminal é altamente dependente da plataforma.
Esse código foi testado principalmente no Linux, no FreeBSD e no macOS
(supõe-se que funcione em outras plataformas POSIX, mas não foi testado
exaustivamente).

O módulo *note pty: b1. define as seguintes funções:

 -- Função: pty.fork ()

     Faz um fork.  Conecta o terminal de controle do filho a um
     pseudoterminal.  O valor de retorno é ‘(pid, fd)’.  Observe que a
     criança recebe 'pid' 0 e o 'fd' é 'inválido'.  O valor de retorno
     do pai é o 'pid' do filho, e o 'fd' é um descritor de arquivo
     conectado ao terminal de controle do filho (e também à entrada e à
     saída padrão do filho).

          Aviso: No macOS, o uso desta função é inseguro quando
          combinado com o uso de APIs de sistema de nível mais alto, e
          isso inclui o uso de *note urllib.request: 10b.

 -- Função: pty.openpty ()

     Abre um novo par de pseudoterminais, usando *note os.openpty():
     2d3b, se possível, ou código de emulação para sistemas genérico
     Unix .  Retorna um par de descritores de arquivo ‘(master, slave)’,
     para a extremidade mestre e escrava, respectivamente.

 -- Função: pty.spawn (argv[, master_read[, stdin_read]])

     Gera um processo e conecta seu terminal de controle com o E/S
     padrão do processo atual.  Isso é frequentemente usado para
     confundir programas que insistem em ler no terminal de controle.
     Espera-se que o processo gerado por trás do pty acabe sendo
     encerrado e, quando isso acontecer, o 'spawn' é retornado.

     Um laço copia o STDIN do processo atual para o filho e os dados
     recebidos do filho para o STDOUT do site processar atual.  Não é
     sinalizado para o filho se o STDIN do processar atual fechar.

     As funções 'master_read' e o 'stdin_read' recebem um descritor de
     arquivo do qual devem ler e devem sempre retorna uma string de
     bytes.  Para forçar 'spawn' retornar antes que o processo filho
     saia, um byte vazio vetor deve ser retornado para sinalizar o fim
     do arquivo.

     A implementação padrão para ambos os funções vai ler e retornar até
     1024 bytes cada vez que a função for chamada.  A função de retorno
     'master_read' é passada para o descritor de arquivo mestre do
     pseudoterminal para ler a saída do processo filho, e ao
     'stdin_read' é passado o descritor de arquivo 0, para ler a entrada
     padrão do processo pai.

     Retornar uma string de bytes vazia de qualquer uma das funções de
     retorno é interpretado como uma condição de fim de vida (EOF), e
     que a função de retorno não será chamada depois disso.  Se
     'stdin_read' sinalizar EOF, o terminal de controle não poderá mais
     se comunicar com o processo pai OU o processo filho.  A menos que o
     filho processar seja encerrado sem nenhuma entrada, 'spawn' vai
     então fazer o laço para sempre.  Se 'master_read' sinalizar EOF, os
     mesmos comportamento resultados (pelo menos no Linux).

     Retorna o valor de status de saída de *note os.waitpid(): dc2. no
     processo filho.

     *note os.waitstatus_to_exitcode(): 923. pode ser usado para
     converter o status de saída em um código de saída.

     Levanta um *note evento de auditoria: 19fa. ‘pty.spawn’ com o
     argumento ‘argv’.

     Alterado na versão 3.4: *note spawn(): fb6. agora retorna o valor
     de status de *note os.waitpid(): dc2. no processo filho.

* Menu:

* Exemplo: Exemplo<16>.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/pty.py


File: python.info,  Node: Exemplo<16>,  Up: pty — Utilitários de pseudoterminal

5.34.7.1 Exemplo
................

O programa a seguir funciona como o comando Unix ‘script(1)(1)’ , usando
um pseudoterminal para registrar todas as entradas e saídas de uma
sessão de terminal em um “script”.

     import argparse
     import os
     import pty
     import sys
     import time

     parser = argparse.ArgumentParser()
     parser.add_argument('-a', dest='append', action='store_true')
     parser.add_argument('-p', dest='use_python', action='store_true')
     parser.add_argument('filename', nargs='?', default='typescript')
     options = parser.parse_args()

     shell = sys.executable if options.use_python else os.environ.get('SHELL', 'sh')
     filename = options.filename
     mode = 'ab' if options.append else 'wb'

     with open(filename, mode) as script:
         def read(fd):
             data = os.read(fd, 1024)
             script.write(data)
             return data

         print('Script started, file is', filename)
         script.write(('Script started on %s\n' % time.asctime()).encode())

         pty.spawn(shell, read)

         script.write(('Script done on %s\n' % time.asctime()).encode())
         print('Script done, file is', filename)

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/script(1)


File: python.info,  Node: fcntl — as chamadas de sistema fcntl e ioctl,  Next: resource — Informação de uso de recursos,  Prev: pty — Utilitários de pseudoterminal,  Up: Serviços específicos do Unix

5.34.8 ‘fcntl’ — as chamadas de sistema ‘fcntl’ e ‘ioctl’
---------------------------------------------------------

__________________________________________________________________

Este módulo executa o controle de arquivos e de E/S em descritores de
arquivos.  É uma interface para as rotinas ‘fcntl()’ e ‘ioctl()’ do
Unix.  Veja as páginas de manual do Unix ‘fcntl(2)(1)’ e ‘ioctl(2)(2)’
para mais detalhes.

*note Disponibilidade: 1ed8.: Unix, not WASI.

Todas as funções neste módulo recebem um descritor de arquivo 'fd' como
seu primeiro argumento.  Este pode ser um descritor de arquivo inteiro,
como retornado por ‘sys.stdin.fileno()’, ou um objeto *note io.IOBase:
1f5, como o próprio ‘sys.stdin’, que fornece um *note fileno(): 15d0.
que retorna um descritor de arquivo genuíno.

Alterado na versão 3.3: As operações neste módulo costumavam levantar um
*note IOError: 108b, mas agora levantam um *note OSError: 417.

Alterado na versão 3.8: O módulo ‘fcntl’ agora contém constantes
‘F_ADD_SEALS’, ‘F_GET_SEALS’ e ‘F_SEAL_*’ para selar descritores de
arquivo *note os.memfd_create(): a13.

Alterado na versão 3.9: No macOS, o módulo ‘fcntl’ expõe a constante
‘F_GETPATH’, que obtém o caminho de um arquivo de um descritor de
arquivo.  No Linux(>=3.15), o módulo ‘fcntl’ expõe as constantes
‘F_OFD_GETLK’, ‘F_OFD_SETLK’ e ‘F_OFD_SETLKW’, que são usadas ao
trabalhar com travas de descrição de arquivo aberto.

Alterado na versão 3.10: No Linux >= 2.6.11, o módulo ‘fcntl’ expõe as
constantes ‘F_GETPIPE_SZ’ e ‘F_SETPIPE_SZ’, que permitem verificar e
modificar o tamanho de um encadeamento, respectivamente.

Alterado na versão 3.11: No FreeBSD, o módulo ‘fcntl’ expõe as
constantes ‘F_DUP2FD’ e ‘F_DUP2FD_CLOEXEC’, que permitem duplicar um
descritor de arquivo, sendo que esta última define também o sinalizador
‘FD_CLOEXEC’.

Alterado na versão 3.12: No Linux >= 4.5, o módulo *note fcntl: 59.
expõe as constantes ‘FICLONE’ e ‘FICLONERANGE’, que permitem
compartilhar alguns dados de um arquivo com outro arquivo por meio de
reflinking em alguns sistemas de arquivos (por exemplo, btrfs, OCFS2 e
XFS). Esse comportamento é comumente chamado de “copy-on-write”.

Alterado na versão 3.13: No Linux >= 2.6.32, o módulo ‘fcntl’ expõe as
constantes ‘F_GETOWN_EX’, ‘F_SETOWN_EX’, ‘F_OWNER_TID’, ‘F_OWNER_PID’,
‘F_OWNER_PGRP’, que permitem direcionar sinais de disponibilidade de E/S
para uma thread, processo ou grupo de processos específico.  No Linux >=
4.13, o módulo ‘fcntl’ expõe as constantes ‘F_GET_RW_HINT’,
‘F_SET_RW_HINT’, ‘F_GET_FILE_RW_HINT’, ‘F_SET_FILE_RW_HINT’ e
‘RWH_WRITE_LIFE_*’, que permitem informar o kernel sobre o tempo de vida
relativo esperado de gravações em um determinado nó-i ou por meio de uma
descrição de arquivo aberto específica.  No Linux >= 5.1 e NetBSD, o
módulo ‘fcntl’ expõe a constante ‘F_SEAL_FUTURE_WRITE’ para uso com as
operações ‘F_ADD_SEALS’ e ‘F_GET_SEALS’.  No FreeBSD, o módulo ‘fcntl’
expõe as constantes ‘F_READAHEAD’, ‘F_ISUNIONSTACK’ e ‘F_KINFO’.  No
macOS e FreeBSD, o módulo ‘fcntl’ expõe a constante ‘F_RDAHEAD’.  No
NetBSD e AIX, o módulo ‘fcntl’ expõe a constante ‘F_CLOSEM’.  No NetBSD,
o módulo ‘fcntl’ expõe a constante ‘F_MAXFD’.  No macOS e no NetBSD, o
módulo ‘fcntl’ expõe as constantes ‘F_GETNOSIGPIPE’ e ‘F_SETNOSIGPIPE’.

O módulo define as seguintes funções:

 -- Função: fcntl.fcntl (fd, cmd, arg=0, /)

     Executa a operação 'cmd' no descritor de arquivo 'fd' (objetos
     arquivo que fornecem um método *note fileno(): 15d0. também são
     aceitos).  Os valores usados para 'cmd' dependem do sistema
     operacional e estão disponíveis como constantes no módulo *note
     fcntl: 59, usando os mesmos nomes usados nos arquivos de cabeçalho
     C relevantes.  O argumento 'arg' pode ser um valor inteiro, um
     objeto *note bytes: 1c2. ou uma string.  O tipo e o tamanho de
     'arg' devem corresponder ao tipo e ao tamanho do argumento da
     operação, conforme especificado na documentação C relevante.

     Quando 'arg' é um inteiro, a função retorna o valor de retorno
     inteiro da chamada C ‘fcntl()’.

     Quando o argumento é bytes, ele representa uma estrutura binária,
     por exemplo, criada por *note struct.pack(): 12b8.  Um valor de
     string é codificado em binário usando a codificação UTF-8.  Os
     dados binários são copiados para um buffer cujo endereço é passado
     para a chamada ‘fcntl()’ em C. O valor de retorno após uma chamada
     bem-sucedida é o conteúdo do buffer, convertido em um objeto *note
     bytes: 1c2.  O comprimento do objeto retornado será igual ao
     comprimento do argumento 'arg'.  Este é limitado a 1024 bytes.

     Se a chamada a ‘fcntl()’ falhar, um exceção *note OSError: 417. é
     levantada.

          Nota: Se o tipo ou o tamanho de 'arg' não corresponder ao tipo
          ou tamanho do argumento da operação (por exemplo, se um
          inteiro for passado quando um ponteiro for esperado, ou se as
          informações retornadas no buffer pelo sistema operacional
          forem maiores que 1024 bytes), é mais provável que isso
          resulte em uma violação de segmentação ou em uma corrupção de
          dados mais sutil.

     Levanta um *note evento de auditoria: 19fa. ‘fcntl.fcntl’ com os
     argumentos ‘fd’, ‘cmd’, ‘arg’.

 -- Função: fcntl.ioctl (fd, request, arg=0, mutate_flag=True, /)

     Esta função é idêntica à função *note fcntl(): 3652, exceto que o
     tratamento de argumentos é ainda mais complicado.

     O parâmetro 'request' é limitado a valores que cabem em 32 ou 64
     bits, dependendo da plataforma.  Constantes adicionais de interesse
     para uso como argumento 'request' podem ser encontradas no módulo
     *note termios: e1, com os mesmos nomes usados nos arquivos de
     cabeçalho C relevantes.

     O parâmetro 'arg' pode ser um inteiro, um *note objeto bytes ou
     similar: d4f. ou uma string.  O tipo e o tamanho de 'arg' devem
     corresponder ao tipo e ao tamanho do argumento da operação,
     conforme especificado na documentação C relevante.

     Se 'arg' não oferecer suporte à interface de buffer de leitura e
     escrita ou o 'mutate_flag' for falso, o comportamento será o mesmo
     da função *note fcntl(): 3652.

     Se 'arg' oferece suporte à interface de buffer de leitura e escrita
     (como *note bytearray: 2ea.) e 'mutate_flag' for true (o padrão), o
     buffer será (na prática) passado para a chamada de sistema
     subjacente ‘ioctl()’, o código de retorno desta última será passado
     de volta para o Python que fez a chamada, e o novo conteúdo do
     buffer refletirá a ação de ‘ioctl()’.  Esta é uma pequena
     simplificação, pois se o buffer fornecido tiver menos de 1024
     bytes, ele será primeiro copiado para um buffer estático de 1024
     bytes, que será então passado para *note ioctl(): 14c3. e copiado
     de volta para o buffer fornecido.

     Se a chamada a ‘ioctl()’ falhar, uma exceção *note OSError: 417. é
     levantada.

          Nota: Se o tipo ou o tamanho de 'arg' não corresponder ao tipo
          ou tamanho do argumento da operação (por exemplo, se um
          inteiro for passado quando um ponteiro for esperado, ou se as
          informações retornadas no buffer pelo sistema operacional
          forem maiores que 1024 bytes ou o tamanho do objeto byte ou
          similar mutável é pequeno demais), é mais provável que isso
          resulte em uma violação de segmentação ou em uma corrupção de
          dados mais sutil.

     Um exemplo:

          >>> import array, fcntl, struct, termios, os
          >>> os.getpgrp()
          13341
          >>> struct.unpack('h', fcntl.ioctl(0, termios.TIOCGPGRP, "  "))[0]
          13341
          >>> buf = array.array('h', [0])
          >>> fcntl.ioctl(0, termios.TIOCGPGRP, buf, 1)
          0
          >>> buf
          array('h', [13341])

     Levanta um *note evento de auditoria: 19fa. ‘fcntl.ioctl’ com os
     argumentos ‘fd’, ‘request’, ‘arg’.

 -- Função: fcntl.flock (fd, operation, /)

     Executa a operação de trava 'operation' no descritor de arquivo
     'fd' (objetos arquivo que fornecem um método *note fileno(): 15d0.
     também são aceitos).  Consulte o manual do Unix ‘flock(2)(3)’ para
     obter detalhes.  (Em alguns sistemas, esta função é emulada usando
     ‘fcntl()’.)

     Se a chamada ‘flock()’ falhar, uma exceção *note OSError: 417. será
     levantada.

     Levanta um *note evento de auditoria: 19fa. ‘fcntl.flock’ com os
     argumentos ‘fd’ e ‘operation’.

 -- Função: fcntl.lockf (fd, cmd, len=0, start=0, whence=0, /)

     Este é essencialmente um invólucro em torno das chamadas de trava
     *note fcntl(): 3652.  'fd' é o descritor de arquivo (objetos
     arquivo que fornecem um método *note fileno(): 15d0. também são
     aceitos) do arquivo para travar ou destravar, e 'cmd' é um dos
     seguintes valores:

      -- Dado: fcntl.LOCK_UN

          Libera uma trava existente.

      -- Dado: fcntl.LOCK_SH

          Adquire uma trava compartilhada.

      -- Dado: fcntl.LOCK_EX

          Adquire uma trava exclusiva.

      -- Dado: fcntl.LOCK_NB

          Aplica OU (OR) bit a bit com qualquer uma das outras três
          constantes ‘LOCK_*’ para tornar a solicitação não bloqueante.

     Se ‘LOCK_NB’ for usado e a trava não puder ser obtido, uma exceção
     *note OSError: 417. será levantada e terá um atributo 'errno'
     definido como *note EACCES: 2444. ou *note EAGAIN: 2435.
     (dependendo do sistema operacional; para portabilidade, verifique
     ambos os valores).  Em pelo menos alguns sistemas, ‘LOCK_EX’ só
     pode ser usado se o descritor de arquivo se referir a um arquivo
     aberto para escrita.

     'len' é o número de bytes para travar, 'start' é o deslocamento de
     bytes em que a trava começa, em relação a 'whence', e 'whence' é
     como em *note io.IOBase.seek(): 12ce, especificamente:

        * ‘0’ – relativo ao início do arquivo (*note os.SEEK_SET: 12cf.)

        * ‘1’ – relativo à posição atual do buffer (*note os.SEEK_CUR:
          12d0.)

        * ‘2’ – relativo ao fim do arquivo (*note os.SEEK_END: 12d1.)

     O padrão para 'start' é 0, o que significa iniciar no início do
     arquivo.  O padrão para 'len' é 0, o que significa travar no final
     do arquivo.  O padrão para 'whence' também é 0.

     Levanta um *note evento de auditoria: 19fa. ‘fcntl.lockf’ com os
     argumentos ‘fd’, ‘cmd’, ‘len’, ‘start’, ‘whence’.

Exemplos (todos em um sistema compatível com SVR4):

     import struct, fcntl, os

     f = open(...)
     rv = fcntl.fcntl(f, fcntl.F_SETFL, os.O_NDELAY)

     lockdata = struct.pack('hhllhh', fcntl.F_WRLCK, 0, 0, 0, 0, 0)
     rv = fcntl.fcntl(f, fcntl.F_SETLKW, lockdata)

Observe que, no primeiro exemplo, a variável de valor de retorno 'rv'
conterá um valor inteiro; no segundo exemplo, ela conterá um objeto
*note bytes: 1c2.  O layout da estrutura da variável 'lockdata' depende
do sistema — portanto, usar a chamada *note flock(): 4406. pode ser
melhor.

Ver também
..........

Módulo *note os: a1.

     Se os sinalizadores de trava *note O_SHLOCK: 1476. e *note
     O_EXLOCK: 1477. estiverem presentes no módulo *note os: a1.
     (somente no BSD), a função *note os.open(): dba. fornece uma
     alternativa às funções *note lockf(): 1433. e *note flock(): 4406.

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/fcntl(2)

   (2) https://manpages.debian.org/ioctl(2)

   (3) https://manpages.debian.org/flock(2)


File: python.info,  Node: resource — Informação de uso de recursos,  Next: syslog — Rotinas da biblioteca syslog do Unix,  Prev: fcntl — as chamadas de sistema fcntl e ioctl,  Up: Serviços específicos do Unix

5.34.9 ‘resource’ — Informação de uso de recursos
-------------------------------------------------

__________________________________________________________________

Este módulo fornece mecanismos básicos para medir e controlar os
recursos do sistema usados por um programa.

*note Disponibilidade: 1ed8.: Unix, not WASI.

Constantes simbólicas são usadas para especificar recursos específicos
do sistema e para solicitar informações de uso sobre o processo atual ou
seus filhos.

Uma exceção *note OSError: 417. é levantada em caso de falha de chamada
de sistema.

 -- Exceção: resource.error

     Um apelido descontinuado de *note OSError: 417.

     Alterado na versão 3.3: Seguindo a PEP 3151(1), esta classe foi
     transformada em um apelido de *note OSError: 417.

* Menu:

* Limites de recursos::
* Uso de recursos::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3151/


File: python.info,  Node: Limites de recursos,  Next: Uso de recursos,  Up: resource — Informação de uso de recursos

5.34.9.1 Limites de recursos
............................

O uso de recursos pode ser limitado usando a função *note setrlimit():
1605. descrita abaixo.  Cada recurso é controlado por um par de limites:
um limite suave e um limite rígido.  O limite suave é o limite atual e
pode ser reduzido ou aumentado por um processo ao longo do tempo.  O
limite suave nunca pode exceder o limite rígido.  O limite rígido pode
ser reduzido para qualquer valor maior que o limite suave, mas não
aumentado.  (Somente processos com o UID efetivo do superusuário podem
aumentar um limite rígido.)

Os recursos específicos que podem ser limitados dependem do sistema.
Eles são descritos na página man ‘getrlimit(2)(1)’.  Os recursos
listados abaixo são suportados quando o sistema operacional subjacente
os suporta; recursos que não podem ser verificados ou controlados pelo
sistema operacional não são definidos neste módulo para essas
plataformas.

 -- Dado: resource.RLIM_INFINITY

     Constante usada para representar o limite de um recurso ilimitado.

 -- Função: resource.getrlimit (resource)

     Retorna uma tupla ‘(suave, rígido)’ com os limites soft e hard
     atuais de 'resource'.  Levanta *note ValueError: 202. se um recurso
     inválido for especificado, ou *note error: 4a9a. se a chamada do
     sistema subjacente falhar inesperadamente.

 -- Função: resource.setrlimit (resource, limits)

     Define novos limites de consumo de 'resource'.  O argumento
     'limits' deve ser uma tupla ‘(suave, rígido)’ de dois inteiros
     descrevendo os novos limites.  Um valor de *note RLIM_INFINITY:
     1604. pode ser usado para solicitar um limite ilimitado.

     Levanta *note ValueError: 202. se um recurso inválido for
     especificado, se o novo limite suave exceder o limite rígido ou se
     um processo tentar aumentar seu limite rígido.  Especificar um
     limite de *note RLIM_INFINITY: 1604. quando o limite rígido ou do
     sistema para esse recurso não for ilimitado resultará em uma
     exceção *note ValueError: 202.  Um processo com o UID efetivo de
     superusuário pode solicitar qualquer valor limite válido, incluindo
     ilimitado, mas *note ValueError: 202. ainda será levantada se o
     limite solicitado exceder o limite imposto pelo sistema.

     ‘setrlimit’ também pode levantar *note error: 4a9a. se a chamada do
     sistema subjacente falhar.

     VxWorks só oferece suporte a definir *note RLIMIT_NOFILE: 4a9c.

     Levanta um *note evento de auditoria: 19fa. ‘resource.setrlimit’
     com os argumentos ‘resource’, ‘limits’.

 -- Função: resource.prlimit (pid, resource[, limits])

     Combina *note setrlimit(): 1605. e *note getrlimit(): 1603. em uma
     única função e permite obter e definir os limites de recursos de um
     processo arbitrário.  Se 'pid' for 0, a chamada se aplica ao
     processo atual.  'resource' e 'limits' têm o mesmo significado que
     em *note setrlimit(): 1605, exceto que 'limits' é opcional.

     Quando 'limits' não é fornecido, a função retorna o limite de
     'resource' do processo 'pid'.  Quando 'limits' é fornecido, o
     limite de 'resource' do processo é definido e o limite de recurso
     anterior é retornado.

     Levanta *note ProcessLookupError: 1094. quando 'pid' não pode ser
     encontrado e *note PermissionError: d65. quando o usuário não tem
     ‘CAP_SYS_RESOURCE’ para o processo.

     Levanta um *note evento de auditoria: 19fa. ‘resource.prlimit’ com
     os argumentos ‘pid’, ‘resource’, ‘limits’.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.36 with glibc >= 2.13.

     Adicionado na versão 3.4.

Esses símbolos definem recursos cujo consumo pode ser controlado usando
as funções *note setrlimit(): 1605. e *note getrlimit(): 1603. descritas
abaixo.  Os valores desses símbolos são exatamente as constantes usadas
por programas em C.

A página man do Unix para ‘getrlimit(2)(2)’ lista os recursos
disponíveis.  Observe que nem todos os sistemas usam o mesmo símbolo ou
o mesmo valor para denotar o mesmo recurso.  Este módulo não tenta
mascarar diferenças de plataforma — símbolos não definidos para uma
plataforma não estarão disponíveis neste módulo para essa plataforma.

 -- Dado: resource.RLIMIT_CORE

     O tamanho máximo (em bytes) de um arquivo de núcleo (core file) que
     o processo atual pode criar.  Isso pode resultar na criação de um
     arquivo de núcleo parcial se um núcleo maior for necessário para
     conter a imagem completa do processo.

 -- Dado: resource.RLIMIT_CPU

     O tempo máximo de processador (em segundos) que um processo pode
     usar.  Se esse limite for excedido, um sinal *note SIGXCPU: 3722. é
     enviado ao processo.  (Consulte a documentação do módulo *note
     signal: c6. para obter informações sobre como capturar esse sinal e
     fazer algo útil, por exemplo, liberar arquivos abertos no disco.)

 -- Dado: resource.RLIMIT_FSIZE

     O tamanho máximo de um arquivo que o processo pode criar.

 -- Dado: resource.RLIMIT_DATA

     O tamanho máximo (em bytes) da heap do processo.

 -- Dado: resource.RLIMIT_STACK

     O tamanho máximo (em bytes) da pilha de chamadas para o processo
     atual.  Isso afeta apenas a pilha da thread principal em um
     processo multithread.

 -- Dado: resource.RLIMIT_RSS

     O tamanho máximo do conjunto de residentes que deve ser
     disponibilizado para o processo.

 -- Dado: resource.RLIMIT_NPROC

     O número máximo de processos que o processo atual pode criar.

 -- Dado: resource.RLIMIT_NOFILE

     O número máximo de descritores de arquivo abertos para o processo
     atual.

 -- Dado: resource.RLIMIT_OFILE

     O nome BSD para *note RLIMIT_NOFILE: 4a9c.

 -- Dado: resource.RLIMIT_MEMLOCK

     O espaço máximo de endereço que pode ser travado na memória.

 -- Dado: resource.RLIMIT_VMEM

     A maior área de memória mapeada que o processo pode ocupar.
     Geralmente um apelido de *note RLIMIT_AS: 4aa6.

     *note Disponibilidade: 1ed8.: Solaris, FreeBSD, NetBSD.

 -- Dado: resource.RLIMIT_AS

     A área máxima (em bytes) de espaço de endereço que pode ser ocupada
     pelo processo.

 -- Dado: resource.RLIMIT_MSGQUEUE

     O número de bytes que podem ser alocados para filas de mensagens
     POSIX.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.8.

     Adicionado na versão 3.4.

 -- Dado: resource.RLIMIT_NICE

     O teto para o nível agradável do processo (calculado como 20 -
     rlim_cur).

     *note Disponibilidade: 1ed8.: Linux >= 2.6.12.

     Adicionado na versão 3.4.

 -- Dado: resource.RLIMIT_RTPRIO

     O teto da prioridade em tempo real.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.12.

     Adicionado na versão 3.4.

 -- Dado: resource.RLIMIT_RTTIME

     O limite de tempo (em microssegundos) no tempo de CPU que um
     processo pode gastar sob agendamento em tempo real sem fazer uma
     chamada de sistema de bloqueio.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.25.

     Adicionado na versão 3.4.

 -- Dado: resource.RLIMIT_SIGPENDING

     O número de sinais que o processo pode enfileirar.

     *note Disponibilidade: 1ed8.: Linux >= 2.6.8.

     Adicionado na versão 3.4.

 -- Dado: resource.RLIMIT_SBSIZE

     O tamanho máximo (em bytes) de uso do buffer de soquete para este
     usuário.  Isso limita a quantidade de memória de rede e, portanto,
     a quantidade de mbufs que este usuário pode armazenar a qualquer
     momento.

     *note Disponibilidade: 1ed8.: FreeBSD, NetBSD.

     Adicionado na versão 3.4.

 -- Dado: resource.RLIMIT_SWAP

     O tamanho máximo (em bytes) do espaço de swap que pode ser
     reservado ou utilizado por todos os processos deste ID de usuário.
     Este limite é aplicado somente se o bit 1 do sysctl vm.overcommit
     estiver definido.  Consulte tuning(7)(3) para uma descrição
     completa deste sysctl.

     *note Disponibilidade: 1ed8.: FreeBSD >= 8.

     Adicionado na versão 3.4.

 -- Dado: resource.RLIMIT_NPTS

     O número máximo de pseudoterminais criados por este ID de usuário.

     *note Disponibilidade: 1ed8.: FreeBSD >= 8.

     Adicionado na versão 3.4.

 -- Dado: resource.RLIMIT_KQUEUES

     O número máximo de kqueues que esse ID de usuário tem permissão
     para criar.

     *note Disponibilidade: 1ed8.: FreeBSD >= 11.

     Adicionado na versão 3.10.

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/getrlimit(2)

   (2) https://manpages.debian.org/getrlimit(2)

   (3) https://man.freebsd.org/cgi/man.cgi?query=tuning&sektion=7


File: python.info,  Node: Uso de recursos,  Prev: Limites de recursos,  Up: resource — Informação de uso de recursos

5.34.9.2 Uso de recursos
........................

Essas funções são usadas para recuperar informações de uso de recursos:

 -- Função: resource.getrusage (who)

     Esta função retorna um objeto que descreve os recursos consumidos
     pelo processo atual ou seus filhos, conforme especificado pelo
     parâmetro 'who'.  O parâmetro 'who' deve ser especificado usando
     uma das constantes ‘RUSAGE_*’ descritas abaixo.

     Um exemplo simples:

          from resource import *
          import time

          # uma tarefa não vinculada à CPU
          time.sleep(3)
          print(getrusage(RUSAGE_SELF))

          # uma tarefa vinculada à CPU
          for i in range(10 ** 8):
             _ = 1 + 1
          print(getrusage(RUSAGE_SELF))

     Os campos do valor de retorno descrevem como um recurso específico
     do sistema foi utilizado, por exemplo, a quantidade de tempo gasto
     em execução no modo de usuário ou o número de vezes que o processo
     foi trocado da memória principal.  Alguns valores dependem do tique
     do relógio interno, por exemplo, a quantidade de memória que o
     processo está usando.

     Para retrocompatibilidade, o valor de retorno também pode ser
     acessado como uma tupla de 16 elementos.

     Os campos ‘ru_utime’ e ‘ru_stime’ do valor de retorno são valores
     de ponto flutuante que representam o tempo gasto na execução no
     modo usuário e o tempo gasto na execução no modo sistema,
     respectivamente.  Os valores restantes são inteiros.  Consulte a
     página man ‘getrusage(2)(1)’ para obter informações detalhadas
     sobre esses valores.  Um breve resumo é apresentado aqui:

     Índice       Campo                      Recurso
                                             
     ------------------------------------------------------------------------------------
                                             
     ‘0’          ‘ru_utime’                 tempo no modo de usuário (segundos em
                                             pontos flutuantes)
                                             
                                             
     ‘1’          ‘ru_stime’                 tempo no modo de sistema (segundos em
                                             pontos flutuantes)
                                             
                                             
     ‘2’          ‘ru_maxrss’                tamanho máximo do conjunto residente
                                             
                                             
     ‘3’          ‘ru_ixrss’                 tamanho da memória compartilhada
                                             
                                             
     ‘4’          ‘ru_idrss’                 tamanho da memória não compartilhada
                                             
                                             
     ‘5’          ‘ru_isrss’                 tamanho da pilha não compartilhada
                                             
                                             
     ‘6’          ‘ru_minflt’                falhas de página que não requerem E/S
                                             
                                             
     ‘7’          ‘ru_majflt’                falhas de página que requerem E/S
                                             
                                             
     ‘8’          ‘ru_nswap’                 número de trocas para a memórias de swap
                                             
                                             
     ‘9’          ‘ru_inblock’               operações de entrada de bloco
                                             
                                             
     ‘10’         ‘ru_oublock’               operações de saída de bloco
                                             
                                             
     ‘11’         ‘ru_msgsnd’                mensagens enviadas
                                             
                                             
     ‘12’         ‘ru_msgrcv’                mensagens recebidas
                                             
                                             
     ‘13’         ‘ru_nsignals’              sinais recebidos
                                             
                                             
     ‘14’         ‘ru_nvcsw’                 trocas voluntárias de contexto
                                             
                                             
     ‘15’         ‘ru_nivcsw’                trocas involuntárias de contexto
                                             

     Esta função levantará uma *note ValueError: 202. se um parâmetro
     'who' inválido for especificado.  Também pode levantar uma exceção
     *note error: 4a9a. em circunstâncias incomuns.

 -- Função: resource.getpagesize ()

     Retorna o número de bytes em uma página do sistema.  (Não precisa
     ser o mesmo que o tamanho da página de hardware.)

Os seguintes símbolos ‘RUSAGE_*’ são passados para a função *note
getrusage(): 1478. para especificar quais informações de processos devem
ser fornecidas.

 -- Dado: resource.RUSAGE_SELF

     Passeapara *note getrusage(): 1478. para solicitar recursos
     consumidos pelo processo de chamada, que é a soma dos recursos
     usados por todas as threads no processo.

 -- Dado: resource.RUSAGE_CHILDREN

     Passa para *note getrusage(): 1478. para solicitar recursos
     consumidos por processos filhos do processo de chamada que foram
     encerrados e aguardados.

 -- Dado: resource.RUSAGE_BOTH

     Passa para *note getrusage(): 1478. para solicitar recursos
     consumidos pelo processo atual e pelos processos filhos.  Pode não
     estar disponível em todos os sistemas.

 -- Dado: resource.RUSAGE_THREAD

     Passa para *note getrusage(): 1478. para solicitar recursos
     consumidos pela thread atual.  Pode não estar disponível em todos
     os sistemas.

     Adicionado na versão 3.2.

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/getrusage(2)


File: python.info,  Node: syslog — Rotinas da biblioteca syslog do Unix,  Prev: resource — Informação de uso de recursos,  Up: Serviços específicos do Unix

5.34.10 ‘syslog’ — Rotinas da biblioteca syslog do Unix
-------------------------------------------------------

__________________________________________________________________

Este módulo fornece uma interface para as rotinas da biblioteca ‘syslog’
do Unix.  Consulte as páginas de manual do Unix para uma descrição
detalhada do recurso ‘syslog’.

*note Disponibilidade: 1ed8.: Unix, not WASI, not iOS.

Este módulo é uma camada para a família de rotinas ‘syslog’ do sistema.
Uma biblioteca Python pura que pode se comunicar com um servidor syslog
está disponível no módulo *note logging.handlers: 89. como *note
SysLogHandler: 65c.

O módulo define as seguintes funções:

 -- Função: syslog.syslog (message)

 -- Função: syslog.syslog (priority, message)

     Envia a string 'message' para o registrador do sistema.  Uma nova
     linha final é adicionada, se necessário.  Cada mensagem é marcada
     com uma prioridade composta por um 'facility' e um 'level'.  O
     argumento opcional 'priority', cujo padrão é *note LOG_INFO: 4ab0,
     determina a prioridade da mensagem.  Se a facilidade não está
     codificada em 'priority' usando o OU lógico (‘LOG_INFO |
     LOG_USER’), o valor dado na chamada *note openlog(): 53e. é usado.

     Se *note openlog(): 53e. não foi chamado antes da chamada para
     *note syslog(): dc, *note openlog(): 53e. será chamado sem
     argumentos.

     Levanta um *note evento de auditoria: 19fa. ‘syslog.syslog’ com os
     argumentos ‘priority’, ‘message’.

     Alterado na versão 3.2: Nas versões anteriores, *note openlog():
     53e. não seria chamado automaticamente se não fosse chamado antes
     da chamada para *note syslog(): dc, adiando a implementação do
     syslog para chamar ‘openlog()’.

     Alterado na versão 3.12: Esta função é restrita em
     subinterpretadores.  (Apenas o código que executa em vários
     interpretadores é afetado e a restrição não é relevante para a
     maioria dos usuários.)  *note openlog(): 53e. deve ser chamado no
     interpretador principal antes de *note syslog(): dc. pode ser usado
     em um subinterpretador.  Caso contrário, vai levantar *note
     RuntimeError: 195.

 -- Função: syslog.openlog ([ident[, logoption[, facility]]])

     As opções de log das chamadas subsequentes *note syslog(): dc.
     podem ser definidas chamando *note openlog(): 53e.  *note syslog():
     dc. irá chamar *note openlog(): 53e. sem argumentos se o log não
     estiver aberto no momento.

     O argumento nomeado opcional 'ident' é uma string que é prefixada a
     cada mensagem, e o padrão é ‘sys.argv[0]’ com os componentes do
     caminho inicial removidos.  O argumento nomeado opcional
     'logoption' (o padrão é 0) é um campo de bits – veja abaixo os
     valores possíveis para combinar.  O argumento nomeado opcional
     'facility' (o padrão é *note LOG_USER: 4ab1.) define o recurso
     padrão para mensagens que não possuem um recurso explicitamente
     codificado.

     Levanta um *note evento de auditoria: 19fa. ‘syslog.openlog’ com os
     argumentos ‘ident’, ‘logoption’, ‘facility’.

     Alterado na versão 3.2: Nas versões anteriores, os argumentos
     nomeados não eram permitidos e 'ident' era obrigatório.

     Alterado na versão 3.12: Esta função é restrita em
     subinterpretadores.  (Apenas o código que executa em vários
     interpretadores é afetado e a restrição não é relevante para a
     maioria dos usuários.)  Isso deve ser chamado no interpretador
     principal.Vai levantar *note RuntimeError: 195. se chamado em um
     subinterpretador.

 -- Função: syslog.closelog ()

     Redefine os valores do módulo syslog e chama a biblioteca de
     sistema ‘closelog()’.

     Isso faz com que o módulo se comporte como quando importado
     inicialmente.  Por exemplo, *note openlog(): 53e. será chamado na
     primeira chamada *note syslog(): dc. (se *note openlog(): 53e.
     ainda não foi chamado), e 'ident' e outro *note openlog(): 53e. os
     parâmetros são redefinidos para os padrões.

     Levanta um *note evento de auditoria: 19fa. ‘syslog.closelog’ sem
     argumentos.

     Alterado na versão 3.12: Esta função é restrita em
     subinterpretadores.  (Apenas o código que executa em vários
     interpretadores é afetado e a restrição não é relevante para a
     maioria dos usuários.)  Isso deve ser chamado no interpretador
     principal.Vai levantar *note RuntimeError: 195. se chamado em um
     subinterpretador.

 -- Função: syslog.setlogmask (maskpri)

     Define a máscara de prioridade como 'maskpri' e retorna o valor da
     máscara anterior.  Chamadas para *note syslog(): dc. com um nível
     de prioridade não definido em 'maskpri' são ignoradas.  O padrão é
     registrar todas as prioridades.  A função ‘LOG_MASK(pri)’ calcula a
     máscara para a prioridade individual 'pri'.  A função
     ‘LOG_UPTO(pri)’ calcula a máscara para todas as prioridades até e
     incluindo 'pri'.

     Levanta um *note evento de auditoria: 19fa. ‘syslog.setlogmask’ com
     o argumento ‘maskpri’.

O módulo define as seguintes constantes:

 -- Dado: syslog.LOG_EMERG
 -- Dado: syslog.LOG_ALERT
 -- Dado: syslog.LOG_CRIT
 -- Dado: syslog.LOG_ERR
 -- Dado: syslog.LOG_WARNING
 -- Dado: syslog.LOG_NOTICE
 -- Dado: syslog.LOG_INFO
 -- Dado: syslog.LOG_DEBUG

     Níveis de prioridade (alto a baixo).

 -- Dado: syslog.LOG_AUTH
 -- Dado: syslog.LOG_AUTHPRIV
 -- Dado: syslog.LOG_CRON
 -- Dado: syslog.LOG_DAEMON
 -- Dado: syslog.LOG_FTP
 -- Dado: syslog.LOG_INSTALL
 -- Dado: syslog.LOG_KERN
 -- Dado: syslog.LOG_LAUNCHD
 -- Dado: syslog.LOG_LPR
 -- Dado: syslog.LOG_MAIL
 -- Dado: syslog.LOG_NETINFO
 -- Dado: syslog.LOG_NEWS
 -- Dado: syslog.LOG_RAS
 -- Dado: syslog.LOG_REMOTEAUTH
 -- Dado: syslog.LOG_SYSLOG
 -- Dado: syslog.LOG_USER
 -- Dado: syslog.LOG_UUCP
 -- Dado: syslog.LOG_LOCAL0
 -- Dado: syslog.LOG_LOCAL1
 -- Dado: syslog.LOG_LOCAL2
 -- Dado: syslog.LOG_LOCAL3
 -- Dado: syslog.LOG_LOCAL4
 -- Dado: syslog.LOG_LOCAL5
 -- Dado: syslog.LOG_LOCAL6
 -- Dado: syslog.LOG_LOCAL7

     Facilidades, dependendo da disponibilidade em ‘<syslog.h>’ para
     *note LOG_AUTHPRIV: 4aba, *note LOG_FTP: 4abd, *note LOG_NETINFO:
     4ac3, *note LOG_REMOTEAUTH: 4ac6, *note LOG_INSTALL: 4abe. e *note
     LOG_RAS: 4ac5.

     Alterado na versão 3.13: Adicionados *note LOG_FTP: 4abd, *note
     LOG_NETINFO: 4ac3, *note LOG_REMOTEAUTH: 4ac6, *note LOG_INSTALL:
     4abe, *note LOG_RAS: 4ac5. e *note LOG_LAUNCHD: 4ac0.

 -- Dado: syslog.LOG_PID
 -- Dado: syslog.LOG_CONS
 -- Dado: syslog.LOG_NDELAY
 -- Dado: syslog.LOG_ODELAY
 -- Dado: syslog.LOG_NOWAIT
 -- Dado: syslog.LOG_PERROR

     Opções de log, dependendo da disponibilidade em ‘<syslog.h>’ para
     *note LOG_ODELAY: 4ad4, *note LOG_NOWAIT: 4ad5. e *note LOG_PERROR:
     4ad6.

* Menu:

* Exemplos: Exemplos<36>.


File: python.info,  Node: Exemplos<36>,  Up: syslog — Rotinas da biblioteca syslog do Unix

5.34.10.1 Exemplos
..................

* Menu:

* Exemplo simples::


File: python.info,  Node: Exemplo simples,  Up: Exemplos<36>

5.34.10.2 Exemplo simples
.........................

Um conjunto simples de exemplos:

     import syslog

     syslog.syslog('Processing started')
     if error:
         syslog.syslog(syslog.LOG_ERR, 'Processing started')

Um exemplo de configuração de algumas opções de log, isso incluiria o ID
do processo nas mensagens registradas e escreveria as mensagens no
recurso de destino usado para o log de correio:

     syslog.openlog(logoption=syslog.LOG_PID, facility=syslog.LOG_MAIL)
     syslog.syslog('E-mail processing initiated...')


File: python.info,  Node: Interface de linha de comando CLI de módulos,  Next: Módulos substituídos,  Prev: Serviços específicos do Unix,  Up: A Biblioteca Padrão do Python

5.35 Interface de linha de comando (CLI) de módulos
===================================================

Os seguintes módulos têm uma interface de linha de comando.

   * *note ast: 4884.

   * *note asyncio: 3480.

   * *note base64: e.

   * *note calendar: 268a.

   * *note code: 1a.

   * *note compileall: 4948.

   * *note cProfile: 27.: veja *note profile: 44a3.

   * *note difflib: 24c8.

   * *note dis: 495f.

   * *note doctest: 4207.

   * ‘encodings.rot_13’

   * *note ensurepip: 454d.

   * *note filecmp: 5a.

   * *note fileinput: 5b.

   * *note ftplib: 5e.

   * *note gzip: 2b3c.

   * *note http.server: f85.

   * *note idlelib: 40c0.

   * *note inspect: f8f.

   * *note json.tool: 388c.

   * *note mimetypes: 8f.

   * *note pdb: 446b.

   * *note pickle: a6.

   * *note pickletools: 49cf.

   * *note platform: 2f2a.

   * *note poplib: ac.

   * *note profile: 44a3.

   * *note pstats: b0.

   * *note py_compile: 493f.

   * *note pyclbr: b4.

   * *note pydoc: b5.

   * *note quopri: b7.

   * *note random: 154.

   * *note runpy: be.

   * *note site: 4723.

   * *note sqlite3: 441.

   * *note symtable: 48ba.

   * *note sysconfig: 4618.

   * *note tabnanny: dd.

   * *note tarfile: 1001.

   * ‘this’

   * *note timeit: 44c7.

   * *note tokenize: 4910.

   * *note trace: 44e4.

   * *note turtledemo: 102.

   * *note unittest: 4280.

   * *note uuid: 444.

   * *note venv: 455a.

   * *note webbrowser: 3b75.

   * *note zipapp: 4574.

   * *note zipfile: 2bac.

Consulte também a *note interface de linha de comando do Python: 1b36.


File: python.info,  Node: Módulos substituídos,  Next: Módulos removidos,  Prev: Interface de linha de comando CLI de módulos,  Up: A Biblioteca Padrão do Python

5.36 Módulos substituídos
=========================

Os módulos descritos neste capítulo foram substituídos por outros
módulos para a maioria dos casos de uso e são mantidos principalmente
para preservar a retrocompatibilidade.

Os módulos podem aparecer neste capítulo porque eles cobrem apenas um
subconjunto limitado de um espaço de problema, e uma solução mais
geralmente aplicável está disponível em outro lugar na biblioteca padrão
(por exemplo, *note getopt: 61. cobre a tarefa muito específica de
“imitar a API C ‘getopt()’ no Python”, em vez dos recursos mais amplos
de análise de opções de linha de comando e análise de argumentos
oferecidos por *note optparse: a0. e *note argparse: 6.).

Alternativamente, módulos podem aparecer neste capítulo porque estão
totalmente descontinuados e aguardando remoção em uma versão futura, ou
estão *note suavemente descontinuados: 209. e seu uso é ativamente
desencorajado em novos projetos.  Com a remoção de vários módulos
obsoletos por meio da PEP 594(1), atualmente não há módulos nesta última
categoria.

* Menu:

* getopt — Analisador sintático no estilo C para opções de linha de comando::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/


File: python.info,  Node: getopt — Analisador sintático no estilo C para opções de linha de comando,  Up: Módulos substituídos

5.36.1 ‘getopt’ — Analisador sintático no estilo C para opções de linha de comando
----------------------------------------------------------------------------------

'Código-fonte:' Lib/getopt.py(1)

     Nota: Este módulo é considerado completo em recursos.  Uma
     alternativa mais declarativa e extensível para esta API é fornecida
     no módulo *note optparse: a0.  Outros aprimoramentos funcionais
     para processamento de parâmetros de linha de comando são fornecidos
     como módulos de terceiros no PyPI ou como recursos no módulo *note
     argparse: 6.

__________________________________________________________________

Este módulo ajuda os scripts a analisar os argumentos da linha de
comando em ‘sys.argv’.  Ele suporta as mesmas convenções da função Unix
‘getopt()’ (incluindo os significados especiais de argumentos da forma
‘‘-’’ e ‘‘--’‘).  Longas opções semelhantes às suportadas pelo software
GNU também podem ser usadas por meio de um terceiro argumento opcional.

Usuários que não estão familiarizados com a função Unix ‘getopt()’ devem
considerar usar o módulo *note argparse: 6. em vez disso.  Usuários que
estão familiarizados com a função Unix ‘getopt()’, mas gostariam de
obter um comportamento equivalente enquanto escrevem menos código e
obtêm melhor ajuda e mensagens de erro devem considerar usar o módulo
*note optparse: a0.  Veja *note Escolhendo uma biblioteca de análise de
linha de comando: 3044. para detalhes adicionais.

Este módulo fornece duas funções e uma exceção:

 -- Função: getopt.getopt (args, shortopts, longopts=[])

     Analisa opções de linha de comando e lista de parâmetros.  'args' é
     a lista de argumentos a ser analisada, sem a referência inicial
     para o programa em execução.  Normalmente, isso significa
     ‘sys.argv[1:]’.  'shortopts' é a string de letras de opção que o
     script deseja reconhecer, com opções que requerem um argumento
     seguido por dois pontos (‘':'’; ou seja, o mesmo formato que Unix
     ‘getopt()’ usa).

          Nota: Ao contrário do GNU ‘getopt()’, após um argumento sem
          opção, todos os argumentos adicionais são considerados também
          sem opção.  Isso é semelhante à maneira como os sistemas Unix
          não GNU funcionam.

     'longopts', se especificado, deve ser uma lista de strings com os
     nomes das opções longas que devem ser suportadas.  Os caracteres
     ‘'--'’ no início não devem ser incluídos no nome da opção.  Opções
     longas que requerem um argumento devem ser seguidas por um sinal de
     igual (‘'='’).  Argumentos opcionais não são suportados.  Para
     aceitar apenas opções longas, 'shortopts' deve ser uma string
     vazia.  Opções longas na linha de comando podem ser reconhecidas,
     desde que forneçam um prefixo do nome da opção que corresponda
     exatamente a uma das opções aceitas.  Por exemplo, se 'longopts'
     for ‘['foo', 'frob']’, a opção ‘--fo’ irá corresponder a ‘--foo’,
     mas ‘--f’ não corresponderá exclusivamente, então *note
     GetoptError: 4ae2. será levantada.

     O valor de retorno consiste em dois elementos: o primeiro é uma
     lista de pares ‘(option, value)’; a segunda é a lista de argumentos
     de programa restantes depois que a lista de opções foi removida
     (esta é uma fatia ao final de 'args').  Cada par de opção e valor
     retornado tem a opção como seu primeiro elemento, prefixado com um
     hífen para opções curtas (por exemplo, ‘'-x'’) ou dois hifenes para
     opções longas (por exemplo, ‘'--long-option'’), e o argumento da
     opção como seu segundo elemento, ou uma string vazia se a opção não
     tiver argumento.  As opções ocorrem na lista na mesma ordem em que
     foram encontradas, permitindo assim múltiplas ocorrências.  Opções
     longas e curtas podem ser misturadas.

 -- Função: getopt.gnu_getopt (args, shortopts, longopts=[])

     Esta função funciona como *note getopt(): 61, exceto que o modo de
     digitalização do estilo GNU é usado por padrão.  Isso significa que
     os argumentos de opção e não opção podem ser misturados.  A função
     *note getopt(): 61. interrompe o processamento das opções assim que
     um argumento não opcional é encontrado.

     Se o primeiro caractere da string de opção for ‘'+'’, ou se a
     variável de ambiente ‘POSIXLY_CORRECT’ estiver definida, então o
     processamento da opção para assim que um argumento não opcional for
     encontrado.

 -- Exceção: getopt.GetoptError

     Isso é levantado quando uma opção não reconhecida é encontrada na
     lista de argumentos ou quando uma opção que requer um argumento não
     é fornecida.  O argumento para a exceção é uma string que indica a
     causa do erro.  Para opções longas, um argumento dado a uma opção
     que não requer uma também fará com que essa exceção seja levantada.
     Os atributos ‘msg’ e ‘opt’ fornecem a mensagem de erro e a opção
     relacionada; se não houver uma opção específica à qual a exceção se
     relaciona, ‘opt’ é uma string vazia.

 -- Exceção: getopt.error

     Apelido para *note GetoptError: 4ae2.; para compatibilidade
     reversa.

Um exemplo usando apenas opções de estilo Unix:

     >>> import getopt
     >>> args = '-a -b -cfoo -d bar a1 a2'.split()
     >>> args
     ['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']
     >>> optlist, args = getopt.getopt(args, 'abc:d:')
     >>> optlist
     [('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]
     >>> args
     ['a1', 'a2']

Usar nomes de opções longos é igualmente fácil:

     >>> s = '--condition=foo --testing --output-file abc.def -x a1 a2'
     >>> args = s.split()
     >>> args
     ['--condition=foo', '--testing', '--output-file', 'abc.def', '-x', 'a1', 'a2']
     >>> optlist, args = getopt.getopt(args, 'x', [
     ...     'condition=', 'output-file=', 'testing'])
     >>> optlist
     [('--condition', 'foo'), ('--testing', ''), ('--output-file', 'abc.def'), ('-x', '')]
     >>> args
     ['a1', 'a2']

Em um script, o uso típico é algo assim:

     import getopt, sys

     def main():
         try:
             opts, args = getopt.getopt(sys.argv[1:], "ho:v", ["help", "output="])
         except getopt.GetoptError as err:
             # print help information and exit:
             print(err)  # will print something like "option -a not recognized"
             usage()
             sys.exit(2)
         output = None
         verbose = False
         for o, a in opts:
             if o == "-v":
                 verbose = True
             elif o in ("-h", "--help"):
                 usage()
                 sys.exit()
             elif o in ("-o", "--output"):
                 output = a
             else:
                 assert False, "unhandled option"
         process(args, output=output, verbose=verbose)

     if __name__ == "__main__":
         main()

Observe que uma interface de linha de comando equivalente pode ser
produzida com menos código e mais mensagens de erro de ajuda e erro
informativas usando o módulo *note optparse: a0.:

     import optparse

     if __name__ == '__main__':
         parser = optparse.OptionParser()
         parser.add_option('-o', '--output')
         parser.add_option('-v', dest='verbose', action='store_true')
         opts, args = parser.parse_args()
         process(args, output=opts.output, verbose=opts.verbose)

Uma interface de linha de comando aproximadamente equivalente para este
caso também pode ser produzida usando o módulo *note argparse: 6.:

     import argparse

     if __name__ == '__main__':
         parser = argparse.ArgumentParser()
         parser.add_argument('-o', '--output')
         parser.add_argument('-v', dest='verbose', action='store_true')
         parser.add_argument('rest', nargs='*')
         args = parser.parse_args()
         process(args.rest, output=args.output, verbose=args.verbose)

Veja *note Escolhendo uma biblioteca de análise de linha de comando:
3044. para detalhes sobre como a versão ‘argparse’ deste código difere
em comportamento da versão ‘optparse’ (e ‘getopt’).

Ver também
..........

Módulo *note optparse: a0.

     Análise de opções de linha de comando declarativa.

Módulo *note argparse: 6.

     Opção de linha de comando e biblioteca de análise de argumentos
     mais opinativa.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Lib/getopt.py


File: python.info,  Node: Módulos removidos,  Next: Considerações de Segurança<3>,  Prev: Módulos substituídos,  Up: A Biblioteca Padrão do Python

5.37 Módulos removidos
======================

Os módulos descritos neste capítulo foram removidos da biblioteca padrão
do Python.  Eles estão documentados aqui para ajudar as pessoas a
encontrarem substituições.

* Menu:

* aifc — Lê e escreve arquivos AIFF e AIFC::
* asynchat — Manipulador de comando/resposta de socket assíncrono::
* asyncore — Manipulador de socket assíncrono::
* audioop — Manipulando dados de áudio original::
* cgi — Suporte a Common Gateway Interface::
* cgitb — Gerenciador de traceback para scripts de CGI::
* chunk — Lê dados em blocos IFF::
* crypt — Função para verificar senhas Unix::
* distutils — Criação e instalação de módulos do Python::
* imghdr — Determina o tipo de uma imagem::
* imp — Acessa os componentes internos de importação::
* mailcap — Manipulação de arquivo Mailcap::
* msilib — Lê e escreve arquivos do Microsoft Installer::
* nis — Interface para NIS da Sun (Yellow Pages): nis — Interface para NIS da Sun Yellow Pages.
* nntplib — Cliente de protocolo NNTP::
* ossaudiodev — Acesso a dispositivos de áudio compatíveis com OSS::
* pipes — Interface para pipelines do shell::
* smtpd — Serviços SMTP::
* sndhdr — Determina o tipo de arquivos de som::
* spwd — O banco de dados de senhas shadow::
* sunau — Lê e escreve arquivos AU da Sun::
* telnetlib — cliente Telnet::
* uu — Codifica e decodifica arquivos uuencode::
* xdrlib — Codifica e decodifica dados XDR::


File: python.info,  Node: aifc — Lê e escreve arquivos AIFF e AIFC,  Next: asynchat — Manipulador de comando/resposta de socket assíncrono,  Up: Módulos removidos

5.37.1 ‘aifc’ — Lê e escreve arquivos AIFF e AIFC
-------------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

A última versão do Python que forneceu o módulo ‘aifc’ foi o Python
3.12(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://docs.python.org/3.12/library/aifc.html


File: python.info,  Node: asynchat — Manipulador de comando/resposta de socket assíncrono,  Next: asyncore — Manipulador de socket assíncrono,  Prev: aifc — Lê e escreve arquivos AIFF e AIFC,  Up: Módulos removidos

5.37.2 ‘asynchat’ — Manipulador de comando/resposta de socket assíncrono
------------------------------------------------------------------------

Descontinuado desde a versão 3.6, removido na versão 3.12.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.12: 502. após ser descontinuado no Python
3.6.  A remoção foi decidida na PEP 594(1).

As aplicações devem usar o módulo *note asyncio: a. em vez disso.

A última versão do Python que forneceu o módulo ‘asynchat’ foi o Python
3.11(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://docs.python.org/3.11/library/asynchat.html


File: python.info,  Node: asyncore — Manipulador de socket assíncrono,  Next: audioop — Manipulando dados de áudio original,  Prev: asynchat — Manipulador de comando/resposta de socket assíncrono,  Up: Módulos removidos

5.37.3 ‘asyncore’ — Manipulador de socket assíncrono
----------------------------------------------------

Descontinuado desde a versão 3.6, removido na versão 3.12.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.12: 502. após ser descontinuado no Python
3.6.  A remoção foi decidida na PEP 594(1).

As aplicações devem usar o módulo *note asyncio: a. em vez disso.

A última versão do Python que forneceu o módulo ‘asyncore’ foi o Python
3.11(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://docs.python.org/3.11/library/asyncore.html


File: python.info,  Node: audioop — Manipulando dados de áudio original,  Next: cgi — Suporte a Common Gateway Interface,  Prev: asyncore — Manipulador de socket assíncrono,  Up: Módulos removidos

5.37.4 ‘audioop’ — Manipulando dados de áudio original
------------------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

A última versão do Python que forneceu o módulo ‘audioop’ foi o Python
3.12(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://docs.python.org/3.12/library/audioop.html


File: python.info,  Node: cgi — Suporte a Common Gateway Interface,  Next: cgitb — Gerenciador de traceback para scripts de CGI,  Prev: audioop — Manipulando dados de áudio original,  Up: Módulos removidos

5.37.5 ‘cgi’ — Suporte a Common Gateway Interface
-------------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

Um fork do módulo no PyPI pode ser usado em vez disso: legacy-cgi(2).
Esta é uma cópia do módulo cgi, não mais mantido ou suportado pela
equipe core do Python.

A última versão do Python que forneceu o módulo ‘cgi’ foi o Python
3.12(3).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://pypi.org/project/legacy-cgi/

   (3) https://docs.python.org/3.12/library/cgi.html


File: python.info,  Node: cgitb — Gerenciador de traceback para scripts de CGI,  Next: chunk — Lê dados em blocos IFF,  Prev: cgi — Suporte a Common Gateway Interface,  Up: Módulos removidos

5.37.6 ‘cgitb’ — Gerenciador de traceback para scripts de CGI
-------------------------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

Um fork do módulo no PyPI agora pode ser usado em vez disso:
legacy-cgi(2).  Esta é uma cópia do módulo cgi, não mais mantido ou
suportado pela equipe core do Python.

A última versão do Python que forneceu o módulo ‘cgitb’ foi o Python
3.12(3).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://pypi.org/project/legacy-cgi/

   (3) https://docs.python.org/3.12/library/cgitb.html


File: python.info,  Node: chunk — Lê dados em blocos IFF,  Next: crypt — Função para verificar senhas Unix,  Prev: cgitb — Gerenciador de traceback para scripts de CGI,  Up: Módulos removidos

5.37.7 ‘chunk’ — Lê dados em blocos IFF
---------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

A última versão do Python que forneceu o módulo ‘chunk’ foi o Python
3.12(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://docs.python.org/3.12/library/chunk.html


File: python.info,  Node: crypt — Função para verificar senhas Unix,  Next: distutils — Criação e instalação de módulos do Python,  Prev: chunk — Lê dados em blocos IFF,  Up: Módulos removidos

5.37.8 ‘crypt’ — Função para verificar senhas Unix
--------------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

As aplicações podem usar o módulo *note hashlib: 68. da biblioteca
padrão.  Outras possíveis substituições são bibliotecas de terceiros do
PyPI: legacycrypt(2), bcrypt(3) ou argon2-cffi(4).  Elas não são
suportadas nem mantidas pela equipe core do Python.

A última versão do Python que forneceu o módulo ‘crypt’ foi o Python
3.12(5).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://pypi.org/project/legacycrypt/

   (3) https://pypi.org/project/bcrypt/

   (4) https://pypi.org/project/argon2-cffi/

   (5) https://docs.python.org/3.12/library/crypt.html


File: python.info,  Node: distutils — Criação e instalação de módulos do Python,  Next: imghdr — Determina o tipo de uma imagem,  Prev: crypt — Função para verificar senhas Unix,  Up: Módulos removidos

5.37.9 ‘distutils’ — Criação e instalação de módulos do Python
--------------------------------------------------------------

Descontinuado desde a versão 3.10, removido na versão 3.12.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.12: 508. após ser descontinuado no Python
3.10.  A remoção foi decidida na PEP 632(1), a qual tem um conselho de
migração(2).

A última versão do Python que forneceu o módulo ‘distutils’ foi o Python
3.11(3).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0632/

   (2) https://peps.python.org/pep-0632/#migration-advice

   (3) https://docs.python.org/3.11/library/distutils.html


File: python.info,  Node: imghdr — Determina o tipo de uma imagem,  Next: imp — Acessa os componentes internos de importação,  Prev: distutils — Criação e instalação de módulos do Python,  Up: Módulos removidos

5.37.10 ‘imghdr’ — Determina o tipo de uma imagem
-------------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

Possíveis substituições são bibliotecas de terceiros do PyPI:
filetype(2), puremagic(3) ou python-magic(4).  Eles não são suportados
ou mantidos pela equipe principal do Python.

A última versão do Python que forneceu o módulo ‘imghdr’ foi o Python
3.12(5).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://pypi.org/project/filetype/

   (3) https://pypi.org/project/puremagic/

   (4) https://pypi.org/project/python-magic/

   (5) https://docs.python.org/3.12/library/imghdr.html


File: python.info,  Node: imp — Acessa os componentes internos de importação,  Next: mailcap — Manipulação de arquivo Mailcap,  Prev: imghdr — Determina o tipo de uma imagem,  Up: Módulos removidos

5.37.11 ‘imp’ — Acessa os componentes internos de importação
------------------------------------------------------------

Descontinuado desde a versão 3.4, removido na versão 3.12.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.12: 512. após ser descontinuado no Python
3.4.

O *note aviso de remoção: 512. inclui orientação para migrar código de
‘imp’ para *note importlib: 77.

A última versão do Python que forneceu o módulo ‘imp’ foi o Python
3.11(1).

   ---------- Footnotes ----------

   (1) https://docs.python.org/3.11/library/imp.html


File: python.info,  Node: mailcap — Manipulação de arquivo Mailcap,  Next: msilib — Lê e escreve arquivos do Microsoft Installer,  Prev: imp — Acessa os componentes internos de importação,  Up: Módulos removidos

5.37.12 ‘mailcap’ — Manipulação de arquivo Mailcap
--------------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

A última versão do Python que forneceu o módulo ‘mailcap’ foi o Python
3.12(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://docs.python.org/3.12/library/mailcap.html


File: python.info,  Node: msilib — Lê e escreve arquivos do Microsoft Installer,  Next: nis — Interface para NIS da Sun Yellow Pages,  Prev: mailcap — Manipulação de arquivo Mailcap,  Up: Módulos removidos

5.37.13 ‘msilib’ — Lê e escreve arquivos do Microsoft Installer
---------------------------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

A última versão do Python que forneceu o módulo ‘msilib’ foi o Python
3.12(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://docs.python.org/3.12/library/msilib.html


File: python.info,  Node: nis — Interface para NIS da Sun Yellow Pages,  Next: nntplib — Cliente de protocolo NNTP,  Prev: msilib — Lê e escreve arquivos do Microsoft Installer,  Up: Módulos removidos

5.37.14 ‘nis’ — Interface para NIS da Sun (Yellow Pages)
--------------------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

A última versão do Python que forneceu o módulo ‘nis’ foi o Python
3.12(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://docs.python.org/3.12/library/nis.html


File: python.info,  Node: nntplib — Cliente de protocolo NNTP,  Next: ossaudiodev — Acesso a dispositivos de áudio compatíveis com OSS,  Prev: nis — Interface para NIS da Sun Yellow Pages,  Up: Módulos removidos

5.37.15 ‘nntplib’ — Cliente de protocolo NNTP
---------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

A última versão do Python que forneceu o módulo ‘nntplib’ foi o Python
3.12(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://docs.python.org/3.12/library/nntplib.html


File: python.info,  Node: ossaudiodev — Acesso a dispositivos de áudio compatíveis com OSS,  Next: pipes — Interface para pipelines do shell,  Prev: nntplib — Cliente de protocolo NNTP,  Up: Módulos removidos

5.37.16 ‘ossaudiodev’ — Acesso a dispositivos de áudio compatíveis com OSS
--------------------------------------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

A última versão do Python que forneceu o módulo ‘ossaudiodev’ foi o
Python 3.12(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://docs.python.org/3.12/library/ossaudiodev.html


File: python.info,  Node: pipes — Interface para pipelines do shell,  Next: smtpd — Serviços SMTP,  Prev: ossaudiodev — Acesso a dispositivos de áudio compatíveis com OSS,  Up: Módulos removidos

5.37.17 ‘pipes’ — Interface para pipelines do shell
---------------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

As aplicações devem usar o módulo *note subprocess: d6. em vez disso.

A última versão do Python que forneceu o módulo ‘pipes’ foi o Python
3.12(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://docs.python.org/3.12/library/pipes.html


File: python.info,  Node: smtpd — Serviços SMTP,  Next: sndhdr — Determina o tipo de arquivos de som,  Prev: pipes — Interface para pipelines do shell,  Up: Módulos removidos

5.37.18 ‘smtpd’ — Serviços SMTP
-------------------------------

Descontinuado desde a versão 3.6, removido na versão 3.12.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.12: 502. após ser descontinuado no Python
3.6.  A remoção foi decidida na PEP 594(1).

Uma possível substituição é a biblioteca de terceiros aiosmtpd(2).  Esta
biblioteca não é mantida ou suportada pela equipe principal do Python.

A última versão do Python que forneceu o módulo ‘smtpd’ foi o Python
3.11(3).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://pypi.org/project/aiosmtpd/

   (3) https://docs.python.org/3.11/library/smtpd.html


File: python.info,  Node: sndhdr — Determina o tipo de arquivos de som,  Next: spwd — O banco de dados de senhas shadow,  Prev: smtpd — Serviços SMTP,  Up: Módulos removidos

5.37.19 ‘sndhdr’ — Determina o tipo de arquivos de som
------------------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

Possíveis substituições são módulos de terceiros do PyPI: filetype(2),
puremagic(3) ou python-magic(4).  Eles não são suportados ou mantidos
pela equipe principal do Python.

A última versão do Python que forneceu o módulo ‘sndhdr’ foi o Python
3.12(5).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://pypi.org/project/filetype/

   (3) https://pypi.org/project/puremagic/

   (4) https://pypi.org/project/python-magic/

   (5) https://docs.python.org/3.12/library/sndhdr.html


File: python.info,  Node: spwd — O banco de dados de senhas shadow,  Next: sunau — Lê e escreve arquivos AU da Sun,  Prev: sndhdr — Determina o tipo de arquivos de som,  Up: Módulos removidos

5.37.20 ‘spwd’ — O banco de dados de senhas shadow
--------------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

Uma possível substituição é a biblioteca de terceiros python-pam(2).
Esta biblioteca não é suportada ou mantida pela equipe principal do
Python.

A última versão do Python que forneceu o módulo ‘spwd’ foi o Python
3.12(3).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://pypi.org/project/python-pam/

   (3) https://docs.python.org/3.12/library/spwd.html


File: python.info,  Node: sunau — Lê e escreve arquivos AU da Sun,  Next: telnetlib — cliente Telnet,  Prev: spwd — O banco de dados de senhas shadow,  Up: Módulos removidos

5.37.21 ‘sunau’ — Lê e escreve arquivos AU da Sun
-------------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

A última versão do Python que forneceu o módulo ‘sunau’ foi o Python
3.12(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://docs.python.org/3.12/library/sunau.html


File: python.info,  Node: telnetlib — cliente Telnet,  Next: uu — Codifica e decodifica arquivos uuencode,  Prev: sunau — Lê e escreve arquivos AU da Sun,  Up: Módulos removidos

5.37.22 ‘telnetlib’ — cliente Telnet
------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

Possíveis substituições são bibliotecas de terceiros do PyPI:
telnetlib3(2) ou Exscript(3).  Elas não são suportadas ou mantidas pela
equipe principal do Python.

A última versão do Python que forneceu o módulo ‘telnetlib’ foi o Python
3.12(4).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://pypi.org/project/telnetlib3/

   (3) https://pypi.org/project/Exscript/

   (4) https://docs.python.org/3.12/library/telnetlib.html


File: python.info,  Node: uu — Codifica e decodifica arquivos uuencode,  Next: xdrlib — Codifica e decodifica dados XDR,  Prev: telnetlib — cliente Telnet,  Up: Módulos removidos

5.37.23 ‘uu’ — Codifica e decodifica arquivos uuencode
------------------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

A última versão do Python que forneceu o módulo ‘uu’ foi o Python
3.12(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://docs.python.org/3.12/library/uu.html


File: python.info,  Node: xdrlib — Codifica e decodifica dados XDR,  Prev: uu — Codifica e decodifica arquivos uuencode,  Up: Módulos removidos

5.37.24 ‘xdrlib’ — Codifica e decodifica dados XDR
--------------------------------------------------

Descontinuado desde a versão 3.11, removido na versão 3.13.

Este módulo não faz mais parte da biblioteca padrão do Python.  Ele foi
*note removido no Python 3.13: 143. após ser descontinuado no Python
3.11.  A remoção foi decidida na PEP 594(1).

A última versão do Python que forneceu o módulo ‘xdrlib’ foi o Python
3.12(2).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0594/

   (2) https://docs.python.org/3.12/library/xdrlib.html


File: python.info,  Node: Considerações de Segurança<3>,  Prev: Módulos removidos,  Up: A Biblioteca Padrão do Python

5.38 Considerações de Segurança
===============================

Os módulos a seguir têm considerações de segurança específicas:

   * *note base64: e.: *note considerações de segurança do base64: 3965.
     na RFC 4648(1)

   * *note hashlib: 68.: *note todos os construtores usam um argumento
     somente-nomeado “usedforsecurity”, desativando algoritmos
     conhecidos não seguros e bloqueados: 2caa.

   * *note http.server: 72. não é adequado para uso em produção,
     implementando apenas verificações básicas de segurança.  Veja as
     *note considerações de segurança: 3da0.

   * *note logging: 87.: *note configuração do Logging usa eval(): 2e92.

   * *note multiprocessing: 94.: *note Connection.recv() usa pickle:
     336a.

   * *note pickle: a6.: *note Restringindo globais no pickle: 2a52.

   * *note random: b8. não deve ser usado para o propósito de segurança.
     Em vez disso, use *note secrets: c0.

   * *note shelve: c3.: *note shelve é baseado no pickle e, portanto,
     inadequado para lidar com fontes não confiáveis: 2a70.

   * *note ssl: d0.: *note Considerações de segurança de SSL/TLS: 354c.

   * *note subprocess: d6.: *note Considerações de segurança de
     Subprocess: 340e.

   * *note tempfile: e0.: *note mktemp foi descontinuado em razão de
     vulnerabilidade de condições de corrida: 2a0d.

   * *note xml: 120.: *note Segurança no XML: 3999.

   * *note zipfile: 131.: *note Arquivos .zip preparados de forma
     maliciosa podem causar esgotamento do volume do disco: 2bbb.

A opção de linha de comando *note -I: 965. pode ser usada para executar
o Python no modo isolado.  Quando não pode ser usado, a opção *note -P:
5a4. ou a variável de ambiente *note PYTHONSAFEPATH: 5a5. pode ser usada
para não preceder um caminho potencialmente inseguro para *note
sys.path: 3b4. como o diretório atual, o diretório do script ou uma
string vazia.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc4648.html


File: python.info,  Node: Estendendo e incorporando o interpretador Python,  Next: Manual de referência da API Python/C,  Prev: A Biblioteca Padrão do Python,  Up: Top

6 Estendendo e incorporando o interpretador Python
**************************************************

Neste documento descreveremos o desenvolvimento de módulos com C ou C++
para adicionar recursos ao interpretador Python criando novos módulos.
Esses módulos podem não somente definir novas funções, mas também novos
tipos de objetos e seu conjunto de métodos.  O documento também descreve
como incorporar o interpretador Python em outro aplicativo, de forma a
utilizá-lo como sendo uma extensão da linguagem.  Por fim, estudaremos
como podemos compilar e fazer a vinculação dos módulos de extensão para
que estes possam ser carregados dinamicamente (em tempo de execução)
pelo interpretador, caso o sistema operacional subjacente suportar esse
recurso.

Este documento pressupõe conhecimentos básicos sobre Python.  Para uma
introdução informal à linguagem, consulte *note O tutorial do Python:
1d55.  *note A Referência da Linguagem Python: 145. fornece uma
definição mais formal da linguagem.  *note A Biblioteca Padrão do
Python: 144. documenta os tipos, funções e módulos de objetos existentes
(embutidos e escritos em Python) que dão à linguagem sua ampla gama de
aplicações.

Para uma descrição detalhada de toda a API Python/C, consulte o *note
Manual de referência da API Python/C: 1d57. separado.

* Menu:

* Ferramentas de terceiros recomendadas::
* Criando extensões sem ferramentas de terceiros::
* Incorporando o tempo de execução do CPython em uma aplicação maior::


File: python.info,  Node: Ferramentas de terceiros recomendadas,  Next: Criando extensões sem ferramentas de terceiros,  Up: Estendendo e incorporando o interpretador Python

6.1 Ferramentas de terceiros recomendadas
=========================================

Este guia aborda apenas as ferramentas básicas para a criação de
extensões fornecidas como parte desta versão do CPython.  Algumas *note
ferramentas de terceiros: 4b37. oferecem abordagens mais simples e mais
sofisticadas para a criação de extensões em C e C++ para Python.


File: python.info,  Node: Criando extensões sem ferramentas de terceiros,  Next: Incorporando o tempo de execução do CPython em uma aplicação maior,  Prev: Ferramentas de terceiros recomendadas,  Up: Estendendo e incorporando o interpretador Python

6.2 Criando extensões sem ferramentas de terceiros
==================================================

Esta seção do guia aborda a criação de extensões C e C++ sem assistência
de ferramentas de terceiros.  Destina-se principalmente aos criadores
dessas ferramentas, em vez de ser uma maneira recomendada de criar suas
próprias extensões C.

Ver também
..........

PEP 489(1) – Inicialização de módulo extensão multifase

* Menu:

* Estendendo Python com C ou C++::
* Definindo Tipos de Extensão; Tutorial: Definindo Tipos de Extensão Tutorial.
* Defining Extension Types; Assorted Topics: Defining Extension Types Assorted Topics.
* Construindo extensões C e C++::
* Construindo Extensões C e C++ no Windows::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0489/


File: python.info,  Node: Estendendo Python com C ou C++,  Next: Definindo Tipos de Extensão Tutorial,  Up: Criando extensões sem ferramentas de terceiros

6.2.1 Estendendo Python com C ou C++
------------------------------------

É muito fácil adicionar novos módulos embutidos ao Python, se você
souber programar em C. Você pode adicionar 'módulos de extensão' para
fazer duas coisas que não podem ser feitas diretamente no Python: eles
podem implementar novos nos tipos de objetos embutidos e eles podem
chamar funções da biblioteca C e chamadas do sistema.

Para dar suporte a extensões, a API do Python API (Application
Programmers Interface) define um conjunto de funções, macros e variáveis
que fornecem acesso à maior parte dos aspectos do sistema de tempo de
execução do Python.  A API do Python pode ser incorporada em um arquivo
fonte em C com a inclusão do cabeçalho ‘"Python.h"’.

A compilação de um módulo de extensão depende do uso pretendido e da
configuração do sistema; detalhes serão dados nos próximos capítulos.

     Nota: A interface de extensões em C é específica para o CPython, e
     módulos de extensão não funcionam em outras implementações do
     Python.  Em muitos casos, é possível evitar a criação destas
     extensões em C e preservar a portabilidade para outras
     implementações.  Por exemplo, se o seu caso de uso for o de fazer
     chamadas a funções em bibliotecas C ou chamadas de sistema,
     considere utilizar o módulo *note ctypes: 2a. ou a biblioteca
     cffi(1) ao invés de escrever código C personalizado.  Esses módulos
     permitem escrever código Python que pode interoperar com código C e
     que é mais portável entre implementações do Python do que escrever
     e compilar um módulo de extensão em C.

* Menu:

* Um Exemplo Simples::
* Intermezzo; erros e exceções: Intermezzo erros e exceções.
* De volta ao exemplo::
* A tabela de métodos e a função de inicialização do módulo::
* Compilação e vinculação::
* Chamando funções Python de C::
* Extraindo parâmetros em funções de extensão::
* Parâmetros nomeados para funções de extensão::
* Construindo valores arbitrários::
* Contagens de referências::
* Escrevendo extensões em C++::
* Fornecendo uma API C para um módulo de extensão::

   ---------- Footnotes ----------

   (1) https://cffi.readthedocs.io/


File: python.info,  Node: Um Exemplo Simples,  Next: Intermezzo erros e exceções,  Up: Estendendo Python com C ou C++

6.2.1.1 Um Exemplo Simples
..........................

Vamos criar um módulo de extensão chamado ‘spam’ (a comida favorita dos
fãs de Monty Python…) e digamos que nosso objetivo seja criar uma
interface em Python para a função da biblioteca C ‘system()’ (1).  Essa
função toma uma string de caracteres terminada em nulo como argumento e
retorna um número inteiro.  Queremos que essa função seja chamável a
partir do Python como abaixo:

     >>> import spam
     >>> status = spam.system("ls -l")

Comece criando um arquivo chamado ‘spammodule.c’.  (Historicamente, se
um módulo for chamado ‘spam’, o arquivo C contendo sua implementação é
chamado ‘spammodule.c’; se o nome do módulo for muito longo, como
‘spammify’, o nome do arquivo pode ser só ‘spammify.c’.)

As duas primeiras linhas do nosso arquivo podem ser:

     #define PY_SSIZE_T_CLEAN
     #include <Python.h>

o que carrega a API do Python (você pode adicionar um comentário
descrevendo o propósito do módulo e uma nota de copyright, se desejar).

     Nota: Uma vez que Python pode definir algumas definições de
     pré-processador que afetam os cabeçalhos padrão em alguns sistemas,
     você 'deve' incluir ‘Python.h’ antes de quaisquer cabeçalhos padrão
     serem incluídos.

     ‘#define PY_SSIZE_T_CLEAN’ was used to indicate that ‘Py_ssize_t’
     should be used in some APIs instead of ‘int’.  It is not necessary
     since Python 3.13, but we keep it here for backward compatibility.
     See *note Strings e buffers: 38b. for a description of this macro.

All user-visible symbols defined by ‘Python.h’ have a prefix of ‘Py’ or
‘PY’, except those defined in standard header files.

     Dica: For backward compatibility, ‘Python.h’ includes several
     standard header files.  C extensions should include the standard
     headers that they use, and should not rely on these implicit
     includes.  If using the limited C API version 3.13 or newer, the
     implicit includes are:

        * ‘<assert.h>’

        * ‘<intrin.h>’ (on Windows)

        * ‘<inttypes.h>’

        * ‘<limits.h>’

        * ‘<math.h>’

        * ‘<stdarg.h>’

        * ‘<wchar.h>’

        * ‘<sys/types.h>’ (if present)

     If *note Py_LIMITED_API: 41e. is not defined, or is set to version
     3.12 or older, the headers below are also included:

        * ‘<ctype.h>’

        * ‘<unistd.h>’ (on POSIX)

     If *note Py_LIMITED_API: 41e. is not defined, or is set to version
     3.10 or older, the headers below are also included:

        * ‘<errno.h>’

        * ‘<stdio.h>’

        * ‘<stdlib.h>’

        * ‘<string.h>’

A próxima coisa que adicionamos ao nosso arquivo de módulo é a função C
que será chamada quando a expressão Python ‘spam.system(string)’ for
avaliada (veremos em breve como ela acaba sendo chamada):

     static PyObject *
     spam_system(PyObject *self, PyObject *args)
     {
         const char *command;
         int sts;

         if (!PyArg_ParseTuple(args, "s", &command))
             return NULL;
         sts = system(command);
         return PyLong_FromLong(sts);
     }

There is a straightforward translation from the argument list in Python
(for example, the single expression ‘"ls -l"’) to the arguments passed
to the C function.  The C function always has two arguments,
conventionally named 'self' and 'args'.

O argumento 'self' aponta para o objeto do módulo para funções de nível
de módulo; para um método, ele apontaria para a instância do objeto.

The 'args' argument will be a pointer to a Python tuple object
containing the arguments.  Each item of the tuple corresponds to an
argument in the call’s argument list.  The arguments are Python objects
— in order to do anything with them in our C function we have to convert
them to C values.  The function *note PyArg_ParseTuple(): 571. in the
Python API checks the argument types and converts them to C values.  It
uses a template string to determine the required types of the arguments
as well as the types of the C variables into which to store the
converted values.  More about this later.

*note PyArg_ParseTuple(): 571. returns true (nonzero) if all arguments
have the right type and its components have been stored in the variables
whose addresses are passed.  It returns false (zero) if an invalid
argument list was passed.  In the latter case it also raises an
appropriate exception so the calling function can return ‘NULL’
immediately (as we saw in the example).

   ---------- Footnotes ----------

   (1) Uma interface para esta função já existe no módulo padrão *note
os: a1. — ela foi escolhida como um exemplo simples e direto.


File: python.info,  Node: Intermezzo erros e exceções,  Next: De volta ao exemplo,  Prev: Um Exemplo Simples,  Up: Estendendo Python com C ou C++

6.2.1.2 Intermezzo: erros e exceções
....................................

An important convention throughout the Python interpreter is the
following: when a function fails, it should set an exception condition
and return an error value (usually ‘-1’ or a ‘NULL’ pointer).  Exception
information is stored in three members of the interpreter’s thread
state.  These are ‘NULL’ if there is no exception.  Otherwise they are
the C equivalents of the members of the Python tuple returned by *note
sys.exc_info(): 68a.  These are the exception type, exception instance,
and a traceback object.  It is important to know about them to
understand how errors are passed around.

A API Python define uma série de funções para definir vários tipos de
exceções.

The most common one is *note PyErr_SetString(): 57c.  Its arguments are
an exception object and a C string.  The exception object is usually a
predefined object like *note PyExc_ZeroDivisionError: 4b40.  The C
string indicates the cause of the error and is converted to a Python
string object and stored as the “associated value” of the exception.

Another useful function is *note PyErr_SetFromErrno(): 4b41, which only
takes an exception argument and constructs the associated value by
inspection of the global variable ‘errno’.  The most general function is
*note PyErr_SetObject(): 57b, which takes two object arguments, the
exception and its associated value.  You don’t need to *note
Py_INCREF(): 56e. the objects passed to any of these functions.

You can test non-destructively whether an exception has been set with
*note PyErr_Occurred(): 1a3b.  This returns the current exception
object, or ‘NULL’ if no exception has occurred.  You normally don’t need
to call *note PyErr_Occurred(): 1a3b. to see whether an error occurred
in a function call, since you should be able to tell from the return
value.

When a function 'f' that calls another function 'g' detects that the
latter fails, 'f' should itself return an error value (usually ‘NULL’ or
‘-1’).  It should 'not' call one of the ‘PyErr_*’ functions — one has
already been called by 'g'.  'f'’s caller is then supposed to also
return an error indication to 'its' caller, again 'without' calling
‘PyErr_*’, and so on — the most detailed cause of the error was already
reported by the function that first detected it.  Once the error reaches
the Python interpreter’s main loop, this aborts the currently executing
Python code and tries to find an exception handler specified by the
Python programmer.

(There are situations where a module can actually give a more detailed
error message by calling another ‘PyErr_*’ function, and in such cases
it is fine to do so.  As a general rule, however, this is not necessary,
and can cause information about the cause of the error to be lost: most
operations can fail for a variety of reasons.)

To ignore an exception set by a function call that failed, the exception
condition must be cleared explicitly by calling *note PyErr_Clear():
1069.  The only time C code should call *note PyErr_Clear(): 1069. is if
it doesn’t want to pass the error on to the interpreter but wants to
handle it completely by itself (possibly by trying something else, or
pretending nothing went wrong).

Every failing ‘malloc()’ call must be turned into an exception — the
direct caller of ‘malloc()’ (or ‘realloc()’) must call *note
PyErr_NoMemory(): 4b42. and return a failure indicator itself.  All the
object-creating functions (for example, *note PyLong_FromLong(): 195a.)
already do this, so this note is only relevant to those who call
‘malloc()’ directly.

Also note that, with the important exception of *note
PyArg_ParseTuple(): 571. and friends, functions that return an integer
status usually return a positive value or zero for success and ‘-1’ for
failure, like Unix system calls.

Finally, be careful to clean up garbage (by making *note Py_XDECREF():
78f. or *note Py_DECREF(): 56f. calls for objects you have already
created) when you return an error indicator!

The choice of which exception to raise is entirely yours.  There are
predeclared C objects corresponding to all built-in Python exceptions,
such as *note PyExc_ZeroDivisionError: 4b40, which you can use directly.
Of course, you should choose exceptions wisely — don’t use *note
PyExc_TypeError: 4b43. to mean that a file couldn’t be opened (that
should probably be *note PyExc_OSError: 4b44.).  If something’s wrong
with the argument list, the *note PyArg_ParseTuple(): 571. function
usually raises *note PyExc_TypeError: 4b43.  If you have an argument
whose value must be in a particular range or must satisfy other
conditions, *note PyExc_ValueError: 4b45. is appropriate.

You can also define a new exception that is unique to your module.  The
simplest way to do this is to declare a static global object variable at
the beginning of the file:

     static PyObject *SpamError = NULL;

and initialize it by calling *note PyErr_NewException(): 12ab. in the
module’s *note Py_mod_exec: 985. function (‘spam_module_exec()’):

     SpamError = PyErr_NewException("spam.error", NULL, NULL);

Since ‘SpamError’ is a global variable, it will be overwritten every
time the module is reinitialized, when the *note Py_mod_exec: 985.
function is called.

For now, let’s avoid the issue: we will block repeated initialization by
raising an *note ImportError: 419.:

     static PyObject *SpamError = NULL;

     static int
     spam_module_exec(PyObject *m)
     {
         if (SpamError != NULL) {
             PyErr_SetString(PyExc_ImportError,
                             "cannot initialize spam module more than once");
             return -1;
         }
         SpamError = PyErr_NewException("spam.error", NULL, NULL);
         if (PyModule_AddObjectRef(m, "SpamError", SpamError) < 0) {
             return -1;
         }

         return 0;
     }

     static PyModuleDef_Slot spam_module_slots[] = {
         {Py_mod_exec, spam_module_exec},
         {0, NULL}
     };

     static struct PyModuleDef spam_module = {
         .m_base = PyModuleDef_HEAD_INIT,
         .m_name = "spam",
         .m_size = 0,  // non-negative
         .m_slots = spam_module_slots,
     };

     PyMODINIT_FUNC
     PyInit_spam(void)
     {
         return PyModuleDef_Init(&spam_module);
     }

Note that the Python name for the exception object is ‘spam.error’.  The
*note PyErr_NewException(): 12ab. function may create a class with the
base class being *note Exception: 9e2. (unless another class is passed
in instead of ‘NULL’), described in *note Exceções embutidas: 19b1.

Note also that the ‘SpamError’ variable retains a reference to the newly
created exception class; this is intentional!  Since the exception could
be removed from the module by external code, an owned reference to the
class is needed to ensure that it will not be discarded, causing
‘SpamError’ to become a dangling pointer.  Should it become a dangling
pointer, C code which raises the exception could cause a core dump or
other unintended side effects.

For now, the *note Py_DECREF(): 56f. call to remove this reference is
missing.  Even when the Python interpreter shuts down, the global
‘SpamError’ variable will not be garbage-collected.  It will “leak”.  We
did, however, ensure that this will happen at most once per process.

We discuss the use of *note PyMODINIT_FUNC: 151b. as a function return
type later in this sample.

The ‘spam.error’ exception can be raised in your extension module using
a call to *note PyErr_SetString(): 57c. as shown below:

     static PyObject *
     spam_system(PyObject *self, PyObject *args)
     {
         const char *command;
         int sts;

         if (!PyArg_ParseTuple(args, "s", &command))
             return NULL;
         sts = system(command);
         if (sts < 0) {
             PyErr_SetString(SpamError, "System command failed");
             return NULL;
         }
         return PyLong_FromLong(sts);
     }


File: python.info,  Node: De volta ao exemplo,  Next: A tabela de métodos e a função de inicialização do módulo,  Prev: Intermezzo erros e exceções,  Up: Estendendo Python com C ou C++

6.2.1.3 De volta ao exemplo
...........................

Going back to our example function, you should now be able to understand
this statement:

     if (!PyArg_ParseTuple(args, "s", &command))
         return NULL;

It returns ‘NULL’ (the error indicator for functions returning object
pointers) if an error is detected in the argument list, relying on the
exception set by *note PyArg_ParseTuple(): 571.  Otherwise the string
value of the argument has been copied to the local variable ‘command’.
This is a pointer assignment and you are not supposed to modify the
string to which it points (so in Standard C, the variable ‘command’
should properly be declared as ‘const char *command’).

The next statement is a call to the Unix function ‘system()’, passing it
the string we just got from *note PyArg_ParseTuple(): 571.:

     sts = system(command);

Our ‘spam.system()’ function must return the value of ‘sts’ as a Python
object.  This is done using the function *note PyLong_FromLong(): 195a.

     return PyLong_FromLong(sts);

Neste caso, ele retornará um objeto inteiro (sim, até mesmo inteiros são
objetos no heap em Python!)

If you have a C function that returns no useful argument (a function
returning void), the corresponding Python function must return ‘None’.
You need this idiom to do so (which is implemented by the *note
Py_RETURN_NONE: 14bb. macro):

     Py_INCREF(Py_None);
     return Py_None;

*note Py_None: 4b48. is the C name for the special Python object ‘None’.
It is a genuine Python object rather than a ‘NULL’ pointer, which means
“error” in most contexts, as we have seen.


File: python.info,  Node: A tabela de métodos e a função de inicialização do módulo,  Next: Compilação e vinculação,  Prev: De volta ao exemplo,  Up: Estendendo Python com C ou C++

6.2.1.4 A tabela de métodos e a função de inicialização do módulo
.................................................................

I promised to show how ‘spam_system()’ is called from Python programs.
First, we need to list its name and address in a “method table”:

     static PyMethodDef spam_methods[] = {
         ...
         {"system",  spam_system, METH_VARARGS,
          "Execute a shell command."},
         ...
         {NULL, NULL, 0, NULL}        /* Sentinel */
     };

Note the third entry (‘METH_VARARGS’).  This is a flag telling the
interpreter the calling convention to be used for the C function.  It
should normally always be ‘METH_VARARGS’ or ‘METH_VARARGS |
METH_KEYWORDS’; a value of ‘0’ means that an obsolete variant of *note
PyArg_ParseTuple(): 571. is used.

When using only ‘METH_VARARGS’, the function should expect the
Python-level parameters to be passed in as a tuple acceptable for
parsing via *note PyArg_ParseTuple(): 571.; more information on this
function is provided below.

The *note METH_KEYWORDS: 4b4b. bit may be set in the third field if
keyword arguments should be passed to the function.  In this case, the C
function should accept a third ‘PyObject *’ parameter which will be a
dictionary of keywords.  Use *note PyArg_ParseTupleAndKeywords(): 383.
to parse the arguments to such a function.

A tabela de métodos deve ser referenciada na estrutura de definição do
módulo:

     static struct PyModuleDef spam_module = {
         ...
         .m_methods = spam_methods,
         ...
     };

This structure, in turn, must be passed to the interpreter in the
module’s initialization function.  The initialization function must be
named ‘PyInit_name()’, where 'name' is the name of the module, and
should be the only non-‘static’ item defined in the module file:

     PyMODINIT_FUNC
     PyInit_spam(void)
     {
         return PyModuleDef_Init(&spam_module);
     }

Note that *note PyMODINIT_FUNC: 151b. declares the function as ‘PyObject
*’ return type, declares any special linkage declarations required by
the platform, and for C++ declares the function as ‘extern "C"’.

‘PyInit_spam()’ is called when each interpreter imports its module
‘spam’ for the first time.  (See below for comments about embedding
Python.)  A pointer to the module definition must be returned via *note
PyModuleDef_Init(): 4b4c, so that the import machinery can create the
module and store it in ‘sys.modules’.

When embedding Python, the ‘PyInit_spam()’ function is not called
automatically unless there’s an entry in the *note PyImport_Inittab:
18a3. table.  To add the module to the initialization table, use *note
PyImport_AppendInittab(): 18a4, optionally followed by an import of the
module:

     #define PY_SSIZE_T_CLEAN
     #include <Python.h>

     int
     main(int argc, char *argv[])
     {
         PyStatus status;
         PyConfig config;
         PyConfig_InitPythonConfig(&config);

         /* Add a built-in module, before Py_Initialize */
         if (PyImport_AppendInittab("spam", PyInit_spam) == -1) {
             fprintf(stderr, "Error: could not extend in-built modules table\n");
             exit(1);
         }

         /* Pass argv[0] to the Python interpreter */
         status = PyConfig_SetBytesString(&config, &config.program_name, argv[0]);
         if (PyStatus_Exception(status)) {
             goto exception;
         }

         /* Initialize the Python interpreter.  Required.
            If this step fails, it will be a fatal error. */
         status = Py_InitializeFromConfig(&config);
         if (PyStatus_Exception(status)) {
             goto exception;
         }
         PyConfig_Clear(&config);

         /* Optionally import the module; alternatively,
            import can be deferred until the embedded script
            imports it. */
         PyObject *pmodule = PyImport_ImportModule("spam");
         if (!pmodule) {
             PyErr_Print();
             fprintf(stderr, "Error: could not import module 'spam'\n");
         }

         // ... use Python C API here ...

         return 0;

       exception:
          PyConfig_Clear(&config);
          Py_ExitStatusException(status);
     }

     Nota: If you declare a global variable or a local static one, the
     module may experience unintended side-effects on re-initialisation,
     for example when removing entries from ‘sys.modules’ or importing
     compiled modules into multiple interpreters within a process (or
     following a ‘fork()’ without an intervening ‘exec()’).  If module
     state is not yet fully *note isolated: 4b4d, authors should
     consider marking the module as having no support for
     subinterpreters (via *note
     Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED: 4b4e.).

A more substantial example module is included in the Python source
distribution as ‘Modules/xxlimited.c’.  This file may be used as a
template or simply read as an example.


File: python.info,  Node: Compilação e vinculação,  Next: Chamando funções Python de C,  Prev: A tabela de métodos e a função de inicialização do módulo,  Up: Estendendo Python com C ou C++

6.2.1.5 Compilação e vinculação
...............................

Há mais duas coisas a fazer antes de usar sua nova extensão: compilá-la
e vinculá-la ao sistema Python.  Se você usa carregamento dinâmico, os
detalhes podem depender do estilo de carregamento dinâmico que seu
sistema utiliza; consulte os capítulos sobre construção de módulos de
extensão (capítulo *note Construindo extensões C e C++: 4b51.) e
informações adicionais referentes apenas à construção no Windows
(capítulo *note Construindo Extensões C e C++ no Windows: 1fbf.) para
obter mais informações sobre isso.

If you can’t use dynamic loading, or if you want to make your module a
permanent part of the Python interpreter, you will have to change the
configuration setup and rebuild the interpreter.  Luckily, this is very
simple on Unix: just place your file (‘spammodule.c’ for example) in the
‘Modules/’ directory of an unpacked source distribution, add a line to
the file ‘Modules/Setup.local’ describing your file:

     spam spammodule.o

and rebuild the interpreter by running ‘make’ in the toplevel directory.
You can also run ‘make’ in the ‘Modules/’ subdirectory, but then you
must first rebuild ‘Makefile’ there by running ‘‘make’ Makefile’.  (This
is necessary each time you change the ‘Setup’ file.)

If your module requires additional libraries to link with, these can be
listed on the line in the configuration file as well, for instance:

     spam spammodule.o -lX11


File: python.info,  Node: Chamando funções Python de C,  Next: Extraindo parâmetros em funções de extensão,  Prev: Compilação e vinculação,  Up: Estendendo Python com C ou C++

6.2.1.6 Chamando funções Python de C
....................................

Até agora, nos concentramos em tornar funções C chamáveis a partir de
Python.  O inverso também é útil: chamar funções Python a partir de C.
Isso é especialmente verdadeiro para bibliotecas que oferecem suporte às
chamadas funções de “callback”.  Se uma interface C utiliza callbacks, o
Python equivalente frequentemente precisa fornecer um mecanismo de
callback ao programador Python; a implementação exigirá a chamada das
funções de callback Python a partir de um callback C. Outros usos também
são imagináveis.

Felizmente, o interpretador Python é facilmente chamado recursivamente,
e há uma interface padrão para chamar uma função Python.  (Não vou me
aprofundar em como chamar o analisador sintático do Python com uma
string específica como entrada — se você estiver interessado, dê uma
olhada na implementação da opção de linha de comando *note -c: 5e0. em
‘Modules/main.c’ do código-fonte Python.)

Calling a Python function is easy.  First, the Python program must
somehow pass you the Python function object.  You should provide a
function (or some other interface) to do this.  When this function is
called, save a pointer to the Python function object (be careful to
*note Py_INCREF(): 56e. it!)  in a global variable — or wherever you see
fit.  For example, the following function might be part of a module
definition:

     static PyObject *my_callback = NULL;

     static PyObject *
     my_set_callback(PyObject *dummy, PyObject *args)
     {
         PyObject *result = NULL;
         PyObject *temp;

         if (PyArg_ParseTuple(args, "O:set_callback", &temp)) {
             if (!PyCallable_Check(temp)) {
                 PyErr_SetString(PyExc_TypeError, "parameter must be callable");
                 return NULL;
             }
             Py_XINCREF(temp);         /* Add a reference to new callback */
             Py_XDECREF(my_callback);  /* Dispose of previous callback */
             my_callback = temp;       /* Remember new callback */
             /* Boilerplate to return "None" */
             Py_INCREF(Py_None);
             result = Py_None;
         }
         return result;
     }

This function must be registered with the interpreter using the *note
METH_VARARGS: 1551. flag; this is described in section *note A tabela de
métodos e a função de inicialização do módulo: 4b49.  The *note
PyArg_ParseTuple(): 571. function and its arguments are documented in
section *note Extraindo parâmetros em funções de extensão: 4b54.

The macros *note Py_XINCREF(): a6e. and *note Py_XDECREF(): 78f.
increment/decrement the reference count of an object and are safe in the
presence of ‘NULL’ pointers (but note that 'temp' will not be ‘NULL’ in
this context).  More info on them in section *note Contagens de
referências: 4b55.

Later, when it is time to call the function, you call the C function
*note PyObject_CallObject(): 4b56.  This function has two arguments,
both pointers to arbitrary Python objects: the Python function, and the
argument list.  The argument list must always be a tuple object, whose
length is the number of arguments.  To call the Python function with no
arguments, pass in ‘NULL’, or an empty tuple; to call it with one
argument, pass a singleton tuple.  *note Py_BuildValue(): 8ac. returns a
tuple when its format string consists of zero or more format codes
between parentheses.  For example:

     int arg;
     PyObject *arglist;
     PyObject *result;
     ...
     arg = 123;
     ...
     /* Time to call the callback */
     arglist = Py_BuildValue("(i)", arg);
     result = PyObject_CallObject(my_callback, arglist);
     Py_DECREF(arglist);

*note PyObject_CallObject(): 4b56. returns a Python object pointer: this
is the return value of the Python function.  *note
PyObject_CallObject(): 4b56. is “reference-count-neutral” with respect
to its arguments.  In the example a new tuple was created to serve as
the argument list, which is *note Py_DECREF(): 56f.-ed immediately after
the *note PyObject_CallObject(): 4b56. call.

The return value of *note PyObject_CallObject(): 4b56. is “new”: either
it is a brand new object, or it is an existing object whose reference
count has been incremented.  So, unless you want to save it in a global
variable, you should somehow *note Py_DECREF(): 56f. the result, even
(especially!)  if you are not interested in its value.

Before you do this, however, it is important to check that the return
value isn’t ‘NULL’.  If it is, the Python function terminated by raising
an exception.  If the C code that called *note PyObject_CallObject():
4b56. is called from Python, it should now return an error indication to
its Python caller, so the interpreter can print a stack trace, or the
calling Python code can handle the exception.  If this is not possible
or desirable, the exception should be cleared by calling *note
PyErr_Clear(): 1069.  For example:

     if (result == NULL)
         return NULL; /* Pass error back */
     ...use result...
     Py_DECREF(result);

Depending on the desired interface to the Python callback function, you
may also have to provide an argument list to *note
PyObject_CallObject(): 4b56.  In some cases the argument list is also
provided by the Python program, through the same interface that
specified the callback function.  It can then be saved and used in the
same manner as the function object.  In other cases, you may have to
construct a new tuple to pass as the argument list.  The simplest way to
do this is to call *note Py_BuildValue(): 8ac.  For example, if you want
to pass an integral event code, you might use the following code:

     PyObject *arglist;
     ...
     arglist = Py_BuildValue("(l)", eventcode);
     result = PyObject_CallObject(my_callback, arglist);
     Py_DECREF(arglist);
     if (result == NULL)
         return NULL; /* Pass error back */
     /* Here maybe use the result */
     Py_DECREF(result);

Note the placement of ‘Py_DECREF(arglist)’ immediately after the call,
before the error check!  Also note that strictly speaking this code is
not complete: *note Py_BuildValue(): 8ac. may run out of memory, and
this should be checked.

You may also call a function with keyword arguments by using *note
PyObject_Call(): 39c, which supports arguments and keyword arguments.
As in the above example, we use *note Py_BuildValue(): 8ac. to construct
the dictionary.

     PyObject *dict;
     ...
     dict = Py_BuildValue("{s:i}", "name", val);
     result = PyObject_Call(my_callback, NULL, dict);
     Py_DECREF(dict);
     if (result == NULL)
         return NULL; /* Pass error back */
     /* Here maybe use the result */
     Py_DECREF(result);


File: python.info,  Node: Extraindo parâmetros em funções de extensão,  Next: Parâmetros nomeados para funções de extensão,  Prev: Chamando funções Python de C,  Up: Estendendo Python com C ou C++

6.2.1.7 Extraindo parâmetros em funções de extensão
...................................................

The *note PyArg_ParseTuple(): 571. function is declared as follows:

     int PyArg_ParseTuple(PyObject *arg, const char *format, ...);

O argumento 'arg' deve ser um objeto tupla contendo uma lista de
argumentos passada de Python para uma função C. O argumento 'format'
deve ser uma string de formato, cuja sintaxe é explicada em *note
Análise de argumentos e construção de valores: 8ad. no Manual de
Referência da API C/Python.  Os argumentos restantes devem ser endereços
de variáveis cujo tipo é determinado pela string de formato.

Note that while *note PyArg_ParseTuple(): 571. checks that the Python
arguments have the required types, it cannot check the validity of the
addresses of C variables passed to the call: if you make mistakes there,
your code will probably crash or at least overwrite random bits in
memory.  So be careful!

Note que quaisquer referências a objeto Python que são fornecidas ao
chamador são referências 'emprestadas'; não decremente a contagem de
referências delas!

Alguns exemplos de chamadas:

     #define PY_SSIZE_T_CLEAN
     #include <Python.h>

     int ok;
     int i, j;
     long k, l;
     const char *s;
     Py_ssize_t size;

     ok = PyArg_ParseTuple(args, ""); /* No arguments */
         /* Python call: f() */

     ok = PyArg_ParseTuple(args, "s", &s); /* A string */
         /* Possible Python call: f('whoops!') */

     ok = PyArg_ParseTuple(args, "lls", &k, &l, &s); /* Two longs and a string */
         /* Possible Python call: f(1, 2, 'three') */

     ok = PyArg_ParseTuple(args, "(ii)s#", &i, &j, &s, &size);
         /* A pair of ints and a string, whose size is also returned */
         /* Possible Python call: f((1, 2), 'three') */

     {
         const char *file;
         const char *mode = "r";
         int bufsize = 0;
         ok = PyArg_ParseTuple(args, "s|si", &file, &mode, &bufsize);
         /* A string, and optionally another string and an integer */
         /* Possible Python calls:
            f('spam')
            f('spam', 'w')
            f('spam', 'wb', 100000) */
     }

     {
         int left, top, right, bottom, h, v;
         ok = PyArg_ParseTuple(args, "((ii)(ii))(ii)",
                  &left, &top, &right, &bottom, &h, &v);
         /* A rectangle and a point */
         /* Possible Python call:
            f(((0, 0), (400, 300)), (10, 10)) */
     }

     {
         Py_complex c;
         ok = PyArg_ParseTuple(args, "D:myfunction", &c);
         /* a complex, also providing a function name for errors */
         /* Possible Python call: myfunction(1+2j) */
     }


File: python.info,  Node: Parâmetros nomeados para funções de extensão,  Next: Construindo valores arbitrários,  Prev: Extraindo parâmetros em funções de extensão,  Up: Estendendo Python com C ou C++

6.2.1.8 Parâmetros nomeados para funções de extensão
....................................................

The *note PyArg_ParseTupleAndKeywords(): 383. function is declared as
follows:

     int PyArg_ParseTupleAndKeywords(PyObject *arg, PyObject *kwdict,
                                     const char *format, char * const *kwlist, ...);

The 'arg' and 'format' parameters are identical to those of the *note
PyArg_ParseTuple(): 571. function.  The 'kwdict' parameter is the
dictionary of keywords received as the third parameter from the Python
runtime.  The 'kwlist' parameter is a ‘NULL’-terminated list of strings
which identify the parameters; the names are matched with the type
information from 'format' from left to right.  On success, *note
PyArg_ParseTupleAndKeywords(): 383. returns true, otherwise it returns
false and raises an appropriate exception.

     Nota: Nested tuples cannot be parsed when using keyword arguments!
     Keyword parameters passed in which are not present in the 'kwlist'
     will cause *note TypeError: 2c3. to be raised.

Aqui está um módulo de exemplo que usa parâmetros nomeados, baseado em
um exemplo de Geoff Philbrick (<philbrick@hks.com>):

     #define PY_SSIZE_T_CLEAN
     #include <Python.h>

     static PyObject *
     keywdarg_parrot(PyObject *self, PyObject *args, PyObject *keywds)
     {
         int voltage;
         const char *state = "a stiff";
         const char *action = "voom";
         const char *type = "Norwegian Blue";

         static char *kwlist[] = {"voltage", "state", "action", "type", NULL};

         if (!PyArg_ParseTupleAndKeywords(args, keywds, "i|sss", kwlist,
                                          &voltage, &state, &action, &type))
             return NULL;

         printf("-- This parrot wouldn't %s if you put %i Volts through it.\n",
                action, voltage);
         printf("-- Lovely plumage, the %s -- It's %s!\n", type, state);

         Py_RETURN_NONE;
     }

     static PyMethodDef keywdarg_methods[] = {
         /* The cast of the function is necessary since PyCFunction values
          * only take two PyObject* parameters, and keywdarg_parrot() takes
          * three.
          */
         {"parrot", (PyCFunction)(void(*)(void))keywdarg_parrot, METH_VARARGS | METH_KEYWORDS,
          "Print a lovely skit to standard output."},
         {NULL, NULL, 0, NULL}   /* sentinel */
     };

     static struct PyModuleDef keywdarg_module = {
         .m_base = PyModuleDef_HEAD_INIT,
         .m_name = "keywdarg",
         .m_size = 0,
         .m_methods = keywdarg_methods,
     };

     PyMODINIT_FUNC
     PyInit_keywdarg(void)
     {
         return PyModuleDef_Init(&keywdarg_module);
     }


File: python.info,  Node: Construindo valores arbitrários,  Next: Contagens de referências,  Prev: Parâmetros nomeados para funções de extensão,  Up: Estendendo Python com C ou C++

6.2.1.9 Construindo valores arbitrários
.......................................

This function is the counterpart to *note PyArg_ParseTuple(): 571.  It
is declared as follows:

     PyObject *Py_BuildValue(const char *format, ...);

It recognizes a set of format units similar to the ones recognized by
*note PyArg_ParseTuple(): 571, but the arguments (which are input to the
function, not output) must not be pointers, just values.  It returns a
new Python object, suitable for returning from a C function called from
Python.

One difference with *note PyArg_ParseTuple(): 571.: while the latter
requires its first argument to be a tuple (since Python argument lists
are always represented as tuples internally), *note Py_BuildValue():
8ac. does not always build a tuple.  It builds a tuple only if its
format string contains two or more format units.  If the format string
is empty, it returns ‘None’; if it contains exactly one format unit, it
returns whatever object is described by that format unit.  To force it
to return a tuple of size 0 or one, parenthesize the format string.

Examples (to the left the call, to the right the resulting Python
value):

     Py_BuildValue("")                        None
     Py_BuildValue("i", 123)                  123
     Py_BuildValue("iii", 123, 456, 789)      (123, 456, 789)
     Py_BuildValue("s", "hello")              'hello'
     Py_BuildValue("y", "hello")              b'hello'
     Py_BuildValue("ss", "hello", "world")    ('hello', 'world')
     Py_BuildValue("s#", "hello", 4)          'hell'
     Py_BuildValue("y#", "hello", 4)          b'hell'
     Py_BuildValue("()")                      ()
     Py_BuildValue("(i)", 123)                (123,)
     Py_BuildValue("(ii)", 123, 456)          (123, 456)
     Py_BuildValue("(i,i)", 123, 456)         (123, 456)
     Py_BuildValue("[i,i]", 123, 456)         [123, 456]
     Py_BuildValue("{s:i,s:i}",
                   "abc", 123, "def", 456)    {'abc': 123, 'def': 456}
     Py_BuildValue("((ii)(ii)) (ii)",
                   1, 2, 3, 4, 5, 6)          (((1, 2), (3, 4)), (5, 6))


File: python.info,  Node: Contagens de referências,  Next: Escrevendo extensões em C++,  Prev: Construindo valores arbitrários,  Up: Estendendo Python com C ou C++

6.2.1.10 Contagens de referências
.................................

In languages like C or C++, the programmer is responsible for dynamic
allocation and deallocation of memory on the heap.  In C, this is done
using the functions ‘malloc()’ and ‘free()’.  In C++, the operators
‘new’ and ‘delete’ are used with essentially the same meaning and we’ll
restrict the following discussion to the C case.

Every block of memory allocated with ‘malloc()’ should eventually be
returned to the pool of available memory by exactly one call to
‘free()’.  It is important to call ‘free()’ at the right time.  If a
block’s address is forgotten but ‘free()’ is not called for it, the
memory it occupies cannot be reused until the program terminates.  This
is called a 'memory leak'.  On the other hand, if a program calls
‘free()’ for a block and then continues to use the block, it creates a
conflict with reuse of the block through another ‘malloc()’ call.  This
is called 'using freed memory'.  It has the same bad consequences as
referencing uninitialized data — core dumps, wrong results, mysterious
crashes.

Causas comuns de vazamentos de memória são caminhos incomuns no código.
Por exemplo, uma função pode alocar um bloco de memória, executar algum
cálculo e, em seguida, liberar o bloco novamente.  Agora, uma alteração
nos requisitos da função pode adicionar um teste ao cálculo que detecta
uma condição de erro e pode retornar prematuramente da função.  É fácil
esquecer de liberar o bloco de memória alocado ao executar essa saída
prematura, especialmente quando ela é adicionada posteriormente ao
código.  Esses vazamentos, uma vez introduzidos, geralmente passam
despercebidos por um longo tempo: a saída de erro é executada apenas em
uma pequena fração de todas as chamadas, e a maioria das máquinas
modernas tem bastante memória virtual, portanto, o vazamento só se torna
aparente em um processo de longa duração que usa a função com vazamento
com frequência.  Portanto, é importante evitar que vazamentos aconteçam
por meio de uma convenção ou estratégia de codificação que minimize esse
tipo de erro.

Since Python makes heavy use of ‘malloc()’ and ‘free()’, it needs a
strategy to avoid memory leaks as well as the use of freed memory.  The
chosen method is called 'reference counting'.  The principle is simple:
every object contains a counter, which is incremented when a reference
to the object is stored somewhere, and which is decremented when a
reference to it is deleted.  When the counter reaches zero, the last
reference to the object has been deleted and the object is freed.

An alternative strategy is called 'automatic garbage collection'.
(Sometimes, reference counting is also referred to as a garbage
collection strategy, hence my use of “automatic” to distinguish the
two.)  The big advantage of automatic garbage collection is that the
user doesn’t need to call ‘free()’ explicitly.  (Another claimed
advantage is an improvement in speed or memory usage — this is no hard
fact however.)  The disadvantage is that for C, there is no truly
portable automatic garbage collector, while reference counting can be
implemented portably (as long as the functions ‘malloc()’ and ‘free()’
are available — which the C Standard guarantees).  Maybe some day a
sufficiently portable automatic garbage collector will be available for
C. Until then, we’ll have to live with reference counts.

Embora o Python utilize a implementação tradicional de contagem de
referências, ele também oferece um detector de ciclos que funciona para
detectar ciclos de referência.  Isso permite que as aplicações não se
preocupem em criar referências circulares diretas ou indiretas; esses
são os pontos fracos da coleta de lixo implementada usando apenas a
contagem de referências.  Ciclos de referência consistem em objetos que
contêm referências (possivelmente indiretas) a si mesmos, de modo que
cada objeto no ciclo tem uma contagem de referências diferente de zero.
Implementações típicas de contagem de referências não são capazes de
recuperar a memória pertencente a nenhum objeto em um ciclo de
referência, ou referenciada a partir dos objetos no ciclo, mesmo que não
haja mais referências ao próprio ciclo.

The cycle detector is able to detect garbage cycles and can reclaim
them.  The *note gc: 60. module exposes a way to run the detector (the
*note collect(): a43. function), as well as configuration interfaces and
the ability to disable the detector at runtime.

* Menu:

* Contagem de referências no Python::
* Regras de propriedade::
* Gelo fino::
* Ponteiros NULL::


File: python.info,  Node: Contagem de referências no Python,  Next: Regras de propriedade,  Up: Contagens de referências

6.2.1.11 Contagem de referências no Python
..........................................

There are two macros, ‘Py_INCREF(x)’ and ‘Py_DECREF(x)’, which handle
the incrementing and decrementing of the reference count.  *note
Py_DECREF(): 56f. also frees the object when the count reaches zero.
For flexibility, it doesn’t call ‘free()’ directly — rather, it makes a
call through a function pointer in the object’s 'type object'.  For this
purpose (and others), every object also contains a pointer to its type
object.

The big question now remains: when to use ‘Py_INCREF(x)’ and
‘Py_DECREF(x)’?  Let’s first introduce some terms.  Nobody “owns” an
object; however, you can 'own a reference' to an object.  An object’s
reference count is now defined as the number of owned references to it.
The owner of a reference is responsible for calling *note Py_DECREF():
56f. when the reference is no longer needed.  Ownership of a reference
can be transferred.  There are three ways to dispose of an owned
reference: pass it on, store it, or call *note Py_DECREF(): 56f.
Forgetting to dispose of an owned reference creates a memory leak.

It is also possible to 'borrow' (1) a reference to an object.  The
borrower of a reference should not call *note Py_DECREF(): 56f.  The
borrower must not hold on to the object longer than the owner from which
it was borrowed.  Using a borrowed reference after the owner has
disposed of it risks using freed memory and should be avoided completely
(2).

The advantage of borrowing over owning a reference is that you don’t
need to take care of disposing of the reference on all possible paths
through the code — in other words, with a borrowed reference you don’t
run the risk of leaking when a premature exit is taken.  The
disadvantage of borrowing over owning is that there are some subtle
situations where in seemingly correct code a borrowed reference can be
used after the owner from which it was borrowed has in fact disposed of
it.

A borrowed reference can be changed into an owned reference by calling
*note Py_INCREF(): 56e.  This does not affect the status of the owner
from which the reference was borrowed — it creates a new owned
reference, and gives full owner responsibilities (the new owner must
dispose of the reference properly, as well as the previous owner).

   ---------- Footnotes ----------

   (1) A metáfora de “pegar emprestado” uma referência não é
completamente correta: o proprietário ainda tem uma cópia da referência.

   (2) Checking that the reference count is at least 1 'does not work' —
the reference count itself could be in freed memory and may thus be
reused for another object!


File: python.info,  Node: Regras de propriedade,  Next: Gelo fino,  Prev: Contagem de referências no Python,  Up: Contagens de referências

6.2.1.12 Regras de propriedade
..............................

Sempre que uma referência de objeto é passada para dentro ou para fora
de uma função, faz parte da especificação da interface da função se a
propriedade é transferida com a referência ou não.

Most functions that return a reference to an object pass on ownership
with the reference.  In particular, all functions whose function it is
to create a new object, such as *note PyLong_FromLong(): 195a. and *note
Py_BuildValue(): 8ac, pass ownership to the receiver.  Even if the
object is not actually new, you still receive ownership of a new
reference to that object.  For instance, *note PyLong_FromLong(): 195a.
maintains a cache of popular values and can return a reference to a
cached item.

Many functions that extract objects from other objects also transfer
ownership with the reference, for instance *note
PyObject_GetAttrString(): 348.  The picture is less clear, here,
however, since a few common routines are exceptions: *note
PyTuple_GetItem(): 4b61, *note PyList_GetItem(): 35a, *note
PyDict_GetItem(): 387, and *note PyDict_GetItemString(): 388. all return
references that you borrow from the tuple, list or dictionary.

The function *note PyImport_AddModule(): 357. also returns a borrowed
reference, even though it may actually create the object it returns:
this is possible because an owned reference to the object is stored in
‘sys.modules’.

When you pass an object reference into another function, in general, the
function borrows the reference from you — if it needs to store it, it
will use *note Py_INCREF(): 56e. to become an independent owner.  There
are exactly two important exceptions to this rule: *note
PyTuple_SetItem(): 4b62. and *note PyList_SetItem(): 165e.  These
functions take over ownership of the item passed to them — even if they
fail!  (Note that *note PyDict_SetItem(): 4b63. and friends don’t take
over ownership — they are “normal.”)

When a C function is called from Python, it borrows references to its
arguments from the caller.  The caller owns a reference to the object,
so the borrowed reference’s lifetime is guaranteed until the function
returns.  Only when such a borrowed reference must be stored or passed
on, it must be turned into an owned reference by calling *note
Py_INCREF(): 56e.

A referência de objeto retornada de uma função C chamada do Python deve
ser uma referência própria — a propriedade é transferida da função para
seu chamador.


File: python.info,  Node: Gelo fino,  Next: Ponteiros NULL,  Prev: Regras de propriedade,  Up: Contagens de referências

6.2.1.13 Gelo fino
..................

There are a few situations where seemingly harmless use of a borrowed
reference can lead to problems.  These all have to do with implicit
invocations of the interpreter, which can cause the owner of a reference
to dispose of it.

The first and most important case to know about is using *note
Py_DECREF(): 56f. on an unrelated object while borrowing a reference to
a list item.  For instance:

     void
     bug(PyObject *list)
     {
         PyObject *item = PyList_GetItem(list, 0);

         PyList_SetItem(list, 1, PyLong_FromLong(0L));
         PyObject_Print(item, stdout, 0); /* BUG! */
     }

Esta função primeiro toma emprestada uma referência a ‘list[0]’, depois
substitui ‘list[1]’ pelo valor ‘0’ e, por fim, imprime a referência
emprestada.  Parece inofensivo, certo?  Mas não é!

Let’s follow the control flow into *note PyList_SetItem(): 165e.  The
list owns references to all its items, so when item 1 is replaced, it
has to dispose of the original item 1.  Now let’s suppose the original
item 1 was an instance of a user-defined class, and let’s further
suppose that the class defined a ‘__del__()’ method.  If this class
instance has a reference count of 1, disposing of it will call its
‘__del__()’ method.  Internally, *note PyList_SetItem(): 165e. calls
*note Py_DECREF(): 56f. on the replaced item, which invokes replaced
item’s corresponding *note tp_dealloc: 4b66. function.  During
deallocation, *note tp_dealloc: 4b66. calls *note tp_finalize: ab5,
which is mapped to the ‘__del__()’ method for class instances (see PEP
442(1)).  This entire sequence happens synchronously within the *note
PyList_SetItem(): 165e. call.

Since it is written in Python, the ‘__del__()’ method can execute
arbitrary Python code.  Could it perhaps do something to invalidate the
reference to ‘item’ in ‘bug()’?  You bet!  Assuming that the list passed
into ‘bug()’ is accessible to the ‘__del__()’ method, it could execute a
statement to the effect of ‘del list[0]’, and assuming this was the last
reference to that object, it would free the memory associated with it,
thereby invalidating ‘item’.

A solução, depois de descobrir a origem do problema, é fácil:
incrementar temporariamente a contagem de referências.  A versão correta
da função é:

     void
     no_bug(PyObject *list)
     {
         PyObject *item = PyList_GetItem(list, 0);

         Py_INCREF(item);
         PyList_SetItem(list, 1, PyLong_FromLong(0L));
         PyObject_Print(item, stdout, 0);
         Py_DECREF(item);
     }

This is a true story.  An older version of Python contained variants of
this bug and someone spent a considerable amount of time in a C debugger
to figure out why his ‘__del__()’ methods would fail…

The second case of problems with a borrowed reference is a variant
involving threads.  Normally, multiple threads in the Python interpreter
can’t get in each other’s way, because there is a *note global lock:
148. protecting Python’s entire object space.  However, it is possible
to temporarily release this lock using the macro *note
Py_BEGIN_ALLOW_THREADS: 4b67, and to re-acquire it using *note
Py_END_ALLOW_THREADS: a98.  This is common around blocking I/O calls, to
let other threads use the processor while waiting for the I/O to
complete.  Obviously, the following function has the same problem as the
previous one:

     void
     bug(PyObject *list)
     {
         PyObject *item = PyList_GetItem(list, 0);
         Py_BEGIN_ALLOW_THREADS
         ...some blocking I/O call...
         Py_END_ALLOW_THREADS
         PyObject_Print(item, stdout, 0); /* BUG! */
     }

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0442/


File: python.info,  Node: Ponteiros NULL,  Prev: Gelo fino,  Up: Contagens de referências

6.2.1.14 Ponteiros NULL
.......................

In general, functions that take object references as arguments do not
expect you to pass them ‘NULL’ pointers, and will dump core (or cause
later core dumps) if you do so.  Functions that return object references
generally return ‘NULL’ only to indicate that an exception occurred.
The reason for not testing for ‘NULL’ arguments is that functions often
pass the objects they receive on to other function — if each function
were to test for ‘NULL’, there would be a lot of redundant tests and the
code would run more slowly.

It is better to test for ‘NULL’ only at the “source:” when a pointer
that may be ‘NULL’ is received, for example, from ‘malloc()’ or from a
function that may raise an exception.

The macros *note Py_INCREF(): 56e. and *note Py_DECREF(): 56f. do not
check for ‘NULL’ pointers — however, their variants *note Py_XINCREF():
a6e. and *note Py_XDECREF(): 78f. do.

The macros for checking for a particular object type (‘Pytype_Check()’)
don’t check for ‘NULL’ pointers — again, there is much code that calls
several of these in a row to test an object against various different
expected types, and this would generate redundant tests.  There are no
variants with ‘NULL’ checking.

The C function calling mechanism guarantees that the argument list
passed to C functions (‘args’ in the examples) is never ‘NULL’ — in fact
it guarantees that it is always a tuple (1).

It is a severe error to ever let a ‘NULL’ pointer “escape” to the Python
user.

   ---------- Footnotes ----------

   (1) These guarantees don’t hold when you use the “old” style calling
convention — this is still found in much existing code.


File: python.info,  Node: Escrevendo extensões em C++,  Next: Fornecendo uma API C para um módulo de extensão,  Prev: Contagens de referências,  Up: Estendendo Python com C ou C++

6.2.1.15 Escrevendo extensões em C++
....................................

É possível escrever módulos de extensão em C++.  Algumas restrições se
aplicam.  Se o programa principal (o interpretador Python) for compilado
e vinculado pelo compilador C, objetos globais ou estáticos com
construtores não poderão ser usados.  Isso não é um problema se o
programa principal for vinculado pelo compilador C++.  Funções que serão
chamadas pelo interpretador Python (em particular, funções de
inicialização de módulos) devem ser declaradas usando ‘extern "C"’.  Não
é necessário incluir os arquivos de cabeçalho Python entre ‘extern "C"
{...}’ — eles já usam esta forma se o símbolo ‘__cplusplus’ estiver
definido (todos os compiladores C++ recentes definem este símbolo).


File: python.info,  Node: Fornecendo uma API C para um módulo de extensão,  Prev: Escrevendo extensões em C++,  Up: Estendendo Python com C ou C++

6.2.1.16 Fornecendo uma API C para um módulo de extensão
........................................................

Muitos módulos de extensão apenas fornecem novas funções e tipos para
serem usados em Python, mas às vezes o código em um módulo de extensão
pode ser útil para outros módulos de extensão.  Por exemplo, um módulo
de extensão poderia implementar um tipo “collection”, que funciona como
listas sem ordem.  Assim como o tipo de lista padrão do Python possui
uma API C que permite que os módulos de extensão criem e manipulem
listas, esse novo tipo de coleção deve ter um conjunto de funções em C
para manipulação direta de outros módulos de extensão.

À primeira vista, isso parece fácil: basta escrever as funções (sem
declará-las ‘static’, é claro), fornecer um arquivo de cabeçalho
apropriado e documentar a API C. E, de fato, isso funcionaria se todos
os módulos de extensão estivessem sempre vinculados estaticamente ao
interpretador Python.  Quando os módulos são usados como bibliotecas
compartilhadas, no entanto, os símbolos definidos em um módulo podem não
ser visíveis para outro módulo.  Os detalhes de visibilidade dependem do
sistema operacional; alguns sistemas usam um espaço de nomes global para
o interpretador Python e todos os módulos de extensão (Windows, por
exemplo), enquanto outros exigem uma lista explícita de símbolos
importados no momento da vinculação do módulo (AIX é um exemplo) ou
oferecem uma escolha de estratégias diferentes (a maioria dos Unices).
E mesmo que os símbolos sejam globalmente visíveis, o módulo cujas
funções se deseja chamar pode não ter sido carregado ainda!

A portabilidade, portanto, exige que não se façam suposições sobre a
visibilidade dos símbolos.  Isso significa que todos os símbolos em
módulos de extensão devem ser declarados ‘static’, exceto a função de
inicialização do módulo, a fim de evitar conflitos de nomes com outros
módulos de extensão (conforme discutido na seção *note A tabela de
métodos e a função de inicialização do módulo: 4b49.).  E significa que
os símbolos que 'deveriam' ser acessíveis a partir de outros módulos de
extensão devem ser exportados de uma maneira diferente.

Python provides a special mechanism to pass C-level information
(pointers) from one extension module to another one: Capsules.  A
Capsule is a Python data type which stores a pointer (void*).  Capsules
can only be created and accessed via their C API, but they can be passed
around like any other Python object.  In particular, they can be
assigned to a name in an extension module’s namespace.  Other extension
modules can then import this module, retrieve the value of this name,
and then retrieve the pointer from the Capsule.

Existem muitas maneiras de usar Cápsulas para exportar a API C de um
módulo de extensão.  Cada função pode obter sua própria Cápsula, ou
todos os ponteiros da API C podem ser armazenados em um array cujo
endereço é publicado em uma Cápsula.  E as diversas tarefas de
armazenamento e recuperação dos ponteiros podem ser distribuídas de
diferentes maneiras entre o módulo que fornece o código e os módulos
clientes.

Whichever method you choose, it’s important to name your Capsules
properly.  The function *note PyCapsule_New(): 4b6d. takes a name
parameter (const char*); you’re permitted to pass in a ‘NULL’ name, but
we strongly encourage you to specify a name.  Properly named Capsules
provide a degree of runtime type-safety; there is no feasible way to
tell one unnamed Capsule from another.

Em particular, as Cápsulas usadas para expor APIs C devem receber um
nome seguindo esta convenção:

     modulename.attributename

The convenience function *note PyCapsule_Import(): 1999. makes it easy
to load a C API provided via a Capsule, but only if the Capsule’s name
matches this convention.  This behavior gives C API users a high degree
of certainty that the Capsule they load contains the correct C API.

The following example demonstrates an approach that puts most of the
burden on the writer of the exporting module, which is appropriate for
commonly used library modules.  It stores all C API pointers (just one
in the example!)  in an array of void pointers which becomes the value
of a Capsule.  The header file corresponding to the module provides a
macro that takes care of importing the module and retrieving its C API
pointers; client modules only have to call this macro before accessing
the C API.

The exporting module is a modification of the ‘spam’ module from section
*note Um Exemplo Simples: 4b3d.  The function ‘spam.system()’ does not
call the C library function ‘system()’ directly, but a function
‘PySpam_System()’, which would of course do something more complicated
in reality (such as adding “spam” to every command).  This function
‘PySpam_System()’ is also exported to other extension modules.

The function ‘PySpam_System()’ is a plain C function, declared ‘static’
like everything else:

     static int
     PySpam_System(const char *command)
     {
         return system(command);
     }

The function ‘spam_system()’ is modified in a trivial way:

     static PyObject *
     spam_system(PyObject *self, PyObject *args)
     {
         const char *command;
         int sts;

         if (!PyArg_ParseTuple(args, "s", &command))
             return NULL;
         sts = PySpam_System(command);
         return PyLong_FromLong(sts);
     }

No início do módulo, logo após a linha

     #include <Python.h>

mais duas linhas devem ser adicionadas:

     #define SPAM_MODULE
     #include "spammodule.h"

The ‘#define’ is used to tell the header file that it is being included
in the exporting module, not a client module.  Finally, the module’s
*note mod_exec: 985. function must take care of initializing the C API
pointer array:

     static int
     spam_module_exec(PyObject *m)
     {
         static void *PySpam_API[PySpam_API_pointers];
         PyObject *c_api_object;

         /* Initialize the C API pointer array */
         PySpam_API[PySpam_System_NUM] = (void *)PySpam_System;

         /* Create a Capsule containing the API pointer array's address */
         c_api_object = PyCapsule_New((void *)PySpam_API, "spam._C_API", NULL);

         if (PyModule_Add(m, "_C_API", c_api_object) < 0) {
             return -1;
         }

         return 0;
     }

Note that ‘PySpam_API’ is declared ‘static’; otherwise the pointer array
would disappear when ‘PyInit_spam()’ terminates!

A maior parte do trabalho está no arquivo de cabeçalho ‘spammodule.h’,
que se parece com isso:

     #ifndef Py_SPAMMODULE_H
     #define Py_SPAMMODULE_H
     #ifdef __cplusplus
     extern "C" {
     #endif

     /* Header file for spammodule */

     /* C API functions */
     #define PySpam_System_NUM 0
     #define PySpam_System_RETURN int
     #define PySpam_System_PROTO (const char *command)

     /* Total number of C API pointers */
     #define PySpam_API_pointers 1


     #ifdef SPAM_MODULE
     /* This section is used when compiling spammodule.c */

     static PySpam_System_RETURN PySpam_System PySpam_System_PROTO;

     #else
     /* This section is used in modules that use spammodule's API */

     static void **PySpam_API;

     #define PySpam_System \
      (*(PySpam_System_RETURN (*)PySpam_System_PROTO) PySpam_API[PySpam_System_NUM])

     /* Return -1 on error, 0 on success.
      * PyCapsule_Import will set an exception if there's an error.
      */
     static int
     import_spam(void)
     {
         PySpam_API = (void **)PyCapsule_Import("spam._C_API", 0);
         return (PySpam_API != NULL) ? 0 : -1;
     }

     #endif

     #ifdef __cplusplus
     }
     #endif

     #endif /* !defined(Py_SPAMMODULE_H) */

All that a client module must do in order to have access to the function
‘PySpam_System()’ is to call the function (or rather macro)
‘import_spam()’ in its *note mod_exec: 985. function:

     static int
     client_module_exec(PyObject *m)
     {
         if (import_spam() < 0) {
             return -1;
         }
         /* additional initialization can happen here */
         return 0;
     }

The main disadvantage of this approach is that the file ‘spammodule.h’
is rather complicated.  However, the basic structure is the same for
each function that is exported, so it has to be learned only once.

Por fim, vale mencionar que as Cápsulas oferecem funcionalidades
adicionais, especialmente úteis para alocação e desalocação de memória
do ponteiro armazenado em uma Cápsula.  Os detalhes são descritos no
Manual de Referência da API Python/C, na seção *note Capsules: 2723. e
na implementação das Cápsulas (arquivos ‘Include/pycapsule.h’ e
‘Objects/pycapsule.c’ na distribuição do código-fonte Python).


File: python.info,  Node: Definindo Tipos de Extensão Tutorial,  Next: Defining Extension Types Assorted Topics,  Prev: Estendendo Python com C ou C++,  Up: Criando extensões sem ferramentas de terceiros

6.2.2 Definindo Tipos de Extensão: Tutorial
-------------------------------------------

O Python permite que o desenvolvedor de um módulo de extensão em C
defina novos tipos que podem ser manipulados a partir do código Python,
da mesma forma que os tipos embutidos *note str: 44c. e *note list: 611.
O código para de todos tipos de extensão segue um padrão, mas há alguns
detalhes que você precisa entender antes de começar.  Este documento é
uma introdução suave ao tópico.

* Menu:

* O básico: O básico<2>.
* Adicionando dados e métodos ao exemplo básico::
* Fornecendo controle mais preciso sobre atributos de dados::
* Apoiando a coleta de lixo cíclica::
* Criando subclasses de outros tipos::


File: python.info,  Node: O básico<2>,  Next: Adicionando dados e métodos ao exemplo básico,  Up: Definindo Tipos de Extensão Tutorial

6.2.2.1 O básico
................

O tempo de execução do *note CPython: 6f6. trata todos os objetos Python
como variáveis do tipo *note PyObject: 339.*, que funciona como um “tipo
base” para todos os objetos Python.  A estrutura *note PyObject: 339. em
si contém apenas a *note contagem de referências: 4b73. do objeto e um
ponteiro para o “objeto de tipo” correspondente.  É nesse objeto de tipo
que tudo acontece: ele determina quais funções em C o interpretador
chama quando, por exemplo, um atributo é acessado em um objeto, um
método é chamado ou o objeto é multiplicado por outro.  Essas funções em
C são chamadas de “métodos de tipo”.

Então, se você quiser definir um novo tipo de extensão, você precisa
criar um novo objeto de tipo.

Esse tipo de coisa só pode ser explicado com exemplo, então aqui está um
módulo mínimo, mas completo, que define um novo tipo nomeado ‘Custom’
dentro de um módulo de extensão C ‘custom’:

     Nota: O que estamos mostrando aqui é a maneira tradicional de
     definir tipos de extensão 'estáticos'.  Deve ser adequada para a
     maioria dos usos.  A API C também permite definir tipos de extensão
     alocados em heap usando a função *note PyType_FromSpec(): 57d, que
     não é abordada neste tutorial.

     #define PY_SSIZE_T_CLEAN
     #include <Python.h>

     typedef struct {
         PyObject_HEAD
         /* Campos específico do tipo vão aqui. */
     } CustomObject;

     static PyTypeObject CustomType = {
         .ob_base = PyVarObject_HEAD_INIT(NULL, 0)
         .tp_name = "custom.Custom",
         .tp_doc = PyDoc_STR("Custom objects"),
         .tp_basicsize = sizeof(CustomObject),
         .tp_itemsize = 0,
         .tp_flags = Py_TPFLAGS_DEFAULT,
         .tp_new = PyType_GenericNew,
     };

     static int
     custom_module_exec(PyObject *m)
     {
         if (PyType_Ready(&CustomType) < 0) {
             return -1;
         }

         if (PyModule_AddObjectRef(m, "Custom", (PyObject *) &CustomType) < 0) {
             return -1;
         }

         return 0;
     }

     static PyModuleDef_Slot custom_module_slots[] = {
         {Py_mod_exec, custom_module_exec},
         // Só use isso quando estiver usando tipos estáticos
         {Py_mod_multiple_interpreters, Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED},
         {0, NULL}
     };

     static PyModuleDef custom_module = {
         .m_base = PyModuleDef_HEAD_INIT,
         .m_name = "custom",
         .m_doc = "Example module that creates an extension type.",
         .m_size = 0,
         .m_slots = custom_module_slots,
     };

     PyMODINIT_FUNC
     PyInit_custom(void)
     {
         return PyModuleDef_Init(&custom_module);
     }

Isso é bastante informação para assimilar de uma só vez, mas algumas
partes devem parecer familiares pelo que foi visto no capítulo anterior.
Este arquivo define três elementos:

  1. O que um 'objeto' ‘Custom’ contém: esta é uma estrutura
     ‘CustomObject’, alocada uma vez para cada instância de ‘Custom’.

  2. Como o 'tipo' ‘Custom’ se comporta: esta é a estrutura
     ‘CustomType’, que define um conjunto de sinalizadores e ponteiros
     de função que o interpretador inspeciona quando operações
     específicas são solicitadas.

  3. Como definir e executar o módulo ‘custom’: esta é a função
     ‘PyInit_custom’ e a estrutura associada ‘custom_module’ para
     definir o módulo, e a função ‘custom_module_exec’ para configurar
     um novo objeto de módulo.

O primeiro bit é

     typedef struct {
         PyObject_HEAD
     } CustomObject;

Isto é o que um objeto Custom conterá.  ‘PyObject_HEAD’ é obrigatório no
início de cada estrutura de objeto e define um campo chamado ‘ob_base’
do tipo *note PyObject: 339, contendo um ponteiro para um objeto de tipo
e uma contagem de referências (esses podem ser acessados usando os
macros *note Py_TYPE: 780. e *note Py_REFCNT: 8ae, respectivamente).  O
objetivo do macro é abstrair o layout e permitir campos adicionais em
*note construções de depuração: 1f9.

     Nota: Não há ponto e vírgula acima após o macro *note
     PyObject_HEAD: 1321.  Tenha cuidado para não adicionar um por
     engano: alguns compiladores podem emitir erros.

Obviamente, objetos geralmente armazenam dados adicionais além do padrão
‘PyObject_HEAD’ boilerplate; por exemplo, aqui está a definição do
padrão Python floats:

     typedef struct {
         PyObject_HEAD
         double ob_fval;
     } PyFloatObject;

O segundo bit é a definição do objeto de tipo.

     estático PyTypeObject CustomType = {
         .ob_base = PyVarObject_HEAD_INIT(NULL, 0)
         .tp_name = "custom.Custom",
         .tp_doc = PyDoc_STR("Custom objeto"),
         .tp_basicsize = sizeof(CustomObject),
         .tp_itemsize = 0,
         .tp_flags = Py_TPFLAGS_DEFAULT,
         .tp_new = PyType_GenericNew,
     };

     Nota: Recomendamos usar inicializadores nomeados no estilo C99,
     como mostrado acima, para evitar listar todos os campos de *note
     PyTypeObject: ab4. com os quais você não precisa se preocupar e
     também para não depender da ordem de declaração desses campos

A definição real de *note PyTypeObject: ab4. no ‘object.h’ possui muito
mais *note campos: 994. do que a definição acima.  Os campos restantes
serão preenchidos com zeros pelo compilador C, e é prática comum não
especificá-los explicitamente, a menos que sejam necessários.

Vamos separá-lo, um campo de cada vez

     .ob_base = PyVarObject_HEAD_INIT(NULL, 0)

Essa linha é um boilerplate obrigatório para inicializar o campo
‘ob_base’ mencionado acima.

     .tp_name = "custom.Custom",

O nome do nosso tipo.  Ele aparecerá na representação textual padrão do
nosso objeto e em algumas mensagens erro, por exemplo:

     >>> "" + custom.Custom()
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: can only concatenate str (not "custom.Custom") to str

Observe que o nome é um nome pontilhado que inclui o nome módulo e o
nome do tipo dentro do módulo.  O módulo, neste caso, é ‘custom’ e o
tipo é ‘Custom’, portanto, definimos o nome do tipo como
‘custom.Custom’.  O uso do pontilhado real caminho de importação é
importante para tornar seu tipo compatível com o *note pydoc: b5. e os
módulos *note pickle: a6.

     .tp_basicsize = sizeof(CustomObject),
     .tp_itemsize = 0,

Isso serve para que o Python saiba quanta memória deve ser alocada ao
criar novas instâncias do ‘Custom’.  O *note tp_itemsize: 20fd. é usado
somente para objeto de tamanho variável e, caso contrário, deve ser
zero.

     Nota: Se você quiser que seu tipo possa ser subclassificado a
     partir do Python, e seu tipo tiver o mesmo *note tp_basicsize: 98e.
     que seu tipo base, você poderá ter problemas com herança múltipla.
     Uma subclasse Python do seu tipo terá de listar o seu tipo primeiro
     em *note __bases__: 14f4, caso contrário ela não conseguirá chamar
     o método *note __new__(): 580. do seu tipo sem gerar um erro.  Você
     pode evitar esse problema garantindo que seu tipo tenha um valor de
     *note tp_basicsize: 98e. maior que o do tipo base.  Na maior parte
     do tempo, isso já será verdadeiro, pois ou o tipo base será *note
     object: a96, ou você estará adicionando membros de dados ao seu
     tipo base e, portanto, aumentando seu tamanho.

Definimos os sinalizadores da classe como *note Py_TPFLAGS_DEFAULT:
4b74.

     .tp_flags = Py_TPFLAGS_DEFAULT,

Todos os tipos devem incluir essa constante em seus sinalizadores.  Ela
habilita todos os membros definidos até pelo menos o Python 3.3.  Se
você precisar de membros adicionais, será necessário fazer um OR com os
sinalizadores correspondentes.

Fornecemos uma docstring para o tipo em tp_doc *note tp_doc: 4b75.

     .tp_doc = PyDoc_STR("Custom objects"),

Para habilitar a criação de objetos, precisamos fornecer um manipulador
para *note tp_new: 57f.  Esse é o equivalente ao método Python *note
__new__(): 580, mas precisa ser especificado explicitamente.  Neste
caso, podemos simplesmente usar a implementação padrão fornecida pela
função da API *note PyType_GenericNew(): 4b76.

     .tp_new = PyType_GenericNew,

Todo o restante do arquivo deve ser familiar, exceto por alguns códigos
em ‘custom_module_exec()’:

     se (PyType_Ready(&CustomType) < 0) {
         retorno -1;
     }

Isso inicializa o tipo ‘Custom’, preenchendo vários membros com os
valores padrão apropriados, incluindo *note ob_type: 4b77, que definimos
inicialmente como ‘NULL’.

     if (PyModule_AddObjectRef(m, "Custom", (PyObject *) &CustomType) < 0) {
     return -1;
     }

Isso adiciona o tipo ao dicionário do módulo.  Isso nos permite criar
instâncias de ‘Custom’ chamando a classe ‘Custom’:

     >>> import custom
     >>> mycustom = custom.Custom()

É isso!  Só resta compilá-lo; coloque o código acima em um arquivo
chamado ‘custom.c’,

     [build-system]
     requires = ["setuptools"]
     build-backend = "setuptools.build_meta"

     [project]
     name = "custom"
     version = "1"

Em um arquivo chamado ‘pyproject.toml’, e

     from setuptools import Extension, setup
     setup(ext_modules=[Extension("custom", ["custom.c"])])

Em um arquivo chamado ‘setup.py’; e então digitando

     $ python -m pip install .

no console deverá gerar um arquivo ‘custom.so’ em um subdiretório e
instalá-lo; agora abra o Python — você já deve conseguir ‘import custom’
e experimentar objetos ‘Custom’.

Isso não foi tão difícil, foi?

Naturalmente, o tipo Custom atual é bastante desinteressante.  Não tem
dados e não faz nada.  Não pode nem ser subclassificado.


File: python.info,  Node: Adicionando dados e métodos ao exemplo básico,  Next: Fornecendo controle mais preciso sobre atributos de dados,  Prev: O básico<2>,  Up: Definindo Tipos de Extensão Tutorial

6.2.2.2 Adicionando dados e métodos ao exemplo básico
.....................................................

Vamos estender o exemplo básico para adicionar alguns dados e métodos.
Também vamos tornar o tipo utilizável como uma classe base.  Iremos
criar um novo módulo, ‘custom2’, que adiciona esses recursos:

     #define PY_SSIZE_T_CLEAN
     #include <Python.h>
     #include <stddef.h> /* for offsetof() */

     typedef struct {
         PyObject_HEAD
         PyObject *first; /* first name */
         PyObject *last;  /* last name */
         int number;
     } CustomObject;

     static void
     Custom_dealloc(CustomObject *self)
     {
         Py_XDECREF(self->first);
         Py_XDECREF(self->last);
         Py_TYPE(self)->tp_free((PyObject *) self);
     }

     static PyObject *
     Custom_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
     {
         CustomObject *self;
         self = (CustomObject *) type->tp_alloc(type, 0);
         if (self != NULL) {
             self->first = PyUnicode_FromString("");
             if (self->first == NULL) {
                 Py_DECREF(self);
                 return NULL;
             }
             self->last = PyUnicode_FromString("");
             if (self->last == NULL) {
                 Py_DECREF(self);
                 return NULL;
             }
             self->number = 0;
         }
         return (PyObject *) self;
     }

     static int
     Custom_init(CustomObject *self, PyObject *args, PyObject *kwds)
     {
         static char *kwlist[] = {"first", "last", "number", NULL};
         PyObject *first = NULL, *last = NULL;

         if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOi", kwlist,
                                          &first, &last,
                                          &self->number))
             return -1;

         if (first) {
             Py_XSETREF(self->first, Py_NewRef(first));
         }
         if (last) {
             Py_XSETREF(self->last, Py_NewRef(last));
         }
         return 0;
     }

     static PyMemberDef Custom_members[] = {
         {"first", Py_T_OBJECT_EX, offsetof(CustomObject, first), 0,
          "first name"},
         {"last", Py_T_OBJECT_EX, offsetof(CustomObject, last), 0,
          "last name"},
         {"number", Py_T_INT, offsetof(CustomObject, number), 0,
          "custom number"},
         {NULL}  /* Sentinel */
     };

     static PyObject *
     Custom_name(CustomObject *self, PyObject *Py_UNUSED(ignored))
     {
         if (self->first == NULL) {
             PyErr_SetString(PyExc_AttributeError, "first");
             return NULL;
         }
         if (self->last == NULL) {
             PyErr_SetString(PyExc_AttributeError, "last");
             return NULL;
         }
         return PyUnicode_FromFormat("%S %S", self->first, self->last);
     }

     static PyMethodDef Custom_methods[] = {
         {"name", (PyCFunction) Custom_name, METH_NOARGS,
          "Return the name, combining the first and last name"
         },
         {NULL}  /* Sentinel */
     };

     static PyTypeObject CustomType = {
         .ob_base = PyVarObject_HEAD_INIT(NULL, 0)
         .tp_name = "custom2.Custom",
         .tp_doc = PyDoc_STR("Custom objects"),
         .tp_basicsize = sizeof(CustomObject),
         .tp_itemsize = 0,
         .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
         .tp_new = Custom_new,
         .tp_init = (initproc) Custom_init,
         .tp_dealloc = (destructor) Custom_dealloc,
         .tp_members = Custom_members,
         .tp_methods = Custom_methods,
     };

     static int
     custom_module_exec(PyObject *m)
     {
         if (PyType_Ready(&CustomType) < 0) {
             return -1;
         }

         if (PyModule_AddObjectRef(m, "Custom", (PyObject *) &CustomType) < 0) {
             return -1;
         }

         return 0;
     }

     static PyModuleDef_Slot custom_module_slots[] = {
         {Py_mod_exec, custom_module_exec},
         {Py_mod_multiple_interpreters, Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED},
         {0, NULL}
     };

     static PyModuleDef custom_module = {
         .m_base = PyModuleDef_HEAD_INIT,
         .m_name = "custom2",
         .m_doc = "Example module that creates an extension type.",
         .m_size = 0,
         .m_slots = custom_module_slots,
     };

     PyMODINIT_FUNC
     PyInit_custom2(void)
     {
         return PyModuleDef_Init(&custom_module);
     }

Esta versão do módulo possui várias alterações.

O tipo ‘Custom’ agora possui três atributos de dados em sua estrutura C:
first, last e number.  As variáveis first e last são strings Python
contendo o primeiro e o último nome.  O atributo number é um inteiro em
C.

A estrutura do objeto é atualizada de acordo

     typedef struct {
     PyObject_HEAD
     PyObject *first; /* first name */
     PyObject *last; /* last name */
     int number;
     } CustomObject;

Como agora temos dados para gerenciar, precisamos ter mais cuidado com a
alocação e a desalocação do objeto.  No mínimo, precisamos de método de
desalocação:

     static void
     Custom_dealloc(CustomObject *self)
     {
         Py_XDECREF(self->first);
         Py_XDECREF(self->last);
         Py_TYPE(self)->tp_free((PyObject *) self);
     }

que é atribuído ao membro *note tp_dealloc: 4b66.:

     .tp_dealloc = (destructor) Custom_dealloc,

Esse método primeiro limpa a contagem de referências dos dois atributos
Python.  *note Py_XDECREF(): 78f. lida corretamente com o caso em que
seu argumento é ‘NULL’ (o que pode acontecer aqui se ‘tp_new’ falhou no
meio do processo).  Em seguida, ele chama o membro *note tp_free: 4b79.
do tipo do objeto (obtido por ‘Py_TYPE(self)’) para liberar a memória do
objeto.  Observe que o tipo do objeto pode não ser ‘CustomType’, pois o
objeto pode ser uma instância de uma subclasse.

     Nota: The explicit cast to ‘destructor’ above is needed because we
     defined ‘Custom_dealloc’ to take a ‘CustomObject *’ argument, but
     the ‘tp_dealloc’ function pointer expects to receive a ‘PyObject *’
     argument.  Otherwise, the compiler will emit a warning.  This is
     object-oriented polymorphism, in C!

Queremos nos certificar de que o primeiro e o último nome sejam
inicializados como strings vazias, portanto, fornecemos uma
implementação:: ‘tp_new’:

     static PyObject *
     Custom_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
     {
     CustomObject *self;
     self = (CustomObject *) type->tp_alloc(type, 0);
     if (self != NULL) {
     self->first = PyUnicode_FromString("");
     if (self->first == NULL) {
     Py_DECREF(self);
     return NULL;
     }
     self->last = PyUnicode_FromString("");
     if (self->last == NULL) {
     Py_DECREF(self);
     return NULL;
     }
     self->number = 0;
     }
     return (PyObject *) self;
     }

e instale-o no membro:: *note tp_new: 57f.

     .tp_new = Custom_new,

O manipulador ‘tp_new’ é responsável por criar (em oposição a
inicializar) os objetos do tipo.  Ele é exposto no Python como o método
*note __new__(): 580.  Não é obrigatório definir um membro ‘tp_new’ e,
de fato, muitos tipos de extensão simplesmente reutilizam *note
PyType_GenericNew(): 4b76, como na primeira versão do tipo ‘Custom’
acima.  Neste caso, usamos o manipulador ‘tp_new’ para inicializar os
atributos ‘first’ e ‘last’ com valores padrão que não sejam ‘NULL’.

O ‘tp_new’ recebe o tipo que está sendo instanciado (não necessariamente
‘CustomType’, caso uma subclasse esteja sendo instanciada) e quaisquer
argumentos passados quando o tipo foi chamado, e deve retornar a
instância criada.  Manipuladores ‘tp_new’ sempre aceitam argumentos
posicionais e argumentos nomeados, mas frequentemente os ignoram,
deixando o tratamento dos argumentos para os métodos inicializadores (ou
seja, ‘tp_init’ em C ou ‘__init__’ em Python).

     Nota: ‘tp_new’ não deve chamar ‘tp_init’ explicitamente, pois o
     interpretador fará isso por conta própria.

A implementação de ‘tp_new’ chama o slot *note tp_alloc: 4b7a. para
alocar memória:

     self = (CustomObject *) type->tp_alloc(type, 0);

Como a alocação de memória pode falhar, precisamos verificar se o
resultado de *note tp_alloc: 4b7a. é ‘NULL’ antes de prosseguir.

     Nota: Nós não preenchemos o slot *note tp_alloc: 4b7a. por conta
     própria.  Em vez disso, *note PyType_Ready(): 77c. o preenche
     herdando-o da nossa classe base, que por padrão é *note object:
     a96.  A maioria dos tipos usa a estratégia de alocação padrão.

     Nota: Se você estiver criando um *note tp_new: 57f. cooperativo (um
     que chama o *note tp_new: 57f. ou *note __new__(): 580. de um tipo
     base), você 'não' deve tentar determinar qual método chamar usando
     a ordem de resolução de métodos em tempo de execução.  Sempre
     determine estaticamente qual tipo você vai chamar e chame seu *note
     tp_new: 57f. diretamente ou via ‘type->tp_base->tp_new’.  Se você
     não fizer isso, as subclasses Python do seu tipo que também herdam
     de outras classes definidas em Python podem não funcionar
     corretamente.  (Especificamente, você pode não conseguir criar
     instâncias dessas subclasses sem receber um *note TypeError: 2c3.)

Também definimos uma função de inicialização que aceita argumentos para
fornecer valores iniciais para nosso instância:

     static int
     Custom_init(CustomObject *self, PyObject *args, PyObject *kwds)
     {
         static char *kwlist[] = {"first", "last", "number", NULL};
         PyObject *first = NULL, *last = NULL, *tmp;

         if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OOi", kwlist,
                                          &first, &last,
                                          &self->number))
             return -1;

         if (first) {
             tmp = self->first;
             Py_INCREF(first);
             self->first = first;
             Py_XDECREF(tmp);
         }
         if (last) {
             tmp = self->last;
             Py_INCREF(last);
             self->last = last;
             Py_XDECREF(tmp);
         }
         return 0;
     }

preenchendo o slot :: *note tp_init: 581.

     .tp_init = (initproc) Custom_init,

O slot *note tp_init: 581. é exposto em Python como o método *note
__init__(): 6b0.  Ele é usado para inicializar um objeto depois que ele
é criado.  Inicializadores sempre aceitam argumentos posicionais e
argumentos nomeados, e devem retornar ‘0’ em caso de sucesso ou ‘-1’ em
caso de erro.

Ao contrário do manipulador ‘tp_new’, não há garantia de que seja
chamado (por exemplo, o módulo *note pickle: a6. por padrão não chama
*note __init__(): 6b0. em instâncias desserializadas).  Além disso,
‘tp_init’ pode ser chamado várias vezes.  Qualquer um pode chamar o
método ‘__init__()’ em nossos objetos.  Por esse motivo, precisamos ter
cuidado redobrado ao atribuir os novos valores de atributos.  Poderíamos
ficar tentados, por exemplo, a atribuir o membro ‘first’ assim:

     if (first) { Py_XDECREF(self->first); Py_INCREF(first); self->first = first;}

But this would be risky.  Our type doesn’t restrict the type of the
‘first’ member, so it could be any kind of object.  It could have a
destructor that causes code to be executed that tries to access the
‘first’ member; or that destructor could release the *note Global
interpreter Lock: 159. and let arbitrary code run in other threads that
accesses and modifies our object.

Para sermos extremamente cautelosos e nos proteger dessa possibilidade,
quase sempre atribuímos novamente os membros antes de decrementar a
contagem de referências.  Quando não precisamos fazer isso?

   * quando sabemos absolutamente que a contagem de referência é maior
     que 1;

   * when we know that deallocation of the object (1) will neither
     release the *note GIL: 159. nor cause any calls back into our
     type’s code;

   * quando estamos decrementando uma contagem de referências em um
     manipulador *note tp_dealloc: 4b66. de um tipo que não oferece
     suporte à coleta de lixo cíclica (2).

Queremos expor nossas variáveis de instância como atributos.  Há várias
maneiras de fazer isso.  A forma mais simples é estabelecer definições
de membros:

     static PyMemberDef Custom_members[] = { {"first", Py_T_OBJECT_EX, offsetof(CustomObject, first), 0, "first name"}, {"last", Py_T_OBJECT_EX, offsetof(CustomObject, last), 0, "last name"}, {"number", Py_T_INT, offsetof(CustomObject, number), 0, "custom number"}, {NULL} /* Sentinel */};

e colocar as definições no slot *note tp_members: 4b7b.:

     .tp_members = Custom_members,

Cada definição de membro possui um nome de membro, um tipo, um
deslocamento, sinalizadores de acesso e uma string de documentação.
Consulte a seção *note Generic Attribute Management: 4b7c. abaixo para
mais detalhes.

Uma desvantagem dessa abordagem é que ela não fornece uma forma de
restringir os tipos de objetos que podem ser atribuídos aos atributos em
Python.  Esperamos que os nomes first e last sejam strings, mas qualquer
objeto Python pode ser atribuído.  Além disso, os atributos podem ser
excluídos, fazendo com que os ponteiros em C sejam definidos como
‘NULL’.  Mesmo que possamos garantir que os membros sejam inicializados
com valores não ‘NULL’, eles ainda podem acabar sendo definidos como
‘NULL’ caso os atributos sejam apagados.

Definimos um único método,:meth:‘!Custom.name’, que exibe o nome do
objeto como a concatenação do primeiro nome com o último nome

     static PyObject *
     Custom_name(CustomObject *self, PyObject *Py_UNUSED(ignored))
     {
         if (self->first == NULL) {
             PyErr_SetString(PyExc_AttributeError, "first");
             return NULL;
         }
         if (self->last == NULL) {
             PyErr_SetString(PyExc_AttributeError, "last");
             return NULL;
         }
         return PyUnicode_FromFormat("%S %S", self->first, self->last);
     }

O método é implementado como uma função em C que recebe uma instância de
‘Custom’ (ou de uma subclasse de ‘Custom’) como primeiro argumento.
Métodos sempre recebem a instância como primeiro argumento.  Eles também
costumam aceitar argumentos posicionais e nomeados, mas, neste caso, não
recebemos nenhum e não precisamos aceitar uma tupla de argumentos
posicionais nem um dicionário de argumentos nomeados.  Este método
equivale ao método Python:

     def name(self): return "%s %s" % (self.first, self.last)

Observe que precisamos verificar a possibilidade de que nossos atributos
‘first’ e ‘last’ estejam com valor ‘NULL’.  Isso ocorre porque eles
podem ser excluídos e, nesse caso, ficam definidos como ‘NULL’.  Seria
melhor impedir a exclusão desses atributos e restringir seus valores
para que sejam sempre strings.  Veremos como fazer isso na próxima
seção.

Agora que definimos o método, precisamos criar uma array de definições
de métodos:

     static PyMethodDef Custom_methods[] = {
         {"name", (PyCFunction) Custom_name, METH_NOARGS,
          "Return the name, combining the first and last name"
         },
         {NULL}  /* Sentinel */
     };

note que usamos o sinalizador *note METH_NOARGS: 151c. para indicar que
o método não espera argumentos além de 'self')

e atribuí-lo para o slot:: *note tp_methods: 4b7d.

     .tp_methods = Custom_methods,

Por fim, tornaremos nosso tipo utilizável como classe base para herança.
Escrevemos nossos métodos com cuidado até agora, garantindo que eles não
façam suposições sobre o tipo do objeto que está sendo criado ou
utilizado; portanto, tudo o que precisamos fazer é adicionar a *note
Py_TPFLAGS_BASETYPE: 4b7e. à definição dos sinalizadores da nossa
classe:

     .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,

Renomeamos ‘PyInit_custom()’ para ‘PyInit_custom2()’, atualizamos o nome
do módulo na estrutura *note PyModuleDef: 984, e atualizamos o nome
completo da classe na estrutura *note PyTypeObject: ab4.

Finalmente, atualizamos nosso arquivo ‘setup.py’ para incluir o novo
módulo,

     from setuptools import Extension, setupsetup(ext_modules=[ Extension("custom", ["custom.c"]), Extension("custom2", ["custom2.c"]),])

então podemos instalar novamente para realizarmos o ‘import custom2’

     $ python -m pip install .

   ---------- Footnotes ----------

   (1) Isso é verdade quando sabemos que o objeto é um tipo básico, como
uma string ou um float.

   (2) Confiamos nisso no manipulador *note tp_dealloc: 4b66. neste
exemplo, porque o nosso tipo não oferece suporte à coleta de lixo.


File: python.info,  Node: Fornecendo controle mais preciso sobre atributos de dados,  Next: Apoiando a coleta de lixo cíclica,  Prev: Adicionando dados e métodos ao exemplo básico,  Up: Definindo Tipos de Extensão Tutorial

6.2.2.3 Fornecendo controle mais preciso sobre atributos de dados
.................................................................

Nesta seção, forneceremos um controle mais preciso sobre como os
atributos ‘first’ e ‘last’ são definidos no exemplo ‘Custom’.  Na versão
anterior do nosso módulo, as variáveis de instância ‘first’ e ‘last’
podiam receber valores que não fossem strings ou até mesmo ser
excluídas.  Queremos garantir que esses atributos sempre contenham
strings.

     #define PY_SSIZE_T_CLEAN
     #include <Python.h>
     #include <stddef.h> /* for offsetof() */

     typedef struct {
         PyObject_HEAD
         PyObject *first; /* first name */
         PyObject *last;  /* last name */
         int number;
     } CustomObject;

     static void
     Custom_dealloc(CustomObject *self)
     {
         Py_XDECREF(self->first);
         Py_XDECREF(self->last);
         Py_TYPE(self)->tp_free((PyObject *) self);
     }

     static PyObject *
     Custom_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
     {
         CustomObject *self;
         self = (CustomObject *) type->tp_alloc(type, 0);
         if (self != NULL) {
             self->first = PyUnicode_FromString("");
             if (self->first == NULL) {
                 Py_DECREF(self);
                 return NULL;
             }
             self->last = PyUnicode_FromString("");
             if (self->last == NULL) {
                 Py_DECREF(self);
                 return NULL;
             }
             self->number = 0;
         }
         return (PyObject *) self;
     }

     static int
     Custom_init(CustomObject *self, PyObject *args, PyObject *kwds)
     {
         static char *kwlist[] = {"first", "last", "number", NULL};
         PyObject *first = NULL, *last = NULL;

         if (!PyArg_ParseTupleAndKeywords(args, kwds, "|UUi", kwlist,
                                          &first, &last,
                                          &self->number))
             return -1;

         if (first) {
             Py_SETREF(self->first, Py_NewRef(first));
         }
         if (last) {
             Py_SETREF(self->last, Py_NewRef(last));
         }
         return 0;
     }

     static PyMemberDef Custom_members[] = {
         {"number", Py_T_INT, offsetof(CustomObject, number), 0,
          "custom number"},
         {NULL}  /* Sentinel */
     };

     static PyObject *
     Custom_getfirst(CustomObject *self, void *closure)
     {
         return Py_NewRef(self->first);
     }

     static int
     Custom_setfirst(CustomObject *self, PyObject *value, void *closure)
     {
         if (value == NULL) {
             PyErr_SetString(PyExc_TypeError, "Cannot delete the first attribute");
             return -1;
         }
         if (!PyUnicode_Check(value)) {
             PyErr_SetString(PyExc_TypeError,
                             "The first attribute value must be a string");
             return -1;
         }
         Py_SETREF(self->first, Py_NewRef(value));
         return 0;
     }

     static PyObject *
     Custom_getlast(CustomObject *self, void *closure)
     {
         return Py_NewRef(self->last);
     }

     static int
     Custom_setlast(CustomObject *self, PyObject *value, void *closure)
     {
         if (value == NULL) {
             PyErr_SetString(PyExc_TypeError, "Cannot delete the last attribute");
             return -1;
         }
         if (!PyUnicode_Check(value)) {
             PyErr_SetString(PyExc_TypeError,
                             "The last attribute value must be a string");
             return -1;
         }
         Py_SETREF(self->last, Py_NewRef(value));
         return 0;
     }

     static PyGetSetDef Custom_getsetters[] = {
         {"first", (getter) Custom_getfirst, (setter) Custom_setfirst,
          "first name", NULL},
         {"last", (getter) Custom_getlast, (setter) Custom_setlast,
          "last name", NULL},
         {NULL}  /* Sentinel */
     };

     static PyObject *
     Custom_name(CustomObject *self, PyObject *Py_UNUSED(ignored))
     {
         return PyUnicode_FromFormat("%S %S", self->first, self->last);
     }

     static PyMethodDef Custom_methods[] = {
         {"name", (PyCFunction) Custom_name, METH_NOARGS,
          "Return the name, combining the first and last name"
         },
         {NULL}  /* Sentinel */
     };

     static PyTypeObject CustomType = {
         .ob_base = PyVarObject_HEAD_INIT(NULL, 0)
         .tp_name = "custom3.Custom",
         .tp_doc = PyDoc_STR("Custom objects"),
         .tp_basicsize = sizeof(CustomObject),
         .tp_itemsize = 0,
         .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
         .tp_new = Custom_new,
         .tp_init = (initproc) Custom_init,
         .tp_dealloc = (destructor) Custom_dealloc,
         .tp_members = Custom_members,
         .tp_methods = Custom_methods,
         .tp_getset = Custom_getsetters,
     };

     static int
     custom_module_exec(PyObject *m)
     {
         if (PyType_Ready(&CustomType) < 0) {
             return -1;
         }

         if (PyModule_AddObjectRef(m, "Custom", (PyObject *) &CustomType) < 0) {
             return -1;
         }

         return 0;
     }

     static PyModuleDef_Slot custom_module_slots[] = {
         {Py_mod_exec, custom_module_exec},
         {Py_mod_multiple_interpreters, Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED},
         {0, NULL}
     };

     static PyModuleDef custom_module = {
         .m_base = PyModuleDef_HEAD_INIT,
         .m_name = "custom3",
         .m_doc = "Example module that creates an extension type.",
         .m_size = 0,
         .m_slots = custom_module_slots,
     };

     PyMODINIT_FUNC
     PyInit_custom3(void)
     {
         return PyModuleDef_Init(&custom_module);
     }

Para oferecer um controle maior sobre os atributos ‘first’ e ‘last’,
usaremos funções personalizadas de acesso (getters) e modificação
(setters).  A seguir estão as funções para obter e definir o atributo
‘first’:

     static PyObject *
     Custom_getfirst(CustomObject *self, void *closure)
     {
         Py_INCREF(self->first);
         return self->first;
     }

     static int
     Custom_setfirst(CustomObject *self, PyObject *value, void *closure)
     {
         PyObject *tmp;
         if (value == NULL) {
             PyErr_SetString(PyExc_TypeError, "Cannot delete the first attribute");
             return -1;
         }
         if (!PyUnicode_Check(value)) {
             PyErr_SetString(PyExc_TypeError,
                             "The first attribute value must be a string");
             return -1;
         }
         tmp = self->first;
         Py_INCREF(value);
         self->first = value;
         Py_DECREF(tmp);
         return 0;
     }

A função getter recebe um objeto ‘Custom’ e um closure, que é um
ponteiro para void.  Neste caso, o closure é ignorado.  (O closure
oferece suporte a um modo de usar mais avançado, no qual dados de
definição são passados ao getter e ao setter.  Isso pode, por exemplo,
permitir que um único conjunto de funções getter e setter decida qual
atributo obter ou definir com base nos dados presentes no closure.)

A função setter recebe o objeto ‘Custom’, o novo valor e o closure.  O
novo valor pode ser ‘NULL’, caso em que o atributo está sendo excluído.
No nosso setter, levantamos um erro se o atributo for excluído ou se o
novo valor não for uma string.

Nós criamos um vetor de estruturas *note PyGetSetDef: bd1.:

     static PyGetSetDef Custom_getsetters[] = {
         {"first", (getter) Custom_getfirst, (setter) Custom_setfirst,
          "first name", NULL},
         {"last", (getter) Custom_getlast, (setter) Custom_setlast,
          "last name", NULL},
         {NULL}  /* Sentinel */
     };

e registra isso num slot *note tp_getset: 4b80.:

     .tp_getset = Custom_getsetters,

A última entrada em uma estrutura *note PyGetSetDef: bd1. é o “closure”
mencionado acima.  Neste caso, não estamos usando um closure, então
simplesmente passamos ‘NULL’.

Também removemos as definições de membros para esses atributos:

     static PyMemberDef Custom_members[] = {
         {"number", Py_T_INT, offsetof(CustomObject, number), 0,
          "custom number"},
         {NULL}  /* Sentinel */
     };

Também precisamos atualizar o manipulador *note tp_init: 581. para
permitir apenas strings (1) como valores passados:

     static int
     Custom_init(CustomObject *self, PyObject *args, PyObject *kwds)
     {
         static char *kwlist[] = {"first", "last", "number", NULL};
         PyObject *first = NULL, *last = NULL, *tmp;

         if (!PyArg_ParseTupleAndKeywords(args, kwds, "|UUi", kwlist,
                                          &first, &last,
                                          &self->number))
             return -1;

         if (first) {
             tmp = self->first;
             Py_INCREF(first);
             self->first = first;
             Py_DECREF(tmp);
         }
         if (last) {
             tmp = self->last;
             Py_INCREF(last);
             self->last = last;
             Py_DECREF(tmp);
         }
         return 0;
     }

Com essas alterações, podemos garantir que os membros ‘first’ e ‘last’
nunca sejam ‘NULL’, de modo que podemos remover quase todas as
verificações de valores ‘NULL’.  Isso significa que a maioria das
chamadas para *note Py_XDECREF(): 78f. pode ser substituída por chamadas
para *note Py_DECREF(): 56f.  O único lugar em que não podemos
substituir essas chamadas é na implementação de ‘tp_dealloc’, onde
existe a possibilidade de que a inicialização desses membros tenha
falhado em ‘tp_new’.

Também renomeamos a função de inicialização do módulo e o nome do módulo
dentro da função de inicialização, como fizemos anteriormente, e
adicionamos uma definição extra ao arquivo ‘setup.py’.

   ---------- Footnotes ----------

   (1) Agora sabemos que o primeiro e último membros são strings, então
talvez pudéssemos ter menos cuidado com a diminuição de suas contagens
de referência, no entanto, aceitamos instâncias de subclasses de string.
Mesmo que a desalocação de strings normais não retorne aos nossos
objetos, não podemos garantir que a desalocação de uma instância de uma
subclasse de cadeias de caracteres não retornará aos nossos objetos.


File: python.info,  Node: Apoiando a coleta de lixo cíclica,  Next: Criando subclasses de outros tipos,  Prev: Fornecendo controle mais preciso sobre atributos de dados,  Up: Definindo Tipos de Extensão Tutorial

6.2.2.4 Apoiando a coleta de lixo cíclica
.........................................

O Python possui um *note coletor de lixo (GC) cíclico: 1a69. que pode
identificar objetos que não são mais necessários mesmo quando suas
contagens de referências não são zero.  Isso pode acontecer quando os
objetos participam de ciclos.  Por exemplo, considere:

     >>> l = []
     >>> l.append(l)
     >>> del l

Neste exemplo, criamos uma lista que contém a si mesma.  Quando a
apagamos, ela ainda possui uma referência apontando para si própria.
Sua contagem de referências não cai para zero.  Felizmente, o coletor de
lixo cíclico do Python acabará percebendo que a lista é lixo e irá
liberá-la.

No segunda versão do exemplo de ‘Custom’, permitimos que qualquer tipo
de objeto fosse armazenado nos atributos ‘first’ ou ‘last’ (1).  Além
disso, na segunda e na terceira versões, permitimos estender ‘Custom’, e
subclasses podem adicionar atributos arbitrários.  Por qualquer um
desses dois motivos, instâncias de ‘Custom’ podem participar de ciclos:

     >>> import custom3
     >>> class Derived(custom3.Custom): pass
     ...
     >>> n = Derived()
     >>> n.some_attribute = n

Para permitir que uma instância de ‘Custom’ que participa de um ciclo de
referência seja corretamente detectada e coletada pelo coletor de lixo
cíclico, nosso tipo ‘Custom’ precisa preencher dois slots adicionais e
ativar um sinalizador que habilita esses slots:

     #define PY_SSIZE_T_CLEAN
     #include <Python.h>
     #include <stddef.h> /* for offsetof() */

     typedef struct {
         PyObject_HEAD
         PyObject *first; /* first name */
         PyObject *last;  /* last name */
         int number;
     } CustomObject;

     static int
     Custom_traverse(CustomObject *self, visitproc visit, void *arg)
     {
         Py_VISIT(self->first);
         Py_VISIT(self->last);
         return 0;
     }

     static int
     Custom_clear(CustomObject *self)
     {
         Py_CLEAR(self->first);
         Py_CLEAR(self->last);
         return 0;
     }

     static void
     Custom_dealloc(CustomObject *self)
     {
         PyObject_GC_UnTrack(self);
         Custom_clear(self);
         Py_TYPE(self)->tp_free((PyObject *) self);
     }

     static PyObject *
     Custom_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
     {
         CustomObject *self;
         self = (CustomObject *) type->tp_alloc(type, 0);
         if (self != NULL) {
             self->first = PyUnicode_FromString("");
             if (self->first == NULL) {
                 Py_DECREF(self);
                 return NULL;
             }
             self->last = PyUnicode_FromString("");
             if (self->last == NULL) {
                 Py_DECREF(self);
                 return NULL;
             }
             self->number = 0;
         }
         return (PyObject *) self;
     }

     static int
     Custom_init(CustomObject *self, PyObject *args, PyObject *kwds)
     {
         static char *kwlist[] = {"first", "last", "number", NULL};
         PyObject *first = NULL, *last = NULL;

         if (!PyArg_ParseTupleAndKeywords(args, kwds, "|UUi", kwlist,
                                          &first, &last,
                                          &self->number))
             return -1;

         if (first) {
             Py_SETREF(self->first, Py_NewRef(first));
         }
         if (last) {
             Py_SETREF(self->last, Py_NewRef(last));
         }
         return 0;
     }

     static PyMemberDef Custom_members[] = {
         {"number", Py_T_INT, offsetof(CustomObject, number), 0,
          "custom number"},
         {NULL}  /* Sentinel */
     };

     static PyObject *
     Custom_getfirst(CustomObject *self, void *closure)
     {
         return Py_NewRef(self->first);
     }

     static int
     Custom_setfirst(CustomObject *self, PyObject *value, void *closure)
     {
         if (value == NULL) {
             PyErr_SetString(PyExc_TypeError, "Cannot delete the first attribute");
             return -1;
         }
         if (!PyUnicode_Check(value)) {
             PyErr_SetString(PyExc_TypeError,
                             "The first attribute value must be a string");
             return -1;
         }
         Py_XSETREF(self->first, Py_NewRef(value));
         return 0;
     }

     static PyObject *
     Custom_getlast(CustomObject *self, void *closure)
     {
         return Py_NewRef(self->last);
     }

     static int
     Custom_setlast(CustomObject *self, PyObject *value, void *closure)
     {
         if (value == NULL) {
             PyErr_SetString(PyExc_TypeError, "Cannot delete the last attribute");
             return -1;
         }
         if (!PyUnicode_Check(value)) {
             PyErr_SetString(PyExc_TypeError,
                             "The last attribute value must be a string");
             return -1;
         }
         Py_XSETREF(self->last, Py_NewRef(value));
         return 0;
     }

     static PyGetSetDef Custom_getsetters[] = {
         {"first", (getter) Custom_getfirst, (setter) Custom_setfirst,
          "first name", NULL},
         {"last", (getter) Custom_getlast, (setter) Custom_setlast,
          "last name", NULL},
         {NULL}  /* Sentinel */
     };

     static PyObject *
     Custom_name(CustomObject *self, PyObject *Py_UNUSED(ignored))
     {
         return PyUnicode_FromFormat("%S %S", self->first, self->last);
     }

     static PyMethodDef Custom_methods[] = {
         {"name", (PyCFunction) Custom_name, METH_NOARGS,
          "Return the name, combining the first and last name"
         },
         {NULL}  /* Sentinel */
     };

     static PyTypeObject CustomType = {
         .ob_base = PyVarObject_HEAD_INIT(NULL, 0)
         .tp_name = "custom4.Custom",
         .tp_doc = PyDoc_STR("Custom objects"),
         .tp_basicsize = sizeof(CustomObject),
         .tp_itemsize = 0,
         .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,
         .tp_new = Custom_new,
         .tp_init = (initproc) Custom_init,
         .tp_dealloc = (destructor) Custom_dealloc,
         .tp_traverse = (traverseproc) Custom_traverse,
         .tp_clear = (inquiry) Custom_clear,
         .tp_members = Custom_members,
         .tp_methods = Custom_methods,
         .tp_getset = Custom_getsetters,
     };

     static int
     custom_module_exec(PyObject *m)
     {
         if (PyType_Ready(&CustomType) < 0) {
             return -1;
         }

         if (PyModule_AddObjectRef(m, "Custom", (PyObject *) &CustomType) < 0) {
             return -1;
         }

         return 0;
     }

     static PyModuleDef_Slot custom_module_slots[] = {
         {Py_mod_exec, custom_module_exec},
         {Py_mod_multiple_interpreters, Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED},
         {0, NULL}
     };

     static PyModuleDef custom_module = {
         .m_base = PyModuleDef_HEAD_INIT,
         .m_name = "custom4",
         .m_doc = "Example module that creates an extension type.",
         .m_size = 0,
         .m_slots = custom_module_slots,
     };

     PyMODINIT_FUNC
     PyInit_custom4(void)
     {
         return PyModuleDef_Init(&custom_module);
     }

Primeiro, o método de travessia informa ao coletor de lixo cíclico quais
subobjetos podem participar de ciclos:

     static int
     Custom_traverse(CustomObject *self, visitproc visit, void *arg)
     {
         int vret;
         if (self->first) {
             vret = visit(self->first, arg);
             if (vret != 0)
                 return vret;
         }
         if (self->last) {
             vret = visit(self->last, arg);
             if (vret != 0)
                 return vret;
         }
         return 0;
     }

Para cada subobjeto que pode participar de ciclos, precisamos chamar a
função ‘visit()’, que é passada para o método de travessia.  A função
‘visit()’ recebe como argumentos o subobjeto e o argumento extra 'arg'
fornecido ao método de travessia.  Ela retorna um valor inteiro que deve
ser retornado se for diferente de zero.

O Python fornece o macro *note Py_VISIT(): 4b82, que automatiza as
chamadas às funções visit.  Com *note Py_VISIT(): 4b82, podemos
minimizar a quantidade de boilerplate em ‘Custom_traverse’:

     static int
     Custom_traverse(CustomObject *self, visitproc visit, void *arg)
     {
         Py_VISIT(self->first);
         Py_VISIT(self->last);
         return 0;
     }

     Nota: A implementação de *note tp_traverse: 77e. deve nomear seus
     argumentos exatamente como 'visit' e 'arg' para que seja possível
     usar *note Py_VISIT(): 4b82.

Segundo, precisamos fornecer um método para limpar quaisquer subobjetos
que possam participar de ciclos:

     static int
     Custom_clear(CustomObject *self)
     {
         Py_CLEAR(self->first);
         Py_CLEAR(self->last);
         return 0;
     }

Observe o uso do macro *note Py_CLEAR(): 578.  Ele é a forma recomendada
e segura de limpar atributos de dados de tipos arbitrários enquanto
decrementa suas contagens de referências.  Se você chamasse *note
Py_XDECREF(): 78f. no atributo antes de defini-lo como ‘NULL’, haveria a
possibilidade de que o destrutor do atributo chamasse novamente algum
código que lesse o atributo (especialmente se houver um ciclo de
referência).

     Nota: Você poderia emular *note Py_CLEAR(): 578. ao escrever:

          PyObject *tmp;
          tmp = self->first;
          self->first = NULL;
          Py_XDECREF(tmp);

     Apesar disso, é muito mais fácil e menos propenso a erros, usar
     sempre *note Py_CLEAR(): 578. ao excluir um atributo.  Não tente
     micro‐otimizar às custas da robustez!

O desalocador ‘Custom_dealloc’ pode executar código arbitrário ao limpar
atributos.  Isso significa que o GC pode ser acionado dentro da função.
Como o GC presume que a contagem de referências não é zero, precisamos
remover o objeto do rastreamento do GC chamando *note
PyObject_GC_UnTrack(): 154e. antes de limpar os membros.  A seguir está
nossa versão reimplementada do desalocador usando *note
PyObject_GC_UnTrack(): 154e. e ‘Custom_clear’:

     static void
     Custom_dealloc(CustomObject *self)
     {
         PyObject_GC_UnTrack(self);
         Custom_clear(self);
         Py_TYPE(self)->tp_free((PyObject *) self);
     }

Por fim, adicionamos o macro *note Py_TPFLAGS_HAVE_GC: 77d. aos
sinalizadores da classe:

     .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE | Py_TPFLAGS_HAVE_GC,

Isso é praticamente tudo.  Se tivéssemos escrito manipuladores
personalizados para *note tp_alloc: 4b7a. ou *note tp_free: 4b79,
precisaríamos adaptá-los para a coleta de lixo cíclica.  A maior parte
das extensões usará as versões fornecidas automaticamente.

   ---------- Footnotes ----------

   (1) Além disso, mesmo com nossos atributos restritos a instâncias de
strings, o usuário poderia passar arbitrariamente subclasses *note str:
44c. e, portanto, ainda criar ciclos de referência.


File: python.info,  Node: Criando subclasses de outros tipos,  Prev: Apoiando a coleta de lixo cíclica,  Up: Definindo Tipos de Extensão Tutorial

6.2.2.5 Criando subclasses de outros tipos
..........................................

É possível criar novos tipos de extensão derivados de tipos já
existentes.  É mais fácil herdar dos tipos embutidos, já que uma
extensão pode usar diretamente o *note PyTypeObject: ab4. de que
precisa.  Pode ser difícil compartilhar essas estruturas *note
PyTypeObject: ab4. entre módulos de extensão distintos.

Neste exemplo, criaremos um tipo ‘SubList’ que herda do tipo embutido
*note list: 611.  O novo tipo será totalmente compatível com listas
comuns, mas terá um método adicional, ‘increment()’, que incrementa um
contador interno:

     >>> import sublist
     >>> s = sublist.SubList(range(3))
     >>> s.extend(s)
     >>> print(len(s))
     6
     >>> print(s.increment())
     1
     >>> print(s.increment())
     2

     #define PY_SSIZE_T_CLEAN
     #include <Python.h>

     typedef struct {
         PyListObject list;
         int state;
     } SubListObject;

     static PyObject *
     SubList_increment(SubListObject *self, PyObject *unused)
     {
         self->state++;
         return PyLong_FromLong(self->state);
     }

     static PyMethodDef SubList_methods[] = {
         {"increment", (PyCFunction) SubList_increment, METH_NOARGS,
          PyDoc_STR("increment state counter")},
         {NULL},
     };

     static int
     SubList_init(SubListObject *self, PyObject *args, PyObject *kwds)
     {
         if (PyList_Type.tp_init((PyObject *) self, args, kwds) < 0)
             return -1;
         self->state = 0;
         return 0;
     }

     static PyTypeObject SubListType = {
         .ob_base = PyVarObject_HEAD_INIT(NULL, 0)
         .tp_name = "sublist.SubList",
         .tp_doc = PyDoc_STR("SubList objects"),
         .tp_basicsize = sizeof(SubListObject),
         .tp_itemsize = 0,
         .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE,
         .tp_init = (initproc) SubList_init,
         .tp_methods = SubList_methods,
     };

     static int
     sublist_module_exec(PyObject *m)
     {
         SubListType.tp_base = &PyList_Type;
         if (PyType_Ready(&SubListType) < 0) {
             return -1;
         }

         if (PyModule_AddObjectRef(m, "SubList", (PyObject *) &SubListType) < 0) {
             return -1;
         }

         return 0;
     }

     static PyModuleDef_Slot sublist_module_slots[] = {
         {Py_mod_exec, sublist_module_exec},
         {Py_mod_multiple_interpreters, Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED},
         {0, NULL}
     };

     static PyModuleDef sublist_module = {
         .m_base = PyModuleDef_HEAD_INIT,
         .m_name = "sublist",
         .m_doc = "Example module that creates an extension type.",
         .m_size = 0,
         .m_slots = sublist_module_slots,
     };

     PyMODINIT_FUNC
     PyInit_sublist(void)
     {
         return PyModuleDef_Init(&sublist_module);
     }

Como você pode consultar, o código-fonte se assemelha bastante aos
exemplos de ‘Custom’ das seções anteriores.  Vamos detalhar as
principais diferenças entre eles.

     typedef struct {
         PyListObject list;
         int state;
     } SubListObject;

A diferença principal para objetos de tipos derivados é que a estrutura
de objeto do tipo base deve ser o primeiro valor.  O tipo base já inclui
o *note PyObject_HEAD(): 1321. no início de sua própria estrutura.

Quando um objeto Python é uma instância de ‘SubList’, seu ponteiro
‘PyObject *’ pode ser convertido com segurança tanto para ‘PyListObject
*’ quanto para ‘SubListObject *’:

     static int
     SubList_init(SubListObject *self, PyObject *args, PyObject *kwds)
     {
         if (PyList_Type.tp_init((PyObject *) self, args, kwds) < 0)
             return -1;
         self->state = 0;
         return 0;
     }

Vemos acima como chamar o método *note __init__(): 6b0. do tipo base.

Esse padrão é importante ao escrever um tipo que possui membros
personalizados em *note tp_new: 57f. e *note tp_dealloc: 4b66.  O
manipulador *note tp_new: 57f. não deve realmente criar a memória do
objeto usando o seu próprio *note tp_alloc: 4b7a.; em vez disso, deve
permitir que a classe base faça isso, chamando o seu próprio *note
tp_new: 57f.

A estrutura *note PyTypeObject: ab4. provê o campo *note tp_base: 20b8,
que especifica a classe base concreta do tipo.  Devido a problemas de
compilação multiplataforma, não se deve preencher esse campo diretamente
com uma referência para *note PyList_Type: 4b84.; isso deve ser feito
dentro da função *note Py_mod_exec: 985.:

     static int
     sublist_module_exec(PyObject *m)
     {
         SubListType.tp_base = &PyList_Type;
         if (PyType_Ready(&SubListType) < 0) {
             return -1;
         }

         if (PyModule_AddObjectRef(m, "SubList", (PyObject *) &SubListType) < 0) {
             return -1;
         }

         return 0;
     }

Antes de chamar *note PyType_Ready(): 77c, a estrutura do tipo deve ter
o slot *note tp_base: 20b8. preenchido.  Ao derivarmos um tipo
existente, não é necessário preencher o slot *note tp_alloc: 4b7a. com
*note PyType_GenericNew(): 4b76. — a função de alocação do tipo base
será herdada.

Depois disso, chamar *note PyType_Ready(): 77c. e adicionar o objeto de
tipo ao módulo é o mesmo processo usado nos exemplos básicos com
‘Custom’.


File: python.info,  Node: Defining Extension Types Assorted Topics,  Next: Construindo extensões C e C++,  Prev: Definindo Tipos de Extensão Tutorial,  Up: Criando extensões sem ferramentas de terceiros

6.2.3 Defining Extension Types: Assorted Topics
-----------------------------------------------

This section aims to give a quick fly-by on the various type methods you
can implement and what they do.

Here is the definition of *note PyTypeObject: ab4, with some fields only
used in *note debug builds: 1f9. omitted:

     typedef struct _typeobject {
         PyObject_VAR_HEAD
         const char *tp_name; /* For printing, in format "<module>.<name>" */
         Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */

         /* Methods to implement standard operations */

         destructor tp_dealloc;
         Py_ssize_t tp_vectorcall_offset;
         getattrfunc tp_getattr;
         setattrfunc tp_setattr;
         PyAsyncMethods *tp_as_async; /* formerly known as tp_compare (Python 2)
                                         or tp_reserved (Python 3) */
         reprfunc tp_repr;

         /* Method suites for standard classes */

         PyNumberMethods *tp_as_number;
         PySequenceMethods *tp_as_sequence;
         PyMappingMethods *tp_as_mapping;

         /* More standard operations (here for binary compatibility) */

         hashfunc tp_hash;
         ternaryfunc tp_call;
         reprfunc tp_str;
         getattrofunc tp_getattro;
         setattrofunc tp_setattro;

         /* Functions to access object as input/output buffer */
         PyBufferProcs *tp_as_buffer;

         /* Flags to define presence of optional/expanded features */
         unsigned long tp_flags;

         const char *tp_doc; /* Documentation string */

         /* Assigned meaning in release 2.0 */
         /* call function for all accessible objects */
         traverseproc tp_traverse;

         /* delete references to contained objects */
         inquiry tp_clear;

         /* Assigned meaning in release 2.1 */
         /* rich comparisons */
         richcmpfunc tp_richcompare;

         /* weak reference enabler */
         Py_ssize_t tp_weaklistoffset;

         /* Iterators */
         getiterfunc tp_iter;
         iternextfunc tp_iternext;

         /* Attribute descriptor and subclassing stuff */
         struct PyMethodDef *tp_methods;
         struct PyMemberDef *tp_members;
         struct PyGetSetDef *tp_getset;
         // Strong reference on a heap type, borrowed reference on a static type
         struct _typeobject *tp_base;
         PyObject *tp_dict;
         descrgetfunc tp_descr_get;
         descrsetfunc tp_descr_set;
         Py_ssize_t tp_dictoffset;
         initproc tp_init;
         allocfunc tp_alloc;
         newfunc tp_new;
         freefunc tp_free; /* Low-level free-memory routine */
         inquiry tp_is_gc; /* For PyObject_IS_GC */
         PyObject *tp_bases;
         PyObject *tp_mro; /* method resolution order */
         PyObject *tp_cache;
         PyObject *tp_subclasses;
         PyObject *tp_weaklist;
         destructor tp_del;

         /* Type attribute cache version tag. Added in version 2.6 */
         unsigned int tp_version_tag;

         destructor tp_finalize;
         vectorcallfunc tp_vectorcall;

         /* bitset of which type-watchers care about this type */
         unsigned char tp_watched;
     } PyTypeObject;

Now that’s a 'lot' of methods.  Don’t worry too much though – if you
have a type you want to define, the chances are very good that you will
only implement a handful of these.

As you probably expect by now, we’re going to go over this and give more
information about the various handlers.  We won’t go in the order they
are defined in the structure, because there is a lot of historical
baggage that impacts the ordering of the fields.  It’s often easiest to
find an example that includes the fields you need and then change the
values to suit your new type.

     const char *tp_name; /* For printing */

The name of the type – as mentioned in the previous chapter, this will
appear in various places, almost entirely for diagnostic purposes.  Try
to choose something that will be helpful in such a situation!

     Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */

These fields tell the runtime how much memory to allocate when new
objects of this type are created.  Python has some built-in support for
variable length structures (think: strings, tuples) which is where the
*note tp_itemsize: 20fd. field comes in.  This will be dealt with later.

     const char *tp_doc;

Here you can put a string (or its address) that you want returned when
the Python script references ‘obj.__doc__’ to retrieve the doc string.

Now we come to the basic type methods – the ones most extension types
will implement.

* Menu:

* Finalization and De-allocation::
* Object Presentation::
* Attribute Management::
* Object Comparison::
* Abstract Protocol Support::
* Weak Reference Support::
* More Suggestions::


File: python.info,  Node: Finalization and De-allocation,  Next: Object Presentation,  Up: Defining Extension Types Assorted Topics

6.2.3.1 Finalization and De-allocation
......................................

     destructor tp_dealloc;

This function is called when the reference count of the instance of your
type is reduced to zero and the Python interpreter wants to reclaim it.
If your type has memory to free or other clean-up to perform, you can
put it here.  The object itself needs to be freed here as well.  Here is
an example of this function:

     static void
     newdatatype_dealloc(newdatatypeobject *obj)
     {
         free(obj->obj_UnderlyingDatatypePtr);
         Py_TYPE(obj)->tp_free((PyObject *)obj);
     }

If your type supports garbage collection, the destructor should call
*note PyObject_GC_UnTrack(): 154e. before clearing any member fields:

     static void
     newdatatype_dealloc(newdatatypeobject *obj)
     {
         PyObject_GC_UnTrack(obj);
         Py_CLEAR(obj->other_obj);
         ...
         Py_TYPE(obj)->tp_free((PyObject *)obj);
     }

One important requirement of the deallocator function is that it leaves
any pending exceptions alone.  This is important since deallocators are
frequently called as the interpreter unwinds the Python stack; when the
stack is unwound due to an exception (rather than normal returns),
nothing is done to protect the deallocators from seeing that an
exception has already been set.  Any actions which a deallocator
performs which may cause additional Python code to be executed may
detect that an exception has been set.  This can lead to misleading
errors from the interpreter.  The proper way to protect against this is
to save a pending exception before performing the unsafe action, and
restoring it when done.  This can be done using the *note PyErr_Fetch():
3f3. and *note PyErr_Restore(): 3f6. functions:

     static void
     my_dealloc(PyObject *obj)
     {
         MyObject *self = (MyObject *) obj;
         PyObject *cbresult;

         if (self->my_callback != NULL) {
             PyObject *err_type, *err_value, *err_traceback;

             /* This saves the current exception state */
             PyErr_Fetch(&err_type, &err_value, &err_traceback);

             cbresult = PyObject_CallNoArgs(self->my_callback);
             if (cbresult == NULL)
                 PyErr_WriteUnraisable(self->my_callback);
             else
                 Py_DECREF(cbresult);

             /* This restores the saved exception state */
             PyErr_Restore(err_type, err_value, err_traceback);

             Py_DECREF(self->my_callback);
         }
         Py_TYPE(obj)->tp_free((PyObject*)self);
     }

     Nota: There are limitations to what you can safely do in a
     deallocator function.  First, if your type supports garbage
     collection (using *note tp_traverse: 77e. and/or *note tp_clear:
     4b8b.), some of the object’s members can have been cleared or
     finalized by the time *note tp_dealloc: 4b66. is called.  Second,
     in *note tp_dealloc: 4b66, your object is in an unstable state: its
     reference count is equal to zero.  Any call to a non-trivial object
     or API (as in the example above) might end up calling *note
     tp_dealloc: 4b66. again, causing a double free and a crash.

     Starting with Python 3.4, it is recommended not to put any complex
     finalization code in *note tp_dealloc: 4b66, and instead use the
     new *note tp_finalize: ab5. type method.

     Ver também
     ..........

     PEP 442(1) explains the new finalization scheme.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0442/


File: python.info,  Node: Object Presentation,  Next: Attribute Management,  Prev: Finalization and De-allocation,  Up: Defining Extension Types Assorted Topics

6.2.3.2 Object Presentation
...........................

In Python, there are two ways to generate a textual representation of an
object: the *note repr(): 800. function, and the *note str(): 44c.
function.  (The *note print(): fa9. function just calls *note str():
44c.)  These handlers are both optional.

     reprfunc tp_repr;
     reprfunc tp_str;

The *note tp_repr: 4b8d. handler should return a string object
containing a representation of the instance for which it is called.
Here is a simple example:

     static PyObject *
     newdatatype_repr(newdatatypeobject *obj)
     {
         return PyUnicode_FromFormat("Repr-ified_newdatatype{{size:%d}}",
                                     obj->obj_UnderlyingDatatypePtr->size);
     }

If no *note tp_repr: 4b8d. handler is specified, the interpreter will
supply a representation that uses the type’s *note tp_name: 1a3c. and a
uniquely identifying value for the object.

The *note tp_str: 4b8e. handler is to *note str(): 44c. what the *note
tp_repr: 4b8d. handler described above is to *note repr(): 800.; that
is, it is called when Python code calls *note str(): 44c. on an instance
of your object.  Its implementation is very similar to the *note
tp_repr: 4b8d. function, but the resulting string is intended for human
consumption.  If *note tp_str: 4b8e. is not specified, the *note
tp_repr: 4b8d. handler is used instead.

Here is a simple example:

     static PyObject *
     newdatatype_str(newdatatypeobject *obj)
     {
         return PyUnicode_FromFormat("Stringified_newdatatype{{size:%d}}",
                                     obj->obj_UnderlyingDatatypePtr->size);
     }


File: python.info,  Node: Attribute Management,  Next: Object Comparison,  Prev: Object Presentation,  Up: Defining Extension Types Assorted Topics

6.2.3.3 Attribute Management
............................

For every object which can support attributes, the corresponding type
must provide the functions that control how the attributes are resolved.
There needs to be a function which can retrieve attributes (if any are
defined), and another to set attributes (if setting attributes is
allowed).  Removing an attribute is a special case, for which the new
value passed to the handler is ‘NULL’.

Python supports two pairs of attribute handlers; a type that supports
attributes only needs to implement the functions for one pair.  The
difference is that one pair takes the name of the attribute as a char*,
while the other accepts a *note PyObject: 339.*.  Each type can use
whichever pair makes more sense for the implementation’s convenience.

     getattrfunc  tp_getattr;        /* char * version */
     setattrfunc  tp_setattr;
     /* ... */
     getattrofunc tp_getattro;       /* PyObject * version */
     setattrofunc tp_setattro;

If accessing attributes of an object is always a simple operation (this
will be explained shortly), there are generic implementations which can
be used to provide the *note PyObject: 339.* version of the attribute
management functions.  The actual need for type-specific attribute
handlers almost completely disappeared starting with Python 2.2, though
there are many examples which have not been updated to use some of the
new generic mechanism that is available.

* Menu:

* Generic Attribute Management::
* Type-specific Attribute Management::


File: python.info,  Node: Generic Attribute Management,  Next: Type-specific Attribute Management,  Up: Attribute Management

6.2.3.4 Generic Attribute Management
....................................

Most extension types only use 'simple' attributes.  So, what makes the
attributes simple?  There are only a couple of conditions that must be
met:

  1. The name of the attributes must be known when *note PyType_Ready():
     77c. is called.

  2. No special processing is needed to record that an attribute was
     looked up or set, nor do actions need to be taken based on the
     value.

Note that this list does not place any restrictions on the values of the
attributes, when the values are computed, or how relevant data is
stored.

When *note PyType_Ready(): 77c. is called, it uses three tables
referenced by the type object to create *note descriptor: 1658.s which
are placed in the dictionary of the type object.  Each descriptor
controls access to one attribute of the instance object.  Each of the
tables is optional; if all three are ‘NULL’, instances of the type will
only have attributes that are inherited from their base type, and should
leave the *note tp_getattro: 17e6. and *note tp_setattro: 4b91. fields
‘NULL’ as well, allowing the base type to handle attributes.

The tables are declared as three fields of the type object:

     struct PyMethodDef *tp_methods;
     struct PyMemberDef *tp_members;
     struct PyGetSetDef *tp_getset;

If *note tp_methods: 4b7d. is not ‘NULL’, it must refer to an array of
*note PyMethodDef: 151f. structures.  Each entry in the table is an
instance of this structure:

     typedef struct PyMethodDef {
         const char  *ml_name;       /* method name */
         PyCFunction  ml_meth;       /* implementation function */
         int          ml_flags;      /* flags */
         const char  *ml_doc;        /* docstring */
     } PyMethodDef;

One entry should be defined for each method provided by the type; no
entries are needed for methods inherited from a base type.  One
additional entry is needed at the end; it is a sentinel that marks the
end of the array.  The *note ml_name: 4b92. field of the sentinel must
be ‘NULL’.

The second table is used to define attributes which map directly to data
stored in the instance.  A variety of primitive C types are supported,
and access may be read-only or read-write.  The structures in the table
are defined as:

     typedef struct PyMemberDef {
         const char *name;
         int         type;
         int         offset;
         int         flags;
         const char *doc;
     } PyMemberDef;

For each entry in the table, a *note descriptor: 1658. will be
constructed and added to the type which will be able to extract a value
from the instance structure.  The *note type: 4b93. field should contain
a type code like *note Py_T_INT: 58f. or *note Py_T_DOUBLE: 590.; the
value will be used to determine how to convert Python values to and from
C values.  The *note flags: 4b94. field is used to store flags which
control how the attribute can be accessed: you can set it to *note
Py_READONLY: 591. to prevent Python code from setting it.

An interesting advantage of using the *note tp_members: 4b7b. table to
build descriptors that are used at runtime is that any attribute defined
this way can have an associated doc string simply by providing the text
in the table.  An application can use the introspection API to retrieve
the descriptor from the class object, and get the doc string using its
*note __doc__: 1e35. attribute.

As with the *note tp_methods: 4b7d. table, a sentinel entry with a *note
ml_name: 4b92. value of ‘NULL’ is required.


File: python.info,  Node: Type-specific Attribute Management,  Prev: Generic Attribute Management,  Up: Attribute Management

6.2.3.5 Type-specific Attribute Management
..........................................

For simplicity, only the char* version will be demonstrated here; the
type of the name parameter is the only difference between the char* and
*note PyObject: 339.* flavors of the interface.  This example
effectively does the same thing as the generic example above, but does
not use the generic support added in Python 2.2.  It explains how the
handler functions are called, so that if you do need to extend their
functionality, you’ll understand what needs to be done.

The *note tp_getattr: 4b96. handler is called when the object requires
an attribute look-up.  It is called in the same situations where the
*note __getattr__(): 4d3. method of a class would be called.

Aqui está um exemplo:

     static PyObject *
     newdatatype_getattr(newdatatypeobject *obj, char *name)
     {
         if (strcmp(name, "data") == 0)
         {
             return PyLong_FromLong(obj->data);
         }

         PyErr_Format(PyExc_AttributeError,
                      "'%.100s' object has no attribute '%.400s'",
                      Py_TYPE(obj)->tp_name, name);
         return NULL;
     }

The *note tp_setattr: 4b97. handler is called when the *note
__setattr__(): 20bf. or *note __delattr__(): 20c0. method of a class
instance would be called.  When an attribute should be deleted, the
third parameter will be ‘NULL’.  Here is an example that simply raises
an exception; if this were really all you wanted, the *note tp_setattr:
4b97. handler should be set to ‘NULL’.

     static int
     newdatatype_setattr(newdatatypeobject *obj, char *name, PyObject *v)
     {
         PyErr_Format(PyExc_RuntimeError, "Read-only attribute: %s", name);
         return -1;
     }


File: python.info,  Node: Object Comparison,  Next: Abstract Protocol Support,  Prev: Attribute Management,  Up: Defining Extension Types Assorted Topics

6.2.3.6 Object Comparison
.........................

     richcmpfunc tp_richcompare;

The *note tp_richcompare: 4b99. handler is called when comparisons are
needed.  It is analogous to the *note rich comparison methods: 20f0,
like ‘__lt__()’, and also called by *note PyObject_RichCompare(): 4b9a.
and *note PyObject_RichCompareBool(): 1b1b.

This function is called with two Python objects and the operator as
arguments, where the operator is one of ‘Py_EQ’, ‘Py_NE’, ‘Py_LE’,
‘Py_GE’, ‘Py_LT’ or ‘Py_GT’.  It should compare the two objects with
respect to the specified operator and return ‘Py_True’ or ‘Py_False’ if
the comparison is successful, ‘Py_NotImplemented’ to indicate that
comparison is not implemented and the other object’s comparison method
should be tried, or ‘NULL’ if an exception was set.

Here is a sample implementation, for a datatype that is considered equal
if the size of an internal pointer is equal:

     static PyObject *
     newdatatype_richcmp(newdatatypeobject *obj1, newdatatypeobject *obj2, int op)
     {
         PyObject *result;
         int c, size1, size2;

         /* code to make sure that both arguments are of type
            newdatatype omitted */

         size1 = obj1->obj_UnderlyingDatatypePtr->size;
         size2 = obj2->obj_UnderlyingDatatypePtr->size;

         switch (op) {
         case Py_LT: c = size1 <  size2; break;
         case Py_LE: c = size1 <= size2; break;
         case Py_EQ: c = size1 == size2; break;
         case Py_NE: c = size1 != size2; break;
         case Py_GT: c = size1 >  size2; break;
         case Py_GE: c = size1 >= size2; break;
         }
         result = c ? Py_True : Py_False;
         Py_INCREF(result);
         return result;
      }


File: python.info,  Node: Abstract Protocol Support,  Next: Weak Reference Support,  Prev: Object Comparison,  Up: Defining Extension Types Assorted Topics

6.2.3.7 Abstract Protocol Support
.................................

Python supports a variety of 'abstract' ‘protocols;’ the specific
interfaces provided to use these interfaces are documented in *note
Camada de Objetos Abstratos: 4b9c.

A number of these abstract interfaces were defined early in the
development of the Python implementation.  In particular, the number,
mapping, and sequence protocols have been part of Python since the
beginning.  Other protocols have been added over time.  For protocols
which depend on several handler routines from the type implementation,
the older protocols have been defined as optional blocks of handlers
referenced by the type object.  For newer protocols there are additional
slots in the main type object, with a flag bit being set to indicate
that the slots are present and should be checked by the interpreter.
(The flag bit does not indicate that the slot values are non-‘NULL’.
The flag may be set to indicate the presence of a slot, but a slot may
still be unfilled.)

     PyNumberMethods   *tp_as_number;
     PySequenceMethods *tp_as_sequence;
     PyMappingMethods  *tp_as_mapping;

If you wish your object to be able to act like a number, a sequence, or
a mapping object, then you place the address of a structure that
implements the C type *note PyNumberMethods: 1465, *note
PySequenceMethods: 4b9d, or *note PyMappingMethods: 4b9e, respectively.
It is up to you to fill in this structure with appropriate values.  You
can find examples of the use of each of these in the ‘Objects’ directory
of the Python source distribution.

     hashfunc tp_hash;

This function, if you choose to provide it, should return a hash number
for an instance of your data type.  Here is a simple example:

     static Py_hash_t
     newdatatype_hash(newdatatypeobject *obj)
     {
         Py_hash_t result;
         result = obj->some_size + 32767 * obj->some_number;
         if (result == -1)
            result = -2;
         return result;
     }

*note Py_hash_t: 12a5. is a signed integer type with a platform-varying
width.  Returning ‘-1’ from *note tp_hash: 4b9f. indicates an error,
which is why you should be careful to avoid returning it when hash
computation is successful, as seen above.

     ternaryfunc tp_call;

This function is called when an instance of your data type is “called”,
for example, if ‘obj1’ is an instance of your data type and the Python
script contains ‘obj1('hello')’, the *note tp_call: 559. handler is
invoked.

This function takes three arguments:

  1. 'self' is the instance of the data type which is the subject of the
     call.  If the call is ‘obj1('hello')’, then 'self' is ‘obj1’.

  2. 'args' is a tuple containing the arguments to the call.  You can
     use *note PyArg_ParseTuple(): 571. to extract the arguments.

  3. 'kwds' is a dictionary of keyword arguments that were passed.  If
     this is non-‘NULL’ and you support keyword arguments, use *note
     PyArg_ParseTupleAndKeywords(): 383. to extract the arguments.  If
     you do not want to support keyword arguments and this is
     non-‘NULL’, raise a *note TypeError: 2c3. with a message saying
     that keyword arguments are not supported.

Here is a toy ‘tp_call’ implementation:

     static PyObject *
     newdatatype_call(newdatatypeobject *obj, PyObject *args, PyObject *kwds)
     {
         PyObject *result;
         const char *arg1;
         const char *arg2;
         const char *arg3;

         if (!PyArg_ParseTuple(args, "sss:call", &arg1, &arg2, &arg3)) {
             return NULL;
         }
         result = PyUnicode_FromFormat(
             "Returning -- value: [%d] arg1: [%s] arg2: [%s] arg3: [%s]\n",
             obj->obj_UnderlyingDatatypePtr->size,
             arg1, arg2, arg3);
         return result;
     }

     /* Iterators */
     getiterfunc tp_iter;
     iternextfunc tp_iternext;

These functions provide support for the iterator protocol.  Both
handlers take exactly one parameter, the instance for which they are
being called, and return a new reference.  In the case of an error, they
should set an exception and return ‘NULL’.  *note tp_iter: 1537.
corresponds to the Python *note __iter__(): c8a. method, while *note
tp_iternext: 1538. corresponds to the Python *note __next__(): 1310.
method.

Any *note iterable: 1268. object must implement the *note tp_iter: 1537.
handler, which must return an *note iterator: 1ac. object.  Here the
same guidelines apply as for Python classes:

   * For collections (such as lists and tuples) which can support
     multiple independent iterators, a new iterator should be created
     and returned by each call to *note tp_iter: 1537.

   * Objects which can only be iterated over once (usually due to side
     effects of iteration, such as file objects) can implement *note
     tp_iter: 1537. by returning a new reference to themselves – and
     should also therefore implement the *note tp_iternext: 1538.
     handler.

Any *note iterator: 1ac. object should implement both *note tp_iter:
1537. and *note tp_iternext: 1538.  An iterator’s *note tp_iter: 1537.
handler should return a new reference to the iterator.  Its *note
tp_iternext: 1538. handler should return a new reference to the next
object in the iteration, if there is one.  If the iteration has reached
the end, *note tp_iternext: 1538. may return ‘NULL’ without setting an
exception, or it may set *note StopIteration: c15. 'in addition' to
returning ‘NULL’; avoiding the exception can yield slightly better
performance.  If an actual error occurs, *note tp_iternext: 1538. should
always set an exception and return ‘NULL’.


File: python.info,  Node: Weak Reference Support,  Next: More Suggestions,  Prev: Abstract Protocol Support,  Up: Defining Extension Types Assorted Topics

6.2.3.8 Weak Reference Support
..............................

One of the goals of Python’s weak reference implementation is to allow
any type to participate in the weak reference mechanism without
incurring the overhead on performance-critical objects (such as
numbers).

Ver também
..........

Documentação do módulo *note weakref: 114.

For an object to be weakly referenceable, the extension type must set
the ‘Py_TPFLAGS_MANAGED_WEAKREF’ bit of the *note tp_flags: 19fd. field.
The legacy *note tp_weaklistoffset: 98f. field should be left as zero.

Concretely, here is how the statically declared type object would look:

     static PyTypeObject TrivialType = {
         PyVarObject_HEAD_INIT(NULL, 0)
         /* ... other members omitted for brevity ... */
         .tp_flags = Py_TPFLAGS_MANAGED_WEAKREF | ...,
     };

The only further addition is that ‘tp_dealloc’ needs to clear any weak
references (by calling *note PyObject_ClearWeakRefs(): 576.):

     static void
     Trivial_dealloc(TrivialObject *self)
     {
         /* Clear weakrefs first before calling any destructors */
         PyObject_ClearWeakRefs((PyObject *) self);
         /* ... remainder of destruction code omitted for brevity ... */
         Py_TYPE(self)->tp_free((PyObject *) self);
     }


File: python.info,  Node: More Suggestions,  Prev: Weak Reference Support,  Up: Defining Extension Types Assorted Topics

6.2.3.9 More Suggestions
........................

In order to learn how to implement any specific method for your new data
type, get the *note CPython: 6f6. source code.  Go to the ‘Objects’
directory, then search the C source files for ‘tp_’ plus the function
you want (for example, ‘tp_richcompare’).  You will find examples of the
function you want to implement.

When you need to verify that an object is a concrete instance of the
type you are implementing, use the *note PyObject_TypeCheck(): 1a41.
function.  A sample of its use might be something like the following:

     if (!PyObject_TypeCheck(some_object, &MyType)) {
         PyErr_SetString(PyExc_TypeError, "arg #1 not a mything");
         return NULL;
     }

Ver também
..........

Download CPython source releases.

     ‘https://www.python.org/downloads/source/’

The CPython project on GitHub, where the CPython source code is developed.

     ‘https://github.com/python/cpython’


File: python.info,  Node: Construindo extensões C e C++,  Next: Construindo Extensões C e C++ no Windows,  Prev: Defining Extension Types Assorted Topics,  Up: Criando extensões sem ferramentas de terceiros

6.2.4 Construindo extensões C e C++
-----------------------------------

Uma extensão C para CPython é uma biblioteca compartilhada (por exemplo,
um arquivo ‘.so’ no Linux, ‘.pyd’ no Windows), que exporta uma 'função
de inicialização'.

Para ser importável, a biblioteca compartilhada deve estar disponível em
*note PYTHONPATH: 1053, e deve ser nomeada após o nome do módulo, com
uma extensão apropriada.  Ao usar setuptools, o nome do arquivo correto
é gerado automaticamente.

A função de inicialização tem a assinatura:

 -- C Função: *note PyObject: 339. *PyInit_modulename (void)

Ela retorna um módulo totalmente inicializado ou uma instância de *note
PyModuleDef: 984.  Veja *note Inicializando módulos C: 4ba6. para
detalhes.

Para módulos com nomes com somente ASCII, a função deve ser nomeada
‘PyInit_<NOME>’, com ‘<nome>’ substituído pelo nome do módulo.  Ao usar
*note Inicialização multifásica: 4ba7, nomes de módulos não ASCII são
permitidos.  Neste caso, o nome da função de inicialização é
‘PyInitU_<NOME>’, com ‘<nome>’ codificado usando a codificação
'punycode' do Python com hífenes substituídos por sublinhados.  Em
Python:

     def nome_func_iniciadora(nome):
         try:
             sufixo = b'_' + nome.encode('ascii')
         except UnicodeEncodeError:
             sufixo = b'U_' + nome.encode('punycode').replace(b'-', b'_')
         return b'PyInit' + sufixo

É possível exportar vários módulos de uma única biblioteca
compartilhada, definindo várias funções de inicialização.  No entanto,
importá-los requer o uso de links simbólicos ou um importador
personalizado, porque por padrão apenas a função correspondente ao nome
do arquivo é encontrada.  Veja a seção '“Multiple modules in one
library”' na PEP 489(1) para detalhes.
* Menu:

* Construindo extensões C e C ++ com setuptools::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0489/


File: python.info,  Node: Construindo extensões C e C ++ com setuptools,  Up: Construindo extensões C e C++

6.2.4.1 Construindo extensões C e C ++ com setuptools
.....................................................

O Python 3.12 e mais recente não vêm mais com distutils.  Consulte a
documentação ‘setuptools’ em
‘https://setuptools.readthedocs.io/en/latest/setuptools.html’ para saber
mais sobre como construir e distribuir extensões C/C++ com setuptools.


File: python.info,  Node: Construindo Extensões C e C++ no Windows,  Prev: Construindo extensões C e C++,  Up: Criando extensões sem ferramentas de terceiros

6.2.5 Construindo Extensões C e C++ no Windows
----------------------------------------------

Este capítulo explica brevemente como criar um módulo de extensão do
Windows para Python usando o Microsoft Visual C++ e segue com
informações mais detalhadas sobre como ele funciona.  O material
explicativo é útil para o programador do Windows aprender a construir
extensões Python e o programador Unix interessado em produzir software
que possa ser construído com sucesso no Unix e no Windows.

Os autores de módulos são encorajados a usar a abordagem distutils para
construir módulos de extensão, em vez daquele descrito nesta seção.
Você ainda precisará do compilador C que foi usado para construir o
Python; normalmente o Microsoft Visual C++.

     Nota: Este capítulo menciona vários nomes de arquivos que incluem
     um número de versão do Python codificado.  Esses nomes de arquivos
     são representados com o número da versão mostrado como ‘XY’; na
     prática, ‘'X'’ será o número da versão principal e ‘'Y'’ será o
     número da versão secundária da versão do Python com a qual você
     está trabalhando.  Por exemplo, se você estiver usando o Python
     2.2.1, ‘XY’ será ‘22’.

* Menu:

* Uma abordagem de livro de receitas::
* Diferenças entre o Unix e o Windows::
* Usando DLLs na prática::


File: python.info,  Node: Uma abordagem de livro de receitas,  Next: Diferenças entre o Unix e o Windows,  Up: Construindo Extensões C e C++ no Windows

6.2.5.1 Uma abordagem de livro de receitas
..........................................

Existem duas abordagens para construir módulos de extensão no Windows,
assim como no Unix: use o pacote ‘setuptools’ para controlar o processo
de construção ou faça as coisas manualmente.  A abordagem setuptools
funciona bem para a maioria das extensões; documentação sobre o uso de
‘setuptools’ para construir e empacotar módulos de extensão está
disponível em *note Construindo extensões C e C ++ com setuptools: f29.
Se você achar que realmente precisa fazer as coisas manualmente, pode
ser instrutivo estudar o arquivo do projeto para o módulo de biblioteca
padrão winsound(1).

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/PCbuild/winsound.vcxproj


File: python.info,  Node: Diferenças entre o Unix e o Windows,  Next: Usando DLLs na prática,  Prev: Uma abordagem de livro de receitas,  Up: Construindo Extensões C e C++ no Windows

6.2.5.2 Diferenças entre o Unix e o Windows
...........................................

O Unix e o Windows usam paradigmas completamente diferentes para o
carregamento do código em tempo de execução.  Antes de tentar construir
um módulo que possa ser carregado dinamicamente, esteja ciente de como o
seu sistema funciona.

No Unix, um arquivo de objeto compartilhado (‘.so’) contém código a ser
usado pelo programa e também os nomes de funções e dados que ele espera
encontrar no programa.  Quando o arquivo é associado ao programa, todas
as referências a essas funções e dados no código do arquivo são
alteradas para apontar para os locais reais no programa em que as
funções e os dados são colocados na memória.  Isso é basicamente uma
operação de vinculação.

No Windows, um arquivo de biblioteca de vínculo dinâmico (‘.dll’) não
possui referências pendentes.  Em vez disso, um acesso a funções ou
dados passa por uma tabela de pesquisa.  Portanto, o código DLL não
precisa ser corrigido no tempo de execução para se referir à memória do
programa; em vez disso, o código já usa a tabela de pesquisa da DLL e a
tabela de pesquisa é modificada em tempo de execução para apontar para
as funções e dados.

No Unix, existe apenas um tipo de arquivo de biblioteca (‘.a’) que
contém código de vários arquivos de objetos (‘.o’).  Durante a etapa da
vinculação para criar um arquivo de objeto compartilhado (‘.so’), o
vinculador pode achar que não sabe onde um identificador está definido.
O vinculador procurará nos arquivos de objeto nas bibliotecas; se
encontrar, incluirá todo o código desse arquivo de objeto.

No Windows, existem dois tipos de biblioteca, uma biblioteca estática e
uma biblioteca de importação (ambas chamadas ‘.lib’).  Uma biblioteca
estática é como um arquivo Unix ‘.a’; contém código a ser incluído
conforme necessário.  Uma biblioteca de importação é basicamente usada
apenas para garantir ao vinculador que um determinado identificador é
legal e estará presente no programa quando a DLL for carregada.
Portanto, o vinculador usa as informações da biblioteca de importação
para construir a tabela de pesquisa para o uso de identificadores que
não estão incluídos na DLL. Quando uma aplicação ou uma DLL é vinculado,
pode ser gerada uma biblioteca de importação, que precisará ser usada
para todas as DLLs futuras que dependem dos símbolos na aplicação ou
DLL.

Suponha que você esteja construindo dois módulos de carregamento
dinâmico, B e C, que devem compartilhar outro bloco de código A. No
Unix, você 'não' passaria ‘A.a’ ao ligador para ‘B.so’ e ‘C.so’; isso
faria com que fosse incluído duas vezes, para que B e C tivessem sua
própria cópia.  No Windows, a construção ‘A.dll’ também construirá
‘A.lib’.  Você 'passa' ‘A.lib’ ao ligador para B e C. ‘A.lib’ não contém
código; apenas contém informações que serão usadas em tempo de execução
para acessar o código de A.

No Windows, usar uma biblioteca de importação é como usar ‘import spam’;
fornece acesso aos nomes de spam, mas não cria uma cópia separada.  No
Unix, vincular a uma biblioteca é mais como ‘from spam import *’; ele
cria uma cópia separada.


File: python.info,  Node: Usando DLLs na prática,  Prev: Diferenças entre o Unix e o Windows,  Up: Construindo Extensões C e C++ no Windows

6.2.5.3 Usando DLLs na prática
..............................

O Python para Windows é criado no Microsoft Visual C++; o uso de outros
compiladores pode ou não funcionar.  O restante desta seção é específico
do MSVC++.

Ao criar DLLs no Windows, você deve passar ‘pythonXY.lib’ para o
ligador.  Para construir duas DLLs, spam e ni (que usa funções C
encontradas em spam), você pode usar estes comandos:

     cl /LD /I/python/include spam.c ../libs/pythonXY.lib
     cl /LD /I/python/include ni.c spam.lib ../libs/pythonXY.lib

O primeiro comando criou três arquivos: ‘spam.obj’, ‘spam.dll’ e
‘spam.lib’.  O ‘spam.dll’ não contém nenhuma função Python (como *note
PyArg_ParseTuple(): 571.), mas sabe como encontrar o código Python
graças a ‘pythonXY.lib’.

O segundo comando criou ‘ni.dll’ (e ‘.obj’ e ‘.lib’), que sabe como
encontrar as funções necessárias do spam e também do executável do
Python.

Nem todo identificador é exportado para a tabela de pesquisa.  Se você
deseja que outros módulos (incluindo Python) possam ver seus
identificadores, é necessário dizer ‘_declspec(dllexport)’, como em
‘void _declspec(dllexport) initspam(void)’ ou ‘PyObject
_declspec(dllexport) *NiGetSpamData(void)’.

O Developer Studio incluirá muitas bibliotecas importadas que você
realmente não precisa, adicionando cerca de 100K ao seu executável.
Para se livrar delas, use a caixa de diálogo de configurações do
projeto, na aba vincular, para especificar 'ignorar bibliotecas padrão'.
Adicione o ‘msvcrt`xx'.lib’ correto à lista de bibliotecas.


File: python.info,  Node: Incorporando o tempo de execução do CPython em uma aplicação maior,  Prev: Criando extensões sem ferramentas de terceiros,  Up: Estendendo e incorporando o interpretador Python

6.3 Incorporando o tempo de execução do CPython em uma aplicação maior
======================================================================

Às vezes, em vez de criar uma extensão que é executada dentro do
interpretador Python como a aplicação principal, é desejável incorporar
o tempo de execução do CPython em uma aplicação maior.  Esta seção
aborda alguns dos detalhes envolvidos para fazer isso com êxito.

* Menu:

* Incorporando o Python numa Outra Aplicação::


File: python.info,  Node: Incorporando o Python numa Outra Aplicação,  Up: Incorporando o tempo de execução do CPython em uma aplicação maior

6.3.1 Incorporando o Python numa Outra Aplicação
------------------------------------------------

Os capítulos anteriores discutiram como estender o Python, ou seja, como
expandir a funcionalidade do Python anexando uma biblioteca de funções
em C a ele.  Também é possível fazer o inverso: enriquecer sua aplicação
em C/C++ incorporando o Python nela.  A incorporação fornece à sua
aplicação a capacidade de implementar parte da funcionalidade da
aplicação em Python em vez de C ou C++.  Isso pode ser usado para
diversos propósitos; um exemplo seria permitir que os usuários
personalizem a aplicação de acordo com suas necessidades escrevendo
alguns scripts em Python.  Você também pode usá-la se parte da
funcionalidade puder ser escrita em Python mais facilmente.

Incorporar o Python é semelhante a estendê-lo, mas não exatamente.  A
diferença é que, ao estender o Python, o programa principal da aplicação
ainda é o interpretador Python, enquanto que, se você incorporar o
Python, o programa principal pode não ter nada a ver com o Python — em
vez disso, algumas partes da aplicação chamam ocasionalmente o
interpretador Python para executar algum código Python.

So if you are embedding Python, you are providing your own main program.
One of the things this main program has to do is initialize the Python
interpreter.  At the very least, you have to call the function *note
Py_Initialize(): 8b1.  There are optional calls to pass command line
arguments to Python.  Then later you can call the interpreter from any
part of the application.

There are several different ways to call the interpreter: you can pass a
string containing Python statements to *note PyRun_SimpleString(): 4bb5,
or you can pass a stdio file pointer and a file name (for identification
in error messages only) to *note PyRun_SimpleFile(): 4bb6.  You can also
call the lower-level operations described in the previous chapters to
construct and use Python objects.

Ver também
..........

*note Manual de referência da API Python/C: 1d57.

     The details of Python’s C interface are given in this manual.  A
     great deal of necessary information can be found here.

* Menu:

* Very High Level Embedding::
* Beyond Very High Level Embedding; An overview: Beyond Very High Level Embedding An overview.
* Pure Embedding::
* Extending Embedded Python::
* Embedding Python in C++::
* Compiling and Linking under Unix-like systems::


File: python.info,  Node: Very High Level Embedding,  Next: Beyond Very High Level Embedding An overview,  Up: Incorporando o Python numa Outra Aplicação

6.3.1.1 Very High Level Embedding
.................................

The simplest form of embedding Python is the use of the very high level
interface.  This interface is intended to execute a Python script
without needing to interact with the application directly.  This can for
example be used to perform some operation on a file.

     #define PY_SSIZE_T_CLEAN
     #include <Python.h>

     int
     main(int argc, char *argv[])
     {
         PyStatus status;
         PyConfig config;
         PyConfig_InitPythonConfig(&config);

         /* optional but recommended */
         status = PyConfig_SetBytesString(&config, &config.program_name, argv[0]);
         if (PyStatus_Exception(status)) {
             goto exception;
         }

         status = Py_InitializeFromConfig(&config);
         if (PyStatus_Exception(status)) {
             goto exception;
         }
         PyConfig_Clear(&config);

         PyRun_SimpleString("from time import time,ctime\n"
                            "print('Today is', ctime(time()))\n");
         if (Py_FinalizeEx() < 0) {
             exit(120);
         }
         return 0;

       exception:
          PyConfig_Clear(&config);
          Py_ExitStatusException(status);
     }

     Nota: ‘#define PY_SSIZE_T_CLEAN’ was used to indicate that
     ‘Py_ssize_t’ should be used in some APIs instead of ‘int’.  It is
     not necessary since Python 3.13, but we keep it here for backward
     compatibility.  See *note Strings e buffers: 38b. for a description
     of this macro.

Setting *note PyConfig.program_name: 3c4. should be called before *note
Py_InitializeFromConfig(): 3c5. to inform the interpreter about paths to
Python run-time libraries.  Next, the Python interpreter is initialized
with *note Py_Initialize(): 8b1, followed by the execution of a
hard-coded Python script that prints the date and time.  Afterwards, the
*note Py_FinalizeEx(): d37. call shuts the interpreter down, followed by
the end of the program.  In a real program, you may want to get the
Python script from another source, perhaps a text-editor routine, a
file, or a database.  Getting the Python code from a file can better be
done by using the *note PyRun_SimpleFile(): 4bb6. function, which saves
you the trouble of allocating memory space and loading the file
contents.


File: python.info,  Node: Beyond Very High Level Embedding An overview,  Next: Pure Embedding,  Prev: Very High Level Embedding,  Up: Incorporando o Python numa Outra Aplicação

6.3.1.2 Beyond Very High Level Embedding: An overview
.....................................................

The high level interface gives you the ability to execute arbitrary
pieces of Python code from your application, but exchanging data values
is quite cumbersome to say the least.  If you want that, you should use
lower level calls.  At the cost of having to write more C code, you can
achieve almost anything.

It should be noted that extending Python and embedding Python is quite
the same activity, despite the different intent.  Most topics discussed
in the previous chapters are still valid.  To show this, consider what
the extension code from Python to C really does:

  1. Convert data values from Python to C,

  2. Perform a function call to a C routine using the converted values,
     and

  3. Convert the data values from the call from C to Python.

When embedding Python, the interface code does:

  1. Convert data values from C to Python,

  2. Perform a function call to a Python interface routine using the
     converted values, and

  3. Convert the data values from the call from Python to C.

As you can see, the data conversion steps are simply swapped to
accommodate the different direction of the cross-language transfer.  The
only difference is the routine that you call between both data
conversions.  When extending, you call a C routine, when embedding, you
call a Python routine.

This chapter will not discuss how to convert data from Python to C and
vice versa.  Also, proper use of references and dealing with errors is
assumed to be understood.  Since these aspects do not differ from
extending the interpreter, you can refer to earlier chapters for the
required information.


File: python.info,  Node: Pure Embedding,  Next: Extending Embedded Python,  Prev: Beyond Very High Level Embedding An overview,  Up: Incorporando o Python numa Outra Aplicação

6.3.1.3 Pure Embedding
......................

The first program aims to execute a function in a Python script.  Like
in the section about the very high level interface, the Python
interpreter does not directly interact with the application (but that
will change in the next section).

The code to run a function defined in a Python script is:

     #define PY_SSIZE_T_CLEAN
     #include <Python.h>

     int
     main(int argc, char *argv[])
     {
         PyObject *pName, *pModule, *pFunc;
         PyObject *pArgs, *pValue;
         int i;

         if (argc < 3) {
             fprintf(stderr,"Usage: call pythonfile funcname [args]\n");
             return 1;
         }

         Py_Initialize();
         pName = PyUnicode_DecodeFSDefault(argv[1]);
         /* Error checking of pName left out */

         pModule = PyImport_Import(pName);
         Py_DECREF(pName);

         if (pModule != NULL) {
             pFunc = PyObject_GetAttrString(pModule, argv[2]);
             /* pFunc is a new reference */

             if (pFunc && PyCallable_Check(pFunc)) {
                 pArgs = PyTuple_New(argc - 3);
                 for (i = 0; i < argc - 3; ++i) {
                     pValue = PyLong_FromLong(atoi(argv[i + 3]));
                     if (!pValue) {
                         Py_DECREF(pArgs);
                         Py_DECREF(pModule);
                         fprintf(stderr, "Cannot convert argument\n");
                         return 1;
                     }
                     /* pValue reference stolen here: */
                     PyTuple_SetItem(pArgs, i, pValue);
                 }
                 pValue = PyObject_CallObject(pFunc, pArgs);
                 Py_DECREF(pArgs);
                 if (pValue != NULL) {
                     printf("Result of call: %ld\n", PyLong_AsLong(pValue));
                     Py_DECREF(pValue);
                 }
                 else {
                     Py_DECREF(pFunc);
                     Py_DECREF(pModule);
                     PyErr_Print();
                     fprintf(stderr,"Call failed\n");
                     return 1;
                 }
             }
             else {
                 if (PyErr_Occurred())
                     PyErr_Print();
                 fprintf(stderr, "Cannot find function \"%s\"\n", argv[2]);
             }
             Py_XDECREF(pFunc);
             Py_DECREF(pModule);
         }
         else {
             PyErr_Print();
             fprintf(stderr, "Failed to load \"%s\"\n", argv[1]);
             return 1;
         }
         if (Py_FinalizeEx() < 0) {
             return 120;
         }
         return 0;
     }

This code loads a Python script using ‘argv[1]’, and calls the function
named in ‘argv[2]’.  Its integer arguments are the other values of the
‘argv’ array.  If you *note compile and link: 4bbd. this program (let’s
call the finished executable ‘call’), and use it to execute a Python
script, such as:

     def multiply(a,b):
         print("Will compute", a, "times", b)
         c = 0
         for i in range(0, a):
             c = c + b
         return c

then the result should be:

     $ call multiply multiply 3 2
     Will compute 3 times 2
     Result of call: 6

Although the program is quite large for its functionality, most of the
code is for data conversion between Python and C, and for error
reporting.  The interesting part with respect to embedding Python starts
with

     Py_Initialize();
     pName = PyUnicode_DecodeFSDefault(argv[1]);
     /* Error checking of pName left out */
     pModule = PyImport_Import(pName);

After initializing the interpreter, the script is loaded using *note
PyImport_Import(): 1443.  This routine needs a Python string as its
argument, which is constructed using the *note
PyUnicode_DecodeFSDefault(): 180a. data conversion routine.

     pFunc = PyObject_GetAttrString(pModule, argv[2]);
     /* pFunc is a new reference */

     if (pFunc && PyCallable_Check(pFunc)) {
         ...
     }
     Py_XDECREF(pFunc);

Once the script is loaded, the name we’re looking for is retrieved using
*note PyObject_GetAttrString(): 348.  If the name exists, and the object
returned is callable, you can safely assume that it is a function.  The
program then proceeds by constructing a tuple of arguments as normal.
The call to the Python function is then made with:

     pValue = PyObject_CallObject(pFunc, pArgs);

Upon return of the function, ‘pValue’ is either ‘NULL’ or it contains a
reference to the return value of the function.  Be sure to release the
reference after examining the value.


File: python.info,  Node: Extending Embedded Python,  Next: Embedding Python in C++,  Prev: Pure Embedding,  Up: Incorporando o Python numa Outra Aplicação

6.3.1.4 Extending Embedded Python
.................................

Until now, the embedded Python interpreter had no access to
functionality from the application itself.  The Python API allows this
by extending the embedded interpreter.  That is, the embedded
interpreter gets extended with routines provided by the application.
While it sounds complex, it is not so bad.  Simply forget for a while
that the application starts the Python interpreter.  Instead, consider
the application to be a set of subroutines, and write some glue code
that gives Python access to those routines, just like you would write a
normal Python extension.  For example:

     static int numargs=0;

     /* Return the number of arguments of the application command line */
     static PyObject*
     emb_numargs(PyObject *self, PyObject *args)
     {
         if(!PyArg_ParseTuple(args, ":numargs"))
             return NULL;
         return PyLong_FromLong(numargs);
     }

     static PyMethodDef emb_module_methods[] = {
         {"numargs", emb_numargs, METH_VARARGS,
          "Return the number of arguments received by the process."},
         {NULL, NULL, 0, NULL}
     };

     static struct PyModuleDef emb_module = {
         .m_base = PyModuleDef_HEAD_INIT,
         .m_name = "emb",
         .m_size = 0,
         .m_methods = emb_module_methods,
     };

     static PyObject*
     PyInit_emb(void)
     {
         return PyModuleDef_Init(&emb_module);
     }

Insert the above code just above the ‘main()’ function.  Also, insert
the following two statements before the call to *note Py_Initialize():
8b1.:

     numargs = argc;
     PyImport_AppendInittab("emb", &PyInit_emb);

These two lines initialize the ‘numargs’ variable, and make the
‘emb.numargs()’ function accessible to the embedded Python interpreter.
With these extensions, the Python script can do things like

     import emb
     print("Number of arguments", emb.numargs())

Em uma aplicação real, os métodos exporão uma API da aplicação para
Python.


File: python.info,  Node: Embedding Python in C++,  Next: Compiling and Linking under Unix-like systems,  Prev: Extending Embedded Python,  Up: Incorporando o Python numa Outra Aplicação

6.3.1.5 Embedding Python in C++
...............................

It is also possible to embed Python in a C++ program; precisely how this
is done will depend on the details of the C++ system used; in general
you will need to write the main program in C++, and use the C++ compiler
to compile and link your program.  There is no need to recompile Python
itself using C++.


File: python.info,  Node: Compiling and Linking under Unix-like systems,  Prev: Embedding Python in C++,  Up: Incorporando o Python numa Outra Aplicação

6.3.1.6 Compiling and Linking under Unix-like systems
.....................................................

It is not necessarily trivial to find the right flags to pass to your
compiler (and linker) in order to embed the Python interpreter into your
application, particularly because Python needs to load library modules
implemented as C dynamic extensions (‘.so’ files) linked against it.

To find out the required compiler and linker flags, you can execute the
‘python`X.Y'-config’ script which is generated as part of the
installation process (a ‘python3-config’ script may also be available).
This script has several options, of which the following will be directly
useful to you:

   * ‘pythonX.Y-config --cflags’ will give you the recommended flags
     when compiling:

          $ /opt/bin/python3.11-config --cflags
          -I/opt/include/python3.11 -I/opt/include/python3.11 -Wsign-compare  -DNDEBUG -g -fwrapv -O3 -Wall

   * ‘pythonX.Y-config --ldflags --embed’ will give you the recommended
     flags when linking:

          $ /opt/bin/python3.11-config --ldflags --embed
          -L/opt/lib/python3.11/config-3.11-x86_64-linux-gnu -L/opt/lib -lpython3.11 -lpthread -ldl  -lutil -lm

     Nota: To avoid confusion between several Python installations (and
     especially between the system Python and your own compiled Python),
     it is recommended that you use the absolute path to
     ‘python`X.Y'-config’, as in the above example.

If this procedure doesn’t work for you (it is not guaranteed to work for
all Unix-like platforms; however, we welcome *note bug reports: 4bc3.)
you will have to read your system’s documentation about dynamic linking
and/or examine Python’s ‘Makefile’ (use *note
sysconfig.get_makefile_filename(): 4617. to find its location) and
compilation options.  In this case, the *note sysconfig: db. module is a
useful tool to programmatically extract the configuration values that
you will want to combine together.  For example:

     >>> import sysconfig
     >>> sysconfig.get_config_var('LIBS')
     '-lpthread -ldl  -lutil'
     >>> sysconfig.get_config_var('LINKFORSHARED')
     '-Xlinker -export-dynamic'


File: python.info,  Node: Manual de referência da API Python/C,  Next: Instalando módulos Python,  Prev: Estendendo e incorporando o interpretador Python,  Up: Top

7 Manual de referência da API Python/C
**************************************

Este manual documenta a API usada por programadores C e C++ que desejam
escrever módulos de extensões ou embutir Python.  É um complemento para
*note Estendendo e incorporando o interpretador Python: 1d56, que
descreve os princípios gerais da escrita de extensões mas não documenta
as funções da API em detalhes.

* Menu:

* Introdução: Introdução<13>.
* Estabilidade da API C::
* A camada de nível muito alto::
* Contagem de referências::
* Tratamento de exceções: Tratamento de exceções<2>.
* Utilitários: Utilitários<2>.
* Camada de Objetos Abstratos::
* Camada de Objetos Concretos::
* Inicialização, finalização e threads: Inicialização finalização e threads.
* Configuração de inicialização do Python::
* Gerenciamento de Memória::
* Suporte a implementação de Objetos::
* API e Versionamento de ABI::
* API C de monitoramento::
* Gerando eventos de execução::


File: python.info,  Node: Introdução<13>,  Next: Estabilidade da API C,  Up: Manual de referência da API Python/C

7.1 Introdução
==============

A Interface de Programação de Aplicações (API) para Python fornece aos
programadores C e C++ acesso ao interpretador Python em uma variedade de
níveis.  A API pode ser usada igualmente em C++, mas, para abreviar,
geralmente é chamada de API Python/C. Existem dois motivos
fundamentalmente diferentes para usar a API Python/C. A primeira razão é
escrever 'módulos de extensão' para propósitos específicos; esses são
módulos C que estendem o interpretador Python.  Este é provavelmente o
uso mais comum.  O segundo motivo é usar Python como um componente em
uma aplicação maior; esta técnica é geralmente referida como
'incorporação' Python em uma aplicação.

Escrever um módulo de extensão é um processo relativamente bem
compreendido, no qual uma abordagem de “livro de receitas” funciona bem.
Existem várias ferramentas que automatizam o processo até certo ponto.
Embora as pessoas tenham incorporado o Python em outras aplicações desde
sua existência inicial, o processo de incorporação do Python é menos
direto do que escrever uma extensão.

Muitas funções da API são úteis independentemente de você estar
incorporando ou estendendo o Python; além disso, a maioria das
aplicações que incorporam Python também precisará fornecer uma extensão
customizada, portanto, é provavelmente uma boa ideia se familiarizar com
a escrita de uma extensão antes de tentar incorporar Python em uma
aplicação real.

* Menu:

* Padrões de codificação::
* Arquivos de inclusão::
* Macros úteis::
* Objetos, tipos e contagens de referências: Objetos tipos e contagens de referências.
* Exceções: Exceções<21>.
* Incorporando Python: Incorporando Python<2>.
* Compilações de depuração::
* Ferramentas de terceiros recomendadas: Ferramentas de terceiros recomendadas<2>.


File: python.info,  Node: Padrões de codificação,  Next: Arquivos de inclusão,  Up: Introdução<13>

7.1.1 Padrões de codificação
----------------------------

Se você estiver escrevendo código C para inclusão no CPython, 'deve'
seguir as diretrizes e padrões definidos na PEP 7(1).  Essas diretrizes
se aplicam independentemente da versão do Python com a qual você está
contribuindo.  Seguir essas convenções não é necessário para seus
próprios módulos de extensão de terceiros, a menos que você
eventualmente espere contribuí-los para o Python.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0007/


File: python.info,  Node: Arquivos de inclusão,  Next: Macros úteis,  Prev: Padrões de codificação,  Up: Introdução<13>

7.1.2 Arquivos de inclusão
--------------------------

Todas as definições de função, tipo e macro necessárias para usar a API
Python/C estão incluídas em seu código pela seguinte linha:

     #define PY_SSIZE_T_CLEAN
     #include <Python.h>

Isso implica a inclusão dos seguintes cabeçalhos padrão: ‘<stdio.h>’,
‘<string.h>’, ‘<errno.h>’, ‘<limits.h>’, ‘<assert.h>’ e ‘<stdlib.h>’ (se
disponível).

     Nota: Uma vez que Python pode definir algumas definições de
     pré-processador que afetam os cabeçalhos padrão em alguns sistemas,
     você 'deve' incluir ‘Python.h’ antes de quaisquer cabeçalhos padrão
     serem incluídos.

     É recomendável sempre definir ‘PY_SSIZE_T_CLEAN’ antes de incluir
     ‘Python.h’.  Veja *note Análise de argumentos e construção de
     valores: 8ad. para uma descrição desta macro.

Todos os nomes visíveis ao usuário definidos por Python.h (exceto
aqueles definidos pelos cabeçalhos padrão incluídos) têm um dos prefixos
‘Py’ ou ‘_Py’.  Nomes começando com ‘_Py’ são para uso interno pela
implementação Python e não devem ser usados por escritores de extensão.
Os nomes dos membros da estrutura não têm um prefixo reservado.

     Nota: O código do usuário nunca deve definir nomes que começam com
     ‘Py’ ou ‘_Py’.  Isso confunde o leitor e coloca em risco a
     portabilidade do código do usuário para versões futuras do Python,
     que podem definir nomes adicionais começando com um desses
     prefixos.

Os arquivos de cabeçalho são normalmente instalados com Python.  No
Unix, eles estão localizados nos diretórios
‘`prefix'/include/pythonversion/’ e
‘`exec_prefix'/include/pythonversion/’, onde *note prefix: 1ee7. e *note
exec_prefix: 1ee8. são definidos pelos parâmetros correspondentes ao
script ‘configure’ e 'version' do Python é ‘'%d.%d' %
sys.version_info[:2]’.  No Windows, os cabeçalhos são instalados em
‘`prefix'/include’, onde ‘prefix’ é o diretório de instalação
especificado para o instalador.

Para incluir os cabeçalhos, coloque os dois diretórios (se diferentes)
no caminho de pesquisa do compilador para as inclusões.  'Não' coloque
os diretórios pais no caminho de busca e então use ‘#include
<pythonX.Y/Python.h>’; isto irá quebrar em compilações multiplataforma,
uma vez que os cabeçalhos independentes da plataforma em *note prefix:
1ee7. incluem os cabeçalhos específicos da plataforma de *note
exec_prefix: 1ee8.

Os usuários de C++ devem notar que embora a API seja definida
inteiramente usando C, os arquivos de cabeçalho declaram apropriadamente
os pontos de entrada como ‘extern "C"’.  Como resultado, não há
necessidade de fazer nada especial para usar a API do C++.


File: python.info,  Node: Macros úteis,  Next: Objetos tipos e contagens de referências,  Prev: Arquivos de inclusão,  Up: Introdução<13>

7.1.3 Macros úteis
------------------

Diversas macros úteis são definidas nos arquivos de cabeçalho do Python.
Muitas são definidas mais próximas de onde são úteis (por exemplo, *note
Py_RETURN_NONE: 14bb.).  Outras de utilidade mais geral são definidas
aqui.  Esta não é necessariamente uma lista completa.

 -- C Macro: PyMODINIT_FUNC

     Declara uma função de inicialização do módulo de extensão ‘PyInit’.
     O tipo de retorno da função é *note PyObject: 339.*.  A macro
     declara quaisquer declarações de ligação especial necessárias pela
     plataforma e, para C++, declara a função como ‘extern "C"’.

     A função de inicialização deve ser nomeada ‘PyInit_NAME’, onde
     'name' é o nome do módulo, e deve ser o único item não-‘static’
     definido no arquivo do módulo.  Exemplo:

          static struct PyModuleDef spam_module = {
              .m_base = PyModuleDef_HEAD_INIT,
              .m_name = "spam",
              ...
          };

          PyMODINIT_FUNC
          PyInit_spam(void)
          {
              return PyModuleDef_Init(&spam_module);
          }

 -- C Macro: Py_ABS (x)

     Retorna o valor absoluto de ‘x’.

     Se o resultado não puder ser representado (por exemplo, se ‘x’
     tiver o valor ‘INT_MIN’ para o tipo int), o comportamento é
     indefinido.

     Adicionado na versão 3.3.

 -- C Macro: Py_ALWAYS_INLINE

     Pede ao compilador para sempre embutir uma função em linha
     estática.  O compilador pode ignorá-lo e decide não inserir a
     função.

     Ele pode ser usado para inserir funções em linha estáticas críticas
     de desempenho ao compilar Python no modo de depuração com função de
     inserir em linha desabilitada.  Por exemplo, o MSC desabilita a
     função de inserir em linha ao compilar no modo de depuração.

     Marcar cegamente uma função em linha estática com Py_ALWAYS_INLINE
     pode resultar em desempenhos piores (devido ao aumento do tamanho
     do código, por exemplo).  O compilador geralmente é mais
     inteligente que o desenvolvedor para a análise de custo/benefício.

     Se o Python tiver sido *note compilado em modo de depuração: 1f9.
     (se a macro *note Py_DEBUG: 4359. estiver definida), a macro *note
     Py_ALWAYS_INLINE: 19f6. não fará nada.

     Deve ser especificado antes do tipo de retorno da função.  Uso:

          static inline Py_ALWAYS_INLINE int random(void) { return 4; }

     Adicionado na versão 3.11.

 -- C Macro: Py_CHARMASK (c)

     O argumento deve ser um caractere ou um número inteiro no intervalo
     [-128, 127] ou [0, 255].  Esta macro retorna ‘c’ convertido em um
     ‘unsigned char’.

 -- C Macro: Py_DEPRECATED (version)

     Use isso para declarações descontinuadas.  A macro deve ser
     colocada antes do nome do símbolo.

     Exemplo:

          Py_DEPRECATED(3.8) PyAPI_FUNC(int) Py_OldFunction(void);

     Alterado na versão 3.8: Suporte a MSVC foi adicionado.

 -- C Macro: Py_GETENV (s)

     Como ‘getenv(s)’, mas retorna ‘NULL’ se a opção *note -E: 964. foi
     passada na linha de comando (veja *note PyConfig.use_environment:
     3d9.).

 -- C Macro: Py_LOCAL (type)

     Declara uma função que retorne o 'type' especificado usando um
     qualificador de chamada rápida para funções locais ao arquivo
     atual.  Semanticamente, isso equivale a ‘static type’.

 -- C Macro: Py_LOCAL_INLINE (type)

     Equivalente a *note Py_LOCAL: 1492, mas que também exige que a
     função seja inserida localmente.

 -- C Macro: Py_LOCAL_SYMBOL

     Macro used to declare a symbol as local to the shared library
     (hidden).  On supported platforms, it ensures the symbol is not
     exported.

     On compatible versions of GCC/Clang, it expands to
     ‘__attribute__((visibility("hidden")))’.

 -- C Macro: Py_MAX (x, y)

     Retorna o valor máximo entre ‘x’ e ‘y’.

     Adicionado na versão 3.3.

 -- C Macro: Py_MEMBER_SIZE (type, member)

     Retorna o tamanho do ‘member’ de uma estrutura (‘type’) em bytes.

     Adicionado na versão 3.6.

 -- C Macro: Py_MIN (x, y)

     Retorna o valor mínimo entre ‘x’ e ‘y’.

     Adicionado na versão 3.3.

 -- C Macro: Py_NO_INLINE

     Desabilita a inserção em linha em uma função.  Por exemplo, isso
     reduz o consumo da pilha C: útil em compilações LTO+PGO que faz uso
     intenso de inserção em linha de código (veja bpo-33720(1)).

     Uso:

          Py_NO_INLINE static int random(void) { return 4; }

     Adicionado na versão 3.11.

 -- C Macro: Py_STRINGIFY (x)

     Converte ‘x’ para uma string C. Por exemplo, ‘Py_STRINGIFY(123)’
     retorna ‘"123"’.

     Adicionado na versão 3.4.

 -- C Macro: Py_UNREACHABLE ()

     Use isso quando você tiver um caminho de código que não pode ser
     alcançado por design.  Por exemplo, na cláusula ‘default:’ em uma
     instrução ‘switch’ para a qual todos os valores possíveis são
     incluídos nas instruções ‘case’.  Use isto em lugares onde você
     pode ficar tentado a colocar uma chamada ‘assert(0)’ ou ‘abort()’.

     No modo de lançamento, a macro ajuda o compilador a otimizar o
     código e evita um aviso sobre código inacessível.  Por exemplo, a
     macro é implementada com ‘__builtin_unreachable()’ no GCC em modo
     de lançamento.

     Um uso para ‘Py_UNREACHABLE()’ é seguir uma chamada de uma função
     que nunca retorna, mas que não é declarada com ‘_Py_NO_RETURN’.

     Se um caminho de código for um código muito improvável, mas puder
     ser alcançado em casos excepcionais, esta macro não deve ser usada.
     Por exemplo, sob condição de pouca memória ou se uma chamada de
     sistema retornar um valor fora do intervalo esperado.  Nesse caso,
     é melhor relatar o erro ao chamador.  Se o erro não puder ser
     reportado ao chamador, *note Py_FatalError(): 98a. pode ser usada.

     Adicionado na versão 3.7.

 -- C Macro: Py_UNUSED (arg)

     Use isso para argumentos não usados em uma definição de função para
     silenciar avisos do compilador.  Exemplo: ‘int func(int a, int
     Py_UNUSED(b)) { return a; }’.

     Adicionado na versão 3.4.

 -- C Macro: Py_BUILD_ASSERT (cond)

     Realiza asserção de uma condição de tempo de compilação 'cond',
     como uma instrução.  A construção falhará se a condição for falsa
     ou não puder ser avaliada em tempo de compilação.

     Por exemplo:

          Py_BUILD_ASSERT(sizeof(PyTime_t) == sizeof(int64_t));

     Adicionado na versão 3.3.

 -- C Macro: Py_BUILD_ASSERT_EXPR (cond)

     Realiza asserção de uma condição de tempo de compilação 'cond',
     como uma expressão que é avaliada com ‘0’.  A construção falhará se
     a condição for falsa ou não puder ser avaliada em tempo de
     compilação.

     Por exemplo:

          #define foo_to_char(foo) \
              ((char *)(foo) + Py_BUILD_ASSERT_EXPR(offsetof(struct foo, string) == 0))

     Adicionado na versão 3.3.

 -- C Macro: PyDoc_STRVAR (name, str)

     Cria uma variável com o nome 'name' que pode ser usada em
     docstrings.  Se o Python for construído sem docstrings, o valor
     estará vazio.

     Use *note PyDoc_STRVAR: 1aea. para docstrings para ter suporte à
     compilação do Python sem docstrings, conforme especificado em PEP
     7(2).

     Exemplo:

          PyDoc_STRVAR(pop_doc, "Remove e retorna o elemento mais à direita.");

          static PyMethodDef deque_methods[] = {
              // ...
              {"pop", (PyCFunction)deque_pop, METH_NOARGS, pop_doc},
              // ...
          }

 -- C Macro: PyDoc_STR (str)

     Cria uma docstring para a string de entrada fornecida ou uma string
     vazia se docstrings estiverem desabilitadas.

     Use *note PyDoc_STR: 1921. ao especificar docstrings para ter
     suporte à compilação do Python sem docstrings, conforme
     especificado em PEP 7(3).

     Exemplo:

          static PyMethodDef pysqlite_row_methods[] = {
              {"keys", (PyCFunction)pysqlite_row_keys, METH_NOARGS,
                  PyDoc_STR("Retorna as chaves da linha.")},
              {NULL, NULL}
          };

 -- C Macro: PyDoc_VAR (name)

     Declara uma variável estática de vetor de caracteres com o nome
     fornecido 'name'.

     Por exemplo:

          PyDoc_VAR(python_doc) = PyDoc_STR("A genus of constricting snakes in the Pythonidae family native "
                                            "to the tropics and subtropics of the Eastern Hemisphere.");

 -- C Macro: Py_ARRAY_LENGTH (array)

     Calcula o comprimento de um vetor C alocado estaticamente em tempo
     de compilação.

     O argumento 'array' deve ser um vetor C com tamanho conhecido em
     tempo de compilação.  Passar um vetor com tamanho desconhecido,
     como um vetor alocado na heap, resultará em um erro de compilação
     em alguns compiladores ou produzirá resultados incorretos.

     Isso é aproximadamente equivalente a:

          sizeof(array) / sizeof((array)[0])

 -- C Macro: Py_EXPORTED_SYMBOL

     Macro used to declare a symbol (function or data) as exported.  On
     Windows, this expands to ‘__declspec(dllexport)’.  On compatible
     versions of GCC/Clang, it expands to
     ‘__attribute__((visibility("default")))’.  This macro is for
     defining the C API itself; extension modules should not use it.

 -- C Macro: Py_IMPORTED_SYMBOL

     Macro used to declare a symbol as imported.  On Windows, this
     expands to ‘__declspec(dllimport)’.  This macro is for defining the
     C API itself; extension modules should not use it.

 -- C Macro: PyAPI_FUNC (type)

     Macro used by CPython to declare a function as part of the C API.
     Its expansion depends on the platform and build configuration.
     This macro is intended for defining CPython’s C API itself;
     extension modules should not use it for their own symbols.

 -- C Macro: PyAPI_DATA (type)

     Macro used by CPython to declare a public global variable as part
     of the C API. Its expansion depends on the platform and build
     configuration.  This macro is intended for defining CPython’s C API
     itself; extension modules should not use it for their own symbols.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=33720

   (2) https://peps.python.org/pep-0007/

   (3) https://peps.python.org/pep-0007/


File: python.info,  Node: Objetos tipos e contagens de referências,  Next: Exceções<21>,  Prev: Macros úteis,  Up: Introdução<13>

7.1.4 Objetos, tipos e contagens de referências
-----------------------------------------------

A maioria das funções da API Python/C tem um ou mais argumentos, bem
como um valor de retorno do tipo *note PyObject: 339.*.  Este tipo é um
ponteiro para um tipo de dados opaco que representa um objeto Python
arbitrário.  Como todos os tipos de objeto Python são tratados da mesma
maneira pela linguagem Python na maioria das situações (por exemplo,
atribuições, regras de escopo e passagem de argumento), é adequado que
eles sejam representados por um único tipo C. Quase todos os objetos
Python vivem na pilha: você nunca declara uma variável automática ou
estática do tipo *note PyObject: 339, variáveis de apenas ponteiro do
tipo *note PyObject: 339.* podem ser declaradas.  A única exceção são os
objetos de tipo; uma vez que estes nunca devem ser desalocados, eles são
normalmente objetos estáticos *note PyTypeObject: ab4.

Todos os objetos Python (mesmo inteiros Python) têm um 'tipo' e uma
'contagem de referências'.  O tipo de um objeto determina que tipo de
objeto ele é (por exemplo, um número inteiro, uma lista ou uma função
definida pelo usuário; existem muitos mais, conforme explicado em *note
A hierarquia de tipos padrão: 2075.).  Para cada um dos tipos
conhecidos, há uma macro para verificar se um objeto é desse tipo; por
exemplo, ‘PyList_Check(a)’ é verdadeiro se (e somente se) o objeto
apontado por 'a' for uma lista Python.

* Menu:

* Contagens de referências: Contagens de referências<2>.
* Tipos::


File: python.info,  Node: Contagens de referências<2>,  Next: Tipos,  Up: Objetos tipos e contagens de referências

7.1.4.1 Contagens de referências
................................

A contagem de referências é importante porque os computadores atuais têm
um tamanho de memória finito (e frequentemente severamente limitado);
ela conta quantos lugares diferentes existem que possuem uma *note
referência forte: 33d. a um objeto.  Tal lugar pode ser outro objeto, ou
uma variável C global (ou estática), ou uma variável local em alguma
função C. Quando a última *note referência forte: 33d. a um objeto é
liberada (ou seja, sua contagem de referências se torna zero), o objeto
é desalocado.  Se ele contiver referências a outros objetos, essas
referências são liberadas.  Esses outros objetos podem ser desalocados
por sua vez, se não houver mais referências a eles, e assim por diante.
(Há um problema óbvio com objetos que referenciam uns aos outros aqui;
por enquanto, a solução é “não faça isso”.)

Contagens de referências são sempre manipuladas explicitamente.  A
maneira normal é usar a macro *note Py_INCREF(): 56e. para obter uma
nova referência a um objeto (ou seja, incrementar sua contagem de
referências em um), e *note Py_DECREF(): 56f. para liberar essa
referência (ou seja, decrementar a contagem de referências em um).  A
macro *note Py_DECREF(): 56f. é consideravelmente mais complexa do que a
incref, pois deve verificar se a contagem de referências se torna zero
e, em seguida, fazer com que o desalocador do objeto seja chamado.  O
desalocador é um ponteiro para função contido na estrutura de tipo do
objeto.  O desalocador específico do tipo cuida da liberação de
referências para outros objetos contidos no objeto se este for um tipo
de objeto composto, como uma lista, bem como de executar qualquer
finalização adicional necessária.  Não há chance de a contagem de
referências transbordar; pelo menos tantos bits são usados para
armazenar a contagem de referência quantos forem os locais de memória
distintos na memória virtual (presumindo ‘sizeof(Py_ssize_t) >=
sizeof(void*)’).  Portanto, o incremento da contagem de referências é
uma operação simples.

Não é necessário manter uma *note referência forte: 33d. (ou seja,
incrementar a contagem de referências) para cada variável local que
contém um ponteiro para um objeto.  Em teoria, a contagem de referências
do objeto aumenta em um quando a variável é feita para apontar para ele
e diminui em um quando a variável sai do escopo.  No entanto, esses dois
se cancelam, portanto, no final, a contagem de referências não mudou.  A
única razão real para usar a contagem de referências é evitar que o
objeto seja desalocado enquanto nossa variável estiver apontando para
ele.  Se sabemos que existe pelo menos uma outra referência ao objeto
que vive pelo menos tanto quanto nossa variável, não há necessidade de
tomar uma nova *note referência forte: 33d. (ou seja, incrementar a
contagem de referências) temporariamente.  Uma situação importante em
que isso ocorre é em objetos que são passados como argumentos para
funções C em um módulo de extensão que são chamados de Python; o
mecanismo de chamada garante manter uma referência a todos os argumentos
durante a chamada.

No entanto, uma armadilha comum é extrair um objeto de uma lista e
mantê-lo por um tempo, sem tomar uma nova referência.  Alguma outra
operação poderia remover o objeto da lista, liberando essa referência e
possivelmente desalocando-o.  O perigo real é que operações
aparentemente inocentes podem invocar código Python arbitrário que
poderia fazer isso; existe um caminho de código que permite que o
controle flua de volta para o usuário a partir de um *note Py_DECREF():
56f, então quase qualquer operação é potencialmente perigosa.

Uma abordagem segura é sempre usar as operações genéricas (funções cujo
nome começa com ‘PyObject_’, ‘PyNumber_’, ‘PySequence_’ ou
‘PyMapping_’).  Essas operações sempre criam uma nova *note referência
forte: 33d. (ou seja, incrementam a contagem de referências) do objeto
que retornam.  Isso deixa o chamador com a responsabilidade de chamar
*note Py_DECREF(): 56f. quando terminar com o resultado; isso logo se
torna uma segunda natureza.

* Menu:

* Detalhes da contagem de referências::


File: python.info,  Node: Detalhes da contagem de referências,  Up: Contagens de referências<2>

7.1.4.2 Detalhes da contagem de referências
...........................................

O comportamento da contagem de referências de funções na API C/Python é
melhor explicado em termos de 'propriedade de referências'.  A
propriedade pertence às referências, nunca aos objetos (os objetos não
são possuídos: eles são sempre compartilhados).  “Possuir uma
referência” significa ser responsável por chamar Py_DECREF nela quando a
referência não for mais necessária.  A propriedade também pode ser
transferida, o que significa que o código que recebe a propriedade da
referência torna-se responsável por eventualmente efetuar um liberando
ela chamando *note Py_DECREF(): 56f. ou *note Py_XDECREF(): 78f. quando
não é mais necessário – ou passando essa responsabilidade (geralmente
para o responsável pela chamada).  Quando uma função passa a propriedade
de uma referência para seu chamador, diz-se que o chamador recebe uma
'nova' referência.  Quando nenhuma propriedade é transferida, diz-se que
o chamador 'toma emprestado' a referência.  Nada precisa ser feito para
uma *note referência emprestada: 33e.

Por outro lado, quando uma função de chamada passa uma referência a um
objeto, há duas possibilidades: a função 'rouba' uma referência ao
objeto, ou não.  'Roubar uma referência' significa que quando você passa
uma referência para uma função, essa função presume que agora ela possui
essa referência e você não é mais responsável por ela.

Poucas funções roubam referências; as duas exceções notáveis são *note
PyList_SetItem(): 165e. e *note PyTuple_SetItem(): 4b62, que roubam uma
referência para o item (mas não para a tupla ou lista na qual o item é
colocado!).  Essas funções foram projetadas para roubar uma referência
devido a um idioma comum para preencher uma tupla ou lista com objetos
recém-criados; por exemplo, o código para criar a tupla ‘(1, 2,
"three")’ pode ser parecido com isto (esquecendo o tratamento de erros
por enquanto; uma maneira melhor de codificar isso é mostrada abaixo):

     PyObject *t;

     t = PyTuple_New(3);
     PyTuple_SetItem(t, 0, PyLong_FromLong(1L));
     PyTuple_SetItem(t, 1, PyLong_FromLong(2L));
     PyTuple_SetItem(t, 2, PyUnicode_FromString("três"));

Aqui, *note PyLong_FromLong(): 195a. retorna uma nova referência que é
imediatamente roubada por *note PyTuple_SetItem(): 4b62.  Quando você
quiser continuar usando um objeto, embora a referência a ele seja
roubada, use *note Py_INCREF(): 56e. para obter outra referência antes
de chamar a função de roubo de referência.

A propósito, *note PyTuple_SetItem(): 4b62. é a 'única' maneira de
definir itens de tupla; *note PySequence_SetItem(): 1bce. e *note
PyObject_SetItem(): 4be0. se recusam a fazer isso, pois tuplas são um
tipo de dados imutável.  Você só deve usar *note PyTuple_SetItem():
4b62. para tuplas que você mesmo está criando.

O código equivalente para preencher uma lista pode ser escrita usando
*note PyList_New(): 4be1. e *note PyList_SetItem(): 165e.

No entanto, na prática, você raramente usará essas maneiras de criar e
preencher uma tupla ou lista.  Existe uma função genérica, *note
Py_BuildValue(): 8ac, que pode criar objetos mais comuns a partir de
valores C, dirigidos por uma 'string de formato'.  Por exemplo, os dois
blocos de código acima podem ser substituídos pelos seguintes (que
também cuidam da verificação de erros):

     PyObject *tuple, *list;

     tuple = Py_BuildValue("(iis)", 1, 2, "três");
     list = Py_BuildValue("[iis]", 1, 2, "três");

É muito mais comum usar *note PyObject_SetItem(): 4be0. e amigos com
itens cujas referências você está apenas pegando emprestado, como
argumentos que foram passados para a função que você está escrevendo.
Nesse caso, o comportamento deles em relação às referências é muito mais
são, já que você não precisa tomar uma nova referência só para poder
doá-la (“mande-a ser roubada”).  Por exemplo, esta função define todos
os itens de uma lista (na verdade, qualquer sequência mutável) para um
determinado item:

     int
     set_all(PyObject *target, PyObject *item)
     {
         Py_ssize_t i, n;

         n = PyObject_Length(target);
         if (n < 0)
             return -1;
         for (i = 0; i < n; i++) {
             PyObject *index = PyLong_FromSsize_t(i);
             if (!index)
                 return -1;
             if (PyObject_SetItem(target, index, item) < 0) {
                 Py_DECREF(index);
                 return -1;
             }
             Py_DECREF(index);
         }
         return 0;
     }

A situação é ligeiramente diferente para os valores de retorno da
função.  Embora passar uma referência para a maioria das funções não
altere suas responsabilidades de propriedade para aquela referência,
muitas funções que retornam uma referência a um objeto fornecem a
propriedade da referência.  O motivo é simples: em muitos casos, o
objeto retornado é criado instantaneamente e a referência que você obtém
é a única referência ao objeto.  Portanto, as funções genéricas que
retornam referências a objetos, como *note PyObject_GetItem(): 4be2. e
*note PySequence_GetItem(): 1bcd, sempre retornam uma nova referência (o
chamador torna-se o dono da referência).

É importante perceber que se você possui uma referência retornada por
uma função depende de qual função você chama apenas — 'a plumagem' (o
tipo do objeto passado como um argumento para a função) 'não entra
nela!'  Assim, se você extrair um item de uma lista usando *note
PyList_GetItem(): 35a, você não possui a referência — mas se obtiver o
mesmo item da mesma lista usando *note PySequence_GetItem(): 1bcd. (que
leva exatamente os mesmos argumentos), você possui uma referência ao
objeto retornado.

Aqui está um exemplo de como você poderia escrever uma função que
calcula a soma dos itens em uma lista de inteiros; uma vez usando *note
PyList_GetItem(): 35a, e uma vez usando *note PySequence_GetItem():
1bcd.

     long
     sum_list(PyObject *list)
     {
         Py_ssize_t i, n;
         long total = 0, value;
         PyObject *item;

         n = PyList_Size(list);
         if (n < 0)
             return -1; /* Não é uma lista */
         for (i = 0; i < n; i++) {
             item = PyList_GetItem(list, i); /* Não pode falhar */
             if (!PyLong_Check(item)) continue; /* Ignora não-inteiros */
             value = PyLong_AsLong(item);
             if (value == -1 && PyErr_Occurred())
                 /* Inteiro muito grande para caber em um C longo, sai */
                 return -1;
             total += value;
         }
         return total;
     }

     long
     sum_sequence(PyObject *sequence)
     {
         Py_ssize_t i, n;
         long total = 0, value;
         PyObject *item;
         n = PySequence_Length(sequence);
         if (n < 0)
             return -1; /* Não tem comprimento */
         for (i = 0; i < n; i++) {
             item = PySequence_GetItem(sequence, i);
             if (item == NULL)
                 return -1; /* Não é uma sequência ou outra falha */
             if (PyLong_Check(item)) {
                 value = PyLong_AsLong(item);
                 Py_DECREF(item);
                 if (value == -1 && PyErr_Occurred())
                     /* Inteiro muito grande para caber em um C longo, sai */
                     return -1;
                 total += value;
             }
             else {
                 Py_DECREF(item); /* Descartar propriedade de referência */
             }
         }
         return total;
     }


File: python.info,  Node: Tipos,  Prev: Contagens de referências<2>,  Up: Objetos tipos e contagens de referências

7.1.4.3 Tipos
.............

Existem alguns outros tipos de dados que desempenham um papel
significativo na API Python/C; a maioria são tipos C simples, como int,
long, double e char*.  Alguns tipos de estrutura são usados para
descrever tabelas estáticas usadas para listar as funções exportadas por
um módulo ou os atributos de dados de um novo tipo de objeto, e outro é
usado para descrever o valor de um número complexo.  Eles serão
discutidos junto com as funções que os utilizam.

 -- C Tipo: type Py_ssize_t
     ' Parte da *note ABI Estável: 553.'  Um tipo integral assinado tal
     que ‘sizeof(Py_ssize_t) == sizeof(size_t)’.  C99 não define tal
     coisa diretamente (size_t é um tipo integral não assinado).  Veja
     PEP 353(1) para mais detalhes.  ‘PY_SSIZE_T_MAX’ é o maior valor
     positivo do tipo *note Py_ssize_t: a69.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0353/


File: python.info,  Node: Exceções<21>,  Next: Incorporando Python<2>,  Prev: Objetos tipos e contagens de referências,  Up: Introdução<13>

7.1.5 Exceções
--------------

O programador Python só precisa lidar com exceções se o tratamento de
erros específico for necessário; as exceções não tratadas são propagadas
automaticamente para o chamador, depois para o chamador e assim por
diante, até chegarem ao interpretador de nível superior, onde são
relatadas ao usuário acompanhadas por um traceback (situação da pilha de
execução).

Para programadores C, entretanto, a verificação de erros sempre deve ser
explícita.  Todas as funções na API Python/C podem levantar exceções, a
menos que uma declaração explícita seja feita de outra forma na
documentação de uma função.  Em geral, quando uma função encontra um
erro, ela define uma exceção, descarta todas as referências de objeto de
sua propriedade e retorna um indicador de erro.  Se não for documentado
de outra forma, este indicador é ‘NULL’ ou ‘-1’, dependendo do tipo de
retorno da função.  Algumas funções retornam um resultado booleano
verdadeiro/falso, com falso indicando um erro.  Muito poucas funções não
retornam nenhum indicador de erro explícito ou têm um valor de retorno
ambíguo e requerem teste explícito para erros com *note
PyErr_Occurred(): 1a3b.  Essas exceções são sempre documentadas
explicitamente.

O estado de exceção é mantido no armazenamento por thread (isso é
equivalente a usar o armazenamento global em uma aplicação sem thread).
Uma thread pode estar em um de dois estados: ocorreu uma exceção ou não.
A função *note PyErr_Occurred(): 1a3b. pode ser usada para verificar
isso: ela retorna uma referência emprestada ao objeto do tipo de exceção
quando uma exceção ocorreu, e ‘NULL’ caso contrário.  Existem várias
funções para definir o estado de exceção: *note PyErr_SetString(): 57c.
é a função mais comum (embora não a mais geral) para definir o estado de
exceção, e *note PyErr_Clear(): 1069. limpa o estado da exceção.

O estado de exceção completo consiste em três objetos (todos os quais
podem ser ‘NULL’): o tipo de exceção, o valor de exceção correspondente
e o traceback.  Eles têm os mesmos significados que o resultado no
Python de ‘sys.exc_info()’; no entanto, eles não são os mesmos: os
objetos Python representam a última exceção sendo tratada por uma
instrução Python *note try: 6e9. … *note except: 18b, enquanto o estado
de exceção de nível C só existe enquanto uma exceção está sendo
transmitido entre funções C até atingir o laço de repetição principal do
interpretador de bytecode Python, que se encarrega de transferi-lo para
‘sys.exc_info()’ e amigos.

Observe que a partir do Python 1.5, a maneira preferida e segura para
thread para acessar o estado de exceção do código Python é chamar a
função *note sys.exc_info(): 68a, que retorna o estado de exceção por
thread para o código Python.  Além disso, a semântica de ambas as
maneiras de acessar o estado de exceção mudou, de modo que uma função
que captura uma exceção salvará e restaurará o estado de exceção de seu
segmento de modo a preservar o estado de exceção de seu chamador.  Isso
evita bugs comuns no código de tratamento de exceções causados por uma
função aparentemente inocente sobrescrevendo a exceção sendo tratada;
também reduz a extensão da vida útil frequentemente indesejada para
objetos que são referenciados pelos quadros de pilha no traceback.

Como princípio geral, uma função que chama outra função para realizar
alguma tarefa deve verificar se a função chamada levantou uma exceção e,
em caso afirmativo, passar o estado da exceção para seu chamador.  Ele
deve descartar todas as referências de objeto que possui e retornar um
indicador de erro, mas 'não' deve definir outra exceção — que
sobrescreveria a exceção que acabou de ser gerada e perderia informações
importantes sobre a causa exata do erro.

Um exemplo simples de detecção de exceções e transmiti-las é mostrado no
exemplo ‘sum_sequence()’ acima.  Acontece que este exemplo não precisa
limpar nenhuma referência de propriedade quando detecta um erro.  A
função de exemplo a seguir mostra alguma limpeza de erro.  Primeiro,
para lembrar por que você gosta de Python, mostramos o código Python
equivalente:

     def incr_item(dict, key):
         try:
             item = dict[key]
         except KeyError:
             item = 0
         dict[key] = item + 1

Aqui está o código C correspondente, em toda sua glória:

     int
     incr_item(PyObject *dict, PyObject *key)
     {
         /* Objetos todos inicializados para NULL para Py_XDECREF */
         PyObject *item = NULL, *const_one = NULL, *incremented_item = NULL;
         int rv = -1; /* Retorna valor inicializado para -1 (falha) */

         item = PyObject_GetItem(dict, key);
         if (item == NULL) {
             /* Trata de KeyError apenas: */
             if (!PyErr_ExceptionMatches(PyExc_KeyError))
                 goto error;

             /* Limpa o erro e usa zero: */
             PyErr_Clear();
             item = PyLong_FromLong(0L);
             if (item == NULL)
                 goto error;
         }
         const_one = PyLong_FromLong(1L);
         if (const_one == NULL)
             goto error;

         incremented_item = PyNumber_Add(item, const_one);
         if (incremented_item == NULL)
             goto error;

         if (PyObject_SetItem(dict, key, incremented_item) < 0)
             goto error;
         rv = 0; /* Success */
         /* Continua com o código de limpeza */

      error:
         /* Código de limpeza, compartilhado pelo caminho sucesso e falha */

         /* Usa Py_XDECREF() para ignorar referências NULL */
         Py_XDECREF(item);
         Py_XDECREF(const_one);
         Py_XDECREF(incremented_item);

         return rv; /* -1 para erro, 0 para sucesso */
     }

Este exemplo representa um uso endossado da instrução ‘goto’ em C! Ele
ilustra o uso de *note PyErr_ExceptionMatches(): 4be7. e *note
PyErr_Clear(): 1069. para lidar com exceções específicas, e o uso de
*note Py_XDECREF(): 78f. para descartar referências de propriedade que
podem ser ‘NULL’ (observe o ‘'X'’ no nome; *note Py_DECREF(): 56f.
travaria quando confrontado com uma referência ‘NULL’).  É importante
que as variáveis usadas para manter as referências de propriedade sejam
inicializadas com ‘NULL’ para que isso funcione; da mesma forma, o valor
de retorno proposto é inicializado para ‘-1’ (falha) e apenas definido
para sucesso após a chamada final feita ser bem sucedida.


File: python.info,  Node: Incorporando Python<2>,  Next: Compilações de depuração,  Prev: Exceções<21>,  Up: Introdução<13>

7.1.6 Incorporando Python
-------------------------

A única tarefa importante com a qual apenas os incorporadores (em
oposição aos escritores de extensão) do interpretador Python precisam se
preocupar é a inicialização e, possivelmente, a finalização do
interpretador Python.  A maior parte da funcionalidade do interpretador
só pode ser usada após a inicialização do interpretador.

A função de inicialização básica é *note Py_Initialize(): 8b1.  Isso
inicializa a tabela de módulos carregados e cria os módulos fundamentais
*note builtins: 12, *note __main__: 1. e *note sys: d9.  Ela também
inicializa o caminho de pesquisa de módulos (‘sys.path’).

*note Py_Initialize(): 8b1. não define a “lista de argumentos de script”
(‘sys.argv’).  Se esta variável for necessária para o código Python que
será executado posteriormente, *note PyConfig.argv: 3c3. e *note
PyConfig.parse_argv: 1a7e. devem estar definidas; veja *note
Configuração de inicialização do Python: 3a7.

Na maioria dos sistemas (em particular, no Unix e no Windows, embora os
detalhes sejam ligeiramente diferentes), *note Py_Initialize(): 8b1.
calcula o caminho de pesquisa de módulos com base em sua melhor
estimativa para a localização do executável do interpretador Python
padrão, presumindo que a biblioteca Python é encontrada em um local fixo
em relação ao executável do interpretador Python.  Em particular, ele
procura por um diretório chamado ‘lib/python`X.Y'’ relativo ao diretório
pai onde o executável chamado ‘python’ é encontrado no caminho de
pesquisa de comandos do shell (a variável de ambiente ‘PATH’).

Por exemplo, se o executável Python for encontrado em
‘/usr/local/bin/python’, ele presumirá que as bibliotecas estão em
‘/usr/local/lib/python`X.Y'’.  (Na verdade, este caminho particular
também é o local reserva, usado quando nenhum arquivo executável chamado
‘python’ é encontrado ao longo de ‘PATH’.)  O usuário pode substituir
este comportamento definindo a variável de ambiente *note PYTHONHOME:
3bc, ou insira diretórios adicionais na frente do caminho padrão
definindo *note PYTHONPATH: 1053.

A aplicação de incorporação pode orientar a pesquisa definindo *note
PyConfig.program_name: 3c4. 'antes' de chamar *note
Py_InitializeFromConfig(): 3c5.  Observe que *note PYTHONHOME: 3bc.
ainda substitui isso e *note PYTHONPATH: 1053. ainda é inserido na
frente do caminho padrão.  Uma aplicação que requer controle total deve
fornecer sua própria implementação de *note Py_GetPath(): 3b3, *note
Py_GetPrefix(): 3b5, *note Py_GetExecPrefix(): 3b1. e *note
Py_GetProgramFullPath(): 3b7. (todas definidas em ‘Modules/getpath.c’).

Às vezes, é desejável “desinicializar” o Python.  Por exemplo, a
aplicação pode querer iniciar novamente (fazer outra chamada para *note
Py_Initialize(): 8b1.) ou a aplicação simplesmente termina com o uso de
Python e deseja liberar memória alocada pelo Python.  Isso pode ser
feito chamando *note Py_FinalizeEx(): d37.  A função *note
Py_IsInitialized(): 4bea. retorna verdadeiro se o Python está atualmente
no estado inicializado.  Mais informações sobre essas funções são
fornecidas em um capítulo posterior.  Observe que *note Py_FinalizeEx():
d37. 'não' libera toda a memória alocada pelo interpretador Python, por
exemplo, a memória alocada por módulos de extensão atualmente não pode
ser liberada.


File: python.info,  Node: Compilações de depuração,  Next: Ferramentas de terceiros recomendadas<2>,  Prev: Incorporando Python<2>,  Up: Introdução<13>

7.1.7 Compilações de depuração
------------------------------

Python pode ser compilado com várias macros para permitir verificações
extras do interpretador e módulos de extensão.  Essas verificações
tendem a adicionar uma grande quantidade de sobrecarga ao tempo de
execução, portanto, não são habilitadas por padrão.

Uma lista completa dos vários tipos de compilações de depuração está no
arquivo ‘Misc/SpecialBuilds.txt’ na distribuição do código-fonte do
Python.  Estão disponíveis compilações que oferecem suporte ao
rastreamento de contagens de referências, depuração do alocador de
memória ou criação de perfil de baixo nível do laço do interpretador
principal.  Apenas as compilações usadas com mais frequência serão
descritas no restante desta seção.

 -- C Macro: Py_DEBUG

Compilar o interpretador com a macro ‘Py_DEBUG’ definida produz o que
geralmente se entende por *note uma construção de depuração do Python:
1f9.  ‘Py_DEBUG’ é habilitada na construção Unix adicionando *note
-with-pydebug: 424. ao comando ‘./configure’.  Também está implícito na
presença da macro não específica do Python ‘_DEBUG’.  Quando ‘Py_DEBUG’
está habilitado na construção do Unix, a otimização do compilador é
desabilitada.

Além da depuração de contagem de referências descrita abaixo,
verificações extras são realizadas, consulte *note Compilação de
Depuração do Python: 1f9.

Definir ‘Py_TRACE_REFS’ habilita o rastreamento de referência (veja a
opção *note opção -with-trace-refs de configure: 395.).  Quando
definida, uma lista circular duplamente vinculada de objetos ativos é
mantida adicionando dois campos extras a cada *note PyObject: 339.  As
alocações totais também são rastreadas.  Ao sair, todas as referências
existentes são impressas.  (No modo interativo, isso acontece após cada
instrução executada pelo interpretador.)

Consulte ‘Misc/SpecialBuilds.txt’ na distribuição do código-fonte Python
para informações mais detalhadas.


File: python.info,  Node: Ferramentas de terceiros recomendadas<2>,  Prev: Compilações de depuração,  Up: Introdução<13>

7.1.8 Ferramentas de terceiros recomendadas
-------------------------------------------

As seguintes ferramentas de terceiros oferecem abordagens mais simples e
mais sofisticadas para criar extensões C, C++ e Rust para Python:

   * Cython(1)

   * cffi(2)

   * HPy(3)

   * nanobind(4) (C++)

   * Numba(5)

   * pybind11(6) (C++)

   * PyO3(7) (Rust)

   * SWIG(8)

O uso de ferramentas como essas pode ajudar a evitar a criação de código
estritamente vinculado a uma versão específica do CPython, evitar erros
de contagem de referências e focar mais no seu próprio código do que em
usar a API do CPython.  Em geral, novas versões do Python podem ser
suportadas atualizando a ferramenta, e seu código frequentemente usará
APIs mais novas e eficientes automaticamente.  Algumas ferramentas
também oferecem suporte à compilação para outras implementações do
Python a partir de um único conjunto de fontes.

Esses projetos não são suportados pelas mesmas pessoas que mantêm o
Python, e quaisquer problemas precisam ser relatados diretamente aos
projetos.  Lembre-se de verificar se o projeto ainda é mantido e tem
suporte, pois a lista acima pode ficar desatualizada.

Ver também
..........

Guia do Usuário de Empacotamento do Python: Extensões Binárias(9)

     O Guia do Usuário de Empacotamento do Python não abrange apenas
     várias ferramentas disponíveis que simplificam a criação de
     extensões binárias, mas também discute os vários motivos pelos
     quais a criação de um módulo de extensão pode ser desejável em
     primeiro lugar.

   ---------- Footnotes ----------

   (1) https://cython.org/

   (2) https://cffi.readthedocs.io

   (3) https://hpyproject.org/

   (4) https://github.com/wjakob/nanobind

   (5) https://numba.pydata.org/

   (6) https://pybind11.readthedocs.io/

   (7) https://pyo3.rs/

   (8) https://www.swig.org

   (9) https://packaging.python.org/guides/packaging-binary-extensions/


File: python.info,  Node: Estabilidade da API C,  Next: A camada de nível muito alto,  Prev: Introdução<13>,  Up: Manual de referência da API Python/C

7.2 Estabilidade da API C
=========================

A menos que documentado de outra forma, a API C do Python é coberta pela
Política de Compatibilidade com versões anteriores, PEP 387(1).  A
maioria das alterações são compatíveis com a fonte (normalmente
adicionando apenas uma nova API). A alteração ou remoção da API
existente só é feita após um período de descontinuação ou para corrigir
problemas sérios.

A Interface Binária de Aplicação (ABI) do CPython é compatível para
frente e para trás através de uma versão menor (se elas forem compiladas
da mesma maneira; veja *note Considerações da plataforma: 4bf1. abaixo).
Portanto, o código compilado para Python 3.10.0 funcionará em 3.10.8 e
vice-versa, mas precisará ser compilado separadamente para 3.9.x e
3.11.x.

Existem dois níveis de API C com diferentes expectativas de
estabilidade:

   - *note API Instável: 547. (“Unstable API”), pode mudar em versões
     menores sem período de depreciação.  É marcado pelo prefixo
     ‘PyUnstable’ nos nomes.

   - *note API Limitada: 396. (“Limited API”), é compatível em várias
     versões menores.  Quando *note Py_LIMITED_API: 41e. é definido,
     apenas este subconjunto é exposto de ‘Python.h’.

Elas são discutidas em mais detalhes abaixo.

Nomes prefixados por um sublinhado, como ‘_Py_InternalState’, são APIs
privadas que podem ser alteradas sem aviso prévio, mesmo em lançamentos
de correção.  Se você precisa usar essa API, considere entrar em contato
com os desenvolvedores do CPython(2) para discutir a adição de uma API
pública para o seu caso de uso.

* Menu:

* API C Instável::
* Interface Binária de Aplicação Estável::
* Considerações da plataforma::
* Conteúdo da API Limitada::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0387/

   (2) https://discuss.python.org/c/core-dev/c-api/30


File: python.info,  Node: API C Instável,  Next: Interface Binária de Aplicação Estável,  Up: Estabilidade da API C

7.2.1 API C Instável
--------------------

Qualquer API nomeada com o prefixo “PyUnstable” expõe detalhes de
implementação do CPython e pode mudar em cada versão menor (por exemplo,
de 3.9 para 3.10) sem nenhum aviso de depreciação.  No entanto, não
mudará em uma versão de correção de bugs (por exemplo, de 3.10.0 para
3.10.1).

É geralmente destinado a ferramentas especializadas de baixo nível, como
depuradores.

Projetos que utilizam esta API são esperados para seguir o
desenvolvimento do CPython e dedicar esforço extra para se ajustar às
mudanças.


File: python.info,  Node: Interface Binária de Aplicação Estável,  Next: Considerações da plataforma,  Prev: API C Instável,  Up: Estabilidade da API C

7.2.2 Interface Binária de Aplicação Estável
--------------------------------------------

Para simplificar, este documento fala sobre 'extensões', mas a API
Limitada e a ABI Estável funcionam da mesma maneira para todos os usos
da API – por exemplo, embutir o Python.

* Menu:

* API C Limitada::
* ABI Estável::
* Escopo e Desempenho da API Limitada::
* Limitações da API Limitada::


File: python.info,  Node: API C Limitada,  Next: ABI Estável,  Up: Interface Binária de Aplicação Estável

7.2.2.1 API C Limitada
......................

Python 3.2 introduziu a 'API Limitada', um subconjunto da API C do
Python.  Extensões que apenas usam o Limited API podem ser compiladas
uma vez e ser carregadas em várias versões do Python.  Os conteúdos da
API Limitada estão *note listados abaixo: 79a.

 -- C Macro: Py_LIMITED_API

     Defina essa macro antes de incluir ‘Python.h’ para optar por usar
     apenas a API Limitada e selecionar a versão da API Limitada.

     Defina ‘Py_LIMITED_API’ com o valor de *note PY_VERSION_HEX: 757.
     correspondente à versão mais baixa do Python que sua extensão
     suporta.  A extensão terá compatibilidade com a ABI de todas as
     versões do Python 3 a partir daquela especificada, e poderá usar a
     API Limitada introduzida até aquela versão.

     Em vez de usar diretamente a macro ‘PY_VERSION_HEX’, codifique uma
     versão menor mínima (por exemplo, ‘0x030A0000’ para o Python 3.10)
     para garantir estabilidade ao compilar com versões futuras do
     Python.

     Você também pode definir ‘Py_LIMITED_API’ como ‘3’.  Isso funciona
     da mesma forma que ‘0x03020000’ (Python 3.2, a versão que
     introduziu a API Limitada).


File: python.info,  Node: ABI Estável,  Next: Escopo e Desempenho da API Limitada,  Prev: API C Limitada,  Up: Interface Binária de Aplicação Estável

7.2.2.2 ABI Estável
...................

Para habilitar isso, o Python fornece uma 'ABI Estável': um conjunto de
símbolos que permanecerão compatíveis com ABI em todas as versões do
Python 3.x.

     Nota: O ABI Estável previne problemas de ABI, como erros de ligador
     devido a símbolos ausentes ou corrupção de dados devido a
     alterações em layouts de estrutura ou assinaturas de função.  No
     entanto, outras alterações no Python podem alterar o
     'comportamento' das extensões.  Veja a Política de
     Retrocompatibilidade do Python ( PEP 387(1)) para detalhes.

A ABI Estável contém símbolos expostos na *note API Limitada: 396, mas
também outros – por exemplo, funções necessárias para suportar versões
mais antigas da API Limitada.

No Windows, as extensões que usam a ABI Estável devem ser vinculadas a
‘python3.dll’ em vez de uma biblioteca específica de versão, como
‘python39.dll’.

Em algumas plataformas, o Python procurará e carregará arquivos de
biblioteca compartilhada com o nome marcado como ‘abi3’ (por exemplo,
‘meumódulo.abi3.so’).  Ele não verifica se essas extensões estão em
conformidade com uma ABI Estável.  O usuário (ou suas ferramentas de
empacotamento) precisa garantir que, por exemplo, as extensões
construídas com a API Limitada 3.10+ não sejam instaladas em versões
mais baixas do Python.

Todas as funções na ABI estável estão presentes como funções na
biblioteca compartilhada do Python, não apenas como macros.  Isso as
torna utilizáveis em linguagens que não utilizam o pré-processador C.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0387/


File: python.info,  Node: Escopo e Desempenho da API Limitada,  Next: Limitações da API Limitada,  Prev: ABI Estável,  Up: Interface Binária de Aplicação Estável

7.2.2.3 Escopo e Desempenho da API Limitada
...........................................

O objetivo da API Limitada é permitir tudo o que é possível com a API C
completa, mas possivelmente com uma penalidade de desempenho.

Por exemplo, enquanto *note PyList_GetItem(): 35a. está disponível, sua
variante de macro “insegura” *note PyList_GET_ITEM(): 4bf8. não está.  A
macro pode ser mais rápida porque pode depender de detalhes de
implementação específicos da versão do objeto da lista.

Sem a definição de ‘Py_LIMITED_API’, algumas funções da API C são
colocadas “inline” ou substituídas por macros.  Definir ‘Py_LIMITED_API’
desativa esse inline, permitindo estabilidade à medida que as estruturas
de dados do Python são aprimoradas, mas possivelmente reduzindo o
desempenho.

Ao deixar de fora a definição ‘Py_LIMITED_API’, é possível compilar uma
extensão da API Limitada com uma ABI específica da versão.  Isso pode
melhorar o desempenho para essa versão do Python, mas limitará a
compatibilidade.  Compilar com ‘Py_LIMITED_API’ vai produzir uma
extensão que pode ser distribuída quando uma específica da versão não
estiver disponível – por exemplo, para pré-lançamentos de uma próxima
versão do Python.


File: python.info,  Node: Limitações da API Limitada,  Prev: Escopo e Desempenho da API Limitada,  Up: Interface Binária de Aplicação Estável

7.2.2.4 Limitações da API Limitada
..................................

Observe que compilar com ‘Py_LIMITED_API’ 'não' é uma garantia completa
de que o código esteja em conformidade com a *note API Limitada: 396. ou
com a *note ABI Estável: 4bf6.  ‘Py_LIMITED_API’ abrange apenas
definições, mas uma API também inclui outras questões, como semântica
esperada.

Uma questão que ‘Py_LIMITED_API’ não protege é a chamada de uma função
com argumentos inválidos em uma versão inferior do Python.  Por exemplo,
considere uma função que começa a aceitar ‘NULL’ como argumento.  No
Python 3.9, ‘NULL’ agora seleciona um comportamento padrão, mas no
Python 3.8, o argumento será usado diretamente, causando uma referência
‘NULL’ e uma falha.  Um argumento similar funciona para campos de
estruturas.

Outra questão é que alguns campos de estrutura não estão atualmente
ocultos quando ‘Py_LIMITED_API’ é definido, mesmo que eles façam parte
da API Limitada.

Por esses motivos, recomendamos testar uma extensão com 'todas' as
versões menores do Python que ela oferece suporte e, preferencialmente,
construir com a versão 'mais baixa' dessas.

Também recomendamos revisar a documentação de todas as APIs utilizadas
para verificar se ela faz parte explicitamente da API Limitada.  Mesmo
com a definição de ‘Py_LIMITED_API’, algumas declarações privadas são
expostas por razões técnicas (ou até mesmo acidentalmente, como bugs).

Também observe que a API Limitada não é necessariamente estável:
compilar com ‘Py_LIMITED_API’ com Python 3.8 significa que a extensão
será executada com Python 3.12, mas não necessariamente será 'compilada'
com Python 3.12.  Em particular, partes da API Limitada podem ser
descontinuadas e removidas, desde que a ABI Estável permaneça estável.


File: python.info,  Node: Considerações da plataforma,  Next: Conteúdo da API Limitada,  Prev: Interface Binária de Aplicação Estável,  Up: Estabilidade da API C

7.2.3 Considerações da plataforma
---------------------------------

A estabilidade da ABI depende não apenas do Python, mas também do
compilador utilizado, das bibliotecas de nível inferior e das opções do
compilador.  Para os fins da *note ABI Estável: 4bf6, esses detalhes
definem uma “plataforma”.  Geralmente, eles dependem do tipo de sistema
operacional e da arquitetura do processador.

É responsabilidade de cada distribuidor particular do Python garantir
que todas as versões do Python em uma plataforma específica sejam
construídas de forma a não quebrar a ABI estável.  Isso é válido para as
versões do Windows e macOS disponibilizadas pela ‘python.org’ e por
muitos distribuidores terceiros.


File: python.info,  Node: Conteúdo da API Limitada,  Prev: Considerações da plataforma,  Up: Estabilidade da API C

7.2.4 Conteúdo da API Limitada
------------------------------

Atualmente, a *note API Limitada: 396. inclui os seguintes itens:

   * *note METH_CLASS: 151d.

   * *note METH_COEXIST: 14bf.

   * *note METH_FASTCALL: 1713.

   * *note METH_METHOD: 977.

   * *note METH_NOARGS: 151c.

   * *note METH_O: 1550.

   * *note METH_STATIC: 151e.

   * *note METH_VARARGS: 1551.

   * *note PY_VECTORCALL_ARGUMENTS_OFFSET: 55e.

   * *note PyAIter_Check(): 4bfc.

   * *note PyArg_Parse(): 1b5b.

   * *note PyArg_ParseTuple(): 571.

   * *note PyArg_ParseTupleAndKeywords(): 383.

   * *note PyArg_UnpackTuple(): 154f.

   * *note PyArg_VaParse(): 4bfd.

   * *note PyArg_VaParseTupleAndKeywords(): 384.

   * *note PyArg_ValidateKeywordArguments(): 4bfe.

   * *note PyBUF_ANY_CONTIGUOUS: 4bff.

   * *note PyBUF_CONTIG: 4c00.

   * *note PyBUF_CONTIG_RO: 4c01.

   * *note PyBUF_C_CONTIGUOUS: 13fd.

   * *note PyBUF_FORMAT: 4c02.

   * *note PyBUF_FULL: 4c03.

   * *note PyBUF_FULL_RO: 4c04.

   * *note PyBUF_F_CONTIGUOUS: 13fe.

   * *note PyBUF_INDIRECT: 4c05.

   * *note PyBUF_MAX_NDIM: 4c06.

   * *note PyBUF_ND: 4c07.

   * *note PyBUF_READ: 1786.

   * *note PyBUF_RECORDS: 4c08.

   * *note PyBUF_RECORDS_RO: 4c09.

   * *note PyBUF_SIMPLE: 4c0a.

   * *note PyBUF_STRIDED: 4c0b.

   * *note PyBUF_STRIDED_RO: 4c0c.

   * *note PyBUF_STRIDES: 4c0d.

   * *note PyBUF_WRITABLE: 13fc.

   * *note PyBUF_WRITE: 1787.

   * *note PyBaseObject_Type: 4c0e.

   * *note PyBool_FromLong(): 4c0f.

   * *note PyBool_Type: 4c10.

   * *note PyBuffer_FillContiguousStrides(): 75f.

   * *note PyBuffer_FillInfo(): 760.

   * *note PyBuffer_FromContiguous(): 75c.

   * *note PyBuffer_GetPointer(): 759.

   * *note PyBuffer_IsContiguous(): 75e.

   * *note PyBuffer_Release(): 39a.

   * *note PyBuffer_SizeFromFormat(): 75a.

   * *note PyBuffer_ToContiguous(): 75b.

   * *note PyByteArrayIter_Type: 4c11.

   * *note PyByteArray_AsString(): 4c12.

   * *note PyByteArray_Concat(): 4c13.

   * *note PyByteArray_FromObject(): 13ef.

   * *note PyByteArray_FromStringAndSize(): 13f0.

   * *note PyByteArray_Resize(): 4c14.

   * *note PyByteArray_Size(): 4c15.

   * *note PyByteArray_Type: 4c16.

   * *note PyBytesIter_Type: 4c17.

   * *note PyBytes_AsString(): 88b.

   * *note PyBytes_AsStringAndSize(): 4c18.

   * *note PyBytes_Concat(): 4c19.

   * *note PyBytes_ConcatAndDel(): 4c1a.

   * *note PyBytes_DecodeEscape(): 4c1b.

   * *note PyBytes_FromFormat(): 1ba1.

   * *note PyBytes_FromFormatV(): 4c1c.

   * *note PyBytes_FromObject(): 4c1d.

   * *note PyBytes_FromString(): 4c1e.

   * *note PyBytes_FromStringAndSize(): 13e7.

   * *note PyBytes_Repr(): 4c1f.

   * *note PyBytes_Size(): 4c20.

   * *note PyBytes_Type: 4c21.

   * *note PyCFunction: 14c0.

   * *note PyCFunctionFast: 4c22.

   * *note PyCFunctionFastWithKeywords: 4c23.

   * *note PyCFunctionWithKeywords: 4c24.

   * *note PyCFunction_GetFlags(): 4c25.

   * *note PyCFunction_GetFunction(): 4c26.

   * *note PyCFunction_GetSelf(): 4c27.

   * *note PyCFunction_New(): 1a3d.

   * *note PyCFunction_NewEx(): 1b05.

   * *note PyCFunction_Type: 4c28.

   * *note PyCMethod_New(): 1a37.

   * *note PyCallIter_New(): 4c29.

   * *note PyCallIter_Type: 4c2a.

   * *note PyCallable_Check(): 4c2b.

   * *note PyCapsule_Destructor: 4c2c.

   * *note PyCapsule_GetContext(): 4c2d.

   * *note PyCapsule_GetDestructor(): 4c2e.

   * *note PyCapsule_GetName(): 4c2f.

   * *note PyCapsule_GetPointer(): 4c30.

   * *note PyCapsule_Import(): 1999.

   * *note PyCapsule_IsValid(): 13a3.

   * *note PyCapsule_New(): 4b6d.

   * *note PyCapsule_SetContext(): 4c31.

   * *note PyCapsule_SetDestructor(): 4c32.

   * *note PyCapsule_SetName(): 4c33.

   * *note PyCapsule_SetPointer(): 4c34.

   * *note PyCapsule_Type: 4c35.

   * *note PyClassMethodDescr_Type: 4c36.

   * *note PyCodec_BackslashReplaceErrors(): 4c37.

   * *note PyCodec_Decode(): 3ff.

   * *note PyCodec_Decoder(): 4c38.

   * *note PyCodec_Encode(): 400.

   * *note PyCodec_Encoder(): 4c39.

   * *note PyCodec_IgnoreErrors(): 4c3a.

   * *note PyCodec_IncrementalDecoder(): 4c3b.

   * *note PyCodec_IncrementalEncoder(): 4c3c.

   * *note PyCodec_KnownEncoding(): 4c3d.

   * *note PyCodec_LookupError(): 4c3e.

   * *note PyCodec_NameReplaceErrors(): ede.

   * *note PyCodec_Register(): 4c3f.

   * *note PyCodec_RegisterError(): 4c40.

   * *note PyCodec_ReplaceErrors(): 4c41.

   * *note PyCodec_StreamReader(): 4c42.

   * *note PyCodec_StreamWriter(): 4c43.

   * *note PyCodec_StrictErrors(): 4c44.

   * *note PyCodec_Unregister(): 89b.

   * *note PyCodec_XMLCharRefReplaceErrors(): 4c45.

   * *note PyComplex_FromDoubles(): 4c46.

   * *note PyComplex_ImagAsDouble(): 178e.

   * *note PyComplex_RealAsDouble(): 178d.

   * *note PyComplex_Type: 4c47.

   * *note PyDescr_NewClassMethod(): 4c48.

   * *note PyDescr_NewGetSet(): 4c49.

   * *note PyDescr_NewMember(): 4c4a.

   * *note PyDescr_NewMethod(): 1b04.

   * *note PyDictItems_Type: 4c4b.

   * *note PyDictIterItem_Type: 4c4c.

   * *note PyDictIterKey_Type: 4c4d.

   * *note PyDictIterValue_Type: 4c4e.

   * *note PyDictKeys_Type: 4c4f.

   * *note PyDictProxy_New(): 4c50.

   * *note PyDictProxy_Type: 4c51.

   * *note PyDictRevIterItem_Type: 4c52.

   * *note PyDictRevIterKey_Type: 4c53.

   * *note PyDictRevIterValue_Type: 4c54.

   * *note PyDictValues_Type: 4c55.

   * *note PyDict_Clear(): 4c56.

   * *note PyDict_Contains(): 338.

   * *note PyDict_Copy(): 420.

   * *note PyDict_DelItem(): 4c57.

   * *note PyDict_DelItemString(): 4c58.

   * *note PyDict_GetItem(): 387.

   * *note PyDict_GetItemRef(): 33a.

   * *note PyDict_GetItemString(): 388.

   * *note PyDict_GetItemStringRef(): 33b.

   * *note PyDict_GetItemWithError(): 33c.

   * *note PyDict_Items(): 4c59.

   * *note PyDict_Keys(): 4c5a.

   * *note PyDict_Merge(): 4c5b.

   * *note PyDict_MergeFromSeq2(): 4c5c.

   * *note PyDict_New(): 4c5d.

   * *note PyDict_Next(): 16fd.

   * *note PyDict_SetItem(): 4b63.

   * *note PyDict_SetItemString(): 16eb.

   * *note PyDict_Size(): 4c5e.

   * *note PyDict_Type: 4c5f.

   * *note PyDict_Update(): 4c60.

   * *note PyDict_Values(): 4c61.

   * *note PyEllipsis_Type: 4c62.

   * *note PyEnum_Type: 4c63.

   * *note PyErr_BadArgument(): 4c64.

   * *note PyErr_BadInternalCall(): 4c65.

   * *note PyErr_CheckSignals(): 467.

   * *note PyErr_Clear(): 1069.

   * ‘PyErr_Display()’

   * *note PyErr_DisplayException(): 402.

   * *note PyErr_ExceptionMatches(): 4be7.

   * *note PyErr_Fetch(): 3f3.

   * *note PyErr_Format(): ee0.

   * *note PyErr_FormatV(): edf.

   * *note PyErr_GetExcInfo(): 772.

   * *note PyErr_GetHandledException(): 76f.

   * *note PyErr_GetRaisedException(): 3f4.

   * *note PyErr_GivenExceptionMatches(): 4c66.

   * *note PyErr_NewException(): 12ab.

   * *note PyErr_NewExceptionWithDoc(): 12aa.

   * *note PyErr_NoMemory(): 4b42.

   * *note PyErr_NormalizeException(): 3f5.

   * *note PyErr_Occurred(): 1a3b.

   * *note PyErr_Print(): 1ab9.

   * *note PyErr_PrintEx(): 4c67.

   * *note PyErr_ProgramText(): 4c68.

   * *note PyErr_ResourceWarning(): d39.

   * *note PyErr_Restore(): 3f6.

   * *note PyErr_SetExcFromWindowsErr(): 4c69.

   * *note PyErr_SetExcFromWindowsErrWithFilename(): 1808.

   * *note PyErr_SetExcFromWindowsErrWithFilenameObject(): 4c6a.

   * *note PyErr_SetExcFromWindowsErrWithFilenameObjects(): 4c6b.

   * *note PyErr_SetExcInfo(): 771.

   * *note PyErr_SetFromErrno(): 4b41.

   * *note PyErr_SetFromErrnoWithFilename(): 1807.

   * *note PyErr_SetFromErrnoWithFilenameObject(): 4c6c.

   * *note PyErr_SetFromErrnoWithFilenameObjects(): 4c6d.

   * *note PyErr_SetFromWindowsErr(): 4c6e.

   * *note PyErr_SetFromWindowsErrWithFilename(): 1809.

   * *note PyErr_SetHandledException(): 770.

   * *note PyErr_SetImportError(): d60.

   * *note PyErr_SetImportErrorSubclass(): d38.

   * *note PyErr_SetInterrupt(): 4c6f.

   * *note PyErr_SetInterruptEx(): 8a2.

   * *note PyErr_SetNone(): 4c70.

   * *note PyErr_SetObject(): 57b.

   * *note PyErr_SetRaisedException(): 3f7.

   * *note PyErr_SetString(): 57c.

   * *note PyErr_SyntaxLocation(): 4c71.

   * *note PyErr_SyntaxLocationEx(): 4c72.

   * *note PyErr_WarnEx(): 1494.

   * *note PyErr_WarnExplicit(): 180f.

   * *note PyErr_WarnFormat(): 4c73.

   * *note PyErr_WriteUnraisable(): 34d.

   * *note PyEval_AcquireThread(): 3aa.

   * *note PyEval_EvalCode(): 88a.

   * *note PyEval_EvalCodeEx(): 1862.

   * *note PyEval_EvalFrame(): 4c74.

   * *note PyEval_EvalFrameEx(): 1066.

   * *note PyEval_GetBuiltins(): 34f.

   * *note PyEval_GetFrame(): 18c1.

   * *note PyEval_GetFrameBuiltins(): 34e.

   * *note PyEval_GetFrameGlobals(): 350.

   * *note PyEval_GetFrameLocals(): 352.

   * *note PyEval_GetFuncDesc(): 4c75.

   * *note PyEval_GetFuncName(): 4c76.

   * *note PyEval_GetGlobals(): 351.

   * *note PyEval_GetLocals(): 353.

   * *note PyEval_InitThreads(): 172f.

   * *note PyEval_ReleaseThread(): 4c77.

   * *note PyEval_RestoreThread(): 3a9.

   * *note PyEval_SaveThread(): 3a8.

   * *note PyExc_ArithmeticError: 4c78.

   * *note PyExc_AssertionError: 4c79.

   * *note PyExc_AttributeError: 4c7a.

   * *note PyExc_BaseException: 4c7b.

   * *note PyExc_BaseExceptionGroup: 4c7c.

   * *note PyExc_BlockingIOError: 4c7d.

   * *note PyExc_BrokenPipeError: 4c7e.

   * *note PyExc_BufferError: 4c7f.

   * *note PyExc_BytesWarning: 4c80.

   * *note PyExc_ChildProcessError: 4c81.

   * *note PyExc_ConnectionAbortedError: 4c82.

   * *note PyExc_ConnectionError: 4c83.

   * *note PyExc_ConnectionRefusedError: 4c84.

   * *note PyExc_ConnectionResetError: 4c85.

   * *note PyExc_DeprecationWarning: 4c86.

   * *note PyExc_EOFError: 4c87.

   * *note PyExc_EncodingWarning: 4c88.

   * *note PyExc_EnvironmentError: 4c89.

   * *note PyExc_Exception: 4c8a.

   * *note PyExc_FileExistsError: 4c8b.

   * *note PyExc_FileNotFoundError: 4c8c.

   * *note PyExc_FloatingPointError: 4c8d.

   * *note PyExc_FutureWarning: 4c8e.

   * *note PyExc_GeneratorExit: 4c8f.

   * *note PyExc_IOError: 4c90.

   * *note PyExc_ImportError: 4c91.

   * *note PyExc_ImportWarning: 4c92.

   * *note PyExc_IndentationError: 4c93.

   * *note PyExc_IndexError: 4c94.

   * *note PyExc_InterruptedError: 4c95.

   * *note PyExc_IsADirectoryError: 4c96.

   * *note PyExc_KeyError: 4c97.

   * *note PyExc_KeyboardInterrupt: 4c98.

   * *note PyExc_LookupError: 4c99.

   * *note PyExc_MemoryError: 4c9a.

   * *note PyExc_ModuleNotFoundError: 4c9b.

   * *note PyExc_NameError: 4c9c.

   * *note PyExc_NotADirectoryError: 4c9d.

   * *note PyExc_NotImplementedError: 4c9e.

   * *note PyExc_OSError: 4b44.

   * *note PyExc_OverflowError: 4c9f.

   * *note PyExc_PendingDeprecationWarning: 4ca0.

   * *note PyExc_PermissionError: 4ca1.

   * *note PyExc_ProcessLookupError: 4ca2.

   * *note PyExc_RecursionError: ee1.

   * *note PyExc_ReferenceError: 4ca3.

   * *note PyExc_ResourceWarning: 4ca4.

   * *note PyExc_RuntimeError: 4ca5.

   * *note PyExc_RuntimeWarning: 4ca6.

   * *note PyExc_StopAsyncIteration: 4ca7.

   * *note PyExc_StopIteration: 4ca8.

   * *note PyExc_SyntaxError: 4ca9.

   * *note PyExc_SyntaxWarning: 4caa.

   * *note PyExc_SystemError: 4cab.

   * *note PyExc_SystemExit: 4cac.

   * *note PyExc_TabError: 4cad.

   * *note PyExc_TimeoutError: 4cae.

   * *note PyExc_TypeError: 4b43.

   * *note PyExc_UnboundLocalError: 4caf.

   * *note PyExc_UnicodeDecodeError: 4cb0.

   * *note PyExc_UnicodeEncodeError: 4cb1.

   * *note PyExc_UnicodeError: 4cb2.

   * *note PyExc_UnicodeTranslateError: 4cb3.

   * *note PyExc_UnicodeWarning: 4cb4.

   * *note PyExc_UserWarning: 4cb5.

   * *note PyExc_ValueError: 4b45.

   * *note PyExc_Warning: 4cb6.

   * *note PyExc_WindowsError: 4cb7.

   * *note PyExc_ZeroDivisionError: 4b40.

   * *note PyExceptionClass_Name(): a6f.

   * *note PyException_GetArgs(): 56a.

   * *note PyException_GetCause(): 4cb8.

   * *note PyException_GetContext(): 4cb9.

   * *note PyException_GetTraceback(): 4cba.

   * *note PyException_SetArgs(): 56b.

   * *note PyException_SetCause(): 4cbb.

   * *note PyException_SetContext(): 4cbc.

   * *note PyException_SetTraceback(): 1b61.

   * *note PyFile_FromFd(): 4cbd.

   * *note PyFile_GetLine(): 4cbe.

   * *note PyFile_WriteObject(): 4cbf.

   * *note PyFile_WriteString(): 4cc0.

   * *note PyFilter_Type: 4cc1.

   * *note PyFloat_AsDouble(): a73.

   * *note PyFloat_FromDouble(): 4cc2.

   * *note PyFloat_FromString(): 4cc3.

   * *note PyFloat_GetInfo(): 1437.

   * *note PyFloat_GetMax(): 1435.

   * *note PyFloat_GetMin(): 1436.

   * *note PyFloat_Type: 4cc4.

   * *note PyFrameObject: 789.

   * *note PyFrame_GetCode(): 78a.

   * *note PyFrame_GetLineNumber(): 78b.

   * *note PyFrozenSet_New(): 148d.

   * *note PyFrozenSet_Type: 4cc5.

   * *note PyGC_Collect(): 995.

   * *note PyGC_Disable(): 8a9.

   * *note PyGC_Enable(): 8a8.

   * *note PyGC_IsEnabled(): 8aa.

   * *note PyGILState_Ensure(): 3ab.

   * *note PyGILState_GetThisThreadState(): 4cc6.

   * *note PyGILState_Release(): 3ac.

   * *note PyGILState_STATE: 4cc7.

   * *note PyGetSetDef: bd1.

   * *note PyGetSetDescr_Type: 4cc8.

   * *note PyImport_AddModule(): 357.

   * *note PyImport_AddModuleObject(): 4cc9.

   * *note PyImport_AddModuleRef(): 356.

   * *note PyImport_AppendInittab(): 18a4.

   * *note PyImport_ExecCodeModule(): 4cca.

   * *note PyImport_ExecCodeModuleEx(): 4ccb.

   * *note PyImport_ExecCodeModuleObject(): 4ccc.

   * *note PyImport_ExecCodeModuleWithPathnames(): 4ccd.

   * *note PyImport_GetImporter(): 1806.

   * *note PyImport_GetMagicNumber(): 11e2.

   * *note PyImport_GetMagicTag(): 4cce.

   * *note PyImport_GetModule(): bcb.

   * *note PyImport_GetModuleDict(): 4ccf.

   * *note PyImport_Import(): 1443.

   * *note PyImport_ImportFrozenModule(): 4cd0.

   * *note PyImport_ImportFrozenModuleObject(): 4cd1.

   * *note PyImport_ImportModule(): 3be.

   * *note PyImport_ImportModuleLevel(): 11e3.

   * *note PyImport_ImportModuleLevelObject(): 4cd2.

   * *note PyImport_ImportModuleNoBlock(): 3bd.

   * *note PyImport_ReloadModule(): 4cd3.

   * *note PyIndex_Check(): 991.

   * *note PyInterpreterState: 8c2.

   * *note PyInterpreterState_Clear(): 43ff.

   * *note PyInterpreterState_Delete(): 4cd4.

   * *note PyInterpreterState_Get(): 3ad.

   * *note PyInterpreterState_GetDict(): 4cd5.

   * *note PyInterpreterState_GetID(): bdf.

   * *note PyInterpreterState_New(): 4400.

   * *note PyIter_Check(): 1a3e.

   * *note PyIter_Next(): 4cd6.

   * *note PyIter_Send(): 89c.

   * *note PyListIter_Type: 4cd7.

   * *note PyListRevIter_Type: 4cd8.

   * *note PyList_Append(): 4cd9.

   * *note PyList_AsTuple(): 4cda.

   * *note PyList_GetItem(): 35a.

   * *note PyList_GetItemRef(): 359.

   * *note PyList_GetSlice(): 4cdb.

   * *note PyList_Insert(): 165d.

   * *note PyList_New(): 4be1.

   * *note PyList_Reverse(): 4cdc.

   * *note PyList_SetItem(): 165e.

   * *note PyList_SetSlice(): 4cdd.

   * *note PyList_Size(): 1461.

   * *note PyList_Sort(): 4cde.

   * *note PyList_Type: 4b84.

   * *note PyLongObject: 588.

   * *note PyLongRangeIter_Type: 4cdf.

   * *note PyLong_AsDouble(): 4ce0.

   * *note PyLong_AsInt(): 35f.

   * *note PyLong_AsLong(): 360.

   * *note PyLong_AsLongAndOverflow(): 12a8.

   * *note PyLong_AsLongLong(): 4ce1.

   * *note PyLong_AsLongLongAndOverflow(): 12a7.

   * *note PyLong_AsSize_t(): 4ce2.

   * *note PyLong_AsSsize_t(): 4ce3.

   * *note PyLong_AsUnsignedLong(): 4ce4.

   * *note PyLong_AsUnsignedLongLong(): 12d6.

   * *note PyLong_AsUnsignedLongLongMask(): 1b5d.

   * *note PyLong_AsUnsignedLongMask(): 4ce5.

   * *note PyLong_AsVoidPtr(): 4ce6.

   * *note PyLong_FromDouble(): 949.

   * *note PyLong_FromLong(): 195a.

   * *note PyLong_FromLongLong(): 195b.

   * *note PyLong_FromSize_t(): 1b3a.

   * *note PyLong_FromSsize_t(): 4ce7.

   * *note PyLong_FromString(): 4ce8.

   * *note PyLong_FromUnsignedLong(): 1b38.

   * *note PyLong_FromUnsignedLongLong(): 1b39.

   * *note PyLong_FromVoidPtr(): 4ce9.

   * *note PyLong_GetInfo(): 4cea.

   * *note PyLong_Type: 4ceb.

   * *note PyMap_Type: 4cec.

   * *note PyMapping_Check(): 4ced.

   * *note PyMapping_GetItemString(): 4cee.

   * *note PyMapping_GetOptionalItem(): 345.

   * *note PyMapping_GetOptionalItemString(): 346.

   * *note PyMapping_HasKey(): 37f.

   * *note PyMapping_HasKeyString(): 381.

   * *note PyMapping_HasKeyStringWithError(): 380.

   * *note PyMapping_HasKeyWithError(): 37e.

   * *note PyMapping_Items(): bd7.

   * *note PyMapping_Keys(): bd5.

   * *note PyMapping_Length(): 4cef.

   * *note PyMapping_SetItemString(): 4cf0.

   * *note PyMapping_Size(): 1bd0.

   * *note PyMapping_Values(): bd6.

   * *note PyMem_Calloc(): edc.

   * *note PyMem_Free(): 148a.

   * *note PyMem_Malloc(): c81.

   * *note PyMem_RawCalloc(): 391.

   * *note PyMem_RawFree(): 393.

   * *note PyMem_RawMalloc(): 390.

   * *note PyMem_RawRealloc(): 392.

   * *note PyMem_Realloc(): 106a.

   * *note PyMemberDef: 54f.

   * *note PyMemberDescr_Type: 4cf1.

   * *note PyMember_GetOne(): 58d.

   * *note PyMember_SetOne(): 58e.

   * *note PyMemoryView_FromBuffer(): 761.

   * *note PyMemoryView_FromMemory(): 11af.

   * *note PyMemoryView_FromObject(): 4cf2.

   * *note PyMemoryView_GetContiguous(): 4cf3.

   * *note PyMemoryView_Type: 4cf4.

   * *note PyMethodDef: 151f.

   * *note PyMethodDescr_Type: 4cf5.

   * *note PyModuleDef: 984.

   * ‘PyModuleDef_Base’

   * *note PyModuleDef_Init(): 4b4c.

   * *note PyModuleDef_Slot: 4cf6.

   * ‘PyModuleDef_Type’

   * *note PyModule_Add(): 364.

   * *note PyModule_AddFunctions(): 4cf7.

   * *note PyModule_AddIntConstant(): 1585.

   * *note PyModule_AddObject(): 366.

   * *note PyModule_AddObjectRef(): 365.

   * *note PyModule_AddStringConstant(): 1586.

   * *note PyModule_AddType(): 97c.

   * *note PyModule_Create2(): 4cf8.

   * *note PyModule_ExecDef(): ee4.

   * *note PyModule_FromDefAndSpec2(): ee3.

   * *note PyModule_GetDef(): 4cf9.

   * *note PyModule_GetDict(): 4cfa.

   * *note PyModule_GetFilename(): 3f8.

   * *note PyModule_GetFilenameObject(): 3f9.

   * *note PyModule_GetName(): 4cfb.

   * *note PyModule_GetNameObject(): 4cfc.

   * *note PyModule_GetState(): 987.

   * *note PyModule_New(): 4cfd.

   * *note PyModule_NewObject(): 4cfe.

   * *note PyModule_SetDocString(): 4cff.

   * *note PyModule_Type: 4d00.

   * *note PyNumber_Absolute(): 4d01.

   * *note PyNumber_Add(): 4d02.

   * *note PyNumber_And(): 4d03.

   * *note PyNumber_AsSsize_t(): 4d04.

   * *note PyNumber_Check(): a70.

   * *note PyNumber_Divmod(): 4d05.

   * *note PyNumber_Float(): a72.

   * *note PyNumber_FloorDivide(): 4d06.

   * *note PyNumber_InPlaceAdd(): 4d07.

   * *note PyNumber_InPlaceAnd(): 4d08.

   * *note PyNumber_InPlaceFloorDivide(): 4d09.

   * *note PyNumber_InPlaceLshift(): 4d0a.

   * *note PyNumber_InPlaceMatrixMultiply(): ee6.

   * *note PyNumber_InPlaceMultiply(): 4d0b.

   * *note PyNumber_InPlaceOr(): 4d0c.

   * *note PyNumber_InPlacePower(): 4d0d.

   * *note PyNumber_InPlaceRemainder(): 4d0e.

   * *note PyNumber_InPlaceRshift(): 4d0f.

   * *note PyNumber_InPlaceSubtract(): 4d10.

   * *note PyNumber_InPlaceTrueDivide(): 4d11.

   * *note PyNumber_InPlaceXor(): 4d12.

   * *note PyNumber_Index(): 897.

   * *note PyNumber_Invert(): 4d13.

   * *note PyNumber_Long(): a71.

   * *note PyNumber_Lshift(): 4d14.

   * *note PyNumber_MatrixMultiply(): ee5.

   * *note PyNumber_Multiply(): 4d15.

   * *note PyNumber_Negative(): 4d16.

   * *note PyNumber_Or(): 4d17.

   * *note PyNumber_Positive(): 4d18.

   * *note PyNumber_Power(): 4d19.

   * *note PyNumber_Remainder(): 4d1a.

   * *note PyNumber_Rshift(): 4d1b.

   * *note PyNumber_Subtract(): 4d1c.

   * *note PyNumber_ToBase(): 18fe.

   * *note PyNumber_TrueDivide(): 4d1d.

   * *note PyNumber_Xor(): 4d1e.

   * *note PyOS_AfterFork(): 3fa.

   * *note PyOS_AfterFork_Child(): 3fb.

   * *note PyOS_AfterFork_Parent(): bd9.

   * *note PyOS_BeforeFork(): bd8.

   * *note PyOS_CheckStack(): 192c.

   * *note PyOS_FSPath(): d3a.

   * *note PyOS_InputHook: 585.

   * *note PyOS_InterruptOccurred(): 1acf.

   * *note PyOS_double_to_string(): 4d1f.

   * *note PyOS_getsig(): 1587.

   * *note PyOS_mystricmp(): 1ac8.

   * *note PyOS_mystrnicmp(): 1ac7.

   * *note PyOS_setsig(): 1588.

   * *note PyOS_sighandler_t: 4d20.

   * *note PyOS_snprintf(): 1552.

   * *note PyOS_string_to_double(): 12d7.

   * *note PyOS_strtol(): 4d21.

   * *note PyOS_strtoul(): 4d22.

   * *note PyOS_vsnprintf(): 1553.

   * *note PyObject: 339.

   * *note PyObject.ob_refcnt: 8a3.

   * *note PyObject.ob_type: 4b77.

   * *note PyObject_ASCII(): 4d23.

   * *note PyObject_AsFileDescriptor(): 4d24.

   * *note PyObject_Bytes(): 4d25.

   * *note PyObject_Call(): 39c.

   * *note PyObject_CallFunction(): 39e.

   * *note PyObject_CallFunctionObjArgs(): 4d26.

   * *note PyObject_CallMethod(): 39f.

   * *note PyObject_CallMethodObjArgs(): 1b74.

   * *note PyObject_CallNoArgs(): 39b.

   * *note PyObject_CallObject(): 4b56.

   * *note PyObject_Calloc(): edd.

   * *note PyObject_CheckBuffer(): 398.

   * *note PyObject_ClearWeakRefs(): 576.

   * *note PyObject_CopyData(): 75d.

   * *note PyObject_DelAttr(): 161f.

   * *note PyObject_DelAttrString(): 1620.

   * *note PyObject_DelItem(): 4d27.

   * *note PyObject_DelItemString(): 4d28.

   * *note PyObject_Dir(): 4d29.

   * *note PyObject_Format(): 4d2a.

   * *note PyObject_Free(): c80.

   * *note PyObject_GC_Del(): 154c.

   * *note PyObject_GC_IsFinalized(): 97e.

   * *note PyObject_GC_IsTracked(): 97d.

   * *note PyObject_GC_Track(): 154d.

   * *note PyObject_GC_UnTrack(): 154e.

   * *note PyObject_GenericGetAttr(): 4d2b.

   * *note PyObject_GenericGetDict(): 1a92.

   * *note PyObject_GenericSetAttr(): 4d2c.

   * *note PyObject_GenericSetDict(): 4d2d.

   * *note PyObject_GetAIter(): 4d2e.

   * *note PyObject_GetAttr(): 347.

   * *note PyObject_GetAttrString(): 348.

   * *note PyObject_GetBuffer(): 399.

   * *note PyObject_GetItem(): 4be2.

   * *note PyObject_GetIter(): 4d2f.

   * *note PyObject_GetOptionalAttr(): 349.

   * *note PyObject_GetOptionalAttrString(): 34a.

   * *note PyObject_GetTypeData(): 549.

   * *note PyObject_HasAttr(): 37b.

   * *note PyObject_HasAttrString(): 37d.

   * *note PyObject_HasAttrStringWithError(): 37c.

   * *note PyObject_HasAttrWithError(): 37a.

   * *note PyObject_Hash(): 403.

   * *note PyObject_HashNotImplemented(): 140d.

   * *note PyObject_Init(): a74.

   * *note PyObject_InitVar(): 1acd.

   * *note PyObject_IsInstance(): ed5.

   * *note PyObject_IsSubclass(): ed6.

   * *note PyObject_IsTrue(): 4d30.

   * *note PyObject_Length(): 4d31.

   * *note PyObject_Malloc(): c83.

   * *note PyObject_Not(): 4d32.

   * *note PyObject_Realloc(): 148b.

   * *note PyObject_Repr(): 1067.

   * *note PyObject_RichCompare(): 4b9a.

   * *note PyObject_RichCompareBool(): 1b1b.

   * *note PyObject_SelfIter(): 4d33.

   * *note PyObject_SetAttr(): 4d34.

   * *note PyObject_SetAttrString(): 16ec.

   * *note PyObject_SetItem(): 4be0.

   * *note PyObject_Size(): 4d35.

   * *note PyObject_Str(): 1068.

   * *note PyObject_Type(): 4d36.

   * *note PyObject_Vectorcall(): 55c.

   * *note PyObject_VectorcallMethod(): 55d.

   * *note PyProperty_Type: 4d37.

   * *note PyRangeIter_Type: 4d38.

   * *note PyRange_Type: 4d39.

   * *note PyReversed_Type: 4d3a.

   * *note PySeqIter_New(): 4d3b.

   * *note PySeqIter_Type: 4d3c.

   * *note PySequence_Check(): 4d3d.

   * *note PySequence_Concat(): 4d3e.

   * *note PySequence_Contains(): 4d3f.

   * *note PySequence_Count(): 4d40.

   * *note PySequence_DelItem(): 1bcf.

   * *note PySequence_DelSlice(): 4d41.

   * *note PySequence_Fast(): 4d42.

   * *note PySequence_GetItem(): 1bcd.

   * *note PySequence_GetSlice(): 4d43.

   * ‘PySequence_In()’

   * *note PySequence_InPlaceConcat(): 4d44.

   * *note PySequence_InPlaceRepeat(): 4d45.

   * *note PySequence_Index(): 4d46.

   * *note PySequence_Length(): 4d47.

   * *note PySequence_List(): 4d48.

   * *note PySequence_Repeat(): 4d49.

   * *note PySequence_SetItem(): 1bce.

   * *note PySequence_SetSlice(): 4d4a.

   * *note PySequence_Size(): 1bcc.

   * *note PySequence_Tuple(): 4d4b.

   * *note PySetIter_Type: 4d4c.

   * *note PySet_Add(): 148e.

   * *note PySet_Clear(): 4d4d.

   * *note PySet_Contains(): 1490.

   * *note PySet_Discard(): 148f.

   * *note PySet_New(): 148c.

   * *note PySet_Pop(): 4d4e.

   * *note PySet_Size(): 1491.

   * *note PySet_Type: 4d4f.

   * *note PySlice_AdjustIndices(): 3fe.

   * *note PySlice_GetIndices(): 4d50.

   * *note PySlice_GetIndicesEx(): 3fc.

   * *note PySlice_New(): 4d51.

   * *note PySlice_Type: 4d52.

   * *note PySlice_Unpack(): 3fd.

   * *note PyState_AddModule(): 4d53.

   * *note PyState_FindModule(): 4d54.

   * *note PyState_RemoveModule(): 4d55.

   * *note PyStructSequence_Desc: bd3.

   * *note PyStructSequence_Field: bd2.

   * *note PyStructSequence_GetItem(): 4d56.

   * *note PyStructSequence_New(): 4d57.

   * *note PyStructSequence_NewType(): 4d58.

   * *note PyStructSequence_SetItem(): 4d59.

   * *note PyStructSequence_UnnamedField: 989.

   * *note PySuper_Type: 4d5a.

   * *note PySys_Audit(): 36f.

   * *note PySys_AuditTuple(): 36e.

   * *note PySys_FormatStderr(): 4d5b.

   * *note PySys_FormatStdout(): 4d5c.

   * *note PySys_GetObject(): 389.

   * *note PySys_GetXOptions(): 4d5d.

   * *note PySys_ResetWarnOptions(): 3af.

   * *note PySys_SetArgv(): 172e.

   * *note PySys_SetArgvEx(): 172d.

   * *note PySys_SetObject(): 4d5e.

   * *note PySys_WriteStderr(): 4d5f.

   * *note PySys_WriteStdout(): 4d60.

   * *note PyThreadState: 78d.

   * *note PyThreadState_Clear(): 170b.

   * *note PyThreadState_Delete(): 1b18.

   * *note PyThreadState_Get(): 372.

   * *note PyThreadState_GetDict(): 4d61.

   * *note PyThreadState_GetFrame(): 78e.

   * *note PyThreadState_GetID(): 979.

   * *note PyThreadState_GetInterpreter(): 978.

   * *note PyThreadState_New(): 4d62.

   * *note PyThreadState_SetAsyncExc(): bdd.

   * *note PyThreadState_Swap(): 4d63.

   * *note PyThread_GetInfo(): 4d64.

   * *note PyThread_ReInitTLS(): 40e.

   * *note PyThread_acquire_lock(): 4d65.

   * *note PyThread_acquire_lock_timed(): 4d66.

   * *note PyThread_allocate_lock(): 4d67.

   * *note PyThread_create_key(): 404.

   * *note PyThread_delete_key(): 406.

   * *note PyThread_delete_key_value(): 40c.

   * *note PyThread_exit_thread(): 4d68.

   * *note PyThread_free_lock(): 4d69.

   * *note PyThread_get_key_value(): 40a.

   * *note PyThread_get_stacksize(): 4d6a.

   * *note PyThread_get_thread_ident(): 4d6b.

   * *note PyThread_get_thread_native_id(): 192d.

   * *note PyThread_init_thread(): 4d6c.

   * *note PyThread_release_lock(): 4d6d.

   * *note PyThread_set_key_value(): 408.

   * *note PyThread_set_stacksize(): 4d6e.

   * *note PyThread_start_new_thread(): 1bc4.

   * *note PyThread_tss_alloc(): 405.

   * *note PyThread_tss_create(): 4d6f.

   * *note PyThread_tss_delete(): 40d.

   * *note PyThread_tss_free(): 407.

   * *note PyThread_tss_get(): 40b.

   * *note PyThread_tss_is_created(): 4d70.

   * *note PyThread_tss_set(): 409.

   * *note PyTraceBack_Here(): 4d71.

   * *note PyTraceBack_Print(): 4d72.

   * *note PyTraceBack_Type: 4d73.

   * *note PyTupleIter_Type: 4d74.

   * *note PyTuple_GetItem(): 4b61.

   * *note PyTuple_GetSlice(): 4d75.

   * *note PyTuple_New(): 39d.

   * *note PyTuple_Pack(): 4d76.

   * *note PyTuple_SetItem(): 4b62.

   * *note PyTuple_Size(): 4d77.

   * *note PyTuple_Type: 4d78.

   * *note PyTypeObject: ab4.

   * *note PyType_ClearCache(): 4d79.

   * *note PyType_FromMetaclass(): 550.

   * *note PyType_FromModuleAndSpec(): 551.

   * *note PyType_FromSpec(): 57d.

   * *note PyType_FromSpecWithBases(): 57e.

   * *note PyType_GenericAlloc(): a75.

   * *note PyType_GenericNew(): 4b76.

   * *note PyType_GetFlags(): 1aca.

   * *note PyType_GetFullyQualifiedName(): 373.

   * *note PyType_GetModule(): 975.

   * *note PyType_GetModuleByDef(): 394.

   * *note PyType_GetModuleName(): 375.

   * *note PyType_GetModuleState(): 976.

   * *note PyType_GetName(): 752.

   * *note PyType_GetQualName(): 753.

   * *note PyType_GetSlot(): 8a0.

   * *note PyType_GetTypeDataSize(): 54a.

   * *note PyType_IsSubtype(): 4d7a.

   * *note PyType_Modified(): 1906.

   * *note PyType_Ready(): 77c.

   * *note PyType_Slot: 4d7b.

   * *note PyType_Spec: 180b.

   * *note PyType_Type: 54d.

   * *note PyUnicodeDecodeError_Create(): 4d7c.

   * *note PyUnicodeDecodeError_GetEncoding(): 4d7d.

   * *note PyUnicodeDecodeError_GetEnd(): 4d7e.

   * *note PyUnicodeDecodeError_GetObject(): 4d7f.

   * *note PyUnicodeDecodeError_GetReason(): 4d80.

   * *note PyUnicodeDecodeError_GetStart(): 4d81.

   * *note PyUnicodeDecodeError_SetEnd(): 4d82.

   * *note PyUnicodeDecodeError_SetReason(): 4d83.

   * *note PyUnicodeDecodeError_SetStart(): 4d84.

   * *note PyUnicodeEncodeError_GetEncoding(): 4d85.

   * *note PyUnicodeEncodeError_GetEnd(): 4d86.

   * *note PyUnicodeEncodeError_GetObject(): 4d87.

   * *note PyUnicodeEncodeError_GetReason(): 4d88.

   * *note PyUnicodeEncodeError_GetStart(): 4d89.

   * *note PyUnicodeEncodeError_SetEnd(): 4d8a.

   * *note PyUnicodeEncodeError_SetReason(): 4d8b.

   * *note PyUnicodeEncodeError_SetStart(): 4d8c.

   * *note PyUnicodeIter_Type: 4d8d.

   * *note PyUnicodeTranslateError_GetEnd(): 4d8e.

   * *note PyUnicodeTranslateError_GetObject(): 4d8f.

   * *note PyUnicodeTranslateError_GetReason(): 4d90.

   * *note PyUnicodeTranslateError_GetStart(): 4d91.

   * *note PyUnicodeTranslateError_SetEnd(): 4d92.

   * *note PyUnicodeTranslateError_SetReason(): 4d93.

   * *note PyUnicodeTranslateError_SetStart(): 4d94.

   * ‘PyUnicode_Append()’

   * ‘PyUnicode_AppendAndDel()’

   * *note PyUnicode_AsASCIIString(): 11d1.

   * *note PyUnicode_AsCharmapString(): 4d95.

   * ‘PyUnicode_AsDecodedObject()’

   * ‘PyUnicode_AsDecodedUnicode()’

   * ‘PyUnicode_AsEncodedObject()’

   * *note PyUnicode_AsEncodedString(): 4d96.

   * ‘PyUnicode_AsEncodedUnicode()’

   * *note PyUnicode_AsLatin1String(): 11d0.

   * *note PyUnicode_AsMBCSString(): 11d2.

   * *note PyUnicode_AsRawUnicodeEscapeString(): 11cf.

   * *note PyUnicode_AsUCS4(): 11b7.

   * *note PyUnicode_AsUCS4Copy(): 8c0.

   * *note PyUnicode_AsUTF16String(): 4d97.

   * *note PyUnicode_AsUTF32String(): 4d98.

   * *note PyUnicode_AsUTF8AndSize(): 89d.

   * *note PyUnicode_AsUTF8String(): 11cd.

   * *note PyUnicode_AsUnicodeEscapeString(): 11ce.

   * *note PyUnicode_AsWideChar(): 1bd1.

   * *note PyUnicode_AsWideCharString(): 8c1.

   * *note PyUnicode_BuildEncodingMap(): 17e4.

   * *note PyUnicode_Compare(): 8bc.

   * *note PyUnicode_CompareWithASCIIString(): 12a9.

   * *note PyUnicode_Concat(): 11e0.

   * *note PyUnicode_Contains(): 4d99.

   * *note PyUnicode_Count(): 4d9a.

   * *note PyUnicode_Decode(): 1b59.

   * *note PyUnicode_DecodeASCII(): 4d9b.

   * *note PyUnicode_DecodeCharmap(): 4d9c.

   * *note PyUnicode_DecodeCodePageStateful(): 4d9d.

   * *note PyUnicode_DecodeFSDefault(): 180a.

   * *note PyUnicode_DecodeFSDefaultAndSize(): 4d9e.

   * *note PyUnicode_DecodeLatin1(): 4d9f.

   * *note PyUnicode_DecodeLocale(): 4da0.

   * *note PyUnicode_DecodeLocaleAndSize(): be2.

   * *note PyUnicode_DecodeMBCS(): 4da1.

   * *note PyUnicode_DecodeMBCSStateful(): 4da2.

   * *note PyUnicode_DecodeRawUnicodeEscape(): 4da3.

   * *note PyUnicode_DecodeUTF16(): 4da4.

   * *note PyUnicode_DecodeUTF16Stateful(): 4da5.

   * *note PyUnicode_DecodeUTF32(): 4da6.

   * *note PyUnicode_DecodeUTF32Stateful(): 4da7.

   * *note PyUnicode_DecodeUTF7(): 4da8.

   * *note PyUnicode_DecodeUTF7Stateful(): 4da9.

   * *note PyUnicode_DecodeUTF8(): 4daa.

   * *note PyUnicode_DecodeUTF8Stateful(): 189f.

   * *note PyUnicode_DecodeUnicodeEscape(): 4dab.

   * *note PyUnicode_EncodeCodePage(): 11d3.

   * *note PyUnicode_EncodeFSDefault(): 1bca.

   * *note PyUnicode_EncodeLocale(): be3.

   * *note PyUnicode_EqualToUTF8(): 377.

   * *note PyUnicode_EqualToUTF8AndSize(): 376.

   * *note PyUnicode_FSConverter(): d3b.

   * *note PyUnicode_FSDecoder(): 577.

   * *note PyUnicode_Find(): 4dac.

   * *note PyUnicode_FindChar(): 8be.

   * *note PyUnicode_Format(): 4dad.

   * *note PyUnicode_FromEncodedObject(): 4dae.

   * *note PyUnicode_FromFormat(): 38a.

   * *note PyUnicode_FromFormatV(): 574.

   * *note PyUnicode_FromObject(): 4daf.

   * *note PyUnicode_FromOrdinal(): 4db0.

   * *note PyUnicode_FromString(): 4db1.

   * *note PyUnicode_FromStringAndSize(): 4db2.

   * *note PyUnicode_FromWideChar(): 11cb.

   * *note PyUnicode_GetDefaultEncoding(): 4db3.

   * *note PyUnicode_GetLength(): 8b8.

   * *note PyUnicode_InternFromString(): 16ea.

   * *note PyUnicode_InternInPlace(): 8b6.

   * *note PyUnicode_IsIdentifier(): 1b15.

   * *note PyUnicode_Join(): 11e1.

   * *note PyUnicode_Partition(): 1655.

   * *note PyUnicode_RPartition(): 1656.

   * *note PyUnicode_RSplit(): 1654.

   * *note PyUnicode_ReadChar(): 11b0.

   * *note PyUnicode_Replace(): 4db4.

   * ‘PyUnicode_Resize()’

   * *note PyUnicode_RichCompare(): 4db5.

   * *note PyUnicode_Split(): 4db6.

   * *note PyUnicode_Splitlines(): 4db7.

   * *note PyUnicode_Substring(): 8bb.

   * *note PyUnicode_Tailmatch(): 8bd.

   * *note PyUnicode_Translate(): 4db8.

   * *note PyUnicode_Type: 4db9.

   * *note PyUnicode_WriteChar(): 11b1.

   * *note PyVarObject: 4384.

   * ‘PyVarObject.ob_base’

   * *note PyVarObject.ob_size: 4dba.

   * *note PyVectorcall_Call(): 556.

   * *note PyVectorcall_NARGS(): 555.

   * ‘PyWeakReference’

   * *note PyWeakref_GetObject(): 379.

   * *note PyWeakref_GetRef(): 378.

   * *note PyWeakref_NewProxy(): 4dbb.

   * *note PyWeakref_NewRef(): 196f.

   * *note PyWrapperDescr_Type: 4dbc.

   * *note PyWrapper_New(): 4dbd.

   * *note PyZip_Type: 4dbe.

   * *note Py_AUDIT_READ: 592.

   * *note Py_AddPendingCall(): 988.

   * *note Py_AtExit(): 4dbf.

   * *note Py_BEGIN_ALLOW_THREADS: 4b67.

   * *note Py_BLOCK_THREADS: 4dc0.

   * *note Py_BuildValue(): 8ac.

   * *note Py_BytesMain(): 9c9.

   * *note Py_CompileString(): 889.

   * *note Py_DecRef(): 4dc1.

   * *note Py_DecodeLocale(): be0.

   * *note Py_END_ALLOW_THREADS: a98.

   * *note Py_EncodeLocale(): be1.

   * *note Py_EndInterpreter(): 1985.

   * *note Py_EnterRecursiveCall(): 97a.

   * *note Py_Exit(): d72.

   * *note Py_FatalError(): 98a.

   * ‘Py_FileSystemDefaultEncodeErrors’

   * ‘Py_FileSystemDefaultEncoding’

   * *note Py_Finalize(): 13a0.

   * *note Py_FinalizeEx(): d37.

   * *note Py_GenericAlias(): 4dc2.

   * *note Py_GenericAliasType: 4dc3.

   * *note Py_GetBuildInfo(): 1479.

   * *note Py_GetCompiler(): 4dc4.

   * *note Py_GetConstant(): 354.

   * *note Py_GetConstantBorrowed(): 355.

   * *note Py_GetCopyright(): 4dc5.

   * *note Py_GetExecPrefix(): 3b1.

   * *note Py_GetPath(): 3b3.

   * *note Py_GetPlatform(): 4dc6.

   * *note Py_GetPrefix(): 3b5.

   * *note Py_GetProgramFullPath(): 3b7.

   * *note Py_GetProgramName(): 3b9.

   * *note Py_GetPythonHome(): 3ba.

   * *note Py_GetRecursionLimit(): 4dc7.

   * *note Py_GetVersion(): 4dc8.

   * ‘Py_HasFileSystemDefaultEncoding’

   * *note Py_IncRef(): 4dc9.

   * *note Py_Initialize(): 8b1.

   * *note Py_InitializeEx(): 4dca.

   * *note Py_Is(): 8a4.

   * *note Py_IsFalse(): 8a7.

   * *note Py_IsFinalizing(): 358.

   * *note Py_IsInitialized(): 4bea.

   * *note Py_IsNone(): 8a5.

   * *note Py_IsTrue(): 8a6.

   * *note Py_LeaveRecursiveCall(): 97b.

   * *note Py_Main(): c3f.

   * *note Py_MakePendingCalls(): 4dcb.

   * *note Py_NewInterpreter(): 18b9.

   * *note Py_NewRef(): 89e.

   * *note Py_READONLY: 591.

   * *note Py_RELATIVE_OFFSET: 54e.

   * *note Py_ReprEnter(): 4dcc.

   * *note Py_ReprLeave(): 4dcd.

   * *note Py_SetProgramName(): 172c.

   * *note Py_SetPythonHome(): 172b.

   * *note Py_SetRecursionLimit(): 4dce.

   * *note Py_TPFLAGS_BASETYPE: 4b7e.

   * *note Py_TPFLAGS_DEFAULT: 4b74.

   * *note Py_TPFLAGS_HAVE_GC: 77d.

   * *note Py_TPFLAGS_HAVE_VECTORCALL: 554.

   * *note Py_TPFLAGS_ITEMS_AT_END: 54b.

   * *note Py_TPFLAGS_METHOD_DESCRIPTOR: 4dcf.

   * *note Py_T_BOOL: 4dd0.

   * *note Py_T_BYTE: 4dd1.

   * *note Py_T_CHAR: 4dd2.

   * *note Py_T_DOUBLE: 590.

   * *note Py_T_FLOAT: 4dd3.

   * *note Py_T_INT: 58f.

   * *note Py_T_LONG: 4dd4.

   * *note Py_T_LONGLONG: 4dd5.

   * *note Py_T_OBJECT_EX: 594.

   * *note Py_T_PYSSIZET: 4dd6.

   * *note Py_T_SHORT: 4dd7.

   * *note Py_T_STRING: 4dd8.

   * *note Py_T_STRING_INPLACE: 4dd9.

   * *note Py_T_UBYTE: 4dda.

   * *note Py_T_UINT: 4ddb.

   * *note Py_T_ULONG: 4ddc.

   * *note Py_T_ULONGLONG: 4ddd.

   * *note Py_T_USHORT: 4dde.

   * *note Py_UCS4: 29b.

   * *note Py_UNBLOCK_THREADS: 4ddf.

   * ‘Py_UTF8Mode’

   * *note Py_VaBuildValue(): 4de0.

   * *note Py_Version: 756.

   * *note Py_XNewRef(): 89f.

   * *note Py_am_aiter: 4de1.

   * *note Py_am_anext: 4de2.

   * *note Py_am_await: 4de3.

   * *note Py_am_send: 4de4.

   * *note Py_bf_getbuffer: 4de5.

   * *note Py_bf_releasebuffer: 4de6.

   * *note Py_buffer: 758.

   * ‘Py_intptr_t’

   * *note Py_mod_create: 4de7.

   * *note Py_mod_exec: 985.

   * *note Py_mod_gil: 158.

   * *note Py_mod_multiple_interpreters: 4de8.

   * *note Py_mp_ass_subscript: 4de9.

   * *note Py_mp_length: 4dea.

   * *note Py_mp_subscript: 4deb.

   * *note Py_nb_absolute: 4dec.

   * *note Py_nb_add: 4ded.

   * *note Py_nb_and: 4dee.

   * *note Py_nb_bool: 4def.

   * *note Py_nb_divmod: 4df0.

   * *note Py_nb_float: 4df1.

   * *note Py_nb_floor_divide: 4df2.

   * *note Py_nb_index: 4df3.

   * *note Py_nb_inplace_add: 4df4.

   * *note Py_nb_inplace_and: 4df5.

   * *note Py_nb_inplace_floor_divide: 4df6.

   * *note Py_nb_inplace_lshift: 4df7.

   * *note Py_nb_inplace_matrix_multiply: 4df8.

   * *note Py_nb_inplace_multiply: 4df9.

   * *note Py_nb_inplace_or: 4dfa.

   * *note Py_nb_inplace_power: 4dfb.

   * *note Py_nb_inplace_remainder: 4dfc.

   * *note Py_nb_inplace_rshift: 4dfd.

   * *note Py_nb_inplace_subtract: 4dfe.

   * *note Py_nb_inplace_true_divide: 4dff.

   * *note Py_nb_inplace_xor: 4e00.

   * *note Py_nb_int: 4e01.

   * *note Py_nb_invert: 4e02.

   * *note Py_nb_lshift: 4e03.

   * *note Py_nb_matrix_multiply: 4e04.

   * *note Py_nb_multiply: 4e05.

   * *note Py_nb_negative: 4e06.

   * *note Py_nb_or: 4e07.

   * *note Py_nb_positive: 4e08.

   * *note Py_nb_power: 4e09.

   * *note Py_nb_remainder: 4e0a.

   * *note Py_nb_rshift: 4e0b.

   * *note Py_nb_subtract: 4e0c.

   * *note Py_nb_true_divide: 4e0d.

   * *note Py_nb_xor: 4e0e.

   * *note Py_sq_ass_item: 4e0f.

   * *note Py_sq_concat: 4e10.

   * *note Py_sq_contains: 4e11.

   * *note Py_sq_inplace_concat: 4e12.

   * *note Py_sq_inplace_repeat: 4e13.

   * *note Py_sq_item: 4e14.

   * *note Py_sq_length: 4e15.

   * *note Py_sq_repeat: 4e16.

   * *note Py_ssize_t: a69.

   * *note Py_tp_alloc: 4e17.

   * *note Py_tp_base: 4e18.

   * *note Py_tp_bases: 4e19.

   * *note Py_tp_call: 4e1a.

   * *note Py_tp_clear: 4e1b.

   * *note Py_tp_dealloc: 4e1c.

   * *note Py_tp_del: 4e1d.

   * *note Py_tp_descr_get: 4e1e.

   * *note Py_tp_descr_set: 4e1f.

   * *note Py_tp_doc: 4e20.

   * *note Py_tp_finalize: 4e21.

   * *note Py_tp_free: 4e22.

   * *note Py_tp_getattr: 4e23.

   * *note Py_tp_getattro: 4e24.

   * *note Py_tp_getset: 4e25.

   * *note Py_tp_hash: 4e26.

   * *note Py_tp_init: 4e27.

   * *note Py_tp_is_gc: 4e28.

   * *note Py_tp_iter: 4e29.

   * *note Py_tp_iternext: 4e2a.

   * *note Py_tp_members: 4e2b.

   * *note Py_tp_methods: 4e2c.

   * *note Py_tp_new: 4e2d.

   * *note Py_tp_repr: 4e2e.

   * *note Py_tp_richcompare: 4e2f.

   * *note Py_tp_setattr: 4e30.

   * *note Py_tp_setattro: 4e31.

   * *note Py_tp_str: 4e32.

   * *note Py_tp_traverse: 4e33.

   * ‘Py_uintptr_t’

   * *note allocfunc: 4e34.

   * *note binaryfunc: 4e35.

   * *note descrgetfunc: 4e36.

   * *note descrsetfunc: 4e37.

   * *note destructor: 4e38.

   * *note getattrfunc: 4e39.

   * *note getattrofunc: 4e3a.

   * *note getbufferproc: 4e3b.

   * *note getiterfunc: 4e3c.

   * *note getter: 4e3d.

   * *note hashfunc: 4e3e.

   * *note initproc: 4e3f.

   * *note inquiry: 4e40.

   * *note iternextfunc: 4e41.

   * *note lenfunc: 4e42.

   * *note newfunc: 4e43.

   * *note objobjargproc: 4e44.

   * *note objobjproc: 4e45.

   * *note releasebufferproc: 4e46.

   * *note reprfunc: 4e47.

   * *note richcmpfunc: 4e48.

   * *note setattrfunc: 4e49.

   * *note setattrofunc: 4e4a.

   * *note setter: 4e4b.

   * *note ssizeargfunc: 4e4c.

   * *note ssizeobjargproc: 4e4d.

   * ‘ssizessizeargfunc’

   * ‘ssizessizeobjargproc’

   * ‘symtable’

   * *note ternaryfunc: 4e4e.

   * *note traverseproc: 4e4f.

   * *note unaryfunc: 4e50.

   * *note vectorcallfunc: 557.

   * *note visitproc: 4e51.


File: python.info,  Node: A camada de nível muito alto,  Next: Contagem de referências,  Prev: Estabilidade da API C,  Up: Manual de referência da API Python/C

7.3 A camada de nível muito alto
================================

As funções neste capítulo permitirão que você execute um código-fonte
Python fornecido em um arquivo ou buffer, mas não permitirão que você
interaja de forma mais detalhada com o interpretador.

Várias dessas funções aceitam um símbolo de início da gramática como
parâmetro.  Os símbolos de início disponíveis são *note Py_eval_input:
4e56, *note Py_file_input: 4e57. e *note Py_single_input: 4e58. e *note
Py_func_type_input: 4e59.  Eles são descritos seguindo as funções que os
aceitam como parâmetros.

Note também que várias dessas funções aceitam parâmetros FILE*.  Um
problema específico que precisa ser tratado com cuidado é que a
estrutura ‘FILE’ para diferentes bibliotecas C pode ser diferente e
incompatível.  No Windows (pelo menos), é possível que extensões
vinculadas dinamicamente usem bibliotecas diferentes, então deve-se
tomar cuidado para que os parâmetros FILE* sejam passados para essas
funções somente se for certo que elas foram criadas pela mesma
biblioteca que o tempo de execução do Python está usando.

 -- C Função: int PyRun_AnyFile (FILE *fp, const char *filename)

     Esta é uma interface simplificada para *note
     PyRun_AnyFileExFlags(): 4e5b. abaixo, deixando 'closeit' definido
     como ‘0’ e 'flags' definido como ‘NULL’.

 -- C Função: int PyRun_AnyFileFlags (FILE *fp, const char *filename,
          PyCompilerFlags *flags)

     Esta é uma interface simplificada para *note
     PyRun_AnyFileExFlags(): 4e5b. abaixo, deixando o argumento
     'closeit' definido como ‘0’.

 -- C Função: int PyRun_AnyFileEx (FILE *fp, const char *filename, int
          closeit)

     Esta é uma interface simplificada para *note
     PyRun_AnyFileExFlags(): 4e5b. abaixo, deixando o argumento 'flags'
     definido como ‘NULL’.

 -- C Função: int PyRun_AnyFileExFlags (FILE *fp, const char *filename,
          int closeit, PyCompilerFlags *flags)

     Se 'fp' se referir a um arquivo associado a um dispositivo
     interativo (entrada de console ou terminal ou pseudo-terminal
     Unix), retorna o valor de *note PyRun_InteractiveLoop(): 4e5e, caso
     contrário, retorna o resultado de *note PyRun_SimpleFile(): 4bb6.
     'filename' é decodificado da codificação do sistema de arquivos
     (*note sys.getfilesystemencoding(): c74.).  Se 'filename' for
     ‘NULL’, esta função usa ‘"???"’ como o nome do arquivo.  Se
     'closeit' for verdadeiro, o arquivo será fechado antes de
     ‘PyRun_SimpleFileExFlags()’ retornar.

 -- C Função: int PyRun_SimpleString (const char *command)

     Esta é uma interface simplificada para *note
     PyRun_SimpleStringFlags(): 4e5f. abaixo, deixando o argumento *note
     PyCompilerFlags: ab0.* definido como ‘NULL’.

 -- C Função: int PyRun_SimpleStringFlags (const char *command,
          PyCompilerFlags *flags)

     Executa o código-fonte Python de 'command' no módulo *note
     __main__: 1. de acordo com o argumento 'flags'.  Se *note __main__:
     1. ainda não existir, ele será criado.  Retorna ‘0’ em caso de
     sucesso ou ‘-1’ se uma exceção foi gerada.  Se houve um erro, não
     há como obter as informações da exceção.  Para o significado de
     'flags', veja abaixo.

     Observe que se uma exceção *note SystemExit: d63. não tratada for
     levantada, esta função não retornará ‘-1’, mas sairá do processo,
     desde que *note PyConfig.inspect: 3cf. seja zero.

 -- C Função: int PyRun_SimpleFile (FILE *fp, const char *filename)

     Esta é uma interface simplificada para *note
     PyRun_SimpleFileExFlags(): 1a56. abaixo, deixando 'closeit'
     definido como ‘0’ e 'flags' definido como ‘NULL’.

 -- C Função: int PyRun_SimpleFileEx (FILE *fp, const char *filename,
          int closeit)

     Esta é uma interface simplificada para *note
     PyRun_SimpleFileExFlags(): 1a56. abaixo, deixando o 'flags'
     definido como ‘NULL’.

 -- C Função: int PyRun_SimpleFileExFlags (FILE *fp, const char
          *filename, int closeit, PyCompilerFlags *flags)

     Semelhante a *note PyRun_SimpleStringFlags(): 4e5f, mas o
     código-fonte Python é lido de 'fp' em vez de uma string na memória.
     'filename' deve ser o nome do arquivo, ele é decodificado a partir
     do *note tratador de erros e codificação do sistema de arquivos:
     53b.  Se 'closeit' for true, o arquivo será fechado antes que
     ‘PyRun_SimpleFileExFlags()’ retorne.

          Nota: No Windows, 'fp' deve ser aberto como modo binário (por
          exemplo, ‘fopen(filename, "rb")’).  Caso contrário, o Python
          pode não manipular corretamente o arquivo de script com final
          de linha LF.

 -- C Função: int PyRun_InteractiveOneObject (FILE *fp, PyObject
          *filename, PyCompilerFlags *flags)

     Lê e executa uma única instrução de um arquivo associado a um
     dispositivo interativo de acordo com o argumento 'flags'.  O
     usuário será solicitado usando ‘sys.ps1’ e ‘sys.ps2’.  'filename'
     deve ser um objeto *note str: 44c. Python.

     Retorna ‘0’ quando a entrada foi executada com sucesso, ‘-1’ se
     houve uma exceção ou um código de erro do arquivo de inclusão
     ‘errcode.h’ distribuído como parte do Python se houve um erro de
     análise.  (Observe que ‘errcode.h’ não é incluído por ‘Python.h’,
     então deve ser incluído especificamente se necessário.)

 -- C Função: int PyRun_InteractiveOne (FILE *fp, const char *filename)

     Esta é uma interface simplificada para *note
     PyRun_InteractiveOneFlags(): 4e63. abaixo, deixando 'flags'
     definido como ‘NULL’.

 -- C Função: int PyRun_InteractiveOneFlags (FILE *fp, const char
          *filename, PyCompilerFlags *flags)

     Semelhante a *note PyRun_InteractiveOneObject(): 4e61, mas
     'filename' é um const char*, que é decodificado a partir do *note
     tratador de erros e codificação do sistema de arquivos: 53b.

 -- C Função: int PyRun_InteractiveLoop (FILE *fp, const char *filename)

     Esta é uma interface simplificada para *note
     PyRun_InteractiveLoopFlags(): 4e64. abaixo, deixando 'flags'
     definido como ‘NULL’.

 -- C Função: int PyRun_InteractiveLoopFlags (FILE *fp, const char
          *filename, PyCompilerFlags *flags)

     Lê e executa instruções de um arquivo associado a um dispositivo
     interativo até que o EOF seja atingido.  O usuário será consultado
     usando ‘sys.ps1’ e ‘sys.ps2’.  'filename' é decodificado a partir
     do *note tratador de erros e codificação do sistema de arquivos:
     53b.  Retorna ‘0’ no EOF ou um número negativo em caso de falha.

 -- C Variável: int (*PyOS_InputHook)(void)
     ' Parte da *note ABI Estável: 553.'  Pode ser definido para apontar
     para uma função com o protótipo ‘int func(void)’.  A função será
     chamada quando o prompt do interpretador do Python estiver prestes
     a ficar ocioso e aguardar a entrada do usuário no terminal.  O
     valor de retorno é ignorado.  A substituição deste hook pode ser
     usada para integrar o prompt do interpretador com outros laços de
     eventos, como feito em ‘Modules/_tkinter.c’ no código-fonte do
     Python.

     Alterado na versão 3.12: Esta função só é chamada pelo *note
     interpretador principal: 587.

 -- C Variável: char *(*PyOS_ReadlineFunctionPointer)(FILE*, FILE*,
          const char*)

     Pode ser definido para apontar para uma função com o protótipo
     ‘char *func(FILE *stdin, FILE *stdout, char *prompt)’, substituindo
     a função padrão usada para ler uma única linha de entrada no prompt
     do interpretador.  Espera-se que a função produza a string 'prompt'
     se não for ‘NULL’ e, em seguida, leia uma linha de entrada do
     arquivo de entrada padrão fornecido, retornando a string
     resultante.  Por exemplo, o módulo *note readline: ba. define este
     gancho para fornecer recursos de edição de linha e preenchimento de
     tabulação.

     O resultado deve ser uma string alocada por *note
     PyMem_RawMalloc(): 390. ou *note PyMem_RawRealloc(): 392, ou ‘NULL’
     se ocorrer um erro.

     Alterado na versão 3.4: O resultado deve ser alocado por *note
     PyMem_RawMalloc(): 390. ou *note PyMem_RawRealloc(): 392, em vez de
     ser alocado por *note PyMem_Malloc(): c81. ou *note
     PyMem_Realloc(): 106a.

     Alterado na versão 3.12: Esta função só é chamada pelo *note
     interpretador principal: 587.

 -- C Função: *note PyObject: 339. *PyRun_String (const char *str, int
          start, PyObject *globals, PyObject *locals)
     'Retorna valor: Nova referência.'  Esta é uma interface
     simplificada para *note PyRun_StringFlags(): 4e65. abaixo, deixando
     'flags' definido como ‘NULL’.

 -- C Função: *note PyObject: 339. *PyRun_StringFlags (const char *str,
          int start, PyObject *globals, PyObject *locals,
          PyCompilerFlags *flags)
     'Retorna valor: Nova referência.'  Execut o código-fonte Python de
     'str' no contexto especificado pelos objetos 'globals' e 'locals'
     com os sinalizadores do compilador especificados por 'flags'.
     'globals' deve ser um dicionário; 'locals' pode ser qualquer objeto
     que implemente o protocolo de mapeamento.  O parâmetro 'start'
     especifica o símbolo inicial e deve ser um dos *note símbolos
     iniciais disponíveis: 4e66.

     Retorna o resultado da execução do código como um objeto Python, ou
     ‘NULL’ se uma exceção foi levantada.

 -- C Função: *note PyObject: 339. *PyRun_File (FILE *fp, const char
          *filename, int start, PyObject *globals, PyObject *locals)
     'Retorna valor: Nova referência.'  Esta é uma interface
     simplificada para *note PyRun_FileExFlags(): 4e68. abaixo, deixando
     'closeit' definido como ‘0’ e 'flags' definido como ‘NULL’.

 -- C Função: *note PyObject: 339. *PyRun_FileEx (FILE *fp, const char
          *filename, int start, PyObject *globals, PyObject *locals, int
          closeit)
     'Retorna valor: Nova referência.'  Esta é uma interface
     simplificada para *note PyRun_FileExFlags(): 4e68. abaixo, deixando
     'flags' definido como ‘NULL’.

 -- C Função: *note PyObject: 339. *PyRun_FileFlags (FILE *fp, const
          char *filename, int start, PyObject *globals, PyObject
          *locals, PyCompilerFlags *flags)
     'Retorna valor: Nova referência.'  Esta é uma interface
     simplificada para *note PyRun_FileExFlags(): 4e68. abaixo, deixando
     'closeit' definido como ‘0’.

 -- C Função: *note PyObject: 339. *PyRun_FileExFlags (FILE *fp, const
          char *filename, int start, PyObject *globals, PyObject
          *locals, int closeit, PyCompilerFlags *flags)
     'Retorna valor: Nova referência.'  Semelhante a *note
     PyRun_StringFlags(): 4e65, mas o código-fonte Python é lido de 'fp'
     em vez de uma string na memória.  'filename' deve ser o nome do
     arquivo, ele é decodificado a partir do *note tratador de erros e
     codificação do sistema de arquivos: 53b.  Se 'closeit' for true, o
     arquivo será fechado antes que *note PyRun_FileExFlags(): 4e68.
     retorne.

 -- C Função: *note PyObject: 339. *Py_CompileString (const char *str,
          const char *filename, int start)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Esta é uma interface simplificada para *note
     Py_CompileStringFlags(): 4e6b. abaixo, deixando 'flags' definido
     como ‘NULL’.

 -- C Função: *note PyObject: 339. *Py_CompileStringFlags (const char
          *str, const char *filename, int start, PyCompilerFlags *flags)
     'Retorna valor: Nova referência.'  Esta é uma interface
     simplificada para *note Py_CompileStringExFlags(): 4e6c. abaixo,
     com 'optimize' definido como ‘-1’.

 -- C Função: *note PyObject: 339. *Py_CompileStringObject (const char
          *str, PyObject *filename, int start, PyCompilerFlags *flags,
          int optimize)
     'Retorna valor: Nova referência.'  Analisa e compila o código-fonte
     Python em 'str', retornando o objeto de código resultante.  O
     símbolo inicial é fornecido por 'start'; isso pode ser usado para
     restringir o código que pode ser compilado e deve ser *note
     símbolos iniciais disponíveis: 4e66.  O nome do arquivo
     especificado por 'filename' é usado para construir o objeto de
     código e pode aparecer em tracebacks ou mensagens de exceção *note
     SyntaxError: 18d.  Isso retorna ‘NULL’ se o código não puder ser
     analisado ou compilado.

     O inteiro 'optimize' especifica o nível de otimização do
     compilador; um valor de ‘-1’ seleciona o nível de otimização do
     interpretador dado pela opção *note -O: ddd.  Níveis explícitos são
     ‘0’ (nenhuma otimização; ‘__debug__’ é verdadeiro), ‘1’ (instruções
     ‘assert’ são removidas, ‘__debug__’ é falso) ou ‘2’ (strings de
     documentação também são removidas).

     Adicionado na versão 3.4.

 -- C Função: *note PyObject: 339. *Py_CompileStringExFlags (const char
          *str, const char *filename, int start, PyCompilerFlags *flags,
          int optimize)
     'Retorna valor: Nova referência.'  Como *note
     Py_CompileStringObject(): 4e6d, mas 'filename' é uma string de
     bytes decodificada a partir do *note tratador de erros e
     codificação do sistema de arquivos: 53b.

     Adicionado na versão 3.2.

 -- C Função: *note PyObject: 339. *PyEval_EvalCode (PyObject *co,
          PyObject *globals, PyObject *locals)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Esta é uma interface simplificada para *note
     PyEval_EvalCodeEx(): 1862, com apenas o objeto código e variáveis
     locais e globais.  Os outros argumentos são definidos como ‘NULL’.

 -- C Função: *note PyObject: 339. *PyEval_EvalCodeEx (PyObject *co,
          PyObject *globals, PyObject *locals, PyObject *const *args,
          int argcount, PyObject *const *kws, int kwcount, PyObject
          *const *defs, int defcount, PyObject *kwdefs, PyObject
          *closure)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Avalia um objeto código pré-compilado, dado um ambiente
     particular para sua avaliação.  Este ambiente consiste em um
     dicionário de variáveis globais, um objeto mapeamento de variáveis
     locais, vetores de argumentos, nomeados e padrões, um dicionário de
     valores padrões para argumentos *note somente-nomeados: 2a5. e uma
     tupla de clausura de células.

 -- C Função: *note PyObject: 339. *PyEval_EvalFrame (PyFrameObject *f)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Avalia um quadro de execução.  Esta é uma interface
     simplificada para *note PyEval_EvalFrameEx(): 1066, para
     retrocompatibilidade.

 -- C Função: *note PyObject: 339. *PyEval_EvalFrameEx (PyFrameObject
          *f, int throwflag)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Esta é a função principal e sem retoques da interpretação
     Python.  O objeto código associado ao quadro de execução 'f' é
     executado, interpretando bytecode e executando chamadas conforme
     necessário.  O parâmetro adicional 'throwflag' pode ser ignorado na
     maioria das vezes - se verdadeiro, ele faz com que uma exceção seja
     levantada imediatamente; isso é usado para os métodos *note
     throw(): 4f8. de objetos geradores.

     Alterado na versão 3.4: Essa função agora inclui uma asserção de
     depuração para ajudar a garantir que ela não descarte
     silenciosamente uma exceção ativa.

 -- C Função: int PyEval_MergeCompilerFlags (PyCompilerFlags *cf)

     Esta função altera os sinalizadores do quadro de avaliação atual e
     retorna verdadeiro em caso de sucesso e falso em caso de falha.

 -- C Struct: struct PyCompilerFlags

     Esta é a estrutura usada para manter os sinalizadores do
     compilador.  Em casos onde o código está apenas sendo compilado,
     ele é passado como ‘int flags’, e em casos onde o código está sendo
     executado, ele é passado como ‘PyCompilerFlags *flags’.  Neste
     caso, ‘from __future__ import’ pode modificar 'flags'.

     Sempre que ‘PyCompilerFlags *flags’ for ‘NULL’, *note cf_flags:
     4e6f. é tratado como igual a ‘0’, e qualquer modificação devido a
     ‘from __future__ import’ é descartada.

      -- C Membro: int cf_flags

          Sinalizadores do compilador.

      -- C Membro: int cf_feature_version

          'cf_feature_version' é a versão secundária do Python.  Deve
          ser inicializada como ‘PY_MINOR_VERSION’.

          O campo é ignorado por padrão, ele é usado se e somente se o
          sinalizador ‘PyCF_ONLY_AST’ estiver definido em *note
          cf_flags: 4e6f.

     Alterado na versão 3.8: Adicionado campo 'cf_feature_version'.

     Os sinalizadores do compilador disponíveis são acessíveis como
     macros:

      -- C Macro: PyCF_ALLOW_TOP_LEVEL_AWAIT
      -- C Macro: PyCF_ONLY_AST
      -- C Macro: PyCF_OPTIMIZED_AST
      -- C Macro: PyCF_TYPE_COMMENTS

          Veja *note sinalizadores do compilador: 22fc. na documentação
          do módulo Python ‘ast’, que exporta essas constantes com os
          mesmos nomes.

     Os sinalizadores “‘PyCF’” acima podem ser combinados com
     sinalizadores “‘CO_FUTURE’”, como *note CO_FUTURE_ANNOTATIONS:
     4e75, para habilitar recursos normalmente selecionáveis usando
     *note instruções future: 189.  Consulte *note Sinalizadores de
     objetos código: 4e76. para obter uma lista completa.

* Menu:

* Símbolos iniciais disponíveis::
* Stack Effects::


File: python.info,  Node: Símbolos iniciais disponíveis,  Next: Stack Effects,  Up: A camada de nível muito alto

7.3.1 Símbolos iniciais disponíveis
-----------------------------------

 -- C Variável: int Py_eval_input

     O símbolo inicial da gramática Python para expressões isoladas;
     para uso com *note Py_CompileString(): 889.

 -- C Variável: int Py_file_input

     O símbolo de início da gramática Python para sequências de
     instruções conforme lidas de um arquivo ou outra fonte; para uso
     com *note Py_CompileString(): 889.  Este é o símbolo a ser usado ao
     compilar código-fonte Python arbitrariamente longo.

 -- C Variável: int Py_single_input

     O símbolo de início da gramática Python para uma única declaração;
     para uso com *note Py_CompileString(): 889.  Este é o símbolo usado
     para o laço do interpretador interativo.

 -- C Variável: int Py_func_type_input

     O símbolo inicial da gramática Python para um tipo de função; para
     uso com *note Py_CompileString(): 889.  É usado para analisar
     “comentários de tipo de assinatura” de PEP 484(1).

     Isso requer que o sinalizador *note PyCF_ONLY_AST: 4e72. seja
     definido.

     Ver também
     ..........

        * *note ast.FunctionType: 4805.

        * PEP 484(2)

     Adicionado na versão 3.8.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/

   (2) https://peps.python.org/pep-0484/


File: python.info,  Node: Stack Effects,  Prev: Símbolos iniciais disponíveis,  Up: A camada de nível muito alto

7.3.2 Stack Effects
-------------------

Ver também
..........

*note dis.stack_effect(): f64.

 -- C Macro: PY_INVALID_STACK_EFFECT

     Sentinel value representing an invalid stack effect.

     This is currently equivalent to ‘INT_MAX’.

     Adicionado na versão 3.8.

 -- C Função: int PyCompile_OpcodeStackEffect (int opcode, int oparg)

     Calcula o efeito que o 'opcode' com argumento 'oparg' tem na pilha.

     On success, this function returns the stack effect; on failure,
     this returns *note PY_INVALID_STACK_EFFECT: 4e79.

     Adicionado na versão 3.4.

 -- C Função: int PyCompile_OpcodeStackEffectWithJump (int opcode, int
          oparg, int jump)

     Similar to *note PyCompile_OpcodeStackEffect(): 4e7a, but don’t
     include the stack effect of jumping if 'jump' is zero.

     If 'jump' is ‘0’, this will not include the stack effect of
     jumping, but if 'jump' is ‘1’ or ‘-1’, this will include it.

     On success, this function returns the stack effect; on failure,
     this returns *note PY_INVALID_STACK_EFFECT: 4e79.

     Adicionado na versão 3.8.


File: python.info,  Node: Contagem de referências,  Next: Tratamento de exceções<2>,  Prev: A camada de nível muito alto,  Up: Manual de referência da API Python/C

7.4 Contagem de referências
===========================

As funções e macros nesta sessão são usadas para o gerenciamento de
contagem de referências de objetos Python.

 -- C Função: *note Py_ssize_t: a69. Py_REFCNT (PyObject *o)

     Obtêm a contagem de referências do objeto Python 'o'.

     Observe que o valor retornado pode não refletir realmente quantas
     referências ao objeto são realmente mantidas.  Por exemplo, alguns
     objetos são *note imortais: 45bb. e têm uma contagem de referências
     muito alta, que não reflete o número real de referências.
     Consequentemente, não confie no valor retornado para ser preciso,
     exceto um valor de 0 ou 1.

     Use a função *note Py_SET_REFCNT(): 8af. para definir uma contagem
     de referências de um objeto.

     Alterado na versão 3.10: *note Py_REFCNT(): 8ae. is changed to the
     inline static function.

     Alterado na versão 3.11: The parameter type is no longer const
     *note PyObject: 339.*.

 -- C Função: void Py_SET_REFCNT (PyObject *o, Py_ssize_t refcnt)

     Set the object 'o' reference counter to 'refcnt'.

     Em uma *note construção do Python com threads threads livres: 1f00,
     se 'refcnt' for maior que ‘UINT32_MAX’, o objeto será transformado
     em *note imortal: 45bb.

     Esta função não tem efeito sobre objetos *note imortais: 45bb.

     Adicionado na versão 3.9.

     Alterado na versão 3.12: Os objetos imortais não são modificados.

 -- C Função: void Py_INCREF (PyObject *o)

     Indicate taking a new *note strong reference: 33d. to object 'o',
     indicating it is in use and should not be destroyed.

     Esta função não tem efeito sobre objetos *note imortais: 45bb.

     Esta função é geralmente usada para transformar uma *note
     referência emprestada: 33e. em uma *note referência forte: 33d.
     local.  A função *note Py_NewRef(): 89e. pode ser usada para criar
     uma nova *note referência forte: 33d.

     When done using the object, release is by calling *note
     Py_DECREF(): 56f.

     The object must not be ‘NULL’; if you aren’t sure that it isn’t
     ‘NULL’, use *note Py_XINCREF(): a6e.

     Do not expect this function to actually modify 'o' in any way.  For
     at least some objects(1), this function has no effect.

     Alterado na versão 3.12: Os objetos imortais não são modificados.

 -- C Função: void Py_XINCREF (PyObject *o)

     Semelhante a *note Py_INCREF(): 56e, mas o objeto 'o' pode ser
     ‘NULL’, caso em que isso não tem efeito.

     Veja também *note Py_XNewRef(): 89f.

 -- C Função: *note PyObject: 339. *Py_NewRef (PyObject *o)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Create a
     new *note strong reference: 33d. to an object: call *note
     Py_INCREF(): 56e. on 'o' and return the object 'o'.

     When the *note strong reference: 33d. is no longer needed, *note
     Py_DECREF(): 56f. should be called on it to release the reference.

     The object 'o' must not be ‘NULL’; use *note Py_XNewRef(): 89f. if
     'o' can be ‘NULL’.

     Por exemplo:

          Py_INCREF(obj);
          self->attr = obj;

     can be written as:

          self->attr = Py_NewRef(obj);

     See also *note Py_INCREF(): 56e.

     Adicionado na versão 3.10.

 -- C Função: *note PyObject: 339. *Py_XNewRef (PyObject *o)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'
     Semelhante a *note Py_NewRef(): 89e, mas o objeto 'o' pode ser
     NULL.

     Se o objeto 'o' é ‘NULL’, a função apenas retorna ‘NULL’.

     Adicionado na versão 3.10.

 -- C Função: void Py_DECREF (PyObject *o)

     Release a *note strong reference: 33d. to object 'o', indicating
     the reference is no longer used.

     Esta função não tem efeito sobre objetos *note imortais: 45bb.

     Once the last *note strong reference: 33d. is released (i.e.  the
     object’s reference count reaches 0), the object’s type’s
     deallocation function (which must not be ‘NULL’) is invoked.

     This function is usually used to delete a *note strong reference:
     33d. before exiting its scope.

     The object must not be ‘NULL’; if you aren’t sure that it isn’t
     ‘NULL’, use *note Py_XDECREF(): 78f.

     Do not expect this function to actually modify 'o' in any way.  For
     at least some objects(2), this function has no effect.

          Aviso: The deallocation function can cause arbitrary Python
          code to be invoked (e.g.  when a class instance with a *note
          __del__(): 1033. method is deallocated).  While exceptions in
          such code are not propagated, the executed code has free
          access to all Python global variables.  This means that any
          object that is reachable from a global variable should be in a
          consistent state before *note Py_DECREF(): 56f. is invoked.
          For example, code to delete an object from a list should copy
          a reference to the deleted object in a temporary variable,
          update the list data structure, and then call *note
          Py_DECREF(): 56f. for the temporary variable.

     Alterado na versão 3.12: Os objetos imortais não são modificados.

 -- C Função: void Py_XDECREF (PyObject *o)

     Similar to *note Py_DECREF(): 56f, but the object 'o' can be
     ‘NULL’, in which case this has no effect.  The same warning from
     *note Py_DECREF(): 56f. applies here as well.

 -- C Função: void Py_CLEAR (PyObject *o)

     Release a *note strong reference: 33d. for object 'o'.  The object
     may be ‘NULL’, in which case the macro has no effect; otherwise the
     effect is the same as for *note Py_DECREF(): 56f, except that the
     argument is also set to ‘NULL’.  The warning for *note Py_DECREF():
     56f. does not apply with respect to the object passed because the
     macro carefully uses a temporary variable and sets the argument to
     ‘NULL’ before releasing the reference.

     It is a good idea to use this macro whenever releasing a reference
     to an object that might be traversed during garbage collection.

     Alterado na versão 3.12: The macro argument is now only evaluated
     once.  If the argument has side effects, these are no longer
     duplicated.

 -- C Função: void Py_IncRef (PyObject *o)
     ' Parte da *note ABI Estável: 553.'  Indicate taking a new *note
     strong reference: 33d. to object 'o'.  A function version of *note
     Py_XINCREF(): a6e.  It can be used for runtime dynamic embedding of
     Python.

 -- C Função: void Py_DecRef (PyObject *o)
     ' Parte da *note ABI Estável: 553.'  Release a *note strong
     reference: 33d. to object 'o'.  A function version of *note
     Py_XDECREF(): 78f.  It can be used for runtime dynamic embedding of
     Python.

 -- C Macro: Py_SETREF (dst, src)

     Macro safely releasing a *note strong reference: 33d. to object
     'dst' and setting 'dst' to 'src'.

     As in case of *note Py_CLEAR(): 578, “the obvious” code can be
     deadly:

          Py_DECREF(dst);
          dst = src;

     The safe way is:

          Py_SETREF(dst, src);

     That arranges to set 'dst' to 'src' 'before' releasing the
     reference to the old value of 'dst', so that any code triggered as
     a side-effect of 'dst' getting torn down no longer believes 'dst'
     points to a valid object.

     Adicionado na versão 3.6.

     Alterado na versão 3.12: The macro arguments are now only evaluated
     once.  If an argument has side effects, these are no longer
     duplicated.

 -- C Macro: Py_XSETREF (dst, src)

     Variant of *note Py_SETREF: 579. macro that uses *note
     Py_XDECREF(): 78f. instead of *note Py_DECREF(): 56f.

     Adicionado na versão 3.6.

     Alterado na versão 3.12: The macro arguments are now only evaluated
     once.  If an argument has side effects, these are no longer
     duplicated.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0683/

   (2) https://peps.python.org/pep-0683/


File: python.info,  Node: Tratamento de exceções<2>,  Next: Utilitários<2>,  Prev: Contagem de referências,  Up: Manual de referência da API Python/C

7.5 Tratamento de exceções
==========================

As funções descritas nesse capítulo permitem você tratar e gerar
exceções em Python.  É importante entender alguns princípios básicos no
tratamento de exceções no Python.  Funciona de forma parecida com a
variável POSIX ‘errno’: existe um indicador global (por thread) do
último erro ocorrido.  A maioria das funções da API C não o zera ao
obter sucesso, mas o define para indicar a causa do erro ao falhar.  A
maioria das funções da API retorna um indicador de erro, geralmente,
‘NULL’ se eles devem retornar um ponteiro, ou ‘-1’ se retornarem um
inteiro (exceção: as funções ‘PyArg_*’ retornam ‘1’ para sucesso e ‘0’
para falha).

De forma concreta, o indicador de erro consiste em três ponteiros de
objeto: o tipo da exceção, o valor da exceção e o objeto de traceback.
Qualquer um desses ponteiros pode ser ‘NULL’ se não definido (embora
algumas combinações sejam proibidas, por exemplo, você não pode ter um
retorno não ‘NULL’ se o tipo de exceção for ‘NULL’).

Quando uma função deve falhar porque devido à falha de alguma função que
ela chamou, ela geralmente não define o indicador de erro; a função que
ela chamou já o definiu.  Ela é responsável por manipular o erro e
limpar a exceção ou retornar após limpar todos os recursos que possui
(como referências a objetos ou alocações de memória); ela 'não' deve
continuar normalmente se não estiver preparada para lidar com o erro.
Se estiver retornando devido a um erro, é importante indicar ao chamador
que um erro foi definido.  Se o erro não for manipulado ou propagado com
cuidado, chamadas adicionais para a API Python/C podem não se comportar
conforme o esperado e podem falhar de maneiras misteriosas.

     Nota: O indicador de erro 'não' é resultado de *note
     sys.exc_info(): 68a.  O primeiro corresponde a uma exceção que
     ainda não foi capturada (e, portanto, ainda está se propagando),
     enquanto o segundo retorna uma exceção após ser capturada (e,
     portanto, parou de se propagar).

* Menu:

* Impressão e limpeza::
* Levantando exceções: Levantando exceções<2>.
* Emitindo avisos::
* Consultando o indicador de erro::
* Tratamento de sinal: Tratamento de sinal<2>.
* Classes de exceção::
* Objeto Exceção::
* Objetos de exceção Unicode::
* Controle de recursão::
* Exception and warning types::
* Tracebacks::


File: python.info,  Node: Impressão e limpeza,  Next: Levantando exceções<2>,  Up: Tratamento de exceções<2>

7.5.1 Impressão e limpeza
-------------------------

 -- C Função: void PyErr_Clear ()
     ' Parte da *note ABI Estável: 553.'  Limpe o indicador de erro.  Se
     o indicador de erro não estiver definido, não haverá efeito.

 -- C Função: void PyErr_PrintEx (int set_sys_last_vars)
     ' Parte da *note ABI Estável: 553.'  Exibe um traceback padrão para
     ‘sys.stderr’ e limpe o indicador de erro.  'A menos que' o erro
     seja um ‘SystemExit’, nesse caso, nenhum traceback será impresso e
     o processo Python será encerrado com o código de erro especificado
     pela instância ‘SystemExit’.

     Chame esta função 'apenas' quando o indicador de erro estiver
     definido.  Caso contrário, causará um erro fatal!

     Se 'set_sys_last_vars' for diferente de zero, a variável *note
     sys.last_exc: 4be. será definida com a exceção exibida.  Para
     manter a retrocompatibilidade, as variáveis descontinuadas *note
     sys.last_type: 4bf, *note sys.last_value: 4c0. e *note
     sys.last_traceback: 4c1. também serão definidas com o tipo, valor e
     traceback dessa exceção, respectivamente.

     Alterado na versão 3.12: A configuração de *note sys.last_exc: 4be.
     foi adicionada.

 -- C Função: void PyErr_Print ()
     ' Parte da *note ABI Estável: 553.'  Apelido para
     ‘PyErr_PrintEx(1)’.

 -- C Função: void PyErr_WriteUnraisable (PyObject *obj)
     ' Parte da *note ABI Estável: 553.'  Chama *note
     sys.unraisablehook(): 1f7. usando a exceção atual e o argumento
     'obj'.

     Esta função utilitária imprime uma mensagem de aviso para
     ‘sys.stderr’ quando uma exceção foi definida, mas é impossível para
     o interpretador realmente gerar a exceção.  É usada, por exemplo,
     quando ocorre uma exceção em um método *note __del__(): 1033.

     A função é chamada com um único argumento 'obj' que identifica o
     contexto em que ocorreu a exceção não gerável.  Se possível, o repr
     de 'obj' será impresso na mensagem de aviso.  Se 'obj' for ‘NULL’,
     apenas o traceback será impresso.

     Uma exceção deve ser definida ao chamar essa função.

     Alterado na versão 3.4: Exibe o traceback (situação da pilha de
     execução).  Exibe apenas o traceback se 'obj' for ‘NULL’.

     Alterado na versão 3.8: Utiliza *note sys.unraisablehook(): 1f7.

 -- C Função: void PyErr_FormatUnraisable (const char *format, ...)

     Similar a *note PyErr_WriteUnraisable(): 34d, mas 'format' e
     parâmetros subsequentes ajudam a formatar a mensagem de aviso; eles
     têm o mesmo significado e valores que em *note
     PyUnicode_FromFormat(): 38a.  ‘PyErr_WriteUnraisable(obj)’ é
     aproximadamente equivalente à ‘PyErr_FormatUnraisable("Exception
     ignored in: %R", obj)’.  Se 'format' é ‘NULL’, somente o
     rastreamento é impresso.

     Adicionado na versão 3.13.

 -- C Função: void PyErr_DisplayException (PyObject *exc)
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  Imprime a
     exibição padrão do traceback de ‘exc’ em ‘sys.stderr’, incluindo as
     exceções encadeadas e notas.

     Adicionado na versão 3.12.


File: python.info,  Node: Levantando exceções<2>,  Next: Emitindo avisos,  Prev: Impressão e limpeza,  Up: Tratamento de exceções<2>

7.5.2 Levantando exceções
-------------------------

Essas funções ajudam a definir o indicador de erro do thread.  Por
conveniência, algumas dessas funções sempre retornam um ponteiro ‘NULL’
ao usar instrução com ‘return’.

 -- C Função: void PyErr_SetString (PyObject *type, const char *message)
     ' Parte da *note ABI Estável: 553.'  Esse é o modo mais comum de
     definir o indicador de erro.  O primeiro argumento especifica o
     tipo da exceção; é normalmente uma das exceções padrão, como *note
     PyExc_RuntimeError: 4ca5.  Você não precisa criar um novo *note
     strong reference: 33d. para ela (como em *note Py_INCREF(): 56e.).
     O segundo argumento é uma mensagem de erro; ela é codificada com
     ‘'utf-8'’.

 -- C Função: void PyErr_SetObject (PyObject *type, PyObject *value)
     ' Parte da *note ABI Estável: 553.'  Essa função é semelhante à
     *note PyErr_SetString(): 57c. mas permite especificar um objeto
     Python arbitrário para o valor da exceção.

 -- C Função: *note PyObject: 339. *PyErr_Format (PyObject *exception,
          const char *format, ...)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 553.'
     Essa função define o indicador de erro e retorna ‘NULL’.
     'exception' deve ser uma classe Python de exceção.  O 'format' e
     parâmetros subsequentes ajudam a formatar a mensagem de erro; eles
     têm o mesmo significado e valores que em *note
     PyUnicode_FromFormat(): 38a.  'format' é uma string codificada em
     ASCII.

 -- C Função: *note PyObject: 339. *PyErr_FormatV (PyObject *exception,
          const char *format, va_list vargs)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 553.
     desde a versão 3.5.'  Igual a *note PyErr_Format(): ee0, mas usando
     o argumento ‘va_list’ em vez de um número variável de argumentos.

     Adicionado na versão 3.5.

 -- C Função: void PyErr_SetNone (PyObject *type)
     ' Parte da *note ABI Estável: 553.'  Isso é uma abreviação para
     ‘PyErr_SetObject(type, Py_None)’.

 -- C Função: int PyErr_BadArgument ()
     ' Parte da *note ABI Estável: 553.'  Essa é uma abreviação de
     ‘PyErr_SetString(PyExc_TypeError, message)’, na qual 'message'
     indica que uma operação embutida foi invocada com um argumento
     ilegal.  Ela é principalmente para uso interno.

 -- C Função: *note PyObject: 339. *PyErr_NoMemory ()
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 553.'
     Essa é uma abreviação para ‘PyErr_SetNone(PyExc_MemoryError)’; que
     retorna ‘NULL’  para que uma função de alocação de objeto possa
     escrever ‘return PyErr_NoMemory();’  quando ficar sem memória.

 -- C Função: *note PyObject: 339. *PyErr_SetFromErrno (PyObject *type)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 553.'

     Esta é uma função conveniente para levantar uma exceção quando uma
     função da biblioteca C retornou um erro e definir a variável C
     ‘errno’.  Ela constrói um objeto tupla cujo primeiro item é o valor
     inteiro ‘errno’ e cujo segundo item é a mensagem de erro
     correspondente (obtida de ‘strerror()’), e então chama
     ‘PyErr_SetObject(type, object)’.  No Unix, quando o valor ‘errno’ é
     ‘EINTR’, indicando uma chamada de sistema interrompida, isso chama
     *note PyErr_CheckSignals(): 467, e se isso definir o indicador de
     erro, deixa-o definido como tal.  A função retorna sempre ‘NULL’,
     de forma que uma função que envolve uma chamada de sistema pode
     retornar ‘return PyErr_SetFromErrno(type);’ quando a chamada de
     sistema retornar um erro.

 -- C Função: *note PyObject: 339. *PyErr_SetFromErrnoWithFilenameObject
          (PyObject *type, PyObject *filenameObject)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 553.'
     Similar à *note PyErr_SetFromErrno(): 4b41, com o comportamento
     adicional de que, se 'filenameObject' não é ‘NULL’, ele é passado
     para o construtor de 'type' como um terceiro parâmetro.  No caso da
     exceção *note OSError: 417, isso é usado para definir o atributo
     ‘filename’ da instância da exceção.

 -- C Função: *note PyObject: 339.
          *PyErr_SetFromErrnoWithFilenameObjects (PyObject *type,
          PyObject *filenameObject, PyObject *filenameObject2)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 553.
     desde a versão 3.7.'  Similar à *note
     PyErr_SetFromErrnoWithFilenameObject(): 4c6c, mas recebe um segundo
     objeto filename, para levantar erros quando uma função que recebe
     dois nomes de arquivos falha.

     Adicionado na versão 3.4.

 -- C Função: *note PyObject: 339. *PyErr_SetFromErrnoWithFilename
          (PyObject *type, const char *filename)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 553.'
     Similar à *note PyErr_SetFromErrnoWithFilenameObject(): 4c6c, mas o
     nome do arquivo é fornecido como uma string C. 'filename' é
     decodificado do *note filesystem encoding and error handler: 53b.

 -- C Função: *note PyObject: 339. *PyErr_SetFromWindowsErr (int ierr)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 553. on
     Windows desde a versão 3.7.'  Essa é uma função conveniente para
     levantar *note OSError: 417.  Se chamada com 'ierr' de ‘0’, o
     código de erro retornado por uma chamada para ‘GetLastError()’ é
     usado instantaneamente.  Ela chama a função Win32 ‘FormatMessage()’
     para retornar a descrição Windows do código de erro dado por 'ierr'
     ou ‘GetLastError()’, e então constrói um objeto *note OSError: 417.
     com o atributo *note winerror: 2425. definido para o código de
     erro, o atributo *note strerror: 2426. definido para a mensagem de
     erro correspondente (lida de ‘FormatMessage()’), e então chama
     ‘PyErr_SetObject(PyExc_OSError, object)’.  Essa função sempre
     retorna ‘NULL’.

     *note Disponibilidade: 1ed8.: Windows.

 -- C Função: *note PyObject: 339. *PyErr_SetExcFromWindowsErr (PyObject
          *type, int ierr)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 553. on
     Windows desde a versão 3.7.'  Semelhante a *note
     PyErr_SetFromWindowsErr(): 4c6e, com um parâmetro adicional que
     especifica o tipo de exceção a ser levantada.

     *note Disponibilidade: 1ed8.: Windows.

 -- C Função: *note PyObject: 339. *PyErr_SetFromWindowsErrWithFilename
          (int ierr, const char *filename)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 553. on
     Windows desde a versão 3.7.'  Semelhante a *note
     PyErr_SetFromWindowsErr(): 4c6e, com o comportamento adicional de
     que, se 'filename' não for ‘NULL’, ele é decodificado a partir da
     codificação do sistema de arquivos (*note os.fsdecode(): c6f.) e
     passado para o construtor de *note OSError: 417. como um terceiro
     parâmetro a ser usado para definir o atributo ‘filename’ da
     instância da exceção.

     *note Disponibilidade: 1ed8.: Windows.

 -- C Função: *note PyObject: 339.
          *PyErr_SetExcFromWindowsErrWithFilenameObject (PyObject *type,
          int ierr, PyObject *filename)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 553. on
     Windows desde a versão 3.7.'  Semelhante a *note
     PyErr_SetExcFromWindowsErr(): 4c69, com o comportamento adicional
     de que, se 'filename' não for ‘NULL’, ele é passado para o
     construtor de *note OSError: 417. como um terceiro parâmetro a ser
     usado para definir o atributo ‘filename’ da instância da exceção.

     *note Disponibilidade: 1ed8.: Windows.

 -- C Função: *note PyObject: 339.
          *PyErr_SetExcFromWindowsErrWithFilenameObjects (PyObject
          *type, int ierr, PyObject *filename, PyObject *filename2)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 553. on
     Windows desde a versão 3.7.'  Similar à *note
     PyErr_SetExcFromWindowsErrWithFilenameObject(): 4c6a, mas aceita um
     segundo caminho do objeto.

     *note Disponibilidade: 1ed8.: Windows.

     Adicionado na versão 3.4.

 -- C Função: *note PyObject: 339.
          *PyErr_SetExcFromWindowsErrWithFilename (PyObject *type, int
          ierr, const char *filename)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 553. on
     Windows desde a versão 3.7.'  Similar à *note
     PyErr_SetFromWindowsErrWithFilename(): 1809, com um parâmetro
     adicional especificando o tipo de exceção a ser gerado.

     *note Disponibilidade: 1ed8.: Windows.

 -- C Função: *note PyObject: 339. *PyErr_SetImportError (PyObject *msg,
          PyObject *name, PyObject *path)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 553.
     desde a versão 3.7.'  Essa é uma função conveniente para levantar
     *note ImportError: 419.  'msg' será definido como a string da
     mensagem de exceção.  'name' e 'path', ambos os quais podem ser
     ‘NULL’, serão definidos como, respectivamente, os atributos ‘name’
     e ‘path’ de *note ImportError: 419.

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 339. *PyErr_SetImportErrorSubclass
          (PyObject *exception, PyObject *msg, PyObject *name, PyObject
          *path)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 553.
     desde a versão 3.6.'  Muito parecido com *note
     PyErr_SetImportError(): d60. mas a função permite especificar uma
     subclasse de *note ImportError: 419. para levantar uma exceção.

     Adicionado na versão 3.6.

 -- C Função: void PyErr_SyntaxLocationObject (PyObject *filename, int
          lineno, int col_offset)

     Define informações de arquivo, linha e deslocamento para a atual
     exceção.  Se a exceção não é *note SyntaxError: 18d, define
     atributos adicionais, os quais fazem o subsistema de impressão de
     exceções pensar que trata-se de um *note SyntaxError: 18d.

     Adicionado na versão 3.4.

 -- C Função: void PyErr_RangedSyntaxLocationObject (PyObject *filename,
          int lineno, int col_offset, int end_lineno, int
          end_col_offset)

     Similar a *note PyErr_SyntaxLocationObject(): 4e84, mas também
     define as informações 'end_lineno' e 'end_col_offset' para a
     exceção atual.

     Adicionado na versão 3.10.

 -- C Função: void PyErr_SyntaxLocationEx (const char *filename, int
          lineno, int col_offset)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Como *note
     PyErr_SyntaxLocationObject(): 4e84, mas 'filename' é uma bytestring
     descodificada a partir do *note tratador de erros e codificação do
     sistema de arquivos: 53b.

     Adicionado na versão 3.2.

 -- C Função: void PyErr_SyntaxLocation (const char *filename, int
          lineno)
     ' Parte da *note ABI Estável: 553.'  Como *note
     PyErr_SyntaxLocationEx(): 4c72, mas o parâmetro 'col_offset' é
     omitido.

 -- C Função: void PyErr_BadInternalCall ()
     ' Parte da *note ABI Estável: 553.'  Essa é uma abreviação de
     ‘PyErr_SetString(PyExc_SystemError, message)’, onde 'message'
     indica que uma operação interna (por exemplo, uma função API
     C/Python) foi invocada com um argumento ilegal.  Ela é
     principalmente para uso interno.

 -- C Função: *note PyObject: 339. *PyErr_ProgramTextObject (PyObject
          *filename, int lineno)

     Obtém a linha de código-fonte em 'filename' na linha 'lineno'.
     'filename' deve ser um objeto *note str: 44c. Python.

     Em caso de sucesso, esta função retorna um objeto string do Python
     com a linha encontrada.  Em caso de falha, esta função retorna
     ‘NULL’ sem definir uma exceção.

 -- C Função: *note PyObject: 339. *PyErr_ProgramText (const char
          *filename, int lineno)
     ' Parte da *note ABI Estável: 553.'  Semelhante a *note
     PyErr_ProgramTextObject(): 4e86, mas 'filename' é um const char*,
     que é decodificado com *note tratador de erros e codificação do
     sistema de arquivos: 53b, em vez de uma referência de objeto
     Python.


File: python.info,  Node: Emitindo avisos,  Next: Consultando o indicador de erro,  Prev: Levantando exceções<2>,  Up: Tratamento de exceções<2>

7.5.3 Emitindo avisos
---------------------

Use essas funções para emitir avisos a partir de código C. Elas espelham
funções semelhantes exportadas pelo módulo *note warnings: 112. do
Python.  Normalmente, elas exibem uma mensagem de aviso em 'sys.stderr';
no entanto, também é possível que o usuário tenha especificado que os
avisos devem ser transformados em erros, e nesse caso, uma exceção será
lançada.  Também é possível que as funções levantem uma exceção devido a
um problema com o mecanismo de avisos.  O valor de retorno é ‘0’ se
nenhuma exceção for lançada, ou ‘-1’ se uma exceção for lançada.  (Não é
possível determinar se uma mensagem de aviso é realmente impressa, nem
qual é o motivo da exceção; isso é intencional.)  Se uma exceção for
levantada, a função que chamou a função deve realizar seu tratamento de
exceções normal (por exemplo, liberar as referências pertencentes a
*note Py_DECREF(): 56f. e retornar um valor de erro).

 -- C Função: int PyErr_WarnEx (PyObject *category, const char *message,
          Py_ssize_t stack_level)
     ' Parte da *note ABI Estável: 553.'  Emite uma mensagem de aviso.
     O argumento 'category' é uma categoria de aviso (veja abaixo) ou
     ‘NULL’; o argumento 'message' é uma string codificada em UTF-8.
     'stack_level' é um número positivo que indica o número de quadros
     da pilha; o aviso será emitido a partir da linha de código
     atualmente em execução nesse quadro da pilha.  Um 'stack_level' de
     1 é a função que chama *note PyErr_WarnEx(): 1494, 2 é a função
     acima dessa e assim por diante.

     As categorias de aviso devem ser subclasses de *note PyExc_Warning:
     4cb6.; *note PyExc_Warning: 4cb6. é uma subclasse de *note
     PyExc_Exception: 4c8a.; a categoria de aviso padrão é *note
     PyExc_RuntimeWarning: 4ca6.  As categorias de aviso padrão do
     Python estão disponíveis como variáveis globais cujos nomes estão
     enumerados em *note Warning types: 4e88.

     Para obter informações sobre o controle de avisos, consulte a
     documentação do módulo *note warnings: 112. e a opção *note -W:
     8cd. na documentação da linha de comando.  Não existe uma API C
     para o controle de avisos.

 -- C Função: int PyErr_WarnExplicitObject (PyObject *category, PyObject
          *message, PyObject *filename, int lineno, PyObject *module,
          PyObject *registry)

     Emite uma mensagem de aviso com controle explícito sobre todos os
     atributos de aviso.  Trata-se de um invólucro simples em torno da
     função Python *note warnings.warn_explicit(): d22.; consulte-a para
     obter mais informações.  Os argumentos 'module' e 'registry' podem
     ser definidos como ‘NULL’ para obter o efeito padrão descrito nessa
     função.

     Adicionado na versão 3.4.

 -- C Função: int PyErr_WarnExplicit (PyObject *category, const char
          *message, const char *filename, int lineno, const char
          *module, PyObject *registry)
     ' Parte da *note ABI Estável: 553.'  Semelhante a *note
     PyErr_WarnExplicitObject(): 4e89, exceto que 'message' e 'module'
     são strings codificadas em UTF-8 e 'filename' é decodificado a
     partir do *note tratador de erros e codificação do sistema de
     arquivos: 53b.

 -- C Função: int PyErr_WarnFormat (PyObject *category, Py_ssize_t
          stack_level, const char *format, ...)
     ' Parte da *note ABI Estável: 553.'  Function similar to *note
     PyErr_WarnEx(): 1494, but use *note PyUnicode_FromFormat(): 38a. to
     format the warning message.  'format' is an ASCII-encoded string.

     Adicionado na versão 3.2.

 -- C Função: int PyErr_WarnExplicitFormat (PyObject *category, const
          char *filename, int lineno, const char *module, PyObject
          *registry, const char *format, ...)

     Similar to *note PyErr_WarnExplicit(): 180f, but uses *note
     PyUnicode_FromFormat(): 38a. to format the warning message.
     'format' is an ASCII-encoded string.

     Adicionado na versão 3.2.

 -- C Função: int PyErr_ResourceWarning (PyObject *source, Py_ssize_t
          stack_level, const char *format, ...)
     ' Parte da *note ABI Estável: 553. desde a versão 3.6.'  Function
     similar to *note PyErr_WarnFormat(): 4c73, but 'category' is *note
     ResourceWarning: 244. and it passes 'source' to
     ‘warnings.WarningMessage’.

     Adicionado na versão 3.6.


File: python.info,  Node: Consultando o indicador de erro,  Next: Tratamento de sinal<2>,  Prev: Emitindo avisos,  Up: Tratamento de exceções<2>

7.5.4 Consultando o indicador de erro
-------------------------------------

 -- C Função: *note PyObject: 339. *PyErr_Occurred ()
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'  Test whether the error indicator is set.  If set,
     return the exception 'type' (the first argument to the last call to
     one of the ‘PyErr_Set*’ functions or to *note PyErr_Restore():
     3f6.).  If not set, return ‘NULL’.  You do not own a reference to
     the return value, so you do not need to *note Py_DECREF(): 56f. it.

     The caller must hold the GIL.

          Nota: Do not compare the return value to a specific exception;
          use *note PyErr_ExceptionMatches(): 4be7. instead, shown
          below.  (The comparison could easily fail since the exception
          may be an instance instead of a class, in the case of a class
          exception, or it may be a subclass of the expected exception.)

 -- C Função: int PyErr_ExceptionMatches (PyObject *exc)
     ' Parte da *note ABI Estável: 553.'  Equivalent to
     ‘PyErr_GivenExceptionMatches(PyErr_Occurred(), exc)’.  This should
     only be called when an exception is actually set; a memory access
     violation will occur if no exception has been raised.

 -- C Função: int PyErr_GivenExceptionMatches (PyObject *given, PyObject
          *exc)
     ' Parte da *note ABI Estável: 553.'  Return true if the 'given'
     exception matches the exception type in 'exc'.  If 'exc' is a class
     object, this also returns true when 'given' is an instance of a
     subclass.  If 'exc' is a tuple, all exception types in the tuple
     (and recursively in subtuples) are searched for a match.

 -- C Função: *note PyObject: 339. *PyErr_GetRaisedException (void)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.12.'  Return the exception currently being
     raised, clearing the error indicator at the same time.  Return
     ‘NULL’ if the error indicator is not set.

     This function is used by code that needs to catch exceptions, or
     code that needs to save and restore the error indicator
     temporarily.

     Por exemplo:

          {
             PyObject *exc = PyErr_GetRaisedException();

             /* ... code that might produce other errors ... */

             PyErr_SetRaisedException(exc);
          }

     Ver também
     ..........

     *note PyErr_GetHandledException(): 76f, to save the exception
     currently being handled.

     Adicionado na versão 3.12.

 -- C Função: void PyErr_SetRaisedException (PyObject *exc)
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  Set 'exc'
     as the exception currently being raised, clearing the existing
     exception if one is set.

          Aviso: This call steals a reference to 'exc', which must be a
          valid exception.

     Adicionado na versão 3.12.

 -- C Função: void PyErr_Fetch (PyObject **ptype, PyObject **pvalue,
          PyObject **ptraceback)
     ' Parte da *note ABI Estável: 553.'

     Descontinuado desde a versão 3.12: Use *note
     PyErr_GetRaisedException(): 3f4. em vez disso.

     Retrieve the error indicator into three variables whose addresses
     are passed.  If the error indicator is not set, set all three
     variables to ‘NULL’.  If it is set, it will be cleared and you own
     a reference to each object retrieved.  The value and traceback
     object may be ‘NULL’ even when the type object is not.

          Nota: This function is normally only used by legacy code that
          needs to catch exceptions or save and restore the error
          indicator temporarily.

          Por exemplo:

               {
               PyObject *type, *value, *traceback;
               PyErr_Fetch(&type, &value, &traceback);

               /* ... código que pode reproduzir outros erros ... */

               PyErr_Restore(type, value, traceback);
               }

 -- C Função: void PyErr_Restore (PyObject *type, PyObject *value,
          PyObject *traceback)
     ' Parte da *note ABI Estável: 553.'

     Descontinuado desde a versão 3.12: Use *note
     PyErr_SetRaisedException(): 3f7. em vez disso.

     Set the error indicator from the three objects, 'type', 'value',
     and 'traceback', clearing the existing exception if one is set.  If
     the objects are ‘NULL’, the error indicator is cleared.  Do not
     pass a ‘NULL’ type and non-‘NULL’ value or traceback.  The
     exception type should be a class.  Do not pass an invalid exception
     type or value.  (Violating these rules will cause subtle problems
     later.)  This call takes away a reference to each object: you must
     own a reference to each object before the call and after the call
     you no longer own these references.  (If you don’t understand this,
     don’t use this function.  I warned you.)

          Nota: This function is normally only used by legacy code that
          needs to save and restore the error indicator temporarily.
          Use *note PyErr_Fetch(): 3f3. to save the current error
          indicator.

 -- C Função: void PyErr_NormalizeException (PyObject **exc, PyObject
          **val, PyObject **tb)
     ' Parte da *note ABI Estável: 553.'

     Descontinuado desde a versão 3.12: Use *note
     PyErr_GetRaisedException(): 3f4. em vez disso, para evitar qualquer
     possível desnormalização.

     Under certain circumstances, the values returned by *note
     PyErr_Fetch(): 3f3. below can be “unnormalized”, meaning that
     ‘*exc’ is a class object but ‘*val’ is not an instance of the same
     class.  This function can be used to instantiate the class in that
     case.  If the values are already normalized, nothing happens.  The
     delayed normalization is implemented to improve performance.

          Nota: This function 'does not' implicitly set the *note
          __traceback__: 1309. attribute on the exception value.  If
          setting the traceback appropriately is desired, the following
          additional snippet is needed:

               if (tb != NULL) {
               PyException_SetTraceback(val, tb);
               }

 -- C Função: *note PyObject: 339. *PyErr_GetHandledException (void)
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'  Retrieve
     the active exception instance, as would be returned by *note
     sys.exception(): 68b.  This refers to an exception that was
     'already caught', not to an exception that was freshly raised.
     Returns a new reference to the exception or ‘NULL’.  Does not
     modify the interpreter’s exception state.

          Nota: This function is not normally used by code that wants to
          handle exceptions.  Rather, it can be used when code needs to
          save and restore the exception state temporarily.  Use *note
          PyErr_SetHandledException(): 770. to restore or clear the
          exception state.

     Adicionado na versão 3.11.

 -- C Função: void PyErr_SetHandledException (PyObject *exc)
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'  Set the
     active exception, as known from ‘sys.exception()’.  This refers to
     an exception that was 'already caught', not to an exception that
     was freshly raised.  To clear the exception state, pass ‘NULL’.

          Nota: This function is not normally used by code that wants to
          handle exceptions.  Rather, it can be used when code needs to
          save and restore the exception state temporarily.  Use *note
          PyErr_GetHandledException(): 76f. to get the exception state.

     Adicionado na versão 3.11.

 -- C Função: void PyErr_GetExcInfo (PyObject **ptype, PyObject
          **pvalue, PyObject **ptraceback)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Retrieve
     the old-style representation of the exception info, as known from
     *note sys.exc_info(): 68a.  This refers to an exception that was
     'already caught', not to an exception that was freshly raised.
     Returns new references for the three objects, any of which may be
     ‘NULL’.  Does not modify the exception info state.  This function
     is kept for backwards compatibility.  Prefer using *note
     PyErr_GetHandledException(): 76f.

          Nota: This function is not normally used by code that wants to
          handle exceptions.  Rather, it can be used when code needs to
          save and restore the exception state temporarily.  Use *note
          PyErr_SetExcInfo(): 771. to restore or clear the exception
          state.

     Adicionado na versão 3.3.

 -- C Função: void PyErr_SetExcInfo (PyObject *type, PyObject *value,
          PyObject *traceback)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Set the
     exception info, as known from ‘sys.exc_info()’.  This refers to an
     exception that was 'already caught', not to an exception that was
     freshly raised.  This function steals the references of the
     arguments.  To clear the exception state, pass ‘NULL’ for all three
     arguments.  This function is kept for backwards compatibility.
     Prefer using *note PyErr_SetHandledException(): 770.

          Nota: This function is not normally used by code that wants to
          handle exceptions.  Rather, it can be used when code needs to
          save and restore the exception state temporarily.  Use *note
          PyErr_GetExcInfo(): 772. to read the exception state.

     Adicionado na versão 3.3.

     Alterado na versão 3.11: The ‘type’ and ‘traceback’ arguments are
     no longer used and can be NULL. The interpreter now derives them
     from the exception instance (the ‘value’ argument).  The function
     still steals references of all three arguments.


File: python.info,  Node: Tratamento de sinal<2>,  Next: Classes de exceção,  Prev: Consultando o indicador de erro,  Up: Tratamento de exceções<2>

7.5.5 Tratamento de sinal
-------------------------

 -- C Função: int PyErr_CheckSignals ()
     ' Parte da *note ABI Estável: 553.'

     Essa função interage com o manipulador de sinais do Python.

     If the function is called from the main thread and under the main
     Python interpreter, it checks whether a signal has been sent to the
     processes and if so, invokes the corresponding signal handler.  If
     the *note signal: c6. module is supported, this can invoke a signal
     handler written in Python.

     The function attempts to handle all pending signals, and then
     returns ‘0’.  However, if a Python signal handler raises an
     exception, the error indicator is set and the function returns ‘-1’
     immediately (such that other pending signals may not have been
     handled yet: they will be on the next *note PyErr_CheckSignals():
     467. invocation).

     If the function is called from a non-main thread, or under a
     non-main Python interpreter, it does nothing and returns ‘0’.

     This function can be called by long-running C code that wants to be
     interruptible by user requests (such as by pressing Ctrl-C).

          Nota: The default Python signal handler for ‘SIGINT’ raises
          the *note KeyboardInterrupt: 9d9. exception.

 -- C Função: void PyErr_SetInterrupt ()
     ' Parte da *note ABI Estável: 553.'

     Simula o efeito de um sinal ‘SIGINT’ chegando.  Isto é equivalente
     a ‘PyErr_SetInterruptEx(SIGINT)’.

          Nota: This function is async-signal-safe.  It can be called
          without the *note GIL: 159. and from a C signal handler.

 -- C Função: int PyErr_SetInterruptEx (int signum)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'

     Simulate the effect of a signal arriving.  The next time *note
     PyErr_CheckSignals(): 467. is called, the Python signal handler for
     the given signal number will be called.

     This function can be called by C code that sets up its own signal
     handling and wants Python signal handlers to be invoked as expected
     when an interruption is requested (for example when the user
     presses Ctrl-C to interrupt an operation).

     Se o sinal fornecido não for tratado pelo Python (foi definido como
     *note signal.SIG_DFL: 193c. ou *note signal.SIG_IGN: 193b.), ele
     será ignorado.

     If 'signum' is outside of the allowed range of signal numbers, ‘-1’
     is returned.  Otherwise, ‘0’ is returned.  The error indicator is
     never changed by this function.

          Nota: This function is async-signal-safe.  It can be called
          without the *note GIL: 159. and from a C signal handler.

     Adicionado na versão 3.10.

 -- C Função: int PySignal_SetWakeupFd (int fd)

     This utility function specifies a file descriptor to which the
     signal number is written as a single byte whenever a signal is
     received.  'fd' must be non-blocking.  It returns the previous such
     file descriptor.

     O valor ‘-1’ desabilita o recurso; este é o estado inicial.  Isso é
     equivalente à *note signal.set_wakeup_fd(): b86. em Python, mas sem
     nenhuma verificação de erro.  'fd' deve ser um descritor de arquivo
     válido.  A função só deve ser chamada a partir da thread principal.

     Alterado na versão 3.5: No Windows, a função agora também suporta
     manipuladores de socket.


File: python.info,  Node: Classes de exceção,  Next: Objeto Exceção,  Prev: Tratamento de sinal<2>,  Up: Tratamento de exceções<2>

7.5.6 Classes de exceção
------------------------

 -- C Função: *note PyObject: 339. *PyErr_NewException (const char
          *name, PyObject *base, PyObject *dict)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  This utility function creates and returns a new exception
     class.  The 'name' argument must be the name of the new exception,
     a C string of the form ‘module.classname’.  The 'base' and 'dict'
     arguments are normally ‘NULL’.  This creates a class object derived
     from *note Exception: 9e2. (accessible in C as *note
     PyExc_Exception: 4c8a.).

     The *note __module__: 374. attribute of the new class is set to the
     first part (up to the last dot) of the 'name' argument, and the
     class name is set to the last part (after the last dot).  The
     'base' argument can be used to specify alternate base classes; it
     can either be only one class or a tuple of classes.  The 'dict'
     argument can be used to specify a dictionary of class variables and
     methods.

 -- C Função: *note PyObject: 339. *PyErr_NewExceptionWithDoc (const
          char *name, const char *doc, PyObject *base, PyObject *dict)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Same as *note PyErr_NewException(): 12ab, except that the
     new exception class can easily be given a docstring: If 'doc' is
     non-‘NULL’, it will be used as the docstring for the exception
     class.

     Adicionado na versão 3.2.

 -- C Função: int PyExceptionClass_Check (PyObject *ob)

     Return non-zero if 'ob' is an exception class, zero otherwise.
     This function always succeeds.

 -- C Função: const char *PyExceptionClass_Name (PyObject *ob)
     ' Parte da *note ABI Estável: 553. desde a versão 3.8.'  Retorna
     *note tp_name: 1a3c. da classe de exceção 'ob'.


File: python.info,  Node: Objeto Exceção,  Next: Objetos de exceção Unicode,  Prev: Classes de exceção,  Up: Tratamento de exceções<2>

7.5.7 Objeto Exceção
--------------------

 -- C Função: int PyExceptionInstance_Check (PyObject *op)

     Return true if 'op' is an instance of *note BaseException: 5bb,
     false otherwise.  This function always succeeds.

 -- C Macro: PyExceptionInstance_Class (op)

     Equivalent to *note Py_TYPE(op): 780.

 -- C Função: *note PyObject: 339. *PyException_GetTraceback (PyObject
          *ex)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Return the traceback associated with the exception as a new
     reference, as accessible from Python through the *note
     __traceback__: 1309. attribute.  If there is no traceback
     associated, this returns ‘NULL’.

 -- C Função: int PyException_SetTraceback (PyObject *ex, PyObject *tb)
     ' Parte da *note ABI Estável: 553.'  Defina o retorno traceback
     (situação da pilha de execução) associado à exceção como 'tb'.  Use
     ‘Py_None’ para limpá-lo.

 -- C Função: *note PyObject: 339. *PyException_GetContext (PyObject
          *ex)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Return the context (another exception instance during whose
     handling 'ex' was raised) associated with the exception as a new
     reference, as accessible from Python through the *note __context__:
     130a. attribute.  If there is no context associated, this returns
     ‘NULL’.

 -- C Função: void PyException_SetContext (PyObject *ex, PyObject *ctx)
     ' Parte da *note ABI Estável: 553.'  Set the context associated
     with the exception to 'ctx'.  Use ‘NULL’ to clear it.  There is no
     type check to make sure that 'ctx' is an exception instance.  This
     steals a reference to 'ctx'.

 -- C Função: *note PyObject: 339. *PyException_GetCause (PyObject *ex)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Return the cause (either an exception instance, or ‘None’,
     set by ‘raise ... from ...’) associated with the exception as a new
     reference, as accessible from Python through the *note __cause__:
     130b. attribute.

 -- C Função: void PyException_SetCause (PyObject *ex, PyObject *cause)
     ' Parte da *note ABI Estável: 553.'  Set the cause associated with
     the exception to 'cause'.  Use ‘NULL’ to clear it.  There is no
     type check to make sure that 'cause' is either an exception
     instance or ‘None’.  This steals a reference to 'cause'.

     The *note __suppress_context__: 224a. attribute is implicitly set
     to ‘True’ by this function.

 -- C Função: *note PyObject: 339. *PyException_GetArgs (PyObject *ex)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.12.'  Retorna *note args: 56c. da exceção
     'ex'.

 -- C Função: void PyException_SetArgs (PyObject *ex, PyObject *args)
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  Set *note
     args: 56c. of exception 'ex' to 'args'.

 -- C Função: *note PyObject: 339. *PyUnstable_Exc_PrepReraiseStar
          (PyObject *orig, PyObject *excs)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Implement part of the interpreter’s implementation of ‘except*’.
     'orig' is the original exception that was caught, and 'excs' is the
     list of the exceptions that need to be raised.  This list contains
     the unhandled part of 'orig', if any, as well as the exceptions
     that were raised from the ‘except*’ clauses (so they have a
     different traceback from 'orig') and those that were reraised (and
     have the same traceback as 'orig').  Return the *note
     ExceptionGroup: 1b6. that needs to be reraised in the end, or
     ‘None’ if there is nothing to reraise.

     Adicionado na versão 3.12.


File: python.info,  Node: Objetos de exceção Unicode,  Next: Controle de recursão,  Prev: Objeto Exceção,  Up: Tratamento de exceções<2>

7.5.8 Objetos de exceção Unicode
--------------------------------

As seguintes funções são usadas para criar e modificar exceções Unicode
de C.

 -- C Função: *note PyObject: 339. *PyUnicodeDecodeError_Create (const
          char *encoding, const char *object, Py_ssize_t length,
          Py_ssize_t start, Py_ssize_t end, const char *reason)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Create a *note UnicodeDecodeError: a1d. object with the
     attributes 'encoding', 'object', 'length', 'start', 'end' and
     'reason'.  'encoding' and 'reason' are UTF-8 encoded strings.

 -- C Função: *note PyObject: 339. *PyUnicodeDecodeError_GetEncoding
          (PyObject *exc)
 -- C Função: *note PyObject: 339. *PyUnicodeEncodeError_GetEncoding
          (PyObject *exc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna o atributo * encoding* dado no objeto da exceção.

 -- C Função: *note PyObject: 339. *PyUnicodeDecodeError_GetObject
          (PyObject *exc)
 -- C Função: *note PyObject: 339. *PyUnicodeEncodeError_GetObject
          (PyObject *exc)
 -- C Função: *note PyObject: 339. *PyUnicodeTranslateError_GetObject
          (PyObject *exc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna o atributo 'object' dado no objeto da exceção.

 -- C Função: int PyUnicodeDecodeError_GetStart (PyObject *exc,
          Py_ssize_t *start)
 -- C Função: int PyUnicodeEncodeError_GetStart (PyObject *exc,
          Py_ssize_t *start)
 -- C Função: int PyUnicodeTranslateError_GetStart (PyObject *exc,
          Py_ssize_t *start)
     ' Parte da *note ABI Estável: 553.'  Obtém o atributo 'start' do
     objeto da exceção coloca-o em '*start'.  'start' não deve ser
     ‘NULL’.  Retorna ‘0’ se não der erro, ‘-1’ caso dê erro.

 -- C Função: int PyUnicodeDecodeError_SetStart (PyObject *exc,
          Py_ssize_t start)
 -- C Função: int PyUnicodeEncodeError_SetStart (PyObject *exc,
          Py_ssize_t start)
 -- C Função: int PyUnicodeTranslateError_SetStart (PyObject *exc,
          Py_ssize_t start)
     ' Parte da *note ABI Estável: 553.'  Define o atributo 'start' dado
     no objeto de exceção 'start'.  Em caso de sucesso, retorna ‘0’, em
     caso de falha, retorna ‘-1’.

 -- C Função: int PyUnicodeDecodeError_GetEnd (PyObject *exc, Py_ssize_t
          *end)
 -- C Função: int PyUnicodeEncodeError_GetEnd (PyObject *exc, Py_ssize_t
          *end)
 -- C Função: int PyUnicodeTranslateError_GetEnd (PyObject *exc,
          Py_ssize_t *end)
     ' Parte da *note ABI Estável: 553.'  Obtenha o atributo 'end' dado
     no objeto de exceção e coloque '*end'.  O 'end' não deve ser
     ‘NULL’.  Em caso de sucesso, retorna ‘0’, em caso de falha, retorna
     ‘-1’.

 -- C Função: int PyUnicodeDecodeError_SetEnd (PyObject *exc, Py_ssize_t
          end)
 -- C Função: int PyUnicodeEncodeError_SetEnd (PyObject *exc, Py_ssize_t
          end)
 -- C Função: int PyUnicodeTranslateError_SetEnd (PyObject *exc,
          Py_ssize_t end)
     ' Parte da *note ABI Estável: 553.'  Set the 'end' attribute of the
     given exception object to 'end'.  Return ‘0’ on success, ‘-1’ on
     failure.

 -- C Função: *note PyObject: 339. *PyUnicodeDecodeError_GetReason
          (PyObject *exc)
 -- C Função: *note PyObject: 339. *PyUnicodeEncodeError_GetReason
          (PyObject *exc)
 -- C Função: *note PyObject: 339. *PyUnicodeTranslateError_GetReason
          (PyObject *exc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna o atributo 'reason' dado no objeto da exceção.

 -- C Função: int PyUnicodeDecodeError_SetReason (PyObject *exc, const
          char *reason)
 -- C Função: int PyUnicodeEncodeError_SetReason (PyObject *exc, const
          char *reason)
 -- C Função: int PyUnicodeTranslateError_SetReason (PyObject *exc,
          const char *reason)
     ' Parte da *note ABI Estável: 553.'  Set the 'reason' attribute of
     the given exception object to 'reason'.  Return ‘0’ on success,
     ‘-1’ on failure.


File: python.info,  Node: Controle de recursão,  Next: Exception and warning types,  Prev: Objetos de exceção Unicode,  Up: Tratamento de exceções<2>

7.5.9 Controle de recursão
--------------------------

These two functions provide a way to perform safe recursive calls at the
C level, both in the core and in extension modules.  They are needed if
the recursive code does not necessarily invoke Python code (which tracks
its recursion depth automatically).  They are also not needed for
'tp_call' implementations because the *note call protocol: 583. takes
care of recursion handling.

 -- C Função: int Py_EnterRecursiveCall (const char *where)
     ' Parte da *note ABI Estável: 553. desde a versão 3.9.'  Marca um
     ponto em que a chamada recursiva em nível C está prestes a ser
     executada.

     If ‘USE_STACKCHECK’ is defined, this function checks if the OS
     stack overflowed using *note PyOS_CheckStack(): 192c.  If this is
     the case, it sets a *note MemoryError: 15c5. and returns a nonzero
     value.

     The function then checks if the recursion limit is reached.  If
     this is the case, a *note RecursionError: d90. is set and a nonzero
     value is returned.  Otherwise, zero is returned.

     'where' should be a UTF-8 encoded string such as ‘" in instance
     check"’ to be concatenated to the *note RecursionError: d90.
     message caused by the recursion depth limit.

     Alterado na versão 3.9: Esta função agora também está disponível na
     *note API limitada: 396.

 -- C Função: void Py_LeaveRecursiveCall (void)
     ' Parte da *note ABI Estável: 553. desde a versão 3.9.'  Ends a
     *note Py_EnterRecursiveCall(): 97a.  Must be called once for each
     'successful' invocation of *note Py_EnterRecursiveCall(): 97a.

     Alterado na versão 3.9: Esta função agora também está disponível na
     *note API limitada: 396.

Properly implementing *note tp_repr: 4b8d. for container types requires
special recursion handling.  In addition to protecting the stack, *note
tp_repr: 4b8d. also needs to track objects to prevent cycles.  The
following two functions facilitate this functionality.  Effectively,
these are the C equivalent to *note reprlib.recursive_repr(): 1233.

 -- C Função: int Py_ReprEnter (PyObject *object)
     ' Parte da *note ABI Estável: 553.'  Chamado no início da
     implementação *note tp_repr: 4b8d. para detectar ciclos.

     If the object has already been processed, the function returns a
     positive integer.  In that case the *note tp_repr: 4b8d.
     implementation should return a string object indicating a cycle.
     As examples, *note dict: 256. objects return ‘{...}’ and *note
     list: 611. objects return ‘[...]’.

     A função retornará um inteiro negativo se o limite da recursão for
     atingido.  Nesse caso a implementação *note tp_repr: 4b8d. deverá,
     normalmente,.  retornar ‘NULL’.

     Caso contrário, a função retorna zero e a implementação *note
     tp_repr: 4b8d. poderá continuar normalmente.

 -- C Função: void Py_ReprLeave (PyObject *object)
     ' Parte da *note ABI Estável: 553.'  Termina a *note
     Py_ReprEnter(): 4dcc.  Deve ser chamado uma vez para cada chamada
     de *note Py_ReprEnter(): 4dcc. que retorna zero.

 -- C Função: int Py_GetRecursionLimit (void)
     ' Parte da *note ABI Estável: 553.'  Get the recursion limit for
     the current interpreter.  It can be set with *note
     Py_SetRecursionLimit(): 4dce.  The recursion limit prevents the
     Python interpreter stack from growing infinitely.

     This function cannot fail, and the caller must hold the *note GIL:
     159.

     Ver também
     ..........

     *note sys.getrecursionlimit(): 4c4.

 -- C Função: void Py_SetRecursionLimit (int new_limit)
     ' Parte da *note ABI Estável: 553.'  Set the recursion limit for
     the current interpreter.

     This function cannot fail, and the caller must hold the *note GIL:
     159.

     Ver também
     ..........

     *note sys.setrecursionlimit(): 4c3.


File: python.info,  Node: Exception and warning types,  Next: Tracebacks,  Prev: Controle de recursão,  Up: Tratamento de exceções<2>

7.5.10 Exception and warning types
----------------------------------

All standard Python exceptions and warning categories are available as
global variables whose names are ‘PyExc_’ followed by the Python
exception name.  These have the type *note PyObject: 339.*; they are all
class objects.

For completeness, here are all the variables:

* Menu:

* Tipos de exceção::
* OSError aliases::
* Warning types::


File: python.info,  Node: Tipos de exceção,  Next: OSError aliases,  Up: Exception and warning types

7.5.10.1 Tipos de exceção
.........................

Nome C                                                 Nome Python
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
 -- C Variável: *note PyObject: 339.                   *note BaseException: 5bb.
          *PyExc_BaseException                         
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note BaseExceptionGroup: 25f.
          *PyExc_BaseExceptionGroup                    
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.11.'

 -- C Variável: *note PyObject: 339.                   *note Exception: 9e2.
          *PyExc_Exception                             
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note ArithmeticError: 241a.
          *PyExc_ArithmeticError                       
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note AssertionError: 6a9.
          *PyExc_AssertionError                        
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note AttributeError: 34b.
          *PyExc_AttributeError                        
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note BlockingIOError: 1090.
          *PyExc_BlockingIOError                       
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339.                   *note BrokenPipeError: 1095.
          *PyExc_BrokenPipeError                       
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339.                   *note BufferError: 15bd.
          *PyExc_BufferError                           
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note ChildProcessError: 1091.
          *PyExc_ChildProcessError                     
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339.                   *note ConnectionAbortedError: 1096.
          *PyExc_ConnectionAbortedError                
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339.                   *note ConnectionError: e36.
          *PyExc_ConnectionError                       
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339.                   *note ConnectionRefusedError: 1097.
          *PyExc_ConnectionRefusedError                
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339.                   *note ConnectionResetError: 1098.
          *PyExc_ConnectionResetError                  
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339. *PyExc_EOFError   *note EOFError: 131c.
     ' Parte da *note ABI Estável: 553.'               

 -- C Variável: *note PyObject: 339.                   *note FileExistsError: 1056.
          *PyExc_FileExistsError                       
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339.                   *note FileNotFoundError: 42b.
          *PyExc_FileNotFoundError                     
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339.                   *note FloatingPointError: 241b.
          *PyExc_FloatingPointError                    
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note GeneratorExit: 140e.
          *PyExc_GeneratorExit                         
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note ImportError: 419.
          *PyExc_ImportError                           
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note IndentationError: 7a9.
          *PyExc_IndentationError                      
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note IndexError: 157e.
          *PyExc_IndexError                            
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note InterruptedError: db0.
          *PyExc_InterruptedError                      
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339.                   *note IsADirectoryError: 1092.
          *PyExc_IsADirectoryError                     
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339. *PyExc_KeyError   *note KeyError: 344.
     ' Parte da *note ABI Estável: 553.'               

 -- C Variável: *note PyObject: 339.                   *note KeyboardInterrupt: 9d9.
          *PyExc_KeyboardInterrupt                     
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note LookupError: 2367.
          *PyExc_LookupError                           
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note MemoryError: 15c5.
          *PyExc_MemoryError                           
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note ModuleNotFoundError: b5b.
          *PyExc_ModuleNotFoundError                   
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.6.'

 -- C Variável: *note PyObject: 339.                   *note NameError: 43f.
          *PyExc_NameError                             
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note NotADirectoryError: 1093.
          *PyExc_NotADirectoryError                    
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339.                   *note NotImplementedError: 228.
          *PyExc_NotImplementedError                   
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339. *PyExc_OSError    *note OSError: 417.
     ' Parte da *note ABI Estável: 553.'               

 -- C Variável: *note PyObject: 339.                   *note OverflowError: 885.
          *PyExc_OverflowError                         
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note PermissionError: d65.
          *PyExc_PermissionError                       
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339.                   *note ProcessLookupError: 1094.
          *PyExc_ProcessLookupError                    
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339.                   *note PythonFinalizationError: 14d.
          *PyExc_PythonFinalizationError               

 -- C Variável: *note PyObject: 339.                   *note RecursionError: d90.
          *PyExc_RecursionError                        
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339.                   *note ReferenceError: 1556.
          *PyExc_ReferenceError                        
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note RuntimeError: 195.
          *PyExc_RuntimeError                          
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note StopAsyncIteration: 1ba5.
          *PyExc_StopAsyncIteration                    
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339.                   *note StopIteration: c15.
          *PyExc_StopIteration                         
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note SyntaxError: 18d.
          *PyExc_SyntaxError                           
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note SystemError: 575.
          *PyExc_SystemError                           
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note SystemExit: d63.
          *PyExc_SystemExit                            
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339. *PyExc_TabError   *note TabError: 543.
     ' Parte da *note ABI Estável: 553.'               

 -- C Variável: *note PyObject: 339.                   *note TimeoutError: 838.
          *PyExc_TimeoutError                          
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339.                   *note TypeError: 2c3.
          *PyExc_TypeError                             
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note UnboundLocalError: 157f.
          *PyExc_UnboundLocalError                     
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note UnicodeDecodeError: a1d.
          *PyExc_UnicodeDecodeError                    
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note UnicodeEncodeError: 677.
          *PyExc_UnicodeEncodeError                    
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note UnicodeError: 12e6.
          *PyExc_UnicodeError                          
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note UnicodeTranslateError: 2434.
          *PyExc_UnicodeTranslateError                 
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note ValueError: 202.
          *PyExc_ValueError                            
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note ZeroDivisionError: 94c.
          *PyExc_ZeroDivisionError                     
     ' Parte da *note ABI Estável: 553.'

Adicionado na versão 3.3: *note PyExc_BlockingIOError: 4c7d, *note
PyExc_BrokenPipeError: 4c7e, *note PyExc_ChildProcessError: 4c81, *note
PyExc_ConnectionError: 4c83, *note PyExc_ConnectionAbortedError: 4c82,
*note PyExc_ConnectionRefusedError: 4c84, *note
PyExc_ConnectionResetError: 4c85, *note PyExc_FileExistsError: 4c8b,
*note PyExc_FileNotFoundError: 4c8c, *note PyExc_InterruptedError: 4c95,
*note PyExc_IsADirectoryError: 4c96, *note PyExc_NotADirectoryError:
4c9d, *note PyExc_PermissionError: 4ca1, *note PyExc_ProcessLookupError:
4ca2. e *note PyExc_TimeoutError: 4cae. foram introduzidos seguindo a
PEP 3151(1).

Adicionado na versão 3.5: *note PyExc_StopAsyncIteration: 4ca7. e *note
PyExc_RecursionError: ee1.

Adicionado na versão 3.6: *note PyExc_ModuleNotFoundError: 4c9b.

Adicionado na versão 3.11: *note PyExc_BaseExceptionGroup: 4c7c.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3151/


File: python.info,  Node: OSError aliases,  Next: Warning types,  Prev: Tipos de exceção,  Up: Exception and warning types

7.5.10.2 OSError aliases
........................

The following are a compatibility aliases to *note PyExc_OSError: 4b44.

Alterado na versão 3.3: Esses aliases costumavam ser tipos de exceção
separados.

Nome C                                Nome Python                           Notas
                                                                            
------------------------------------------------------------------------------------------------------------------
                                                                            
 -- C Variável:                       *note OSError: 417.
          *note PyObject: 339.        
          *PyExc_EnvironmentError
     ' Parte da
     *note ABI Estável: 553.'

 -- C Variável:                       *note OSError: 417.
          *note PyObject: 339.        
          *PyExc_IOError
     ' Parte da
     *note ABI Estável: 553.'

 -- C Variável:                       *note OSError: 417.                   *note [win]: 4e9c.
          *note PyObject: 339.                                              
          *PyExc_WindowsError
     ' Parte da
     *note ABI Estável: 553. on
     Windows desde a versão 3.7.'

Notas:

(win) ‘PyExc_WindowsError’ is only defined on Windows; protect code that
uses this by testing that the preprocessor macro ‘MS_WINDOWS’ is
defined.


File: python.info,  Node: Warning types,  Prev: OSError aliases,  Up: Exception and warning types

7.5.10.3 Warning types
......................

Nome C                                                 Nome Python
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
 -- C Variável: *note PyObject: 339. *PyExc_Warning    *note Warning: 244a.
     ' Parte da *note ABI Estável: 553.'               

 -- C Variável: *note PyObject: 339.                   *note BytesWarning: c3d.
          *PyExc_BytesWarning                          
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note DeprecationWarning: 1a5.
          *PyExc_DeprecationWarning                    
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note EncodingWarning: 1ec5.
          *PyExc_EncodingWarning                       
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.10.'

 -- C Variável: *note PyObject: 339.                   *note FutureWarning: 415.
          *PyExc_FutureWarning                         
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note ImportWarning: 4fa.
          *PyExc_ImportWarning                         
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note PendingDeprecationWarning: 8ce.
          *PyExc_PendingDeprecationWarning             
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note ResourceWarning: 244.
          *PyExc_ResourceWarning                       
     ' Parte da *note ABI Estável: 553. desde a
     versão 3.7.'

 -- C Variável: *note PyObject: 339.                   *note RuntimeWarning: 1bd.
          *PyExc_RuntimeWarning                        
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note SyntaxWarning: 466.
          *PyExc_SyntaxWarning                         
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note UnicodeWarning: 146b.
          *PyExc_UnicodeWarning                        
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyObject: 339.                   *note UserWarning: 244b.
          *PyExc_UserWarning                           
     ' Parte da *note ABI Estável: 553.'

Adicionado na versão 3.2: *note PyExc_ResourceWarning: 4ca4.

Adicionado na versão 3.10: *note PyExc_EncodingWarning: 4c88.


File: python.info,  Node: Tracebacks,  Prev: Exception and warning types,  Up: Tratamento de exceções<2>

7.5.11 Tracebacks
-----------------

 -- C Variável: *note PyTypeObject: ab4. PyTraceBack_Type
     ' Parte da *note ABI Estável: 553.'  Type object for traceback
     objects.  This is available as *note types.TracebackType: b05. in
     the Python layer.

 -- C Função: int PyTraceBack_Check (PyObject *op)

     Return true if 'op' is a traceback object, false otherwise.  This
     function does not account for subtypes.

 -- C Função: int PyTraceBack_Here (PyFrameObject *f)
     ' Parte da *note ABI Estável: 553.'  Replace the *note
     __traceback__: 1309. attribute on the current exception with a new
     traceback prepending 'f' to the existing chain.

     Calling this function without an exception set is undefined
     behavior.

     Esta função retorna ‘0’ em caso de sucesso e retorna ‘-1’ com uma
     exceção definida em caso de falha.

 -- C Função: int PyTraceBack_Print (PyObject *tb, PyObject *f)
     ' Parte da *note ABI Estável: 553.'  Write the traceback 'tb' into
     the file 'f'.

     Esta função retorna ‘0’ em caso de sucesso e retorna ‘-1’ com uma
     exceção definida em caso de falha.


File: python.info,  Node: Utilitários<2>,  Next: Camada de Objetos Abstratos,  Prev: Tratamento de exceções<2>,  Up: Manual de referência da API Python/C

7.6 Utilitários
===============

As funções neste capítulo executam várias tarefas de utilidade pública,
desde ajudar o código C a ser mais portátil em plataformas, usando
módulos Python de C, como também, a analise de argumentos de função e a
construção de valores Python a partir de valores C.

* Menu:

* Utilitários do sistema operacional::
* Funções de sistema::
* Controle de processos::
* Importando módulos: Importando módulos<2>.
* Suporte a marshalling de dados::
* Análise de argumentos e construção de valores::
* Conversão e formação de strings::
* Classificação e conversão de caracteres::
* API do PyHash::
* Reflexão::
* Registro de codec e funções de suporte::
* API C PyTime::
* Suporte a Mapas do Perf::


File: python.info,  Node: Utilitários do sistema operacional,  Next: Funções de sistema,  Up: Utilitários<2>

7.6.1 Utilitários do sistema operacional
----------------------------------------

 -- C Função: *note PyObject: 339. *PyOS_FSPath (PyObject *path)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.6.'  Retorna a representação do sistema de
     arquivos para 'path'.  Se o objeto for um objeto *note str: 44c. ou
     *note bytes: 1c2, então uma nova *note referência forte: 33d. é
     retornada.  Se o objeto implementa a interface *note os.PathLike:
     c6c, então *note __fspath__(): c6d. é retornado desde que seja um
     objeto *note str: 44c. ou *note bytes: 1c2.  Caso contrário, *note
     TypeError: 2c3. é levantada e ‘NULL’ é retornado.

     Adicionado na versão 3.6.

 -- C Função: int Py_FdIsInteractive (FILE *fp, const char *filename)

     Retorna verdadeiro (não zero) se o arquivo padrão de E/S 'fp' com o
     nome 'filename' for considerado interativo.  Este é o caso dos
     arquivos para os quais ‘isatty(fileno(fp))’ é verdade.  Se *note
     PyConfig.interactive: 3cd. for não zero, esta função também retorna
     true se o ponteiro 'filename' for ‘NULL’ ou se o nome for igual a
     uma das strings ‘'<stdin>'’ ou ‘'???'’.

     Esta função não deve ser chamada antes da inicialização do Python.

 -- C Função: void PyOS_BeforeFork ()
     ' Parte da *note ABI Estável: 553. on platforms with fork() desde a
     versão 3.7.'  Função para preparar algum estado interno antes de
     ser feito um fork do processo.  Isso deve ser chamado antes de
     chamar ‘fork()’ ou qualquer função semelhante que clone o processo
     atual.  Disponível apenas em sistemas onde ‘fork()’ é definido.

          Aviso: A chamada C ‘fork()’ só deve ser feita a partir da
          *note thread “main”: 4ea8. (do *note interpretador “main”:
          587.).  O mesmo vale para ‘PyOS_BeforeFork()’.

     Adicionado na versão 3.7.

 -- C Função: void PyOS_AfterFork_Parent ()
     ' Parte da *note ABI Estável: 553. on platforms with fork() desde a
     versão 3.7.'  Função para atualizar algum estado interno depois de
     ser feito um fork do processo.  Isso deve ser chamado a partir do
     processo pai depois de chamar ‘fork()’ ou qualquer função
     semelhante que clone o processo atual, independentemente da
     clonagem do processo ter sido bem-sucedida ou não.  Disponível
     apenas em sistemas onde ‘fork()’ é definido.

          Aviso: A chamada C ‘fork()’ só deve ser feita a partir da
          *note thread “main”: 4ea8. (do *note interpretador “main”:
          587.).  O mesmo vale para ‘PyOS_AfterFork_Parent()’.

     Adicionado na versão 3.7.

 -- C Função: void PyOS_AfterFork_Child ()
     ' Parte da *note ABI Estável: 553. on platforms with fork() desde a
     versão 3.7.'  Função para atualizar o estado interno do
     interpretador depois de ser feito um fork do processo.  Isso deve
     ser chamado a partir do processo filho depois de chamar ‘fork()’ ou
     qualquer função semelhante que clone o processo atual, se houver
     alguma chance do processo ter uma chamada de retorno para o
     interpretador Python.  Disponível apenas em sistemas onde ‘fork()’
     é definido.

          Aviso: A chamada C ‘fork()’ só deve ser feita a partir da
          *note thread “main”: 4ea8. (do *note interpretador “main”:
          587.).  O mesmo vale para ‘PyOS_AfterFork_Child()’.

     Adicionado na versão 3.7.

     Ver também
     ..........

     *note os.register_at_fork(): 300. permite registrar funções
     personalizadas do Python para serem chamadas por *note
     PyOS_BeforeFork(): bd8, *note PyOS_AfterFork_Parent(): bd9. e *note
     PyOS_AfterFork_Child(): 3fb.

 -- C Função: void PyOS_AfterFork ()
     ' Parte da *note ABI Estável: 553. on platforms with fork().'
     Função para atualizar algum estado interno após ser feito um fork
     de processo; isso deve ser chamado no novo processo se o
     interpretador do Python continuar a ser usado.  Se um novo
     executável é carregado no novo processo, esta função não precisa
     ser chamada.

     Descontinuado desde a versão 3.7: Esta função foi sucedida por
     *note PyOS_AfterFork_Child(): 3fb.

 -- C Função: int PyOS_CheckStack ()
     ' Parte da *note ABI Estável: 553. on platforms with USE_STACKCHECK
     desde a versão 3.7.'

     Retorna verdadeiro quando o interpretador fica sem espaço na pilha.
     Esta é uma verificação confiável, mas só está disponível quando
     ‘USE_STACKCHECK’ é definido (atualmente em certas versões do
     Windows usando o compilador Microsoft Visual C++).
     ‘USE_STACKCHECK’ será definido automaticamente; você nunca deve
     alterar a definição em seu próprio código.

 -- C Tipo: typedef void (*PyOS_sighandler_t)(int)
     ' Parte da *note ABI Estável: 553.'

 -- C Função: *note PyOS_sighandler_t: 4d20. PyOS_getsig (int i)
     ' Parte da *note ABI Estável: 553.'  Retorna o manipulador de sinal
     atual para o sinal 'i'.  Este é um invólucro fino em torno de
     ‘sigaction()’ ou ‘signal()’.  Não chame essas funções diretamente!

 -- C Função: *note PyOS_sighandler_t: 4d20. PyOS_setsig (int i,
          PyOS_sighandler_t h)
     ' Parte da *note ABI Estável: 553.'  Define o manipulador de sinal
     para o sinal 'i' como 'h'; retornar o manipulador de sinal antigo.
     Este é um invólucro fino em torno de ‘sigaction()’ ou ‘signal()’.
     Não chame essas funções diretamente!

 -- C Função: int PyOS_InterruptOccurred (void)
     ' Parte da *note ABI Estável: 553.'  Verifica se um sinal ‘SIGINT’
     foi recebido.

     Retorna ‘1’ se um ‘SIGINT’ ocorreu e limpa o sinalizador de sinal,
     ou ‘0’ caso contrário.

     Na maioria dos casos, você deve preferir *note
     PyErr_CheckSignals(): 467. em vez desta função.
     ‘PyErr_CheckSignals()’ invoca os manipuladores de sinal apropriados
     para todos os sinais pendentes, permitindo que o código Python lide
     com o sinal corretamente.  Esta função detecta apenas ‘SIGINT’ e
     não invoca nenhum manipulador de sinal do Python.

     This function is async-signal-safe and this function cannot fail.
     The caller must hold an attached thread state.

 -- C Função: wchar_t *Py_DecodeLocale (const char *arg, size_t *size)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'
          Aviso: Esta função não deve ser chamada diretamente: use a API
          *note PyConfig: 3a6. com a função *note
          PyConfig_SetBytesString(): 9bc. que garante que *note Python
          esteja pré-inicializado: 3f80.

          Esta função não deve ser chamada antes de *note Python estar
          pré-inicializado: 3f80. e para que a localidade LC_CTYPE seja
          configurada corretamente: consulte a função *note
          Py_PreInitialize(): 3eb.

     Decodifica uma string de bytes do *note tratador de erros e
     codificação do sistema de arquivos: 53b.  Se o tratador de erros
     for o *note tratador de errors surrogateescape: 2580, bytes não
     decodificáveis são decodificados como caracteres no intervalo
     U+DC80..U+DCFF; e se uma string de bytes puder ser decodificada
     como um caractere substituto, os bytes são escapados usando o
     tratador de erros surrogateescape em vez de decodificá-los.

     Retorna um ponteiro para uma string de caracteres largos
     recém-alocada, usa *note PyMem_RawFree(): 393. para liberar a
     memória.  Se o tamanho não for ‘NULL’, escreve o número de
     caracteres largos excluindo o caractere nulo em ‘*size’

     Retorna ‘NULL’ em erro de decodificação ou erro de alocação de
     memória.  Se 'size' não for ‘NULL’, ‘*size’ é definido como
     ‘(size_t)-1’ em erro de memória ou definido como ‘(size_t)-2’ em
     erro de decodificação.

     *note tratador de erros e codificação do sistema de arquivos: 53b.
     são selecionados por *note PyConfig_Read(): 790.: veja os membros
     *note filesystem_encoding: 3e8. e *note filesystem_errors: 3e9. de
     *note PyConfig: 3a6.

     Erros de decodificação nunca devem acontecer, a menos que haja um
     bug na biblioteca C.

     Use a função *note Py_EncodeLocale(): be1. para codificar a string
     de caracteres de volta para uma string de bytes.

     Ver também
     ..........

     As funções *note PyUnicode_DecodeFSDefaultAndSize(): 4d9e. e *note
     PyUnicode_DecodeLocaleAndSize(): be2.

     Adicionado na versão 3.5.

     Alterado na versão 3.7: A função agora usa a codificação UTF-8 no
     *note Modo UTF-8 do Python: 656.

     Alterado na versão 3.8: A função agora usa a codificação UTF-8 no
     Windows se *note PyPreConfig.legacy_windows_fs_encoding: 3e6. for
     zero;

 -- C Função: char *Py_EncodeLocale (const wchar_t *text, size_t
          *error_pos)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Codifica
     uma string de caracteres largos para o *note tratador de erros e
     codificação do sistema de arquivos: 53b.  Se o tratador de erros
     for um *note tratador de erros substituto: 2580, os caracteres
     substitutos no intervalo U+DC80..U+DCFF são convertidos em bytes
     0x80..0xFF.

     Retorna um ponteiro para uma string de bytes recém-alocada; use
     *note PyMem_Free(): 148a. para liberar a memória.  Retorna ‘NULL’
     em caso de erro de codificação ou de erro de alocação de memória.

     Se error_pos não for ‘NULL’, ‘*error_pos’ será definido como
     ‘(size_t)-1’ em caso de sucesso, ou definido como o índice do
     caractere inválido em caso de erro de codificação.

     *note tratador de erros e codificação do sistema de arquivos: 53b.
     são selecionados por *note PyConfig_Read(): 790.: veja os membros
     *note filesystem_encoding: 3e8. e *note filesystem_errors: 3e9. de
     *note PyConfig: 3a6.

     Use a função *note Py_DecodeLocale(): be0. para decodificar a
     string de bytes de volta para uma string de caracteres largos.

          Aviso: Esta função não deve ser chamada antes de *note Python
          estar pré-inicializado: 3f80. e para que a localidade LC_CTYPE
          seja configurada corretamente: consulte a função *note
          Py_PreInitialize(): 3eb.

     Ver também
     ..........

     As funções *note PyUnicode_EncodeFSDefault(): 1bca. e *note
     PyUnicode_EncodeLocale(): be3.

     Adicionado na versão 3.5.

     Alterado na versão 3.7: A função agora usa a codificação UTF-8 no
     *note Modo UTF-8 do Python: 656.

     Alterado na versão 3.8: A função agora usa a codificação UTF-8 no
     Windows se *note PyPreConfig.legacy_windows_fs_encoding: 3e6. for
     zero.


File: python.info,  Node: Funções de sistema,  Next: Controle de processos,  Prev: Utilitários do sistema operacional,  Up: Utilitários<2>

7.6.2 Funções de sistema
------------------------

Essas são funções utilitárias que tornam a funcionalidade do módulo
*note sys: d9. acessível ao código C. Todas elas funcionam com o
dicionário do módulo *note sys: d9. da thread do interpretador atual,
que está contido na estrutura interna do estado de thread.

 -- C Função: *note PyObject: 339. *PySys_GetObject (const char *name)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'  Retorna o objeto 'name' do módulo *note sys: d9. ou
     ‘NULL’ se ele não existir, sem lançar uma exceção.

 -- C Função: int PySys_SetObject (const char *name, PyObject *v)
     ' Parte da *note ABI Estável: 553.'  Define 'name' no módulo *note
     sys: d9. como 'v', a menos que 'v' seja ‘NULL’, caso em que 'name'
     é excluído do módulo sys.  Retorna ‘0’ em caso de sucesso e ‘-1’ em
     caso de erro.

 -- C Função: void PySys_ResetWarnOptions ()
     ' Parte da *note ABI Estável: 553.'  Redefine *note
     sys.warnoptions: 3b0. para uma lista vazia.  Esta função pode ser
     chamada antes de *note Py_Initialize(): 8b1.

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     Limpe *note sys.warnoptions: 3b0. e ‘warnings.filters’ em vez
     disso.

 -- C Função: void PySys_WriteStdout (const char *format, ...)
     ' Parte da *note ABI Estável: 553.'  Escreve a string de saída
     descrita por 'format' em *note sys.stdout: ae6.  Nenhuma exceção
     será levantada, mesmo que ocorra truncamento (veja abaixo).

     'format' deve limitar o tamanho total da string de saída formatada
     a 1000 bytes ou menos – após 1000 bytes, a string de saída é
     truncada.  Em particular, isso significa que não devem ocorrer
     formatos “%s” irrestritos; estes devem ser limitados usando “%.1s”,
     onde 2 é um número decimal calculado de forma que 3 mais o tamanho
     máximo de outros textos formatados não exceda 1000 bytes.  Também
     fique atento a “%f”, que pode exibir centenas de dígitos para
     números muito grandes.

     Se ocorrer um problema, ou se *note sys.stdout: ae6. não estiver
     definido, a mensagem formatada será escrita na saída padrão (nível
     C) 'stdout'.

 -- C Função: void PySys_WriteStderr (const char *format, ...)
     ' Parte da *note ABI Estável: 553.'  Como *note
     PySys_WriteStdout(): 4d60, mas escreve em *note sys.stderr: 940. ou
     'stderr' em vez disso.

 -- C Função: void PySys_FormatStdout (const char *format, ...)
     ' Parte da *note ABI Estável: 553.'  Função semelhante a
     PySys_WriteStdout(), mas formata a mensagem usando *note
     PyUnicode_FromFormatV(): 574. e não trunca a mensagem para um
     comprimento arbitrário.

     Adicionado na versão 3.2.

 -- C Função: void PySys_FormatStderr (const char *format, ...)
     ' Parte da *note ABI Estável: 553.'  Como *note
     PySys_FormatStdout(): 4d5c, mas escreve em *note sys.stderr: 940.
     ou 'stderr' em vez disso.

     Adicionado na versão 3.2.

 -- C Função: *note PyObject: 339. *PySys_GetXOptions ()
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553. desde a versão 3.7.'  Retorna o dicionário atual de
     opções *note -X: 176, de forma semelhante a *note sys._xoptions:
     1ec7.  Em caso de erro, retorna ‘NULL’ e uma exceção é definida.

     Adicionado na versão 3.2.

 -- C Função: int PySys_Audit (const char *event, const char *format,
          ...)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Levanta
     um evento de auditoria com todos os ganchos ativos.  Retorna zero
     em caso de sucesso e um valor diferente de zero com uma exceção
     definida em caso de falha.

     O argumento de string 'event' não pode ser 'NULL'.

     Se algum gancho tiver sido adicionado, o argumento 'format' e
     outros serão usados para construir uma tupla a ser passada.  Além
     de ‘N’, os mesmos caracteres de formatação usados em *note
     Py_BuildValue(): 8ac. estão disponíveis.  Se o valor construído não
     for uma tupla, ele será adicionado a uma tupla de um único
     elemento.

     A opção de formato ‘N’ não deve ser usada.  Ela consome uma
     referência, mas como não há como saber se os argumentos dessa
     função serão consumidos, usá-la pode causar vazamentos de
     referência.

     Observe que os caracteres de formato ‘#’ devem sempre ser tratados
     como *note Py_ssize_t: a69, independentemente de ‘PY_SSIZE_T_CLEAN’
     ter sido definido.

     *note sys.audit(): 16a0. executa a mesma função a partir do código
     Python.

     Veja também *note PySys_AuditTuple(): 36e.

     Adicionado na versão 3.8.

     Alterado na versão 3.8.2: É necessário o tipo *note Py_ssize_t:
     a69. para caracteres de formato ‘#’.  Anteriormente, um aviso de
     descontinuação era levantado.

 -- C Função: int PySys_AuditTuple (const char *event, PyObject *args)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'
     Semelhante a *note PySys_Audit(): 36f, mas passa argumentos como um
     objeto Python.  'args' deve ser uma *note tuple: 370.  Para não
     passar argumentos, 'args' pode ser 'NULL'.

     Adicionado na versão 3.13.

 -- C Função: int PySys_AddAuditHook (Py_AuditHookFunction hook, void
          *userData)

     Adiciona o 'gancho' chamável à lista de ganchos de auditoria
     ativos.  Retorna zero em caso de sucesso e um valor diferente de
     zero em caso de falha.  Se o ambiente de execução já tiver sido
     inicializado, também define um erro em caso de falha.  Os ganchos
     adicionados por meio desta API são chamados para todos os
     interpretadores criados pelo ambiente de execução.

     O ponteiro 'userData' é passado para a função de gancho.  Como as
     funções de gancho podem ser chamadas de diferentes tempos de
     execução, esse ponteiro não deve se referir diretamente ao estado
     do Python.

     Esta função pode ser chamada com segurança antes de *note
     Py_Initialize(): 8b1.  Quando chamada após a inicialização em tempo
     de execução, os ganchos de auditoria existentes são notificados e
     podem abortar silenciosamente a operação, levantando um erro da
     classe *note Exception: 9e2. (outros erros não serão silenciados).

     The hook function is always called with the GIL held by the Python
     interpreter that raised the event.

     Consulte a PEP 578(1) para uma descrição detalhada da auditoria.
     As funções no ambiente de execução e na biblioteca padrão que
     levantam eventos estão listadas na *note tabela de eventos de
     auditoria: 199c.  Os detalhes estão na documentação de cada função.

     Se o interpretador estiver inicializado, esta função levanta um
     evento de auditoria ‘sys.addaudithook’ sem argumentos.  Se algum
     gancho existente levantar uma exceção derivada de *note Exception:
     9e2, o novo gancho não será adicionado e a exceção será tratada.
     Consequentemente, os chamadores não podem presumir que seu gancho
     foi adicionado, a menos que controlem todos os ganchos existentes.

      -- C Tipo: typedef int (*Py_AuditHookFunction)(const char *event,
               *note PyObject: 339. *args, void *userData)

          O tipo da função de gancho.  'event' é o argumento de evento
          em string C passado para *note PySys_Audit(): 36f. ou *note
          PySys_AuditTuple(): 36e.  'args' tem a garantia de ser um
          *note PyTupleObject: 4eac.  'userData' é o argumento passado
          para PySys_AddAuditHook().

     Adicionado na versão 3.8.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0578/


File: python.info,  Node: Controle de processos,  Next: Importando módulos<2>,  Prev: Funções de sistema,  Up: Utilitários<2>

7.6.3 Controle de processos
---------------------------

 -- C Função: void Py_FatalError (const char *message)
     ' Parte da *note ABI Estável: 553.'

     Exibe uma mensagem de erro fatal e encerra forçadamente o processo.
     Nenhuma limpeza é realizada.  Esta função só deve ser invocada
     quando uma condição for detectada que torne perigoso continuar
     usando o interpretador Python; por exemplo, quando a administração
     de objetos parecer estar corrompida.  No Unix, a função da
     biblioteca padrão C ‘abort()’ é chamada, que tentará produzir um
     arquivo ‘core’.

     A função ‘Py_FatalError()’ é substituída por uma macro que registra
     automaticamente o nome da função atual, a menos que a macro
     ‘Py_LIMITED_API’ esteja definida.

     Alterado na versão 3.9: Registra o nome da função automaticamente.

 -- C Função: void Py_Exit (int status)
     ' Parte da *note ABI Estável: 553.'

     Encerra o processo atual.  Isso chama *note Py_FinalizeEx(): d37.
     e, em seguida, chama a função da biblioteca padrão C
     ‘exit(status)’.  Se *note Py_FinalizeEx(): d37. indicar um erro, o
     código de status de saída será definido como 120.

     Alterado na versão 3.6: Erros da finalização não são mais
     ignorados.

 -- C Função: int Py_AtExit (void (*func)())
     ' Parte da *note ABI Estável: 553.'

     Registra uma função de limpeza para ser chamada por *note
     Py_FinalizeEx(): d37.  A função de limpeza será chamada sem
     argumentos e não deve retornar nenhum valor.  No máximo 32 funções
     de limpeza podem ser registradas.  Quando o registro for
     bem-sucedido, *note Py_AtExit(): 4dbf. retorna ‘0’; em caso de
     falha, retorna ‘-1’.  A última função de limpeza registrada é
     chamada primeiro.  Cada função de limpeza será chamada no máximo
     uma vez.  Como a finalização interna do Python terá sido concluída
     antes da função de limpeza, nenhuma API do Python deve ser chamada
     por 'func'.

     Ver também
     ..........

     *note PyUnstable_AtExit(): 1672. para passar um argumento ‘void
     *data’.


File: python.info,  Node: Importando módulos<2>,  Next: Suporte a marshalling de dados,  Prev: Controle de processos,  Up: Utilitários<2>

7.6.4 Importando módulos
------------------------

 -- C Função: *note PyObject: 339. *PyImport_ImportModule (const char
          *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

     Esta é uma função auxiliar em torno de *note PyImport_Import():
     1443, que recebe um const char* como argumento em vez de um *note
     PyObject: 339.*.

 -- C Função: *note PyObject: 339. *PyImport_ImportModuleNoBlock (const
          char *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Esta função é um alias descontinuado de *note
     PyImport_ImportModule(): 3be.

     Alterado na versão 3.3: Essa função falhava em alguns casos, quando
     a trava de importação era mantida por outra thread.  No Python 3.3,
     no entanto, o esquema de trava mudou passando a ser de travas por
     módulo na maior parte, dessa forma, o comportamento especial dessa
     função não é mais necessário.

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     Use *note PyImport_ImportModule(): 3be.

 -- C Função: *note PyObject: 339. *PyImport_ImportModuleEx (const char
          *name, PyObject *globals, PyObject *locals, PyObject
          *fromlist)
     'Retorna valor: Nova referência.'

     Importa um módulo.  Isso é melhor descrito referindo-se à função
     embutida do Python *note __import__(): 8da.

     O valor de retorno é uma nova referência ao módulo importado ou
     pacote de nível superior, ou ‘NULL’ com uma exceção definida em
     caso de falha.  Como para *note __import__(): 8da, o valor de
     retorno quando um submódulo de um pacote é solicitado é normalmente
     o pacote de nível superior, a menos que um 'fromlist' não vazio
     seja fornecido.

     As importações com falhas removem objetos incompletos do módulo,
     como em *note PyImport_ImportModule(): 3be.

 -- C Função: *note PyObject: 339. *PyImport_ImportModuleLevelObject
          (PyObject *name, PyObject *globals, PyObject *locals, PyObject
          *fromlist, int level)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.7.'  Importa um módulo.  Isso é melhor
     descrito referindo-se à função embutida do Python *note
     __import__(): 8da, já que a função padrão *note __import__(): 8da.
     chama essa função diretamente.

     O valor de retorno é uma nova referência ao módulo importado ou
     pacote de nível superior, ou ‘NULL’ com uma exceção definida em
     caso de falha.  Como para *note __import__(): 8da, o valor de
     retorno quando um submódulo de um pacote é solicitado é normalmente
     o pacote de nível superior, a menos que um 'fromlist' não vazio
     seja fornecido.

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 339. *PyImport_ImportModuleLevel (const
          char *name, PyObject *globals, PyObject *locals, PyObject
          *fromlist, int level)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Semelhante para *note PyImport_ImportModuleLevelObject():
     4cd2, mas o nome é uma string codificada em UTF-8 de um objeto
     Unicode.

     Alterado na versão 3.3: Valores negativos para 'level' não são mais
     aceitos.

 -- C Função: *note PyObject: 339. *PyImport_Import (PyObject *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Essa é uma interface de alto nível que chama a atual “função
     auxiliar de importação” (com um 'level' explícito de 0,
     significando importação absoluta).  Invoca a função *note
     __import__(): 8da. a partir de ‘__builtins__’ da global atual.
     Isso significa que a importação é feita usando quaisquer extras de
     importação instalados no ambiente atual.

     Esta função sempre usa importações absolutas.

 -- C Função: *note PyObject: 339. *PyImport_ReloadModule (PyObject *m)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Recarrega um módulo.  Retorna uma nova referência para o
     módulo recarregado, ou ‘NULL’ com uma exceção definida em caso de
     falha (o módulo ainda existe neste caso).

 -- C Função: *note PyObject: 339. *PyImport_AddModuleRef (const char
          *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.13.'  Retorna o objeto do módulo
     correspondente ao nome do módulo.

     O argumento 'name' pode ter o formato ‘pacote.módulo’.  Primeiro,
     verifica se existe um módulo no dicionário de módulos e, caso
     contrário, cria um novo e insere-o no dicionário de módulos.

     Retorna uma *note referência forte: 33d. ao módulo em caso de
     sucesso.  Retorna ‘NULL’ com uma exceção definida em caso de falha.

     O nome do módulo 'name' é decodificado de UTF-8.

     Esta função não carrega nem importa o módulo; se o módulo ainda não
     estiver carregado, você receberá um objeto de módulo vazio.  Use
     *note PyImport_ImportModule(): 3be. ou uma de suas variantes para
     importar um módulo.  Estruturas de pacotes implícitas por um nome
     com pontos para 'name' não são criadas se ainda não existirem.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 339. *PyImport_AddModuleObject (PyObject
          *name)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553. desde a versão 3.7.'  Semelhante a *note
     PyImport_AddModuleRef(): 356, mas retorna uma *note referência
     emprestada: 33e. e 'name' é um objeto Python *note str: 44c.

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 339. *PyImport_AddModule (const char
          *name)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'  Semelhante a *note PyImport_AddModuleRef(): 356,
     mas retorna uma *note referência emprestada: 33e.

 -- C Função: *note PyObject: 339. *PyImport_ExecCodeModule (const char
          *name, PyObject *co)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

     Dado um nome de módulo (possivelmente no formato ‘pacote.módulo’) e
     um objeto código lido de um arquivo bytecode Python ou obtido da
     função embutida *note compile(): 192, carrea o módulo.  Retorna uma
     nova referência ao objeto do módulo ou ‘NULL’ com uma exceção
     definida se ocorrer um erro.  'name' é removido de *note
     sys.modules: 1636. em casos de erro, mesmo que 'name' já estivesse
     em *note sys.modules: 1636. na entrada de *note
     PyImport_ExecCodeModule(): 4cca.  Deixar módulos incompletamente
     inicializados em *note sys.modules: 1636. é perigoso, pois as
     importações desses módulos não têm como saber que o objeto do
     módulo está em um estado desconhecido (e provavelmente corrompido
     em relação às intenções do autor do módulo).

     Os atributos *note __spec__: 20a7. e *note __loader__: 2e2. do
     módulo serão definidos, caso ainda não estejam, com os valores
     apropriados.  O carregador do spec será definido como o atributo
     ‘__loader__’ do módulo (se definido) e, caso contrário, como uma
     instância de *note SourceFileLoader: 10ad.

     O atributo *note __file__: 20ad. do módulo será definido para o
     *note co_filename: 13b4. do objeto código.  Se aplicável, *note
     __cached__: 2d5. também será definido.

     Esta função recarregará o módulo se este já tiver sido importado.
     Veja *note PyImport_ReloadModule(): 4cd3. para forma desejada de
     recarregar um módulo.

     Se 'name' apontar para um nome pontilhado no formato de
     ‘package.module’, quaisquer estruturas de pacote ainda não criadas
     ainda não serão criadas.

     Veja também *note PyImport_ExecCodeModuleEx(): 4ccb. e *note
     PyImport_ExecCodeModuleWithPathnames(): 4ccd.

     Alterado na versão 3.12: A configuração de *note __cached__: 2d5. e
     *note __loader__: 2e2. está descontinuada.  Consulte *note
     ModuleSpec: 1fee. para alternativas.

 -- C Função: *note PyObject: 339. *PyImport_ExecCodeModuleEx (const
          char *name, PyObject *co, const char *pathname)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Como *note PyImport_ExecCodeModule(): 4cca, mas o atributo
     *note __file__: 20ad. do objeto módulo é definido como 'pathname'
     se não for ‘NULL’.

     Veja também *note PyImport_ExecCodeModuleWithPathnames(): 4ccd.

 -- C Função: *note PyObject: 339. *PyImport_ExecCodeModuleObject
          (PyObject *name, PyObject *co, PyObject *pathname, PyObject
          *cpathname)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.7.'  Como *note PyImport_ExecCodeModuleEx():
     4ccb, mas o atributo *note __cached__: 2d5. do objeto módulo é
     definido como 'cpathname' se não for ‘NULL’.  Das três funções,
     esta é a preferida para usar.

     Adicionado na versão 3.3.

     Alterado na versão 3.12: A configuração de *note __cached__: 2d5.
     está descontinuada.  Consulte *note ModuleSpec: 1fee. para
     alternativas.

 -- C Função: *note PyObject: 339. *PyImport_ExecCodeModuleWithPathnames
          (const char *name, PyObject *co, const char *pathname, const
          char *cpathname)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Como *note PyImport_ExecCodeModuleObject(): 4ccc, mas
     'name', 'pathname' e 'cpathname' são strings codificadas em UTF-8.
     Também são feitas tentativas para descobrir qual valor para
     'pathname' deve ser de 'cpathname' se o primeiro estiver definido
     como ‘NULL’.

     Adicionado na versão 3.2.

     Alterado na versão 3.3: Usa ‘imp.source_from_cache()’ no cálculo do
     caminho de origem se apenas o caminho do bytecode for fornecido.

     Alterado na versão 3.12: Não usa mais o módulo ‘imp’ removido.

 -- C Função: long PyImport_GetMagicNumber ()
     ' Parte da *note ABI Estável: 553.'  Retorna o número mágico para
     arquivos de bytecode Python (também conhecido como arquivo ‘.pyc’).
     O número mágico deve estar presente nos primeiros quatro bytes do
     arquivo bytecode, na ordem de bytes little-endian.  Retorna ‘-1’ em
     caso de erro.

     Alterado na versão 3.3: Retorna o valor de ‘-1’ no caso de falha.

 -- C Função: const char *PyImport_GetMagicTag ()
     ' Parte da *note ABI Estável: 553.'  Retorna a string de tag mágica
     para nomes de arquivo de bytecode Python no formato de PEP 3147(1).
     Tenha em mente que o valor em ‘sys.implementation.cache_tag’ é
     autoritativo e deve ser usado no lugar desta função.

     Adicionado na versão 3.2.

 -- C Função: *note PyObject: 339. *PyImport_GetModuleDict ()
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'  Retorna o dicionário usado para a administração do
     módulo (também conhecido como ‘sys.modules’).  Observe que esta é
     uma variável por interpretador.

 -- C Função: *note PyObject: 339. *PyImport_GetModule (PyObject *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.8.'  Retorna o módulo já importado com o nome
     fornecido.  Se o módulo ainda não foi importado, retorna ‘NULL’,
     mas não define um erro.  Retorna ‘NULL’ e define um erro se a
     pesquisa falhar.

     Adicionado na versão 3.7.

 -- C Função: *note PyObject: 339. *PyImport_GetImporter (PyObject
          *path)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Return a finder object for a *note sys.path:
     3b4./‘pkg.__path__’ item 'path', possibly by fetching it from the
     *note sys.path_importer_cache: 5e4. dict.  If it wasn’t yet cached,
     traverse *note sys.path_hooks: 105a. until a hook is found that can
     handle the path item.  Return ‘None’ if no hook could; this tells
     our caller that the *note path based finder: 2188. could not find a
     finder for this path item.  Cache the result in *note
     sys.path_importer_cache: 5e4.  Return a new reference to the finder
     object.

 -- C Função: int PyImport_ImportFrozenModuleObject (PyObject *name)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Carrega um
     módulo congelado chamado 'name'.  Retorna ‘1’ para sucesso, ‘0’ se
     o módulo não for encontrado e ‘-1’ com uma exceção definida se a
     inicialização falhar.  Para acessar o módulo importado em um
     carregamento bem-sucedido, use *note PyImport_ImportModule(): 3be.
     (Observe o nome incorreto — esta função recarregaria o módulo se
     ele já tivesse sido importado.)

     Adicionado na versão 3.3.

     Alterado na versão 3.4: O atributo ‘__file__’ não está mais
     definido no módulo.

 -- C Função: int PyImport_ImportFrozenModule (const char *name)
     ' Parte da *note ABI Estável: 553.'  Semelhante a *note
     PyImport_ImportFrozenModuleObject(): 4cd1, mas o nome é uma string
     codificada em UTF-8 em vez de um objeto Unicode.

 -- C Struct: struct _frozen

     Esta é a definição do tipo de estrutura para descritores de módulo
     congelados, conforme gerado pelo utilitário ‘freeze’ (veja
     ‘Tools/freeze/’ na distribuição fonte do Python).  Sua definição,
     encontrada em ‘Include/import.h’, é:

          struct _frozen {
              const char *name;
              const unsigned char *code;
              int size;
              bool is_package;
          };

     Alterado na versão 3.11: O novo campo ‘is_package’ indica se o
     módulo é um pacote ou não.  Isso substitui a configuração do campo
     ‘size’ para um valor negativo.

 -- C Variável: const struct *note _frozen: 775. *PyImport_FrozenModules

     Este ponteiro é inicializado para apontar para um vetor de
     registros de *note _frozen: 775, terminado por um cujos membros são
     todos ‘NULL’ ou zero.  Quando um módulo congelado é importado, ele
     é pesquisado nesta tabela.  O código de terceiros pode fazer
     truques com isso para fornecer uma coleção criada dinamicamente de
     módulos congelados.

 -- C Função: int PyImport_AppendInittab (const char *name, PyObject
          *(*initfunc)(void))
     ' Parte da *note ABI Estável: 553.'  Adiciona um único módulo à
     tabela existente de módulos embutidos.  Este é um invólucro prático
     em torno de *note PyImport_ExtendInittab(): 18a5, retornando ‘-1’
     se a tabela não puder ser estendida.  O novo módulo pode ser
     importado pelo nome 'name' e usa a função 'initfunc' como a função
     de inicialização chamada na primeira tentativa de importação.  Deve
     ser chamado antes de *note Py_Initialize(): 8b1.

 -- C Struct: struct _inittab

     Structure describing a single entry in the list of built-in
     modules.  Programs which embed Python may use an array of these
     structures in conjunction with *note PyImport_ExtendInittab():
     18a5. to provide additional built-in modules.  The structure
     consists of two members:

      -- C Membro: const char *name

          The module name, as an ASCII encoded string.

      -- C Membro: *note PyObject: 339. *(*initfunc)(void)

          Initialization function for a module built into the
          interpreter.

 -- C Função: int PyImport_ExtendInittab (struct _inittab *newtab)

     Add a collection of modules to the table of built-in modules.  The
     'newtab' array must end with a sentinel entry which contains ‘NULL’
     for the *note name: 4eb4. field; failure to provide the sentinel
     value can result in a memory fault.  Returns ‘0’ on success or ‘-1’
     if insufficient memory could be allocated to extend the internal
     table.  In the event of failure, no modules are added to the
     internal table.  This must be called before *note Py_Initialize():
     8b1.

     Se Python é inicializado várias vezes, *note
     PyImport_AppendInittab(): 18a4. ou *note PyImport_ExtendInittab():
     18a5. devem ser chamados antes de cada inicialização do Python.

 -- C Variável: struct *note _inittab: 4eb3. *PyImport_Inittab

     The table of built-in modules used by Python initialization.  Do
     not use this directly; use *note PyImport_AppendInittab(): 18a4.
     and *note PyImport_ExtendInittab(): 18a5. instead.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3147/


File: python.info,  Node: Suporte a marshalling de dados,  Next: Análise de argumentos e construção de valores,  Prev: Importando módulos<2>,  Up: Utilitários<2>

7.6.5 Suporte a 'marshalling' de dados
--------------------------------------

Essas rotinas permitem que o código C trabalhe com objetos serializados
usando o mesmo formato de dados que o módulo *note marshal: 8d.  Existem
funções para gravar dados no formato de serialização e funções
adicionais que podem ser usadas para ler os dados novamente.  Os
arquivos usados para armazenar dados empacotados devem ser abertos no
modo binário.

Os valores numéricos são armazenados primeiro com o byte menos
significativo.

O módulo oferece suporte a duas versões do formato de dados: a versão 0
é a versão histórica, a versão 1 compartilha strings internas no arquivo
e após a desserialização.  A versão 2 usa um formato binário para
números de ponto flutuante.  ‘Py_MARSHAL_VERSION’ indica o formato do
arquivo atual (atualmente 2).

 -- C Função: void PyMarshal_WriteLongToFile (long value, FILE *file,
          int version)

     Aplica 'marshalling' em um inteiro long, 'value', para 'file'.
     Isso escreverá apenas os 32 bits menos significativos de 'value';
     independentemente do tamanho do tipo nativo long.  'version' indica
     o formato do arquivo.

     Esta função pode falhar, caso em que define o indicador de erro.
     Use *note PyErr_Occurred(): 1a3b. para verificar isso.

 -- C Função: void PyMarshal_WriteObjectToFile (PyObject *value, FILE
          *file, int version)

     Aplica 'marshalling' em um objeto Python, 'value', para 'file'.
     'version' indica o formato do arquivo.

     Esta função pode falhar, caso em que define o indicador de erro.
     Use *note PyErr_Occurred(): 1a3b. para verificar isso.

 -- C Função: *note PyObject: 339. *PyMarshal_WriteObjectToString
          (PyObject *value, int version)
     'Retorna valor: Nova referência.'  Retorna um objeto de bytes que
     contém a representação pós-'marshalling' de 'value'.  'version'
     indica o formato do arquivo.

As seguintes funções permitem que os valores pós-'marshalling' sejam
lidos novamente.

 -- C Função: long PyMarshal_ReadLongFromFile (FILE *file)

     Retorna um long C do fluxo de dados em um FILE* aberto para
     leitura.  Somente um valor de 32 bits pode ser lido usando essa
     função, independentemente do tamanho nativo de long.

     Em caso de erro, define a exceção apropriada (*note EOFError:
     131c.) e retorna ‘-1’.

 -- C Função: int PyMarshal_ReadShortFromFile (FILE *file)

     Retorna um short C do fluxo de dados em um FILE* aberto para
     leitura.  Somente um valor de 16 bits pode ser lido usando essa
     função, independentemente do tamanho nativo de short.

     Em caso de erro, define a exceção apropriada (*note EOFError:
     131c.) e retorna ‘-1’.

 -- C Função: *note PyObject: 339. *PyMarshal_ReadObjectFromFile (FILE
          *file)
     'Retorna valor: Nova referência.'  Retorna um objeto Python do
     fluxo de dados em um FILE* aberto para leitura.

     Em caso de erro, define a exceção apropriada (*note EOFError: 131c,
     *note ValueError: 202. ou *note TypeError: 2c3.) e retorna ‘NULL’.

 -- C Função: *note PyObject: 339. *PyMarshal_ReadLastObjectFromFile
          (FILE *file)
     'Retorna valor: Nova referência.'  Retorna um objeto Python do
     fluxo de dados em um FILE* aberto para leitura.  Diferentemente de
     *note PyMarshal_ReadObjectFromFile(): 4ebc, essa função presume que
     nenhum objeto adicional será lido do arquivo, permitindo que ela
     carregue agressivamente os dados do arquivo na memória, para que a
     desserialização possa operar a partir de dados na memória em vez de
     ler um byte por vez do arquivo.  Use essa variante apenas se tiver
     certeza de que não estará lendo mais nada do arquivo.

     Em caso de erro, define a exceção apropriada (*note EOFError: 131c,
     *note ValueError: 202. ou *note TypeError: 2c3.) e retorna ‘NULL’.

 -- C Função: *note PyObject: 339. *PyMarshal_ReadObjectFromString
          (const char *data, Py_ssize_t len)
     'Retorna valor: Nova referência.'  Retorna um objeto Python do
     fluxo de dados em um buffer de bytes contendo 'len' bytes apontados
     por 'data'.

     Em caso de erro, define a exceção apropriada (*note EOFError: 131c,
     *note ValueError: 202. ou *note TypeError: 2c3.) e retorna ‘NULL’.


File: python.info,  Node: Análise de argumentos e construção de valores,  Next: Conversão e formação de strings,  Prev: Suporte a marshalling de dados,  Up: Utilitários<2>

7.6.6 Análise de argumentos e construção de valores
---------------------------------------------------

Essas funções são úteis ao criar suas próprias funções e métodos de
extensão.  Informações adicionais e exemplos estão disponíveis em *note
Estendendo e incorporando o interpretador Python: 1d56.

As três primeiras funções descritas, *note PyArg_ParseTuple(): 571,
*note PyArg_ParseTupleAndKeywords(): 383, e *note PyArg_Parse(): 1b5b,
todas usam a 'string de formatação' que informam à função sobre os
argumentos esperados.  As strings de formato usam a mesma sintaxe para
cada uma dessas funções.

* Menu:

* Análise de argumentos: Análise de argumentos<2>.
* Construindo valores::


File: python.info,  Node: Análise de argumentos<2>,  Next: Construindo valores,  Up: Análise de argumentos e construção de valores

7.6.6.1 Análise de argumentos
.............................

Uma string de formato consiste em zero ou mais “unidades de formato”.
Uma unidade de formato descreve um objeto Python; geralmente é um único
caractere ou uma sequência entre parênteses de unidades de formato.  Com
algumas poucas exceções, uma unidade de formato que não é uma sequência
entre parênteses normalmente corresponde a um único argumento de
endereço para essas funções.  Na descrição a seguir, a forma citada é a
unidade de formato; a entrada em parênteses ( ) é o tipo de objeto
Python que corresponde à unidade de formato; e a entrada em colchetes [
] é o tipo da variável(s) C cujo endereço deve ser passado.

* Menu:

* Strings e buffers::
* Números: Números<2>.
* Outros objetos::
* Funções da API::


File: python.info,  Node: Strings e buffers,  Next: Números<2>,  Up: Análise de argumentos<2>

7.6.6.2 Strings e buffers
.........................

     Nota: No Python 3.12 e anteriores, a macro ‘PY_SSIZE_T_CLEAN’ deve
     ser definida antes da inclusão de ‘Python.h’ para usar todas as
     variantes no formato ‘#’ (‘s#’, ‘y#’, etc.)  explicadas abaixo.
     Isso não é necessário no Python 3.13 e posteriores.

Esses formatos permitem acessar um objeto como um pedaço contíguo de
memória.  Você não precisa fornecer armazenamento bruto para a área de
unicode ou bytes retornada.

Salvo indicação em contrário, os buffers não são terminados em NUL.

Existem três maneiras pelas quais strings e buffers podem ser
convertidos em C:

   * Formatos como ‘y*’ e ‘s*’ estão dentro de uma estrutura *note
     Py_buffer: 758.  Isso bloqueia o buffer subjacente para que o
     chamador possa posteriormente usar o buffer, mesmo dentro de um
     bloco *note Py_BEGIN_ALLOW_THREADS: 4b67. sem que haja o risco de
     que dados mutáveis sejam redimensionados ou destruídos.  Dessa
     forma, 'você precisa chamar' *note PyBuffer_Release(): 39a. depois
     de ter concluído o processamento de dados (ou em qualquer caso de
     interrupção precoce).

   * Os formatos ‘es’, ‘es#’, ‘et’ e ‘et#’ alocam o buffer resultante.
     'Você precisa chamar' *note PyMem_Free(): 148a. depois de ter
     concluído o processamento de dados (ou em qualquer caso de
     interrupção precoce).

   * Outros formatos usam um *note str: 44c. ou um *note objeto bytes ou
     similar: d4f. somente leitura, como *note bytes: 1c2, e fornecem um
     ponteiro ‘const char *’ para seu buffer.  Nesse caso, o buffer é
     “emprestado”: ele é gerenciado pelo objeto Python correspondente e
     compartilha o tempo de vida desse objeto.  Você mesmo não precisará
     liberar nenhuma memória.

     Para garantir que o buffer subjacente possa ser emprestado com
     segurança, o campo *note PyBufferProcs.bf_releasebuffer: 763. do
     objeto deve ser ‘NULL’.  Isso não permite objetos mutáveis comuns,
     como *note bytearray: 2ea, mas também alguns objetos somente
     leitura, como *note memoryview: 2eb. ou *note bytes: 1c2.

     Além desse requisito ‘bf_releasebuffer’, não há nenhuma verificação
     para saber se o objeto de entrada é imutável (por exemplo, se ele
     atenderia a uma solicitação de um buffer gravável ou se outro
     thread pode alterar os dados).

‘s’ (*note str: 44c.) [const char *]

     Converte um objeto Unicode para um ponteiro em C para uma string.
     Um ponteiro para uma string existente é armazenado na variável do
     ponteiro do caractere cujo o endereço que você está passando.  A
     string em C é terminada em NULO. A string no Python não deve conter
     pontos de código nulo embutidos; se isso acontecer, uma exceção
     *note ValueError: 202. é levantada.  Objetos Unicode são
     convertidos para strings em C usando a codificação ‘'utf-8'’.  Se
     essa conversão falhar, uma exceção *note UnicodeError: 12e6. é
     levantada.

          Nota: Esse formato não aceita *note objetos bytes ou
          similares: d4f.  Se você quer aceitar caminhos de sistema de
          arquivos e convertê-los para strings de caracteres em C, é
          preferível que use o formato ‘O&’ com *note
          PyUnicode_FSConverter(): d3b. como 'conversor'.

     Alterado na versão 3.5: Anteriormente, a exceção *note TypeError:
     2c3. era levantada quando pontos de código nulo embutidos em string
     Python eram encontrados.

‘s*’ (*note str: 44c. ou *note objeto bytes ou similar: d4f.) [Py_buffer]

     Esse formato aceita tanto objetos Unicode quanto objetos bytes ou
     similares.  Preenche uma estrutura *note Py_buffer: 758. fornecida
     pelo chamador.  Nesse caso, a string em C resultante pode conter
     bytes NUL embutidos.  Objetos Unicode são convertidos para strings
     em C usando codificação ‘'utf-8'’.

‘s#’ (*note str: 44c, *note objeto bytes ou similar: d4f. somente leitura) [const char *, *note Py_ssize_t: a69.]

     Como ‘s*’, exceto que não fornece um *note buffer emprestado: 4ec3.
     O resultado é armazenado em duas variáveis em C, a primeira é um
     ponteiro para uma string em C, a segunda é o tamanho.  A string
     pode conter bytes nulos embutidos.  Objetos Unicode são convertidos
     para strings em C usando codificação ‘'utf-8'’.

‘z’ (*note str: 44c. ou ‘None’) [const char *]

     Como ‘s’, mas o objeto Python também pode ser ‘None’, caso em que o
     ponteiro C é definido como ‘NULL’.

‘z*’ (*note str: 44c, *note objeto bytes ou similar: d4f. ou ‘None’) [Py_buffer]

     Como ‘s*’, mas o objeto Python também pode ser ‘None’, caso em que
     o membro ‘buf’ da estrutura *note Py_buffer: 758. é definida como
     ‘NULL’.

‘z#’ (*note str: 44c, *note objeto bytes ou similar: d4f. somente leitura ou ‘None’) [const char *, *note Py_ssize_t: a69.]

     Como ‘s#’, mas o objeto Python também pode ser ‘None’, caso em que
     o ponteiro C é definido como ‘NULL’.

‘y’ (*note objeto bytes ou similar: d4f. somente leitura) [const char *]

     Este formato converte um objeto bytes ou similar para um ponteiro C
     para uma string de caracteres *note emprestada: 4ec3.; não aceita
     objetos Unicode.  O buffer de bytes não pode conter bytes nulos
     embutidos; se isso ocorrer uma exceção *note ValueError: 202. será
     levantada.

     Alterado na versão 3.5: Anteriormente, a exceção *note TypeError:
     2c3. era levantada quando pontos de código nulo embutidos em string
     Python eram encontrados no buffer de bytes.

‘y*’ (*note objeto bytes ou similar: d4f.) [Py_buffer]

     Esta variante em ‘s*’ não aceita objetos unicode, apenas objetos
     bytes ou similares.  'Esta é a maneira recomendada para aceitar
     dados binários.'

‘y#’ (*note objeto bytes ou similar: d4f. somente leitura) [const char *, *note Py_ssize_t: a69.]

     Esta variação de ‘s#’ não aceita objetos Unicode, apenas objetos
     bytes ou similares.

‘S’ (*note bytes: 1c2.) [PyBytesObject *]

     Exige que o objeto Python seja um objeto *note bytes: 1c2, sem
     tentar nenhuma conversão.  Levanta *note TypeError: 2c3. se o
     objeto não for um objeto byte.  A variável C pode ser declarada
     como *note PyObject: 339.*.

‘Y’ (*note bytearray: 2ea.) [PyByteArrayObject *]

     Exige que o objeto Python seja um objeto *note bytearray: 2ea, sem
     aceitar qualquer conversão.  Levanta *note TypeError: 2c3. se o
     objeto não é um objeto *note bytearray: 2ea.  A variável C apenas
     pode ser declarada como *note PyObject: 339.*.

‘U’ (*note str: 44c.) [PyObject *]

     Exige que o objeto python seja um objeto Unicode, sem tentar alguma
     conversão.  Levanta *note TypeError: 2c3. se o objeto não for um
     objeto Unicode.  A variável C deve ser declarada como *note
     PyObject: 339.*.

‘w*’ (*note objeto bytes ou similar: d4f. de leitura e escrita) [Py_buffer]

     Este formato aceita qualquer objeto que implemente a interface do
     buffer de leitura e escrita.  Ele preenche uma estrutura *note
     Py_buffer: 758. fornecida pelo chamador.  O buffer pode conter
     bytes nulos incorporados.  O chamador deve chamar *note
     PyBuffer_Release(): 39a. quando isso for feito com o buffer.

‘es’ (*note str: 44c.) [const char *encoding, char **buffer]

     Esta variante em ‘s’ é utilizada para codificação do Unicode em um
     buffer de caracteres.  Ele só funciona para dados codificados sem
     NUL bytes incorporados.

     Este formato exige dois argumentos.  O primeiro é usado apenas como
     entrada e deve ser a const char* que aponta para o nome de uma
     codificação como uma string terminada em NUL ou ‘NULL’, nesse caso
     a codificação ‘'utf-8'’ é usada.  Uma exceção é levantada se a
     codificação nomeada não for conhecida pelo Python.  O segundo
     argumento deve ser um char**; o valor do ponteiro a que ele faz
     referência será definido como um buffer com o conteúdo do texto do
     argumento.  O texto será codificado na codificação especificada
     pelo primeiro argumento.

     *note PyArg_ParseTuple(): 571. alocará um buffer do tamanho
     necessário, copiará os dados codificados nesse buffer e ajustará
     '*buffer' para referenciar o armazenamento recém-alocado.  O
     chamador é responsável por chamar *note PyMem_Free(): 148a. para
     liberar o buffer alocado após o uso.

‘et’ (*note str: 44c, *note bytes: 1c2. ou *note bytearray: 2ea.) [const char *encoding, char **buffer]

     O mesmo que ‘es’, exceto que os objetos strings de bytes são
     passados sem os recodificar.  Em vez disso, a implementação presume
     que o objeto string de bytes usa a codificação passada como
     parâmetro.

‘es#’ (*note str: 44c.) [const char *encoding, char **buffer, *note Py_ssize_t: a69. *buffer_length]

     Essa variante em ‘s#’ é usada para codificar Unicode em um buffer
     de caracteres.  Diferente do formato ‘es’, essa variante permite a
     entrada de dados que contêm caracteres NUL.

     Exige três argumentos.  O primeiro é usado apenas como entrada e
     deve ser a const char* que aponta para o nome de uma codificação
     como uma string terminada em NUL ou ‘NULL’, nesse caso a
     codificação ‘'utf-8'’ é usada.  Uma exceção será gerada se a
     codificação nomeada não for conhecida pelo Python.  O segundo
     argumento deve ser um char**; o valor do ponteiro a que ele faz
     referência será definido como um buffer com o conteúdo do texto do
     argumento.  O texto será codificado na codificação especificada
     pelo primeiro argumento.  O terceiro argumento deve ser um ponteiro
     para um número inteiro; o número inteiro referenciado será definido
     como o número de bytes no buffer de saída.

     Há dois modos de operação:

     Se '*buffer' apontar um ponteiro ‘NULL’, a função irá alocar um
     buffer do tamanho necessário, copiar os dados codificados para
     dentro desse buffer e configurar '*buffer' para referenciar o novo
     armazenamento alocado.  O chamador é responsável por chamar *note
     PyMem_Free(): 148a. para liberar o buffer alocado após o uso.

     Se '*buffer' apontar para um ponteiro que não seja ‘NULL’ (um
     buffer já alocado), *note PyArg_ParseTuple(): 571. irá usar essa
     localização como buffer e interpretar o valor inicial de
     '*buffer_length' como sendo o tamanho do buffer.  Depois ela vai
     copiar os dados codificados para dentro do buffer e terminá-lo com
     NUL. Se o buffer não for suficientemente grande, um *note
     ValueError: 202. será definido.

     Em ambos os casos, o '*buffer_length' é definido como o comprimento
     dos dados codificados sem o byte NUL à direita.

‘et#’ (*note str: 44c, *note bytes: 1c2. ou *note bytearray: 2ea.) [const char *encoding, char **buffer, *note Py_ssize_t: a69. *buffer_length]

     O mesmo que ‘es#’, exceto que os objetos strings de bytes são
     passados sem que sejam recodificados.  Em vez disso, a
     implementação presume que o objeto string de bytes usa a
     codificação passada como parâmetro.

Alterado na versão 3.12: ‘u’, ‘u#’, ‘Z’ e ‘Z#’ foram removidos porque
usavam uma representação herdada de ‘Py_UNICODE*’.


File: python.info,  Node: Números<2>,  Next: Outros objetos,  Prev: Strings e buffers,  Up: Análise de argumentos<2>

7.6.6.3 Números
...............

Esses formatos permitem representar números Python ou caracteres únicos
como números C. Formatos que exigem *note int: 257, *note float: 2f7. ou
*note complex: 2f8. também podem usar os métodos especiais
correspondentes *note __index__(): 71d, *note __float__(): 9d4. ou *note
__complex__(): 5e7. para converter o objeto Python para o tipo
necessário.

Para formatos inteiros com sinal, *note OverflowError: 885. é levantada
se o valor estiver fora do intervalo para o tipo C. Para formatos
inteiros não assinados, nenhuma verificação de intervalo é feita — os
bits mais significativos são silenciosamente truncados quando o campo de
recebimento é muito pequeno para receber o valor.

‘b’ (*note int: 257.) [unsigned char]

     Converte um inteiro Python não negativo em um inteiro pequeno sem
     sinal (unsigned tiny integer), armazenado em um unsigned char do C.

‘B’ (*note int: 257.) [unsigned char]

     Converte um inteiro Python para um inteiro pequeno (tiny integer)
     sem verificação de estouro, armazenado em um unsigned char do C.

‘h’ (*note int: 257.) [short int]

     Converte um inteiro Python para um short int do C.

‘H’ (*note int: 257.) [unsigned short int]

     Converte um inteiro Python para um unsigned short int do C, sem
     verificação de estouro.

‘i’ (*note int: 257.) [int]

     Converte um inteiro Python para um int simples do C.

‘I’ (*note int: 257.) [unsigned int]

     Converte um inteiro Python para um unsigned int do C, sem
     verificação de estouro.

‘l’ (*note int: 257.) [long int]

     Converte um inteiro Python para um long int do C.

‘k’ (*note int: 257.) [unsigned long]

     Converte um inteiro Python para um unsigned long do C sem
     verificação de estouro.

‘L’ (*note int: 257.) [longo longo]

     Converte um inteiro Python para um long long do C.

‘K’ (*note int: 257.) [unsigned long long]

     Converte um inteiro Python para um unsigned long long do C sem
     verificação de estouro.

‘n’ (*note int: 257.) [*note Py_ssize_t: a69.]

     Converte um inteiro Python para um *note Py_ssize_t: a69. do C.

‘c’ (*note bytes: 1c2. ou *note bytearray: 2ea. de comprimento 1) [char]

     Converte um byte Python, representado com um objeto ‘byte’ ou *note
     bytearray: 2ea. de comprimento 1, para um char do C.

     Alterado na versão 3.3: Permite objetos *note bytearray: 2ea.

‘C’ (*note str: 44c. de comprimento 1) [int]

     Converte um caractere Python, representado como uma *note str: 44c.
     objeto de comprimento 1, para um int do C

‘f`’ (*note float: 2f7.) [float]

     Converte um número de ponto flutuante Python para um float do C.

‘d’ (*note float: 2f7.) [double]

     Converte um número de ponto flutuante Python para um double do C.

‘D’ (*note complex: 2f8.) [Py_complex]

     Converte um número complexo Python para uma estrutura C *note
     Py_complex: 4ec5.


File: python.info,  Node: Outros objetos,  Next: Funções da API,  Prev: Números<2>,  Up: Análise de argumentos<2>

7.6.6.4 Outros objetos
......................

‘O’ (objeto) [PyObject*]

     Armazena um objeto Python (sem qualquer conversão) em um ponteiro
     de objeto C. O programa C então recebe o objeto real que foi
     passado.  Uma nova *note referência forte: 33d. ao objeto não é
     criado (isto é sua contagem de referências não é aumentada).  O
     ponteiro armazenado não é ‘NULL’.

‘O!’ (objeto) ['typeobject', PyObject *]

     Armazena um objeto Python em um ponteiro de objeto C. Isso é
     similar a ‘O’, mas usa dois argumentos C: o primeiro é o endereço
     de um objeto do tipo Python, o segundo é um endereço da variável C
     (de tipo *note PyObject: 339.*) no qual o ponteiro do objeto está
     armazenado.  Se o objeto Python não tiver o tipo necessário, *note
     TypeError: 2c3. é levantada.

‘O&’ (objeto) ['converter', 'address']

     Converte um objeto Python em uma variável C através de uma função
     'converter'.  Isso leva dois argumentos: o primeiro é a função, o
     segundo é o endereço da variável C (de tipo arbitrário),
     convertendo para void*.  A função 'converter' por sua vez, é
     chamada da seguinte maneira:

          status = converter(object, address);

     onde 'object' é o objeto Python a ser convertido e 'address' é o
     argumento void* que foi passado para a função ‘PyArg_Parse*’.  O
     'status' retornado deve ser ‘1’ para uma conversão bem-sucedida e
     ‘0’ se a conversão falhar.  Quando a conversão falha, a função
     'converter' deve levantar uma exceção e deixar o conteúdo de
     'address' inalterado.

     Se o 'converter' retornar ‘Py_CLEANUP_SUPPORTED’, ele poderá ser
     chamado uma segunda vez se a análise do argumento eventualmente
     falhar, dando ao conversor a chance de liberar qualquer memória que
     já havia alocado.  Nesta segunda chamada, o parâmetro 'object' será
     ‘NULL’; 'address' terá o mesmo valor que na chamada original.

     Exemplos de conversores: *note PyUnicode_FSConverter(): d3b. e
     *note PyUnicode_FSDecoder(): 577.

     Alterado na versão 3.1: ‘Py_CLEANUP_SUPPORTED’ foi adicionado.

‘p’ (*note bool: 468.) [int]

     Testa o valor transmitido para a verdade (um booleano 'p'redicado)
     e converte o resultado em seu valor inteiro C verdadeiro/falso
     equivalente.  Define o int como ‘1’ se a expressão for verdadeira e
     ‘0’ se for falsa.  Isso aceita qualquer valor válido do Python.
     Veja *note Teste do valor verdade: 162d. para obter mais
     informações sobre como o Python testa valores para a verdade.

     Adicionado na versão 3.3.

‘(items)’ (*note tuple: 370.) ['matching-items']

     O objeto deve ser uma sequência Python cujo comprimento seja o
     número de unidades de formato em 'items'.  Os argumentos C devem
     corresponder às unidades de formato individuais em 'items'.  As
     unidades de formato para sequências podem ser aninhadas.

Alguns outros caracteres possuem significados na string de formatação.
Isso pode não ocorrer dentro de parênteses aninhados.  Eles são:

‘|’

     Indica que os argumentos restantes na lista de argumentos do Python
     são opcionais.  As variáveis C correspondentes a argumentos
     opcionais devem ser inicializadas para seus valores padrão — quando
     um argumento opcional não é especificado, *note PyArg_ParseTuple():
     571. não toca no conteúdo da(s) variável(eis) C correspondente(s).

‘$’

     *note PyArg_ParseTupleAndKeywords(): 383. apenas: Indica que os
     argumentos restantes na lista de argumentos do Python são
     somente-nomeados.  Atualmente, todos os argumentos somente-nomeados
     devem ser também argumentos opcionais, então ‘|’ deve sempre ser
     especificado antes de ‘$’ na string de formatação.

     Adicionado na versão 3.3.

‘:’

     A lista de unidades de formatação acaba aqui; a string após os dois
     pontos é usada como o nome da função nas mensagens de erro (o
     “valor associado” da exceção que *note PyArg_ParseTuple(): 571.
     levanta).

‘;’

     A lista de unidades de formatação acaba aqui; a string após o ponto
     e vírgula é usada como a mensagem de erro 'ao invés' da mensagem de
     erro padrão.  ‘:’ e ‘;’ se excluem mutuamente.

Note que quaisquer referências a objeto Python que são fornecidas ao
chamador são referências 'emprestadas'; não libera-as (isto é, não
decremente a contagem de referências delas)!

Argumentos adicionais passados para essas funções devem ser endereços de
variáveis cujo tipo é determinado pela string de formatação; estes são
usados para armazenar valores vindos da tupla de entrada.  Existem
alguns casos, como descrito na lista de unidades de formatação acima,
onde esses parâmetros são usados como valores de entrada; eles devem
concordar com o que é especificado para a unidade de formatação
correspondente nesse caso.

Para a conversão funcionar, o objeto 'arg' deve corresponder ao formato
e o formato deve estar completo.  Em caso de sucesso, as funções
‘PyArg_Parse*’ retornam verdadeiro, caso contrário retornam falso e
levantam uma exceção apropriada.  Quando as funções ‘PyArg_Parse*’
falham devido a uma falha de conversão em uma das unidades de
formatação, as variáveis nos endereços correspondentes àquela unidade e
às unidades de formatação seguintes são deixadas intocadas.


File: python.info,  Node: Funções da API,  Prev: Outros objetos,  Up: Análise de argumentos<2>

7.6.6.5 Funções da API
......................

 -- C Função: int PyArg_ParseTuple (PyObject *args, const char *format,
          ...)
     ' Parte da *note ABI Estável: 553.'  Analisa os parâmetros de uma
     função que recebe apenas parâmetros posicionais em variáveis
     locais.  Retorna verdadeiro em caso de sucesso; em caso de falha,
     retorna falso e levanta a exceção apropriada.

 -- C Função: int PyArg_VaParse (PyObject *args, const char *format,
          va_list vargs)
     ' Parte da *note ABI Estável: 553.'  Idêntico a *note
     PyArg_ParseTuple(): 571, exceto que aceita uma va_list ao invés de
     um número variável de argumentos.

 -- C Função: int PyArg_ParseTupleAndKeywords (PyObject *args, PyObject
          *kw, const char *format, char *const *keywords, ...)
     ' Parte da *note ABI Estável: 553.'  Analisa os parâmetros de uma
     função que aceita tanto parâmetros posicionais quando parâmetros
     nomeados e os converte em variáveis locais.  O argumento 'keywords'
     é um array terminado em ‘NULL’ de nomes de parâmetros nomeados
     especificados como strings C codificadas em ASCII ou UTF-8 e
     terminadas com nulo.  Nomes vazios representam *note parâmetros
     somente-posicional: a8f.  Retorna verdadeiro em caso de sucesso; em
     caso de falha, retorna falso e levanta a exceção apropriada.

          Nota: A declaração do parâmetro 'keywords' é char *const* em C
          e const char *const* em C++.  Isso pode ser substituído com a
          macro *note PY_CXX_CONST: 385.

     Alterado na versão 3.6: Adicionado suporte para *note
     positional-only parameters: a8f.

     Alterado na versão 3.13: O parâmetro 'keywords' é agora do tipo
     char *const* em C e const char *const* em C++, no lugar de char**.
     Adicionado suporte para nomes de parâmetros nomeados não-ASCII.

 -- C Função: int PyArg_VaParseTupleAndKeywords (PyObject *args,
          PyObject *kw, const char *format, char *const *keywords,
          va_list vargs)
     ' Parte da *note ABI Estável: 553.'  Idêntico a *note
     PyArg_ParseTupleAndKeywords(): 383, exceto que aceita uma va_list
     ao invés de um número variável de argumentos.

 -- C Função: int PyArg_ValidateKeywordArguments (PyObject*)
     ' Parte da *note ABI Estável: 553.'  Garante que as chaves no
     dicionário de argumento de palavras reservadas são strings.  Isso
     só é necessário se *note PyArg_ParseTupleAndKeywords(): 383. não é
     usado, já que o último já faz essa checagem.

     Adicionado na versão 3.2.

 -- C Função: int PyArg_Parse (PyObject *args, const char *format, ...)
     ' Parte da *note ABI Estável: 553.'  Analisa o parâmetro de uma
     função que recebe um único parâmetro posicional e o converte em uma
     variável local.  Retorna verdadeiro em caso de sucesso; em caso de
     falha, retorna falso e levanta a exceção apropriada.

     Exemplo:

          // Função usando a convenção de chamada ao método METH_O
          static PyObject*
          my_function(PyObject *module, PyObject *arg)
          {
              int value;
              if (!PyArg_Parse(arg, "i:my_function", &value)) {
                  return NULL;
              }
              // ... usar valor ...
          }

 -- C Função: int PyArg_UnpackTuple (PyObject *args, const char *name,
          Py_ssize_t min, Py_ssize_t max, ...)
     ' Parte da *note ABI Estável: 553.'  Uma forma mais simples de
     recuperação de parâmetro que não usa uma string de formato para
     especificar os tipos de argumentos.  Funções que usam este método
     para recuperar seus parâmetros devem ser declaradas como *note
     METH_VARARGS: 1551. em tabelas de função ou método.  A tupla
     contendo os parâmetros reais deve ser passada como 'args'; deve
     realmente ser uma tupla.  O comprimento da tupla deve ser de pelo
     menos 'min' e não mais do que 'max'; 'min' e 'max' podem ser
     iguais.  Argumentos adicionais devem ser passados para a função,
     cada um dos quais deve ser um ponteiro para uma variável *note
     PyObject: 339.*; eles serão preenchidos com os valores de 'args';
     eles conterão *note referências emprestadas: 33e.  As variáveis que
     correspondem a parâmetros opcionais não fornecidos por 'args' não
     serão preenchidas; estes devem ser inicializados pelo chamador.
     Esta função retorna verdadeiro em caso de sucesso e falso se 'args'
     não for uma tupla ou contiver o número incorreto de elementos; uma
     exceção será definida se houver uma falha.

     Este é um exemplo do uso dessa função, tirado das fontes do módulo
     auxiliar para referências fracas ‘_weakref’:

          static PyObject *
          weakref_ref(PyObject *self, PyObject *args)
          {
              PyObject *object;
              PyObject *callback = NULL;
              PyObject *result = NULL;

              if (PyArg_UnpackTuple(args, "ref", 1, 2, &object, &callback)) {
                  result = PyWeakref_NewRef(object, callback);
              }
              return result;
          }

     A chamada à *note PyArg_UnpackTuple(): 154f. neste exemplo é
     inteiramente equivalente à chamada para *note PyArg_ParseTuple():
     571.:

          PyArg_ParseTuple(args, "O|O:ref", &object, &callback)

 -- C Macro: PY_CXX_CONST

     O valor para ser inserido, se houver, antes de char *const* na
     declaração do parâmetro 'keywords' das funções *note
     PyArg_ParseTupleAndKeywords(): 383. e *note
     PyArg_VaParseTupleAndKeywords(): 384.  Por padrão, é vazio para C e
     ‘const’ for C++ (const char *const*).  Para substituir, defina o
     valor desejado antes de incluir ‘Python.h’.

     Adicionado na versão 3.13.


File: python.info,  Node: Construindo valores,  Prev: Análise de argumentos<2>,  Up: Análise de argumentos e construção de valores

7.6.6.6 Construindo valores
...........................

 -- C Função: *note PyObject: 339. *Py_BuildValue (const char *format,
          ...)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Cria um novo valor baseado em uma string de formatação
     similar àquelas aceitas pela família de funções ‘PyArg_Parse*’ e
     uma sequência de valores.  Retorna o valor ou ‘NULL’ em caso de
     erro; uma exceção será levantada se ‘NULL’ for retornado.

     *note Py_BuildValue(): 8ac. não constrói sempre uma tupla.  Ela
     constrói uma tupla apenas se a sua string de formatação contém duas
     ou mais unidades de formatação.  Se a string de formatação estiver
     vazia, ela retorna ‘None’; se ela contém exatamente uma unidade de
     formatação, ela retorna qualquer que seja o objeto que for descrito
     pela unidade de formatação.  Para forçar ela a retornar uma tupla
     de tamanho 0 ou um, use parênteses na string de formatação.

     Quando buffers de memória são passados como parâmetros para
     fornecer dados para construir objetos, como nos formatos ‘s’ e
     ‘s#’, os dados necessários são copiados.  Buffers fornecidos pelo
     chamador nunca são referenciados pelos objetos criados por *note
     Py_BuildValue(): 8ac.  Em outras palavras, se o seu código invoca
     ‘malloc()’ e passa a memória alocada para *note Py_BuildValue():
     8ac, seu código é responsável por chamar ‘free()’ para aquela
     memória uma vez que *note Py_BuildValue(): 8ac. tiver retornado.

     Na descrição a seguir, a forma entre aspas é a unidade de
     formatação; a entrada em parênteses (arredondado) é o tipo do
     objeto Python que a unidade de formatação irá retornar; e a entrada
     em colchetes [quadrado] é o tipo do(s) valor(es) C a ser(em)
     passado(s).

     Os caracteres de espaço, tab, dois pontos e vírgula são ignorados
     em strings de formatação (mas não dentro de unidades de formatação
     como ‘s#’).  Isso pode ser usado para tornar strings de formatação
     longas um pouco mais legíveis.

     ‘s’ (*note str: 44c. ou ‘None’) [const char *]

          Converte uma string C terminada em NULL em um objeto Python
          *note str: 44c. usando codificação ‘'utf-8'’.  Se o ponteiro
          da string C é ‘NULL’, ‘None’ é usado.

     ‘s#’ (*note str: 44c. ou ‘None’) [const char *, *note Py_ssize_t: a69.]

          Converte uma string C e seu comprimento em um objeto Python
          *note str: 44c. usando a codificação ‘'utf-8'’.  Se o ponteiro
          da string C é ‘NULL’, o comprimento é ignorado e ‘None’ é
          retornado.

     ‘y’ (*note bytes: 1c2.) [const char *]

          Isso converte uma string C para um objeto Python *note bytes:
          1c2.  Se o ponteiro da string C é ‘NULL’, ‘None’ é retornado.

     ‘y#’ (*note bytes: 1c2.) [const char *, *note Py_ssize_t: a69.]

          Isso converte uma string C e seu comprimento para um objeto
          Python.  Se o ponteiro da string C é ‘NULL’, ‘None’ é
          retornado.

     ‘z’ (*note str: 44c. ou ‘None’) [const char *]

          O mesmo de ‘s’.

     ‘z#’ (*note str: 44c. ou ‘None’) [const char *, *note Py_ssize_t: a69.]

          O mesmo de ‘s#’.

     ‘u’ (*note str: 44c.) [const wchar_t *]

          Converte um buffer terminado por null ‘wchar_t’ de dados
          Unicode (UTF-16 ou UCS-4) para um objeto Python Unicode.  Se o
          ponteiro do buffer Unicode é ‘NULL’, ‘None’ é retornado.

     ‘u#’ (*note str: 44c.) [const wchar_t *, *note Py_ssize_t: a69.]

          Converte um buffer de dados Unicode (UTF-17 ou UCS-4) e seu
          comprimento em um objeto Python Unicode.  Se o ponteiro do
          buffer Unicode é ‘NULL’, o comprimento é ignorado e ‘None’ é
          retornado.

     ‘U’ (*note str: 44c. ou ‘None’) [const char *]

          O mesmo de ‘s’.

     ‘U#’ (*note str: 44c. ou ‘None’) [const char *, *note Py_ssize_t: a69.]

          O mesmo de ‘s#’.

     ‘i’ (*note int: 257.) [int]

          Converte um simples int do C em um objeto inteiro do Python.

     ‘b’ (*note int: 257.) [char]

          Converte um simples char do C em um objeto inteiro do Python.

     ‘h’ (*note int: 257.) [short int]

          Converte um simples short int do C em um objeto inteiro do
          Python.

     ‘l’ (*note int: 257.) [long int]

          Converte um long int do C em um objeto inteiro do Python.

     ‘B’ (*note int: 257.) [unsigned char]

          Converte um unsigned char do C em um objeto inteiro do Python.

     ‘H’ (*note int: 257.) [unsigned short int]

          Converte um unsigned short int do C em um objeto inteiro do
          Python.

     ‘I’ (*note int: 257.) [unsigned int]

          Converte um unsigned int do C em um objeto inteiro do Python.

     ‘k’ (*note int: 257.) [unsigned long]

          Converte um unsigned long do C em um objeto inteiro do Python.

     ‘L’ (*note int: 257.) [longo longo]

          Converte um long long do C em um objeto inteiro do Python.

     ‘K’ (*note int: 257.) [unsigned long long]

          Converte um unsigned long long do C em um objeto inteiro do
          Python.

     ‘n’ (*note int: 257.) [*note Py_ssize_t: a69.]

          Converte um *note Py_ssize_t: a69. do C em um objeto inteiro
          do Python.

     ‘c’ (*note bytes: 1c2. de comprimento 1) [char]

          Converte um int representando um byte do C em um objeto *note
          bytes: 1c2. de comprimento 1 do Python.

     ‘C’ (*note str: 44c. de comprimento 1) [int]

          Converte um int representando um caractere do C em um objeto
          *note str: 44c. de comprimento 1 do Python.

     ‘d’ (*note float: 2f7.) [double]

          Converte um double do C em um número ponto flutuante do
          Python.

     ‘f`’ (*note float: 2f7.) [float]

          Converte um float do C em um número ponto flutuante do Python.

     ‘D’ (*note complex: 2f8.) [Py_complex *]

          Converte uma estrutura *note Py_complex: 4ec5. do C em um
          número complexo do Python.

     ‘O’ (objeto) [PyObject*]

          Passa um objeto Python intocado, mas cria uma nova *note
          referência forte: 33d. a ele (isto é, sua contagem de
          referências é incrementada por um).  Se o objeto passado é um
          ponteiro ‘NULL’, presume-se que isso foi causado porque a
          chamada que produziu o argumento encontrou um erro e definiu
          uma exceção.  Portanto, *note Py_BuildValue(): 8ac. irá
          retornar ‘NULL’ mas não irá levantar uma exceção.  Se nenhuma
          exceção foi levantada ainda, *note SystemError: 575. é
          definida.

     ‘S’ (objeto) [PyObject *]

          O mesmo que ‘O’.

     ‘N’ (objeto) [PyObject *]

          O mesmo que ‘O’, exceto que não cria uma nova *note referência
          forte: 33d.  Útil quando o objeto é criado por uma chamada a
          um construtor de objeto na lista de argumento.

     ‘O&’ (objeto) ['converter', 'anything']

          Converte 'anything' para um objeto Python através de uma
          função 'converter'.  A função é chamada com 'anything' (que
          deve ser compatível com o void*) como argumento e deve
          retornar um “novo” objeto Python, ou ‘NULL’ se um erro
          ocorreu.

     ‘(items)’ (*note tuple: 370.) ['matching-items']

          Converte uma sequência de valores C para uma tupla Python com
          o mesmo número de itens.

     ‘[items]’ (*note list: 611.) ['matching-items']

          Converte uma sequência de valores C para uma lista Python com
          o mesmo número de itens.

     ‘{items}’ (*note dict: 256.) ['matching-items']

          Converte uma sequência de valores C para um dicionário Python.
          Cada par de valores consecutivos do C adiciona um item ao
          dicionário, servindo como chave e valor, respectivamente.

     Se existir um erro na string de formatação, a exceção *note
     SystemError: 575. é definida e ‘NULL’ é retornado.

 -- C Função: *note PyObject: 339. *Py_VaBuildValue (const char *format,
          va_list vargs)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Idêntico a *note Py_BuildValue(): 8ac, exceto que aceita uma
     va_list ao invés de um número variável de argumentos.


File: python.info,  Node: Conversão e formação de strings,  Next: Classificação e conversão de caracteres,  Prev: Análise de argumentos e construção de valores,  Up: Utilitários<2>

7.6.7 Conversão e formação de strings
-------------------------------------

Funções para conversão de números e saída formatada de strings.

 -- C Função: int PyOS_snprintf (char *str, size_t size, const char
          *format, ...)
     ' Parte da *note ABI Estável: 553.'  Saída não superior a 'size'
     bytes para 'str' de acordo com a string de formato 'format' e os
     argumentos extras.  Veja a página man do Unix ‘snprintf(3)(1)’.

 -- C Função: int PyOS_vsnprintf (char *str, size_t size, const char
          *format, va_list va)
     ' Parte da *note ABI Estável: 553.'  Saída não superior a 'size'
     bytes para 'str' de acordo com o string de formato 'format' e a
     variável argumento de lista 'va'.  Página man do Unix
     ‘vsnprintf(3)(2)’.

*note PyOS_snprintf(): 1552. e *note PyOS_vsnprintf(): 1553. envolvem as
funções ‘snprintf()’ e ‘vsnprintf()’ da biblioteca Standard C. Seu
objetivo é garantir um comportamento consistente em casos extremos, o
que as funções do Standard C não garantem.

Os invólucros garantem que ‘str[size-1]’ seja sempre ‘'\0'’ no retorno.
Eles nunca escrevem mais do que 'size' bytes (incluindo o ‘'\0'’ ao
final) em str.  Ambas as funções exigem que ‘str != NULL’, ‘size > 0’,
‘format != NULL’ e ‘size < INT_MAX’.  Note que isso significa que não há
equivalente ao ‘n = snprintf(NULL, 0, ...)’ do C99 que determinaria o
tamanho de buffer necessário.

O valor de retorno ('rv') para essas funções deve ser interpretado da
seguinte forma:

   * Quando ‘0 <= rv < size’, a conversão de saída foi bem-sucedida e os
     caracteres de 'rv' foram escritos em 'str' (excluindo o ‘'\0'’ byte
     em ‘str[rv]’).

   * Quando ‘rv >= size’, a conversão de saída foi truncada e um buffer
     com ‘rv + 1’ bytes teria sido necessário para ter sucesso.
     ‘str[size-1]’ é ‘'\0'’ neste caso.

   * Quando ‘rv < 0’, a conversão da saída falhou e ‘str[size-1]’ é
     ‘'\0'’ neste caso também, mas o resto de 'str' é indefinido.  A
     causa exata do erro depende da plataforma subjacente.

As funções a seguir fornecem strings independentes de localidade para
conversões de números.

 -- C Função: unsigned long PyOS_strtoul (const char *str, char **ptr,
          int base)
     ' Parte da *note ABI Estável: 553.'  Converte a parte inicial da
     string em ‘str’ para um valor unsigned long de acordo com a ‘base’
     fornecida, que deve estar entre ‘2’ e ‘36’ inclusive, ou ser o
     valor especial ‘0’.

     Espaços em branco iniciais e diferenciação entre caracteres
     maiúsculos e minúsculos são ignorados.  Se ‘base’ for zero, procura
     um ‘0b’, ‘0o’ ou ‘0x’ inicial para informar qual base.  Se estes
     estiverem ausentes, o padrão é ‘10’.  Base deve ser 0 ou entre 2 e
     36 (inclusive).  Se ‘ptr’ não for ‘NULL’, conterá um ponteiro para
     o fim da varredura.

     Se o valor convertido ficar fora do intervalo do tipo de retorno
     correspondente, ocorrerá um erro de intervalo (‘errno’ é definido
     como ‘ERANGE’) e ‘ULONG_MAX’ será retornado.  Se nenhuma conversão
     puder ser realizada, ‘0’ será retornado.

     Veja também a página man do Unix ‘strtoul(3)(3)’.

     Adicionado na versão 3.2.

 -- C Função: long PyOS_strtol (const char *str, char **ptr, int base)
     ' Parte da *note ABI Estável: 553.'  Converte a parte inicial da
     string em ‘str’ para um valor long de acordo com a ‘base’
     fornecida, que deve estar entre ‘2’ e ‘36’ inclusive, ou ser o
     valor especial ‘0’.

     O mesmo que *note PyOS_strtoul(): 4d22, mas retorna um valor long e
     ‘LONG_MAX’ em caso de estouro.

     Veja também a página man do Unix ‘strtol(3)(4)’.

     Adicionado na versão 3.2.

 -- C Função: double PyOS_string_to_double (const char *s, char
          **endptr, PyObject *overflow_exception)
     ' Parte da *note ABI Estável: 553.'  Converte uma string ‘s’ em
     double, levantando uma exceção Python em caso de falha.  O conjunto
     de strings aceitas corresponde ao conjunto de strings aceito pelo
     construtor *note float(): 2f7. do Python, exceto que ‘s’ não deve
     ter espaços em branco à esquerda ou à direita.  A conversão é
     independente da localidade atual.

     Se ‘endptr’ for ‘NULL’, converte a string inteira.  Levanta *note
     ValueError: 202. e retorna ‘-1.0’ se a string não for uma
     representação válida de um número de ponto flutuante.

     Se endptr não for ‘NULL’, converte o máximo possível da string e
     define ‘*endptr’ para apontar para o primeiro caractere não
     convertido.  Se nenhum segmento inicial da string for a
     representação válida de um número de ponto flutuante, define
     ‘*endptr’ para apontar para o início da string, levanta ValueError
     e retorna ‘-1.0’.

     Se ‘s’ representa um valor que é muito grande para armazenar em um
     ponto flutuante (por exemplo, ‘"1e500"’ é uma string assim em
     muitas plataformas), então se ‘overflow_exception’ for ‘NULL’
     retorna ‘Py_HUGE_VAL’ (com um sinal apropriado) e não define
     nenhuma exceção.  Caso contrário, ‘overflow_exception’ deve apontar
     para um objeto de exceção Python; levanta essa exceção e retorna
     ‘-1.0’.  Em ambos os casos, define ‘*endptr’ para apontar para o
     primeiro caractere após o valor convertido.

     Se qualquer outro erro ocorrer durante a conversão (por exemplo, um
     erro de falta de memória), define a exceção Python apropriada e
     retorna ‘-1.0’.

     Adicionado na versão 3.1.

 -- C Função: char *PyOS_double_to_string (double val, char format_code,
          int precision, int flags, int *ptype)
     ' Parte da *note ABI Estável: 553.'  Converte um 'val' double para
     uma string usando 'format_code', 'precision' e 'flags' fornecidos.

     'format_code' deve ser um entre ‘'e'’, ‘'E'’, ‘'f'’, ‘'F'’, ‘'g'’,
     ‘'G'’ ou ‘'r'’.  Para ‘'r'’, a precisão 'precision' fornecida deve
     ser 0 e é ignorada.  O código de formato ‘'r'’ especifica o formato
     padrão de *note repr(): 800.

     'flags' podem ser zero ou mais dos seguintes valores combinados por
     meio do operador OR:

      -- C Macro: Py_DTSF_SIGN

          Sempre preceda a string retornada com um caractere de sinal,
          mesmo que 'val' não seja negativo.

      -- C Macro: Py_DTSF_ADD_DOT_0

          Garante que a string retornada não se pareça com um número
          inteiro.

      -- C Macro: Py_DTSF_ALT

          Aplica as regras de formatação “alternativas”.  Veja a
          documentação para o especificador ‘'#'’ de *note
          PyOS_snprintf(): 1552. para detalhes.

      -- C Macro: Py_DTSF_NO_NEG_0

          Zero negativo é convertido para zerp positivo.

          Adicionado na versão 3.11.

     If 'ptype' is non-‘NULL’, then the value it points to will be set
     to one of the following constants depending on the type of 'val':

     '*ptype'                                               type of 'val'
                                                            
     --------------------------------------------------------------------------------------------------------------
                                                            
      -- C Macro: Py_DTST_FINITE                            finite number
                                                            
                                                            
      -- C Macro: Py_DTST_INFINITE                          infinite number
                                                            
                                                            
      -- C Macro: Py_DTST_NAN                               not a number
                                                            

     O valor de retorno é um ponteiro para 'buffer' com a string
     convertida ou ‘NULL’ se a conversão falhou.  O chamador é
     responsável por liberar a string retornada chamando *note
     PyMem_Free(): 148a.

     Adicionado na versão 3.1.

 -- C Função: int PyOS_mystricmp (const char *str1, const char *str2)
 -- C Função: int PyOS_mystrnicmp (const char *str1, const char *str2,
          Py_ssize_t size)
     ' Parte da *note ABI Estável: 553.'  Comparação de strings sem
     distinção entre maiúsculas e minúsculas.  Essas funções funcionam
     de maneira quase idêntica a ‘strcmp()’ e ‘strncmp()’
     (respectivamente), exceto pelo fato de ignorarem maiúsculas e
     minúsculas em caracteres ASCII.

     Retorna ‘0’ se as strings forem iguais, um valor negativo se 'str1'
     for ordenada lexicograficamente antes de 'str2', ou um valor
     positivo se for ordenada depois.

     Nos argumentos 'str1' ou 'str2', um byte NUL marca o fim da string.
     Para ‘PyOS_mystrnicmp()’, o argumento 'size' fornece o tamanho
     máximo da string, como se NUL estivesse presente no índice
     fornecido por 'size'.

     Estas funções não usam a localidade.

 -- C Função: int PyOS_stricmp (const char *str1, const char *str2)
 -- C Função: int PyOS_strnicmp (const char *str1, const char *str2,
          Py_ssize_t size)

     Comparação de strings sem distinção entre maiúsculas e minúsculas.

     No Windows, estes são apelidos de ‘stricmp()’ e ‘strnicmp()’,
     respectivamente.

     Em outras plataformas, são apelidos de *note PyOS_mystricmp():
     1ac8. e *note PyOS_mystrnicmp(): 1ac7, respectivamente.

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/snprintf(3)

   (2) https://manpages.debian.org/vsnprintf(3)

   (3) https://manpages.debian.org/strtoul(3)

   (4) https://manpages.debian.org/strtol(3)


File: python.info,  Node: Classificação e conversão de caracteres,  Next: API do PyHash,  Prev: Conversão e formação de strings,  Up: Utilitários<2>

7.6.8 Classificação e conversão de caracteres
---------------------------------------------

As macros a seguir fornecem classificação e conversão de caracteres
independentes de localidade (ao contrário da biblioteca padrão C
‘ctype.h’).  O argumento deve ser um char com ou sem sinal.

 -- C Macro: Py_ISALNUM (c)

     Retorna verdadeiro se o caractere 'c' for um caractere
     alfanumérico.

 -- C Macro: Py_ISALPHA (c)

     Retorna verdadeiro se o caractere 'c' for um caractere alfabético
     (‘a-z’ e ‘A-Z’).

 -- C Macro: Py_ISDIGIT (c)

     Retorna verdadeiro se o caractere 'c' for um dígito decimal
     (‘0-9’).

 -- C Macro: Py_ISLOWER (c)

     Retorna verdadeiro se o caractere 'c' for uma letra minúscula do
     ASCII (‘a-z’).

 -- C Macro: Py_ISUPPER (c)

     Retorna verdadeiro se o caractere 'c' for uma letra maiúscula do
     ASCII (‘A-Z’).

 -- C Macro: Py_ISSPACE (c)

     Retorna verdadeiro se o caractere 'c' for um caractere de espaço em
     branco (espaço, tabulação, retorno de carro, nova linha, tabulação
     vertical ou alimentação de formulário).

 -- C Macro: Py_ISXDIGIT (c)

     Retorna verdadeiro se o caractere 'c' for um dígito hexadecimal
     (‘0-9’, ‘a-f’ e ‘A-F’).

 -- C Macro: Py_TOLOWER (c)

     Retorna o equivalente em minúsculas do caractere 'c'.

 -- C Macro: Py_TOUPPER (c)

     Retorna o equivalente em maiúsculas do caractere 'c'.


File: python.info,  Node: API do PyHash,  Next: Reflexão,  Prev: Classificação e conversão de caracteres,  Up: Utilitários<2>

7.6.9 API do PyHash
-------------------

Veja também o membro *note PyTypeObject.tp_hash: 4b9f. e *note Hashing
de tipos numéricos: 2335.

 -- C Tipo: type Py_hash_t

     Tipo de valor do hash: inteiro com sinal.

     Adicionado na versão 3.2.

 -- C Tipo: type Py_uhash_t

     Tipo de valor do hash: inteiro sem sinal.

     Adicionado na versão 3.2.

 -- C Macro: Py_HASH_ALGORITHM

     Um valor numérico que indica o algoritmo de hash para *note str:
     44c, *note bytes: 1c2. e *note memoryview: 2eb.

     O nome do algoritmo é exposto por *note sys.hash_info.algorithm:
     45c2.

     Adicionado na versão 3.4.

 -- C Macro: Py_HASH_FNV
 -- C Macro: Py_HASH_SIPHASH24
 -- C Macro: Py_HASH_SIPHASH13

     Valores numéricos a serem comparados com *note Py_HASH_ALGORITHM:
     4edd. para determinar qual algoritmo é usado para o hashing.  O
     algoritmo de hash pode ser configurado através da opção *note
     -with-hash-algorithm: 1f4b. do comando configure.

     Adicionado na versão 3.4: Adiciona ‘Py_HASH_FNV’ e
     ‘Py_HASH_SIPHASH24’.

     Adicionado na versão 3.11: Adiciona ‘Py_HASH_SIPHASH13’.

 -- C Macro: Py_HASH_CUTOFF

     Buffers de comprimento no intervalo ‘[1, Py_HASH_CUTOFF)’ são
     hasheados usando DJBX33A em vez do algoritmo descrito por *note
     Py_HASH_ALGORITHM: 4edd.

        - Uma ‘Py_HASH_CUTOFF’ de 0 desabilita a otimização.

        - ‘Py_HASH_CUTOFF’ deve ser não-negativo ou menor ou igual a 7.

     Plataformas de 32 bits devem usar um limite de corte menor do que
     plataformas de 64 bits, pois é mais fácil criar strings que
     colidam.  Um limite de corte de 7 em plataformas de 64 bits e 5 em
     plataformas de 32 bits deve fornecer uma margem de segurança
     adequada.

     Isso corresponde à constante *note sys.hash_info.cutoff: 45c5.

     Adicionado na versão 3.4.

 -- C Macro: PyHASH_MODULUS

     O primo de Mersenne(1) ‘P = 2**n -1’, usado para esquema de hash
     numérico.

     Isso corresponde à constante *note sys.hash_info.modulus: 2336.

     Adicionado na versão 3.13.

 -- C Macro: PyHASH_BITS

     O expoente ‘n’ de ‘P’ em *note PyHASH_MODULUS: 175f.

     Adicionado na versão 3.13.

 -- C Macro: PyHASH_MULTIPLIER

     Multiplicador de primo usado em strings e vários outros hashes.

     Adicionado na versão 3.13.

 -- C Macro: PyHASH_INF

     O valor de hash retornado para um infinito positivo.

     Isso corresponde à constante *note sys.hash_info.inf: 45bf.

     Adicionado na versão 3.13.

 -- C Macro: PyHASH_IMAG

     O multiplicador usado para a parte imaginária de um número
     complexo.

     Isso corresponde à constante *note sys.hash_info.imag: 45c1.

     Adicionado na versão 3.13.

 -- C Tipo: type PyHash_FuncDef

     Definição de função de hash usada por *note PyHash_GetFuncDef():
     4ee3.

      -- C Membro: *note Py_hash_t: 12a5. (*const hash)(const void*,
               *note Py_ssize_t: a69.)

          Função de hash.

      -- C Membro: const char *name

          Nome de função hash (string codificada em UTF-8).

          Isso corresponde à constante *note sys.hash_info.algorithm:
          45c2.

      -- C Membro: const int hash_bits

          Tamanho interno do valor do hash em bits.

          Isso corresponde à constante *note sys.hash_info.hash_bits:
          45c3.

      -- C Membro: const int seed_bits

          Tamanho da entrada de seed em bits.

          Isso corresponde à constante *note sys.hash_info.seed_bits:
          45c4.

     Adicionado na versão 3.4.

 -- C Função: *note PyHash_FuncDef: 4ee2. *PyHash_GetFuncDef (void)

     Obtém a definição de função de hash.

     Ver também
     ..........

     PEP 456(2) “Algoritmo de hash seguro e intercambiável”.

     Adicionado na versão 3.4.

 -- C Função: *note Py_hash_t: 12a5. Py_HashPointer (const void *ptr)

     Hash de um valor de ponteiro: processa o valor do ponteiro como um
     inteiro (converte-o para ‘uintptr_t’ internamente).  O ponteiro não
     é desreferenciado.

     A função não pode falhar: ela não pode retornar ‘-1’.

     Adicionado na versão 3.13.

 -- C Função: *note Py_hash_t: 12a5. PyObject_GenericHash (PyObject
          *obj)

     Função de hash genérica que deve ser colocada no slot ‘tp_hash’ de
     um objeto de tipo.  Seu resultado depende apenas da identidade do
     objeto.

     No CPython, é equivalente a *note Py_HashPointer(): 368.

     Adicionado na versão 3.13.

   ---------- Footnotes ----------

   (1) https://pt.wikipedia.org/wiki/Primo_de_Mersenne

   (2) https://peps.python.org/pep-0456/


File: python.info,  Node: Reflexão,  Next: Registro de codec e funções de suporte,  Prev: API do PyHash,  Up: Utilitários<2>

7.6.10 Reflexão
---------------

 -- C Função: *note PyObject: 339. *PyEval_GetBuiltins (void)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'

     Descontinuado desde a versão 3.13: Use *note
     PyEval_GetFrameBuiltins(): 34e.

     Retorna um dicionário dos componentes embutidos no quadro de
     execução atual ou o interpretador do estado da thread, se nenhum
     quadro estiver em execução no momento.

 -- C Função: *note PyObject: 339. *PyEval_GetLocals (void)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'

     Descontinuado desde a versão 3.13: Use *note
     PyEval_GetFrameLocals(): 352. para obter o mesmo comportamento que
     chamar *note locals(): 141. no código Python, ou então chame *note
     PyFrame_GetLocals(): 41f. no resultado de *note PyEval_GetFrame():
     18c1. para acessar o atributo *note f_locals: 182. do quadro
     atualmente em execução.

     Retorna um mapeamento fornecendo acesso às variáveis locais no
     quadro de execução atual ou ‘NULL’ se nenhum quadro estiver sendo
     executado no momento.

     Consulte *note locals(): 141. para detalhes do mapeamento retornado
     em diferentes escopos.

     Como esta função retorna uma *note referência emprestada: 33e, o
     dicionário retornado para *note escopos otimizados: 17e. é
     armazenado em cache no objeto frame e permanecerá ativo enquanto o
     objeto frame o fizer.  Ao contrário de *note
     PyEval_GetFrameLocals(): 352. e *note locals(): 141, chamadas
     subsequentes para esta função no mesmo quadro atualizarão o
     conteúdo do dicionário em cache para refletir as mudanças no estado
     das variáveis locais em vez de retornar um novo snapshot.

     Alterado na versão 3.13: Como parte da PEP 667(1), *note
     PyFrame_GetLocals(): 41f, *note locals(): 141. e *note
     FrameType.f_locals: 182. não fazem mais uso do dicionário de cache
     compartilhado.  Consulte a *note entrada de O Que Há de Novo: 142.
     para detalhes adicionais.

 -- C Função: *note PyObject: 339. *PyEval_GetGlobals (void)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'

     Descontinuado desde a versão 3.13: Use *note
     PyEval_GetFrameGlobals(): 350.

     Retorna um dicionário das variáveis globais no quadro de execução
     atual ou ‘NULL’ se nenhum quadro estiver sendo executado no
     momento.

 -- C Função: *note PyFrameObject: 789. *PyEval_GetFrame (void)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'  Retorna o quadro do estado atual da thread, que é
     ‘NULL’ se nenhum quadro estiver em execução no momento.

     Veja também *note PyThreadState_GetFrame(): 78e.

 -- C Função: *note PyObject: 339. *PyEval_GetFrameBuiltins (void)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.13.'  Retorna um dicionário dos componentes
     embutidos no quadro de execução atual ou o interpretador do estado
     da thread, se nenhum quadro estiver em execução no momento.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 339. *PyEval_GetFrameLocals (void)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.13.'  Retorna um dicionário das variáveis
     locais no quadro de execução atual ou ‘NULL’ se nenhum quadro
     estiver sendo executado no momento.  Equivalente a chamar *note
     locals(): 141. em código Python.

     Para acessar *note f_locals: 182. no quadro atual sem fazer um
     snapshot independente em *note escopos otimizados: 17e, chame *note
     PyFrame_GetLocals(): 41f. no resultado de *note PyEval_GetFrame():
     18c1.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 339. *PyEval_GetFrameGlobals (void)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.13.'  Retorna um dicionário das variáveis
     globais no quadro de execução atual ou ‘NULL’ se nenhum quadro
     estiver sendo executado no momento.  Equivalente a chamar *note
     globals(): 1993. em código Python.

     Adicionado na versão 3.13.

 -- C Função: const char *PyEval_GetFuncName (PyObject *func)
     ' Parte da *note ABI Estável: 553.'  Retorna o nome de 'func' se
     for uma função, classe ou objeto de instância, senão o nome do tipo
     da 'func'.

 -- C Função: const char *PyEval_GetFuncDesc (PyObject *func)
     ' Parte da *note ABI Estável: 553.'  Retorna uma sequência de
     caracteres de descrição, dependendo do tipo de 'func'.  Os valores
     de retorno incluem “()” para funções e métodos, “ constructor”, “
     instance” e “ object”..  Concatenado com o resultado de *note
     PyEval_GetFuncName(): 4c76, o resultado será uma descrição de
     'func'.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0667/


File: python.info,  Node: Registro de codec e funções de suporte,  Next: API C PyTime,  Prev: Reflexão,  Up: Utilitários<2>

7.6.11 Registro de codec e funções de suporte
---------------------------------------------

 -- C Função: int PyCodec_Register (PyObject *search_function)
     ' Parte da *note ABI Estável: 553.'  Registra uma nova função de
     busca de codec.

     Como efeito colateral, tenta carregar o pacote ‘encodings’, se isso
     ainda não tiver sido feito, com o propósito de garantir que ele
     sempre seja o primeiro na lista de funções de busca.

 -- C Função: int PyCodec_Unregister (PyObject *search_function)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Cancela o
     registro de uma função de busca de codec e limpa o cache de
     registro.  Se a função de busca não está registrada, não faz nada.
     Retorna 0 no sucesso.  Levanta uma exceção e retorna -1 em caso de
     erro.

     Adicionado na versão 3.10.

 -- C Função: int PyCodec_KnownEncoding (const char *encoding)
     ' Parte da *note ABI Estável: 553.'  Retorna ‘1’ ou ‘0’ dependendo
     se há um codec registrado para a dada codificação 'encoding'.  Essa
     função sempre é bem-sucedida.

 -- C Função: *note PyObject: 339. *PyCodec_Encode (PyObject *object,
          const char *encoding, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  API de codificação baseada em codec genérico.

     'object' é passado através da função de codificação encontrada para
     a codificação fornecida por meio de 'encoding', usando o método de
     tratamento de erros definido por 'errors'.  'errors' pode ser
     ‘NULL’ para usar o método padrão definido para o codec.  Levanta um
     *note LookupError: 2367. se nenhum codificador puder ser
     encontrado.

 -- C Função: *note PyObject: 339. *PyCodec_Decode (PyObject *object,
          const char *encoding, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  API de decodificação baseada em decodificador genérico.

     'object' é passado através da função de decodificação encontrada
     para a codificação fornecida por meio de 'encoding', usando o
     método de tratamento de erros definido por 'errors'.  'errors' pode
     ser ‘NULL’ para usar o método padrão definido para o codec.
     Levanta um *note LookupError: 2367. se nenhum decodificador puder
     ser encontrado.

* Menu:

* API de pesquisa de codec::
* API de registro de tratamentos de erros de decodificação Unicode::
* Variáveis utilitárias de codec::


File: python.info,  Node: API de pesquisa de codec,  Next: API de registro de tratamentos de erros de decodificação Unicode,  Up: Registro de codec e funções de suporte

7.6.11.1 API de pesquisa de codec
.................................

Nas funções a seguir, a string 'encoding' é pesquisada com todos os
caracteres sendo convertidos para minúsculo, o que faz com que as
codificações pesquisadas por esse mecanismo não façam distinção entre
maiúsculas e minúsculas.  Se nenhum codec for encontrado, um *note
KeyError: 344. é definido e ‘NULL’ é retornado.

 -- C Função: *note PyObject: 339. *PyCodec_Encoder (const char
          *encoding)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Obtém uma função de codificação para o 'encoding' dado.

 -- C Função: *note PyObject: 339. *PyCodec_Decoder (const char
          *encoding)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Obtém uma função de decodificação para o 'encoding' dado.

 -- C Função: *note PyObject: 339. *PyCodec_IncrementalEncoder (const
          char *encoding, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Obtém um objeto *note IncrementalEncoder: 2563. para o
     'encoding' dado.

 -- C Função: *note PyObject: 339. *PyCodec_IncrementalDecoder (const
          char *encoding, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Obtém um objeto *note IncrementalDecoder: 2564. para o
     'encoding' dado.

 -- C Função: *note PyObject: 339. *PyCodec_StreamReader (const char
          *encoding, PyObject *stream, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Obtém uma função de fábrica *note StreamReader: 2568. para o
     'encoding' dado.

 -- C Função: *note PyObject: 339. *PyCodec_StreamWriter (const char
          *encoding, PyObject *stream, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Obtém uma função de fábrica *note StreamWriter: 2567. para o
     'encoding' dado.


File: python.info,  Node: API de registro de tratamentos de erros de decodificação Unicode,  Next: Variáveis utilitárias de codec,  Prev: API de pesquisa de codec,  Up: Registro de codec e funções de suporte

7.6.11.2 API de registro de tratamentos de erros de decodificação Unicode
.........................................................................

 -- C Função: int PyCodec_RegisterError (const char *name, PyObject
          *error)
     ' Parte da *note ABI Estável: 553.'  Registra a função de retorno
     de chamada de tratamento de 'erro' para o 'nome' fornecido.  Esta
     chamada de função é invocada por um codificador quando encontra
     caracteres/bytes indecodificáveis e 'nome' é especificado como o
     parâmetro de erro na chamada da função de
     codificação/decodificação.

     O retorno de chamada obtém um único argumento, uma instância de
     *note UnicodeEncodeError: 677, *note UnicodeDecodeError: a1d. ou
     *note UnicodeTranslateError: 2434. que contém informações sobre a
     sequencia problemática de caracteres ou bytes e seu deslocamento na
     string original (consulte *note Objetos de exceção Unicode: 4e94.
     para funções que extraem essa informação).  A função de retorno de
     chamada deve levantar a exceção dada, ou retornar uma tupla de dois
     itens contendo a substituição para a sequência problemática, e um
     inteiro fornecendo o deslocamento na string original na qual a
     codificação/decodificação deve ser retomada.

     Retorna ‘0’ em caso de sucesso, ‘-1’ em caso de erro.

 -- C Função: *note PyObject: 339. *PyCodec_LookupError (const char
          *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Pesquisa a função de retorno de chamada de tratamento de
     erros registrada em 'name'.  Como um caso especial, ‘NULL’ pode ser
     passado; nesse caso, o erro no tratamento de retorno de chamada
     para “strict” será retornado.

 -- C Função: *note PyObject: 339. *PyCodec_StrictErrors (PyObject *exc)
     'Retorna valor: Sempre NULL.'' Parte da *note ABI Estável: 553.'
     Levanta 'exc' como uma exceção.

 -- C Função: *note PyObject: 339. *PyCodec_IgnoreErrors (PyObject *exc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Ignora o erro de unicode, ignorando a entrada que causou o
     erro.

 -- C Função: *note PyObject: 339. *PyCodec_ReplaceErrors (PyObject
          *exc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Substitui o erro de unicode por ‘?’ ou ‘U+FFFD’.

 -- C Função: *note PyObject: 339. *PyCodec_XMLCharRefReplaceErrors
          (PyObject *exc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Substitui o erro de unicode por caracteres da referência
     XML.

 -- C Função: *note PyObject: 339. *PyCodec_BackslashReplaceErrors
          (PyObject *exc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Substitui o erro de unicode com escapes de barra invertida
     (‘\x’, ‘\u’ e ‘\U’).

 -- C Função: *note PyObject: 339. *PyCodec_NameReplaceErrors (PyObject
          *exc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.7.'  Substitui os erros de codificação
     unicode com escapes ‘\N{...}’.

     Adicionado na versão 3.5.


File: python.info,  Node: Variáveis utilitárias de codec,  Prev: API de registro de tratamentos de erros de decodificação Unicode,  Up: Registro de codec e funções de suporte

7.6.11.3 Variáveis utilitárias de codec
.......................................

 -- C Variável: const char *Py_hexdigits

     Uma constante string contendo os dígitos hexadecimais minúsculos:
     ‘"0123456789abcdef"’.

     Adicionado na versão 3.3.


File: python.info,  Node: API C PyTime,  Next: Suporte a Mapas do Perf,  Prev: Registro de codec e funções de suporte,  Up: Utilitários<2>

7.6.12 API C PyTime
-------------------

Adicionado na versão 3.13.

A API C de relógios provê acesso a relógios do sistema.  Ela é similar
ao módulo Python *note time: ee.

Para uma API C relacionada ao módulo *note datetime: 30, veja *note
Objetos DateTime: 4ef6.

* Menu:

* Tipos: Tipos<2>.
* Funções de relógio::
* Funções de relógio brutas::
* Funções de conversão::


File: python.info,  Node: Tipos<2>,  Next: Funções de relógio,  Up: API C PyTime

7.6.12.1 Tipos
..............

 -- C Tipo: type PyTime_t

     Um registro de data e hora ou uma duração em nanossegundos,
     representados como um inteiro de 64 bits com sinal.

     O ponto de referência para registros de data e hora depende do
     relógio usado.  Por exemplo, *note PyTime_Time(): 335. retorna
     registros relativos à época UNIX.

     É suportada uma amplitude em torno de [-292.3 anos; +292.3 anos].
     Usando o início da época UNIX (1º de Janeiro de 1970) como
     referência, a gama de datas suportadas é em torno de [1677-09-21;
     2262-04-11].  Os limites exatos são expostos como constantes:

 -- C Variável: *note PyTime_t: 32d. PyTime_MIN

     Valor mínimo de *note PyTime_t: 32d.

 -- C Variável: *note PyTime_t: 32d. PyTime_MAX

     Valor máximo de *note PyTime_t: 32d.


File: python.info,  Node: Funções de relógio,  Next: Funções de relógio brutas,  Prev: Tipos<2>,  Up: API C PyTime

7.6.12.2 Funções de relógio
...........................

As funções a seguir aceitam um ponteiro para *note PyTime_t: 32d. ao
qual elas atribuem o valor de um determinado relógio.  Detalhes de cada
relógio estão disponíveis nas documentações das funções Python
correspondentes.

As funções retornam ‘0’ em caso de sucesso, ou ‘-1’ (com uma exceção
definida) em caso de falha.

Em caso de estouro de inteiros, elas definem a exceção *note
PyExc_OverflowError: 4c9f. e definem ‘*result’ como o valor limitado ao
intervalo ‘[PyTime_MIN; PyTime_MAX]’.  (Em sistemas atuais, estouros de
inteiros são provavelmente causados por uma má configuração do tempo do
sistema).

Como qualquer outra API C (se não especificado o contrário), as funções
devem ser chamadas sob posse da *note GIL: 159.

 -- C Função: int PyTime_Monotonic (PyTime_t *result)

     Lê o relógio monótono.  Veja *note time.monotonic(): 253. para
     detalhes importantes sobre este relógio.

 -- C Função: int PyTime_PerfCounter (PyTime_t *result)

     Lê o contador de desempenho.  Veja *note time.perf_counter(): a92.
     para detalhes importantes sobre este relógio.

 -- C Função: int PyTime_Time (PyTime_t *result)

     Lê o “relógio de parede”.  Veja *note time.time(): 254. para
     detalhes importantes sobre este relógio.


File: python.info,  Node: Funções de relógio brutas,  Next: Funções de conversão,  Prev: Funções de relógio,  Up: API C PyTime

7.6.12.3 Funções de relógio brutas
..................................

Similares às funções de relógio, mas não definem uma exceção em
condições de erro, e não requerem que o chamador possua a trava ‘GIL’.

Em caso de sucesso, as funções retornam ‘0’.

Em caso de falha, elas definem ‘*result’ como ‘0’ e retornam ‘-1’, 'sem'
definir uma exceção.  Para acessar a causa do erro, obtenha a GIL e
chame a função regular (sem o sufixo ‘Raw’).  Obserrve que a função
regular pode ser bem-sucedida mesmo após a bruta falhar.

 -- C Função: int PyTime_MonotonicRaw (PyTime_t *result)

     Similar a *note PyTime_Monotonic(): 331, mas não define uma exceção
     em caso de erro, e não exige a posse da GIL.

 -- C Função: int PyTime_PerfCounterRaw (PyTime_t *result)

     Similar a *note PyTime_PerfCounter(): 333, mas não define uma
     exceção em caso de erro e não requer a posse da GIL.

 -- C Função: int PyTime_TimeRaw (PyTime_t *result)

     Similar a *note PyTime_Time(): 335, mas não define uma exceção em
     caso de erro e não requer a posse da GIL.


File: python.info,  Node: Funções de conversão,  Prev: Funções de relógio brutas,  Up: API C PyTime

7.6.12.4 Funções de conversão
.............................

 -- C Função: double PyTime_AsSecondsDouble (PyTime_t t)

     Converte um registro de data e hora para uma quantidade de segundos
     como um double C.

     Esta função nunca falha, mas note que double tem acurácia limitada
     para valores grandes.


File: python.info,  Node: Suporte a Mapas do Perf,  Prev: API C PyTime,  Up: Utilitários<2>

7.6.13 Suporte a Mapas do Perf
------------------------------

Em plataformas suportadas (no momento em que este livro foi escrito,
apenas Linux), o tempo de execução pode tirar vantagem dos 'arquivos de
mapa perf' para tornar as funções Python visíveis para uma ferramenta de
perfilação externa (como perf(1)).  Um processo em execução pode criar
um arquivo no diretório ‘/tmp’, que contém entradas que podem mapear uma
seção de código executável para um nome.  Esta interface é descrita na
documentação da ferramenta Linux Perf(2).

Em Python, essas APIs auxiliares podem ser usadas por bibliotecas e
recursos que dependem da geração de código de máquina dinamicamente.

Observe que manter a trava global do interpretador (GIL) não é
necessário para essas APIs.

 -- C Função: int PyUnstable_PerfMapState_Init (void)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Abre o arquivo ‘/tmp/perf-$pid.map’, a menos que já esteja aberto,
     e cria uma trava para garantir escritas seguras para thread no
     arquivo (desde que as escritas sejam feitas através de *note
     PyUnstable_WritePerfMapEntry(): 182e. ).  Normalmente, não há
     necessidade de chamar isso explicitamente; basta usar *note
     PyUnstable_WritePerfMapEntry(): 182e. e ele inicializará o estado
     na primeira chamada.

     Retorna ‘0’ em caso de sucesso, ‘-1’ em caso de falha ao
     criar/abrir o arquivo de mapa de desempenho ou ‘-2’ em caso de
     falha na criação de uma trava.  Verifique ‘errno’ para mais
     informações sobre a causa de uma falha.

 -- C Função: int PyUnstable_WritePerfMapEntry (const void *code_addr,
          unsigned int code_size, const char *entry_name)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Escreve uma única entrada no arquivo ‘/tmp/perf-$pid.map’.  Esta
     função é segura para thread.  Aqui está a aparência de um exemplo
     de entrada:

          # endereço  tamanho  nome
          7f3529fcf759 b     py::bar:/run/t.py

     Chamará *note PyUnstable_PerfMapState_Init(): 182f. antes de
     escrever a entrada, se o arquivo de mapa de desempenho ainda não
     estiver aberto.  Retorna ‘0’ em caso de sucesso ou os mesmos
     códigos de erro que *note PyUnstable_PerfMapState_Init(): 182f. em
     caso de falha.

 -- C Função: void PyUnstable_PerfMapState_Fini (void)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Fecha o arquivo de mapa do perf aberto por *note
     PyUnstable_PerfMapState_Init(): 182f.  Isso é chamado pelo próprio
     tempo de execução durante o desligamento do interpretador.  Em
     geral, não deve haver motivo para chamar isso explicitamente,
     exceto para lidar com cenários específicos, como bifurcação.

   ---------- Footnotes ----------

   (1) https://perf.wiki.kernel.org/index.php/Main_Page

   (2) 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/tools/perf/Documentation/jit-interface.txt


File: python.info,  Node: Camada de Objetos Abstratos,  Next: Camada de Objetos Concretos,  Prev: Utilitários<2>,  Up: Manual de referência da API Python/C

7.7 Camada de Objetos Abstratos
===============================

As funções neste capítulo interagem com objetos Python independentemente
do seu tipo, ou com classes amplas de tipos de objetos (por exemplo,
todos os tipos numéricos ou todos os tipos de sequência).  Quando usadas
em tipos de objetos para os quais não se aplicam, elas irão levantar uma
exceção Python.

Não é possível usar essas funções em objetos que não foram inicializados
corretamente, como um objeto de lista criado por *note PyList_New():
4be1, mas cujos itens ainda não foram definidos para algum valor
diferente de ‘NULL’.

* Menu:

* Protocolo de objeto::
* Protocolo de chamada::
* Protocolo de número::
* Protocolo de sequência::
* Protocolo de mapeamento::
* Protocolo Iterador::
* Protocolo de buffer::


File: python.info,  Node: Protocolo de objeto,  Next: Protocolo de chamada,  Up: Camada de Objetos Abstratos

7.7.1 Protocolo de objeto
-------------------------

 -- C Função: *note PyObject: 339. *Py_GetConstant (unsigned int
          constant_id)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Obtém uma
     *note referência forte: 33d. para uma constante.

     Define uma exceção e retorna ‘NULL’ se 'constant_id' for inválido.

     'constant_id' deve ser um destes identificadores constantes:

     Identificador da constante                   Valor     Objeto retornado
                                                            
     -------------------------------------------------------------------------------------
                                                            
      -- C Macro: Py_CONSTANT_NONE                ‘0’       *note None: 675.
                                                            
                                                            
      -- C Macro: Py_CONSTANT_FALSE               ‘1’       *note False: b49.
                                                            
                                                            
      -- C Macro: Py_CONSTANT_TRUE                ‘2’       *note True: c27.
                                                            
                                                            
      -- C Macro: Py_CONSTANT_ELLIPSIS            ‘3’       *note Ellipsis: 231c.
                                                            
                                                            
      -- C Macro: Py_CONSTANT_NOT_IMPLEMENTED     ‘4’       *note NotImplemented: 7d3.
                                                            
                                                            
      -- C Macro: Py_CONSTANT_ZERO                ‘5’       ‘0’
                                                            
                                                            
      -- C Macro: Py_CONSTANT_ONE                 ‘6’       ‘1’
                                                            
                                                            
      -- C Macro: Py_CONSTANT_EMPTY_STR           ‘7’       ‘''’
                                                            
                                                            
      -- C Macro: Py_CONSTANT_EMPTY_BYTES         ‘8’       ‘b''’
                                                            
                                                            
      -- C Macro: Py_CONSTANT_EMPTY_TUPLE         ‘9’       ‘()’
                                                            

     Valores numéricos são fornecidos apenas para projetos que não podem
     usar identificadores constantes.

     Adicionado na versão 3.13.

     No CPython, todas essas constantes são *note imortais: 45bb.

 -- C Função: *note PyObject: 339. *Py_GetConstantBorrowed (unsigned int
          constant_id)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'
     Semelhante a *note Py_GetConstant(): 354, mas retorna uma *note
     referência emprestada: 33e.

     Esta função destina-se principalmente à compatibilidade com versões
     anteriores: usar *note Py_GetConstant(): 354. é recomendado para
     novo código.

     A referência é emprestada do interpretador e é válida até a
     finalização do interpretador.

     Adicionado na versão 3.13.

 -- C Variável: *note PyObject: 339. *Py_NotImplemented

     O singleton ‘NotImplemented’, usado para sinalizar que uma operação
     não foi implementada para a combinação de tipo fornecida.

 -- C Macro: Py_RETURN_NOTIMPLEMENTED

     Manipula adequadamente o retorno de *note Py_NotImplemented: 4f0f.
     de dentro de uma função C (ou seja, cria uma nova *note referência
     forte: 33d. para *note NotImplemented: 7d3. e retorna-a).

 -- C Macro: Py_PRINT_RAW

     Flag to be used with multiple functions that print the object (like
     *note PyObject_Print(): 16dc. and *note PyFile_WriteObject():
     4cbf.).  If passed, these functions use the *note str(): 44c. of
     the object instead of the *note repr(): 800.

 -- C Função: int PyObject_Print (PyObject *o, FILE *fp, int flags)

     Print an object 'o', on file 'fp'.  Returns ‘-1’ on error.  The
     flags argument is used to enable certain printing options.  The
     only option currently supported is *note Py_PRINT_RAW: 4f10.; if
     given, the *note str(): 44c. of the object is written instead of
     the *note repr(): 800.

 -- C Função: int PyObject_HasAttrWithError (PyObject *o, PyObject
          *attr_name)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Returns
     ‘1’ if 'o' has the attribute 'attr_name', and ‘0’ otherwise.  This
     is equivalent to the Python expression ‘hasattr(o, attr_name)’.  On
     failure, return ‘-1’.

     Adicionado na versão 3.13.

 -- C Função: int PyObject_HasAttrStringWithError (PyObject *o, const
          char *attr_name)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  This is
     the same as *note PyObject_HasAttrWithError(): 37a, but 'attr_name'
     is specified as a const char* UTF-8 encoded bytes string, rather
     than a *note PyObject: 339.*.

     Adicionado na versão 3.13.

 -- C Função: int PyObject_HasAttr (PyObject *o, PyObject *attr_name)
     ' Parte da *note ABI Estável: 553.'  Returns ‘1’ if 'o' has the
     attribute 'attr_name', and ‘0’ otherwise.  This function always
     succeeds.

          Nota: Exceptions that occur when this calls *note
          __getattr__(): 4d3. and *note __getattribute__(): beb. methods
          aren’t propagated, but instead given to *note
          sys.unraisablehook(): 1f7.  For proper error handling, use
          *note PyObject_HasAttrWithError(): 37a, *note
          PyObject_GetOptionalAttr(): 349. or *note PyObject_GetAttr():
          347. instead.

 -- C Função: int PyObject_HasAttrString (PyObject *o, const char
          *attr_name)
     ' Parte da *note ABI Estável: 553.'  This is the same as *note
     PyObject_HasAttr(): 37b, but 'attr_name' is specified as a const
     char* UTF-8 encoded bytes string, rather than a *note PyObject:
     339.*.

          Nota: Exceptions that occur when this calls *note
          __getattr__(): 4d3. and *note __getattribute__(): beb. methods
          or while creating the temporary *note str: 44c. object are
          silently ignored.  For proper error handling, use *note
          PyObject_HasAttrStringWithError(): 37c, *note
          PyObject_GetOptionalAttrString(): 34a. or *note
          PyObject_GetAttrString(): 348. instead.

 -- C Função: *note PyObject: 339. *PyObject_GetAttr (PyObject *o,
          PyObject *attr_name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retrieve an attribute named 'attr_name' from object 'o'.
     Returns the attribute value on success, or ‘NULL’ on failure.  This
     is the equivalent of the Python expression ‘o.attr_name’.

     If the missing attribute should not be treated as a failure, you
     can use *note PyObject_GetOptionalAttr(): 349. instead.

 -- C Função: *note PyObject: 339. *PyObject_GetAttrString (PyObject *o,
          const char *attr_name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  This is the same as *note PyObject_GetAttr(): 347, but
     'attr_name' is specified as a const char* UTF-8 encoded bytes
     string, rather than a *note PyObject: 339.*.

     If the missing attribute should not be treated as a failure, you
     can use *note PyObject_GetOptionalAttrString(): 34a. instead.

 -- C Função: int PyObject_GetOptionalAttr (PyObject *obj, PyObject
          *attr_name, PyObject **result);
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Variant
     of *note PyObject_GetAttr(): 347. which doesn’t raise *note
     AttributeError: 34b. if the attribute is not found.

     If the attribute is found, return ‘1’ and set '*result' to a new
     *note strong reference: 33d. to the attribute.  If the attribute is
     not found, return ‘0’ and set '*result' to ‘NULL’; the *note
     AttributeError: 34b. is silenced.  If an error other than *note
     AttributeError: 34b. is raised, return ‘-1’ and set '*result' to
     ‘NULL’.

     Adicionado na versão 3.13.

 -- C Função: int PyObject_GetOptionalAttrString (PyObject *obj, const
          char *attr_name, PyObject **result);
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  This is
     the same as *note PyObject_GetOptionalAttr(): 349, but 'attr_name'
     is specified as a const char* UTF-8 encoded bytes string, rather
     than a *note PyObject: 339.*.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 339. *PyObject_GenericGetAttr (PyObject
          *o, PyObject *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Generic attribute getter function that is meant to be put
     into a type object’s ‘tp_getattro’ slot.  It looks for a descriptor
     in the dictionary of classes in the object’s MRO as well as an
     attribute in the object’s *note __dict__: 55b. (if present).  As
     outlined in *note Implementando descritores: c6a, data descriptors
     take preference over instance attributes, while non-data
     descriptors don’t.  Otherwise, an *note AttributeError: 34b. is
     raised.

 -- C Função: int PyObject_SetAttr (PyObject *o, PyObject *attr_name,
          PyObject *v)
     ' Parte da *note ABI Estável: 553.'  Set the value of the attribute
     named 'attr_name', for object 'o', to the value 'v'.  Raise an
     exception and return ‘-1’ on failure; return ‘0’ on success.  This
     is the equivalent of the Python statement ‘o.attr_name = v’.

     If 'v' is ‘NULL’, the attribute is deleted.  This behaviour is
     deprecated in favour of using *note PyObject_DelAttr(): 161f, but
     there are currently no plans to remove it.

 -- C Função: int PyObject_SetAttrString (PyObject *o, const char
          *attr_name, PyObject *v)
     ' Parte da *note ABI Estável: 553.'  This is the same as *note
     PyObject_SetAttr(): 4d34, but 'attr_name' is specified as a const
     char* UTF-8 encoded bytes string, rather than a *note PyObject:
     339.*.

     If 'v' is ‘NULL’, the attribute is deleted, but this feature is
     deprecated in favour of using *note PyObject_DelAttrString(): 1620.

     The number of different attribute names passed to this function
     should be kept small, usually by using a statically allocated
     string as 'attr_name'.  For attribute names that aren’t known at
     compile time, prefer calling *note PyUnicode_FromString(): 4db1.
     and *note PyObject_SetAttr(): 4d34. directly.  For more details,
     see *note PyUnicode_InternFromString(): 16ea, which may be used
     internally to create a key object.

 -- C Função: int PyObject_GenericSetAttr (PyObject *o, PyObject *name,
          PyObject *value)
     ' Parte da *note ABI Estável: 553.'  Generic attribute setter and
     deleter function that is meant to be put into a type object’s *note
     tp_setattro: 4b91. slot.  It looks for a data descriptor in the
     dictionary of classes in the object’s MRO, and if found it takes
     preference over setting or deleting the attribute in the instance
     dictionary.  Otherwise, the attribute is set or deleted in the
     object’s *note __dict__: 55b. (if present).  On success, ‘0’ is
     returned, otherwise an *note AttributeError: 34b. is raised and
     ‘-1’ is returned.

 -- C Função: int PyObject_DelAttr (PyObject *o, PyObject *attr_name)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Delete
     attribute named 'attr_name', for object 'o'.  Returns ‘-1’ on
     failure.  This is the equivalent of the Python statement ‘del
     o.attr_name’.

 -- C Função: int PyObject_DelAttrString (PyObject *o, const char
          *attr_name)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  This is
     the same as *note PyObject_DelAttr(): 161f, but 'attr_name' is
     specified as a const char* UTF-8 encoded bytes string, rather than
     a *note PyObject: 339.*.

     The number of different attribute names passed to this function
     should be kept small, usually by using a statically allocated
     string as 'attr_name'.  For attribute names that aren’t known at
     compile time, prefer calling *note PyUnicode_FromString(): 4db1.
     and *note PyObject_DelAttr(): 161f. directly.  For more details,
     see *note PyUnicode_InternFromString(): 16ea, which may be used
     internally to create a key object for lookup.

 -- C Função: *note PyObject: 339. *PyObject_GenericGetDict (PyObject
          *o, void *context)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.10.'  A generic implementation for the getter
     of a ‘__dict__’ descriptor.  It creates the dictionary if
     necessary.

     This function may also be called to get the *note __dict__: 55b. of
     the object 'o'.  Pass ‘NULL’ for 'context' when calling it.  Since
     this function may need to allocate memory for the dictionary, it
     may be more efficient to call *note PyObject_GetAttr(): 347. when
     accessing an attribute on the object.

     On failure, returns ‘NULL’ with an exception set.

     Adicionado na versão 3.3.

 -- C Função: int PyObject_GenericSetDict (PyObject *o, PyObject *value,
          void *context)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  A generic
     implementation for the setter of a ‘__dict__’ descriptor.  This
     implementation does not allow the dictionary to be deleted.

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 339. **_PyObject_GetDictPtr (PyObject
          *obj)

     Return a pointer to *note __dict__: 55b. of the object 'obj'.  If
     there is no ‘__dict__’, return ‘NULL’ without setting an exception.

     This function may need to allocate memory for the dictionary, so it
     may be more efficient to call *note PyObject_GetAttr(): 347. when
     accessing an attribute on the object.

 -- C Função: *note PyObject: 339. *PyObject_RichCompare (PyObject *o1,
          PyObject *o2, int opid)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Compare the values of 'o1' and 'o2' using the operation
     specified by 'opid', which must be one of *note Py_LT: 4f12, *note
     Py_LE: 4f13, *note Py_EQ: 4f14, *note Py_NE: 4f15, *note Py_GT:
     4f16, or *note Py_GE: 4f17, corresponding to ‘<’, ‘<=’, ‘==’, ‘!=’,
     ‘>’, or ‘>=’ respectively.  This is the equivalent of the Python
     expression ‘o1 op o2’, where ‘op’ is the operator corresponding to
     'opid'.  Returns the value of the comparison on success, or ‘NULL’
     on failure.

 -- C Função: int PyObject_RichCompareBool (PyObject *o1, PyObject *o2,
          int opid)
     ' Parte da *note ABI Estável: 553.'  Compare the values of 'o1' and
     'o2' using the operation specified by 'opid', like *note
     PyObject_RichCompare(): 4b9a, but returns ‘-1’ on error, ‘0’ if the
     result is false, ‘1’ otherwise.

     Nota: If 'o1' and 'o2' are the same object, *note
     PyObject_RichCompareBool(): 1b1b. will always return ‘1’ for *note
     Py_EQ: 4f14. and ‘0’ for *note Py_NE: 4f15.

 -- C Função: *note PyObject: 339. *PyObject_Format (PyObject *obj,
          PyObject *format_spec)
     ' Parte da *note ABI Estável: 553.'  Format 'obj' using
     'format_spec'.  This is equivalent to the Python expression
     ‘format(obj, format_spec)’.

     'format_spec' may be ‘NULL’.  In this case the call is equivalent
     to ‘format(obj)’.  Returns the formatted string on success, ‘NULL’
     on failure.

 -- C Função: *note PyObject: 339. *PyObject_Repr (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

     Compute a string representation of object 'o'.  Returns the string
     representation on success, ‘NULL’ on failure.  This is the
     equivalent of the Python expression ‘repr(o)’.  Called by the *note
     repr(): 800. built-in function.

     Alterado na versão 3.4: Essa função agora inclui uma asserção de
     depuração para ajudar a garantir que ela não descarte
     silenciosamente uma exceção ativa.

 -- C Função: *note PyObject: 339. *PyObject_ASCII (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

     As *note PyObject_Repr(): 1067, compute a string representation of
     object 'o', but escape the non-ASCII characters in the string
     returned by *note PyObject_Repr(): 1067. with ‘\x’, ‘\u’ or ‘\U’
     escapes.  This generates a string similar to that returned by *note
     PyObject_Repr(): 1067. in Python 2.  Called by the *note ascii():
     142d. built-in function.

 -- C Função: *note PyObject: 339. *PyObject_Str (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Compute a string representation of object 'o'.  Returns the
     string representation on success, ‘NULL’ on failure.  This is the
     equivalent of the Python expression ‘str(o)’.  Called by the *note
     str(): 44c. built-in function and, therefore, by the *note print():
     fa9. function.

     Alterado na versão 3.4: Essa função agora inclui uma asserção de
     depuração para ajudar a garantir que ela não descarte
     silenciosamente uma exceção ativa.

 -- C Função: *note PyObject: 339. *PyObject_Bytes (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

     Compute a bytes representation of object 'o'.  ‘NULL’ is returned
     on failure and a bytes object on success.  This is equivalent to
     the Python expression ‘bytes(o)’, when 'o' is not an integer.
     Unlike ‘bytes(o)’, a TypeError is raised when 'o' is an integer
     instead of a zero-initialized bytes object.

 -- C Função: int PyObject_IsSubclass (PyObject *derived, PyObject *cls)
     ' Parte da *note ABI Estável: 553.'  Return ‘1’ if the class
     'derived' is identical to or derived from the class 'cls',
     otherwise return ‘0’.  In case of an error, return ‘-1’.

     If 'cls' is a tuple, the check will be done against every entry in
     'cls'.  The result will be ‘1’ when at least one of the checks
     returns ‘1’, otherwise it will be ‘0’.

     If 'cls' has a *note __subclasscheck__(): 2109. method, it will be
     called to determine the subclass status as described in PEP
     3119(1).  Otherwise, 'derived' is a subclass of 'cls' if it is a
     direct or indirect subclass, i.e.  contained in *note cls.__mro__:
     20bb.

     Normally only class objects, i.e.  instances of *note type: d6b. or
     a derived class, are considered classes.  However, objects can
     override this by having a *note __bases__: 14f4. attribute (which
     must be a tuple of base classes).

 -- C Função: int PyObject_IsInstance (PyObject *inst, PyObject *cls)
     ' Parte da *note ABI Estável: 553.'  Return ‘1’ if 'inst' is an
     instance of the class 'cls' or a subclass of 'cls', or ‘0’ if not.
     On error, returns ‘-1’ and sets an exception.

     If 'cls' is a tuple, the check will be done against every entry in
     'cls'.  The result will be ‘1’ when at least one of the checks
     returns ‘1’, otherwise it will be ‘0’.

     If 'cls' has a *note __instancecheck__(): 2108. method, it will be
     called to determine the subclass status as described in PEP
     3119(2).  Otherwise, 'inst' is an instance of 'cls' if its class is
     a subclass of 'cls'.

     An instance 'inst' can override what is considered its class by
     having a *note __class__: 14f5. attribute.

     An object 'cls' can override if it is considered a class, and what
     its base classes are, by having a *note __bases__: 14f4. attribute
     (which must be a tuple of base classes).

 -- C Função: *note Py_hash_t: 12a5. PyObject_Hash (PyObject *o)
     ' Parte da *note ABI Estável: 553.'

     Compute and return the hash value of an object 'o'.  On failure,
     return ‘-1’.  This is the equivalent of the Python expression
     ‘hash(o)’.

     Alterado na versão 3.2: The return type is now Py_hash_t.  This is
     a signed integer the same size as *note Py_ssize_t: a69.

 -- C Função: *note Py_hash_t: 12a5. PyObject_HashNotImplemented
          (PyObject *o)
     ' Parte da *note ABI Estável: 553.'  Set a *note TypeError: 2c3.
     indicating that ‘type(o)’ is not *note hashable: 610. and return
     ‘-1’.  This function receives special treatment when stored in a
     ‘tp_hash’ slot, allowing a type to explicitly indicate to the
     interpreter that it is not hashable.

 -- C Função: int PyObject_IsTrue (PyObject *o)
     ' Parte da *note ABI Estável: 553.'  Returns ‘1’ if the object 'o'
     is considered to be true, and ‘0’ otherwise.  This is equivalent to
     the Python expression ‘not not o’.  On failure, return ‘-1’.

 -- C Função: int PyObject_Not (PyObject *o)
     ' Parte da *note ABI Estável: 553.'  Returns ‘0’ if the object 'o'
     is considered to be true, and ‘1’ otherwise.  This is equivalent to
     the Python expression ‘not o’.  On failure, return ‘-1’.

 -- C Função: *note PyObject: 339. *PyObject_Type (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

     When 'o' is non-‘NULL’, returns a type object corresponding to the
     object type of object 'o'.  On failure, raises *note SystemError:
     575. and returns ‘NULL’.  This is equivalent to the Python
     expression ‘type(o)’.  This function creates a new *note strong
     reference: 33d. to the return value.  There’s really no reason to
     use this function instead of the *note Py_TYPE(): 780. function,
     which returns a pointer of type *note PyTypeObject: ab4.*, except
     when a new *note strong reference: 33d. is needed.

 -- C Função: int PyObject_TypeCheck (PyObject *o, PyTypeObject *type)

     Return non-zero if the object 'o' is of type 'type' or a subtype of
     'type', and ‘0’ otherwise.  Both parameters must be non-‘NULL’.

 -- C Função: *note Py_ssize_t: a69. PyObject_Size (PyObject *o)
 -- C Função: *note Py_ssize_t: a69. PyObject_Length (PyObject *o)
     ' Parte da *note ABI Estável: 553.'

     Return the length of object 'o'.  If the object 'o' provides either
     the sequence and mapping protocols, the sequence length is
     returned.  On error, ‘-1’ is returned.  This is the equivalent to
     the Python expression ‘len(o)’.

 -- C Função: *note Py_ssize_t: a69. PyObject_LengthHint (PyObject *o,
          Py_ssize_t defaultvalue)

     Return an estimated length for the object 'o'.  First try to return
     its actual length, then an estimate using *note __length_hint__():
     f3d, and finally return the default value.  On error return ‘-1’.
     This is the equivalent to the Python expression
     ‘operator.length_hint(o, defaultvalue)’.

     Adicionado na versão 3.4.

 -- C Função: *note PyObject: 339. *PyObject_GetItem (PyObject *o,
          PyObject *key)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Return element of 'o' corresponding to the object 'key' or
     ‘NULL’ on failure.  This is the equivalent of the Python expression
     ‘o[key]’.

 -- C Função: int PyObject_SetItem (PyObject *o, PyObject *key, PyObject
          *v)
     ' Parte da *note ABI Estável: 553.'  Map the object 'key' to the
     value 'v'.  Raise an exception and return ‘-1’ on failure; return
     ‘0’ on success.  This is the equivalent of the Python statement
     ‘o[key] = v’.  This function 'does not' steal a reference to 'v'.

 -- C Função: int PyObject_DelItem (PyObject *o, PyObject *key)
     ' Parte da *note ABI Estável: 553.'  Remove the mapping for the
     object 'key' from the object 'o'.  Return ‘-1’ on failure.  This is
     equivalent to the Python statement ‘del o[key]’.

 -- C Função: int PyObject_DelItemString (PyObject *o, const char *key)
     ' Parte da *note ABI Estável: 553.'  É o mesmo que *note
     PyObject_DelItem(): 4d27, mas 'key' é especificada como uma string
     de bytes const char* codificada em UTF-8, em vez de um *note
     PyObject: 339.*.

 -- C Função: *note PyObject: 339. *PyObject_Dir (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  This is equivalent to the Python expression ‘dir(o)’,
     returning a (possibly empty) list of strings appropriate for the
     object argument, or ‘NULL’ if there was an error.  If the argument
     is ‘NULL’, this is like the Python ‘dir()’, returning the names of
     the current locals; in this case, if no execution frame is active
     then ‘NULL’ is returned but *note PyErr_Occurred(): 1a3b. will
     return false.

 -- C Função: *note PyObject: 339. *PyObject_GetIter (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  This is equivalent to the Python expression ‘iter(o)’.  It
     returns a new iterator for the object argument, or the object
     itself if the object is already an iterator.  Raises *note
     TypeError: 2c3. and returns ‘NULL’ if the object cannot be
     iterated.

 -- C Função: *note PyObject: 339. *PyObject_SelfIter (PyObject *obj)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  This is equivalent to the Python ‘__iter__(self): return
     self’ method.  It is intended for *note iterator: 1ac. types, to be
     used in the *note PyTypeObject.tp_iter: 1537. slot.

 -- C Função: *note PyObject: 339. *PyObject_GetAIter (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.10.'  This is the equivalent to the Python
     expression ‘aiter(o)’.  Takes an ‘AsyncIterable’ object and returns
     an ‘AsyncIterator’ for it.  This is typically a new iterator but if
     the argument is an ‘AsyncIterator’, this returns itself.  Raises
     *note TypeError: 2c3. and returns ‘NULL’ if the object cannot be
     iterated.

     Adicionado na versão 3.10.

 -- C Função: void *PyObject_GetTypeData (PyObject *o, PyTypeObject
          *cls)
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  Get a
     pointer to subclass-specific data reserved for 'cls'.

     The object 'o' must be an instance of 'cls', and 'cls' must have
     been created using negative *note PyType_Spec.basicsize: 548.
     Python does not check this.

     On error, set an exception and return ‘NULL’.

     Adicionado na versão 3.12.

 -- C Função: *note Py_ssize_t: a69. PyType_GetTypeDataSize
          (PyTypeObject *cls)
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  Return
     the size of the instance memory space reserved for 'cls', i.e.  the
     size of the memory *note PyObject_GetTypeData(): 549. returns.

     This may be larger than requested using *note
     -PyType_Spec.basicsize: 548.; it is safe to use this larger size
     (e.g.  with ‘memset()’).

     The type 'cls' 'must' have been created using negative *note
     PyType_Spec.basicsize: 548.  Python does not check this.

     On error, set an exception and return a negative value.

     Adicionado na versão 3.12.

 -- C Função: void *PyObject_GetItemData (PyObject *o)

     Get a pointer to per-item data for a class with *note
     Py_TPFLAGS_ITEMS_AT_END: 54b.

     On error, set an exception and return ‘NULL’.  *note TypeError:
     2c3. is raised if 'o' does not have *note Py_TPFLAGS_ITEMS_AT_END:
     54b. set.

     Adicionado na versão 3.12.

 -- C Função: int PyObject_VisitManagedDict (PyObject *obj, visitproc
          visit, void *arg)

     Visit the managed dictionary of 'obj'.

     This function must only be called in a traverse function of the
     type which has the *note Py_TPFLAGS_MANAGED_DICT: 36b. flag set.

     Adicionado na versão 3.13.

 -- C Função: void PyObject_ClearManagedDict (PyObject *obj)

     Clear the managed dictionary of 'obj'.

     This function must only be called in a clear function of the type
     which has the *note Py_TPFLAGS_MANAGED_DICT: 36b. flag set.

     Adicionado na versão 3.13.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3119/

   (2) https://peps.python.org/pep-3119/


File: python.info,  Node: Protocolo de chamada,  Next: Protocolo de número,  Prev: Protocolo de objeto,  Up: Camada de Objetos Abstratos

7.7.2 Protocolo de chamada
--------------------------

O CPython permite dois protocolos de chamada: 'tp_call' e vectorcall.

* Menu:

* O protocolo tp_call::
* O protocolo vectorcall::
* API de chamada de objetos::
* API de suporte a chamadas::


File: python.info,  Node: O protocolo tp_call,  Next: O protocolo vectorcall,  Up: Protocolo de chamada

7.7.2.1 O protocolo 'tp_call'
.............................

Instâncias de classe que definem *note tp_call: 559. são chamáveis.  A
assinatura do slot é:

     PyObject *tp_call(PyObject *callable, PyObject *args, PyObject *kwargs);

Uma chamada é feita usando uma tupla para os argumentos posicionais e um
dicionário para os argumentos nomeados, similar a ‘callable(*args,
**kwargs)’ no Python.  'args' não pode ser nulo (utilize uma tupla vazia
se não houver argumentos), mas 'kwargs' pode ser 'NULL' se não houver
argumentos nomeados.

Esta convenção não é somente usada por 'tp_call': *note tp_new: 57f. e
*note tp_init: 581. também passam argumento dessa forma.

Para chamar um objeto, use *note PyObject_Call(): 39c. ou outra *note
API de chamada: 4f1c.


File: python.info,  Node: O protocolo vectorcall,  Next: API de chamada de objetos,  Prev: O protocolo tp_call,  Up: Protocolo de chamada

7.7.2.2 O protocolo vectorcall
..............................

Adicionado na versão 3.9.

O protocolo vectorcall foi introduzido pela PEP 590(1) como um protocolo
adicional para tornar invocações mais eficientes.

Como regra de ouro, CPython vai preferir o vectorcall para chamadas
internas se o chamável suportar.  Entretanto, isso não é uma regra
rígida.  Ademais, alguma extensões de terceiros usam 'tp_call'
diretamente (em vez de utilizar *note PyObject_Call(): 39c.).  Portanto,
uma classe que suporta vectorcall precisa também implementar *note
tp_call: 559.  Além disso, o chamável precisa se comportar da mesma
forma independe de qual protocolo é utilizado.  A forma recomendada de
alcançar isso é definindo *note tp_call: 559. para *note
PyVectorcall_Call(): 556.  Vale a pena repetir:

     Aviso: Uma classe que suporte vectorcall também 'precisa'
     implementar *note tp_call: 559. com a mesma semântica.

Alterado na versão 3.12: O sinalizador *note Py_TPFLAGS_HAVE_VECTORCALL:
554. agora é removido da classe quando o método *note __call__(): 558.
está reatribuído.  (Internamente, isso apenas define *note tp_call: 559,
e portanto, pode fazê-lo comportar-se de forma diferente da função
vectorcall.  Em versões anteriores do Python, vectorcall só deve ser
usado com tipos *note imutáveis: 3c2. ou estáticos.

Uma classe não deve implementar vectorcall se for mais lento que
'tp_call'.  Por exemplo, se o chamador precisa converter os argumentos
para uma tupla args e um dicionário kwargs de qualquer forma, então não
é necessário implementar vectorcall.

Classes podem implementar o protocolo vectorcall ativando o sinalizador
*note Py_TPFLAGS_HAVE_VECTORCALL: 554. e configurando *note
tp_vectorcall_offset: 4f1e. para o offset dentro da estrutura do objeto
onde uma 'vectorcallfunc' aparece.  Este é um ponteiro para uma função
com a seguinte assinatura:

 -- C Tipo: typedef *note PyObject: 339. *(*vectorcallfunc)(*note
          PyObject: 339. *callable, *note PyObject: 339. *const *args,
          size_t nargsf, *note PyObject: 339. *kwnames)
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'

   - 'callable' é o objeto sendo chamado.

   - 
     'args' é um array C formado pelos argumentos posicionais seguidos de

          valores dos argumentos nomeados.  Este pode ser 'NULL' se não
          existirem argumentos.

   - 
     'nargsf' é o número de argumentos posicionais somado á possível

          Sinalizador *note PY_VECTORCALL_ARGUMENTS_OFFSET: 55e.  Para
          obter o número real de argumentos posicionais de 'nargsf', use
          *note PyVectorcall_NARGS(): 555.

   - 
     'kwnames' é uma tupla contendo os nomes dos argumentos nomeados;

          em outras palavras, as chaves do dicionário kwargs.  Estes
          nomes devem ser strings (instâncias de ‘str’ ou uma subclasse)
          e eles devem ser únicos.  Se não existem argumentos nomeados,
          então 'kwnames' deve então ser 'NULL'.

 -- C Macro: PY_VECTORCALL_ARGUMENTS_OFFSET
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  Se esse
     sinalizador é definido em um argumento 'nargsf' do vectorcall, deve
     ser permitido ao chamado temporariamente mudar ‘args[-1]’.  Em
     outras palavras, 'args' aponta para o argumento 1 (não 0) no vetor
     alocado.  O chamado deve restaurar o valor de ‘args[-1]’ antes de
     retornar.

     Para *note PyObject_VectorcallMethod(): 55d, este sinalizador
     significa que ‘args[0]’ pode ser alterado.

     Sempre que podem realizar a um custo tão baixo (sem alocações
     adicionais), invocadores são encorajados a usar *note
     PY_VECTORCALL_ARGUMENTS_OFFSET: 55e.  Isso permitirá invocados como
     métodos vinculados a instâncias fazerem suas próprias invocações (o
     que inclui um argumento 'self') muito eficientemente.

     Adicionado na versão 3.8.

Para invocar um objeto que implementa vectorcall, utilize a função *note
call API: 4f1c. como qualquer outra invocável.  *note
PyObject_Vectorcall(): 55c. será normalmente mais eficiente.

* Menu:

* Controle de recursão: Controle de recursão<2>.
* API de suporte à chamada de vetores::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0590/


File: python.info,  Node: Controle de recursão<2>,  Next: API de suporte à chamada de vetores,  Up: O protocolo vectorcall

7.7.2.3 Controle de recursão
............................

Quando utilizando 'tp_call', invocadores não precisam se preocupar sobre
*note recursão: 4e95.: CPython usa *note Py_EnterRecursiveCall(): 97a. e
*note Py_LeaveRecursiveCall(): 97b. para chamadas utilizando 'tp_call'.

Por questão de eficiência, este não é o caso de chamadas utilizando o
vectorcall: o que chama deve utilizar 'Py_EnterRecursiveCall' e
'Py_LeaveRecursiveCall' se necessário.


File: python.info,  Node: API de suporte à chamada de vetores,  Prev: Controle de recursão<2>,  Up: O protocolo vectorcall

7.7.2.4 API de suporte à chamada de vetores
...........................................

 -- C Função: *note Py_ssize_t: a69. PyVectorcall_NARGS (size_t nargsf)
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  Dado um
     argumento de chamada de vetor 'nargsf', retorna o número real de
     argumentos.  Atualmente equivalente a:

          (Py_ssize_t)(nargsf & ~PY_VECTORCALL_ARGUMENTS_OFFSET)

     Entretanto, a função ‘PyVectorcall_NARGS’ deve ser usada para
     permitir para futuras extensões.

     Adicionado na versão 3.8.

 -- C Função: *note vectorcallfunc: 557. PyVectorcall_Function (PyObject
          *op)

     Se 'op' não suporta o protocolo de chamada de vetor (seja porque o
     tipo ou a instância específica não suportam), retorne 'NULL'. Se
     não, retorne o ponteiro da função chamada de vetor armazenado em
     'op'.  Esta função nunca levanta uma exceção.

     É mais útil checar se 'op' suporta ou não chamada de vetor, o que
     pode ser feito checando ‘PyVectorcall_Function(op) != NULL’.

     Adicionado na versão 3.9.

 -- C Função: *note PyObject: 339. *PyVectorcall_Call (PyObject
          *callable, PyObject *tuple, PyObject *dict)
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  Chama o
     *note vectorcallfunc: 557. de 'callable' com argumentos posicionais
     e nomeados dados em uma tupla e dicionário, respectivamente.

     Esta é uma função especializada, feita para ser colocada no slot
     *note tp_call: 559. ou usada em uma implementação de ‘tp_call’.
     Ela não verifica o sinalizador *note Py_TPFLAGS_HAVE_VECTORCALL:
     554. e não retorna para ‘tp_call’.

     Adicionado na versão 3.8.


File: python.info,  Node: API de chamada de objetos,  Next: API de suporte a chamadas,  Prev: O protocolo vectorcall,  Up: Protocolo de chamada

7.7.2.5 API de chamada de objetos
.................................

Várias funções estão disponíveis para chamar um objeto Python.  Cada uma
converte seus argumentos para uma convenção suportada pelo objeto
chamado – seja 'tp_call' ou chamada de vetor.  Para fazer o mínimo
possível de conversões, escolha um que melhor se adapte ao formato de
dados que você tem disponível.

A tabela a seguir resume as funções disponíveis; por favor, veja a
documentação individual para detalhes.

Função                                         chamável               args                     kwargs
                                                                                               
-------------------------------------------------------------------------------------------------------------------
                                                                                               
*note PyObject_Call(): 39c.                    ‘PyObject *’           tupla                    dict/‘NULL’
                                                                                               
                                                                                               
*note PyObject_CallNoArgs(): 39b.              ‘PyObject *’           —                        —
                                                                                               
                                                                                               
*note PyObject_CallOneArg(): 97f.              ‘PyObject *’           1 objeto                 —
                                                                                               
                                                                                               
*note PyObject_CallObject(): 4b56.             ‘PyObject *’           tupla/‘NULL’             —
                                                                                               
                                                                                               
*note PyObject_CallFunction(): 39e.            ‘PyObject *’           format                   —
                                                                                               
                                                                                               
*note PyObject_CallMethod(): 39f.              obj + ‘char*’          format                   —
                                                                                               
                                                                                               
*note PyObject_CallFunctionObjArgs(): 4d26.    ‘PyObject *’           variádica                —
                                                                                               
                                                                                               
*note PyObject_CallMethodObjArgs(): 1b74.      obj + nome             variádica                —
                                                                                               
                                                                                               
*note PyObject_CallMethodNoArgs(): 4f23.       obj + nome             —                        —
                                                                                               
                                                                                               
*note PyObject_CallMethodOneArg(): 4f24.       obj + nome             1 objeto                 —
                                                                                               
                                                                                               
*note PyObject_Vectorcall(): 55c.              ‘PyObject *’           vectorcall               vectorcall
                                                                                               
                                                                                               
*note PyObject_VectorcallDict(): 4f25.         ‘PyObject *’           vectorcall               dict/‘NULL’
                                                                                               
                                                                                               
*note PyObject_VectorcallMethod(): 55d.        arg + nome             vectorcall               vectorcall
                                                                                               

 -- C Função: *note PyObject: 339. *PyObject_Call (PyObject *callable,
          PyObject *args, PyObject *kwargs)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Chama um objeto Python chamável de 'callable', com
     argumentos dados pela tupla 'args', e argumentos nomeados dados
     pelo dicionário 'kwargs'.

     'args' não deve ser 'NULL'; use uma tupla vazia se não precisar de
     argumentos.  Se nenhum argumento nomeado é necessário, 'kwargs'
     pode ser 'NULL'.

     Retorna o resultado da chamada em sucesso, ou levanta uma exceção e
     retorna 'NULL' em caso de falha.

     Esse é o equivalente da expressão Python: ‘callable(*args,
     **kwargs)’.

 -- C Função: *note PyObject: 339. *PyObject_CallNoArgs (PyObject
          *callable)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.10.'  Chama um objeto Python chamável de
     'callable' sem nenhum argumento.  É o jeito mais eficiente de
     chamar um objeto Python sem nenhum argumento.

     Retorna o resultado da chamada em sucesso, ou levanta uma exceção e
     retorna 'NULL' em caso de falha.

     Adicionado na versão 3.9.

 -- C Função: *note PyObject: 339. *PyObject_CallOneArg (PyObject
          *callable, PyObject *arg)
     'Retorna valor: Nova referência.'  Chama um objeto Python chamável
     de 'callable' com exatamente 1 argumento posicional 'arg' e nenhum
     argumento nomeado.

     Retorna o resultado da chamada em sucesso, ou levanta uma exceção e
     retorna 'NULL' em caso de falha.

     Adicionado na versão 3.9.

 -- C Função: *note PyObject: 339. *PyObject_CallObject (PyObject
          *callable, PyObject *args)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Chama um objeto Python chamável de 'callable' com argumentos
     dados pela tupla 'args'.  Se nenhum argumento é necessário, 'args'
     pode ser 'NULL'.

     Retorna o resultado da chamada em sucesso, ou levanta uma exceção e
     retorna 'NULL' em caso de falha.

     Este é o equivalente da expressão Python: ‘callable(*args)’.

 -- C Função: *note PyObject: 339. *PyObject_CallFunction (PyObject
          *callable, const char *format, ...)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Chama um objeto Python chamável de 'callable', com um número
     variável de argumentos C. Os argumentos C são descritos usando uma
     string de estilo no formato *note Py_BuildValue(): 8ac.  O formato
     pode ser 'NULL', indicando que nenhum argumento foi provido.

     Retorna o resultado da chamada em sucesso, ou levanta uma exceção e
     retorna 'NULL' em caso de falha.

     Este é o equivalente da expressão Python: ‘callable(*args)’.

     Note que se você apenas passa argumentos *note PyObject: 339.*,
     *note PyObject_CallFunctionObjArgs(): 4d26. é uma alternativa mais
     rápida.

     Alterado na versão 3.4: O tipo de 'format' foi mudado de ‘char *’.

 -- C Função: *note PyObject: 339. *PyObject_CallMethod (PyObject *obj,
          const char *name, const char *format, ...)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Chama o método chamado 'name' do objeto 'obj' com um número
     variável de argumentos C. Os argumentos C são descritos com uma
     string de formato *note Py_BuildValue(): 8ac. que deve produzir uma
     tupla.

     O formato pode ser 'NULL', indicado que nenhum argumento foi
     provido.

     Retorna o resultado da chamada em sucesso, ou levanta uma exceção e
     retorna 'NULL' em caso de falha.

     Este é o equivalente da expressão Python: ‘obj.name(arg1, arg2,
     ...)’.

     Note que se você apenas passa argumentos *note PyObject: 339.*,
     *note PyObject_CallMethodObjArgs(): 1b74. é uma alternativa mais
     rápida.

     Alterado na versão 3.4: Os tipos de 'name' e 'format' foram mudados
     de ‘char *’.

 -- C Função: *note PyObject: 339. *PyObject_CallFunctionObjArgs
          (PyObject *callable, ...)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Chama um objeto Python chamável de 'callable', com um número
     variável de argumentos *note PyObject: 339.*.  Os argumentos são
     providos como um número variável de parâmetros seguidos por um
     'NULL'.

     Retorna o resultado da chamada em sucesso, ou levanta uma exceção e
     retorna 'NULL' em caso de falha.

     Este é o equivalente da expressão Python: ‘callable(arg1, arg2,
     ...)’.

 -- C Função: *note PyObject: 339. *PyObject_CallMethodObjArgs (PyObject
          *obj, PyObject *name, ...)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Chama um método do objeto Python 'obj', onde o nome do
     método é dado como um objeto string Python em 'name'.  É chamado
     com um número variável de argumentos *note PyObject: 339.*.  Os
     argumentos são providos como um número variável de parâmetros
     seguidos por um 'NULL'.

     Retorna o resultado da chamada em sucesso, ou levanta uma exceção e
     retorna 'NULL' em caso de falha.

 -- C Função: *note PyObject: 339. *PyObject_CallMethodNoArgs (PyObject
          *obj, PyObject *name)

     Chama um método do objeto Python 'obj' sem argumentos, onde o nome
     do método é fornecido como um objeto string do Python em 'name'.

     Retorna o resultado da chamada em sucesso, ou levanta uma exceção e
     retorna 'NULL' em caso de falha.

     Adicionado na versão 3.9.

 -- C Função: *note PyObject: 339. *PyObject_CallMethodOneArg (PyObject
          *obj, PyObject *name, PyObject *arg)

     Chama um método do objeto Python 'obj' com um argumento posicional
     'arg', onde o nome do método é fornecido como um objeto string do
     Python em 'name'.

     Retorna o resultado da chamada em sucesso, ou levanta uma exceção e
     retorna 'NULL' em caso de falha.

     Adicionado na versão 3.9.

 -- C Função: *note PyObject: 339. *PyObject_Vectorcall (PyObject
          *callable, PyObject *const *args, size_t nargsf, PyObject
          *kwnames)
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  Chama um
     objeto Python chamável 'callable'.  Os argumentos são os mesmos de
     *note vectorcallfunc: 557.  Se 'callable' tiver suporte a *note
     vectorcall: 552, isso chamará diretamente a função vectorcall
     armazenada em 'callable'.

     Retorna o resultado da chamada em sucesso, ou levanta uma exceção e
     retorna 'NULL' em caso de falha.

     Adicionado na versão 3.8: as ‘_PyObject_Vectorcall’

     Alterado na versão 3.9: Renamed to the current name, without the
     leading underscore.  The old provisional name is *note soft
     deprecated: 209.

 -- C Função: *note PyObject: 339. *PyObject_VectorcallDict (PyObject
          *callable, PyObject *const *args, size_t nargsf, PyObject
          *kwdict)

     Chama 'callable' com argumentos posicionais passados exatamente
     como no protocolo *note vectorcall: 552, mas com argumentos
     nomeados passados como um dicionário 'kwdict'.  O array 'args'
     contém apenas os argumentos posicionais.

     Independentemente de qual protocolo é usado internamente, uma
     conversão de argumentos precisa ser feita.  Portanto, esta função
     só deve ser usada se o chamador já tiver um dicionário pronto para
     usar para os argumentos nomeados, mas não uma tupla para os
     argumentos posicionais.

     Adicionado na versão 3.9.

 -- C Função: *note PyObject: 339. *PyObject_VectorcallMethod (PyObject
          *name, PyObject *const *args, size_t nargsf, PyObject
          *kwnames)
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  Chama um
     método usando a convenção de chamada vectorcall.  O nome do método
     é dado como uma string Python 'name'.  O objeto cujo método é
     chamado é 'args[0]', e o array 'args' começando em 'args[1]'
     representa os argumentos da chamada.  Deve haver pelo menos um
     argumento posicional.  'nargsf' é o número de argumentos
     posicionais incluindo 'args[0]', mais *note
     PY_VECTORCALL_ARGUMENTS_OFFSET: 55e. se o valor de ‘args[0]’ puder
     ser alterado temporariamente.  Argumentos nomeados podem ser
     passados como em *note PyObject_Vectorcall(): 55c.

     Se o objeto tem o recurso *note Py_TPFLAGS_METHOD_DESCRIPTOR: 4dcf,
     isso irá chamar o objeto de método não vinculado com o vetor 'args'
     inteiro como argumentos.

     Retorna o resultado da chamada em sucesso, ou levanta uma exceção e
     retorna 'NULL' em caso de falha.

     Adicionado na versão 3.9.


File: python.info,  Node: API de suporte a chamadas,  Prev: API de chamada de objetos,  Up: Protocolo de chamada

7.7.2.6 API de suporte a chamadas
.................................

 -- C Função: int PyCallable_Check (PyObject *o)
     ' Parte da *note ABI Estável: 553.'  Determine se o objeto 'o' é
     chamável.  Devolva ‘1’ se o objeto é chamável e ‘0’ caso contrário.
     Esta função sempre tem êxito.


File: python.info,  Node: Protocolo de número,  Next: Protocolo de sequência,  Prev: Protocolo de chamada,  Up: Camada de Objetos Abstratos

7.7.3 Protocolo de número
-------------------------

 -- C Função: int PyNumber_Check (PyObject *o)
     ' Parte da *note ABI Estável: 553.'  Retorna ‘1’ se o objeto 'o'
     fornece protocolos numéricos; caso contrário, retorna falso.  Esta
     função sempre tem sucesso.

     Alterado na versão 3.8: Retorna ‘1’ se 'o' for um número inteiro de
     índice.

 -- C Função: *note PyObject: 339. *PyNumber_Add (PyObject *o1, PyObject
          *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna o resultado da adição de 'o1' e 'o2', ou ‘NULL’ em
     caso de falha.  Este é o equivalente da expressão Python ‘o1 + o2’.

 -- C Função: *note PyObject: 339. *PyNumber_Subtract (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna o resultado da subtração de 'o2' por 'o1', ou ‘NULL’
     em caso de falha.  Este é o equivalente da expressão Python ‘o1 -
     o2’.

 -- C Função: *note PyObject: 339. *PyNumber_Multiply (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna o resultado da multiplicação de 'o1' e 'o2', ou
     ‘NULL’ em caso de falha.  Este é o equivalente da expressão Python
     ‘o1 * o2’.

 -- C Função: *note PyObject: 339. *PyNumber_MatrixMultiply (PyObject
          *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.7.'  Retorna o resultado da multiplicação da
     matriz em 'o1' e 'o2', ou ‘NULL’ em caso de falha.  Este é o
     equivalente da expressão Python ‘o1 @ o2’.

     Adicionado na versão 3.5.

 -- C Função: *note PyObject: 339. *PyNumber_FloorDivide (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Return the floor of 'o1' divided by 'o2', or ‘NULL’ on
     failure.  This is the equivalent of the Python expression ‘o1 //
     o2’.

 -- C Função: *note PyObject: 339. *PyNumber_TrueDivide (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Return a reasonable approximation for the mathematical value
     of 'o1' divided by 'o2', or ‘NULL’ on failure.  The return value is
     “approximate” because binary floating-point numbers are
     approximate; it is not possible to represent all real numbers in
     base two.  This function can return a floating-point value when
     passed two integers.  This is the equivalent of the Python
     expression ‘o1 / o2’.

 -- C Função: *note PyObject: 339. *PyNumber_Remainder (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the remainder of dividing 'o1' by 'o2', or ‘NULL’ on
     failure.  This is the equivalent of the Python expression ‘o1 %
     o2’.

 -- C Função: *note PyObject: 339. *PyNumber_Divmod (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

     See the built-in function *note divmod(): 9a9.  Returns ‘NULL’ on
     failure.  This is the equivalent of the Python expression
     ‘divmod(o1, o2)’.

 -- C Função: *note PyObject: 339. *PyNumber_Power (PyObject *o1,
          PyObject *o2, PyObject *o3)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

     See the built-in function *note pow(): 9da.  Returns ‘NULL’ on
     failure.  This is the equivalent of the Python expression ‘pow(o1,
     o2, o3)’, where 'o3' is optional.  If 'o3' is to be ignored, pass
     *note Py_None: 4b48. in its place (passing ‘NULL’ for 'o3' would
     cause an illegal memory access).

 -- C Função: *note PyObject: 339. *PyNumber_Negative (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the negation of 'o' on success, or ‘NULL’ on
     failure.  This is the equivalent of the Python expression ‘-o’.

 -- C Função: *note PyObject: 339. *PyNumber_Positive (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns 'o' on success, or ‘NULL’ on failure.  This is the
     equivalent of the Python expression ‘+o’.

 -- C Função: *note PyObject: 339. *PyNumber_Absolute (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

     Returns the absolute value of 'o', or ‘NULL’ on failure.  This is
     the equivalent of the Python expression ‘abs(o)’.

 -- C Função: *note PyObject: 339. *PyNumber_Invert (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the bitwise negation of 'o' on success, or ‘NULL’ on
     failure.  This is the equivalent of the Python expression ‘~o’.

 -- C Função: *note PyObject: 339. *PyNumber_Lshift (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the result of left shifting 'o1' by 'o2' on success,
     or ‘NULL’ on failure.  This is the equivalent of the Python
     expression ‘o1 << o2’.

 -- C Função: *note PyObject: 339. *PyNumber_Rshift (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the result of right shifting 'o1' by 'o2' on
     success, or ‘NULL’ on failure.  This is the equivalent of the
     Python expression ‘o1 >> o2’.

 -- C Função: *note PyObject: 339. *PyNumber_And (PyObject *o1, PyObject
          *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the “bitwise and” of 'o1' and 'o2' on success and
     ‘NULL’ on failure.  This is the equivalent of the Python expression
     ‘o1 & o2’.

 -- C Função: *note PyObject: 339. *PyNumber_Xor (PyObject *o1, PyObject
          *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the “bitwise exclusive or” of 'o1' by 'o2' on
     success, or ‘NULL’ on failure.  This is the equivalent of the
     Python expression ‘o1 ^ o2’.

 -- C Função: *note PyObject: 339. *PyNumber_Or (PyObject *o1, PyObject
          *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the “bitwise or” of 'o1' and 'o2' on success, or
     ‘NULL’ on failure.  This is the equivalent of the Python expression
     ‘o1 | o2’.

 -- C Função: *note PyObject: 339. *PyNumber_InPlaceAdd (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the result of adding 'o1' and 'o2', or ‘NULL’ on
     failure.  The operation is done 'in-place' when 'o1' supports it.
     This is the equivalent of the Python statement ‘o1 += o2’.

 -- C Função: *note PyObject: 339. *PyNumber_InPlaceSubtract (PyObject
          *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the result of subtracting 'o2' from 'o1', or ‘NULL’
     on failure.  The operation is done 'in-place' when 'o1' supports
     it.  This is the equivalent of the Python statement ‘o1 -= o2’.

 -- C Função: *note PyObject: 339. *PyNumber_InPlaceMultiply (PyObject
          *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the result of multiplying 'o1' and 'o2', or ‘NULL’
     on failure.  The operation is done 'in-place' when 'o1' supports
     it.  This is the equivalent of the Python statement ‘o1 *= o2’.

 -- C Função: *note PyObject: 339. *PyNumber_InPlaceMatrixMultiply
          (PyObject *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.7.'  Returns the result of matrix
     multiplication on 'o1' and 'o2', or ‘NULL’ on failure.  The
     operation is done 'in-place' when 'o1' supports it.  This is the
     equivalent of the Python statement ‘o1 @= o2’.

     Adicionado na versão 3.5.

 -- C Função: *note PyObject: 339. *PyNumber_InPlaceFloorDivide
          (PyObject *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the mathematical floor of dividing 'o1' by 'o2', or
     ‘NULL’ on failure.  The operation is done 'in-place' when 'o1'
     supports it.  This is the equivalent of the Python statement ‘o1
     //= o2’.

 -- C Função: *note PyObject: 339. *PyNumber_InPlaceTrueDivide (PyObject
          *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Return a reasonable approximation for the mathematical value
     of 'o1' divided by 'o2', or ‘NULL’ on failure.  The return value is
     “approximate” because binary floating-point numbers are
     approximate; it is not possible to represent all real numbers in
     base two.  This function can return a floating-point value when
     passed two integers.  The operation is done 'in-place' when 'o1'
     supports it.  This is the equivalent of the Python statement ‘o1 /=
     o2’.

 -- C Função: *note PyObject: 339. *PyNumber_InPlaceRemainder (PyObject
          *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the remainder of dividing 'o1' by 'o2', or ‘NULL’ on
     failure.  The operation is done 'in-place' when 'o1' supports it.
     This is the equivalent of the Python statement ‘o1 %= o2’.

 -- C Função: *note PyObject: 339. *PyNumber_InPlacePower (PyObject *o1,
          PyObject *o2, PyObject *o3)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

     See the built-in function *note pow(): 9da.  Returns ‘NULL’ on
     failure.  The operation is done 'in-place' when 'o1' supports it.
     This is the equivalent of the Python statement ‘o1 **= o2’ when o3
     is *note Py_None: 4b48, or an in-place variant of ‘pow(o1, o2, o3)’
     otherwise.  If 'o3' is to be ignored, pass *note Py_None: 4b48. in
     its place (passing ‘NULL’ for 'o3' would cause an illegal memory
     access).

 -- C Função: *note PyObject: 339. *PyNumber_InPlaceLshift (PyObject
          *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the result of left shifting 'o1' by 'o2' on success,
     or ‘NULL’ on failure.  The operation is done 'in-place' when 'o1'
     supports it.  This is the equivalent of the Python statement ‘o1
     <<= o2’.

 -- C Função: *note PyObject: 339. *PyNumber_InPlaceRshift (PyObject
          *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the result of right shifting 'o1' by 'o2' on
     success, or ‘NULL’ on failure.  The operation is done 'in-place'
     when 'o1' supports it.  This is the equivalent of the Python
     statement ‘o1 >>= o2’.

 -- C Função: *note PyObject: 339. *PyNumber_InPlaceAnd (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the “bitwise and” of 'o1' and 'o2' on success and
     ‘NULL’ on failure.  The operation is done 'in-place' when 'o1'
     supports it.  This is the equivalent of the Python statement ‘o1 &=
     o2’.

 -- C Função: *note PyObject: 339. *PyNumber_InPlaceXor (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the “bitwise exclusive or” of 'o1' by 'o2' on
     success, or ‘NULL’ on failure.  The operation is done 'in-place'
     when 'o1' supports it.  This is the equivalent of the Python
     statement ‘o1 ^= o2’.

 -- C Função: *note PyObject: 339. *PyNumber_InPlaceOr (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the “bitwise or” of 'o1' and 'o2' on success, or
     ‘NULL’ on failure.  The operation is done 'in-place' when 'o1'
     supports it.  This is the equivalent of the Python statement ‘o1 |=
     o2’.

 -- C Função: *note PyObject: 339. *PyNumber_Long (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

     Returns the 'o' converted to an integer object on success, or
     ‘NULL’ on failure.  This is the equivalent of the Python expression
     ‘int(o)’.

 -- C Função: *note PyObject: 339. *PyNumber_Float (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

     Returns the 'o' converted to a float object on success, or ‘NULL’
     on failure.  This is the equivalent of the Python expression
     ‘float(o)’.

 -- C Função: *note PyObject: 339. *PyNumber_Index (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the 'o' converted to a Python int on success or
     ‘NULL’ with a *note TypeError: 2c3. exception raised on failure.

     Alterado na versão 3.10: O resultado sempre tem o tipo exato *note
     int: 257.  Anteriormente, o resultado poderia ter sido uma
     instância de uma subclasse de ‘int’.

 -- C Função: *note PyObject: 339. *PyNumber_ToBase (PyObject *n, int
          base)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Returns the integer 'n' converted to base 'base' as a
     string.  The 'base' argument must be one of 2, 8, 10, or 16.  For
     base 2, 8, or 16, the returned string is prefixed with a base
     marker of ‘'0b'’, ‘'0o'’, or ‘'0x'’, respectively.  If 'n' is not a
     Python int, it is converted with *note PyNumber_Index(): 897.
     first.

 -- C Função: *note Py_ssize_t: a69. PyNumber_AsSsize_t (PyObject *o,
          PyObject *exc)
     ' Parte da *note ABI Estável: 553.'  Returns 'o' converted to a
     *note Py_ssize_t: a69. value if 'o' can be interpreted as an
     integer.  If the call fails, an exception is raised and ‘-1’ is
     returned.

     If 'o' can be converted to a Python int but the attempt to convert
     to a *note Py_ssize_t: a69. value would raise an *note
     OverflowError: 885, then the 'exc' argument is the type of
     exception that will be raised (usually *note IndexError: 157e. or
     *note OverflowError: 885.).  If 'exc' is ‘NULL’, then the exception
     is cleared and the value is clipped to ‘PY_SSIZE_T_MIN’ for a
     negative integer or ‘PY_SSIZE_T_MAX’ for a positive integer.

 -- C Função: int PyIndex_Check (PyObject *o)
     ' Parte da *note ABI Estável: 553. desde a versão 3.8.'  Returns
     ‘1’ if 'o' is an index integer (has the ‘nb_index’ slot of the
     ‘tp_as_number’ structure filled in), and ‘0’ otherwise.  This
     function always succeeds.


File: python.info,  Node: Protocolo de sequência,  Next: Protocolo de mapeamento,  Prev: Protocolo de número,  Up: Camada de Objetos Abstratos

7.7.4 Protocolo de sequência
----------------------------

 -- C Função: int PySequence_Check (PyObject *o)
     ' Parte da *note ABI Estável: 553.'  Retorna ‘1’ se o objeto
     fornecer o protocolo de sequência e ‘0’ caso contrário.  Note que
     ele retorna ‘1’ para classes Python com um método *note
     __getitem__(): 283. a menos que sejam subclasses de *note dict:
     256. já que no caso geral é impossível determinar que tipo de
     chaves a classe provê.  Esta função sempre obtém sucesso.

 -- C Função: *note Py_ssize_t: a69. PySequence_Size (PyObject *o)
 -- C Função: *note Py_ssize_t: a69. PySequence_Length (PyObject *o)
     ' Parte da *note ABI Estável: 553.'

     Retorna o número de objetos na sequência 'o' em caso de sucesso, ou
     ‘-1’ em caso de falha.  Equivale à expressão Python ‘len(o)’.

 -- C Função: *note PyObject: 339. *PySequence_Concat (PyObject *o1,
          PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna a concatenação de 'o1' e 'o2' em caso de sucesso, e
     ‘NULL’ em caso de falha.  Equivale à expressão Python ‘o1 + o2’.

 -- C Função: *note PyObject: 339. *PySequence_Repeat (PyObject *o,
          Py_ssize_t count)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna o resultado da repetição do objeto sequência 'o'
     'count' vezes ou ‘NULL’ em caso de falha.  Equivale à expressão
     Python ‘o * count’.

 -- C Função: *note PyObject: 339. *PySequence_InPlaceConcat (PyObject
          *o1, PyObject *o2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna a concatenação de 'o1' e 'o2' em caso de sucesso, e
     ‘NULL’ em caso de falha.  A operação é feita 'localmente' se 'o1'
     permitir.  Equivale à expressão Python ‘o1 += o2’.

 -- C Função: *note PyObject: 339. *PySequence_InPlaceRepeat (PyObject
          *o, Py_ssize_t count)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna o resultado da repetição do objeto sequência 'o'
     'count' vezes ou ‘NULL’ em caso de falha.  A operação é feita
     'localmente' se 'o' permitir.  Equivale à expressão Python ‘o *=
     count’.

 -- C Função: *note PyObject: 339. *PySequence_GetItem (PyObject *o,
          Py_ssize_t i)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna o elemento 'i' de 'o' ou ‘NULL’ em caso de falha.
     Equivale à expressão Python ‘o[i]’.

 -- C Função: *note PyObject: 339. *PySequence_GetSlice (PyObject *o,
          Py_ssize_t i1, Py_ssize_t i2)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna a fatia do objeto sequência 'o' entre 'i1' e 'i2',
     ou ‘NULL’ em caso de falha.  Equivale à expressão Python
     ‘o[i1:i2]’.

 -- C Função: int PySequence_SetItem (PyObject *o, Py_ssize_t i,
          PyObject *v)
     ' Parte da *note ABI Estável: 553.'  Atribui o objeto 'v' ao
     elemento 'i' de 'o'.  Levanta uma exceção e retorna ‘-1’ em caso de
     falha; retorna ‘0’ em caso de sucesso.  Esta função 'não' rouba uma
     referência a 'v'.  Equivale à instrução Python ‘o[i]=v’.

     Se 'v' for ‘NULL’, o elemento será removido, mas este recurso foi
     descontinuado em favor do uso de *note PySequence_DelItem(): 1bcf.

 -- C Função: int PySequence_DelItem (PyObject *o, Py_ssize_t i)
     ' Parte da *note ABI Estável: 553.'  Exclui o elemento 'i' do
     objeto 'o'.  Retorna ‘-1’ em caso de falha.  Equivale à instrução
     Python ‘del o[i]’.

 -- C Função: int PySequence_SetSlice (PyObject *o, Py_ssize_t i1,
          Py_ssize_t i2, PyObject *v)
     ' Parte da *note ABI Estável: 553.'  Atribui o objeto sequência 'v'
     à fatia no objeto sequência 'o' de 'i1' a 'i2'.  Equivale à
     instrução Python ‘o[i1:i2] = v’.

 -- C Função: int PySequence_DelSlice (PyObject *o, Py_ssize_t i1,
          Py_ssize_t i2)
     ' Parte da *note ABI Estável: 553.'  Exclui a fatia no objeto
     sequência 'o' de 'i1' a 'i2'.  Retorna ‘-1’ em caso de falha.
     Equivale à instrução Python ‘del o[i1:i2]’.

 -- C Função: *note Py_ssize_t: a69. PySequence_Count (PyObject *o,
          PyObject *value)
     ' Parte da *note ABI Estável: 553.'  Retorna a quantidade de
     ocorrências de 'value' em 'o', isto é, retorna a quantidade de
     chaves onde ‘o[key] == value’.  Em caso de falha, retorna ‘-1’.
     Equivale à expressão Python ‘o.count(value)’.

 -- C Função: int PySequence_Contains (PyObject *o, PyObject *value)
     ' Parte da *note ABI Estável: 553.'  Determina se 'o' contém
     'value'.  Se um item em 'o' for igual a 'value', retorna ‘1’,
     senão, retorna ‘0’.  Em caso de erro, retorna ‘-1’.  Equivale à
     expressão Python ‘value in o’.

 -- C Função: *note Py_ssize_t: a69. PySequence_Index (PyObject *o,
          PyObject *value)
     ' Parte da *note ABI Estável: 553.'  Retorna o primeiro índice 'i'
     tal que ‘o[i] == value’.  Em caso de erro, retorna ‘-1’.  Equivale
     à expressão Python ‘o.index(value)’.

 -- C Função: *note PyObject: 339. *PySequence_List (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um objeto lista com o mesmo conteúdo da sequência ou
     iterável 'o', ou ‘NULL’ em caso de falha.  Garante-se que a lista
     retornada será nova.  Equivale à expressão Python ‘list(o)’.

 -- C Função: *note PyObject: 339. *PySequence_Tuple (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

     Retorna o objeto tupla com o mesmo conteúdo da sequência ou
     iterável 'o', ou ‘NULL’ em caso de falha.  Se 'o' for uma tupla,
     retorna uma nova referência.  Senão, uma tupla será construída com
     o conteúdo apropriado.  Equivale à expressão Python ‘tuple(o)’.

 -- C Função: *note PyObject: 339. *PySequence_Fast (PyObject *o, const
          char *m)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna a sequência ou iterável 'o' como um objeto usável
     por outras funções da família ‘PySequence_Fast*’.  Se o objeto não
     for uma sequência ou iterável, levanta *note TypeError: 2c3. com
     'm' sendo o texto da mensagem.  Retorna ‘NULL’ em caso de falha.

     As funções ‘PySequence_Fast*’ têm esse nome porque presumem que 'o'
     é um *note PyTupleObject: 4eac. ou um *note PyListObject: 4f30. e
     porque acessam os campos de dados de 'o' diretamente.

     Como detalhe de implementação de CPython, se 'o' já for uma
     sequência ou lista, ele será retornado.

 -- C Função: *note Py_ssize_t: a69. PySequence_Fast_GET_SIZE (PyObject
          *o)

     Retorna o comprimento de 'o', presumindo que 'o' foi retornado por
     *note PySequence_Fast(): 4d42. e que 'o' não seja ‘NULL’.  O
     tamanho também pode ser obtido ao chamar *note PySequence_Size():
     1bcc. em 'o', mas *note PySequence_Fast_GET_SIZE(): 4f31. é mais
     rápida, ao supor que 'o' é uma lista ou tupla.

 -- C Função: *note PyObject: 339. *PySequence_Fast_GET_ITEM (PyObject
          *o, Py_ssize_t i)
     'Retorna valor: Referência emprestada.'  Retorna o elemento 'i' de
     'o', presumindo que 'o' foi retornado por *note PySequence_Fast():
     4d42, que 'o' seja ‘NULL’, e que 'i' esteja nos limites.

 -- C Função: *note PyObject: 339. **PySequence_Fast_ITEMS (PyObject *o)

     Retorna o vetor subjacente de ponteiros PyObject.  Presume que 'o'
     foi retornado por *note PySequence_Fast(): 4d42. e que 'o' não seja
     ‘NULL’.

     Note que, se uma lista for redimensionada, a realocação poderá
     reposicionar o vetor de itens.  Portanto, só use o ponteiro de
     vetor subjacente em contextos onde a sequência não mudará.

 -- C Função: *note PyObject: 339. *PySequence_ITEM (PyObject *o,
          Py_ssize_t i)
     'Retorna valor: Nova referência.'  Retorna o elemento 'i' de 'o',
     ou ‘NULL’ em caso de falha.  É uma forma mais rápida de *note
     PySequence_GetItem(): 1bcd, mas sem verificar se *note
     PySequence_Check(): 4d3d. em 'o' é verdadeiro e sem ajustar índices
     negativos.


File: python.info,  Node: Protocolo de mapeamento,  Next: Protocolo Iterador,  Prev: Protocolo de sequência,  Up: Camada de Objetos Abstratos

7.7.5 Protocolo de mapeamento
-----------------------------

Veja também *note PyObject_GetItem(): 4be2, *note PyObject_SetItem():
4be0. e *note PyObject_DelItem(): 4d27.

 -- C Função: int PyMapping_Check (PyObject *o)
     ' Parte da *note ABI Estável: 553.'  Retorna ‘1’ se o objeto
     fornece protocolo de mapeamento ou suporta fatiamento e ‘0’ caso
     contrário.  Note que ele retorna ‘1’ para classes Python com um
     método *note __getitem__(): 283. visto que geralmente é impossível
     determinar a que tipo de chaves a classe tem suporte.  Esta função
     sempre tem sucesso.

 -- C Função: *note Py_ssize_t: a69. PyMapping_Size (PyObject *o)
 -- C Função: *note Py_ssize_t: a69. PyMapping_Length (PyObject *o)
     ' Parte da *note ABI Estável: 553.'

     Retorna o número de chaves no objeto 'o' em caso de sucesso e ‘-1’
     em caso de falha.  Isso é equivalente à expressão Python ‘len(o)’.

 -- C Função: *note PyObject: 339. *PyMapping_GetItemString (PyObject
          *o, const char *key)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  É o mesmo que *note PyObject_GetItem(): 4be2, mas 'key' é
     especificada como uma string de bytes const char* codificada em
     UTF-8, em vez de um *note PyObject: 339.*.

 -- C Função: int PyMapping_GetOptionalItem (PyObject *obj, PyObject
          *key, PyObject **result)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Variante
     de *note PyObject_GetItem(): 4be2. que não levanta *note KeyError:
     344. se a chave não for encontrada.

     Se a chave for encontrada, retorna ‘1’ e define '*result' como uma
     nova *note referência forte: 33d. para o valor correspondente.  Se
     a chave não for encontrada, retorna ‘0’ e define '*result' como
     ‘NULL’; o *note KeyError: 344. é silenciado.  Se um erro diferente
     de *note KeyError: 344. for levanta, retorna ‘-1’ e define
     '*result' como ‘NULL’.

     Adicionado na versão 3.13.

 -- C Função: int PyMapping_GetOptionalItemString (PyObject *obj, const
          char *key, PyObject **result)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  É o mesmo
     que *note PyMapping_GetOptionalItem(): 345, mas 'key' é
     especificado como uma string de bytes codificada em UTF-8 const
     char*, em vez de um *note PyObject: 339.*.

     Adicionado na versão 3.13.

 -- C Função: int PyMapping_SetItemString (PyObject *o, const char *key,
          PyObject *v)
     ' Parte da *note ABI Estável: 553.'  É o mesmo que *note
     PyObject_SetItem(): 4be0, mas 'key' é especificada como uma string
     de bytes const char* codificada em UTF-8, em vez de um *note
     PyObject: 339.*.

 -- C Função: int PyMapping_DelItem (PyObject *o, PyObject *key)

     Este é um apelido de *note PyObject_DelItem(): 4d27.

 -- C Função: int PyMapping_DelItemString (PyObject *o, const char *key)

     É o mesmo que *note PyObject_DelItem(): 4d27, mas 'key' é
     especificada como uma string de bytes const char* codificada em
     UTF-8, em vez de um *note PyObject: 339.*.

 -- C Função: int PyMapping_HasKeyWithError (PyObject *o, PyObject *key)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Retorna
     ‘1’ se o objeto de mapeamento tiver a chave 'key' e ‘0’ caso
     contrário.  Isso é equivalente à expressão Python ‘key in o’.  Em
     caso de falha, retorna ‘-1’.

     Adicionado na versão 3.13.

 -- C Função: int PyMapping_HasKeyStringWithError (PyObject *o, const
          char *key)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  É o mesmo
     que *note PyMapping_HasKeyWithError(): 37e, mas 'key' é
     especificada como uma string de bytes const char* codificada em
     UTF-8, em vez de um *note PyObject: 339.*.

     Adicionado na versão 3.13.

 -- C Função: int PyMapping_HasKey (PyObject *o, PyObject *key)
     ' Parte da *note ABI Estável: 553.'  Retorna ‘1’ se o objeto de
     mapeamento tiver a chave 'key' e ‘0’ caso contrário.  Isso é
     equivalente à expressão Python ‘key in o’.  Esta função sempre tem
     sucesso.

          Nota: As exceções que ocorrem quando este construtor chama o
          método *note __getitem__(): 283. são silenciosamente
          ignoradas.  Para o tratamento adequado de erros, use *note
          PyMapping_HasKeyWithError(): 37e, *note
          PyMapping_GetOptionalItem(): 345. ou *note PyObject_GetItem():
          4be2. em vez disso.

 -- C Função: int PyMapping_HasKeyString (PyObject *o, const char *key)
     ' Parte da *note ABI Estável: 553.'  É o mesmo que *note
     PyMapping_HasKey(): 37f, mas 'key' é especificada como uma string
     de bytes const char* codificada em UTF-8, em vez de um *note
     PyObject: 339.*.

          Nota: As exceções que ocorrem quando este construtor chama o
          método *note __getitem__(): 283. ou ao criar o objeto
          temporário *note str: 44c. são silenciosamente ignoradas.
          Para o tratamento adequado de erros, use *note
          PyMapping_HasKeyStringWithError(): 380, *note
          PyMapping_GetOptionalItemString(): 346. ou *note
          PyMapping_GetItemString(): 4cee. em vez disso.

 -- C Função: *note PyObject: 339. *PyMapping_Keys (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Em caso de sucesso, retorna uma lista das chaves no objeto
     'o'.  Em caso de falha, retorna ‘NULL’.

     Alterado na versão 3.7: Anteriormente, a função retornava uma lista
     ou tupla.

 -- C Função: *note PyObject: 339. *PyMapping_Values (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Em caso de sucesso, retorna uma lista dos valores no objeto
     'o'.  Em caso de falha, retorna ‘NULL’.

     Alterado na versão 3.7: Anteriormente, a função retornava uma lista
     ou tupla.

 -- C Função: *note PyObject: 339. *PyMapping_Items (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Em caso de sucesso, retorna uma lista dos itens no objeto
     'o', onde cada item é uma tupla contendo um par de valores-chave.
     Em caso de falha, retorna ‘NULL’.

     Alterado na versão 3.7: Anteriormente, a função retornava uma lista
     ou tupla.


File: python.info,  Node: Protocolo Iterador,  Next: Protocolo de buffer,  Prev: Protocolo de mapeamento,  Up: Camada de Objetos Abstratos

7.7.6 Protocolo Iterador
------------------------

Existem duas funções especificas para trabalhar com iteradores.

 -- C Função: int PyIter_Check (PyObject *o)
     ' Parte da *note ABI Estável: 553. desde a versão 3.8.'  Retorna
     valor diferente de zero se o objeto 'o' puder ser passado com
     segurança para *note PyIter_Next(): 4cd6, e ‘0’ caso contrário.
     Esta função sempre é bem-sucedida.

 -- C Função: int PyAIter_Check (PyObject *o)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Retorna
     valor diferente de zero se o objeto 'o' fornecer o protocolo
     ‘AsyncIterator’ e ‘0’ caso contrário.  Esta função sempre é
     bem-sucedida.

     Adicionado na versão 3.10.

 -- C Função: *note PyObject: 339. *PyIter_Next (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna o próximo valor do iterador 'o'.  O objeto deve ser
     um iterador de acordo com *note PyIter_Check(): 1a3e. (cabe ao
     chamador verificar isso).  Se não houver valores restantes, retorna
     ‘NULL’ sem nenhuma exceção definida.  Se ocorrer um erro ao
     recuperar o item, retorna ‘NULL’ e passa a exceção.

Para escrever um laço que itere sobre um iterador, o código C deve ser
algo como isto:

     PyObject *iterator = PyObject_GetIter(obj);
     PyObject *item;

     if (iterator == NULL) {
         /* propaga o erro */
     }

     while ((item = PyIter_Next(iterator))) {
         /* faz algo com o item */
         ...
         /* liberar a referência quando concluído */
         Py_DECREF(item);
     }

     Py_DECREF(iterator);

     if (PyErr_Occurred()) {
         /* propaga o erro */
     }
     else {
         /* continua fazendo algum trabalho útil */
     }

 -- C Tipo: type PySendResult

     O valor de enum usado para representar diferentes resultados de
     *note PyIter_Send(): 89c.

     Adicionado na versão 3.10.

 -- C Função: *note PySendResult: 4f3f. PyIter_Send (PyObject *iter,
          PyObject *arg, PyObject **presult)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Envia o
     valor 'arg' para o iterador 'iter'.  Retorna:

        - ‘PYGEN_RETURN’ se o iterador retornar.  O valor de retorno é
          retornado via 'presult'.

        - ‘PYGEN_NEXT’ se o iterador render.  O valor produzido é
          retornado via 'presult'.

        - ‘PYGEN_ERROR’ se o iterador tiver levantado uma exceção.
          'presult' é definido como ‘NULL’.

     Adicionado na versão 3.10.


File: python.info,  Node: Protocolo de buffer,  Prev: Protocolo Iterador,  Up: Camada de Objetos Abstratos

7.7.7 Protocolo de buffer
-------------------------

Certos objetos disponíveis no Python envolvem o acesso a um vetor ou
'buffer' de memória subjacente.  Esses objetos incluem as classes *note
bytes: 1c2. e *note bytearray: 2ea. embutidas, e alguns tipos de
extensão como *note array.array: 1a0.  As bibliotecas de terceiros podem
definir seus próprios tipos para fins especiais, como processamento de
imagem ou análise numérica.

Embora cada um desses tipos tenha sua própria semântica, eles
compartilham a característica comum de serem suportados por um buffer de
memória possivelmente grande.  É desejável, em algumas situações,
acessar esse buffer diretamente e sem cópia intermediária.

Python fornece essa facilidade no nível C e Python sob a forma de *note
protocolo de buffer: 2e8.  Este protocolo tem dois lados:

   - do lado do produtor, um tipo pode exportar uma “interface de
     buffer” que permite que objetos desse tipo exponham informações
     sobre o buffer subjacente.  Esta interface é descrita na seção
     *note Buffer Object Structures: 4f43.; para Python, consulte *note
     Emulando tipos buffer: 2152.

   - do lado do consumidor, vários meios estão disponíveis para obter o
     ponteiro para os dados subjacentes de um objeto (por exemplo, um
     parâmetro de método).  Para Python, consulte *note Emulando tipos
     buffer: 2152.

Objetos simples como *note bytes: 1c2. e *note bytearray: 2ea. expõem
seu buffer subjacente em uma forma orientada a byte.  Outras formas são
possíveis; por exemplo, os elementos expostos por uma *note array.array:
1a0. podem ser valores de vários bytes.

Um exemplo de interface de um consumidor de buffer é o método *note
write(): cfc. de objetos arquivo: qualquer objeto que possa exportar uma
série de bytes por meio da interface de buffer pode ser gravado em um
arquivo.  Enquanto o ‘write()’ precisa apenas de acesso somente de
leitura ao conteúdo interno do objeto passado, outros métodos, como
*note readinto(): 2df6, precisam de acesso somente de escrita ao
conteúdo interno.  A interface de buffer permite que os objetos possam
permitir ou rejeitar a exportação para buffers de leitura e escrita ou
somente leitura.

Existem duas maneiras para um consumidor da interface de buffer adquirir
um buffer em um objeto alvo:

   * chamar *note PyObject_GetBuffer(): 399. com os parâmetros certos;

   * chamar *note PyArg_ParseTuple(): 571. (ou um dos seus irmãos) com
     um dos *note códigos de formatação: 8ad. ‘y*’, ‘w*’ ou ‘s*’.

Em ambos os casos, *note PyBuffer_Release(): 39a. deve ser chamado
quando o buffer não é mais necessário.  A falta de tal pode levar a
vários problemas, tais como vazamentos de recursos.

Adicionado na versão 3.12: O protocolo de buffer agora está acessível em
Python, veja *note Emulando tipos buffer: 2152. e *note memoryview: 2eb.

* Menu:

* Estrutura de Buffer::
* Tipos de solicitação do buffer::
* Vetores Complexos::
* Funções relacionadas ao Buffer::


File: python.info,  Node: Estrutura de Buffer,  Next: Tipos de solicitação do buffer,  Up: Protocolo de buffer

7.7.7.1 Estrutura de Buffer
...........................

As estruturas de buffer (ou simplesmente “buffers”) são úteis como uma
maneira de expor os dados binários de outro objeto para o programador
Python.  Eles também podem ser usados como um mecanismo de cópia
silenciosa.  Usando sua capacidade de fazer referência a um bloco de
memória, é possível expor facilmente qualquer dado ao programador
Python.  A memória pode ser uma matriz grande e constante em uma
extensão C, pode ser um bloco bruto de memória para manipulação antes de
passar para uma biblioteca do sistema operacional, ou pode ser usado
para transmitir dados estruturados no formato nativo e formato de
memória.

Ao contrário da maioria dos tipos de dados expostos pelo interpretador
Python, os buffers não são ponteiros *note PyObject: 339. mas sim
estruturas C simples.  Isso permite que eles sejam criados e copiados de
forma muito simples.  Quando um invólucro genérico em torno de um buffer
é necessário, um objeto *note memoryview: 4f46. pode ser criado.

Para obter instruções curtas sobre como escrever um objeto exportador,
consulte *note Buffer Object Structures: 4f43.  Para obter um buffer,
veja *note PyObject_GetBuffer(): 399.

 -- C Tipo: type Py_buffer
     ' Parte da *note ABI Estável: 553. (incluindo todos os membros)
     desde a versão 3.11.'
      -- C Membro: void *buf

          Um ponteiro para o início da estrutura lógica descrita pelos
          campos do buffer.  Este pode ser qualquer local dentro do
          bloco de memória física subjacente do exportador.  Por
          exemplo, com negativo *note strides: 4f48. o valor pode
          apontar para o final do bloco de memória.

          Para vetores *note contíguos: 23b9, o valor aponta para o
          início do bloco de memória.

      -- C Membro: *note PyObject: 339. *obj

          Uma nova referência ao objeto sendo exporta.  A referência
          pertence ao consumidor e é automaticamente liberada (por
          exemplo, a contagem de referências é decrementada) e é
          atribuída para ‘NULL’ por *note PyBuffer_Release(): 39a.  O
          campo equivale ao valor de retorno de qualquer função padrão
          da API C.

          Como um caso especial, para buffers 'temporários' que são
          encapsulados por *note PyMemoryView_FromBuffer(): 761. ou
          *note PyBuffer_FillInfo(): 760. esse campo é ‘NULL’.  Em
          geral, objetos exportadores NÃO DEVEM usar esse esquema.

      -- C Membro: *note Py_ssize_t: a69. len

          ‘product(shape) * itemsize’.  Para matrizes contíguas, este é
          o comprimento do bloco de memória subjacente.  Para matrizes
          não contíguas, é o comprimento que a estrutura lógica teria se
          fosse copiado para uma representação contígua.

          Acessando ‘((char *)buf)[0] up to ((char *)buf)[len-1]’ só é
          válido se o buffer tiver sido obtido por uma solicitação que
          garanta a contiguidade.  Na maioria dos casos, esse pedido
          será *note PyBUF_SIMPLE: 4c0a. ou *note PyBUF_WRITABLE: 13fc.

      -- C Membro: int readonly

          Um indicador de se o buffer é somente leitura.  Este campo é
          controlado pelo sinalizador *note PyBUF_WRITABLE: 13fc.

      -- C Membro: *note Py_ssize_t: a69. itemsize

          O tamanho do item em bytes de um único elemento.  O mesmo que
          o valor de *note struct.calcsize(): 1b3b. chamado em valores
          não ‘NULL’ de *note format: 4f4d.

          Exceção importante: Se um consumidor requisita um buffer sem
          sinalizador *note PyBUF_FORMAT: 4c02, *note format: 4f4d. será
          definido como ‘NULL’, mas *note itemsize: 4f4c. ainda terá seu
          valor para o formato original.

          Se *note shape: 4f4e. está presente, a igualdade
          ‘product(shape) * itemsize == len’ ainda é válida e o usuário
          pode usar *note itemsize: 4f4c. para navegar o buffer.

          Se *note shape: 4f4e. é ‘NULL’ como resultado de uma *note
          PyBUF_SIMPLE: 4c0a. ou uma requisição *note PyBUF_WRITABLE:
          13fc, o consumidor deve ignorar *note itemsize: 4f4c. e
          presumir ‘itemsize == 1’.

      -- C Membro: char *format

          Uma string terminada por 'NULL' no estilo de sintaxe de módulo
          *note struct: d5. descrevendo os conteúdos de um único item.
          Se isso é ‘NULL’, ‘"B"’ (unsigned bytes) é presumido.

          Este campo é controlado pelo sinalizador *note PyBUF_FORMAT:
          4c02.

      -- C Membro: int ndim

          O número de dimensões de memória representado como um array
          n-dimensional.  Se for ‘0’, *note buf: 4f47. aponta para um
          único elemento representando um escalar.  Neste caso, *note
          shape: 4f4e, *note strides: 4f48. e *note suboffsets: 4f50.
          DEVEM ser ‘NULL’.  O número máximo de dimensões é dado por
          *note PyBUF_MAX_NDIM: 4c06.

      -- C Membro: *note Py_ssize_t: a69. *shape

          Uma matriz de *note Py_ssize_t: a69. do comprimento *note
          ndim: 4f4f. indicando a forma da memória como uma matriz
          n-dimensional.  Observe que a forma ‘shape[0] * ... *
          shape[ndim-1] * itemsize’ DEVE ser igual a *note len: 4f4a.

          Os valores da forma são restritos a ‘shape[n] >= 0’.  The case
          ‘shape[n] == 0’ requer atenção especial.  Veja *note complex
          arrays: 4f51. para mais informações.

          A forma de acesso a matriz é de somente leitura para o
          usuário.

      -- C Membro: *note Py_ssize_t: a69. *strides

          Um vetor de *note Py_ssize_t: a69. de comprimento *note ndim:
          4f4f. dando o número de bytes para saltar para obter um novo
          elemento em cada dimensão.

          Os valores de Stride podem ser qualquer número inteiro.  Para
          arrays regulares, os passos são geralmente positivos, mas um
          consumidor DEVE ser capaz de lidar com o caso ‘strides[n] <=
          0’.  Veja *note complex arrays: 4f51. para mais informações.

          A matriz de passos é somente leitura para o consumidor.

      -- C Membro: *note Py_ssize_t: a69. *suboffsets

          Uma matriz de *note Py_ssize_t: a69. de comprimento *note
          ndim: 4f4f.  Se ‘suboffsets[n] >= 0’, os valores armazenados
          ao longo da n-ésima dimensão são ponteiros e o valor suboffset
          determina quantos bytes para adicionar a cada ponteiro após
          desreferenciar.  Um valor de suboffset que é negativo indica
          que não deve ocorrer desreferenciação (caminhando em um bloco
          de memória contíguo).

          Se todos os subconjuntos forem negativos (ou seja, não é
          necessário fazer referência), então este campo deve ser ‘NULL’
          (o valor padrão).

          Esse tipo de representação de matriz é usado pela Python
          Imaging Library (PIL). Veja *note complex arrays: 4f51. para
          obter mais informações sobre como acessar elementos dessa
          matriz.a matriz.

          A matriz de subconjuntos é somente leitura para o consumidor.

      -- C Membro: void *internal

          Isso é para uso interno pelo objeto exportador.  Por exemplo,
          isso pode ser re-moldado como um número inteiro pelo
          exportador e usado para armazenar bandeiras sobre se os
          conjuntos de forma, passos e suboffsets devem ou não ser
          liberados quando o buffer é liberado.  O consumidor NÃO DEVE
          alterar esse valor.

Constantes:

 -- C Macro: PyBUF_MAX_NDIM
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'  O número
     máximo de dimensões que a memória representa.  Exportadores DEVEM
     respeitar esse limite, consumidores de buffers multidimensionais
     DEVEM ser capazes de lidar com até ‘PyBUF_MAX_NDIM’ dimensões.
     Atualmente definido como 64.


File: python.info,  Node: Tipos de solicitação do buffer,  Next: Vetores Complexos,  Prev: Estrutura de Buffer,  Up: Protocolo de buffer

7.7.7.2 Tipos de solicitação do buffer
......................................

Os buffers geralmente são obtidos enviando uma solicitação de buffer
para um objeto exportador via *note PyObject_GetBuffer(): 399.  Uma vez
que a complexidade da estrutura lógica da memória pode variar
drasticamente, o consumidor usa o argumento 'flags' para especificar o
tipo de buffer exato que pode manipular.

Todos os campos *note Py_buffer: 758. são definidos de forma não-ambígua
pelo tipo de requisição.

* Menu:

* campos independentes do pedido::
* apenas em formato::
* forma, avanços, suboffsets: forma avanços suboffsets.
* requisições contíguas::
* requisições compostas::


File: python.info,  Node: campos independentes do pedido,  Next: apenas em formato,  Up: Tipos de solicitação do buffer

7.7.7.3 campos independentes do pedido
......................................

Os seguintes campos não são influenciados por 'flags' e devem sempre ser
preenchidos com os valores corretos: *note obj: 4f49, *note buf: 4f47,
*note len: 4f4a, *note itemsize: 4f4c, *note ndim: 4f4f.


File: python.info,  Node: apenas em formato,  Next: forma avanços suboffsets,  Prev: campos independentes do pedido,  Up: Tipos de solicitação do buffer

7.7.7.4 apenas em formato
.........................

      -- C Macro: PyBUF_WRITABLE
          ' Parte da *note ABI Estável: 553. desde a versão 3.11.'
          Controla o campo *note readonly: 4f4b. .  Se configurado, o
          exportador DEVE fornecer um buffer gravável ou então relatar
          falha.  Do contrário, o exportador PODE fornecer um buffer
          somente leitura ou um buffer gravável , mas a escolha DEVE ser
          consistente para todos os consumidores.  Por exemplo, *note
          PyBUF_SIMPLE: 4c0a. | *note PyBUF_WRITABLE: 13fc. pode ser
          usado para requisitar um buffer simples gravável.

      -- C Macro: PyBUF_WRITEABLE

          Este é um apelido *note suavemente descontinuado: 209. para
          *note PyBUF_WRITABLE: 13fc.

      -- C Macro: PyBUF_FORMAT
          ' Parte da *note ABI Estável: 553. desde a versão 3.11.'
          Controla o campo *note format: 4f4d.  Se configurado, este
          campo DEVE ser preenchido corretamente.  Caso contrário, este
          campo DEVE ser ‘NULL’.

:*note PyBUF_WRITABLE: 13fc. pode ser |’d para qualquer um dos
sinalizadores na próxima seção.  Uma vez que *note PyBUF_WRITABLE: 13fc.
é definido como 0, *note PyBUF_WRITABLE: 13fc. pode ser usado como uma
bandeira autônoma para solicitar um buffer simples gravável.

*note PyBUF_FORMAT: 4c02. deve ser |’d para qualquer um dos
sinalizadores exceto *note PyBUF_SIMPLE: 4c0a, uma vez que este já
indica que o formato ‘B’ (unsigned bytes).  ‘PyBUF_FORMAT’ não pode ser
utilizado sozinho.


File: python.info,  Node: forma avanços suboffsets,  Next: requisições contíguas,  Prev: apenas em formato,  Up: Tipos de solicitação do buffer

7.7.7.5 forma, avanços, suboffsets
..................................

As bandeiras que controlam a estrutura lógica da memória estão listadas
em ordem decrescente de complexidade.  Observe que cada bandeira contém
todos os bits das bandeiras abaixo.

Solicitação                       Forma       Avanços       subconjuntos
                                                            
-----------------------------------------------------------------------------
                                                            
 -- C Macro: PyBUF_INDIRECT       sim         sim           se necessário
     ' Parte da                                             
     *note ABI Estável: 553.
     desde a versão 3.11.'

 -- C Macro: PyBUF_STRIDES        sim         sim           NULL
     ' Parte da                                             
     *note ABI Estável: 553.
     desde a versão 3.11.'

 -- C Macro: PyBUF_ND             sim         NULL          NULL
     ' Parte da                                             
     *note ABI Estável: 553.
     desde a versão 3.11.'

 -- C Macro: PyBUF_SIMPLE         NULL        NULL          NULL
     ' Parte da                                             
     *note ABI Estável: 553.
     desde a versão 3.11.'


File: python.info,  Node: requisições contíguas,  Next: requisições compostas,  Prev: forma avanços suboffsets,  Up: Tipos de solicitação do buffer

7.7.7.6 requisições contíguas
.............................

*note contiguity: 23b9. do C ou Fortran podem ser explicitamente
solicitadas, com ou sem informação de avanço.  Sem informação de avanço,
o buffer deve ser C-contíguo.

Solicitação                             Forma       Avanços       subconjuntos     contig
                                                                                   
------------------------------------------------------------------------------------------------
                                                                                   
 -- C Macro: PyBUF_C_CONTIGUOUS         sim         sim           NULL             C
     ' Parte da                                                                    
     *note ABI Estável: 553. desde a
     versão 3.11.'

 -- C Macro: PyBUF_F_CONTIGUOUS         sim         sim           NULL             F
     ' Parte da                                                                    
     *note ABI Estável: 553. desde a
     versão 3.11.'

 -- C Macro: PyBUF_ANY_CONTIGUOUS       sim         sim           NULL             C ou F
     ' Parte da                                                                    
     *note ABI Estável: 553. desde a
     versão 3.11.'

*note PyBUF_ND: 4c07.                   sim         NULL          NULL             C
                                                                                   


File: python.info,  Node: requisições compostas,  Prev: requisições contíguas,  Up: Tipos de solicitação do buffer

7.7.7.7 requisições compostas
.............................

Todas as requisições possíveis foram completamente definidas por alguma
combinação dos sinalizadores na seção anterior.  Por conveniência, o
protocolo do buffer fornece combinações frequentemente utilizadas como
sinalizadores únicos.

Na seguinte tabela 'U' significa contiguidade indefinida.  O consumidor
deve chamar *note PyBuffer_IsContiguous(): 75e. para determinar a
contiguidade.

Solicitação                         Forma       Avanços       subconjuntos     contig       readonly       format
                                                                                                           
------------------------------------------------------------------------------------------------------------------------
                                                                                                           
 -- C Macro: PyBUF_FULL             sim         sim           se necessário    U            0              sim
     ' Parte da                                                                                            
     *note ABI Estável: 553.
     desde a versão 3.11.'

 -- C Macro: PyBUF_FULL_RO          sim         sim           se necessário    U            1 ou 0         sim
     ' Parte da                                                                                            
     *note ABI Estável: 553.
     desde a versão 3.11.'

 -- C Macro: PyBUF_RECORDS          sim         sim           NULL             U            0              sim
     ' Parte da                                                                                            
     *note ABI Estável: 553.
     desde a versão 3.11.'

 -- C Macro: PyBUF_RECORDS_RO       sim         sim           NULL             U            1 ou 0         sim
     ' Parte da                                                                                            
     *note ABI Estável: 553.
     desde a versão 3.11.'

 -- C Macro: PyBUF_STRIDED          sim         sim           NULL             U            0              NULL
     ' Parte da                                                                                            
     *note ABI Estável: 553.
     desde a versão 3.11.'

 -- C Macro: PyBUF_STRIDED_RO       sim         sim           NULL             U            1 ou 0         NULL
     ' Parte da                                                                                            
     *note ABI Estável: 553.
     desde a versão 3.11.'

 -- C Macro: PyBUF_CONTIG           sim         NULL          NULL             C            0              NULL
     ' Parte da                                                                                            
     *note ABI Estável: 553.
     desde a versão 3.11.'

 -- C Macro: PyBUF_CONTIG_RO        sim         NULL          NULL             C            1 ou 0         NULL
     ' Parte da                                                                                            
     *note ABI Estável: 553.
     desde a versão 3.11.'


File: python.info,  Node: Vetores Complexos,  Next: Funções relacionadas ao Buffer,  Prev: Tipos de solicitação do buffer,  Up: Protocolo de buffer

7.7.7.8 Vetores Complexos
.........................

* Menu:

* Estilo NumPy; forma e avanços: Estilo NumPy forma e avanços.
* Estilo-PIL; forma, avanços e suboffsets: Estilo-PIL forma avanços e suboffsets.


File: python.info,  Node: Estilo NumPy forma e avanços,  Next: Estilo-PIL forma avanços e suboffsets,  Up: Vetores Complexos

7.7.7.9 Estilo NumPy: forma e avanços
.....................................

A estrutura lógica de vetores do estilo NumPy é definida por *note
itemsize: 4f4c, *note ndim: 4f4f, *note shape: 4f4e. e *note strides:
4f48.

Se ‘ndim == 0’, a localização da memória apontada para *note buf: 4f47.
é interpretada como um escalar de tamanho *note itemsize: 4f4c.  Nesse
caso, ambos *note shape: 4f4e. e *note strides: 4f48. são ‘NULL’.

Se *note strides: 4f48. é ‘NULL’, o vetor é interpretado como um vetor C
n-dimensional padrão.  Caso contrário, o consumidor deve acessar um
vetor n-dimensional como a seguir:

     ptr = (char *)buf + indices[0] * strides[0] + ... + indices[n-1] * strides[n-1];
     item = *((typeof(item) *)ptr);

Como notado acima, *note buf: 4f47. pode apontar para qualquer
localização dentro do bloco de memória em si.  Um exportador pode
verificar a validade de um buffer com essa função:

     def verify_structure(memlen, itemsize, ndim, shape, strides, offset):
         """Verifica se os parâmetros representa um vetor válido dentro
            dos limites da memória alocada:
                char *mem: início do bloco de memória física
                memlen: comprimento do bloco de memória física
                offset: (char *)buf - mem
         """
         if offset % itemsize:
             return False
         if offset < 0 or offset+itemsize > memlen:
             return False
         if any(v % itemsize for v in strides):
             return False

         if ndim <= 0:
             return ndim == 0 and not shape and not strides
         if 0 in shape:
             return True

         imin = sum(strides[j]*(shape[j]-1) for j in range(ndim)
                    if strides[j] <= 0)
         imax = sum(strides[j]*(shape[j]-1) for j in range(ndim)
                    if strides[j] > 0)

         return 0 <= offset+imin and offset+imax+itemsize <= memlen


File: python.info,  Node: Estilo-PIL forma avanços e suboffsets,  Prev: Estilo NumPy forma e avanços,  Up: Vetores Complexos

7.7.7.10 Estilo-PIL: forma, avanços e suboffsets
................................................

Além dos itens normais, uma matriz em estilo PIL pode conter ponteiros
que devem ser seguidos para se obter o próximo elemento em uma dimensão.
Por exemplo, a matriz tridimensional em C ‘char v[2][2][3]’ também pode
ser vista como um vetor de 2 ponteiros para duas matrizes
bidimensionais: ‘char (*v[2])[2][3]’.  Na representação por suboffsets,
esses dois ponteiros podem ser embutidos no início de *note buf: 4f47,
apontando para duas matrizes ‘char x[2][3]’ que podem estar localizadas
em qualquer lugar na memória.

Esta é uma função que retorna um ponteiro para o elemento em uma matriz
N-D apontada por um índice N-dimensional onde existem ambos passos e
subconjuntos não-‘NULL’:

     void *get_item_pointer(int ndim, void *buf, Py_ssize_t *strides,
                            Py_ssize_t *suboffsets, Py_ssize_t *indices) {
         char *pointer = (char*)buf;
         int i;
         for (i = 0; i < ndim; i++) {
             pointer += strides[i] * indices[i];
             if (suboffsets[i] >=0 ) {
                 pointer = *((char**)pointer) + suboffsets[i];
             }
         }
         return (void*)pointer;
     }


File: python.info,  Node: Funções relacionadas ao Buffer,  Prev: Vetores Complexos,  Up: Protocolo de buffer

7.7.7.11 Funções relacionadas ao Buffer
.......................................

 -- C Função: int PyObject_CheckBuffer (PyObject *obj)
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'  Retorna
     ‘1’ se 'obj' oferece suporte à interface de buffer, se não, ‘0’.
     Quando ‘1’ é retornado, isso não garante que *note
     PyObject_GetBuffer(): 399. será bem sucedida.  Esta função é sempre
     bem sucedida.

 -- C Função: int PyObject_GetBuffer (PyObject *exporter, Py_buffer
          *view, int flags)
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'  Envia uma
     requisição ao 'exporter' para preencher a 'view' conforme
     especificado por 'flags'.  Se o exporter não conseguir prover um
     buffer do tipo especificado, ele DEVE levantar *note BufferError:
     15bd, definir ‘view->obj’ para ‘NULL’ e retornar ‘-1’.

     Em caso de sucesso, preenche 'view', define ‘view->obj’ para uma
     nova referência para 'exporter' e retorna 0.  No caso de provedores
     de buffer encadeados que redirecionam requisições para um único
     objeto, ‘view->obj’ DEVE se referir a este objeto em vez de
     'exporter' (Veja *note Buffer Object Structures: 4f43.).

     Chamadas bem sucedidas para *note PyObject_GetBuffer(): 399. devem
     ser emparelhadas a chamadas para *note PyBuffer_Release(): 39a,
     similar para ‘malloc()’ e ‘free()’.  Assim, após o consumidor
     terminar com o buffer, *note PyBuffer_Release(): 39a. deve ser
     chamado exatamente uma vez.

 -- C Função: void PyBuffer_Release (Py_buffer *view)
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'  Libera o
     buffer de 'view' e libera o *note strong reference: 33d. (por
     exemplo, decrementa o contador de referências) para o objeto de
     suporte da view, ‘view->obj’.  Esta função DEVE ser chamada quando
     o buffer não estiver mais sendo usado, ou o vazamento de
     referências pode acontecer.

     É um erro chamar essa função em um buffer que não foi obtido via
     *note PyObject_GetBuffer(): 399.

 -- C Função: *note Py_ssize_t: a69. PyBuffer_SizeFromFormat (const char
          *format)
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'  Retorna o
     *note itemsize: 4f4c. implícito de *note format: 4f4d.  Em erro,
     levantar e exceção e retornar -1.

     Adicionado na versão 3.9.

 -- C Função: int PyBuffer_IsContiguous (const Py_buffer *view, char
          order)
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'  Retorna
     ‘1’ se a memória definida pela 'view' é *note contígua: 23b9. no
     estilo C ('order' é ‘'C'’) ou no estilo Fortran ('order' é ‘'F'’)
     ou qualquer outra ('order' é ‘'A'’).  Retorna ‘0’ caso contrário.
     Essa função é sempre bem sucedida.

 -- C Função: void *PyBuffer_GetPointer (const Py_buffer *view, const
          Py_ssize_t *indices)
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'  Recebe a
     área de memória apontada pelos 'indices' dentro da 'view' dada.
     'indices' deve apontar para um array de ‘view->ndim’ índices.

 -- C Função: int PyBuffer_FromContiguous (const Py_buffer *view, const
          void *buf, Py_ssize_t len, char fort)
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'  Copia
     'len' bytes contíguos de 'buf' para 'view'.  'fort' pode ser ‘'C'’
     ou ‘'F'’ (para ordenação estilo C ou estilo Fortran).  Retorna ‘0’
     em caso de sucesso e ‘-1’ em caso de erro.

 -- C Função: int PyBuffer_ToContiguous (void *buf, const Py_buffer
          *src, Py_ssize_t len, char order)
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'  Copia
     'len' bytes de 'src' para sua representação contígua em 'buf'.
     'order' pode ser ‘'C'’ ou ‘'F'’ ou ‘'A'’ (para ordenação estilo C,
     Fortran ou qualquer uma).  O retorno é ‘0’ em caso de sucesso e
     ‘-1’ em caso de falha.

     Esta função falha se 'len' != 'src->len'.

 -- C Função: int PyObject_CopyData (PyObject *dest, PyObject *src)
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'  Copia os
     dados do buffer 'src' para o buffer 'dest'.  Pode converter entre
     buffers de estilo C e/ou estilo Fortran.

     ‘0’ é retornado em caso de sucesso, ‘-1’ em caso de erro.

 -- C Função: void PyBuffer_FillContiguousStrides (int ndims, Py_ssize_t
          *shape, Py_ssize_t *strides, int itemsize, char order)
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'  Preenche
     o array 'strides' com byte-strides de um array *note contíguo:
     23b9. (estilo C se 'order' é ‘'C'’ ou estilo Fortran se 'order' for
     ‘'F'’) da forma dada com o número dado de bytes por elemento.

 -- C Função: int PyBuffer_FillInfo (Py_buffer *view, PyObject
          *exporter, void *buf, Py_ssize_t len, int readonly, int flags)
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'  Manipula
     requisições de buffer para um exportador que quer expor 'buf' de
     tamanho 'len' com capacidade de escrita definida de acordo com
     'readonly'.  'buf' é interpretada como uma sequência de bytes sem
     sinal.

     O argumento 'flags' indica o tipo de requisição.  Esta função
     sempre preenche 'view' como especificado por 'flags', a não ser que
     'buf' seja designado como somente leitura e *note PyBUF_WRITABLE:
     13fc. esteja definido em 'flags'.

     Em caso de sucesso, defina ‘view->obj’ como um novo referência para
     'exporter' e retorna 0.  Caso contrário, levante *note BufferError:
     15bd. , defina ‘view->obj’ para ‘NULL’ e retorne ‘-1’ ;

     Se esta função é usada como parte de um *note getbufferproc: 4f43,
     'exporter' DEVE ser definida para o objeto de exportação e 'flags'
     deve ser passado sem modificações.  Caso contrário, 'exporter' DEVE
     ser ‘NULL’.


File: python.info,  Node: Camada de Objetos Concretos,  Next: Inicialização finalização e threads,  Prev: Camada de Objetos Abstratos,  Up: Manual de referência da API Python/C

7.8 Camada de Objetos Concretos
===============================

As funções neste capítulo são específicas para certos tipos de objetos
Python.  Passar para eles um objeto do tipo errado não é uma boa ideia;
se você receber um objeto de um programa Python e não tiver certeza de
que ele tem o tipo certo, primeiro execute uma verificação de tipo; por
exemplo, para verificar se um objeto é um dicionário, use *note
PyDict_Check(): 4f61.  O capítulo está estruturado como a “árvore
genealógica” dos tipos de objetos Python.

     Aviso: Enquanto as funções descritas neste capítulo verificam
     cuidadosamente o tipo de objetos passados, muitos deles não
     verificam a passagem de ‘NULL’ em vez de um objeto válido.
     Permitir a passagem de ‘NULL’ pode causar violações ao acesso à
     memória e encerramento imediato do interpretador.

* Menu:

* Objetos Fundamentais::
* Objetos Numéricos::
* Objetos Sequência::
* Coleções::
* Objetos Function: Objetos Function<2>.
* Outros Objetos::
* API C para módulos de extensão::


File: python.info,  Node: Objetos Fundamentais,  Next: Objetos Numéricos,  Up: Camada de Objetos Concretos

7.8.1 Objetos Fundamentais
--------------------------

Esta seção descreve os objetos de tipo Python e o objeto singleton
‘None’.

* Menu:

* Objetos tipo: Objetos tipo<2>.
* O Objeto None::


File: python.info,  Node: Objetos tipo<2>,  Next: O Objeto None,  Up: Objetos Fundamentais

7.8.1.1 Objetos tipo
....................

 -- C Tipo: type PyTypeObject
     ' Parte da *note API Limitada: 553. (como uma estrutura opaca).'  A
     estrutura C dos objetos usados para descrever tipos embutidos.

 -- C Variável: *note PyTypeObject: ab4. PyType_Type
     ' Parte da *note ABI Estável: 553.'  Este é o objeto de tipo para
     objetos tipo; é o mesmo objeto que *note type: d6b. na camada
     Python.

 -- C Função: int PyType_Check (PyObject *o)

     Retorna valor diferente de zero se o objeto 'o' for um objeto tipo,
     incluindo instâncias de tipos derivados do objeto tipo padrão.
     Retorna 0 em todos os outros casos.  Esta função sempre tem
     sucesso.

 -- C Função: int PyType_CheckExact (PyObject *o)

     Retorna valor diferente de zero se o objeto 'o' for um objeto tipo,
     mas não um subtipo do objeto tipo padrão.  Retorna 0 em todos os
     outros casos.  Esta função sempre tem sucesso.

 -- C Função: unsigned int PyType_ClearCache ()
     ' Parte da *note ABI Estável: 553.'  Limpa o cache de pesquisa
     interno.  Retorna a marcação de versão atual.

 -- C Função: unsigned long PyType_GetFlags (PyTypeObject *type)
     ' Parte da *note ABI Estável: 553.'  Return the *note tp_flags:
     19fd. member of 'type'.  This function is primarily meant for use
     with ‘Py_LIMITED_API’; the individual flag bits are guaranteed to
     be stable across Python releases, but access to *note tp_flags:
     19fd. itself is not part of the *note limited API: 396.

     Adicionado na versão 3.2.

     Alterado na versão 3.4: O tipo de retorno é agora um ‘unsigned
     long’ em vez de um ‘long’.

 -- C Função: *note PyObject: 339. *PyType_GetDict (PyTypeObject *type)

     Return the type object’s internal namespace, which is otherwise
     only exposed via a read-only proxy (*note cls.__dict__: c78.).
     This is a replacement for accessing *note tp_dict: 180e. directly.
     The returned dictionary must be treated as read-only.

     This function is meant for specific embedding and language-binding
     cases, where direct access to the dict is necessary and indirect
     access (e.g.  via the proxy or *note PyObject_GetAttr(): 347.)
     isn’t adequate.

     Extension modules should continue to use ‘tp_dict’, directly or
     indirectly, when setting up their own types.

     Adicionado na versão 3.12.

 -- C Função: void PyType_Modified (PyTypeObject *type)
     ' Parte da *note ABI Estável: 553.'  Invalida o cache de pesquisa
     interna para o tipo e todos os seus subtipos.  Esta função deve ser
     chamada após qualquer modificação manual dos atributos ou classes
     bases do tipo.

 -- C Função: int PyType_AddWatcher (PyType_WatchCallback callback)

     Register 'callback' as a type watcher.  Return a non-negative
     integer ID which must be passed to future calls to *note
     PyType_Watch(): 565.  In case of error (e.g.  no more watcher IDs
     available), return ‘-1’ and set an exception.

     In free-threaded builds, *note PyType_AddWatcher(): 564. is not
     thread-safe, so it must be called at start up (before spawning the
     first thread).

     Adicionado na versão 3.12.

 -- C Função: int PyType_ClearWatcher (int watcher_id)

     Clear watcher identified by 'watcher_id' (previously returned from
     *note PyType_AddWatcher(): 564.).  Return ‘0’ on success, ‘-1’ on
     error (e.g.  if 'watcher_id' was never registered.)

     An extension should never call ‘PyType_ClearWatcher’ with a
     'watcher_id' that was not returned to it by a previous call to
     *note PyType_AddWatcher(): 564.

     Adicionado na versão 3.12.

 -- C Função: int PyType_Watch (int watcher_id, PyObject *type)

     Mark 'type' as watched.  The callback granted 'watcher_id' by *note
     PyType_AddWatcher(): 564. will be called whenever *note
     PyType_Modified(): 1906. reports a change to 'type'.  (The callback
     may be called only once for a series of consecutive modifications
     to 'type', if ‘_PyType_Lookup()’ is not called on 'type' between
     the modifications; this is an implementation detail and subject to
     change.)

     An extension should never call ‘PyType_Watch’ with a 'watcher_id'
     that was not returned to it by a previous call to *note
     PyType_AddWatcher(): 564.

     Adicionado na versão 3.12.

 -- C Função: int PyType_Unwatch (int watcher_id, PyObject *type)

     Mark 'type' as not watched.  This undoes a previous call to *note
     PyType_Watch(): 565.  'type' must not be ‘NULL’.

     An extension should never call this function with a 'watcher_id'
     that was not returned to it by a previous call to *note
     PyType_AddWatcher(): 564.

     On success, this function returns ‘0’.  On failure, this function
     returns ‘-1’ with an exception set.

     Adicionado na versão 3.12.

 -- C Tipo: typedef int (*PyType_WatchCallback)(*note PyObject: 339.
          *type)

     Type of a type-watcher callback function.

     The callback must not modify 'type' or cause *note
     PyType_Modified(): 1906. to be called on 'type' or any type in its
     MRO; violating this rule could cause infinite recursion.

     Adicionado na versão 3.12.

 -- C Função: int PyType_HasFeature (PyTypeObject *o, int feature)

     Retorna valor diferente de zero se o objeto tipo 'o' define o
     recurso 'feature'.  Os recursos de tipo são denotados por
     sinalizadores de bit único.

 -- C Função: int PyType_FastSubclass (PyTypeObject *type, int flag)

     Return non-zero if the type object 'type' sets the subclass flag
     'flag'.  Subclass flags are denoted by *note Py_TPFLAGS_*_SUBCLASS:
     4f6b.  This function is used by many ‘_Check’ functions for common
     types.

     Ver também
     ..........

     *note PyObject_TypeCheck(): 1a41, which is used as a slower
     alternative in ‘_Check’ functions for types that don’t come with
     subclass flags.

 -- C Função: int PyType_IS_GC (PyTypeObject *o)

     Return true if the type object includes support for the cycle
     detector; this tests the type flag *note Py_TPFLAGS_HAVE_GC: 77d.

 -- C Função: int PyType_IsSubtype (PyTypeObject *a, PyTypeObject *b)
     ' Parte da *note ABI Estável: 553.'  Retorna verdadeiro se 'a' for
     um subtipo de 'b'.

     This function only checks for actual subtypes, which means that
     *note __subclasscheck__(): 2109. is not called on 'b'.  Call *note
     PyObject_IsSubclass(): ed6. to do the same check that *note
     issubclass(): 7c2. would do.

 -- C Função: *note PyObject: 339. *PyType_GenericAlloc (PyTypeObject
          *type, Py_ssize_t nitems)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Manipulador genérico para o slot *note tp_alloc: 4b7a. de um
     objeto tipo.  Use o mecanismo de alocação de memória padrão do
     Python para alocar uma nova instância e inicializar todo o seu
     conteúdo para ‘NULL’.

 -- C Função: *note PyObject: 339. *PyType_GenericNew (PyTypeObject
          *type, PyObject *args, PyObject *kwds)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Manipulador genérico para o slot *note tp_new: 57f. de um
     objeto tipo.  Cria uma nova instância usando o slot *note tp_alloc:
     4b7a. do tipo.

 -- C Função: int PyType_Ready (PyTypeObject *type)
     ' Parte da *note ABI Estável: 553.'  Finaliza um objeto tipo.  Isso
     deve ser chamado em todos os objetos tipo para finalizar sua
     inicialização.  Esta função é responsável por adicionar slots
     herdados da classe base de um tipo.  Retorna ‘0’ em caso de
     sucesso, ou retorna ‘-1’ e define uma exceção em caso de erro.

          Nota: If some of the base classes implements the GC protocol
          and the provided type does not include the *note
          Py_TPFLAGS_HAVE_GC: 77d. in its flags, then the GC protocol
          will be automatically implemented from its parents.  On the
          contrary, if the type being created does include *note
          Py_TPFLAGS_HAVE_GC: 77d. in its flags then it 'must' implement
          the GC protocol itself by at least implementing the *note
          tp_traverse: 77e. handle.

 -- C Função: *note PyObject: 339. *PyType_GetName (PyTypeObject *type)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.11.'  Retorna o nome do tipo.  Equivalente a
     pegar o atributo *note __name__: 14f3. do tipo.

     Adicionado na versão 3.11.

 -- C Função: *note PyObject: 339. *PyType_GetQualName (PyTypeObject
          *type)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.11.'  Retorna o nome qualificado do tipo.
     Equivalente a pegar o atributo *note __qualname__: 20b6. do tipo.

     Adicionado na versão 3.11.

 -- C Função: *note PyObject: 339. *PyType_GetFullyQualifiedName
          (PyTypeObject *type)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Retorna o
     nome qualificado do tipo.  Equivalente à
     ‘f"{type.__module__}.{type.__qualname__}"’, ou *note
     type.__qualname__: 20b6. se *note type.__module__: 374. não é uma
     string ou é igual a ‘"builtins"’.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 339. *PyType_GetModuleName (PyTypeObject
          *type)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Retorna o
     nome do tipo do módulo.  Equivalente a pegar o atributo *note
     type.__module__: 374.

     Adicionado na versão 3.13.

 -- C Função: void *PyType_GetSlot (PyTypeObject *type, int slot)
     ' Parte da *note ABI Estável: 553. desde a versão 3.4.'  Retorna o
     ponteiro de função armazenado no slot fornecido.  Se o resultado
     for ‘NULL’, isso indica que o slot é ‘NULL’ ou que a função foi
     chamada com parâmetros inválidos.  Os chamadores normalmente
     lançarão o ponteiro do resultado no tipo de função apropriado.

     Veja *note PyType_Slot.slot: 4f6d. por possíveis valores do
     argumento 'slot'.

     Adicionado na versão 3.4.

     Alterado na versão 3.10: *note PyType_GetSlot(): 8a0. agora aceita
     todos os tipos.  Antes, estava limitada a *note tipos heap: 96c.

 -- C Função: *note PyObject: 339. *PyType_GetModule (PyTypeObject
          *type)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Retorna o
     objeto de módulo associado ao tipo fornecido quando o tipo foi
     criado usando *note PyType_FromModuleAndSpec(): 551.

     Se nenhum módulo estiver associado com o tipo fornecido, define
     *note TypeError: 2c3. e retorna ‘NULL’.

     This function is usually used to get the module in which a method
     is defined.  Note that in such a method,
     ‘PyType_GetModule(Py_TYPE(self))’ may not return the intended
     result.  ‘Py_TYPE(self)’ may be a 'subclass' of the intended class,
     and subclasses are not necessarily defined in the same module as
     their superclass.  See *note PyCMethod: 764. to get the class that
     defines the method.  See *note PyType_GetModuleByDef(): 394. for
     cases when ‘PyCMethod’ cannot be used.

     Adicionado na versão 3.9.

 -- C Função: void *PyType_GetModuleState (PyTypeObject *type)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Return
     the state of the module object associated with the given type.
     This is a shortcut for calling *note PyModule_GetState(): 987. on
     the result of *note PyType_GetModule(): 975.

     Se nenhum módulo estiver associado com o tipo fornecido, define
     *note TypeError: 2c3. e retorna ‘NULL’.

     Se o 'tipo' tem um módulo associado mas o seu estado é ‘NULL’,
     retorna ‘NULL’ sem definir uma exceção.

     Adicionado na versão 3.9.

 -- C Função: *note PyObject: 339. *PyType_GetModuleByDef (PyTypeObject
          *type, struct PyModuleDef *def)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553. desde a versão 3.13.'  Encontra a primeira
     super-classe da qual o módulo foi criado por *note PyModuleDef:
     984. 'def', e retorna esse módulo.

     Se nenhum módulo é encontrado, levanta um *note TypeError: 2c3. e
     retorna ‘NULL’.

     This function is intended to be used together with *note
     PyModule_GetState(): 987. to get module state from slot methods
     (such as *note tp_init: 581. or *note nb_add: 4f6e.) and other
     places where a method’s defining class cannot be passed using the
     *note PyCMethod: 764. calling convention.

     The returned reference is *note borrowed: 33e. from 'type', and
     will be valid as long as you hold a reference to 'type'.  Do not
     release it with *note Py_DECREF(): 56f. or similar.

     Adicionado na versão 3.11.

 -- C Função: int PyUnstable_Type_AssignVersionTag (PyTypeObject *type)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Attempt to assign a version tag to the given type.

     Returns 1 if the type already had a valid version tag or a new one
     was assigned, or 0 if a new tag could not be assigned.

     Adicionado na versão 3.12.

 -- C Função: int PyType_SUPPORTS_WEAKREFS (PyTypeObject *type)

     Return true if instances of 'type' support creating weak
     references, false otherwise.  This function always succeeds.
     'type' must not be ‘NULL’.

     Ver também
     ..........

        * *note Objetos referência fraca: 4f71.

        * *note weakref: 114.

* Menu:

* Creating Heap-Allocated Types::


File: python.info,  Node: Creating Heap-Allocated Types,  Up: Objetos tipo<2>

7.8.1.2 Creating Heap-Allocated Types
.....................................

The following functions and structs are used to create *note heap types:
96c.

 -- C Função: *note PyObject: 339. *PyType_FromMetaclass (PyTypeObject
          *metaclass, PyObject *module, PyType_Spec *spec, PyObject
          *bases)
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  Create
     and return a *note heap type: 96c. from the 'spec' (see *note
     Py_TPFLAGS_HEAPTYPE: 8b4.).

     The metaclass 'metaclass' is used to construct the resulting type
     object.  When 'metaclass' is ‘NULL’, the metaclass is derived from
     'bases' (or 'Py_tp_base[s]' slots if 'bases' is ‘NULL’, see below).

     Metaclasses that override *note tp_new: 57f. are not supported,
     except if ‘tp_new’ is ‘NULL’.  (For backwards compatibility, other
     ‘PyType_From*’ functions allow such metaclasses.  They ignore
     ‘tp_new’, which may result in incomplete initialization.  This is
     deprecated and in Python 3.14+ such metaclasses will not be
     supported.)

     The 'bases' argument can be used to specify base classes; it can
     either be only one class or a tuple of classes.  If 'bases' is
     ‘NULL’, the 'Py_tp_bases' slot is used instead.  If that also is
     ‘NULL’, the 'Py_tp_base' slot is used instead.  If that also is
     ‘NULL’, the new type derives from *note object: a96.

     The 'module' argument can be used to record the module in which the
     new class is defined.  It must be a module object or ‘NULL’.  If
     not ‘NULL’, the module is associated with the new type and can
     later be retrieved with *note PyType_GetModule(): 975.  The
     associated module is not inherited by subclasses; it must be
     specified for each class individually.

     This function calls *note PyType_Ready(): 77c. on the new type.

     Note that this function does 'not' fully match the behavior of
     calling *note type(): d6b. or using the *note class: 131a.
     statement.  With user-provided base types or metaclasses, prefer
     *note calling: 4f1c. *note type: d6b. (or the metaclass) over
     ‘PyType_From*’ functions.  Specifically:

        * *note __new__(): 580. is not called on the new class (and it
          must be set to ‘type.__new__’).

        * *note __init__(): 6b0. is not called on the new class.

        * *note __init_subclass__(): 631. is not called on any bases.

        * *note __set_name__(): c69. is not called on new descriptors.

     Adicionado na versão 3.12.

 -- C Função: *note PyObject: 339. *PyType_FromModuleAndSpec (PyObject
          *module, PyType_Spec *spec, PyObject *bases)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.10.'  Equivalent to
     ‘PyType_FromMetaclass(NULL, module, spec, bases)’.

     Adicionado na versão 3.9.

     Alterado na versão 3.10: The function now accepts a single class as
     the 'bases' argument and ‘NULL’ as the ‘tp_doc’ slot.

     Alterado na versão 3.12: The function now finds and uses a
     metaclass corresponding to the provided base classes.  Previously,
     only *note type: d6b. instances were returned.

     The *note tp_new: 57f. of the metaclass is 'ignored'.  which may
     result in incomplete initialization.  Creating classes whose
     metaclass overrides *note tp_new: 57f. is deprecated and in Python
     3.14+ it will be no longer allowed.

 -- C Função: *note PyObject: 339. *PyType_FromSpecWithBases
          (PyType_Spec *spec, PyObject *bases)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.3.'  Equivalent to
     ‘PyType_FromMetaclass(NULL, NULL, spec, bases)’.

     Adicionado na versão 3.3.

     Alterado na versão 3.12: The function now finds and uses a
     metaclass corresponding to the provided base classes.  Previously,
     only *note type: d6b. instances were returned.

     The *note tp_new: 57f. of the metaclass is 'ignored'.  which may
     result in incomplete initialization.  Creating classes whose
     metaclass overrides *note tp_new: 57f. is deprecated and in Python
     3.14+ it will be no longer allowed.

 -- C Função: *note PyObject: 339. *PyType_FromSpec (PyType_Spec *spec)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Equivalent to ‘PyType_FromMetaclass(NULL, NULL, spec,
     NULL)’.

     Alterado na versão 3.12: The function now finds and uses a
     metaclass corresponding to the base classes provided in
     'Py_tp_base[s]' slots.  Previously, only *note type: d6b. instances
     were returned.

     The *note tp_new: 57f. of the metaclass is 'ignored'.  which may
     result in incomplete initialization.  Creating classes whose
     metaclass overrides *note tp_new: 57f. is deprecated and in Python
     3.14+ it will be no longer allowed.

 -- C Tipo: type PyType_Spec
     ' Parte da *note ABI Estável: 553. (incluindo todos os membros).'
     Structure defining a type’s behavior.

      -- C Membro: const char *name

          Name of the type, used to set *note PyTypeObject.tp_name:
          1a3c.

      -- C Membro: int basicsize

          If positive, specifies the size of the instance in bytes.  It
          is used to set *note PyTypeObject.tp_basicsize: 98e.

          If zero, specifies that *note tp_basicsize: 98e. should be
          inherited.

          If negative, the absolute value specifies how much space
          instances of the class need 'in addition' to the superclass.
          Use *note PyObject_GetTypeData(): 549. to get a pointer to
          subclass-specific memory reserved this way.  For negative
          ‘basicsize’, Python will insert padding when needed to meet
          *note tp_basicsize: 98e.’s alignment requirements.

          Alterado na versão 3.12: Previously, this field could not be
          negative.

      -- C Membro: int itemsize

          Size of one element of a variable-size type, in bytes.  Used
          to set *note PyTypeObject.tp_itemsize: 20fd.  See
          ‘tp_itemsize’ documentation for caveats.

          If zero, *note tp_itemsize: 20fd. is inherited.  Extending
          arbitrary variable-sized classes is dangerous, since some
          types use a fixed offset for variable-sized memory, which can
          then overlap fixed-sized memory used by a subclass.  To help
          prevent mistakes, inheriting ‘itemsize’ is only possible in
          the following situations:

             - The base is not variable-sized (its *note tp_itemsize:
               20fd.).

             - The requested *note PyType_Spec.basicsize: 548. is
               positive, suggesting that the memory layout of the base
               class is known.

             - The requested *note PyType_Spec.basicsize: 548. is zero,
               suggesting that the subclass does not access the
               instance’s memory directly.

             - With the *note Py_TPFLAGS_ITEMS_AT_END: 54b. flag.

      -- C Membro: unsigned int flags

          Type flags, used to set *note PyTypeObject.tp_flags: 19fd.

          If the ‘Py_TPFLAGS_HEAPTYPE’ flag is not set, *note
          PyType_FromSpecWithBases(): 57e. sets it automatically.

      -- C Membro: *note PyType_Slot: 4d7b. *slots

          Array of *note PyType_Slot: 4d7b. structures.  Terminated by
          the special slot value ‘{0, NULL}’.

          Each slot ID should be specified at most once.

 -- C Tipo: type PyType_Slot
     ' Parte da *note ABI Estável: 553. (incluindo todos os membros).'
     Structure defining optional functionality of a type, containing a
     slot ID and a value pointer.

      -- C Membro: int slot

          A slot ID.

          Slot IDs are named like the field names of the structures
          *note PyTypeObject: ab4, *note PyNumberMethods: 1465, *note
          PySequenceMethods: 4b9d, *note PyMappingMethods: 4b9e. and
          *note PyAsyncMethods: 4f77. with an added ‘Py_’ prefix.  For
          example, use:

             * ‘Py_tp_dealloc’ to set *note PyTypeObject.tp_dealloc:
               4b66.

             * ‘Py_nb_add’ to set *note PyNumberMethods.nb_add: 4f6e.

             * ‘Py_sq_length’ to set *note PySequenceMethods.sq_length:
               4f78.

          The following “offset” fields cannot be set using *note
          PyType_Slot: 4d7b.:

             * *note tp_weaklistoffset: 98f. (use *note
               Py_TPFLAGS_MANAGED_WEAKREF: 55a. instead if possible)

             * *note tp_dictoffset: 4f79. (use *note
               Py_TPFLAGS_MANAGED_DICT: 36b. instead if possible)

             * *note tp_vectorcall_offset: 4f1e. (use
               ‘"__vectorcalloffset__"’ in *note PyMemberDef: 4f7a.)

          If it is not possible to switch to a ‘MANAGED’ flag (for
          example, for vectorcall or to support Python older than 3.12),
          specify the offset in *note Py_tp_members: 4b7b.  See *note
          PyMemberDef documentation: 4f7a. for details.

          The following fields cannot be set at all when creating a heap
          type:

             * *note tp_vectorcall: 4f7b. (use *note tp_new: 57f. and/or
               *note tp_init: 581.)

             * Internal fields: *note tp_dict: 180e, *note tp_mro: 4f7c,
               *note tp_cache: 4f7d, *note tp_subclasses: 572, and *note
               tp_weaklist: 4f7e.

          Setting *note Py_tp_bases: 4e19. or *note Py_tp_base: 4e18.
          may be problematic on some platforms.  To avoid issues, use
          the 'bases' argument of *note PyType_FromSpecWithBases(): 57e.
          instead.

          Alterado na versão 3.9: Slots in *note PyBufferProcs: 4f7f.
          may be set in the unlimited API.

          Alterado na versão 3.11: *note bf_getbuffer: 762. and *note
          bf_releasebuffer: 763. are now available under the *note
          limited API: 396.

      -- C Membro: void *pfunc

          The desired value of the slot.  In most cases, this is a
          pointer to a function.

          Slots other than ‘Py_tp_doc’ may not be ‘NULL’.


File: python.info,  Node: O Objeto None,  Prev: Objetos tipo<2>,  Up: Objetos Fundamentais

7.8.1.3 O Objeto ‘None’
.......................

Observe que o *note PyTypeObject: ab4. para ‘None’ não está diretamente
exposto pela API Python/C. Como ‘None’ é um singleton, é suficiente
testar a identidade do objeto (usando ‘==’ em C). Não há nenhuma função
‘PyNone_Check()’ pela mesma razão.

 -- C Variável: *note PyObject: 339. *Py_None

     O objeto Python ‘None’, denotando falta de valor.  Este objeto não
     tem métodos e é *note imortal: 45bb.

     Alterado na versão 3.12: *note Py_None: 4b48. é *note imortal:
     45bb.

 -- C Macro: Py_RETURN_NONE

     Retorna *note Py_None: 4b48. de uma função.


File: python.info,  Node: Objetos Numéricos,  Next: Objetos Sequência,  Prev: Objetos Fundamentais,  Up: Camada de Objetos Concretos

7.8.2 Objetos Numéricos
-----------------------

* Menu:

* Objetos Inteiros::
* Objetos Booleanos::
* Objetos de ponto flutuante::
* Objetos números complexos::


File: python.info,  Node: Objetos Inteiros,  Next: Objetos Booleanos,  Up: Objetos Numéricos

7.8.2.1 Objetos Inteiros
........................

Todos os inteiros são implementados como objetos inteiros “longos” de
tamanho arbitrário.

Em caso de erro, a maioria das APIs ‘PyLong_As*’ retorna ‘(tipo de
retorno)-1’ que não pode ser distinguido de um número.  Use *note
PyErr_Occurred(): 1a3b. para desambiguar.

 -- C Tipo: type PyLongObject
     ' Parte da *note API Limitada: 553. (como uma estrutura opaca).'
     Este subtipo de *note PyObject: 339. representa um objeto inteiro
     Python.

 -- C Variável: *note PyTypeObject: ab4. PyLong_Type
     ' Parte da *note ABI Estável: 553.'  Esta instância de *note
     PyTypeObject: ab4. representa o tipo inteiro Python.  Este é o
     mesmo objeto que *note int: 257. na camada Python.

 -- C Função: int PyLong_Check (PyObject *p)

     Retorna true se seu argumento é um *note PyLongObject: 588. ou um
     subtipo de *note PyLongObject: 588.  Esta função sempre tem
     sucesso.

 -- C Função: int PyLong_CheckExact (PyObject *p)

     Retorna true se seu argumento é um *note PyLongObject: 588, mas não
     um subtipo de *note PyLongObject: 588.  Esta função sempre tem
     sucesso.

 -- C Função: *note PyObject: 339. *PyLong_FromLong (long v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo objeto *note PyLongObject: 588. de 'v' ou
     ‘NULL’ em caso de falha.

     'Detalhes da implementação do CPython:' CPython keeps an array of
     integer objects for all integers between ‘-5’ and ‘256’.  When you
     create an int in that range you actually just get back a reference
     to the existing object.

 -- C Função: *note PyObject: 339. *PyLong_FromUnsignedLong (unsigned
          long v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo objeto *note PyLongObject: 588. de um
     unsigned long C ou ‘NULL’ em caso de falha.

 -- C Função: *note PyObject: 339. *PyLong_FromSsize_t (Py_ssize_t v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo objeto *note PyLongObject: 588. de um *note
     Py_ssize_t: a69. C ou ‘NULL’ em caso de falha.

 -- C Função: *note PyObject: 339. *PyLong_FromSize_t (size_t v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo objeto *note PyLongObject: 588. de um
     ‘size_t’ C ou ‘NULL’ em caso de falha.

 -- C Função: *note PyObject: 339. *PyLong_FromLongLong (long long v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo objeto *note PyLongObject: 588. de um long
     long C ou ‘NULL’ em caso de falha.

 -- C Função: *note PyObject: 339. *PyLong_FromUnsignedLongLong
          (unsigned long long v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo objeto *note PyLongObject: 588. de um
     unsigned long long C ou ‘NULL’ em caso de falha.

 -- C Função: *note PyObject: 339. *PyLong_FromDouble (double v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo objeto *note PyLongObject: 588. da parte
     inteira de 'v' ou ‘NULL’ em caso de falha.

 -- C Função: *note PyObject: 339. *PyLong_FromString (const char *str,
          char **pend, int base)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo *note PyLongObject: 588. com base no valor
     da string em 'str', que é interpretado de acordo com a raiz em
     'base' ou ‘NULL’ em caso de falha.  Se 'pend' não for ‘NULL’,
     '*pend' apontará para o fim do 'str' em caso de sucesso ou para seu
     primeiro caractere que não pode ser processado em caso de erro.  Se
     'base' for ‘0’, 'str' é interpretado usando a definição de *note
     Inteiros literais: 2055.; neste caso, zeros à esquerda em um número
     decimal diferente de zero aumenta um *note ValueError: 202.  Se
     'base' não for ‘0’, deve estar entre ‘2’ e ‘36’, inclusive.
     Espaços em branco no início ou no final e sublinhados simples após
     um especificador de base e entre dígitos são ignorados.  Se não
     houver dígitos ou 'str' não for terminado em NULL após os dígitos e
     espaços em branco à direita, *note ValueError: 202. será levantada.

     Ver também
     ..........

     Python methods *note int.to_bytes(): 19bd. and *note
     int.from_bytes(): 1972. to convert a *note PyLongObject: 588.
     to/from an array of bytes in base ‘256’.  You can call those from C
     using *note PyObject_CallMethod(): 39f.

 -- C Função: *note PyObject: 339. *PyLong_FromUnicodeObject (PyObject
          *u, int base)
     'Retorna valor: Nova referência.'  Converte uma sequência de
     dígitos Unicode na string 'u' para um valor inteiro Python.

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 339. *PyLong_FromVoidPtr (void *p)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Cria um inteiro Python a partir do ponteiro 'p'.  O valor do
     ponteiro pode ser recuperado do valor resultante usando *note
     PyLong_AsVoidPtr(): 4ce6.

 -- C Função: *note PyObject: 339. *PyLong_FromNativeBytes (const void
          *buffer, size_t n_bytes, int flags)

     Create a Python integer from the value contained in the first
     'n_bytes' of 'buffer', interpreted as a two’s-complement signed
     number.

     'flags' are as for *note PyLong_AsNativeBytes(): 361.  Passing ‘-1’
     will select the native endian that CPython was compiled with and
     assume that the most-significant bit is a sign bit.  Passing
     ‘Py_ASNATIVEBYTES_UNSIGNED_BUFFER’ will produce the same result as
     calling *note PyLong_FromUnsignedNativeBytes(): 363.  Other flags
     are ignored.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 339. *PyLong_FromUnsignedNativeBytes
          (const void *buffer, size_t n_bytes, int flags)

     Create a Python integer from the value contained in the first
     'n_bytes' of 'buffer', interpreted as an unsigned number.

     'flags' are as for *note PyLong_AsNativeBytes(): 361.  Passing ‘-1’
     will select the native endian that CPython was compiled with and
     assume that the most-significant bit is not a sign bit.  Flags
     other than endian are ignored.

     Adicionado na versão 3.13.

 -- C Macro: PyLong_FromPid (pid)

     Macro for creating a Python integer from a process identifier.

     This can be defined as an alias to *note PyLong_FromLong(): 195a.
     or *note PyLong_FromLongLong(): 195b, depending on the size of the
     system’s PID type.

     Adicionado na versão 3.2.

 -- C Função: long PyLong_AsLong (PyObject *obj)
     ' Parte da *note ABI Estável: 553.'

     Return a C long representation of 'obj'.  If 'obj' is not an
     instance of *note PyLongObject: 588, first call its *note
     __index__(): 71d. method (if present) to convert it to a *note
     PyLongObject: 588.

     Raise *note OverflowError: 885. if the value of 'obj' is out of
     range for a long.

     Retorna ‘-1’ no caso de erro.  Use *note PyErr_Occurred(): 1a3b.
     para desambiguar.

     Alterado na versão 3.8: Usa *note __index__(): 71d, se disponível.

     Alterado na versão 3.10: This function will no longer use *note
     __int__(): 71c.

      -- C Função: long PyLong_AS_LONG (PyObject *obj)

          A *note soft deprecated: 209. alias.  Exactly equivalent to
          the preferred ‘PyLong_AsLong’.  In particular, it can fail
          with *note OverflowError: 885. or another exception.

          Descontinuado desde a versão 3.14: The function is soft
          deprecated.

 -- C Função: int PyLong_AsInt (PyObject *obj)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Similar
     to *note PyLong_AsLong(): 360, but store the result in a C int
     instead of a C long.

     Adicionado na versão 3.13.

 -- C Função: long PyLong_AsLongAndOverflow (PyObject *obj, int
          *overflow)
     ' Parte da *note ABI Estável: 553.'  Return a C long representation
     of 'obj'.  If 'obj' is not an instance of *note PyLongObject: 588,
     first call its *note __index__(): 71d. method (if present) to
     convert it to a *note PyLongObject: 588.

     If the value of 'obj' is greater than ‘LONG_MAX’ or less than
     ‘LONG_MIN’, set '*overflow' to ‘1’ or ‘-1’, respectively, and
     return ‘-1’; otherwise, set '*overflow' to ‘0’.  If any other
     exception occurs set '*overflow' to ‘0’ and return ‘-1’ as usual.

     Retorna ‘-1’ no caso de erro.  Use *note PyErr_Occurred(): 1a3b.
     para desambiguar.

     Alterado na versão 3.8: Usa *note __index__(): 71d, se disponível.

     Alterado na versão 3.10: This function will no longer use *note
     __int__(): 71c.

 -- C Função: long long PyLong_AsLongLong (PyObject *obj)
     ' Parte da *note ABI Estável: 553.'

     Return a C long long representation of 'obj'.  If 'obj' is not an
     instance of *note PyLongObject: 588, first call its *note
     __index__(): 71d. method (if present) to convert it to a *note
     PyLongObject: 588.

     Raise *note OverflowError: 885. if the value of 'obj' is out of
     range for a long long.

     Retorna ‘-1’ no caso de erro.  Use *note PyErr_Occurred(): 1a3b.
     para desambiguar.

     Alterado na versão 3.8: Usa *note __index__(): 71d, se disponível.

     Alterado na versão 3.10: This function will no longer use *note
     __int__(): 71c.

 -- C Função: long long PyLong_AsLongLongAndOverflow (PyObject *obj, int
          *overflow)
     ' Parte da *note ABI Estável: 553.'  Return a C long long
     representation of 'obj'.  If 'obj' is not an instance of *note
     PyLongObject: 588, first call its *note __index__(): 71d. method
     (if present) to convert it to a *note PyLongObject: 588.

     If the value of 'obj' is greater than ‘LLONG_MAX’ or less than
     ‘LLONG_MIN’, set '*overflow' to ‘1’ or ‘-1’, respectively, and
     return ‘-1’; otherwise, set '*overflow' to ‘0’.  If any other
     exception occurs set '*overflow' to ‘0’ and return ‘-1’ as usual.

     Retorna ‘-1’ no caso de erro.  Use *note PyErr_Occurred(): 1a3b.
     para desambiguar.

     Adicionado na versão 3.2.

     Alterado na versão 3.8: Usa *note __index__(): 71d, se disponível.

     Alterado na versão 3.10: This function will no longer use *note
     __int__(): 71c.

 -- C Função: *note Py_ssize_t: a69. PyLong_AsSsize_t (PyObject *pylong)
     ' Parte da *note ABI Estável: 553.'

     Retorna uma representação de *note Py_ssize_t: a69. C de 'pylong'.
     'pylong' deve ser uma instância de *note PyLongObject: 588.

     Levanta *note OverflowError: 885. se o valor de 'pylong' estiver
     fora do intervalo de um *note Py_ssize_t: a69.

     Retorna ‘-1’ no caso de erro.  Use *note PyErr_Occurred(): 1a3b.
     para desambiguar.

 -- C Função: unsigned long PyLong_AsUnsignedLong (PyObject *pylong)
     ' Parte da *note ABI Estável: 553.'

     Return a C unsigned long representation of 'pylong'.  'pylong' must
     be an instance of *note PyLongObject: 588.

     Raise *note OverflowError: 885. if the value of 'pylong' is out of
     range for a unsigned long.

     Retorna ‘(unsigned long)-1’ no caso de erro.  Use *note
     PyErr_Occurred(): 1a3b. para desambiguar.

 -- C Função: size_t PyLong_AsSize_t (PyObject *pylong)
     ' Parte da *note ABI Estável: 553.'

     Retorna uma representação de ‘size_t’ C de 'pylong'.  'pylong' deve
     ser uma instância de *note PyLongObject: 588.

     Levanta *note OverflowError: 885. se o valor de 'pylong' estiver
     fora do intervalo de um ‘size_t’.

     Retorna ‘(size)-1’ no caso de erro.  Use *note PyErr_Occurred():
     1a3b. para desambiguar.

 -- C Função: unsigned long long PyLong_AsUnsignedLongLong (PyObject
          *pylong)
     ' Parte da *note ABI Estável: 553.'

     Return a C unsigned long long representation of 'pylong'.  'pylong'
     must be an instance of *note PyLongObject: 588.

     Raise *note OverflowError: 885. if the value of 'pylong' is out of
     range for an unsigned long long.

     Retorna ‘(unsigned long long)-1’ no caso de erro.  Use *note
     PyErr_Occurred(): 1a3b. para desambiguar.

     Alterado na versão 3.1: Um 'pylong' negativo agora levanta *note
     OverflowError: 885, não *note TypeError: 2c3.

 -- C Função: unsigned long PyLong_AsUnsignedLongMask (PyObject *obj)
     ' Parte da *note ABI Estável: 553.'  Return a C unsigned long
     representation of 'obj'.  If 'obj' is not an instance of *note
     PyLongObject: 588, first call its *note __index__(): 71d. method
     (if present) to convert it to a *note PyLongObject: 588.

     If the value of 'obj' is out of range for an unsigned long, return
     the reduction of that value modulo ‘ULONG_MAX + 1’.

     Retorna ‘(unsigned long)-1’ no caso de erro.  Use *note
     PyErr_Occurred(): 1a3b. para desambiguar.

     Alterado na versão 3.8: Usa *note __index__(): 71d, se disponível.

     Alterado na versão 3.10: This function will no longer use *note
     __int__(): 71c.

 -- C Função: unsigned long long PyLong_AsUnsignedLongLongMask (PyObject
          *obj)
     ' Parte da *note ABI Estável: 553.'  Return a C unsigned long long
     representation of 'obj'.  If 'obj' is not an instance of *note
     PyLongObject: 588, first call its *note __index__(): 71d. method
     (if present) to convert it to a *note PyLongObject: 588.

     If the value of 'obj' is out of range for an unsigned long long,
     return the reduction of that value modulo ‘ULLONG_MAX + 1’.

     Retorna ‘(unsigned long long)-1’ no caso de erro.  Use *note
     PyErr_Occurred(): 1a3b. para desambiguar.

     Alterado na versão 3.8: Usa *note __index__(): 71d, se disponível.

     Alterado na versão 3.10: This function will no longer use *note
     __int__(): 71c.

 -- C Função: double PyLong_AsDouble (PyObject *pylong)
     ' Parte da *note ABI Estável: 553.'  Return a C double
     representation of 'pylong'.  'pylong' must be an instance of *note
     PyLongObject: 588.

     Raise *note OverflowError: 885. if the value of 'pylong' is out of
     range for a double.

     Retorna ‘-1.0’ no caso de erro.  Use *note PyErr_Occurred(): 1a3b.
     para desambiguar.

 -- C Função: void *PyLong_AsVoidPtr (PyObject *pylong)
     ' Parte da *note ABI Estável: 553.'  Convert a Python integer
     'pylong' to a C void pointer.  If 'pylong' cannot be converted, an
     *note OverflowError: 885. will be raised.  This is only assured to
     produce a usable void pointer for values created with *note
     PyLong_FromVoidPtr(): 4ce9.

     Retorna ‘NULL’ no caso de erro.  Use *note PyErr_Occurred(): 1a3b.
     para desambiguar.

 -- C Macro: PyLong_AsPid (pid)

     Macro for converting a Python integer into a process identifier.

     This can be defined as an alias to *note PyLong_AsLong(): 360,
     *note PyLong_FromLongLong(): 195b, or *note PyLong_AsInt(): 35f,
     depending on the size of the system’s PID type.

     Adicionado na versão 3.2.

 -- C Função: *note Py_ssize_t: a69. PyLong_AsNativeBytes (PyObject
          *pylong, void *buffer, Py_ssize_t n_bytes, int flags)

     Copy the Python integer value 'pylong' to a native 'buffer' of size
     'n_bytes'.  The 'flags' can be set to ‘-1’ to behave similarly to a
     C cast, or to values documented below to control the behavior.

     Returns ‘-1’ with an exception raised on error.  This may happen if
     'pylong' cannot be interpreted as an integer, or if 'pylong' was
     negative and the ‘Py_ASNATIVEBYTES_REJECT_NEGATIVE’ flag was set.

     Otherwise, returns the number of bytes required to store the value.
     If this is equal to or less than 'n_bytes', the entire value was
     copied.  All 'n_bytes' of the buffer are written: remaining bytes
     filled by copies of the sign bit.

     If the returned value is greater than 'n_bytes', the value was
     truncated: as many of the lowest bits of the value as could fit are
     written, and the higher bits are ignored.  This matches the typical
     behavior of a C-style downcast.

          Nota: Overflow is not considered an error.  If the returned
          value is larger than 'n_bytes', most significant bits were
          discarded.

     ‘0’ will never be returned.

     Values are always copied as two’s-complement.

     Usage example:

          int32_t value;
          Py_ssize_t bytes = PyLong_AsNativeBytes(pylong, &value, sizeof(value), -1);
          if (bytes < 0) {
              // Failed. A Python exception was set with the reason.
              return NULL;
          }
          else if (bytes <= (Py_ssize_t)sizeof(value)) {
              // Success!
          }
          else {
              // Overflow occurred, but 'value' contains the truncated
              // lowest bits of pylong.
          }

     Passing zero to 'n_bytes' will return the size of a buffer that
     would be large enough to hold the value.  This may be larger than
     technically necessary, but not unreasonably so.  If 'n_bytes=0',
     'buffer' may be ‘NULL’.

          Nota: Passing 'n_bytes=0' to this function is not an accurate
          way to determine the bit length of the value.

     To get at the entire Python value of an unknown size, the function
     can be called twice: first to determine the buffer size, then to
     fill it:

          // Ask how much space we need.
          Py_ssize_t expected = PyLong_AsNativeBytes(pylong, NULL, 0, -1);
          if (expected < 0) {
              // Failed. A Python exception was set with the reason.
              return NULL;
          }
          assert(expected != 0);  // Impossible per the API definition.
          uint8_t *bignum = malloc(expected);
          if (!bignum) {
              PyErr_SetString(PyExc_MemoryError, "bignum malloc failed.");
              return NULL;
          }
          // Safely get the entire value.
          Py_ssize_t bytes = PyLong_AsNativeBytes(pylong, bignum, expected, -1);
          if (bytes < 0) {  // Exception has been set.
              free(bignum);
              return NULL;
          }
          else if (bytes > expected) {  // This should not be possible.
              PyErr_SetString(PyExc_RuntimeError,
                  "Unexpected bignum truncation after a size check.");
              free(bignum);
              return NULL;
          }
          // The expected success given the above pre-check.
          // ... use bignum ...
          free(bignum);

     'flags' is either ‘-1’ (‘Py_ASNATIVEBYTES_DEFAULTS’) to select
     defaults that behave most like a C cast, or a combination of the
     other flags in the table below.  Note that ‘-1’ cannot be combined
     with other flags.

     Currently, ‘-1’ corresponds to ‘Py_ASNATIVEBYTES_NATIVE_ENDIAN |
     Py_ASNATIVEBYTES_UNSIGNED_BUFFER’.

     Sinalizador                                       Valor
                                                       
     -------------------------------------------------------------
                                                       
      -- C Macro: Py_ASNATIVEBYTES_DEFAULTS            ‘-1’
                                                       
                                                       
      -- C Macro: Py_ASNATIVEBYTES_BIG_ENDIAN          ‘0’
                                                       
                                                       
      -- C Macro: Py_ASNATIVEBYTES_LITTLE_ENDIAN       ‘1’
                                                       
                                                       
      -- C Macro: Py_ASNATIVEBYTES_NATIVE_ENDIAN       ‘3’
                                                       
                                                       
      -- C Macro: Py_ASNATIVEBYTES_UNSIGNED_BUFFER     ‘4’
                                                       
                                                       
      -- C Macro: Py_ASNATIVEBYTES_REJECT_NEGATIVE     ‘8’
                                                       
                                                       
      -- C Macro: Py_ASNATIVEBYTES_ALLOW_INDEX         ‘16’
                                                       

     Specifying ‘Py_ASNATIVEBYTES_NATIVE_ENDIAN’ will override any other
     endian flags.  Passing ‘2’ is reserved.

     By default, sufficient buffer will be requested to include a sign
     bit.  For example, when converting 128 with 'n_bytes=1', the
     function will return 2 (or more) in order to store a zero sign bit.

     If ‘Py_ASNATIVEBYTES_UNSIGNED_BUFFER’ is specified, a zero sign bit
     will be omitted from size calculations.  This allows, for example,
     128 to fit in a single-byte buffer.  If the destination buffer is
     later treated as signed, a positive input value may become
     negative.  Note that the flag does not affect handling of negative
     values: for those, space for a sign bit is always requested.

     Specifying ‘Py_ASNATIVEBYTES_REJECT_NEGATIVE’ causes an exception
     to be set if 'pylong' is negative.  Without this flag, negative
     values will be copied provided there is enough space for at least
     one sign bit, regardless of whether
     ‘Py_ASNATIVEBYTES_UNSIGNED_BUFFER’ was specified.

     If ‘Py_ASNATIVEBYTES_ALLOW_INDEX’ is specified and a non-integer
     value is passed, its *note __index__(): 71d. method will be called
     first.  This may result in Python code executing and other threads
     being allowed to run, which could cause changes to other objects or
     values in use.  When 'flags' is ‘-1’, this option is not set, and
     non-integer values will raise *note TypeError: 2c3.

          Nota: With the default 'flags' (‘-1’, or 'UNSIGNED_BUFFER'
          without 'REJECT_NEGATIVE'), multiple Python integers can map
          to a single value without overflow.  For example, both ‘255’
          and ‘-1’ fit a single-byte buffer and set all its bits.  This
          matches typical C cast behavior.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 339. *PyLong_GetInfo (void)
     ' Parte da *note ABI Estável: 553.'  On success, return a read only
     *note named tuple: 64e, that holds information about Python’s
     internal representation of integers.  See *note sys.int_info: 12d5.
     for description of individual fields.

     Em caso de falha, retorna ‘NULL’ com uma exceção definida.

     Adicionado na versão 3.1.

 -- C Função: int PyUnstable_Long_IsCompact (const PyLongObject *op)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Return 1 if 'op' is compact, 0 otherwise.

     This function makes it possible for performance-critical code to
     implement a “fast path” for small integers.  For compact values use
     *note PyUnstable_Long_CompactValue(): 58a.; for others fall back to
     a *note PyLong_As*: 4ce2. function or *note PyLong_AsNativeBytes():
     361.

     The speedup is expected to be negligible for most users.

     Exactly what values are considered compact is an implementation
     detail and is subject to change.

     Adicionado na versão 3.12.

 -- C Função: *note Py_ssize_t: a69. PyUnstable_Long_CompactValue (const
          PyLongObject *op)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     If 'op' is compact, as determined by *note
     PyUnstable_Long_IsCompact(): 589, return its value.

     Otherwise, the return value is undefined.

     Adicionado na versão 3.12.


File: python.info,  Node: Objetos Booleanos,  Next: Objetos de ponto flutuante,  Prev: Objetos Inteiros,  Up: Objetos Numéricos

7.8.2.2 Objetos Booleanos
.........................

Os booleanos no Python são implementados como um subclasse de inteiros.
Há apenas dois booleanos, *note Py_False: 4f99. e *note Py_True: 4f9a.
Assim sendo, as funções de criação e a exclusão normais não se aplicam
aos booleanos.  No entanto, as seguintes macros estão disponíveis.

 -- C Variável: *note PyTypeObject: ab4. PyBool_Type
     ' Parte da *note ABI Estável: 553.'  Este instância de *note
     PyTypeObject: ab4. representa o tipo booleano em Python; é o mesmo
     objeto que *note bool: 468. na camada Python.

 -- C Função: int PyBool_Check (PyObject *o)

     Retorna verdadeiro se 'o' for do tipo *note PyBool_Type: 4c10.
     Esta função sempre tem sucesso.

 -- C Variável: *note PyObject: 339. *Py_False

     O objeto Python ‘False’.  Este objeto não tem métodos e é *note
     imortal: 45bb.

     Alterado na versão 3.12: *note Py_False: 4f99. é *note imortal:
     45bb.

 -- C Variável: *note PyObject: 339. *Py_True

     O objeto Python ‘True’.  Este objeto não tem métodos e é *note
     imortal: 45bb.

     Alterado na versão 3.12: *note Py_True: 4f9a. é *note imortal:
     45bb.

 -- C Macro: Py_RETURN_FALSE

     Retorna *note Py_False: 4f99. de uma função.

 -- C Macro: Py_RETURN_TRUE

     Retorna *note Py_True: 4f9a. de uma função.

 -- C Função: *note PyObject: 339. *PyBool_FromLong (long v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna *note Py_True: 4f9a. ou *note Py_False: 4f99,
     dependendo do valor verdade de 'v'.


File: python.info,  Node: Objetos de ponto flutuante,  Next: Objetos números complexos,  Prev: Objetos Booleanos,  Up: Objetos Numéricos

7.8.2.3 Objetos de ponto flutuante
..................................

 -- C Tipo: type PyFloatObject

     Este subtipo de *note PyObject: 339. representa um objeto de ponto
     flutuante do Python.

 -- C Variável: *note PyTypeObject: ab4. PyFloat_Type
     ' Parte da *note ABI Estável: 553.'  Esta instância do *note
     PyTypeObject: ab4. representa o tipo de ponto flutuante do Python.
     Este é o mesmo objeto *note float: 2f7. na camada do Python.

 -- C Função: int PyFloat_Check (PyObject *p)

     Retorna true se seu argumento é um *note PyFloatObject: 4fa0. ou um
     subtipo de *note PyFloatObject: 4fa0.  Esta função sempre tem
     sucesso.

 -- C Função: int PyFloat_CheckExact (PyObject *p)

     Retorna true se seu argumento é um *note PyFloatObject: 4fa0, mas
     um subtipo de *note PyFloatObject: 4fa0.  Esta função sempre tem
     sucesso.

 -- C Função: *note PyObject: 339. *PyFloat_FromString (PyObject *str)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Cria um objeto *note PyFloatObject: 4fa0. baseado em uma
     string de valor “str” ou ‘NULL’ em falha.

 -- C Função: *note PyObject: 339. *PyFloat_FromDouble (double v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Cria um objeto *note PyFloatObject: 4fa0. de 'v' ou ‘NULL’
     em falha.

 -- C Função: double PyFloat_AsDouble (PyObject *pyfloat)
     ' Parte da *note ABI Estável: 553.'  Retorna uma representação C
     double do conteúdo de 'pyfloat'.  Se 'pyfloat' não é um objeto de
     ponto flutuante do Python, mas possui o método *note __float__():
     9d4, esse método será chamado primeiro para converter 'pyfloat' em
     um ponto flutuante.  Se ‘__float__()’ não estiver definido, será
     usado ‘__index__()’.  Este método retorna ‘-1.0’ em caso de falha,
     portanto, deve-se chamar *note PyErr_Occurred(): 1a3b. para
     verificar se há erros.

     Alterado na versão 3.8: Usa *note __index__(): 71d, se disponível.

 -- C Função: double PyFloat_AS_DOUBLE (PyObject *pyfloat)

     Retorna uma representação C double do conteúdo de 'pyfloat', mas
     sem verificação de erro.

 -- C Função: *note PyObject: 339. *PyFloat_GetInfo (void)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna uma instância de structseq que contém informações
     sobre a precisão, os valores mínimo e máximo de um ponto flutuante.
     É um invólucro fino em torno do arquivo de cabeçalho ‘float.h’.

 -- C Função: double PyFloat_GetMax ()
     ' Parte da *note ABI Estável: 553.'  Retorna o ponto flutuante
     finito máximo representável 'DBL_MAX' como double do C.

 -- C Função: double PyFloat_GetMin ()
     ' Parte da *note ABI Estável: 553.'  Retorna o ponto flutuante
     positivo mínimo normalizado 'DBL_MIN' como double do C.

 -- C Macro: Py_INFINITY

     Esta macro expande uma expressão constante do tipo double, que
     representa o infinito positivo.

     Na maioria das plataformas, isso equivale à macro ‘INFINITY’ do
     cabeçalho ‘<math.h>’ do padrão C11.

 -- C Macro: Py_NAN

     Esta macro expande uma expressão constante do tipo double, que
     representa um valor não um número quieto (qNaN).

     Na maioria das plataformas, isso equivale à macro ‘NAN’ do
     cabeçalho ‘<math.h>’ do padrão C11.

 -- C Macro: Py_HUGE_VAL

     Equivalente a ‘INFINITY’.

     Descontinuado desde a versão 3.14: A macro está *note suavemente
     descontinuada: 209.

 -- C Macro: Py_MATH_E

     A definição (precisa para um tipo double) da constante *note
     math.e: 27b5.

 -- C Macro: Py_MATH_El

     Definição de alta precisão (long double) da constante *note e:
     27b5.

 -- C Macro: Py_MATH_PI

     A definição (precisa para um tipo double) da constante *note
     math.pi: 27b4.

 -- C Macro: Py_MATH_PIl

     Definição de alta precisão (long double) da constante *note pi:
     27b4.

 -- C Macro: Py_MATH_TAU

     A definição (precisa para um tipo double) da constante *note
     math.tau: 27b6.

     Adicionado na versão 3.6.

 -- C Macro: Py_RETURN_NAN

     Retorna *note math.nan: 663. de uma função.

     Na maioria das plataformas, isso equivale a ‘return
     PyFloat_FromDouble(NAN)’.

 -- C Macro: Py_RETURN_INF (sign)

     Retorna *note math.inf: ca1. ou *note -math.inf: ca1. de uma
     função, dependendo do sinal de 'sign'.

     Na maioria das plataformas, isso equivale ao seguinte:

          return PyFloat_FromDouble(copysign(INFINITY, sign));

 -- C Macro: Py_IS_FINITE (X)

     Retorna ‘1’ se o número de ponto flutuante 'X' fornecido for
     finito, ou seja, for normal, subnormal ou zero, mas não infinito ou
     NaN. Caso contrário, retorna ‘0’.

     Descontinuado desde a versão 3.14: A macro está *note suavemente
     descontinuada: 209.  Use ‘isfinite’ em vez disso.

 -- C Macro: Py_IS_INFINITY (X)

     Retorna ‘1’ se o número de ponto flutuante 'X' fornecido for
     infinito positivo ou negativo.  Caso contrário, retorna ‘0’.

     Descontinuado desde a versão 3.14: A macro está *note suavemente
     descontinuada: 209.  Use ‘isinf’ em vez disso.

 -- C Macro: Py_IS_NAN (X)

     Retorna ‘1’ se o número de ponto flutuante fornecido 'X' for um
     valor não numérico (NaN). Caso contrário, retorna ‘0’.

     Descontinuado desde a versão 3.14: A macro está *note suavemente
     descontinuada: 209.  Use ‘isnan’ em vez disso.

* Menu:

* As funções Pack e Unpack::


File: python.info,  Node: As funções Pack e Unpack,  Up: Objetos de ponto flutuante

7.8.2.4 As funções Pack e Unpack
................................

As funções de empacotamento e desempacotamento, pack e unpack
respectivamente, fornecem uma maneira eficiente e independente de
plataforma de armazenar valores de ponto flutuante como strings de
bytes.  As rotinas de Pack produzem uma string de bytes a partir de um C
double, e as rotinas de Unpack produzem um C double a partir dessa
string de bytes.  O sufixo (2, 4 ou 8) especifica o número de bytes na
string de bytes.

Em plataformas que parecem usar o formato IEEE 754, essas funções
funcionam copiando bits.  Em outras plataformas, o formato de 2 bytes é
idêntico ao formato de meia precisão binário 16 do IEEE 754, o formato
de 4 bytes (32 bits) é idêntico ao formato de precisão simples binário
32 do IEEE 754 e o formato de 8 bytes ao formato de precisão dupla
binário 64 do IEEE 754, embora o empacotamento de INFs e NaNs (se tais
recursos existirem na plataforma) não seja tratado corretamente, e
tentar desempacotar uma string de bytes contendo um INF ou NaN do IEEE
levantará uma exceção.

Em plataformas que não aderem IEEE com maior precisão ou maior alcance
dinâmico do que o suportado pelo IEEE 754, nem todos os valores podem
ser empacotados; em plataformas que não aderem IEEE com menor precisão
ou menor alcance dinâmico, nem todos os valores podem ser
desempacotados.  O que acontece nesses casos é em parte acidental
(infelizmente).

Adicionado na versão 3.11.

* Menu:

* Funções Pack::
* Funções de Unpack::


File: python.info,  Node: Funções Pack,  Next: Funções de Unpack,  Up: As funções Pack e Unpack

7.8.2.5 Funções Pack
....................

As rotinas de empacotamento gravam 2, 4 ou 8 bytes, começando em 'p'.
'le' é um argumento int, diferente de zero se você quiser a sequência de
bytes no formato little-endian (expoente por último, em ‘p+1’, ‘p+3’ ou
‘p+6’ ‘p+7’), zero se você quiser o formato big-endian (expoente
primeiro, em 'p').  A constante ‘PY_BIG_ENDIAN’ pode ser usada para usar
o endian nativo: é igual a ‘1’ em processadores big-endian ou ‘0’ em
processadores little-endian.

Valor de retorno: ‘0’ se tudo estiver OK, ‘-1’ se houver erro (e uma
exceção for definida, provavelmente *note OverflowError: 885.).

Existem dois problemas em plataformas não IEEE:

   * O que isso faz é indefinido se 'x' é um NaN ou infinito.

   * ‘-0.0’ e ‘+0.0’ produzem a mesma sequência de bytes.

 -- C Função: int PyFloat_Pack2 (double x, char *p, int le)

     Empacota um C duplo como o formato de meia precisão binário16 IEEE
     754.

 -- C Função: int PyFloat_Pack4 (double x, char *p, int le)

     Empacota um C duplo como o formato de precisão simples binário32
     IEEE 754.

 -- C Função: int PyFloat_Pack8 (double x, char *p, int le)

     Empacota um C duplo como o formato de precisão dupla binária 64
     IEEE 754.


File: python.info,  Node: Funções de Unpack,  Prev: Funções Pack,  Up: As funções Pack e Unpack

7.8.2.6 Funções de Unpack
.........................

As rotinas de desempacotamento leem 2, 4 ou 8 bytes, começando em 'p'.
'le' é um argumento int, diferente de zero se a sequência de bytes
estiver no formato little-endian (expoente por último, em ‘p+1’, ‘p+3’
ou ‘p+6’ e ‘p+7’), zero se big-endian (expoente primeiro, em 'p').  A
constante ‘PY_BIG_ENDIAN’ pode ser usada para usar o endian nativo: é
igual a ‘1’ em processadores big-endian ou ‘0’ em processadores
little-endian.

Valor de retorno: O double descompactado.  Em caso de erro, é ‘-1.0’ e
*note PyErr_Occurred(): 1a3b. é verdadeiro (e uma exceção é definida,
provavelmente *note OverflowError: 885.).

Observe que em uma plataforma que não adere IEEE isso se recusará a
descompactar uma sequência de bytes que representa um NaN ou infinito.

 -- C Função: double PyFloat_Unpack2 (const char *p, int le)

     Descompacta o formato de meia precisão IEEE 754 binary16 como um
     double C.

 -- C Função: double PyFloat_Unpack4 (const char *p, int le)

     Descompacta o formato IEEE 754 binary32 de precisão simples como um
     C double.

 -- C Função: double PyFloat_Unpack8 (const char *p, int le)

     Descompacta o formato IEEE 754 binary64 de precisão dupla como um C
     double.


File: python.info,  Node: Objetos números complexos,  Prev: Objetos de ponto flutuante,  Up: Objetos Numéricos

7.8.2.7 Objetos números complexos
.................................

Os objetos números complexos do Python são implementados como dois tipos
distintos quando visualizados na API C: um é o objeto Python exposto aos
programas Python e o outro é uma estrutura C que representa o valor real
do número complexo.  A API fornece funções para trabalhar com ambos.

* Menu:

* Números complexos como estruturas C.: Números complexos como estruturas C.
* Números complexos como objetos Python::


File: python.info,  Node: Números complexos como estruturas C,  Next: Números complexos como objetos Python,  Up: Objetos números complexos

7.8.2.8 Números complexos como estruturas C.
............................................

Observe que as funções que aceitam essas estruturas como parâmetros e as
retornam como resultados o fazem 'por valor' em vez de desreferenciá-las
por meio de ponteiros.  Isso é consistente em toda a API.

 -- C Tipo: type Py_complex

     A estrutura C que corresponde à parte do valor de um objeto de
     número complexo Python.  A maioria das funções para lidar com
     objetos de números complexos usa estruturas desse tipo como valores
     de entrada ou saída, conforme apropriado.

      -- C Membro: double real
      -- C Membro: double imag

     A estrutura é definida como:

          typedef struct {
              double real;
              double imag;
          } Py_complex;

 -- C Função: *note Py_complex: 4ec5. _Py_c_sum (Py_complex left,
          Py_complex right)

     Retorna a soma de dois números complexos, utilizando a
     representação C *note Py_complex: 4ec5.

 -- C Função: *note Py_complex: 4ec5. _Py_c_diff (Py_complex left,
          Py_complex right)

     Retorna a diferença entre dois números complexos, utilizando a
     representação C *note Py_complex: 4ec5.

 -- C Função: *note Py_complex: 4ec5. _Py_c_neg (Py_complex num)

     Retorna a negação do número complexo 'num', utilizando a
     representação C *note Py_complex: 4ec5.

 -- C Função: *note Py_complex: 4ec5. _Py_c_prod (Py_complex left,
          Py_complex right)

     Retorna o produto de dois números complexos, utilizando a
     representação C *note Py_complex: 4ec5.

 -- C Função: *note Py_complex: 4ec5. _Py_c_quot (Py_complex dividend,
          Py_complex divisor)

     Retorna o quociente de dois números complexos, utilizando a
     representação C *note Py_complex: 4ec5.

     Se 'divisor' é nulo, este método retorna zero e define ‘errno’ para
     ‘EDOM’.

 -- C Função: *note Py_complex: 4ec5. _Py_c_pow (Py_complex num,
          Py_complex exp)

     Retorna a exponenciação de 'num' por 'exp', utilizando a
     representação C *note Py_complex: 4ec5.

     Se 'num' for nulo e 'exp' não for um número real positivo, este
     método retorna zero e define ‘errno’ para ‘EDOM’.


File: python.info,  Node: Números complexos como objetos Python,  Prev: Números complexos como estruturas C,  Up: Objetos números complexos

7.8.2.9 Números complexos como objetos Python
.............................................

 -- C Tipo: type PyComplexObject

     Este subtipo de *note PyObject: 339. representa um objeto Python de
     número complexo.

 -- C Variável: *note PyTypeObject: ab4. PyComplex_Type
     ' Parte da *note ABI Estável: 553.'  Esta instância de *note
     PyTypeObject: ab4. representa o tipo de número complexo Python.  É
     o mesmo objeto que *note complex: 2f8. na camada Python.

 -- C Função: int PyComplex_Check (PyObject *p)

     Retorna true se seu argumento é um *note PyComplexObject: 4fc0. ou
     um subtipo de *note PyComplexObject: 4fc0.  Esta função sempre tem
     sucesso.

 -- C Função: int PyComplex_CheckExact (PyObject *p)

     Retorna true se seu argumento é um *note PyComplexObject: 4fc0, mas
     não um subtipo de *note PyComplexObject: 4fc0.  Esta função sempre
     tem sucesso.

 -- C Função: *note PyObject: 339. *PyComplex_FromCComplex (Py_complex
          v)
     'Retorna valor: Nova referência.'  Cria um novo objeto de número
     complexo Python a partir de um valor C *note Py_complex: 4ec5.
     Retorna ‘NULL’ com uma exceção definida ao ocorrer um erro.

 -- C Função: *note PyObject: 339. *PyComplex_FromDoubles (double real,
          double imag)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo objeto *note PyComplexObject: 4fc0. de
     'real' e 'imag'.  Retorna ‘NULL’ com uma exceção definida ao
     ocorrer um erro.

 -- C Função: double PyComplex_RealAsDouble (PyObject *op)
     ' Parte da *note ABI Estável: 553.'  Retorna a parte real de 'op'
     como um double C.

     Se 'op' não é um objeto de número complexo Python, mas tem um
     método *note __complex__(): 5e7, este método será primeiro chamado
     para converter 'op' em um objeto de número complexo Python.  Se
     ‘__complex__()’ não estiver definido, ele volta a chamar *note
     PyFloat_AsDouble(): a73. e retorna seu resultado.

     Em caso de falha, este método retorna ‘-1.0’ com uma exceção
     definida, então deve-se chamar *note PyErr_Occurred(): 1a3b. para
     verificar se há erros.

     Alterado na versão 3.13: Usa *note __complex__(): 5e7, se
     disponível.

 -- C Função: double PyComplex_ImagAsDouble (PyObject *op)
     ' Parte da *note ABI Estável: 553.'  Retorna a parte imaginária de
     'op' como um double C.

     Se 'op' não é um objeto de número complexo Python, mas tem um
     método *note __complex__(): 5e7, este método será primeiro chamado
     para converter 'op' em um objeto de número complexo Python.  Se
     ‘__complex__()’ não estiver definido, ele volta a chamar *note
     PyFloat_AsDouble(): a73. e retorna ‘0.0’ em caso de sucesso.

     Em caso de falha, este método retorna ‘-1.0’ com uma exceção
     definida, então deve-se chamar *note PyErr_Occurred(): 1a3b. para
     verificar se há erros.

     Alterado na versão 3.13: Usa *note __complex__(): 5e7, se
     disponível.

 -- C Função: *note Py_complex: 4ec5. PyComplex_AsCComplex (PyObject
          *op)

     Retorna o valor *note Py_complex: 4ec5. do número complexo 'op'.

     Se 'op' não é um objeto de número complexo Python, mas tem um
     método *note __complex__(): 5e7, este método será primeiro chamado
     para converter 'op' em um objeto de número complexo Python.  Se
     ‘__complex__()’ não for definido, então ele recorre a *note
     __float__(): 9d4.  Se ‘__float__()’ não estiver definido, então ele
     volta para *note __index__(): 71d.

     Em caso de falha, este método retorna *note Py_complex: 4ec5. com
     *note real: 4fb8. definido para ‘-1.0’ e com uma exceção definida,
     então deve-se chamar *note PyErr_Occurred(): 1a3b. para verificar
     se há erros.

     Alterado na versão 3.8: Usa *note __index__(): 71d, se disponível.


File: python.info,  Node: Objetos Sequência,  Next: Coleções,  Prev: Objetos Numéricos,  Up: Camada de Objetos Concretos

7.8.3 Objetos Sequência
-----------------------

Operações genéricas em objetos de sequência foram discutidas no capítulo
anterior; Esta seção lida com os tipos específicos de objetos sequência
que são intrínsecos à linguagem Python.

* Menu:

* Objetos bytes: Objetos bytes<2>.
* Objetos byte array::
* Objetos Unicode e Codecs::
* Objeto tupla::
* Objetos sequência de estrutura::
* Objeto List::


File: python.info,  Node: Objetos bytes<2>,  Next: Objetos byte array,  Up: Objetos Sequência

7.8.3.1 Objetos bytes
.....................

Estas funções levantam *note TypeError: 2c3. quando se espera um
parâmetro bytes e são chamados com um parâmetro que não é bytes.

 -- C Tipo: type PyBytesObject

     Esta é uma instância de *note PyObject: 339. representando o objeto
     bytes do Python.

 -- C Variável: *note PyTypeObject: ab4. PyBytes_Type
     ' Parte da *note ABI Estável: 553.'  Esta instância de *note
     PyTypeObject: ab4. representa o tipo de bytes Python; é o mesmo
     objeto que *note bytes: 1c2. na camada de Python.

 -- C Função: int PyBytes_Check (PyObject *o)

     Retorna verdadeiro se o objeto 'o' for um objeto bytes ou se for
     uma instância de um subtipo do tipo bytes.  Esta função sempre tem
     sucesso.

 -- C Função: int PyBytes_CheckExact (PyObject *o)

     Retorna verdadeiro se o objeto 'o' for um objeto bytes, mas não uma
     instância de um subtipo do tipo bytes.  Esta função sempre tem
     sucesso.

 -- C Função: *note PyObject: 339. *PyBytes_FromString (const char *v)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo objeto de bytes com uma cópia da string 'v'
     como valor em caso de sucesso e ‘NULL’ em caso de falha.  O
     parâmetro 'v' não deve ser ‘NULL’ e isso não será verificado.

 -- C Função: *note PyObject: 339. *PyBytes_FromStringAndSize (const
          char *v, Py_ssize_t len)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo objeto de bytes com uma cópia da string 'v'
     como valor e comprimento 'len' em caso de sucesso e ‘NULL’ em caso
     de falha.  Se 'v' for ‘NULL’, o conteúdo do objeto bytes não será
     inicializado.

 -- C Função: *note PyObject: 339. *PyBytes_FromFormat (const char
          *format, ...)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Leva uma string tipo ‘printf()’ do C 'format' e um número
     variável de argumentos, calcula o tamanho do objeto bytes do Python
     resultante e retorna um objeto bytes com os valores formatados
     nela.  Os argumentos da variável devem ser tipos C e devem
     corresponder exatamente aos caracteres de formato na string
     'format'.  Os seguintes formatos de caracteres são permitidos:

     Caracteres Formatados   Tipo                Comentário
                                                 
     ---------------------------------------------------------------------------------
                                                 
     ‘%%’                    'n/d'               O caractere literal %.
                                                 
                                                 
     ‘%c’                    int                 Um único byte, representado como
                                                 um C int.
                                                 
                                                 
     ‘%d’                    int                 Equivalente a ‘printf("%d")’.  (1)
                                                 
                                                 
     ‘%u’                    unsigned int        Equivalente a ‘printf("%u")’.  (2)
                                                 
                                                 
     ‘%ld’                   long                Equivalente a ‘printf("%ld")’.
                                                 (3)
                                                 
                                                 
     ‘%lu’                   unsigned long       Equivalente a ‘printf("%lu")’.
                                                 (4)
                                                 
                                                 
     ‘%zd’                   *note Py_ssize_t: a69.Equivalente a ‘printf("%zd")’.
                                                 (5)
                                                 
                                                 
     ‘%zu’                   size_t              Equivalente a ‘printf("%zu")’.
                                                 (6)
                                                 
                                                 
     ‘%i’                    int                 Equivalente a ‘printf("%i")’.  (7)
                                                 
                                                 
     ‘%x’                    int                 Equivalente a ‘printf("%x")’.  (8)
                                                 
                                                 
     ‘%s’                    const char*         Uma matriz de caracteres C com
                                                 terminação nula.
                                                 
                                                 
     ‘%p’                    const void*         A representação hexadecimal de um
                                                 ponteiro C. Principalmente
                                                 equivalente a ‘printf("%p")’
                                                 exceto que é garantido que comece
                                                 com o literal ‘0x’
                                                 independentemente do que o
                                                 ‘printf’ da plataforma ceda.
                                                 

     Um caractere de formato não reconhecido faz com que todo o resto da
     string de formato seja copiado como é para o objeto resultante e
     todos os argumentos extras sejam descartados.

 -- C Função: *note PyObject: 339. *PyBytes_FromFormatV (const char
          *format, va_list vargs)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Idêntico a *note PyBytes_FromFormat(): 1ba1. exceto que é
     preciso exatamente dois argumentos.

 -- C Função: *note PyObject: 339. *PyBytes_FromObject (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna a representação de bytes do objeto 'o' que
     implementa o protocolo de buffer.

 -- C Função: *note Py_ssize_t: a69. PyBytes_Size (PyObject *o)
     ' Parte da *note ABI Estável: 553.'  Retorna o comprimento dos
     bytes em objeto bytes 'o'.

 -- C Função: *note Py_ssize_t: a69. PyBytes_GET_SIZE (PyObject *o)

     Similar a *note PyBytes_Size(): 4c20, mas sem verificação de erro.

 -- C Função: char *PyBytes_AsString (PyObject *o)
     ' Parte da *note ABI Estável: 553.'  Retorna um ponteiro para o
     conteúdo de 'o'.  O ponteiro se refere ao buffer interno de 'o',
     que consiste em ‘len(o) + 1’ bytes.  O último byte no buffer é
     sempre nulo, independentemente de haver outros bytes nulos.  Os
     dados não devem ser modificados de forma alguma, a menos que o
     objeto tenha sido criado usando ‘PyBytes_FromStringAndSize(NULL,
     size)’.  Não deve ser desalocado.  Se 'o' não é um objeto de bytes,
     *note PyBytes_AsString(): 88b. retorna ‘NULL’ e levanta *note
     TypeError: 2c3.

 -- C Função: char *PyBytes_AS_STRING (PyObject *string)

     Similar a *note PyBytes_AsString(): 88b, mas sem verificação de
     erro.

 -- C Função: int PyBytes_AsStringAndSize (PyObject *obj, char **buffer,
          Py_ssize_t *length)
     ' Parte da *note ABI Estável: 553.'  Retorna os conteúdos
     terminados nulos do objeto 'obj' através das variáveis de saída
     'buffer' e 'length'.  Retorna ‘0’ em caso de sucesso.

     Se 'length' for ‘NULL’, o objeto bytes não poderá conter bytes
     nulos incorporados; se isso acontecer, a função retornará ‘-1’ e a
     *note ValueError: 202. será levantado.

     O buffer refere-se a um buffer interno de 'obj', que inclui um byte
     nulo adicional no final (não contado em 'length').  Os dados não
     devem ser modificados de forma alguma, a menos que o objeto tenha
     sido criado apenas usando ‘PyBytes_FromStringAndSize(NULL, size)’.
     Não deve ser desalinhado.  Se 'obj' não é um objeto bytes, *note
     PyBytes_AsStringAndSize(): 4c18. retorna ‘-1’ e levanta *note
     TypeError: 2c3.

     Alterado na versão 3.5: Anteriormente *note TypeError: 2c3. era
     levantado quando os bytes nulos incorporados eram encontrados no
     objeto bytes.

 -- C Função: void PyBytes_Concat (PyObject **bytes, PyObject *newpart)
     ' Parte da *note ABI Estável: 553.'  Cria um novo objeto de bytes
     em '*bytes' contendo o conteúdo de 'newpart' anexado a 'bytes'; o
     chamador será o proprietário da nova referência.  A referência ao
     valor antigo de 'bytes' será roubada.  Se o novo objeto não puder
     ser criado, a antiga referência a 'bytes' ainda será descartada e o
     valor de '*bytes' será definido como ‘NULL’; a exceção apropriada
     será definida.

 -- C Função: void PyBytes_ConcatAndDel (PyObject **bytes, PyObject
          *newpart)
     ' Parte da *note ABI Estável: 553.'  “Crie um novo objeto bytes em
     '*bytes' contendo o conteúdo de newpart anexado a bytes.  Esta
     versão libera a *note strong reference: 33d. (referência forte)
     para newpart (ou seja, decrementa a contagem de referências a
     ele).”

 -- C Função: int _PyBytes_Resize (PyObject **bytes, Py_ssize_t newsize)

     Redimensiona um objeto de bytes.  'newsize' será o novo tamanho do
     objeto bytes.  Você pode pensar nisso como se estivesse criando um
     novo objeto de bytes e destruindo o antigo, só que de forma mais
     eficiente.  Passe o endereço de um objeto de bytes existente como
     um lvalue (pode ser gravado) e o novo tamanho desejado.  Em caso de
     sucesso, '*bytes' mantém o objeto de bytes redimensionados e ‘0’ é
     retornado; o endereço em '*bytes' pode diferir do seu valor de
     entrada.  Se a realocação falhar, o objeto de bytes originais em
     '*bytes' é desalocado, '*bytes' é definido como ‘NULL’, *note
     MemoryError: 15c5. é definido e ‘-1’ é retornado.

 -- C Função: *note PyObject: 339. *PyBytes_Repr (PyObject *bytes, int
          smartquotes)
     ' Parte da *note ABI Estável: 553.'  Obtém a representação em
     string de 'bytes'.  Esta função é atualmente usada para implementar
     ‘bytes.__repr__()’ em Python.

     Esta função não realiza verificação de tipo; é um comportamento
     indefinido passar 'bytes' como um objeto que não seja do tipo bytes
     ou ‘NULL’.

     Se 'smartquotes' for verdadeiro, a representação usará uma string
     entre aspas duplas em vez de aspas simples quando aspas simples
     estiverem presentes em 'bytes'.  Por exemplo, a string de bytes
     ‘'Python'’ seria representada como ‘b"'Python'"’ quando
     'smartquotes' for verdadeiro, ou ‘b'\'Python\''’ quando for falso.

     Em caso de sucesso, esta função retorna uma *note referência forte:
     33d. a um objeto *note str: 44c. contendo a representação.  Em caso
     de falha, ela retorna ‘NULL’ com uma exceção definida.

 -- C Função: *note PyObject: 339. *PyBytes_DecodeEscape (const char *s,
          Py_ssize_t len, const char *errors, Py_ssize_t unicode, const
          char *recode_encoding)
     ' Parte da *note ABI Estável: 553.'  Remove um string 's' que foi
     escapada com contrabarra.  's' não pode ser ‘NULL’.  'len' deve ser
     o tamanho de 's'.

     'errors' deve ser um dos seguintes valores: ‘"strict"’, ‘"replace"’
     ou ‘"ignore"’.  Se 'errors' for ‘NULL’, o valor padrão será
     ‘"strict"’.

     Em caso de sucesso, esta função retorna uma *note referência forte:
     33d. a um objeto Python *note bytes: 1c2. contendo a string sem
     escape.  Em caso de falha, esta função retorna ‘NULL’ com uma
     exceção definida.

     Alterado na versão 3.9: 'unicode' e 'recode_encoding' não são mais
     usadas.

   ---------- Footnotes ----------

   (1) Para especificadores de número inteiro (d, u, ld, lu, zd, zu, i,
x): o sinalizador de conversão 0 tem efeito mesmo quando uma precisão é
fornecida.

   (2) Para especificadores de número inteiro (d, u, ld, lu, zd, zu, i,
x): o sinalizador de conversão 0 tem efeito mesmo quando uma precisão é
fornecida.

   (3) Para especificadores de número inteiro (d, u, ld, lu, zd, zu, i,
x): o sinalizador de conversão 0 tem efeito mesmo quando uma precisão é
fornecida.

   (4) Para especificadores de número inteiro (d, u, ld, lu, zd, zu, i,
x): o sinalizador de conversão 0 tem efeito mesmo quando uma precisão é
fornecida.

   (5) Para especificadores de número inteiro (d, u, ld, lu, zd, zu, i,
x): o sinalizador de conversão 0 tem efeito mesmo quando uma precisão é
fornecida.

   (6) Para especificadores de número inteiro (d, u, ld, lu, zd, zu, i,
x): o sinalizador de conversão 0 tem efeito mesmo quando uma precisão é
fornecida.

   (7) Para especificadores de número inteiro (d, u, ld, lu, zd, zu, i,
x): o sinalizador de conversão 0 tem efeito mesmo quando uma precisão é
fornecida.

   (8) Para especificadores de número inteiro (d, u, ld, lu, zd, zu, i,
x): o sinalizador de conversão 0 tem efeito mesmo quando uma precisão é
fornecida.


File: python.info,  Node: Objetos byte array,  Next: Objetos Unicode e Codecs,  Prev: Objetos bytes<2>,  Up: Objetos Sequência

7.8.3.2 Objetos byte array
..........................

 -- C Tipo: type PyByteArrayObject

     Esse subtipo de *note PyObject: 339. representa um objeto Python
     bytearray.

 -- C Variável: *note PyTypeObject: ab4. PyByteArray_Type
     ' Parte da *note ABI Estável: 553.'  Essa instância de *note
     PyTypeObject: ab4. representa um tipo Python bytearray; é o mesmo
     objeto que o *note bytearray: 2ea. na camada Python.

* Menu:

* Macros para verificação de tipo::
* Funções diretas da API::
* Macros::


File: python.info,  Node: Macros para verificação de tipo,  Next: Funções diretas da API,  Up: Objetos byte array

7.8.3.3 Macros para verificação de tipo
.......................................

 -- C Função: int PyByteArray_Check (PyObject *o)

     Retorna verdadeiro se o objeto 'o' for um objeto bytearray ou se
     for uma instância de um subtipo do tipo bytearray.  Esta função
     sempre tem sucesso.

 -- C Função: int PyByteArray_CheckExact (PyObject *o)

     Retorna verdadeiro se o objeto 'o' for um objeto bytearray, mas não
     uma instância de um subtipo do tipo bytearray.  Esta função sempre
     tem sucesso.


File: python.info,  Node: Funções diretas da API,  Next: Macros,  Prev: Macros para verificação de tipo,  Up: Objetos byte array

7.8.3.4 Funções diretas da API
..............................

 -- C Função: *note PyObject: 339. *PyByteArray_FromObject (PyObject *o)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo objeto bytearray, 'o', que implementa o
     *note protocolo de buffer: 2e8.

     Em caso de falha, retorna ‘NULL’ com uma exceção definida.

 -- C Função: *note PyObject: 339. *PyByteArray_FromStringAndSize (const
          char *string, Py_ssize_t len)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Cria um novo objeto bytearray a partir de 'string' e seu
     comprimento, 'len'.

     Em caso de falha, retorna ‘NULL’ com uma exceção definida.

 -- C Função: *note PyObject: 339. *PyByteArray_Concat (PyObject *a,
          PyObject *b)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Concatena os bytearrays 'a' e 'b' e retorna um novo
     bytearray com o resultado.

     Em caso de falha, retorna ‘NULL’ com uma exceção definida.

 -- C Função: *note Py_ssize_t: a69. PyByteArray_Size (PyObject
          *bytearray)
     ' Parte da *note ABI Estável: 553.'  Retorna o tamanho de
     'bytearray' após verificar se há um ponteiro ‘NULL’.

 -- C Função: char *PyByteArray_AsString (PyObject *bytearray)
     ' Parte da *note ABI Estável: 553.'  Retorna o conteúdo de
     'bytearray' como uma matriz de caracteres após verificar um
     ponteiro ‘NULL’.  O array retornado sempre tem um byte nulo extra
     acrescentado.

 -- C Função: int PyByteArray_Resize (PyObject *bytearray, Py_ssize_t
          len)
     ' Parte da *note ABI Estável: 553.'  Redimensiona o buffer interno
     de 'bytearray' para o tamanho 'len'.


File: python.info,  Node: Macros,  Prev: Funções diretas da API,  Up: Objetos byte array

7.8.3.5 Macros
..............

Estas macros trocam segurança por velocidade e não verificam os
ponteiros.

 -- C Função: char *PyByteArray_AS_STRING (PyObject *bytearray)

     Similar a *note PyByteArray_AsString(): 4c12, mas sem verificação
     de erro.

 -- C Função: *note Py_ssize_t: a69. PyByteArray_GET_SIZE (PyObject
          *bytearray)

     Similar a *note PyByteArray_Size(): 4c15, mas sem verificação de
     erro.


File: python.info,  Node: Objetos Unicode e Codecs,  Next: Objeto tupla,  Prev: Objetos byte array,  Up: Objetos Sequência

7.8.3.6 Objetos Unicode e Codecs
................................

* Menu:

* Objetos Unicode::
* Built-in Codecs::
* Methods and Slot Functions::


File: python.info,  Node: Objetos Unicode,  Next: Built-in Codecs,  Up: Objetos Unicode e Codecs

7.8.3.7 Objetos Unicode
.......................

Desde a implementação da PEP 393(1) no Python 3.3, os objetos Unicode
usam internamente uma variedade de representações para permitir o
processamento de toda a gama de caracteres Unicode, mantendo a
eficiência de memória.  Há casos especiais para strings em que todos os
pontos de código estão abaixo de 128, 256 ou 65536; caso contrário, os
pontos de código devem estar abaixo de 1114112 (que é a gama completa de
caracteres Unicode).

A representação UTF-8 é criada sob demanda e armazenada em cache no
objeto Unicode.

     Nota: A representação *note Py_UNICODE: 3ed. foi removida desde o
     Python 3.12 com APIs descontinuadas.  Consulte PEP 623(2) para
     obter mais informações.

* Menu:

* Tipo Unicode::
* Propriedade de caracteres Unicode::
* Creating and accessing Unicode strings::
* Locale Encoding::
* File System Encoding::
* wchar_t Support::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0393/

   (2) https://peps.python.org/pep-0623/


File: python.info,  Node: Tipo Unicode,  Next: Propriedade de caracteres Unicode,  Up: Objetos Unicode

7.8.3.8 Tipo Unicode
....................

Estes são os tipos básicos de objetos Unicode usados para a
implementação Unicode em Python:

 -- C Tipo: type Py_UCS4
 -- C Tipo: type Py_UCS2
 -- C Tipo: type Py_UCS1
     ' Parte da *note ABI Estável: 553.'  Esses tipos são definições de
     tipo para tipos inteiros sem sinal, amplos o suficiente para conter
     caracteres de 32 bits, 16 bits e 8 bits, respectivamente.  Ao lidar
     com caracteres Unicode simples, use *note Py_UCS4: 29b.

     Adicionado na versão 3.3.

 -- C Tipo: type Py_UNICODE

     Este é um typedef de ‘wchar_t’, que é um tipo de 16 bits ou 32
     bits, dependendo da plataforma.

     Alterado na versão 3.3: Em versões anteriores, esse era um tipo de
     16 bits ou de 32 bits, dependendo se você selecionava uma versão
     Unicode “estreita” ou “ampla” do Python no momento da construção.

     Descontinuado desde a versão 3.13, será removido na versão 3.15.

 -- C Tipo: type PyASCIIObject
 -- C Tipo: type PyCompactUnicodeObject
 -- C Tipo: type PyUnicodeObject

     Esses subtipos de *note PyObject: 339. representam um objeto
     Unicode do Python.  Em quase todos os casos, eles não devem ser
     usados diretamente, pois todas as funções da API que lidam com
     objetos Unicode recebem e retornam ponteiros *note PyObject: 339.

     Adicionado na versão 3.3.

 -- C Variável: *note PyTypeObject: ab4. PyUnicode_Type
     ' Parte da *note ABI Estável: 553.'  Esta instância de *note
     PyTypeObject: ab4. representa o tipo Unicode do Python.  Ela é
     exposta ao código Python como ‘str’.

 -- C Variável: *note PyTypeObject: ab4. PyUnicodeIter_Type
     ' Parte da *note ABI Estável: 553.'  Esta instância de *note
     PyTypeObject: ab4. representa o tipo iterador Unicode do Python.  É
     usada para iterar sobre objetos string Unicode.

As seguintes APIs são macros C e funções estáticas embutidas para
verificações rápidas e acesso a dados internos somente leitura de
objetos Unicode:

 -- C Função: int PyUnicode_Check (PyObject *obj)

     Retorna verdadeiro se o objeto 'obj' for um objeto Unicode ou uma
     instância de um subtipo Unicode.  Esta função sempre tem sucesso.

 -- C Função: int PyUnicode_CheckExact (PyObject *obj)

     Retorna verdadeiro se o objeto 'obj' for um objeto Unicode, mas não
     uma instância de um subtipo.  Esta função sempre tem sucesso.

 -- C Função: int PyUnicode_READY (PyObject *unicode)

     Retorna ‘0’.  Essa API é mantida apenas para retrocompatibilidade.

     Adicionado na versão 3.3.

     Descontinuado desde a versão 3.10: Esta API não faz nada desde o
     Python 3.12.

 -- C Função: *note Py_ssize_t: a69. PyUnicode_GET_LENGTH (PyObject
          *unicode)

     Retorna o comprimento da string Unicode, em pontos de código.
     'unicode' deve ser um objeto Unicode na representação “canônica”
     (não marcado).

     Adicionado na versão 3.3.

 -- C Função: *note Py_UCS1: 11b2. *PyUnicode_1BYTE_DATA (PyObject
          *unicode)
 -- C Função: *note Py_UCS2: 11b3. *PyUnicode_2BYTE_DATA (PyObject
          *unicode)
 -- C Função: *note Py_UCS4: 29b. *PyUnicode_4BYTE_DATA (PyObject
          *unicode)

     Retorna um ponteiro para a representação canônica convertida para
     tipos inteiros UCS1, UCS2 ou UCS4 para acesso direto aos
     caracteres.  Nenhuma verificação é realizada se a representação
     canônica tem o tamanho de caractere correto; use *note
     PyUnicode_KIND(): 11bc. para selecionar a função correta.

     Adicionado na versão 3.3.

 -- C Macro: PyUnicode_1BYTE_KIND
 -- C Macro: PyUnicode_2BYTE_KIND
 -- C Macro: PyUnicode_4BYTE_KIND

     Valores de retorno da macro *note PyUnicode_KIND(): 11bc.

     Adicionado na versão 3.3.

     Alterado na versão 3.12: ‘PyUnicode_WCHAR_KIND’ foi removida.

 -- C Função: int PyUnicode_KIND (PyObject *unicode)

     Retorna uma das constantes do tipo PyUnicode (veja acima) que
     indicam quantos bytes por caractere este objeto Unicode usa para
     armazenar seus dados.  'unicode' precisa ser um objeto Unicode na
     representação “canônica” (não marcado).

     Adicionado na versão 3.3.

 -- C Função: void *PyUnicode_DATA (PyObject *unicode)

     Retorna um ponteiro vazio para o buffer Unicode bruto.  'unicode'
     deve ser um objeto Unicode na representação “canônica” (não
     marcado).

     Adicionado na versão 3.3.

 -- C Função: void PyUnicode_WRITE (int kind, void *data, Py_ssize_t
          index, Py_UCS4 value)

     Escreva em uma representação canônica 'data' (conforme obtido com
     *note PyUnicode_DATA(): 11b8.).  Esta função não realiza
     verificações de sanidade e destina-se ao uso em laços.  O chamador
     deve armazenar em cache o valor de 'type' e o ponteiro 'data'
     conforme obtidos de outras chamadas.  'índice' é o índice na string
     (começa em 0) e 'value' é o novo valor do ponto de código que deve
     ser escrito naquele local.

     Adicionado na versão 3.3.

 -- C Função: *note Py_UCS4: 29b. PyUnicode_READ (int kind, void *data,
          Py_ssize_t index)

     Lê um ponto de código de uma representação canônica 'data'
     (conforme obtido com *note PyUnicode_DATA(): 11b8.).  Nenhuma
     verificação ou chamada pronta é realizada.

     Adicionado na versão 3.3.

 -- C Função: *note Py_UCS4: 29b. PyUnicode_READ_CHAR (PyObject
          *unicode, Py_ssize_t index)

     Lê um caractere de um objeto Unicode 'unicode', que deve estar na
     representação “canônica”.  Isso é menos eficiente do que *note
     PyUnicode_READ(): 11c0. se você fizer várias leituras consecutivas.

     Adicionado na versão 3.3.

 -- C Função: *note Py_UCS4: 29b. PyUnicode_MAX_CHAR_VALUE (PyObject
          *unicode)

     Retorna o ponto de código máximo adequado para criar outra string
     baseada em 'unicode', que deve estar na representação “canônica”.
     Isso é sempre uma aproximação, mas é mais eficiente do que iterar
     sobre a string.

     Adicionado na versão 3.3.

 -- C Função: int PyUnicode_IsIdentifier (PyObject *unicode)
     ' Parte da *note ABI Estável: 553.'  Retorna ‘1’ se a string é um
     identificador válido conforme a definição da linguagem, seção *note
     Identificadores e palavras-chave: 2021.  Do contrário, retorna ‘0’.

     Alterado na versão 3.9: A função não chama mais *note
     Py_FatalError(): 98a. se a string não estiver pronta.


File: python.info,  Node: Propriedade de caracteres Unicode,  Next: Creating and accessing Unicode strings,  Prev: Tipo Unicode,  Up: Objetos Unicode

7.8.3.9 Propriedade de caracteres Unicode
.........................................

O Unicode fornece muitas propriedades de caracteres diferentes.  As mais
frequentemente necessárias estão disponíveis por meio destas macros, que
são mapeadas para funções C, dependendo da configuração do Python.

 -- C Função: int Py_UNICODE_ISSPACE (Py_UCS4 ch)

     Retorna ‘1’ ou ‘0’ dependendo se 'ch' é um caractere de espaço em
     branco.

 -- C Função: int Py_UNICODE_ISLOWER (Py_UCS4 ch)

     Retorna ‘1’ ou ‘0’ dependendo se 'ch' é um caractere minúsculo.

 -- C Função: int Py_UNICODE_ISUPPER (Py_UCS4 ch)

     Retorna ‘1’ ou ‘0’ dependendo se 'ch' é um caractere maiúsculo.

 -- C Função: int Py_UNICODE_ISTITLE (Py_UCS4 ch)

     Retorna ‘1’ ou ‘0’ dependendo se 'ch' é um caractere em TitleCase.

 -- C Função: int Py_UNICODE_ISLINEBREAK (Py_UCS4 ch)

     Retorna ‘1’ ou ‘0’ dependendo se 'ch' é um caractere de quebra de
     linha.

 -- C Função: int Py_UNICODE_ISDECIMAL (Py_UCS4 ch)

     Retorna ‘1’ ou ‘0’ dependendo se 'ch' é um caractere decimal.

 -- C Função: int Py_UNICODE_ISDIGIT (Py_UCS4 ch)

     Retorna ‘1’ ou ‘0’ dependendo se 'ch' é um caractere de dígito.

 -- C Função: int Py_UNICODE_ISNUMERIC (Py_UCS4 ch)

     Retorna ‘1’ ou ‘0’ dependendo se 'ch' é um caractere numérico.

 -- C Função: int Py_UNICODE_ISALPHA (Py_UCS4 ch)

     Retorna ‘1’ ou ‘0’ dependendo se 'ch' é um caractere alfabético.

 -- C Função: int Py_UNICODE_ISALNUM (Py_UCS4 ch)

     Retorna ‘1’ ou ‘0’ dependendo se 'ch' é um caractere alfanumérico.

 -- C Função: int Py_UNICODE_ISPRINTABLE (Py_UCS4 ch)

     Retorna ‘1’ ou ‘0’ dependendo se 'ch' é um caractere imprimível, no
     sentido de *note str.isprintable(): e02.

These APIs can be used for fast direct character conversions:

 -- C Função: *note Py_UCS4: 29b. Py_UNICODE_TOLOWER (Py_UCS4 ch)

     Return the character 'ch' converted to lower case.

 -- C Função: *note Py_UCS4: 29b. Py_UNICODE_TOUPPER (Py_UCS4 ch)

     Return the character 'ch' converted to upper case.

 -- C Função: *note Py_UCS4: 29b. Py_UNICODE_TOTITLE (Py_UCS4 ch)

     Return the character 'ch' converted to title case.

 -- C Função: int Py_UNICODE_TODECIMAL (Py_UCS4 ch)

     Return the character 'ch' converted to a decimal positive integer.
     Return ‘-1’ if this is not possible.  This function does not raise
     exceptions.

 -- C Função: int Py_UNICODE_TODIGIT (Py_UCS4 ch)

     Return the character 'ch' converted to a single digit integer.
     Return ‘-1’ if this is not possible.  This function does not raise
     exceptions.

 -- C Função: double Py_UNICODE_TONUMERIC (Py_UCS4 ch)

     Return the character 'ch' converted to a double.  Return ‘-1.0’ if
     this is not possible.  This function does not raise exceptions.

These APIs can be used to work with surrogates:

 -- C Função: int Py_UNICODE_IS_SURROGATE (Py_UCS4 ch)

     Check if 'ch' is a surrogate (‘0xD800 <= ch <= 0xDFFF’).

 -- C Função: int Py_UNICODE_IS_HIGH_SURROGATE (Py_UCS4 ch)

     Check if 'ch' is a high surrogate (‘0xD800 <= ch <= 0xDBFF’).

 -- C Função: int Py_UNICODE_IS_LOW_SURROGATE (Py_UCS4 ch)

     Check if 'ch' is a low surrogate (‘0xDC00 <= ch <= 0xDFFF’).

 -- C Função: *note Py_UCS4: 29b. Py_UNICODE_HIGH_SURROGATE (Py_UCS4 ch)

     Return the high UTF-16 surrogate (‘0xD800’ to ‘0xDBFF’) for a
     Unicode code point in the range ‘[0x10000; 0x10FFFF]’.

 -- C Função: *note Py_UCS4: 29b. Py_UNICODE_LOW_SURROGATE (Py_UCS4 ch)

     Return the low UTF-16 surrogate (‘0xDC00’ to ‘0xDFFF’) for a
     Unicode code point in the range ‘[0x10000; 0x10FFFF]’.

 -- C Função: *note Py_UCS4: 29b. Py_UNICODE_JOIN_SURROGATES (Py_UCS4
          high, Py_UCS4 low)

     Join two surrogate code points and return a single *note Py_UCS4:
     29b. value.  'high' and 'low' are respectively the leading and
     trailing surrogates in a surrogate pair.  'high' must be in the
     range ‘[0xD800; 0xDBFF]’ and 'low' must be in the range ‘[0xDC00;
     0xDFFF]’.


File: python.info,  Node: Creating and accessing Unicode strings,  Next: Locale Encoding,  Prev: Propriedade de caracteres Unicode,  Up: Objetos Unicode

7.8.3.10 Creating and accessing Unicode strings
...............................................

To create Unicode objects and access their basic sequence properties,
use these APIs:

 -- C Função: *note PyObject: 339. *PyUnicode_New (Py_ssize_t size,
          Py_UCS4 maxchar)
     'Retorna valor: Nova referência.'  Create a new Unicode object.
     'maxchar' should be the true maximum code point to be placed in the
     string.  As an approximation, it can be rounded up to the nearest
     value in the sequence 127, 255, 65535, 1114111.

     This is the recommended way to allocate a new Unicode object.
     Objects created using this function are not resizable.

     On error, set an exception and return ‘NULL’.

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 339. *PyUnicode_FromKindAndData (int kind,
          const void *buffer, Py_ssize_t size)
     'Retorna valor: Nova referência.'  Cria um novo objeto Unicode com
     o tipo 'type' fornecido (os valores possíveis são *note
     PyUnicode_1BYTE_KIND: 11bd. etc., conforme retornado por *note
     PyUnicode_KIND(): 11bc.).  O 'buffer' deve apontar para um array de
     unidades com 'size' de 1, 2 ou 4 bytes por caractere, conforme
     fornecido pelo tipo.

     If necessary, the input 'buffer' is copied and transformed into the
     canonical representation.  For example, if the 'buffer' is a UCS4
     string (*note PyUnicode_4BYTE_KIND: 11bf.) and it consists only of
     codepoints in the UCS1 range, it will be transformed into UCS1
     (*note PyUnicode_1BYTE_KIND: 11bd.).

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 339. *PyUnicode_FromStringAndSize (const
          char *str, Py_ssize_t size)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Create a Unicode object from the char buffer 'str'.  The
     bytes will be interpreted as being UTF-8 encoded.  The buffer is
     copied into the new object.  The return value might be a shared
     object, i.e.  modification of the data is not allowed.

     This function raises *note SystemError: 575. when:

        * 'size' < 0,

        * 'str' is ‘NULL’ and 'size' > 0

     Alterado na versão 3.12: 'str' == ‘NULL’ with 'size' > 0 is not
     allowed anymore.

 -- C Função: *note PyObject: 339. *PyUnicode_FromString (const char
          *str)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Create a Unicode object from a UTF-8 encoded null-terminated
     char buffer 'str'.

 -- C Função: *note PyObject: 339. *PyUnicode_FromFormat (const char
          *format, ...)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Take a C ‘printf()’-style 'format' string and a variable
     number of arguments, calculate the size of the resulting Python
     Unicode string and return a string with the values formatted into
     it.  The variable arguments must be C types and must correspond
     exactly to the format characters in the 'format' ASCII-encoded
     string.

     Um especificador de conversão contém dois ou mais caracteres e tem
     os seguintes componentes, que devem aparecer nesta ordem:

       1. O caractere ‘'%'’, que determina o início do especificador.

       2. Flags de conversão (opcional), que afetam o resultado de
          alguns tipos de conversão.

       3. Minimum field width (optional).  If specified as an ‘'*'’
          (asterisk), the actual width is given in the next argument,
          which must be of type int, and the object to convert comes
          after the minimum field width and optional precision.

       4. Precision (optional), given as a ‘'.'’ (dot) followed by the
          precision.  If specified as ‘'*'’ (an asterisk), the actual
          precision is given in the next argument, which must be of type
          int, and the value to convert comes after the precision.

       5. Modificador de comprimento (opcional).

       6. Tipo de conversão.

     Os caracteres flags de conversão são:

     Sinalizador Significado
                 
     ------------------------------------------------------------------------------
                 
     ‘0’         A conversão será preenchida por zeros para valores numéricos.
                 
                 
     ‘-’         The converted value is left adjusted (overrides the ‘0’ flag if
                 both are given).
                 

     The length modifiers for following integer conversions (‘d’, ‘i’,
     ‘o’, ‘u’, ‘x’, or ‘X’) specify the type of the argument (int by
     default):

     Modifier       Tipos
                    
     -------------------------------------------------------------------------
                    
     ‘l’            long or unsigned long
                    
                    
     ‘ll’           long long or unsigned long long
                    
                    
     ‘j’            ‘intmax_t’ or ‘uintmax_t’
                    
                    
     ‘z’            ‘size_t’ or ‘ssize_t’
                    
                    
     ‘t’            ‘ptrdiff_t’
                    

     The length modifier ‘l’ for following conversions ‘s’ or ‘V’
     specify that the type of the argument is const wchar_t*.

     The conversion specifiers are:

     Conversion Specifier                  Tipo                                  Comentário
                                                                                 
     ------------------------------------------------------------------------------------------------------------------
                                                                                 
     ‘%’                                   'n/d'                                 The literal ‘%’ character.
                                                                                 
                                                                                 
     ‘d’, ‘i’                              Specified by the length modifier      The decimal representation of a
                                                                                 signed C integer.
                                                                                 
                                                                                 
     ‘u’                                   Specified by the length modifier      The decimal representation of an
                                                                                 unsigned C integer.
                                                                                 
                                                                                 
     ‘o’                                   Specified by the length modifier      The octal representation of an
                                                                                 unsigned C integer.
                                                                                 
                                                                                 
     ‘x’                                   Specified by the length modifier      The hexadecimal representation of
                                                                                 an unsigned C integer (lowercase).
                                                                                 
                                                                                 
     ‘X’                                   Specified by the length modifier      The hexadecimal representation of
                                                                                 an unsigned C integer (uppercase).
                                                                                 
                                                                                 
     ‘c’                                   int                                   A single character.
                                                                                 
                                                                                 
     ‘s’                                   const char* or const wchar_t*         Uma matriz de caracteres C com
                                                                                 terminação nula.
                                                                                 
                                                                                 
     ‘p’                                   const void*                           The hex representation of a C
                                                                                 pointer.  Mostly equivalent to
                                                                                 ‘printf("%p")’ except that it is
                                                                                 guaranteed to start with the
                                                                                 literal ‘0x’ regardless of what the
                                                                                 platform’s ‘printf’ yields.
                                                                                 
                                                                                 
     ‘A’                                   *note PyObject: 339.*                 The result of calling
                                                                                 *note ascii(): 142d.
                                                                                 
                                                                                 
     ‘U’                                   *note PyObject: 339.*                 A Unicode object.
                                                                                 
                                                                                 
     ‘V’                                   *note PyObject: 339.*, const char*    A Unicode object (which may be
                                           or const wchar_t*                     ‘NULL’) and a null-terminated C
                                                                                 character array as a second
                                                                                 parameter (which will be used, if
                                                                                 the first parameter is ‘NULL’).
                                                                                 
                                                                                 
     ‘S’                                   *note PyObject: 339.*                 The result of calling
                                                                                 *note PyObject_Str(): 1068.
                                                                                 
                                                                                 
     ‘R’                                   *note PyObject: 339.*                 The result of calling
                                                                                 *note PyObject_Repr(): 1067.
                                                                                 
                                                                                 
     ‘T’                                   *note PyObject: 339.*                 Get the fully qualified name of an
                                                                                 object type; call
                                                                                 *note PyType_GetFullyQualifiedName(): 373.
                                                                                 
                                                                                 
     ‘#T’                                  *note PyObject: 339.*                 Similar to ‘T’ format, but use a
                                                                                 colon (‘:’) as separator between
                                                                                 the module name and the qualified
                                                                                 name.
                                                                                 
                                                                                 
     ‘N’                                   *note PyTypeObject: ab4.*             Get the fully qualified name of a
                                                                                 type; call
                                                                                 *note PyType_GetFullyQualifiedName(): 373.
                                                                                 
                                                                                 
     ‘#N’                                  *note PyTypeObject: ab4.*             Similar to ‘N’ format, but use a
                                                                                 colon (‘:’) as separator between
                                                                                 the module name and the qualified
                                                                                 name.
                                                                                 

          Nota: The width formatter unit is number of characters rather
          than bytes.  The precision formatter unit is number of bytes
          or ‘wchar_t’ items (if the length modifier ‘l’ is used) for
          ‘"%s"’ and ‘"%V"’ (if the ‘PyObject*’ argument is ‘NULL’), and
          a number of characters for ‘"%A"’, ‘"%U"’, ‘"%S"’, ‘"%R"’ and
          ‘"%V"’ (if the ‘PyObject*’ argument is not ‘NULL’).

          Nota: Unlike to C ‘printf()’ the ‘0’ flag has effect even when
          a precision is given for integer conversions (‘d’, ‘i’, ‘u’,
          ‘o’, ‘x’, or ‘X’).

     Alterado na versão 3.2: Suporte adicionado para ‘"%lld"’ e
     ‘"%llu"’.

     Alterado na versão 3.3: Support for ‘"%li"’, ‘"%lli"’ and ‘"%zi"’
     added.

     Alterado na versão 3.4: Support width and precision formatter for
     ‘"%s"’, ‘"%A"’, ‘"%U"’, ‘"%V"’, ‘"%S"’, ‘"%R"’ added.

     Alterado na versão 3.12: Support for conversion specifiers ‘o’ and
     ‘X’.  Support for length modifiers ‘j’ and ‘t’.  Length modifiers
     are now applied to all integer conversions.  Length modifier ‘l’ is
     now applied to conversion specifiers ‘s’ and ‘V’.  Support for
     variable width and precision ‘*’.  Support for flag ‘-’.

     An unrecognized format character now sets a *note SystemError: 575.
     In previous versions it caused all the rest of the format string to
     be copied as-is to the result string, and any extra arguments
     discarded.

     Alterado na versão 3.13: Support for ‘%T’, ‘%#T’, ‘%N’ and ‘%#N’
     formats added.

 -- C Função: *note PyObject: 339. *PyUnicode_FromFormatV (const char
          *format, va_list vargs)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Identical to *note PyUnicode_FromFormat(): 38a. except that
     it takes exactly two arguments.

 -- C Função: *note PyObject: 339. *PyUnicode_FromObject (PyObject *obj)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Copy an instance of a Unicode subtype to a new true Unicode
     object if necessary.  If 'obj' is already a true Unicode object
     (not a subtype), return a new *note strong reference: 33d. to the
     object.

     Objects other than Unicode or its subtypes will cause a *note
     TypeError: 2c3.

 -- C Função: *note PyObject: 339. *PyUnicode_FromOrdinal (int ordinal)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Create a Unicode Object from the given Unicode code point
     'ordinal'.

     The ordinal must be in ‘range(0x110000)’.  A *note ValueError: 202.
     is raised in the case it is not.

 -- C Função: *note PyObject: 339. *PyUnicode_FromEncodedObject
          (PyObject *obj, const char *encoding, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Decode an encoded object 'obj' to a Unicode object.

     *note bytes: 1c2, *note bytearray: 2ea. and other *note bytes-like
     objects: d4f. are decoded according to the given 'encoding' and
     using the error handling defined by 'errors'.  Both can be ‘NULL’
     to have the interface use the default values (see *note Built-in
     Codecs: 4ff7. for details).

     All other objects, including Unicode objects, cause a *note
     TypeError: 2c3. to be set.

     The API returns ‘NULL’ if there was an error.  The caller is
     responsible for decref’ing the returned objects.

 -- C Função: *note PyObject: 339. *PyUnicode_BuildEncodingMap (PyObject
          *string)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Return a mapping suitable for decoding a custom single-byte
     encoding.  Given a Unicode string 'string' of up to 256 characters
     representing an encoding table, returns either a compact internal
     mapping object or a dictionary mapping character ordinals to byte
     values.  Raises a *note TypeError: 2c3. and return ‘NULL’ on
     invalid input.  ..  versionadded:: 3.2

 -- C Função: const char *PyUnicode_GetDefaultEncoding (void)
     ' Parte da *note ABI Estável: 553.'  Return the name of the default
     string encoding, ‘"utf-8"’.  See *note sys.getdefaultencoding():
     45b9.

     The returned string does not need to be freed, and is valid until
     interpreter shutdown.

 -- C Função: *note Py_ssize_t: a69. PyUnicode_GetLength (PyObject
          *unicode)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Return the
     length of the Unicode object, in code points.

     On error, set an exception and return ‘-1’.

     Adicionado na versão 3.3.

 -- C Função: *note Py_ssize_t: a69. PyUnicode_CopyCharacters (PyObject
          *to, Py_ssize_t to_start, PyObject *from, Py_ssize_t
          from_start, Py_ssize_t how_many)

     Copy characters from one Unicode object into another.  This
     function performs character conversion when necessary and falls
     back to ‘memcpy()’ if possible.  Returns ‘-1’ and sets an exception
     on error, otherwise returns the number of copied characters.

     Adicionado na versão 3.3.

 -- C Função: *note Py_ssize_t: a69. PyUnicode_Fill (PyObject *unicode,
          Py_ssize_t start, Py_ssize_t length, Py_UCS4 fill_char)

     Fill a string with a character: write 'fill_char' into
     ‘unicode[start:start+length]’.

     Fail if 'fill_char' is bigger than the string maximum character, or
     if the string has more than 1 reference.

     Return the number of written character, or return ‘-1’ and raise an
     exception on error.

     Adicionado na versão 3.3.

 -- C Função: int PyUnicode_WriteChar (PyObject *unicode, Py_ssize_t
          index, Py_UCS4 character)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Write a
     character to a string.  The string must have been created through
     *note PyUnicode_New(): 8b0.  Since Unicode strings are supposed to
     be immutable, the string must not be shared, or have been hashed
     yet.

     This function checks that 'unicode' is a Unicode object, that the
     index is not out of bounds, and that the object can be modified
     safely (i.e.  that it its reference count is one).

     Return ‘0’ on success, ‘-1’ on error with an exception set.

     Adicionado na versão 3.3.

 -- C Função: *note Py_UCS4: 29b. PyUnicode_ReadChar (PyObject *unicode,
          Py_ssize_t index)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Read a
     character from a string.  This function checks that 'unicode' is a
     Unicode object and the index is not out of bounds, in contrast to
     *note PyUnicode_READ_CHAR(): 11c1, which performs no error
     checking.

     Return character on success, ‘-1’ on error with an exception set.

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 339. *PyUnicode_Substring (PyObject
          *unicode, Py_ssize_t start, Py_ssize_t end)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.7.'  Return a substring of 'unicode', from
     character index 'start' (included) to character index 'end'
     (excluded).  Negative indices are not supported.  On error, set an
     exception and return ‘NULL’.

     Adicionado na versão 3.3.

 -- C Função: *note Py_UCS4: 29b. *PyUnicode_AsUCS4 (PyObject *unicode,
          Py_UCS4 *buffer, Py_ssize_t buflen, int copy_null)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Copy the
     string 'unicode' into a UCS4 buffer, including a null character, if
     'copy_null' is set.  Returns ‘NULL’ and sets an exception on error
     (in particular, a *note SystemError: 575. if 'buflen' is smaller
     than the length of 'unicode').  'buffer' is returned on success.

     Adicionado na versão 3.3.

 -- C Função: *note Py_UCS4: 29b. *PyUnicode_AsUCS4Copy (PyObject
          *unicode)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Copy the
     string 'unicode' into a new UCS4 buffer that is allocated using
     *note PyMem_Malloc(): c81.  If this fails, ‘NULL’ is returned with
     a *note MemoryError: 15c5. set.  The returned buffer always has an
     extra null code point appended.

     Adicionado na versão 3.3.


File: python.info,  Node: Locale Encoding,  Next: File System Encoding,  Prev: Creating and accessing Unicode strings,  Up: Objetos Unicode

7.8.3.11 Locale Encoding
........................

The current locale encoding can be used to decode text from the
operating system.

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeLocaleAndSize (const
          char *str, Py_ssize_t length, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.7.'  Decode a string from UTF-8 on Android
     and VxWorks, or from the current locale encoding on other
     platforms.  The supported error handlers are ‘"strict"’ and
     ‘"surrogateescape"’ ( PEP 383(1)).  The decoder uses ‘"strict"’
     error handler if 'errors' is ‘NULL’.  'str' must end with a null
     character but cannot contain embedded null characters.

     Use *note PyUnicode_DecodeFSDefaultAndSize(): 4d9e. to decode a
     string from the *note filesystem encoding and error handler: 53b.

     This function ignores the *note Python UTF-8 Mode: 656.

     Ver também
     ..........

     The *note Py_DecodeLocale(): be0. function.

     Adicionado na versão 3.3.

     Alterado na versão 3.7: The function now also uses the current
     locale encoding for the ‘surrogateescape’ error handler, except on
     Android.  Previously, *note Py_DecodeLocale(): be0. was used for
     the ‘surrogateescape’, and the current locale encoding was used for
     ‘strict’.

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeLocale (const char
          *str, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.7.'  Similar to *note
     PyUnicode_DecodeLocaleAndSize(): be2, but compute the string length
     using ‘strlen()’.

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 339. *PyUnicode_EncodeLocale (PyObject
          *unicode, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.7.'  Encode a Unicode object to UTF-8 on
     Android and VxWorks, or to the current locale encoding on other
     platforms.  The supported error handlers are ‘"strict"’ and
     ‘"surrogateescape"’ ( PEP 383(2)).  The encoder uses ‘"strict"’
     error handler if 'errors' is ‘NULL’.  Return a *note bytes: 1c2.
     object.  'unicode' cannot contain embedded null characters.

     Use *note PyUnicode_EncodeFSDefault(): 1bca. to encode a string to
     the *note filesystem encoding and error handler: 53b.

     This function ignores the *note Python UTF-8 Mode: 656.

     Ver também
     ..........

     The *note Py_EncodeLocale(): be1. function.

     Adicionado na versão 3.3.

     Alterado na versão 3.7: The function now also uses the current
     locale encoding for the ‘surrogateescape’ error handler, except on
     Android.  Previously, *note Py_EncodeLocale(): be1. was used for
     the ‘surrogateescape’, and the current locale encoding was used for
     ‘strict’.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0383/

   (2) https://peps.python.org/pep-0383/


File: python.info,  Node: File System Encoding,  Next: wchar_t Support,  Prev: Locale Encoding,  Up: Objetos Unicode

7.8.3.12 File System Encoding
.............................

Functions encoding to and decoding from the *note filesystem encoding
and error handler: 53b. ( PEP 383(1) and PEP 529(2)).

To encode file names to *note bytes: 1c2. during argument parsing, the
‘"O&"’ converter should be used, passing ‘PyUnicode_FSConverter()’ as
the conversion function:

 -- C Função: int PyUnicode_FSConverter (PyObject *obj, void *result)
     ' Parte da *note ABI Estável: 553.'  *note PyArg_Parse* converter:
     8ad.: encode *note str: 44c. objects – obtained directly or through
     the *note os.PathLike: c6c. interface – to *note bytes: 1c2. using
     *note PyUnicode_EncodeFSDefault(): 1bca.; *note bytes: 1c2. objects
     are output as-is.  'result' must be an address of a C variable of
     type *note PyObject: 339.* (or *note PyBytesObject: 792.*).  On
     success, set the variable to a new *note strong reference: 33d. to
     a *note bytes object: 4fc8. which must be released when it is no
     longer used and return a non-zero value (*note
     Py_CLEANUP_SUPPORTED: 4ec8.).  Embedded null bytes are not allowed
     in the result.  On failure, return ‘0’ with an exception set.

     If 'obj' is ‘NULL’, the function releases a strong reference stored
     in the variable referred by 'result' and returns ‘1’.

     Adicionado na versão 3.1.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

To decode file names to *note str: 44c. during argument parsing, the
‘"O&"’ converter should be used, passing ‘PyUnicode_FSDecoder()’ as the
conversion function:

 -- C Função: int PyUnicode_FSDecoder (PyObject *obj, void *result)
     ' Parte da *note ABI Estável: 553.'  *note PyArg_Parse* converter:
     8ad.: decode *note bytes: 1c2. objects – obtained either directly
     or indirectly through the *note os.PathLike: c6c. interface – to
     *note str: 44c. using *note PyUnicode_DecodeFSDefaultAndSize():
     4d9e.; *note str: 44c. objects are output as-is.  'result' must be
     an address of a C variable of type *note PyObject: 339.* (or *note
     PyUnicodeObject: 794.*).  On success, set the variable to a new
     *note strong reference: 33d. to a *note Unicode object: 4fda. which
     must be released when it is no longer used and return a non-zero
     value (*note Py_CLEANUP_SUPPORTED: 4ec8.).  Embedded null
     characters are not allowed in the result.  On failure, return ‘0’
     with an exception set.

     If 'obj' is ‘NULL’, release the strong reference to the object
     referred to by 'result' and return ‘1’.

     Adicionado na versão 3.2.

     Alterado na versão 3.6: Aceita um *note objeto caminho ou similar:
     2a0.

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeFSDefaultAndSize
          (const char *str, Py_ssize_t size)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Decode a string from the *note filesystem encoding and error
     handler: 53b.

     If you need to decode a string from the current locale encoding,
     use *note PyUnicode_DecodeLocaleAndSize(): be2.

     Ver também
     ..........

     The *note Py_DecodeLocale(): be0. function.

     Alterado na versão 3.6: The *note filesystem error handler: 53b. is
     now used.

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeFSDefault (const
          char *str)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Decode a null-terminated string from the *note filesystem
     encoding and error handler: 53b.

     If the string length is known, use *note
     PyUnicode_DecodeFSDefaultAndSize(): 4d9e.

     Alterado na versão 3.6: The *note filesystem error handler: 53b. is
     now used.

 -- C Função: *note PyObject: 339. *PyUnicode_EncodeFSDefault (PyObject
          *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Encode a Unicode object to the *note filesystem encoding and
     error handler: 53b, and return *note bytes: 1c2.  Note that the
     resulting *note bytes: 1c2. object can contain null bytes.

     If you need to encode a string to the current locale encoding, use
     *note PyUnicode_EncodeLocale(): be3.

     Ver também
     ..........

     The *note Py_EncodeLocale(): be1. function.

     Adicionado na versão 3.2.

     Alterado na versão 3.6: The *note filesystem error handler: 53b. is
     now used.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0383/

   (2) https://peps.python.org/pep-0529/


File: python.info,  Node: wchar_t Support,  Prev: File System Encoding,  Up: Objetos Unicode

7.8.3.13 wchar_t Support
........................

‘wchar_t’ support for platforms which support it:

 -- C Função: *note PyObject: 339. *PyUnicode_FromWideChar (const
          wchar_t *wstr, Py_ssize_t size)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Create a Unicode object from the ‘wchar_t’ buffer 'wstr' of
     the given 'size'.  Passing ‘-1’ as the 'size' indicates that the
     function must itself compute the length, using ‘wcslen()’.  Return
     ‘NULL’ on failure.

 -- C Função: *note Py_ssize_t: a69. PyUnicode_AsWideChar (PyObject
          *unicode, wchar_t *wstr, Py_ssize_t size)
     ' Parte da *note ABI Estável: 553.'  Copy the Unicode object
     contents into the ‘wchar_t’ buffer 'wstr'.  At most 'size'
     ‘wchar_t’ characters are copied (excluding a possibly trailing null
     termination character).  Return the number of ‘wchar_t’ characters
     copied or ‘-1’ in case of an error.

     When 'wstr' is ‘NULL’, instead return the 'size' that would be
     required to store all of 'unicode' including a terminating null.

     Note that the resulting wchar_t* string may or may not be
     null-terminated.  It is the responsibility of the caller to make
     sure that the wchar_t* string is null-terminated in case this is
     required by the application.  Also, note that the wchar_t* string
     might contain null characters, which would cause the string to be
     truncated when used with most C functions.

 -- C Função: wchar_t *PyUnicode_AsWideCharString (PyObject *unicode,
          Py_ssize_t *size)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Convert
     the Unicode object to a wide character string.  The output string
     always ends with a null character.  If 'size' is not ‘NULL’, write
     the number of wide characters (excluding the trailing null
     termination character) into '*size'.  Note that the resulting
     ‘wchar_t’ string might contain null characters, which would cause
     the string to be truncated when used with most C functions.  If
     'size' is ‘NULL’ and the wchar_t* string contains null characters a
     *note ValueError: 202. is raised.

     Returns a buffer allocated by *note PyMem_New: 156d. (use *note
     PyMem_Free(): 148a. to free it) on success.  On error, returns
     ‘NULL’ and '*size' is undefined.  Raises a *note MemoryError: 15c5.
     if memory allocation is failed.

     Adicionado na versão 3.2.

     Alterado na versão 3.7: Raises a *note ValueError: 202. if 'size'
     is ‘NULL’ and the wchar_t* string contains null characters.


File: python.info,  Node: Built-in Codecs,  Next: Methods and Slot Functions,  Prev: Objetos Unicode,  Up: Objetos Unicode e Codecs

7.8.3.14 Built-in Codecs
........................

Python provides a set of built-in codecs which are written in C for
speed.  All of these codecs are directly usable via the following
functions.

Many of the following APIs take two arguments encoding and errors, and
they have the same semantics as the ones of the built-in *note str():
44c. string object constructor.

Setting encoding to ‘NULL’ causes the default encoding to be used which
is UTF-8.  The file system calls should use *note
PyUnicode_FSConverter(): d3b. for encoding file names.  This uses the
*note filesystem encoding and error handler: 53b. internally.

Error handling is set by errors which may also be set to ‘NULL’ meaning
to use the default handling defined for the codec.  Default error
handling for all built-in codecs is “strict” (*note ValueError: 202. is
raised).

The codecs all use a similar interface.  Only deviations from the
following generic ones are documented for simplicity.

* Menu:

* Generic Codecs::
* UTF-8 Codecs::
* UTF-32 Codecs::
* UTF-16 Codecs::
* UTF-7 Codecs::
* Unicode-Escape Codecs::
* Raw-Unicode-Escape Codecs::
* Latin-1 Codecs::
* ASCII Codecs::
* Character Map Codecs::
* MBCS codecs for Windows::


File: python.info,  Node: Generic Codecs,  Next: UTF-8 Codecs,  Up: Built-in Codecs

7.8.3.15 Generic Codecs
.......................

These are the generic codec APIs:

 -- C Função: *note PyObject: 339. *PyUnicode_Decode (const char *str,
          Py_ssize_t size, const char *encoding, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Create a Unicode object by decoding 'size' bytes of the
     encoded string 'str'.  'encoding' and 'errors' have the same
     meaning as the parameters of the same name in the *note str(): 44c.
     built-in function.  The codec to be used is looked up using the
     Python codec registry.  Return ‘NULL’ if an exception was raised by
     the codec.

 -- C Função: *note PyObject: 339. *PyUnicode_AsEncodedString (PyObject
          *unicode, const char *encoding, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Encode a Unicode object and return the result as Python
     bytes object.  'encoding' and 'errors' have the same meaning as the
     parameters of the same name in the Unicode *note encode(): 8db.
     method.  The codec to be used is looked up using the Python codec
     registry.  Return ‘NULL’ if an exception was raised by the codec.


File: python.info,  Node: UTF-8 Codecs,  Next: UTF-32 Codecs,  Prev: Generic Codecs,  Up: Built-in Codecs

7.8.3.16 UTF-8 Codecs
.....................

These are the UTF-8 codec APIs:

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeUTF8 (const char
          *str, Py_ssize_t size, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Create a Unicode object by decoding 'size' bytes of the
     UTF-8 encoded string 'str'.  Return ‘NULL’ if an exception was
     raised by the codec.

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeUTF8Stateful (const
          char *str, Py_ssize_t size, const char *errors, Py_ssize_t
          *consumed)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  If 'consumed' is ‘NULL’, behave like *note
     PyUnicode_DecodeUTF8(): 4daa.  If 'consumed' is not ‘NULL’,
     trailing incomplete UTF-8 byte sequences will not be treated as an
     error.  Those bytes will not be decoded and the number of bytes
     that have been decoded will be stored in 'consumed'.

 -- C Função: *note PyObject: 339. *PyUnicode_AsUTF8String (PyObject
          *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Encode a Unicode object using UTF-8 and return the result as
     Python bytes object.  Error handling is “strict”.  Return ‘NULL’ if
     an exception was raised by the codec.

     The function fails if the string contains surrogate code points
     (‘U+D800’ - ‘U+DFFF’).

 -- C Função: const char *PyUnicode_AsUTF8AndSize (PyObject *unicode,
          Py_ssize_t *size)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Return a
     pointer to the UTF-8 encoding of the Unicode object, and store the
     size of the encoded representation (in bytes) in 'size'.  The
     'size' argument can be ‘NULL’; in this case no size will be stored.
     The returned buffer always has an extra null byte appended (not
     included in 'size'), regardless of whether there are any other null
     code points.

     On error, set an exception, set 'size' to ‘-1’ (if it’s not NULL)
     and return ‘NULL’.

     The function fails if the string contains surrogate code points
     (‘U+D800’ - ‘U+DFFF’).

     This caches the UTF-8 representation of the string in the Unicode
     object, and subsequent calls will return a pointer to the same
     buffer.  The caller is not responsible for deallocating the buffer.
     The buffer is deallocated and pointers to it become invalid when
     the Unicode object is garbage collected.

     Adicionado na versão 3.3.

     Alterado na versão 3.7: The return type is now ‘const char *’
     rather of ‘char *’.

     Alterado na versão 3.10: This function is a part of the *note
     limited API: 396.

 -- C Função: const char *PyUnicode_AsUTF8 (PyObject *unicode)

     As *note PyUnicode_AsUTF8AndSize(): 89d, but does not store the
     size.

          Aviso: This function does not have any special behavior for
          null characters(1) embedded within 'unicode'.  As a result,
          strings containing null characters will remain in the returned
          string, which some C functions might interpret as the end of
          the string, leading to truncation.  If truncation is an issue,
          it is recommended to use *note PyUnicode_AsUTF8AndSize(): 89d.
          instead.

     Adicionado na versão 3.3.

     Alterado na versão 3.7: The return type is now ‘const char *’
     rather of ‘char *’.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Null_character


File: python.info,  Node: UTF-32 Codecs,  Next: UTF-16 Codecs,  Prev: UTF-8 Codecs,  Up: Built-in Codecs

7.8.3.17 UTF-32 Codecs
......................

These are the UTF-32 codec APIs:

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeUTF32 (const char
          *str, Py_ssize_t size, const char *errors, int *byteorder)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Decode 'size' bytes from a UTF-32 encoded buffer string and
     return the corresponding Unicode object.  'errors' (if non-‘NULL’)
     defines the error handling.  It defaults to “strict”.

     If 'byteorder' is non-‘NULL’, the decoder starts decoding using the
     given byte order:

          *byteorder == -1: little endian
          *byteorder == 0:  native order
          *byteorder == 1:  big endian

     If ‘*byteorder’ is zero, and the first four bytes of the input data
     are a byte order mark (BOM), the decoder switches to this byte
     order and the BOM is not copied into the resulting Unicode string.
     If ‘*byteorder’ is ‘-1’ or ‘1’, any byte order mark is copied to
     the output.

     After completion, '*byteorder' is set to the current byte order at
     the end of input data.

     If 'byteorder' is ‘NULL’, the codec starts in native order mode.

     Return ‘NULL’ if an exception was raised by the codec.

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeUTF32Stateful (const
          char *str, Py_ssize_t size, const char *errors, int
          *byteorder, Py_ssize_t *consumed)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  If 'consumed' is ‘NULL’, behave like *note
     PyUnicode_DecodeUTF32(): 4da6.  If 'consumed' is not ‘NULL’, *note
     PyUnicode_DecodeUTF32Stateful(): 4da7. will not treat trailing
     incomplete UTF-32 byte sequences (such as a number of bytes not
     divisible by four) as an error.  Those bytes will not be decoded
     and the number of bytes that have been decoded will be stored in
     'consumed'.

 -- C Função: *note PyObject: 339. *PyUnicode_AsUTF32String (PyObject
          *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Return a Python byte string using the UTF-32 encoding in
     native byte order.  The string always starts with a BOM mark.
     Error handling is “strict”.  Return ‘NULL’ if an exception was
     raised by the codec.


File: python.info,  Node: UTF-16 Codecs,  Next: UTF-7 Codecs,  Prev: UTF-32 Codecs,  Up: Built-in Codecs

7.8.3.18 UTF-16 Codecs
......................

These are the UTF-16 codec APIs:

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeUTF16 (const char
          *str, Py_ssize_t size, const char *errors, int *byteorder)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Decode 'size' bytes from a UTF-16 encoded buffer string and
     return the corresponding Unicode object.  'errors' (if non-‘NULL’)
     defines the error handling.  It defaults to “strict”.

     If 'byteorder' is non-‘NULL’, the decoder starts decoding using the
     given byte order:

          *byteorder == -1: little endian
          *byteorder == 0:  native order
          *byteorder == 1:  big endian

     If ‘*byteorder’ is zero, and the first two bytes of the input data
     are a byte order mark (BOM), the decoder switches to this byte
     order and the BOM is not copied into the resulting Unicode string.
     If ‘*byteorder’ is ‘-1’ or ‘1’, any byte order mark is copied to
     the output (where it will result in either a ‘\ufeff’ or a ‘\ufffe’
     character).

     After completion, ‘*byteorder’ is set to the current byte order at
     the end of input data.

     If 'byteorder' is ‘NULL’, the codec starts in native order mode.

     Return ‘NULL’ if an exception was raised by the codec.

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeUTF16Stateful (const
          char *str, Py_ssize_t size, const char *errors, int
          *byteorder, Py_ssize_t *consumed)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  If 'consumed' is ‘NULL’, behave like *note
     PyUnicode_DecodeUTF16(): 4da4.  If 'consumed' is not ‘NULL’, *note
     PyUnicode_DecodeUTF16Stateful(): 4da5. will not treat trailing
     incomplete UTF-16 byte sequences (such as an odd number of bytes or
     a split surrogate pair) as an error.  Those bytes will not be
     decoded and the number of bytes that have been decoded will be
     stored in 'consumed'.

 -- C Função: *note PyObject: 339. *PyUnicode_AsUTF16String (PyObject
          *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Return a Python byte string using the UTF-16 encoding in
     native byte order.  The string always starts with a BOM mark.
     Error handling is “strict”.  Return ‘NULL’ if an exception was
     raised by the codec.


File: python.info,  Node: UTF-7 Codecs,  Next: Unicode-Escape Codecs,  Prev: UTF-16 Codecs,  Up: Built-in Codecs

7.8.3.19 UTF-7 Codecs
.....................

These are the UTF-7 codec APIs:

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeUTF7 (const char
          *str, Py_ssize_t size, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Create a Unicode object by decoding 'size' bytes of the
     UTF-7 encoded string 'str'.  Return ‘NULL’ if an exception was
     raised by the codec.

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeUTF7Stateful (const
          char *str, Py_ssize_t size, const char *errors, Py_ssize_t
          *consumed)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  If 'consumed' is ‘NULL’, behave like *note
     PyUnicode_DecodeUTF7(): 4da8.  If 'consumed' is not ‘NULL’,
     trailing incomplete UTF-7 base-64 sections will not be treated as
     an error.  Those bytes will not be decoded and the number of bytes
     that have been decoded will be stored in 'consumed'.


File: python.info,  Node: Unicode-Escape Codecs,  Next: Raw-Unicode-Escape Codecs,  Prev: UTF-7 Codecs,  Up: Built-in Codecs

7.8.3.20 Unicode-Escape Codecs
..............................

These are the “Unicode Escape” codec APIs:

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeUnicodeEscape (const
          char *str, Py_ssize_t size, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Create a Unicode object by decoding 'size' bytes of the
     Unicode-Escape encoded string 'str'.  Return ‘NULL’ if an exception
     was raised by the codec.

 -- C Função: *note PyObject: 339. *PyUnicode_AsUnicodeEscapeString
          (PyObject *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Encode a Unicode object using Unicode-Escape and return the
     result as a bytes object.  Error handling is “strict”.  Return
     ‘NULL’ if an exception was raised by the codec.


File: python.info,  Node: Raw-Unicode-Escape Codecs,  Next: Latin-1 Codecs,  Prev: Unicode-Escape Codecs,  Up: Built-in Codecs

7.8.3.21 Raw-Unicode-Escape Codecs
..................................

These are the “Raw Unicode Escape” codec APIs:

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeRawUnicodeEscape
          (const char *str, Py_ssize_t size, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Create a Unicode object by decoding 'size' bytes of the
     Raw-Unicode-Escape encoded string 'str'.  Return ‘NULL’ if an
     exception was raised by the codec.

 -- C Função: *note PyObject: 339. *PyUnicode_AsRawUnicodeEscapeString
          (PyObject *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Encode a Unicode object using Raw-Unicode-Escape and return
     the result as a bytes object.  Error handling is “strict”.  Return
     ‘NULL’ if an exception was raised by the codec.


File: python.info,  Node: Latin-1 Codecs,  Next: ASCII Codecs,  Prev: Raw-Unicode-Escape Codecs,  Up: Built-in Codecs

7.8.3.22 Latin-1 Codecs
.......................

These are the Latin-1 codec APIs: Latin-1 corresponds to the first 256
Unicode ordinals and only these are accepted by the codecs during
encoding.

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeLatin1 (const char
          *str, Py_ssize_t size, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Create a Unicode object by decoding 'size' bytes of the
     Latin-1 encoded string 'str'.  Return ‘NULL’ if an exception was
     raised by the codec.

 -- C Função: *note PyObject: 339. *PyUnicode_AsLatin1String (PyObject
          *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Encode a Unicode object using Latin-1 and return the result
     as Python bytes object.  Error handling is “strict”.  Return ‘NULL’
     if an exception was raised by the codec.


File: python.info,  Node: ASCII Codecs,  Next: Character Map Codecs,  Prev: Latin-1 Codecs,  Up: Built-in Codecs

7.8.3.23 ASCII Codecs
.....................

These are the ASCII codec APIs.  Only 7-bit ASCII data is accepted.  All
other codes generate errors.

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeASCII (const char
          *str, Py_ssize_t size, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Create a Unicode object by decoding 'size' bytes of the
     ASCII encoded string 'str'.  Return ‘NULL’ if an exception was
     raised by the codec.

 -- C Função: *note PyObject: 339. *PyUnicode_AsASCIIString (PyObject
          *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Encode a Unicode object using ASCII and return the result as
     Python bytes object.  Error handling is “strict”.  Return ‘NULL’ if
     an exception was raised by the codec.


File: python.info,  Node: Character Map Codecs,  Next: MBCS codecs for Windows,  Prev: ASCII Codecs,  Up: Built-in Codecs

7.8.3.24 Character Map Codecs
.............................

This codec is special in that it can be used to implement many different
codecs (and this is in fact what was done to obtain most of the standard
codecs included in the ‘encodings’ package).  The codec uses mappings to
encode and decode characters.  The mapping objects provided must support
the *note __getitem__(): 283. mapping interface; dictionaries and
sequences work well.

These are the mapping codec APIs:

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeCharmap (const char
          *str, Py_ssize_t length, PyObject *mapping, const char
          *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Create a Unicode object by decoding 'size' bytes of the
     encoded string 'str' using the given 'mapping' object.  Return
     ‘NULL’ if an exception was raised by the codec.

     If 'mapping' is ‘NULL’, Latin-1 decoding will be applied.  Else
     'mapping' must map bytes ordinals (integers in the range from 0 to
     255) to Unicode strings, integers (which are then interpreted as
     Unicode ordinals) or ‘None’.  Unmapped data bytes – ones which
     cause a *note LookupError: 2367, as well as ones which get mapped
     to ‘None’, ‘0xFFFE’ or ‘'\ufffe'’, are treated as undefined
     mappings and cause an error.

 -- C Função: *note PyObject: 339. *PyUnicode_AsCharmapString (PyObject
          *unicode, PyObject *mapping)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Encode a Unicode object using the given 'mapping' object and
     return the result as a bytes object.  Error handling is “strict”.
     Return ‘NULL’ if an exception was raised by the codec.

     The 'mapping' object must map Unicode ordinal integers to bytes
     objects, integers in the range from 0 to 255 or ‘None’.  Unmapped
     character ordinals (ones which cause a *note LookupError: 2367.) as
     well as mapped to ‘None’ are treated as “undefined mapping” and
     cause an error.

The following codec API is special in that maps Unicode to Unicode.

 -- C Função: *note PyObject: 339. *PyUnicode_Translate (PyObject
          *unicode, PyObject *table, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Translate a string by applying a character mapping table to
     it and return the resulting Unicode object.  Return ‘NULL’ if an
     exception was raised by the codec.

     The mapping table must map Unicode ordinal integers to Unicode
     ordinal integers or ‘None’ (causing deletion of the character).

     Mapping tables need only provide the *note __getitem__(): 283.
     interface; dictionaries and sequences work well.  Unmapped
     character ordinals (ones which cause a *note LookupError: 2367.)
     are left untouched and are copied as-is.

     'errors' has the usual meaning for codecs.  It may be ‘NULL’ which
     indicates to use the default error handling.


File: python.info,  Node: MBCS codecs for Windows,  Prev: Character Map Codecs,  Up: Built-in Codecs

7.8.3.25 MBCS codecs for Windows
................................

These are the MBCS codec APIs.  They are currently only available on
Windows and use the Win32 MBCS converters to implement the conversions.
Note that MBCS (or DBCS) is a class of encodings, not just one.  The
target encoding is defined by the user settings on the machine running
the codec.

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeMBCS (const char
          *str, Py_ssize_t size, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. on Windows desde a versão 3.7.'  Create a Unicode object by
     decoding 'size' bytes of the MBCS encoded string 'str'.  Return
     ‘NULL’ if an exception was raised by the codec.

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeMBCSStateful (const
          char *str, Py_ssize_t size, const char *errors, Py_ssize_t
          *consumed)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. on Windows desde a versão 3.7.'  If 'consumed' is ‘NULL’,
     behave like *note PyUnicode_DecodeMBCS(): 4da1.  If 'consumed' is
     not ‘NULL’, *note PyUnicode_DecodeMBCSStateful(): 4da2. will not
     decode trailing lead byte and the number of bytes that have been
     decoded will be stored in 'consumed'.

 -- C Função: *note PyObject: 339. *PyUnicode_DecodeCodePageStateful
          (int code_page, const char *str, Py_ssize_t size, const char
          *errors, Py_ssize_t *consumed)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. on Windows desde a versão 3.7.'  Similar to *note
     PyUnicode_DecodeMBCSStateful(): 4da2, except uses the code page
     specified by 'code_page'.

 -- C Função: *note PyObject: 339. *PyUnicode_AsMBCSString (PyObject
          *unicode)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. on Windows desde a versão 3.7.'  Encode a Unicode object using
     MBCS and return the result as Python bytes object.  Error handling
     is “strict”.  Return ‘NULL’ if an exception was raised by the
     codec.

 -- C Função: *note PyObject: 339. *PyUnicode_EncodeCodePage (int
          code_page, PyObject *unicode, const char *errors)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. on Windows desde a versão 3.7.'  Encode the Unicode object
     using the specified code page and return a Python bytes object.
     Return ‘NULL’ if an exception was raised by the codec.  Use
     ‘CP_ACP’ code page to get the MBCS encoder.

     Adicionado na versão 3.3.


File: python.info,  Node: Methods and Slot Functions,  Prev: Built-in Codecs,  Up: Objetos Unicode e Codecs

7.8.3.26 Methods and Slot Functions
...................................

The following APIs are capable of handling Unicode objects and strings
on input (we refer to them as strings in the descriptions) and return
Unicode objects or integers as appropriate.

They all return ‘NULL’ or ‘-1’ if an exception occurs.

 -- C Função: *note PyObject: 339. *PyUnicode_Concat (PyObject *left,
          PyObject *right)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Concat two strings giving a new Unicode string.

 -- C Função: *note PyObject: 339. *PyUnicode_Split (PyObject *unicode,
          PyObject *sep, Py_ssize_t maxsplit)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Split a string giving a list of Unicode strings.  If 'sep'
     is ‘NULL’, splitting will be done at all whitespace substrings.
     Otherwise, splits occur at the given separator.  At most 'maxsplit'
     splits will be done.  If negative, no limit is set.  Separators are
     not included in the resulting list.

     On error, return ‘NULL’ with an exception set.

     Equivalent to *note str.split(): ed9.

 -- C Função: *note PyObject: 339. *PyUnicode_RSplit (PyObject *unicode,
          PyObject *sep, Py_ssize_t maxsplit)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Similar to *note PyUnicode_Split(): 4db6, but splitting will
     be done beginning at the end of the string.

     On error, return ‘NULL’ with an exception set.

     Equivalent to *note str.rsplit(): 1297.

 -- C Função: *note PyObject: 339. *PyUnicode_Splitlines (PyObject
          *unicode, int keepends)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Split a Unicode string at line breaks, returning a list of
     Unicode strings.  CRLF is considered to be one line break.  If
     'keepends' is ‘0’, the Line break characters are not included in
     the resulting strings.

 -- C Função: *note PyObject: 339. *PyUnicode_Partition (PyObject
          *unicode, PyObject *sep)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Split a Unicode string at the first occurrence of 'sep', and
     return a 3-tuple containing the part before the separator, the
     separator itself, and the part after the separator.  If the
     separator is not found, return a 3-tuple containing the string
     itself, followed by two empty strings.

     'sep' must not be empty.

     On error, return ‘NULL’ with an exception set.

     Equivalent to *note str.partition(): eda.

 -- C Função: *note PyObject: 339. *PyUnicode_RPartition (PyObject
          *unicode, PyObject *sep)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Similar to *note PyUnicode_Partition(): 1655, but split a
     Unicode string at the last occurrence of 'sep'.  If the separator
     is not found, return a 3-tuple containing two empty strings,
     followed by the string itself.

     'sep' must not be empty.

     On error, return ‘NULL’ with an exception set.

     Equivalent to *note str.rpartition(): 129a.

 -- C Função: *note PyObject: 339. *PyUnicode_Join (PyObject *separator,
          PyObject *seq)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Join a sequence of strings using the given 'separator' and
     return the resulting Unicode string.

 -- C Função: *note Py_ssize_t: a69. PyUnicode_Tailmatch (PyObject
          *unicode, PyObject *substr, Py_ssize_t start, Py_ssize_t end,
          int direction)
     ' Parte da *note ABI Estável: 553.'  Return ‘1’ if 'substr' matches
     ‘unicode[start:end]’ at the given tail end ('direction' == ‘-1’
     means to do a prefix match, 'direction' == ‘1’ a suffix match), ‘0’
     otherwise.  Return ‘-1’ if an error occurred.

 -- C Função: *note Py_ssize_t: a69. PyUnicode_Find (PyObject *unicode,
          PyObject *substr, Py_ssize_t start, Py_ssize_t end, int
          direction)
     ' Parte da *note ABI Estável: 553.'  Return the first position of
     'substr' in ‘unicode[start:end]’ using the given 'direction'
     ('direction' == ‘1’ means to do a forward search, 'direction' ==
     ‘-1’ a backward search).  The return value is the index of the
     first match; a value of ‘-1’ indicates that no match was found, and
     ‘-2’ indicates that an error occurred and an exception has been
     set.

 -- C Função: *note Py_ssize_t: a69. PyUnicode_FindChar (PyObject
          *unicode, Py_UCS4 ch, Py_ssize_t start, Py_ssize_t end, int
          direction)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Return the
     first position of the character 'ch' in ‘unicode[start:end]’ using
     the given 'direction' ('direction' == ‘1’ means to do a forward
     search, 'direction' == ‘-1’ a backward search).  The return value
     is the index of the first match; a value of ‘-1’ indicates that no
     match was found, and ‘-2’ indicates that an error occurred and an
     exception has been set.

     Adicionado na versão 3.3.

     Alterado na versão 3.7: 'start' and 'end' are now adjusted to
     behave like ‘unicode[start:end]’.

 -- C Função: *note Py_ssize_t: a69. PyUnicode_Count (PyObject *unicode,
          PyObject *substr, Py_ssize_t start, Py_ssize_t end)
     ' Parte da *note ABI Estável: 553.'  Return the number of
     non-overlapping occurrences of 'substr' in ‘unicode[start:end]’.
     Return ‘-1’ if an error occurred.

 -- C Função: *note PyObject: 339. *PyUnicode_Replace (PyObject
          *unicode, PyObject *substr, PyObject *replstr, Py_ssize_t
          maxcount)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Replace at most 'maxcount' occurrences of 'substr' in
     'unicode' with 'replstr' and return the resulting Unicode object.
     'maxcount' == ‘-1’ means replace all occurrences.

 -- C Função: int PyUnicode_Compare (PyObject *left, PyObject *right)
     ' Parte da *note ABI Estável: 553.'  Compare two strings and return
     ‘-1’, ‘0’, ‘1’ for less than, equal, and greater than,
     respectively.

     This function returns ‘-1’ upon failure, so one should call *note
     PyErr_Occurred(): 1a3b. to check for errors.

 -- C Função: int PyUnicode_EqualToUTF8AndSize (PyObject *unicode, const
          char *string, Py_ssize_t size)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Compare a
     Unicode object with a char buffer which is interpreted as being
     UTF-8 or ASCII encoded and return true (‘1’) if they are equal, or
     false (‘0’) otherwise.  If the Unicode object contains surrogate
     code points (‘U+D800’ - ‘U+DFFF’) or the C string is not valid
     UTF-8, false (‘0’) is returned.

     This function does not raise exceptions.

     Adicionado na versão 3.13.

 -- C Função: int PyUnicode_EqualToUTF8 (PyObject *unicode, const char
          *string)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Similar
     to *note PyUnicode_EqualToUTF8AndSize(): 376, but compute 'string'
     length using ‘strlen()’.  If the Unicode object contains null
     characters, false (‘0’) is returned.

     Adicionado na versão 3.13.

 -- C Função: int PyUnicode_CompareWithASCIIString (PyObject *unicode,
          const char *string)
     ' Parte da *note ABI Estável: 553.'  Compare a Unicode object,
     'unicode', with 'string' and return ‘-1’, ‘0’, ‘1’ for less than,
     equal, and greater than, respectively.  It is best to pass only
     ASCII-encoded strings, but the function interprets the input string
     as ISO-8859-1 if it contains non-ASCII characters.

     This function does not raise exceptions.

 -- C Função: *note PyObject: 339. *PyUnicode_RichCompare (PyObject
          *left, PyObject *right, int op)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Rich compare two Unicode strings and return one of the
     following:

        * ‘NULL’ in case an exception was raised

        * *note Py_True: 4f9a. or *note Py_False: 4f99. for successful
          comparisons

        * *note Py_NotImplemented: 4f0f. in case the type combination is
          unknown

     Possible values for 'op' are *note Py_GT: 4f16, *note Py_GE: 4f17,
     *note Py_EQ: 4f14, *note Py_NE: 4f15, *note Py_LT: 4f12, and *note
     Py_LE: 4f13.

 -- C Função: *note PyObject: 339. *PyUnicode_Format (PyObject *format,
          PyObject *args)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Return a new string object from 'format' and 'args'; this is
     analogous to ‘format % args’.

 -- C Função: int PyUnicode_Contains (PyObject *unicode, PyObject
          *substr)
     ' Parte da *note ABI Estável: 553.'  Check whether 'substr' is
     contained in 'unicode' and return true or false accordingly.

     'substr' has to coerce to a one element Unicode string.  ‘-1’ is
     returned if there was an error.

 -- C Função: void PyUnicode_InternInPlace (PyObject **p_unicode)
     ' Parte da *note ABI Estável: 553.'  Intern the argument **note
     p_unicode: 8b6. in place.  The argument must be the address of a
     pointer variable pointing to a Python Unicode string object.  If
     there is an existing interned string that is the same as **note
     p_unicode: 8b6, it sets **note p_unicode: 8b6. to it (releasing the
     reference to the old string object and creating a new *note strong
     reference: 33d. to the interned string object), otherwise it leaves
     **note p_unicode: 8b6. alone and interns it.

     (Clarification: even though there is a lot of talk about
     references, think of this function as reference-neutral.  You must
     own the object you pass in; after the call you no longer own the
     passed-in reference, but you newly own the result.)

     This function never raises an exception.  On error, it leaves its
     argument unchanged without interning it.

     Instances of subclasses of *note str: 44c. may not be interned,
     that is, *note PyUnicode_CheckExact: 4fde.(**note p_unicode: 8b6.)
     must be true.  If it is not, then – as with any other error – the
     argument is left unchanged.

     Note that interned strings are not “immortal”.  You must keep a
     reference to the result to benefit from interning.

 -- C Função: *note PyObject: 339. *PyUnicode_InternFromString (const
          char *str)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  A combination of *note PyUnicode_FromString(): 4db1. and
     *note PyUnicode_InternInPlace(): 8b6, meant for statically
     allocated strings.

     Return a new (“owned”) reference to either a new Unicode string
     object that has been interned, or an earlier interned string object
     with the same value.

     Python may keep a reference to the result, or make it *note
     immortal: 45bb, preventing it from being garbage-collected
     promptly.  For interning an unbounded number of different strings,
     such as ones coming from user input, prefer calling *note
     PyUnicode_FromString(): 4db1. and *note PyUnicode_InternInPlace():
     8b6. directly.


File: python.info,  Node: Objeto tupla,  Next: Objetos sequência de estrutura,  Prev: Objetos Unicode e Codecs,  Up: Objetos Sequência

7.8.3.27 Objeto tupla
.....................

 -- C Tipo: type PyTupleObject

     Este subtipo de *note PyObject: 339. representa um objeto tupla em
     Python.

 -- C Variável: *note PyTypeObject: ab4. PyTuple_Type
     ' Parte da *note ABI Estável: 553.'  Esta instância de *note
     PyTypeObject: ab4. representa o tipo tupla de Python; é o mesmo
     objeto que *note tuple: 370. na camada Python.

 -- C Função: int PyTuple_Check (PyObject *p)

     Retorna verdadeiro se 'p' é um objeto tupla ou uma instância de um
     subtipo do tipo tupla.  Esta função sempre tem sucesso.

 -- C Função: int PyTuple_CheckExact (PyObject *p)

     Retorna verdadeiro se 'p' é um objeto tupla, mas não uma instância
     de um subtipo do tipo tupla.  Esta função sempre tem sucesso.

 -- C Função: *note PyObject: 339. *PyTuple_New (Py_ssize_t len)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo objeto tupla de tamanho 'len', ou ‘NULL’ com
     uma exceção definida em caso de falha.

 -- C Função: *note PyObject: 339. *PyTuple_Pack (Py_ssize_t n, ...)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo objeto tupla de tamanho 'n', ou ‘NULL’ com
     uma exceção em caso de falha.  Os valores da tupla são
     inicializados para os 'n' argumentos C subsequentes apontando para
     objetos Python.  ‘`PyTuple_Pack(2, a, b)’ é equivalente a
     ‘Py_BuildValue("(OO)", a, b)’.

 -- C Função: *note Py_ssize_t: a69. PyTuple_Size (PyObject *p)
     ' Parte da *note ABI Estável: 553.'  Pega um ponteiro para um
     objeto tupla e retorna o tamanho dessa tupla.  No erro, retorna
     ‘-1’ com uma exceção definida.

 -- C Função: *note Py_ssize_t: a69. PyTuple_GET_SIZE (PyObject *p)

     Como *note PyTuple_Size(): 4d77, mas sem verificação de erro.

 -- C Função: *note PyObject: 339. *PyTuple_GetItem (PyObject *p,
          Py_ssize_t pos)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'  Retorna o objeto na posição 'pos' na tupla apontada
     por 'p'.  Se 'pos' estiver fora dos limites, retorna ‘NULL’ e
     define uma exceção *note IndexError: 157e.

     A referência retornada é emprestada da tupla 'p' (ou seja: ela só é
     válida enquanto você mantém uma referência a 'p').  Para obter uma
     *note referência forte: 33d, use *note
     Py_NewRef(PyTuple_GetItem(...)): 89e. ou *note
     PySequence_GetItem(): 1bcd.

 -- C Função: *note PyObject: 339. *PyTuple_GET_ITEM (PyObject *p,
          Py_ssize_t pos)
     'Retorna valor: Referência emprestada.'  Como *note
     PyTuple_GetItem(): 4b61, mas faz nenhuma verificação de seus
     argumentos.

 -- C Função: *note PyObject: 339. *PyTuple_GetSlice (PyObject *p,
          Py_ssize_t low, Py_ssize_t high)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna a fatia da tupla apontada por 'p' entre 'low' e
     'high', ou ‘NULL’ com uma exceção definida em caso de falha.

     Isso é o equivalente da expressão Python ‘p[low:high]’.  A
     indexação do final da tupla não é suportada.

 -- C Função: int PyTuple_SetItem (PyObject *p, Py_ssize_t pos, PyObject
          *o)
     ' Parte da *note ABI Estável: 553.'  Insere uma referência ao
     objeto 'o' na posição 'pos' da tupla apontada por 'p'.  Retorna ‘0’
     em caso de sucesso.  Se 'pos' estiver fora dos limites, retorne
     ‘-1’ e define uma exceção *note IndexError: 157e.

          Nota: Esta função “rouba” uma referência a 'o' e descarta uma
          referência a um item já na tupla na posição afetada.

 -- C Função: void PyTuple_SET_ITEM (PyObject *p, Py_ssize_t pos,
          PyObject *o)

     Como *note PyTuple_SetItem(): 4b62, mas não verifica erros e deve
     'apenas' ser usado para preencher novas tuplas.

     A verificação de limites é realizada como uma asserção se o Python
     for construído em *note modo de depuração: 1f9. ou *note com
     asserções: 38c.

          Nota: Esta função “rouba” uma referência para 'o' e, ao
          contrário de *note PyTuple_SetItem(): 4b62, 'não' descarta uma
          referência para nenhum item que esteja sendo substituído;
          qualquer referência na tupla na posição 'pos' será perdida.

 -- C Função: int _PyTuple_Resize (PyObject **p, Py_ssize_t newsize)

     Pode ser usado para redimensionar uma tupla.  'newsize' será o novo
     comprimento da tupla.  Como as tuplas são 'supostamente' imutáveis,
     isso só deve ser usado se houver apenas uma referência ao objeto.
     'Não' use isto se a tupla já for conhecida por alguma outra parte
     do código.  A tupla sempre aumentará ou diminuirá no final.  Pense
     nisso como destruir a tupla antiga e criar uma nova, mas com mais
     eficiência.  Retorna ‘0’ em caso de sucesso.  O código do cliente
     nunca deve presumir que o valor resultante de ‘*p’ será o mesmo de
     antes de chamar esta função.  Se o objeto referenciado por ‘*p’ for
     substituído, o ‘*p’ original será destruído.  Em caso de falha,
     retorna ‘-1’ e define ‘*p’ para ‘NULL’, e levanta *note
     MemoryError: 15c5. ou *note SystemError: 575.


File: python.info,  Node: Objetos sequência de estrutura,  Next: Objeto List,  Prev: Objeto tupla,  Up: Objetos Sequência

7.8.3.28 Objetos sequência de estrutura
.......................................

Objetos sequência de estrutura são o equivalente em C dos objetos
‘namedtuple()’, ou seja, uma sequência cujos itens também podem ser
acessados por meio de atributos.  Para criar uma sequência de estrutura,
você primeiro precisa criar um tipo de sequência de estrutura
específico.

 -- C Função: *note PyTypeObject: ab4. *PyStructSequence_NewType
          (PyStructSequence_Desc *desc)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Cria um novo tipo de sequência de estrutura a partir dos
     dados em 'desc', descrito abaixo.  Instâncias do tipo resultante
     podem ser criadas com *note PyStructSequence_New(): 4d57.

     Retorna ‘NULL’ com uma exceção definida em caso de falha.

 -- C Função: void PyStructSequence_InitType (PyTypeObject *type,
          PyStructSequence_Desc *desc)

     Inicializa um tipo de sequência de estrutura 'type' de 'desc' no
     lugar.

 -- C Função: int PyStructSequence_InitType2 (PyTypeObject *type,
          PyStructSequence_Desc *desc)

     Como *note PyStructSequence_InitType(): 1039, mas retorna ‘0’ em
     caso de sucesso e ‘-1’ com uma exceção definida em caso de falha.

     Adicionado na versão 3.4.

 -- C Tipo: type PyStructSequence_Desc
     ' Parte da *note ABI Estável: 553. (incluindo todos os membros).'
     Contém as metainformações de um tipo de sequência de estrutura a
     ser criado.

      -- C Membro: const char *name

          Nome totalmente qualificado do tipo; codificado em UTF-8
          terminado em nulo.  O nome deve conter o nome do módulo.

      -- C Membro: const char *doc

          Ponteiro para docstring para o tipo ou ‘NULL’ para omitir

      -- C Membro: *note PyStructSequence_Field: bd2. *fields

          Ponteiro para um vetor terminado em ‘NULL’ com nomes de campos
          do novo tipo

      -- C Membro: int n_in_sequence

          Número de campos visíveis para o lado Python (se usado como
          tupla)

 -- C Tipo: type PyStructSequence_Field
     ' Parte da *note ABI Estável: 553. (incluindo todos os membros).'
     Descreve um campo de uma sequência de estrutura.  Como uma
     sequência de estrutura é modelada como uma tupla, todos os campos
     são digitados como *note PyObject: 339.*.  O índice no vetor *note
     fields: 5014. do *note PyStructSequence_Desc: bd3. determina qual
     campo da sequência de estrutura é descrito.

      -- C Membro: const char *name

          Nome do campo ou ‘NULL’ para terminar a lista de campos
          nomeados; definida para *note PyStructSequence_UnnamedField:
          989. para deixar sem nome.

      -- C Membro: const char *doc

          Campo docstring ou ‘NULL’ para omitir.

 -- C Variável: const char *const PyStructSequence_UnnamedField
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'  Valor
     especial para um nome de campo para deixá-lo sem nome.

     Alterado na versão 3.9: O tipo foi alterado de ‘char *’.

 -- C Função: *note PyObject: 339. *PyStructSequence_New (PyTypeObject
          *type)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Cria um instância de 'type', que deve ser criada com *note
     PyStructSequence_NewType(): 4d58.

     Retorna ‘NULL’ com uma exceção definida em caso de falha.

 -- C Função: *note PyObject: 339. *PyStructSequence_GetItem (PyObject
          *p, Py_ssize_t pos)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'  Retorna o objeto na posição 'pos' na sequência de
     estrutura apontada por 'p'.

     A verificação de limites é realizada como uma asserção se o Python
     for construído em *note modo de depuração: 1f9. ou *note com
     asserções: 38c.

 -- C Função: *note PyObject: 339. *PyStructSequence_GET_ITEM (PyObject
          *p, Py_ssize_t pos)
     'Retorna valor: Referência emprestada.'  Apelido para *note
     PyStructSequence_GetItem(): 4d56.

     Alterado na versão 3.13: Agora implementada como um apelido para
     *note PyStructSequence_GetItem(): 4d56.

 -- C Função: void PyStructSequence_SetItem (PyObject *p, Py_ssize_t
          pos, PyObject *o)
     ' Parte da *note ABI Estável: 553.'  Define o campo no índice 'pos'
     da sequência de estrutura 'p' para o valor 'o'.  Como *note
     PyTuple_SET_ITEM(): 38d, isto só deve ser usado para preencher
     novas instâncias.

     A verificação de limites é realizada como uma asserção se o Python
     for construído em *note modo de depuração: 1f9. ou *note com
     asserções: 38c.

          Nota: Esta função “rouba” uma referência a 'o'.

 -- C Função: void PyStructSequence_SET_ITEM (PyObject *p, Py_ssize_t
          *pos, PyObject *o)

     Apelido para *note PyStructSequence_SetItem(): 4d59.

     Alterado na versão 3.13: Agora implementada como um apelido para
     *note PyStructSequence_SetItem(): 4d59.


File: python.info,  Node: Objeto List,  Prev: Objetos sequência de estrutura,  Up: Objetos Sequência

7.8.3.29 Objeto List
....................

 -- C Tipo: type PyListObject

     Este subtipo de *note PyObject: 339. representa um objeto de lista
     Python.

 -- C Variável: *note PyTypeObject: ab4. PyList_Type
     ' Parte da *note ABI Estável: 553.'  Esta instância de *note
     PyTypeObject: ab4. representa o tipo de lista Python.  Este é o
     mesmo objeto que *note list: 611. na camada Python.

 -- C Função: int PyList_Check (PyObject *p)

     Retorna verdadeiro se 'p' é um objeto lista ou uma instância de um
     subtipo do tipo lista.  Esta função sempre tem sucesso.

 -- C Função: int PyList_CheckExact (PyObject *p)

     Retorna verdadeiro se 'p' é um objeto lista, mas não uma instância
     de um subtipo do tipo lista.  Esta função sempre tem sucesso.

 -- C Função: *note PyObject: 339. *PyList_New (Py_ssize_t len)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna uma nova lista de comprimento 'len' em caso de
     sucesso, ou ‘NULL’ em caso de falha.

          Nota: Se 'len' for maior que zero, os itens do objeto da lista
          retornada são definidos como ‘NULL’.  Portanto, você não pode
          usar funções API abstratas, como *note PySequence_SetItem():
          1bce. ou expor o objeto ao código Python antes de definir
          todos os itens para um objeto real com *note PyList_SetItem():
          165e. ou *note PyList_SET_ITEM(): 38e.  As seguintes APIs são
          seguras desde que antes as listas tenham sido inicializadas:
          *note PyList_SetItem(): 165e. e *note PyList_SET_ITEM(): 38e.

 -- C Função: *note Py_ssize_t: a69. PyList_Size (PyObject *list)
     ' Parte da *note ABI Estável: 553.'

     Retorna o comprimento do objeto de lista em 'list'; isto é
     equivalente a ‘len(list)’ em um objeto lista.

 -- C Função: *note Py_ssize_t: a69. PyList_GET_SIZE (PyObject *list)

     Similar a *note PyList_Size(): 1461, mas sem verificação de erro.

 -- C Função: *note PyObject: 339. *PyList_GetItemRef (PyObject *list,
          Py_ssize_t index)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.13.'  Retorna o objeto na posição 'index' na
     lista apontada por 'list'.  A posição deve ser não negativa; não há
     suporte à indexação do final da lista.  Se 'index' estiver fora dos
     limites (‘<0 or >=len(list)’), retorna ‘NULL’ e levanta uma exceção
     *note IndexError: 157e.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 339. *PyList_GetItem (PyObject *list,
          Py_ssize_t index)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'  Como *note PyList_GetItemRef(): 359, mas retorna
     uma *note referência emprestada: 33e. em vez de uma *note
     referência forte: 33d.

 -- C Função: *note PyObject: 339. *PyList_GET_ITEM (PyObject *list,
          Py_ssize_t i)
     'Retorna valor: Referência emprestada.'  Similar a *note
     PyList_GetItem(): 35a, mas sem verificação de erro.

 -- C Função: int PyList_SetItem (PyObject *list, Py_ssize_t index,
          PyObject *item)
     ' Parte da *note ABI Estável: 553.'  Define o item no índice
     'index' na lista como 'item'.  Retorna ‘0’ em caso de sucesso.  Se
     'index' estiver fora dos limites, retorna ‘-1’ e levanta uma
     exceção *note IndexError: 157e.

          Nota: Esta função “rouba” uma referência para o 'item' e
          descarta uma referência para um item já presente na lista na
          posição afetada.

 -- C Função: void PyList_SET_ITEM (PyObject *list, Py_ssize_t i,
          PyObject *o)

     Forma macro de *note PyList_SetItem(): 165e. sem verificação de
     erro.  Este é normalmente usado apenas para preencher novas listas
     onde não há conteúdo anterior.

     A verificação de limites é realizada como uma asserção se o Python
     for construído em *note modo de depuração: 1f9. ou *note com
     asserções: 38c.

          Nota: Esta macro “rouba” uma referência para o 'item' e, ao
          contrário de *note PyList_SetItem(): 165e, 'não' descarta uma
          referência para nenhum item que esteja sendo substituído;
          qualquer referência em 'list' será perdida.

 -- C Função: int PyList_Insert (PyObject *list, Py_ssize_t index,
          PyObject *item)
     ' Parte da *note ABI Estável: 553.'  Insere o item 'item' na lista
     'list' na frente do índice 'index'.  Retorna ‘0’ se for
     bem-sucedido; retorna ‘-1’ e levanta uma exceção se malsucedido.
     Análogo a ‘list.insert(index, item)’.

 -- C Função: int PyList_Append (PyObject *list, PyObject *item)
     ' Parte da *note ABI Estável: 553.'  Adiciona o item 'item' ao
     final da lista 'list'.  Retorna ‘0’ se for bem-sucedido; retorna
     ‘-1’ e levanta uma exceção se malsucedido.  Análogo a
     ‘list.insert(index, item)’.

 -- C Função: *note PyObject: 339. *PyList_GetSlice (PyObject *list,
          Py_ssize_t low, Py_ssize_t high)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna uma lista dos objetos em 'list' contendo os objetos
     'entre' 'low' e 'alto'.  Retorne ‘NULL’ e levanta uma exceção se
     malsucedido.  Análogo a ‘list[low:high]’.  Não há suporte à
     indexação do final da lista.

 -- C Função: int PyList_SetSlice (PyObject *list, Py_ssize_t low,
          Py_ssize_t high, PyObject *itemlist)
     ' Parte da *note ABI Estável: 553.'  Define a fatia de 'list' entre
     'low' e 'high' para o conteúdo de 'itemlist'.  Análogo a
     ‘list[low:high] = itemlist’.  'itemlist' pode ser ‘NULL’, indicando
     a atribuição de uma lista vazia (exclusão de fatia).  Retorna ‘0’
     em caso de sucesso, ‘-1’ em caso de falha.  Não há suporte à
     indexação do final da lista.

 -- C Função: int PyList_Extend (PyObject *list, PyObject *iterable)

     Estende 'list' com o conteúdo de 'iterable'.  Isto é o mesmo que
     ‘PyList_SetSlice(list, PY_SSIZE_T_MAX, PY_SSIZE_T_MAX, iterable)’ e
     análogo a ‘list.extend(iterable)’ ou ‘list += iterable’.

     Levanta uma exceção e retorna ‘-1’ se 'list' não for um objeto
     *note list: 611.  Retorna 0 em caso de sucesso.

     Adicionado na versão 3.13.

 -- C Função: int PyList_Clear (PyObject *list)

     Remove todos os itens da 'lista'.  Isto é o mesmo que
     ‘PyList_SetSlice(list, 0, PY_SSIZE_T_MAX, NULL)’ e análogo a
     ‘list.clear()’ ou ‘del list[:]’.

     Levanta uma exceção e retorna ‘-1’ se 'list' não for um objeto
     *note list: 611.  Retorna 0 em caso de sucesso.

     Adicionado na versão 3.13.

 -- C Função: int PyList_Sort (PyObject *list)
     ' Parte da *note ABI Estável: 553.'  Ordena os itens de 'list' no
     mesmo lugar.  Retorna ‘0’ em caso de sucesso, e ‘-1’ em caso de
     falha.  Isso é o equivalente de ‘list.sort()’.

 -- C Função: int PyList_Reverse (PyObject *list)
     ' Parte da *note ABI Estável: 553.'  Inverte os itens de 'list' no
     mesmo lugar.  Retorna ‘0’ em caso de sucesso, e ‘-1’ em caso de
     falha.  Isso é o equivalente de ‘list.reverse()’.

 -- C Função: *note PyObject: 339. *PyList_AsTuple (PyObject *list)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

     Retorna um novo objeto tupla contendo os conteúdos de 'list';
     equivale a ‘tuple(list)’.


File: python.info,  Node: Coleções,  Next: Objetos Function<2>,  Prev: Objetos Sequência,  Up: Camada de Objetos Concretos

7.8.4 Coleções
--------------

* Menu:

* Objetos dicionários::
* Objeto Set::


File: python.info,  Node: Objetos dicionários,  Next: Objeto Set,  Up: Coleções

7.8.4.1 Objetos dicionários
...........................

 -- C Tipo: type PyDictObject

     Este subtipo do *note PyObject: 339. representa um objeto
     dicionário Python.

 -- C Variável: *note PyTypeObject: ab4. PyDict_Type
     ' Parte da *note ABI Estável: 553.'  Esta instância do *note
     PyTypeObject: ab4. representa o tipo do dicionário Python.  Este é
     o mesmo objeto *note dict: 256. na camada do Python.

 -- C Função: int PyDict_Check (PyObject *p)

     Retorna verdadeiro se 'p' é um objeto dicionário ou uma instância
     de um subtipo do tipo dicionário.  Esta função sempre tem sucesso.

 -- C Função: int PyDict_CheckExact (PyObject *p)

     Retorna verdadeiro se 'p' é um objeto dicionário, mas não uma
     instância de um subtipo do tipo dicionário.  Esta função sempre tem
     sucesso.

 -- C Função: *note PyObject: 339. *PyDict_New ()
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo dicionário vazio ou ‘NULL’ em caso de falha.

 -- C Função: *note PyObject: 339. *PyDictProxy_New (PyObject *mapping)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um objeto *note types.MappingProxyType: 46d. para um
     mapeamento que reforça o comportamento somente leitura.  Isso
     normalmente é usado para criar uma visão para evitar a modificação
     do dicionário para tipos de classes não dinâmicas.

 -- C Variável: *note PyTypeObject: ab4. PyDictProxy_Type
     ' Parte da *note ABI Estável: 553.'  O objeto de tipo para mapear
     objetos proxy criados por *note PyDictProxy_New(): 4c50. e para o
     atributo somente leitura ‘__dict__’ de muitos tipos embutidos.  Uma
     instância de *note PyDictProxy_Type: 4c51. fornece uma visão
     dinâmica e somente leitura de um dicionário subjacente: as
     alterações no dicionário subjacente são refletidas no proxy, mas o
     próprio proxy não oferece suporte a operações de mutação.  Isso
     corresponde a *note types.MappingProxyType: 46d. no Python.

 -- C Função: void PyDict_Clear (PyObject *p)
     ' Parte da *note ABI Estável: 553.'  Esvazia um dicionário
     existente de todos os pares chave-valor.

 -- C Função: int PyDict_Contains (PyObject *p, PyObject *key)
     ' Parte da *note ABI Estável: 553.'  Determina se o dicionário 'p'
     contém 'key'.  Se um item em 'p' corresponder à 'key', retorna ‘1’,
     caso contrário, retorna ‘0’.  Em caso de erro, retorna ‘-1’.  Isso
     equivale à expressão Python ‘key in p’.

 -- C Função: int PyDict_ContainsString (PyObject *p, const char *key)

     É o mesmo que *note PyDict_Contains(): 338, mas 'key' é
     especificada como uma string de bytes const char* codificada em
     UTF-8, em vez de um *note PyObject: 339.*.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 339. *PyDict_Copy (PyObject *p)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo dicionário que contém o mesmo chave-valor
     como 'p'.

 -- C Função: int PyDict_SetItem (PyObject *p, PyObject *key, PyObject
          *val)
     ' Parte da *note ABI Estável: 553.'  Insere 'val' no dicionário 'p'
     com a tecla 'key'.  'key' deve ser *note hasheável: 610.; se não
     for, *note TypeError: 2c3. será levantada.  Retorna ‘0’ em caso de
     sucesso ou ‘-1’ em caso de falha.  Esta função 'não' rouba uma
     referência a 'val'.

 -- C Função: int PyDict_SetItemString (PyObject *p, const char *key,
          PyObject *val)
     ' Parte da *note ABI Estável: 553.'  É o mesmo que *note
     PyDict_SetItem(): 4b63, mas 'key' é especificada como uma string de
     bytes const char* codificada em UTF-8, em vez de um *note PyObject:
     339.*.

 -- C Função: int PyDict_DelItem (PyObject *p, PyObject *key)
     ' Parte da *note ABI Estável: 553.'  Remove a entrada no dicionário
     'p' com a chave 'key'.  'key' deve ser *note hasheável: 610.; se
     não for, *note TypeError: 2c3. é levantada.  Se 'key' não estiver
     no dicionário, *note KeyError: 344. é levantada.  Retorna ‘0’ em
     caso de sucesso ou ‘-1’ em caso de falha.

 -- C Função: int PyDict_DelItemString (PyObject *p, const char *key)
     ' Parte da *note ABI Estável: 553.'  É o mesmo que *note
     PyDict_DelItem(): 4c57, mas 'key' é especificada como uma string de
     bytes const char* codificada em UTF-8, em vez de um *note PyObject:
     339.*.

 -- C Função: int PyDict_GetItemRef (PyObject *p, PyObject *key,
          PyObject **result)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Retorna
     uma nova *note referência forte: 33d. para o objeto dicionário 'p'
     que possui uma chave 'key':

        * Se a chave estiver presente, define '*result' como uma nova
          *note referência forte: 33d. para o valor e retorna ‘1’.

        * Se a chave estiver ausente, define '*result' como ‘NULL’ e
          retorna ‘0’.

        * Em caso de erro, levanta uma exceção e retorna ‘-1’.

     Adicionado na versão 3.13.

     Veja também a função *note PyObject_GetItem(): 4be2.

 -- C Função: *note PyObject: 339. *PyDict_GetItem (PyObject *p,
          PyObject *key)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'  Retorna um *note referência emprestada: 33e. para o
     objeto do dicionário 'p' que possui uma chave 'key'.  Retorna
     ‘NULL’ se a chave 'key' não estiver presente, mas 'sem' definir uma
     exceção.

          Nota: Exceções que ocorrem ao chamar os métodos *note
          __hash__(): b0e. e *note __eq__(): b0d. são ignoradas
          silenciosamente.  Ao invés disso, use a função *note
          PyDict_GetItemWithError(): 33c.

     Alterado na versão 3.10: Chamar esta API sem *note GIL: 159. retida
     era permitido por motivos históricos.  Não é mais permitido.

 -- C Função: *note PyObject: 339. *PyDict_GetItemWithError (PyObject
          *p, PyObject *key)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'  Variante de *note PyDict_GetItem(): 387. que não
     suprime exceções.  Retorna ‘NULL’ 'com' uma exceção definida se uma
     exceção ocorreu.  Retorna ‘NULL’ ** sem ** uma exceção definida se
     a chave não estiver presente.

 -- C Função: *note PyObject: 339. *PyDict_GetItemString (PyObject *p,
          const char *key)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'  É o mesmo que *note PyDict_GetItem(): 387, mas
     'key' é especificada como uma string de bytes const char*
     codificada em UTF-8, em vez de um *note PyObject: 339.*.

          Nota: Exceções que ocorrem ao chamar os métodos *note
          __hash__(): b0e. e *note __eq__(): b0d. ou ao criar objetos
          temporários da classe *note str: 44c. são ignoradas
          silenciosamente.  Ao invés disso, prefira usar a função *note
          PyDict_GetItemWithError(): 33c. com sua própria 'key' de *note
          PyUnicode_FromString(): 4db1.

 -- C Função: int PyDict_GetItemStringRef (PyObject *p, const char *key,
          PyObject **result)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Similar a
     *note PyDict_GetItemRef(): 33a, mas 'key' é especificada como uma
     string de bytes const char* codificada em UTF-8, em vez de um *note
     PyObject: 339.*.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 339. *PyDict_SetDefault (PyObject *p,
          PyObject *key, PyObject *defaultobj)
     'Retorna valor: Referência emprestada.'  Isso é o mesmo que o *note
     dict.setdefault(): 10b2. de nível Python.  Se presente, ele retorna
     o valor correspondente a 'key' do dicionário 'p'.  Se a chave não
     estiver no dict, ela será inserida com o valor 'defaultobj' e
     'defaultobj' será retornado.  Esta função avalia a função hash de
     'key' apenas uma vez, em vez de avaliá-la independentemente para a
     pesquisa e a inserção.

     Adicionado na versão 3.4.

 -- C Função: int PyDict_SetDefaultRef (PyObject *p, PyObject *key,
          PyObject *default_value, PyObject **result)

     Insere 'default_value' no dicionário 'p' com uma chave 'key' se a
     chave ainda não estiver presente no dicionário.  Se 'result' não
     for ‘NULL’, então '*result' é definido como uma *note referência
     forte: 33d. para 'default_value', se a chave não estiver presente,
     ou para o valor existente, se 'key' já estava presente no
     dicionário.  Retorna ‘1’ se a chave estava presente e
     'default_value' não foi inserido, ou ‘0’ se a chave não estava
     presente e 'default_value' foi inserido.  Em caso de falha, retorna
     ‘-1’, define uma exceção e define ‘*result’ como ‘NULL’.

     Para maior clareza: se você tiver uma referência forte para
     'default_value' antes de chamar esta função, então depois que ela
     retornar, você terá uma referência forte para 'default_value' e
     '*result' (se não for ‘NULL’).  Estes podem referir-se ao mesmo
     objeto: nesse caso você mantém duas referências separadas para ele.

     Adicionado na versão 3.13.

 -- C Função: int PyDict_Pop (PyObject *p, PyObject *key, PyObject
          **result)

     Remove 'key' do dicionário 'p' e, opcionalmente, retorna o valor
     removido.  Não levanta *note KeyError: 344. se a chave estiver
     ausente.

        - Se a chave estiver presente, define '*result' como uma nova
          referência para o valor se 'result' não for ‘NULL’ e retorna
          ‘1’.

        - Se a chave estiver ausente, define '*result' como ‘NULL’ se
          'result' não for ‘NULL’ e retorna ‘0’.

        - Em caso de erro, levanta uma exceção e retorna ‘-1’.

     Similar a *note dict.pop(): 343, mas sem o valor padrão e sem
     levantar *note KeyError: 344. se a chave estiver ausente.

     Adicionado na versão 3.13.

 -- C Função: int PyDict_PopString (PyObject *p, const char *key,
          PyObject **result)

     Similar a *note PyDict_Pop(): 341, mas 'key' é especificada como
     uma string de bytes const char* codificada em UTF-8, em vez de um
     *note PyObject: 339.*.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 339. *PyDict_Items (PyObject *p)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um *note PyListObject: 4f30. contendo todos os itens
     do dicionário.

 -- C Função: *note PyObject: 339. *PyDict_Keys (PyObject *p)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um *note PyListObject: 4f30. contendo todas as
     chaves do dicionário.

 -- C Função: *note PyObject: 339. *PyDict_Values (PyObject *p)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um *note PyListObject: 4f30. contendo todos os
     valores do dicionário 'p'.

 -- C Função: *note Py_ssize_t: a69. PyDict_Size (PyObject *p)
     ' Parte da *note ABI Estável: 553.'

     Retorna o número de itens no dicionário.  Isso é equivalente a
     ‘len(p)’ em um dicionário.

 -- C Função: *note Py_ssize_t: a69. PyDict_GET_SIZE (PyObject *p)

     Similar a *note PyDict_Size(): 4c5e, mas sem verificação de erro.

 -- C Função: int PyDict_Next (PyObject *p, Py_ssize_t *ppos, PyObject
          **pkey, PyObject **pvalue)
     ' Parte da *note ABI Estável: 553.'  Itera todos os pares de
     valores-chave no dicionário 'p'.  O *note Py_ssize_t: a69. referido
     por 'ppos' deve ser inicializado para ‘0’ antes da primeira chamada
     para esta função para iniciar a iteração; a função retorna true
     para cada par no dicionário e false quando todos os pares forem
     relatados.  Os parâmetros 'pkey' e 'pvalue' devem apontar para
     variáveis de *note PyObject: 339.* que serão preenchidas com cada
     chave e valor, respectivamente, ou podem ser ‘NULL’.  Todas as
     referências retornadas por meio deles são emprestadas.  'ppos' não
     deve ser alterado durante a iteração.  Seu valor representa
     deslocamentos dentro da estrutura do dicionário interno e, como a
     estrutura é esparsa, os deslocamentos não são consecutivos.

     Por exemplo:

          PyObject *key, *value;
          Py_ssize_t pos = 0;

          while (PyDict_Next(self->dict, &pos, &key, &value)) {
              /* fazer algo de interessante com os valores... */
              ...
          }

     O dicionário 'p' não deve sofrer mutação durante a iteração.  É
     seguro modificar os valores das chaves à medida que você itera no
     dicionário, mas apenas enquanto o conjunto de chaves não mudar.
     Por exemplo:

          PyObject *key, *value;
          Py_ssize_t pos = 0;

          while (PyDict_Next(self->dict, &pos, &key, &value)) {
              long i = PyLong_AsLong(value);
              if (i == -1 && PyErr_Occurred()) {
                  return -1;
              }
              PyObject *o = PyLong_FromLong(i + 1);
              if (o == NULL)
                  return -1;
              if (PyDict_SetItem(self->dict, key, o) < 0) {
                  Py_DECREF(o);
                  return -1;
              }
              Py_DECREF(o);
          }

     A função não é segura para thread na construção com *note threads
     livres: 15e4. sem sincronização externa.  Você pode usar *note
     Py_BEGIN_CRITICAL_SECTION: 5028. para travar o dicionário enquanto
     itera sobre ele:

          Py_BEGIN_CRITICAL_SECTION(self->dict);
          while (PyDict_Next(self->dict, &pos, &key, &value)) {
              ...
          }
          Py_END_CRITICAL_SECTION();

 -- C Função: int PyDict_Merge (PyObject *a, PyObject *b, int override)
     ' Parte da *note ABI Estável: 553.'  Itera sobre o objeto de
     mapeamento 'b' adicionando pares de valores-chave ao dicionário
     'a'.  'b' pode ser um dicionário, ou qualquer objeto que suporte
     *note PyMapping_Keys(): bd5. e *note PyObject_GetItem(): 4be2.  Se
     'override' for verdadeiro, os pares existentes em 'a' serão
     substituídos se uma chave correspondente for encontrada em 'b',
     caso contrário, os pares serão adicionados apenas se não houver uma
     chave correspondente em 'a'.  Retorna ‘0’ em caso de sucesso ou
     ‘-1’ se uma exceção foi levantada.

 -- C Função: int PyDict_Update (PyObject *a, PyObject *b)
     ' Parte da *note ABI Estável: 553.'  É o mesmo que ‘PyDict_Merge(a,
     b, 1)’ em C, e é semelhante a ‘a.update(b)’ em Python, exceto que
     *note PyDict_Update(): 4c60. não cai na iteração em uma sequência
     de pares de valores de chave se o segundo argumento não tiver o
     atributo “keys”.  Retorna ‘0’ em caso de sucesso ou ‘-1’ se uma
     exceção foi levantada.

 -- C Função: int PyDict_MergeFromSeq2 (PyObject *a, PyObject *seq2, int
          override)
     ' Parte da *note ABI Estável: 553.'  Atualiza ou mescla no
     dicionário 'a', a partir dos pares de chave-valor em 'seq2'.
     'seq2' deve ser um objeto iterável produzindo objetos iteráveis de
     comprimento 2, vistos como pares chave-valor.  No caso de chaves
     duplicadas, a última vence se 'override' for verdadeiro, caso
     contrário, a primeira vence.  Retorne ‘0’ em caso de sucesso ou
     ‘-1’ se uma exceção foi levantada.  Python equivalente (exceto para
     o valor de retorno):

          def PyDict_MergeFromSeq2(a, seq2, override):
              for key, value in seq2:
                  if override or key not in a:
                      a[key] = value

 -- C Função: int PyDict_AddWatcher (PyDict_WatchCallback callback)

     Registra 'callback' como um observador de dicionário.  Retorna um
     ID inteiro não negativo que deve ser passado para futuras chamadas
     a *note PyDict_Watch(): 563.  Em caso de erro (por exemplo, não há
     mais IDs de observador disponíveis), retorna ‘-1’ e define uma
     exceção.

     Adicionado na versão 3.12.

 -- C Função: int PyDict_ClearWatcher (int watcher_id)

     Limpa o observador identificado por 'watcher_id' retornado
     anteriormente de *note PyDict_AddWatcher(): 562.  Retorna ‘0’ em
     caso de sucesso, ‘-1’ em caso de erro (por exemplo, se o
     'watcher_id' fornecido nunca foi registrado).

     Adicionado na versão 3.12.

 -- C Função: int PyDict_Watch (int watcher_id, PyObject *dict)

     Marca o dicionário 'dict' como observado.  A função de retorno
     concedida a 'watcher_id' por *note PyDict_AddWatcher(): 562. será
     chamada quando 'dict' for modificado ou desalocado.  Retorna ‘0’ em
     caso de sucesso ou ‘-1’ em caso de erro.

     Adicionado na versão 3.12.

 -- C Função: int PyDict_Unwatch (int watcher_id, PyObject *dict)

     Marca o dicionário 'dict' como não mais observado.  A função de
     retorno concedida a 'watcher_id' por *note PyDict_AddWatcher():
     562. será chamada quando 'dict' for modificado ou desalocado.  O
     dicionário deve ter sido observado anteriormente por este
     observador.  Retorna ‘0’ em caso de sucesso ou ‘-1’ em caso de
     erro.

     Adicionado na versão 3.12.

 -- C Tipo: type PyDict_WatchEvent

     Enumeração de possíveis eventos de observador de dicionário:
     ‘PyDict_EVENT_ADDED’, ‘PyDict_EVENT_MODIFIED’,
     ‘PyDict_EVENT_DELETED’, ‘PyDict_EVENT_CLONED’,
     ‘PyDict_EVENT_CLEARED’ ou ‘PyDict_EVENT_DEALLOCATED’.

     Adicionado na versão 3.12.

 -- C Tipo: typedef int (*PyDict_WatchCallback)(*note PyDict_WatchEvent:
          502b. event, *note PyObject: 339. *dict, *note PyObject: 339.
          *key, *note PyObject: 339. *new_value)

     Tipo de uma função de retorno de chamada de observador de
     dicionário.

     Se 'event' for ‘PyDict_EVENT_CLEARED’ ou
     ‘PyDict_EVENT_DEALLOCATED’, tanto 'key' quanto 'new_value' serão
     ‘NULL’.  Se 'event' for ‘PyDict_EVENT_ADDED’ ou
     ‘PyDict_EVENT_MODIFIED’, 'new_value' será o novo valor de 'key'.
     Se 'event' for ‘PyDict_EVENT_DELETED’, 'key' estará sendo excluída
     do dicionário e 'new_value' será ‘NULL’.

     ‘PyDict_EVENT_CLONED’ ocorre quando 'dict' estava anteriormente
     vazio e outro dict é mesclado a ele.  Para manter a eficiência
     dessa operação, os eventos ‘PyDict_EVENT_ADDED’ por chave não são
     emitidos nesse caso; em vez disso, um único ‘PyDict_EVENT_CLONED’ é
     emitido e 'key' será o dicionário de origem.

     A função de retorno pode inspecionar, mas não deve modificar o
     'dict'; isso pode ter efeitos imprevisíveis, inclusive recursão
     infinita.  Não acione a execução do código Python na função de
     retorno, pois isso poderia modificar o dict como um efeito
     colateral.

     Se 'event' for ‘PyDict_EVENT_DEALLOCATED’, a obtenção de uma nova
     referência na função de retorno para o dicionário prestes a ser
     destruído o ressuscitará e impedirá que ele seja liberado nesse
     momento.  Quando o objeto ressuscitado for destruído mais tarde,
     quaisquer funções de retorno do observador ativos naquele momento
     serão chamados novamente.

     As funções de retorno ocorrem antes que a modificação notificada no
     'dict' ocorra, de modo que o estado anterior do 'dict' possa ser
     inspecionado.

     Se a função de retorno definir uma exceção, ela deverá retornar
     ‘-1’.  Essa exceção será exibida como uma exceção não levantável
     usando *note PyErr_WriteUnraisable(): 34d.  Caso contrário, deverá
     retornar ‘0’.

     É possível que já exista uma exceção pendente definida na entrada
     da função de retorno.  Nesse caso, a função de retorno deve
     retornar ‘0’ com a mesma exceção ainda definida.  Isso significa
     que a função de retorno não pode chamar nenhuma outra API que possa
     definir uma exceção, a menos que salve e limpe o estado da exceção
     primeiro e restaure a exceção antes de retornar.

     Adicionado na versão 3.12.

* Menu:

* Objetos visão de dicionário::
* Dicionários ordenados::


File: python.info,  Node: Objetos visão de dicionário,  Next: Dicionários ordenados,  Up: Objetos dicionários

7.8.4.2 Objetos visão de dicionário
...................................

 -- C Função: int PyDictViewSet_Check (PyObject *op)

     Retorna verdadeiro se 'op' for uma visão de um conjunto dentro de
     um dicionário.  Isso atualmente equivale a *note PyDictKeys_Check:
     502f.(*note op: 502e.) || *note PyDictItems_Check: 5030.(*note op:
     502e.).  Esta função sempre tem sucesso.

 -- C Variável: *note PyTypeObject: ab4. PyDictKeys_Type
     ' Parte da *note ABI Estável: 553.'  Objeto tipo para uma
     visualização das chaves do dicionário.  Em Python, este é o tipo do
     objeto retornado por *note dict.keys(): 7ce.

 -- C Função: int PyDictKeys_Check (PyObject *op)

     Retorna verdadeiro se 'op' for uma instância de uma visualização de
     chaves de dicionário.  Esta função sempre tem sucesso.

 -- C Variável: *note PyTypeObject: ab4. PyDictValues_Type
     ' Parte da *note ABI Estável: 553.'  Objeto tipo para uma
     visualização dos valores do dicionário.  Em Python, este é o tipo
     do objeto retornado por *note dict.values(): 7cf.

 -- C Função: int PyDictValues_Check (PyObject *op)

     Retorna verdadeiro se 'op' for uma instância de uma visualização de
     valores de dicionário.  Esta função sempre tem sucesso.

 -- C Variável: *note PyTypeObject: ab4. PyDictItems_Type
     ' Parte da *note ABI Estável: 553.'  Objeto tipo para uma
     visualização de itens de dicionário.  Em Python, este é o tipo do
     objeto retornado por *note dict.items(): 7d0.

 -- C Função: int PyDictItems_Check (PyObject *op)

     Retorna verdadeiro se 'op' for uma instância de uma visualização de
     itens de dicionário.  Esta função sempre tem sucesso.


File: python.info,  Node: Dicionários ordenados,  Prev: Objetos visão de dicionário,  Up: Objetos dicionários

7.8.4.3 Dicionários ordenados
.............................

A API C do Python fornece uma interface para *note
collections.OrderedDict: 5db. do C. Desde o Python 3.7, os dicionários
são ordenados por padrão, então geralmente há pouca necessidade dessas
funções; prefira ‘PyDict*’ sempre que possível.

 -- C Variável: *note PyTypeObject: ab4. PyODict_Type

     Objeto de tipo para dicionários ordenados.  Este é o mesmo objeto
     que *note collections.OrderedDict: 5db. na camada Python.

 -- C Função: int PyODict_Check (PyObject *od)

     Retorna verdadeiro se 'od' for um objeto de dicionário ordenado ou
     uma instância de um subtipo do tipo *note OrderedDict: 5db.  Esta
     função sempre tem sucesso..

 -- C Função: int PyODict_CheckExact (PyObject *od)

     Retorna verdadeiro se 'od' for um objeto de dicionário ordenado,
     mas não uma instância de um subtipo do tipo *note OrderedDict: 5db.
     Esta função sempre tem sucesso.

 -- C Variável: *note PyTypeObject: ab4. PyODictKeys_Type

     Análogo a *note PyDictKeys_Type: 4c4f. para dicionários ordenados.

 -- C Variável: *note PyTypeObject: ab4. PyODictValues_Type

     Análogo a *note PyDictValues_Type: 4c55. para dicionários
     ordenados.

 -- C Variável: *note PyTypeObject: ab4. PyODictItems_Type

     Análogo a *note PyDictItems_Type: 4c4b. para dicionários ordenados.

 -- C Função: *note PyObject: 339. *PyODict_New (void)

     Retorna um novo dicionário ordenado vazio ou ‘NULL’ em caso de
     falha.

     Isso é análogo a *note PyDict_New(): 4c5d.

 -- C Função: int PyODict_SetItem (PyObject *od, PyObject *key, PyObject
          *value)

     Insere o valor 'value' no dicionário ordenado 'od' com a chave de
     'key'.  Retorna ‘0’ em caso de sucesso ou ‘-1’ com uma exceção
     definida em caso de falha.

     Isso é análogo a *note PyDict_SetItem(): 4b63.

 -- C Função: int PyODict_DelItem (PyObject *od, PyObject *key)

     Remove a entrada do dicionário ordenado 'od' com a chave 'key'.
     Retorna ‘0’ em caso de sucesso ou ‘-1’ com uma exceção definida em
     caso de falha.

     Isso é análogo a *note PyDict_DelItem(): 4c57.

Estes são apelidos *note suavemente descontinuados: 209. a APIs de
‘PyDict’:

‘PyODict’                                              ‘PyDict’
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
 -- C Macro: PyODict_GetItem (od, key)                 *note PyDict_GetItem(): 387.
                                                       
                                                       
 -- C Macro: PyODict_GetItemWithError (od, key)        *note PyDict_GetItemWithError(): 33c.
                                                       
                                                       
 -- C Macro: PyODict_GetItemString (od, key)           *note PyDict_GetItemString(): 388.
                                                       
                                                       
 -- C Macro: PyODict_Contains (od, key)                *note PyDict_Contains(): 338.
                                                       
                                                       
 -- C Macro: PyODict_Size (od)                         *note PyDict_Size(): 4c5e.
                                                       
                                                       
 -- C Macro: PyODict_SIZE (od)                         *note PyDict_GET_SIZE(): 5027.
                                                       


File: python.info,  Node: Objeto Set,  Prev: Objetos dicionários,  Up: Coleções

7.8.4.4 Objeto Set
..................

Esta seção detalha a API pública para os objetos *note set: 5d9. e *note
frozenset: 5da.  Qualquer funcionalidade não listada abaixo é melhor
acessada usando o protocolo de objeto abstrato (incluindo *note
PyObject_CallMethod(): 39f, *note PyObject_RichCompareBool(): 1b1b,
*note PyObject_Hash(): 403, *note PyObject_Repr(): 1067, *note
PyObject_IsTrue(): 4d30, *note PyObject_Print(): 16dc. e *note
PyObject_GetIter(): 4d2f.) ou o protocolo abstrato de número (incluindo
*note PyNumber_And(): 4d03, *note PyNumber_Subtract(): 4d1c, *note
PyNumber_Or(): 4d17, *note PyNumber_Xor(): 4d1e, *note
PyNumber_InPlaceAnd(): 4d08, *note PyNumber_InPlaceSubtract(): 4d10,
*note PyNumber_InPlaceOr(): 4d0c. e *note PyNumber_InPlaceXor(): 4d12.).

 -- C Tipo: type PySetObject

     Este subtipo de *note PyObject: 339. é usado para manter os dados
     internos para ambos os objetos *note set: 5d9. e *note frozenset:
     5da.  É como um *note PyDictObject: 3c1. em que tem um tamanho fixo
     para conjuntos pequenos (muito parecido com o armazenamento de
     tupla) e apontará para um bloco de memória de tamanho variável
     separado para conjuntos de tamanho médio e grande (muito parecido
     com lista armazenamento).  Nenhum dos campos desta estrutura deve
     ser considerado público e todos estão sujeitos a alterações.  Todo
     o acesso deve ser feito por meio da API documentada, em vez de
     manipular os valores na estrutura.

 -- C Variável: *note PyTypeObject: ab4. PySet_Type
     ' Parte da *note ABI Estável: 553.'  Essa é uma instância de *note
     PyTypeObject: ab4. representando o tipo Python *note set: 5d9.

 -- C Variável: *note PyTypeObject: ab4. PyFrozenSet_Type
     ' Parte da *note ABI Estável: 553.'  Esta é uma instância de *note
     PyTypeObject: ab4. representando o tipo Python *note frozenset:
     5da.

As macros de verificação de tipo a seguir funcionam em ponteiros para
qualquer objeto Python.  Da mesma forma, as funções construtoras
funcionam com qualquer objeto Python iterável.

 -- C Função: int PySet_Check (PyObject *p)

     Retorna verdadeiro se 'p' for um objeto *note set: 5d9. ou uma
     instância de um subtipo.  Esta função sempre tem sucesso.

 -- C Função: int PyFrozenSet_Check (PyObject *p)

     Retorna verdadeiro se 'p' for um objeto *note frozenset: 5da. ou
     uma instância de um subtipo.  Esta função sempre tem sucesso.

 -- C Função: int PyAnySet_Check (PyObject *p)

     Retorna verdadeiro se 'p' for um objeto *note set: 5d9, um objeto
     *note frozenset: 5da. ou uma instância de um subtipo.  Esta função
     sempre tem sucesso.

 -- C Função: int PySet_CheckExact (PyObject *p)

     Retorna verdadeiro se 'p' for um objeto *note set: 5d9, mas não uma
     instância de um subtipo.  Esta função sempre tem sucesso.

     Adicionado na versão 3.10.

 -- C Função: int PyAnySet_CheckExact (PyObject *p)

     Retorna verdadeiro se 'p' for um objeto *note set: 5d9. ou um
     objeto *note frozenset: 5da, mas não uma instância de um subtipo.
     Esta função sempre tem sucesso.

 -- C Função: int PyFrozenSet_CheckExact (PyObject *p)

     Retorna verdadeiro se 'p' for um objeto *note frozenset: 5da, mas
     não uma instância de um subtipo.  Esta função sempre tem sucesso.

 -- C Função: *note PyObject: 339. *PySet_New (PyObject *iterable)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna uma nova *note set: 5d9. contendo objetos retornados
     pelo iterável 'iterable'.  O 'iterable' pode ser ‘NULL’ para criar
     um novo conjunto vazio.  Retorna o novo conjunto em caso de sucesso
     ou ‘NULL’ em caso de falha.  Levanta *note TypeError: 2c3. se
     'iterable' não for realmente iterável.  O construtor também é útil
     para copiar um conjunto (‘c=set(s)’).

 -- C Função: *note PyObject: 339. *PyFrozenSet_New (PyObject *iterable)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna uma nova *note frozenset: 5da. contendo objetos
     retornados pelo iterável 'iterable'.  O 'iterable' pode ser ‘NULL’
     para criar um novo frozenset vazio.  Retorna o novo conjunto em
     caso de sucesso ou ‘NULL’ em caso de falha.  Levanta *note
     TypeError: 2c3. se 'iterable' não for realmente iterável.

As seguintes funções e macros estão disponíveis para instâncias de *note
set: 5d9. ou *note frozenset: 5da. ou instâncias de seus subtipos.

 -- C Função: *note Py_ssize_t: a69. PySet_Size (PyObject *anyset)
     ' Parte da *note ABI Estável: 553.'

     Retorna o comprimento de um objeto *note set: 5d9. ou *note
     frozenset: 5da.  Equivalente a ‘len(anyset)’.  Levanta um *note
     SystemError: 575. se 'anyset' não for um *note set: 5d9, *note
     frozenset: 5da, ou uma instância de um subtipo.

 -- C Função: *note Py_ssize_t: a69. PySet_GET_SIZE (PyObject *anyset)

     Forma macro de *note PySet_Size(): 1491. sem verificação de erros.

 -- C Função: int PySet_Contains (PyObject *anyset, PyObject *key)
     ' Parte da *note ABI Estável: 553.'  Retorna ‘1’ se encontrado, ‘0’
     se não encontrado, e ‘-1’ se um erro é encontrado.  Ao contrário do
     método Python *note __contains__(): 1400, esta função não converte
     automaticamente conjuntos não hasheáveis em frozensets temporários.
     Levanta um *note TypeError: 2c3. se a 'key' não for hasheável.
     Levanta *note SystemError: 575. se 'anyset' não é um *note set:
     5d9, *note frozenset: 5da, ou uma instância de um subtipo.

 -- C Função: int PySet_Add (PyObject *set, PyObject *key)
     ' Parte da *note ABI Estável: 553.'  Adiciona 'key' a uma instância
     de *note set: 5d9.  Também funciona com instâncias de *note
     frozenset: 5da. (como *note PyTuple_SetItem(): 4b62, ele pode ser
     usado para preencher os valores de novos conjuntos de congelamentos
     antes que eles sejam expostos a outro código).  Retorna ‘0’ em caso
     de sucesso ou ‘-1’ em caso de falha.  Levanta um *note TypeError:
     2c3. se a 'key' não for hasheável.  Levanta uma *note MemoryError:
     15c5. se não houver espaço para crescer.  Levanta uma *note
     SystemError: 575. se 'set' não for uma instância de *note set: 5d9.
     ou seu subtipo.

As seguintes funções estão disponíveis para instâncias de *note set:
5d9. ou seus subtipos, mas não para instâncias de *note frozenset: 5da.
ou seus subtipos.

 -- C Função: int PySet_Discard (PyObject *set, PyObject *key)
     ' Parte da *note ABI Estável: 553.'  Retorna ‘1’ se encontrado e
     removido, ‘0’ se não encontrado (nenhuma ação realizada) e ‘-1’ se
     um erro for encontrado.  Não levanta *note KeyError: 344. para
     chaves ausentes.  Levanta uma *note TypeError: 2c3. se a 'key' não
     for hasheável.  Ao contrário do método Python *note discard():
     23d4, esta função não converte automaticamente conjuntos não
     hasheáveis em frozensets temporários.  Levanta *note SystemError:
     575. se 'set' não é uma instância de *note set: 5d9. ou seu
     subtipo.

 -- C Função: *note PyObject: 339. *PySet_Pop (PyObject *set)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna uma nova referência a um objeto arbitrário no 'set'
     e remove o objeto do 'set'.  Retorna ‘NULL’ em caso de falha.
     Levanta *note KeyError: 344. se o conjunto estiver vazio.  Levanta
     uma *note SystemError: 575. se 'set' não for uma instância de *note
     set: 5d9. ou seu subtipo.

 -- C Função: int PySet_Clear (PyObject *set)
     ' Parte da *note ABI Estável: 553.'  Esvazia um conjunto existente
     de todos os elementos.  Retorna ‘0’ em caso de sucesso.  Retorna
     ‘-1’ e levanta *note SystemError: 575. se 'set' não for uma
     instância de *note set: 5d9. ou seu subtipo.


File: python.info,  Node: Objetos Function<2>,  Next: Outros Objetos,  Prev: Coleções,  Up: Camada de Objetos Concretos

7.8.5 Objetos Function
----------------------

* Menu:

* Objetos Function: Objetos Function<3>.
* Objetos de Método de Instância::
* Objetos método: Objetos método<2>.
* Objeto célula::
* Objetos código: Objetos código<3>.
* Sinalizadores de objetos código::
* Informação adicional::


File: python.info,  Node: Objetos Function<3>,  Next: Objetos de Método de Instância,  Up: Objetos Function<2>

7.8.5.1 Objetos Function
........................

Existem algumas funções específicas para as funções do Python.

 -- C Tipo: type PyFunctionObject

     A estrutura C usada para funções.

 -- C Variável: *note PyTypeObject: ab4. PyFunction_Type

     Esta é uma instância de *note PyTypeObject: ab4. e representa o
     tipo de função Python.  Está exposta a programadores Python como
     ‘types.FunctionType’.

 -- C Função: int PyFunction_Check (PyObject *o)

     Retorna verdadeiro se 'o' for um objeto função (tem tipo *note
     PyFunction_Type: 5052.).  O parâmetro não deve ser ‘NULL’.  Esta
     função sempre obtém sucesso.

 -- C Função: *note PyObject: 339. *PyFunction_New (PyObject *code,
          PyObject *globals)
     'Retorna valor: Nova referência.'  Retorna um novo objeto função
     associado ao objeto código 'code'.  'globals' deve ser um
     dicionário com as variáveis globais acessíveis à função.

     O nome e 'docstring' da função são adquiridos pelo objeto código.
     O atributo *note __module__: 208e. é adquirido por meio de
     'globals'.  Os valores-padrão de argumentos, anotações, e
     fechamento são definidos como ‘NULL’.  O atributo *note
     __qualname__: 208d. é definido com o mesmo valor do campo *note
     co_qualname: 20c9. de um objeto código.

 -- C Função: *note PyObject: 339. *PyFunction_NewWithQualName (PyObject
          *code, PyObject *globals, PyObject *qualname)
     'Retorna valor: Nova referência.'  Similar a *note
     PyFunction_New(): 5054, mas também permite definir o atributo *note
     __qualname__: 208d. do objeto função.  'qualname' deve ser um
     objeto Unicode ou ‘NULL’.  Se ‘NULL’, o atributo ‘__qualname__’ é
     definido com o mesmo valor do campo *note co_qualname: 20c9. do
     objeto código.

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 339. *PyFunction_GetCode (PyObject *op)
     'Retorna valor: Referência emprestada.'  Retorna o objeto código
     associado ao objeto função 'op'.

 -- C Função: *note PyObject: 339. *PyFunction_GetGlobals (PyObject *op)
     'Retorna valor: Referência emprestada.'  Retorna o dicionário
     global associado ao objeto função 'op'.

 -- C Função: *note PyObject: 339. *PyFunction_GetModule (PyObject *op)
     'Retorna valor: Referência emprestada.'  Retorna uma *note
     referência emprestada: 33e. ao atributo *note __module__: 208e. do
     *note objeto função: 299. 'op'.  Pode ser ‘NULL’.

     Normalmente, trata-se de um *note string: 44c. contendo o nome do
     módulo, mas pode ser definido como qualquer outro objeto pelo
     código Python.

 -- C Função: *note PyObject: 339. *PyFunction_GetDefaults (PyObject
          *op)
     'Retorna valor: Referência emprestada.'  Retorna os valores-padrão
     de argumentos do objeto função 'op'.  Pode ser uma tupla de
     argumentos ou ‘NULL’.

 -- C Função: int PyFunction_SetDefaults (PyObject *op, PyObject
          *defaults)

     Define os valores-padrão dos argumentos do objeto função 'op'.
     'defaults' deve ser ‘Py_None’ ou uma tupla.

     Levanta *note SystemError: 575. e retorna ‘-1’ em caso de falha.

 -- C Função: void PyFunction_SetVectorcall (PyFunctionObject *func,
          vectorcallfunc vectorcall)

     Define o campo 'vectorcall' de um objeto função 'func'.

     Atenção: extensões que usam essa API devem preservar o
     comportamento inalterado (padrão) de uma função 'vectorcall'!

     Adicionado na versão 3.12.

 -- C Função: *note PyObject: 339. *PyFunction_GetKwDefaults (PyObject
          *op)
     'Retorna valor: Referência emprestada.'  Retorna os valores-padrão
     de argumentos somente-nomeados do objeto função 'op'.  Pode ser um
     dicionário de argumentos ou ‘NULL’.

 -- C Função: int PyFunction_SetKwDefaults (PyObject *op, PyObject
          *defaults)

     Define os valores padrão dos argumentos somente-nomeados do objeto
     função 'op'.  'defaults' deve ser um dicionário de argumentos
     somente-nomeados ou ‘Py_None’.

     Esta função retorna ‘0’ em caso de sucesso e retorna ‘-1’ com uma
     exceção definida em caso de falha.

 -- C Função: *note PyObject: 339. *PyFunction_GetClosure (PyObject *op)
     'Retorna valor: Referência emprestada.'  Retorna o fechamento
     associado ao objeto função 'op'.  Pode ser ‘NULL’ ou uma tupla de
     objetos célula.

 -- C Função: int PyFunction_SetClosure (PyObject *op, PyObject
          *closure)

     Define o fechamento associado ao objeto função 'op'.  'closure'
     deve ser ‘Py_None’ ou uma tupla de objetos de célula.

     Levanta *note SystemError: 575. e retorna ‘-1’ em caso de falha.

 -- C Função: *note PyObject: 339. *PyFunction_GetAnnotations (PyObject
          *op)
     'Retorna valor: Referência emprestada.'  Retorna as anotações do
     objeto função 'op'.  Este pode ser um dicionário mutável ou ‘NULL’.

 -- C Função: int PyFunction_SetAnnotations (PyObject *op, PyObject
          *annotations)

     Define as anotações para o objeto função 'op'.  'annotations' deve
     ser um dicionário ou ‘Py_None’.

     Levanta *note SystemError: 575. e retorna ‘-1’ em caso de falha.

 -- C Função: *note PyObject: 339. *PyFunction_GET_CODE (PyObject *op)
 -- C Função: *note PyObject: 339. *PyFunction_GET_GLOBALS (PyObject
          *op)
 -- C Função: *note PyObject: 339. *PyFunction_GET_MODULE (PyObject *op)
 -- C Função: *note PyObject: 339. *PyFunction_GET_DEFAULTS (PyObject
          *op)
 -- C Função: *note PyObject: 339. *PyFunction_GET_KW_DEFAULTS (PyObject
          *op)
 -- C Função: *note PyObject: 339. *PyFunction_GET_CLOSURE (PyObject
          *op)
 -- C Função: *note PyObject: 339. *PyFunction_GET_ANNOTATIONS (PyObject
          *op)
     'Retorna valor: Referência emprestada.'  Essas funções são
     semelhantes às suas contrapartes ‘PyFunction_Get*’, mas não
     realizam verificação de tipos.  Passar qualquer coisa que não seja
     uma instância de *note PyFunction_Type: 5052. é um comportamento
     indefinido.

 -- C Função: int PyFunction_AddWatcher (PyFunction_WatchCallback
          callback)

     Registra 'callback' como uma sentinela de função para o
     interpretador atual.  Retorna um ID que pode ser passado para *note
     PyFunction_ClearWatcher(): 5068.  Em caso de erro (por exemplo, sem
     novos IDs de sentinelas disponíveis), retorna ‘-1’ e define uma
     exceção.

     Adicionado na versão 3.12.

 -- C Função: int PyFunction_ClearWatcher (int watcher_id)

     Cancela o registro da sentinela identificada pelo 'watcher_id'
     retornado por *note PyFunction_AddWatcher(): 5067. para o
     interpretador atual.  Retorna ‘0’ em caso de sucesso, ou ‘-1’ e
     define uma exceção em caso de erro (por exemplo, ao receber um
     'watcher_id' desconhecido.)

     Adicionado na versão 3.12.

 -- C Tipo: type PyFunction_WatchEvent

          Enumeração de possíveis eventos do observador de funções:

             - ‘PyFunction_EVENT_CREATE’

             - ‘PyFunction_EVENT_DESTROY’

             - ‘PyFunction_EVENT_MODIFY_CODE’

             - ‘PyFunction_EVENT_MODIFY_DEFAULTS’

             - ‘PyFunction_EVENT_MODIFY_KWDEFAULTS’

     Adicionado na versão 3.12.

 -- C Tipo: typedef int (*PyFunction_WatchCallback)(*note
          PyFunction_WatchEvent: 5069. event, *note PyFunctionObject:
          561. *func, *note PyObject: 339. *new_value)

     Tipo de uma função de retorno de sentinela de função.

     Se 'event' for ‘PyFunction_EVENT_CREATE’ ou
     ‘PyFunction_EVENT_DESTROY’, 'new_value' será ‘NULL’.  Senão,
     'new_value' portará uma *note referência emprestada: 33e. ao novo
     valor prestes a ser guardado em 'func' para o atributo que está
     sendo modificado.

     A função de retorno poderá somente inspecionar, e não modificar
     'func'.  Caso contrário, poderíamos ter efeitos imprevisíveis,
     incluindo recursão infinita.

     Se 'event' for ‘PyFunction_EVENT_CREATE’, a função de retorno será
     invocada após 'func' ter sido completamente inicializada.  Caso
     contrário, a função de retorno será invocada antes de modificar
     'func', então o estado anterior de 'func' poderá ser inspecionado.
     O ambiente de execução pode otimizar a criação de objetos função,
     quando possível, ao ignorá-las.  Nesses casos, nenhum evento será
     emitido.  Apesar de decisões de otimização criarem diferenças de
     comportamento em tempo de execução, elas não mudam a semântica do
     código Python sendo executado.

     Se 'event' for ‘PyFunction_EVENT_DESTROY’, então obter uma
     referência dentro da função de retorno para a função prestes a ser
     destruída irá revivê-la, impedindo que esta função seja liberada
     nesse tempo.  Quando o objeto revivido for destruído, quaisquer
     funções de retorno sentinelas ativas nesse momento poderão ser
     chamadas novamente.

     Se a função de retorno definir uma exceção, ela deverá retornar
     ‘-1’.  Essa exceção será exibida como uma exceção não levantável
     usando *note PyErr_WriteUnraisable(): 34d.  Caso contrário, deverá
     retornar ‘0’.

     É possível que já exista uma exceção pendente definida na entrada
     da função de retorno.  Nesse caso, a função de retorno deve
     retornar ‘0’ com a mesma exceção ainda definida.  Isso significa
     que a função de retorno não pode chamar nenhuma outra API que possa
     definir uma exceção, a menos que salve e limpe o estado da exceção
     primeiro e restaure a exceção antes de retornar.

     Adicionado na versão 3.12.


File: python.info,  Node: Objetos de Método de Instância,  Next: Objetos método<2>,  Prev: Objetos Function<3>,  Up: Objetos Function<2>

7.8.5.2 Objetos de Método de Instância
......................................

Um método de instância é um invólucro para um *note PyCFunction: 14c0. e
a nova maneira de vincular um *note PyCFunction: 14c0. a um objeto
classe.  Ele substitui a chamada anterior ‘PyMethod_New(func, NULL,
class)’.

 -- C Variável: *note PyTypeObject: ab4. PyInstanceMethod_Type

     Esta instância de *note PyTypeObject: ab4. representa o tipo de
     método de instância Python.  Não é exposto a programas Python.

 -- C Função: int PyInstanceMethod_Check (PyObject *o)

     Retorna verdadeiro se 'o' é um objeto de método de instância (tem
     tipo *note PyInstanceMethod_Type: 506f.).  O parâmetro não deve ser
     ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: *note PyObject: 339. *PyInstanceMethod_New (PyObject
          *func)
     'Retorna valor: Nova referência.'  Retorna um novo objeto de método
     de instância, com 'func' sendo qualquer objeto chamável.  'func' é
     a função que será chamada quando o método de instância for chamado.

 -- C Função: *note PyObject: 339. *PyInstanceMethod_Function (PyObject
          *im)
     'Retorna valor: Referência emprestada.'  Retorna o objeto função
     associado ao método de instância 'im'.

 -- C Função: *note PyObject: 339. *PyInstanceMethod_GET_FUNCTION
          (PyObject *im)
     'Retorna valor: Referência emprestada.'  Versão macro de *note
     PyInstanceMethod_Function(): 5072. que evita a verificação de
     erros.


File: python.info,  Node: Objetos método<2>,  Next: Objeto célula,  Prev: Objetos de Método de Instância,  Up: Objetos Function<2>

7.8.5.3 Objetos método
......................

Métodos são objetos função vinculados.  Os métodos são sempre associados
a uma instância de uma classe definida pelo usuário.  Métodos não
vinculados (métodos vinculados a um objeto de classe) não estão mais
disponíveis.

 -- C Variável: *note PyTypeObject: ab4. PyMethod_Type

     Esta instância de *note PyTypeObject: ab4. representa o tipo de
     método Python.  Isso é exposto a programas Python como
     ‘types.MethodType’.

 -- C Função: int PyMethod_Check (PyObject *o)

     Retorna verdadeiro se 'o' é um objeto de método (tem tipo *note
     PyMethod_Type: 5076.).  O parâmetro não deve ser ‘NULL’.  Esta
     função sempre tem sucesso.

 -- C Função: *note PyObject: 339. *PyMethod_New (PyObject *func,
          PyObject *self)
     'Retorna valor: Nova referência.'  Retorna um novo objeto de
     método, com 'func' sendo qualquer objeto chamável e 'self' a
     instância à qual o método deve ser vinculado.  'func' é a função
     que será chamada quando o método for chamado.  'self' não deve ser
     ‘NULL’.

 -- C Função: *note PyObject: 339. *PyMethod_Function (PyObject *meth)
     'Retorna valor: Referência emprestada.'  Retorna o objeto função
     associado ao método 'meth'.

 -- C Função: *note PyObject: 339. *PyMethod_GET_FUNCTION (PyObject
          *meth)
     'Retorna valor: Referência emprestada.'  Versão macro de *note
     PyMethod_Function(): 5079. que evita a verificação de erros.

 -- C Função: *note PyObject: 339. *PyMethod_Self (PyObject *meth)
     'Retorna valor: Referência emprestada.'  Retorna a instância
     associada com o método 'meth'.

 -- C Função: *note PyObject: 339. *PyMethod_GET_SELF (PyObject *meth)
     'Retorna valor: Referência emprestada.'  Versão macro de *note
     PyMethod_Self(): 507b. que evita a verificação de erros.


File: python.info,  Node: Objeto célula,  Next: Objetos código<3>,  Prev: Objetos método<2>,  Up: Objetos Function<2>

7.8.5.4 Objeto célula
.....................

Objetos “cell” são usados para implementar variáveis referenciadas por
múltiplos escopos.  Para cada variável, um objeto célula é criado para
armazenar o valor; as variáveis locais de cada quadro de pilha que
referencia o valor contêm uma referência para as células de escopos
externos que também usam essa variável.  Quando o valor é acessado, o
valor contido na célula é usado em vez do próprio objeto da célula.
Essa des-referência do objeto da célula requer suporte do código de
bytes gerado; estes não são automaticamente desprezados quando
acessados.  Objetos de células provavelmente não serão úteis em outro
lugar.

 -- C Tipo: type PyCellObject

     A estrutura C usada para objetos célula.

 -- C Variável: *note PyTypeObject: ab4. PyCell_Type

     O objeto de tipo correspondente aos objetos célula.

 -- C Função: int PyCell_Check (PyObject *ob)

     Retorna verdadeiro se 'ob' for um objeto célula; 'ob' não deve ser
     ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: *note PyObject: 339. *PyCell_New (PyObject *ob)
     'Retorna valor: Nova referência.'  Cria e retorna um novo objeto
     célula contendo o valor 'ob'.  O parâmetro pode ser ‘NULL’.

 -- C Função: *note PyObject: 339. *PyCell_Get (PyObject *cell)
     'Retorna valor: Nova referência.'  Retorna o conteúdo da célula
     'cell', que pode ser ‘NULL’.  Se 'cell' não for um objeto célula,
     retorna ‘NULL’ com um conjunto de exceções.

 -- C Função: *note PyObject: 339. *PyCell_GET (PyObject *cell)
     'Retorna valor: Referência emprestada.'  Retorna o conteúdo da
     célula 'cell', mas sem verificar se 'cell' não é ‘NULL’ e um objeto
     célula.

 -- C Função: int PyCell_Set (PyObject *cell, PyObject *value)

     Define o conteúdo do objeto da célula 'cell' como 'value'.  Isso
     libera a referência a qualquer conteúdo atual da célula.  'value'
     pode ser ‘NULL’.  'cell' não pode ser ‘NULL’.

     Em caso de sucesso, retorna ‘0’.  Se 'cell' não for um objeto
     célula, define uma exceção e retorna ‘-1’.

 -- C Função: void PyCell_SET (PyObject *cell, PyObject *value)

     Define o valor do objeto da célula 'cell' como 'value'.  Nenhuma
     contagem de referência é ajustada e nenhuma verificação é feita
     quanto à segurança; 'cell' não pode ser ‘NULL’ e deve ser um objeto
     célula.


File: python.info,  Node: Objetos código<3>,  Next: Sinalizadores de objetos código,  Prev: Objeto célula,  Up: Objetos Function<2>

7.8.5.5 Objetos código
......................

Os objetos código são um detalhe de baixo nível da implementação do
CPython.  Cada um representa um pedaço de código executável que ainda
não foi vinculado a uma função.

 -- C Tipo: type PyCodeObject

     A estrutura C dos objetos usados para descrever objetos código.  Os
     campos deste tipo estão sujeitos a alterações a qualquer momento.

 -- C Variável: *note PyTypeObject: ab4. PyCode_Type

     Esta é uma instância de *note PyTypeObject: ab4. representando o
     *note objeto código: 1d2. Python.

 -- C Função: int PyCode_Check (PyObject *co)

     Retorna verdadeiro se 'co' for um *note objeto código: 1d2.  Esta
     função sempre tem sucesso.

 -- C Função: *note Py_ssize_t: a69. PyCode_GetNumFree (PyCodeObject
          *co)

     Retorna o número de *note variáveis livres (de clausura): 20d1. em
     um objeto código.

 -- C Função: int PyUnstable_Code_GetFirstFree (PyCodeObject *co)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Retorna a posição da primeira *note variável livre (de clausura):
     20d1. em um objeto código.

     Alterado na versão 3.13: Renomeado de ‘PyCode_GetFirstFree’ como
     parte da *note API C Instável: 547.  O nome antigo foi
     descontinuado, mas continuará disponível até que a assinatura mude
     novamente.

 -- C Função: *note PyCodeObject: 777. *PyUnstable_Code_New (int
          argcount, int kwonlyargcount, int nlocals, int stacksize, int
          flags, PyObject *code, PyObject *consts, PyObject *names,
          PyObject *varnames, PyObject *freevars, PyObject *cellvars,
          PyObject *filename, PyObject *name, PyObject *qualname, int
          firstlineno, PyObject *linetable, PyObject *exceptiontable)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Devolve um novo objeto código.  Se precisar de um objeto código
     vazio para criar um quadro, use *note PyCode_NewEmpty(): 1396.

     Como a definição de bytecode muda constantemente, chamar *note
     PyUnstable_Code_New(): 508d. diretamente pode vinculá-lo a uma
     versão de Python específica.

     Os vários argumentos desta função são inter-dependentes de maneiras
     complexas, significando que mesmo alterações discretas de valor tem
     chances de resultar em execução incorreta ou erros fatais de VM.
     Tenha extremo cuidado ao usar esta função.

     Alterado na versão 3.11: Adicionou os parâmetros ‘qualname’ e
     ‘exceptiontable’

     Alterado na versão 3.12: Renomeado de ‘PyCode_New’ como parte da
     *note API C Instável: 547.  O nome antigo foi descontinuado, mas
     continuará disponível até que a assinatura mude novamente.

 -- C Função: *note PyCodeObject: 777.
          *PyUnstable_Code_NewWithPosOnlyArgs (int argcount, int
          posonlyargcount, int kwonlyargcount, int nlocals, int
          stacksize, int flags, PyObject *code, PyObject *consts,
          PyObject *names, PyObject *varnames, PyObject *freevars,
          PyObject *cellvars, PyObject *filename, PyObject *name,
          PyObject *qualname, int firstlineno, PyObject *linetable,
          PyObject *exceptiontable)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Similar a *note PyUnstable_Code_New(): 508d, mas com um
     “posonlyargcount” extra para argumentos somente-posicionais.  As
     mesmas ressalvas que se aplicam a ‘PyUnstable_Code_New’ também se
     aplicam a essa função.

     Adicionado na versão 3.8: Como ‘PyCode_NewWithPosOnlyArgs’

     Alterado na versão 3.11: Adicionados os parâmetros ‘qualname’ e
     ‘exceptiontable’

     Alterado na versão 3.12: Renomeado para
     ‘PyUnstable_Code_NewWithPosOnlyArgs’.  O nome antigo foi
     descontinuado, mas continuará disponível até que a assinatura mude
     novamente.

 -- C Função: *note PyCodeObject: 777. *PyCode_NewEmpty (const char
          *filename, const char *funcname, int firstlineno)
     'Retorna valor: Nova referência.'  Retorna um novo objeto código
     vazio com o nome de arquivo, nome da função e número da primeira
     linha especificados.  O objeto código resultante irá levantar uma
     ‘Exception’ se executado.

 -- C Função: int PyCode_Addr2Line (PyCodeObject *co, int byte_offset)

     Retorna o número da linha da instrução que ocorre em ou antes de
     ‘byte_offset’ e termina depois disso.  Se você só precisa do número
     da linha de um quadro, use *note PyFrame_GetLineNumber(): 78b.

     Para iterar eficientemente sobre os números de linha em um objeto
     código, use a API descrita na PEP 626(1) .

 -- C Função: int PyCode_Addr2Location (PyObject *co, int byte_offset,
          int *start_line, int *start_column, int *end_line, int
          *end_column)

     Define os ponteiros ‘int’ passados para a linha do código-fonte e
     os números da coluna para a instrução em ‘byte_offset’.  Define o
     valor como ‘0’ quando as informações não estão disponíveis para
     nenhum elemento em particular.

     Retorna ‘1’ se a função for bem-sucedida e 0 caso contrário.

     Adicionado na versão 3.11.

 -- C Função: *note PyObject: 339. *PyCode_GetCode (PyCodeObject *co)

     Equivalente ao código Python ‘getattr(co, 'co_code')’.  Retorna uma
     referência forte a um *note PyBytesObject: 792. representando o
     bytecode em um objeto código.  Em caso de erro, ‘NULL’ é retornado
     e uma exceção é levantada.

     Este ‘PyBytesObject’ pode ser criado sob demanda pelo interpretador
     e não representa necessariamente o bytecode realmente executado
     pelo CPython.  O caso de uso primário para esta função são
     depuradores e criadores de perfil.

     Adicionado na versão 3.11.

 -- C Função: *note PyObject: 339. *PyCode_GetVarnames (PyCodeObject
          *co)

     Equivalente ao código Python ‘getattr(co, 'co_varnames')’.  Retorna
     uma nova referência a um *note PyTupleObject: 4eac. contendo os
     nomes das variáveis locais.  Em caso de erro, ‘NULL’ é retornado e
     uma exceção é levantada.

     Adicionado na versão 3.11.

 -- C Função: *note PyObject: 339. *PyCode_GetCellvars (PyCodeObject
          *co)

     Equivalente ao código Python ‘getattr(co, 'co_cellvars')’.  Retorna
     uma nova referência a um *note PyTupleObject: 4eac. contendo os
     nomes das variáveis locais referenciadas por funções aninhadas.  Em
     caso de erro, ‘NULL’ é retornado e uma exceção é levantada.

     Adicionado na versão 3.11.

 -- C Função: *note PyObject: 339. *PyCode_GetFreevars (PyCodeObject
          *co)

     Equivalente ao código Python ‘getattr(co, 'co_freevars')’.  Retorna
     uma nova referência a um *note PyTupleObject: 4eac. contendo os
     nomes das *note variáveis livres (de clausura): 20d1.  Em caso de
     erro, ‘NULL’ é retornado e uma exceção é levantada.

     Adicionado na versão 3.11.

 -- C Função: int PyCode_AddWatcher (PyCode_WatchCallback callback)

     Registra 'callback' como um observador do objeto código para o
     interpretador atual.  Devolve um ID que pode ser passado para *note
     PyCode_ClearWatcher(): 567.  Em caso de erro (por exemplo, não há
     IDs de observadores disponíveis), devolve ‘-1’ e define uma
     exceção.

     Adicionado na versão 3.12.

 -- C Função: int PyCode_ClearWatcher (int watcher_id)

     Libera o observador identificado por 'watcher_id' anteriormente
     retornado por *note PyCode_AddWatcher(): 566. para o interpretador
     atual.  Retorna ‘0’ em caso de sucesso ou ‘-1’ em caso de erro e
     levanta uma exceção (ex., se o 'watcher_id' dado não foi
     registrado.)

     Adicionado na versão 3.12.

 -- C Tipo: type PyCodeEvent

     Enumeração dos possíveis eventos de observador do objeto código:
     ‘PY_CODE_EVENT_CREATE’ - ‘PY_CODE_EVENT_DESTROY’

     Adicionado na versão 3.12.

 -- C Tipo: typedef int (*PyCode_WatchCallback)(*note PyCodeEvent: 5090.
          event, *note PyCodeObject: 777. *co)

     Tipo de uma função de callback de observador de objeto código.

     Se 'evento' é ‘PY_CODE_EVENT_CREATE’, então a função de retorno é
     invocada após 'co' ter sido completamente inicializado.  Senão, a
     função de retorno é invocada antes que a destruição de 'co' ocorra,
     para que o estado anterior de 'co' possa ser inspecionado.

     Se 'evento' for ‘PY_CODE_EVENT_DESTROY’, obter uma referência para
     a função de retorno do objeto-a-ser-destruído irá reativá-lo e
     impedirá que o objeto seja liberado.  Quando o objeto reativado é
     posteriormente destruído, qualquer observador de funções de retorno
     ativos naquele momento serão chamados novamente.

     Usuários desta API não devem depender de detalhes internos de
     implementação em tempo de execução.  Tais detalhes podem incluir,
     mas não estão limitados a: o ordem e o momento exatos da criação e
     destruição de objetos código.  Enquanto alterações nestes detalhes
     podem resultar em diferenças que são visíveis para os observadores
     (incluindo se uma função de retorno é chamada ou não), isso não
     muda a semântica do código Python executado.

     Se a função de retorno definir uma exceção, ela deverá retornar
     ‘-1’.  Essa exceção será exibida como uma exceção não levantável
     usando *note PyErr_WriteUnraisable(): 34d.  Caso contrário, deverá
     retornar ‘0’.

     É possível que já exista uma exceção pendente definida na entrada
     da função de retorno.  Nesse caso, a função de retorno deve
     retornar ‘0’ com a mesma exceção ainda definida.  Isso significa
     que a função de retorno não pode chamar nenhuma outra API que possa
     definir uma exceção, a menos que salve e limpe o estado da exceção
     primeiro e restaure a exceção antes de retornar.

     Adicionado na versão 3.12.

 -- C Função: *note PyObject: 339. *PyCode_Optimize (PyObject *code,
          PyObject *consts, PyObject *names, PyObject *lnotab_obj)

     Esta é uma função *note suavemente descontinuada: 209. que faz
     nada.

     Antes do Python 3.10, essa função realizava otimizações básicas em
     um objeto código.

     Alterado na versão 3.10: Esta função agora não faz nada.

   ---------- Footnotes ----------

   (1) 
https://peps.python.org/pep-0626/#out-of-process-debuggers-and-profilers


File: python.info,  Node: Sinalizadores de objetos código,  Next: Informação adicional,  Prev: Objetos código<3>,  Up: Objetos Function<2>

7.8.5.6 Sinalizadores de objetos código
.......................................

Objetos código contêm um campo de bits de sinalizadores, que podem ser
recuperados como o atributo Python *note co_flags: 20d6. (por exemplo,
usando *note PyObject_GetAttrString(): 348.) e definidos usando um
argumento 'flags' para *note PyUnstable_Code_New(): 508d. e funções
semelhantes.

Os sinalizadores cujos nomes começam com ‘CO_FUTURE_’ correspondem a
recursos normalmente selecionáveis por *note instruções future: 189.
Esses sinalizadores podem ser usados em *note PyCompilerFlags.cf_flags:
4e6f.  Observe que muitos sinalizadores ‘CO_FUTURE_’ são obrigatórios
nas versões atuais do Python, e defini-los não tem efeito.

Os seguintes sinalizador estão disponíveis.  Para saber o significado
delas, consulte a documentação vinculada de seus equivalentes em Python.

Sinalizador                                            Significado
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
 -- C Macro: CO_OPTIMIZED                              *note inspect.CO_OPTIMIZED: 46fb.
                                                       
                                                       
 -- C Macro: CO_NEWLOCALS                              *note inspect.CO_NEWLOCALS: 46fc.
                                                       
                                                       
 -- C Macro: CO_VARARGS                                *note inspect.CO_VARARGS: 46fd.
                                                       
                                                       
 -- C Macro: CO_VARKEYWORDS                            *note inspect.CO_VARKEYWORDS: 46fe.
                                                       
                                                       
 -- C Macro: CO_NESTED                                 *note inspect.CO_NESTED: 46ff.
                                                       
                                                       
 -- C Macro: CO_GENERATOR                              *note inspect.CO_GENERATOR: 4700.
                                                       
                                                       
 -- C Macro: CO_COROUTINE                              *note inspect.CO_COROUTINE: 4701.
                                                       
                                                       
 -- C Macro: CO_ITERABLE_COROUTINE                     *note inspect.CO_ITERABLE_COROUTINE: 4702.
                                                       
                                                       
 -- C Macro: CO_ASYNC_GENERATOR                        *note inspect.CO_ASYNC_GENERATOR: 4703.
                                                       
                                                       
 -- C Macro: CO_FUTURE_DIVISION                        sem efeito (*note __future__.division: 46a4.)
                                                       
                                                       
 -- C Macro: CO_FUTURE_ABSOLUTE_IMPORT                 sem efeito (*note __future__.absolute_import: 46a5.)
                                                       
                                                       
 -- C Macro: CO_FUTURE_WITH_STATEMENT                  sem efeito (*note __future__.with_statement: 46a6.)
                                                       
                                                       
 -- C Macro: CO_FUTURE_PRINT_FUNCTION                  sem efeito (*note __future__.print_function: 46a7.)
                                                       
                                                       
 -- C Macro: CO_FUTURE_UNICODE_LITERALS                sem efeito
                                                       (*note __future__.unicode_literals: 46a8.)
                                                       
                                                       
 -- C Macro: CO_FUTURE_GENERATOR_STOP                  sem efeito (*note __future__.generator_stop: 46a9.)
                                                       
                                                       
 -- C Macro: CO_FUTURE_ANNOTATIONS                     *note __future__.annotations: 46aa.
                                                       


File: python.info,  Node: Informação adicional,  Prev: Sinalizadores de objetos código,  Up: Objetos Function<2>

7.8.5.7 Informação adicional
............................

Para oferece suporte a extensões de baixo nível de avaliação de quadro
(frame), tais como compiladores “just-in-time”, é possível anexar dados
arbitrários adicionais a objetos código.

Estas funções são parte da camada instável da API C: Essa funcionalidade
é um detalhe de implementação do CPython, e a API pode mudar sem avisos
de descontinuidade.

 -- C Função: *note Py_ssize_t: a69.
          PyUnstable_Eval_RequestCodeExtraIndex (freefunc free)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Retorna um novo e opaco valor de índice usado para adicionar dados
     a objetos código.

     Geralmente, você chama esta função apenas uma vez (por
     interpretador) e usa o resultado com ‘PyCode_GetExtra’ e
     ‘PyCode_SetExtra’ para manipular dados em objetos código
     individuais.

     Se 'free' não for ‘NULL’: quando o objeto código é desalocado,
     'free' será chamado em dados não-‘NULL’ armazenados sob o novo
     índice.  Use *note Py_DecRef(): 4dc1. quando armazenar *note
     PyObject: 339.

     Adicionado na versão 3.6: como ‘_PyEval_RequestCodeExtraIndex’

     Alterado na versão 3.12: Renomeado para
     ‘PyUnstable_Eval_RequestCodeExtraIndex’.  O nome antigo nome
     privado foi descontinuado, mas continuará disponível até a mudança
     da API.

 -- C Função: int PyUnstable_Code_GetExtra (PyObject *code, Py_ssize_t
          index, void **extra)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Define 'extra' para os dados adicionais armazenados sob o novo
     índice dado.  Retorna 0 em caso de sucesso.  Define uma exceção e
     retorna -1 em caso de erro.

     Se nenhum dado foi determinado sob o índice, define 'extra' como
     ‘NULL’ e retorna 0 sem definir nenhuma exceção.

     Adicionado na versão 3.6: como ‘_PyCode_GetExtra’

     Alterado na versão 3.12: Renomeado para ‘PyUnstable_Code_GetExtra’.
     O nome antigo privado foi descontinuado, mas continuará disponível
     até a mudança da API.

 -- C Função: int PyUnstable_Code_SetExtra (PyObject *code, Py_ssize_t
          index, void *extra)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Define os dados extras armazenados sob o índice dado a 'extra'.
     Retorna 0 em caso de sucesso.  Define uma exceção e retorna -1 em
     caso de erro.

     Adicionado na versão 3.6: como ‘_PyCode_SetExtra’

     Alterado na versão 3.12: Renomeado para ‘PyUnstable_Code_SetExtra’.
     O nome antigo privado foi descontinuado, mas continuará disponível
     até a mudança da API.


File: python.info,  Node: Outros Objetos,  Next: API C para módulos de extensão,  Prev: Objetos Function<2>,  Up: Camada de Objetos Concretos

7.8.6 Outros Objetos
--------------------

* Menu:

* Objetos arquivos::
* Objetos do Módulo::
* Objetos Iteradores::
* Objetos descritores::
* Objetos Slice::
* Objetos MemoryView::
* Objetos buffer serializados com pickle::
* Objetos referência fraca: Objetos referência fraca<2>.
* Capsules: Capsules<2>.
* Objetos Frame::
* Objetos Geradores::
* Objetos corrotina: Objetos corrotina<2>.
* Objetos de variáveis de contexto::
* Objetos de indicação de tipos::


File: python.info,  Node: Objetos arquivos,  Next: Objetos do Módulo,  Up: Outros Objetos

7.8.6.1 Objetos arquivos
........................

Essas APIs são uma emulação mínima da API C do Python 2 para objetos
arquivo embutidos, que costumavam depender do suporte de E/S em buffer
(FILE*) da biblioteca C padrão.  No Python 3, arquivos e streams usam o
novo módulo *note io: 7f, que define várias camadas sobre a E/S sem
buffer de baixo nível do sistema operacional.  As funções descritas a
seguir são invólucros de conveniência para o C sobre essas novas APIs e
são destinadas principalmente para relatórios de erros internos no
interpretador; código de terceiros é recomendado para acessar as APIs de
*note io: 7f.

 -- C Função: *note PyObject: 339. *PyFile_FromFd (int fd, const char
          *name, const char *mode, int buffering, const char *encoding,
          const char *errors, const char *newline, int closefd)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Cria um objeto arquivo Python a partir do descritor de
     arquivo de um arquivo já aberto 'fd'.  Os argumentos 'name',
     'encoding', 'errors' and 'newline' podem ser ‘NULL’ para usar os
     padrões; 'buffering' pode ser '-1' para usar o padrão.  'name' é
     ignorado e mantido para compatibilidade com versões anteriores.
     Retorna ‘NULL’ em caso de falha.  Para uma descrição mais
     abrangente dos argumentos, consulte a documentação da função *note
     io.open(): 51d.

          Aviso: Como os streams do Python têm sua própria camada de
          buffer, combiná-los com os descritores de arquivo no nível do
          sistema operacional pode produzir vários problemas (como
          ordenação inesperada de dados).

     Alterado na versão 3.2: Ignora atributo 'name'.

 -- C Função: int PyObject_AsFileDescriptor (PyObject *p)
     ' Parte da *note ABI Estável: 553.'  Retorna o descritor de arquivo
     associado a 'p' como um int.  Se o objeto for um inteiro, seu valor
     será retornado.  Caso contrário, o método *note fileno(): 15d0. do
     objeto será chamado se existir; o método deve retornar um inteiro,
     que é retornado como o valor do descritor de arquivo.  Define uma
     exceção e retorna ‘-1’ em caso de falha.

 -- C Função: *note PyObject: 339. *PyFile_GetLine (PyObject *p, int n)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

     Equivalente a ‘p.readline([n])’, esta função lê uma linha do objeto
     'p'.  'p' pode ser um objeto arquivo ou qualquer objeto com um
     método *note readline(): 241f.  Se 'n' for ‘0’, exatamente uma
     linha é lida, independentemente do comprimento da linha.  Se 'n'
     for maior que ‘0’, não mais do que 'n' bytes serão lidos do
     arquivo; uma linha parcial pode ser retornada.  Em ambos os casos,
     uma string vazia é retornada se o final do arquivo for alcançado
     imediatamente.  Se 'n' for menor que ‘0’, entretanto, uma linha é
     lida independentemente do comprimento, mas *note EOFError: 131c. é
     levantada se o final do arquivo for alcançado imediatamente.

 -- C Função: int PyFile_SetOpenCodeHook (Py_OpenCodeHookFunction
          handler)

     Substitui o comportamento normal de *note io.open_code(): 181c.
     para passar seu parâmetro por meio do manipulador fornecido.

     O 'handler' é uma função do tipo:

      -- C Tipo: typedef *note PyObject: 339.
               *(*Py_OpenCodeHookFunction)(*note PyObject: 339.*, void*)

          Equivalente de *note PyObject: 339. *(*)(*note PyObject: 339.
          *path, void *userData), sendo 'path' garantido como sendo
          *note PyUnicodeObject: 794.

     O ponteiro 'userData' é passado para a função de gancho.  Como as
     funções de gancho podem ser chamadas de diferentes tempos de
     execução, esse ponteiro não deve se referir diretamente ao estado
     do Python.

     Como este gancho é usado intencionalmente durante a importação,
     evite importar novos módulos durante sua execução, a menos que eles
     estejam congelados ou disponíveis em ‘sys.modules’.

     Uma vez que um gancho foi definido, ele não pode ser removido ou
     substituído, e chamadas posteriores para *note
     PyFile_SetOpenCodeHook(): 181e. irão falhar.  Em caso de falha, a
     função retorna -1 e define uma exceção se o interpretador foi
     inicializado.

     É seguro chamar esta função antes *note Py_Initialize(): 8b1.

     Levanta um *note evento de auditoria: 19fa. ‘setopencodehook’ sem
     argumentos.

     Adicionado na versão 3.8.

 -- C Função: *note PyObject: 339. *PyFile_OpenCodeObject (PyObject
          *path)

     Abre o arquivo 'path' com o modo ‘'rb'’.  'path' deve ser um objeto
     Python da classe *note str: 44c.  O comportamento desta função pode
     ser substituído por *note PyFile_SetOpenCodeHook(): 181e. para
     permitir algum pré-processamento do texto.

     Isso é análogo a *note io.open_code(): 181c. no Python.

     Em caso de sucesso, esta função retorna uma *note referência forte:
     33d. a um objeto arquivo Python.  Em caso de falha, esta função
     retorna ‘NULL’ com uma exceção definida.

     Adicionado na versão 3.8.

 -- C Função: *note PyObject: 339. *PyFile_OpenCode (const char *path)

     Semelhante a *note PyFile_OpenCodeObject(): 50af, mas 'path' é um
     const char* codificado em UTF-8.

     Adicionado na versão 3.8.

 -- C Função: int PyFile_WriteObject (PyObject *obj, PyObject *p, int
          flags)
     ' Parte da *note ABI Estável: 553.'

     Escreve o objeto 'obj' no objeto arquivo 'p'.  O único sinalizador
     suportado para 'flags' é *note Py_PRINT_RAW: 4f10.; se fornecido, o
     *note str(): 44c. do objeto é escrito em vez de *note repr(): 800.
     Retorna ‘0’ em caso de sucesso ou ‘-1’ em caso de falha; a exceção
     apropriada será definida.

 -- C Função: int PyFile_WriteString (const char *s, PyObject *p)
     ' Parte da *note ABI Estável: 553.'  Escreve a string 's' no objeto
     arquivo 'p'.  Retorna ‘0’ em caso de sucesso ou ‘-1’ em caso de
     falha; a exceção apropriada será definida.


File: python.info,  Node: Objetos do Módulo,  Next: Objetos Iteradores,  Prev: Objetos arquivos,  Up: Outros Objetos

7.8.6.2 Objetos do Módulo
.........................

 -- C Variável: *note PyTypeObject: ab4. PyModule_Type
     ' Parte da *note ABI Estável: 553.'

     This instance of *note PyTypeObject: ab4. represents the Python
     module type.  This is exposed to Python programs as *note
     types.ModuleType: e3f.

 -- C Função: int PyModule_Check (PyObject *p)

     Retorna true se 'p' for um objeto de módulo ou um subtipo de um
     objeto de módulo.  Esta função sempre é bem-sucedida.

 -- C Função: int PyModule_CheckExact (PyObject *p)

     Retorna true se 'p' for um objeto de módulo, mas não um subtipo de
     *note PyModule_Type: 4d00.  Essa função é sempre bem-sucedida.

 -- C Função: *note PyObject: 339. *PyModule_NewObject (PyObject *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.7.'

     Retorna um novo objeto de módulo com *note module.__name__: 13d2.
     definido como 'name'.  Os atributos ‘__name__’, *note __doc__:
     1978, *note __package__: 2d7. e *note __loader__: 2e2. do módulo
     são preenchidos (todos, exceto ‘__name__’, são definidos como
     ‘None’).  O chamador é responsável por definir um atributo *note
     __file__: 20ad.

     Retorna ‘NULL’ com uma exceção definida em caso de erro.

     Adicionado na versão 3.3.

     Alterado na versão 3.4: *note __package__: 2d7. e *note __loader__:
     2e2. agora estão definidos como ‘None’.

 -- C Função: *note PyObject: 339. *PyModule_New (const char *name)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Semelhante a *note PyModule_NewObject(): 4cfe, mas o nome é
     uma string codificada em UTF-8 em vez de um objeto Unicode.

 -- C Função: *note PyObject: 339. *PyModule_GetDict (PyObject *module)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'

     Retorna o objeto dicionário que implementa o espaço de nomes de
     'module'; este objeto é o mesmo que o atributo *note __dict__: 55b.
     do objeto de módulo.  Se 'module' não for um objeto de módulo (ou
     um subtipo de um objeto de módulo), *note SystemError: 575. é
     levantada e ‘NULL’ é retornado.

     É recomendado que as extensões usem outras funções ‘PyModule_*’ e
     ‘PyObject_*’ em vez de manipular diretamente o *note __dict__: 55b.
     de um módulo.

     The returned reference is borrowed from the module; it is valid
     until the module is destroyed.

 -- C Função: *note PyObject: 339. *PyModule_GetNameObject (PyObject
          *module)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.7.'

     Retorna o valor *note __name__: 13d2. do 'module'.  Se o módulo não
     fornecer um, ou se não for uma string, *note SystemError: 575. é
     levantada e ‘NULL’ é retornado.

     Adicionado na versão 3.3.

 -- C Função: const char *PyModule_GetName (PyObject *module)
     ' Parte da *note ABI Estável: 553.'  Semelhante a *note
     PyModule_GetNameObject(): 4cfc. mas retorna o nome codificado em
     ‘'utf-8'’

     The returned buffer is only valid until the module is renamed or
     destroyed.  Note that Python code may rename a module by setting
     its *note __name__: 13d2. attribute.

 -- C Função: void *PyModule_GetState (PyObject *module)
     ' Parte da *note ABI Estável: 553.'  Retorna o “estado” do módulo,
     ou seja, um ponteiro para o bloco de memória alocado no momento de
     criação do módulo, ou ‘NULL’.  Ver *note PyModuleDef.m_size: 986.

 -- C Função: *note PyModuleDef: 984. *PyModule_GetDef (PyObject
          *module)
     ' Parte da *note ABI Estável: 553.'  Retorna um ponteiro para a
     estrutura *note PyModuleDef: 984. da qual o módulo foi criado, ou
     ‘NULL’ se o módulo não foi criado de uma definição.

     On error, return ‘NULL’ with an exception set.  Use *note
     PyErr_Occurred(): 1a3b. to tell this case apart from a missing
     ‘PyModuleDef’.

 -- C Função: *note PyObject: 339. *PyModule_GetFilenameObject (PyObject
          *module)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

     Retorna o nome do arquivo do qual o 'module' foi carregado usando o
     atributo *note __file__: 20ad. do 'module'.  Se não estiver
     definido, ou se não for uma string unicode, levanta *note
     SystemError: 575. e retorna ‘NULL’; Caso contrário, retorna uma
     referência a um objeto Unicode.

     Adicionado na versão 3.2.

 -- C Função: const char *PyModule_GetFilename (PyObject *module)
     ' Parte da *note ABI Estável: 553.'  Semelhante a *note
     PyModule_GetFilenameObject(): 3f9. mas retorna o nome do arquivo
     codificado em ‘utf-8’.

     The returned buffer is only valid until the module’s *note
     __file__: 20ad. attribute is reassigned or the module is destroyed.

     Descontinuado desde a versão 3.2: *note PyModule_GetFilename():
     3f8.: levanta *note UnicodeEncodeError: 677. quando há nomes de
     arquivos não codificáveis, use *note PyModule_GetFilenameObject():
     3f9.

* Menu:

* Inicializando módulos C::
* Pesquisa por módulos::


File: python.info,  Node: Inicializando módulos C,  Next: Pesquisa por módulos,  Up: Objetos do Módulo

7.8.6.3 Inicializando módulos C
...............................

Objetos de módulos são geralmente criados a partir de módulos de
extensão (bibliotecas compartilhadas que exportam uma função de
inicialização), ou módulos compilados (onde a função de inicialização é
adicionada usando *note PyImport_AppendInittab(): 18a4.).  Ver *note
Construindo extensões C e C++: 4b51. ou *note Extending Embedded Python:
4bbf. para mais detalhes.

A função de inicialização pode passar uma instância de definição de
módulo para *note PyModule_Create(): 50b8. e retornar o objeto de módulo
resultante ou solicitar “inicialização multifásica” retornando a própria
estrutura de definição.

 -- C Tipo: type PyModuleDef
     ' Parte da *note ABI Estável: 553. (incluindo todos os membros).'
     A estrutura de definição de módulo, que contém todas as informações
     necessária para criar um objeto de módulo.  Geralmente, há apenas
     uma variável inicializada estaticamente desse tipo para cada
     módulo.

      -- C Membro: PyModuleDef_Base m_base

          Sempre inicializa este membro para ‘PyModuleDef_HEAD_INIT’.

      -- C Membro: const char *m_name

          Nome para o novo módulo.

      -- C Membro: const char *m_doc

          Docstring para o módulo; geralmente uma variável docstring
          criada com *note PyDoc_STRVAR: 1aea. é usada.

      -- C Membro: *note Py_ssize_t: a69. m_size

          O estado do módulo pode ser mantido em uma área de memória por
          módulo que pode ser recuperada com *note PyModule_GetState():
          987, em vez de em globais estáticos.  Isso torna os módulos
          seguros para uso em vários subinterpretadores.

          Esta área de memória é alocada com base em 'm_size' na criação
          do módulo e liberada quando o objeto do módulo é desalocado,
          após a função *note m_free: 983. ter sido chamada, se
          presente.

          Definir ‘m_size’ como ‘-1’ significa que o módulo não oferece
          suporte a subinterpretadores, porque ele tem estado global.

          Defini-lo como um valor não negativo significa que o módulo
          pode ser reinicializado e especifica a quantidade adicional de
          memória necessária para seu estado.  ‘m_size’ não negativo é
          necessário para inicialização multifásica.

          Ver PEP 3121(1) para mais detalhes.

      -- C Membro: *note PyMethodDef: 151f. *m_methods

          Um ponteiro para uma tabela de funções de nível de módulo,
          descritas por valores *note PyMethodDef: 151f.  Pode ser
          ‘NULL’ se nenhuma função estiver presente.

      -- C Membro: *note PyModuleDef_Slot: 4cf6. *m_slots

          Uma matriz de definições de slot para inicialização
          multifásica, terminada por uma entrada ‘{0, NULL}’.  Ao usar
          inicialização monofásica, 'm_slots' deve ser ‘NULL’.

          Alterado na versão 3.5: Antes da versão 3.5, esse membro era
          sempre definido como ‘NULL’ e era definido como:

                -- C Membro: *note inquiry: 4e40. m_reload

      -- C Membro: *note traverseproc: 4e4f. m_traverse

          Uma função de travessia para chamar durante a travessia do GC
          do objeto do módulo, ou ‘NULL’ se não for necessário.

          Esta função não é mais chamada se o estado do módulo foi
          solicitado, mas ainda não está alocado.  Este é o caso
          imediatamente após o módulo ser criado e antes de o módulo ser
          executado (função *note Py_mod_exec: 985.).  Mais
          precisamente, esta função não é chamada se *note m_size: 986.
          for maior que 0 e o estado do módulo (como retornado por *note
          PyModule_GetState(): 987.) for ‘NULL’.

          Alterado na versão 3.9: Não é mais chamado antes que o estado
          do módulo seja alocado.

      -- C Membro: *note inquiry: 4e40. m_clear

          Uma função de limpeza para chamar durante a limpeza do GC do
          objeto do módulo, ou ‘NULL’ se não for necessário.

          Esta função não é mais chamada se o estado do módulo foi
          solicitado, mas ainda não está alocado.  Este é o caso
          imediatamente após o módulo ser criado e antes de o módulo ser
          executado (função *note Py_mod_exec: 985.).  Mais
          precisamente, esta função não é chamada se *note m_size: 986.
          for maior que 0 e o estado do módulo (como retornado por *note
          PyModule_GetState(): 987.) for ‘NULL’.

          Assim como *note PyTypeObject.tp_clear: 4b8b, esta função não
          é 'sempre' chamada antes de um módulo ser desalocado.  Por
          exemplo, quando a contagem de referências é suficiente para
          determinar que um objeto não é mais usado, o coletor de lixo
          cíclico não é envolvido e *note m_free: 983. é chamado
          diretamente.

          Alterado na versão 3.9: Não é mais chamado antes que o estado
          do módulo seja alocado.

      -- C Membro: *note freefunc: 50bf. m_free

          Uma função para ser chamada durante a desalocação do objeto do
          módulo, ou ‘NULL’ se não for necessário.

          Esta função não é mais chamada se o estado do módulo foi
          solicitado, mas ainda não está alocado.  Este é o caso
          imediatamente após o módulo ser criado e antes de o módulo ser
          executado (função *note Py_mod_exec: 985.).  Mais
          precisamente, esta função não é chamada se *note m_size: 986.
          for maior que 0 e o estado do módulo (como retornado por *note
          PyModule_GetState(): 987.) for ‘NULL’.

          Alterado na versão 3.9: Não é mais chamado antes que o estado
          do módulo seja alocado.

* Menu:

* inicialização de fase única::
* Inicialização multifásica::
* Funções de criação de módulo de baixo nível::
* Support functions::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3121/


File: python.info,  Node: inicialização de fase única,  Next: Inicialização multifásica,  Up: Inicializando módulos C

7.8.6.4 inicialização de fase única
...................................

A função de inicialização do módulo pode criar e retornar o objeto do
módulo diretamente.  Isso é chamado de “inicialização de fase única” e
usa uma das duas funções de criação de módulo a seguir:

 -- C Função: *note PyObject: 339. *PyModule_Create (PyModuleDef *def)
     'Retorna valor: Nova referência.'  Cria um novo objeto de módulo,
     dada a definição em 'def'.  Isso se comporta como *note
     PyModule_Create2(): 4cf8. com 'module_api_version' definido como
     ‘PYTHON_API_VERSION’

 -- C Função: *note PyObject: 339. *PyModule_Create2 (PyModuleDef *def,
          int module_api_version)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Create a new module object, given the definition in 'def',
     assuming the API version 'module_api_version'.  If that version
     does not match the version of the running interpreter, a *note
     RuntimeWarning: 1bd. is emitted.

     Retorna ‘NULL’ com uma exceção definida em caso de erro.

          Nota: A maioria dos usos dessa função deve ser feita com *note
          PyModule_Create(): 50b8.; use-o apenas se tiver certeza de que
          precisa.

Before it is returned from in the initialization function, the resulting
module object is typically populated using functions like *note
PyModule_AddObjectRef(): 365.


File: python.info,  Node: Inicialização multifásica,  Next: Funções de criação de módulo de baixo nível,  Prev: inicialização de fase única,  Up: Inicializando módulos C

7.8.6.5 Inicialização multifásica
.................................

An alternate way to specify extensions is to request “multi-phase
initialization”.  Extension modules created this way behave more like
Python modules: the initialization is split between the 'creation
phase', when the module object is created, and the 'execution phase',
when it is populated.  The distinction is similar to the *note
__new__(): 580. and *note __init__(): 6b0. methods of classes.

Unlike modules created using single-phase initialization, these modules
are not singletons.  For example, if the *note sys.modules: 1636. entry
is removed and the module is re-imported, a new module object is
created, and typically populated with fresh method and type objects.
The old module is subject to normal garbage collection.  This mirrors
the behavior of pure-Python modules.

Additional module instances may be created in *note sub-interpreters:
587. or after after Python runtime reinitialization (*note
Py_Finalize(): 13a0. and *note Py_Initialize(): 8b1.).  In these cases,
sharing Python objects between module instances would likely cause
crashes or undefined behavior.

To avoid such issues, each instance of an extension module should be
'isolated': changes to one instance should not implicitly affect the
others, and all state, including references to Python objects, should be
specific to a particular module instance.  See *note Isolando módulos de
extensão: 4b4d. for more details and a practical guide.

Uma maneira mais simples de evitar esses problemas é *note levantar um
erro na inicialização repetida: 50c2.

All modules created using multi-phase initialization are expected to
support *note sub-interpreters: 587, or otherwise explicitly signal a
lack of support.  This is usually achieved by isolation or blocking
repeated initialization, as above.  A module may also be limited to the
main interpreter using the *note Py_mod_multiple_interpreters: 4de8.
slot.

To request multi-phase initialization, the initialization function
(PyInit_modulename) returns a *note PyModuleDef: 984. instance with
non-empty *note m_slots: 50bd.  Before it is returned, the ‘PyModuleDef’
instance must be initialized with the following function:

 -- C Função: *note PyObject: 339. *PyModuleDef_Init (PyModuleDef *def)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553. desde a versão 3.5.'  Garante que uma definição de
     módulo é um objeto Python devidamente inicializado que reporta
     corretamente seu tipo e contagem de referências.

     Returns 'def' cast to ‘PyObject*’, or ‘NULL’ if an error occurred.

     Adicionado na versão 3.5.

The 'm_slots' member of the module definition must point to an array of
‘PyModuleDef_Slot’ structures:

 -- C Tipo: type PyModuleDef_Slot
     ' Parte da *note ABI Estável: 553. (incluindo todos os membros)
     desde a versão 3.5.'
      -- C Membro: int slot

          Um ID de lot, escolhido a partir dos valores disponíveis
          explicados abaixo.

      -- C Membro: void *value

          Valor do slot, cujo significado depende do ID do slot.

     Adicionado na versão 3.5.

The 'm_slots' array must be terminated by a slot with id 0.

Os tipos de slot disponíveis são:

 -- C Macro: Py_mod_create
     ' Parte da *note ABI Estável: 553. desde a versão 3.5.'  Specifies
     a function that is called to create the module object itself.  The
     'value' pointer of this slot must point to a function of the
     signature:

      -- C Função: *note PyObject: 339. *create_module (PyObject *spec,
               PyModuleDef *def)

     The function receives a *note ModuleSpec: 1fee. instance, as
     defined in PEP 451(1), and the module definition.  It should return
     a new module object, or set an error and return ‘NULL’.

     This function should be kept minimal.  In particular, it should not
     call arbitrary Python code, as trying to import the same module
     again may result in an infinite loop.

     Múltiplos slots ‘Py_mod_create’ podem não estar especificados em
     uma definição de módulo.

     If ‘Py_mod_create’ is not specified, the import machinery will
     create a normal module object using *note PyModule_New(): 4cfd.
     The name is taken from 'spec', not the definition, to allow
     extension modules to dynamically adjust to their place in the
     module hierarchy and be imported under different names through
     symlinks, all while sharing a single module definition.

     There is no requirement for the returned object to be an instance
     of *note PyModule_Type: 4d00.  Any type can be used, as long as it
     supports setting and getting import-related attributes.  However,
     only ‘PyModule_Type’ instances may be returned if the ‘PyModuleDef’
     has non-‘NULL’ ‘m_traverse’, ‘m_clear’, ‘m_free’; non-zero
     ‘m_size’; or slots other than ‘Py_mod_create’.

     Adicionado na versão 3.5.

 -- C Macro: Py_mod_exec
     ' Parte da *note ABI Estável: 553. desde a versão 3.5.'  Specifies
     a function that is called to 'execute' the module.  This is
     equivalent to executing the code of a Python module: typically,
     this function adds classes and constants to the module.  The
     signature of the function is:

      -- C Função: int exec_module (PyObject *module)

     Se vários slots ‘Py_mod_exec’ forem especificados, eles serão
     processados na ordem em que aparecem no vetor 'm_slots'.

     Adicionado na versão 3.5.

 -- C Macro: Py_mod_multiple_interpreters
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  Specifies
     one of the following values:

      -- C Macro: Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED

          The module does not support being imported in subinterpreters.

      -- C Macro: Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED

          The module supports being imported in subinterpreters, but
          only when they share the main interpreter’s GIL. (See *note
          Isolando módulos de extensão: 4b4d.)

      -- C Macro: Py_MOD_PER_INTERPRETER_GIL_SUPPORTED

          The module supports being imported in subinterpreters, even
          when they have their own GIL. (See *note Isolando módulos de
          extensão: 4b4d.)

     This slot determines whether or not importing this module in a
     subinterpreter will fail.

     Multiple ‘Py_mod_multiple_interpreters’ slots may not be specified
     in one module definition.

     If ‘Py_mod_multiple_interpreters’ is not specified, the import
     machinery defaults to ‘Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED’.

     Adicionado na versão 3.12.

 -- C Macro: Py_mod_gil
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Specifies
     one of the following values:

      -- C Macro: Py_MOD_GIL_USED

          The module depends on the presence of the global interpreter
          lock (GIL), and may access global state without
          synchronization.

      -- C Macro: Py_MOD_GIL_NOT_USED

          The module is safe to run without an active GIL.

     This slot is ignored by Python builds not configured with *note
     -disable-gil: 174.  Otherwise, it determines whether or not
     importing this module will cause the GIL to be automatically
     enabled.  See *note CPython com threads livres: 13f. for more
     detail.

     Multiple ‘Py_mod_gil’ slots may not be specified in one module
     definition.

     If ‘Py_mod_gil’ is not specified, the import machinery defaults to
     ‘Py_MOD_GIL_USED’.

     Adicionado na versão 3.13.

Ver PEP 489(2) para obter mais detalhes sobre a inicialização
multifásica.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0451/

   (2) https://peps.python.org/pep-0489/


File: python.info,  Node: Funções de criação de módulo de baixo nível,  Next: Support functions,  Prev: Inicialização multifásica,  Up: Inicializando módulos C

7.8.6.6 Funções de criação de módulo de baixo nível
...................................................

The following functions are called under the hood when using multi-phase
initialization.  They can be used directly, for example when creating
module objects dynamically.  Note that both ‘PyModule_FromDefAndSpec’
and ‘PyModule_ExecDef’ must be called to fully initialize a module.

 -- C Função: *note PyObject: 339. *PyModule_FromDefAndSpec (PyModuleDef
          *def, PyObject *spec)
     'Retorna valor: Nova referência.'  Create a new module object,
     given the definition in 'def' and the ModuleSpec 'spec'.  This
     behaves like *note PyModule_FromDefAndSpec2(): ee3. with
     'module_api_version' set to ‘PYTHON_API_VERSION’.

     Adicionado na versão 3.5.

 -- C Função: *note PyObject: 339. *PyModule_FromDefAndSpec2
          (PyModuleDef *def, PyObject *spec, int module_api_version)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.7.'  Create a new module object, given the
     definition in 'def' and the ModuleSpec 'spec', assuming the API
     version 'module_api_version'.  If that version does not match the
     version of the running interpreter, a *note RuntimeWarning: 1bd. is
     emitted.

     Retorna ‘NULL’ com uma exceção definida em caso de erro.

          Nota: Most uses of this function should be using *note
          PyModule_FromDefAndSpec(): ee2. instead; only use this if you
          are sure you need it.

     Adicionado na versão 3.5.

 -- C Função: int PyModule_ExecDef (PyObject *module, PyModuleDef *def)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Process
     any execution slots (*note Py_mod_exec: 985.) given in 'def'.

     Adicionado na versão 3.5.

 -- C Função: int PyModule_SetDocString (PyObject *module, const char
          *docstring)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Set the
     docstring for 'module' to 'docstring'.  This function is called
     automatically when creating a module from ‘PyModuleDef’, using
     either ‘PyModule_Create’ or ‘PyModule_FromDefAndSpec’.

     Return ‘0’ on success.  Return ‘-1’ with an exception set on error.

     Adicionado na versão 3.5.

 -- C Função: int PyModule_AddFunctions (PyObject *module, PyMethodDef
          *functions)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Add the
     functions from the ‘NULL’ terminated 'functions' array to 'module'.
     Refer to the *note PyMethodDef: 151f. documentation for details on
     individual entries (due to the lack of a shared module namespace,
     module level “functions” implemented in C typically receive the
     module as their first parameter, making them similar to instance
     methods on Python classes).  This function is called automatically
     when creating a module from ‘PyModuleDef’, using either
     ‘PyModule_Create’ or ‘PyModule_FromDefAndSpec’.

     The 'functions' array must be statically allocated (or otherwise
     guaranteed to outlive the module object).

     Adicionado na versão 3.5.


File: python.info,  Node: Support functions,  Prev: Funções de criação de módulo de baixo nível,  Up: Inicializando módulos C

7.8.6.7 Support functions
.........................

The module initialization function (if using single phase
initialization) or a function called from a module execution slot (if
using multi-phase initialization), can use the following functions to
help initialize the module state:

 -- C Função: int PyModule_AddObjectRef (PyObject *module, const char
          *name, PyObject *value)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Add an
     object to 'module' as 'name'.  This is a convenience function which
     can be used from the module’s initialization function.

     On success, return ‘0’.  On error, raise an exception and return
     ‘-1’.

     Exemplo de uso:

          static int
          add_spam(PyObject *module, int value)
          {
              PyObject *obj = PyLong_FromLong(value);
              if (obj == NULL) {
                  return -1;
              }
              int res = PyModule_AddObjectRef(module, "spam", obj);
              Py_DECREF(obj);
              return res;
           }

     To be convenient, the function accepts ‘NULL’ 'value' with an
     exception set.  In this case, return ‘-1’ and just leave the raised
     exception unchanged.

     O exemplo também pode ser escrito sem verificar explicitamente se
     'obj' é ‘NULL’:

          static int
          add_spam(PyObject *module, int value)
          {
              PyObject *obj = PyLong_FromLong(value);
              int res = PyModule_AddObjectRef(module, "spam", obj);
              Py_XDECREF(obj);
              return res;
           }

     Note that ‘Py_XDECREF()’ should be used instead of ‘Py_DECREF()’ in
     this case, since 'obj' can be ‘NULL’.

     The number of different 'name' strings passed to this function
     should be kept small, usually by only using statically allocated
     strings as 'name'.  For names that aren’t known at compile time,
     prefer calling *note PyUnicode_FromString(): 4db1. and *note
     PyObject_SetAttr(): 4d34. directly.  For more details, see *note
     PyUnicode_InternFromString(): 16ea, which may be used internally to
     create a key object.

     Adicionado na versão 3.10.

 -- C Função: int PyModule_Add (PyObject *module, const char *name,
          PyObject *value)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Similar
     to *note PyModule_AddObjectRef(): 365, but “steals” a reference to
     'value'.  It can be called with a result of function that returns a
     new reference without bothering to check its result or even saving
     it to a variable.

     Exemplo de uso:

          if (PyModule_Add(module, "spam", PyBytes_FromString(value)) < 0) {
              goto error;
          }

     Adicionado na versão 3.13.

 -- C Função: int PyModule_AddObject (PyObject *module, const char
          *name, PyObject *value)
     ' Parte da *note ABI Estável: 553.'  Similar to *note
     PyModule_AddObjectRef(): 365, but steals a reference to 'value' on
     success (if it returns ‘0’).

     The new *note PyModule_Add(): 364. or *note
     PyModule_AddObjectRef(): 365. functions are recommended, since it
     is easy to introduce reference leaks by misusing the *note
     PyModule_AddObject(): 366. function.

          Nota: Unlike other functions that steal references,
          ‘PyModule_AddObject()’ only releases the reference to 'value'
          'on success'.

          This means that its return value must be checked, and calling
          code must *note Py_XDECREF(): 78f. 'value' manually on error.

     Exemplo de uso:

          PyObject *obj = PyBytes_FromString(value);
          if (PyModule_AddObject(module, "spam", obj) < 0) {
              // If 'obj' is not NULL and PyModule_AddObject() failed,
              // 'obj' strong reference must be deleted with Py_XDECREF().
              // If 'obj' is NULL, Py_XDECREF() does nothing.
              Py_XDECREF(obj);
              goto error;
          }
          // PyModule_AddObject() stole a reference to obj:
          // Py_XDECREF(obj) is not needed here.

     Descontinuado desde a versão 3.13: *note PyModule_AddObject(): 366.
     is *note soft deprecated: 209.

 -- C Função: int PyModule_AddIntConstant (PyObject *module, const char
          *name, long value)
     ' Parte da *note ABI Estável: 553.'  Add an integer constant to
     'module' as 'name'.  This convenience function can be used from the
     module’s initialization function.  Return ‘-1’ with an exception
     set on error, ‘0’ on success.

     This is a convenience function that calls *note PyLong_FromLong():
     195a. and *note PyModule_AddObjectRef(): 365.; see their
     documentation for details.

 -- C Função: int PyModule_AddStringConstant (PyObject *module, const
          char *name, const char *value)
     ' Parte da *note ABI Estável: 553.'  Add a string constant to
     'module' as 'name'.  This convenience function can be used from the
     module’s initialization function.  The string 'value' must be
     ‘NULL’-terminated.  Return ‘-1’ with an exception set on error, ‘0’
     on success.

     This is a convenience function that calls *note
     PyUnicode_InternFromString(): 16ea. and *note
     PyModule_AddObjectRef(): 365.; see their documentation for details.

 -- C Macro: PyModule_AddIntMacro (module, macro)

     Add an int constant to 'module'.  The name and the value are taken
     from 'macro'.  For example ‘PyModule_AddIntMacro(module, AF_INET)’
     adds the int constant 'AF_INET' with the value of 'AF_INET' to
     'module'.  Return ‘-1’ with an exception set on error, ‘0’ on
     success.

 -- C Macro: PyModule_AddStringMacro (module, macro)

     Add a string constant to 'module'.

 -- C Função: int PyModule_AddType (PyObject *module, PyTypeObject
          *type)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Add a
     type object to 'module'.  The type object is finalized by calling
     internally *note PyType_Ready(): 77c.  The name of the type object
     is taken from the last component of *note tp_name: 1a3c. after dot.
     Return ‘-1’ with an exception set on error, ‘0’ on success.

     Adicionado na versão 3.9.

 -- C Função: int PyUnstable_Module_SetGIL (PyObject *module, void *gil)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Indicate that 'module' does or does not support running without the
     global interpreter lock (GIL), using one of the values from *note
     Py_mod_gil: 158.  It must be called during 'module'’s
     initialization function.  If this function is not called during
     module initialization, the import machinery assumes the module does
     not support running without the GIL. This function is only
     available in Python builds configured with *note -disable-gil: 174.
     Return ‘-1’ with an exception set on error, ‘0’ on success.

     Adicionado na versão 3.13.


File: python.info,  Node: Pesquisa por módulos,  Prev: Inicializando módulos C,  Up: Objetos do Módulo

7.8.6.8 Pesquisa por módulos
............................

Single-phase initialization creates singleton modules that can be looked
up in the context of the current interpreter.  This allows the module
object to be retrieved later with only a reference to the module
definition.

These functions will not work on modules created using multi-phase
initialization, since multiple such modules can be created from a single
definition.

 -- C Função: *note PyObject: 339. *PyState_FindModule (PyModuleDef
          *def)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'  Returns the module object that was created from
     'def' for the current interpreter.  This method requires that the
     module object has been attached to the interpreter state with *note
     PyState_AddModule(): 4d53. beforehand.  In case the corresponding
     module object is not found or has not been attached to the
     interpreter state yet, it returns ‘NULL’.

 -- C Função: int PyState_AddModule (PyObject *module, PyModuleDef *def)
     ' Parte da *note ABI Estável: 553. desde a versão 3.3.'  Attaches
     the module object passed to the function to the interpreter state.
     This allows the module object to be accessible via *note
     PyState_FindModule(): 4d54.

     Only effective on modules created using single-phase
     initialization.

     Python calls ‘PyState_AddModule’ automatically after importing a
     module, so it is unnecessary (but harmless) to call it from module
     initialization code.  An explicit call is needed only if the
     module’s own init code subsequently calls ‘PyState_FindModule’.
     The function is mainly intended for implementing alternative import
     mechanisms (either by calling it directly, or by referring to its
     implementation for details of the required state updates).

     The caller must hold the GIL.

     Retorna ‘-1’ com uma exceção definida em caso de erro, ‘0’ em caso
     de sucesso.

     Adicionado na versão 3.3.

 -- C Função: int PyState_RemoveModule (PyModuleDef *def)
     ' Parte da *note ABI Estável: 553. desde a versão 3.3.'  Removes
     the module object created from 'def' from the interpreter state.
     Return ‘-1’ with an exception set on error, ‘0’ on success.

     The caller must hold the GIL.

     Adicionado na versão 3.3.


File: python.info,  Node: Objetos Iteradores,  Next: Objetos descritores,  Prev: Objetos do Módulo,  Up: Outros Objetos

7.8.6.9 Objetos Iteradores
..........................

O Python fornece dois objetos iteradores de propósito geral.  O
primeiro, um iterador de sequência, trabalha com uma sequência
arbitrária suportando o método *note __getitem__(): 283.  O segundo
trabalha com um objeto chamável e um valor de sentinela, chamando o
chamável para cada item na sequência e finalizando a iteração quando o
valor de sentinela é retornado.

 -- C Variável: *note PyTypeObject: ab4. PySeqIter_Type
     ' Parte da *note ABI Estável: 553.'  Objeto de tipo para objetos
     iteradores retornados por *note PySeqIter_New(): 4d3b. e a forma de
     um argumento da função embutida *note iter(): 7d8. para os tipos de
     sequência embutidos.

 -- C Função: int PySeqIter_Check (PyObject *op)

     Retorna true se o tipo de 'op' for *note PySeqIter_Type: 4d3c.
     Esta função sempre é bem-sucedida.

 -- C Função: *note PyObject: 339. *PySeqIter_New (PyObject *seq)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um iterador que funcione com um objeto de sequência
     geral, 'seq'.  A iteração termina quando a sequência levanta *note
     IndexError: 157e. para a operação de assinatura.

 -- C Variável: *note PyTypeObject: ab4. PyCallIter_Type
     ' Parte da *note ABI Estável: 553.'  Objeto de tipo para objetos
     iteradores retornados por *note PyCallIter_New(): 4c29. e a forma
     de dois argumentos da função embutida *note iter(): 7d8.

 -- C Função: int PyCallIter_Check (PyObject *op)

     Retorna true se o tipo de 'op' for *note PyCallIter_Type: 4c2a.
     Esta função sempre é bem-sucedida.

 -- C Função: *note PyObject: 339. *PyCallIter_New (PyObject *callable,
          PyObject *sentinel)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo iterador.  O primeiro parâmetro, 'callable',
     pode ser qualquer objeto chamável do Python que possa ser chamado
     sem parâmetros; cada chamada deve retornar o próximo item na
     iteração.  Quando 'callable' retorna um valor igual a 'sentinel', a
     iteração será encerrada.

* Menu:

* Objetos intervalo::
* Tipos de iteradores embutidos::
* Outros objetos iteradores::


File: python.info,  Node: Objetos intervalo,  Next: Tipos de iteradores embutidos,  Up: Objetos Iteradores

7.8.6.10 Objetos intervalo
..........................

 -- C Variável: *note PyTypeObject: ab4. PyRange_Type
     ' Parte da *note ABI Estável: 553.'  O objeto tipo para objetos
     *note range: 94a.

 -- C Função: int PyRange_Check (PyObject *o)

     Retorna verdadeiro se o objeto 'op' for uma instância de um objeto
     *note range: 94a.  Esta função sempre tem sucesso.


File: python.info,  Node: Tipos de iteradores embutidos,  Next: Outros objetos iteradores,  Prev: Objetos intervalo,  Up: Objetos Iteradores

7.8.6.11 Tipos de iteradores embutidos
......................................

Esses são tipos de iteração embutidos que estão incluídos na API C do
Python, mas não fornecem funções adicionais.  Eles estão aqui para fins
de completude.

Tipo em C                                              Tipo em Python
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
 -- C Variável: *note PyTypeObject: ab4. PyEnum_Type   *note enumerate: 14c9.
     ' Parte da *note ABI Estável: 553.'               

 -- C Variável: *note PyTypeObject: ab4.               *note filter: 868.
          PyFilter_Type                                
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyTypeObject: ab4. PyMap_Type    *note map: 867.
     ' Parte da *note ABI Estável: 553.'               

 -- C Variável: *note PyTypeObject: ab4.               *note reversed: 869.
          PyReversed_Type                              
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyTypeObject: ab4. PyZip_Type    *note zip: 7d1.
     ' Parte da *note ABI Estável: 553.'               


File: python.info,  Node: Outros objetos iteradores,  Prev: Tipos de iteradores embutidos,  Up: Objetos Iteradores

7.8.6.12 Outros objetos iteradores
..................................

 -- C Variável: *note PyTypeObject: ab4. PyByteArrayIter_Type
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyTypeObject: ab4. PyBytesIter_Type
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyTypeObject: ab4. PyListIter_Type
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyTypeObject: ab4. PyListRevIter_Type
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyTypeObject: ab4. PySetIter_Type
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyTypeObject: ab4. PyTupleIter_Type
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyTypeObject: ab4. PyRangeIter_Type
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyTypeObject: ab4. PyLongRangeIter_Type
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyTypeObject: ab4. PyDictIterKey_Type
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyTypeObject: ab4. PyDictRevIterKey_Type
     ' Parte da *note ABI Estável: 553. desde a versão 3.8.'

 -- C Variável: *note PyTypeObject: ab4. PyDictIterValue_Type
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyTypeObject: ab4. PyDictRevIterValue_Type
     ' Parte da *note ABI Estável: 553. desde a versão 3.8.'

 -- C Variável: *note PyTypeObject: ab4. PyDictIterItem_Type
     ' Parte da *note ABI Estável: 553.'

 -- C Variável: *note PyTypeObject: ab4. PyDictRevIterItem_Type
     ' Parte da *note ABI Estável: 553. desde a versão 3.8.'

 -- C Variável: *note PyTypeObject: ab4. PyODictIter_Type

     Objetos de tipo para iteradores de vários objetos embutidos.

     Não cria instâncias dessas diretamente; prefira chamar *note
     PyObject_GetIter(): 4d2f. em vez disso.

     Note que não há garantia de que um determinado tipo embutido
     utilize um determinado tipo de iterador.  Por exemplo, iterar sobre
     um *note range: 94a. utilizará um de dois tipos de iterador,
     dependendo do tamanho do intervalo.  Outros tipos podem começar a
     usar um esquema semelhante no futuro, sem aviso prévio.


File: python.info,  Node: Objetos descritores,  Next: Objetos Slice,  Prev: Objetos Iteradores,  Up: Outros Objetos

7.8.6.13 Objetos descritores
............................

“Descritores” são objetos que descrevem algum atributo de um objeto.
Eles são encontrados no dicionário de objetos de tipo.

 -- C Variável: *note PyTypeObject: ab4. PyProperty_Type
     ' Parte da *note ABI Estável: 553.'  O tipo de objeto para os tipos
     de descritores embutidos.

 -- C Função: *note PyObject: 339. *PyDescr_NewGetSet (PyTypeObject
          *type, struct PyGetSetDef *getset)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

 -- C Função: *note PyObject: 339. *PyDescr_NewMember (PyTypeObject
          *type, struct PyMemberDef *meth)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

 -- C Variável: *note PyTypeObject: ab4. PyMemberDescr_Type
     ' Parte da *note ABI Estável: 553.'  O objeto de tipo para
     descritores de membros criados a partir de estruturas *note
     PyMemberDef: 54f.  Esses descritores expõem campos de uma estrutura
     C como atributos de um tipo e correspondem a objetos *note
     types.MemberDescriptorType: 271c. em Python.

 -- C Variável: *note PyTypeObject: ab4. PyGetSetDescr_Type
     ' Parte da *note ABI Estável: 553.'  O objeto de tipo para
     descritores get/set criados a partir de estruturas *note
     PyGetSetDef: bd1.  Esses descritores implementam atributos cujo
     valor é calculado por funções getter e setter em C e são usados
     para muitos atributos de tipo embutidos.

 -- C Função: *note PyObject: 339. *PyDescr_NewMethod (PyTypeObject
          *type, struct PyMethodDef *meth)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

 -- C Variável: *note PyTypeObject: ab4. PyMethodDescr_Type
     ' Parte da *note ABI Estável: 553.'  O objeto de tipo para
     descritores de métodos criados a partir de estruturas *note
     PyMethodDef: 151f.  Esses descritores expõem funções C como métodos
     de um tipo e correspondem a objetos *note
     types.MemberDescriptorType: 271c. em Python.

 -- C Função: *note PyObject: 339. *PyDescr_NewWrapper (PyTypeObject
          *type, struct wrapperbase *wrapper, void *wrapped)
     'Retorna valor: Nova referência.'

 -- C Variável: *note PyTypeObject: ab4. PyWrapperDescr_Type
     ' Parte da *note ABI Estável: 553.'  O objeto de tipo para objetos
     descritores de encapsulamento criados por *note
     PyDescr_NewWrapper(): 50dd. e *note PyWrapper_New(): 4dbd.  Os
     descritores de encapsulamento são usados internamente para expor
     métodos especiais implementados por meio de estruturas de
     encapsulamento e aparecem em Python como objetos *note
     types.WrapperDescriptorType: bb1.

 -- C Função: *note PyObject: 339. *PyDescr_NewClassMethod (PyTypeObject
          *type, PyMethodDef *method)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

 -- C Função: int PyDescr_IsData (PyObject *descr)

     Retorna não-zero se o objeto descritor 'descr' descrevem um
     atributo de dados, ou ‘0’ se os mesmos descrevem um método.
     'descr' deve ser um objeto descritor; não há verificação de erros.

 -- C Função: *note PyObject: 339. *PyWrapper_New (PyObject*, PyObject*)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'

* Menu:

* Descritores embutidos::


File: python.info,  Node: Descritores embutidos,  Up: Objetos descritores

7.8.6.14 Descritores embutidos
..............................

 -- C Variável: *note PyTypeObject: ab4. PySuper_Type
     ' Parte da *note ABI Estável: 553.'  O objeto de tipo para
     superobjetos.  Este é o mesmo objeto que *note super: 4db. na
     camada Python.

 -- C Variável: *note PyTypeObject: ab4. PyClassMethod_Type

     O tipo de objeto de método de classe.  Este é o mesmo objeto que
     *note classmethod: 166. na camada Python.

 -- C Variável: *note PyTypeObject: ab4. PyClassMethodDescr_Type
     ' Parte da *note ABI Estável: 553.'  O objeto de tipo para
     descritores de métodos de classe em nível C. Este é o tipo dos
     descritores criados para *note classmethod(): 166. definidos em
     tipos de extensão C, e é o mesmo objeto que *note classmethod: 166.
     em Python.

 -- C Função: *note PyObject: 339. *PyClassMethod_New (PyObject
          *callable)

     Cria um novo objeto *note classmethod: 166. que envolve 'callable'.
     'callable' deve ser um objeto chamável e não deve ser ‘NULL’.

     Em caso de sucesso, esta função retorna uma *note referência forte:
     33d. a um novo descritor de método de classe.  Em caso de falha,
     esta função retorna ‘NULL’ com uma exceção definida.

 -- C Variável: *note PyTypeObject: ab4. PyStaticMethod_Type

     O tipo de objeto de método estático.  Este é o mesmo objeto que
     *note staticmethod: 416. na camada Python.

 -- C Função: *note PyObject: 339. *PyStaticMethod_New (PyObject
          *callable)

     Cria um novo objeto *note staticmethod: 416. que envolve
     'callable'.  'callable' deve ser um objeto chamável e não deve ser
     ‘NULL’.

     Em caso de sucesso, esta função retorna uma *note referência forte:
     33d. a um novo descritor de método estático.  Em caso de falha,
     esta função retorna ‘NULL’ com uma exceção definida.


File: python.info,  Node: Objetos Slice,  Next: Objetos MemoryView,  Prev: Objetos descritores,  Up: Outros Objetos

7.8.6.15 Objetos Slice
......................

 -- C Variável: *note PyTypeObject: ab4. PySlice_Type
     ' Parte da *note ABI Estável: 553.'  Tipo de objeto para objetos
     fatia.  Isso é o mesmo que *note slice: 469. na camada Python.

 -- C Função: int PySlice_Check (PyObject *ob)

     Retorna true se 'ob' for um objeto fatia; 'ob' não deve ser ‘NULL’.
     Esta função sempre tem sucesso.

 -- C Função: *note PyObject: 339. *PySlice_New (PyObject *start,
          PyObject *stop, PyObject *step)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um novo objeto fatia com os valores fornecidos.  Os
     parâmetros 'start', 'stop' e 'step' são usados como os valores dos
     atributos do objeto fatia com os mesmos nomes.  Qualquer um dos
     valores pode ser ‘NULL’, caso em que ‘None’ será usado para o
     atributo correspondente.

     Retorna ‘NULL’ com uma exceção definida se o novo objeto não puder
     ser alocado.

 -- C Função: int PySlice_GetIndices (PyObject *slice, Py_ssize_t
          length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step)
     ' Parte da *note ABI Estável: 553.'  Recupera os índices de início,
     parada e intermediário do objeto fatia 'slice', presumindo uma
     sequência de comprimento 'length'.  Trata índices maiores que
     'length' como erros.

     Retorna ‘0’ em caso de sucesso e ‘-1’ em caso de erro sem exceção
     definida (a menos que um dos índices não fosse ‘None’ e falhou ao
     ser convertido para um inteiro, neste caso ‘-1’ é retornado com uma
     exceção definida).

     Você provavelmente não deseja usar esta função.

     Alterado na versão 3.2: O tipo de parâmetro para o parâmetro
     'slice' era antes de ‘PySliceObject*’.

 -- C Função: int PySlice_GetIndicesEx (PyObject *slice, Py_ssize_t
          length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t *step,
          Py_ssize_t *slicelength)
     ' Parte da *note ABI Estável: 553.'  Substituição utilizável para
     *note PySlice_GetIndices(): 4d50.  Recupera os índices de início,
     parada e intermediário do objeto fatia 'slice' presumindo uma
     sequência de comprimento 'length' e armazena o comprimento da fatia
     em 'slicelength'.  Índices fora dos limites são cortados de maneira
     consistente com o tratamento de fatias normais.

     Retorna ‘0’ em caso de sucesso e ‘-1’ em caso de erro com uma
     exceção definida.

          Nota: Esta função não é considerada segura para sequências
          redimensionáveis.  Sua invocação deve ser substituída por uma
          combinação de *note PySlice_Unpack(): 3fd. e *note
          PySlice_AdjustIndices(): 3fe. sendo

               if (PySlice_GetIndicesEx(slice, length, &start, &stop, &step, &slicelength) < 0) {
                   // retorna erro
               }

          substituído por

               if (PySlice_Unpack(slice, &start, &stop, &step) < 0) {
                   // retorna erro
               }
               slicelength = PySlice_AdjustIndices(length, &start, &stop, step);

     Alterado na versão 3.2: O tipo de parâmetro para o parâmetro
     'slice' era antes de ‘PySliceObject*’.

     Alterado na versão 3.6.1: Se ‘Py_LIMITED_API’ não estiver definido
     ou estiver definido com um valor entre ‘0x03050400’ e ‘0x03060000’
     (não incluso) ou ‘0x03060100’ ou mais alto,
     ‘PySlice_GetIndicesEx()’ é implementado como uma macro usando
     ‘PySlice_Unpack()’ e ‘PySlice_AdjustIndices()’.  Os argumentos
     'start', 'stop' e 'step' são avaliados mais de uma vez.

     Descontinuado desde a versão 3.6.1: Se ‘Py_LIMITED_API’ estiver
     definido para um valor menor que ‘0x03050400’ ou entre ‘0x03060000’
     e ‘0x03060100’ (não incluso), ‘PySlice_GetIndicesEx()’ é uma função
     descontinuada.

 -- C Função: int PySlice_Unpack (PyObject *slice, Py_ssize_t *start,
          Py_ssize_t *stop, Py_ssize_t *step)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Extrai os
     membros de dados de início, parada e intermediário de um objeto
     fatia como C inteiros.  Reduz silenciosamente os valores maiores do
     que ‘PY_SSIZE_T_MAX’ para ‘PY_SSIZE_T_MAX’, aumenta silenciosamente
     os valores de início e parada menores que ‘PY_SSIZE_T_MIN’ para
     ‘PY_SSIZE_T_MIN’, e silenciosamente aumenta os valores de
     intermediário menores que ‘-PY_SSIZE_T_MAX’ para ‘-PY_SSIZE_T_MAX’.

     Retorna ‘-1’ com uma exceção definida em caso de erro, ‘0’ em caso
     de sucesso.

     Adicionado na versão 3.6.1.

 -- C Função: *note Py_ssize_t: a69. PySlice_AdjustIndices (Py_ssize_t
          length, Py_ssize_t *start, Py_ssize_t *stop, Py_ssize_t step)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Ajusta os
     índices de fatias inicial/final presumindo uma sequência do
     comprimento especificado.  Índices fora dos limites são cortados de
     maneira consistente com o tratamento de fatias normais.

     Retorna o comprimento da fatia.  Sempre bem-sucedido.  Não chama o
     código Python.

     Adicionado na versão 3.6.1.

* Menu:

* Objeto Ellipsis::


File: python.info,  Node: Objeto Ellipsis,  Up: Objetos Slice

7.8.6.16 Objeto Ellipsis
........................

 -- C Variável: *note PyTypeObject: ab4. PyEllipsis_Type
     ' Parte da *note ABI Estável: 553.'  O tipo do objeto Python *note
     Ellipsis: 231c.  O mesmo que *note types.EllipsisType: 854. na
     camada Python.

 -- C Variável: *note PyObject: 339. *Py_Ellipsis

     O objeto Python ‘Ellipsis’.  Este objeto não tem métodos.  Como
     *note Py_None: 4b48, é um objeto singleton *note imortal: 45bb.

     Alterado na versão 3.12: *note Py_Ellipsis: 50e9. é imortal.


File: python.info,  Node: Objetos MemoryView,  Next: Objetos buffer serializados com pickle,  Prev: Objetos Slice,  Up: Outros Objetos

7.8.6.17 Objetos MemoryView
...........................

Um objeto *note memoryview: 2eb. expõe a *note interface de buffer: 2e8.
a nível de C como um objeto Python que pode ser passado como qualquer
outro objeto.

 -- C Variável: *note PyTypeObject: ab4. PyMemoryView_Type
     ' Parte da *note ABI Estável: 553.'  Esta instância de *note
     PyTypeObject: ab4. representa o tipo memoryview Python.  Este é o
     mesmo objeto que *note memoryview: 2eb. na camada Python.

 -- C Função: *note PyObject: 339. *PyMemoryView_FromObject (PyObject
          *obj)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Cria um objeto memoryview a partir de um objeto que fornece
     a interface do buffer.  Se 'obj' tiver suporte a exportações de
     buffer graváveis, o objeto memoryview será de leitura/gravação;
     caso contrário, poderá ser somente leitura ou leitura/gravação, a
     critério do exportador.

 -- C Macro: PyBUF_READ
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'
     Sinalizador para solicitar um buffer de somente leitura.

 -- C Macro: PyBUF_WRITE
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'
     Sinalizador para solicitar um buffer gravável.

 -- C Função: *note PyObject: 339. *PyMemoryView_FromMemory (char *mem,
          Py_ssize_t size, int flags)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.7.'  Cria um objeto memoryview usando 'mem'
     como o buffer subjacente.  'flags' pode ser um dos seguintes *note
     PyBUF_READ: 1786. ou *note PyBUF_WRITE: 1787.

     Adicionado na versão 3.3.

 -- C Função: *note PyObject: 339. *PyMemoryView_FromBuffer (const
          Py_buffer *view)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.11.'  Cria um objeto de memoryview envolvendo
     a estrutura de buffer 'view' fornecida.  Para buffers de bytes
     simples, *note PyMemoryView_FromMemory(): 11af. é a função
     preferida.

 -- C Função: *note PyObject: 339. *PyMemoryView_GetContiguous (PyObject
          *obj, int buffertype, char order)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Cria um objeto memoryview para um pedaço *note contíguo:
     23b9. de memória (na ordem ‘C’ ou ‘F’ortran, representada por
     'order') a partir de um objeto que define a interface do buffer.
     Se a memória for contígua, o objeto memoryview apontará para a
     memória original.  Caso contrário, é feita uma cópia e a
     visualização da memória aponta para um novo objeto bytes.

     'buffertype' pode ser um entre *note PyBUF_READ: 1786. ou *note
     PyBUF_WRITE: 1787.

 -- C Função: int PyMemoryView_Check (PyObject *obj)

     Retorna true se o objeto 'obj' for um objeto memoryview.
     Atualmente, não é permitido criar subclasses de *note memoryview:
     2eb.  Esta função sempre tem sucesso.

 -- C Função: *note Py_buffer: 758. *PyMemoryView_GET_BUFFER (PyObject
          *mview)

     Retorna um ponteiro para a cópia privada da memória do buffer do
     exportador.  'mview' 'deve' ser uma instância de memoryview; Se
     essa macro não verificar seu tipo, faça você mesmo ou corre o risco
     de travar.

 -- C Função: *note PyObject: 339. *PyMemoryView_GET_BASE (PyObject
          *mview)

     Retorna um ponteiro para o objeto de exportação no qual a memória é
     baseada ou ‘NULL’ se a memória tiver sido criada por uma das
     funções *note PyMemoryView_FromMemory(): 11af. ou *note
     PyMemoryView_FromBuffer(): 761.  'mview' 'deve' ser uma instância
     de memoryview.


File: python.info,  Node: Objetos buffer serializados com pickle,  Next: Objetos referência fraca<2>,  Prev: Objetos MemoryView,  Up: Outros Objetos

7.8.6.18 Objetos buffer serializados com pickle
...............................................

Adicionado na versão 3.8.

Um objeto *note pickle.PickleBuffer: 15a2. encapsula um *note objeto
provedor de buffer: 2e8. para transferência de dados fora de banda com o
módulo *note pickle: a6.

 -- C Variável: *note PyTypeObject: ab4. PyPickleBuffer_Type

     Esta instância de *note PyTypeObject: ab4. representa o tipo de
     buffer serializado com pickle do Python.  Este é o mesmo objeto que
     *note pickle.PickleBuffer: 15a2. na camada Python.

 -- C Função: int PyPickleBuffer_Check (PyObject *op)

     Retorna verdadeiro se 'op' for uma instância de buffer serializado
     com pickle.  Esta função sempre tem sucesso.

 -- C Função: *note PyObject: 339. *PyPickleBuffer_FromObject (PyObject
          *obj)

     Cria um buffer serializado com pickle a partir do objeto 'obj'.

     Esta função falhará se 'obj' não oferecer suporte ao *note
     protocolo de buffer: 2e8.

     Em caso de sucesso, retorna uma nova instância de buffer
     serializado com pickle.  Em caso de falha, define uma exceção e
     retorna ‘NULL’.

     Análogo a chamar *note pickle.PickleBuffer: 15a2. com 'obj' em
     Python.

 -- C Função: const *note Py_buffer: 758. *PyPickleBuffer_GetBuffer
          (PyObject *picklebuf)

     Obtém um ponteiro para o *note Py_buffer: 758. subjacente que o
     buffer serializado com pickle encapsula.

     O ponteiro retornado é válido enquanto 'picklebuf' estiver ativo e
     não tiver sido liberado.  O chamador não deve modificar ou liberar
     o *note Py_buffer: 758. retornado.  Se o buffer serializado com
     pickle tiver sido liberado, levanta uma exceção *note ValueError:
     202.

     Em caso de sucesso, retorna um ponteiro para a visualização do
     buffer.  Em caso de falha, define uma exceção e retorna ‘NULL’.

 -- C Função: int PyPickleBuffer_Release (PyObject *picklebuf)

     Libera o buffer subjacente mantido pelo buffer serializado com
     pickle.

     Retorna ‘0’ em caso de sucesso.  Em caso de falha, define uma
     exceção e retorna ‘-1’.

     Análogo a chamar *note pickle.PickleBuffer.release(): 2a54. em
     Python.


File: python.info,  Node: Objetos referência fraca<2>,  Next: Capsules<2>,  Prev: Objetos buffer serializados com pickle,  Up: Outros Objetos

7.8.6.19 Objetos referência fraca
.................................

O Python oferece suporte a 'referências fracas' como objetos de primeira
classe.  Existem dois tipos de objetos específicos que implementam
diretamente referências fracas.  O primeiro é um objeto de referência
simples, e o segundo atua como um intermediário ao objeto original tanto
quanto ele pode.

 -- C Função: int PyWeakref_Check (PyObject *ob)

     Retorna não zero se 'ob' for um objeto referência ou um objeto
     intermediário.  Esta função sempre tem sucesso.

 -- C Função: int PyWeakref_CheckRef (PyObject *ob)

     Retorna não zero se 'ob' for um objeto referência ou uma subclasse
     do tipo de referência.  Esta função sempre tem sucesso.

 -- C Função: int PyWeakref_CheckRefExact (PyObject *ob)

     Retorna não zero se 'ob' for um objeto referência, mas não uma
     subclasse do tipo de referência.  Esta função sempre tem sucesso.

 -- C Função: int PyWeakref_CheckProxy (PyObject *ob)

     Retorna não zero se 'ob' for um objeto intermediário.  Esta função
     sempre tem sucesso.

 -- C Função: *note PyObject: 339. *PyWeakref_NewRef (PyObject *ob,
          PyObject *callback)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um objeto de referência fraco para o objeto 'ob'.
     Isso sempre retornará uma nova referência, mas não é garantido para
     criar um novo objeto; um objeto de referência existente pode ser
     retornado.  O segundo parâmetro, 'callback', pode ser um objeto
     chamável que recebe notificação quando 'ob' for lixo coletado; ele
     deve aceitar um único parâmetro, que será o objeto de referência
     fraco propriamente dito.  'callback' também pode ser ‘None’ ou
     ‘NULL’.  Se 'ob' não for um objeto fracamente referenciável, ou se
     'callback' não for um chamável, ‘None’, ou ‘NULL’, isso retornará
     ‘NULL’ e levantará a *note TypeError: 2c3.

     Ver também
     ..........

     *note PyType_SUPPORTS_WEAKREFS(): 4f70. para verificar se 'ob' é
     fracamente referenciável.

 -- C Função: *note PyObject: 339. *PyWeakref_NewProxy (PyObject *ob,
          PyObject *callback)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Retorna um objeto de proxy de referência fraca para o objeto
     'ob'.  Isso sempre retornará uma nova referência, mas não é
     garantido para criar um novo objeto; um objeto de proxy existente
     pode ser retornado.  O segundo parâmetro, 'callback', pode ser um
     objeto chamável que recebe notificação quando 'ob' for lixo
     coletado; ele deve aceitar um único parâmetro, que será o objeto de
     referência fraco propriamente dito.  'callback' também pode ser
     ‘None’ ou ‘NULL’.  Se 'ob' não for um objeto referência fraca, ou
     se 'callback' não for um chamável, ‘None’, ou ‘NULL’, isso
     retornará ‘NULL’ e levantará a *note TypeError: 2c3.

     Ver também
     ..........

     *note PyType_SUPPORTS_WEAKREFS(): 4f70. para verificar se 'ob' é
     fracamente referenciável.

 -- C Função: int PyWeakref_GetRef (PyObject *ref, PyObject **pobj)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Obtém uma
     *note referência forte: 33d. para o objeto referenciado a partir de
     uma referência fraca, 'ref', em '*pobj'.

        * Em caso de sucesso, define '*pobj' como uma nova *note
          referência forte: 33d. para o objeto referenciado e retorna 1.

        * Se a referência estiver quebrada, define '*pobj' como ‘NULL’ e
          retorna 0.

        * Em caso de erro, levanta uma exceção e retorna -1.

     Adicionado na versão 3.13.

 -- C Função: *note PyObject: 339. *PyWeakref_GetObject (PyObject *ref)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'  Retorna uma *note referência emprestada: 33e. ao
     objeto referenciado a partir de uma referência fraca, 'ref'.  Se o
     referente não estiver mais em tempo real, retorna ‘Py_None’.

          Nota: Esta função retorna uma *note referência emprestada:
          33e. para o objeto referenciado.  Isso significa que você deve
          sempre chamar *note Py_INCREF(): 56e. no objeto, exceto quando
          ele não puder ser destruído antes do último uso da referência
          emprestada.

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     Usa *note PyWeakref_GetRef(): 378.

 -- C Função: *note PyObject: 339. *PyWeakref_GET_OBJECT (PyObject *ref)
     'Retorna valor: Referência emprestada.'  Semelhante a *note
     PyWeakref_GetObject(): 379, mas não verifica erros.

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     Usa *note PyWeakref_GetRef(): 378.

 -- C Função: void PyObject_ClearWeakRefs (PyObject *object)
     ' Parte da *note ABI Estável: 553.'  Esta função é chamada pelo
     tratador *note tp_dealloc: 4b66. para limpar referências fracas.

     Isso itera pelas referências fracas para 'object' e chama retornos
     de chamada para as referências que possuem um.  Ele retorna quando
     todos os retornos de chamada foram tentados.

 -- C Função: void PyUnstable_Object_ClearWeakRefsNoCallbacks (PyObject
          *object)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Limpa as referências fracas para 'object' sem chamar as funções de
     retorno

     Esta função é chamada pelo manipulador *note tp_dealloc: 4b66. para
     tipos com finalizadores (por exemplo, *note __del__(): 1033.).  O
     manipulador para esses objetos primeiro chama *note
     PyObject_ClearWeakRefs(): 576. para limpar referências fracas e
     chamar suas funções de retorno, depois o finalizador e, finalmente,
     esta função para limpar quaisquer referências fracas que possam ter
     sido criadas pelo finalizador.

     Na maioria das circunstâncias, é mais apropriado usar *note
     PyObject_ClearWeakRefs(): 576. para limpar referências fracas em
     vez desta função.

     Adicionado na versão 3.13.


File: python.info,  Node: Capsules<2>,  Next: Objetos Frame,  Prev: Objetos referência fraca<2>,  Up: Outros Objetos

7.8.6.20 Capsules
.................

Consulte *note Fornecendo uma API C para um módulo de extensão: 13a4.
para obter mais informações sobre o uso desses objetos.

Adicionado na versão 3.1.

 -- C Tipo: type PyCapsule

     Este subtipo de *note PyObject: 339. representa um valor opaco,
     útil para módulos de extensão C que precisam passar um valor opaco
     (como ponteiro void*) através do código Python para outro código C
     .  É frequentemente usado para disponibilizar um ponteiro de função
     C definido em um módulo para outros módulos, para que o mecanismo
     de importação regular possa ser usado para acessar APIs C definidas
     em módulos carregados dinamicamente.

 -- C Variável: *note PyTypeObject: ab4. PyCapsule_Type
     ' Parte da *note ABI Estável: 553.'  O objeto de tipo
     correspondente aos objetos cápsula.  Este é o mesmo objeto que
     *note types.CapsuleType: 2722. na camada Python.

 -- C Tipo: type PyCapsule_Destructor
     ' Parte da *note ABI Estável: 553.'  O tipo de um retorno de
     chamada destruidor para uma cápsula.  Definido como:

          typedef void (*PyCapsule_Destructor)(PyObject *);

     Veja *note PyCapsule_New(): 4b6d. para a semântica dos retornos de
     chamada PyCapsule_Destructor.

 -- C Função: int PyCapsule_CheckExact (PyObject *p)

     Retorna true se seu argumento é um *note PyCapsule: 12b4.  Esta
     função sempre tem sucesso.

 -- C Função: *note PyObject: 339. *PyCapsule_New (void *pointer, const
          char *name, PyCapsule_Destructor destructor)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Cria um *note PyCapsule: 12b4. que encapsula o 'ponteiro'.
     O argumento 'pointer' pode não ser ‘NULL’.

     Em caso de falha, define uma exceção e retorna ‘NULL’.

     A string 'name' pode ser ‘NULL’ ou um ponteiro para uma string C
     válida.  Se não for ‘NULL’, essa string deverá sobreviver à
     cápsula.  (Embora seja permitido liberá-lo dentro do 'descructor'.)

     Se o argumento 'destructor' não for ‘NULL’, ele será chamado com a
     cápsula como argumento quando for destruído.

     Se esta cápsula for armazenada como um atributo de um módulo, o
     'name' deve ser especificado como ‘modulename.attributename’.  Isso
     permitirá que outros módulos importem a cápsula usando *note
     PyCapsule_Import(): 1999.

 -- C Função: void *PyCapsule_GetPointer (PyObject *capsule, const char
          *name)
     ' Parte da *note ABI Estável: 553.'  Recupera o 'pointer'
     armazenado na cápsula.  Em caso de falha, define uma exceção e
     retorna ‘NULL’.

     O parâmetro 'name' deve ser comparado exatamente com o nome
     armazenado na cápsula.  Se o nome armazenado na cápsula for ‘NULL’,
     o 'name' passado também deve ser ‘NULL’.  Python usa a função C
     ‘strcmp()’ para comparar nomes de cápsulas.

 -- C Função: *note PyCapsule_Destructor: 4c2c. PyCapsule_GetDestructor
          (PyObject *capsule)
     ' Parte da *note ABI Estável: 553.'  Retorna o destruidor atual
     armazenado na cápsula.  Em caso de falha, define uma exceção e
     retorna ‘NULL’.

     É legal para uma cápsula ter um destruidor ‘NULL’.  Isso torna um
     código de retorno ‘NULL’ um tanto ambíguo; use *note
     PyCapsule_IsValid(): 13a3. ou *note PyErr_Occurred(): 1a3b. para
     desambiguar.

 -- C Função: void *PyCapsule_GetContext (PyObject *capsule)
     ' Parte da *note ABI Estável: 553.'  Retorna o contexto atual
     armazenado na cápsula.  Em caso de falha, define uma exceção e
     retorna ‘NULL’.

     É legal para uma cápsula ter um contexto ‘NULL’.  Isso torna um
     código de retorno ‘NULL’ um tanto ambíguo; use *note
     PyCapsule_IsValid(): 13a3. ou *note PyErr_Occurred(): 1a3b. para
     desambiguar.

 -- C Função: const char *PyCapsule_GetName (PyObject *capsule)
     ' Parte da *note ABI Estável: 553.'  Retorna o nome atual
     armazenado na cápsula.  Em caso de falha, define uma exceção e
     retorna ‘NULL’.

     É legal para uma cápsula ter um nome ‘NULL’.  Isso torna um código
     de retorno ‘NULL’ um tanto ambíguo; use *note PyCapsule_IsValid():
     13a3. ou *note PyErr_Occurred(): 1a3b. para desambiguar.

 -- C Função: void *PyCapsule_Import (const char *name, int no_block)
     ' Parte da *note ABI Estável: 553.'  Importa um ponteiro para um
     objeto C de um atributo de cápsula em um módulo.  O parâmetro
     'name' deve especificar o nome completo do atributo, como em
     ‘module.attribute’.  O 'name' armazenado na cápsula deve
     corresponder exatamente a essa string.

     Esta função divide 'name' no caractere ‘.’ e importa o primeiro
     elemento.  Em seguida, processa os elementos seguintes usando
     pesquisas de atributos.

     Retorna o ponteiro interno 'pointer' da cápsula com sucesso.  Em
     caso de falha, define uma exceção e retorna ‘NULL’.

          Nota: Se 'name' apontar para um atributo de algum submódulo ou
          subpacote, esse submódulo ou subpacote deverá ser importado
          previamente usando outros meios (por exemplo, usando *note
          PyImport_ImportModule(): 3be.) para que as pesquisas de
          atributos sejam bem-sucedidas.

     Alterado na versão 3.3: 'no_block' não tem mais efeito.

 -- C Função: int PyCapsule_IsValid (PyObject *capsule, const char
          *name)
     ' Parte da *note ABI Estável: 553.'  Determina se 'capsule' é ou
     não uma cápsula válida.  Uma cápsula válida é diferente de ‘NULL’,
     passa *note PyCapsule_CheckExact(): 5103, possui um ponteiro
     diferente de ‘NULL’ armazenado e seu nome interno corresponde ao
     parâmetro 'name'.  (Consulte *note PyCapsule_GetPointer(): 4c30.
     para obter informações sobre como os nomes das cápsulas são
     comparados.)

     Em outras palavras, se *note PyCapsule_IsValid(): 13a3. retornar um
     valor verdadeiro, as chamadas para qualquer um dos acessadores
     (qualquer função que comece com ‘PyCapsule_Get’) terão êxito
     garantido.

     Retorna um valor diferente de zero se o objeto for válido e
     corresponder ao nome passado.  Retorna ‘0’ caso contrário.  Esta
     função não falhará.

 -- C Função: int PyCapsule_SetContext (PyObject *capsule, void
          *context)
     ' Parte da *note ABI Estável: 553.'  Define o ponteiro de contexto
     dentro de 'capsule' para 'context'.

     Retorna ‘0’ em caso de sucesso.  Retorna diferente de zero e define
     uma exceção em caso de falha.

 -- C Função: int PyCapsule_SetDestructor (PyObject *capsule,
          PyCapsule_Destructor destructor)
     ' Parte da *note ABI Estável: 553.'  Define o destrutor dentro de
     'capsule' para 'destructor'.

     Retorna ‘0’ em caso de sucesso.  Retorna diferente de zero e define
     uma exceção em caso de falha.

 -- C Função: int PyCapsule_SetName (PyObject *capsule, const char
          *name)
     ' Parte da *note ABI Estável: 553.'  Define o nome dentro de
     'capsule' como 'name'.  Se não for ‘NULL’, o nome deve sobreviver à
     cápsula.  Se o 'name' anterior armazenado na cápsula não era
     ‘NULL’, nenhuma tentativa será feita para liberá-lo.

     Retorna ‘0’ em caso de sucesso.  Retorna diferente de zero e define
     uma exceção em caso de falha.

 -- C Função: int PyCapsule_SetPointer (PyObject *capsule, void
          *pointer)
     ' Parte da *note ABI Estável: 553.'  Define o ponteiro nulo dentro
     de 'capsule' para 'pointer'.  O ponteiro não pode ser ‘NULL’.

     Retorna ‘0’ em caso de sucesso.  Retorna diferente de zero e define
     uma exceção em caso de falha.


File: python.info,  Node: Objetos Frame,  Next: Objetos Geradores,  Prev: Capsules<2>,  Up: Outros Objetos

7.8.6.21 Objetos Frame
......................

 -- C Tipo: type PyFrameObject
     ' Parte da *note API Limitada: 553. (como uma estrutura opaca).'  A
     estrutura C dos objetos usados para descrever objetos frame.

     Não há membros públicos nesta estrutura.

     Alterado na versão 3.11: Os membros dessa estrutura foram removidos
     da API C pública.  Consulte a *note entrada O Que há de Novo: 788.
     para detalhes.

As funções *note PyEval_GetFrame(): 18c1. e *note
PyThreadState_GetFrame(): 78e. podem ser utilizadas para obter um objeto
frame.

Veja também *note Reflexão: 4eea.

 -- C Variável: *note PyTypeObject: ab4. PyFrame_Type

     O tipo de objetos frame.  É o mesmo objeto que *note
     types.FrameType: 1977. na camada Python.

     Alterado na versão 3.11: Anteriormente, este tipo só estava
     disponível após incluir ‘<frameobject.h>’.

 -- C Função: *note PyFrameObject: 789. *PyFrame_New (PyThreadState
          *tstate, PyCodeObject *code, PyObject *globals, PyObject
          *locals)

     Cria um novo objeto quadro.  Esta função retorna uma *note
     referência forte: 33d. ao novo objeto quadro em caso de sucesso e
     retorna ‘NULL’ com uma exceção definida em caso de falha.

 -- C Função: int PyFrame_Check (PyObject *obj)

     Retorna diferente de zero se 'obj' é um objeto frame

     Alterado na versão 3.11: Anteriormente, esta função só estava
     disponível após incluir ‘<frameobject.h>’.

 -- C Função: *note PyFrameObject: 789. *PyFrame_GetBack (PyFrameObject
          *frame)
     'Retorna valor: Nova referência.'  Obtém o 'frame' próximo ao
     quadro externo.

     Retorna uma *note referência forte: 33d. ou ‘NULL’ se 'frame' não
     tiver quadro externo.

     Adicionado na versão 3.9.

 -- C Função: *note PyObject: 339. *PyFrame_GetBuiltins (PyFrameObject
          *frame)
     'Retorna valor: Nova referência.'  Obtém o atributo *note
     f_builtins: 20df. do 'frame'.

     Retorna uma *note referência forte: 33d.  O resultado não pode ser
     ‘NULL’.

     Adicionado na versão 3.11.

 -- C Função: *note PyCodeObject: 777. *PyFrame_GetCode (PyFrameObject
          *frame)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.10.'  Obtém o código de 'frame'.

     Retorna uma *note referência forte: 33d.

     O resultado (código do frame) não pode ser ‘NULL’.

     Adicionado na versão 3.9.

 -- C Função: *note PyObject: 339. *PyFrame_GetGenerator (PyFrameObject
          *frame)
     'Retorna valor: Nova referência.'  Obtém o gerador, corrotina ou
     gerador assíncrono que possui este frame, ou ‘NULL’ se o frame não
     pertence a um gerador.  Não levanta exceção, mesmo que o valor
     retornado seja ‘NULL’.

     Retorna uma *note referência forte: 33d, ou ‘NULL’.

     Adicionado na versão 3.11.

 -- C Função: *note PyObject: 339. *PyFrame_GetGlobals (PyFrameObject
          *frame)
     'Retorna valor: Nova referência.'  Obtenha o atributo *note
     f_globals: 20de. do 'frame'.

     Retorna uma *note referência forte: 33d.  O resultado não pode ser
     ‘NULL’.

     Adicionado na versão 3.11.

 -- C Função: int PyFrame_GetLasti (PyFrameObject *frame)

     Obtenha o atributo *note f_lasti: 88c. do 'frame'.

     Retorna -1 se ‘frame.f_lasti’ é ‘None’.

     Adicionado na versão 3.11.

 -- C Função: *note PyObject: 339. *PyFrame_GetVar (PyFrameObject
          *frame, PyObject *name)
     'Retorna valor: Nova referência.'  Obtém a variável 'name' de
     'frame'.

        * Retorna uma *note referência forte: 33d. ao valor da variável
          em caso de sucesso.

        * Levanta uma exceção *note NameError: 43f. e retorna ‘NULL’ se
          a variável não existir.

        * Levanta uma exceção e retorna ‘NULL’ em caso de erro.

     Tipo de 'name' deve ser um *note str: 44c.

     Adicionado na versão 3.12.

 -- C Função: *note PyObject: 339. *PyFrame_GetVarString (PyFrameObject
          *frame, const char *name)
     'Retorna valor: Nova referência.'  Semelhante a *note
     PyFrame_GetVar(): 568, mas o nome da variável é uma string C
     codificada em UTF-8.

     Adicionado na versão 3.12.

 -- C Função: *note PyObject: 339. *PyFrame_GetLocals (PyFrameObject
          *frame)
     'Retorna valor: Nova referência.'  Obtém o atributo *note f_locals:
     182. do 'frame'.  Se o quadro se referir a um *note escopo
     otimizado: 17e, isso retorna um objeto proxy de escrita direta que
     permite modificar as variáveis locais.  Em todos os outros casos
     (classes, módulos, *note exec(): 17f. e *note eval(): 180.),
     retorna o mapeamento que representa as variáveis locais do frame
     diretamente (como descrito para *note locals(): 141.).

     Retorna uma *note referência forte: 33d.

     Adicionado na versão 3.11.

     Alterado na versão 3.13: Como parte de PEP 667(1), retorna uma
     instância de *note PyFrameLocalsProxy_Type: 5107.

 -- C Função: int PyFrame_GetLineNumber (PyFrameObject *frame)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Retorna o
     número da linha do 'frame' atualmente em execução.

* Menu:

* Proxies locais de quadro::
* Legacy Local Variable APIs::
* Internal Frames::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0667/


File: python.info,  Node: Proxies locais de quadro,  Next: Legacy Local Variable APIs,  Up: Objetos Frame

7.8.6.22 Proxies locais de quadro
.................................

Adicionado na versão 3.13.

The *note f_locals: 182. attribute on a *note frame object: 6e0. is an
instance of a “frame-locals proxy”.  The proxy object exposes a
write-through view of the underlying locals dictionary for the frame.
This ensures that the variables exposed by ‘f_locals’ are always up to
date with the live local variables in the frame itself.

See PEP 667(1) for more information.

 -- C Variável: *note PyTypeObject: ab4. PyFrameLocalsProxy_Type

     The type of frame *note locals(): 141. proxy objects.

 -- C Função: int PyFrameLocalsProxy_Check (PyObject *obj)

     Return non-zero if 'obj' is a frame *note locals(): 141. proxy.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0667/


File: python.info,  Node: Legacy Local Variable APIs,  Next: Internal Frames,  Prev: Proxies locais de quadro,  Up: Objetos Frame

7.8.6.23 Legacy Local Variable APIs
...................................

These APIs are *note soft deprecated: 209.  As of Python 3.13, they do
nothing.  They exist solely for backwards compatibility.

 -- C Função: void PyFrame_LocalsToFast (PyFrameObject *f, int clear)

     This function is *note soft deprecated: 209. and does nothing.

     Prior to Python 3.13, this function would copy the *note f_locals:
     182. attribute of 'f' to the internal “fast” array of local
     variables, allowing changes in frame objects to be visible to the
     interpreter.  If 'clear' was true, this function would process
     variables that were unset in the locals dictionary.

     Alterado na versão 3.13: Esta função agora não faz nada.

 -- C Função: void PyFrame_FastToLocals (PyFrameObject *f)

     This function is *note soft deprecated: 209. and does nothing.

     Prior to Python 3.13, this function would copy the internal “fast”
     array of local variables (which is used by the interpreter) to the
     *note f_locals: 182. attribute of 'f', allowing changes in local
     variables to be visible to frame objects.

     Alterado na versão 3.13: Esta função agora não faz nada.

 -- C Função: int PyFrame_FastToLocalsWithError (PyFrameObject *f)

     This function is *note soft deprecated: 209. and does nothing.

     Prior to Python 3.13, this function was similar to *note
     PyFrame_FastToLocals(): 510c, but would return ‘0’ on success, and
     ‘-1’ with an exception set on failure.

     Alterado na versão 3.13: Esta função agora não faz nada.

Ver também
..........

PEP 667(1)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0667/


File: python.info,  Node: Internal Frames,  Prev: Legacy Local Variable APIs,  Up: Objetos Frame

7.8.6.24 Internal Frames
........................

Unless using PEP 523(1), you will not need this.

 -- C Struct: struct _PyInterpreterFrame

     The interpreter’s internal frame representation.

     Adicionado na versão 3.11.

 -- C Função: *note PyObject: 339. *PyUnstable_InterpreterFrame_GetCode
          (struct _PyInterpreterFrame *frame);

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
          Return a *note strong reference: 33d. to the code object for
          the frame.

     Adicionado na versão 3.12.

 -- C Função: int PyUnstable_InterpreterFrame_GetLasti (struct
          _PyInterpreterFrame *frame);

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Return the byte offset into the last executed instruction.

     Adicionado na versão 3.12.

 -- C Função: int PyUnstable_InterpreterFrame_GetLine (struct
          _PyInterpreterFrame *frame);

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Return the currently executing line number, or -1 if there is no
     line number.

     Adicionado na versão 3.12.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0523/


File: python.info,  Node: Objetos Geradores,  Next: Objetos corrotina<2>,  Prev: Objetos Frame,  Up: Outros Objetos

7.8.6.25 Objetos Geradores
..........................

Objetos geradores são o que o Python usa para implementar iteradores
geradores.  Eles são normalmente criados por iteração sobre uma função
que produz valores, em vez de invocar explicitamente *note PyGen_New():
5117. ou *note PyGen_NewWithQualName(): 5118.

 -- C Tipo: type PyGenObject

     A estrutura C usada para objetos geradores.

 -- C Variável: *note PyTypeObject: ab4. PyGen_Type

     O objeto de tipo correspondendo a objetos geradores.

 -- C Função: int PyGen_Check (PyObject *ob)

     Retorna verdadeiro se 'ob' for um objeto gerador; 'ob' não deve ser
     ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: int PyGen_CheckExact (PyObject *ob)

     Retorna verdadeiro se o tipo do 'ob' é *note PyGen_Type: 511a.;
     'ob' não deve ser ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: *note PyObject: 339. *PyGen_New (PyFrameObject *frame)
     'Retorna valor: Nova referência.'  Cria e retorna um novo objeto
     gerador com base no objeto 'frame'.  Uma referência a 'quadro' é
     roubada por esta função.  O argumento não deve ser ‘NULL’.

 -- C Função: *note PyObject: 339. *PyGen_NewWithQualName (PyFrameObject
          *frame, PyObject *name, PyObject *qualname)
     'Retorna valor: Nova referência.'  Cria e retorna um novo objeto
     gerador com base no objeto 'frame', com ‘__name__’ e ‘__qualname__’
     definidos como 'name' e 'qualname'.  Uma referência a 'frame' é
     roubada por esta função.  O argumento 'frame' não deve ser ‘NULL’.

 -- C Função: *note PyCodeObject: 777. *PyGen_GetCode (PyGenObject *gen)

     Retorna uma nova *note referência forte: 33d. ao objeto de código
     encapsulado por 'gen'.  Esta função sempre tem sucesso.

* Menu:

* Objetos geradores assíncronos::


File: python.info,  Node: Objetos geradores assíncronos,  Up: Objetos Geradores

7.8.6.26 Objetos geradores assíncronos
......................................

Ver também
..........

PEP 525(1)

 -- C Variável: *note PyTypeObject: ab4. PyAsyncGen_Type

     O objeto de tipo correspondente aos objetos geradores assíncronos.
     Está disponível como *note types.AsyncGeneratorType: 2717. na
     camada Python.

     Adicionado na versão 3.6.

 -- C Função: *note PyObject: 339. *PyAsyncGen_New (PyFrameObject
          *frame, PyObject *name, PyObject *qualname)

     Cria um novo gerador assíncrono que encapsule 'frame', com
     ‘__name__’ e ‘__qualname__’ definidos como 'name' e 'qualname'.
     'frame' é apropriado por esta função e não deve ser ‘NULL’.

     Em caso de sucesso, esta função retorna uma *note referência forte:
     33d. ao novo gerador assíncrono.  Em caso de falha, esta função
     retorna ‘NULL’ com uma exceção definida.

     Adicionado na versão 3.6.

 -- C Função: int PyAsyncGen_CheckExact (PyObject *op)

     Retorna verdadeiro se 'op' for um objeto gerador assíncrono, falso
     caso contrário.  Esta função sempre tem sucesso.

     Adicionado na versão 3.6.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0525/


File: python.info,  Node: Objetos corrotina<2>,  Next: Objetos de variáveis de contexto,  Prev: Objetos Geradores,  Up: Outros Objetos

7.8.6.27 Objetos corrotina
..........................

Adicionado na versão 3.5.

Os objetos corrotina são aquelas funções declaradas com um retorno de
palavra-chave ‘async’.

 -- C Tipo: type PyCoroObject

     A estrutura C utilizada para objetos corrotinas.

 -- C Variável: *note PyTypeObject: ab4. PyCoro_Type

     O tipo de objeto correspondente a objetos corrotina.

 -- C Função: int PyCoro_CheckExact (PyObject *ob)

     Retorna true se o tipo do 'ob' é *note PyCoro_Type: 5126.; 'ob' não
     deve ser ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: *note PyObject: 339. *PyCoro_New (PyFrameObject *frame,
          PyObject *name, PyObject *qualname)
     'Retorna valor: Nova referência.'  Cria e retorna um novo objeto de
     corrotina com base no objeto 'frame', com ‘__name__’ e
     ‘__qualname__’ definido como 'name' e 'qualname'.  Uma referência a
     'frame' é roubada por esta função.  O argumento 'frame' não deve
     ser ‘NULL’.


File: python.info,  Node: Objetos de variáveis de contexto,  Next: Objetos de indicação de tipos,  Prev: Objetos corrotina<2>,  Up: Outros Objetos

7.8.6.28 Objetos de variáveis de contexto
.........................................

Adicionado na versão 3.7.

Alterado na versão 3.7.1:

     Nota: No Python 3.7.1, as assinaturas de todas as APIs C de
     variáveis de contexto foram 'alteradas' para usar ponteiros *note
     PyObject: 339. em vez de *note PyContext: 512c, *note PyContextVar:
     512d. e *note PyContextToken: 512e.  Por exemplo:

          // no 3.7.0:
          PyContext *PyContext_New(void);

          // no 3.7.1+:
          PyObject *PyContext_New(void);

     Veja bpo-34762(1) para mais detalhes.

Esta seção detalha a API C pública para o módulo *note contextvars: 24.

 -- C Tipo: type PyContext

     A estrutura C usada para representar um objeto *note
     contextvars.Context: 15b7.

 -- C Tipo: type PyContextVar

     A estrutura C usada para representar um objeto *note
     contextvars.ContextVar: 1643.

 -- C Tipo: type PyContextToken

     A estrutura C usada para representar um objeto *note
     contextvars.Token: 3455.

 -- C Variável: *note PyTypeObject: ab4. PyContext_Type

     O objeto de tipo que representa o tipo de 'contexto'.

 -- C Variável: *note PyTypeObject: ab4. PyContextVar_Type

     O objeto de tipo que representa o tipo de 'variável de contexto'.

 -- C Variável: *note PyTypeObject: ab4. PyContextToken_Type

     O objeto de tipo que representa o tipo de 'token de variável de
     contexto'.

Macros de verificação de tipo:

 -- C Função: int PyContext_CheckExact (PyObject *o)

     Retorna verdadeiro se 'o' for do tipo *note PyContext_Type: 512f.
     'o' não deve ser ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: int PyContextVar_CheckExact (PyObject *o)

     Retorna verdadeiro se 'o' for do tipo *note PyContextVar_Type:
     5130.  'o' não deve ser ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: int PyContextToken_CheckExact (PyObject *o)

     Retorna verdadeiro se 'o' for do tipo *note PyContextToken_Type:
     5131.  'o' não deve ser ‘NULL’.  Esta função sempre tem sucesso.

Funções de gerenciamento de objetos de contexto:

 -- C Função: *note PyObject: 339. *PyContext_New (void)
     'Retorna valor: Nova referência.'  Cria um novo objeto de contexto
     vazio.  Retorna ‘NULL’ se um erro ocorreu.

 -- C Função: *note PyObject: 339. *PyContext_Copy (PyObject *ctx)
     'Retorna valor: Nova referência.'  Cria uma cópia rasa do objeto de
     contexto 'ctx' passado.  Retorna ‘NULL’ se um erro ocorreu.

 -- C Função: *note PyObject: 339. *PyContext_CopyCurrent (void)
     'Retorna valor: Nova referência.'  Cria uma cópia rasa do contexto
     da thread atual.  Retorna ‘NULL’ se um erro ocorreu.

 -- C Função: int PyContext_Enter (PyObject *ctx)

     Defina 'ctx' como o contexto atual para o thread atual.  Retorna
     ‘0’ em caso de sucesso e ‘-1’ em caso de erro.

 -- C Função: int PyContext_Exit (PyObject *ctx)

     Desativa o contexto 'ctx' e restaura o contexto anterior como o
     contexto atual para a thread atual.  Retorna ‘0’ em caso de sucesso
     e ‘-1’ em caso de erro.

Funções de variável de contexto:

 -- C Função: *note PyObject: 339. *PyContextVar_New (const char *name,
          PyObject *def)
     'Retorna valor: Nova referência.'  Cria um novo objeto
     ‘ContextVar’.  O parâmetro 'name' é usado para fins de introspecção
     e depuração.  O parâmetro 'def' especifica um valor padrão para a
     variável de contexto, ou ‘NULL’ para nenhum padrão.  Se ocorrer um
     erro, esta função retorna ‘NULL’.

 -- C Função: int PyContextVar_Get (PyObject *var, PyObject
          *default_value, PyObject **value)

     Obtém o valor de uma variável de contexto.  Retorna ‘-1’ se um erro
     ocorreu durante a pesquisa, e ‘0’ se nenhum erro ocorreu, se um
     valor foi encontrado ou não.

     Se a variável de contexto foi encontrada, 'value' será um ponteiro
     para ela.  Se a variável de contexto 'não' foi encontrada, 'value'
     apontará para:

        - 'default_value', se não for ‘NULL’;

        - o valor padrão de 'var', se não for ‘NULL’;

        - ‘NULL’

     Exceto para ‘NULL’, a função retorna uma nova referência.

 -- C Função: *note PyObject: 339. *PyContextVar_Set (PyObject *var,
          PyObject *value)
     'Retorna valor: Nova referência.'  Define o valor de 'var' como
     'value' no contexto atual.  Retorna um novo objeto token para esta
     alteração, ou ‘NULL’ se um erro ocorreu.

 -- C Função: int PyContextVar_Reset (PyObject *var, PyObject *token)

     Redefine o estado da variável de contexto 'var' para o estado que
     anterior a *note PyContextVar_Set(): 513c. que retornou o 'token'
     foi chamado.  Esta função retorna ‘0’ em caso de sucesso e ‘-1’ em
     caso de erro.

   ---------- Footnotes ----------

   (1) https://bugs.python.org/issue?@action=redirect&bpo=34762


File: python.info,  Node: Objetos de indicação de tipos,  Prev: Objetos de variáveis de contexto,  Up: Outros Objetos

7.8.6.29 Objetos de indicação de tipos
......................................

São fornecidos vários tipos embutidos para sugestão de tipo.
Atualmente, dois tipos existem – *note GenericAlias: 6b2. e *note Union:
7c3.  Apenas ‘GenericAlias’ está exposto ao C.

 -- C Função: *note PyObject: 339. *Py_GenericAlias (PyObject *origin,
          PyObject *args)
     ' Parte da *note ABI Estável: 553. desde a versão 3.9.'  Cria um
     objeto *note GenericAlias: 6b2.  Equivalente a chamar a classe
     Python *note types.GenericAlias: 7ed.  Os argumentos 'origin' e
     'args' definem os atributos ‘__origin__’ e ‘__args__’ de
     ‘GenericAlias’ respectivamente.  'origin' deve ser um *note
     PyTypeObject: ab4.*, e 'args' pode ser um *note PyTupleObject:
     4eac.* ou qualquer ‘PyObject*’.  Se 'args' passado não for uma
     tupla, uma tupla de 1 elemento é construída automaticamente e
     ‘__args__’ é definido como ‘(args,)’.  A verificação mínima é feita
     para os argumentos, então a função terá sucesso mesmo se 'origin'
     não for um tipo.  O atributo ‘__parameters__’ de ‘GenericAlias’ é
     construído lentamente a partir de ‘__args__’.  Em caso de falha,
     uma exceção é levantada e ‘NULL’ é retornado.

     Aqui está um exemplo de como tornar um tipo de extensão genérico:

          ...
          static PyMethodDef my_obj_methods[] = {
              // Outros métodos.
              ...
              {"__class_getitem__", Py_GenericAlias, METH_O|METH_CLASS, "Veja PEP 585"}
              ...
          }

     Ver também
     ..........

     O método de modelo de dados *note __class_getitem__(): 73b.

     Adicionado na versão 3.9.

 -- C Variável: *note PyTypeObject: ab4. Py_GenericAliasType
     ' Parte da *note ABI Estável: 553. desde a versão 3.9.'  O tipo C
     do objeto retornado por *note Py_GenericAlias(): 4dc2.  Equivalente
     a *note types.GenericAlias: 7ed. no Python.

     Adicionado na versão 3.9.


File: python.info,  Node: API C para módulos de extensão,  Prev: Outros Objetos,  Up: Camada de Objetos Concretos

7.8.7 API C para módulos de extensão
------------------------------------

* Menu:

* API C de curses::
* Dados internos::
* Objetos DateTime: Objetos DateTime<2>.
* Dados internos: Dados internos<2>.


File: python.info,  Node: API C de curses,  Next: Dados internos,  Up: API C para módulos de extensão

7.8.7.1 API C de curses
.......................

*note curses: 2b. expõe uma pequena interface C para módulos de
extensão.  Os usuários devem incluir o arquivo de cabeçalho
‘py_curses.h’ (que não é incluído por padrão em ‘Python.h’) e *note
import_curses(): 5145. deve ser invocada, geralmente como parte da
função de inicialização do módulo, para popular *note PyCurses_API:
5146.

     Aviso: Nem a API C nem o módulo *note curses: 2b. do Python puro
     são compatíveis com subinterpretadores.

 -- C Macro: import_curses ()

     Importa a API C do curses.  A macro não precisa de ponto e vírgula
     para ser chamada.

     Em caso de sucesso, popula o ponteiro *note PyCurses_API: 5146.

     Em caso de falha, define *note PyCurses_API: 5146. como NULL e
     levanta uma exceção.  O chamador deve verificar se ocorreu um erro
     através de *note PyErr_Occurred(): 1a3b.:

          import_curses();  // O ponto e vírgula é opcional, mas recomendado.
          if (PyErr_Occurred()) { /* cleanup */ }

 -- C Variável: void **PyCurses_API

     Objeto alocado dinamicamente contendo a API C do curses.  Esta
     variável só estará disponível após a execução bem-sucedida da macro
     *note import_curses: 5145.

     ‘PyCurses_API[0]’ corresponde a *note PyCursesWindow_Type: 5147.

     ‘PyCurses_API[1]’, ‘PyCurses_API[2]’ e ‘PyCurses_API[3]’ são
     ponteiros para funções predicativas do tipo ‘int (*)(void)’.

     Quando chamados, esses predicados retornam se *note
     curses.setupterm(): 3185, *note curses.initscr(): 1689. e *note
     curses.start_color(): 3186. foram chamados, respectivamente.

     Veja também as macros de conveniência *note
     PyCursesSetupTermCalled: 5148, *note PyCursesInitialised: 5149. e
     *note PyCursesInitialisedColor: 514a.

          Nota: O número de entradas nesta estrutura está sujeito a
          alterações.  Considere usar *note PyCurses_API_pointers: 514b.
          para verificar se novos campos estão disponíveis.

 -- C Macro: PyCurses_API_pointers

     O número de campos acessíveis (‘4’) em *note PyCurses_API: 5146.
     Esse número é incrementado sempre que novos campos são adicionados.

 -- C Variável: *note PyTypeObject: ab4. PyCursesWindow_Type

     O *note tipo de heap: 96c. correspondente a *note curses.window:
     10d4.

 -- C Função: int PyCursesWindow_Check (PyObject *op)

     Retorna verdadeiro se 'op' for uma instância de *note
     curses.window: 10d4, falso caso contrário.

As macros a seguir são macros de conveniência que se expandem em
instruções C. Em particular, elas só podem ser usadas como ‘macro;’ ou
‘macro’, mas não como ‘macro()’ ou ‘macro();’.

 -- C Macro: PyCursesSetupTermCalled

     Macro que verifica se *note curses.setupterm(): 3185. foi chamada.

     A expansão de macro é aproximadamente equivalente a:

          {
              typedef int (*predicate_t)(void);
              predicate_t was_setupterm_called = (predicate_t)PyCurses_API[1];
              if (!was_setupterm_called()) {
                  return NULL;
              }
          }

 -- C Macro: PyCursesInitialised

     Macro que verifica se *note curses.initscr(): 1689. foi chamada.

     A expansão de macro é aproximadamente equivalente a:

          {
              typedef int (*predicate_t)(void);
              predicate_t was_initscr_called = (predicate_t)PyCurses_API[2];
              if (!was_initscr_called()) {
                  return NULL;
              }
          }

 -- C Macro: PyCursesInitialisedColor

     Macro que verifica se *note curses.start_color(): 3186. foi
     chamada.

     A expansão de macro é aproximadamente equivalente a:

          {
              typedef int (*predicate_t)(void);
              predicate_t was_start_color_called = (predicate_t)PyCurses_API[3];
              if (!was_start_color_called()) {
                  return NULL;
              }
          }


File: python.info,  Node: Dados internos,  Next: Objetos DateTime<2>,  Prev: API C de curses,  Up: API C para módulos de extensão

7.8.7.2 Dados internos
......................

Os seguintes objetos são expostos pela API C, mas devem ser considerados
apenas para uso interno.

 -- C Macro: PyCurses_CAPSULE_NAME

     Nome da cápsula do curses a ser passada para *note
     PyCapsule_Import(): 1999.

     Uso interno apenas.  Use *note import_curses: 5145. em vez disso.


File: python.info,  Node: Objetos DateTime<2>,  Next: Dados internos<2>,  Prev: Dados internos,  Up: API C para módulos de extensão

7.8.7.3 Objetos DateTime
........................

Vários objetos de data e hora são fornecidos pelo módulo *note datetime:
30.  Antes de usar qualquer uma dessas funções, o arquivo de cabeçalho
‘datetime.h’ deve ser incluído na sua fonte (observe que isso não é
incluído por ‘Python.h’) e a macro *note PyDateTime_IMPORT: 5152. deve
ser chamada, geralmente como parte da função de inicialização do módulo.
A macro coloca um ponteiro para uma estrutura C em uma variável
estática, *note PyDateTimeAPI: 5153, usada pelas macros a seguir.

 -- C Macro: PyDateTime_IMPORT ()

     Importa a API C de datetime.

     Em caso de sucesso, preenche o ponteiro *note PyDateTimeAPI: 5153.
     Em caso de falha, define *note PyDateTimeAPI: 5153. como ‘NULL’ e
     lança uma exceção.  O chamador deve verificar se ocorreu um erro
     através de *note PyErr_Occurred(): 1a3b.:

          PyDateTime_IMPORT;
          if (PyErr_Occurred()) { /* limpeza */ }

          Aviso: Isso não é compatível com subinterpretadores.

 -- C Tipo: type PyDateTime_CAPI

     Estrutura contendo os campos para a API C de datetime.

     Os campos desta estrutura são privados e sujeitos a alterações.

     Não use isto diretamente; prefira as APIs ‘PyDateTime_*’.

 -- C Variável: *note PyDateTime_CAPI: 5154. *PyDateTimeAPI

     Objeto alocado dinamicamente contendo a API C de datetime.

     Esta variável só estará disponível após a execução bem-sucedida de
     *note PyDateTime_IMPORT: 5152.

 -- C Tipo: type PyDateTime_Date

     Esta é uma instância de *note PyObject: 339. representando o objeto
     data do Python.

 -- C Tipo: type PyDateTime_DateTime

     Esta é uma instância de *note PyObject: 339. representando o objeto
     datetime do Python.

 -- C Tipo: type PyDateTime_Time

     Esta é uma instância de *note PyObject: 339. representando o objeto
     hora do Python.

 -- C Tipo: type PyDateTime_Delta

     Esta é uma instância de *note PyObject: 339. representando a
     diferença entre dois valores de datetime.

 -- C Variável: *note PyTypeObject: ab4. PyDateTime_DateType

     Esta instância de *note PyTypeObject: ab4. representa o tipo data
     do Python; é o mesmo objeto que *note datetime.date: 1cd. na camada
     de Python.

 -- C Variável: *note PyTypeObject: ab4. PyDateTime_DateTimeType

     Esta instância de *note PyTypeObject: ab4. representa o tipo
     datetime do Python; é o mesmo objeto que *note datetime.datetime:
     1cc. na camada de Python.

 -- C Variável: *note PyTypeObject: ab4. PyDateTime_TimeType

     Esta instância de *note PyTypeObject: ab4. representa o tipo hora
     do Python; é o mesmo objeto que *note datetime.time: 1ce. na camada
     de Python.

 -- C Variável: *note PyTypeObject: ab4. PyDateTime_DeltaType

     Esta instância de *note PyTypeObject: ab4. representa o tipo Python
     para a diferença entre dois valores de datetime; é o mesmo objeto
     que *note datetime.timedelta: 9d7. na camada de Python.

 -- C Variável: *note PyTypeObject: ab4. PyDateTime_TZInfoType

     Esta instância de *note PyTypeObject: ab4. representa o tipo fuso
     horário do Python; é o mesmo objeto que *note datetime.tzinfo: 5de.
     na camada de Python.

Macro para acesso ao singleton UTC:

 -- C Variável: *note PyObject: 339. *PyDateTime_TimeZone_UTC

     Retorna um singleton do fuso horário representando o UTC, o mesmo
     objeto que *note datetime.timezone.utc: 614.

     Adicionado na versão 3.7.

Macros de verificação de tipo:

 -- C Função: int PyDate_Check (PyObject *ob)

     Retorna verdadeiro se 'ob' for do tipo *note PyDateTime_DateType:
     5159. ou um subtipo de ‘PyDateTime_DateType’.  'ob' não deve ser
     ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: int PyDate_CheckExact (PyObject *ob)

     Retorna verdadeiro se 'ob' for do tipo *note PyDateTime_DateType:
     5159.  'ob' não deve ser ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: int PyDateTime_Check (PyObject *ob)

     Retorna verdadeiro se 'ob' é do tipo *note PyDateTime_DateTimeType:
     515a. ou um subtipo de ‘PyDateTime_DateTimeType’.  'ob' não deve
     ser ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: int PyDateTime_CheckExact (PyObject *ob)

     Retorna verdadeiro se 'ob' for do tipo *note
     PyDateTime_DateTimeType: 515a.  'ob' não deve ser ‘NULL’.  Esta
     função sempre tem sucesso.

 -- C Função: int PyTime_Check (PyObject *ob)

     Retorna verdadeiro se 'ob' é do tipo *note PyDateTime_TimeType:
     515b. ou um subtipo de ‘PyDateTime_TimeType’.  'ob' não deve ser
     ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: int PyTime_CheckExact (PyObject *ob)

     Retorna verdadeiro se 'ob' for do tipo *note PyDateTime_TimeType:
     515b.  'ob' não deve ser ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: int PyDelta_Check (PyObject *ob)

     Retorna verdadeiro se 'ob' for do tipo *note PyDateTime_DeltaType:
     515c. ou um subtipo de ‘PyDateTime_DeltaType’.  'ob' não pode ser
     ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: int PyDelta_CheckExact (PyObject *ob)

     Retorna verdadeiro se 'ob' for do tipo *note PyDateTime_DeltaType:
     515c.  'ob' não deve ser ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: int PyTZInfo_Check (PyObject *ob)

     Retorna verdadeiro se 'ob' for do tipo *note PyDateTime_TZInfoType:
     515d. ou um subtipo de ‘PyDateTime_TZInfoType’.  'ob' não pode ser
     ‘NULL’.  Esta função sempre tem sucesso.

 -- C Função: int PyTZInfo_CheckExact (PyObject *ob)

     Retorna verdadeiro se 'ob' for do tipo *note PyDateTime_TZInfoType:
     515d.  'ob' não deve ser ‘NULL’.  Esta função sempre tem sucesso.

Macros para criar objetos:

 -- C Função: *note PyObject: 339. *PyDate_FromDate (int year, int
          month, int day)
     'Retorna valor: Nova referência.'  Retorna um objeto *note
     datetime.date: 1cd. com o ano, mês e dia especificados.

 -- C Função: *note PyObject: 339. *PyDateTime_FromDateAndTime (int
          year, int month, int day, int hour, int minute, int second,
          int usecond)
     'Retorna valor: Nova referência.'  Retorna um objeto *note
     datetime.datetime: 1cc. com o ano, mês, dia, hora, minuto, segundo,
     microssegundo especificados.

 -- C Função: *note PyObject: 339. *PyDateTime_FromDateAndTimeAndFold
          (int year, int month, int day, int hour, int minute, int
          second, int usecond, int fold)
     'Retorna valor: Nova referência.'  Retorna um objeto *note
     datetime.datetime: 1cc. com o ano, mês, dia, hora, minuto, segundo,
     microssegundo e a dobra especificados.

     Adicionado na versão 3.6.

 -- C Função: *note PyObject: 339. *PyTime_FromTime (int hour, int
          minute, int second, int usecond)
     'Retorna valor: Nova referência.'  Retorna um objeto *note
     datetime.time: 1ce. com a hora, minuto, segundo e microssegundo
     especificados.

 -- C Função: *note PyObject: 339. *PyTime_FromTimeAndFold (int hour,
          int minute, int second, int usecond, int fold)
     'Retorna valor: Nova referência.'  Retorna um objeto *note
     datetime.time: 1ce. com a hora, minuto, segundo, microssegundo e a
     dobra especificados.

     Adicionado na versão 3.6.

 -- C Função: *note PyObject: 339. *PyDelta_FromDSU (int days, int
          seconds, int useconds)
     'Retorna valor: Nova referência.'  Retorna um objeto *note
     datetime.timedelta: 9d7. representando o número especificado de
     dias, segundos e microssegundos.  A normalização é realizada para
     que o número resultante de microssegundos e segundos esteja nos
     intervalos documentados para objetos de *note datetime.timedelta:
     9d7.

 -- C Função: *note PyObject: 339. *PyTimeZone_FromOffset (PyObject
          *offset)
     'Retorna valor: Nova referência.'  Retorna um objeto *note
     datetime.timezone: 10fe. com um deslocamento fixo sem nome
     representado pelo argumento 'offset'.

     Adicionado na versão 3.7.

 -- C Função: *note PyObject: 339. *PyTimeZone_FromOffsetAndName
          (PyObject *offset, PyObject *name)
     'Retorna valor: Nova referência.'  Retorna um objeto *note
     datetime.timezone: 10fe. com um deslocamento fixo representado pelo
     argumento 'offset' e com tzname 'name'.

     Adicionado na versão 3.7.

Macros para extrair campos de objetos 'date'.  O argumento deve ser uma
instância de *note PyDateTime_Date: 5155, inclusive subclasses (como
*note PyDateTime_DateTime: 5156.).  O argumento não deve ser ‘NULL’, e o
tipo não é verificado:

 -- C Função: int PyDateTime_GET_YEAR (PyDateTime_Date *o)

     Retorna o ano, como um inteiro positivo.

 -- C Função: int PyDateTime_GET_MONTH (PyDateTime_Date *o)

     Retorna o mês, como um inteiro de 1 a 12.

 -- C Função: int PyDateTime_GET_DAY (PyDateTime_Date *o)

     Retorna o dia, como um inteiro de 1 a 31.

Macros para extrair campos de objetos 'datetime'.  O argumento deve ser
uma instância de *note PyDateTime_DateTime: 5156, inclusive subclasses.
O argumento não deve ser ‘NULL’, e o tipo não é verificado:

 -- C Função: int PyDateTime_DATE_GET_HOUR (PyDateTime_DateTime *o)

     Retorna a hora, como um inteiro de 0 a 23.

 -- C Função: int PyDateTime_DATE_GET_MINUTE (PyDateTime_DateTime *o)

     Retorna o minuto, como um inteiro de 0 a 59.

 -- C Função: int PyDateTime_DATE_GET_SECOND (PyDateTime_DateTime *o)

     Retorna o segundo, como um inteiro de 0 a 59.

 -- C Função: int PyDateTime_DATE_GET_MICROSECOND (PyDateTime_DateTime
          *o)

     Retorna o microssegundo, como um inteiro de 0 a 999999.

 -- C Função: int PyDateTime_DATE_GET_FOLD (PyDateTime_DateTime *o)

     Retorna a dobra, como um inteiro de 0 a 1.

     Adicionado na versão 3.6.

 -- C Função: *note PyObject: 339. *PyDateTime_DATE_GET_TZINFO
          (PyDateTime_DateTime *o)

     Retorna o tzinfo (que pode ser ‘None’).

     Adicionado na versão 3.10.

Macros para extrair campos de objetos 'time'.  O argumento deve ser uma
instância de *note PyDateTime_Time: 5157, inclusive subclasses.  O
argumento não deve ser ‘NULL’, e o tipo não é verificado:

 -- C Função: int PyDateTime_TIME_GET_HOUR (PyDateTime_Time *o)

     Retorna a hora, como um inteiro de 0 a 23.

 -- C Função: int PyDateTime_TIME_GET_MINUTE (PyDateTime_Time *o)

     Retorna o minuto, como um inteiro de 0 a 59.

 -- C Função: int PyDateTime_TIME_GET_SECOND (PyDateTime_Time *o)

     Retorna o segundo, como um inteiro de 0 a 59.

 -- C Função: int PyDateTime_TIME_GET_MICROSECOND (PyDateTime_Time *o)

     Retorna o microssegundo, como um inteiro de 0 a 999999.

 -- C Função: int PyDateTime_TIME_GET_FOLD (PyDateTime_Time *o)

     Retorna a dobra, como um inteiro de 0 a 1.

     Adicionado na versão 3.6.

 -- C Função: *note PyObject: 339. *PyDateTime_TIME_GET_TZINFO
          (PyDateTime_Time *o)

     Retorna o tzinfo (que pode ser ‘None’).

     Adicionado na versão 3.10.

Macros para extrair campos de objetos 'time delta'.  O argumento deve
ser uma instância de *note PyDateTime_Delta: 5158, inclusive subclasses.
O argumento não deve ser ‘NULL’, e o tipo não é verificado:

 -- C Função: int PyDateTime_DELTA_GET_DAYS (PyDateTime_Delta *o)

     Retorna o número de dias, como um inteiro de -999999999 a
     999999999.

     Adicionado na versão 3.3.

 -- C Função: int PyDateTime_DELTA_GET_SECONDS (PyDateTime_Delta *o)

     Retorna o número de segundos, como um inteiro de 0 a 86399.

     Adicionado na versão 3.3.

 -- C Função: int PyDateTime_DELTA_GET_MICROSECONDS (PyDateTime_Delta
          *o)

     Retorna o número de microssegundos, como um inteiro de 0 a 999999.

     Adicionado na versão 3.3.

Macros para a conveniência de módulos implementando a API de DB:

 -- C Função: *note PyObject: 339. *PyDateTime_FromTimestamp (PyObject
          *args)
     'Retorna valor: Nova referência.'  Cria e retorna um novo objeto
     *note datetime.datetime: 1cc. dado uma tupla de argumentos que
     possa ser passada ao método *note
     datetime.datetime.fromtimestamp(): 4ed.

 -- C Função: *note PyObject: 339. *PyDate_FromTimestamp (PyObject
          *args)
     'Retorna valor: Nova referência.'  Cria e retorna um novo objeto
     *note datetime.date: 1cd. dado uma tupla de argumentos que possa
     ser passada ao método *note datetime.date.fromtimestamp(): bed.


File: python.info,  Node: Dados internos<2>,  Prev: Objetos DateTime<2>,  Up: API C para módulos de extensão

7.8.7.4 Dados internos
......................

Os seguintes símbolos são expostos pela API C, mas devem ser
considerados apenas para uso interno.

 -- C Macro: PyDateTime_CAPSULE_NAME

     Nome da cápsula de datetime a ser passada para *note
     PyCapsule_Import(): 1999.

     Uso interno apenas.  Use *note PyDateTime_IMPORT: 5152. em vez
     disso.


File: python.info,  Node: Inicialização finalização e threads,  Next: Configuração de inicialização do Python,  Prev: Camada de Objetos Concretos,  Up: Manual de referência da API Python/C

7.9 Inicialização, finalização e threads
========================================

Veja *note Configuração de inicialização do Python: 3a7. para detalhes
sobre como configurar o interpretador antes da inicialização.

* Menu:

* Antes da inicialização do Python::
* Variáveis de configuração global::
* Inicializando e encerrando o interpretador::
* Parâmetros de todo o processo::
* Estado de thread e a trava global do interpretador::
* Sub-interpreter support::
* Notificações assíncronas::
* Profiling and Tracing::
* Reference tracing::
* Advanced Debugger Support::
* Thread Local Storage Support::
* Synchronization Primitives: Synchronization Primitives<2>.
* Operating System Thread APIs::


File: python.info,  Node: Antes da inicialização do Python,  Next: Variáveis de configuração global,  Up: Inicialização finalização e threads

7.9.1 Antes da inicialização do Python
--------------------------------------

Em uma aplicação que incorpora Python, a função *note Py_Initialize():
8b1. deve ser chamada antes de usar qualquer outra função da API
Python/C; com exceção de algumas funções e as *note variáveis globais de
configuração: 5186.

As seguintes funções podem ser seguramente chamadas antes da
inicialização do Python.

   * Funções que inicializam o interpretador:

        * *note Py_Initialize(): 8b1.

        * *note Py_InitializeEx(): 4dca.

        * *note Py_InitializeFromConfig(): 3c5.

        * *note Py_BytesMain(): 9c9.

        * *note Py_Main(): c3f.

        * as funções de pré-inicialização de tempo de execução cobertas
          em *note Configuração de inicialização do Python: 3a7.

   * Funções de configuração:

        * *note PyImport_AppendInittab(): 18a4.

        * *note PyImport_ExtendInittab(): 18a5.

        * ‘PyInitFrozenExtensions()’

        * *note PyMem_SetAllocator(): 58b.

        * *note PyMem_SetupDebugHooks(): c85.

        * *note PyObject_SetArenaAllocator(): 5187.

        * *note Py_SetProgramName(): 172c.

        * *note Py_SetPythonHome(): 172b.

        * *note PySys_ResetWarnOptions(): 3af.

        * as funções de configuração cobertas em *note Configuração de
          inicialização do Python: 3a7.

   * Funções informativas:

        * *note Py_IsInitialized(): 4bea.

        * *note PyMem_GetAllocator(): 5188.

        * *note PyObject_GetArenaAllocator(): 5189.

        * *note Py_GetBuildInfo(): 1479.

        * *note Py_GetCompiler(): 4dc4.

        * *note Py_GetCopyright(): 4dc5.

        * *note Py_GetPlatform(): 4dc6.

        * *note Py_GetVersion(): 4dc8.

        * *note Py_IsInitialized(): 4bea.

   * Utilitários:

        * *note Py_DecodeLocale(): be0.

        * o relatório de status e funções utilitárias cobertas em *note
          Configuração de inicialização do Python: 3a7.

   * Alocadores de memória:

        * *note PyMem_RawMalloc(): 390.

        * *note PyMem_RawRealloc(): 392.

        * *note PyMem_RawCalloc(): 391.

        * *note PyMem_RawFree(): 393.

   * Sincronização:

        * *note PyMutex_Lock(): 32b.

        * *note PyMutex_Unlock(): 32c.

     Nota: Apesar de sua aparente semelhança com algumas das funções
     listadas acima, as seguintes funções 'não devem ser chamadas' antes
     que o interpretador tenha sido inicializado: *note
     Py_EncodeLocale(): be1, *note Py_GetPath(): 3b3, *note
     Py_GetPrefix(): 3b5, *note Py_GetExecPrefix(): 3b1, *note
     Py_GetProgramFullPath(): 3b7, *note Py_GetPythonHome(): 3ba, *note
     Py_GetProgramName(): 3b9, *note PyEval_InitThreads(): 172f, e *note
     Py_RunMain(): 9cd.


File: python.info,  Node: Variáveis de configuração global,  Next: Inicializando e encerrando o interpretador,  Prev: Antes da inicialização do Python,  Up: Inicialização finalização e threads

7.9.2 Variáveis de configuração global
--------------------------------------

Python tem variáveis para a configuração global a fim de controlar
diferentes características e opções.  Por padrão, estes sinalizadores
são controlados por *note opções de linha de comando: 1eb3.

Quando um sinalizador é definido por uma opção, o valor do sinalizador é
o número de vezes que a opção foi definida.  Por exemplo, ‘-b’ define
*note Py_BytesWarningFlag: 3d4. para 1 e ‘-bb’ define *note
Py_BytesWarningFlag: 3d4. para 2.

 -- C Variável: int Py_BytesWarningFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.bytes_warning: 3d5. deve ser usada em
     seu lugar, consulte *note Configuração de inicialização do Python:
     3a7.

     Emite um aviso ao comparar *note bytes: 1c2. ou *note bytearray:
     2ea. com *note str: 44c. ou *note bytes: 1c2. com *note int: 257.
     Emite um erro se for maior ou igual a ‘2’.

     Definida pela opção *note -b: 5e3.

     Descontinuado desde a versão 3.12, será removido na versão 3.14.

 -- C Variável: int Py_DebugFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.parser_debug: 3c7. deve ser usada em
     seu lugar, consulte *note Configuração de inicialização do Python:
     3a7.

     Ativa a saída de depuração do analisador sintático (somente para
     especialistas, dependendo das opções de compilação).

     Definida pela a opção *note -d: 1ebb. e a variável de ambiente
     *note PYTHONDEBUG: 1ebc.

     Descontinuado desde a versão 3.12, será removido na versão 3.14.

 -- C Variável: int Py_DontWriteBytecodeFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.write_bytecode: 3db. deve ser usada em
     seu lugar, consulte *note Configuração de inicialização do Python:
     3a7.

     Se definida como diferente de zero, o Python não tentará escrever
     arquivos ‘.pyc’ na importação de módulos fonte.

     Definida pela opção *note -B: 1414. e pela variável de ambiente
     *note PYTHONDONTWRITEBYTECODE: 1415.

     Descontinuado desde a versão 3.12, será removido na versão 3.14.

 -- C Variável: int Py_FrozenFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.pathconfig_warnings: 3d7. deve ser
     usada em seu lugar, consulte *note Configuração de inicialização do
     Python: 3a7.

     Suprime mensagens de erro ao calcular o caminho de pesquisa do
     módulo em *note Py_GetPath(): 3b3.

     Sinalizador privado usado pelos programas ‘_freeze_module’ e
     ‘frozenmain’.

     Descontinuado desde a versão 3.12, será removido na versão 3.14.

 -- C Variável: int Py_HashRandomizationFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração de *note PyConfig.hash_seed: 3e2. e *note
     PyConfig.use_hash_seed: 3e1. deve ser usada em seu lugar, consulte
     *note Configuração de inicialização do Python: 3a7.

     Definida como ‘1’ se a variável de ambiente *note PYTHONHASHSEED:
     10b6. estiver definida como uma string não vazia.

     Se o sinalizador for diferente de zero, lê a variável de ambiente
     *note PYTHONHASHSEED: 10b6. para inicializar a semente de hash
     secreta.

     Descontinuado desde a versão 3.12, será removido na versão 3.14.

 -- C Variável: int Py_IgnoreEnvironmentFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.use_environment: 3d9. deve ser usada em
     seu lugar, consulte *note Configuração de inicialização do Python:
     3a7.

     Ignora todas as variáveis de ambiente ‘PYTHON*’, por exemplo *note
     PYTHONPATH: 1053. e *note PYTHONHOME: 3bc, que podem estar
     definidas.

     Definida pelas opções *note -E: 964. e *note -I: 965.

     Descontinuado desde a versão 3.12, será removido na versão 3.14.

 -- C Variável: int Py_InspectFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.inspect: 3cf. deve ser usada em seu
     lugar, consulte *note Configuração de inicialização do Python: 3a7.

     Quando um script é passado como primeiro argumento ou a opção *note
     -c: 5e0. é usada, entre no modo interativo após executar o script
     ou o comando, mesmo quando *note sys.stdin: 53d. não parece ser um
     terminal.

     Definida pela opção *note -i: 1523. e pela variável de ambiente
     *note PYTHONINSPECT: 1522.

     Descontinuado desde a versão 3.12, será removido na versão 3.14.

 -- C Variável: int Py_InteractiveFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.interactive: 3cd. deve ser usada em seu
     lugar, consulte *note Configuração de inicialização do Python: 3a7.

     Definida pela opção *note -i: 1523.

     Descontinuado desde a versão 3.12, será removido na versão 3.15.

 -- C Variável: int Py_IsolatedFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.isolated: 3e4. deve ser usada em seu
     lugar, consulte *note Configuração de inicialização do Python: 3a7.

     Executa o Python no modo isolado.  No modo isolado, *note sys.path:
     3b4. não contém nem o diretório do script nem o diretório de
     pacotes de sites do usuário.

     Definida pela opção *note -I: 965.

     Adicionado na versão 3.4.

     Descontinuado desde a versão 3.12, será removido na versão 3.14.

 -- C Variável: int Py_LegacyWindowsFSEncodingFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyPreConfig.legacy_windows_fs_encoding: 3e6.
     deve ser usada em seu lugar, consulte *note Configuração de
     inicialização do Python: 3a7.

     Se o sinalizador for diferente de zero, use a codificação ‘mbcs’
     com o tratador de erros ‘replace’, em vez da codificação UTF-8 com
     o tratador de erros ‘surrogatepass’, para a codificação do sistema
     de arquivos e *note tratador de erros e codificação do sistema de
     arquivos: 53b.

     Definida como ‘1’ se a variável de ambiente *note
     PYTHONLEGACYWINDOWSFSENCODING: 2af. estiver definida como uma
     string não vazia.

     Veja PEP 529(1) para mais detalhes.

     *note Disponibilidade: 1ed8.: Windows.

     Descontinuado desde a versão 3.12, será removido na versão 3.14.

 -- C Variável: int Py_LegacyWindowsStdioFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.legacy_windows_stdio: 3a4. deve ser
     usada em seu lugar, consulte *note Configuração de inicialização do
     Python: 3a7.

     Se o sinalizador for diferente de zero, usa *note io.FileIO: 1354.
     em vez de ‘io._WindowsConsoleIO’ para fluxos padrão *note sys: d9.

     Definida como ‘1’ se a variável de ambiente *note
     PYTHONLEGACYWINDOWSSTDIO: c76. estiver definida como uma string não
     vazia.

     Veja a PEP 528(2) para mais detalhes.

     *note Disponibilidade: 1ed8.: Windows.

     Descontinuado desde a versão 3.12, será removido na versão 3.14.

 -- C Variável: int Py_NoSiteFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.site_import: 3d3. deve ser usada em seu
     lugar, consulte *note Configuração de inicialização do Python: 3a7.

     Desabilita a importação do módulo *note site: c7. e as manipulações
     dependentes do site de *note sys.path: 3b4. que isso acarreta.
     Também desabilita essas manipulações se *note site: c7. for
     explicitamente importado mais tarde (chame *note site.main(): 1ebe.
     se você quiser que eles sejam acionados).

     Definida pela opção *note -S: 11e7.

     Descontinuado desde a versão 3.12, será removido na versão 3.14.

 -- C Variável: int Py_NoUserSiteDirectory

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.user_site_directory: 3dd. deve ser
     usada em seu lugar, consulte *note Configuração de inicialização do
     Python: 3a7.

     Não adiciona o ‘diretório site-packages de usuário’ a *note
     sys.path: 3b4.

     Definida pelas opções *note -s: 13d5. e *note -I: 965, e pela
     variável de ambiente *note PYTHONNOUSERSITE: 13d6.

     Descontinuado desde a versão 3.12, será removido na versão 3.14.

 -- C Variável: int Py_OptimizeFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.optimization_level: 3d1. deve ser usada
     em seu lugar, consulte *note Configuração de inicialização do
     Python: 3a7.

     Definida pela opção *note -O: ddd. e pela variável de ambiente
     *note PYTHONOPTIMIZE: 1ebd.

     Descontinuado desde a versão 3.12, será removido na versão 3.14.

 -- C Variável: int Py_QuietFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.quiet: 3cb. deve ser usada em seu
     lugar, consulte *note Configuração de inicialização do Python: 3a7.

     Não exibe as mensagens de direitos autorais e de versão nem mesmo
     no modo interativo.

     Definida pela opção *note -q: 15a5.

     Adicionado na versão 3.2.

     Descontinuado desde a versão 3.12, será removido na versão 3.14.

 -- C Variável: int Py_UnbufferedStdioFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.buffered_stdio: 3df. deve ser usada em
     seu lugar, consulte *note Configuração de inicialização do Python:
     3a7.

     Força os fluxos stdout e stderr a não serem armazenados em buffer.

     Definida pela opção *note -u: 1b1c. e pela variável de ambiente
     *note PYTHONUNBUFFERED: 1b1d.

     Descontinuado desde a versão 3.12, será removido na versão 3.14.

 -- C Variável: int Py_VerboseFlag

     Esta API é mantida para compatibilidade com versões anteriores: a
     configuração *note PyConfig.verbose: 3c9. deve ser usada em seu
     lugar, consulte *note Configuração de inicialização do Python: 3a7.

     Exibe uma mensagem cada vez que um módulo é inicializado, mostrando
     o local (nome do arquivo ou módulo embutido) de onde ele é
     carregado.  Se maior ou igual a ‘2’, exibe uma mensagem para cada
     arquivo que é verificado durante a busca por um módulo.  Também
     fornece informações sobre a limpeza do módulo na saída.

     Definida pela a opção *note -v: 146c. e a variável de ambiente
     *note PYTHONVERBOSE: 1ebf.

     Descontinuado desde a versão 3.12, será removido na versão 3.14.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0529/

   (2) https://peps.python.org/pep-0528/


File: python.info,  Node: Inicializando e encerrando o interpretador,  Next: Parâmetros de todo o processo,  Prev: Variáveis de configuração global,  Up: Inicialização finalização e threads

7.9.3 Inicializando e encerrando o interpretador
------------------------------------------------

 -- C Função: void Py_Initialize ()
     ' Parte da *note ABI Estável: 553.'

     Inicializa o interpretador Python.  Em uma aplicação que incorpora
     o Python, isto deve ser chamado antes do uso de qualquer outra
     função do API C/Python; veja *note Antes da inicialização do
     Python: bde. para algumas exceções.

     Isso inicializa a tabela de módulos carregados (‘sys.modules’) e
     cria os módulos fundamentais *note builtins: 12, *note __main__: 1.
     e *note sys: d9.  Também inicializa o caminho de pesquisa de
     módulos (‘sys.path’).  Isso não define ‘sys.argv’; use a API da
     *note Configuração de inicialização do Python: 3a7. para isso.
     Isso é um no-op quando chamado pela segunda vez (sem chamar *note
     Py_FinalizeEx(): d37. primeiro).  Não há valor de retorno; é um
     erro fatal se a inicialização falhar.

     Usa *note Py_InitializeFromConfig(): 3c5. para personalizar a *note
     Configuração de inicialização do Python: 3a7.

          Nota: No Windows, altera o modo do console de ‘O_TEXT’ para
          ‘O_BINARY’, o que também afetará usos não Python do console
          usando o Runtime C.

 -- C Função: void Py_InitializeEx (int initsigs)
     ' Parte da *note ABI Estável: 553.'  Esta função funciona como
     *note Py_Initialize(): 8b1. se 'initsigs' for ‘1’.  Se 'initsigs'
     for ‘0’, ela pula o registro de inicialização de manipuladores de
     sinal, o que pode ser útil quando o CPython é incorporado como
     parte de uma aplicação maior.

     Usa *note Py_InitializeFromConfig(): 3c5. para personalizar a *note
     Configuração de inicialização do Python: 3a7.

 -- C Função: *note PyStatus: 9b5. Py_InitializeFromConfig (const
          PyConfig *config)

     Inicializa o Python a partir da configuração 'config', conforme
     descrito em *note Initialization with PyConfig: 518c.

     Consulte a seção *note Configuração de inicialização do Python:
     3a7. para obter detalhes sobre como pré-inicializar o
     interpretador, preencher a estrutura de configuração do tempo de
     execução e consultar a estrutura de status retornada.

 -- C Função: int Py_IsInitialized ()
     ' Parte da *note ABI Estável: 553.'  Retorna verdadeiro (diferente
     de zero) quando o interpretador Python foi inicializado, falso
     (zero) se não.  Após *note Py_FinalizeEx(): d37. ser chamado, isso
     retorna falso até que *note Py_Initialize(): 8b1. seja chamado
     novamente.

 -- C Função: int Py_IsFinalizing ()
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Retorna
     verdadeiro (diferente de zero) se o interpretador Python principal
     estiver em *note desligamento: 14e.  Retorna falso (zero) caso
     contrário.

     Adicionado na versão 3.13.

 -- C Função: int Py_FinalizeEx ()
     ' Parte da *note ABI Estável: 553. desde a versão 3.6.'  Undo all
     initializations made by *note Py_Initialize(): 8b1. and subsequent
     use of Python/C API functions, and destroy all sub-interpreters
     (see *note Py_NewInterpreter(): 18b9. below) that were created and
     not yet destroyed since the last call to *note Py_Initialize():
     8b1.  Ideally, this frees all memory allocated by the Python
     interpreter.  This is a no-op when called for a second time
     (without calling *note Py_Initialize(): 8b1. again first).

     Como isso é o inverso de *note Py_Initialize(): 8b1, ele deve ser
     chamado na mesma thread com o mesmo interpretador ativo.  Isso
     significa a thread principal e o interpretador principal.  Isso
     nunca deve ser chamado enquanto *note Py_RunMain(): 9cd. estiver em
     execução.

     Normalmente, o valor de retorno é ‘0’.  Se houver erros durante a
     finalização (limpeza de dados armazenados em buffer), ‘-1’ será
     retornado.

     Esta função é fornecida por vários motivos.  Uma aplicação de
     incorporação pode querer reiniciar o Python sem precisar reiniciar
     a própria aplicação.  Uma aplicação que carregou o interpretador
     Python de uma biblioteca carregável dinamicamente (ou DLL) pode
     querer liberar toda a memória alocada pelo Python antes de
     descarregar a DLL. Durante uma busca por vazamentos de memória em
     uma aplicação, um desenvolvedor pode querer liberar toda a memória
     alocada pelo Python antes de sair da aplicação.

     'Bugs and caveats:' The destruction of modules and objects in
     modules is done in random order; this may cause destructors (*note
     __del__(): 1033. methods) to fail when they depend on other objects
     (even functions) or modules.  Dynamically loaded extension modules
     loaded by Python are not unloaded.  Small amounts of memory
     allocated by the Python interpreter may not be freed (if you find a
     leak, please report it).  Memory tied up in circular references
     between objects is not freed.  Some memory allocated by extension
     modules may not be freed.  Some extensions may not work properly if
     their initialization routine is called more than once; this can
     happen if an application calls *note Py_Initialize(): 8b1. and
     *note Py_FinalizeEx(): d37. more than once.  *note Py_FinalizeEx():
     d37. must not be called recursively from within itself.  Therefore,
     it must not be called by any code that may be run as part of the
     interpreter shutdown process, such as *note atexit: c. handlers,
     object finalizers, or any code that may be run while flushing the
     stdout and stderr files.

     Levanta um *note evento de auditoria: 19fa.
     ‘cpython._PySys_ClearAuditHooks’ sem argumentos.

     Adicionado na versão 3.6.

 -- C Função: void Py_Finalize ()
     ' Parte da *note ABI Estável: 553.'  Esta é uma versão
     retrocompatível de *note Py_FinalizeEx(): d37. que desconsidera o
     valor de retorno.

 -- C Função: int Py_BytesMain (int argc, char **argv)
     ' Parte da *note ABI Estável: 553. desde a versão 3.8.'  Semelhante
     a *note Py_Main(): c3f, mas 'argv' é um vetor de strings de bytes,
     permitindo que a aplicação chamadora delegue a etapa de
     decodificação de texto ao ambiente de execução do CPython.

     Adicionado na versão 3.8.

 -- C Função: int Py_Main (int argc, wchar_t **argv)
     ' Parte da *note ABI Estável: 553.'  O programa principal para o
     interpretador padrão, encapsulando um ciclo completo de
     inicialização/finalização, bem como comportamento adicional para
     implementar a leitura de configurações do ambiente e da linha de
     comando e, em seguida, executar ‘__main__’ de acordo com a *note
     Linha de comando: 103d.

     Isso é disponibilizado para programas que desejam oferecer suporte
     à interface de linha de comando completa do CPython, em vez de
     apenas incorporar um ambiente de execução do Python em uma
     aplicação maior.

     Os parâmetros 'argc' e 'argv' são semelhantes aos passados para a
     função ‘main()’ de um programa C, exceto que as entradas 'argv' são
     primeiro convertidas para ‘wchar_t’ usando *note Py_DecodeLocale():
     be0.  Também é importante observar que as entradas da lista de
     argumentos podem ser modificadas para apontar para strings
     diferentes daquelas passadas (no entanto, o conteúdo das strings
     apontadas pela lista de argumentos não é modificado).

     O valor de retorno é ‘2’ se a lista de argumentos não representar
     uma linha de comando Python válida e, caso contrário, o mesmo que
     *note Py_RunMain(): 9cd.

     Em termos das APIs de configuração de tempo de execução do CPython
     documentadas na seção de *note configuração do ambiente de
     execução: 3a7. (e sem levar em conta o tratamento de erros),
     ‘Py_Main’ é aproximadamente equivalente a:

          PyConfig config;
          PyConfig_InitPythonConfig(&config);
          PyConfig_SetArgv(&config, argc, argv);
          Py_InitializeFromConfig(&config);
          PyConfig_Clear(&config);

          Py_RunMain();

     Em uso normal, uma aplicação de incorporação chamará esta função
     'em vez' de chamar *note Py_Initialize(): 8b1, *note
     Py_InitializeEx(): 4dca. ou *note Py_InitializeFromConfig(): 3c5.
     diretamente, e todas as configurações serão aplicadas conforme
     descrito em outra parte desta documentação.  Se esta função for
     chamada 'após' uma chamada anterior à API de inicialização do
     ambiente de execução, as configurações de ambiente e de linha de
     comando que serão atualizadas dependem da versão (pois dependem de
     quais configurações oferecem suporte corretamente à modificação
     após já terem sido definidas uma vez na primeira inicialização do
     ambiente de execução).

 -- C Função: int Py_RunMain (void)

     Executa o módulo principal em um ambiente de execução CPython
     totalmente configurado.

     Executa o comando (*note PyConfig.run_command: 518d.), o script
     (*note PyConfig.run_filename: 518e.) ou o módulo (*note
     PyConfig.run_module: 518f.) especificado na linha de comando ou na
     configuração.  Se nenhum desses valores estiver definido, executa o
     prompt interativo do Python (REPL) usando o espaço de nomes global
     do módulo ‘__main__’.

     Se *note PyConfig.inspect: 3cf. não estiver definido (o padrão), o
     valor de retorno será ‘0’ se o interpretador terminar normalmente
     (ou seja, sem levantar uma exceção), o status de saída de uma
     exceção *note SystemExit: d63. não tratada ou ‘1’ para qualquer
     outra exceção não tratada.

     Se *note PyConfig.inspect: 3cf. estiver definido (como quando a
     opção *note -i: 1523. é usada), em vez de retornar quando o
     interpretador for encerrado, a execução será retomada em um prompt
     interativo do Python (REPL) usando o espaço de nomes global do
     módulo ‘__main__’.  Se o interpretador for encerrado com uma
     exceção, ela será imediatamente levantada na sessão do REPL. O
     valor de retorno da função é então determinado pela forma como a
     'sessão do REPL' termina: ‘0’, ‘1’ ou o status de uma exceção *note
     SystemExit: d63, conforme especificado acima.

     Essa função sempre finaliza o interpretador Python antes de
     retornar.

     Consulte a *note Configuração do Python: 5190. para obter um
     exemplo de um Python personalizado que sempre é executado em modo
     isolado usando *note Py_RunMain(): 9cd.

 -- C Função: int PyUnstable_AtExit (PyInterpreterState *interp, void
          (*func)(void*), void *data)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Registra uma função de retorno de chamada *note atexit: c. para o
     interpretador de destino 'interp'.  Isso é semelhante a *note
     Py_AtExit(): 4dbf, mas recebe um interpretador explícito e um
     ponteiro de dados para a função de retorno de chamada.

     The *note GIL: 159. must be held for 'interp'.

     Adicionado na versão 3.13.


File: python.info,  Node: Parâmetros de todo o processo,  Next: Estado de thread e a trava global do interpretador,  Prev: Inicializando e encerrando o interpretador,  Up: Inicialização finalização e threads

7.9.4 Parâmetros de todo o processo
-----------------------------------

 -- C Função: void Py_SetProgramName (const wchar_t *name)
     ' Parte da *note ABI Estável: 553.'

     Esta API é mantida para compatibilidade com versões anteriores: em
     vez disso, deve-se usar a configuração *note PyConfig.program_name:
     3c4, consulte *note Configuração de inicialização do Python: 3a7.

     Esta função deve ser chamada antes de *note Py_Initialize(): 8b1.
     ser chamada pela primeira vez, caso seja solicitada.  Ela diz ao
     interpretador o valor do argumento ‘argv[0]’ para a função ‘main()’
     do programa (convertido em caracteres amplos).  Isto é utilizado
     por *note Py_GetPath(): 3b3. e algumas outras funções abaixo para
     encontrar as bibliotecas de tempo de execução relativas ao
     executável do interpretador.  O valor padrão é ‘'python'’.  O
     argumento deve apontar para um caractere string amplo terminado em
     zero no armazenamento estático, cujo conteúdo não mudará durante a
     execução do programa.  Nenhum código no interpretador Python mudará
     o conteúdo deste armazenamento.

     Use *note Py_DecodeLocale(): be0. para decodificar uma string de
     bytes e obter uma string wchar_t*.

     Descontinuado desde a versão 3.11.

 -- C Função: wchar_t *Py_GetProgramName ()
     ' Parte da *note ABI Estável: 553.'  Retorna o nome do programa
     definido com *note PyConfig.program_name: 3c4, ou o valor padrão.
     A string retornada aponta para um armazenamento estático; o
     chamador não deve modificar seu valor.

     Esta função não deve ser chamada antes de *note Py_Initialize():
     8b1, caso contrário ela retorna ‘NULL’.

     Alterado na versão 3.10: Agora retorna ‘NULL’ se for chamada antes
     de *note Py_Initialize(): 8b1.

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     Get *note sys.executable: 3b8. instead.

 -- C Função: wchar_t *Py_GetPrefix ()
     ' Parte da *note ABI Estável: 553.'  Retorna o 'prefix' para
     arquivos instalados que independem da plataforma.  Este prefixo é
     derivado de uma série de regras complexas a partir do nome do
     programa definido com *note PyConfig.program_name: 3c4. e algumas
     variáveis de ambiente; por exemplo, se o nome do programa for
     ‘'/usr/local/bin/python'’, o prefixo será ‘'/usr/local'’.  A string
     retornada aponta para um armazenamento estático; o chamador não
     deve modificar seu valor.  Isso corresponde à variável ‘prefix’ no
     arquivo ‘Makefile’ de nível superior e ao argumento *note -prefix:
     1ee7. do script ‘configure’ em tempo de construção.  O valor está
     disponível para o código Python como ‘sys.base_prefix’.  É útil
     apenas em sistemas Unix.  Veja também a próxima função.

     Esta função não deve ser chamada antes de *note Py_Initialize():
     8b1, caso contrário ela retorna ‘NULL’.

     Alterado na versão 3.10: Agora retorna ‘NULL’ se for chamada antes
     de *note Py_Initialize(): 8b1.

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     Get *note sys.base_prefix: 3ef. instead, or *note sys.prefix: 3b6.
     if *note virtual environments: 4557. need to be handled.

 -- C Função: wchar_t *Py_GetExecPrefix ()
     ' Parte da *note ABI Estável: 553.'  Retorna o 'exec-prefix' para
     arquivos instalados que 'dependem' da plataforma.  Este prefixo é
     derivado de uma série de regras complexas a partir do nome do
     programa definido com *note PyConfig.program_name: 3c4. e algumas
     variáveis de ambiente; por exemplo, se o nome do programa for
     ‘'/usr/local/bin/python'’, o exec-prefix será ‘'/usr/local'’.  A
     string retornada aponta para um armazenamento estático; o chamador
     não deve modificar seu valor.  Isso corresponde à variável
     ‘exec_prefix’ no arquivo ‘Makefile’ de nível superior e ao
     argumento ‘--exec-prefix’ do script ‘configure’ em tempo de
     construção.  O valor está disponível para o código Python como
     ‘sys.base_exec_prefix’.  É útil apenas em sistemas Unix.

     Contexto: O exec-prefix difere do prefixo padrão quando arquivos
     dependentes da plataforma (como executáveis e bibliotecas
     compartilhadas) são instalados em uma árvore de diretórios
     diferente.  Em uma instalação típica, arquivos dependentes da
     plataforma podem ser instalados na subárvore ‘/usr/local/plat’,
     enquanto arquivos independentes da plataforma podem ser instalados
     em ‘/usr/local’.

     De modo geral, uma plataforma é uma combinação de famílias de
     hardware e software.  Por exemplo, máquinas Sparc executando o
     sistema operacional Solaris 2.x são consideradas a mesma
     plataforma, mas máquinas Intel executando Solaris 2.x são outra
     plataforma, e máquinas Intel executando Linux são uma terceira.
     Diferentes revisões principais do mesmo sistema operacional
     geralmente também formam plataformas diferentes.  Sistemas
     operacionais não-Unix são um caso à parte; as estratégias de
     instalação nesses sistemas são tão diferentes que o prefixo e o
     prefixo de execução são irrelevantes e definidos como uma string
     vazia.  Observe que arquivos de bytecode Python compilados são
     independentes de plataforma (mas não independentes da versão do
     Python com a qual foram compilados!).

     Os administradores de sistema saberão como configurar os programas
     ‘mount’ ou ‘automount’ para compartilhar o arquivo ‘/usr/local’
     entre plataformas, mantendo o arquivo ‘/usr/local/plat’ como um
     sistema de arquivos diferente para cada plataforma.

     Esta função não deve ser chamada antes de *note Py_Initialize():
     8b1, caso contrário ela retorna ‘NULL’.

     Alterado na versão 3.10: Agora retorna ‘NULL’ se for chamada antes
     de *note Py_Initialize(): 8b1.

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     Get *note sys.base_exec_prefix: 3ee. instead, or *note
     sys.exec_prefix: 3b2. if *note virtual environments: 4557. need to
     be handled.

 -- C Função: wchar_t *Py_GetProgramFullPath ()
     ' Parte da *note ABI Estável: 553.'

     Retorna o nome completo do executável Python; este valor é
     calculado como um efeito colateral da obtenção do caminho de
     pesquisa de módulos padrão a partir do nome do programa (definido
     por *note PyConfig.program_name: 3c4.).  A string retornada aponta
     para um armazenamento estático; o chamador não deve modificar seu
     valor.  O valor está disponível para o código Python como
     ‘sys.executable’.

     Esta função não deve ser chamada antes de *note Py_Initialize():
     8b1, caso contrário ela retorna ‘NULL’.

     Alterado na versão 3.10: Agora retorna ‘NULL’ se for chamada antes
     de *note Py_Initialize(): 8b1.

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     Get *note sys.executable: 3b8. instead.

 -- C Função: wchar_t *Py_GetPath ()
     ' Parte da *note ABI Estável: 553.'

     Retorna o caminho de pesquisa de módulos padrão; este é calculado a
     partir do nome do programa (definido por *note
     PyConfig.program_name: 3c4.) e algumas variáveis de ambiente.  A
     string retornada consiste em uma série de nomes de diretórios
     separados por um caractere delimitador que depende da plataforma.
     O caractere delimitador é ‘':'’ no Unix e macOS, e ‘';'’ no
     Windows.  A string retornada aponta para um armazenamento estático;
     o chamador não deve modificar seu valor.  A lista *note sys.path:
     3b4. é inicializada com este valor na inicialização do
     interpretador; ela pode ser (e geralmente é) modificada
     posteriormente para alterar o caminho de pesquisa para carregamento
     de módulos.

     Esta função não deve ser chamada antes de *note Py_Initialize():
     8b1, caso contrário ela retorna ‘NULL’.

     Alterado na versão 3.10: Agora retorna ‘NULL’ se for chamada antes
     de *note Py_Initialize(): 8b1.

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     Get *note sys.path: 3b4. instead.

 -- C Função: const char *Py_GetVersion ()
     ' Parte da *note ABI Estável: 553.'  Retorna a verão deste
     interpretador Python.  Esta é uma string que se parece com

          "3.0a5+ (py3k:63103M, May 12 2008, 00:53:55) \n[GCC 4.2.3]"

     A primeira palavra (até o primeiro espaço em branco) representa a
     versão atual do Python; os primeiros caracteres indicam a versão
     principal e a versão secundária, separados por um ponto.  A string
     retornada aponta para um armazenamento estático; o chamador não
     deve modificar seu valor.  O valor fica disponível para o código
     Python como *note sys.version: 178.

     Veja também a constante *note Py_Version: 756.

 -- C Função: const char *Py_GetPlatform ()
     ' Parte da *note ABI Estável: 553.'

     Retorna o identificador da plataforma atual.  No Unix, este
     identificador é formado pelo nome “oficial” do sistema operacional,
     convertido para minúsculas, seguido pelo número da revisão
     principal; por exemplo, para Solaris 2.x, também conhecido como
     SunOS 5.x, o valor é ‘'sunos5'’.  No macOS, é ‘'darwin'’.  No
     Windows, é ‘'win'’.  A string retornada aponta para um
     armazenamento estático; o chamador não deve modificar seu valor.  O
     valor está disponível para o código Python como ‘sys.platform’.

 -- C Função: const char *Py_GetCopyright ()
     ' Parte da *note ABI Estável: 553.'  Retorna a string oficial de
     direitos autoriais para a versão atual do Python, por exemplo

     ‘'Copyright 1991-1995 Stichting Mathematisch Centrum, Amsterdam'’

     A string retornada aponta para o armazenamento estático; o chamador
     não deve modificar o seu valor.  O valor está disponível para o
     código Python como ‘sys.copyright’.

 -- C Função: const char *Py_GetCompiler ()
     ' Parte da *note ABI Estável: 553.'  Retorna uma indicação do
     compilador usado para construir a atual versão do Python, em
     colchetes, por exemplo:

          "[GCC 2.7.2.2]"

     A string retornada aponta para o armazenamento estático; o chamador
     não deve modificar o seu valor.  O valor está disponível para o
     código Python como ‘sys.version’.

 -- C Função: const char *Py_GetBuildInfo ()
     ' Parte da *note ABI Estável: 553.'  Retorna informação sobre o
     número de sequência e a data e hora da construção da instância
     atual do interpretador Python, por exemplo

          "#67, Aug  1 1997, 22:34:28"

     A string retornada aponta para o armazenamento estático; o chamador
     não deve modificar o seu valor.  O valor está disponível para o
     código Python como ‘sys.version’.

 -- C Função: void PySys_SetArgvEx (int argc, wchar_t **argv, int
          updatepath)
     ' Parte da *note ABI Estável: 553.'

     Esta API é mantida para compatibilidade com versões anteriores: em
     vez disso, deve-se usar a configuração *note PyConfig.argv: 3c3,
     *note PyConfig.parse_argv: 1a7e. e *note PyConfig.safe_path: 773,
     consulte *note Configuração de inicialização do Python: 3a7.

     Define *note sys.argv: 12a6. com base em 'argc' e 'argv'.  Esses
     parâmetros são semelhantes aos passados para a função ‘main()’ do
     programa, com a diferença de que a primeira entrada deve se referir
     ao arquivo de script a ser executado, em vez do executável que
     hospeda o interpretador Python.  Se não houver um script a ser
     executado, a primeira entrada em 'argv' pode ser uma string vazia.
     Se esta função falhar ao inicializar *note sys.argv: 12a6, uma
     condição fatal será sinalizada usando *note Py_FatalError(): 98a.

     Se 'updatepath' é zero, isto é tudo o que a função faz.  Se
     'updatepath' não é zero, a função também modifica *note sys.path:
     3b4. de acordo com o seguinte algoritmo:

        - Se o nome de um script existente for passado em ‘argv[0]’, o
          caminho absoluto do diretório onde o script está localizado
          será adicionado a *note sys.path: 3b4.

        - Caso contrário (isto é, se 'argc' for ‘0’ ou ‘argv[0]’ não
          apontar para um nome de arquivo existente), uma string vazia é
          adicionada ao início de *note sys.path: 3b4, o que é o mesmo
          que adicionar o diretório de trabalho atual (‘"."’).

     Use *note Py_DecodeLocale(): be0. para decodificar uma string de
     bytes e obter uma string wchar_t*.

     Veja também os membros *note PyConfig.orig_argv: 898. e *note
     PyConfig.argv: 3c3. da *note Configuração de inicialização do
     Python: 3a7.

          Nota: Recomenda-se que aplicações que incorporam o
          interpretador Python para fins que não sejam a execução de um
          único script passem ‘0’ como 'updatepath', e atualizem *note
          sys.path: 3b4. por conta própria, se desejarem.  Veja CVE
          2008-5983(1).

          Em versões anteriores à 3.1.3, você pode obter o mesmo efeito
          removendo manualmente o primeiro elemento de *note sys.path:
          3b4. após ter chamado *note PySys_SetArgv(): 172e, por
          exemplo, usando:

               PyRun_SimpleString("import sys; sys.path.pop(0)\n");

     Adicionado na versão 3.1.3.

     Descontinuado desde a versão 3.11.

 -- C Função: void PySys_SetArgv (int argc, wchar_t **argv)
     ' Parte da *note ABI Estável: 553.'  Esta API é mantida para
     retrocompatibilidade: em vez disso, devem ser usadas as
     configurações *note PyConfig.argv: 3c3. e *note
     PyConfig.parse_argv: 1a7e, consulte a *note Configuração de
     inicialização do Python: 3a7.

     Esta função funciona como *note PySys_SetArgvEx(): 172d. com
     'updatepath' definido como ‘1’ a menos que o interpretador ‘python’
     tenha sido iniciado com a *note -I: 965.

     Use *note Py_DecodeLocale(): be0. para decodificar uma string de
     bytes e obter uma string wchar_t*.

     Veja também os membros *note PyConfig.orig_argv: 898. e *note
     PyConfig.argv: 3c3. da *note Configuração de inicialização do
     Python: 3a7.

     Alterado na versão 3.4: O valor 'updatepath' depende de *note -I:
     965.

     Descontinuado desde a versão 3.11.

 -- C Função: void Py_SetPythonHome (const wchar_t *home)
     ' Parte da *note ABI Estável: 553.'  Esta API é mantida para
     retrocompatibilidade: em vez disso, deve-se usar a configuração
     *note PyConfig.home: 3bb, consulte a *note Configuração de
     inicialização do Python: 3a7.

     Define o diretório pessoal (“home”) padrão, ou seja, o local das
     bibliotecas padrão do Python.  Consulte *note PYTHONHOME: 3bc. para
     obter o significado da string do argumento.

     O argumento deve apontar para uma string terminada em zero em um
     armazenamento estático, cujo conteúdo não será alterado durante a
     execução do programa.  Nenhum código no interpretador Python
     alterará o conteúdo desse armazenamento.

     Use *note Py_DecodeLocale(): be0. para decodificar uma string de
     bytes e obter uma string wchar_t*.

     Descontinuado desde a versão 3.11.

 -- C Função: wchar_t *Py_GetPythonHome ()
     ' Parte da *note ABI Estável: 553.'  Retorna o “home” padrão, ou
     seja, o valor definido por *note PyConfig.home: 3bb, ou o valor da
     variável de ambiente *note PYTHONHOME: 3bc. se estiver definida.

     Esta função não deve ser chamada antes de *note Py_Initialize():
     8b1, caso contrário ela retorna ‘NULL’.

     Alterado na versão 3.10: Agora retorna ‘NULL’ se for chamada antes
     de *note Py_Initialize(): 8b1.

     Descontinuado desde a versão 3.13, será removido na versão 3.15:
     Get *note PyConfig.home: 3bb. or *note PYTHONHOME: 3bc. environment
     variable instead.

   ---------- Footnotes ----------

   (1) https://www.cve.org/CVERecord?id=CVE-2008-5983


File: python.info,  Node: Estado de thread e a trava global do interpretador,  Next: Sub-interpreter support,  Prev: Parâmetros de todo o processo,  Up: Inicialização finalização e threads

7.9.5 Estado de thread e a trava global do interpretador
--------------------------------------------------------

The Python interpreter is not fully thread-safe.  In order to support
multi-threaded Python programs, there’s a global lock, called the *note
global interpreter lock: 148. or *note GIL: 159, that must be held by
the current thread before it can safely access Python objects.  Without
the lock, even the simplest operations could cause problems in a
multi-threaded program: for example, when two threads simultaneously
increment the reference count of the same object, the reference count
could end up being incremented only once instead of twice.

Portanto, existe a regra de que somente a thread que adquiriu a *note
GIL: 159. pode operar em objetos Python ou chamar funções da API
C/Python.  Para emular a simultaneidade de execução, o interpretador
tenta alternar threads regularmente (consulte *note
sys.setswitchinterval(): 951.).  A trava também é liberada em operações
de E/S potencialmente bloqueantes, como ler ou escrever um arquivo, para
que outras threads Python possam ser executadas enquanto isso.

The Python interpreter keeps some thread-specific bookkeeping
information inside a data structure called *note PyThreadState: 78d.
There’s also one global variable pointing to the current *note
PyThreadState: 78d.: it can be retrieved using *note
PyThreadState_Get(): 372.

* Menu:

* Releasing the GIL from extension code::
* Threads não-Python criadas::
* Cuidados com o uso de fork(): Cuidados com o uso de fork.
* Cautions regarding runtime finalization::
* High-level API::
* Low-level API::


File: python.info,  Node: Releasing the GIL from extension code,  Next: Threads não-Python criadas,  Up: Estado de thread e a trava global do interpretador

7.9.5.1 Releasing the GIL from extension code
.............................................

A maioria dos códigos de extensão que manipulam a *note GIL: 159. tem a
seguinte estrutura:

     Save the thread state in a local variable.
     Release the global interpreter lock.
     ... Do some blocking I/O operation ...
     Reacquire the global interpreter lock.
     Restore the thread state from the local variable.

Isso é tão comum que existe um par de macros para simplificá-lo:

     Py_BEGIN_ALLOW_THREADS
     ... Faça alguma operação de E/S com bloqueio...
     Py_END_ALLOW_THREADS

A macro *note Py_BEGIN_ALLOW_THREADS: 4b67. abre um novo bloco e declara
uma variável local oculta; a macro *note Py_END_ALLOW_THREADS: a98.
fecha o bloco.

O bloco acima se expande para o seguinte código:

     PyThreadState *_save;

     _save = PyEval_SaveThread();
     ... Faça alguma operação de E/S com bloqueio...
     PyEval_RestoreThread(_save);

Here is how these functions work: the global interpreter lock is used to
protect the pointer to the current thread state.  When releasing the
lock and saving the thread state, the current thread state pointer must
be retrieved before the lock is released (since another thread could
immediately acquire the lock and store its own thread state in the
global variable).  Conversely, when acquiring the lock and restoring the
thread state, the lock must be acquired before storing the thread state
pointer.

     Nota: Calling system I/O functions is the most common use case for
     releasing the GIL, but it can also be useful before calling
     long-running computations which don’t need access to Python
     objects, such as compression or cryptographic functions operating
     over memory buffers.  For example, the standard *note zlib: 133.
     and *note hashlib: 68. modules release the GIL when compressing or
     hashing data.


File: python.info,  Node: Threads não-Python criadas,  Next: Cuidados com o uso de fork,  Prev: Releasing the GIL from extension code,  Up: Estado de thread e a trava global do interpretador

7.9.5.2 Threads não-Python criadas
..................................

When threads are created using the dedicated Python APIs (such as the
*note threading: ed. module), a thread state is automatically associated
to them and the code showed above is therefore correct.  However, when
threads are created from C (for example by a third-party library with
its own thread management), they don’t hold the GIL, nor is there a
thread state structure for them.

If you need to call Python code from these threads (often this will be
part of a callback API provided by the aforementioned third-party
library), you must first register these threads with the interpreter by
creating a thread state data structure, then acquiring the GIL, and
finally storing their thread state pointer, before you can start using
the Python/C API. When you are done, you should reset the thread state
pointer, release the GIL, and finally free the thread state data
structure.

As funções *note PyGILState_Ensure(): 3ab. e *note PyGILState_Release():
3ac. fazem tudo isso automaticamente.  O padrão típico para chamar o
Python a partir de uma thread C é:

     PyGILState_STATE gstate;
     gstate = PyGILState_Ensure();

     /* Executa ações do Python aqui. */
     result = ChamaAlgumaFunção();
     /* avalia resultado ou trata de exceção */

     /* Libera a thread. Na API do Python permitida além deste ponto. */
     PyGILState_Release(gstate);

Note that the ‘PyGILState_*’ functions assume there is only one global
interpreter (created automatically by *note Py_Initialize(): 8b1.).
Python supports the creation of additional interpreters (using *note
Py_NewInterpreter(): 18b9.), but mixing multiple interpreters and the
‘PyGILState_*’ API is unsupported.


File: python.info,  Node: Cuidados com o uso de fork,  Next: Cautions regarding runtime finalization,  Prev: Threads não-Python criadas,  Up: Estado de thread e a trava global do interpretador

7.9.5.3 Cuidados com o uso de fork()
....................................

Outro aspecto importante a observar sobre threads é o seu comportamento
diante da chamada de ‘fork()’ da linguagem C. Na maioria dos sistemas
com ‘fork()’, após um processo ser criado (“fork”), apenas a thread que
emitiu o fork continuará existindo.  Isso tem um impacto concreto tanto
na forma como as travas devem ser gerenciados quanto em todo o estado
armazenado no ambiente de execução do CPython.

The fact that only the “current” thread remains means any locks held by
other threads will never be released.  Python solves this for *note
os.fork(): 197. by acquiring the locks it uses internally before the
fork, and releasing them afterwards.  In addition, it resets any *note
Lock objects: 3304. in the child.  When extending or embedding Python,
there is no way to inform Python of additional (non-Python) locks that
need to be acquired before or reset after a fork.  OS facilities such as
‘pthread_atfork()’ would need to be used to accomplish the same thing.
Additionally, when extending or embedding Python, calling ‘fork()’
directly rather than through *note os.fork(): 197. (and returning to or
calling into Python) may result in a deadlock by one of Python’s
internal locks being held by a thread that is defunct after the fork.
*note PyOS_AfterFork_Child(): 3fb. tries to reset the necessary locks,
but is not always able to.

The fact that all other threads go away also means that CPython’s
runtime state there must be cleaned up properly, which *note os.fork():
197. does.  This means finalizing all other *note PyThreadState: 78d.
objects belonging to the current interpreter and all other *note
PyInterpreterState: 8c2. objects.  Due to this and the special nature of
the *note “main” interpreter: 587, ‘fork()’ should only be called in
that interpreter’s “main” thread, where the CPython global runtime was
originally initialized.  The only exception is if ‘exec()’ will be
called immediately after.


File: python.info,  Node: Cautions regarding runtime finalization,  Next: High-level API,  Prev: Cuidados com o uso de fork,  Up: Estado de thread e a trava global do interpretador

7.9.5.4 Cautions regarding runtime finalization
...............................................

In the late stage of *note interpreter shutdown: 14e, after attempting
to wait for non-daemon threads to exit (though this can be interrupted
by *note KeyboardInterrupt: 9d9.) and running the *note atexit: c.
functions, the runtime is marked as 'finalizing': *note
Py_IsFinalizing(): 358. and *note sys.is_finalizing(): a99. return true.
At this point, only the 'finalization thread' that initiated
finalization (typically the main thread) is allowed to acquire the *note
GIL: 159.

If any thread, other than the finalization thread, attempts to acquire
the GIL during finalization, either explicitly via *note
PyGILState_Ensure(): 3ab, *note Py_END_ALLOW_THREADS: a98, *note
PyEval_AcquireThread(): 3aa, or ‘PyEval_AcquireLock()’, or implicitly
when the interpreter attempts to reacquire it after having yielded it,
the thread enters 'a permanently blocked state' where it remains until
the program exits.  In most cases this is harmless, but this can result
in deadlock if a later stage of finalization attempts to acquire a lock
owned by the blocked thread, or otherwise waits on the blocked thread.

Gross?  Yes.  This prevents random crashes and/or unexpectedly skipped
C++ finalizations further up the call stack when such threads were
forcibly exited here in CPython 3.13.7 and earlier.  The CPython runtime
GIL acquiring C APIs have never had any error reporting or handling
expectations at GIL acquisition time that would’ve allowed for graceful
exit from this situation.  Changing that would require new stable C APIs
and rewriting the majority of C code in the CPython ecosystem to use
those with error handling.


File: python.info,  Node: High-level API,  Next: Low-level API,  Prev: Cautions regarding runtime finalization,  Up: Estado de thread e a trava global do interpretador

7.9.5.5 High-level API
......................

Estes são os tipos e as funções mais comumente usados na escrita de um
código de extensão em C, ou ao incorporar o interpretador Python:

 -- C Tipo: type PyInterpreterState
     ' Parte da *note API Limitada: 553. (como uma estrutura opaca).'
     This data structure represents the state shared by a number of
     cooperating threads.  Threads belonging to the same interpreter
     share their module administration and a few other internal items.
     There are no public members in this structure.

     Threads belonging to different interpreters initially share
     nothing, except process state like available memory, open file
     descriptors and such.  The global interpreter lock is also shared
     by all threads, regardless of to which interpreter they belong.

     Alterado na versão 3.12: PEP 684(1) introduced the possibility of a
     *note per-interpreter GIL: 519b.  See *note
     Py_NewInterpreterFromConfig(): 45c.

 -- C Tipo: type PyThreadState
     ' Parte da *note API Limitada: 553. (como uma estrutura opaca).'
     This data structure represents the state of a single thread.  The
     only public data member is:

      -- C Membro: *note PyInterpreterState: 8c2. *interp

          This thread’s interpreter state.

 -- C Função: void PyEval_InitThreads ()
     ' Parte da *note ABI Estável: 553.'

     Função descontinuada que não faz nada.

     In Python 3.6 and older, this function created the GIL if it didn’t
     exist.

     Alterado na versão 3.9: The function now does nothing.

     Alterado na versão 3.7: Esta função agora é chamada por *note
     Py_Initialize(): 8b1, então não há mais necessidade de você
     chamá-la.

     Alterado na versão 3.2: Esta função não pode mais ser chamada antes
     de *note Py_Initialize(): 8b1.

     Descontinuado desde a versão 3.9.

 -- C Função: *note PyThreadState: 78d. *PyEval_SaveThread ()
     ' Parte da *note ABI Estável: 553.'  Release the global interpreter
     lock (if it has been created) and reset the thread state to ‘NULL’,
     returning the previous thread state (which is not ‘NULL’).  If the
     lock has been created, the current thread must have acquired it.

 -- C Função: void PyEval_RestoreThread (PyThreadState *tstate)
     ' Parte da *note ABI Estável: 553.'  Acquire the global interpreter
     lock (if it has been created) and set the thread state to 'tstate',
     which must not be ‘NULL’.  If the lock has been created, the
     current thread must not have acquired it, otherwise deadlock
     ensues.

          Nota: Calling this function from a thread when the runtime is
          finalizing will hang the thread until the program exits, even
          if the thread was not created by Python.  Refer to *note
          Cautions regarding runtime finalization: 5198. for more
          details.

     Alterado na versão 3.13.8: Hangs the current thread, rather than
     terminating it, if called while the interpreter is finalizing.

 -- C Função: *note PyThreadState: 78d. *PyThreadState_Get ()
     ' Parte da *note ABI Estável: 553.'  Return the current thread
     state.  The global interpreter lock must be held.  When the current
     thread state is ‘NULL’, this issues a fatal error (so that the
     caller needn’t check for ‘NULL’).

     See also *note PyThreadState_GetUnchecked(): 371.

 -- C Função: *note PyThreadState: 78d. *PyThreadState_GetUnchecked ()

     Similar to *note PyThreadState_Get(): 372, but don’t kill the
     process with a fatal error if it is NULL. The caller is responsible
     to check if the result is NULL.

     Adicionado na versão 3.13: In Python 3.5 to 3.12, the function was
     private and known as ‘_PyThreadState_UncheckedGet()’.

 -- C Função: *note PyThreadState: 78d. *PyThreadState_Swap
          (PyThreadState *tstate)
     ' Parte da *note ABI Estável: 553.'  Swap the current thread state
     with the thread state given by the argument 'tstate', which may be
     ‘NULL’.

     The *note GIL: 159. does not need to be held, but will be held upon
     returning if 'tstate' is non-‘NULL’.

The following functions use thread-local storage, and are not compatible
with sub-interpreters:

 -- C Tipo: type PyGILState_STATE
     ' Parte da *note ABI Estável: 553.'  The type of the value returned
     by *note PyGILState_Ensure(): 3ab. and passed to *note
     PyGILState_Release(): 3ac.

      -- C Enumerador: enumerator PyGILState_LOCKED

          The GIL was already held when *note PyGILState_Ensure(): 3ab.
          was called.

      -- C Enumerador: enumerator PyGILState_UNLOCKED

          The GIL was not held when *note PyGILState_Ensure(): 3ab. was
          called.

 -- C Função: *note PyGILState_STATE: 4cc7. PyGILState_Ensure ()
     ' Parte da *note ABI Estável: 553.'  Certifique-se de que a thread
     atual esteja pronta para chamar a API Python C, independentemente
     do estado atual do Python ou da trava global do interpretador
     (GIL).  Isso pode ser chamado quantas vezes desejar por uma thread,
     desde que cada chamada corresponda a uma chamada para *note
     PyGILState_Release(): 3ac.  Em geral, outras APIs relacionadas a
     threads podem ser usadas entre chamadas *note PyGILState_Ensure():
     3ab. e *note PyGILState_Release(): 3ac. desde que o estado da
     thread seja restaurado ao seu estado anterior antes de Release().
     Por exemplo, o uso normal das macros *note Py_BEGIN_ALLOW_THREADS:
     4b67. e *note Py_END_ALLOW_THREADS: a98. é aceitável.

     The return value is an opaque “handle” to the thread state when
     *note PyGILState_Ensure(): 3ab. was called, and must be passed to
     *note PyGILState_Release(): 3ac. to ensure Python is left in the
     same state.  Even though recursive calls are allowed, these handles
     'cannot' be shared - each unique call to *note PyGILState_Ensure():
     3ab. must save the handle for its call to *note
     PyGILState_Release(): 3ac.

     When the function returns, the current thread will hold the GIL and
     be able to call arbitrary Python code.  Failure is a fatal error.

          Nota: Calling this function from a thread when the runtime is
          finalizing will hang the thread until the program exits, even
          if the thread was not created by Python.  Refer to *note
          Cautions regarding runtime finalization: 5198. for more
          details.

     Alterado na versão 3.13.8: Hangs the current thread, rather than
     terminating it, if called while the interpreter is finalizing.

 -- C Função: void PyGILState_Release (PyGILState_STATE)
     ' Parte da *note ABI Estável: 553.'  Release any resources
     previously acquired.  After this call, Python’s state will be the
     same as it was prior to the corresponding *note
     PyGILState_Ensure(): 3ab. call (but generally this state will be
     unknown to the caller, hence the use of the GILState API).

     Every call to *note PyGILState_Ensure(): 3ab. must be matched by a
     call to *note PyGILState_Release(): 3ac. on the same thread.

 -- C Função: *note PyThreadState: 78d. *PyGILState_GetThisThreadState
          ()
     ' Parte da *note ABI Estável: 553.'  Get the current thread state
     for this thread.  May return ‘NULL’ if no GILState API has been
     used on the current thread.  Note that the main thread always has
     such a thread-state, even if no auto-thread-state call has been
     made on the main thread.  This is mainly a helper/diagnostic
     function.

 -- C Função: int PyGILState_Check ()

     Return ‘1’ if the current thread is holding the GIL and ‘0’
     otherwise.  This function can be called from any thread at any
     time.  Only if it has had its Python thread state initialized and
     currently is holding the GIL will it return ‘1’.  This is mainly a
     helper/diagnostic function.  It can be useful for example in
     callback contexts or memory allocation functions when knowing that
     the GIL is locked can allow the caller to perform sensitive actions
     or otherwise behave differently.

     Adicionado na versão 3.4.

The following macros are normally used without a trailing semicolon;
look for example usage in the Python source distribution.

 -- C Macro: Py_BEGIN_ALLOW_THREADS
     ' Parte da *note ABI Estável: 553.'  Esta macro se expande para ‘{
     PyThreadState *_save; _save = PyEval_SaveThread();’.  Observe que
     ele contém uma chave de abertura; ele deve ser combinado com a
     seguinte macro *note Py_END_ALLOW_THREADS: a98.  Veja acima para
     uma discussão mais aprofundada desta macro.

 -- C Macro: Py_END_ALLOW_THREADS
     ' Parte da *note ABI Estável: 553.'  Esta macro se expande para
     ‘PyEval_RestoreThread(_save); }’.  Observe que ele contém uma chave
     de fechamento; ele deve ser combinado com uma macro *note
     Py_BEGIN_ALLOW_THREADS: 4b67. anterior.  Veja acima para uma
     discussão mais aprofundada desta macro.

 -- C Macro: Py_BLOCK_THREADS
     ' Parte da *note ABI Estável: 553.'  Esta macro se expande para
     ‘PyEval_RestoreThread(_save);’: é equivalente a *note
     Py_END_ALLOW_THREADS: a98. sem a chave de fechamento.

 -- C Macro: Py_UNBLOCK_THREADS
     ' Parte da *note ABI Estável: 553.'  Esta macro se expande para
     ‘_save = PyEval_SaveThread();’: é equivalente a *note
     Py_BEGIN_ALLOW_THREADS: 4b67. sem a chave de abertura e declaração
     de variável.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0684/


File: python.info,  Node: Low-level API,  Prev: High-level API,  Up: Estado de thread e a trava global do interpretador

7.9.5.6 Low-level API
.....................

All of the following functions must be called after *note
Py_Initialize(): 8b1.

Alterado na versão 3.7: *note Py_Initialize(): 8b1. now initializes the
*note GIL: 159.

 -- C Função: *note PyInterpreterState: 8c2. *PyInterpreterState_New ()
     ' Parte da *note ABI Estável: 553.'  Create a new interpreter state
     object.  The global interpreter lock need not be held, but may be
     held if it is necessary to serialize calls to this function.

     Levanta um *note evento de auditoria: 19fa.
     ‘cpython.PyInterpreterState_New’ sem argumentos.

 -- C Função: void PyInterpreterState_Clear (PyInterpreterState *interp)
     ' Parte da *note ABI Estável: 553.'  Reset all information in an
     interpreter state object.  The global interpreter lock must be
     held.

     Levanta um *note evento de auditoria: 19fa.
     ‘cpython.PyInterpreterState_Clear’ sem argumentos.

 -- C Função: void PyInterpreterState_Delete (PyInterpreterState
          *interp)
     ' Parte da *note ABI Estável: 553.'  Destroy an interpreter state
     object.  The global interpreter lock need not be held.  The
     interpreter state must have been reset with a previous call to
     *note PyInterpreterState_Clear(): 43ff.

 -- C Função: *note PyThreadState: 78d. *PyThreadState_New
          (PyInterpreterState *interp)
     ' Parte da *note ABI Estável: 553.'  Create a new thread state
     object belonging to the given interpreter object.  The global
     interpreter lock need not be held, but may be held if it is
     necessary to serialize calls to this function.

 -- C Função: void PyThreadState_Clear (PyThreadState *tstate)
     ' Parte da *note ABI Estável: 553.'  Reset all information in a
     thread state object.  The global interpreter lock must be held.

     Alterado na versão 3.9: This function now calls the
     ‘PyThreadState.on_delete’ callback.  Previously, that happened in
     *note PyThreadState_Delete(): 1b18.

     Alterado na versão 3.13: The ‘PyThreadState.on_delete’ callback was
     removed.

 -- C Função: void PyThreadState_Delete (PyThreadState *tstate)
     ' Parte da *note ABI Estável: 553.'  Destroy a thread state object.
     The global interpreter lock need not be held.  The thread state
     must have been reset with a previous call to *note
     PyThreadState_Clear(): 170b.

 -- C Função: void PyThreadState_DeleteCurrent (void)

     Destroy the current thread state and release the global interpreter
     lock.  Like *note PyThreadState_Delete(): 1b18, the global
     interpreter lock must be held.  The thread state must have been
     reset with a previous call to *note PyThreadState_Clear(): 170b.

 -- C Função: *note PyFrameObject: 789. *PyThreadState_GetFrame
          (PyThreadState *tstate)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Get the
     current frame of the Python thread state 'tstate'.

     Return a *note strong reference: 33d.  Return ‘NULL’ if no frame is
     currently executing.

     See also *note PyEval_GetFrame(): 18c1.

     'tstate' must not be ‘NULL’.

     Adicionado na versão 3.9.

 -- C Função: uint64_t PyThreadState_GetID (PyThreadState *tstate)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Get the
     unique thread state identifier of the Python thread state 'tstate'.

     'tstate' must not be ‘NULL’.

     Adicionado na versão 3.9.

 -- C Função: *note PyInterpreterState: 8c2.
          *PyThreadState_GetInterpreter (PyThreadState *tstate)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Get the
     interpreter of the Python thread state 'tstate'.

     'tstate' must not be ‘NULL’.

     Adicionado na versão 3.9.

 -- C Função: void PyThreadState_EnterTracing (PyThreadState *tstate)

     Suspend tracing and profiling in the Python thread state 'tstate'.

     Resume them using the *note PyThreadState_LeaveTracing(): 755.
     function.

     Adicionado na versão 3.11.

 -- C Função: void PyThreadState_LeaveTracing (PyThreadState *tstate)

     Resume tracing and profiling in the Python thread state 'tstate'
     suspended by the *note PyThreadState_EnterTracing(): 754. function.

     See also *note PyEval_SetTrace(): 421. and *note
     PyEval_SetProfile(): 1545. functions.

     Adicionado na versão 3.11.

 -- C Função: *note PyInterpreterState: 8c2. *PyInterpreterState_Get
          (void)
     ' Parte da *note ABI Estável: 553. desde a versão 3.9.'  Get the
     current interpreter.

     Issue a fatal error if there no current Python thread state or no
     current interpreter.  It cannot return NULL.

     The caller must hold the GIL.

     Adicionado na versão 3.9.

 -- C Função: int64_t PyInterpreterState_GetID (PyInterpreterState
          *interp)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Return the
     interpreter’s unique ID. If there was any error in doing so then
     ‘-1’ is returned and an error is set.

     The caller must hold the GIL.

     Adicionado na versão 3.7.

 -- C Função: *note PyObject: 339. *PyInterpreterState_GetDict
          (PyInterpreterState *interp)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553. desde a versão 3.8.'  Return a dictionary in which
     interpreter-specific data may be stored.  If this function returns
     ‘NULL’ then no exception has been raised and the caller should
     assume no interpreter-specific dict is available.

     This is not a replacement for *note PyModule_GetState(): 987, which
     extensions should use to store interpreter-specific state
     information.

     The returned dictionary is borrowed from the interpreter and is
     valid until interpreter shutdown.

     Adicionado na versão 3.8.

 -- C Função: *note PyObject: 339.
          *PyUnstable_InterpreterState_GetMainModule (PyInterpreterState
          *interp)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Return a *note strong reference: 33d. to the ‘__main__’ *note
     module object: 50b3. for the given interpreter.

     The caller must hold the GIL.

     Adicionado na versão 3.13.

 -- C Tipo: typedef *note PyObject: 339. *(*_PyFrameEvalFunction)(*note
          PyThreadState: 78d. *tstate, *note _PyInterpreterFrame: 510f.
          *frame, int throwflag)

     Type of a frame evaluation function.

     The 'throwflag' parameter is used by the ‘throw()’ method of
     generators: if non-zero, handle the current exception.

     Alterado na versão 3.9: The function now takes a 'tstate'
     parameter.

     Alterado na versão 3.11: The 'frame' parameter changed from
     ‘PyFrameObject*’ to ‘_PyInterpreterFrame*’.

 -- C Função: *note _PyFrameEvalFunction: 776.
          _PyInterpreterState_GetEvalFrameFunc (PyInterpreterState
          *interp)

     Get the frame evaluation function.

     See the PEP 523(1) “Adding a frame evaluation API to CPython”.

     Adicionado na versão 3.9.

 -- C Função: void _PyInterpreterState_SetEvalFrameFunc
          (PyInterpreterState *interp, _PyFrameEvalFunction eval_frame)

     Set the frame evaluation function.

     See the PEP 523(2) “Adding a frame evaluation API to CPython”.

     Adicionado na versão 3.9.

 -- C Função: *note PyObject: 339. *PyThreadState_GetDict ()
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'  Return a dictionary in which extensions can store
     thread-specific state information.  Each extension should use a
     unique key to use to store state in the dictionary.  It is okay to
     call this function when no current thread state is available.  If
     this function returns ‘NULL’, no exception has been raised and the
     caller should assume no current thread state is available.

 -- C Função: int PyThreadState_SetAsyncExc (unsigned long id, PyObject
          *exc)
     ' Parte da *note ABI Estável: 553.'  Asynchronously raise an
     exception in a thread.  The 'id' argument is the thread id of the
     target thread; 'exc' is the exception object to be raised.  This
     function does not steal any references to 'exc'.  To prevent naive
     misuse, you must write your own C extension to call this.  Must be
     called with the GIL held.  Returns the number of thread states
     modified; this is normally one, but will be zero if the thread id
     isn’t found.  If 'exc' is ‘NULL’, the pending exception (if any)
     for the thread is cleared.  This raises no exceptions.

     Alterado na versão 3.7: The type of the 'id' parameter changed from
     long to unsigned long.

 -- C Função: void PyEval_AcquireThread (PyThreadState *tstate)
     ' Parte da *note ABI Estável: 553.'  Acquire the global interpreter
     lock and set the current thread state to 'tstate', which must not
     be ‘NULL’.  The lock must have been created earlier.  If this
     thread already has the lock, deadlock ensues.

          Nota: Calling this function from a thread when the runtime is
          finalizing will hang the thread until the program exits, even
          if the thread was not created by Python.  Refer to *note
          Cautions regarding runtime finalization: 5198. for more
          details.

     Alterado na versão 3.8: Updated to be consistent with *note
     PyEval_RestoreThread(): 3a9, *note Py_END_ALLOW_THREADS(): a98, and
     *note PyGILState_Ensure(): 3ab, and terminate the current thread if
     called while the interpreter is finalizing.

     Alterado na versão 3.13.8: Hangs the current thread, rather than
     terminating it, if called while the interpreter is finalizing.

     *note PyEval_RestoreThread(): 3a9. is a higher-level function which
     is always available (even when threads have not been initialized).

 -- C Função: void PyEval_ReleaseThread (PyThreadState *tstate)
     ' Parte da *note ABI Estável: 553.'  Reset the current thread state
     to ‘NULL’ and release the global interpreter lock.  The lock must
     have been created earlier and must be held by the current thread.
     The 'tstate' argument, which must not be ‘NULL’, is only used to
     check that it represents the current thread state — if it isn’t, a
     fatal error is reported.

     *note PyEval_SaveThread(): 3a8. is a higher-level function which is
     always available (even when threads have not been initialized).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0523/

   (2) https://peps.python.org/pep-0523/


File: python.info,  Node: Sub-interpreter support,  Next: Notificações assíncronas,  Prev: Estado de thread e a trava global do interpretador,  Up: Inicialização finalização e threads

7.9.6 Sub-interpreter support
-----------------------------

While in most uses, you will only embed a single Python interpreter,
there are cases where you need to create several independent
interpreters in the same process and perhaps even in the same thread.
Sub-interpreters allow you to do that.

The “main” interpreter is the first one created when the runtime
initializes.  It is usually the only Python interpreter in a process.
Unlike sub-interpreters, the main interpreter has unique process-global
responsibilities like signal handling.  It is also responsible for
execution during runtime initialization and is usually the active
interpreter during runtime finalization.  The *note
PyInterpreterState_Main(): 51a3. function returns a pointer to its
state.

You can switch between sub-interpreters using the *note
PyThreadState_Swap(): 4d63. function.  You can create and destroy them
using the following functions:

 -- C Tipo: type PyInterpreterConfig

     Structure containing most parameters to configure a
     sub-interpreter.  Its values are used only in *note
     Py_NewInterpreterFromConfig(): 45c. and never modified by the
     runtime.

     Adicionado na versão 3.12.

     Campos de estrutura:

      -- C Membro: int use_main_obmalloc

          If this is ‘0’ then the sub-interpreter will use its own
          “object” allocator state.  Otherwise it will use (share) the
          main interpreter’s.

          If this is ‘0’ then *note check_multi_interp_extensions: 51a4.
          must be ‘1’ (non-zero).  If this is ‘1’ then *note gil: 51a5.
          must not be *note PyInterpreterConfig_OWN_GIL: 51a6.

      -- C Membro: int allow_fork

          If this is ‘0’ then the runtime will not support forking the
          process in any thread where the sub-interpreter is currently
          active.  Otherwise fork is unrestricted.

          Note that the *note subprocess: d6. module still works when
          fork is disallowed.

      -- C Membro: int allow_exec

          If this is ‘0’ then the runtime will not support replacing the
          current process via exec (e.g.  *note os.execv(): 2cf9.) in
          any thread where the sub-interpreter is currently active.
          Otherwise exec is unrestricted.

          Note that the *note subprocess: d6. module still works when
          exec is disallowed.

      -- C Membro: int allow_threads

          If this is ‘0’ then the sub-interpreter’s *note threading: ed.
          module won’t create threads.  Otherwise threads are allowed.

      -- C Membro: int allow_daemon_threads

          If this is ‘0’ then the sub-interpreter’s *note threading: ed.
          module won’t create daemon threads.  Otherwise daemon threads
          are allowed (as long as *note allow_threads: 51a9. is
          non-zero).

      -- C Membro: int check_multi_interp_extensions

          If this is ‘0’ then all extension modules may be imported,
          including legacy (single-phase init) modules, in any thread
          where the sub-interpreter is currently active.  Otherwise only
          multi-phase init extension modules (see PEP 489(1)) may be
          imported.  (Also see *note Py_mod_multiple_interpreters:
          4de8.)

          This must be ‘1’ (non-zero) if *note use_main_obmalloc: 45bc.
          is ‘0’.

      -- C Membro: int gil

          This determines the operation of the GIL for the
          sub-interpreter.  It may be one of the following:

           -- C Macro: PyInterpreterConfig_DEFAULT_GIL

               Use the default selection (*note
               PyInterpreterConfig_SHARED_GIL: 51ac.).

           -- C Macro: PyInterpreterConfig_SHARED_GIL

               Use (share) the main interpreter’s GIL.

           -- C Macro: PyInterpreterConfig_OWN_GIL

               Use the sub-interpreter’s own GIL.

          If this is *note PyInterpreterConfig_OWN_GIL: 51a6. then *note
          PyInterpreterConfig.use_main_obmalloc: 45bc. must be ‘0’.

 -- C Função: *note PyStatus: 9b5. Py_NewInterpreterFromConfig
          (PyThreadState **tstate_p, const PyInterpreterConfig *config)

     Create a new sub-interpreter.  This is an (almost) totally separate
     environment for the execution of Python code.  In particular, the
     new interpreter has separate, independent versions of all imported
     modules, including the fundamental modules *note builtins: 12,
     *note __main__: 1. and *note sys: d9.  The table of loaded modules
     (‘sys.modules’) and the module search path (‘sys.path’) are also
     separate.  The new environment has no ‘sys.argv’ variable.  It has
     new standard I/O stream file objects ‘sys.stdin’, ‘sys.stdout’ and
     ‘sys.stderr’ (however these refer to the same underlying file
     descriptors).

     The given 'config' controls the options with which the interpreter
     is initialized.

     Upon success, 'tstate_p' will be set to the first thread state
     created in the new sub-interpreter.  This thread state is made in
     the current thread state.  Note that no actual thread is created;
     see the discussion of thread states below.  If creation of the new
     interpreter is unsuccessful, 'tstate_p' is set to ‘NULL’; no
     exception is set since the exception state is stored in the current
     thread state and there may not be a current thread state.

     Like all other Python/C API functions, the global interpreter lock
     must be held before calling this function and is still held when it
     returns.  Likewise a current thread state must be set on entry.  On
     success, the returned thread state will be set as current.  If the
     sub-interpreter is created with its own GIL then the GIL of the
     calling interpreter will be released.  When the function returns,
     the new interpreter’s GIL will be held by the current thread and
     the previously interpreter’s GIL will remain released here.

     Adicionado na versão 3.12.

     Sub-interpreters are most effective when isolated from each other,
     with certain functionality restricted:

          PyInterpreterConfig config = {
              .use_main_obmalloc = 0,
              .allow_fork = 0,
              .allow_exec = 0,
              .allow_threads = 1,
              .allow_daemon_threads = 0,
              .check_multi_interp_extensions = 1,
              .gil = PyInterpreterConfig_OWN_GIL,
          };
          PyThreadState *tstate = NULL;
          PyStatus status = Py_NewInterpreterFromConfig(&tstate, &config);
          if (PyStatus_Exception(status)) {
              Py_ExitStatusException(status);
          }

     Note that the config is used only briefly and does not get
     modified.  During initialization the config’s values are converted
     into various *note PyInterpreterState: 8c2. values.  A read-only
     copy of the config may be stored internally on the *note
     PyInterpreterState: 8c2.

     Extension modules are shared between (sub-)interpreters as follows:

        * For modules using multi-phase initialization, e.g.  *note
          PyModule_FromDefAndSpec(): ee2, a separate module object is
          created and initialized for each interpreter.  Only C-level
          static and global variables are shared between these module
          objects.

        * For modules using single-phase initialization, e.g.  *note
          PyModule_Create(): 50b8, the first time a particular extension
          is imported, it is initialized normally, and a (shallow) copy
          of its module’s dictionary is squirreled away.  When the same
          extension is imported by another (sub-)interpreter, a new
          module is initialized and filled with the contents of this
          copy; the extension’s ‘init’ function is not called.  Objects
          in the module’s dictionary thus end up shared across
          (sub-)interpreters, which might cause unwanted behavior (see
          *note Bugs and caveats: 51ad. below).

          Note that this is different from what happens when an
          extension is imported after the interpreter has been
          completely re-initialized by calling *note Py_FinalizeEx():
          d37. and *note Py_Initialize(): 8b1.; in that case, the
          extension’s ‘initmodule’ function 'is' called again.  As with
          multi-phase initialization, this means that only C-level
          static and global variables are shared between these modules.

 -- C Função: *note PyThreadState: 78d. *Py_NewInterpreter (void)
     ' Parte da *note ABI Estável: 553.'

     Create a new sub-interpreter.  This is essentially just a wrapper
     around *note Py_NewInterpreterFromConfig(): 45c. with a config that
     preserves the existing behavior.  The result is an unisolated
     sub-interpreter that shares the main interpreter’s GIL, allows
     fork/exec, allows daemon threads, and allows single-phase init
     modules.

 -- C Função: void Py_EndInterpreter (PyThreadState *tstate)
     ' Parte da *note ABI Estável: 553.'

     Destroy the (sub-)interpreter represented by the given thread
     state.  The given thread state must be the current thread state.
     See the discussion of thread states below.  When the call returns,
     the current thread state is ‘NULL’.  All thread states associated
     with this interpreter are destroyed.  The global interpreter lock
     used by the target interpreter must be held before calling this
     function.  No GIL is held when it returns.

     *note Py_FinalizeEx(): d37. will destroy all sub-interpreters that
     haven’t been explicitly destroyed at that point.

* Menu:

* A Per-Interpreter GIL::
* Bugs and caveats::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0489/


File: python.info,  Node: A Per-Interpreter GIL,  Next: Bugs and caveats,  Up: Sub-interpreter support

7.9.6.1 A Per-Interpreter GIL
.............................

Using *note Py_NewInterpreterFromConfig(): 45c. you can create a
sub-interpreter that is completely isolated from other interpreters,
including having its own GIL. The most important benefit of this
isolation is that such an interpreter can execute Python code without
being blocked by other interpreters or blocking any others.  Thus a
single Python process can truly take advantage of multiple CPU cores
when running Python code.  The isolation also encourages a different
approach to concurrency than that of just using threads.  (See PEP
554(1) and PEP 684(2).)

Using an isolated interpreter requires vigilance in preserving that
isolation.  That especially means not sharing any objects or mutable
state without guarantees about thread-safety.  Even objects that are
otherwise immutable (e.g.  ‘None’, ‘(1, 5)’) can’t normally be shared
because of the refcount.  One simple but less-efficient approach around
this is to use a global lock around all use of some state (or object).
Alternately, effectively immutable objects (like integers or strings)
can be made safe in spite of their refcounts by making them *note
immortal: 45bb.  In fact, this has been done for the builtin singletons,
small integers, and a number of other builtin objects.

Se você preservar o isolamento, terá acesso à computação multi-core
adequada, sem as complicações que acompanham o uso de threads livres.  A
falha em preservar o isolamento traz a exposição a todas as
consequências de threads livres, incluindo corridas e travamentos
difíceis de depurar.

Aside from that, one of the main challenges of using multiple isolated
interpreters is how to communicate between them safely (not break
isolation) and efficiently.  The runtime and stdlib do not provide any
standard approach to this yet.  A future stdlib module would help
mitigate the effort of preserving isolation and expose effective tools
for communicating (and sharing) data between interpreters.

Adicionado na versão 3.12.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0554/

   (2) https://peps.python.org/pep-0684/


File: python.info,  Node: Bugs and caveats,  Prev: A Per-Interpreter GIL,  Up: Sub-interpreter support

7.9.6.2 Bugs and caveats
........................

Because sub-interpreters (and the main interpreter) are part of the same
process, the insulation between them isn’t perfect — for example, using
low-level file operations like *note os.close(): b8a. they can
(accidentally or maliciously) affect each other’s open files.  Because
of the way extensions are shared between (sub-)interpreters, some
extensions may not work properly; this is especially likely when using
single-phase initialization or (static) global variables.  It is
possible to insert objects created in one sub-interpreter into a
namespace of another (sub-)interpreter; this should be avoided if
possible.

Special care should be taken to avoid sharing user-defined functions,
methods, instances or classes between sub-interpreters, since import
operations executed by such objects may affect the wrong
(sub-)interpreter’s dictionary of loaded modules.  It is equally
important to avoid sharing objects from which the above are reachable.

Also note that combining this functionality with ‘PyGILState_*’ APIs is
delicate, because these APIs assume a bijection between Python thread
states and OS-level threads, an assumption broken by the presence of
sub-interpreters.  It is highly recommended that you don’t switch
sub-interpreters between a pair of matching *note PyGILState_Ensure():
3ab. and *note PyGILState_Release(): 3ac. calls.  Furthermore,
extensions (such as *note ctypes: 2a.) using these APIs to allow calling
of Python code from non-Python created threads will probably be broken
when using sub-interpreters.


File: python.info,  Node: Notificações assíncronas,  Next: Profiling and Tracing,  Prev: Sub-interpreter support,  Up: Inicialização finalização e threads

7.9.7 Notificações assíncronas
------------------------------

A mechanism is provided to make asynchronous notifications to the main
interpreter thread.  These notifications take the form of a function
pointer and a void pointer argument.

 -- C Função: int Py_AddPendingCall (int (*func)(void*), void *arg)
     ' Parte da *note ABI Estável: 553.'  Schedule a function to be
     called from the main interpreter thread.  On success, ‘0’ is
     returned and 'func' is queued for being called in the main thread.
     On failure, ‘-1’ is returned without setting any exception.

     When successfully queued, 'func' will be 'eventually' called from
     the main interpreter thread with the argument 'arg'.  It will be
     called asynchronously with respect to normally running Python code,
     but with both these conditions met:

        * on a *note bytecode: 187. boundary;

        * with the main thread holding the *note global interpreter
          lock: 148. ('func' can therefore use the full C API).

     'func' must return ‘0’ on success, or ‘-1’ on failure with an
     exception set.  'func' won’t be interrupted to perform another
     asynchronous notification recursively, but it can still be
     interrupted to switch threads if the global interpreter lock is
     released.

     This function doesn’t need a current thread state to run, and it
     doesn’t need the global interpreter lock.

     To call this function in a subinterpreter, the caller must hold the
     GIL. Otherwise, the function 'func' can be scheduled to be called
     from the wrong interpreter.

          Aviso: This is a low-level function, only useful for very
          special cases.  There is no guarantee that 'func' will be
          called as quick as possible.  If the main thread is busy
          executing a system call, 'func' won’t be called before the
          system call returns.  This function is generally 'not'
          suitable for calling Python code from arbitrary C threads.
          Instead, use the *note PyGILState API: 5195.

     Adicionado na versão 3.1.

     Alterado na versão 3.9: If this function is called in a
     subinterpreter, the function 'func' is now scheduled to be called
     from the subinterpreter, rather than being called from the main
     interpreter.  Each subinterpreter now has its own list of scheduled
     calls.

     Alterado na versão 3.12: This function now always schedules 'func'
     to be run in the main interpreter.

 -- C Função: int Py_MakePendingCalls (void)
     ' Parte da *note ABI Estável: 553.'  Execute all pending calls.
     This is usually executed automatically by the interpreter.

     Esta função retorna ‘0’ em caso de sucesso e retorna ‘-1’ com uma
     exceção definida em caso de falha.

     If this is not called in the main thread of the main interpreter,
     this function does nothing and returns ‘0’.  The caller must hold
     the *note GIL: 159.

     Adicionado na versão 3.1.

     Alterado na versão 3.12: This function only runs pending calls in
     the main interpreter.


File: python.info,  Node: Profiling and Tracing,  Next: Reference tracing,  Prev: Notificações assíncronas,  Up: Inicialização finalização e threads

7.9.8 Profiling and Tracing
---------------------------

The Python interpreter provides some low-level support for attaching
profiling and execution tracing facilities.  These are used for
profiling, debugging, and coverage analysis tools.

This C interface allows the profiling or tracing code to avoid the
overhead of calling through Python-level callable objects, making a
direct C function call instead.  The essential attributes of the
facility have not changed; the interface allows trace functions to be
installed per-thread, and the basic events reported to the trace
function are the same as had been reported to the Python-level trace
functions in previous versions.

 -- C Tipo: typedef int (*Py_tracefunc)(*note PyObject: 339. *obj, *note
          PyFrameObject: 789. *frame, int what, *note PyObject: 339.
          *arg)

     The type of the trace function registered using *note
     PyEval_SetProfile(): 1545. and *note PyEval_SetTrace(): 421.  The
     first parameter is the object passed to the registration function
     as 'obj', 'frame' is the frame object to which the event pertains,
     'what' is one of the constants *note PyTrace_CALL: 51b3, *note
     PyTrace_EXCEPTION: 51b4, *note PyTrace_LINE: 51b5, *note
     PyTrace_RETURN: 51b6, *note PyTrace_C_CALL: 51b7, *note
     PyTrace_C_EXCEPTION: 51b8, *note PyTrace_C_RETURN: 51b9, or *note
     PyTrace_OPCODE: 51ba, and 'arg' depends on the value of 'what':

     Value of 'what'                     Meaning of 'arg'
                                         
     ---------------------------------------------------------------------------------
                                         
     *note PyTrace_CALL: 51b3.           Always *note Py_None: 4b48.
                                         
                                         
     *note PyTrace_EXCEPTION: 51b4.      Exception information as returned by
                                         *note sys.exc_info(): 68a.
                                         
                                         
     *note PyTrace_LINE: 51b5.           Always *note Py_None: 4b48.
                                         
                                         
     *note PyTrace_RETURN: 51b6.         Value being returned to the caller, or
                                         ‘NULL’ if caused by an exception.
                                         
                                         
     *note PyTrace_C_CALL: 51b7.         Function object being called.
                                         
                                         
     *note PyTrace_C_EXCEPTION: 51b8.    Function object being called.
                                         
                                         
     *note PyTrace_C_RETURN: 51b9.       Function object being called.
                                         
                                         
     *note PyTrace_OPCODE: 51ba.         Always *note Py_None: 4b48.
                                         

 -- C Variável: int PyTrace_CALL

     The value of the 'what' parameter to a *note Py_tracefunc: 51b2.
     function when a new call to a function or method is being reported,
     or a new entry into a generator.  Note that the creation of the
     iterator for a generator function is not reported as there is no
     control transfer to the Python bytecode in the corresponding frame.

 -- C Variável: int PyTrace_EXCEPTION

     The value of the 'what' parameter to a *note Py_tracefunc: 51b2.
     function when an exception has been raised.  The callback function
     is called with this value for 'what' when after any bytecode is
     processed after which the exception becomes set within the frame
     being executed.  The effect of this is that as exception
     propagation causes the Python stack to unwind, the callback is
     called upon return to each frame as the exception propagates.  Only
     trace functions receives these events; they are not needed by the
     profiler.

 -- C Variável: int PyTrace_LINE

     The value passed as the 'what' parameter to a *note Py_tracefunc:
     51b2. function (but not a profiling function) when a line-number
     event is being reported.  It may be disabled for a frame by setting
     *note f_trace_lines: bf6. to '0' on that frame.

 -- C Variável: int PyTrace_RETURN

     The value for the 'what' parameter to *note Py_tracefunc: 51b2.
     functions when a call is about to return.

 -- C Variável: int PyTrace_C_CALL

     The value for the 'what' parameter to *note Py_tracefunc: 51b2.
     functions when a C function is about to be called.

 -- C Variável: int PyTrace_C_EXCEPTION

     The value for the 'what' parameter to *note Py_tracefunc: 51b2.
     functions when a C function has raised an exception.

 -- C Variável: int PyTrace_C_RETURN

     The value for the 'what' parameter to *note Py_tracefunc: 51b2.
     functions when a C function has returned.

 -- C Variável: int PyTrace_OPCODE

     The value for the 'what' parameter to *note Py_tracefunc: 51b2.
     functions (but not profiling functions) when a new opcode is about
     to be executed.  This event is not emitted by default: it must be
     explicitly requested by setting *note f_trace_opcodes: bf7. to '1'
     on the frame.

 -- C Função: void PyEval_SetProfile (Py_tracefunc func, PyObject *obj)

     Set the profiler function to 'func'.  The 'obj' parameter is passed
     to the function as its first parameter, and may be any Python
     object, or ‘NULL’.  If the profile function needs to maintain
     state, using a different value for 'obj' for each thread provides a
     convenient and thread-safe place to store it.  The profile function
     is called for all monitored events except *note PyTrace_LINE: 51b5.
     *note PyTrace_OPCODE: 51ba. and *note PyTrace_EXCEPTION: 51b4.

     See also the *note sys.setprofile(): 1546. function.

     The caller must hold the *note GIL: 159.

 -- C Função: void PyEval_SetProfileAllThreads (Py_tracefunc func,
          PyObject *obj)

     Like *note PyEval_SetProfile(): 1545. but sets the profile function
     in all running threads belonging to the current interpreter instead
     of the setting it only on the current thread.

     The caller must hold the *note GIL: 159.

     As *note PyEval_SetProfile(): 1545, this function ignores any
     exceptions raised while setting the profile functions in all
     threads.

Adicionado na versão 3.12.

 -- C Função: void PyEval_SetTrace (Py_tracefunc func, PyObject *obj)

     Set the tracing function to 'func'.  This is similar to *note
     PyEval_SetProfile(): 1545, except the tracing function does receive
     line-number events and per-opcode events, but does not receive any
     event related to C function objects being called.  Any trace
     function registered using *note PyEval_SetTrace(): 421. will not
     receive *note PyTrace_C_CALL: 51b7, *note PyTrace_C_EXCEPTION:
     51b8. or *note PyTrace_C_RETURN: 51b9. as a value for the 'what'
     parameter.

     See also the *note sys.settrace(): 1547. function.

     The caller must hold the *note GIL: 159.

 -- C Função: void PyEval_SetTraceAllThreads (Py_tracefunc func,
          PyObject *obj)

     Like *note PyEval_SetTrace(): 421. but sets the tracing function in
     all running threads belonging to the current interpreter instead of
     the setting it only on the current thread.

     The caller must hold the *note GIL: 159.

     As *note PyEval_SetTrace(): 421, this function ignores any
     exceptions raised while setting the trace functions in all threads.

Adicionado na versão 3.12.


File: python.info,  Node: Reference tracing,  Next: Advanced Debugger Support,  Prev: Profiling and Tracing,  Up: Inicialização finalização e threads

7.9.9 Reference tracing
-----------------------

Adicionado na versão 3.13.

 -- C Tipo: typedef int (*PyRefTracer)(*note PyObject: 339.*, int event,
          void *data)

     The type of the trace function registered using *note
     PyRefTracer_SetTracer(): 36c.  The first parameter is a Python
     object that has been just created (when 'event' is set to *note
     PyRefTracer_CREATE: 51bd.) or about to be destroyed (when 'event'
     is set to *note PyRefTracer_DESTROY: 51be.).  The 'data' argument
     is the opaque pointer that was provided when *note
     PyRefTracer_SetTracer(): 36c. was called.

Adicionado na versão 3.13.

 -- C Variável: int PyRefTracer_CREATE

     The value for the 'event' parameter to *note PyRefTracer: 51bc.
     functions when a Python object has been created.

 -- C Variável: int PyRefTracer_DESTROY

     The value for the 'event' parameter to *note PyRefTracer: 51bc.
     functions when a Python object has been destroyed.

 -- C Função: int PyRefTracer_SetTracer (PyRefTracer tracer, void *data)

     Register a reference tracer function.  The function will be called
     when a new Python has been created or when an object is going to be
     destroyed.  If 'data' is provided it must be an opaque pointer that
     will be provided when the tracer function is called.  Return ‘0’ on
     success.  Set an exception and return ‘-1’ on error.

     Not that tracer functions 'must not' create Python objects inside
     or otherwise the call will be re-entrant.  The tracer also 'must
     not' clear any existing exception or set an exception.  The GIL
     will be held every time the tracer function is called.

     The GIL must be held when calling this function.

Adicionado na versão 3.13.

 -- C Função: *note PyRefTracer: 51bc. PyRefTracer_GetTracer (void
          **data)

     Get the registered reference tracer function and the value of the
     opaque data pointer that was registered when *note
     PyRefTracer_SetTracer(): 36c. was called.  If no tracer was
     registered this function will return NULL and will set the 'data'
     pointer to NULL.

     The GIL must be held when calling this function.

Adicionado na versão 3.13.


File: python.info,  Node: Advanced Debugger Support,  Next: Thread Local Storage Support,  Prev: Reference tracing,  Up: Inicialização finalização e threads

7.9.10 Advanced Debugger Support
--------------------------------

These functions are only intended to be used by advanced debugging
tools.

 -- C Função: *note PyInterpreterState: 8c2. *PyInterpreterState_Head ()

     Return the interpreter state object at the head of the list of all
     such objects.

 -- C Função: *note PyInterpreterState: 8c2. *PyInterpreterState_Main ()

     Return the main interpreter state object.

 -- C Função: *note PyInterpreterState: 8c2. *PyInterpreterState_Next
          (PyInterpreterState *interp)

     Return the next interpreter state object after 'interp' from the
     list of all such objects.

 -- C Função: *note PyThreadState: 78d. *PyInterpreterState_ThreadHead
          (PyInterpreterState *interp)

     Return the pointer to the first *note PyThreadState: 78d. object in
     the list of threads associated with the interpreter 'interp'.

 -- C Função: *note PyThreadState: 78d. *PyThreadState_Next
          (PyThreadState *tstate)

     Return the next thread state object after 'tstate' from the list of
     all such objects belonging to the same *note PyInterpreterState:
     8c2. object.


File: python.info,  Node: Thread Local Storage Support,  Next: Synchronization Primitives<2>,  Prev: Advanced Debugger Support,  Up: Inicialização finalização e threads

7.9.11 Thread Local Storage Support
-----------------------------------

The Python interpreter provides low-level support for thread-local
storage (TLS) which wraps the underlying native TLS implementation to
support the Python-level thread local storage API (*note
threading.local: 1631.).  The CPython C level APIs are similar to those
offered by pthreads and Windows: use a thread key and functions to
associate a void* value per thread.

The GIL does 'not' need to be held when calling these functions; they
supply their own locking.

Note that ‘Python.h’ does not include the declaration of the TLS APIs,
you need to include ‘pythread.h’ to use thread-local storage.

     Nota: None of these API functions handle memory management on
     behalf of the void* values.  You need to allocate and deallocate
     them yourself.  If the void* values happen to be *note PyObject:
     339.*, these functions don’t do refcount operations on them either.

* Menu:

* Thread Specific Storage (TSS) API: Thread Specific Storage TSS API.
* Thread Local Storage (TLS) API: Thread Local Storage TLS API.


File: python.info,  Node: Thread Specific Storage TSS API,  Next: Thread Local Storage TLS API,  Up: Thread Local Storage Support

7.9.11.1 Thread Specific Storage (TSS) API
..........................................

TSS API is introduced to supersede the use of the existing TLS API
within the CPython interpreter.  This API uses a new type *note
Py_tss_t: aef. instead of int to represent thread keys.

Adicionado na versão 3.7.

Ver também
..........

“A New C-API for Thread-Local Storage in CPython” ( PEP 539(1))

 -- C Tipo: type Py_tss_t

     This data structure represents the state of a thread key, the
     definition of which may depend on the underlying TLS
     implementation, and it has an internal field representing the key’s
     initialization state.  There are no public members in this
     structure.

     Quando *note Py_LIMITED_API: 553. não é definido, a alocação
     estática deste tipo por *note Py_tss_NEEDS_INIT: 51c4. é permitida.

 -- C Macro: Py_tss_NEEDS_INIT

     This macro expands to the initializer for *note Py_tss_t: aef.
     variables.  Note that this macro won’t be defined with *note
     Py_LIMITED_API: 553.

* Menu:

* Alocação dinâmica::
* Métodos: Métodos<2>.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0539/


File: python.info,  Node: Alocação dinâmica,  Next: Métodos<2>,  Up: Thread Specific Storage TSS API

7.9.11.2 Alocação dinâmica
..........................

Dynamic allocation of the *note Py_tss_t: aef, required in extension
modules built with *note Py_LIMITED_API: 553, where static allocation of
this type is not possible due to its implementation being opaque at
build time.

 -- C Função: *note Py_tss_t: aef. *PyThread_tss_alloc ()
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Retorna um
     valor que é o mesmo estado de um valor inicializado com *note
     Py_tss_NEEDS_INIT: 51c4, ou ‘NULL’ no caso de falha de alocação
     dinâmica.

 -- C Função: void PyThread_tss_free (Py_tss_t *key)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Free the
     given 'key' allocated by *note PyThread_tss_alloc(): 405, after
     first calling *note PyThread_tss_delete(): 40d. to ensure any
     associated thread locals have been unassigned.  This is a no-op if
     the 'key' argument is ‘NULL’.

          Nota: A freed key becomes a dangling pointer.  You should
          reset the key to ‘NULL’.


File: python.info,  Node: Métodos<2>,  Prev: Alocação dinâmica,  Up: Thread Specific Storage TSS API

7.9.11.3 Métodos
................

The parameter 'key' of these functions must not be ‘NULL’.  Moreover,
the behaviors of *note PyThread_tss_set(): 409. and *note
PyThread_tss_get(): 40b. are undefined if the given *note Py_tss_t: aef.
has not been initialized by *note PyThread_tss_create(): 4d6f.

 -- C Função: int PyThread_tss_is_created (Py_tss_t *key)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Return a
     non-zero value if the given *note Py_tss_t: aef. has been
     initialized by *note PyThread_tss_create(): 4d6f.

 -- C Função: int PyThread_tss_create (Py_tss_t *key)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Retorna um
     valor zero na inicialização bem-sucedida de uma chave TSS. O
     comportamento é indefinido se o valor apontado pelo argumento 'key'
     não for inicializado por *note Py_tss_NEEDS_INIT: 51c4.  Essa
     função pode ser chamada repetidamente na mesma tecla – chamá-la em
     uma tecla já inicializada não funciona e retorna imediatamente com
     sucesso.

 -- C Função: void PyThread_tss_delete (Py_tss_t *key)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Destroy a
     TSS key to forget the values associated with the key across all
     threads, and change the key’s initialization state to
     uninitialized.  A destroyed key is able to be initialized again by
     *note PyThread_tss_create(): 4d6f.  This function can be called
     repeatedly on the same key – calling it on an already destroyed key
     is a no-op.

 -- C Função: int PyThread_tss_set (Py_tss_t *key, void *value)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Return a
     zero value to indicate successfully associating a void* value with
     a TSS key in the current thread.  Each thread has a distinct
     mapping of the key to a void* value.

 -- C Função: void *PyThread_tss_get (Py_tss_t *key)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Return the
     void* value associated with a TSS key in the current thread.  This
     returns ‘NULL’ if no value is associated with the key in the
     current thread.


File: python.info,  Node: Thread Local Storage TLS API,  Prev: Thread Specific Storage TSS API,  Up: Thread Local Storage Support

7.9.11.4 Thread Local Storage (TLS) API
.......................................

Descontinuado desde a versão 3.7: This API is superseded by *note Thread
Specific Storage (TSS) API: aee.

     Nota: This version of the API does not support platforms where the
     native TLS key is defined in a way that cannot be safely cast to
     ‘int’.  On such platforms, *note PyThread_create_key(): 404. will
     return immediately with a failure status, and the other TLS
     functions will all be no-ops on such platforms.

Due to the compatibility problem noted above, this version of the API
should not be used in new code.

 -- C Função: int PyThread_create_key ()
     ' Parte da *note ABI Estável: 553.'

 -- C Função: void PyThread_delete_key (int key)
     ' Parte da *note ABI Estável: 553.'

 -- C Função: int PyThread_set_key_value (int key, void *value)
     ' Parte da *note ABI Estável: 553.'

 -- C Função: void *PyThread_get_key_value (int key)
     ' Parte da *note ABI Estável: 553.'

 -- C Função: void PyThread_delete_key_value (int key)
     ' Parte da *note ABI Estável: 553.'

 -- C Função: void PyThread_ReInitTLS ()
     ' Parte da *note ABI Estável: 553.'


File: python.info,  Node: Synchronization Primitives<2>,  Next: Operating System Thread APIs,  Prev: Thread Local Storage Support,  Up: Inicialização finalização e threads

7.9.12 Synchronization Primitives
---------------------------------

The C-API provides a basic mutual exclusion lock.

 -- C Tipo: type PyMutex

     A mutual exclusion lock.  The ‘PyMutex’ should be initialized to
     zero to represent the unlocked state.  For example:

          PyMutex mutex = {0};

     Instances of ‘PyMutex’ should not be copied or moved.  Both the
     contents and address of a ‘PyMutex’ are meaningful, and it must
     remain at a fixed, writable location in memory.

          Nota: A ‘PyMutex’ currently occupies one byte, but the size
          should be considered unstable.  The size may change in future
          Python releases without a deprecation period.

     Adicionado na versão 3.13.

 -- C Função: void PyMutex_Lock (PyMutex *m)

     Lock mutex 'm'.  If another thread has already locked it, the
     calling thread will block until the mutex is unlocked.  While
     blocked, the thread will temporarily release the *note GIL: 159. if
     it is held.

     Adicionado na versão 3.13.

 -- C Função: void PyMutex_Unlock (PyMutex *m)

     Unlock mutex 'm'.  The mutex must be locked — otherwise, the
     function will issue a fatal error.

     Adicionado na versão 3.13.

* Menu:

* Python Critical Section API::
* Legacy Locking APIs::


File: python.info,  Node: Python Critical Section API,  Next: Legacy Locking APIs,  Up: Synchronization Primitives<2>

7.9.12.1 Python Critical Section API
....................................

The critical section API provides a deadlock avoidance layer on top of
per-object locks for *note free-threaded: 15e4. CPython.  They are
intended to replace reliance on the *note global interpreter lock: 148,
and are no-ops in versions of Python with the global interpreter lock.

Critical sections are intended to be used for custom types implemented
in C-API extensions.  They should generally not be used with built-in
types like *note list: 611. and *note dict: 256. because their public
C-APIs already use critical sections internally, with the notable
exception of *note PyDict_Next(): 16fd, which requires critical section
to be acquired externally.

Critical sections avoid deadlocks by implicitly suspending active
critical sections, hence, they do not provide exclusive access such as
provided by traditional locks like *note PyMutex: 15b.  When a critical
section is started, the per-object lock for the object is acquired.  If
the code executed inside the critical section calls C-API functions then
it can suspend the critical section thereby releasing the per-object
lock, so other threads can acquire the per-object lock for the same
object.

The functions and structs used by the macros are exposed for cases where
C macros are not available.  They should only be used as in the given
macro expansions.  Note that the sizes and contents of the structures
may change in future Python versions.

     Nota: Operations that need to lock two objects at once must use
     *note Py_BEGIN_CRITICAL_SECTION2: 51cb.  You 'cannot' use nested
     critical sections to lock more than one object at once, because the
     inner critical section may suspend the outer critical sections.
     This API does not provide a way to lock more than two objects at
     once.

Exemplo de uso:

     static PyObject *
     set_field(MyObject *self, PyObject *value)
     {
        Py_BEGIN_CRITICAL_SECTION(self);
        Py_SETREF(self->field, Py_XNewRef(value));
        Py_END_CRITICAL_SECTION();
        Py_RETURN_NONE;
     }

In the above example, *note Py_SETREF: 579. calls *note Py_DECREF: 56f,
which can call arbitrary code through an object’s deallocation function.
The critical section API avoids potential deadlocks due to reentrancy
and lock ordering by allowing the runtime to temporarily suspend the
critical section if the code triggered by the finalizer blocks and calls
*note PyEval_SaveThread(): 3a8.

 -- C Macro: Py_BEGIN_CRITICAL_SECTION (op)

     Acquires the per-object lock for the object 'op' and begins a
     critical section.

     In the free-threaded build, this macro expands to:

          {
              PyCriticalSection _py_cs;
              PyCriticalSection_Begin(&_py_cs, (PyObject*)(op))

     In the default build, this macro expands to ‘{’.

     Adicionado na versão 3.13.

 -- C Macro: Py_END_CRITICAL_SECTION ()

     Ends the critical section and releases the per-object lock.

     In the free-threaded build, this macro expands to:

              PyCriticalSection_End(&_py_cs);
          }

     In the default build, this macro expands to ‘}’.

     Adicionado na versão 3.13.

 -- C Macro: Py_BEGIN_CRITICAL_SECTION2 (a, b)

     Acquires the per-objects locks for the objects 'a' and 'b' and
     begins a critical section.  The locks are acquired in a consistent
     order (lowest address first) to avoid lock ordering deadlocks.

     In the free-threaded build, this macro expands to:

          {
              PyCriticalSection2 _py_cs2;
              PyCriticalSection2_Begin(&_py_cs2, (PyObject*)(a), (PyObject*)(b))

     In the default build, this macro expands to ‘{’.

     Adicionado na versão 3.13.

 -- C Macro: Py_END_CRITICAL_SECTION2 ()

     Ends the critical section and releases the per-object locks.

     In the free-threaded build, this macro expands to:

              PyCriticalSection2_End(&_py_cs2);
          }

     In the default build, this macro expands to ‘}’.

     Adicionado na versão 3.13.


File: python.info,  Node: Legacy Locking APIs,  Prev: Python Critical Section API,  Up: Synchronization Primitives<2>

7.9.12.2 Legacy Locking APIs
............................

These APIs are obsolete since Python 3.13 with the introduction of *note
PyMutex: 15b.

Alterado na versão 3.15: These APIs are now a simple wrapper around
‘PyMutex’.

 -- C Tipo: type PyThread_type_lock

     A pointer to a mutual exclusion lock.

 -- C Tipo: type PyLockStatus

     The result of acquiring a lock with a timeout.

      -- C Enumerador: enumerator PY_LOCK_FAILURE

          Failed to acquire the lock.

      -- C Enumerador: enumerator PY_LOCK_ACQUIRED

          The lock was successfully acquired.

      -- C Enumerador: enumerator PY_LOCK_INTR

          The lock was interrupted by a signal.

 -- C Função: *note PyThread_type_lock: 51cf. PyThread_allocate_lock
          (void)
     ' Parte da *note ABI Estável: 553.'  Allocate a new lock.

     On success, this function returns a lock; on failure, this function
     returns ‘0’ without an exception set.

     The caller does not need to hold the *note GIL: 159.

     Alterado na versão 3.15: This function now always uses *note
     PyMutex: 15b.  In prior versions, this would use a lock provided by
     the operating system.

 -- C Função: void PyThread_free_lock (PyThread_type_lock lock)
     ' Parte da *note ABI Estável: 553.'  Destroy 'lock'.  The lock
     should not be held by any thread when calling this.

     The caller does not need to hold the *note GIL: 159.

 -- C Função: *note PyLockStatus: 51d0. PyThread_acquire_lock_timed
          (PyThread_type_lock lock, long long microseconds, int
          intr_flag)
     ' Parte da *note ABI Estável: 553.'  Acquire 'lock' with a timeout.

     This will wait for 'microseconds' microseconds to acquire the lock.
     If the timeout expires, this function returns *note
     PY_LOCK_FAILURE: 51d1.  If 'microseconds' is ‘-1’, this will wait
     indefinitely until the lock has been released.

     If 'intr_flag' is ‘1’, acquiring the lock may be interrupted by a
     signal, in which case this function returns *note PY_LOCK_INTR:
     51d3.  Upon interruption, it’s generally expected that the caller
     makes a call to *note Py_MakePendingCalls(): 4dcb. to propagate an
     exception to Python code.

     If the lock is successfully acquired, this function returns *note
     PY_LOCK_ACQUIRED: 51d2.

     The caller does not need to hold the *note GIL: 159.

 -- C Função: int PyThread_acquire_lock (PyThread_type_lock lock, int
          waitflag)
     ' Parte da *note ABI Estável: 553.'  Acquire 'lock'.

     If 'waitflag' is ‘1’ and another thread currently holds the lock,
     this function will wait until the lock can be acquired and will
     always return ‘1’.

     If 'waitflag' is ‘0’ and another thread holds the lock, this
     function will not wait and instead return ‘0’.  If the lock is not
     held by any other thread, then this function will acquire it and
     return ‘1’.

     Unlike *note PyThread_acquire_lock_timed(): 4d66, acquiring the
     lock cannot be interrupted by a signal.

     The caller does not need to hold the *note GIL: 159.

 -- C Função: int PyThread_release_lock (PyThread_type_lock lock)
     ' Parte da *note ABI Estável: 553.'  Release 'lock'.  If 'lock' is
     not held, then this function issues a fatal error.

     The caller does not need to hold the *note GIL: 159.


File: python.info,  Node: Operating System Thread APIs,  Prev: Synchronization Primitives<2>,  Up: Inicialização finalização e threads

7.9.13 Operating System Thread APIs
-----------------------------------

 -- C Macro: PYTHREAD_INVALID_THREAD_ID

     Sentinel value for an invalid thread ID.

     This is currently equivalent to ‘(unsigned long)-1’.

 -- C Função: unsigned long PyThread_start_new_thread (void
          (*func)(void*), void *arg)
     ' Parte da *note ABI Estável: 553.'  Start function 'func' in a new
     thread with argument 'arg'.  The resulting thread is not intended
     to be joined.

     'func' must not be ‘NULL’, but 'arg' may be ‘NULL’.

     On success, this function returns the identifier of the new thread;
     on failure, this returns *note PYTHREAD_INVALID_THREAD_ID: 51d5.

     The caller does not need to hold the *note GIL: 159.

 -- C Função: unsigned long PyThread_get_thread_ident (void)
     ' Parte da *note ABI Estável: 553.'  Return the identifier of the
     current thread, which will never be zero.

     This function cannot fail, and the caller does not need to hold the
     *note GIL: 159.

     Ver também
     ..........

     *note threading.get_ident(): 1199.

 -- C Função: *note PyObject: 339. *PyThread_GetInfo (void)
     ' Parte da *note ABI Estável: 553. desde a versão 3.3.'  Get
     general information about the current thread in the form of a *note
     struct sequence: 11ff. object.  This information is accessible as
     *note sys.thread_info: 118f. in Python.

     On success, this returns a new *note strong reference: 33d. to the
     thread information; on failure, this returns ‘NULL’ with an
     exception set.

     The caller must hold the *note GIL: 159.

 -- C Macro: PY_HAVE_THREAD_NATIVE_ID

     This macro is defined when the system supports native thread IDs.

 -- C Função: unsigned long PyThread_get_thread_native_id (void)
     ' Parte da *note ABI Estável: 553. on platforms with native thread
     IDs.'  Get the native identifier of the current thread as it was
     assigned by the operating system’s kernel, which will never be less
     than zero.

     This function is only available when *note
     PY_HAVE_THREAD_NATIVE_ID: 51d6. is defined.

     This function cannot fail, and the caller does not need to hold the
     *note GIL: 159.

     Ver também
     ..........

     *note threading.get_native_id(): a47.

 -- C Função: void PyThread_exit_thread (void)
     ' Parte da *note ABI Estável: 553.'  Terminate the current thread.
     This function is generally considered unsafe and should be avoided.
     It is kept solely for backwards compatibility.

     This function is only safe to call if all functions in the full
     call stack are written to safely allow it.

          Aviso: If the current system uses POSIX threads (also known as
          “pthreads”), this calls ‘pthread_exit(3)(1)’, which attempts
          to unwind the stack and call C++ destructors on some libc
          implementations.  However, if a ‘noexcept’ function is
          reached, it may terminate the process.  Other systems, such as
          macOS, do unwinding.

          On Windows, this function calls ‘_endthreadex()’, which kills
          the thread without calling C++ destructors.

          In any case, there is a risk of corruption on the thread’s
          stack.

 -- C Função: void PyThread_init_thread (void)
     ' Parte da *note ABI Estável: 553.'  Initialize ‘PyThread*’ APIs.
     Python executes this function automatically, so there’s little need
     to call it from an extension module.

 -- C Função: int PyThread_set_stacksize (size_t size)
     ' Parte da *note ABI Estável: 553.'  Set the stack size of the
     current thread to 'size' bytes.

     This function returns ‘0’ on success, ‘-1’ if 'size' is invalid, or
     ‘-2’ if the system does not support changing the stack size.  This
     function does not set exceptions.

     The caller does not need to hold the *note GIL: 159.

 -- C Função: size_t PyThread_get_stacksize (void)
     ' Parte da *note ABI Estável: 553.'  Return the stack size of the
     current thread in bytes, or ‘0’ if the system’s default stack size
     is in use.

     The caller does not need to hold the *note GIL: 159.

   ---------- Footnotes ----------

   (1) https://manpages.debian.org/pthread_exit(3)


File: python.info,  Node: Configuração de inicialização do Python,  Next: Gerenciamento de Memória,  Prev: Inicialização finalização e threads,  Up: Manual de referência da API Python/C

7.10 Configuração de inicialização do Python
============================================

Adicionado na versão 3.8.

Python pode ser inicializado com *note Py_InitializeFromConfig(): 3c5. e
a estrutura *note PyConfig: 3a6.  Pode ser pré-inicializado com *note
Py_PreInitialize(): 3eb. e a estrutura *note PyPreConfig: 9b4.

Existem dois tipos de configuração:

   * A *note Python Configuration: 5190. pode ser usada para construir
     um Python personalizado que se comporta como um Python comum.  Por
     exemplo, variáveis de ambiente e argumento de linha de comando são
     usados para configurar Python.

   * A *note Configuração isolada: 51da. pode ser usada para incorporar
     Python em uma aplicação.  Isso isola Python de um sistema.  Por
     exemplo, variáveis de ambiente são ignoradas, a variável local
     LC_CTYPE fica inalterada e nenhum manipulador de sinal é
     registrado.

A função *note Py_RunMain(): 9cd. pode ser usada para escrever um
programa Python personalizado.

Veja também *note Inicialização, Finalização e Threads: 5182.

Ver também
..........

PEP 587(1) “Configuração da inicialização do Python”.

* Menu:

* Exemplo: Exemplo<17>.
* PyWideStringList::
* PyStatus::
* PyPreConfig::
* Pré-inicializar Python com PyPreConfig::
* PyConfig::
* Initialization with PyConfig::
* Isolated Configuration::
* Configuração do Python::
* Python Path Configuration::
* Py_GetArgcArgv(): Py_GetArgcArgv.
* Multi-Phase Initialization Private Provisional API::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0587/


File: python.info,  Node: Exemplo<17>,  Next: PyWideStringList,  Up: Configuração de inicialização do Python

7.10.1 Exemplo
--------------

Exemplo de Python personalizado sendo executado sempre em um modo
isolado:

     int main(int argc, char **argv)
     {
         PyStatus status;

         PyConfig config;
         PyConfig_InitPythonConfig(&config);
         config.isolated = 1;

         /* Decode command line arguments.
            Implicitly preinitialize Python (in isolated mode). */
         status = PyConfig_SetBytesArgv(&config, argc, argv);
         if (PyStatus_Exception(status)) {
             goto exception;
         }

         status = Py_InitializeFromConfig(&config);
         if (PyStatus_Exception(status)) {
             goto exception;
         }
         PyConfig_Clear(&config);

         return Py_RunMain();

     exception:
         PyConfig_Clear(&config);
         if (PyStatus_IsExit(status)) {
             return status.exitcode;
         }
         /* Display the error message and exit the process with
            non-zero exit code */
         Py_ExitStatusException(status);
     }


File: python.info,  Node: PyWideStringList,  Next: PyStatus,  Prev: Exemplo<17>,  Up: Configuração de inicialização do Python

7.10.2 PyWideStringList
-----------------------

 -- C Tipo: type PyWideStringList

     Lista de strings ‘wchar_t*’.

     Se 'length' é diferente de zero, 'items' deve ser diferente de
     ‘NULL’ e todas as strings devem ser diferentes de ‘NULL’.

     Métodos:

      -- C Função: *note PyStatus: 9b5. PyWideStringList_Append
               (PyWideStringList *list, const wchar_t *item)

          Anexa 'item' a 'list'.

          Python deve ser inicializado previamente antes de chamar essa
          função.

      -- C Função: *note PyStatus: 9b5. PyWideStringList_Insert
               (PyWideStringList *list, Py_ssize_t index, const wchar_t
               *item)

          Insere 'item' na 'list' na posição 'index'.

          Se 'index' for maior ou igual ao comprimento da 'list', anexa
          o 'item' a 'list'.

          'index' deve ser maior que ou igual a ‘0’.

          Python deve ser inicializado previamente antes de chamar essa
          função.

     Campos de estrutura:

      -- C Membro: *note Py_ssize_t: a69. length

          Comprimento da lista.

      -- C Membro: wchar_t **items

          Itens da lista.


File: python.info,  Node: PyStatus,  Next: PyPreConfig,  Prev: PyWideStringList,  Up: Configuração de inicialização do Python

7.10.3 PyStatus
---------------

 -- C Tipo: type PyStatus

     Estrutura para armazenar o status de uma função de inicialização:
     sucesso, erro ou saída.

     Para um erro, ela pode armazenar o nome da função C que criou o
     erro.

     Campos de estrutura:

      -- C Membro: int exitcode

          Código de saída.  Argumento passado para ‘exit()’.

      -- C Membro: const char *err_msg

          Mensagem de erro.

      -- C Membro: const char *func

          Nome da função que criou um erro.  Pode ser ‘NULL’.

     Funções para criar um status:

      -- C Função: *note PyStatus: 9b5. PyStatus_Ok (void)

          Sucesso.

      -- C Função: *note PyStatus: 9b5. PyStatus_Error (const char
               *err_msg)

          Erro de inicialização com uma mensagem.

          'err_msg' não deve ser ‘NULL’.

      -- C Função: *note PyStatus: 9b5. PyStatus_NoMemory (void)

          Falha de alocação de memória (sem memória).

      -- C Função: *note PyStatus: 9b5. PyStatus_Exit (int exitcode)

          Sai do Python com o código de saída especificado.

     Funções para manipular um status:

      -- C Função: int PyStatus_Exception (PyStatus status)

          O status é um erro ou uma saída?  Se verdadeiro, a exceção
          deve ser tratada; chamando *note Py_ExitStatusException():
          9ca, por exemplo.

      -- C Função: int PyStatus_IsError (PyStatus status)

          O resultado é um erro?

      -- C Função: int PyStatus_IsExit (PyStatus status)

          O resultado é uma saída?

      -- C Função: void Py_ExitStatusException (PyStatus status)

          Chama ‘exit(exitcode)’ se 'status' for uma saída.  Exibe a
          mensagem de erro e sai com um código de saída diferente de
          zero se 'status' for um erro.  Deve ser chamado apenas se
          ‘PyStatus_Exception(status)’ for diferente de zero.

     Nota: Internamente, Python usa macros que definem ‘PyStatus.func’,
     enquanto funções para criar um status definem ‘func’ para ‘NULL’.

Exemplo:

     PyStatus alloc(void **ptr, size_t size)
     {
         *ptr = PyMem_RawMalloc(size);
         if (*ptr == NULL) {
             return PyStatus_NoMemory();
         }
         return PyStatus_Ok();
     }

     int main(int argc, char **argv)
     {
         void *ptr;
         PyStatus status = alloc(&ptr, 16);
         if (PyStatus_Exception(status)) {
             Py_ExitStatusException(status);
         }
         PyMem_Free(ptr);
         return 0;
     }


File: python.info,  Node: PyPreConfig,  Next: Pré-inicializar Python com PyPreConfig,  Prev: PyStatus,  Up: Configuração de inicialização do Python

7.10.4 PyPreConfig
------------------

 -- C Tipo: type PyPreConfig

     Estrutura usada para pré-inicializar o Python.

     A função para inicializar uma pré-configuração:

      -- C Função: void PyPreConfig_InitPythonConfig (PyPreConfig
               *preconfig)

          Inicializa a pré-configuração com *note Configuração do
          Python: 5190.

      -- C Função: void PyPreConfig_InitIsolatedConfig (PyPreConfig
               *preconfig)

          Inicializa a pré-configuração com *note Configuração isolada:
          51da.

     Campos de estrutura:

      -- C Membro: int allocator

          Nome de alocadores de memória em Python:

             * ‘PYMEM_ALLOCATOR_NOT_SET’ (‘0’): não altera os alocadores
               de memória (usa o padrão).

             * ‘PYMEM_ALLOCATOR_DEFAULT’ (‘1’): *note alocadores de
               memória padrão: 1ed4.

             * ‘PYMEM_ALLOCATOR_DEBUG’ (‘2’): *note alocadores de
               memória padrão: 1ed4. com *note ganchos de depuração:
               1ed7.

             * ‘PYMEM_ALLOCATOR_MALLOC’ (‘3’): usa ‘malloc()’ da
               biblioteca C.

             * ‘PYMEM_ALLOCATOR_MALLOC_DEBUG’ (‘4’): força uso de
               ‘malloc()’ com *note ganchos de depuração: 1ed7.

             * ‘PYMEM_ALLOCATOR_PYMALLOC’ (‘5’): *note alocador de
               memória do Python pymalloc: d31.

             * ‘PYMEM_ALLOCATOR_PYMALLOC_DEBUG’ (‘6’): *note alocador de
               memória deo Python pymalloc: d31. com *note ganchos de
               depuração: 1ed7.

             * ‘PYMEM_ALLOCATOR_MIMALLOC’ (‘6’): usa ‘mimalloc’, um
               substituto rápido do malloc.

             * ‘PYMEM_ALLOCATOR_MIMALLOC_DEBUG’ (‘7’): use ‘mimalloc’,
               um substituto rápido do malloc com *note ganchos de
               depuração: 1ed7.

          ‘PYMEM_ALLOCATOR_PYMALLOC’ e ‘PYMEM_ALLOCATOR_PYMALLOC_DEBUG’
          não são suportados se o Python estiver *note configurado
          usando -without-pymalloc: 1f36.

          ‘PYMEM_ALLOCATOR_MIMALLOC’ e ‘PYMEM_ALLOCATOR_MIMALLOC_DEBUG’
          não são suportados se o Python estiver *note configurado
          usando -without-mimalloc: 1f35. ou se suporte atômico
          subjacente não estiver disponível.

          Veja *note Gerenciamento de memória: 51e5.

          Padrão: ‘PYMEM_ALLOCATOR_NOT_SET’.

      -- C Membro: int configure_locale

          Define a localidade LC_CTYPE para a localidade preferida do
          usuário.

          Se igual a ‘0’, define os membros *note coerce_c_locale: 51e7.
          e *note coerce_c_locale_warn: 51e8. para ‘0’.

          Veja a *note codificação da localidade: 242.

          Padrão: ‘1’ na configuração do Python, ‘0’ na configuração
          isolada.

      -- C Membro: int coerce_c_locale

          Se igual a ‘2’, força a localidade para C.

          Se for igual a ‘1’, lê a localidade LC_CTYPE para decidir se
          deve ser forçado.

          Veja a *note codificação da localidade: 242.

          Padrão: ‘-1’ na configuração do Python, ‘0’ na configuração
          isolada.

      -- C Membro: int coerce_c_locale_warn

          Se diferente de zero, emite um aviso se a localidade C for
          forçada.

          Padrão: ‘-1’ na configuração do Python, ‘0’ na configuração
          isolada.

      -- C Membro: int dev_mode

          *note Modo de desenvolvimento do Python: 1f8.: veja *note
          PyConfig.dev_mode: 51ea.

          Padrão: ‘-1’ no modo do Python, ‘0’ no modo isolado.

      -- C Membro: int isolated

          Modo isolado: veja *note PyConfig.isolated: 3e4.

          Padrão: ‘0’ no modo do Python, ‘1’ no modo isolado.

      -- C Membro: int legacy_windows_fs_encoding

          Se não zero:

             * Define *note PyPreConfig.utf8_mode: 3ea. para ‘0’,

             * Define *note PyConfig.filesystem_encoding: 3e8. para
               ‘"mbcs"’,

             * Define *note PyConfig.filesystem_errors: 3e9. para
               ‘"replace"’.

          Initialized from the *note PYTHONLEGACYWINDOWSFSENCODING: 2af.
          environment variable value.

          Disponível apenas no Windows.  A macro ‘#ifdef MS_WINDOWS’
          pode ser usada para código específico do Windows.

          Padrão: ‘0’.

      -- C Membro: int parse_argv

          Se diferente de zero, *note Py_PreInitializeFromArgs(): 9cb. e
          *note Py_PreInitializeFromBytesArgs(): 9cc. analisam seu
          argumento ‘argv’ da mesma forma que o Python regular analisa
          argumentos de linha de comando: veja *note Argumentos de linha
          de comando: 103d.

          Padrão: ‘1’ na configuração do Python, ‘0’ na configuração
          isolada.

      -- C Membro: int use_environment

          Usar *note variáveis de ambiente: 5f1.?  Veja *note
          PyConfig.use_environment: 3d9.

          Padrão: ‘1’ na configuração do Python e ‘0’ na configuração
          isolada.

      -- C Membro: int utf8_mode

          Se não zero, habilita o *note modo UTF-8 do Python: 656.

          Define para ‘0’ ou ‘1’ pela opção de linha de comando *note -X
          utf8: 176. e a variável de ambiente *note PYTHONUTF8: ae8.

          Também define como ‘1’ se a localidade ‘LC_CTYPE’ for ‘C’ ou
          ‘POSIX’.

          Padrão: ‘-1’ na configuração do Python e ‘0’ na configuração
          isolada.


File: python.info,  Node: Pré-inicializar Python com PyPreConfig,  Next: PyConfig,  Prev: PyPreConfig,  Up: Configuração de inicialização do Python

7.10.5 Pré-inicializar Python com PyPreConfig
---------------------------------------------

A pré-inicialização do Python:

   * Define os alocadores de memória Python (*note
     PyPreConfig.allocator: 51e4.)

   * Configura a localidade LC_CTYPE (*note codificação da localidade:
     242.)

   * Define o *note Modo UTF-8 do Python: 656. (*note
     PyPreConfig.utf8_mode: 3ea.)

A pré-configuração atual (tipo ‘PyPreConfig’) é armazenada em
‘_PyRuntime.preconfig’.

Funções para pré-inicializar Python:

 -- C Função: *note PyStatus: 9b5. Py_PreInitialize (const PyPreConfig
          *preconfig)

     Pré-inicializa o Python a partir da pré-configuração 'preconfig'.

     'preconfig' não pode ser ‘NULL’..

 -- C Função: *note PyStatus: 9b5. Py_PreInitializeFromBytesArgs (const
          PyPreConfig *preconfig, int argc, char *const *argv)

     Pré-inicializa o Python a partir da pré-configuração 'preconfig'.

     Analisa argumentos de linha de comando 'argv' (strings de bytes) se
     *note parse_argv: 51ec. de 'preconfig' for diferente de zero.

     'preconfig' não pode ser ‘NULL’..

 -- C Função: *note PyStatus: 9b5. Py_PreInitializeFromArgs (const
          PyPreConfig *preconfig, int argc, wchar_t *const *argv)

     Pré-inicializa o Python a partir da pré-configuração 'preconfig'.

     Analisa argumentos de linha de comando 'argv' (strings largas) se
     *note parse_argv: 51ec. de 'preconfig' for diferente de zero.

     'preconfig' não pode ser ‘NULL’..

O chamador é responsável por manipular exceções (erro ou saída) usando
*note PyStatus_Exception(): 9c1. e *note Py_ExitStatusException(): 9ca.

Para *note configuração do Python: 5190. (*note
PyPreConfig_InitPythonConfig(): 9bf.), se o Python for inicializado com
argumentos de linha de comando, os argumentos de linha de comando também
devem ser passados para pré-inicializar o Python, pois eles têm um
efeito na pré-configuração como codificações.  Por exemplo, a opção de
linha de comando *note -X utf8: 176. habilita o *note Modo UTF-8 do
Python: 656.

‘PyMem_SetAllocator()’ pode ser chamado depois de *note
Py_PreInitialize(): 3eb. e antes de *note Py_InitializeFromConfig():
3c5. para instalar um alocador de memória personalizado.  Ele pode ser
chamado antes de *note Py_PreInitialize(): 3eb. se *note
PyPreConfig.allocator: 51e4. estiver definido como
‘PYMEM_ALLOCATOR_NOT_SET’.

Funções de alocação de memória do Python como *note PyMem_RawMalloc():
390. não devem ser usadas antes da pré-inicialização do Python, enquanto
chamar diretamente ‘malloc()’ e ‘free()’ é sempre seguro.  *note
Py_DecodeLocale(): be0. não deve ser chamado antes da pré-inicialização
do Python.

Exemplo usando a pré-inicialização para habilitar o *note modo UTF-8 do
Python: 656.

     PyStatus status;
     PyPreConfig preconfig;
     PyPreConfig_InitPythonConfig(&preconfig);

     preconfig.utf8_mode = 1;

     status = Py_PreInitialize(&preconfig);
     if (PyStatus_Exception(status)) {
         Py_ExitStatusException(status);
     }

     /* at this point, Python speaks UTF-8 */

     Py_Initialize();
     /* ... use Python API here ... */
     Py_Finalize();


File: python.info,  Node: PyConfig,  Next: Initialization with PyConfig,  Prev: Pré-inicializar Python com PyPreConfig,  Up: Configuração de inicialização do Python

7.10.6 PyConfig
---------------

 -- C Tipo: type PyConfig

     Estrutura contendo a maioria dos parâmetros para configurar o
     Python.

     Ao terminar, a função *note PyConfig_Clear(): 9b7. deve ser usada
     para liberar a memória de configuração.

     Structure methods:

      -- C Função: void PyConfig_InitPythonConfig (PyConfig *config)

          Initialize configuration with the *note Python Configuration:
          5190.

      -- C Função: void PyConfig_InitIsolatedConfig (PyConfig *config)

          Initialize configuration with the *note Isolated
          Configuration: 51da.

      -- C Função: *note PyStatus: 9b5. PyConfig_SetString (PyConfig
               *config, wchar_t *const *config_str, const wchar_t *str)

          Copy the wide character string 'str' into ‘*config_str’.

          *note Preinitialize Python: 3f80. if needed.

      -- C Função: *note PyStatus: 9b5. PyConfig_SetBytesString
               (PyConfig *config, wchar_t *const *config_str, const char
               *str)

          Decode 'str' using *note Py_DecodeLocale(): be0. and set the
          result into ‘*config_str’.

          *note Preinitialize Python: 3f80. if needed.

      -- C Função: *note PyStatus: 9b5. PyConfig_SetArgv (PyConfig
               *config, int argc, wchar_t *const *argv)

          Set command line arguments (*note argv: 3c3. member of
          'config') from the 'argv' list of wide character strings.

          *note Preinitialize Python: 3f80. if needed.

      -- C Função: *note PyStatus: 9b5. PyConfig_SetBytesArgv (PyConfig
               *config, int argc, char *const *argv)

          Set command line arguments (*note argv: 3c3. member of
          'config') from the 'argv' list of bytes strings.  Decode bytes
          using *note Py_DecodeLocale(): be0.

          *note Preinitialize Python: 3f80. if needed.

      -- C Função: *note PyStatus: 9b5. PyConfig_SetWideStringList
               (PyConfig *config, PyWideStringList *list, Py_ssize_t
               length, wchar_t **items)

          Set the list of wide strings 'list' to 'length' and 'items'.

          *note Preinitialize Python: 3f80. if needed.

      -- C Função: *note PyStatus: 9b5. PyConfig_Read (PyConfig *config)

          Lê toda a configuração do Python.

          Campos que já estão inicializados permanecem inalterados.

          Fields for *note path configuration: 8b2. are no longer
          calculated or modified when calling this function, as of
          Python 3.11.

          The *note PyConfig_Read(): 790. function only parses *note
          PyConfig.argv: 3c3. arguments once: *note PyConfig.parse_argv:
          1a7e. is set to ‘2’ after arguments are parsed.  Since Python
          arguments are stripped from *note PyConfig.argv: 3c3, parsing
          arguments twice would parse the application options as Python
          options.

          *note Preinitialize Python: 3f80. if needed.

          Alterado na versão 3.10: The *note PyConfig.argv: 3c3.
          arguments are now only parsed once, *note PyConfig.parse_argv:
          1a7e. is set to ‘2’ after arguments are parsed, and arguments
          are only parsed if *note PyConfig.parse_argv: 1a7e. equals
          ‘1’.

          Alterado na versão 3.11: *note PyConfig_Read(): 790. no longer
          calculates all paths, and so fields listed under *note Python
          Path Configuration: 8b2. may no longer be updated until *note
          Py_InitializeFromConfig(): 3c5. is called.

      -- C Função: void PyConfig_Clear (PyConfig *config)

          Libera memória de configuração.

     Most ‘PyConfig’ methods *note preinitialize Python: 3f80. if
     needed.  In that case, the Python preinitialization configuration
     (*note PyPreConfig: 9b4.) in based on the *note PyConfig: 3a6.  If
     configuration fields which are in common with *note PyPreConfig:
     9b4. are tuned, they must be set before calling a *note PyConfig:
     3a6. method:

        * *note PyConfig.dev_mode: 51ea.

        * *note PyConfig.isolated: 3e4.

        * *note PyConfig.parse_argv: 1a7e.

        * *note PyConfig.use_environment: 3d9.

     Moreover, if *note PyConfig_SetArgv(): 9ba. or *note
     PyConfig_SetBytesArgv(): 9bb. is used, this method must be called
     before other methods, since the preinitialization configuration
     depends on command line arguments (if *note parse_argv: 1a7e. is
     non-zero).

     The caller of these methods is responsible to handle exceptions
     (error or exit) using ‘PyStatus_Exception()’ and
     ‘Py_ExitStatusException()’.

     Campos de estrutura:

      -- C Membro: *note PyWideStringList: 9b6. argv

          Set *note sys.argv: 12a6. command line arguments based on
          *note argv: 3c3.  These parameters are similar to those passed
          to the program’s ‘main()’ function with the difference that
          the first entry should refer to the script file to be executed
          rather than the executable hosting the Python interpreter.  If
          there isn’t a script that will be run, the first entry in
          *note argv: 3c3. can be an empty string.

          Set *note parse_argv: 1a7e. to ‘1’ to parse *note argv: 3c3.
          the same way the regular Python parses Python command line
          arguments and then to strip Python arguments from *note argv:
          3c3.

          If *note argv: 3c3. is empty, an empty string is added to
          ensure that *note sys.argv: 12a6. always exists and is never
          empty.

          Padrão: ‘NULL’.

          See also the *note orig_argv: 898. member.

      -- C Membro: int safe_path

          If equals to zero, ‘Py_RunMain()’ prepends a potentially
          unsafe path to *note sys.path: 3b4. at startup:

             * If *note argv[0]: 3c3. is equal to ‘L"-m"’ (‘python -m
               module’), prepend the current working directory.

             * If running a script (‘python script.py’), prepend the
               script’s directory.  If it’s a symbolic link, resolve
               symbolic links.

             * Otherwise (‘python -c code’ and ‘python’), prepend an
               empty string, which means the current working directory.

          Set to ‘1’ by the *note -P: 5a4. command line option and the
          *note PYTHONSAFEPATH: 5a5. environment variable.

          Default: ‘0’ in Python config, ‘1’ in isolated config.

          Adicionado na versão 3.11.

      -- C Membro: wchar_t *base_exec_prefix

          *note sys.base_exec_prefix: 3ee.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: 8b2. output.

          Veja também *note PyConfig.exec_prefix: 51f1.

      -- C Membro: wchar_t *base_executable

          Python base executable: ‘sys._base_executable’.

          Set by the ‘__PYVENV_LAUNCHER__’ environment variable.

          Set from *note PyConfig.executable: 3a5. if ‘NULL’.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: 8b2. output.

          See also *note PyConfig.executable: 3a5.

      -- C Membro: wchar_t *base_prefix

          *note sys.base_prefix: 3ef.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: 8b2. output.

          See also *note PyConfig.prefix: 51f4.

      -- C Membro: int buffered_stdio

          If equals to ‘0’ and *note configure_c_stdio: 51f5. is
          non-zero, disable buffering on the C streams stdout and
          stderr.

          Set to ‘0’ by the *note -u: 1b1c. command line option and the
          *note PYTHONUNBUFFERED: 1b1d. environment variable.

          stdin is always opened in buffered mode.

          Padrão: ‘1’.

      -- C Membro: int bytes_warning

          If equals to ‘1’, issue a warning when comparing *note bytes:
          1c2. or *note bytearray: 2ea. with *note str: 44c, or
          comparing *note bytes: 1c2. with *note int: 257.

          If equal or greater to ‘2’, raise a *note BytesWarning: c3d.
          exception in these cases.

          Incremented by the *note -b: 5e3. command line option.

          Padrão: ‘0’.

      -- C Membro: int warn_default_encoding

          If non-zero, emit a *note EncodingWarning: 1ec5. warning when
          *note io.TextIOWrapper: 7bc. uses its default encoding.  See
          *note Ativar EncodingWarning: 1ed9. for details.

          Padrão: ‘0’.

          Adicionado na versão 3.10.

      -- C Membro: int code_debug_ranges

          If equals to ‘0’, disables the inclusion of the end line and
          column mappings in code objects.  Also disables traceback
          printing carets to specific error locations.

          Set to ‘0’ by the *note PYTHONNODEBUGRANGES: 5b6. environment
          variable and by the *note -X no_debug_ranges: 176. command
          line option.

          Padrão: ‘1’.

          Adicionado na versão 3.11.

      -- C Membro: wchar_t *check_hash_pycs_mode

          Control the validation behavior of hash-based ‘.pyc’ files:
          value of the *note -check-hash-based-pycs: 1eba. command line
          option.

          Valores válidos:

             - ‘L"always"’: Hash the source file for invalidation
               regardless of value of the ‘check_source’ flag.

             - ‘L"never"’: Assume that hash-based pycs always are valid.

             - ‘L"default"’: The ‘check_source’ flag in hash-based pycs
               determines invalidation.

          Default: ‘L"default"’.

          See also PEP 552(1) “Deterministic pycs”.

      -- C Membro: int configure_c_stdio

          If non-zero, configure C standard streams:

             * On Windows, set the binary mode (‘O_BINARY’) on stdin,
               stdout and stderr.

             * If *note buffered_stdio: 3df. equals zero, disable
               buffering of stdin, stdout and stderr streams.

             * If *note interactive: 3cd. is non-zero, enable stream
               buffering on stdin and stdout (only stdout on Windows).

          Padrão: ‘1’ na configuração do Python, ‘0’ na configuração
          isolada.

      -- C Membro: int dev_mode

          If non-zero, enable the *note Python Development Mode: 1f8.

          Set to ‘1’ by the *note -X dev: 176. option and the *note
          PYTHONDEVMODE: b00. environment variable.

          Padrão: ‘-1’ no modo do Python, ‘0’ no modo isolado.

      -- C Membro: int dump_refs

          Dump Python references?

          If non-zero, dump all objects which are still alive at exit.

          Set to ‘1’ by the *note PYTHONDUMPREFS: 9ae. environment
          variable.

          Needs a special build of Python with the ‘Py_TRACE_REFS’ macro
          defined: see the *note configure -with-trace-refs option: 395.

          Padrão: ‘0’.

      -- C Membro: wchar_t *exec_prefix

          The site-specific directory prefix where the
          platform-dependent Python files are installed: *note
          sys.exec_prefix: 3b2.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: 8b2. output.

          See also *note PyConfig.base_exec_prefix: 51f0.

      -- C Membro: wchar_t *executable

          The absolute path of the executable binary for the Python
          interpreter: *note sys.executable: 3b8.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: 8b2. output.

          See also *note PyConfig.base_executable: 51f2.

      -- C Membro: int faulthandler

          Enable faulthandler?

          If non-zero, call *note faulthandler.enable(): cbe. at
          startup.

          Set to ‘1’ by *note -X faulthandler: 176. and the *note
          PYTHONFAULTHANDLER: 10be. environment variable.

          Padrão: ‘-1’ no modo do Python, ‘0’ no modo isolado.

      -- C Membro: wchar_t *filesystem_encoding

          *note Filesystem encoding: 53b.: *note
          sys.getfilesystemencoding(): c74.

          On macOS, Android and VxWorks: use ‘"utf-8"’ by default.

          On Windows: use ‘"utf-8"’ by default, or ‘"mbcs"’ if *note
          legacy_windows_fs_encoding: 3e6. of *note PyPreConfig: 9b4. is
          non-zero.

          Default encoding on other platforms:

             * ‘"utf-8"’ if *note PyPreConfig.utf8_mode: 3ea. is
               non-zero.

             * ‘"ascii"’ if Python detects that ‘nl_langinfo(CODESET)’
               announces the ASCII encoding, whereas the ‘mbstowcs()’
               function decodes from a different encoding (usually
               Latin1).

             * ‘"utf-8"’ if ‘nl_langinfo(CODESET)’ returns an empty
               string.

             * Otherwise, use the *note locale encoding: 242.:
               ‘nl_langinfo(CODESET)’ result.

          At Python startup, the encoding name is normalized to the
          Python codec name.  For example, ‘"ANSI_X3.4-1968"’ is
          replaced with ‘"ascii"’.

          See also the *note filesystem_errors: 3e9. member.

      -- C Membro: wchar_t *filesystem_errors

          *note Filesystem error handler: 53b.: *note
          sys.getfilesystemencodeerrors(): d07.

          On Windows: use ‘"surrogatepass"’ by default, or ‘"replace"’
          if *note legacy_windows_fs_encoding: 3e6. of *note
          PyPreConfig: 9b4. is non-zero.

          On other platforms: use ‘"surrogateescape"’ by default.

          Supported error handlers:

             * ‘"strict"’

             * ‘"surrogateescape"’

             * ‘"surrogatepass"’ (only supported with the UTF-8
               encoding)

          See also the *note filesystem_encoding: 3e8. member.

      -- C Membro: unsigned long hash_seed

      -- C Membro: int use_hash_seed

          Randomized hash function seed.

          If *note use_hash_seed: 3e1. is zero, a seed is chosen
          randomly at Python startup, and *note hash_seed: 3e2. is
          ignored.

          Set by the *note PYTHONHASHSEED: 10b6. environment variable.

          Default 'use_hash_seed' value: ‘-1’ in Python mode, ‘0’ in
          isolated mode.

      -- C Membro: wchar_t *home

          Set the default Python “home” directory, that is, the location
          of the standard Python libraries (see *note PYTHONHOME: 3bc.).

          Set by the *note PYTHONHOME: 3bc. environment variable.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: 8b2. input.

      -- C Membro: int import_time

          If non-zero, profile import time.

          Set the ‘1’ by the *note -X importtime: 176. option and the
          *note PYTHONPROFILEIMPORTTIME: b08. environment variable.

          Padrão: ‘0’.

      -- C Membro: int inspect

          Enter interactive mode after executing a script or a command.

          If greater than ‘0’, enable inspect: when a script is passed
          as first argument or the -c option is used, enter interactive
          mode after executing the script or the command, even when
          *note sys.stdin: 53d. does not appear to be a terminal.

          Incremented by the *note -i: 1523. command line option.  Set
          to ‘1’ if the *note PYTHONINSPECT: 1522. environment variable
          is non-empty.

          Padrão: ‘0’.

      -- C Membro: int install_signal_handlers

          Install Python signal handlers?

          Default: ‘1’ in Python mode, ‘0’ in isolated mode.

      -- C Membro: int interactive

          If greater than ‘0’, enable the interactive mode (REPL).

          Incremented by the *note -i: 1523. command line option.

          Padrão: ‘0’.

      -- C Membro: int int_max_str_digits

          Configures the *note integer string conversion length
          limitation: 5f5.  An initial value of ‘-1’ means the value
          will be taken from the command line or environment or
          otherwise default to 4300 (*note
          sys.int_info.default_max_str_digits: 2411.).  A value of ‘0’
          disables the limitation.  Values greater than zero but less
          than 640 (*note sys.int_info.str_digits_check_threshold:
          45ca.) are unsupported and will produce an error.

          Configured by the *note -X int_max_str_digits: 176. command
          line flag or the *note PYTHONINTMAXSTRDIGITS: 18c2.
          environment variable.

          Default: ‘-1’ in Python mode.  4300 (*note
          sys.int_info.default_max_str_digits: 2411.) in isolated mode.

          Adicionado na versão 3.12.

      -- C Membro: int cpu_count

          If the value of *note cpu_count: 51fd. is not ‘-1’ then it
          will override the return values of *note os.cpu_count(): 1c5,
          *note os.process_cpu_count(): 1c4, and *note
          multiprocessing.cpu_count(): fa3.

          Configured by the ‘-X cpu_count=N|DEFAULT’ command line flag
          or the *note PYTHON_CPU_COUNT: 210. environment variable.

          Default: ‘-1’.

          Adicionado na versão 3.13.

      -- C Membro: int isolated

          If greater than ‘0’, enable isolated mode:

             * Set *note safe_path: 773. to ‘1’: don’t prepend a
               potentially unsafe path to *note sys.path: 3b4. at Python
               startup, such as the current directory, the script’s
               directory or an empty string.

             * Set *note use_environment: 3d9. to ‘0’: ignore ‘PYTHON’
               environment variables.

             * Set *note user_site_directory: 3dd. to ‘0’: don’t add the
               user site directory to *note sys.path: 3b4.

             * Python REPL doesn’t import *note readline: ba. nor enable
               default readline configuration on interactive prompts.

          Set to ‘1’ by the *note -I: 965. command line option.

          Padrão: ‘0’ no modo do Python, ‘1’ no modo isolado.

          See also the *note Isolated Configuration: 51da. and *note
          PyPreConfig.isolated: 51eb.

      -- C Membro: int legacy_windows_stdio

          If non-zero, use *note io.FileIO: 1354. instead of
          ‘io._WindowsConsoleIO’ for *note sys.stdin: 53d, *note
          sys.stdout: ae6. and *note sys.stderr: 940.

          Definida como ‘1’ se a variável de ambiente *note
          PYTHONLEGACYWINDOWSSTDIO: c76. estiver definida como uma
          string não vazia.

          Disponível apenas no Windows.  A macro ‘#ifdef MS_WINDOWS’
          pode ser usada para código específico do Windows.

          Padrão: ‘0’.

          See also the PEP 528(2) (Change Windows console encoding to
          UTF-8).

      -- C Membro: int malloc_stats

          If non-zero, dump statistics on *note Python pymalloc memory
          allocator: d31. at exit.

          Set to ‘1’ by the *note PYTHONMALLOCSTATS: 1cd0. environment
          variable.

          The option is ignored if Python is *note configured using the
          -without-pymalloc option: 1f36.

          Padrão: ‘0’.

      -- C Membro: wchar_t *platlibdir

          Platform library directory name: *note sys.platlibdir: 93f.

          Set by the *note PYTHONPLATLIBDIR: 1ab0. environment variable.

          Default: value of the ‘PLATLIBDIR’ macro which is set by the
          *note configure -with-platlibdir option: 1efe. (default:
          ‘"lib"’, or ‘"DLLs"’ on Windows).

          Part of the *note Python Path Configuration: 8b2. input.

          Adicionado na versão 3.9.

          Alterado na versão 3.11: This macro is now used on Windows to
          locate the standard library extension modules, typically under
          ‘DLLs’.  However, for compatibility, note that this value is
          ignored for any non-standard layouts, including in-tree builds
          and virtual environments.

      -- C Membro: wchar_t *pythonpath_env

          Module search paths (*note sys.path: 3b4.) as a string
          separated by ‘DELIM’ (*note os.pathsep: 1ecc.).

          Set by the *note PYTHONPATH: 1053. environment variable.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: 8b2. input.

      -- C Membro: *note PyWideStringList: 9b6. module_search_paths

      -- C Membro: int module_search_paths_set

          Module search paths: *note sys.path: 3b4.

          If *note module_search_paths_set: 5ef. is equal to ‘0’, *note
          Py_InitializeFromConfig(): 3c5. will replace *note
          module_search_paths: 3a2. and sets *note
          module_search_paths_set: 5ef. to ‘1’.

          Default: empty list (‘module_search_paths’) and ‘0’
          (‘module_search_paths_set’).

          Part of the *note Python Path Configuration: 8b2. output.

      -- C Membro: int optimization_level

          Compilation optimization level:

             * ‘0’: Peephole optimizer, set ‘__debug__’ to ‘True’.

             * ‘1’: Level 0, remove assertions, set ‘__debug__’ to
               ‘False’.

             * ‘2’: Level 1, strip docstrings.

          Incremented by the *note -O: ddd. command line option.  Set to
          the *note PYTHONOPTIMIZE: 1ebd. environment variable value.

          Padrão: ‘0’.

      -- C Membro: *note PyWideStringList: 9b6. orig_argv

          The list of the original command line arguments passed to the
          Python executable: *note sys.orig_argv: 843.

          If *note orig_argv: 898. list is empty and *note argv: 3c3. is
          not a list only containing an empty string, *note
          PyConfig_Read(): 790. copies *note argv: 3c3. into *note
          orig_argv: 898. before modifying *note argv: 3c3. (if *note
          parse_argv: 1a7e. is non-zero).

          See also the *note argv: 3c3. member and the *note
          Py_GetArgcArgv(): 1ace. function.

          Padrão: lista vazia.

          Adicionado na versão 3.10.

      -- C Membro: int parse_argv

          Parse command line arguments?

          If equals to ‘1’, parse *note argv: 3c3. the same way the
          regular Python parses *note command line arguments: 103d, and
          strip Python arguments from *note argv: 3c3.

          The *note PyConfig_Read(): 790. function only parses *note
          PyConfig.argv: 3c3. arguments once: *note PyConfig.parse_argv:
          1a7e. is set to ‘2’ after arguments are parsed.  Since Python
          arguments are stripped from *note PyConfig.argv: 3c3, parsing
          arguments twice would parse the application options as Python
          options.

          Default: ‘1’ in Python mode, ‘0’ in isolated mode.

          Alterado na versão 3.10: The *note PyConfig.argv: 3c3.
          arguments are now only parsed if *note PyConfig.parse_argv:
          1a7e. equals to ‘1’.

      -- C Membro: int parser_debug

          Parser debug mode.  If greater than ‘0’, turn on parser
          debugging output (for expert only, depending on compilation
          options).

          Incremented by the *note -d: 1ebb. command line option.  Set
          to the *note PYTHONDEBUG: 1ebc. environment variable value.

          Needs a *note debug build of Python: 1f9. (the ‘Py_DEBUG’
          macro must be defined).

          Padrão: ‘0’.

      -- C Membro: int pathconfig_warnings

          If non-zero, calculation of path configuration is allowed to
          log warnings into ‘stderr’.  If equals to ‘0’, suppress these
          warnings.

          Default: ‘1’ in Python mode, ‘0’ in isolated mode.

          Part of the *note Python Path Configuration: 8b2. input.

          Alterado na versão 3.11: Now also applies on Windows.

      -- C Membro: wchar_t *prefix

          The site-specific directory prefix where the platform
          independent Python files are installed: *note sys.prefix: 3b6.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: 8b2. output.

          See also *note PyConfig.base_prefix: 51f3.

      -- C Membro: wchar_t *program_name

          Program name used to initialize *note executable: 3a5. and in
          early error messages during Python initialization.

             * On macOS, use *note PYTHONEXECUTABLE: 1ed1. environment
               variable if set.

             * If the ‘WITH_NEXT_FRAMEWORK’ macro is defined, use
               ‘__PYVENV_LAUNCHER__’ environment variable if set.

             * Use ‘argv[0]’ of *note argv: 3c3. if available and
               non-empty.

             * Otherwise, use ‘L"python"’ on Windows, or ‘L"python3"’ on
               other platforms.

          Padrão: ‘NULL’.

          Part of the *note Python Path Configuration: 8b2. input.

      -- C Membro: wchar_t *pycache_prefix

          Directory where cached ‘.pyc’ files are written: *note
          sys.pycache_prefix: 9ac.

          Set by the *note -X pycache_prefix=PATH: 176. command line
          option and the *note PYTHONPYCACHEPREFIX: 9ab. environment
          variable.  The command-line option takes precedence.

          If ‘NULL’, *note sys.pycache_prefix: 9ac. is set to ‘None’.

          Padrão: ‘NULL’.

      -- C Membro: int quiet

          Quiet mode.  If greater than ‘0’, don’t display the copyright
          and version at Python startup in interactive mode.

          Incremented by the *note -q: 15a5. command line option.

          Padrão: ‘0’.

      -- C Membro: wchar_t *run_command

          Value of the *note -c: 5e0. command line option.

          Used by *note Py_RunMain(): 9cd.

          Padrão: ‘NULL’.

      -- C Membro: wchar_t *run_filename

          Filename passed on the command line: trailing command line
          argument without *note -c: 5e0. or *note -m: 5e1.  It is used
          by the *note Py_RunMain(): 9cd. function.

          For example, it is set to ‘script.py’ by the ‘python3
          script.py arg’ command line.

          See also the *note PyConfig.skip_source_first_line: 5201.
          option.

          Padrão: ‘NULL’.

      -- C Membro: wchar_t *run_module

          Value of the *note -m: 5e1. command line option.

          Used by *note Py_RunMain(): 9cd.

          Padrão: ‘NULL’.

      -- C Membro: wchar_t *run_presite

          ‘package.module’ path to module that should be imported before
          ‘site.py’ is run.

          Set by the *note -X presite=package.module: 176. command-line
          option and the *note PYTHON_PRESITE: 1ec6. environment
          variable.  The command-line option takes precedence.

          Needs a *note debug build of Python: 1f9. (the ‘Py_DEBUG’
          macro must be defined).

          Padrão: ‘NULL’.

      -- C Membro: int show_ref_count

          Show total reference count at exit (excluding *note immortal:
          45bb. objects)?

          Set to ‘1’ by *note -X showrefcount: 176. command line option.

          Needs a *note debug build of Python: 1f9. (the ‘Py_REF_DEBUG’
          macro must be defined).

          Padrão: ‘0’.

      -- C Membro: int site_import

          Import the *note site: c7. module at startup?

          If equal to zero, disable the import of the module site and
          the site-dependent manipulations of *note sys.path: 3b4. that
          it entails.

          Also disable these manipulations if the *note site: c7. module
          is explicitly imported later (call *note site.main(): 1ebe. if
          you want them to be triggered).

          Set to ‘0’ by the *note -S: 11e7. command line option.

          *note sys.flags.no_site: 68c. is set to the inverted value of
          *note site_import: 3d3.

          Padrão: ‘1’.

      -- C Membro: int skip_source_first_line

          If non-zero, skip the first line of the *note
          PyConfig.run_filename: 518e. source.

          It allows the usage of non-Unix forms of ‘#!cmd’.  This is
          intended for a DOS specific hack only.

          Set to ‘1’ by the *note -x: 1ec2. command line option.

          Padrão: ‘0’.

      -- C Membro: wchar_t *stdio_encoding

      -- C Membro: wchar_t *stdio_errors

          Encoding and encoding errors of *note sys.stdin: 53d, *note
          sys.stdout: ae6. and *note sys.stderr: 940. (but *note
          sys.stderr: 940. always uses ‘"backslashreplace"’ error
          handler).

          Use the *note PYTHONIOENCODING: 1040. environment variable if
          it is non-empty.

          Codificação padrão:

             * ‘"UTF-8"’ if *note PyPreConfig.utf8_mode: 3ea. is
               non-zero.

             * Otherwise, use the *note locale encoding: 242.

          Tratador de erros padrão:

             * On Windows: use ‘"surrogateescape"’.

             * ‘"surrogateescape"’ if *note PyPreConfig.utf8_mode: 3ea.
               is non-zero, or if the LC_CTYPE locale is “C” or “POSIX”.

             * ‘"strict"’ otherwise.

          See also *note PyConfig.legacy_windows_stdio: 3a4.

      -- C Membro: int tracemalloc

          Enable tracemalloc?

          If non-zero, call *note tracemalloc.start(): 1ec3. at startup.

          Set by *note -X tracemalloc=N: 176. command line option and by
          the *note PYTHONTRACEMALLOC: 1ec4. environment variable.

          Padrão: ‘-1’ no modo do Python, ‘0’ no modo isolado.

      -- C Membro: int perf_profiling

          Enable compatibility mode with the perf profiler?

          If non-zero, initialize the perf trampoline.  See *note
          Suporte do Python ao perfilador perf do Linux: 18f. for more
          information.

          Set by *note -X perf: 176. command-line option and by the
          *note PYTHON_PERF_JIT_SUPPORT: 190. environment variable for
          perf support with stack pointers and *note -X perf_jit: 176.
          command-line option and by the *note PYTHON_PERF_JIT_SUPPORT:
          190. environment variable for perf support with DWARF JIT
          information.

          Default: ‘-1’.

          Adicionado na versão 3.12.

      -- C Membro: int use_environment

          Use *note environment variables: 5f1.?

          If equals to zero, ignore the *note environment variables:
          5f1.

          Set to ‘0’ by the *note -E: 964. environment variable.

          Padrão: ‘1’ na configuração do Python e ‘0’ na configuração
          isolada.

      -- C Membro: int user_site_directory

          If non-zero, add the user site directory to *note sys.path:
          3b4.

          Set to ‘0’ by the *note -s: 13d5. and *note -I: 965. command
          line options.

          Set to ‘0’ by the *note PYTHONNOUSERSITE: 13d6. environment
          variable.

          Default: ‘1’ in Python mode, ‘0’ in isolated mode.

      -- C Membro: int verbose

          Verbose mode.  If greater than ‘0’, print a message each time
          a module is imported, showing the place (filename or built-in
          module) from which it is loaded.

          If greater than or equal to ‘2’, print a message for each file
          that is checked for when searching for a module.  Also
          provides information on module cleanup at exit.

          Incremented by the *note -v: 146c. command line option.

          Set by the *note PYTHONVERBOSE: 1ebf. environment variable
          value.

          Padrão: ‘0’.

      -- C Membro: *note PyWideStringList: 9b6. warnoptions

          Options of the *note warnings: 112. module to build warnings
          filters, lowest to highest priority: *note sys.warnoptions:
          3b0.

          The *note warnings: 112. module adds *note sys.warnoptions:
          3b0. in the reverse order: the last *note
          PyConfig.warnoptions: 3a0. item becomes the first item of
          ‘warnings.filters’ which is checked first (highest priority).

          The *note -W: 8cd. command line options adds its value to
          *note warnoptions: 3a0, it can be used multiple times.

          The *note PYTHONWARNINGS: bc2. environment variable can also
          be used to add warning options.  Multiple options can be
          specified, separated by commas (‘,’).

          Padrão: lista vazia.

      -- C Membro: int write_bytecode

          If equal to ‘0’, Python won’t try to write ‘.pyc’ files on the
          import of source modules.

          Set to ‘0’ by the *note -B: 1414. command line option and the
          *note PYTHONDONTWRITEBYTECODE: 1415. environment variable.

          *note sys.dont_write_bytecode: 4595. is initialized to the
          inverted value of *note write_bytecode: 3db.

          Padrão: ‘1’.

      -- C Membro: *note PyWideStringList: 9b6. xoptions

          Values of the *note -X: 176. command line options: *note
          sys._xoptions: 1ec7.

          Padrão: lista vazia.

If *note parse_argv: 1a7e. is non-zero, *note argv: 3c3. arguments are
parsed the same way the regular Python parses *note command line
arguments: 103d, and Python arguments are stripped from *note argv: 3c3.

The *note xoptions: 3a1. options are parsed to set other options: see
the *note -X: 176. command line option.

Alterado na versão 3.9: The ‘show_alloc_count’ field has been removed.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0552/

   (2) https://peps.python.org/pep-0528/


File: python.info,  Node: Initialization with PyConfig,  Next: Isolated Configuration,  Prev: PyConfig,  Up: Configuração de inicialização do Python

7.10.7 Initialization with PyConfig
-----------------------------------

Initializing the interpreter from a populated configuration struct is
handled by calling *note Py_InitializeFromConfig(): 3c5.

O chamador é responsável por manipular exceções (erro ou saída) usando
*note PyStatus_Exception(): 9c1. e *note Py_ExitStatusException(): 9ca.

If *note PyImport_FrozenModules(): 3000, *note PyImport_AppendInittab():
18a4. or *note PyImport_ExtendInittab(): 18a5. are used, they must be
set or called after Python preinitialization and before the Python
initialization.  If Python is initialized multiple times, *note
PyImport_AppendInittab(): 18a4. or *note PyImport_ExtendInittab(): 18a5.
must be called before each Python initialization.

The current configuration (‘PyConfig’ type) is stored in
‘PyInterpreterState.config’.

Example setting the program name:

     void init_python(void)
     {
         PyStatus status;

         PyConfig config;
         PyConfig_InitPythonConfig(&config);

         /* Set the program name. Implicitly preinitialize Python. */
         status = PyConfig_SetString(&config, &config.program_name,
                                     L"/path/to/my_program");
         if (PyStatus_Exception(status)) {
             goto exception;
         }

         status = Py_InitializeFromConfig(&config);
         if (PyStatus_Exception(status)) {
             goto exception;
         }
         PyConfig_Clear(&config);
         return;

     exception:
         PyConfig_Clear(&config);
         Py_ExitStatusException(status);
     }

More complete example modifying the default configuration, read the
configuration, and then override some parameters.  Note that since 3.11,
many parameters are not calculated until initialization, and so values
cannot be read from the configuration structure.  Any values set before
initialize is called will be left unchanged by initialization:

     PyStatus init_python(const char *program_name)
     {
         PyStatus status;

         PyConfig config;
         PyConfig_InitPythonConfig(&config);

         /* Set the program name before reading the configuration
            (decode byte string from the locale encoding).

            Implicitly preinitialize Python. */
         status = PyConfig_SetBytesString(&config, &config.program_name,
                                          program_name);
         if (PyStatus_Exception(status)) {
             goto done;
         }

         /* Read all configuration at once */
         status = PyConfig_Read(&config);
         if (PyStatus_Exception(status)) {
             goto done;
         }

         /* Specify sys.path explicitly */
         /* If you want to modify the default set of paths, finish
            initialization first and then use PySys_GetObject("path") */
         config.module_search_paths_set = 1;
         status = PyWideStringList_Append(&config.module_search_paths,
                                          L"/path/to/stdlib");
         if (PyStatus_Exception(status)) {
             goto done;
         }
         status = PyWideStringList_Append(&config.module_search_paths,
                                          L"/path/to/more/modules");
         if (PyStatus_Exception(status)) {
             goto done;
         }

         /* Override executable computed by PyConfig_Read() */
         status = PyConfig_SetString(&config, &config.executable,
                                     L"/path/to/my_executable");
         if (PyStatus_Exception(status)) {
             goto done;
         }

         status = Py_InitializeFromConfig(&config);

     done:
         PyConfig_Clear(&config);
         return status;
     }


File: python.info,  Node: Isolated Configuration,  Next: Configuração do Python,  Prev: Initialization with PyConfig,  Up: Configuração de inicialização do Python

7.10.8 Isolated Configuration
-----------------------------

*note PyPreConfig_InitIsolatedConfig(): 9be. and *note
PyConfig_InitIsolatedConfig(): 9b8. functions create a configuration to
isolate Python from the system.  For example, to embed Python into an
application.

This configuration ignores global configuration variables, environment
variables, command line arguments (*note PyConfig.argv: 3c3. is not
parsed) and user site directory.  The C standard streams (ex: ‘stdout’)
and the LC_CTYPE locale are left unchanged.  Signal handlers are not
installed.

Configuration files are still used with this configuration to determine
paths that are unspecified.  Ensure *note PyConfig.home: 3bb. is
specified to avoid computing the default path configuration.


File: python.info,  Node: Configuração do Python,  Next: Python Path Configuration,  Prev: Isolated Configuration,  Up: Configuração de inicialização do Python

7.10.9 Configuração do Python
-----------------------------

*note PyPreConfig_InitPythonConfig(): 9bf. and *note
PyConfig_InitPythonConfig(): 9b9. functions create a configuration to
build a customized Python which behaves as the regular Python.

Environments variables and command line arguments are used to configure
Python, whereas global configuration variables are ignored.

This function enables C locale coercion ( PEP 538(1)) and *note Python
UTF-8 Mode: 656. ( PEP 540(2)) depending on the LC_CTYPE locale, *note
PYTHONUTF8: ae8. and *note PYTHONCOERCECLOCALE: ae5. environment
variables.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0538/

   (2) https://peps.python.org/pep-0540/


File: python.info,  Node: Python Path Configuration,  Next: Py_GetArgcArgv,  Prev: Configuração do Python,  Up: Configuração de inicialização do Python

7.10.10 Python Path Configuration
---------------------------------

*note PyConfig: 3a6. contains multiple fields for the path
configuration:

   * Path configuration inputs:

        * *note PyConfig.home: 3bb.

        * *note PyConfig.platlibdir: 1aae.

        * *note PyConfig.pathconfig_warnings: 3d7.

        * *note PyConfig.program_name: 3c4.

        * *note PyConfig.pythonpath_env: 51ff.

        * current working directory: to get absolute paths

        * ‘PATH’ environment variable to get the program full path (from
          *note PyConfig.program_name: 3c4.)

        * ‘__PYVENV_LAUNCHER__’ environment variable

        * (Windows only) Application paths in the registry under
          “SoftwarePythonPythonCoreX.YPythonPath” of HKEY_CURRENT_USER
          and HKEY_LOCAL_MACHINE (where X.Y is the Python version).

   * Path configuration output fields:

        * *note PyConfig.base_exec_prefix: 51f0.

        * *note PyConfig.base_executable: 51f2.

        * *note PyConfig.base_prefix: 51f3.

        * *note PyConfig.exec_prefix: 51f1.

        * *note PyConfig.executable: 3a5.

        * *note PyConfig.module_search_paths_set: 5ef, *note
          PyConfig.module_search_paths: 3a2.

        * *note PyConfig.prefix: 51f4.

If at least one “output field” is not set, Python calculates the path
configuration to fill unset fields.  If *note module_search_paths_set:
5ef. is equal to ‘0’, *note module_search_paths: 3a2. is overridden and
*note module_search_paths_set: 5ef. is set to ‘1’.

It is possible to completely ignore the function calculating the default
path configuration by setting explicitly all path configuration output
fields listed above.  A string is considered as set even if it is
non-empty.  ‘module_search_paths’ is considered as set if
‘module_search_paths_set’ is set to ‘1’.  In this case,
‘module_search_paths’ will be used without modification.

Set *note pathconfig_warnings: 3d7. to ‘0’ to suppress warnings when
calculating the path configuration (Unix only, Windows does not log any
warning).

If *note base_prefix: 51f3. or *note base_exec_prefix: 51f0. fields are
not set, they inherit their value from *note prefix: 51f4. and *note
exec_prefix: 51f1. respectively.

*note Py_RunMain(): 9cd. and *note Py_Main(): c3f. modify *note
sys.path: 3b4.:

   * If *note run_filename: 518e. is set and is a directory which
     contains a ‘__main__.py’ script, prepend *note run_filename: 518e.
     to *note sys.path: 3b4.

   * If *note isolated: 3e4. is zero:

        * If *note run_module: 518f. is set, prepend the current
          directory to *note sys.path: 3b4.  Do nothing if the current
          directory cannot be read.

        * If *note run_filename: 518e. is set, prepend the directory of
          the filename to *note sys.path: 3b4.

        * Otherwise, prepend an empty string to *note sys.path: 3b4.

If *note site_import: 3d3. is non-zero, *note sys.path: 3b4. can be
modified by the *note site: c7. module.  If *note user_site_directory:
3dd. is non-zero and the user’s site-package directory exists, the *note
site: c7. module appends the user’s site-package directory to *note
sys.path: 3b4.

The following configuration files are used by the path configuration:

   * ‘pyvenv.cfg’

   * ‘._pth’ file (ex: ‘python._pth’)

   * ‘pybuilddir.txt’ (Unix only)

If a ‘._pth’ file is present:

   * Set *note isolated: 3e4. to ‘1’.

   * Set *note use_environment: 3d9. to ‘0’.

   * Set *note site_import: 3d3. to ‘0’.

   * Set *note safe_path: 773. to ‘1’.

The ‘__PYVENV_LAUNCHER__’ environment variable is used to set *note
PyConfig.base_executable: 51f2.


File: python.info,  Node: Py_GetArgcArgv,  Next: Multi-Phase Initialization Private Provisional API,  Prev: Python Path Configuration,  Up: Configuração de inicialização do Python

7.10.11 Py_GetArgcArgv()
------------------------

 -- C Função: void Py_GetArgcArgv (int *argc, wchar_t ***argv)

     Get the original command line arguments, before Python modified
     them.

     See also *note PyConfig.orig_argv: 898. member.


File: python.info,  Node: Multi-Phase Initialization Private Provisional API,  Prev: Py_GetArgcArgv,  Up: Configuração de inicialização do Python

7.10.12 Multi-Phase Initialization Private Provisional API
----------------------------------------------------------

This section is a private provisional API introducing multi-phase
initialization, the core feature of PEP 432(1):

   * “Core” initialization phase, “bare minimum Python”:

        * Builtin types;

        * Builtin exceptions;

        * Builtin and frozen modules;

        * The *note sys: d9. module is only partially initialized (ex:
          *note sys.path: 3b4. doesn’t exist yet).

   * “Main” initialization phase, Python is fully initialized:

        * Install and configure *note importlib: 77.;

        * Apply the *note Path Configuration: 8b2.;

        * Install signal handlers;

        * Finish *note sys: d9. module initialization (ex: create *note
          sys.stdout: ae6. and *note sys.path: 3b4.);

        * Enable optional features like *note faulthandler: 58. and
          *note tracemalloc: ff.;

        * Import the *note site: c7. module;

        * etc.

Private provisional API:

   * ‘PyConfig._init_main’: if set to ‘0’, *note
     Py_InitializeFromConfig(): 3c5. stops at the “Core” initialization
     phase.

 -- C Função: *note PyStatus: 9b5. _Py_InitializeMain (void)

     Move to the “Main” initialization phase, finish the Python
     initialization.

No module is imported during the “Core” phase and the ‘importlib’ module
is not configured: the *note Path Configuration: 8b2. is only applied
during the “Main” phase.  It may allow to customize Python in Python to
override or tune the *note Path Configuration: 8b2, maybe install a
custom *note sys.meta_path: d4d. importer or an import hook, etc.

It may become possible to calculate the *note Path Configuration: 8b2.
in Python, after the Core phase and before the Main phase, which is one
of the PEP 432(2) motivation.

The “Core” phase is not properly defined: what should be and what should
not be available at this phase is not specified yet.  The API is marked
as private and provisional: the API can be modified or even be removed
anytime until a proper public API is designed.

Example running Python code between “Core” and “Main” initialization
phases:

     void init_python(void)
     {
         PyStatus status;

         PyConfig config;
         PyConfig_InitPythonConfig(&config);
         config._init_main = 0;

         /* ... customize 'config' configuration ... */

         status = Py_InitializeFromConfig(&config);
         PyConfig_Clear(&config);
         if (PyStatus_Exception(status)) {
             Py_ExitStatusException(status);
         }

         /* Use sys.stderr because sys.stdout is only created
            by _Py_InitializeMain() */
         int res = PyRun_SimpleString(
             "import sys; "
             "print('Run Python code before _Py_InitializeMain', "
                    "file=sys.stderr)");
         if (res < 0) {
             exit(1);
         }

         /* ... put more configuration code here ... */

         status = _Py_InitializeMain();
         if (PyStatus_Exception(status)) {
             Py_ExitStatusException(status);
         }
     }

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0432/

   (2) https://peps.python.org/pep-0432/


File: python.info,  Node: Gerenciamento de Memória,  Next: Suporte a implementação de Objetos,  Prev: Configuração de inicialização do Python,  Up: Manual de referência da API Python/C

7.11 Gerenciamento de Memória
=============================

* Menu:

* Visão Geral: Visão Geral<4>.
* Allocator Domains::
* Raw Memory Interface::
* Interface da Memória::
* Alocadores de objeto::
* Alocadores de memória padrão::
* Alocadores de memória::
* Debug hooks on the Python memory allocators::
* The pymalloc allocator::
* The mimalloc allocator::
* tracemalloc C API::
* Exemplos: Exemplos<37>.


File: python.info,  Node: Visão Geral<4>,  Next: Allocator Domains,  Up: Gerenciamento de Memória

7.11.1 Visão Geral
------------------

O gerenciamento de memória em Python envolve um heap privado contendo
todos os objetos e estruturas de dados Python.  O gerenciamento desse
heap privado é garantido internamente pelo 'gerenciador de memória do
Python'.  O gerenciador de memória do Python possui diferentes
componentes que lidam com diversos aspectos dinâmicos do gerenciamento
de armazenamento, como compartilhamento, segmentação, pré-alocação ou
cache.

No nível mais baixo, um alocador de memória bruta garante que haja
espaço suficiente no heap privado para armazenar todos os dados
relacionados ao Python, interagindo com o gerenciador de memória do
sistema operacional.  Além do alocador de memória bruta, vários
alocadores específicos de objeto operam no mesmo heap e implementam
políticas distintas de gerenciamento de memória, adaptadas às
peculiaridades de cada tipo de objeto.  Por exemplo, objetos inteiros
são gerenciados dentro do heap de forma diferente de strings, tuplas ou
dicionários, pois inteiros implicam diferentes requisitos de
armazenamento e compensações entre velocidade e espaço.  O gerenciador
de memória do Python, portanto, delega parte do trabalho aos alocadores
específicos de objeto, mas garante que estes operem dentro dos limites
do heap privado.

It is important to understand that the management of the Python heap is
performed by the interpreter itself and that the user has no control
over it, even if they regularly manipulate object pointers to memory
blocks inside that heap.  The allocation of heap space for Python
objects and other internal buffers is performed on demand by the Python
memory manager through the Python/C API functions listed in this
document.

To avoid memory corruption, extension writers should never try to
operate on Python objects with the functions exported by the C library:
‘malloc()’, ‘calloc()’, ‘realloc()’ and ‘free()’.  This will result in
mixed calls between the C allocator and the Python memory manager with
fatal consequences, because they implement different algorithms and
operate on different heaps.  However, one may safely allocate and
release memory blocks with the C library allocator for individual
purposes, as shown in the following example:

     PyObject *res;
     char *buf = (char *) malloc(BUFSIZ); /* for I/O */

     if (buf == NULL)
         return PyErr_NoMemory();
     ...Do some I/O operation involving buf...
     res = PyBytes_FromString(buf);
     free(buf); /* malloc'ed */
     return res;

In this example, the memory request for the I/O buffer is handled by the
C library allocator.  The Python memory manager is involved only in the
allocation of the bytes object returned as a result.

In most situations, however, it is recommended to allocate memory from
the Python heap specifically because the latter is under control of the
Python memory manager.  For example, this is required when the
interpreter is extended with new object types written in C. Another
reason for using the Python heap is the desire to 'inform' the Python
memory manager about the memory needs of the extension module.  Even
when the requested memory is used exclusively for internal, highly
specific purposes, delegating all memory requests to the Python memory
manager causes the interpreter to have a more accurate image of its
memory footprint as a whole.  Consequently, under certain circumstances,
the Python memory manager may or may not trigger appropriate actions,
like garbage collection, memory compaction or other preventive
procedures.  Note that by using the C library allocator as shown in the
previous example, the allocated memory for the I/O buffer escapes
completely the Python memory manager.

Ver também
..........

The *note PYTHONMALLOC: c7f. environment variable can be used to
configure the memory allocators used by Python.

The *note PYTHONMALLOCSTATS: 1cd0. environment variable can be used to
print statistics of the *note pymalloc memory allocator: d31. every time
a new pymalloc object arena is created, and on shutdown.


File: python.info,  Node: Allocator Domains,  Next: Raw Memory Interface,  Prev: Visão Geral<4>,  Up: Gerenciamento de Memória

7.11.2 Allocator Domains
------------------------

All allocating functions belong to one of three different “domains” (see
also *note PyMemAllocatorDomain: 5214.).  These domains represent
different allocation strategies and are optimized for different
purposes.  The specific details on how every domain allocates memory or
what internal functions each domain calls is considered an
implementation detail, but for debugging purposes a simplified table can
be found at *note Alocadores de memória padrão: 1ed4.  The APIs used to
allocate and free a block of memory must be from the same domain.  For
example, *note PyMem_Free(): 148a. must be used to free memory allocated
using *note PyMem_Malloc(): c81.

The three allocation domains are:

   * Raw domain: intended for allocating memory for general-purpose
     memory buffers where the allocation 'must' go to the system
     allocator or where the allocator can operate without the *note GIL:
     159.  The memory is requested directly from the system.  See *note
     Raw Memory Interface: 5215.

   * “Mem” domain: intended for allocating memory for Python buffers and
     general-purpose memory buffers where the allocation must be
     performed with the *note GIL: 159. held.  The memory is taken from
     the Python private heap.  See *note Memory Interface: 5216.

   * Object domain: intended for allocating memory for Python objects.
     The memory is taken from the Python private heap.  See *note Object
     allocators: 5217.

     Nota: The *note free-threaded: 15e4. build requires that only
     Python objects are allocated using the “object” domain and that all
     Python objects are allocated using that domain.  This differs from
     the prior Python versions, where this was only a best practice and
     not a hard requirement.

     For example, buffers (non-Python objects) should be allocated using
     *note PyMem_Malloc(): c81, *note PyMem_RawMalloc(): 390, or
     ‘malloc()’, but not *note PyObject_Malloc(): c83.

     See *note Memory Allocation APIs: 5218.


File: python.info,  Node: Raw Memory Interface,  Next: Interface da Memória,  Prev: Allocator Domains,  Up: Gerenciamento de Memória

7.11.3 Raw Memory Interface
---------------------------

The following function sets are wrappers to the system allocator.  These
functions are thread-safe, the *note GIL: 148. does not need to be held.

The *note default raw memory allocator: 1ed4. uses the following
functions: ‘malloc()’, ‘calloc()’, ‘realloc()’ and ‘free()’; call
‘malloc(1)’ (or ‘calloc(1, 1)’) when requesting zero bytes.

Adicionado na versão 3.4.

 -- C Função: void *PyMem_RawMalloc (size_t n)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Allocates
     'n' bytes and returns a pointer of type void* to the allocated
     memory, or ‘NULL’ if the request fails.

     Requesting zero bytes returns a distinct non-‘NULL’ pointer if
     possible, as if ‘PyMem_RawMalloc(1)’ had been called instead.  The
     memory will not have been initialized in any way.

 -- C Função: void *PyMem_RawCalloc (size_t nelem, size_t elsize)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Allocates
     'nelem' elements each whose size in bytes is 'elsize' and returns a
     pointer of type void* to the allocated memory, or ‘NULL’ if the
     request fails.  The memory is initialized to zeros.

     Requesting zero elements or elements of size zero bytes returns a
     distinct non-‘NULL’ pointer if possible, as if ‘PyMem_RawCalloc(1,
     1)’ had been called instead.

     Adicionado na versão 3.5.

 -- C Função: void *PyMem_RawRealloc (void *p, size_t n)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Resizes
     the memory block pointed to by 'p' to 'n' bytes.  The contents will
     be unchanged to the minimum of the old and the new sizes.

     If 'p' is ‘NULL’, the call is equivalent to ‘PyMem_RawMalloc(n)’;
     else if 'n' is equal to zero, the memory block is resized but is
     not freed, and the returned pointer is non-‘NULL’.

     Unless 'p' is ‘NULL’, it must have been returned by a previous call
     to *note PyMem_RawMalloc(): 390, *note PyMem_RawRealloc(): 392. or
     *note PyMem_RawCalloc(): 391.

     If the request fails, *note PyMem_RawRealloc(): 392. returns ‘NULL’
     and 'p' remains a valid pointer to the previous memory area.

 -- C Função: void PyMem_RawFree (void *p)
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Frees the
     memory block pointed to by 'p', which must have been returned by a
     previous call to *note PyMem_RawMalloc(): 390, *note
     PyMem_RawRealloc(): 392. or *note PyMem_RawCalloc(): 391.
     Otherwise, or if ‘PyMem_RawFree(p)’ has been called before,
     undefined behavior occurs.

     If 'p' is ‘NULL’, no operation is performed.


File: python.info,  Node: Interface da Memória,  Next: Alocadores de objeto,  Prev: Raw Memory Interface,  Up: Gerenciamento de Memória

7.11.4 Interface da Memória
---------------------------

The following function sets, modeled after the ANSI C standard, but
specifying behavior when requesting zero bytes, are available for
allocating and releasing memory from the Python heap.

The *note default memory allocator: 1ed4. uses the *note pymalloc memory
allocator: d31.

     Aviso: The *note GIL: 148. must be held when using these functions.

Alterado na versão 3.6: The default allocator is now pymalloc instead of
system ‘malloc()’.

 -- C Função: void *PyMem_Malloc (size_t n)
     ' Parte da *note ABI Estável: 553.'  Allocates 'n' bytes and
     returns a pointer of type void* to the allocated memory, or ‘NULL’
     if the request fails.

     Requesting zero bytes returns a distinct non-‘NULL’ pointer if
     possible, as if ‘PyMem_Malloc(1)’ had been called instead.  The
     memory will not have been initialized in any way.

 -- C Função: void *PyMem_Calloc (size_t nelem, size_t elsize)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Allocates
     'nelem' elements each whose size in bytes is 'elsize' and returns a
     pointer of type void* to the allocated memory, or ‘NULL’ if the
     request fails.  The memory is initialized to zeros.

     Requesting zero elements or elements of size zero bytes returns a
     distinct non-‘NULL’ pointer if possible, as if ‘PyMem_Calloc(1, 1)’
     had been called instead.

     Adicionado na versão 3.5.

 -- C Função: void *PyMem_Realloc (void *p, size_t n)
     ' Parte da *note ABI Estável: 553.'  Resizes the memory block
     pointed to by 'p' to 'n' bytes.  The contents will be unchanged to
     the minimum of the old and the new sizes.

     If 'p' is ‘NULL’, the call is equivalent to ‘PyMem_Malloc(n)’; else
     if 'n' is equal to zero, the memory block is resized but is not
     freed, and the returned pointer is non-‘NULL’.

     Unless 'p' is ‘NULL’, it must have been returned by a previous call
     to *note PyMem_Malloc(): c81, *note PyMem_Realloc(): 106a. or *note
     PyMem_Calloc(): edc.

     If the request fails, *note PyMem_Realloc(): 106a. returns ‘NULL’
     and 'p' remains a valid pointer to the previous memory area.

 -- C Função: void PyMem_Free (void *p)
     ' Parte da *note ABI Estável: 553.'  Frees the memory block pointed
     to by 'p', which must have been returned by a previous call to
     *note PyMem_Malloc(): c81, *note PyMem_Realloc(): 106a. or *note
     PyMem_Calloc(): edc.  Otherwise, or if ‘PyMem_Free(p)’ has been
     called before, undefined behavior occurs.

     If 'p' is ‘NULL’, no operation is performed.

The following type-oriented macros are provided for convenience.  Note
that 'TYPE' refers to any C type.

 -- C Macro: PyMem_New (TYPE, n)

     Same as *note PyMem_Malloc(): c81, but allocates ‘(n *
     sizeof(TYPE))’ bytes of memory.  Returns a pointer cast to ‘TYPE*’.
     The memory will not have been initialized in any way.

 -- C Macro: PyMem_Resize (p, TYPE, n)

     Same as *note PyMem_Realloc(): 106a, but the memory block is
     resized to ‘(n * sizeof(TYPE))’ bytes.  Returns a pointer cast to
     ‘TYPE*’.  On return, 'p' will be a pointer to the new memory area,
     or ‘NULL’ in the event of failure.

     This is a C preprocessor macro; 'p' is always reassigned.  Save the
     original value of 'p' to avoid losing memory when handling errors.

 -- C Função: void PyMem_Del (void *p)

     Same as *note PyMem_Free(): 148a.

* Menu:

* Apelidos descontinuados: Apelidos descontinuados<2>.


File: python.info,  Node: Apelidos descontinuados<2>,  Up: Interface da Memória

7.11.4.1 Apelidos descontinuados
................................

Esses são apelidos *note suavemente descontinuados: 209. para funções e
macros existentes.  Eles existem unicamente para fins de
retrocompatibilidade.

Apelido descontinuado                                  Corresponding function or macro
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
 -- C Macro: PyMem_MALLOC (size)                       *note PyMem_Malloc(): c81.
                                                       
                                                       
 -- C Macro: PyMem_NEW (type, size)                    *note PyMem_New: 156d.
                                                       
                                                       
 -- C Macro: PyMem_REALLOC (ptr, size)                 *note PyMem_Realloc(): 106a.
                                                       
                                                       
 -- C Macro: PyMem_RESIZE (ptr, type, size)            *note PyMem_Resize: 521b.
                                                       
                                                       
 -- C Macro: PyMem_FREE (ptr)                          *note PyMem_Free(): 148a.
                                                       
                                                       
 -- C Macro: PyMem_DEL (ptr)                           *note PyMem_Free(): 148a.
                                                       

Alterado na versão 3.4: The macros are now aliases of the corresponding
functions and macros.  Previously, their behavior was the same, but
their use did not necessarily preserve binary compatibility across
Python versions.

Descontinuado desde a versão 2.0.


File: python.info,  Node: Alocadores de objeto,  Next: Alocadores de memória padrão,  Prev: Interface da Memória,  Up: Gerenciamento de Memória

7.11.5 Alocadores de objeto
---------------------------

The following function sets, modeled after the ANSI C standard, but
specifying behavior when requesting zero bytes, are available for
allocating and releasing memory from the Python heap.

     Nota: There is no guarantee that the memory returned by these
     allocators can be successfully cast to a Python object when
     intercepting the allocating functions in this domain by the methods
     described in the *note Customize Memory Allocators: 5224. section.

The *note default object allocator: 1ed4. uses the *note pymalloc memory
allocator: d31.

     Aviso: The *note GIL: 148. must be held when using these functions.

 -- C Função: void *PyObject_Malloc (size_t n)
     ' Parte da *note ABI Estável: 553.'  Allocates 'n' bytes and
     returns a pointer of type void* to the allocated memory, or ‘NULL’
     if the request fails.

     Requesting zero bytes returns a distinct non-‘NULL’ pointer if
     possible, as if ‘PyObject_Malloc(1)’ had been called instead.  The
     memory will not have been initialized in any way.

 -- C Função: void *PyObject_Calloc (size_t nelem, size_t elsize)
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Allocates
     'nelem' elements each whose size in bytes is 'elsize' and returns a
     pointer of type void* to the allocated memory, or ‘NULL’ if the
     request fails.  The memory is initialized to zeros.

     Requesting zero elements or elements of size zero bytes returns a
     distinct non-‘NULL’ pointer if possible, as if ‘PyObject_Calloc(1,
     1)’ had been called instead.

     Adicionado na versão 3.5.

 -- C Função: void *PyObject_Realloc (void *p, size_t n)
     ' Parte da *note ABI Estável: 553.'  Resizes the memory block
     pointed to by 'p' to 'n' bytes.  The contents will be unchanged to
     the minimum of the old and the new sizes.

     If 'p' is ‘NULL’, the call is equivalent to ‘PyObject_Malloc(n)’;
     else if 'n' is equal to zero, the memory block is resized but is
     not freed, and the returned pointer is non-‘NULL’.

     Unless 'p' is ‘NULL’, it must have been returned by a previous call
     to *note PyObject_Malloc(): c83, *note PyObject_Realloc(): 148b. or
     *note PyObject_Calloc(): edd.

     If the request fails, *note PyObject_Realloc(): 148b. returns
     ‘NULL’ and 'p' remains a valid pointer to the previous memory area.

 -- C Função: void PyObject_Free (void *p)
     ' Parte da *note ABI Estável: 553.'  Frees the memory block pointed
     to by 'p', which must have been returned by a previous call to
     *note PyObject_Malloc(): c83, *note PyObject_Realloc(): 148b. or
     *note PyObject_Calloc(): edd.  Otherwise, or if ‘PyObject_Free(p)’
     has been called before, undefined behavior occurs.

     If 'p' is ‘NULL’, no operation is performed.


File: python.info,  Node: Alocadores de memória padrão,  Next: Alocadores de memória,  Prev: Alocadores de objeto,  Up: Gerenciamento de Memória

7.11.6 Alocadores de memória padrão
-----------------------------------

Alocadores de memória padrão:

Configuração                        Nome                     PyMem_RawMalloc        PyMem_Malloc              PyObject_Malloc
                                                                                                              
---------------------------------------------------------------------------------------------------------------------------------------
                                                                                                              
Release build                       ‘"pymalloc"’             ‘malloc’               ‘pymalloc’                ‘pymalloc’
                                                                                                              
                                                                                                              
Debug build                         ‘"pymalloc_debug"’       ‘malloc’ + debug       ‘pymalloc’ + debug        ‘pymalloc’ + debug
                                                                                                              
                                                                                                              
Release build, without pymalloc     ‘"malloc"’               ‘malloc’               ‘malloc’                  ‘malloc’
                                                                                                              
                                                                                                              
Debug build, without pymalloc       ‘"malloc_debug"’         ‘malloc’ + debug       ‘malloc’ + debug          ‘malloc’ + debug
                                                                                                              

Legenda:

   * Name: value for *note PYTHONMALLOC: c7f. environment variable.

   * ‘malloc’: system allocators from the standard C library, C
     functions: ‘malloc()’, ‘calloc()’, ‘realloc()’ and ‘free()’.

   * ‘pymalloc’: *note pymalloc memory allocator: d31.

   * ‘mimalloc’: *note mimalloc memory allocator: 1ed6.  The pymalloc
     allocator will be used if mimalloc support isn’t available.

   * “+ debug”: with *note debug hooks on the Python memory allocators:
     1ed7.

   * “Debug build”: *note Python build in debug mode: 1f9.


File: python.info,  Node: Alocadores de memória,  Next: Debug hooks on the Python memory allocators,  Prev: Alocadores de memória padrão,  Up: Gerenciamento de Memória

7.11.7 Alocadores de memória
----------------------------

Adicionado na versão 3.4.

 -- C Tipo: type PyMemAllocatorEx

     Structure used to describe a memory block allocator.  The structure
     has the following fields:

     Campo                                                          Significado
                                                                    
     -----------------------------------------------------------------------------------------------------------
                                                                    
     ‘void *ctx’                                                    user context passed as first argument
                                                                    
                                                                    
     ‘void* malloc(void *ctx, size_t size)’                         allocate a memory block
                                                                    
                                                                    
     ‘void* calloc(void *ctx, size_t nelem, size_t elsize)’         allocate a memory block initialized with
                                                                    zeros
                                                                    
                                                                    
     ‘void* realloc(void *ctx, void *ptr, size_t new_size)’         allocate or resize a memory block
                                                                    
                                                                    
     ‘void free(void *ctx, void *ptr)’                              free a memory block
                                                                    

     Alterado na versão 3.5: The ‘PyMemAllocator’ structure was renamed
     to *note PyMemAllocatorEx: efd. and a new ‘calloc’ field was added.

 -- C Tipo: type PyMemAllocatorDomain

     Enum used to identify an allocator domain.  Domains:

      -- C Macro: PYMEM_DOMAIN_RAW

          Funções:

             * *note PyMem_RawMalloc(): 390.

             * *note PyMem_RawRealloc(): 392.

             * *note PyMem_RawCalloc(): 391.

             * *note PyMem_RawFree(): 393.

      -- C Macro: PYMEM_DOMAIN_MEM

          Funções:

             * *note PyMem_Malloc(): c81,

             * *note PyMem_Realloc(): 106a.

             * *note PyMem_Calloc(): edc.

             * *note PyMem_Free(): 148a.

      -- C Macro: PYMEM_DOMAIN_OBJ

          Funções:

             * *note PyObject_Malloc(): c83.

             * *note PyObject_Realloc(): 148b.

             * *note PyObject_Calloc(): edd.

             * *note PyObject_Free(): c80.

 -- C Função: void PyMem_GetAllocator (PyMemAllocatorDomain domain,
          PyMemAllocatorEx *allocator)

     Get the memory block allocator of the specified domain.

 -- C Função: void PyMem_SetAllocator (PyMemAllocatorDomain domain,
          PyMemAllocatorEx *allocator)

     Set the memory block allocator of the specified domain.

     The new allocator must return a distinct non-‘NULL’ pointer when
     requesting zero bytes.

     For the *note PYMEM_DOMAIN_RAW: 1ed5. domain, the allocator must be
     thread-safe: the *note GIL: 148. is not held when the allocator is
     called.

     For the remaining domains, the allocator must also be thread-safe:
     the allocator may be called in different interpreters that do not
     share a ‘GIL’.

     If the new allocator is not a hook (does not call the previous
     allocator), the *note PyMem_SetupDebugHooks(): c85. function must
     be called to reinstall the debug hooks on top on the new allocator.

     See also *note PyPreConfig.allocator: 51e4. and *note Preinitialize
     Python with PyPreConfig: 3f80.

          Aviso: *note PyMem_SetAllocator(): 58b. does have the
          following contract:

             * It can be called after *note Py_PreInitialize(): 3eb. and
               before *note Py_InitializeFromConfig(): 3c5. to install a
               custom memory allocator.  There are no restrictions over
               the installed allocator other than the ones imposed by
               the domain (for instance, the Raw Domain allows the
               allocator to be called without the GIL held).  See *note
               the section on allocator domains: 5213. for more
               information.

             * If called after Python has finish initializing (after
               *note Py_InitializeFromConfig(): 3c5. has been called)
               the allocator 'must' wrap the existing allocator.
               Substituting the current allocator for some other
               arbitrary one is 'not supported'.

     Alterado na versão 3.12: All allocators must be thread-safe.

 -- C Função: void PyMem_SetupDebugHooks (void)

     Setup *note debug hooks in the Python memory allocators: 1ed7. to
     detect memory errors.


File: python.info,  Node: Debug hooks on the Python memory allocators,  Next: The pymalloc allocator,  Prev: Alocadores de memória,  Up: Gerenciamento de Memória

7.11.8 Debug hooks on the Python memory allocators
--------------------------------------------------

When *note Python is built in debug mode: 1f9, the *note
PyMem_SetupDebugHooks(): c85. function is called at the *note Python
preinitialization: 3f80. to setup debug hooks on Python memory
allocators to detect memory errors.

The *note PYTHONMALLOC: c7f. environment variable can be used to install
debug hooks on a Python compiled in release mode (ex:
‘PYTHONMALLOC=debug’).

The *note PyMem_SetupDebugHooks(): c85. function can be used to set
debug hooks after calling *note PyMem_SetAllocator(): 58b.

These debug hooks fill dynamically allocated memory blocks with special,
recognizable bit patterns.  Newly allocated memory is filled with the
byte ‘0xCD’ (‘PYMEM_CLEANBYTE’), freed memory is filled with the byte
‘0xDD’ (‘PYMEM_DEADBYTE’).  Memory blocks are surrounded by “forbidden
bytes” filled with the byte ‘0xFD’ (‘PYMEM_FORBIDDENBYTE’).  Strings of
these bytes are unlikely to be valid addresses, floats, or ASCII
strings.

Checagens em Tempo de Execução:

   - Detect API violations.  For example, detect if *note
     PyObject_Free(): c80. is called on a memory block allocated by
     *note PyMem_Malloc(): c81.

   - Detect write before the start of the buffer (buffer underflow).

   - Detect write after the end of the buffer (buffer overflow).

   - Check that the *note GIL: 148. is held when allocator functions of
     *note PYMEM_DOMAIN_OBJ: c82. (ex: *note PyObject_Malloc(): c83.)
     and *note PYMEM_DOMAIN_MEM: c84. (ex: *note PyMem_Malloc(): c81.)
     domains are called.

On error, the debug hooks use the *note tracemalloc: ff. module to get
the traceback where a memory block was allocated.  The traceback is only
displayed if *note tracemalloc: ff. is tracing Python memory allocations
and the memory block was traced.

Let 'S' = ‘sizeof(size_t)’.  ‘2*S’ bytes are added at each end of each
block of 'N' bytes requested.  The memory layout is like so, where p
represents the address returned by a malloc-like or realloc-like
function (‘p[i:j]’ means the slice of bytes from ‘*(p+i)’ inclusive up
to ‘*(p+j)’ exclusive; note that the treatment of negative indices
differs from a Python slice):

‘p[-2*S:-S]’

     Number of bytes originally asked for.  This is a size_t, big-endian
     (easier to read in a memory dump).

‘p[-S]’

     API identifier (ASCII character):

        * ‘'r'’ for *note PYMEM_DOMAIN_RAW: 1ed5.

        * ‘'m'’ for *note PYMEM_DOMAIN_MEM: c84.

        * ‘'o'’ for *note PYMEM_DOMAIN_OBJ: c82.

‘p[-S+1:0]’

     Copies of PYMEM_FORBIDDENBYTE. Used to catch under- writes and
     reads.

‘p[0:N]’

     The requested memory, filled with copies of PYMEM_CLEANBYTE, used
     to catch reference to uninitialized memory.  When a realloc-like
     function is called requesting a larger memory block, the new excess
     bytes are also filled with PYMEM_CLEANBYTE. When a free-like
     function is called, these are overwritten with PYMEM_DEADBYTE, to
     catch reference to freed memory.  When a realloc- like function is
     called requesting a smaller memory block, the excess old bytes are
     also filled with PYMEM_DEADBYTE.

‘p[N:N+S]’

     Copies of PYMEM_FORBIDDENBYTE. Used to catch over- writes and
     reads.

‘p[N+S:N+2*S]’

     Only used if the ‘PYMEM_DEBUG_SERIALNO’ macro is defined (not
     defined by default).

     A serial number, incremented by 1 on each call to a malloc-like or
     realloc-like function.  Big-endian ‘size_t’.  If “bad memory” is
     detected later, the serial number gives an excellent way to set a
     breakpoint on the next run, to capture the instant at which this
     block was passed out.  The static function bumpserialno() in
     obmalloc.c is the only place the serial number is incremented, and
     exists so you can set such a breakpoint easily.

A realloc-like or free-like function first checks that the
PYMEM_FORBIDDENBYTE bytes at each end are intact.  If they’ve been
altered, diagnostic output is written to stderr, and the program is
aborted via Py_FatalError().  The other main failure mode is provoking a
memory error when a program reads up one of the special bit patterns and
tries to use it as an address.  If you get in a debugger then and look
at the object, you’re likely to see that it’s entirely filled with
PYMEM_DEADBYTE (meaning freed memory is getting used) or PYMEM_CLEANBYTE
(meaning uninitialized memory is getting used).

Alterado na versão 3.6: The *note PyMem_SetupDebugHooks(): c85. function
now also works on Python compiled in release mode.  On error, the debug
hooks now use *note tracemalloc: ff. to get the traceback where a memory
block was allocated.  The debug hooks now also check if the GIL is held
when functions of *note PYMEM_DOMAIN_OBJ: c82. and *note
PYMEM_DOMAIN_MEM: c84. domains are called.

Alterado na versão 3.8: Byte patterns ‘0xCB’ (‘PYMEM_CLEANBYTE’), ‘0xDB’
(‘PYMEM_DEADBYTE’) and ‘0xFB’ (‘PYMEM_FORBIDDENBYTE’) have been replaced
with ‘0xCD’, ‘0xDD’ and ‘0xFD’ to use the same values than Windows CRT
debug ‘malloc()’ and ‘free()’.


File: python.info,  Node: The pymalloc allocator,  Next: The mimalloc allocator,  Prev: Debug hooks on the Python memory allocators,  Up: Gerenciamento de Memória

7.11.9 The pymalloc allocator
-----------------------------

Python has a 'pymalloc' allocator optimized for small objects (smaller
or equal to 512 bytes) with a short lifetime.  It uses memory mappings
called “arenas” with a fixed size of either 256 KiB on 32-bit platforms
or 1 MiB on 64-bit platforms.  It falls back to *note PyMem_RawMalloc():
390. and *note PyMem_RawRealloc(): 392. for allocations larger than 512
bytes.

'pymalloc' is the *note default allocator: 1ed4. of the *note
PYMEM_DOMAIN_MEM: c84. (ex: *note PyMem_Malloc(): c81.) and *note
PYMEM_DOMAIN_OBJ: c82. (ex: *note PyObject_Malloc(): c83.) domains.

The arena allocator uses the following functions:

   * ‘VirtualAlloc()’ and ‘VirtualFree()’ on Windows,

   * ‘mmap()’ and ‘munmap()’ if available,

   * ‘malloc()’ e ‘free()’ do contrário.

This allocator is disabled if Python is configured with the *note
-without-pymalloc: 1f36. option.  It can also be disabled at runtime
using the *note PYTHONMALLOC: c7f. environment variable (ex:
‘PYTHONMALLOC=malloc’).

Typically, it makes sense to disable the pymalloc allocator when
building Python with AddressSanitizer (*note -with-address-sanitizer:
1f3e.) which helps uncover low level bugs within the C code.

* Menu:

* Customize pymalloc Arena Allocator::


File: python.info,  Node: Customize pymalloc Arena Allocator,  Up: The pymalloc allocator

7.11.9.1 Customize pymalloc Arena Allocator
...........................................

Adicionado na versão 3.4.

 -- C Tipo: type PyObjectArenaAllocator

     Structure used to describe an arena allocator.  The structure has
     three fields:

     Campo                                                  Significado
                                                            
     ---------------------------------------------------------------------------------------------------
                                                            
     ‘void *ctx’                                            user context passed as first argument
                                                            
                                                            
     ‘void* alloc(void *ctx, size_t size)’                  allocate an arena of size bytes
                                                            
                                                            
     ‘void free(void *ctx, void *ptr, size_t size)’         free an arena
                                                            

 -- C Função: void PyObject_GetArenaAllocator (PyObjectArenaAllocator
          *allocator)

     Get the arena allocator.

 -- C Função: void PyObject_SetArenaAllocator (PyObjectArenaAllocator
          *allocator)

     Set the arena allocator.


File: python.info,  Node: The mimalloc allocator,  Next: tracemalloc C API,  Prev: The pymalloc allocator,  Up: Gerenciamento de Memória

7.11.10 The mimalloc allocator
------------------------------

Adicionado na versão 3.13.

Python supports the mimalloc allocator when the underlying platform
support is available.  mimalloc “is a general purpose allocator with
excellent performance characteristics.  Initially developed by Daan
Leijen for the runtime systems of the Koka and Lean languages.”


File: python.info,  Node: tracemalloc C API,  Next: Exemplos<37>,  Prev: The mimalloc allocator,  Up: Gerenciamento de Memória

7.11.11 tracemalloc C API
-------------------------

Adicionado na versão 3.7.

 -- C Função: int PyTraceMalloc_Track (unsigned int domain, uintptr_t
          ptr, size_t size)

     Track an allocated memory block in the *note tracemalloc: ff.
     module.

     Return ‘0’ on success, return ‘-1’ on error (failed to allocate
     memory to store the trace).  Return ‘-2’ if tracemalloc is
     disabled.

     If memory block is already tracked, update the existing trace.

 -- C Função: int PyTraceMalloc_Untrack (unsigned int domain, uintptr_t
          ptr)

     Untrack an allocated memory block in the *note tracemalloc: ff.
     module.  Do nothing if the block was not tracked.

     Return ‘-2’ if tracemalloc is disabled, otherwise return ‘0’.


File: python.info,  Node: Exemplos<37>,  Prev: tracemalloc C API,  Up: Gerenciamento de Memória

7.11.12 Exemplos
----------------

Here is the example from section *note Visão Geral: 5210, rewritten so
that the I/O buffer is allocated from the Python heap by using the first
function set:

     PyObject *res;
     char *buf = (char *) PyMem_Malloc(BUFSIZ); /* for I/O */

     if (buf == NULL)
         return PyErr_NoMemory();
     /* ...Do some I/O operation involving buf... */
     res = PyBytes_FromString(buf);
     PyMem_Free(buf); /* allocated with PyMem_Malloc */
     return res;

The same code using the type-oriented function set:

     PyObject *res;
     char *buf = PyMem_New(char, BUFSIZ); /* for I/O */

     if (buf == NULL)
         return PyErr_NoMemory();
     /* ...Do some I/O operation involving buf... */
     res = PyBytes_FromString(buf);
     PyMem_Del(buf); /* allocated with PyMem_New */
     return res;

Note that in the two examples above, the buffer is always manipulated
via functions belonging to the same set.  Indeed, it is required to use
the same memory API family for a given memory block, so that the risk of
mixing different allocators is reduced to a minimum.  The following code
sequence contains two errors, one of which is labeled as 'fatal' because
it mixes two different allocators operating on different heaps.

     char *buf1 = PyMem_New(char, BUFSIZ);
     char *buf2 = (char *) malloc(BUFSIZ);
     char *buf3 = (char *) PyMem_Malloc(BUFSIZ);
     ...
     PyMem_Del(buf3);  /* Wrong -- should be PyMem_Free() */
     free(buf2);       /* Right -- allocated via malloc() */
     free(buf1);       /* Fatal -- should be PyMem_Del()  */

In addition to the functions aimed at handling raw memory blocks from
the Python heap, objects in Python are allocated and released with *note
PyObject_New: 98c, *note PyObject_NewVar: 98d. and *note PyObject_Del():
1519.

These will be explained in the next chapter on defining and implementing
new object types in C.


File: python.info,  Node: Suporte a implementação de Objetos,  Next: API e Versionamento de ABI,  Prev: Gerenciamento de Memória,  Up: Manual de referência da API Python/C

7.12 Suporte a implementação de Objetos
=======================================

Este capítulo descreve as funções, tipos e macros usados ao definir
novos tipos de objeto.

* Menu:

* Alocando objetos na heap::
* Estruturas comuns de objetos::
* Estruturas de objetos tipo::
* Suporte a Coleta Cíclica de Lixo::


File: python.info,  Node: Alocando objetos na heap,  Next: Estruturas comuns de objetos,  Up: Suporte a implementação de Objetos

7.12.1 Alocando objetos na heap
-------------------------------

 -- C Função: *note PyObject: 339. *_PyObject_New (PyTypeObject *type)
     'Retorna valor: Nova referência.'

 -- C Função: *note PyVarObject: 4384. *_PyObject_NewVar (PyTypeObject
          *type, Py_ssize_t size)
     'Retorna valor: Nova referência.'

 -- C Função: *note PyObject: 339. *PyObject_Init (PyObject *op,
          PyTypeObject *type)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'  Inicializa um objeto 'op' recém-alocado com seu
     tipo e referência inicial.  Retorna o objeto inicializado.  Outros
     campos do objeto não são afetados.

 -- C Função: *note PyVarObject: 4384. *PyObject_InitVar (PyVarObject
          *op, PyTypeObject *type, Py_ssize_t size)
     'Retorna valor: Referência emprestada.''  Parte da *note ABI
     Estável: 553.'  Isto faz tudo que o *note PyObject_Init(): a74. faz
     e também inicializa a informação de comprimento para um objeto de
     tamanho variável.

 -- C Macro: PyObject_New (TYPE, typeobj)

     Aloca um novo objeto Python usando o tipo de estrutura do C 'TYPE'
     e o objeto Python do tipo 'typeobj' (‘PyTypeObject*’).  Campos não
     definidos pelo cabeçalho do objeto Python não são inicializados.  O
     chamador será dono da apenas a referência ao objeto (isto é, sua
     contagem de referências será uma).  O tamanho da alocação de
     memória é determinado do campo *note tp_basicsize: 98e. do objeto
     tipo.

     Note que esta função não é adequada se 'typeobj' tiver *note
     Py_TPFLAGS_HAVE_GC: 77d. definido.  Para tais objetos, use *note
     PyObject_GC_New(): ab1. em vez disso.

 -- C Macro: PyObject_NewVar (TYPE, typeobj, size)

     Aloca um novo objeto Python usando o tipo de estrutura do C 'TYPE'
     e o objeto Python do tipo 'typeobj' (‘PyTypeObject*’).  Campos não
     definidos pelo cabeçalho do objeto Python não são inicializados.  A
     memória alocada permite a estrutura 'TYPE' e os campos 'size'
     (‘Py_ssize_t’) do tamanho dado pelo campo *note tp_itemsize: 20fd.
     do tipo 'typeobj'.  Isto é útil para implementar objetos como
     tuplas, as quais são capazes de determinar seu tamanho no tempo da
     construção.  Incorporando o vetor de campos dentro da mesma
     alocação diminuindo o numero de alocações, melhorando a eficiência
     do gerenciamento de memória.

     Note que esta função não é adequada se 'typeobj' tiver *note
     Py_TPFLAGS_HAVE_GC: 77d. definido.  Para tais objetos, use *note
     PyObject_GC_NewVar(): ab2. em vez disso.

 -- C Variável: *note PyObject: 339. _Py_NoneStruct

     Objeto o qual é visível no Python como ‘None’.  Isto só deve ser
     acessado usando a macro *note Py_None: 4b48, o qual avalia como um
     ponteiro para este objeto.

Ver também
..........

*note Objetos do Módulo: 50b3.

     Para alocar e criar módulos de extensão.

* Menu:

* Apelidos descontinuados: Apelidos descontinuados<3>.


File: python.info,  Node: Apelidos descontinuados<3>,  Up: Alocando objetos na heap

7.12.1.1 Apelidos descontinuados
................................

Esses são apelidos *note suavemente descontinuados: 209. para funções e
macros existentes.  Eles existem unicamente para fins de
retrocompatibilidade.

Apelido descontinuado                                  Função
                                                       
--------------------------------------------------------------------------------------------------------------
                                                       
 -- C Macro: PyObject_NEW (type, typeobj)              *note PyObject_New: 98c.
                                                       
                                                       
 -- C Macro: PyObject_NEW_VAR (type, typeobj, n)       *note PyObject_NewVar: 98d.
                                                       
                                                       
 -- C Macro: PyObject_INIT (op, typeobj)               *note PyObject_Init(): a74.
                                                       
                                                       
 -- C Macro: PyObject_INIT_VAR (op, typeobj, n)        *note PyObject_InitVar(): 1acd.
                                                       
                                                       
 -- C Macro: PyObject_MALLOC (n)                       *note PyObject_Malloc(): c83.
                                                       
                                                       
 -- C Macro: PyObject_REALLOC (p, n)                   *note PyObject_Realloc(): 148b.
                                                       
                                                       
 -- C Macro: PyObject_FREE (p)                         *note PyObject_Free(): c80.
                                                       
                                                       
 -- C Macro: PyObject_DEL (p)                          *note PyObject_Free(): c80.
                                                       
                                                       
 -- C Macro: PyObject_Del (p)                          *note PyObject_Free(): c80.
                                                       


File: python.info,  Node: Estruturas comuns de objetos,  Next: Estruturas de objetos tipo,  Prev: Alocando objetos na heap,  Up: Suporte a implementação de Objetos

7.12.2 Estruturas comuns de objetos
-----------------------------------

Existe um grande número de estruturas usadas para a definição de tipos
objeto para o Python.  Esta seção descreve essas estruturas e como são
usadas.

* Menu:

* Macros e tipos de objetos base::
* Implementing functions and methods::
* Accessing attributes of extension types::


File: python.info,  Node: Macros e tipos de objetos base,  Next: Implementing functions and methods,  Up: Estruturas comuns de objetos

7.12.2.1 Macros e tipos de objetos base
.......................................

Todos os objetos Python por fim compartilham um pequeno número de campos
no começo da representação o objeto na memória.  Esses são representados
pelos tipos *note PyObject: 339. e *note PyVarObject: 4384, que são
definidos, por sua vez, pelas expansões de alguns macros também,
utilizados, direta ou indiretamente, na definição de todos outros
objetos Python.  Macros adicionais podem ser encontrados em *note
contagem de referências: 4e7c.

 -- C Tipo: type PyObject
     ' Parte da *note API Limitada: 553.  (Somente alguns membros são
     parte da ABI estável.)'  All object types are extensions of this
     type.  This is a type which contains the information Python needs
     to treat a pointer to an object as an object.  In a normal
     “release” build, it contains only the object’s reference count and
     a pointer to the corresponding type object.  Nothing is actually
     declared to be a *note PyObject: 339, but every pointer to a Python
     object can be cast to a *note PyObject: 339.*.  Access to the
     members must be done by using the macros *note Py_REFCNT: 8ae. and
     *note Py_TYPE: 780.

 -- C Tipo: type PyVarObject
     ' Parte da *note API Limitada: 553.  (Somente alguns membros são
     parte da ABI estável.)'  Esta é uma extensão de *note PyObject:
     339. que adiciona o campo *note ob_size: 4dba.  Isso é usado apenas
     para objetos que têm alguma noção de 'comprimento'.  Esse tipo não
     costuma aparecer na API Python/C. O acesso aos membros deve ser
     feito através das macros *note Py_REFCNT: 8ae, *note Py_TYPE: 780,
     e *note Py_SIZE: 782.

 -- C Macro: PyObject_HEAD

     Este é um macro usado ao declarar novos tipos que representam
     objetos sem comprimento variável.  O macro PyObject_HEAD se expande
     para:

          PyObject ob_base;

     Veja documentação de *note PyObject: 339. acima.

 -- C Macro: PyObject_VAR_HEAD

     Esta é uma macro usada ao declarar novos tipos que representam
     objetos com um comprimento que varia de instância para instância.
     A macro PyObject_VAR_HEAD se expande para:

          PyVarObject ob_base;

     Veja documentação de *note PyVarObject: 4384. acima.

 -- C Variável: *note PyTypeObject: ab4. PyBaseObject_Type
     ' Parte da *note ABI Estável: 553.'  A classe base de todos os
     outros objetos, equivalente a *note object: a96. em Python.

 -- C Função: int Py_Is (PyObject *x, PyObject *y)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Testa se
     o objeto 'x' é o objeto 'y', o mesmo que ‘x is y’ em Python.

     Adicionado na versão 3.10.

 -- C Função: int Py_IsNone (PyObject *x)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Test if
     an object is the ‘None’ singleton, the same as ‘x is None’ in
     Python.

     Adicionado na versão 3.10.

 -- C Função: int Py_IsTrue (PyObject *x)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Test if
     an object is the ‘True’ singleton, the same as ‘x is True’ in
     Python.

     Adicionado na versão 3.10.

 -- C Função: int Py_IsFalse (PyObject *x)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Test if
     an object is the ‘False’ singleton, the same as ‘x is False’ in
     Python.

     Adicionado na versão 3.10.

 -- C Função: *note PyTypeObject: ab4. *Py_TYPE (PyObject *o)
     'Retorna valor: Referência emprestada.'  Get the type of the Python
     object 'o'.

     Return a *note borrowed reference: 33e.

     Use the *note Py_SET_TYPE(): 781. function to set an object type.

     Alterado na versão 3.11: *note Py_TYPE(): 780. is changed to an
     inline static function.  The parameter type is no longer const
     *note PyObject: 339.*.

 -- C Função: int Py_IS_TYPE (PyObject *o, PyTypeObject *type)

     Return non-zero if the object 'o' type is 'type'.  Return zero
     otherwise.  Equivalent to: ‘Py_TYPE(o) == type’.

     Adicionado na versão 3.9.

 -- C Função: void Py_SET_TYPE (PyObject *o, PyTypeObject *type)

     Set the object 'o' type to 'type'.

     Adicionado na versão 3.9.

 -- C Função: *note Py_ssize_t: a69. Py_SIZE (PyVarObject *o)

     Get the size of the Python object 'o'.

     Use the *note Py_SET_SIZE(): 783. function to set an object size.

     Alterado na versão 3.11: *note Py_SIZE(): 782. is changed to an
     inline static function.  The parameter type is no longer const
     *note PyVarObject: 4384.*.

 -- C Função: void Py_SET_SIZE (PyVarObject *o, Py_ssize_t size)

     Set the object 'o' size to 'size'.

     Adicionado na versão 3.9.

 -- C Macro: PyObject_HEAD_INIT (type)

     This is a macro which expands to initialization values for a new
     *note PyObject: 339. type.  This macro expands to:

          _PyObject_EXTRA_INIT
          1, type,

 -- C Macro: PyVarObject_HEAD_INIT (type, size)

     This is a macro which expands to initialization values for a new
     *note PyVarObject: 4384. type, including the *note ob_size: 4dba.
     field.  This macro expands to:

          _PyObject_EXTRA_INIT
          1, type, size,


File: python.info,  Node: Implementing functions and methods,  Next: Accessing attributes of extension types,  Prev: Macros e tipos de objetos base,  Up: Estruturas comuns de objetos

7.12.2.2 Implementing functions and methods
...........................................

 -- C Tipo: type PyCFunction
     ' Parte da *note ABI Estável: 553.'  Type of the functions used to
     implement most Python callables in C. Functions of this type take
     two *note PyObject: 339.* parameters and return one such value.  If
     the return value is ‘NULL’, an exception shall have been set.  If
     not ‘NULL’, the return value is interpreted as the return value of
     the function as exposed in Python.  The function must return a new
     reference.

     A assinatura da função é:

          PyObject *PyCFunction(PyObject *self,
                                PyObject *args);

 -- C Tipo: type PyCFunctionWithKeywords
     ' Parte da *note ABI Estável: 553.'  Type of the functions used to
     implement Python callables in C with signature *note METH_VARARGS |
     METH_KEYWORDS: 5249.  The function signature is:

          PyObject *PyCFunctionWithKeywords(PyObject *self,
                                            PyObject *args,
                                            PyObject *kwargs);

 -- C Tipo: type PyCFunctionFast
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Type of
     the functions used to implement Python callables in C with
     signature *note METH_FASTCALL: 1713.  The function signature is:

          PyObject *PyCFunctionFast(PyObject *self,
                                    PyObject *const *args,
                                    Py_ssize_t nargs);

 -- C Tipo: type PyCFunctionFastWithKeywords
     ' Parte da *note ABI Estável: 553. desde a versão 3.13.'  Type of
     the functions used to implement Python callables in C with
     signature *note METH_FASTCALL | METH_KEYWORDS: 524a.  The function
     signature is:

          PyObject *PyCFunctionFastWithKeywords(PyObject *self,
                                                PyObject *const *args,
                                                Py_ssize_t nargs,
                                                PyObject *kwnames);

 -- C Tipo: type PyCMethod

     Type of the functions used to implement Python callables in C with
     signature *note METH_METHOD | METH_FASTCALL | METH_KEYWORDS: 1784.
     The function signature is:

          PyObject *PyCMethod(PyObject *self,
                              PyTypeObject *defining_class,
                              PyObject *const *args,
                              Py_ssize_t nargs,
                              PyObject *kwnames)

     Adicionado na versão 3.9.

 -- C Tipo: type PyMethodDef
     ' Parte da *note ABI Estável: 553. (incluindo todos os membros).'
     Structure used to describe a method of an extension type.  This
     structure has four fields:

      -- C Membro: const char *ml_name

          Nome do método.

      -- C Membro: *note PyCFunction: 14c0. ml_meth

          Pointer to the C implementation.

      -- C Membro: int ml_flags

          Flags bits indicating how the call should be constructed.

      -- C Membro: const char *ml_doc

          Points to the contents of the docstring.

The *note ml_meth: 524b. is a C function pointer.  The functions may be
of different types, but they always return *note PyObject: 339.*.  If
the function is not of the *note PyCFunction: 14c0, the compiler will
require a cast in the method table.  Even though *note PyCFunction:
14c0. defines the first parameter as *note PyObject: 339.*, it is common
that the method implementation uses the specific C type of the 'self'
object.

The *note ml_flags: 524c. field is a bitfield which can include the
following flags.  The individual flags indicate either a calling
convention or a binding convention.

There are these calling conventions:

 -- C Macro: METH_VARARGS
     ' Parte da *note ABI Estável: 553.'  This is the typical calling
     convention, where the methods have the type *note PyCFunction:
     14c0.  The function expects two *note PyObject: 339.* values.  The
     first one is the 'self' object for methods; for module functions,
     it is the module object.  The second parameter (often called
     'args') is a tuple object representing all arguments.  This
     parameter is typically processed using *note PyArg_ParseTuple():
     571. or *note PyArg_UnpackTuple(): 154f.

 -- C Macro: METH_KEYWORDS

     Can only be used in certain combinations with other flags: *note
     METH_VARARGS | METH_KEYWORDS: 5249, *note METH_FASTCALL |
     METH_KEYWORDS: 524a. and *note METH_METHOD | METH_FASTCALL |
     METH_KEYWORDS: 1784.

*note METH_VARARGS: 1551. | *note METH_KEYWORDS: 4b4b.

     Methods with these flags must be of type *note
     PyCFunctionWithKeywords: 4c24.  The function expects three
     parameters: 'self', 'args', 'kwargs' where 'kwargs' is a dictionary
     of all the keyword arguments or possibly ‘NULL’ if there are no
     keyword arguments.  The parameters are typically processed using
     *note PyArg_ParseTupleAndKeywords(): 383.

 -- C Macro: METH_FASTCALL
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Fast
     calling convention supporting only positional arguments.  The
     methods have the type *note PyCFunctionFast: 4c22.  The first
     parameter is 'self', the second parameter is a C array of *note
     PyObject: 339.* values indicating the arguments and the third
     parameter is the number of arguments (the length of the array).

     Adicionado na versão 3.7.

     Alterado na versão 3.10: ‘METH_FASTCALL’ is now part of the *note
     stable ABI: 4bf6.

*note METH_FASTCALL: 1713. | *note METH_KEYWORDS: 4b4b.

     Extension of *note METH_FASTCALL: 1713. supporting also keyword
     arguments, with methods of type *note PyCFunctionFastWithKeywords:
     4c23.  Keyword arguments are passed the same way as in the *note
     vectorcall protocol: 552.: there is an additional fourth *note
     PyObject: 339.* parameter which is a tuple representing the names
     of the keyword arguments (which are guaranteed to be strings) or
     possibly ‘NULL’ if there are no keywords.  The values of the
     keyword arguments are stored in the 'args' array, after the
     positional arguments.

     Adicionado na versão 3.7.

 -- C Macro: METH_METHOD
     ' Parte da *note ABI Estável: 553. desde a versão 3.7.'  Can only
     be used in the combination with other flags: *note METH_METHOD |
     METH_FASTCALL | METH_KEYWORDS: 1784.

*note METH_METHOD: 977. | *note METH_FASTCALL: 1713. | *note METH_KEYWORDS: 4b4b.

     Extension of *note METH_FASTCALL | METH_KEYWORDS: 524a. supporting
     the 'defining class', that is, the class that contains the method
     in question.  The defining class might be a superclass of
     ‘Py_TYPE(self)’.

     The method needs to be of type *note PyCMethod: 764, the same as
     for ‘METH_FASTCALL | METH_KEYWORDS’ with ‘defining_class’ argument
     added after ‘self’.

     Adicionado na versão 3.9.

 -- C Macro: METH_NOARGS
     ' Parte da *note ABI Estável: 553.'  Methods without parameters
     don’t need to check whether arguments are given if they are listed
     with the *note METH_NOARGS: 151c. flag.  They need to be of type
     *note PyCFunction: 14c0.  The first parameter is typically named
     'self' and will hold a reference to the module or object instance.
     In all cases the second parameter will be ‘NULL’.

     The function must have 2 parameters.  Since the second parameter is
     unused, *note Py_UNUSED: 180c. can be used to prevent a compiler
     warning.

 -- C Macro: METH_O
     ' Parte da *note ABI Estável: 553.'  Methods with a single object
     argument can be listed with the *note METH_O: 1550. flag, instead
     of invoking *note PyArg_ParseTuple(): 571. with a ‘"O"’ argument.
     They have the type *note PyCFunction: 14c0, with the 'self'
     parameter, and a *note PyObject: 339.* parameter representing the
     single argument.

These two constants are not used to indicate the calling convention but
the binding when use with methods of classes.  These may not be used for
functions defined for modules.  At most one of these flags may be set
for any given method.

 -- C Macro: METH_CLASS
     ' Parte da *note ABI Estável: 553.'

     The method will be passed the type object as the first parameter
     rather than an instance of the type.  This is used to create 'class
     methods', similar to what is created when using the *note
     classmethod(): 166. built-in function.

 -- C Macro: METH_STATIC
     ' Parte da *note ABI Estável: 553.'

     The method will be passed ‘NULL’ as the first parameter rather than
     an instance of the type.  This is used to create 'static methods',
     similar to what is created when using the *note staticmethod():
     416. built-in function.

One other constant controls whether a method is loaded in place of
another definition with the same method name.

 -- C Macro: METH_COEXIST
     ' Parte da *note ABI Estável: 553.'  The method will be loaded in
     place of existing definitions.  Without 'METH_COEXIST', the default
     is to skip repeated definitions.  Since slot wrappers are loaded
     before the method table, the existence of a 'sq_contains' slot, for
     example, would generate a wrapped method named *note
     __contains__(): 1400. and preclude the loading of a corresponding
     PyCFunction with the same name.  With the flag defined, the
     PyCFunction will be loaded in place of the wrapper object and will
     co-exist with the slot.  This is helpful because calls to
     PyCFunctions are optimized more than wrapper object calls.

 -- C Variável: *note PyTypeObject: ab4. PyCMethod_Type

     The type object corresponding to Python C method objects.  This is
     available as *note types.BuiltinMethodType: 271a. in the Python
     layer.

 -- C Função: int PyCMethod_Check (PyObject *op)

     Return true if 'op' is an instance of the *note PyCMethod_Type:
     524e. type or a subtype of it.  This function always succeeds.

 -- C Função: int PyCMethod_CheckExact (PyObject *op)

     This is the same as *note PyCMethod_Check(): 524f, but does not
     account for subtypes.

 -- C Função: *note PyObject: 339. *PyCMethod_New (PyMethodDef *ml,
          PyObject *self, PyObject *module, PyTypeObject *cls)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.9.'  Turn 'ml' into a Python *note callable:
     2aaf. object.  The caller must ensure that 'ml' outlives the *note
     callable: 2aaf.  Typically, 'ml' is defined as a static variable.

     The 'self' parameter will be passed as the 'self' argument to the C
     function in ‘ml->ml_meth’ when invoked.  'self' can be ‘NULL’.

     The *note callable: 2aaf. object’s ‘__module__’ attribute can be
     set from the given 'module' argument.  'module' should be a Python
     string, which will be used as name of the module the function is
     defined in.  If unavailable, it can be set to *note None: 675. or
     ‘NULL’.

     Ver também
     ..........

     *note function.__module__: 208e.

     The 'cls' parameter will be passed as the 'defining_class' argument
     to the C function.  Must be set if *note METH_METHOD: 977. is set
     on ‘ml->ml_flags’.

     Adicionado na versão 3.9.

 -- C Variável: *note PyTypeObject: ab4. PyCFunction_Type
     ' Parte da *note ABI Estável: 553.'  The type object corresponding
     to Python C function objects.  This is available as *note
     types.BuiltinFunctionType: 2719. in the Python layer.

 -- C Função: int PyCFunction_Check (PyObject *op)

     Return true if 'op' is an instance of the *note PyCFunction_Type:
     4c28. type or a subtype of it.  This function always succeeds.

 -- C Função: int PyCFunction_CheckExact (PyObject *op)

     This is the same as *note PyCFunction_Check(): 5251, but does not
     account for subtypes.

 -- C Função: *note PyObject: 339. *PyCFunction_NewEx (PyMethodDef *ml,
          PyObject *self, PyObject *module)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553.'  Equivalente a ‘PyCMethod_New(ml, self, module, NULL)’.

 -- C Função: *note PyObject: 339. *PyCFunction_New (PyMethodDef *ml,
          PyObject *self)
     'Retorna valor: Nova referência.''  Parte da *note ABI Estável:
     553. desde a versão 3.4.'  Equivalente a ‘PyCMethod_New(ml, self,
     NULL, NULL)’.

 -- C Função: int PyCFunction_GetFlags (PyObject *func)
     ' Parte da *note ABI Estável: 553.'  Get the function’s flags on
     'func' as they were passed to *note ml_flags: 524c.

     If 'func' is not a C function object, this fails with an exception.
     'func' must not be ‘NULL’.

     This function returns the function’s flags on success, and ‘-1’
     with an exception set on failure.

 -- C Função: int PyCFunction_GET_FLAGS (PyObject *func)

     This is the same as *note PyCFunction_GetFlags(): 4c25, but without
     error or type checking.

 -- C Função: *note PyCFunction: 14c0. PyCFunction_GetFunction (PyObject
          *func)
     ' Parte da *note ABI Estável: 553.'  Get the function pointer on
     'func' as it was passed to *note ml_meth: 524b.

     If 'func' is not a C function object, this fails with an exception.
     'func' must not be ‘NULL’.

     This function returns the function pointer on success, and ‘NULL’
     with an exception set on failure.

 -- C Função: int PyCFunction_GET_FUNCTION (PyObject *func)

     This is the same as *note PyCFunction_GetFunction(): 4c26, but
     without error or type checking.

 -- C Função: *note PyObject: 339. *PyCFunction_GetSelf (PyObject *func)
     ' Parte da *note ABI Estável: 553.'  Get the “self” object on
     'func'.  This is the object that would be passed to the first
     argument of a *note PyCFunction: 14c0.  For C function objects
     created through a *note PyMethodDef: 151f. on a *note PyModuleDef:
     984, this is the resulting module object.

     If 'func' is not a C function object, this fails with an exception.
     'func' must not be ‘NULL’.

     This function returns a *note borrowed reference: 33e. to the
     “self” object on success, and ‘NULL’ with an exception set on
     failure.

 -- C Função: *note PyObject: 339. *PyCFunction_GET_SELF (PyObject
          *func)

     This is the same as *note PyCFunction_GetSelf(): 4c27, but without
     error or type checking.


File: python.info,  Node: Accessing attributes of extension types,  Prev: Implementing functions and methods,  Up: Estruturas comuns de objetos

7.12.2.3 Accessing attributes of extension types
................................................

 -- C Tipo: type PyMemberDef
     ' Parte da *note ABI Estável: 553. (incluindo todos os membros).'
     Structure which describes an attribute of a type which corresponds
     to a C struct member.  When defining a class, put a NULL-terminated
     array of these structures in the *note tp_members: 4b7b. slot.

     Its fields are, in order:

      -- C Membro: const char *name

          Name of the member.  A NULL value marks the end of a
          ‘PyMemberDef[]’ array.

          The string should be static, no copy is made of it.

      -- C Membro: int type

          The type of the member in the C struct.  See *note Member
          types: 1769. for the possible values.

      -- C Membro: *note Py_ssize_t: a69. offset

          The offset in bytes that the member is located on the type’s
          object struct.

      -- C Membro: int flags

          Zero or more of the *note Member flags: 5259, combined using
          bitwise OR.

      -- C Membro: const char *doc

          The docstring, or NULL. The string should be static, no copy
          is made of it.  Typically, it is defined using *note
          PyDoc_STR: 1921.

     By default (when *note flags: 4b94. is ‘0’), members allow both
     read and write access.  Use the *note Py_READONLY: 591. flag for
     read-only access.  Certain types, like *note Py_T_STRING: 4dd8,
     imply *note Py_READONLY: 591.  Only *note Py_T_OBJECT_EX: 594. (and
     legacy *note T_OBJECT: 593.) members can be deleted.  For
     heap-allocated types (created using *note PyType_FromSpec(): 57d.
     or similar), ‘PyMemberDef’ may contain a definition for the special
     member ‘"__vectorcalloffset__"’, corresponding to *note
     tp_vectorcall_offset: 4f1e. in type objects.  These must be defined
     with ‘Py_T_PYSSIZET’ and ‘Py_READONLY’, for example:

          static PyMemberDef spam_type_members[] = {
              {"__vectorcalloffset__", Py_T_PYSSIZET,
               offsetof(Spam_object, vectorcall), Py_READONLY},
              {NULL}  /* Sentinel */
          };

     (You may need to ‘#include <stddef.h>’ for ‘offsetof()’.)

     The legacy offsets *note tp_dictoffset: 4f79. and *note
     tp_weaklistoffset: 98f. can be defined similarly using
     ‘"__dictoffset__"’ and ‘"__weaklistoffset__"’ members, but
     extensions are strongly encouraged to use *note
     Py_TPFLAGS_MANAGED_DICT: 36b. and *note Py_TPFLAGS_MANAGED_WEAKREF:
     55a. instead.

     Alterado na versão 3.12: ‘PyMemberDef’ is always available.
     Previously, it required including ‘"structmember.h"’.

 -- C Função: *note PyObject: 339. *PyMember_GetOne (const char
          *obj_addr, struct PyMemberDef *m)
     ' Parte da *note ABI Estável: 553.'  Get an attribute belonging to
     the object at address 'obj_addr'.  The attribute is described by
     ‘PyMemberDef’ 'm'.  Returns ‘NULL’ on error.

     Alterado na versão 3.12: ‘PyMember_GetOne’ is always available.
     Previously, it required including ‘"structmember.h"’.

 -- C Função: int PyMember_SetOne (char *obj_addr, struct PyMemberDef
          *m, PyObject *o)
     ' Parte da *note ABI Estável: 553.'  Set an attribute belonging to
     the object at address 'obj_addr' to object 'o'.  The attribute to
     set is described by ‘PyMemberDef’ 'm'.  Returns ‘0’ if successful
     and a negative value on failure.

     Alterado na versão 3.12: ‘PyMember_SetOne’ is always available.
     Previously, it required including ‘"structmember.h"’.

* Menu:

* Member flags::
* Member types::
* Defining Getters and Setters::


File: python.info,  Node: Member flags,  Next: Member types,  Up: Accessing attributes of extension types

7.12.2.4 Member flags
.....................

The following flags can be used with *note PyMemberDef.flags: 4b94.:

 -- C Macro: Py_READONLY
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  Not
     writable.

 -- C Macro: Py_AUDIT_READ
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  Emit an
     ‘object.__getattr__’ *note audit event: 199c. before reading.

 -- C Macro: Py_RELATIVE_OFFSET
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  Indicates
     that the *note offset: 5258. of this ‘PyMemberDef’ entry indicates
     an offset from the subclass-specific data, rather than from
     ‘PyObject’.

     Can only be used as part of *note Py_tp_members: 4b7b. *note slot:
     4d7b. when creating a class using negative *note basicsize: 548.
     It is mandatory in that case.

     This flag is only used in *note PyType_Slot: 4d7b.  When setting
     *note tp_members: 4b7b. during class creation, Python clears it and
     sets *note PyMemberDef.offset: 5258. to the offset from the
     ‘PyObject’ struct.

Alterado na versão 3.10: The ‘RESTRICTED’, ‘READ_RESTRICTED’ and
‘WRITE_RESTRICTED’ macros available with ‘#include "structmember.h"’ are
deprecated.  ‘READ_RESTRICTED’ and ‘RESTRICTED’ are equivalent to *note
Py_AUDIT_READ: 592.; ‘WRITE_RESTRICTED’ does nothing.

Alterado na versão 3.12: The ‘READONLY’ macro was renamed to *note
Py_READONLY: 591.  The ‘PY_AUDIT_READ’ macro was renamed with the ‘Py_’
prefix.  The new names are now always available.  Previously, these
required ‘#include "structmember.h"’.  The header is still available and
it provides the old names.


File: python.info,  Node: Member types,  Next: Defining Getters and Setters,  Prev: Member flags,  Up: Accessing attributes of extension types

7.12.2.5 Member types
.....................

*note PyMemberDef.type: 4b93. can be one of the following macros
corresponding to various C types.  When the member is accessed in
Python, it will be converted to the equivalent Python type.  When it is
set from Python, it will be converted back to the C type.  If that is
not possible, an exception such as *note TypeError: 2c3. or *note
ValueError: 202. is raised.

Unless marked (D), attributes defined this way cannot be deleted using
e.g.  *note del: 18a7. or *note delattr(): 22ec.

Macro name                           Tipo em C                         Tipo em Python
                                                                       
--------------------------------------------------------------------------------------------------
                                                                       
 -- C Macro: Py_T_BYTE               char                              *note int: 257.
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_SHORT              short                             *note int: 257.
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_INT                int                               *note int: 257.
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_LONG               long                              *note int: 257.
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_LONGLONG           long long                         *note int: 257.
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_UBYTE              unsigned char                     *note int: 257.
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_UINT               unsigned int                      *note int: 257.
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_USHORT             unsigned short                    *note int: 257.
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_ULONG              unsigned long                     *note int: 257.
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_ULONGLONG          unsigned long long                *note int: 257.
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_PYSSIZET           *note Py_ssize_t: a69.            *note int: 257.
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_FLOAT              float                             *note float: 2f7.
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_DOUBLE             double                            *note float: 2f7.
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_BOOL               char (escrito como 0 ou 1)        *note bool: 468.
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_STRING             const char* (*)                   *note str: 44c. (RO)
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_STRING_INPLACE     const char[] (*)                  *note str: 44c. (RO)
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_CHAR               char (0-127)                      *note str: 44c. (**)
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

 -- C Macro: Py_T_OBJECT_EX          *note PyObject: 339.*             *note object: a96. (D)
     ' Parte da                                                        
     *note ABI Estável: 553. desde
     a versão 3.12.'

     (*): Zero-terminated, UTF8-encoded C string.  With ‘Py_T_STRING’
     the C representation is a pointer; with ‘Py_T_STRING_INPLACE’ the
     string is stored directly in the structure.

     (**): String of length 1.  Only ASCII is accepted.

     (RO): implica *note Py_READONLY: 591.

     (D): pode ser deletado, neste caso o ponteiro é definido para
     ‘NULL’.  Ler um ponteiro ‘NULL’ levanta uma exceção *note
     AttributeError: 34b.

Adicionado na versão 3.12: In previous versions, the macros were only
available with ‘#include "structmember.h"’ and were named without the
‘Py_’ prefix (e.g.  as ‘T_INT’).  The header is still available and
contains the old names, along with the following deprecated types:

 -- C Macro: T_OBJECT

     Like ‘Py_T_OBJECT_EX’, but ‘NULL’ is converted to ‘None’.  This
     results in surprising behavior in Python: deleting the attribute
     effectively sets it to ‘None’.

 -- C Macro: T_NONE

     Sempre ‘None’.  Deve ser usado com *note Py_READONLY: 591.


File: python.info,  Node: Defining Getters and Setters,  Prev: Member types,  Up: Accessing attributes of extension types

7.12.2.6 Defining Getters and Setters
.....................................

 -- C Tipo: type PyGetSetDef
     ' Parte da *note ABI Estável: 553. (incluindo todos os membros).'
     Structure to define property-like access for a type.  See also
     description of the *note PyTypeObject.tp_getset: 4b80. slot.

      -- C Membro: const char *name

          attribute name

      -- C Membro: *note getter: 4e3d. get

          C function to get the attribute.

      -- C Membro: *note setter: 4e4b. set

          Optional C function to set or delete the attribute.  If
          ‘NULL’, the attribute is read-only.

      -- C Membro: const char *doc

          optional docstring

      -- C Membro: void *closure

          Optional user data pointer, providing additional data for
          getter and setter.

 -- C Tipo: typedef *note PyObject: 339. *(*getter)(*note PyObject:
          339.*, void*)
     ' Parte da *note ABI Estável: 553.'  The ‘get’ function takes one
     *note PyObject: 339.* parameter (the instance) and a user data
     pointer (the associated ‘closure’):

     It should return a new reference on success or ‘NULL’ with a set
     exception on failure.

 -- C Tipo: typedef int (*setter)(*note PyObject: 339.*, *note PyObject:
          339.*, void*)
     ' Parte da *note ABI Estável: 553.'  ‘set’ functions take two *note
     PyObject: 339.* parameters (the instance and the value to be set)
     and a user data pointer (the associated ‘closure’):

     In case the attribute should be deleted the second parameter is
     ‘NULL’.  Should return ‘0’ on success or ‘-1’ with a set exception
     on failure.


File: python.info,  Node: Estruturas de objetos tipo,  Next: Suporte a Coleta Cíclica de Lixo,  Prev: Estruturas comuns de objetos,  Up: Suporte a implementação de Objetos

7.12.3 Estruturas de objetos tipo
---------------------------------

Talvez uma das estruturas mais importantes do sistema de objetos Python
seja a estrutura que define um novo tipo: a estrutura *note
PyTypeObject: ab4.  Objetos tipo podem ser manipulados usando qualquer
uma das funções ‘PyObject_*’ ou ‘PyType_*’, mas não oferecem muito de
interessante para a maioria das aplicações Python.  Esses objetos são
fundamentais para o comportamento dos objetos, portanto, são muito
importantes para o próprio interpretador e para qualquer módulo de
extensão que implemente novos tipos.

Os objetos tipo são bastante grandes em comparação com a maioria dos
tipos padrão.  A razão para o tamanho é que cada objeto de tipo armazena
um grande número de valores, principalmente indicadores de função C,
cada um dos quais implementa uma pequena parte da funcionalidade do
tipo.  Os campos do objeto de tipo são examinados em detalhes nesta
seção.  Os campos serão descritos na ordem em que ocorrem na estrutura.

Além da referência rápida a seguir, a seção *note Exemplos: 5266.
fornece uma visão geral do significado e uso de *note PyTypeObject: ab4.

* Menu:

* Referências rápidas::
* PyTypeObject Definition::
* PyObject Slots::
* PyVarObject Slots::
* PyTypeObject Slots::
* Static Types::
* Tipos no heap::
* Number Object Structures::
* Mapping Object Structures::
* Sequence Object Structures::
* Buffer Object Structures::
* Async Object Structures::
* Slot Type typedefs::
* Exemplos: Exemplos<38>.


File: python.info,  Node: Referências rápidas,  Next: PyTypeObject Definition,  Up: Estruturas de objetos tipo

7.12.3.1 Referências rápidas
............................

* Menu:

* “slots tp”::
* sub-slots::
* slot typedefs::


File: python.info,  Node: “slots tp”,  Next: sub-slots,  Up: Referências rápidas

7.12.3.2 “slots tp”
...................

Slot de PyTypeObject   *note Tipo: 526a.      métodos/atributos      Info
(1)                                           especiais              (2)
                                                                     
---------------------------------------------------------------------------------------------
                                                                     
O                      T                      D                      I
                                                                     
                                                                                       
<R>                    const char *           __name__               X     X
*note tp_name: 1a3c.                                                       

*note tp_basicsize: 98e.*note Py_ssize_t: a69.                       X     X           X
                                                                                       
                                                                                       
*note tp_itemsize: 20fd.*note Py_ssize_t: a69.                             X           X
                                                                                       
                                                                                       
*note tp_dealloc: 4b66.*note destructor: 4e38.                       X     X           X
                                                                                       
                                                                                       
*note tp_vectorcall_offset: 4f1e.*note Py_ssize_t: a69.                    X           X
                                                                                       
                                                                                       
(*note tp_getattr: 4b96.)*note getattrfunc: 4e39.__getattribute__,                     G
                                              __getattr__                              
                                              
                                                                                       
(*note tp_setattr: 4b97.)*note setattrfunc: 4e49.__setattr__,                          G
                                              __delattr__                              
                                              
                                                                                       
*note tp_as_async: efe.*note PyAsyncMethods: 4f77.*note sub-slots: 526b.               %
                       *                                                               
                       
                                                                                       
*note tp_repr: 4b8d.   *note reprfunc: 4e47.  __repr__               X     X           X
                                                                                       
                                                                                       
*note tp_as_number: 992.*note PyNumberMethods: 1465.*note sub-slots: 526b.             %
                       *                                                               
                       
                                                                                       
*note tp_as_sequence: 526c.*note PySequenceMethods: 4b9d.*note sub-slots: 526b.        %
                       *                                                               
                       
                                                                                       
*note tp_as_mapping: 526d.*note PyMappingMethods: 4b9e.*note sub-slots: 526b.          %
                       *                                                               
                       
                                                                                       
*note tp_hash: 4b9f.   *note hashfunc: 4e3e.  __hash__               X                 G
                                                                                       
                                                                                       
*note tp_call: 559.    *note ternaryfunc: 4e4e.__call__                    X           X
                                                                                       
                                                                                       
*note tp_str: 4b8e.    *note reprfunc: 4e47.  __str__                X                 X
                                                                                       
                                                                                       
*note tp_getattro: 17e6.*note getattrofunc: 4e3a.__getattribute__,   X     X           G
                                              __getattr__                              
                                              
                                                                                       
*note tp_setattro: 4b91.*note setattrofunc: 4e4a.__setattr__,        X     X           G
                                              __delattr__                              
                                              
                                                                                       
*note tp_as_buffer: 990.*note PyBufferProcs: 4f7f.*note sub-slots: 526b.               %
                       *                                                               
                       
                                                                                       
*note tp_flags: 19fd.  unsigned long                                 X     X           ?
                                                                                       
                                                                                       
*note tp_doc: 4b75.    const char *           __doc__                X     X
                                                                           
                                                                                       
*note tp_traverse: 77e.*note traverseproc: 4e4f.                           X           G
                                                                                       
                                                                                       
*note tp_clear: 4b8b.  *note inquiry: 4e40.                                X           G
                                                                                       
                                                                                       
*note tp_richcompare: 4b99.*note richcmpfunc: 4e48.__lt__, __le__,   X                 G
                                              __eq__, __ne__,                          
                                              __gt__, __ge__
                                              
                                                                                       
(*note tp_weaklistoffset: 98f.)*note Py_ssize_t: a69.                      X           ?
                                                                                       
                                                                                       
*note tp_iter: 1537.   *note getiterfunc: 4e3c.__iter__                                X
                                                                                       
                                                                                       
*note tp_iternext: 1538.*note iternextfunc: 4e41.__next__                              X
                                                                                       
                                                                                       
*note tp_methods: 4b7d.*note PyMethodDef: 151f.                      X     X
                       []                                                  
                       
                                                                                       
*note tp_members: 4b7b.*note PyMemberDef: 54f.                             X
                       []                                                  
                       
                                                                                       
*note tp_getset: 4b80. *note PyGetSetDef: bd1.                       X     X
                       []                                                  
                       
                                                                                       
*note tp_base: 20b8.   *note PyTypeObject: ab4.__base__                          X
                       *                                                         
                       
                                                                                       
*note tp_dict: 180e.   *note PyObject: 339.   __dict__                           ?
                       *                                                         
                       
                                                                                       
*note tp_descr_get: 526e.*note descrgetfunc: 4e36.__get__                              X
                                                                                       
                                                                                       
*note tp_descr_set: 1a40.*note descrsetfunc: 4e37.__set__, __delete__                  X
                                                                                       
                                                                                       
(*note tp_dictoffset: 4f79.)*note Py_ssize_t: a69.                         X           ?
                                                                                       
                                                                                       
*note tp_init: 581.    *note initproc: 4e3f.  __init__               X     X           X
                                                                                       
                                                                                       
*note tp_alloc: 4b7a.  *note allocfunc: 4e34.                        X           ?     ?
                                                                                       
                                                                                       
*note tp_new: 57f.     *note newfunc: 4e43.   __new__                X     X     ?     ?
                                                                                       
                                                                                       
*note tp_free: 4b79.   *note freefunc: 50bf.                         X     X     ?     ?
                                                                                       
                                                                                       
*note tp_is_gc: 526f.  *note inquiry: 4e40.                                X           X
                                                                                       
                                                                                       
<*note tp_bases: 5270.>*note PyObject: 339.   __bases__                          ~
                       *                                                         
                       
                                                                                       
<*note tp_mro: 4f7c.>  *note PyObject: 339.   __mro__                            ~
                       *                                                         
                       
                                                                                       
[*note tp_cache: 4f7d.]*note PyObject: 339.
                       *
                       
                                                                                       
[*note tp_subclasses: 572.]void *             __subclasses__
                                              
                                                                                       
[*note tp_weaklist: 4f7e.]*note PyObject: 339.
                       *
                       
                                                                                       
(*note tp_del: 5271.)  *note destructor: 4e38.
                       
                                                                                       
[*note tp_version_tag: 5272.]unsigned int
                       
                                                                                       
*note tp_finalize: ab5.*note destructor: 4e38.__del__                                  X
                                                                                       
                                                                                       
*note tp_vectorcall: 4f7b.*note vectorcallfunc: 557.
                       
                                                                                       
[*note tp_watched: 5273.]unsigned char
                       

   ---------- Footnotes ----------

   (1) '()': Um nome de slot entre parênteses indica que está
(efetivamente) descontinuado.

'<>': Names in angle brackets should be initially set to ‘NULL’ and
treated as read-only.

'[]': Names in square brackets are for internal use only.

'<R>' (as a prefix) means the field is required (must be non-‘NULL’).

   (2) Columns:

'“O”': set on *note PyBaseObject_Type: 4c0e.

'“T”': set on *note PyType_Type: 54d.

'“D”': default (if slot is set to ‘NULL’)

     X - PyType_Ready sets this value if it is NULL
     ~ - PyType_Ready always sets this value (it should be NULL)
     ? - PyType_Ready may set this value depending on other slots

     Also see the inheritance column ("I").

'“I”': inheritance

     X - type slot is inherited via *PyType_Ready* if defined with a *NULL* value
     % - the slots of the sub-struct are inherited individually
     G - inherited, but only in combination with other slots; see the slot's description
     ? - it's complicated; see the slot's description

Note that some slots are effectively inherited through the normal
attribute lookup chain.


File: python.info,  Node: sub-slots,  Next: slot typedefs,  Prev: “slots tp”,  Up: Referências rápidas

7.12.3.3 sub-slots
..................

Slot                           *note Tipo: 526a.     special
                                                     methods
                                                     
----------------------------------------------------------------------
                                                     
*note am_await: 5275.          *note unaryfunc: 4e50.__await__
                                                     
                                                     
*note am_aiter: 5276.          *note unaryfunc: 4e50.__aiter__
                                                     
                                                     
*note am_anext: 5277.          *note unaryfunc: 4e50.__anext__
                                                     
                                                     
*note am_send: 5278.           *note sendfunc: 5279.
                               
                                                     
                                                     
*note nb_add: 4f6e.            *note binaryfunc: 4e35.__add__
                                                     __radd__
                                                     
                                                     
*note nb_inplace_add: 527a.    *note binaryfunc: 4e35.__iadd__
                                                     
                                                     
*note nb_subtract: 527b.       *note binaryfunc: 4e35.__sub__
                                                     __rsub__
                                                     
                                                     
*note nb_inplace_subtract: 527c.*note binaryfunc: 4e35.__isub__
                                                     
                                                     
*note nb_multiply: 527d.       *note binaryfunc: 4e35.__mul__
                                                     __rmul__
                                                     
                                                     
*note nb_inplace_multiply: 527e.*note binaryfunc: 4e35.__imul__
                                                     
                                                     
*note nb_remainder: 527f.      *note binaryfunc: 4e35.__mod__
                                                     __rmod__
                                                     
                                                     
*note nb_inplace_remainder: 5280.*note binaryfunc: 4e35.__imod__
                                                     
                                                     
*note nb_divmod: 5281.         *note binaryfunc: 4e35.__divmod__
                                                     __rdivmod__
                                                     
                                                     
*note nb_power: 5282.          *note ternaryfunc: 4e4e.__pow__
                                                     __rpow__
                                                     
                                                     
*note nb_inplace_power: 5283.  *note ternaryfunc: 4e4e.__ipow__
                                                     
                                                     
*note nb_negative: 5284.       *note unaryfunc: 4e50.__neg__
                                                     
                                                     
*note nb_positive: 5285.       *note unaryfunc: 4e50.__pos__
                                                     
                                                     
*note nb_absolute: 5286.       *note unaryfunc: 4e50.__abs__
                                                     
                                                     
*note nb_bool: 5287.           *note inquiry: 4e40.  __bool__
                                                     
                                                     
*note nb_invert: 5288.         *note unaryfunc: 4e50.__invert__
                                                     
                                                     
*note nb_lshift: 5289.         *note binaryfunc: 4e35.__lshift__
                                                     __rlshift__
                                                     
                                                     
*note nb_inplace_lshift: 528a. *note binaryfunc: 4e35.__ilshift__
                                                     
                                                     
*note nb_rshift: 528b.         *note binaryfunc: 4e35.__rshift__
                                                     __rrshift__
                                                     
                                                     
*note nb_inplace_rshift: 528c. *note binaryfunc: 4e35.__irshift__
                                                     
                                                     
*note nb_and: 528d.            *note binaryfunc: 4e35.__and__
                                                     __rand__
                                                     
                                                     
*note nb_inplace_and: 528e.    *note binaryfunc: 4e35.__iand__
                                                     
                                                     
*note nb_xor: 528f.            *note binaryfunc: 4e35.__xor__
                                                     __rxor__
                                                     
                                                     
*note nb_inplace_xor: 5290.    *note binaryfunc: 4e35.__ixor__
                                                     
                                                     
*note nb_or: 5291.             *note binaryfunc: 4e35.__or__ __ror__
                                                     
                                                     
*note nb_inplace_or: 5292.     *note binaryfunc: 4e35.__ior__
                                                     
                                                     
*note nb_int: 5293.            *note unaryfunc: 4e50.__int__
                                                     
                                                     
*note nb_reserved: 5294.       void *
                               
                                                     
*note nb_float: 5295.          *note unaryfunc: 4e50.__float__
                                                     
                                                     
*note nb_floor_divide: 5296.   *note binaryfunc: 4e35.__floordiv__
                                                     
                                                     
*note nb_inplace_floor_divide: 5297.*note binaryfunc: 4e35.__ifloordiv__
                                                     
                                                     
*note nb_true_divide: 5298.    *note binaryfunc: 4e35.__truediv__
                                                     
                                                     
*note nb_inplace_true_divide: 5299.*note binaryfunc: 4e35.__itruediv__
                                                     
                                                     
*note nb_index: 1464.          *note unaryfunc: 4e50.__index__
                                                     
                                                     
*note nb_matrix_multiply: 529a.*note binaryfunc: 4e35.__matmul__
                                                     __rmatmul__
                                                     
                                                     
*note nb_inplace_matrix_multiply: 529b.*note binaryfunc: 4e35.__imatmul__
                                                     
                                                     
                                                     
*note mp_length: 529c.         *note lenfunc: 4e42.  __len__
                                                     
                                                     
*note mp_subscript: 1a83.      *note binaryfunc: 4e35.__getitem__
                                                     
                                                     
*note mp_ass_subscript: 529d.  *note objobjargproc: 4e44.__setitem__,
                                                     __delitem__
                                                     
                                                     
                                                     
*note sq_length: 4f78.         *note lenfunc: 4e42.  __len__
                                                     
                                                     
*note sq_concat: 529e.         *note binaryfunc: 4e35.__add__
                                                     
                                                     
*note sq_repeat: 529f.         *note ssizeargfunc: 4e4c.__mul__
                                                     
                                                     
*note sq_item: 1a82.           *note ssizeargfunc: 4e4c.__getitem__
                                                     
                                                     
*note sq_ass_item: 52a0.       *note ssizeobjargproc: 4e4d.__setitem__
                                                     __delitem__
                                                     
                                                     
*note sq_contains: 52a1.       *note objobjproc: 4e45.__contains__
                                                     
                                                     
*note sq_inplace_concat: 52a2. *note binaryfunc: 4e35.__iadd__
                                                     
                                                     
*note sq_inplace_repeat: 52a3. *note ssizeargfunc: 4e4c.__imul__
                                                     
                                                     
                                                     
*note bf_getbuffer: 762.       *note getbufferproc(): 4e3b.__buffer__
                                                     
                                                     
*note bf_releasebuffer: 763.   *note releasebufferproc(): 4e46.__release_buffer__
                                                     


File: python.info,  Node: slot typedefs,  Prev: sub-slots,  Up: Referências rápidas

7.12.3.4 slot typedefs
......................

typedef                           Parameter Types                   Return Type
                                                                    
-----------------------------------------------------------------------------------------------
                                                                    
*note allocfunc: 4e34.                 *note PyTypeObject: ab4. *   *note PyObject: 339. *
                                       *note Py_ssize_t: a69.       
                                  
                                                                    
*note destructor: 4e38.           *note PyObject: 339. *            void
                                                                    
                                                                    
*note freefunc: 50bf.             void *                            void
                                                                    
                                                                    
*note traverseproc: 4e4f.              *note PyObject: 339. *       int
                                       *note visitproc: 4e51.       
                                       void *
                                  
                                                                    
*note newfunc: 4e43.                   *note PyTypeObject: ab4. *   *note PyObject: 339. *
                                       *note PyObject: 339. *       
                                       *note PyObject: 339. *
                                  
                                                                    
*note initproc: 4e3f.                  *note PyObject: 339. *       int
                                       *note PyObject: 339. *       
                                       *note PyObject: 339. *
                                  
                                                                    
*note reprfunc: 4e47.             *note PyObject: 339. *            *note PyObject: 339. *
                                                                    
                                                                    
*note getattrfunc: 4e39.               *note PyObject: 339. *       *note PyObject: 339. *
                                       const char *                 
                                  
                                                                    
*note setattrfunc: 4e49.               *note PyObject: 339. *       int
                                       const char *                 
                                       *note PyObject: 339. *
                                  
                                                                    
*note getattrofunc: 4e3a.              *note PyObject: 339. *       *note PyObject: 339. *
                                       *note PyObject: 339. *       
                                  
                                                                    
*note setattrofunc: 4e4a.              *note PyObject: 339. *       int
                                       *note PyObject: 339. *       
                                       *note PyObject: 339. *
                                  
                                                                    
*note descrgetfunc: 4e36.              *note PyObject: 339. *       *note PyObject: 339. *
                                       *note PyObject: 339. *       
                                       *note PyObject: 339. *
                                  
                                                                    
*note descrsetfunc: 4e37.              *note PyObject: 339. *       int
                                       *note PyObject: 339. *       
                                       *note PyObject: 339. *
                                  
                                                                    
*note hashfunc: 4e3e.             *note PyObject: 339. *            Py_hash_t
                                                                    
                                                                    
*note richcmpfunc: 4e48.               *note PyObject: 339. *       *note PyObject: 339. *
                                       *note PyObject: 339. *       
                                       int
                                  
                                                                    
*note getiterfunc: 4e3c.          *note PyObject: 339. *            *note PyObject: 339. *
                                                                    
                                                                    
*note iternextfunc: 4e41.         *note PyObject: 339. *            *note PyObject: 339. *
                                                                    
                                                                    
*note lenfunc: 4e42.              *note PyObject: 339. *            *note Py_ssize_t: a69.
                                                                    
                                                                    
*note getbufferproc: 4e3b.             *note PyObject: 339. *       int
                                       *note Py_buffer: 758. *      
                                       int
                                  
                                                                    
*note releasebufferproc: 4e46.         *note PyObject: 339. *       void
                                       *note Py_buffer: 758. *      
                                  
                                                                    
*note inquiry: 4e40.              *note PyObject: 339. *            int
                                                                    
                                                                    
*note unaryfunc: 4e50.                 *note PyObject: 339. *       *note PyObject: 339. *
                                                                    
                                                                    
*note binaryfunc: 4e35.                *note PyObject: 339. *       *note PyObject: 339. *
                                       *note PyObject: 339. *       
                                  
                                                                    
*note ternaryfunc: 4e4e.               *note PyObject: 339. *       *note PyObject: 339. *
                                       *note PyObject: 339. *       
                                       *note PyObject: 339. *
                                  
                                                                    
*note ssizeargfunc: 4e4c.              *note PyObject: 339. *       *note PyObject: 339. *
                                       *note Py_ssize_t: a69.       
                                  
                                                                    
*note ssizeobjargproc: 4e4d.           *note PyObject: 339. *       int
                                       *note Py_ssize_t: a69.       
                                       *note PyObject: 339. *
                                  
                                                                    
*note objobjproc: 4e45.                *note PyObject: 339. *       int
                                       *note PyObject: 339. *       
                                  
                                                                    
*note objobjargproc: 4e44.             *note PyObject: 339. *       int
                                       *note PyObject: 339. *       
                                       *note PyObject: 339. *
                                  

See *note Slot Type typedefs: 52a5. below for more detail.


File: python.info,  Node: PyTypeObject Definition,  Next: PyObject Slots,  Prev: Referências rápidas,  Up: Estruturas de objetos tipo

7.12.3.5 PyTypeObject Definition
................................

The structure definition for *note PyTypeObject: ab4. can be found in
‘Include/cpython/object.h’.  For convenience of reference, this repeats
the definition found there:

     typedef struct _typeobject {
         PyObject_VAR_HEAD
         const char *tp_name; /* For printing, in format "<module>.<name>" */
         Py_ssize_t tp_basicsize, tp_itemsize; /* For allocation */

         /* Methods to implement standard operations */

         destructor tp_dealloc;
         Py_ssize_t tp_vectorcall_offset;
         getattrfunc tp_getattr;
         setattrfunc tp_setattr;
         PyAsyncMethods *tp_as_async; /* formerly known as tp_compare (Python 2)
                                         or tp_reserved (Python 3) */
         reprfunc tp_repr;

         /* Method suites for standard classes */

         PyNumberMethods *tp_as_number;
         PySequenceMethods *tp_as_sequence;
         PyMappingMethods *tp_as_mapping;

         /* More standard operations (here for binary compatibility) */

         hashfunc tp_hash;
         ternaryfunc tp_call;
         reprfunc tp_str;
         getattrofunc tp_getattro;
         setattrofunc tp_setattro;

         /* Functions to access object as input/output buffer */
         PyBufferProcs *tp_as_buffer;

         /* Flags to define presence of optional/expanded features */
         unsigned long tp_flags;

         const char *tp_doc; /* Documentation string */

         /* Assigned meaning in release 2.0 */
         /* call function for all accessible objects */
         traverseproc tp_traverse;

         /* delete references to contained objects */
         inquiry tp_clear;

         /* Assigned meaning in release 2.1 */
         /* rich comparisons */
         richcmpfunc tp_richcompare;

         /* weak reference enabler */
         Py_ssize_t tp_weaklistoffset;

         /* Iterators */
         getiterfunc tp_iter;
         iternextfunc tp_iternext;

         /* Attribute descriptor and subclassing stuff */
         struct PyMethodDef *tp_methods;
         struct PyMemberDef *tp_members;
         struct PyGetSetDef *tp_getset;
         // Strong reference on a heap type, borrowed reference on a static type
         struct _typeobject *tp_base;
         PyObject *tp_dict;
         descrgetfunc tp_descr_get;
         descrsetfunc tp_descr_set;
         Py_ssize_t tp_dictoffset;
         initproc tp_init;
         allocfunc tp_alloc;
         newfunc tp_new;
         freefunc tp_free; /* Low-level free-memory routine */
         inquiry tp_is_gc; /* For PyObject_IS_GC */
         PyObject *tp_bases;
         PyObject *tp_mro; /* method resolution order */
         PyObject *tp_cache;
         PyObject *tp_subclasses;
         PyObject *tp_weaklist;
         destructor tp_del;

         /* Type attribute cache version tag. Added in version 2.6 */
         unsigned int tp_version_tag;

         destructor tp_finalize;
         vectorcallfunc tp_vectorcall;

         /* bitset of which type-watchers care about this type */
         unsigned char tp_watched;
     } PyTypeObject;


File: python.info,  Node: PyObject Slots,  Next: PyVarObject Slots,  Prev: PyTypeObject Definition,  Up: Estruturas de objetos tipo

7.12.3.6 PyObject Slots
.......................

The type object structure extends the *note PyVarObject: 4384.
structure.  The *note ob_size: 4dba. field is used for dynamic types
(created by ‘type_new()’, usually called from a class statement).  Note
that *note PyType_Type: 54d. (the metatype) initializes *note
tp_itemsize: 20fd, which means that its instances (i.e.  type objects)
'must' have the *note ob_size: 4dba. field.

 -- C Membro: *note Py_ssize_t: a69. *note PyObject: 339.ob_refcnt
     ' Parte da *note ABI Estável: 553.'  This is the type object’s
     reference count, initialized to ‘1’ by the ‘PyObject_HEAD_INIT’
     macro.  Note that for *note statically allocated type objects: 77f,
     the type’s instances (objects whose *note ob_type: 4b77. points
     back to the type) do 'not' count as references.  But for *note
     dynamically allocated type objects: 96c, the instances 'do' count
     as references.

     'Inheritance:'

     This field is not inherited by subtypes.

 -- C Membro: *note PyTypeObject: ab4. **note PyObject: 339.ob_type
     ' Parte da *note ABI Estável: 553.'  This is the type’s type, in
     other words its metatype.  It is initialized by the argument to the
     ‘PyObject_HEAD_INIT’ macro, and its value should normally be
     ‘&PyType_Type’.  However, for dynamically loadable extension
     modules that must be usable on Windows (at least), the compiler
     complains that this is not a valid initializer.  Therefore, the
     convention is to pass ‘NULL’ to the ‘PyObject_HEAD_INIT’ macro and
     to initialize this field explicitly at the start of the module’s
     initialization function, before doing anything else.  This is
     typically done like this:

          Foo_Type.ob_type = &PyType_Type;

     This should be done before any instances of the type are created.
     *note PyType_Ready(): 77c. checks if *note ob_type: 4b77. is
     ‘NULL’, and if so, initializes it to the *note ob_type: 4b77. field
     of the base class.  *note PyType_Ready(): 77c. will not change this
     field if it is non-zero.

     'Inheritance:'

     This field is inherited by subtypes.


File: python.info,  Node: PyVarObject Slots,  Next: PyTypeObject Slots,  Prev: PyObject Slots,  Up: Estruturas de objetos tipo

7.12.3.7 PyVarObject Slots
..........................

 -- C Membro: *note Py_ssize_t: a69. *note PyVarObject: 4384.ob_size
     ' Parte da *note ABI Estável: 553.'  For *note statically allocated
     type objects: 77f, this should be initialized to zero.  For *note
     dynamically allocated type objects: 96c, this field has a special
     internal meaning.

     This field should be accessed using the *note Py_SIZE(): 782. and
     *note Py_SET_SIZE(): 783. macros.

     'Inheritance:'

     This field is not inherited by subtypes.


File: python.info,  Node: PyTypeObject Slots,  Next: Static Types,  Prev: PyVarObject Slots,  Up: Estruturas de objetos tipo

7.12.3.8 PyTypeObject Slots
...........................

Each slot has a section describing inheritance.  If *note
PyType_Ready(): 77c. may set a value when the field is set to ‘NULL’
then there will also be a “Default” section.  (Note that many fields set
on *note PyBaseObject_Type: 4c0e. and *note PyType_Type: 54d.
effectively act as defaults.)

 -- C Membro: const char **note PyTypeObject: ab4.tp_name

     Pointer to a NUL-terminated string containing the name of the type.
     For types that are accessible as module globals, the string should
     be the full module name, followed by a dot, followed by the type
     name; for built-in types, it should be just the type name.  If the
     module is a submodule of a package, the full package name is part
     of the full module name.  For example, a type named ‘T’ defined in
     module ‘M’ in subpackage ‘Q’ in package ‘P’ should have the *note
     tp_name: 1a3c. initializer ‘"P.Q.M.T"’.

     For *note dynamically allocated type objects: 96c, this should just
     be the type name, and the module name explicitly stored in the type
     dict as the value for key ‘'__module__'’.

     For *note statically allocated type objects: 77f, the 'tp_name'
     field should contain a dot.  Everything before the last dot is made
     accessible as the *note __module__: 374. attribute, and everything
     after the last dot is made accessible as the *note __name__: 14f3.
     attribute.

     If no dot is present, the entire *note tp_name: 1a3c. field is made
     accessible as the *note __name__: 14f3. attribute, and the *note
     __module__: 374. attribute is undefined (unless explicitly set in
     the dictionary, as explained above).  This means your type will be
     impossible to pickle.  Additionally, it will not be listed in
     module documentations created with pydoc.

     This field must not be ‘NULL’.  It is the only required field in
     *note PyTypeObject(): ab4. (other than potentially *note
     tp_itemsize: 20fd.).

     'Inheritance:'

     This field is not inherited by subtypes.

 -- C Membro: *note Py_ssize_t: a69. *note PyTypeObject:
          ab4.tp_basicsize
 -- C Membro: *note Py_ssize_t: a69. *note PyTypeObject: ab4.tp_itemsize

     These fields allow calculating the size in bytes of instances of
     the type.

     There are two kinds of types: types with fixed-length instances
     have a zero ‘tp_itemsize’ field, types with variable-length
     instances have a non-zero ‘tp_itemsize’ field.  For a type with
     fixed-length instances, all instances have the same size, given in
     ‘tp_basicsize’.  (Exceptions to this rule can be made using *note
     PyUnstable_Object_GC_NewWithExtraData(): 182d.)

     For a type with variable-length instances, the instances must have
     an *note ob_size: 4dba. field, and the instance size is
     ‘tp_basicsize’ plus N times ‘tp_itemsize’, where N is the “length”
     of the object.

     Functions like *note PyObject_NewVar(): 98d. will take the value of
     N as an argument, and store in the instance’s *note ob_size: 4dba.
     field.  Note that the *note ob_size: 4dba. field may later be used
     for other purposes.  For example, *note int: 257. instances use the
     bits of *note ob_size: 4dba. in an implementation-defined way; the
     underlying storage and its size should be accessed using
     ‘PyLong_Export()’.

          Nota: The *note ob_size: 4dba. field should be accessed using
          the *note Py_SIZE(): 782. and *note Py_SET_SIZE(): 783.
          macros.

     Also, the presence of an *note ob_size: 4dba. field in the instance
     layout doesn’t mean that the instance structure is variable-length.
     For example, the *note list: 611. type has fixed-length instances,
     yet those instances have a *note ob_size: 4dba. field.  (As with
     *note int: 257, avoid reading lists’ ‘ob_size’ directly.  Call
     *note PyList_Size(): 1461. instead.)

     The ‘tp_basicsize’ includes size needed for data of the type’s
     *note tp_base: 20b8, plus any extra data needed by each instance.

     The correct way to set ‘tp_basicsize’ is to use the ‘sizeof’
     operator on the struct used to declare the instance layout.  This
     struct must include the struct used to declare the base type.  In
     other words, ‘tp_basicsize’ must be greater than or equal to the
     base’s ‘tp_basicsize’.

     Since every type is a subtype of *note object: a96, this struct
     must include *note PyObject: 339. or *note PyVarObject: 4384.
     (depending on whether *note ob_size: 4dba. should be included).
     These are usually defined by the macro *note PyObject_HEAD: 1321.
     or *note PyObject_VAR_HEAD: 5245, respectively.

     The basic size does not include the GC header size, as that header
     is not part of *note PyObject_HEAD: 1321.

     For cases where struct used to declare the base type is unknown,
     see *note PyType_Spec.basicsize: 548. and *note
     PyType_FromMetaclass(): 550.

     Notes about alignment:

        - ‘tp_basicsize’ must be a multiple of ‘_Alignof(PyObject)’.
          When using ‘sizeof’ on a ‘struct’ that includes *note
          PyObject_HEAD: 1321, as recommended, the compiler ensures
          this.  When not using a C ‘struct’, or when using compiler
          extensions like ‘__attribute__((packed))’, it is up to you.

        - If the variable items require a particular alignment,
          ‘tp_basicsize’ and ‘tp_itemsize’ must each be a multiple of
          that alignment.  For example, if a type’s variable part stores
          a ‘double’, it is your responsibility that both fields are a
          multiple of ‘_Alignof(double)’.

     'Inheritance:'

     These fields are inherited separately by subtypes.  (That is, if
     the field is set to zero, *note PyType_Ready(): 77c. will copy the
     value from the base type, indicating that the instances do not need
     additional storage.)

     If the base type has a non-zero *note tp_itemsize: 20fd, it is
     generally not safe to set *note tp_itemsize: 20fd. to a different
     non-zero value in a subtype (though this depends on the
     implementation of the base type).

 -- C Membro: *note destructor: 4e38. *note PyTypeObject: ab4.tp_dealloc

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_dealloc’ is part of
     the *note ABI Estável: 553.'

     A pointer to the instance destructor function.  This function must
     be defined unless the type guarantees that its instances will never
     be deallocated (as is the case for the singletons ‘None’ and
     ‘Ellipsis’).  The function signature is:

          void tp_dealloc(PyObject *self);

     The destructor function is called by the *note Py_DECREF(): 56f.
     and *note Py_XDECREF(): 78f. macros when the new reference count is
     zero.  At this point, the instance is still in existence, but there
     are no references to it.  The destructor function should free all
     references which the instance owns, free all memory buffers owned
     by the instance (using the freeing function corresponding to the
     allocation function used to allocate the buffer), and call the
     type’s *note tp_free: 4b79. function.  If the type is not
     subtypable (doesn’t have the *note Py_TPFLAGS_BASETYPE: 4b7e. flag
     bit set), it is permissible to call the object deallocator directly
     instead of via *note tp_free: 4b79.  The object deallocator should
     be the one used to allocate the instance; this is normally *note
     PyObject_Del(): 1519. if the instance was allocated using *note
     PyObject_New: 98c. or *note PyObject_NewVar: 98d, or *note
     PyObject_GC_Del(): 154c. if the instance was allocated using *note
     PyObject_GC_New: ab1. or *note PyObject_GC_NewVar: ab2.

     If the type supports garbage collection (has the *note
     Py_TPFLAGS_HAVE_GC: 77d. flag bit set), the destructor should call
     *note PyObject_GC_UnTrack(): 154e. before clearing any member
     fields.

          static void foo_dealloc(foo_object *self) {
              PyObject_GC_UnTrack(self);
              Py_CLEAR(self->ref);
              Py_TYPE(self)->tp_free((PyObject *)self);
          }

     Finally, if the type is heap allocated (*note Py_TPFLAGS_HEAPTYPE:
     8b4.), the deallocator should release the owned reference to its
     type object (via *note Py_DECREF(): 56f.) after calling the type
     deallocator.  In order to avoid dangling pointers, the recommended
     way to achieve this is:

          static void foo_dealloc(foo_object *self) {
              PyTypeObject *tp = Py_TYPE(self);
              // free references and buffers here
              tp->tp_free(self);
              Py_DECREF(tp);
          }

          Aviso: In a garbage collected Python, ‘tp_dealloc’ may be
          called from any Python thread, not just the thread which
          created the object (if the object becomes part of a refcount
          cycle, that cycle might be collected by a garbage collection
          on any thread).  This is not a problem for Python API calls,
          since the thread on which ‘tp_dealloc’ is called will own the
          Global Interpreter Lock (GIL). However, if the object being
          destroyed in turn destroys objects from some other C or C++
          library, care should be taken to ensure that destroying those
          objects on the thread which called ‘tp_dealloc’ will not
          violate any assumptions of the library.

     'Inheritance:'

     This field is inherited by subtypes.

 -- C Membro: *note Py_ssize_t: a69. *note PyTypeObject:
          ab4.tp_vectorcall_offset

     An optional offset to a per-instance function that implements
     calling the object using the *note vectorcall protocol: 552, a more
     efficient alternative of the simpler *note tp_call: 559.

     This field is only used if the flag *note
     Py_TPFLAGS_HAVE_VECTORCALL: 554. is set.  If so, this must be a
     positive integer containing the offset in the instance of a *note
     vectorcallfunc: 557. pointer.

     The 'vectorcallfunc' pointer may be ‘NULL’, in which case the
     instance behaves as if *note Py_TPFLAGS_HAVE_VECTORCALL: 554. was
     not set: calling the instance falls back to *note tp_call: 559.

     Any class that sets ‘Py_TPFLAGS_HAVE_VECTORCALL’ must also set
     *note tp_call: 559. and make sure its behaviour is consistent with
     the 'vectorcallfunc' function.  This can be done by setting
     'tp_call' to *note PyVectorcall_Call(): 556.

     Alterado na versão 3.8: Before version 3.8, this slot was named
     ‘tp_print’.  In Python 2.x, it was used for printing to a file.  In
     Python 3.0 to 3.7, it was unused.

     Alterado na versão 3.12: Before version 3.12, it was not
     recommended for *note mutable heap types: 96c. to implement the
     vectorcall protocol.  When a user sets *note __call__: 558. in
     Python code, only 'tp_call' is updated, likely making it
     inconsistent with the vectorcall function.  Since 3.12, setting
     ‘__call__’ will disable vectorcall optimization by clearing the
     *note Py_TPFLAGS_HAVE_VECTORCALL: 554. flag.

     'Inheritance:'

     This field is always inherited.  However, the *note
     Py_TPFLAGS_HAVE_VECTORCALL: 554. flag is not always inherited.  If
     it’s not set, then the subclass won’t use *note vectorcall: 552,
     except when *note PyVectorcall_Call(): 556. is explicitly called.

 -- C Membro: *note getattrfunc: 4e39. *note PyTypeObject:
          ab4.tp_getattr

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_getattr’ is part of
     the *note ABI Estável: 553.'

     An optional pointer to the get-attribute-string function.

     This field is deprecated.  When it is defined, it should point to a
     function that acts the same as the *note tp_getattro: 17e6.
     function, but taking a C string instead of a Python string object
     to give the attribute name.

     'Inheritance:'

     Group: *note tp_getattr: 4b96, *note tp_getattro: 17e6.

     This field is inherited by subtypes together with *note
     tp_getattro: 17e6.: a subtype inherits both *note tp_getattr: 4b96.
     and *note tp_getattro: 17e6. from its base type when the subtype’s
     *note tp_getattr: 4b96. and *note tp_getattro: 17e6. are both
     ‘NULL’.

 -- C Membro: *note setattrfunc: 4e49. *note PyTypeObject:
          ab4.tp_setattr

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_setattr’ is part of
     the *note ABI Estável: 553.'

     An optional pointer to the function for setting and deleting
     attributes.

     This field is deprecated.  When it is defined, it should point to a
     function that acts the same as the *note tp_setattro: 4b91.
     function, but taking a C string instead of a Python string object
     to give the attribute name.

     'Inheritance:'

     Group: *note tp_setattr: 4b97, *note tp_setattro: 4b91.

     This field is inherited by subtypes together with *note
     tp_setattro: 4b91.: a subtype inherits both *note tp_setattr: 4b97.
     and *note tp_setattro: 4b91. from its base type when the subtype’s
     *note tp_setattr: 4b97. and *note tp_setattro: 4b91. are both
     ‘NULL’.

 -- C Membro: *note PyAsyncMethods: 4f77. **note PyTypeObject:
          ab4.tp_as_async

     Pointer to an additional structure that contains fields relevant
     only to objects which implement *note awaitable: 1ad. and *note
     asynchronous iterator: 1ab. protocols at the C-level.  See *note
     Async Object Structures: 52aa. for details.

     Adicionado na versão 3.5: Formerly known as ‘tp_compare’ and
     ‘tp_reserved’.

     'Inheritance:'

     The *note tp_as_async: efe. field is not inherited, but the
     contained fields are inherited individually.

 -- C Membro: *note reprfunc: 4e47. *note PyTypeObject: ab4.tp_repr

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_repr’ is part of
     the *note ABI Estável: 553.'

     An optional pointer to a function that implements the built-in
     function *note repr(): 800.

     The signature is the same as for *note PyObject_Repr(): 1067.:

          PyObject *tp_repr(PyObject *self);

     The function must return a string or a Unicode object.  Ideally,
     this function should return a string that, when passed to *note
     eval(): 180, given a suitable environment, returns an object with
     the same value.  If this is not feasible, it should return a string
     starting with ‘'<'’ and ending with ‘'>'’ from which both the type
     and the value of the object can be deduced.

     'Inheritance:'

     This field is inherited by subtypes.

     'Padrão:'

     When this field is not set, a string of the form ‘<%s object at
     %p>’ is returned, where ‘%s’ is replaced by the type name, and ‘%p’
     by the object’s memory address.

 -- C Membro: *note PyNumberMethods: 1465. **note PyTypeObject:
          ab4.tp_as_number

     Pointer to an additional structure that contains fields relevant
     only to objects which implement the number protocol.  These fields
     are documented in *note Number Object Structures: 52ab.

     'Inheritance:'

     The *note tp_as_number: 992. field is not inherited, but the
     contained fields are inherited individually.

 -- C Membro: *note PySequenceMethods: 4b9d. **note PyTypeObject:
          ab4.tp_as_sequence

     Pointer to an additional structure that contains fields relevant
     only to objects which implement the sequence protocol.  These
     fields are documented in *note Sequence Object Structures: 52ac.

     'Inheritance:'

     The *note tp_as_sequence: 526c. field is not inherited, but the
     contained fields are inherited individually.

 -- C Membro: *note PyMappingMethods: 4b9e. **note PyTypeObject:
          ab4.tp_as_mapping

     Pointer to an additional structure that contains fields relevant
     only to objects which implement the mapping protocol.  These fields
     are documented in *note Mapping Object Structures: 52ad.

     'Inheritance:'

     The *note tp_as_mapping: 526d. field is not inherited, but the
     contained fields are inherited individually.

 -- C Membro: *note hashfunc: 4e3e. *note PyTypeObject: ab4.tp_hash

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_hash’ is part of
     the *note ABI Estável: 553.'

     An optional pointer to a function that implements the built-in
     function *note hash(): 5eb.

     The signature is the same as for *note PyObject_Hash(): 403.:

          Py_hash_t tp_hash(PyObject *);

     The value ‘-1’ should not be returned as a normal return value;
     when an error occurs during the computation of the hash value, the
     function should set an exception and return ‘-1’.

     When this field is not set ('and' *note tp_richcompare: 4b99. is
     not set), an attempt to take the hash of the object raises *note
     TypeError: 2c3.  This is the same as setting it to *note
     PyObject_HashNotImplemented(): 140d.

     This field can be set explicitly to *note
     PyObject_HashNotImplemented(): 140d. to block inheritance of the
     hash method from a parent type.  This is interpreted as the
     equivalent of ‘__hash__ = None’ at the Python level, causing
     ‘isinstance(o, collections.Hashable)’ to correctly return ‘False’.
     Note that the converse is also true - setting ‘__hash__ = None’ on
     a class at the Python level will result in the ‘tp_hash’ slot being
     set to *note PyObject_HashNotImplemented(): 140d.

     'Inheritance:'

     Group: *note tp_hash: 4b9f, *note tp_richcompare: 4b99.

     This field is inherited by subtypes together with *note
     tp_richcompare: 4b99.: a subtype inherits both of *note
     tp_richcompare: 4b99. and *note tp_hash: 4b9f, when the subtype’s
     *note tp_richcompare: 4b99. and *note tp_hash: 4b9f. are both
     ‘NULL’.

     'Padrão:'

     *note PyBaseObject_Type: 4c0e. uses *note PyObject_GenericHash():
     367.

 -- C Membro: *note ternaryfunc: 4e4e. *note PyTypeObject: ab4.tp_call

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_call’ is part of
     the *note ABI Estável: 553.'

     An optional pointer to a function that implements calling the
     object.  This should be ‘NULL’ if the object is not callable.  The
     signature is the same as for *note PyObject_Call(): 39c.:

          PyObject *tp_call(PyObject *self, PyObject *args, PyObject *kwargs);

     'Inheritance:'

     This field is inherited by subtypes.

 -- C Membro: *note reprfunc: 4e47. *note PyTypeObject: ab4.tp_str

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_str’ is part of the
     *note ABI Estável: 553.'

     An optional pointer to a function that implements the built-in
     operation *note str(): 44c.  (Note that *note str: 44c. is a type
     now, and *note str(): 44c. calls the constructor for that type.
     This constructor calls *note PyObject_Str(): 1068. to do the actual
     work, and *note PyObject_Str(): 1068. will call this handler.)

     The signature is the same as for *note PyObject_Str(): 1068.:

          PyObject *tp_str(PyObject *self);

     The function must return a string or a Unicode object.  It should
     be a “friendly” string representation of the object, as this is the
     representation that will be used, among other things, by the *note
     print(): fa9. function.

     'Inheritance:'

     This field is inherited by subtypes.

     'Padrão:'

     When this field is not set, *note PyObject_Repr(): 1067. is called
     to return a string representation.

 -- C Membro: *note getattrofunc: 4e3a. *note PyTypeObject:
          ab4.tp_getattro

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_getattro’ is part
     of the *note ABI Estável: 553.'

     An optional pointer to the get-attribute function.

     The signature is the same as for *note PyObject_GetAttr(): 347.:

          PyObject *tp_getattro(PyObject *self, PyObject *attr);

     It is usually convenient to set this field to *note
     PyObject_GenericGetAttr(): 4d2b, which implements the normal way of
     looking for object attributes.

     'Inheritance:'

     Group: *note tp_getattr: 4b96, *note tp_getattro: 17e6.

     This field is inherited by subtypes together with *note tp_getattr:
     4b96.: a subtype inherits both *note tp_getattr: 4b96. and *note
     tp_getattro: 17e6. from its base type when the subtype’s *note
     tp_getattr: 4b96. and *note tp_getattro: 17e6. are both ‘NULL’.

     'Padrão:'

     *note PyBaseObject_Type: 4c0e. uses *note
     PyObject_GenericGetAttr(): 4d2b.

 -- C Membro: *note setattrofunc: 4e4a. *note PyTypeObject:
          ab4.tp_setattro

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_setattro’ is part
     of the *note ABI Estável: 553.'

     An optional pointer to the function for setting and deleting
     attributes.

     The signature is the same as for *note PyObject_SetAttr(): 4d34.:

          int tp_setattro(PyObject *self, PyObject *attr, PyObject *value);

     In addition, setting 'value' to ‘NULL’ to delete an attribute must
     be supported.  It is usually convenient to set this field to *note
     PyObject_GenericSetAttr(): 4d2c, which implements the normal way of
     setting object attributes.

     'Inheritance:'

     Group: *note tp_setattr: 4b97, *note tp_setattro: 4b91.

     This field is inherited by subtypes together with *note tp_setattr:
     4b97.: a subtype inherits both *note tp_setattr: 4b97. and *note
     tp_setattro: 4b91. from its base type when the subtype’s *note
     tp_setattr: 4b97. and *note tp_setattro: 4b91. are both ‘NULL’.

     'Padrão:'

     *note PyBaseObject_Type: 4c0e. uses *note
     PyObject_GenericSetAttr(): 4d2c.

 -- C Membro: *note PyBufferProcs: 4f7f. **note PyTypeObject:
          ab4.tp_as_buffer

     Pointer to an additional structure that contains fields relevant
     only to objects which implement the buffer interface.  These fields
     are documented in *note Buffer Object Structures: 4f43.

     'Inheritance:'

     The *note tp_as_buffer: 990. field is not inherited, but the
     contained fields are inherited individually.

 -- C Membro: unsigned long *note PyTypeObject: ab4.tp_flags

     This field is a bit mask of various flags.  Some flags indicate
     variant semantics for certain situations; others are used to
     indicate that certain fields in the type object (or in the
     extension structures referenced via *note tp_as_number: 992, *note
     tp_as_sequence: 526c, *note tp_as_mapping: 526d, and *note
     tp_as_buffer: 990.) that were historically not always present are
     valid; if such a flag bit is clear, the type fields it guards must
     not be accessed and must be considered to have a zero or ‘NULL’
     value instead.

     'Inheritance:'

     Inheritance of this field is complicated.  Most flag bits are
     inherited individually, i.e.  if the base type has a flag bit set,
     the subtype inherits this flag bit.  The flag bits that pertain to
     extension structures are strictly inherited if the extension
     structure is inherited, i.e.  the base type’s value of the flag bit
     is copied into the subtype together with a pointer to the extension
     structure.  The *note Py_TPFLAGS_HAVE_GC: 77d. flag bit is
     inherited together with the *note tp_traverse: 77e. and *note
     tp_clear: 4b8b. fields, i.e.  if the *note Py_TPFLAGS_HAVE_GC: 77d.
     flag bit is clear in the subtype and the *note tp_traverse: 77e.
     and *note tp_clear: 4b8b. fields in the subtype exist and have
     ‘NULL’ values.  ..  XXX are most flag bits 'really' inherited
     individually?

     'Padrão:'

     *note PyBaseObject_Type: 4c0e. uses ‘Py_TPFLAGS_DEFAULT |
     Py_TPFLAGS_BASETYPE’.

     'Bit Masks:'

     The following bit masks are currently defined; these can be ORed
     together using the ‘|’ operator to form the value of the *note
     tp_flags: 19fd. field.  The macro *note PyType_HasFeature(): 1ac9.
     takes a type and a flags value, 'tp' and 'f', and checks whether
     ‘tp->tp_flags & f’ is non-zero.

      -- C Macro: Py_TPFLAGS_HEAPTYPE

          This bit is set when the type object itself is allocated on
          the heap, for example, types created dynamically using *note
          PyType_FromSpec(): 57d.  In this case, the *note ob_type:
          4b77. field of its instances is considered a reference to the
          type, and the type object is INCREF’ed when a new instance is
          created, and DECREF’ed when an instance is destroyed (this
          does not apply to instances of subtypes; only the type
          referenced by the instance’s ob_type gets INCREF’ed or
          DECREF’ed).  Heap types should also *note support garbage
          collection: 52ae. as they can form a reference cycle with
          their own module object.

          'Inheritance:'

          ???

      -- C Macro: Py_TPFLAGS_BASETYPE
          ' Parte da *note ABI Estável: 553.'  This bit is set when the
          type can be used as the base type of another type.  If this
          bit is clear, the type cannot be subtyped (similar to a
          “final” class in Java).

          'Inheritance:'

          ???

      -- C Macro: Py_TPFLAGS_READY

          This bit is set when the type object has been fully
          initialized by *note PyType_Ready(): 77c.

          'Inheritance:'

          ???

      -- C Macro: Py_TPFLAGS_READYING

          This bit is set while *note PyType_Ready(): 77c. is in the
          process of initializing the type object.

          'Inheritance:'

          ???

      -- C Macro: Py_TPFLAGS_HAVE_GC
          ' Parte da *note ABI Estável: 553.'  This bit is set when the
          object supports garbage collection.  If this bit is set,
          instances must be created using *note PyObject_GC_New: ab1.
          and destroyed using *note PyObject_GC_Del(): 154c.  More
          information in section *note Suporte a Coleta Cíclica de Lixo:
          52ae.  This bit also implies that the GC-related fields *note
          tp_traverse: 77e. and *note tp_clear: 4b8b. are present in the
          type object.

          'Inheritance:'

          Group: *note Py_TPFLAGS_HAVE_GC: 77d, *note tp_traverse: 77e,
          *note tp_clear: 4b8b.

          The *note Py_TPFLAGS_HAVE_GC: 77d. flag bit is inherited
          together with the *note tp_traverse: 77e. and *note tp_clear:
          4b8b. fields, i.e.  if the *note Py_TPFLAGS_HAVE_GC: 77d. flag
          bit is clear in the subtype and the *note tp_traverse: 77e.
          and *note tp_clear: 4b8b. fields in the subtype exist and have
          ‘NULL’ values.

      -- C Macro: Py_TPFLAGS_DEFAULT
          ' Parte da *note ABI Estável: 553.'  This is a bitmask of all
          the bits that pertain to the existence of certain fields in
          the type object and its extension structures.  Currently, it
          includes the following bits:
          ‘Py_TPFLAGS_HAVE_STACKLESS_EXTENSION’.

          'Inheritance:'

          ???

      -- C Macro: Py_TPFLAGS_METHOD_DESCRIPTOR
          ' Parte da *note ABI Estável: 553. desde a versão 3.8.'  This
          bit indicates that objects behave like unbound methods.

          If this flag is set for ‘type(meth)’, then:

             - ‘meth.__get__(obj, cls)(*args, **kwds)’ (with ‘obj’ not
               None) must be equivalent to ‘meth(obj, *args, **kwds)’.

             - ‘meth.__get__(None, cls)(*args, **kwds)’ must be
               equivalent to ‘meth(*args, **kwds)’.

          This flag enables an optimization for typical method calls
          like ‘obj.meth()’: it avoids creating a temporary “bound
          method” object for ‘obj.meth’.

          Adicionado na versão 3.8.

          'Inheritance:'

          This flag is never inherited by types without the *note
          Py_TPFLAGS_IMMUTABLETYPE: 3c2. flag set.  For extension types,
          it is inherited whenever *note tp_descr_get: 526e. is
          inherited.

      -- C Macro: Py_TPFLAGS_MANAGED_DICT

          This bit indicates that instances of the class have a *note
          __dict__: 55b. attribute, and that the space for the
          dictionary is managed by the VM.

          If this flag is set, *note Py_TPFLAGS_HAVE_GC: 77d. should
          also be set.

          The type traverse function must call *note
          PyObject_VisitManagedDict(): 369. and its clear function must
          call *note PyObject_ClearManagedDict(): 36a.

          Adicionado na versão 3.12.

          'Inheritance:'

          This flag is inherited unless the *note tp_dictoffset: 4f79.
          field is set in a superclass.

      -- C Macro: Py_TPFLAGS_MANAGED_WEAKREF

          This bit indicates that instances of the class should be
          weakly referenceable.

          Adicionado na versão 3.12.

          'Inheritance:'

          This flag is inherited unless the *note tp_weaklistoffset:
          98f. field is set in a superclass.

      -- C Macro: Py_TPFLAGS_ITEMS_AT_END
          ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  Only
          usable with variable-size types, i.e.  ones with non-zero
          *note tp_itemsize: 20fd.

          Indicates that the variable-sized portion of an instance of
          this type is at the end of the instance’s memory area, at an
          offset of ‘Py_TYPE(obj)->tp_basicsize’ (which may be different
          in each subclass).

          When setting this flag, be sure that all superclasses either
          use this memory layout, or are not variable-sized.  Python
          does not check this.

          Adicionado na versão 3.12.

          'Inheritance:'

          This flag is inherited.

      -- C Macro: Py_TPFLAGS_LONG_SUBCLASS

      -- C Macro: Py_TPFLAGS_LIST_SUBCLASS

      -- C Macro: Py_TPFLAGS_TUPLE_SUBCLASS

      -- C Macro: Py_TPFLAGS_BYTES_SUBCLASS

      -- C Macro: Py_TPFLAGS_UNICODE_SUBCLASS

      -- C Macro: Py_TPFLAGS_DICT_SUBCLASS

      -- C Macro: Py_TPFLAGS_BASE_EXC_SUBCLASS

      -- C Macro: Py_TPFLAGS_TYPE_SUBCLASS

          Functions such as *note PyLong_Check(): 4f8a. will call *note
          PyType_FastSubclass(): 4f6a. with one of these flags to
          quickly determine if a type is a subclass of a built-in type;
          such specific checks are faster than a generic check, like
          *note PyObject_IsInstance(): ed5.  Custom types that inherit
          from built-ins should have their *note tp_flags: 19fd. set
          appropriately, or the code that interacts with such types will
          behave differently depending on what kind of check is used.

      -- C Macro: Py_TPFLAGS_HAVE_FINALIZE

          This bit is set when the *note tp_finalize: ab5. slot is
          present in the type structure.

          Adicionado na versão 3.4.

          Descontinuado desde a versão 3.8: This flag isn’t necessary
          anymore, as the interpreter assumes the *note tp_finalize:
          ab5. slot is always present in the type structure.

      -- C Macro: Py_TPFLAGS_HAVE_VECTORCALL
          ' Parte da *note ABI Estável: 553. desde a versão 3.12.'  This
          bit is set when the class implements the *note vectorcall
          protocol: 552.  See *note tp_vectorcall_offset: 4f1e. for
          details.

          'Inheritance:'

          This bit is inherited if *note tp_call: 559. is also
          inherited.

          Adicionado na versão 3.8: as ‘_Py_TPFLAGS_HAVE_VECTORCALL’

          Alterado na versão 3.9.

          Renamed to the current name, without the leading underscore.
          The old provisional name is *note soft deprecated: 209.

          Alterado na versão 3.12: This flag is now removed from a class
          when the class’s *note __call__(): 558. method is reassigned.

          This flag can now be inherited by mutable classes.

      -- C Macro: Py_TPFLAGS_IMMUTABLETYPE

          This bit is set for type objects that are immutable: type
          attributes cannot be set nor deleted.

          *note PyType_Ready(): 77c. automatically applies this flag to
          *note static types: 77f.

          'Inheritance:'

          This flag is not inherited.

          Adicionado na versão 3.10.

      -- C Macro: Py_TPFLAGS_DISALLOW_INSTANTIATION

          Disallow creating instances of the type: set *note tp_new:
          57f. to NULL and don’t create the ‘__new__’ key in the type
          dictionary.

          The flag must be set before creating the type, not after.  For
          example, it must be set before *note PyType_Ready(): 77c. is
          called on the type.

          The flag is set automatically on *note static types: 77f. if
          *note tp_base: 20b8. is NULL or ‘&PyBaseObject_Type’ and *note
          tp_new: 57f. is NULL.

          'Inheritance:'

          This flag is not inherited.  However, subclasses will not be
          instantiable unless they provide a non-NULL *note tp_new: 57f.
          (which is only possible via the C API).

               Nota: To disallow instantiating a class directly but
               allow instantiating its subclasses (e.g.  for an *note
               abstract base class: 11f5.), do not use this flag.
               Instead, make *note tp_new: 57f. only succeed for
               subclasses.

          Adicionado na versão 3.10.

      -- C Macro: Py_TPFLAGS_MAPPING

          This bit indicates that instances of the class may match
          mapping patterns when used as the subject of a *note match:
          810. block.  It is automatically set when registering or
          subclassing *note collections.abc.Mapping: 8d0, and unset when
          registering *note collections.abc.Sequence: 1204.

               Nota: *note Py_TPFLAGS_MAPPING: 19e3. and *note
               Py_TPFLAGS_SEQUENCE: 19e4. are mutually exclusive; it is
               an error to enable both flags simultaneously.

          'Inheritance:'

          This flag is inherited by types that do not already set *note
          Py_TPFLAGS_SEQUENCE: 19e4.

          Ver também
          ..........

          PEP 634(1) – Structural Pattern Matching: Specification

          Adicionado na versão 3.10.

      -- C Macro: Py_TPFLAGS_SEQUENCE

          This bit indicates that instances of the class may match
          sequence patterns when used as the subject of a *note match:
          810. block.  It is automatically set when registering or
          subclassing *note collections.abc.Sequence: 1204, and unset
          when registering *note collections.abc.Mapping: 8d0.

               Nota: *note Py_TPFLAGS_MAPPING: 19e3. and *note
               Py_TPFLAGS_SEQUENCE: 19e4. are mutually exclusive; it is
               an error to enable both flags simultaneously.

          'Inheritance:'

          This flag is inherited by types that do not already set *note
          Py_TPFLAGS_MAPPING: 19e3.

          Ver também
          ..........

          PEP 634(2) – Structural Pattern Matching: Specification

          Adicionado na versão 3.10.

      -- C Macro: Py_TPFLAGS_VALID_VERSION_TAG

          Internal.  Do not set or unset this flag.  To indicate that a
          class has changed call *note PyType_Modified(): 1906.

               Aviso: This flag is present in header files, but is not
               be used.  It will be removed in a future version of
               CPython

 -- C Membro: const char **note PyTypeObject: ab4.tp_doc

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_doc’ is part of the
     *note ABI Estável: 553.'

     An optional pointer to a NUL-terminated C string giving the
     docstring for this type object.  This is exposed as the *note
     __doc__: 1e35. attribute on the type and instances of the type.

     'Inheritance:'

     This field is 'not' inherited by subtypes.

 -- C Membro: *note traverseproc: 4e4f. *note PyTypeObject:
          ab4.tp_traverse

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_traverse’ is part
     of the *note ABI Estável: 553.'

     An optional pointer to a traversal function for the garbage
     collector.  This is only used if the *note Py_TPFLAGS_HAVE_GC: 77d.
     flag bit is set.  The signature is:

          int tp_traverse(PyObject *self, visitproc visit, void *arg);

     More information about Python’s garbage collection scheme can be
     found in section *note Suporte a Coleta Cíclica de Lixo: 52ae.

     The *note tp_traverse: 77e. pointer is used by the garbage
     collector to detect reference cycles.  A typical implementation of
     a *note tp_traverse: 77e. function simply calls *note Py_VISIT():
     4b82. on each of the instance’s members that are Python objects
     that the instance owns.  For example, this is function
     ‘local_traverse()’ from the ‘_thread’ extension module:

          static int
          local_traverse(localobject *self, visitproc visit, void *arg)
          {
              Py_VISIT(self->args);
              Py_VISIT(self->kw);
              Py_VISIT(self->dict);
              return 0;
          }

     Note that *note Py_VISIT(): 4b82. is called only on those members
     that can participate in reference cycles.  Although there is also a
     ‘self->key’ member, it can only be ‘NULL’ or a Python string and
     therefore cannot be part of a reference cycle.

     On the other hand, even if you know a member can never be part of a
     cycle, as a debugging aid you may want to visit it anyway just so
     the *note gc: 60. module’s *note get_referents(): 808. function
     will include it.

     Heap types (*note Py_TPFLAGS_HEAPTYPE: 8b4.) must visit their type
     with:

          Py_VISIT(Py_TYPE(self));

     It is only needed since Python 3.9.  To support Python 3.8 and
     older, this line must be conditional:

          #if PY_VERSION_HEX >= 0x03090000
              Py_VISIT(Py_TYPE(self));
          #endif

     If the *note Py_TPFLAGS_MANAGED_DICT: 36b. bit is set in the *note
     tp_flags: 19fd. field, the traverse function must call *note
     PyObject_VisitManagedDict(): 369. like this:

          PyObject_VisitManagedDict((PyObject*)self, visit, arg);

          Aviso: When implementing *note tp_traverse: 77e, only the
          members that the instance 'owns' (by having *note strong
          references: 33d. to them) must be visited.  For instance, if
          an object supports weak references via the *note tp_weaklist:
          4f7e. slot, the pointer supporting the linked list (what
          'tp_weaklist' points to) must 'not' be visited as the instance
          does not directly own the weak references to itself (the
          weakreference list is there to support the weak reference
          machinery, but the instance has no strong reference to the
          elements inside it, as they are allowed to be removed even if
          the instance is still alive).

          Aviso: The traversal function must not have any side effects.
          It must not modify the reference counts of any Python objects
          nor create or destroy any Python objects.

     Note that *note Py_VISIT(): 4b82. requires the 'visit' and 'arg'
     parameters to ‘local_traverse()’ to have these specific names;
     don’t name them just anything.

     Instances of *note heap-allocated types: 96c. hold a reference to
     their type.  Their traversal function must therefore either visit
     *note Py_TYPE(self): 780, or delegate this responsibility by
     calling ‘tp_traverse’ of another heap-allocated type (such as a
     heap-allocated superclass).  If they do not, the type object may
     not be garbage-collected.

     Alterado na versão 3.9: Heap-allocated types are expected to visit
     ‘Py_TYPE(self)’ in ‘tp_traverse’.  In earlier versions of Python,
     due to bug 40217(3), doing this may lead to crashes in subclasses.

     'Inheritance:'

     Group: *note Py_TPFLAGS_HAVE_GC: 77d, *note tp_traverse: 77e, *note
     tp_clear: 4b8b.

     This field is inherited by subtypes together with *note tp_clear:
     4b8b. and the *note Py_TPFLAGS_HAVE_GC: 77d. flag bit: the flag
     bit, *note tp_traverse: 77e, and *note tp_clear: 4b8b. are all
     inherited from the base type if they are all zero in the subtype.

 -- C Membro: *note inquiry: 4e40. *note PyTypeObject: ab4.tp_clear

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_clear’ is part of
     the *note ABI Estável: 553.'

     An optional pointer to a clear function for the garbage collector.
     This is only used if the *note Py_TPFLAGS_HAVE_GC: 77d. flag bit is
     set.  The signature is:

          int tp_clear(PyObject *);

     The *note tp_clear: 4b8b. member function is used to break
     reference cycles in cyclic garbage detected by the garbage
     collector.  Taken together, all *note tp_clear: 4b8b. functions in
     the system must combine to break all reference cycles.  This is
     subtle, and if in any doubt supply a *note tp_clear: 4b8b.
     function.  For example, the tuple type does not implement a *note
     tp_clear: 4b8b. function, because it’s possible to prove that no
     reference cycle can be composed entirely of tuples.  Therefore the
     *note tp_clear: 4b8b. functions of other types must be sufficient
     to break any cycle containing a tuple.  This isn’t immediately
     obvious, and there’s rarely a good reason to avoid implementing
     *note tp_clear: 4b8b.

     Implementations of *note tp_clear: 4b8b. should drop the instance’s
     references to those of its members that may be Python objects, and
     set its pointers to those members to ‘NULL’, as in the following
     example:

          static int
          local_clear(localobject *self)
          {
              Py_CLEAR(self->key);
              Py_CLEAR(self->args);
              Py_CLEAR(self->kw);
              Py_CLEAR(self->dict);
              return 0;
          }

     The *note Py_CLEAR(): 578. macro should be used, because clearing
     references is delicate: the reference to the contained object must
     not be released (via *note Py_DECREF(): 56f.) until after the
     pointer to the contained object is set to ‘NULL’.  This is because
     releasing the reference may cause the contained object to become
     trash, triggering a chain of reclamation activity that may include
     invoking arbitrary Python code (due to finalizers, or weakref
     callbacks, associated with the contained object).  If it’s possible
     for such code to reference 'self' again, it’s important that the
     pointer to the contained object be ‘NULL’ at that time, so that
     'self' knows the contained object can no longer be used.  The *note
     Py_CLEAR(): 578. macro performs the operations in a safe order.

     If the *note Py_TPFLAGS_MANAGED_DICT: 36b. bit is set in the *note
     tp_flags: 19fd. field, the clear function must call *note
     PyObject_ClearManagedDict(): 36a. like this:

          PyObject_ClearManagedDict((PyObject*)self);

     Note that *note tp_clear: 4b8b. is not 'always' called before an
     instance is deallocated.  For example, when reference counting is
     enough to determine that an object is no longer used, the cyclic
     garbage collector is not involved and *note tp_dealloc: 4b66. is
     called directly.

     Because the goal of *note tp_clear: 4b8b. functions is to break
     reference cycles, it’s not necessary to clear contained objects
     like Python strings or Python integers, which can’t participate in
     reference cycles.  On the other hand, it may be convenient to clear
     all contained Python objects, and write the type’s *note
     tp_dealloc: 4b66. function to invoke *note tp_clear: 4b8b.

     More information about Python’s garbage collection scheme can be
     found in section *note Suporte a Coleta Cíclica de Lixo: 52ae.

     'Inheritance:'

     Group: *note Py_TPFLAGS_HAVE_GC: 77d, *note tp_traverse: 77e, *note
     tp_clear: 4b8b.

     This field is inherited by subtypes together with *note
     tp_traverse: 77e. and the *note Py_TPFLAGS_HAVE_GC: 77d. flag bit:
     the flag bit, *note tp_traverse: 77e, and *note tp_clear: 4b8b. are
     all inherited from the base type if they are all zero in the
     subtype.

 -- C Membro: *note richcmpfunc: 4e48. *note PyTypeObject:
          ab4.tp_richcompare

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_richcompare’ is
     part of the *note ABI Estável: 553.'

     An optional pointer to the rich comparison function, whose
     signature is:

          PyObject *tp_richcompare(PyObject *self, PyObject *other, int op);

     The first parameter is guaranteed to be an instance of the type
     that is defined by *note PyTypeObject: ab4.

     The function should return the result of the comparison (usually
     ‘Py_True’ or ‘Py_False’).  If the comparison is undefined, it must
     return ‘Py_NotImplemented’, if another error occurred it must
     return ‘NULL’ and set an exception condition.

     The following constants are defined to be used as the third
     argument for *note tp_richcompare: 4b99. and for *note
     PyObject_RichCompare(): 4b9a.:

     Constante                Comparação
                              
     ------------------------------------------
                              
      -- C Macro: Py_LT       ‘<’
                              
                              
      -- C Macro: Py_LE       ‘<=’
                              
                              
      -- C Macro: Py_EQ       ‘==’
                              
                              
      -- C Macro: Py_NE       ‘!=’
                              
                              
      -- C Macro: Py_GT       ‘>’
                              
                              
      -- C Macro: Py_GE       ‘>=’
                              

     The following macro is defined to ease writing rich comparison
     functions:

      -- C Macro: Py_RETURN_RICHCOMPARE (VAL_A, VAL_B, op)

          Return ‘Py_True’ or ‘Py_False’ from the function, depending on
          the result of a comparison.  VAL_A and VAL_B must be orderable
          by C comparison operators (for example, they may be C ints or
          floats).  The third argument specifies the requested
          operation, as for *note PyObject_RichCompare(): 4b9a.

          The returned value is a new *note strong reference: 33d.

          On error, sets an exception and returns ‘NULL’ from the
          function.

          Adicionado na versão 3.7.

     'Inheritance:'

     Group: *note tp_hash: 4b9f, *note tp_richcompare: 4b99.

     This field is inherited by subtypes together with *note tp_hash:
     4b9f.: a subtype inherits *note tp_richcompare: 4b99. and *note
     tp_hash: 4b9f. when the subtype’s *note tp_richcompare: 4b99. and
     *note tp_hash: 4b9f. are both ‘NULL’.

     'Padrão:'

     *note PyBaseObject_Type: 4c0e. provides a *note tp_richcompare:
     4b99. implementation, which may be inherited.  However, if only
     *note tp_hash: 4b9f. is defined, not even the inherited function is
     used and instances of the type will not be able to participate in
     any comparisons.

 -- C Membro: *note Py_ssize_t: a69. *note PyTypeObject:
          ab4.tp_weaklistoffset

     While this field is still supported, *note
     Py_TPFLAGS_MANAGED_WEAKREF: 55a. should be used instead, if at all
     possible.

     If the instances of this type are weakly referenceable, this field
     is greater than zero and contains the offset in the instance
     structure of the weak reference list head (ignoring the GC header,
     if present); this offset is used by *note PyObject_ClearWeakRefs():
     576. and the ‘PyWeakref_*’ functions.  The instance structure needs
     to include a field of type *note PyObject: 339.* which is
     initialized to ‘NULL’.

     Do not confuse this field with *note tp_weaklist: 4f7e.; that is
     the list head for weak references to the type object itself.

     It is an error to set both the *note Py_TPFLAGS_MANAGED_WEAKREF:
     55a. bit and *note tp_weaklistoffset: 98f.

     'Inheritance:'

     This field is inherited by subtypes, but see the rules listed
     below.  A subtype may override this offset; this means that the
     subtype uses a different weak reference list head than the base
     type.  Since the list head is always found via *note
     tp_weaklistoffset: 98f, this should not be a problem.

     'Padrão:'

     If the *note Py_TPFLAGS_MANAGED_WEAKREF: 55a. bit is set in the
     *note tp_flags: 19fd. field, then *note tp_weaklistoffset: 98f.
     will be set to a negative value, to indicate that it is unsafe to
     use this field.

 -- C Membro: *note getiterfunc: 4e3c. *note PyTypeObject: ab4.tp_iter

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_iter’ is part of
     the *note ABI Estável: 553.'

     An optional pointer to a function that returns an *note iterator:
     1ac. for the object.  Its presence normally signals that the
     instances of this type are *note iterable: 1268. (although
     sequences may be iterable without this function).

     This function has the same signature as *note PyObject_GetIter():
     4d2f.:

          PyObject *tp_iter(PyObject *self);

     'Inheritance:'

     This field is inherited by subtypes.

 -- C Membro: *note iternextfunc: 4e41. *note PyTypeObject:
          ab4.tp_iternext

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_iternext’ is part
     of the *note ABI Estável: 553.'

     An optional pointer to a function that returns the next item in an
     *note iterator: 1ac.  The signature is:

          PyObject *tp_iternext(PyObject *self);

     When the iterator is exhausted, it must return ‘NULL’; a *note
     StopIteration: c15. exception may or may not be set.  When another
     error occurs, it must return ‘NULL’ too.  Its presence signals that
     the instances of this type are iterators.

     Iterator types should also define the *note tp_iter: 1537.
     function, and that function should return the iterator instance
     itself (not a new iterator instance).

     This function has the same signature as *note PyIter_Next(): 4cd6.

     'Inheritance:'

     This field is inherited by subtypes.

 -- C Membro: struct *note PyMethodDef: 151f. **note PyTypeObject:
          ab4.tp_methods

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_methods’ is part of
     the *note ABI Estável: 553.'

     An optional pointer to a static ‘NULL’-terminated array of *note
     PyMethodDef: 151f. structures, declaring regular methods of this
     type.

     For each entry in the array, an entry is added to the type’s
     dictionary (see *note tp_dict: 180e. below) containing a method
     descriptor.

     'Inheritance:'

     This field is not inherited by subtypes (methods are inherited
     through a different mechanism).

 -- C Membro: struct *note PyMemberDef: 54f. **note PyTypeObject:
          ab4.tp_members

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_members’ is part of
     the *note ABI Estável: 553.'

     An optional pointer to a static ‘NULL’-terminated array of *note
     PyMemberDef: 54f. structures, declaring regular data members
     (fields or slots) of instances of this type.

     For each entry in the array, an entry is added to the type’s
     dictionary (see *note tp_dict: 180e. below) containing a member
     descriptor.

     'Inheritance:'

     This field is not inherited by subtypes (members are inherited
     through a different mechanism).

 -- C Membro: struct *note PyGetSetDef: bd1. **note PyTypeObject:
          ab4.tp_getset

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_getset’ is part of
     the *note ABI Estável: 553.'

     An optional pointer to a static ‘NULL’-terminated array of *note
     PyGetSetDef: bd1. structures, declaring computed attributes of
     instances of this type.

     For each entry in the array, an entry is added to the type’s
     dictionary (see *note tp_dict: 180e. below) containing a getset
     descriptor.

     'Inheritance:'

     This field is not inherited by subtypes (computed attributes are
     inherited through a different mechanism).

 -- C Membro: *note PyTypeObject: ab4. **note PyTypeObject: ab4.tp_base

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_base’ is part of
     the *note ABI Estável: 553.'

     An optional pointer to a base type from which type properties are
     inherited.  At this level, only single inheritance is supported;
     multiple inheritance require dynamically creating a type object by
     calling the metatype.

          Nota: 
          Slot initialization is subject to the rules of initializing
          globals.  C99 requires the initializers to be “address
          constants”.  Function designators like *note
          PyType_GenericNew(): 4b76, with implicit conversion to a
          pointer, are valid C99 address constants.

          However, the unary ‘&’ operator applied to a non-static
          variable like *note PyBaseObject_Type: 4c0e. is not required
          to produce an address constant.  Compilers may support this
          (gcc does), MSVC does not.  Both compilers are strictly
          standard conforming in this particular behavior.

          Consequently, *note tp_base: 20b8. should be set in the
          extension module’s init function.

     'Inheritance:'

     This field is not inherited by subtypes (obviously).

     'Padrão:'

     This field defaults to ‘&PyBaseObject_Type’ (which to Python
     programmers is known as the type *note object: a96.).

 -- C Membro: *note PyObject: 339. **note PyTypeObject: ab4.tp_dict

     The type’s dictionary is stored here by *note PyType_Ready(): 77c.

     This field should normally be initialized to ‘NULL’ before
     PyType_Ready is called; it may also be initialized to a dictionary
     containing initial attributes for the type.  Once *note
     PyType_Ready(): 77c. has initialized the type, extra attributes for
     the type may be added to this dictionary only if they don’t
     correspond to overloaded operations (like *note __add__(): 2121.).
     Once initialization for the type has finished, this field should be
     treated as read-only.

     Some types may not store their dictionary in this slot.  Use *note
     PyType_GetDict(): 180d. to retrieve the dictionary for an arbitrary
     type.

     Alterado na versão 3.12: Internals detail: For static builtin
     types, this is always ‘NULL’.  Instead, the dict for such types is
     stored on ‘PyInterpreterState’.  Use *note PyType_GetDict(): 180d.
     to get the dict for an arbitrary type.

     'Inheritance:'

     This field is not inherited by subtypes (though the attributes
     defined in here are inherited through a different mechanism).

     'Padrão:'

     If this field is ‘NULL’, *note PyType_Ready(): 77c. will assign a
     new dictionary to it.

          Aviso: It is not safe to use *note PyDict_SetItem(): 4b63. on
          or otherwise modify *note tp_dict: 180e. with the dictionary
          C-API.

 -- C Membro: *note descrgetfunc: 4e36. *note PyTypeObject:
          ab4.tp_descr_get

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_descr_get’ is part
     of the *note ABI Estável: 553.'

     An optional pointer to a “descriptor get” function.

     A assinatura da função é:

          PyObject * tp_descr_get(PyObject *self, PyObject *obj, PyObject *type);

     'Inheritance:'

     This field is inherited by subtypes.

 -- C Membro: *note descrsetfunc: 4e37. *note PyTypeObject:
          ab4.tp_descr_set

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_descr_set’ is part
     of the *note ABI Estável: 553.'

     An optional pointer to a function for setting and deleting a
     descriptor’s value.

     A assinatura da função é:

          int tp_descr_set(PyObject *self, PyObject *obj, PyObject *value);

     The 'value' argument is set to ‘NULL’ to delete the value.

     'Inheritance:'

     This field is inherited by subtypes.

 -- C Membro: *note Py_ssize_t: a69. *note PyTypeObject:
          ab4.tp_dictoffset

     While this field is still supported, *note Py_TPFLAGS_MANAGED_DICT:
     36b. should be used instead, if at all possible.

     If the instances of this type have a dictionary containing instance
     variables, this field is non-zero and contains the offset in the
     instances of the type of the instance variable dictionary; this
     offset is used by *note PyObject_GenericGetAttr(): 4d2b.

     Do not confuse this field with *note tp_dict: 180e.; that is the
     dictionary for attributes of the type object itself.

     The value specifies the offset of the dictionary from the start of
     the instance structure.

     The *note tp_dictoffset: 4f79. should be regarded as write-only.
     To get the pointer to the dictionary call *note
     PyObject_GenericGetDict(): 1a92.  Calling *note
     PyObject_GenericGetDict(): 1a92. may need to allocate memory for
     the dictionary, so it is may be more efficient to call *note
     PyObject_GetAttr(): 347. when accessing an attribute on the object.

     It is an error to set both the *note Py_TPFLAGS_MANAGED_DICT: 36b.
     bit and *note tp_dictoffset: 4f79.

     'Inheritance:'

     This field is inherited by subtypes.  A subtype should not override
     this offset; doing so could be unsafe, if C code tries to access
     the dictionary at the previous offset.  To properly support
     inheritance, use *note Py_TPFLAGS_MANAGED_DICT: 36b.

     'Padrão:'

     This slot has no default.  For *note static types: 77f, if the
     field is ‘NULL’ then no *note __dict__: 55b. gets created for
     instances.

     If the *note Py_TPFLAGS_MANAGED_DICT: 36b. bit is set in the *note
     tp_flags: 19fd. field, then *note tp_dictoffset: 4f79. will be set
     to ‘-1’, to indicate that it is unsafe to use this field.

 -- C Membro: *note initproc: 4e3f. *note PyTypeObject: ab4.tp_init

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_init’ is part of
     the *note ABI Estável: 553.'

     An optional pointer to an instance initialization function.

     This function corresponds to the *note __init__(): 6b0. method of
     classes.  Like ‘__init__()’, it is possible to create an instance
     without calling ‘__init__()’, and it is possible to reinitialize an
     instance by calling its ‘__init__()’ method again.

     A assinatura da função é:

          int tp_init(PyObject *self, PyObject *args, PyObject *kwds);

     The self argument is the instance to be initialized; the 'args' and
     'kwds' arguments represent positional and keyword arguments of the
     call to *note __init__(): 6b0.

     The *note tp_init: 581. function, if not ‘NULL’, is called when an
     instance is created normally by calling its type, after the type’s
     *note tp_new: 57f. function has returned an instance of the type.
     If the *note tp_new: 57f. function returns an instance of some
     other type that is not a subtype of the original type, no *note
     tp_init: 581. function is called; if *note tp_new: 57f. returns an
     instance of a subtype of the original type, the subtype’s *note
     tp_init: 581. is called.

     Returns ‘0’ on success, ‘-1’ and sets an exception on error.

     'Inheritance:'

     This field is inherited by subtypes.

     'Padrão:'

     For *note static types: 77f. this field does not have a default.

 -- C Membro: *note allocfunc: 4e34. *note PyTypeObject: ab4.tp_alloc

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_alloc’ is part of
     the *note ABI Estável: 553.'

     An optional pointer to an instance allocation function.

     A assinatura da função é:

          PyObject *tp_alloc(PyTypeObject *self, Py_ssize_t nitems);

     'Inheritance:'

     This field is inherited by static subtypes, but not by dynamic
     subtypes (subtypes created by a class statement).

     'Padrão:'

     For dynamic subtypes, this field is always set to *note
     PyType_GenericAlloc(): a75, to force a standard heap allocation
     strategy.

     For static subtypes, *note PyBaseObject_Type: 4c0e. uses *note
     PyType_GenericAlloc(): a75.  That is the recommended value for all
     statically defined types.

 -- C Membro: *note newfunc: 4e43. *note PyTypeObject: ab4.tp_new

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_new’ is part of the
     *note ABI Estável: 553.'

     An optional pointer to an instance creation function.

     A assinatura da função é:

          PyObject *tp_new(PyTypeObject *subtype, PyObject *args, PyObject *kwds);

     The 'subtype' argument is the type of the object being created; the
     'args' and 'kwds' arguments represent positional and keyword
     arguments of the call to the type.  Note that 'subtype' doesn’t
     have to equal the type whose *note tp_new: 57f. function is called;
     it may be a subtype of that type (but not an unrelated type).

     The *note tp_new: 57f. function should call
     ‘subtype->tp_alloc(subtype, nitems)’ to allocate space for the
     object, and then do only as much further initialization as is
     absolutely necessary.  Initialization that can safely be ignored or
     repeated should be placed in the *note tp_init: 581. handler.  A
     good rule of thumb is that for immutable types, all initialization
     should take place in *note tp_new: 57f, while for mutable types,
     most initialization should be deferred to *note tp_init: 581.

     Set the *note Py_TPFLAGS_DISALLOW_INSTANTIATION: 582. flag to
     disallow creating instances of the type in Python.

     'Inheritance:'

     This field is inherited by subtypes, except it is not inherited by
     *note static types: 77f. whose *note tp_base: 20b8. is ‘NULL’ or
     ‘&PyBaseObject_Type’.

     'Padrão:'

     For *note static types: 77f. this field has no default.  This means
     if the slot is defined as ‘NULL’, the type cannot be called to
     create new instances; presumably there is some other way to create
     instances, like a factory function.

 -- C Membro: *note freefunc: 50bf. *note PyTypeObject: ab4.tp_free

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_free’ is part of
     the *note ABI Estável: 553.'

     An optional pointer to an instance deallocation function.  Its
     signature is:

          void tp_free(void *self);

     An initializer that is compatible with this signature is *note
     PyObject_Free(): c80.

     'Inheritance:'

     This field is inherited by static subtypes, but not by dynamic
     subtypes (subtypes created by a class statement)

     'Padrão:'

     In dynamic subtypes, this field is set to a deallocator suitable to
     match *note PyType_GenericAlloc(): a75. and the value of the *note
     Py_TPFLAGS_HAVE_GC: 77d. flag bit.

     For static subtypes, *note PyBaseObject_Type: 4c0e. uses *note
     PyObject_Del(): 1519.

 -- C Membro: *note inquiry: 4e40. *note PyTypeObject: ab4.tp_is_gc

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_is_gc’ is part of
     the *note ABI Estável: 553.'

     An optional pointer to a function called by the garbage collector.

     The garbage collector needs to know whether a particular object is
     collectible or not.  Normally, it is sufficient to look at the
     object’s type’s *note tp_flags: 19fd. field, and check the *note
     Py_TPFLAGS_HAVE_GC: 77d. flag bit.  But some types have a mixture
     of statically and dynamically allocated instances, and the
     statically allocated instances are not collectible.  Such types
     should define this function; it should return ‘1’ for a collectible
     instance, and ‘0’ for a non-collectible instance.  The signature
     is:

          int tp_is_gc(PyObject *self);

     (The only example of this are types themselves.  The metatype,
     *note PyType_Type: 54d, defines this function to distinguish
     between statically and *note dynamically allocated types: 96c.)

     'Inheritance:'

     This field is inherited by subtypes.

     'Padrão:'

     This slot has no default.  If this field is ‘NULL’, *note
     Py_TPFLAGS_HAVE_GC: 77d. is used as the functional equivalent.

 -- C Membro: *note PyObject: 339. **note PyTypeObject: ab4.tp_bases

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_bases’ is part of
     the *note ABI Estável: 553.'

     Tuple of base types.

     This field should be set to ‘NULL’ and treated as read-only.
     Python will fill it in when the type is *note initialized: 77c.

     For dynamically created classes, the ‘Py_tp_bases’ *note slot:
     4d7b. can be used instead of the 'bases' argument of *note
     PyType_FromSpecWithBases(): 57e.  The argument form is preferred.

          Aviso: Multiple inheritance does not work well for statically
          defined types.  If you set ‘tp_bases’ to a tuple, Python will
          not raise an error, but some slots will only be inherited from
          the first base.

     'Inheritance:'

     This field is not inherited.

 -- C Membro: *note PyObject: 339. **note PyTypeObject: ab4.tp_mro

     Tuple containing the expanded set of base types, starting with the
     type itself and ending with *note object: a96, in Method Resolution
     Order.

     This field should be set to ‘NULL’ and treated as read-only.
     Python will fill it in when the type is *note initialized: 77c.

     'Inheritance:'

     This field is not inherited; it is calculated fresh by *note
     PyType_Ready(): 77c.

 -- C Membro: *note PyObject: 339. **note PyTypeObject: ab4.tp_cache

     Unused.  Internal use only.

     'Inheritance:'

     This field is not inherited.

 -- C Membro: void **note PyTypeObject: ab4.tp_subclasses

     A collection of subclasses.  Internal use only.  May be an invalid
     pointer.

     To get a list of subclasses, call the Python method *note
     __subclasses__(): 573.

     Alterado na versão 3.12: For some types, this field does not hold a
     valid *note PyObject: 339.*.  The type was changed to void* to
     indicate this.

     'Inheritance:'

     This field is not inherited.

 -- C Membro: *note PyObject: 339. **note PyTypeObject: ab4.tp_weaklist

     Weak reference list head, for weak references to this type object.
     Not inherited.  Internal use only.

     Alterado na versão 3.12: Internals detail: For the static builtin
     types this is always ‘NULL’, even if weakrefs are added.  Instead,
     the weakrefs for each are stored on ‘PyInterpreterState’.  Use the
     public C-API or the internal ‘_PyObject_GET_WEAKREFS_LISTPTR()’
     macro to avoid the distinction.

     'Inheritance:'

     This field is not inherited.

 -- C Membro: *note destructor: 4e38. *note PyTypeObject: ab4.tp_del

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_del’ is part of the
     *note ABI Estável: 553.'

     This field is deprecated.  Use *note tp_finalize: ab5. instead.

 -- C Membro: unsigned int *note PyTypeObject: ab4.tp_version_tag

     Used to index into the method cache.  Internal use only.

     'Inheritance:'

     This field is not inherited.

 -- C Membro: *note destructor: 4e38. *note PyTypeObject:
          ab4.tp_finalize

     ' The corresponding *note slot ID: 4d7b. ‘Py_tp_finalize’ is part
     of the *note ABI Estável: 553. desde a versão 3.5.'

     An optional pointer to an instance finalization function.  This is
     the C implementation of the *note __del__(): 1033. special method.
     Its signature is:

          void tp_finalize(PyObject *self);

     If *note tp_finalize: ab5. is set, the interpreter calls it once
     when finalizing an instance.  It is called either from the garbage
     collector (if the instance is part of an isolated reference cycle)
     or just before the object is deallocated.  Either way, it is
     guaranteed to be called before attempting to break reference
     cycles, ensuring that it finds the object in a sane state.

     *note tp_finalize: ab5. should not mutate the current exception
     status; therefore, a recommended way to write a non-trivial
     finalizer is:

          static void
          local_finalize(PyObject *self)
          {
              /* Save the current exception, if any. */
              PyObject *exc = PyErr_GetRaisedException();

              /* ... */

              /* Restore the saved exception. */
              PyErr_SetRaisedException(exc);
          }

     'Inheritance:'

     This field is inherited by subtypes.

     Adicionado na versão 3.4.

     Alterado na versão 3.8: Before version 3.8 it was necessary to set
     the *note Py_TPFLAGS_HAVE_FINALIZE: 3f2. flags bit in order for
     this field to be used.  This is no longer required.

     Ver também
     ..........

     “Finalização segura de objetos” ( PEP 442(4))

 -- C Membro: *note vectorcallfunc: 557. *note PyTypeObject:
          ab4.tp_vectorcall

     Vectorcall function to use for calls of this type object.  In other
     words, it is used to implement *note vectorcall: 552. for
     ‘type.__call__’.  If ‘tp_vectorcall’ is ‘NULL’, the default call
     implementation using *note __new__(): 580. and *note __init__():
     6b0. is used.

     'Inheritance:'

     This field is never inherited.

     Adicionado na versão 3.9: (the field exists since 3.8 but it’s only
     used since 3.9)

 -- C Membro: unsigned char *note PyTypeObject: ab4.tp_watched

     Internal.  Do not use.

     Adicionado na versão 3.12.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0634/

   (2) https://peps.python.org/pep-0634/

   (3) https://bugs.python.org/issue40217

   (4) https://peps.python.org/pep-0442/


File: python.info,  Node: Static Types,  Next: Tipos no heap,  Prev: PyTypeObject Slots,  Up: Estruturas de objetos tipo

7.12.3.9 Static Types
.....................

Traditionally, types defined in C code are 'static', that is, a static
*note PyTypeObject: ab4. structure is defined directly in code and
initialized using *note PyType_Ready(): 77c.

This results in types that are limited relative to types defined in
Python:

   * Static types are limited to one base, i.e.  they cannot use
     multiple inheritance.

   * Static type objects (but not necessarily their instances) are
     immutable.  It is not possible to add or modify the type object’s
     attributes from Python.

   * Static type objects are shared across *note sub-interpreters: 587,
     so they should not include any subinterpreter-specific state.

Also, since *note PyTypeObject: ab4. is only part of the *note Limited
API: 396. as an opaque struct, any extension modules using static types
must be compiled for a specific Python minor version.


File: python.info,  Node: Tipos no heap,  Next: Number Object Structures,  Prev: Static Types,  Up: Estruturas de objetos tipo

7.12.3.10 Tipos no heap
.......................

An alternative to *note static types: 77f. is 'heap-allocated types', or
'heap types' for short, which correspond closely to classes created by
Python’s ‘class’ statement.  Heap types have the *note
Py_TPFLAGS_HEAPTYPE: 8b4. flag set.

This is done by filling a *note PyType_Spec: 180b. structure and calling
*note PyType_FromSpec(): 57d, *note PyType_FromSpecWithBases(): 57e,
*note PyType_FromModuleAndSpec(): 551, or *note PyType_FromMetaclass():
550.


File: python.info,  Node: Number Object Structures,  Next: Mapping Object Structures,  Prev: Tipos no heap,  Up: Estruturas de objetos tipo

7.12.3.11 Number Object Structures
..................................

 -- C Tipo: type PyNumberMethods

     This structure holds pointers to the functions which an object uses
     to implement the number protocol.  Each function is used by the
     function of similar name documented in the *note Protocolo de
     número: 4f29. section.

     Here is the structure definition:

          typedef struct {
               binaryfunc nb_add;
               binaryfunc nb_subtract;
               binaryfunc nb_multiply;
               binaryfunc nb_remainder;
               binaryfunc nb_divmod;
               ternaryfunc nb_power;
               unaryfunc nb_negative;
               unaryfunc nb_positive;
               unaryfunc nb_absolute;
               inquiry nb_bool;
               unaryfunc nb_invert;
               binaryfunc nb_lshift;
               binaryfunc nb_rshift;
               binaryfunc nb_and;
               binaryfunc nb_xor;
               binaryfunc nb_or;
               unaryfunc nb_int;
               void *nb_reserved;
               unaryfunc nb_float;

               binaryfunc nb_inplace_add;
               binaryfunc nb_inplace_subtract;
               binaryfunc nb_inplace_multiply;
               binaryfunc nb_inplace_remainder;
               ternaryfunc nb_inplace_power;
               binaryfunc nb_inplace_lshift;
               binaryfunc nb_inplace_rshift;
               binaryfunc nb_inplace_and;
               binaryfunc nb_inplace_xor;
               binaryfunc nb_inplace_or;

               binaryfunc nb_floor_divide;
               binaryfunc nb_true_divide;
               binaryfunc nb_inplace_floor_divide;
               binaryfunc nb_inplace_true_divide;

               unaryfunc nb_index;

               binaryfunc nb_matrix_multiply;
               binaryfunc nb_inplace_matrix_multiply;
          } PyNumberMethods;

          Nota: Binary and ternary functions must check the type of all
          their operands, and implement the necessary conversions (at
          least one of the operands is an instance of the defined type).
          If the operation is not defined for the given operands, binary
          and ternary functions must return ‘Py_NotImplemented’, if
          another error occurred they must return ‘NULL’ and set an
          exception.

          Nota: The *note nb_reserved: 5294. field should always be
          ‘NULL’.  It was previously called ‘nb_long’, and was renamed
          in Python 3.0.1.

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods: 1465.nb_add

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_add’ is part of the
     *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_subtract

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_subtract’ is part
     of the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_multiply

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_multiply’ is part
     of the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_remainder

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_remainder’ is part
     of the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_divmod

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_divmod’ is part of
     the *note ABI Estável: 553.'

 -- C Membro: *note ternaryfunc: 4e4e. *note PyNumberMethods:
          1465.nb_power

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_power’ is part of
     the *note ABI Estável: 553.'

 -- C Membro: *note unaryfunc: 4e50. *note PyNumberMethods:
          1465.nb_negative

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_negative’ is part
     of the *note ABI Estável: 553.'

 -- C Membro: *note unaryfunc: 4e50. *note PyNumberMethods:
          1465.nb_positive

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_positive’ is part
     of the *note ABI Estável: 553.'

 -- C Membro: *note unaryfunc: 4e50. *note PyNumberMethods:
          1465.nb_absolute

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_absolute’ is part
     of the *note ABI Estável: 553.'

 -- C Membro: *note inquiry: 4e40. *note PyNumberMethods: 1465.nb_bool

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_bool’ is part of
     the *note ABI Estável: 553.'

 -- C Membro: *note unaryfunc: 4e50. *note PyNumberMethods:
          1465.nb_invert

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_invert’ is part of
     the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_lshift

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_lshift’ is part of
     the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_rshift

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_rshift’ is part of
     the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods: 1465.nb_and

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_and’ is part of the
     *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods: 1465.nb_xor

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_xor’ is part of the
     *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods: 1465.nb_or

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_or’ is part of the
     *note ABI Estável: 553.'

 -- C Membro: *note unaryfunc: 4e50. *note PyNumberMethods: 1465.nb_int

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_int’ is part of the
     *note ABI Estável: 553.'

 -- C Membro: void **note PyNumberMethods: 1465.nb_reserved

 -- C Membro: *note unaryfunc: 4e50. *note PyNumberMethods:
          1465.nb_float

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_float’ is part of
     the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_inplace_add

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_inplace_add’ is
     part of the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_inplace_subtract

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_inplace_subtract’
     is part of the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_inplace_multiply

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_inplace_multiply’
     is part of the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_inplace_remainder

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_inplace_remainder’
     is part of the *note ABI Estável: 553.'

 -- C Membro: *note ternaryfunc: 4e4e. *note PyNumberMethods:
          1465.nb_inplace_power

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_inplace_power’ is
     part of the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_inplace_lshift

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_inplace_lshift’ is
     part of the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_inplace_rshift

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_inplace_rshift’ is
     part of the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_inplace_and

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_inplace_and’ is
     part of the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_inplace_xor

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_inplace_xor’ is
     part of the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_inplace_or

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_inplace_or’ is part
     of the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_floor_divide

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_floor_divide’ is
     part of the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_true_divide

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_true_divide’ is
     part of the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_inplace_floor_divide

     ' The corresponding *note slot ID: 4d7b.
     ‘Py_nb_inplace_floor_divide’ is part of the *note ABI Estável:
     553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_inplace_true_divide

     ' The corresponding *note slot ID: 4d7b.
     ‘Py_nb_inplace_true_divide’ is part of the *note ABI Estável: 553.'

 -- C Membro: *note unaryfunc: 4e50. *note PyNumberMethods:
          1465.nb_index

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_index’ is part of
     the *note ABI Estável: 553.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_matrix_multiply

     ' The corresponding *note slot ID: 4d7b. ‘Py_nb_matrix_multiply’ is
     part of the *note ABI Estável: 553. desde a versão 3.5.'

 -- C Membro: *note binaryfunc: 4e35. *note PyNumberMethods:
          1465.nb_inplace_matrix_multiply

     ' The corresponding *note slot ID: 4d7b.
     ‘Py_nb_inplace_matrix_multiply’ is part of the *note ABI Estável:
     553. desde a versão 3.5.'


File: python.info,  Node: Mapping Object Structures,  Next: Sequence Object Structures,  Prev: Number Object Structures,  Up: Estruturas de objetos tipo

7.12.3.12 Mapping Object Structures
...................................

 -- C Tipo: type PyMappingMethods

     This structure holds pointers to the functions which an object uses
     to implement the mapping protocol.  It has three members:

 -- C Membro: *note lenfunc: 4e42. *note PyMappingMethods:
          4b9e.mp_length

     ' The corresponding *note slot ID: 4d7b. ‘Py_mp_length’ is part of
     the *note ABI Estável: 553.'

     This function is used by *note PyMapping_Size(): 1bd0. and *note
     PyObject_Size(): 4d35, and has the same signature.  This slot may
     be set to ‘NULL’ if the object has no defined length.

 -- C Membro: *note binaryfunc: 4e35. *note PyMappingMethods:
          4b9e.mp_subscript

     ' The corresponding *note slot ID: 4d7b. ‘Py_mp_subscript’ is part
     of the *note ABI Estável: 553.'

     This function is used by *note PyObject_GetItem(): 4be2. and *note
     PySequence_GetSlice(): 4d43, and has the same signature as
     ‘PyObject_GetItem()’.  This slot must be filled for the *note
     PyMapping_Check(): 4ced. function to return ‘1’, it can be ‘NULL’
     otherwise.

 -- C Membro: *note objobjargproc: 4e44. *note PyMappingMethods:
          4b9e.mp_ass_subscript

     ' The corresponding *note slot ID: 4d7b. ‘Py_mp_ass_subscript’ is
     part of the *note ABI Estável: 553.'

     This function is used by *note PyObject_SetItem(): 4be0, *note
     PyObject_DelItem(): 4d27, *note PySequence_SetSlice(): 4d4a. and
     *note PySequence_DelSlice(): 4d41.  It has the same signature as
     ‘PyObject_SetItem()’, but 'v' can also be set to ‘NULL’ to delete
     an item.  If this slot is ‘NULL’, the object does not support item
     assignment and deletion.


File: python.info,  Node: Sequence Object Structures,  Next: Buffer Object Structures,  Prev: Mapping Object Structures,  Up: Estruturas de objetos tipo

7.12.3.13 Sequence Object Structures
....................................

 -- C Tipo: type PySequenceMethods

     This structure holds pointers to the functions which an object uses
     to implement the sequence protocol.

 -- C Membro: *note lenfunc: 4e42. *note PySequenceMethods:
          4b9d.sq_length

     ' The corresponding *note slot ID: 4d7b. ‘Py_sq_length’ is part of
     the *note ABI Estável: 553.'

     This function is used by *note PySequence_Size(): 1bcc. and *note
     PyObject_Size(): 4d35, and has the same signature.  It is also used
     for handling negative indices via the *note sq_item: 1a82. and the
     *note sq_ass_item: 52a0. slots.

 -- C Membro: *note binaryfunc: 4e35. *note PySequenceMethods:
          4b9d.sq_concat

     ' The corresponding *note slot ID: 4d7b. ‘Py_sq_concat’ is part of
     the *note ABI Estável: 553.'

     This function is used by *note PySequence_Concat(): 4d3e. and has
     the same signature.  It is also used by the ‘+’ operator, after
     trying the numeric addition via the *note nb_add: 4f6e. slot.

 -- C Membro: *note ssizeargfunc: 4e4c. *note PySequenceMethods:
          4b9d.sq_repeat

     ' The corresponding *note slot ID: 4d7b. ‘Py_sq_repeat’ is part of
     the *note ABI Estável: 553.'

     This function is used by *note PySequence_Repeat(): 4d49. and has
     the same signature.  It is also used by the ‘*’ operator, after
     trying numeric multiplication via the *note nb_multiply: 527d.
     slot.

 -- C Membro: *note ssizeargfunc: 4e4c. *note PySequenceMethods:
          4b9d.sq_item

     ' The corresponding *note slot ID: 4d7b. ‘Py_sq_item’ is part of
     the *note ABI Estável: 553.'

     This function is used by *note PySequence_GetItem(): 1bcd. and has
     the same signature.  It is also used by *note PyObject_GetItem():
     4be2, after trying the subscription via the *note mp_subscript:
     1a83. slot.  This slot must be filled for the *note
     PySequence_Check(): 4d3d. function to return ‘1’, it can be ‘NULL’
     otherwise.

     Negative indexes are handled as follows: if the *note sq_length:
     4f78. slot is filled, it is called and the sequence length is used
     to compute a positive index which is passed to *note sq_item: 1a82.
     If ‘sq_length’ is ‘NULL’, the index is passed as is to the
     function.

 -- C Membro: *note ssizeobjargproc: 4e4d. *note PySequenceMethods:
          4b9d.sq_ass_item

     ' The corresponding *note slot ID: 4d7b. ‘Py_sq_ass_item’ is part
     of the *note ABI Estável: 553.'

     This function is used by *note PySequence_SetItem(): 1bce. and has
     the same signature.  It is also used by *note PyObject_SetItem():
     4be0. and *note PyObject_DelItem(): 4d27, after trying the item
     assignment and deletion via the *note mp_ass_subscript: 529d. slot.
     This slot may be left to ‘NULL’ if the object does not support item
     assignment and deletion.

 -- C Membro: *note objobjproc: 4e45. *note PySequenceMethods:
          4b9d.sq_contains

     ' The corresponding *note slot ID: 4d7b. ‘Py_sq_contains’ is part
     of the *note ABI Estável: 553.'

     This function may be used by *note PySequence_Contains(): 4d3f. and
     has the same signature.  This slot may be left to ‘NULL’, in this
     case ‘PySequence_Contains()’ simply traverses the sequence until it
     finds a match.

 -- C Membro: *note binaryfunc: 4e35. *note PySequenceMethods:
          4b9d.sq_inplace_concat

     ' The corresponding *note slot ID: 4d7b. ‘Py_sq_inplace_concat’ is
     part of the *note ABI Estável: 553.'

     This function is used by *note PySequence_InPlaceConcat(): 4d44.
     and has the same signature.  It should modify its first operand,
     and return it.  This slot may be left to ‘NULL’, in this case
     ‘PySequence_InPlaceConcat()’ will fall back to *note
     PySequence_Concat(): 4d3e.  It is also used by the augmented
     assignment ‘+=’, after trying numeric in-place addition via the
     *note nb_inplace_add: 527a. slot.

 -- C Membro: *note ssizeargfunc: 4e4c. *note PySequenceMethods:
          4b9d.sq_inplace_repeat

     ' The corresponding *note slot ID: 4d7b. ‘Py_sq_inplace_repeat’ is
     part of the *note ABI Estável: 553.'

     This function is used by *note PySequence_InPlaceRepeat(): 4d45.
     and has the same signature.  It should modify its first operand,
     and return it.  This slot may be left to ‘NULL’, in this case
     ‘PySequence_InPlaceRepeat()’ will fall back to *note
     PySequence_Repeat(): 4d49.  It is also used by the augmented
     assignment ‘*=’, after trying numeric in-place multiplication via
     the *note nb_inplace_multiply: 527e. slot.


File: python.info,  Node: Buffer Object Structures,  Next: Async Object Structures,  Prev: Sequence Object Structures,  Up: Estruturas de objetos tipo

7.12.3.14 Buffer Object Structures
..................................

 -- C Tipo: type PyBufferProcs

     This structure holds pointers to the functions required by the
     *note Buffer protocol: 2e8.  The protocol defines how an exporter
     object can expose its internal data to consumer objects.

 -- C Membro: *note getbufferproc: 4e3b. *note PyBufferProcs:
          4f7f.bf_getbuffer

     ' The corresponding *note slot ID: 4d7b. ‘Py_bf_getbuffer’ is part
     of the *note ABI Estável: 553. desde a versão 3.11.'

     The signature of this function is:

          int (PyObject *exporter, Py_buffer *view, int flags);

     Handle a request to 'exporter' to fill in 'view' as specified by
     'flags'.  Except for point (3), an implementation of this function
     MUST take these steps:

       1. Check if the request can be met.  If not, raise *note
          BufferError: 15bd, set view->obj to ‘NULL’ and return ‘-1’.

       2. Fill in the requested fields.

       3. Increment an internal counter for the number of exports.

       4. Set view->obj to 'exporter' and increment view->obj.

       5. Retorna ‘0’.

     If 'exporter' is part of a chain or tree of buffer providers, two
     main schemes can be used:

        * Re-export: Each member of the tree acts as the exporting
          object and sets view->obj to a new reference to itself.

        * Redirect: The buffer request is redirected to the root object
          of the tree.  Here, view->obj will be a new reference to the
          root object.

     The individual fields of 'view' are described in section *note
     Buffer structure: 4f44, the rules how an exporter must react to
     specific requests are in section *note Buffer request types: 4705.

     All memory pointed to in the *note Py_buffer: 758. structure
     belongs to the exporter and must remain valid until there are no
     consumers left.  *note format: 4f4d, *note shape: 4f4e, *note
     strides: 4f48, *note suboffsets: 4f50. and *note internal: 4f52.
     are read-only for the consumer.

     *note PyBuffer_FillInfo(): 760. provides an easy way of exposing a
     simple bytes buffer while dealing correctly with all request types.

     *note PyObject_GetBuffer(): 399. is the interface for the consumer
     that wraps this function.

 -- C Membro: *note releasebufferproc: 4e46. *note PyBufferProcs:
          4f7f.bf_releasebuffer

     ' The corresponding *note slot ID: 4d7b. ‘Py_bf_releasebuffer’ is
     part of the *note ABI Estável: 553. desde a versão 3.11.'

     The signature of this function is:

          void (PyObject *exporter, Py_buffer *view);

     Handle a request to release the resources of the buffer.  If no
     resources need to be released, *note
     PyBufferProcs.bf_releasebuffer: 763. may be ‘NULL’.  Otherwise, a
     standard implementation of this function will take these optional
     steps:

       1. Decrement an internal counter for the number of exports.

       2. If the counter is ‘0’, free all memory associated with 'view'.

     The exporter MUST use the *note internal: 4f52. field to keep track
     of buffer-specific resources.  This field is guaranteed to remain
     constant, while a consumer MAY pass a copy of the original buffer
     as the 'view' argument.

     This function MUST NOT decrement view->obj, since that is done
     automatically in *note PyBuffer_Release(): 39a. (this scheme is
     useful for breaking reference cycles).

     *note PyBuffer_Release(): 39a. is the interface for the consumer
     that wraps this function.


File: python.info,  Node: Async Object Structures,  Next: Slot Type typedefs,  Prev: Buffer Object Structures,  Up: Estruturas de objetos tipo

7.12.3.15 Async Object Structures
.................................

Adicionado na versão 3.5.

 -- C Tipo: type PyAsyncMethods

     This structure holds pointers to the functions required to
     implement *note awaitable: 1ad. and *note asynchronous iterator:
     1ab. objects.

     Here is the structure definition:

          typedef struct {
              unaryfunc am_await;
              unaryfunc am_aiter;
              unaryfunc am_anext;
              sendfunc am_send;
          } PyAsyncMethods;

 -- C Membro: *note unaryfunc: 4e50. *note PyAsyncMethods: 4f77.am_await

     ' The corresponding *note slot ID: 4d7b. ‘Py_am_await’ is part of
     the *note ABI Estável: 553. desde a versão 3.5.'

     The signature of this function is:

          PyObject *am_await(PyObject *self);

     The returned object must be an *note iterator: 1ac, i.e.  *note
     PyIter_Check(): 1a3e. must return ‘1’ for it.

     This slot may be set to ‘NULL’ if an object is not an *note
     awaitable: 1ad.

 -- C Membro: *note unaryfunc: 4e50. *note PyAsyncMethods: 4f77.am_aiter

     ' The corresponding *note slot ID: 4d7b. ‘Py_am_aiter’ is part of
     the *note ABI Estável: 553. desde a versão 3.5.'

     The signature of this function is:

          PyObject *am_aiter(PyObject *self);

     Must return an *note asynchronous iterator: 1ab. object.  See *note
     __anext__(): 1659. for details.

     This slot may be set to ‘NULL’ if an object does not implement
     asynchronous iteration protocol.

 -- C Membro: *note unaryfunc: 4e50. *note PyAsyncMethods: 4f77.am_anext

     ' The corresponding *note slot ID: 4d7b. ‘Py_am_anext’ is part of
     the *note ABI Estável: 553. desde a versão 3.5.'

     The signature of this function is:

          PyObject *am_anext(PyObject *self);

     Must return an *note awaitable: 1ad. object.  See *note
     __anext__(): 1659. for details.  This slot may be set to ‘NULL’.

 -- C Membro: *note sendfunc: 5279. *note PyAsyncMethods: 4f77.am_send

     ' The corresponding *note slot ID: 4d7b. ‘Py_am_send’ is part of
     the *note ABI Estável: 553. desde a versão 3.10.'

     The signature of this function is:

          PySendResult am_send(PyObject *self, PyObject *arg, PyObject **result);

     See *note PyIter_Send(): 89c. for details.  This slot may be set to
     ‘NULL’.

     Adicionado na versão 3.10.


File: python.info,  Node: Slot Type typedefs,  Next: Exemplos<38>,  Prev: Async Object Structures,  Up: Estruturas de objetos tipo

7.12.3.16 Slot Type typedefs
............................

 -- C Tipo: typedef *note PyObject: 339. *(*allocfunc)(*note
          PyTypeObject: ab4. *cls, *note Py_ssize_t: a69. nitems)
     ' Parte da *note ABI Estável: 553.'  The purpose of this function
     is to separate memory allocation from memory initialization.  It
     should return a pointer to a block of memory of adequate length for
     the instance, suitably aligned, and initialized to zeros, but with
     *note ob_refcnt: 8a3. set to ‘1’ and *note ob_type: 4b77. set to
     the type argument.  If the type’s *note tp_itemsize: 20fd. is
     non-zero, the object’s *note ob_size: 4dba. field should be
     initialized to 'nitems' and the length of the allocated memory
     block should be ‘tp_basicsize + nitems*tp_itemsize’, rounded up to
     a multiple of ‘sizeof(void*)’; otherwise, 'nitems' is not used and
     the length of the block should be *note tp_basicsize: 98e.

     This function should not do any other instance initialization, not
     even to allocate additional memory; that should be done by *note
     tp_new: 57f.

 -- C Tipo: typedef void (*destructor)(*note PyObject: 339.*)
     ' Parte da *note ABI Estável: 553.'

 -- C Tipo: typedef void (*freefunc)(void*)

     See *note tp_free: 4b79.

 -- C Tipo: typedef *note PyObject: 339. *(*newfunc)(*note PyTypeObject:
          ab4.*, *note PyObject: 339.*, *note PyObject: 339.*)
     ' Parte da *note ABI Estável: 553.'  See *note tp_new: 57f.

 -- C Tipo: typedef int (*initproc)(*note PyObject: 339.*, *note
          PyObject: 339.*, *note PyObject: 339.*)
     ' Parte da *note ABI Estável: 553.'  See *note tp_init: 581.

 -- C Tipo: typedef *note PyObject: 339. *(*reprfunc)(*note PyObject:
          339.*)
     ' Parte da *note ABI Estável: 553.'  See *note tp_repr: 4b8d.

 -- C Tipo: typedef *note PyObject: 339. *(*getattrfunc)(*note PyObject:
          339. *self, char *attr)
     ' Parte da *note ABI Estável: 553.'  Return the value of the named
     attribute for the object.

 -- C Tipo: typedef int (*setattrfunc)(*note PyObject: 339. *self, char
          *attr, *note PyObject: 339. *value)
     ' Parte da *note ABI Estável: 553.'  Set the value of the named
     attribute for the object.  The value argument is set to ‘NULL’ to
     delete the attribute.

 -- C Tipo: typedef *note PyObject: 339. *(*getattrofunc)(*note
          PyObject: 339. *self, *note PyObject: 339. *attr)
     ' Parte da *note ABI Estável: 553.'  Return the value of the named
     attribute for the object.

     See *note tp_getattro: 17e6.

 -- C Tipo: typedef int (*setattrofunc)(*note PyObject: 339. *self,
          *note PyObject: 339. *attr, *note PyObject: 339. *value)
     ' Parte da *note ABI Estável: 553.'  Set the value of the named
     attribute for the object.  The value argument is set to ‘NULL’ to
     delete the attribute.

     See *note tp_setattro: 4b91.

 -- C Tipo: typedef *note PyObject: 339. *(*descrgetfunc)(*note
          PyObject: 339.*, *note PyObject: 339.*, *note PyObject: 339.*)
     ' Parte da *note ABI Estável: 553.'  See *note tp_descr_get: 526e.

 -- C Tipo: typedef int (*descrsetfunc)(*note PyObject: 339.*, *note
          PyObject: 339.*, *note PyObject: 339.*)
     ' Parte da *note ABI Estável: 553.'  See *note tp_descr_set: 1a40.

 -- C Tipo: typedef *note Py_hash_t: 12a5. (*hashfunc)(*note PyObject:
          339.*)
     ' Parte da *note ABI Estável: 553.'  See *note tp_hash: 4b9f.

 -- C Tipo: typedef *note PyObject: 339. *(*richcmpfunc)(*note PyObject:
          339.*, *note PyObject: 339.*, int)
     ' Parte da *note ABI Estável: 553.'  See *note tp_richcompare:
     4b99.

 -- C Tipo: typedef *note PyObject: 339. *(*getiterfunc)(*note PyObject:
          339.*)
     ' Parte da *note ABI Estável: 553.'  See *note tp_iter: 1537.

 -- C Tipo: typedef *note PyObject: 339. *(*iternextfunc)(*note
          PyObject: 339.*)
     ' Parte da *note ABI Estável: 553.'  See *note tp_iternext: 1538.

 -- C Tipo: typedef *note Py_ssize_t: a69. (*lenfunc)(*note PyObject:
          339.*)
     ' Parte da *note ABI Estável: 553.'

 -- C Tipo: typedef int (*getbufferproc)(*note PyObject: 339.*, *note
          Py_buffer: 758.*, int)
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'

 -- C Tipo: typedef void (*releasebufferproc)(*note PyObject: 339.*,
          *note Py_buffer: 758.*)
     ' Parte da *note ABI Estável: 553. desde a versão 3.12.'

 -- C Tipo: typedef *note PyObject: 339. *(*unaryfunc)(*note PyObject:
          339.*)
     ' Parte da *note ABI Estável: 553.'

 -- C Tipo: typedef *note PyObject: 339. *(*binaryfunc)(*note PyObject:
          339.*, *note PyObject: 339.*)
     ' Parte da *note ABI Estável: 553.'

 -- C Tipo: typedef *note PySendResult: 4f3f. (*sendfunc)(*note
          PyObject: 339.*, *note PyObject: 339.*, *note PyObject:
          339.**)

     See *note am_send: 5278.

 -- C Tipo: typedef *note PyObject: 339. *(*ternaryfunc)(*note PyObject:
          339.*, *note PyObject: 339.*, *note PyObject: 339.*)
     ' Parte da *note ABI Estável: 553.'

 -- C Tipo: typedef *note PyObject: 339. *(*ssizeargfunc)(*note
          PyObject: 339.*, *note Py_ssize_t: a69.)
     ' Parte da *note ABI Estável: 553.'

 -- C Tipo: typedef int (*ssizeobjargproc)(*note PyObject: 339.*, *note
          Py_ssize_t: a69, *note PyObject: 339.*)
     ' Parte da *note ABI Estável: 553.'

 -- C Tipo: typedef int (*objobjproc)(*note PyObject: 339.*, *note
          PyObject: 339.*)
     ' Parte da *note ABI Estável: 553.'

 -- C Tipo: typedef int (*objobjargproc)(*note PyObject: 339.*, *note
          PyObject: 339.*, *note PyObject: 339.*)
     ' Parte da *note ABI Estável: 553.'


File: python.info,  Node: Exemplos<38>,  Prev: Slot Type typedefs,  Up: Estruturas de objetos tipo

7.12.3.17 Exemplos
..................

The following are simple examples of Python type definitions.  They
include common usage you may encounter.  Some demonstrate tricky corner
cases.  For more examples, practical info, and a tutorial, see *note
Definindo Tipos de Extensão; Tutorial: 4b6f. and *note Defining
Extension Types; Assorted Topics: 4b87.

A basic *note static type: 77f.:

     typedef struct {
         PyObject_HEAD
         const char *data;
     } MyObject;

     static PyTypeObject MyObject_Type = {
         PyVarObject_HEAD_INIT(NULL, 0)
         .tp_name = "mymod.MyObject",
         .tp_basicsize = sizeof(MyObject),
         .tp_doc = PyDoc_STR("My objects"),
         .tp_new = myobj_new,
         .tp_dealloc = (destructor)myobj_dealloc,
         .tp_repr = (reprfunc)myobj_repr,
     };

You may also find older code (especially in the CPython code base) with
a more verbose initializer:

     static PyTypeObject MyObject_Type = {
         PyVarObject_HEAD_INIT(NULL, 0)
         "mymod.MyObject",               /* tp_name */
         sizeof(MyObject),               /* tp_basicsize */
         0,                              /* tp_itemsize */
         (destructor)myobj_dealloc,      /* tp_dealloc */
         0,                              /* tp_vectorcall_offset */
         0,                              /* tp_getattr */
         0,                              /* tp_setattr */
         0,                              /* tp_as_async */
         (reprfunc)myobj_repr,           /* tp_repr */
         0,                              /* tp_as_number */
         0,                              /* tp_as_sequence */
         0,                              /* tp_as_mapping */
         0,                              /* tp_hash */
         0,                              /* tp_call */
         0,                              /* tp_str */
         0,                              /* tp_getattro */
         0,                              /* tp_setattro */
         0,                              /* tp_as_buffer */
         0,                              /* tp_flags */
         PyDoc_STR("My objects"),        /* tp_doc */
         0,                              /* tp_traverse */
         0,                              /* tp_clear */
         0,                              /* tp_richcompare */
         0,                              /* tp_weaklistoffset */
         0,                              /* tp_iter */
         0,                              /* tp_iternext */
         0,                              /* tp_methods */
         0,                              /* tp_members */
         0,                              /* tp_getset */
         0,                              /* tp_base */
         0,                              /* tp_dict */
         0,                              /* tp_descr_get */
         0,                              /* tp_descr_set */
         0,                              /* tp_dictoffset */
         0,                              /* tp_init */
         0,                              /* tp_alloc */
         myobj_new,                      /* tp_new */
     };

A type that supports weakrefs, instance dicts, and hashing:

     typedef struct {
         PyObject_HEAD
         const char *data;
     } MyObject;

     static PyTypeObject MyObject_Type = {
         PyVarObject_HEAD_INIT(NULL, 0)
         .tp_name = "mymod.MyObject",
         .tp_basicsize = sizeof(MyObject),
         .tp_doc = PyDoc_STR("My objects"),
         .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
              Py_TPFLAGS_HAVE_GC | Py_TPFLAGS_MANAGED_DICT |
              Py_TPFLAGS_MANAGED_WEAKREF,
         .tp_new = myobj_new,
         .tp_traverse = (traverseproc)myobj_traverse,
         .tp_clear = (inquiry)myobj_clear,
         .tp_alloc = PyType_GenericNew,
         .tp_dealloc = (destructor)myobj_dealloc,
         .tp_repr = (reprfunc)myobj_repr,
         .tp_hash = (hashfunc)myobj_hash,
         .tp_richcompare = PyBaseObject_Type.tp_richcompare,
     };

A str subclass that cannot be subclassed and cannot be called to create
instances (e.g.  uses a separate factory func) using *note
Py_TPFLAGS_DISALLOW_INSTANTIATION: 582. flag:

     typedef struct {
         PyUnicodeObject raw;
         char *extra;
     } MyStr;

     static PyTypeObject MyStr_Type = {
         PyVarObject_HEAD_INIT(NULL, 0)
         .tp_name = "mymod.MyStr",
         .tp_basicsize = sizeof(MyStr),
         .tp_base = NULL,  // set to &PyUnicode_Type in module init
         .tp_doc = PyDoc_STR("my custom str"),
         .tp_flags = Py_TPFLAGS_DEFAULT | Py_TPFLAGS_DISALLOW_INSTANTIATION,
         .tp_repr = (reprfunc)myobj_repr,
     };

The simplest *note static type: 77f. with fixed-length instances:

     typedef struct {
         PyObject_HEAD
     } MyObject;

     static PyTypeObject MyObject_Type = {
         PyVarObject_HEAD_INIT(NULL, 0)
         .tp_name = "mymod.MyObject",
     };

The simplest *note static type: 77f. with variable-length instances:

     typedef struct {
         PyObject_VAR_HEAD
         const char *data[1];
     } MyObject;

     static PyTypeObject MyObject_Type = {
         PyVarObject_HEAD_INIT(NULL, 0)
         .tp_name = "mymod.MyObject",
         .tp_basicsize = sizeof(MyObject) - sizeof(char *),
         .tp_itemsize = sizeof(char *),
     };


File: python.info,  Node: Suporte a Coleta Cíclica de Lixo,  Prev: Estruturas de objetos tipo,  Up: Suporte a implementação de Objetos

7.12.4 Suporte a Coleta Cíclica de Lixo
---------------------------------------

O suporte do Python para detectar e coletar o lixo, que envolve
referencias circulares, requer suporte dos tipos de objetos que são
“contêineres” para outros objetos que também podem ser contêineres.
Tipos que não armazenam referências a outros tipos de objetos, ou que
apenas armazenam referências a tipos atômicos (como números ou strings),
não precisam fornecer nenhum suporte explicito para coleta de lixo.

To create a container type, the *note tp_flags: 19fd. field of the type
object must include the *note Py_TPFLAGS_HAVE_GC: 77d. and provide an
implementation of the *note tp_traverse: 77e. handler.  If instances of
the type are mutable, a *note tp_clear: 4b8b. implementation must also
be provided.

*note Py_TPFLAGS_HAVE_GC: 77d.

     Objetos com esse tipo de sinalizador definido devem estar em
     conformidade com regras documentadas aqui.  Por conveniência esses
     objetos serão referenciados como objetos de contêiner.

Construtores para tipos de contêiner devem obedecer a duas regras:

  1. The memory for the object must be allocated using *note
     PyObject_GC_New: ab1. or *note PyObject_GC_NewVar: ab2.

  2. Uma vez que todos os campos que podem conter referências a outros
     contêineres foram inicializados, deve-se chamar *note
     PyObject_GC_Track(): 154d.

Da mesma forma, o desalocador para o objeto deve estar em conformidade
com regras semelhantes:

  1. Antes que os campos que fazer referência a outros contêineres sejam
     invalidados, *note PyObject_GC_UnTrack(): 154e. deve ser chamado.

  2. A memória destinada ao objeto deve ser desalocada usando *note
     PyObject_GC_Del(): 154c.

          Aviso: If a type adds the Py_TPFLAGS_HAVE_GC, then it 'must'
          implement at least a *note tp_traverse: 77e. handler or
          explicitly use one from its subclass or subclasses.

          When calling *note PyType_Ready(): 77c. or some of the APIs
          that indirectly call it like *note PyType_FromSpecWithBases():
          57e. or *note PyType_FromSpec(): 57d. the interpreter will
          automatically populate the *note tp_flags: 19fd, *note
          tp_traverse: 77e. and *note tp_clear: 4b8b. fields if the type
          inherits from a class that implements the garbage collector
          protocol and the child class does 'not' include the *note
          Py_TPFLAGS_HAVE_GC: 77d. flag.

 -- C Macro: PyObject_GC_New (TYPE, typeobj)

     Analogous to *note PyObject_New: 98c. but for container objects
     with the *note Py_TPFLAGS_HAVE_GC: 77d. flag set.

 -- C Macro: PyObject_GC_NewVar (TYPE, typeobj, size)

     Analogous to *note PyObject_NewVar: 98d. but for container objects
     with the *note Py_TPFLAGS_HAVE_GC: 77d. flag set.

 -- C Função: *note PyObject: 339.
          *PyUnstable_Object_GC_NewWithExtraData (PyTypeObject *type,
          size_t extra_size)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Analogous to *note PyObject_GC_New: ab1. but allocates 'extra_size'
     bytes at the end of the object (at offset *note tp_basicsize:
     98e.).  The allocated memory is initialized to zeros, except for
     the *note Python object header: 339.

     The extra data will be deallocated with the object, but otherwise
     it is not managed by Python.

          Aviso: The function is marked as unstable because the final
          mechanism for reserving extra data after an instance is not
          yet decided.  For allocating a variable number of fields,
          prefer using *note PyVarObject: 4384. and *note tp_itemsize:
          20fd. instead.

     Adicionado na versão 3.12.

 -- C Macro: PyObject_GC_Resize (TYPE, op, newsize)

     Resize an object allocated by *note PyObject_NewVar: 98d.  Returns
     the resized object of type ‘TYPE*’ (refers to any C type) or ‘NULL’
     on failure.

     'op' must be of type *note PyVarObject: 4384.* and must not be
     tracked by the collector yet.  'newsize' must be of type *note
     Py_ssize_t: a69.

 -- C Função: void PyObject_GC_Track (PyObject *op)
     ' Parte da *note ABI Estável: 553.'  Adds the object 'op' to the
     set of container objects tracked by the collector.  The collector
     can run at unexpected times so objects must be valid while being
     tracked.  This should be called once all the fields followed by the
     *note tp_traverse: 77e. handler become valid, usually near the end
     of the constructor.

 -- C Função: int PyObject_IS_GC (PyObject *obj)

     Returns non-zero if the object implements the garbage collector
     protocol, otherwise returns 0.

     The object cannot be tracked by the garbage collector if this
     function returns 0.

 -- C Função: int PyObject_GC_IsTracked (PyObject *op)
     ' Parte da *note ABI Estável: 553. desde a versão 3.9.'  Returns 1
     if the object type of 'op' implements the GC protocol and 'op' is
     being currently tracked by the garbage collector and 0 otherwise.

     This is analogous to the Python function *note gc.is_tracked():
     1352.

     Adicionado na versão 3.9.

 -- C Função: int PyObject_GC_IsFinalized (PyObject *op)
     ' Parte da *note ABI Estável: 553. desde a versão 3.9.'  Returns 1
     if the object type of 'op' implements the GC protocol and 'op' has
     been already finalized by the garbage collector and 0 otherwise.

     This is analogous to the Python function *note gc.is_finalized():
     903.

     Adicionado na versão 3.9.

 -- C Função: void PyObject_GC_Del (void *op)
     ' Parte da *note ABI Estável: 553.'  Releases memory allocated to
     an object using *note PyObject_GC_New: ab1. or *note
     PyObject_GC_NewVar: ab2.

 -- C Função: void PyObject_GC_UnTrack (void *op)
     ' Parte da *note ABI Estável: 553.'  Remove the object 'op' from
     the set of container objects tracked by the collector.  Note that
     *note PyObject_GC_Track(): 154d. can be called again on this object
     to add it back to the set of tracked objects.  The deallocator
     (*note tp_dealloc: 4b66. handler) should call this for the object
     before any of the fields used by the *note tp_traverse: 77e.
     handler become invalid.

Alterado na versão 3.8: The ‘_PyObject_GC_TRACK()’ and
‘_PyObject_GC_UNTRACK()’ macros have been removed from the public C API.

The *note tp_traverse: 77e. handler accepts a function parameter of this
type:

 -- C Tipo: typedef int (*visitproc)(*note PyObject: 339. *object, void
          *arg)
     ' Parte da *note ABI Estável: 553.'  Type of the visitor function
     passed to the *note tp_traverse: 77e. handler.  The function should
     be called with an object to traverse as 'object' and the third
     parameter to the *note tp_traverse: 77e. handler as 'arg'.  The
     Python core uses several visitor functions to implement cyclic
     garbage detection; it’s not expected that users will need to write
     their own visitor functions.

The *note tp_traverse: 77e. handler must have the following type:

 -- C Tipo: typedef int (*traverseproc)(*note PyObject: 339. *self,
          *note visitproc: 4e51. visit, void *arg)
     ' Parte da *note ABI Estável: 553.'  Traversal function for a
     container object.  Implementations must call the 'visit' function
     for each object directly contained by 'self', with the parameters
     to 'visit' being the contained object and the 'arg' value passed to
     the handler.  The 'visit' function must not be called with a ‘NULL’
     object argument.  If 'visit' returns a non-zero value that value
     should be returned immediately.

     The traversal function must not have any side effects.
     Implementations may not modify the reference counts of any Python
     objects nor create or destroy any Python objects.

To simplify writing *note tp_traverse: 77e. handlers, a *note
Py_VISIT(): 4b82. macro is provided.  In order to use this macro, the
*note tp_traverse: 77e. implementation must name its arguments exactly
'visit' and 'arg':

 -- C Macro: Py_VISIT (o)

     If the *note PyObject: 339.* 'o' is not ‘NULL’, call the 'visit'
     callback, with arguments 'o' and 'arg'.  If 'visit' returns a
     non-zero value, then return it.  Using this macro, *note
     tp_traverse: 77e. handlers look like:

          static int
          my_traverse(Noddy *self, visitproc visit, void *arg)
          {
              Py_VISIT(self->foo);
              Py_VISIT(self->bar);
              return 0;
          }

The *note tp_clear: 4b8b. handler must be of the *note inquiry: 4e40.
type, or ‘NULL’ if the object is immutable.

 -- C Tipo: typedef int (*inquiry)(*note PyObject: 339. *self)
     ' Parte da *note ABI Estável: 553.'  Drop references that may have
     created reference cycles.  Immutable objects do not have to define
     this method since they can never directly create reference cycles.
     Note that the object must still be valid after calling this method
     (don’t just call *note Py_DECREF(): 56f. on a reference).  The
     collector will call this method if it detects that this object is
     involved in a reference cycle.

* Menu:

* Controlando o estado do coletor de lixo::
* Querying Garbage Collector State::


File: python.info,  Node: Controlando o estado do coletor de lixo,  Next: Querying Garbage Collector State,  Up: Suporte a Coleta Cíclica de Lixo

7.12.4.1 Controlando o estado do coletor de lixo
................................................

The C-API provides the following functions for controlling garbage
collection runs.

 -- C Função: *note Py_ssize_t: a69. PyGC_Collect (void)
     ' Parte da *note ABI Estável: 553.'  Perform a full garbage
     collection, if the garbage collector is enabled.  (Note that *note
     gc.collect(): a43. runs it unconditionally.)

     Returns the number of collected + unreachable objects which cannot
     be collected.  If the garbage collector is disabled or already
     collecting, returns ‘0’ immediately.  Errors during garbage
     collection are passed to *note sys.unraisablehook: 1f7.  This
     function does not raise exceptions.

 -- C Função: int PyGC_Enable (void)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Enable
     the garbage collector: similar to *note gc.enable(): 46b1.  Returns
     the previous state, 0 for disabled and 1 for enabled.

     Adicionado na versão 3.10.

 -- C Função: int PyGC_Disable (void)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Disable
     the garbage collector: similar to *note gc.disable(): 46b2.
     Returns the previous state, 0 for disabled and 1 for enabled.

     Adicionado na versão 3.10.

 -- C Função: int PyGC_IsEnabled (void)
     ' Parte da *note ABI Estável: 553. desde a versão 3.10.'  Query the
     state of the garbage collector: similar to *note gc.isenabled():
     46b3.  Returns the current state, 0 for disabled and 1 for enabled.

     Adicionado na versão 3.10.


File: python.info,  Node: Querying Garbage Collector State,  Prev: Controlando o estado do coletor de lixo,  Up: Suporte a Coleta Cíclica de Lixo

7.12.4.2 Querying Garbage Collector State
.........................................

The C-API provides the following interface for querying information
about the garbage collector.

 -- C Função: void PyUnstable_GC_VisitObjects (gcvisitobjects_t
          callback, void *arg)

          Esta é uma API Instável. Isso pode se alterado sem aviso em lançamentos menores. 'Esta é uma *note API Instável: 547. Isso pode se alterado sem aviso em lançamentos menores.': 
     Run supplied 'callback' on all live GC-capable objects.  'arg' is
     passed through to all invocations of 'callback'.

          Aviso: If new objects are (de)allocated by the callback it is
          undefined if they will be visited.

          Garbage collection is disabled during operation.  Explicitly
          running a collection in the callback may lead to undefined
          behaviour e.g.  visiting the same objects multiple times or
          not at all.

     Adicionado na versão 3.12.

 -- C Tipo: typedef int (*gcvisitobjects_t)(*note PyObject: 339.
          *object, void *arg)

     Type of the visitor function to be passed to *note
     PyUnstable_GC_VisitObjects(): 52c8.  'arg' is the same as the 'arg'
     passed to ‘PyUnstable_GC_VisitObjects’.  Return ‘1’ to continue
     iteration, return ‘0’ to stop iteration.  Other return values are
     reserved for now so behavior on returning anything else is
     undefined.

     Adicionado na versão 3.12.


File: python.info,  Node: API e Versionamento de ABI,  Next: API C de monitoramento,  Prev: Suporte a implementação de Objetos,  Up: Manual de referência da API Python/C

7.13 API e Versionamento de ABI
===============================

O CPython expõe seu número de versão nas seguintes macros.  Note que
estes correspondem com o código da versão que está 'construída', não
necessariamente a versão usada no 'run time'.

Veja *note Estabilidade da API C: 553. para uma discussão da
estabilidade da API e ABI através das versões.

 -- C Macro: PY_MAJOR_VERSION

     O ‘3’ em ‘3.4.1a2’.

 -- C Macro: PY_MINOR_VERSION

     O ‘4’ em ‘3.4.1a2’.

 -- C Macro: PY_MICRO_VERSION

     O ‘1’ em ‘3.4.1a2’.

 -- C Macro: PY_RELEASE_LEVEL

     O ‘a’ em ‘3.4.1a2’.  Isto pode ser ‘0xA’ para alfa, ‘0xB’ para
     beta, ‘0xC’ para o candidato a lançamento ou ‘0xF’ para final.

 -- C Macro: PY_RELEASE_SERIAL

     O ‘2’ em ‘3.4.1a2’.  Zero para os lançamentos finais.

 -- C Macro: PY_VERSION_HEX

     O número da versão do Python codificado em um único inteiro.

     As informações da versão subjacente podem ser achadas tratando-as
     como um número de 32 bits da seguinte maneira:

     Bytes       Bits (big endian order)       Significado                   Valor para ‘3.4.1a2’
                                                                             
     -------------------------------------------------------------------------------------------------------
                                                                             
     1           1-8                           ‘PY_MAJOR_VERSION’            ‘0x03’
                                                                             
                                                                             
     2           9-16                          ‘PY_MINOR_VERSION’            ‘0x04’
                                                                             
                                                                             
     3           17-24                         ‘PY_MICRO_VERSION’            ‘0x01’
                                                                             
                                                                             
     4           25-28                         ‘PY_RELEASE_LEVEL’            ‘0xA’
                                                                             
                                               
     29-32       ‘PY_RELEASE_SERIAL’           ‘0x2’
                                               

     Assim ‘3.4.1a2’ é a versão hex ‘0x030401a2’ e ‘3.10.0’ é a versãos
     hex ‘0x030a00f0’.

     Use isso para comparações numéricas como, por exemplo, ‘#if
     PY_VERSION_HEX >= ...’.

     Esta versão também está disponível através do símbolo *note
     Py_Version: 756.

 -- C Variável: const unsigned long Py_Version
     ' Parte da *note ABI Estável: 553. desde a versão 3.11.'  O número
     da versão do runtime do Python codificado em um único inteiro
     constante, com o mesmo formato da macro *note PY_VERSION_HEX: 757.
     Ele contém a versão do Python usada em tempo de execução.

     Adicionado na versão 3.11.

Todas as macros dadas estão definidas em Include/patchlevel.h(1).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Include/patchlevel.h


File: python.info,  Node: API C de monitoramento,  Next: Gerando eventos de execução,  Prev: API e Versionamento de ABI,  Up: Manual de referência da API Python/C

7.14 API C de monitoramento
===========================

Adicionada na versão 3.13.

Uma extensão pode precisar interagir com o sistema de monitoramento de
eventos.  É possível registrar funções de retorno e se inscrever para
receber eventos através da API Python exposta em *note sys.monitoring:
da.


File: python.info,  Node: Gerando eventos de execução,  Prev: API C de monitoramento,  Up: Manual de referência da API Python/C

7.15 Gerando eventos de execução
================================

As funções abaixo permitem que extensões dispararem eventos de
monitoramento emulando a execução de código Python.  Cada uma dessas
funções recebe uma estrutura ‘PyMonitoringState’ que contém informação
concisa sobre o estado de ativação de eventos, bem como os argumentos
dos eventos, que incluem um ‘PyObject*’ representando o objeto de
código, a posição da instrução no bytecode, e, em alguns casos,
argumentos adicionais específicos para o evento (veja *note
sys.monitoring: da. para detalhes sobre as assinaturas das funções de
retorno de diferentes eventos).  O argumento ‘codelike’ deve ser uma
instância da classe *note types.CodeType: 2df. ou de um tipo que a
emule.

A VM desabilita o rastreamento quando dispara um evento, de forma que
não há necessidade do código do usuário fazer isso.

Funções de monitoramento não devem ser chamadas com uma exceção
definida, exceto as marcadas abaixo como funções que trabalham com a
exceção atual.

 -- C Tipo: type PyMonitoringState

     Representação do estado de um tipo de evento.  Alocada pelo
     usuário, enquanto o seu conteúdo é mantido pelas funções da API de
     monitoramento descritas abaixo.

Todas as funções abaixo retornam 0 para indicar sucesso e -1 (com uma
exceção definida) para indicar erro.

Veja *note sys.monitoring: da. para descrições dos eventos.

 -- C Função: int PyMonitoring_FirePyStartEvent (PyMonitoringState
          *state, PyObject *codelike, int32_t offset)

     Dispara um evento ‘PY_START’.

 -- C Função: int PyMonitoring_FirePyResumeEvent (PyMonitoringState
          *state, PyObject *codelike, int32_t offset)

     Dispara um evento ‘PY_RESUME’.

 -- C Função: int PyMonitoring_FirePyReturnEvent (PyMonitoringState
          *state, PyObject *codelike, int32_t offset, PyObject *retval)

     Dispara um evento ‘PY_RETURN’.

 -- C Função: int PyMonitoring_FirePyYieldEvent (PyMonitoringState
          *state, PyObject *codelike, int32_t offset, PyObject *retval)

     Dispara um evento ‘PY_YIELD’.

 -- C Função: int PyMonitoring_FireCallEvent (PyMonitoringState *state,
          PyObject *codelike, int32_t offset, PyObject *callable,
          PyObject *arg0)

     Dispara um evento ‘CALL’.

 -- C Função: int PyMonitoring_FireLineEvent (PyMonitoringState *state,
          PyObject *codelike, int32_t offset, int lineno)

     Dispara um evento ‘LINE’.

 -- C Função: int PyMonitoring_FireJumpEvent (PyMonitoringState *state,
          PyObject *codelike, int32_t offset, PyObject *target_offset)

     Dispara um evento ‘JUMP’.

 -- C Função: int PyMonitoring_FireBranchEvent (PyMonitoringState
          *state, PyObject *codelike, int32_t offset, PyObject
          *target_offset)

     Dispara um evento ‘BRANCH’.

 -- C Função: int PyMonitoring_FireCReturnEvent (PyMonitoringState
          *state, PyObject *codelike, int32_t offset, PyObject *retval)

     Dispara um evento ‘C_RETURN’.

 -- C Função: int PyMonitoring_FirePyThrowEvent (PyMonitoringState
          *state, PyObject *codelike, int32_t offset)

     Dispara um evento ‘PY_THROW’ com a exceção atual (conforme
     retornada por *note PyErr_GetRaisedException(): 3f4.).

 -- C Função: int PyMonitoring_FireRaiseEvent (PyMonitoringState *state,
          PyObject *codelike, int32_t offset)

     Dispara um evento ‘RAISE’ com a exceção atual (conforme retornada
     por *note PyErr_GetRaisedException(): 3f4.).

 -- C Função: int PyMonitoring_FireCRaiseEvent (PyMonitoringState
          *state, PyObject *codelike, int32_t offset)

     Dispara um evento ‘C_RAISE’ com a exceção atual (conforme retornada
     por *note PyErr_GetRaisedException(): 3f4.).

 -- C Função: int PyMonitoring_FireReraiseEvent (PyMonitoringState
          *state, PyObject *codelike, int32_t offset)

     Dispara um evento ‘RERAISE’ com a exceção atual (conforme retornada
     por *note PyErr_GetRaisedException(): 3f4.).

 -- C Função: int PyMonitoring_FireExceptionHandledEvent
          (PyMonitoringState *state, PyObject *codelike, int32_t offset)

     Dispara um evento ‘EXCEPTION_HANDLED’ com a exceção atual (conforme
     retornada por *note PyErr_GetRaisedException(): 3f4.).

 -- C Função: int PyMonitoring_FirePyUnwindEvent (PyMonitoringState
          *state, PyObject *codelike, int32_t offset)

     Dispara um evento ‘PY_UNWIND’ com a exceção atual (conforme
     retornada por *note PyErr_GetRaisedException(): 3f4.).

 -- C Função: int PyMonitoring_FireStopIterationEvent (PyMonitoringState
          *state, PyObject *codelike, int32_t offset, PyObject *value)

     Dispara um evento ‘STOP_ITERATION’.  Se ‘value’ for uma instância
     de *note StopIteration: c15, ele é usado.  Caso contrário, uma nova
     instância de *note StopIteration: c15. é criada com ‘value’ como o
     argumento.

* Menu:

* Gerenciando o Estado de um Monitoramento::


File: python.info,  Node: Gerenciando o Estado de um Monitoramento,  Up: Gerando eventos de execução

7.15.1 Gerenciando o Estado de um Monitoramento
-----------------------------------------------

Estados de monitoramento podem ser gerenciados com a ajuda de escopos de
monitoramento.  Um escopo corresponderia tipicamente a um função Python.

 -- C Função: int PyMonitoring_EnterScope (PyMonitoringState
          *state_array, uint64_t *version, const uint8_t *event_types,
          Py_ssize_t length)

     Insere um escopo monitorado.  ‘event_types’ é um vetor de IDs de
     eventos para eventos que podem ser disparados do escopo.  Por
     exemplo, a ID de um evento ‘PY_START’ é o valor
     ‘PY_MONITORING_EVENT_PY_START’, que é numericamente igual ao
     logaritmo de base 2 de ‘sys.monitoring.events.PY_START’.
     ‘state_array’ é um vetor com uma entrada de estado de monitoramento
     para cada evento em ‘event_types’, é alocado pelo usuário, mas
     preenchido por ‘PyMonitoring_EnterScope()’ com informações sobre o
     estado de ativação do evento.  O tamanho de ‘event_types’ (e,
     portanto, também de ‘state_array’) é fornecido em ‘length’.

     O argumento ‘version’ é um ponteiro para um valor que deve ser
     alocado pelo usuário junto com ‘state_array’ e inicializado como 0,
     e então definido somente pelo próprio ‘PyMonitoring_EnterScope()’.
     Ele permite que esta função determine se os estados de eventos
     mudaram desde a chamada anterior, e retorne rapidamente se não
     mudaram.

     Os escopos mencionados aqui são escopos lexicais: uma função,
     classe ou método.  ‘PyMonitoring_EnterScope()’ deve ser chamada
     sempre que o escopo lexical for inserido.  Os escopos podem ser
     inseridos novamente, reutilizando o mesmo 'state_array' e
     'version', em situações como ao emular uma função Python recursiva.
     Quando a execução de um código semelhante é pausada, como ao emular
     um gerador, o escopo precisa ser encerrado e inserido novamente.

     As macros para 'event_types' são:

     Macro                                                  Evento
                                                            
     -------------------------------------------------------------------------------------------------
                                                            
      -- C Macro: PY_MONITORING_EVENT_BRANCH                *note BRANCH: 45dd.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_CALL                  *note CALL: 1734.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_C_RAISE               *note C_RAISE: 45de.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_C_RETURN              *note C_RETURN: 45df.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_EXCEPTION_HANDLED     *note EXCEPTION_HANDLED: 45e0.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_INSTRUCTION           *note INSTRUCTION: 45e1.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_JUMP                  *note JUMP: 45e2.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_LINE                  *note LINE: 45e3.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_PY_RESUME             *note PY_RESUME: 45e4.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_PY_RETURN             *note PY_RETURN: 45e5.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_PY_START              *note PY_START: 45e6.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_PY_THROW              *note PY_THROW: 45e7.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_PY_UNWIND             *note PY_UNWIND: 45e8.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_PY_YIELD              *note PY_YIELD: 45e9.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_RAISE                 *note RAISE: 16da.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_RERAISE               *note RERAISE: 45eb.
                                                            
                                                            
      -- C Macro: PY_MONITORING_EVENT_STOP_ITERATION        *note STOP_ITERATION: 45ea.
                                                            

 -- C Função: int PyMonitoring_ExitScope (void)

     Sai do último escopo no qual se entrou com
     ‘PyMonitoring_EnterScope()’.

 -- C Função: int PY_MONITORING_IS_INSTRUMENTED_EVENT (uint8_t ev)

     Retorna verdadeiro se o evento correspondente ao ID do evento 'ev'
     for um *note evento local: 45ef.

     Adicionado na versão 3.13.

     Descontinuado desde a versão 3.13.3: Esta função está *note
     suavemente descontinuada: 209.


File: python.info,  Node: Instalando módulos Python,  Next: Python HOWTOs,  Prev: Manual de referência da API Python/C,  Up: Top

8 Instalando módulos Python
***************************


E-mail: <distutils-sig@python.org>

Como um projeto popular de desenvolvimento de código aberto, Python tem
uma comunidade de apoio ativa de colaboradores e usuários, que também
fazem o seu software disponível para outros desenvolvedores de Python
para usar sob os termos da licença de código aberto.

Isso permite aos usuários Python compartilhar e colaborar efetivamente,
se beneficiando das soluções que outros já tenham criado para os
problemas mais comuns (em alguns casos até mesmo os raros), bem como
potencialmente contribuindo com suas próprias soluções para o conjunto
de soluções comuns.

Este guia cobre a parte do processo de instalação.  Para um guia sobre
criar e compartilhar seus próprios projetos Python, confira o Guia de
Usuário para Empacotamento de Python(1).

     Nota: Para corporações e outros usuários institucionais, esteja
     ciente que muitas organizações têm suas próprias políticas em
     relação ao uso e contribuição para o software de código aberto.
     Por favor, leve em conta essas políticas ao usar as ferramentas de
     distribuição e instalação fornecidas com o Python.

* Menu:

* Termos chave::
* Uso básico: Uso básico<3>.
* Como eu …?::
* Problemas comuns de instalação::

   ---------- Footnotes ----------

   (1) 
https://packaging.python.org/en/latest/tutorials/packaging-projects/


File: python.info,  Node: Termos chave,  Next: Uso básico<3>,  Up: Instalando módulos Python

8.1 Termos chave
================

   * ‘pip’ é o programa de instalação preferido.  A partir do Python
     3.4, ele é incluído por padrão com os instaladores binários do
     Python.

   * Um 'ambiente virtual' é um ambiente Python semi-isolado que permite
     que pacotes sejam instalados para uso por uma aplicação específica,
     em vez de serem instaladas em todo o sistema.

   * ‘venv’ é a ferramenta padrão para criar ambientes virtuais e faz
     parte do Python desde o Python 3.3.  A partir do Python 3.4, o
     padrão é instalar ‘pip’ em todos os ambientes virtuais criados.

   * ‘virtualenv’ é uma alternativa de terceiros (e predecessora) ao
     ‘venv’.  Ele permite que ambientes virtuais sejam usados em versões
     do Python anteriores a 3.4, que não fornecem ‘venv’ de forma
     alguma, ou não são capazes de instalar automaticamente o ‘pip’ nos
     ambientes criados.

   * O Python Package Index(1) é um repositório público de pacotes
     licenciados como código aberto e disponíveis para uso de outros
     usuários Python

   * o Python Packaging Authority(2) é o grupo de desenvolvedores e
     autores de documentação responsáveis pela manutenção e evolução das
     ferramentas de empacotamento padrão e os metadados associados e
     padrões de formato de arquivo.  Eles mantêm uma variedade de
     ferramentas, documentação e rastreadores de problemas no GitHub(3).

   * ‘distutils’ é o sistema original de construção e distribuição
     adicionado pela primeira vez à biblioteca padrão Python em 1998.
     Embora o uso direto de ‘distutils’ esteja sendo eliminado, ele
     ainda estabeleceu a base para a infraestrutura de distribuição e
     empacotamento atual, e não apenas permanece da biblioteca padrão,
     mas seu nome sobrevive de outras maneiras (como o nome da lista de
     e-mails usada para coordenar o desenvolvimento de padrões de
     empacotamento Python).

Alterado na versão 3.5: O uso de ‘venv’ agora é recomendado para a
criação de ambientes virtuais.

Ver também
..........

Guia de Usuário para Empacotamento de Python: Criando e usando ambientes
virtuais(4)

   ---------- Footnotes ----------

   (1) https://pypi.org

   (2) https://www.pypa.io/

   (3) https://github.com/pypa

   (4) 
https://packaging.python.org/pt-br/latest/tutorials/installing-packages/#creating-virtual-environments


File: python.info,  Node: Uso básico<3>,  Next: Como eu …?,  Prev: Termos chave,  Up: Instalando módulos Python

8.2 Uso básico
==============

As ferramentas de empacotamento padrão são todas projetadas para serem
usadas na linha de comando.

O comando a seguir instalará a versão mais recente de um módulo e suas
dependências do Python Package Index:

     python -m pip install AlgumPacote

     Nota: Para usuários POSIX (incluindo usuários macOS e Linux), os
     exemplos neste guia presumem o uso de um *note ambiente virtual:
     1e86.

     Para usuários do Windows, os exemplos neste guia presumem que a
     opção de ajustar a variável de ambiente PATH do sistema foi
     selecionada durante a instalação do Python.

Também é possível especificar uma versão exata ou mínima diretamente na
linha de comando.  Ao usar operadores de comparação como ‘>’, ‘<’ ou
algum outro caractere especial que é interpretado pelo shell, o nome do
pacote e a versão devem ser colocados entre aspas duplas:

     python -m pip install AlgumPacote==1.0.4    # versão específica
     python -m pip install "AlgumPacote>=1.0.4"  # versão mínima

Normalmente, se um módulo adequado já estiver instalado, tentar
instalá-lo novamente não terá efeito.  A atualização de módulos
existentes deve ser solicitada explicitamente:

     python -m pip install --upgrade AlgumPacote

Mais informações e recursos sobre o ‘pip’ e seus recursos podem ser
encontrados no Python Packaging User Guide(1).

A criação de ambientes virtuais é feita através do módulo *note venv:
111.  A instalação de pacotes em um ambiente virtual ativo usa os
comandos mostrados acima.

Ver também
..........

Guia de Usuário para Empacotamento de Python: Instalando pacotes Python
de distribuição(2)

   ---------- Footnotes ----------

   (1) https://packaging.python.org

   (2) 
https://packaging.python.org/pt-br/latest/tutorials/installing-packages/


File: python.info,  Node: Como eu …?,  Next: Problemas comuns de instalação,  Prev: Uso básico<3>,  Up: Instalando módulos Python

8.3 Como eu …?
==============

Estas são respostas rápidas ou links para algumas tarefas comuns.

* Menu:

* … instalo pip em versões do Python anteriores ao Python 3.4?: … instalo pip em versões do Python anteriores ao Python 3 4?.
* … instalo pacotes apenas para o usuário atual?::
* … instalo pacotes científicos do Python?::
* … trabalho com várias versões do Python instaladas em paralelo?::


File: python.info,  Node: … instalo pip em versões do Python anteriores ao Python 3 4?,  Next: … instalo pacotes apenas para o usuário atual?,  Up: Como eu …?

8.3.1 … instalo ‘pip’ em versões do Python anteriores ao Python 3.4?
--------------------------------------------------------------------

Python apenas começou a empacotar ‘pip’ com Python 3.4.  Para versões
anteriores, o ‘pip’ precisa ser “inicializado” conforme descrito no
Python Packaging User Guide.

Ver também
..........

Python Packaging User Guide: Requisitos para instalar pacotes(1)

   ---------- Footnotes ----------

   (1) 
https://packaging.python.org/pt-br/latest/tutorials/installing-packages/#requirements-for-installing-packages


File: python.info,  Node: … instalo pacotes apenas para o usuário atual?,  Next: … instalo pacotes científicos do Python?,  Prev: … instalo pip em versões do Python anteriores ao Python 3 4?,  Up: Como eu …?

8.3.2 … instalo pacotes apenas para o usuário atual?
----------------------------------------------------

Passar a opção ‘--user’ para ‘python -m pip install’ irá instalar um
pacote apenas para o usuário atual, ao invés de para todos os usuários
do sistema.


File: python.info,  Node: … instalo pacotes científicos do Python?,  Next: … trabalho com várias versões do Python instaladas em paralelo?,  Prev: … instalo pacotes apenas para o usuário atual?,  Up: Como eu …?

8.3.3 … instalo pacotes científicos do Python?
----------------------------------------------

Vários pacotes científicos do Python têm dependências binárias complexas
e atualmente não são fáceis de instalar usando o ‘pip’ diretamente.
Neste ponto, frequentemente será mais fácil para os usuários instalarem
esses pacotes por outros meios(1) ao invés de tentar instalá-los com
‘pip’.

Ver também
..........

Guia de Usuário para Empacotamento de Python: Instalando pacotes
científicos(2)

   ---------- Footnotes ----------

   (1) https://packaging.python.org/science/

   (2) 
https://packaging.python.org/pt-br/latest/guides/installing-scientific-packages//


File: python.info,  Node: … trabalho com várias versões do Python instaladas em paralelo?,  Prev: … instalo pacotes científicos do Python?,  Up: Como eu …?

8.3.4 … trabalho com várias versões do Python instaladas em paralelo?
---------------------------------------------------------------------

No Linux, macOS e outros sistemas POSIX, use os comandos Python com
versão em combinação com a opção ‘-m’ para executar a cópia apropriada
de ‘pip’

     python2   -m pip install AlgumPacote  # Python 2 padrão
     python2.7 -m pip install AlgumPacote  # Python 2.7 especificamente
     python3   -m pip install AlgumPacote  # Python 3 padrão
     python3.4 -m pip install AlgumPacote  # Python 3.4 especificamente

Comandos ‘pip’ com versão apropriada também podem estar disponíveis.

No Windows, use o iniciador Python ‘py’ em combinação com a opção ‘-m’:

     py -2   -m pip install AlgumPacote  # Python 2 padrão
     py -2.7 -m pip install AlgumPacote  # Python 2.7 especificamente
     py -3   -m pip install AlgumPacote  # Python 3 padrão
     py -3.4 -m pip install AlgumPacote  # Python 3.4 especificamente


File: python.info,  Node: Problemas comuns de instalação,  Prev: Como eu …?,  Up: Instalando módulos Python

8.4 Problemas comuns de instalação
==================================

* Menu:

* Instalando no sistema Python no Linux::
* Pip não instalado::
* Instalando extensões binárias::


File: python.info,  Node: Instalando no sistema Python no Linux,  Next: Pip não instalado,  Up: Problemas comuns de instalação

8.4.1 Instalando no sistema Python no Linux
-------------------------------------------

Em sistemas Linux, uma instalação Python normalmente será incluída como
parte da distribuição.  A instalação nesta instalação Python requer
acesso root ao sistema, e pode interferir na operação do gerenciador de
pacotes do sistema e outros componentes do sistema se um componente for
atualizado inesperadamente usando ‘pip’.

Em tais sistemas, geralmente é melhor usar um ambiente virtual ou uma
instalação por usuário ao instalar pacotes com ‘pip’.


File: python.info,  Node: Pip não instalado,  Next: Instalando extensões binárias,  Prev: Instalando no sistema Python no Linux,  Up: Problemas comuns de instalação

8.4.2 Pip não instalado
-----------------------

É possível que o ‘pip’ não seja instalado por padrão.  Uma solução
potencial é:

     python -m ensurepip --default-pip

Existem também recursos adicionais para instalar pip.(1)

   ---------- Footnotes ----------

   (1) 
https://packaging.python.org/en/latest/tutorials/installing-packages/#ensure-pip-setuptools-and-wheel-are-up-to-date


File: python.info,  Node: Instalando extensões binárias,  Prev: Pip não instalado,  Up: Problemas comuns de instalação

8.4.3 Instalando extensões binárias
-----------------------------------

O Python normalmente depende fortemente da distribuição baseada na
fonte, com os usuários finais sendo esperados para compilar os módulos
de extensão da fonte como parte do processo de instalação.

Com a introdução do suporte para o formato binário ‘wheel’ e a
capacidade de publicar wheels para pelo menos Windows e macOS através do
Python Package Index, espera-se que este problema diminua com o tempo, à
medida que os usuários são mais capazes para instalar extensões
pré-construídas em vez de precisar construí-las eles próprios.

Algumas das soluções para instalar softwares científicos(1) que ainda
não estão disponíveis como arquivos ‘wheel’ pré-construídos também podem
ajudar a obter outras extensões binárias sem a necessidade para
construí-los localmente.

Ver também
..........

Guia de Usuário para Empacotamento de Python: Extensões binárias(2)

   ---------- Footnotes ----------

   (1) https://packaging.python.org/science/

   (2) 
https://packaging.python.org/pt-br/latest/guides/packaging-binary-extensions/


File: python.info,  Node: Python HOWTOs,  Next: Perguntas Frequentes Sobre Python,  Prev: Instalando módulos Python,  Up: Top

9 Python HOWTOs
***************

Python HOWTOs (COMOFAZER) são documentos que cobrem um tópico específico
em profundidade.  Modelada na coleção HOWTO do Linux Documentation
Project, esta coleção é um esforço para promover uma documentação mais
detalhada do que a Referência da Biblioteca do Python.

* Menu:

* Uma visão geral conceitual de asyncio::
* Portando módulos de extensão para o Python 3::
* Programação em Curses com Python::
* Guia de descritores::
* Depurando extensões de API C e internos do CPython com GDB::
* Enum::
* Programação Funcional::
* Logging::
* Livro de receitas do logging::
* Expressões Regulares::
* Programação de Soquetes::
* Técnicas de ordenação::
* Unicode: Unicode<3>.
* Como buscar recursos da Internet usando o pacote urllib::
* Uma introdução ao módulo ipaddress::
* Instrumentando o CPython com DTrace e SystemTap::
* Suporte do Python ao perfilador perf do Linux::
* Boas práticas para anotações::
* Isolando módulos de extensão::
* Descritor de arquivo de temporizador::
* A Ordem de Resolução de Métodos do Python 2.3: A Ordem de Resolução de Métodos do Python 2 3.
* Suporte experimental do Python para threads livres::
* Suporte a extensões da API C para threads livres::


File: python.info,  Node: Uma visão geral conceitual de asyncio,  Next: Portando módulos de extensão para o Python 3,  Up: Python HOWTOs

9.1 Uma visão geral conceitual de ‘asyncio’
===========================================

Este artigo *note COMOFAZER: 52f8. tem como objetivo ajudá-lo a
construir um modelo mental sólido de como *note asyncio: a. funciona
fundamentalmente, ajudando-lhe a compreender o como e o porquê por trás
dos padrões recomendados.

Você pode estar curioso sobre alguns conceitos-chave de ‘asyncio’.  Ao
final deste artigo, você será capaz de responder confortavelmente a
estas perguntas:

   - O que acontece nos bastidores quando um objeto é aguardado?

   - Como o ‘asyncio’ diferencia uma tarefa que não precisa de tempo de
     CPU (como uma solicitação de rede ou leitura de arquivo) de uma
     tarefa que precisa (como calcular n-fatorial)?

   - Como escrever uma variante assíncrona de uma operação, como uma
     suspensão assíncrona ou uma solicitação de banco de dados.

Ver também
..........

   * O guia(1) que inspirou este artigo COMOFAZER, por Alexander Nordin.

   * Esta série de tutoriais detalhados do YouTube(2) sobre ‘asyncio’
     foi criada pelo membro da equipe principal do Python, Łukasz Langa.

   * 500 linhas ou menos: um rastreador da Web com corrotinas asyncio(3)
     (em inglês) por A. Jesse Jiryu Davis e Guido van Rossum.

* Menu:

* Uma visão geral conceitual parte 1; o alto nível: Uma visão geral conceitual parte 1 o alto nível.
* Uma visão geral conceitual, parte 2; os detalhes: Uma visão geral conceitual parte 2 os detalhes.

   ---------- Footnotes ----------

   (1) 
https://github.com/anordin95/a-conceptual-overview-of-asyncio/tree/main

   (2) 
https://www.youtube.com/watch?v=Xbl7XjFYsN4&list=PLhNSoGM2ik6SIkVGXWBwerucXjgP1rHmB

   (3) 
https://aosabook.org/en/500L/a-web-crawler-with-asyncio-coroutines.html


File: python.info,  Node: Uma visão geral conceitual parte 1 o alto nível,  Next: Uma visão geral conceitual parte 2 os detalhes,  Up: Uma visão geral conceitual de asyncio

9.1.1 Uma visão geral conceitual parte 1: o alto nível
------------------------------------------------------

Na parte 1, abordaremos os principais blocos de construção de alto nível
de ‘asyncio’: o laço de eventos, funções de corrotina, objetos de
corrotina, tarefas e ‘await’.

* Menu:

* Laço de eventos: Laço de eventos<2>.
* Funções assíncronas e corrotinas::
* Tarefas: Tarefas<2>.
* await::


File: python.info,  Node: Laço de eventos<2>,  Next: Funções assíncronas e corrotinas,  Up: Uma visão geral conceitual parte 1 o alto nível

9.1.1.1 Laço de eventos
.......................

Tudo em ‘asyncio’ acontece em relação ao laço de eventos.  Ele é a
estrela do show.  É como um maestro de orquestra.  Está nos bastidores,
gerenciando recursos.  Algum poder lhe é explicitamente concedido, mas
grande parte de sua capacidade de realizar tarefas advém do respeito e
da cooperação de seus operários.

Em termos mais técnicos, o laço de eventos contém uma coleção de tarefas
a serem executadas.  Algumas tarefas são adicionadas diretamente por
você e outras indiretamente por ‘asyncio’.  O laço de eventos pega uma
tarefa do seu backlog de tarefas e a invoca (ou “dá a ela o controle”),
semelhante a chamar uma função, e então essa tarefa é executada.  Uma
vez pausada ou concluída, ela retorna o controle para o laço de eventos.
O laço de eventos então seleciona outra tarefa do seu pool e a invoca.
Você pode 'aproximadamente' pensar na coleção de tarefas como uma fila:
as tarefas são adicionadas e processadas uma de cada vez, geralmente
(mas nem sempre) em ordem.  Esse processo se repete indefinidamente, com
o laço de eventos em ciclos infinitos.  Se não houver mais tarefas
pendentes de execução, o laço de eventos é inteligente o suficiente para
descansar e evitar o desperdício desnecessário de ciclos de CPU, e
retornará quando houver mais trabalho a ser feito.

A execução eficaz depende do bom compartilhamento e da cooperação entre
as tarefas; uma tarefa gananciosa pode monopolizar o controle e deixar
as outras tarefas na miséria, tornando a abordagem geral do laço de
eventos inútil.

     import asyncio

     # Isso cria um laço de eventos e percorre indefinidamente
     # sua coleção de trabalhos
     event_loop = asyncio.new_event_loop()
     event_loop.run_forever()


File: python.info,  Node: Funções assíncronas e corrotinas,  Next: Tarefas<2>,  Prev: Laço de eventos<2>,  Up: Uma visão geral conceitual parte 1 o alto nível

9.1.1.2 Funções assíncronas e corrotinas
........................................

Esta é uma função básica e chata do Python:

     def hello_printer():
         print(
             "Olá, sou uma impressora humilde e simples, embora tenha tudo "
             "que preciso na vida: -- \npapel novo e meu querido e amado "
             "parceiro no crime, o polvo."
         )

Chamar uma função regular invoca sua lógica ou corpo:

     >>> hello_printer()
     Olá, sou uma impressora humilde e simples, embora tenha tudo o que preciso na vida:
     papel novo e meu querido e amado parceiro no crime, o polvo.

O *note async def: 5d1, em oposição a um simples ‘def’, torna esta uma
função assíncrona (ou “função de corrotina”).  Chamá-la cria e retorna
um objeto *note corrotina: 3476.

     async def loudmouth_penguin(magic_number: int):
         print(
          "Eu sou um pinguim falante superespecial. Muito mais legal que aquela impressora. "
          f"Aliás, meu número da sorte é: {magic_number}."
         )

Chamar a função assíncrona, ‘loudmouth_penguin’, não executa a instrução
de impressão; em vez disso, cria um objeto corrotina:

     >>> loudmouth_penguin(magic_number=3)
     <coroutine object loudmouth_penguin at 0x104ed2740>

Os termos “função de corrotina” e “objeto corrotina” são frequentemente
confundidos com corrotina.  Isso pode ser confuso!  Neste artigo,
corrotina se refere especificamente a um objeto corrotina, ou mais
precisamente, a uma instância de *note types.CoroutineType: eb8.
(corrotina nativa).  Observe que corrotinas também podem existir como
instâncias de *note collections.abc.Coroutine: e07. — uma distinção
importante para a verificação de tipos.

Uma corrotina representa o corpo ou a lógica da função.  Uma corrotina
precisa ser iniciada explicitamente; novamente, a mera criação da
corrotina não a inicia.  Notavelmente, a corrotina pode ser pausada e
retomada em vários pontos do corpo da função.  Essa capacidade de pausar
e retomar é o que permite o comportamento assíncrono!

Corrotinas e funções de corrotina foram criadas aproveitando a
funcionalidade de *note geradores: bf9. e *note funções geradoras: 109a.
Lembre-se: uma função geradora é uma função que executa *note yield:
9d5, como esta:

     def get_random_number():
         # Este seria um gerador de número aleatório ruim!
         print("Oi")
         yield 1
         print("Olá")
         yield 7
         print("E aí")
         yield 4
         ...

Semelhante a uma função de corrotina, chamar uma função geradora não a
executa.  Em vez disso, ela cria um objeto gerador:

     >>> get_random_number()
     <generator object get_random_number at 0x1048671c0>

Você pode prosseguir para o próximo ‘yield’ de um gerador usando a
função embutida *note next(): 7d9.  Em outras palavras, o gerador é
executado e, em seguida, pausado.  Por exemplo:

     >>> generator = get_random_number()
     >>> next(generator)
     Oi
     1
     >>> next(generator)
     Olá
     7


File: python.info,  Node: Tarefas<2>,  Next: await,  Prev: Funções assíncronas e corrotinas,  Up: Uma visão geral conceitual parte 1 o alto nível

9.1.1.3 Tarefas
...............

Em termos gerais, *note tarefas: 34a8. são corrotinas (não funções de
corrotina) vinculadas a um laço de eventos.  Uma tarefa também mantém
uma lista de funções de retorno de chamada cuja importância ficará clara
em breve, quando discutirmos *note await: 1b9.  A maneira recomendada de
criar tarefas é via *note asyncio.create_task(): 1bf.

A criação de uma tarefa a agenda automaticamente para execução
(adicionando um retorno de chamada para executá-la na lista de tarefas
do laço de eventos, ou seja, coleção de tarefas).

‘asyncio’ associa automaticamente as tarefas ao laço de eventos.  Essa
associação automática foi propositalmente incorporada ao ‘asyncio’ para
simplificar o processo.  Sem ela, você teria que controlar o objeto laço
de eventos e passá-lo para qualquer função de corrotina que queira criar
tarefas, adicionando código redundante ao seu projeto.

     coroutine = loudmouth_penguin(magic_number=5)
     # Isso cria um objeto Task e agenda sua execução por meio do laço de eventos.
     task = asyncio.create_task(coroutine)

Anteriormente, criamos manualmente o laço de eventos e o configuramos
para ser executado indefinidamente.  Na prática, é recomendado (e comum)
usar *note asyncio.run(): 47c, que gerencia o laço de eventos e garante
que a corrotina fornecida termine antes de avançar.  Por exemplo, muitos
programas assíncronos seguem esta configuração:

     import asyncio

     async def main():
         # Faz todo tipo de coisas malucas, selvagens e assíncronas...
         ...

     if __name__ == "__main__":
         asyncio.run(main())
         # O programa não alcançará a seguinte instrução de exibição
         # até que o main() da corrotina seja finalizado.
         print("main() da corrotina concluiu!")

É importante estar ciente de que a tarefa em si não é adicionada ao laço
de eventos, apenas um retorno de chamada para a tarefa.  Isso é
importante se o objeto de tarefa que você criou for coletado como lixo
antes de ser chamado pelo laço de eventos.  Por exemplo, considere este
programa:

     async def hello():
         print("hello!")

     async def main():
         asyncio.create_task(hello())
         # Outras instruções assíncronas que são executadas por
         # um tempo e cedem o controle ao laço de eventos...
         ...

     asyncio.run(main())

Como não há referência ao objeto tarefa criado na linha 5, ele 'pode'
ser coletado como lixo antes que o laço de eventos o invoque.
Instruções posteriores na corrotina ‘main()’ transferem o controle de
volta para o laço de eventos para que ele possa invocar outras tarefas.
Quando o laço de eventos eventualmente tenta executar a tarefa, pode
falhar e descobrir que o objeto task não existe!  Isso também pode
acontecer mesmo que uma corrotina mantenha uma referência a uma tarefa,
mas seja concluída antes que ela termine.  Quando a corrotina termina,
as variáveis locais saem do escopo e podem estar sujeitas à coleta de
lixo.  Na prática, ‘asyncio’ e o coletor de lixo do Python trabalham
arduamente para garantir que esse tipo de coisa não aconteça.  Mas isso
não é motivo para ser imprudente!


File: python.info,  Node: await,  Prev: Tarefas<2>,  Up: Uma visão geral conceitual parte 1 o alto nível

9.1.1.4 await
.............

*note await: 1b9. é uma palavra reservada do Python comumente usada de
duas maneiras diferentes:

     await task
     await coroutine

De maneira crucial, o comportamento de ‘await’ depende do tipo de objeto
que está sendo aguardado.

Aguardar uma tarefa cederá o controle da tarefa ou corrotina atual para
o laço de eventos.  No processo de cessão de controle, algumas coisas
importantes acontecem.  Usaremos o seguinte exemplo de código para
ilustrar:

     async def plant_a_tree():
         dig_the_hole_task = asyncio.create_task(dig_the_hole())
         await dig_the_hole_task

         # Outras instruções associadas com plantar uma árvore.
         ...

Neste exemplo, imagine que o laço de eventos passou o controle para o
início da corrotina ‘plant_a_tree()’.  Como visto acima, a corrotina
cria uma tarefa e a aguarda.  A instrução ‘await dig_the_hole_task’
adiciona um retorno de chamada (que retomará ‘plant_a_tree()’) à lista
de retornos de chamada do objeto ‘dig_the_hole_task’.  E então, a
instrução cede o controle para o laço de eventos.  Algum tempo depois, o
laço de eventos passará o controle para ‘dig_the_hole_task’ e a tarefa
concluirá o que for necessário.  Assim que a tarefa for concluída, ela
adicionará seus vários retornos de chamada ao laço de eventos, neste
caso, uma chamada para retomar ‘plant_a_tree()’.

De modo geral, quando a tarefa aguardada termina (‘dig_the_hole_task’),
a tarefa original ou corrotina (‘plant_a_tree()’) é adicionada novamente
à lista de tarefas do laço de eventos para ser retomada.

Este é um modelo mental básico, porém confiável.  Na prática, as
transferências de controle são um pouco mais complexas, mas não muito.
Na parte 2, abordaremos os detalhes que tornam isso possível.

'Ao contrário de tarefas, aguardar uma corrotina não devolve o controle
ao laço de eventos!'  Envolver uma corrotina em uma tarefa primeiro e
depois aguardar isso cederia o controle.  O comportamento de ‘await
coroutine’ é efetivamente o mesmo que invocar uma função Python síncrona
comum.  Considere este programa:

     import asyncio

     async def coro_a():
        print("Sou coro_a(). Oi!")

     async def coro_b():
        print("Sou coro_b(). Espero que ninguém monopolize o laço de eventos...")

     async def main():
        task_b = asyncio.create_task(coro_b())
        num_repeats = 3
        for _ in range(num_repeats):
           await coro_a()
        await task_b

     asyncio.run(main())

A primeira instrução na corrotina ‘main()’ cria ‘task_b’ e a agenda para
execução via laço de eventos.  Em seguida, ‘coro_a()’ é aguardado
repetidamente.  O controle nunca cede ao laço de eventos, e é por isso
que vemos a saída de todas as três invocações de ‘coro_a()’ antes da
saída de ‘coro_b()’:

     Sou coro_a(). Oi!
     Sou coro_a(). Oi!
     Sou coro_a(). Oi!
     Sou coro_b(). Espero que ninguém monopolize o laço de eventos...

Se alterarmos ‘await coro_a()’ para ‘await
asyncio.create_task(coro_a())’, o comportamento muda.  A corrotina
‘main()’ cede o controle ao laço de eventos com essa instrução.  O laço
de eventos então prossegue com seu backlog de trabalho, chamando
‘task_b’ e, em seguida, a tarefa que encerra ‘coro_a()’ antes de retomar
a corrotina ‘main()’.

     Sou coro_b(). Espero que ninguém monopolize o laço de eventos...
     Sou coro_a(). Oi!
     Sou coro_a(). Oi!
     Sou coro_a(). Oi!

Esse comportamento de ‘await coroutine’ pode confundir muita gente!
Este exemplo destaca como usar apenas ‘await coroutine’ pode,
involuntariamente, monopolizar o controle de outras tarefas e
efetivamente paralisar o laço de eventos.  *note asyncio.run(): 47c.
pode ajudar a detectar tais ocorrências por meio do sinalizador
‘debug=True’, que habilita o *note modo de depuração: 1ed3.  Entre
outras coisas, ele registrará quaisquer corrotinas que monopolizem a
execução por 100 ms ou mais.

O design intencionalmente troca alguma clareza conceitual em torno do
uso de ‘await’ por melhor desempenho.  Cada vez que uma tarefa é
aguardada, o controle precisa ser passado por toda a pilha de chamadas
até o laço de eventos.  Isso pode parecer insignificante, mas em um
programa grande com muitas instruções ‘await’ e uma pilha de chamadas
extensa, essa sobrecarga pode representar um significativo prejuízo ao
desempenho.


File: python.info,  Node: Uma visão geral conceitual parte 2 os detalhes,  Prev: Uma visão geral conceitual parte 1 o alto nível,  Up: Uma visão geral conceitual de asyncio

9.1.2 Uma visão geral conceitual, parte 2: os detalhes
------------------------------------------------------

A parte 2 detalha os mecanismos que ‘asyncio’ usa para gerenciar o fluxo
de controle.  É aqui que a mágica acontece.  Você sairá desta seção
sabendo o que ‘await’ faz nos bastidores e como criar seus próprios
operadores assíncronos.

* Menu:

* O funcionamento interno das corrotinas::
* Futuros: Futuros<2>.
* Um asyncio.sleep caseiro: Um asyncio sleep caseiro.


File: python.info,  Node: O funcionamento interno das corrotinas,  Next: Futuros<2>,  Up: Uma visão geral conceitual parte 2 os detalhes

9.1.2.1 O funcionamento interno das corrotinas
..............................................

‘asyncio’ utiliza quatro componentes para passar o controle.

*note coroutine.send(arg): 215a. é o método usado para iniciar ou
retomar uma corrotina.  Se a corrotina foi pausada e agora está sendo
retomada, o argumento ‘arg’ será enviado como valor de retorno da
instrução ‘yield’ que a pausou originalmente.  Se a corrotina estiver
sendo usada pela primeira vez (em vez de ser retomada), ‘arg’ deve ser
‘None’.

     class Rock:
         def __await__(self):
             value_sent_in = yield 7
             print(f"Rock.__await__ resumindo com o valor: {value_sent_in}.")
             return value_sent_in

     async def main():
         print("Iniciando main() da corrotina.")
         rock = Rock()
         print("Aguardando rock...")
         value_from_rock = await rock
         print(f"Corrotina recebeu valor: {value_from_rock} de rock.")
         return 23

     coroutine = main()
     intermediate_result = coroutine.send(None)
     print(f"Corrotina pausou e retornou o valor intermediário: {intermediate_result}.")

     print(f"Resumindo corrotina e enviando o valor: 42.")
     try:
         coroutine.send(42)
     except StopIteration as e:
         returned_value = e.value
     print(f"O main() da corrotina finalizou e forneceu o valor: {returned_value}.")

*note yield: 21cc, como de costume, pausa a execução e retorna o
controle ao chamador.  No exemplo acima, ‘yield’, na linha 3, é chamado
por ‘... = await rock’ na linha 11.  Em termos mais gerais, ‘await’
chama o método *note __await__(): d9d. do objeto fornecido.  ‘await’
também faz algo muito especial: ele propaga (ou “repassa”) quaisquer
‘yield’s que recebe na cadeia de chamadas.  Neste caso, voltamos a ‘...
= coroutine.send(None)’ na linha 16.

A corrotina é retomada por meio da chamada ‘coroutine.send(42)’ na linha
21.  A corrotina continua de onde foi executada (ou pausada) com ‘yield’
na linha 3 e executa as instruções restantes em seu corpo.  Quando uma
corrotina termina, ela levanta uma exceção *note StopIteration: c15. com
o valor de retorno anexado ao atributo *note value: 2157.

Esse trecho de código produz esta saída:

     Iniciando main() da corrotina.
     Aguardando rock...
     Corrotina pausou e retornou o valor intermediário: 7.
     Resumindo coroutine e enviando o valor: 42.
     Rock.__await__ resumindo com o valor: 42.
     Corrotina recebeu valor: 42 de rock.
     O main() da corrotina finalizou e forneceu o valor: 23.

Vale a pena parar um momento aqui e certificar-se de que você seguiu as
diversas maneiras pelas quais o fluxo de controle e os valores foram
passados.  Muitas ideias importantes foram abordadas e vale a pena
garantir que seu entendimento esteja firme.

A única maneira de ceder (ou efetivamente ceder o controle) de uma
corrotina é ‘await’ um objeto que ‘yield’ está em seu método
‘__await__’.  Isso pode parecer estranho para você.  Você pode estar
pensando:

     1.  What about a ‘yield’ directly within the coroutine function?
     The coroutine function becomes an *note async generator function:
     21d0, a different beast entirely.

     2.  What about a *note yield from: 21cc. within the coroutine
     function to a (plain) generator?  That causes the error:
     ‘SyntaxError: yield from not allowed in a coroutine.’ This was
     intentionally designed for the sake of simplicity – mandating only
     one way of using coroutines.  Initially ‘yield’ was barred as well,
     but was re-accepted to allow for async generators.  Despite that,
     ‘yield from’ and ‘await’ effectively do the same thing.


File: python.info,  Node: Futuros<2>,  Next: Um asyncio sleep caseiro,  Prev: O funcionamento interno das corrotinas,  Up: Uma visão geral conceitual parte 2 os detalhes

9.1.2.2 Futuros
...............

Um *note future: 357c. é um objeto que representa o status e o resultado
de uma computação.  O termo é uma referência à ideia de algo que ainda
está por vir ou que ainda não aconteceu, e o objeto é uma forma de ficar
de olho nesse algo.

Um future possui alguns atributos importantes.  Um deles é o seu estado,
que pode ser “pending”, “cancelled”, or “done” (“pendente”, “cancelado”
ou “concluído”, respectivamente).  Outro é o seu resultado, que é
definido quando o estado transita para concluído.  Ao contrário de uma
corrotina, um future não representa a computação real a ser realizada;
em vez disso, representa o status e o resultado dessa computação, como
uma espécie de luz de status (vermelha, amarela ou verde) ou indicador.

*note asyncio.Task: 1be. estende *note asyncio.Future: be6. para obter
esses vários recursos.  A seção anterior dizia que as tarefas armazenam
uma lista de retornos de chamada, o que não era totalmente preciso.  Na
verdade, é a classe ‘Future’ que implementa essa lógica, que ‘Task’
herda.

Instruções future também podem ser usados diretamente (não por meio de
tarefas).  As tarefas se marcam como concluídas quando sua corrotina é
concluída.  Instruções future são muito mais versáteis e serão marcados
como concluídos quando você informar.  Dessa forma, eles são a interface
flexível para você definir suas próprias condições de espera e retomada.


File: python.info,  Node: Um asyncio sleep caseiro,  Prev: Futuros<2>,  Up: Uma visão geral conceitual parte 2 os detalhes

9.1.2.3 Um asyncio.sleep caseiro
................................

Veremos um exemplo de como você pode aproveitar um future para criar sua
própria variante de suspensão assíncrona (‘async_sleep’) que imita *note
asyncio.sleep(): a79.

Este trecho de código registra algumas tarefas no laço de eventos e, em
seguida, aguarda a tarefa criada por ‘asyncio.create_task’, que envolve
a corrotina ‘async_sleep(3)’.  Queremos que essa tarefa termine somente
após três segundos, mas sem impedir a execução de outras tarefas.

     async def other_work():
         print("Eu gosto de trabalhar. Trabalhar, trabalhar.")

     async def main():
         # Adiciona algumas tarefas ao laço de eventos, de forma que
         # haja algo para fazer durante a suspensão assíncrona.
         work_tasks = [
             asyncio.create_task(other_work()),
             asyncio.create_task(other_work()),
             asyncio.create_task(other_work())
         ]
         print(
             "Começando a suspensão assíncrona no horário: "
             f"{datetime.datetime.now().strftime("%H:%M:%S")}."
         )
         await asyncio.create_task(async_sleep(3))
         print(
             "Concluí a suspensão assíncrona no horário: "
             f"{datetime.datetime.now().strftime("%H:%M:%S")}."
         )
         # asyncio.gather efetivamente espera cada tarefa na coleção.
         await asyncio.gather(*work_tasks)

A seguir, usamos um future para permitir o controle personalizado sobre
quando essa tarefa será marcada como concluída.  Se *note
future.set_result(): 34ab. (o método responsável por marcar o future
como concluído) nunca for chamado, essa tarefa nunca terminará.  Também
contamos com a ajuda de outra tarefa, que veremos em breve, que
monitorará o tempo decorrido e, consequentemente, chamará
‘future.set_result()’.

     async def async_sleep(seconds: float):
         future = asyncio.Future()
         time_to_wake = time.time() + seconds
         # Adiciona uma tarefa de monitoramento ao laço de eventos.
         watcher_task = asyncio.create_task(_sleep_watcher(future, time_to_wake))
         # Bloqueia até future ser marcado como concluído.
         await future

A seguir, usamos um objeto ‘YieldToEventLoop()’ bastante simples para
‘yield’ do seu método ‘__await__’, cedendo o controle ao laço de
eventos.  Isso é efetivamente o mesmo que chamar ‘asyncio.sleep(0)’, mas
essa abordagem oferece mais clareza, sem mencionar que é um tanto quanto
trapaça usar ‘asyncio.sleep’ ao demonstrar como implementá-lo!

Como de costume, o laço de eventos percorre suas tarefas,
concedendo-lhes o controle e recebendo-o de volta quando elas pausam ou
terminam.  A tarefa ‘watcher_task’, que executa a corrotina
‘_sleep_watcher(...)’, será invocada uma vez por ciclo completo do laço
de eventos.  A cada retomada, ela verificará o tempo e, se não tiver
decorrido tempo suficiente, pausará novamente e devolverá o controle ao
laço de eventos.  Assim que o tempo suficiente tiver decorrido,
‘_sleep_watcher(...)’ marcará o futuro como concluído e finalizará,
saindo de seu laço ‘while’ infinito.  Dado que essa tarefa auxiliar é
invocada apenas uma vez por ciclo do laço de eventos, você está correto
ao observar que essa suspensão assíncrona durará 'pelo menos' três
segundos, em vez de exatamente três segundos.  Observe que isso também
se aplica a ‘asyncio.sleep’.

     class YieldToEventLoop:
         def __await__(self):
             yield

     async def _sleep_watcher(future, time_to_wake):
         while True:
             if time.time() >= time_to_wake:
                 # Isso marca future como concluído.
                 future.set_result(None)
                 break
             else:
                 await YieldToEventLoop()

Aqui está a saída completa do programa:

     $ python custom-async-sleep.py
     Começando a suspensão assíncrona no horário: 14:52:22.
     Eu gosto de trabalhar. Trabalhar, trabalhar.
     Eu gosto de trabalhar. Trabalhar, trabalhar.
     Eu gosto de trabalhar. Trabalhar, trabalhar.
     Concluí a suspensão assíncrona no horário: 14:52:25.

Você pode achar que esta implementação de suspensão assíncrona foi
desnecessariamente complexa.  E, bem, foi mesmo.  O exemplo tinha como
objetivo demonstrar a versatilidade dos futures com um exemplo simples
que poderia ser replicado para necessidades mais complexas.  Para
referência, você poderia implementá-lo sem futures, assim:

     async def simpler_async_sleep(seconds):
         time_to_wake = time.time() + seconds
         while True:
             if time.time() >= time_to_wake:
                 return
             else:
                 await YieldToEventLoop()

Mas por agora é tudo.  Espero que agora esteja pronto para mergulhar com
mais confiança na programação assíncrona ou consultar tópicos avançados
no *note restante da documentação: a.


File: python.info,  Node: Portando módulos de extensão para o Python 3,  Next: Programação em Curses com Python,  Prev: Uma visão geral conceitual de asyncio,  Up: Python HOWTOs

9.2 Portando módulos de extensão para o Python 3
================================================

Recomendamos os seguintes recursos para portar módulos de extensão para
o Python 3:

   * O capítulo Migrating C extensions(1) de 'Supporting Python 3: An
     in-depth guide', um livro sobre a migração do Python 2 para o
     Python 3 em geral, orienta o leitor na portabilidade de um módulo
     de extensão.

   * O Porting guide(2) do projeto 'py3c' fornece sugestões opinativas
     com código de suporte.

   * *note Ferramentas recomendadas de terceiros: 4b37. oferecem
     abstrações sobre a API C do Python.  As extensões geralmente
     precisam ser reescritas para usar uma delas, mas a biblioteca lida
     com diferenças entre várias versões e implementações do Python.

   ---------- Footnotes ----------

   (1) http://python3porting.com/cextensions.html

   (2) https://py3c.readthedocs.io/en/latest/guide.html


File: python.info,  Node: Programação em Curses com Python,  Next: Guia de descritores,  Prev: Portando módulos de extensão para o Python 3,  Up: Python HOWTOs

9.3 Programação em Curses com Python
====================================


Autor: A.M. Kuchling, Eric S. Raymond


Versão: 2.04

Resumo
......

Este documento descreve como usar o módulo de extensão *note curses: 2b.
para controlar visualizações em modo texto.

* Menu:

* O que é curses?::
* Começando e terminando uma aplicação curses::
* Janelas e Pads::
* Exibindo texto::
* Entrada de usuário::
* Para mais informações::


File: python.info,  Node: O que é curses?,  Next: Começando e terminando uma aplicação curses,  Up: Programação em Curses com Python

9.3.1 O que é curses?
---------------------

A biblioteca curses fornece formas que facilitam a impressão no terminal
e o tratamento de entrada via teclado para interfaces de terminal
baseadas em texto, tais como VT100s, o console Linux, e emuladores de
terminais fornecidos por vários programas.  Terminais visuais suportam
vários códigos de controle para executar várias operações comuns como
mover o cursor, apagar áreas e rolagem de tela.  Diferentes terminais
usam uma gama de diferentes códigos, e frequentemente têm suas próprias
peculiaridades.

No mundo dos displays gráficos, uma pergunta pode vir à tona “por que
isso, jovem?”.  É verdade que os terminais de exibição de caracteres são
uma tecnologia obsoleta, mas há nichos nos quais a capacidade de fazer
coisas sofisticadas com eles continua sendo valorizada.  Um nicho são os
Unixes de baixa pegada de recursos ou embarcados, que não rodam um
servidor X, ou seja, não possuem interface gráfica.  Outro nicho é o de
ferramentas como instaladores de sistemas operacionais e configurações
de kernels que podem precisar rodar antes que qualquer suporte a
interfaces gráficas esteja disponível.

A biblioteca curses fornece funcionalidades bastante básicas,
proporcionando ao programador uma abstração de um monitor contendo
janelas de texto não sobrepostas.  Os conteúdos de uma janela podem ser
modificados de diversas formas—adicionando texto, apagando-o,
modificando sua aparência—e a biblioteca curses irá descobrir quais
códigos de controle precisam ser enviados ao terminal para produzir a
saída correta.  A biblioteca curses não fornece muitos conceitos de
interface de usuário como botões, caixas de seleção ou diálogos; se você
precisar desses recursos, considere uma biblioteca de interface de
usuário como Urwid(1).

A biblioteca curses foi originalmente escrita para o BSD Unix; as
versões mais recentes do System V do Unix da AT&T adicionaram muitos
aprimoramentos e novas funções.  A BSD curses não é mais mantida, tendo
sido substituída pela ncursess, que é uma implementação de código aberto
da interface da AT&T. Se você estiver usando um sistema operacional de
código aberto baseado em Unix, tal como Linux ou FreeBSD, seu sistema
provavelmente usa ncurses.  Uma vez que a maioria das versões comerciais
do Unix são baseadas no código do System V, todas as funções descritas
aqui provavelmente estarão disponíveis.  No entanto, as versões antigas
de curses carregadas por alguns Unixes proprietários podem não prover
tudo.

A versão do Python para Windows não inclui o módulo *note curses: 2b.
Uma versão portada chamada UniCurses(2) está disponível.

* Menu:

* O módulo curses de Python::

   ---------- Footnotes ----------

   (1) https://pypi.org/project/Urwid/

   (2) https://pypi.org/project/UniCurses/


File: python.info,  Node: O módulo curses de Python,  Up: O que é curses?

9.3.1.1 O módulo curses de Python
.................................

O módulo Python é um invólucro razoavelmente simples sobre as funções C
disponibilizadas pela curses; Se você já estiver familiarizado com
programação curses em C, é bem fácil transmitir esse conhecimento para o
Python.  A maior diferença é que a interface Python simplifica as coisas
ao juntar diferentes funções C como ‘addstr()’, ‘mvaddstr()’ e
‘mvwaddstr()’ em um único método *note addstr(): 3153.  Veremos isso
mais adiante.

Este documento é uma introdução à escrita de programas em modo texto com
curses e Python.  Isto não pretende ser um guia completo da API curses;
para isso, veja a seção ncurses no guia da biblioteca Python, e o manual
de ncurses.  Isto, no entanto, lhe dará uma ideia básica.


File: python.info,  Node: Começando e terminando uma aplicação curses,  Next: Janelas e Pads,  Prev: O que é curses?,  Up: Programação em Curses com Python

9.3.2 Começando e terminando uma aplicação curses
-------------------------------------------------

Antes de qualquer coisas, a curses precisa ser inicializada.  Para isso,
chame a função *note initscr(): 1689, que vai determinar o tipo do
terminal, enviar para ele quaisquer códigos de inicialização
necessários, e criar várias estruturas de dados internas.  Se
bem-sucedida, a ‘initscr()’ retorna um objeto de janela representando a
tela inteira; ele é comumente chamado ‘stdscr’ por causa da variável C
correspondente.

     import curses
     stdscr = curses.initscr()

Geralmente aplicações curses desativam o envio automático de teclas para
a tela, para que seja possível ler teclas e exibi-las somente sob certas
circunstâncias.  Isto requer a chamada da função *note noecho(): 317c.

     curses.noecho()

Aplicações também irão comumente precisar reagir a teclas
instantaneamente, sem requisitar que a tecla Enter seja pressionada;
isto é chamado de modo cbreak, ao contrário do modo de entrada
buferizada usual.

     curses.cbreak()

Terminais geralmente retornam teclas especiais, como as teclas de cursor
ou de navegação como Page Up e Home, como uma sequência de escape
mutibyte.  Enquanto você poderia escrever sua aplicação para esperar
essas sequências e processá-las de acordo, curses pode fazer isto para
você, retornando um valor especial como *note curses.KEY_LEFT: 31f5.
Para permitir que curses faça esse trabalho, você precisará habilitar o
modo keypad.

     stdscr.keypad(True)

Finalizar uma aplicação curses é mais fácil do que iniciar uma.  Você
precisará executar:

     curses.nocbreak()
     stdscr.keypad(False)
     curses.echo()

para reverter as configurações de terminal usadas pela biblioteca
curses.  Então, chame a função *note endwin(): 3156. para restaurar o
terminal para seu modo de operação original.

     curses.endwin()

Um problema comum ao depurar uma aplicação curses é deixar seu terminal
bagunçado quando a aplicação para sem restaurar o terminal ao seu estado
anterior.  Em Python isto comumente acontece quando seu código está com
problemas e levanta uma exceção não capturada.  As teclas não são mais
enviadas para a tela quando você as digita, por exemplo, o que torna
difícil utilizar o shell.

No Python você pode evitar essas complicações e fazer depurações de
forma mais simples importando a função *note curses.wrapper(): a8a. e
utilizando-a desta forma:

     from curses import wrapper

     def main(stdscr):
         # Limpa a tela
         stdscr.clear()

         # Levanta ZeroDivisionError quando i == 10.
         for i in range(0, 11):
             v = i-10
             stdscr.addstr(i, 0, '10 dividido por {} é {}'.format(v, 10/v))

             stdscr.refresh()
             stdscr.getkey()

     wrapper(main)

A função *note wrapper(): a8a. leva um objeto chamável e faz as
inicializações descritas acima, inicializando também as cores se o
terminal as prover.  A ‘wrapper()’ então roda o chamável.  Quando ele
retornar, a ‘wrapper()’ vai restaurar o estado original do terminal.  O
chamável é chamado dentro de um bloco *note try: 6e9.…*note except: 18b.
que captura exceções, restaura o estado do terminal, e então as levanta
novamente.  Dessa forma, o seu terminal não vai ser deixado em nenhum
estado engraçadinho caso haja qualquer erro, e você poderá ler a
mensagem e o traceback da exceção.


File: python.info,  Node: Janelas e Pads,  Next: Exibindo texto,  Prev: Começando e terminando uma aplicação curses,  Up: Programação em Curses com Python

9.3.3 Janelas e Pads
--------------------

Janelas são a abstração mais básica em curses.  Uma objeto janela
representa uma área retangular da tela, e provê métodos para exibir
texto, apagá-lo, e permitir ao usuário inserir strings, e assim por
diante.

O objeto ‘stdscr’ retornado pela função *note initscr(): 1689. é um
objeto janela que cobre a tela inteira.  Muitos programas podem precisar
apenas desta janela única, mas você poderia desejar dividir a tela em
janelas menores, a fim de redefini-las ou limpá-las separadamente.  A
função *note newwin(): 317a. cria uma nova janela de um dado tamanho,
retornando o novo objeto janela.

     begin_x = 20; begin_y = 7
     height = 5; width = 40
     win = curses.newwin(height, width, begin_y, begin_x)

Note que o sistema de coordenadas utilizado na curses é incomum.
Coordenadas geralmente são passadas na ordem 'y,x', e o canto
superior-esquerdo da janela é a coordenada (0,0).  Isto quebra a
convenção normal para tratar coordenadas onde a coordenada 'x' vem
primeiro.  Isto é uma diferença infeliz da maioria das aplicações
computacionais, mas tem sido parte da curses desde que ela foi
inicialmente escrita, e agora é tarde demais para mudar isso.

Sua aplicação pode determinar o tamanho da tela usando as variáveis
*note curses.LINES: e17. e *note curses.COLS: e18. para obter os
tamanhos 'y' e 'x'.  Coordenadas válidas vão variar de ‘(0,0)’ até
‘(curses.LINES - 1, curses.COLS - 1)’.

Quando você chamar um método para exibir ou apagar texto, o efeito não é
exibido imediatamente na tela.  Em vez disso você deve chamar o método
*note refresh(): 3154. dos objetos janela para atualizar a tela.

Isso é porque a curses foi desenvolvida originalmente no contexto de
conexões lentas de até 300 Bauds com o terminal; para esses terminais,
minimizar o tempo necessário para redesenhar a tela era importantíssimo.
No lugar disso, a curses acumula mudanças na tela, e as exibe da forma
mais eficiente possível quando você chama ‘refresh()’.  Por exemplo, se
o seu programa mostra um texto em uma janela e então limpa a janela, não
tem porque enviar o texto original já que ele nunca seria visível.

Na prática, ficar pedindo ao curses explicitamente para redesenhar a
tela não torna a programação com ele tão complicada assim.  A maioria
dos programas faz uma enxurrada de atividades, e então pausa esperando
uma tecla digitada ou alguma outra ação por parte do usuário.  Tudo que
você deve fazer é garantir que a tela foi redesenhada antes de pausar
esperando pela entrada do usuário, chamando antes a ‘stdscr.refresh()’
ou o método ‘refresh()’ de alguma outra janela apropriada.

Um pad é um caso especial de janela; ele pode ser mais largo que a tela
atual, e apenas uma porção do pad exibido por vez.  Criar um pad requer
sua altura e largura, enquanto atualizar o pad requer dar as coordenadas
da área na tela onde uma subseção do pad será exibida.

     pad = curses.newpad(100, 100)
     # Estes laços preenchem o pad com letras; a addch()
     # é explicada na seção a seguir.
     for y in range(0, 99):
         for x in range(0, 99):
             pad.addch(y,x, ord('a') + (x*x+y*y) % 26)

     # Exibe um pedaço de um pad no meio da tela.
     # (0,0) : coordenada do canto superior esquerdo da área do pad a ser
     #         exibida.
     # (5,5) : coordenada do canto superior esquerdo da área da janela a ser
     #         preenchida com o conteúdo do pad.
     # (20, 75) : coordenada inferior direita da área da janela a ser
     #          : preenchida com o conteúdo do pad.
     pad.refresh( 0,0, 5,5, 20,75)

A chamada da ‘refresh()’ exibe um pedaço do pad no retângulo que vai da
coordenada (5,5) à coordenada (20,75) da tela; o canto superior esquerdo
do pedaço exibido corresponde à coordenada (0,0) do pad.  Fora essa
diferença, pads são exatamente como janelas comuns, e provêm os mesmos
métodos.

Se você tem múltiplas janelas e pads na tela, existe um modo mais
eficiente de atualizar a tela que evita as cintilações irritantes que
ocorrem à medida que cada parte da tela vai sendo atualizada.  O
‘refresh()’ na verdade faz duas coisas:

  1. Chama o método *note noutrefresh(): 3152. de cada janela para
     atualizar uma estrutura de dados subjacente representando o estado
     desejado da tela.

  2. Chama a função *note doupdate(): 3151. para modificar a tela física
     para corresponder com o estado desejado presente na estrutura de
     dados.

Em vez disso você pode chamar ‘noutrefresh()’ em várias janelas para
atualizar a estrutura de dados, e então chamar ‘doupdate()’ para
atualizar a tela.


File: python.info,  Node: Exibindo texto,  Next: Entrada de usuário,  Prev: Janelas e Pads,  Up: Programação em Curses com Python

9.3.4 Exibindo texto
--------------------

Do ponto de vista de um programador C, a curses à vezes pode parecer
como um labirinto sinuoso de funções, todas ligeiramente diferentes.
Por exemplo, ‘addstr()’ exibe uma string na posição atual do cursor na
janela ‘stdscr’, enquanto ‘mvaddstr()’ primeiro move o cursor para uma
dada coordenada y,x antes de exibir a string.  A ‘waddstr()’ é como a
‘addstr()’, mas permite especificar uma janela para utilizar em vez de
usar a ‘stdscr’ por padrão.  A ‘mvwaddstr()’ permite especificar tanto
uma janela quanto uma coordenada.

Felizmente, a interface do Python oculta todos estes detalhes.  ‘stdscr’
é um objeto de janela como qualquer outro, e métodos como *note
addstr(): 3153. aceitam múltiplas formas de argumentos.

Forma                                 Descrição
                                      
------------------------------------------------------------------------------------------
                                      
'str' ou 'ch'                         Mostra a string 'str' ou caractere 'ch' na
                                      posição atual.
                                      
                                      
'str' ou 'ch', 'attr'                 Mostra a string 'str' ou caractere 'ch', usando o
                                      atributo 'attr' na posição atual.
                                      
                                      
'y', 'x', 'str' ou 'ch'               Move para a posição 'y,x' dentro da janela, e
                                      exibe 'str' ou 'ch'
                                      
                                      
'y', 'x', 'str' ou 'ch', 'attr'       Mover para a posição 'y,x' dentro da janela, e
                                      exibir 'str' ou 'ch', usando o atributo 'attr'
                                      

Atributos permitem exibir texto de formas destacadas como negrito,
sublinhado, código invertido, ou colorido.  Elas serão explicadas em
mais detalhes na próxima subseção.

O método *note addstr(): 3153. recebe uma string ou bytestring Python
como valor a ser exibido.  os conteúdos de bytestrings são enviados ao
terminal tais como estão.  Strings são codificadas em bytes usando o
valor do atributo *note encoding: 10d5. da janela; o valor padrão usado
é a codificação padrão do sistema como retornado por *note
locale.getencoding(): 2dc.

Os métodos *note addch(): 3195. pegam um caractere, que pode ser tanto
uma string de comprimento 1, um bytestring de comprimento 1, ou um
inteiro.

Constantes são providas para caracteres de extensão; estas constantes
são inteiros maiores que 255.  Por exemplo, *note ACS_PLMINUS: 3262. é
um símbolo de +/-, e *note ACS_ULCORNER: 319f. é o canto superior
esquerdo de uma caixa (útil para desenhar bordas).  Você pode usar o
caractere Unicode apropriado.

Janelas lembram onde o cursor estava após a última operação, então se
você omitir as coordenadas 'y,x', a string ou caractere serão exibidos
onde quer que a última operação foi deixada.  Você também pode mover o
cursos com o método ‘move(y,x)’.  Porque alguns terminais sempre exibem
um cursos piscando, você pode querer garantir que o cursor está
posicionado em algum local onde ele não será uma distração; pode ser
confuso ter o cursor piscando em um local aparentemente aleatório.

Se sua aplicação não necessita de forma alguma de um cursor piscando,
você pode chamar ‘curs_set(False)’ para torná-lo invisível.  Para
compatibilidade com versões anteriores de curses, há a função
‘leaveok(bool)’ que é um sinônimo para *note curs_set(): 314b.  Quando
'bool' é verdadeiro, a biblioteca curses tentará suprimir o cursor
piscando, e você não precisará se preocupar ao deixá-lo em localizações
incomuns.

* Menu:

* Atributos e Cor::


File: python.info,  Node: Atributos e Cor,  Up: Exibindo texto

9.3.4.1 Atributos e Cor
.......................

Caracteres podem ser exibidos de diferentes formas.  Linhas de status em
aplicações baseadas em texto são tradicionalmente exibidas em vídeo
reverso, ou um visualizador de texto pode precisar destacar certas
palavras.  Para isso, a curses permite que você especifique um atributo
para cada célula na tela.

Um atributo é um inteiro em que cada bit representa um atributo
diferente.  Você sempre pode tentar exibir texto com múltiplos bits de
atributo ligados ao mesmo tempo, mas a curses não garante que todas as
combinações possíveis estarão disponíveis, ou que elas são todas
visualmente distintas.  Isso depende da habilidade do terminal sendo
usado, de forma que é mais seguro se ater aos atributos mais comumente
disponíveis, listados aqui.

Atributo                   Descrição
                           
----------------------------------------------------------------------
                           
*note A_BLINK: 31e1.       Texto piscante
                           
                           
*note A_BOLD: 31e2.        Texto em negrito ou brilho extra
                           
                           
*note A_DIM: 31e3.         Texto em brilho médio
                           
                           
*note A_REVERSE: 3149.     Texto em vídeo reverso
                           
                           
*note A_STANDOUT: 3148.    O modo mais destacado disponível
                           
                           
*note A_UNDERLINE: 31e7.   Texto sublinhado
                           

Assim, pra exibir uma linha de status em vídeo reverso na linha no topo
da tela, você poderia escrever:

     stdscr.addstr(0, 0, "Modo atual: Modo de digitação",
                   curses.A_REVERSE)
     stdscr.refresh()

A biblioteca curses também permite o uso de cores nos terminais que as
provêm.  Destes, o terminal mais comum é provavelmente o console Linux,
seguido pelos xterms com cores.

Para usar cores, você deve chamar a função *note start_color(): 3186.
logo depois de chamar *note initscr(): 1689, para inicializar a paleta
de cores padrão (a função *note curses.wrapper(): a8a. faz isso
automaticamente.)  Uma vez feito isso, a função *note has_colors():
3169. retorna True se o terminal em uso de fato suportar cores.  (Nota:
a curses usa a grafia Americana ‘color’ ao invés da grafia
Britânica/Canadense ‘colour.’ Se você estiver acostumado com a grafia
Britânica, você terá que se resignar a escrever com a grafia trocada ao
chamar essas funções.)

A biblioteca curses mantém uma quantidade finita de pares de cores,
contendo uma cor de primeiro plano (ou de texto) e uma de fundo.  Você
pode obter o valor do atributo correspondente a um par de cores com a
função *note color_pair(): 3147.; esse valor pode ser combinado com OU
(OR) bit a bit com outros atributos como *note A_REVERSE: 3149, mas,
novamente, não é garantido que tais combinações vão funcionar em todos
os terminais.

Um exemplo, exibindo uma linha de texto com o par de cores 1:

     stdscr.addstr("Texto colorido", curses.color_pair(1))
     stdscr.refresh()

Como dito anteriormente, um par de cores consiste de uma cor de primeiro
plano e uma cor de fundo.  A função ‘init_pair(n, f, b)’ muda a
definição do par de cores 'n' para a cor de primeiro plano 'f' e cor de
fundo 'b'.  O par 0 é pré-definido como branco sobre preto, e não pode
ser mudado.

As cores são numeradas, e a *note start_color(): 3186. inicializa 8
cores básicas ao ativar o modo colorido.  São elas: 0:preto, 1:vermelho,
2:verde, 3:amarelo, 4:azul, 5:magenta, 6:ciano e 7:branco.  O módulo
*note curses: 2b. define constantes nomeadas para cada uma dessas cores:
*note curses.COLOR_BLACK: 3274, *note curses.COLOR_RED: 3279, e assim
por diante.

Vamos juntar tudo isso.  Para redefinir a cor 1 como texto vermelho
sobre fundo branco, você chamaria:

     curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE)

Quando você redefine um par de cores, qualquer texto que já tenha sido
exibido usando esse par de cores vai mudar para a nova definição.  Você
pode também exibir mais texto nessa nova cor com:

     stdscr.addstr(0,0, "ALERTA VERMELHO!", curses.color_pair(1))

Terminais super sofisticados podem trocar as definições das cores em si
para um dado valor RGB. Isso permite que você troque a cor 1, que
geralmente é vermelha, para roxo ou azul ou qualquer outra cor que você
queira.  Infelizmente, o terminal Linux não provê essa funcionalidade,
de forma que eu não consigo testá-la para fornecer exemplos.  Você pode
verificar se o seu terminal tem esse recurso chamando a função *note
can_change_color(): 3144, que retorna ‘True’ se o recurso existir.  Se
por ventura o seu terminal for talentoso assim, consulte as páginas man
do seu sistema para mais informações.


File: python.info,  Node: Entrada de usuário,  Next: Para mais informações,  Prev: Exibindo texto,  Up: Programação em Curses com Python

9.3.5 Entrada de usuário
------------------------

A biblioteca curses em C oferece somente mecanismos de entrada muito
simples.  O módulo *note curses: 2b. do Python adiciona um componente
básico de entrada de texto.  (Outras bibliotecas como Urwid(1) têm
coleções mais extensas de componentes.)

Há dois métodos para capturar entrada de uma janela:

   * O *note getch(): 1627. atualiza a tela e então espera o usuário
     apertar alguma tecla, exibindo o valor dela caso *note echo():
     3155. tenha sido chamada anteriormente.  Opcionalmente, você pode
     especificar a coordenada onde o cursor deve ser posicionado antes
     de pausar.

   * O *note getkey(): 31b3. faz a mesma coisa, mas converte o inteiro
     para string.  Caracteres individuais são retorndos como strings de
     1 caractere, e teclas especiais como teclas funcionais retornam
     strings maiores contendo nomes de teclas como ‘KEY_UP’ ou ‘^G’.

É possível não esperar pelo usuário usando o método *note nodelay():
31c9. das janelas.  Após ‘nodelay(True)’, os métodos ‘getch()’ e
‘getkey()’ da janela viram não-bloqueantes.  Para sinalizar que não há
entrada disponível, o ‘getch()’ retorna ‘curses.ERR’ (com valor de -1) e
o ‘getkey()’ levanta uma exceção.  Também há uma função *note
halfdelay(): 316d, que pode ser usada para (efetivamente) definit um
temporizador em cada ‘getch()’; se nenhuma entrada estiver disponível
após um intervalo de espera especificado (medido em décimos de segundo),
a curses levanta uma exceção.

O método ‘getch()’ retorna um inteiro.  Se ele estiver entre 0 e 255,
ele representa o código ASCII da tecla digitada.  Valores maiores que
255 são teclas especiais como Page Up, Home, ou as teclas de seta.  Você
pode comparar o valor retornado com constantes como *note
curses.KEY_PPAGE: 3206, *note curses.KEY_HOME: 31f7. ou *note
curses.KEY_LEFT: 31f5.  O laço principal do seu programa pode ser algo
como:

     while True:
         c = stdscr.getch()
         if c == ord('p'):
             PrintDocument()
         elif c == ord('q'):
             break  # Interrompe o laço while
         elif c == curses.KEY_HOME:
             x = y = 0

O módulo *note curses.ascii: 2c. fornece funções de teste de
pertencimento que levam como argumento tanto inteiros quanto strings de
1 caractere; elas podem ser úteis para escrever testes mais legíveis
para tais laços.  Ele também fornece funções de conversão que levam como
argumento tanto inteiros quanto strings de 1 caractere, e retornam
objetos do mesmo tipo.  Por exemplo, *note curses.ascii.ctrl(): 32bc.
retorna o caractere de controle correspondente ao argumento.

Também há um método para pegar uma string inteira, *note getstr(): 31b6.
Ele não costuma ser usado porque a sua funcionalidade é um pouco
limitada: as únicas teclas de edição disponíveis são o Backspace e o
Enter, que termina a string.  Ele pode opcionalmente limitado a um
número fixo de caracteres.

     curses.echo()            # Abilita visualização dos caracteres

     # Lê uma string de 15 caracteres, com o cursor na linha do topo
     s = stdscr.getstr(0,0, 15)

O módulo *note curses.textpad: 2e. fornece uma caixa de texto que provê
um conjunto de atalhos de teclado estilo Emacs.  Vários métodos da
classe *note Textbox: 327d. provêm edição com validação de entrada e
recuperação dos resultados da edição com ou sem espaços em branco no
final.

     import curses
     from curses.textpad import Textbox, rectangle

     def main(stdscr):
         stdscr.addstr(
             0, 0,
             "Digite a mensagem instantânea: (aperte Ctrl-G para enviar)")

         editwin = curses.newwin(5,30, 2,1)
         rectangle(stdscr, 1,0, 1+5+1, 1+30+1)
         stdscr.refresh()

         box = Textbox(editwin)

         # Deixa o usuário editar até apertar Ctrl-G.
         box.edit()

         # Recupera o conteúdo resultante.
         message = box.gather()

Consulte a documentação de biblioteca do *note curses.textpad: 2e. para
mais detalhes.

   ---------- Footnotes ----------

   (1) https://pypi.org/project/Urwid/


File: python.info,  Node: Para mais informações,  Prev: Entrada de usuário,  Up: Programação em Curses com Python

9.3.6 Para mais informações
---------------------------

Este COMOFAZER não cobre alguns tópicos avançados, como ler o conteúdo
da tela ou capturar eventos de mouse de uma instância xterm, mas a
página de biblioteca Python para o módulo *note curses: 2b. está agora
razoavelmente completa.  Ela deve ser o seu próximo destino.

Se estiver em dúvida quanto aos detalhes do comportamento das funções
curses, consulte as páginas de manual para a sua implementação curses,
seja ela o ncurses ou de algum fornecedor Unix proprietário.  As páginas
de manual vão documentar quaisquer peculiaridades, e prover listas
completas de todas as funções, atributos e caracteres *note ACS_*: 324e.
disponíveis para você.

Devido à API da curses ser tão grande, algumas funções não são providas
pela interface Python.  Muitas vezes isso não é por dificuldade de
implementação, e sim porque ninguém precisou delas ainda.  Além disso, o
Python ainda não suporta a biblioteca de menus associada à ncurses.
Patches que adicionem suporte a essas funcionalidades seriam bem-vindos;
veja o Guia do Desenvolvedor do Python(1) para aprender melhor sobre
como submeter patches ao Python.

   * Writing Programs with NCURSES(2): um tutorial comprido para
     programadores C.

   * Página man do ncurses(3)

   * FAQ do ncurses(4)

   * "Use curses...  don't swear"(5): vídeo de uma palestra na PyCon
     2013 sobre controle de terminais usando curses ou Urwid.

   * "Console Applications with Urwid"(6): vídeo de uma palestra na
     PyCon CA 2012 demonstrando algumas aplicações escritas com Urwid.

   ---------- Footnotes ----------

   (1) https://devguide.python.org/

   (2) https://invisible-island.net/ncurses/ncurses-intro.html

   (3) https://linux.die.net/man/3/ncurses

   (4) https://invisible-island.net/ncurses/ncurses.faq.html

   (5) https://www.youtube.com/watch?v=eN1eZtjLEnU

   (6) https://pyvideo.org/video/1568/console-applications-with-urwid


File: python.info,  Node: Guia de descritores,  Next: Depurando extensões de API C e internos do CPython com GDB,  Prev: Programação em Curses com Python,  Up: Python HOWTOs

9.4 Guia de descritores
=======================


Autor: Raymond Hettinger


Contato: <python at rcn dot com>

*note Descritores: 1658. permitem que os objetos personalizem a
consulta, o armazenamento e a exclusão de atributos.

Este guia tem quatro seções principais:

  1. A “introdução” oferece uma visão geral básica, movendo-se
     suavemente a partir de exemplos simples, adicionando um recurso de
     cada vez.  Comece aqui se você for novo em descritores.

  2. A segunda seção mostra um exemplo de descritor prático completo.
     Se você já conhece o básico, comece por aí.

  3. A terceira seção fornece um tutorial mais técnico que aborda a
     mecânica detalhada de como os descritores funcionam.  A maioria das
     pessoas não precisa desse nível de detalhe.

  4. A última seção tem equivalentes puros de Python para descritores
     embutidos que são escritos em C. Leia isto se estiver curioso sobre
     como as funções se transformam em métodos vinculados ou sobre a
     implementação de ferramentas comuns como *note classmethod(): 166,
     *note staticmethod(): 416, *note property(): 194. e *note
     __slots__: 5df.

* Menu:

* Introdução: Introdução<14>.
* Exemplo completamente prático::
* Tutorial técnico::
* Equivalentes de Python puro::


File: python.info,  Node: Introdução<14>,  Next: Exemplo completamente prático,  Up: Guia de descritores

9.4.1 Introdução
----------------

Nesta introdução, começamos com o exemplo mais básico possível e, em
seguida, adicionaremos novos recursos um por um.

* Menu:

* Exemplo simples; um descritor que retorna uma constante: Exemplo simples um descritor que retorna uma constante.
* Pesquisas dinâmicas::
* Atributos gerenciados::
* Nomes personalizados::
* Pensamentos finais::


File: python.info,  Node: Exemplo simples um descritor que retorna uma constante,  Next: Pesquisas dinâmicas,  Up: Introdução<14>

9.4.1.1 Exemplo simples: um descritor que retorna uma constante
...............................................................

A classe ‘Ten’ é um descritor cujo método *note __get__(): 1530. sempre
retorna a constante ‘10’:

     class Ten:
         def __get__(self, obj, objtype=None):
             return 10

Para usar o descritor, ele deve ser armazenado como uma variável de
classe em outra classe:

     class A:
         x = 5                       # Atributo de classe comum
         y = Ten()                   # Instância de descritor

Uma sessão interativa mostra a diferença entre a pesquisa de atributo
normal e a pesquisa de descritor:

     >>> a = A()                     # Cria uma instância da classeA
     >>> a.x                         # Pesquisa de atributo normal
     5
     >>> a.y                         # Pesquisa de descritor
     10

Na pesquisa de atributo ‘a.x’, o operador ponto encontra ‘'x': 5’ no
dicionário de classe.  Na pesquisa ‘a.y’, o operador ponto encontra uma
instância de descritor, reconhecida por seu método ‘__get__’.  Chamar
esse método retorna ‘10’.

Observe que o valor ‘10’ não é armazenado no dicionário da classe ou no
dicionário da instância.  Em vez disso, o valor ‘10’ é calculado sob
demanda.

Este exemplo mostra como funciona um descritor simples, mas não é muito
útil.  Para recuperar constantes, a pesquisa de atributo normal seria
melhor.

Na próxima seção, criaremos algo mais útil, uma pesquisa dinâmica.


File: python.info,  Node: Pesquisas dinâmicas,  Next: Atributos gerenciados,  Prev: Exemplo simples um descritor que retorna uma constante,  Up: Introdução<14>

9.4.1.2 Pesquisas dinâmicas
...........................

Descritores interessantes normalmente executam cálculos em vez de
retornar constantes:

     import os

     class DirectorySize:

         def __get__(self, obj, objtype=None):
             return len(os.listdir(obj.dirname))

     class Directory:

         size = DirectorySize()              # Instância de descritor

         def __init__(self, dirname):
             self.dirname = dirname          # Atributo de instância regular

Uma sessão interativa mostra que a pesquisa é dinâmica – calcula
respostas diferentes e atualizadas a cada vez:

     >>> s = Directory('songs')
     >>> g = Directory('games')
     >>> s.size                              # O jogo de músicas tem vinte arquivos
     20
     >>> g.size                              # O diretório de jogos tem três arquivos
     3
     >>> os.remove('games/chess')            # Exclui um jogo
     >>> g.size                              # Contagem de arquivos é atualizada automaticamente
     2

Além de mostrar como os descritores podem executar cálculos, este
exemplo também revela o propósito dos parâmetros para *note __get__():
1530.  O parâmetro 'self' é 'size', uma instância de 'DirectorySize'.  O
parâmetro 'obj' é 'g' ou 's', uma instância de 'Directory'.  É o
parâmetro 'obj' que permite ao método *note __get__(): 1530. aprender o
diretório de destino.  O parâmetro 'objtype' é a classe 'Directory'.


File: python.info,  Node: Atributos gerenciados,  Next: Nomes personalizados,  Prev: Pesquisas dinâmicas,  Up: Introdução<14>

9.4.1.3 Atributos gerenciados
.............................

Um uso popular para descritores é gerenciar o acesso aos dados da
instância.  O descritor é atribuído a um atributo público no dicionário
da classe, enquanto os dados reais são armazenados como um atributo
privado no dicionário da instância.  Os métodos *note __get__(): 1530. e
*note __set__(): 20f7. do descritor são disparados quando o atributo
público é acessado.

No exemplo a seguir, 'age' é o atributo público e '_age' é o atributo
privado.  Quando o atributo público é acessado, o descritor registra a
pesquisa ou atualização:

     import logging

     logging.basicConfig(level=logging.INFO)

     class LoggedAgeAccess:

         def __get__(self, obj, objtype=None):
             value = obj._age
             logging.info('Accessing %r giving %r', 'age', value)
             return value

         def __set__(self, obj, value):
             logging.info('Updating %r to %r', 'age', value)
             obj._age = value

     class Person:

         age = LoggedAgeAccess()             # Instância de descritor

         def __init__(self, name, age):
             self.name = name                # Atributo de instância regular
             self.age = age                  # Chama __set__()

         def birthday(self):
             self.age += 1                   # Chama __get__() e __set__()

Uma sessão interativa mostra que todo o acesso ao atributo gerenciado
'age' é registrado, mas que o atributo regular 'name' não é registrado:

     >>> mary = Person('Mary M', 30)         # A atualização inicial de idade é registrada
     INFO:root:Updating 'age' to 30
     >>> dave = Person('David D', 40)
     INFO:root:Updating 'age' to 40

     >>> vars(mary)                          # Os dados estão em um atributo privado
     {'name': 'Mary M', '_age': 30}
     >>> vars(dave)
     {'name': 'David D', '_age': 40}

     >>> mary.age                            # Acessa os dados e registra a pesquisa
     INFO:root:Accessing 'age' giving 30
     30
     >>> mary.birthday()                     # Atualizações são registradas também
     INFO:root:Accessing 'age' giving 30
     INFO:root:Updating 'age' to 31

     >>> dave.name                           # Pesquisa de atributo regular não é registrada
     'David D'
     >>> dave.age                            # Apenas o atributo gerenciado é registrado
     INFO:root:Accessing 'age' giving 40
     40

Um grande problema com este exemplo é que o nome privado '_age' está
conectado na classe 'LoggedAgeAccess'.  Isso significa que cada
instância pode ter apenas um atributo registrado e que seu nome é
imutável.  No próximo exemplo, vamos corrigir esse problema.


File: python.info,  Node: Nomes personalizados,  Next: Pensamentos finais,  Prev: Atributos gerenciados,  Up: Introdução<14>

9.4.1.4 Nomes personalizados
............................

Quando uma classe usa descritores, ela pode informar a cada descritor
sobre qual nome de variável foi usado.

Neste exemplo, a classe ‘Person’ tem duas instâncias de descritor,
'name' e 'age'.  Quando a classe ‘Person’ é definida, ela faz uma função
de retorno para *note __set_name__(): c69. em 'LoggedAccess' para que os
nomes dos campos possam ser registrados, dando a cada descritor o seu
próprio 'public_name' e 'private_name':

     import logging

     logging.basicConfig(level=logging.INFO)

     class LoggedAccess:

         def __set_name__(self, owner, name):
             self.public_name = name
             self.private_name = '_' + name

         def __get__(self, obj, objtype=None):
             value = getattr(obj, self.private_name)
             logging.info('Accessing %r giving %r', self.public_name, value)
             return value

         def __set__(self, obj, value):
             logging.info('Updating %r to %r', self.public_name, value)
             setattr(obj, self.private_name, value)

     class Person:

         name = LoggedAccess()                # Primeira instância de descritor
         age = LoggedAccess()                 # Segunda instância de descritor

         def __init__(self, name, age):
             self.name = name                 # Chama o primeiro descritor
             self.age = age                   # Chama o segundo descritor

         def birthday(self):
             self.age += 1

Uma sessão interativa mostra que a classe ‘Person’ chamou *note
__set_name__(): c69. para que os nomes dos campos fossem registrados.
Aqui chamamos *note vars(): 1bba. para pesquisar o descritor sem
acioná-lo:

     >>> vars(vars(Person)['name'])
     {'public_name': 'name', 'private_name': '_name'}
     >>> vars(vars(Person)['age'])
     {'public_name': 'age', 'private_name': '_age'}

A nova classe agora registra acesso a 'name' e 'age':

     >>> pete = Person('Peter P', 10)
     INFO:root:Updating 'name' to 'Peter P'
     INFO:root:Updating 'age' to 10
     >>> kate = Person('Catherine C', 20)
     INFO:root:Updating 'name' to 'Catherine C'
     INFO:root:Updating 'age' to 20

As duas instâncias 'Person' contêm apenas os nomes privados:

     >>> vars(pete)
     {'_name': 'Peter P', '_age': 10}
     >>> vars(kate)
     {'_name': 'Catherine C', '_age': 20}


File: python.info,  Node: Pensamentos finais,  Prev: Nomes personalizados,  Up: Introdução<14>

9.4.1.5 Pensamentos finais
..........................

Um *note descritor: 1658. é o que chamamos de qualquer objeto que define
*note __get__(): 1530, *note __set__(): 20f7. ou *note __delete__():
16f5.

Opcionalmente, os descritores podem ter um método *note __set_name__():
c69.  Isso é usado somente em casos em que um descritor precisa saber a
classe onde foi criado ou o nome da variável de classe à qual foi
atribuído.  (Este método, se presente, é chamado mesmo se a classe não
for um descritor.)

Descritores são invocados pelo operador ponto durante a pesquisa de
atributos.  Se um descritor for acessado indiretamente com
‘vars(some_class)[descriptor_name]’, a instância do descritor é
retornada sem invocá-lo.

Descritores só funcionam quando usados como variáveis de classe.  Quando
colocados em instâncias, eles não têm efeito.

A principal motivação para descritores é fornecer um gancho permitindo
que objetos armazenados em variáveis de classe controlem o que acontece
durante a pesquisa de atributos.

Tradicionalmente, a classe de chamada controla o que acontece durante a
pesquisa.  Descritores invertem esse relacionamento e permitem que os
dados pesquisados tenham uma palavra a dizer sobre o assunto.

Descritores são usados em toda a linguagem.  É como funções se
transformam em métodos vinculados.  Ferramentas comuns como *note
classmethod(): 166, *note staticmethod(): 416, *note property(): 194. e
*note functools.cached_property(): 541. são todas implementadas como
descritores.


File: python.info,  Node: Exemplo completamente prático,  Next: Tutorial técnico,  Prev: Introdução<14>,  Up: Guia de descritores

9.4.2 Exemplo completamente prático
-----------------------------------

Neste exemplo, criamos uma ferramenta prática e poderosa para localizar
bugs de corrupção de dados notoriamente difíceis de encontrar.

* Menu:

* Classe Validator::
* Validadores personalizados::
* Aplicação prática::


File: python.info,  Node: Classe Validator,  Next: Validadores personalizados,  Up: Exemplo completamente prático

9.4.2.1 Classe Validator
........................

Um validador é um descritor para acesso de atributo gerenciado.  Antes
de armazenar quaisquer dados, ele verifica se o novo valor atende a
várias restrições de tipo e intervalo.  Se essas restrições não forem
atendidas, ele levanta uma exceção para evitar corrupção de dados em sua
origem.

Esta classe ‘Validator’ é uma *note classe base abstrata: 11f5. e um
descritor de atributo gerenciado:

     from abc import ABC, abstractmethod

     class Validator(ABC):

         def __set_name__(self, owner, name):
             self.private_name = '_' + name

         def __get__(self, obj, objtype=None):
             return getattr(obj, self.private_name)

         def __set__(self, obj, value):
             self.validate(value)
             setattr(obj, self.private_name, value)

         @abstractmethod
         def validate(self, value):
             pass

Validadores personalizados precisam herdar de ‘Validator’ e devem
fornecer um método ‘validate()’ para testar várias restrições conforme
necessário.


File: python.info,  Node: Validadores personalizados,  Next: Aplicação prática,  Prev: Classe Validator,  Up: Exemplo completamente prático

9.4.2.2 Validadores personalizados
..................................

Vemos aqui três utilitários práticos de validação de dados:

  1. ‘OneOf’ verifica se um valor é um de um conjunto restrito de
     opções.

  2. ‘Number’ verifica se um valor é um *note int: 257. ou *note float:
     2f7.  Opcionalmente, ele verifica se um valor está entre um mínimo
     ou máximo dado.

  3. ‘String’ verifica se um valor é um *note str: 44c.  Opcionalmente,
     ele valida um comprimento mínimo ou máximo dado.  Ele pode validar
     um predicado(1) definido pelo usuário também.

     class OneOf(Validator):

         def __init__(self, *options):
             self.options = set(options)

         def validate(self, value):
             if value not in self.options:
                 raise ValueError(
                     f'Expected {value!r} to be one of {self.options!r}'
                 )

     class Number(Validator):

         def __init__(self, minvalue=None, maxvalue=None):
             self.minvalue = minvalue
             self.maxvalue = maxvalue

         def validate(self, value):
             if not isinstance(value, (int, float)):
                 raise TypeError(f'Expected {value!r} to be an int or float')
             if self.minvalue is not None and value < self.minvalue:
                 raise ValueError(
                     f'Expected {value!r} to be at least {self.minvalue!r}'
                 )
             if self.maxvalue is not None and value > self.maxvalue:
                 raise ValueError(
                     f'Expected {value!r} to be no more than {self.maxvalue!r}'
                 )

     class String(Validator):

         def __init__(self, minsize=None, maxsize=None, predicate=None):
             self.minsize = minsize
             self.maxsize = maxsize
             self.predicate = predicate

         def validate(self, value):
             if not isinstance(value, str):
                 raise TypeError(f'Expected {value!r} to be a str')
             if self.minsize is not None and len(value) < self.minsize:
                 raise ValueError(
                     f'Expected {value!r} to be no smaller than {self.minsize!r}'
                 )
             if self.maxsize is not None and len(value) > self.maxsize:
                 raise ValueError(
                     f'Expected {value!r} to be no bigger than {self.maxsize!r}'
                 )
             if self.predicate is not None and not self.predicate(value):
                 raise ValueError(
                     f'Expected {self.predicate} to be true for {value!r}'
                 )

   ---------- Footnotes ----------

   (1) https://pt.wikipedia.org/wiki/Predicado_(lógica_matemática)


File: python.info,  Node: Aplicação prática,  Prev: Validadores personalizados,  Up: Exemplo completamente prático

9.4.2.3 Aplicação prática
.........................

Veja como os validadores de dados podem ser usados em uma classe real:

     class Component:

         name = String(minsize=3, maxsize=10, predicate=str.isupper)
         kind = OneOf('wood', 'metal', 'plastic')
         quantity = Number(minvalue=0)

         def __init__(self, name, kind, quantity):
             self.name = name
             self.kind = kind
             self.quantity = quantity

Os descritores impedem que instâncias inválidas sejam criadas:

     >>> Component('Widget', 'metal', 5)      # Bloqueado: 'Widget' não está todo em letras maiúsculas
     Traceback (most recent call last):
         ...
     ValueError: Expected <method 'isupper' of 'str' objects> to be true for 'Widget'

     >>> Component('WIDGET', 'metle', 5)      # Bloqueado: 'metle' contém um erro de escrita
     Traceback (most recent call last):
         ...
     ValueError: Expected 'metle' to be one of {'metal', 'plastic', 'wood'}

     >>> Component('WIDGET', 'metal', -5)     # Bloqueado: -5 é negativo
     Traceback (most recent call last):
         ...
     ValueError: Expected -5 to be at least 0

     >>> Component('WIDGET', 'metal', 'V')    # Bloqueado: 'V' não é um número
     Traceback (most recent call last):
         ...
     TypeError: Expected 'V' to be an int or float

     >>> c = Component('WIDGET', 'metal', 5)  # Permitido:  As entradas são válidas


File: python.info,  Node: Tutorial técnico,  Next: Equivalentes de Python puro,  Prev: Exemplo completamente prático,  Up: Guia de descritores

9.4.3 Tutorial técnico
----------------------

O que se segue é um tutorial mais técnico sobre a mecânica e os detalhes
de como os descritores funcionam.

* Menu:

* Resumo::
* Definição e introdução::
* Protocolo Descriptor::
* Visão geral da invocação do descritor::
* Invocação de uma instância::
* Invocação de uma classe::
* Invocação de super::
* Resumo da lógica de invocação::
* Notificação automática de nome::
* Exemplo de ORM::


File: python.info,  Node: Resumo,  Next: Definição e introdução,  Up: Tutorial técnico

9.4.3.1 Resumo
..............

Define descritores, resume o protocolo e mostra como os descritores são
chamados.  Fornece um exemplo mostrando como mapeamentos relacionais de
objetos funcionam.

Aprender sobre descritores não apenas fornece acesso a um conjunto de
ferramentas maior, mas também cria uma compreensão mais profunda de como
o Python funciona.


File: python.info,  Node: Definição e introdução,  Next: Protocolo Descriptor,  Prev: Resumo,  Up: Tutorial técnico

9.4.3.2 Definição e introdução
..............................

Em geral, um descritor é um valor de atributo que tem um dos métodos no
protocolo do descritor.  Esses métodos são *note __get__(): 1530, *note
__set__(): 20f7. e *note __delete__(): 16f5.  Se qualquer um desses
métodos for definido para um atributo, ele é dito ser um *note
descritor: 1658.

O comportamento padrão para acesso a atributos é obter, definir ou
excluir o atributo do dicionário de um objeto.  Por exemplo, ‘a.x’ tem
uma cadeia de pesquisa começando com ‘a.__dict__['x']’, depois
‘type(a).__dict__['x']’ e continuando pela ordem de resolução de métodos
de ‘type(a)’.  Se o valor pesquisado for um objeto que define um dos
métodos descritores, o Python pode substituir o comportamento padrão e
invocar o método descritor.  Onde isso ocorre na cadeia de precedência
depende de quais métodos descritores foram definidos.

Descritores são um protocolo poderoso de propósito geral.  Eles são o
mecanismo por trás de propriedades, métodos, métodos estáticos, métodos
de classe e *note super(): 4db.  Eles são usados em todo o Python.
Descritores simplificam o código C subjacente e oferecem um conjunto
flexível de novas ferramentas para programas Python do dia a dia.


File: python.info,  Node: Protocolo Descriptor,  Next: Visão geral da invocação do descritor,  Prev: Definição e introdução,  Up: Tutorial técnico

9.4.3.3 Protocolo Descriptor
............................

‘descr.__get__(self, obj, type=None)’

‘descr.__set__(self, obj, value)’

‘descr.__delete__(self, obj)’

É só isso.  Defina qualquer um desses métodos e um objeto é considerado
um descritor e pode substituir o comportamento padrão ao ser pesquisado
como um atributo.

Se um objeto define *note __set__(): 20f7. ou *note __delete__(): 16f5,
ele é considerado um descritor de dados.  Descritores que definem apenas
*note __get__(): 1530. são chamados de descritores não-dados (eles são
frequentemente usados para métodos, mas outros usos são possíveis).

Descritores de dados e não dados diferem em como as substituições são
calculadas com relação às entradas no dicionário de uma instância.  Se o
dicionário de uma instância tiver uma entrada com o mesmo nome de um
descritor de dados, o descritor de dados terá precedência.  Se o
dicionário de uma instância tiver uma entrada com o mesmo nome de um
descritor não dados, a entrada do dicionário terá precedência.

Para criar um descritor de dados somente leitura, defina *note
__get__(): 1530. e *note __set__(): 20f7. com o *note __set__(): 20f7.
levantando *note AttributeError: 34b. quando chamado.  Definir o método
*note __set__(): 20f7. com um espaço reservado levantando uma exceção é
o suficiente para torná-lo um descritor de dados.


File: python.info,  Node: Visão geral da invocação do descritor,  Next: Invocação de uma instância,  Prev: Protocolo Descriptor,  Up: Tutorial técnico

9.4.3.4 Visão geral da invocação do descritor
.............................................

Um descritor pode ser chamado diretamente com ‘desc.__get__(obj)’ ou
‘desc.__get__(None, cls)’.

Mas é mais comum que um descritor seja invocado automaticamente a partir
do acesso ao atributo.

A expressão ‘obj.x’ procura o atributo ‘x’ na cadeia de espaços de nomes
para ‘obj’.  Se a busca encontrar um descritor fora da instância *note
__dict__: 55b, seu método *note __get__(): 1530. é invocado de acordo
com as regras de precedência listadas abaixo.

Os detalhes da invocação dependem se ‘obj’ é um objeto, classe ou
instância de super.


File: python.info,  Node: Invocação de uma instância,  Next: Invocação de uma classe,  Prev: Visão geral da invocação do descritor,  Up: Tutorial técnico

9.4.3.5 Invocação de uma instância
..................................

A pesquisa de instância verifica uma cadeia de espaços de nomes, dando
aos descritores de dados a maior prioridade, seguidos por variáveis de
instância, depois descritores que não são de dados, depois variáveis de
classe e, por último, *note __getattr__(): 4d3, se fornecido.

Se um descritor for encontrado para ‘a.x’, ele será invocado com:
‘desc.__get__(a, type(a))’.

A lógica para uma pesquisa pontilhada está em *note
object.__getattribute__(): beb.  Aqui está um equivalente Python puro:

     def find_name_in_mro(cls, name, default):
         "Emulate _PyType_Lookup() in Objects/typeobject.c"
         for base in cls.__mro__:
             if name in vars(base):
                 return vars(base)[name]
         return default

     def object_getattribute(obj, name):
         "Emulate PyObject_GenericGetAttr() in Objects/object.c"
         null = object()
         objtype = type(obj)
         cls_var = find_name_in_mro(objtype, name, null)
         descr_get = getattr(type(cls_var), '__get__', null)
         if descr_get is not null:
             if (hasattr(type(cls_var), '__set__')
                 or hasattr(type(cls_var), '__delete__')):
                 return descr_get(cls_var, obj, objtype)     # descritor de dados
         if hasattr(obj, '__dict__') and name in vars(obj):
             return vars(obj)[name]                          # variável de instância
         if descr_get is not null:
             return descr_get(cls_var, obj, objtype)         # descritor de não dados
         if cls_var is not null:
             return cls_var                                  # variável de classe
         raise AttributeError(name)

Note que não há nenhum gancho *note __getattr__(): 4d3. no código *note
__getattribute__(): beb.  É por isso que chamar *note
__getattribute__(): beb. diretamente ou com ‘super().__getattribute__’
ignorará *note __getattr__(): 4d3. completamente.

Em vez disso, é o operador ponto e a função *note getattr(): bea. que
são responsáveis por invocar *note __getattr__(): 4d3. sempre que *note
__getattribute__(): beb. levanta um *note AttributeError: 34b.  A lógica
deles é encapsulada em uma função auxiliar:

     def getattr_hook(obj, name):
         "Emulate slot_tp_getattr_hook() in Objects/typeobject.c"
         try:
             return obj.__getattribute__(name)
         except AttributeError:
             if not hasattr(type(obj), '__getattr__'):
                 raise
         return type(obj).__getattr__(obj, name)             # __getattr__


File: python.info,  Node: Invocação de uma classe,  Next: Invocação de super,  Prev: Invocação de uma instância,  Up: Tutorial técnico

9.4.3.6 Invocação de uma classe
...............................

A lógica para uma pesquisa pontilhada como ‘A.x’ está em
‘type.__getattribute__()’.  Os passos são similares aos de
‘object.__getattribute__()’ mas a pesquisa do dicionário de instância é
substituída por uma pesquisa através da *note ordem de resolução de
métodos: 2316. da classe.

Se um descritor for encontrado, ele será invocado com
‘desc.__get__(None, A)’.

A implementação completa em C pode ser encontrada em ‘type_getattro()’ e
‘_PyType_Lookup()’ em Objects/typeobject.c(1).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Objects/typeobject.c


File: python.info,  Node: Invocação de super,  Next: Resumo da lógica de invocação,  Prev: Invocação de uma classe,  Up: Tutorial técnico

9.4.3.7 Invocação de super
..........................

A lógica para a pesquisa pontilhada de super está no método *note
__getattribute__(): beb. para o objeto retornado por *note super(): 4db.

Uma pesquisa pontilhada como ‘super(A, obj).m’ pesquisa
‘obj.__class__.__mro__’ para a classe base ‘B’ imediatamente após ‘A’ e
então retorna ‘B.__dict__['m'].__get__(obj, A)’.  Se não for um
descritor, ‘m’ é retornado inalterado.

A implementação completa em C pode ser encontrada em ‘super_getattro()’
em Objects/typeobject.c(1).  Um equivalente em Python puro pode ser
encontrado no Tutorial do Guido(2).

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Objects/typeobject.c

   (2) 
https://www.python.org/download/releases/2.2.3/descrintro/#cooperation


File: python.info,  Node: Resumo da lógica de invocação,  Next: Notificação automática de nome,  Prev: Invocação de super,  Up: Tutorial técnico

9.4.3.8 Resumo da lógica de invocação
.....................................

O mecanismo para descritores está incorporado nos métodos *note
__getattribute__(): beb. para *note object: a96, *note type: d6b. e
*note super(): 4db.

Os pontos importantes para lembrar são:

   * Descritores são invocados pelo método *note __getattribute__():
     beb.

   * As classes herdam esse maquinário de *note object: a96, *note type:
     d6b. ou *note super(): 4db.

   * Substituir *note __getattribute__(): beb. impede chamadas
     automáticas do descritor porque toda a lógica do descritor está
     nesse método.

   * ‘object.__getattribute__()’ e ‘type.__getattribute__()’ fazem
     chamadas diferentes para *note __get__(): 1530.  O primeiro inclui
     a instância e pode incluir a classe.  O segundo coloca ‘None’ para
     a instância e sempre inclui a classe.

   * Os descritores de dados sempre substituem os dicionários de
     instância.

   * Descritores de não-dados podem ser substituídos pelos dicionários
     de instância.


File: python.info,  Node: Notificação automática de nome,  Next: Exemplo de ORM,  Prev: Resumo da lógica de invocação,  Up: Tutorial técnico

9.4.3.9 Notificação automática de nome
......................................

Às vezes, é desejável que um descritor saiba a qual nome de variável de
classe ele foi atribuído.  Quando uma nova classe é criada, a metaclasse
*note type: d6b. varre o dicionário da nova classe.  Se qualquer uma das
entradas for descritor e se eles definirem *note __set_name__(): c69,
esse método será chamado com dois argumentos.  O 'owner' é a classe onde
o descritor é usado, e o 'name' é a variável de classe à qual o
descritor foi atribuído.

Os detalhes de implementações estão em ‘type_new()’ e ‘set_names()’ em
Objects/typeobject.c(1).

Como a lógica de atualização está em ‘type.__new__()’, as notificações
só ocorrem no momento da criação da classe.  Se descritores forem
adicionados à classe posteriormente, *note __set_name__(): c69.
precisará ser chamado manualmente.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Objects/typeobject.c


File: python.info,  Node: Exemplo de ORM,  Prev: Notificação automática de nome,  Up: Tutorial técnico

9.4.3.10 Exemplo de ORM
.......................

O código a seguir é um esqueleto simplificado que mostra como os
descritores de dados podem ser usados para implementar um mapeamento
relacional de objetos(1).

A ideia essencial é que os dados sejam armazenados em um banco de dados
externo.  As instâncias do Python só guardam chaves para as tabelas do
banco de dados.  Descritores cuidam de pesquisas ou atualizações:

     class Field:

         def __set_name__(self, owner, name):
             self.fetch = f'SELECT {name} FROM {owner.table} WHERE {owner.key}=?;'
             self.store = f'UPDATE {owner.table} SET {name}=? WHERE {owner.key}=?;'

         def __get__(self, obj, objtype=None):
             return conn.execute(self.fetch, [obj.key]).fetchone()[0]

         def __set__(self, obj, value):
             conn.execute(self.store, [value, obj.key])
             conn.commit()

Podemos usar a classe ‘Field’ para definir modelos(2) que descrevem o
esquema de cada tabela em um banco de dados:

     class Movie:
         table = 'Movies'                    # Nome da tabela
         key = 'title'                       # Chave primária
         director = Field()
         year = Field()

         def __init__(self, key):
             self.key = key

     class Song:
         table = 'Music'
         key = 'title'
         artist = Field()
         year = Field()
         genre = Field()

         def __init__(self, key):
             self.key = key

Para usar os modelos, primeiro conecte ao banco de dados:

     >>> import sqlite3
     >>> conn = sqlite3.connect('entertainment.db')

Uma sessão interativa mostra como os dados são recuperados do banco de
dados e como eles podem ser atualizados:

     >>> Movie('Star Wars').director
     'George Lucas'
     >>> jaws = Movie('Jaws')
     >>> f'Released in {jaws.year} by {jaws.director}'
     'Released in 1975 by Steven Spielberg'

     >>> Song('Country Roads').artist
     'John Denver'

     >>> Movie('Star Wars').director = 'J.J. Abrams'
     >>> Movie('Star Wars').director
     'J.J. Abrams'

   ---------- Footnotes ----------

   (1) https://pt.wikipedia.org/wiki/Mapeamento_objeto-relacional

   (2) https://en.wikipedia.org/wiki/Database_model


File: python.info,  Node: Equivalentes de Python puro,  Prev: Tutorial técnico,  Up: Guia de descritores

9.4.4 Equivalentes de Python puro
---------------------------------

O protocolo descritor é simples e oferece possibilidades interessantes.
Vários casos de uso são tão comuns que foram pré-empacotados em
ferramentas embutidas.  Propriedades, métodos vinculados, métodos
estáticos, métodos de classe e __slots__ são todos baseados no protocolo
descritor.

* Menu:

* Propriedades::
* Funções e métodos::
* Tipos de métodos::
* Métodos estáticos::
* Métodos de classe::
* Member objects and __slots__::


File: python.info,  Node: Propriedades,  Next: Funções e métodos,  Up: Equivalentes de Python puro

9.4.4.1 Propriedades
....................

Chamar *note property(): 194. é uma maneira sucinta de construir um
descritor de dados que dispara uma chamada de função ao acessar um
atributo.  Sua assinatura é:

     property(fget=None, fset=None, fdel=None, doc=None) -> property

A documentação mostra um uso típico para definir um atributo gerenciado
‘x’:

     class C:
         def getx(self): return self.__x
         def setx(self, value): self.__x = value
         def delx(self): del self.__x
         x = property(getx, setx, delx, "I'm the 'x' property.")

Para ver como *note property(): 194. é implementada em termos do
protocolo descritor, aqui está um equivalente Python puro que implementa
a maior parte da funcionalidade principal:

     class Property:
         "Emulate PyProperty_Type() in Objects/descrobject.c"

         def __init__(self, fget=None, fset=None, fdel=None, doc=None):
             self.fget = fget
             self.fset = fset
             self.fdel = fdel
             if doc is None and fget is not None:
                 doc = fget.__doc__
             self.__doc__ = doc

         def __set_name__(self, owner, name):
             self.__name__ = name

         def __get__(self, obj, objtype=None):
             if obj is None:
                 return self
             if self.fget is None:
                 raise AttributeError
             return self.fget(obj)

         def __set__(self, obj, value):
             if self.fset is None:
                 raise AttributeError
             self.fset(obj, value)

         def __delete__(self, obj):
             if self.fdel is None:
                 raise AttributeError
             self.fdel(obj)

         def getter(self, fget):
             return type(self)(fget, self.fset, self.fdel, self.__doc__)

         def setter(self, fset):
             return type(self)(self.fget, fset, self.fdel, self.__doc__)

         def deleter(self, fdel):
             return type(self)(self.fget, self.fset, fdel, self.__doc__)

O recurso embutido *note property(): 194. ajuda sempre que uma interface
de usuário concede acesso a atributos e alterações subsequentes exigem a
intervenção de um método.

Por exemplo, uma classe de planilha pode conceder acesso a um valor de
célula por meio de ‘Cell('b10').value’.  Melhorias subsequentes no
programa exigem que a célula seja recalculada em cada acesso; no
entanto, o programador não quer afetar o código do cliente existente
acessando o atributo diretamente.  A solução é encapsular o acesso ao
atributo de valor em um descritor de dados de propriedade:

     class Cell:
         ...

         @property
         def value(self):
             "Recalculate the cell before returning value"
             self.recalc()
             return self._value

Tanto o *note property(): 194. embutida quanto nosso equivalente
‘Property()’ funcionariam neste exemplo.


File: python.info,  Node: Funções e métodos,  Next: Tipos de métodos,  Prev: Propriedades,  Up: Equivalentes de Python puro

9.4.4.2 Funções e métodos
.........................

Os recursos orientados a objetos do Python são construídos sobre um
ambiente baseado em funções.  Usando descritores de não-dados, os dois
são mesclados perfeitamente.

Funções armazenadas em dicionários de classe são transformadas em
métodos quando invocadas.  Métodos diferem de funções regulares apenas
porque a instância do objeto é prefixada aos outros argumentos.  Por
convenção, a instância é chamada 'self', mas poderia ser chamada 'this'
ou qualquer outro nome de variável.trabalhar

Os métodos podem ser criados manualmente com *note types.MethodType:
190e, que é aproximadamente equivalente a:

     class MethodType:
         "Emulate PyMethod_Type in Objects/classobject.c"

         def __init__(self, func, obj):
             self.__func__ = func
             self.__self__ = obj

         def __call__(self, *args, **kwargs):
             func = self.__func__
             obj = self.__self__
             return func(obj, *args, **kwargs)

         def __getattribute__(self, name):
             "Emulate method_getset() in Objects/classobject.c"
             if name == '__doc__':
                 return self.__func__.__doc__
             return object.__getattribute__(self, name)

         def __getattr__(self, name):
             "Emulate method_getattro() in Objects/classobject.c"
             return getattr(self.__func__, name)

         def __get__(self, obj, objtype=None):
             "Emulate method_descr_get() in Objects/classobject.c"
             return self

Para dar suporte à criação automática de métodos, as funções incluem o
método *note __get__(): 1530. para vincular métodos durante o acesso ao
atributo.  Isso significa que as funções são descritores de não-dados
que retornam métodos vinculados durante a pesquisa pontilhada de uma
instância.  Veja como funciona:

     class Function:
         ...

         def __get__(self, obj, objtype=None):
             "Simulate func_descr_get() in Objects/funcobject.c"
             if obj is None:
                 return self
             return MethodType(self, obj)

A execução da classe a seguir no interpretador mostra como o descritor
de função funciona na prática:

     class D:
         def f(self):
              return self

     class D2:
         pass

A função tem um atributo *note nome qualificado: 1ab1. para dar suporte
à introspecção:

     >>> D.f.__qualname__
     'D.f'

Acessar a função por meio do dicionário de classes não invoca *note
__get__(): 1530.  Em vez disso, ele apenas retorna o objeto da função
subjacente:

     >>> D.__dict__['f']
     <function D.f at 0x00C45070>

O acesso pontilhado de uma classe chama *note __get__(): 1530. que
apenas retorna a função subjacente inalterada:

     >>> D.f
     <function D.f at 0x00C45070>

O comportamento interessante ocorre durante o acesso pontuado de uma
instância.  A pesquisa pontilhada chama *note __get__(): 1530. que
retorna um objeto do método vinculado:

     >>> d = D()
     >>> d.f
     <bound method D.f of <__main__.D object at 0x00B18C90>>

Internamente, o método vinculado armazena a função subjacente e a
instância vinculada:

     >>> d.f.__func__
     <function D.f at 0x00C45070>

     >>> d.f.__self__
     <__main__.D object at 0x00B18C90>

Se você já se perguntou de onde vem 'self' em métodos regulares ou de
onde vem 'cls' em métodos de classe, é isso!


File: python.info,  Node: Tipos de métodos,  Next: Métodos estáticos,  Prev: Funções e métodos,  Up: Equivalentes de Python puro

9.4.4.3 Tipos de métodos
........................

Descritores de não-dados fornecem um mecanismo simples para variações
nos padrões usuais de vinculação de funções em métodos.

To recap, functions have a *note __get__(): 1530. method so that they
can be converted to a method when accessed as attributes.  The non-data
descriptor transforms an ‘obj.f(*args)’ call into ‘f(obj, *args)’.
Calling ‘cls.f(*args)’ becomes ‘f(*args)’.

Este gráfico resume a ligação e suas duas variantes mais úteis:

     Transformação         Chamada de um objeto       Chamada de uma
                                                      classe
                                                      
     ------------------------------------------------------------------------
                                                      
     função                f(obj, *args)              f(*args)
                                                      
                                                      
     staticmethod          f(*args)                   f(*args)
                                                      
                                                      
     classmethod           f(type(obj), *args)        f(cls, *args)
                                                      


File: python.info,  Node: Métodos estáticos,  Next: Métodos de classe,  Prev: Tipos de métodos,  Up: Equivalentes de Python puro

9.4.4.4 Métodos estáticos
.........................

Static methods return the underlying function without changes.  Calling
either ‘c.f’ or ‘C.f’ is the equivalent of a direct lookup into
‘object.__getattribute__(c, "f")’ or ‘object.__getattribute__(C, "f")’.
As a result, the function becomes identically accessible from either an
object or a class.

Good candidates for static methods are methods that do not reference the
‘self’ variable.

For instance, a statistics package may include a container class for
experimental data.  The class provides normal methods for computing the
average, mean, median, and other descriptive statistics that depend on
the data.  However, there may be useful functions which are conceptually
related but do not depend on the data.  For instance, ‘erf(x)’ is handy
conversion routine that comes up in statistical work but does not
directly depend on a particular dataset.  It can be called either from
an object or the class: ‘s.erf(1.5) --> 0.9332’ or ‘Sample.erf(1.5) -->
0.9332’.

Since static methods return the underlying function with no changes, the
example calls are unexciting:

     class E:
         @staticmethod
         def f(x):
             return x * 10

     >>> E.f(3)
     30
     >>> E().f(3)
     30

Using the non-data descriptor protocol, a pure Python version of *note
staticmethod(): 416. would look like this:

     import functools

     class StaticMethod:
         "Emulate PyStaticMethod_Type() in Objects/funcobject.c"

         def __init__(self, f):
             self.f = f
             functools.update_wrapper(self, f)

         def __get__(self, obj, objtype=None):
             return self.f

         def __call__(self, *args, **kwds):
             return self.f(*args, **kwds)

The *note functools.update_wrapper(): 1058. call adds a ‘__wrapped__’
attribute that refers to the underlying function.  Also it carries
forward the attributes necessary to make the wrapper look like the
wrapped function: *note __name__: 1317, *note __qualname__: 208d, *note
__doc__: 1219, and *note __annotations__: 1218.


File: python.info,  Node: Métodos de classe,  Next: Member objects and __slots__,  Prev: Métodos estáticos,  Up: Equivalentes de Python puro

9.4.4.5 Métodos de classe
.........................

Unlike static methods, class methods prepend the class reference to the
argument list before calling the function.  This format is the same for
whether the caller is an object or a class:

     class F:
         @classmethod
         def f(cls, x):
             return cls.__name__, x

     >>> F.f(3)
     ('F', 3)
     >>> F().f(3)
     ('F', 3)

This behavior is useful whenever the method only needs to have a class
reference and does not rely on data stored in a specific instance.  One
use for class methods is to create alternate class constructors.  For
example, the classmethod *note dict.fromkeys(): 1637. creates a new
dictionary from a list of keys.  The pure Python equivalent is:

     class Dict(dict):
         @classmethod
         def fromkeys(cls, iterable, value=None):
             "Emulate dict_fromkeys() in Objects/dictobject.c"
             d = cls()
             for key in iterable:
                 d[key] = value
             return d

Now a new dictionary of unique keys can be constructed like this:

     >>> d = Dict.fromkeys('abracadabra')
     >>> type(d) is Dict
     True
     >>> d
     {'a': None, 'b': None, 'r': None, 'c': None, 'd': None}

Using the non-data descriptor protocol, a pure Python version of *note
classmethod(): 166. would look like this:

     import functools

     class ClassMethod:
         "Emulate PyClassMethod_Type() in Objects/funcobject.c"

         def __init__(self, f):
             self.f = f
             functools.update_wrapper(self, f)

         def __get__(self, obj, cls=None):
             if cls is None:
                 cls = type(obj)
             return MethodType(self.f, cls)

The *note functools.update_wrapper(): 1058. call in ‘ClassMethod’ adds a
‘__wrapped__’ attribute that refers to the underlying function.  Also it
carries forward the attributes necessary to make the wrapper look like
the wrapped function: *note __name__: 1317, *note __qualname__: 208d,
*note __doc__: 1219, and *note __annotations__: 1218.


File: python.info,  Node: Member objects and __slots__,  Prev: Métodos de classe,  Up: Equivalentes de Python puro

9.4.4.6 Member objects and __slots__
....................................

When a class defines ‘__slots__’, it replaces instance dictionaries with
a fixed-length array of slot values.  From a user point of view that has
several effects:

1.  Provides immediate detection of bugs due to misspelled attribute
assignments.  Only attribute names specified in ‘__slots__’ are allowed:

     class Vehicle:
         __slots__ = ('id_number', 'make', 'model')

     >>> auto = Vehicle()
     >>> auto.id_nubmer = 'VYE483814LQEX'
     Traceback (most recent call last):
         ...
     AttributeError: 'Vehicle' object has no attribute 'id_nubmer'

2.  Helps create immutable objects where descriptors manage access to
private attributes stored in ‘__slots__’:

     class Immutable:

         __slots__ = ('_dept', '_name')          # Replace the instance dictionary

         def __init__(self, dept, name):
             self._dept = dept                   # Store to private attribute
             self._name = name                   # Store to private attribute

         @property                               # Read-only descriptor
         def dept(self):
             return self._dept

         @property
         def name(self):                         # Read-only descriptor
             return self._name

     >>> mark = Immutable('Botany', 'Mark Watney')
     >>> mark.dept
     'Botany'
     >>> mark.dept = 'Space Pirate'
     Traceback (most recent call last):
         ...
     AttributeError: property 'dept' of 'Immutable' object has no setter
     >>> mark.location = 'Mars'
     Traceback (most recent call last):
         ...
     AttributeError: 'Immutable' object has no attribute 'location'

3.  Saves memory.  On a 64-bit Linux build, an instance with two
attributes takes 48 bytes with ‘__slots__’ and 152 bytes without.  This
flyweight design pattern(1) likely only matters when a large number of
instances are going to be created.

4.  Improves speed.  Reading instance variables is 35% faster with
‘__slots__’ (as measured with Python 3.10 on an Apple M1 processor).

5.  Blocks tools like *note functools.cached_property(): 541. which
require an instance dictionary to function correctly:

     from functools import cached_property

     class CP:
         __slots__ = ()                          # Eliminates the instance dict

         @cached_property                        # Requires an instance dict
         def pi(self):
             return 4 * sum((-1.0)**n / (2.0*n + 1.0)
                            for n in reversed(range(100_000)))

     >>> CP().pi
     Traceback (most recent call last):
       ...
     TypeError: No '__dict__' attribute on 'CP' instance to cache 'pi' property.

It is not possible to create an exact drop-in pure Python version of
‘__slots__’ because it requires direct access to C structures and
control over object memory allocation.  However, we can build a mostly
faithful simulation where the actual C structure for slots is emulated
by a private ‘_slotvalues’ list.  Reads and writes to that private
structure are managed by member descriptors:

     null = object()

     class Member:

         def __init__(self, name, clsname, offset):
             'Emulate PyMemberDef in Include/structmember.h'
             # Also see descr_new() in Objects/descrobject.c
             self.name = name
             self.clsname = clsname
             self.offset = offset

         def __get__(self, obj, objtype=None):
             'Emulate member_get() in Objects/descrobject.c'
             # Also see PyMember_GetOne() in Python/structmember.c
             if obj is None:
                 return self
             value = obj._slotvalues[self.offset]
             if value is null:
                 raise AttributeError(self.name)
             return value

         def __set__(self, obj, value):
             'Emulate member_set() in Objects/descrobject.c'
             obj._slotvalues[self.offset] = value

         def __delete__(self, obj):
             'Emulate member_delete() in Objects/descrobject.c'
             value = obj._slotvalues[self.offset]
             if value is null:
                 raise AttributeError(self.name)
             obj._slotvalues[self.offset] = null

         def __repr__(self):
             'Emulate member_repr() in Objects/descrobject.c'
             return f'<Member {self.name!r} of {self.clsname!r}>'

The ‘type.__new__()’ method takes care of adding member objects to class
variables:

     class Type(type):
         'Simulate how the type metaclass adds member objects for slots'

         def __new__(mcls, clsname, bases, mapping, **kwargs):
             'Emulate type_new() in Objects/typeobject.c'
             # type_new() calls PyTypeReady() which calls add_methods()
             slot_names = mapping.get('slot_names', [])
             for offset, name in enumerate(slot_names):
                 mapping[name] = Member(name, clsname, offset)
             return type.__new__(mcls, clsname, bases, mapping, **kwargs)

The *note object.__new__(): 580. method takes care of creating instances
that have slots instead of an instance dictionary.  Here is a rough
simulation in pure Python:

     class Object:
         'Simulate how object.__new__() allocates memory for __slots__'

         def __new__(cls, *args, **kwargs):
             'Emulate object_new() in Objects/typeobject.c'
             inst = super().__new__(cls)
             if hasattr(cls, 'slot_names'):
                 empty_slots = [null] * len(cls.slot_names)
                 object.__setattr__(inst, '_slotvalues', empty_slots)
             return inst

         def __setattr__(self, name, value):
             'Emulate _PyObject_GenericSetAttrWithDict() Objects/object.c'
             cls = type(self)
             if hasattr(cls, 'slot_names') and name not in cls.slot_names:
                 raise AttributeError(
                     f'{cls.__name__!r} object has no attribute {name!r}'
                 )
             super().__setattr__(name, value)

         def __delattr__(self, name):
             'Emulate _PyObject_GenericSetAttrWithDict() Objects/object.c'
             cls = type(self)
             if hasattr(cls, 'slot_names') and name not in cls.slot_names:
                 raise AttributeError(
                     f'{cls.__name__!r} object has no attribute {name!r}'
                 )
             super().__delattr__(name)

To use the simulation in a real class, just inherit from ‘Object’ and
set the *note metaclass: 2112. to ‘Type’:

     class H(Object, metaclass=Type):
         'Instance variables stored in slots'

         slot_names = ['x', 'y']

         def __init__(self, x, y):
             self.x = x
             self.y = y

At this point, the metaclass has loaded member objects for 'x' and 'y':

     >>> from pprint import pp
     >>> pp(dict(vars(H)))
     {'__module__': '__main__',
      '__doc__': 'Instance variables stored in slots',
      'slot_names': ['x', 'y'],
      '__init__': <function H.__init__ at 0x7fb5d302f9d0>,
      'x': <Member 'x' of 'H'>,
      'y': <Member 'y' of 'H'>}

When instances are created, they have a ‘slot_values’ list where the
attributes are stored:

     >>> h = H(10, 20)
     >>> vars(h)
     {'_slotvalues': [10, 20]}
     >>> h.x = 55
     >>> vars(h)
     {'_slotvalues': [55, 20]}

Misspelled or unassigned attributes will raise an exception:

     >>> h.xz
     Traceback (most recent call last):
         ...
     AttributeError: 'H' object has no attribute 'xz'

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Flyweight_pattern


File: python.info,  Node: Depurando extensões de API C e internos do CPython com GDB,  Next: Enum,  Prev: Guia de descritores,  Up: Python HOWTOs

9.5 Depurando extensões de API C e internos do CPython com GDB
==============================================================

Este documento explica como a extensão GDB do Python, ‘python-gdb.py’,
pode ser usada com o depurador GDB para depurar extensões CPython e o
próprio interpretador CPython.

Ao depurar problemas de baixo nível, como falhas ou impasses, um
depurador de baixo nível, como o GDB, é útil para diagnosticar e
corrigir o problema.  Por padrão, o GDB (ou qualquer uma de suas
interfaces) não oferece suporte a informações de alto nível específicas
do interpretador CPython.

A extensão ‘python-gdb.py’ adiciona informações do interpretador CPython
ao GDB. A extensão ajuda a inspecionar a pilha de funções Python
atualmente em execução.  Dado um objeto Python representado por um
ponteiro *note PyObject: 339.*, a extensão mostra o tipo e o valor do
objeto.

Desenvolvedores que estão trabalhando em extensões CPython ou mexendo
com partes do CPython escritas em C podem usar este documento para
aprender como usar a extensão ‘python-gdb.py’ com o GDB.

     Nota: Este documento pressupõe que você esteja familiarizado com o
     básico do GDB e da API C do CPython.  Ele consolida orientações do
     devguide(1) e da wiki do Python(2).

* Menu:

* Pré-requisitos::
* Usando a compilação de depuração e o modo de desenvolvimento::
* Usando a extensão python-gdb::
* Uso com comandos do GDB::

   ---------- Footnotes ----------

   (1) https://devguide.python.org

   (2) https://wiki.python.org/moin/DebuggingWithGdb


File: python.info,  Node: Pré-requisitos,  Next: Usando a compilação de depuração e o modo de desenvolvimento,  Up: Depurando extensões de API C e internos do CPython com GDB

9.5.1 Pré-requisitos
--------------------

Você precisa ter:

   - GDB 7 ou posterior.  (Para versões anteriores do GDB, consulte
     ‘Misc/gdbinit’ nas fontes do Python 3.11 ou anterior.)

   - Informações de depuração compatíveis com GDB para Python e qualquer
     extensão que você esteja depurando.

   - A extensão ‘python-gdb.py’.

A extensão é construída com Python, mas pode ser distribuída
separadamente ou não ser distribuída.  Abaixo, incluímos dicas para
alguns sistemas comuns como exemplos.  Note que mesmo se as instruções
corresponderem ao seu sistema, elas podem estar desatualizadas.

* Menu:

* Configuração com Python construído a partir do código-fonte::
* Configuração para Python a partir de uma distribuição Linux::


File: python.info,  Node: Configuração com Python construído a partir do código-fonte,  Next: Configuração para Python a partir de uma distribuição Linux,  Up: Pré-requisitos

9.5.1.1 Configuração com Python construído a partir do código-fonte
...................................................................

Quando você compila o CPython a partir do código-fonte, as informações
de depuração devem estar disponíveis, e a compilação deve adicionar um
arquivo ‘python-gdb.py’ ao diretório raiz do seu repositório.

Para ativar o suporte, você deve adicionar o diretório que contém
‘python-gdb.py’ ao “auto-load-safe-path” do GDB. Se você ainda não fez
isso, as versões recentes do GDB imprimirão um aviso com instruções
sobre como fazer isso.

     Nota: Se você não encontrar instruções para a sua versão do GDB,
     coloque isso no seu arquivo de configuração (‘~/.gdbinit’ ou
     ‘~/.config/gdb/gdbinit’):

          add-auto-load-safe-path /caminho/para/cpython

     Você também pode adicionar vários caminhos, separados por ‘:’.


File: python.info,  Node: Configuração para Python a partir de uma distribuição Linux,  Prev: Configuração com Python construído a partir do código-fonte,  Up: Pré-requisitos

9.5.1.2 Configuração para Python a partir de uma distribuição Linux
...................................................................

A maioria dos sistemas Linux fornece informações de depuração para o
Python do sistema em um pacote chamado ‘python-debuginfo’, ‘python-dbg’
ou similar.  Por exemplo:

   - Fedora:

               sudo dnf install gdb
               sudo dnf debuginfo-install python3

   - Ubuntu:

               sudo apt install gdb python3-dbg

Em vários sistemas Linux recentes, o GDB pode baixar automaticamente
símbolos de depuração usando 'debuginfod'.  No entanto, isso não
instalará a extensão ‘python-gdb.py’; geralmente é necessário instalar
separadamente o pacote de informações de depuração.


File: python.info,  Node: Usando a compilação de depuração e o modo de desenvolvimento,  Next: Usando a extensão python-gdb,  Prev: Pré-requisitos,  Up: Depurando extensões de API C e internos do CPython com GDB

9.5.2 Usando a compilação de depuração e o modo de desenvolvimento
------------------------------------------------------------------

Para facilitar a depuração, você pode querer:

   - Use a *note compilação de depuração: 1f9. do Python.  (Ao compilar
     a partir do código-fonte, use ‘configure --with-pydebug’.  Em
     distribuições Linux, instale e execute um pacote como
     ‘python-debug’ ou ‘python-dbg’, se disponível.)

   - Use o *note modo de desenvolvimento: 1f8. de tempo de execução (‘-X
     dev’).

Ambos habilitam assertivas extras e desabilitam algumas otimizações.  Às
vezes isso esconde o bug que você está tentando encontrar, mas na
maioria dos casos eles facilitam o processo.


File: python.info,  Node: Usando a extensão python-gdb,  Next: Uso com comandos do GDB,  Prev: Usando a compilação de depuração e o modo de desenvolvimento,  Up: Depurando extensões de API C e internos do CPython com GDB

9.5.3 Usando a extensão ‘python-gdb’
------------------------------------

Quando a extensão é carregada, ela fornece duas principais
funcionalidades: impressões bonitas para valores Python e comandos
adicionais.

* Menu:

* Pretty-printers::
* py-list::
* py-up e py-down::
* py-bt::
* py-print::
* py-locals::


File: python.info,  Node: Pretty-printers,  Next: py-list,  Up: Usando a extensão python-gdb

9.5.3.1 Pretty-printers
.......................

Este é o aspecto de um backtrace do GDB (truncado) quando esta extensão
está habilitada:

     #0  0x000000000041a6b1 in PyObject_Malloc (nbytes=Cannot access memory at address 0x7fffff7fefe8
     ) at Objects/obmalloc.c:748
     #1  0x000000000041b7c0 in _PyObject_DebugMallocApi (id=111 'o', nbytes=24) at Objects/obmalloc.c:1445
     #2  0x000000000041b717 in _PyObject_DebugMalloc (nbytes=24) at Objects/obmalloc.c:1412
     #3  0x000000000044060a in _PyUnicode_New (length=11) at Objects/unicodeobject.c:346
     #4  0x00000000004466aa in PyUnicodeUCS2_DecodeUTF8Stateful (s=0x5c2b8d "__lltrace__", size=11, errors=0x0, consumed=
         0x0) at Objects/unicodeobject.c:2531
     #5  0x0000000000446647 in PyUnicodeUCS2_DecodeUTF8 (s=0x5c2b8d "__lltrace__", size=11, errors=0x0)
         at Objects/unicodeobject.c:2495
     #6  0x0000000000440d1b in PyUnicodeUCS2_FromStringAndSize (u=0x5c2b8d "__lltrace__", size=11)
         at Objects/unicodeobject.c:551
     #7  0x0000000000440d94 in PyUnicodeUCS2_FromString (u=0x5c2b8d "__lltrace__") at Objects/unicodeobject.c:569
     #8  0x0000000000584abd in PyDict_GetItemString (v=
         {'Yuck': <type at remote 0xad4730>, '__builtins__': <module at remote 0x7ffff7fd5ee8>, '__file__': 'Lib/test/crashers/nasty_eq_vs_dict.py', '__package__': None, 'y': <Yuck(i=0) at remote 0xaacd80>, 'dict': {0: 0, 1: 1, 2: 2, 3: 3}, '__cached__': None, '__name__': '__main__', 'z': <Yuck(i=0) at remote 0xaace60>, '__doc__': None}, key=
         0x5c2b8d "__lltrace__") at Objects/dictobject.c:2171

Observe como o argumento do dicionário para ‘PyDict_GetItemString’ é
exibido como seu ‘repr()’, em vez de um ponteiro ‘PyObject *’ opaco.

A extensão funciona fornecendo uma rotina de impressão personalizada
para valores do tipo ‘PyObject *’.  Se você precisar acessar detalhes de
nível inferior de um objeto, então converta o valor para um ponteiro do
tipo apropriado.  Por exemplo:

     (gdb) p globals
     $1 = {'__builtins__': <module at remote 0x7ffff7fb1868>, '__name__':
     '__main__', 'ctypes': <module at remote 0x7ffff7f14360>, '__doc__': None,
     '__package__': None}

     (gdb) p *(PyDictObject*)globals
     $2 = {ob_refcnt = 3, ob_type = 0x3dbdf85820, ma_fill = 5, ma_used = 5,
     ma_mask = 7, ma_table = 0x63d0f8, ma_lookup = 0x3dbdc7ea70
     <lookdict_string>, ma_smalltable = {{me_hash = 7065186196740147912,
     me_key = '__builtins__', me_value = <module at remote 0x7ffff7fb1868>},
     {me_hash = -368181376027291943, me_key = '__name__',
     me_value ='__main__'}, {me_hash = 0, me_key = 0x0, me_value = 0x0},
     {me_hash = 0, me_key = 0x0, me_value = 0x0},
     {me_hash = -9177857982131165996, me_key = 'ctypes',
     me_value = <module at remote 0x7ffff7f14360>},
     {me_hash = -8518757509529533123, me_key = '__doc__', me_value = None},
     {me_hash = 0, me_key = 0x0, me_value = 0x0}, {
       me_hash = 6614918939584953775, me_key = '__package__', me_value = None}}}

Observe que os pretty-printers não chamam realmente ‘repr()’.  Para
tipos básicos, eles tentam corresponder ao seu resultado de perto.

Uma área que pode ser confusa é que a impressão personalizada para
alguns tipos se parece muito com a impressão embutida do GDB para tipos
padrão.  Por exemplo, a impressora bonita para um ‘int’ do Python (*note
PyLongObject: 588.*) fornece uma representação que não é distinguível de
um inteiro de nível de máquina regular.

     (gdb) p some_machine_integer
     $3 = 42

     (gdb) p some_python_integer
     $4 = 42

A estrutura interna pode ser revelada com um elenco para *note
PyLongObject: 588.*:

     (gdb) p *(PyLongObject*)algum_inteiro_python $5 = {ob_base = {ob_base = {ob_refcnt = 8, ob_type = 0x3dad39f5e0}, ob_size = 1}, ob_digit = {42}}

Uma confusão semelhante pode surgir com o tipo ‘str’, onde a saída se
parece muito com a a impressão embutida do gdb para ‘char *’.

     (gdb) p ptr_to_python_str
     $6 = '__builtins__'

O pretty-printer para instâncias de ‘str’ tem como padrão o uso de aspas
simples (assim como o ‘repr’ do Python para strings), enquanto o printer
padrão para valores de ‘char *’ usa aspas duplas e contém um endereço
hexadecimal.

     (gdb) p ptr_to_char_star
     $7 = 0x6d72c0 "hello world"

Novamente, os detalhes de implementação podem ser revelados com um
chamada a *note PyUnicodeObject: 794.*::.

     (gdb) p *(PyUnicodeObject*)$6
     $8 = {ob_base = {ob_refcnt = 33, ob_type = 0x3dad3a95a0}, length = 12,
     str = 0x7ffff2128500, hash = 7065186196740147912, state = 1, defenc = 0x0}


File: python.info,  Node: py-list,  Next: py-up e py-down,  Prev: Pretty-printers,  Up: Usando a extensão python-gdb

9.5.3.2 ‘py-list’
.................

     A extensão adiciona um comando ‘py-list’, que lista o código-fonte
     Python (se houver) para o quadro atual na thread selecionada.  A
     linha atual é marcada com um “>”:

          (gdb) py-list
           901        if options.profile:
           902            options.profile = False
           903            profile_me()
           904            return
           905
          >906        u = UI()
           907        if not u.quit:
           908            try:
           909                gtk.main()
           910            except KeyboardInterrupt:
           911                # properly quit on a keyboard interrupt...

     Use ‘py-list START’ para listar em um número de linha diferente
     dentro do código Python, e ‘py-list START,END’ para listar um
     intervalo específico de linhas dentro do código Python.


File: python.info,  Node: py-up e py-down,  Next: py-bt,  Prev: py-list,  Up: Usando a extensão python-gdb

9.5.3.3 ‘py-up’ e ‘py-down’
...........................

     Os comandos ‘py-up’ e ‘py-down’ são análogos aos comandos regulares
     ‘up’ e ‘down’ do GDB, mas tentam se mover no nível dos quadros do
     CPython, em vez dos quadros do C.

     GDB nem sempre consegue ler as informações relevantes do quadro,
     dependendo do nível de otimização com o qual o CPython foi
     compilado.  Internamente, os comandos procuram por quadros C que
     estão executando a função de avaliação de quadro padrão (ou seja, o
     laço do interpretador de bytecode principal dentro do CPython) e
     procuram o valor do ‘PyFrameObject *’ relacionado.

     Eles emitem o número do quadro (no nível C) dentro da thread.

     Por exemplo:

          (gdb) py-up
          #37 Frame 0x9420b04, for file /usr/lib/python2.6/site-packages/
          gnome_sudoku/main.py, line 906, in start_game ()
              u = UI()
          (gdb) py-up
          #40 Frame 0x948e82c, for file /usr/lib/python2.6/site-packages/
          gnome_sudoku/gnome_sudoku.py, line 22, in start_game(main=<module at remote 0xb771b7f4>)
              main.start_game()
          (gdb) py-up
          Unable to find an older python frame

     de forma estamos no topo da pilha do Python.

     Os números de quadro correspondem aos exibidos pelo comando padrão
     ‘backtrace’ do GDB. O comando ignora os quadros C que não estão
     executando código Python.

     Voltando para baixo:

          (gdb) py-down
          #37 Frame 0x9420b04, for file /usr/lib/python2.6/site-packages/gnome_sudoku/main.py, line 906, in start_game ()
              u = UI()
          (gdb) py-down
          #34 (unable to read python frame information)
          (gdb) py-down
          #23 (unable to read python frame information)
          (gdb) py-down
          #19 (unable to read python frame information)
          (gdb) py-down
          #14 Frame 0x99262ac, for file /usr/lib/python2.6/site-packages/gnome_sudoku/game_selector.py, line 201, in run_swallowed_dialog (self=<NewOrSavedGameSelector(new_game_model=<gtk.ListStore at remote 0x98fab44>, puzzle=None, saved_games=[{'gsd.auto_fills': 0, 'tracking': {}, 'trackers': {}, 'notes': [], 'saved_at': 1270084485, 'game': '7 8 0 0 0 0 0 5 6 0 0 9 0 8 0 1 0 0 0 4 6 0 0 0 0 7 0 6 5 0 0 0 4 7 9 2 0 0 0 9 0 1 0 0 0 3 9 7 6 0 0 0 1 8 0 6 0 0 0 0 2 8 0 0 0 5 0 4 0 6 0 0 2 1 0 0 0 0 0 4 5\n7 8 0 0 0 0 0 5 6 0 0 9 0 8 0 1 0 0 0 4 6 0 0 0 0 7 0 6 5 1 8 3 4 7 9 2 0 0 0 9 0 1 0 0 0 3 9 7 6 0 0 0 1 8 0 6 0 0 0 0 2 8 0 0 0 5 0 4 0 6 0 0 2 1 0 0 0 0 0 4 5', 'gsd.impossible_hints': 0, 'timer.__absolute_start_time__': <float at remote 0x984b474>, 'gsd.hints': 0, 'timer.active_time': <float at remote 0x984b494>, 'timer.total_time': <float at remote 0x984b464>}], dialog=<gtk.Dialog at remote 0x98faaa4>, saved_game_model=<gtk.ListStore at remote 0x98fad24>, sudoku_maker=<SudokuMaker(terminated=False, played=[], batch_siz...(truncated)
                      swallower.run_dialog(self.dialog)
          (gdb) py-down
          #11 Frame 0x9aead74, for file /usr/lib/python2.6/site-packages/gnome_sudoku/dialog_swallower.py, line 48, in run_dialog (self=<SwappableArea(running=<gtk.Dialog at remote 0x98faaa4>, main_page=0) at remote 0x98fa6e4>, d=<gtk.Dialog at remote 0x98faaa4>)
                      gtk.main()
          (gdb) py-down
          #8 (unable to read python frame information)
          (gdb) py-down
          Unable to find a newer python frame

     e estamos na parte inferior da pilha do Python.

     Observe que no Python 3.12 e versões mais recentes, o mesmo quadro
     de pilha C pode ser usado para vários quadros de pilha Python.
     Isso significa que ‘py-up’ e ‘py-down’ podem mover vários quadros
     Python de uma vez.  Por exemplo:

          (gdb) py-up
          #6 Frame 0x7ffff7fb62b0, for file /tmp/rec.py, line 5, in recursive_function (n=0)
             time.sleep(5)
          #6 Frame 0x7ffff7fb6240, for file /tmp/rec.py, line 7, in recursive_function (n=1)
             recursive_function(n-1)
          #6 Frame 0x7ffff7fb61d0, for file /tmp/rec.py, line 7, in recursive_function (n=2)
             recursive_function(n-1)
          #6 Frame 0x7ffff7fb6160, for file /tmp/rec.py, line 7, in recursive_function (n=3)
             recursive_function(n-1)
          #6 Frame 0x7ffff7fb60f0, for file /tmp/rec.py, line 7, in recursive_function (n=4)
             recursive_function(n-1)
          #6 Frame 0x7ffff7fb6080, for file /tmp/rec.py, line 7, in recursive_function (n=5)
             recursive_function(n-1)
          #6 Frame 0x7ffff7fb6020, for file /tmp/rec.py, line 9, in <module> ()
             recursive_function(5)
          (gdb) py-up
          Unable to find an older python frame


File: python.info,  Node: py-bt,  Next: py-print,  Prev: py-up e py-down,  Up: Usando a extensão python-gdb

9.5.3.4 ‘py-bt’
...............

     O comando ‘py-bt’ tenta mostrar uma rastreabilidade em nível Python
     da thread atual.

     Por exemplo:

          (gdb) py-bt
          #8 (unable to read python frame information)
          #11 Frame 0x9aead74, for file /usr/lib/python2.6/site-packages/gnome_sudoku/dialog_swallower.py, line 48, in run_dialog (self=<SwappableArea(running=<gtk.Dialog at remote 0x98faaa4>, main_page=0) at remote 0x98fa6e4>, d=<gtk.Dialog at remote 0x98faaa4>)
                      gtk.main()
          #14 Frame 0x99262ac, for file /usr/lib/python2.6/site-packages/gnome_sudoku/game_selector.py, line 201, in run_swallowed_dialog (self=<NewOrSavedGameSelector(new_game_model=<gtk.ListStore at remote 0x98fab44>, puzzle=None, saved_games=[{'gsd.auto_fills': 0, 'tracking': {}, 'trackers': {}, 'notes': [], 'saved_at': 1270084485, 'game': '7 8 0 0 0 0 0 5 6 0 0 9 0 8 0 1 0 0 0 4 6 0 0 0 0 7 0 6 5 0 0 0 4 7 9 2 0 0 0 9 0 1 0 0 0 3 9 7 6 0 0 0 1 8 0 6 0 0 0 0 2 8 0 0 0 5 0 4 0 6 0 0 2 1 0 0 0 0 0 4 5\n7 8 0 0 0 0 0 5 6 0 0 9 0 8 0 1 0 0 0 4 6 0 0 0 0 7 0 6 5 1 8 3 4 7 9 2 0 0 0 9 0 1 0 0 0 3 9 7 6 0 0 0 1 8 0 6 0 0 0 0 2 8 0 0 0 5 0 4 0 6 0 0 2 1 0 0 0 0 0 4 5', 'gsd.impossible_hints': 0, 'timer.__absolute_start_time__': <float at remote 0x984b474>, 'gsd.hints': 0, 'timer.active_time': <float at remote 0x984b494>, 'timer.total_time': <float at remote 0x984b464>}], dialog=<gtk.Dialog at remote 0x98faaa4>, saved_game_model=<gtk.ListStore at remote 0x98fad24>, sudoku_maker=<SudokuMaker(terminated=False, played=[], batch_siz...(truncated)
                      swallower.run_dialog(self.dialog)
          #19 (unable to read python frame information)
          #23 (unable to read python frame information)
          #34 (unable to read python frame information)
          #37 Frame 0x9420b04, for file /usr/lib/python2.6/site-packages/gnome_sudoku/main.py, line 906, in start_game ()
              u = UI()
          #40 Frame 0x948e82c, for file /usr/lib/python2.6/site-packages/gnome_sudoku/gnome_sudoku.py, line 22, in start_game (main=<module at remote 0xb771b7f4>)
              main.start_game()

     Os números de quadro correspondem aos exibidos pelo comando padrão
     ‘backtrace’ do GDB.


File: python.info,  Node: py-print,  Next: py-locals,  Prev: py-bt,  Up: Usando a extensão python-gdb

9.5.3.5 ‘py-print’
..................

     O comando ‘py-print’ procura um nome em Python e tenta imprimi-lo.
     Ele procura em locais dentro da thread atual, depois em globais e,
     finalmente, em embutidos:

          (gdb) py-print self
          local 'self' = <SwappableArea(running=<gtk.Dialog at remote 0x98faaa4>,
          main_page=0) at remote 0x98fa6e4>
          (gdb) py-print __name__
          global '__name__' = 'gnome_sudoku.dialog_swallower'
          (gdb) py-print len
          builtin 'len' = <built-in function len>
          (gdb) py-print scarlet_pimpernel
          'scarlet_pimpernel' not found

     Se o quadro C atual corresponder a vários quadros Python,
     ‘py-print’ considera apenas o primeiro.


File: python.info,  Node: py-locals,  Prev: py-print,  Up: Usando a extensão python-gdb

9.5.3.6 ‘py-locals’
...................

     O comando ‘py-locals’ busca todas as variáveis locais do Python no
     quadro Python atual na thread selecionada e imprime suas
     representações:

          (gdb) py-locals
          self = <SwappableArea(running=<gtk.Dialog at remote 0x98faaa4>,
          main_page=0) at remote 0x98fa6e4>
          d = <gtk.Dialog at remote 0x98faaa4>

     Se o quadro C atual corresponder a vários quadros Python, serão
     mostrados os locais de todos eles:

          (gdb) py-locals
          Locals for recursive_function
          n = 0
          Locals for recursive_function
          n = 1
          Locals for recursive_function
          n = 2
          Locals for recursive_function
          n = 3
          Locals for recursive_function
          n = 4
          Locals for recursive_function
          n = 5
          Locals for <module>


File: python.info,  Node: Uso com comandos do GDB,  Prev: Usando a extensão python-gdb,  Up: Depurando extensões de API C e internos do CPython com GDB

9.5.4 Uso com comandos do GDB
-----------------------------

Os comandos de extensão complementam os comandos embutidos do GDB. Por
exemplo, você pode usar os números de quadro mostrados por ‘py-bt’ com o
comando ‘frame’ para ir a um quadro específico dentro da thread
selecionada, assim:

     (gdb) py-bt
     (output snipped)
     #68 Frame 0xaa4560, for file Lib/test/regrtest.py, line 1548, in <module> ()
             main()
     (gdb) frame 68
     #68 0x00000000004cd1e6 in PyEval_EvalFrameEx (f=Frame 0xaa4560, for file Lib/test/regrtest.py, line 1548, in <module> (), throwflag=0) at Python/ceval.c:2665
     2665                            x = call_function(&sp, oparg);
     (gdb) py-list
     1543        # Run the tests in a context manager that temporary changes the CWD to a
     1544        # temporary and writable directory. If it's not possible to create or
     1545        # change the CWD, the original CWD will be used. The original CWD is
     1546        # available from test_support.SAVEDCWD.
     1547        with test_support.temp_cwd(TESTCWD, quiet=True):
     >1548            main()

O comando ‘info threads’ fornecerá uma lista das threads dentro do
processo, e você pode usar o comando ‘thread’ para selecionar uma
diferente:

     (gdb) info threads
       105 Thread 0x7fffefa18710 (LWP 10260)  sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:86
       104 Thread 0x7fffdf5fe710 (LWP 10259)  sem_wait () at ../nptl/sysdeps/unix/sysv/linux/x86_64/sem_wait.S:86
     * 1 Thread 0x7ffff7fe2700 (LWP 10145)  0x00000038e46d73e3 in select () at ../sysdeps/unix/syscall-template.S:82

Você pode usar ‘thread apply all COMANDO’ ou (‘t a a COMANDO’ para
abreviar) para executar um comando em todas as threads.  Com ‘py-bt’,
isso permite que você veja o que cada thread está fazendo no nível do
Python:

     (gdb) t a a py-bt

     Thread 105 (Thread 0x7fffefa18710 (LWP 10260)):
     #5 Frame 0x7fffd00019d0, for file /home/david/coding/python-svn/Lib/threading.py, line 155, in _acquire_restore (self=<_RLock(_Verbose__verbose=False, _RLock__owner=140737354016512, _RLock__block=<thread.lock at remote 0x858770>, _RLock__count=1) at remote 0xd7ff40>, count_owner=(1, 140737213728528), count=1, owner=140737213728528)
             self.__block.acquire()
     #8 Frame 0x7fffac001640, for file /home/david/coding/python-svn/Lib/threading.py, line 269, in wait (self=<_Condition(_Condition__lock=<_RLock(_Verbose__verbose=False, _RLock__owner=140737354016512, _RLock__block=<thread.lock at remote 0x858770>, _RLock__count=1) at remote 0xd7ff40>, acquire=<instancemethod at remote 0xd80260>, _is_owned=<instancemethod at remote 0xd80160>, _release_save=<instancemethod at remote 0xd803e0>, release=<instancemethod at remote 0xd802e0>, _acquire_restore=<instancemethod at remote 0xd7ee60>, _Verbose__verbose=False, _Condition__waiters=[]) at remote 0xd7fd10>, timeout=None, waiter=<thread.lock at remote 0x858a90>, saved_state=(1, 140737213728528))
                 self._acquire_restore(saved_state)
     #12 Frame 0x7fffb8001a10, for file /home/david/coding/python-svn/Lib/test/lock_tests.py, line 348, in f ()
                 cond.wait()
     #16 Frame 0x7fffb8001c40, for file /home/david/coding/python-svn/Lib/test/lock_tests.py, line 37, in task (tid=140737213728528)
                     f()

     Thread 104 (Thread 0x7fffdf5fe710 (LWP 10259)):
     #5 Frame 0x7fffe4001580, for file /home/david/coding/python-svn/Lib/threading.py, line 155, in _acquire_restore (self=<_RLock(_Verbose__verbose=False, _RLock__owner=140737354016512, _RLock__block=<thread.lock at remote 0x858770>, _RLock__count=1) at remote 0xd7ff40>, count_owner=(1, 140736940992272), count=1, owner=140736940992272)
             self.__block.acquire()
     #8 Frame 0x7fffc8002090, for file /home/david/coding/python-svn/Lib/threading.py, line 269, in wait (self=<_Condition(_Condition__lock=<_RLock(_Verbose__verbose=False, _RLock__owner=140737354016512, _RLock__block=<thread.lock at remote 0x858770>, _RLock__count=1) at remote 0xd7ff40>, acquire=<instancemethod at remote 0xd80260>, _is_owned=<instancemethod at remote 0xd80160>, _release_save=<instancemethod at remote 0xd803e0>, release=<instancemethod at remote 0xd802e0>, _acquire_restore=<instancemethod at remote 0xd7ee60>, _Verbose__verbose=False, _Condition__waiters=[]) at remote 0xd7fd10>, timeout=None, waiter=<thread.lock at remote 0x858860>, saved_state=(1, 140736940992272))
                 self._acquire_restore(saved_state)
     #12 Frame 0x7fffac001c90, for file /home/david/coding/python-svn/Lib/test/lock_tests.py, line 348, in f ()
                 cond.wait()
     #16 Frame 0x7fffac0011c0, for file /home/david/coding/python-svn/Lib/test/lock_tests.py, line 37, in task (tid=140736940992272)
                     f()

     Thread 1 (Thread 0x7ffff7fe2700 (LWP 10145)):
     #5 Frame 0xcb5380, for file /home/david/coding/python-svn/Lib/test/lock_tests.py, line 16, in _wait ()
         time.sleep(0.01)
     #8 Frame 0x7fffd00024a0, for file /home/david/coding/python-svn/Lib/test/lock_tests.py, line 378, in _check_notify (self=<ConditionTests(_testMethodName='test_notify', _resultForDoCleanups=<TestResult(_original_stdout=<cStringIO.StringO at remote 0xc191e0>, skipped=[], _mirrorOutput=False, testsRun=39, buffer=False, _original_stderr=<file at remote 0x7ffff7fc6340>, _stdout_buffer=<cStringIO.StringO at remote 0xc9c7f8>, _stderr_buffer=<cStringIO.StringO at remote 0xc9c790>, _moduleSetUpFailed=False, expectedFailures=[], errors=[], _previousTestClass=<type at remote 0x928310>, unexpectedSuccesses=[], failures=[], shouldStop=False, failfast=False) at remote 0xc185a0>, _threads=(0,), _cleanups=[], _type_equality_funcs={<type at remote 0x7eba00>: <instancemethod at remote 0xd750e0>, <type at remote 0x7e7820>: <instancemethod at remote 0xd75160>, <type at remote 0x7e30e0>: <instancemethod at remote 0xd75060>, <type at remote 0x7e7d20>: <instancemethod at remote 0xd751e0>, <type at remote 0x7f19e0...(truncated)
             _wait()


File: python.info,  Node: Enum,  Next: Programação Funcional,  Prev: Depurando extensões de API C e internos do CPython com GDB,  Up: Python HOWTOs

9.6 Enum
========

Uma *note Enum: 630. é um conjunto de nomes simbólicos vinculados a
valores únicos.  São similares a variáveis globais, mas eles oferecem
uma *note repr(): 800. mais útil, agrupamento, segurança de tipo e
alguns outros recursos.

Eles são mais úteis quando você tem uma variável que pode ter uma
seleção limitada de valores.  Por exemplo, os dias da semana:

     >>> from enum import Enum
     >>> class DiaDaSemana(Enum):
     ...     SEGUNDA = 1
     ...     TERÇA = 2
     ...     QUARTA = 3
     ...     QUINTA = 4
     ...     SEXTA = 5
     ...     SÁBADO = 6
     ...     DOMINGO = 7

Ou talvez as cores primárias RGB:

     >>> from enum import Enum
     >>> class Cor(Enum):
     ...     RED = 1
     ...     GREEN = 2
     ...     BLUE = 3

Como você pode ver, criar um *note Enum: 630. é tão simples quanto
escrever uma classe que herda do próprio *note Enum: 630.

     Nota: Maiúsculas em membros de Enums

     Como os Enums são usados para representar constantes, e para ajudar
     a evitar problemas com nomes conflitando entre métodos/atributos de
     classes mixin e nomes enum, nós fortemente recomendamos o uso de
     nomes em UPPER_CASE (em caixa alta) para membros, e usaremos esse
     estilo em nossos exemplos.

Dependendo da natureza do enum, o valor de um membro pode ou não ser
importante.  Mas, de qualquer forma, esse valor pode ser usado para
obter o membro correspondente:

     >>> DiaDaSemana(3)
     <DiaDaSemana.QUARTA: 3>

Como você pode ver, o ‘repr()’ de um membro mostra o nome do enum, o
nome do membro e o valor.  O ‘str()’ de um membro mostra apenas o nome
do enum e o nome do membro:

     >>> print(DiaDaSemana.QUINTA)
     DiaDaSemana.QUINTA

O 'tipo' de um membro de enumeração é o enum ao qual ele pertence:

     >>> type(DiaDaSemana.SEGUNDA)
     <enum 'DiaDaSemana'>
     >>> isinstance(DiaDaSemana.SEXTA, DiaDaSemana)
     True

Os membros do Enum têm um atributo que contém apenas seu ‘name’:

     >>> print(DiaDaSemana.TERÇA.name)
     TERÇA

Da mesma forma, eles têm um atributo para seu ‘value’:

     >>> DiaDaSemana.QUARTA.value
     3

Ao contrário de muitas linguagens que tratam enumerações apenas como
pares de nome/valor, Enums do Python podem ter comportamento adicionado.
Por exemplo, *note datetime.date: 1cd. tem dois métodos para retornar o
dia da semana: *note weekday(): 25ef. e *note isoweekday(): 25f0.  A
diferença é que um deles conta de 0 a 6 e o outro de 1 a 7.  Em vez de
tomar conta disso nós mesmos, podemos adicionar um método ao enum de
‘DiaDaSemana’ para extrair o dia da instância de *note date: 1cd. e
retornar o membro enum correspondente:

     @classmethod
     def from_date(cls, date):
         return cls(date.isoweekday())

A enum ‘DiaDaSemana’ completa fica então assim:

     >>> class DiaDaSemana(Enum):
     ...     SEGUNDA = 1
     ...     TERÇA = 2
     ...     QUARTA = 3
     ...     QUINTA = 4
     ...     SEXTA = 5
     ...     SÁBADO = 6
     ...     DOMINGO = 7
     ...     #
     ...     @classmethod
     ...     def from_date(cls, date):
     ...         return cls(date.isoweekday())

Agora podemos descobrir que dia é hoje!  Observe:

     >>> from datetime import date
     >>> Weekday.from_date(date.today())
     <Weekday.TUESDAY: 2>

Claro, se você estiver lendo isso em outro dia da semana, você verá esse
respectivo dia.

Essa enum ‘DiaDaSemana’ é ótima se a nossa variável precisar somente de
um único dia, mas e se precisarmos de vários?  Talvez estejamos
escrevendo uma função para organizar tarefas ao longo da semana, e não
queremos usar uma *note list: 611. – poderíamos ao invés disso usar um
tipo diferente de *note Enum: 630.:

     >>> from enum import Flag
     >>> class DiaDaSemana(Flag):
     ...     SEGUNDA = 1
     ...     TERÇA = 2
     ...     QUARTA = 4
     ...     QUINTA = 8
     ...     SEXTA = 16
     ...     SÁBADO = 32
     ...     DOMINGO = 64

Nós mudamos duas coisas: estamos herdando de *note Flag: 623.
(sinalizador), e os valores são todos potências de 2.

Assim como a enum ‘DiaDaSemana’ original acima, podemos selecionar um
item de cada vez:

     >>> primeiro_dia_útil = DiaDaSemana.SEGUNDA
     >>> primeiro_dia_útil
     <DiaDaSemana.SEGUNDA: 1>

Porém, a *note Flag: 623. também nos permite combinar vários membros em
uma única variável:

     >>> fim_de_semana = DiaDaSemana.SÁBADO | DiaDaSemana.DOMINGO
     >>> fim_de_semana
     <DiaDaSemana.SÁBADO|DOMINGO: 96>

Você pode até mesmo iterar sobre uma variável *note Flag: 623.:

     >>> for dia in fim_de_semana:
     ...     print(dia)
     DiaDaSemana.SÁBADO
     DiaDaSemana.DOMINGO

Certo, vamos configurar algumas tarefas domésticas:

     >>> tarefas_do_joão = {
     ...     'alimentar o gato': DiaDaSemana.SEGUNDA | DiaDaSemana.QUARTA | DiaDaSemana.SEXTA,
     ...     'lavar a louça': DiaDaSemana.TERÇA | DiaDaSemana.QUINTA,
     ...     'responder perguntas no SO': DiaDaSemana.SÁBADO,
     ...     }

E a função para mostrar as tarefas domésticas para um determinado dia:

     >>> def mostrar_tarefas(tarefas, dia):
     ...     for tarefa, dias in tarefas.items():
     ...         if dia in dias:
     ...             print(tarefa)
     ...
     >>> mostrar_tarefas(tarefas_do_joão, DiaDaSemana.SÁBADO)
     responder perguntas no SO

Quando os valores em si dos membros não forem importantes, você pode
economizar trabalho e usar *note auto(): cbc. para eles:

     >>> from enum import auto
     >>> class DiaDaSemana(Flag):
     ...     SEGUNDA = auto()
     ...     TERÇA = auto()
     ...     QUARTA = auto()
     ...     QUINTA = auto()
     ...     SEXTA = auto()
     ...     SÁBADO = auto()
     ...     DOMINGO = auto()
     ...     FIM_DE_SEMANA = SÁBADO | DOMINGO

* Menu:

* Acesso programático aos membros da enumeração e seus atributos.: Acesso programático aos membros da enumeração e seus atributos.
* Membros e valores duplicados em enums::
* Garantindo valores únicos na enumeração::
* Usando valores automáticos::
* Iteração: Iteração<2>.
* Comparações: Comparações<3>.
* Membros e atributos permitidos em enumerações::
* Herança restrita de Enum::
* Suporte a dataclass::
* Pickling::
* API funcional: API funcional<3>.
* Derived Enumerations::
* When to use __new__() vs. __init__(): When to use __new__ vs __init__.
* How are Enums and Flags different?::
* Enum Cookbook::
* Subclassing EnumType::


File: python.info,  Node: Acesso programático aos membros da enumeração e seus atributos,  Next: Membros e valores duplicados em enums,  Up: Enum

9.6.1 Acesso programático aos membros da enumeração e seus atributos.
---------------------------------------------------------------------

Em alguns momentos, é util ter acesso aos membros na enumeração de forma
programática (ou seja, em situações em que ‘Cor.RED’ não é adequado
porque a cor exata não é conhecida no momento da escrita do programa).
Classes ‘Enum’ permitem esse tipo de acesso:

     >>> Cor(1)
     <Cor.RED: 1>
     >>> Cor(3)
     <Cor.BLUE: 3>

Se você deseja ter acesso aos membros do enum pelo 'nome', use o acesso
por itens:

     >>> Cor['VERMELHO']
     <Cor.VERMELHO: 1>
     >>> Color['VERDE']
     <Cor.VERDE: 2>

Dado um membro de um enum, se você precisar do seu ‘name’ ou ‘value’:

     >>> membro = Cor.VERMELHO
     >>> membro.name
     'VERMELHO'
     >>> membro.value
     1


File: python.info,  Node: Membros e valores duplicados em enums,  Next: Garantindo valores únicos na enumeração,  Prev: Acesso programático aos membros da enumeração e seus atributos,  Up: Enum

9.6.2 Membros e valores duplicados em enums
-------------------------------------------

Ter dois membros de um enum com o mesmo nome é inválido:

     >>> class Forma(Enum):
     ...     QUADRADO = 2
     ...     QUADRADO = 3
     ...
     Traceback (most recent call last):
     ...
     TypeError: 'QUADRADO' already defined as 2

Porém, um membro do enum pode ter outros nomes associados a ele.  Dados
dois membros ‘A’ e ‘B’ com o mesmo valor (e ‘A’ definido primeiro), ‘B’
é um apelido para o membro ‘A’.  A busca pelo membro associado ao valor
de ‘A’ retorna o membro ‘A’.  A busca pelo membro com o nome de ‘A’
retorna o membro ‘A’.  A busca pelo membro com o nome de ‘B’ também
retorna o membro ‘A’:

     >>> class Forma(Enum):
     ...     QUADRADO = 2
     ...     DIAMANTE = 1
     ...     CÍRCULO = 3
     ...     APELIDO_PARA_O_QUADRADO = 2
     ...
     >>> Forma.QUADRADO
     <Forma.QUADRADO: 2>
     >>> Forma.APELIDO_PARA_O_QUADRADO
     <Forma.QUADRADO: 2>
     >>> Forma(2)
     <Forma.QUADRADO: 2>

     Nota: Tentar criar um membro com o mesmo nome de um atributo já
     definido (outro membro, um método, etc.)  ou tentar criar um
     atributo com o mesmo nome de um membro não é permitido.


File: python.info,  Node: Garantindo valores únicos na enumeração,  Next: Usando valores automáticos,  Prev: Membros e valores duplicados em enums,  Up: Enum

9.6.3 Garantindo valores únicos na enumeração
---------------------------------------------

Por padrão, enumerações permitem múltiplos nomes como apelidos para o
mesmo valor.  Quando esse comportamento não é desejado, você pode usar o
decorador *note unique(): 275c.:

     >>> from enum import Enum, unique
     >>> @unique
     ... class Errado(Enum):
     ...     UM = 1
     ...     DOIS = 2
     ...     TRES = 3
     ...     QUATRO = 3
     ...
     Traceback (most recent call last):
     ...
     ValueError: duplicate values found in <enum 'Errado'>: QUATRO -> TRES


File: python.info,  Node: Usando valores automáticos,  Next: Iteração<2>,  Prev: Garantindo valores únicos na enumeração,  Up: Enum

9.6.4 Usando valores automáticos
--------------------------------

Se o valor em si não é importante, você pode usar *note auto: cbc.:

     >>> from enum import Enum, auto
     >>> class Cor(Enum):
     ...     RED = auto()
     ...     BLUE = auto()
     ...     GREEN = auto()
     ...
     >>> [membro.value for membro in Cor]
     [1, 2, 3]

Os valores são escolhidos pelo *note _generate_next_value_(): 2770, que
pode ser substituído:

     >>> class AutoName(Enum):
     ...     @staticmethod
     ...     def _generate_next_value_(name, start, count, last_values):
     ...         return name
     ...
     >>> class Ordinal(AutoName):
     ...     NORTE = auto()
     ...     SUL = auto()
     ...     LESTE = auto()
     ...     OESTE = auto()
     ...
     >>> [membro.value for membro in Ordinal]
     ['NORTE', 'SUL', 'LESTE', 'OESTE']

     Nota: O método *note _generate_next_value_(): 2770. deve ser
     definido antes de qualquer membro.


File: python.info,  Node: Iteração<2>,  Next: Comparações<3>,  Prev: Usando valores automáticos,  Up: Enum

9.6.5 Iteração
--------------

Iterar sobre os membros de um enum não fornece os apelidos:

     >>> list(Forma)
     [<Forma.QUADRADO: 2>, <Forma.DIAMANTE: 1>, <Forma.CÍRCULO: 3>]
     >>> list(DiaDaSemana)
     [<DiaDaSemana.SEGUNDA: 1>, <DiaDaSemana.TERÇA: 2>, <DiaDaSemana.QUARTA: 4>, <DiaDaSemana.QUINTA: 8>, <DiaDaSemana.SEXTA: 16>, <DiaDaSemana.SÁBADO: 32>, <DiaDaSemana.DOMINGO: 64>]

Note que os apelidos ‘Forma.APELIDO_PARA_O_QUADRADO’ e
‘DiaDaSemana.FIM_DE_SEMANA’ não são mostrados.

O atributo especial ‘__members__’ é um mapeamento ordenado de somente
leitura dos nomes para os membros.  Isso inclui todos os nomes definidos
na enumeração, incluindo os apelidos:

     >>> for nome, membroin Forma.__members__.items():
     ...     nome, membro
     ...
     ('QUADRADO', <Forma.QUADRADO: 2>)
     ('DIAMANTE', <Forma.DIAMANTE: 1>)
     ('CÍRCULO', <Forma.CÍRCULO: 3>)
     ('APELIDO_PARA_O_QUADRADO', <Forma.QUADRADO: 2>)

O atributo ‘__members__’ pode ser usado para um acesso programático
detalhado aos membros da enumeração.  Por exemplo, achar todos os
apelidos:

     >>> [nome for nome, membro in Forma.__members__.items() if membro.name != nome]
     ['APELIDO_PARA_O_QUADRADO']

     Nota: Apelidos em sinalizadores incluem valores com múltiplos itens
     ao mesmo tempo, como ‘3’, e nenhum item definido, isto é, ‘0’.


File: python.info,  Node: Comparações<3>,  Next: Membros e atributos permitidos em enumerações,  Prev: Iteração<2>,  Up: Enum

9.6.6 Comparações
-----------------

Membros de uma enumeração são comparados por identidade:

     >>> Color.VERMELHO is Color.VERMELHO
     True
     >>> Color.VERMELHO is Color.AZUL
     False
     >>> Color.VERMELHO is not Color.AZUL
     True

Comparações ordenadas entre valores de enumerações 'não' são suportadas.
Membros Enum não são inteiros (porém, veja *note IntEnum: 534d. abaixo):

     >>> Color.VERMELHO < Color.AZUL
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: '<' not supported between instances of 'Color' and 'Color'

Entretanto, comparações de igualdade são definidas:

     >>> Color.AZUL == Color.VERMELHO
     False
     >>> Color.AZUL != Color.VERMELHO
     True
     >>> Color.AZUL == Color.AZUL
     True

Comparações com valores que não sejam de enumeração sempre resultarão em
“não igual” (novamente, *note IntEnum: d00. foi explicitamente projetado
para se comportar de maneira diferente, veja abaixo):

     >>> Color.AZUL == 2
     False

     Aviso: É possivel recarregar módulos – se um módulo recarregado
     contém enums, eles serão recriados, e os novos membros não podem
     ser comparados de forma identifica/igual a membros originais.


File: python.info,  Node: Membros e atributos permitidos em enumerações,  Next: Herança restrita de Enum,  Prev: Comparações<3>,  Up: Enum

9.6.7 Membros e atributos permitidos em enumerações
---------------------------------------------------

A maioria dos exemplos acima usa inteiros como valores para os enums.
Usar inteiros é simples e prático (isso é disponibilizado como padrão
pela *note API funcional: 534f.), mas não é a única aplicação.  Na
grande maioria dos caso de uso, não importa o valor de fato que um enum
possui.  Mas se o valor 'é' importante, enums podem ser valores
arbitrários.

Enumerações são classes Python, e podem ter métodos e até mesmo métodos
especiais como de usual.  Se temos essa enumeração:

     >>> class Mood(Enum):
     ...     FUNKY = 1
     ...     HAPPY = 3
     ...
     ...     def describe(self):
     ...         # self is the member here
     ...         return self.name, self.value
     ...
     ...     def __str__(self):
     ...         return 'my custom str! {0}'.format(self.value)
     ...
     ...     @classmethod
     ...     def favorite_mood(cls):
     ...         # cls here is the enumeration
     ...         return cls.HAPPY
     ...

Então:

     >>> Mood.favorite_mood()
     <Mood.HAPPY: 3>
     >>> Mood.HAPPY.describe()
     ('HAPPY', 3)
     >>> str(Mood.FUNKY)
     'my custom str! 1'

As regras para o que é permitido são: nomes que começam e terminam com
underline único são reservados para enum e não podem ser usados; todos
os outros atributos definidos dentro de uma enumeração irão se tornar
membros dessa enumeração, com exceção dos métodos especiais ( *note
__str__(): 61d, *note __add__(): 2121, etc.), descritores (métodos
também são descritores), e nomes de variáveis listadas em *note
_ignore_: 276e.

Nota: se a sua enumeração define *note __new__(): 580. e/ou *note
__init__(): 6b0, qualquer valor(es) dado ao membro da enum será passado
para esses métodos.  Veja *note Planet: 5350, por exemplo.

     Nota: O método *note __new__(): 580, se definido, é usado durante a
     criação dos membros do Enum; em seguida, ele é substituído pelo
     *note __new__(): 580. do Enum, que é usado após a criação da classe
     para buscar por membros existentes.  Consulte *note When to use
     __new__() vs.  __init__(): 5351. para mais detalhes.


File: python.info,  Node: Herança restrita de Enum,  Next: Suporte a dataclass,  Prev: Membros e atributos permitidos em enumerações,  Up: Enum

9.6.8 Herança restrita de Enum
------------------------------

Uma nova classe *note Enum: 630. deve ter uma classe enum base, até um
tipo de dado concreto, e quantas classes mixin baseadas em *note object:
a96. forem necessárias.  A ordem dessas classes base é:

     class EnumName([mix-in, ...,] [data-type,] base-enum):
         pass

Além disso, criar uma subclasse de uma enumeração é permitido apenas se
a enumeração não define nenhum membro.  Portanto is,so é proibido:

     >>> class MoreColor(Color):
     ...     PINK = 17
     ...
     Traceback (most recent call last):
     ...
     TypeError: <enum 'MoreColor'> cannot extend <enum 'Color'>

Mas isso é permitido:

     >>> class Foo(Enum):
     ...     def some_behavior(self):
     ...         pass
     ...
     >>> class Bar(Foo):
     ...     HAPPY = 1
     ...     SAD = 2
     ...

Permitir a criação de subclasses de enums que definem membros levaria a
violação de alguns invariantes importantes de tipos e instâncias.  Por
outro lado, faz sentido permitir o compartilhamento de algum
comportamento comum entre um grupo de enumerações.  (Veja *note
OrderedEnum: 5353, por exemplo.)


File: python.info,  Node: Suporte a dataclass,  Next: Pickling,  Prev: Herança restrita de Enum,  Up: Enum

9.6.9 Suporte a dataclass
-------------------------

Ao herdar de uma *note dataclass: 1cb, o *note __repr__(): 1882. omite o
nome da classe herdada.  Por exemplo:

     >>> from dataclasses import dataclass, field
     >>> @dataclass
     ... class CreatureDataMixin:
     ...     size: str
     ...     legs: int
     ...     tail: bool = field(repr=False, default=True)
     ...
     >>> class Creature(CreatureDataMixin, Enum):
     ...     BEETLE = 'small', 6
     ...     DOG = 'medium', 4
     ...
     >>> Creature.DOG
     <Creature.DOG: size='medium', legs=4>

Use o argumento ‘repr=False’ de *note dataclass(): 1cb. para utilizar o
*note repr(): 800. padrão.

Alterado na versão 3.12: Somente os campos da dataclass são exibidos na
área de valor, e não o nome da dataclass.

     Nota: Não há suporte a adicionar o decorador *note dataclass():
     1cb. a *note Enum: 630. e suas subclasses.  Isso não irá levantar
     erros, mas poderá produzir resultados muito estranhos em tempo de
     execução, como membros sendo considerados iguais entre si.

          >>> @dataclass               # don't do this: it does not make any sense
          ... class Color(Enum):
          ...    RED = 1
          ...    BLUE = 2
          ...
          >>> Color.RED is Color.BLUE
          False
          >>> Color.RED == Color.BLUE  # problem is here: they should not be equal
          True


File: python.info,  Node: Pickling,  Next: API funcional<3>,  Prev: Suporte a dataclass,  Up: Enum

9.6.10 Pickling
---------------

Enumerações podem ser serializadas e desserializadas.

     >>> from test.test_enum import Fruit
     >>> from pickle import dumps, loads
     >>> Fruit.TOMATO is loads(dumps(Fruit.TOMATO))
     True

As restrições usuais para serialização se aplicam: enums serializáveis
devem ser definidas no nível mais alto de um módulo, já que para fazer a
desserialização eles devem ser importados daquele módulo.

     Nota: With pickle protocol version 4 it is possible to easily
     pickle enums nested in other classes.

It is possible to modify how enum members are pickled/unpickled by
defining *note __reduce_ex__(): 16a1. in the enumeration class.  The
default method is by-value, but enums with complicated values may want
to use by-name:

     >>> import enum
     >>> class MyEnum(enum.Enum):
     ...     __reduce_ex__ = enum.pickle_by_enum_name

     Nota: Using by-name for flags is not recommended, as unnamed
     aliases will not unpickle.


File: python.info,  Node: API funcional<3>,  Next: Derived Enumerations,  Prev: Pickling,  Up: Enum

9.6.11 API funcional
--------------------

A classe *note Enum: 630. é chamável, fornecendo a API funcional a
seguir:

     >>> Animal = Enum('Animal', 'ANT BEE CAT DOG')
     >>> Animal
     <enum 'Animal'>
     >>> Animal.ANT
     <Animal.ANT: 1>
     >>> list(Animal)
     [<Animal.ANT: 1>, <Animal.BEE: 2>, <Animal.CAT: 3>, <Animal.DOG: 4>]

The semantics of this API resemble *note namedtuple: 1ca.  The first
argument of the call to *note Enum: 630. is the name of the enumeration.

The second argument is the 'source' of enumeration member names.  It can
be a whitespace-separated string of names, a sequence of names, a
sequence of 2-tuples with key/value pairs, or a mapping (e.g.
dictionary) of names to values.  The last two options enable assigning
arbitrary values to enumerations; the others auto-assign increasing
integers starting with 1 (use the ‘start’ parameter to specify a
different starting value).  A new class derived from *note Enum: 630. is
returned.  In other words, the above assignment to ‘Animal’ is
equivalent to:

     >>> class Animal(Enum):
     ...     ANT = 1
     ...     BEE = 2
     ...     CAT = 3
     ...     DOG = 4
     ...

The reason for defaulting to ‘1’ as the starting number and not ‘0’ is
that ‘0’ is ‘False’ in a boolean sense, but by default enum members all
evaluate to ‘True’.

Pickling enums created with the functional API can be tricky as frame
stack implementation details are used to try and figure out which module
the enumeration is being created in (e.g.  it will fail if you use a
utility function in a separate module, and also may not work on
IronPython or Jython).  The solution is to specify the module name
explicitly as follows:

     >>> Animal = Enum('Animal', 'ANT BEE CAT DOG', module=__name__)

     Aviso: If ‘module’ is not supplied, and Enum cannot determine what
     it is, the new Enum members will not be unpicklable; to keep errors
     closer to the source, pickling will be disabled.

The new pickle protocol 4 also, in some circumstances, relies on *note
__qualname__: 20b6. being set to the location where pickle will be able
to find the class.  For example, if the class was made available in
class SomeData in the global scope:

     >>> Animal = Enum('Animal', 'ANT BEE CAT DOG', qualname='SomeData.Animal')

A assinatura completa é:

     Enum(
         value='NewEnumName',
         names=<...>,
         *,
         module='...',
         qualname='...',
         type=<mixed-in class>,
         start=1,
         )

   * 'value': What the new enum class will record as its name.

   * 'names': The enum members.  This can be a whitespace- or
     comma-separated string (values will start at 1 unless otherwise
     specified):

          'RED GREEN BLUE' | 'RED,GREEN,BLUE' | 'RED, GREEN, BLUE'

     or an iterator of names:

          ['VERMELHO', 'VERDE', 'AZUL']

     or an iterator of (name, value) pairs:

          [('CYAN', 4), ('MAGENTA', 5), ('YELLOW', 6)]

     or a mapping:

          {'CHARTREUSE': 7, 'SEA_GREEN': 11, 'ROSEMARY': 42}

   * 'module': name of module where new enum class can be found.

   * 'qualname': where in module new enum class can be found.

   * 'type': type to mix in to new enum class.

   * 'start': number to start counting at if only names are passed in.

Alterado na versão 3.5: The 'start' parameter was added.


File: python.info,  Node: Derived Enumerations,  Next: When to use __new__ vs __init__,  Prev: API funcional<3>,  Up: Enum

9.6.12 Derived Enumerations
---------------------------

* Menu:

* IntEnum::
* StrEnum::
* IntFlag::
* Sinalizador::
* Outros: Outros<2>.


File: python.info,  Node: IntEnum,  Next: StrEnum,  Up: Derived Enumerations

9.6.12.1 IntEnum
................

The first variation of *note Enum: 630. that is provided is also a
subclass of *note int: 257.  Members of an *note IntEnum: d00. can be
compared to integers; by extension, integer enumerations of different
types can also be compared to each other:

     >>> from enum import IntEnum
     >>> class Shape(IntEnum):
     ...     CIRCLE = 1
     ...     SQUARE = 2
     ...
     >>> class Request(IntEnum):
     ...     POST = 1
     ...     GET = 2
     ...
     >>> Shape == 1
     False
     >>> Shape.CIRCLE == 1
     True
     >>> Shape.CIRCLE == Request.POST
     True

However, they still can’t be compared to standard *note Enum: 630.
enumerations:

     >>> class Shape(IntEnum):
     ...     CIRCLE = 1
     ...     SQUARE = 2
     ...
     >>> class Color(Enum):
     ...     RED = 1
     ...     GREEN = 2
     ...
     >>> Shape.CIRCLE == Color.RED
     False

*note IntEnum: d00. values behave like integers in other ways you’d
expect:

     >>> int(Shape.CIRCLE)
     1
     >>> ['a', 'b', 'c'][Shape.CIRCLE]
     'b'
     >>> [i for i in range(Shape.SQUARE)]
     [0, 1]


File: python.info,  Node: StrEnum,  Next: IntFlag,  Prev: IntEnum,  Up: Derived Enumerations

9.6.12.2 StrEnum
................

The second variation of *note Enum: 630. that is provided is also a
subclass of *note str: 44c.  Members of a *note StrEnum: 61a. can be
compared to strings; by extension, string enumerations of different
types can also be compared to each other.

Adicionado na versão 3.11.


File: python.info,  Node: IntFlag,  Next: Sinalizador,  Prev: StrEnum,  Up: Derived Enumerations

9.6.12.3 IntFlag
................

The next variation of *note Enum: 630. provided, *note IntFlag: cbb, is
also based on *note int: 257.  The difference being *note IntFlag: cbb.
members can be combined using the bitwise operators (&, |, ^, ~) and the
result is still an *note IntFlag: cbb. member, if possible.  Like *note
IntEnum: d00, *note IntFlag: cbb. members are also integers and can be
used wherever an *note int: 257. is used.

     Nota: Any operation on an *note IntFlag: cbb. member besides the
     bit-wise operations will lose the *note IntFlag: cbb. membership.

     Bit-wise operations that result in invalid *note IntFlag: cbb.
     values will lose the *note IntFlag: cbb. membership.  See *note
     FlagBoundary: 624. for details.

Adicionado na versão 3.6.

Alterado na versão 3.11.

Sample *note IntFlag: cbb. class:

     >>> from enum import IntFlag
     >>> class Perm(IntFlag):
     ...     R = 4
     ...     W = 2
     ...     X = 1
     ...
     >>> Perm.R | Perm.W
     <Perm.R|W: 6>
     >>> Perm.R + Perm.W
     6
     >>> RW = Perm.R | Perm.W
     >>> Perm.R in RW
     True

It is also possible to name the combinations:

     >>> class Perm(IntFlag):
     ...     R = 4
     ...     W = 2
     ...     X = 1
     ...     RWX = 7
     ...
     >>> Perm.RWX
     <Perm.RWX: 7>
     >>> ~Perm.RWX
     <Perm: 0>
     >>> Perm(7)
     <Perm.RWX: 7>

     Nota: Combinações nomeadas são consideradas apelidos.  Apelidos não
     aparecem durante uma iteração, mas podem ser retornados por
     pesquisas por valor.

Alterado na versão 3.11.

Another important difference between *note IntFlag: cbb. and *note Enum:
630. is that if no flags are set (the value is 0), its boolean
evaluation is *note False: b49.:

     >>> Perm.R & Perm.X
     <Perm: 0>
     >>> bool(Perm.R & Perm.X)
     False

Because *note IntFlag: cbb. members are also subclasses of *note int:
257. they can be combined with them (but may lose *note IntFlag: cbb.
membership:

     >>> Perm.X | 4
     <Perm.R|X: 5>

     >>> Perm.X + 8
     9

     Nota: The negation operator, ‘~’, always returns an *note IntFlag:
     cbb. member with a positive value:

          >>> (~Perm.X).value == (Perm.R|Perm.W).value == 6
          True

*note IntFlag: cbb. members can also be iterated over:

     >>> list(RW)
     [<Perm.R: 4>, <Perm.W: 2>]

Adicionado na versão 3.11.


File: python.info,  Node: Sinalizador,  Next: Outros<2>,  Prev: IntFlag,  Up: Derived Enumerations

9.6.12.4 Sinalizador
....................

The last variation is *note Flag: 623.  Like *note IntFlag: cbb, *note
Flag: 623. members can be combined using the bitwise operators (&, |, ^,
~).  Unlike *note IntFlag: cbb, they cannot be combined with, nor
compared against, any other *note Flag: 623. enumeration, nor *note int:
257.  While it is possible to specify the values directly it is
recommended to use *note auto: cbc. as the value and let *note Flag:
623. select an appropriate value.

Adicionado na versão 3.6.

Like *note IntFlag: cbb, if a combination of *note Flag: 623. members
results in no flags being set, the boolean evaluation is *note False:
b49.:

     >>> from enum import Flag, auto
     >>> class Color(Flag):
     ...     RED = auto()
     ...     BLUE = auto()
     ...     GREEN = auto()
     ...
     >>> Color.RED & Color.GREEN
     <Color: 0>
     >>> bool(Color.RED & Color.GREEN)
     False

Individual flags should have values that are powers of two (1, 2, 4, 8,
…), while combinations of flags will not:

     >>> class Color(Flag):
     ...     RED = auto()
     ...     BLUE = auto()
     ...     GREEN = auto()
     ...     WHITE = RED | BLUE | GREEN
     ...
     >>> Color.WHITE
     <Color.WHITE: 7>

Giving a name to the “no flags set” condition does not change its
boolean value:

     >>> class Color(Flag):
     ...     BLACK = 0
     ...     RED = auto()
     ...     BLUE = auto()
     ...     GREEN = auto()
     ...
     >>> Color.BLACK
     <Color.BLACK: 0>
     >>> bool(Color.BLACK)
     False

*note Flag: 623. members can also be iterated over:

     >>> purple = Color.RED | Color.BLUE
     >>> list(purple)
     [<Color.RED: 1>, <Color.BLUE: 2>]

Adicionado na versão 3.11.

     Nota: For the majority of new code, *note Enum: 630. and *note
     Flag: 623. are strongly recommended, since *note IntEnum: d00. and
     *note IntFlag: cbb. break some semantic promises of an enumeration
     (by being comparable to integers, and thus by transitivity to other
     unrelated enumerations).  *note IntEnum: d00. and *note IntFlag:
     cbb. should be used only in cases where *note Enum: 630. and *note
     Flag: 623. will not do; for example, when integer constants are
     replaced with enumerations, or for interoperability with other
     systems.


File: python.info,  Node: Outros<2>,  Prev: Sinalizador,  Up: Derived Enumerations

9.6.12.5 Outros
...............

While *note IntEnum: d00. is part of the *note enum: 56. module, it
would be very simple to implement independently:

     class IntEnum(int, ReprEnum):   # or Enum instead of ReprEnum
         pass

This demonstrates how similar derived enumerations can be defined; for
example a ‘FloatEnum’ that mixes in *note float: 2f7. instead of *note
int: 257.

Algumas regras:

  1. When subclassing *note Enum: 630, mix-in types must appear before
     the *note Enum: 630. class itself in the sequence of bases, as in
     the *note IntEnum: d00. example above.

  2. Mix-in types must be subclassable.  For example, *note bool: 468.
     and *note range: 94a. are not subclassable and will throw an error
     during Enum creation if used as the mix-in type.

  3. While *note Enum: 630. can have members of any type, once you mix
     in an additional type, all the members must have values of that
     type, e.g.  *note int: 257. above.  This restriction does not apply
     to mix-ins which only add methods and don’t specify another type.

  4. When another data type is mixed in, the *note value: 2769.
     attribute is 'not the same' as the enum member itself, although it
     is equivalent and will compare equal.

  5. A ‘data type’ is a mixin that defines *note __new__(): 580, or a
     *note dataclass: 1cb.

  6. %-style formatting: ‘%s’ and ‘%r’ call the *note Enum: 630. class’s
     *note __str__(): 61d. and *note __repr__(): 61c. respectively;
     other codes (such as ‘%i’ or ‘%h’ for IntEnum) treat the enum
     member as its mixed-in type.

  7. *note Formatted string literals: 9b1, *note str.format(): 621, and
     *note format(): 61f. will use the enum’s *note __str__(): 61d.
     method.

     Nota: Because *note IntEnum: d00, *note IntFlag: cbb, and *note
     StrEnum: 61a. are designed to be drop-in replacements for existing
     constants, their *note __str__(): 61d. method has been reset to
     their data types’ *note __str__(): 61d. method.


File: python.info,  Node: When to use __new__ vs __init__,  Next: How are Enums and Flags different?,  Prev: Derived Enumerations,  Up: Enum

9.6.13 When to use ‘__new__()’ vs. ‘__init__()’
-----------------------------------------------

*note __new__(): 580. must be used whenever you want to customize the
actual value of the *note Enum: 630. member.  Any other modifications
may go in either *note __new__(): 580. or *note __init__(): 6b0, with
*note __init__(): 6b0. being preferred.

For example, if you want to pass several items to the constructor, but
only want one of them to be the value:

     >>> class Coordinate(bytes, Enum):
     ...     """
     ...     Coordinate with binary codes that can be indexed by the int code.
     ...     """
     ...     def __new__(cls, value, label, unit):
     ...         obj = bytes.__new__(cls, [value])
     ...         obj._value_ = value
     ...         obj.label = label
     ...         obj.unit = unit
     ...         return obj
     ...     PX = (0, 'P.X', 'km')
     ...     PY = (1, 'P.Y', 'km')
     ...     VX = (2, 'V.X', 'km/s')
     ...     VY = (3, 'V.Y', 'km/s')
     ...

     >>> print(Coordinate['PY'])
     Coordinate.PY

     >>> print(Coordinate(3))
     Coordinate.VY

     Aviso: 'Do not' call ‘super().__new__()’, as the lookup-only
     ‘__new__’ is the one that is found; instead, use the data type
     directly.

* Menu:

* Finer Points::


File: python.info,  Node: Finer Points,  Up: When to use __new__ vs __init__

9.6.13.1 Finer Points
.....................

* Menu:

* Nomes __dunder__ suportados: Nomes __dunder__ suportados<2>.
* Nomes _sunder_ suportados: Nomes _sunder_ suportados<2>.
* _Private__names::
* Enum member type::
* Creating members that are mixed with other data types::
* Boolean value of Enum classes and members::
* Enum classes with methods::
* Combining members of Flag::
* Flag and IntFlag minutia::


File: python.info,  Node: Nomes __dunder__ suportados<2>,  Next: Nomes _sunder_ suportados<2>,  Up: Finer Points

9.6.13.2 Nomes ‘__dunder__’ suportados
......................................

*note __members__: 2766. is a read-only ordered mapping of
‘member_name’:‘member’ items.  It is only available on the class.

*note __new__(): 580, if specified, must create and return the enum
members; it is also a very good idea to set the member’s *note _value_:
276c. appropriately.  Once all the members are created it is no longer
used.


File: python.info,  Node: Nomes _sunder_ suportados<2>,  Next: _Private__names,  Prev: Nomes __dunder__ suportados<2>,  Up: Finer Points

9.6.13.3 Nomes ‘_sunder_’ suportados
....................................

   - *note _name_: 276b. – name of the member

   - *note _value_: 276c. – value of the member; can be set in ‘__new__’

   - *note _missing_(): 2773. – a lookup function used when a value is
     not found; may be overridden

   - *note _ignore_: 276e. – a list of names, either as a *note list:
     611. or a *note str: 44c, that will not be transformed into
     members, and will be removed from the final class

   - *note _generate_next_value_(): 2770. – used to get an appropriate
     value for an enum member; may be overridden

   - *note _add_alias_(): 2774. – adds a new name as an alias to an
     existing member.

   - *note _add_value_alias_(): 2775. – adds a new value as an alias to
     an existing member.  See *note MultiValueEnum: 535f. for an
     example.

          Nota: For standard *note Enum: 630. classes the next value
          chosen is the highest value seen incremented by one.

          For *note Flag: 623. classes the next value chosen will be the
          next highest power-of-two.

     Alterado na versão 3.13: Versões anteriores usariam o último valor
     visualizado em vez do maior valor.

Adicionado na versão 3.6: ‘_missing_’, ‘_order_’,
‘_generate_next_value_’

Adicionado na versão 3.7: ‘_ignore_’

Adicionado na versão 3.13: ‘_add_alias_’, ‘_add_value_alias_’

To help keep Python 2 / Python 3 code in sync an *note _order_: 276d.
attribute can be provided.  It will be checked against the actual order
of the enumeration and raise an error if the two do not match:

     >>> class Color(Enum):
     ...     _order_ = 'VERMELHO VERDE AZUL'
     ...     VERMELHO = 1
     ...     AZUL = 3
     ...     VERDE = 2
     ...
     Traceback (most recent call last):
     ...
     TypeError: member order does not match _order_:
       ['VERMELHO', 'AZUL', 'VERDE']
       ['VERMELHO', 'VERDE', 'AZUL']

     Nota: In Python 2 code the *note _order_: 276d. attribute is
     necessary as definition order is lost before it can be recorded.


File: python.info,  Node: _Private__names,  Next: Enum member type,  Prev: Nomes _sunder_ suportados<2>,  Up: Finer Points

9.6.13.4 _Private__names
........................

*note Private names: 1e43. are not converted to enum members, but remain
normal attributes.

Alterado na versão 3.11.


File: python.info,  Node: Enum member type,  Next: Creating members that are mixed with other data types,  Prev: _Private__names,  Up: Finer Points

9.6.13.5 ‘Enum’ member type
...........................

Enum members are instances of their enum class, and are normally
accessed as ‘EnumClass.member’.  In certain situations, such as writing
custom enum behavior, being able to access one member directly from
another is useful, and is supported; however, in order to avoid name
clashes between member names and attributes/methods from mixed-in
classes, upper-case names are strongly recommended.

Alterado na versão 3.5.


File: python.info,  Node: Creating members that are mixed with other data types,  Next: Boolean value of Enum classes and members,  Prev: Enum member type,  Up: Finer Points

9.6.13.6 Creating members that are mixed with other data types
..............................................................

When subclassing other data types, such as *note int: 257. or *note str:
44c, with an *note Enum: 630, all values after the ‘=’ are passed to
that data type’s constructor.  For example:

     >>> class MyEnum(IntEnum):      # help(int) -> int(x, base=10) -> integer
     ...     example = '11', 16      # so x='11' and base=16
     ...
     >>> MyEnum.example.value        # and hex(11) is...
     17


File: python.info,  Node: Boolean value of Enum classes and members,  Next: Enum classes with methods,  Prev: Creating members that are mixed with other data types,  Up: Finer Points

9.6.13.7 Boolean value of ‘Enum’ classes and members
....................................................

Enum classes that are mixed with non-*note Enum: 630. types (such as
*note int: 257, *note str: 44c, etc.)  are evaluated according to the
mixed-in type’s rules; otherwise, all members evaluate as *note True:
c27.  To make your own enum’s boolean evaluation depend on the member’s
value add the following to your class:

     def __bool__(self):
         return bool(self.value)

Plain *note Enum: 630. classes always evaluate as *note True: c27.


File: python.info,  Node: Enum classes with methods,  Next: Combining members of Flag,  Prev: Boolean value of Enum classes and members,  Up: Finer Points

9.6.13.8 ‘Enum’ classes with methods
....................................

If you give your enum subclass extra methods, like the *note Planet:
5350. class below, those methods will show up in a *note dir(): 632. of
the member, but not of the class:

     >>> dir(Planet)
     ['EARTH', 'JUPITER', 'MARS', 'MERCURY', 'NEPTUNE', 'SATURN', 'URANUS', 'VENUS', '__class__', '__doc__', '__members__', '__module__']
     >>> dir(Planet.EARTH)
     ['__class__', '__doc__', '__module__', 'mass', 'name', 'radius', 'surface_gravity', 'value']


File: python.info,  Node: Combining members of Flag,  Next: Flag and IntFlag minutia,  Prev: Enum classes with methods,  Up: Finer Points

9.6.13.9 Combining members of ‘Flag’
....................................

Iterating over a combination of *note Flag: 623. members will only
return the members that are comprised of a single bit:

     >>> class Color(Flag):
     ...     RED = auto()
     ...     GREEN = auto()
     ...     BLUE = auto()
     ...     MAGENTA = RED | BLUE
     ...     YELLOW = RED | GREEN
     ...     CYAN = GREEN | BLUE
     ...
     >>> Color(3)  # named combination
     <Color.YELLOW: 3>
     >>> Color(7)      # not named combination
     <Color.RED|GREEN|BLUE: 7>


File: python.info,  Node: Flag and IntFlag minutia,  Prev: Combining members of Flag,  Up: Finer Points

9.6.13.10 ‘Flag’ and ‘IntFlag’ minutia
......................................

Using the following snippet for our examples:

     >>> class Color(IntFlag):
     ...     BLACK = 0
     ...     RED = 1
     ...     GREEN = 2
     ...     BLUE = 4
     ...     PURPLE = RED | BLUE
     ...     WHITE = RED | GREEN | BLUE
     ...

the following are true:

   - single-bit flags are canonical

   - multi-bit and zero-bit flags are aliases

   - only canonical flags are returned during iteration:

          >>> list(Color.WHITE)
          [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 4>]

   - negating a flag or flag set returns a new flag/flag set with the
     corresponding positive integer value:

          >>> Color.BLUE
          <Color.BLUE: 4>

          >>> ~Color.BLUE
          <Color.RED|GREEN: 3>

   - names of pseudo-flags are constructed from their members’ names:

          >>> (Color.RED | Color.GREEN).name
          'RED|GREEN'

          >>> class Perm(IntFlag):
          ...     R = 4
          ...     W = 2
          ...     X = 1
          ...
          >>> (Perm.R & Perm.W).name is None  # effectively Perm(0)
          True

   - multi-bit flags, aka aliases, can be returned from operations:

          >>> Color.RED | Color.BLUE
          <Color.PURPLE: 5>

          >>> Color(7)  # or Color(-1)
          <Color.WHITE: 7>

          >>> Color(0)
          <Color.BLACK: 0>

   - membership / containment checking: zero-valued flags are always
     considered to be contained:

          >>> Color.BLACK in Color.WHITE
          True

     otherwise, only if all bits of one flag are in the other flag will
     True be returned:

          >>> Color.PURPLE in Color.WHITE
          True

          >>> Color.GREEN in Color.PURPLE
          False

There is a new boundary mechanism that controls how out-of-range /
invalid bits are handled: ‘STRICT’, ‘CONFORM’, ‘EJECT’, and ‘KEEP’:

   * STRICT –> raises an exception when presented with invalid values

   * CONFORM –> discards any invalid bits

   * EJECT –> lose Flag status and become a normal int with the given
     value

   * KEEP –> keep the extra bits

        - keeps Flag status and extra bits

        - extra bits do not show up in iteration

        - extra bits do show up in repr() and str()

The default for Flag is ‘STRICT’, the default for ‘IntFlag’ is ‘EJECT’,
and the default for ‘_convert_’ is ‘KEEP’ (see ‘ssl.Options’ for an
example of when ‘KEEP’ is needed).


File: python.info,  Node: How are Enums and Flags different?,  Next: Enum Cookbook,  Prev: When to use __new__ vs __init__,  Up: Enum

9.6.14 How are Enums and Flags different?
-----------------------------------------

Enums have a custom metaclass that affects many aspects of both derived
*note Enum: 630. classes and their instances (members).

* Menu:

* Enum Classes::
* Flag Classes::
* Enum Members (aka instances): Enum Members aka instances.
* Flag Members::


File: python.info,  Node: Enum Classes,  Next: Flag Classes,  Up: How are Enums and Flags different?

9.6.14.1 Enum Classes
.....................

The *note EnumType: 1e5. metaclass is responsible for providing the
*note __contains__(): 1400, *note __dir__(): 15fe, *note __iter__():
c8a. and other methods that allow one to do things with an *note Enum:
630. class that fail on a typical class, such as ‘list(Color)’ or
‘some_enum_var in Color’.  *note EnumType: 1e5. is responsible for
ensuring that various other methods on the final *note Enum: 630. class
are correct (such as *note __new__(): 580, *note __getnewargs__(): dfe,
*note __str__(): 61d. and *note __repr__(): 61c.).


File: python.info,  Node: Flag Classes,  Next: Enum Members aka instances,  Prev: Enum Classes,  Up: How are Enums and Flags different?

9.6.14.2 Flag Classes
.....................

Flags have an expanded view of aliasing: to be canonical, the value of a
flag needs to be a power-of-two value, and not a duplicate name.  So, in
addition to the *note Enum: 630. definition of alias, a flag with no
value (a.k.a.  ‘0’) or with more than one power-of-two value (e.g.  ‘3’)
is considered an alias.


File: python.info,  Node: Enum Members aka instances,  Next: Flag Members,  Prev: Flag Classes,  Up: How are Enums and Flags different?

9.6.14.3 Enum Members (aka instances)
.....................................

The most interesting thing about enum members is that they are
singletons.  *note EnumType: 1e5. creates them all while it is creating
the enum class itself, and then puts a custom *note __new__(): 580. in
place to ensure that no new ones are ever instantiated by returning only
the existing member instances.


File: python.info,  Node: Flag Members,  Prev: Enum Members aka instances,  Up: How are Enums and Flags different?

9.6.14.4 Flag Members
.....................

Flag members can be iterated over just like the *note Flag: 623. class,
and only the canonical members will be returned.  For example:

     >>> list(Color)
     [<Color.RED: 1>, <Color.GREEN: 2>, <Color.BLUE: 4>]

(Note that ‘BLACK’, ‘PURPLE’, and ‘WHITE’ do not show up.)

Inverting a flag member returns the corresponding positive value, rather
than a negative value — for example:

     >>> ~Color.RED
     <Color.GREEN|BLUE: 6>

Flag members have a length corresponding to the number of power-of-two
values they contain.  For example:

     >>> len(Color.PURPLE)
     2


File: python.info,  Node: Enum Cookbook,  Next: Subclassing EnumType,  Prev: How are Enums and Flags different?,  Up: Enum

9.6.15 Enum Cookbook
--------------------

While *note Enum: 630, *note IntEnum: d00, *note StrEnum: 61a, *note
Flag: 623, and *note IntFlag: cbb. are expected to cover the majority of
use-cases, they cannot cover them all.  Here are recipes for some
different types of enumerations that can be used directly, or as
examples for creating one’s own.

* Menu:

* Omitting values::
* OrderedEnum::
* DuplicateFreeEnum::
* MultiValueEnum::
* Planet::
* TimePeriod::


File: python.info,  Node: Omitting values,  Next: OrderedEnum,  Up: Enum Cookbook

9.6.15.1 Omitting values
........................

In many use-cases, one doesn’t care what the actual value of an
enumeration is.  There are several ways to define this type of simple
enumeration:

   - use instances of *note auto: cbc. for the value

   - use instances of *note object: a96. as the value

   - use a descriptive string as the value

   - use a tuple as the value and a custom *note __new__(): 580. to
     replace the tuple with an *note int: 257. value

Using any of these methods signifies to the user that these values are
not important, and also enables one to add, remove, or reorder members
without having to renumber the remaining members.

* Menu:

* Using auto::
* Using object::
* Using a descriptive string::
* Using a custom __new__(): Using a custom __new__.


File: python.info,  Node: Using auto,  Next: Using object,  Up: Omitting values

9.6.15.2 Using ‘auto’
.....................

Using *note auto: cbc. would look like:

     >>> class Color(Enum):
     ...     RED = auto()
     ...     BLUE = auto()
     ...     GREEN = auto()
     ...
     >>> Color.GREEN
     <Color.GREEN: 3>


File: python.info,  Node: Using object,  Next: Using a descriptive string,  Prev: Using auto,  Up: Omitting values

9.6.15.3 Using ‘object’
.......................

Using *note object: a96. would look like:

     >>> class Color(Enum):
     ...     RED = object()
     ...     GREEN = object()
     ...     BLUE = object()
     ...
     >>> Color.GREEN
     <Color.GREEN: <object object at 0x...>>

This is also a good example of why you might want to write your own
*note __repr__(): 61c.:

     >>> class Color(Enum):
     ...     RED = object()
     ...     GREEN = object()
     ...     BLUE = object()
     ...     def __repr__(self):
     ...         return "<%s.%s>" % (self.__class__.__name__, self._name_)
     ...
     >>> Color.GREEN
     <Color.GREEN>


File: python.info,  Node: Using a descriptive string,  Next: Using a custom __new__,  Prev: Using object,  Up: Omitting values

9.6.15.4 Using a descriptive string
...................................

Using a string as the value would look like:

     >>> class Color(Enum):
     ...     RED = 'stop'
     ...     GREEN = 'go'
     ...     BLUE = 'too fast!'
     ...
     >>> Color.GREEN
     <Color.GREEN: 'go'>


File: python.info,  Node: Using a custom __new__,  Prev: Using a descriptive string,  Up: Omitting values

9.6.15.5 Using a custom ‘__new__()’
...................................

Using an auto-numbering *note __new__(): 580. would look like:

     >>> class AutoNumber(Enum):
     ...     def __new__(cls):
     ...         value = len(cls.__members__) + 1
     ...         obj = object.__new__(cls)
     ...         obj._value_ = value
     ...         return obj
     ...
     >>> class Color(AutoNumber):
     ...     RED = ()
     ...     GREEN = ()
     ...     BLUE = ()
     ...
     >>> Color.GREEN
     <Color.GREEN: 2>

To make a more general purpose ‘AutoNumber’, add ‘*args’ to the
signature:

     >>> class AutoNumber(Enum):
     ...     def __new__(cls, *args):      # this is the only change from above
     ...         value = len(cls.__members__) + 1
     ...         obj = object.__new__(cls)
     ...         obj._value_ = value
     ...         return obj
     ...

Then when you inherit from ‘AutoNumber’ you can write your own
‘__init__’ to handle any extra arguments:

     >>> class Swatch(AutoNumber):
     ...     def __init__(self, pantone='unknown'):
     ...         self.pantone = pantone
     ...     AUBURN = '3497'
     ...     SEA_GREEN = '1246'
     ...     BLEACHED_CORAL = () # New color, no Pantone code yet!
     ...
     >>> Swatch.SEA_GREEN
     <Swatch.SEA_GREEN: 2>
     >>> Swatch.SEA_GREEN.pantone
     '1246'
     >>> Swatch.BLEACHED_CORAL.pantone
     'unknown'

     Nota: The *note __new__(): 580. method, if defined, is used during
     creation of the Enum members; it is then replaced by Enum’s *note
     __new__(): 580. which is used after class creation for lookup of
     existing members.

     Aviso: 'Do not' call ‘super().__new__()’, as the lookup-only
     ‘__new__’ is the one that is found; instead, use the data type
     directly – e.g.:

          obj = int.__new__(cls, value)


File: python.info,  Node: OrderedEnum,  Next: DuplicateFreeEnum,  Prev: Omitting values,  Up: Enum Cookbook

9.6.15.6 OrderedEnum
....................

An ordered enumeration that is not based on *note IntEnum: d00. and so
maintains the normal *note Enum: 630. invariants (such as not being
comparable to other enumerations):

     >>> class OrderedEnum(Enum):
     ...     def __ge__(self, other):
     ...         if self.__class__ is other.__class__:
     ...             return self.value >= other.value
     ...         return NotImplemented
     ...     def __gt__(self, other):
     ...         if self.__class__ is other.__class__:
     ...             return self.value > other.value
     ...         return NotImplemented
     ...     def __le__(self, other):
     ...         if self.__class__ is other.__class__:
     ...             return self.value <= other.value
     ...         return NotImplemented
     ...     def __lt__(self, other):
     ...         if self.__class__ is other.__class__:
     ...             return self.value < other.value
     ...         return NotImplemented
     ...
     >>> class Grade(OrderedEnum):
     ...     A = 5
     ...     B = 4
     ...     C = 3
     ...     D = 2
     ...     F = 1
     ...
     >>> Grade.C < Grade.A
     True


File: python.info,  Node: DuplicateFreeEnum,  Next: MultiValueEnum,  Prev: OrderedEnum,  Up: Enum Cookbook

9.6.15.7 DuplicateFreeEnum
..........................

Raises an error if a duplicate member value is found instead of creating
an alias:

     >>> class DuplicateFreeEnum(Enum):
     ...     def __init__(self, *args):
     ...         cls = self.__class__
     ...         if any(self.value == e.value for e in cls):
     ...             a = self.name
     ...             e = cls(self.value).name
     ...             raise ValueError(
     ...                 "aliases not allowed in DuplicateFreeEnum:  %r --> %r"
     ...                 % (a, e))
     ...
     >>> class Color(DuplicateFreeEnum):
     ...     RED = 1
     ...     GREEN = 2
     ...     BLUE = 3
     ...     GRENE = 2
     ...
     Traceback (most recent call last):
       ...
     ValueError: aliases not allowed in DuplicateFreeEnum:  'GRENE' --> 'GREEN'

     Nota: This is a useful example for subclassing Enum to add or
     change other behaviors as well as disallowing aliases.  If the only
     desired change is disallowing aliases, the *note unique(): 275c.
     decorator can be used instead.


File: python.info,  Node: MultiValueEnum,  Next: Planet,  Prev: DuplicateFreeEnum,  Up: Enum Cookbook

9.6.15.8 MultiValueEnum
.......................

Supports having more than one value per member:

     >>> class MultiValueEnum(Enum):
     ...     def __new__(cls, value, *values):
     ...         self = object.__new__(cls)
     ...         self._value_ = value
     ...         for v in values:
     ...             self._add_value_alias_(v)
     ...         return self
     ...
     >>> class DType(MultiValueEnum):
     ...     float32 = 'f', 8
     ...     double64 = 'd', 9
     ...
     >>> DType('f')
     <DType.float32: 'f'>
     >>> DType(9)
     <DType.double64: 'd'>


File: python.info,  Node: Planet,  Next: TimePeriod,  Prev: MultiValueEnum,  Up: Enum Cookbook

9.6.15.9 Planet
...............

If *note __new__(): 580. or *note __init__(): 6b0. is defined, the value
of the enum member will be passed to those methods:

     >>> class Planet(Enum):
     ...     MERCURY = (3.303e+23, 2.4397e6)
     ...     VENUS   = (4.869e+24, 6.0518e6)
     ...     EARTH   = (5.976e+24, 6.37814e6)
     ...     MARS    = (6.421e+23, 3.3972e6)
     ...     JUPITER = (1.9e+27,   7.1492e7)
     ...     SATURN  = (5.688e+26, 6.0268e7)
     ...     URANUS  = (8.686e+25, 2.5559e7)
     ...     NEPTUNE = (1.024e+26, 2.4746e7)
     ...     def __init__(self, mass, radius):
     ...         self.mass = mass       # in kilograms
     ...         self.radius = radius   # in meters
     ...     @property
     ...     def surface_gravity(self):
     ...         # universal gravitational constant  (m3 kg-1 s-2)
     ...         G = 6.67300E-11
     ...         return G * self.mass / (self.radius * self.radius)
     ...
     >>> Planet.EARTH.value
     (5.976e+24, 6378140.0)
     >>> Planet.EARTH.surface_gravity
     9.802652743337129


File: python.info,  Node: TimePeriod,  Prev: Planet,  Up: Enum Cookbook

9.6.15.10 TimePeriod
....................

An example to show the *note _ignore_: 276e. attribute in use:

     >>> from datetime import timedelta
     >>> class Period(timedelta, Enum):
     ...     "different lengths of time"
     ...     _ignore_ = 'Period i'
     ...     Period = vars()
     ...     for i in range(367):
     ...         Period['day_%d' % i] = i
     ...
     >>> list(Period)[:2]
     [<Period.day_0: datetime.timedelta(0)>, <Period.day_1: datetime.timedelta(days=1)>]
     >>> list(Period)[-2:]
     [<Period.day_365: datetime.timedelta(days=365)>, <Period.day_366: datetime.timedelta(days=366)>]


File: python.info,  Node: Subclassing EnumType,  Prev: Enum Cookbook,  Up: Enum

9.6.16 Subclassing EnumType
---------------------------

While most enum needs can be met by customizing *note Enum: 630.
subclasses, either with class decorators or custom functions, *note
EnumType: 1e5. can be subclassed to provide a different Enum experience.


File: python.info,  Node: Programação Funcional,  Next: Logging,  Prev: Enum,  Up: Python HOWTOs

9.7 Programação Funcional
=========================


Autor: A. M. Kuchling


Versão: 0.32

Nesse documento, nós vamos passear pelos recursos do Python que servem
para implementar programas de forma funcional.  Após uma introdução dos
conceitos da programação funcional, nós veremos as propriedades da
linguagem como *note iteradores: 1ac. e *note geradores: 109a. e
bibliotecas de módulos relevantes como um *note itertools: 81. e *note
functools: 5f.

* Menu:

* Introdução: Introdução<15>.
* Iteradores: Iteradores<2>.
* Expressões do gerador e compreensões de lista::
* Geradores: Geradores<2>.
* Funções embutidas: Funções embutidas<4>.
* O módulo itertools::
* O módulo functools::
* Pequenas funções e as expressões lambda::
* Histórico de Revisão e Reconhecimentos::
* Referências: Referências<2>.


File: python.info,  Node: Introdução<15>,  Next: Iteradores<2>,  Up: Programação Funcional

9.7.1 Introdução
----------------

Essa seção explica o conceito básico da programação funcional; se você
está interessado em aprender sobre os recursos da linguagem Python, pule
essa etapa para a seção *note Iteradores: 537a.

As linguagens de programação permitem decompor problemas de diversas
maneiras diferentes:

   * A Maioria das linguagens de programação são 'procedurais': os
     programas são listas de instruções que dizem ao computador o que
     fazer com as entradas do programa.  C, Pascal, e mesmo o Unix
     shells são linguagens procedurais.

   * Em linguagens 'declarativas', você escreve uma especificação que
     descreve o problema a ser resolvido, e a implementação do idioma
     descreve como executar a computação de forma eficiente.  O SQL é o
     idioma declarativo com o qual provavelmente você está
     familiarizado; Uma consulta SQL descreve o conjunto de dados que
     deseja recuperar e o mecanismo SQL decide se deseja escanear
     tabelas ou usar índices, quais subcláusulas devem ser realizadas
     primeiro, etc.

   * Os programas 'orientados a objetos' manipulam coleções de objetos.
     Os objetos têm estado interno e métodos de suporte que consultam ou
     modificam esse estado interno de alguma forma.  Smalltalk e Java
     são linguagens orientadas a objetos.  C++ e Python são idiomas que
     suportam programação orientada a objetos, mas não forçam o uso de
     recursos de orientação a objetos.

   * A programação 'funcional' decompõe um problema em um conjunto de
     funções.  Idealmente, as funções apenas recebem entradas e produzem
     saídas, e não têm nenhum estado interno que afete a saída produzida
     para uma determinada entrada.  Linguagens funcionais bem conhecidos
     incluem a família ML (Standard ML, OCaml e outras variantes) e
     Haskell.

Os designers de algumas linguagens de computadores escolhem enfatizar
uma abordagem particular da programação.  Isso muitas vezes torna
difícil escrever programas que usam uma abordagem diferente.  Outros
idiomas são linguagens com multiparadigmas que suportam várias
abordagens diferentes.  Lisp, C++ e Python são multiparadigmas; Você
pode escrever programas ou bibliotecas que são em grande parte
processuais, orientadas a objetos ou funcionais em todos esses idiomas.
Em um grande programa, diferentes seções podem ser escritas usando
diferentes abordagens; A GUI pode ser orientada a objetos enquanto a
lógica de processamento é processual ou funcional, por exemplo.

Em um programa funcional, a entrada flui através de um conjunto de
funções.  Cada função opera em sua entrada e produz alguma saída.  O
estilo funcional desencoraja funções com efeitos colaterais que
modificam o estado interno ou fazem outras alterações que não são
visíveis no valor de retorno da função.  As funções que não têm efeitos
colaterais são chamadas 'puramente funcionais'.  Evitar efeitos
colaterais significa não usar estruturas de dados que sejam atualizadas
à medida que um programa é executado; A saída de cada função só deve
depender da sua entrada.

Algumas linguagens são muito estritas a respeito da pureza e não tem nem
instruções de atribuição como, por exemplo, ‘a=3’ ou ‘c = a + b’, mas é
difícil evitar todos os efeitos colaterais, como exibir valores na tela
ou escrever em um arquivo em disco.  Um outro exemplo é a chamada da
função *note print(): fa9. ou da função *note time.sleep(): 69d, nenhuma
das quais retorna um valor útil.  Ambas são chamadas apenas por conta do
efeito colateral de mandar algum texto para a tela ou pausar a execução
por um segundo.

Os programas Python escritos em estilo funcional geralmente não irão ao
extremo de evitar todas as I/O ou todas as atribuições; Em vez disso,
eles fornecerão uma interface de aparência funcional, mas usarão
recursos não funcionais internamente.  Por exemplo, a implementação de
uma função ainda usará atribuições para variáveis locais, mas não
modificará variáveis globais ou terá outros efeitos colaterais.

A programação funcional pode ser considerada o oposto da programação
orientada a objetos.  Os objetos são pequenas cápsulas contendo algum
estado interno, juntamente com uma coleção de chamadas de método que
permitem modificar este estado, e os programas consistem em fazer o
conjunto correto de mudanças de estado.  A programação funcional quer
evitar as mudanças de estado tanto quanto possível e funciona com o
fluxo de dados entre as funções.  Em Python você pode combinar as duas
abordagens escrevendo funções que levam e retornam instâncias que
representam objetos em seu aplicativo (mensagens de e-mail, transações,
etc.).

O design funcional pode parecer uma restrição estranha para trabalhar
por baixo.  Por que você deve evitar objetos e efeitos colaterais?
Existem vantagens teóricas e práticas para o estilo funcional:

   * Probabilidade formal.

   * Modularidade.

   * Componibilidade.

   * Fácil de depurar e testar.

* Menu:

* Probabilidade formal::
* Modularidade::
* Fácil de depurar e testar::
* Componibilidade::


File: python.info,  Node: Probabilidade formal,  Next: Modularidade,  Up: Introdução<15>

9.7.1.1 Probabilidade formal
............................

Um benefício teórico é que é mais fácil construir uma prova matemática
de que um programa funcional é correto.

Durante muito tempo os pesquisadores estiveram interessados em encontrar
maneiras de provar matematicamente programas corretos.  Isso é diferente
de testar um programa em inúmeras entradas e concluir que sua saída
geralmente é correta, ou ler o código-fonte de um programa e concluir
que o código parece certo; O objetivo é uma prova rigorosa de que um
programa produz o resultado certo para todas as entradas possíveis.

A técnica usada para comprovar os programas corretos é escrever
'invariantes', propriedades dos dados de entrada e das variáveis do
programa que são sempre verdadeiras.  Para cada linha de código, você
mostra que se os invariantes X e Y forem verdadeiros 'antes' da linha
ser executada, os invariantes X’ e Y’ ligeiramente diferentes são
verdadeiros 'após' a linha ser executada.  Isso continua até chegar ao
final do programa, em que ponto as invariantes devem corresponder às
condições desejadas na saída do programa.

A evitação das tarefas funcionais ocorreu porque as tarefas são difíceis
de tratar com esta técnica; As atribuições podem invadir invariantes que
eram verdadeiras antes da atribuição sem produzir novos invariantes que
possam ser propagados para a frente.

Infelizmente, prpvar que os programas estão corretos são praticamente
impraticáveis e não relevantes para o software Python.  Mesmo os
programas triviais exigem provas de várias páginas; A prova de correção
para um programa moderadamente complicado seria enorme, e poucos ou
nenhum dos programas que você usa diariamente (o interpretador Python,
seu analisador XML, seu navegador) poderia ser comprovado correto.
Mesmo que você tenha anotado ou gerado uma prova, então haveria a
questão de verificar a prova; Talvez haja um erro nisso, e você acredita
erroneamente que você provou o programa corretamente.


File: python.info,  Node: Modularidade,  Next: Fácil de depurar e testar,  Prev: Probabilidade formal,  Up: Introdução<15>

9.7.1.2 Modularidade
....................

Um benefício mais prático da programação funcional é que isso força você
a quebrar seu problema em pequenos pedaços.  Os programas são mais
modulares como resultado.  É mais fácil especificar e escrever uma
pequena função que faz uma coisa do que uma grande função que realiza
uma transformação complicada.  Pequenas funções também são mais fáceis
de ler e verificar erros.


File: python.info,  Node: Fácil de depurar e testar,  Next: Componibilidade,  Prev: Modularidade,  Up: Introdução<15>

9.7.1.3 Fácil de depurar e testar
.................................

Testar e depurar um programa de estilo funcional é mais fácil.

A depuração é simplificada porque as funções são geralmente pequenas e
claramente especificadas.  Quando um programa não funciona, cada função
é um ponto de interface onde você pode verificar se os dados estão
corretos.  Você pode observar as entradas e saídas intermediárias para
isolar rapidamente a função responsável por um erro.

O teste é mais fácil porque cada função é um assunto potencial para um
teste unitário.  As funções não dependem do estado do sistema que
precisa ser replicado antes de executar um teste; Em vez disso, você só
precisa sintetizar a entrada certa e depois verificar se o resultado
corresponde às expectativas.


File: python.info,  Node: Componibilidade,  Prev: Fácil de depurar e testar,  Up: Introdução<15>

9.7.1.4 Componibilidade
.......................

À medida que você trabalha em um programa de estilo funcional, você
escreverá várias funções com diferentes entradas e saídas.  Algumas
dessas funções serão inevitavelmente especializadas em um aplicativo
particular, mas outras serão úteis em uma grande variedade de programas.
Por exemplo, uma função que leva um caminho de diretório e retorna todos
os arquivos XML no diretório, ou uma função que leva um nome de arquivo
e retorna seu conteúdo, pode ser aplicada em muitas situações
diferentes.

Com o tempo você formará uma biblioteca pessoal de utilitários.  Muitas
vezes você montará novos programas organizando funções existentes em uma
nova configuração e escrevendo algumas funções especializadas para a
tarefa atual.


File: python.info,  Node: Iteradores<2>,  Next: Expressões do gerador e compreensões de lista,  Prev: Introdução<15>,  Up: Programação Funcional

9.7.2 Iteradores
----------------

Começarei por olhar para um recurso de linguagem Python que é uma base
importante para escrever programas de estilo funcional: iteradores.

Um iterador é um objeto que representa um fluxo de dados; este objeto
retorna os dados um elemento por vez.  Um iterador Python deve suportar
um método chamado *note iterator.__next__(): 1310. que não leva
argumentos e sempre retorna o próximo elemento do fluxo.  Se não houver
mais elementos no fluxo, *note iterator.__next__(): 1310. deve aumentar
a exceção *note StopIteration: c15.  Os iteradores não precisam ser
finitos; no entanto, é perfeitamente razoável escrever um iterador que
produza um fluxo infinito de dados.

A função embutida *note iter(): 7d8. leva um objeto arbitrário e tenta
retornar um iterador que retornará os conteúdos ou elementos do objeto,
caso o contrario retorna *note TypeError: 2c3. se o objeto não suportar
a iteração.  Vários dos tipos de dados embutidos do Python suportam a
iteração, sendo as listas e os dicionários mais comuns.  Um objeto é
chamado *note iterable: 1268. se você pode obter um iterador para ele.

Você pode experimentar a interface de iteração manualmente:

     >>> L = [1, 2, 3]
     >>> it = iter(L)
     >>> it
     <...iterator object at ...>
     >>> it.__next__()  # same as next(it)
     1
     >>> next(it)
     2
     >>> next(it)
     3
     >>> next(it)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     StopIteration
     >>>

Python espera objetos iteráveis em vários contextos diferentes, sendo o
mais importante a instrução *note for: 2f2.  Na declaração ‘for X in Y’,
Y deve ser um iterador ou algum objeto para o qual *note iter(): 7d8.
pode criar um iterador.  Estas duas declarações são equivalentes:

     for i in iter(obj):
         print(i)

     for i in obj:
         print(i)

Iteradores também podem ser materializados como listas ou tuplas,
utilizando funções de construção *note list(): 611. ou *note tuple():
370.:

     >>> L = [1, 2, 3]
     >>> iterator = iter(L)
     >>> t = tuple(iterator)
     >>> t
     (1, 2, 3)

O desempacotamento de sequência também suporta iteradores: se você sabe
que um iterador retornará N elementos, você pode desempacotá-los em uma
N-tupla:

     >>> L = [1, 2, 3]
     >>> iterator = iter(L)
     >>> a, b, c = iterator
     >>> a, b, c
     (1, 2, 3)

Funções embutidas, tais como *note max(): f3b. e *note min(): f3a. podem
ter um único argumento de iterador e retornarão o elemento maior ou
menor.  Os operadores ‘"in"’ e ‘"not in"’ também aceitam iteradores: ‘X
in iterator’ é verdadeiro se X for encontrado no fluxo retornado pelo
iterador.  Você enfrentará problemas óbvios se o iterador for infinito;
*note max(): f3b, *note min(): f3a. nunca retornará, e se o elemento X
nunca aparecer no fluxo, os operadores ‘"in"’ e ‘"not in"’ não
retornarão também.

Observe que você só pode avançar em um iterador; não há como obter o
elemento anterior, redefinir o iterador ou fazer uma cópia dele.  Os
objetos iteradores podem opcionalmente fornecer esses recursos
adicionais, mas o protocolo do iterador especifica apenas o método *note
iterator.__next__(): 1310.  As funções podem, portanto, consumir toda a
saída do iterador, e se você precisa fazer algo diferente com o mesmo
fluxo, você terá que criar um novo iterador.

* Menu:

* Tipos de Dados que Suportam Iteradores::


File: python.info,  Node: Tipos de Dados que Suportam Iteradores,  Up: Iteradores<2>

9.7.2.1 Tipos de Dados que Suportam Iteradores
..............................................

Já vimos como listas e tuplas suportam iteradores.  De fato, qualquer
tipo de sequência de Python, como strings, suportará automaticamente a
criação de um iterador.

Chamar *note iter(): 7d8. em um dicionário retorna um iterador que irá
percorrer as chaves do dicionário:

     >>> m = {'Jan': 1, 'Fev': 2, 'Mar': 3, 'Abr': 4, 'Mai': 5, 'Jun': 6,
     ...      'Jul': 7, 'Ago': 8, 'Set': 9, 'Out': 10, 'Nov': 11, 'Dez': 12}
     >>> for key in m:
     ...     print(key, m[key])
     Jan 1
     Fev 2
     Mar 3
     Abr 4
     Mai 5
     Jun 6
     Jul 7
     Ago 8
     Set 9
     Out 10
     Nov 11
     Dez 12

Note que a partir de Python 3.7, a ordem de iteração em um dicionário é
garantidamente a mesma que a ordem de inserção.  Em versões anteriores,
o comportamento não era especificado e podia variar entre
implementações.

Aplicando *note iter(): 7d8. para um dicionário sempre percorre as
teclas, mas os dicionários têm métodos que retornam outros iteradores.
Se você deseja iterar sobre valores ou pares de chave/valor, você pode
chamar explicitamente os métodos *note values(): 7cf. ou *note items():
7d0. para obter um iterador apropriado.

O construtor *note dict(): 256. pode aceitar um iterador que retorna um
fluxo finito de tuplas ‘(chave, valor)’:

     >>> L = [('Italy', 'Rome'), ('France', 'Paris'), ('US', 'Washington DC')]
     >>> dict(iter(L))
     {'Italy': 'Rome', 'France': 'Paris', 'US': 'Washington DC'}

Os arquivos também suportam a iteração chamando o método *note
readline(): 1e46. até que não haja mais linhas no arquivo.  Isso
significa que você pode ler cada linha de um arquivo como este:

     for line in file:
         # do something for each line
         ...

Os conjuntos podem tirar seus conteúdos de uma iterável e permitir que
você faça uma iteração sobre os elementos do conjunto:

     >>> S = {2, 3, 5, 7, 11, 13}
     >>> for i in S:
     ...     print(i)
     2
     3
     5
     7
     11
     13


File: python.info,  Node: Expressões do gerador e compreensões de lista,  Next: Geradores<2>,  Prev: Iteradores<2>,  Up: Programação Funcional

9.7.3 Expressões do gerador e compreensões de lista
---------------------------------------------------

Duas operações comuns na saída de um iterador são 1) executando alguma
operação para cada elemento, 2) selecionando um subconjunto de elementos
que atendam a alguma condição.  Por exemplo, com uma lista de cadeias de
caracteres, você pode querer retirar o espaço em branco de cada linha ou
extrair todas as sequências de caracteres que contenham uma determinada
substring.

As compreensões de lista e as expressões do gerador (forma curta:
“listcomps” e “genexps”) são uma notação concisa para tais operações,
emprestado da linguagem de programação funcional Haskell
(‘https://www.haskell.org/’).  Você pode tirar todos os espaços em
branco de um fluxo de strings com o seguinte código:

     >>> line_list = ['  line 1\n', 'line 2  \n', ' \n', '']

     >>> # Expressão geradora -- retorna iterador
     >>> stripped_iter = (line.strip() for line in line_list)

     >>> # Compreensão de lista -- retorna uma lista
     >>> stripped_list = [line.strip() for line in line_list]

Você pode selecionar apenas determinados elementos adicionando uma
condição ‘"if"’:

     >>> stripped_list = [line.strip() for line in line_list
     ...                  if line != ""]

Com uma compreensão de lista, você recebe uma lista Python;
‘Stripped_list’ é uma lista contendo as linhas resultantes, e não um
iterador.  As expressões do gerador retornam um iterador que calcula os
valores conforme necessário, não precisando materializar todos os
valores ao mesmo tempo.  Isso significa que as compreensões da lista não
são úteis se você estiver trabalhando com iteradores que retornam um
fluxo infinito ou uma quantidade muito grande de dados.  As expressões
do gerador são preferíveis nessas situações.

As expressões do gerador são cercadas por parênteses (“()”) e as
compreensões da lista são cercadas por colchetes (“[]”).  As expressões
do gerador têm a forma:

     ( expression for expr in sequence1
                  if condition1
                  for expr2 in sequence2
                  if condition2
                  for expr3 in sequence3
                  ...
                  if condition3
                  for exprN in sequenceN
                  if conditionN )

Novamente, para uma compreensão de lista, apenas os suportes externos
são diferentes (colchetes em vez de parênteses).

Os elementos do resultado gerado serão os valores sucessivos de
‘expression’.  As cláusulas ‘if’ são todas opcionais; Se presente,
‘expression’ só é avaliado e adicionado ao resultado quando ‘condition’
é verdadeiro.

As expressões do gerador sempre devem ser escritas dentro de parênteses,
mas os parênteses que sinalizam uma chamada de função também contam.  Se
você quiser criar um iterador que será imediatamente passado para uma
função, você pode escrever:

     obj_total = sum(obj.count for obj in list_all_objects())

As cláusulas ‘for...in’ contêm as sequências a serem repetidas.  As
sequências não precisam ser do mesmo comprimento, porque são iteradas da
esquerda para a direita, 'não' em paralelo.  Para cada elemento em
‘sequence1’, ‘sequence2’ é enrolado desde o início.  ‘sequence3’ é então
percorrido para cada par resultante de elementos de ‘sequence1’ e
‘sequence2’.

Em outras palavras, uma lista de compreensão ou expressão do gerador é
equivalente ao seguinte código Python:

     for expr1 in sequence1:
         if not (condition1):
             continue   # Ignora este elemento
         for expr2 in sequence2:
             if not (condition2):
                 continue   # Ignora este elemento
             ...
             for exprN in sequenceN:
                 if not (conditionN):
                     continue   # Ignora este elemento

                 # Emite o valor da expressão,

Isso significa que, quando existem várias cláusulas ‘for...in’, mas não
‘if’, o comprimento da saída resultante será igual ao produto dos
comprimentos de todas as sequências.  Se você tiver duas listas de
comprimento 3, a lista de saída tem 9 elementos de comprimento:

     >>> seq1 = 'abc'
     >>> seq2 = (1, 2, 3)
     >>> [(x, y) for x in seq1 for y in seq2]
     [('a', 1), ('a', 2), ('a', 3),
      ('b', 1), ('b', 2), ('b', 3),
      ('c', 1), ('c', 2), ('c', 3)]

Para evitar a introdução de uma ambiguidade na gramática de Python, se
‘expression’ estiver criando uma tupla, ela deve estar cercada de
parênteses.  A primeira lista de compreensão abaixo é um erro de
sintaxe, enquanto o segundo está correto:

     # Erro de sintaxe
     [x, y for x in seq1 for y in seq2]
     # Correto
     [(x, y) for x in seq1 for y in seq2]


File: python.info,  Node: Geradores<2>,  Next: Funções embutidas<4>,  Prev: Expressões do gerador e compreensões de lista,  Up: Programação Funcional

9.7.4 Geradores
---------------

Os geradores são uma classe especial de funções que simplificam a tarefa
de escrever iteradores.  As funções convencionais calculam um valor e o
retornam, mas os geradores retornam um iterador que retorna um fluxo de
valores.

Você está sem dúvida familiarizado com o funcionamento das funções
convencionais em Python ou C. Quando você chama uma função, ela recebe
um espaço de nome privado onde suas variáveis locais são criadas.
Quando a função atinge uma instrução ‘return’, as variáveis locais são
destruídas e o valor retornado ao chamador.  Uma chamada posterior para
a mesma função cria um novo espaço de nome privado e um novo conjunto de
variáveis locais.  Mas, e se as variáveis locais não fossem descartadas
ao sair de uma função?  E se você pudesse retomar a função onde ele
deixou?  Isto é o que os geradores fornecem; Eles podem ser pensados
como funções resumíveis.

Aqui está um exemplo simples de uma função geradora:

     >>> def generate_ints(N):
     ...    for i in range(N):
     ...        yield i

Qualquer função contendo um argumento nomeado *note yield: 9d5. é uma
função de gerador; isso é detectado pelo compilador de *note bytecode:
187. do Python, que compila a função especialmente como resultado.

Quando você chama uma função de gerador, não retorna um único valor; em
vez disso, ele retorna um objeto gerador que suporte o protocolo do
iterador.  Ao executar a expressão ‘yield’, o gerador exibe o valor de
‘i’, semelhante a uma instrução ‘return’.  A grande diferença entre
‘yield’ e uma declaração ‘return’ é que, ao atingir um ‘yield’, o estado
de execução do gerador é suspenso e as variáveis locais são preservadas.
Na próxima chamada ao método do gerador *note __next__(): 1e4e, a função
irá continuar a ser executada.

Aqui está um uso simples do gerador ‘generate_ints()’

     >>> gen = generate_ints(3)
     >>> gen
     <generator object generate_ints at ...>
     >>> next(gen)
     0
     >>> next(gen)
     1
     >>> next(gen)
     2
     >>> next(gen)
     Traceback (most recent call last):
       File "stdin", line 1, in <module>
       File "stdin", line 2, in generate_ints
     StopIteration

Você pode igualmente escrever ‘for i in generate_ints(5)’, ou ‘a, b, c =
generate_ints(3)’.

Dentro de uma função de gerador, ‘return value’ faz com que
‘StopIteration(value)’ seja gerado a partir do método *note __next__():
1e4e.  Uma vez que isso acontece, ou a parte inferior da função é
alcançada, a procissão dos valores termina e o gerador não pode render
mais valores.

Você pode conseguir o efeito de geradores manualmente, escrevendo sua
própria classe e armazenando todas as variáveis locais do gerador como
variáveis de instância.  Por exemplo, retornar uma lista de inteiros
pode ser feito configurando ‘self.count’ para 0, e tendo o *note
iterator.__next__(): 1310. incrementar o método ‘self.count’ e
devolvê-lo.  No entanto, para um gerador moderadamente complicado,
escrever uma classe correspondente pode ser muito mais complicado.

O conjunto de teste incluído na biblioteca do Python,
lib/test/test_generators.py(1), contém vários exemplos mais
interessantes.  Aqui está um gerador que implementa uma passagem em
ordem de uma árvore usando geradores de forma recursiva.

     # Um gerador recursivo que gera folhas da árvore em ordem.
     def inorder(t):
         if t:
             for x in inorder(t.left):
                 yield x

             yield t.label

             for x in inorder(t.right):
                 yield x

Dois outros exemplos no ‘test_generators.py’ produzem soluções para o
problema N-Queens (colocando N rainhas em um tabuleiro de xadrez NxN
para que nenhuma rainha ameace a outra) e o Passeio do Cavalo
(encontrando uma rota que leva um cavalo para cada quadrado de um
tabuleiro de xadrez NxN sem visitar nenhum quadrado duas vezes).

* Menu:

* Passando valores para um gerador::

   ---------- Footnotes ----------

   (1) 
https://github.com/python/cpython/tree/3.13/lib/test/test_generators.py


File: python.info,  Node: Passando valores para um gerador,  Up: Geradores<2>

9.7.4.1 Passando valores para um gerador
........................................

No Python 2.4 e anteriores, os geradores apenas produziram saída.  Uma
vez que o código de um gerador foi invocado para criar um iterador, não
havia como passar qualquer nova informação na função quando sua execução
foi retomada.  Você pode cortar essa habilidade fazendo com que o
gerador olhe para uma variável global ou passando em algum objeto
mutável que os chamadores então modifiquem, mas essas abordagens são
desordenadas.

No Python 2.5 há uma maneira simples de passar valores para um gerador.
*note yield: 9d5. tornou-se uma expressão, retornando um valor que pode
ser atribuído a uma variável ou operado de outra forma:

     val = (yield i)

Eu recomendo que você 'sempre' coloque parênteses em torno de uma
expressão ‘yield’ quando você está fazendo algo com o valor retornado,
como no exemplo acima.  Os parênteses nem sempre são necessários, mas é
mais fácil adicioná-los sempre em vez de ter que lembrar quando são
necessários.

( PEP 342(1) explica as regras exatas, é que uma expressão ‘yield’ deve
sempre ser entre parênteses, exceto quando ocorre na expressão de nível
superior no lado direito de uma atribuição.  Isso significa que você
pode escrever ‘val = yield i’, mas tem que usar parênteses quando há uma
operação, como em ‘val = (yield i) + 12’.)

Os valores são enviados para um gerador chamando seu método *note
send(value): 215a.  Este método retoma o código do gerador e a expressão
‘yield’ retorna o valor especificado.  Se o método regular *note
__next__(): 1e4e. for chamado, o ‘yield’ retorna ‘None’.

Aqui está um contador simples que aumenta em 1 e permite alterar o valor
do contador interno.

     def counter(maximum):
         i = 0
         while i < maximum:
             val = (yield i)
             # Se o valor foi fornecido, altera o contador
             if val is not None:
                 i = val
             else:
                 i += 1

E aqui um exemplo de mudança de contador:

     >>> it = counter(10)
     >>> next(it)
     0
     >>> next(it)
     1
     >>> it.send(8)
     8
     >>> next(it)
     9
     >>> next(it)
     Traceback (most recent call last):
       File "t.py", line 15, in <module>
         it.next()
     StopIteration

Porque ‘yield’ retornará frequentemente ‘None’, você deve verificar
sempre este caso.  Não use apenas seu valor em expressões, a menos que
tenha certeza de que o método *note send(): 215a. será o único método
usado para retomar a função do gerador.

Além de *note send(): 215a, há dois outros métodos em geradores:

   * *note throw(value): 4f8. é usado para gerar uma exceção dentro do
     gerador; a exceção é levantada pela expressão ‘yield’ onde a
     execução do gerador é pausada.

   * *note close(): 15b9. envia uma exceção *note GeneratorExit: 140e.
     ao gerador para encerrar a iteração.  Ao receber essa exceção, o
     código do gerador deve levantar *note GeneratorExit: 140e. ou *note
     StopIteration: c15.; capturar a exceção e fazer qualquer outra
     coisa é ilegal e disparará um *note RuntimeError: 195.  *note
     close(): 15b9. também será chamado pelo coletor de lixo do Python
     quando o gerador for coletado como lixo.

     Se você precisar executar um código de limpeza quando ocorrer um
     *note GeneratorExit: 140e, sugiro usar um conjunto ‘try: ...
     finally:’ em vez de capturar *note GeneratorExit: 140e.

The cumulative effect of these changes is to turn generators from
one-way producers of information into both producers and consumers.

Geradores também se tornam 'corrotinas', uma forma mais generalizada de
subrotinas.  As subrotinas são inseridas em um ponto e encerradas em
outro (o topo da função e uma instrução ‘return’), mas as corrotinas
podem ser inseridas, encerradas e retomadas em muitos pontos diferentes
(as instruções ‘yield’).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0342/


File: python.info,  Node: Funções embutidas<4>,  Next: O módulo itertools,  Prev: Geradores<2>,  Up: Programação Funcional

9.7.5 Funções embutidas
-----------------------

Vamos ver com maiores detalhes as funções embutidas que são comumente
usadas com iteradores.

Duas das funções embutidas do Python, *note map(): 867. e *note
filter(): 868. duplicam os recursos das expressões geradoras:

*note map(f, iterA, iterB, ...): 867. retorna um iterador sobre a sequência

     ‘f(iterA[0], iterB[0]), f(iterA[1], iterB[1]), f(iterA[2],
     iterB[2]), ...’.

          >>> def upper(s):
          ...     return s.upper()

          >>> list(map(upper, ['sentence', 'fragment']))
          ['SENTENCE', 'FRAGMENT']
          >>> [upper(s) for s in ['sentence', 'fragment']]
          ['SENTENCE', 'FRAGMENT']

É claro que você pode alcançar o mesmo efeito com uma compreensão de
lista.

*note filter(predicate, iter): 868. retorna um iterador sobre todos os
elementos da sequência que atendem a uma determinada condição, e é
similarmente duplicada por compreensões de lista.  Um 'predicate' é uma
função que retorna o valor lógico de alguma condição; para uso com *note
filter(): 868, o predicado deve receber um único valor.

     >>> def is_even(x):
     ...     return (x % 2) == 0

     >>> list(filter(is_even, range(10)))
     [0, 2, 4, 6, 8]

isso também pode ser escrito como uma compreensão de lista:

     >>> list(x for x in range(10) if is_even(x))
     [0, 2, 4, 6, 8]

*note enumerate(iter, start=0): 14c9. counts off the elements in the
iterable returning 2-tuples containing the count (from 'start') and each
element.

     >>> for item in enumerate(['subject', 'verb', 'object']):
     ...     print(item)
     (0, 'subject')
     (1, 'verb')
     (2, 'object')

*note enumerate(): 14c9. is often used when looping through a list and
recording the indexes at which certain conditions are met:

     f = open('data.txt', 'r')
     for i, line in enumerate(f):
         if line.strip() == '':
             print('Blank line at line #%i' % i)

*note sorted(iterable, key=None, reverse=False): be7. collects all the
elements of the iterable into a list, sorts the list, and returns the
sorted result.  The 'key' and 'reverse' arguments are passed through to
the constructed list’s *note sort(): be8. method.

     >>> import random
     >>> # Generate 8 random numbers between [0, 10000)
     >>> rand_list = random.sample(range(10000), 8)
     >>> rand_list
     [769, 7953, 9828, 6431, 8442, 9878, 6213, 2207]
     >>> sorted(rand_list)
     [769, 2207, 6213, 6431, 7953, 8442, 9828, 9878]
     >>> sorted(rand_list, reverse=True)
     [9878, 9828, 8442, 7953, 6431, 6213, 2207, 769]

(For a more detailed discussion of sorting, see the *note Técnicas de
ordenação: 2314.)

The *note any(iter): 1468. and *note all(iter): 1469. built-ins look at
the truth values of an iterable’s contents.  *note any(): 1468. returns
‘True’ if any element in the iterable is a true value, and *note all():
1469. returns ‘True’ if all of the elements are true values:

     >>> any([0, 1, 0])
     True
     >>> any([0, 0, 0])
     False
     >>> any([1, 1, 1])
     True
     >>> all([0, 1, 0])
     False
     >>> all([0, 0, 0])
     False
     >>> all([1, 1, 1])
     True

*note zip(iterA, iterB, ...): 7d1. takes one element from each iterable
and returns them in a tuple:

     zip(['a', 'b', 'c'], (1, 2, 3)) =>
       ('a', 1), ('b', 2), ('c', 3)

It doesn’t construct an in-memory list and exhaust all the input
iterators before returning; instead tuples are constructed and returned
only if they’re requested.  (The technical term for this behaviour is
lazy evaluation(1).)

This iterator is intended to be used with iterables that are all of the
same length.  If the iterables are of different lengths, the resulting
stream will be the same length as the shortest iterable.

     zip(['a', 'b'], (1, 2, 3)) =>
       ('a', 1), ('b', 2)

You should avoid doing this, though, because an element may be taken
from the longer iterators and discarded.  This means you can’t go on to
use the iterators further because you risk skipping a discarded element.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Lazy_evaluation


File: python.info,  Node: O módulo itertools,  Next: O módulo functools,  Prev: Funções embutidas<4>,  Up: Programação Funcional

9.7.6 O módulo itertools
------------------------

The *note itertools: 81. module contains a number of commonly used
iterators as well as functions for combining several iterators.  This
section will introduce the module’s contents by showing small examples.

The module’s functions fall into a few broad classes:

   * Funções que criam um novo iterador com base em um iterador
     existente.

   * Funções para tratar os elementos de um iterador como argumentos de
     funções.

   * Funções para selecionar partes da saída de um iterador.

   * A function for grouping an iterator’s output.

* Menu:

* Criando novos iteradores::
* Calling functions on elements::
* Selecionando elementos::
* Combinatoric functions::
* Agrupando elementos::


File: python.info,  Node: Criando novos iteradores,  Next: Calling functions on elements,  Up: O módulo itertools

9.7.6.1 Criando novos iteradores
................................

*note itertools.count(start, step): 12c5. returns an infinite stream of
evenly spaced values.  You can optionally supply the starting number,
which defaults to 0, and the interval between numbers, which defaults to
1:

     itertools.count() =>
       0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ...
     itertools.count(10) =>
       10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ...
     itertools.count(10, 5) =>
       10, 15, 20, 25, 30, 35, 40, 45, 50, 55, ...

*note itertools.cycle(iter): 28d9. saves a copy of the contents of a
provided iterable and returns a new iterator that returns its elements
from first to last.  The new iterator will repeat these elements
infinitely.

     itertools.cycle([1, 2, 3, 4, 5]) =>
       1, 2, 3, 4, 5, 1, 2, 3, 4, 5, ...

*note itertools.repeat(elem, [n]): 28da. returns the provided element
'n' times, or returns the element endlessly if 'n' is not provided.

     itertools.repeat('abc') =>
       abc, abc, abc, abc, abc, abc, abc, abc, abc, abc, ...
     itertools.repeat('abc', 5) =>
       abc, abc, abc, abc, abc

*note itertools.chain(iterA, iterB, ...): 2315. takes an arbitrary
number of iterables as input, and returns all the elements of the first
iterator, then all the elements of the second, and so on, until all of
the iterables have been exhausted.

     itertools.chain(['a', 'b', 'c'], (1, 2, 3)) =>
       a, b, c, 1, 2, 3

*note itertools.islice(iter, [start], stop, [step]): b61. returns a
stream that’s a slice of the iterator.  With a single 'stop' argument,
it will return the first 'stop' elements.  If you supply a starting
index, you’ll get 'stop-start' elements, and if you supply a value for
'step', elements will be skipped accordingly.  Unlike Python’s string
and list slicing, you can’t use negative values for 'start', 'stop', or
'step'.

     itertools.islice(range(10), 8) =>
       0, 1, 2, 3, 4, 5, 6, 7
     itertools.islice(range(10), 2, 8) =>
       2, 3, 4, 5, 6, 7
     itertools.islice(range(10), 2, 8, 2) =>
       2, 4, 6

*note itertools.tee(iter, [n]): 28df. replicates an iterator; it returns
'n' independent iterators that will all return the contents of the
source iterator.  If you don’t supply a value for 'n', the default is 2.
Replicating iterators requires saving some of the contents of the source
iterator, so this can consume significant memory if the iterator is
large and one of the new iterators is consumed more than the others.

     itertools.tee( itertools.count() ) =>
        iterA, iterB

     where iterA ->
        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ...

     and   iterB ->
        0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ...


File: python.info,  Node: Calling functions on elements,  Next: Selecionando elementos,  Prev: Criando novos iteradores,  Up: O módulo itertools

9.7.6.2 Calling functions on elements
.....................................

The *note operator: 9f. module contains a set of functions corresponding
to Python’s operators.  Some examples are *note operator.add(a, b):
2907. (adds two values), *note operator.ne(a, b): 28f7. (same as ‘a !=
b’), and *note operator.attrgetter('id'): e60. (returns a callable that
fetches the ‘.id’ attribute).

*note itertools.starmap(func, iter): 1123. assumes that the iterable
will return a stream of tuples, and calls 'func' using these tuples as
the arguments:

     itertools.starmap(os.path.join,
                       [('/bin', 'python'), ('/usr', 'bin', 'java'),
                        ('/usr', 'bin', 'perl'), ('/usr', 'bin', 'ruby')])
     =>
       /bin/python, /usr/bin/java, /usr/bin/perl, /usr/bin/ruby


File: python.info,  Node: Selecionando elementos,  Next: Combinatoric functions,  Prev: Calling functions on elements,  Up: O módulo itertools

9.7.6.3 Selecionando elementos
..............................

Another group of functions chooses a subset of an iterator’s elements
based on a predicate.

*note itertools.filterfalse(predicate, iter): 2303. is the opposite of
*note filter(): 868, returning all elements for which the predicate
returns false:

     itertools.filterfalse(is_even, itertools.count()) =>
       1, 3, 5, 7, 9, 11, 13, 15, ...

*note itertools.takewhile(predicate, iter): 28de. returns elements for
as long as the predicate returns true.  Once the predicate returns
false, the iterator will signal the end of its results.

     def less_than_10(x):
         return x < 10

     itertools.takewhile(less_than_10, itertools.count()) =>
       0, 1, 2, 3, 4, 5, 6, 7, 8, 9

     itertools.takewhile(is_even, itertools.count()) =>
       0

*note itertools.dropwhile(predicate, iter): 28dc. discards elements
while the predicate returns true, and then returns the rest of the
iterable’s results.

     itertools.dropwhile(less_than_10, itertools.count()) =>
       10, 11, 12, 13, 14, 15, 16, 17, 18, 19, ...

     itertools.dropwhile(is_even, itertools.count()) =>
       1, 2, 3, 4, 5, 6, 7, 8, 9, 10, ...

*note itertools.compress(data, selectors): 12c4. takes two iterators and
returns only those elements of 'data' for which the corresponding
element of 'selectors' is true, stopping whenever either one is
exhausted:

     itertools.compress([1, 2, 3, 4, 5], [True, True, False, False, True]) =>
        1, 2, 5


File: python.info,  Node: Combinatoric functions,  Next: Agrupando elementos,  Prev: Selecionando elementos,  Up: O módulo itertools

9.7.6.4 Combinatoric functions
..............................

The *note itertools.combinations(iterable, r): 1356. returns an iterator
giving all possible 'r'-tuple combinations of the elements contained in
'iterable'.

     itertools.combinations([1, 2, 3, 4, 5], 2) =>
       (1, 2), (1, 3), (1, 4), (1, 5),
       (2, 3), (2, 4), (2, 5),
       (3, 4), (3, 5),
       (4, 5)

     itertools.combinations([1, 2, 3, 4, 5], 3) =>
       (1, 2, 3), (1, 2, 4), (1, 2, 5), (1, 3, 4), (1, 3, 5), (1, 4, 5),
       (2, 3, 4), (2, 3, 5), (2, 4, 5),
       (3, 4, 5)

The elements within each tuple remain in the same order as 'iterable'
returned them.  For example, the number 1 is always before 2, 3, 4, or 5
in the examples above.  A similar function, *note
itertools.permutations(iterable, r=None): 1a6a, removes this constraint
on the order, returning all possible arrangements of length 'r':

     itertools.permutations([1, 2, 3, 4, 5], 2) =>
       (1, 2), (1, 3), (1, 4), (1, 5),
       (2, 1), (2, 3), (2, 4), (2, 5),
       (3, 1), (3, 2), (3, 4), (3, 5),
       (4, 1), (4, 2), (4, 3), (4, 5),
       (5, 1), (5, 2), (5, 3), (5, 4)

     itertools.permutations([1, 2, 3, 4, 5]) =>
       (1, 2, 3, 4, 5), (1, 2, 3, 5, 4), (1, 2, 4, 3, 5),
       ...
       (5, 4, 3, 2, 1)

If you don’t supply a value for 'r' the length of the iterable is used,
meaning that all the elements are permuted.

Note that these functions produce all of the possible combinations by
position and don’t require that the contents of 'iterable' are unique:

     itertools.permutations('aba', 3) =>
       ('a', 'b', 'a'), ('a', 'a', 'b'), ('b', 'a', 'a'),
       ('b', 'a', 'a'), ('a', 'a', 'b'), ('a', 'b', 'a')

The identical tuple ‘('a', 'a', 'b')’ occurs twice, but the two ‘a’
strings came from different positions.

The *note itertools.combinations_with_replacement(iterable, r): 12c3.
function relaxes a different constraint: elements can be repeated within
a single tuple.  Conceptually an element is selected for the first
position of each tuple and then is replaced before the second element is
selected.

     itertools.combinations_with_replacement([1, 2, 3, 4, 5], 2) =>
       (1, 1), (1, 2), (1, 3), (1, 4), (1, 5),
       (2, 2), (2, 3), (2, 4), (2, 5),
       (3, 3), (3, 4), (3, 5),
       (4, 4), (4, 5),
       (5, 5)


File: python.info,  Node: Agrupando elementos,  Prev: Combinatoric functions,  Up: O módulo itertools

9.7.6.5 Agrupando elementos
...........................

The last function I’ll discuss, *note itertools.groupby(iter,
key_func=None): 28dd, is the most complicated.  ‘key_func(elem)’ is a
function that can compute a key value for each element returned by the
iterable.  If you don’t supply a key function, the key is simply each
element itself.

*note groupby(): 28dd. collects all the consecutive elements from the
underlying iterable that have the same key value, and returns a stream
of 2-tuples containing a key value and an iterator for the elements with
that key.

     city_list = [('Decatur', 'AL'), ('Huntsville', 'AL'), ('Selma', 'AL'),
                  ('Anchorage', 'AK'), ('Nome', 'AK'),
                  ('Flagstaff', 'AZ'), ('Phoenix', 'AZ'), ('Tucson', 'AZ'),
                  ...
                 ]

     def get_state(city_state):
         return city_state[1]

     itertools.groupby(city_list, get_state) =>
       ('AL', iterator-1),
       ('AK', iterator-2),
       ('AZ', iterator-3), ...

     where
     iterator-1 =>
       ('Decatur', 'AL'), ('Huntsville', 'AL'), ('Selma', 'AL')
     iterator-2 =>
       ('Anchorage', 'AK'), ('Nome', 'AK')
     iterator-3 =>
       ('Flagstaff', 'AZ'), ('Phoenix', 'AZ'), ('Tucson', 'AZ')

*note groupby(): 28dd. assumes that the underlying iterable’s contents
will already be sorted based on the key.  Note that the returned
iterators also use the underlying iterable, so you have to consume the
results of iterator-1 before requesting iterator-2 and its corresponding
key.


File: python.info,  Node: O módulo functools,  Next: Pequenas funções e as expressões lambda,  Prev: O módulo itertools,  Up: Programação Funcional

9.7.7 O módulo functools
------------------------

The *note functools: 5f. module contains some higher-order functions.  A
'higher-order function' takes one or more functions as input and returns
a new function.  The most useful tool in this module is the *note
functools.partial(): 414. function.

For programs written in a functional style, you’ll sometimes want to
construct variants of existing functions that have some of the
parameters filled in.  Consider a Python function ‘f(a, b, c)’; you may
wish to create a new function ‘g(b, c)’ that’s equivalent to ‘f(1, b,
c)’; you’re filling in a value for one of ‘f()’’s parameters.  This is
called “partial function application”.

The constructor for *note partial(): 414. takes the arguments
‘(function, arg1, arg2, ..., kwarg1=value1, kwarg2=value2)’.  The
resulting object is callable, so you can just call it to invoke
‘function’ with the filled-in arguments.

Aqui está um pequeno mas bem realístico exemplo:

     import functools

     def log(message, subsystem):
         """Write the contents of 'message' to the specified subsystem."""
         print('%s: %s' % (subsystem, message))
         ...

     server_log = functools.partial(log, subsystem='server')
     server_log('Unable to open socket')

*note functools.reduce(func, iter, [initial_value]): 131f. cumulatively
performs an operation on all the iterable’s elements and, therefore,
can’t be applied to infinite iterables.  'func' must be a function that
takes two elements and returns a single value.  *note
functools.reduce(): 131f. takes the first two elements A and B returned
by the iterator and calculates ‘func(A, B)’.  It then requests the third
element, C, calculates ‘func(func(A, B), C)’, combines this result with
the fourth element returned, and continues until the iterable is
exhausted.  If the iterable returns no values at all, a *note TypeError:
2c3. exception is raised.  If the initial value is supplied, it’s used
as a starting point and ‘func(initial_value, A)’ is the first
calculation.

     >>> import operator, functools
     >>> functools.reduce(operator.concat, ['A', 'BB', 'C'])
     'ABBC'
     >>> functools.reduce(operator.concat, [])
     Traceback (most recent call last):
       ...
     TypeError: reduce() of empty sequence with no initial value
     >>> functools.reduce(operator.mul, [1, 2, 3], 1)
     6
     >>> functools.reduce(operator.mul, [], 1)
     1

If you use *note operator.add(): 2907. with *note functools.reduce():
131f, you’ll add up all the elements of the iterable.  This case is so
common that there’s a special built-in called *note sum(): 46a. to
compute it:

     >>> import functools, operator
     >>> functools.reduce(operator.add, [1, 2, 3, 4], 0)
     10
     >>> sum([1, 2, 3, 4])
     10
     >>> sum([])
     0

For many uses of *note functools.reduce(): 131f, though, it can be
clearer to just write the obvious *note for: 2f2. loop:

     import functools
     # Instead of:
     product = functools.reduce(operator.mul, [1, 2, 3], 1)

     # You can write:
     product = 1
     for i in [1, 2, 3]:
         product *= i

A related function is *note itertools.accumulate(iterable,
func=operator.add): a05.  It performs the same calculation, but instead
of returning only the final result, *note accumulate(): a05. returns an
iterator that also yields each partial result:

     itertools.accumulate([1, 2, 3, 4, 5]) =>
       1, 3, 6, 10, 15

     itertools.accumulate([1, 2, 3, 4, 5], operator.mul) =>
       1, 2, 6, 24, 120

* Menu:

* O módulo operator::


File: python.info,  Node: O módulo operator,  Up: O módulo functools

9.7.7.1 O módulo operator
.........................

The *note operator: 9f. module was mentioned earlier.  It contains a set
of functions corresponding to Python’s operators.  These functions are
often useful in functional-style code because they save you from writing
trivial functions that perform a single operation.

Algumas funcionalidades desse módulo são:

   * Math operations: ‘add()’, ‘sub()’, ‘mul()’, ‘floordiv()’, ‘abs()’,
     …

   * Logical operations: ‘not_()’, ‘truth()’.

   * Bitwise operations: ‘and_()’, ‘or_()’, ‘invert()’.

   * Comparisons: ‘eq()’, ‘ne()’, ‘lt()’, ‘le()’, ‘gt()’, and ‘ge()’.

   * Object identity: ‘is_()’, ‘is_not()’.

Consult the operator module’s documentation for a complete list.


File: python.info,  Node: Pequenas funções e as expressões lambda,  Next: Histórico de Revisão e Reconhecimentos,  Prev: O módulo functools,  Up: Programação Funcional

9.7.8 Pequenas funções e as expressões lambda
---------------------------------------------

When writing functional-style programs, you’ll often need little
functions that act as predicates or that combine elements in some way.

If there’s a Python built-in or a module function that’s suitable, you
don’t need to define a new function at all:

     stripped_lines = [line.strip() for line in lines]
     existing_files = filter(os.path.exists, file_list)

If the function you need doesn’t exist, you need to write it.  One way
to write small functions is to use the *note lambda: 12df. expression.
‘lambda’ takes a number of parameters and an expression combining these
parameters, and creates an anonymous function that returns the value of
the expression:

     adder = lambda x, y: x+y

     print_assign = lambda name, value: name + '=' + str(value)

An alternative is to just use the ‘def’ statement and define a function
in the usual way:

     def adder(x, y):
         return x + y

     def print_assign(name, value):
         return name + '=' + str(value)

Which alternative is preferable?  That’s a style question; my usual
course is to avoid using ‘lambda’.

Um dos motivos da minha preferência é que ‘lambda’ é bastante limitado
nas funções que pode definir.  O resultado deve ser computável como uma
única expressão, o que significa que você não pode ter comparações
multi-canais ‘if ... elif ... else’ ou ‘try ... except’.  Se você tentar
fazer muito em uma declaração ‘lambda’, você acabará com uma expressão
excessivamente complicada que é difícil de ler.  Rápido, o que o
seguinte código está fazendo?

     import functools
     total = functools.reduce(lambda a, b: (0, a[1] + b[1]), items)[1]

Você pode descobrir isso, mas leva tempo para desenredar a expressão
para descobrir o que está acontecendo.  Usar uma breve instrução de
‘def’ aninhada torna as coisas um pouco melhor:

     import functools
     def combine(a, b):
         return 0, a[1] + b[1]

     total = functools.reduce(combine, items)[1]

Mas seria o melhor de tudo se eu tivesse usado simplesmente um bucle
‘for’:

     total = 0
     for a, b in items:
         total += b

Ou o *note sum(): 46a. embutida e uma expressão do gerador:

     total = sum(b for a, b in items)

Muitas utilizações de *note functools.reduce(): 131f. são mais claras
quando escritas como laços ‘for’.

Fredrik Lundh sugeriu uma vez o seguinte conjunto de regras para
refatoração de usos de ‘lambda’:

  1. Escrever uma função lambda.

  2. Escreva um comentário explicando o que o lambda faz.

  3. Estude o comentário por um tempo e pense em um nome que capture a
     essência do comentário.

  4. Converta a lambda para uma declaração de definição, usando esse
     nome.

  5. Remover o comentário.

Eu realmente gosto dessas regras, mas você está livre para discordar
sobre se esse estilo sem lambda é melhor.


File: python.info,  Node: Histórico de Revisão e Reconhecimentos,  Next: Referências<2>,  Prev: Pequenas funções e as expressões lambda,  Up: Programação Funcional

9.7.9 Histórico de Revisão e Reconhecimentos
--------------------------------------------

O autor agradece as seguintes pessoas por oferecer sugestões, correções
e assistência com vários rascunhos deste artigo: Ian Bicking, Nick
Coghlan, Nick Efford, Raymond Hettinger, Jim Jewett, Mike Krell, Leandro
Lameiro, Jussi Salmela, Collin Winter, Blake Winton.

Versão 0.1: publicado em 30 de junho de 2006.

Versão 0.11: publicado em 1º de julho de 2006.  Correções de erros de
escrita.

Versão 0.2: publicado em 10 de julho de 2006.  Incorporou as seções
genexp e listcomp em uma.  Correções de erros de escrita.

Versão 0.21: adicionou mais referências sugeridas na lista de
correspondência do tutor.

Versão 0.30: Adiciona uma seção no módulo ‘functional’ escrito por
Collin Winter; Adiciona seção curta no módulo do operador; Algumas
outras edições.


File: python.info,  Node: Referências<2>,  Prev: Histórico de Revisão e Reconhecimentos,  Up: Programação Funcional

9.7.10 Referências
------------------

* Menu:

* Geral::
* Python-specific::
* Documentação do Python::


File: python.info,  Node: Geral,  Next: Python-specific,  Up: Referências<2>

9.7.10.1 Geral
..............

'Structure and Interpretation of Computer Programs', by Harold Abelson
and Gerald Jay Sussman with Julie Sussman.  The book can be found at
‘https://mitpress.mit.edu/sicp’.  In this classic textbook of computer
science, chapters 2 and 3 discuss the use of sequences and streams to
organize the data flow inside a program.  The book uses Scheme for its
examples, but many of the design approaches described in these chapters
are applicable to functional-style Python code.

‘https://defmacro.org/2006/06/19/fp.html’: A general introduction to
functional programming that uses Java examples and has a lengthy
historical introduction.

‘https://pt.wikipedia.org/wiki’/Programação_funcional: Informação geral
do Wikipédia para descrever programação funcional.

‘https://pt.wikipedia.org/wiki/Corrotina’: Entrada para corrotinas.

‘https://en.wikipedia.org/wiki/Partial_application’: Entry for the
concept of partial function application.

‘https://pt.wikipedia.org/wiki/Currying’: Entrada para o conceito de
currying.


File: python.info,  Node: Python-specific,  Next: Documentação do Python,  Prev: Geral,  Up: Referências<2>

9.7.10.2 Python-specific
........................

‘https://gnosis.cx/TPiP/’: The first chapter of David Mertz’s book ‘Text
Processing in Python’ discusses functional programming for text
processing, in the section titled “Utilizing Higher-Order Functions in
Text Processing”.

Mertz also wrote a 3-part series of articles on functional programming
for IBM’s DeveloperWorks site; see part 1(1), part 2(2), and part 3(3),

   ---------- Footnotes ----------

   (1) https://developer.ibm.com/articles/l-prog/

   (2) https://developer.ibm.com/tutorials/l-prog2/

   (3) https://developer.ibm.com/tutorials/l-prog3/


File: python.info,  Node: Documentação do Python,  Prev: Python-specific,  Up: Referências<2>

9.7.10.3 Documentação do Python
...............................

Documentação para o módulo *note itertools: 81.

Documentation for the *note functools: 5f. module.

Documentação para o módulo *note operator: 9f.

PEP 289(1): “Gerador de Expressões”

PEP 342(2): “Coroutines via Enhanced Generators” descreve os novos
recursos do gerador no Python 2.5.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0289/

   (2) https://peps.python.org/pep-0342/


File: python.info,  Node: Logging,  Next: Livro de receitas do logging,  Prev: Programação Funcional,  Up: Python HOWTOs

9.8 Logging
===========


Autor: Vinay Sajip <vinay_sajip at red-dove dot com>

Essa página contém informações relativas a tutoriais.  Para links de
informações de referência e livro de receitas de logging, por favor veja
*note Outros recursos: 5397.

* Menu:

* Tutorial Básico de Logging::
* Tutorial Avançado do Logging::
* Níveis de Logging: Níveis de Logging<2>.
* Handlers úteis::
* Exceções levantadas durante logging::
* Usando objetos arbitrários como mensagens::
* Optimização::
* Outros recursos: Outros recursos<2>.


File: python.info,  Node: Tutorial Básico de Logging,  Next: Tutorial Avançado do Logging,  Up: Logging

9.8.1 Tutorial Básico de Logging
--------------------------------

Logging é uma maneira de rastrear eventos que acontecem quando algum
software é executado.  O desenvolvedor de software adiciona chamadas de
logging no código para indicar que determinado evento ocorreu.  Um
evento é definido por uma mensagem descritiva que pode opcionalmente
conter o valor de uma variável (ex.: um dado que é potencialmente
diferente pra cada ocorrência do evento).  Eventos também possuem
importâncias atribuídas pelo desenvolvedor; esta importância pode ser
chamada de 'nível' ou 'severidade'.

* Menu:

* Quando usar logging::
* Um exemplo simples::
* Logging em um arquivo::
* Logging de variáveis dinâmicas::
* Alterar o formato das mensagens exibidas::
* Exibindo data/hora em mensagens::
* Próximos Passos::


File: python.info,  Node: Quando usar logging,  Next: Um exemplo simples,  Up: Tutorial Básico de Logging

9.8.1.1 Quando usar logging
...........................

Você pode instanciar loggers com ‘logger = getLogger(__name__)’ e, em
seguida, chamar os métodos *note debug(): e57, *note info(): 2e3f, *note
warning(): 17f6, *note error(): 2e41. e *note critical(): e56.  Para
determinar a necessidade ou não de usar logging, e escolher o método
adequado, consulte a tabela abaixo.  Ela indica, para cada conjunto de
tarefas comuns, a melhor ferramenta a ser usada.

Tarefa que você deseja executar           A melhor ferramenta para a tarefa
                                          
-------------------------------------------------------------------------------------
                                          
Exibir uma mensagem na saída do console   *note print(): fa9.
para uso ordinário de um script de        
linha de comando (CLI) ou programa.

Expor eventos que possam ocorrer          Utilize o método *note info(): 2e3f. de
durante a operação normal de um           um logger (ou o método
programa (por exemplo, para monitorar o   *note debug(): e57, no caso de mensagens
estado atual de execução ou poder         mais detalhadas para diagnóstico e
investigar falhas)                        investigação de erros)
                                          
                                          
Emitir um aviso sobre um evento que       Utilize a função
ocorre em um tempo de execução            *note warnings.warn(): 1562. da
específico                                biblioteca padrão se o problema for
                                          evitável, e caso a aplicação deva ser
                                          modificada pelo usuário para eliminar o
                                          alerta.
                                          
                                          Utilize o método *note warning(): 17f6.
                                          de um logger, caso não haja nada que o
                                          usuário possa fazer na aplicação, mas o
                                          evento ainda deva ser registrado
                                          
                                          
Expor um erro sobre um evento em um       Levantando uma exceção
tempo de execução específico              

Expor a supressão de um erro sem          Um método *note error(): 2e41,
levantar uma exceção (por exemplo, ao     *note exception(): e55. ou
utilizar um tratador de erro em um        *note critical(): e56. do logger,
processo de longa execução)               conforme apropriado para o erro
                                          específico e domínio da aplicação
                                          

Os métodos de logger são nomeados de acordo com o nível ou severidade
dos eventos que eles são usados para rastrear.  Os níveis padrão e sua
aplicabilidade são descritos abaixo (em ordem crescente de severidade):

Nível              Quando é usado
                   
---------------------------------------------------------------------
                   
‘DEBUG’            Informação detalhada, tipicamente utilizáveis
                   apenas para diagnosticar problemas.
                   
                   
‘INFO’             Confirmação de que as coisas estão funcionando
                   como esperado.
                   
                   
‘WARNING’          Uma indicação que algo inesperado aconteceu, ou
                   um indicativo de que poderá haver algum
                   problema em um futuro próximo (por exemplo:
                   ‘pouco espaço em disco’).  O software está
                   ainda funcionando como esperado.
                   
                   
‘ERROR’            Por conta de um problema mais grave, o software
                   não conseguiu executar alguma função.
                   
                   
‘CRITICAL’         Um erro grave, indicando que o programa pode
                   não conseguir continuar rodando.
                   

O nível padrão é ‘WARNING’, o que significa que somente os eventos desse
nível de severidade e superiores serão registrados, a menos que o logger
do pacote esteja configurado para fazer o contrário.

Eventos que são rastreados podem ser tratados de diferentes formas.  O
jeito mais simples de lidar com eventos rastreados é exibi-los no
console.  Outra maneira comum é gravá-los em um arquivo de disco.


File: python.info,  Node: Um exemplo simples,  Next: Logging em um arquivo,  Prev: Quando usar logging,  Up: Tutorial Básico de Logging

9.8.1.2 Um exemplo simples
..........................

Um exemplo bastante simples é:

     import logging
     logging.warning('Cuidado!')  # exibirá uma mensagem no console
     logging.info('Eu te avisei')  # não exibirá nada

Se você colocar essas linhas no script e executá-lo, você verá:

     WARNING:root:Cuidado!

no console.  A mensagem ‘INFO’ não aparece porque o nível padrão de
logging é ‘WARNING’ .  A mensagem exibida inclui a indicação do nível e
a descrição do evento fornecido na chamada de logging.  Ou seja,
‘Cuidado!’.  A saída pode ser formatada de maneira bastante flexível, se
necessário; as opções de formatação também serão explicadas mais tarde.

Observe que neste exemplo, usamos funções diretamente no módulo
‘logging’, como ‘logging.debug’, ao invés de criar um logger e chamar
funções nele.  Essas funções operam no logger raiz, mas podem ser úteis,
pois chamarão *note basicConfig(): a08. para você se ele ainda não tiver
sido chamado, como neste exemplo.  Em programas maiores, você geralmente
desejará controlar explicitamente a configuração de logging, no entanto
- então, por esse motivo, assim como por outros, é melhor criar loggers
e chamar seus métodos.


File: python.info,  Node: Logging em um arquivo,  Next: Logging de variáveis dinâmicas,  Prev: Um exemplo simples,  Up: Tutorial Básico de Logging

9.8.1.3 Logging em um arquivo
.............................

Uma situação muito comum é a de registrar eventos de log em um arquivo,
então vamos dar uma olhada nisso a seguir.  Teste o código a seguir em
um interpretador Python recém-iniciado.  Não continue a partir da sessão
usada para o código anterior.

     import logging
     logger = logging.getLogger(__name__)
     logging.basicConfig(filename='exemplo.log', encoding='utf-8', level=logging.DEBUG)
     logger.debug('Esta mensagem aparecerá no arquivo de log')
     logger.info('Esta também')
     logger.warning('E também essa')
     logger.error('Além de palavras com caracteres não-ASCII, como Øresund e Malmö')

Alterado na versão 3.9: O argumento de codificação 'encoding' foi
adicionado.  Em versões anteriores do Python, a codificação utilizada
por padrão seria definida em *note open(): 51c.  Embora não seja
mostrado no exemplo acima, um argumento de 'erro' pode ser utilizado, o
que determina como o codificação de erros são tratadas.  Para saber mais
sobre essas possibilidades, consulte a documentação de *note open():
51c.

E agora se nós abrirmos o arquivo e olharmos o que temos, deveremos
encontrar essas mensagens de log:

     DEBUG:__main__:Esta mensagem aparecerá no arquivo de log
     INFO:__main__:Esta também
     WARNING:__main__:E também essa
     ERROR:__main__:Além de palavras com caracteres não-ASCII, como Øresund e Malmö

Este exemplo também mostra como você pode configurar o nível do logging
, que funcionará como um limite para o rastreamento.  Neste caso, como
definimos o nível limite como ‘DEBUG’, todas as mensagens foram
exibidas.

Você também pode definir o nível de logging a partir de um parâmetro
pela linha de comando (CLI):

     --log=INFO

e se você quiser obter o valor do parâmetro ‘--log’ em algum ponto do
código, você pode usar:

     getattr(logging, loglevel.upper())

para obter o valor que você passará para a *note basicConfig(): a08.
pelo argumento de nível 'level'.  Isso pode ser útil para verificar
erros introduzidos pelo usuário, como no exemplo a seguir:

     # presumindo que a variável loglevel está atrelada ao valor da string obtida
     # pelo argumento de linha de comando; Converter para caixa alta permite ao usuário
     # declarar tanto --log=DEBUG quanto--log=debug
     nivel_numerico = getattr(logging, loglevel.upper(), None)
     if not isinstance(nivel_numerico , int):
         raise ValueError('Nível de log invalido: %s' % loglevel)
     logging.basicConfig(level=nivel_numerico, ...)

A chamada para *note basicConfig(): a08. deve vir 'antes' de qualquer
chamada para métodos de um logger, como *note debug(): e57, *note
info(): 2e3f, etc.  Caso contrário, o logging deste evento pode não ser
tratado da forma desejada.

Se você executar o script acima diversas vezes, as mensagens das
sucessivas execuções serão acrescentadas ao arquivo 'exemplo.log'.  Se
você quiser que cada execução seja iniciada novamente, não guardando as
mensagens das execuções anteriores, você pode definir o argumento
'filemode', mudando a chamada no exemplo acima para:

     logging.basicConfig(filename='exemplo.log', filemode='w', level=logging.DEBUG)

A saída será a mesma de antes, mas o arquivo de log não será mais
incrementado.  Desta forma, as mensagens de execuções anteriores serão
perdidas.


File: python.info,  Node: Logging de variáveis dinâmicas,  Next: Alterar o formato das mensagens exibidas,  Prev: Logging em um arquivo,  Up: Tutorial Básico de Logging

9.8.1.4 Logging de variáveis dinâmicas
......................................

Para logar o dado de uma variável, use o formato string para a mensagem
descritiva do evento e adicione a variável como argumento.  Exemplo:

     import logging
     logging.warning('%s onde você %s', 'Olhe', 'anda!')

exibirá:

     WARNING:root:Olhe onde você anda!

Como você pode ver, para combinar uma variável de dados na mensagem
descritiva do evento usamos o velho operador %, formatador de strings.
Isto é usado para garantir compatibilidade com as versões anteriores: os
pacotes logging mais recentes contam com opções de formatação como *note
str.format(): 621. e *note string.Template: 687.  Mas explorar estes
métodos está fora do escopo deste tutorial.  Veja *note Using particular
formatting styles throughout your application: 2e60. para mais
informações.


File: python.info,  Node: Alterar o formato das mensagens exibidas,  Next: Exibindo data/hora em mensagens,  Prev: Logging de variáveis dinâmicas,  Up: Tutorial Básico de Logging

9.8.1.5 Alterar o formato das mensagens exibidas
................................................

Para mudar o formato usado para exibir mensagens, você precisa
especificar o formato que quer usar:

     import logging
     logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG)
     logging.debug('Esta mensagem aparecerá no console')
     logging.info('Esta também')
     logging.warning('E também essa')

que vai exibir:

     DEBUG:Esta mensagem aparecerá no console
     INFO:Esta também
     WARNING:E também essa

Note que a palavra ‘root’ que apareceu nos exemplos anteriores
desapareceu.  Para todas as configurações que possam aparecer na
formatação de strings, você pode consultar a documentação *note
Atributos LogRecord: 2e3e, mas para uso simples, você só precisa do
'levelname' (severidade), 'message' (descrição do evento, incluindo a
variável com dados) e talvez exibir quando o evento ocorreu.  Isto esta
descrito na próxima seção.


File: python.info,  Node: Exibindo data/hora em mensagens,  Next: Próximos Passos,  Prev: Alterar o formato das mensagens exibidas,  Up: Tutorial Básico de Logging

9.8.1.6 Exibindo data/hora em mensagens
.......................................

Para exibir a data e hora de um evento, você pode colocar ‘%(asctime)s’
na sua string de formato:

     import logging
     logging.basicConfig(format='%(asctime)s %(message)s')
     logging.warning('foi quando este evento foi registrado.')

que deve exibir algo assim:

     2010-12-12 11:41:42,612 foi quando este evento foi registrado.

O formato padrão para data/hora (mostrado abaixo) é a ISO8601 ou a RFC
3339(1).  Se você precisar de mais controle sobre a formatação de
data/hora, defina o argumento 'datefmt' na função ‘basicConfig’, como
neste exemplo:

     import logging
     logging.basicConfig(format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
     logging.warning('foi quando este evento foi registrado.')

que deve exibir algo assim:

     12/12/2010 11:46:36 AM foi quando este evento foi registrado.

O formato do argumento 'datefmt' é o mesmo suportado por *note
time.strftime(): 1229.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc3339.html


File: python.info,  Node: Próximos Passos,  Prev: Exibindo data/hora em mensagens,  Up: Tutorial Básico de Logging

9.8.1.7 Próximos Passos
.......................

Concluímos aqui o tutorial básico.  Isto deve ser o bastante para você
começar a trabalhar com logging.  Existe muito mais que o pacote de
logging pode oferecer, mas para ter o melhor disto, você precisará
investir um pouco mais do seu tempo lendo as próximas seções.  Se você
está pronto para isso, pegue sua bebida favorita e continue.

Se as suas necessidades de logging forem simples, use os exemplos acima
para incorporar o registro em seus próprios scripts e, se tiver
problemas ou não entender alguma coisa, publique uma pergunta na
categoria Help do fórum de discussão Python(1).  Você deverá receber
ajuda em breve.

Ainda por aqui?  Você pode continuar lendo as seções seguintes, que tem
um tutorial mais avançado que o básico acima.  Depois disso, você pode
dar uma olhada no *note Livro de receitas do logging: 1237.

   ---------- Footnotes ----------

   (1) https://discuss.python.org/c/help/7


File: python.info,  Node: Tutorial Avançado do Logging,  Next: Níveis de Logging<2>,  Prev: Tutorial Básico de Logging,  Up: Logging

9.8.2 Tutorial Avançado do Logging
----------------------------------

A biblioteca de logging tem uma abordagem modular e oferece algumas
categorias de componentes: loggers, manipuladores, filtros, e
formatadores.

   * Loggers expõem a interface que o código da aplicação usa
     diretamente.

   * Handlers enviam os registros do evento (criados por loggers) aos
     destinos apropriados.

   * Filters fornecem uma facilidade granular para determinar quais
     registros de eventos enviar à saída.

   * Formatters especificam o layout dos registros de eventos na saída
     final.

Um evento, quando registrado, passa por loggers, manipuladores, filtros
e formatadores através de uma instância de *note LogRecord: 101c.

Para executar uma ação de logging, é necessário criar instâncias da
classe *note Logger: b64. (também chamadas de 'loggers'), e invocar seus
métodos.  Cada instância tem um nome, e elas são conceitualmente
organizadas em uma hierarquia de espaço de nomes utilizando pontos como
separadores.  Por exemplo, um logger nomeado como ‘leitor’ é o pai do
logger ‘leitor.texto’, ‘leitor.html’ e ‘leitor.pdf’.  Você pode nomear o
logger do jeito que preferir, e indicar o trecho da aplicação que
origina a mensagem de log.

Uma boa prática ao nomear loggers é criar, em cada módulo que usa
logging, um logger definido no mesmo nível do módulo.  Como no exemplo
abaixo:

     logger = logging.getLogger(__name__)

Isso significa que os nomes dos loggers acompanham a hierarquia de
pacotes e módulos, tornando intuitivo saber de onde os eventos foram
registrados apenas olhando o nome do logger.

O início da hierarquia de loggers é chamado de logger raiz.  É ele que é
usado pelas funções *note debug(): 2e40, *note info(): 2e6b, *note
warning(): 2ff, *note error(): 2e7f. e *note critical(): 2e80, que
apenas chamam o método de mesmo nome dentro do logger raiz.  Essas
funções, e seus métodos correspondentes, têm a mesma assinatura (mesmos
parâmetros aceitos).  Na saída do log, o nome do logger raiz aparece
como ‘root’.

É possível registrar mensagens de log em diferentes destinos.  O pacote
já traz suporte para enviar logs para arquivos, URLs via HTTP GET/POST,
e-mails via SMTP, soquetes genéricos, filas ou mecanismos de log
específicos do sistema operacional, como o syslog no Unix/Linux ou o
Event Log do Windows NT. Esses destinos são gerenciados por classes
chamadas manipuladores.  Se precisar de um destino especial que não seja
atendido pelos manipuladores embutidos, você poderá criar sua própria
classe manipuladora para destinar corretamente o log.

Por padrão, nenhum destino é definido para nenhuma mensagem de registro.
É possível especificar um destino (como console, ou arquivo) usando
*note basicConfig(): a08, como nos exemplos do tutorial.  Se você chamar
as funções *note debug(): 2e40. , *note info(): 2e6b, *note warning():
2ff, *note error(): 2e7f. e *note critical(): 2e80, elas verificarão se
o destino está definido; e, caso não esteja, elas definirão o console
como o destino (‘sys.stderr’) e definirão o formato utilizando um
formato padrão.  Só então, enviarão a mensagem ao logger raiz, para que
seja registrada na saída.

O formato padrão definido por *note basicConfig(): a08. para mensagens
é:

     severity:logger name:message

Você pode alterar isso passando uma string de formato para *note
basicConfig(): a08, através do argumento nomeado 'format'.  Para sobre
como uma string de formato é construída, consulte *note Formatter
Objects: 2e5d.

* Menu:

* Fluxo de Logging::
* Registradores::
* Manipuladores::
* Formatadores::
* Configurando Logging::
* O que acontece se nenhuma configuração é fornecida::
* Configurando logging para uma biblioteca::


File: python.info,  Node: Fluxo de Logging,  Next: Registradores,  Up: Tutorial Avançado do Logging

9.8.2.1 Fluxo de Logging
........................

O fluxo dos eventos de log em loggers e manipuladores é ilustrado no
diagrama a seguir.

[image src="python-figures/logging_flow.png"]



File: python.info,  Node: Registradores,  Next: Manipuladores,  Prev: Fluxo de Logging,  Up: Tutorial Avançado do Logging

9.8.2.2 Registradores
.....................

Objetos *note Logger: b64. têm três funções principais.  Primeiro, eles
expõem vários métodos para que o código da aplicação possa registrar
mensagens durante a execução.  Segundo, eles decidem quais mensagens de
log devem ser processadas, com base no nível de severidade (é o filtro
padrão) ou em objetos filtro.  Terceiro, eles encaminham as mensagens de
log relevantes para todos os manipuladores de log interessados.

Os métodos mais utilizados em objetos logger se enquadram em duas
categorias: configuração e envio de mensagem.

Esses são os métodos de configuração mais comuns:

   * *note Logger.setLevel(): 14db. especifica o nível mínimo de
     severidade que um logger vai lidar.  O nível DEBUG é o mais baixo,
     e o CRITICAL é o mais alto entre os níveis padrão.  Por exemplo, se
     o nível do logger for INFO, ele vai processar apenas mensagens de
     nível INFO, WARNING, ERROR e CRITICAL, e vai ignorar mensagens
     DEBUG.

   * *note Logger.addHandler(): 2e36. e *note Logger.removeHandler():
     2e37. adicionam e removem objetos manipuladores do objeto logger.
     Manipuladores serão aprofundados em *note Manipuladores: 53a4.

   * *note Logger.addFilter(): 2e44. e *note Logger.removeFilter():
     2e45. adicionam e removem objetos filtros do objeto logger.
     Filtros serão aprofundados em *note Filter Objects: 2e68.

Você não precisa sempre invocar esses métodos em cada logger que criar.
Consulte os últimos dois paragrafos nessa mesma seção.

Com o objeto logger configurado, os seguintes métodos criam mensagens de
log:

   * *note Logger.debug(): e57, *note Logger.info(): 2e3f, *note
     Logger.warning(): 17f6, *note Logger.error(): 2e41. e *note
     Logger.critical(): e56. criam logs com uma mensagem em um nível
     correspondente ao respectivo nome do método.  A mensagem é uma
     string de formato, que pode conter a sintaxe padrão de
     substituições como ‘%s’, ‘%d’ e ‘%f’.  O restante dos argumentos
     são uma lista de objetos que correspondem aos campos de
     substituição da mensagem.  No caso do parâmetro ‘**kwargs’, os
     métodos de logging cuidam apenas da chave ‘exc_info’.  É essa chave
     que eles usam para decidir se devem ou não registrar os detalhes de
     uma exceção.

   * *note Logger.exception(): e55. cria uma mensagem de log parecida
     com *note Logger.error(): 2e41.  A diferença é que, além da
     mensagem, *note Logger.exception(): e55. também registra o stack
     trace (situação da pilha de execução).  Chame este método apenas a
     partir de um manipulador de exceção.

   * *note Logger.log(): e54. recebe o nível de log como um argumento
     explícito.  Isso torna o registro de mensagens um pouco mais
     verboso do que usar os métodos prontos para cada nível, com os
     métodos listados anteriormente, mas é uma forma de registrar
     mensagens em níveis de log personalizados.

*note getLogger(): 967. retorna uma referência para uma instância de um
logger com o nome especificado, caso informado, ou para o logger raiz
(caso nenhum nome seja passado).  Os nomes seguem uma estrutura
hierárquica separada por pontos.  Chamadas repetidas a *note
getLogger(): 967. com o mesmo nome retornam sempre uma referência para a
mesma instância do objeto logger.  Loggers que aparecem mais embaixo na
hierarquia são filhos dos loggers que estão mais acima nessa lista.  Por
exemplo, dado um logger com nome ‘foo’, loggers com os nomes ‘foo.bar’,
‘foo.bar.baz’ e ‘foo.bam’ serão todos descendentes de ‘foo’.

Loggers têm o conceito de nível efetivo.  Se um logger não tiver um
nível definido explicitamente, ele herdará o nível do seu logger pai.
Caso o pai também não tenha um nível definido, o processo continua
subindo na hierarquia, examinando cada ancestral, até encontrar um
logger com nível configurado.  O logger raiz sempre terá um nível
explícito configurado (por padrão, ‘WARNING’).  Ao decidir se um evento
será processado, o logger usa o seu nível efetivo para determinar se o
evento deve ser repassado para os manipuladores responsáveis.

Loggers filhos propagam suas mensagens para os manipuladores associados
aos seus loggers ancestrais.  Por causa disso, não é necessário definir
e configurar manipuladores para todos os loggers usados em uma
aplicação.  Basta configurar os manipuladores em um logger de nível
superior, e criar loggers filhos conforme a necessidade.  No entanto, é
possível desativar essa propagação definindo o atributo 'propagate' do
logger como ‘False’.


File: python.info,  Node: Manipuladores,  Next: Formatadores,  Prev: Registradores,  Up: Tutorial Avançado do Logging

9.8.2.3 Manipuladores
.....................

Objetos *note Handler: 14de. são responsáveis por enviar as mensagens de
log apropriadas (com base na severidade de cada mensagem) para o destino
especificado do manipulador.  Objetos *note Logger: b64. podem adicionar
um ou mais manipuladores a si mesmos usando o método *note addHandler():
2e36.  Em um cenário hipotético, uma aplicação pode querer “enviar todas
as mensagens de log para um arquivo”, “enviar apenas mensagens de erro
ou mais graves para o ‘stdout’” e “enviar apenas mensagens críticas para
um endereço de e-mail”.  Esse cenário exigiria três manipuladores
diferentes, cada um responsável por encaminhar mensagens de uma
determinada gravidade para um destino específico.

A biblioteca padrão possui alguns tipos de manipuladores (veja *note
Handlers úteis: 53a6.); os tutoriais usam principalmente *note
StreamHandler: 1238. e *note FileHandler: 19de. em seus exemplos.

Existem pouquíssimos métodos em um manipulador com os quais
desenvolvedores de aplicações precisam se preocupar.  Para quem está
usando manipuladores já inclusos na biblioteca (ou seja, sem criar
manipuladores personalizados), os únicos métodos realmente relevantes
são os métodos de configuração a seguir:

   * O método *note setLevel(): 2e52, assim como acontece nos objetos
     logger, , define o menor nível de severidade das mensagens que
     serão encaminhadas para o destino adequado.  Mas por que existem
     dois métodos *note setLevel(): 2e52.?  Isso acontece porque o nível
     configurado no logger define quais mensagens ele vai repassar para
     seus manipuladores.  Já o nível configurado em cada manipulador
     define, entre as mensagens recebidas, quais realmente serão
     enviadas adiante.

   * *note setFormatter(): 2e53. define um objeto Formatador para que o
     manipulador utilize.

   * *note addFilter(): 2e54. e *note removeFilter(): 2e55,
     respectivamente, adicionam e removem objetos filtros nos
     manipuladores.

O código da aplicação não deve instanciar nem usar diretamente objetos
da classe *note Handler: 14de.  Na verdade, *note Handler: 14de. é uma
classe base que define a interface que todos os manipuladores devem
implementar e estabelece um comportamento padrão que pode ser
aproveitado (ou sobrescrito) pelas classes filhas.


File: python.info,  Node: Formatadores,  Next: Configurando Logging,  Prev: Manipuladores,  Up: Tutorial Avançado do Logging

9.8.2.4 Formatadores
....................

Objetos Formatadores definem a ordem, a estrutura e o conteúdo final da
mensagem de log.  Diferentemente da classe base *note logging.Handler:
14de, o código da aplicação pode instanciar classes de formatadores —
embora também seja possível criar subclasses, caso sua aplicação precise
de um comportamento específico.  O construtor aceita três argumentos
opcionais: uma string de formato da mensagem, uma string de formatação
da data e um indicador de estilo.

 -- Método: logging.Formatter.__init__ (fmt=None, datefmt=None,
          style='%')

Se nenhuma string de formato for fornecida na mensagem, o padrão é usar
a mensagem bruta.  Se nenhuma string de formato de data for definida, o
formato de data padrão será:

     %Y-%m-%d %H:%M:%S

com os milissegundos acrescentados ao final.  O parâmetro ‘style’ pode
ser ‘'%'’, ‘'{'’ ou ‘'$'’.  Se nenhum deles for especificado, o padrão
utilizado será ‘'%'’.

Se o o parâmetro ‘style’ for ‘'%'’, a string de formato da mensagem
substituirá a string usando o estilo ‘%(<chave de dicionário>)s’; as
chaves possíveis estão documentadas em *note Atributos LogRecord: 2e3e.
Se o estilo for ‘'{'’, a string de formato é presumida como compatível
com *note str.format(): 621. (usando argumentos nomeados).  Já se o
estilo for ‘'$'’, a string de formato deverá seguir o que é esperado por
*note string.Template.substitute(): 247e.

Alterado na versão 3.2: Adicionado o parâmetro ‘style’.

A string de formato a seguir vai escrever o tempo em um formato legível
para humanos, a severidade da mensagem, e o conteúdo da mensagem, nessa
ordem:

     '%(asctime)s - %(levelname)s - %(message)s'

Formatadores usam uma função configurável pelo usuário para converter o
horário de criação de um registro em uma tupla.  Por padrão, é utilizada
a função *note time.localtime(): 1541.; Se você quiser alterar isso
apenas para uma instância específica de formatador, basta definir o
atributo ‘converter’ dessa instância para uma função com a mesma
assinatura de *note time.localtime(): 1541. ou *note time.gmtime():
1200.  Já se a ideia for alterar o comportamento para todos os
formatadores (por exemplo, para exibir todos os horários de log em GMT),
defina o atributo ‘converter’ diretamente na classe Formatadora (usando,
por exemplo, ‘time.gmtime’ para exibição em GMT).


File: python.info,  Node: Configurando Logging,  Next: O que acontece se nenhuma configuração é fornecida,  Prev: Formatadores,  Up: Tutorial Avançado do Logging

9.8.2.5 Configurando Logging
............................

Programadores podem configurar logging de três formas:

  1. Criando loggers, manipuladores e formatadores de forma explícita,
     usando código Python que invoca os métodos de configuração
     mencionados acima.

  2. Criando um arquivo de configuração de logging e lendo-o usando a
     função *note fileConfig(): b66.

  3. Criando um dicionário com as informações de configuração e
     passando-o para a função *note dictConfig(): 11ef.

Para a documentação de referência sobre as duas últimas opções, consulte
*note Funções de configuração: 1335.  O exemplo a seguir configura um
logger bem simples, um manipulador de console e um formatador simples
utilizando código Python:

     import logging

     # cria o logger
     logger = logging.getLogger('exemplo_simples')
     logger.setLevel(logging.DEBUG)

     # cria o manipulador de console e configura o nível para depuração
     ch = logging.StreamHandler()
     ch.setLevel(logging.DEBUG)

     # cria o formatador
     formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')

     # adiciona o formatador ao manipulador
     ch.setFormatter(formatter)

     # adiciona o manipulador ao logger
     logger.addHandler(ch)

     # 'código' da aplicação
     logger.debug('mensagem de depuração')
     logger.info('mensagem informativa')
     logger.warning('mensagem de alerta')
     logger.error('mensagem de erro')
     logger.critical('mensagem crítica')

A execução deste módulo pela linha de comando produz a seguinte saída:

     $ python simple_logging_module.py
     2005-03-19 15:10:26,618 - exemplo_simples - DEBUG - mensagem de depuração
     2005-03-19 15:10:26,620 - exemplo_simples - INFO - mensagem informativa
     2005-03-19 15:10:26,695 - exemplo_simples - WARNING - mensagem de alerta
     2005-03-19 15:10:26,697 - exemplo_simples - ERROR - mensagem de erro
     2005-03-19 15:10:26,773 - exemplo_simples - CRITICAL - mensagem crítica

O módulo Python a seguir cria um logger, um manipulador e um formatador
quase idênticos aos do exemplo mostrado acima, sendo a única diferença
os nomes dos objetos:

     import logging
     import logging.config

     logging.config.fileConfig('logging.conf')

     # criação do logger
     logger = logging.getLogger('simpleExample')

     # código da 'aplicação'
     logger.debug('mensagem de debug')
     logger.info('mensagem informativa')
     logger.warning('mensagem de cuidado')
     logger.error('mensagem de erro')
     logger.critical('mensagem crítica')

Aqui está o arquivo logging.conf:

     [loggers]
     keys=root,exemploSimples

     [handlers]
     keys=manipuladorConsole

     [formatters]
     keys=formatadorSimples

     [logger_root]
     level=DEBUG
     handlers=manipuladorConsole

     [logger_exemploSimples]
     level=DEBUG
     handlers=manipuladorConsole
     qualname=exemploSimples
     propagate=0

     [handler_manipuladorConsole]
     class=StreamHandler
     level=DEBUG
     formatter=formatadorSimples
     args=(sys.stdout,)

     [formatter_formatadorSimples]
     format=%(asctime)s - %(name)s - %(levelname)s - %(message)s

A saída é quase idêntica à do exemplo não baseado em arquivo de
configuração:

     $ python simple_logging_config.py
     2005-03-19 15:38:55,977 - exemploSimples - DEBUG - mensagem de depuração
     2005-03-19 15:38:55,979 - exemploSimples - INFO - mensagem informativa
     2005-03-19 15:38:56,054 - exemploSimples - WARNING - mensagem de alerta
     2005-03-19 15:38:56,055 - exemploSimples - ERROR - mensagem de erro
     2005-03-19 15:38:56,130 - exemploSimples - CRITICAL - mensagem crítica

A abordagem de usar um arquivo de configuração oferece algumas vantagens
em relação ao uso direto de código Python.  Ela permite separar a
configuração do código, facilitando a manutenção, e também possibilita
que pessoas sem conhecimentos de programação modifiquem facilmente as
propriedades de logging apenas editando o arquivo de configuração.

     Aviso: A função *note fileConfig(): b66. possui um parâmetro
     chamado ‘disable_existing_loggers’, que por padrão é definido como
     ‘True’ por questões de retrocompatibilidade.  No entanto, esse
     comportamento pode não ser o desejado, pois todos os loggers que
     não o raiz que já existiam antes da chamada de *note fileConfig():
     b66. serão desativados, a menos que eles (ou algum de seus
     ancestrais) sejam explicitamente nomeados na configuração.  Caso
     queira manter os loggers preexistentes ativos, basta definir esse
     parâmetro como ‘False’.  Para maiores detalhes, consulte a
     documentação oficial de referência.

     O dicionário passado para *note dictConfig(): 11ef. também pode
     especificar um valor booleano com a chave
     ‘disable_existing_loggers’.  Se essa chave não for definida
     explicitamente no dicionário, o valor padrão será interpretado como
     ‘True’.  Isso resulta no mesmo comportamento de desativação de
     loggers descrito anteriormente, o que pode não ser o desejado.
     Nesse caso, basta informar a chave no dicionário com o valor
     ‘False’.

Observe que os nomes de classe referenciados em arquivos de configuração
precisam ser relativos ao módulo logging, ou valores absolutos que
possam ser resolvidos pelos mecanismos normais de importação do Python.
Por exemplo, você pode usar *note WatchedFileHandler: 2ec0. (relativo ao
módulo logging) ou ‘mypackage.mymodule.MyHandler’ (para uma classe
definida no pacote ‘mypackage’ e no módulo ‘mymodule’, desde que
‘mypackage’ esteja disponível no caminho de importação do Python).

A partir do Python 3.2, foi introduzida uma nova forma de configurar o
logging, utilizando dicionários para armazenar as informações de
configuração.  Essa abordagem oferece um conjunto ampliado de
funcionalidades em relação ao método baseado em arquivos de configuração
mencionado anteriormente, sendo, portanto, a forma recomendada de
configuração para novas aplicações e implantações.  Como a configuração
é mantida em um dicionário Python, há maior flexibilidade sobre as
opções de como esse dicionário pode ser construído.  É possível, por
exemplo, utilizar um arquivo em formato JSON ou YAML, construir o
dicionário diretamente em código Python, recebê-lo em forma serializada
com pickle por meio de um soquete, ou ainda empregar qualquer outro
método que faça sentido para a aplicação em questão.

Aqui está um exemplo da mesma configuração acima, em formato YAML, para
a nova abordagem baseada em dicionário:

     version: 1
     formatters:
       simple:
         format: '%(asctime)s - %(name)s - %(levelname)s - %(message)s'
     handlers:
       console:
         class: logging.StreamHandler
         level: DEBUG
         formatter: simple
         stream: ext://sys.stdout
     loggers:
       simpleExample:
         level: DEBUG
         handlers: [console]
         propagate: no
     root:
       level: DEBUG
       handlers: [console]

Para mais informações sobre logging com dicionário, consulte *note
Funções de configuração: 1335.


File: python.info,  Node: O que acontece se nenhuma configuração é fornecida,  Next: Configurando logging para uma biblioteca,  Prev: Configurando Logging,  Up: Tutorial Avançado do Logging

9.8.2.6 O que acontece se nenhuma configuração é fornecida
..........................................................

Se nenhuma configuração de logging for fornecida, pode ocorrer uma
situação em que um evento de logging precise ser registrado, mas nenhum
manipulador esteja disponível para processar e exibir esse evento.

O evento é exibido utilizando um “manipulador de último recurso”,
armazenado em *note lastResort: 123a.  Esse manipulador interno não está
associado a nenhum logger e funciona como um *note StreamHandler: 1238,
enviando a mensagem de descrição do evento para o valor atual de
‘sys.stderr’ (espeitando, portanto, quaisquer redirecionamentos que
estejam em vigor).  Nenhuma formatação é aplicada à mensagem — apenas a
descrição bruta do evento é impressa.  O nível desse manipulador é
definido como ‘WARNING’, de forma que todos os eventos nesse nível ou em
níveis mais severos serão exibidos.

Alterado na versão 3.2: Para versões do Python anteriores à 3.2, o
comportamento é o seguinte:

   * Se *note raiseExceptions: 1239. for ‘False’ (modo em produção), o
     evento será silenciosamente descartado.

   * Se *note raiseExceptions: 1239. for definido como ‘True’ (modo de
     desenvolvimento), a mensagem ‘No handlers could be found for logger
     X.Y.Z’ será exibida uma vez.

Para obter o comportamento pré-versão-3.2, *note lastResort: 123a. pode
ser definido como ‘None’.


File: python.info,  Node: Configurando logging para uma biblioteca,  Prev: O que acontece se nenhuma configuração é fornecida,  Up: Tutorial Avançado do Logging

9.8.2.7 Configurando logging para uma biblioteca
................................................

Ao desenvolver um biblioteca que usa logging, é importante documentar
como a biblioteca usa o recurso - por exemplo, os nomes dos loggers
usados.  Também é necessário levar em consideração a configuração de
logging.  Caso a aplicação que utiliza a biblioteca não faça uso de
logging e o código da biblioteca execute chamadas de logging, então os
eventos de severidade ‘WARNING’ e níveis mais severos serão impressos em
‘sys.stderr’ .(conforme descrito na seção anterior).  Isso garante que
mensagens importantes não sejam perdidas, como comportamento padrão,
mesmo que a aplicação principal não configure explicitamente o sistema
de logging.

Se, por algum motivo, você 'não' quiser que essas mensagens sejam
exibidas na ausência de qualquer configuração de logging, pode anexar um
manipulador que não faz nada ao logger de nível superior da sua
biblioteca.  Dessa forma, evita-se que a mensagem seja impressa, já que
sempre haverá um manipulador associado aos eventos da biblioteca —
apenas não produzirá saída.  Caso o usuário da biblioteca configure o
logging para uso na aplicação, essa configuração provavelmente incluirá
alguns manipuladores adicionais e, se os níveis forem configurados
adequadamente, as chamadas de logging feitas no código da biblioteca
enviarão a saída para esses manipuladores, funcionando normalmente.

Um manipulador-que-não-faz-nada já está incluso no pacote *note
NullHandler: 12c6. (desde Python 3.1).  Uma instância desse manipulador
poderia ser adicionado ao logger de nível superior do espaço de nomes de
logging usado pelo biblioteca ('se' você quiser evitar que os eventos
registrados do biblioteca sejam enviados para ‘sys.stderr’, na ausência
de configuração de logging).  Se todo registro em log de uma biblioteca
'foo' for feito usando loggers com nomes correspondente ‘foo.x’,
‘foo.x.y’ etc., então o código:

     import logging
     logging.getLogger('foo').addHandler(logging.NullHandler())

deve resultar no efeito desejado.  Se uma organização produzir vários
bibliotecas, o nome do logger especificado poderá ser ‘orgname.foo’ em
vez de apenas ‘foo’.

     Nota: É altamente recomendável que você 'não registre logs no
     logger raiz' do seu biblioteca.  Em vez disso, use um logger com um
     nome exclusivo e facilmente identificável, como o ‘__name__’ do
     nível superior do seu pacote/módulo da biblioteca.  O registro em
     log no logger raiz dificultará, ou mesmo tornará impossível que o
     desenvolvedor da aplicação personalize o manipulador e a
     verbosidade de logging.

     Nota: É altamente recomendável que você 'não adicione outros
     manipuladores além de' *note NullHandler: 12c6. 'nos loggers da sua
     biblioteca'.  Isso porque a configuração de manipuladores é
     responsabilidade do desenvolvedor da aplicação que utilizará ela.
     O desenvolvedor sabe o público-alvo da aplicação final, e,
     portanto, sabe também quais são os manipuladores mais adequados
     para o caso.  Se você adicionar manipuladores ‘ocultos’, poderá
     interferir na criação de testes unitários e na entrega de logs
     úteis.


File: python.info,  Node: Níveis de Logging<2>,  Next: Handlers úteis,  Prev: Tutorial Avançado do Logging,  Up: Logging

9.8.3 Níveis de Logging
-----------------------

Os valores numéricos dos níveis de logging estão listados na tabela
abaixo.  Eles são principalmente de interesse se você quiser definir
seus próprios níveis, e precisa deles para definir seus valores
específicos relativos aos níveis predefinidos.  Se você define um nível
com o mesmo valor numérico, ele sobrescreve o valor predefinido; o nome
predefinido é perdido.

Nível              Valor numérico
                   
---------------------------------------
                   
‘CRITICAL’         50
                   
                   
‘ERROR’            40
                   
                   
‘WARNING’          30
                   
                   
‘INFO’             20
                   
                   
‘DEBUG’            10
                   
                   
‘NOTSET’           0
                   

Os níveis também podem ser associados aos registradores, sendo definidos
pelo desenvolvedor ou por meio do carregamento de uma configuração
salva.  Quando um método de logging é invocado em um logger, o logger
compara o seu próprio nível com o nível associado à chamada do método.
Se o nível do logger for maior do que o da chamada do método, nenhuma
mensagem será gerada.  Esse é o mecanismo básico que controla a
verbosidade da saída de logging.

As mensagens de logging são representadas como instâncias da classe
*note LogRecord: 101c.  Quando um logger decide registrar um evento, uma
instância de *note LogRecord: 101c. é criada a partir da mensagem de
logging.

As mensagens de logging passam por um mecanismo de despacho que utiliza
'manipuladores', que são instâncias de subclasses da classe *note
Handler: 14de.  Manipuladores são responsáveis por assegurar que uma
mensagem registrada em log (na forma de *note LogRecord: 101c.) seja
encaminhada para um determinado destino (ou conjunto de destinos) que
serão úteis para o público-alvo daquela mensagem (como usuários finais,
equipe de suporte, administradores do sistema e desenvolvedores).
Manipuladores transmitem *note LogRecord: 101c. para destinos
específicos.  Cada logger pode ter zero, um ou mais manipuladores
associados à ele (através do método *note addHandler(): 2e36. de *note
Logger: b64.).  Além disso, não são apenas os manipuladores diretamente
associados a um logger que processam a mensagem.  Por padrão, os
manipuladores de todos os loggers ancestrais também participam do
despacho.  Essa propagação só é interrompida se o atributo 'propagate'
do logger estiver definido como ‘False’.

Assim como os loggers, os manipuladores também podem ter níveis
associados.  O nível de um manipulador funciona como um filtro, do mesmo
modo que o nível de um logger.  Quando um manipulador decide processar
um evento, ele utiliza o método *note emit(): 2e5b. para enviar a
mensagem ao seu destino.  Na maioria dos casos, subclasses
personalizadas de *note Handler: 14de. precisarão substituir esse método
*note emit(): 2e5b.

* Menu:

* Níveis personalizados::


File: python.info,  Node: Níveis personalizados,  Up: Níveis de Logging<2>

9.8.3.1 Níveis personalizados
.............................

Criar seus próprios níveis é possível, mas não deve ser necessário, pois
os níveis existentes foram escolhidos com base na experiência prática.
No entanto, se for estritamente necessário, tome cuidado para fazer.  E
se você está 'desenvolvendo uma biblioteca, não é recomendado que defina
níveis personalizados'.  Isso porque, se vários autores de biblioteca
definirem seus próprios níveis personalizados, as saídas de logging das
bibliotecas em conjunto serão orquestradas com maior dificuldade pelo
desenvolvedor, pois um determinado valor numérico poderá significar
coisas diferentes para diferentes bibliotecas.


File: python.info,  Node: Handlers úteis,  Next: Exceções levantadas durante logging,  Prev: Níveis de Logging<2>,  Up: Logging

9.8.4 Handlers úteis
--------------------

Em adição à classe base *note Handler: 14de, muitas subclasses úteis são
fornecidas:

  1. *note StreamHandler: 1238, quando instanciadas, enviam mensagens
     para streams (objeto arquivo ou similar).

  2. *note FileHandler: 19de, quando instanciadas, enviam mensagens para
     arquivos locais de disco.

  3. *note BaseRotatingHandler: 2ec4. é a classe base para objetos
     handler que rotacionam os arquivos de logging em um determinado
     ponto.  Não é feita para ser instanciada diretamente.  Em vez
     disso, use *note RotatingFileHandler: 16c2. ou *note
     TimedRotatingFileHandler: f95.

  4. *note RotatingFileHandler: 16c2, quando instanciadas, enviam
     mensagens para arquivos locais de disco.  Permite definir o tamanho
     máximo do arquivo de log e configurar rotação.

  5. *note TimedRotatingFileHandler: f95, quando instanciadas, enviam
     mensagens para arquivos locais de disco, rotacionando o arquivo de
     log em certos intervalos de tempo.

  6. *note SocketHandler: f96, quando instanciadas, enviam mensagens
     para soquetes TCP/IP. Desde a versão 3.4, os soquetes de domínio
     Unix também são suportados.

  7. *note DatagramHandler: f97, quando instanciadas, enviam mensagens
     para soquetes UDP. Desde a versão 3.4, os soquetes de domínio Unix
     também são suportados.

  8. *note SMTPHandler: 164e, quando instanciadas, enviam mensagens para
     endereços de e-mail pré-definidos.

  9. *note SysLogHandler: 65c, quando instanciadas, enviam mensagens
     para um daemon syslog Unix, normalmente em um computador remoto.

  10. *note NTEventLogHandler: 2eea, quando instanciadas, enviam
     mensagens para um registro de log do Windows NT/2000/XP.

  11. *note MemoryHandler: 2ea3, quando instanciadas, enviam mensagens
     para um buffer na memória, que é liberado sempre que alguns
     critérios específicos são atendidos.

  12. *note HTTPHandler: e58, quando instanciadas, enviam mensagens para
     um servidor HTTP, utilizando os métodos ‘GET’ ou ‘POST’.

  13. *note WatchedFileHandler: 2ec0, quando instanciadas, observam o
     arquivo que estão fazendo logging.  Se o arquivo for alterado, ele
     será fechado e reaberto com o mesmo nome.  Este manipulador só é
     funcional em sistemas Unix ou similares; o Windows não oferece
     suporte ao mecanismo subjacente utilizado.

  14. *note QueueHandler: 18ec, quando instanciadas, enviam mensagem
     para uma fila, que pode ser implementada com o módulo *note queue:
     b6. ou com o módulo *note multiprocessing: 94.

  15. *note NullHandler: 12c6, quando instanciadas, não fazem nada com
     as mensagens de erro.  Elas são usadas por desenvolvedores da
     biblioteca que precisam usar o logging, mas querem evitar o aviso
     ‘No handlers could be found for logger 'XXX'’, que pode ser exibido
     quando o logging não é configurado.  Veja *note Configurando
     logging para uma biblioteca: 2ebd. para mais informações.

Adicionado na versão 3.1: A classe *note NullHandler: 12c6.

Adicionado na versão 3.2: A classe *note QueueHandler: 18ec.

As subclasses *note NullHandler: 12c6, *note StreamHandler: 1238. e
*note FileHandler: 19de. são definidas no pacote base de logging.  Os
outros manipuladores são definidos no submódulo *note logging.handlers:
89.  (Existe também outro submódulo, *note logging.config: 88, para
configurar as funcionalidades).

As mensagens de log são formatadas por meio de instâncias da classe
*note Formatter: 14df.  Elas são inicializadas com uma string de
formato, que pode ser usada junto com o operador % e um dicionário para
substituir os valores na mensagem.

Para formatar várias mensagens em um lote, podem ser usadas instâncias
de *note BufferingFormatter: 2e64.  Além de aplicar string de formato em
cada mensagem do lote, é possível definir strings de formato para o
cabeçalho e o rodapé do lote.

Quando não for suficiente fazer a filtragem baseada no nível do logger
e/ou no nível de manipulador, instâncias de *note Filter: 123b. poderão
ser adicionadas às instâncias de *note Logger: b64. e *note Handler:
14de. (por meio do método *note addFilter(): 2e54.).  Antes de processar
uma mensagem, os loggers e manipuladores consultam todos os seus filtros
para obter permissão.  Se algum filtro retornar um valor falso, a
mensagem não é processada.

A funcionalidade básica do *note Filter: 123b. permite a filtragem por
um nome específico de logger.  Se este recurso for usado, as mensagens
enviadas para o logger com esse nome, ou seus descendentes, serão
permitidas pelo filtro.  E todas as outras são descartadas.


File: python.info,  Node: Exceções levantadas durante logging,  Next: Usando objetos arbitrários como mensagens,  Prev: Handlers úteis,  Up: Logging

9.8.5 Exceções levantadas durante logging
-----------------------------------------

O pacote de logging foi projetado para inibir exceções que possam
ocorrer quando os registros forem feitos em produção.  Desta forma, a
aplicação que está utilizando logging não encerrará abruptamente caso
hajam erros nos eventos de logging - devido a problemas como má
configuração, rede ou outros.

As exceções *note SystemExit: d63. e *note KeyboardInterrupt: 9d9. nunca
são inibidas.  Outras exceções que possam ocorrem durante o método *note
emit(): 2e5b. de uma subclasse de *note Handler: 14de. são passadas para
seus respectivos métodos *note handleError(): 2e5a.

A implementação padrão de *note handleError(): 2e5a. em *note Handler:
14de. verifica se uma variável de módulo, *note raiseExceptions: 1239,
está definida.  Caso esteja, um traceback (situação da pilha de
execução) é exibido em *note sys.stderr: 940.  Se não, a exceção é
inibida.

     Nota: O valor padrão de *note raiseExceptions: 1239. é
     ‘verdadeiro’.  Isso ocorre porque, durante o desenvolvimento, você
     normalmente desejará ser notificado sobre qualquer exceção que
     ocorra.  É recomendável que você defina *note raiseExceptions:
     1239. como ‘falso’ para usos em produção.


File: python.info,  Node: Usando objetos arbitrários como mensagens,  Next: Optimização,  Prev: Exceções levantadas durante logging,  Up: Logging

9.8.6 Usando objetos arbitrários como mensagens
-----------------------------------------------

Nas seções e exemplos anteriores, todas as mensagens criadas ao realizar
o logging de um evento foram instanciadas como string.  No entanto, essa
não é a única possibilidade.  Você pode passar um objeto arbitrário como
mensagem, e seu método *note __str__(): 61d. será chamado quando o
sistema de logging precisar convertê-lo em uma string.  Inclusive, é
possível evitar totalmente o uso de uma representação em string - por
exemplo, a classe *note SocketHandler: f96. emite a mensagem enviando
pela rede sua respectiva serialização com pickle.


File: python.info,  Node: Optimização,  Next: Outros recursos<2>,  Prev: Usando objetos arbitrários como mensagens,  Up: Logging

9.8.7 Optimização
-----------------

A formatação dos argumentos das mensagem é adiada até o quanto for
possível.  No entanto, o processamento dos argumentos para o método de
logging pode ser custoso, e talvez você queira evitar fazê-lo, se o
logging for descartar o evento.  Para decidir o que fazer, você pode
chamar o método *note isEnabledFor(): 133a, que recebe um nível como
argumento e retorna verdadeiro apenas se o evento tiver sido criado pelo
logger para esse nível em específico.  Desta forma, você pode escrever
algo como:

     if logger.isEnabledFor(logging.DEBUG):
         logger.debug('Mensagem com %s, %s', func_custosa1(),
                                             func_custosa2())

desta forma, se o limite do logger for definido acima de ‘DEBUG’, as
chamadas para ‘func_custosa1’ e ‘func_custosa2’ nunca serão feitas.

     Nota: Em alguns casos, o próprio *note isEnabledFor(): 133a. pode
     ser mais custoso do que você gostaria (por exemplo, para loggers
     profundamente aninhados, em que um nível explícito só é definido no
     logger mais alto da hierarquia).  Nesses casos (ou se você quiser
     evitar chamar um método em um laço), é possível cachear o resultado
     de uma chamada para *note isEnabledFor(): 133a. em uma variável
     local ou instância, e usá-lo em vez de chamar o método todas as
     vezes.  Este valor armazenado só precisaria ser recalculado se a
     configuração do logger fosse alterada dinamicamente, com a
     aplicação em execução (o que não é comum).

Existem outras otimizações que podem ser feitas para aplicação
específicas que precisam de um controle mais preciso sobre quais
informações de logging são registradas.  Abaixo encontra-se uma lista de
coisas que você pode fazer para evitar o processamento desnecessário
para loggings que serão descartados:

O que você não quer registrar                             Como evitar o registro
                                                          
------------------------------------------------------------------------------------------------------------------
                                                          
Informações sobre o ponto em que as chamadas foram        Defina ‘logging._srcfile’ como ‘None’.  Isso evita
feitas.                                                   chamar *note sys._getframe(): 6e1, o que pode
                                                          acelerar seu código em ambientes como o PyPy (que não
                                                          consegue acelerar códigos que usam
                                                          *note sys._getframe(): 6e1.).
                                                          
                                                          
Informações sobre threading.                              Defina ‘logging.logThreads’ como ‘False’.
                                                          
                                                          
ID do processo atual (*note os.getpid(): 2ce1.)           Defina ‘logging.logProcesses’ como ‘False’.
                                                          
                                                          
Nome do processo atual, ao utilizar o módulo              Defina ‘logging.logMultiprocessing’ como ‘False’.
‘multiprocessing’ para gerenciar múltiplos                
processamentos.

Nome da tarefa *note asyncio.Task: 1be. atual, ao         Defina ‘logging.logAsyncioTasks’ como ‘False’.
utilizar o módulo ‘asyncio’.                              

Observe também que o módulo base de logging inclui apenas o manipulador
básico.  Se você não importar *note logging.handlers: 89. e *note
logging.config: 88, eles não ocuparão nenhum espaço da memória.


File: python.info,  Node: Outros recursos<2>,  Prev: Optimização,  Up: Logging

9.8.8 Outros recursos
---------------------

Ver também
..........

Módulo *note logging: 87.

     Referência da API para o módulo de logging.

Módulo *note logging.config: 88.

     API de configuração para o módulo logging.

Módulo *note logging.handlers: 89.

     Tratadores úteis incluídos no módulo logging.

*note Um livro de receitas do logging: 1237.


File: python.info,  Node: Livro de receitas do logging,  Next: Expressões Regulares,  Prev: Logging,  Up: Python HOWTOs

9.9 Livro de receitas do logging
================================


Autor: Vinay Sajip <vinay_sajip at red-dove dot com>

Esta página contém uma série de receitas relacionadas ao registro de
eventos, que foram considerados úteis no passado.  Para obter links para
tutoriais e outras referências, veja *note Outros recursos: 53b7.

* Menu:

* Usando logging em vários módulos::
* Registro de eventos de várias threads::
* Múltiplos manipuladores e formatadores::
* Logging to multiple destinations::
* Custom handling of levels::
* Configuration server example::
* Dealing with handlers that block::
* Sending and receiving logging events across a network::
* Adding contextual information to your logging output::
* Use of contextvars::
* Imparting contextual information in handlers::
* Logging to a single file from multiple processes::
* Using file rotation::
* Use of alternative formatting styles::
* Personalizando o LogRecord::
* Subclassing QueueHandler and QueueListener- a ZeroMQ example::
* Subclassing QueueHandler and QueueListener- a pynng example::
* An example dictionary-based configuration::
* Using a rotator and namer to customize log rotation processing::
* A more elaborate multiprocessing example::
* Inserting a BOM into messages sent to a SysLogHandler::
* Implementing structured logging::
* Customizing handlers with dictConfig(): Customizing handlers with dictConfig.
* Using particular formatting styles throughout your application::
* Configuring filters with dictConfig(): Configuring filters with dictConfig.
* Customized exception formatting::
* Speaking logging messages::
* Buffering logging messages and outputting them conditionally::
* Sending logging messages to email, with buffering: Sending logging messages to email with buffering.
* Formatting times using UTC (GMT) via configuration: Formatting times using UTC GMT via configuration.
* Using a context manager for selective logging::
* A CLI application starter template::
* A Qt GUI for logging::
* Logging to syslog with RFC5424 support::
* How to treat a logger like an output stream::
* How to uniformly handle newlines in logging output::
* Patterns to avoid::
* Outros recursos: Outros recursos<3>.


File: python.info,  Node: Usando logging em vários módulos,  Next: Registro de eventos de várias threads,  Up: Livro de receitas do logging

9.9.1 Usando logging em vários módulos
--------------------------------------

Várias chamadas para ‘logging.getLogger('someLogger')’ retorna a
referência para o mesmo objeto logger.  Isso é verdadeiro não apenas
dentro do mesmo módulo, mas também entre módulo, desde que esteja no
mesmo processo do interpretador Python.  Isso é verdadeiro para
referências do mesmo objeto; além disso, o código da aplicação pode
definir e configurar um logger pai em um módulo e criar (mas não
configurar) um logger filho em um módulo separado, e todas as chamadas
de logger para o filho passarão para o pai.  Aqui está um módulo
principal:

     import logging
     import auxiliary_module

     # cria objeto logger com 'spam_application'
     logger = logging.getLogger('spam_application')
     logger.setLevel(logging.DEBUG)
     # cria manipulador de arquivo que registra até mesmo mensagens de debug
     fh = logging.FileHandler('spam.log')
     fh.setLevel(logging.DEBUG)
     # cria manipulador de console com um nível de registro mais alto
     ch = logging.StreamHandler()
     ch.setLevel(logging.ERROR)
     # cria formatador  e adiciona aos manipuladores
     formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
     fh.setFormatter(formatter)
     ch.setFormatter(formatter)
     # adiciona os manipuladores ao logger
     logger.addHandler(fh)
     logger.addHandler(ch)

     logger.info('creating an instance of auxiliary_module.Auxiliary')
     a = auxiliary_module.Auxiliary()
     logger.info('created an instance of auxiliary_module.Auxiliary')
     logger.info('calling auxiliary_module.Auxiliary.do_something')
     a.do_something()
     logger.info('finished auxiliary_module.Auxiliary.do_something')
     logger.info('calling auxiliary_module.some_function()')
     auxiliary_module.some_function()
     logger.info('done with auxiliary_module.some_function()')

Aqui está o módulo auxiliar:

     import logging

     # cria logger
     module_logger = logging.getLogger('spam_application.auxiliary')

     class Auxiliary:
         def __init__(self):
             self.logger = logging.getLogger('spam_application.auxiliary.Auxiliary')
             self.logger.info('creating an instance of Auxiliary')

         def do_something(self):
             self.logger.info('doing something')
             a = 1 + 1
             self.logger.info('done doing something')

     def some_function():
         module_logger.info('received a call to "some_function"')

O resultado deve ser algo assim:

     2005-03-23 23:47:11,663 - spam_application - INFO -
        creating an instance of auxiliary_module.Auxiliary
     2005-03-23 23:47:11,665 - spam_application.auxiliary.Auxiliary - INFO -
        creating an instance of Auxiliary
     2005-03-23 23:47:11,665 - spam_application - INFO -
        created an instance of auxiliary_module.Auxiliary
     2005-03-23 23:47:11,668 - spam_application - INFO -
        calling auxiliary_module.Auxiliary.do_something
     2005-03-23 23:47:11,668 - spam_application.auxiliary.Auxiliary - INFO -
        doing something
     2005-03-23 23:47:11,669 - spam_application.auxiliary.Auxiliary - INFO -
        done doing something
     2005-03-23 23:47:11,670 - spam_application - INFO -
        finished auxiliary_module.Auxiliary.do_something
     2005-03-23 23:47:11,671 - spam_application - INFO -
        calling auxiliary_module.some_function()
     2005-03-23 23:47:11,672 - spam_application.auxiliary - INFO -
        received a call to 'some_function'
     2005-03-23 23:47:11,673 - spam_application - INFO -
        done with auxiliary_module.some_function()


File: python.info,  Node: Registro de eventos de várias threads,  Next: Múltiplos manipuladores e formatadores,  Prev: Usando logging em vários módulos,  Up: Livro de receitas do logging

9.9.2 Registro de eventos de várias threads
-------------------------------------------

O registro de eventos de várias threads não requer nenhum esforço
especial.  O exemplo a seguir mostra o registro de eventos da thread
principal (inicial) thread e de outra thread:

     import logging
     import threading
     import time

     def worker(arg):
         while not arg['stop']:
             logging.debug('Hi from myfunc')
             time.sleep(0.5)

     def main():
         logging.basicConfig(level=logging.DEBUG, format='%(relativeCreated)6d %(threadName)s %(message)s')
         info = {'stop': False}
         thread = threading.Thread(target=worker, args=(info,))
         thread.start()
         while True:
             try:
                 logging.debug('Hello from main')
                 time.sleep(0.75)
             except KeyboardInterrupt:
                 info['stop'] = True
                 break
         thread.join()

     if __name__ == '__main__':
         main()

Quando executado, o script deve exibir algo como o seguinte:

        0 Thread-1 Hi from myfunc
        3 MainThread Hello from main
      505 Thread-1 Hi from myfunc
      755 MainThread Hello from main
     1007 Thread-1 Hi from myfunc
     1507 MainThread Hello from main
     1508 Thread-1 Hi from myfunc
     2010 Thread-1 Hi from myfunc
     2258 MainThread Hello from main
     2512 Thread-1 Hi from myfunc
     3009 MainThread Hello from main
     3013 Thread-1 Hi from myfunc
     3515 Thread-1 Hi from myfunc
     3761 MainThread Hello from main
     4017 Thread-1 Hi from myfunc
     4513 MainThread Hello from main
     4518 Thread-1 Hi from myfunc

Isso mostra a saída de registro intercalada, como seria de se esperar.
Essa abordagem funciona para mais thread do que o mostrado aqui, é
claro.


File: python.info,  Node: Múltiplos manipuladores e formatadores,  Next: Logging to multiple destinations,  Prev: Registro de eventos de várias threads,  Up: Livro de receitas do logging

9.9.3 Múltiplos manipuladores e formatadores
--------------------------------------------

Registradores (loggers) são objetos Python simples.  O método *note
addHandler(): 2e36. não tem cota mínima ou máxima para o número de
manipuladores que podem ser adicionados.  Às vezes, é vantajoso para um
aplicação registrar todas as mensagens de todas as gravidades em um
arquivo texto e, ao mesmo tempo, registrar erro ou superior no console.
Para definir isso, basta configurar os manipuladores apropriados.  As
chamadas de registro no código da aplicação permanecerão inalteradas.
Aqui está uma pequena modificação no exemplo anterior de configuração
simples baseada em módulo:

     import logging

     logger = logging.getLogger('simple_example')
     logger.setLevel(logging.DEBUG)
     # cria manipulador de arquivo que regitra até mensagens de depuração
     fh = logging.FileHandler('spam.log')
     fh.setLevel(logging.DEBUG)
     # cria manipulador de console com um nível de gravidade mais alto
     ch = logging.StreamHandler()
     ch.setLevel(logging.ERROR)
     # cria formatador e adiciona-o ao manipulador
     formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
     ch.setFormatter(formatter)
     fh.setFormatter(formatter)
     # adiciona os manipuladores ao registrador
     logger.addHandler(ch)
     logger.addHandler(fh)

     # código da 'aplicação'
     logger.debug('debug message')
     logger.info('info message')
     logger.warning('warn message')
     logger.error('error message')
     logger.critical('critical message')

Observe que o código da ‘aplicação’ não se preocupa com vários
manipuladores.  Tudo o que mudou foi a adição e a configuração de um
novo manipulador nomeado 'fh'.

A capacidade de criar novos manipuladores com filtros de severidade
superiores ou inferiores pode ser muito útil ao escrever e testar um
aplicação.  Em vez de usar muitas instruções instrução para depuração,
use ‘logger.debug’: diferentemente da instrução print, que você terá de
excluir ou comentar posteriormente, a instrução logger.debug pode
permanecer intacta no código-fonte e ficar inativo até que você precise
dela novamente.  Nesse momento, a única alteração que precisa ser feita
é modificar o nível de severidade do registrador e/ou manipulador para
depuração.


File: python.info,  Node: Logging to multiple destinations,  Next: Custom handling of levels,  Prev: Múltiplos manipuladores e formatadores,  Up: Livro de receitas do logging

9.9.4 Logging to multiple destinations
--------------------------------------

Let’s say you want to log to console and file with different message
formats and in differing circumstances.  Say you want to log messages
with levels of DEBUG and higher to file, and those messages at level
INFO and higher to the console.  Let’s also assume that the file should
contain timestamps, but the console messages should not.  Here’s how you
can achieve this:

     import logging

     # set up logging to file - see previous section for more details
     logging.basicConfig(level=logging.DEBUG,
                         format='%(asctime)s %(name)-12s %(levelname)-8s %(message)s',
                         datefmt='%m-%d %H:%M',
                         filename='/tmp/myapp.log',
                         filemode='w')
     # define a Handler which writes INFO messages or higher to the sys.stderr
     console = logging.StreamHandler()
     console.setLevel(logging.INFO)
     # set a format which is simpler for console use
     formatter = logging.Formatter('%(name)-12s: %(levelname)-8s %(message)s')
     # tell the handler to use this format
     console.setFormatter(formatter)
     # add the handler to the root logger
     logging.getLogger('').addHandler(console)

     # Now, we can log to the root logger, or any other logger. First the root...
     logging.info('Jackdaws love my big sphinx of quartz.')

     # Now, define a couple of other loggers which might represent areas in your
     # application:

     logger1 = logging.getLogger('myapp.area1')
     logger2 = logging.getLogger('myapp.area2')

     logger1.debug('Quick zephyrs blow, vexing daft Jim.')
     logger1.info('How quickly daft jumping zebras vex.')
     logger2.warning('Jail zesty vixen who grabbed pay from quack.')
     logger2.error('The five boxing wizards jump quickly.')

When you run this, on the console you will see

     root        : INFO     Jackdaws love my big sphinx of quartz.
     myapp.area1 : INFO     How quickly daft jumping zebras vex.
     myapp.area2 : WARNING  Jail zesty vixen who grabbed pay from quack.
     myapp.area2 : ERROR    The five boxing wizards jump quickly.

and in the file you will see something like

     10-22 22:19 root         INFO     Jackdaws love my big sphinx of quartz.
     10-22 22:19 myapp.area1  DEBUG    Quick zephyrs blow, vexing daft Jim.
     10-22 22:19 myapp.area1  INFO     How quickly daft jumping zebras vex.
     10-22 22:19 myapp.area2  WARNING  Jail zesty vixen who grabbed pay from quack.
     10-22 22:19 myapp.area2  ERROR    The five boxing wizards jump quickly.

As you can see, the DEBUG message only shows up in the file.  The other
messages are sent to both destinations.

This example uses console and file handlers, but you can use any number
and combination of handlers you choose.

Note that the above choice of log filename ‘/tmp/myapp.log’ implies use
of a standard location for temporary files on POSIX systems.  On
Windows, you may need to choose a different directory name for the log -
just ensure that the directory exists and that you have the permissions
to create and update files in it.


File: python.info,  Node: Custom handling of levels,  Next: Configuration server example,  Prev: Logging to multiple destinations,  Up: Livro de receitas do logging

9.9.5 Custom handling of levels
-------------------------------

Sometimes, you might want to do something slightly different from the
standard handling of levels in handlers, where all levels above a
threshold get processed by a handler.  To do this, you need to use
filters.  Let’s look at a scenario where you want to arrange things as
follows:

   * Send messages of severity ‘INFO’ and ‘WARNING’ to ‘sys.stdout’

   * Send messages of severity ‘ERROR’ and above to ‘sys.stderr’

   * Send messages of severity ‘DEBUG’ and above to file ‘app.log’

Suppose you configure logging with the following JSON:

     {
         "version": 1,
         "disable_existing_loggers": false,
         "formatters": {
             "simple": {
                 "format": "%(levelname)-8s - %(message)s"
             }
         },
         "handlers": {
             "stdout": {
                 "class": "logging.StreamHandler",
                 "level": "INFO",
                 "formatter": "simple",
                 "stream": "ext://sys.stdout"
             },
             "stderr": {
                 "class": "logging.StreamHandler",
                 "level": "ERROR",
                 "formatter": "simple",
                 "stream": "ext://sys.stderr"
             },
             "file": {
                 "class": "logging.FileHandler",
                 "formatter": "simple",
                 "filename": "app.log",
                 "mode": "w"
             }
         },
         "root": {
             "level": "DEBUG",
             "handlers": [
                 "stderr",
                 "stdout",
                 "file"
             ]
         }
     }

This configuration does 'almost' what we want, except that ‘sys.stdout’
would show messages of severity ‘ERROR’ and only events of this severity
and higher will be tracked as well as ‘INFO’ and ‘WARNING’ messages.  To
prevent this, we can set up a filter which excludes those messages and
add it to the relevant handler.  This can be configured by adding a
‘filters’ section parallel to ‘formatters’ and ‘handlers’:

     {
         "filters": {
             "warnings_and_below": {
                 "()" : "__main__.filter_maker",
                 "level": "WARNING"
             }
         }
     }

and changing the section on the ‘stdout’ handler to add it:

     {
         "stdout": {
             "class": "logging.StreamHandler",
             "level": "INFO",
             "formatter": "simple",
             "stream": "ext://sys.stdout",
             "filters": ["warnings_and_below"]
         }
     }

A filter is just a function, so we can define the ‘filter_maker’ (a
factory function) as follows:

     def filter_maker(level):
         level = getattr(logging, level)

         def filter(record):
             return record.levelno <= level

         return filter

This converts the string argument passed in to a numeric level, and
returns a function which only returns ‘True’ if the level of the passed
in record is at or below the specified level.  Note that in this example
I have defined the ‘filter_maker’ in a test script ‘main.py’ that I run
from the command line, so its module will be ‘__main__’ - hence the
‘__main__.filter_maker’ in the filter configuration.  You will need to
change that if you define it in a different module.

With the filter added, we can run ‘main.py’, which in full is:

     import json
     import logging
     import logging.config

     CONFIG = '''
     {
         "version": 1,
         "disable_existing_loggers": false,
         "formatters": {
             "simple": {
                 "format": "%(levelname)-8s - %(message)s"
             }
         },
         "filters": {
             "warnings_and_below": {
                 "()" : "__main__.filter_maker",
                 "level": "WARNING"
             }
         },
         "handlers": {
             "stdout": {
                 "class": "logging.StreamHandler",
                 "level": "INFO",
                 "formatter": "simple",
                 "stream": "ext://sys.stdout",
                 "filters": ["warnings_and_below"]
             },
             "stderr": {
                 "class": "logging.StreamHandler",
                 "level": "ERROR",
                 "formatter": "simple",
                 "stream": "ext://sys.stderr"
             },
             "file": {
                 "class": "logging.FileHandler",
                 "formatter": "simple",
                 "filename": "app.log",
                 "mode": "w"
             }
         },
         "root": {
             "level": "DEBUG",
             "handlers": [
                 "stderr",
                 "stdout",
                 "file"
             ]
         }
     }
     '''

     def filter_maker(level):
         level = getattr(logging, level)

         def filter(record):
             return record.levelno <= level

         return filter

     logging.config.dictConfig(json.loads(CONFIG))
     logging.debug('A DEBUG message')
     logging.info('An INFO message')
     logging.warning('A WARNING message')
     logging.error('An ERROR message')
     logging.critical('A CRITICAL message')

And after running it like this:

     python main.py 2>stderr.log >stdout.log

We can see the results are as expected:

     $ more *.log
     ::::::::::::::
     app.log
     ::::::::::::::
     DEBUG    - A DEBUG message
     INFO     - An INFO message
     WARNING  - A WARNING message
     ERROR    - An ERROR message
     CRITICAL - A CRITICAL message
     ::::::::::::::
     stderr.log
     ::::::::::::::
     ERROR    - An ERROR message
     CRITICAL - A CRITICAL message
     ::::::::::::::
     stdout.log
     ::::::::::::::
     INFO     - An INFO message
     WARNING  - A WARNING message


File: python.info,  Node: Configuration server example,  Next: Dealing with handlers that block,  Prev: Custom handling of levels,  Up: Livro de receitas do logging

9.9.6 Configuration server example
----------------------------------

Here is an example of a module using the logging configuration server:

     import logging
     import logging.config
     import time
     import os

     # read initial config file
     logging.config.fileConfig('logging.conf')

     # create and start listener on port 9999
     t = logging.config.listen(9999)
     t.start()

     logger = logging.getLogger('simpleExample')

     try:
         # loop through logging calls to see the difference
         # new configurations make, until Ctrl+C is pressed
         while True:
             logger.debug('debug message')
             logger.info('info message')
             logger.warning('warn message')
             logger.error('error message')
             logger.critical('critical message')
             time.sleep(5)
     except KeyboardInterrupt:
         # cleanup
         logging.config.stopListening()
         t.join()

And here is a script that takes a filename and sends that file to the
server, properly preceded with the binary-encoded length, as the new
logging configuration:

     #!/usr/bin/env python
     import socket, sys, struct

     with open(sys.argv[1], 'rb') as f:
         data_to_send = f.read()

     HOST = 'localhost'
     PORT = 9999
     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     print('connecting...')
     s.connect((HOST, PORT))
     print('sending config...')
     s.send(struct.pack('>L', len(data_to_send)))
     s.send(data_to_send)
     s.close()
     print('complete')


File: python.info,  Node: Dealing with handlers that block,  Next: Sending and receiving logging events across a network,  Prev: Configuration server example,  Up: Livro de receitas do logging

9.9.7 Dealing with handlers that block
--------------------------------------

Sometimes you have to get your logging handlers to do their work without
blocking the thread you’re logging from.  This is common in web
applications, though of course it also occurs in other scenarios.

A common culprit which demonstrates sluggish behaviour is the *note
SMTPHandler: 164e.: sending emails can take a long time, for a number of
reasons outside the developer’s control (for example, a poorly
performing mail or network infrastructure).  But almost any
network-based handler can block: Even a *note SocketHandler: f96.
operation may do a DNS query under the hood which is too slow (and this
query can be deep in the socket library code, below the Python layer,
and outside your control).

One solution is to use a two-part approach.  For the first part, attach
only a *note QueueHandler: 18ec. to those loggers which are accessed
from performance-critical threads.  They simply write to their queue,
which can be sized to a large enough capacity or initialized with no
upper bound to their size.  The write to the queue will typically be
accepted quickly, though you will probably need to catch the *note
queue.Full: 3351. exception as a precaution in your code.  If you are a
library developer who has performance-critical threads in their code, be
sure to document this (together with a suggestion to attach only
‘QueueHandlers’ to your loggers) for the benefit of other developers who
will use your code.

The second part of the solution is *note QueueListener: e59, which has
been designed as the counterpart to *note QueueHandler: 18ec.  A *note
QueueListener: e59. is very simple: it’s passed a queue and some
handlers, and it fires up an internal thread which listens to its queue
for LogRecords sent from ‘QueueHandlers’ (or any other source of
‘LogRecords’, for that matter).  The ‘LogRecords’ are removed from the
queue and passed to the handlers for processing.

The advantage of having a separate *note QueueListener: e59. class is
that you can use the same instance to service multiple ‘QueueHandlers’.
This is more resource-friendly than, say, having threaded versions of
the existing handler classes, which would eat up one thread per handler
for no particular benefit.

An example of using these two classes follows (imports omitted):

     que = queue.Queue(-1)  # no limit on size
     queue_handler = QueueHandler(que)
     handler = logging.StreamHandler()
     listener = QueueListener(que, handler)
     root = logging.getLogger()
     root.addHandler(queue_handler)
     formatter = logging.Formatter('%(threadName)s: %(message)s')
     handler.setFormatter(formatter)
     listener.start()
     # The log output will display the thread which generated
     # the event (the main thread) rather than the internal
     # thread which monitors the internal queue. This is what
     # you want to happen.
     root.warning('Look out!')
     listener.stop()

which, when run, will produce:

     MainThread: Look out!

     Nota: Although the earlier discussion wasn’t specifically talking
     about async code, but rather about slow logging handlers, it should
     be noted that when logging from async code, network and even file
     handlers could lead to problems (blocking the event loop) because
     some logging is done from *note asyncio: a. internals.  It might be
     best, if any async code is used in an application, to use the above
     approach for logging, so that any blocking code runs only in the
     ‘QueueListener’ thread.

Alterado na versão 3.5: Prior to Python 3.5, the *note QueueListener:
e59. always passed every message received from the queue to every
handler it was initialized with.  (This was because it was assumed that
level filtering was all done on the other side, where the queue is
filled.)  From 3.5 onwards, this behaviour can be changed by passing a
keyword argument ‘respect_handler_level=True’ to the listener’s
constructor.  When this is done, the listener compares the level of each
message with the handler’s level, and only passes a message to a handler
if it’s appropriate to do so.


File: python.info,  Node: Sending and receiving logging events across a network,  Next: Adding contextual information to your logging output,  Prev: Dealing with handlers that block,  Up: Livro de receitas do logging

9.9.8 Sending and receiving logging events across a network
-----------------------------------------------------------

Let’s say you want to send logging events across a network, and handle
them at the receiving end.  A simple way of doing this is attaching a
*note SocketHandler: f96. instance to the root logger at the sending
end:

     import logging, logging.handlers

     rootLogger = logging.getLogger('')
     rootLogger.setLevel(logging.DEBUG)
     socketHandler = logging.handlers.SocketHandler('localhost',
                         logging.handlers.DEFAULT_TCP_LOGGING_PORT)
     # don't bother with a formatter, since a socket handler sends the event as
     # an unformatted pickle
     rootLogger.addHandler(socketHandler)

     # Now, we can log to the root logger, or any other logger. First the root...
     logging.info('Jackdaws love my big sphinx of quartz.')

     # Now, define a couple of other loggers which might represent areas in your
     # application:

     logger1 = logging.getLogger('myapp.area1')
     logger2 = logging.getLogger('myapp.area2')

     logger1.debug('Quick zephyrs blow, vexing daft Jim.')
     logger1.info('How quickly daft jumping zebras vex.')
     logger2.warning('Jail zesty vixen who grabbed pay from quack.')
     logger2.error('The five boxing wizards jump quickly.')

At the receiving end, you can set up a receiver using the *note
socketserver: cd. module.  Here is a basic working example:

     import pickle
     import logging
     import logging.handlers
     import socketserver
     import struct


     class LogRecordStreamHandler(socketserver.StreamRequestHandler):
         """Handler for a streaming logging request.

         This basically logs the record using whatever logging policy is
         configured locally.
         """

         def handle(self):
             """
             Handle multiple requests - each expected to be a 4-byte length,
             followed by the LogRecord in pickle format. Logs the record
             according to whatever policy is configured locally.
             """
             while True:
                 chunk = self.connection.recv(4)
                 if len(chunk) < 4:
                     break
                 slen = struct.unpack('>L', chunk)[0]
                 chunk = self.connection.recv(slen)
                 while len(chunk) < slen:
                     chunk = chunk + self.connection.recv(slen - len(chunk))
                 obj = self.unPickle(chunk)
                 record = logging.makeLogRecord(obj)
                 self.handleLogRecord(record)

         def unPickle(self, data):
             return pickle.loads(data)

         def handleLogRecord(self, record):
             # if a name is specified, we use the named logger rather than the one
             # implied by the record.
             if self.server.logname is not None:
                 name = self.server.logname
             else:
                 name = record.name
             logger = logging.getLogger(name)
             # N.B. EVERY record gets logged. This is because Logger.handle
             # is normally called AFTER logger-level filtering. If you want
             # to do filtering, do it at the client end to save wasting
             # cycles and network bandwidth!
             logger.handle(record)

     class LogRecordSocketReceiver(socketserver.ThreadingTCPServer):
         """
         Simple TCP socket-based logging receiver suitable for testing.
         """

         allow_reuse_address = True

         def __init__(self, host='localhost',
                      port=logging.handlers.DEFAULT_TCP_LOGGING_PORT,
                      handler=LogRecordStreamHandler):
             socketserver.ThreadingTCPServer.__init__(self, (host, port), handler)
             self.abort = 0
             self.timeout = 1
             self.logname = None

         def serve_until_stopped(self):
             import select
             abort = 0
             while not abort:
                 rd, wr, ex = select.select([self.socket.fileno()],
                                            [], [],
                                            self.timeout)
                 if rd:
                     self.handle_request()
                 abort = self.abort

     def main():
         logging.basicConfig(
             format='%(relativeCreated)5d %(name)-15s %(levelname)-8s %(message)s')
         tcpserver = LogRecordSocketReceiver()
         print('About to start TCP server...')
         tcpserver.serve_until_stopped()

     if __name__ == '__main__':
         main()

First run the server, and then the client.  On the client side, nothing
is printed on the console; on the server side, you should see something
like:

     About to start TCP server...
        59 root            INFO     Jackdaws love my big sphinx of quartz.
        59 myapp.area1     DEBUG    Quick zephyrs blow, vexing daft Jim.
        69 myapp.area1     INFO     How quickly daft jumping zebras vex.
        69 myapp.area2     WARNING  Jail zesty vixen who grabbed pay from quack.
        69 myapp.area2     ERROR    The five boxing wizards jump quickly.

Note that there are some security issues with pickle in some scenarios.
If these affect you, you can use an alternative serialization scheme by
overriding the *note makePickle(): 2edb. method and implementing your
alternative there, as well as adapting the above script to use your
alternative serialization.

* Menu:

* Running a logging socket listener in production::


File: python.info,  Node: Running a logging socket listener in production,  Up: Sending and receiving logging events across a network

9.9.8.1 Running a logging socket listener in production
.......................................................

To run a logging listener in production, you may need to use a
process-management tool such as Supervisor(1).  Here is a Gist(2) which
provides the bare-bones files to run the above functionality using
Supervisor.  It consists of the following files:

Arquivo                       Propósito
                              
---------------------------------------------------------------------------------------
                              
‘prepare.sh’                  A Bash script to prepare the environment for testing
                              
                              
‘supervisor.conf’             The Supervisor configuration file, which has entries
                              for the listener and a multi-process web application
                              
                              
‘ensure_app.sh’               A Bash script to ensure that Supervisor is running
                              with the above configuration
                              
                              
‘log_listener.py’             The socket listener program which receives log events
                              and records them to a file
                              
                              
‘main.py’                     A simple web application which performs logging via a
                              socket connected to the listener
                              
                              
‘webapp.json’                 A JSON configuration file for the web application
                              
                              
‘client.py’                   A Python script to exercise the web application
                              

The web application uses Gunicorn(3), which is a popular web application
server that starts multiple worker processes to handle requests.  This
example setup shows how the workers can write to the same log file
without conflicting with one another — they all go through the socket
listener.

To test these files, do the following in a POSIX environment:

  1. Download the Gist(4) as a ZIP archive using the Download ZIP
     button.

  2. Unzip the above files from the archive into a scratch directory.

  3. In the scratch directory, run ‘bash prepare.sh’ to get things
     ready.  This creates a ‘run’ subdirectory to contain
     Supervisor-related and log files, and a ‘venv’ subdirectory to
     contain a virtual environment into which ‘bottle’, ‘gunicorn’ and
     ‘supervisor’ are installed.

  4. Run ‘bash ensure_app.sh’ to ensure that Supervisor is running with
     the above configuration.

  5. Run ‘venv/bin/python client.py’ to exercise the web application,
     which will lead to records being written to the log.

  6. Inspect the log files in the ‘run’ subdirectory.  You should see
     the most recent log lines in files matching the pattern ‘app.log*’.
     They won’t be in any particular order, since they have been handled
     concurrently by different worker processes in a non-deterministic
     way.

  7. You can shut down the listener and the web application by running
     ‘venv/bin/supervisorctl -c supervisor.conf shutdown’.

You may need to tweak the configuration files in the unlikely event that
the configured ports clash with something else in your test environment.

The default configuration uses a TCP socket on port 9020.  You can use a
Unix Domain socket instead of a TCP socket by doing the following:

  1. In ‘listener.json’, add a ‘socket’ key with the path to the domain
     socket you want to use.  If this key is present, the listener
     listens on the corresponding domain socket and not on a TCP socket
     (the ‘port’ key is ignored).

  2. In ‘webapp.json’, change the socket handler configuration
     dictionary so that the ‘host’ value is the path to the domain
     socket, and set the ‘port’ value to ‘null’.

   ---------- Footnotes ----------

   (1) http://supervisord.org/

   (2) https://gist.github.com/vsajip/4b227eeec43817465ca835ca66f75e2b

   (3) https://gunicorn.org/

   (4) https://gist.github.com/vsajip/4b227eeec43817465ca835ca66f75e2b


File: python.info,  Node: Adding contextual information to your logging output,  Next: Use of contextvars,  Prev: Sending and receiving logging events across a network,  Up: Livro de receitas do logging

9.9.9 Adding contextual information to your logging output
----------------------------------------------------------

Sometimes you want logging output to contain contextual information in
addition to the parameters passed to the logging call.  For example, in
a networked application, it may be desirable to log client-specific
information in the log (e.g.  remote client’s username, or IP address).
Although you could use the 'extra' parameter to achieve this, it’s not
always convenient to pass the information in this way.  While it might
be tempting to create *note Logger: b64. instances on a per-connection
basis, this is not a good idea because these instances are not garbage
collected.  While this is not a problem in practice, when the number of
*note Logger: b64. instances is dependent on the level of granularity
you want to use in logging an application, it could be hard to manage if
the number of *note Logger: b64. instances becomes effectively
unbounded.

* Menu:

* Using LoggerAdapters to impart contextual information::
* Using Filters to impart contextual information::


File: python.info,  Node: Using LoggerAdapters to impart contextual information,  Next: Using Filters to impart contextual information,  Up: Adding contextual information to your logging output

9.9.9.1 Using LoggerAdapters to impart contextual information
.............................................................

An easy way in which you can pass contextual information to be output
along with logging event information is to use the *note LoggerAdapter:
1339. class.  This class is designed to look like a *note Logger: b64,
so that you can call *note debug(): 2e40, *note info(): 2e6b, *note
warning(): 2ff, *note error(): 2e7f, *note exception(): 14dc, *note
critical(): 2e80. and *note log(): 2e81.  These methods have the same
signatures as their counterparts in *note Logger: b64, so you can use
the two types of instances interchangeably.

When you create an instance of *note LoggerAdapter: 1339, you pass it a
*note Logger: b64. instance and a dict-like object which contains your
contextual information.  When you call one of the logging methods on an
instance of *note LoggerAdapter: 1339, it delegates the call to the
underlying instance of *note Logger: b64. passed to its constructor, and
arranges to pass the contextual information in the delegated call.
Here’s a snippet from the code of *note LoggerAdapter: 1339.:

     def debug(self, msg, /, *args, **kwargs):
         """
         Delegate a debug call to the underlying logger, after adding
         contextual information from this adapter instance.
         """
         msg, kwargs = self.process(msg, kwargs)
         self.logger.debug(msg, *args, **kwargs)

The *note process(): 2e78. method of *note LoggerAdapter: 1339. is where
the contextual information is added to the logging output.  It’s passed
the message and keyword arguments of the logging call, and it passes
back (potentially) modified versions of these to use in the call to the
underlying logger.  The default implementation of this method leaves the
message alone, but inserts an ‘extra’ key in the keyword argument whose
value is the dict-like object passed to the constructor.  Of course, if
you had passed an ‘extra’ keyword argument in the call to the adapter,
it will be silently overwritten.

The advantage of using ‘extra’ is that the values in the dict-like
object are merged into the *note LogRecord: 101c. instance’s __dict__,
allowing you to use customized strings with your *note Formatter: 14df.
instances which know about the keys of the dict-like object.  If you
need a different method, e.g.  if you want to prepend or append the
contextual information to the message string, you just need to subclass
*note LoggerAdapter: 1339. and override *note process(): 2e78. to do
what you need.  Here is a simple example:

     class CustomAdapter(logging.LoggerAdapter):
         """
         This example adapter expects the passed in dict-like object to have a
         'connid' key, whose value in brackets is prepended to the log message.
         """
         def process(self, msg, kwargs):
             return '[%s] %s' % (self.extra['connid'], msg), kwargs

which you can use like this:

     logger = logging.getLogger(__name__)
     adapter = CustomAdapter(logger, {'connid': some_conn_id})

Then any events that you log to the adapter will have the value of
‘some_conn_id’ prepended to the log messages.

* Menu:

* Using objects other than dicts to pass contextual information::


File: python.info,  Node: Using objects other than dicts to pass contextual information,  Up: Using LoggerAdapters to impart contextual information

9.9.9.2 Using objects other than dicts to pass contextual information
.....................................................................

You don’t need to pass an actual dict to a *note LoggerAdapter: 1339. -
you could pass an instance of a class which implements ‘__getitem__’ and
‘__iter__’ so that it looks like a dict to logging.  This would be
useful if you want to generate values dynamically (whereas the values in
a dict would be constant).


File: python.info,  Node: Using Filters to impart contextual information,  Prev: Using LoggerAdapters to impart contextual information,  Up: Adding contextual information to your logging output

9.9.9.3 Using Filters to impart contextual information
......................................................

You can also add contextual information to log output using a
user-defined *note Filter: 123b.  ‘Filter’ instances are allowed to
modify the ‘LogRecords’ passed to them, including adding additional
attributes which can then be output using a suitable format string, or
if needed a custom *note Formatter: 14df.

For example in a web application, the request being processed (or at
least, the interesting parts of it) can be stored in a threadlocal
(*note threading.local: 1631.) variable, and then accessed from a
‘Filter’ to add, say, information from the request - say, the remote IP
address and remote user’s username - to the ‘LogRecord’, using the
attribute names ‘ip’ and ‘user’ as in the ‘LoggerAdapter’ example above.
In that case, the same format string can be used to get similar output
to that shown above.  Here’s an example script:

     import logging
     from random import choice

     class ContextFilter(logging.Filter):
         """
         This is a filter which injects contextual information into the log.

         Rather than use actual contextual information, we just use random
         data in this demo.
         """

         USERS = ['jim', 'fred', 'sheila']
         IPS = ['123.231.231.123', '127.0.0.1', '192.168.0.1']

         def filter(self, record):

             record.ip = choice(ContextFilter.IPS)
             record.user = choice(ContextFilter.USERS)
             return True

     if __name__ == '__main__':
         levels = (logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR, logging.CRITICAL)
         logging.basicConfig(level=logging.DEBUG,
                             format='%(asctime)-15s %(name)-5s %(levelname)-8s IP: %(ip)-15s User: %(user)-8s %(message)s')
         a1 = logging.getLogger('a.b.c')
         a2 = logging.getLogger('d.e.f')

         f = ContextFilter()
         a1.addFilter(f)
         a2.addFilter(f)
         a1.debug('A debug message')
         a1.info('An info message with %s', 'some parameters')
         for x in range(10):
             lvl = choice(levels)
             lvlname = logging.getLevelName(lvl)
             a2.log(lvl, 'A message at %s level with %d %s', lvlname, 2, 'parameters')

which, when run, produces something like:

     2010-09-06 22:38:15,292 a.b.c DEBUG    IP: 123.231.231.123 User: fred     A debug message
     2010-09-06 22:38:15,300 a.b.c INFO     IP: 192.168.0.1     User: sheila   An info message with some parameters
     2010-09-06 22:38:15,300 d.e.f CRITICAL IP: 127.0.0.1       User: sheila   A message at CRITICAL level with 2 parameters
     2010-09-06 22:38:15,300 d.e.f ERROR    IP: 127.0.0.1       User: jim      A message at ERROR level with 2 parameters
     2010-09-06 22:38:15,300 d.e.f DEBUG    IP: 127.0.0.1       User: sheila   A message at DEBUG level with 2 parameters
     2010-09-06 22:38:15,300 d.e.f ERROR    IP: 123.231.231.123 User: fred     A message at ERROR level with 2 parameters
     2010-09-06 22:38:15,300 d.e.f CRITICAL IP: 192.168.0.1     User: jim      A message at CRITICAL level with 2 parameters
     2010-09-06 22:38:15,300 d.e.f CRITICAL IP: 127.0.0.1       User: sheila   A message at CRITICAL level with 2 parameters
     2010-09-06 22:38:15,300 d.e.f DEBUG    IP: 192.168.0.1     User: jim      A message at DEBUG level with 2 parameters
     2010-09-06 22:38:15,301 d.e.f ERROR    IP: 127.0.0.1       User: sheila   A message at ERROR level with 2 parameters
     2010-09-06 22:38:15,301 d.e.f DEBUG    IP: 123.231.231.123 User: fred     A message at DEBUG level with 2 parameters
     2010-09-06 22:38:15,301 d.e.f INFO     IP: 123.231.231.123 User: fred     A message at INFO level with 2 parameters


File: python.info,  Node: Use of contextvars,  Next: Imparting contextual information in handlers,  Prev: Adding contextual information to your logging output,  Up: Livro de receitas do logging

9.9.10 Use of ‘contextvars’
---------------------------

Since Python 3.7, the *note contextvars: 24. module has provided
context-local storage which works for both *note threading: ed. and
*note asyncio: a. processing needs.  This type of storage may thus be
generally preferable to thread-locals.  The following example shows how,
in a multi-threaded environment, logs can populated with contextual
information such as, for example, request attributes handled by web
applications.

For the purposes of illustration, say that you have different web
applications, each independent of the other but running in the same
Python process and using a library common to them.  How can each of
these applications have their own log, where all logging messages from
the library (and other request processing code) are directed to the
appropriate application’s log file, while including in the log
additional contextual information such as client IP, HTTP request method
and client username?

Let’s assume that the library can be simulated by the following code:

     # webapplib.py
     import logging
     import time

     logger = logging.getLogger(__name__)

     def useful():
         # Just a representative event logged from the library
         logger.debug('Hello from webapplib!')
         # Just sleep for a bit so other threads get to run
         time.sleep(0.01)

We can simulate the multiple web applications by means of two simple
classes, ‘Request’ and ‘WebApp’.  These simulate how real threaded web
applications work - each request is handled by a thread:

     # main.py
     import argparse
     from contextvars import ContextVar
     import logging
     import os
     from random import choice
     import threading
     import webapplib

     logger = logging.getLogger(__name__)
     root = logging.getLogger()
     root.setLevel(logging.DEBUG)

     class Request:
         """
         A simple dummy request class which just holds dummy HTTP request method,
         client IP address and client username
         """
         def __init__(self, method, ip, user):
             self.method = method
             self.ip = ip
             self.user = user

     # A dummy set of requests which will be used in the simulation - we'll just pick
     # from this list randomly. Note that all GET requests are from 192.168.2.XXX
     # addresses, whereas POST requests are from 192.16.3.XXX addresses. Three users
     # are represented in the sample requests.

     REQUESTS = [
         Request('GET', '192.168.2.20', 'jim'),
         Request('POST', '192.168.3.20', 'fred'),
         Request('GET', '192.168.2.21', 'sheila'),
         Request('POST', '192.168.3.21', 'jim'),
         Request('GET', '192.168.2.22', 'fred'),
         Request('POST', '192.168.3.22', 'sheila'),
     ]

     # Note that the format string includes references to request context information
     # such as HTTP method, client IP and username

     formatter = logging.Formatter('%(threadName)-11s %(appName)s %(name)-9s %(user)-6s %(ip)s %(method)-4s %(message)s')

     # Create our context variables. These will be filled at the start of request
     # processing, and used in the logging that happens during that processing

     ctx_request = ContextVar('request')
     ctx_appname = ContextVar('appname')

     class InjectingFilter(logging.Filter):
         """
         A filter which injects context-specific information into logs and ensures
         that only information for a specific webapp is included in its log
         """
         def __init__(self, app):
             self.app = app

         def filter(self, record):
             request = ctx_request.get()
             record.method = request.method
             record.ip = request.ip
             record.user = request.user
             record.appName = appName = ctx_appname.get()
             return appName == self.app.name

     class WebApp:
         """
         A dummy web application class which has its own handler and filter for a
         webapp-specific log.
         """
         def __init__(self, name):
             self.name = name
             handler = logging.FileHandler(name + '.log', 'w')
             f = InjectingFilter(self)
             handler.setFormatter(formatter)
             handler.addFilter(f)
             root.addHandler(handler)
             self.num_requests = 0

         def process_request(self, request):
             """
             This is the dummy method for processing a request. It's called on a
             different thread for every request. We store the context information into
             the context vars before doing anything else.
             """
             ctx_request.set(request)
             ctx_appname.set(self.name)
             self.num_requests += 1
             logger.debug('Request processing started')
             webapplib.useful()
             logger.debug('Request processing finished')

     def main():
         fn = os.path.splitext(os.path.basename(__file__))[0]
         adhf = argparse.ArgumentDefaultsHelpFormatter
         ap = argparse.ArgumentParser(formatter_class=adhf, prog=fn,
                                      description='Simulate a couple of web '
                                                  'applications handling some '
                                                  'requests, showing how request '
                                                  'context can be used to '
                                                  'populate logs')
         aa = ap.add_argument
         aa('--count', '-c', type=int, default=100, help='How many requests to simulate')
         options = ap.parse_args()

         # Create the dummy webapps and put them in a list which we can use to select
         # from randomly
         app1 = WebApp('app1')
         app2 = WebApp('app2')
         apps = [app1, app2]
         threads = []
         # Add a common handler which will capture all events
         handler = logging.FileHandler('app.log', 'w')
         handler.setFormatter(formatter)
         root.addHandler(handler)

         # Generate calls to process requests
         for i in range(options.count):
             try:
                 # Pick an app at random and a request for it to process
                 app = choice(apps)
                 request = choice(REQUESTS)
                 # Process the request in its own thread
                 t = threading.Thread(target=app.process_request, args=(request,))
                 threads.append(t)
                 t.start()
             except KeyboardInterrupt:
                 break

         # Wait for the threads to terminate
         for t in threads:
             t.join()

         for app in apps:
             print('%s processed %s requests' % (app.name, app.num_requests))

     if __name__ == '__main__':
         main()

If you run the above, you should find that roughly half the requests go
into ‘app1.log’ and the rest into ‘app2.log’, and the all the requests
are logged to ‘app.log’.  Each webapp-specific log will contain only log
entries for only that webapp, and the request information will be
displayed consistently in the log (i.e.  the information in each dummy
request will always appear together in a log line).  This is illustrated
by the following shell output:

     ~/logging-contextual-webapp$ python main.py
     app1 processed 51 requests
     app2 processed 49 requests
     ~/logging-contextual-webapp$ wc -l *.log
       153 app1.log
       147 app2.log
       300 app.log
       600 total
     ~/logging-contextual-webapp$ head -3 app1.log
     Thread-3 (process_request) app1 __main__  jim    192.168.3.21 POST Request processing started
     Thread-3 (process_request) app1 webapplib jim    192.168.3.21 POST Hello from webapplib!
     Thread-5 (process_request) app1 __main__  jim    192.168.3.21 POST Request processing started
     ~/logging-contextual-webapp$ head -3 app2.log
     Thread-1 (process_request) app2 __main__  sheila 192.168.2.21 GET  Request processing started
     Thread-1 (process_request) app2 webapplib sheila 192.168.2.21 GET  Hello from webapplib!
     Thread-2 (process_request) app2 __main__  jim    192.168.2.20 GET  Request processing started
     ~/logging-contextual-webapp$ head app.log
     Thread-1 (process_request) app2 __main__  sheila 192.168.2.21 GET  Request processing started
     Thread-1 (process_request) app2 webapplib sheila 192.168.2.21 GET  Hello from webapplib!
     Thread-2 (process_request) app2 __main__  jim    192.168.2.20 GET  Request processing started
     Thread-3 (process_request) app1 __main__  jim    192.168.3.21 POST Request processing started
     Thread-2 (process_request) app2 webapplib jim    192.168.2.20 GET  Hello from webapplib!
     Thread-3 (process_request) app1 webapplib jim    192.168.3.21 POST Hello from webapplib!
     Thread-4 (process_request) app2 __main__  fred   192.168.2.22 GET  Request processing started
     Thread-5 (process_request) app1 __main__  jim    192.168.3.21 POST Request processing started
     Thread-4 (process_request) app2 webapplib fred   192.168.2.22 GET  Hello from webapplib!
     Thread-6 (process_request) app1 __main__  jim    192.168.3.21 POST Request processing started
     ~/logging-contextual-webapp$ grep app1 app1.log | wc -l
     153
     ~/logging-contextual-webapp$ grep app2 app2.log | wc -l
     147
     ~/logging-contextual-webapp$ grep app1 app.log | wc -l
     153
     ~/logging-contextual-webapp$ grep app2 app.log | wc -l
     147


File: python.info,  Node: Imparting contextual information in handlers,  Next: Logging to a single file from multiple processes,  Prev: Use of contextvars,  Up: Livro de receitas do logging

9.9.11 Imparting contextual information in handlers
---------------------------------------------------

Each *note Handler: 14de. has its own chain of filters.  If you want to
add contextual information to a *note LogRecord: 101c. without leaking
it to other handlers, you can use a filter that returns a new *note
LogRecord: 101c. instead of modifying it in-place, as shown in the
following script:

     import copy
     import logging

     def filter(record: logging.LogRecord):
         record = copy.copy(record)
         record.user = 'jim'
         return record

     if __name__ == '__main__':
         logger = logging.getLogger()
         logger.setLevel(logging.INFO)
         handler = logging.StreamHandler()
         formatter = logging.Formatter('%(message)s from %(user)-8s')
         handler.setFormatter(formatter)
         handler.addFilter(filter)
         logger.addHandler(handler)

         logger.info('A log message')


File: python.info,  Node: Logging to a single file from multiple processes,  Next: Using file rotation,  Prev: Imparting contextual information in handlers,  Up: Livro de receitas do logging

9.9.12 Logging to a single file from multiple processes
-------------------------------------------------------

Although logging is thread-safe, and logging to a single file from
multiple threads in a single process 'is' supported, logging to a single
file from 'multiple processes' is 'not' supported, because there is no
standard way to serialize access to a single file across multiple
processes in Python.  If you need to log to a single file from multiple
processes, one way of doing this is to have all the processes log to a
*note SocketHandler: f96, and have a separate process which implements a
socket server which reads from the socket and logs to file.  (If you
prefer, you can dedicate one thread in one of the existing processes to
perform this function.)  *note This section: 53c1. documents this
approach in more detail and includes a working socket receiver which can
be used as a starting point for you to adapt in your own applications.

You could also write your own handler which uses the *note Lock: 1683.
class from the *note multiprocessing: 94. module to serialize access to
the file from your processes.  The stdlib *note FileHandler: 19de. and
subclasses do not make use of *note multiprocessing: 94.

Alternatively, you can use a ‘Queue’ and a *note QueueHandler: 18ec. to
send all logging events to one of the processes in your multi-process
application.  The following example script demonstrates how you can do
this; in the example a separate listener process listens for events sent
by other processes and logs them according to its own logging
configuration.  Although the example only demonstrates one way of doing
it (for example, you may want to use a listener thread rather than a
separate listener process – the implementation would be analogous) it
does allow for completely different logging configurations for the
listener and the other processes in your application, and can be used as
the basis for code meeting your own specific requirements:

     # You'll need these imports in your own code
     import logging
     import logging.handlers
     import multiprocessing

     # Next two import lines for this demo only
     from random import choice, random
     import time

     #
     # Because you'll want to define the logging configurations for listener and workers, the
     # listener and worker process functions take a configurer parameter which is a callable
     # for configuring logging for that process. These functions are also passed the queue,
     # which they use for communication.
     #
     # In practice, you can configure the listener however you want, but note that in this
     # simple example, the listener does not apply level or filter logic to received records.
     # In practice, you would probably want to do this logic in the worker processes, to avoid
     # sending events which would be filtered out between processes.
     #
     # The size of the rotated files is made small so you can see the results easily.
     def listener_configurer():
         root = logging.getLogger()
         h = logging.handlers.RotatingFileHandler('mptest.log', 'a', 300, 10)
         f = logging.Formatter('%(asctime)s %(processName)-10s %(name)s %(levelname)-8s %(message)s')
         h.setFormatter(f)
         root.addHandler(h)

     # This is the listener process top-level loop: wait for logging events
     # (LogRecords)on the queue and handle them, quit when you get a None for a
     # LogRecord.
     def listener_process(queue, configurer):
         configurer()
         while True:
             try:
                 record = queue.get()
                 if record is None:  # We send this as a sentinel to tell the listener to quit.
                     break
                 logger = logging.getLogger(record.name)
                 logger.handle(record)  # No level or filter logic applied - just do it!
             except Exception:
                 import sys, traceback
                 print('Whoops! Problem:', file=sys.stderr)
                 traceback.print_exc(file=sys.stderr)

     # Arrays used for random selections in this demo

     LEVELS = [logging.DEBUG, logging.INFO, logging.WARNING,
               logging.ERROR, logging.CRITICAL]

     LOGGERS = ['a.b.c', 'd.e.f']

     MESSAGES = [
         'Random message #1',
         'Random message #2',
         'Random message #3',
     ]

     # The worker configuration is done at the start of the worker process run.
     # Note that on Windows you can't rely on fork semantics, so each process
     # will run the logging configuration code when it starts.
     def worker_configurer(queue):
         h = logging.handlers.QueueHandler(queue)  # Just the one handler needed
         root = logging.getLogger()
         root.addHandler(h)
         # send all messages, for demo; no other level or filter logic applied.
         root.setLevel(logging.DEBUG)

     # This is the worker process top-level loop, which just logs ten events with
     # random intervening delays before terminating.
     # The print messages are just so you know it's doing something!
     def worker_process(queue, configurer):
         configurer(queue)
         name = multiprocessing.current_process().name
         print('Worker started: %s' % name)
         for i in range(10):
             time.sleep(random())
             logger = logging.getLogger(choice(LOGGERS))
             level = choice(LEVELS)
             message = choice(MESSAGES)
             logger.log(level, message)
         print('Worker finished: %s' % name)

     # Here's where the demo gets orchestrated. Create the queue, create and start
     # the listener, create ten workers and start them, wait for them to finish,
     # then send a None to the queue to tell the listener to finish.
     def main():
         queue = multiprocessing.Queue(-1)
         listener = multiprocessing.Process(target=listener_process,
                                            args=(queue, listener_configurer))
         listener.start()
         workers = []
         for i in range(10):
             worker = multiprocessing.Process(target=worker_process,
                                              args=(queue, worker_configurer))
             workers.append(worker)
             worker.start()
         for w in workers:
             w.join()
         queue.put_nowait(None)
         listener.join()

     if __name__ == '__main__':
         main()

A variant of the above script keeps the logging in the main process, in
a separate thread:

     import logging
     import logging.config
     import logging.handlers
     from multiprocessing import Process, Queue
     import random
     import threading
     import time

     def logger_thread(q):
         while True:
             record = q.get()
             if record is None:
                 break
             logger = logging.getLogger(record.name)
             logger.handle(record)


     def worker_process(q):
         qh = logging.handlers.QueueHandler(q)
         root = logging.getLogger()
         root.setLevel(logging.DEBUG)
         root.addHandler(qh)
         levels = [logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR,
                   logging.CRITICAL]
         loggers = ['foo', 'foo.bar', 'foo.bar.baz',
                    'spam', 'spam.ham', 'spam.ham.eggs']
         for i in range(100):
             lvl = random.choice(levels)
             logger = logging.getLogger(random.choice(loggers))
             logger.log(lvl, 'Message no. %d', i)

     if __name__ == '__main__':
         q = Queue()
         d = {
             'version': 1,
             'formatters': {
                 'detailed': {
                     'class': 'logging.Formatter',
                     'format': '%(asctime)s %(name)-15s %(levelname)-8s %(processName)-10s %(message)s'
                 }
             },
             'handlers': {
                 'console': {
                     'class': 'logging.StreamHandler',
                     'level': 'INFO',
                 },
                 'file': {
                     'class': 'logging.FileHandler',
                     'filename': 'mplog.log',
                     'mode': 'w',
                     'formatter': 'detailed',
                 },
                 'foofile': {
                     'class': 'logging.FileHandler',
                     'filename': 'mplog-foo.log',
                     'mode': 'w',
                     'formatter': 'detailed',
                 },
                 'errors': {
                     'class': 'logging.FileHandler',
                     'filename': 'mplog-errors.log',
                     'mode': 'w',
                     'level': 'ERROR',
                     'formatter': 'detailed',
                 },
             },
             'loggers': {
                 'foo': {
                     'handlers': ['foofile']
                 }
             },
             'root': {
                 'level': 'DEBUG',
                 'handlers': ['console', 'file', 'errors']
             },
         }
         workers = []
         for i in range(5):
             wp = Process(target=worker_process, name='worker %d' % (i + 1), args=(q,))
             workers.append(wp)
             wp.start()
         logging.config.dictConfig(d)
         lp = threading.Thread(target=logger_thread, args=(q,))
         lp.start()
         # At this point, the main process could do some useful work of its own
         # Once it's done that, it can wait for the workers to terminate...
         for wp in workers:
             wp.join()
         # And now tell the logging thread to finish up, too
         q.put(None)
         lp.join()

This variant shows how you can e.g.  apply configuration for particular
loggers - e.g.  the ‘foo’ logger has a special handler which stores all
events in the ‘foo’ subsystem in a file ‘mplog-foo.log’.  This will be
used by the logging machinery in the main process (even though the
logging events are generated in the worker processes) to direct the
messages to the appropriate destinations.

* Menu:

* Using concurrent.futures.ProcessPoolExecutor: Using concurrent futures ProcessPoolExecutor.
* Deploying Web applications using Gunicorn and uWSGI::


File: python.info,  Node: Using concurrent futures ProcessPoolExecutor,  Next: Deploying Web applications using Gunicorn and uWSGI,  Up: Logging to a single file from multiple processes

9.9.12.1 Using concurrent.futures.ProcessPoolExecutor
.....................................................

If you want to use *note concurrent.futures.ProcessPoolExecutor: 8f4. to
start your worker processes, you need to create the queue slightly
differently.  Instead of

     queue = multiprocessing.Queue(-1)

you should use

     queue = multiprocessing.Manager().Queue(-1)  # also works with the examples above

and you can then replace the worker creation from this:

     workers = []
     for i in range(10):
         worker = multiprocessing.Process(target=worker_process,
                                          args=(queue, worker_configurer))
         workers.append(worker)
         worker.start()
     for w in workers:
         w.join()

to this (remembering to first import *note concurrent.futures: 21.):

     with concurrent.futures.ProcessPoolExecutor(max_workers=10) as executor:
         for i in range(10):
             executor.submit(worker_process, queue, worker_configurer)


File: python.info,  Node: Deploying Web applications using Gunicorn and uWSGI,  Prev: Using concurrent futures ProcessPoolExecutor,  Up: Logging to a single file from multiple processes

9.9.12.2 Deploying Web applications using Gunicorn and uWSGI
............................................................

When deploying Web applications using Gunicorn(1) or uWSGI(2) (or
similar), multiple worker processes are created to handle client
requests.  In such environments, avoid creating file-based handlers
directly in your web application.  Instead, use a *note SocketHandler:
f96. to log from the web application to a listener in a separate
process.  This can be set up using a process management tool such as
Supervisor - see *note Running a logging socket listener in production:
53c3. for more details.

   ---------- Footnotes ----------

   (1) https://gunicorn.org/

   (2) https://uwsgi-docs.readthedocs.io/en/latest/


File: python.info,  Node: Using file rotation,  Next: Use of alternative formatting styles,  Prev: Logging to a single file from multiple processes,  Up: Livro de receitas do logging

9.9.13 Using file rotation
--------------------------

Sometimes you want to let a log file grow to a certain size, then open a
new file and log to that.  You may want to keep a certain number of
these files, and when that many files have been created, rotate the
files so that the number of files and the size of the files both remain
bounded.  For this usage pattern, the logging package provides a *note
RotatingFileHandler: 16c2.:

     import glob
     import logging
     import logging.handlers

     LOG_FILENAME = 'logging_rotatingfile_example.out'

     # Set up a specific logger with our desired output level
     my_logger = logging.getLogger('MyLogger')
     my_logger.setLevel(logging.DEBUG)

     # Add the log message handler to the logger
     handler = logging.handlers.RotatingFileHandler(
                   LOG_FILENAME, maxBytes=20, backupCount=5)

     my_logger.addHandler(handler)

     # Log some messages
     for i in range(20):
         my_logger.debug('i = %d' % i)

     # See what files are created
     logfiles = glob.glob('%s*' % LOG_FILENAME)

     for filename in logfiles:
         print(filename)

The result should be 6 separate files, each with part of the log history
for the application:

     logging_rotatingfile_example.out
     logging_rotatingfile_example.out.1
     logging_rotatingfile_example.out.2
     logging_rotatingfile_example.out.3
     logging_rotatingfile_example.out.4
     logging_rotatingfile_example.out.5

The most current file is always ‘logging_rotatingfile_example.out’, and
each time it reaches the size limit it is renamed with the suffix ‘.1’.
Each of the existing backup files is renamed to increment the suffix
(‘.1’ becomes ‘.2’, etc.)  and the ‘.6’ file is erased.

Obviously this example sets the log length much too small as an extreme
example.  You would want to set 'maxBytes' to an appropriate value.


File: python.info,  Node: Use of alternative formatting styles,  Next: Personalizando o LogRecord,  Prev: Using file rotation,  Up: Livro de receitas do logging

9.9.14 Use of alternative formatting styles
-------------------------------------------

When logging was added to the Python standard library, the only way of
formatting messages with variable content was to use the %-formatting
method.  Since then, Python has gained two new formatting approaches:
*note string.Template: 687. (added in Python 2.4) and *note
str.format(): 621. (added in Python 2.6).

Logging (as of 3.2) provides improved support for these two additional
formatting styles.  The *note Formatter: 14df. class been enhanced to
take an additional, optional keyword parameter named ‘style’.  This
defaults to ‘'%'’, but other possible values are ‘'{'’ and ‘'$'’, which
correspond to the other two formatting styles.  Backwards compatibility
is maintained by default (as you would expect), but by explicitly
specifying a style parameter, you get the ability to specify format
strings which work with *note str.format(): 621. or *note
string.Template: 687.  Here’s an example console session to show the
possibilities:

     >>> import logging
     >>> root = logging.getLogger()
     >>> root.setLevel(logging.DEBUG)
     >>> handler = logging.StreamHandler()
     >>> bf = logging.Formatter('{asctime} {name} {levelname:8s} {message}',
     ...                        style='{')
     >>> handler.setFormatter(bf)
     >>> root.addHandler(handler)
     >>> logger = logging.getLogger('foo.bar')
     >>> logger.debug('This is a DEBUG message')
     2010-10-28 15:11:55,341 foo.bar DEBUG    This is a DEBUG message
     >>> logger.critical('This is a CRITICAL message')
     2010-10-28 15:12:11,526 foo.bar CRITICAL This is a CRITICAL message
     >>> df = logging.Formatter('$asctime $name ${levelname} $message',
     ...                        style='$')
     >>> handler.setFormatter(df)
     >>> logger.debug('This is a DEBUG message')
     2010-10-28 15:13:06,924 foo.bar DEBUG This is a DEBUG message
     >>> logger.critical('This is a CRITICAL message')
     2010-10-28 15:13:11,494 foo.bar CRITICAL This is a CRITICAL message
     >>>

Note that the formatting of logging messages for final output to logs is
completely independent of how an individual logging message is
constructed.  That can still use %-formatting, as shown here:

     >>> logger.error('This is an%s %s %s', 'other,', 'ERROR,', 'message')
     2010-10-28 15:19:29,833 foo.bar ERROR This is another, ERROR, message
     >>>

Logging calls (‘logger.debug()’, ‘logger.info()’ etc.)  only take
positional parameters for the actual logging message itself, with
keyword parameters used only for determining options for how to handle
the actual logging call (e.g.  the ‘exc_info’ keyword parameter to
indicate that traceback information should be logged, or the ‘extra’
keyword parameter to indicate additional contextual information to be
added to the log).  So you cannot directly make logging calls using
*note str.format(): 621. or *note string.Template: 687. syntax, because
internally the logging package uses %-formatting to merge the format
string and the variable arguments.  There would be no changing this
while preserving backward compatibility, since all logging calls which
are out there in existing code will be using %-format strings.

There is, however, a way that you can use {}- and $- formatting to
construct your individual log messages.  Recall that for a message you
can use an arbitrary object as a message format string, and that the
logging package will call ‘str()’ on that object to get the actual
format string.  Consider the following two classes:

     class BraceMessage:
         def __init__(self, fmt, /, *args, **kwargs):
             self.fmt = fmt
             self.args = args
             self.kwargs = kwargs

         def __str__(self):
             return self.fmt.format(*self.args, **self.kwargs)

     class DollarMessage:
         def __init__(self, fmt, /, **kwargs):
             self.fmt = fmt
             self.kwargs = kwargs

         def __str__(self):
             from string import Template
             return Template(self.fmt).substitute(**self.kwargs)

Either of these can be used in place of a format string, to allow {}- or
$-formatting to be used to build the actual “message” part which appears
in the formatted log output in place of “%(message)s” or “{message}” or
“$message”.  It’s a little unwieldy to use the class names whenever you
want to log something, but it’s quite palatable if you use an alias such
as __ (double underscore — not to be confused with _, the single
underscore used as a synonym/alias for *note gettext.gettext(): 14b1. or
its brethren).

The above classes are not included in Python, though they’re easy enough
to copy and paste into your own code.  They can be used as follows
(assuming that they’re declared in a module called ‘wherever’):

     >>> from wherever import BraceMessage as __
     >>> print(__('Message with {0} {name}', 2, name='placeholders'))
     Message with 2 placeholders
     >>> class Point: pass
     ...
     >>> p = Point()
     >>> p.x = 0.5
     >>> p.y = 0.5
     >>> print(__('Message with coordinates: ({point.x:.2f}, {point.y:.2f})',
     ...       point=p))
     Message with coordinates: (0.50, 0.50)
     >>> from wherever import DollarMessage as __
     >>> print(__('Message with $num $what', num=2, what='placeholders'))
     Message with 2 placeholders
     >>>

While the above examples use ‘print()’ to show how the formatting works,
you would of course use ‘logger.debug()’ or similar to actually log
using this approach.

One thing to note is that you pay no significant performance penalty
with this approach: the actual formatting happens not when you make the
logging call, but when (and if) the logged message is actually about to
be output to a log by a handler.  So the only slightly unusual thing
which might trip you up is that the parentheses go around the format
string and the arguments, not just the format string.  That’s because
the __ notation is just syntax sugar for a constructor call to one of
the ‘XXXMessage’ classes.

If you prefer, you can use a *note LoggerAdapter: 1339. to achieve a
similar effect to the above, as in the following example:

     import logging

     class Message:
         def __init__(self, fmt, args):
             self.fmt = fmt
             self.args = args

         def __str__(self):
             return self.fmt.format(*self.args)

     class StyleAdapter(logging.LoggerAdapter):
         def log(self, level, msg, /, *args, stacklevel=1, **kwargs):
             if self.isEnabledFor(level):
                 msg, kwargs = self.process(msg, kwargs)
                 self.logger.log(level, Message(msg, args), **kwargs,
                                 stacklevel=stacklevel+1)

     logger = StyleAdapter(logging.getLogger(__name__))

     def main():
         logger.debug('Hello, {}', 'world!')

     if __name__ == '__main__':
         logging.basicConfig(level=logging.DEBUG)
         main()

The above script should log the message ‘Hello, world!’ when run with
Python 3.8 or later.


File: python.info,  Node: Personalizando o LogRecord,  Next: Subclassing QueueHandler and QueueListener- a ZeroMQ example,  Prev: Use of alternative formatting styles,  Up: Livro de receitas do logging

9.9.15 Personalizando o ‘LogRecord’
-----------------------------------

Every logging event is represented by a *note LogRecord: 101c. instance.
When an event is logged and not filtered out by a logger’s level, a
*note LogRecord: 101c. is created, populated with information about the
event and then passed to the handlers for that logger (and its
ancestors, up to and including the logger where further propagation up
the hierarchy is disabled).  Before Python 3.2, there were only two
places where this creation was done:

   * *note Logger.makeRecord(): 2e49, which is called in the normal
     process of logging an event.  This invoked *note LogRecord: 101c.
     directly to create an instance.

   * *note makeLogRecord(): 2e6f, which is called with a dictionary
     containing attributes to be added to the LogRecord.  This is
     typically invoked when a suitable dictionary has been received over
     the network (e.g.  in pickle form via a *note SocketHandler: f96,
     or in JSON form via an *note HTTPHandler: e58.).

This has usually meant that if you need to do anything special with a
*note LogRecord: 101c, you’ve had to do one of the following.

   * Create your own *note Logger: b64. subclass, which overrides *note
     Logger.makeRecord(): 2e49, and set it using *note setLoggerClass():
     2e7e. before any loggers that you care about are instantiated.

   * Add a *note Filter: 123b. to a logger or handler, which does the
     necessary special manipulation you need when its *note filter():
     2e6a. method is called.

The first approach would be a little unwieldy in the scenario where
(say) several different libraries wanted to do different things.  Each
would attempt to set its own *note Logger: b64. subclass, and the one
which did this last would win.

The second approach works reasonably well for many cases, but does not
allow you to e.g.  use a specialized subclass of *note LogRecord: 101c.
Library developers can set a suitable filter on their loggers, but they
would have to remember to do this every time they introduced a new
logger (which they would do simply by adding new packages or modules and
doing

     logger = logging.getLogger(__name__)

at module level).  It’s probably one too many things to think about.
Developers could also add the filter to a *note NullHandler: 12c6.
attached to their top-level logger, but this would not be invoked if an
application developer attached a handler to a lower-level library logger
— so output from that handler would not reflect the intentions of the
library developer.

In Python 3.2 and later, *note LogRecord: 101c. creation is done through
a factory, which you can specify.  The factory is just a callable you
can set with *note setLogRecordFactory(): 2e73, and interrogate with
*note getLogRecordFactory(): 2e72.  The factory is invoked with the same
signature as the *note LogRecord: 101c. constructor, as *note LogRecord:
101c. is the default setting for the factory.

This approach allows a custom factory to control all aspects of
LogRecord creation.  For example, you could return a subclass, or just
add some additional attributes to the record once created, using a
pattern similar to this:

     old_factory = logging.getLogRecordFactory()

     def record_factory(*args, **kwargs):
         record = old_factory(*args, **kwargs)
         record.custom_attribute = 0xdecafbad
         return record

     logging.setLogRecordFactory(record_factory)

This pattern allows different libraries to chain factories together, and
as long as they don’t overwrite each other’s attributes or
unintentionally overwrite the attributes provided as standard, there
should be no surprises.  However, it should be borne in mind that each
link in the chain adds run-time overhead to all logging operations, and
the technique should only be used when the use of a *note Filter: 123b.
does not provide the desired result.


File: python.info,  Node: Subclassing QueueHandler and QueueListener- a ZeroMQ example,  Next: Subclassing QueueHandler and QueueListener- a pynng example,  Prev: Personalizando o LogRecord,  Up: Livro de receitas do logging

9.9.16 Subclassing QueueHandler and QueueListener- a ZeroMQ example
-------------------------------------------------------------------

* Menu:

* Subclass QueueHandler::
* Subclass QueueListener::


File: python.info,  Node: Subclass QueueHandler,  Next: Subclass QueueListener,  Up: Subclassing QueueHandler and QueueListener- a ZeroMQ example

9.9.16.1 Subclass ‘QueueHandler’
................................

You can use a *note QueueHandler: 18ec. subclass to send messages to
other kinds of queues, for example a ZeroMQ ‘publish’ socket.  In the
example below,the socket is created separately and passed to the handler
(as its ‘queue’):

     import zmq   # using pyzmq, the Python binding for ZeroMQ
     import json  # for serializing records portably

     ctx = zmq.Context()
     sock = zmq.Socket(ctx, zmq.PUB)  # or zmq.PUSH, or other suitable value
     sock.bind('tcp://*:5556')        # or wherever

     class ZeroMQSocketHandler(QueueHandler):
         def enqueue(self, record):
             self.queue.send_json(record.__dict__)


     handler = ZeroMQSocketHandler(sock)

Of course there are other ways of organizing this, for example passing
in the data needed by the handler to create the socket:

     class ZeroMQSocketHandler(QueueHandler):
         def __init__(self, uri, socktype=zmq.PUB, ctx=None):
             self.ctx = ctx or zmq.Context()
             socket = zmq.Socket(self.ctx, socktype)
             socket.bind(uri)
             super().__init__(socket)

         def enqueue(self, record):
             self.queue.send_json(record.__dict__)

         def close(self):
             self.queue.close()


File: python.info,  Node: Subclass QueueListener,  Prev: Subclass QueueHandler,  Up: Subclassing QueueHandler and QueueListener- a ZeroMQ example

9.9.16.2 Subclass ‘QueueListener’
.................................

You can also subclass *note QueueListener: e59. to get messages from
other kinds of queues, for example a ZeroMQ ‘subscribe’ socket.  Here’s
an example:

     class ZeroMQSocketListener(QueueListener):
         def __init__(self, uri, /, *handlers, **kwargs):
             self.ctx = kwargs.get('ctx') or zmq.Context()
             socket = zmq.Socket(self.ctx, zmq.SUB)
             socket.setsockopt_string(zmq.SUBSCRIBE, '')  # subscribe to everything
             socket.connect(uri)
             super().__init__(socket, *handlers, **kwargs)

         def dequeue(self):
             msg = self.queue.recv_json()
             return logging.makeLogRecord(msg)


File: python.info,  Node: Subclassing QueueHandler and QueueListener- a pynng example,  Next: An example dictionary-based configuration,  Prev: Subclassing QueueHandler and QueueListener- a ZeroMQ example,  Up: Livro de receitas do logging

9.9.17 Subclassing QueueHandler and QueueListener- a ‘pynng’ example
--------------------------------------------------------------------

In a similar way to the above section, we can implement a listener and
handler using pynng(1), which is a Python binding to NNG(2), billed as a
spiritual successor to ZeroMQ. The following snippets illustrate – you
can test them in an environment which has ‘pynng’ installed.  Just for
variety, we present the listener first.

* Menu:

* Subclass QueueListener: Subclass QueueListener<2>.
* Subclass QueueHandler: Subclass QueueHandler<2>.

   ---------- Footnotes ----------

   (1) https://pypi.org/project/pynng/

   (2) https://nng.nanomsg.org/


File: python.info,  Node: Subclass QueueListener<2>,  Next: Subclass QueueHandler<2>,  Up: Subclassing QueueHandler and QueueListener- a pynng example

9.9.17.1 Subclass ‘QueueListener’
.................................

     # listener.py
     import json
     import logging
     import logging.handlers

     import pynng

     DEFAULT_ADDR = "tcp://localhost:13232"

     interrupted = False

     class NNGSocketListener(logging.handlers.QueueListener):

         def __init__(self, uri, /, *handlers, **kwargs):
             # Have a timeout for interruptability, and open a
             # subscriber socket
             socket = pynng.Sub0(listen=uri, recv_timeout=500)
             # The b'' subscription matches all topics
             topics = kwargs.pop('topics', None) or b''
             socket.subscribe(topics)
             # We treat the socket as a queue
             super().__init__(socket, *handlers, **kwargs)

         def dequeue(self, block):
             data = None
             # Keep looping while not interrupted and no data received over the
             # socket
             while not interrupted:
                 try:
                     data = self.queue.recv(block=block)
                     break
                 except pynng.Timeout:
                     pass
                 except pynng.Closed:  # sometimes happens when you hit Ctrl-C
                     break
             if data is None:
                 return None
             # Get the logging event sent from a publisher
             event = json.loads(data.decode('utf-8'))
             return logging.makeLogRecord(event)

         def enqueue_sentinel(self):
             # Not used in this implementation, as the socket isn't really a
             # queue
             pass

     logging.getLogger('pynng').propagate = False
     listener = NNGSocketListener(DEFAULT_ADDR, logging.StreamHandler(), topics=b'')
     listener.start()
     print('Press Ctrl-C to stop.')
     try:
         while True:
             pass
     except KeyboardInterrupt:
         interrupted = True
     finally:
         listener.stop()


File: python.info,  Node: Subclass QueueHandler<2>,  Prev: Subclass QueueListener<2>,  Up: Subclassing QueueHandler and QueueListener- a pynng example

9.9.17.2 Subclass ‘QueueHandler’
................................

     # sender.py
     import json
     import logging
     import logging.handlers
     import time
     import random

     import pynng

     DEFAULT_ADDR = "tcp://localhost:13232"

     class NNGSocketHandler(logging.handlers.QueueHandler):

         def __init__(self, uri):
             socket = pynng.Pub0(dial=uri, send_timeout=500)
             super().__init__(socket)

         def enqueue(self, record):
             # Send the record as UTF-8 encoded JSON
             d = dict(record.__dict__)
             data = json.dumps(d)
             self.queue.send(data.encode('utf-8'))

         def close(self):
             self.queue.close()

     logging.getLogger('pynng').propagate = False
     handler = NNGSocketHandler(DEFAULT_ADDR)
     # Make sure the process ID is in the output
     logging.basicConfig(level=logging.DEBUG,
                         handlers=[logging.StreamHandler(), handler],
                         format='%(levelname)-8s %(name)10s %(process)6s %(message)s')
     levels = (logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR,
               logging.CRITICAL)
     logger_names = ('myapp', 'myapp.lib1', 'myapp.lib2')
     msgno = 1
     while True:
         # Just randomly select some loggers and levels and log away
         level = random.choice(levels)
         logger = logging.getLogger(random.choice(logger_names))
         logger.log(level, 'Message no. %5d' % msgno)
         msgno += 1
         delay = random.random() * 2 + 0.5
         time.sleep(delay)

You can run the above two snippets in separate command shells.  If we
run the listener in one shell and run the sender in two separate shells,
we should see something like the following.  In the first sender shell:

     $ python sender.py
     DEBUG         myapp    613 Message no.     1
     WARNING  myapp.lib2    613 Message no.     2
     CRITICAL myapp.lib2    613 Message no.     3
     WARNING  myapp.lib2    613 Message no.     4
     CRITICAL myapp.lib1    613 Message no.     5
     DEBUG         myapp    613 Message no.     6
     CRITICAL myapp.lib1    613 Message no.     7
     INFO     myapp.lib1    613 Message no.     8
     (and so on)

In the second sender shell:

     $ python sender.py
     INFO     myapp.lib2    657 Message no.     1
     CRITICAL myapp.lib2    657 Message no.     2
     CRITICAL      myapp    657 Message no.     3
     CRITICAL myapp.lib1    657 Message no.     4
     INFO     myapp.lib1    657 Message no.     5
     WARNING  myapp.lib2    657 Message no.     6
     CRITICAL      myapp    657 Message no.     7
     DEBUG    myapp.lib1    657 Message no.     8
     (and so on)

In the listener shell:

     $ python listener.py
     Press Ctrl-C to stop.
     DEBUG         myapp    613 Message no.     1
     WARNING  myapp.lib2    613 Message no.     2
     INFO     myapp.lib2    657 Message no.     1
     CRITICAL myapp.lib2    613 Message no.     3
     CRITICAL myapp.lib2    657 Message no.     2
     CRITICAL      myapp    657 Message no.     3
     WARNING  myapp.lib2    613 Message no.     4
     CRITICAL myapp.lib1    613 Message no.     5
     CRITICAL myapp.lib1    657 Message no.     4
     INFO     myapp.lib1    657 Message no.     5
     DEBUG         myapp    613 Message no.     6
     WARNING  myapp.lib2    657 Message no.     6
     CRITICAL      myapp    657 Message no.     7
     CRITICAL myapp.lib1    613 Message no.     7
     INFO     myapp.lib1    613 Message no.     8
     DEBUG    myapp.lib1    657 Message no.     8
     (and so on)

As you can see, the logging from the two sender processes is interleaved
in the listener’s output.


File: python.info,  Node: An example dictionary-based configuration,  Next: Using a rotator and namer to customize log rotation processing,  Prev: Subclassing QueueHandler and QueueListener- a pynng example,  Up: Livro de receitas do logging

9.9.18 An example dictionary-based configuration
------------------------------------------------

Below is an example of a logging configuration dictionary - it’s taken
from the documentation on the Django project(1).  This dictionary is
passed to *note dictConfig(): 11ef. to put the configuration into
effect:

     LOGGING = {
         'version': 1,
         'disable_existing_loggers': False,
         'formatters': {
             'verbose': {
                 'format': '{levelname} {asctime} {module} {process:d} {thread:d} {message}',
                 'style': '{',
             },
             'simple': {
                 'format': '{levelname} {message}',
                 'style': '{',
             },
         },
         'filters': {
             'special': {
                 '()': 'project.logging.SpecialFilter',
                 'foo': 'bar',
             },
         },
         'handlers': {
             'console': {
                 'level': 'INFO',
                 'class': 'logging.StreamHandler',
                 'formatter': 'simple',
             },
             'mail_admins': {
                 'level': 'ERROR',
                 'class': 'django.utils.log.AdminEmailHandler',
                 'filters': ['special']
             }
         },
         'loggers': {
             'django': {
                 'handlers': ['console'],
                 'propagate': True,
             },
             'django.request': {
                 'handlers': ['mail_admins'],
                 'level': 'ERROR',
                 'propagate': False,
             },
             'myproject.custom': {
                 'handlers': ['console', 'mail_admins'],
                 'level': 'INFO',
                 'filters': ['special']
             }
         }
     }

For more information about this configuration, you can see the relevant
section(2) of the Django documentation.

   ---------- Footnotes ----------

   (1) 
https://docs.djangoproject.com/en/stable/topics/logging/#configuring-logging

   (2) 
https://docs.djangoproject.com/en/stable/topics/logging/#configuring-logging


File: python.info,  Node: Using a rotator and namer to customize log rotation processing,  Next: A more elaborate multiprocessing example,  Prev: An example dictionary-based configuration,  Up: Livro de receitas do logging

9.9.19 Using a rotator and namer to customize log rotation processing
---------------------------------------------------------------------

An example of how you can define a namer and rotator is given in the
following runnable script, which shows gzip compression of the log file:

     import gzip
     import logging
     import logging.handlers
     import os
     import shutil

     def namer(name):
         return name + ".gz"

     def rotator(source, dest):
         with open(source, 'rb') as f_in:
             with gzip.open(dest, 'wb') as f_out:
                 shutil.copyfileobj(f_in, f_out)
         os.remove(source)


     rh = logging.handlers.RotatingFileHandler('rotated.log', maxBytes=128, backupCount=5)
     rh.rotator = rotator
     rh.namer = namer

     root = logging.getLogger()
     root.setLevel(logging.INFO)
     root.addHandler(rh)
     f = logging.Formatter('%(asctime)s %(message)s')
     rh.setFormatter(f)
     for i in range(1000):
         root.info(f'Message no. {i + 1}')

After running this, you will see six new files, five of which are
compressed:

     $ ls rotated.log*
     rotated.log       rotated.log.2.gz  rotated.log.4.gz
     rotated.log.1.gz  rotated.log.3.gz  rotated.log.5.gz
     $ zcat rotated.log.1.gz
     2023-01-20 02:28:17,767 Message no. 996
     2023-01-20 02:28:17,767 Message no. 997
     2023-01-20 02:28:17,767 Message no. 998


File: python.info,  Node: A more elaborate multiprocessing example,  Next: Inserting a BOM into messages sent to a SysLogHandler,  Prev: Using a rotator and namer to customize log rotation processing,  Up: Livro de receitas do logging

9.9.20 A more elaborate multiprocessing example
-----------------------------------------------

The following working example shows how logging can be used with
multiprocessing using configuration files.  The configurations are
fairly simple, but serve to illustrate how more complex ones could be
implemented in a real multiprocessing scenario.

In the example, the main process spawns a listener process and some
worker processes.  Each of the main process, the listener and the
workers have three separate configurations (the workers all share the
same configuration).  We can see logging in the main process, how the
workers log to a QueueHandler and how the listener implements a
QueueListener and a more complex logging configuration, and arranges to
dispatch events received via the queue to the handlers specified in the
configuration.  Note that these configurations are purely illustrative,
but you should be able to adapt this example to your own scenario.

Here’s the script - the docstrings and the comments hopefully explain
how it works:

     import logging
     import logging.config
     import logging.handlers
     from multiprocessing import Process, Queue, Event, current_process
     import os
     import random
     import time

     class MyHandler:
         """
         A simple handler for logging events. It runs in the listener process and
         dispatches events to loggers based on the name in the received record,
         which then get dispatched, by the logging system, to the handlers
         configured for those loggers.
         """

         def handle(self, record):
             if record.name == "root":
                 logger = logging.getLogger()
             else:
                 logger = logging.getLogger(record.name)

             if logger.isEnabledFor(record.levelno):
                 # The process name is transformed just to show that it's the listener
                 # doing the logging to files and console
                 record.processName = '%s (for %s)' % (current_process().name, record.processName)
                 logger.handle(record)

     def listener_process(q, stop_event, config):
         """
         This could be done in the main process, but is just done in a separate
         process for illustrative purposes.

         This initialises logging according to the specified configuration,
         starts the listener and waits for the main process to signal completion
         via the event. The listener is then stopped, and the process exits.
         """
         logging.config.dictConfig(config)
         listener = logging.handlers.QueueListener(q, MyHandler())
         listener.start()
         if os.name == 'posix':
             # On POSIX, the setup logger will have been configured in the
             # parent process, but should have been disabled following the
             # dictConfig call.
             # On Windows, since fork isn't used, the setup logger won't
             # exist in the child, so it would be created and the message
             # would appear - hence the "if posix" clause.
             logger = logging.getLogger('setup')
             logger.critical('Should not appear, because of disabled logger ...')
         stop_event.wait()
         listener.stop()

     def worker_process(config):
         """
         A number of these are spawned for the purpose of illustration. In
         practice, they could be a heterogeneous bunch of processes rather than
         ones which are identical to each other.

         This initialises logging according to the specified configuration,
         and logs a hundred messages with random levels to randomly selected
         loggers.

         A small sleep is added to allow other processes a chance to run. This
         is not strictly needed, but it mixes the output from the different
         processes a bit more than if it's left out.
         """
         logging.config.dictConfig(config)
         levels = [logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR,
                   logging.CRITICAL]
         loggers = ['foo', 'foo.bar', 'foo.bar.baz',
                    'spam', 'spam.ham', 'spam.ham.eggs']
         if os.name == 'posix':
             # On POSIX, the setup logger will have been configured in the
             # parent process, but should have been disabled following the
             # dictConfig call.
             # On Windows, since fork isn't used, the setup logger won't
             # exist in the child, so it would be created and the message
             # would appear - hence the "if posix" clause.
             logger = logging.getLogger('setup')
             logger.critical('Should not appear, because of disabled logger ...')
         for i in range(100):
             lvl = random.choice(levels)
             logger = logging.getLogger(random.choice(loggers))
             logger.log(lvl, 'Message no. %d', i)
             time.sleep(0.01)

     def main():
         q = Queue()
         # The main process gets a simple configuration which prints to the console.
         config_initial = {
             'version': 1,
             'handlers': {
                 'console': {
                     'class': 'logging.StreamHandler',
                     'level': 'INFO'
                 }
             },
             'root': {
                 'handlers': ['console'],
                 'level': 'DEBUG'
             }
         }
         # The worker process configuration is just a QueueHandler attached to the
         # root logger, which allows all messages to be sent to the queue.
         # We disable existing loggers to disable the "setup" logger used in the
         # parent process. This is needed on POSIX because the logger will
         # be there in the child following a fork().
         config_worker = {
             'version': 1,
             'disable_existing_loggers': True,
             'handlers': {
                 'queue': {
                     'class': 'logging.handlers.QueueHandler',
                     'queue': q
                 }
             },
             'root': {
                 'handlers': ['queue'],
                 'level': 'DEBUG'
             }
         }
         # The listener process configuration shows that the full flexibility of
         # logging configuration is available to dispatch events to handlers however
         # you want.
         # We disable existing loggers to disable the "setup" logger used in the
         # parent process. This is needed on POSIX because the logger will
         # be there in the child following a fork().
         config_listener = {
             'version': 1,
             'disable_existing_loggers': True,
             'formatters': {
                 'detailed': {
                     'class': 'logging.Formatter',
                     'format': '%(asctime)s %(name)-15s %(levelname)-8s %(processName)-10s %(message)s'
                 },
                 'simple': {
                     'class': 'logging.Formatter',
                     'format': '%(name)-15s %(levelname)-8s %(processName)-10s %(message)s'
                 }
             },
             'handlers': {
                 'console': {
                     'class': 'logging.StreamHandler',
                     'formatter': 'simple',
                     'level': 'INFO'
                 },
                 'file': {
                     'class': 'logging.FileHandler',
                     'filename': 'mplog.log',
                     'mode': 'w',
                     'formatter': 'detailed'
                 },
                 'foofile': {
                     'class': 'logging.FileHandler',
                     'filename': 'mplog-foo.log',
                     'mode': 'w',
                     'formatter': 'detailed'
                 },
                 'errors': {
                     'class': 'logging.FileHandler',
                     'filename': 'mplog-errors.log',
                     'mode': 'w',
                     'formatter': 'detailed',
                     'level': 'ERROR'
                 }
             },
             'loggers': {
                 'foo': {
                     'handlers': ['foofile']
                 }
             },
             'root': {
                 'handlers': ['console', 'file', 'errors'],
                 'level': 'DEBUG'
             }
         }
         # Log some initial events, just to show that logging in the parent works
         # normally.
         logging.config.dictConfig(config_initial)
         logger = logging.getLogger('setup')
         logger.info('About to create workers ...')
         workers = []
         for i in range(5):
             wp = Process(target=worker_process, name='worker %d' % (i + 1),
                          args=(config_worker,))
             workers.append(wp)
             wp.start()
             logger.info('Started worker: %s', wp.name)
         logger.info('About to create listener ...')
         stop_event = Event()
         lp = Process(target=listener_process, name='listener',
                      args=(q, stop_event, config_listener))
         lp.start()
         logger.info('Started listener')
         # We now hang around for the workers to finish their work.
         for wp in workers:
             wp.join()
         # Workers all done, listening can now stop.
         # Logging in the parent still works normally.
         logger.info('Telling listener to stop ...')
         stop_event.set()
         lp.join()
         logger.info('All done.')

     if __name__ == '__main__':
         main()


File: python.info,  Node: Inserting a BOM into messages sent to a SysLogHandler,  Next: Implementing structured logging,  Prev: A more elaborate multiprocessing example,  Up: Livro de receitas do logging

9.9.21 Inserting a BOM into messages sent to a SysLogHandler
------------------------------------------------------------

RFC 5424(1) requires that a Unicode message be sent to a syslog daemon
as a set of bytes which have the following structure: an optional
pure-ASCII component, followed by a UTF-8 Byte Order Mark (BOM),
followed by Unicode encoded using UTF-8.  (See the relevant section of
the specification(2).)

In Python 3.1, code was added to *note SysLogHandler: 65c. to insert a
BOM into the message, but unfortunately, it was implemented incorrectly,
with the BOM appearing at the beginning of the message and hence not
allowing any pure-ASCII component to appear before it.

As this behaviour is broken, the incorrect BOM insertion code is being
removed from Python 3.2.4 and later.  However, it is not being replaced,
and if you want to produce RFC 5424(3)-compliant messages which include
a BOM, an optional pure-ASCII sequence before it and arbitrary Unicode
after it, encoded using UTF-8, then you need to do the following:

  1. Attach a *note Formatter: 14df. instance to your *note
     SysLogHandler: 65c. instance, with a format string such as:

          'ASCII section\ufeffUnicode section'

     The Unicode code point U+FEFF, when encoded using UTF-8, will be
     encoded as a UTF-8 BOM – the byte-string ‘b'\xef\xbb\xbf'’.

  2. Replace the ASCII section with whatever placeholders you like, but
     make sure that the data that appears in there after substitution is
     always ASCII (that way, it will remain unchanged after UTF-8
     encoding).

  3. Replace the Unicode section with whatever placeholders you like; if
     the data which appears there after substitution contains characters
     outside the ASCII range, that’s fine – it will be encoded using
     UTF-8.

The formatted message 'will' be encoded using UTF-8 encoding by
‘SysLogHandler’.  If you follow the above rules, you should be able to
produce RFC 5424(4)-compliant messages.  If you don’t, logging may not
complain, but your messages will not be RFC 5424-compliant, and your
syslog daemon may complain.

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc5424.html

   (2) https://datatracker.ietf.org/doc/html/rfc5424.html#section-6

   (3) https://datatracker.ietf.org/doc/html/rfc5424.html

   (4) https://datatracker.ietf.org/doc/html/rfc5424.html


File: python.info,  Node: Implementing structured logging,  Next: Customizing handlers with dictConfig,  Prev: Inserting a BOM into messages sent to a SysLogHandler,  Up: Livro de receitas do logging

9.9.22 Implementing structured logging
--------------------------------------

Although most logging messages are intended for reading by humans, and
thus not readily machine-parseable, there might be circumstances where
you want to output messages in a structured format which 'is' capable of
being parsed by a program (without needing complex regular expressions
to parse the log message).  This is straightforward to achieve using the
logging package.  There are a number of ways in which this could be
achieved, but the following is a simple approach which uses JSON to
serialise the event in a machine-parseable manner:

     import json
     import logging

     class StructuredMessage:
         def __init__(self, message, /, **kwargs):
             self.message = message
             self.kwargs = kwargs

         def __str__(self):
             return '%s >>> %s' % (self.message, json.dumps(self.kwargs))

     _ = StructuredMessage   # optional, to improve readability

     logging.basicConfig(level=logging.INFO, format='%(message)s')
     logging.info(_('message 1', foo='bar', bar='baz', num=123, fnum=123.456))

If the above script is run, it prints:

     message 1 >>> {"fnum": 123.456, "num": 123, "bar": "baz", "foo": "bar"}

Note that the order of items might be different according to the version
of Python used.

If you need more specialised processing, you can use a custom JSON
encoder, as in the following complete example:

     import json
     import logging


     class Encoder(json.JSONEncoder):
         def default(self, o):
             if isinstance(o, set):
                 return tuple(o)
             elif isinstance(o, str):
                 return o.encode('unicode_escape').decode('ascii')
             return super().default(o)

     class StructuredMessage:
         def __init__(self, message, /, **kwargs):
             self.message = message
             self.kwargs = kwargs

         def __str__(self):
             s = Encoder().encode(self.kwargs)
             return '%s >>> %s' % (self.message, s)

     _ = StructuredMessage   # optional, to improve readability

     def main():
         logging.basicConfig(level=logging.INFO, format='%(message)s')
         logging.info(_('message 1', set_value={1, 2, 3}, snowman='\u2603'))

     if __name__ == '__main__':
         main()

When the above script is run, it prints:

     message 1 >>> {"snowman": "\u2603", "set_value": [1, 2, 3]}

Note that the order of items might be different according to the version
of Python used.


File: python.info,  Node: Customizing handlers with dictConfig,  Next: Using particular formatting styles throughout your application,  Prev: Implementing structured logging,  Up: Livro de receitas do logging

9.9.23 Customizing handlers with ‘dictConfig()’
-----------------------------------------------

There are times when you want to customize logging handlers in
particular ways, and if you use *note dictConfig(): 11ef. you may be
able to do this without subclassing.  As an example, consider that you
may want to set the ownership of a log file.  On POSIX, this is easily
done using *note shutil.chown(): 240, but the file handlers in the
stdlib don’t offer built-in support.  You can customize handler creation
using a plain function such as:

     def owned_file_handler(filename, mode='a', encoding=None, owner=None):
         if owner:
             if not os.path.exists(filename):
                 open(filename, 'a').close()
             shutil.chown(filename, *owner)
         return logging.FileHandler(filename, mode, encoding)

You can then specify, in a logging configuration passed to *note
dictConfig(): 11ef, that a logging handler be created by calling this
function:

     LOGGING = {
         'version': 1,
         'disable_existing_loggers': False,
         'formatters': {
             'default': {
                 'format': '%(asctime)s %(levelname)s %(name)s %(message)s'
             },
         },
         'handlers': {
             'file':{
                 # The values below are popped from this dictionary and
                 # used to create the handler, set the handler's level and
                 # its formatter.
                 '()': owned_file_handler,
                 'level':'DEBUG',
                 'formatter': 'default',
                 # The values below are passed to the handler creator callable
                 # as keyword arguments.
                 'owner': ['pulse', 'pulse'],
                 'filename': 'chowntest.log',
                 'mode': 'w',
                 'encoding': 'utf-8',
             },
         },
         'root': {
             'handlers': ['file'],
             'level': 'DEBUG',
         },
     }

In this example I am setting the ownership using the ‘pulse’ user and
group, just for the purposes of illustration.  Putting it together into
a working script, ‘chowntest.py’:

     import logging, logging.config, os, shutil

     def owned_file_handler(filename, mode='a', encoding=None, owner=None):
         if owner:
             if not os.path.exists(filename):
                 open(filename, 'a').close()
             shutil.chown(filename, *owner)
         return logging.FileHandler(filename, mode, encoding)

     LOGGING = {
         'version': 1,
         'disable_existing_loggers': False,
         'formatters': {
             'default': {
                 'format': '%(asctime)s %(levelname)s %(name)s %(message)s'
             },
         },
         'handlers': {
             'file':{
                 # The values below are popped from this dictionary and
                 # used to create the handler, set the handler's level and
                 # its formatter.
                 '()': owned_file_handler,
                 'level':'DEBUG',
                 'formatter': 'default',
                 # The values below are passed to the handler creator callable
                 # as keyword arguments.
                 'owner': ['pulse', 'pulse'],
                 'filename': 'chowntest.log',
                 'mode': 'w',
                 'encoding': 'utf-8',
             },
         },
         'root': {
             'handlers': ['file'],
             'level': 'DEBUG',
         },
     }

     logging.config.dictConfig(LOGGING)
     logger = logging.getLogger('mylogger')
     logger.debug('A debug message')

To run this, you will probably need to run as ‘root’:

     $ sudo python3.3 chowntest.py
     $ cat chowntest.log
     2013-11-05 09:34:51,128 DEBUG mylogger A debug message
     $ ls -l chowntest.log
     -rw-r--r-- 1 pulse pulse 55 2013-11-05 09:34 chowntest.log

Note that this example uses Python 3.3 because that’s where *note
shutil.chown(): 240. makes an appearance.  This approach should work
with any Python version that supports *note dictConfig(): 11ef. -
namely, Python 2.7, 3.2 or later.  With pre-3.3 versions, you would need
to implement the actual ownership change using e.g.  *note os.chown():
112d.

In practice, the handler-creating function may be in a utility module
somewhere in your project.  Instead of the line in the configuration:

     '()': owned_file_handler,

you could use e.g.:

     '()': 'ext://project.util.owned_file_handler',

where ‘project.util’ can be replaced with the actual name of the package
where the function resides.  In the above working script, using
‘'ext://__main__.owned_file_handler'’ should work.  Here, the actual
callable is resolved by *note dictConfig(): 11ef. from the ‘ext://’
specification.

This example hopefully also points the way to how you could implement
other types of file change - e.g.  setting specific POSIX permission
bits - in the same way, using *note os.chmod(): 21b.

Of course, the approach could also be extended to types of handler other
than a *note FileHandler: 19de. - for example, one of the rotating file
handlers, or a different type of handler altogether.


File: python.info,  Node: Using particular formatting styles throughout your application,  Next: Configuring filters with dictConfig,  Prev: Customizing handlers with dictConfig,  Up: Livro de receitas do logging

9.9.24 Using particular formatting styles throughout your application
---------------------------------------------------------------------

In Python 3.2, the *note Formatter: 14df. gained a ‘style’ keyword
parameter which, while defaulting to ‘%’ for backward compatibility,
allowed the specification of ‘{’ or ‘$’ to support the formatting
approaches supported by *note str.format(): 621. and *note
string.Template: 687.  Note that this governs the formatting of logging
messages for final output to logs, and is completely orthogonal to how
an individual logging message is constructed.

Logging calls (*note debug(): e57, *note info(): 2e3f. etc.)  only take
positional parameters for the actual logging message itself, with
keyword parameters used only for determining options for how to handle
the logging call (e.g.  the ‘exc_info’ keyword parameter to indicate
that traceback information should be logged, or the ‘extra’ keyword
parameter to indicate additional contextual information to be added to
the log).  So you cannot directly make logging calls using *note
str.format(): 621. or *note string.Template: 687. syntax, because
internally the logging package uses %-formatting to merge the format
string and the variable arguments.  There would be no changing this
while preserving backward compatibility, since all logging calls which
are out there in existing code will be using %-format strings.

There have been suggestions to associate format styles with specific
loggers, but that approach also runs into backward compatibility
problems because any existing code could be using a given logger name
and using %-formatting.

For logging to work interoperably between any third-party libraries and
your code, decisions about formatting need to be made at the level of
the individual logging call.  This opens up a couple of ways in which
alternative formatting styles can be accommodated.

* Menu:

* Using LogRecord factories::
* Using custom message objects::


File: python.info,  Node: Using LogRecord factories,  Next: Using custom message objects,  Up: Using particular formatting styles throughout your application

9.9.24.1 Using LogRecord factories
..................................

In Python 3.2, along with the *note Formatter: 14df. changes mentioned
above, the logging package gained the ability to allow users to set
their own *note LogRecord: 101c. subclasses, using the *note
setLogRecordFactory(): 2e73. function.  You can use this to set your own
subclass of *note LogRecord: 101c, which does the Right Thing by
overriding the *note getMessage(): 2e71. method.  The base class
implementation of this method is where the ‘msg % args’ formatting
happens, and where you can substitute your alternate formatting;
however, you should be careful to support all formatting styles and
allow %-formatting as the default, to ensure interoperability with other
code.  Care should also be taken to call ‘str(self.msg)’, just as the
base implementation does.

Refer to the reference documentation on *note setLogRecordFactory():
2e73. and *note LogRecord: 101c. for more information.


File: python.info,  Node: Using custom message objects,  Prev: Using LogRecord factories,  Up: Using particular formatting styles throughout your application

9.9.24.2 Using custom message objects
.....................................

There is another, perhaps simpler way that you can use {}- and $-
formatting to construct your individual log messages.  You may recall
(from *note Usando objetos arbitrários como mensagens: 2e70.) that when
logging you can use an arbitrary object as a message format string, and
that the logging package will call *note str(): 44c. on that object to
get the actual format string.  Consider the following two classes:

     class BraceMessage:
         def __init__(self, fmt, /, *args, **kwargs):
             self.fmt = fmt
             self.args = args
             self.kwargs = kwargs

         def __str__(self):
             return self.fmt.format(*self.args, **self.kwargs)

     class DollarMessage:
         def __init__(self, fmt, /, **kwargs):
             self.fmt = fmt
             self.kwargs = kwargs

         def __str__(self):
             from string import Template
             return Template(self.fmt).substitute(**self.kwargs)

Either of these can be used in place of a format string, to allow {}- or
$-formatting to be used to build the actual “message” part which appears
in the formatted log output in place of “%(message)s” or “{message}” or
“$message”.  If you find it a little unwieldy to use the class names
whenever you want to log something, you can make it more palatable if
you use an alias such as ‘M’ or ‘_’ for the message (or perhaps ‘__’, if
you are using ‘_’ for localization).

Examples of this approach are given below.  Firstly, formatting with
*note str.format(): 621.:

     >>> __ = BraceMessage
     >>> print(__('Message with {0} {1}', 2, 'placeholders'))
     Message with 2 placeholders
     >>> class Point: pass
     ...
     >>> p = Point()
     >>> p.x = 0.5
     >>> p.y = 0.5
     >>> print(__('Message with coordinates: ({point.x:.2f}, {point.y:.2f})', point=p))
     Message with coordinates: (0.50, 0.50)

Secondly, formatting with *note string.Template: 687.:

     >>> __ = DollarMessage
     >>> print(__('Message with $num $what', num=2, what='placeholders'))
     Message with 2 placeholders
     >>>

One thing to note is that you pay no significant performance penalty
with this approach: the actual formatting happens not when you make the
logging call, but when (and if) the logged message is actually about to
be output to a log by a handler.  So the only slightly unusual thing
which might trip you up is that the parentheses go around the format
string and the arguments, not just the format string.  That’s because
the __ notation is just syntax sugar for a constructor call to one of
the ‘XXXMessage’ classes shown above.


File: python.info,  Node: Configuring filters with dictConfig,  Next: Customized exception formatting,  Prev: Using particular formatting styles throughout your application,  Up: Livro de receitas do logging

9.9.25 Configuring filters with ‘dictConfig()’
----------------------------------------------

You 'can' configure filters using *note dictConfig(): 11ef, though it
might not be obvious at first glance how to do it (hence this recipe).
Since *note Filter: 123b. is the only filter class included in the
standard library, and it is unlikely to cater to many requirements (it’s
only there as a base class), you will typically need to define your own
*note Filter: 123b. subclass with an overridden *note filter(): 2e6a.
method.  To do this, specify the ‘()’ key in the configuration
dictionary for the filter, specifying a callable which will be used to
create the filter (a class is the most obvious, but you can provide any
callable which returns a *note Filter: 123b. instance).  Here is a
complete example:

     import logging
     import logging.config
     import sys

     class MyFilter(logging.Filter):
         def __init__(self, param=None):
             self.param = param

         def filter(self, record):
             if self.param is None:
                 allow = True
             else:
                 allow = self.param not in record.msg
             if allow:
                 record.msg = 'changed: ' + record.msg
             return allow

     LOGGING = {
         'version': 1,
         'filters': {
             'myfilter': {
                 '()': MyFilter,
                 'param': 'noshow',
             }
         },
         'handlers': {
             'console': {
                 'class': 'logging.StreamHandler',
                 'filters': ['myfilter']
             }
         },
         'root': {
             'level': 'DEBUG',
             'handlers': ['console']
         },
     }

     if __name__ == '__main__':
         logging.config.dictConfig(LOGGING)
         logging.debug('hello')
         logging.debug('hello - noshow')

This example shows how you can pass configuration data to the callable
which constructs the instance, in the form of keyword parameters.  When
run, the above script will print:

     changed: hello

which shows that the filter is working as configured.

A couple of extra points to note:

   * If you can’t refer to the callable directly in the configuration
     (e.g.  if it lives in a different module, and you can’t import it
     directly where the configuration dictionary is), you can use the
     form ‘ext://...’ as described in *note Acesso a objetos externos:
     2ea0.  For example, you could have used the text
     ‘'ext://__main__.MyFilter'’ instead of ‘MyFilter’ in the above
     example.

   * As well as for filters, this technique can also be used to
     configure custom handlers and formatters.  See *note Objetos
     definidos pelo usuário: 2e94. for more information on how logging
     supports using user-defined objects in its configuration, and see
     the other cookbook recipe *note Customizing handlers with
     dictConfig(): 53e0. above.


File: python.info,  Node: Customized exception formatting,  Next: Speaking logging messages,  Prev: Configuring filters with dictConfig,  Up: Livro de receitas do logging

9.9.26 Customized exception formatting
--------------------------------------

There might be times when you want to do customized exception formatting
- for argument’s sake, let’s say you want exactly one line per logged
event, even when exception information is present.  You can do this with
a custom formatter class, as shown in the following example:

     import logging

     class OneLineExceptionFormatter(logging.Formatter):
         def formatException(self, exc_info):
             """
             Format an exception so that it prints on a single line.
             """
             result = super().formatException(exc_info)
             return repr(result)  # or format into one line however you want to

         def format(self, record):
             s = super().format(record)
             if record.exc_text:
                 s = s.replace('\n', '') + '|'
             return s

     def configure_logging():
         fh = logging.FileHandler('output.txt', 'w')
         f = OneLineExceptionFormatter('%(asctime)s|%(levelname)s|%(message)s|',
                                       '%d/%m/%Y %H:%M:%S')
         fh.setFormatter(f)
         root = logging.getLogger()
         root.setLevel(logging.DEBUG)
         root.addHandler(fh)

     def main():
         configure_logging()
         logging.info('Sample message')
         try:
             x = 1 / 0
         except ZeroDivisionError as e:
             logging.exception('ZeroDivisionError: %s', e)

     if __name__ == '__main__':
         main()

When run, this produces a file with exactly two lines:

     28/01/2015 07:21:23|INFO|Sample message|
     28/01/2015 07:21:23|ERROR|ZeroDivisionError: integer division or modulo by zero|'Traceback (most recent call last):\n  File "logtest7.py", line 30, in main\n    x = 1 / 0\nZeroDivisionError: integer division or modulo by zero'|

While the above treatment is simplistic, it points the way to how
exception information can be formatted to your liking.  The *note
traceback: fe. module may be helpful for more specialized needs.


File: python.info,  Node: Speaking logging messages,  Next: Buffering logging messages and outputting them conditionally,  Prev: Customized exception formatting,  Up: Livro de receitas do logging

9.9.27 Speaking logging messages
--------------------------------

There might be situations when it is desirable to have logging messages
rendered in an audible rather than a visible format.  This is easy to do
if you have text-to-speech (TTS) functionality available in your system,
even if it doesn’t have a Python binding.  Most TTS systems have a
command line program you can run, and this can be invoked from a handler
using *note subprocess: d6.  It’s assumed here that TTS command line
programs won’t expect to interact with users or take a long time to
complete, and that the frequency of logged messages will be not so high
as to swamp the user with messages, and that it’s acceptable to have the
messages spoken one at a time rather than concurrently, The example
implementation below waits for one message to be spoken before the next
is processed, and this might cause other handlers to be kept waiting.
Here is a short example showing the approach, which assumes that the
‘espeak’ TTS package is available:

     import logging
     import subprocess
     import sys

     class TTSHandler(logging.Handler):
         def emit(self, record):
             msg = self.format(record)
             # Speak slowly in a female English voice
             cmd = ['espeak', '-s150', '-ven+f3', msg]
             p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
                                  stderr=subprocess.STDOUT)
             # wait for the program to finish
             p.communicate()

     def configure_logging():
         h = TTSHandler()
         root = logging.getLogger()
         root.addHandler(h)
         # the default formatter just returns the message
         root.setLevel(logging.DEBUG)

     def main():
         logging.info('Hello')
         logging.debug('Goodbye')

     if __name__ == '__main__':
         configure_logging()
         sys.exit(main())

When run, this script should say “Hello” and then “Goodbye” in a female
voice.

The above approach can, of course, be adapted to other TTS systems and
even other systems altogether which can process messages via external
programs run from a command line.


File: python.info,  Node: Buffering logging messages and outputting them conditionally,  Next: Sending logging messages to email with buffering,  Prev: Speaking logging messages,  Up: Livro de receitas do logging

9.9.28 Buffering logging messages and outputting them conditionally
-------------------------------------------------------------------

There might be situations where you want to log messages in a temporary
area and only output them if a certain condition occurs.  For example,
you may want to start logging debug events in a function, and if the
function completes without errors, you don’t want to clutter the log
with the collected debug information, but if there is an error, you want
all the debug information to be output as well as the error.

Here is an example which shows how you could do this using a decorator
for your functions where you want logging to behave this way.  It makes
use of the *note logging.handlers.MemoryHandler: 2ea3, which allows
buffering of logged events until some condition occurs, at which point
the buffered events are ‘flushed’ - passed to another handler (the
‘target’ handler) for processing.  By default, the ‘MemoryHandler’
flushed when its buffer gets filled up or an event whose level is
greater than or equal to a specified threshold is seen.  You can use
this recipe with a more specialised subclass of ‘MemoryHandler’ if you
want custom flushing behavior.

The example script has a simple function, ‘foo’, which just cycles
through all the logging levels, writing to ‘sys.stderr’ to say what
level it’s about to log at, and then actually logging a message at that
level.  You can pass a parameter to ‘foo’ which, if true, will log at
ERROR and CRITICAL levels - otherwise, it only logs at DEBUG, INFO and
WARNING levels.

The script just arranges to decorate ‘foo’ with a decorator which will
do the conditional logging that’s required.  The decorator takes a
logger as a parameter and attaches a memory handler for the duration of
the call to the decorated function.  The decorator can be additionally
parameterised using a target handler, a level at which flushing should
occur, and a capacity for the buffer (number of records buffered).
These default to a *note StreamHandler: 1238. which writes to
‘sys.stderr’, ‘logging.ERROR’ and ‘100’ respectively.

Here’s the script:

     import logging
     from logging.handlers import MemoryHandler
     import sys

     logger = logging.getLogger(__name__)
     logger.addHandler(logging.NullHandler())

     def log_if_errors(logger, target_handler=None, flush_level=None, capacity=None):
         if target_handler is None:
             target_handler = logging.StreamHandler()
         if flush_level is None:
             flush_level = logging.ERROR
         if capacity is None:
             capacity = 100
         handler = MemoryHandler(capacity, flushLevel=flush_level, target=target_handler)

         def decorator(fn):
             def wrapper(*args, **kwargs):
                 logger.addHandler(handler)
                 try:
                     return fn(*args, **kwargs)
                 except Exception:
                     logger.exception('call failed')
                     raise
                 finally:
                     super(MemoryHandler, handler).flush()
                     logger.removeHandler(handler)
             return wrapper

         return decorator

     def write_line(s):
         sys.stderr.write('%s\n' % s)

     def foo(fail=False):
         write_line('about to log at DEBUG ...')
         logger.debug('Actually logged at DEBUG')
         write_line('about to log at INFO ...')
         logger.info('Actually logged at INFO')
         write_line('about to log at WARNING ...')
         logger.warning('Actually logged at WARNING')
         if fail:
             write_line('about to log at ERROR ...')
             logger.error('Actually logged at ERROR')
             write_line('about to log at CRITICAL ...')
             logger.critical('Actually logged at CRITICAL')
         return fail

     decorated_foo = log_if_errors(logger)(foo)

     if __name__ == '__main__':
         logger.setLevel(logging.DEBUG)
         write_line('Calling undecorated foo with False')
         assert not foo(False)
         write_line('Calling undecorated foo with True')
         assert foo(True)
         write_line('Calling decorated foo with False')
         assert not decorated_foo(False)
         write_line('Calling decorated foo with True')
         assert decorated_foo(True)

When this script is run, the following output should be observed:

     Calling undecorated foo with False
     about to log at DEBUG ...
     about to log at INFO ...
     about to log at WARNING ...
     Calling undecorated foo with True
     about to log at DEBUG ...
     about to log at INFO ...
     about to log at WARNING ...
     about to log at ERROR ...
     about to log at CRITICAL ...
     Calling decorated foo with False
     about to log at DEBUG ...
     about to log at INFO ...
     about to log at WARNING ...
     Calling decorated foo with True
     about to log at DEBUG ...
     about to log at INFO ...
     about to log at WARNING ...
     about to log at ERROR ...
     Actually logged at DEBUG
     Actually logged at INFO
     Actually logged at WARNING
     Actually logged at ERROR
     about to log at CRITICAL ...
     Actually logged at CRITICAL

As you can see, actual logging output only occurs when an event is
logged whose severity is ERROR or greater, but in that case, any
previous events at lower severities are also logged.

You can of course use the conventional means of decoration:

     @log_if_errors(logger)
     def foo(fail=False):
         ...


File: python.info,  Node: Sending logging messages to email with buffering,  Next: Formatting times using UTC GMT via configuration,  Prev: Buffering logging messages and outputting them conditionally,  Up: Livro de receitas do logging

9.9.29 Sending logging messages to email, with buffering
--------------------------------------------------------

To illustrate how you can send log messages via email, so that a set
number of messages are sent per email, you can subclass *note
BufferingHandler: 2ef6.  In the following example, which you can adapt
to suit your specific needs, a simple test harness is provided which
allows you to run the script with command line arguments specifying what
you typically need to send things via SMTP. (Run the downloaded script
with the ‘-h’ argument to see the required and optional arguments.)

     import logging
     import logging.handlers
     import smtplib

     class BufferingSMTPHandler(logging.handlers.BufferingHandler):
         def __init__(self, mailhost, port, username, password, fromaddr, toaddrs,
                      subject, capacity):
             logging.handlers.BufferingHandler.__init__(self, capacity)
             self.mailhost = mailhost
             self.mailport = port
             self.username = username
             self.password = password
             self.fromaddr = fromaddr
             if isinstance(toaddrs, str):
                 toaddrs = [toaddrs]
             self.toaddrs = toaddrs
             self.subject = subject
             self.setFormatter(logging.Formatter("%(asctime)s %(levelname)-5s %(message)s"))

         def flush(self):
             if len(self.buffer) > 0:
                 try:
                     smtp = smtplib.SMTP(self.mailhost, self.mailport)
                     smtp.starttls()
                     smtp.login(self.username, self.password)
                     msg = "From: %s\r\nTo: %s\r\nSubject: %s\r\n\r\n" % (self.fromaddr, ','.join(self.toaddrs), self.subject)
                     for record in self.buffer:
                         s = self.format(record)
                         msg = msg + s + "\r\n"
                     smtp.sendmail(self.fromaddr, self.toaddrs, msg)
                     smtp.quit()
                 except Exception:
                     if logging.raiseExceptions:
                         raise
                 self.buffer = []

     if __name__ == '__main__':
         import argparse

         ap = argparse.ArgumentParser()
         aa = ap.add_argument
         aa('host', metavar='HOST', help='SMTP server')
         aa('--port', '-p', type=int, default=587, help='SMTP port')
         aa('user', metavar='USER', help='SMTP username')
         aa('password', metavar='PASSWORD', help='SMTP password')
         aa('to', metavar='TO', help='Addressee for emails')
         aa('sender', metavar='SENDER', help='Sender email address')
         aa('--subject', '-s',
            default='Test Logging email from Python logging module (buffering)',
            help='Subject of email')
         options = ap.parse_args()
         logger = logging.getLogger()
         logger.setLevel(logging.DEBUG)
         h = BufferingSMTPHandler(options.host, options.port, options.user,
                                  options.password, options.sender,
                                  options.to, options.subject, 10)
         logger.addHandler(h)
         for i in range(102):
             logger.info("Info index = %d", i)
         h.flush()
         h.close()

If you run this script and your SMTP server is correctly set up, you
should find that it sends eleven emails to the addressee you specify.
The first ten emails will each have ten log messages, and the eleventh
will have two messages.  That makes up 102 messages as specified in the
script.


File: python.info,  Node: Formatting times using UTC GMT via configuration,  Next: Using a context manager for selective logging,  Prev: Sending logging messages to email with buffering,  Up: Livro de receitas do logging

9.9.30 Formatting times using UTC (GMT) via configuration
---------------------------------------------------------

Sometimes you want to format times using UTC, which can be done using a
class such as ‘UTCFormatter’, shown below:

     import logging
     import time

     class UTCFormatter(logging.Formatter):
         converter = time.gmtime

and you can then use the ‘UTCFormatter’ in your code instead of *note
Formatter: 14df.  If you want to do that via configuration, you can use
the *note dictConfig(): 11ef. API with an approach illustrated by the
following complete example:

     import logging
     import logging.config
     import time

     class UTCFormatter(logging.Formatter):
         converter = time.gmtime

     LOGGING = {
         'version': 1,
         'disable_existing_loggers': False,
         'formatters': {
             'utc': {
                 '()': UTCFormatter,
                 'format': '%(asctime)s %(message)s',
             },
             'local': {
                 'format': '%(asctime)s %(message)s',
             }
         },
         'handlers': {
             'console1': {
                 'class': 'logging.StreamHandler',
                 'formatter': 'utc',
             },
             'console2': {
                 'class': 'logging.StreamHandler',
                 'formatter': 'local',
             },
         },
         'root': {
             'handlers': ['console1', 'console2'],
        }
     }

     if __name__ == '__main__':
         logging.config.dictConfig(LOGGING)
         logging.warning('The local time is %s', time.asctime())

When this script is run, it should print something like:

     2015-10-17 12:53:29,501 The local time is Sat Oct 17 13:53:29 2015
     2015-10-17 13:53:29,501 The local time is Sat Oct 17 13:53:29 2015

showing how the time is formatted both as local time and UTC, one for
each handler.


File: python.info,  Node: Using a context manager for selective logging,  Next: A CLI application starter template,  Prev: Formatting times using UTC GMT via configuration,  Up: Livro de receitas do logging

9.9.31 Using a context manager for selective logging
----------------------------------------------------

There are times when it would be useful to temporarily change the
logging configuration and revert it back after doing something.  For
this, a context manager is the most obvious way of saving and restoring
the logging context.  Here is a simple example of such a context
manager, which allows you to optionally change the logging level and add
a logging handler purely in the scope of the context manager:

     import logging
     import sys

     class LoggingContext:
         def __init__(self, logger, level=None, handler=None, close=True):
             self.logger = logger
             self.level = level
             self.handler = handler
             self.close = close

         def __enter__(self):
             if self.level is not None:
                 self.old_level = self.logger.level
                 self.logger.setLevel(self.level)
             if self.handler:
                 self.logger.addHandler(self.handler)

         def __exit__(self, et, ev, tb):
             if self.level is not None:
                 self.logger.setLevel(self.old_level)
             if self.handler:
                 self.logger.removeHandler(self.handler)
             if self.handler and self.close:
                 self.handler.close()
             # implicit return of None => don't swallow exceptions

If you specify a level value, the logger’s level is set to that value in
the scope of the with block covered by the context manager.  If you
specify a handler, it is added to the logger on entry to the block and
removed on exit from the block.  You can also ask the manager to close
the handler for you on block exit - you could do this if you don’t need
the handler any more.

To illustrate how it works, we can add the following block of code to
the above:

     if __name__ == '__main__':
         logger = logging.getLogger('foo')
         logger.addHandler(logging.StreamHandler())
         logger.setLevel(logging.INFO)
         logger.info('1. This should appear just once on stderr.')
         logger.debug('2. This should not appear.')
         with LoggingContext(logger, level=logging.DEBUG):
             logger.debug('3. This should appear once on stderr.')
         logger.debug('4. This should not appear.')
         h = logging.StreamHandler(sys.stdout)
         with LoggingContext(logger, level=logging.DEBUG, handler=h, close=True):
             logger.debug('5. This should appear twice - once on stderr and once on stdout.')
         logger.info('6. This should appear just once on stderr.')
         logger.debug('7. This should not appear.')

We initially set the logger’s level to ‘INFO’, so message #1 appears and
message #2 doesn’t.  We then change the level to ‘DEBUG’ temporarily in
the following ‘with’ block, and so message #3 appears.  After the block
exits, the logger’s level is restored to ‘INFO’ and so message #4
doesn’t appear.  In the next ‘with’ block, we set the level to ‘DEBUG’
again but also add a handler writing to ‘sys.stdout’.  Thus, message #5
appears twice on the console (once via ‘stderr’ and once via ‘stdout’).
After the ‘with’ statement’s completion, the status is as it was before
so message #6 appears (like message #1) whereas message #7 doesn’t (just
like message #2).

If we run the resulting script, the result is as follows:

     $ python logctx.py
     1. This should appear just once on stderr.
     3. This should appear once on stderr.
     5. This should appear twice - once on stderr and once on stdout.
     5. This should appear twice - once on stderr and once on stdout.
     6. This should appear just once on stderr.

If we run it again, but pipe ‘stderr’ to ‘/dev/null’, we see the
following, which is the only message written to ‘stdout’:

     $ python logctx.py 2>/dev/null
     5. This should appear twice - once on stderr and once on stdout.

Once again, but piping ‘stdout’ to ‘/dev/null’, we get:

     $ python logctx.py >/dev/null
     1. This should appear just once on stderr.
     3. This should appear once on stderr.
     5. This should appear twice - once on stderr and once on stdout.
     6. This should appear just once on stderr.

In this case, the message #5 printed to ‘stdout’ doesn’t appear, as
expected.

Of course, the approach described here can be generalised, for example
to attach logging filters temporarily.  Note that the above code works
in Python 2 as well as Python 3.


File: python.info,  Node: A CLI application starter template,  Next: A Qt GUI for logging,  Prev: Using a context manager for selective logging,  Up: Livro de receitas do logging

9.9.32 A CLI application starter template
-----------------------------------------

Here’s an example which shows how you can:

   * Use a logging level based on command-line arguments

   * Dispatch to multiple subcommands in separate files, all logging at
     the same level in a consistent way

   * Make use of simple, minimal configuration

Suppose we have a command-line application whose job is to stop, start
or restart some services.  This could be organised for the purposes of
illustration as a file ‘app.py’ that is the main script for the
application, with individual commands implemented in ‘start.py’,
‘stop.py’ and ‘restart.py’.  Suppose further that we want to control the
verbosity of the application via a command-line argument, defaulting to
‘logging.INFO’.  Here’s one way that ‘app.py’ could be written:

     import argparse
     import importlib
     import logging
     import os
     import sys

     def main(args=None):
         scriptname = os.path.basename(__file__)
         parser = argparse.ArgumentParser(scriptname)
         levels = ('DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL')
         parser.add_argument('--log-level', default='INFO', choices=levels)
         subparsers = parser.add_subparsers(dest='command',
                                            help='Available commands:')
         start_cmd = subparsers.add_parser('start', help='Start a service')
         start_cmd.add_argument('name', metavar='NAME',
                                help='Name of service to start')
         stop_cmd = subparsers.add_parser('stop',
                                          help='Stop one or more services')
         stop_cmd.add_argument('names', metavar='NAME', nargs='+',
                               help='Name of service to stop')
         restart_cmd = subparsers.add_parser('restart',
                                             help='Restart one or more services')
         restart_cmd.add_argument('names', metavar='NAME', nargs='+',
                                  help='Name of service to restart')
         options = parser.parse_args()
         # the code to dispatch commands could all be in this file. For the purposes
         # of illustration only, we implement each command in a separate module.
         try:
             mod = importlib.import_module(options.command)
             cmd = getattr(mod, 'command')
         except (ImportError, AttributeError):
             print('Unable to find the code for command \'%s\'' % options.command)
             return 1
         # Could get fancy here and load configuration from file or dictionary
         logging.basicConfig(level=options.log_level,
                             format='%(levelname)s %(name)s %(message)s')
         cmd(options)

     if __name__ == '__main__':
         sys.exit(main())

And the ‘start’, ‘stop’ and ‘restart’ commands can be implemented in
separate modules, like so for starting:

     # start.py
     import logging

     logger = logging.getLogger(__name__)

     def command(options):
         logger.debug('About to start %s', options.name)
         # actually do the command processing here ...
         logger.info('Started the \'%s\' service.', options.name)

and thus for stopping:

     # stop.py
     import logging

     logger = logging.getLogger(__name__)

     def command(options):
         n = len(options.names)
         if n == 1:
             plural = ''
             services = '\'%s\'' % options.names[0]
         else:
             plural = 's'
             services = ', '.join('\'%s\'' % name for name in options.names)
             i = services.rfind(', ')
             services = services[:i] + ' and ' + services[i + 2:]
         logger.debug('About to stop %s', services)
         # actually do the command processing here ...
         logger.info('Stopped the %s service%s.', services, plural)

and similarly for restarting:

     # restart.py
     import logging

     logger = logging.getLogger(__name__)

     def command(options):
         n = len(options.names)
         if n == 1:
             plural = ''
             services = '\'%s\'' % options.names[0]
         else:
             plural = 's'
             services = ', '.join('\'%s\'' % name for name in options.names)
             i = services.rfind(', ')
             services = services[:i] + ' and ' + services[i + 2:]
         logger.debug('About to restart %s', services)
         # actually do the command processing here ...
         logger.info('Restarted the %s service%s.', services, plural)

If we run this application with the default log level, we get output
like this:

     $ python app.py start foo
     INFO start Started the 'foo' service.

     $ python app.py stop foo bar
     INFO stop Stopped the 'foo' and 'bar' services.

     $ python app.py restart foo bar baz
     INFO restart Restarted the 'foo', 'bar' and 'baz' services.

The first word is the logging level, and the second word is the module
or package name of the place where the event was logged.

If we change the logging level, then we can change the information sent
to the log.  For example, if we want more information:

     $ python app.py --log-level DEBUG start foo
     DEBUG start About to start foo
     INFO start Started the 'foo' service.

     $ python app.py --log-level DEBUG stop foo bar
     DEBUG stop About to stop 'foo' and 'bar'
     INFO stop Stopped the 'foo' and 'bar' services.

     $ python app.py --log-level DEBUG restart foo bar baz
     DEBUG restart About to restart 'foo', 'bar' and 'baz'
     INFO restart Restarted the 'foo', 'bar' and 'baz' services.

And if we want less:

     $ python app.py --log-level WARNING start foo
     $ python app.py --log-level WARNING stop foo bar
     $ python app.py --log-level WARNING restart foo bar baz

In this case, the commands don’t print anything to the console, since
nothing at ‘WARNING’ level or above is logged by them.


File: python.info,  Node: A Qt GUI for logging,  Next: Logging to syslog with RFC5424 support,  Prev: A CLI application starter template,  Up: Livro de receitas do logging

9.9.33 A Qt GUI for logging
---------------------------

A question that comes up from time to time is about how to log to a GUI
application.  The Qt(1) framework is a popular cross-platform UI
framework with Python bindings using PySide2(2) or PyQt5(3) libraries.

The following example shows how to log to a Qt GUI. This introduces a
simple ‘QtHandler’ class which takes a callable, which should be a slot
in the main thread that does GUI updates.  A worker thread is also
created to show how you can log to the GUI from both the UI itself (via
a button for manual logging) as well as a worker thread doing work in
the background (here, just logging messages at random levels with random
short delays in between).

The worker thread is implemented using Qt’s ‘QThread’ class rather than
the *note threading: ed. module, as there are circumstances where one
has to use ‘QThread’, which offers better integration with other ‘Qt’
components.

The code should work with recent releases of any of ‘PySide6’, ‘PyQt6’,
‘PySide2’ or ‘PyQt5’.  You should be able to adapt the approach to
earlier versions of Qt.  Please refer to the comments in the code
snippet for more detailed information.

     import datetime
     import logging
     import random
     import sys
     import time

     # Deal with minor differences between different Qt packages
     try:
         from PySide6 import QtCore, QtGui, QtWidgets
         Signal = QtCore.Signal
         Slot = QtCore.Slot
     except ImportError:
         try:
             from PyQt6 import QtCore, QtGui, QtWidgets
             Signal = QtCore.pyqtSignal
             Slot = QtCore.pyqtSlot
         except ImportError:
             try:
                 from PySide2 import QtCore, QtGui, QtWidgets
                 Signal = QtCore.Signal
                 Slot = QtCore.Slot
             except ImportError:
                 from PyQt5 import QtCore, QtGui, QtWidgets
                 Signal = QtCore.pyqtSignal
                 Slot = QtCore.pyqtSlot

     logger = logging.getLogger(__name__)


     #
     # Signals need to be contained in a QObject or subclass in order to be correctly
     # initialized.
     #
     class Signaller(QtCore.QObject):
         signal = Signal(str, logging.LogRecord)

     #
     # Output to a Qt GUI is only supposed to happen on the main thread. So, this
     # handler is designed to take a slot function which is set up to run in the main
     # thread. In this example, the function takes a string argument which is a
     # formatted log message, and the log record which generated it. The formatted
     # string is just a convenience - you could format a string for output any way
     # you like in the slot function itself.
     #
     # You specify the slot function to do whatever GUI updates you want. The handler
     # doesn't know or care about specific UI elements.
     #
     class QtHandler(logging.Handler):
         def __init__(self, slotfunc, *args, **kwargs):
             super().__init__(*args, **kwargs)
             self.signaller = Signaller()
             self.signaller.signal.connect(slotfunc)

         def emit(self, record):
             s = self.format(record)
             self.signaller.signal.emit(s, record)

     #
     # This example uses QThreads, which means that the threads at the Python level
     # are named something like "Dummy-1". The function below gets the Qt name of the
     # current thread.
     #
     def ctname():
         return QtCore.QThread.currentThread().objectName()


     #
     # Used to generate random levels for logging.
     #
     LEVELS = (logging.DEBUG, logging.INFO, logging.WARNING, logging.ERROR,
               logging.CRITICAL)

     #
     # This worker class represents work that is done in a thread separate to the
     # main thread. The way the thread is kicked off to do work is via a button press
     # that connects to a slot in the worker.
     #
     # Because the default threadName value in the LogRecord isn't much use, we add
     # a qThreadName which contains the QThread name as computed above, and pass that
     # value in an "extra" dictionary which is used to update the LogRecord with the
     # QThread name.
     #
     # This example worker just outputs messages sequentially, interspersed with
     # random delays of the order of a few seconds.
     #
     class Worker(QtCore.QObject):
         @Slot()
         def start(self):
             extra = {'qThreadName': ctname() }
             logger.debug('Started work', extra=extra)
             i = 1
             # Let the thread run until interrupted. This allows reasonably clean
             # thread termination.
             while not QtCore.QThread.currentThread().isInterruptionRequested():
                 delay = 0.5 + random.random() * 2
                 time.sleep(delay)
                 try:
                     if random.random() < 0.1:
                         raise ValueError('Exception raised: %d' % i)
                     else:
                         level = random.choice(LEVELS)
                         logger.log(level, 'Message after delay of %3.1f: %d', delay, i, extra=extra)
                 except ValueError as e:
                     logger.exception('Failed: %s', e, extra=extra)
                 i += 1

     #
     # Implement a simple UI for this cookbook example. This contains:
     #
     # * A read-only text edit window which holds formatted log messages
     # * A button to start work and log stuff in a separate thread
     # * A button to log something from the main thread
     # * A button to clear the log window
     #
     class Window(QtWidgets.QWidget):

         COLORS = {
             logging.DEBUG: 'black',
             logging.INFO: 'blue',
             logging.WARNING: 'orange',
             logging.ERROR: 'red',
             logging.CRITICAL: 'purple',
         }

         def __init__(self, app):
             super().__init__()
             self.app = app
             self.textedit = te = QtWidgets.QPlainTextEdit(self)
             # Set whatever the default monospace font is for the platform
             f = QtGui.QFont('nosuchfont')
             if hasattr(f, 'Monospace'):
                 f.setStyleHint(f.Monospace)
             else:
                 f.setStyleHint(f.StyleHint.Monospace)  # for Qt6
             te.setFont(f)
             te.setReadOnly(True)
             PB = QtWidgets.QPushButton
             self.work_button = PB('Start background work', self)
             self.log_button = PB('Log a message at a random level', self)
             self.clear_button = PB('Clear log window', self)
             self.handler = h = QtHandler(self.update_status)
             # Remember to use qThreadName rather than threadName in the format string.
             fs = '%(asctime)s %(qThreadName)-12s %(levelname)-8s %(message)s'
             formatter = logging.Formatter(fs)
             h.setFormatter(formatter)
             logger.addHandler(h)
             # Set up to terminate the QThread when we exit
             app.aboutToQuit.connect(self.force_quit)

             # Lay out all the widgets
             layout = QtWidgets.QVBoxLayout(self)
             layout.addWidget(te)
             layout.addWidget(self.work_button)
             layout.addWidget(self.log_button)
             layout.addWidget(self.clear_button)
             self.setFixedSize(900, 400)

             # Connect the non-worker slots and signals
             self.log_button.clicked.connect(self.manual_update)
             self.clear_button.clicked.connect(self.clear_display)

             # Start a new worker thread and connect the slots for the worker
             self.start_thread()
             self.work_button.clicked.connect(self.worker.start)
             # Once started, the button should be disabled
             self.work_button.clicked.connect(lambda : self.work_button.setEnabled(False))

         def start_thread(self):
             self.worker = Worker()
             self.worker_thread = QtCore.QThread()
             self.worker.setObjectName('Worker')
             self.worker_thread.setObjectName('WorkerThread')  # for qThreadName
             self.worker.moveToThread(self.worker_thread)
             # This will start an event loop in the worker thread
             self.worker_thread.start()

         def kill_thread(self):
             # Just tell the worker to stop, then tell it to quit and wait for that
             # to happen
             self.worker_thread.requestInterruption()
             if self.worker_thread.isRunning():
                 self.worker_thread.quit()
                 self.worker_thread.wait()
             else:
                 print('worker has already exited.')

         def force_quit(self):
             # For use when the window is closed
             if self.worker_thread.isRunning():
                 self.kill_thread()

         # The functions below update the UI and run in the main thread because
         # that's where the slots are set up

         @Slot(str, logging.LogRecord)
         def update_status(self, status, record):
             color = self.COLORS.get(record.levelno, 'black')
             s = '<pre><font color="%s">%s</font></pre>' % (color, status)
             self.textedit.appendHtml(s)

         @Slot()
         def manual_update(self):
             # This function uses the formatted message passed in, but also uses
             # information from the record to format the message in an appropriate
             # color according to its severity (level).
             level = random.choice(LEVELS)
             extra = {'qThreadName': ctname() }
             logger.log(level, 'Manually logged!', extra=extra)

         @Slot()
         def clear_display(self):
             self.textedit.clear()


     def main():
         QtCore.QThread.currentThread().setObjectName('MainThread')
         logging.getLogger().setLevel(logging.DEBUG)
         app = QtWidgets.QApplication(sys.argv)
         example = Window(app)
         example.show()
         if hasattr(app, 'exec'):
             rc = app.exec()
         else:
             rc = app.exec_()
         sys.exit(rc)

     if __name__=='__main__':
         main()

   ---------- Footnotes ----------

   (1) https://www.qt.io/

   (2) https://pypi.org/project/PySide2/

   (3) https://pypi.org/project/PyQt5/


File: python.info,  Node: Logging to syslog with RFC5424 support,  Next: How to treat a logger like an output stream,  Prev: A Qt GUI for logging,  Up: Livro de receitas do logging

9.9.34 Logging to syslog with RFC5424 support
---------------------------------------------

Although RFC 5424(1) dates from 2009, most syslog servers are configured
by default to use the older RFC 3164(2), which hails from 2001.  When
‘logging’ was added to Python in 2003, it supported the earlier (and
only existing) protocol at the time.  Since RFC5424 came out, as there
has not been widespread deployment of it in syslog servers, the *note
SysLogHandler: 65c. functionality has not been updated.

RFC 5424 contains some useful features such as support for structured
data, and if you need to be able to log to a syslog server with support
for it, you can do so with a subclassed handler which looks something
like this:

     import datetime
     import logging.handlers
     import re
     import socket
     import time

     class SysLogHandler5424(logging.handlers.SysLogHandler):

         tz_offset = re.compile(r'([+-]\d{2})(\d{2})$')
         escaped = re.compile(r'([\]"\\])')

         def __init__(self, *args, **kwargs):
             self.msgid = kwargs.pop('msgid', None)
             self.appname = kwargs.pop('appname', None)
             super().__init__(*args, **kwargs)

         def format(self, record):
             version = 1
             asctime = datetime.datetime.fromtimestamp(record.created).isoformat()
             m = self.tz_offset.match(time.strftime('%z'))
             has_offset = False
             if m and time.timezone:
                 hrs, mins = m.groups()
                 if int(hrs) or int(mins):
                     has_offset = True
             if not has_offset:
                 asctime += 'Z'
             else:
                 asctime += f'{hrs}:{mins}'
             try:
                 hostname = socket.gethostname()
             except Exception:
                 hostname = '-'
             appname = self.appname or '-'
             procid = record.process
             msgid = '-'
             msg = super().format(record)
             sdata = '-'
             if hasattr(record, 'structured_data'):
                 sd = record.structured_data
                 # This should be a dict where the keys are SD-ID and the value is a
                 # dict mapping PARAM-NAME to PARAM-VALUE (refer to the RFC for what these
                 # mean)
                 # There's no error checking here - it's purely for illustration, and you
                 # can adapt this code for use in production environments
                 parts = []

                 def replacer(m):
                     g = m.groups()
                     return '\\' + g[0]

                 for sdid, dv in sd.items():
                     part = f'[{sdid}'
                     for k, v in dv.items():
                         s = str(v)
                         s = self.escaped.sub(replacer, s)
                         part += f' {k}="{s}"'
                     part += ']'
                     parts.append(part)
                 sdata = ''.join(parts)
             return f'{version} {asctime} {hostname} {appname} {procid} {msgid} {sdata} {msg}'

You’ll need to be familiar with RFC 5424 to fully understand the above
code, and it may be that you have slightly different needs (e.g.  for
how you pass structural data to the log).  Nevertheless, the above
should be adaptable to your speciric needs.  With the above handler,
you’d pass structured data using something like this:

     sd = {
         'foo@12345': {'bar': 'baz', 'baz': 'bozz', 'fizz': r'buzz'},
         'foo@54321': {'rab': 'baz', 'zab': 'bozz', 'zzif': r'buzz'}
     }
     extra = {'structured_data': sd}
     i = 1
     logger.debug('Message %d', i, extra=extra)

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc5424.html

   (2) https://datatracker.ietf.org/doc/html/rfc3164.html


File: python.info,  Node: How to treat a logger like an output stream,  Next: How to uniformly handle newlines in logging output,  Prev: Logging to syslog with RFC5424 support,  Up: Livro de receitas do logging

9.9.35 How to treat a logger like an output stream
--------------------------------------------------

Sometimes, you need to interface to a third-party API which expects a
file-like object to write to, but you want to direct the API’s output to
a logger.  You can do this using a class which wraps a logger with a
file-like API. Here’s a short script illustrating such a class:

     import logging

     class LoggerWriter:
         def __init__(self, logger, level):
             self.logger = logger
             self.level = level

         def write(self, message):
             if message != '\n':  # avoid printing bare newlines, if you like
                 self.logger.log(self.level, message)

         def flush(self):
             # doesn't actually do anything, but might be expected of a file-like
             # object - so optional depending on your situation
             pass

         def close(self):
             # doesn't actually do anything, but might be expected of a file-like
             # object - so optional depending on your situation. You might want
             # to set a flag so that later calls to write raise an exception
             pass

     def main():
         logging.basicConfig(level=logging.DEBUG)
         logger = logging.getLogger('demo')
         info_fp = LoggerWriter(logger, logging.INFO)
         debug_fp = LoggerWriter(logger, logging.DEBUG)
         print('An INFO message', file=info_fp)
         print('A DEBUG message', file=debug_fp)

     if __name__ == "__main__":
         main()

When this script is run, it prints

     INFO:demo:An INFO message
     DEBUG:demo:A DEBUG message

You could also use ‘LoggerWriter’ to redirect ‘sys.stdout’ and
‘sys.stderr’ by doing something like this:

     import sys

     sys.stdout = LoggerWriter(logger, logging.INFO)
     sys.stderr = LoggerWriter(logger, logging.WARNING)

You should do this 'after' configuring logging for your needs.  In the
above example, the *note basicConfig(): a08. call does this (using the
‘sys.stderr’ value 'before' it is overwritten by a ‘LoggerWriter’
instance).  Then, you’d get this kind of result:

     >>> print('Foo')
     INFO:demo:Foo
     >>> print('Bar', file=sys.stderr)
     WARNING:demo:Bar
     >>>

Of course, the examples above show output according to the format used
by *note basicConfig(): a08, but you can use a different formatter when
you configure logging.

Note that with the above scheme, you are somewhat at the mercy of
buffering and the sequence of write calls which you are intercepting.
For example, with the definition of ‘LoggerWriter’ above, if you have
the snippet

     sys.stderr = LoggerWriter(logger, logging.WARNING)
     1 / 0

then running the script results in

     WARNING:demo:Traceback (most recent call last):

     WARNING:demo:  File "/home/runner/cookbook-loggerwriter/test.py", line 53, in <module>

     WARNING:demo:
     WARNING:demo:main()
     WARNING:demo:  File "/home/runner/cookbook-loggerwriter/test.py", line 49, in main

     WARNING:demo:
     WARNING:demo:1 / 0
     WARNING:demo:ZeroDivisionError
     WARNING:demo::
     WARNING:demo:division by zero

As you can see, this output isn’t ideal.  That’s because the underlying
code which writes to ‘sys.stderr’ makes multiple writes, each of which
results in a separate logged line (for example, the last three lines
above).  To get around this problem, you need to buffer things and only
output log lines when newlines are seen.  Let’s use a slightly better
implementation of ‘LoggerWriter’:

     class BufferingLoggerWriter(LoggerWriter):
         def __init__(self, logger, level):
             super().__init__(logger, level)
             self.buffer = ''

         def write(self, message):
             if '\n' not in message:
                 self.buffer += message
             else:
                 parts = message.split('\n')
                 if self.buffer:
                     s = self.buffer + parts.pop(0)
                     self.logger.log(self.level, s)
                 self.buffer = parts.pop()
                 for part in parts:
                     self.logger.log(self.level, part)

This just buffers up stuff until a newline is seen, and then logs
complete lines.  With this approach, you get better output:

     WARNING:demo:Traceback (most recent call last):
     WARNING:demo:  File "/home/runner/cookbook-loggerwriter/main.py", line 55, in <module>
     WARNING:demo:    main()
     WARNING:demo:  File "/home/runner/cookbook-loggerwriter/main.py", line 52, in main
     WARNING:demo:    1/0
     WARNING:demo:ZeroDivisionError: division by zero


File: python.info,  Node: How to uniformly handle newlines in logging output,  Next: Patterns to avoid,  Prev: How to treat a logger like an output stream,  Up: Livro de receitas do logging

9.9.36 How to uniformly handle newlines in logging output
---------------------------------------------------------

Usually, messages that are logged (say to console or file) consist of a
single line of text.  However, sometimes there is a need to handle
messages with multiple lines - whether because a logging format string
contains newlines, or logged data contains newlines.  If you want to
handle such messages uniformly, so that each line in the logged message
appears uniformly formatted as if it was logged separately, you can do
this using a handler mixin, as in the following snippet:

     # Assume this is in a module mymixins.py
     import copy

     class MultilineMixin:
         def emit(self, record):
             s = record.getMessage()
             if '\n' not in s:
                 super().emit(record)
             else:
                 lines = s.splitlines()
                 rec = copy.copy(record)
                 rec.args = None
                 for line in lines:
                     rec.msg = line
                     super().emit(rec)

You can use the mixin as in the following script:

     import logging

     from mymixins import MultilineMixin

     logger = logging.getLogger(__name__)

     class StreamHandler(MultilineMixin, logging.StreamHandler):
         pass

     if __name__ == '__main__':
         logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)-9s %(message)s',
                             handlers = [StreamHandler()])
         logger.debug('Single line')
         logger.debug('Multiple lines:\nfool me once ...')
         logger.debug('Another single line')
         logger.debug('Multiple lines:\n%s', 'fool me ...\ncan\'t get fooled again')

The script, when run, prints something like:

     2025-07-02 13:54:47,234 DEBUG     Single line
     2025-07-02 13:54:47,234 DEBUG     Multiple lines:
     2025-07-02 13:54:47,234 DEBUG     fool me once ...
     2025-07-02 13:54:47,234 DEBUG     Another single line
     2025-07-02 13:54:47,234 DEBUG     Multiple lines:
     2025-07-02 13:54:47,234 DEBUG     fool me ...
     2025-07-02 13:54:47,234 DEBUG     can't get fooled again

If, on the other hand, you are concerned about log injection(1), you can
use a formatter which escapes newlines, as per the following example:

     import logging

     logger = logging.getLogger(__name__)

     class EscapingFormatter(logging.Formatter):
         def format(self, record):
             s = super().format(record)
             return s.replace('\n', r'\n')

     if __name__ == '__main__':
         h = logging.StreamHandler()
         h.setFormatter(EscapingFormatter('%(asctime)s %(levelname)-9s %(message)s'))
         logging.basicConfig(level=logging.DEBUG, handlers = [h])
         logger.debug('Single line')
         logger.debug('Multiple lines:\nfool me once ...')
         logger.debug('Another single line')
         logger.debug('Multiple lines:\n%s', 'fool me ...\ncan\'t get fooled again')

You can, of course, use whatever escaping scheme makes the most sense
for you.  The script, when run, should produce output like this:

     2025-07-09 06:47:33,783 DEBUG     Single line
     2025-07-09 06:47:33,783 DEBUG     Multiple lines:\nfool me once ...
     2025-07-09 06:47:33,783 DEBUG     Another single line
     2025-07-09 06:47:33,783 DEBUG     Multiple lines:\nfool me ...\ncan't get fooled again

Escaping behaviour can’t be the stdlib default , as it would break
backwards compatibility.

   ---------- Footnotes ----------

   (1) https://owasp.org/www-community/attacks/Log_Injection


File: python.info,  Node: Patterns to avoid,  Next: Outros recursos<3>,  Prev: How to uniformly handle newlines in logging output,  Up: Livro de receitas do logging

9.9.37 Patterns to avoid
------------------------

Although the preceding sections have described ways of doing things you
might need to do or deal with, it is worth mentioning some usage
patterns which are 'unhelpful', and which should therefore be avoided in
most cases.  The following sections are in no particular order.

* Menu:

* Opening the same log file multiple times::
* Using loggers as attributes in a class or passing them as parameters::
* Adding handlers other than NullHandler to a logger in a library::
* Creating a lot of loggers::


File: python.info,  Node: Opening the same log file multiple times,  Next: Using loggers as attributes in a class or passing them as parameters,  Up: Patterns to avoid

9.9.37.1 Opening the same log file multiple times
.................................................

On Windows, you will generally not be able to open the same file
multiple times as this will lead to a “file is in use by another
process” error.  However, on POSIX platforms you’ll not get any errors
if you open the same file multiple times.  This could be done
accidentally, for example by:

   * Adding a file handler more than once which references the same file
     (e.g.  by a copy/paste/forget-to-change error).

   * Opening two files that look different, as they have different
     names, but are the same because one is a symbolic link to the
     other.

   * Forking a process, following which both parent and child have a
     reference to the same file.  This might be through use of the *note
     multiprocessing: 94. module, for example.

Opening a file multiple times might 'appear' to work most of the time,
but can lead to a number of problems in practice:

   * Logging output can be garbled because multiple threads or processes
     try to write to the same file.  Although logging guards against
     concurrent use of the same handler instance by multiple threads,
     there is no such protection if concurrent writes are attempted by
     two different threads using two different handler instances which
     happen to point to the same file.

   * An attempt to delete a file (e.g.  during file rotation) silently
     fails, because there is another reference pointing to it.  This can
     lead to confusion and wasted debugging time - log entries end up in
     unexpected places, or are lost altogether.  Or a file that was
     supposed to be moved remains in place, and grows in size
     unexpectedly despite size-based rotation being supposedly in place.

Use the techniques outlined in *note Logging to a single file from
multiple processes: 53cb. to circumvent such issues.


File: python.info,  Node: Using loggers as attributes in a class or passing them as parameters,  Next: Adding handlers other than NullHandler to a logger in a library,  Prev: Opening the same log file multiple times,  Up: Patterns to avoid

9.9.37.2 Using loggers as attributes in a class or passing them as parameters
.............................................................................

While there might be unusual cases where you’ll need to do this, in
general there is no point because loggers are singletons.  Code can
always access a given logger instance by name using
‘logging.getLogger(name)’, so passing instances around and holding them
as instance attributes is pointless.  Note that in other languages such
as Java and C#, loggers are often static class attributes.  However,
this pattern doesn’t make sense in Python, where the module (and not the
class) is the unit of software decomposition.


File: python.info,  Node: Adding handlers other than NullHandler to a logger in a library,  Next: Creating a lot of loggers,  Prev: Using loggers as attributes in a class or passing them as parameters,  Up: Patterns to avoid

9.9.37.3 Adding handlers other than ‘NullHandler’ to a logger in a library
..........................................................................

Configuring logging by adding handlers, formatters and filters is the
responsibility of the application developer, not the library developer.
If you are maintaining a library, ensure that you don’t add handlers to
any of your loggers other than a *note NullHandler: 12c6. instance.


File: python.info,  Node: Creating a lot of loggers,  Prev: Adding handlers other than NullHandler to a logger in a library,  Up: Patterns to avoid

9.9.37.4 Creating a lot of loggers
..................................

Loggers are singletons that are never freed during a script execution,
and so creating lots of loggers will use up memory which can’t then be
freed.  Rather than create a logger per e.g.  file processed or network
connection made, use the *note existing mechanisms: 2e77. for passing
contextual information into your logs and restrict the loggers created
to those describing areas within your application (generally modules,
but occasionally slightly more fine-grained than that).


File: python.info,  Node: Outros recursos<3>,  Prev: Patterns to avoid,  Up: Livro de receitas do logging

9.9.38 Outros recursos
----------------------

Ver também
..........

Módulo *note logging: 87.

     Referência da API para o módulo de logging.

Módulo *note logging.config: 88.

     API de configuração para o módulo logging.

Módulo *note logging.handlers: 89.

     Tratadores úteis incluídos no módulo logging.

*note Tutorial básico: 1235.

*note Tutorial avançado: 1236.


File: python.info,  Node: Expressões Regulares,  Next: Programação de Soquetes,  Prev: Livro de receitas do logging,  Up: Python HOWTOs

9.10 Expressões Regulares
=========================


Autor: A.M. Kuchling <<amk@amk.ca>>

Resumo
......

Este documento é um tutorial introdutório sobre expressões regulares em
Python com o módulo *note re: b9.  Ele provê uma introdução mais
tranquila que a seção correspondente à documentação do módulo.

* Menu:

* Introdução: Introdução<16>.
* Padrões simples::
* Usando expressões regulares::
* Mais poder dos padrões::
* Modificando strings::
* Problemas comuns::
* Comentários: Comentários<2>.


File: python.info,  Node: Introdução<16>,  Next: Padrões simples,  Up: Expressões Regulares

9.10.1 Introdução
-----------------

Expressões regulares (chamadas REs, ou regexes ou padrões regex) são
essencialmente uma mini linguagem de programação altamente especializada
incluída dentro do Python e disponível através do módulo *note re: b9.
Usando esta pequena linguagem, você especifica as regras para o conjunto
de strings possíveis que você quer corresponder; esse conjunto pode
conter sentenças em português, endereços de e-mail, comandos TeX ou
qualquer coisa que você queira.  Você poderá então perguntar coisas como
“Essa string se enquadra dentro do padrão?” ou “Existe alguma parte da
string que se enquadra nesse padrão?”.  Você também pode usar as REs
para modificar uma string ou dividi-la de diversas formas.

Os padrões das expressões regulares são compilados em uma série de
bytecodes que são então executadas por um mecanismo de correspondência
escrito em C. Para usos avançados, talvez seja necessário prestar
atenção em como o mecanismo irá executar uma dada RE, e escrever a RE de
forma que os bytecodes executem de forma mais rápida.  Otimização é um
tema que não será visto neste documento, porque ele requer que você
tenha um bom entendimento dos mecanismos de combinação internos.

A linguagem de expressão regular é relativamente pequena e restrita, por
isso nem todas as tarefas de processamento de strings possíveis podem
ser feitas usando expressões regulares.  Existem também tarefas que
podem ser feitas com expressões regulares, mas as expressões acabam por
se tornarem muito complicadas.  Nestes casos, pode ser melhor para você
escrever um código Python para fazer o processamento; embora um código
Python seja mais lento do que uma expressão regular elaborada, ele
provavelmente será mais compreensível.


File: python.info,  Node: Padrões simples,  Next: Usando expressões regulares,  Prev: Introdução<16>,  Up: Expressões Regulares

9.10.2 Padrões simples
----------------------

Vamos começar por aprender sobre as expressões regulares mais simples
possíveis.  Como as expressões regulares são usadas para operar em
strings, vamos começar com a tarefa mais comum: correspondência de
caracteres.

Para uma explicação detalhada da ciência da computação referente a
expressões regulares (autômatos finitos determinísticos e não
determinístico), você pode consultara praticamente qualquer livro sobre
a escrita de compiladores.

* Menu:

* Correspondendo caracteres::
* Repetindo coisas::


File: python.info,  Node: Correspondendo caracteres,  Next: Repetindo coisas,  Up: Padrões simples

9.10.2.1 Correspondendo caracteres
..................................

A maioria das letras e caracteres simplesmente irão corresponder entre
si.  Por exemplo, a expressão regular ‘teste’ irá combinar totalmente
com a string ‘teste’.  (Você pode habilitar o modo de maiúsculas e
minúsculas que faria a RE corresponder com ‘Test’ ou ‘TEST’ também;
veremos mais sobre isso mais adiante.)

Há exceções a essa regra, alguns caracteres são metacaracteres
especiais, e não se correspondem.  Em vez disso, eles sinalizam que
alguma coisa fora do normal deve ser correspondida, ou eles afetam
outras partes da RE, repetindo-as ou alterando seus significados.
Grande parte deste documento é dedicada à discussão de vários
metacaracteres e o que eles fazem.

Aqui está a lista completa de metacaracteres; seus significados serão
discutidos ao longo deste documento.

     . ^ $ * + ? { } [ ] \ | ( )

O primeiro metacaractere que vamos estudar é o ‘[’ e o ‘]’.  Eles são
usados para especificar uma classe de caracteres, que é um conjunto de
caracteres que você deseja combinar.  Caracteres podem ser listados
individualmente ou um intervalo de caracteres pode ser indicado
fornecendo dois caracteres e separando-os por um ‘'-'’.  Por exemplo,
‘[abc]’ irá encontrar qualquer caractere ‘a’, ‘b’, ou ‘c’; isso é o
mesmo que escrever ‘[a-c]’, que usa um intervalo para expressar o mesmo
conjunto de caracteres.  Se você deseja encontrar apenas letras
minúsculas, sua RE seria ‘[a-z]’.

Metacaracteres (exceto ‘\’) não são ativos dentro de classes.  Por
exemplo, ‘[akm$]’ irá corresponder com qualquer dos caracteres ‘'a'’,
‘'k'’, ‘'m'’ ou ‘'$'’; ‘'$'’ é normalmente um metacaractere, mas dentro
de uma classe de caracteres ele perde sua natureza especial.

Você pode combinar os caracteres não listados na classe 'complementando'
o conjunto.  Isso é indicado pela inclusão de um ‘'^'’ como o primeiro
caractere da classe.  Por exemplo, ‘[^5]’ combinará a qualquer
caractere, exceto ‘'5'’.  Se o sinal de intercalação aparecer em outro
lugar da classe de caracteres, ele não terá um significado especial.
Por exemplo: ‘[5^]’ corresponderá a um ‘'5'’ ou a ‘'^'’.

Talvez o metacaractere mais importante seja a contrabarra, ‘\’.  Como as
strings literais em Python, a barra invertida pode ser seguida por
vários caracteres para sinalizar várias sequências especiais.  Ela
também é usada para 'escapar' todos os metacaracteres, e assim, você
poder combiná-los em padrões; por exemplo, se você precisa fazer
correspondência a um ‘[’ ou ‘\’, você pode precedê-los com uma barra
invertida para remover seu significado especial: ‘\[’ ou ‘\\’.

Algumas das sequências especiais que começam com ‘'\'’ representam
conjuntos de caracteres predefinidos que são frequentemente úteis, como
o conjunto de dígitos, o conjunto de letras ou o conjunto de qualquer
coisa que não seja espaço em branco.

Vejamos um exemplo: ‘\w’ corresponde a qualquer caractere alfanumérico.
Se o padrão regex for expresso em bytes, isso é equivalente à classe
‘[a-zA-Z0-9_]’.  Se o padrão regex for uma string, ‘\w’ combinará todos
os caracteres marcados como letras no banco de dados Unicode fornecido
pelo módulo *note unicodedata: 105.  Você pode usar a definição mais
restrita de ‘\w’ em um padrão de string, fornecendo o sinalizador *note
re.ASCII: 62c. ao compilar a expressão regular.

A lista a seguir de sequências especiais não está completa.  Para obter
uma lista completa das sequências e definições de classe expandidas para
padrões de strings Unicode, veja a última parte de *note Sintaxe de
Expressão Regular: 724. na referência da Biblioteca Padrão.  Em geral,
as versões Unicode correspondem a qualquer caractere que esteja na
categoria apropriada do banco de dados Unicode.

‘\d’

     corresponde a qualquer ‘dígito decimal’, que é equivalente à classe
     ‘[0-9]’.

‘\D’

     corresponde a qualquer caractere ‘não-dígito’, o que é equivalente
     à classe ‘[^0-9]’.

‘\s’

     corresponde a qualquer caractere ‘espaço-em-branco’, o que é
     equivalente à classe ‘[\t\n\r\f\v]’.

‘\S’

     corresponde a qualquer caractere ‘não-espaço-branco’, o que é
     equivalente à classe ‘[^\t\n\r\f\v].’

‘\w’

     corresponde a qualquer caractere ‘alfanumérico’, o que é
     equivalente à classe ‘[azA-Z0-9_]’.

‘\W’

     corresponde a qualquer caractere ‘não-alfanumérico’, o que é
     equivalente à classe ‘[^a-zA-Z0-9_]’.

Estas sequências podem ser incluídas dentro de uma classe de caractere.
Por exemplo, ‘[\s,.]’ É uma classe de caractere que irá corresponder a
qualquer caractere ‘espaço-em-branco’, ou ‘,’ ou ‘.’.

O metacaractere final desta seção é o ‘.’.  Ele encontra tudo, exceto um
caractere de nova linha, e existe um modo alternativo (*note re.DOTALL:
2488.), onde ele irá corresponder até mesmo a um caractere de nova
linha.  ‘.’ é frequentemente usado quando você quer corresponder com
“qualquer caractere”.


File: python.info,  Node: Repetindo coisas,  Prev: Correspondendo caracteres,  Up: Padrões simples

9.10.2.2 Repetindo coisas
.........................

Ser capaz de corresponder com variados conjuntos de caracteres é a
primeira coisa que as expressões regulares podem fazer que ainda não é
possível com os métodos disponíveis para strings.  No entanto, se essa
fosse a única capacidade adicional das expressões regulares, elas não
seriam um avanço relevante.  Outro recurso que você pode especificar é
que partes do RE devem ser repetidas um certo número de vezes.

O primeiro metacaractere para repetir coisas que veremos é ‘*’.  ‘*’ não
corresponde ao caractere literal ‘'*'’; em vez disso, ele especifica que
o caractere anterior pode ser correspondido zero ou mais vezes, em vez
de exatamente uma vez.

Por exemplo, ‘ca*t’ vai corresponder ‘'ct'’ (0 caracteres ‘'a'’),
‘'cat'’ (1 ‘'a'’), ‘'caaat'’ (3 caracteres ‘'a'’), e assim por diante.

Repetições tais como ‘*’ são gulosas; ao repetir a RE, o motor de
correspondência vai tentar repeti-la tantas vezes quanto possível.  Se
porções posteriores do padrão não corresponderem, o motor de
correspondência, em seguida, volta e tenta novamente com menos
repetições.

Um exemplo passo a passo fará isso mais óbvio.  Vamos considerar a
expressão “a[bcd]*b”.  Isto corresponde à letra “a”, zero ou mais letras
da classe “[bcd]” e, finalmente, termina com “b”.  Agora, imagine
corresponder este RE com a string “abcbd”.

Passo      Correspondência Explicação
                           
-----------------------------------------------------------------
                           
1          ‘a’             O caractere ‘a’ na RE tem
                           correspondência.
                           
                           
2          ‘abcbd’         O motor corresponde com ‘[bcd]*’,
                           indo tão longe quanto possível, que
                           é o fim do string.
                           
                           
3          'Falha'         O motor tenta corresponder com ‘b’,
                           mas a posição corrente está no
                           final da string, então ele falha.
                           
                           
4          ‘abcb’          Voltando, de modo que ‘[bcd]*’
                           corresponde a um caractere a menos.
                           
                           
5          'Falha'         Tenta ‘b’ novamente, mas a posição
                           corrente é a do último caractere,
                           que é um ‘'d'’.
                           
                           
6          ‘abc’           Voltando novamente, de modo que
                           ‘[bcd]*’ está correspondendo com
                           ‘bc’ somente.
                           
                           
6          ‘abcb’          Tenta ‘b’ novamente.  Desta vez, o
                           caractere na posição corrente é
                           ‘'b'’, por isso sucesso.
                           

O final da RE foi atingido e correspondeu a ‘'abcb'’.  Isso demonstra
como o mecanismo de correspondência vai tão longe quanto pode no início
e, se nenhuma correspondência for encontrada, ele fará a volta
progressivamente e tentará novamente o restante da RE. Ele fará voltas
até que tenha tentado zero correspondências para ‘[bcd]*’, e se isso
falhar subsequentemente, o mecanismo concluirá que a string não
corresponde a RE de forma alguma.

Outro metacaractere de repetição é o ‘+’, que corresponde a uma ou mais
vezes.  Preste muita atenção para a diferença entre ‘*’ e ‘+’; ‘*’
corresponde com zero ou mais vezes, assim, o que quer que esteja sendo
repetido pode não estar presente, enquanto que ‘+’ requer pelo menos uma
ocorrência.  Para usar um exemplo similar, ‘ca+t’ vai corresponder a
‘'cat'’, (1 ‘'a'’), ‘'caaat'’ (3 ‘'a'’s), mas não corresponde com
‘'ct'’.

Existem mais dois quantificadores ou operadores de repetição.  O
caractere de ponto de interrogação, ‘?’, corresponde a uma ou zero vez;
você pode pensar nisso como a marcação de algo sendo opcional.  Por
exemplo, ‘home-?brew’ corresponde tanto a ‘'homebrew'’ quanto a
‘'home-brew'’.

O qualificador mais complicado é o ‘{m,n}’, no qual 'm' e 'n' são
números inteiros decimais.  Este qualificador significa que deve haver
pelo menos 'm' repetições, e no máximo 'n'.  Por exemplo, ‘a/{1,3}b’ irá
corresponder a ‘'a/b'’, ‘'a//b'’ e ‘'a///b'’.  Não vai corresponder a
‘'ab'’, que não tem barras ou a ‘'a////b'’, que tem quatro.

Você pode omitir tanto 'm' quanto 'n'; nesse caso, um valor razoável é
presumido para o valor em falta.  A omissão de 'm' é interpretada como o
limite inferior de 0, enquanto a omissão de 'n' resulta como limite
superior o infinito.

O caso mais simples ‘{m}’ corresponde ao item precedente exatamente 'm'
vezes.  Por exemplo, ‘a/{2}b’ corresponderá somente a ‘'a//b'’.

Os leitores de uma inclinação reducionista podem notar que os três
outros quantificadores podem todos serem expressos utilizando esta
notação.  ‘{0,}’ é o mesmo que ‘*’, ‘{1,}’ é equivalente a ‘+’, e
‘{0,1}’ é o mesmo que ‘?’.  É melhor usar ‘*’, ‘+’ ou ‘?’ quando puder,
simplesmente porque eles são mais curtos e fáceis de ler.


File: python.info,  Node: Usando expressões regulares,  Next: Mais poder dos padrões,  Prev: Padrões simples,  Up: Expressões Regulares

9.10.3 Usando expressões regulares
----------------------------------

Agora que nós vimos algumas expressões regulares simples, como nós
realmente as usamos em Python?  O módulo *note re: b9. fornece uma
interface para o mecanismo de expressão regular, permitindo compilar REs
em objetos e, em seguida, executar comparações com eles.

* Menu:

* Compilando expressões regulares::
* A praga da contrabarra::
* Executando correspondências::
* Funções de nível de módulo: Funções de nível de módulo<3>.
* Sinalizadores de compilação::


File: python.info,  Node: Compilando expressões regulares,  Next: A praga da contrabarra,  Up: Usando expressões regulares

9.10.3.1 Compilando expressões regulares
........................................

As expressões regulares são compiladas em objetos padrão, que têm
métodos para várias operações, tais como a procura por padrões de
correspondência ou realizar substituições de strings.

     >>> import re
     >>> p = re.compile('ab*')
     >>> p
     re.compile('ab*')

*note re.compile(): bee. também aceita um argumento opcional 'flags',
utilizado para habilitar vários recursos especiais e variações de
sintaxe.  Nós vamos ver todas as configurações disponíveis mais tarde,
mas por agora, um único exemplo vai servir:

     >>> p = re.compile('ab*', re.IGNORECASE)

A RE é passada para *note re.compile(): bee. como uma string.  REs são
tratadas como strings porque as expressões regulares não são parte do
núcleo da linguagem Python, e nenhuma sintaxe especial foi criada para
expressá-las.  (Existem aplicações que não necessitam de REs nenhuma,
por isso não há necessidade de inchar a especificação da linguagem,
incluindo-as.)  Em vez disso, o módulo *note re: b9. é simplesmente um
módulo de extensão C incluído no Python, assim como os módulos de *note
socket: cc. ou *note zlib: 133.

Colocando REs em strings mantém a linguagem Python mais simples, mas tem
uma desvantagem, que é o tema da próxima seção.


File: python.info,  Node: A praga da contrabarra,  Next: Executando correspondências,  Prev: Compilando expressões regulares,  Up: Usando expressões regulares

9.10.3.2 A praga da contrabarra
...............................

Como afirmado anteriormente, expressões regulares usam o caractere de
contrabarra (‘\’) para indicar formas especiais ou para permitir que
caracteres especiais sejam usados sem invocar o seu significado
especial.  Isso entra em conflito com o uso pelo Python do mesmo
caractere para o mesmo propósito nas strings literais.

Vamos dizer que você quer escrever uma RE que corresponde com a string
‘\section’, que pode ser encontrada em um arquivo LaTeX. Para descobrir
o que escrever no código do programa, comece com a string que se deseja
corresponder.  Em seguida, você deve preceder qualquer contrabarra e
outros metacaracteres com uma contrabarra, tendo como resultado a string
‘\\section’.  A string resultante que deve ser passada para *note
re.compile(): bee. deve ser ‘\\section’.  No entanto, para expressar
isso como uma string literal Python, ambas as contrabarras devem ser
precedidas com uma contrabarra novamente.

Caracteres              Etapa
                        
-----------------------------------------------------------------------
                        
‘\section’              String de texto a ser correspondida
                        
                        
‘\\section’             Preceder com contrabarra para
                        *note re.compile(): bee.
                        
                        
‘"\\\\section"’         Contrabarras precedidas novamente para uma
                        string literal
                        

Em suma, para corresponder com uma contrabarra literal, tem de se
escrever ‘'\\\\'’ como a string da RE, porque a expressão regular deve
ser ‘\\’, e cada contrabarra deve ser expressa como ‘\\’ dentro de uma
string literal Python normal.  Em REs que apresentam contrabarras
repetidas vezes, isso leva a um monte de contrabarras repetidas e faz as
strings resultantes difíceis de entender.

A solução é usar a notação de string bruta (raw) do Python para
expressões regulares; contrabarras não são tratadas de nenhuma forma
especial em uma string literal se prefixada com ‘r’, então ‘r"\n"’ é uma
string de dois caracteres contendo ‘\’ e ‘n’, enquanto ‘"\n"’ é uma
string de um único caractere contendo uma nova linha.  As expressões
regulares, muitas vezes, são escritas no código Python usando esta
notação de string bruta (raw).

Além disso, sequências de escape especiais que são válidas em expressões
regulares, mas não válidas como literais de string do Python, agora
resultam em uma *note DeprecationWarning: 1a5. e eventualmente se
tornarão uma *note SyntaxError: 18d, o que significa que as sequências
serão inválidas se a notação de string bruta ou o escape das
contrabarras não forem usados.

String regular          'String bruta'
                        
-----------------------------------------------
                        
‘"ab*"’                 ‘r"ab*"’
                        
                        
‘"\\\\section"’         ‘r"\\section"’
                        
                        
‘"\\w+\\s+\\1"’         ‘r"\w+\s+\1"’
                        


File: python.info,  Node: Executando correspondências,  Next: Funções de nível de módulo<3>,  Prev: A praga da contrabarra,  Up: Usando expressões regulares

9.10.3.3 Executando correspondências
....................................

Uma vez que você tem um objeto que representa uma expressão regular
compilada, o que você faz com ele?  Objetos Pattern têm vários métodos e
atributos.  Apenas os mais significativos serão vistos aqui; consulte a
documentação do módulo *note re: b9. para uma lista completa.

Método/Atributo        Propósito
                       
---------------------------------------------------------------------------
                       
‘match()’              Determina se a RE combina com o início da string.
                       
                       
‘search()’             Varre toda a string, procurando qualquer local
                       onde esta RE tem correspondência.
                       
                       
‘findall()’            Encontra todas as substrings onde a RE
                       corresponde, e as retorna como uma lista.
                       
                       
‘finditer()’           Encontra todas as substrings onde a RE
                       corresponde, e as retorna como um
                       *note iterador: 1ac.
                       

*note match(): 2499. e *note search(): 249a. retornam ‘None’ se não
existir nenhuma correspondência encontrada.  Se tiveram sucesso, uma
instância de *note objeto correspondência: fbc. é retornada, contendo
informações sobre a correspondência: onde ela começa e termina, a
substring com a qual ela teve correspondência, e mais.

Você pode aprender mais sobre isso experimentando interativamente com o
módulo *note re: b9.

Este documento usa o interpretador Python padrão para seus exemplos.
Primeiro, execute o interpretador Python, importe o módulo *note re: b9,
e compile uma RE:

     >>> import re
     >>> p = re.compile('[a-z]+')
     >>> p
     re.compile('[a-z]+')

Agora, você pode tentar corresponder várias strings com a RE ‘[a-z]+’.
Mas uma string vazia não deveria corresponder com nada, uma vez que ‘+’
significa ‘uma ou mais repetições’.  *note match(): 2499. deve retornar
‘None’ neste caso, o que fará com que o interpretador não imprima
nenhuma saída.  Você pode imprimir explicitamente o resultado de
‘match()’ para deixar isso claro.

     >>> p.match("")
     >>> print(p.match(""))
     None

Agora, vamos experimentá-la em uma string que ela deve corresponder,
como ‘tempo’.  Neste caso, *note match(): 2499. irá retornar um *note
objeto correspondência: fbc, assim você deve armazenar o resultado em
uma variável para uso posterior.

     >>> m = p.match('tempo')
     >>> m
     <re.Match object; span=(0, 5), match='tempo'>

Agora você pode consultar o *note objeto correspondência: fbc. para
obter informações sobre a string correspondente.  Instâncias do objeto
correspondência também tem vários métodos e atributos; os mais
importantes são os seguintes:

Método/Atributo        Propósito
                       
------------------------------------------------------------------------
                       
‘group()’              Retorna a string que corresponde com a RE
                       
                       
‘start()’              Retorna a posição inicial da string
                       correspondente
                       
                       
‘end()’                Retorna a posição final da string
                       correspondente
                       
                       
‘span()’               Retorna uma tupla contendo as posições
                       (inicial, final) da string correspondente
                       

Experimentando estes métodos teremos seus significado esclarecidos:

     >>> m.group()
     'tempo'
     >>> m.start(), m.end()
     (0, 5)
     >>> m.span()
     (0, 5)

*note group(): 1061. retorna a substring que correspondeu com a RE.
*note start(): 24ac. e *note end(): 24ad. retornam os índices inicial e
o final da substring correspondente.  *note span(): 24ae. retorna tanto
os índices inicial e final em uma única tupla.  Como o método *note
match(): 2499. somente verifica se a RE corresponde ao início de uma
string, ‘start()’ será sempre zero.  No entanto, o método *note
search(): 249a. dos objetos padrão, varre toda a string, de modo que a
substring correspondente pode não iniciar em zero nesse caso.

     >>> print(p.match('::: message'))
     None
     >>> m = p.search('::: message'); print(m)
     <re.Match object; span=(4, 11), match='message'>
     >>> m.group()
     'message'
     >>> m.span()
     (4, 11)

Nos programas reais, o estilo mais comum é armazenar o *note objeto
correspondência: fbc. em uma variável e, em seguida, verificar se ela é
‘None’.  Isso geralmente se parece com:

     p = re.compile( ... )
     m = p.match( 'string vai aqui' )
     if m:
         print('Correspondência encontrada: ', m.group())
     else:
         print('Sem correspondência')

Dois métodos padrão retornam todas as correspondências de um padrão.
*note findall(): 24a0. retorna uma lista de strings correspondentes:

     >>> p = re.compile(r'\d+')
     >>> p.findall('12 percussionistas tocando tambores, 11 flautistas tocando flautas, 10  lordes saltando')
     ['12', '11', '10']

O prefixo ‘r’, tornando literal uma literal de string bruta, é
necessário neste exemplo porque sequências de escape em uma literal de
string “cozida” normal que não são reconhecidas pelo Python, ao
contrário de expressões regulares, agora resultam em uma *note
DeprecationWarning: 1a5. e eventualmente se tornarão uma *note
SyntaxError: 18d.  Veja *note A praga da contrabarra: 540a.

*note findall(): 24a0. tem que criar a lista inteira antes de poder
devolvê-la como resultado.  O método *note finditer(): 24a1. retorna uma
sequência de instâncias *note objeto correspondência: fbc. como um *note
iterator: 1ac.:

     >>> iterator = p.finditer('12 drummers drumming, 11 ... 10 ...')
     >>> iterator
     <callable_iterator object at 0x...>
     >>> for match in iterator:
     ...     print(match.span())
     ...
     (0, 2)
     (22, 24)
     (29, 31)


File: python.info,  Node: Funções de nível de módulo<3>,  Next: Sinalizadores de compilação,  Prev: Executando correspondências,  Up: Usando expressões regulares

9.10.3.4 Funções de nível de módulo
...................................

Você não tem que criar um objeto padrão e chamar seus métodos; o módulo
*note re: b9. também fornece funções de nível superior chamadas *note
match(): 126e, *note search(): 126d, *note findall(): 1060, *note sub():
2a3, e assim por diante.  Estas funções recebem os mesmos argumentos que
o método correspondente do objeto padrão, com a string RE adicionada
como o primeiro argumento, e ainda retornam ‘None’ ou uma instância
*note objeto correspondência: fbc.

     >>> print(re.match(r'From\s+', 'Fromage amk'))
     None
     >>> re.match(r'From\s+', 'From amk Thu May 14 19:12:10 1998')
     <re.Match object; span=(0, 5), match='From '>

Sob o capô, estas funções simplesmente criam um objeto padrão para você
e chamam o método apropriado para ele.  Elas também armazenam o objeto
compilado em um cache, para que futuras chamadas usando a mesma RE não
precisem analisar o padrão de novo e de novo.

Você deve usar essas funções de nível de módulo ou deve obter o padrão e
chamar seus métodos você mesmo?  Se estiver acessando uma expressão
regular dentro de um laço de repetição, pré-compilá-la economizará
algumas chamadas de função.  Fora dos laços, não há muita diferença
graças ao cache interno.


File: python.info,  Node: Sinalizadores de compilação,  Prev: Funções de nível de módulo<3>,  Up: Usando expressões regulares

9.10.3.5 Sinalizadores de compilação
....................................

Sinalizadores de compilação permitem modificar alguns aspectos de como
as expressões regulares funcionam.  Sinalizadores estão disponíveis no
módulo *note re: b9. sob dois nomes, um nome longo, tal como *note
IGNORECASE: 181a. e um curto, na forma de uma letra, como *note I: 248b.
(Se você estiver familiarizado com o padrão dos modificadores do Perl, o
nome curto usa as mesmas letras; o forma abreviada de *note re.VERBOSE:
2497. é *note re.X: 2490, por exemplo).  Vários sinalizadores podem ser
especificados aplicando um ‘OU’ bit a bit nelas; ‘re.I | re.M’ define os
sinalizadores *note I: 248b. e *note M: 248d, por exemplo.

Aqui está uma tabela dos sinalizadores disponíveis, seguida por uma
explicação mais detalhada de cada um:

Sinalizador                           Significado
                                      
---------------------------------------------------------------------------------------
                                      
*note ASCII: 62c, *note A: 248a.      Faz com que vários escapes como ‘\w’, ‘\b’,
                                      ‘\s’ e ‘\d’ correspondam apenas a caracteres
                                      ASCII com a respectiva propriedade.
                                      
                                      
*note DOTALL: 2488, *note S: 248e.    Faz o ‘.’ corresponder a qualquer caractere,
                                      incluindo novas linhas.
                                      
                                      
*note IGNORECASE: 181a,               Faz combinações sem diferenciar maiúsculo de
*note I: 248b.                        minúsculo.
                                      
                                      
*note LOCALE: b82, *note L: 248c.     Faz uma correspondência considerando a
                                      localidade.
                                      
                                      
*note MULTILINE: 2489,                Correspondência multilinha, afetando ‘^’ e
*note M: 248d.                        ‘$’.
                                      
                                      
*note VERBOSE: 2497, *note X: 2490.   Habilita REs detalhadas, que podem ser
(de ‘extended’; estendido em          organizadas de forma mais clara e
inglês)                               compreensível.
                                      

 -- Dado: re.I

 -- Dado: re.IGNORECASE

     Faz correspondência sem distinção entre maiúsculas e minúsculas; a
     classe de caracteres e as strings literais corresponderão às letras
     ignorando maiúsculas e minúsculas.  Por exemplo, ‘[A-Z]’
     corresponderá às letras minúsculas também.  A correspondência
     Unicode completa também funciona, a menos que o sinalizador *note
     ASCII: 62c. seja usado para desabilitar correspondências não ASCII.
     Quando os padrões Unicode ‘[a-z]’ ou ‘[A-Z]’ são usados em
     combinação com o sinalizador *note IGNORECASE: 181a, eles
     corresponderão às 52 letras ASCII e 4 letras não ASCII adicionais:
     ‘İ’ (U+0130, letra maiúscula latina I com ponto acima), ‘ı’
     (U+0131, letra minúscula latina i sem ponto), ‘ſ’ (U+017F, letra
     minúscula latina s longo) e ‘K’ (U+212A, sinal Kelvin).  ‘Spam’
     corresponderá a ‘'Spam'’, ‘'spam'’, ‘'spAM'’ ou ‘'ſpam'’ (o último
     é correspondido apenas no modo Unicode).  Essa capitalização em
     minúsculas não leva em conta a localidade atual; levará se você
     também definir o sinalizador *note LOCALE: b82.

 -- Dado: re.L

 -- Dado: re.LOCALE

     Faz com que ‘\w’, ‘\W’, ‘\b’, ‘\B’ e a correspondência sem
     diferenciação de maiúsculas e minúsculas dependam da localidade
     atual em vez do banco de dados Unicode.

     Localidades são um recurso da biblioteca C destinado a ajudar na
     escrita de programas que levam em conta as diferenças de idioma.
     Por exemplo, se você estiver processando texto codificado em
     francês, você gostaria de ser capaz de escrever ‘\w+’ para
     corresponder a palavras, mas ‘\w’ corresponde apenas à classe de
     caracteres ‘[A-Za-z]’ em padrões de bytes; ele não corresponderá a
     bytes correspondentes a ‘é’ ou ‘ç’.  Se seu sistema estiver
     configurado corretamente e uma localidade francesa for selecionada,
     certas funções C dirão ao programa que o byte correspondente a ‘é’
     também deve ser considerado uma letra.  Definir o sinalizador *note
     LOCALE: b82. ao compilar uma expressão regular fará com que o
     objeto compilado resultante use essas funções C para ‘\w’; isso é
     mais lento, mas também permite que ‘\w+’ corresponda a palavras
     francesas como você esperaria.  O uso deste sinalizador é
     desencorajado no Python 3, pois o mecanismo de localidade é muito
     pouco confiável, ele só manipula uma “cultura” por vez e só
     funciona com localidades de 8 bits.  A correspondência Unicode já
     está habilitada por padrão no Python 3 para padrões Unicode (str),
     e é capaz de manipular diferentes localidades/idiomas.

 -- Dado: re.M

 -- Dado: re.MULTILINE

     (‘^’ e ‘$’ ainda não foram explicados, eles serão comentados na
     seção *note Mais metacaracteres: 540e.)

     Normalmente ‘^’ corresponde apenas ao início da string e ‘$’
     corresponde apenas ao final da string, e imediatamente antes da
     nova linha (se existir) no final da string.  Quando este
     sinalizador é especificada, o ‘^’ corresponde ao início da string e
     ao início de cada linha dentro da string, imediatamente após cada
     nova linha.  Da mesma forma, o metacaractere ‘$’ corresponde tanto
     ao final da string e ao final de cada linha (imediatamente antes de
     cada nova linha).

 -- Dado: re.S

 -- Dado: re.DOTALL

     Faz o caractere especial ‘.’ corresponder com qualquer caractere
     que seja, incluindo uma nova linha; sem este sinalizador, ‘.’ irá
     corresponder a qualquer coisa, exceto uma nova linha.

 -- Dado: re.A

 -- Dado: re.ASCII

     Faz com que ‘\w’, ‘\W’, ‘\b’, ‘\B’, ‘\s’ e ‘\S’ executem a
     correspondência somente ASCII em vez da correspondência Unicode
     completa.  Isso é significativo apenas para padrões Unicode e é
     ignorado para padrões de bytes.

 -- Dado: re.X

 -- Dado: re.VERBOSE

     Este sinalizador permite escrever expressões regulares mais
     legíveis, permitindo mais flexibilidade na maneira de formatá-la.
     Quando este sinalizador é especificado, o espaço em branco dentro
     da string RE é ignorado, exceto quando o espaço em branco está em
     uma classe de caracteres ou precedido por uma barra invertida não
     “escapada”; isto permite organizar e formatar a RE de maneira mais
     clara.  Este sinalizador também permite que se coloque comentários
     dentro de uma RE que serão ignorados pelo mecanismo; os comentários
     são marcados por um “#” que não está nem em uma classe de
     caracteres nem precedido por uma barra invertida não “escapada”.

     Por exemplo, aqui está uma RE que usa *note re.VERBOSE: 2497.;
     consegue ver o quanto mais fácil de ler é?

          charref = re.compile(r"""
           &[#]                # Início de uma referência à entidade numérica
           (
               0[0-7]+         # Forma octal
             | [0-9]+          # Forma decimal
             | x[0-9a-fA-F]+   # Forma hexadecimal
           )
           ;                   # Ponto e vírgula ao final
          """, re.VERBOSE)

     Sem o “verbose” definido, A RE iria se parecer como isto:

          charref = re.compile("&#(0[0-7]+"
                               "|[0-9]+"
                               "|x[0-9a-fA-F]+);")

     No exemplo acima, a concatenação automática de strings literais em
     Python foi usada para quebrar a RE em partes menores, mas ainda é
     mais difícil de entender do que a versão que usa *note re.VERBOSE:
     2497.


File: python.info,  Node: Mais poder dos padrões,  Next: Modificando strings,  Prev: Usando expressões regulares,  Up: Expressões Regulares

9.10.4 Mais poder dos padrões
-----------------------------

Até agora, cobrimos apenas uma parte dos recursos das expressões
regulares.  Nesta seção, vamos abordar alguns metacaracteres novos, e
como usar grupos para recuperar partes do texto que teve
correspondência.

* Menu:

* Mais metacaracteres::
* Agrupamento::
* Não captura e grupos nomeados::
* Asserções lookahead::


File: python.info,  Node: Mais metacaracteres,  Next: Agrupamento,  Up: Mais poder dos padrões

9.10.4.1 Mais metacaracteres
............................

Existem alguns metacaracteres que nós ainda não vimos.  A maioria deles
serão referenciados nesta seção.

Alguns dos metacaracteres restantes a serem discutidos são como uma
asserção de ‘largura zero’ (zero-width assertions).  Eles não fazem com
que o mecanismo avance pela string; ao contrário, eles não consomem
nenhum caractere, e simplesmente tem sucesso ou falha.  Por exemplo,
‘\b’ é uma afirmação de que a posição atual está localizada nas bordas
de uma palavra; a posição não é alterada de nenhuma maneira por ‘\b’.
Isto significa que afirmações de ‘largura zero’ nunca devem ser
repetidas, porque se elas combinam uma vez em um determinado local, elas
podem, obviamente, combinar um número infinito de vezes.

‘|’

     Alternância, ou operador “or”.  Se 'A' e 'B' são expressões
     regulares, ‘A|B’ irá corresponder com qualquer string que
     corresponder com 'A' ou 'B'. ‘|’ tem uma prioridade muito baixa, a
     fim de fazê-lo funcionar razoavelmente quando você está alternando
     entre strings de vários caracteres.  ‘Crow|Servo’ irá corresponder
     tanto com ‘'Crow'’ quanto com ‘'Servo'’, e não com ‘'Cro'’, ‘'w'’
     ou ‘'S'’, e ‘'ervo'’.

     Para corresponder com um ‘'|'’ literal, use ‘\|’, ou coloque ele
     dentro de uma classe de caracteres, como em ‘[|]’.

‘^’

     Corresponde ao início de linha.  A menos que o sinalizador *note
     MULTILINE: 2489. tenha sido definido, isso só irá corresponder ao
     início da string.  No modo *note MULTILINE: 2489, isso também
     corresponde imediatamente após cada nova linha de dentro da string.

     Por exemplo, para ter correspondência com a palavra ‘From’ apenas
     no início de uma linha, a RE a ser usada é ‘^From’.

          >>> print(re.search('^From', 'From Here to Eternity'))
          <re.Match object; span=(0, 4), match='From'>
          >>> print(re.search('^From', 'Reciting From Memory'))
          None

     Para corresponder a um ‘'^'’ literal, use ‘\^’.

‘$’

     Corresponde ao fim de uma linha, que tanto é definido como o fim de
     uma string, ou qualquer local seguido por um caractere de nova
     linha.

          >>> print(re.search('}$', '{block}'))
          <re.Match object; span=(6, 7), match='}'>
          >>> print(re.search('}$', '{block} '))
          None
          >>> print(re.search('}$', '{block}\n'))
          <re.Match object; span=(6, 7), match='}'>

     Para corresponder com um ‘'$'’ literal, use ‘\$’ ou coloque-o
     dentro de uma classe de caracteres, como em ‘[$]’.

‘\A’

     Corresponde apenas com o início da string.  Quando não estiver em
     modo *note MULTILINE: 2489, ‘\A’ e ‘^’ são efetivamente a mesma
     coisa.  No modo *note MULTILINE: 2489, eles são diferentes: ‘\A’
     continua a corresponder apenas com o início da string, mas ‘^’ pode
     corresponder com qualquer localização de dentro da string, que seja
     posterior a um caractere nova linha.

‘\Z’

     Corresponde apenas ao final da string.

‘\b’

     Borda de palavra.  Esta é uma asserção de largura zero que
     corresponde apenas ao início ou ao fim de uma palavra.  Uma palavra
     é definida como uma sequência de caracteres alfanuméricos, então o
     fim de uma palavra é indicado por espaço em branco ou um caractere
     não alfanumérico.

     O exemplo a seguir corresponde a ‘class’ apenas quando é a palavra
     exata; ele não irá corresponder quando for contido dentro de uma
     outra palavra.

          >>> p = re.compile(r'\bclass\b')
          >>> print(p.search('no class at all'))
          <re.Match object; span=(3, 8), match='class'>
          >>> print(p.search('the declassified algorithm'))
          None
          >>> print(p.search('one subclass is'))
          None

     Há duas sutilezas que você deve lembrar ao usar essa sequência
     especial.  Em primeiro lugar, esta é a pior colisão entre strings
     literais do Python e sequências de expressão regular.  Nas strings
     literais do Python, ‘\b’ é o caractere backspace, o valor ASCII 8.
     Se você não estiver usando strings brutas, então Python irá
     converter o ‘\b’ em um backspace e sua RE não irá funcionar da
     maneira que você espera.  O exemplo a seguir parece igual a nossa
     RE anterior, mas omite o ‘'r'’ na frente da string RE.

          >>> p = re.compile('\bclass\b')
          >>> print(p.search('no class at all'))
          None
          >>> print(p.search('\b' + 'class' + '\b'))
          <re.Match object; span=(0, 7), match='\x08class\x08'>

     Além disso, dentro de uma classe de caracteres, onde não há nenhum
     uso para esta asserção, ‘\b’ representa o caractere backspace, para
     compatibilidade com strings literais do Python

‘\B’

     Outra asserção de largura zero; isto é o oposto de ‘\b’,
     correspondendo apenas quando a posição corrente não é de uma borda
     de palavra.


File: python.info,  Node: Agrupamento,  Next: Não captura e grupos nomeados,  Prev: Mais metacaracteres,  Up: Mais poder dos padrões

9.10.4.2 Agrupamento
....................

Frequentemente é necessário obter mais informações do que apenas se a RE
teve correspondência ou não.  As expressões regulares são muitas vezes
utilizadas para dissecar strings escrevendo uma RE dividida em vários
subgrupos que correspondem a diferentes componentes de interesse.  Por
exemplo, uma linha de cabeçalho RFC-822 é dividida em um nome de
cabeçalho e um valor, separados por um ‘':'’, como essa:

     From: author@example.com
     User-Agent: Thunderbird 1.5.0.9 (X11/20061227)
     MIME-Version: 1.0
     To: editor@example.com

Isto pode ser tratado escrevendo uma expressão regular que corresponde
com uma linha inteira de cabeçalho, e tem um grupo que corresponde ao
nome do cabeçalho, e um outro grupo, que corresponde ao valor do
cabeçalho.

Os grupos são marcados pelos metacaracteres ‘'('’ e ‘')'’.  ‘'('’ e
‘')'’ têm muito do mesmo significado que eles têm em expressões
matemáticas; eles agrupam as expressões contidas dentro deles, e você
pode repetir o conteúdo de um grupo com um qualificador de repetição,
como ‘*’, ‘+’, ‘?’, ou ‘{m,n}’.  Por exemplo, ‘(ab)*’ irá corresponder a
zero ou mais repetições de ‘ab’.

     >>> p = re.compile('(ab)*')
     >>> print(p.match('ababababab').span())
     (0, 10)

Grupos indicados com ‘'('’ e ‘')'’ também capturam o índice inicial e
final do texto que eles correspondem; isso pode ser obtido por meio da
passagem de um argumento para *note group(): 1061, *note start(): 24ac,
*note end(): 24ad. e *note span(): 24ae.  Os grupos são numerados
começando com 0.  O grupo 0 está sempre presente; é toda a RE, de forma
que os métodos de *note objeto de correspondência: fbc. têm todos o
grupo 0 como seu argumento padrão.  Mais tarde veremos como expressar
grupos que não capturam a extensão de texto com a qual eles
correspondem.

     >>> p = re.compile('(a)b')
     >>> m = p.match('ab')
     >>> m.group()
     'ab'
     >>> m.group(0)
     'ab'

Subgrupos são numerados a partir da esquerda para a direita, de forma
crescente a partir de 1.  Os grupos podem ser aninhados; para determinar
o número, basta contar os caracteres de abertura de parêntese ‘(’, indo
da esquerda para a direita.

     >>> p = re.compile('(a(b)c)d')
     >>> m = p.match('abcd')
     >>> m.group(0)
     'abcd'
     >>> m.group(1)
     'abc'
     >>> m.group(2)
     'b'

*note group(): 1061. pode receber vários números de grupos de uma vez, e
nesse caso ele irá retornar uma tupla contendo os valores
correspondentes desses grupos.

     >>> m.group(2,1,2)
     ('b', 'abc', 'b')

O método *note groups(): 1062. retorna uma tupla contendo as strings de
todos os subgrupos, de 1 até o último.

     >>> m.groups()
     ('abc', 'b')

Referências anteriores em um padrão permitem que você especifique que o
conteúdo de um grupo capturado anteriormente também deve ser encontrado
na posição atual na sequência.  Por exemplo, ‘\1’ terá sucesso se o
conteúdo exato do grupo 1 puder ser encontrado na posição atual, e falha
caso contrário.  Lembre-se que as strings literais do Python também usam
a contrabarra seguida por números para permitir a inclusão de caracteres
arbitrários em uma string, por isso certifique-se de usar strings brutas
ao incorporar referências anteriores em uma RE.

Por exemplo, a seguinte RE detecta palavras duplicadas em uma string.

     >>> p = re.compile(r'\b(\w+)\s+\1\b')
     >>> p.search('Paris in the the spring').group()
     'the the'

Referências anteriores como esta não são, geralmente, muito úteis apenas
para fazer pesquisa em uma string — existem alguns formatos de texto que
repetem dados dessa forma — mas em breve você irá descobrir que elas são
muito úteis para realizar substituições de strings.


File: python.info,  Node: Não captura e grupos nomeados,  Next: Asserções lookahead,  Prev: Agrupamento,  Up: Mais poder dos padrões

9.10.4.3 Não captura e grupos nomeados
......................................

REs elaboradas podem usar muitos grupos, tanto para capturar substrings
de interesse, quanto para agrupar e estruturar a própria RE. Em REs
complexas, torna-se difícil manter o controle dos números dos grupos.
Existem dois recursos que ajudam a lidar com esse problema.  Ambos usam
uma sintaxe comum para extensões de expressão regular, então vamos olhar
primeiro para isso.

O Perl 5 é bem conhecido por suas poderosas adições às expressões
regulares padrão.  Para esses novos recursos, os desenvolvedores do Perl
não podiam escolher novos metacaracteres de um único caractere ou novas
sequências especiais começando com ‘\’ sem tornar as expressões
regulares do Perl confusamente diferentes das REs padrão.  Se eles
escolhessem ‘&’ como um novo metacaractere, por exemplo, as expressões
antigas estariam presumindo que ‘&’ era um caractere regular e não
teriam escapado dele escrevendo ‘\&’ ou ‘[&]’.

A solução escolhida pelos desenvolvedores do Perl foi usar ‘(?...)’ como
uma sintaxe de extensão.  Um ‘?’ imediatamente após um parêntese era um
erro de sintaxe porque o ‘?’ não teria nada a repetir, de modo que isso
não introduz quaisquer problemas de compatibilidade.  Os caracteres
imediatamente após um ‘?’ indicam que a extensão está sendo usada, então
‘(?=foo)’ é uma coisa (uma asserção ‘lookahead’ positiva) e ‘(?:foo)’ é
outra coisa (um grupo de não-captura contendo a subexpressão ‘foo’).

Python oferece suporte a diversas extensões do Perl e adiciona uma
sintaxe de extensão à sintaxe de extensão do Perl.  Se o primeiro
caractere após o ponto de interrogação for um ‘P’, você sabe que se
trata de uma extensão específica do Python.

Agora que vimos a sintaxe geral da extensão, podemos retornar aos
recursos que simplificam o trabalho com grupos em REs complexas.

Às vezes você vai querer usar um grupo para representar uma parte de uma
expressão regular, mas não está interessado em recuperar o conteúdo do
grupo.  Você pode tornar isso explícito usando um grupo de não-captura:
‘(?:...)’, onde você pode substituir o ‘...’ por qualquer outra
expressão regular.

     >>> m = re.match("([abc])+", "abc")
     >>> m.groups()
     ('c',)
     >>> m = re.match("(?:[abc])+", "abc")
     >>> m.groups()
     ()

Exceto pelo fato de que não é possível recuperar o conteúdo sobre o qual
o grupo corresponde, um grupo de não-captura se comporta exatamente da
mesma forma que um grupo de captura; você pode colocar qualquer coisa
dentro dele, repeti-lo com um metacaractere de repetição, como o ‘*’, e
aninhá-lo dentro de outros grupos (de captura ou não-captura).
‘(?:...)’ é particularmente útil para modificar um padrão existente, já
que você pode adicionar novos grupos sem alterar a forma como todos os
outros grupos estão numerados.  Deve ser mencionado que não há diferença
de desempenho na busca entre grupos de captura e grupos de não-captura;
uma forma não é mais rápida que outra.

Uma característica mais significativa são os grupos nomeados: em vez de
se referir a eles por números, os grupos podem ser referenciados por um
nome.

A sintaxe de um grupo nomeado é uma das extensões específicas do Python:
‘(?P<name>...)’.  'name' é, obviamente, o nome do grupo.  Os grupos
nomeados se comportam exatamente como os grupos de captura, e,
adicionalmente, associam um nome a um grupo.  Todos os métodos de *note
objeto correspondência: fbc. que lidam com grupos de captura aceitam
tanto inteiros que se referem ao grupo por número ou strings que contêm
o nome do grupo desejado.  Os grupos nomeados ainda recebem números,
então você pode recuperar informações sobre um grupo de duas maneiras:

     >>> p = re.compile(r'(?P<word>\b\w+\b)')
     >>> m = p.search( '(((( Lots of punctuation )))' )
     >>> m.group('word')
     'Lots'
     >>> m.group(1)
     'Lots'

Além disso, você pode recuperar grupos nomeados como um dicionário com
*note groupdict(): 24ab.:

     >>> m = re.match(r'(?P<first>\w+) (?P<last>\w+)', 'Jane Doe')
     >>> m.groupdict()
     {'first': 'Jane', 'last': 'Doe'}

Os grupos nomeados são úteis porque eles permitem que você use nomes de
fácil lembrança, em vez de ter que lembrar de números.  Aqui está um
exemplo de RE usando o módulo *note imaplib: 74.:

     InternalDate = re.compile(r'INTERNALDATE "'
             r'(?P<day>[ 123][0-9])-(?P<mon>[A-Z][a-z][a-z])-'
             r'(?P<year>[0-9][0-9][0-9][0-9])'
             r' (?P<hour>[0-9][0-9]):(?P<min>[0-9][0-9]):(?P<sec>[0-9][0-9])'
             r' (?P<zonen>[-+])(?P<zoneh>[0-9][0-9])(?P<zonem>[0-9][0-9])'
             r'"')

É obviamente muito mais fácil fazer referência a ‘m.group('zonem')’, do
que ter que se lembrar de capturar o grupo 9.

A sintaxe para referências anteriores em uma expressão, tal como
‘(...)\1’, faz referência ao número do grupo.  Existe, naturalmente, uma
variante que usa o nome do grupo em vez do número.  Isto é outra
extensão Python: ‘(?P=name)’ indica que o conteúdo do grupo chamado
'name' deve, novamente, ser correspondido no ponto atual.  A expressão
regular para encontrar palavras duplicadas, ‘(\b\w+)\s+\1’, também pode
ser escrita como ‘(?P<word>\b\w+)\s+(?P=word)’:

     >>> p = re.compile(r'\b(?P<word>\w+)\s+(?P=word)\b')
     >>> p.search('Paris in the the spring').group()
     'the the'


File: python.info,  Node: Asserções lookahead,  Prev: Não captura e grupos nomeados,  Up: Mais poder dos padrões

9.10.4.4 Asserções lookahead
............................

Outra asserção de “largura zero” é a asserção lookahead.  Asserções
lookahead estão disponíveis tanto na forma positiva quanto na negativa,
e se parece com isto:

‘(?=...)’

     Asserção lookahead positiva.  É bem-sucedida se a expressão regular
     informada, aqui representada por ‘...’, corresponde com o conteúdo
     da localização atual, e falha caso contrário.  Mas, uma vez que a
     expressão informada tenha sido testada, o mecanismo de
     correspondência não faz qualquer avanço; o resto do padrão é
     tentado no mesmo local de onde a asserção foi iniciada.

‘(?!...)’

     Asserção lookahead negativa.  É o oposto da asserção positiva; será
     bem-sucedida se a expressão informada não corresponder com o
     conteúdo da posição atual na string.

Para tornar isto concreto, vamos olhar para um caso em que uma lookahead
é útil.  Considere um padrão simples para corresponder com um nome de
arquivo e dividi-lo em pedaços, um nome base e uma extensão, separados
por um ‘.’.  Por exemplo, em ‘news.rc’, ‘news’ é o nome base, e ‘rc’ é a
extensão do nome de arquivo.

O padrão para corresponder com isso é muito simples:

‘.*[.].*$’

Observe que o ‘.’ precisa ser tratado de forma especial, pois é um
metacaractere e, portanto, está dentro de uma classe de caracteres para
corresponder apenas a esse caractere específico.  Observe também o ‘$’
ao final; ele é adicionado para garantir que todo o restante da string
seja incluído na extensão.  Esta expressão regular corresponde a
‘foo.bar’, ‘autoexec.bat’, ‘sendmail.cf’ e ‘printers.conf’.

Agora, considere complicar um pouco o problema; e se você desejar
corresponder com nomes de arquivos onde a extensão não é ‘bat’?  Algumas
tentativas incorretas:

‘.*[.][^b].*$’

A primeira tentativa acima tenta excluir ‘bat’, exigindo que o primeiro
caractere da extensão não seja um ‘b’.  Isso é errado, porque o padrão
também não corresponde a ‘foo.bar’.

‘.*[.]([^b]..|.[^a].|..[^t])$’

A expressão fica mais confusa se você tentar remendar a primeira
solução, exigindo que uma das seguintes situações corresponda: o
primeiro caractere da extensão não é ‘b’; o segundo caractere não é ‘a’;
ou o terceiro caractere não é ‘t’.  Isso aceita ‘foo.bar’ e rejeita
‘autoexec.bat’, mas requer uma extensão de três letras e não aceitará um
nome de arquivo com uma extensão de duas letras, tal como ‘sendmail.cf’.
Nós iremos complicar o padrão novamente em um esforço para corrigi-lo.

‘.*[.]([^b].?.?|.[^a]?.?|..?[^t]?)$’

Na terceira tentativa, a segunda e terceira letras são todas
consideradas opcionais, a fim de permitir correspondência com as
extensões mais curtas do que três caracteres, tais como ‘sendmail.cf’.

Agora, o padrão está ficando realmente muito complicado, o que faz com
que seja difícil de ler e compreender.  Pior ainda, se o problema mudar
e você quiser excluir tanto ‘bat’ quanto ‘exe’ como extensões, o padrão
iria ficar ainda mais complicado e confuso.

Uma lookahead negativo elimina toda esta confusão:

‘.*[.](?!bat$)[^.]*$’

A lookahead negativa significa: se a expressão ‘bat’ não corresponder
até este momento, tente o resto do padrão; se ‘bat$’ tem
correspondência, todo o padrão irá falhar.  O final ‘$’ é necessário
para garantir que algo como ‘sample.batch’, onde a extensão só começa
com o ‘bat’, será permitido.

Excluir uma outra extensão de nome de arquivo agora é fácil; basta fazer
a adição de uma alternativa dentro da asserção.  O padrão a seguir
exclui os nomes de arquivos que terminam com ‘bat’ ou ‘exe’:

‘.*[.](?!bat$|exe$)[^.]*$’


File: python.info,  Node: Modificando strings,  Next: Problemas comuns,  Prev: Mais poder dos padrões,  Up: Expressões Regulares

9.10.5 Modificando strings
--------------------------

Até este ponto, nós simplesmente realizamos pesquisas em uma string
estática.  As expressões regulares também são comumente usadas para
modificar strings através de várias maneiras, usando os seguintes
métodos padrão:

Método/Atributo        Propósito
                       
---------------------------------------------------------------------------
                       
‘split()’              Divide a string em uma lista, dividindo-a onde
                       quer que haja correspondência com a RE
                       
                       
‘sub()’                Encontra todas as substrings que correspondem com
                       a RE e faz a substituição por uma string
                       diferente
                       
                       
‘subn()’               Faz a mesma coisa que ‘sub()’, mas retorna a nova
                       string e o número de substituições
                       

* Menu:

* Dividindo as strings::
* Busca e Substituição: Busca e Substituição<2>.


File: python.info,  Node: Dividindo as strings,  Next: Busca e Substituição<2>,  Up: Modificando strings

9.10.5.1 Dividindo as strings
.............................

O método *note split(): 249f. de um padrão divide uma string em pedaços
onde quer que a RE corresponda, retornando uma lista formada por esses
pedaços.  É semelhante ao método *note split(): ed9. de strings, mas
oferece muito mais generalidade nos delimitadores que pode usar para
fazer a divisão; ‘split()’ só implementa a divisão por espaço em branco
ou por uma string fixa.  Como você deve deduzir, existe também uma
função a nível de módulo *note re.split(): 2a2.

 -- Método: .split (string[, maxsplit=0])

     Divide 'string' usando a correspondência com uma expressão regular.
     Se os parênteses de captura forem utilizados na RE, então seu
     conteúdo também será retornado como parte da lista resultante.  Se
     'maxsplit' é diferente de zero, serão feitas no máximo 'maxplit'
     divisões.

Você pode limitar o número de divisões feitas, passando um valor para
'maxsplit'.  Quando 'maxsplit' é diferente de zero, serão feita no
máximo ‘maxsplit’ divisões, e o restante da string é retornado como o
elemento final da lista.  No exemplo a seguir, o delimitador é qualquer
sequência de caracteres não alfanuméricos.

     >>> p = re.compile(r'\W+')
     >>> p.split('This is a test, short and sweet, of split().')
     ['This', 'is', 'a', 'test', 'short', 'and', 'sweet', 'of', 'split', '']
     >>> p.split('This is a test, short and sweet, of split().', 3)
     ['This', 'is', 'a', 'test, short and sweet, of split().']

Às vezes, você não está interessado apenas no texto que está entre os
delimitadores, mas também precisa saber qual o delimitador foi usado.
Se os parênteses de captura são utilizados na RE, então os respectivos
valores são também retornados como parte da lista.  Compare as seguintes
chamadas:

     >>> p = re.compile(r'\W+')
     >>> p2 = re.compile(r'(\W+)')
     >>> p.split('This... is a test.')
     ['This', 'is', 'a', 'test', '']
     >>> p2.split('This... is a test.')
     ['This', '... ', 'is', ' ', 'a', ' ', 'test', '.', '']

A função de nível de módulo *note re.split(): 2a2. adiciona a RE a ser
utilizada como o primeiro argumento, mas, fora isso, é a mesma.

     >>> re.split(r'[\W]+', 'Words, words, words.')
     ['Words', 'words', 'words', '']
     >>> re.split(r'([\W]+)', 'Words, words, words.')
     ['Words', ', ', 'words', ', ', 'words', '.', '']
     >>> re.split(r'[\W]+', 'Words, words, words.', 1)
     ['Words', 'words, words.']


File: python.info,  Node: Busca e Substituição<2>,  Prev: Dividindo as strings,  Up: Modificando strings

9.10.5.2 Busca e Substituição
.............................

Outra tarefa comum é encontrar todas as combinações para um padrão e
substituí-las por uma string diferente.  O método *note sub(): 24a2.
recebe um valor de substituição, que pode ser uma string ou uma função,
e a string a ser processada.

 -- Método: .sub (replacement, string[, count=0])

     Retorna a string obtida substituindo as ocorrências mais à esquerda
     não sobrepostas da RE em ‘string’ pelo valor de substituição
     ‘replacement’.  Se o padrão não for encontrado, a ‘string’ é
     retornada inalterada.

     O argumento opcional 'count' é o número máximo de ocorrências do
     padrão a ser substituído; 'count' deve ser um número inteiro não
     negativo.  O valor padrão 0 significa substituir todas as
     ocorrências.

Aqui está um exemplo simples do uso do método *note sub(): 24a2.  Ele
substitui nomes de cores pela palavra ‘colour’:

     >>> p = re.compile('(blue|white|red)')
     >>> p.sub('colour', 'blue socks and red shoes')
     'colour socks and colour shoes'
     >>> p.sub('colour', 'blue socks and red shoes', count=1)
     'colour socks and red shoes'

O método *note subn(): 24a3. faz o mesmo trabalho, mas retorna uma tupla
com duas informações: uma string com novo valor e o número de
substituições que foram realizadas:

     >>> p = re.compile('(blue|white|red)')
     >>> p.subn('colour', 'blue socks and red shoes')
     ('colour socks and colour shoes', 2)
     >>> p.subn('colour', 'no colours at all')
     ('no colours at all', 0)

Correspondências vazias somente são substituídas quando não estão
adjacente (próxima) a uma correspondência vazia anterior.

     >>> p = re.compile('x*')
     >>> p.sub('-', 'abxd')
     '-a-b--d-'

Se o valor de substituição ('replacement') é uma string, qualquer barra
invertida é interpretada e processada.  Isto é, ‘\n’ é convertido a um
único caractere de nova linha, ‘\r’ é convertido em um retorno do carro,
e assim por diante.  Casos desconhecidos, como ‘\&’ são ignorados.
Referências anteriores, como ‘\6’, são substituídas com a substring
correspondida pelo grupo correspondente na RE. Isso permite que você
incorpore partes do texto original na string de substituição resultante.

Este exemplo corresponde com a palavra ‘section’, seguida por uma string
colocada entre ‘{’, ‘}’, e altera ‘section’ para ‘subsection’:

     >>> p = re.compile('section{ ( [^}]* ) }', re.VERBOSE)
     >>> p.sub(r'subsection{\1}','section{First} section{second}')
     'subsection{First} subsection{second}'

Há também uma sintaxe para se referir a grupos nomeados como definido
pela sintaxe ‘(?P<name>...)’.  ‘\g<name>’ usará a substring
correspondida pelo grupo com nome ‘name’ e ‘\g<number>’ utiliza o número
do grupo correspondente.  ‘\g<2>’ é, portanto, equivalente a ‘\2’, mas
não é ambígua em uma string de substituição, tal como ‘\g<2>0’.  (‘\20’
seria interpretado como uma referência ao grupo de 20, e não uma
referência ao grupo 2 seguido pelo caractere literal ‘'0'’).  As
substituições a seguir são todas equivalentes, mas usam todas as três
variações da string de substituição.

     >>> p = re.compile('section{ (?P<name> [^}]* ) }', re.VERBOSE)
     >>> p.sub(r'subsection{\1}','section{First}')
     'subsection{First}'
     >>> p.sub(r'subsection{\g<1>}','section{First}')
     'subsection{First}'
     >>> p.sub(r'subsection{\g<name>}','section{First}')
     'subsection{First}'

'replacement' também pode ser uma função, que lhe dá ainda mais
controle.  Se 'replacement' for uma função, a função será chamada para
todas as ocorrências não sobrepostas de 'pattern'.  Em cada chamada, a
função recebe um argumento de *note objeto Match: fbc. para a
correspondência e pode usar essas informações para calcular a string de
substituição desejada e retorná-la.

No exemplo a seguir, a função de substituição traduz decimais em
hexadecimal:

     >>> def hexrepl(match):
     ...     "Return the hex string for a decimal number"
     ...     value = int(match.group())
     ...     return hex(value)
     ...
     >>> p = re.compile(r'\d+')
     >>> p.sub(hexrepl, 'Call 65490 for printing, 49152 for user code.')
     'Call 0xffd2 for printing, 0xc000 for user code.'

Ao utilizar a função de nível de módulo *note re.sub(): 2a3, o padrão é
passado como o primeiro argumento.  O padrão pode ser fornecido como um
objeto ou como uma string; se você precisa especificar sinalizadores de
expressões regulares, você deve usar um objeto padrão como o primeiro
parâmetro, ou usar modificadores embutidos na string padrão, por
exemplo, ‘sub("(?i)b+", "x", "bbbb BBBB")’ retorna ‘'x x'’.


File: python.info,  Node: Problemas comuns,  Next: Comentários<2>,  Prev: Modificando strings,  Up: Expressões Regulares

9.10.6 Problemas comuns
-----------------------

Expressões regulares são uma ferramenta poderosa para algumas
aplicações, mas de certa forma o seu comportamento não é intuitivo, e às
vezes, as RE não se comportam da maneira que você espera que elas se
comportem.  Esta seção irá apontar algumas das armadilhas mais comuns.

* Menu:

* Usando métodos de string::
* match() versus search(): match versus search.
* Gulosos versus não-gulosos::
* Usando re.VERBOSE: Usando re VERBOSE.


File: python.info,  Node: Usando métodos de string,  Next: match versus search,  Up: Problemas comuns

9.10.6.1 Usando métodos de string
.................................

Às vezes, usar o módulo *note re: b9. é um equívoco.  Se você está
fazendo correspondência com uma string fixa, ou uma classe de caractere
única, e você não está usando nenhum recurso de *note re: b9. como o
sinalizador *note IGNORECASE: 181a, então pode não ser necessário todo o
poder das expressões regulares.  Strings possuem vários métodos para
executar operações com strings fixas e eles são, geralmente, muito mais
rápidos, porque a implementação é um único e pequeno laço de repetição
em C que foi otimizado para esse propósito, em vez do grande e mais
generalizado mecanismo das expressões regulares.

Um exemplo pode ser a substituição de uma string fixa única por outra;
por exemplo, você pode substituir ‘word’ por ‘deed’.  *note re.sub():
2a3. parece ser a função a ser usada para isso, mas considere o método
*note replace(): 19a.  Note que ‘replace()’ também irá substituir ‘word’
dentro de palavras, transformando ‘swordfish’ em ‘sdeedfish’, mas uma RE
ingênua teria feito isso também.  (Para evitar a realização da
substituição de partes de palavras, o padrão teria que ser ‘\bword\b’, a
fim de exigir que ‘word’ tenha um delimitador de palavra em ambos os
lados.  Isso leva a tarefa para além da capacidade de ‘replace()’.)

Outra tarefa comum é apagar todas as ocorrências de um único caractere
de uma string ou substituí-lo por um outro caractere único.  Você pode
fazer isso com algo como ‘re.sub('\n', ' ', S)’, mas *note translate():
2364. é capaz de fazer ambas as tarefas e será mais rápida do que
qualquer operação de expressão regular pode ser.

Em suma, antes de recorrer ao o módulo *note re: b9, considere se o seu
problema pode ser resolvido com um método de string mais rápido e mais
simples.


File: python.info,  Node: match versus search,  Next: Gulosos versus não-gulosos,  Prev: Usando métodos de string,  Up: Problemas comuns

9.10.6.2 match() versus search()
................................

A função *note match(): 126e. somente verifica se a RE corresponde ao
início da string, enquanto *note search(): 126d. fará a varredura
percorrendo a string procurando por uma correspondência.  É importante
manter esta distinção em mente.  Lembre-se, ‘match()’ só irá relatar uma
correspondência bem-sucedida que começa em 0; se a correspondência não
começar em zero, ‘match()’ 'não' vai reportá-la.

     >>> print(re.match('super', 'superstition').span())
     (0, 5)
     >>> print(re.match('super', 'insuperable'))
     None

Por outro lado, *note search(): 126d. fará a varredura percorrendo a
string e relatando a primeira correspondência que encontrar.

     >>> print(re.search('super', 'superstition').span())
     (0, 5)
     >>> print(re.search('super', 'insuperable').span())
     (2, 7)

Às vezes, você vai ficar tentado a continuar usando *note re.match():
126e, e apenas adicionar ‘.*’ ao início de sua RE. Resista a essa
tentação e use *note re.search(): 126d. em vez disso.  O compilador de
expressão regular faz alguma análise das REs, a fim de acelerar o
processo de procura de uma correspondência.  Tal análise descobre o que
o primeiro caractere de uma string deve ser; por exemplo, um padrão
começando com ‘Crow’ deve corresponder com algo iniciando com ‘'C'’.  A
análise permite que o mecanismo faça a varredura rapidamente através da
string a procura do caractere inicial, apenas tentando a combinação
completa se um ‘'C'’ for encontrado.

Adicionar um ‘.*’ evita essa otimização, sendo necessário a varredura
até o final da string e, em seguida, retroceder para encontrar uma
correspondência para o resto da RE. Use *note re.search(): 126d. em vez
disso.


File: python.info,  Node: Gulosos versus não-gulosos,  Next: Usando re VERBOSE,  Prev: match versus search,  Up: Problemas comuns

9.10.6.3 Gulosos versus não-gulosos
...................................

Ao repetir uma expressão regular, como em ‘a*’, a ação resultante é
consumir o tanto do padrão quanto possível.  Este fato, muitas vezes
derruba você quando você está tentando corresponder com um par de
delimitadores balanceados, tal como os colchetes que cercam uma tag
HTML.  O padrão ingênuo para combinar uma única tag HTML não funciona
por causa da natureza gulosa de ‘.*’.

     >>> s = '<html><head><title>Title</title>'
     >>> len(s)
     32
     >>> print(re.match('<.*>', s).span())
     (0, 32)
     >>> print(re.match('<.*>', s).group())
     <html><head><title>Title</title>

A RE corresponde a ‘'<'’ em ‘'<html>'’, e o ‘.*’ consome o resto da
string.  Existe ainda mais coisa existente na RE, no entanto, e o ‘>’
pode não corresponder com o final da string, de modo que o mecanismo de
expressão regular tem que recuar caractere por caractere até encontrar
uma correspondência para ‘>’.  A correspondência final se estende do
‘'<'’ em ‘'<html>'’ ao ‘'>'’ em ‘'</title>'’, que não é o que você quer.

Neste caso, a solução é usar os quantificadores não-gulosos ‘*?’, ‘+?’,
‘??’ ou ‘{m,n}?’, que corresponde com o mínimo de texto possível.  No
exemplo acima, o ‘'>'’ é tentado imediatamente após a primeira
correspondência de ‘'<'’, e quando ele falhar, o mecanismo avança um
caractere de cada vez, experimentado ‘'>'’ a cada passo.  Isso produz
justamente o resultado correto:

     >>> print(re.match('<.*?>', s).group())
     <html>

(Note que a análise de HTML ou XML com expressões regulares é dolorosa.
Padrões “sujos e rápidos” irão lidar com casos comuns, mas HTML e XML
tem casos especiais que irão quebrar expressões regulares óbvias; com o
tempo, expressões regulares que você venha a escrever para lidar com
todos os casos possíveis, se tornarão um padrão muito complicado.  Use
um módulo de análise de HTML ou XML para tais tarefas.)


File: python.info,  Node: Usando re VERBOSE,  Prev: Gulosos versus não-gulosos,  Up: Problemas comuns

9.10.6.4 Usando re.VERBOSE
..........................

Nesse momento, você provavelmente deve ter notado que as expressões
regulares são de uma notação muito compacta, mas não é possível dizer
que são legíveis.  REs de complexidade moderada podem se tornar longas
coleções de barras invertidas, parênteses e metacaracteres, fazendo com
que se tornem difíceis de ler e compreender.

Para tais REs, especificar a flag *note re.VERBOSE: 2497. ao compilar a
expressão regular pode ser útil, porque permite que você formate a
expressão regular de forma mais clara.

O sinalizador ‘re.VERBOSE’ produz vários efeitos.  Espaço em branco na
expressão regular que não está dentro de uma classe de caracteres é
ignorado.  Isto significa que uma expressão como ‘dog | cat’ é
equivalente ao menos legível ‘dog|cat’, mas ‘[a b]’ ainda vai coincidir
com os caracteres ‘a’, ‘b’, ou um ‘espaço’.  Além disso, você também
pode colocar comentários dentro de uma RE, que se estendem de um
caractere ‘#’ até a próxima nova linha.  Quando usados junto com strings
de aspas triplas, isso permite as REs serem formatadas mais
ordenadamente:

     pat = re.compile(r"""
      \s*                 # Ignora espaços em branco no início
      (?P<header>[^:]+)   # Nome do cabeçalho
      \s* :               # Espaço em branco e caractere de dois pontos
      (?P<value>.*?)      # O valor do cabeçalho -- o *? costumava
                          # perder o seguinte espaço em branco ao final
      \s*$                # Espaço em branco no final até o fim da linha
     """, re.VERBOSE)

Isso é muito mais legível do que:

     pat = re.compile(r"\s*(?P<header>[^:]+)\s*:(?P<value>.*?)\s*$")


File: python.info,  Node: Comentários<2>,  Prev: Problemas comuns,  Up: Expressões Regulares

9.10.7 Comentários
------------------

Expressões regulares são um tópico complicado.  Esse documento ajudou
você a compreendê-las?  Existem partes que foram pouco claras, ou
situações que você vivenciou que não foram abordadas aqui?  Se assim
for, por favor, envie sugestões de melhorias para o autor.

O livro mais completo sobre expressões regulares é quase certamente o
Mastering Regular Expressions de Jeffrey Friedl’s, publicado pela
O’Reilly.  Infelizmente, ele se concentra exclusivamente em sabores de
expressões regulares do Perl e do Java, e não contém qualquer material
relativo a Python, por isso não vai ser útil como uma referência para a
programação em Python.  (A primeira edição cobre o módulo ‘regex’ agora
removido do Python, o que não vai te ajudar muito.)  Considere removê-lo
de sua biblioteca.


File: python.info,  Node: Programação de Soquetes,  Next: Técnicas de ordenação,  Prev: Expressões Regulares,  Up: Python HOWTOs

9.11 Programação de Soquetes
============================


Autor: Gordon McMillan

Resumo
......

Os soquetes são usados em quase todos os lugares, mas são uma das
tecnologias mais mal compreendidas.  Esta é uma visão geral contendo
10.000 pontos a respeitos dos soquetes.  Não é realmente um tutorial -
ainda terás o trabalho para tornar tudo operacionais.  Não abrange os
pontos finos (e há muitos deles), mas espero que lhe dê uma base
suficiente para começar a utilizar de maneira correta.

* Menu:

* Soquetes::
* Criando um Soquete::
* Usando um Soquete::
* Desconectando::
* Soquetes não-bloqueantes::


File: python.info,  Node: Soquetes,  Next: Criando um Soquete,  Up: Programação de Soquetes

9.11.1 Soquetes
---------------

Só trataremos dos soquetes INET (ou seja, IPv4), no entanto, os mesmos
representam ao menos 99% dos soquetes que estão atualmente em uso.  Só
estudaremos os soquetes STREAM (ou seja, TCP) - a menos que você
realmente saiba o que está fazendo (nesse caso, este documento não é
para você!), terás um melhor conhecimento sobre o comportamento e o
desempenho dos soquetes STREAM do que qualquer outra coisa.  Tentarei
aclarar o mistério sobre o que realmente é um soquete, bem como,
apresentarei dicas de como trabalhar com soquetes bloqueantes e os não
bloqueantes.  Começaremos o estudo falando da razão pela qual bloquear
um soquete.  Precisas saber como os mesmos (os soquetes bloqueantes)
antes de estudar os não bloqueantes

Parte do problema em compreender o funcionamento se dá pelo fato de que
o “soquete” pode ter significados que são sutilmente diferentes,
dependendo do contexto.  Então, primeiro, vamos fazer uma distinção
entre um soquete “cliente” - o ponto final de uma conversa e um soquete
“servidor”, que mais parece como um operador de painel.  O aplicativo
Cliente (seu navegador, por exemplo) usa soquetes “cliente” exclusivos;
O servidor Web com o qual conversamos faz uso de soquetes “servidor” e
soquetes de “cliente”.

* Menu:

* História::


File: python.info,  Node: História,  Up: Soquetes

9.11.1.1 História
.................

Das várias formas de IPC (Inter Process Communication), os soquetes são,
de longe, os mais populares.  Em qualquer plataforma, muito provável
existirão outras formas de IPC que sejam mais rápidas, porém, para a
comunicação entre plataformas, os soquetes são sobre o único jogo na
cidade.

They were invented in Berkeley as part of the BSD flavor of Unix.  They
spread like wildfire with the internet.  With good reason — the
combination of sockets with INET makes talking to arbitrary machines
around the world unbelievably easy (at least compared to other schemes).


File: python.info,  Node: Criando um Soquete,  Next: Usando um Soquete,  Prev: Soquetes,  Up: Programação de Soquetes

9.11.2 Criando um Soquete
-------------------------

De forma geral, quando clicastes no link que te trouxe até esta página
(documentação do Python), o que o teu navegador fez, foi o seguinte:

     # create an INET, STREAMing socket
     s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     # now connect to the web server on port 80 - the normal http port
     s.connect(("www.python.org", 80))

Quando a ‘connect’ (conexão) foi estabelecida, o soquete ‘s’ pode ser
utilizado para enviar uma solicitação de texto para a página.  O mesmo
soquete é que irá ler a resposta e, em seguida, o mesmo será destruído.
Isso mesmo, será destruído.  Os soquetes de Clientes normalmente são
usados apenas numa única transação (troca) (ou um pequeno conjunto
sequencial de transações).

O que acontece no lado do servidor Web é um pouco mais complexo.
Primeiro, o Servidor Web cria um “soquete tipo servidor”:

     # create an INET, STREAMing socket
     serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     # bind the socket to a public host, and a well-known port
     serversocket.bind((socket.gethostname(), 80))
     # become a server socket
     serversocket.listen(5)

Algumas coisas que deves observar: usamos ‘socket.gethostname()’ para
que o soquete esteja visível ao mundo exterior.  Se tivéssemos usado
‘s.bind(('localhost', 80))’ ou ‘s.bind(('127.0.0.1', 80))’ ainda
teríamos um soquete do tipo “servidor”, mas o mesmo só estaria visível
dentro do computador em que está sendo executado.  ‘s.bind(('', 80))’
determina que o soquete estará acessível por qualquer computador que
possuas o endereço IP do computador.

Uma segunda coisa que precisas observar é: as portas baixas, normalmente
estão reservadas para serviços “bem conhecidos”, tais como (HTTP, SNMP
etc).  Caso estejas brincando, utilize um número alto (números contendo
4 dígitos).

Por fim, o argumento “listen” diz à biblioteca de soquetes que queremos
enfileirar no máximo 5 requisições de conexão (normalmente o máximo)
antes de recusar começar a recusar conexões externas.  Caso o resto do
código esteja escrito corretamente, isso deverá ser o suficiente.

Agora que temos um soquete tipo “servidor”, que está ouvindo a porta 80,
podemos entrar no laço de repetição principal do servidor web:

     while True:
         # accept connections from outside
         (clientsocket, address) = serversocket.accept()
         # now do something with the clientsocket
         # in this case, we'll pretend this is a threaded server
         ct = client_thread(clientsocket)
         ct.run()

Na verdade, existem 3 formas gerais nas quais este loop pode ser
implementado - despachando um handle que lide com o ‘clientsocket’,
criando um novo processo que funcione com o ‘clientsocket’, ou
reestruture o aplicativo para trabalhar com soquetes não bloqueáveis e
multiplexar entre os nossos soquetes tipo “servidor” e qualquer
‘cliente’ ativo que faça uso do ‘select’.  Trataremos mais sobre isso
posteriormente.  O importante que temos que saber neste momento é isso:
isso é 'tudo' o que um soquete tipo “Servidor” irá fazer.  O mesmo não
enviar quaisquer dado.  Não recebe dados.  Apenas produz soquetes
“cliente”.  Cada ‘clientsocket’ será criado em resposta a algum 'outro'
soquete “cliente” que fará uma ‘connect()’ ao um determinado host numa
determinada porta que estamos vinculados.  Será dessa forma que criamos
aquele “cliente”, voltaremos a ouvir mais conexões.  Os dois “clientes”
são livres para conversar - eles estão usando uma porta alocada
dinamicamente que será descartada quando a conversa terminar.

* Menu:

* IPC::


File: python.info,  Node: IPC,  Up: Criando um Soquete

9.11.2.1 IPC
............

Se precisas que o IPC seja rápido entre dois processos numa máquina,
deverás procurar por pipes ou compartilhamento de memória.  Se decidires
usar os soquetes AF_INET, vincule o soquete “servidor” a ‘'localhost'`’.
Na maioria das plataformas, isso levará um atalho em torno de algumas
camadas de código de rede e funcionará um pouco mais rápido.

Ver também
..........

A módulo *note multiprocessing: 94. faz a integração do IPC de forma
multiplataforma numa API de nível mais alto.


File: python.info,  Node: Usando um Soquete,  Next: Desconectando,  Prev: Criando um Soquete,  Up: Programação de Soquetes

9.11.3 Usando um Soquete
------------------------

A primeira coisa que precisamos observar, é que o soquete “cliente” do
navegador e o soquete “cliente” do servidor Web são “animais” idênticos.
Ou seja, esta é uma conversa “peer to peer”.  Ou, em outras palavras,
'como designer, terás que decidir quais são as regras da etiqueta para
uma conversa'.  Normalmente, o soquete ‘connect’ando inicia a conversa,
enviando uma solicitação ou talvez um sinal.  Mas essa é uma decisão de
design - não é uma regra de soquetes.

Agora, há dois conjuntos de verbos que podemos usar na comunicação.
Podemos usar ‘send’ e ‘recv’, ou podemos transformar o seu soquete
cliente numa “besta” semelhante a um arquivo e usar ‘read’ e ‘write’.  O
último é o modo como Java apresenta seus soquetes.  Não tratarei disso
aqui, exceto para avisar que precisas usar o ‘flush’ com soquetes.
Estes são “arquivos” em buffer e um erro comum é “escrever” algo e, em
seguida, “ler” uma resposta.  Sem que haja um ‘flush’ lá dentro, poderás
esperar eternamente pela resposta, porque o pedido ainda poderá estar no
buffer de saída.

Agora, chegamos ao principal obstáculo no uso dos soquetes - ‘send’ e
‘recv’ operam nos buffers de rede.  Eles não lidam necessariamente com
todos os bytes que você os entrega (ou esperam deles), porque o foco
principal deles é lidar com os buffers de rede.  Em geral, os mesmos
retornam quando os buffers de rede associados foram preenchidos (‘send’)
ou esvaziados (‘recv’).  Eles então lhe dizem quantos bytes eles
trataram.  É 'sua' responsabilidade chamá-los novamente até que a sua
mensagem tenha sido completamente tratada.

Quando um ‘recv’ retornar 0 bytes, significa que o outro lado finalizou
a conexão (ou está no processo de fechamento) da conexão.  Não receberás
mais dados nesta conexão.  Pra sempre.  Poderás enviar dados com
sucesso; Falaremos mais sobre isso posteriormente.

Um protocolo como o HTTP utiliza um soquete para apenas uma
transferência.  O cliente envia uma solicitação e depois lê uma
resposta.  É isso aí.  O soquete é descartado.  Isso significa que um
cliente pode detectar o final da resposta ao receber 0 bytes.

But if you plan to reuse your socket for further transfers, you need to
realize that 'there is no' EOT (End of Transfer) 'on a socket.'  I
repeat: if a socket ‘send’ or ‘recv’ returns after handling 0 bytes, the
connection has been broken.  If the connection has 'not' been broken,
you may wait on a ‘recv’ forever, because the socket will 'not' tell you
that there’s nothing more to read (for now).  Now if you think about
that a bit, you’ll come to realize a fundamental truth of sockets:
'messages must either be fixed length' (yuck), 'or be delimited'
(shrug), 'or indicate how long they are' (much better), 'or end by
shutting down the connection'.  The choice is entirely yours, (but some
ways are righter than others).

Assuming you don’t want to end the connection, the simplest solution is
a fixed length message:

     class MySocket:
         """demonstration class only
           - coded for clarity, not efficiency
         """

         def __init__(self, sock=None):
             if sock is None:
                 self.sock = socket.socket(
                                 socket.AF_INET, socket.SOCK_STREAM)
             else:
                 self.sock = sock

         def connect(self, host, port):
             self.sock.connect((host, port))

         def mysend(self, msg):
             totalsent = 0
             while totalsent < MSGLEN:
                 sent = self.sock.send(msg[totalsent:])
                 if sent == 0:
                     raise RuntimeError("socket connection broken")
                 totalsent = totalsent + sent

         def myreceive(self):
             chunks = []
             bytes_recd = 0
             while bytes_recd < MSGLEN:
                 chunk = self.sock.recv(min(MSGLEN - bytes_recd, 2048))
                 if chunk == b'':
                     raise RuntimeError("socket connection broken")
                 chunks.append(chunk)
                 bytes_recd = bytes_recd + len(chunk)
             return b''.join(chunks)

The sending code here is usable for almost any messaging scheme - in
Python you send strings, and you can use ‘len()’ to determine its length
(even if it has embedded ‘\0’ characters).  It’s mostly the receiving
code that gets more complex.  (And in C, it’s not much worse, except you
can’t use ‘strlen’ if the message has embedded ‘\0’s.)

The easiest enhancement is to make the first character of the message an
indicator of message type, and have the type determine the length.  Now
you have two ‘recv’s - the first to get (at least) that first character
so you can look up the length, and the second in a loop to get the rest.
If you decide to go the delimited route, you’ll be receiving in some
arbitrary chunk size, (4096 or 8192 is frequently a good match for
network buffer sizes), and scanning what you’ve received for a
delimiter.

Uma complicação a ter em conta: se o seu protocolo de conversa permitir
que várias mensagens sejam enviadas de volta para trás (sem algum tipo
de resposta) e você passar ‘recv’ um tamanho arbitrário de bloco, você
pode acabar lendo o início de uma mensagem seguinte.  Você precisará
deixar isso de lado e segurá-lo até que seja necessário.

Prefixing the message with its length (say, as 5 numeric characters)
gets more complex, because (believe it or not), you may not get all 5
characters in one ‘recv’.  In playing around, you’ll get away with it;
but in high network loads, your code will very quickly break unless you
use two ‘recv’ loops - the first to determine the length, the second to
get the data part of the message.  Nasty.  This is also when you’ll
discover that ‘send’ does not always manage to get rid of everything in
one pass.  And despite having read this, you will eventually get bit by
it!

In the interests of space, building your character, (and preserving my
competitive position), these enhancements are left as an exercise for
the reader.  Lets move on to cleaning up.

* Menu:

* Dados Binários::


File: python.info,  Node: Dados Binários,  Up: Usando um Soquete

9.11.3.1 Dados Binários
.......................

It is perfectly possible to send binary data over a socket.  The major
problem is that not all machines use the same formats for binary data.
For example, network byte order(1) is big-endian, with the most
significant byte first, so a 16 bit integer with the value ‘1’ would be
the two hex bytes ‘00 01’.  However, most common processors (x86/AMD64,
ARM, RISC-V), are little-endian, with the least significant byte first -
that same ‘1’ would be ‘01 00’.

Socket libraries have calls for converting 16 and 32 bit integers -
‘ntohl, htonl, ntohs, htons’ where “n” means 'network' and “h” means
'host', “s” means 'short' and “l” means 'long'.  Where network order is
host order, these do nothing, but where the machine is byte-reversed,
these swap the bytes around appropriately.

In these days of 64-bit machines, the ASCII representation of binary
data is frequently smaller than the binary representation.  That’s
because a surprising amount of the time, most integers have the value 0,
or maybe 1.  The string ‘"0"’ would be two bytes, while a full 64-bit
integer would be 8.  Of course, this doesn’t fit well with fixed-length
messages.  Decisions, decisions.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Endianness#Networking


File: python.info,  Node: Desconectando,  Next: Soquetes não-bloqueantes,  Prev: Usando um Soquete,  Up: Programação de Soquetes

9.11.4 Desconectando
--------------------

Strictly speaking, you’re supposed to use ‘shutdown’ on a socket before
you ‘close’ it.  The ‘shutdown’ is an advisory to the socket at the
other end.  Depending on the argument you pass it, it can mean “I’m not
going to send anymore, but I’ll still listen”, or “I’m not listening,
good riddance!”.  Most socket libraries, however, are so used to
programmers neglecting to use this piece of etiquette that normally a
‘close’ is the same as ‘shutdown(); close()’.  So in most situations, an
explicit ‘shutdown’ is not needed.

One way to use ‘shutdown’ effectively is in an HTTP-like exchange.  The
client sends a request and then does a ‘shutdown(1)’.  This tells the
server “This client is done sending, but can still receive.” The server
can detect “EOF” by a receive of 0 bytes.  It can assume it has the
complete request.  The server sends a reply.  If the ‘send’ completes
successfully then, indeed, the client was still receiving.

Python takes the automatic shutdown a step further, and says that when a
socket is garbage collected, it will automatically do a ‘close’ if it’s
needed.  But relying on this is a very bad habit.  If your socket just
disappears without doing a ‘close’, the socket at the other end may hang
indefinitely, thinking you’re just being slow.  'Please' ‘close’ your
sockets when you’re done.

* Menu:

* Quando o Soquete Morre::


File: python.info,  Node: Quando o Soquete Morre,  Up: Desconectando

9.11.4.1 Quando o Soquete Morre
...............................

Probably the worst thing about using blocking sockets is what happens
when the other side comes down hard (without doing a ‘close’).  Your
socket is likely to hang.  TCP is a reliable protocol, and it will wait
a long, long time before giving up on a connection.  If you’re using
threads, the entire thread is essentially dead.  There’s not much you
can do about it.  As long as you aren’t doing something dumb, like
holding a lock while doing a blocking read, the thread isn’t really
consuming much in the way of resources.  Do 'not' try to kill the thread
- part of the reason that threads are more efficient than processes is
that they avoid the overhead associated with the automatic recycling of
resources.  In other words, if you do manage to kill the thread, your
whole process is likely to be screwed up.


File: python.info,  Node: Soquetes não-bloqueantes,  Prev: Desconectando,  Up: Programação de Soquetes

9.11.5 Soquetes não-bloqueantes
-------------------------------

If you’ve understood the preceding, you already know most of what you
need to know about the mechanics of using sockets.  You’ll still use the
same calls, in much the same ways.  It’s just that, if you do it right,
your app will be almost inside-out.

In Python, you use ‘socket.setblocking(False)’ to make it non-blocking.
In C, it’s more complex, (for one thing, you’ll need to choose between
the BSD flavor ‘O_NONBLOCK’ and the almost indistinguishable POSIX
flavor ‘O_NDELAY’, which is completely different from ‘TCP_NODELAY’),
but it’s the exact same idea.  You do this after creating the socket,
but before using it.  (Actually, if you’re nuts, you can switch back and
forth.)

A principal diferença mecânica é que ‘send’, ‘recv’, ‘connect’ e
‘accept’ podem retornar sem terem feito nada.  Terás (claro) uma série
de escolhas.  Poderás verificar o código de retorno e os códigos de erro
que geralmente nos deixam loucos.  Se não acreditas em mim, tente alguma
vez.  Seu aplicativo vai crescendo, buggy e sugam CPU. Então, vamos
ignorar as soluções mortas no cérebro e fazê-lo direito.

Utilize ‘select’.

In C, coding ‘select’ is fairly complex.  In Python, it’s a piece of
cake, but it’s close enough to the C version that if you understand
‘select’ in Python, you’ll have little trouble with it in C:

     ready_to_read, ready_to_write, in_error = \
                    select.select(
                       potential_readers,
                       potential_writers,
                       potential_errs,
                       timeout)

You pass ‘select’ three lists: the first contains all sockets that you
might want to try reading; the second all the sockets you might want to
try writing to, and the last (normally left empty) those that you want
to check for errors.  You should note that a socket can go into more
than one list.  The ‘select’ call is blocking, but you can give it a
timeout.  This is generally a sensible thing to do - give it a nice long
timeout (say a minute) unless you have good reason to do otherwise.

In return, you will get three lists.  They contain the sockets that are
actually readable, writable and in error.  Each of these lists is a
subset (possibly empty) of the corresponding list you passed in.

If a socket is in the output readable list, you can be
as-close-to-certain-as-we-ever-get-in-this-business that a ‘recv’ on
that socket will return 'something'.  Same idea for the writable list.
You’ll be able to send 'something'.  Maybe not all you want to, but
'something' is better than nothing.  (Actually, any reasonably healthy
socket will return as writable - it just means outbound network buffer
space is available.)

If you have a “server” socket, put it in the potential_readers list.  If
it comes out in the readable list, your ‘accept’ will (almost certainly)
work.  If you have created a new socket to ‘connect’ to someone else,
put it in the potential_writers list.  If it shows up in the writable
list, you have a decent chance that it has connected.

Actually, ‘select’ can be handy even with blocking sockets.  It’s one
way of determining whether you will block - the socket returns as
readable when there’s something in the buffers.  However, this still
doesn’t help with the problem of determining whether the other end is
done, or just busy with something else.

'Portability alert': On Unix, ‘select’ works both with the sockets and
files.  Don’t try this on Windows.  On Windows, ‘select’ works with
sockets only.  Also note that in C, many of the more advanced socket
options are done differently on Windows.  In fact, on Windows I usually
use threads (which work very, very well) with my sockets.


File: python.info,  Node: Técnicas de ordenação,  Next: Unicode<3>,  Prev: Programação de Soquetes,  Up: Python HOWTOs

9.12 Técnicas de ordenação
==========================


Autor: Andrew Dalke e Raymond Hettinger

As listas em Python possuem um método embutido *note list.sort(): be8.
que modifica a lista em si.  Há também a função embutida *note sorted():
be7. que constrói uma nova lista ordenada à partir de um iterável.

Neste documento, exploramos várias técnicas para ordenar dados
utilizando Python.

* Menu:

* Básico de ordenação::
* Funções chave::
* Operator Module Functions and Partial Function Evaluation::
* Ascendente e descendente::
* Estabilidade de Ordenação e Ordenações Complexas::
* Decorate-Sort-Undecorate::
* Funções de comparação::
* Curiosidades e conclusões: Curiosidades e conclusões<2>.
* Ordenações parciais::


File: python.info,  Node: Básico de ordenação,  Next: Funções chave,  Up: Técnicas de ordenação

9.12.1 Básico de ordenação
--------------------------

Uma ordenação ascendente simples é muito fácil: apenas chame a função
*note sorted(): be7.  Você terá como retorno uma nova lista ordenada:

     >>> sorted([5, 2, 3, 1, 4])
     [1, 2, 3, 4, 5]

Você também pode utilizar o método *note list.sort(): be8.  Ele
modificará a lista localmente (e retornará ‘None’ para evitar confusão).
Usualmente este método é menos conveniente que a função *note sorted():
be7. - mas, se a lista original não for posteriormente útil, esta
maneira será levemente mais eficiente.

     >>> a = [5, 2, 3, 1, 4]
     >>> a.sort()
     >>> a
     [1, 2, 3, 4, 5]

Outra diferença é que o método *note list.sort(): be8. é aplicável
apenas às listas.  Em contrapartida, a função *note sorted(): be7.
aceita qualquer iterável.

     >>> sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})
     [1, 2, 3, 4, 5]


File: python.info,  Node: Funções chave,  Next: Operator Module Functions and Partial Function Evaluation,  Prev: Básico de ordenação,  Up: Técnicas de ordenação

9.12.2 Funções chave
--------------------

Tanto o método *note list.sort(): be8. quanto a função *note sorted():
be7. possuem um parâmetro 'key' que especifica uma função (ou outro
chamável) a ser chamada para cada elemento da lista antes de ser
realizada a comparação.

Por exemplo, aqui há uma comparação case-insensitive de strings.

     >>> sorted("Essa é uma string de teste do Andrew".split(), key=str.casefold)
     ['Andrew', 'de', 'do', 'Essa', 'string', 'teste', 'uma', 'é']

O valor do parâmetro 'key' deve ser uma função (ou outro chamável) que
recebe um único argumento e retorna uma chave à ser utilizada na
ordenação.  Como a função chave é chamada exatamente uma vez para cada
elemento, esta técnica é rápida.

Um padrão comum é ordenar objetos complexos utilizando um dos índices do
objeto como chave.  Por exemplo:

     >>> tuplas_alunos = [
     ...     ('joão', 'A', 15),
     ...     ('joana', 'B', 12),
     ...     ('davi', 'B', 10),
     ... ]
     >>> sorted(tuplas_alunos, key=lambda aluno: aluno[2])   # ordena por idade
     [('davi', 'B', 10), ('joana', 'B', 12), ('joão', 'A', 15)]

A mesma técnica funciona com objetos que possuem atributos nomeados.
Por exemplo:

     >>> class Aluno:
     ...     def __init__(self, nome, nota, idade):
     ...         self.nome = nome
     ...         self.nota = nota
     ...         self.idade = idade
     ...     def __repr__(self):
     ...         return repr((self.nome, self.nota, self.idade))

     >>> objetos_alunos = [
     ...     Aluno('john', 'A', 15),
     ...     Aluno('jane', 'B', 12),
     ...     Aluno('dave', 'B', 10),
     ... ]
     >>> sorted(objetos_alunos, key=lambda aluno: aluno.idade)   # ordena por idade
     [('davi', 'B', 10), ('joana', 'B', 12), ('joão', 'A', 15)]

Objetos com atríbutos nomeados podem ser criados como uma classe padrão,
igual ao exemplo acima, podem ser instâncias de *note dataclass: 1cb. ou
mesmo uma *note named tuple: 64e.


File: python.info,  Node: Operator Module Functions and Partial Function Evaluation,  Next: Ascendente e descendente,  Prev: Funções chave,  Up: Técnicas de ordenação

9.12.3 Operator Module Functions and Partial Function Evaluation
----------------------------------------------------------------

O padrão de *note função chave: e31. mostrado acima é muito comum, por
isso, Python provê funções convenientes para tornar as funções de acesso
mais fáceis e rápidas.  O módulo *note operator: 9f. tem as funções
*note itemgetter(): a6b, *note attrgetter(): e60. e *note
methodcaller(): e61.

Usando estas funções, os exemplos acima se tornam mais simples e mais
rápidos:

     >>> from operator import itemgetter, attrgetter

     >>> sorted(student_tuples, key=itemgetter(2))
     [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

     >>> sorted(student_objects, key=attrgetter('age'))
     [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

As funções do módulo operator permite múltiplos níveis de ordenação.
Por exemplo, ordenar por 'grade' e então por 'age':

     >>> sorted(student_tuples, key=itemgetter(1,2))
     [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

     >>> sorted(student_objects, key=attrgetter('grade', 'age'))
     [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

The *note functools: 5f. module provides another helpful tool for making
key-functions.  The *note partial(): 414. function can reduce the
arity(1) of a multi-argument function making it suitable for use as a
key-function.

     >>> from functools import partial
     >>> from unicodedata import normalize

     >>> names = 'Zoë Åbjørn Núñez Élana Zeke Abe Nubia Eloise'.split()

     >>> sorted(names, key=partial(normalize, 'NFD'))
     ['Abe', 'Åbjørn', 'Eloise', 'Élana', 'Nubia', 'Núñez', 'Zeke', 'Zoë']

     >>> sorted(names, key=partial(normalize, 'NFC'))
     ['Abe', 'Eloise', 'Nubia', 'Núñez', 'Zeke', 'Zoë', 'Åbjørn', 'Élana']

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Arity


File: python.info,  Node: Ascendente e descendente,  Next: Estabilidade de Ordenação e Ordenações Complexas,  Prev: Operator Module Functions and Partial Function Evaluation,  Up: Técnicas de ordenação

9.12.4 Ascendente e descendente
-------------------------------

Tanto o método *note list.sort(): be8. quanto a função *note sorted():
be7. aceitam um valor booleano para o parâmetro 'reverse'.  Essa flag é
utilizada para ordenações descendentes.  Por exemplo, para retornar os
dados de estudantes pela ordem inversa de 'age':

     >>> sorted(student_tuples, key=itemgetter(2), reverse=True)
     [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

     >>> sorted(student_objects, key=attrgetter('age'), reverse=True)
     [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]


File: python.info,  Node: Estabilidade de Ordenação e Ordenações Complexas,  Next: Decorate-Sort-Undecorate,  Prev: Ascendente e descendente,  Up: Técnicas de ordenação

9.12.5 Estabilidade de Ordenação e Ordenações Complexas
-------------------------------------------------------

Ordenações são garantidas de serem estáveis(1).  Isso significa que
quando múltiplos registros possuem a mesma chave, eles terão sua ordem
original preservada.

     >>> data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)]
     >>> sorted(data, key=itemgetter(0))
     [('blue', 1), ('blue', 2), ('red', 1), ('red', 2)]

Observe como os dois registros de 'blue' permanecem em sua ordem
original de forma que ‘('blue',1)’ é garantido de preceder ‘('blue',2)’.

Esta maravilhosa propriedade permite que você construa ordenações
complexas em uma série de passos de ordenação.  Por exemplo, para
ordenar os registros de estudante por ordem descendente de 'grade' e
então ascendente de 'age', primeiro ordene 'age' e depois ordene
novamente utilizando 'grade':

     >>> s = sorted(student_objects, key=attrgetter('age'))     # sort on secondary key
     >>> sorted(s, key=attrgetter('grade'), reverse=True)       # now sort on primary key, descending
     [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

Isso pode ser abstrato no caso das funções invólucros que podem receber
uma lista e uma tupla com o campos e então ordená-los em múltiplos
passos.

     >>> def multisort(xs, specs):
     ...     for key, reverse in reversed(specs):
     ...         xs.sort(key=attrgetter(key), reverse=reverse)
     ...     return xs

     >>> multisort(list(student_objects), (('grade', True), ('age', False)))
     [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

O algoritmo Timsort(2) utilizado no Python realiza múltiplas ordenações
de maneira eficiente, pois se aproveita de qualquer ordenação já
presente no conjunto de dados.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Sorting_algorithm#Stability

   (2) https://en.wikipedia.org/wiki/Timsort


File: python.info,  Node: Decorate-Sort-Undecorate,  Next: Funções de comparação,  Prev: Estabilidade de Ordenação e Ordenações Complexas,  Up: Técnicas de ordenação

9.12.6 Decorate-Sort-Undecorate
-------------------------------

Esse item idiomático, chamado de Decorate-Sort-Undecorate, é realizado
em três passos:

   * Primeiro, a lista inicial é decorada com novos valores que
     controlarão a ordem em que ocorrerá a ordenação

   * Segundo, a lista decorada é ordenada.

   * Finalmente, os valores decorados são removidos, criando uma lista
     que contém apenas os valores iniciais na nova ordenação.

Por exemplo, para ordenar os dados dos estudantes por 'grade' usando a
abordagem DSU:

     >>> decorated = [(student.grade, i, student) for i, student in enumerate(student_objects)]
     >>> decorated.sort()
     >>> [student for grade, i, student in decorated]               # undecorate
     [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]

Esse padrão idiomático funciona porque tuplas são comparadas
lexicograficamente; os primeiros itens são comparados; se eles são
semelhantes, então os segundos itens são comparados e assim
sucessivamente.

Não é estritamente necessário incluir o índice 'i' em todos os casos de
listas decoradas, mas fazer assim traz dois benefícios:

   * A ordenação é estável - se dois itens tem a mesma chave, suas
     ordens serão preservadas na lista ordenada

   * Os itens originais não precisarão ser comparados porque a ordenação
     de tuplas decoradas será determinada por no máximo os primeiros
     dois itens.  Então, por exemplo, a lista original poderia conter
     números complexos que não poderão ser ordenados diretamente.

Outro nome para este padrão idiomático é Schwartzian transform(1) de
Randal L. Schwartz, que popularizou isto entre os programadores Perl.

Agora que a ordenação do Python prevê funções-chave, essa técnica não se
faz mais necessária.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Schwartzian_transform


File: python.info,  Node: Funções de comparação,  Next: Curiosidades e conclusões<2>,  Prev: Decorate-Sort-Undecorate,  Up: Técnicas de ordenação

9.12.7 Funções de comparação
----------------------------

Unlike key functions that return an absolute value for sorting, a
comparison function computes the relative ordering for two inputs.

For example, a balance scale(1) compares two samples giving a relative
ordering: lighter, equal, or heavier.  Likewise, a comparison function
such as ‘cmp(a, b)’ will return a negative value for less-than, zero if
the inputs are equal, or a positive value for greater-than.

It is common to encounter comparison functions when translating
algorithms from other languages.  Also, some libraries provide
comparison functions as part of their API. For example, *note
locale.strcoll(): 3f82. is a comparison function.

To accommodate those situations, Python provides *note
functools.cmp_to_key: 121a. to wrap the comparison function to make it
usable as a key function:

     sorted(words, key=cmp_to_key(strcoll))  # locale-aware sort order

   ---------- Footnotes ----------

   (1) 
https://upload.wikimedia.org/wikipedia/commons/1/17/Balance_à_tabac_1850.JPG


File: python.info,  Node: Curiosidades e conclusões<2>,  Next: Ordenações parciais,  Prev: Funções de comparação,  Up: Técnicas de ordenação

9.12.8 Curiosidades e conclusões
--------------------------------

   * For locale aware sorting, use *note locale.strxfrm(): 15f3. for a
     key function or *note locale.strcoll(): 3f82. for a comparison
     function.  This is necessary because “alphabetical” sort orderings
     can vary across cultures even if the underlying alphabet is the
     same.

   * O parâmetro 'reverse' ainda mantém a estabilidade da ordenação
     (para que os registros com chaves iguais mantenham a ordem
     original).  Curiosamente, esse efeito pode ser simulado sem o
     parâmetro usando a função embutida *note reversed(): 869. duas
     vezes:

          >>> data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)]
          >>> standard_way = sorted(data, key=itemgetter(0), reverse=True)
          >>> double_reversed = list(reversed(sorted(reversed(data), key=itemgetter(0))))
          >>> assert standard_way == double_reversed
          >>> standard_way
          [('red', 1), ('red', 2), ('blue', 1), ('blue', 2)]

   * As rotinas de classificação usam ‘<’ ao fazer comparações entre
     dois objetos.  Portanto, é fácil adicionar uma ordem de
     classificação padrão a uma classe definindo um método *note
     __lt__(): 12e2.:

          >>> Student.__lt__ = lambda self, other: self.age < other.age
          >>> sorted(student_objects)
          [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

     However, note that ‘<’ can fall back to using *note __gt__(): 1350.
     if *note __lt__(): 12e2. is not implemented (see *note
     object.__lt__(): 12e2. for details on the mechanics).  To avoid
     surprises, PEP 8(1) recommends that all six comparison methods be
     implemented.  The *note total_ordering(): f75. decorator is
     provided to make that task easier.

   * As funções principais não precisam depender diretamente dos objetos
     que estão sendo ordenados.  Uma função chave também pode acessar
     recursos externos.  Por exemplo, se as notas dos alunos estiverem
     armazenadas em um dicionário, elas poderão ser usadas para ordenar
     uma lista separada de nomes de alunos:

          >>> students = ['dave', 'john', 'jane']
          >>> newgrades = {'john': 'F', 'jane':'A', 'dave': 'C'}
          >>> sorted(students, key=newgrades.__getitem__)
          ['jane', 'dave', 'john']

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0008/


File: python.info,  Node: Ordenações parciais,  Prev: Curiosidades e conclusões<2>,  Up: Técnicas de ordenação

9.12.9 Ordenações parciais
--------------------------

Some applications require only some of the data to be ordered.  The
standard library provides several tools that do less work than a full
sort:

   * *note min(): f3a. and *note max(): f3b. return the smallest and
     largest values, respectively.  These functions make a single pass
     over the input data and require almost no auxiliary memory.

   * *note heapq.nsmallest(): 26d7. and *note heapq.nlargest(): 26d6.
     return the 'n' smallest and largest values, respectively.  These
     functions make a single pass over the data keeping only 'n'
     elements in memory at a time.  For values of 'n' that are small
     relative to the number of inputs, these functions make far fewer
     comparisons than a full sort.

   * *note heapq.heappush(): 1504. and *note heapq.heappop(): 1505.
     create and maintain a partially sorted arrangement of data that
     keeps the smallest element at position ‘0’.  These functions are
     suitable for implementing priority queues which are commonly used
     for task scheduling.


File: python.info,  Node: Unicode<3>,  Next: Como buscar recursos da Internet usando o pacote urllib,  Prev: Técnicas de ordenação,  Up: Python HOWTOs

9.13 Unicode
============


Versão: 1.12

Este documento fala sobre o suporte do Python para a especificação
Unicode de representação de dados textuais e explica diversos problemas
que as pessoas costumam encontrar quando tentam trabalhar com Unicode.

* Menu:

* Introdução ao Unicode::
* Suporte a Unicode no Python::
* Reading and Writing Unicode Data::
* Reconhecimentos: Reconhecimentos<10>.


File: python.info,  Node: Introdução ao Unicode,  Next: Suporte a Unicode no Python,  Up: Unicode<3>

9.13.1 Introdução ao Unicode
----------------------------

* Menu:

* Definições::
* Codificações::
* Referências: Referências<3>.


File: python.info,  Node: Definições,  Next: Codificações,  Up: Introdução ao Unicode

9.13.1.1 Definições
...................

Os programas de hoje precisam lidar com uma grande variedade de
caracteres.  Aplicações são frequentemente internacionalizadas para
mostrar mensagens e gerar saídas em uma variedade de idiomas
selecionáveis por usuários; o mesmo programa precisar apresentar
mensagens de erro em inglês, francês, japonês, hebraico ou russo.
Conteúdo da web pode ser escrito em qualquer um desses idiomas e ainda
incluir uma variedade de emojis.  O tipo string do Python usa o padrão
Unicode para representação de caracteres, o que permite aos programas em
Python funcionar com todos estes diferentes caracteres.

Unicode (‘https://www.unicode.org/’) é a especificação que visa listar
cada caractere utilizado pelos idiomas humanos e dar a cada caractere um
código único.  As especificações Unicode são continuamente revisadas e
atualizadas para adicionar novos idiomas e símbolos.

A 'character' is the smallest possible component of a text.  ‘A’, ‘B’,
‘C’, etc., are all different characters.  So are ‘È’ and ‘Í’.
Characters vary depending on the language or context you’re talking
about.  For example, there’s a character for “Roman Numeral One”, ‘Ⅰ’,
that’s separate from the uppercase letter ‘I’.  They’ll usually look the
same, but these are two different characters that have different
meanings.

The Unicode standard describes how characters are represented by 'code
points'.  A code point value is an integer in the range 0 to 0x10FFFF
(about 1.1 million values, the actual number assigned(1) is less than
that).  In the standard and in this document, a code point is written
using the notation ‘U+265E’ to mean the character with value ‘0x265e’
(9,822 in decimal).

O padrão Unicode contém várias tabelas listando caracteres e seus pontos
de código:

     0061    'a'; LATIN SMALL LETTER A
     0062    'b'; LATIN SMALL LETTER B
     0063    'c'; LATIN SMALL LETTER C
     ...
     007B    '{'; LEFT CURLY BRACKET
     ...
     2167    'Ⅷ'; ROMAN NUMERAL EIGHT
     2168    'Ⅸ'; ROMAN NUMERAL NINE
     ...
     265E    '♞'; BLACK CHESS KNIGHT
     265F    '♟'; BLACK CHESS PAWN
     ...
     1F600   '😀'; GRINNING FACE
     1F609   '😉'; WINKING FACE
     ...

Strictly, these definitions imply that it’s meaningless to say ‘this is
character ‘U+265E’’.  ‘U+265E’ is a code point, which represents some
particular character; in this case, it represents the character ‘BLACK
CHESS KNIGHT’, ‘♞’.  In informal contexts, this distinction between code
points and characters will sometimes be forgotten.

Um caractere é representado na tela ou no papel como um conjunto de
elementos gráficos que é chamado de 'glifo'.  O glifo para o A
maiúsculo, por exemplo, são dois traços diagonais e um traço horizontal,
embora os detalhes exatos dependem da fonte utilizada.  Na maior parte
do código Python não é preciso se preocupar com glifos; descobrir qual o
glifo correto a ser mostrado é normalmente parte do trabalho da
ferramenta GUI ou do responsável pela renderização de fontes no
terminal.

   ---------- Footnotes ----------

   (1) https://www.unicode.org/versions/latest/#Summary


File: python.info,  Node: Codificações,  Next: Referências<3>,  Prev: Definições,  Up: Introdução ao Unicode

9.13.1.2 Codificações
.....................

To summarize the previous section: a Unicode string is a sequence of
code points, which are numbers from 0 through ‘0x10FFFF’ (1,114,111
decimal).  This sequence of code points needs to be represented in
memory as a set of 'code units', and 'code units' are then mapped to
8-bit bytes.  The rules for translating a Unicode string into a sequence
of bytes are called a 'character encoding', or just an 'encoding'.

The first encoding you might think of is using 32-bit integers as the
code unit, and then using the CPU’s representation of 32-bit integers.
In this representation, the string “Python” might look like this:

        P           y           t           h           o           n
     0x50 00 00 00 79 00 00 00 74 00 00 00 68 00 00 00 6f 00 00 00 6e 00 00 00
        0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

Esta representação é direta, mas usá-la gera uma série de problemas.

  1. Ela não é portátil; diferentes processadores ordenam os bytes de
     forma diferente.

  2. Ela gera desperdício de espaço.  Na maior parte dos textos, a
     maioria dos pontos de código são menores que 127 ou menores que
     255, então muito do espaço é ocupado por bytes ‘0x00’ .  A string
     acima necessita 24 bytes comparado com os 6 bytes necessários em
     uma representação ASCII. O aumento de uso da memória RAM
     normalmente não importa tanto (computadores desktop possuem
     gigabytes de RAM e strings normalmente não são tão grandes), mas
     expandir o uso de disco ou de banda por um fator de 4 é
     inaceitável.

  3. Ela não é compatível com as funções de C existentes, como
     ‘strlen()’, então uma série de novas funções de string serão
     necessárias.

Therefore this encoding isn’t used very much, and people instead choose
other encodings that are more efficient and convenient, such as UTF-8.

UTF-8 is one of the most commonly used encodings, and Python often
defaults to using it.  UTF stands for “Unicode Transformation Format”,
and the ‘8’ means that 8-bit values are used in the encoding.  (There
are also UTF-16 and UTF-32 encodings, but they are less frequently used
than UTF-8.)  UTF-8 uses the following rules:

  1. If the code point is < 128, it’s represented by the corresponding
     byte value.

  2. If the code point is >= 128, it’s turned into a sequence of two,
     three, or four bytes, where each byte of the sequence is between
     128 and 255.

UTF-8 tem muitas propriedades convenientes:

  1. Ela pode lidar com qualquer ponto de código Unicode.

  2. A Unicode string is turned into a sequence of bytes that contains
     embedded zero bytes only where they represent the null character
     (U+0000).  This means that UTF-8 strings can be processed by C
     functions such as ‘strcpy()’ and sent through protocols that can’t
     handle zero bytes for anything other than end-of-string markers.

  3. Uma string de texto ASCII é também um texto UTF-8 válido.

  4. UTF-8 is fairly compact; the majority of commonly used characters
     can be represented with one or two bytes.

  5. If bytes are corrupted or lost, it’s possible to determine the
     start of the next UTF-8-encoded code point and resynchronize.  It’s
     also unlikely that random 8-bit data will look like valid UTF-8.

  6. UTF-8 is a byte oriented encoding.  The encoding specifies that
     each character is represented by a specific sequence of one or more
     bytes.  This avoids the byte-ordering issues that can occur with
     integer and word oriented encodings, like UTF-16 and UTF-32, where
     the sequence of bytes varies depending on the hardware on which the
     string was encoded.


File: python.info,  Node: Referências<3>,  Prev: Codificações,  Up: Introdução ao Unicode

9.13.1.3 Referências
....................

The Unicode Consortium site(1) has character charts, a glossary, and PDF
versions of the Unicode specification.  Be prepared for some difficult
reading.  A chronology(2) of the origin and development of Unicode is
also available on the site.

On the Computerphile Youtube channel, Tom Scott briefly discusses the
history of Unicode and UTF-8(3) (9 minutes 36 seconds).

To help understand the standard, Jukka Korpela has written an
introductory guide(4) to reading the Unicode character tables.

Another good introductory article(5) was written by Joel Spolsky.  If
this introduction didn’t make things clear to you, you should try
reading this alternate article before continuing.

Wikipedia entries are often helpful; see the entries for “character
encoding(6)” and UTF-8(7), for example.

   ---------- Footnotes ----------

   (1) https://www.unicode.org

   (2) https://www.unicode.org/history/

   (3) https://www.youtube.com/watch?v=MijmeoH9LT4

   (4) https://jkorpela.fi/unicode/guide.html

   (5) 
https://www.joelonsoftware.com/2003/10/08/the-absolute-minimum-every-software-developer-absolutely-positively-must-know-about-unicode-and-character-sets-no-excuses/

   (6) https://en.wikipedia.org/wiki/Character_encoding

   (7) https://en.wikipedia.org/wiki/UTF-8


File: python.info,  Node: Suporte a Unicode no Python,  Next: Reading and Writing Unicode Data,  Prev: Introdução ao Unicode,  Up: Unicode<3>

9.13.2 Suporte a Unicode no Python
----------------------------------

Now that you’ve learned the rudiments of Unicode, we can look at
Python’s Unicode features.

* Menu:

* O Tipo String::
* Convertendo para Bytes::
* Unicode Literals in Python Source Code::
* Propriedades Unicode::
* Comparando Strings::
* Expressões Regulares Unicode::
* Referências: Referências<4>.


File: python.info,  Node: O Tipo String,  Next: Convertendo para Bytes,  Up: Suporte a Unicode no Python

9.13.2.1 O Tipo String
......................

Since Python 3.0, the language’s *note str: 44c. type contains Unicode
characters, meaning any string created using ‘"unicode rocks!"’,
‘'unicode rocks!'’, or the triple-quoted string syntax is stored as
Unicode.

The default encoding for Python source code is UTF-8, so you can simply
include a Unicode character in a string literal:

     try:
         with open('/tmp/input.txt', 'r') as f:
             ...
     except OSError:
         # 'File not found' error message.
         print("Fichier non trouvé")

Side note: Python 3 also supports using Unicode characters in
identifiers:

     répertoire = "/tmp/records.log"
     with open(répertoire, "w") as f:
         f.write("test\n")

If you can’t enter a particular character in your editor or want to keep
the source code ASCII-only for some reason, you can also use escape
sequences in string literals.  (Depending on your system, you may see
the actual capital-delta glyph instead of a u escape.)

     >>> "\N{GREEK CAPITAL LETTER DELTA}"  # Using the character name
     '\u0394'
     >>> "\u0394"                          # Using a 16-bit hex value
     '\u0394'
     >>> "\U00000394"                      # Using a 32-bit hex value
     '\u0394'

In addition, one can create a string using the *note decode(): 8dc.
method of *note bytes: 1c2.  This method takes an 'encoding' argument,
such as ‘UTF-8’, and optionally an 'errors' argument.

The 'errors' argument specifies the response when the input string can’t
be converted according to the encoding’s rules.  Legal values for this
argument are ‘'strict'’ (raise a *note UnicodeDecodeError: a1d.
exception), ‘'replace'’ (use ‘U+FFFD’, ‘REPLACEMENT CHARACTER’),
‘'ignore'’ (just leave the character out of the Unicode result), or
‘'backslashreplace'’ (inserts a ‘\xNN’ escape sequence).  The following
examples show the differences:

     >>> b'\x80abc'.decode("utf-8", "strict")
     Traceback (most recent call last):
         ...
     UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 0:
       invalid start byte
     >>> b'\x80abc'.decode("utf-8", "replace")
     '\ufffdabc'
     >>> b'\x80abc'.decode("utf-8", "backslashreplace")
     '\\x80abc'
     >>> b'\x80abc'.decode("utf-8", "ignore")
     'abc'

Encodings are specified as strings containing the encoding’s name.
Python comes with roughly 100 different encodings; see the Python
Library Reference at *note Standard Encodings: de1. for a list.  Some
encodings have multiple names; for example, ‘'latin-1'’, ‘'iso_8859_1'’
and ‘'8859’’ are all synonyms for the same encoding.

One-character Unicode strings can also be created with the *note chr():
1768. built-in function, which takes integers and returns a Unicode
string of length 1 that contains the corresponding code point.  The
reverse operation is the built-in *note ord(): 2080. function that takes
a one-character Unicode string and returns the code point value:

     >>> chr(57344)
     '\ue000'
     >>> ord('\ue000')
     57344


File: python.info,  Node: Convertendo para Bytes,  Next: Unicode Literals in Python Source Code,  Prev: O Tipo String,  Up: Suporte a Unicode no Python

9.13.2.2 Convertendo para Bytes
...............................

The opposite method of *note bytes.decode(): 8dc. is *note str.encode():
8db, which returns a *note bytes: 1c2. representation of the Unicode
string, encoded in the requested 'encoding'.

The 'errors' parameter is the same as the parameter of the *note
decode(): 8dc. method but supports a few more possible handlers.  As
well as ‘'strict'’, ‘'ignore'’, and ‘'replace'’ (which in this case
inserts a question mark instead of the unencodable character), there is
also ‘'xmlcharrefreplace'’ (inserts an XML character reference),
‘backslashreplace’ (inserts a ‘\uNNNN’ escape sequence) and
‘namereplace’ (inserts a ‘\N{...}’ escape sequence).

The following example shows the different results:

     >>> u = chr(40960) + 'abcd' + chr(1972)
     >>> u.encode('utf-8')
     b'\xea\x80\x80abcd\xde\xb4'
     >>> u.encode('ascii')
     Traceback (most recent call last):
         ...
     UnicodeEncodeError: 'ascii' codec can't encode character '\ua000' in
       position 0: ordinal not in range(128)
     >>> u.encode('ascii', 'ignore')
     b'abcd'
     >>> u.encode('ascii', 'replace')
     b'?abcd?'
     >>> u.encode('ascii', 'xmlcharrefreplace')
     b'&#40960;abcd&#1972;'
     >>> u.encode('ascii', 'backslashreplace')
     b'\\ua000abcd\\u07b4'
     >>> u.encode('ascii', 'namereplace')
     b'\\N{YI SYLLABLE IT}abcd\\u07b4'

The low-level routines for registering and accessing the available
encodings are found in the *note codecs: 1b. module.  Implementing new
encodings also requires understanding the *note codecs: 1b. module.
However, the encoding and decoding functions returned by this module are
usually more low-level than is comfortable, and writing new encodings is
a specialized task, so the module won’t be covered in this HOWTO.


File: python.info,  Node: Unicode Literals in Python Source Code,  Next: Propriedades Unicode,  Prev: Convertendo para Bytes,  Up: Suporte a Unicode no Python

9.13.2.3 Unicode Literals in Python Source Code
...............................................

In Python source code, specific Unicode code points can be written using
the ‘\u’ escape sequence, which is followed by four hex digits giving
the code point.  The ‘\U’ escape sequence is similar, but expects eight
hex digits, not four:

     >>> s = "a\xac\u1234\u20ac\U00008000"
     ... #     ^^^^ two-digit hex escape
     ... #         ^^^^^^ four-digit Unicode escape
     ... #                     ^^^^^^^^^^ eight-digit Unicode escape
     >>> [ord(c) for c in s]
     [97, 172, 4660, 8364, 32768]

Using escape sequences for code points greater than 127 is fine in small
doses, but becomes an annoyance if you’re using many accented
characters, as you would in a program with messages in French or some
other accent-using language.  You can also assemble strings using the
*note chr(): 1768. built-in function, but this is even more tedious.

Ideally, you’d want to be able to write literals in your language’s
natural encoding.  You could then edit Python source code with your
favorite editor which would display the accented characters naturally,
and have the right characters used at runtime.

Python supports writing source code in UTF-8 by default, but you can use
almost any encoding if you declare the encoding being used.  This is
done by including a special comment as either the first or second line
of the source file:

     #!/usr/bin/env python
     # -*- coding: latin-1 -*-

     u = 'abcdé'
     print(ord(u[-1]))

The syntax is inspired by Emacs’s notation for specifying variables
local to a file.  Emacs supports many different variables, but Python
only supports ‘coding’.  The ‘-*-’ symbols indicate to Emacs that the
comment is special; they have no significance to Python but are a
convention.  Python looks for ‘coding: name’ or ‘coding=name’ in the
comment.

If you don’t include such a comment, the default encoding used will be
UTF-8 as already mentioned.  See also PEP 263(1) for more information.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0263/


File: python.info,  Node: Propriedades Unicode,  Next: Comparando Strings,  Prev: Unicode Literals in Python Source Code,  Up: Suporte a Unicode no Python

9.13.2.4 Propriedades Unicode
.............................

The Unicode specification includes a database of information about code
points.  For each defined code point, the information includes the
character’s name, its category, the numeric value if applicable (for
characters representing numeric concepts such as the Roman numerals,
fractions such as one-third and four-fifths, etc.).  There are also
display-related properties, such as how to use the code point in
bidirectional text.

O programa a seguir exibe alguma informação sobre diversos caracteres e
imprime o valor numérico de um caractere em particular:

     import unicodedata

     u = chr(233) + chr(0x0bf2) + chr(3972) + chr(6000) + chr(13231)

     for i, c in enumerate(u):
         print(i, '%04x' % ord(c), unicodedata.category(c), end=" ")
         print(unicodedata.name(c))

     # Get numeric value of second character
     print(unicodedata.numeric(u[1]))

Quando executado, isso imprime:

     0 00e9 Ll LATIN SMALL LETTER E WITH ACUTE
     1 0bf2 No TAMIL NUMBER ONE THOUSAND
     2 0f84 Mn TIBETAN MARK HALANTA
     3 1770 Lo TAGBANWA LETTER SA
     4 33af So SQUARE RAD OVER S SQUARED
     1000.0

The category codes are abbreviations describing the nature of the
character.  These are grouped into categories such as “Letter”,
“Number”, “Punctuation”, or “Symbol”, which in turn are broken up into
subcategories.  To take the codes from the above output, ‘'Ll'’ means
‘Letter, lowercase’, ‘'No'’ means “Number, other”, ‘'Mn'’ is “Mark,
nonspacing”, and ‘'So'’ is “Symbol, other”.  See the General Category
Values section of the Unicode Character Database documentation(1) for a
list of category codes.

   ---------- Footnotes ----------

   (1) https://www.unicode.org/reports/tr44/#General_Category_Values


File: python.info,  Node: Comparando Strings,  Next: Expressões Regulares Unicode,  Prev: Propriedades Unicode,  Up: Suporte a Unicode no Python

9.13.2.5 Comparando Strings
...........................

Unicode adds some complication to comparing strings, because the same
set of characters can be represented by different sequences of code
points.  For example, a letter like ‘ê’ can be represented as a single
code point U+00EA, or as U+0065 U+0302, which is the code point for ‘e’
followed by a code point for ‘COMBINING CIRCUMFLEX ACCENT’.  These will
produce the same output when printed, but one is a string of length 1
and the other is of length 2.

One tool for a case-insensitive comparison is the *note casefold(): e00.
string method that converts a string to a case-insensitive form
following an algorithm described by the Unicode Standard.  This
algorithm has special handling for characters such as the German letter
‘ß’ (code point U+00DF), which becomes the pair of lowercase letters
‘ss’.

     >>> street = 'Gürzenichstraße'
     >>> street.casefold()
     'gürzenichstrasse'

A second tool is the *note unicodedata: 105. module’s *note normalize():
6d5. function that converts strings to one of several normal forms,
where letters followed by a combining character are replaced with single
characters.  *note normalize(): 6d5. can be used to perform string
comparisons that won’t falsely report inequality if two strings use
combining characters differently:

     import unicodedata

     def compare_strs(s1, s2):
         def NFD(s):
             return unicodedata.normalize('NFD', s)

         return NFD(s1) == NFD(s2)

     single_char = 'ê'
     multiple_chars = '\N{LATIN SMALL LETTER E}\N{COMBINING CIRCUMFLEX ACCENT}'
     print('length of first string=', len(single_char))
     print('length of second string=', len(multiple_chars))
     print(compare_strs(single_char, multiple_chars))

When run, this outputs:

     $ python compare-strs.py
     length of first string= 1
     length of second string= 2
     True

The first argument to the *note normalize(): 6d5. function is a string
giving the desired normalization form, which can be one of ‘NFC’,
‘NFKC’, ‘NFD’, and ‘NFKD’.

The Unicode Standard also specifies how to do caseless comparisons:

     import unicodedata

     def compare_caseless(s1, s2):
         def NFD(s):
             return unicodedata.normalize('NFD', s)

         return NFD(NFD(s1).casefold()) == NFD(NFD(s2).casefold())

     # Example usage
     single_char = 'ê'
     multiple_chars = '\N{LATIN CAPITAL LETTER E}\N{COMBINING CIRCUMFLEX ACCENT}'

     print(compare_caseless(single_char, multiple_chars))

This will print ‘True’.  (Why is ‘NFD()’ invoked twice?  Because there
are a few characters that make *note casefold(): e00. return a
non-normalized string, so the result needs to be normalized again.  See
section 3.13 of the Unicode Standard for a discussion and an example.)


File: python.info,  Node: Expressões Regulares Unicode,  Next: Referências<4>,  Prev: Comparando Strings,  Up: Suporte a Unicode no Python

9.13.2.6 Expressões Regulares Unicode
.....................................

The regular expressions supported by the *note re: b9. module can be
provided either as bytes or strings.  Some of the special character
sequences such as ‘\d’ and ‘\w’ have different meanings depending on
whether the pattern is supplied as bytes or a string.  For example, ‘\d’
will match the characters ‘[0-9]’ in bytes but in strings will match any
character that’s in the ‘'Nd'’ category.

The string in this example has the number 57 written in both Thai and
Arabic numerals:

     import re
     p = re.compile(r'\d+')

     s = "Over \u0e55\u0e57 57 flavours"
     m = p.search(s)
     print(repr(m.group()))

When executed, ‘\d+’ will match the Thai numerals and print them out.
If you supply the *note re.ASCII: 62c. flag to *note compile(): bee,
‘\d+’ will match the substring “57” instead.

Similarly, ‘\w’ matches a wide variety of Unicode characters but only
‘[a-zA-Z0-9_]’ in bytes or if *note re.ASCII: 62c. is supplied, and ‘\s’
will match either Unicode whitespace characters or ‘[ \t\n\r\f\v]’.


File: python.info,  Node: Referências<4>,  Prev: Expressões Regulares Unicode,  Up: Suporte a Unicode no Python

9.13.2.7 Referências
....................

Some good alternative discussions of Python’s Unicode support are:

   * Processing Text Files in Python 3(1), by Nick Coghlan.

   * Pragmatic Unicode(2), a PyCon 2012 presentation by Ned Batchelder.

The *note str: 44c. type is described in the Python library reference at
*note Tipo sequência de texto — str: 1d7a.

The documentation for the *note unicodedata: 105. module.

The documentation for the *note codecs: 1b. module.

Marc-André Lemburg gave a presentation titled "Python and Unicode" (PDF
slides)(3) at EuroPython 2002.  The slides are an excellent overview of
the design of Python 2’s Unicode features (where the Unicode string type
is called ‘unicode’ and literals start with ‘u’).

   ---------- Footnotes ----------

   (1) 
https://python-notes.curiousefficiency.org/en/latest/python3/text_file_processing.html

   (2) https://nedbatchelder.com/text/unipain.html

   (3) https://downloads.egenix.com/python/Unicode-EPC2002-Talk.pdf


File: python.info,  Node: Reading and Writing Unicode Data,  Next: Reconhecimentos<10>,  Prev: Suporte a Unicode no Python,  Up: Unicode<3>

9.13.3 Reading and Writing Unicode Data
---------------------------------------

Once you’ve written some code that works with Unicode data, the next
problem is input/output.  How do you get Unicode strings into your
program, and how do you convert Unicode into a form suitable for storage
or transmission?

It’s possible that you may not need to do anything depending on your
input sources and output destinations; you should check whether the
libraries used in your application support Unicode natively.  XML
parsers often return Unicode data, for example.  Many relational
databases also support Unicode-valued columns and can return Unicode
values from an SQL query.

Unicode data is usually converted to a particular encoding before it
gets written to disk or sent over a socket.  It’s possible to do all the
work yourself: open a file, read an 8-bit bytes object from it, and
convert the bytes with ‘bytes.decode(encoding)’.  However, the manual
approach is not recommended.

One problem is the multi-byte nature of encodings; one Unicode character
can be represented by several bytes.  If you want to read the file in
arbitrary-sized chunks (say, 1024 or 4096 bytes), you need to write
error-handling code to catch the case where only part of the bytes
encoding a single Unicode character are read at the end of a chunk.  One
solution would be to read the entire file into memory and then perform
the decoding, but that prevents you from working with files that are
extremely large; if you need to read a 2 GiB file, you need 2 GiB of
RAM.  (More, really, since for at least a moment you’d need to have both
the encoded string and its Unicode version in memory.)

The solution would be to use the low-level decoding interface to catch
the case of partial coding sequences.  The work of implementing this has
already been done for you: the built-in *note open(): 51c. function can
return a file-like object that assumes the file’s contents are in a
specified encoding and accepts Unicode parameters for methods such as
*note read(): 1e0c. and *note write(): 1dfb.  This works through *note
open(): 51c.'s 'encoding' and 'errors' parameters which are interpreted
just like those in *note str.encode(): 8db. and *note bytes.decode():
8dc.

Reading Unicode from a file is therefore simple:

     with open('unicode.txt', encoding='utf-8') as f:
         for line in f:
             print(repr(line))

It’s also possible to open files in update mode, allowing both reading
and writing:

     with open('test', encoding='utf-8', mode='w+') as f:
         f.write('\u4500 blah blah blah\n')
         f.seek(0)
         print(repr(f.readline()[:1]))

The Unicode character ‘U+FEFF’ is used as a byte-order mark (BOM), and
is often written as the first character of a file in order to assist
with autodetection of the file’s byte ordering.  Some encodings, such as
UTF-16, expect a BOM to be present at the start of a file; when such an
encoding is used, the BOM will be automatically written as the first
character and will be silently dropped when the file is read.  There are
variants of these encodings, such as ‘utf-16-le’ and ‘utf-16-be’ for
little-endian and big-endian encodings, that specify one particular byte
ordering and don’t skip the BOM.

In some areas, it is also convention to use a “BOM” at the start of
UTF-8 encoded files; the name is misleading since UTF-8 is not
byte-order dependent.  The mark simply announces that the file is
encoded in UTF-8.  For reading such files, use the ‘utf-8-sig’ codec to
automatically skip the mark if present.

* Menu:

* Nomes de arquivos Unicode::
* Tips for Writing Unicode-aware Programs::
* Referências: Referências<5>.


File: python.info,  Node: Nomes de arquivos Unicode,  Next: Tips for Writing Unicode-aware Programs,  Up: Reading and Writing Unicode Data

9.13.3.1 Nomes de arquivos Unicode
..................................

Most of the operating systems in common use today support filenames that
contain arbitrary Unicode characters.  Usually this is implemented by
converting the Unicode string into some encoding that varies depending
on the system.  Today Python is converging on using UTF-8: Python on
MacOS has used UTF-8 for several versions, and Python 3.6 switched to
using UTF-8 on Windows as well.  On Unix systems, there will only be a
*note filesystem encoding: 53b.  if you’ve set the ‘LANG’ or ‘LC_CTYPE’
environment variables; if you haven’t, the default encoding is again
UTF-8.

The *note sys.getfilesystemencoding(): c74. function returns the
encoding to use on your current system, in case you want to do the
encoding manually, but there’s not much reason to bother.  When opening
a file for reading or writing, you can usually just provide the Unicode
string as the filename, and it will be automatically converted to the
right encoding for you:

     filename = 'filename\u4500abc'
     with open(filename, 'w') as f:
         f.write('blah\n')

Functions in the *note os: a1. module such as *note os.stat(): 4a0. will
also accept Unicode filenames.

The *note os.listdir(): 1139. function returns filenames, which raises
an issue: should it return the Unicode version of filenames, or should
it return bytes containing the encoded versions?  *note os.listdir():
1139. can do both, depending on whether you provided the directory path
as bytes or a Unicode string.  If you pass a Unicode string as the path,
filenames will be decoded using the filesystem’s encoding and a list of
Unicode strings will be returned, while passing a byte path will return
the filenames as bytes.  For example, assuming the default *note
filesystem encoding: 53b. is UTF-8, running the following program:

     fn = 'filename\u4500abc'
     f = open(fn, 'w')
     f.close()

     import os
     print(os.listdir(b'.'))
     print(os.listdir('.'))

will produce the following output:

     $ python listdir-test.py
     [b'filename\xe4\x94\x80abc', ...]
     ['filename\u4500abc', ...]

The first list contains UTF-8-encoded filenames, and the second list
contains the Unicode versions.

Note that on most occasions, you should can just stick with using
Unicode with these APIs.  The bytes APIs should only be used on systems
where undecodable file names can be present; that’s pretty much only
Unix systems now.


File: python.info,  Node: Tips for Writing Unicode-aware Programs,  Next: Referências<5>,  Prev: Nomes de arquivos Unicode,  Up: Reading and Writing Unicode Data

9.13.3.2 Tips for Writing Unicode-aware Programs
................................................

This section provides some suggestions on writing software that deals
with Unicode.

A dica mais importante é:

     Software should only work with Unicode strings internally, decoding
     the input data as soon as possible and encoding the output only at
     the end.

If you attempt to write processing functions that accept both Unicode
and byte strings, you will find your program vulnerable to bugs wherever
you combine the two different kinds of strings.  There is no automatic
encoding or decoding: if you do e.g.  ‘str + bytes’, a *note TypeError:
2c3. will be raised.

When using data coming from a web browser or some other untrusted
source, a common technique is to check for illegal characters in a
string before using the string in a generated command line or storing it
in a database.  If you’re doing this, be careful to check the decoded
string, not the encoded bytes data; some encodings may have interesting
properties, such as not being bijective or not being fully
ASCII-compatible.  This is especially true if the input data also
specifies the encoding, since the attacker can then choose a clever way
to hide malicious text in the encoded bytestream.

* Menu:

* Converting Between File Encodings::
* Files in an Unknown Encoding::


File: python.info,  Node: Converting Between File Encodings,  Next: Files in an Unknown Encoding,  Up: Tips for Writing Unicode-aware Programs

9.13.3.3 Converting Between File Encodings
..........................................

The *note StreamRecoder: 1b68. class can transparently convert between
encodings, taking a stream that returns data in encoding #1 and behaving
like a stream returning data in encoding #2.

For example, if you have an input file 'f' that’s in Latin-1, you can
wrap it with a *note StreamRecoder: 1b68. to return bytes encoded in
UTF-8:

     new_f = codecs.StreamRecoder(f,
         # en/decoder: used by read() to encode its results and
         # by write() to decode its input.
         codecs.getencoder('utf-8'), codecs.getdecoder('utf-8'),

         # reader/writer: used to read and write to the stream.
         codecs.getreader('latin-1'), codecs.getwriter('latin-1') )


File: python.info,  Node: Files in an Unknown Encoding,  Prev: Converting Between File Encodings,  Up: Tips for Writing Unicode-aware Programs

9.13.3.4 Files in an Unknown Encoding
.....................................

What can you do if you need to make a change to a file, but don’t know
the file’s encoding?  If you know the encoding is ASCII-compatible and
only want to examine or modify the ASCII parts, you can open the file
with the ‘surrogateescape’ error handler:

     with open(fname, 'r', encoding="ascii", errors="surrogateescape") as f:
         data = f.read()

     # make changes to the string 'data'

     with open(fname + '.new', 'w',
               encoding="ascii", errors="surrogateescape") as f:
         f.write(data)

The ‘surrogateescape’ error handler will decode any non-ASCII bytes as
code points in a special range running from U+DC80 to U+DCFF. These code
points will then turn back into the same bytes when the
‘surrogateescape’ error handler is used to encode the data and write it
back out.


File: python.info,  Node: Referências<5>,  Prev: Tips for Writing Unicode-aware Programs,  Up: Reading and Writing Unicode Data

9.13.3.5 Referências
....................

One section of Mastering Python 3 Input/Output(1), a PyCon 2010 talk by
David Beazley, discusses text processing and binary data handling.

The PDF slides for Marc-André Lemburg's presentation "Writing
Unicode-aware Applications in Python"(2) discuss questions of character
encodings as well as how to internationalize and localize an
application.  These slides cover Python 2.x only.

The Guts of Unicode in Python(3) is a PyCon 2013 talk by Benjamin
Peterson that discusses the internal Unicode representation in Python
3.3.

   ---------- Footnotes ----------

   (1) https://pyvideo.org/video/289/pycon-2010-mastering-python-3-i-o

   (2) 
https://downloads.egenix.com/python/LSM2005-Developing-Unicode-aware-applications-in-Python.pdf

   (3) https://pyvideo.org/video/1768/the-guts-of-unicode-in-python


File: python.info,  Node: Reconhecimentos<10>,  Prev: Reading and Writing Unicode Data,  Up: Unicode<3>

9.13.4 Reconhecimentos
----------------------

The initial draft of this document was written by Andrew Kuchling.  It
has since been revised further by Alexander Belopolsky, Georg Brandl,
Andrew Kuchling, and Ezio Melotti.

Thanks to the following people who have noted errors or offered
suggestions on this article: Éric Araujo, Nicholas Bastin, Nick Coghlan,
Marius Gedminas, Kent Johnson, Ken Krugler, Marc-André Lemburg, Martin
von Löwis, Terry J. Reedy, Serhiy Storchaka, Eryk Sun, Chad Whitacre,
Graham Wideman.


File: python.info,  Node: Como buscar recursos da Internet usando o pacote urllib,  Next: Uma introdução ao módulo ipaddress,  Prev: Unicode<3>,  Up: Python HOWTOs

9.14 Como buscar recursos da Internet usando o pacote urllib
============================================================


Autor: Michael Foord(1)

* Menu:

* Introdução: Introdução<17>.
* Acessando URLs::
* Tratamento de exceções: Tratamento de exceções<3>.
* info e geturl::
* Abridores e tratadores::
* Autenticação básica::
* Proxies::
* Socekts e camadas::
* Notas de rodapé::

   ---------- Footnotes ----------

   (1) https://agileabstractions.com/


File: python.info,  Node: Introdução<17>,  Next: Acessando URLs,  Up: Como buscar recursos da Internet usando o pacote urllib

9.14.1 Introdução
-----------------

Related Articles
................

Você também pode achar útil o seguinte artigo na busca de recursos da
web com Python:

   * Autenticação Básica(1)

          Um tutorial sobre 'Autenticação Básica', com exemplos em
          Python.

'urllib.request' é um modulo Python para buscar URLs (Uniform Resource
Locators).  Ele oferece uma interface muito simples, na forma da função
'urlopen'.  Este é capaz de buscar URLs usando uma variedade de
diferentes protocolos.  Ele também oferece uma interface um pouco mais
complexa para lidar com situações comuns - como autenticação básica,
cookies, proxies e assim por diante.  Estes são fornecidos por objetos
chamados handlers (manipuladores) e openers (abridores).

urllib.request suporta o acesso a URLs por meio de vários “esquemas de
URL” (identificados pela string antes de ‘":"’ na URL - por exemplo
‘"ftp"’ é o esquema de URL em ‘"ftp://python.org/"’) usando o protocolo
de rede associado a ele (como FTP e HTTP). Este tutorial foca no caso
mais comum, HTTP.

Para situações simples “urlopen” é muito fácil de usar.  Mas assim que
você se depara com erros ou casos não triviais ao abrir URLs HTTP, você
vai precisar entender um pouco mais do HyperText Transfer Protocol.  A
literatura de referência mais reconhecida e compreensível para o HTTP é
RFC 2616(2).  Ela é um documento técnico e não foi feita para ser fácil
de ler.  Este documento busca ilustrar o uso de 'urllib' com detalhes
suficientes sobre HTTP para te permitir seguir adiante.  Ele não tem a
intenção de substituir a documentação do *note urllib.request: 10b, mas
é suplementar a ela.

   ---------- Footnotes ----------

   (1) 
https://web.archive.org/web/20201215133350/http://www.voidspace.org.uk/python/articles/authentication.shtml

   (2) https://datatracker.ietf.org/doc/html/rfc2616.html


File: python.info,  Node: Acessando URLs,  Next: Tratamento de exceções<3>,  Prev: Introdução<17>,  Up: Como buscar recursos da Internet usando o pacote urllib

9.14.2 Acessando URLs
---------------------

O modo mais simples de usar urllib.request é o seguinte:

     import urllib.request
     with urllib.request.urlopen('http://python.org/') as response:
        html = response.read()

Se você deseja obter um recurso via URL e guardá-lo em uma localização
temporária, você pode fazê-lo com as funções *note shutil.copyfileobj():
a66. e *note tempfile.NamedTemporaryFile(): 4c6.:

     import shutil
     import tempfile
     import urllib.request

     with urllib.request.urlopen('http://python.org/') as response:
         with tempfile.NamedTemporaryFile(delete=False) as tmp_file:
             shutil.copyfileobj(response, tmp_file)

     with open(tmp_file.name) as html:
         pass

Muitos usos de urllib são simples assim (repare que ao invés de uma URL
‘http:’ nós poderíamos ter usado uma string URL começando com ‘ftp:’,
‘file:’, etc.)..  No entanto, o propósito deste tutorial é explicar
casos mais complicados, concentrando em HTTP.

HTTP é baseado em solicitações (requests) e respostas (responses) - o
cliente faz solicitações e os servidores mandam respostas.
urllib.request espelha isto com um objeto ‘Request’ que representa a
solicitação HTTP que você está fazendo.  Na sua forma mais simples, você
cria um objeto Request que especifica a URL que você quer acessar.
Chamar ‘urlopen’ com este objeto Request retorna um objeto de resposta
para a URL solicitada.  Essa resposta é um objeto arquivo ou similar, o
que significa que você pode, por exemplo, chamar ‘.read()’ na resposta:

     import urllib.request

     req = urllib.request.Request('http://python.org/')
     with urllib.request.urlopen(req) as response:
        the_page = response.read()

Note que urllib.request usa a mesma interface Request para tratar todos
os esquemas URL. Por exemplo, você pode fazer uma solicitação FTP da
seguinte forma:

     req = urllib.request.Request('ftp://example.com/')

No caso do HTTP, há duas coisas extras que os objetos Request permitem
que você faça: primeiro, você pode passar dados a serem enviados ao
servidor.  Segundo, você pode passar informações extras (“metadados”)
'sobre' os dados ou sobre a própria solicitação para o servidor — essas
informações são enviadas como “cabeçalhos” HTTP. Vamos analisar cada um
deles separadamente.

* Menu:

* Dados::
* Cabeçalhos::


File: python.info,  Node: Dados,  Next: Cabeçalhos,  Up: Acessando URLs

9.14.2.1 Dados
..............

Às vezes, você deseja enviar dados para uma URL (geralmente a URL se
refere a um script CGI (Common Gateway Interface) ou outra aplicação
web).  Com HTTP, isso geralmente é feito usando o que é conhecido como
uma solicitação 'POST'. Isso geralmente é o que seu navegador faz quando
você envia um formulário HTML preenchido na web.  Nem todos os POSTs
precisam vir de formulários: você pode usar um POST para transmitir
dados arbitrários para sua própria aplicação.  No caso comum de
formulários HTML, os dados precisam ser codificados de forma padrão e,
em seguida, passados para o objeto Request como o argumento ‘data’.  A
codificação é feita usando uma função da biblioteca *note urllib.parse:
10a.

     import urllib.parse
     import urllib.request

     url = 'http://www.someserver.com/cgi-bin/register.cgi'
     values = {'name' : 'Michael Foord',
               'location' : 'Northampton',
               'language' : 'Python' }

     data = urllib.parse.urlencode(values)
     data = data.encode('ascii') # data should be bytes
     req = urllib.request.Request(url, data)
     with urllib.request.urlopen(req) as response:
        the_page = response.read()

Observe que outras codificações às vezes são necessárias (por exemplo,
para envio de arquivos de formulários HTML - consulte HTML
Specification, Form Submission(1) para mais detalhes).

Se você não passar o argumento ‘data’, o urllib usará uma requisição
'GET'. Uma diferença entre requisições GET e POST é que as requisições
POST frequentemente têm “efeitos colaterais”: elas alteram o estado do
sistema de alguma forma (por exemplo, ao fazer um pedido ao site para
que cem libras de spam enlatado sejam entregues em sua porta).  Embora o
padrão HTTP deixe claro que os POSTs devem 'sempre' causar efeitos
colaterais, e as requisições GET 'nunca' causar efeitos colaterais, nada
impede que uma requisição GET tenha efeitos colaterais, nem que uma
requisição POST não tenha efeitos colaterais.  Dados também podem ser
passados em uma requisição HTTP GET codificando-os na própria URL.

Isso é feito como abaixo:

     >>> import urllib.request
     >>> import urllib.parse
     >>> data = {}
     >>> data['name'] = 'Somebody Here'
     >>> data['location'] = 'Northampton'
     >>> data['language'] = 'Python'
     >>> url_values = urllib.parse.urlencode(data)
     >>> print(url_values)  # The order may differ from below.
     name=Somebody+Here&language=Python&location=Northampton
     >>> url = 'http://www.example.com/example.cgi'
     >>> full_url = url + '?' + url_values
     >>> data = urllib.request.urlopen(full_url)

Observe que o URL completo é criado adicionando um ‘?’ ao URL, seguido
pelos valores codificados.

   ---------- Footnotes ----------

   (1) https://www.w3.org/TR/REC-html40/interact/forms.html#h-17.13


File: python.info,  Node: Cabeçalhos,  Prev: Dados,  Up: Acessando URLs

9.14.2.2 Cabeçalhos
...................

Discutiremos aqui um cabeçalho HTTP específico para ilustrar como
adicionar cabeçalhos à sua solicitação HTTP.

Alguns sites (1) não gostam de ser navegados por programas ou enviam
versões diferentes para navegadores diferentes (2).  Por padrão, urllib
se identifica como ‘Python-urllib/x.y’ (onde ‘x’ e ‘y’ são os números de
versão principal e secundária da versão do Python, por exemplo,
‘Python-urllib/2.5’), o que pode confundir o site ou simplesmente não
funcionar.  A forma como um navegador se identifica é através do
cabeçalho ‘User-Agent’ (3).  Ao criar um objeto Request, você pode
passar um dicionário de cabeçalhos.  O exemplo a seguir faz a mesma
solicitação acima, mas se identifica como uma versão do Internet
Explorer (4).

     import urllib.parse
     import urllib.request

     url = 'http://www.someserver.com/cgi-bin/register.cgi'
     user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64)'
     values = {'name': 'Michael Foord',
               'location': 'Northampton',
               'language': 'Python' }
     headers = {'User-Agent': user_agent}

     data = urllib.parse.urlencode(values)
     data = data.encode('ascii')
     req = urllib.request.Request(url, data, headers)
     with urllib.request.urlopen(req) as response:
        the_page = response.read()

A resposta também possui dois métodos úteis.  Veja a seção sobre *note
info e geturl: 5453, que vem depois de analisarmos o que acontece quando
as coisas dão errado.

   ---------- Footnotes ----------

   (1) Google, por exemplo.

   (2) A detecção de navegadores é uma prática muito ruim para o design
de sites; construir sites usando padrões web é muito mais sensato.
Infelizmente, muitos sites ainda enviam versões diferentes para
navegadores diferentes.

   (3) O user agent para MSIE 6 é '‘Mozilla/4.0 (compatível; MSIE 6.0;
Windows NT 5.1; SV1; .NET CLR 1.1.4322)’'

   (4) Para obter detalhes sobre mais cabeçalhos de solicitação HTTP,
consulte *note Referência rápida para cabeçalhos HTTP: 5452.


File: python.info,  Node: Tratamento de exceções<3>,  Next: info e geturl,  Prev: Acessando URLs,  Up: Como buscar recursos da Internet usando o pacote urllib

9.14.3 Tratamento de exceções
-----------------------------

'urlopen' levanta *note URLError: 3bca. quando não consegue tratar uma
resposta (embora, como de costume com APIs Python, exceções embutidas
como *note ValueError: 202, *note TypeError: 2c3. etc.  também possam
ser levantadas).

*note HTTPError: 1014. é a subclasse de *note URLError: 3bca. levantada
no caso específico de URLs HTTP.

As classes de exceção são exportadas do módulo *note urllib.error: 109.

* Menu:

* URLError::
* HTTPError::
* Resumindo::


File: python.info,  Node: URLError,  Next: HTTPError,  Up: Tratamento de exceções<3>

9.14.3.1 URLError
.................

Frequentemente, URLError é levantada porque não há conexão de rede
(nenhuma rota para o servidor especificado) ou o servidor especificado
não existe.  Nesse caso, a exceção gerada terá um atributo “reason”, que
é uma tupla contendo um código de erro e uma mensagem de erro em texto.

Por exemplo

     >>> req = urllib.request.Request('http://www.pretend_server.org')
     >>> try: urllib.request.urlopen(req)
     ... except urllib.error.URLError as e:
     ...     print(e.reason)
     ...
     (4, 'getaddrinfo failed')


File: python.info,  Node: HTTPError,  Next: Resumindo,  Prev: URLError,  Up: Tratamento de exceções<3>

9.14.3.2 HTTPError
..................

Cada resposta HTTP do servidor contém um “código de status” numérico.
Às vezes, o código de status indica que o servidor não consegue atender
à solicitação.  Os manipuladores padrão lidarão com algumas dessas
respostas para você (por exemplo, se a resposta for um
“redirecionamento” que solicita que o cliente busque o documento de uma
URL diferente, o urllib cuidará disso para você).  Para aquelas que ele
não consegue tratar, o urlopen lançará um *note HTTPError: 1014.  Erros
típicos incluem ‘404’ (página não encontrada), ‘403’ (solicitação
proibida) e ‘401’ (autenticação necessária).

Veja a seção 10 de RFC 2616(1) para uma referência sobre todos os
códigos de erro HTTP.

A instância *note HTTPError: 1014. levantada terá um atributo inteiro
‘code’, que corresponde ao erro enviado pelo servidor.

* Menu:

* Códigos de erro::

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2616.html


File: python.info,  Node: Códigos de erro,  Up: HTTPError

9.14.3.3 Códigos de erro
........................

Como os tratadores padrão controlam redirecionamentos (códigos no
intervalo 300) e códigos no intervalo 100-299 indicam sucesso,
normalmente você verá apenas códigos de erro no intervalo 400-599.

*note http.server.BaseHTTPRequestHandler.responses: 3c69. é um
dicionário útil de códigos de resposta que mostra todos os códigos de
resposta usados por RFC 2616(1).  Um trecho do dicionário é mostrado
abaixo

     responses = {
         ...
         <HTTPStatus.OK: 200>: ('OK', 'Request fulfilled, document follows'),
         ...
         <HTTPStatus.FORBIDDEN: 403>: ('Forbidden',
                                       'Request forbidden -- authorization will '
                                       'not help'),
         <HTTPStatus.NOT_FOUND: 404>: ('Not Found',
                                       'Nothing matches the given URI'),
         ...
         <HTTPStatus.IM_A_TEAPOT: 418>: ("I'm a Teapot",
                                         'Server refuses to brew coffee because '
                                         'it is a teapot'),
         ...
         <HTTPStatus.SERVICE_UNAVAILABLE: 503>: ('Service Unavailable',
                                                 'The server cannot process the '
                                                 'request due to a high load'),
         ...
         }

Quando um erro é levantado, o servidor responde retornando um código de
erro HTTP 'e' uma página de erro.  Você pode usar a instância *note
HTTPError: 1014. como resposta na página retornada.  Isso significa que,
além do atributo code, ela também possui os métodos read, geturl e info,
conforme retornados pelo módulo ‘urllib.response’:

     >>> req = urllib.request.Request('http://www.python.org/fish.html')
     >>> try:
     ...     urllib.request.urlopen(req)
     ... except urllib.error.HTTPError as e:
     ...     print(e.code)
     ...     print(e.read())
     ...
     404
     b'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
       "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n\n\n<html
       ...
       <title>Page Not Found</title>\n
       ...

   ---------- Footnotes ----------

   (1) https://datatracker.ietf.org/doc/html/rfc2616.html


File: python.info,  Node: Resumindo,  Prev: HTTPError,  Up: Tratamento de exceções<3>

9.14.3.4 Resumindo
..................

Então, se você quiser se preparar para *note HTTPError: 1014. 'ou' *note
URLError: 3bca, existem duas abordagens básicas.  Eu prefiro a segunda.

* Menu:

* Número 1::
* Número 2::


File: python.info,  Node: Número 1,  Next: Número 2,  Up: Resumindo

9.14.3.5 Número 1
.................

     from urllib.request import Request, urlopen
     from urllib.error import URLError, HTTPError
     req = Request(someurl)
     try:
         response = urlopen(req)
     except HTTPError as e:
         print('The server couldn\'t fulfill the request.')
         print('Error code: ', e.code)
     except URLError as e:
         print('We failed to reach a server.')
         print('Reason: ', e.reason)
     else:
         # tudo certo

     Nota: O ‘except HTTPError’ 'deve' vir primeiro, caso contrário,
     ‘except URLError’ 'também' capturará uma *note HTTPError: 1014.


File: python.info,  Node: Número 2,  Prev: Número 1,  Up: Resumindo

9.14.3.6 Número 2
.................

     from urllib.request import Request, urlopen
     from urllib.error import URLError
     req = Request(someurl)
     try:
         response = urlopen(req)
     except URLError as e:
         if hasattr(e, 'reason'):
             print('We failed to reach a server.')
             print('Reason: ', e.reason)
         elif hasattr(e, 'code'):
             print('The server couldn\'t fulfill the request.')
             print('Error code: ', e.code)
     else:
         # tudo certo


File: python.info,  Node: info e geturl,  Next: Abridores e tratadores,  Prev: Tratamento de exceções<3>,  Up: Como buscar recursos da Internet usando o pacote urllib

9.14.4 info e geturl
--------------------

A resposta retornada por urlopen (ou a instância *note HTTPError: 1014.)
tem dois métodos úteis ‘info()’ e ‘geturl()’ e é definida no módulo
*note urllib.response: 10c.

   * 'geturl' - Isso retorna a URL real da página recuperada.  Isso é
     útil porque ‘urlopen’ (ou o objeto de abertura utilizado) pode ter
     seguido um redirecionamento.  A URL da página recuperada pode não
     ser a mesma que a URL solicitada.

   * 'info' - Isso retorna um objeto semelhante a um dicionário que
     descreve a página recuperada, particularmente os cabeçalhos
     enviados pelo servidor.  Atualmente, é uma instância de *note
     http.client.HTTPMessage: 3c83.

Cabeçalhos típicos incluem ‘Content-length’, ‘Content-type’ e assim por
diante.  Consulte a “Referência rápida para cabeçalhos HTTP
<‘https://jkorpela.fi/http.html’>” para obter uma lista útil de
cabeçalhos HTTP com breves explicações sobre seu significado e uso.


File: python.info,  Node: Abridores e tratadores,  Next: Autenticação básica,  Prev: info e geturl,  Up: Como buscar recursos da Internet usando o pacote urllib

9.14.5 Abridores e tratadores
-----------------------------

Ao buscar uma URL, você usa um abridor (uma instância do talvez confuso
nome *note urllib.request.OpenerDirector: 3bcb.).  Normalmente, usamos o
abridor padrão - via ‘urlopen’ -, mas você pode criar abridores
personalizados.  Os abridores usam manipuladores.  Todo o “trabalho
pesado” é feito pelos manipuladores.  Cada manipulador sabe como abrir
URLs para um esquema de URL específico (http, ftp, etc.)  ou como lidar
com um aspecto da abertura de URL, por exemplo, redirecionamentos HTTP
ou cookies HTTP.

Você vai querer criar abridores se quiser buscar URLs com manipuladores
específicos instalados, por exemplo, para obter um abridor que manipule
cookies ou para obter um abridor que não manipule redirecionamentos.

Para criar um abridor, instancie um ‘OpenerDirector’ e então chame
‘.add_handler(some_handler_instance)’ repetidamente.

Como alternativa, você pode usar ‘build_opener’, que é uma função
conveniente para criar objetos de abertura com uma única chamada de
função.  ‘build_opener’ adiciona vários tratadores por padrão, mas
fornece uma maneira rápida de adicionar mais e/ou substituir os
tratadores padrão.

Outros tipos de manipuladores que você pode querer podem lidar com
proxies, autenticação e outras situações comuns, mas um pouco
especializadas.

‘install_opener’ pode ser usado para tornar um objeto ‘opener’ o abridor
padrão (global).  Isso significa que chamadas para ‘urlopen’ usarão o
abridor que você instalou.

Objetos abridores têm um método ‘open’, que pode ser chamado diretamente
para buscar URLs da mesma forma que a função ‘urlopen’: não há
necessidade de chamar ‘install_opener’, exceto por conveniência.


File: python.info,  Node: Autenticação básica,  Next: Proxies,  Prev: Abridores e tratadores,  Up: Como buscar recursos da Internet usando o pacote urllib

9.14.6 Autenticação básica
--------------------------

Para ilustrar a criação e instalação de um manipulador, usaremos o
‘HTTPBasicAuthHandler’.  Para uma discussão mais detalhada sobre este
assunto — incluindo uma explicação de como funciona a autenticação
básica — consulte este tutorial de autenticação básica(1).

Quando a autenticação é necessária, o servidor envia um cabeçalho (e o
código de erro 401) solicitando autenticação.  Isso especifica o esquema
de autenticação e um “domínio”.  O cabeçalho se parece com:
‘WWW-Authenticate: SCHEME realm="REALM"’.

Por exemplo:

     WWW-Authenticate: Basic realm="cPanel Users"

O cliente deve então tentar a solicitação novamente com o nome e a senha
apropriados para o domínio incluídos como cabeçalho na solicitação.
Isso é “autenticação básica”.  Para simplificar esse processo, podemos
criar uma instância de ‘HTTPBasicAuthHandler’ e um opener para usar esse
manipulador.

O ‘HTTPBasicAuthHandler’ usa um objeto chamado gerenciador de senhas
para manipular o mapeamento de URLs e domínios para senhas e nomes de
usuário.  Se você souber qual é o domínio (a partir do cabeçalho de
autenticação enviado pelo servidor), poderá usar um ‘HTTPPasswordMgr’.
Frequentemente, não importa qual seja o domínio.  Nesse caso, é
conveniente usar ‘HTTPPasswordMgrWithDefaultRealm’.  Isso permite que
você especifique um nome de usuário e uma senha padrão para uma URL.
Isso será fornecido caso você não forneça uma combinação alternativa
para um domínio específico.  Indicamos isso fornecendo ‘None’ como
argumento de domínio para o método ‘add_password’.

A URL de nível superior é a primeira URL que requer autenticação.  URLs
“mais profundas” que a URL que você passa para .add_password() também
corresponderão.

     # cria um gerenciador de senhas
     password_mgr = urllib.request.HTTPPasswordMgrWithDefaultRealm()

     # Adiciona o nome de usuário e senha.
     # Se soubéssemos o realm, poderíamos usá-lo em vez de None.
     top_level_url = "http://example.com/foo/"
     password_mgr.add_password(None, top_level_url, username, password)

     handler = urllib.request.HTTPBasicAuthHandler(password_mgr)

     # cria um "opener" (OpenerDirector instance)
     opener = urllib.request.build_opener(handler)

     # usa o opener para obter uma URL
     opener.open(a_url)

     # Instala o opener.
     # Agora, todas as chamadas a urllib.request.urlopen usam nosso opener.
     urllib.request.install_opener(opener)

     Nota: No exemplo acima, fornecemos apenas nosso
     ‘HTTPBasicAuthHandler’ para ‘build_opener’.  Por padrão, os
     “openers” possuem os manipuladores para situações normais:
     ‘ProxyHandler’ (se uma configuração de proxy, como uma variável de
     ambiente ‘http_proxy’, estiver definida), ‘UnknownHandler’,
     ‘HTTPHandler’, ‘HTTPDefaultErrorHandler’, ‘HTTPRedirectHandler’,
     ‘FTPHandler’, ‘FileHandler’, ‘DataHandler’, ‘HTTPErrorProcessor’.

‘top_level_url’ é, na verdade, 'ou' uma URL completa (incluindo o
componente do esquema ‘http:’, o nome do host e, opcionalmente, o número
da porta), por exemplo, ‘"http://example.com/"’, 'ou' uma “autoridade”
(ou seja, o nome do host, incluindo, opcionalmente, o número da porta),
por exemplo, ‘"example.com"’ ou ‘"example.com:8080"’ (este último
exemplo inclui um número de porta).  A autoridade, se presente, NÃO deve
conter o componente “userinfo” - por exemplo, ‘"joe:senha@example.com"’
não está correto.

   ---------- Footnotes ----------

   (1) 
https://web.archive.org/web/20201215133350/http://www.voidspace.org.uk/python/articles/authentication.shtml


File: python.info,  Node: Proxies,  Next: Socekts e camadas,  Prev: Autenticação básica,  Up: Como buscar recursos da Internet usando o pacote urllib

9.14.7 Proxies
--------------

'urllib' detectará automaticamente suas configurações de proxy e as
utilizará.  Isso ocorre por meio do ‘ProxyHandler’, que faz parte da
cadeia de manipuladores normal quando uma configuração de proxy é
detectada.  Normalmente, isso é bom, mas há ocasiões em que pode não ser
útil (1).  Uma maneira de fazer isso é configurar nosso próprio
‘ProxyHandler’, sem proxies definidos.  Isso é feito seguindo etapas
semelhantes à configuração de um manipulador de *note autenticação
básica: 545c.:

     >>> proxy_support = urllib.request.ProxyHandler({})
     >>> opener = urllib.request.build_opener(proxy_support)
     >>> urllib.request.install_opener(opener)

     Nota: Atualmente, ‘urllib.request’ 'não' oferece suporte à busca de
     locais ‘https’ por meio de um proxy.  No entanto, isso pode ser
     habilitado estendendo urllib.request, conforme mostrado na receita
     (2).

     Nota: ‘HTTP_PROXY’ será ignorado se uma variável ‘REQUEST_METHOD’
     estiver definida; veja a documentação em *note getproxies(): 3bc7.

   ---------- Footnotes ----------

   (1) No meu caso, preciso usar um proxy para acessar a internet no
trabalho.  Se você tentar buscar URLs 'localhost' por meio desse proxy,
ele as bloqueia.  O IE está configurado para usar o proxy, que o urllib
detecta.  Para testar scripts com um servidor localhost, preciso impedir
que o urllib use o proxy.

   (2) Abridor urllib para proxy SSL (método CONNECT): Receita do livro
de receitas ASPN
(https://code.activestate.com/recipes/456195-urrlib2-opener-for-ssl-proxy-connect-method/).


File: python.info,  Node: Socekts e camadas,  Next: Notas de rodapé,  Prev: Proxies,  Up: Como buscar recursos da Internet usando o pacote urllib

9.14.8 Socekts e camadas
------------------------

O suporte do Python para buscar recursos web é em camadas.  urllib usa a
biblioteca *note http.client: 6f, que por sua vez usa a biblioteca de
sockets.

A partir do Python 2.3, você pode especificar quanto tempo um soquete
deve aguardar por uma resposta antes de atingir o tempo limite.  Isso
pode ser útil em aplicações que precisam buscar páginas web.  Por
padrão, o módulo socket 'não tem tempo limite' e pode travar.
Atualmente, o tempo limite do soquete não é exposto nos níveis
http.client ou urllib.request.  No entanto, você pode definir o tempo
limite padrão globalmente para todos os soquetes usando

     import socket
     import urllib.request

     # tempo limite em secungos
     timeout = 10
     socket.setdefaulttimeout(timeout)

     # isso chamada a urllib.request.urlopen agora usa o tempo limite padrão
     # que nós definidos no módulo socket
     req = urllib.request.Request('http://www.voidspace.org.uk')
     response = urllib.request.urlopen(req)

__________________________________________________________________


File: python.info,  Node: Notas de rodapé,  Prev: Socekts e camadas,  Up: Como buscar recursos da Internet usando o pacote urllib

9.14.9 Notas de rodapé
----------------------

Este documento foi revisado e revisado por John Lee.


File: python.info,  Node: Uma introdução ao módulo ipaddress,  Next: Instrumentando o CPython com DTrace e SystemTap,  Prev: Como buscar recursos da Internet usando o pacote urllib,  Up: Python HOWTOs

9.15 Uma introdução ao módulo ipaddress
=======================================


autor: Peter Moody


autor: Nick Coghlan

Visão Geral
...........

Este documento tem como objetivo prover uma suave introdução ao módulo
*note ipaddress: 80.  Ele é direcionado primeiramente para usuários que
ainda não são familiarizados com a terminologia de rede IP, mas também
pode ser útil para engenheiros de rede que querem uma visão geral de
como *note ipaddress: 80. representa os conceitos de endereçamento de
rede IP.

* Menu:

* Criando objetos de Endereço/Rede/Interface::
* Inspecionando objetos endereço/rede/interface::
* Redes como listas de Addresses::
* Comparações: Comparações<4>.
* Usando endereços IP com outros módulos::
* Obtendo mais detalhes quando a criação da instância falha::


File: python.info,  Node: Criando objetos de Endereço/Rede/Interface,  Next: Inspecionando objetos endereço/rede/interface,  Up: Uma introdução ao módulo ipaddress

9.15.1 Criando objetos de Endereço/Rede/Interface
-------------------------------------------------

Como *note ipaddress: 80. é um módulo para inspecionar e manipular
endereços IP, a primeira coisa que você deseja fazer é criar alguns
objetos.  Você pode usar *note ipaddress: 80. para criar objetos a
partir de strings e inteiros.

* Menu:

* Uma observação sobre versões do IP::
* Endereços IP de host::
* Definindo redes::
* Interfaces do host::


File: python.info,  Node: Uma observação sobre versões do IP,  Next: Endereços IP de host,  Up: Criando objetos de Endereço/Rede/Interface

9.15.1.1 Uma observação sobre versões do IP
...........................................

Para leitores que não estão particularmente familiarizados com o
endereçamento IP, é importante saber que o Protocolo de Internet (IP)
está atualmente em processo de mudança da versão 4 do protocolo para a
versão 6.  Esta transição está ocorrendo em grande parte porque a versão
4 do protocolo não fornece endereços suficientes para atender às
necessidades do mundo inteiro, principalmente devido ao crescente número
de dispositivos com conexões diretas à Internet.

Explicar os detalhes das diferenças entre as duas versões do protocolo
está além do escopo desta introdução, mas os leitores precisam pelo
menos estar cientes de que essas duas versões existem, e às vezes será
necessário forçar o uso de uma versão ou do outro.


File: python.info,  Node: Endereços IP de host,  Next: Definindo redes,  Prev: Uma observação sobre versões do IP,  Up: Criando objetos de Endereço/Rede/Interface

9.15.1.2 Endereços IP de host
.............................

Os endereços, muitas vezes chamados de “endereços de host”, são a
unidade mais básica ao trabalhar com endereçamento IP. A maneira mais
simples de criar endereços é usar a função de fábrica *note
ipaddress.ip_address(): 3e81, que determina automaticamente se deve ser
criado um endereço IPv4 ou IPv6 com base no valor passado:

     >>> ipaddress.ip_address('192.0.2.1')
     IPv4Address('192.0.2.1')
     >>> ipaddress.ip_address('2001:DB8::1')
     IPv6Address('2001:db8::1')

Os endereços também podem ser criados diretamente a partir de números
inteiros.  Os valores que cabem em 32 bits são considerados endereços
IPv4:

     >>> ipaddress.ip_address(3221225985)
     IPv4Address('192.0.2.1')
     >>> ipaddress.ip_address(42540766411282592856903984951653826561)
     IPv6Address('2001:db8::1')

Para forçar o uso de endereços IPv4 ou IPv6, as classes relevantes podem
ser invocadas diretamente.  Isto é particularmente útil para forçar a
criação de endereços IPv6 para números inteiros pequenos:

     >>> ipaddress.ip_address(1)
     IPv4Address('0.0.0.1')
     >>> ipaddress.IPv4Address(1)
     IPv4Address('0.0.0.1')
     >>> ipaddress.IPv6Address(1)
     IPv6Address('::1')


File: python.info,  Node: Definindo redes,  Next: Interfaces do host,  Prev: Endereços IP de host,  Up: Criando objetos de Endereço/Rede/Interface

9.15.1.3 Definindo redes
........................

Endereços de host geralmente são agrupados em redes IP, então *note
ipaddress: 80. fornece uma maneira de criar, inspecionar e manipular
definições de rede.  Os objetos de rede IP são construídos a partir de
strings que definem o intervalo de endereços de host que fazem parte
dessa rede.  A forma mais simples para essa informação é um par de
“endereço de rede/prefixo de rede”, onde o prefixo define o número de
bits iniciais que são comparados para determinar se um endereço faz ou
não parte da rede e o endereço de rede define o valor esperado daqueles
bits.

Quanto aos endereços, é fornecida uma função de fábrica que determina
automaticamente a versão correta do IP:

     >>> ipaddress.ip_network('192.0.2.0/24')
     IPv4Network('192.0.2.0/24')
     >>> ipaddress.ip_network('2001:db8::0/96')
     IPv6Network('2001:db8::/96')

Os objetos de rede não podem ter nenhum bit de host definido.  O efeito
prático disso é que ‘192.0.2.1/24’ não descreve uma rede.  Tais
definições são chamadas de objetos interface, uma vez que a notação
“ip-em-uma-rede” é comumente usada para descrever interfaces de rede de
um computador em uma determinada rede e é descrita mais detalhadamente
na próxima seção.

Por padrão, tentar criar um objeto rede com bits de host definidos
resultará na exceção *note ValueError: 202. ser levantada.  Para
solicitar que os bits adicionais sejam forçados a zero, o sinalizador
‘strict=False’ pode ser passada para o construtor:

     >>> ipaddress.ip_network('192.0.2.1/24')
     Traceback (most recent call last):
        ...
     ValueError: 192.0.2.1/24 has host bits set
     >>> ipaddress.ip_network('192.0.2.1/24', strict=False)
     IPv4Network('192.0.2.0/24')

Embora o formato string ofereça significativamente mais flexibilidade,
as redes também podem ser definidas com números inteiros, assim como os
endereços de host.  Neste caso, considera-se que a rede contém apenas o
endereço único identificado pelo número inteiro, portanto o prefixo da
rede inclui todo o endereço da rede:

     >>> ipaddress.ip_network(3221225984)
     IPv4Network('192.0.2.0/32')
     >>> ipaddress.ip_network(42540766411282592856903984951653826560)
     IPv6Network('2001:db8::/128')

Tal como acontece com os endereços, a criação de um tipo específico de
rede pode ser forçada chamando diretamente o construtor da classe em vez
de usar a função de fábrica.


File: python.info,  Node: Interfaces do host,  Prev: Definindo redes,  Up: Criando objetos de Endereço/Rede/Interface

9.15.1.4 Interfaces do host
...........................

Conforme mencionado acima, se você precisar descrever um endereço em uma
rede específica, nem o endereço nem as classes de rede serão
suficientes.  Notação como ‘192.0.2.1/24’ é comumente usada por
engenheiros de rede e pessoas que escrevem ferramentas para firewalls e
roteadores como uma abreviação para “o host ‘192.0.2.1’ na rede
‘192.0.2.0/24’”, Consequentemente, *note ipaddress: 80. fornece um
conjunto de classes híbridas que associam um endereço a uma rede
específica.  A interface para criação é idêntica àquela para definição
de objetos de rede, exceto que a parte do endereço não está restrita a
ser um endereço de rede.

     >>> ipaddress.ip_interface('192.0.2.1/24')
     IPv4Interface('192.0.2.1/24')
     >>> ipaddress.ip_interface('2001:db8::1/96')
     IPv6Interface('2001:db8::1/96')

Entradas de inteiros são aceitas (como acontece com redes), e o uso de
uma versão IP específica pode ser forçado chamando diretamente o
construtor relevante.


File: python.info,  Node: Inspecionando objetos endereço/rede/interface,  Next: Redes como listas de Addresses,  Prev: Criando objetos de Endereço/Rede/Interface,  Up: Uma introdução ao módulo ipaddress

9.15.2 Inspecionando objetos endereço/rede/interface
----------------------------------------------------

Você se deu ao trabalho de criar um objeto
IPv(4|6)(Address|Network|Interface) e provavelmente deseja obter
informações sobre ele.  *note ipaddress: 80. tenta tornar isso fácil e
intuitivo.

Extraindo a versão do IP:

     >>> addr4 = ipaddress.ip_address('192.0.2.1')
     >>> addr6 = ipaddress.ip_address('2001:db8::1')
     >>> addr6.version
     6
     >>> addr4.version
     4

Obtendo a rede de uma interface:

     >>> host4 = ipaddress.ip_interface('192.0.2.1/24')
     >>> host4.network
     IPv4Network('192.0.2.0/24')
     >>> host6 = ipaddress.ip_interface('2001:db8::1/96')
     >>> host6.network
     IPv6Network('2001:db8::/96')

Descobrindo quantos endereços individuais estão em uma rede:

     >>> net4 = ipaddress.ip_network('192.0.2.0/24')
     >>> net4.num_addresses
     256
     >>> net6 = ipaddress.ip_network('2001:db8::0/96')
     >>> net6.num_addresses
     4294967296

Iterando através dos endereços “utilizáveis” em uma rede:

     >>> net4 = ipaddress.ip_network('192.0.2.0/24')
     >>> for x in net4.hosts():
     ...     print(x)
     192.0.2.1
     192.0.2.2
     192.0.2.3
     192.0.2.4
     ...
     192.0.2.252
     192.0.2.253
     192.0.2.254

Obtendo a máscara de rede (ou seja, definir bits correspondentes ao
prefixo da rede) ou a máscara de host (qualquer bit que não faça parte
da máscara de rede):

     >>> net4 = ipaddress.ip_network('192.0.2.0/24')
     >>> net4.netmask
     IPv4Address('255.255.255.0')
     >>> net4.hostmask
     IPv4Address('0.0.0.255')
     >>> net6 = ipaddress.ip_network('2001:db8::0/96')
     >>> net6.netmask
     IPv6Address('ffff:ffff:ffff:ffff:ffff:ffff::')
     >>> net6.hostmask
     IPv6Address('::ffff:ffff')

Explodindo ou compactando o endereço:

     >>> addr6.exploded
     '2001:0db8:0000:0000:0000:0000:0000:0001'
     >>> addr6.compressed
     '2001:db8::1'
     >>> net6.exploded
     '2001:0db8:0000:0000:0000:0000:0000:0000/96'
     >>> net6.compressed
     '2001:db8::/96'

Embora o IPv4 não tenha suporte a explosão ou compactação, os objetos
associados ainda fornecem as propriedades relevantes para que o código
de versão neutra possa facilmente garantir que o formato mais conciso ou
mais detalhado seja usado para endereços IPv6, ao mesmo tempo que
manipula corretamente os endereços IPv4.


File: python.info,  Node: Redes como listas de Addresses,  Next: Comparações<4>,  Prev: Inspecionando objetos endereço/rede/interface,  Up: Uma introdução ao módulo ipaddress

9.15.3 Redes como listas de Addresses
-------------------------------------

Às vezes é útil tratar redes como listas.  Isso significa que é possível
indexá-las assim:

     >>> net4[1]
     IPv4Address('192.0.2.1')
     >>> net4[-1]
     IPv4Address('192.0.2.255')
     >>> net6[1]
     IPv6Address('2001:db8::1')
     >>> net6[-1]
     IPv6Address('2001:db8::ffff:ffff')

Isso também significa que os objetos de rede se prestam ao uso da
sintaxe de teste de pertinência de lista como esta:

     if endereço in rede:
         # faz algo

O teste de contenção é feito de forma eficiente com base no prefixo de
rede:

     >>> addr4 = ipaddress.ip_address('192.0.2.1')
     >>> addr4 in ipaddress.ip_network('192.0.2.0/24')
     True
     >>> addr4 in ipaddress.ip_network('192.0.3.0/24')
     False


File: python.info,  Node: Comparações<4>,  Next: Usando endereços IP com outros módulos,  Prev: Redes como listas de Addresses,  Up: Uma introdução ao módulo ipaddress

9.15.4 Comparações
------------------

*note ipaddress: 80. fornece algumas maneiras simples e,
esperançosamente, intuitivas de comparar objetos, onde faz sentido:

     >>> ipaddress.ip_address('192.0.2.1') < ipaddress.ip_address('192.0.2.2')
     True

Uma exceção *note TypeError: 2c3. é levantada se você tentar comparar
objetos de versões ou tipos diferentes.


File: python.info,  Node: Usando endereços IP com outros módulos,  Next: Obtendo mais detalhes quando a criação da instância falha,  Prev: Comparações<4>,  Up: Uma introdução ao módulo ipaddress

9.15.5 Usando endereços IP com outros módulos
---------------------------------------------

Outros módulos que usam endereços IP (como *note socket: cc.) geralmente
não aceitam objetos deste módulo diretamente.  Em vez disso, eles devem
ser convertidos para um inteiro ou string que o outro módulo aceitará:

     >>> addr4 = ipaddress.ip_address('192.0.2.1')
     >>> str(addr4)
     '192.0.2.1'
     >>> int(addr4)
     3221225985


File: python.info,  Node: Obtendo mais detalhes quando a criação da instância falha,  Prev: Usando endereços IP com outros módulos,  Up: Uma introdução ao módulo ipaddress

9.15.6 Obtendo mais detalhes quando a criação da instância falha
----------------------------------------------------------------

Ao criar objetos de endereço/rede/interface usando as funções de fábrica
agnósticas de versão, quaisquer erros serão relatados como *note
ValueError: 202. com uma mensagem de erro genérica que simplesmente diz
que o valor passado não foi reconhecido como um objeto daquele tipo.  A
falta de um erro específico é porque é necessário saber se o valor
'supõe' ser IPv4 ou IPv6 para fornecer mais detalhes sobre o motivo de
sua rejeição.

Para dar suporte a casos de uso em que é útil ter acesso a esse detalhe
adicional, os construtores de classe individuais na verdade geram as
subclasses *note ValueError: 202. *note ipaddress.AddressValueError:
3e86. e *note ipaddress.NetmaskValueError: 3ea7. para indicar exatamente
qual parte da definição falhou ao ser analisada corretamente.

As mensagens de erro são significativamente mais detalhadas ao usar os
construtores de classe diretamente.  Por exemplo:

     >>> ipaddress.ip_address("192.168.0.256")
     Traceback (most recent call last):
       ...
     ValueError: '192.168.0.256' does not appear to be an IPv4 or IPv6 address
     >>> ipaddress.IPv4Address("192.168.0.256")
     Traceback (most recent call last):
       ...
     ipaddress.AddressValueError: Octet 256 (> 255) not permitted in '192.168.0.256'

     >>> ipaddress.ip_network("192.168.0.1/64")
     Traceback (most recent call last):
       ...
     ValueError: '192.168.0.1/64' does not appear to be an IPv4 or IPv6 network
     >>> ipaddress.IPv4Network("192.168.0.1/64")
     Traceback (most recent call last):
       ...
     ipaddress.NetmaskValueError: '64' is not a valid netmask

Entretanto, ambas as exceções específicas do módulo têm *note
ValueError: 202. como classe pai, então se você não estiver preocupado
com o tipo específico de erro, você ainda pode escrever código como o
seguinte:

     try:
         network = ipaddress.IPv4Network(address)
     except ValueError:
         print('endereço/máscara de rede é inválida para IPv4:', address)


File: python.info,  Node: Instrumentando o CPython com DTrace e SystemTap,  Next: Suporte do Python ao perfilador perf do Linux,  Prev: Uma introdução ao módulo ipaddress,  Up: Python HOWTOs

9.16 Instrumentando o CPython com DTrace e SystemTap
====================================================


autor: David Malcolm


autor: Łukasz Langa

DTrace e SystemTap são ferramentas de monitoramento, cada uma fornecendo
uma maneira de inspecionar o que os processos em um sistema de
computador estão fazendo.  Ambas usam linguagens específicas de domínio,
permitindo que um usuário escreva scripts que:

   - filtrar quais processos devem ser observados

   - coletem dados dos processos de interesse

   - gerem relatórios sobre os dados

A partir do Python 3.6, o CPython pode ser criado com “marcadores”
incorporados, também conhecidos como “sondas” ('probes'), que podem ser
observados por um script DTrace ou SystemTap, facilitando o
monitoramento do que os processos CPython em um sistema estão fazendo.

Os marcadores DTrace são detalhes de implementação do interpretador
CPython.  Não há garantias sobre a compatibilidade de sondas entre
versões do CPython.  Os scripts DTrace podem parar de funcionar ou
funcionar incorretamente sem aviso ao alterar as versões do CPython.

* Menu:

* Habilitando os marcadores estáticos::
* Sondas estáticas do DTtrace::
* Marcadores estáticos do SystemTap::
* Marcadores estáticos disponíveis::
* Tapsets de SystemTap::
* Exemplos: Exemplos<39>.


File: python.info,  Node: Habilitando os marcadores estáticos,  Next: Sondas estáticas do DTtrace,  Up: Instrumentando o CPython com DTrace e SystemTap

9.16.1 Habilitando os marcadores estáticos
------------------------------------------

O macOS vem com suporte embutido para DTrace.  No Linux, para construir
o CPython com os marcadores incorporados para SystemTap, as ferramentas
de desenvolvimento SystemTap devem ser instaladas.

Em uma máquina Linux, isso pode ser feito via:

     $ yum install systemtap-sdt-devel

ou:

     $ sudo apt-get install systemtap-sdt-dev

O CPython deve então ser *note configurado com a opção -with-dtrace:
1f3d.:

     checking for --with-dtrace... yes

No macOS, você pode listar as sondas DTrace disponíveis executando um
processo Python em segundo plano e listando todas as sondas
disponibilizadas pelo provedor Python:

     $ python3.6 -q &
     $ sudo dtrace -l -P python$!  # or: dtrace -l -m python3.6

        ID   PROVIDER            MODULE                          FUNCTION NAME
     29564 python18035        python3.6          _PyEval_EvalFrameDefault function-entry
     29565 python18035        python3.6             dtrace_function_entry function-entry
     29566 python18035        python3.6          _PyEval_EvalFrameDefault function-return
     29567 python18035        python3.6            dtrace_function_return function-return
     29568 python18035        python3.6                           collect gc-done
     29569 python18035        python3.6                           collect gc-start
     29570 python18035        python3.6          _PyEval_EvalFrameDefault line
     29571 python18035        python3.6                 maybe_dtrace_line line

No Linux, você pode verificar se os marcadores estáticos do SystemTap
estão presentes no binário compilado, observando se ele contém uma seção
“.note.stapsdt”.

     $ readelf -S ./python | grep .note.stapsdt
     [30] .note.stapsdt        NOTE         0000000000000000 00308d78

Se você construiu o Python como uma biblioteca compartilhada (com a
opção de configuração *note -enable-shared: 866.), você precisa procurar
dentro da biblioteca compartilhada.  Por exemplo:

     $ readelf -S libpython3.3dm.so.1.0 | grep .note.stapsdt
     [29] .note.stapsdt        NOTE         0000000000000000 00365b68

Um readelf moderno o suficiente pode exibir os metadados:

     $ readelf -n ./python

     Displaying notes found at file offset 0x00000254 with length 0x00000020:
         Owner                 Data size          Description
         GNU                  0x00000010          NT_GNU_ABI_TAG (ABI version tag)
             OS: Linux, ABI: 2.6.32

     Displaying notes found at file offset 0x00000274 with length 0x00000024:
         Owner                 Data size          Description
         GNU                  0x00000014          NT_GNU_BUILD_ID (unique build ID bitstring)
             Build ID: df924a2b08a7e89f6e11251d4602022977af2670

     Displaying notes found at file offset 0x002d6c30 with length 0x00000144:
         Owner                 Data size          Description
         stapsdt              0x00000031          NT_STAPSDT (SystemTap probe descriptors)
             Provider: python
             Name: gc__start
             Location: 0x00000000004371c3, Base: 0x0000000000630ce2, Semaphore: 0x00000000008d6bf6
             Arguments: -4@%ebx
         stapsdt              0x00000030          NT_STAPSDT (SystemTap probe descriptors)
             Provider: python
             Name: gc__done
             Location: 0x00000000004374e1, Base: 0x0000000000630ce2, Semaphore: 0x00000000008d6bf8
             Arguments: -8@%rax
         stapsdt              0x00000045          NT_STAPSDT (SystemTap probe descriptors)
             Provider: python
             Name: function__entry
             Location: 0x000000000053db6c, Base: 0x0000000000630ce2, Semaphore: 0x00000000008d6be8
             Arguments: 8@%rbp 8@%r12 -4@%eax
         stapsdt              0x00000046          NT_STAPSDT (SystemTap probe descriptors)
             Provider: python
             Name: function__return
             Location: 0x000000000053dba8, Base: 0x0000000000630ce2, Semaphore: 0x00000000008d6bea
             Arguments: 8@%rbp 8@%r12 -4@%eax

Os metadados acima contêm informações sobre o SystemTap descrevendo como
ele pode corrigir instruções de código de máquina estrategicamente
posicionadas para habilitar os ganchos de rastreamento usados por um
script do SystemTap.


File: python.info,  Node: Sondas estáticas do DTtrace,  Next: Marcadores estáticos do SystemTap,  Prev: Habilitando os marcadores estáticos,  Up: Instrumentando o CPython com DTrace e SystemTap

9.16.2 Sondas estáticas do DTtrace
----------------------------------

O script DTrace de exemplo a seguir pode ser usado para mostrar a
hierarquia de chamada/retorno de um script Python, rastreando apenas
dentro da invocação de uma função chamada “start”.  Em outras palavras,
invocações de função em tempo de importação não serão listadas:

     self int indent;

     python$target:::function-entry
     /copyinstr(arg1) == "start"/
     {
             self->trace = 1;
     }

     python$target:::function-entry
     /self->trace/
     {
             printf("%d\t%*s:", timestamp, 15, probename);
             printf("%*s", self->indent, "");
             printf("%s:%s:%d\n", basename(copyinstr(arg0)), copyinstr(arg1), arg2);
             self->indent++;
     }

     python$target:::function-return
     /self->trace/
     {
             self->indent--;
             printf("%d\t%*s:", timestamp, 15, probename);
             printf("%*s", self->indent, "");
             printf("%s:%s:%d\n", basename(copyinstr(arg0)), copyinstr(arg1), arg2);
     }

     python$target:::function-return
     /copyinstr(arg1) == "start"/
     {
             self->trace = 0;
     }

Pode ser invocado assim:

     $ sudo dtrace -q -s call_stack.d -c "python3.6 script.py"

O resultado deve ser algo assim:

     156641360502280  function-entry:call_stack.py:start:23
     156641360518804  function-entry: call_stack.py:function_1:1
     156641360532797  function-entry:  call_stack.py:function_3:9
     156641360546807 function-return:  call_stack.py:function_3:10
     156641360563367 function-return: call_stack.py:function_1:2
     156641360578365  function-entry: call_stack.py:function_2:5
     156641360591757  function-entry:  call_stack.py:function_1:1
     156641360605556  function-entry:   call_stack.py:function_3:9
     156641360617482 function-return:   call_stack.py:function_3:10
     156641360629814 function-return:  call_stack.py:function_1:2
     156641360642285 function-return: call_stack.py:function_2:6
     156641360656770  function-entry: call_stack.py:function_3:9
     156641360669707 function-return: call_stack.py:function_3:10
     156641360687853  function-entry: call_stack.py:function_4:13
     156641360700719 function-return: call_stack.py:function_4:14
     156641360719640  function-entry: call_stack.py:function_5:18
     156641360732567 function-return: call_stack.py:function_5:21
     156641360747370 function-return:call_stack.py:start:28


File: python.info,  Node: Marcadores estáticos do SystemTap,  Next: Marcadores estáticos disponíveis,  Prev: Sondas estáticas do DTtrace,  Up: Instrumentando o CPython com DTrace e SystemTap

9.16.3 Marcadores estáticos do SystemTap
----------------------------------------

A maneira de baixo nível de usar a integração do SystemTap é usar os
marcadores estáticos diretamente.  Isso requer que você declare
explicitamente o arquivo binário que os contém.

Por exemplo, este script SystemTap pode ser usado para mostrar a
hierarquia de chamada/retorno de um script Python:

     probe process("python").mark("function__entry") {
          filename = user_string($arg1);
          funcname = user_string($arg2);
          lineno = $arg3;

          printf("%s => %s in %s:%d\\n",
                 thread_indent(1), funcname, filename, lineno);
     }

     probe process("python").mark("function__return") {
         filename = user_string($arg1);
         funcname = user_string($arg2);
         lineno = $arg3;

         printf("%s <= %s in %s:%d\\n",
                thread_indent(-1), funcname, filename, lineno);
     }

Pode ser invocado assim:

     $ stap \
       show-call-hierarchy.stp \
       -c "./python test.py"

O resultado deve ser algo assim:

     11408 python(8274):        => __contains__ in Lib/_abcoll.py:362
     11414 python(8274):         => __getitem__ in Lib/os.py:425
     11418 python(8274):          => encode in Lib/os.py:490
     11424 python(8274):          <= encode in Lib/os.py:493
     11428 python(8274):         <= __getitem__ in Lib/os.py:426
     11433 python(8274):        <= __contains__ in Lib/_abcoll.py:366

sendo as colunas:

   - tempo em microssegundos desde o início do script

   - nome do executável

   - PID do processo

e o restante indica a hierarquia de chamada/retorno conforme o script é
executado.

Para uma construção com *note -enable-shared: 866. do CPython, os
marcadores estão contidos na biblioteca compartilhada libpython, e o
caminho pontilhado da sonda precisa refletir isso.  Por exemplo, esta
linha do exemplo acima:

     probe process("python").mark("function__entry") {

deve ler-se em vez disso:

     probe process("python").library("libpython3.6dm.so.1.0").mark("function__entry") {

(presumindo uma *note construção de depuração: 1f9. do CPython 3.6)


File: python.info,  Node: Marcadores estáticos disponíveis,  Next: Tapsets de SystemTap,  Prev: Marcadores estáticos do SystemTap,  Up: Instrumentando o CPython com DTrace e SystemTap

9.16.4 Marcadores estáticos disponíveis
---------------------------------------

 -- Object: function__entry(str filename, str funcname, int lineno)

     Este marcador indica que a execução de uma função Python começou.
     Ele é acionado somente para funções Python puro (bytecode).

     O nome do arquivo, o nome da função e o número da linha são
     fornecidos de volta ao script de rastreamento como argumentos
     posicionais, que devem ser acessados usando ‘$arg1’, ‘$arg2’,
     ‘$arg3’:

             * ‘$arg1’ : nome de arquivo como ‘(const char *)’,
               acessível usando ‘user_string($arg1)’

             * ‘$arg2’ : nome da função como ‘(const char *)’, acessível
               usando ‘user_string($arg2)’

             * ‘$arg3’ : número da linha como ‘int’

 -- Object: function__return(str filename, str funcname, int lineno)

     Este marcador é o inverso de ‘function__entry()’, e indica que a
     execução de uma função Python terminou (seja via ‘return’, ou via
     uma exceção).  Ele é acionado somente para funções Python puro
     (bytecode).

     Os argumentos são os mesmos de ‘function__entry()’

 -- Object: line(str filename, str funcname, int lineno)

     Este marcador indica que uma linha Python está prestes a ser
     executada.  É o equivalente ao rastreamento linha por linha com um
     perfilador Python.  Ele não é acionado dentro de funções C.

     Os argumentos são os mesmos de ‘function__entry()’.

 -- Object: gc__start(int generation)

     Dispara quando o interpretador Python inicia um ciclo de coleta de
     lixo.  ‘arg0’ é a geração a ser percurrida, como *note
     gc.collect(): a43.

 -- Object: gc__done(long collected)

     Dispara quando o interpretador Python termina um ciclo de coleta de
     lixo.  ‘arg0’ é o número de objetos coletados.

 -- Object: import__find__load__start(str modulename)

     Dispara antes de *note importlib: 77. tentar encontrar e carregar o
     módulo.  ‘arg0’ é o nome do módulo.

     Adicionado na versão 3.7.

 -- Object: import__find__load__done(str modulename, int found)

     Dispara após a função find_and_load do *note importlib: 77. ser
     chamada.  ‘arg0’ é o nome do módulo, ‘arg1’ indica se o módulo foi
     carregado com sucesso.

     Adicionado na versão 3.7.

 -- Object: audit(str event, void *tuple)

     Dispara quando *note sys.audit(): 16a0. ou *note PySys_Audit():
     36f. é chamada.  ‘arg0’ é o nome do evento como string C, ‘arg1’ é
     um ponteiro *note PyObject: 339. para um objeto tupla.

     Adicionado na versão 3.8.


File: python.info,  Node: Tapsets de SystemTap,  Next: Exemplos<39>,  Prev: Marcadores estáticos disponíveis,  Up: Instrumentando o CPython com DTrace e SystemTap

9.16.5 Tapsets de SystemTap
---------------------------

A maneira mais avançada de usar a integração do SystemTap é usar um
“tapset”: o equivalente do SystemTap a uma biblioteca, que oculta alguns
dos detalhes de nível inferior dos marcadores estáticos.

Aqui está um arquivo tapset, baseado em uma construção não compartilhada
do CPython:

     /*
        Fornece um envólucro de mais alto nível em volta dos marcadores
        function__entry e function__return:
      \*/
     probe python.function.entry = process("python").mark("function__entry")
     {
         filename = user_string($arg1);
         funcname = user_string($arg2);
         lineno = $arg3;
         frameptr = $arg4
     }
     probe python.function.return = process("python").mark("function__return")
     {
         filename = user_string($arg1);
         funcname = user_string($arg2);
         lineno = $arg3;
         frameptr = $arg4
     }

Se este arquivo for instalado no diretório de tapsets do SystemTap (por
exemplo, ‘/usr/share/systemtap/tapset’), estes pontos de sondagem
adicionais ficarão disponíveis:

 -- Object: python.function.entry(str filename, str funcname, int
          lineno, frameptr)

     Este ponto de sondagem indica que a execução de uma função Python
     começou.  Ele é acionado somente para funções Python puro
     (bytecode).

 -- Object: python.function.return(str filename, str funcname, int
          lineno, frameptr)

     Este ponto de sondagem é o inverso de ‘python.function.return’, e
     indica que a execução de uma função Python terminou (seja via
     ‘return’, ou via uma exceção).  Ele é acionado somente para funções
     Python puro (bytecode).


File: python.info,  Node: Exemplos<39>,  Prev: Tapsets de SystemTap,  Up: Instrumentando o CPython com DTrace e SystemTap

9.16.6 Exemplos
---------------

Este script SystemTap usa o tapset acima para implementar de forma mais
limpa o exemplo dado acima de rastreamento da hierarquia de chamada de
função Python, sem precisar na diretamente

     probe python.function.entry
     {
       printf("%s => %s in %s:%d\n",
              thread_indent(1), funcname, filename, lineno);
     }

     probe python.function.return
     {
       printf("%s <= %s in %s:%d\n",
              thread_indent(-1), funcname, filename, lineno);
     }

O script a seguir usa o tapset acima para fornecer uma visão geral de
todo o código CPython em execução, mostrando os 20 quadros de bytecode
mais frequentemente inseridos, a cada segundo, em todo o sistema:

     global fn_calls;

     probe python.function.entry
     {
         fn_calls[pid(), filename, funcname, lineno] += 1;
     }

     probe timer.ms(1000) {
         printf("\033[2J\033[1;1H") /* clear screen \*/
         printf("%6s %80s %6s %30s %6s\n",
                "PID", "FILENAME", "LINE", "FUNCTION", "CALLS")
         foreach ([pid, filename, funcname, lineno] in fn_calls- limit 20) {
             printf("%6d %80s %6d %30s %6d\n",
                 pid, filename, lineno, funcname,
                 fn_calls[pid, filename, funcname, lineno]);
         }
         delete fn_calls;
     }


File: python.info,  Node: Suporte do Python ao perfilador perf do Linux,  Next: Boas práticas para anotações,  Prev: Instrumentando o CPython com DTrace e SystemTap,  Up: Python HOWTOs

9.17 Suporte do Python ao perfilador ‘perf’ do Linux
====================================================


autor: Pablo Galindo

O perfilador perf do Linux(1) é uma ferramenta muito poderosa que
permite criar perfis e obter informações sobre o desempenho da sua
aplicação.  ‘perf’ também possui um ecossistema muito vibrante de
ferramentas que auxiliam na análise dos dados que produz.

O principal problema de usar o perfilador ‘perf’ com aplicações Python é
que ‘perf’ apenas obtém informações sobre símbolos nativos, ou seja, os
nomes de funções e procedimentos escritos em C. Isso significa que os
nomes de funções Python e seus nomes de arquivos em seu código não
aparecerão na saída de ‘perf’.

Desde o Python 3.12, o interpretador pode ser executado em um modo
especial que permite que funções do Python apareçam na saída do criador
de perfilador ‘perf’.  Quando este modo está habilitado, o interpretador
interporá um pequeno pedaço de código compilado instantaneamente antes
da execução de cada função Python e ensinará ‘perf’ a relação entre este
pedaço de código e a função Python associada usando *note arquivos de
mapa perf: 4efb.

     Nota: O suporte para o perfilador ‘perf’ está atualmente disponível
     apenas para Linux em arquiteturas selecionadas.  Verifique a saída
     da etapa de construção ‘configure’ ou verifique a saída de ‘python
     -m sysconfig | grep HAVE_PERF_TRAMPOLINE’ para ver se o seu sistema
     é compatível.

Por exemplo, considere o seguinte script:

     def foo(n):
         result = 0
         for _ in range(n):
             result += 1
         return result

     def bar(n):
         foo(n)

     def baz(n):
         bar(n)

     if __name__ == "__main__":
         baz(1000000)

Podemos executar ‘perf’ para obter amostras de rastreamentos de pilha da
CPU em 9999 hertz:

     $ perf record -F 9999 -g -o perf.data python meu_script.py

Então podemos usar ‘perf report’ para analisar os dados:

     $ perf report --stdio -n -g

     # Children      Self       Samples  Command     Shared Object       Symbol
     # ........  ........  ............  ..........  ..................  ..........................................
     #
         91.08%     0.00%             0  python.exe  python.exe          [.] _start
                 |
                 ---_start
                 |
                     --90.71%--__libc_start_main
                             Py_BytesMain
                             |
                             |--56.88%--pymain_run_python.constprop.0
                             |          |
                             |          |--56.13%--_PyRun_AnyFileObject
                             |          |          _PyRun_SimpleFileObject
                             |          |          |
                             |          |          |--55.02%--run_mod
                             |          |          |          |
                             |          |          |           --54.65%--PyEval_EvalCode
                             |          |          |                     _PyEval_EvalFrameDefault
                             |          |          |                     PyObject_Vectorcall
                             |          |          |                     _PyEval_Vector
                             |          |          |                     _PyEval_EvalFrameDefault
                             |          |          |                     PyObject_Vectorcall
                             |          |          |                     _PyEval_Vector
                             |          |          |                     _PyEval_EvalFrameDefault
                             |          |          |                     PyObject_Vectorcall
                             |          |          |                     _PyEval_Vector
                             |          |          |                     |
                             |          |          |                     |--51.67%--_PyEval_EvalFrameDefault
                             |          |          |                     |          |
                             |          |          |                     |          |--11.52%--_PyLong_Add
                             |          |          |                     |          |          |
                             |          |          |                     |          |          |--2.97%--_PyObject_Malloc
     ...

Como você pode ver, as funções Python não são mostradas na saída, apenas
‘_PyEval_EvalFrameDefault’ (a função que avalia o bytecode Python)
aparece.  Infelizmente isso não é muito útil porque todas as funções
Python usam a mesma função C para avaliar bytecode, portanto não podemos
saber qual função Python corresponde a qual função de avaliação de
bytecode.

Em vez disso, se executarmos o mesmo experimento com o suporte ‘perf’
ativado, obteremos:

     $ perf report --stdio -n -g

     # Children      Self       Samples  Command     Shared Object       Symbol
     # ........  ........  ............  ..........  ..................  .....................................................................
     #
         90.58%     0.36%             1  python.exe  python.exe          [.] _start
                 |
                 ---_start
                 |
                     --89.86%--__libc_start_main
                             Py_BytesMain
                             |
                             |--55.43%--pymain_run_python.constprop.0
                             |          |
                             |          |--54.71%--_PyRun_AnyFileObject
                             |          |          _PyRun_SimpleFileObject
                             |          |          |
                             |          |          |--53.62%--run_mod
                             |          |          |          |
                             |          |          |           --53.26%--PyEval_EvalCode
                             |          |          |                     py::<module>:/src/script.py
                             |          |          |                     _PyEval_EvalFrameDefault
                             |          |          |                     PyObject_Vectorcall
                             |          |          |                     _PyEval_Vector
                             |          |          |                     py::baz:/src/script.py
                             |          |          |                     _PyEval_EvalFrameDefault
                             |          |          |                     PyObject_Vectorcall
                             |          |          |                     _PyEval_Vector
                             |          |          |                     py::bar:/src/script.py
                             |          |          |                     _PyEval_EvalFrameDefault
                             |          |          |                     PyObject_Vectorcall
                             |          |          |                     _PyEval_Vector
                             |          |          |                     py::foo:/src/script.py
                             |          |          |                     |
                             |          |          |                     |--51.81%--_PyEval_EvalFrameDefault
                             |          |          |                     |          |
                             |          |          |                     |          |--13.77%--_PyLong_Add
                             |          |          |                     |          |          |
                             |          |          |                     |          |          |--3.26%--_PyObject_Malloc

* Menu:

* Como habilitar o suporte a perfilação com perf::
* Como obter os melhores resultados::
* Como trabalhar sem ponteiros de quadro::

   ---------- Footnotes ----------

   (1) https://perf.wiki.kernel.org


File: python.info,  Node: Como habilitar o suporte a perfilação com perf,  Next: Como obter os melhores resultados,  Up: Suporte do Python ao perfilador perf do Linux

9.17.1 Como habilitar o suporte a perfilação com ‘perf’
-------------------------------------------------------

O suporte à perfilação com ‘perf’ pode ser habilitado desde o início
usando a variável de ambiente *note PYTHONPERFSUPPORT: 46e. ou a opção
*note -X perf: 176, ou dinamicamente usando *note
sys.activate_stack_trampoline(): 46f. e *note
sys.deactivate_stack_trampoline(): 470.

As funções ‘sys’ têm precedência sobre a opção ‘-X’, a opção ‘-X’ tem
precedência sobre a variável de ambiente.

Exemplo usando a variável de ambiente:

     $ PYTHONPERFSUPPORT=1 perf record -F 9999 -g -o perf.data python meu_script.py
     $ perf report -g -i perf.data

Exemplo usando a opção ‘-X’:

     $ perf record -F 9999 -g -o perf.data python -X perf meu_script.py
     $ perf report -g -i perf.data

Exemplo usando as APIs de *note sys: d9. em ‘example.py’:

     import sys

     sys.activate_stack_trampoline("perf")
     do_profiled_stuff()
     sys.deactivate_stack_trampoline()

     non_profiled_stuff()

… então:

     $ perf record -F 9999 -g -o perf.data python ./example.py
     $ perf report -g -i perf.data


File: python.info,  Node: Como obter os melhores resultados,  Next: Como trabalhar sem ponteiros de quadro,  Prev: Como habilitar o suporte a perfilação com perf,  Up: Suporte do Python ao perfilador perf do Linux

9.17.2 Como obter os melhores resultados
----------------------------------------

Para melhores resultados, Python deve ser compilado com
‘CFLAGS="-fno-omit-frame-pointer -mno-omit-leaf-frame-pointer"’, pois
isso permite que os perfiladores façam o desenrolamento de pilha (ou
'stack unwinding') usando apenas o ponteiro de quadro e não no DWARF
informações de depuração.  Isso ocorre porque como o código interposto
para permitir o suporte ‘perf’ é gerado dinamicamente, ele não possui
nenhuma informação de depuração DWARF disponível.

Você pode verificar se o seu sistema foi compilado com este sinalizador
executando:

     $ python -m sysconfig | grep 'no-omit-frame-pointer'

Se você não vir nenhuma saída, significa que seu interpretador não foi
compilado com ponteiros de quadro e, portanto, pode não ser capaz de
mostrar funções Python na saída de ‘perf’.


File: python.info,  Node: Como trabalhar sem ponteiros de quadro,  Prev: Como obter os melhores resultados,  Up: Suporte do Python ao perfilador perf do Linux

9.17.3 Como trabalhar sem ponteiros de quadro
---------------------------------------------

Se você estiver trabalhando com um interpretador Python que foi
compilado sem ponteiros de quadro, você ainda pode usar o perfilador
‘perf’, mas a sobrecarga será um pouco maior porque o Python precisa
gerar informações de desenrolamento para cada chamada de função Python
em tempo real.  Além disso, ‘perf’ levará mais tempo para processar os
dados porque precisará usar as informações de depuração DWARF para
desenrolar a pilha e este é um processo lento.

Para habilitar esse modo, você pode usar a variável de ambiente *note
PYTHON_PERF_JIT_SUPPORT: 190. ou a opção *note -X perf_jit: 176, que
habilitará o modo JIT para o perfilador ‘perf’.

     Nota: Devido a um bug na ferramenta ‘perf’, apenas versões ‘perf’
     superiores à v6.8 funcionarão com o modo JIT. A correção também foi
     portada para a versão v6.7.2 da ferramenta.

     Note que ao verificar a versão da ferramenta ‘perf’ (o que pode ser
     feito executando ‘perf version’) você deve levar em conta que
     algumas distros adicionam alguns números de versão personalizados,
     incluindo um caractere ‘-’.  Isso significa que ‘perf 6.7-3’ não é
     necessariamente ‘perf 6.7.3’.

Ao usar o modo JIT do perf, você precisa de uma etapa extra antes de
poder executar ‘perf report’.  Você precisa chamar o comando ‘perf
inject’ para injetar as informações JIT no arquivo ‘perf.data’.:

     $ perf record -F 9999 -g -k 1 --call-graph dwarf -o perf.data python -Xperf_jit meu_script.py
     $ perf inject -i perf.data --jit --output perf.jit.data
     $ perf report -g -i perf.jit.data

ou usando a variável de ambiente:

     $ PYTHON_PERF_JIT_SUPPORT=1 perf record -F 9999 -g --call-graph dwarf -o perf.data python meu_script.py
     $ perf inject -i perf.data --jit --output perf.jit.data
     $ perf report -g -i perf.jit.data

O comando ‘perf inject --jit’ lerá ‘perf.data’, pegará automaticamente o
arquivo de dump perf que o Python cria (em ‘/tmp/perf-$PID.dump’) e, em
seguida, criará ‘perf.jit.data’ que mescla todas as informações JIT. Ele
também deve criar muitos arquivos ‘jitted-XXXX-N.so’ no diretório atual,
que são imagens ELF para todos os trampolins JIT que foram criados pelo
Python.

     Aviso: Ao usar ‘--call-graph dwarf’, a ferramenta ‘perf’ fará
     snapshots da pilha do processo que está sendo perfilado e salvará
     as informações no arquivo ‘perf.data’.  Por padrão, o tamanho do
     dump da pilha é de 8192 bytes, mas você pode alterar o tamanho
     passando-o após uma vírgula, como ‘--call-graph dwarf,16384’.

     O tamanho do dump da pilha é importante porque, se for muito
     pequeno, o ‘perf’ não conseguirá desfazer o descompasso da pilha e
     a saída será incompleta.  Por outro lado, se for muito grande, o
     ‘perf’ não conseguirá amostrar o processo com a frequência
     desejada, pois a sobrecarga será maior.

     O tamanho da pilha é particularmente importante ao criar perfis de
     código Python compilado com níveis de otimização baixos (como
     ‘-O0’), pois essas construções tendem a ter quadros de pilha
     maiores.  Se você estiver compilando Python com ‘-O0’ e não estiver
     vendo funções Python na saída do perfil, tente aumentar o tamanho
     do despejo de pilha para 65528 bytes (o máximo):

          $ perf record -F 9999 -g -k 1 --call-graph dwarf,65528 -o perf.data python -Xperf_jit meu_script.py

     Diferentes sinalizadores de compilação podem impactar
     significativamente os tamanhos de pilha:

        - Construções com ‘-O0’ geralmente têm quadros de pilha muito
          maiores do que aquelas com ‘-O1’ ou superior

        - Adiciona otimizações (‘-O1’, ‘-O2’, etc.)  normalmente reduz o
          tamanho da pilha

        - Os ponteiros de quadro (‘-fno-omit-frame-pointer’) geralmente
          fornecem um desenrolamento de pilha mais confiável


File: python.info,  Node: Boas práticas para anotações,  Next: Isolando módulos de extensão,  Prev: Suporte do Python ao perfilador perf do Linux,  Up: Python HOWTOs

9.18 Boas práticas para anotações
=================================


autor: Larry Hastings

Resumo
......

Este documento foi projetado para encapsular as melhores práticas para
trabalhar com anotações.  Se você escrever um código Python que examina
‘__annotations__’ nos objetos Python, nós o encorajamos a seguir as
diretrizes descritas abaixo.

Este documento está dividido em quatro seções: melhores práticas para
acessar as anotações de um objeto no Python na versão 3.10 e versões
mais recente, melhores práticas para acessar as anotações de um objeto
no Python na versão 3.9 e versões mais antiga, outras melhores práticas
para ‘__annotations__’ para qualquer versão do Python e peculiaridades
do ‘__annotations__’.

Note que este documento é específico sobre trabalhar com
‘__annotations__’, não para o uso 'de' anotações.  Se você está
procurando por informações sobre como usar “type hints” no seu código,
por favor veja o módulo *note typing: 104.

* Menu:

* Acessando o dicionário de anotações de um objeto no Python 3.10 e nas versões mais recentes: Acessando o dicionário de anotações de um objeto no Python 3 10 e nas versões mais recentes.
* Acessando o dicionário de anotações de um objeto no Python 3.9 e nas versões mais antigas: Acessando o dicionário de anotações de um objeto no Python 3 9 e nas versões mais antigas.
* Recuperando manualmente anotações transformadas em strings::
* Melhores práticas para __annotations__ em qualquer versão Python::
* Peculiaridades de __annotations__::


File: python.info,  Node: Acessando o dicionário de anotações de um objeto no Python 3 10 e nas versões mais recentes,  Next: Acessando o dicionário de anotações de um objeto no Python 3 9 e nas versões mais antigas,  Up: Boas práticas para anotações

9.18.1 Acessando o dicionário de anotações de um objeto no Python 3.10 e nas versões mais recentes
--------------------------------------------------------------------------------------------------

O Python 3.10 adicionou uma nova função para a biblioteca padrão: *note
inspect.get_annotations(): 816.  No Python 3.10 e nas versões mais
recentes, chamar esta função é a melhor prática para acessar o
dicionário de anotações de qualquer objeto com suporte a anotações.
Esta função pode até “destextualizar” anotações textualizadas para você.

Se por alguma razão *note inspect.get_annotations(): 816. não for viável
para o seu caso de uso, você pode acessar o membro de dados
‘__annotations__’ manualmente.  As melhores práticas para isto também
mudaram no Python 3.10: a partir do Python 3.10, ‘o.__annotations__’ é
garantido 'sempre' funcionar em funções, classes e módulos Python.  Se
você tem certeza que o objeto que você está examinando é um desses três
'exatos' objetos, pode simplesmente usar ‘o.__annotations__’ para chegar
no dicionário de anotações do objeto.

Contudo, outros tipos de chamáveis – por exemplo, chamáveis criados por
*note functools.partial(): 414. – podem não ter um atributo
‘__annotations__’ definido.  Ao acessar o ‘__annotations__’ de um objeto
possivelmente desconhecido, as melhores práticas nas versões de Python
3.10 e mais novas é chamar *note getattr(): bea. com três argumentos,
por exemplo ‘getattr(o, '__annotations__', None)’.

Antes de Python 3.10, acessar ‘__annotations__’ numa classe que não
define anotações mas que possui uma classe base com anotações retorna o
‘__annotations__’ da classe pai.  A partir do Python 3.10, a anotação da
classe filha será um dicionário vazio.


File: python.info,  Node: Acessando o dicionário de anotações de um objeto no Python 3 9 e nas versões mais antigas,  Next: Recuperando manualmente anotações transformadas em strings,  Prev: Acessando o dicionário de anotações de um objeto no Python 3 10 e nas versões mais recentes,  Up: Boas práticas para anotações

9.18.2 Acessando o dicionário de anotações de um objeto no Python 3.9 e nas versões mais antigas
------------------------------------------------------------------------------------------------

Em Python 3.9 e versões mais antigas, acessar o dicionário de anotações
de um objeto é muito mais complicado que em versões mais novas.  O
problema é uma falha de design em versões mais antigas do Python,
especificamente a respeito de anotações de classe.

As melhores práticas para acessar os dicionários de anotações de outros
objetos, funções, outros chamáveis e módulos - são as mesmas melhores
práticas para 3.10, supondo que você não esteja chamando *note
inspect.get_annotations(): 816.: você deve usar a função *note
getattr(): bea. com três argumentos para acessar os atributos do objeto
‘__annotations__’.

Infelizmente, essas não são as melhores práticas para classes.  O
problema é que, como ‘__annotations__’ é opcional nas classes, e posto
que classes podem herdar atributos das suas classes base, acessar o
atributo ‘__annotations__’ de uma classe pode inesperadamente retornar o
dicionário de anotações de uma 'classe base.'  Por exemplo:

     class Base:
         a: int = 3
         b: str = 'abc'

     class Derived(Base):
         pass

     print(Derived.__annotations__)

Isso mostrará o dicionário de anotações de ‘Base’, não de ‘Derived’.

Seu código terá que ter um caminho de código separado se o objeto que
você está examinando for uma classe (‘isinstance(o, type)’).  Nesse
caso, a melhor prática depende de um detalhe de implementação do Python
3.9 e anteriores: se uma classe tiver anotações definidas, elas serão
armazenadas no dicionário *note __dict__: c78. da classe.  Como a classe
pode ou não ter anotações definidas, a melhor prática é chamar o método
*note get(): 1dd2. no dict da classe.

Considerando tudo isso, aqui está um exemplo de código que acessa de
forma segura o atributo ‘__annotations__’ em um objeto arbitrário em
Python 3.9 e anteriores:

     if isinstance(o, type):
         ann = o.__dict__.get('__annotations__', None)
     else:
         ann = getattr(o, '__annotations__', None)

Após executar este código, ‘ann’ deve ser um dicionário ou ‘None’.  Você
é encorajado a fazer uma checagem dupla do tipo de ‘ann’ utilizando
*note isinstance(): 442. antes de uma análise mais aprofundada.

Observe que alguns objetos de tipos exóticos ou malformados podem não
ter atributo um *note __dict__: c78, portanto, para maior segurança,
talvez você também queira usar *note getattr(): bea. para acessar
‘__dict__’.


File: python.info,  Node: Recuperando manualmente anotações transformadas em strings,  Next: Melhores práticas para __annotations__ em qualquer versão Python,  Prev: Acessando o dicionário de anotações de um objeto no Python 3 9 e nas versões mais antigas,  Up: Boas práticas para anotações

9.18.3 Recuperando manualmente anotações transformadas em strings
-----------------------------------------------------------------

Em situações em que as anotações podem ter sido transformadas em
strings, e caso queira avaliar essas strings para produzir os valores de
Python que elas representam, é melhor chamar *note
inspect.get_annotations(): 816. para fazer isto por você.

Se estiver usando Python 3.9 ou anterior, ou por algum motivo não puder
usar *note inspect.get_annotations(): 816, será necessário replicar sua
lógica.  Considere examinar a implementação de *note
inspect.get_annotations(): 816. na versão de Python atual e seguir uma
abordagem similar.

Resumindo, caso deseje avaliar uma anotação transformada em string em um
objeto arbitrário ‘o’:

   * Se ‘o’ for um módulo, use ‘o.__dict__’ como ‘globals’ ao chamar
     *note eval(): 180.

   * Se ‘o’ for uma classe, use ‘sys.modules[o.__module__].__dict__’
     como ‘globals’, e ‘dict(vars(o))’ como ‘locals’, quando chamar
     *note eval(): 180.

   * Se ‘o’ for um chamável envolto em um invólucro usando *note
     functools.update_wrapper(): 1058, *note functools.wraps(): f91. ou
     *note functools.partial(): 414, desenvolva-o iterativamente
     acessando ‘o.__wrapped__’ ou ‘o.func’ conforme apropriado, até
     encontrar a função raiz.

   * Caso ‘o’ seja chamável (mas não uma classe), use *note
     o.__globals__: 1316. como globals quando chamar *note eval(): 180.

Contudo, nem todas strings usadas como anotações podem ser convertidas
em valores de Python utilizando *note eval(): 180.  Valores de string
poderiam teoricamente conter qualquer string válida, e na prática
existem casos válidos para dicas de tipo que requerem anotar com valores
de strings que 'não' podem ser executados.  Por exemplo:

   * Tipos de união PEP 604(1) usando ‘|’, antes do suporte a isso ser
     adicionado em Python 3.10.

   * Definições que não são necessárias no ambiente de execução, apenas
     importadas quando *note typing.TYPE_CHECKING: d15. é verdadeiro.

Caso *note eval(): 180. tente executar tais valores, levantará uma
exceção.  Então, quando projetar uma biblioteca API que trabalha com
anotações, é recomendado que tente executar os valores das strings
apenas quando for solicitado explicitamente.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0604/


File: python.info,  Node: Melhores práticas para __annotations__ em qualquer versão Python,  Next: Peculiaridades de __annotations__,  Prev: Recuperando manualmente anotações transformadas em strings,  Up: Boas práticas para anotações

9.18.4 Melhores práticas para ‘__annotations__’ em qualquer versão Python
-------------------------------------------------------------------------

   * Evite atribuir diretamente ao membro ‘__annotations__’ dos objetos.
     Deixe que Python gerenciar a configuração de ‘__annotations__’.

   * Se você atribuir diretamente ao membro ‘__annotations__’ do objeto,
     sempre o defina como um objeto ‘dict’.

   * Caso acesse diretamente o membro ‘__annotations__’ de um objeto,
     certifique-se de que ele é um dicionário antes de tentar examinar
     seu conteúdo.

   * Evite modificar o dicionário ‘__annotations__’.

   * Evite deletar o atributo ‘__annotations__’ de um objeto.


File: python.info,  Node: Peculiaridades de __annotations__,  Prev: Melhores práticas para __annotations__ em qualquer versão Python,  Up: Boas práticas para anotações

9.18.5 Peculiaridades de ‘__annotations__’
------------------------------------------

Em todas as versões de Python 3, objetos de função criam preguiçosamente
um dicionário de anotações caso nenhuma anotação seja definida nesse
objeto.  Você pode deletar o atributo ‘__annotations__’ utilizando ‘del
fn.__annotations__’, mas ao acessar ‘fn.__annotations__’ o objeto criará
um novo dicionário vazio que será armazenado e retornado como suas
anotações.  Apagar as anotações de uma função antes que ela tenha criado
preguiçosamente seu dicionário de anotações irá produzir um
‘AttributeError’; ao utilizar ‘del fn.__annotations__’ duas vezes em
sequência, é garantido que será produzido um ‘AttributeError’.

O citado no parágrafo acima também se aplica para classes e objetos de
módulo em Python 3.10 e posteriores.

Em todas as versões de Python 3, você pode definir ‘__annotations__’
como ‘None’ em um objeto de função.  Contudo, acessar em sequência as
anotações nesse objeto utilizando ‘fn.__annotations__’ irá criar
preguiçosamente um dicionário vazio como descrito no primeiro parágrafo
dessa seção.  Isso 'não' é válido para módulos e classes, em qualquer
versão de Python; esses objetos permitem atribuir ‘__annotations__’ a
qualquer valor de Python, e armazenam qualquer valor atribuído.

Se Python transformar sua anotação em string (utilizando ‘from
__future__ import annotations’), e você especificar uma string como
anotação, essa string será posta entre aspas.  Na prática a anotação
receberá aspas 'duplas'.  Por exemplo:

     from __future__ import annotations
     def foo(a: "str"): pass

     print(foo.__annotations__)

Isso exibe ‘{'a': "'str'"}’.  Não considere isso como uma
“peculiaridade”; foi mencionado aqui simplesmente porque pode ser
surpreendente.


File: python.info,  Node: Isolando módulos de extensão,  Next: Descritor de arquivo de temporizador,  Prev: Boas práticas para anotações,  Up: Python HOWTOs

9.19 Isolando módulos de extensão
=================================

Resumo
......

Tradicionalmente, o estado que pertence a módulos de extensão do Python
era mantido em variáveis ‘static’ em C, que têm escopo em todo o
processo.  Este documento descreve problemas de tal estado por processo
e apresenta um modo mais seguro: o estado por módulo.

O documento também descreve como migrar para o uso do estado por módulo
onde for possível.  Essa transição envolve alocar espaço para este
estado, potencialmente trocar tipos estáticos por tipos no heap,
e—talvez o mais importante—acessar o estado por módulo a partir do
código.

* Menu:

* Quem deveria ler isto::
* Contexto: Contexto<2>.
* Fazendo módulos seguros com múltiplos interpretadores::
* Tipos no heap: Tipos no heap<2>.
* Problemas em aberto::


File: python.info,  Node: Quem deveria ler isto,  Next: Contexto<2>,  Up: Isolando módulos de extensão

9.19.1 Quem deveria ler isto
----------------------------

Este guia é escrito para mantenedores de extensões que usam a *note API
C: 1d57. que desejam torná-las mais seguras para o uso em aplicações
onde o Python em si é usado como uma biblioteca.


File: python.info,  Node: Contexto<2>,  Next: Fazendo módulos seguros com múltiplos interpretadores,  Prev: Quem deveria ler isto,  Up: Isolando módulos de extensão

9.19.2 Contexto
---------------

Um 'interpretador' é o contexto no qual o código Python é executado.
Ele contém estado de configuração (por exemplo o caminho de importação)
e de tempo de execução (por exemplo o conjunto de módulos importados).

O Python provê suporte para executar múltiplos interpretadores em um
processo.  Dois casos devem ser considerados—usuários podem executar
interpretadores:

   - em sequência, com vários ciclos de *note Py_InitializeEx():
     4dca./*note Py_FinalizeEx(): d37, e

   - em paralelo, gerenciando “sub-interpretadores” usando *note
     Py_NewInterpreter(): 18b9./*note Py_EndInterpreter(): 1985.

Ambos os casos (e combinações deles) são muito úteis ao embutir o Python
em uma biblioteca.  Bibliotecas geralmente não devem fazer suposições
sobre a aplicação que as usa, o que inclui supor um “interpretador
Python principal” para o processo inteiro.

Historicamente, módulos de extensão do Python não lidam bem com este
caso de uso.  Muitos módulos de extensão (e até alguns módulos da
biblioteca padrão) usam estado global 'por processo', uma vez que
variáveis ‘static’ do C são extremamente fáceis de se usar.  Assim,
dados que deveriam ser específicos para um interpretador acabam sendo
compartilhados entre interpretadores.  A menos que o desenvolvedor da
extensão tenha cuidado, é muito fácil criar casos particulares que
acabam quebrando o processo quando um módulo é carregado em mais de um
interpretador no mesmo processo.

Infelizmente, não é fácil fazer o estado por interpretador.  Autores de
extensões tendem a não ter múltiplos interpretadores em mente ao
desenvolver, e no momento é complicado testar este comportamento.

* Menu:

* Entra o estado por módulo::
* Objetos de módulo isolados::
* Casos particulares surpreendentes::


File: python.info,  Node: Entra o estado por módulo,  Next: Objetos de módulo isolados,  Up: Contexto<2>

9.19.2.1 Entra o estado por módulo
..................................

Ao invés de focar no estado por interpretador, a API C do Python está
evoluindo para melhor suportar o estado 'por módulo', que é mais
granular.  Isso significa que dados a nível do C devem estar atrelados a
um 'objeto de módulo'.  Cada interpretador cria o seu próprio objeto de
módulo, garantindo assim a separação dos dados.  Para testar o
isolamento, múltiplos objetos de módulo correspondentes a uma única
extensão podem até ser carregados em um único interpretador.

O estado por módulo fornece um modo fácil de pensar sobre tempos de vida
e posse de recursos: o módulo de extensão será inicializado quando um
objeto de módulo for criado, e limpado quando ele for liberado.  Nesse
sentido, um módulo funciona como qualquer outro *note PyObject: 339.*;
não há ganchos “de desligamento do interpretador” a serem
considerados—ou esquecidos.

Note que há casos de uso para diferentes tipos de “objetos globais”:
estado por processo, por interpretador, por thread, ou por tarefa.  Com
o estado por módulo como padrão, as outras formas ainda são possíveis,
mas devem ser tratadas como casos excepcionais: se você precisar delas,
você deve tomar cuidados adicionais e escrever mais testes.  (Note que
este guia não cobre tais medidas.)


File: python.info,  Node: Objetos de módulo isolados,  Next: Casos particulares surpreendentes,  Prev: Entra o estado por módulo,  Up: Contexto<2>

9.19.2.2 Objetos de módulo isolados
...................................

O ponto chave de se manter em mente ao desenvolver um módulo de extensão
é que vários objetos de módulo podem ser criados a partir de uma única
biblioteca compartilhada.  Por exemplo:

     >>> import sys
     >>> import binascii
     >>> old_binascii = binascii
     >>> del sys.modules['binascii']
     >>> import binascii  # cria um novo objeto do módulo
     >>> old_binascii == binascii
     False

Como regra geral, os dois módulos devem ser completamente independentes.
Todos os objetos e o estado específicos do módulo devem ser encapsulados
no objeto de módulo, não devem ser compartilhados com outros objetos de
módulo, e devem ser limpados quando o objeto de módulo for desalocado.
Uma vez que esta é somente uma regra geral, exceções são possíveis (veja
*note Gerenciando estado global: 548a.), mas elas necessitam mais
cuidado e atenção a casos especiais.

Enquanto alguns módulos funcionariam bem com restrições menos rigorosas,
isolar os módulos torna mais fácil definir expectativas claras e
diretrizes que dão certo em uma variedade de casos de uso.


File: python.info,  Node: Casos particulares surpreendentes,  Prev: Objetos de módulo isolados,  Up: Contexto<2>

9.19.2.3 Casos particulares surpreendentes
..........................................

Note que módulos isolados criam alguns casos particulares que podem
acabar surpreendendo.  O mais notável é que, tipicamente, cada objeto de
módulo não vai compartilhar as suas classes e exceções com outros
módulos similares.  Continuando o *note exemplo acima: 5489, note
‘old_binascii.Error’ e ‘binascii.Error’ são objetos separados.  No
código a seguir, a exceção 'não' é capturada:

     >>> old_binascii.Error == binascii.Error
     False
     >>> try:
     ...     old_binascii.unhexlify(b'qwertyuiop')
     ... except binascii.Error:
     ...     print('boo')
     ...
     Traceback (most recent call last):
       File "<stdin>", line 2, in <module>
     binascii.Error: Non-hexadecimal digit found

Isso é esperado.  Repare que módulos Python-puro se comportam do mesmo
jeito: isso é parte de como o Python funciona.

O objetivo é fazer módulos de extensão seguros no nível do C, e não
fazer gambiarras se comportarem de forma intuitiva.  Modificar o
‘sys.modules’ “manualmente” conta como uma gambiarra.


File: python.info,  Node: Fazendo módulos seguros com múltiplos interpretadores,  Next: Tipos no heap<2>,  Prev: Contexto<2>,  Up: Isolando módulos de extensão

9.19.3 Fazendo módulos seguros com múltiplos interpretadores
------------------------------------------------------------

* Menu:

* Gerenciando estado global::
* Gerenciando estado por módulo::
* Exclusão voluntária; limitando a um objeto de módulo por processo: Exclusão voluntária limitando a um objeto de módulo por processo.
* Acesso ao estado de módulo a partir de funções::


File: python.info,  Node: Gerenciando estado global,  Next: Gerenciando estado por módulo,  Up: Fazendo módulos seguros com múltiplos interpretadores

9.19.3.1 Gerenciando estado global
..................................

Às vezes, o estado associado a um módulo Python não é específico àquele
módulo, mas ao processo inteiro (ou a alguma outra coisa “mais global”
que um módulo).  Por exemplo:

   - O módulo ‘readline’ gerencia 'o' terminal.

   - Um módulo executando em uma placa de circuito quer controlar 'o'
     componente LED.

Nestes casos, o módulo Python deve prover 'acesso' ao estado global, ao
invés de 'possuí-lo'.  Se possível, escreva o módulo de forma que
múltiplas cópias dele possam acessar o estado independentemente (junto
com outras bibliotecas, sejam elas do Python ou de outras linguagens).
Se isso não for possível, considere usar travas explícitas.

Se for necessário usar estado global para o processo, o jeito mais
simples de evitar problemas com múltiplos interpretadores é prevenir
explicitamente que o módulo seja carregado mais de uma vez por processo
— veja *note Exclusão voluntária; limitando a um objeto de módulo por
processo: 50c2.


File: python.info,  Node: Gerenciando estado por módulo,  Next: Exclusão voluntária limitando a um objeto de módulo por processo,  Prev: Gerenciando estado global,  Up: Fazendo módulos seguros com múltiplos interpretadores

9.19.3.2 Gerenciando estado por módulo
......................................

Para usar estado por módulo, use *note inicialização multifásica de
módulos de extensão: 4ba7.  Assim, você sinaliza que o seu módulo
suporta múltiplos interpretadores corretamente.

Defina ‘PyModuleDef.m_size’ como um número positivo 'N' para requerer
'N' bytes de armazenamento local para o módulo.  Geralmente, 'N' será o
tamanho de alguma ‘struct’ específica para o módulo, a qual pode guardar
todo o estado a nível de C do módulo.  Em particular, é nela que você
deve colocar ponteiros para classes (incluindo exceções, mas excluindo
tipos estáticos) e configurações (por exemplo, *note field_size_limit:
191c. no módulo ‘csv’) que o código C precisa para funcionar.

     Nota: Outra opção é guardar estado no ‘__dict__’ do módulo, mas
     você deve evitar quebrar quando usuários modificarem o ‘__dict__’ a
     partir do código Python.  Isso geralmente significa verificar tipos
     e erros no nível do C, o que é fácil de ser feito incorretamente e
     difícil de se testar suficientemente.

     Entretanto, se o estado do módulo não for necessário para o código
     C, guardá-lo somente no ‘__dict__’ é uma boa ideia.

Se o estado do módulo inclui ponteiros para ‘PyObject’, o objeto de
módulo deve conter referências a tais objetos e implementar os ganchos a
nível de módulo ‘m_traverse’, ‘m_clear’ e ‘m_free’.  Eles funcionam como
os ‘tp_traverse’, ‘tp_clear’ e ‘tp_free’ de uma classe.  Adicioná-los
requer algum trabalho e torna o código mais longo; é o preço de módulos
que podem ser descarregados de forma limpa.

Um exemplo de módulo com estado por módulo está disponível atualmente
como xxlimited(1); há um exemplo de inicialização do módulo no final do
arquivo.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/blob/master/Modules/xxlimited.c


File: python.info,  Node: Exclusão voluntária limitando a um objeto de módulo por processo,  Next: Acesso ao estado de módulo a partir de funções,  Prev: Gerenciando estado por módulo,  Up: Fazendo módulos seguros com múltiplos interpretadores

9.19.3.3 Exclusão voluntária: limitando a um objeto de módulo por processo
..........................................................................

Um ‘PyModuleDef.m_size’ não-negativo sinaliza que um módulo admite
múltiplos interpretadores corretamente.  Se este ainda não é o caso para
o seu módulo, you pode explicitamente torná-lo carregável somente uma
vez por processo.  Por exemplo:

     // Um sinalizador para todo o processo
     static int loaded = 0;

     // Mutex para fornecer segurança para a thread (só necessário para Python de threads livres)
     static PyMutex modinit_mutex = {0};

     static int
     exec_module(PyObject* module)
     {
         PyMutex_Lock(&modinit_mutex);
         if (loaded) {
             PyMutex_Unlock(&modinit_mutex);
             PyErr_SetString(PyExc_ImportError,
                             "cannot load module more than once per process");
             return -1;
         }
         loaded = 1;
         PyMutex_Unlock(&modinit_mutex);
         // ... rest of initialization
     }

Se a função *note PyModuleDef.m_clear: 982. do seu módulo for capaz de
se preparar para reinicializações futuras, ela deverá limpar o
sinalizador ‘loaded’.  Nesse caso, seu módulo não suportará múltiplas
instâncias existentes 'simultaneamente', mas suportará, por exemplo, o
carregamento após o desligamento do tempo de execução do Python (*note
Py_FinalizeEx(): d37.) e a reinicialização (*note Py_Initialize():
8b1.).


File: python.info,  Node: Acesso ao estado de módulo a partir de funções,  Prev: Exclusão voluntária limitando a um objeto de módulo por processo,  Up: Fazendo módulos seguros com múltiplos interpretadores

9.19.3.4 Acesso ao estado de módulo a partir de funções
.......................................................

É trivial acessar o estado a partir de funções a nível do módulo.
Funções recebem o objeto de módulo como o primeiro argumento; para
extrair o estado, você pode usar ‘PyModule_GetState’:

     static PyObject *
     func(PyObject *module, PyObject *args)
     {
         my_struct *state = (my_struct*)PyModule_GetState(module);
         if (state == NULL) {
             return NULL;
         }
         // ... o resto da lógica
     }

     Nota: ‘PyModule_GetState’ pode retornar ‘NULL’ sem definir uma
     exceção se não houver estado de módulo, ou seja se
     ‘PyModuleDef.m_size’ for zero.  No seu próprio módulo, você
     controla o ‘m_size’, de forma que isso é fácil de prevenir.


File: python.info,  Node: Tipos no heap<2>,  Next: Problemas em aberto,  Prev: Fazendo módulos seguros com múltiplos interpretadores,  Up: Isolando módulos de extensão

9.19.4 Tipos no heap
--------------------

Tradicionalmente, tipos definidos em C são 'estáticos'; isto é,
estruturas ‘static PyTypeObject’ definidas diretamente em código e
inicializadas usando ‘PyType_Ready()’.

Tais tipos são necessariamente compartilhados pelo processo inteiro.
Compartilhá-los entre objetos de módulo requer atenção a qualquer estado
que eles possuam ou acessem.  Para limitar potenciais problemas, tipos
estáticos são imutáveis a nível do Python: por exemplo, você não pode
atribuir ‘str.meuatributo = 123’.

Não há problema em compartilhar objetos verdadeiramente imutáveis entre
interpretadores, desde que através deles não seja possível acessar
outros objetos mutáveis.  De toda forma, no CPython, todo objeto Python
tem um detalhe de implementação mutável: o contador de referências.
Mudanças no refcount são protegidas pelo GIL. Logo, todo código que
compartilha um objeto Python entre interpretadores depende
implicitamente do atual GIL do CPython (que é global a nível de
processo).

Por ser imutável e global no processo, um tipo estático não pode acessar
o estado do “seu” módulo.  Se um método de tal tipo precisar de acesso
ao estado do módulo, o tipo precisa ser convertido para um 'tipo alocado
no heap', ou, abreviando, 'tipo no heap'.  Tipos no heap correspondem
mais fielmente a classes criadas pela instrução ‘class’ do Python.

Para módulos novos, usar tipos no heap por padrão é uma boa regra geral.

* Menu:

* Mudando tipos estáticos para tipos no heap::
* Definindo tipos no heap::
* Protocolo de recolhimento de lixo::
* Acessando o estado do módulo a partir de classes::
* Acesso ao estado do módulo a partir de métodos regulares::
* Acesso ao estado do módulo a partir de métodos slot, getters e setters: Acesso ao estado do módulo a partir de métodos slot getters e setters.
* Tempo de vida do estado do módulo::


File: python.info,  Node: Mudando tipos estáticos para tipos no heap,  Next: Definindo tipos no heap,  Up: Tipos no heap<2>

9.19.4.1 Mudando tipos estáticos para tipos no heap
...................................................

Tipos estáticos podem ser convertidos para tipos no heap, mas note que a
API de tipos no heap não foi projetada para conversão “sem perda” de
tipos estáticos—isto é, para criar um tipo que funciona exatamente como
um dado tipo estático.  Então, ao reescrever a definição de classe em
uma nova API, é provável que você altere alguns detalhes sem querer (por
exemplo, se o tipo é serializável em pickle ou não, ou slots herdados).
Sempre teste os detalhes que são importantes para você.

Fique atento em particular aos dois pontos a seguir (mas note the esta
não é uma lista completa):

   * Ao contrário de tipos estáticos, tipos no heap são mutáveis por
     padrão.  Use o sinalizador *note Py_TPFLAGS_IMMUTABLETYPE: 3c2.
     para impedir a mutabilidade.

   * Tipos no heap herdam *note tp_new: 57f. por padrão, e portanto eles
     podem passar a ser instanciáveis a partir de código Python.  Você
     pode impedir isso com o sinalizador *note
     Py_TPFLAGS_DISALLOW_INSTANTIATION: 582.


File: python.info,  Node: Definindo tipos no heap,  Next: Protocolo de recolhimento de lixo,  Prev: Mudando tipos estáticos para tipos no heap,  Up: Tipos no heap<2>

9.19.4.2 Definindo tipos no heap
................................

Tipos no heap podem ser criados preenchendo uma estrutura *note
PyType_Spec: 180b, uma descrição ou “diagrama” de uma classe, e chamando
*note PyType_FromModuleAndSpec(): 551. para construir um novo objeto
classe.

     Nota: Outras funções, como *note PyType_FromSpec(): 57d, também
     podem criar tipos no heap, mas *note PyType_FromModuleAndSpec():
     551. associa a classe ao módulo, permitindo acesso ao estado do
     módulo a partir dos métodos.

A classe deve em geral ser guardada 'tanto' no estado do módulo (para
acesso seguro a partir do C) 'quanto' no ‘__dict__’ do módulo (para
acesso a partir de código Python).


File: python.info,  Node: Protocolo de recolhimento de lixo,  Next: Acessando o estado do módulo a partir de classes,  Prev: Definindo tipos no heap,  Up: Tipos no heap<2>

9.19.4.3 Protocolo de recolhimento de lixo
..........................................

Instâncias de tipos no heap contêm referências aos seus tipos.  Isso
garante que o tipo não é destruído antes que todas as suas instâncias
sejam, mas pode resultar em ciclos de referência que precisam ser
quebrados pelo coletor de lixo.

Para evitar vazamentos de memória, instâncias de tipos no heap precisam
implementar o protocolo de recolhimento de lixo.  Isto é, tipos no heap
devem:

   - Ter o sinalizador *note Py_TPFLAGS_HAVE_GC: 77d.

   - Definir uma função de travessia usando ‘Py_tp_traverse’, que visita
     o tipo (por exemplo, usando ‘Py_VISIT(Py_TYPE(self))’).

Por favor, veja a documentação de *note Py_TPFLAGS_HAVE_GC: 77d. e de
*note tp_traverse: 77e. para considerações adicionais.

A API para definir tipos no heap cresceu organicamente, o que resultou
em um status quo no qual usá-la pode ser um pouco confuso.  As seções a
seguir vão lhe guiar pelos problemas mais comuns.

* Menu:

* tp_traverse no Python 3.8 e anteriores: tp_traverse no Python 3 8 e anteriores.
* Delegando a função tp_traverse::
* Definindo tp_dealloc::
* Evitar substituir tp_free::
* Evitar PyObject_New::


File: python.info,  Node: tp_traverse no Python 3 8 e anteriores,  Next: Delegando a função tp_traverse,  Up: Protocolo de recolhimento de lixo

9.19.4.4 ‘tp_traverse’ no Python 3.8 e anteriores
.................................................

O requerimento de o ‘tp_traverse’ visitar o tipo foi adicionado no
Python 3.9.  Se você suporta Python 3.8 e anteriores, a função de
travessia 'não' deve visitar o tipo, de forma que ela precisa ser mais
complicada:

     static int my_traverse(PyObject *self, visitproc visit, void *arg)
     {
         if (Py_Version >= 0x03090000) {
             Py_VISIT(Py_TYPE(self));
         }
         return 0;
     }

Infelizmente, o símbolo *note Py_Version: 756. foi adicionado somente no
Python 3.11.  Para substituí-lo, use:

   * *note PY_VERSION_HEX: 757, caso não esteja usando a ABI estável, ou

   * *note sys.version_info: 6a0. (via *note PySys_GetObject(): 389. e
     *note PyArg_ParseTuple(): 571.).


File: python.info,  Node: Delegando a função tp_traverse,  Next: Definindo tp_dealloc,  Prev: tp_traverse no Python 3 8 e anteriores,  Up: Protocolo de recolhimento de lixo

9.19.4.5 Delegando a função ‘tp_traverse’
.........................................

Se a sua função de travessia delega para a *note tp_traverse: 77e. da
sua classe base (ou de outro tipo), certifique-se de que ‘Py_TYPE(self)’
seja visitado apenas uma vez.  Observe que somente tipos no heap devem
visitar o tipo em ‘tp_traverse’.

Por exemplo, se a sua função de travessia incluir:

     base->tp_traverse(self, visit, arg)

…e ‘base’ puder ser um tipo estático, então ela também precisa incluir:

     if (base->tp_flags & Py_TPFLAGS_HEAPTYPE) {
         // uma tp_traverse do tipo heap já visitou Py_TYPE(self)
     } else {
         if (Py_Version >= 0x03090000) {
             Py_VISIT(Py_TYPE(self));
         }
     }

Não é necessário mexer na contagem de referências do tipo em *note
tp_new: 57f. e *note tp_clear: 4b8b.


File: python.info,  Node: Definindo tp_dealloc,  Next: Evitar substituir tp_free,  Prev: Delegando a função tp_traverse,  Up: Protocolo de recolhimento de lixo

9.19.4.6 Definindo ‘tp_dealloc’
...............................

Se o seu tipo tem uma função *note tp_dealloc: 4b66. customizada, ele
precisa:

   - chamar *note PyObject_GC_UnTrack(): 154e. antes que quaisquer
     campos sejam invalidados, e

   - decrementar o contador de referências do tipo.

Para que o tipo permaneça válido durante o ‘tp_free’, o refcount do tipo
precisa ser decrementado 'depois' de a instância ser liberada.  Por
exemplo:

     static void my_dealloc(PyObject *self)
     {
         PyObject_GC_UnTrack(self);
         ...
         PyTypeObject *type = Py_TYPE(self);
         type->tp_free(self);
         Py_DECREF(type);
     }

A função ‘tp_dealloc’ padrão faz isso, de forma que se o seu tipo 'não'
a substitui você não precisa se preocupar.


File: python.info,  Node: Evitar substituir tp_free,  Next: Evitar PyObject_New,  Prev: Definindo tp_dealloc,  Up: Protocolo de recolhimento de lixo

9.19.4.7 Evitar substituir ‘tp_free’
....................................

O slot *note tp_free: 4b79. de um tipo no heap deve ser *note
PyObject_GC_Del(): 154c.  Este é o padráo; não o substitua.


File: python.info,  Node: Evitar PyObject_New,  Prev: Evitar substituir tp_free,  Up: Protocolo de recolhimento de lixo

9.19.4.8 Evitar ‘PyObject_New’
..............................

Objetos rastreados pelo GC precisam ser alocados usando funções que
reconheçam o GC.

Se você usa *note PyObject_New(): 98c. ou *note PyObject_NewVar(): 98d.:

   - Se possível, chame o slot *note tp_alloc: 4b7a. do tipo.  Isto é,
     troque ‘TYPE *o = PyObject_New(TYPE, typeobj)’ por:

          TYPE *o = typeobj->tp_alloc(typeobj, 0);

     No lugar de ‘o = PyObject_NewVar(TYPE, typeobj, size)’, use também
     a forma acima, mas com ‘size’ ao invés do ‘0’.

   - Se isso não for possível (por exemplo, dentro de um ‘tp_alloc’
     customizado), chame *note PyObject_GC_New(): ab1. or *note
     PyObject_GC_NewVar(): ab2.:

          TYPE *o = PyObject_GC_New(TYPE, typeobj);

          TYPE *o = PyObject_GC_NewVar(TYPE, typeobj, size);


File: python.info,  Node: Acessando o estado do módulo a partir de classes,  Next: Acesso ao estado do módulo a partir de métodos regulares,  Prev: Protocolo de recolhimento de lixo,  Up: Tipos no heap<2>

9.19.4.9 Acessando o estado do módulo a partir de classes
.........................................................

Dado um objeto de tipo definido com *note PyType_FromModuleAndSpec():
551, você pode chamar *note PyType_GetModule(): 975. para acessar o
módulo associado, e então *note PyModule_GetState(): 987. para acessar o
estado do módulo.

Para evitar o tedioso código de tratamento de erros de sempre, você pode
combinar essas duas etapas com o *note PyType_GetModuleState(): 976.
assim:

     my_struct *state = (my_struct*)PyType_GetModuleState(type);
     if (state == NULL) {
         return NULL;
     }


File: python.info,  Node: Acesso ao estado do módulo a partir de métodos regulares,  Next: Acesso ao estado do módulo a partir de métodos slot getters e setters,  Prev: Acessando o estado do módulo a partir de classes,  Up: Tipos no heap<2>

9.19.4.10 Acesso ao estado do módulo a partir de métodos regulares
..................................................................

Acessar o estado do módulo a partir de métodos de uma classe já é um
pouco mais complicado, mas passou a ser possível graças à API
introduzida no Python 3.9.  Para conseguir o estado, é necessário
primeiro acessar a 'classe definidora', e então obter o estado do módulo
a partir dela.

O maior obstáculo é encontrar 'a classe na qual um método foi definido',
ou, abreviando, a 'classe definidora' desse método.  A classe definidora
pode guardar uma referência para o módulo do qual ela é parte.

Não confunda a classe definidora com ‘Py_TYPE(self)’.  Se o método for
chamado em uma 'subclasse' do seu tipo, ‘Py_TYPE(self)’ será uma
referência àquela subclasse, a qual pode ter sido definida em um módulo
diferente do seu.

     Nota: O código Python a seguir ilustra esse conceito.
     ‘Base.get_defining_class’ retorna ‘Base’ mesmo quando ‘type(self)
     == Sub’:

          class Base:
              def get_type_of_self(self):
                  return type(self)

              def get_defining_class(self):
                  return __class__

          class Sub(Base):
              pass

Para um método acessar a sua “classe definidora”, ele precisa usar a
*note convenção de chamada: 151f. *note METH_METHOD | METH_FASTCALL |
METH_KEYWORDS: 1784. e a assinatura *note PyCMethod: 764.
correspondente:

     PyObject *PyCMethod(
         PyObject *self,               // objeto onde o módulo foi chamado
         PyTypeObject *defining_class, // classe definidora
         PyObject *const *args,        // vetor C de argumentos
         Py_ssize_t nargs,             // comprimento de "args"
         PyObject *kwnames)            // NULL, ou dicionário de argumentos nomeados

Uma vez que vc tem a classe definidora, chame *note
PyType_GetModuleState(): 976. para obter o estado do módulo associado a
ela.

Por exemplo:

     static PyObject *
     example_method(PyObject *self,
             PyTypeObject *defining_class,
             PyObject *const *args,
             Py_ssize_t nargs,
             PyObject *kwnames)
     {
         my_struct *state = (my_struct*)PyType_GetModuleState(defining_class);
         if (state == NULL) {
             return NULL;
         }
         ... // rest of logic
     }

     PyDoc_STRVAR(example_method_doc, "...");

     static PyMethodDef my_methods[] = {
         {"example_method",
           (PyCFunction)(void(*)(void))example_method,
           METH_METHOD|METH_FASTCALL|METH_KEYWORDS,
           example_method_doc}
         {NULL},
     }


File: python.info,  Node: Acesso ao estado do módulo a partir de métodos slot getters e setters,  Next: Tempo de vida do estado do módulo,  Prev: Acesso ao estado do módulo a partir de métodos regulares,  Up: Tipos no heap<2>

9.19.4.11 Acesso ao estado do módulo a partir de métodos slot, getters e setters
................................................................................

     Nota: Adicionado na versão 3.11

Métodos slot—os métodos rápidos em C equivalentes aos métodos especiais,
como *note nb_add: 4f6e. para *note __add__: 2121. ou *note tp_new: 57f.
para inicialização—têm uma API muito simples que não permite passar a
classe definidora, ao contrário do *note PyCMethod: 764.  O mesmo vale
para getters e setters definidos com *note PyGetSetDef: bd1.

Para acessar o estado do módulo nesses casos, use a função *note
PyType_GetModuleByDef(): 394, e passe a definição do módulo.  Uma vez
encontrado o módulo, chame *note PyModule_GetState(): 987. para obter o
estado:

     PyObject *module = PyType_GetModuleByDef(Py_TYPE(self), &module_def);
     my_struct *state = (my_struct*)PyModule_GetState(module);
     if (state == NULL) {
         return NULL;
     }

Essa função ‘PyType_GetModuleByDef()’ funciona procurando na *note ordem
de resolução de métodos: 2316. (isto é, todas as superclasses) a
primeira superclasse que tem um módulo correspondente.

     Nota: Em casos muito exóticos (cadeias hereditárias espalhadas
     através de múltiplos módulos criados a partir da mesma definição),
     a ‘PyType_GetModuleByDef()’ pode não retornar o módulo da classe
     definidora correta.  De todo modo, essa função sempre vai retornar
     um módulo com a mesma definição, garantindo um layout de memória C
     compatível.


File: python.info,  Node: Tempo de vida do estado do módulo,  Prev: Acesso ao estado do módulo a partir de métodos slot getters e setters,  Up: Tipos no heap<2>

9.19.4.12 Tempo de vida do estado do módulo
...........................................

Quando um objeto de módulo é coletado como lixo, o seu estado de módulo
é liberado.  Para cada ponteiro para o estado do módulo (ou uma parte
dele), é necessário possuir uma referência ao objeto de módulo.

Isso não costuma ser um problema, dado que tipos criados com *note
PyType_FromModuleAndSpec(): 551, bem como suas instâncias, guardam
referências ao módulo.  Mesmo assim, é necessário tomar cuidado com a
contagem de referências ao referenciar o estado do módulo a partir de
outros lugares, como funções de retorno para bibliotecas externas.


File: python.info,  Node: Problemas em aberto,  Prev: Tipos no heap<2>,  Up: Isolando módulos de extensão

9.19.5 Problemas em aberto
--------------------------

Vários problemas relacionados aos estados por módulo e aos tipos no heap
ainda estão em aberto.

Discussões sobre como melhorar a situação são melhor realizadas no fórum
de discussão na tag c-api(1).

* Menu:

* Escopo por classe::
* Conversão sem perdas para tipos no heap::

   ---------- Footnotes ----------

   (1) https://discuss.python.org/c/core-dev/c-api/30


File: python.info,  Node: Escopo por classe,  Next: Conversão sem perdas para tipos no heap,  Up: Problemas em aberto

9.19.5.1 Escopo por classe
..........................

Atualmente (desde o Python 3.11) não é possível anexar estado a 'tipos'
individuais sem depender de detalhes de implementação do CPython (os
quais podem mudar no futuro—talvez, ironicamente, para possibilitar uma
solução adequada para o escopo por classe).


File: python.info,  Node: Conversão sem perdas para tipos no heap,  Prev: Escopo por classe,  Up: Problemas em aberto

9.19.5.2 Conversão sem perdas para tipos no heap
................................................

A API de tipos no heap não foi projetada para conversão “sem perdas” de
tipos estáticos.  isto é, para criar um tipo que funciona exatamente
como um dado tipo estático.


File: python.info,  Node: Descritor de arquivo de temporizador,  Next: A Ordem de Resolução de Métodos do Python 2 3,  Prev: Isolando módulos de extensão,  Up: Python HOWTOs

9.20 Descritor de arquivo de temporizador
=========================================


Versão: 1.13

Este documento discute o suporte do Python para o descritor de arquivo
de temporizador do Linux.

* Menu:

* Exemplos: Exemplos<40>.


File: python.info,  Node: Exemplos<40>,  Up: Descritor de arquivo de temporizador

9.20.1 Exemplos
---------------

O exemplo a seguir mostra como usar um descritor de arquivo de
temporizador para executar uma função duas vezes por segundo:

     # Scripts práticos devem realmente usar um timer sem bloqueio.
     # Usamos um timer com bloqueio aqui para simplificar.
     import os, time

     # Cria um descritor de arquivo de temporizador
     fd = os.timerfd_create(time.CLOCK_REALTIME)

     # Inicia o temporizador em 1 segundo, com um intervalo de meio segundo
     os.timerfd_settime(fd, initial=1, interval=0.5)

     try:
         # Processa eventos do temporizador quatro vezes.
         for _ in range(4):
             # read() ser bloqueado até o temporizador expirar
             _ = os.read(fd, 8)
             print("Timer expired")
     finally:
         # Lembre-se de fechar o descritor de arquivo de temporizador!
         os.close(fd)

Para evitar a perda de precisão causada pelo tipo *note float: 2f7, os
descritores de arquivos de temporizador permitem especificar a expiração
inicial e o intervalo em nanossegundos inteiros com variantes ‘_ns’ das
funções.

Este exemplo mostra como *note epoll(): fc8. pode ser usado com
descritores de arquivo de temporizador para esperar até que o descritor
de arquivo esteja pronto para leitura:

     import os, time, select, socket, sys

     # Cria um objeto epoll
     ep = select.epoll()

     # Neste exemplo, usa o endereço de loopback para enviar o comando "stop" ao servidor.
     #
     # $ telnet 127.0.0.1 1234
     # Trying 127.0.0.1...
     # Connected to 127.0.0.1.
     # Escape character is '^]'.
     # stop
     # Connection closed by foreign host.
     #
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     sock.bind(("127.0.0.1", 1234))
     sock.setblocking(False)
     sock.listen(1)
     ep.register(sock, select.EPOLLIN)

     # Cria descritores de arquivo de temporizador no modo não bloqueante.
     num = 3
     fds = []
     for _ in range(num):
         fd = os.timerfd_create(time.CLOCK_REALTIME, flags=os.TFD_NONBLOCK)
         fds.append(fd)
         # Registra o descritor de arquivo do temporizador para eventos de leitura
         ep.register(fd, select.EPOLLIN)

     # Inicia o temporizador com os.timerfd_settime_ns() em nanossegundos.
     # O temporizador 1 dispara a cada 0,25 segundos; o timer 2 a cada 0,5 segundos; etc.
     for i, fd in enumerate(fds, start=1):
         one_sec_in_nsec = 10**9
         i = i * one_sec_in_nsec
         os.timerfd_settime_ns(fd, initial=i//4, interval=i//4)

     timeout = 3
     try:
         conn = None
         is_active = True
         while is_active:
             # Aguarda o temporizador expirar por 3 segundos.
             # epoll.poll() retorna uma lista de pares (fd, event).
             # fd é um descritor de arquivo.
             # sock e conn[=valor retornado de socket.accept()] são objetos de socket, não descritores de arquivo.
             # Então use sock.fileno() e conn.fileno() para obter os descritores de arquivo.
             events = ep.poll(timeout)

             # Se mais de um descritor de arquivo de timer estiver pronto para leitura ao mesmo tempo,
             # epoll.poll() retorna uma lista de pares (fd, event).
             #
             # Neste exemplo de configurações,
             #    O 1º temporizador dispara a cada 0,25 segundos em 0,25 segundos. (0,25, 0,5, 0,75, 1,0, ...)
             #    O 2º temporizador dispara a cada 0,5 segundos em 0,5 segundos. (0,5, 1,0, 1,5, 2,0, ...)
             #    O 3º temporizador dispara a cada 0,75 segundos em 0,75 segundos. (0,75, 1,5, 2,25, 3,0, ...)
             #
             #    Em 0,25 segundos, apenas o 1º temporizador dispara.
             #    Em 0,5 segundos, o 1º temporizador e o 2º temporizador disparam ao mesmo tempo.
             #    Em 0,75 segundos, o 1º temporizador e o 3º temporizador disparam ao mesmo tempo.
             #    Em 1,5 segundos, o 1º temporizador, o 2º temporizador e o 3º temporizador disparam ao mesmo tempo.
             #
             # Se um descritor de arquivo de temporizador for sinalizado mais de uma vez desde
             # a última chamada de os.read(), os.read() retornará o número de sinalizados
             # como ordem de host de bytes de classe.
             print(f"Signaled events={events}")
             for fd, event in events:
                 if event & select.EPOLLIN:
                     if fd == sock.fileno():
                         # Verifica se há uma requisição de conexão.
                         print(f"Accepting connection {fd}")
                         conn, addr = sock.accept()
                         conn.setblocking(False)
                         print(f"Accepted connection {conn} from {addr}")
                         ep.register(conn, select.EPOLLIN)
                     elif conn and fd == conn.fileno():
                         # Verifica se há dados para ler.
                         print(f"Reading data {fd}")
                         data = conn.recv(1024)
                         if data:
                             # Você deveria capturar exceção UnicodeDecodeError por segurança.
                             cmd = data.decode()
                             if cmd.startswith("stop"):
                                 print(f"Stopping server")
                                 is_active = False
                             else:
                                 print(f"Unknown command: {cmd}")
                         else:
                             # Acabaram os dados, fecha a conexão
                             print(f"Closing connection {fd}")
                             ep.unregister(conn)
                             conn.close()
                             conn = None
                     elif fd in fds:
                         print(f"Reading timer {fd}")
                         count = int.from_bytes(os.read(fd, 8), byteorder=sys.byteorder)
                         print(f"Timer {fds.index(fd) + 1} expired {count} times")
                     else:
                         print(f"Unknown file descriptor {fd}")
     finally:
         for fd in fds:
             ep.unregister(fd)
             os.close(fd)
         ep.close()

Este exemplo mostra como *note select(): dc8. pode ser usado com
descritores de arquivo de temporizador para esperar até que o descritor
de arquivo esteja pronto para leitura:

     import os, time, select, socket, sys

     # Neste exemplo, usa o endereço de loopback para enviar o comando "stop" ao servidor.
     #
     # $ telnet 127.0.0.1 1234
     # Trying 127.0.0.1...
     # Connected to 127.0.0.1.
     # Escape character is '^]'.
     # stop
     # Connection closed by foreign host.
     #
     sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
     sock.bind(("127.0.0.1", 1234))
     sock.setblocking(False)
     sock.listen(1)

     # Cria descritores de arquivo de temporizador no modo não bloqueante.
     num = 3
     fds = [os.timerfd_create(time.CLOCK_REALTIME, flags=os.TFD_NONBLOCK)
            for _ in range(num)]
     select_fds = fds + [sock]

     # Inicia o temporizador com os.timerfd_settime() em segundos.
     # O temporizador 1 dispara a cada 0,25 segundos; o timer 2 a cada 0,5 segundos; etc.
     for i, fd in enumerate(fds, start=1):
        os.timerfd_settime(fd, initial=i/4, interval=i/4)

     timeout = 3
     try:
         conn = None
         is_active = True
         while is_active:
            # Aguarda o temporizador expirar por 3 segundos.
            # select.select() retorna uma lista de objetos ou descritores de arquivos.
            rfd, wfd, xfd = select.select(select_fds, select_fds, select_fds, timeout)
            for fd in rfd:
                if fd == sock:
                    # Verifica se há uma requisição de conexão.
                    print(f"Accepting connection {fd}")
                    conn, addr = sock.accept()
                    conn.setblocking(False)
                    print(f"Accepted connection {conn} from {addr}")
                    select_fds.append(conn)
                elif conn and fd == conn:
                    # Verifica se há dados para ler.
                    print(f"Reading data {fd}")
                    data = conn.recv(1024)
                    if data:
                        # Você deveria capturar exceção UnicodeDecodeError por segurança.
                        cmd = data.decode()
                        if cmd.startswith("stop"):
                            print(f"Stopping server")
                            is_active = False
                        else:
                            print(f"Unknown command: {cmd}")
                    else:
                        # Acabaram os dados, fecha a conexão
                        print(f"Closing connection {fd}")
                        select_fds.remove(conn)
                        conn.close()
                        conn = None
                elif fd in fds:
                    print(f"Reading timer {fd}")
                    count = int.from_bytes(os.read(fd, 8), byteorder=sys.byteorder)
                    print(f"Timer {fds.index(fd) + 1} expired {count} times")
                else:
                    print(f"Unknown file descriptor {fd}")
     finally:
         for fd in fds:
            os.close(fd)
         sock.close()
         sock = None


File: python.info,  Node: A Ordem de Resolução de Métodos do Python 2 3,  Next: Suporte experimental do Python para threads livres,  Prev: Descritor de arquivo de temporizador,  Up: Python HOWTOs

9.21 A Ordem de Resolução de Métodos do Python 2.3
==================================================

     Nota: Este é um documento histórico, fornecido como apêndice à
     documentação oficial.  A ordem de resolução de métodos discutida
     aqui foi 'introduzida' no Python 2.3, mas ainda é usada em versões
     posteriores – incluindo o Python 3.

por Michele Simionato(1).


Resumo: 'Este documento é destinado a programadores Python que desejam
entender a ordem de resolução de métodos C3 usada no Python 2.3.  Embora
não seja destinado a iniciantes, é bastante pedagógico com muitos
exemplos elaborados.  Não tenho conhecimento de outros documentos
publicamente disponíveis com o mesmo escopo, portanto devem ser úteis.'

Aviso:

     'Eu doo este documento para a Python Software Foundation, sob a
     licença Python 2.3.  Como de costume nestas circunstâncias, aviso o
     leitor que o que se segue' deve 'estar correto, mas não dou nenhuma
     garantia.  Use-o por sua própria conta e risco!'

Reconhecimentos:

     'Todas as pessoas da lista de discussão do Python que me enviaram
     seu apoio.  Paul Foley, que apontou várias imprecisões e me fez
     acrescentar a parte sobre ordem de precedência local.  David
     Goodger pela ajuda com a formatação em reStructuredText.  David
     Mertz pela ajuda com a edição.  Finalmente, Guido van Rossum que
     adicionou com entusiasmo este documento à página inicial oficial do
     Python 2.3.'

* Menu:

* O início::
* A ordem de resolução de métodos C3::
* Exemplos: Exemplos<41>.
* Ordens de resolução de métodos ruins::
* O fim::
* Recursos: Recursos<3>.

   ---------- Footnotes ----------

   (1) https://www.phyast.pitt.edu/~micheles/


File: python.info,  Node: O início,  Next: A ordem de resolução de métodos C3,  Up: A Ordem de Resolução de Métodos do Python 2 3

9.21.1 O início
---------------

     'Felix qui potuit rerum cognoscere causas' – Virgilius

Tudo começou com uma postagem de Samuele Pedroni na lista de discussão
de desenvolvimento Python (1).  Em sua postagem, Samuele mostrou que a
ordem de resolução de métodos do Python 2.2 não é monotônica e propôs
substituí-la pela ordem de resolução de métodos C3.  Guido concordou com
seus argumentos e, portanto, agora o Python 2.3 usa C3.  O método C3 em
si não tem nada a ver com Python, pois foi inventado por pessoas que
trabalharam em Dylan e está descrito em um artigo destinado a lispers
(2).  O presente artigo fornece uma discussão (espero) legível do
algoritmo C3 para Pythonistas que desejam entender os motivos da
mudança.

Primeiro de tudo, deixe-me salientar que o que vou dizer se aplica
apenas às 'classes no novo estilo' introduzidas no Python 2.2: 'classes
clássicas' mantêm sua antiga ordem de resolução de métodos, profundidade
primeiro e depois da esquerda para a direita.  Portanto, não há quebra
de código antigo para classes clássicas; e mesmo que em princípio
pudesse haver quebra de código para novas classes de estilo do Python
2.2, na prática os casos em que a ordem de resolução C3 difere da ordem
de resolução de métodos do Python 2.2 são tão raros que nenhuma quebra
real de código é esperada.  Portanto:

     'Não tenha medo!'

Além disso, a menos que você faça uso intenso de herança múltipla e
tenha hierarquias não triviais, você não precisa entender o algoritmo C3
e pode facilmente pular este artigo.  Por outro lado, se você realmente
deseja saber como funciona a herança múltipla, este artigo é para você.
A boa notícia é que as coisas não são tão complicadas quanto você
imagina.

Deixe-me começar com algumas definições básicas.

  1. Dada uma classe C em uma complicada hierarquia de herança múltipla,
     não é uma tarefa trivial especificar a ordem na qual os métodos são
     substituídos, ou seja, especificar a ordem dos ancestrais de C.

  2. A lista dos ancestrais de uma classe C, incluindo a própria classe,
     ordenada do ancestral mais próximo ao mais distante, é chamada de
     lista de precedência de classe ou 'linearização' de C.

  3. A 'Ordem de Resolução de Métodos' (em inglês Method Resolution
     Order, MRO) é o conjunto de regras que constroem a linearização.
     Na literatura Python, a expressão “a MRO de C” também é usada como
     sinônimo de linearização da classe C.

  4. Por exemplo, no caso de hierarquia de herança única, se C é uma
     subclasse de C1 e C1 é uma subclasse de C2, então a linearização de
     C é simplesmente a lista [C, C1, C2].  No entanto, com múltiplas
     hierarquias de herança, a construção da linearização é mais
     complicada, pois é mais difícil construir uma linearização que
     respeite a 'ordem de precedência local' e a 'monotonicidade'.

  5. Discutirei a ordem de precedência local mais tarde, mas posso dar
     aqui a definição de monotonicidade.  Uma MRO é monotônico quando o
     seguinte é verdadeiro: 'se C1 precede C2 na linearização de C,
     então C1 precede C2 na linearização de qualquer subclasse de C'.
     Caso contrário, a operação inócua de derivar uma nova classe
     poderia alterar a ordem de resolução dos métodos, potencialmente
     introduzindo bugs muito sutis.  Exemplos onde isso acontece serão
     mostrados posteriormente.

  6. Nem todas as classes admitem uma linearização.  Existem casos, em
     hierarquias complicadas, em que não é possível derivar uma classe
     tal que a sua linearização respeite todas as propriedades
     desejadas.

Aqui dou um exemplo desta situação.  Considere a hierarquia

     >>> O = object
     >>> class X(O): pass
     >>> class Y(O): pass
     >>> class A(X,Y): pass
     >>> class B(Y,X): pass

que pode ser representada com o seguinte grafo de herança, onde
denotamos com O a classe ‘object’, que é o início de qualquer hierarquia
para classes de novo estilo:

           -----------
          |           |
          |    O      |
          |  /   \    |
           - X    Y  /
             |  / | /
             | /  |/
             A    B
             \   /
               ?

Neste caso, não é possível derivar uma nova classe C de A e B, pois X
precede Y em A, mas Y precede X em B, portanto a ordem de resolução de
métodos seria ambígua em C.

Python 2.3 levanta uma exceção nesta situação (TypeError: MRO conflict
among bases Y, X) proibindo o programador ingênuo de criar hierarquias
ambíguas.  Em vez disso, o Python 2.2 não levanta uma exceção, mas
escolhe uma ordem 'ad hoc' (CABXYO neste caso).

   ---------- Footnotes ----------

   (1) O tópico no python-dev iniciado por Samuele Pedroni:
‘https://mail.python.org/pipermail/python-dev/2002-October/029035.html’

   (2) O artigo 'Uma Linearização Monotônica de Superclasses para
Dylan', em inglês: ‘https://doi.org/10.1145/236337.236343’


File: python.info,  Node: A ordem de resolução de métodos C3,  Next: Exemplos<41>,  Prev: O início,  Up: A Ordem de Resolução de Métodos do Python 2 3

9.21.2 A ordem de resolução de métodos C3
-----------------------------------------

Deixe-me apresentar algumas notações simples que serão úteis para a
discussão a seguir.  Usarei a notação de atalho:

     C1 C2 ... CN

para indicar a lista de classes [C1, C2, … , CN].

'head' da lista é o seu primeiro elemento:

     head = C1

enquanto 'tail' é o resto da lista:

     tail = C2 ... CN.

Também usarei a notação:

     C + (C1 C2 ... CN) = C C1 C2 ... CN

para denotar a soma das listas [C] + [C1, C2, …, CN].

Agora posso explicar como funciona a MRO no Python 2.3.

Considere uma classe C em uma hierarquia de herança múltipla, com C
herdando das classes base B1, B2, …, BN. Queremos calcular a
linearização L[C] da classe C. A regra é a seguinte:

     'a linearização de C é a soma de C mais a mesclagem das
     linearizações dos pais e da lista dos pais.'

Em notação simbólica:

     L[C(B1 ... BN)] = C + merge(L[B1] ... L[BN], B1 ... BN)

Em particular, se C é a classe ‘object’, que não tem pais, a
linearização é trivial:

     L[object] = object.

Contudo, em geral, deve-se calcular a mesclagem de acordo com a seguinte
prescrição:

     'considere o topo da primeira lista, ou seja, L[B1][0]; se esse
     head não estiver no final de nenhuma das outras listas, então
     adicione-o à linearização de C e remova-o das listas na mesclagem,
     caso contrário olhe para o head da próxima lista e pegue-o, se for
     um bom head.  Em seguida, repita a operação até que todas as
     classes sejam removidas ou seja impossível encontrar boas cabeças.
     Neste caso, é impossível construir a mesclagem, o Python 2.3 se
     recusará a criar a classe C e vai levantar uma exceção.'

Esta prescrição garante que a operação de mesclagem 'preserva' a ordem,
se a ordem puder ser preservada.  Por outro lado, se a ordem não puder
ser preservada (como no exemplo de desacordo sério sobre ordem discutido
acima), então a mesclagem não poderá ser calculada.

O cálculo da mesclagem é trivial se C tiver apenas um pai (herança
única); nesse caso:

     L[C(B)] = C + merge(L[B],B) = C + L[B]

No entanto, no caso de herança múltipla, as coisas são mais complicadas
e não espero que você consiga entender a regra sem alguns exemplos ;-)


File: python.info,  Node: Exemplos<41>,  Next: Ordens de resolução de métodos ruins,  Prev: A ordem de resolução de métodos C3,  Up: A Ordem de Resolução de Métodos do Python 2 3

9.21.3 Exemplos
---------------

Primeiro exemplo.  Considere a seguinte hierarquia:

     >>> O = object
     >>> class F(O): pass
     >>> class E(O): pass
     >>> class D(O): pass
     >>> class C(D,F): pass
     >>> class B(D,E): pass
     >>> class A(B,C): pass

Neste caso, o grafo de herança pode ser desenhado como:

                                    6
                                   ---
          Nível 3                 | O |                  (mais geral)
                                /  ---  \
                               /    |    \                      |
                              /     |     \                     |
                             /      |      \                    |
                            ---    ---    ---                   |
          Nível 2        3 | D | 4| E |  | F | 5                |
                            ---    ---    ---                   |
                             \  \ _ /       |                   |
                              \    / \ _    |                   |
                               \  /      \  |                   |
                                ---      ---                    |
          Nível 1            1 | B |    | C | 2                 |
                                ---      ---                    |
                                  \      /                      |
                                   \    /                      \ /
                                     ---
          Nível 0                 0 | A |                (mais especializada)
                                     ---

As linearizações de O,D,E e F são triviais:

     L[O] = O
     L[D] = D O
     L[E] = E O
     L[F] = F O

A linearização de B pode ser calculada como:

     L[B] = B + merge(DO, EO, DE)

Vemos que D é um bom 'head', portanto pegamos ele e ficamos reduzidos a
calcular ‘merge(O,EO,E)’.  Agora O não é um bom 'head', pois está no
'tail' da sequência EO. Neste caso a regra diz que temos que pular para
a próxima sequência.  Então vemos que E é um bom 'head'; nós pegamos
isso e somos reduzidos a calcular ‘merge(O,O)’ que dá O. Portanto:

     L[B] =  B D E O

Usando o mesmo procedimento encontra-se:

     L[C] = C + merge(DO,FO,DF)
          = C + D + merge(O,FO,F)
          = C + D + F + merge(O,O)
          = C D F O

Agora podemos calcular:

     L[A] = A + merge(BDEO,CDFO,BC)
          = A + B + merge(DEO,CDFO,C)
          = A + B + C + merge(DEO,DFO)
          = A + B + C + D + merge(EO,FO)
          = A + B + C + D + E + merge(O,FO)
          = A + B + C + D + E + F + merge(O,O)
          = A B C D E F O

Neste exemplo, a linearização é ordenada de maneira bastante agradável
de acordo com o nível de herança, no sentido de que níveis mais baixos
(ou seja, classes mais especializadas) têm precedência mais alta (veja o
grafo de herança).  No entanto, este não é o caso geral.

Deixo como exercício para o leitor calcular a linearização do meu
segundo exemplo:

     >>> O = object
     >>> class F(O): pass
     >>> class E(O): pass
     >>> class D(O): pass
     >>> class C(D,F): pass
     >>> class B(E,D): pass
     >>> class A(B,C): pass

A única diferença com o exemplo anterior é a mudança B(D,E) –> B(E,D);
no entanto, mesmo uma pequena modificação muda completamente a ordem da
hierarquia:

                                     6
                                    ---
          Nível 3                  | O |
                                 /  ---  \
                                /    |    \
                               /     |     \
                              /      |      \
                            ---     ---    ---
          Nível 2        2 | E | 4 | D |  | F | 5
                            ---     ---    ---
                             \      / \     /
                              \    /   \   /
                               \  /     \ /
                                ---     ---
          Nível 1            1 | B |   | C | 3
                                ---     ---
                                 \       /
                                  \     /
                                    ---
          Nível 0                0 | A |
                                    ---

Observe que a classe E, que está no segundo nível da hierarquia, precede
a classe C, que está no primeiro nível da hierarquia, ou seja, E é mais
especializado que C, mesmo que esteja em um nível mais alto.

Um programador preguiçoso pode obter a MRO diretamente do Python 2.2,
pois neste caso ela coincide com a linearização do Python 2.3.  Basta
invocar o método *note mro(): 20bd. da classe A:

     >>> A.mro()
     [<class 'A'>, <class 'B'>, <class 'E'>,
     <class 'C'>, <class 'D'>, <class 'F'>,
     <class 'object'>]

Finalmente, deixe-me considerar o exemplo discutido na primeira seção,
envolvendo um sério desacordo de ordem.  Neste caso, é simples calcular
as linearizações de O, X, Y, A e B:

          L[O] = 0
          L[X] = X O
          L[Y] = Y O
          L[A] = A X Y O
          L[B] = B Y X O

Porém, é impossível calcular a linearização para uma classe C que herda
de A e B:

     L[C] = C + merge(AXYO, BYXO, AB)
          = C + A + merge(XYO, BYXO, B)
          = C + A + B + merge(XYO, YXO)

Neste ponto não podemos mesclar as listas XYO e YXO, uma vez que X está
no 'tail' de YXO enquanto Y está no 'tail' de XYO: portanto não há bons
'head' e o algoritmo C3 para.  Python 2.3 levanta um erro e se recusa a
criar a classe C.


File: python.info,  Node: Ordens de resolução de métodos ruins,  Next: O fim,  Prev: Exemplos<41>,  Up: A Ordem de Resolução de Métodos do Python 2 3

9.21.4 Ordens de resolução de métodos ruins
-------------------------------------------

Uma MRO é 'ruim' quando quebra propriedades fundamentais como ordem de
precedência local e monotonicidade.  Nesta seção, mostrarei que tanto a
MRO para classes clássicas quanto a MRO para classes de novo estilo em
Python 2.2 são ruins.

É mais fácil começar com a ordem de precedência local.  Considere o
seguinte exemplo:

     >>> F=type('Food',(),{'remember2buy':'spam'})
     >>> E=type('Eggs',(F,),{'remember2buy':'eggs'})
     >>> G=type('GoodFood',(F,E),{}) # under Python 2.3 this is an error!

com diagrama de herança

                           O
                           |
          (comprar spam)   F
                           | \
                           | E   (comprar ovos)
                           | /
                           G

                  (comprar ovos ou spam ?)

Vemos que a classe G herda de F e E, com F 'antes' de E: portanto,
esperaríamos que o atributo 'G.remember2buy' fosse herdado por
'F.remember2buy' e não por 'E.remember2buy': no entanto, Python 2.2 dá

     >>> G.remember2buy
     'eggs'

Isto é uma quebra da ordem de precedência local, uma vez que a ordem na
lista de precedência local, ou seja, a lista dos pais de G, não é
preservada na linearização de G em Python 2.2:

     L[G,P22]= G E F object   # F *segue* E

Pode-se argumentar que a razão pela qual F segue E na linearização do
Python 2.2 é que F é menos especializado que E, uma vez que F é a
superclasse de E; no entanto, a quebra da ordem de precedência local é
bastante não intuitiva e sujeita a erros.  Isto é particularmente
verdadeiro porque é diferente das classes de estilo antigo:

     >>> class F: remember2buy='spam'
     >>> class E(F): remember2buy='eggs'
     >>> class G(F,E): pass
     >>> G.remember2buy
     'spam'

Neste caso a MRO é GFEF e a ordem de precedência local é preservada.

Como regra geral, hierarquias como a anterior devem ser evitadas, uma
vez que não está claro se F deve substituir E ou vice-versa.  O Python
2.3 resolve a ambiguidade levantando uma exceção na criação da classe G,
impedindo efetivamente o programador de gerar hierarquias ambíguas.  A
razão para isso é que o algoritmo C3 falha quando a mesclagem:

     merge(FO,EFO,FE)

não puder ser calculada, porque F está no 'tail' de EFO e E está no
'tail' de FE.

A verdadeira solução é conceber uma hierarquia não ambígua, ou seja,
derivar G de E e F (o mais específico primeiro) e não de F e E; neste
caso a MRO é GEF, sem dúvida.

                     O
                     |
                     F (spam)
                   / |
          (ovos)   E |
                   \ |
                     G
                       (ovos, sem dúvida)

Python 2.3 força o programador a escrever boas hierarquias (ou, pelo
menos, menos propensas a erros).

Falando nisso, deixe-me salientar que o algoritmo Python 2.3 é
inteligente o suficiente para reconhecer erros óbvios, como a duplicação
de classes na lista de pais:

     >>> class A(object): pass
     >>> class C(A,A): pass # error
     Traceback (most recent call last):
       File "<stdin>", line 1, in ?
     TypeError: duplicate base class A

Python 2.2 (tanto para classes clássicas quanto para classes de novo
estilo) nesta situação, não levantaria nenhuma exceção.

Por fim, gostaria de destacar duas lições que aprendemos com este
exemplo:

  1. apesar do nome, a MRO determina a ordem de resolução dos atributos,
     não apenas dos métodos;

  2. o alimento padrão para Pythonistas é spam!  (mas você já sabia
     disso ;-)

Tendo discutido a questão da ordem de precedência local, deixe-me agora
considerar a questão da monotonicidade.  Meu objetivo é mostrar que nem
a MRO para classes clássicas nem para o novo estilo de classes do Python
2.2 são monotônicas.

Para provar que a MRO para classes clássicas não é monotônica é bastante
trivial, basta olhar o diagrama em losango:

             C
            / \
           /   \
          A     B
           \   /
            \ /
             D

Percebe-se facilmente a inconsistência:

     L[B,P21] = B C        # B precede C : métodos de B venceram
     L[D,P21] = D A C B C  # B segue C  : métodos de B venceram!

Por outro lado, não há problemas com as MROs do Python 2.2 e do 2.3,
elas fornecem ambos:

     L[D] = D A B C

Guido ressalta em seu ensaio (1) que a MRO clássica não é tão ruim na
prática, já que normalmente se pode evitar losangos para classes
clássicas.  Mas todas as classes de novo estilo herdam de ‘object’,
portanto os diamantes são inevitáveis e inconsistências aparecem em cada
grafo de herança múltipla.

A MRO do Python 2.2 torna difícil quebrar a monotonicidade, mas não
impossível.  O exemplo a seguir, fornecido originalmente por Samuele
Pedroni, mostra que a MRO do Python 2.2 não é monotônica:

     >>> class A(object): pass
     >>> class B(object): pass
     >>> class C(object): pass
     >>> class D(object): pass
     >>> class E(object): pass
     >>> class K1(A,B,C): pass
     >>> class K2(D,B,E): pass
     >>> class K3(D,A):   pass
     >>> class Z(K1,K2,K3): pass

Aqui estão as linearizações de acordo com a MRO C3 (o leitor deverá
verificar essas linearizações como exercício e desenhar o diagrama de
herança ;-)

     L[A] = A O
     L[B] = B O
     L[C] = C O
     L[D] = D O
     L[E] = E O
     L[K1]= K1 A B C O
     L[K2]= K2 D B E O
     L[K3]= K3 D A O
     L[Z] = Z K1 K2 K3 D A B C E O

Python 2.2 fornece exatamente as mesmas linearizações para A, B, C, D,
E, K1, K2 e K3, mas uma linearização diferente para Z:

     L[Z,P22] = Z K1 K3 A K2 D B C E O

É claro que esta linearização está 'errada', uma vez que A vem antes de
D, enquanto na linearização de K3 A vem 'depois' de D. Em outras
palavras, em métodos K3 derivados de D substituem os métodos derivados
de A, mas em Z, que ainda é uma subclasse de K3, os métodos derivados de
A substituem os métodos derivados de D! Isto é uma violação da
monotonicidade.  Além disso, a linearização de Z do Python 2.2 também é
inconsistente com a ordem de precedência local, uma vez que a lista de
precedência local da classe Z é [K1, K2, K3] (K2 precede K3), enquanto
na linearização de Z K2 'segue' K3 .  Estes problemas explicam porque é
que a regra do 2.2 foi rejeitada em favor da regra C3.

   ---------- Footnotes ----------

   (1) Ensaio de Guido van Rossum, 'Unificando tipos e classes em Python
2.2', em inglês:
‘https://web.archive.org/web/20140210194412/http://www.python.org/download/releases/2.2.2/descrintro’


File: python.info,  Node: O fim,  Next: Recursos<3>,  Prev: Ordens de resolução de métodos ruins,  Up: A Ordem de Resolução de Métodos do Python 2 3

9.21.5 O fim
------------

Esta seção é para o leitor impaciente, que passou direto por todas as
seções anteriores e pulou imediatamente para o final.  Esta seção também
é para o programador preguiçoso, que não quer exercitar seu cérebro.
Finalmente, é para o programador com alguma arrogância, caso contrário
ele/ela não estaria lendo um artigo sobre a ordem de resolução de
métodos C3 em múltiplas hierarquias de herança ;-) Essas três virtudes
tomadas em conjunto (e 'não' separadamente) merecem um prêmio: o prêmio
é um pequeno script em Python 2.2 que permite calcular a MRO do 2.3 sem
risco para o seu cérebro.  Basta alterar a última linha para brincar com
os vários exemplos que discuti neste artigo.:

     #<mro.py>

     """Algoritmo C3 por Samuele Pedroni (com legibilidade melhorada por mim)."""

     class __metaclass__(type):
         "Todas as classes são modificadas metamagicamente para serem impressas com aparência amigável"
         __repr__ = lambda cls: cls.__name__

     class ex_2:
         "Desacordo de ordem grave" #por Guido
         class O: pass
         class X(O): pass
         class Y(O): pass
         class A(X,Y): pass
         class B(Y,X): pass
         try:
             class Z(A,B): pass #cria Z(A,B) no Python 2.2
         except TypeError:
             pass # Z(A,B) não pode ser criado no Python 2.3

     class ex_5:
         "Meu primeiro exemplo"
         class O: pass
         class F(O): pass
         class E(O): pass
         class D(O): pass
         class C(D,F): pass
         class B(D,E): pass
         class A(B,C): pass

     class ex_6:
         "Meu segundo exemplo"
         class O: pass
         class F(O): pass
         class E(O): pass
         class D(O): pass
         class C(D,F): pass
         class B(E,D): pass
         class A(B,C): pass

     class ex_9:
         "Diferença entre MRO do Python 2.2 e o C3" #por Samuele
         class O: pass
         class A(O): pass
         class B(O): pass
         class C(O): pass
         class D(O): pass
         class E(O): pass
         class K1(A,B,C): pass
         class K2(D,B,E): pass
         class K3(D,A): pass
         class Z(K1,K2,K3): pass

     def merge(seqs):
         print '\n\nCPL[%s]=%s' % (seqs[0][0],seqs),
         res = []; i=0
         while 1:
           nonemptyseqs=[seq for seq in seqs if seq]
           if not nonemptyseqs: return res
           i+=1; print '\n',i,'round: candidates...',
           for seq in nonemptyseqs: # encontra candidatos a mesclagem entre os heads da sequência
               cand = seq[0]; print ' ',cand,
               nothead=[s for s in nonemptyseqs if cand in s[1:]]
               if nothead: cand=None #rejeita candidato
               else: break
           if not cand: raise "Hierarquia inconsistente"
           res.append(cand)
           for seq in nonemptyseqs: # remove candidato
               if seq[0] == cand: del seq[0]

     def mro(C):
         "Calcula a lista de precedência da classe (mro) conforme C3"
         return merge([[C]]+map(mro,C.__bases__)+[list(C.__bases__)])

     def print_mro(C):
         print '\nMRO[%s]=%s' % (C,mro(C))
         print '\nP22 MRO[%s]=%s' % (C,C.mro())

     print_mro(ex_9.Z)

     #</mro.py>

Isso é tudo, pessoal!

     Divirtam-se !


File: python.info,  Node: Recursos<3>,  Prev: O fim,  Up: A Ordem de Resolução de Métodos do Python 2 3

9.21.6 Recursos
---------------


File: python.info,  Node: Suporte experimental do Python para threads livres,  Next: Suporte a extensões da API C para threads livres,  Prev: A Ordem de Resolução de Métodos do Python 2 3,  Up: Python HOWTOs

9.22 Suporte experimental do Python para threads livres
=======================================================

A partir da versão 3.13, o CPython tem suporte experimental para uma
compilação do Python chamada *note threads livres: 15e4. (em inglês,
free threading), onde a *note trava global do interpretador: 148. (GIL)
está desabilitada.  A execução com threads livres permite a utilização
total do poder de processamento disponível, executando threads em
paralelo nos núcleos de CPU disponíveis.  Embora nem todos os softwares
se beneficiem disso automaticamente, os programas projetados com uso de
threads em mente serão executados mais rapidamente em hardware com
vários núcleos.

'O modo de threads livres é experimental' e há um trabalho contínuo para
melhorá-lo: espere alguns bugs e uma perda substancial no desempenho da
thread única.

Este documento descreve as implicações de threads livres para o código
Python.  Veja *note Suporte a extensões da API C para threads livres:
54b2. para informações sobre como escrever extensões C que oferecem
suporte à construção com threads livres.

Ver também
..........

PEP 703(1) – Tornando a trava global do interpretador opcional no
CPython para uma descrição geral do Python com threads livres.

* Menu:

* Instalação::
* Identificando um Python com threads livres::
* A trava global do interpretador no Python com threads livres::
* Segurança nas threads::
* Limitações conhecidas::

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0703/


File: python.info,  Node: Instalação,  Next: Identificando um Python com threads livres,  Up: Suporte experimental do Python para threads livres

9.22.1 Instalação
-----------------

A partir do Python 3.13, os instaladores oficiais do macOS e do Windows
oferecem suporte opcional à instalação de binários Python com threads
livres.  Os instaladores estão disponíveis em
‘https://www.python.org/downloads/’.

Para obter informações sobre outras plataformas, consulte Instalando um
Python com threads livres(1), um guia de instalação mantido pela
comunidade para instalar o Python com threads livres.

Ao construir o CPython a partir do código-fonte, a opção de configuração
*note -disable-gil: 174. deve ser usada para construir um interpretador
Python com threads livres.

   ---------- Footnotes ----------

   (1) https://py-free-threading.github.io/installing_cpython/


File: python.info,  Node: Identificando um Python com threads livres,  Next: A trava global do interpretador no Python com threads livres,  Prev: Instalação,  Up: Suporte experimental do Python para threads livres

9.22.2 Identificando um Python com threads livres
-------------------------------------------------

Para verificar se o interpretador atual oferece suporte a threads
livres, *note python -VV: 177. e *note sys.version: 178. contêm
“experimental free-threading build”.  A nova função *note
sys._is_gil_enabled(): 45cb. pode ser usada para verificar se a GIL está
realmente desabilitada no processo em execução.

A variável de configuração ‘sysconfig.get_config_var("Py_GIL_DISABLED")’
pode ser usada para determinar se a compilação tem suporte a threads
livres.  Se a variável for definida como ‘1’, a compilação tem suporte a
threads livres.  Este é o mecanismo recomendado para decisões
relacionadas à configuração da construção.


File: python.info,  Node: A trava global do interpretador no Python com threads livres,  Next: Segurança nas threads,  Prev: Identificando um Python com threads livres,  Up: Suporte experimental do Python para threads livres

9.22.3 A trava global do interpretador no Python com threads livres
-------------------------------------------------------------------

Construções com threads livres do CPython oferecem suporte a
opcionalmente executar com a GIL habilitada em tempo de execução usando
a variável de ambiente *note PYTHON_GIL: 175. ou a opção de linha de
comando *note -X gil: 176.

A GIL também pode ser habilitada automaticamente ao importar um módulo
de extensão da API C que não esteja explicitamente marcado como
oferecendo suporte a threads livres.  Um aviso será impresso neste caso.

Além da documentação de pacotes individuais, os seguintes sites
rastreiam o status do suporte de pacotes populares para threads livres:

   * ‘https://py-free-threading.github.io/tracking/’

   * ‘https://hugovk.github.io/free-threaded-wheels/’


File: python.info,  Node: Segurança nas threads,  Next: Limitações conhecidas,  Prev: A trava global do interpretador no Python com threads livres,  Up: Suporte experimental do Python para threads livres

9.22.4 Segurança nas threads
----------------------------

A construção com threads livres do CPython visa fornecer comportamento
de segurança às threads semelhante no nível do Python à construção
padrão com GIL habilitada.  Tipos embutidos como *note dict: 256, *note
list: 611. e *note set: 5d9. usam travas internas para proteger contra
modificações simultâneas de maneiras que se comportam de forma
semelhante à GIL. No entanto, o Python não garantiu historicamente um
comportamento específico para modificações simultâneas a esses tipos
embutidos, portanto, isso deve ser tratado como uma descrição da
implementação atual, não uma garantia de comportamento atual ou futuro.

     Nota: É recomendável usar *note threading.Lock: 176d. ou outras
     primitivas de sincronização em vez de depender de travas internas
     de tipos embutidos, quando possível.


File: python.info,  Node: Limitações conhecidas,  Prev: Segurança nas threads,  Up: Suporte experimental do Python para threads livres

9.22.5 Limitações conhecidas
----------------------------

Esta seção descreve as limitações conhecidas da construção do Python com
threads livres.

* Menu:

* Imortalização::
* Objetos quadro: Objetos quadro<2>.
* Iteradores: Iteradores<3>.
* Desempenho com thread única::


File: python.info,  Node: Imortalização,  Next: Objetos quadro<2>,  Up: Limitações conhecidas

9.22.5.1 Imortalização
......................

A construção com threads livres da versão 3.13 torna alguns objetos
*note imortais: 45bb.  Objetos imortais não são desalocados e têm
contagens de referência que nunca são modificadas.  Isso é feito para
evitar contenção de contagem de referências que impediria o
dimensionamento multithread eficiente.

Um objeto será tornado imortal quando um novo thread for iniciado pela
primeira vez após o thread principal estar em execução.  Os seguintes
objetos são imortalizados:

   * objetos *note função: 299. declarados no nível de módulo

   * descritores de *note métodos: 1e47.

   * objetos *note código: 1d2.

   * objetos *note módulo: 1755. e seus dicionários

   * *note classes: 209e. (objetos de tipo)

Como objetos imortais nunca são desalocados, aplicações que criam muitos
objetos desses tipos podem ver aumento no uso de memória.  Espera-se que
isso seja resolvido na versão 3.14.

Além disso, literais numéricos e de string no código, bem como strings
retornadas por *note sys.intern(): 131e. também são imortalizados.
Espera-se que esse comportamento permaneça na construção com threads
livres do 3.14.


File: python.info,  Node: Objetos quadro<2>,  Next: Iteradores<3>,  Prev: Imortalização,  Up: Limitações conhecidas

9.22.5.2 Objetos quadro
.......................

Não é seguro acessar objetos *note quadro: 6e0. de outros threads e
fazer isso pode fazer com que seu programa trave.  Isso significa que
*note sys._current_frames(): 147a. geralmente não é seguro para uso em
uma construção com threads livres.  Funções como *note
inspect.currentframe(): 6e2. e *note sys._getframe(): 6e1. são
geralmente seguras, desde que o objeto quadro resultante não seja
passado para outro thread.


File: python.info,  Node: Iteradores<3>,  Next: Desempenho com thread única,  Prev: Objetos quadro<2>,  Up: Limitações conhecidas

9.22.5.3 Iteradores
...................

Compartilhar o mesmo objeto iterador entre vários threads geralmente não
é seguro e os threads podem ver elementos duplicados ou ausentes ao
iterar ou travar o interpretador.


File: python.info,  Node: Desempenho com thread única,  Prev: Iteradores<3>,  Up: Limitações conhecidas

9.22.5.4 Desempenho com thread única
....................................

A construção com threads livres tem sobrecarga adicional ao executar
código Python em comparação com a construção padrão com GIL habilitada.
Na versão 3.13, essa sobrecarga é de cerca de 40% no conjunto de
ferramentas pyperformance(1).  Programas que passam a maior parte do
tempo em extensões C ou E/S verão menos impacto.  O maior impacto é
porque o interpretador adaptativo especializado ( PEP 659(2)) está
desabilitado na construção com threads livres.  Esperamos reabilitá-lo
de forma segura para threads na versão 3.14.  Espera-se que essa
sobrecarga seja reduzida na próxima versão do Python.  Estamos buscando
uma sobrecarga de 10% ou menos no conjunto de ferramentas pyperformance
em comparação com a construção padrão com GIL habilitada.

   ---------- Footnotes ----------

   (1) https://pyperformance.readthedocs.io/

   (2) https://peps.python.org/pep-0659/


File: python.info,  Node: Suporte a extensões da API C para threads livres,  Prev: Suporte experimental do Python para threads livres,  Up: Python HOWTOs

9.23 Suporte a extensões da API C para threads livres
=====================================================

A partir da versão 3.13, o CPython tem suporte experimental para
execução com a *note trava global do interpretador: 148. (GIL)
desabilitada em uma configuração chamada *note threads livres: 15e4.
Este documento descreve como adaptar extensões da API C para ter suporte
a threads livres.

* Menu:

* Identificando a construção com threads livres em C::
* Inicialização de módulo::
* Diretrizes gerais de API::
* Referências emprestadas::
* APIs de alocação de memória::
* APIs da GIL e de estado de threads::
* Protegendo o estado interno das extensões::
* Construindo extensões para a construção com threads livres::


File: python.info,  Node: Identificando a construção com threads livres em C,  Next: Inicialização de módulo,  Up: Suporte a extensões da API C para threads livres

9.23.1 Identificando a construção com threads livres em C
---------------------------------------------------------

A API C do CPython expõe a macro ‘Py_GIL_DISABLED’: na construção com
threads livres ela está definida como ‘1’, e na construção regular ela
não está definida.  Você pode usá-la para ativar o código que é
executado apenas na construção com threads livres:

     #ifdef Py_GIL_DISABLED
     /* código que só vai ser executado na construção com threads livres */
     #endif

     Nota: No Windows, esta macro não é definida automaticamente, mas
     deve ser especificada ao compilador durante a compilação.  A função
     *note sysconfig.get_config_var(): 1063. pode ser usada para
     determinar se o interpretador em execução tinha a macro definida.


File: python.info,  Node: Inicialização de módulo,  Next: Diretrizes gerais de API,  Prev: Identificando a construção com threads livres em C,  Up: Suporte a extensões da API C para threads livres

9.23.2 Inicialização de módulo
------------------------------

Os módulos de extensão precisam indicar explicitamente que têm suporte à
execução com a GIL desabilitada; caso contrário, importar a extensão
levantará um aviso e ativará a GIL em tempo de execução.

Há duas maneiras de indicar que um módulo de extensão tem suporte à
execução com a GIL desabilitada, dependendo se a extensão usa
inicialização monofásica ou multifásica.

* Menu:

* Inicialização multifásica: Inicialização multifásica<2>.
* Inicialização monofásica::


File: python.info,  Node: Inicialização multifásica<2>,  Next: Inicialização monofásica,  Up: Inicialização de módulo

9.23.2.1 Inicialização multifásica
..................................

Extensões que usam inicialização multifásica (ou seja, *note
PyModuleDef_Init(): 4b4c.) devem adicionar um slot *note Py_mod_gil:
158. na definição do módulo.  Se sua extensão tem suporte a versões mais
antigas do CPython, você deve proteger o slot com uma verificação de
*note PY_VERSION_HEX: 757.

     static struct PyModuleDef_Slot module_slots[] = {
         ...
     #if PY_VERSION_HEX >= 0x030D0000
         {Py_mod_gil, Py_MOD_GIL_NOT_USED},
     #endif
         {0, NULL}
     };

     static struct PyModuleDef moduledef = {
         PyModuleDef_HEAD_INIT,
         .m_slots = module_slots,
         ...
     };


File: python.info,  Node: Inicialização monofásica,  Prev: Inicialização multifásica<2>,  Up: Inicialização de módulo

9.23.2.2 Inicialização monofásica
.................................

Extensões que usam inicialização monofásica (ou seja, *note
PyModule_Create(): 50b8.) devem chamar *note PyUnstable_Module_SetGIL():
179. para indicar que têm suporte à execução com a GIL desabilitada.  A
função é definida apenas na construção com threads livres, então você
deve proteger a chamada com ‘#ifdef Py_GIL_DISABLED’ para evitar erros
de compilação na construção regular.

     static struct PyModuleDef moduledef = {
         PyModuleDef_HEAD_INIT,
         ...
     };

     PyMODINIT_FUNC
     PyInit_mymodule(void)
     {
         PyObject *m = PyModule_Create(&moduledef);
         if (m == NULL) {
             return NULL;
         }
     #ifdef Py_GIL_DISABLED
         PyUnstable_Module_SetGIL(m, Py_MOD_GIL_NOT_USED);
     #endif
         return m;
     }


File: python.info,  Node: Diretrizes gerais de API,  Next: Referências emprestadas,  Prev: Inicialização de módulo,  Up: Suporte a extensões da API C para threads livres

9.23.3 Diretrizes gerais de API
-------------------------------

A maior parte da API C é segura para thread, mas há algumas exceções.

   * 'Campos de structs': acessar campos em objetos ou structs da API C
     do Python diretamente não é seguro para thread se o campo puder ser
     modificado simultaneamente.

   * 'Macros': Macros de acesso como *note PyList_GET_ITEM: 4bf8. e
     *note PyList_SET_ITEM: 38e. não executam nenhuma verificação por
     erros e nenhum travamento.  Essas macros não são seguras para
     thread se o objeto contêiner puder ser modificado simultaneamente.

   * 'Referências emprestadas': as funções da API C que retornam *note
     referências emprestadas: 33e. podem não ser seguras para thread se
     o objeto que as contêm for modificado simultaneamente.  Veja a
     seção sobre *note referências emprestadas: 54c4. para mais
     informações.

* Menu:

* Segurança de threads de contêineres::


File: python.info,  Node: Segurança de threads de contêineres,  Up: Diretrizes gerais de API

9.23.3.1 Segurança de threads de contêineres
............................................

Contêineres como *note PyListObject: 4f30, *note PyDictObject: 3c1. e
*note PySetObject: 5046. executam uma trava interna na construção com
threads livres.  Por exemplo, *note PyList_Append(): 4cd9. irá travar a
lista antes de anexar um item.

* Menu:

* PyDict_Next::


File: python.info,  Node: PyDict_Next,  Up: Segurança de threads de contêineres

9.23.3.2 ‘PyDict_Next’
......................

Uma exceção notável é *note PyDict_Next(): 16fd, que não trava o
dicionário.  Você deve usar *note Py_BEGIN_CRITICAL_SECTION: 5028. para
proteger o dicionário enquanto itera sobre ele se o dicionário puder ser
modificado simultaneamente:

     Py_BEGIN_CRITICAL_SECTION(dict);
     PyObject *key, *value;
     Py_ssize_t pos = 0;
     while (PyDict_Next(dict, &pos, &key, &value)) {
         ...
     }
     Py_END_CRITICAL_SECTION();


File: python.info,  Node: Referências emprestadas,  Next: APIs de alocação de memória,  Prev: Diretrizes gerais de API,  Up: Suporte a extensões da API C para threads livres

9.23.4 Referências emprestadas
------------------------------

Algumas funções da API C retornam *note referências emprestadas: 33e.
Essas APIs não são seguras para thread se o objeto que as contém for
modificado simultaneamente.  Por exemplo, não é seguro usar *note
PyList_GetItem(): 35a. se a lista puder ser modificada simultaneamente.

A tabela a seguir lista algumas APIs de referências emprestadas e suas
substituições que retornam *note referências fortes: 33d.

API de referências emprestadas          API de referências fortes
                                        
--------------------------------------------------------------------------------
                                        
*note PyList_GetItem(): 35a.            *note PyList_GetItemRef(): 359.
                                        
                                        
*note PyList_GET_ITEM(): 4bf8.          *note PyList_GetItemRef(): 359.
                                        
                                        
*note PyDict_GetItem(): 387.            *note PyDict_GetItemRef(): 33a.
                                        
                                        
*note PyDict_GetItemWithError(): 33c.   *note PyDict_GetItemRef(): 33a.
                                        
                                        
*note PyDict_GetItemString(): 388.      *note PyDict_GetItemStringRef(): 33b.
                                        
                                        
*note PyDict_SetDefault(): 340.         *note PyDict_SetDefaultRef(): 33f.
                                        
                                        
*note PyDict_Next(): 16fd.              nenhuma (veja
                                        *note PyDict_Next: 54c7.)
                                        
                                        
*note PyWeakref_GetObject(): 379.       *note PyWeakref_GetRef(): 378.
                                        
                                        
*note PyWeakref_GET_OBJECT(): 3bf.      *note PyWeakref_GetRef(): 378.
                                        
                                        
*note PyImport_AddModule(): 357.        *note PyImport_AddModuleRef(): 356.
                                        

Nem todas as APIs que retornam referências emprestadas são
problemáticas.  Por exemplo, *note PyTuple_GetItem(): 4b61. é segura
porque as tuplas são imutáveis.  Da mesma forma, nem todos os usos das
APIs acima são problemáticos.  Por exemplo, *note PyDict_GetItem(): 387.
é frequentemente usado para analisar dicionários de argumentos nomeados
em chamadas de função; esses dicionários de argumentos nomeados
efetivamente privados (não acessíveis por outros threads), portanto,
usar referências emprestadas nesse contexto é seguro.

Algumas dessas funções foram adicionadas no Python 3.13.  Você pode usar
o pacote pythoncapi-compat(1) para fornecer implementações dessas
funções para versões mais antigas do Python.

   ---------- Footnotes ----------

   (1) https://github.com/python/pythoncapi-compat


File: python.info,  Node: APIs de alocação de memória,  Next: APIs da GIL e de estado de threads,  Prev: Referências emprestadas,  Up: Suporte a extensões da API C para threads livres

9.23.5 APIs de alocação de memória
----------------------------------

A API C de gerenciamento de memória do Python fornece funções em três
*note domínios de alocação: 5213. diferentes: “raw”, “mem” e “object”.
Para segurança de thread, a construção com threads livres requer que
apenas objetos Python sejam alocados usando o domínio do objeto e que
todos os objetos Python sejam alocados usando esse domínio.  Isso difere
das versões anteriores do Python, onde era apenas uma melhor prática e
não um requisito estrito.

     Nota: Procure usos de *note PyObject_Malloc(): c83. em sua extensão
     e verifique se a memória alocada é usada para objetos Python.  Use
     *note PyMem_Malloc(): c81. para alocar buffers em vez de *note
     PyObject_Malloc(): c83.


File: python.info,  Node: APIs da GIL e de estado de threads,  Next: Protegendo o estado interno das extensões,  Prev: APIs de alocação de memória,  Up: Suporte a extensões da API C para threads livres

9.23.6 APIs da GIL e de estado de threads
-----------------------------------------

Python fornece um conjunto de funções e macros para gerenciar o estado
de threads e a GIL, como:

   * *note PyGILState_Ensure(): 3ab. e *note PyGILState_Release(): 3ac.

   * *note PyEval_SaveThread(): 3a8. e *note PyEval_RestoreThread():
     3a9.

   * *note Py_BEGIN_ALLOW_THREADS: 4b67. e *note Py_END_ALLOW_THREADS:
     a98.

Estas funções ainda devem ser usadas na construção com threads livres
para gerenciar o estado de threads mesmo quando a *note GIL: 159. está
desabilitada.  Por exemplo, se você criar uma thread fora do Python,
você deve chamar *note PyGILState_Ensure(): 3ab. antes de chamar a API
Python para garantir que a thread tenha um estado de thread válido para
o Python.

Você deve continuar a chamar *note PyEval_SaveThread(): 3a8. ou *note
Py_BEGIN_ALLOW_THREADS: 4b67. em torno de operações de travamento, como
E/S ou aquisições de trava, para permitir que outras threads executem o
*note coletor de lixo cíclico: 1a69.


File: python.info,  Node: Protegendo o estado interno das extensões,  Next: Construindo extensões para a construção com threads livres,  Prev: APIs da GIL e de estado de threads,  Up: Suporte a extensões da API C para threads livres

9.23.7 Protegendo o estado interno das extensões
------------------------------------------------

Sua extensão pode ter um estado interno que foi previamente protegido
pela GIL. Talvez seja necessário adicionar uma trava para proteger esse
estado.  A abordagem dependerá da sua extensão, mas alguns padrões
comuns incluem:

   * 'Caches': caches globais são uma fonte comum de estado
     compartilhado.  Considere usar uma trava para proteger o cache ou
     desativá-lo na construção com threads livres se o cache não for
     crítico para o desempenho.

   * 'Estado global': o estado global pode precisar ser protegido por
     uma trava ou movido para o armazenamento local do thread.  C11 e
     C++11 fornecem ‘thread_local’ ou ‘_Thread_local’ para armazenamento
     local de thread(1).

   ---------- Footnotes ----------

   (1) https://en.cppreference.com/w/c/language/storage_duration


File: python.info,  Node: Construindo extensões para a construção com threads livres,  Prev: Protegendo o estado interno das extensões,  Up: Suporte a extensões da API C para threads livres

9.23.8 Construindo extensões para a construção com threads livres
-----------------------------------------------------------------

As extensões da API C precisam ser construídas especificamente para a
construção com threads livres.  As wheels, bibliotecas compartilhadas e
binários são indicados por um sufixo ‘t’.

   * pypa/manylinux(1) oferece suporte à construção com threads livres,
     com o sufixo ‘t’, como ‘python3.13t’.

   * pypa/cibuildwheel(2) oferece suporte a construção com threads
     livres se você definir CIBW_ENABLE com cpython-freethreading(3).

* Menu:

* API C limitada e ABI estável::
* Windows: Windows<82>.

   ---------- Footnotes ----------

   (1) https://github.com/pypa/manylinux

   (2) https://github.com/pypa/cibuildwheel

   (3) https://cibuildwheel.pypa.io/en/stable/options/#enable


File: python.info,  Node: API C limitada e ABI estável,  Next: Windows<82>,  Up: Construindo extensões para a construção com threads livres

9.23.8.1 API C limitada e ABI estável
.....................................

A construção com threads livres não tem suporte atualmente à *note API C
limitada: 396. ou à ABI estável.  Se você usar setuptools(1) para
construir sua extensão e atualmente definir ‘py_limited_api=True’, você
pode usar ‘py_limited_api=not
sysconfig.get_config_var("Py_GIL_DISABLED")’ para não usar a API
limitada ao construir com a construção com threads livres.

     Nota: Você precisará construir wheels separadas especificamente
     para a construção com threads livres.  Se você usa atualmente a ABI
     estável, poderá continuar a construir uma única wheel para várias
     versões do Python sem threads livres.

   ---------- Footnotes ----------

   (1) https://setuptools.pypa.io/en/latest/setuptools.html


File: python.info,  Node: Windows<82>,  Prev: API C limitada e ABI estável,  Up: Construindo extensões para a construção com threads livres

9.23.8.2 Windows
................

Devido a uma limitação do instalador oficial do Windows, você precisará
definir manualmente ‘Py_GIL_DISABLED=1’ ao construir extensões a partir
do código-fonte.

Ver também
..........

Portando módulos de extensão para oferecer suporte a threads livres(1):
um guia de portabilidade mantido pela comunidade para autores de
extensões.

Geral:

   * *note Uma visão geral conceitual de asyncio: 3475.

   * *note Boas práticas para anotações: 7da.

   * *note Tutorial de Argparse: 3045.

   * *note Guia de descritores: 1535.

   * *note Enum: 5344.

   * *note Programação Funcional: 5376.

   * *note Uma introdução ao módulo ipaddress: 3e7f.

   * *note Logging: 5395.

   * *note Livro de receitas do logging: 1237.

   * *note Expressões Regulares: 2487.

   * *note Técnicas de ordenação: 2314.

   * *note Unicode: 12e7.

   * *note Como buscar recursos da Internet usando o pacote urllib:
     3c3e.

Desenvolvimento avançado:

   * *note Programação em Curses com Python: 313d.

   * *note Suporte experimental do Python para threads livres: 54af.

   * *note Suporte a extensões da API C para threads livres: 54b2.

   * *note Isolando módulos de extensão: 4b4d.

   * *note A Ordem de Resolução de Métodos do Python 2.3: 14f2.

   * *note Programação de Soquetes: 3653.

   * *note Descritor de arquivo de temporizador: 54a2.

   * *note Portando módulos de extensão para o Python 3: 1324.

Depuração e perfilação:

   * *note Depurando extensões de API C e internos do CPython com GDB:
     5335.

   * *note Instrumentando o CPython com DTrace e SystemTap: c87.

   * *note Suporte do Python ao perfilador perf do Linux: 18f.

   ---------- Footnotes ----------

   (1) https://py-free-threading.github.io/porting/


File: python.info,  Node: Perguntas Frequentes Sobre Python,  Next: Descontinuações,  Prev: Python HOWTOs,  Up: Top

10 Perguntas Frequentes Sobre Python
************************************

* Menu:

* Python Geral::
* FAQ sobre programação::
* FAQ sobre design e histórico::
* FAQ de Bibliotecas e Extensões::
* FAQ sobre Extensão/Incorporação::
* Python no Windows::
* FAQ da Interface Gráfica do Usuário::
* FAD de “Por que o Python está instalado em meu computador?”::


File: python.info,  Node: Python Geral,  Next: FAQ sobre programação,  Up: Perguntas Frequentes Sobre Python

10.1 Python Geral
=================

* Menu:

* Informações gerais::
* Python no mundo real::


File: python.info,  Node: Informações gerais,  Next: Python no mundo real,  Up: Python Geral

10.1.1 Informações gerais
-------------------------

* Menu:

* O que é Python?::
* O que é a Python Software Foundation?::
* Existem restrições de direitos autorais sobre o uso de Python?::
* Em primeiro lugar, por que o Python foi desenvolvido?: Em primeiro lugar por que o Python foi desenvolvido?.
* Para o que Python é excelente?::
* Como funciona o esquema de numeração de versões do Python?::
* Como faço para obter uma cópia dos fonte do Python?::
* Como faço para obter a documentação do Python?::
* Eu nunca programei antes. Existe um tutorial básico do Python?: Eu nunca programei antes Existe um tutorial básico do Python?.
* Existe um grupo de discussão ou lista de discussão dedicada ao Python?::
* Como faço para obter uma versão de teste beta do Python?::
* Como eu envio um relatório de erros e correções para o Python?::
* Existem alguns artigos publicados sobre o Python para que eu possa fazer referência?::
* Existem alguns livros sobre o Python?::
* Onde está armazenado o site www.python.org?: Onde está armazenado o site www python org?.
* Por que o nome Python?::
* Eu tenho que gostar de “Monty Python’s Flying Circus”?::


File: python.info,  Node: O que é Python?,  Next: O que é a Python Software Foundation?,  Up: Informações gerais

10.1.1.1 O que é Python?
........................

O Python é uma linguagem de programação interpretada, interativa e
orientada a objetos.  O mesmo incorporou módulos, exceções, tipagem
dinâmica, tipos de dados dinâmicos de alto nível e classes.  Há suporte
a vários paradigmas de programação além da programação orientada a
objetos, tal como programação procedural e funcional.  O Python fornece
ao desenvolvedor um poder notável aliado a uma sintaxe simples de clara.
Possui interfaces para muitas chamadas e bibliotecas do sistema, bem
como para vários sistemas de janelas, e é extensível através de
linguagem como o C ou C++.  Também é utilizado como linguagem de
extensão para aplicativos que precisam de uma interface programável.
Finalmente, o Python é portátil: o mesmo pode ser executado em várias
variantes do Unix, incluindo Linux e Mac, e no Windows.

Para saber mais, inicie pelo nosso tutorial *note O tutorial do Python:
1d55.  Os links do Beginner's Guide to Python(1) para outros tutoriais
introdutórios e recursos da linguagem Python.

   ---------- Footnotes ----------

   (1) https://wiki.python.org/moin/BeginnersGuide


File: python.info,  Node: O que é a Python Software Foundation?,  Next: Existem restrições de direitos autorais sobre o uso de Python?,  Prev: O que é Python?,  Up: Informações gerais

10.1.1.2 O que é a Python Software Foundation?
..............................................

O Python Software Foundation é uma organização independente e sem fins
lucrativos que detém os direitos autorais sobre as versões 2.1 do Python
e as mais recentes.  A missão do PSF é avançar a tecnologia de código
aberto relacionada à linguagem de programação Python e divulgar a
utilização do Python.  A página inicial do PSF pode ser acessada pelo
link a seguir ‘https://www.python.org/psf/’.

Doações para o PSF estão isentas de impostos nos EUA. Se utilizares o
Python e achares útil, contribua através da página de doação da PSF(1).

   ---------- Footnotes ----------

   (1) https://www.python.org/psf/donations/


File: python.info,  Node: Existem restrições de direitos autorais sobre o uso de Python?,  Next: Em primeiro lugar por que o Python foi desenvolvido?,  Prev: O que é a Python Software Foundation?,  Up: Informações gerais

10.1.1.3 Existem restrições de direitos autorais sobre o uso de Python?
.......................................................................

Podemos fazer tudo o que quisermos com os fontes, desde que deixemos os
direitos autorais e exibamos esses direitos em qualquer documentação
sobre o Python que produzirmos.  Se honrarmos as regras dos direitos
autorais, não há quaisquer problema em utilizar o Python em versões
comerciais, vendê-lo, copiá-lo na forma de código-fonte ou o seu binária
(modificado ou não modificado), ou para vender produtos que incorporem o
Python de alguma forma.  Ainda gostaríamos de saber sobre todo o uso
comercial de Python, é claro.

Veja a página da licença(1) para encontrar mais explicações e um link
para o texto completo da licença.

O logotipo do Python é marca registrada e, em certos casos, é necessária
permissão para usá-la.  Consulte a Política de Uso da Marca comercial(2)
para obter mais informações.

   ---------- Footnotes ----------

   (1) https://docs.python.org/3/license.html

   (2) https://www.python.org/psf/trademarks/


File: python.info,  Node: Em primeiro lugar por que o Python foi desenvolvido?,  Next: Para o que Python é excelente?,  Prev: Existem restrições de direitos autorais sobre o uso de Python?,  Up: Informações gerais

10.1.1.4 Em primeiro lugar, por que o Python foi desenvolvido?
..............................................................

Aqui está um resumo 'muito' breve de como que tudo começou, escrito por
Guido van Rossum:

     Eu tive vasta experiência na implementação de linguagens
     interpretada no grupo ABC da CWI e, ao trabalhar com esse grupo,
     aprendi muito sobre o design de linguagens.  Esta é a origem de
     muitos recursos do Python, incluindo o uso do recuo para o
     agrupamento de instruções e a inclusão de tipos de dados de alto
     nível (embora existam diversos detalhes diferentes em Python).

     Eu tinha uma série de queixas sobre a linguagem ABC, mas também
     havia gostado de muitos das suas características.  Era impossível
     estender ABC (ou melhorar a implementação) para remediar minhas
     queixas – na verdade, a falta de extensibilidade era um dos maiores
     problemas.  Eu tinha alguma experiência com o uso de Modula-2+ e
     conversei com os designers do Modula-3 e li o relatório do
     Modula-3.  Modula-3 foi a origem da sintaxe e semântica usada nas
     exceções, e alguns outros recursos do Python.

     Eu estava trabalhando no grupo de sistema operacional distribuído
     da Amoeba na CWI. Precisávamos de uma maneira melhor de administrar
     o sistema do que escrevendo programas em C ou scripts para a shell
     Bourne, uma vez que o Amoeba tinha a sua própria interface de
     chamada do sistema, que não era facilmente acessível a partir do
     shell Bourne.  Minha experiência com o tratamento de erros em
     Amoeba me conscientizou da importância das exceções como um recurso
     das linguagens de programação.

     Percebi que uma linguagem de script com uma sintaxe semelhante a da
     ABC, mas com acesso às chamadas do sistema Amoeba, preencheria a
     necessidade.  Percebi também que seria uma boa escrever uma
     linguagem específica para o Amoeba, então, decidi que precisava de
     uma linguagem realmente extensível.

     Durante as férias do Natal de 1989, tive bastante tempo disponível
     e então decidi tentar a construção de algo.  Durante o ano
     seguinte, continuei trabalhando em minhas horas vagas, e o Python
     foi usado no projeto Amoeba com crescente sucesso, e o feedback dos
     colegas me fez implementar muitas melhorias.

     Em fevereiro de 1991, depois de mais de um ano de desenvolvimento,
     decidi publicar na USENET. O resto está no arquivo ‘Misc/HISTORY’.


File: python.info,  Node: Para o que Python é excelente?,  Next: Como funciona o esquema de numeração de versões do Python?,  Prev: Em primeiro lugar por que o Python foi desenvolvido?,  Up: Informações gerais

10.1.1.5 Para o que Python é excelente?
.......................................

Python é uma linguagem de programação de propósito geral, de alto nível
e que pode ser aplicada em muitos tipos diferentes de problemas.

A linguagem vem com uma grande biblioteca padrão que abrange áreas como
processamento de strings (expressões regulares, Unicode, cálculo de
diferenças entre arquivos), protocolos de internet (HTTP, FTP, SMTP,
XML-RPC, POP, IMAP), engenharia de software (testes de unidade ,
registro, criação de perfil, análise de código Python) e interfaces de
sistema operacional (chamadas de sistema, sistemas de arquivos, soquetes
TCP/IP). Veja o sumário de *note A Biblioteca Padrão do Python: 144.
para ter uma ideia do que está disponível.  Uma ampla variedade de
extensões de terceiros também está disponível.  Consulte o Python
Package Index(1) para encontrar pacotes de seu interesse.

   ---------- Footnotes ----------

   (1) https://pypi.org


File: python.info,  Node: Como funciona o esquema de numeração de versões do Python?,  Next: Como faço para obter uma cópia dos fonte do Python?,  Prev: Para o que Python é excelente?,  Up: Informações gerais

10.1.1.6 Como funciona o esquema de numeração de versões do Python?
...................................................................

As versões de Python são enumeradas como “A.B.C” ou “A.B”:

   * 'A' é o número da versão principal - sendo incrementada apenas em
     grandes mudanças na linguagem.

   * 'B' é o número da versão menor - sendo incrementada apenas para
     mudanças menos estruturais.

   * 'C' é o número para micro versão – sendo incrementada apenas para
     lançamento com correção de bugs.

Nem todos as versões são lançamentos de correções de erros.  Na corrida
por um novo lançamento de funcionalidade, uma série de versões de
desenvolvimento são feitas, denotadas como alfa, beta ou candidata.  As
versões alfa são lançamentos iniciais (early releases) em que as
interfaces ainda não estão finalizadas; não é inesperado ver uma mudança
de interface entre duas versões alfa.  As betas são mais estáveis,
preservando as interfaces existentes, mas possivelmente adicionando
novos módulos, e as candidatas a lançamento são congeladas, sem
alterações, exceto quando necessário para corrigir erros críticos.

As versões alpha, beta e candidata a lançamento possuem um sufixo
adicional:

   * O sufixo para uma versão alfa é “aN” para algum número pequeno 'N'.

   * O sufixo para uma versão beta é “bN” para algum número pequeno 'N'.

   * O sufixo para um lançamento em versão candidata é “rcN” para algum
     número pequeno 'N'.

Em outras palavras, todas as versões rotuladas como '2.0aN' precedem as
versões rotuladas como '2.0bN', que por sua vez precedem versões
rotuladas como '2.0rcN', e 'estas' precedem 2.0.

Também podemos encontrar números de versão com um sufixo “+”, por
exemplo, “2.2+”.  Estas são versões não lançadas, construídas
diretamente do repositório de desenvolvimento do CPython.  Na prática,
após uma última versão menor, a versão é incrementada para a próxima
versão secundária, que se torna a versão “a0”, por exemplo, “2.4a0”.

Veja o Developer's Guide(1) para mais informações sobre o ciclo de
desenvolvimento, e a PEP 387(2) para aprender mais sobre a política de
compatibilidade com versões anteriores do Python.  Veja também a
documentação para *note sys.version: 178, *note sys.hexversion: 45c6, e
*note sys.version_info: 6a0.

   ---------- Footnotes ----------

   (1) https://devguide.python.org/developer-workflow/development-cycle/

   (2) https://peps.python.org/pep-0387/


File: python.info,  Node: Como faço para obter uma cópia dos fonte do Python?,  Next: Como faço para obter a documentação do Python?,  Prev: Como funciona o esquema de numeração de versões do Python?,  Up: Informações gerais

10.1.1.7 Como faço para obter uma cópia dos fonte do Python?
............................................................

A última distribuição fonte do Python sempre está disponível no
python.org, em ‘https://www.python.org/downloads/’.  As últimas fontes
de desenvolvimento podem ser obtidas em
‘https://github.com/python/cpython/’.

A distribuição fonte é um arquivo .tar com .gzip contendo o código-fonte
C completo, a documentação formatada com o Sphinx, módulos de biblioteca
Python, programas de exemplo e várias peças úteis de software livremente
distribuível.  A fonte compilará e executará sem a necessidade de
configurações extras na maioria das plataformas UNIX.

Consulte a seção Introdução do Guia do Desenvolvedor Python(1) para
obter mais informações sobre como obter o código-fonte e compilá-lo.

   ---------- Footnotes ----------

   (1) https://devguide.python.org/setup/


File: python.info,  Node: Como faço para obter a documentação do Python?,  Next: Eu nunca programei antes Existe um tutorial básico do Python?,  Prev: Como faço para obter uma cópia dos fonte do Python?,  Up: Informações gerais

10.1.1.8 Como faço para obter a documentação do Python?
.......................................................

A documentação padrão para a versão atualmente estável do Python está
disponível em ‘https://docs.python.org/3/’.  Em EPUB, texto simples e
versões HTML para download também estão disponíveis em
‘https://docs.python.org/3/download.html’.

A documentação é escrita em reStructuredText e processada pela
ferramenta de documentação Sphinx(1).  Os fonte do reStructuredText para
documentação fazem parte da distribuição fonte do Python.

   ---------- Footnotes ----------

   (1) https://www.sphinx-doc.org/


File: python.info,  Node: Eu nunca programei antes Existe um tutorial básico do Python?,  Next: Existe um grupo de discussão ou lista de discussão dedicada ao Python?,  Prev: Como faço para obter a documentação do Python?,  Up: Informações gerais

10.1.1.9 Eu nunca programei antes. Existe um tutorial básico do Python?
.......................................................................

Existem inúmeros tutoriais e livros disponíveis.  A documentação padrão
inclui *note O tutorial do Python: 1d55.

Consulte o Guia do Iniciante(1) para encontrar informações para quem
está começando agora na programação Python, incluindo uma lista com
tutoriais.

   ---------- Footnotes ----------

   (1) https://wiki.python.org/moin/BeginnersGuide


File: python.info,  Node: Existe um grupo de discussão ou lista de discussão dedicada ao Python?,  Next: Como faço para obter uma versão de teste beta do Python?,  Prev: Eu nunca programei antes Existe um tutorial básico do Python?,  Up: Informações gerais

10.1.1.10 Existe um grupo de discussão ou lista de discussão dedicada ao Python?
................................................................................

Existe um grupo de notícias ‘comp.lang.python’, e uma lista de
discussão, python-list(1).  O grupo notícias e a lista de discussão são
conectados um ou outro – se poderes ler as notícias, não será necessário
se inscrever na lista de discussão.  ‘comp.lang.python’ possui bastante
postagem, recebendo centenas de postagens todos os dias, e os leitores
do Usenet geralmente são mais capazes de lidar com esse volume.

Os anúncios de novas versões do software e eventos podem ser encontrados
em comp.lang.python.announce, uma lista moderada de baixo tráfego que
recebe cerca de cinco postagens por dia.  Está disponível como a lista
de discussão python-announce(2).

Mais informações sobre outras listas de discussão e grupos de notícias
podem ser encontradas em ‘https://www.python.org/community/lists/’.

   ---------- Footnotes ----------

   (1) https://mail.python.org/mailman/listinfo/python-list

   (2) 
https://mail.python.org/mailman3/lists/python-announce-list.python.org/


File: python.info,  Node: Como faço para obter uma versão de teste beta do Python?,  Next: Como eu envio um relatório de erros e correções para o Python?,  Prev: Existe um grupo de discussão ou lista de discussão dedicada ao Python?,  Up: Informações gerais

10.1.1.11 Como faço para obter uma versão de teste beta do Python?
..................................................................

As versões alfa e beta estão disponíveis em
‘https://www.python.org/downloads/’.  Todos os lançamentos são
anunciados nos grupos de notícias comp.lang.python e
comp.lang.python.announce e na página inicial do Python em
‘https://www.python.org/’; um feed RSS de notícias está disponível.

Você também pode acessar a versão de desenvolvimento do Python através
do Git.  Veja O Guia do Desenvolvedor Python(1) para detalhes.

   ---------- Footnotes ----------

   (1) https://devguide.python.org/


File: python.info,  Node: Como eu envio um relatório de erros e correções para o Python?,  Next: Existem alguns artigos publicados sobre o Python para que eu possa fazer referência?,  Prev: Como faço para obter uma versão de teste beta do Python?,  Up: Informações gerais

10.1.1.12 Como eu envio um relatório de erros e correções para o Python?
........................................................................

Para relatar um bug ou enviar um patch, use o rastreador de problemas em
‘https://github.com/python/cpython/issues’.

Para mais informações sobre como o Python é desenvolvido, consulte o
Guia do Desenvolvedor Python(1).

   ---------- Footnotes ----------

   (1) https://devguide.python.org/


File: python.info,  Node: Existem alguns artigos publicados sobre o Python para que eu possa fazer referência?,  Next: Existem alguns livros sobre o Python?,  Prev: Como eu envio um relatório de erros e correções para o Python?,  Up: Informações gerais

10.1.1.13 Existem alguns artigos publicados sobre o Python para que eu possa fazer referência?
..............................................................................................

Provavelmente será melhor citar o seu livro favorito sobre o Python.

O primeiro artigo(1) sobre Python foi escrito em 1991 e atualmente se
encontra bastante desatualizado.

     Guido van Rossum e Jelke de Boer, “Interactively Testing Remote
     Servers Using the Python Programming Language”, CWI Quarterly,
     Volume 4, Edição 4 (dezembro de 1991), Amsterdam, pp.  283–303.q

   ---------- Footnotes ----------

   (1) https://ir.cwi.nl/pub/18204


File: python.info,  Node: Existem alguns livros sobre o Python?,  Next: Onde está armazenado o site www python org?,  Prev: Existem alguns artigos publicados sobre o Python para que eu possa fazer referência?,  Up: Informações gerais

10.1.1.14 Existem alguns livros sobre o Python?
...............................................

Sim, há muitos publicados e muitos outros que estão sendo nesse momento
escritos!!  Veja o wiki python.org em
‘https://wiki.python.org/moin/PythonBooks’ para obter uma listagem.

Você também pode pesquisar livrarias online sobre “Python” e filtrar as
referências a respeito do Monty Python; ou talvez procure por “Python” e
“linguagem”.


File: python.info,  Node: Onde está armazenado o site www python org?,  Next: Por que o nome Python?,  Prev: Existem alguns livros sobre o Python?,  Up: Informações gerais

10.1.1.15 Onde está armazenado o site www.python.org?
.....................................................

A infraestrutura do projeto Python está localizada em todo o mundo e é
gerenciada pela equipe de infraestrutura do Python.  Detalhes aqui(1).

   ---------- Footnotes ----------

   (1) https://infra.psf.io


File: python.info,  Node: Por que o nome Python?,  Next: Eu tenho que gostar de “Monty Python’s Flying Circus”?,  Prev: Onde está armazenado o site www python org?,  Up: Informações gerais

10.1.1.16 Por que o nome Python?
................................

Quando o Guido van Rossum começou a implementar o Python, o mesmo também
estava lendo os scripts publicados do "Monty Python's Flying Circus"(1),
uma série de comédia da BBC da década de 1970.  Van Rossum pensou que
precisava de um nome curto, único e ligeiramente misterioso, então
resolveu chamar a sua linguagem de Python.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/Monty_Python


File: python.info,  Node: Eu tenho que gostar de “Monty Python’s Flying Circus”?,  Prev: Por que o nome Python?,  Up: Informações gerais

10.1.1.17 Eu tenho que gostar de “Monty Python’s Flying Circus”?
................................................................

Não, mas isso ajuda.  :)


File: python.info,  Node: Python no mundo real,  Prev: Informações gerais,  Up: Python Geral

10.1.2 Python no mundo real
---------------------------

* Menu:

* Quão estável é o Python?::
* Quantas pessoas usam o Python?::
* Existe algum projeto significativo feito em Python?::
* Quais são os novos desenvolvimentos esperados para o Python no futuro?::
* É razoável propor mudanças incompatíveis com o Python?::
* O Python é uma boa linguagem para quem está começando na programação agora?::


File: python.info,  Node: Quão estável é o Python?,  Next: Quantas pessoas usam o Python?,  Up: Python no mundo real

10.1.2.1 Quão estável é o Python?
.................................

Muito estável.  Novos lançamentos estáveis são divulgados
aproximadamente de 6 a 18 meses desde 1991, e isso provavelmente
continuará.  A partir da versão 3.9, o Python terá um novo grande
lançamento a cada 12 meses ( PEP 602(1)).

Os desenvolvedores lançam versões bugfix de versões mais antigas, então
a estabilidade dos lançamentos existentes melhora gradualmente.  As
liberações de correções de erros, indicadas por um terceiro componente
do número da versão (por exemplo, 3.5.3, 3.6.2), são gerenciadas para
estabilidade; somente correções para problemas conhecidos são incluídas
em uma versão de correções de erros, e é garantido que as interfaces
permanecerão as mesmas durante uma série de liberações de correções de
erros.

As últimas versões estáveis podem sempre ser encontradas na página de
download do Python(2).  O Python 3.x é a versão recomendada e suportada
pela maioria das bibliotecas amplamente utilizadas.  Python 2.x não é
mais mantido(3).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0602/

   (2) https://www.python.org/downloads/

   (3) https://peps.python.org/pep-0373/


File: python.info,  Node: Quantas pessoas usam o Python?,  Next: Existe algum projeto significativo feito em Python?,  Prev: Quão estável é o Python?,  Up: Python no mundo real

10.1.2.2 Quantas pessoas usam o Python?
.......................................

Provavelmente existem milhões de usuários, embora seja difícil obter uma
contagem exata.

O Python está disponível para download gratuito, portanto, não há
números de vendas, e o mesmo está disponível em vários diferentes sites
e é empacotado em muitas distribuições Linux, portanto, utilizar as
estatísticas de downloads não seria a melhor forma para contabilizarmos
a base de usuários.

O grupo de notícias comp.lang.python é bastante ativo, mas nem todos os
usuários Python postam no grupo ou mesmo o leem regularmente.


File: python.info,  Node: Existe algum projeto significativo feito em Python?,  Next: Quais são os novos desenvolvimentos esperados para o Python no futuro?,  Prev: Quantas pessoas usam o Python?,  Up: Python no mundo real

10.1.2.3 Existe algum projeto significativo feito em Python?
............................................................

Veja a lista em ‘https://www.python.org/about/success’ para obter uma
listagem de projetos que usam o Python.  Consultar as conferências
passadas do Python(1) revelará as contribuições de várias empresas e de
diferentes organizações.

Os projetos Python de alto perfil incluem o gerenciador de lista de
e-mail Mailman(2) e o servidor de aplicativos Zope(3).  Várias
distribuições Linux, mais notavelmente o Red Hat(4), escreveram parte ou
a totalidade dos seus instaladores e software de administração do
sistema em Python.  Empresas que usam Python internamente incluem
Google, Yahoo e Lucasfilm Ltd.

   ---------- Footnotes ----------

   (1) https://www.python.org/community/workshops/

   (2) https://www.list.org

   (3) https://www.zope.dev

   (4) https://www.redhat.com


File: python.info,  Node: Quais são os novos desenvolvimentos esperados para o Python no futuro?,  Next: É razoável propor mudanças incompatíveis com o Python?,  Prev: Existe algum projeto significativo feito em Python?,  Up: Python no mundo real

10.1.2.4 Quais são os novos desenvolvimentos esperados para o Python no futuro?
...............................................................................

Consulte ‘https://peps.python.org/’ para ver a lista de propostas de
aprimoramento do python (PEPs).  As PEPs são documentos de design que
descrevem novos recursos que foram sugeridos para o Python, fornecendo
uma especificação técnica concisa e a sua lógica.  Procure uma PEP
intitulado de “Python X.Y Release Schedule”, onde X.Y é uma versão que
ainda não foi lançada publicamente.

Novos desenvolvimentos são discutidos na lista de discussão
python-dev(1).

   ---------- Footnotes ----------

   (1) https://mail.python.org/mailman3/lists/python-dev.python.org/


File: python.info,  Node: É razoável propor mudanças incompatíveis com o Python?,  Next: O Python é uma boa linguagem para quem está começando na programação agora?,  Prev: Quais são os novos desenvolvimentos esperados para o Python no futuro?,  Up: Python no mundo real

10.1.2.5 É razoável propor mudanças incompatíveis com o Python?
...............................................................

Normalmente não.  Já existem milhões de linhas de código Python em todo
o mundo, de modo que qualquer alteração na linguagem que invalide mais
de uma fração muito pequena dos programas existentes deverá ser
desaprovada.  Mesmo que possamos fornecer um programa de conversão,
ainda haverá o problema de atualizar toda a documentação; muitos livros
foram escritos sobre o Python, e não queremos invalidá-los todos de uma
vez só.

Fornecer um caminho de atualização gradual será necessário se um recurso
precisar ser alterado.  A PEP 5(1) descreve o procedimento e em seguida
introduz alterações incompatíveis com versões anteriores ao mesmo tempo
em que minimiza a interrupção dos usuários.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0005/


File: python.info,  Node: O Python é uma boa linguagem para quem está começando na programação agora?,  Prev: É razoável propor mudanças incompatíveis com o Python?,  Up: Python no mundo real

10.1.2.6 O Python é uma boa linguagem para quem está começando na programação agora?
....................................................................................

Sim.

Ainda é bastante comum que os alunos iniciem com uma linguagem
procedimental e estaticamente tipada como Pascal e o C ou um subconjunto
do C++ ou do Java.  Os alunos podem ser melhor atendidos ao aprender
Python como sua primeira linguagem.  Python possui uma sintaxe muito
simples e consistente e uma grande quantidade de bibliotecas padrão e, o
mais importante, o uso do Python em um curso de programação para
iniciantes permite aos alunos se concentrarem em habilidades de
programação importantes, como a decomposição do problema e o design do
tipo de dados.  Com Python, os alunos podem ser introduzidos rapidamente
em conceitos básicos, como repetições e procedimentos.  Provavelmente os
mesmos até poderão trabalhar com objetos definidos por ele mesmos logo
em seu primeiro curso.

Para um aluno que nunca programou antes, usar uma linguagem
estaticamente tipado parece não que não é natural.  Isso apresenta uma
complexidade adicional que o aluno deverá dominar e geralmente retarda o
ritmo do curso.  Os alunos estão tentando aprender a pensar como um
computador, decompor problemas, projetar interfaces consistentes e
encapsular dados.  Embora aprender a usar uma linguagem tipicamente
estática seja importante a longo prazo, não é necessariamente o melhor
tópico a ser abordado no primeiro momento de um curso de programação.

Muitos outros aspectos do Python fazem do mesmo uma excelente linguagem
para quem está aprendendo a programar.  Como Java, Python possui uma
biblioteca padrão grande para que os estudantes possam receber projetos
de programação muito cedo no curso e que possam 'fazer' trabalhos úteis.
As atribuições não estão restritas à calculadora padrão de quatro
funções e os programas para verificar o peso.  Ao usar a biblioteca
padrão, os alunos podem ter a satisfação de trabalhar em aplicações
reais à medida que aprendem os fundamentos da programação.  O uso da
biblioteca padrão também ensina os alunos sobre a reutilização de
código.  Os módulos de terceiros, como o PyGame, também são úteis para
ampliar o alcance dos estudantes.

O interpretador interativo do Python permite aos alunos testarem
recursos da linguagem enquanto estão programando.  Os mesmos podem
manter uma janela com o interpretador executado enquanto digitam o fonte
do seu programa numa outra janela.  Se eles não conseguirem se lembrar
dos métodos de uma lista, eles podem fazer algo assim:

     >>> L = []
     >>> dir(L)
     ['__add__', '__class__', '__contains__', '__delattr__', '__delitem__',
     '__dir__', '__doc__', '__eq__', '__format__', '__ge__',
     '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__',
     '__imul__', '__init__', '__iter__', '__le__', '__len__', '__lt__',
     '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__',
     '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__',
     '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear',
     'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove',
     'reverse', 'sort']
     >>> [d for d in dir(L) if '__' not in d]
     ['append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort']

     >>> help(L.append)
     Help on built-in function append:

     append(...)
         L.append(object) -> None -- append object to end

     >>> L.append(1)
     >>> L
     [1]

Com o interpretador, a documentação nunca está longe do aluno quando
estão programando.

Há também boas IDEs para o Python.  O IDLE é uma IDE multiplataforma
para o Python e que foi escrito em Python usando o Tkinter.  Os usuários
do Emacs estarão felizes em saber que existe um ótimo modo Python para
Emacs.  Todos esses ambientes de programação fornecem destaque de
sintaxe, recuo automático e acesso ao interpretador interativo durante o
tempo de desenvolvimento.  Consulte o wiki do Python(1) para obter uma
lista completa dos ambientes de desenvolvimento para o Python.

Se você quiser discutir o uso do Python na educação, poderás estar
interessado em se juntar à lista de discussão edu-sig(2).

   ---------- Footnotes ----------

   (1) https://wiki.python.org/moin/PythonEditors

   (2) https://www.python.org/community/sigs/current/edu-sig


File: python.info,  Node: FAQ sobre programação,  Next: FAQ sobre design e histórico,  Prev: Python Geral,  Up: Perguntas Frequentes Sobre Python

10.2 FAQ sobre programação
==========================

* Menu:

* Perguntas gerais::
* Núcleo da linguagem::
* Números e strings::
* Desempenho: Desempenho<4>.
* Sequencias (Tuplas/Listas): Sequencias Tuplas/Listas.
* Objetos::
* Módulos: Módulos<5>.


File: python.info,  Node: Perguntas gerais,  Next: Núcleo da linguagem,  Up: FAQ sobre programação

10.2.1 Perguntas gerais
-----------------------

* Menu:

* Existe um depurador a nível de código-fonte que possua pontos de interrupção (breakpoints), single-stepping, etc.?: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?.
* Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?::
* Como posso criar um binário independente a partir de um script Python?::
* Existem padrões para a codificação ou um guia de estilo utilizado pela comunidade Python?::


File: python.info,  Node: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?,  Next: Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?,  Up: Perguntas gerais

10.2.1.1 Existe um depurador a nível de código-fonte que possua pontos de interrupção ('breakpoints'), single-stepping, etc.?
.............................................................................................................................

Sim.

Vários depuradores para Python estão descritos abaixo, e a função
embutida *note breakpoint(): 234. permite que você caia em qualquer um
desses pontos.

O módulo pdb é um depurador em modo Console simples, mas adequado, para
o Python.  Faz parte da biblioteca padrão do Python e está documentado
no *note manual de referencia da biblioteca: a5.  Você também pode
construir do seu próprio depurador usando o código do pdb como um
exemplo.

O IDLE é um ambiente interativo de desenvolvimento que faz parte da
distribuição padrão do Python (normalmente acessível como
Tools/scripts/idle3(1)), e inclui um depurador gráfico.

O PythonWin é uma IDE feita para o Python que inclui um depurador
gráfico baseado no pdb.  O depurador do PythonWin colore os pontos de
interrupção e tem alguns recursos legais, como a depuração de programas
que não são PythonWin.  O PythonWin está disponível como parte do
projeto pywin32(2) e como parte da distribuição ActivePython(3).

Eric(4) é uma IDE construída com PyQt e o componente de edição
Scintilla.

trepan3k(5) é um depurador similar ao gdb.

Visual Studio Code(6) é uma IDE com ferramentas de depuração integrada
com softwares de controle de versão.

Há uma série de IDE comerciais para desenvolvimento com o Python que
inclui depuradores gráficos.  Dentre tantas temos:

   * Wing IDE(7)

   * Komodo IDE(8)

   * PyCharm(9)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/blob/main/Tools/scripts/idle3

   (2) https://github.com/mhammond/pywin32

   (3) https://www.activestate.com/products/python/

   (4) https://eric-ide.python-projects.org/

   (5) https://github.com/rocky/python3-trepan/

   (6) https://code.visualstudio.com/

   (7) https://wingware.com/

   (8) https://www.activestate.com/products/komodo-ide/

   (9) https://www.jetbrains.com/pycharm/


File: python.info,  Node: Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?,  Next: Como posso criar um binário independente a partir de um script Python?,  Prev: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?,  Up: Perguntas gerais

10.2.1.2 Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?
..................................................................................................

Sim.

Pylint(1) e Pyflakes(2) fazem verificações básicas que te ajudarão a
encontrar erros mais cedo.

Verificadores de tipo estático como Mypy(3), Pyre(4) e Pytype(5)
conseguem verificar dicas de tipo em código-fonte Python.

   ---------- Footnotes ----------

   (1) https://pylint.pycqa.org/en/latest/index.html

   (2) https://github.com/PyCQA/pyflakes

   (3) https://mypy-lang.org/

   (4) https://pyre-check.org/

   (5) https://github.com/google/pytype


File: python.info,  Node: Como posso criar um binário independente a partir de um script Python?,  Next: Existem padrões para a codificação ou um guia de estilo utilizado pela comunidade Python?,  Prev: Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?,  Up: Perguntas gerais

10.2.1.3 Como posso criar um binário independente a partir de um script Python?
...............................................................................

Você não precisa possuir a capacidade de compilar o código Python para C
se o que deseja é um programa autônomo que os usuários possam baixar e
executar sem ter que instalar a distribuição Python primeiro.  Existem
várias ferramentas que determinam o conjunto de módulos exigidos por um
programa e vinculam esses módulos ao binário do Python para produzir um
único executável.

Uma delas é usar a ferramenta 'freeze', que está incluída na árvore de
código-fonte Python como Tools/freeze(1).  Ela converte o 'bytecode' de
Python em vetores de C. Com um compilador de C, você consegue incorporar
todos os seus módulos em um novo programa, que é então vinculado aos
módulos-padrão de Python.

A 'freeze' trabalha percorrendo seu código recursivamente, procurando
por instruções de importação (ambas as formas), e procurando por módulos
tanto no caminho padrão do Python, quanto por módulos embutidos no
diretório fonte.  Ela então transforma o 'bytecode' de módulos Python em
código C (inicializadores de vetor que podem ser transformados em
objetos código usando o módulo ‘marshal’), e depois cria um arquivo de
configurações personalizado que só contém os módulos embutidos usados no
programa.  A ferramenta então compila os códigos C e os vincula como o
resto do interpretador Python, formando um binário autônomo que funciona
exatamente como seu 'script'.

Os pacotes a seguir podem ajudar com a criação dos executáveis do
console e da GUI:

   * Nuitka(2) (Multiplataforma)

   * PyInstaller(3) (Multiplataforma)

   * PyOxidizer(4) (Multiplataforma)

   * cx_Freeze(5) (Multiplataforma)

   * py2app(6) (somente macOS)

   * py2exe(7) (somente Windows)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/main/Tools/freeze

   (2) https://nuitka.net/

   (3) https://pyinstaller.org/

   (4) https://pyoxidizer.readthedocs.io/en/stable/

   (5) https://marcelotduarte.github.io/cx_Freeze/

   (6) https://github.com/ronaldoussoren/py2app

   (7) https://www.py2exe.org/


File: python.info,  Node: Existem padrões para a codificação ou um guia de estilo utilizado pela comunidade Python?,  Prev: Como posso criar um binário independente a partir de um script Python?,  Up: Perguntas gerais

10.2.1.4 Existem padrões para a codificação ou um guia de estilo utilizado pela comunidade Python?
..................................................................................................

Sim.  O guia de estilo esperado para módulos e biblioteca padrão possui
o nome de PEP8 e você pode acessar a sua documentação em PEP 8(1).

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0008/


File: python.info,  Node: Núcleo da linguagem,  Next: Números e strings,  Prev: Perguntas gerais,  Up: FAQ sobre programação

10.2.2 Núcleo da linguagem
--------------------------

* Menu:

* Porque recebo o erro UnboundLocalError quando a variável possui um valor associado?::
* Quais são as regras para variáveis locais e globais em Python?::
* Por que os lambdas definidos em um laço com valores diferentes retornam o mesmo resultado?::
* Como definir variáveis globais dentro de módulos?::
* Quais são as “melhores práticas” quando fazemos uso da importação de módulos?::
* Por que os valores padrão são compartilhados entre objetos?::
* Como passo parâmetros opcionais ou parâmetros nomeados de uma função para outra?::
* Qual a diferença entre argumentos e parâmetros?::
* Por que ao alterar a lista ‘y’ também altera a lista ‘x’?::
* Como escrevo uma função com parâmetros de saída (chamada por referência)?: Como escrevo uma função com parâmetros de saída chamada por referência ?.
* Como fazer uma função de ordem superior em Python?::
* Como faço para copiar um objeto no Python?::
* Como posso encontrar os métodos ou atributos de um objeto?::
* Como que o meu código pode descobrir o nome de um objeto?::
* O que há com a precedência do operador vírgula?::
* Existe um equivalente ao operador ternário “?;” do C?: Existe um equivalente ao operador ternário “? ” do C?.
* É possível escrever instruções de uma só linha ofuscadas em Python?::
* O que a barra(/) na lista de parâmetros de uma função significa?: O que a barra / na lista de parâmetros de uma função significa?.


File: python.info,  Node: Porque recebo o erro UnboundLocalError quando a variável possui um valor associado?,  Next: Quais são as regras para variáveis locais e globais em Python?,  Up: Núcleo da linguagem

10.2.2.1 Porque recebo o erro UnboundLocalError quando a variável possui um valor associado?
............................................................................................

Pode ser uma surpresa obter a exceção *note UnboundLocalError: 157f. em
um código previamente funcional quando adicionamos uma instrução de
atribuição em algum lugar no corpo de uma função.

Este código:

     >>> x = 10
     >>> def bar():
     ...     print(x)
     ...
     >>> bar()
     10

funciona, mas este código:

     >>> x = 10
     >>> def foo():
     ...     print(x)
     ...     x += 1

resulta em uma ‘UnboundLocalError’:

     >>> foo()
     Traceback (most recent call last):
       ...
     UnboundLocalError: local variable 'x' referenced before assignment

Isso acontece porque, quando atribuímos um valor a uma variável em
determinado escopo, essa variável torna-se local desse escopo, acabando
por esconder qualquer outra variável de mesmo nome no escopo externo.
Como a última instrução em foo atribui um novo valor a ‘x’, o
interpretador a reconhece como uma variável local.  Consequentemente,
quando o ‘print(x)’ anterior tentar exibir a variável local não
inicializada, um erro aparece.

No exemplo acima, podemos acessar a variável do escopo externo
declarando-a como global:

     >>> x = 10
     >>> def foobar():
     ...     global x
     ...     print(x)
     ...     x += 1
     ...
     >>> foobar()
     10

Esta declaração explícita é necessária para lembrarmos que estamos
modificando o valor da variável no escopo externo (ao contrário da
situação superficialmente análoga com variáveis de classe e instância):

     >>> print(x)
     11

Podemos fazer algo parecido num escopo aninhado usando a palavra
reservada *note nonlocal: 12ea.:

     >>> def foo():
     ...    x = 10
     ...    def bar():
     ...        nonlocal x
     ...        print(x)
     ...        x += 1
     ...    bar()
     ...    print(x)
     ...
     >>> foo()
     10
     11


File: python.info,  Node: Quais são as regras para variáveis locais e globais em Python?,  Next: Por que os lambdas definidos em um laço com valores diferentes retornam o mesmo resultado?,  Prev: Porque recebo o erro UnboundLocalError quando a variável possui um valor associado?,  Up: Núcleo da linguagem

10.2.2.2 Quais são as regras para variáveis locais e globais em Python?
.......................................................................

Em Python, as variáveis que são apenas utilizadas (referenciadas) dentro
de uma função são implicitamente globais.  Se uma variável for associada
a um valor em qualquer lugar dentro do corpo da função, presume-se que a
mesma seja local, a menos que seja explicitamente declarada como global.

Embora um pouco surpreendente no início, um momento de consideração
explica isso.  Por um lado, exigir *note global: 18a. para variáveis
atribuídas fornece uma barreira contra efeitos colaterais indesejados.
Por outro lado, se ‘global’ fosse necessário para todas as referências
globais, você estaria usando ‘global’ o tempo todo.  Você teria que
declarar como global todas as referências a uma função embutida ou a um
componente de um módulo importado.  Essa desordem anularia a utilidade
da declaração de ‘global’ para identificar efeitos colaterais.


File: python.info,  Node: Por que os lambdas definidos em um laço com valores diferentes retornam o mesmo resultado?,  Next: Como definir variáveis globais dentro de módulos?,  Prev: Quais são as regras para variáveis locais e globais em Python?,  Up: Núcleo da linguagem

10.2.2.3 Por que os lambdas definidos em um laço com valores diferentes retornam o mesmo resultado?
...................................................................................................

Suponha que se utilize um laço ‘for’ para definir algumas funções
lambdas (ou mesmo funções simples), por exemplo.:

     >>> squares = []
     >>> for x in range(5):
     ...     squares.append(lambda: x**2)

Isso oferece uma lista que contém 5 lambdas que calculam ‘x**2’.  Você
pensar que, quando invocado, os mesmos retornam, respectivamente, ‘0’,
‘1’, ‘4’, ‘9’, e ‘16’.  No entanto, quando realmente tentar, vai ver que
todos retornam ‘16’:

     >>> squares[2]()
     16
     >>> squares[4]()
     16

Isso acontece porque ‘x’ não é local para os lambdas, mas é definido no
escopo externo, e é acessado quando o lambda for chamado — não quando é
definido.  No final do laço, o valor de ‘x’ será ‘4’, e então, todas as
funções agora retornarão ‘4**2’, ou seja, ‘16’.  Também é possível
verificar isso alterando o valor de ‘x’ e vendo como os resultados dos
lambdas mudam:

     >>> x = 8
     >>> squares[2]()
     64

Para evitar isso, é necessário salvar os valores nas variáveis locais
para os lambdas, para que eles não dependam do valor de ‘x’ global:

     >>> squares = []
     >>> for x in range(5):
     ...     squares.append(lambda n=x: n**2)

Aqui, ‘n=x’ cria uma nova variável ‘n’ local para o lambda e é calculada
quando o lambda é definido para que ele tenha o mesmo valor que ‘x’ tem
nesse ponto no laço.  Isso significa que o valor de ‘n’ será ‘0’ no
primeiro “ciclo” do lambda, ‘1’ no segundo “ciclo”, ‘2’ no terceiro, e
assim por diante.  Portanto, cada lambda agora retornará o resultado
correto:

     >>> squares[2]()
     4
     >>> squares[4]()
     16

Observe que esse comportamento não é peculiar dos lambdas, o mesmo
também ocorre com as funções regulares.


File: python.info,  Node: Como definir variáveis globais dentro de módulos?,  Next: Quais são as “melhores práticas” quando fazemos uso da importação de módulos?,  Prev: Por que os lambdas definidos em um laço com valores diferentes retornam o mesmo resultado?,  Up: Núcleo da linguagem

10.2.2.4 Como definir variáveis globais dentro de módulos?
..........................................................

A maneira canônica de compartilhar informações entre módulos dentro de
um único programa é criando um módulo especial (geralmente chamado de
config ou cfg).  Basta importar o módulo de configuração em todos os
módulos da sua aplicação; o módulo ficará disponível como um nome
global.  Como há apenas uma instância de cada módulo, todas as
alterações feitas no objeto do módulo se refletem em todos os lugares.
Por exemplo:

config.py:

     x = 0   # Valor padrão para a configuração de 'x'

mod.py:

     import config
     config.x = 1

main.py:

     import config
     import mod
     print(config.x)

Note que usar um módulo também é a base para a implementação do padrão
de projeto Singleton, pela mesma razão.


File: python.info,  Node: Quais são as “melhores práticas” quando fazemos uso da importação de módulos?,  Next: Por que os valores padrão são compartilhados entre objetos?,  Prev: Como definir variáveis globais dentro de módulos?,  Up: Núcleo da linguagem

10.2.2.5 Quais são as “melhores práticas” quando fazemos uso da importação de módulos?
......................................................................................

Em geral, não use ‘from nomemódulo import *’.  Isso desorganiza o espaço
de nomes do importador e torna muito mais difícil para as ferramentas de
análise estática detectarem nomes indefinidos.

Faça a importação de módulos na parte superior do arquivo.  Isso deixa
claro quais outros módulos nosso código necessita e evita dúvidas sobre,
por exemplo, se o nome do módulo está no escopo.  Usar uma importação
por linha facilita a adição e exclusão de importações de módulos, porém,
usar várias importações num única linha, ocupa menos espaço da tela.

É uma boa prática importar os módulos na seguinte ordem:

  1. módulos da biblioteca padrão – por exemplo: *note sys: d9, *note
     os: a1, *note argparse: 6. e *note re: b9.

  2. módulos de biblioteca de terceiros (qualquer instalação feita
     contida no repositório de códigos na pasta site-packages) – por
     exemplo: ‘dateutil’, ‘requests’ e ‘PIL.Image’

  3. módulos desenvolvidos localmente

Às vezes, é necessário transferir as importações para uma função ou
classe para evitar problemas com importação circular.  Gordon McMillan
diz:

     As importações circulares vão bem onde ambos os módulos utilizam a
     forma de importação “import <módulo>”.  Elas falham quando o 2º
     módulo quer pegar um nome do primeiro (“from módulo import nome”) e
     a importação está no nível superior.  Isso porque os nomes no
     primeiro ainda não estão disponíveis, porque o 1º módulo está
     ocupado importando o 2º.

Nesse caso, se o segundo módulo for usado apenas numa função, a
importação pode ser facilmente movida para dentro do escopo dessa
função.  No momento em que a importação for chamada, o primeiro módulo
terá finalizado a inicialização e o segundo módulo poderá ser importado
sem maiores complicações.

Também poderá ser necessário mover as importações para fora do nível
superior do código se alguns dos módulos forem específicos de uma
determinada plataforma (SO). Nesse caso, talvez nem seja possível
importar todos os módulos na parte superior do arquivo.  Nessas
situações devemos importar os módulos que são específicos de cada
plataforma antes de necessitar utilizar os mesmos.

Apenas mova as importações para um escopo local, como dentro da
definição de função, se for necessário resolver algum tipo de problema,
como, por exemplo, evitar importações circulares ou tentar reduzir o
tempo de inicialização do módulo.  Esta técnica é especialmente útil se
muitas das importações forem desnecessárias, dependendo de como o
programa é executado.  Também podemos desejar mover as importações para
uma função se os módulos forem usados somente nessa função.  Note que
carregar um módulo pela primeira vez pode ser demorado devido ao tempo
de inicialização de cada módulo, no entanto, carregar um módulo várias
vezes é praticamente imperceptível, tendo somente o custo de
processamento de pesquisas no dicionário de nomes.  Mesmo que o nome do
módulo tenha saído do escopo, o módulo provavelmente estará disponível
em *note sys.modules: 1636.


File: python.info,  Node: Por que os valores padrão são compartilhados entre objetos?,  Next: Como passo parâmetros opcionais ou parâmetros nomeados de uma função para outra?,  Prev: Quais são as “melhores práticas” quando fazemos uso da importação de módulos?,  Up: Núcleo da linguagem

10.2.2.6 Por que os valores padrão são compartilhados entre objetos?
....................................................................

Este tipo de erro geralmente pega programadores neófitos.  Considere
esta função:

     def foo(meudict={}):  # Perigo: referência compartilhada a um dicionário para todas as chamadas
         ... faz alguma coisa ...
         meudict[chave] = valor
         return meudict

Na primeira vez que chamar essa função, ‘meudict’ vai conter um único
item.  Na segunda vez, ‘meudict’ vai conter dois itens porque, quando
‘foo()’ começar a ser executado, ‘meudict’ começará com um item já
existente.

Muitas vezes, espera-se que ao invocar uma função sejam criados novos
objetos referente aos valores padrão.  Isso não é o que acontece.  Os
valores padrão são criados exatamente uma vez, quando a função está
sendo definida.  Se esse objeto for alterado, como o dicionário neste
exemplo, as chamadas subsequentes para a essa função se referirão a este
objeto alterado.

Por definição, objetos imutáveis, como números, strings, tuplas e o
‘None’, estão protegidos de sofrerem alteração.  Alterações em objetos
mutáveis, como dicionários, listas e instâncias de classe, podem levar à
confusão.

Por causa desse recurso, é uma boa prática de programação para evitar o
uso de objetos mutáveis contendo valores padrão.  Em vez disso, utilize
‘None’ como o valor padrão e dentro da função, verifique se o parâmetro
é ‘None’ e crie uma nova lista, dicionário ou o que quer que seja.  Por
exemplo, escreva o seguinte código:

     def foo(meudict={}):
         ...

mas:

     def foo(meudict=None):
         if meudict is None:
             meudict = {}  # cria um novo dicionário para o espaço de nomes local

Esse recurso pode ser útil.  Quando se tem uma função que consome muito
tempo para calcular, uma técnica comum é armazenar em cache os
parâmetros e o valor resultante de cada chamada para a função e retornar
o valor em cache se o mesmo valor for solicitado novamente.  Isso se
chama “memoizar”, e pode ser implementado da seguinte forma:

     # Chamadores só podem fornecer dois parâmetros e opcionalmente passar _cache como parâmetro nomeado
     def expensive(arg1, arg2, *, _cache={}):
         if (arg1, arg2) in _cache:
             return _cache[(arg1, arg2)]

         # Cacula o valor
         result = ... cálculo custoso ...
         _cache[(arg1, arg2)] = result           # Armazena o resultado no cache
         return result

Pode-se usar uma variável global contendo um dicionário ao invés do
valor padrão; isso é uma questão de gosto.


File: python.info,  Node: Como passo parâmetros opcionais ou parâmetros nomeados de uma função para outra?,  Next: Qual a diferença entre argumentos e parâmetros?,  Prev: Por que os valores padrão são compartilhados entre objetos?,  Up: Núcleo da linguagem

10.2.2.7 Como passo parâmetros opcionais ou parâmetros nomeados de uma função para outra?
.........................................................................................

Colete os argumentos usando os especificadores ‘*’ ou ‘**’ na lista de
parâmetros da função.  Isso faz com que os argumentos posicionais como
tupla e os argumentos nomeados sejam passados como um dicionário.  Você
pode, também, passar esses argumentos ao invocar outra função usando ‘*’
e ‘**’:

     def f(x, *args, **kwargs):
         ...
         kwargs['width'] = '14.3c'
         ...
         g(x, *args, **kwargs)


File: python.info,  Node: Qual a diferença entre argumentos e parâmetros?,  Next: Por que ao alterar a lista ‘y’ também altera a lista ‘x’?,  Prev: Como passo parâmetros opcionais ou parâmetros nomeados de uma função para outra?,  Up: Núcleo da linguagem

10.2.2.8 Qual a diferença entre argumentos e parâmetros?
........................................................

*note Parâmetros: 208f. são definidos pelos nomes que aparecem na
definição da função, enquanto *note argumentos: 449. são os valores que
serão passados para a função no momento em que esta estiver sendo
invocada.  Os parâmetros irão definir quais os *note tipos de
argumentos: 208f. que uma função pode receber.  Por exemplo, dada a
definição da função:

     def func(foo, bar=None, **kwargs):
         pass

'foo', 'bar' e 'kwargs' são parâmetros de ‘func’.  Dessa forma, ao
invocar ‘func’, por exemplo:

     func(42, bar=314, extra=algumvalor)

os valores ‘42’, ‘314’, e ‘algumvalor’ são os argumentos.


File: python.info,  Node: Por que ao alterar a lista ‘y’ também altera a lista ‘x’?,  Next: Como escrevo uma função com parâmetros de saída chamada por referência ?,  Prev: Qual a diferença entre argumentos e parâmetros?,  Up: Núcleo da linguagem

10.2.2.9 Por que ao alterar a lista ‘y’ também altera a lista ‘x’?
..................................................................

Se você escreveu um código como:

     >>> x = []
     >>> y = x
     >>> y.append(10)
     >>> y
     [10]
     >>> x
     [10]

pode estar se perguntando por que acrescentar um elemento a ‘y’ também
mudou ‘x’.

Há dois fatores que produzem esse resultado:

  1. As variáveis são simplesmente nomes que referem-se a objetos.  Usar
     ‘y = x’ não cria uma cópia da lista.  Isso cria uma nova variável
     ‘y’ que faz referência ao mesmo objeto ao qual ‘x’ está se
     referindo.  Isso significa que existe apenas um objeto (a lista) e
     que ambos ‘x’ e ‘y’ fazem referência a ele.

  2. Listas são objetos *note mutáveis: 1d7e, o que significa que você
     pode alterar o seu conteúdo.

Após a chamada para *note append(): 2118, o conteúdo do objeto mutável
mudou de ‘[]’ para ‘[10]’.  Uma vez que ambas as variáveis referem-se ao
mesmo objeto, usar qualquer um dos nomes acessará o valor modificado
‘[10]’.

Se por acaso, atribuímos um objeto imutável a ‘x’:

     >>> x = 5  # ints são imutáveis
     >>> y = x
     >>> x = x + 1  # 5 não pode ser mutado, estamos criando um novo objeto aqui
     >>> x
     6
     >>> y
     5

podemos ver que nesse caso ‘x’ e ‘y’ não são mais iguais.  Isso ocorre
porque os números inteiros são *note imutáveis: 1d79, e quando fazemos
‘x = x + 1’ não estamos mudando o int ‘5’ e incrementando o seu valor.
Em vez disso, estamos criando um novo objeto (o int ‘6’) e atribuindo-o
a ‘x’ (isto é, mudando para o objeto no qual ‘x’ se refere).  Após esta
atribuição, temos dois objetos (os ints ‘6’ e ‘5’) e duas variáveis que
referem-se a elas (‘x’ agora se refere a ‘6’, mas ‘y’ ainda refere-se a
‘5’).

Algumas operações (por exemplo, ‘y.append(10)’ e ‘y.sort()’) alteram o
objeto, enquanto operações superficialmente semelhantes (por exemplo, ‘y
= y + [10]’ e *note sorted(y): be7.) criam um novo objeto.  Em geral, em
Python (e em todos os casos na biblioteca padrão) um método que causa
mutação em um objeto retornará ‘None’ para ajudar a evitar confundir os
dois tipos de operações.  Portanto, se você escrever por engano
‘y.sort()’ pensando que lhe dará uma cópia ordenada de ‘y’, você
terminará com ‘None’, o que provavelmente fará com que seu programa gere
um erro facilmente diagnosticado.

No entanto, há uma classe de operações em que a mesma operação às vezes
tem comportamentos diferentes com tipos diferentes: os operadores de
atribuição aumentada.  Por exemplo, ‘+=’ transforma listas, mas não
tuplas ou ints (‘uma_lista += [1, 2, 3]’ equivale a
‘uma_lista.extend([1, 2, 3])’ a transforma ‘uma_lista’, sendo que
‘alguma_tupla += (1, 2, 3)’ e ‘algum_int += 1’ cria novos objetos).

Em outras palavras:

   * Se tivermos um objeto mutável (*note list: 611, *note dict: 256,
     *note set: 5d9, etc.), podemos usar algumas operações específicas
     para alterá-lo e todas as variáveis que fazem referência a ele
     verão também a mudança.

   * Caso tenhamos um objeto imutável (*note str: 44c, *note int: 257,
     *note tuple: 370, etc.), todas as variáveis que se referem a ele
     sempre verão o mesmo valor, mas as operações que transformam-se
     nesses valores sempre retornarão novos objetos.

Caso queira saber se duas variáveis fazem referência ao mesmo objeto ou
não, pode-se usar o operador *note is: 2f5. ou a função embutida *note
id(): 146a.


File: python.info,  Node: Como escrevo uma função com parâmetros de saída chamada por referência ?,  Next: Como fazer uma função de ordem superior em Python?,  Prev: Por que ao alterar a lista ‘y’ também altera a lista ‘x’?,  Up: Núcleo da linguagem

10.2.2.10 Como escrevo uma função com parâmetros de saída (chamada por referência)?
...................................................................................

Lembre-se de que os argumentos são passados por atribuição em Python.
Uma vez que a atribuição apenas cria referências a objetos, não existe
apelido entre um nome de argumento no chamador e no chamado e, portanto,
não há referência de chamada por si.  É possível alcançar o efeito
desejado de várias maneiras.

  1. Retornando um tupla com os resultados:

          >>> def func1(a, b):
          ...     a = 'valor-novo'       # a e b são nomes locais
          ...     b = b + 1              # atribuídos a novos objetos
          ...     return a, b            # retorna novos valores
          ...
          >>> x, y = 'valor-antigo', 99
          >>> func1(x, y)
          ('valor-novo', 100)

     Esta é quase sempre a solução mais clara.

  2. Utilizando variáveis globais.  Essa forma não é segura para thread
     e, portanto, não é recomendada.

  3. Pela passagem de um objeto mutável (que possa ser alterado
     internamente):

          >>> def func2(a):
          ...     a[0] = 'valor-novo'    # 'a' referencia uma lista mutável
          ...     a[1] = a[1] + 1        # altera um objeto compartilhado
          ...
          >>> args = ['valor-antigo', 99]
          >>> func2(args)
          >>> args
          ['valor-novo', 100]

  4. Pela passagem de um dicionário que sofra mutação:

          >>> def func3(args):
          ...     args['a'] = 'valor-novo'     # args é um dicionário mutável
          ...     args['b'] = args['b'] + 1   # alteração local, nele mesmo
          ...
          >>> args = {'a': 'valor-antigo', 'b': 99}
          >>> func3(args)
          >>> args
          {'a': 'valor-novo', 'b': 100}

  5. Ou agrupando valores numa instância de classe:

          >>> class Namespace:
          ...     def __init__(self, /, **args):
          ...         for key, value in args.items():
          ...             setattr(self, key, value)
          ...
          >>> def func4(args):
          ...     args.a = 'valor-novo'        # args é um Namespace mutável
          ...     args.b = args.b + 1         # alteração local do objeto, nele mesmo
          ...
          >>> args = Namespace(a='valor-antigo', b=99)
          >>> func4(args)
          >>> vars(args)
          {'a': 'valor-novo', 'b': 100}

     Quase nunca existe uma boa razão para complicar isso.

A sua melhor escolha será retornar uma tupla contendo os múltiplos
resultados.


File: python.info,  Node: Como fazer uma função de ordem superior em Python?,  Next: Como faço para copiar um objeto no Python?,  Prev: Como escrevo uma função com parâmetros de saída chamada por referência ?,  Up: Núcleo da linguagem

10.2.2.11 Como fazer uma função de ordem superior em Python?
............................................................

Existem duas opções: pode-se usar escopos aninhados ou usar objetos
chamáveis.  Por exemplo, suponha que queira definir ‘linear(a,b)’, o
qual retorna uma função ‘f(x)’ que calcula o valor ‘a*x+b’.  Usando
escopos aninhados, temos:

     def linear(a, b):
         def result(x):
             return a * x + b
         return result

Ou utilizando um objeto chamável:

     class linear:

         def __init__(self, a, b):
             self.a, self.b = a, b

         def __call__(self, x):
             return self.a * x + self.b

Em ambos os casos:

     taxas = linear(0.3, 2)

resulta em um objeto chamável, onde ‘taxes(10e6) == 0.3 * 10e6 + 2’.

A abordagem do objeto chamável tem a desvantagem de que é um pouco mais
lenta e resulta num código ligeiramente mais longo.  No entanto, note
que uma coleção de chamáveis pode compartilhar sua assinatura via
herança:

     class exponential(linear):
         # __init__ herdado
         def __call__(self, x):
             return self.a * (x ** self.b)

Objetos podem encapsular o estado para vários métodos:

     class counter:

         value = 0

         def set(self, x):
             self.value = x

         def up(self):
             self.value = self.value + 1

         def down(self):
             self.value = self.value - 1

     count = counter()
     inc, dec, reset = count.up, count.down, count.set

Aqui ‘inc()’, ‘dec()’ e ‘reset()’ funcionam como funções que
compartilham a mesma variável contadora.


File: python.info,  Node: Como faço para copiar um objeto no Python?,  Next: Como posso encontrar os métodos ou atributos de um objeto?,  Prev: Como fazer uma função de ordem superior em Python?,  Up: Núcleo da linguagem

10.2.2.12 Como faço para copiar um objeto no Python?
....................................................

Basicamente, tente utilizar a função *note copy.copy(): 534. ou a função
*note copy.deepcopy(): b84. para casos gerais.  Nem todos os objetos
podem ser copiados, mas a maioria poderá.

Alguns objetos podem ser copiados com mais facilidade.  Os dicionários
têm um método *note copy(): be9.:

     novodict = antigodict.copy()

As sequências podem ser copiadas através do uso de fatiamento:

     nova_l = l[:]


File: python.info,  Node: Como posso encontrar os métodos ou atributos de um objeto?,  Next: Como que o meu código pode descobrir o nome de um objeto?,  Prev: Como faço para copiar um objeto no Python?,  Up: Núcleo da linguagem

10.2.2.13 Como posso encontrar os métodos ou atributos de um objeto?
....................................................................

Para uma instância ‘x’ de uma classe definida pelo usuário, *note
dir(x): 632. retorna uma lista organizada alfabeticamente dos nomes
contidos, os atributos da instância e os métodos e atributos definidos
por sua classe.


File: python.info,  Node: Como que o meu código pode descobrir o nome de um objeto?,  Next: O que há com a precedência do operador vírgula?,  Prev: Como posso encontrar os métodos ou atributos de um objeto?,  Up: Núcleo da linguagem

10.2.2.14 Como que o meu código pode descobrir o nome de um objeto?
...................................................................

De um modo geral, não pode, porque os objetos realmente não têm nomes.
Essencialmente, a atribuição sempre liga um nome a um valor; o mesmo é
verdade para as instruções ‘def’ e ‘class’, mas nesse caso o valor é um
chamável.  Considere o seguinte código:

     >>> class A:
     ...     pass
     ...
     >>> B = A
     >>> a = B()
     >>> b = a
     >>> print(b)
     <__main__.A object at 0x16D07CC>
     >>> print(a)
     <__main__.A object at 0x16D07CC>

Provavelmente, a classe tem um nome: mesmo que seja vinculada a dois
nomes e invocada através do nome ‘B’, a instância criada ainda é
relatada como uma instância da classe ‘A’.  No entanto, é impossível
dizer se o nome da instância é ‘a’ ou ‘b’, uma vez que ambos os nomes
estão vinculados ao mesmo valor.

De um modo geral, não deveria ser necessário que o seu código “conheça
os nomes” de valores específicos.  A menos que se escreva
deliberadamente programas introspectivos, isso geralmente é uma
indicação de que uma mudança de abordagem pode ser benéfica.

Em comp.lang.python, Fredrik Lundh deu uma excelente analogia em
resposta a esta pergunta:

     Da mesma forma que você pega o nome daquele gato que encontrou na
     sua varanda: o próprio gato (objeto) não pode lhe dizer o seu nome,
     e ele realmente não se importa – então, a única maneira de
     descobrir como ele se chama é perguntar a todos os seus vizinhos
     (espaços de nomes) se é o gato deles (objeto)…

     ….e não fique surpreso se você descobrir que é conhecido por muitos
     nomes, ou até mesmo nenhum nome.


File: python.info,  Node: O que há com a precedência do operador vírgula?,  Next: Existe um equivalente ao operador ternário “? ” do C?,  Prev: Como que o meu código pode descobrir o nome de um objeto?,  Up: Núcleo da linguagem

10.2.2.15 O que há com a precedência do operador vírgula?
.........................................................

A vírgula não é um operador em Python.  Considere este código:

     >>> "a" in "b", "a"
     (False, 'a')

Uma vez que a vírgula não seja um operador, mas um separador entre as
expressões acima, o código será avaliado como se tivéssemos entrado:

     ("a" in "b"), "a"

não:

     "a" in ("b", "a")

O mesmo é verdade para as várias operações de atribuição (‘=’, ‘+=’
etc).  Eles não são operadores de verdade mas delimitadores sintáticos
em instruções de atribuição.


File: python.info,  Node: Existe um equivalente ao operador ternário “? ” do C?,  Next: É possível escrever instruções de uma só linha ofuscadas em Python?,  Prev: O que há com a precedência do operador vírgula?,  Up: Núcleo da linguagem

10.2.2.16 Existe um equivalente ao operador ternário “?:” do C?
...............................................................

Sim, existe.  A sintaxe é a seguinte:

     [quando_verdadeiro] if [expressão] else [quando_falso]

     x, y = 50, 25
     small = x if x < y else y

Antes que essa sintaxe fosse introduzida no Python 2.5, uma expressão
comum era usar operadores lógicos:

     [expressão] and [quando_verdadeiro] or [quando_falso]

No entanto, essa forma não é segura, pois pode dar resultados
inesperados quando 'quando_verdadeiro' tiver um valor booleano falso.
Portanto, é sempre melhor usar a forma ‘... if ... else ...’.


File: python.info,  Node: É possível escrever instruções de uma só linha ofuscadas em Python?,  Next: O que a barra / na lista de parâmetros de uma função significa?,  Prev: Existe um equivalente ao operador ternário “? ” do C?,  Up: Núcleo da linguagem

10.2.2.17 É possível escrever instruções de uma só linha ofuscadas em Python?
.............................................................................

Sim.  Normalmente, isso é feito aninhando *note lambda: 12df. dentro de
‘lambda’.  Veja os três exemplos a seguir, ligeiramente adaptados de Ulf
Bartelt:

     from functools import reduce

     # Primos < 1000
     print(list(filter(None,map(lambda y:y*reduce(lambda x,y:x*y!=0,
     map(lambda x,y=y:y%x,range(2,int(pow(y,0.5)+1))),1),range(2,1000)))))

     # Primeiros 10 números de Fibonacci
     print(list(map(lambda x,f=lambda x,f:(f(x-1,f)+f(x-2,f)) if x>1 else 1:
     f(x,f), range(10))))

     # Conjunto de Mandelbrot
     print((lambda Ru,Ro,Iu,Io,IM,Sx,Sy:reduce(lambda x,y:x+'\n'+y,map(lambda y,
     Iu=Iu,Io=Io,Ru=Ru,Ro=Ro,Sy=Sy,L=lambda yc,Iu=Iu,Io=Io,Ru=Ru,Ro=Ro,i=IM,
     Sx=Sx,Sy=Sy:reduce(lambda x,y:x+y,map(lambda x,xc=Ru,yc=yc,Ru=Ru,Ro=Ro,
     i=i,Sx=Sx,F=lambda xc,yc,x,y,k,f=lambda xc,yc,x,y,k,f:(k<=0)or (x*x+y*y
     >=4.0) or 1+f(xc,yc,x*x-y*y+xc,2.0*x*y+yc,k-1,f):f(xc,yc,x,y,k,f):chr(
     64+F(Ru+x*(Ro-Ru)/Sx,yc,0,0,i)),range(Sx))):L(Iu+y*(Io-Iu)/Sy),range(Sy
     ))))(-2.1, 0.7, -1.2, 1.2, 30, 80, 24))
     #    \___ ___/  \___ ___/  |   |   |__ linhas na tela
     #        V          V      |   |______ colunas na tela
     #        |          |      |__________ máximo de "interações"
     #        |          |_________________ faixa no eixo y
     #        |____________________________ faixa no eixo x

Não tente isso em casa, crianças!


File: python.info,  Node: O que a barra / na lista de parâmetros de uma função significa?,  Prev: É possível escrever instruções de uma só linha ofuscadas em Python?,  Up: Núcleo da linguagem

10.2.2.18 O que a barra(/) na lista de parâmetros de uma função significa?
..........................................................................

Uma barra na lista de argumentos de uma função indica que os parâmetros
anteriores a ela são somente-posicionais.  Os parâmetros
somente-posicionais são aqueles que não têm nome utilizável
externamente.  Ao chamar uma função que aceita parâmetros
somente-posicionais, os argumentos são mapeados para parâmetros com base
apenas em sua posição.  Por exemplo, *note divmod(): 9a9. é uma função
que aceita parâmetros somente-posicionais.  Sua documentação tem esta
forma:

     >>> help(divmod)
     Help on built-in function divmod in module builtins:

     divmod(x, y, /)
         Return the tuple (x//y, x%y).  Invariant: div*y + mod == x.

A barra no final da lista de parâmetros significa que ambos os
parâmetros são somente-posicionais.  Assim, chamar *note divmod(): 9a9.
com argumentos nomeados levaria a um erro:

     >>> divmod(x=3, y=4)
     Traceback (most recent call last):
       File "<stdin>", line 1, in <module>
     TypeError: divmod() takes no keyword arguments


File: python.info,  Node: Números e strings,  Next: Desempenho<4>,  Prev: Núcleo da linguagem,  Up: FAQ sobre programação

10.2.3 Números e strings
------------------------

* Menu:

* Como faço para especificar números inteiros hexadecimais e octais?::
* Por que -22 // 10 retorna -3?::
* Como obtenho um atributo de um literal int em vez de SyntaxError?::
* Como faço para converter uma string em um número?::
* Como faço para converter um número em uma string?::
* Como faço para modificar uma string internamente?::
* Como faço para invocar funções/métodos através de strings?::
* Existe um equivalente em Perl chomp() para remover linhas novas ao final de strings?: Existe um equivalente em Perl chomp para remover linhas novas ao final de strings?.
* Existe uma função scanf() ou sscanf() ou algo equivalente?: Existe uma função scanf ou sscanf ou algo equivalente?.
* O que significa o erro UnicodeDecodeError ou UnicodeEncodeError?::
* Posso terminar uma string bruta com um número ímpar de contrabarras?::


File: python.info,  Node: Como faço para especificar números inteiros hexadecimais e octais?,  Next: Por que -22 // 10 retorna -3?,  Up: Números e strings

10.2.3.1 Como faço para especificar números inteiros hexadecimais e octais?
...........................................................................

Para especificar um dígito no formato octal, preceda o valor octal com
um zero e, em seguida, um “o” minúsculo ou maiúsculo.  Por exemplo, para
definir a variável “a” para o valor octal “10” (8 em decimal), digite:

     >>> a = 0o10
     >>> a
     8

Hexadecimal é bem fácil.  Basta preceder o número hexadecimal com um
zero e, em seguida, um “x” minúsculo ou maiúsculo.  Os dígitos
hexadecimais podem ser especificados em letras maiúsculas e minúsculas.
Por exemplo, no interpretador Python:

     >>> a = 0xa5
     >>> a
     165
     >>> b = 0XB2
     >>> b
     178


File: python.info,  Node: Por que -22 // 10 retorna -3?,  Next: Como obtenho um atributo de um literal int em vez de SyntaxError?,  Prev: Como faço para especificar números inteiros hexadecimais e octais?,  Up: Números e strings

10.2.3.2 Por que -22 // 10 retorna -3?
......................................

Esta dúvida é primariamente direcionado pelo desejo de que ‘i % j’ tenha
o mesmo sinal que ‘j’.  Se quiser isso, e também quiser:

     i == (i // j) * j + (i % j)

então a divisão inteira deve retornar o piso.  C também requer que essa
identidade seja mantida, e então os compiladores que truncarem ‘i // j’
precisam fazer com que ‘i % j’ tenham o mesmo sinal que ‘i’.

Existem poucos casos de uso reais para ‘i % j’ quando ‘j’ é negativo.
Quando ‘j’ é positivo, existem muitos, e em virtualmente todos eles é
mais útil para ‘i % j’ ser ‘>= 0’.  Se o relógio marca 10 agora, o que
dizia há 200 horas?  ‘-190 % 12 == 2’ é útil, enquanto ‘-190 % 12 ==
-10’ é um bug esperando para morder.


File: python.info,  Node: Como obtenho um atributo de um literal int em vez de SyntaxError?,  Next: Como faço para converter uma string em um número?,  Prev: Por que -22 // 10 retorna -3?,  Up: Números e strings

10.2.3.3 Como obtenho um atributo de um literal int em vez de SyntaxError?
..........................................................................

Tentar obter um atributo de um literal ‘int’ da maneira normal retorna
um *note SyntaxError: 18d. porque o ponto é visto como um ponto decimal:

     >>> 1.__class__
       File "<stdin>", line 1
       1.__class__
        ^
     SyntaxError: invalid decimal literal

A solução é separar o literal do ponto com um espaço ou parênteses.

     >>> 1 .__class__
     <class 'int'>
     >>> (1).__class__
     <class 'int'>


File: python.info,  Node: Como faço para converter uma string em um número?,  Next: Como faço para converter um número em uma string?,  Prev: Como obtenho um atributo de um literal int em vez de SyntaxError?,  Up: Números e strings

10.2.3.4 Como faço para converter uma string em um número?
..........................................................

Para inteiros, use o construtor do tipo embutido *note int(): 257, por
exemplo, ‘int('144') == 144’.  Da mesma forma, *note float(): 2f7.
converterá para um número de ponto flutuante, por exemplo ‘float('144')
== 144.0’.

Por padrão, eles interpretam o número como decimal, de modo que
‘int('0144') == 144’ é verdadeiro e ‘int('0x144')’ levanta *note
ValueError: 202.  ‘int(string, base)’ toma a base para converter como um
segundo argumento opcional, então ‘int( '0x144', 16) == 324’.  Se a base
for especificada como 0, o número é interpretado usando as regras do
Python: um “0o” à esquerda indica octal e “0x” indica um número
hexadecimal.

Não use a função embutida *note eval(): 180. se tudo que você precisa é
converter strings em números.  *note eval(): 180. será
significativamente mais lento e apresenta um risco de segurança: alguém
pode passar a você uma expressão Python que pode ter efeitos colaterais
indesejados.  Por exemplo, alguém poderia passar
‘__import__('os').system("rm -rf $HOME")’ que apagaria seu diretório
pessoal.

*note eval(): 180. também tem o efeito de interpretar números como
expressões Python, de forma que, por exemplo, ‘eval('09')’ resulta em um
erro de sintaxe porque Python não permite ‘0’ inicial em um número
decimal (exceto ‘0’).


File: python.info,  Node: Como faço para converter um número em uma string?,  Next: Como faço para modificar uma string internamente?,  Prev: Como faço para converter uma string em um número?,  Up: Números e strings

10.2.3.5 Como faço para converter um número em uma string?
..........................................................

Para converter, por exemplo, o número ‘144’ para a string ‘'144'’, use o
construtor do tipo embutido *note str(): 44c.  Caso queira uma
representação hexadecimal ou octal, use as funções embutidas *note
hex(): 1312. ou *note oct(): 1311.  Para a formatação sofisticada, veja
as seções *note f-strings: 9b1. e *note Sintaxe das strings de formato:
13e2, por exemplo, ‘"{:04d}".format(144)’ produz ‘'0144'’ e
‘"{:.3f}".format(1.0/3.0)’ produz ‘'0.333'’.


File: python.info,  Node: Como faço para modificar uma string internamente?,  Next: Como faço para invocar funções/métodos através de strings?,  Prev: Como faço para converter um número em uma string?,  Up: Números e strings

10.2.3.6 Como faço para modificar uma string internamente?
..........................................................

Você não pode fazer isso porque as strings são objetos imutáveis.  Na
maioria das situações, você simplesmente deve construir uma nova string
a partir das várias partes das quais deseja montá-la.  No entanto, caso
precise de um objeto com a capacidade de modificar dados Unicode
internamente, tente usar a classe *note io.StringIO: f59. ou o módulo
*note array: 7.:

     >>> import io
     >>> s = "Hello, world"
     >>> sio = io.StringIO(s)
     >>> sio.getvalue()
     'Hello, world'
     >>> sio.seek(7)
     7
     >>> sio.write("there!")
     6
     >>> sio.getvalue()
     'Hello, there!'

     >>> import array
     >>> a = array.array('w', s)
     >>> print(a)
     array('w', 'Hello, world')
     >>> a[0] = 'y'
     >>> print(a)
     array('w', 'yello, world')
     >>> a.tounicode()
     'yello, world'


File: python.info,  Node: Como faço para invocar funções/métodos através de strings?,  Next: Existe um equivalente em Perl chomp para remover linhas novas ao final de strings?,  Prev: Como faço para modificar uma string internamente?,  Up: Números e strings

10.2.3.7 Como faço para invocar funções/métodos através de strings?
...................................................................

Existem várias técnicas.

   * A melhor forma é usar um dicionário que mapeie strings para
     funções.  A principal vantagem desta técnica é que estas strings
     não precisam corresponder aos nomes das funções.  Esta é também a
     principal técnica utilizada para emular uma construção de instrução
     estilo 'case':

          def a():
              pass

          def b():
              pass

          dispatch = {'go': a, 'stop': b}  # Note a falta de parênteses para funções

          dispatch[get_input()]()  # Note os parênteses ao final para chamar a função

   * Usar a função embutida *note getattr(): bea.:

          import foo
          getattr(foo, 'bar')()

     Observe que a função *note getattr(): bea. funciona com qualquer
     objeto, incluindo classes, instâncias de classe, módulos e assim
     por diante.

     A mesma é usado em vários lugares na biblioteca padrão, como este:

          class Foo:
              def faz_foo(self):
                  ...

              def faz_bar(self):
                  ...

          f = getattr(instancia_foo, 'faz_' + opname)
          f()

   * Use *note locals(): 141. para determinar o nome da função:

          def minhaFunc():
              print("hello")

          fname = "minhaFunc"

          f = locals()[fname]
          f()


File: python.info,  Node: Existe um equivalente em Perl chomp para remover linhas novas ao final de strings?,  Next: Existe uma função scanf ou sscanf ou algo equivalente?,  Prev: Como faço para invocar funções/métodos através de strings?,  Up: Números e strings

10.2.3.8 Existe um equivalente em Perl ‘chomp()’ para remover linhas novas ao final de strings?
...............................................................................................

Pode-se utilizar ‘S.rstrip("\r\n")’ para remover todas as ocorrência de
qualquer terminador de linha que esteja no final da string ‘S’ sem
remover os espaços em branco.  Se a string ‘S’ representar mais de uma
linha, contendo várias linhas vazias no final, os terminadores de linha
de todas linhas em branco serão removidos:

     >>> linhas = ("linha 1 \r\n"
     ...          "\r\n"
     ...          "\r\n")
     >>> linhas.rstrip("\n\r")
     'linha 1 '

Geralmente isso só é desejado ao ler um texto linha por linha, usando
‘S.rstrip()’ dessa maneira funciona bem.


File: python.info,  Node: Existe uma função scanf ou sscanf ou algo equivalente?,  Next: O que significa o erro UnicodeDecodeError ou UnicodeEncodeError?,  Prev: Existe um equivalente em Perl chomp para remover linhas novas ao final de strings?,  Up: Números e strings

10.2.3.9 Existe uma função ‘scanf()’ ou ‘sscanf()’ ou algo equivalente?
.......................................................................

Não como tal.

Para a análise de entrada simples, a abordagem mais fácil geralmente é
dividir a linha em palavras delimitadas por espaços em branco usando o
método *note split(): ed9. de objetos strings e, em seguida, converter
as strings decimais para valores numéricos usando a função *note int():
257. ou a função *note float(): 2f7.  O método ‘split()’ aceita um
parâmetro “sep” opcional que é útil se a linha utilizar algo diferente
de espaço em branco como separador.

Para análise de entradas de textos mais complicadas, as expressões
regulares são mais poderosas do que a ‘sscanf’ do C e mais adequadas
para essa tarefa.


File: python.info,  Node: O que significa o erro UnicodeDecodeError ou UnicodeEncodeError?,  Next: Posso terminar uma string bruta com um número ímpar de contrabarras?,  Prev: Existe uma função scanf ou sscanf ou algo equivalente?,  Up: Números e strings

10.2.3.10 O que significa o erro ‘UnicodeDecodeError’ ou ‘UnicodeEncodeError’?
..............................................................................

Consulte *note Unicode: 12e7.


File: python.info,  Node: Posso terminar uma string bruta com um número ímpar de contrabarras?,  Prev: O que significa o erro UnicodeDecodeError ou UnicodeEncodeError?,  Up: Números e strings

10.2.3.11 Posso terminar uma string bruta com um número ímpar de contrabarras?
..............................................................................

Uma string bruta terminando com um número ímpar de contrabarras vai
escapar as aspas da string:

     >>> r'C:\isso\não\vai\funcionar\'
       File "<stdin>", line 1
         r'C:\isso\não\vai\funcionar\'
         ^
     SyntaxError: unterminated string literal (detected at line 1)

Há várias soluções alternativas para isso.  Uma delas é usar strings
regulares e duplicar as contrabarras:

     >>> 'C:\\isso\\vai\\funcionar\\'
     'C:\\isso\\vai\\funcionar\\'

Outra é concatenar uma string regular contendo uma contrabarra de escape
à string bruta:

     >>> r'C:\isso\vai\funcionar' '\\'
     'C:\\isso\\vai\\funcionar\\'

Também é possível usar *note os.path.join(): 171f. para acrescentar uma
contrabarra no Windows:

     >>> os.path.join(r'C:\isso\vai\funcionar', '')
     'C:\\isso\\vai\\funcionar\\'

Note que, embora uma contrabarra vai “escapar” uma aspa para fins de
determinar onde a string bruta termina, nenhum escape ocorre ao
interpretar o valor da string bruta.  Ou seja, a contrabarra permanece
presente no valor da string bruta:

     >>> r'contrabarra\'preservada'
     "contrabarra\\'preservada"

Veja também a especificação na *note referência da linguagem: 2031.


File: python.info,  Node: Desempenho<4>,  Next: Sequencias Tuplas/Listas,  Prev: Números e strings,  Up: FAQ sobre programação

10.2.4 Desempenho
-----------------

* Menu:

* Meu programa está muito lento. Como faço para melhorar o desempenho?: Meu programa está muito lento Como faço para melhorar o desempenho?.
* Qual é a maneira mais eficiente de concatenar muitas strings?::


File: python.info,  Node: Meu programa está muito lento Como faço para melhorar o desempenho?,  Next: Qual é a maneira mais eficiente de concatenar muitas strings?,  Up: Desempenho<4>

10.2.4.1 Meu programa está muito lento. Como faço para melhorar o desempenho?
.............................................................................

Isso geralmente é algo difícil de conseguir.  Primeiro, aqui está uma
lista de situações que devemos lembrar para melhorar o desempenho da
nossa aplicação antes de buscarmos outras soluções:

   * As características da desempenho podem variar conforme a
     implementação do Python.  Esse FAQ se concentra no *note CPython:
     6f6.

   * O comportamento pode variar em cada sistemas operacionais,
     especialmente quando estivermos tratando de E/S ou multi-threading.

   * Sempre devemos encontrar os hot spots em nosso programa 'antes de'
     tentar otimizar qualquer código (veja o módulo *note profile: af.).

   * Escrever scripts de benchmark permitirá iterar rapidamente buscando
     melhorias (veja o módulo *note timeit: ef.).

   * É altamente recomendável ter boa cobertura de código (através de
     testes de unidade ou qualquer outra técnica) antes de
     potencialmente apresentar regressões escondidas em otimizações
     sofisticadas.

Dito isto, existem muitos truques para acelerar nossos códigos Python.
Aqui estão alguns dos principais tópicos e que geralmente ajudam a
atingir níveis de desempenho aceitáveis:

   * Fazer seus algoritmos rápidos (ou mudando para mais rápidos) podem
     produzir benefícios maiores que tentar encaixar várias
     micro-otimizações no seu código.

   * Usar as estruturas de dados corretas.  Estude a documentação para
     *note Tipos embutidos: 2322. e o módulo *note collections: 1d.

   * Quando a biblioteca padrão fornecer um tipo primitivo para fazer
     algo, é provável (embora não garantido) que isso seja mais rápido
     do que qualquer alternativa que possa surgir.  Isso geralmente é
     verdade para os tipos primitivos escritos em C, como os embutidos e
     alguns tipos de extensão.  Por exemplo, certifique-se de usar o
     método embutido *note list.sort(): be8. ou a função relacionada
     *note sorted(): be7. para fazer a ordenação (e veja *note Técnicas
     de ordenação: 2314. para exemplos de uso moderadamente avançado).

   * As abstrações tendem a criar indireções e forçar o interpretador a
     trabalhar mais.  Se os níveis de indireção superarem a quantidade
     de trabalho útil feito, seu programa ficará mais lento.  Você deve
     evitar a abstração excessiva, especialmente sob a forma de pequenas
     funções ou métodos (que também são muitas vezes prejudiciais à
     legibilidade).

Se você atingiu o limite do que Python puro pode permitir, existem
ferramentas para levá-lo mais longe.  Por exemplo, o Cython(1) pode
compilar uma versão ligeiramente modificada do código Python numa
extensão C e pode ser usado em muitas plataformas diferentes.  O Cython
pode tirar proveito da compilação (e anotações tipo opcional) para
tornar o seu código significativamente mais rápido do que quando
interpretado.  Se você está confiante em suas habilidades de programação
C, também pode *note escrever um módulo de extensão de C: 1d56.

Ver também
..........

A página wiki dedicada a dicas de desempenho(2).

   ---------- Footnotes ----------

   (1) https://cython.org

   (2) https://wiki.python.org/moin/PythonSpeed/PerformanceTips


File: python.info,  Node: Qual é a maneira mais eficiente de concatenar muitas strings?,  Prev: Meu programa está muito lento Como faço para melhorar o desempenho?,  Up: Desempenho<4>

10.2.4.2 Qual é a maneira mais eficiente de concatenar muitas strings?
......................................................................

Objetos das classes *note str: 44c. e *note bytes: 1c2. são imutáveis e,
portanto, concatenar muitas strings é ineficiente, pois cada
concatenação criará um novo objeto.  No caso geral, o custo total do
tempo de execução é quadrático no comprimento total da string.

Para juntar vários objetos *note str: 44c, a linguagem recomendada
colocá-los numa lista e invocar o método *note str.join(): 2340.:

     chunks = []
     for s in my_strings:
         chunks.append(s)
     result = ''.join(chunks)

(outra forma razoavelmente eficiente é usar a classe *note io.StringIO:
f59.)

Para juntar vários objetos *note bytes: 1c2, a forma recomendada é
estender uma classe *note bytearray: 2ea. usando a concatenação local
(com o operador ‘+=’):

     result = bytearray()
     for b in my_bytes_objects:
         result += b


File: python.info,  Node: Sequencias Tuplas/Listas,  Next: Objetos,  Prev: Desempenho<4>,  Up: FAQ sobre programação

10.2.5 Sequencias (Tuplas/Listas)
---------------------------------

* Menu:

* Como faço para converter tuplas em listas?::
* O que é um índice negativo?::
* Como que eu itero uma sequência na ordem inversa?::
* Como que removo itens duplicados de uma lista?::
* How do you remove multiple items from a list?::
* Como fazer um vetor em Python?::
* Como faço para criar uma lista multidimensional?::
* Como eu aplico um método ou função para uma sequência de objetos?::
* Porque uma_tupla[i] += [‘item’] levanta uma exceção quando a adição funciona?::
* Quero fazer uma ordenação confusa; você pode fazer uma transformação schwartziana em Python?: Quero fazer uma ordenação confusa você pode fazer uma transformação schwartziana em Python?.
* Como eu posso ordenar uma lista pelos valores de outra lista?::


File: python.info,  Node: Como faço para converter tuplas em listas?,  Next: O que é um índice negativo?,  Up: Sequencias Tuplas/Listas

10.2.5.1 Como faço para converter tuplas em listas?
...................................................

O construtor de tipo ‘tuple(seq)’ converte qualquer sequência (na
verdade, qualquer iterável) numa tupla com os mesmos itens na mesma
ordem.

Por exemplo, ‘tuple([1, 2, 3])’ produz ‘(1, 2, 3)’ e ‘tuple('abc')’
produz ‘('a', 'b', 'c')’.  Se o argumento for uma tupla, a mesma não faz
uma cópia, mas retorna o mesmo objeto, por isso é barato invocar a
função *note tuple(): 370. quando você não tiver certeza que determinado
objeto já é uma tupla.

O construtor de tipos ‘list(seq)’ converte qualquer sequência ou
iterável em uma lista com os mesmos itens na mesma ordem.  Por exemplo,
‘list((1, 2, 3))’ produz ‘[1, 2, 3]’ e ‘list('abc')’ produz ‘['a', 'b',
'c']’.  Se o argumento for uma lista, o meso fará uma cópia como em
‘seq[:]’.


File: python.info,  Node: O que é um índice negativo?,  Next: Como que eu itero uma sequência na ordem inversa?,  Prev: Como faço para converter tuplas em listas?,  Up: Sequencias Tuplas/Listas

10.2.5.2 O que é um índice negativo?
....................................

Sequências em Python são indexadas com números positivos e números
negativos.  Para números positivos, 0 é o índice do primeiro elemento, 1
é o índice do segundo elemento e assim por diante.  Para números
negativos, -1 é índice do último elemento e -2 é o penúltimo (anterior
ao último) índice e assim por diante.  Pense em ‘seq[-n]’ como o mesmo
que ‘seq[len(seq)-n]’.

Usar índices negativos pode ser muito conveniente.  Por exemplo,
‘S[:-1]’ é a string inteira exceto pelo seu último caractere, o que é
útil para remover o caractere de nova linha no final de uma string.


File: python.info,  Node: Como que eu itero uma sequência na ordem inversa?,  Next: Como que removo itens duplicados de uma lista?,  Prev: O que é um índice negativo?,  Up: Sequencias Tuplas/Listas

10.2.5.3 Como que eu itero uma sequência na ordem inversa?
..........................................................

Use a função embutida *note reversed(): 869.:

     for x in reversed(sequence):
         ...  # faz alguma coisa com x ...

Isso não vai alterar sua sequência original, mas construir uma nova
cópia com a ordem inversa para iteração.


File: python.info,  Node: Como que removo itens duplicados de uma lista?,  Next: How do you remove multiple items from a list?,  Prev: Como que eu itero uma sequência na ordem inversa?,  Up: Sequencias Tuplas/Listas

10.2.5.4 Como que removo itens duplicados de uma lista?
.......................................................

Veja o Python Cookbook para uma longa discussão de várias formas de
fazer isso:

     ‘https://code.activestate.com/recipes/52560/’

Se você não se importar em reordenar a lista, ordene-a e depois examine
a partir do final da lista, excluindo duplicatas conforme avança:

     if mylist:
         mylist.sort()
         last = mylist[-1]
         for i in range(len(mylist)-2, -1, -1):
             if last == mylist[i]:
                 del mylist[i]
             else:
                 last = mylist[i]

Se todos os elementos da lista podem ser usados como chaves de conjunto
(isto é, eles são todos *note hasheáveis: 610.) isso é muitas vezes mais
rápido

     mylist = list(set(mylist))

Isso converte a lista em um conjunto, deste modo removendo itens
duplicados, e depois de volta em uma lista.


File: python.info,  Node: How do you remove multiple items from a list?,  Next: Como fazer um vetor em Python?,  Prev: Como que removo itens duplicados de uma lista?,  Up: Sequencias Tuplas/Listas

10.2.5.5 How do you remove multiple items from a list?
......................................................

As with removing duplicates, explicitly iterating in reverse with a
delete condition is one possibility.  However, it is easier and faster
to use slice replacement with an implicit or explicit forward iteration.
Here are three variations:

     mylist[:] = filter(keep_function, mylist)
     mylist[:] = (x for x in mylist if keep_condition)
     mylist[:] = [x for x in mylist if keep_condition]

A compreensão de lista pode ser a mais rápida.


File: python.info,  Node: Como fazer um vetor em Python?,  Next: Como faço para criar uma lista multidimensional?,  Prev: How do you remove multiple items from a list?,  Up: Sequencias Tuplas/Listas

10.2.5.6 Como fazer um vetor em Python?
.......................................

Utilize uma lista:

     ["isto", 1, "é", "um", "vetor"]

Listas são equivalentes aos vetores de C ou Pascal em termos de
complexidade de tempo; a diferença primária é que uma lista em Python
pode conter objetos de tipos diferentes.

O módulo ‘array’ também provê métodos para criar vetores de tipos fixos
com representações compactas, mas eles são mais lentos para indexar que
listas.  Observe também que NumPy(1) e outros pacotes de terceiros
definem estruturas semelhantes a arrays com várias características.

Para obter listas ligadas no estilo Lisp, você pode emular 'células
cons' usando tuplas:

     lista_lisp = ("como",  ("este",  ("exemplo", None) ) )

Se mutabilidade é desejada, você pode usar listas no lugar de tuplas.
Aqui o análogo de um 'car' Lisp é ‘lista_lisp[0]’ e o análogo de 'cdr' é
‘lista_lisp[1]’.  Faça isso somente se você tem certeza que precisa
disso, porque isso é usualmente muito mais lento que usar listas Python.

   ---------- Footnotes ----------

   (1) https://numpy.org/


File: python.info,  Node: Como faço para criar uma lista multidimensional?,  Next: Como eu aplico um método ou função para uma sequência de objetos?,  Prev: Como fazer um vetor em Python?,  Up: Sequencias Tuplas/Listas

10.2.5.7 Como faço para criar uma lista multidimensional?
.........................................................

Você provavelmente tentou fazer um vetor multidimensional assim:

     >>> A = [[None] * 2] * 3

Isso parece correto se você imprimir:

     >>> A
     [[None, None], [None, None], [None, None]]

Mas quando atribuíres um valor, o mesmo aparecerá em vários lugares:

     >>> A[0][0] = 5
     >>> A
     [[5, None], [5, None], [5, None]]

A razão é que replicar uma lista com ‘*’ não cria cópias, ela apenas
cria referências aos objetos existentes.  O ‘*3’ cria uma lista contendo
3 referências para a mesma lista que contém 2 itens cada.  Mudanças numa
linha serão mostradas em todas as linhas, o que certamente não é o que
você deseja.

A abordagem sugerida é criar uma lista com o comprimento desejado
primeiro e, em seguida, preencher cada elemento com uma lista
recém-criada:

     A = [None] * 3
     for i in range(3):
         A[i] = [None] * 2

Isso gera uma lista contendo 3 listas diferentes contendo 2 itens cada.
Você também pode usar uma compreensão de lista:

     w, h = 2, 3
     A = [[None] * w for i in range(h)]

Ou você pode usar uma extensão que provê um tipo de dados matrix;
NumPy(1) é o mais conhecido.

   ---------- Footnotes ----------

   (1) https://numpy.org/


File: python.info,  Node: Como eu aplico um método ou função para uma sequência de objetos?,  Next: Porque uma_tupla[i] += [‘item’] levanta uma exceção quando a adição funciona?,  Prev: Como faço para criar uma lista multidimensional?,  Up: Sequencias Tuplas/Listas

10.2.5.8 Como eu aplico um método ou função para uma sequência de objetos?
..........................................................................

Para chamar um método ou função e acumular os valores retornados como
uma lista, uma *note compreensão de lista: 6ce. é uma solução elegante:

     result = [obj.method() for obj in mylist]

     result = [function(obj) for obj in mylist]

Para apenas chamar o método ou função sem salvar os valores retornados,
um laço *note for: 2f2. será o suficiente:

     for obj in mylist:
         obj.method()

     for obj in mylist:
         function(obj)


File: python.info,  Node: Porque uma_tupla[i] += [‘item’] levanta uma exceção quando a adição funciona?,  Next: Quero fazer uma ordenação confusa você pode fazer uma transformação schwartziana em Python?,  Prev: Como eu aplico um método ou função para uma sequência de objetos?,  Up: Sequencias Tuplas/Listas

10.2.5.9 Porque uma_tupla[i] += [‘item’] levanta uma exceção quando a adição funciona?
......................................................................................

Isso se deve a uma combinação do fato de que os operadores de atribuição
aumentada são operadores de 'atribuição' e à diferença entre objetos
mutáveis e imutáveis no Python.

Essa discussão se aplica em geral quando operadores de atribuição
aumentada são aplicados a elementos de uma tupla que aponta para objetos
mutáveis, mas usaremos uma ‘lista’ e ‘+=’ como exemplo.

Se você escrever:

     >>> a_tuple = (1, 2)
     >>> a_tuple[0] += 1
     Traceback (most recent call last):
        ...
     TypeError: 'tuple' object does not support item assignment

O motivo da exceção deve ser imediatamente claro: ‘1’ é adicionado ao
objeto que ‘a_tuple[0]’ aponta para (‘1’), produzindo o objeto de
resultado, ‘2’, mas quando tentamos atribuir o resultado do cálculo,
‘2’, ao elemento ‘0’ da tupla, recebemos um erro porque não podemos
alterar o que um elemento de uma tupla aponta.

Por baixo, o que a instrução de atribuição aumentada está fazendo é
aproximadamente isso:

     >>> result = a_tuple[0] + 1
     >>> a_tuple[0] = result
     Traceback (most recent call last):
       ...
     TypeError: 'tuple' object does not support item assignment

Essa é a parte da atribuição da operação que produz o erro, já que a
tupla é imutável.

Quando você escreve algo como:

     >>> a_tuple = (['foo'], 'bar')
     >>> a_tuple[0] += ['item']
     Traceback (most recent call last):
       ...
     TypeError: 'tuple' object does not support item assignment

A exceção é um pouco mais surpreendente, e ainda mais surpreendente é o
fato de que, embora tenha havido um erro, o acréscimo à lista funcionou:

     >>> a_tuple[0]
     ['foo', 'item']

Para entender por que isso acontece, você precisa saber que (a) se um
objeto implementa um método mágico *note __iadd__(): 2123, ele é chamado
quando a atribuição aumentada ‘+=’ é executada, e seu valor de retorno é
o que é usado na instrução de atribuição; e (b) para listas,
‘__iadd__()’ é equivalente a chamar *note extend(): 211b. na lista e
retornar a lista.  É por isso que dizemos que, para listas, ‘+=’ é uma
“abreviação” para *note list.extend(): 35d.:

     >>> a_list = []
     >>> a_list += [1]
     >>> a_list
     [1]

Isso equivale a:

     >>> result = a_list.__iadd__([1])
     >>> a_list = result

O objeto apontado por a_list foi alterado e o ponteiro para o objeto
alterado é atribuído novamente a ‘a_list’.  O resultado final da
atribuição é um no-op, pois é um ponteiro para o mesmo objeto para o
qual ‘a_list’ estava apontando anteriormente, mas a atribuição ainda
acontece.

Portanto, em nosso exemplo da tupla, o que está acontecendo é
equivalente a:

     >>> result = a_tuple[0].__iadd__(['item'])
     >>> a_tuple[0] = result
     Traceback (most recent call last):
       ...
     TypeError: 'tuple' object does not support item assignment

O ‘__iadd__()’ é bem-sucedido e, portanto, a lista é estendida, mas
mesmo que ‘result’ aponte para o mesmo objeto para o qual ‘a_tuple[0]’
já aponta, essa atribuição final ainda resulta em um erro, pois as
tuplas são imutáveis.


File: python.info,  Node: Quero fazer uma ordenação confusa você pode fazer uma transformação schwartziana em Python?,  Next: Como eu posso ordenar uma lista pelos valores de outra lista?,  Prev: Porque uma_tupla[i] += [‘item’] levanta uma exceção quando a adição funciona?,  Up: Sequencias Tuplas/Listas

10.2.5.10 Quero fazer uma ordenação confusa: você pode fazer uma transformação schwartziana em Python?
......................................................................................................

A técnica, atribuída a Randal Schwartz da comunidade Perl, ordena os
elementos de uma lista por uma métrica que mapeia cada elemento para seu
“valor de ordem”.  Em Python, use o argumento ‘key’ para o método *note
list.sort(): be8.:

     Isorted = L[:]
     Isorted.sort(key=lambda s: int(s[10:15]))


File: python.info,  Node: Como eu posso ordenar uma lista pelos valores de outra lista?,  Prev: Quero fazer uma ordenação confusa você pode fazer uma transformação schwartziana em Python?,  Up: Sequencias Tuplas/Listas

10.2.5.11 Como eu posso ordenar uma lista pelos valores de outra lista?
.......................................................................

Combine-as em um iterador de tuplas, ordene a lista resultante e, em
seguida, escolha o elemento desejado:

     >>> list1 = ["lista", "usada", "na", "ordenação"]
     >>> list2 = ["alguma", "coisa", "para", "ordenar"]
     >>> pairs = zip(list1, list2)
     >>> pairs = sorted(pairs)
     >>> pairs
     [('lista', 'alguma'), ('na', 'para'), ('ordenação', 'ordenar'), ('usada', 'coisa')]
     >>> result = [x[1] for x in pairs]
     >>> result
     ['alguma', 'para', 'ordenar', 'coisa']


File: python.info,  Node: Objetos,  Next: Módulos<5>,  Prev: Sequencias Tuplas/Listas,  Up: FAQ sobre programação

10.2.6 Objetos
--------------

* Menu:

* O que é uma classe?::
* O que é um método?::
* O que é o self?::
* Como eu verifico se um objeto é uma instância de uma dada classe ou de uma subclasse dela?::
* O que é delegação?::
* Como eu chamo um método definido em uma classe base a partir de uma classe derivada que a estende?::
* Como eu posso organizar meu código para facilitar a troca da classe base?::
* Como faço para criar dados de classe estáticos e métodos de classe estáticos?::
* Como eu posso sobrecarregar construtores (ou métodos) em Python?: Como eu posso sobrecarregar construtores ou métodos em Python?.
* Eu tentei usar __spam e recebi um erro sobre _SomeClassName__spam.: Eu tentei usar __spam e recebi um erro sobre _SomeClassName__spam.
* Minha classe define __del__, mas o mesmo não é chamado quando eu excluo o objeto.: Minha classe define __del__ mas o mesmo não é chamado quando eu excluo o objeto.
* Como eu consigo pegar uma lista de todas as instâncias de uma dada classe?::
* Por que o resultado de id() aparenta não ser único?: Por que o resultado de id aparenta não ser único?.
* Quando eu posso depender dos testes de identidade com o operador is?::
* Como uma subclasse pode controlar quais dados são armazenados em uma instância imutável?::
* Como faço para armazenar em cache as chamadas de um método?::


File: python.info,  Node: O que é uma classe?,  Next: O que é um método?,  Up: Objetos

10.2.6.1 O que é uma classe?
............................

Uma classe é o tipo de objeto específico criado pela execução da
instrução class.  Os objetos classe são usados como modelos para criar
objetos instância, que incorporam os dados (atributos) e o código
(métodos) específicos de um tipo de dado.

Uma classe pode ser baseada em uma ou mais outras classes, chamadas de
classe(s) base(s), herdando seus atributos e métodos.  Isso permite que
um modelo de objeto seja sucessivamente refinado por herança.  Você pode
ter uma classe genérica ‘Mailbox’ que fornece métodos básicos para uma
caixa de correio e subclasses como ‘MboxMailbox’, ‘MaildirMailbox’,
‘OutlookMailbox’ que manipula vários formatos específicos de caixa de
correio.


File: python.info,  Node: O que é um método?,  Next: O que é o self?,  Prev: O que é uma classe?,  Up: Objetos

10.2.6.2 O que é um método?
...........................

Um método é uma função em algum objeto ‘x’ que você normalmente chama
com ‘x.name(arguments...)’.  Métodos são definidos como funções dentro
da definição da classe:

     class C:
         def meth(self, arg):
             return arg * 2 + self.attribute


File: python.info,  Node: O que é o self?,  Next: Como eu verifico se um objeto é uma instância de uma dada classe ou de uma subclasse dela?,  Prev: O que é um método?,  Up: Objetos

10.2.6.3 O que é o self?
........................

Self é apenas um nome convencional para o primeiro argumento de um
método.  Um método definido como ‘meth(self, a, b, c)’ deve ser chamado
com ‘x.meth(a, b, c)’ para alguma instância ‘x’ da classe em que a
definição ocorre; o método chamado pensará que é chamado com ‘meth(x, a,
b, c)’.

Veja também *note Por que o ‘self’ deve ser usado explicitamente em
definições de método e chamadas?: 552b.


File: python.info,  Node: Como eu verifico se um objeto é uma instância de uma dada classe ou de uma subclasse dela?,  Next: O que é delegação?,  Prev: O que é o self?,  Up: Objetos

10.2.6.4 Como eu verifico se um objeto é uma instância de uma dada classe ou de uma subclasse dela?
...................................................................................................

Use a função embutida *note isinstance(obj, cls): 442.  Você pode
verificar se um objeto é uma instância de qualquer uma de várias classes
fornecendo um tupla em vez de uma única classe, por exemplo,
‘isinstance(obj, (class1, class2, ...))’, e também pode verificar se um
objeto é de um dos tipos embutidos no Python, por exemplo,
‘isinstance(obj, str)’ ou ‘isinstance(obj, (int, float, complex))’.

Observe que *note isinstance(): 442. também verifica se há herança
virtual de uma *note classe base abstrata: 11f5.  Portanto, o teste
retorna ‘True’ para uma classe registrada, mesmo que não tenha herdado
direta ou indiretamente dela.  Para testar a “herança verdadeira”,
verifique o *note MRO: 15c0. da classe:

     from collections.abc import Mapping

     class P:
          pass

     class C(P):
         pass

     Mapping.register(P)

     >>> c = C()
     >>> isinstance(c, C)        # direta
     True
     >>> isinstance(c, P)        # indireta
     True
     >>> isinstance(c, Mapping)  # virtual
     True

     # Cadeira de herança real
     >>> type(c).__mro__
     (<class 'C'>, <class 'P'>, <class 'object'>)

     # Teste pela "herança verdadeira"
     >>> Mapping in type(c).__mro__
     False

Observe que a maioria dos programas não usa *note isinstance(): 442. em
classes definidas pelo usuário com muita frequência.  Se você estiver
desenvolvendo as classes por conta própria, um estilo orientado a
objetos mais adequado é definir métodos nas classes que encapsulam um
comportamento específico, em vez de verificar a classe do objeto e fazer
uma coisa diferente com base na classe que ele é.  Por exemplo, se você
tiver uma função que faz algo:

     def search(obj):
         if isinstance(obj, Mailbox):
             ...  # código para pesquisar uma caixa de correio
         elif isinstance(obj, documento):
             ...  # código para pesquisar um documento
         elif ...

Uma abordagem melhor é definir um método ‘search()’ em todas as classes
e apenas chamá-lo:

     class Mailbox:
         def search(self):
             ...  # código para pesquisar uma caixa de correio

     class documento:
         def search(self):
             ...  # código para pesquisar um documento

     obj.search()


File: python.info,  Node: O que é delegação?,  Next: Como eu chamo um método definido em uma classe base a partir de uma classe derivada que a estende?,  Prev: Como eu verifico se um objeto é uma instância de uma dada classe ou de uma subclasse dela?,  Up: Objetos

10.2.6.5 O que é delegação?
...........................

A delegação é uma técnica orientada a objetos (também chamada de padrão
de projeto).  Digamos que você tenha um objeto ‘x’ e queira alterar o
comportamento de apenas um de seus métodos.  Você pode criar uma nova
classe que forneça uma nova implementação do método que você está
interessado em alterar e delegar todos os outros métodos ao método
correspondente de ‘x’.

Com Python, você pode implementar delegação facilmente.  Por exemplo, o
trecho de código a seguir implementa uma classe que se comporta como um
arquivo, mas converte todos os dados gravados em letras maiúsculas:

     class UpperOut:

         def __init__(self, outfile):
             self._outfile = outfile

         def write(self, s):
             self._outfile.write(s.upper())

         def __getattr__(self, name):
             return getattr(self._outfile, name)

Aqui, a classe ‘UpperOut’ redefine o método ‘write()’ para converter o
argumento string em maiúsculas antes de chamar o método
‘self._outfile.write()’ subjacente.  Todos os outros métodos são
delegados ao objeto ‘self._outfile’ subjacente.  A delegação é realizada
por meio do método *note __getattr__(): 4d3.; consulte *note a
referência da linguagem: 20f1. para obter mais informações sobre o
controle de acesso a atributo.

Observe que, em casos mais gerais, a delegação pode se tornar mais
complicada.  Quando o atributo precisa ser definido e recuperado, a
classe deve definir um método *note __setattr__(): 20bf. também, e deve
fazê-lo com cuidado.  A implementação básica do ‘__setattr__()’ é
aproximadamente equivalente ao seguinte:

     class X:
         ...
         def __setattr__(self, name, value):
             self.__dict__[name] = value
         ...

Muitas implementações do método *note __setattr__(): 20bf. chamam o
‘object.__setattr__()’ para definir um atributo em si mesmo sem causar
recursão infinita:

     class X:
         def __setattr__(self, name, value):
             # Lógica personalizada aqui...
             object.__setattr__(self, name, value)

Como alternativa, é possível definir atributos inserindo entradas em
*note self.__dict__: 55b. diretamente.


File: python.info,  Node: Como eu chamo um método definido em uma classe base a partir de uma classe derivada que a estende?,  Next: Como eu posso organizar meu código para facilitar a troca da classe base?,  Prev: O que é delegação?,  Up: Objetos

10.2.6.6 Como eu chamo um método definido em uma classe base a partir de uma classe derivada que a estende?
...........................................................................................................

Use a função embutida *note super(): 4db.:

     class Derived(Base):
         def meth(self):
             super().meth()  # chama Base.meth

No exemplo, *note super(): 4db. determinará automaticamente a instância
da qual foi chamado (o valor de ‘self’), procura a *note ordem de
resolução de métodos: 2316. (MRO) com ‘type(self).__mro__’ e então
retorna o próximo na linha após ‘Derived’ no MRO: ‘Base’.


File: python.info,  Node: Como eu posso organizar meu código para facilitar a troca da classe base?,  Next: Como faço para criar dados de classe estáticos e métodos de classe estáticos?,  Prev: Como eu chamo um método definido em uma classe base a partir de uma classe derivada que a estende?,  Up: Objetos

10.2.6.7 Como eu posso organizar meu código para facilitar a troca da classe base?
..................................................................................

Você poderia atribuir a classe base a um apelido e derivar do apelido.
Então, tudo o que você precisa alterar é o valor atribuído ao apelido.
Aliás, esse truque também é útil se você quiser decidir dinamicamente
(por exemplo, dependendo do disponibilidade de recursos) qual classe
base usar.  Exemplo:

     class Base:
         ...

     BaseAlias = Base

     class Derived(BaseAlias):
         ...


File: python.info,  Node: Como faço para criar dados de classe estáticos e métodos de classe estáticos?,  Next: Como eu posso sobrecarregar construtores ou métodos em Python?,  Prev: Como eu posso organizar meu código para facilitar a troca da classe base?,  Up: Objetos

10.2.6.8 Como faço para criar dados de classe estáticos e métodos de classe estáticos?
......................................................................................

Tanto dados estáticos quanto métodos estáticos (no sentido de C++ ou
Java) são possíveis com Python.

Para dados estáticos, basta definir um atributo de classe.  Para
atribuir um novo valor ao atributo, você precisa usar explicitamente o
nome da classe na atribuição:

     class C:
         count = 0 # número de vezes que C.__init__ foi chamado

         def __init__(self):
             C.count = C.count + 1

         def getcount(self):
             return C.count # ou return self.count

‘c.count’ também se refere a ‘C.count’ para qualquer ‘c’ de modo que
‘isinstance(c, C)’ seja válido, a menos que seja substituído pelo
próprio ‘c’ ou por alguma classe no caminho de busca da classe base de
‘c.__class__’ até ‘C’.

Cuidado: em um método de C, uma atribuição como ‘self.count = 42’ cria
uma instância nova e não-relacionada chamada “count” no próprio
dicionário de ‘self’.  A revinculação de um nome de dado de classe
estático deve sempre especificar a classe, seja dentro de um método ou
não:

     C.count = 314

Métodos estáticos são possíveis:

     class C:
         @staticmethod
         def static(arg1, arg2, arg3):
             # Sem parâmetro 'self'!
             ...

No entanto, uma maneira muito mais direta de obter o efeito de um método
estático é por meio de uma simples função em nível de módulo:

     def getcount():
         return C.count

Se o seu código está estruturado de modo a definir uma classe (ou uma
hierarquia de classes estreitamente relacionada) por módulo, isso
fornecerá o encapsulamento desejado.


File: python.info,  Node: Como eu posso sobrecarregar construtores ou métodos em Python?,  Next: Eu tentei usar __spam e recebi um erro sobre _SomeClassName__spam,  Prev: Como faço para criar dados de classe estáticos e métodos de classe estáticos?,  Up: Objetos

10.2.6.9 Como eu posso sobrecarregar construtores (ou métodos) em Python?
.........................................................................

Essa resposta na verdade se aplica para todos os métodos, mas a pergunta
normalmente aparece primeiro no contexto de construtores.

Em C++ escreveríamos

     class C {
         C() { cout << "Sem argumentos\n"; }
         C(int i) { cout << "Argumento é igual a " << i << "\n"; }
     }

Em Python, você tem que escrever um único construtor que pega todos os
casos usando argumentos padrão.  Por exemplo:

     class C:
         def __init__(self, i=None):
             if i is None:
                 print("Sem argumentos")
             else:
                 print("Argumento é igual a", i)

Isso não é inteiramente equivalente, mas já está bem próximo.

Você também pode tentar uma lista de argumentos de comprimento variável,
por exemplo:

     def __init__(self, *args):
         ...

A mesma abordagem funciona para todas as definições de métodos.


File: python.info,  Node: Eu tentei usar __spam e recebi um erro sobre _SomeClassName__spam,  Next: Minha classe define __del__ mas o mesmo não é chamado quando eu excluo o objeto,  Prev: Como eu posso sobrecarregar construtores ou métodos em Python?,  Up: Objetos

10.2.6.10 Eu tentei usar __spam e recebi um erro sobre _SomeClassName__spam.
............................................................................

Os nomes de variáveis com dois sublinhados à esquerda são “manipulados”
para fornecer uma maneira simples, mas eficaz, de definir variáveis
privadas de classe.  Qualquer identificador no formato ‘__spam’ (pelo
menos dois sublinhados à esquerda, no máximo um sublinhado à direita) é
textualmente substituído por ‘_classname__spam’, em que ‘classname’ é o
nome da classe atual sem nenhum sublinhado à esquerda.

O identificador pode ser usado normalmente dentro da classe, mas para
acessá-lo fora da classe, deve ser usado o nome manipulado:

     class A:
         def __one(self):
             return 1
         def two(self):
             return 2 * self.__one()

     class B(A):
         def three(self):
             return 3 * self._A__one()

     four = 4 * A()._A__one()

Em particular, isso não garante a privacidade, pois um usuário externo
ainda pode acessar deliberadamente o atributo privado; muitas pessoas
que usam Python nunca se preocuparam em usar nomes de variáveis
privadas.

Ver também
..........

O *note especificações de desfiguração de nome privado: 1e43. para
detalhes e casos especiais.


File: python.info,  Node: Minha classe define __del__ mas o mesmo não é chamado quando eu excluo o objeto,  Next: Como eu consigo pegar uma lista de todas as instâncias de uma dada classe?,  Prev: Eu tentei usar __spam e recebi um erro sobre _SomeClassName__spam,  Up: Objetos

10.2.6.11 Minha classe define __del__, mas o mesmo não é chamado quando eu excluo o objeto.
...........................................................................................

Há várias razões possíveis para isto.

A instrução *note del: 18a7. não necessariamente chama o método *note
__del__(): 1033. - ele simplesmente diminui o contagem de referências do
objeto e, se ele chegar a zero, o ‘__del__()’ é chamado.

Se suas estruturas de dados contiverem links circulares (por exemplo,
uma árvore em que cada filho tem uma referência para o pai e cada pai
tem uma lista de filhos), a contagem de referências nunca voltará a
zero.  De vez em quando, o Python executa um algoritmo para detectar
esses ciclos, mas o coletor de lixo pode ser executado algum tempo
depois que a última referência da sua estrutura de dados desaparecer, de
modo que o seu método ‘__del__()’ pode ser chamado em um momento
inconveniente e aleatório.  Isso é inconveniente se você estiver
tentando reproduzir um problema.  Pior ainda, a ordem em quais objetos o
métodos ‘__del__()’ são executados é arbitrária.  Você pode executar
*note gc.collect(): a43. para forçar um coleção, mas 'há' casos
patológicos em que os objetos nunca serão coletados.

Apesar do coletor de ciclos, ainda é uma boa ideia definir um método
‘close()’ explícito nos objetos a ser chamado sempre que você terminar
de usá-los.  O método ‘close()’ pode então remover o atributo que se
refere a subobjetos.  Não chame ‘__del__()’ diretamente - ‘__del__()’
deve chamar ‘close()’ e ‘close()’ deve garantir que ele possa ser
chamado mais de uma vez para o mesmo objeto.

Outra forma de evitar referências cíclicas é usar o módulo *note
weakref: 114, que permite apontar para objetos sem incrementar o
contagem de referências.  As estruturas de dados em árvore, por exemplo,
devem usar o referência fraca para referenciar seus pais e irmãos (se
precisarem deles!).

Por fim, se seu método ‘__del__()’ levanta uma exceção, uma mensagem de
alerta será enviada para *note sys.stderr: 940.


File: python.info,  Node: Como eu consigo pegar uma lista de todas as instâncias de uma dada classe?,  Next: Por que o resultado de id aparenta não ser único?,  Prev: Minha classe define __del__ mas o mesmo não é chamado quando eu excluo o objeto,  Up: Objetos

10.2.6.12 Como eu consigo pegar uma lista de todas as instâncias de uma dada classe?
....................................................................................

Python não mantém o controle de todas as instâncias de uma classe (ou de
um tipo embutido).  Você pode programar o construtor da classe para
manter o controle de todas as instâncias, mantendo uma lista de
referências fracas para cada instância.


File: python.info,  Node: Por que o resultado de id aparenta não ser único?,  Next: Quando eu posso depender dos testes de identidade com o operador is?,  Prev: Como eu consigo pegar uma lista de todas as instâncias de uma dada classe?,  Up: Objetos

10.2.6.13 Por que o resultado de ‘id()’ aparenta não ser único?
...............................................................

A função embutida *note id(): 146a. retorna um inteiro que é garantido
ser único durante a vida útil do objeto.  Como em CPython esse número é
o endereço de memória do objeto, acontece com frequência que, depois que
um objeto é excluído da memória, o próximo objeto recém-criado é alocado
na mesma posição na memória.  Isso é ilustrado por este exemplo:

     >>> id(1000)
     13901272
     >>> id(2000)
     13901272

Os dois ids pertencem a diferentes objetos inteiros que são criados
antes e excluídos imediatamente após a execução da chamada de ‘id()’.
Para ter certeza de que os objetos cujo id você deseja examinar ainda
estão vivos, crie outra referencia para o objeto:

     >>> a = 1000; b = 2000
     >>> id(a)
     13901272
     >>> id(b)
     13891296


File: python.info,  Node: Quando eu posso depender dos testes de identidade com o operador is?,  Next: Como uma subclasse pode controlar quais dados são armazenados em uma instância imutável?,  Prev: Por que o resultado de id aparenta não ser único?,  Up: Objetos

10.2.6.14 Quando eu posso depender dos testes de identidade com o operador 'is'?
................................................................................

O operador ‘is’ testa a identidade do objeto.  O teste ‘a is b’ equivale
a ‘id(a) == id(b)’.

A propriedade mais importante de um teste de identidade é que um objeto
é sempre idêntico a si mesmo, ‘a is a’ sempre retorna ‘True’.  Testes de
identidade são geralmente mais rápidos do que os testes de igualdade.
E, ao contrário dos testes de igualdade, teste de identidade garante que
retorno seja um booleano ‘True’ ou ‘False’.

Entretanto, o teste de identidade 'somente' pode ser substituído por
testes de igualdade quando a identidade do objeto é garantida.  Em
geral, há três circunstâncias em que a identidade é garantida:

  1. Atribuições criam novos nomes, mas não alteram a identidade do
     objeto.  Após a atribuição ‘new = old’, é garantido que ‘new is
     old’.

  2. Colocar um objeto em um contêiner que armazena referências de
     objetos não altera a identidade do objeto.  Após a lista atribuição
     ‘s[0] = x’, é garantido que ‘s[0] is x’.

  3. Se um objeto for um Singleton, isso significa que só pode existir
     uma instância desse objeto.  Depois de atribuição ‘a = None’ e ‘b =
     None’, é garantido que ‘a is b’ porque ‘None’ é um Singleton.

Na maioria das outras circunstâncias, o teste de identidade é
desaconselhável e os testes de igualdade são preferíveis.  Em
particular, teste de identidade não deve ser usado para verificar
constantes, como *note int: 257. e *note str: 44c, que não têm garantia
de serem Singletons:

     >>> a = 1000
     >>> b = 500
     >>> c = b + 500
     >>> a is c
     False

     >>> a = 'Python'
     >>> b = 'Py'
     >>> c = b + 'thon'
     >>> a is c
     False

Do mesmo jeito, novas instâncias de contêineres mutáveis nunca são
idênticas:

     >>> a = []
     >>> b = []
     >>> a is b
     False

No código da biblioteca padrão, você encontrará vários padrões comuns
para usar corretamente o teste de identidade:

  1. Conforme recomendado por PEP 8(1), um teste de identidade é a
     maneira preferida de verificar ‘None’.  Isso é lido como se fosse
     inglês simples no código e evita confusão com outros objetos que
     podem ter valor booleano avaliado para falso.

  2. A detecção de argumento opcional pode ser complicada quando ‘None’
     é uma valor de entrada válido.  Nessas situações, você pode criar
     um objeto Singleton sinalizador com garantia de ser distinto de
     outros objetos.  Por exemplo, veja como implementar um método que
     se comporta como *note dict.pop(): 343.:

          _sentinel = object()

          def pop(self, key, default=_sentinel):
              if key in self:
                  value = self[key]
                  del self[key]
                  return value
              if default is _sentinel:
                  raise KeyError(key)
              return default

  3. Implementações de contêiner às vezes precisam combinar testes de
     igualdade com testes de identidade.  Isso evita que o código seja
     confundido por objetos como ‘float('NaN')’ que não são iguais a si
     mesmos.

Por exemplo, aqui está a implementação de
‘collections.abc.Sequence.__contains__()’:

     def __contains__(self, value):
         for v in self:
             if v is value or v == value:
                 return True
         return False

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0008/


File: python.info,  Node: Como uma subclasse pode controlar quais dados são armazenados em uma instância imutável?,  Next: Como faço para armazenar em cache as chamadas de um método?,  Prev: Quando eu posso depender dos testes de identidade com o operador is?,  Up: Objetos

10.2.6.15 Como uma subclasse pode controlar quais dados são armazenados em uma instância imutável?
..................................................................................................

Quando estender um tipo imutável, sobrescreva o método *note __new__():
580. em vez do método *note __init__(): 6b0.  O último só é executado
'depois' que uma instância é criada, o que é tarde demais para alterar
os dados em uma instância imutável.

Todas essas classes imutáveis têm um assinatura diferente da sua classe
base:

     from datetime import date

     class FirstOfMonthDate(date):
         "Usa sempre o primeiro dia do mês"
         def __new__(cls, year, month, day):
             return super().__new__(cls, year, month, 1)

     class NamedInt(int):
         "Permite o nome em texto para alguns números"
         xlat = {'zero': 0, 'one': 1, 'ten': 10}
         def __new__(cls, value):
             value = cls.xlat.get(value, value)
             return super().__new__(cls, value)

     class TitleStr(str):
         "Converte string para um nome adequado para uma URL"
         def __new__(cls, s):
             s = s.lower().replace(' ', '-')
             s = ''.join([c for c in s if c.isalnum() or c == '-'])
             return super().__new__(cls, s)

As classes podem ser usadas da seguinte forma:

     >>> FirstOfMonthDate(2012, 2, 14)
     FirstOfMonthDate(2012, 2, 1)
     >>> NamedInt('ten')
     10
     >>> NamedInt(20)
     20
     >>> TitleStr('Blog: Porque Python domina')
     'blog-porque-python-domina'


File: python.info,  Node: Como faço para armazenar em cache as chamadas de um método?,  Prev: Como uma subclasse pode controlar quais dados são armazenados em uma instância imutável?,  Up: Objetos

10.2.6.16 Como faço para armazenar em cache as chamadas de um método?
.....................................................................

As duas principais ferramentas para armazenamento em cache de métodos
são *note functools.cached_property(): 541. e *note
functools.lru_cache(): 9f7.  A primeira armazena resultados no nível de
instância e a segunda no nível de classe.

A abordagem 'cached_property' funciona somente com métodos que não
aceitam nenhum argumento.  Ela não cria uma referência para a instância.
O resultado do método será mantido em cache somente enquanto a instância
estiver ativa.

A vantagem é que, quando um instância não for mais usada, o resultado do
método armazenado em cache será liberado imediatamente.  A desvantagem é
que, se as instâncias se acumularem, os resultados do método também
serão acumulados.  Eles podem crescer sem limites.

A abordagem 'lru_cache' funciona com métodos que têm argumento *note
hasheável: 610.  Ele cria uma referência para a instância, a menos que
sejam feitos esforços especiais para passar referências fracas.

A vantagem do algoritmo menos recentemente usado é que o cache é
limitado pelo 'maxsize' especificado.  A desvantagem é que as instâncias
são mantidas vivas até que saiam do cache ou até que o cache seja limpo.

Esse exemplo mostra as várias técnicas:

     class Weather:
         "Procura informações de tempo em sites governamentais"

         def __init__(self, station_id):
             self._station_id = station_id
             # O _station_id é privado e imutável

         def current_temperature(self):
             "Última observação horária"
             # Não armazena isso em cache porque os dados anteriores
             # podem estar desatualizados.

         @cached_property
         def location(self):
             "Retornas as coordenadas longitude/latitude coordinates da estação"
             # Resultado depende apenas de station_id

         @lru_cache(maxsize=20)
         def historic_rainfall(self, date, units='mm'):
             "Precipitação em uma determinada data"
             # Depende de station_id, date, e units.

O exemplo acima presume que o 'station_id' nunca muda.  Se os atributos
relevantes da instância forem mutáveis, a abordagem 'cached_property'
não poderá usada porque não é capaz de detectar alterações no atributo.

Para que a abordagem 'lru_cache' funcione quando 'station_id' for
mutável, a classe precisa definir os métodos *note __eq__(): b0d. e
*note __hash__(): b0e. para que o cache possa detectar atualizações
relevantes do atributo:

     class Weather:
         "Exemplo com um identificador de estação mutável"

         def __init__(self, station_id):
             self.station_id = station_id

         def change_station(self, station_id):
             self.station_id = station_id

         def __eq__(self, other):
             return self.station_id == other.station_id

         def __hash__(self):
             return hash(self.station_id)

         @lru_cache(maxsize=20)
         def historic_rainfall(self, date, units='cm'):
             "Precipitação em uma determinada data"
             # Depende de station_id, date, e units.


File: python.info,  Node: Módulos<5>,  Prev: Objetos,  Up: FAQ sobre programação

10.2.7 Módulos
--------------

* Menu:

* Como faço para criar um arquivo .pyc?: Como faço para criar um arquivo pyc?.
* Como encontro o nome do módulo atual?::
* Como posso ter módulos que se importam mutuamente?::
* __import__(‘x.y.z’) retorna <módulo ‘x’>; como faço para obter z?: __import__ ‘x y z’ retorna <módulo ‘x’>; como faço para obter z?.
* Quando eu edito um módulo importado e o reimporto, as mudanças não aparecem. Por que isso acontece?: Quando eu edito um módulo importado e o reimporto as mudanças não aparecem Por que isso acontece?.


File: python.info,  Node: Como faço para criar um arquivo pyc?,  Next: Como encontro o nome do módulo atual?,  Up: Módulos<5>

10.2.7.1 Como faço para criar um arquivo .pyc?
..............................................

Quando um módulo é importado pela primeira vez (ou quando o arquivo de
origem foi alterado desde que o arquivo compilado atual foi criado), um
arquivo ‘.pyc’ contendo o código compilado deve ser criado em um
subdiretório ‘__pycache__’ do diretório que contém o arquivo ‘.py’.  O
arquivo ‘.pyc’ terá um nome de arquivo que começa com o mesmo nome do
arquivo ‘.py’ e termina com ‘.pyc’, com um componente intermediário que
depende do binário ‘python’ específico que o criou.  (Consulte PEP
3147(1) para obter detalhes.)

Um dos motivos pelos quais um arquivo ‘.pyc’ pode não ser criado é um
problema de permissões no diretório que contém o arquivo de origem, o
que significa que o subdiretório ‘__pycache__’ não pode ser criado.
Isso pode acontecer, por exemplo, se você desenvolver como um usuário,
mas executar como outro, como se estivesse testando em um servidor web.

A menos que a variável de ambiente *note PYTHONDONTWRITEBYTECODE: 1415.
esteja definida, a criação de um arquivo .pyc será automática se você
estiver importando um módulo e o Python tiver a capacidade (permissões,
espaço livre etc.)  de criar um subdiretório ‘__pycache__’ e gravar o
módulo compilado nesse subdiretório.

A execução do Python em um script de nível superior não é considerada
uma importação e nenhum ‘.pyc’ será criado.  Por exemplo, se você tiver
um módulo de nível superior ‘foo.py’ que importa outro módulo ‘xyz.py’ ,
ao executar ‘foo’ (digitando ‘python foo.py’ no console do sistema
operacional (SO)), um ‘.pyc’ será criado para ‘xyz’ porque ‘xyz’ é
importado, mas nenhum arquivo ‘.pyc’ será criado para ‘foo’, pois
‘foo.py’ não está sendo importado.

Se você precisar criar um arquivo ‘.pyc’ para ‘foo’, ou seja, criar um
arquivo ‘.pyc’ para um módulo que não é importado, você pode usar os
módulos *note py_compile: b3. e *note compileall: 20.

O módulo *note py_compile: b3. pode compilar manualmente qualquer
módulo.  Uma maneira é usar interativamente a função ‘compile()’ nesse
módulo:

     >>> import py_compile
     >>> py_compile.compile('foo.py')

Isso gravará o ‘.pyc’ em um subdiretório ‘__pycache__’ no mesmo local
que ‘foo.py’ (ou você pode substituir isso com o parâmetro opcional
‘cfile’ ).

Você também pode compilar automaticamente todos os arquivos em um
diretório ou diretórios usando o módulo *note compileall: 20.  Você pode
fazer isso no console do SO executando ‘compileall.py’ e fornecendo o
caminho de um diretório que contenha os arquivos Python a serem
compilados:

     python -m compileall .

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-3147/


File: python.info,  Node: Como encontro o nome do módulo atual?,  Next: Como posso ter módulos que se importam mutuamente?,  Prev: Como faço para criar um arquivo pyc?,  Up: Módulos<5>

10.2.7.2 Como encontro o nome do módulo atual?
..............................................

Um módulo pode descobrir seu próprio nome consultando a variável global
predefinida ‘__name__’ .  Se ela tiver o valor ‘'__main__'’ , o programa
estará sendo executado como um script.  Muitos módulos que são
normalmente usados ao serem importados também fornecem uma interface de
linha de comando ou um autoteste, e só executam esse código depois de
verificar ‘__name__’:

     def main():
         print('Executando teste...')
         ...

     if __name__ == '__main__':
         main()


File: python.info,  Node: Como posso ter módulos que se importam mutuamente?,  Next: __import__ ‘x y z’ retorna <módulo ‘x’>; como faço para obter z?,  Prev: Como encontro o nome do módulo atual?,  Up: Módulos<5>

10.2.7.3 Como posso ter módulos que se importam mutuamente?
...........................................................

Suponha que tenhas os seguintes módulos:

‘foo.py’:

     from bar importar bar_var
     foo_var = 1

‘bar.py’:

     from foo import foo_var
     bar_var = 2

O problema é que o interpretador vai realizar os seguintes passos:

   * Programa principal importa ‘foo’

   * São criados globais vazios para ‘foo’

   * ‘foo’ é compilado e começa a ser executado

   * ‘foo’ importa ‘bar’

   * São criados globais vazios para ‘bar’

   * ‘bar’ é compilado e começa a ser executado

   * ‘bar’ importa ‘foo’ (o que não é executado de fato, pois já existe
     um módulo chamado ‘foo’)

   * O mecanismo de importação tenta ler ‘foo_var’ do ‘foo’ em globais,
     para definir ‘bar.foo_var = foo.foo_var’

A última etapa falha, pois Python ainda não terminou de interpretar
‘foo’ e o dicionário de símbolos global para ‘foo’ ainda está vazio.

O mesmo acontece quando você usa ‘import foo’ e, em seguida, tenta
acessar ‘foo.foo_var’ no código global.

Há (pelo menos) três possíveis soluções alternativas para esse problema.

Guido van Rossum recomenda evitar todos os usos de ‘from <module> import
...’ e colocar todo o código dentro de funções.  As inicializações de
variáveis globais e variáveis de classe devem usar apenas constantes ou
funções embutidas.  Isso significa que tudo de um módulo importado é
referenciado como ‘<module>.<name>’.

Jim Roskind sugere a execução das etapas na seguinte ordem em cada
módulo:

   * exportações (globais, função e classes que não precisam de classes
     base importadas)

   * instruções ‘import’

   * código ativo (incluindo globais que são inicializadas de valores
     importados)

Van Rossum não gosta muito dessa abordagem porque a importação aparece
em um lugar estranho, mas ela funciona.

Matthias Urlichs recomenda reestruturar seu código para que importação
recursiva não seja necessária em primeiro lugar.

Essas soluções não são mutuamente exclusivas.


File: python.info,  Node: __import__ ‘x y z’ retorna <módulo ‘x’>; como faço para obter z?,  Next: Quando eu edito um módulo importado e o reimporto as mudanças não aparecem Por que isso acontece?,  Prev: Como posso ter módulos que se importam mutuamente?,  Up: Módulos<5>

10.2.7.4 __import__(‘x.y.z’) retorna <módulo ‘x’>; como faço para obter z?
..........................................................................

Em vez disso, considere usar a conveniente função *note import_module():
518. de *note importlib: 77.:

     z = importlib.import_module('x.y.z')


File: python.info,  Node: Quando eu edito um módulo importado e o reimporto as mudanças não aparecem Por que isso acontece?,  Prev: __import__ ‘x y z’ retorna <módulo ‘x’>; como faço para obter z?,  Up: Módulos<5>

10.2.7.5 Quando eu edito um módulo importado e o reimporto, as mudanças não aparecem. Por que isso acontece?
............................................................................................................

Por motivos de eficiência e consistência, o Python só lê o arquivo do
módulo na primeira vez em que um módulo é importado.  Caso contrário, em
um programa que consiste em muitos módulos em que cada um importa o
mesmo módulo básico, o módulo básico seria analisado e reanalisado
várias vezes.  Para forçar a releitura de um módulo alterado, faça o
seguinte:

     import importlib
     import modname
     importlib.reload(modname)

Aviso: essa técnica não é 100% à prova de falhas.  Em particular,
módulos contendo instruções como

     from modname import some_objects

continuará com a versão antiga dos objetos importados.  Se o módulo
contiver definições de classe, as instâncias de classe existentes 'não'
serão atualizadas para usar a nova definição da classe.  Isso pode
resultar no seguinte comportamento paradoxal:

     >>> import importlib
     >>> import cls
     >>> c = cls.C()                # Cria uma instância de C
     >>> importlib.reload(cls)
     <module 'cls' from 'cls.py'>
     >>> isinstance(c, cls.C)       # isinstance é falso?!?
     False

A natureza do problema fica clara se você exibir a “identidade” dos
objetos da classe:

     >>> hex(id(c.__class__))
     '0x7352a0'
     >>> hex(id(cls.C))
     '0x4198d0'


File: python.info,  Node: FAQ sobre design e histórico,  Next: FAQ de Bibliotecas e Extensões,  Prev: FAQ sobre programação,  Up: Perguntas Frequentes Sobre Python

10.3 FAQ sobre design e histórico
=================================

* Menu:

* Por que o Python usa indentação para agrupamento de instruções?::
* Por que eu estou recebendo resultados estranhos com simples operações aritméticas?::
* Por que o cálculo de pontos flutuantes são tão imprecisos?::
* Por que strings do Python são imutáveis?::
* Por que o ‘self’ deve ser usado explicitamente em definições de método e chamadas?::
* Por que não posso usar uma atribuição em uma expressão?::
* Por que o Python usa métodos para algumas funcionalidades (ex; lista.index()) mas funções para outras (ex; len(lista))?: Por que o Python usa métodos para algumas funcionalidades ex lista index mas funções para outras ex len lista ?.
* Por que o join() é um método de string em vez de ser um método de lista ou tupla?: Por que o join é um método de string em vez de ser um método de lista ou tupla?.
* Quão rápidas são as exceções?::
* Por que não existe uma instrução de switch ou case no Python?::
* Você não pode emular threads no interpretador em vez de confiar em uma implementação de thread específica do sistema operacional?::
* Por que expressões lambda não podem conter instruções?::
* O Python pode ser compilado para linguagem de máquina, C ou alguma outra linguagem?: O Python pode ser compilado para linguagem de máquina C ou alguma outra linguagem?.
* Como o Python gerencia memória?::
* Por que o CPython não usa uma forma mais tradicional de esquema de coleta de lixo?::
* Por que toda memória não é liberada quando o CPython fecha?::
* Por que existem tipos de dados separados para tuplas e listas?::
* Como as listas são implementadas no CPython?::
* Como são os dicionários implementados no CPython?::
* Por que chaves de dicionário devem ser imutáveis?::
* Por que lista.sort() não retorna a lista ordenada?: Por que lista sort não retorna a lista ordenada?.
* Como você especifica e aplica um spec de interface no Python?::
* Por que não há goto?::
* Por que strings brutas (r-strings) não podem terminar com uma contrabarra?: Por que strings brutas r-strings não podem terminar com uma contrabarra?.
* Por que o Python não tem uma instrução “with” para atribuição de atributos?::
* Por que os geradores não suportam a instrução with?::
* Por que dois pontos são necessários para as instruções de if/while/def/class?::
* Por que o Python permite vírgulas ao final de listas e tuplas?::


File: python.info,  Node: Por que o Python usa indentação para agrupamento de instruções?,  Next: Por que eu estou recebendo resultados estranhos com simples operações aritméticas?,  Up: FAQ sobre design e histórico

10.3.1 Por que o Python usa indentação para agrupamento de instruções?
----------------------------------------------------------------------

Guido van Rossum acredita que usar indentação para agrupamento é
extremamente elegante e contribui muito para a clareza de programa
Python mediano.  Muitas pessoas aprendem a amar esta ferramenta depois
de um tempo.

Uma vez que não há colchetes de início / fim, não pode haver um
desacordo entre o agrupamento percebido pelo analisador sintático e pelo
leitor humano.  Ocasionalmente, programadores C irão encontrar um
fragmento de código como este:

     if (x <= y)
             x++;
             y--;
     z++;

Somente a instrução ‘x++’ é executada se a condição for verdadeira, mas
a indentação leva muitos a acreditarem no contrário.  Com frequência,
até programadores C experientes a observam fixamente por um longo tempo,
perguntando-se por que ‘y’ está sendo decrementada até mesmo para ‘x >
y’.

Como não há chaves de início / fim, o Python é muito menos propenso a
conflitos no estilo de codificação.  Em C, existem muitas maneiras
diferentes de colocar as chaves.  Depois de se tornar habitual a leitura
e escrita de código usando um estilo específico, é normal sentir-se um
pouco receoso ao ler (ou precisar escrever) em um estilo diferente.

Muitos estilos de codificação colocam chaves de início / fim em uma
linha sozinhos.  Isto torna os programas consideravelmente mais longos e
desperdiça espaço valioso na tela, dificultando a obtenção de uma boa
visão geral de um programa.  Idealmente, uma função deve caber em uma
tela (digamos, 20 a 30 linhas).  20 linhas de Python podem fazer muito
mais trabalho do que 20 linhas de C. Isso não se deve apenas à falta de
colchetes de início/fim – a falta de declarações e os tipos de dados de
alto nível também são responsáveis – mas a sintaxe baseada em indentação
certamente ajuda.


File: python.info,  Node: Por que eu estou recebendo resultados estranhos com simples operações aritméticas?,  Next: Por que o cálculo de pontos flutuantes são tão imprecisos?,  Prev: Por que o Python usa indentação para agrupamento de instruções?,  Up: FAQ sobre design e histórico

10.3.2 Por que eu estou recebendo resultados estranhos com simples operações aritméticas?
-----------------------------------------------------------------------------------------

Veja a próxima questão.


File: python.info,  Node: Por que o cálculo de pontos flutuantes são tão imprecisos?,  Next: Por que strings do Python são imutáveis?,  Prev: Por que eu estou recebendo resultados estranhos com simples operações aritméticas?,  Up: FAQ sobre design e histórico

10.3.3 Por que o cálculo de pontos flutuantes são tão imprecisos?
-----------------------------------------------------------------

Usuários são frequentemente surpreendidos por resultados como este:

     >>> 1.2 - 1.0
     0.19999999999999996

e pensam que isto é um bug do Python.  Não é não.  Isto tem pouco a ver
com o Python, e muito mais a ver com como a estrutura da plataforma lida
com números em ponto flutuante.

O tipo *note float: 2f7. no CPython usa um ‘double’ do C para
armazenamento.  O valor de um objeto *note float: 2f7. é armazenado em
ponto flutuante binário com uma precisão fixa (normalmente 53 bits) e
Python usa operações C, que por sua vez dependem da implementação de
hardware no processador, para realizar operações de ponto flutuante.
Isso significa que, no que diz respeito às operações de ponto flutuante,
Python se comporta como muitas linguagens populares, incluindo C e Java.

Muitos números podem ser escritos facilmente em notação decimal, mas não
podem ser expressados exatamente em ponto flutuante binário.  Por
exemplo, após:

     >>> x = 1.2

o valor armazenado para ‘x’ é uma (ótima) aproximação para o valor
decimal ‘1.2’, mas não é exatamente igual.  Em uma máquina típica, o
valor real armazenado é:

     1.0011001100110011001100110011001100110011001100110011 (binário)

que é exatamente:

     1.1999999999999999555910790149937383830547332763671875 (decimal)

A precisão típica de 53 bits fornece floats do Python com precisão de 15
a 16 dígitos decimais.

Para uma explicação mais completa, consulte o capítulo de *note
aritmética de ponto flutuante: 1e99. no tutorial Python.


File: python.info,  Node: Por que strings do Python são imutáveis?,  Next: Por que o ‘self’ deve ser usado explicitamente em definições de método e chamadas?,  Prev: Por que o cálculo de pontos flutuantes são tão imprecisos?,  Up: FAQ sobre design e histórico

10.3.4 Por que strings do Python são imutáveis?
-----------------------------------------------

Existem várias vantagens.

Uma delas é o desempenho: saber que uma string é imutável significa que
podemos alocar espaço para ela no momento da criação, e os requisitos de
armazenamento são fixos e imutáveis.  Esta é também uma das razões para
a distinção entre tuplas e listas.

Outra vantagem é que strings em Python são consideradas tão
“elementares” quanto números.  Nenhuma atividade alterará o valor 8 para
qualquer outra coisa e, em Python, nenhuma atividade alterará a string
“oito” para qualquer outra coisa.


File: python.info,  Node: Por que o ‘self’ deve ser usado explicitamente em definições de método e chamadas?,  Next: Por que não posso usar uma atribuição em uma expressão?,  Prev: Por que strings do Python são imutáveis?,  Up: FAQ sobre design e histórico

10.3.5 Por que o ‘self’ deve ser usado explicitamente em definições de método e chamadas?
-----------------------------------------------------------------------------------------

A ideia foi emprestada do Modula-3.  Acontece dela ser muito útil, por
vários motivos.

Primeiro, é mais óbvio que você está usando um método ou atributo de
instância em vez de uma variável local.  Ler ‘self.x’ ou ‘self.meth()’
deixa absolutamente claro que uma variável de instância ou método é
usado mesmo se você não souber a definição da classe de cor.  Em C++,
você pode perceber pela falta de uma declaração de variável local
(presumindo que globais são raras ou facilmente reconhecíveis) – mas no
Python não há declarações de variáveis locais, então você teria que
procurar a definição de classe para tenha certeza.  Alguns padrões de
codificação C++ e Java exigem que atributos de instância tenham um
prefixo ‘m_’, portanto, essa explicitação ainda é útil nessas linguagens
também.

Segundo, significa que nenhuma sintaxe especial é necessária se você
quiser referenciar ou chamar explicitamente o método de uma classe
específica.  Em C++, se você quiser usar um método de uma classe base
que é substituído em uma classe derivada, você deve usar o operador ‘::’
– no Python, você pode escrever ‘baseclass.methodname(self, <lista de
argumentos>)’.  Isto é particularmente útil para métodos *note
__init__(): 6b0. e, em geral, em casos onde um método de classe derivada
deseja estender o método da classe base de mesmo nome e, portanto,
precisa chamar o método da classe base de alguma forma.

Finalmente, por exemplo, variáveis, ele resolve um problema sintático
com atribuição: uma vez que variáveis locais em Python são (por
definição!)  aquelas variáveis às quais um valor é atribuído em um corpo
de função (e que não são explicitamente declaradas globais), é
necessário deve haver alguma forma de dizer ao interpretador que uma
atribuição deveria ser atribuída a uma variável de instância em vez de a
uma variável local, e deve ser preferencialmente sintática (por razões
de eficiência).  C++ faz isso através de declarações, mas Python não
possui declarações e seria uma pena ter que introduzi-las apenas para
esse fim.  Usar o ‘self.var’ explícito resolve isso muito bem.  Da mesma
forma, para usar variáveis de instância, ter que escrever ‘self.var’
significa que referências a nomes não qualificados dentro de um método
não precisam pesquisar nos diretórios da instância.  Em outras palavras,
variáveis locais e variáveis de instância residem em dois espaço de
nomes diferentes, e você precisa informar ao Python qual espaço de nomes
usar.


File: python.info,  Node: Por que não posso usar uma atribuição em uma expressão?,  Next: Por que o Python usa métodos para algumas funcionalidades ex lista index mas funções para outras ex len lista ?,  Prev: Por que o ‘self’ deve ser usado explicitamente em definições de método e chamadas?,  Up: FAQ sobre design e histórico

10.3.6 Por que não posso usar uma atribuição em uma expressão?
--------------------------------------------------------------

A partir do Python 3.8, você pode!

Expressões de atribuição usando o operador morsa ‘:=’ atribuem uma
variável em uma expressão:

     while chunk := fp.read(200):
        print(chunk)

Veja PEP 572(1) para mais informações.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0572/


File: python.info,  Node: Por que o Python usa métodos para algumas funcionalidades ex lista index mas funções para outras ex len lista ?,  Next: Por que o join é um método de string em vez de ser um método de lista ou tupla?,  Prev: Por que não posso usar uma atribuição em uma expressão?,  Up: FAQ sobre design e histórico

10.3.7 Por que o Python usa métodos para algumas funcionalidades (ex: lista.index()) mas funções para outras (ex: len(lista))?
------------------------------------------------------------------------------------------------------------------------------

Como Guido disse:

     (a) For some operations, prefix notation just reads better than
     postfix – prefix (and infix!)  operations have a long tradition in
     mathematics which likes notations where the visuals help the
     mathematician thinking about a problem.  Compare the easy with
     which we rewrite a formula like x*(a+b) into x*a + x*b to the
     clumsiness of doing the same thing using a raw OO notation.

     (b) When I read code that says len(x) I 'know' that it is asking
     for the length of something.  This tells me two things: the result
     is an integer, and the argument is some kind of container.  To the
     contrary, when I read x.len(), I have to already know that x is
     some kind of container implementing an interface or inheriting from
     a class that has a standard len().  Witness the confusion we
     occasionally have when a class that is not implementing a mapping
     has a get() or keys() method, or something that isn’t a file has a
     write() method.

-- ‘https://mail.python.org/pipermail/python-3000/2006-November/004643.html’


File: python.info,  Node: Por que o join é um método de string em vez de ser um método de lista ou tupla?,  Next: Quão rápidas são as exceções?,  Prev: Por que o Python usa métodos para algumas funcionalidades ex lista index mas funções para outras ex len lista ?,  Up: FAQ sobre design e histórico

10.3.8 Por que o join() é um método de string em vez de ser um método de lista ou tupla?
----------------------------------------------------------------------------------------

Strings se tornaram muito parecidas com outros tipos padrão a partir do
Python 1.6, quando métodos que dão a mesma funcionalidade que sempre
esteve disponível utilizando as funções do módulo de string foram
adicionados.  A maior parte desses novos métodos foram amplamente
aceitos, mas o que parece deixar alguns programadores desconfortáveis é:

     ", ".join(['1', '2', '4', '8', '16'])

que dá o resultado:

     "1, 2, 4, 8, 16"

Existem dois argumentos comuns contra esse uso.

O primeiro segue as linhas de: “Parece muito feio usar um método de uma
string literal (constante de string)”, para o qual a resposta é que
pode, mas uma string literal é apenas um valor fixo.  Se os métodos
devem ser permitidos em nomes vinculados a strings, não há razão lógica
para torná-los indisponíveis em literais.

A segunda objeção é normalmente formulada como: “Na verdade, estou
dizendo a uma sequência para unir seus membros com uma constante de
string”.  Infelizmente, você não está.  Por alguma razão parece haver
muito menos dificuldade em ter *note split(): ed9. como um método
string, já que nesse caso é fácil ver que

     "1, 2, 4, 8, 16".split(", ")

é uma instrução para uma string literal para retornar as substrings
delimitadas pelo separador fornecido (ou, por padrão, execuções
arbitrárias de espaço em branco).

*note join(): 2340. é um método de string porque ao usá-lo você está
dizendo à string separadora para iterar sobre uma sequência de strings e
se inserir entre elementos adjacentes.  Este método pode ser usado com
qualquer argumento que obedeça às regras para objetos sequência,
incluindo quaisquer novas classes que você mesmo possa definir.  Existem
métodos semelhantes para bytes e objetos bytearray.


File: python.info,  Node: Quão rápidas são as exceções?,  Next: Por que não existe uma instrução de switch ou case no Python?,  Prev: Por que o join é um método de string em vez de ser um método de lista ou tupla?,  Up: FAQ sobre design e histórico

10.3.9 Quão rápidas são as exceções?
------------------------------------

Um bloco *note try: 6e9./*note except: 18b. é extremamente eficiente se
nenhuma exceção for levantada.  Na verdade, capturar uma exceção é caro.
Nas versões do Python anteriores à 2.0 era comum usar esta expressão:

     try:
         value = mydict[key]
     except KeyError:
         mydict[key] = getvalue(key)
         value = mydict[key]

Isso somente fazia sentido quando você esperava que o dicionário tivesse
uma chave quase que toda vez.  Se esse não fosse o caso, você escrevia
desta maneira:

     if key in mydict:
         value = mydict[key]
     else:
         value = mydict[key] = getvalue(key)

Para este caso específico, você também pode usar ‘value =
dict.setdefault(key, getvalue(key))’, mas apenas se a chamada
‘getvalue()’ tiver pouco custosa o suficiente porque é avaliada em todos
os casos.


File: python.info,  Node: Por que não existe uma instrução de switch ou case no Python?,  Next: Você não pode emular threads no interpretador em vez de confiar em uma implementação de thread específica do sistema operacional?,  Prev: Quão rápidas são as exceções?,  Up: FAQ sobre design e histórico

10.3.10 Por que não existe uma instrução de switch ou case no Python?
---------------------------------------------------------------------

Em geral, as instruções switch estruturadas executam um bloco de código
quando uma expressão possui um valor ou conjunto de valores específico.
Desde o Python 3.10 é possível combinar facilmente valores literais, ou
constantes dentro de um espaço de nomes, com uma instrução ‘match ...
case’.  Uma alternativa mais antiga é uma sequência de ‘if... elif...
elif... else’.

Para casos em que você precisa escolher entre um grande número de
possibilidades, você pode criar um dicionário mapeando valores de caso
para funções a serem chamadas.  Por exemplo:

     functions = {'a': function_1,
                  'b': function_2,
                  'c': self.method_1}

     func = functions[value]
     func()

Para chamar métodos em objetos, você pode simplificar ainda mais usando
olá função embutida *note getattr(): bea. para recuperar métodos com um
nome específico:

     class MyVisitor:
         def visit_a(self):
             ...

         def dispatch(self, value):
             method_name = 'visit_' + str(value)
             method = getattr(self, method_name)
             method()

É sugerido que você use um prefixo para os nomes dos métodos, como
‘visit_’ neste exemplo.  Sem esse prefixo, se os valores vierem de uma
fonte não confiável, um invasor poderá chamar qualquer método no seu
objeto.

Imitar o comportamento do switch no C, em que a execução atravessa as
instruções de um case para outro caso não seja interrompida, é possível,
mais difícil, e menos necessário.


File: python.info,  Node: Você não pode emular threads no interpretador em vez de confiar em uma implementação de thread específica do sistema operacional?,  Next: Por que expressões lambda não podem conter instruções?,  Prev: Por que não existe uma instrução de switch ou case no Python?,  Up: FAQ sobre design e histórico

10.3.11 Você não pode emular threads no interpretador em vez de confiar em uma implementação de thread específica do sistema operacional?
-----------------------------------------------------------------------------------------------------------------------------------------

Resposta 1: Infelizmente, o interpretador envia pelo menos um quadro de
pilha C para cada quadro de pilha Python.  Além disso, as extensões
podem retornar ao Python em momentos quase aleatórios.  Portanto, uma
implementação completa de threads requer suporte de thread para C.

Resposta 2: Felizmente, existe o Stackless Python(1), que tem um laço de
interpretador completamente redesenhado que evita a pilha C.

   ---------- Footnotes ----------

   (1) https://github.com/stackless-dev/stackless/wiki


File: python.info,  Node: Por que expressões lambda não podem conter instruções?,  Next: O Python pode ser compilado para linguagem de máquina C ou alguma outra linguagem?,  Prev: Você não pode emular threads no interpretador em vez de confiar em uma implementação de thread específica do sistema operacional?,  Up: FAQ sobre design e histórico

10.3.12 Por que expressões lambda não podem conter instruções?
--------------------------------------------------------------

Expressões lambda no Python não podem conter instruções porque o
framework sintático do Python não consegue manipular instruções
aninhadas dentro de expressões.  No entanto, no Python, isso não é um
problema sério.  Diferentemente das formas de lambda em outras
linguagens, onde elas adicionam funcionalidade, lambdas de Python são
apenas notações simplificadas se você tiver muita preguiça de definir
uma função.

Funções já são objetos de primeira classe em Python, e podem ser
declaradas em um escopo local.  Portanto a única vantagem de usar um
lambda em vez de uma função definida localmente é que você não precisa
inventar um nome para a função – mas esta só é uma variável local para a
qual o objeto da função (que é exatamente do mesmo tipo de um objeto que
uma expressão lambda carrega) é atribuído!


File: python.info,  Node: O Python pode ser compilado para linguagem de máquina C ou alguma outra linguagem?,  Next: Como o Python gerencia memória?,  Prev: Por que expressões lambda não podem conter instruções?,  Up: FAQ sobre design e histórico

10.3.13 O Python pode ser compilado para linguagem de máquina, C ou alguma outra linguagem?
-------------------------------------------------------------------------------------------

O Cython(1) compila uma versão modificada do Python com anotações
opcionais em extensões C. Nuitka(2) é um compilador emergente de Python
em código C++, com o objetivo de oferecer suporte à linguagem Python
completa.

   ---------- Footnotes ----------

   (1) https://cython.org/

   (2) https://nuitka.net/


File: python.info,  Node: Como o Python gerencia memória?,  Next: Por que o CPython não usa uma forma mais tradicional de esquema de coleta de lixo?,  Prev: O Python pode ser compilado para linguagem de máquina C ou alguma outra linguagem?,  Up: FAQ sobre design e histórico

10.3.14 Como o Python gerencia memória?
---------------------------------------

Os detalhes do gerenciamento de memória Python dependem da
implementação.  A implementação padrão do Python, *note CPython: 6f6,
usa contagem de referências para detectar objetos inacessíveis, e outro
mecanismo para coletar ciclos de referência, executando periodicamente
um algoritmo de detecção de ciclo que procura por ciclos inacessíveis e
exclui os objetos envolvidos.  O módulo *note gc: 60. fornece funções
para realizar uma coleta de lixo, obter estatísticas de depuração e
ajustar os parâmetros do coletor.

Outras implementações (como Jython(1) ou PyPy(2)), no entanto, podem
contar com um mecanismo diferente, como um coletor de lixo maduro.  Essa
diferença pode causar alguns problemas sutis de portabilidade se o seu
código Python depender do comportamento da implementação de contagem de
referências.

Em algumas implementações do Python, o código a seguir (que funciona bem
no CPython) provavelmente ficará sem descritores de arquivo:

     for file in very_long_list_of_files:
         f = open(file)
         c = f.read(1)

Na verdade, usando o esquema de contagem de referências e destrutor de
referências do CPython, cada nova atribuição a ‘f’ fecha o arquivo
anterior.  Com um GC tradicional, entretanto, esses objetos arquivo só
serão coletados (e fechados) em intervalos variados e possivelmente
longos.

Se você quiser escrever um código que funcione com qualquer
implementação Python, você deve fechar explicitamente o arquivo ou usar
a instrução *note with: 5d2.; isso funcionará independentemente do
esquema de gerenciamento de memória:

     for file in very_long_list_of_files:
         with open(file) as f:
             c = f.read(1)

   ---------- Footnotes ----------

   (1) https://www.jython.org

   (2) https://pypy.org


File: python.info,  Node: Por que o CPython não usa uma forma mais tradicional de esquema de coleta de lixo?,  Next: Por que toda memória não é liberada quando o CPython fecha?,  Prev: Como o Python gerencia memória?,  Up: FAQ sobre design e histórico

10.3.15 Por que o CPython não usa uma forma mais tradicional de esquema de coleta de lixo?
------------------------------------------------------------------------------------------

Por um lado, este não é um recurso padrão C e, portanto, não é portátil.
(Sim, sabemos sobre a biblioteca Boehm GC. Ela possui pedaços de código
assembler para a 'maioria' das plataformas comuns, não para todas elas,
e embora seja em sua maioria transparente, não é completamente
transparente; são necessários patches para obter Python para trabalhar
com isso.)

O GC tradicional também se torna um problema quando o Python é
incorporado em outros aplicativos.  Embora em um Python independente
seja bom substituir o padrão ‘malloc()’ e ‘free()’ por versões
fornecidas pela biblioteca GC, uma aplicação que incorpora Python pode
querer ter seu 'próprio' substituto para ‘malloc()’ e ‘free()’, e podem
não querer Python.  No momento, CPython funciona com qualquer coisa que
implemente ‘malloc()’ e ‘free()’ corretamente.


File: python.info,  Node: Por que toda memória não é liberada quando o CPython fecha?,  Next: Por que existem tipos de dados separados para tuplas e listas?,  Prev: Por que o CPython não usa uma forma mais tradicional de esquema de coleta de lixo?,  Up: FAQ sobre design e histórico

10.3.16 Por que toda memória não é liberada quando o CPython fecha?
-------------------------------------------------------------------

Os objetos referenciados nos espaço de nomes globais dos módulos Python
nem sempre são desalocados quando o Python é encerrado.  Isso pode
acontecer se houver referências circulares.  Existem também certos bits
de memória alocados pela biblioteca C que são impossíveis de liberar
(por exemplo, uma ferramenta como o Purify reclamará disso).  Python é,
no entanto, agressivo quanto à limpeza de memória na saída e tenta
destruir todos os objetos.

Se você quiser forçar o Python a excluir certas coisas na desalocação,
use o módulo *note atexit: c. para executar uma função que forçará essas
exclusões.


File: python.info,  Node: Por que existem tipos de dados separados para tuplas e listas?,  Next: Como as listas são implementadas no CPython?,  Prev: Por que toda memória não é liberada quando o CPython fecha?,  Up: FAQ sobre design e histórico

10.3.17 Por que existem tipos de dados separados para tuplas e listas?
----------------------------------------------------------------------

Listas e tuplas, embora semelhantes em muitos aspectos, geralmente são
usadas de maneiras fundamentalmente diferentes.  Tuplas podem ser
consideradas semelhantes a ‘records’ de Pascal ou ‘structs’ de C; são
pequenas coleções de dados relacionados que podem ser de diferentes
tipos e operados como um grupo.  Por exemplo, uma coordenada cartesiana
é representada apropriadamente como uma tupla de dois ou três números.

As listas, por outro lado, são mais parecidas com arrays em outras
linguagens.  Eles tendem a conter um número variável de objetos, todos
do mesmo tipo e operados um por um.  Por exemplo, *note os.listdir('.'):
1139. retorna uma lista de strings representando os arquivos no
diretório atual.  Funções que operam nesta saída geralmente não seriam
interrompidas se você adicionasse outro arquivo ou dois ao diretório.

As tuplas são imutáveis, o que significa que, uma vez criada uma tupla,
você não pode substituir nenhum de seus elementos por um novo valor.  As
listas são mutáveis, o que significa que você sempre pode alterar os
elementos de uma lista.  Somente elementos imutáveis podem ser usados
como chaves de dicionário e, portanto, apenas tuplas e não listas podem
ser usadas como chaves.


File: python.info,  Node: Como as listas são implementadas no CPython?,  Next: Como são os dicionários implementados no CPython?,  Prev: Por que existem tipos de dados separados para tuplas e listas?,  Up: FAQ sobre design e histórico

10.3.18 Como as listas são implementadas no CPython?
----------------------------------------------------

As listas do CPython são, na verdade, vetores de comprimento variável,
listas vinculadas não no estilo Lisp.  A implementação usa um vetor
contíguo de referências a outros objetos e mantém um ponteiro para esse
vetor e o comprimento de vetor em uma estrutura de cabeçalho de lista.

Isso torna a indexação de uma lista ‘a[i]’ uma operação cujo custo é
independente do tamanho da lista ou do valor do índice.

Quando itens são anexados ou inseridos, o vetor de referências é
redimensionado.  Alguma inteligência é aplicada para melhorar o
desempenho de anexar itens repetidamente; quando o vetor precisa ser
aumentado, algum espaço extra é alocado para que as próximas vezes não
exijam um redimensionamento real.


File: python.info,  Node: Como são os dicionários implementados no CPython?,  Next: Por que chaves de dicionário devem ser imutáveis?,  Prev: Como as listas são implementadas no CPython?,  Up: FAQ sobre design e histórico

10.3.19 Como são os dicionários implementados no CPython?
---------------------------------------------------------

Os dicionários do CPython são implementados como tabelas hash
redimensionáveis.  Em comparação com árvores B, isso oferece melhor
desempenho para pesquisa (de longe a operação mais comum) na maioria das
circunstâncias, e a implementação é mais simples.

Os dicionários funcionam calculando um código hash para cada chave
armazenada no dicionário usando a função embutida *note hash(): 5eb.  O
código hash varia amplamente dependendo da chave e da semente por
processo; por exemplo, ‘'Python'’ poderia fazer hash para ‘-539294296’
enquanto ‘'python'’, uma string que difere por um único bit, poderia
fazer hash para ‘1142331976’.  O código hash é então usado para calcular
um local em um vetor interno onde o valor será armazenado.  Supondo que
você esteja armazenando chaves com valores de hash diferentes, isso
significa que os dicionários levam um tempo constante – 'O'(1), na
notação Big-O – para recuperar uma chave.


File: python.info,  Node: Por que chaves de dicionário devem ser imutáveis?,  Next: Por que lista sort não retorna a lista ordenada?,  Prev: Como são os dicionários implementados no CPython?,  Up: FAQ sobre design e histórico

10.3.20 Por que chaves de dicionário devem ser imutáveis?
---------------------------------------------------------

A implementação da tabela hash de dicionários usa um valor hash
calculado a partir do valor da chave para encontrar a chave.  Se a chave
fosse um objeto mutável, seu valor poderia mudar e, portanto, seu hash
também poderia mudar.  Mas como quem altera o objeto-chave não pode
saber que ele estava sendo usado como chave de dicionário, ele não pode
mover a entrada no dicionário.  Então, quando você tentar procurar o
mesmo objeto no dicionário, ele não será encontrado porque seu valor de
hash é diferente.  Se você tentasse procurar o valor antigo, ele também
não seria encontrado, porque o valor do objeto encontrado naquele hash
seria diferente.

Se você deseja que um dicionário seja indexado com uma lista,
simplesmente converta primeiro a lista em uma tupla; a função ‘tuple(L)’
cria uma tupla com as mesmas entradas da lista ‘L’.  As tuplas são
imutáveis e, portanto, podem ser usadas como chaves de dicionário.

Algumas soluções inaceitáveis que foram propostas:

   - Listas de hash por endereço (ID do objeto).  Isto não funciona
     porque se você construir uma nova lista com o mesmo valor ela não
     será encontrada; por exemplo.:

          mydict = {[1, 2]: '12'}
          print(mydict[[1, 2]])

     levantaria uma exceção *note KeyError: 344. porque o id do ‘[1, 2]’
     usado na segunda linha difere daquele da primeira linha.  Em outras
     palavras, as chaves de dicionário devem ser comparadas usando ‘==’,
     não usando *note is: 2f5.

   - Fazer uma cópia ao usar uma lista como chave.  Isso não funciona
     porque a lista, sendo um objeto mutável, poderia conter uma
     referência a si mesma e então o código copiado entraria em um laço
     infinito.

   - Permitir listas como chaves, mas dizer ao usuário para não
     modificá-las.  Isso permitiria uma classe de bugs difíceis de
     rastrear em programas quando você esquecesse ou modificasse uma
     lista por acidente.  Também invalida uma importante invariante dos
     dicionários: todo valor em ‘d.keys()’ pode ser usado como chave do
     dicionário.

   - Marcar listas como somente leitura quando forem usadas como chave
     de dicionário.  O problema é que não é apenas o objeto de nível
     superior que pode alterar seu valor; você poderia usar uma tupla
     contendo uma lista como chave.  Inserir qualquer coisa como chave
     em um dicionário exigiria marcar todos os objetos acessíveis a
     partir daí como somente leitura – e, novamente, objetos
     autorreferenciais poderiam causar um laço infinito.

Existe um truque para contornar isso se você precisar, mas use-o por sua
própria conta e risco: você pode agrupar uma estrutura mutável dentro de
uma instância de classe que tenha um método *note __eq__(): b0d. e um
método *note __hash__(): b0e.  Você deve então certificar-se de que o
valor de hash para todos os objetos invólucros que residem em um
dicionário (ou outra estrutura baseada em hash) permaneça fixo enquanto
o objeto estiver no dicionário (ou outra estrutura).

     class ListWrapper:
         def __init__(self, the_list):
             self.the_list = the_list

         def __eq__(self, other):
             return self.the_list == other.the_list

         def __hash__(self):
             l = self.the_list
             result = 98767 - len(l)*555
             for i, el in enumerate(l):
                 try:
                     result = result + (hash(el) % 9999999) * 1001 + i
                 except Exception:
                     result = (result % 7777777) + i * 333
             return result

Observe que o cálculo do hash é complicado pela possibilidade de que
alguns membros da lista possam ser não não-hasheável e também pela
possibilidade de estouro aritmético.

Além disso, deve ser sempre o caso que se ‘o1 == o2’ (ou seja,
‘o1.__eq__(o2) is True’) então ‘hash(o1) == hash(o2)’ (ou seja,
‘o1.__hash__() == o2.__hash__()’), independentemente de o objeto estar
em um dicionário ou não.  Se você não cumprir essas restrições, os
dicionários e outras estruturas baseadas em hash se comportarão mal.

No caso de ‘ListWrapper’, sempre que o objeto invólucro estiver em um
dicionário, a lista agrupada não deve ser alterada para evitar
anomalias.  Não faça isso a menos que esteja preparado para pensar muito
sobre os requisitos e as consequências de não atendê-los corretamente.
Considere-se avisado.


File: python.info,  Node: Por que lista sort não retorna a lista ordenada?,  Next: Como você especifica e aplica um spec de interface no Python?,  Prev: Por que chaves de dicionário devem ser imutáveis?,  Up: FAQ sobre design e histórico

10.3.21 Por que lista.sort() não retorna a lista ordenada?
----------------------------------------------------------

Em situações nas quais desempenho importa, fazer uma cópia da lista só
para ordenar seria desperdício.  Portanto, ‘lista.sort()’ ordena a
lista.  De forma a lembrá-lo desse fato, isso não retorna a lista
ordenada.  Desta forma, você não vai ser confundido a acidentalmente
sobrescrever uma lista quando você precisar de uma cópia ordenada mas
também precisar manter a versão não ordenada.

Se você quiser retornar uma nova lista, use a função embutida *note
sorted(): be7. ao invés.  Essa função cria uma nova lista a partir de um
iterável provido, o ordena e retorna.  Por exemplo, aqui é como se itera
em cima das chaves de um dicionário de maneira ordenada:

     for key in sorted(mydict):
         ...  # use mydict[key] conforme quiser...


File: python.info,  Node: Como você especifica e aplica um spec de interface no Python?,  Next: Por que não há goto?,  Prev: Por que lista sort não retorna a lista ordenada?,  Up: FAQ sobre design e histórico

10.3.22 Como você especifica e aplica um spec de interface no Python?
---------------------------------------------------------------------

Uma especificação de interface para um módulo fornecida por linguagens
como C++ e Java descreve os protótipos para os métodos e funções do
módulo.  Muitos acham que a aplicação de especificações de interface em
tempo de compilação ajuda na construção de programas grandes.

Python 2.6 adiciona um módulo *note abc: 4. que permite definir Classes
Base Abstratas (ABCs).  Você pode então usar *note isinstance(): 442. e
*note issubclass(): 7c2. para verificar se uma instância ou classe
implementa um ABC específico.  O módulo *note collections.abc: 1e.
define um conjunto de ABCs úteis como *note Iterable: 23e2, *note
Container: 23e4. e *note MutableMapping: 10eb.

Para Python, muitas das vantagens das especificações de interface podem
ser obtidas por uma disciplina de teste apropriada para componentes.

Um bom conjunto de testes para um módulo pode fornecer um teste de
regressão e servir como uma especificação de interface do módulo e um
conjunto de exemplos.  Muitos módulos Python podem ser executados como
um script para fornecer um simples “autoteste”.  Mesmo módulos que usam
interfaces externas complexas muitas vezes podem ser testados
isoladamente usando emulações triviais da interface externa.  Os módulos
*note doctest: 3a. e *note unittest: 106. ou estruturas de teste de
terceiros podem ser usados para construir conjuntos de testes exaustivos
que exercitam cada linha de código em um módulo.

Uma disciplina de teste apropriada pode ajudar a construir aplicações
grandes e complexas no Python, assim como ter especificações de
interface.  Na verdade, pode ser melhor porque uma especificação de
interface não pode testar certas propriedades de um programa.  Por
exemplo, espera-se que o método *note list.append(): 6cd. adicione novos
elementos ao final de alguma lista interna; uma especificação de
interface não pode testar se sua implementação *note list.append(): 6cd.
realmente fará isso corretamente, mas é trivial verificar esta
propriedade em um conjunto de testes.

Escrever conjuntos de testes é muito útil e você pode querer projetar
seu código para torná-lo facilmente testável.  Uma técnica cada vez mais
popular, o desenvolvimento orientado a testes, exige a escrita de partes
do conjunto de testes primeiro, antes de escrever qualquer parte do
código real.  É claro que o Python permite que você seja desleixado e
nem escreva casos de teste.


File: python.info,  Node: Por que não há goto?,  Next: Por que strings brutas r-strings não podem terminar com uma contrabarra?,  Prev: Como você especifica e aplica um spec de interface no Python?,  Up: FAQ sobre design e histórico

10.3.23 Por que não há goto?
----------------------------

Na década de 1970, as pessoas perceberam que o goto irrestrito poderia
levar a um código “espaguete” confuso, difícil de entender e revisar.
Em uma linguagem de alto nível, também é desnecessário, desde que
existam maneiras de ramificar (em Python, com instruções *note if: 2f3.
e *note or: 2f6, *note and: 2f1. e expressões *note if: 2f3./*note else:
18c.) e iterar (com instruções *note while: 1d82. e *note for: 2f2,
possivelmente contendo *note continue: 9d1. e *note break: ab8.).

Também é possível usar exceções para fornecer um “goto estruturado” que
funcione mesmo em chamadas de função.  Muitos acham que as exceções
podem convenientemente emular todos os usos razoáveis das construções
‘go’ ou ‘goto’ de C, Fortran e outras linguagens.  Por exemplo:

     class label(Exception): pass  # declara um label

     try:
         ...
         if condition: raise label()  # goto label
         ...
     except label:  # destino do goto
         pass
     ...

Isso não permite que você pule para o meio de um laço, mas isso
geralmente é considerado um abuso de ‘goto’ de qualquer maneira.  Use
com moderação.


File: python.info,  Node: Por que strings brutas r-strings não podem terminar com uma contrabarra?,  Next: Por que o Python não tem uma instrução “with” para atribuição de atributos?,  Prev: Por que não há goto?,  Up: FAQ sobre design e histórico

10.3.24 Por que strings brutas (r-strings) não podem terminar com uma contrabarra?
----------------------------------------------------------------------------------

Mais precisamente, eles não podem terminar com um número ímpar de
contrabarras: a contrabarra não pareada no final escapa do caractere de
aspa de fechamento, deixando uma string não terminada.

Strings brutas foram projetadas para facilitar a criação de entrada para
processadores (principalmente mecanismos de expressão regular) que
desejam fazer seu próprio processamento de escape de contrabarra.  De
qualquer forma, esses processadores consideram uma contrabarra
incomparável como um erro, portanto, as strings brutas não permitem
isso.  Em troca, eles permitem que você transmita o caractere de aspas
da string escapando dele com uma contrabarra.  Essas regras funcionam
bem quando r-strings são usadas para a finalidade pretendida.

Se você estiver tentando criar nomes de caminho do Windows, observe que
todas as chamadas do sistema do Windows também aceitam barras:

     f = open("/mydir/file.txt")  # funciona normalmente!

Se você estiver tentando construir um nome de caminho para um comando
DOS, tente, por exemplo, algum desses

     dir = r"\this\is\my\dos\dir" "\\"
     dir = r"\this\is\my\dos\dir\ "[:-1]
     dir = "\\this\\is\\my\\dos\\dir\\"


File: python.info,  Node: Por que o Python não tem uma instrução “with” para atribuição de atributos?,  Next: Por que os geradores não suportam a instrução with?,  Prev: Por que strings brutas r-strings não podem terminar com uma contrabarra?,  Up: FAQ sobre design e histórico

10.3.25 Por que o Python não tem uma instrução “with” para atribuição de atributos?
-----------------------------------------------------------------------------------

Python tem uma instrução *note with: 5d2. que envolve a execução de um
bloco, chamando o código na entrada e na saída do bloco.  Algumas
linguagens têm uma construção desta forma:

     with obj:
         a = 1               # equivalente a obj.a = 1
         total = total + 1   # obj.total = obj.total + 1

Em Python, tal construção seria ambígua.

Outras linguagens, como Object Pascal, Delphi, e C++, usam tipos
estáticos, então é possível saber, de maneira não ambígua, que membro
está sendo atribuído.  Esse é o principal ponto da tipagem estática – o
compilador 'sempre' sabe o escopo de toda variável em tempo de
compilação.

O Python usa tipos dinâmicos.  É impossível saber com antecedência que
atributo vai ser referenciado em tempo de execução.  Atributos membro
podem ser adicionados ou removidos de objetos dinamicamente.  Isso torna
impossível saber, de uma leitura simples, que atributo está sendo
referenciado: um atributo local, um atributo global ou um atributo
membro?

Por exemplo, pegue o seguinte trecho incompleto:

     def foo(a):
         with a:
             print(x)

O trecho presume que ‘a’ deve ter um atributo de membro chamado ‘x’.  No
entanto, não há nada em Python que diga isso ao interpretador.  O que
deveria acontecer se ‘a’ for, digamos, um número inteiro?  Se houver uma
variável global chamada ‘x’, ela será usada dentro do bloco *note with:
5d2.?  Como você pode ver, a natureza dinâmica do Python torna essas
escolhas muito mais difíceis.

O principal benefício de *note with: 5d2. e recursos de linguagem
semelhantes (redução do volume de código) pode, no entanto, ser
facilmente alcançado em Python por atribuição.  Em vez de:

     function(args).mydict[index][index].a = 21
     function(args).mydict[index][index].b = 42
     function(args).mydict[index][index].c = 63

escreva isso:

     ref = function(args).mydict[index][index]
     ref.a = 21
     ref.b = 42
     ref.c = 63

Isso também tem o efeito colateral de aumentar a velocidade de execução
porque as ligações de nome são resolvidas a tempo de execução em Python,
e a segunda versão só precisa performar a resolução uma vez.

Propostas semelhantes que introduziriam sintaxe para reduzir ainda mais
o volume do código, como o uso de um ‘ponto inicial’, foram rejeitadas
em favor da explicitação (consulte
‘https://mail.python.org/pipermail/python-ideas/2016-May/040070.html’).


File: python.info,  Node: Por que os geradores não suportam a instrução with?,  Next: Por que dois pontos são necessários para as instruções de if/while/def/class?,  Prev: Por que o Python não tem uma instrução “with” para atribuição de atributos?,  Up: FAQ sobre design e histórico

10.3.26 Por que os geradores não suportam a instrução with?
-----------------------------------------------------------

Por razões técnicas, um gerador usado diretamente como gerenciador de
contexto não funcionaria corretamente.  Quando, como é mais comum, um
gerador é usado como um iterador executado até a conclusão, nenhum
fechamento é necessário.  Quando estiver, envolva-o como *note
contextlib.closing(generator): 13d0. na instrução *note with: 5d2.


File: python.info,  Node: Por que dois pontos são necessários para as instruções de if/while/def/class?,  Next: Por que o Python permite vírgulas ao final de listas e tuplas?,  Prev: Por que os geradores não suportam a instrução with?,  Up: FAQ sobre design e histórico

10.3.27 Por que dois pontos são necessários para as instruções de if/while/def/class?
-------------------------------------------------------------------------------------

Os dois pontos são obrigatórios primeiramente para melhorar a leitura
(um dos resultados da linguagem experimental ABC). Considere isso:

     if a == b
         print(a)

versus

     if a == b:
         print(a)

Note como a segunda é ligeiramente mais fácil de ler.  Note com mais
atenção como os dois pontos iniciam o exemplo nessa resposta de FAQ; é
um uso padrão em inglês.

Outro motivo menor é que os dois pontos deixam mais fácil para os
editores com realce de sintaxe; eles podem procurar por dois pontos para
decidir quando a recuo precisa ser aumentada em vez de precisarem fazer
uma análise mais elaborada do texto do programa.


File: python.info,  Node: Por que o Python permite vírgulas ao final de listas e tuplas?,  Prev: Por que dois pontos são necessários para as instruções de if/while/def/class?,  Up: FAQ sobre design e histórico

10.3.28 Por que o Python permite vírgulas ao final de listas e tuplas?
----------------------------------------------------------------------

O Python deixa você adicionar uma vírgula ao final de listas, tuplas e
dicionários:

     [1, 2, 3,]
     ('a', 'b', 'c',)
     d = {
         "A": [1, 5],
         "B": [6, 7],  # a vírgula ao final é opcional, mas é bom estilo
     }

Existem várias razões para permitir isso.

Quando você possui um valor literal para uma lista, tupla, ou dicionário
disposta através de múltiplas linhas, é mais fácil adicionar mais
elementos porque você não precisa lembrar de adicionar uma vírgula na
linha anterior.  As linhas também podem ser reordenadas sem criar um
erro de sintaxe.

Acidentalmente omitir a vírgula pode levar a erros que são difíceis de
diagnosticar.  Por exemplo:

     x = [
       "fee",
       "fie"
       "foo",
       "fum"
     ]

Essa lista parece ter quatro elementos, mas na verdade contém três:
“fee”, “fiefoo” e “fum”.  Sempre adicionar a vírgula evita essa fonte de
erro.

Permitir a vírgula no final também pode deixar a geração de código
programático mais fácil.


File: python.info,  Node: FAQ de Bibliotecas e Extensões,  Next: FAQ sobre Extensão/Incorporação,  Prev: FAQ sobre design e histórico,  Up: Perguntas Frequentes Sobre Python

10.4 FAQ de Bibliotecas e Extensões
===================================

* Menu:

* Questões gerais sobre bibliotecas::
* Tarefas comuns::
* Threads::
* Entrada e Saída: Entrada e Saída<2>.
* Programação Rede / Internet::
* Base de Dados::
* Matemáticos e Numéricos::


File: python.info,  Node: Questões gerais sobre bibliotecas,  Next: Tarefas comuns,  Up: FAQ de Bibliotecas e Extensões

10.4.1 Questões gerais sobre bibliotecas
----------------------------------------

* Menu:

* Como encontrar um módulo ou aplicação para realizar uma tarefa X?::
* Onde está o código-fonte do math.py (socket.py, regex.py, etc.)?: Onde está o código-fonte do math py socket py regex py etc ?.
* Como tornar um script Python executável no Unix?::
* Existe um pacote de curses/termcap para Python?::
* Existe a função onexit() equivalente ao C no Python?: Existe a função onexit equivalente ao C no Python?.
* Por que o meu manipulador de sinal não funciona?::


File: python.info,  Node: Como encontrar um módulo ou aplicação para realizar uma tarefa X?,  Next: Onde está o código-fonte do math py socket py regex py etc ?,  Up: Questões gerais sobre bibliotecas

10.4.1.1 Como encontrar um módulo ou aplicação para realizar uma tarefa X?
..........................................................................

Verifique *note a Referência de Bibliotecas: 144. para ver se há um
módulo relevante da biblioteca padrão.  (Eventualmente, você aprenderá o
que está na biblioteca padrão e poderá pular esta etapa.)

Para pacotes de terceiros, pesquise no Python Package Index(1) ou tente
no Google(2) ou outro buscador na web.  Pesquisando por “Python” mais
uma ou dois argumentos nomeados do seu tópico de interesse geralmente
encontrará algo útil.

   ---------- Footnotes ----------

   (1) https://pypi.org

   (2) https://www.google.com


File: python.info,  Node: Onde está o código-fonte do math py socket py regex py etc ?,  Next: Como tornar um script Python executável no Unix?,  Prev: Como encontrar um módulo ou aplicação para realizar uma tarefa X?,  Up: Questões gerais sobre bibliotecas

10.4.1.2 Onde está o código-fonte do math.py (socket.py, regex.py, etc.)?
.........................................................................

Se você não conseguir encontrar um arquivo de origem para um módulo, ele
pode ser um módulo embutido ou carregado dinamicamente, implementado em
C, C++ ou outra linguagem compilada.  Nesse caso, você pode não ter o
arquivo de origem ou pode ser algo como ‘mathmodule.c’, em algum lugar
do diretório de origem C (não no caminho do Python).

Existem (pelo menos) três tipos de módulos no Python:

  1. módulos escritos em Python (.py)

  2. módulos escritos em C e carregados dinamicamente (.dll, .pyd, .so,
     .sl, etc.);

  3. módulos escritos em C e vinculados ao interpretador; para obter uma
     dessas listas, digite:

          import sys
          print(sys.builtin_module_names)


File: python.info,  Node: Como tornar um script Python executável no Unix?,  Next: Existe um pacote de curses/termcap para Python?,  Prev: Onde está o código-fonte do math py socket py regex py etc ?,  Up: Questões gerais sobre bibliotecas

10.4.1.3 Como tornar um script Python executável no Unix?
.........................................................

Você precisa fazer duas coisas: o arquivo do script deve ser executável
e a primeira linha deve começar com ‘#!’ seguido do caminho do
interpretador Python.

Inicialmente, execute o ‘chmod +x scriptfile’ ou, talvez, o ‘chmod 755
scriptfile’.

A segunda coisa pode ser feita de várias maneiras.  A maneira mais
direta é escrever

     #!/usr/local/bin/python

como a primeira linha do seu arquivo, usando o endereço do caminho onde
o interpretador Python está instalado.

Se você deseja que o script seja independente de onde o interpretador
Python mora, você pode usar o programa ‘env’.  Quase todas as variantes
do Unix suportam o seguinte, presumindo que o interpretador Python
esteja em um diretório no ‘PATH’ do usuário:

     #!/usr/bin/env python

Não faça isso para CGI scripts.  A variável ‘PATH’ para CGI scripts é
normalmente muito pequena, portanto, você precisa usar o caminho
completo do interpretador.

Ocasionalmente, o ambiente de um usuário está tão cheio que o programa
‘/usr/bin/env’ falha; ou não há nenhum programa env.  Nesse caso, você
pode tentar o seguinte hack (graças a Alex Rezinsky):

     #! /bin/sh
     """:"
     exec python $0 ${1+"$@"}
     """

Uma pequena desvantagem é que isso define o script’s __doc__ string.
Entretanto, você pode corrigir isso adicionando

     __doc__ = """...Alguma coisa..."""


File: python.info,  Node: Existe um pacote de curses/termcap para Python?,  Next: Existe a função onexit equivalente ao C no Python?,  Prev: Como tornar um script Python executável no Unix?,  Up: Questões gerais sobre bibliotecas

10.4.1.4 Existe um pacote de curses/termcap para Python?
........................................................

Para variantes Unix: A distribuição fonte padrão do Python vem com um
módulo do curses no subdiretório Modules(1), embora não seja compilado
por padrão.  (Observe que isso não está disponível na distribuição do
Windows – não há módulo curses para o Windows.)

O módulo *note curses: 2b. provê recursos básicos de curses, bem como
muitas funções adicionais de ncurses e curses SYSV, como cor, suporte a
conjuntos de caracteres alternativos, pads e suporte a mouse.  Isso
significa que o módulo não é compatível com sistemas operacionais que
possuem apenas maldições BSD, mas não parece haver nenhum sistema
operacional mantido atualmente que se enquadre nesta categoria.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Modules


File: python.info,  Node: Existe a função onexit equivalente ao C no Python?,  Next: Por que o meu manipulador de sinal não funciona?,  Prev: Existe um pacote de curses/termcap para Python?,  Up: Questões gerais sobre bibliotecas

10.4.1.5 Existe a função onexit() equivalente ao C no Python?
.............................................................

O módulo *note atexit: c. fornece uma função de registro similar ao
‘onexit()’ do C.


File: python.info,  Node: Por que o meu manipulador de sinal não funciona?,  Prev: Existe a função onexit equivalente ao C no Python?,  Up: Questões gerais sobre bibliotecas

10.4.1.6 Por que o meu manipulador de sinal não funciona?
.........................................................

O maior problema é que o manipulador de sinal é declarado com uma lista
de argumentos incorretos.  Isso é chamado como

     manipulador(num_sinal, quadro)

portanto, isso deve ser declarado com dois parâmetros:

     def manipulador(num_sinal, quadro):
         ...


File: python.info,  Node: Tarefas comuns,  Next: Threads,  Prev: Questões gerais sobre bibliotecas,  Up: FAQ de Bibliotecas e Extensões

10.4.2 Tarefas comuns
---------------------

* Menu:

* Como testar um programa ou componente Python?::
* Como faço para criar uma documentação de doc strings?::
* Como faço para pressionar uma tecla de cada vez?::


File: python.info,  Node: Como testar um programa ou componente Python?,  Next: Como faço para criar uma documentação de doc strings?,  Up: Tarefas comuns

10.4.2.1 Como testar um programa ou componente Python?
......................................................

A Python vem com dois frameworks de teste.  O módulo *note doctest: 3a.
busca por exemplos nas docstrings de um módulo e os executa, comparando
o resultado com a saída esperada informada na docstring.

O módulo *note unittest: 106. é uma estrutura de teste mais sofisticada,
modelada nas estruturas de teste do Java e do Smalltalk.

Para facilitar os testes, você deve usar um bom design modular em seu
programa.  Seu programa deve ter quase todas as funcionalidades
encapsuladas em funções ou métodos de classe – e isso às vezes tem o
efeito surpreendente e agradável de fazer o programa executar mais
rápido (porque os acessos às variáveis locais são mais rápidos que os
acessos globais).  Além disso, o programa deve evitar depender de
variáveis globais mutantes, pois isso torna os testes muito mais
difíceis de serem realizados.

A lógica principal do seu programa pode tão simples quanto

     if __name__ == "__main__":
         main_logic()

no botão do módulo principal do seus programa.

Depois que seu programa estiver organizado como uma coleção tratável de
comportamentos de funções e classes, você deverá escrever funções de
teste que exercitem os comportamentos.  Um conjunto de testes que
automatiza uma sequência de testes pode ser associado a cada módulo.
Parece muito trabalhoso, mas como o Python é tão conciso e flexível, é
surpreendentemente fácil.  Você pode tornar a codificação muito mais
agradável e divertida escrevendo suas funções de teste em paralelo com o
“código de produção”, pois isso torna mais fácil encontrar bugs e até
mesmo falhas de design mais cedo.

Os “módulos de suporte” que não se destinam a ser o módulo principal de
um programa podem incluir um autoteste do módulo.

     if __name__ == "__main__":
         self_test()

Mesmo quando as interfaces externas não estiverem disponíveis, os
programas que interagem com interfaces externas complexas podem ser
testados usando as interfaces “falsas” implementadas no Python.


File: python.info,  Node: Como faço para criar uma documentação de doc strings?,  Next: Como faço para pressionar uma tecla de cada vez?,  Prev: Como testar um programa ou componente Python?,  Up: Tarefas comuns

10.4.2.2 Como faço para criar uma documentação de doc strings?
..............................................................

O módulo *note pydoc: b5. pode criar HTML a partir das strings de
documentos em seu código-fonte Python.  Uma alternativa para criar
documentação de API puramente a partir de docstrings é epydoc(1).
Sphinx(2) também pode incluir conteúdo docstring.

   ---------- Footnotes ----------

   (1) https://epydoc.sourceforge.net/

   (2) https://www.sphinx-doc.org


File: python.info,  Node: Como faço para pressionar uma tecla de cada vez?,  Prev: Como faço para criar uma documentação de doc strings?,  Up: Tarefas comuns

10.4.2.3 Como faço para pressionar uma tecla de cada vez?
.........................................................

Para variantes do Unix existem várias soluções.  Apesar de ser um módulo
grande para aprender, é simples fazer isso usando o módulo curses.


File: python.info,  Node: Threads,  Next: Entrada e Saída<2>,  Prev: Tarefas comuns,  Up: FAQ de Bibliotecas e Extensões

10.4.3 Threads
--------------

* Menu:

* Como faço para programar usando threads?::
* Nenhuma de minhas threads parece funcionar, por que?: Nenhuma de minhas threads parece funcionar por que?.
* Como distribuo o trabalho entre várias threads de trabalho?::
* Que tipos de variáveis globais mutáveis são seguras para thread?::
* Não podemos remover a Trava Global do interpretador?::


File: python.info,  Node: Como faço para programar usando threads?,  Next: Nenhuma de minhas threads parece funcionar por que?,  Up: Threads

10.4.3.1 Como faço para programar usando threads?
.................................................

Certifique-se de usar o módulo *note threading: ed. e não o módulo *note
_thread: 2.  O módulo *note threading: ed. constrói abstrações
convenientes sobre as primitivas de baixo nível fornecidas pelo módulo
*note _thread: 2.


File: python.info,  Node: Nenhuma de minhas threads parece funcionar por que?,  Next: Como distribuo o trabalho entre várias threads de trabalho?,  Prev: Como faço para programar usando threads?,  Up: Threads

10.4.3.2 Nenhuma de minhas threads parece funcionar, por que?
.............................................................

Assim que a thread principal acaba, todas as threads são eliminadas.
Sua thread principal está sendo executada tão rápida que não está dando
tempo para realizar qualquer trabalho.

Uma solução simples é adicionar um tempo de espera no final do programa
até que todos os threads sejam concluídos:

     import threading, time

     def thread_task(name, n):
         for i in range(n):
             print(name, i)

     for i in range(10):
         T = threading.Thread(target=thread_task, args=(str(i), i))
         T.start()

     time.sleep(10)  # <---------------------------!

Mas agora (em muitas plataformas) as threads não funcionam em paralelo,
mas parecem funcionar sequencialmente, um de cada vez!  O motivo é que o
agendador de threads do sistema operacional não inicia uma nova thread
até que a thread anterior seja bloqueada.

Uma solução simples é adicionar um pequeno tempo de espera no início da
função:

     def thread_task(name, n):
         time.sleep(0.001)  # <--------------------!
         for i in range(n):
             print(name, i)

     for i in range(10):
         T = threading.Thread(target=thread_task, args=(str(i), i))
         T.start()

     time.sleep(10)

Em vez de tentar adivinhar um bom valor de atraso para *note
time.sleep(): 69d, é melhor usar algum tipo de mecanismo de semáforo.
Uma ideia é usar o módulo *note queue: b6. para criar um objeto fila,
deixar cada thread anexar um token à fila quando terminar e deixar a
thread principal ler tantos tokens da fila quantos threads houver.


File: python.info,  Node: Como distribuo o trabalho entre várias threads de trabalho?,  Next: Que tipos de variáveis globais mutáveis são seguras para thread?,  Prev: Nenhuma de minhas threads parece funcionar por que?,  Up: Threads

10.4.3.3 Como distribuo o trabalho entre várias threads de trabalho?
....................................................................

A maneira mais fácil é usar o módulo *note concurrent.futures: 21,
especialmente a classe *note ThreadPoolExecutor: 742.

Ou, se quiser um controle preciso sobre o algoritmo de despacho, você
pode escrever sua própria lógica manualmente.  Use o módulo *note queue:
b6. para criar uma fila contendo uma lista de tarefas.  A classe *note
Queue: 13db. mantém uma lista de objetos e possui um método ‘.put(obj)’
que adiciona itens à fila e um método ‘.get()’ para retorná-los.  A
classe cuidará da trava necessário para garantir que cada trabalho seja
entregue exatamente uma vez.

Aqui está um exemplo simples:

     import threading, queue, time

     # A thread do worker obtém a tarefa da fila. Quando a fila está vazia,
     # ela presume que não haverá mais tarefas e encerra.
     # (Realisticamente, workers trabalharão até serem encerrados.)
     def worker():
         print('Running worker')
         time.sleep(0.1)
         while True:
             try:
                 arg = q.get(block=False)
             except queue.Empty:
                 print('Worker', threading.current_thread(), end=' ')
                 print('queue empty')
                 break
             else:
                 print('Worker', threading.current_thread(), end=' ')
                 print('running with argument', arg)
                 time.sleep(0.5)

     # Cria a fila
     q = queue.Queue()

     # Inicia um pool de 5 workers
     for i in range(5):
         t = threading.Thread(target=worker, name='worker %i' % (i+1))
         t.start()

     # Começa a adicionar tarefa à fila
     for i in range(50):
         q.put(i)

     # Dá às threads tempo para executar
     print('Main thread sleeping')
     time.sleep(5)

Quando executado, isso produzirá a seguinte saída:

     Running worker
     Running worker
     Running worker
     Running worker
     Running worker
     Main thread sleeping
     Worker <Thread(worker 1, started 130283832797456)> running with argument 0
     Worker <Thread(worker 2, started 130283824404752)> running with argument 1
     Worker <Thread(worker 3, started 130283816012048)> running with argument 2
     Worker <Thread(worker 4, started 130283807619344)> running with argument 3
     Worker <Thread(worker 5, started 130283799226640)> running with argument 4
     Worker <Thread(worker 1, started 130283832797456)> running with argument 5
     ...

Consulte a documentação do módulo para mais detalhes; a classe *note
Queue: 13db. fornece uma interface com recursos.


File: python.info,  Node: Que tipos de variáveis globais mutáveis são seguras para thread?,  Next: Não podemos remover a Trava Global do interpretador?,  Prev: Como distribuo o trabalho entre várias threads de trabalho?,  Up: Threads

10.4.3.4 Que tipos de variáveis globais mutáveis são seguras para thread?
.........................................................................

Uma *note trava global do interpretador: 148. (GIL) é usada internamente
para garantir que apenas um thread seja executado na VM Python por vez.
Em geral, Python oferece alternar entre threads apenas entre instruções
de bytecode; a frequência com que ele muda pode ser definida via *note
sys.setswitchinterval(): 951.  Cada instrução de bytecode e, portanto,
todo o código de implementação C alcançado por cada instrução é,
portanto, atômico do ponto de vista de um programa Python.

Em teoria, isso significa que uma contabilidade exata requer um
entendimento exato da implementação do bytecode PVM. Na prática, isso
significa que as operações em variáveis compartilhadas de tipos de dados
integrados (inteiros, listas, dicionários, etc.)  que “parecem atômicas”
realmente são.

Por exemplo, as seguintes operações são todas atômicas (L, L1, L2 são
listas, D, D1, D2 são dicionários, x, y são objetos, i, j são inteiros):

     L.append(x)
     L1.extend(L2)
     x = L[i]
     x = L.pop()
     L1[i:j] = L2
     L.sort()
     x = y
     x.field = y
     D[x] = y
     D1.update(D2)
     D.keys()

Esses não são:

     i = i+1
     L.append(L[-1])
     L[i] = L[j]
     D[x] = D[x] + 1

Operações que substituem outros objetos podem invocar o método *note
__del__(): 1033. desses outros objetos quando sua contagem de
referências chega a zero, e isso pode afetar as coisas.  Isto é
especialmente verdadeiro para as atualizações em massa de dicionários e
listas.  Em caso de dúvida, use um mutex!


File: python.info,  Node: Não podemos remover a Trava Global do interpretador?,  Prev: Que tipos de variáveis globais mutáveis são seguras para thread?,  Up: Threads

10.4.3.5 Não podemos remover a Trava Global do interpretador?
.............................................................

A *note trava global do interpretador: 148. (GIL) é frequentemente vista
como um obstáculo para a implantação do Python em máquinas servidoras
multiprocessadas de ponta, porque um programa Python multi-threaded
efetivamente usa apenas uma CPU, devido à insistência de que (quase)
todo código Python só pode ser executado enquanto a GIL é mantida.

Com a aprovação da PEP 703(1), o trabalho está em andamento para remover
a GIL da implementação CPython do Python.  Inicialmente, ele será
implementado como um sinalizador opcional de compilador ao construir o
interpretador, e assim construções separadas estarão disponíveis com e
sem a GIL. A longo prazo, a esperança é estabelecer uma única
construção, uma vez que as implicações de desempenho da remoção do GIL
sejam totalmente compreendidas.  O Python 3.13 provavelmente será a
primeira versão contendo esse trabalho, embora possa não ser
completamente funcional nesta versão.

O trabalho atual para remover a GIL é baseado em um fork do Python 3.9
com a GIL removida(2) por Sam Gross.  Antes disso, na época do Python
1.5, Greg Stein implementou um conjunto abrangente de patches (os
patches de “threads livres”) que removeu a GIL e a substituiu por um
travamento de granulação fina.  Adam Olsen fez um experimento semelhante
em seu projeto python-safethread(3).  Infelizmente, ambos os
experimentos iniciais exibiram uma queda acentuada no desempenho de
thread único (pelo menos 30% mais lento), devido à quantidade de
travamento de granulação fina necessária para compensar a remoção da
GIL.  O fork do Python 3.9 é a primeira tentativa de remover a GIL com
um impacto aceitável no desempenho.

A presença da GIL nas versões atuais do Python não significa que você
não pode fazer bom uso do Python em máquinas com várias CPUs!  Você só
precisa ser criativo ao dividir o trabalho entre vários 'processos' em
vez de vários 'threads'.  A classe *note ProcessPoolExecutor: 8f4. no
novo módulo *note concurrent.futures: 21. fornece uma maneira fácil de
fazer isso; o módulo *note multiprocessing: 94. fornece uma API de nível
inferior, caso você queira mais controle sobre o despacho de tarefas.

O uso criterioso de extensões C também ajudará; se você usar uma
extensão C para executar uma tarefa demorada, a extensão poderá liberar
a GIL enquanto o thread de execução estiver no código C e permitir que
outros threads realizem algum trabalho.  Alguns módulos de biblioteca
padrão como *note zlib: 133. e *note hashlib: 68. já fazem isso.

Uma abordagem alternativa para reduzir o impacto da GIL é fazer da GIL
uma trava por estado do interpretador em vez de verdadeiramente global.
Isso foi *note implementado pela primeira vez no Python 3.12: 43c. e
está disponível na API C. Uma interface Python para ele é esperada no
Python 3.13.  A principal limitação para ele no momento provavelmente
são módulos de extensão de terceiros, já que estes devem ser escritos
com múltiplos interpretadores em mente para serem utilizáveis, então
muitos módulos de extensão mais antigos não serão utilizáveis.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0703/

   (2) https://github.com/colesbury/nogil

   (3) https://code.google.com/archive/p/python-safethread


File: python.info,  Node: Entrada e Saída<2>,  Next: Programação Rede / Internet,  Prev: Threads,  Up: FAQ de Bibliotecas e Extensões

10.4.4 Entrada e Saída
----------------------

* Menu:

* Como faço para excluir um arquivo? (E outras perguntas sobre arquivos): Como faço para excluir um arquivo? E outras perguntas sobre arquivos.
* Como eu copio um arquivo?::
* Como leio (ou escrevo) dados binários?: Como leio ou escrevo dados binários?.
* Por que não consigo usar os.read() em um encadeamento com os.popen()?: Por que não consigo usar os read em um encadeamento com os popen ?.
* Como acesso a porta serial (RS232)?: Como acesso a porta serial RS232 ?.
* Por que o sys.stdout (stdin, stderr) não fecha?: Por que o sys stdout stdin stderr não fecha?.


File: python.info,  Node: Como faço para excluir um arquivo? E outras perguntas sobre arquivos,  Next: Como eu copio um arquivo?,  Up: Entrada e Saída<2>

10.4.4.1 Como faço para excluir um arquivo? (E outras perguntas sobre arquivos)
...............................................................................

Use ‘os.remove(arquivo)’ ou ‘os.unlink(arquivo)’; para documentação,
veja o módulo *note os: a1.  As duas funções são idênticas; *note
unlink(): 1134. é simplesmente o nome da chamada do sistema para esta
função no Unix.

Para remover um diretório, use *note os.rmdir(): 1132.; use *note
os.mkdir(): 21d. para criar um.  ‘os.makedirs(caminho)’ criará quaisquer
diretórios intermediários em ‘path’ que não existam.
‘os.removedirs(caminho)’ removerá diretórios intermediários, desde que
estejam vazios; se quiser excluir toda uma árvore de diretórios e seu
conteúdo, use *note shutil.rmtree(): 301.

Para renomear um arquivos, use ‘os.rename(caminho_antigo,
caminho_novo)’.

Para truncar um arquivo, abra-o usando ‘f = open(arquivo, "rb+")’, e use
‘f.truncate(posição)’; a posição tem como padrão a posição atual de
busca.  Há também ‘os.ftruncate(fd, posição)’ para arquivos abertos com
*note os.open(): dba, onde 'fd' é o descritor de arquivo (um pequeno
inteiro).

O módulo *note shutil: c5. também contém uma série de funções para
trabalhar em arquivos, incluindo *note copyfile(): a63, *note
copytree(): a33. e *note rmtree(): 301.


File: python.info,  Node: Como eu copio um arquivo?,  Next: Como leio ou escrevo dados binários?,  Prev: Como faço para excluir um arquivo? E outras perguntas sobre arquivos,  Up: Entrada e Saída<2>

10.4.4.2 Como eu copio um arquivo?
..................................

O módulo *note shutil: c5. contém uma função *note copyfile(): a63.
Observe que em volumes NTFS do Windows, ele não copia fluxos de dados
alternativos(1) nem forks de recursos(2) em volumes HFS+ do macOS,
embora ambos sejam raramente usados agora.  Ele também não copia
permissões de arquivo e metadados, embora usar *note shutil.copy2():
a65. em vez disso preserve a maioria (embora não todos) deles.

   ---------- Footnotes ----------

   (1) https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)

   (2) https://en.wikipedia.org/wiki/Resource_fork


File: python.info,  Node: Como leio ou escrevo dados binários?,  Next: Por que não consigo usar os read em um encadeamento com os popen ?,  Prev: Como eu copio um arquivo?,  Up: Entrada e Saída<2>

10.4.4.3 Como leio (ou escrevo) dados binários?
...............................................

Para ler ou escrever formatos de dados binários complexos, é melhor usar
o módulo *note struct: d5.  Ele permite que você pegue uma string
contendo dados binários (geralmente números) e a converta em objetos
Python; e vice-versa.

Por exemplo, o código a seguir lê dois inteiros de 2 bytes e um inteiro
de 4 bytes no formato big-endian de um arquivo:

     import struct

     with open(filename, "rb") as f:
         s = f.read(8)
         x, y, z = struct.unpack(">hhl", s)

O ‘>’ na string de formato força dados big-endian; a letra ‘h’ lê um
“inteiro curto” (2 bytes) e ‘l’ lê um “inteiro longo” (4 bytes) da
string.

Para dados mais regulares (por exemplo, uma lista homogênea de ints ou
floats), você também pode usar o módulo *note array: 7.

     Nota: Para ler e escrever dados binários, é obrigatório abrir o
     arquivo no modo binário (aqui, passando ‘"rb"’ para *note open():
     51c.).  Se você usar ‘"r"’ em vez disso (o padrão), o arquivo será
     aberto no modo texto e ‘f.read()’ retornará objetos *note str: 44c.
     em vez de objetos *note bytes: 1c2.


File: python.info,  Node: Por que não consigo usar os read em um encadeamento com os popen ?,  Next: Como acesso a porta serial RS232 ?,  Prev: Como leio ou escrevo dados binários?,  Up: Entrada e Saída<2>

10.4.4.4 Por que não consigo usar os.read() em um encadeamento com os.popen()?
..............................................................................

*note os.read(): dbd. é uma função de baixo nível que pega um descritor
de arquivo, um pequeno inteiro representando o arquivo aberto.  *note
os.popen(): a91. cria um objeto arquivo de alto nível, o mesmo tipo
retornado pela função embutida *note open(): 51c.  Assim, para ler 'n'
bytes de um pipe 'p' criado com *note os.popen(): a91, você precisa usar
‘p.read(n)’.


File: python.info,  Node: Como acesso a porta serial RS232 ?,  Next: Por que o sys stdout stdin stderr não fecha?,  Prev: Por que não consigo usar os read em um encadeamento com os popen ?,  Up: Entrada e Saída<2>

10.4.4.5 Como acesso a porta serial (RS232)?
............................................

Para Win32, OSX, Linux, BSD, Jython, IronPython:

     pyserial(1)

Para Unix, veja uma postagem da Usenet de Mitch Chapman:

     ‘https://groups.google.com/groups?selm=34A04430.CF9@ohioee.com’

   ---------- Footnotes ----------

   (1) https://pypi.org/project/pyserial/


File: python.info,  Node: Por que o sys stdout stdin stderr não fecha?,  Prev: Como acesso a porta serial RS232 ?,  Up: Entrada e Saída<2>

10.4.4.6 Por que o sys.stdout (stdin, stderr) não fecha?
........................................................

Os *note objetos arquivos: 1203. do Python são uma camada de alto nível
de abstração em descritores de arquivo C de baixo nível.

Para a maioria dos objetos arquivo que você cria em Python por meio da
função embutida *note open(): 51c, ‘f.close()’ marca o objeto arquivo
Python como fechado do ponto de vista do Python e também organiza o
fechamento do descritor de arquivo C subjacente.  Isso também acontece
automaticamente no destrutor de ‘f’, quando ‘f’ se torna lixo.

Mas stdin, stdout e stderr são tratados de forma especial pelo Python,
devido ao status especial que também lhes é dado pelo C. Executar
‘sys.stdout.close()’ marca o objeto arquivo de nível Python como
fechado, mas 'não' fecha o descritor de arquivo C associado.

Para fechar o descritor de arquivo C subjacente para um desses três,
você deve primeiro ter certeza de que é isso que você realmente quer
fazer (por exemplo, você pode confundir módulos de extensão tentando
fazer E/S). Se for, use *note os.close(): b8a.:

     os.close(stdin.fileno())
     os.close(stdout.fileno())
     os.close(stderr.fileno())

Ou você pode usar as constantes numéricas 0, 1 e 2, respectivamente.


File: python.info,  Node: Programação Rede / Internet,  Next: Base de Dados,  Prev: Entrada e Saída<2>,  Up: FAQ de Bibliotecas e Extensões

10.4.5 Programação Rede / Internet
----------------------------------

* Menu:

* Quais ferramentas para WWW existem no Python?::
* Qual módulo devo usar para ajudar na geração do HTML?::
* Como envio um e-mail de um script Python?::
* Como evito um bloqueio no método connect() de um soquete?: Como evito um bloqueio no método connect de um soquete?.


File: python.info,  Node: Quais ferramentas para WWW existem no Python?,  Next: Qual módulo devo usar para ajudar na geração do HTML?,  Up: Programação Rede / Internet

10.4.5.1 Quais ferramentas para WWW existem no Python?
......................................................

Veja os capítulos intitulados *note Protocolos de Internet e Suporte:
3b6e. e *note Manuseio de Dados na Internet: 3763. no Manual de
Referência da Biblioteca.  Python tem muitos módulos que ajudarão você a
construir sistemas web do lado do servidor e do lado do cliente.

Um resumo dos frameworks disponíveis é disponibilizado por Paul Boddie
em ‘https://wiki.python.org/moin/WebProgramming’.


File: python.info,  Node: Qual módulo devo usar para ajudar na geração do HTML?,  Next: Como envio um e-mail de um script Python?,  Prev: Quais ferramentas para WWW existem no Python?,  Up: Programação Rede / Internet

10.4.5.2 Qual módulo devo usar para ajudar na geração do HTML?
..............................................................

Você pode encontrar uma coleção de links úteis na página wiki
WebProgramming(1).

   ---------- Footnotes ----------

   (1) https://wiki.python.org/moin/WebProgramming


File: python.info,  Node: Como envio um e-mail de um script Python?,  Next: Como evito um bloqueio no método connect de um soquete?,  Prev: Qual módulo devo usar para ajudar na geração do HTML?,  Up: Programação Rede / Internet

10.4.5.3 Como envio um e-mail de um script Python?
..................................................

Use a biblioteca padrão do módulo *note smtplib: ca.

Aqui está um remetente de e-mail interativo muito simples.  Este método
funcionará em qualquer host que suporte o protocolo SMTP.

     import sys, smtplib

     fromaddr = input("From: ")
     toaddrs  = input("To: ").split(',')
     print("Enter message, end with ^D:")
     msg = ''
     while True:
         line = sys.stdin.readline()
         if not line:
             break
         msg += line

     # O envio de e-mail real
     server = smtplib.SMTP('localhost')
     server.sendmail(fromaddr, toaddrs, msg)
     server.quit()

Uma alternativa somente para Unix usa o sendmail.  A localização do
programa sendmail varia entre os sistemas; às vezes é
‘/usr/lib/sendmail’, às vezes ‘/usr/sbin/sendmail’.  A página de manual
do sendmail vai ajudar você.  Aqui está um código de exemplo:

     import os

     SENDMAIL = "/usr/sbin/sendmail"  # local do sendmail
     p = os.popen("%s -t -i" % SENDMAIL, "w")
     p.write("To: receiver@example.com\n")
     p.write("Subject: teste\n")
     p.write("\n")  # linha vazia separando cabeçalho do corpo
     p.write("Algum texto\n")
     p.write("mais um pouco de texto\n")
     sts = p.close()
     if sts != 0:
         print("Status de saída do sendmail", sts)


File: python.info,  Node: Como evito um bloqueio no método connect de um soquete?,  Prev: Como envio um e-mail de um script Python?,  Up: Programação Rede / Internet

10.4.5.4 Como evito um bloqueio no método connect() de um soquete?
..................................................................

O módulo *note select: c1. é normalmente usado para ajudar com E/S
assíncrona nos soquetes.

Para evitar que a conexão TCP bloqueie, você pode definir o soquete para
o modo sem bloqueio.  Então, quando você fizer o *note connect(): dcb,
você se conectará imediatamente (improvável) ou obterá uma exceção que
contém o número de erro como ‘.errno’.  ‘errno.EINPROGRESS’ indica que a
conexão está em andamento, mas ainda não terminou.  Diferentes sistemas
operacionais retornarão valores diferentes, então você terá que
verificar o que é retornado no seu sistema.

Você pode usar o método *note connect_ex(): 1582. para evitar criar uma
exceção.  Ele retornará apenas o valor de errno.  Para pesquisar, você
pode chamar *note connect_ex(): 1582. novamente mais tarde – ‘0’ ou
‘errno.EISCONN’ indicam que você está conectado – ou você pode passar
este soquete para *note select.select(): dc8. para verificar se ele é
gravável.

     Nota: O módulo *note asyncio: a. fornece uma biblioteca assíncrona
     de thread única e concorrente de propósito geral, que pode ser
     usada para escrever código de rede não bloqueante.  A biblioteca de
     terceiros Twisted(1) é uma alternativa popular e rica em recursos.

   ---------- Footnotes ----------

   (1) https://twisted.org/


File: python.info,  Node: Base de Dados,  Next: Matemáticos e Numéricos,  Prev: Programação Rede / Internet,  Up: FAQ de Bibliotecas e Extensões

10.4.6 Base de Dados
--------------------

* Menu:

* Existem interfaces para banco de dados em Python?::
* Como você implementa objetos persistentes no Python?::


File: python.info,  Node: Existem interfaces para banco de dados em Python?,  Next: Como você implementa objetos persistentes no Python?,  Up: Base de Dados

10.4.6.1 Existem interfaces para banco de dados em Python?
..........................................................

Sim.

Interfaces para hashes baseados em disco, como *note DBM: 34. e *note
GDBM: 33. também estão incluídas no Python padrão.  Há também o módulo
*note sqlite3: cf, que fornece um banco de dados relacional baseado em
disco leve.

Suporte para a maioria dos bancos de dados relacionais está disponível.
Para mais detalhes, veja a página wiki DatabaseProgramming(1) para
detalhes.

   ---------- Footnotes ----------

   (1) https://wiki.python.org/moin/DatabaseProgramming


File: python.info,  Node: Como você implementa objetos persistentes no Python?,  Prev: Existem interfaces para banco de dados em Python?,  Up: Base de Dados

10.4.6.2 Como você implementa objetos persistentes no Python?
.............................................................

O módulo de biblioteca *note pickle: a6. resolve isso de uma maneira
muito geral (embora você ainda não possa armazenar coisas como arquivos
abertos, soquetes ou janelas), e o módulo de biblioteca *note shelve:
c3. usa pickle e (g)dbm para criar mapeamentos persistentes contendo
objetos Python arbitrários.


File: python.info,  Node: Matemáticos e Numéricos,  Prev: Base de Dados,  Up: FAQ de Bibliotecas e Extensões

10.4.7 Matemáticos e Numéricos
------------------------------

* Menu:

* Como gero número aleatórios no Python?::


File: python.info,  Node: Como gero número aleatórios no Python?,  Up: Matemáticos e Numéricos

10.4.7.1 Como gero número aleatórios no Python?
...............................................

O módulo padrão *note random: b8. implementa um gerador de números
aleatórios.  O uso é simples:

     import random
     random.random()

Isso retorna um número flutuante aleatório no intervalo [0, 1).

Existem também muitos outros geradores aleatórios neste módulo, como:

   * ‘randrange(a, b)’ escolhe um número inteiro no intervalo entre [a,
     b).

   * ‘uniform(a, b)’ escolhe um número de ponto flutuante no intervalo
     [a, b).

   * ‘normalvariate(mean, sdev)’ gera números pseudoaleatórios que
     seguem uma distribuição normal (Gaussiana).

Algumas funções de nível elevado operam diretamente em sequencia, como:

   * ‘choice(S)’ escolhe um elemento aleatório de uma determinada
     sequência.

   * ‘shuffle(L)’ embaralha uma lista internamente, ou seja permuta seus
     elementos aleatoriamente.

Existe também uma classe ‘Random’ que você pode instanciar para criar
vários geradores de números aleatórios independentes.


File: python.info,  Node: FAQ sobre Extensão/Incorporação,  Next: Python no Windows,  Prev: FAQ de Bibliotecas e Extensões,  Up: Perguntas Frequentes Sobre Python

10.5 FAQ sobre Extensão/Incorporação
====================================

* Menu:

* Posso criar minhas próprias funções em C?::
* Posso criar minhas próprias funções em C++?::
* Escrever C é difícil; há alguma alternativa?::
* Como posso executar instruções arbitrárias de Python a partir de C?::
* Como posso executar e obter o resultado de uma expressão Python arbitrária a partir de C?::
* Como extraio valores em C a partir de um objeto Python?::
* Como posso utilizar Py_BuildValue() para criar uma tupla de comprimento arbitrário?: Como posso utilizar Py_BuildValue para criar uma tupla de comprimento arbitrário?.
* Como eu chamo um método de um objeto a partir do C?::
* Como posso capturar a saída da função PyErr_Print() (ou qualquer outra coisa que escreva para stdout/stderr)?: Como posso capturar a saída da função PyErr_Print ou qualquer outra coisa que escreva para stdout/stderr ?.
* Como faço para acessar a partir do C um módulo escrito em Python?::
* Como posso interagir com objetos C++ a partir do Python?::
* Adicionei um módulo usando o arquivo de Setup e o make falha; por quê?::
* Como eu depuro uma extensão?::
* Quero compilar um módulo Python no meu sistema Linux, mas alguns arquivos estão faltando. Por quê?: Quero compilar um módulo Python no meu sistema Linux mas alguns arquivos estão faltando Por quê?.
* Como posso distinguir “entrada incompleta” de “entrada inválida”?::
* Como encontro os símbolos __builtin_new ou __pure_virtual não-definidos no g++?::
* Posso criar uma classe de objetos com alguns métodos implementados em C e outros em Python (por exemplo, via herança)?: Posso criar uma classe de objetos com alguns métodos implementados em C e outros em Python por exemplo via herança ?.


File: python.info,  Node: Posso criar minhas próprias funções em C?,  Next: Posso criar minhas próprias funções em C++?,  Up: FAQ sobre Extensão/Incorporação

10.5.1 Posso criar minhas próprias funções em C?
------------------------------------------------

Sim, você pode construir módulos embutidos contendo funções, variáveis,
exceções e até mesmo novos tipos em C. Isso é explicado no documento
*note Estendendo e incorporando o interpretador Python: 1d56.

A maioria dos livros intermediários ou avançados em Python também
abordará esse tópico.


File: python.info,  Node: Posso criar minhas próprias funções em C++?,  Next: Escrever C é difícil; há alguma alternativa?,  Prev: Posso criar minhas próprias funções em C?,  Up: FAQ sobre Extensão/Incorporação

10.5.2 Posso criar minhas próprias funções em C++?
--------------------------------------------------

Sim, usando recursos de compatibilidade encontrados em C++.  Coloque
‘extern "C" { ... }’ em torno dos arquivos de inclusão do Python e
coloque ‘extern "C"’ antes de cada função que será chamada pelo
interpretador do Python.  Objetos globais ou estáticos em C++ com
construtores provavelmente não são uma boa ideia.


File: python.info,  Node: Escrever C é difícil; há alguma alternativa?,  Next: Como posso executar instruções arbitrárias de Python a partir de C?,  Prev: Posso criar minhas próprias funções em C++?,  Up: FAQ sobre Extensão/Incorporação

10.5.3 Escrever C é difícil; há alguma alternativa?
---------------------------------------------------

Há diversas alternativas para escrever suas próprias extensões C,
dependendo do que você está tentando fazer.  *note Ferramentas
recomendadas de terceiros: 4b37. oferecem abordagens mais simples e mais
sofisticadas para criar extensões C e C++ para Python.


File: python.info,  Node: Como posso executar instruções arbitrárias de Python a partir de C?,  Next: Como posso executar e obter o resultado de uma expressão Python arbitrária a partir de C?,  Prev: Escrever C é difícil; há alguma alternativa?,  Up: FAQ sobre Extensão/Incorporação

10.5.4 Como posso executar instruções arbitrárias de Python a partir de C?
--------------------------------------------------------------------------

A função mais alto-nível para isso é a *note PyRun_SimpleString(): 4bb5,
que recebe como único argumento uma string a ser executada no contexto
do módulo ‘__main__’ e retorna ‘0’ para sucesso e ‘-1’ quando uma
exceção ocorrer (incluindo *note SyntaxError: 18d.).  Se quiser mais
controle, use *note PyRun_String(): 1b52.; veja o código-fonte de *note
PyRun_SimpleString(): 4bb5. em ‘Python/pythonrun.c’.


File: python.info,  Node: Como posso executar e obter o resultado de uma expressão Python arbitrária a partir de C?,  Next: Como extraio valores em C a partir de um objeto Python?,  Prev: Como posso executar instruções arbitrárias de Python a partir de C?,  Up: FAQ sobre Extensão/Incorporação

10.5.5 Como posso executar e obter o resultado de uma expressão Python arbitrária a partir de C?
------------------------------------------------------------------------------------------------

Chame a função *note PyRun_String(): 1b52. da pergunta anterior passando
*note Py_eval_input: 4e56. como o símbolo de início; ela faz a análise
sintática de uma expressão, a executa, e retorna o seu valor.


File: python.info,  Node: Como extraio valores em C a partir de um objeto Python?,  Next: Como posso utilizar Py_BuildValue para criar uma tupla de comprimento arbitrário?,  Prev: Como posso executar e obter o resultado de uma expressão Python arbitrária a partir de C?,  Up: FAQ sobre Extensão/Incorporação

10.5.6 Como extraio valores em C a partir de um objeto Python?
--------------------------------------------------------------

Depende do tipo do objeto.  Se for uma tupla, a *note PyTuple_Size():
4d77. retorna o seu comprimento e a *note PyTuple_GetItem(): 4b61.
retorna o item em um determinado índice.  Listas têm funções similares,
*note PyList_Size(): 1461. e *note PyList_GetItem(): 35a.

Para bytes, a *note PyBytes_Size(): 4c20. retorna o comprimento e a
*note PyBytes_AsStringAndSize(): 4c18. fornece um ponteiro para o seu
valor e o seu comprimento.  Note que objetos bytes em Python podem
conter bytes nulos, de forma que a ‘strlen()’ do C não deve ser usada.

Para testar o tipo de um objeto, primeiramente se certifique de que ele
não é ‘NULL’, e então use *note PyBytes_Check(): 13e6, *note
PyTuple_Check(): 500d, *note PyList_Check(): 501e, etc.

Também existe uma API alto-nível para objetos Python fornecida pela
chamada interface “abstrata” – leia ‘Include/abstract.h’ para mais
detalhes.  Ela permite interagir com qualquer tipo de sequência Python
usando chamadas como *note PySequence_Length(): 4d47, *note
PySequence_GetItem(): 1bcd, etc, além de vários outros protocolos úteis
tais como números (*note PyNumber_Index(): 897. e outros) e mapeamentos
nas APIs PyMapping.


File: python.info,  Node: Como posso utilizar Py_BuildValue para criar uma tupla de comprimento arbitrário?,  Next: Como eu chamo um método de um objeto a partir do C?,  Prev: Como extraio valores em C a partir de um objeto Python?,  Up: FAQ sobre Extensão/Incorporação

10.5.7 Como posso utilizar Py_BuildValue() para criar uma tupla de comprimento arbitrário?
------------------------------------------------------------------------------------------

Não é possível.  Use a função *note PyTuple_Pack(): 4d76. para isso.


File: python.info,  Node: Como eu chamo um método de um objeto a partir do C?,  Next: Como posso capturar a saída da função PyErr_Print ou qualquer outra coisa que escreva para stdout/stderr ?,  Prev: Como posso utilizar Py_BuildValue para criar uma tupla de comprimento arbitrário?,  Up: FAQ sobre Extensão/Incorporação

10.5.8 Como eu chamo um método de um objeto a partir do C?
----------------------------------------------------------

A função *note PyObject_CallMethod(): 39f. pode ser usada para chamar um
método arbitrário de um objeto.  Os parâmetros são o objeto, o nome do
método a ser chamado, uma string de formato como a usada em *note
Py_BuildValue(): 8ac, e os valores dos argumentos:

     PyObject *
     PyObject_CallMethod(PyObject *object, const char *method_name,
                         const char *arg_format, ...);

Isso funciona para qualquer objeto que tenha métodos – sejam eles
embutidos ou definidos por usuário.  Você fica então responsável por
chamar *note Py_DECREF(): 56f. no valor de retorno.

Para chamar, por exemplo, o método “seek” de um objeto arquivo com
argumentos 10, 0 (presumindo que “f” é o ponteiro para o objeto
arquivo):

     res = PyObject_CallMethod(f, "seek", "(ii)", 10, 0);
     if (res == NULL) {
             ... ocorreu uma exceção ...
     }
     else {
             Py_DECREF(res);
     }

Note que a função *note PyObject_CallObject(): 4b56. 'sempre' recebe os
argumentos da chamada como uma tupla, de forma que para chamar uma
função sem argumentos deve-se passar “()” como formato, e para chamar
uma função com 1 argumento, coloque-o entre parênteses, por exemplo
“(i)”.


File: python.info,  Node: Como posso capturar a saída da função PyErr_Print ou qualquer outra coisa que escreva para stdout/stderr ?,  Next: Como faço para acessar a partir do C um módulo escrito em Python?,  Prev: Como eu chamo um método de um objeto a partir do C?,  Up: FAQ sobre Extensão/Incorporação

10.5.9 Como posso capturar a saída da função PyErr_Print() (ou qualquer outra coisa que escreva para stdout/stderr)?
--------------------------------------------------------------------------------------------------------------------

Com código Python, defina um objeto que suporte o método ‘write()’.
Atribua esse objeto a *note sys.stdout: ae6. e *note sys.stderr: 940.
Chame print_error, or simplesmente deixe o mecanismo padrão de traceback
acontecer.  Assim, a saída irá para onde quer que o seu método ‘write()’
a envie.

O jeito mais fácil de fazer isso é usar a classe *note io.StringIO:
f59.:

     >>> import io, sys
     >>> sys.stdout = io.StringIO()
     >>> print('foo')
     >>> print('hello world!')
     >>> sys.stderr.write(sys.stdout.getvalue())
     foo
     hello world!

Um objeto personalizado para fazer a mesma coisa seria esse:

     >>> import io, sys
     >>> class StdoutCatcher(io.TextIOBase):
     ...     def __init__(self):
     ...         self.data = []
     ...     def write(self, stuff):
     ...         self.data.append(stuff)
     ...
     >>> import sys
     >>> sys.stdout = StdoutCatcher()
     >>> print('foo')
     >>> print('hello world!')
     >>> sys.stderr.write(''.join(sys.stdout.data))
     foo
     hello world!


File: python.info,  Node: Como faço para acessar a partir do C um módulo escrito em Python?,  Next: Como posso interagir com objetos C++ a partir do Python?,  Prev: Como posso capturar a saída da função PyErr_Print ou qualquer outra coisa que escreva para stdout/stderr ?,  Up: FAQ sobre Extensão/Incorporação

10.5.10 Como faço para acessar a partir do C um módulo escrito em Python?
-------------------------------------------------------------------------

Você pode obter um pointeiro para o objeto de módulo da seguinte
maneira:

     module = PyImport_ImportModule("<modulename>");

Se o módulo ainda não foi importado (isto é, ainda não aparece no *note
sys.modules: 1636.), essa função vai inicializar o módulo; caso
contrário, ela vai simplesmente retornar o valor de
‘sys.modules["<modulename>"]’.  Note que ela não adiciona o módulo a
nenhum espaço de nomes – ela simplesmente garante que ele foi
inicializado e colocado no *note sys.modules: 1636.

Você pode então acessar os atributos do módulo (isto é, qualquer nome
definido no módulo) assim:

     attr = PyObject_GetAttrString(module, "<attrname>");

Chamar *note PyObject_SetAttrString(): 16ec. para definir variáveis no
módulo também funciona.


File: python.info,  Node: Como posso interagir com objetos C++ a partir do Python?,  Next: Adicionei um módulo usando o arquivo de Setup e o make falha; por quê?,  Prev: Como faço para acessar a partir do C um módulo escrito em Python?,  Up: FAQ sobre Extensão/Incorporação

10.5.11 Como posso interagir com objetos C++ a partir do Python?
----------------------------------------------------------------

Dependendo das suas necessidades, há diversas abordagens.  Para fazer
isso manualmente, comece lendo *note o documento “Estendendo e
Incorporando”: 1d56.  Note que, para o sistema Python em tempo de
execução, não há muita diferença entre C e C++ – de forma que a
estratégia de construir um novo tipo Python ao redor de uma estrutura C
(ou ponteiro para uma) também funciona para objetos C++.

Para bibliotecas C++, veja *note Escrever C é difícil; há alguma
alternativa?: 5588.


File: python.info,  Node: Adicionei um módulo usando o arquivo de Setup e o make falha; por quê?,  Next: Como eu depuro uma extensão?,  Prev: Como posso interagir com objetos C++ a partir do Python?,  Up: FAQ sobre Extensão/Incorporação

10.5.12 Adicionei um módulo usando o arquivo de Setup e o make falha; por quê?
------------------------------------------------------------------------------

O Setup deve terminar com uma quebra de linha; se não houver uma quebra
de linha no final, o processo de compilação falha.  (Consertar isso
requer umas gambiarras feias em shell script, e esse bug é tão pequeno
que o esforço não parece valer a pena.)


File: python.info,  Node: Como eu depuro uma extensão?,  Next: Quero compilar um módulo Python no meu sistema Linux mas alguns arquivos estão faltando Por quê?,  Prev: Adicionei um módulo usando o arquivo de Setup e o make falha; por quê?,  Up: FAQ sobre Extensão/Incorporação

10.5.13 Como eu depuro uma extensão?
------------------------------------

Ao usar o GDB com extensões carregadas dinamicamente, você não consegue
definir um ponto de interrupção antes da sua extensão ser carregada.

No seu arquivo ‘.gdbinit’ (ou então interativamente), adicione o
comando:

     br _PyImport_LoadDynamicModule

Então, ao executar o GDB:

     $ gdb /local/bin/python
     gdb) run myscript.py
     gdb) continue # repita até que a sua extensão seja carregada
     gdb) finish   # para que a sua extensão seja carregada
     gdb) br myfunction.c:50
     gdb) continue


File: python.info,  Node: Quero compilar um módulo Python no meu sistema Linux mas alguns arquivos estão faltando Por quê?,  Next: Como posso distinguir “entrada incompleta” de “entrada inválida”?,  Prev: Como eu depuro uma extensão?,  Up: FAQ sobre Extensão/Incorporação

10.5.14 Quero compilar um módulo Python no meu sistema Linux, mas alguns arquivos estão faltando. Por quê?
----------------------------------------------------------------------------------------------------------

A maioria das versões empacotadas de Python omitem alguns arquivos
necessários para compilar extensões do Python.

Em sistemas Red Hat, instale o RPM python3-devel para obter os arquivos
necessários.

Para Debian, execute ‘apt-get install python3-dev’.


File: python.info,  Node: Como posso distinguir “entrada incompleta” de “entrada inválida”?,  Next: Como encontro os símbolos __builtin_new ou __pure_virtual não-definidos no g++?,  Prev: Quero compilar um módulo Python no meu sistema Linux mas alguns arquivos estão faltando Por quê?,  Up: FAQ sobre Extensão/Incorporação

10.5.15 Como posso distinguir “entrada incompleta” de “entrada inválida”?
-------------------------------------------------------------------------

Às vezes você quer emular o comportamento do interpretador interativo do
Python, que te dá um prompt de continuação quando a entrada está
incompleta (por exemplo, você digitou o início de uma instrução “if”, ou
então não fechou os parênteses ou aspas triplas), mas que te dá um
mensagem de erro de sintaxe imediatamente se a entrada for inválida.

Em Python você pode usar o módulo *note codeop: 1c, que aproxima
suficientemente o comportamento do analisador sintático.  Por exemplo, o
IDLE o usa.

Em C, a forma mais fácil de fazer isso é chamar *note
PyRun_InteractiveLoop(): 4e5e. (talvez em uma thread separada) e deixar
o interpretador do Python tratar a entrada para você.  Você também pode
apontar o *note PyOS_ReadlineFunctionPointer(): 586. para a sua função
de entrada personalizada.  Consulte ‘Modules/readline.c’ e
‘Parser/myreadline.c’ para mais dicas.


File: python.info,  Node: Como encontro os símbolos __builtin_new ou __pure_virtual não-definidos no g++?,  Next: Posso criar uma classe de objetos com alguns métodos implementados em C e outros em Python por exemplo via herança ?,  Prev: Como posso distinguir “entrada incompleta” de “entrada inválida”?,  Up: FAQ sobre Extensão/Incorporação

10.5.16 Como encontro os símbolos __builtin_new ou __pure_virtual não-definidos no g++?
---------------------------------------------------------------------------------------

Para carregar dinamicamente módulos de extensão feitos com g++, você
precisa recompilar o Python, usando o g++ como ligador (mude a constante
LINKCC no Makefile dos módulos de extensão do Python), e use o g++
também como ligador do seu módulo (por exemplo, ‘g++ -shared -o
mymodule.so mymodule.o’).


File: python.info,  Node: Posso criar uma classe de objetos com alguns métodos implementados em C e outros em Python por exemplo via herança ?,  Prev: Como encontro os símbolos __builtin_new ou __pure_virtual não-definidos no g++?,  Up: FAQ sobre Extensão/Incorporação

10.5.17 Posso criar uma classe de objetos com alguns métodos implementados em C e outros em Python (por exemplo, via herança)?
------------------------------------------------------------------------------------------------------------------------------

Sim, você pode herdar de classes embutidas como *note int: 257, *note
list: 611, *note dict: 256. etc.

A Boost Python Library (BPL,
‘https://www.boost.org/libs/python/doc/index.html’) fornece uma forma de
fazer isso a partir do C++ (quer dizer, você consegue herdar de uma
classe de extensão escrita em C++ usando a BPL).


File: python.info,  Node: Python no Windows,  Next: FAQ da Interface Gráfica do Usuário,  Prev: FAQ sobre Extensão/Incorporação,  Up: Perguntas Frequentes Sobre Python

10.6 Python no Windows
======================

* Menu:

* Como faço para executar um programa Python no Windows?::
* Como eu faço para criar programas Python executáveis?::
* Por que Python às vezes demora tanto para iniciar?::
* Como eu faço para criar um executável a partir de um código Python?::
* Um arquivo *.pyd é o mesmo que um DLL?: Um arquivo * pyd é o mesmo que um DLL?.
* Como eu posso embutir Python dentro de uma aplicação do Windows?::
* Como eu impeço editores de adicionarem tabulações na minha source do Python?::
* Como faço para verificar uma tecla pressionada sem bloquear?::
* Como resolvo o erro da api-ms-win-crt-runtime-l1-1-0.dll ausente?: Como resolvo o erro da api-ms-win-crt-runtime-l1-1-0 dll ausente?.


File: python.info,  Node: Como faço para executar um programa Python no Windows?,  Next: Como eu faço para criar programas Python executáveis?,  Up: Python no Windows

10.6.1 Como faço para executar um programa Python no Windows?
-------------------------------------------------------------

Esta não é necessariamente uma questão direta.  Se você já está
familiarizado com a execução de programas através das linha de comando
do Windows, então tudo parecerá óbvio; caso contrário, poderá precisar
de um pouco mais de orientação.

A menos que você use algum tipo de ambiente de desenvolvimento
integrado, você vai acabar digitando os comandos do Windows no que é
chamado “janela do DOS” ou “janela do prompt de comando”.  Geralmente
você pode abrir essas janelas procurando na barra de pesquisa por ‘cmd’.
Você deverá reconhecer quando iniciar porque você verá um “Prompt de
Comando do Windows”, que geralmente tem esta forma:

     C:\>

A letra pode ser diferente, e pode haver outras coisas depois, então
você facilmente pode ver algo como:

     D:\SeuNome\Projetos\Python>

dependendo de como seu computador foi configurado e o que mais você tem
feito com ele recentemente.  Uma vez que você tenha iniciado a janela,
você estará no caminho para executar os seus programas Python.

Você deve observar que seu código Python deve ser processado por outro
programa chamado interpretador.  O interpretador lê o seu código,
compila em bytecodes, e depois executa os bytecodes para rodar o seu
programa.  Então, como você pode organizar o interpretador para lidar
com seu Python?

Primeiro, você precisa ter certeza de que sua janela de comando
reconhece a palavra “py” como uma instrução para iniciar o
interpretador.  Se você abriu a janela de comando, você deve tentar
digitar o comando “py” e o observar o retorno:

     C:\Users\SeuNome> py

Você deve então ver algo como:

     Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)] on win32
     Type "help", "copyright", "credits" or "license" for more information.
     >>>

Você iniciou o interpretador no “modo interativo”.  Que significa que
você pode inserir instruções ou expressões Python interativamente e
executá-las ou calculá-las enquanto espera.  Esta é uma das
características mais fortes do Python.  Verifique isso digitando algumas
instruções de sua escolha e veja os resultados:

     >>> print("Olá")
     Olá
     >>> "Olá" * 3
     'OláOláOlá'

Muitas pessoas usam o modo interativo como uma calculadora conveniente,
mas altamente programável.  Quando quiser encerrar sua sessão interativa
do Python, chame a função *note exit(): 2320. ou mantenha pressionada a
tecla ‘Ctrl’ enquanto você digita a ‘Z’ e pressione a tecla “‘Enter’”
para voltar ao prompt de comando do Windows.

Você também pode descobrir que você tem um item no Menu Iniciar como
Iniciar ‣ Programas‣ Python 3.x ‣ Python (linha de comando) que
resultará em você vendo o prompt ‘>>>’ em uma nova janela.  Se acontecer
isso, a janela desaparecerá depois que você chamar a função *note
exit(): 2320. ou inserir o caractere ‘Ctrl’-‘Z’; o Windows está
executando um único comando “python” na janela, e fecha quando você
termina o interpretador.

Agora que sabemos que o comando ‘py’ é reconhecido, você pode dar seu
script Python para ele.  Você terá que dar um caminho absoluto ou
relativo para o script Python.  Vamos dizer que seu script Python está
localizado na sua área de trabalho e se chama ‘oi.py’, e seu prompt de
comando está aberto no seu diretório raiz de forma que você está vendo
algo similar a:

     C:\Users\SeuNome>

Então, agora você solicitará o comando ‘py’ para fornecer seu script
para Python, digitando ‘py’ seguido pelo seu caminho de script:

     C:\Users\SeuNome> py Desktop\oi.py
     oi


File: python.info,  Node: Como eu faço para criar programas Python executáveis?,  Next: Por que Python às vezes demora tanto para iniciar?,  Prev: Como faço para executar um programa Python no Windows?,  Up: Python no Windows

10.6.2 Como eu faço para criar programas Python executáveis?
------------------------------------------------------------

No Windows, o instalador padrão do Python já associa a extensão .py com
o tipo de arquivo (Python.File) e dá àquele tipo de arquivo um comando
aberto que executa o interpretador (‘D:\Program Files\Python\python.exe
"%1" %*’).  Isso é o bastante para fazer scripts executáveis pelo prompt
de comando como ‘foo.py’.  Se você preferir executar o script
simplesmente digitando ‘foo’ sem extensão você precisa adicionar .py à
variável de ambiente PATHEXT.


File: python.info,  Node: Por que Python às vezes demora tanto para iniciar?,  Next: Como eu faço para criar um executável a partir de um código Python?,  Prev: Como eu faço para criar programas Python executáveis?,  Up: Python no Windows

10.6.3 Por que Python às vezes demora tanto para iniciar?
---------------------------------------------------------

Geralmente, Python inicia muito rapidamente no Windows, mas
ocasionalmente há relatos de erros que, de repente, o Python começa a
demorar muito tempo para iniciar.  Isso é ainda mais intrigante, porque
Python funciona bem em outros sistemas Windows que parecem estar
configurados de forma idêntica.

O problema pode ser causado por uma desconfiguração de software
antivírus na máquina problemática.  Alguns antivírus são conhecidos por
introduzir sobrecarga de duas ordens de magnitude no início quando estão
configurados para monitorar todas as leituras do sistema de arquivos.
Tente verificar a configuração do antivírus nos seus sistemas para
assegurar que eles estão de fato configurados identicamente.  O McAfee,
quando configurado para escanear todo a atividade do sistema de
arquivos, é um ofensor conhecido.


File: python.info,  Node: Como eu faço para criar um executável a partir de um código Python?,  Next: Um arquivo * pyd é o mesmo que um DLL?,  Prev: Por que Python às vezes demora tanto para iniciar?,  Up: Python no Windows

10.6.4 Como eu faço para criar um executável a partir de um código Python?
--------------------------------------------------------------------------

Consulte *note Como posso criar um binário independente a partir de um
script Python?: 54f4. para uma lista de ferramentas que podem ser usada
para criar executáveis.


File: python.info,  Node: Um arquivo * pyd é o mesmo que um DLL?,  Next: Como eu posso embutir Python dentro de uma aplicação do Windows?,  Prev: Como eu faço para criar um executável a partir de um código Python?,  Up: Python no Windows

10.6.5 Um arquivo ‘*.pyd’ é o mesmo que um DLL?
-----------------------------------------------

Sim, os arquivos .pyd são dll, mas existem algumas diferenças.  Se você
possui uma DLL chamada ‘foo.pyd’, ela deve ter a função ‘PyInit_foo()’.
Você pode escrever “import foo” do Python, e o Python procurará por
foo.pyd (assim como foo.py, foo.pyc) e, se o encontrar, tentará chamar
‘PyInit_foo()’ para inicializá-lo.  Você não vincula seu arquivo .exe ao
arquivo foo.lib, pois isso faria com que o Windows exigisse a presença
da DLL.

Observe que o caminho de pesquisa para foo.pyd é PYTHONPATH, não o mesmo
que o Windows usa para procurar por foo.dll.  Além disso, foo.pyd não
precisa estar presente para executar seu programa, enquanto que se você
vinculou seu programa a uma dll, a dll será necessária.  Obviamente, o
foo.pyd é necessário se você quiser dizer ‘import foo’.  Em uma DLL, o
vínculo é declarado no código-fonte com ‘__declspec(dllexport)’.  Em um
.pyd, o vínculo é definido em uma lista de funções disponíveis.


File: python.info,  Node: Como eu posso embutir Python dentro de uma aplicação do Windows?,  Next: Como eu impeço editores de adicionarem tabulações na minha source do Python?,  Prev: Um arquivo * pyd é o mesmo que um DLL?,  Up: Python no Windows

10.6.6 Como eu posso embutir Python dentro de uma aplicação do Windows?
-----------------------------------------------------------------------

A incorporação do interpretador Python em um aplicativo do Windows pode
ser resumida da seguinte forma:

  1. 'Não' compile o Python diretamente em seu arquivo .exe.  No
     Windows, o Python deve ser uma DLL para manipular os módulos de
     importação que são eles próprios.  (Este é o primeiro fato chave
     não documentado.)  Em vez disso, vincule a ‘python`NN'.dll’;
     normalmente é instalado em ‘C:\Windows\System’.  'NN' é a versão do
     Python, um número como “33” para o Python 3.3.

     Você pode vincular ao Python de duas maneiras diferentes.  A
     vinculação em tempo de carregamento significa vincular contra
     ‘python`NN'.lib’, enquanto a vinculação em tempo de execução
     significa vincular a ‘python`NN'.dll’.  (Nota geral:
     ‘python`NN'.lib’ é a chamada “import lib” correspondente a
     ‘python`NN'.dll’.  Apenas define símbolos para o ligador.)

     A vinculação em tempo de execução simplifica bastante as opções de
     vinculação; tudo acontece em tempo de execução.  Seu código deve
     carregar ‘python`NN'.dll’ usando a rotina ‘LoadLibraryEx()’ do
     Windows.  O código também deve usar rotinas de acesso e dados em
     ‘python`NN'.dll’ (ou seja, as APIs C do Python) usando ponteiros
     obtidos pela rotina ‘GetProcAddress()’ do Windows.  As macros podem
     tornar o uso desses ponteiros transparente para qualquer código C
     que chama rotinas na API C do Python.

  2. Se você usa SWIG, é fácil criar um “módulo de extensão” do Python
     que disponibilizará os dados e os métodos da aplicação para o
     Python.  O SWIG cuidará de todos os detalhes obscuros para você.  O
     resultado é o código C que você vincula 'ao' arquivo.exe (!)  Você
     'não' precisa criar um arquivo DLL, o que também simplifica a
     vinculação.

  3. O SWIG criará uma função init (uma função C) cujo nome depende do
     nome do módulo de extensão.  Por exemplo, se o nome do módulo for
     leo, a função init será chamada initleo().  Se você usa classes de
     sombra SWIG, como deveria, a função init será chamada initleoc().
     Isso inicializa uma classe auxiliar principalmente oculta usada
     pela classe shadow.

     O motivo pelo qual você pode vincular o código C na etapa 2 ao seu
     arquivo .exe é que chamar a função de inicialização equivale a
     importar o módulo para o Python!  (Este é o segundo fato chave não
     documentado.)

  4. Em suma, você pode utilizar o código a seguir para inicializar o
     interpretador Python com seu módulo de extensão.

          #include <Python.h>
          ...
          Py_Initialize();  // Inicializa Python.
          initmyAppc();  // Inicializa (importa) a classe auxiliar.
          PyRun_SimpleString("import myApp");  // Importa a classe sombra.

  5. Existem dois problemas com a API C do Python que se tornarão
     aparentes se você utiliza um compilador que não seja o MSVC, o
     compilador utilizado no pythonNN.dll.

     Problema 1: As chamadas funções de “Nível Muito Alto” que recebem
     argumentos ‘FILE *’ não funcionarão em um ambiente com vários
     compiladores porque a noção de cada ‘struct FILE’ de um compilador
     será diferente.  Do ponto de vista da implementação, essas são
     funções de nível muito baixo.

     Problema 2: SWIG gera o seguinte código ao gerar invólucros para
     funções sem retorno:

          Py_INCREF(Py_None);
          _resultobj = Py_None;
          return _resultobj;

     Infelizmente, Py_None é uma macro que se expande para uma
     referência a uma estrutura de dados complexa chamada _Py_NoneStruct
     dentro de pythonNN.dll.  Novamente, esse código falhará em um
     ambiente com vários compiladores.  Substitua esse código por:

          return Py_BuildValue("");

     Pode ser possível usar o comando ‘%typemap’ do SWIG para fazer a
     alteração automaticamente, embora eu não tenha conseguido fazer
     isso funcionar (eu sou um completo novato em SWIG).

  6. Usar um script de shell do Python para criar uma janela do
     interpretador Python de dentro da aplicação do Windows não é uma
     boa ideia; a janela resultante será independente do sistema de
     janelas da sua aplicação.  Em vez disso, você (ou a classe
     wxPythonWindow) deve criar uma janela “nativa” do interpretador.  É
     fácil conectar essa janela ao interpretador Python.  Você pode
     redirecionar a E/S do Python para qualquer objeto que suporte
     leitura e gravação; portanto, tudo que você precisa é de um objeto
     Python (definido no seu módulo de extensão) que contenha métodos
     read() e write().


File: python.info,  Node: Como eu impeço editores de adicionarem tabulações na minha source do Python?,  Next: Como faço para verificar uma tecla pressionada sem bloquear?,  Prev: Como eu posso embutir Python dentro de uma aplicação do Windows?,  Up: Python no Windows

10.6.7 Como eu impeço editores de adicionarem tabulações na minha source do Python?
-----------------------------------------------------------------------------------

As perguntas frequentes não recomendam a utilização de tabulações, e o
guia de estilo Python, :pep:‘8’, recomenda 4 espaços para código de
Python distribuído; esse também é o padrão do python-mode do Emacs.

Sob qualquer editor, misturar tabulações e espaços é uma má ideia.  O
MSVC não é diferente nesse aspecto e é facilmente configurado para usar
espaços: Selecione Tools ‣ Options ‣ Tabs e, para o tipo de arquivo
“Default”, defina “Tab size” e “Indent size” para 4 e selecione o botão
de opção “Insert spaces”.

O Python levanta *note IndentationError: 7a9. ou *note TabError: 543. se
tabulações e espaços misturados estiverem causando problemas no espaço
em branco à esquerda.  Você também pode executar o módulo *note
tabnanny: dd. para verificar uma árvore de diretórios no modo em lote.


File: python.info,  Node: Como faço para verificar uma tecla pressionada sem bloquear?,  Next: Como resolvo o erro da api-ms-win-crt-runtime-l1-1-0 dll ausente?,  Prev: Como eu impeço editores de adicionarem tabulações na minha source do Python?,  Up: Python no Windows

10.6.8 Como faço para verificar uma tecla pressionada sem bloquear?
-------------------------------------------------------------------

Use o módulo *note msvcrt: 93.  Este é um módulo de extensão padrão
específico do Windows.  Ele define uma função ‘kbhit()’ que verifica se
um toque no teclado está presente, e ‘getch()’ que recebe um caractere
sem ecoá-lo.


File: python.info,  Node: Como resolvo o erro da api-ms-win-crt-runtime-l1-1-0 dll ausente?,  Prev: Como faço para verificar uma tecla pressionada sem bloquear?,  Up: Python no Windows

10.6.9 Como resolvo o erro da api-ms-win-crt-runtime-l1-1-0.dll ausente?
------------------------------------------------------------------------

Isso pode ocorrer no Python 3.5 e posterior ao usar o Windows 8.1 ou
anterior sem que todas as atualizações tenham sido instaladas.
Primeiro, certifique-se de que seu sistema operacional seja compatível e
esteja atualizado e, se isso não resolver o problema, visite a página de
suporte da Microsoft(1) para obter orientação sobre como instalar
manualmente a atualização do C Runtime.

   ---------- Footnotes ----------

   (1) https://support.microsoft.com/pt-br/help/3118401/


File: python.info,  Node: FAQ da Interface Gráfica do Usuário,  Next: FAD de “Por que o Python está instalado em meu computador?”,  Prev: Python no Windows,  Up: Perguntas Frequentes Sobre Python

10.7 FAQ da Interface Gráfica do Usuário
========================================

* Menu:

* Perguntas Gerais sobre a GUI::
* Quais toolkits de GUI existem para o Python?::
* Perguntas do Tkinter::


File: python.info,  Node: Perguntas Gerais sobre a GUI,  Next: Quais toolkits de GUI existem para o Python?,  Up: FAQ da Interface Gráfica do Usuário

10.7.1 Perguntas Gerais sobre a GUI
-----------------------------------


File: python.info,  Node: Quais toolkits de GUI existem para o Python?,  Next: Perguntas do Tkinter,  Prev: Perguntas Gerais sobre a GUI,  Up: FAQ da Interface Gráfica do Usuário

10.7.2 Quais toolkits de GUI existem para o Python?
---------------------------------------------------

As versões padrão do Python incluem uma interface orientada a objetos
para o conjunto de widgets Tcl/Tk, chamado *note tkinter: 3f99.  Este é
provavelmente o mais fácil de instalar (uma vez que vem incluído na
maioria das distribuições binárias(1) do Python) e usar.  Para obter
mais informações sobre o Tk, incluindo ponteiros para a fonte, consulte
a página inicial do Tcl/Tk(2).  Tcl/Tk é totalmente portátil para as
plataformas macOS, Windows e Unix.

Dependendo da(s) plataforma(s) que você está visando, também existem
várias alternativas.  Uma lista de frameworks GUI de plataformas
cruzadas(3) e frameworks GUI específicas de plataforma(4) podem ser
encontradas na wiki do python.

   ---------- Footnotes ----------

   (1) https://www.python.org/downloads/

   (2) https://www.tcl.tk

   (3) 
https://wiki.python.org/moin/GuiProgramming#Cross-Platform_Frameworks

   (4) 
https://wiki.python.org/moin/GuiProgramming#Platform-specific_Frameworks


File: python.info,  Node: Perguntas do Tkinter,  Prev: Quais toolkits de GUI existem para o Python?,  Up: FAQ da Interface Gráfica do Usuário

10.7.3 Perguntas do Tkinter
---------------------------

* Menu:

* Como eu congelo as aplicações Tkinter?::
* Posso ter eventos Tk manipulados enquanto aguardo pelo E/S?::
* Não consigo fazer as ligações de tecla funcionarem no Tkinter; por que?: Não consigo fazer as ligações de tecla funcionarem no Tkinter por que?.


File: python.info,  Node: Como eu congelo as aplicações Tkinter?,  Next: Posso ter eventos Tk manipulados enquanto aguardo pelo E/S?,  Up: Perguntas do Tkinter

10.7.3.1 Como eu congelo as aplicações Tkinter?
...............................................

Freeze é uma ferramenta para criar aplicativos autônomos.  Ao congelar
aplicativos Tkinter, os aplicativos não serão verdadeiramente autônomos,
pois o aplicativo ainda precisará das bibliotecas Tcl e Tk.

Uma solução é enviar a aplicação com as bibliotecas Tcl e Tk e
apontá-las em tempo de execução usando as variáveis de ambiente
‘TCL_LIBRARY’ e ‘TK_LIBRARY’.

Várias bibliotecas de congelamento de terceiros, como py2exe e
cx_Freeze, possuem manipulação embutida para aplicações Tkinter.


File: python.info,  Node: Posso ter eventos Tk manipulados enquanto aguardo pelo E/S?,  Next: Não consigo fazer as ligações de tecla funcionarem no Tkinter por que?,  Prev: Como eu congelo as aplicações Tkinter?,  Up: Perguntas do Tkinter

10.7.3.2 Posso ter eventos Tk manipulados enquanto aguardo pelo E/S?
....................................................................

Em plataformas diferentes do Windows, sim, e você nem precisa de
threads!  Mas você terá que reestruturar seu código de E/S um pouco.  O
Tk tem o equivalente à chamada ‘XtAddInput()’ do Xt, que permite que
você registre uma função de retorno de chamada que será chamada a partir
do laço de repetição principal do Tk quando E/S é possível em um
descritor de arquivo.  Consulte *note Tratadores de arquivos: 3fb7.


File: python.info,  Node: Não consigo fazer as ligações de tecla funcionarem no Tkinter por que?,  Prev: Posso ter eventos Tk manipulados enquanto aguardo pelo E/S?,  Up: Perguntas do Tkinter

10.7.3.3 Não consigo fazer as ligações de tecla funcionarem no Tkinter: por que?
................................................................................

Uma queixa frequentemente ouvida é que os manipuladores de eventos *note
vinculados: 3fb2. a eventos com o método ‘bind()’ não são manipulados
mesmo quando a tecla apropriada é pressionada.

A causa mais comum é que o widget para o qual a ligação se aplica não
possui “foco no teclado”.  Confira a documentação do Tk para o comando
de foco.  Normalmente, um widget é dado o foco do teclado clicando nele
(mas não para rótulos, veja a opção takefocus).


File: python.info,  Node: FAD de “Por que o Python está instalado em meu computador?”,  Prev: FAQ da Interface Gráfica do Usuário,  Up: Perguntas Frequentes Sobre Python

10.8 FAD de “Por que o Python está instalado em meu computador?”
================================================================

* Menu:

* O que é Python?: O que é Python?<2>.
* Porque Python está instalado em minha máquina?::
* Eu posso apagar o Python?::


File: python.info,  Node: O que é Python?<2>,  Next: Porque Python está instalado em minha máquina?,  Up: FAD de “Por que o Python está instalado em meu computador?”

10.8.1 O que é Python?
----------------------

Python é uma linguagem de programação.  É usada para muitas e diversas
aplicações.  É usada em escolas e faculdades como uma linguagem de
programação introdutória, porque Python é fácil de aprender, mas também
é usada por desenvolvedores profissionais de software em lugares como
Google, Nasa e Lucasfilm Ltd.

Se você quiser aprender mais sobre Python, comece com o Beginner's Guide
to Python(1).

   ---------- Footnotes ----------

   (1) https://wiki.python.org/moin/BeginnersGuide


File: python.info,  Node: Porque Python está instalado em minha máquina?,  Next: Eu posso apagar o Python?,  Prev: O que é Python?<2>,  Up: FAD de “Por que o Python está instalado em meu computador?”

10.8.2 Porque Python está instalado em minha máquina?
-----------------------------------------------------

Se você encontrar Python instalado em seu sistema, mas não se lembra de
tê-lo instalado, então podem haver muitas maneiras diferentes dele ter
ido parar lá

   * Possivelmente outro usuário do computador pretendia aprender
     programação e o instalou; você terá que descobrir quem estava
     usando a máquina e pode o ter instalado.

   * Um aplicativo de terceiros pode ter sido instalado na máquina e
     sido escrito em Python e incluído uma instalação do Python.  Há
     muitos desses aplicativos, desde programas com interface gráfica
     até servidores de rede e scripts administrativos.

   * Algumas máquinas Windows já possuem o Python instalado.  No
     presente momento nós temos conhecimento de computadores da
     Hewlett-Packard e da Compaq que incluem Python.  Aparentemente
     algumas das ferramentas administrativas da HP/Compaq são escritas
     em Python.

   * Muitos sistemas operacionais derivados do Unix, como macOS e
     algumas distribuições Linux, possuem o python instalado por padrão;
     está incluído na instalação base.


File: python.info,  Node: Eu posso apagar o Python?,  Prev: Porque Python está instalado em minha máquina?,  Up: FAD de “Por que o Python está instalado em meu computador?”

10.8.3 Eu posso apagar o Python?
--------------------------------

Isso depende de como o Python veio.

Se alguém o instalou deliberadamente, você pode removê-lo sem machucar
ninguém.  No Windows use o Adicionar ou remover programas que se
encontra no Painel de Controle.

Se o Python foi instalado por um aplicativo de terceiros, você pode
removê-lo mas aquela aplicação não irá mais funcionar.  Você deve usar o
desinstalador daquele aplicativo para remover o Python diretamente.

Se o Python veio junto com seu sistema operacional, removê-lo não é
recomendado.  Se você o remover, qualquer ferramenta que tenha sido
escrita em Python não vão mais funcionar, e algumas delas podem ser
importantes para você.  A reinstalação do sistema inteiro seria
necessária para consertar as coisas de novo.


File: python.info,  Node: Descontinuações,  Next: Glossário,  Prev: Perguntas Frequentes Sobre Python,  Up: Top

11 Descontinuações
******************

* Menu:

* Remoção pendente no Python 3.14: Remoção pendente no Python 3 14<5>.
* Remoção pendente no Python 3.15: Remoção pendente no Python 3 15<5>.
* Remoção pendente no Python 3.16: Remoção pendente no Python 3 16<5>.
* Remoção pendente no Python 3.17: Remoção pendente no Python 3 17<3>.
* Remoção pendente no Python 3.18: Remoção pendente no Python 3 18<2>.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<5>.
* Descontinuações na API C::


File: python.info,  Node: Remoção pendente no Python 3 14<5>,  Next: Remoção pendente no Python 3 15<5>,  Up: Descontinuações

11.1 Remoção pendente no Python 3.14
====================================

   * *note argparse: 6.: Os parâmetros 'type', 'choices' e 'metavar' de
     ‘argparse.BooleanOptionalAction’ foram descontinuados e serão
     removidos na versão 3.14.  (Contribuição de Nikita Sobolev em
     gh-92248(1).)

   * *note ast: 8.: os seguintes recursos foram descontinuados na
     documentação desde Python 3.8, agora fazem com que um *note
     DeprecationWarning: 1a5. seja emitido em tempo de execução quando
     eles são acessados ou usados, e serão removidos no Python 3.14:

        * ‘ast.Num’

        * ‘ast.Str’

        * ‘ast.Bytes’

        * ‘ast.NameConstant’

        * ‘ast.Ellipsis’

     Em vez disso, use *note ast.Constant: 2b9.  (Contribuição de Serhiy
     Storchaka em gh-90953(2).)

   * *note asyncio: a.:

        * As classes filhas dos observadores *note
          MultiLoopChildWatcher: 2ba, *note FastChildWatcher: 2bb, *note
          AbstractChildWatcher: 2bc. e *note SafeChildWatcher: 2bd.
          foram descontinuadas e serão removidas no Python 3.14.
          (Contribuição de Kumar Aditya em gh-94597(3).)

        * *note asyncio.set_child_watcher(): 2be, *note
          asyncio.get_child_watcher(): 2bf, *note
          asyncio.AbstractEventLoopPolicy.set_child_watcher(): 2c0. e
          *note asyncio.AbstractEventLoopPolicy.get_child_watcher():
          2c1. foram descontinuados e serão removidos no Python 3.14.
          (Contribuição de Kumar Aditya em gh-94597(4).)

        * O método *note get_event_loop(): 2c2. da política de laço de
          eventos padrão agora emite um *note DeprecationWarning: 1a5.
          se não houver nenhum laço de eventos atual definido e decidir
          criar um.  (Contribuição de Serhiy Storchaka e Guido van
          Rossum em gh-100160(5).)

   * *note builtins: 12.: ‘bool(NotImplemented)’ now emits a *note
     DeprecationWarning: 1a5. and will raise a *note TypeError: 2c3. in
     Python 3.14.  (Contributed by Jelle Zijlstra in gh-118767(6).)

   * *note email: 3b.: Descontinua o parâmetro 'isdst' em *note
     email.utils.localtime(): 2c4.  (Contribuição de Alan Williams em
     gh-72346(7).)

   * *note importlib.abc: 78. descontinuou as classes:

        * ‘importlib.abc.ResourceReader’

        * ‘importlib.abc.Traversable’

        * ‘importlib.abc.TraversableResources’

     Em vez disso, use classes de *note importlib.resources.abc: 7c.:

        * *note importlib.resources.abc.Traversable: 1f3.

        * *note importlib.resources.abc.TraversableResources: 2c5.

     (Contribuição de Jason R. Coombs e Hugo van Kemenade em
     gh-93963(8).)

   * *note itertools: 81. tinha suporte não documentado, ineficiente,
     historicamente cheio de bugs e inconsistente para operações de
     cópia, cópia profunda e serialização com pickle.  Isso será
     removido na versão 3.14 para uma redução significativa no volume de
     código e na carga de manutenção.  (Contribuição de Raymond
     Hettinger em gh-101588(9).)

   * *note multiprocessing: 94.: o método de inicialização padrão será
     alterado para um mais seguro no Linux, BSDs e outras plataformas
     POSIX não-macOS onde ‘'fork'’ é atualmente o padrão (gh-84559(10)).
     Adicionar um aviso de tempo de execução sobre isso foi considerado
     muito perturbador, pois não se espera que a maior parte do código
     se importe.  Use as APIs *note get_context(): 2c6. ou *note
     set_start_method(): 2c7. para especificar explicitamente quando seu
     código 'requer' ‘'fork'’.  Veja *note Contextos e métodos de
     inicialização: 2c8.

   * *note pathlib: a4.: *note is_relative_to(): 2c9. e *note
     relative_to(): 2ca.: passar argumentos adicionais foi
     descontinuado.

   * *note pkgutil: a9.: *note find_loader(): 2cb. e *note get_loader():
     2cc. agora levantam *note DeprecationWarning: 1a5.; use *note
     importlib.util.find_spec(): 2cd. em vez disto.  (Contribuição de
     Nikita Sobolev em gh-97850(11).)

   * *note pty: b1.:

        * ‘master_open()’: use *note pty.openpty(): 2ce.

        * ‘slave_open()’: use *note pty.openpty(): 2ce.

   * *note sqlite3: cf.:

        * *note version: 2cf. e *note version_info: 2d0.

        * *note execute(): 2d1. e *note executemany(): 2d2. se *note
          espaços reservados nomeados: 2d3. forem usados e 'parameters'
          for uma sequência em vez de um *note dict: 256. .

   * *note urllib: 108.: ‘urllib.parse.Quoter’ está obsoleto: não foi
     planejado para ser uma API pública.  (Contribuição de Gregory P.
     Smith em gh-88168(12).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/92248

   (2) https://github.com/python/cpython/issues/90953

   (3) https://github.com/python/cpython/issues/94597

   (4) https://github.com/python/cpython/issues/94597

   (5) https://github.com/python/cpython/issues/100160

   (6) https://github.com/python/cpython/issues/118767

   (7) https://github.com/python/cpython/issues/72346

   (8) https://github.com/python/cpython/issues/93963

   (9) https://github.com/python/cpython/issues/101588

   (10) https://github.com/python/cpython/issues/84559

   (11) https://github.com/python/cpython/issues/97850

   (12) https://github.com/python/cpython/issues/88168


File: python.info,  Node: Remoção pendente no Python 3 15<5>,  Next: Remoção pendente no Python 3 16<5>,  Prev: Remoção pendente no Python 3 14<5>,  Up: Descontinuações

11.2 Remoção pendente no Python 3.15
====================================

   * O sistema de importação:

        * A definição de *note __cached__: 2d5. em um módulo enquanto
          falha na definição de *note __spec__.cached: 2d6. 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.  (gh-97879(1))

        * A definição de *note __package__: 2d7. em um módulo enquanto
          falha na definição de *note __spec__.parent: 2d8. está
          descontinuado.  No Python 3.15, ‘__package__’ deixará de ser
          definido ou levado em consideração pelo sistema de importação
          ou pela biblioteca padrão.  (gh-97879(2))

   * *note ctypes: 2a.:

        * A função não documentada ‘ctypes.SetPointerType()’ foi
          descontinuada desde o Python 3.13.

   * *note http.server: 72.:

        * A classe obsoleta e raramente usada *note
          CGIHTTPRequestHandler: 2a1. foi descontinuada desde o Python
          3.13.  Não existe substituição direta.  'Qualquer coisa' é
          melhor que CGI para fazer a interface de um servidor web com
          um manipulador de requisição.

        * O sinalizador ‘--cgi’ para a interface de linha de comando
          ‘python -m http.server’ foi descontinuado desde o Python 3.13.

   * *note importlib: 77.:

        * Método ‘load_module()’: use ‘exec_module()’.

   * *note locale: 86.:

        * A função *note getdefaultlocale(): 2d9. foi descontinuada
          desde o Python 3.11.  Sua remoção foi planejada originalmente
          para o Python 3.13 (gh-90817(3)), mas foi adiada para o Python
          3.15.  Em vez disso, use *note getlocale(): 2da, *note
          setlocale(): 2db. e *note getencoding(): 2dc.  (Contribuição
          de Hugo van Kemenade em gh-111187(4).)

   * *note pathlib: a4.:

        * *note PurePath.is_reserved(): 2a6. foi descontinuado desde o
          Python 3.13.  Use *note os.path.isreserved(): 223. para
          detectar caminhos reservados no Windows.

   * *note platform: aa.:

        * *note java_ver(): 2a7. foi descontinuada desde o Python 3.13.
          Esta função é útil apenas para suporte Jython, tem uma API
          confusa e é amplamente não testada.

   * *note sysconfig: db.:

        * O argumento 'check_home' de *note sysconfig.is_python_build():
          2dd. foi descontinuado desde o Python 3.12.

   * *note threading: ed.:

        * *note RLock(): 2de. não aceitará argumentos no Python 3.15.  A
          passagem quaisquer argumentos foi descontinuada desde o Python
          3.14, pois a versão Python não permite nenhum argumento, mas a
          versão C permite qualquer número de argumentos posicionais ou
          nomeados, ignorando todos os argumentos.

   * *note types: 103.:

        * *note types.CodeType: 2df.: o acesso a *note co_lnotab: 2e0.
          foi descontinuado na PEP 626(5) desde 3.10 e foi planejado
          para ser removido em 3.12, mas só recebeu uma *note
          DeprecationWarning: 1a5. adequada em 3.12.  Pode ser removido
          em 3.15.  (Contribuição de Nikita Sobolev em gh-101866(6).)

   * *note typing: 104.:

        * A sintaxe de argumento nomeado não documentada para criar
          classes *note NamedTuple: 2b0. (por exemplo, ‘Point =
          NamedTuple("Point", x=int, y=int)’) foi descontinuada desde o
          Python 3.13.  Use a sintaxe baseada em classe ou a sintaxe
          funcional em vez disso.

        * Ao usar a sintaxe funcional de *note TypedDict: 162.s, não
          passar um valor para o parâmetro 'fields' (‘TD =
          TypedDict("TD")’) ou passar ‘None’ (‘TD = TypedDict("TD",
          None)’) foi está descontinuado desde o Python 3.13.  Use
          ‘class TD(TypedDict): pass’ ou ‘TD = TypedDict("TD", {})’ para
          criar uma classe TypedDict com nenhum campo.

        * A função decoradora *note typing.no_type_check_decorator():
          2b1. foi descontinuada desde o Python 3.13.  Após oito anos no
          módulo *note typing: 104, ela ainda não foi suportada por
          nenhum verificador de tipo importante.

   * *note wave: 113.:

        * Os métodos *note getmark(): 2b4, ‘setmark()’ e *note
          getmarkers(): 2b5. das classes *note Wave_read: 2b6. e *note
          Wave_write: 2b7. foram descontinuados desde o Python 3.13.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/97879

   (2) https://github.com/python/cpython/issues/97879

   (3) https://github.com/python/cpython/issues/90817

   (4) https://github.com/python/cpython/issues/111187

   (5) https://peps.python.org/pep-0626/

   (6) https://github.com/python/cpython/issues/101866


File: python.info,  Node: Remoção pendente no Python 3 16<5>,  Next: Remoção pendente no Python 3 17<3>,  Prev: Remoção pendente no Python 3 15<5>,  Up: Descontinuações

11.3 Remoção pendente no Python 3.16
====================================

   * O sistema de importação:

        * A definição de *note __loader__: 2e2. em um módulo enquanto
          falha na definição de *note __spec__.loader: 2e3. está
          descontinuado.  No Python 3.16, ‘__loader__’ deixará de ser
          definido ou levado em consideração pelo sistema de importação
          ou pela biblioteca padrão.

   * *note array: 7.:

        * O código de formato ‘'u'’ (‘wchar_t’) foi descontinuado na
          documentação desde o Python 3.3 e do ambiente de execução
          desde o Python 3.13.  Em vez disso, use o código de formato
          ‘'w'’ (*note Py_UCS4: 29b.) para caracteres Unicode.

   * *note asyncio: a.:

        * ‘asyncio.iscoroutinefunction()’ foi descontinuado e será
          removido no Python 3.16, use *note
          inspect.iscoroutinefunction(): 2e4. em vez disso.
          (Contribuição de Jiahao Li e Kumar Aditya em gh-122875(1).)

   * *note builtins: 12.:

        * A inversão bit a bit em tipos booleanos, ‘~True’ ou ‘~False’
          foi descontinuada desde o Python 3.12, pois produz resultados
          surpreendentes e não intuitivos (‘-2’ e ‘-1’).  Em vez disso,
          use ‘not x’ para a negação lógica de um booleano.  No caso
          raro de você precisar da inversão bit a bit do inteiro
          subjacente, converta para ‘int’ explicitamente (‘~int(x)’).

   * *note shutil: c5.:

        * A exceção ‘ExecError’ foi descontinuada desde o Python 3.14.
          Ela não foi usada por nenhuma função em ‘shutil’ desde o
          Python 3.4, e agora é um alias de *note RuntimeError: 195.

   * *note symtable: d8.:

        * O método *note Class.get_methods: 2e5. foi descontinuado desde
          o Python 3.14.

   * *note sys: d9.:

        * A função *note _enablelegacywindowsfsencoding(): 2ae. foi
          descontinuada desde o Python 3.13.  Em vez disso, use a
          variável de ambiente *note PYTHONLEGACYWINDOWSFSENCODING: 2af.

   * *note tarfile: de.:

        * O atributo não documentado e não utilizado ‘TarFile.tarfile’
          foi descontinuado desde o Python 3.13.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/122875


File: python.info,  Node: Remoção pendente no Python 3 17<3>,  Next: Remoção pendente no Python 3 18<2>,  Prev: Remoção pendente no Python 3 16<5>,  Up: Descontinuações

11.4 Remoção pendente no Python 3.17
====================================

   * *note collections.abc: 1e.:

        - *note collections.abc.ByteString: 2e7. está agendado para
          remoção no Python 3.17.

          Use ‘isinstance(obj, collections.abc.Buffer)’ para testar se
          ‘obj’ implementa o *note protocolo de buffer: 2e8. em tempo de
          execução.  Para uso em anotações de tipo, use *note Buffer:
          2e9. ou uma união que especifique explicitamente os tipos
          suportados pelo seu código (por exemplo, ‘bytes | bytearray |
          memoryview’).

          ‘ByteString’ foi originalmente concebido para ser uma classe
          abstrata que serviria como um supertipo de *note bytes: 1c2. e
          *note bytearray: 2ea.  No entanto, como o ABC nunca teve
          métodos, saber que um objeto era uma instância de ‘ByteString’
          nunca lhe dizia nada de útil sobre o objeto.  Outros tipos
          comuns de buffer, como *note memoryview: 2eb, também nunca
          foram entendidos como subtipos de ‘ByteString’ (seja em tempo
          de execução ou por verificadores de tipo estáticos).

          Veja PEP 688(1) para mais detalhes.  (Contribuição de Shantanu
          Jain em gh-91896(2).)

   * *note typing: 104.:

        - Antes do Python 3.14, as uniões antigas eram implementadas
          usando a classe privada ‘typing._UnionGenericAlias’.  Essa
          classe não é mais necessária para a implementação, mas foi
          mantida para compatibilidade com versões anteriores, com
          remoção prevista para o Python 3.17.  Os usuários devem usar
          auxiliares de introspecção documentados, como *note
          typing.get_origin(): 2ec. e *note typing.get_args(): 2ed, em
          vez de depender de detalhes de implementação privada.

        - *note typing.ByteString: 2ee, obsoleto desde o Python 3.9,
          está programado para ser removido no Python 3.17.

          Use ‘isinstance(obj, collections.abc.Buffer)’ para testar se
          ‘obj’ implementa o *note protocolo de buffer: 2e8. em tempo de
          execução.  Para uso em anotações de tipo, use *note Buffer:
          2e9. ou uma união que especifique explicitamente os tipos
          suportados pelo seu código (por exemplo, ‘bytes | bytearray |
          memoryview’).

          ‘ByteString’ foi originalmente concebido para ser uma classe
          abstrata que serviria como um supertipo de *note bytes: 1c2. e
          *note bytearray: 2ea.  No entanto, como o ABC nunca teve
          métodos, saber que um objeto era uma instância de ‘ByteString’
          nunca lhe dizia nada de útil sobre o objeto.  Outros tipos
          comuns de buffer, como *note memoryview: 2eb, também nunca
          foram entendidos como subtipos de ‘ByteString’ (seja em tempo
          de execução ou por verificadores de tipo estáticos).

          Veja PEP 688(3) para mais detalhes.  (Contribuição de Shantanu
          Jain em gh-91896(4).)

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0688/#current-options

   (2) https://github.com/python/cpython/issues/91896

   (3) https://peps.python.org/pep-0688/#current-options

   (4) https://github.com/python/cpython/issues/91896


File: python.info,  Node: Remoção pendente no Python 3 18<2>,  Next: Remoção pendente em versões futuras<5>,  Prev: Remoção pendente no Python 3 17<3>,  Up: Descontinuações

11.5 Remoção pendente no Python 3.18
====================================

   * *note decimal: 36.:

        * O especificador de formato de *note Decimal: 29d. não padrão e
          não documentado ‘'N'’, que só é suportado na implementação C
          do módulo ‘decimal’, foi descontinuada desde o Python 3.13.
          (Contribuição de Serhiy Storchaka em gh-89902(1).)

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/89902


File: python.info,  Node: Remoção pendente em versões futuras<5>,  Next: Descontinuações na API C,  Prev: Remoção pendente no Python 3 18<2>,  Up: Descontinuações

11.6 Remoção pendente em versões futuras
========================================

As APIs a seguir serão removidas no futuro, embora atualmente não haja
uma data agendada para sua remoção.

   * *note argparse: 6.: o aninhamento de grupos de argumentos e o
     aninhamento de grupos mutuamente exclusivos estão descontinuados.

   * *note builtins: 12.:

        * Geradores: a assinatura ‘throw(type, exc, tb)’ e ‘athrow(type,
          exc, tb)’ está descontinuada: use ‘throw(exc)’ e
          ‘athrow(exc)’, a assinatura do argumento único.

        * Atualmente Python aceita literais numéricos imediatamente
          seguidos por palavras reservadas como, por exemplo, ‘0in x’,
          ‘1or x’, ‘0if 1else 2’.  Ele permite expressões confusas e
          ambíguas como ‘[0x1for x in y]’ (que pode ser interpretada
          como ‘[0x1 for x in y]’ ou ‘[0x1f or x in y]’).  Um aviso de
          sintaxe é levantado se o literal numérico for imediatamente
          seguido por uma das palavras reservadas *note and: 2f1, *note
          else: 18c, *note for: 2f2, *note if: 2f3, *note in: 2f4. ,
          *note is: 2f5. e *note or: 2f6.  Em uma versão futura, será
          alterado para um erro de sintaxe.  (gh-87999(1))

        * Suporte para métodos ‘__index__()’ e ‘__int__()’ retornando
          tipo não-int: esses métodos serão necessários para retornar
          uma instância de uma subclasse estrita de *note int: 257.

        * Suporte para o método ‘__float__()’ retornando uma subclasse
          estrita de *note float: 2f7.: esses métodos serão necessários
          para retornar uma instância de *note float: 2f7.

        * Suporte para o método ‘__complex__()’ retornando uma subclasse
          estrita de *note complex: 2f8.: esses métodos serão
          necessários para retornar uma instância de *note complex: 2f8.

        * Delegação do método ‘int()’ para o ‘__trunc__()’.

        * Passar um número complexo como argumento 'real' ou 'imag' no
          construtor *note complex(): 2f8. agora está descontinuado;
          deve ser passado apenas como um único argumento posicional.
          (Contribuição de Serhiy Storchaka em gh-109218(2).)

   * *note calendar: 14.: as constantes ‘calendar.January’ e
     ‘calendar.February’ foram descontinuadas e substituídas por *note
     calendar.JANUARY: 2f9. e *note calendar.FEBRUARY: 2fa.
     (Contribuição de Prince Roshan em gh-103636(3).)

   * *note codeobject.co_lnotab: 2e0.: use o método *note
     codeobject.co_lines(): 2fb.

   * *note datetime: 30.:

        * *note utcnow(): 2fc.: use
          ‘datetime.datetime.now(tz=datetime.UTC)’.

        * *note utcfromtimestamp(): 2fd.: use
          ‘datetime.datetime.fromtimestamp(timestamp, tz=datetime.UTC)’.

   * *note gettext: 63.: o valor de plural deve ser um número inteiro.

   * *note importlib: 77.:

        * O parâmetro 'debug_override' de *note cache_from_source():
          2fe. foi descontinuado: use o parâmetro 'optimization'.

   * *note importlib.metadata: 7a.:

        * Interface de tupla ‘EntryPoints’.

        * ‘None’ implícito nos valores de retorno.

   * *note logging: 87.: o método ‘warn()’ foi descontinuado desde o
     Python 3.3, use *note warning(): 2ff.

   * *note mailbox: 8b.: o uso da entrada StringIO e do modo de texto
     foi descontinuado; em vez disso, use BytesIO e o modo binário.

   * *note os: a1.: chame *note os.register_at_fork(): 300. em processo
     multithread.

   * ‘pydoc.ErrorDuringImport’: um valor de tupla para o parâmetro
     'exc_info' foi descontinuado, use uma instância de exceção.

   * *note re: b9.: regras mais rigorosas agora são aplicadas para
     referências numéricas de grupos e nomes de grupos em expressões
     regulares.  Apenas a sequência de dígitos ASCII agora é aceita como
     referência numérica.  O nome do grupo em padrões de bytes e strings
     de substituição agora pode conter apenas letras e dígitos ASCII e
     sublinhado.  (Contribuição de Serhiy Storchaka em gh-91760(4).)

   * Módulos ‘sre_compile’, ‘sre_constants’ e ‘sre_parse’.

   * *note shutil: c5.: o parâmetro 'onerror' de *note rmtree(): 301.
     foi descontinuado no Python 3.12; use o parâmetro 'onexc'.

   * Protocolos e opções de *note ssl: d0.

        * *note ssl.SSLContext: 294. sem argumento de protocolo foi
          descontinuado.

        * *note ssl.SSLContext: 294.: *note set_npn_protocols(): 302. e
          ‘selected_npn_protocol()’ foram descontinuados, use ALPN.

        * Opções de ‘ssl.OP_NO_SSL*’

        * Opções de ‘ssl.OP_NO_TLS*’

        * ‘ssl.PROTOCOL_SSLv3’

        * ‘ssl.PROTOCOL_TLS’

        * ‘ssl.PROTOCOL_TLSv1’

        * ‘ssl.PROTOCOL_TLSv1_1’

        * ‘ssl.PROTOCOL_TLSv1_2’

        * ‘ssl.TLSVersion.SSLv3’

        * ‘ssl.TLSVersion.TLSv1’

        * ‘ssl.TLSVersion.TLSv1_1’

   * Métodos de *note threading: ed.:

        * ‘threading.Condition.notifyAll()’: use *note notify_all():
          303.

        * ‘threading.Event.isSet()’: use *note is_set(): 304.

        * ‘threading.Thread.isDaemon()’, *note
          threading.Thread.setDaemon(): 305.: use o atributo *note
          threading.Thread.daemon: 306.

        * ‘threading.Thread.getName()’, *note
          threading.Thread.setName(): 307.: use o atributo *note
          threading.Thread.name: 308.

        * ‘threading.currentThread()’: use *note
          threading.current_thread(): 309.

        * ‘threading.activeCount()’: use *note threading.active_count():
          30a.

   * *note typing.Text: 30b. (gh-92332(5)).

   * *note unittest.IsolatedAsyncioTestCase: 30c.: foi descontinuado
     retornar um valor que não seja ‘None’ de um caso de teste.

   * Funções descontinuadas de *note urllib.parse: 10a.: use *note
     urlparse(): 30d.

        * ‘splitattr()’

        * ‘splithost()’

        * ‘splitnport()’

        * ‘splitpasswd()’

        * ‘splitport()’

        * ‘splitquery()’

        * ‘splittag()’

        * ‘splittype()’

        * ‘splituser()’

        * ‘splitvalue()’

        * ‘to_bytes()’

   * *note urllib.request: 10b.: o estilo de *note URLopener: 30e. e
     *note FancyURLopener: 30f. de invocar solicitações foi
     descontinuado.  Use as mais novas funções e métodos *note
     urlopen(): 293.

   * *note wsgiref: 118.: ‘SimpleHandler.stdout.write()’ não deve fazer
     gravações parciais.

   * *note xml.etree.ElementTree: 125.: testar o valor verdade de um
     *note Element: 310. está descontinuado.  Em um lançamento futuro
     isso sempre retornará ‘True’.  Em vez disso, prefira os testes
     explícitos ‘len(elem)’ ou ‘elem is not None’.

   * *note zipimport.zipimporter.load_module(): 311. foi descontinuado:
     use *note exec_module(): 312.

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/issues/87999

   (2) https://github.com/python/cpython/issues/109218

   (3) https://github.com/python/cpython/issues/103636

   (4) https://github.com/python/cpython/issues/91760

   (5) https://github.com/python/cpython/issues/92332


File: python.info,  Node: Descontinuações na API C,  Prev: Remoção pendente em versões futuras<5>,  Up: Descontinuações

11.7 Descontinuações na API C
=============================

* Menu:

* Remoção pendente no Python 3.14: Remoção pendente no Python 3 14<6>.
* Remoção pendente no Python 3.15: Remoção pendente no Python 3 15<6>.
* Remoção pendente em versões futuras: Remoção pendente em versões futuras<6>.


File: python.info,  Node: Remoção pendente no Python 3 14<6>,  Next: Remoção pendente no Python 3 15<6>,  Up: Descontinuações na API C

11.7.1 Remoção pendente no Python 3.14
--------------------------------------

   * O campo ‘ma_version_tag’ em *note PyDictObject: 3c1. para módulos
     de extensão ( PEP 699(1); gh-101193(2)).

   * A criação de *note tipos imutáveis: 3c2. com bases mutáveis
     (gh-95388(3)).

   * Funções para configurar a inicialização do Python, descontinuadas
     no Python 3.11:

        * ‘PySys_SetArgvEx()’: defina *note PyConfig.argv: 3c3.

        * ‘PySys_SetArgv()’: defina *note PyConfig.argv: 3c3.

        * ‘Py_SetProgramName()’: defina *note PyConfig.program_name:
          3c4.

        * ‘Py_SetPythonHome()’: defina *note PyConfig.home: 3bb.

     Em vez disso, a API *note Py_InitializeFromConfig(): 3c5. deve ser
     usada com *note PyConfig: 3a6.

   * Variáveis de configuração globais

        * *note Py_DebugFlag: 3c6.: use *note PyConfig.parser_debug:
          3c7.

        * *note Py_VerboseFlag: 3c8.: use *note PyConfig.verbose: 3c9.

        * *note Py_QuietFlag: 3ca.: use *note PyConfig.quiet: 3cb.

        * *note Py_InteractiveFlag: 3cc.: use *note
          PyConfig.interactive: 3cd.

        * *note Py_InspectFlag: 3ce.: use *note PyConfig.inspect: 3cf.

        * *note Py_OptimizeFlag: 3d0.: use *note
          PyConfig.optimization_level: 3d1.

        * *note Py_NoSiteFlag: 3d2.: use *note PyConfig.site_import:
          3d3.

        * *note Py_BytesWarningFlag: 3d4.: use *note
          PyConfig.bytes_warning: 3d5.

        * *note Py_FrozenFlag: 3d6.: use *note
          PyConfig.pathconfig_warnings: 3d7.

        * *note Py_IgnoreEnvironmentFlag: 3d8.: use *note
          PyConfig.use_environment: 3d9.

        * *note Py_DontWriteBytecodeFlag: 3da.: use *note
          PyConfig.write_bytecode: 3db.

        * *note Py_NoUserSiteDirectory: 3dc.: use *note
          PyConfig.user_site_directory: 3dd.

        * *note Py_UnbufferedStdioFlag: 3de.: use *note
          PyConfig.buffered_stdio: 3df.

        * *note Py_HashRandomizationFlag: 3e0.: use *note
          PyConfig.use_hash_seed: 3e1. e *note PyConfig.hash_seed: 3e2.

        * *note Py_IsolatedFlag: 3e3.: use *note PyConfig.isolated: 3e4.

        * *note Py_LegacyWindowsFSEncodingFlag: 3e5.: use *note
          PyPreConfig.legacy_windows_fs_encoding: 3e6.

        * *note Py_LegacyWindowsStdioFlag: 3e7.: use *note
          PyConfig.legacy_windows_stdio: 3a4.

        * ‘Py_FileSystemDefaultEncoding’: use *note
          PyConfig.filesystem_encoding: 3e8.

        * ‘Py_HasFileSystemDefaultEncoding’: use *note
          PyConfig.filesystem_encoding: 3e8.

        * ‘Py_FileSystemDefaultEncodeErrors’: use *note
          PyConfig.filesystem_errors: 3e9.

        * ‘Py_UTF8Mode’: use *note PyPreConfig.utf8_mode: 3ea.  (veja
          *note Py_PreInitialize(): 3eb.)

     Em vez disso, a API *note Py_InitializeFromConfig(): 3c5. deve ser
     usada com *note PyConfig: 3a6.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0699/

   (2) https://github.com/python/cpython/issues/101193

   (3) https://github.com/python/cpython/issues/95388


File: python.info,  Node: Remoção pendente no Python 3 15<6>,  Next: Remoção pendente em versões futuras<6>,  Prev: Remoção pendente no Python 3 14<6>,  Up: Descontinuações na API C

11.7.2 Remoção pendente no Python 3.15
--------------------------------------

   * The *note PyImport_ImportModuleNoBlock(): 3bd.: use *note
     PyImport_ImportModule(): 3be.

   * *note PyWeakref_GetObject(): 379. e *note PyWeakref_GET_OBJECT():
     3bf.: use *note PyWeakref_GetRef(): 378.

   * O tipo *note Py_UNICODE: 3ed. e a macro ‘Py_UNICODE_WIDE’: use
     ‘wchar_t’.

   * Funções de inicialização do Python

        * *note PySys_ResetWarnOptions(): 3af.: apague *note
          sys.warnoptions: 3b0. e ‘warnings.filters’.

        * *note Py_GetExecPrefix(): 3b1.: obtenha *note
          sys.base_exec_prefix: 3ee. e *note sys.exec_prefix: 3b2.

        * *note Py_GetPath(): 3b3.: leia *note sys.path: 3b4.

        * *note Py_GetPrefix(): 3b5.: obtenha *note sys.base_prefix:
          3ef. e *note sys.prefix: 3b6.

        * *note Py_GetProgramFullPath(): 3b7.: leia *note
          sys.executable: 3b8.

        * *note Py_GetProgramName(): 3b9.: leia *note sys.executable:
          3b8.

        * *note Py_GetPythonHome(): 3ba.: leia *note PyConfig.home: 3bb.
          ou a variável de ambiente *note PYTHONHOME: 3bc.


File: python.info,  Node: Remoção pendente em versões futuras<6>,  Prev: Remoção pendente no Python 3 15<6>,  Up: Descontinuações na API C

11.7.3 Remoção pendente em versões futuras
------------------------------------------

As APIs a seguir foram descontinuadas e serão removidas, embora
atualmente não haja uma data agendada para sua remoção.

   * *note Py_TPFLAGS_HAVE_FINALIZE: 3f2.: desnecessária desde o Python
     3.8.

   * *note PyErr_Fetch(): 3f3.: use *note PyErr_GetRaisedException():
     3f4.

   * *note PyErr_NormalizeException(): 3f5.: use *note
     PyErr_GetRaisedException(): 3f4.

   * *note PyErr_Restore(): 3f6.: use *note PyErr_SetRaisedException():
     3f7.

   * *note PyModule_GetFilename(): 3f8.: use *note
     PyModule_GetFilenameObject(): 3f9.

   * *note PyOS_AfterFork(): 3fa.: use *note PyOS_AfterFork_Child():
     3fb.

   * *note PySlice_GetIndicesEx(): 3fc.: use *note PySlice_Unpack():
     3fd. e *note PySlice_AdjustIndices(): 3fe.

   * ‘PyUnicode_AsDecodedObject()’: use *note PyCodec_Decode(): 3ff.

   * ‘PyUnicode_AsDecodedUnicode()’: use *note PyCodec_Decode(): 3ff.

   * ‘PyUnicode_AsEncodedObject()’: use *note PyCodec_Encode(): 400.

   * ‘PyUnicode_AsEncodedUnicode()’: use *note PyCodec_Encode(): 400.

   * *note PyUnicode_READY(): 401.: desnecessário desde o Python 3.12

   * ‘PyErr_Display()’: use *note PyErr_DisplayException(): 402.

   * ‘_PyErr_ChainExceptions()’: use ‘_PyErr_ChainExceptions1()’.

   * O membro ‘PyBytesObject.ob_shash’: chame *note PyObject_Hash():
     403.

   * O membro ‘PyDictObject.ma_version_tag’.

   * API do Thread Local Storage (TLS):

        * *note PyThread_create_key(): 404.: use *note
          PyThread_tss_alloc(): 405.

        * *note PyThread_delete_key(): 406.: use *note
          PyThread_tss_free(): 407.

        * *note PyThread_set_key_value(): 408.: use *note
          PyThread_tss_set(): 409.

        * *note PyThread_get_key_value(): 40a.: use *note
          PyThread_tss_get(): 40b.

        * *note PyThread_delete_key_value(): 40c.: use *note
          PyThread_tss_delete(): 40d.

        * *note PyThread_ReInitTLS(): 40e.: desnecessário desde o Python
          3.7.


File: python.info,  Node: Glossário,  Next: Sobre esta documentação,  Prev: Descontinuações,  Up: Top

12 Glossário
************

‘>>>’

     O prompt padrão do console *note interativo: 169. 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 *note interativo: 169. 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.

        * Os três pontos formam o objeto *note Ellipsis: 1d9a.
          (reticências).

classe base abstrata

     Classes bases abstratas (ABCs, do inglês 'abstract base class')
     complementam a *note tipagem pato: 55c5, fornecendo uma maneira de
     definir interfaces quando outras técnicas, como *note hasattr():
     4d2, seriam desajeitadas ou sutilmente erradas (por exemplo, com
     *note métodos mágicos: 20f3.).  ABCs introduzem subclasses
     virtuais, classes que não herdam de uma classe mas ainda são
     reconhecidas por *note isinstance(): 442. e *note issubclass():
     7c2.; veja a documentação do módulo *note abc: 4.  Python vem com
     muitas ABCs embutidas para estruturas de dados (no módulo *note
     collections.abc: 1e.), números (no módulo *note numbers: 9e.),
     fluxos (no módulo *note io: 7f.), localizadores e carregadores de
     importação (no módulo *note importlib.abc: 78.).  Você pode criar
     suas próprias ABCs com o módulo *note abc: 4.

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
     *note dica de tipo: 210d.

     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 *note anotação de variável: d79, *note anotação de função:
     1db7, PEP 484(1) e PEP 526(2), que descrevem esta funcionalidade.
     Veja também *note Boas práticas para anotações: 7da. para as
     melhores práticas sobre como trabalhar com anotações.

argumento

     Um valor passado para uma *note função: 21ea. (ou *note método:
     1638.) 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 passado como um valor em um dicionário precedido por ‘**’.
          Por exemplo, ‘3’ e ‘5’ são ambos argumentos nomeados nas
          chamadas da função *note complex(): 2f8. a seguir:

               complex(real=3, imag=5)
               complex(**{'real': 3, 'imag': 5})

        * 'argumento posicional': um argumento que não é um argumento
          nomeado.  Argumentos posicionais podem aparecer no início da
          lista de argumentos e/ou podem ser passados como elementos de
          um *note iterável: 1268. precedidos 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 *note Chamadas: da5. para as regras de
     atribuição.  Sintaticamente, qualquer expressão pode ser usada para
     representar um argumento; após a expressão ser avaliada, o valor
     resultante é atribuído à variável local.

     Veja também o termo *note parâmetro: 208f. no glossário, a pergunta
     no FAQ sobre *note a diferença entre argumentos e parâmetros: 54ff.
     e PEP 362(3).

gerenciador de contexto assíncrono

     Um objeto que controla o ambiente envolto numa instrução *note
     async with: 5d5. por meio da definição dos métodos *note
     __aenter__(): 215e. e *note __aexit__(): 1716.  Introduzido pela
     PEP 492(4).

gerador assíncrono

     Uma função que retorna um *note iterador gerador assíncrono: 45bd.
     É parecida com uma função de corrotina definida com *note async
     def: 5d1. exceto pelo fato de conter instruções *note yield: 9d5.
     para produzir uma série de valores que podem ser usados em um laço
     *note async for: aba.

     Normalmente se refere a uma função geradora assíncrona, mas pode se
     referir a um 'iterador gerador assíncrono' 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 *note await:
     1b9. e também as instruções *note async for: aba. e *note async
     with: 5d5.

iterador gerador assíncrono

     Um objeto criado por uma função *note geradora assíncrona: 21cf.

     Este é um *note iterador assíncrono: 1ab. que, quando chamado
     usando o método *note __anext__(): 1659, retorna um objeto
     aguardável que executará o corpo da função geradora assíncrona até
     a próxima expressão *note yield: 9d5.

     Cada *note yield: 9d5. suspende temporariamente o processamento,
     lembrando o estado de execução (incluindo variáveis locais e
     instruções ‘try’ pendentes).  Quando o 'iterador gerador
     assíncrono' é efetivamente retomado com outro aguardável retornado
     por *note __anext__(): 1659, ele inicia de onde parou.  Veja PEP
     492(5) e PEP 525(6).

iterável assíncrono

     Um objeto que pode ser usado em uma instrução *note async for: aba.
     Deve retornar um *note iterador assíncrono: 1ab. do seu método
     *note __aiter__(): c16.  Introduzido por PEP 492(7).

iterador assíncrono

     Um objeto que implementa os métodos *note __aiter__(): c16. e *note
     __anext__(): 1659.  *note __anext__(): 1659. deve retornar um
     objeto *note aguardável: 1ad.  *note async for: aba. resolve os
     aguardáveis retornados por um método *note __anext__(): 1659. do
     iterador assíncrono até que ele levante uma exceção *note
     StopAsyncIteration: 1ba5.  Introduzido pela PEP 492(8).

operação atômica

     Uma operação que parece ser executada como uma única etapa
     indivisível: nenhuma outra thread pode observá-la pela metade, e os
     seus efeitos tornam-se visíveis de uma só vez.  O Python não
     garante que as instruções de alto nível sejam atômicas (por
     exemplo, ‘x += 1’ executa várias operações de bytecode e não é
     atômico).  A atomicidade só é garantida quando explicitamente
     documentada.  Veja também *note condição de corrida: 55c7. e *note
     corrida de dados: 55c8.

atributo

     Um valor associado a um objeto que é geralmente referenciado pelo
     nome separado por um ponto.  Por exemplo, se um objeto 'o' tem um
     atributo 'a' esse seria referenciado como 'o.a'.

     É possível dar a um objeto um atributo cujo nome não seja um
     identificador conforme definido por *note Identificadores e
     palavras-chave: 2021, por exemplo usando *note setattr(): 22f3, se
     o objeto permitir.  Tal atributo não será acessível usando uma
     expressão pontilhada e, em vez disso, precisaria ser recuperado com
     *note getattr(): bea.

aguardável

     Um objeto que pode ser usado em uma expressão *note await: 1b9.
     Pode ser uma *note corrotina: 491. ou um objeto com um método *note
     __await__(): d9d.  Veja também a PEP 492(9).

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(10), criador do Python.

arquivo binário

     Um *note objeto arquivo: 1203. capaz de ler e gravar em *note
     objetos bytes ou similares: d4f.  Exemplos de arquivos binários são
     arquivos abertos no modo binário (‘'rb'’, ‘'wb'’ ou ‘'rb+'’), *note
     sys.stdin.buffer: 53d, *note sys.stdout.buffer: ae6, e instâncias
     de *note io.BytesIO: ed3. e *note gzip.GzipFile: 41a.

     Veja também *note arquivo texto: 1e0d. para um objeto arquivo capaz
     de ler e gravar em objetos *note str: 44c.

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 *note referência forte: 33d. para o objeto e
     assim destruí-lo.

     Chamar *note Py_INCREF(): 56e. na *note referência emprestada: 33e.
     é recomendado para convertê-lo, internamente, em uma *note
     referência forte: 33d, exceto quando o objeto não pode ser
     destruído antes do último uso da referência emprestada.  A função
     *note Py_NewRef(): 89e. pode ser usada para criar uma nova *note
     referência forte: 33d.

objeto bytes ou similar

     Um objeto com suporte ao *note Protocolo de buffer: 2e8. e que pode
     exportar um buffer C *note contíguo: 23b9.  Isso inclui todos os
     objetos *note bytes: 1c2, *note bytearray: 2ea. e *note
     array.array: 1a0, além de muitos objetos *note memoryview: 2eb.
     comuns.  Objetos bytes ou similares 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 bytes ou
     similares para leitura e escrita”.  Exemplos de objetos de buffer
     mutável incluem *note bytearray: 2ea. e um *note memoryview: 2eb.
     de um *note bytearray: 2ea.  Outras operações exigem que os dados
     binários sejam armazenados em objetos imutáveis (“objetos bytes ou
     similares para somente leitura”); exemplos disso incluem *note
     bytes: 1c2. e a *note memoryview: 2eb. de um objeto *note bytes:
     1c2.

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 *note
     máquina virtual: 370d, 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 *note o módulo dis: 5b2.

chamável

     Um chamável é um objeto que pode ser chamado, possivelmente com um
     conjunto de argumentos (veja *note argumento: 449.), com a seguinte
     sintaxe:

          chamavel(argumento1, argumento2, argumentoN)

     Uma *note função: 21ea, e por extensão um *note método: 1638, é um
     chamável.  Uma instância de uma classe que implementa o método
     *note __call__(): 558. 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).

variável de clausura

     Uma *note variável livre: 2169. referenciada de um *note escopo
     aninhado: 20d0. 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 *note nonlocal: 12ea. 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 *note variáveis livres: 2169, 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 *note codeobject.co_freevars: 208b. (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
     *note variável livre: 2169. à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’, p.ex., ‘3+1j’.  Para
     ter acesso aos equivalentes para números complexos do módulo *note
     math: 8e, utilize *note cmath: 18.  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.

concorrência

     A capacidade de um programa de computador executar múltiplas
     tarefas simultaneamente.  Python fornece bibliotecas para escrever
     programas que utilizam diferentes formas de concorrência.  O *note
     asyncio: a. é uma biblioteca para lidar com tarefas assíncronas e
     corrotinas.  O *note threading: ed. fornece acesso a threads do
     sistema operacional e o *note multiprocessing: 94. a processos do
     sistema operacional.  Processadores com vários núcleos podem
     executar threads e processos em diferentes núcleos da CPU ao mesmo
     tempo (veja o *note paralelismo: 55cd.).

modificação concorrente

     Quando várias threads modificam dados compartilhados
     simultaneamente, a modificação concorrente sem a devida
     sincronização pode causar *note condições de corrida: 55c7. e
     também pode causar *note corrida de dados: 55c8, corrupção de dados
     ou ambos.

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 *note
          gerenciador de contexto: 5d4. por meio de uma instrução *note
          with: 5d2.

        * A coleção de ligações de chave-valor associadas a um objeto
          *note contextvars.Context: 15b7. específico e acessadas por
          meio de objetos *note ContextVar: 1643.  Veja também *note
          variável de contexto: 55cf.

        * Um objeto *note contextvars.Context: 15b7.  Veja também *note
          contexto atual: 1697.

protocolo de gerenciamento de contexto

     Os métodos *note __enter__(): 5c8. e *note __exit__(): 1344.
     chamados pela instrução *note with: 5d2.  Veja PEP 343(11).

gerenciador de contexto

     Um objeto que implementa o *note protocolo de gerenciamento de
     contexto: 1698. e controla o ambiente envolto em uma instrução
     *note with: 5d2.  Veja PEP 343(12).

variável de contexto

     Uma variável cujo valor depende de qual contexto é o *note contexto
     atual: 1697.  Os valores são acessados por meio de objetos *note
     contextvars.ContextVar: 1643.  Variáveis de contexto são usadas
     principalmente para isolar o estado entre tarefas assíncronas
     simultâneas.

contíguo

     Um buffer é considerado contíguo exatamente se for 'contíguo C' ou
     'contíguo Fortran'.  Os buffers de dimensão zero são contíguos C e
     Fortran.  Em vetores unidimensionais, os itens devem ser dispostos
     na memória próximos um do outro, em ordem crescente de índices,
     começando do zero.  Em vetores multidimensionais contíguos C, o
     último índice varia mais rapidamente ao visitar itens em ordem de
     endereço de memória.  No entanto, nos vetores contíguos do Fortran,
     o primeiro índice varia mais rapidamente.

corrotina

     Corrotinas são uma forma mais generalizada de sub-rotinas.
     Sub-rotinas tem a entrada iniciada em um ponto, e a saída em outro
     ponto.  Corrotinas podem entrar, sair, e continuar em muitos pontos
     diferentes.  Elas podem ser implementadas com a instrução *note
     async def: 5d1.  Veja também PEP 492(13).

função de corrotina

     Uma função que retorna um objeto do tipo *note corrotina: 491.  Uma
     função de corrotina pode ser definida com a instrução *note async
     def: 5d1, e pode conter as palavras chaves *note await: 1b9, *note
     async for: aba, e *note async with: 5d5.  Isso foi introduzido pela
     PEP 492(14).

CPython

     A implementação canônica da linguagem de programação Python, como
     disponibilizada pelo python.org(15).  O termo “CPython” é usado
     quando necessário distinguir esta implementação de outras como
     Jython ou IronPython.

contexto atual

     O *note contexto: 1696. (objeto *note contextvars.Context: 15b7.)
     que é usado atualmente pelos objetos *note ContextVar: 1643. para
     acessar (obter ou definir) os valores de *note variáveis de
     contexto: 55cf.  Cada thread tem seu próprio contexto atual.
     Frameworks para executar tarefas assíncronas (veja *note asyncio:
     a.) associam cada tarefa a um contexto que se torna o contexto
     atual sempre que a tarefa inicia ou retoma a execução.

corrida de dados

     A situation where multiple threads access the same memory location
     concurrently, at least one of the accesses is a write, and the
     threads do not use any synchronization to control their access.
     Data races lead to *note non-deterministic: 55d0. behavior and can
     cause data corruption.  Proper use of *note locks: 55d1. and other
     *note synchronization primitives: 55d2. prevents data races.  Note
     that data races can only happen in native code, but that *note
     native code: 55d3. might be exposed in a Python API. See also *note
     race condition: 55c7. and *note thread-safe: 55d4.

impasse

     A situation in which two or more tasks (threads, processes, or
     coroutines) wait indefinitely for each other to release resources
     or complete actions, preventing any from making progress.  For
     example, if thread A holds lock 1 and waits for lock 2, while
     thread B holds lock 2 and waits for lock 1, both threads will wait
     indefinitely.  In Python this often arises from acquiring multiple
     locks in conflicting orders or from circular join/await
     dependencies.  Deadlocks can be avoided by always acquiring
     multiple *note locks: 55d1. in a consistent order.  See also *note
     lock: 55d1. and *note reentrant: 55d6.

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 *note classmethod(): 166. e *note
     staticmethod(): 416.

     A sintaxe do decorador é meramente um açúcar sintático, as duas
     definições de funções a seguir são semanticamente 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 *note definições de função:
     1db6. e *note definições de classe: 131a. para obter mais
     informações sobre decoradores.

descritor

     Qualquer objeto que define os métodos *note __get__(): 1530, *note
     __set__(): 20f7. ou *note __delete__(): 16f5.  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:
     *note Implementando descritores: c6a. ou o *note Guia de
     Descritores: 1535.

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 *note __hash__(): b0e. e *note __eq__(): b0d.  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 *note Sintaxe de criação
     de listas, conjuntos e dicionários: 5d0.

visão de dicionário

     Os objetos retornados por *note dict.keys(): 7ce, *note
     dict.values(): 7cf. e *note dict.items(): 7d0. 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 dicioná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 *note Objetos de visão de dicionário: 23d8.

docstring

     Abreviatura de “documentation string” (string de documentação).
     Uma string literal que aparece como primeira 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
     *note __doc__: 92e. 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 *note type():
     d6b. ou *note isinstance(): 442.  (Note, porém, que a tipagem pato
     pode ser complementada com o uso de *note classes base abstratas:
     11f5.)  Ao invés disso, são normalmente empregados testes *note
     hasattr(): 4d2. ou programação *note EAFP: 2d5a.

dunder

     Uma abreviação informal para “double underscore” (em português,
     sublinhado duplo), usada ao se referir a um *note método especial:
     19eb.  Por exemplo, ‘__init__’ é frequentemente pronunciado como
     “dunder init”.

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 atributos 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 *note try: 6e9. e
     *note except: 18b.  A técnica diverge do estilo *note LBYL: 55d9,
     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 *note instruções: 2935,
     as quais não podem ser usadas como expressões, como, por exemplo,
     *note while: 1d82.  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 *note formatted string
     literals: 9b1.  Veja também PEP 498(16).

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: *note arquivos
     binários: 1e0e. brutos, *note arquivos binários: 1e0e. em buffer e
     *note arquivos textos: 1e0d.  Suas interfaces estão definidas no
     módulo *note io: 7f.  A forma canônica para criar um objeto arquivo
     é usando a função *note open(): 51c.

objeto arquivo ou similar

     Um sinônimo do termo *note objeto arquivo: 1203.

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 *note UnicodeError: 12e6.

     As funções *note sys.getfilesystemencoding(): c74. e *note
     sys.getfilesystemencodeerrors(): d07. podem ser usadas para obter o
     tratador de erros e codificação do sistema de arquivos.

     O *note tratador de erros e codificação do sistema de arquivos:
     53b. são configurados na inicialização do Python pela função *note
     PyConfig_Read(): 790.: veja os membros *note filesystem_encoding:
     3e8. e *note filesystem_errors: 3e9. do *note PyConfig: 3a6.

     Veja também *note codificação da localidade: 242.

localizador

     Um objeto que tenta encontrar o *note carregador: 17a4. para um
     módulo que está sendo importado.

     Existem dois tipos de localizador: *note localizadores de
     metacaminho: 10a9. para uso com *note sys.meta_path: d4d, e *note
     localizadores de entrada de caminho: 10aa. para uso com *note
     sys.path_hooks: 105a.

     Veja *note Localizadores e carregadores: 2182. e *note importlib:
     77. 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(17).

threads livres

     Um modelo de threads onde múltiplas threads podem simultaneamente
     executar bytecode Python no mesmo interpretador.  Isso está em
     contraste com a *note trava global do interpretador: 148. que
     permite apenas uma thread por vez executar bytecode Python.  Veja
     PEP 703(18).

variável livre

     Formalmente, conforme definido no *note modelo de execução de
     linguagem: 2166, 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 *note variável de clausura: 20d1. para um exemplo.
     Pragmaticamente, devido ao nome do atributo *note
     codeobject.co_freevars: 208b, o termo também é usado algumas vezes
     como sinônimo de *note variável de clausura: 20d1.

função

     Uma série de instruções que retorna algum valor para um chamador.
     Também pode ser passado zero ou mais *note argumentos: 449. que
     podem ser usados na execução do corpo.  Veja também *note
     parâmetro: 208f, *note método: 1638. e a seção *note Definições de
     função: 1db6.

anotação de função

     Uma *note anotação: 458. de um parâmetro de função ou valor de
     retorno.

     Anotações de função são comumente usados por *note dicas de tipo:
     210d.: por exemplo, essa função espera receber dois argumentos
     *note int: 257. e também é esperado que devolva um valor *note int:
     257.:

          def soma_dois_numeros(a: int, b: int) -> int:
             return a + b

     A sintaxe de anotação de função é explicada na seção *note
     Definições de função: 1db6.

     Veja *note anotação de variável: d79. e PEP 484(19), que descrevem
     esta funcionalidade.  Veja também *note Boas práticas para
     anotações: 7da. para as melhores práticas sobre como trabalhar com
     anotações.

__future__

     A *note instrução future: 189, ‘from __future__ import <feature>’,
     direciona o compilador a compilar o módulo atual usando sintaxe ou
     semântica que será padrão em uma versão futura de Python.  O módulo
     *note __future__: 0. documenta os possíveis valores de 'feature'.
     Importando esse módulo e avaliando suas variáveis, você pode ver
     quando um novo recurso foi inicialmente adicionado à linguagem e
     quando será (ou se já é) o padrão:

          >>> import __future__
          >>> __future__.division
          _Feature((2, 2, 0, 'alpha', 2), (3, 0, 0, 'alpha', 0), 8192)

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 *note gc: 60.

gerador

     Uma função que retorna um *note iterador gerador: bf9.  É parecida
     com uma função normal, exceto pelo fato de conter expressões *note
     yield: 9d5. 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 *note next(): 7d9.

     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 *note geradora: 109a.

     Cada *note yield: 9d5. suspende temporariamente o processamento,
     memorizando o estado da execução (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 *note expressão: 2111. que retorna um *note iterador: 1ac.
     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:

          >>> sum(i*i for i in range(10))         # soma dos quadrados 0, 1, 4, ... 81
          285

função genérica

     Uma função composta por várias funções implementando a mesma
     operação para diferentes tipos.  Qual implementação deverá ser
     usada durante a execução é determinada pelo algoritmo de despacho.

     Veja também a entrada *note despacho único: 9fa. no glossário, o
     decorador *note functools.singledispatch(): 639, e a PEP 443(20).

tipo genérico

     Um *note tipo: 1a8b. que pode ser parametrizado; tipicamente uma
     *note classe contêiner: 2116. tal como *note list: 611. ou *note
     dict: 256.  Usado para *note dicas de tipo: 210d. e *note
     anotações: 458.

     Para mais detalhes, veja *note tipo apelido genérico: 6b2, PEP
     483(21), PEP 484(22), PEP 585(23), e o módulo *note typing: 104.

GIL

     Veja *note trava global do interpretador: 148.

trava global do interpretador

     O mecanismo utilizado pelo interpretador *note CPython: 6f6. para
     garantir que apenas uma thread execute o *note bytecode: 187.
     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 *note dict: 256.) ganhem segurança implícita contra
     acesso concorrente.  Travar todo o interpretador facilita que o
     interpretador em si seja multithread, às custas de muito do
     paralelismo já provido por máquinas com multiprocessadores.

     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
     liberada nas operações de E/S.

     A partir de Python 3.13, o GIL pode ser desabilitado usando a
     configuração de construção *note -disable-gil: 174.  Depois de
     construir Python com essa opção, o código deve ser executado com a
     opção *note -X gil=0: 176. ou a variável de ambiente *note
     PYTHON_GIL=0: 175. 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(24).

estado global

     Data that is accessible throughout a program, such as module-level
     variables, class variables, or C static variables in *note
     extension modules: 47eb.  In multi-threaded programs, global state
     shared between threads typically requires synchronization to avoid
     *note race conditions: 55c7. and *note data races: 55c8.

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 *note Invalidação de bytecode em
     cache: 5ec.

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 *note __hash__():
     b0e.) e pode ser comparado com outros objetos (precisa ter um
     método *note __eq__(): b0d.).  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;
     contêineres mutáveis (tais como listas ou dicionários) não são;
     contêineres 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 *note id():
     146a.

IDLE

     Um ambiente de desenvolvimento e aprendizado integrado para Python.
     *note IDLE — editor e console Python: 104b. é 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(25).

     Se um objeto é imortal, sua *note contagem de referências: 4b73.
     nunca é modificada e, portanto, nunca é desalocado enquanto o
     interpretador está em execução.  Por exemplo, *note True: c27. e
     *note None: 675. são imortais no CPython.

imutável

     An object with a fixed value.  Immutable objects include numbers,
     strings and tuples.  Such an object cannot be altered.  A new
     object has to be created if a different value has to be stored.
     They play an important role in places where a constant hash value
     is needed, for example as a key in a dictionary.  Immutable objects
     are inherently *note thread-safe: 55d4. because their state cannot
     be modified after creation, eliminating concerns about improperly
     synchronized *note concurrent modification: 55ce.

caminho de importação

     Uma lista de localizações (ou *note entradas de caminho: 2193.) que
     são buscadas pelo *note localizador baseado no caminho: 2188. por
     módulos para importar.  Durante a importação, esta lista de
     localizações usualmente vem a partir de *note sys.path: 3b4, 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 *note
     localizador: 20ae. e o objeto *note carregador: 17a4.

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 *note Modo
     interativo: 16f.

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 *note
     interativo: 169.

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 *note coletor de lixo:
     1a69.  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 terminou 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 *note
     list: 611, *note str: 44c. e *note tuple: 370.) e alguns tipos de
     não-sequência, como o *note dict: 256. e *note objetos arquivo:
     1203, além dos objetos de quaisquer classes que você definir com um
     método *note __iter__(): c8a. ou *note __getitem__(): 283. que
     implementam a semântica de *note sequência: 4f1.

     Iteráveis podem ser usados em um laço *note for: 2f2. e em vários
     outros lugares em que uma sequência é necessária (*note zip(): 7d1,
     *note map(): 867, …).  Quando um objeto iterável é passado como
     argumento para a função embutida *note iter(): 7d8, ela retorna um
     iterador para o objeto.  Este iterador é adequado para se varrer
     todo o conjunto de valores.  Ao usar iteráveis, normalmente não é
     necessário chamar *note iter(): 7d8. ou lidar com os objetos
     iteradores em si.  A instrução *note for: 2f2. 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 *note
     iterador: 1ac, *note sequência: 4f1, e *note gerador: 109a.

iterador

     Um objeto que representa um fluxo de dados.  Repetidas chamadas ao
     método *note __next__(): 1310. de um iterador (ou passando o objeto
     para a função embutida *note next(): 7d9.) vão retornar itens
     sucessivos do fluxo.  Quando não houver mais dados disponíveis uma
     exceção *note StopIteration: c15. 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 *note
     StopIteration: c15. novamente.  Iteradores precisam ter um método
     *note __iter__(): 1e4d. 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 *note list: 611.) produz
     um novo iterador a cada vez que você passá-lo para a função *note
     iter(): 7d8. ou utilizá-lo em um laço *note for: 2f2.  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 *note Tipos iteradores:
     230c.

     'Detalhes da implementação do CPython:' CPython does not
     consistently apply the requirement that an iterator define *note
     __iter__(): 1e4d.  And also please note that *note free-threaded:
     15e4. CPython does not guarantee *note thread-safe: 55d4. behavior
     of iterator operations.

função chave

     Uma função chave ou função colação é um chamável que retorna um
     valor usado para ordenação ou classificação.  Por exemplo, *note
     locale.strxfrm(): 15f3. é 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 ordenados ou agrupados.  Algumas
     delas incluem *note min(): f3a, *note max(): f3b, *note sorted():
     be7, *note list.sort(): be8, *note heapq.merge(): e30, *note
     heapq.nsmallest(): 26d7, *note heapq.nlargest(): 26d6. e *note
     itertools.groupby(): 28dd.

     There are several ways to create a key function.  For example.  the
     *note str.casefold(): e00. method can serve as a key function for
     case insensitive sorts.  Alternatively, a key function can be built
     from a *note lambda: 12df. expression such as ‘lambda r: (r[0],
     r[2])’.  Also, *note operator.attrgetter(): e60, *note
     operator.itemgetter(): a6b, and *note operator.methodcaller(): e61.
     are three key function constructors.  See the *note Sorting HOW TO:
     2314. for examples of how to create and use key functions.

argumento nomeado

     Veja *note argumento: 449.

lambda

     Uma função de linha anônima consistindo de uma única *note
     expressão: 2111, 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 *note
     EAFP: 2d5a. e é caracterizada pela presença de muitas instruções
     *note if: 2f3.

     In a multi-threaded environment, the LBYL approach can risk
     introducing a *note race condition: 55c7. between “the looking” and
     “the leaping”.  For example, the code, ‘if key in mapping: return
     mapping[key]’ can fail if another thread removes 'key' from
     'mapping' after the test, but before the lookup.  This issue can be
     solved with *note locks: 55d1. or by using the *note EAFP: 2d5a.
     approach.  See also *note thread-safe: 55d4.

analisador léxico

     Nome formal para o 'tokenizador'; veja *note token: 200a.

lista

     Uma *note sequência: 4f1. 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 *note if: 2f3. é opcional.  Se omitida,
     todos os elementos no ‘range(256)’ serão processados.

trava

     A *note synchronization primitive: 55d2. that allows only one
     thread at a time to access a shared resource.  A thread must
     acquire a lock before accessing the protected resource and release
     it afterward.  If a thread attempts to acquire a lock that is
     already held by another thread, it will block until the lock
     becomes available.  Python’s *note threading: ed. module provides
     *note Lock: 176d. (a basic lock) and *note RLock: 2de. (a *note
     reentrant: 55d6. lock).  Locks are used to prevent *note race
     conditions: 55c7. and ensure *note thread-safe: 55d4. access to
     shared data.  Alternative design patterns to locks exist such as
     queues, producer/consumer patterns, and thread-local state.  See
     also *note deadlock: 55d5, and *note reentrant: 55d6.

carregador

     Um objeto que carrega um módulo.  Ele deve definir os métodos
     ‘exec_module()’ e ‘create_module()’ para implementar a interface
     *note Loader: ef6.  Um carregador é normalmente retornado por um
     *note localizador: 20ae.  Veja também:

        * *note Localizadores e carregadores: 2182.

        * *note importlib.abc.Loader: ef6.

        * PEP 302(26)

codificação da localidade

     No Unix, é a codificação da localidade do LC_CTYPE, que pode ser
     definida com *note locale.setlocale(locale.LC_CTYPE, new_locale):
     2db.

     No Windows, é a página de código ANSI (ex: ‘"cp1252"’).

     No Android e no VxWorks, o Python usa ‘"utf-8"’ como a codificação
     da localidade.

     *note locale.getencoding(): 2dc. pode ser usado para obter a
     codificação da localidade.

     Veja também *note tratador de erros e codificação do sistema de
     arquivos: 53b.

método mágico

     Um sinônimo informal para um *note método especial: 19eb.

mapeamento

     Um objeto contêiner com suporte a pesquisas de chave arbitrária e
     que implementa os métodos especificados nas *note classes base
     abstratas: 87c. *note collections.abc.Mapping: 8d0. ou *note
     collections.abc.MutableMapping: 10eb.  Exemplos incluem *note dict:
     256, *note collections.defaultdict: 11fc, *note
     collections.OrderedDict: 5db. e *note collections.Counter: 10d0.

localizador de metacaminho

     Um *note localizador: 20ae. retornado por uma busca de *note
     sys.meta_path: d4d.  Localizadores de metacaminho são relacionados
     a, mas diferentes de, *note localizadores de entrada de caminho:
     10aa.

     Veja *note importlib.abc.MetaPathFinder: 872. para os métodos que
     localizadores de metacaminho implementam.

metaclasse

     A classe de uma classe.  Definições de classe criam um nome de
     classe, um dicionário de classe e uma lista de classes base.  A
     metaclasse é responsável por receber estes três argumentos e criar
     a classe.  A maioria das linguagens de programação orientadas a
     objetos provê uma implementação default.  O que torna o Python
     especial é o fato de ser possível criar metaclasses personalizadas.
     A maioria dos usuários nunca vai precisar deste recurso, mas quando
     houver necessidade, metaclasses possibilitam soluções poderosas e
     elegantes.  Metaclasses têm sido utilizadas para gerar registros de
     acesso a atributos, para incluir proteção contra acesso
     concorrente, rastrear a criação de objetos, implementar singletons,
     dentre muitas outras tarefas.

     Mais informações podem ser encontradas em *note Metaclasses: 2100.

método

     Uma função que é definida dentro do corpo de uma classe.  Se
     chamada como um atributo de uma instância daquela classe, o método
     receberá a instância do objeto como seu primeiro *note argumento:
     449. (que comumente é chamado de ‘self’).  Veja *note função: 21ea.
     e *note escopo aninhado: 20d0.

ordem de resolução de métodos

     Ordem de resolução de métodos é a ordem em que os membros de uma
     classe base são buscados durante a pesquisa.  Veja *note A Ordem de
     Resolução de Métodos do Python 2.3: 14f2. para detalhes do
     algoritmo usado pelo interpretador do Python desde a versão 2.3.

módulo

     Um objeto que serve como uma unidade organizacional de código
     Python.  Os módulos têm um espaço de nomes contendo objetos Python
     arbitrários.  Os módulos são carregados pelo Python através do
     processo de *note importação: 2178.

     Veja também *note pacote: 20aa.

spec de módulo

     Um espaço de nomes que contém as informações relacionadas à
     importação usadas para carregar um módulo.  Uma instância de *note
     importlib.machinery.ModuleSpec: 1fee.

     Veja também *note Especificações de módulo: 20a9.

MRO

     Veja *note ordem de resolução de métodos: 2316.

mutável

     An *note object: 55e1. with state that is allowed to change during
     the course of the program.  In multi-threaded programs, mutable
     objects that are shared between threads require careful
     synchronization to avoid *note race conditions: 55c7.  See also
     *note immutable: 1d79, *note thread-safe: 55d4, and *note
     concurrent modification: 55ce.

tupla nomeada

     O termo “tupla nomeada” é aplicado a qualquer tipo ou classe que
     herda de tupla e cujos elementos indexáveis também são acessíveis
     usando atributos nomeados.  O tipo ou classe pode ter outras
     funcionalidades também.

     Diversos tipos embutidos são tuplas nomeadas, incluindo os valores
     retornados por *note time.localtime(): 1541. e *note os.stat():
     4a0.  Outro exemplo é *note sys.float_info: 1b62.:

          >>> sys.float_info[1]                   # acesso indexado
          1024
          >>> sys.float_info.max_exp              # acesso a campo nomeado
          1024
          >>> isinstance(sys.float_info, tuple)   # tipo de tupla
          True

     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 *note
     tuple: 370. e que defina campos nomeados.  Tal classe pode ser
     escrita a mão, ou ela pode ser criada herdando *note
     typing.NamedTuple: 2b0. ou com uma função fábrica *note
     collections.namedtuple(): 1ca.  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.  Existem 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
     *note os.open(): dba. 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 *note random.seed(): 12b5. ou ‘itertools.izip()’,
     por exemplo, deixa claro que estas funções são implementadas pelos
     módulos *note random: b8. e *note itertools: 81. respectivamente.

pacote de espaço de nomes

     Um *note pacote: 20aa. que serve apenas como contêiner para
     subpacotes.  Pacotes de espaços de nomes podem não ter
     representação física, e especificamente não são como um *note
     pacote regular: 217c. porque eles não tem um arquivo ‘__init__.py’.

     Pacotes de espaço de nomes permitem que vários pacotes instaláveis
     individualmente tenham um pacote pai comum.  Caso contrário, é
     recomendado usar um *note pacote regular: 217c.

     Para mais informações, veja PEP 420(27) e *note Pacotes de espaço
     de nomes: 217e.

     Veja também *note módulo: 1755.

código nativo

     Code that is compiled to machine instructions and runs directly on
     the processor, as opposed to code that is interpreted or runs in a
     virtual machine.  In the context of Python, native code typically
     refers to C, C++, Rust or Fortran code in *note extension modules:
     47eb. that can be called from Python.  See also *note extension
     module: 47eb.

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 *note nonlocal: 12ea. 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 novo podiam usar recursos novos e versáteis do
     Python, tais como *note __slots__: 1533, descritores, propriedades,
     *note __getattribute__(): beb, métodos de classe e métodos
     estáticos.

não determinístico

     Behavior where the outcome of a program can vary between executions
     with the same inputs.  In multi-threaded programs,
     non-deterministic behavior often results from *note race
     conditions: 55c7. where the relative timing or interleaving of
     threads affects the result.  Proper synchronization using *note
     locks: 55d1. and other *note synchronization primitives: 55d2.
     helps ensure deterministic behavior.

objeto

     Qualquer dado que tenha estado (atributos ou valores) e
     comportamento definidos (métodos).  Também a última classe base de
     qualquer *note classe estilo novo: 2a42.

escopo otimizado

     Um escopo no qual os nomes das variáveis locais de destino são
     conhecidos de forma confiável pelo compilador 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 *note módulo: 1755. Python é capaz de conter submódulos ou
     recursivamente, subpacotes.  Tecnicamente, um pacote é um módulo
     Python com um atributo ‘__path__’.

     Veja também *note pacote regular: 217c. e *note pacote de espaço de
     nomes: 1dee.

paralelismo

     Executing multiple operations at the same time (e.g.  on multiple
     CPU cores).  In Python builds with the *note global interpreter
     lock (GIL): 148, only one thread runs Python bytecode at a time, so
     taking advantage of multiple CPU cores typically involves multiple
     processes (e.g.  *note multiprocessing: 94.) or native extensions
     that release the GIL. In *note free-threaded: 15e4. Python,
     multiple Python threads can run Python code simultaneously on
     different cores.

parâmetro

     Uma entidade nomeada na definição de uma *note função: 21ea. (ou
     método) que específica um *note argumento: 449. (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 *note posicional: 449. quanto *note nomeado: 449.  Esse
          é o tipo padrão de parâmetro, por exemplo 'foo' e 'bar' a
          seguir:

               def func(foo, bar=None): ...

        * '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:

               def func(somentepos1, somentepos2, /, posicional_ou_nomeado): ...

        * '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:

               def func(arg, *, somente_nom1, somente_nom2): ...

        * '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:

               def func(*args, **kwargs): ...

        * '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 ser 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 também o termo *note argumento: 449. no glossário, a pergunta
     do FAQ sobre *note a diferença entre argumentos e parâmetros: 54ff,
     a classe *note inspect.Parameter: 1d0, a seção *note Definições de
     função: 1db6. e a PEP 362(28).

entrada de caminho

     Um local único no *note caminho de importação: 2185. que o *note
     localizador baseado no caminho: 2188. consulta para encontrar
     módulos a serem importados.

localizador de entrada de caminho

     Um *note localizador: 20ae. retornado por um chamável em *note
     sys.path_hooks: 105a. (ou seja, um *note gancho de entrada de
     caminho: 2195.) que sabe como localizar os módulos *note entrada de
     caminho: 2193.

     Veja *note importlib.abc.PathEntryFinder: 873. para os métodos que
     localizadores de entrada de caminho implementam.

gancho de entrada de caminho

     Um chamável na lista *note sys.path_hooks: 105a. que retorna um
     *note localizador de entrada de caminho: 10aa. caso saiba como
     localizar módulos em uma *note entrada de caminho: 2193.
     específica.

localizador baseado no caminho

     Um dos *note localizadores de metacaminho: 10a9. padrão que procura
     por um *note caminho de importação: 2185. de módulos.

objeto caminho ou similar

     Um objeto representando um caminho de sistema de arquivos.  Um
     objeto caminho ou similar é ou um objeto *note str: 44c. ou *note
     bytes: 1c2. representando um caminho, ou um objeto implementando o
     protocolo *note os.PathLike: c6c.  Um objeto que suporta o
     protocolo *note os.PathLike: c6c. pode ser convertido para um
     arquivo de caminho do sistema *note str: 44c. ou *note bytes: 1c2,
     através da chamada da função *note os.fspath(): c6e.; *note
     os.fsdecode(): c6f. e *note os.fsencode(): c70. podem ser usadas
     para garantir um *note str: 44c. ou *note bytes: 1c2. como
     resultado, respectivamente.  Introduzido na PEP 519(29).

PEP

     Proposta de melhoria do Python.  Uma PEP é um documento de design
     que fornece informação para a comunidade Python, ou descreve uma
     nova funcionalidade para o Python ou seus predecessores ou
     ambientes.  PEPs devem prover uma especificação técnica concisa e
     um racional para funcionalidades propostas.

     PEPs têm a intenção de ser os mecanismos primários para propor
     novas funcionalidades significativas, para coletar opiniões da
     comunidade sobre um problema, e para documentar as decisões de
     design que foram adicionadas ao Python.  O autor da PEP é
     responsável por construir um consenso dentro da comunidade e
     documentar opiniões dissidentes.

     Veja PEP 1(30).

porção

     Um conjunto de arquivos em um único diretório (possivelmente
     armazenado em um arquivo zip) que contribuem para um pacote de
     espaço de nomes, conforme definido em PEP 420(31).

argumento posicional

     Veja *note argumento: 449.

API provisória

     Uma API provisória é uma API que foi deliberadamente excluída das
     bibliotecas padrões com compatibilidade retroativa garantida.
     Enquanto mudanças maiores para tais interfaces não são esperadas,
     contanto que elas sejam marcadas como provisórias, mudanças
     retroativas incompatíveis (até e incluindo a remoção da interface)
     podem ocorrer se consideradas necessárias pelos desenvolvedores
     principais.  Tais mudanças não serão feitas gratuitamente – elas
     irão ocorrer apenas se sérias falhas fundamentais forem
     descobertas, que foram esquecidas anteriormente a inclusão da API.

     Mesmo para APIs provisórias, mudanças retroativas incompatíveis são
     vistas como uma “solução em último caso” - cada tentativa ainda
     será feita para encontrar uma resolução retroativa compatível para
     quaisquer problemas encontrados.

     Esse processo permite que a biblioteca padrão continue a evoluir
     com o passar do tempo, sem se prender em erros de design
     problemáticos por períodos de tempo prolongados.  Veja PEP 411(32)
     para mais detalhes.

pacote provisório

     Veja *note API provisória: b16.

Python 3000

     Apelido para a linha de lançamento da versão do Python 3.x (cunhada
     há muito tempo, quando o lançamento da versão 3 era algo em um
     futuro muito distante.)  Esse termo possui a seguinte abreviação:
     “Py3k”.

Pythônico

     Uma ideia ou um pedaço de código que segue de perto as formas de
     escritas mais comuns da linguagem Python, ao invés de implementar
     códigos usando conceitos comuns a outras linguagens.  Por exemplo,
     um formato comum em Python é fazer um laço sobre todos os elementos
     de uma iterável usando a instrução *note for: 2f2.  Muitas outras
     linguagens não têm esse tipo de construção, então as pessoas que
     não estão familiarizadas com o Python usam um contador numérico:

          for i in range(len(comida)):
              print(comida[i])

     Ao contrário do método mais limpo, Pythônico:

          for parte in comida:
              print(parte)

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(33).  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'
          >>> C.D.metodo.__qualname__
          'C.D.metodo'

     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: ‘email.mime.text’:

          >>> import email.mime.text
          >>> email.mime.text.__name__
          'email.mime.text'

condição de corrida

     A condition of a program where the its behavior depends on the
     relative timing or ordering of events, particularly in
     multi-threaded programs.  Race conditions can lead to *note
     non-deterministic: 55d0. behavior and bugs that are difficult to
     reproduce.  A *note data race: 55c8. is a specific type of race
     condition involving unsynchronized access to shared memory.  The
     *note LBYL: 55d9. coding style is particularly susceptible to race
     conditions in multi-threaded code.  Using *note locks: 55d1. and
     other *note synchronization primitives: 55d2. helps prevent race
     conditions.

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 *note imortais: 45bb. 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
     *note CPython: 6f6.  Os programadores podem chamar a função *note
     sys.getrefcount(): 45ba. para retornar a contagem de referências
     para um objeto específico.

     Em *note CPython: 6f6, as contagens de referências não são
     consideradas valores estáveis ou bem definidos; o número de
     referências a um objeto e como esse número é afetado pelo código
     Python pode ser diferente entre as versões.

pacote regular

     Um *note pacote: 20aa. tradicional, como um diretório contendo um
     arquivo ‘__init__.py’.

     Veja também *note pacote de espaço de nomes: 1dee.

reentrant

     A property of a function or *note lock: 55d1. that allows it to be
     called or acquired multiple times by the same thread without
     causing errors or a *note deadlock: 55d5.

     For functions, reentrancy means the function can be safely called
     again before a previous invocation has completed, which is
     important when functions may be called recursively or from signal
     handlers.  Thread-unsafe functions may be *note non-deterministic:
     55d0. if they’re called reentrantly in a multithreaded program.

     For locks, Python’s *note threading.RLock: 2de. (reentrant lock) is
     reentrant, meaning a thread that already holds the lock can acquire
     it again without blocking.  In contrast, *note threading.Lock:
     176d. is not reentrant - attempting to acquire it twice from the
     same thread will cause a deadlock.

     See also *note lock: 55d1. and *note deadlock: 55d5.

REPL

     Um acrônimo para “read–eval–print loop”, outro nome para o console
     *note interativo: 169. do interpretador.

__slots__

     Uma declaração dentro de uma classe que economiza memória
     pré-declarando espaço para atributos de instâ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 *note iterável: 1268. com suporte para acesso eficiente a seus
     elementos através de índices inteiros via método especial *note
     __getitem__(): 283. e que define o método *note __len__(): 15b4.
     que devolve o tamanho da sequência.  Alguns tipos de sequência
     embutidos são: *note list: 611, *note str: 44c, *note tuple: 370, e
     *note bytes: 1c2.  Note que *note dict: 256. também tem suporte
     para *note __getitem__(): 283. e ‘__len__()’, mas é considerado um
     mapeamento e não uma sequência porque a busca usa uma chave *note
     hasheável: 610. arbitrária em vez de inteiros.

     A classe base abstrata *note collections.abc.Sequence: 1204. define
     uma interface mais rica que vai além de apenas *note __getitem__():
     283. e *note __len__(): 15b4, adicionando *note count(): 211a,
     *note index(): 211c, *note __contains__(): 1400, e *note
     __reversed__(): ca7.  Tipos que implementam essa interface podem
     ser explicitamente registrados usando *note register(): 10c7.  Para
     mais documentação sobre métodos de sequências em geral, veja *note
     Operações comuns de sequências: 233e.

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 *note Sintaxe de criação de listas,
     conjuntos e dicionários: 5d0.

despacho único

     Uma forma de despacho de *note função genérica: 9f9. onde a
     implementação é escolhida com base no tipo de um único argumento.

fatia

     Um objeto geralmente contendo uma parte de uma *note sequência:
     4f1.  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 *note slice: 469. 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á melhorada.

     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(34).

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 *note Nomes de métodos
     especiais: c89.

biblioteca padrão

     A coleção de *note pacotes: 20aa, *note módulos: 1755. e *note
     módulos de extensão: 47eb. distribuída como parte do pacote do
     interpretador Python oficial.  A relação exata de elementos da
     coleção pode variar de acordo com a plataforma, bibliotecas de
     sistema disponíveis ou outros critérios.  A documentação pode ser
     encontrada em *note A Biblioteca Padrão do Python: 144.

     Veja também *note sys.stdlib_module_names: 844. para obter uma
     lista de todos os possíveis nomes de módulos da biblioteca padrão.

instrução

     Uma instrução é parte de uma suíte (um “bloco” de código).  Uma
     instrução é ou uma *note expressão: 2111. ou uma de várias
     construções com uma palavra reservada, tal como *note if: 2f3,
     *note while: 1d82. ou *note for: 2f2.

verificador de tipo estático

     Uma ferramenta externa que lê código Python e o analisa, procurando
     por problemas como tipos incorretos.  Consulte também *note dicas
     de tipo: 210d. e o módulo *note typing: 104.

stdlib

     Uma abreviação para o termo *note biblioteca padrão: 55e6. em
     inglês (standard library).

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 *note Py_INCREF(): 56e. quando a
     referência é criada e liberada com *note Py_DECREF(): 56f. quando a
     referência é excluída.

     A função *note Py_NewRef(): 89e. pode ser usada para criar uma
     referência forte para um objeto.  Normalmente, a função *note
     Py_DECREF(): 56f. 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 *note referência emprestada: 33e.

synchronization primitive

     A basic building block for coordinating (synchronizing) the
     execution of multiple threads to ensure *note thread-safe: 55d4.
     access to shared resources.  Python’s *note threading: ed. module
     provides several synchronization primitives including *note Lock:
     176d, *note RLock: 2de, *note Semaphore: 1195, *note Condition:
     1194, *note Event: 1197, and *note Barrier: 1223.  Additionally,
     the *note queue: b6. module provides multi-producer, multi-consumer
     queues that are especially useful in multithreaded programs.  These
     primitives help prevent *note race conditions: 55c7. and coordinate
     thread execution.  See also *note lock: 55d1.

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 *note codecs:
     de1, que são coletivamente chamadas de “codificações de texto”.

arquivo texto

     Um *note objeto arquivo: 1203. apto a ler e escrever objetos *note
     str: 44c.  Geralmente, um arquivo texto, na verdade, acessa um
     fluxo de dados de bytes e captura o *note codificador de texto:
     2310. automaticamente.  Exemplos de arquivos texto são: arquivos
     abertos em modo texto (‘'r'’ or ‘'w'’), *note sys.stdin: 53d, *note
     sys.stdout: ae6, e instâncias de *note io.StringIO: f59.

     Veja também *note arquivo binário: 1e0e. para um objeto arquivo
     apto a ler e escrever *note objetos bytes ou similares: d4f.

seguro para thread

     A module, function, or class that behaves correctly when used by
     multiple threads concurrently.  Thread-safe code uses appropriate
     *note synchronization primitives: 55d2. like *note locks: 55d1. to
     protect shared mutable state, or is designed to avoid shared
     mutable state entirely.  In the *note free-threaded: 15e4. build,
     built-in types like *note dict: 256, *note list: 611, and *note
     set: 5d9. use internal locking to make many operations thread-safe,
     although thread safety is not necessarily guaranteed.  Code that is
     not thread-safe may experience *note race conditions: 55c7. and
     *note data races: 55c8. when used in multi-threaded programs.

token

     Uma pequena unidade de código-fonte, gerada pelo *note analisador
     léxico: 2007. (também chamado de 'tokenizador').  Nomes, números,
     strings, operadores, quebras de linha e similares são representados
     por tokens.

     O módulo *note tokenize: fb. expõe o analisador léxico do Python.
     O módulo *note token: fa. contém informações sobre os vários tipos
     de tokens.

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 *note __class__: 14f5. 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 *note dicas de tipo:
     210d.  Por exemplo:

          def remove_tons_de_cinza(
                  cores: list[tuple[int, int, int]]) -> list[tuple[int, int, int]]:
              pass

     pode tornar-se mais legível desta forma:

          Cor = tuple[int, int, int]

          def remove_tons_de_cinza(cores: list[Cor]) -> list[Cor]:
              pass

     Veja *note typing: 104. e PEP 484(35), a qual descreve esta
     funcionalidade.

dica de tipo

     Uma *note anotação: 458. que especifica o tipo esperado para uma
     variável, um atributo de classe, ou um parâmetro de função ou um
     valor de retorno.

     Dicas de tipo são opcionais e não são forçadas pelo Python, mas
     elas são úteis para *note verificadores de tipo estático: 26d.
     Eles também ajudam IDEs a completar e refatorar código.

     Dicas de tipos de variáveis globais, atributos de classes, e
     funções, mas não de variáveis locais, podem ser acessadas usando
     *note typing.get_type_hints(): 6b1.

     Veja *note typing: 104. e PEP 484(36), a qual descreve esta
     funcionalidade.

novas linhas universais

     Uma maneira de interpretar fluxos de textos, na qual todos estes
     são reconhecidos como caracteres de fim de linha: a convenção para
     fim de linha no Unix ‘'\n'’, a convenção no Windows ‘'\r\n'’, e a
     antiga convenção no Macintosh ‘'\r'’.  Veja PEP 278(37) e PEP
     3116(38), bem como *note bytes.splitlines(): 23a7. para uso
     adicional.

anotação de variável

     Uma *note anotação: 458. de uma variável ou um atributo de classe.

     Ao fazer uma anotação de uma variável ou um atributo de classe, a
     atribuição é opcional:

          class C:
              campo: 'anotação'

     Anotações de variáveis são normalmente usadas para *note dicas de
     tipo: 210d.: por exemplo, espera-se que esta variável receba
     valores do tipo *note int: 257.:

          contagem: int = 0

     A sintaxe de anotação de variável é explicada na seção *note
     instruções de atribuição anotado: 2241.

     Veja *note anotação de função: 1db7, PEP 484(39) e PEP 526(40), que
     descrevem esta funcionalidade.  Veja também *note Boas práticas
     para anotações: 7da. para as melhores práticas sobre como trabalhar
     com anotações.

ambiente virtual

     Um ambiente de execução isolado que permite usuários Python e
     aplicações instalarem e atualizarem pacotes Python sem interferir
     no comportamento de outras aplicações Python em execução no mesmo
     sistema.

     Veja também *note venv: 111.

máquina virtual

     Um computador definido inteiramente em software.  A máquina virtual
     de Python executa o *note bytecode: 187. emitido pelo compilador de
     bytecode.

operador morsa

     Uma maneira bem-humorada de se referir ao operador da *note
     expressão de atribuição: 2212. ‘:=’ porque ele se parece um pouco
     com uma morsa se você virar a cabeça.

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.

   ---------- Footnotes ----------

   (1) https://peps.python.org/pep-0484/

   (2) https://peps.python.org/pep-0526/

   (3) https://peps.python.org/pep-0362/

   (4) https://peps.python.org/pep-0492/

   (5) https://peps.python.org/pep-0492/

   (6) https://peps.python.org/pep-0525/

   (7) https://peps.python.org/pep-0492/

   (8) https://peps.python.org/pep-0492/

   (9) https://peps.python.org/pep-0492/

   (10) https://gvanrossum.github.io/

   (11) https://peps.python.org/pep-0343/

   (12) https://peps.python.org/pep-0343/

   (13) https://peps.python.org/pep-0492/

   (14) https://peps.python.org/pep-0492/

   (15) https://www.python.org

   (16) https://peps.python.org/pep-0498/

   (17) https://peps.python.org/pep-0238/

   (18) https://peps.python.org/pep-0703/

   (19) https://peps.python.org/pep-0484/

   (20) https://peps.python.org/pep-0443/

   (21) https://peps.python.org/pep-0483/

   (22) https://peps.python.org/pep-0484/

   (23) https://peps.python.org/pep-0585/

   (24) https://peps.python.org/pep-0703/

   (25) https://peps.python.org/pep-0683/

   (26) https://peps.python.org/pep-0302/

   (27) https://peps.python.org/pep-0420/

   (28) https://peps.python.org/pep-0362/

   (29) https://peps.python.org/pep-0519/

   (30) https://peps.python.org/pep-0001/

   (31) https://peps.python.org/pep-0420/

   (32) https://peps.python.org/pep-0411/

   (33) https://peps.python.org/pep-3155/

   (34) https://peps.python.org/pep-0387/#soft-deprecation

   (35) https://peps.python.org/pep-0484/

   (36) https://peps.python.org/pep-0484/

   (37) https://peps.python.org/pep-0278/

   (38) https://peps.python.org/pep-3116/

   (39) https://peps.python.org/pep-0484/

   (40) https://peps.python.org/pep-0526/


File: python.info,  Node: Sobre esta documentação,  Next: Lidando com bugs,  Prev: Glossário,  Up: Top

13 Sobre esta documentação
**************************

A documentação do Python é gerada a partir de fontes reStructuredText(1)
usando Sphinx(2), um gerador de documentação criado originalmente para
Python e agora mantido como um projeto independente.

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 *note Lidando com bugs: 4bc3. 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 autor de boa parte do conteúdo;

   * O projeto Docutils(3) 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.

* Menu:

* Contribuidores da documentação do Python::

   ---------- Footnotes ----------

   (1) https://docutils.sourceforge.io/rst.html

   (2) https://www.sphinx-doc.org/

   (3) https://docutils.sourceforge.io/


File: python.info,  Node: Contribuidores da documentação do Python,  Up: Sobre esta documentação

13.1 Contribuidores da documentação do Python
=============================================

Muitas pessoas têm contribuído para a linguagem Python, sua biblioteca
padrão e sua documentação.  Veja Misc/ACKS(1) na distribuição do código
do Python para ver uma lista parcial de contribuidores.

Tudo isso só foi possível com o esforço e a contribuição da comunidade
Python, por isso temos essa maravilhosa documentação – Obrigado a todos!

   ---------- Footnotes ----------

   (1) https://github.com/python/cpython/tree/3.13/Misc/ACKS


File: python.info,  Node: Lidando com bugs,  Next: Direitos autorais,  Prev: Sobre esta documentação,  Up: Top

14 Lidando com bugs
*******************

O Python é uma linguagem de programação madura que estabeleceu uma
reputação pela estabilidade.  A fim de manter esta reputação os
desenvolvedores gostariam de saber de quaisquer deficiências que você
encontre no Python.

Às vezes, pode ser mais rápido consertar os bugs você mesmo e contribuir
com patches para o Python uma vez que isso agiliza o processo e envolve
menos pessoas.  Veja aqui como *note contribuir: 55f1.

* Menu:

* Bugs na documentação::
* Usando o rastreador de problemas do Python::
* Começando a contribuir com o Python por conta própria::


File: python.info,  Node: Bugs na documentação,  Next: Usando o rastreador de problemas do Python,  Up: Lidando com bugs

14.1 Bugs na documentação
=========================

Se você achar um bug nesta documentação ou gostaria de propor uma
melhoria, por favor submeta um relatório no *note rastreador de
problemas: 24e.  Se você tiver uma sugestão sobre como consertá-lo
inclua isso também.

Se o bug ou a melhoria sugerida estiver relacionado à tradução desta
documentação, envie o relatório para o repositório de tradução(1).

Você também pode abrir um item de discussão em nosso fórum Discourse de
documentação(2).

Se você encontrar um bug no tema (HTML/CSS/JavaScript) da documentação,
envie um relatório de bug no rastreador de problemas do
python-doc-theme(3).

Ver também
..........

*note Bugs na documentação: 55f2.

     Uma lista de bugs na documentação que foram submetidos no
     rastreador de problemas do Python.

Rastreando problemas(4)

     Visão geral do processo envolvido em reportar uma melhoria no
     rastreador.

Ajudando com a documentação(5)

     Guia compreensivo para os indivíduos que estão interessados em
     contribuir com a documentação do Python.

Traduções da documentação(6)

     Uma lista de páginas no GitHub relacionadas à tradução da
     documentação e respectivos contatos iniciais.

   ---------- Footnotes ----------

   (1) https://github.com/python/python-docs-pt-br

   (2) https://discuss.python.org/c/documentation/26

   (3) https://github.com/python/python-docs-theme

   (4) https://devguide.python.org/tracker/

   (5) 
https://devguide.python.org/docquality/#helping-with-documentation

   (6) https://devguide.python.org/documentation/translating/


File: python.info,  Node: Usando o rastreador de problemas do Python,  Next: Começando a contribuir com o Python por conta própria,  Prev: Bugs na documentação,  Up: Lidando com bugs

14.2 Usando o rastreador de problemas do Python
===============================================

Relatórios de problemas do Python em si devem ser submetidos ao
rastreador de problemas do GitHub
(‘https://github.com/python/cpython/issues’).  O rastreador de problemas
do GitHub oferece um formulário web que permite informações pertinentes
serem enviadas para os desenvolvedores.

O primeiro passo para preencher um relatório é determinar se o problema
já foi reportado.  A vantagem em fazê-lo além de poupar o tempo dos
desenvolvedores é que você aprende o que foi feito para consertá-lo;
pode ser que o problema já foi consertado para o próximo lançamento, ou
que informação adicional seja necessária (nesse caso, você é bem-vindo
para fornecê-la se você puder!).  Para fazer isso, procure no rastreador
usando a caixa de busca no topo da página.

Se o problema que você está relatando ainda não estiver na lista, faça
login no GitHub.  Se você ainda não tiver uma conta do GitHub, crie uma
nova conta usando o link “Sign Up”.  Não é possível enviar um relatório
de bug anonimamente.

Estando agora autenticado, você pode submeter um relatório de problema.
Clique no botão “New issue” na barra superior para relatar um novo
problema.

O formulário de submissão tem dois campos, “Title” e “Comment”.

Para o campo “Title”, insira uma descrição 'muito' curta do problema;
menos de dez palavras é bom.

No campo “Comment”, descreva o problema com detalhes, incluindo o que
você esperava que acontecesse e o que aconteceu.  Certifique-se de
incluir se quaisquer módulos de extensão estavam envolvidos, e qual
hardware e plataforma de software você está usando (incluindo
informações sobre a versão quando apropriado).

Cada relatório de problema será revisado por um desenvolvedor que irá
determinar o que é necessário para solucionar o problema.  Você receberá
atualizações para cada ação tomada para o problema.

Ver também
..........

Como relatar bugs eficientemente(1)

     Artigo que entra em algum detalhe sobre como criar um relatório de
     bug útil.  Isto descreve qual tipo de informação é útil e por quê é
     útil.

Diretrizes para relatar bugs(2)

     Informação sobre como escrever um bom relatório de bug.  Um pouco
     disto é específico do Projeto Mozilla, mas descreve boas práticas
     em geral.

   ---------- Footnotes ----------

   (1) https://www.chiark.greenend.org.uk/~sgtatham/bugs.html

   (2) https://bugzilla.mozilla.org/page.cgi?id=bug-writing.html


File: python.info,  Node: Começando a contribuir com o Python por conta própria,  Prev: Usando o rastreador de problemas do Python,  Up: Lidando com bugs

14.3 Começando a contribuir com o Python por conta própria
==========================================================

Além de apenas reportar os bugs que você encontrar, você também é
bem-vindo para submeter patches para consertá-los.  Você pode achar mais
informações sobre como começar a contribuir com patches para o Python no
Python Developer's Guide(1).  Se você tem mais perguntas, a lista de
discussão core-mentorship(2) é um lugar amigável para obter respostas
para qualquer questão relativa ao processo de resolução de problemas no
Python.

   ---------- Footnotes ----------

   (1) https://devguide.python.org/

   (2) 
https://mail.python.org/mailman3/lists/core-mentorship.python.org/


File: python.info,  Node: Direitos autorais,  Next: História e Licença,  Prev: Lidando com bugs,  Up: Top

15 Direitos autorais
********************

Python e essa documentação é:

Copyright © 2001-2024 Python Software Foundation.  Todos os direitos
reservados.

Copyright © 2000 BeOpen.com.  Todos os direitos reservados.

Copyright © 1995-2000 Corporation for National Research Initiatives.
Todos os direitos reservados.

Copyright © 1991-1995 Stichting Mathematisch Centrum.  Todos os direitos
reservados.

__________________________________________________________________

Veja: *note História e Licença: 55f8. para informações completas de
licença e permissões.


File: python.info,  Node: História e Licença,  Next: Índice de Módulos Python,  Prev: Direitos autorais,  Up: Top

16 História e Licença
*********************

* Menu:

* História do software::
* Termos e condições para acessar ou usar Python::
* Licenças e Reconhecimentos para Software Incorporado::


File: python.info,  Node: História do software,  Next: Termos e condições para acessar ou usar Python,  Up: História e Licença

16.1 História do software
=========================

Python foi criado no início dos anos 1990 por Guido van Rossum no
Stichting Mathematisch Centrum (CWI, veja ‘https://www.cwi.nl’) na
Holanda como sucessor de uma linguagem chamada ABC. Guido continua sendo
o principal autor do Python, embora inclua muitas contribuições de
outros.

Em 1995, Guido continuou seu trabalho em Python na Corporation for
National Research Initiatives (CNRI, veja
‘https://www.cnri.reston.va.us’) em Reston, Virgínia, onde lançou várias
versões do software.

Em maio de 2000, Guido e a equipe de desenvolvimento do núcleo Python
mudaram-se para BeOpen.com para formar a equipe BeOpen PythonLabs.  Em
outubro do mesmo ano, a equipe PythonLabs mudou-se para a Digital
Creations, que se tornou Zope Corporation.  Em 2001, a Python Software
Foundation (PSF, veja ‘https://www.python.org/psf/’) foi formada, uma
organização sem fins lucrativos criada especificamente para possuir
Propriedade Intelectual relacionada ao Python.  A Zope Corporation era
um membro patrocinador da PSF.

Todas as versões do Python são de código aberto (consulte
‘https://opensource.org’ para a definição de código aberto).
Historicamente, a maioria, mas não todas, versões do Python também são
compatíveis com GPL; a tabela abaixo resume os vários lançamentos.

Versão               Derivada de        Ano              Proprietário     Compatível com a GPL?
                                                                          (1)
                                                                          
----------------------------------------------------------------------------------------------------
                                                                          
0.9.0 a 1.2          n/a                1991-1995        CWI              sim
                                                                          
                                                                          
1.3 a 1.5.2          1.2                1995-1999        CNRI             sim
                                                                          
                                                                          
1.6                  1.5.2              2000             CNRI             não
                                                                          
                                                                          
2.0                  1.6                2000             BeOpen.com       não
                                                                          
                                                                          
1.6.1                1.6                2001             CNRI             sim (2)
                                                                          
                                                                          
2.1                  2.0+1.6.1          2001             PSF              não
                                                                          
                                                                          
2.0.1                2.0+1.6.1          2001             PSF              sim
                                                                          
                                                                          
2.1.1                2.1+2.0.1          2001             PSF              sim
                                                                          
                                                                          
2.1.2                2.1.1              2002             PSF              sim
                                                                          
                                                                          
2.1.3                2.1.2              2002             PSF              sim
                                                                          
                                                                          
2.2 e acima          2.1.1              2001-agora       PSF              sim
                                                                          

     Nota: 
       1. 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.

       2. De acordo com Richard Stallman, 1.6.1 não é compatível com
          GPL, porque sua licença tem uma cláusula de escolha de lei.
          De acordo com a CNRI, no entanto, o advogado de Stallman disse
          ao advogado da CNRI que 1.6.1 “não é incompatível” com a GPL.

Graças aos muitos voluntários externos que trabalharam sob a direção de
Guido para tornar esses lançamentos possíveis.


File: python.info,  Node: Termos e condições para acessar ou usar Python,  Next: Licenças e Reconhecimentos para Software Incorporado,  Prev: História do software,  Up: História e Licença

16.2 Termos e condições para acessar ou usar Python
===================================================

O software e a documentação do Python são licenciados sob a Python
Software Foundation License Versão 2.

A partir do Python 3.8.6, exemplos, receitas e outros códigos na
documentação são licenciados duplamente sob o Licença PSF versão 2 e a
*note Licença BSD de Zero Cláusula: 55fe.

Alguns softwares incorporados ao Python estão sob licenças diferentes.
As licenças são listadas com o código abrangido por essa licença.  Veja
*note Licenças e Reconhecimentos para Software Incorporado: 55ff. para
uma lista incompleta dessas licenças.

* Menu:

* PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2::
* ACORDO DE LICENCIAMENTO DA BEOPEN.COM PARA PYTHON 2.0: ACORDO DE LICENCIAMENTO DA BEOPEN COM PARA PYTHON 2 0.
* CONTRATO DE LICENÇA DA CNRI PARA O PYTHON 1.6.1: CONTRATO DE LICENÇA DA CNRI PARA O PYTHON 1 6 1.
* ACORDO DE LICENÇA DA CWI PARA PYTHON 0.9.0 A 1.2: ACORDO DE LICENÇA DA CWI PARA PYTHON 0 9 0 A 1 2.
* ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION::


File: python.info,  Node: PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2,  Next: ACORDO DE LICENCIAMENTO DA BEOPEN COM PARA PYTHON 2 0,  Up: Termos e condições para acessar ou usar Python

16.2.1 PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2
---------------------------------------------------

     1. This LICENSE AGREEMENT is between the Python Software Foundation ("PSF"), and
        the Individual or Organization ("Licensee") accessing and otherwise using this
        software ("Python") in source or binary form and its associated documentation.

     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 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 alone or in any derivative version
        prepared by Licensee.

     3. In the event Licensee prepares a derivative work that is based on or
        incorporates Python or any part thereof, and wants to make the
        derivative work available to others as provided herein, then Licensee hereby
        agrees to include in any such work a brief summary of the changes made to Python.

     4. PSF is making Python available to Licensee on an "AS IS" basis.
        PSF MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED.  BY WAY OF
        EXAMPLE, BUT NOT LIMITATION, PSF MAKES NO AND DISCLAIMS ANY REPRESENTATION OR
        WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE
        USE OF PYTHON WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.

     5. PSF SHALL NOT BE LIABLE TO LICENSEE OR ANY OTHER USERS OF PYTHON
        FOR ANY INCIDENTAL, SPECIAL, OR CONSEQUENTIAL DAMAGES OR LOSS AS A RESULT OF
        MODIFYING, DISTRIBUTING, OR OTHERWISE USING PYTHON, OR ANY DERIVATIVE
        THEREOF, EVEN IF ADVISED OF THE POSSIBILITY THEREOF.

     6. This License Agreement will automatically terminate upon a material breach of
        its terms and conditions.

     7. Nothing in this License Agreement shall be deemed to create any relationship
        of agency, partnership, or joint venture between PSF and Licensee.  This License
        Agreement does not grant permission to use PSF trademarks or trade name in a
        trademark sense to endorse or promote products or services of Licensee, or any
        third party.

     8. By copying, installing or otherwise using Python, Licensee agrees
        to be bound by the terms and conditions of this License Agreement.


File: python.info,  Node: ACORDO DE LICENCIAMENTO DA BEOPEN COM PARA PYTHON 2 0,  Next: CONTRATO DE LICENÇA DA CNRI PARA O PYTHON 1 6 1,  Prev: PYTHON SOFTWARE FOUNDATION LICENSE VERSION 2,  Up: Termos e condições para acessar ou usar Python

16.2.2 ACORDO DE LICENCIAMENTO DA BEOPEN.COM PARA PYTHON 2.0
------------------------------------------------------------

ACORDO DE LICENCIAMENTO DA BEOPEN DE FONTE ABERTA DO PYTHON VERSÃO 1

     1. This LICENSE AGREEMENT is between BeOpen.com ("BeOpen"), having an office at
        160 Saratoga Avenue, Santa Clara, CA 95051, and the Individual or Organization
        ("Licensee") accessing and otherwise using this software in source or binary
        form and its associated documentation ("the Software").

     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.

     3. BeOpen is making the Software available to Licensee on an "AS IS" basis.
        BEOPEN MAKES NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED.  BY WAY OF
        EXAMPLE, BUT NOT LIMITATION, BEOPEN MAKES NO AND DISCLAIMS ANY REPRESENTATION OR
        WARRANTY OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR PURPOSE OR THAT THE
        USE OF THE SOFTWARE WILL NOT INFRINGE ANY THIRD PARTY RIGHTS.

     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.

     5. This License Agreement will automatically terminate upon a material breach of
        its terms and conditions.

     6. This License Agreement shall be governed by and interpreted in all respects
        by the law of the State of California, excluding conflict of law provisions.
        Nothing in this License Agreement shall be deemed to create any relationship of
        agency, partnership, or joint venture between BeOpen and Licensee.  This License
        Agreement does not grant permission to use BeOpen trademarks or trade names in a
        trademark sense to endorse or promote products or services of Licensee, or any
        third party.  As an exception, the "BeOpen Python" logos available at
        ‘http://www.pythonlabs.com/logos.html’ may be used according to the permissions
        granted on that web page.

     7. By copying, installing or otherwise using the software, Licensee agrees to be
        bound by the terms and conditions of this License Agreement.


File: python.info,  Node: CONTRATO DE LICENÇA DA CNRI PARA O PYTHON 1 6 1,  Next: ACORDO DE LICENÇA DA CWI PARA PYTHON 0 9 0 A 1 2,  Prev: ACORDO DE LICENCIAMENTO DA BEOPEN COM PARA PYTHON 2 0,  Up: Termos e condições para acessar ou usar Python

16.2.3 CONTRATO DE LICENÇA DA CNRI PARA O PYTHON 1.6.1
------------------------------------------------------

     1. This LICENSE AGREEMENT is between the Corporation for National Research
        Initiatives, having an office at 1895 Preston White Drive, Reston, VA 20191
        ("CNRI"), and the Individual or Organization ("Licensee") accessing and
        otherwise using Python 1.6.1 software in source or binary form and its
        associated documentation.

     2. Subject to the terms and conditions of this License Agreement, CNRI 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 1.6.1 alone or in any derivative version,
        provided, however, that CNRI's License Agreement and CNRI's notice of copyright,
        i.e., "Copyright © 1995-2001 Corporation for National Research Initiatives; All
        Rights Reserved" are retained in Python 1.6.1 alone or in any derivative version
        prepared by Licensee.  Alternately, in lieu of CNRI's License Agreement,
        Licensee may substitute the following text (omitting the quotes): "Python 1.6.1
        is made available subject to the terms and conditions in CNRI's License
        Agreement.  This Agreement together with Python 1.6.1 may be located on the
        internet using the following unique, persistent identifier (known as a handle):
        1895.22/1013.  This Agreement may also be obtained from a proxy server on the
        internet using the following URL: ‘http://hdl.handle.net/1895.22/1013’".

     3. In the event Licensee prepares a derivative work that is based on or
        incorporates Python 1.6.1 or any part thereof, and wants to make the derivative
        work available to others as provided herein, then Licensee hereby agrees to
        include in any such work a brief summary of the changes made to Python 1.6.1.

     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.

     6. This License Agreement will automatically terminate upon a material breach of
        its terms and conditions.

     7. This License Agreement shall be governed by the federal intellectual property
        law of the United States, including without limitation the federal copyright
        law, and, to the extent such U.S. federal law does not apply, by the law of the
        Commonwealth of Virginia, excluding Virginia's conflict of law provisions.
        Notwithstanding the foregoing, with regard to derivative works based on Python
        1.6.1 that incorporate non-separable material that was previously distributed
        under the GNU General Public License (GPL), the law of the Commonwealth of
        Virginia shall govern this License Agreement only as to issues arising under or
        with respect to Paragraphs 4, 5, and 7 of this License Agreement.  Nothing in
        this License Agreement shall be deemed to create any relationship of agency,
        partnership, or joint venture between CNRI and Licensee.  This License Agreement
        does not grant permission to use CNRI trademarks or trade name in a trademark
        sense to endorse or promote products or services of Licensee, or any third
        party.

     8. By clicking on the "ACCEPT" button where indicated, or by copying, installing
        or otherwise using Python 1.6.1, Licensee agrees to be bound by the terms and
        conditions of this License Agreement.


File: python.info,  Node: ACORDO DE LICENÇA DA CWI PARA PYTHON 0 9 0 A 1 2,  Next: ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION,  Prev: CONTRATO DE LICENÇA DA CNRI PARA O PYTHON 1 6 1,  Up: Termos e condições para acessar ou usar Python

16.2.4 ACORDO DE LICENÇA DA CWI PARA PYTHON 0.9.0 A 1.2
-------------------------------------------------------

     Copyright © 1991 - 1995, Stichting Mathematisch Centrum Amsterdam, The
     Netherlands.  All rights reserved.

     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.

     STICHTING MATHEMATISCH CENTRUM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
     SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
     EVENT SHALL STICHTING MATHEMATISCH CENTRUM 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.


File: python.info,  Node: ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION,  Prev: ACORDO DE LICENÇA DA CWI PARA PYTHON 0 9 0 A 1 2,  Up: Termos e condições para acessar ou usar Python

16.2.5 ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION
-------------------------------------------------------------------

     Permission to use, copy, modify, and/or distribute this software for any
     purpose with or without fee is hereby granted.

     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.


File: python.info,  Node: Licenças e Reconhecimentos para Software Incorporado,  Prev: Termos e condições para acessar ou usar Python,  Up: História e Licença

16.3 Licenças e Reconhecimentos para Software Incorporado
=========================================================

Esta seção é uma lista incompleta, mas crescente, de licenças e
reconhecimentos para softwares de terceiros incorporados na distribuição
do Python.

* Menu:

* Mersenne Twister::
* Soquetes: Soquetes<2>.
* Serviços de soquete assíncrono::
* Gerenciamento de cookies::
* Rastreamento de execução::
* Funções UUencode e UUdecode::
* Chamadas de procedimento remoto XML::
* test_epoll::
* kqueue de seleção::
* SipHash24::
* strtod e dtoa::
* OpenSSL: OpenSSL<2>.
* expat::
* libffi::
* zlib: zlib<3>.
* cfuhash::
* libmpdec::
* Conjunto de testes C14N do W3C::
* mimalloc::
* asyncio: asyncio<12>.
* Global Unbounded Sequences (GUS): Global Unbounded Sequences GUS.


File: python.info,  Node: Mersenne Twister,  Next: Soquetes<2>,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.1 Mersenne Twister
-----------------------

A extensão C ‘_random’ subjacente ao módulo *note random: b8. inclui
código baseado em um download de
‘http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/MT2002/emt19937ar.html’.
A seguir estão os comentários literais do código original:

     A C-program for MT19937, with initialization improved 2002/1/26.
     Coded by Takuji Nishimura and Makoto Matsumoto.

     Before using, initialize the state by using init_genrand(seed)
     or init_by_array(init_key, key_length).

     Copyright (C) 1997 - 2002, Makoto Matsumoto and Takuji Nishimura,
     All rights reserved.

     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     are met:

      1. Redistributions of source code must retain the above copyright
         notice, this list of conditions and the following disclaimer.

      2. Redistributions in binary form must reproduce the above copyright
         notice, this list of conditions and the following disclaimer in the
         documentation and/or other materials provided with the distribution.

      3. The names of its contributors may not be used to endorse or promote
         products derived from this software without specific prior written
         permission.

     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT OWNER 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.


     Any feedback is very welcome.
     http://www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/emt.html
     email: m-mat @ math.sci.hiroshima-u.ac.jp (remove space)


File: python.info,  Node: Soquetes<2>,  Next: Serviços de soquete assíncrono,  Prev: Mersenne Twister,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.2 Soquetes
---------------

O módulo *note socket: cc. usa as funções ‘getaddrinfo()’ e
‘getnameinfo()’, que são codificadas em arquivos de origem separados do
Projeto WIDE, ‘https://www.wide.ad.jp/’.

     Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
     All rights reserved.

     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     are met:
     1. Redistributions of source code must retain the above copyright
        notice, this list of conditions and the following disclaimer.
     2. Redistributions in binary form must reproduce the above copyright
        notice, this list of conditions and the following disclaimer in the
        documentation and/or other materials provided with the distribution.
     3. Neither the name of the project nor the names of its contributors
        may be used to endorse or promote products derived from this software
        without specific prior written permission.

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


File: python.info,  Node: Serviços de soquete assíncrono,  Next: Gerenciamento de cookies,  Prev: Soquetes<2>,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.3 Serviços de soquete assíncrono
-------------------------------------

Os módulos ‘test.support.asynchat’ e ‘test.support.asyncore’ contêm o
seguinte aviso:

     Copyright 1996 by Sam Rushing

                             All Rights Reserved

     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 Sam
     Rushing not be used in advertising or publicity pertaining to
     distribution of the software without specific, written prior
     permission.

     SAM RUSHING DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
     INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
     NO EVENT SHALL SAM RUSHING 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.


File: python.info,  Node: Gerenciamento de cookies,  Next: Rastreamento de execução,  Prev: Serviços de soquete assíncrono,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.4 Gerenciamento de cookies
-------------------------------

O módulo *note http.cookies: 71. contém o seguinte aviso:

     Copyright 2000 by Timothy O'Malley <timo@alum.mit.edu>

                    All Rights Reserved

     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
     Timothy O'Malley  not be used in advertising or publicity
     pertaining to distribution of the software without specific, written
     prior permission.

     Timothy O'Malley DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS
     SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
     AND FITNESS, IN NO EVENT SHALL Timothy O'Malley 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.


File: python.info,  Node: Rastreamento de execução,  Next: Funções UUencode e UUdecode,  Prev: Gerenciamento de cookies,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.5 Rastreamento de execução
-------------------------------

O módulo *note trace: fd. contém o seguinte aviso:

     portions copyright 2001, Autonomous Zones Industries, Inc., all rights...
     err...  reserved and offered to the public under the terms of the
     Python 2.2 license.
     Author: Zooko O'Whielacronx
     http://zooko.com/
     mailto:zooko@zooko.com

     Copyright 2000, Mojam Media, Inc., all rights reserved.
     Author: Skip Montanaro

     Copyright 1999, Bioreason, Inc., all rights reserved.
     Author: Andrew Dalke

     Copyright 1995-1997, Automatrix, Inc., all rights reserved.
     Author: Skip Montanaro

     Copyright 1991-1995, Stichting Mathematisch Centrum, all rights reserved.


     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.


File: python.info,  Node: Funções UUencode e UUdecode,  Next: Chamadas de procedimento remoto XML,  Prev: Rastreamento de execução,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.6 Funções UUencode e UUdecode
----------------------------------

O codec ‘uu’ contém o seguinte aviso:

     Copyright 1994 by Lance Ellinghouse
     Cathedral City, California Republic, United States of America.
                            All Rights Reserved
     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 Lance Ellinghouse
     not be used in advertising or publicity pertaining to distribution
     of the software without specific, written prior permission.
     LANCE ELLINGHOUSE DISCLAIMS ALL WARRANTIES WITH REGARD TO
     THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
     FITNESS, IN NO EVENT SHALL LANCE ELLINGHOUSE CENTRUM 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.

     Modified by Jack Jansen, CWI, July 1995:
     - Use binascii module to do the actual line-by-line conversion
       between ascii and binary. This results in a 1000-fold speedup. The C
       version is still 5 times faster, though.
     - Arguments more compliant with Python standard


File: python.info,  Node: Chamadas de procedimento remoto XML,  Next: test_epoll,  Prev: Funções UUencode e UUdecode,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.7 Chamadas de procedimento remoto XML
------------------------------------------

O módulo *note xmlrpc.client: 12e. contém o seguinte aviso:

         The XML-RPC client interface is

     Copyright (c) 1999-2002 by Secret Labs AB
     Copyright (c) 1999-2002 by Fredrik Lundh

     By obtaining, using, and/or copying this software and/or its
     associated documentation, you agree that you have read, understood,
     and will comply with the following terms and conditions:

     Permission to use, copy, modify, and distribute this software and
     its associated documentation for any purpose and 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
     Secret Labs AB or the author not 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.


File: python.info,  Node: test_epoll,  Next: kqueue de seleção,  Prev: Chamadas de procedimento remoto XML,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.8 test_epoll
-----------------

O módulo ‘test.test_epoll’ contém o seguinte aviso:

     Copyright (c) 2001-2006 Twisted Matrix Laboratories.

     Permission is hereby granted, free of charge, to any person obtaining
     a copy of this software and associated documentation files (the
     "Software"), to deal in the Software without restriction, including
     without limitation the rights to use, copy, modify, merge, publish,
     distribute, sublicense, and/or sell copies of the Software, and to
     permit persons to whom the Software is furnished to do so, subject to
     the following conditions:

     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.


File: python.info,  Node: kqueue de seleção,  Next: SipHash24,  Prev: test_epoll,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.9 kqueue de seleção
------------------------

O módulo *note select: c1. contém o seguinte aviso para a interface do
kqueue:

     Copyright (c) 2000 Doug White, 2006 James Knight, 2007 Christian Heimes
     All rights reserved.

     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     are met:
     1. Redistributions of source code must retain the above copyright
        notice, this list of conditions and the following disclaimer.
     2. Redistributions in binary form must reproduce the above copyright
        notice, this list of conditions and the following disclaimer in the
        documentation and/or other materials provided with the distribution.

     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.


File: python.info,  Node: SipHash24,  Next: strtod e dtoa,  Prev: kqueue de seleção,  Up: Licenças e Reconhecimentos para Software Incorporado

16.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@popcount.org>

     Permission is hereby granted, free of charge, to any person obtaining a copy
     of this software and associated documentation files (the "Software"), to deal
     in the Software without restriction, including without limitation the rights
     to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     copies of the Software, and to permit persons to whom the Software is
     furnished to do so, subject to the following conditions:

     The above copyright notice and this permission notice shall be included in
     all copies or substantial portions of the Software.
     </MIT License>

     Original location:
        https://github.com/majek/csiphash/

     Solution inspired by code from:
        Samuel Neves (supercop/crypto_auth/siphash24/little)
        djb (supercop/crypto_auth/siphash24/little2)
        Jean-Philippe Aumasson (https://131002.net/siphash/siphash24.c)


File: python.info,  Node: strtod e dtoa,  Next: OpenSSL<2>,  Prev: SipHash24,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.11 strtod e dtoa
---------------------

O arquivo ‘Python/dtoa.c’, que fornece as funções C dtoa e strtod para
conversão de duplas de C para e de strings, é derivado do arquivo com o
mesmo nome de David M. Gay, atualmente disponível em
‘https://web.archive.org/web/20220517033456/http://www.netlib.org/fp/dtoa.c’.
O arquivo original, conforme recuperado em 16 de março de 2009, contém
os seguintes avisos de direitos autorais e de licenciamento:

     /****************************************************************
      *
      * 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.
      *
      ***************************************************************/


File: python.info,  Node: OpenSSL<2>,  Next: expat,  Prev: strtod e dtoa,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.12 OpenSSL
---------------

Os módulos *note hashlib: 68, *note posix: ad. e *note ssl: d0. usam a
biblioteca OpenSSL para desempenho adicional se forem disponibilizados
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
                          https://www.apache.org/licenses/

     TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

     1. Definitions.

        "License" shall mean the terms and conditions for use, reproduction,
        and distribution as defined by Sections 1 through 9 of this document.

        "Licensor" shall mean the copyright owner or entity authorized by
        the copyright owner that is granting the License.

        "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
        direction or management of such entity, whether by contract or
        otherwise, or (ii) ownership of fifty percent (50%) or more of the
        outstanding shares, or (iii) beneficial ownership of such entity.

        "You" (or "Your") shall mean an individual or Legal Entity
        exercising permissions granted by this License.

        "Source" form shall mean the preferred form for making modifications,
        including but not limited to software source code, documentation
        source, and configuration files.

        "Object" form shall mean any form resulting from mechanical
        transformation or translation of a Source form, including but
        not limited to compiled object code, generated documentation,
        and conversions to other media types.

        "Work" shall mean the work of authorship, whether in Source or
        Object form, made available under the License, as indicated by a
        copyright notice that is included in or attached to the work
        (an example is provided in the Appendix below).

        "Derivative Works" shall mean any work, whether in Source or Object
        form, that is based on (or derived from) the Work and for which the
        editorial revisions, annotations, elaborations, or other modifications
        represent, as a whole, an original work of authorship. For the purposes
        of this License, Derivative Works shall not include works that remain
        separable from, or merely link (or bind by name) to the interfaces of,
        the Work and Derivative Works thereof.

        "Contribution" shall mean any work of authorship, including
        the original version of the Work and any modifications or additions
        to that Work or Derivative Works thereof, that is intentionally
        submitted to Licensor for inclusion in the Work by the copyright owner
        or by an individual or Legal Entity authorized to submit on behalf of
        the copyright owner. For the purposes of this definition, "submitted"
        means any form of electronic, verbal, or written communication sent
        to the Licensor or its representatives, including but not limited to
        communication on electronic mailing lists, source code control systems,
        and issue tracking systems that are managed by, or on behalf of, the
        Licensor for the purpose of discussing and improving the Work, but
        excluding communication that is conspicuously marked or otherwise
        designated in writing by the copyright owner as "Not a Contribution."

        "Contributor" shall mean Licensor and any individual or Legal Entity
        on behalf of whom a Contribution has been received by Licensor and
        subsequently incorporated within the Work.

     2. Grant of Copyright License. Subject to the terms and conditions of
        this License, each Contributor hereby grants to You a perpetual,
        worldwide, non-exclusive, no-charge, royalty-free, irrevocable
        copyright license to reproduce, prepare Derivative Works of,
        publicly display, publicly perform, sublicense, and distribute the
        Work and such Derivative Works in Source or Object form.

     3. Grant of Patent License. Subject to the terms and conditions of
        this License, each Contributor hereby grants to You a perpetual,
        worldwide, non-exclusive, no-charge, royalty-free, irrevocable
        (except as stated in this section) patent license to make, have made,
        use, offer to sell, sell, import, and otherwise transfer the Work,
        where such license applies only to those patent claims licensable
        by such Contributor that are necessarily infringed by their
        Contribution(s) alone or by combination of their Contribution(s)
        with the Work to which such Contribution(s) was submitted. If You
        institute patent litigation against any entity (including a
        cross-claim or counterclaim in a lawsuit) alleging that the Work
        or a Contribution incorporated within the Work constitutes direct
        or contributory patent infringement, then any patent licenses
        granted to You under this License for that Work shall terminate
        as of the date such litigation is filed.

     4. Redistribution. You may reproduce and distribute copies of the
        Work or Derivative Works thereof in any medium, with or without
        modifications, and in Source or Object form, provided that You
        meet the following conditions:

        (a) You must give any other recipients of the Work or
            Derivative Works a copy of this License; and

        (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

        (d) If the Work includes a "NOTICE" text file as part of its
            distribution, then any Derivative Works that You distribute must
            include a readable copy of the attribution notices contained
            within such NOTICE file, excluding those notices that do not
            pertain to any part of the Derivative Works, in at least one
            of the following places: within a NOTICE text file distributed
            as part of the Derivative Works; within the Source form or
            documentation, if provided along with the Derivative Works; or,
            within a display generated by the Derivative Works, if and
            wherever such third-party notices normally appear. The contents
            of the NOTICE file are for informational purposes only and
            do not modify the License. You may add Your own attribution
            notices within Derivative Works that You distribute, alongside
            or as an addendum to the NOTICE text from the Work, provided
            that such additional attribution notices cannot be construed
            as modifying the License.

        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.

     5. Submission of Contributions. Unless You explicitly state otherwise,
        any Contribution intentionally submitted for inclusion in the Work
        by You to the Licensor shall be under the terms and conditions of
        this License, without any additional terms or conditions.
        Notwithstanding the above, nothing herein shall supersede or modify
        the terms of any separate license agreement you may have executed
        with Licensor regarding such Contributions.

     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.

     7. Disclaimer of Warranty. Unless required by applicable law or
        agreed to in writing, Licensor provides the Work (and each
        Contributor provides its Contributions) on an "AS IS" BASIS,
        WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
        implied, including, without limitation, any warranties or conditions
        of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
        PARTICULAR PURPOSE. You are solely responsible for determining the
        appropriateness of using or redistributing the Work and assume any
        risks associated with Your exercise of permissions under this License.

     8. Limitation of Liability. In no event and under no legal theory,
        whether in tort (including negligence), contract, or otherwise,
        unless required by applicable law (such as deliberate and grossly
        negligent acts) or agreed to in writing, shall any Contributor be
        liable to You for damages, including any direct, indirect, special,
        incidental, or consequential damages of any character arising as a
        result of this License or out of the use or inability to use the
        Work (including but not limited to damages for loss of goodwill,
        work stoppage, computer failure or malfunction, or any and all
        other commercial damages or losses), even if such Contributor
        has been advised of the possibility of such damages.

     9. Accepting Warranty or Additional Liability. While redistributing
        the Work or Derivative Works thereof, You may choose to offer,
        and charge a fee for, acceptance of support, warranty, indemnity,
        or other liability obligations and/or rights consistent with this
        License. However, in accepting such obligations, You may act only
        on Your own behalf and on Your sole responsibility, not on behalf
        of any other Contributor, and only if You agree to indemnify,
        defend, and hold each Contributor harmless for any liability
        incurred by, or claims asserted against, such Contributor by reason
        of your accepting any such warranty or additional liability.

     END OF TERMS AND CONDITIONS


File: python.info,  Node: expat,  Next: libffi,  Prev: OpenSSL<2>,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.13 expat
-------------

A extensão *note pyexpat: 126. é 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

     Permission is hereby granted, free of charge, to any person obtaining
     a copy of this software and associated documentation files (the
     "Software"), to deal in the Software without restriction, including
     without limitation the rights to use, copy, modify, merge, publish,
     distribute, sublicense, and/or sell copies of the Software, and to
     permit persons to whom the Software is furnished to do so, subject to
     the following conditions:

     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.


File: python.info,  Node: libffi,  Next: zlib<3>,  Prev: expat,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.14 libffi
--------------

A extensão C ‘_ctypes’ subjacente ao módulo *note ctypes: 2a. é
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.

     Permission is hereby granted, free of charge, to any person obtaining
     a copy of this software and associated documentation files (the
     "Software"), to deal in the Software without restriction, including
     without limitation the rights to use, copy, modify, merge, publish,
     distribute, sublicense, and/or sell copies of the Software, and to
     permit persons to whom the Software is furnished to do so, subject to
     the following conditions:

     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.


File: python.info,  Node: zlib<3>,  Next: cfuhash,  Prev: libffi,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.15 zlib
------------

A extensão *note zlib: 133. é 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

     This software is provided 'as-is', without any express or implied
     warranty.  In no event will the authors be held liable for any damages
     arising from the use of this software.

     Permission is granted to anyone to use this software for any purpose,
     including commercial applications, and to alter it and redistribute it
     freely, subject to the following restrictions:

     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.

     Jean-loup Gailly        Mark Adler
     jloup@gzip.org          madler@alumni.caltech.edu


File: python.info,  Node: cfuhash,  Next: libmpdec,  Prev: zlib<3>,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.16 cfuhash
---------------

A implementação da tabela de hash usada pelo *note tracemalloc: ff. é
baseada no projeto cfuhash:

     Copyright (c) 2005 Don Owens
     All rights reserved.

     This code is released under the BSD license:

     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     are met:

       * Redistributions of source code must retain the above copyright
         notice, this list of conditions and the following disclaimer.

       * Redistributions in binary form must reproduce the above
         copyright notice, this list of conditions and the following
         disclaimer in the documentation and/or other materials provided
         with the distribution.

       * Neither the name of the author nor the names of its
         contributors may be used to endorse or promote products derived
         from this software without specific prior written permission.

     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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
     COPYRIGHT OWNER 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.


File: python.info,  Node: libmpdec,  Next: Conjunto de testes C14N do W3C,  Prev: cfuhash,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.17 libmpdec
----------------

A extensão C ‘_decimal’ subjacente ao módulo *note decimal: 36. é
construída usando uma cópia incluída da biblioteca libmpdec, a menos que
a construção esteja configurada com ‘--with-system-libmpdec’:

     Copyright (c) 2008-2020 Stefan Krah. All rights reserved.

     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     are met:

     1. Redistributions of source code must retain the above copyright
        notice, this list of conditions and the following disclaimer.

     2. Redistributions in binary form must reproduce the above copyright
        notice, this list of conditions and the following disclaimer in the
        documentation and/or other materials provided with the distribution.

     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.


File: python.info,  Node: Conjunto de testes C14N do W3C,  Next: mimalloc,  Prev: libmpdec,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.18 Conjunto de testes C14N do W3C
--------------------------------------

O conjunto de testes C14N 2.0 no pacote *note test: e2.
(‘Lib/test/xmltestdata/c14n-20/’) foi recuperado do site do W3C em
‘https://www.w3.org/TR/xml-c14n2-testcases/’ e é distribuído sob a
licença BSD de 3 cláusulas:

     Copyright (c) 2013 W3C(R) (MIT, ERCIM, Keio, Beihang),
     All Rights Reserved.

     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     are met:

     * Redistributions of works must retain the original copyright notice,
       this list of conditions and the following disclaimer.
     * Redistributions in binary form must reproduce the original copyright
       notice, this list of conditions and the following disclaimer in the
       documentation and/or other materials provided with the distribution.
     * Neither the name of the W3C nor the names of its contributors may be
       used to endorse or promote products derived from this work without
       specific prior written permission.

     THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT
     OWNER 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.


File: python.info,  Node: mimalloc,  Next: asyncio<12>,  Prev: Conjunto de testes C14N do W3C,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.19 mimalloc
----------------

Licença MIT:

     Copyright (c) 2018-2021 Microsoft Corporation, Daan Leijen

     Permission is hereby granted, free of charge, to any person obtaining a copy
     of this software and associated documentation files (the "Software"), to deal
     in the Software without restriction, including without limitation the rights
     to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
     copies of the Software, and to permit persons to whom the Software is
     furnished to do so, subject to the following conditions:

     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.


File: python.info,  Node: asyncio<12>,  Next: Global Unbounded Sequences GUS,  Prev: mimalloc,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.20 asyncio
---------------

Partes do módulo *note asyncio: a. são incorporadas do uvloop 0.16(1),
que é distribuído sob a licença MIT:

     Copyright (c) 2015-2021 MagicStack Inc.  http://magic.io

     Permission is hereby granted, free of charge, to any person obtaining
     a copy of this software and associated documentation files (the
     "Software"), to deal in the Software without restriction, including
     without limitation the rights to use, copy, modify, merge, publish,
     distribute, sublicense, and/or sell copies of the Software, and to
     permit persons to whom the Software is furnished to do so, subject to
     the following conditions:

     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.

   ---------- Footnotes ----------

   (1) https://github.com/MagicStack/uvloop/tree/v0.16.0


File: python.info,  Node: Global Unbounded Sequences GUS,  Prev: asyncio<12>,  Up: Licenças e Reconhecimentos para Software Incorporado

16.3.21 Global Unbounded Sequences (GUS)
----------------------------------------

O arquivo ‘Python/qsbr.c’ é adaptado do esquema de recuperação de
memória segura “Global Unbounded Sequences” do FreeBSD em subr_smr.c(1).
O arquivo é distribuído sob a licença BSD de 2 cláusulas:

     Copyright (c) 2019,2020 Jeffrey Roberson <jeff@FreeBSD.org>

     Redistribution and use in source and binary forms, with or without
     modification, are permitted provided that the following conditions
     are met:
     1. Redistributions of source code must retain the above copyright
        notice unmodified, this list of conditions, and the following
        disclaimer.
     2. Redistributions in binary form must reproduce the above copyright
        notice, this list of conditions and the following disclaimer in the
        documentation and/or other materials provided with the distribution.

     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.

   ---------- Footnotes ----------

   (1) 
https://github.com/freebsd/freebsd-src/blob/main/sys/kern/subr_smr.c


File: python.info,  Node: Índice de Módulos Python,  Next: Índice,  Prev: História e Licença,  Up: Top

Índice de Módulos Python
************************

* Menu:

* __future__: 0. Future statement definitions
* __main__: 1. The environment where top-level code is run. Covers
                        command-line interfaces, import-time
                        behavior, and ''__name__ ==
                        '__main__'''.
* _thread: 2. Low-level threading API.
* _tkinter: 3. A binary module that contains the low-level interface
                        to Tcl/Tk.
* abc: 4. Abstract base classes according to :pep:'3119'.
* aifc: 5. Removed in 3.13.
* argparse: 6. Command-line option and argument parsing library.
* array: 7. Space efficient arrays of uniformly typed numeric
                        values.
* ast: 8. Abstract Syntax Tree classes and manipulation.
* asynchat: 9. Removed in 3.12.
* asyncio: a. Asynchronous I/O.
* asyncore: b. Removed in 3.12.
* atexit: c. Register and execute cleanup functions.
* audioop: d. Removed in 3.13.
* base64: e. RFC 4648: Base16, Base32, Base64 Data
                        Encodings; Base85 and Ascii85
* bdb: f. Debugger framework.
* binascii: 10. Tools for converting between binary and various ASCII-
                        encoded binary representations.
* bisect: 11. Array bisection algorithms for binary searching.
* builtins: 12. The module that provides the built-in namespace.
* bz2: 13. Interfaces for bzip2 compression and decompression.
* calendar: 14. Functions for working with calendars, including
                        some emulation of the Unix cal program.
* cgi: 15. Removed in 3.13.
* cgitb: 16. Removed in 3.13.
* chunk: 17. Removed in 3.13.
* cmath: 18. Mathematical functions for complex numbers.
* cmd: 19. Build line-oriented command interpreters.
* code: 1a. Facilities to implement read-eval-print loops.
* codecs: 1b. Encode and decode data and streams.
* codeop: 1c. Compile (possibly incomplete) Python code.
* collections: 1d. Container datatypes
* collections.abc: 1e. Abstract base classes for containers
* colorsys: 1f. Conversion functions between RGB and other color
                        systems.
* compileall: 20. Tools for byte-compiling all Python source files in a
                        directory tree.
* concurrent.futures: 21. Execute computations concurrently using threads or
                        processes.
* configparser: 22. Configuration file parser.
* contextlib: 23. Utilities for with-statement contexts.
* contextvars: 24. Context Variables
* copy: 25. Shallow and deep copy operations.
* copyreg: 26. Register pickle support functions.
* cProfile: 27.
* crypt: 28. Removed in 3.13.
* csv: 29. Write and read tabular data to and from delimited
                        files.
* ctypes: 2a. A foreign function library for Python.
* curses: 2b. An interface to the curses library, providing
                        portable terminal handling.
* curses.ascii: 2c. Constants and set-membership functions for ASCII
                        characters.
* curses.panel: 2d. A panel stack extension that adds depth to curses
                        windows.
* curses.textpad: 2e. Emacs-like input editing in a curses window.
* dataclasses: 2f. Generate special methods on user-defined classes.
* datetime: 30. Basic date and time types.
* dbm: 31. Interfaces to various Unix "database" formats.
* dbm.dumb: 32. Portable implementation of the simple DBM interface.
* dbm.gnu: 33. GNU database manager
* dbm.ndbm: 34. The New Database Manager
* dbm.sqlite3: 35. SQLite backend for dbm
* decimal: 36. Implementation of the General Decimal Arithmetic
                        Specification.
* difflib: 37. Helpers for computing differences between objects.
* dis: 38. Disassembler for Python bytecode.
* distutils: 39. Removed in 3.12.
* doctest: 3a. Test pieces of code within docstrings.
* email: 3b. Package supporting the parsing,
                        manipulating, and generating email messages.
* email.charset: 3c. Character Sets
* email.contentmanager: 3d. Storing and Retrieving Content from MIME Parts
* email.encoders: 3e. Encoders for email message payloads.
* email.errors: 3f. The exception classes used by the email package.
* email.generator: 40. Generate flat text email messages from a message
                        structure.
* email.header: 41. Representing non-ASCII headers
* email.headerregistry: 42. Automatic Parsing of headers based on the field name
* email.iterators: 43. Iterate over a message object tree.
* email.message: 44. The base class representing email messages.
* email.mime: 45. Build MIME messages.
* email.mime.application: 46.
* email.mime.audio: 47.
* email.mime.base: 48.
* email.mime.image: 49.
* email.mime.message: 4a.
* email.mime.multipart: 4b.
* email.mime.nonmultipart: 4c.
* email.mime.text: 4d.
* email.parser: 4e. Parse flat text email messages to produce a message
                        object structure.
* email.policy: 4f. Controlling the parsing and generating of messages
* email.utils: 50. Miscellaneous email package utilities.
* encodings: 51. Encodings package
* encodings.idna: 52. Internationalized Domain Names implementation
* encodings.mbcs: 53. Windows ANSI codepage
* encodings.utf_8_sig: 54. UTF-8 codec with BOM signature
* ensurepip: 55. Bootstrapping the "pip" installer into an existing
                        Python installation or virtual environment.
* enum: 56. Implementation of an enumeration class.
* errno: 57. Standard errno system symbols.
* faulthandler: 58. Dump the Python traceback.
* fcntl: 59. The fcntl() and ioctl() system calls.
* filecmp: 5a. Compare files efficiently.
* fileinput: 5b. Loop over standard input or a list of files.
* fnmatch: 5c. Unix shell style filename pattern matching.
* fractions: 5d. Rational numbers.
* ftplib: 5e. FTP protocol client (requires sockets).
* functools: 5f. Higher-order functions and operations on callable
                        objects.
* gc: 60. Interface to the cycle-detecting garbage collector.
* getopt: 61. Portable parser for command line options; support both
                        short and long option names.
* getpass: 62. Portable reading of passwords and retrieval of the
                        userid.
* gettext: 63. Multilingual internationalization services.
* glob: 64. Unix shell style pathname pattern expansion.
* graphlib: 65. Functionality to operate with graph-like structures
* grp: 66. The group database (getgrnam() and friends).
* gzip: 67. Interfaces for gzip compression and decompression
                        using file objects.
* hashlib: 68. Secure hash and message digest algorithms.
* heapq: 69. Heap queue algorithm (a.k.a. priority queue).
* hmac: 6a. Keyed-Hashing for Message Authentication (HMAC)
                        implementation
* html: 6b. Helpers for manipulating HTML.
* html.entities: 6c. Definitions of HTML general entities.
* html.parser: 6d. A simple parser that can handle HTML and XHTML.
* http: 6e. HTTP status codes and messages
* http.client: 6f. HTTP and HTTPS protocol client (requires sockets).
* http.cookiejar: 70. Classes for automatic handling of HTTP cookies.
* http.cookies: 71. Support for HTTP state management (cookies).
* http.server: 72. HTTP server and request handlers.
* idlelib: 73. Implementation package for the IDLE shell/editor.
* imaplib: 74. IMAP4 protocol client (requires sockets).
* imghdr: 75. Removed in 3.13.
* imp: 76. Removed in 3.12.
* importlib: 77. The implementation of the import machinery.
* importlib.abc: 78. Abstract base classes related to import
* importlib.machinery: 79. Importers and path hooks
* importlib.metadata: 7a. Accessing package metadata
* importlib.resources: 7b. Package resource reading, opening, and
                        access
* importlib.resources.abc: 7c. Abstract base classes for resources
* importlib.util: 7d. Utility code for importers
* inspect: 7e. Extract information and source code from live objects.
* io: 7f. Core tools for working with streams.
* ipaddress: 80. IPv4/IPv6 manipulation library.
* itertools: 81. Functions creating iterators for efficient looping.
* json: 82. Encode and decode the JSON format.
* json.tool: 83. A command line to validate and pretty-print JSON.
* keyword: 84. Test whether a string is a keyword in Python.
* linecache: 85. Provides random access to individual lines from text
                        files.
* locale: 86. Internationalization services.
* logging: 87. Flexible event logging system for applications.
* logging.config: 88. Configuration of the logging module.
* logging.handlers: 89. Handlers for the logging module.
* lzma: 8a. A Python wrapper for the liblzma compression library.
* mailbox: 8b. Manipulate mailboxes in various formats
* mailcap: 8c. Removed in 3.13.
* marshal: 8d. Convert Python objects to streams of bytes and back
                        (with different constraints).
* math: 8e. Mathematical functions (sin() etc.).
* mimetypes: 8f. Mapping of filename extensions to MIME types.
* mmap: 90. Interface to memory-mapped files for Unix and Windows.
* modulefinder: 91. Find modules used by a script.
* msilib: 92. Removed in 3.13.
* msvcrt: 93. Miscellaneous useful routines from the MS VC++
                        runtime.
* multiprocessing: 94. Process-based parallelism.
* multiprocessing.connection: 95. API for dealing with sockets.
* multiprocessing.dummy: 96. Dumb wrapper around threading.
* multiprocessing.managers: 97. Share data between process with shared objects.
* multiprocessing.pool: 98. Create pools of processes.
* multiprocessing.shared_memory: 99. Provides shared memory for direct access
                                 across processes.
* multiprocessing.sharedctypes: 9a. Allocate ctypes objects from shared memory.
* netrc: 9b. Loading of .netrc files.
* nis: 9c. Removed in 3.13.
* nntplib: 9d. Removed in 3.13.
* numbers: 9e. Numeric abstract base classes (Complex,
                        Real, Integral, etc.).
* operator: 9f. Functions corresponding to the standard operators.
* optparse: a0. Command-line option parsing library.
* os: a1. Miscellaneous operating system interfaces.
* os.path: a2. Operations on pathnames.
* ossaudiodev: a3. Removed in 3.13.
* pathlib: a4. Object-oriented filesystem paths
* pdb: a5. The Python debugger for interactive interpreters.
* pickle: a6. Convert Python objects to streams of bytes and back.
* pickletools: a7. Contains extensive comments about the pickle protocols
                        and pickle-machine opcodes, as well as some
                        useful functions.
* pipes: a8. Removed in 3.13.
* pkgutil: a9. Utilities for the import system.
* platform: aa. Retrieves as much platform identifying data as
                        possible.
* plistlib: ab. Generate and parse Apple plist files.
* poplib: ac. POP3 protocol client (requires sockets).
* posix: ad. The most common POSIX system calls (normally used via
                        module os).
* pprint: ae. Data pretty printer.
* profile: af. Python source profiler.
* pstats: b0. Statistics object for use with the profiler.
* pty: b1. Pseudo-Terminal Handling for Unix.
* pwd: b2. The password database (getpwnam() and friends).
* py_compile: b3. Generate byte-code files from Python source files.
* pyclbr: b4. Supports information extraction for a Python module
                        browser.
* pydoc: b5. Documentation generator and online help system.
* queue: b6. A synchronized queue class.
* quopri: b7. Encode and decode files using the MIME quoted-
                        printable encoding.
* random: b8. Generate pseudo-random numbers with various common
                        distributions.
* re: b9. Regular expression operations.
* readline: ba. GNU readline support for Python.
* reprlib: bb. Alternate repr() implementation with size limits.
* resource: bc. An interface to provide resource usage information on
                        the current process.
* rlcompleter: bd. Python identifier completion, suitable for the
                        GNU readline library.
* runpy: be. Locate and run Python modules without importing them
                        first.
* sched: bf. General purpose event scheduler.
* secrets: c0. Generate secure random numbers for managing secrets.
* select: c1. Wait for I/O completion on multiple streams.
* selectors: c2. High-level I/O multiplexing.
* shelve: c3. Python object persistence.
* shlex: c4. Simple lexical analysis for Unix shell-like languages.
* shutil: c5. High-level file operations, including copying.
* signal: c6. Set handlers for asynchronous events.
* site: c7. Module responsible for site-specific configuration.
* sitecustomize: c8.
* smtpd: c9. Removed in 3.12.
* smtplib: ca. SMTP protocol client (requires sockets).
* sndhdr: cb. Removed in 3.13.
* socket: cc. Low-level networking interface.
* socketserver: cd. A framework for network servers.
* spwd: ce. Removed in 3.13.
* sqlite3: cf. A DB-API 2.0 implementation using SQLite 3.x.
* ssl: d0. TLS/SSL wrapper for socket objects
* stat: d1. Utilities for interpreting the results of
                        os.stat(), os.lstat() and os.fstat().
* statistics: d2. Mathematical statistics functions
* string: d3. Common string operations.
* stringprep: d4. String preparation, as per RFC 3453
* struct: d5. Interpret bytes as packed binary data.
* subprocess: d6. Subprocess management.
* sunau: d7. Removed in 3.13.
* symtable: d8. Interface to the compiler's internal symbol tables.
* sys: d9. Access system-specific parameters and functions.
* sys.monitoring: da. Access and control event monitoring
* sysconfig: db. Python's configuration information
* syslog: dc. An interface to the Unix syslog library routines.
* tabnanny: dd. Tool for detecting white space related problems in
                        Python source files in a directory tree.
* tarfile: de. Read and write tar-format archive files.
* telnetlib: df. Removed in 3.13.
* tempfile: e0. Generate temporary files and directories.
* termios: e1. POSIX style tty control.
* test: e2. Regression tests package containing the testing suite
                        for Python.
* test.regrtest: e3. Drives the regression test suite.
* test.support: e4. Support for Python's regression test suite.
* test.support.bytecode_helper: e5. Support tools for testing correct bytecode
                                generation.
* test.support.import_helper: e6. Support for import tests.
* test.support.os_helper: e7. Support for os tests.
* test.support.script_helper: e8. Support for Python's script execution tests.
* test.support.socket_helper: e9. Support for socket tests.
* test.support.threading_helper: ea. Support for threading tests.
* test.support.warnings_helper: eb. Support for warnings tests.
* textwrap: ec. Text wrapping and filling
* threading: ed. Thread-based parallelism.
* time: ee. Time access and conversions.
* timeit: ef. Measure the execution time of small code snippets.
* tkinter: f0. Interface to Tcl/Tk for graphical user interfaces
* tkinter.colorchooser: f1. Color choosing dialog
* tkinter.commondialog: f2. Tkinter base class for dialogs
* tkinter.dnd: f3. Tkinter drag-and-drop interface
* tkinter.filedialog: f4. Dialog classes for file selection
* tkinter.font: f5. Tkinter font-wrapping class
* tkinter.messagebox: f6. Various types of alert dialogs
* tkinter.scrolledtext: f7. Text widget with a vertical scroll bar.
* tkinter.simpledialog: f8. Simple dialog windows
* tkinter.ttk: f9. Tk themed widget set
* token: fa. Constants representing terminal nodes of the parse
                        tree.
* tokenize: fb. Lexical scanner for Python source code.
* tomllib: fc. Parse TOML files.
* trace: fd. Trace or track Python statement execution.
* traceback: fe. Print or retrieve a stack traceback.
* tracemalloc: ff. Trace memory allocations.
* tty: 100. Utility functions that perform common terminal control
                        operations.
* turtle: 101. An educational framework for simple graphics
                        applications
* turtledemo: 102. A viewer for example turtle scripts
* types: 103. Names for built-in types.
* typing: 104. Support for type hints (see :pep:'484').
* unicodedata: 105. Access the Unicode Database.
* unittest: 106. Unit testing framework for Python.
* unittest.mock: 107. Mock object library.
* urllib: 108.
* urllib.error: 109. Exception classes raised by urllib.request.
* urllib.parse: 10a. Parse URLs into or assemble them from components.
* urllib.request: 10b. Extensible library for opening URLs.
* urllib.response: 10c. Response classes used by urllib.
* urllib.robotparser: 10d. Load a robots.txt file and answer questions about
                        fetchability of other URLs.
* usercustomize: 10e.
* uu: 10f. Removed in 3.13.
* uuid: 110. UUID objects (universally unique identifiers)
                        according to RFC 4122
* venv: 111. Creation of virtual environments.
* warnings: 112. Issue warning messages and control their disposition.
* wave: 113. Provide an interface to the WAV sound format.
* weakref: 114. Support for weak references and weak dictionaries.
* webbrowser: 115. Easy-to-use controller for web browsers.
* winreg: 116. Routines and objects for manipulating the Windows
                        registry.
* winsound: 117. Access to the sound-playing machinery for Windows.
* wsgiref: 118. WSGI Utilities and Reference Implementation.
* wsgiref.handlers: 119. WSGI server/gateway base classes.
* wsgiref.headers: 11a. WSGI response header tools.
* wsgiref.simple_server: 11b. A simple WSGI HTTP server.
* wsgiref.types: 11c. WSGI types for static type checking
* wsgiref.util: 11d. WSGI environment utilities.
* wsgiref.validate: 11e. WSGI conformance checker.
* xdrlib: 11f. Removed in 3.13.
* xml: 120. Package containing XML processing modules
* xml.dom: 121. Document Object Model API for Python.
* xml.dom.minidom: 122. Minimal Document Object Model (DOM) implementation.
* xml.dom.pulldom: 123. Support for building partial DOM trees from SAX
                        events.
* xml.etree.ElementInclude: 124.
* xml.etree.ElementTree: 125. Implementation of the ElementTree API.
* xml.parsers.expat: 126. An interface to the Expat non-validating XML parser.
* xml.parsers.expat.errors: 127.
* xml.parsers.expat.model: 128.
* xml.sax: 129. Package containing SAX2 base classes and convenience
                        functions.
* xml.sax.handler: 12a. Base classes for SAX event handlers.
* xml.sax.saxutils: 12b. Convenience functions and classes for use with SAX.
* xml.sax.xmlreader: 12c. Interface which SAX-compliant XML parsers must
                        implement.
* xmlrpc: 12d. Server and client modules implementing XML-RPC.
* xmlrpc.client: 12e. XML-RPC client access.
* xmlrpc.server: 12f. Basic XML-RPC server implementations.
* zipapp: 130. Manage executable Python zip archives
* zipfile: 131. Read and write ZIP-format archive files.
* zipimport: 132. Support for importing Python modules from ZIP
                        archives.
* zlib: 133. Low-level interface to compression and decompression
                        routines compatible with gzip.
* zoneinfo: 134. IANA time zone support


File: python.info,  Node: Índice,  Prev: Índice de Módulos Python,  Up: Top

Índice
******

[index]
* Menu:

* _ (sublinhado);em literal númerico:    Literais numéricos. (line   14)
* _ (sublinhado);em literal númerico <1>: Inteiros literais. (line   39)
* _ (sublinhado);gettext:                API do GNU gettext. (line   32)
* _ (sublinhado);na formatação de strings: Minilinguagem de especificação de formato.
                                                             (line  130)
* __, identificadores:                   Palavras reservadas contextuais.
                                                             (line   23)
* __abs__() (método object):             Emulando tipos numéricos.
                                                             (line  109)
* __abs__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line   77)
* __add__() (método object):             Emulando tipos numéricos.
                                                             (line   11)
* __add__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line   82)
* __aenter__() (método object):          Gerenciadores de contexto assíncronos.
                                                             (line   15)
* __aexit__() (método object):           Gerenciadores de contexto assíncronos.
                                                             (line   20)
* __aiter__() (método object):           Iteradores assíncronos.
                                                             (line   14)
* __all__:                               Importando * de um pacote.
                                                             (line    6)
* __all__ (atributo module):             A instrução import. (line   86)
* __all__ (atributo opcional de módulo): A instrução import. (line   86)
* __all__ (package variable):            Importando módulos<2>.
                                                             (line    9)
* __and__() (método enum.Flag):          Tipos de Dados<2>.  (line  509)
* __and__() (método object):             Emulando tipos numéricos.
                                                             (line   11)
* __and__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line   87)
* __anext__() (método agen):             Métodos geradores-iteradores assíncronos.
                                                             (line    9)
* __anext__() (método object):           Iteradores assíncronos.
                                                             (line   18)
* __annotations__ (atributo de classe):  Atributos especiais.
                                                             (line    6)
* __annotations__ (atributo de função):  Atributos especiais graváveis.
                                                             (line    6)
* __annotations__ (atributo de módulo):  Módulos<3>.         (line   21)
* __annotations__ (atributo function):   Atributos especiais graváveis.
                                                             (line   45)
* __annotations__ (atributo module):     Outros atributos graváveis em objetos de módulo.
                                                             (line   14)
* __annotations__ (atributo type):       Atributos especiais.
                                                             (line   42)
* __args__ (atributo genericalias):      Atributos especiais de objetos GenericAlias.
                                                             (line   16)
* __await__() (método object):           Objetos aguardáveis.
                                                             (line   14)
* __base__ (atributo de classe):         Atributos especiais.
                                                             (line    6)
* __base__ (atributo type):              Atributos especiais.
                                                             (line   32)
* __bases__ (atributo de classe):        Atributos especiais.
                                                             (line    6)
* __bases__ (atributo type):             Atributos especiais.
                                                             (line   26)
* __bool__() (método de objeto):         Emulando tipos contêineres.
                                                             (line   46)
* __bool__() (método object):            Personalização básica.
                                                             (line  338)
* __bound__ (atributo typing.TypeVar):   Criando tipos genéricos e apelidos de tipo.
                                                             (line  179)
* __breakpointhook__ (no módulo sys):    sys — Parâmetros e funções específicas do sistema.
                                                             (line  439)
* __buffer__() (método object):          Emulando tipos buffer.
                                                             (line   15)
* __builtins__ (atributo function):      Atributos especiais de somente leitura.
                                                             (line   10)
* __builtins__ (function attribute):     Atributos especiais de somente leitura.
                                                             (line    6)
* __bytes__() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  129)
* __bytes__() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  138)
* __bytes__() (método object):           Personalização básica.
                                                             (line  156)
* __cached__ (atributo de módulo):       Módulos<3>.         (line   21)
* __cached__ (atributo module):          Atributos relacionados à importação em objetos de módulo.
                                                             (line  145)
* __call__() (método argparse.Action):   Classes de ação.    (line   28)
* __call__() (método email.headerregistry.HeaderRegistry): email headerregistry Custom Header Objects.
                                                             (line  390)
* __call__() (método enum.EnumType):     Tipos de Dados<2>.  (line   20)
* __call__() (método object):            Emulando objetos chamáveis.
                                                             (line    6)
* __call__() (método objeto):            Chamadas.           (line  165)
* __call__() (método weakref.finalize):  weakref — Referências fracas.
                                                             (line  308)
* __call__() (no módulo operator):       operator — Operadores padrões como funções.
                                                             (line  226)
* __callback__ (atributo weakref.ref):   weakref — Referências fracas.
                                                             (line  133)
* __cause__ (atributo BaseException):    Contexto da exceção.
                                                             (line    9)
* __cause__ (atributo de exceção):       A instrução raise.  (line   30)
* __cause__ (atributo de exceção) <1>:   Contexto da exceção.
                                                             (line    6)
* __cause__ (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line   44)
* __ceil__() (método fractions.Fraction): fractions — Números racionais.
                                                             (line  191)
* __ceil__() (método object):            Emulando tipos numéricos.
                                                             (line  139)
* __class__ (atributo de instância):     Atributos especiais<2>.
                                                             (line    6)
* __class__ (atributo de módulo):        Personalizando acesso a atributos de módulos.
                                                             (line    6)
* __class__ (atributo module):           Personalizando acesso a atributos de módulos.
                                                             (line   25)
* __class__ (atributo object):           Atributos especiais<2>.
                                                             (line    6)
* __class__ (atributo unittest.mock.Mock): A classe Mock.    (line  564)
* __class__ (célula de método):          Criando o objeto classe.
                                                             (line    6)
* __class_getitem__() (método de classe object): Emulando tipos genéricos.
                                                             (line   33)
* __classcell__ (entrada de espaço de nomes de classe): Criando o objeto classe.
                                                             (line    6)
* __closure__ (atributo de função):      Atributos especiais de somente leitura.
                                                             (line    6)
* __closure__ (atributo function):       Atributos especiais de somente leitura.
                                                             (line   22)
* __code__ (atributo de função):         Atributos especiais graváveis.
                                                             (line    6)
* __code__ (atributo de objeto função):  Objetos código<2>.  (line    6)
* __code__ (atributo function):          Atributos especiais graváveis.
                                                             (line   36)
* __complex__() (método object):         Emulando tipos numéricos.
                                                             (line  117)
* __concat__() (no módulo operator):     operator — Operadores padrões como funções.
                                                             (line  181)
* __constraints__ (atributo typing.TypeVar): Criando tipos genéricos e apelidos de tipo.
                                                             (line  189)
* __contains__() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  179)
* __contains__() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  303)
* __contains__() (método enum.EnumType): Tipos de Dados<2>.  (line   66)
* __contains__() (método enum.Flag):     Tipos de Dados<2>.  (line  447)
* __contains__() (método mailbox.Mailbox): Objetos Mailbox.  (line  204)
* __contains__() (método object):        Emulando tipos contêineres.
                                                             (line  159)
* __contains__() (no módulo operator):   operator — Operadores padrões como funções.
                                                             (line  186)
* __context__ (atributo BaseException):  Contexto da exceção.
                                                             (line    9)
* __context__ (atributo de exceção):     A instrução raise.  (line   30)
* __context__ (atributo de exceção) <1>: Contexto da exceção.
                                                             (line    6)
* __context__ (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line   48)
* __contravariant__ (atributo typing.TypeVar): Criando tipos genéricos e apelidos de tipo.
                                                             (line  167)
* __copy__() (protocolo de cópia):       copy — Operações de cópia profunda e cópia rasa.
                                                             (line   82)
* __covariant__ (atributo typing.TypeVar): Criando tipos genéricos e apelidos de tipo.
                                                             (line  163)
* __debug__:                             A instrução assert. (line   21)
* __debug__ (variável interna):          Constantes embutidas.
                                                             (line   69)
* __deepcopy__() (protocolo de cópia):   copy — Operações de cópia profunda e cópia rasa.
                                                             (line   82)
* __default__ (atributo typing.ParamSpec): Criando tipos genéricos e apelidos de tipo.
                                                             (line  442)
* __default__ (atributo typing.TypeVar): Criando tipos genéricos e apelidos de tipo.
                                                             (line  199)
* __default__ (atributo typing.TypeVarTuple): Criando tipos genéricos e apelidos de tipo.
                                                             (line  337)
* __defaults__ (atributo de função):     Atributos especiais graváveis.
                                                             (line    6)
* __defaults__ (atributo function):      Atributos especiais graváveis.
                                                             (line   30)
* __del__() (método io.IOBase):          I/O Base Classes.   (line  164)
* __del__() (método object):             Personalização básica.
                                                             (line   56)
* __delattr__() (método object):         Personalizando o acesso aos atributos.
                                                             (line   70)
* __delete__() (método object):          Implementando descritores.
                                                             (line   43)
* __delitem__() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  226)
* __delitem__() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  337)
* __delitem__() (método mailbox.Mailbox): Objetos Mailbox.   (line   77)
* __delitem__() (método mailbox.MH):     MH objects.         (line   79)
* __delitem__() (método object):         Emulando tipos contêineres.
                                                             (line  116)
* __delitem__() (no módulo operator):    operator — Operadores padrões como funções.
                                                             (line  196)
* __dict__ (atributo de classe):         Atributos especiais.
                                                             (line    6)
* __dict__ (atributo de função):         Atributos especiais graváveis.
                                                             (line    6)
* __dict__ (atributo de instância):      Atributos especiais<2>.
                                                             (line    6)
* __dict__ (atributo de módulo):         Dicionários do módulo.
                                                             (line    9)
* __dict__ (atributo de módulo) <1>:     Objetos do Módulo.  (line   48)
* __dict__ (atributo function):          Atributos especiais graváveis.
                                                             (line   40)
* __dict__ (atributo module):            Dicionários do módulo.
                                                             (line    9)
* __dict__ (atributo object):            Atributos especiais<2>.
                                                             (line   10)
* __dict__ (atributo type):              Atributos especiais.
                                                             (line   21)
* __dir__ (atributo de módulo):          Personalizando acesso a atributos de módulos.
                                                             (line    6)
* __dir__() (método enum.Enum):          Tipos de Dados<2>.  (line  179)
* __dir__() (método enum.EnumType):      Tipos de Dados<2>.  (line   80)
* __dir__() (método module):             Personalizando acesso a atributos de módulos.
                                                             (line    6)
* __dir__() (método object):             Personalizando o acesso aos atributos.
                                                             (line   80)
* __dir__() (método unittest.mock.Mock): A classe Mock.      (line  301)
* __displayhook__ (no módulo sys):       sys — Parâmetros e funções específicas do sistema.
                                                             (line  439)
* __divmod__() (método object):          Emulando tipos numéricos.
                                                             (line   11)
* __doc__ (atributo de classe):          Atributos especiais.
                                                             (line    6)
* __doc__ (atributo de função):          Atributos especiais graváveis.
                                                             (line    6)
* __doc__ (atributo de método):          Métodos de instância.
                                                             (line   10)
* __doc__ (atributo de módulo):          Módulos<3>.         (line   21)
* __doc__ (atributo de módulo) <1>:      Objetos do Módulo.  (line   25)
* __doc__ (atributo definition):         Atributos Especiais.
                                                             (line   25)
* __doc__ (atributo function):           Atributos especiais graváveis.
                                                             (line   12)
* __doc__ (atributo method):             Métodos de instância.
                                                             (line   19)
* __doc__ (atributo module):             Outros atributos graváveis em objetos de módulo.
                                                             (line    9)
* __doc__ (atributo type):               Atributos especiais.
                                                             (line   38)
* __enter__() (método contextmanager):   Tipos de Gerenciador de Contexto.
                                                             (line   13)
* __enter__() (método object):           Gerenciadores de contexto da instrução with.
                                                             (line   22)
* __enter__() (método winreg.PyHKEY):    Objetos identificador de registro.
                                                             (line   54)
* __eq__() (método de instância):        Comparações<2>.     (line   50)
* __eq__() (método email.charset.Charset): email charset Representando conjuntos de caracteres.
                                                             (line  157)
* __eq__() (método email.header.Header): email header Internationalized headers.
                                                             (line  169)
* __eq__() (método memoryview):          Memory Views.       (line  114)
* __eq__() (método object):              Personalização básica.
                                                             (line  191)
* __eq__() (no módulo operator):         operator — Operadores padrões como funções.
                                                             (line   26)
* __excepthook__ (no módulo sys):        sys — Parâmetros e funções específicas do sistema.
                                                             (line  439)
* __excepthook__ (no módulo threading):  Referência<2>.      (line   67)
* __exit__() (método contextmanager):    Tipos de Gerenciador de Contexto.
                                                             (line   35)
* __exit__() (método object):            Gerenciadores de contexto da instrução with.
                                                             (line   29)
* __exit__() (método winreg.PyHKEY):     Objetos identificador de registro.
                                                             (line   54)
* __file__ (atributo de módulo):         Módulos<3>.         (line   21)
* __file__ (atributo de módulo) <1>:     Objetos do Módulo.  (line   25)
* __file__ (atributo de módulo) <2>:     Objetos do Módulo.  (line  101)
* __file__ (atributo module):            Atributos relacionados à importação em objetos de módulo.
                                                             (line  143)
* __firstlineno__ (atributo de classe):  Atributos especiais.
                                                             (line    6)
* __firstlineno__ (atributo type):       Atributos especiais.
                                                             (line   72)
* __float__() (método object):           Emulando tipos numéricos.
                                                             (line  117)
* __floor__() (método fractions.Fraction): fractions — Números racionais.
                                                             (line  181)
* __floor__() (método object):           Emulando tipos numéricos.
                                                             (line  139)
* __floordiv__() (método object):        Emulando tipos numéricos.
                                                             (line   11)
* __floordiv__() (no módulo operator):   operator — Operadores padrões como funções.
                                                             (line   92)
* __format__:                            Funções embutidas<3>.
                                                             (line  801)
* __format__() (método datetime.date):   Objetos date.       (line  308)
* __format__() (método datetime.datetime): Objetos datetime. (line  784)
* __format__() (método datetime.time):   Objetos time.       (line  237)
* __format__() (método enum.Enum):       Tipos de Dados<2>.  (line  325)
* __format__() (método fractions.Fraction): fractions — Números racionais.
                                                             (line  207)
* __format__() (método ipaddress.IPv4Address): Objetos de endereço.
                                                             (line  198)
* __format__() (método ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  333)
* __format__() (método object):          Personalização básica.
                                                             (line  163)
* __fspath__() (método os.PathLike):     Parâmetros de processo.
                                                             (line  130)
* __func__ (atributo de método):         Métodos de instância.
                                                             (line   10)
* __func__ (atributo method):            Métodos de instância.
                                                             (line   16)
* __future__:                            Glossário.          (line  685)
* __future__;instrução future:           Instruções future.  (line    6)
* __ge__() (método de instância):        Comparações<2>.     (line   50)
* __ge__() (método object):              Personalização básica.
                                                             (line  191)
* __ge__() (no módulo operator):         operator — Operadores padrões como funções.
                                                             (line   26)
* __get__() (método object):             Implementando descritores.
                                                             (line   14)
* __getattr__ (atributo de módulo):      Personalizando acesso a atributos de módulos.
                                                             (line    6)
* __getattr__() (método module):         Personalizando acesso a atributos de módulos.
                                                             (line    6)
* __getattr__() (método object):         Personalizando o acesso aos atributos.
                                                             (line   10)
* __getattribute__() (método object):    Personalizando o acesso aos atributos.
                                                             (line   33)
* __getitem__() (método de objeto mapeamento): Nomes de métodos especiais.
                                                             (line    6)
* __getitem__() (método email.headerregistry.HeaderRegistry): email headerregistry Custom Header Objects.
                                                             (line  385)
* __getitem__() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  189)
* __getitem__() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  312)
* __getitem__() (método enum.EnumType):  Tipos de Dados<2>.  (line   88)
* __getitem__() (método mailbox.Mailbox): Objetos Mailbox.   (line  149)
* __getitem__() (método object):         Emulando tipos contêineres.
                                                             (line   83)
* __getitem__() (método re.Match):       Objetos correspondência.
                                                             (line   92)
* __getitem__() (no módulo operator):    operator — Operadores padrões como funções.
                                                             (line  201)
* __getnewargs__() (método object):      Serializando com pickle instâncias de classes.
                                                             (line   49)
* __getnewargs_ex__() (método object):   Serializando com pickle instâncias de classes.
                                                             (line   30)
* __getstate__() (método object):        Serializando com pickle instâncias de classes.
                                                             (line   64)
* __getstate__() (protocolo de cópia):   Manipulação de objetos com estado.
                                                             (line    6)
* __globals__ (atributo de função):      Atributos especiais de somente leitura.
                                                             (line    6)
* __globals__ (atributo function):       Atributos especiais de somente leitura.
                                                             (line   16)
* __gt__() (método de instância):        Comparações<2>.     (line   50)
* __gt__() (método object):              Personalização básica.
                                                             (line  191)
* __gt__() (no módulo operator):         operator — Operadores padrões como funções.
                                                             (line   26)
* __hash__() (método object):            Personalização básica.
                                                             (line  254)
* __iadd__() (método object):            Emulando tipos numéricos.
                                                             (line   78)
* __iadd__() (no módulo operator):       Operadores in-place.
                                                             (line   39)
* __iand__() (método object):            Emulando tipos numéricos.
                                                             (line   78)
* __iand__() (no módulo operator):       Operadores in-place.
                                                             (line   44)
* __iconcat__() (no módulo operator):    Operadores in-place.
                                                             (line   49)
* __ifloordiv__() (método object):       Emulando tipos numéricos.
                                                             (line   78)
* __ifloordiv__() (no módulo operator):  Operadores in-place.
                                                             (line   55)
* __ilshift__() (método object):         Emulando tipos numéricos.
                                                             (line   78)
* __ilshift__() (no módulo operator):    Operadores in-place.
                                                             (line   60)
* __imatmul__() (método object):         Emulando tipos numéricos.
                                                             (line   78)
* __imatmul__() (no módulo operator):    Operadores in-place.
                                                             (line   75)
* __imod__() (método object):            Emulando tipos numéricos.
                                                             (line   78)
* __imod__() (no módulo operator):       Operadores in-place.
                                                             (line   65)
* __import__() (no módulo importlib):    Funções<12>.        (line    6)
* __imul__() (método object):            Emulando tipos numéricos.
                                                             (line   78)
* __imul__() (no módulo operator):       Operadores in-place.
                                                             (line   70)
* __index__() (método object):           Emulando tipos numéricos.
                                                             (line  125)
* __index__() (no módulo operator):      operator — Operadores padrões como funções.
                                                             (line   97)
* __infer_variance__ (atributo typing.TypeVar): Criando tipos genéricos e apelidos de tipo.
                                                             (line  172)
* __init__() (método asyncio.Future):    Construtores privados de Future e Task.
                                                             (line   17)
* __init__() (método asyncio.Task):      Construtores privados de Future e Task.
                                                             (line   23)
* __init__() (método difflib.HtmlDiff):  difflib — Helpers for computing deltas.
                                                             (line   92)
* __init__() (método enum.Enum):         Tipos de Dados<2>.  (line  232)
* __init__() (método logging.Handler):   Objetos Handler.    (line   13)
* __init__() (método logging.logging.Formatter): Formatadores.
                                                             (line   14)
* __init__() (método object):            Personalização básica.
                                                             (line   38)
* __init_subclass__() (método de classe object): Personalizando a criação de classe.
                                                             (line   14)
* __init_subclass__() (método enum.Enum): Tipos de Dados<2>. (line  245)
* __instancecheck__() (método type):     Personalizando verificações de instância e subclasse.
                                                             (line   15)
* __int__() (método object):             Emulando tipos numéricos.
                                                             (line  117)
* __interactivehook__ (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line 1232)
* __inv__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  107)
* __invert__() (método object):          Emulando tipos numéricos.
                                                             (line  109)
* __invert__() (no módulo operator):     operator — Operadores padrões como funções.
                                                             (line  107)
* __ior__() (método object):             Emulando tipos numéricos.
                                                             (line   78)
* __ior__() (no módulo operator):        Operadores in-place.
                                                             (line   82)
* __ipow__() (método object):            Emulando tipos numéricos.
                                                             (line   78)
* __ipow__() (no módulo operator):       Operadores in-place.
                                                             (line   87)
* __irshift__() (método object):         Emulando tipos numéricos.
                                                             (line   78)
* __irshift__() (no módulo operator):    Operadores in-place.
                                                             (line   92)
* __isub__() (método object):            Emulando tipos numéricos.
                                                             (line   78)
* __isub__() (no módulo operator):       Operadores in-place.
                                                             (line   97)
* __iter__() (método container):         Tipos iteradores.   (line   15)
* __iter__() (método enum.EnumType):     Tipos de Dados<2>.  (line   96)
* __iter__() (método iterator):          Tipos iteradores.   (line   30)
* __iter__() (método mailbox.Mailbox):   Objetos Mailbox.    (line  117)
* __iter__() (método object):            Emulando tipos contêineres.
                                                             (line  131)
* __iter__() (método unittest.TestSuite): Grouping tests.    (line   60)
* __itruediv__() (método object):        Emulando tipos numéricos.
                                                             (line   78)
* __itruediv__() (no módulo operator):   Operadores in-place.
                                                             (line  102)
* __ixor__() (método object):            Emulando tipos numéricos.
                                                             (line   78)
* __ixor__() (no módulo operator):       Operadores in-place.
                                                             (line  107)
* __kwdefaults__ (atributo de função):   Atributos especiais graváveis.
                                                             (line    6)
* __kwdefaults__ (atributo function):    Atributos especiais graváveis.
                                                             (line   52)
* __le__() (método de instância):        Comparações<2>.     (line   50)
* __le__() (método object):              Personalização básica.
                                                             (line  191)
* __le__() (no módulo operator):         operator — Operadores padrões como funções.
                                                             (line   26)
* __len__() (método de objeto mapeamento): Personalização básica.
                                                             (line  340)
* __len__() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  175)
* __len__() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  299)
* __len__() (método enum.EnumType):      Tipos de Dados<2>.  (line  103)
* __len__() (método mailbox.Mailbox):    Objetos Mailbox.    (line  209)
* __len__() (método object):             Emulando tipos contêineres.
                                                             (line   44)
* __length_hint__() (método object):     Emulando tipos contêineres.
                                                             (line   59)
* __loader__ (atributo de módulo):       Módulos<3>.         (line   21)
* __loader__ (atributo de módulo) <1>:   Objetos do Módulo.  (line   25)
* __loader__ (atributo module):          Atributos relacionados à importação em objetos de módulo.
                                                             (line  104)
* __lshift__() (método object):          Emulando tipos numéricos.
                                                             (line   11)
* __lshift__() (no módulo operator):     operator — Operadores padrões como funções.
                                                             (line  115)
* __lt__() (método de instância):        Comparações<2>.     (line   50)
* __lt__() (método object):              Personalização básica.
                                                             (line  191)
* __lt__() (no módulo operator):         operator — Operadores padrões como funções.
                                                             (line   26)
* __matmul__() (método object):          Emulando tipos numéricos.
                                                             (line   11)
* __matmul__() (no módulo operator):     operator — Operadores padrões como funções.
                                                             (line  130)
* __members__ (atributo enum.EnumType):  Tipos de Dados<2>.  (line  110)
* __missing__():                         Tipo mapeamento — dict.
                                                             (line  117)
* __missing__() (método collections.defaultdict): Objetos defaultdict.
                                                             (line   22)
* __missing__() (método object):         Emulando tipos contêineres.
                                                             (line  125)
* __mod__() (método object):             Emulando tipos numéricos.
                                                             (line   11)
* __mod__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  120)
* __module__ (atributo de classe):       Atributos especiais.
                                                             (line    6)
* __module__ (atributo de função):       Atributos especiais graváveis.
                                                             (line    6)
* __module__ (atributo de método):       Métodos de instância.
                                                             (line   10)
* __module__ (atributo definition):      Atributos Especiais.
                                                             (line   21)
* __module__ (atributo function):        Atributos especiais graváveis.
                                                             (line   26)
* __module__ (atributo method):          Métodos de instância.
                                                             (line   29)
* __module__ (atributo type):            Atributos especiais.
                                                             (line   18)
* __module__ (atributo typing.NewType):  Outras diretivas especiais.
                                                             (line  120)
* __module__ (atributo typing.TypeAliasType): Criando tipos genéricos e apelidos de tipo.
                                                             (line  529)
* __mro__ (atributo type):               Atributos especiais.
                                                             (line   80)
* __mro_entries__() (método object):     Resolvendo entradas de MRO.
                                                             (line    6)
* __mul__() (método object):             Emulando tipos numéricos.
                                                             (line   11)
* __mul__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  125)
* __mutable_keys__ (atributo typing.TypedDict): Outras diretivas especiais.
                                                             (line  470)
* __name__ (atributo de classe):         Atributos especiais.
                                                             (line    6)
* __name__ (atributo de função):         Atributos especiais graváveis.
                                                             (line    6)
* __name__ (atributo de método):         Métodos de instância.
                                                             (line   10)
* __name__ (atributo de módulo):         Módulos<3>.         (line   21)
* __name__ (atributo de módulo) <1>:     Objetos do Módulo.  (line   25)
* __name__ (atributo de módulo) <2>:     Objetos do Módulo.  (line   66)
* __name__ (atributo definition):        Atributos Especiais.
                                                             (line   10)
* __name__ (atributo function):          Atributos especiais graváveis.
                                                             (line   16)
* __name__ (atributo method):            Métodos de instância.
                                                             (line   25)
* __name__ (atributo module):            Atributos relacionados à importação em objetos de módulo.
                                                             (line   38)
* __name__ (atributo property):          Funções embutidas<3>.
                                                             (line 1742)
* __name__ (atributo type):              Atributos especiais.
                                                             (line   10)
* __name__ (atributo typing.NewType):    Outras diretivas especiais.
                                                             (line  124)
* __name__ (atributo typing.ParamSpec):  Criando tipos genéricos e apelidos de tipo.
                                                             (line  438)
* __name__ (atributo typing.TypeAliasType): Criando tipos genéricos e apelidos de tipo.
                                                             (line  521)
* __name__ (atributo typing.TypeVar):    Criando tipos genéricos e apelidos de tipo.
                                                             (line  159)
* __name__ (atributo typing.TypeVarTuple): Criando tipos genéricos e apelidos de tipo.
                                                             (line  333)
* __ne__() (método de instância):        Comparações<2>.     (line   50)
* __ne__() (método email.charset.Charset): email charset Representando conjuntos de caracteres.
                                                             (line  162)
* __ne__() (método email.header.Header): email header Internationalized headers.
                                                             (line  174)
* __ne__() (método object):              Personalização básica.
                                                             (line  191)
* __ne__() (no módulo operator):         operator — Operadores padrões como funções.
                                                             (line   26)
* __neg__() (método object):             Emulando tipos numéricos.
                                                             (line  109)
* __neg__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  137)
* __new__() (método enum.Enum):          Tipos de Dados<2>.  (line  273)
* __new__() (método object):             Personalização básica.
                                                             (line    6)
* __next__() (método csv.csvreader):     Objetos Reader.     (line   10)
* __next__() (método generator):         Métodos de iterador gerador.
                                                             (line   13)
* __next__() (método iterator):          Tipos iteradores.   (line   38)
* __not__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line   52)
* __notes__ (atributo BaseException):    Classes base.       (line   60)
* __notes__ (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line   66)
* __objclass__ (atributo object):        Implementando descritores.
                                                             (line   51)
* __optional_keys__ (atributo typing.TypedDict): Outras diretivas especiais.
                                                             (line  420)
* __or__() (método enum.Flag):           Tipos de Dados<2>.  (line  502)
* __or__() (método object):              Emulando tipos numéricos.
                                                             (line   11)
* __or__() (no módulo operator):         operator — Operadores padrões como funções.
                                                             (line  142)
* __origin__ (atributo genericalias):    Atributos especiais de objetos GenericAlias.
                                                             (line    9)
* __package__ (atributo de módulo):      Módulos<3>.         (line   21)
* __package__ (atributo de módulo) <1>:  Objetos do Módulo.  (line   25)
* __package__ (atributo module):         Atributos relacionados à importação em objetos de módulo.
                                                             (line   59)
* __parameters__ (atributo genericalias): Atributos especiais de objetos GenericAlias.
                                                             (line   25)
* __path__ (atributo de módulo):         Módulos<3>.         (line   21)
* __path__ (atributo module):            Atributos relacionados à importação em objetos de módulo.
                                                             (line  131)
* __pos__() (método object):             Emulando tipos numéricos.
                                                             (line  109)
* __pos__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  147)
* __post_init__() (no módulo dataclasses): Processamento pós-inicialização.
                                                             (line    6)
* __pow__() (método object):             Emulando tipos numéricos.
                                                             (line   11)
* __pow__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  152)
* __prepare__ (método de metaclasse):    Preparando o espaço de nomes da classe.
                                                             (line    6)
* __PYVENV_LAUNCHER__:                   PyConfig.           (line  187)
* __PYVENV_LAUNCHER__ <1>:               PyConfig.           (line  707)
* __qualname__ (atributo definition):    Atributos Especiais.
                                                             (line   14)
* __qualname__ (atributo function):      Atributos especiais graváveis.
                                                             (line   20)
* __qualname__ (atributo type):          Atributos especiais.
                                                             (line   14)
* __radd__() (método object):            Emulando tipos numéricos.
                                                             (line   41)
* __rand__() (método object):            Emulando tipos numéricos.
                                                             (line   41)
* __rdivmod__() (método object):         Emulando tipos numéricos.
                                                             (line   41)
* __readonly_keys__ (atributo typing.TypedDict): Outras diretivas especiais.
                                                             (line  462)
* __reduce__() (método object):          Serializando com pickle instâncias de classes.
                                                             (line  135)
* __reduce_ex__() (método object):       Serializando com pickle instâncias de classes.
                                                             (line  194)
* __release_buffer__() (método object):  Emulando tipos buffer.
                                                             (line   25)
* __replace__() (protocolo de substituição): copy — Operações de cópia profunda e cópia rasa.
                                                             (line  100)
* __repr__() (método enum.Enum):         Tipos de Dados<2>.  (line  290)
* __repr__() (método multiprocessing.managers.BaseProxy): Objetos proxies.
                                                             (line  147)
* __repr__() (método netrc.netrc):       Objetos netrc.      (line   16)
* __repr__() (método object):            Personalização básica.
                                                             (line  122)
* __required_keys__ (atributo typing.TypedDict): Outras diretivas especiais.
                                                             (line  416)
* __reversed__() (método enum.EnumType): Tipos de Dados<2>.  (line  115)
* __reversed__() (método object):        Emulando tipos contêineres.
                                                             (line  138)
* __rfloordiv__() (método object):       Emulando tipos numéricos.
                                                             (line   41)
* __rlshift__() (método object):         Emulando tipos numéricos.
                                                             (line   41)
* __rmatmul__() (método object):         Emulando tipos numéricos.
                                                             (line   41)
* __rmod__() (método object):            Emulando tipos numéricos.
                                                             (line   41)
* __rmul__() (método object):            Emulando tipos numéricos.
                                                             (line   41)
* __ror__() (método object):             Emulando tipos numéricos.
                                                             (line   41)
* __round__() (método fractions.Fraction): fractions — Números racionais.
                                                             (line  196)
* __round__() (método object):           Emulando tipos numéricos.
                                                             (line  139)
* __rpow__() (método object):            Emulando tipos numéricos.
                                                             (line   41)
* __rrshift__() (método object):         Emulando tipos numéricos.
                                                             (line   41)
* __rshift__() (método object):          Emulando tipos numéricos.
                                                             (line   11)
* __rshift__() (no módulo operator):     operator — Operadores padrões como funções.
                                                             (line  157)
* __rsub__() (método object):            Emulando tipos numéricos.
                                                             (line   41)
* __rtruediv__() (método object):        Emulando tipos numéricos.
                                                             (line   41)
* __rxor__() (método object):            Emulando tipos numéricos.
                                                             (line   41)
* __self__ (atributo de método):         Métodos de instância.
                                                             (line   10)
* __self__ (atributo method):            Métodos de instância.
                                                             (line   12)
* __set__() (método object):             Implementando descritores.
                                                             (line   34)
* __set_name__() (método object):        Personalizando a criação de classe.
                                                             (line   49)
* __setattr__() (método object):         Personalizando o acesso aos atributos.
                                                             (line   55)
* __setitem__() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  204)
* __setitem__() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  323)
* __setitem__() (método mailbox.Mailbox): Objetos Mailbox.   (line   91)
* __setitem__() (método mailbox.Maildir): Maildir objects.   (line  193)
* __setitem__() (método object):         Emulando tipos contêineres.
                                                             (line  106)
* __setitem__() (no módulo operator):    operator — Operadores padrões como funções.
                                                             (line  210)
* __setstate__() (método object):        Serializando com pickle instâncias de classes.
                                                             (line   95)
* __setstate__() (protocolo de cópia):   Manipulação de objetos com estado.
                                                             (line    6)
* __slots__:                             Glossário.          (line 1565)
* __spec__ (atributo de módulo):         Módulos<3>.         (line   21)
* __spec__ (atributo module):            Atributos relacionados à importação em objetos de módulo.
                                                             (line   48)
* __static_attributes__ (atributo de classe): Atributos especiais.
                                                             (line    6)
* __static_attributes__ (atributo type): Atributos especiais.
                                                             (line   65)
* __stderr__ (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line 1964)
* __stdin__ (no módulo sys):             sys — Parâmetros e funções específicas do sistema.
                                                             (line 1964)
* __stdout__ (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line 1964)
* __str__() (método datetime.date):      Objetos date.       (line  280)
* __str__() (método datetime.datetime):  Objetos datetime.   (line  754)
* __str__() (método datetime.time):      Objetos time.       (line  227)
* __str__() (método email.charset.Charset): email charset Representando conjuntos de caracteres.
                                                             (line  152)
* __str__() (método email.header.Header): email header Internationalized headers.
                                                             (line  157)
* __str__() (método email.headerregistry.Address): email headerregistry Custom Header Objects.
                                                             (line  447)
* __str__() (método email.headerregistry.Group): email headerregistry Custom Header Objects.
                                                             (line  482)
* __str__() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line   95)
* __str__() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  101)
* __str__() (método enum.Enum):          Tipos de Dados<2>.  (line  308)
* __str__() (método multiprocessing.managers.BaseProxy): Objetos proxies.
                                                             (line  151)
* __str__() (método object):             Personalização básica.
                                                             (line  140)
* __sub__() (método object):             Emulando tipos numéricos.
                                                             (line   11)
* __sub__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  162)
* __subclasscheck__() (método type):     Personalizando verificações de instância e subclasse.
                                                             (line   21)
* __subclasses__() (método type):        Métodos especiais.  (line   16)
* __subclasshook__() (método abc.ABCMeta): abc — Classes base abstratas.
                                                             (line   95)
* __supertype__ (atributo typing.NewType): Outras diretivas especiais.
                                                             (line  128)
* __suppress_context__ (atributo BaseException): Contexto da exceção.
                                                             (line    9)
* __suppress_context__ (atributo de exceção): Contexto da exceção.
                                                             (line    6)
* __suppress_context__ (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line   61)
* __test__ (atributo module):            Quais docstrings são examinadas?.
                                                             (line   10)
* __total__ (atributo typing.TypedDict): Outras diretivas especiais.
                                                             (line  391)
* __traceback__ (atributo BaseException): Classes base.      (line   46)
* __traceback__ (atributo de exceção):   A instrução raise.  (line    6)
* __truediv__() (método importlib.abc.Traversable): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  559)
* __truediv__() (método importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  143)
* __truediv__() (método object):         Emulando tipos numéricos.
                                                             (line   11)
* __truediv__() (no módulo operator):    operator — Operadores padrões como funções.
                                                             (line  167)
* __trunc__() (método object):           Emulando tipos numéricos.
                                                             (line  139)
* __type_params__ (atributo de classe):  Atributos especiais.
                                                             (line    6)
* __type_params__ (atributo de função):  Atributos especiais graváveis.
                                                             (line    6)
* __type_params__ (atributo definition): Atributos Especiais.
                                                             (line   30)
* __type_params__ (atributo function):   Atributos especiais graváveis.
                                                             (line   56)
* __type_params__ (atributo type):       Atributos especiais.
                                                             (line   58)
* __type_params__ (atributo typing.TypeAliasType): Criando tipos genéricos e apelidos de tipo.
                                                             (line  537)
* __unpacked__ (atributo genericalias):  Atributos especiais de objetos GenericAlias.
                                                             (line   41)
* __unraisablehook__ (no módulo sys):    sys — Parâmetros e funções específicas do sistema.
                                                             (line  439)
* __value__ (atributo typing.TypeAliasType): Criando tipos genéricos e apelidos de tipo.
                                                             (line  549)
* __xor__() (método enum.Flag):          Tipos de Dados<2>.  (line  518)
* __xor__() (método object):             Emulando tipos numéricos.
                                                             (line   11)
* __xor__() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  173)
* _, identificadores:                    Palavras reservadas contextuais.
                                                             (line   24)
* _add_alias_() (método enum.Enum):      Tipos de Dados<2>.  (line  347)
* _add_value_alias_() (método enum.Enum): Tipos de Dados<2>. (line  360)
* _align_ (atributo ctypes.Structure):   Tipos de dados estruturados.
                                                             (line   87)
* _anonymous_ (atributo ctypes.Structure): Tipos de dados estruturados.
                                                             (line   96)
* _asdict() (método collections.somenamedtuple): Função de fábrica para tuplas com campos nomeados namedtuple.
                                                             (line  116)
* _b_base_ (atributo ctypes._CData):     Data types.         (line   73)
* _b_needsfree_ (atributo ctypes._CData): Data types.        (line   80)
* _callmethod() (método multiprocessing.managers.BaseProxy): Objetos proxies.
                                                             (line   98)
* _CData (classe em ctypes):             Data types.         (line    6)
* _CFuncPtr (classe em ctypes):          Foreign functions.  (line   22)
* _clear_internal_caches() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line  203)
* _clear_type_cache() (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line  190)
* _current_exceptions() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line  232)
* _current_frames() (no módulo sys):     sys — Parâmetros e funções específicas do sistema.
                                                             (line  211)
* _debugmallocstats() (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line  291)
* _emscripten_info (no módulo sys):      sys — Parâmetros e funções específicas do sistema.
                                                             (line  358)
* _enablelegacywindowsfsencoding() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line 1867)
* _enter_task() (no módulo asyncio):     Suporte ao ciclo de vida de tarefas.
                                                             (line   22)
* _exit() (no módulo os):                Gerenciamento de processo.
                                                             (line  127)
* _Feature (classe em __future__):       Conteúdo do módulo<9>.
                                                             (line   51)
* _field_defaults (atributo collections.somenamedtuple): Função de fábrica para tuplas com campos nomeados namedtuple.
                                                             (line  167)
* _field_types (atributo ast.AST):       Classes de nós.     (line   40)
* _fields (atributo ast.AST):            Classes de nós.     (line   22)
* _fields (atributo collections.somenamedtuple): Função de fábrica para tuplas com campos nomeados namedtuple.
                                                             (line  153)
* _fields_ (atributo ctypes.Structure):  Tipos de dados estruturados.
                                                             (line   43)
* _flush() (método wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  117)
* _frozen (C struct):                    Importando módulos<2>.
                                                             (line  280)
* _generate_next_value_() (método enum.Enum): Tipos de Dados<2>.
                                                             (line  202)
* _get_child_mock() (método unittest.mock.Mock): A classe Mock.
                                                             (line  310)
* _get_preferred_schemes() (no módulo sysconfig): Funções de caminho de instalação.
                                                             (line   41)
* _getframe() (no módulo sys):           sys — Parâmetros e funções específicas do sistema.
                                                             (line  927)
* _getframemodulename() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line  943)
* _getvalue() (método multiprocessing.managers.BaseProxy): Objetos proxies.
                                                             (line  140)
* _handle (atributo ctypes.PyDLL):       Loading shared libraries.
                                                             (line  161)
* _ignore_ (atributo enum.Enum):         Tipos de Dados<2>.  (line  170)
* _incompatible_extension_module_restrictions() (no módulo importlib.util): importlib util – Utility code for importers.
                                                             (line  172)
* _inittab (C struct):                   Importando módulos<2>.
                                                             (line  317)
* _inittab.initfunc (C member):          Importando módulos<2>.
                                                             (line  329)
* _inittab.name (C member):              Importando módulos<2>.
                                                             (line  325)
* _is_gil_enabled() (no módulo sys):     sys — Parâmetros e funções específicas do sistema.
                                                             (line 1263)
* _is_interned() (no módulo sys):        sys — Parâmetros e funções específicas do sistema.
                                                             (line 1295)
* _leave_task() (no módulo asyncio):     Suporte ao ciclo de vida de tarefas.
                                                             (line   30)
* _length_ (atributo ctypes.Array):      Arrays and pointers.
                                                             (line   18)
* _log (atributo logging.LoggerAdapter): LoggerAdapter Objects.
                                                             (line   36)
* _make() (método de classe collections.somenamedtuple): Função de fábrica para tuplas com campos nomeados namedtuple.
                                                             (line  107)
* _makeResult() (método unittest.TextTestRunner): Carregando e executando testes.
                                                             (line  494)
* _missing_() (método enum.Enum):        Tipos de Dados<2>.  (line  250)
* _name (atributo ctypes.PyDLL):         Loading shared libraries.
                                                             (line  165)
* _name_ (atributo enum.Enum):           Tipos de Dados<2>.  (line  156)
* _numeric_repr_() (método enum.Flag):   Tipos de Dados<2>.  (line  538)
* _objects (atributo ctypes._CData):     Data types.         (line   85)
* _order_ (atributo enum.Enum):          Tipos de Dados<2>.  (line  164)
* _pack_ (atributo ctypes.Structure):    Tipos de dados estruturados.
                                                             (line   79)
* _parse() (método gettext.NullTranslations): A classe NullTranslations.
                                                             (line   22)
* _Pointer (classe em ctypes):           Arrays and pointers.
                                                             (line   39)
* _Py_c_diff (C function):               Números complexos como estruturas C.
                                                             (line   33)
* _Py_c_neg (C function):                Números complexos como estruturas C.
                                                             (line   39)
* _Py_c_pow (C function):                Números complexos como estruturas C.
                                                             (line   59)
* _Py_c_prod (C function):               Números complexos como estruturas C.
                                                             (line   44)
* _Py_c_quot (C function):               Números complexos como estruturas C.
                                                             (line   50)
* _Py_c_sum (C function):                Números complexos como estruturas C.
                                                             (line   27)
* _Py_InitializeMain (C function):       Multi-Phase Initialization Private Provisional API.
                                                             (line   44)
* _Py_NoneStruct (C var):                Alocando objetos na heap.
                                                             (line   58)
* _Py_TPFLAGS_HAVE_VECTORCALL (C macro): PyTypeObject Slots. (line  767)
* _PyBytes_Resize (C function):          Objetos bytes<2>.   (line  185)
* _PyCode_GetExtra (C function):         Informação adicional.
                                                             (line   38)
* _PyCode_SetExtra (C function):         Informação adicional.
                                                             (line   55)
* _PyEval_RequestCodeExtraIndex (C function): Informação adicional.
                                                             (line   14)
* _PyFrameEvalFunction (C type):         Low-level API.      (line  167)
* _PyInterpreterFrame (C struct):        Internal Frames.    (line    8)
* _PyInterpreterState_GetEvalFrameFunc (C function): Low-level API.
                                                             (line  182)
* _PyInterpreterState_SetEvalFrameFunc (C function): Low-level API.
                                                             (line  192)
* _PyObject_GetDictPtr (C function):     Protocolo de objeto.
                                                             (line  286)
* _PyObject_New (C function):            Alocando objetos na heap.
                                                             (line    6)
* _PyObject_NewVar (C function):         Alocando objetos na heap.
                                                             (line    9)
* _PyObject_Vectorcall (C function):     API de chamada de objetos.
                                                             (line  202)
* _PyTuple_Resize (C function):          Objeto tupla.       (line  101)
* _register_task() (no módulo asyncio):  Suporte ao ciclo de vida de tarefas.
                                                             (line   10)
* _replace() (método collections.somenamedtuple): Função de fábrica para tuplas com campos nomeados namedtuple.
                                                             (line  135)
* _setroot() (método xml.etree.ElementTree.ElementTree): ElementTree Objects.
                                                             (line   15)
* _SimpleCData (classe em ctypes):       Tipos de dados fundamentais<2>.
                                                             (line    6)
* _structure() (no módulo email.iterators): email iterators Iteradores.
                                                             (line   46)
* _type_ (atributo ctypes._Pointer):     Arrays and pointers.
                                                             (line   54)
* _type_ (atributo ctypes.Array):        Arrays and pointers.
                                                             (line   24)
* _unregister_task() (no módulo asyncio): Suporte ao ciclo de vida de tarefas.
                                                             (line   16)
* _value_ (atributo enum.Enum):          Tipos de Dados<2>.  (line  160)
* _write() (método wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  109)
* _xoptions (no módulo sys):             sys — Parâmetros e funções específicas do sistema.
                                                             (line 2152)
* - (menos);caracteres curingas no estilo blog: glob — Expansão de padrão de nome de arquivo no estilo Unix.
                                                             (line   10)
* - (menos);caracteres curingas no estilo blog <1>: fnmatch — Correspondência de padrões de nome de arquivo Unix.
                                                             (line   15)
* - (menos);em expressões regulares:     Sintaxe de expressão regular.
                                                             (line  193)
* - (menos);em formatação no estilo printf: Formatação de string no estilo printf.
                                                             (line   71)
* - (menos);em formatação no estilo printf <1>: Estilo de Formatação de bytes printf-style.
                                                             (line   65)
* - (menos);in doctests:                 Flags opcionais.    (line  164)
* - (menos);na formatação de strings:    Minilinguagem de especificação de formato.
                                                             (line   76)
* - (menos);operador binário:            Operações binárias aritméticas.
                                                             (line   85)
* - (menos);operador binário <1>:        Tipos numéricos — int float complex.
                                                             (line   30)
* - (menos);operador unário:             Operações aritméticas unárias e bit a bit.
                                                             (line   11)
* - (menos);operador unário <1>:         Tipos numéricos — int float complex.
                                                             (line   30)
* -=;atribuição aumentada:               Instruções de atribuição aumentada.
                                                             (line    6)
* ->;anotações de função:                Anotações de função.
                                                             (line    6)
* ->;anotações de função <1>:            Definições de função.
                                                             (line  114)
* , (vírgula):                           Formas de parênteses.
                                                             (line   20)
* , (vírgula);em sintaxes de criação de dicionário: Sintaxes de criação de dicionário.
                                                             (line    6)
* , (vírgula);expressão, lista de:       Sintaxes de criação de lista.
                                                             (line    6)
* , (vírgula);expressão, lista de <1>:   Sintaxes de criação de conjunto.
                                                             (line    6)
* , (vírgula);expressão, lista de <2>:   Listas de expressões.
                                                             (line    6)
* , (vírgula);expressão, lista de <3>:   A instrução assert. (line    6)
* , (vírgula);expressão, lista de <4>:   Definições de classe.
                                                             (line    6)
* , (vírgula);fatiamento:                Fatiamentos.        (line    6)
* , (vírgula);identificadores, lista de: A instrução global. (line    6)
* , (vírgula);identificadores, lista de <1>: A instrução nonlocal.
                                                             (line    6)
* , (vírgula);instrução import:          A instrução import. (line    6)
* , (vírgula);instrução with:            A instrução with.   (line    6)
* , (vírgula);lista de argumentos:       Fatiamentos.        (line   40)
* , (vírgula);lista de parâmetros:       Definições de função.
                                                             (line    6)
* , (vírgula);na formatação de strings:  Minilinguagem de especificação de formato.
                                                             (line  130)
* , (vírgula);na lista de alvos:         Instruções de atribuição.
                                                             (line   36)
* ; (dois pontos);anotações de função:   Anotações de função.
                                                             (line    6)
* ; (dois pontos);anotações de função <1>: Definições de função.
                                                             (line  114)
* ; (dois pontos);anotada, variável:     instruções de atribuição anotado.
                                                             (line    6)
* ; (dois pontos);em expressões de dicionário: Sintaxes de criação de dicionário.
                                                             (line    6)
* ; (dois pontos);em instruções SQL:     Cursor objects.     (line   24)
* ; (dois pontos);em literal de string formatado: Concatenação de literal de string.
                                                             (line   27)
* ; (dois pontos);em literal de string formatado <1>: String Methods<2>.
                                                             (line  917)
* ; (dois pontos);expressão lambda:      Lambdas.            (line    6)
* ; (dois pontos);fatiamento:            Fatiamentos.        (line    6)
* ; (dois pontos);instrução composta:    A instrução if.     (line    6)
* ; (dois pontos);instrução composta <1>: A instrução while. (line    6)
* ; (dois pontos);instrução composta <2>: A instrução for.   (line    6)
* ; (dois pontos);instrução composta <3>: A instrução try.   (line    6)
* ; (dois pontos);instrução composta <4>: A instrução with.  (line    6)
* ; (dois pontos);instrução composta <5>: A instrução match. (line    6)
* ; (dois pontos);instrução composta <6>: Definições de função.
                                                             (line    6)
* ; (dois pontos);instrução composta <7>: Definições de classe.
                                                             (line    6)
* ; (dois pontos);na formatação de strings: Sintaxe das strings de formato.
                                                             (line   13)
* ; (dois pontos);separador de caminho (POSIX): Diversas informações de sistema.
                                                             (line  142)
* ; (ponto e vírgula):                   Instruções compostas.
                                                             (line   20)
* ; (ponto e vírgula) <1>:               Diversas informações de sistema.
                                                             (line  142)
* ;= (dois points igual):                Operações booleanas.
                                                             (line   39)
* ! (exclamação);caracteres curingas no estilo blog: glob — Expansão de padrão de nome de arquivo no estilo Unix.
                                                             (line   10)
* ! (exclamação);caracteres curingas no estilo blog <1>: fnmatch — Correspondência de padrões de nome de arquivo Unix.
                                                             (line   15)
* ! (exclamação);em literal de string formatado: Concatenação de literal de string.
                                                             (line   27)
* ! (exclamação);em um interpretador de comandos: Objetos Cmd.
                                                             (line   27)
* ! (exclamação);in struct format strings: Byte Order Size and Alignment.
                                                             (line   13)
* ! (exclamação);na formatação de strings: Sintaxe das strings de formato.
                                                             (line   13)
* ! (exclamação);no módulo curses:       curses ascii — Utilitários para caracteres ASCII.
                                                             (line  241)
* ! (pdb command):                       Comandos de depuração.
                                                             (line  423)
* ! (ponto de exclamação);em literal de string formatado: String Methods<2>.
                                                             (line  917)
* ! f-string:                            String Methods<2>.  (line  917)
* ? (interrogação);caracteres curingas no estilo blog: glob — Expansão de padrão de nome de arquivo no estilo Unix.
                                                             (line   10)
* ? (interrogação);caracteres curingas no estilo blog <1>: fnmatch — Correspondência de padrões de nome de arquivo Unix.
                                                             (line   15)
* ? (interrogação);em expressões regulares: Sintaxe de expressão regular.
                                                             (line   89)
* ? (interrogação);em gramática de AST:  Classes de nós.     (line   22)
* ? (interrogação);em instruções SQL:    Cursor objects.     (line   24)
* ? (interrogação);em um interpretador de comandos: Objetos Cmd.
                                                             (line   27)
* ? (interrogação);in struct format strings: Caracteres Formatados.
                                                             (line   86)
* ? (interrogação);in struct format strings <1>: Caracteres Formatados.
                                                             (line  168)
* ? (interrogação);no módulo argparse:   nargs.              (line   24)
* ? (interrogação);replacement character: Error Handlers.    (line   15)
* ??;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line   94)
* ?+;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  105)
* . (ponto);caracteres curingas no estilo blog: glob — Expansão de padrão de nome de arquivo no estilo Unix.
                                                             (line   10)
* . (ponto);em expressões regulares:     Sintaxe de expressão regular.
                                                             (line   50)
* . (ponto);em formatação no estilo printf: Formatação de string no estilo printf.
                                                             (line   31)
* . (ponto);em formatação no estilo printf <1>: Estilo de Formatação de bytes printf-style.
                                                             (line   25)
* . (ponto);em literal númerico:         Inteiros literais.  (line   40)
* . (ponto);em nomes de caminhos:        Diversas informações de sistema.
                                                             (line  107)
* . (ponto);em nomes de caminhos <1>:    Diversas informações de sistema.
                                                             (line  136)
* . (ponto);na formatação de strings:    Sintaxe das strings de formato.
                                                             (line   13)
* . (ponto);referência de atributo:      Referências de atributo.
                                                             (line    6)
* ..;em nomes de caminhos:               Diversas informações de sistema.
                                                             (line  113)
* ...:                                   Glossário.          (line   10)
* ...;espaço reservado:                  textwrap — Quebra automática e preenchimento de texto.
                                                             (line  288)
* ...;espaço reservado <1>:              Objetos PrettyPrinter.
                                                             (line    6)
* ...;espaço reservado <2>:              reprlib — Implementação alternativa à repr.
                                                             (line   60)
* ...;in doctests:                       Flags opcionais.    (line   47)
* ...;literal de reticências:            Cláusulas else em laços.
                                                             (line   59)
* ...;literal de reticências <1>:        Ellipsis.           (line    6)
* ...;literal de reticências <2>:        Constantes embutidas.
                                                             (line   61)
* ...;literal de reticências <3>:        O objeto nulo.      (line   12)
* ...;literal de reticências <4>:        Anotações de objetos chamáveis.
                                                             (line   28)
* ...;literal de reticências <5>:        Anotando tuplas.    (line   45)
* ...;literal de reticências <6>:        Formas especiais.   (line   80)
* ...;literal de reticências <7>:        Glossário.          (line   22)
* ...;prompt do interpretador:           Como os exemplos de docstrings são reconhecidos?.
                                                             (line   26)
* ...;prompt do interpretador <1>:       sys — Parâmetros e funções específicas do sistema.
                                                             (line 1554)
* .ini;arquivo:                          configparser — Analisador sintático de arquivo de configuração.
                                                             (line    8)
* .pdbrc;arquivo:                        Comandos de depuração.
                                                             (line   63)
* ' (aspas simples);literal de string:   Literais.           (line    8)
* ''';literal de string:                 Literais de string e bytes.
                                                             (line   36)
* " (aspas duplas);literal de string:    Literais.           (line    8)
* """;literal de string:                 Literais de string e bytes.
                                                             (line   36)
* (?;;em expressões regulares:           Sintaxe de expressão regular.
                                                             (line  311)
* (?;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  272)
* (?!;em expressões regulares:           Sintaxe de expressão regular.
                                                             (line  431)
* (?(;em expressões regulares:           Sintaxe de expressão regular.
                                                             (line  476)
* (?#;em expressões regulares:           Sintaxe de expressão regular.
                                                             (line  420)
* (?<!;em expressões regulares:          Sintaxe de expressão regular.
                                                             (line  467)
* (?<=;em expressões regulares:          Sintaxe de expressão regular.
                                                             (line  438)
* (?=;em expressões regulares:           Sintaxe de expressão regular.
                                                             (line  424)
* (?P<;em expressões regulares:          Sintaxe de expressão regular.
                                                             (line  376)
* (?P=;em expressões regulares:          Sintaxe de expressão regular.
                                                             (line  415)
* () (parênteses);chamada:               Fatiamentos.        (line   40)
* () (parênteses);definição de classe:   Definições de classe.
                                                             (line    6)
* () (parênteses);definição de função:   Definições de função.
                                                             (line    6)
* () (parênteses);em expressões regulares: Sintaxe de expressão regular.
                                                             (line  262)
* () (parênteses);em formatação no estilo printf: Formatação de string no estilo printf.
                                                             (line   31)
* () (parênteses);em formatação no estilo printf <1>: Estilo de Formatação de bytes printf-style.
                                                             (line   25)
* () (parênteses);expressão geradora:    Expressões geradoras<2>.
                                                             (line    6)
* () (parênteses);na lista de alvo de atribuição: Instruções de atribuição.
                                                             (line   36)
* () (parênteses);sintaxe de criação de tupla: Formas de parênteses.
                                                             (line    6)
* [] (colchetes);caracteres curingas no estilo blog: glob — Expansão de padrão de nome de arquivo no estilo Unix.
                                                             (line   10)
* [] (colchetes);caracteres curingas no estilo blog <1>: fnmatch — Correspondência de padrões de nome de arquivo Unix.
                                                             (line   15)
* [] (colchetes);em expressões regulares: Sintaxe de expressão regular.
                                                             (line  186)
* [] (colchetes);expressão de lista:     Sintaxes de criação de lista.
                                                             (line    6)
* [] (colchetes);na formatação de strings: Sintaxe das strings de formato.
                                                             (line   13)
* [] (colchetes);na lista de alvo de atribuição: Instruções de atribuição.
                                                             (line   36)
* [] (colchetes);subscrição:             Subscrições.        (line    6)
* {} (chaves);em expressões regulares:   Sintaxe de expressão regular.
                                                             (line  125)
* {} (chaves);em literal de string formatado: Concatenação de literal de string.
                                                             (line   27)
* {} (chaves);em literal de string formatado <1>: String Methods<2>.
                                                             (line  917)
* {} (chaves);expressão de conjunto:     Sintaxes de criação de conjunto.
                                                             (line    6)
* {} (chaves);expressão de dicionário:   Sintaxes de criação de dicionário.
                                                             (line    6)
* {} (chaves);na formatação de strings:  Sintaxe das strings de formato.
                                                             (line   13)
* @ (arroba);definição de classe:        Definições de classe.
                                                             (line   46)
* @ (arroba);definição de função:        Definições de função.
                                                             (line   35)
* @ (arroba);in struct format strings:   Byte Order Size and Alignment.
                                                             (line   13)
* * (asterisco);caracteres curingas no estilo blog: glob — Expansão de padrão de nome de arquivo no estilo Unix.
                                                             (line   10)
* * (asterisco);caracteres curingas no estilo blog <1>: fnmatch — Correspondência de padrões de nome de arquivo Unix.
                                                             (line   15)
* * (asterisco);definição de função:     Definições de função.
                                                             (line   95)
* * (asterisco);em chamadas de função:   Listas de argumentos arbitrárias.
                                                             (line    6)
* * (asterisco);em chamadas de função <1>: Chamadas.         (line   76)
* * (asterisco);em expressões regulares: Sintaxe de expressão regular.
                                                             (line   76)
* * (asterisco);em formatação no estilo printf: Formatação de string no estilo printf.
                                                             (line   31)
* * (asterisco);em formatação no estilo printf <1>: Estilo de Formatação de bytes printf-style.
                                                             (line   25)
* * (asterisco);em gramática de AST:     Classes de nós.     (line   22)
* * (asterisco);em listas de expressões: Listas de expressões.
                                                             (line   18)
* * (asterisco);instrução import:        A instrução import. (line   82)
* * (asterisco);na lista de alvo de atribuição: Instruções de atribuição.
                                                             (line   36)
* * (asterisco);no módulo argparse:      nargs.              (line   57)
* *?;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line   94)
* **;caracteres curingas no estilo blog: glob — Expansão de padrão de nome de arquivo no estilo Unix.
                                                             (line   54)
* **;definição de função:                Definições de função.
                                                             (line   95)
* **;em chamadas de função:              Desempacotando listas de argumentos.
                                                             (line   19)
* **;em chamadas de função <1>:          Chamadas.           (line  104)
* **;em sintaxes de criação de dicionário: Sintaxes de criação de dicionário.
                                                             (line   24)
* **=;atribuição aumentada:              Instruções de atribuição aumentada.
                                                             (line    6)
* *+;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  105)
* *=;atribuição aumentada:               Instruções de atribuição aumentada.
                                                             (line    6)
* / (barra);definição de função:         Definições de função.
                                                             (line   95)
* / (barra);em nomes de caminhos:        Diversas informações de sistema.
                                                             (line  119)
* / (barra);em nomes de caminhos <1>:    Diversas informações de sistema.
                                                             (line  128)
* //=;atribuição aumentada:              Instruções de atribuição aumentada.
                                                             (line    6)
* /=;atribuição aumentada:               Instruções de atribuição aumentada.
                                                             (line    6)
* \ (contrabarra);em expressões regulares: Sintaxe de expressão regular.
                                                             (line  168)
* \ (contrabarra);em expressões regulares <1>: Sintaxe de expressão regular.
                                                             (line  208)
* \ (contrabarra);em expressões regulares <2>: Sintaxe de expressão regular.
                                                             (line  495)
* \ (contrabarra);em nomes de caminhos (Windows): Diversas informações de sistema.
                                                             (line  119)
* \ (contrabarra);sequência de escape:   Literais de string e bytes.
                                                             (line   75)
* \ (contrabarra);sequência de escape <1>: Error Handlers.   (line   15)
* \\;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  638)
* \\;sequência de escape:                Literais de string e bytes.
                                                             (line   75)
* \A;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  508)
* \a;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  638)
* \a;sequência de escape:                Literais de string e bytes.
                                                             (line   75)
* \b;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  512)
* \B;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  532)
* \b;em expressões regulares <1>:        Sintaxe de expressão regular.
                                                             (line  638)
* \b;sequência de escape:                Literais de string e bytes.
                                                             (line   75)
* \d;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  549)
* \D;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  566)
* \f;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  638)
* \f;sequência de escape:                Literais de string e bytes.
                                                             (line   75)
* \g;em expressões regulares:            Funções<2>.         (line  228)
* \n;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  638)
* \N;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  638)
* \n;sequência de escape:                Literais de string e bytes.
                                                             (line   75)
* \N;sequência de escape:                Literais de string e bytes.
                                                             (line   75)
* \N;sequência de escape <1>:            Error Handlers.     (line   54)
* \r;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  638)
* \r;sequência de escape:                Literais de string e bytes.
                                                             (line   75)
* \s;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  574)
* \S;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  593)
* \t;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  638)
* \t;sequência de escape:                Literais de string e bytes.
                                                             (line   75)
* \u;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  638)
* \U;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  638)
* \u;sequência de escape:                Literais de string e bytes.
                                                             (line   75)
* \U;sequência de escape:                Literais de string e bytes.
                                                             (line   75)
* \u;sequência de escape <1>:            Error Handlers.     (line   15)
* \U;sequência de escape <1>:            Error Handlers.     (line   15)
* \v;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  638)
* \v;sequência de escape:                Literais de string e bytes.
                                                             (line   75)
* \w;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  601)
* \W;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  620)
* \x;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  638)
* \x;sequência de escape:                Literais de string e bytes.
                                                             (line   75)
* \x;sequência de escape <1>:            Error Handlers.     (line   15)
* \Z;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  634)
* &=;atribuição aumentada:               Instruções de atribuição aumentada.
                                                             (line    6)
* # (cerquilha);comentário:              Uma introdução informal ao Python.
                                                             (line   14)
* # (cerquilha);comentário <1>:          Comentários.        (line    6)
* # (cerquilha);comentário <2>:          site — Gancho de configuração específico do site.
                                                             (line   54)
* # (cerquilha);declaração de codificação de código-fonte: Declarações de codificação.
                                                             (line    6)
* # (cerquilha);em expressões regulares: Sinalizadores.      (line  135)
* # (cerquilha);em formatação no estilo printf: Formatação de string no estilo printf.
                                                             (line   71)
* # (cerquilha);em formatação no estilo printf <1>: Estilo de Formatação de bytes printf-style.
                                                             (line   65)
* # (cerquilha);in doctests:             Flags opcionais.    (line  165)
* # (cerquilha);na formatação de strings: Minilinguagem de especificação de formato.
                                                             (line   99)
* % (porcentagem);datetime, formato:     Objetos timezone.   (line   73)
* % (porcentagem);datetime, formato <1>: Funções<5>.         (line  328)
* % (porcentagem);datetime, formato <2>: Funções<5>.         (line  493)
* % (porcentagem);expansão de variáveis de ambiente (Windows): os path — Manipulações comuns de nomes de caminhos.
                                                             (line  174)
* % (porcentagem);expansão de variáveis de ambiente (Windows) <1>: Funções<13>.
                                                             (line  232)
* % (porcentagem);interpolação em arquivos de configuração: Interpolação de valores.
                                                             (line   10)
* % (porcentagem);printf, estilo de formatação: Formatação de string no estilo printf.
                                                             (line    6)
* % (porcentagem);printf, estilo de formatação <1>: Estilo de Formatação de bytes printf-style.
                                                             (line    6)
* %=;atribuição aumentada:               Instruções de atribuição aumentada.
                                                             (line    6)
* ^ (circunflexo);em expressões regulares: Sintaxe de expressão regular.
                                                             (line   58)
* ^ (circunflexo);em expressões regulares <1>: Sintaxe de expressão regular.
                                                             (line  219)
* ^ (circunflexo);marker:                E quanto às exceções?.
                                                             (line   93)
* ^ (circunflexo);marker <1>:            Funções de nível de módulo<2>.
                                                             (line   36)
* ^ (circunflexo);na formatação de strings: Minilinguagem de especificação de formato.
                                                             (line   45)
* ^ (circunflexo);no módulo curses:      curses ascii — Utilitários para caracteres ASCII.
                                                             (line  241)
* ^=;atribuição aumentada:               Instruções de atribuição aumentada.
                                                             (line    6)
* + (mais);em expressões regulares:      Sintaxe de expressão regular.
                                                             (line   83)
* + (mais);em formatação no estilo printf: Formatação de string no estilo printf.
                                                             (line   71)
* + (mais);em formatação no estilo printf <1>: Estilo de Formatação de bytes printf-style.
                                                             (line   65)
* + (mais);in doctests:                  Flags opcionais.    (line  165)
* + (mais);na formatação de strings:     Minilinguagem de especificação de formato.
                                                             (line   76)
* + (mais);no módulo argparse:           nargs.              (line   69)
* + (mais);operador binário:             Operações binárias aritméticas.
                                                             (line   77)
* + (mais);operador binário <1>:         Tipos numéricos — int float complex.
                                                             (line   30)
* + (mais);operador unário:              Operações aritméticas unárias e bit a bit.
                                                             (line   15)
* + (mais);operador unário <1>:          Tipos numéricos — int float complex.
                                                             (line   30)
* +?;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line   94)
* ++;em expressões regulares:            Sintaxe de expressão regular.
                                                             (line  105)
* +=;atribuição aumentada:               Instruções de atribuição aumentada.
                                                             (line    6)
* < (menor que);in struct format strings: Byte Order Size and Alignment.
                                                             (line   13)
* < (menor que);na formatação de strings: Minilinguagem de especificação de formato.
                                                             (line   45)
* <<=;atribuição aumentada:              Instruções de atribuição aumentada.
                                                             (line    6)
* <BLANKLINE>:                           Flags opcionais.    (line   28)
* = (igual);atribuição, instrução de:    Instruções de atribuição.
                                                             (line    6)
* = (igual);definição de classe:         Metaclasses.        (line    6)
* = (igual);definição de função:         Definições de função.
                                                             (line   69)
* = (igual);em chamadas de função:       Fatiamentos.        (line   39)
* = (igual);in struct format strings:    Byte Order Size and Alignment.
                                                             (line   13)
* = (igual);na formatação de strings:    Minilinguagem de especificação de formato.
                                                             (line   45)
* = (igual);para ajudar na depuração usando literais de string: Concatenação de literal de string.
                                                             (line   27)
* = (igual);para ajudar na depuração usando literais de string <1>: String Methods<2>.
                                                             (line  916)
* > (maior);in struct format strings:    Byte Order Size and Alignment.
                                                             (line   13)
* > (maior);na formatação de strings:    Minilinguagem de especificação de formato.
                                                             (line   45)
* >>=;atribuição aumentada:              Instruções de atribuição aumentada.
                                                             (line    6)
* >>>:                                   Glossário.          (line    6)
* >>>;prompt do interpretador:           Como os exemplos de docstrings são reconhecidos?.
                                                             (line   26)
* >>>;prompt do interpretador <1>:       sys — Parâmetros e funções específicas do sistema.
                                                             (line 1554)
* | (barra vertical);em expressões regulares: Sintaxe de expressão regular.
                                                             (line  247)
* |=;atribuição aumentada:               Instruções de atribuição aumentada.
                                                             (line    6)
* ~ (til);expansão de diretório home:    os path — Manipulações comuns de nomes de caminhos.
                                                             (line  148)
* $ (dólar);em expressões regulares:     Sintaxe de expressão regular.
                                                             (line   64)
* $ (dólar);em strings template:         Strings template.   (line   14)
* $ (dólar);expansão de variáveis de ambiente: os path — Manipulações comuns de nomes de caminhos.
                                                             (line  174)
* $ (dólar);interpolação em arquivos de configuração: Interpolação de valores.
                                                             (line   41)
* 0b;literal de inteiro:                 Literais numéricos. (line   15)
* 0o;literal de inteiro:                 Literais numéricos. (line   15)
* 0x;literal de inteiro:                 Literais numéricos. (line   15)
* A (no módulo re):                      Sinalizadores.      (line   16)
* A_ALTCHARSET (no módulo curses):       Constantes<6>.      (line   65)
* A_ATTRIBUTES (no módulo curses):       Constantes<6>.      (line  126)
* A_BLINK (no módulo curses):            Constantes<6>.      (line   68)
* A_BOLD (no módulo curses):             Constantes<6>.      (line   71)
* A_CHARTEXT (no módulo curses):         Constantes<6>.      (line  129)
* A_COLOR (no módulo curses):            Constantes<6>.      (line  132)
* A_DIM (no módulo curses):              Constantes<6>.      (line   74)
* A_HORIZONTAL (no módulo curses):       Constantes<6>.      (line   99)
* A_INVIS (no módulo curses):            Constantes<6>.      (line   77)
* A_ITALIC (no módulo curses):           Constantes<6>.      (line   80)
* A_LEFT (no módulo curses):             Constantes<6>.      (line  102)
* A_LOW (no módulo curses):              Constantes<6>.      (line  105)
* A_NORMAL (no módulo curses):           Constantes<6>.      (line   83)
* A_PROTECT (no módulo curses):          Constantes<6>.      (line   86)
* A_REVERSE (no módulo curses):          Constantes<6>.      (line   89)
* A_RIGHT (no módulo curses):            Constantes<6>.      (line  108)
* A_STANDOUT (no módulo curses):         Constantes<6>.      (line   93)
* A_TOP (no módulo curses):              Constantes<6>.      (line  111)
* A_UNDERLINE (no módulo curses):        Constantes<6>.      (line   96)
* A_VERTICAL (no módulo curses):         Constantes<6>.      (line  114)
* a2b_base64() (no módulo binascii):     binascii — Converte entre binário e ASCII.
                                                             (line   42)
* a2b_hex() (no módulo binascii):        binascii — Converte entre binário e ASCII.
                                                             (line  147)
* a2b_qp() (no módulo binascii):         binascii — Converte entre binário e ASCII.
                                                             (line   73)
* a2b_uu() (no módulo binascii):         binascii — Converte entre binário e ASCII.
                                                             (line   25)
* a85decode() (no módulo base64):        Base85 Encodings.   (line   52)
* a85encode() (no módulo base64):        Base85 Encodings.   (line   28)
* ABC (classe em abc):                   abc — Classes base abstratas.
                                                             (line   28)
* ABCMeta (classe em abc):               abc — Classes base abstratas.
                                                             (line   54)
* ABDAY_1 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  241)
* ABDAY_2 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  241)
* ABDAY_3 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  241)
* ABDAY_4 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  241)
* ABDAY_5 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  241)
* ABDAY_6 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  241)
* ABDAY_7 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  241)
* abiflags (no módulo sys):              sys — Parâmetros e funções específicas do sistema.
                                                             (line   13)
* ABMON_1 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  266)
* ABMON_10 (no módulo locale):           locale — Serviços de internacionalização.
                                                             (line  266)
* ABMON_11 (no módulo locale):           locale — Serviços de internacionalização.
                                                             (line  266)
* ABMON_12 (no módulo locale):           locale — Serviços de internacionalização.
                                                             (line  266)
* ABMON_2 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  266)
* ABMON_3 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  266)
* ABMON_4 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  266)
* ABMON_5 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  266)
* ABMON_6 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  266)
* ABMON_7 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  266)
* ABMON_8 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  266)
* ABMON_9 (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  266)
* abort (função C):                      Controle de processos.
                                                             (line    7)
* ABORT (no módulo tkinter.messagebox):  tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  149)
* abort_clients() (método asyncio.Server): Objetos Server.   (line   56)
* abort() (método asyncio.Barrier):      Barrier.            (line   87)
* abort() (método asyncio.DatagramTransport): Transportes de datagrama.
                                                             (line   20)
* abort() (método asyncio.WriteTransport): Write-only Transports.
                                                             (line    6)
* abort() (método ftplib.FTP):           FTP objects.        (line  152)
* abort() (método threading.Barrier):    Barrier objects.    (line   82)
* abort() (no módulo os):                Gerenciamento de processo.
                                                             (line   16)
* ABORTRETRYIGNORE (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  164)
* ABOVE_NORMAL_PRIORITY_CLASS (no módulo subprocess): Constantes do Windows.
                                                             (line   68)
* above() (método curses.panel.Panel):   Objetos painel.     (line   13)
* abs() (método decimal.Context):        Objetos de contexto.
                                                             (line  270)
* abs() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line   77)
* absolute_import (no módulo __future__): Conteúdo do módulo<9>.
                                                             (line   26)
* absolute() (método pathlib.Path):      Expandindo e resolvendo caminhos.
                                                             (line   39)
* AbsoluteLinkError:                     tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  266)
* AbsolutePathError:                     tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  251)
* abspath() (no módulo os.path):         os path — Manipulações comuns de nomes de caminhos.
                                                             (line   52)
* AbstractAsyncContextManager (classe em contextlib): Utilitários.
                                                             (line   19)
* AbstractBasicAuthHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  341)
* AbstractChildWatcher (classe em asyncio): Monitores de processos.
                                                             (line   43)
* abstractclassmethod() (no módulo abc): abc — Classes base abstratas.
                                                             (line  243)
* AbstractContextManager (classe em contextlib): Utilitários.
                                                             (line    8)
* AbstractDigestAuthHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  380)
* AbstractEventLoop (classe em asyncio): Implementações do laço de eventos.
                                                             (line   54)
* AbstractEventLoopPolicy (classe em asyncio): Policy Objects.
                                                             (line    8)
* abstractmethod() (no módulo abc):      abc — Classes base abstratas.
                                                             (line  165)
* abstractproperty() (no módulo abc):    abc — Classes base abstratas.
                                                             (line  287)
* AbstractSet (classe em typing):        Apelidos de contêineres ABC em collections abc.
                                                             (line    6)
* abstractstaticmethod() (no módulo abc): abc — Classes base abstratas.
                                                             (line  265)
* accept() (método multiprocessing.connection.Listener): Listeners and Clients.
                                                             (line   85)
* accept() (método socket.socket):       Socket Objects.     (line   13)
* access() (no módulo os):               Arquivos e diretórios.
                                                             (line   52)
* accumulate() (no módulo itertools):    Funções do intertools.
                                                             (line   10)
* ACK (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   38)
* aclose() (método agen):                Métodos geradores-iteradores assíncronos.
                                                             (line   60)
* aclose() (método contextlib.AsyncExitStack): Utilitários.  (line  655)
* aclosing() (no módulo contextlib):     Utilitários.        (line  190)
* acos() (no módulo cmath):              Funções trigonométricas<2>.
                                                             (line    6)
* acos() (no módulo math):               Funções trigonométricas.
                                                             (line    6)
* acosh() (no módulo cmath):             Funções hiperbólicas<2>.
                                                             (line    6)
* acosh() (no módulo math):              Funções hiperbólicas.
                                                             (line    9)
* acquire() (método _thread.lock):       _thread— API de segmentação de baixo nível.
                                                             (line  150)
* acquire() (método asyncio.Condition):  Condição.           (line   47)
* acquire() (método asyncio.Lock):       Lock.               (line   35)
* acquire() (método asyncio.Semaphore):  Semaphore.          (line   42)
* acquire() (método logging.Handler):    Objetos Handler.    (line   26)
* acquire() (método multiprocessing.Lock): Primitivas de sincronização.
                                                             (line   82)
* acquire() (método multiprocessing.RLock): Primitivas de sincronização.
                                                             (line  141)
* acquire() (método threading.Condition): Condition objects. (line   85)
* acquire() (método threading.Lock):     Lock objects.       (line   43)
* acquire() (método threading.RLock):    RLock objects.      (line   44)
* acquire() (método threading.Semaphore): Semaphore objects. (line   34)
* ACS_BBSS (no módulo curses):           Constantes<6>.      (line  470)
* ACS_BLOCK (no módulo curses):          Constantes<6>.      (line  473)
* ACS_BOARD (no módulo curses):          Constantes<6>.      (line  476)
* ACS_BSBS (no módulo curses):           Constantes<6>.      (line  479)
* ACS_BSSB (no módulo curses):           Constantes<6>.      (line  482)
* ACS_BSSS (no módulo curses):           Constantes<6>.      (line  485)
* ACS_BTEE (no módulo curses):           Constantes<6>.      (line  488)
* ACS_BULLET (no módulo curses):         Constantes<6>.      (line  491)
* ACS_CKBOARD (no módulo curses):        Constantes<6>.      (line  494)
* ACS_DARROW (no módulo curses):         Constantes<6>.      (line  497)
* ACS_DEGREE (no módulo curses):         Constantes<6>.      (line  500)
* ACS_DIAMOND (no módulo curses):        Constantes<6>.      (line  503)
* ACS_GEQUAL (no módulo curses):         Constantes<6>.      (line  506)
* ACS_HLINE (no módulo curses):          Constantes<6>.      (line  509)
* ACS_LANTERN (no módulo curses):        Constantes<6>.      (line  512)
* ACS_LARROW (no módulo curses):         Constantes<6>.      (line  515)
* ACS_LEQUAL (no módulo curses):         Constantes<6>.      (line  518)
* ACS_LLCORNER (no módulo curses):       Constantes<6>.      (line  521)
* ACS_LRCORNER (no módulo curses):       Constantes<6>.      (line  524)
* ACS_LTEE (no módulo curses):           Constantes<6>.      (line  527)
* ACS_NEQUAL (no módulo curses):         Constantes<6>.      (line  530)
* ACS_PI (no módulo curses):             Constantes<6>.      (line  533)
* ACS_PLMINUS (no módulo curses):        Constantes<6>.      (line  536)
* ACS_PLUS (no módulo curses):           Constantes<6>.      (line  539)
* ACS_RARROW (no módulo curses):         Constantes<6>.      (line  542)
* ACS_RTEE (no módulo curses):           Constantes<6>.      (line  545)
* ACS_S1 (no módulo curses):             Constantes<6>.      (line  548)
* ACS_S3 (no módulo curses):             Constantes<6>.      (line  551)
* ACS_S7 (no módulo curses):             Constantes<6>.      (line  554)
* ACS_S9 (no módulo curses):             Constantes<6>.      (line  557)
* ACS_SBBS (no módulo curses):           Constantes<6>.      (line  560)
* ACS_SBSB (no módulo curses):           Constantes<6>.      (line  563)
* ACS_SBSS (no módulo curses):           Constantes<6>.      (line  566)
* ACS_SSBB (no módulo curses):           Constantes<6>.      (line  569)
* ACS_SSBS (no módulo curses):           Constantes<6>.      (line  572)
* ACS_SSSB (no módulo curses):           Constantes<6>.      (line  575)
* ACS_SSSS (no módulo curses):           Constantes<6>.      (line  578)
* ACS_STERLING (no módulo curses):       Constantes<6>.      (line  581)
* ACS_TTEE (no módulo curses):           Constantes<6>.      (line  584)
* ACS_UARROW (no módulo curses):         Constantes<6>.      (line  587)
* ACS_ULCORNER (no módulo curses):       Constantes<6>.      (line  590)
* ACS_URCORNER (no módulo curses):       Constantes<6>.      (line  593)
* ACS_VLINE (no módulo curses):          Constantes<6>.      (line  596)
* action (atributo optparse.Option):     Atributos da classe Option.
                                                             (line   20)
* Action (classe em argparse):           Classes de ação.    (line   11)
* ACTIONS (atributo optparse.Option):    Adicionando novas ações.
                                                             (line   31)
* activate_stack_trampoline() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line 1831)
* active_children() (no módulo multiprocessing): Diversos<4>.
                                                             (line    6)
* active_count() (no módulo threading):  Referência<2>.      (line    8)
* actual() (método tkinter.font.Font):   tkinter font — Invólucro de fontes Tkinter.
                                                             (line   49)
* Add (classe em ast):                   Expressões<2>.      (line   54)
* add_alias() (no módulo email.charset): email charset Representando conjuntos de caracteres.
                                                             (line  201)
* add_alternative() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  641)
* add_argument_group() (método argparse.ArgumentParser): Grupos de argumentos.
                                                             (line    6)
* add_argument() (método argparse.ArgumentParser): O método add_argument.
                                                             (line    6)
* add_attachment() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  653)
* add_cgi_vars() (método wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  135)
* add_charset() (no módulo email.charset): email charset Representando conjuntos de caracteres.
                                                             (line  171)
* add_child_handler() (método asyncio.AbstractChildWatcher): Monitores de processos.
                                                             (line   45)
* add_codec() (no módulo email.charset): email charset Representando conjuntos de caracteres.
                                                             (line  210)
* add_cookie_header() (método http.cookiejar.CookieJar): CookieJar and FileCookieJar Objects.
                                                             (line   11)
* add_dll_directory() (no módulo os):    Gerenciamento de processo.
                                                             (line   24)
* add_done_callback() (método asyncio.Future): Objeto Future.
                                                             (line   83)
* add_done_callback() (método asyncio.Task): Objeto Task.    (line  105)
* add_done_callback() (método concurrent.futures.Future): Future Objects.
                                                             (line   66)
* add_fallback() (método gettext.NullTranslations): A classe NullTranslations.
                                                             (line   30)
* add_flag() (método mailbox.Maildir):   Maildir objects.    (line  129)
* add_flag() (método mailbox.MaildirMessage): MaildirMessage objects.
                                                             (line   76)
* add_flag() (método mailbox.mboxMessage): mboxMessage objects.
                                                             (line   79)
* add_flag() (método mailbox.MMDFMessage): MMDFMessage objects.
                                                             (line   78)
* add_folder() (método mailbox.Maildir): Maildir objects.    (line   75)
* add_folder() (método mailbox.MH):      MH objects.         (line   45)
* add_get_handler() (método email.contentmanager.ContentManager): email contentmanager Gerenciando conteúdo MIME.
                                                             (line   75)
* add_handler() (método urllib.request.OpenerDirector): OpenerDirector Objects.
                                                             (line    8)
* add_header() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  260)
* add_header() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  370)
* add_header() (método urllib.request.Request): Objeto Request.
                                                             (line   79)
* add_header() (método wsgiref.headers.Headers): wsgiref headers – Ferramentas de cabeçalho de resposta WSGI.
                                                             (line   68)
* add_history() (no módulo readline):    Lista de histórico. (line   38)
* add_label() (método mailbox.BabylMessage): BabylMessage objects.
                                                             (line   55)
* add_mutually_exclusive_group() (método argparse.ArgumentParser): Exclusão mútua.
                                                             (line    6)
* add_note() (método BaseException):     Classes base.       (line   52)
* add_option() (método optparse.OptionParser): Definindo as opções.
                                                             (line   14)
* add_parent() (método urllib.request.BaseHandler): BaseHandler Objects.
                                                             (line   10)
* add_password() (método urllib.request.HTTPPasswordMgr): HTTPPasswordMgr Objects.
                                                             (line    9)
* add_password() (método urllib.request.HTTPPasswordMgrWithPriorAuth): HTTPPasswordMgrWithPriorAuth Objects.
                                                             (line   10)
* add_reader() (método asyncio.loop):    Observando descritores de arquivo.
                                                             (line    6)
* add_related() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  628)
* add_section() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  128)
* add_section() (método configparser.RawConfigParser): Objetos RawConfigParser.
                                                             (line   37)
* add_sequence() (método mailbox.MHMessage): MHMessage objects.
                                                             (line   41)
* add_set_handler() (método email.contentmanager.ContentManager): email contentmanager Gerenciando conteúdo MIME.
                                                             (line   80)
* add_signal_handler() (método asyncio.loop): Sinais Unix.   (line    6)
* add_subparsers() (método argparse.ArgumentParser): Subcomandos.
                                                             (line    6)
* add_type() (método mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line  111)
* add_type() (no módulo mimetypes):      mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line  128)
* add_unredirected_header() (método urllib.request.Request): Objeto Request.
                                                             (line   91)
* add_writer() (método asyncio.loop):    Observando descritores de arquivo.
                                                             (line   20)
* add() (método decimal.Context):        Objetos de contexto.
                                                             (line  274)
* add() (método graphlib.TopologicalSorter): graphlib — Funcionalidade para operar com estruturas do tipo grafo.
                                                             (line   84)
* add() (método mailbox.Mailbox):        Objetos Mailbox.    (line   60)
* add() (método mailbox.Maildir):        Maildir objects.    (line  193)
* add() (método pstats.Stats):           A classe Stats.     (line   49)
* add() (método set):                    Tipo conjuntos — set frozenset.
                                                             (line  209)
* add() (método tarfile.TarFile):        Objetos TarFile.    (line  277)
* add() (método tkinter.ttk.Notebook):   ttk Notebook.       (line    8)
* add() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line   82)
* addAsyncCleanup() (método unittest.IsolatedAsyncioTestCase): Casos de teste.
                                                             (line  915)
* addaudithook() (no módulo sys):        sys — Parâmetros e funções específicas do sistema.
                                                             (line   26)
* addch() (método curses.window):        Window Objects.     (line   11)
* addClassCleanup() (método de classe unittest.TestCase): Casos de teste.
                                                             (line  834)
* addCleanup() (método unittest.TestCase): Casos de teste.   (line  794)
* addcomponent() (método turtle.Shape):  Classes Públicas.   (line   68)
* addDuration() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  441)
* addError() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  371)
* addExpectedFailure() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  407)
* addFailure() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  382)
* addfile() (método tarfile.TarFile):    Objetos TarFile.    (line  295)
* addFilter() (método logging.Handler):  Objetos Handler.    (line   53)
* addFilter() (método logging.Logger):   Objetos Logger.     (line  335)
* addHandler() (método logging.Logger):  Objetos Logger.     (line  352)
* addinfourl (classe em urllib.response): urllib response — Response classes used by urllib.
                                                             (line   12)
* addLevelName() (no módulo logging):    Funções de nível de módulo.
                                                             (line  128)
* addModuleCleanup() (no módulo unittest): setUpModule and tearDownModule.
                                                             (line   22)
* addnstr() (método curses.window):      Window Objects.     (line   25)
* AddPackagePath() (no módulo modulefinder): modulefinder — Procura módulos usados por um script.
                                                             (line   16)
* addr_spec (atributo email.headerregistry.Address): email headerregistry Custom Header Objects.
                                                             (line  441)
* address (atributo email.headerregistry.SingleAddressHeader): email headerregistry Custom Header Objects.
                                                             (line  222)
* address (atributo multiprocessing.connection.Listener): Listeners and Clients.
                                                             (line  100)
* address (atributo multiprocessing.managers.BaseManager): Gerenciadores.
                                                             (line  139)
* Address (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line  403)
* address_exclude() (método ipaddress.IPv4Network): Objetos de rede.
                                                             (line  164)
* address_exclude() (método ipaddress.IPv6Network): Objetos de rede.
                                                             (line  350)
* address_family (atributo socketserver.BaseServer): Objetos Server<2>.
                                                             (line   69)
* address_string() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  333)
* addresses (atributo email.headerregistry.AddressHeader): email headerregistry Custom Header Objects.
                                                             (line  195)
* addresses (atributo email.headerregistry.Group): email headerregistry Custom Header Objects.
                                                             (line  477)
* AddressHeader (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line  180)
* addressof() (no módulo ctypes):        Funções utilitárias.
                                                             (line    6)
* AddressValueError:                     Exceções personalizadas.
                                                             (line    9)
* addshape() (no módulo turtle):         Configurações e métodos especiais.
                                                             (line   73)
* addsitedir() (no módulo site):         Conteúdo do módulo<10>.
                                                             (line   55)
* addSkip() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  399)
* addstr() (método curses.window):       Window Objects.     (line   33)
* addSubTest() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  425)
* addSuccess() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  393)
* addTest() (método unittest.TestSuite): Grouping tests.     (line   25)
* addTests() (método unittest.TestSuite): Grouping tests.    (line   30)
* addTypeEqualityFunc() (método unittest.TestCase): Casos de teste.
                                                             (line  611)
* addUnexpectedSuccess() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  417)
* adição:                                Operações binárias aritméticas.
                                                             (line   77)
* adjust_int_max_str_digits() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  754)
* adjusted() (método decimal.Decimal):   Objetos de Decimal. (line  118)
* adler32() (no módulo zlib):            zlib — Compactação compatível com gzip.
                                                             (line   30)
* AF_ALG (no módulo socket):             Constantes<8>.      (line  263)
* AF_CAN (no módulo socket):             Constantes<8>.      (line  126)
* AF_DIVERT (no módulo socket):          Constantes<8>.      (line  202)
* AF_HYPERV (no módulo socket):          Constantes<8>.      (line  344)
* AF_INET (no módulo socket):            Constantes<8>.      (line   11)
* AF_INET6 (no módulo socket):           Constantes<8>.      (line   11)
* AF_LINK (no módulo socket):            Constantes<8>.      (line  287)
* AF_PACKET (no módulo socket):          Constantes<8>.      (line  212)
* AF_QIPCRTR (no módulo socket):         Constantes<8>.      (line  314)
* AF_RDS (no módulo socket):             Constantes<8>.      (line  234)
* AF_UNIX (no módulo socket):            Constantes<8>.      (line   11)
* AF_UNSPEC (no módulo socket):          Constantes<8>.      (line   21)
* AF_VSOCK (no módulo socket):           Constantes<8>.      (line  274)
* agendamento de eventos:                sched — Agendador de eventos.
                                                             (line    8)
* agrupamento:                           Indentação.         (line    6)
* agrupamento de instruções:             Indentação.         (line    6)
* aguardável:                            Glossário.          (line  167)
* alarm() (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  302)
* ALERT_DESCRIPTION_HANDSHAKE_FAILURE (no módulo ssl): Constantes<9>.
                                                             (line  511)
* ALERT_DESCRIPTION_INTERNAL_ERROR (no módulo ssl): Constantes<9>.
                                                             (line  511)
* AlertDescription (classe em ssl):      Constantes<9>.      (line  525)
* algorithm (atributo sys.hash_info):    sys — Parâmetros e funções específicas do sistema.
                                                             (line 1109)
* algorithms_available (no módulo hashlib): Atributos.       (line   18)
* algorithms_guaranteed (no módulo hashlib): Atributos.      (line    8)
* alias (classe em ast):                 Importações.        (line   38)
* alias (pdb command):                   Comandos de depuração.
                                                             (line  395)
* alignment() (no módulo ctypes):        Funções utilitárias.
                                                             (line   14)
* alive (atributo weakref.finalize):     weakref — Referências fracas.
                                                             (line  325)
* ALL_COMPLETED (no módulo asyncio):     Primitivas de espera.
                                                             (line   46)
* ALL_COMPLETED (no módulo concurrent.futures): Module Functions.
                                                             (line   40)
* all_errors (no módulo ftplib):         Module variables.   (line   27)
* all_features (no módulo xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line  100)
* all_frames (atributo tracemalloc.Filter): Filter.          (line   58)
* all_properties (no módulo xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line  132)
* all_suffixes() (no módulo importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line   57)
* all_tasks() (no módulo asyncio):       Introspecção.       (line   16)
* allocate_lock() (no módulo _thread):   _thread— API de segmentação de baixo nível.
                                                             (line   86)
* allocfunc (C type):                    Slot Type typedefs. (line    6)
* ALLOW_MISSING (no módulo os.path):     os path — Manipulações comuns de nomes de caminhos.
                                                             (line  461)
* allow_reuse_address (atributo socketserver.BaseServer): Objetos Server<2>.
                                                             (line  101)
* allowed_domains() (método http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line   65)
* ALT_DIGITS (no módulo locale):         locale — Serviços de internacionalização.
                                                             (line  350)
* alt() (no módulo curses.ascii):        curses ascii — Utilitários para caracteres ASCII.
                                                             (line  232)
* altsep (no módulo os):                 Diversas informações de sistema.
                                                             (line  128)
* altzone (no módulo time):              Constantes de Fuso Horário.
                                                             (line    6)
* alvo:                                  Instruções de atribuição.
                                                             (line   27)
* alvo;lista:                            Instruções de atribuição.
                                                             (line   27)
* alvo;lista <1>:                        A instrução for.    (line    6)
* alvo;lista;atribuição:                 Instruções de atribuição.
                                                             (line   36)
* ALWAYS_EQ (no módulo test.support):    test support — Utilitários para o conjunto de teste do Python.
                                                             (line  184)
* ALWAYS_TYPED_ACTIONS (atributo optparse.Option): Adicionando novas ações.
                                                             (line   43)
* ambiente:                              Resolução de nomes. (line   12)
* ambiente virtual:                      Glossário.          (line 1834)
* Ambientes;virtual:                     venv — Criação de ambientes virtuais.
                                                             (line   10)
* AmbiguousOptionError:                  Exceções<10>.       (line   25)
* AMPER (no módulo token):               token — Constantes usadas com árvores de análises do Python.
                                                             (line  216)
* AMPEREQUAL (no módulo token):          token — Constantes usadas com árvores de análises do Python.
                                                             (line  282)
* analisador léxico:                     Glossário.          (line 1018)
* analisador sintático:                  Análise léxica.     (line    6)
* análise léxica:                        Análise léxica.     (line    6)
* anchor (atributo pathlib.PurePath):    Métodos e propriedades.
                                                             (line   66)
* Anchor (classe em importlib.resources): importlib resources – Leitura abertura e acesso a recursos de pacotes.
                                                             (line   48)
* And (classe em ast):                   Expressões<2>.      (line   87)
* and_() (no módulo operator):           operator — Operadores padrões como funções.
                                                             (line   87)
* android_ver() (no módulo platform):    Plataforma Android. (line    6)
* AnnAssign (classe em ast):             Instruções.         (line   41)
* Annotated (no módulo typing):          Formas especiais.   (line  297)
* annotation (atributo inspect.Parameter): Introspecting callables with the Signature object.
                                                             (line  223)
* ANNOTATION (atributo symtable.SymbolTableType): Examining Symbol Tables.
                                                             (line   26)
* annotations (no módulo __future__):    Conteúdo do módulo<9>.
                                                             (line   47)
* Ano 2038:                              time — Acesso ao horário e conversões.
                                                             (line   29)
* anônima;função:                        Lambdas.            (line    6)
* Anos de 2 dígitos:                     time — Acesso ao horário e conversões.
                                                             (line   34)
* anotação:                              Glossário.          (line   39)
* anotação de função:                    Glossário.          (line  664)
* anotação de variável:                  Glossário.          (line 1810)
* anotação;tipo, anotação de; tipo, dica de: Tipos de anotação de tipo — Apelido genérico União.
                                                             (line    6)
* anotada;atribuição:                    instruções de atribuição anotado.
                                                             (line    6)
* answer_challenge() (no módulo multiprocessing.connection): Listeners and Clients.
                                                             (line   25)
* anticipate_failure() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  467)
* Any (no módulo typing):                Tipos especiais.    (line    9)
* ANY (no módulo unittest.mock):         ANY.                (line    6)
* ANY_CONTIGUOUS (atributo inspect.BufferFlags): Buffer flags.
                                                             (line   29)
* AnyStr (no módulo typing):             Tipos especiais.    (line   22)
* ao final;vírgula:                      Listas de expressões.
                                                             (line   29)
* apelido de tipo:                       Glossário.          (line 1762)
* API provisória:                        Glossário.          (line 1424)
* api_version (no módulo sys):           sys — Parâmetros e funções específicas do sistema.
                                                             (line 2109)
* apilevel (no módulo sqlite3):          Constantes do módulo.
                                                             (line   65)
* apop() (método poplib.POP3):           Objetos POP3.       (line   42)
* append_history_file() (no módulo readline): Arquivo de histórico.
                                                             (line   21)
* append() (método array.array):         array— Vetores eficientes de valores numéricos.
                                                             (line  123)
* append() (método collections.deque):   Objetos deque.      (line   38)
* append() (método email.header.Header): email header Internationalized headers.
                                                             (line   95)
* append() (método imaplib.IMAP4):       Objetos IMAP4.      (line   33)
* append() (método sequence):            Tipos sequências mutáveis.
                                                             (line   71)
* append() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line   88)
* appendChild() (método xml.dom.Node):   Objetos Node.       (line  115)
* appendleft() (método collections.deque): Objetos deque.    (line   42)
* AppleFrameworkLoader (classe em importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  454)
* application_uri() (no módulo wsgiref.util): wsgiref util – Utilidades do ambiente WSGI.
                                                             (line   34)
* apply_async() (método multiprocessing.pool.Pool): Process Pools.
                                                             (line   78)
* apply_defaults() (método inspect.BoundArguments): Introspecting callables with the Signature object.
                                                             (line  369)
* apply() (método multiprocessing.pool.Pool): Process Pools. (line   70)
* APRIL (no módulo calendar):            calendar — Funções gerais relacionadas ao calendário.
                                                             (line  507)
* architecture() (no módulo platform):   Multiplataforma.    (line    6)
* archive (atributo zipimport.zipimporter): Objetos zipimporter.
                                                             (line   97)
* AREGTYPE (no módulo tarfile):          tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  294)
* aRepr (no módulo reprlib):             reprlib — Implementação alternativa à repr.
                                                             (line   43)
* arg (classe em ast):                   Definições de função e classe.
                                                             (line   68)
* args (atributo BaseException):         Classes base.       (line   18)
* args (atributo functools.partial):     Objetos partial.    (line   15)
* args (atributo inspect.BoundArguments): Introspecting callables with the Signature object.
                                                             (line  354)
* args (atributo subprocess.CompletedProcess): Usando o módulo subprocess.
                                                             (line  108)
* args (atributo subprocess.Popen):      Objetos Popen.      (line  109)
* args (atributo typing.ParamSpec):      Criando tipos genéricos e apelidos de tipo.
                                                             (line  422)
* args (pdb command):                    Comandos de depuração.
                                                             (line  285)
* args_from_interpreter_flags() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  333)
* argtypes (atributo ctypes._CFuncPtr):  Foreign functions.  (line   46)
* ArgumentDefaultsHelpFormatter (classe em argparse): formatter_class.
                                                             (line   10)
* ArgumentError:                         Foreign functions.  (line   94)
* ArgumentError <1>:                     Exceções<9>.        (line    6)
* argumento:                             Glossário.          (line   55)
* argumento nomeado:                     Glossário.          (line  990)
* argumento posicional:                  Glossário.          (line 1420)
* argumento;definição de função:         Definições de função.
                                                             (line   69)
* argumento;diferença de parâmetro:      Como passo parâmetros opcionais ou parâmetros nomeados de uma função para outra?.
                                                             (line   18)
* argumento;semântica de chamadas:       Fatiamentos.        (line   40)
* ArgumentParser (classe em argparse):   Objetos ArgumentParser.
                                                             (line    6)
* arguments (atributo inspect.BoundArguments): Introspecting callables with the Signature object.
                                                             (line  335)
* arguments (classe em ast):             Definições de função e classe.
                                                             (line   49)
* ArgumentTypeError:                     Exceções<9>.        (line   13)
* argv (in module sys):                  Parâmetros de todo o processo.
                                                             (line  227)
* argv (in module sys) <1>:              PyConfig.           (line  130)
* argv (no módulo sys):                  sys — Parâmetros e funções específicas do sistema.
                                                             (line   74)
* ArithmeticError:                       Classes base.       (line   74)
* aritmética:                            Tipos numéricos — int float complex.
                                                             (line   30)
* aritmética;conversão:                  Conversões aritméticas.
                                                             (line    6)
* arquivo binário:                       Glossário.          (line  179)
* arquivo ini:                           configparser — Analisador sintático de arquivo de configuração.
                                                             (line    8)
* arquivo ini do Windows:                configparser — Analisador sintático de arquivo de configuração.
                                                             (line    8)
* arquivo texto:                         Glossário.          (line 1708)
* arquivo;arquivos grandes:              Suporte a arquivos grandes.
                                                             (line    6)
* arquivo;byte-code:                     py_compile — Compila arquivos fonte do Python.
                                                             (line    8)
* arquivo;cópia:                         shutil — Operações de arquivo de alto nível.
                                                             (line    8)
* arquivo;mime.types:                    mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line  146)
* arquivo;modos:                         Funções embutidas<3>.
                                                             (line 1340)
* arquivos grandes:                      Suporte a arquivos grandes.
                                                             (line    6)
* Arquivos zip executáveis:              zipapp — Gerencia arquivos zip executáveis do Python.
                                                             (line   10)
* array (classe em array):               array— Vetores eficientes de valores numéricos.
                                                             (line   89)
* Array (classe em ctypes):              Arrays and pointers.
                                                             (line    6)
* Array() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  215)
* ARRAY() (no módulo ctypes):            Arrays and pointers.
                                                             (line   31)
* Array() (no módulo multiprocessing.sharedctypes): O módulo multiprocessing sharedctypes.
                                                             (line   51)
* Array() (no módulo multiprocessing):   Objetos ctypes compartilhados.
                                                             (line   42)
* arraysize (atributo sqlite3.Cursor):   Cursor objects.     (line  173)
* as_bytes() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  107)
* as_bytes() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  106)
* as_completed() (no módulo asyncio):    Primitivas de espera.
                                                             (line   61)
* as_completed() (no módulo concurrent.futures): Module Functions.
                                                             (line   44)
* as_file() (no módulo importlib.resources): importlib resources – Leitura abertura e acesso a recursos de pacotes.
                                                             (line   77)
* as_integer_ratio() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  126)
* as_integer_ratio() (método float):     Métodos adicionais em ponto flutuante.
                                                             (line   10)
* as_integer_ratio() (método fractions.Fraction): fractions — Números racionais.
                                                             (line  125)
* as_integer_ratio() (método int):       Métodos adicionais em tipos inteiros.
                                                             (line  163)
* as_posix() (método pathlib.PurePath):  Métodos e propriedades.
                                                             (line  175)
* as_string() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line   61)
* as_string() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line   60)
* as_tuple() (método decimal.Decimal):   Objetos de Decimal. (line  140)
* as_uri() (método pathlib.Path):        Analisando e gerando URIs.
                                                             (line   44)
* as;cláusula except:                    Cláusula except.    (line   30)
* as;instrução import:                   A instrução import. (line   40)
* as;instrução match:                    A instrução match.  (line    6)
* as;instrução with:                     A instrução with.   (line    6)
* ASCII:                                 Notação.            (line   33)
* ASCII <1>:                             Literais.           (line    8)
* ASCII (no módulo re):                  Sinalizadores.      (line   16)
* ascii_letters (no módulo string):      Constantes de strings.
                                                             (line    8)
* ascii_lowercase (no módulo string):    Constantes de strings.
                                                             (line   14)
* ascii_uppercase (no módulo string):    Constantes de strings.
                                                             (line   19)
* ascii() (no módulo curses.ascii):      curses ascii — Utilitários para caracteres ASCII.
                                                             (line  222)
* asctime() (no módulo time):            Funções<5>.         (line    6)
* asdict() (no módulo dataclasses):      Conteúdo do módulo<8>.
                                                             (line  350)
* asend() (método agen):                 Métodos geradores-iteradores assíncronos.
                                                             (line   27)
* asin() (no módulo cmath):              Funções trigonométricas<2>.
                                                             (line   12)
* asin() (no módulo math):               Funções trigonométricas.
                                                             (line   11)
* asinh() (no módulo cmath):             Funções hiperbólicas<2>.
                                                             (line   12)
* asinh() (no módulo math):              Funções hiperbólicas.
                                                             (line   13)
* askcolor() (no módulo tkinter.colorchooser): tkinter colorchooser — Diálogo de escolha de cor.
                                                             (line   17)
* askdirectory() (no módulo tkinter.filedialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line   55)
* askfloat() (no módulo tkinter.simpledialog): tkinter simpledialog — Diálogos de entrada padrão do Tkinter.
                                                             (line   14)
* askinteger() (no módulo tkinter.simpledialog): tkinter simpledialog — Diálogos de entrada padrão do Tkinter.
                                                             (line   14)
* askokcancel() (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  120)
* askopenfile() (no módulo tkinter.filedialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line   31)
* askopenfilename() (no módulo tkinter.filedialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line   43)
* askopenfilenames() (no módulo tkinter.filedialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line   43)
* askopenfiles() (no módulo tkinter.filedialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line   31)
* askquestion() (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  114)
* askretrycancel() (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  127)
* asksaveasfile() (no módulo tkinter.filedialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line   38)
* asksaveasfilename() (no módulo tkinter.filedialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line   50)
* askstring() (no módulo tkinter.simpledialog): tkinter simpledialog — Diálogos de entrada padrão do Tkinter.
                                                             (line   14)
* askyesno() (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  134)
* askyesnocancel() (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  141)
* aspas triplas:                         Literais de string e bytes.
                                                             (line   36)
* aspas triplas <1>:                     Glossário.          (line 1744)
* Assert (classe em ast):                Instruções.         (line  126)
* assert_any_await() (método unittest.mock.AsyncMock): A classe Mock.
                                                             (line  848)
* assert_any_call() (método unittest.mock.Mock): A classe Mock.
                                                             (line  151)
* assert_awaited_once_with() (método unittest.mock.AsyncMock): A classe Mock.
                                                             (line  831)
* assert_awaited_once() (método unittest.mock.AsyncMock): A classe Mock.
                                                             (line  798)
* assert_awaited_with() (método unittest.mock.AsyncMock): A classe Mock.
                                                             (line  814)
* assert_awaited() (método unittest.mock.AsyncMock): A classe Mock.
                                                             (line  778)
* assert_called_once_with() (método unittest.mock.Mock): A classe Mock.
                                                             (line  136)
* assert_called_once() (método unittest.mock.Mock): A classe Mock.
                                                             (line  108)
* assert_called_with() (método unittest.mock.Mock): A classe Mock.
                                                             (line  126)
* assert_called() (método unittest.mock.Mock): A classe Mock.
                                                             (line   97)
* assert_has_awaits() (método unittest.mock.AsyncMock): A classe Mock.
                                                             (line  865)
* assert_has_calls() (método unittest.mock.Mock): A classe Mock.
                                                             (line  167)
* assert_never() (no módulo typing):     Funções e decoradores.
                                                             (line   44)
* assert_not_awaited() (método unittest.mock.AsyncMock): A classe Mock.
                                                             (line  892)
* assert_not_called() (método unittest.mock.Mock): A classe Mock.
                                                             (line  188)
* assert_python_failure() (no módulo test.support.script_helper): test support script_helper — Utilities for the Python execution tests.
                                                             (line   57)
* assert_python_ok() (no módulo test.support.script_helper): test support script_helper — Utilities for the Python execution tests.
                                                             (line   40)
* assert_type() (no módulo typing):      Funções e decoradores.
                                                             (line   15)
* assertAlmostEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  530)
* assertCountEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  590)
* assertDictEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  699)
* assertEqual() (método unittest.TestCase): Casos de teste.  (line  186)
* assertFalse() (método unittest.TestCase): Casos de teste.  (line  211)
* assertGreater() (método unittest.TestCase): Casos de teste.
                                                             (line  557)
* assertGreaterEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  557)
* assertIn() (método unittest.TestCase): Casos de teste.     (line  237)
* assertInBytecode() (método test.support.bytecode_helper.BytecodeTestCase): test support bytecode_helper — Ferramentas de suporte para testar a geração correta de bytecode.
                                                             (line   22)
* AssertionError:                        Exceções concretas. (line    8)
* assertIs() (método unittest.TestCase): Casos de teste.     (line  223)
* assertIsInstance() (método unittest.TestCase): Casos de teste.
                                                             (line  244)
* assertIsNone() (método unittest.TestCase): Casos de teste. (line  230)
* assertIsNot() (método unittest.TestCase): Casos de teste.  (line  223)
* assertIsNotNone() (método unittest.TestCase): Casos de teste.
                                                             (line  230)
* assertLess() (método unittest.TestCase): Casos de teste.   (line  557)
* assertLessEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  557)
* assertListEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  676)
* assertLogs() (método unittest.TestCase): Casos de teste.   (line  426)
* assertMultiLineEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  651)
* assertNoLogs() (método unittest.TestCase): Casos de teste. (line  473)
* assertNotAlmostEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  530)
* assertNotEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  206)
* assertNotIn() (método unittest.TestCase): Casos de teste.  (line  237)
* assertNotInBytecode() (método test.support.bytecode_helper.BytecodeTestCase): test support bytecode_helper — Ferramentas de suporte para testar a geração correta de bytecode.
                                                             (line   28)
* assertNotIsInstance() (método unittest.TestCase): Casos de teste.
                                                             (line  244)
* assertNotRegex() (método unittest.TestCase): Casos de teste.
                                                             (line  571)
* assertRaises() (método unittest.TestCase): Casos de teste. (line  287)
* assertRaisesRegex() (método unittest.TestCase): Casos de teste.
                                                             (line  329)
* assertRegex() (método unittest.TestCase): Casos de teste.  (line  571)
* assertSequenceEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  661)
* assertSetEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  687)
* assertTrue() (método unittest.TestCase): Casos de teste.   (line  211)
* assertTupleEqual() (método unittest.TestCase): Casos de teste.
                                                             (line  676)
* assertWarns() (método unittest.TestCase): Casos de teste.  (line  357)
* assertWarnsRegex() (método unittest.TestCase): Casos de teste.
                                                             (line  401)
* Assign (classe em ast):                Instruções.         (line    6)
* AST (classe em ast):                   Classes de nós.     (line    6)
* ast opção de linha de comando; -a:     Uso na linha de comando<9>.
                                                             (line   29)
* ast opção de linha de comando; -h:     Uso na linha de comando<9>.
                                                             (line   15)
* ast opção de linha de comando; -help:  Uso na linha de comando<9>.
                                                             (line   15)
* ast opção de linha de comando; -i:     Uso na linha de comando<9>.
                                                             (line   33)
* ast opção de linha de comando; -include-attributes: Uso na linha de comando<9>.
                                                             (line   29)
* ast opção de linha de comando; -indent: Uso na linha de comando<9>.
                                                             (line   33)
* ast opção de linha de comando; -m:     Uso na linha de comando<9>.
                                                             (line   19)
* ast opção de linha de comando; -mode:  Uso na linha de comando<9>.
                                                             (line   19)
* ast opção de linha de comando; -no-type-comments: Uso na linha de comando<9>.
                                                             (line   25)
* astimezone() (método datetime.datetime): Objetos datetime. (line  494)
* astuple() (no módulo dataclasses):     Conteúdo do módulo<8>.
                                                             (line  383)
* async for;em compreensões:             Sintaxe de criação de listas conjuntos e dicionários.
                                                             (line   15)
* AsyncContextDecorator (classe em contextlib): Utilitários. (line  467)
* AsyncContextManager (classe em typing): Apelidos de ABCs da contextlib.
                                                             (line   26)
* asynccontextmanager() (no módulo contextlib): Utilitários. (line   95)
* AsyncExitStack (classe em contextlib): Utilitários.        (line  626)
* AsyncFor (classe em ast):              Async e await.      (line   34)
* AsyncFunctionDef (classe em ast):      Async e await.      (line    6)
* AsyncGenerator (classe em collections.abc): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  187)
* AsyncGenerator (classe em typing):     Apelidos para ABCs assíncronas em collections abc.
                                                             (line   21)
* AsyncGeneratorType (no módulo types):  Tipos padrão do interpretador.
                                                             (line   49)
* asyncio.subprocess.DEVNULL (variável interna): Constantes<7>.
                                                             (line   24)
* asyncio.subprocess.PIPE (variável interna): Constantes<7>. (line    6)
* asyncio.subprocess.Process (classe interna): Interagindo com subprocessos.
                                                             (line   11)
* asyncio.subprocess.STDOUT (variável interna): Constantes<7>.
                                                             (line   18)
* AsyncIterable (classe em collections.abc): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  173)
* AsyncIterable (classe em typing):      Apelidos para ABCs assíncronas em collections abc.
                                                             (line   40)
* AsyncIterator (classe em collections.abc): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  180)
* AsyncIterator (classe em typing):      Apelidos para ABCs assíncronas em collections abc.
                                                             (line   51)
* AsyncMock (classe em unittest.mock):   A classe Mock.      (line  706)
* AsyncResult (classe em multiprocessing.pool): Process Pools.
                                                             (line  198)
* asyncSetUp() (método unittest.IsolatedAsyncioTestCase): Casos de teste.
                                                             (line  891)
* asyncTearDown() (método unittest.IsolatedAsyncioTestCase): Casos de teste.
                                                             (line  900)
* AsyncWith (classe em ast):             Async e await.      (line   34)
* AT (no módulo token):                  token — Constantes usadas com árvores de análises do Python.
                                                             (line  306)
* at_eof() (método asyncio.StreamReader): StreamReader.      (line   86)
* atan() (no módulo cmath):              Funções trigonométricas<2>.
                                                             (line   17)
* atan() (no módulo math):               Funções trigonométricas.
                                                             (line   16)
* atan2() (no módulo math):              Funções trigonométricas.
                                                             (line   21)
* atanh() (no módulo cmath):             Funções hiperbólicas<2>.
                                                             (line   19)
* atanh() (no módulo math):              Funções hiperbólicas.
                                                             (line   17)
* ATEQUAL (no módulo token):             token — Constantes usadas com árvores de análises do Python.
                                                             (line  309)
* atexit (atributo weakref.finalize):    weakref — Referências fracas.
                                                             (line  330)
* athrow() (método agen):                Métodos geradores-iteradores assíncronos.
                                                             (line   42)
* atof() (no módulo locale):             locale — Serviços de internacionalização.
                                                             (line  525)
* atoi() (no módulo locale):             locale — Serviços de internacionalização.
                                                             (line  531)
* átomo:                                 Átomos.             (line    6)
* atribuição;expressão:                  Operações booleanas.
                                                             (line   38)
* atribuição;instrução:                  Sequências mutáveis.
                                                             (line    6)
* atribuição;instrução <1>:              Instruções de atribuição.
                                                             (line    6)
* atributo:                              A hierarquia de tipos padrão.
                                                             (line   14)
* atributo <1>:                          Glossário.          (line  154)
* atributo;atribuição:                   Instruções de atribuição.
                                                             (line    6)
* atributo;atribuição <1>:               Instruções de atribuição.
                                                             (line   78)
* atributo;exclusão:                     A instrução del<2>. (line   20)
* atributo;referência:                   Referências de atributo.
                                                             (line    6)
* attach_loop() (método asyncio.AbstractChildWatcher): Monitores de processos.
                                                             (line   63)
* attach_mock() (método unittest.mock.Mock): A classe Mock.  (line  259)
* attach() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  167)
* attempted (atributo doctest.TestResults): TestResults objects.
                                                             (line   12)
* AttlistDeclHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  296)
* attrgetter() (no módulo operator):     operator — Operadores padrões como funções.
                                                             (line  239)
* attrib (atributo xml.etree.ElementTree.Element): Element Objects.
                                                             (line   45)
* Attribute (classe em ast):             Expressões<2>.      (line  170)
* AttributeError:                        Exceções concretas. (line   12)
* attributes (atributo xml.dom.Node):    Objetos Node.       (line   26)
* AttributesImpl (classe em xml.sax.xmlreader): xml sax xmlreader — Interface for XML parsers.
                                                             (line   69)
* AttributesNSImpl (classe em xml.sax.xmlreader): xml sax xmlreader — Interface for XML parsers.
                                                             (line   80)
* attroff() (método curses.window):      Window Objects.     (line   55)
* attron() (método curses.window):       Window Objects.     (line   60)
* attrset() (método curses.window):      Window Objects.     (line   65)
* audit() (no módulo sys):               sys — Parâmetros e funções específicas do sistema.
                                                             (line   96)
* auditoria:                             sys — Parâmetros e funções específicas do sistema.
                                                             (line   98)
* AugAssign (classe em ast):             Instruções.         (line   94)
* AUGUST (no módulo calendar):           calendar — Funções gerais relacionadas ao calendário.
                                                             (line  507)
* aumentada;atribuição:                  Instruções de atribuição aumentada.
                                                             (line    6)
* auth() (método ftplib.FTP_TLS):        FTP_TLS objects.    (line   89)
* auth() (método smtplib.SMTP):          Objetos SMTP.       (line  141)
* authenticate() (método imaplib.IMAP4): Objetos IMAP4.      (line   37)
* AuthenticationError:                   Process e exceções. (line  279)
* authenticators() (método netrc.netrc): Objetos netrc.      (line    8)
* authkey (atributo multiprocessing.Process): Process e exceções.
                                                             (line  176)
* auto (classe em enum):                 Utilities and Decorators.
                                                             (line    6)
* autocommit (atributo sqlite3.Connection): Connection objects.
                                                             (line  732)
* autorange() (método timeit.Timer):     Interface em Python.
                                                             (line   99)
* available_timezones() (no módulo zoneinfo): Funções<3>.    (line    6)
* avaliação;ordem:                       Ordem de avaliação. (line    6)
* avisos:                                warnings — Controle de avisos.
                                                             (line    8)
* avoids_symlink_attacks (atributo shutil.rmtree): Operações de diretório e arquivos.
                                                             (line  350)
* Await (classe em ast):                 Async e await.      (line   14)
* await_args (atributo unittest.mock.AsyncMock): A classe Mock.
                                                             (line  921)
* await_args_list (atributo unittest.mock.AsyncMock): A classe Mock.
                                                             (line  939)
* await_count (atributo unittest.mock.AsyncMock): A classe Mock.
                                                             (line  905)
* await;em compreensões:                 Sintaxe de criação de listas conjuntos e dicionários.
                                                             (line   46)
* Awaitable (classe em collections.abc): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  132)
* Awaitable (classe em typing):          Apelidos para ABCs assíncronas em collections abc.
                                                             (line   62)
* b';literal de bytes:                   Literais de string e bytes.
                                                             (line   46)
* b";literal de bytes:                   Literais de string e bytes.
                                                             (line   46)
* b16decode() (no módulo base64):        RFC 4648 Encodings. (line  124)
* b16encode() (no módulo base64):        RFC 4648 Encodings. (line  119)
* b2a_base64() (no módulo binascii):     binascii — Converte entre binário e ASCII.
                                                             (line   64)
* b2a_hex() (no módulo binascii):        binascii — Converte entre binário e ASCII.
                                                             (line  117)
* b2a_qp() (no módulo binascii):         binascii — Converte entre binário e ASCII.
                                                             (line   80)
* b2a_uu() (no módulo binascii):         binascii — Converte entre binário e ASCII.
                                                             (line   32)
* b32decode() (no módulo base64):        RFC 4648 Encodings. (line   79)
* b32encode() (no módulo base64):        RFC 4648 Encodings. (line   74)
* b32hexdecode() (no módulo base64):     RFC 4648 Encodings. (line  107)
* b32hexencode() (no módulo base64):     RFC 4648 Encodings. (line  100)
* b64decode() (no módulo base64):        RFC 4648 Encodings. (line   25)
* b64encode() (no módulo base64):        RFC 4648 Encodings. (line   10)
* b85decode() (no módulo base64):        Base85 Encodings.   (line   84)
* b85encode() (no módulo base64):        Base85 Encodings.   (line   73)
* Babyl (classe em mailbox):             Babyl objects.      (line    6)
* BabylMessage (classe em mailbox):      BabylMessage objects.
                                                             (line    6)
* back() (no módulo turtle):             Movimentos de Turtle.
                                                             (line   24)
* backend (no módulo readline):          readline — Interface para o GNU readline.
                                                             (line   52)
* backslashreplace_errors() (no módulo codecs): Error Handlers.
                                                             (line  161)
* backslashreplace;error handler's name: Error Handlers.     (line   15)
* backup() (método sqlite3.Connection):  Connection objects. (line  530)
* backward() (no módulo turtle):         Movimentos de Turtle.
                                                             (line   24)
* BadGzipFile:                           gzip — Suporte para arquivos gzip.
                                                             (line   66)
* BadOptionError:                        Exceções<10>.       (line   21)
* BadStatusLine:                         http client — HTTP protocol client.
                                                             (line  178)
* BadZipFile:                            zipfile — Trabalha com arquivos ZIP.
                                                             (line   25)
* BadZipfile:                            zipfile — Trabalha com arquivos ZIP.
                                                             (line   31)
* bancos de dados:                       dbm dumb — Implementação portátil do DBM.
                                                             (line    8)
* Barrier (classe em asyncio):           Barrier.            (line    6)
* Barrier (classe em multiprocessing):   Primitivas de sincronização.
                                                             (line   13)
* Barrier (classe em threading):         Barrier objects.    (line   36)
* Barrier() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  162)
* base_exec_prefix (no módulo sys):      sys — Parâmetros e funções específicas do sistema.
                                                             (line  129)
* base_prefix (no módulo sys):           sys — Parâmetros e funções específicas do sistema.
                                                             (line  143)
* base64;codificação:                    base64 — Base16 Base32 Base64 Base85 Data Encodings.
                                                             (line    8)
* BaseCGIHandler (classe em wsgiref.handlers): wsgiref handlers – classes base de servidor/gateway.
                                                             (line   53)
* BaseCookie (classe em http.cookies):   http cookies — HTTP state management.
                                                             (line   39)
* BaseException:                         Classes base.       (line    9)
* BaseExceptionGroup:                    Grupos de exceções. (line   14)
* BaseHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  281)
* BaseHandler (classe em wsgiref.handlers): wsgiref handlers – classes base de servidor/gateway.
                                                             (line   89)
* BaseHeader (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line   37)
* BaseHTTPRequestHandler (classe em http.server): http server — HTTP servers.
                                                             (line   51)
* BaseManager (classe em multiprocessing.managers): Gerenciadores.
                                                             (line   24)
* basename() (no módulo os.path):        os path — Manipulações comuns de nomes de caminhos.
                                                             (line   66)
* BaseProtocol (classe em asyncio):      Protocolos de Base. (line    6)
* BaseProxy (classe em multiprocessing.managers): Objetos proxies.
                                                             (line   94)
* BaseRequestHandler (classe em socketserver): Objetos manipulador de requisições.
                                                             (line    6)
* BaseRotatingHandler (classe em logging.handlers): BaseRotatingHandler.
                                                             (line   13)
* BaseSelector (classe em selectors):    Classes<4>.         (line   53)
* BaseServer (classe em socketserver):   Objetos Server<2>.  (line    6)
* BaseTransport (classe em asyncio):     Transports Hierarchy.
                                                             (line    6)
* basicConfig() (no módulo logging):     Funções de nível de módulo.
                                                             (line  204)
* BasicContext (no módulo decimal):      Objetos de contexto.
                                                             (line   65)
* BasicInterpolation (classe em configparser): Interpolação de valores.
                                                             (line   10)
* batched() (no módulo itertools):       Funções do intertools.
                                                             (line   70)
* baudrate() (no módulo curses):         Funções<6>.         (line   18)
* bbox() (método tkinter.ttk.Treeview):  ttk Treeview.       (line    8)
* BDADDR_ANY (no módulo socket):         Constantes<8>.      (line  298)
* BDADDR_LOCAL (no módulo socket):       Constantes<8>.      (line  298)
* Bdb (classe em bdb):                   bdb — Framework do depurador.
                                                             (line  132)
* BdbQuit:                               bdb — Framework do depurador.
                                                             (line   16)
* BDFL:                                  Glossário.          (line  173)
* beep() (no módulo curses):             Funções<6>.         (line   26)
* Beep() (no módulo winsound):           winsound — Interface de reprodução de som para o Windows.
                                                             (line   14)
* BEFORE_ASYNC_WITH (opcode):            Instruções em bytecode do Python.
                                                             (line  367)
* BEFORE_WITH (opcode):                  Instruções em bytecode do Python.
                                                             (line  523)
* begin_fill() (no módulo turtle):       Preenchimento.      (line   17)
* begin_poly() (no módulo turtle):       Métodos Especiais da Tartaruga.
                                                             (line    6)
* BEL (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   41)
* BELOW_NORMAL_PRIORITY_CLASS (no módulo subprocess): Constantes do Windows.
                                                             (line   75)
* below() (método curses.panel.Panel):   Objetos painel.     (line   17)
* benchmarking:                          Funções<5>.         (line  223)
* benchmarking <1>:                      Funções<5>.         (line  254)
* benchmarking <2>:                      Funções<5>.         (line  635)
* Benchmarking:                          timeit — Mede o tempo de execução de pequenos trechos de código.
                                                             (line    8)
* betavariate() (no módulo random):      Distribuições com valor real.
                                                             (line   34)
* bgcolor() (no módulo turtle):          Controle da Janela. (line    6)
* bgpic() (no módulo turtle):            Controle da Janela. (line   48)
* biblioteca padrão:                     Glossário.          (line 1635)
* bidirectional() (no módulo unicodedata): unicodedata — Banco de dados de Unicode.
                                                             (line   90)
* bigaddrspacetest() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  582)
* BigEndianStructure (classe em ctypes): Tipos de dados estruturados.
                                                             (line   22)
* BigEndianUnion (classe em ctypes):     Tipos de dados estruturados.
                                                             (line   10)
* bigmemtest() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  566)
* binário;aritmética;operação:           Operações binárias aritméticas.
                                                             (line    6)
* binário;bit a bit;operação:            Operações binárias bit a bit.
                                                             (line    6)
* binário;literais:                      Tipos numéricos — int float complex.
                                                             (line   20)
* binários, semáforos:                   _thread— API de segmentação de baixo nível.
                                                             (line    6)
* Binary (classe em xmlrpc.client):      Objetos Binários.   (line    6)
* BINARY_OP (opcode):                    Instruções em bytecode do Python.
                                                             (line  248)
* BINARY_SLICE (opcode):                 Instruções em bytecode do Python.
                                                             (line  284)
* BINARY_SUBSCR (opcode):                Instruções em bytecode do Python.
                                                             (line  259)
* binaryfunc (C type):                   Slot Type typedefs. (line  110)
* BinaryIO (classe em typing):           ABCs para trabalhar com E/S.
                                                             (line    6)
* bind_partial() (método inspect.Signature): Introspecting callables with the Signature object.
                                                             (line  129)
* bind_port() (no módulo test.support.socket_helper): test support socket_helper — Utilities for socket tests.
                                                             (line   37)
* bind_textdomain_codeset() (no módulo locale): Acesso a catálogos de mensagens.
                                                             (line   16)
* bind_unix_socket() (no módulo test.support.socket_helper): test support socket_helper — Utilities for socket tests.
                                                             (line   54)
* bind() (método inspect.Signature):     Introspecting callables with the Signature object.
                                                             (line  122)
* bind() (método socket.socket):         Socket Objects.     (line   30)
* bindtextdomain() (no módulo gettext):  API do GNU gettext. (line   14)
* bindtextdomain() (no módulo locale):   Acesso a catálogos de mensagens.
                                                             (line   14)
* binomialvariate() (no módulo random):  Distribuições discretas.
                                                             (line    8)
* BinOp (classe em ast):                 Expressões<2>.      (line   42)
* bisect_left() (no módulo bisect):      bisect — Algoritmo de bisseção de vetor.
                                                             (line   34)
* bisect_right() (no módulo bisect):     bisect — Algoritmo de bisseção de vetor.
                                                             (line   59)
* bisect() (no módulo bisect):           bisect — Algoritmo de bisseção de vetor.
                                                             (line   59)
* bit a bit;and:                         Operações binárias bit a bit.
                                                             (line   13)
* bit a bit;operações:                   Operações de bits em tipos inteiros.
                                                             (line    6)
* bit a bit;or:                          Operações binárias bit a bit.
                                                             (line   22)
* bit a bit;xor:                         Operações binárias bit a bit.
                                                             (line   17)
* bit_count() (método int):              Métodos adicionais em tipos inteiros.
                                                             (line   36)
* bit_length() (método int):             Métodos adicionais em tipos inteiros.
                                                             (line    9)
* BitAnd (classe em ast):                Expressões<2>.      (line   54)
* BitOr (classe em ast):                 Expressões<2>.      (line   54)
* bits_per_digit (atributo sys.int_info): sys — Parâmetros e funções específicas do sistema.
                                                             (line 1205)
* BitXor (classe em ast):                Expressões<2>.      (line   54)
* bk() (no módulo turtle):               Movimentos de Turtle.
                                                             (line   24)
* bkgd() (método curses.window):         Window Objects.     (line   70)
* bkgdset() (método curses.window):      Window Objects.     (line   82)
* blake2b, blake2s:                      BLAKE2.             (line    6)
* blake2b.MAX_DIGEST_SIZE (no módulo hashlib): Constantes<5>.
                                                             (line   24)
* blake2b.MAX_KEY_SIZE (no módulo hashlib): Constantes<5>.   (line   18)
* blake2b.PERSON_SIZE (no módulo hashlib): Constantes<5>.    (line   12)
* blake2b.SALT_SIZE (no módulo hashlib): Constantes<5>.      (line    6)
* blake2b() (no módulo hashlib):         Criando objetos hash.
                                                             (line    8)
* blake2s.MAX_DIGEST_SIZE (no módulo hashlib): Constantes<5>.
                                                             (line   26)
* blake2s.MAX_KEY_SIZE (no módulo hashlib): Constantes<5>.   (line   20)
* blake2s.PERSON_SIZE (no módulo hashlib): Constantes<5>.    (line   14)
* blake2s.SALT_SIZE (no módulo hashlib): Constantes<5>.      (line    8)
* blake2s() (no módulo hashlib):         Criando objetos hash.
                                                             (line   13)
* BLKTYPE (no módulo tarfile):           tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  311)
* Blob (classe em sqlite3):              Blob objects.       (line    6)
* blobopen() (método sqlite3.Connection): Connection objects.
                                                             (line   34)
* block_on_close (atributo socketserver.ThreadingMixIn): Notas sobre criação do servidor.
                                                             (line   45)
* block_size (atributo hmac.HMAC):       hmac — Código de autenticação de mensagem com chave hash.
                                                             (line   99)
* blocked_domains() (método http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line   52)
* BlockingIOError:                       Exceções de sistema operacional.
                                                             (line    9)
* BlockingIOError <1>:                   Interface de alto nível do módulo.
                                                             (line   68)
* blocksize (atributo http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line  163)
* bloco:                                 Estrutura de um programa.
                                                             (line    6)
* bloco de case:                         Blocos irrefutáveis de case.
                                                             (line    6)
* bloco irrefutável de case:             Blocos irrefutáveis de case.
                                                             (line    6)
* BNF:                                   Notação.            (line    6)
* BNF <1>:                               Expressões.         (line    6)
* body_encode() (método email.charset.Charset): email charset Representando conjuntos de caracteres.
                                                             (line  142)
* body_encoding (atributo email.charset.Charset): email charset Representando conjuntos de caracteres.
                                                             (line   72)
* body_line_iterator() (no módulo email.iterators): email iterators Iteradores.
                                                             (line   15)
* body() (método tkinter.simpledialog.Dialog): tkinter simpledialog — Diálogos de entrada padrão do Tkinter.
                                                             (line   25)
* BOLD (no módulo tkinter.font):         tkinter font — Invólucro de fontes Tkinter.
                                                             (line   15)
* BOM (no módulo codecs):                codecs — Codec registry and base classes.
                                                             (line  272)
* BOM_BE (no módulo codecs):             codecs — Codec registry and base classes.
                                                             (line  272)
* BOM_LE (no módulo codecs):             codecs — Codec registry and base classes.
                                                             (line  272)
* BOM_UTF16 (no módulo codecs):          codecs — Codec registry and base classes.
                                                             (line  272)
* BOM_UTF16_BE (no módulo codecs):       codecs — Codec registry and base classes.
                                                             (line  272)
* BOM_UTF16_LE (no módulo codecs):       codecs — Codec registry and base classes.
                                                             (line  272)
* BOM_UTF32 (no módulo codecs):          codecs — Codec registry and base classes.
                                                             (line  272)
* BOM_UTF32_BE (no módulo codecs):       codecs — Codec registry and base classes.
                                                             (line  272)
* BOM_UTF32_LE (no módulo codecs):       codecs — Codec registry and base classes.
                                                             (line  272)
* BOM_UTF8 (no módulo codecs):           codecs — Codec registry and base classes.
                                                             (line  272)
* bool (classe interna):                 Funções embutidas<3>.
                                                             (line  133)
* BOOLEAN_STATES (atributo configparser.ConfigParser): Personalizando o comportamento do analisador sintático.
                                                             (line  259)
* Booleano;operação:                     Operações booleanas.
                                                             (line    6)
* Booleano;operações:                    Teste do valor verdade.
                                                             (line    6)
* Booleano;operações <1>:                Operações booleanas — and or not.
                                                             (line    6)
* Booleano;tipo:                         Funções embutidas<3>.
                                                             (line  144)
* Booleano;valores:                      Tipo booleano - bool.
                                                             (line    9)
* BooleanOptionalAction (classe em argparse): Classes de ação.
                                                             (line   64)
* BoolOp (classe em ast):                Expressões<2>.      (line   70)
* bootstrap() (no módulo ensurepip):     API do módulo.      (line   13)
* border() (método curses.window):       Window Objects.     (line   93)
* bottom_panel() (no módulo curses.panel): Funções<7>.       (line    8)
* bottom() (método curses.panel.Panel):  Objetos painel.     (line   21)
* BoundArguments (classe em inspect):    Introspecting callables with the Signature object.
                                                             (line  329)
* BoundaryError:                         email errors Classes de Exceção e Defeito.
                                                             (line   38)
* BoundedSemaphore (classe em asyncio):  BoundedSemaphore.   (line    6)
* BoundedSemaphore (classe em multiprocessing): Primitivas de sincronização.
                                                             (line   22)
* BoundedSemaphore (classe em threading): Semaphore objects. (line   73)
* BoundedSemaphore() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  169)
* box() (método curses.window):          Window Objects.     (line  132)
* bpbynumber (atributo bdb.Breakpoint):  bdb — Framework do depurador.
                                                             (line  113)
* bpformat() (método bdb.Breakpoint):    bdb — Framework do depurador.
                                                             (line   59)
* bplist (atributo bdb.Breakpoint):      bdb — Framework do depurador.
                                                             (line  118)
* bpprint() (método bdb.Breakpoint):     bdb — Framework do depurador.
                                                             (line   78)
* BRANCH (monitoring event):             Eventos.            (line    8)
* Break (classe em ast):                 Fluxo de controle.  (line   99)
* break (pdb command):                   Comandos de depuração.
                                                             (line  103)
* break_anywhere() (método bdb.Bdb):     bdb — Framework do depurador.
                                                             (line  269)
* break_here() (método bdb.Bdb):         bdb — Framework do depurador.
                                                             (line  260)
* break_long_words (atributo textwrap.TextWrapper): textwrap — Quebra automática e preenchimento de texto.
                                                             (line  258)
* break_on_hyphens (atributo textwrap.TextWrapper): textwrap — Quebra automática e preenchimento de texto.
                                                             (line  268)
* Breakpoint (classe em bdb):            bdb — Framework do depurador.
                                                             (line   23)
* breakpointhook() (no módulo sys):      sys — Parâmetros e funções específicas do sistema.
                                                             (line  252)
* breakpoints:                           Help menu Shell and Editor.
                                                             (line   29)
* broadcast_address (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   95)
* broadcast_address (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  318)
* broken (atributo asyncio.Barrier):     Barrier.            (line  103)
* broken (atributo threading.Barrier):   Barrier objects.    (line  101)
* BrokenBarrierError:                    Barrier objects.    (line  106)
* BrokenBarrierError <1>:                Barrier.            (line  108)
* BrokenExecutor:                        Exception classes.  (line   18)
* BrokenPipeError:                       Exceções de sistema operacional.
                                                             (line   38)
* BrokenProcessPool:                     Exception classes.  (line   41)
* BrokenThreadPool:                      Exception classes.  (line   33)
* BROWSER:                               webbrowser — Controlador de navegador web conveniente.
                                                             (line   21)
* BROWSER <1>:                           webbrowser — Controlador de navegador web conveniente.
                                                             (line   36)
* BROWSER <2>:                           Interface de linha de comando<6>.
                                                             (line   90)
* BS (no módulo curses.ascii):           curses ascii — Utilitários para caracteres ASCII.
                                                             (line   44)
* BsdDbShelf (classe em shelve):         Restrições.         (line   61)
* buf (atributo multiprocessing.shared_memory.SharedMemory): multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line  127)
* buffer (atributo io.TextIOBase):       E/S de texto<2>.    (line   30)
* buffer (atributo unittest.TestResult): Carregando e executando testes.
                                                             (line  295)
* Buffer (classe em collections.abc):    Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  197)
* buffer_info() (método array.array):    array— Vetores eficientes de valores numéricos.
                                                             (line  127)
* buffer_size (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  170)
* buffer_text (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  177)
* buffer_updated() (método asyncio.BufferedProtocol): Protocolos de Streaming Bufferizados.
                                                             (line   33)
* buffer_used (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  188)
* buffer, tamanho, E/S:                  Funções embutidas<3>.
                                                             (line 1522)
* BufferedIOBase (classe em io):         I/O Base Classes.   (line  224)
* BufferedProtocol (classe em asyncio):  Protocolos de Base. (line   15)
* BufferedRandom (classe em io):         Buffered Streams.   (line  136)
* BufferedReader (classe em io):         Buffered Streams.   (line   56)
* BufferedRWPair (classe em io):         Buffered Streams.   (line  151)
* BufferedWriter (classe em io):         Buffered Streams.   (line   94)
* BufferError:                           Classes base.       (line   80)
* BufferFlags (classe em inspect):       Buffer flags.       (line    6)
* BufferingFormatter (classe em logging): Formatter Objects. (line  131)
* BufferingHandler (classe em logging.handlers): MemoryHandler.
                                                             (line   19)
* BufferTooShort:                        Process e exceções. (line  271)
* BUILD_CONST_KEY_MAP (opcode):          Instruções em bytecode do Python.
                                                             (line  707)
* BUILD_LIST (opcode):                   Instruções em bytecode do Python.
                                                             (line  689)
* BUILD_MAP (opcode):                    Instruções em bytecode do Python.
                                                             (line  697)
* build_opener() (no módulo urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  123)
* BUILD_SET (opcode):                    Instruções em bytecode do Python.
                                                             (line  693)
* BUILD_SLICE (opcode):                  Instruções em bytecode do Python.
                                                             (line 1156)
* BUILD_STRING (opcode):                 Instruções em bytecode do Python.
                                                             (line  716)
* BUILD_TUPLE (opcode):                  Instruções em bytecode do Python.
                                                             (line  676)
* built-in function; __import__():       Funções embutidas<3>.
                                                             (line 2251)
* built-in function; abs():              Funções embutidas<3>.
                                                             (line   44)
* built-in function; aiter():            Funções embutidas<3>.
                                                             (line   51)
* built-in function; all():              Funções embutidas<3>.
                                                             (line   61)
* built-in function; anext():            Funções embutidas<3>.
                                                             (line   72)
* built-in function; any():              Funções embutidas<3>.
                                                             (line   91)
* built-in function; ascii():            Funções embutidas<3>.
                                                             (line  102)
* built-in function; bin():              Funções embutidas<3>.
                                                             (line  110)
* built-in function; breakpoint():       Funções embutidas<3>.
                                                             (line  146)
* built-in function; callable():         Funções embutidas<3>.
                                                             (line  226)
* built-in function; chr():              Funções embutidas<3>.
                                                             (line  238)
* built-in function; classmethod():      Funções embutidas<3>.
                                                             (line  249)
* built-in function; compile():          Funções embutidas<3>.
                                                             (line  287)
* built-in function; delattr():          Funções embutidas<3>.
                                                             (line  445)
* built-in function; dir():              Funções embutidas<3>.
                                                             (line  468)
* built-in function; divmod():           Funções embutidas<3>.
                                                             (line  529)
* built-in function; enumerate():        Funções embutidas<3>.
                                                             (line  542)
* built-in function; eval():             Funções embutidas<3>.
                                                             (line  565)
* built-in function; exec():             Funções embutidas<3>.
                                                             (line  643)
* built-in function; filter():           Funções embutidas<3>.
                                                             (line  716)
* built-in function; format():           Funções embutidas<3>.
                                                             (line  801)
* built-in function; getattr():          Funções embutidas<3>.
                                                             (line  834)
* built-in function; globals():          Funções embutidas<3>.
                                                             (line  851)
* built-in function; hasattr():          Funções embutidas<3>.
                                                             (line  858)
* built-in function; hash():             Funções embutidas<3>.
                                                             (line  865)
* built-in function; help():             Funções embutidas<3>.
                                                             (line  879)
* built-in function; hex():              Funções embutidas<3>.
                                                             (line  905)
* built-in function; id():               Funções embutidas<3>.
                                                             (line  936)
* built-in function; input():            Funções embutidas<3>.
                                                             (line  948)
* built-in function; isinstance():       Funções embutidas<3>.
                                                             (line 1053)
* built-in function; issubclass():       Funções embutidas<3>.
                                                             (line 1069)
* built-in function; iter():             Funções embutidas<3>.
                                                             (line 1082)
* built-in function; len():              Funções embutidas<3>.
                                                             (line 1113)
* built-in function; locals():           Funções embutidas<3>.
                                                             (line 1129)
* built-in function; map():              Funções embutidas<3>.
                                                             (line 1185)
* built-in function; max():              Funções embutidas<3>.
                                                             (line 1196)
* built-in function; min():              Funções embutidas<3>.
                                                             (line 1234)
* built-in function; multiprocessing.Manager(): Gerenciadores.
                                                             (line   12)
* built-in function; next():             Funções embutidas<3>.
                                                             (line 1266)
* built-in function; oct():              Funções embutidas<3>.
                                                             (line 1286)
* built-in function; open():             Funções embutidas<3>.
                                                             (line 1312)
* built-in function; ord():              Funções embutidas<3>.
                                                             (line 1570)
* built-in function; pow():              Funções embutidas<3>.
                                                             (line 1583)
* built-in function; print():            Funções embutidas<3>.
                                                             (line 1628)
* built-in function; property.deleter(): Funções embutidas<3>.
                                                             (line 1707)
* built-in function; property.getter():  Funções embutidas<3>.
                                                             (line 1703)
* built-in function; property.setter():  Funções embutidas<3>.
                                                             (line 1705)
* built-in function; repr():             Funções embutidas<3>.
                                                             (line 1757)
* built-in function; reversed():         Funções embutidas<3>.
                                                             (line 1775)
* built-in function; round():            Funções embutidas<3>.
                                                             (line 1783)
* built-in function; setattr():          Funções embutidas<3>.
                                                             (line 1821)
* built-in function; sorted():           Funções embutidas<3>.
                                                             (line 1871)
* built-in function; staticmethod():     Funções embutidas<3>.
                                                             (line 1909)
* built-in function; sum():              Funções embutidas<3>.
                                                             (line 1969)
* built-in function; vars():             Funções embutidas<3>.
                                                             (line 2128)
* built-in function; zip():              Funções embutidas<3>.
                                                             (line 2152)
* builtin_module_names (no módulo sys):  sys — Parâmetros e funções específicas do sistema.
                                                             (line  164)
* BuiltinFunctionType (no módulo types): Tipos padrão do interpretador.
                                                             (line   83)
* BuiltinImporter (classe em importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line   68)
* BuiltinMethodType (no módulo types):   Tipos padrão do interpretador.
                                                             (line   83)
* busy_retry() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  206)
* BUTTON_ALT (no módulo curses):         Constantes<6>.      (line  627)
* BUTTON_CTRL (no módulo curses):        Constantes<6>.      (line  624)
* BUTTON_SHIFT (no módulo curses):       Constantes<6>.      (line  621)
* buttonbox() (método tkinter.simpledialog.Dialog): tkinter simpledialog — Diálogos de entrada padrão do Tkinter.
                                                             (line   30)
* BUTTONn_CLICKED (no módulo curses):    Constantes<6>.      (line  612)
* BUTTONn_DOUBLE_CLICKED (no módulo curses): Constantes<6>.  (line  615)
* BUTTONn_PRESSED (no módulo curses):    Constantes<6>.      (line  606)
* BUTTONn_RELEASED (no módulo curses):   Constantes<6>.      (line  609)
* BUTTONn_TRIPLE_CLICKED (no módulo curses): Constantes<6>.  (line  618)
* bye() (no módulo turtle):              Métodos específico do Screen estes métodos não são herdados do TurtleScreen.
                                                             (line    6)
* byref() (no módulo ctypes):            Funções utilitárias.
                                                             (line   19)
* byte:                                  Sequências imutáveis.
                                                             (line   42)
* bytearray:                             Sequências mutáveis.
                                                             (line   25)
* bytearray (classe interna):            Objetos Bytearray.  (line    9)
* bytearray;formatação:                  Estilo de Formatação de bytes printf-style.
                                                             (line    6)
* bytearray;interpolação:                Estilo de Formatação de bytes printf-style.
                                                             (line    6)
* bytearray;métodos:                     Operações com Bytes e Bytearray.
                                                             (line    6)
* bytecode:                              Objetos código.     (line    6)
* bytecode <1>:                          Glossário.          (line  226)
* Bytecode (classe em dis):              Análise de bytecode.
                                                             (line   12)
* BYTECODE_SUFFIXES (no módulo importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line   40)
* Bytecode.codeobj (no módulo dis):      Análise de bytecode.
                                                             (line   53)
* Bytecode.first_line (no módulo dis):   Análise de bytecode.
                                                             (line   57)
* BytecodeTestCase (classe em test.support.bytecode_helper): test support bytecode_helper — Ferramentas de suporte para testar a geração correta de bytecode.
                                                             (line   13)
* byteorder (no módulo sys):             sys — Parâmetros e funções específicas do sistema.
                                                             (line  157)
* bytes:                                 Sequências imutáveis.
                                                             (line   42)
* bytes (atributo uuid.UUID):            uuid — Objetos UUID conforme RFC 4122.
                                                             (line   88)
* bytes (classe interna):                Objetos bytes.      (line   12)
* bytes_le (atributo uuid.UUID):         uuid — Objetos UUID conforme RFC 4122.
                                                             (line   93)
* bytes_warning (atributo sys.flags):    sys — Parâmetros e funções específicas do sistema.
                                                             (line  583)
* bytes;formatação:                      Estilo de Formatação de bytes printf-style.
                                                             (line    6)
* bytes;interpolação:                    Estilo de Formatação de bytes printf-style.
                                                             (line    6)
* bytes;métodos:                         Operações com Bytes e Bytearray.
                                                             (line    6)
* bytes;str (classe embutida):           Tipo sequência de texto — str.
                                                             (line   66)
* BytesFeedParser (classe em email.parser): API do FeedParser.
                                                             (line   28)
* BytesGenerator (classe em email.generator): email generator Geração de documentos MIME.
                                                             (line   43)
* BytesHeaderParser (classe em email.parser): Parser API.    (line   68)
* BytesIO (classe em io):                Buffered Streams.   (line    9)
* BytesParser (classe em email.parser):  Parser API.         (line   18)
* ByteString (classe em collections.abc): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line   67)
* ByteString (classe em typing):         Apelidos de contêineres ABC em collections abc.
                                                             (line   14)
* byteswap() (método array.array):       array— Vetores eficientes de valores numéricos.
                                                             (line  148)
* BytesWarning:                          Avisos.             (line   79)
* BZ2Compressor (classe em bz2):         Des compressão incremental.
                                                             (line    6)
* BZ2Decompressor (classe em bz2):       Des compressão incremental.
                                                             (line   33)
* BZ2File (classe em bz2):               Des compressão de arquivos.
                                                             (line   43)
* C:                                     Literais de string e bytes.
                                                             (line   75)
* c_bool (classe em ctypes):             Tipos de dados fundamentais<2>.
                                                             (line  207)
* c_byte (classe em ctypes):             Tipos de dados fundamentais<2>.
                                                             (line   45)
* c_char (classe em ctypes):             Tipos de dados fundamentais<2>.
                                                             (line   51)
* c_char_p (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line   58)
* C_CONTIGUOUS (atributo inspect.BufferFlags): Buffer flags. (line   25)
* c_contiguous (atributo memoryview):    Memory Views.       (line  484)
* c_double (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line   65)
* c_float (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line   76)
* c_int (classe em ctypes):              Tipos de dados fundamentais<2>.
                                                             (line   81)
* c_int16 (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line   93)
* c_int32 (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line   98)
* c_int64 (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line  103)
* c_int8 (classe em ctypes):             Tipos de dados fundamentais<2>.
                                                             (line   88)
* c_long (classe em ctypes):             Tipos de dados fundamentais<2>.
                                                             (line  108)
* c_longdouble (classe em ctypes):       Tipos de dados fundamentais<2>.
                                                             (line   70)
* c_longlong (classe em ctypes):         Tipos de dados fundamentais<2>.
                                                             (line  113)
* C_RAISE (monitoring event):            Eventos.            (line   16)
* C_RETURN (monitoring event):           Eventos.            (line   21)
* c_short (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line  119)
* c_size_t (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line  124)
* c_ssize_t (classe em ctypes):          Tipos de dados fundamentais<2>.
                                                             (line  128)
* c_time_t (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line  134)
* c_ubyte (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line  140)
* c_uint (classe em ctypes):             Tipos de dados fundamentais<2>.
                                                             (line  146)
* c_uint16 (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line  158)
* c_uint32 (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line  163)
* c_uint64 (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line  168)
* c_uint8 (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line  153)
* c_ulong (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line  173)
* c_ulonglong (classe em ctypes):        Tipos de dados fundamentais<2>.
                                                             (line  178)
* c_ushort (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line  184)
* c_void_p (classe em ctypes):           Tipos de dados fundamentais<2>.
                                                             (line  189)
* c_wchar (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line  194)
* c_wchar_p (classe em ctypes):          Tipos de dados fundamentais<2>.
                                                             (line  201)
* C;linguagem:                           A hierarquia de tipos padrão.
                                                             (line    6)
* C;linguagem <1>:                       numbers Real float. (line    6)
* C;linguagem <2>:                       Funções embutidas<2>.
                                                             (line    6)
* C;linguagem <3>:                       Comparações.        (line    6)
* C;linguagem <4>:                       Tipos numéricos — int float complex.
                                                             (line    6)
* C;structures:                          struct — Interpreta bytes como dados binários empacotados.
                                                             (line    8)
* C14NWriterTarget (classe em xml.etree.ElementTree): TreeBuilder Objects.
                                                             (line   94)
* CACHE (opcode):                        Instruções em bytecode do Python.
                                                             (line  181)
* cache_clear() (método functools.lru_cache): functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line  209)
* cache_from_source() (no módulo importlib.util): importlib util – Utility code for importers.
                                                             (line   21)
* cache_info() (método functools.lru_cache): functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line  204)
* cache() (no módulo functools):         functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line   17)
* cached (atributo importlib.machinery.ModuleSpec): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  433)
* cached_property() (no módulo functools): functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line   52)
* CacheFTPHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  439)
* calcobjsize() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  450)
* calcsize() (no módulo struct):         Funções e exceções. (line   55)
* calcvobjsize() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  456)
* Calendar (classe em calendar):         calendar — Funções gerais relacionadas ao calendário.
                                                             (line   29)
* calendar opção de linha de comando; -c: Uso na linha de comando.
                                                             (line   80)
* calendar opção de linha de comando; -css: Uso na linha de comando.
                                                             (line   80)
* calendar opção de linha de comando; -e: Uso na linha de comando.
                                                             (line   28)
* calendar opção de linha de comando; -encoding: Uso na linha de comando.
                                                             (line   28)
* calendar opção de linha de comando; -f: Uso na linha de comando.
                                                             (line   38)
* calendar opção de linha de comando; -first-weekday: Uso na linha de comando.
                                                             (line   38)
* calendar opção de linha de comando; -h: Uso na linha de comando.
                                                             (line   19)
* calendar opção de linha de comando; -help: Uso na linha de comando.
                                                             (line   19)
* calendar opção de linha de comando; -L: Uso na linha de comando.
                                                             (line   23)
* calendar opção de linha de comando; -l: Uso na linha de comando.
                                                             (line   63)
* calendar opção de linha de comando; -lines: Uso na linha de comando.
                                                             (line   63)
* calendar opção de linha de comando; -locale: Uso na linha de comando.
                                                             (line   23)
* calendar opção de linha de comando; -m: Uso na linha de comando.
                                                             (line   74)
* calendar opção de linha de comando; -months: Uso na linha de comando.
                                                             (line   74)
* calendar opção de linha de comando; -s: Uso na linha de comando.
                                                             (line   69)
* calendar opção de linha de comando; -spacing: Uso na linha de comando.
                                                             (line   69)
* calendar opção de linha de comando; -t: Uso na linha de comando.
                                                             (line   33)
* calendar opção de linha de comando; -type: Uso na linha de comando.
                                                             (line   33)
* calendar opção de linha de comando; -w: Uso na linha de comando.
                                                             (line   57)
* calendar opção de linha de comando; -width: Uso na linha de comando.
                                                             (line   57)
* calendar opção de linha de comando; month: Uso na linha de comando.
                                                             (line   49)
* calendar opção de linha de comando; year: Uso na linha de comando.
                                                             (line   45)
* calendar() (no módulo calendar):       calendar — Funções gerais relacionadas ao calendário.
                                                             (line  430)
* Call (classe em ast):                  Expressões<2>.      (line  122)
* CALL (monitoring event):               Eventos.            (line   12)
* CALL (opcode):                         Instruções em bytecode do Python.
                                                             (line 1050)
* call_args (atributo unittest.mock.Mock): A classe Mock.    (line  441)
* call_args_list (atributo unittest.mock.Mock): A classe Mock.
                                                             (line  486)
* call_at() (método asyncio.loop):       Agendando funções de retorno atrasadas.
                                                             (line   43)
* call_count (atributo unittest.mock.Mock): A classe Mock.   (line  332)
* call_exception_handler() (método asyncio.loop): Tratando erros da API.
                                                             (line   48)
* CALL_FUNCTION_EX (opcode):             Instruções em bytecode do Python.
                                                             (line 1102)
* CALL_INTRINSIC_1 (opcode):             Instruções em bytecode do Python.
                                                             (line 1307)
* CALL_INTRINSIC_2 (opcode):             Instruções em bytecode do Python.
                                                             (line 1367)
* CALL_KW (opcode):                      Instruções em bytecode do Python.
                                                             (line 1075)
* call_later() (método asyncio.loop):    Agendando funções de retorno atrasadas.
                                                             (line   10)
* call_list() (método unittest.mock.call): chamada.          (line   20)
* call_soon_threadsafe() (método asyncio.loop): Agendando funções de retorno.
                                                             (line   25)
* call_soon() (método asyncio.loop):     Agendando funções de retorno.
                                                             (line    6)
* call_tracing() (no módulo sys):        sys — Parâmetros e funções específicas do sistema.
                                                             (line  173)
* call() (no módulo operator):           operator — Operadores padrões como funções.
                                                             (line  226)
* call() (no módulo subprocess):         API de alto nível mais antiga.
                                                             (line   10)
* call() (no módulo unittest.mock):      chamada.            (line    6)
* Callable (classe em collections.abc):  Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line   18)
* Callable (no módulo typing):           Apelidos para outros ABCs em collections abc.
                                                             (line   22)
* CallableProxyType (no módulo weakref): weakref — Referências fracas.
                                                             (line  353)
* callback (atributo optparse.Option):   Atributos da classe Option.
                                                             (line   69)
* callback_args (atributo optparse.Option): Atributos da classe Option.
                                                             (line   76)
* callback_kwargs (atributo optparse.Option): Atributos da classe Option.
                                                             (line   76)
* callback() (método contextlib.ExitStack): Utilitários.     (line  587)
* callbacks (no módulo gc):              gc — Interface para o coletor de lixo.
                                                             (line  263)
* called (atributo unittest.mock.Mock):  A classe Mock.      (line  320)
* CalledProcessError:                    Usando o módulo subprocess.
                                                             (line  213)
* calloc (C function):                   Visão Geral<4>.     (line   36)
* caminho de importação:                 Glossário.          (line  856)
* caminho;configuração;arquivo:          site — Gancho de configuração específico do site.
                                                             (line   78)
* caminho;operações:                     pathlib — Caminhos do sistema de arquivos orientados a objetos.
                                                             (line   10)
* caminho;operações <1>:                 os path — Manipulações comuns de nomes de caminhos.
                                                             (line    9)
* caminhos UNC;e os.makedirs():          Arquivos e diretórios.
                                                             (line  571)
* CAN (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line  102)
* CAN_BCM (no módulo socket):            Constantes<8>.      (line  145)
* can_change_color() (no módulo curses): Funções<6>.         (line   30)
* can_fetch() (método urllib.robotparser.RobotFileParser): urllib robotparser — Analisador sintático de robots txt.
                                                             (line   34)
* CAN_ISOTP (no módulo socket):          Constantes<8>.      (line  184)
* CAN_J1939 (no módulo socket):          Constantes<8>.      (line  193)
* CAN_RAW_FD_FRAMES (no módulo socket):  Constantes<8>.      (line  160)
* CAN_RAW_JOIN_FILTERS (no módulo socket): Constantes<8>.    (line  173)
* can_symlink() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   75)
* can_write_eof() (método asyncio.StreamWriter): StreamWriter.
                                                             (line   51)
* can_write_eof() (método asyncio.WriteTransport): Write-only Transports.
                                                             (line   14)
* can_xattr() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   79)
* CANCEL (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  157)
* cancel_command() (método tkinter.filedialog.FileDialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line   84)
* cancel_dump_traceback_later() (no módulo faulthandler): Dumping the tracebacks after a timeout.
                                                             (line   29)
* cancel_join_thread() (método multiprocessing.Queue): Encadeamentos e filas.
                                                             (line  209)
* cancel() (método asyncio.Future):      Objeto Future.      (line  115)
* cancel() (método asyncio.Handle):      Tratadores de função de retorno.
                                                             (line   18)
* cancel() (método asyncio.Task):        Objeto Task.        (line  207)
* cancel() (método concurrent.futures.Future): Future Objects.
                                                             (line   16)
* cancel() (método sched.scheduler):     Objetos Scheduler.  (line   41)
* cancel() (método threading.Timer):     Timer objects.      (line   35)
* cancel() (método tkinter.dnd.DndHandler): tkinter dnd — Suporte para arrastar e soltar.
                                                             (line   51)
* cancelled() (método asyncio.Future):   Objeto Future.      (line   73)
* cancelled() (método asyncio.Handle):   Tratadores de função de retorno.
                                                             (line   23)
* cancelled() (método asyncio.Task):     Objeto Task.        (line  239)
* cancelled() (método concurrent.futures.Future): Future Objects.
                                                             (line   23)
* CancelledError:                        Exception classes.  (line    6)
* CancelledError <1>:                    Exceções<13>.       (line   18)
* cancelling() (método asyncio.Task):    Objeto Task.        (line  290)
* CannotSendHeader:                      http client — HTTP protocol client.
                                                             (line  170)
* CannotSendRequest:                     http client — HTTP protocol client.
                                                             (line  166)
* canonic() (método bdb.Bdb):            bdb — Framework do depurador.
                                                             (line  152)
* canonical() (método decimal.Context):  Objetos de contexto.
                                                             (line  278)
* canonical() (método decimal.Decimal):  Objetos de Decimal. (line  145)
* canonicalize() (no módulo xml.etree.ElementTree): Funções<9>.
                                                             (line    6)
* capa() (método poplib.POP3):           Objetos POP3.       (line   24)
* capitalize() (método bytearray):       Operações com Bytes e Bytearray.
                                                             (line  487)
* capitalize() (método bytes):           Operações com Bytes e Bytearray.
                                                             (line  487)
* capitalize() (método str):             String Methods<2>.  (line   23)
* capitals (atributo decimal.Context):   Objetos de contexto.
                                                             (line  150)
* CapsuleType (classe em types):         Tipos padrão do interpretador.
                                                             (line  298)
* captured_stderr() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  343)
* captured_stdin() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  343)
* captured_stdout() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  343)
* captureWarnings() (no módulo logging): Integration with the warnings module.
                                                             (line    9)
* capwords() (no módulo string):         Funções auxiliares. (line    6)
* caractere:                             Sequências imutáveis.
                                                             (line   16)
* caractere <1>:                         Subscrições.        (line   59)
* caractere <2>:                         unicodedata — Banco de dados de Unicode.
                                                             (line    6)
* caractere cerquilha:                   Comentários.        (line    6)
* caractere contrabarra:                 Junção de linha explícita.
                                                             (line    6)
* carregador:                            Localizadores e carregadores.
                                                             (line    6)
* carregador <1>:                        Glossário.          (line 1052)
* casefold() (método str):               String Methods<2>.  (line   33)
* cast() (método memoryview):            Memory Views.       (line  281)
* cast() (no módulo ctypes):             Funções utilitárias.
                                                             (line   33)
* cast() (no módulo typing):             Funções e decoradores.
                                                             (line    6)
* catch_threading_exception() (no módulo test.support.threading_helper): test support threading_helper — Utilities for threading tests.
                                                             (line   47)
* catch_unraisable_exception() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  612)
* catch_warnings (classe em warnings):   Gerenciadores de contexto disponíveis.
                                                             (line    6)
* category() (no módulo unicodedata):    unicodedata — Banco de dados de Unicode.
                                                             (line   80)
* cbreak() (no módulo curses):           Funções<6>.         (line   35)
* cbrt() (no módulo math):               Funções de potências exponenciais e logarítmicas.
                                                             (line    6)
* CC:                                    New Improved and Deprecated Modules<4>.
                                                             (line   58)
* ccc() (método ftplib.FTP_TLS):         FTP_TLS objects.    (line   99)
* cdf() (método statistics.NormalDist):  Objetos NormalDist. (line   91)
* CDLL (classe em ctypes):               Loading shared libraries.
                                                             (line    9)
* ceil() (no módulo math):               Tipos numéricos — int float complex.
                                                             (line  112)
* ceil() (no módulo math) <1>:           Arimética de ponto flutuante.
                                                             (line    6)
* CellType (no módulo types):            Tipos padrão do interpretador.
                                                             (line   71)
* center() (método bytearray):           Operações com Bytes e Bytearray.
                                                             (line  299)
* center() (método bytes):               Operações com Bytes e Bytearray.
                                                             (line  299)
* center() (método str):                 String Methods<2>.  (line   56)
* CERT_NONE (no módulo ssl):             Constantes<9>.      (line   11)
* CERT_OPTIONAL (no módulo ssl):         Constantes<9>.      (line   25)
* CERT_REQUIRED (no módulo ssl):         Constantes<9>.      (line   41)
* cert_store_stats() (método ssl.SSLContext): SSL Contexts.  (line   88)
* cert_time_to_seconds() (no módulo ssl): Manipulação de certificados.
                                                             (line    6)
* CertificateError:                      Exceções<16>.       (line   94)
* CFLAGS:                                New Improved and Deprecated Modules<4>.
                                                             (line   59)
* CFLAGS <1>:                            Opções de desempenho.
                                                             (line   31)
* CFLAGS <2>:                            Sinalizadores do compilador.
                                                             (line   26)
* CFLAGS <3>:                            Sinalizadores do compilador.
                                                             (line   29)
* CFLAGS <4>:                            Sinalizadores do compilador.
                                                             (line   34)
* CFLAGS <5>:                            Sinalizadores do compilador.
                                                             (line   57)
* CFLAGS <6>:                            Sinalizadores do vinculador.
                                                             (line   18)
* CFLAGS_NODIST:                         Sinalizadores do compilador.
                                                             (line   24)
* CFLAGS_NODIST <1>:                     Sinalizadores do compilador.
                                                             (line   64)
* CFLAGS_NODIST <2>:                     Sinalizadores do vinculador.
                                                             (line   26)
* cfmakecbreak() (no módulo tty):        tty — Funções de controle de terminal.
                                                             (line   27)
* cfmakeraw() (no módulo tty):           tty — Funções de controle de terminal.
                                                             (line   19)
* CFUNCTYPE() (no módulo ctypes):        Function prototypes.
                                                             (line   15)
* cget() (método tkinter.font.Font):     tkinter font — Invólucro de fontes Tkinter.
                                                             (line   53)
* cgi_directories (atributo http.server.CGIHTTPRequestHandler): http server — HTTP servers.
                                                             (line  466)
* CGIHandler (classe em wsgiref.handlers): wsgiref handlers – classes base de servidor/gateway.
                                                             (line   11)
* CGIHTTPRequestHandler (classe em http.server): http server — HTTP servers.
                                                             (line  440)
* CGIXMLRPCRequestHandler (classe em xmlrpc.server): xmlrpc server — Servidores XML-RPC básicos.
                                                             (line   54)
* chain() (no módulo itertools):         Funções do intertools.
                                                             (line  105)
* ChainMap (classe em collections):      Objetos ChainMap.   (line   16)
* ChainMap (classe em typing):           Apelidos para tipos em collections.
                                                             (line   28)
* chamada:                               Fatiamentos.        (line   40)
* chamada;instância:                     Emulando objetos chamáveis.
                                                             (line    8)
* chamável:                              Glossário.          (line  243)
* change_cwd() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   83)
* CHANNEL_BINDING_TYPES (no módulo ssl): Constantes<9>.      (line  472)
* CHAR_MAX (no módulo locale):           locale — Serviços de internacionalização.
                                                             (line  600)
* CharacterDataHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  328)
* characters_written (atributo BlockingIOError): Exceções de sistema operacional.
                                                             (line   19)
* characters() (método xml.sax.handler.ContentHandler): ContentHandler Objects.
                                                             (line  127)
* charmap_build() (no módulo codecs):    codecs — Codec registry and base classes.
                                                             (line   45)
* Charset (classe em email.charset):     email charset Representando conjuntos de caracteres.
                                                             (line   24)
* charset() (método gettext.NullTranslations): A classe NullTranslations.
                                                             (line   71)
* chave:                                 Sintaxes de criação de dicionário.
                                                             (line    6)
* chdir() (no módulo contextlib):        Utilitários.        (line  369)
* chdir() (no módulo os):                Arquivos e diretórios.
                                                             (line  121)
* check (atributo lzma.LZMADecompressor): Comprimindo e descomprimindo dados na memória.
                                                             (line  164)
* check__all__() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  692)
* check_call() (no módulo subprocess):   API de alto nível mais antiga.
                                                             (line   43)
* check_disallow_instantiation() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  746)
* CHECK_EG_MATCH (opcode):               Instruções em bytecode do Python.
                                                             (line  485)
* CHECK_EXC_MATCH (opcode):              Instruções em bytecode do Python.
                                                             (line  476)
* check_free_after_iterating() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  680)
* check_hostname (atributo ssl.SSLContext): SSL Contexts.    (line  493)
* check_impl_detail() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  306)
* check_no_resource_warning() (no módulo test.support.warnings_helper): test support warnings_helper — Utilities for warnings tests.
                                                             (line   25)
* check_output() (método doctest.OutputChecker): OutputChecker objects.
                                                             (line   17)
* check_output() (no módulo subprocess): API de alto nível mais antiga.
                                                             (line   80)
* check_returncode() (método subprocess.CompletedProcess): Usando o módulo subprocess.
                                                             (line  139)
* check_syntax_error() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  586)
* check_syntax_warning() (no módulo test.support.warnings_helper): test support warnings_helper — Utilities for warnings tests.
                                                             (line   32)
* check_unused_args() (método string.Formatter): Formatação personalizada de strings.
                                                             (line   92)
* check_warnings() (no módulo test.support.warnings_helper): test support warnings_helper — Utilities for warnings tests.
                                                             (line   48)
* check() (método imaplib.IMAP4):        Objetos IMAP4.      (line   58)
* check() (no módulo tabnanny):          tabnanny — Detecção de indentação ambígua.
                                                             (line   18)
* checkcache() (no módulo linecache):    linecache — Acesso aleatório a linhas de texto.
                                                             (line   44)
* CHECKED_HASH (atributo py_compile.PycInvalidationMode): py_compile — Compila arquivos fonte do Python.
                                                             (line  116)
* checkfuncname() (no módulo bdb):       bdb — Framework do depurador.
                                                             (line  467)
* checksizeof() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  462)
* chflags() (no módulo os):              Arquivos e diretórios.
                                                             (line  142)
* chgat() (método curses.window):        Window Objects.     (line  138)
* childNodes (atributo xml.dom.Node):    Objetos Node.       (line   49)
* ChildProcessError:                     Exceções de sistema operacional.
                                                             (line   25)
* children (atributo pyclbr.Class):      Objetos classe<2>.  (line   35)
* children (atributo pyclbr.Function):   Objetos Function.   (line   34)
* children (atributo tkinter.Tk):        Módulos Tkinter.    (line   90)
* chksum (atributo tarfile.TarInfo):     Objetos TarInfo.    (line  137)
* chmod() (método pathlib.Path):         Permissões e propriedade.
                                                             (line   40)
* chmod() (no módulo os):                Arquivos e diretórios.
                                                             (line  185)
* choice() (no módulo random):           Funções para sequências.
                                                             (line    6)
* choice() (no módulo secrets):          Números aleatórios. (line   15)
* choices (atributo optparse.Option):    Atributos da classe Option.
                                                             (line   64)
* choices() (no módulo random):          Funções para sequências.
                                                             (line   11)
* Chooser (classe em tkinter.colorchooser): tkinter colorchooser — Diálogo de escolha de cor.
                                                             (line   15)
* chown() (no módulo os):                Arquivos e diretórios.
                                                             (line  256)
* chown() (no módulo shutil):            Operações de diretório e arquivos.
                                                             (line  426)
* chroot() (no módulo os):               Arquivos e diretórios.
                                                             (line  284)
* CHRTYPE (no módulo tarfile):           tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  307)
* cipher() (método ssl.SSLSocket):       SSL Sockets.        (line  233)
* circle() (no módulo turtle):           Movimentos de Turtle.
                                                             (line  215)
* CIRCUMFLEX (no módulo token):          token — Constantes usadas com árvores de análises do Python.
                                                             (line  255)
* CIRCUMFLEXEQUAL (no módulo token):     token — Constantes usadas com árvores de análises do Python.
                                                             (line  288)
* clamp (atributo decimal.Context):      Objetos de contexto.
                                                             (line  156)
* Clamped (classe em decimal):           Sinais.             (line   21)
* CLASS (atributo symtable.SymbolTableType): Examining Symbol Tables.
                                                             (line   19)
* Class (classe em pyclbr):              Objetos classe<2>.  (line    6)
* Class (classe em symtable):            Examining Symbol Tables.
                                                             (line  150)
* ClassDef (classe em ast):              Definições de função e classe.
                                                             (line  169)
* classe:                                Glossário.          (line  261)
* classe base abstrata:                  Glossário.          (line   24)
* classe estilo novo:                    Glossário.          (line 1245)
* classe;atributo:                       Classes personalizadas.
                                                             (line   21)
* classe;atributo;atribuição:            Classes personalizadas.
                                                             (line   30)
* classe;construtor:                     Personalização básica.
                                                             (line   40)
* classe;corpo:                          Executando o corpo da classe.
                                                             (line    6)
* classe;definição:                      A instrução return. (line    6)
* classe;definição <1>:                  Definições de classe.
                                                             (line    6)
* classe;instância:                      Instâncias de classe<2>.
                                                             (line    6)
* classe;nome:                           Definições de classe.
                                                             (line    6)
* ClassMethodDescriptorType (no módulo types): Tipos padrão do interpretador.
                                                             (line  117)
* ClassVar (no módulo typing):           Formas especiais.   (line  196)
* cláusula:                              Instruções compostas.
                                                             (line   20)
* CLD_CONTINUED (no módulo os):          Gerenciamento de processo.
                                                             (line 1098)
* CLD_DUMPED (no módulo os):             Gerenciamento de processo.
                                                             (line 1098)
* CLD_EXITED (no módulo os):             Gerenciamento de processo.
                                                             (line 1098)
* CLD_KILLED (no módulo os):             Gerenciamento de processo.
                                                             (line 1098)
* CLD_STOPPED (no módulo os):            Gerenciamento de processo.
                                                             (line 1098)
* CLD_TRAPPED (no módulo os):            Gerenciamento de processo.
                                                             (line 1098)
* clean() (método mailbox.Maildir):      Maildir objects.    (line   86)
* cleandoc() (no módulo inspect):        Retrieving source code.
                                                             (line   71)
* CleanImport (classe em test.support.import_helper): test support import_helper — Utilities for import tests.
                                                             (line   87)
* CLEANUP_THROW (opcode):                Instruções em bytecode do Python.
                                                             (line  357)
* cleanup() (método tempfile.TemporaryDirectory): tempfile — Generate temporary files and directories.
                                                             (line  202)
* clear (pdb command):                   Comandos de depuração.
                                                             (line  136)
* Clear Breakpoint:                      Help menu Shell and Editor.
                                                             (line   30)
* clear_all_breaks() (método bdb.Bdb):   bdb — Framework do depurador.
                                                             (line  379)
* clear_all_file_breaks() (método bdb.Bdb): bdb — Framework do depurador.
                                                             (line  374)
* clear_bpbynumber() (método bdb.Bdb):   bdb — Framework do depurador.
                                                             (line  368)
* clear_break() (método bdb.Bdb):        bdb — Framework do depurador.
                                                             (line  363)
* clear_cache() (método de classe zoneinfo.ZoneInfo): A classe ZoneInfo.
                                                             (line   63)
* clear_cache() (no módulo filecmp):     filecmp — Comparações de arquivos e diretórios.
                                                             (line   56)
* clear_content() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  673)
* clear_flags() (método decimal.Context): Objetos de contexto.
                                                             (line  190)
* clear_frames() (no módulo traceback):  Funções de nível de módulo<2>.
                                                             (line  177)
* clear_history() (no módulo readline):  Lista de histórico. (line    8)
* clear_overloads() (no módulo typing):  Funções e decoradores.
                                                             (line  310)
* clear_session_cookies() (método http.cookiejar.CookieJar): CookieJar and FileCookieJar Objects.
                                                             (line   90)
* clear_traces() (no módulo tracemalloc): Funções<11>.       (line    6)
* clear_traps() (método decimal.Context): Objetos de contexto.
                                                             (line  194)
* clear() (método array.array):          array— Vetores eficientes de valores numéricos.
                                                             (line  229)
* clear() (método asyncio.Event):        Evento.             (line   58)
* clear() (método collections.deque):    Objetos deque.      (line   46)
* clear() (método curses.window):        Window Objects.     (line  154)
* clear() (método dict):                 Tipo mapeamento — dict.
                                                             (line  165)
* clear() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  669)
* clear() (método frame):                Métodos de objetos quadro.
                                                             (line    8)
* clear() (método http.cookiejar.CookieJar): CookieJar and FileCookieJar Objects.
                                                             (line   78)
* clear() (método mailbox.Mailbox):      Objetos Mailbox.    (line  213)
* clear() (método sequence):             Tipos sequências mutáveis.
                                                             (line   76)
* clear() (método set):                  Tipo conjuntos — set frozenset.
                                                             (line  227)
* clear() (método threading.Event):      Event objects.      (line   36)
* clear() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line   58)
* clear() (no módulo turtle):            Mais sobre o Controle do Desenho.
                                                             (line   23)
* clearcache() (no módulo linecache):    linecache — Acesso aleatório a linhas de texto.
                                                             (line   39)
* clearok() (método curses.window):      Window Objects.     (line  159)
* clearscreen() (no módulo turtle):      Controle da Janela. (line   73)
* clearstamp() (no módulo turtle):       Movimentos de Turtle.
                                                             (line  295)
* clearstamps() (no módulo turtle):      Movimentos de Turtle.
                                                             (line  314)
* client_address (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line   71)
* client_address (atributo socketserver.BaseRequestHandler): Objetos manipulador de requisições.
                                                             (line   48)
* Client() (no módulo multiprocessing.connection): Listeners and Clients.
                                                             (line   34)
* CLOCK_BOOTTIME (no módulo time):       Constantes de ID de Relógio.
                                                             (line    9)
* clock_getres() (no módulo time):       Funções<5>.         (line   42)
* clock_gettime_ns() (no módulo time):   Funções<5>.         (line   65)
* clock_gettime() (no módulo time):      Funções<5>.         (line   52)
* CLOCK_HIGHRES (no módulo time):        Constantes de ID de Relógio.
                                                             (line   23)
* CLOCK_MONOTONIC (no módulo time):      Constantes de ID de Relógio.
                                                             (line   34)
* CLOCK_MONOTONIC_RAW (no módulo time):  Constantes de ID de Relógio.
                                                             (line   43)
* CLOCK_MONOTONIC_RAW_APPROX (no módulo time): Constantes de ID de Relógio.
                                                             (line   52)
* CLOCK_PROCESS_CPUTIME_ID (no módulo time): Constantes de ID de Relógio.
                                                             (line   62)
* CLOCK_PROF (no módulo time):           Constantes de ID de Relógio.
                                                             (line   70)
* CLOCK_REALTIME (no módulo time):       Constantes de ID de Relógio.
                                                             (line  131)
* clock_seq (atributo uuid.UUID):        uuid — Objetos UUID conforme RFC 4122.
                                                             (line  128)
* clock_seq_hi_variant (atributo uuid.UUID): uuid — Objetos UUID conforme RFC 4122.
                                                             (line  116)
* clock_seq_low (atributo uuid.UUID):    uuid — Objetos UUID conforme RFC 4122.
                                                             (line  119)
* clock_settime_ns() (no módulo time):   Funções<5>.         (line   86)
* clock_settime() (no módulo time):      Funções<5>.         (line   74)
* CLOCK_TAI (no módulo time):            Constantes de ID de Relógio.
                                                             (line   78)
* CLOCK_THREAD_CPUTIME_ID (no módulo time): Constantes de ID de Relógio.
                                                             (line   90)
* CLOCK_UPTIME (no módulo time):         Constantes de ID de Relógio.
                                                             (line   98)
* CLOCK_UPTIME_RAW (no módulo time):     Constantes de ID de Relógio.
                                                             (line  108)
* CLOCK_UPTIME_RAW_APPROX (no módulo time): Constantes de ID de Relógio.
                                                             (line  118)
* CLONE_FILES (no módulo os):            Parâmetros de processo.
                                                             (line  638)
* CLONE_FS (no módulo os):               Parâmetros de processo.
                                                             (line  638)
* CLONE_NEWCGROUP (no módulo os):        Parâmetros de processo.
                                                             (line  638)
* CLONE_NEWIPC (no módulo os):           Parâmetros de processo.
                                                             (line  638)
* CLONE_NEWNET (no módulo os):           Parâmetros de processo.
                                                             (line  638)
* CLONE_NEWNS (no módulo os):            Parâmetros de processo.
                                                             (line  638)
* CLONE_NEWPID (no módulo os):           Parâmetros de processo.
                                                             (line  638)
* CLONE_NEWTIME (no módulo os):          Parâmetros de processo.
                                                             (line  638)
* CLONE_NEWUSER (no módulo os):          Parâmetros de processo.
                                                             (line  638)
* CLONE_NEWUTS (no módulo os):           Parâmetros de processo.
                                                             (line  638)
* CLONE_SIGHAND (no módulo os):          Parâmetros de processo.
                                                             (line  638)
* CLONE_SYSVSEM (no módulo os):          Parâmetros de processo.
                                                             (line  638)
* CLONE_THREAD (no módulo os):           Parâmetros de processo.
                                                             (line  638)
* CLONE_VM (no módulo os):               Parâmetros de processo.
                                                             (line  638)
* clone() (método email.generator.BytesGenerator): email generator Geração de documentos MIME.
                                                             (line  117)
* clone() (método email.generator.Generator): email generator Geração de documentos MIME.
                                                             (line  215)
* clone() (método email.policy.Policy):  email policy Policy Objects.
                                                             (line  223)
* clone() (no módulo turtle):            Métodos Especiais da Tartaruga.
                                                             (line   32)
* cloneNode() (método xml.dom.Node):     Objetos Node.       (line  147)
* close (in module os):                  Sub-interpreter support.
                                                             (line  196)
* close_clients() (método asyncio.Server): Objetos Server.   (line   44)
* close_connection (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line   80)
* close() (método asyncio.AbstractChildWatcher): Monitores de processos.
                                                             (line   81)
* close() (método asyncio.BaseTransport): Base Transport.    (line    6)
* close() (método asyncio.loop):         Executar e interromper o laço.
                                                             (line   46)
* close() (método asyncio.Runner):       Runner context manager.
                                                             (line   49)
* close() (método asyncio.Server):       Objetos Server.     (line   32)
* close() (método asyncio.StreamWriter): StreamWriter.       (line   41)
* close() (método asyncio.SubprocessTransport): Transportes de Subprocesso.
                                                             (line   59)
* close() (método contextlib.ExitStack): Utilitários.        (line  619)
* close() (método coroutine):            Objetos corrotina.  (line   50)
* close() (método dbm.dumb.dumbdbm):     dbm dumb — Implementação portátil do DBM.
                                                             (line   80)
* close() (método dbm.gnu.gdbm):         dbm gnu — Gerenciador de banco de dados do GNU.
                                                             (line   96)
* close() (método dbm.ndbm.ndbm):        dbm ndbm — New Database Manager.
                                                             (line   82)
* close() (método dbm.sqlite3.sqlite3):  dbm sqlite3 — Backend de SQLite para dbm.
                                                             (line   58)
* close() (método email.parser.BytesFeedParser): API do FeedParser.
                                                             (line   65)
* close() (método ftplib.FTP):           FTP objects.        (line  369)
* close() (método generator):            Métodos de iterador gerador.
                                                             (line   66)
* close() (método html.parser.HTMLParser): Métodos HTMLParser.
                                                             (line   16)
* close() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line  159)
* close() (método imaplib.IMAP4):        Objetos IMAP4.      (line   62)
* close() (método io.IOBase):            I/O Base Classes.   (line   48)
* close() (método logging.FileHandler):  FileHandler.        (line   27)
* close() (método logging.Handler):      Objetos Handler.    (line   74)
* close() (método logging.handlers.MemoryHandler): MemoryHandler.
                                                             (line   56)
* close() (método logging.handlers.NTEventLogHandler): NTEventLogHandler.
                                                             (line   29)
* close() (método logging.handlers.SocketHandler): SocketHandler.
                                                             (line   20)
* close() (método logging.handlers.SysLogHandler): SysLogHandler.
                                                             (line   47)
* close() (método mailbox.Mailbox):      Objetos Mailbox.    (line  270)
* close() (método mailbox.Maildir):      Maildir objects.    (line  215)
* close() (método mailbox.MH):           MH objects.         (line  107)
* close() (método mmap.mmap):            mmap — Suporte a arquivos mapeados na memória.
                                                             (line  187)
* close() (método multiprocessing.connection.Connection): Objetos de conexão.
                                                             (line   38)
* close() (método multiprocessing.connection.Listener): Listeners and Clients.
                                                             (line   92)
* close() (método multiprocessing.pool.Pool): Process Pools. (line  175)
* close() (método multiprocessing.Process): Process e exceções.
                                                             (line  234)
* close() (método multiprocessing.Queue): Encadeamentos e filas.
                                                             (line  185)
* close() (método multiprocessing.shared_memory.SharedMemory): multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line  101)
* close() (método multiprocessing.SimpleQueue): Encadeamentos e filas.
                                                             (line  240)
* close() (método os.scandir):           Arquivos e diretórios.
                                                             (line  919)
* close() (método select.devpoll):       /dev/poll Polling Objects.
                                                             (line   12)
* close() (método select.epoll):         Edge and Level Trigger Polling epoll Objects.
                                                             (line   65)
* close() (método select.kqueue):        Kqueue Objects.     (line    6)
* close() (método selectors.BaseSelector): Classes<4>.       (line  137)
* close() (método shelve.Shelf):         shelve — Python object persistence.
                                                             (line   77)
* close() (método socket.socket):        Socket Objects.     (line   41)
* close() (método sqlite3.Blob):         Blob objects.       (line   37)
* close() (método sqlite3.Connection):   Connection objects. (line   88)
* close() (método sqlite3.Cursor):       Cursor objects.     (line  156)
* close() (método tarfile.TarFile):      Objetos TarFile.    (line  329)
* close() (método urllib.request.BaseHandler): BaseHandler Objects.
                                                             (line   14)
* close() (método wave.Wave_read):       Objetos Wave_read.  (line   13)
* close() (método wave.Wave_write):      Objetos Wave_write. (line   29)
* Close() (método winreg.PyHKEY):        Objetos identificador de registro.
                                                             (line   32)
* close() (método xml.etree.ElementTree.TreeBuilder): TreeBuilder Objects.
                                                             (line   28)
* close() (método xml.etree.ElementTree.XMLParser): Objetos XMLParser.
                                                             (line   20)
* close() (método xml.etree.ElementTree.XMLPullParser): XMLPullParser Objects.
                                                             (line   41)
* close() (método xml.sax.xmlreader.IncrementalParser): IncrementalParser Objects.
                                                             (line   13)
* close() (método zipfile.ZipFile):      Objetos ZipFile.    (line  112)
* close() (no módulo fileinput):         fileinput — Itera sobre linhas de múltiplos fluxos de entrada.
                                                             (line  135)
* close() (no módulo os):                Operações dos descritores de arquivos.
                                                             (line   22)
* close() (no módulo socket):            Outras funções<2>.  (line    9)
* CloseBoundaryNotFoundDefect:           email errors Classes de Exceção e Defeito.
                                                             (line   85)
* closed (atributo http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   75)
* closed (atributo io.IOBase):           I/O Base Classes.   (line   58)
* closed (atributo mmap.mmap):           mmap — Suporte a arquivos mapeados na memória.
                                                             (line  193)
* closed (atributo select.devpoll):      /dev/poll Polling Objects.
                                                             (line   18)
* closed (atributo select.epoll):        Edge and Level Trigger Polling epoll Objects.
                                                             (line   69)
* closed (atributo select.kqueue):       Kqueue Objects.     (line   10)
* CloseKey() (no módulo winreg):         Funções<13>.        (line    8)
* closelog() (no módulo syslog):         syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line   82)
* closerange() (no módulo os):           Operações dos descritores de arquivos.
                                                             (line   33)
* closing() (no módulo contextlib):      Utilitários.        (line  155)
* clrtobot() (método curses.window):     Window Objects.     (line  164)
* clrtoeol() (método curses.window):     Window Objects.     (line  170)
* cmd (atributo subprocess.CalledProcessError): Usando o módulo subprocess.
                                                             (line  226)
* cmd (atributo subprocess.TimeoutExpired): Usando o módulo subprocess.
                                                             (line  178)
* Cmd (classe em cmd):                   cmd — Suporte para interpretadores de comando orientado a linhas.
                                                             (line   15)
* cmdloop() (método cmd.Cmd):            Objetos Cmd.        (line    8)
* cmdqueue (atributo cmd.Cmd):           Objetos Cmd.        (line  146)
* cmp_op (no módulo dis):                Opcode collections. (line   21)
* cmp_to_key() (no módulo functools):    functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line  123)
* cmp() (no módulo filecmp):             filecmp — Comparações de arquivos e diretórios.
                                                             (line   16)
* cmpfiles() (no módulo filecmp):        filecmp — Comparações de arquivos e diretórios.
                                                             (line   36)
* CMSG_LEN() (no módulo socket):         Outras funções<2>.  (line  336)
* CMSG_SPACE() (no módulo socket):       Outras funções<2>.  (line  353)
* co_argcount (atributo codeobject):     Atributos especiais de somente leitura<2>.
                                                             (line   14)
* co_argcount (atributo de objeto código): Objetos código.   (line   16)
* CO_ASYNC_GENERATOR (C macro):          Sinalizadores de objetos código.
                                                             (line   49)
* CO_ASYNC_GENERATOR (no módulo inspect): Code Objects Bit Flags.
                                                             (line   52)
* co_cellvars (atributo codeobject):     Atributos especiais de somente leitura<2>.
                                                             (line   39)
* co_cellvars (atributo de objeto código): Objetos código.   (line   16)
* co_code (atributo codeobject):         Atributos especiais de somente leitura<2>.
                                                             (line   55)
* co_code (atributo de objeto código):   Objetos código.     (line   16)
* co_consts (atributo codeobject):       Atributos especiais de somente leitura<2>.
                                                             (line   59)
* co_consts (atributo de objeto código): Objetos código.     (line   16)
* CO_COROUTINE (C macro):                Sinalizadores de objetos código.
                                                             (line   43)
* CO_COROUTINE (no módulo inspect):      Code Objects Bit Flags.
                                                             (line   35)
* co_filename (atributo codeobject):     Atributos especiais de somente leitura<2>.
                                                             (line   67)
* co_filename (atributo de objeto código): Objetos código.   (line   16)
* co_firstlineno (atributo codeobject):  Atributos especiais de somente leitura<2>.
                                                             (line   70)
* co_firstlineno (atributo de objeto código): Objetos código.
                                                             (line   16)
* co_flags (atributo codeobject):        Atributos especiais de somente leitura<2>.
                                                             (line   86)
* co_flags (atributo de objeto código):  Objetos código.     (line   16)
* co_freevars (atributo codeobject):     Atributos especiais de somente leitura<2>.
                                                             (line   45)
* co_freevars (atributo de objeto código): Objetos código.   (line   16)
* CO_FUTURE_ABSOLUTE_IMPORT (C macro):   Sinalizadores de objetos código.
                                                             (line   55)
* CO_FUTURE_ANNOTATIONS (C macro):       Sinalizadores de objetos código.
                                                             (line   71)
* CO_FUTURE_DIVISION (C macro):          Sinalizadores de objetos código.
                                                             (line   52)
* CO_FUTURE_GENERATOR_STOP (C macro):    Sinalizadores de objetos código.
                                                             (line   68)
* CO_FUTURE_PRINT_FUNCTION (C macro):    Sinalizadores de objetos código.
                                                             (line   61)
* CO_FUTURE_UNICODE_LITERALS (C macro):  Sinalizadores de objetos código.
                                                             (line   64)
* CO_FUTURE_WITH_STATEMENT (C macro):    Sinalizadores de objetos código.
                                                             (line   58)
* CO_GENERATOR (C macro):                Sinalizadores de objetos código.
                                                             (line   40)
* CO_GENERATOR (no módulo inspect):      Code Objects Bit Flags.
                                                             (line   30)
* CO_ITERABLE_COROUTINE (C macro):       Sinalizadores de objetos código.
                                                             (line   46)
* CO_ITERABLE_COROUTINE (no módulo inspect): Code Objects Bit Flags.
                                                             (line   43)
* co_kwonlyargcount (atributo codeobject): Atributos especiais de somente leitura<2>.
                                                             (line   25)
* co_kwonlyargcount (atributo de objeto código): Objetos código.
                                                             (line   16)
* co_lines() (método codeobject):        Métodos de objetos código.
                                                             (line   46)
* co_lnotab (atributo codeobject):       Atributos especiais de somente leitura<2>.
                                                             (line   73)
* co_lnotab (atributo de objeto código): Objetos código.     (line   16)
* co_name (atributo codeobject):         Atributos especiais de somente leitura<2>.
                                                             (line    6)
* co_name (atributo de objeto código):   Objetos código.     (line   16)
* co_names (atributo codeobject):        Atributos especiais de somente leitura<2>.
                                                             (line   63)
* co_names (atributo de objeto código):  Objetos código.     (line   16)
* CO_NESTED (C macro):                   Sinalizadores de objetos código.
                                                             (line   37)
* CO_NESTED (no módulo inspect):         Code Objects Bit Flags.
                                                             (line   26)
* CO_NEWLOCALS (C macro):                Sinalizadores de objetos código.
                                                             (line   28)
* CO_NEWLOCALS (no módulo inspect):      Code Objects Bit Flags.
                                                             (line   13)
* co_nlocals (atributo codeobject):      Atributos especiais de somente leitura<2>.
                                                             (line   30)
* co_nlocals (atributo de objeto código): Objetos código.    (line   16)
* CO_OPTIMIZED (C macro):                Sinalizadores de objetos código.
                                                             (line   25)
* CO_OPTIMIZED (no módulo inspect):      Code Objects Bit Flags.
                                                             (line    9)
* co_positions() (método codeobject):    Métodos de objetos código.
                                                             (line    6)
* co_posonlyargcount (atributo codeobject): Atributos especiais de somente leitura<2>.
                                                             (line   20)
* co_posonlyargcount (atributo de objeto código): Objetos código.
                                                             (line   16)
* co_qualname (atributo codeobject):     Atributos especiais de somente leitura<2>.
                                                             (line    9)
* co_qualname (atributo de objeto código): Objetos código.   (line   16)
* co_stacksize (atributo codeobject):    Atributos especiais de somente leitura<2>.
                                                             (line   83)
* co_stacksize (atributo de objeto código): Objetos código.  (line   16)
* CO_VARARGS (C macro):                  Sinalizadores de objetos código.
                                                             (line   31)
* CO_VARARGS (no módulo inspect):        Code Objects Bit Flags.
                                                             (line   18)
* CO_VARKEYWORDS (C macro):              Sinalizadores de objetos código.
                                                             (line   34)
* CO_VARKEYWORDS (no módulo inspect):    Code Objects Bit Flags.
                                                             (line   22)
* co_varnames (atributo codeobject):     Atributos especiais de somente leitura<2>.
                                                             (line   34)
* co_varnames (atributo de objeto código): Objetos código.   (line   16)
* code (atributo SystemExit):            Exceções concretas. (line  415)
* code (atributo urllib.error.HTTPError): urllib error — Classes de exceção levantadas por urllib request.
                                                             (line   45)
* code (atributo urllib.response.addinfourl): urllib response — Response classes used by urllib.
                                                             (line   40)
* code (atributo xml.etree.ElementTree.ParseError): Exceções<19>.
                                                             (line   14)
* code (atributo xml.parsers.expat.ExpatError): Exceções ExpatError.
                                                             (line    9)
* code_context (atributo inspect.FrameInfo): A pilha to interpretador.
                                                             (line   32)
* code_context (atributo inspect.Traceback): A pilha to interpretador.
                                                             (line   72)
* code_info() (no módulo dis):           Funções de análise. (line   11)
* Codec (classe em codecs):              Stateless Encoding and Decoding.
                                                             (line    9)
* CodecInfo (classe em codecs):          codecs — Codec registry and base classes.
                                                             (line   67)
* CodecRegistryError:                    encodings — Encodings package.
                                                             (line   41)
* Codecs:                                codecs — Codec registry and base classes.
                                                             (line    8)
* Codecs;decode:                         codecs — Codec registry and base classes.
                                                             (line    8)
* Codecs;encode:                         codecs — Codec registry and base classes.
                                                             (line    8)
* codecs.escape_decode() (no módulo codecs): Standalone Codec Functions.
                                                             (line   22)
* codecs.escape_encode() (no módulo codecs): Standalone Codec Functions.
                                                             (line   12)
* coded_value (atributo http.cookies.Morsel): Objetos Morsel.
                                                             (line   53)
* codepoint2name (no módulo html.entities): html entities — Definições de entidades gerais de HTML.
                                                             (line   36)
* codes (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   16)
* CODESET (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  199)
* CodeType (classe em types):            Tipos padrão do interpretador.
                                                             (line   56)
* codificação da localidade:             Glossário.          (line 1066)
* codificação;estilo:                    Intermezzo estilo de codificação.
                                                             (line    6)
* codificador de texto:                  Glossário.          (line 1694)
* código nativo:                         Glossário.          (line 1225)
* código;bloco:                          Modelo de execução. (line    6)
* col_offset (atributo ast.AST):         Classes de nós.     (line   51)
* coleta de lixo:                        Objetos valores e tipos.
                                                             (line   37)
* coleta de lixo <1>:                    Glossário.          (line  700)
* collapse_addresses() (no módulo ipaddress): Outras funções de nível de módulo.
                                                             (line   46)
* collapse_rfc2231_value() (no módulo email.utils): email utils Utilitários diversos.
                                                             (line  209)
* collect() (no módulo gc):              gc — Interface para o coletor de lixo.
                                                             (line   34)
* collectedDurations (atributo unittest.TestResult): Carregando e executando testes.
                                                             (line  279)
* Collection (classe em collections.abc): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line   36)
* Collection (classe em typing):         Apelidos de contêineres ABC em collections abc.
                                                             (line   37)
* colno (atributo json.JSONDecodeError): Exceções<17>.       (line   27)
* colno (atributo re.PatternError):      Exceções<3>.        (line   33)
* colno (atributo traceback.FrameSummary): FrameSummary Objects.
                                                             (line   57)
* colon (atributo mailbox.Maildir):      Maildir objects.    (line   45)
* COLON (no módulo token):               token — Constantes usadas com árvores de análises do Python.
                                                             (line  192)
* COLONEQUAL (no módulo token):          token — Constantes usadas com árvores de análises do Python.
                                                             (line  318)
* COLOR_BLACK (no módulo curses):        Constantes<6>.      (line  639)
* COLOR_BLUE (no módulo curses):         Constantes<6>.      (line  642)
* color_content() (no módulo curses):    Funções<6>.         (line   45)
* COLOR_CYAN (no módulo curses):         Constantes<6>.      (line  645)
* COLOR_GREEN (no módulo curses):        Constantes<6>.      (line  648)
* COLOR_MAGENTA (no módulo curses):      Constantes<6>.      (line  651)
* color_pair() (no módulo curses):       Funções<6>.         (line   53)
* COLOR_PAIRS (no módulo curses):        Constantes<6>.      (line   39)
* COLOR_RED (no módulo curses):          Constantes<6>.      (line  654)
* COLOR_WHITE (no módulo curses):        Constantes<6>.      (line  657)
* COLOR_YELLOW (no módulo curses):       Constantes<6>.      (line  660)
* color() (no módulo turtle):            Controle da Cor.    (line  112)
* colormode() (no módulo turtle):        Configurações e métodos especiais.
                                                             (line   35)
* COLORS (no módulo curses):             Constantes<6>.      (line   34)
* COLS (no módulo curses):               Constantes<6>.      (line   44)
* column() (método tkinter.ttk.Treeview): ttk Treeview.      (line   35)
* columnize() (método cmd.Cmd):          Objetos Cmd.        (line   91)
* COLUMNS:                               Funções<6>.         (line  595)
* COLUMNS <1>:                           Funções<6>.         (line  598)
* columns (atributo os.terminal_size):   Consultando o tamanho de um terminal.
                                                             (line   30)
* comb() (no módulo math):               Funções de teoria dos números.
                                                             (line    6)
* combinations_with_replacement() (no módulo itertools): Funções do intertools.
                                                             (line  171)
* combinations() (no módulo itertools):  Funções do intertools.
                                                             (line  128)
* combine() (método de classe datetime.datetime): Objetos datetime.
                                                             (line  187)
* combining() (no módulo unicodedata):   unicodedata — Banco de dados de Unicode.
                                                             (line  101)
* Combobox (classe em tkinter.ttk):      ttk Combobox.       (line    6)
* comentário:                            Comentários.        (line    6)
* COMMA (no módulo token):               token — Constantes usadas com árvores de análises do Python.
                                                             (line  195)
* command (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line   93)
* CommandCompiler (classe em codeop):    codeop — Compila código Python.
                                                             (line   69)
* commands (pdb command):                Comandos de depuração.
                                                             (line  175)
* comment (atributo http.cookiejar.Cookie): Objetos Cookie<2>.
                                                             (line   62)
* comment (atributo http.cookies.Morsel): Objetos Morsel.    (line   13)
* comment (atributo zipfile.ZipFile):    Objetos ZipFile.    (line  378)
* comment (atributo zipfile.ZipInfo):    Objetos ZipInfo.    (line  109)
* COMMENT (no módulo token):             token — Constantes usadas com árvores de análises do Python.
                                                             (line   73)
* comment_url (atributo http.cookiejar.Cookie): Objetos Cookie<2>.
                                                             (line   67)
* comment() (método xml.etree.ElementTree.TreeBuilder): TreeBuilder Objects.
                                                             (line   49)
* comment() (método xml.sax.handler.LexicalHandler): LexicalHandler Objects.
                                                             (line   18)
* Comment() (no módulo xml.etree.ElementTree): Funções<9>.   (line   72)
* commenters (atributo shlex.shlex):     shlex Objects.      (line   85)
* CommentHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  386)
* commit() (método sqlite3.Connection):  Connection objects. (line   72)
* common (atributo filecmp.dircmp):      A classe dircmp.    (line   65)
* Common Vulnerabilities and Exposures; CVE 2008-5983: Mudanças a construções e API C<8>.
                                                             (line   82)
* Common Vulnerabilities and Exposures; CVE 2008-5983 <1>: Mudanças a construções e API C<9>.
                                                             (line   48)
* Common Vulnerabilities and Exposures; CVE 2008-5983 <2>: Parâmetros de todo o processo.
                                                             (line  266)
* Common Vulnerabilities and Exposures; CVE 2012-0876: Segurança<45>.
                                                             (line   23)
* Common Vulnerabilities and Exposures; CVE 2012-0876 <1>: Segurança<48>.
                                                             (line   14)
* Common Vulnerabilities and Exposures; CVE 2012-0876 <2>: Segurança<54>.
                                                             (line   14)
* Common Vulnerabilities and Exposures; CVE 2013-0340: Segurança<25>.
                                                             (line   22)
* Common Vulnerabilities and Exposures; CVE 2013-1753: Biblioteca<182>.
                                                             (line  193)
* Common Vulnerabilities and Exposures; CVE 2014-0224: PEP 466 Aprimoramentos de segurança de rede do Python 2 7.
                                                             (line   31)
* Common Vulnerabilities and Exposures; CVE 2014-4616: Biblioteca<182>.
                                                             (line 1122)
* Common Vulnerabilities and Exposures; CVE 2015-1283: Segurança<51>.
                                                             (line    6)
* Common Vulnerabilities and Exposures; CVE 2015-1283 <1>: Segurança<56>.
                                                             (line    6)
* Common Vulnerabilities and Exposures; CVE 2016-0718: Segurança<45>.
                                                             (line   22)
* Common Vulnerabilities and Exposures; CVE 2016-0718 <1>: Segurança<45>.
                                                             (line   23)
* Common Vulnerabilities and Exposures; CVE 2016-0718 <2>: Segurança<45>.
                                                             (line   35)
* Common Vulnerabilities and Exposures; CVE 2016-0718 <3>: Segurança<48>.
                                                             (line   13)
* Common Vulnerabilities and Exposures; CVE 2016-0718 <4>: Segurança<48>.
                                                             (line   14)
* Common Vulnerabilities and Exposures; CVE 2016-0718 <5>: Segurança<49>.
                                                             (line    7)
* Common Vulnerabilities and Exposures; CVE 2016-0718 <6>: Segurança<54>.
                                                             (line   13)
* Common Vulnerabilities and Exposures; CVE 2016-0718 <7>: Segurança<54>.
                                                             (line   14)
* Common Vulnerabilities and Exposures; CVE 2016-0718 <8>: Segurança<54>.
                                                             (line   26)
* Common Vulnerabilities and Exposures; CVE 2016-0772: Segurança<51>.
                                                             (line    8)
* Common Vulnerabilities and Exposures; CVE 2016-0772 <1>: Segurança<56>.
                                                             (line    8)
* Common Vulnerabilities and Exposures; CVE 2016-1000110: Biblioteca<161>.
                                                             (line   82)
* Common Vulnerabilities and Exposures; CVE 2016-1000110 <1>: Biblioteca<168>.
                                                             (line  267)
* Common Vulnerabilities and Exposures; CVE 2016-2183: Biblioteca<160>.
                                                             (line  178)
* Common Vulnerabilities and Exposures; CVE 2016-2183 <1>: Biblioteca<168>.
                                                             (line  205)
* Common Vulnerabilities and Exposures; CVE 2016-3189: Windows<28>.
                                                             (line   25)
* Common Vulnerabilities and Exposures; CVE 2016-4472: Segurança<45>.
                                                             (line   35)
* Common Vulnerabilities and Exposures; CVE 2016-4472 <1>: Segurança<49>.
                                                             (line    7)
* Common Vulnerabilities and Exposures; CVE 2016-4472 <2>: Segurança<54>.
                                                             (line   26)
* Common Vulnerabilities and Exposures; CVE 2016-5300: Segurança<45>.
                                                             (line   24)
* Common Vulnerabilities and Exposures; CVE 2016-5300 <1>: Segurança<48>.
                                                             (line   15)
* Common Vulnerabilities and Exposures; CVE 2016-5300 <2>: Segurança<54>.
                                                             (line   15)
* Common Vulnerabilities and Exposures; CVE 2016-9063: Segurança<45>.
                                                             (line   21)
* Common Vulnerabilities and Exposures; CVE 2016-9063 <1>: Segurança<48>.
                                                             (line   12)
* Common Vulnerabilities and Exposures; CVE 2016-9063 <2>: Segurança<54>.
                                                             (line   12)
* Common Vulnerabilities and Exposures; CVE 2017-1000158: Segurança<53>.
                                                             (line   21)
* Common Vulnerabilities and Exposures; CVE 2017-9233: Segurança<45>.
                                                             (line   20)
* Common Vulnerabilities and Exposures; CVE 2017-9233 <1>: Segurança<48>.
                                                             (line   11)
* Common Vulnerabilities and Exposures; CVE 2017-9233 <2>: Segurança<54>.
                                                             (line   11)
* Common Vulnerabilities and Exposures; CVE 2018-1060: Segurança<42>.
                                                             (line   48)
* Common Vulnerabilities and Exposures; CVE 2018-1060 <1>: Segurança<43>.
                                                             (line   15)
* Common Vulnerabilities and Exposures; CVE 2018-1060 <2>: Segurança<46>.
                                                             (line   11)
* Common Vulnerabilities and Exposures; CVE 2018-1061: Segurança<42>.
                                                             (line   49)
* Common Vulnerabilities and Exposures; CVE 2018-1061 <1>: Segurança<43>.
                                                             (line   16)
* Common Vulnerabilities and Exposures; CVE 2018-1061 <2>: Segurança<46>.
                                                             (line   12)
* Common Vulnerabilities and Exposures; CVE 2018-14647: Segurança<42>.
                                                             (line   26)
* Common Vulnerabilities and Exposures; CVE 2018-25032: Windows<28>.
                                                             (line    6)
* Common Vulnerabilities and Exposures; CVE 2018-8970: Segurança<42>.
                                                             (line   38)
* Common Vulnerabilities and Exposures; CVE 2018-8970 <1>: Segurança<43>.
                                                             (line    6)
* Common Vulnerabilities and Exposures; CVE 2019-12900: Windows<28>.
                                                             (line   26)
* Common Vulnerabilities and Exposures; CVE 2019-15903: Segurança<38>.
                                                             (line   20)
* Common Vulnerabilities and Exposures; CVE 2019-18348: Segurança<35>.
                                                             (line    7)
* Common Vulnerabilities and Exposures; CVE 2019-20907: Biblioteca<125>.
                                                             (line  186)
* Common Vulnerabilities and Exposures; CVE 2019-5010: Segurança<42>.
                                                             (line    6)
* Common Vulnerabilities and Exposures; CVE 2019-9740: Segurança<40>.
                                                             (line    9)
* Common Vulnerabilities and Exposures; CVE 2019-9948: Segurança<39>.
                                                             (line    6)
* Common Vulnerabilities and Exposures; CVE 2020-10735: Outras mudanças na implementação do CPython.
                                                             (line   57)
* Common Vulnerabilities and Exposures; CVE 2020-10735 <1>: Recursos de segurança notáveis no 3 10 7.
                                                             (line   11)
* Common Vulnerabilities and Exposures; CVE 2020-10735 <2>: Recursos de segurança notáveis no 3 9 14.
                                                             (line   11)
* Common Vulnerabilities and Exposures; CVE 2020-10735 <3>: Recursos de segurança notáveis no 3 8 14.
                                                             (line   11)
* Common Vulnerabilities and Exposures; CVE 2020-10735 <4>: Notable security feature in 3 7 14.
                                                             (line   11)
* Common Vulnerabilities and Exposures; CVE 2020-10735 <5>: Limitação de comprimento de string na conversão para inteiro.
                                                             (line   21)
* Common Vulnerabilities and Exposures; CVE 2020-15523: Segurança<32>.
                                                             (line   13)
* Common Vulnerabilities and Exposures; CVE 2020-15801: Segurança<32>.
                                                             (line    7)
* Common Vulnerabilities and Exposures; CVE 2020-8492: Segurança<34>.
                                                             (line   11)
* Common Vulnerabilities and Exposures; CVE 2021-3426: Segurança<27>.
                                                             (line    6)
* Common Vulnerabilities and Exposures; CVE 2022-26488: Windows<28>.
                                                             (line   28)
* Common Vulnerabilities and Exposures; CVE 2022-37434: Windows<25>.
                                                             (line    6)
* Common Vulnerabilities and Exposures; CVE 2022-42919: Segurança<23>.
                                                             (line   24)
* Common Vulnerabilities and Exposures; CVE 2022-4303: Segurança<19>.
                                                             (line   10)
* Common Vulnerabilities and Exposures; CVE 2022-4303 <1>: Segurança<19>.
                                                             (line   11)
* Common Vulnerabilities and Exposures; CVE 2023-0286: Segurança<19>.
                                                             (line   10)
* Common Vulnerabilities and Exposures; CVE 2023-24329: Segurança<18>.
                                                             (line   19)
* Common Vulnerabilities and Exposures; CVE 2023-27043: email.
                                                             (line   24)
* Common Vulnerabilities and Exposures; CVE 2023-27043 <1>: Biblioteca<36>.
                                                             (line  457)
* Common Vulnerabilities and Exposures; CVE 2023-40217: Segurança<17>.
                                                             (line   11)
* Common Vulnerabilities and Exposures; CVE 2023-52425: xml. (line    6)
* Common Vulnerabilities and Exposures; CVE 2023-52425 <1>: Segurança<14>.
                                                             (line    7)
* Common Vulnerabilities and Exposures; CVE 2023-52425 <2>: Documentação<13>.
                                                             (line    6)
* Common Vulnerabilities and Exposures; CVE 2023-52425 <3>: Segurança no XML.
                                                             (line   60)
* Common Vulnerabilities and Exposures; CVE 2024-12718: tarfile.
                                                             (line   12)
* Common Vulnerabilities and Exposures; CVE 2024-12718 <1>: tarfile.
                                                             (line   20)
* Common Vulnerabilities and Exposures; CVE 2024-12718 <2>: Segurança<6>.
                                                             (line   10)
* Common Vulnerabilities and Exposures; CVE 2024-4030: os.   (line   39)
* Common Vulnerabilities and Exposures; CVE 2024-4030 <1>: tempfile.
                                                             (line    9)
* Common Vulnerabilities and Exposures; CVE 2024-4030 <2>: Segurança<12>.
                                                             (line   12)
* Common Vulnerabilities and Exposures; CVE 2025-4138: tarfile.
                                                             (line    8)
* Common Vulnerabilities and Exposures; CVE 2025-4138 <1>: Segurança<6>.
                                                             (line   10)
* Common Vulnerabilities and Exposures; CVE 2025-4330: tarfile.
                                                             (line   19)
* Common Vulnerabilities and Exposures; CVE 2025-4330 <1>: Segurança<6>.
                                                             (line   10)
* Common Vulnerabilities and Exposures; CVE 2025-4435: tarfile.
                                                             (line   24)
* Common Vulnerabilities and Exposures; CVE 2025-4517: os path<2>.
                                                             (line   10)
* Common Vulnerabilities and Exposures; CVE 2025-4517 <1>: Segurança<6>.
                                                             (line   10)
* Common Weakness Enumeration; CWE 257:  Receitas e melhores práticas.
                                                             (line   16)
* Common Weakness Enumeration; CWE 295:  ssl<2>.             (line   21)
* Common Weakness Enumeration; CWE 295 <1>: Biblioteca<62>.  (line  516)
* common_dirs (atributo filecmp.dircmp): A classe dircmp.    (line   77)
* common_files (atributo filecmp.dircmp): A classe dircmp.   (line   81)
* common_funny (atributo filecmp.dircmp): A classe dircmp.   (line   85)
* common_types (no módulo mimetypes):    mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line  168)
* commonpath() (no módulo os.path):      os path — Manipulações comuns de nomes de caminhos.
                                                             (line   78)
* commonprefix() (no módulo os.path):    os path — Manipulações comuns de nomes de caminhos.
                                                             (line   95)
* communicate() (método asyncio.subprocess.Process): Interagindo com subprocessos.
                                                             (line   50)
* communicate() (método subprocess.Popen): Objetos Popen.    (line   36)
* comparação:                            Comparações.        (line    6)
* comparações:                           Personalização básica.
                                                             (line  198)
* Compare (classe em ast):               Expressões<2>.      (line   92)
* compare_digest() (no módulo hmac):     hmac — Código de autenticação de mensagem com chave hash.
                                                             (line  117)
* compare_digest() (no módulo secrets):  Outras funções.     (line    6)
* compare_networks() (método ipaddress.IPv4Network): Objetos de rede.
                                                             (line  242)
* compare_networks() (método ipaddress.IPv6Network): Objetos de rede.
                                                             (line  360)
* COMPARE_OP (opcode):                   Instruções em bytecode do Python.
                                                             (line  811)
* compare_signal() (método decimal.Context): Objetos de contexto.
                                                             (line  286)
* compare_signal() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  163)
* compare_to() (método tracemalloc.Snapshot): Snapshot.      (line   13)
* compare_total_mag() (método decimal.Context): Objetos de contexto.
                                                             (line  294)
* compare_total_mag() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  196)
* compare_total() (método decimal.Context): Objetos de contexto.
                                                             (line  290)
* compare_total() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  170)
* compare() (método decimal.Context):    Objetos de contexto.
                                                             (line  282)
* compare() (método decimal.Decimal):    Objetos de Decimal. (line  152)
* compare() (método difflib.Differ):     Differ Objects.     (line   38)
* COMPARISON_FLAGS (no módulo doctest):  Flags opcionais.    (line  102)
* Compat32 (classe em email.policy):     email policy Policy Objects.
                                                             (line  563)
* compat32 (no módulo email.policy):     email policy Policy Objects.
                                                             (line  618)
* Compile (classe em codeop):            codeop — Compila código Python.
                                                             (line   60)
* compile_command() (no módulo code):    code — Classes bases do interpretador.
                                                             (line   63)
* compile_command() (no módulo codeop):  codeop — Compila código Python.
                                                             (line   31)
* compile_dir() (no módulo compileall):  Funções públicas.   (line    6)
* compile_file() (no módulo compileall): Funções públicas.   (line  100)
* compile_path() (no módulo compileall): Funções públicas.   (line  169)
* compile() (no módulo py_compile):      py_compile — Compila arquivos fonte do Python.
                                                             (line   24)
* compile() (no módulo re):              Funções<2>.         (line    6)
* compileall opção de linha de comando; -b: Uso na linha de comando<12>.
                                                             (line   68)
* compileall opção de linha de comando; -d: Uso na linha de comando<12>.
                                                             (line   34)
* compileall opção de linha de comando; -e: Uso na linha de comando<12>.
                                                             (line  110)
* compileall opção de linha de comando; -f: Uso na linha de comando<12>.
                                                             (line   23)
* compileall opção de linha de comando; -hardlink-dupes: Uso na linha de comando<12>.
                                                             (line  115)
* compileall opção de linha de comando; -i: Uso na linha de comando<12>.
                                                             (line   62)
* compileall opção de linha de comando; -invalidation-mode: Uso na linha de comando<12>.
                                                             (line   89)
* compileall opção de linha de comando; -j: Uso na linha de comando<12>.
                                                             (line   83)
* compileall opção de linha de comando; -l: Uso na linha de comando<12>.
                                                             (line   17)
* compileall opção de linha de comando; -o: Uso na linha de comando<12>.
                                                             (line  104)
* compileall opção de linha de comando; -p: Uso na linha de comando<12>.
                                                             (line   49)
* compileall opção de linha de comando; -q: Uso na linha de comando<12>.
                                                             (line   28)
* compileall opção de linha de comando; -r: Uso na linha de comando<12>.
                                                             (line   76)
* compileall opção de linha de comando; -s: Uso na linha de comando<12>.
                                                             (line   42)
* compileall opção de linha de comando; -x: Uso na linha de comando<12>.
                                                             (line   56)
* compileall opção de linha de comando; directory: Uso na linha de comando<12>.
                                                             (line    9)
* compileall opção de linha de comando; file: Uso na linha de comando<12>.
                                                             (line    9)
* compiler_flag (atributo __future__._Feature): Conteúdo do módulo<9>.
                                                             (line   89)
* complete_statement() (no módulo sqlite3): Funções do módulo.
                                                             (line  104)
* complete() (método rlcompleter.Completer): rlcompleter — Função de autocomplemento para GNU readline.
                                                             (line   45)
* completedefault() (método cmd.Cmd):    Objetos Cmd.        (line   85)
* CompletedProcess (classe em subprocess): Usando o módulo subprocess.
                                                             (line  103)
* Completer (classe em rlcompleter):     rlcompleter — Função de autocomplemento para GNU readline.
                                                             (line   41)
* Complex (classe em numbers):           A torre numérica.   (line    6)
* complex (classe interna):              Funções embutidas<3>.
                                                             (line  369)
* complexo;número:                       numbers Complex complex.
                                                             (line    6)
* compound;instrução:                    Instruções compostas.
                                                             (line    6)
* compreensão de conjunto:               Glossário.          (line 1595)
* compreensão de dicionário:             Glossário.          (line  489)
* compreensão de lista:                  Glossário.          (line 1028)
* compreensões:                          Sintaxe de criação de listas conjuntos e dicionários.
                                                             (line    6)
* comprehension (classe em ast):         Compreensões.       (line   58)
* compress_size (atributo zipfile.ZipInfo): Objetos ZipInfo. (line  160)
* compress_type (atributo zipfile.ZipInfo): Objetos ZipInfo. (line  105)
* compress() (método bz2.BZ2Compressor): Des compressão incremental.
                                                             (line   15)
* compress() (método lzma.LZMACompressor): Comprimindo e descomprimindo dados na memória.
                                                             (line   84)
* compress() (método zlib.Compress):     zlib — Compactação compatível com gzip.
                                                             (line  210)
* compress() (no módulo bz2):            De compressão de uma só vez one-shot.
                                                             (line    6)
* compress() (no módulo gzip):           gzip — Suporte para arquivos gzip.
                                                             (line  197)
* compress() (no módulo itertools):      Funções do intertools.
                                                             (line  214)
* compress() (no módulo lzma):           Comprimindo e descomprimindo dados na memória.
                                                             (line  189)
* compress() (no módulo zlib):           zlib — Compactação compatível com gzip.
                                                             (line   47)
* compressed (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line   60)
* compressed (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line  111)
* compressed (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  255)
* compressed (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  326)
* compression() (método ssl.SSLSocket):  SSL Sockets.        (line  251)
* CompressionError:                      tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  221)
* compressobj() (no módulo zlib):        zlib — Compactação compatível com gzip.
                                                             (line   85)
* COMSPEC:                               Gerenciamento de processo.
                                                             (line  813)
* COMSPEC <1>:                           Construtor Popen.   (line  117)
* concat() (no módulo operator):         operator — Operadores padrões como funções.
                                                             (line  181)
* concatenação;operação:                 Operações comuns de sequências.
                                                             (line   20)
* Concatenate (no módulo typing):        Formas especiais.   (line   76)
* concorrência:                          Glossário.          (line  316)
* cond (atributo bdb.Breakpoint):        bdb — Framework do depurador.
                                                             (line   99)
* condição de corrida:                   Glossário.          (line 1504)
* Condicional;expressão:                 Operações booleanas.
                                                             (line    6)
* condicional;expressão:                 Expressões condicionais.
                                                             (line    6)
* Condition (classe em asyncio):         Condição.           (line    6)
* Condition (classe em multiprocessing): Primitivas de sincronização.
                                                             (line   38)
* Condition (classe em threading):       Condition objects.  (line   72)
* condition (pdb command):               Comandos de depuração.
                                                             (line  167)
* Condition() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  174)
* config() (método tkinter.font.Font):   tkinter font — Invólucro de fontes Tkinter.
                                                             (line   57)
* ConfigParser (classe em configparser): Objetos ConfigParser.
                                                             (line    6)
* configuração;arquivo:                  configparser — Analisador sintático de arquivo de configuração.
                                                             (line    8)
* configure_mock() (método unittest.mock.Mock): A classe Mock.
                                                             (line  266)
* configure() (método tkinter.ttk.Style): Ttk Styling.       (line   24)
* CONFORM (atributo enum.FlagBoundary):  Tipos de Dados<2>.  (line  699)
* confstr_names (no módulo os):          Diversas informações de sistema.
                                                             (line   29)
* confstr() (no módulo os):              Diversas informações de sistema.
                                                             (line    6)
* conjugate() (método de número complexo): Tipos numéricos — int float complex.
                                                             (line   99)
* conjugate() (método decimal.Decimal):  Objetos de Decimal. (line  209)
* conjugate() (método numbers.Complex):  A torre numérica.   (line   23)
* conjunto (suite):                      Instruções compostas.
                                                             (line   20)
* conjunto de caracteres do código-fonte: Declarações de codificação.
                                                             (line    6)
* connect_accepted_socket() (método asyncio.loop): Criando servidores de rede.
                                                             (line  148)
* connect_ex() (método socket.socket):   Socket Objects.     (line   86)
* connect_read_pipe() (método asyncio.loop): Trabalhando com encadeamentos.
                                                             (line    6)
* connect_write_pipe() (método asyncio.loop): Trabalhando com encadeamentos.
                                                             (line   22)
* connect() (método ftplib.FTP):         FTP objects.        (line   89)
* connect() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line  150)
* connect() (método multiprocessing.managers.BaseManager): Gerenciadores.
                                                             (line   78)
* connect() (método smtplib.SMTP):       Objetos SMTP.       (line   33)
* connect() (método socket.socket):      Socket Objects.     (line   62)
* connect() (no módulo sqlite3):         Funções do módulo.  (line    6)
* connection (atributo sqlite3.Cursor):  Cursor objects.     (line  182)
* Connection (classe em multiprocessing.connection): Objetos de conexão.
                                                             (line   13)
* Connection (classe em sqlite3):        Connection objects. (line    6)
* connection_lost() (método asyncio.BaseProtocol): Base Protocol.
                                                             (line   23)
* connection_made() (método asyncio.BaseProtocol): Base Protocol.
                                                             (line   15)
* ConnectionAbortedError:                Exceções de sistema operacional.
                                                             (line   46)
* ConnectionError:                       Exceções de sistema operacional.
                                                             (line   30)
* ConnectionRefusedError:                Exceções de sistema operacional.
                                                             (line   52)
* ConnectionResetError:                  Exceções de sistema operacional.
                                                             (line   58)
* ConnectRegistry() (no módulo winreg):  Funções<13>.        (line   17)
* considerações de segurança:            xdrlib — Codifica e decodifica dados XDR.
                                                             (line   15)
* Consórcio Unicode:                     Literais de string e bytes.
                                                             (line   36)
* const (atributo optparse.Option):      Atributos da classe Option.
                                                             (line   59)
* Constant (classe em ast):              Literais<3>.        (line    6)
* constante:                             Literais.           (line    6)
* constructor() (no módulo copyreg):     copyreg — Registra funções de suporte pickle.
                                                             (line   17)
* consumed (atributo asyncio.LimitOverrunError): Exceções<13>.
                                                             (line   67)
* contagem de referências:               Objetos valores e tipos.
                                                             (line   37)
* contagem de referências <1>:           Glossário.          (line 1516)
* Container (classe em collections.abc): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line    6)
* Container (classe em typing):          Apelidos de contêineres ABC em collections abc.
                                                             (line   47)
* CONTAINS_OP (opcode):                  Instruções em bytecode do Python.
                                                             (line  826)
* contains() (no módulo operator):       operator — Operadores padrões como funções.
                                                             (line  186)
* contêiner:                             Objetos valores e tipos.
                                                             (line   68)
* contêiner <1>:                         Classes personalizadas.
                                                             (line   21)
* contêiner;iteração por:                Tipos iteradores.   (line    6)
* content (atributo urllib.error.ContentTooShortError): urllib error — Classes de exceção levantadas por urllib request.
                                                             (line   76)
* content_disposition (atributo email.headerregistry.ContentDispositionHeader): email headerregistry Custom Header Objects.
                                                             (line  285)
* content_manager (atributo email.policy.EmailPolicy): email policy Policy Objects.
                                                             (line  419)
* content_type (atributo email.headerregistry.ContentTypeHeader): email headerregistry Custom Header Objects.
                                                             (line  272)
* ContentDispositionHeader (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line  280)
* ContentHandler (classe em xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line   18)
* ContentManager (classe em email.contentmanager): email contentmanager Gerenciando conteúdo MIME.
                                                             (line   12)
* contents (atributo ctypes._Pointer):   Arrays and pointers.
                                                             (line   58)
* contents() (método importlib.abc.ResourceReader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  506)
* contents() (método importlib.resources.abc.ResourceReader): importlib resources abc – Classes base abstratas para recursos.
                                                             (line   74)
* contents() (no módulo importlib.resources): API funcional. (line  157)
* ContentTooShortError:                  urllib error — Classes de exceção levantadas por urllib request.
                                                             (line   70)
* ContentTransferEncodingHeader (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line  290)
* ContentTypeHeader (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line  267)
* context (atributo ssl.SSLSocket):      SSL Sockets.        (line  344)
* Context (classe em contextvars):       Gerenciamento de contexto manual.
                                                             (line   20)
* Context (classe em decimal):           Objetos de contexto.
                                                             (line  117)
* context_diff() (no módulo difflib):    difflib — Helpers for computing deltas.
                                                             (line  155)
* ContextDecorator (classe em contextlib): Utilitários.      (line  387)
* ContextManager (classe em typing):     Apelidos de ABCs da contextlib.
                                                             (line    6)
* contextmanager() (no módulo contextlib): Utilitários.      (line   31)
* contexto:                              Glossário.          (line  336)
* contexto atual:                        Glossário.          (line  406)
* ContextVar (classe em contextvars):    Variáveis de contexto.
                                                             (line    6)
* CONTIG (atributo inspect.BufferFlags): Buffer flags.       (line   33)
* CONTIG_RO (atributo inspect.BufferFlags): Buffer flags.    (line   35)
* contíguo:                              forma avanços suboffsets.
                                                             (line   34)
* contíguo <1>:                          Glossário.          (line  372)
* contíguo C:                            forma avanços suboffsets.
                                                             (line   34)
* contíguo C <1>:                        Glossário.          (line  376)
* contíguo Fortran:                      forma avanços suboffsets.
                                                             (line   33)
* contíguo Fortran <1>:                  Glossário.          (line  376)
* contiguous (atributo memoryview):      Memory Views.       (line  497)
* continuação de linha:                  Junção de linha explícita.
                                                             (line    6)
* Continue (classe em ast):              Fluxo de controle.  (line   99)
* continue (pdb command):                Comandos de depuração.
                                                             (line  246)
* CONTINUOUS (atributo enum.EnumCheck):  Tipos de Dados<2>.  (line  638)
* control() (método select.kqueue):      Kqueue Objects.     (line   22)
* controle de E/S;buffering:             Funções embutidas<3>.
                                                             (line 1522)
* controle de E/S;buffering <1>:         Socket Objects.     (line  212)
* controle de laço;alvo:                 A instrução break.  (line   12)
* controlnames (no módulo curses.ascii): curses ascii — Utilitários para caracteres ASCII.
                                                             (line  252)
* CONTTYPE (no módulo tarfile):          tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  323)
* convert_arg_line_to_args() (método argparse.ArgumentParser): Personalizando a análise de arquivos.
                                                             (line    6)
* convert_field() (método string.Formatter): Formatação personalizada de strings.
                                                             (line  110)
* CONVERT_VALUE (opcode):                Instruções em bytecode do Python.
                                                             (line 1182)
* Cookie (classe em http.cookiejar):     http cookiejar — Cookie handling for HTTP clients.
                                                             (line  113)
* CookieError:                           http cookies — HTTP state management.
                                                             (line   34)
* cookiejar (atributo urllib.request.HTTPCookieProcessor): HTTPCookieProcessor Objects.
                                                             (line    8)
* CookieJar (classe em http.cookiejar):  http cookiejar — Cookie handling for HTTP clients.
                                                             (line   46)
* CookiePolicy (classe em http.cookiejar): http cookiejar — Cookie handling for HTTP clients.
                                                             (line   77)
* cópia de arquivos:                     shutil — Operações de arquivo de alto nível.
                                                             (line    8)
* Copy:                                  Help menu Shell and Editor.
                                                             (line   30)
* COPY (opcode):                         Instruções em bytecode do Python.
                                                             (line  163)
* copy_abs() (método decimal.Context):   Objetos de contexto.
                                                             (line  299)
* copy_abs() (método decimal.Decimal):   Objetos de Decimal. (line  214)
* copy_context() (no módulo contextvars): Gerenciamento de contexto manual.
                                                             (line    6)
* copy_decimal() (método decimal.Context): Objetos de contexto.
                                                             (line  204)
* copy_file_range() (no módulo os):      Operações dos descritores de arquivos.
                                                             (line   45)
* COPY_FREE_VARS (opcode):               Instruções em bytecode do Python.
                                                             (line 1029)
* copy_location() (no módulo ast):       Auxiliares de ast.  (line  165)
* copy_negate() (método decimal.Context): Objetos de contexto.
                                                             (line  303)
* copy_negate() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  220)
* copy_sign() (método decimal.Context):  Objetos de contexto.
                                                             (line  307)
* copy_sign() (método decimal.Decimal):  Objetos de Decimal. (line  226)
* copy;protocolo:                        Serializando com pickle instâncias de classes.
                                                             (line  121)
* copy() (método collections.deque):     Objetos deque.      (line   51)
* copy() (método contextvars.Context):   Gerenciamento de contexto manual.
                                                             (line  103)
* copy() (método decimal.Context):       Objetos de contexto.
                                                             (line  200)
* copy() (método dict):                  Tipo mapeamento — dict.
                                                             (line  169)
* copy() (método frozenset):             Tipo conjuntos — set frozenset.
                                                             (line  135)
* copy() (método hashlib.hash):          Objetos hash.       (line   52)
* copy() (método hmac.HMAC):             hmac — Código de autenticação de mensagem com chave hash.
                                                             (line   87)
* copy() (método http.cookies.Morsel):   Objetos Morsel.     (line   99)
* copy() (método imaplib.IMAP4):         Objetos IMAP4.      (line   68)
* copy() (método sequence):              Tipos sequências mutáveis.
                                                             (line   83)
* copy() (método set):                   Tipo conjuntos — set frozenset.
                                                             (line  135)
* copy() (método tkinter.font.Font):     tkinter font — Invólucro de fontes Tkinter.
                                                             (line   61)
* copy() (método types.MappingProxyType): Tipos padrão do interpretador.
                                                             (line  261)
* copy() (método zlib.Compress):         zlib — Compactação compatível com gzip.
                                                             (line  234)
* copy() (método zlib.Decompress):       zlib — Compactação compatível com gzip.
                                                             (line  306)
* copy() (no módulo copy):               copy — Operações de cópia profunda e cópia rasa.
                                                             (line   18)
* copy() (no módulo multiprocessing.sharedctypes): O módulo multiprocessing sharedctypes.
                                                             (line   93)
* copy() (no módulo shutil):             Operações de diretório e arquivos.
                                                             (line  135)
* copy2() (no módulo shutil):            Operações de diretório e arquivos.
                                                             (line  169)
* copyfile() (no módulo shutil):         Operações de diretório e arquivos.
                                                             (line   18)
* copyfileobj() (no módulo shutil):      Operações de diretório e arquivos.
                                                             (line    6)
* copymode() (no módulo shutil):         Operações de diretório e arquivos.
                                                             (line   70)
* copyright (in module sys):             Parâmetros de todo o processo.
                                                             (line  199)
* copyright (no módulo sys):             sys — Parâmetros e funções específicas do sistema.
                                                             (line  185)
* copyright (variável interna):          Constantes adicionadas pelo módulo site.
                                                             (line   27)
* copysign() (no módulo math):           Funções de manipulação de ponto flutuante.
                                                             (line    6)
* copystat() (no módulo shutil):         Operações de diretório e arquivos.
                                                             (line   89)
* copytree() (no módulo shutil):         Operações de diretório e arquivos.
                                                             (line  212)
* Coroutine (classe em collections.abc): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  150)
* Coroutine (classe em typing):          Apelidos para ABCs assíncronas em collections abc.
                                                             (line    6)
* coroutine() (no módulo types):         Funções de utilidade de corrotina.
                                                             (line    6)
* CoroutineType (no módulo types):       Tipos padrão do interpretador.
                                                             (line   42)
* correlation() (no módulo statistics):  Detalhes das funções.
                                                             (line  607)
* correspondência de padrões:            A instrução match.  (line    6)
* corrida de dados:                      Glossário.          (line  416)
* corrotina:                             Pesquisa de método especial.
                                                             (line   76)
* corrotina <1>:                         Expressões yield.   (line   54)
* corrotina <2>:                         Glossário.          (line  383)
* corrotina;função:                      Funções de corrotina.
                                                             (line    6)
* cos() (no módulo cmath):               Funções trigonométricas<2>.
                                                             (line   24)
* cos() (no módulo math):                Funções trigonométricas.
                                                             (line   30)
* cosh() (no módulo cmath):              Funções hiperbólicas<2>.
                                                             (line   25)
* cosh() (no módulo math):               Funções hiperbólicas.
                                                             (line   21)
* count (atributo tracemalloc.Statistic): Statistic.         (line   15)
* count (atributo tracemalloc.StatisticDiff): StatisticDiff. (line   15)
* count_diff (atributo tracemalloc.StatisticDiff): StatisticDiff.
                                                             (line   20)
* count() (método array.array):          array— Vetores eficientes de valores numéricos.
                                                             (line  157)
* count() (método bytearray):            Operações com Bytes e Bytearray.
                                                             (line   37)
* count() (método bytes):                Operações com Bytes e Bytearray.
                                                             (line   37)
* count() (método collections.deque):    Objetos deque.      (line   57)
* count() (método multiprocessing.shared_memory.ShareableList): multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line  350)
* count() (método sequence):             Operações comuns de sequências.
                                                             (line  175)
* count() (método str):                  String Methods<2>.  (line   70)
* count() (no módulo itertools):         Funções do intertools.
                                                             (line  227)
* Counter (classe em collections):       Objetos Counter.    (line   24)
* Counter (classe em typing):            Apelidos para tipos em collections.
                                                             (line   39)
* countOf() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  192)
* countTestCases() (método unittest.TestCase): Casos de teste.
                                                             (line  760)
* countTestCases() (método unittest.TestSuite): Grouping tests.
                                                             (line   55)
* covariance() (no módulo statistics):   Detalhes das funções.
                                                             (line  584)
* CoverageResults (classe em trace):     Interface programática.
                                                             (line   51)
* CPPFLAGS:                              New Improved and Deprecated Modules<4>.
                                                             (line   59)
* CPPFLAGS <1>:                          Sinalizadores do pré-processador.
                                                             (line    8)
* CPPFLAGS <2>:                          Sinalizadores do pré-processador.
                                                             (line   19)
* CPPFLAGS <3>:                          Sinalizadores do vinculador.
                                                             (line   51)
* cProfile opção de linha de comando; -m: Instant User’s Manual.
                                                             (line  100)
* cProfile opção de linha de comando; -o: Instant User’s Manual.
                                                             (line   90)
* cProfile opção de linha de comando; -s: Instant User’s Manual.
                                                             (line   94)
* cpu_count() (no módulo multiprocessing): Diversos<4>.      (line   13)
* cpu_count() (no módulo os):            Diversas informações de sistema.
                                                             (line   38)
* CPython:                               Glossário.          (line  399)
* cpython_only() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  544)
* CR (no módulo curses.ascii):           curses ascii — Utilitários para caracteres ASCII.
                                                             (line   66)
* crawl_delay() (método urllib.robotparser.RobotFileParser): urllib robotparser — Analisador sintático de robots txt.
                                                             (line   52)
* CRC (atributo zipfile.ZipInfo):        Objetos ZipInfo.    (line  156)
* crc_hqx() (no módulo binascii):        binascii — Converte entre binário e ASCII.
                                                             (line   94)
* crc32() (no módulo binascii):          binascii — Converte entre binário e ASCII.
                                                             (line  101)
* crc32() (no módulo zlib):              zlib — Compactação compatível com gzip.
                                                             (line  125)
* create_aggregate() (método sqlite3.Connection): Connection objects.
                                                             (line  157)
* create_archive() (no módulo zipapp):   API do Python.      (line    8)
* create_autospec() (no módulo unittest.mock): create_autospec.
                                                             (line    6)
* CREATE_BREAKAWAY_FROM_JOB (no módulo subprocess): Constantes do Windows.
                                                             (line  140)
* create_collation() (método sqlite3.Connection): Connection objects.
                                                             (line  301)
* create_configuration() (método venv.EnvBuilder): API<2>.   (line  149)
* create_connection() (método asyncio.loop): Abrindo conexões de rede.
                                                             (line    6)
* create_connection() (no módulo socket): Criação de sockets.
                                                             (line   83)
* create_datagram_endpoint() (método asyncio.loop): Abrindo conexões de rede.
                                                             (line  160)
* create_decimal_from_float() (método decimal.Context): Objetos de contexto.
                                                             (line  233)
* create_decimal() (método decimal.Context): Objetos de contexto.
                                                             (line  208)
* create_default_context() (no módulo ssl): Criação de contexto.
                                                             (line    9)
* CREATE_DEFAULT_ERROR_MODE (no módulo subprocess): Constantes do Windows.
                                                             (line  130)
* create_eager_task_factory() (no módulo asyncio): Fábrica de tarefas ansiosas.
                                                             (line   32)
* create_empty_file() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   92)
* create_function() (método sqlite3.Connection): Connection objects.
                                                             (line  115)
* create_future() (método asyncio.loop): Criando Futures e Tasks.
                                                             (line    6)
* create_git_ignore_file() (método venv.EnvBuilder): API<2>. (line  215)
* create_module() (método importlib.abc.Loader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  107)
* create_module() (método importlib.machinery.ExtensionFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  323)
* create_module() (método zipimport.zipimporter): Objetos zipimporter.
                                                             (line   23)
* CREATE_NEW_CONSOLE (no módulo subprocess): Constantes do Windows.
                                                             (line   54)
* CREATE_NEW_PROCESS_GROUP (no módulo subprocess): Constantes do Windows.
                                                             (line   59)
* CREATE_NO_WINDOW (no módulo subprocess): Constantes do Windows.
                                                             (line  115)
* create_server() (método asyncio.loop): Criando servidores de rede.
                                                             (line    6)
* create_server() (no módulo socket):    Criação de sockets. (line  114)
* create_stats() (método profile.Profile): profile and cProfile Module Reference.
                                                             (line   89)
* create_string_buffer() (no módulo ctypes): Funções utilitárias.
                                                             (line   40)
* create_subprocess_exec() (no módulo asyncio): Criando subprocessos.
                                                             (line    6)
* create_subprocess_shell() (no módulo asyncio): Criando subprocessos.
                                                             (line   27)
* create_system (atributo zipfile.ZipInfo): Objetos ZipInfo. (line  120)
* create_task() (método asyncio.loop):   Criando Futures e Tasks.
                                                             (line   18)
* create_task() (método asyncio.TaskGroup): Grupos de tarefas.
                                                             (line   19)
* create_task() (no módulo asyncio):     Criando tarefas.    (line   10)
* create_unicode_buffer() (no módulo ctypes): Funções utilitárias.
                                                             (line   81)
* create_unix_connection() (método asyncio.loop): Abrindo conexões de rede.
                                                             (line  248)
* create_unix_server() (método asyncio.loop): Criando servidores de rede.
                                                             (line  117)
* create_version (atributo zipfile.ZipInfo): Objetos ZipInfo.
                                                             (line  124)
* create_window_function() (método sqlite3.Connection): Connection objects.
                                                             (line  212)
* create() (método imaplib.IMAP4):       Objetos IMAP4.      (line   72)
* create() (método venv.EnvBuilder):     API<2>.             (line   64)
* create() (no módulo venv):             API<2>.             (line  237)
* createAttribute() (método xml.dom.Document): Document Objects.
                                                             (line   46)
* createAttributeNS() (método xml.dom.Document): Document Objects.
                                                             (line   53)
* createComment() (método xml.dom.Document): Document Objects.
                                                             (line   34)
* createDocument() (método xml.dom.DOMImplementation): DOMImplementation Objects.
                                                             (line   16)
* createDocumentType() (método xml.dom.DOMImplementation): DOMImplementation Objects.
                                                             (line   26)
* createElement() (método xml.dom.Document): Document Objects.
                                                             (line   14)
* createElementNS() (método xml.dom.Document): Document Objects.
                                                             (line   21)
* createfilehandler() (método _tkinter.Widget.tk): Tratadores de arquivos.
                                                             (line   28)
* CreateKey() (no módulo winreg):        Funções<13>.        (line   35)
* CreateKeyEx() (no módulo winreg):      Funções<13>.        (line   63)
* createLock() (método logging.Handler): Objetos Handler.    (line   20)
* createLock() (método logging.NullHandler): NullHandler.    (line   25)
* createProcessingInstruction() (método xml.dom.Document): Document Objects.
                                                             (line   40)
* createSocket() (método logging.handlers.SocketHandler): SocketHandler.
                                                             (line   75)
* createSocket() (método logging.handlers.SysLogHandler): SysLogHandler.
                                                             (line   51)
* createTextNode() (método xml.dom.Document): Document Objects.
                                                             (line   28)
* credits (variável interna):            Constantes adicionadas pelo módulo site.
                                                             (line   27)
* criptografia:                          Serviços Criptográficos.
                                                             (line    6)
* CRITICAL (no módulo logging):          Níveis de Logging.  (line   46)
* critical() (método logging.Logger):    Objetos Logger.     (line  317)
* critical() (no módulo logging):        Funções de nível de módulo.
                                                             (line   86)
* CRNCYSTR (no módulo locale):           locale — Serviços de internacionalização.
                                                             (line  308)
* CRT_ASSEMBLY_VERSION (no módulo msvcrt): Outras funções<4>.
                                                             (line   90)
* CRT_ASSERT (no módulo msvcrt):         Outras funções<4>.  (line   67)
* CRT_ERROR (no módulo msvcrt):          Outras funções<4>.  (line   62)
* CRT_WARN (no módulo msvcrt):           Outras funções<4>.  (line   58)
* CRTDBG_MODE_DEBUG (no módulo msvcrt):  Outras funções<4>.  (line   71)
* CRTDBG_MODE_FILE (no módulo msvcrt):   Outras funções<4>.  (line   75)
* CRTDBG_MODE_WNDW (no módulo msvcrt):   Outras funções<4>.  (line   81)
* CRTDBG_REPORT_MODE (no módulo msvcrt): Outras funções<4>.  (line   86)
* CrtSetReportFile() (no módulo msvcrt): Outras funções<4>.  (line   49)
* CrtSetReportMode() (no módulo msvcrt): Outras funções<4>.  (line   40)
* cssclass_month (atributo calendar.HTMLCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  303)
* cssclass_month_head (atributo calendar.HTMLCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  296)
* cssclass_noday (atributo calendar.HTMLCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  281)
* cssclass_year (atributo calendar.HTMLCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  310)
* cssclass_year_head (atributo calendar.HTMLCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  317)
* cssclasses (atributo calendar.HTMLCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  268)
* cssclasses_weekday_head (atributo calendar.HTMLCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  288)
* csv:                                   csv — Leitura e escrita de arquivos CSV.
                                                             (line    8)
* cte (atributo email.headerregistry.ContentTransferEncodingHeader): email headerregistry Custom Header Objects.
                                                             (line  294)
* cte_type (atributo email.policy.Policy): email policy Policy Objects.
                                                             (line  160)
* ctermid() (no módulo os):              Parâmetros de processo.
                                                             (line    9)
* ctime() (método datetime.date):        Objetos date.       (line  284)
* ctime() (método datetime.datetime):    Objetos datetime.   (line  759)
* ctime() (no módulo time):              Funções<5>.         (line   95)
* CTRL_BREAK_EVENT (no módulo signal):   Conteúdo do módulo<5>.
                                                             (line  229)
* CTRL_C_EVENT (no módulo signal):       Conteúdo do módulo<5>.
                                                             (line  219)
* ctrl() (no módulo curses.ascii):       curses ascii — Utilitários para caracteres ASCII.
                                                             (line  226)
* curdir (no módulo os):                 Diversas informações de sistema.
                                                             (line  107)
* currency() (no módulo locale):         locale — Serviços de internacionalização.
                                                             (line  489)
* current_process() (no módulo multiprocessing): Diversos<4>.
                                                             (line   34)
* current_task() (no módulo asyncio):    Introspecção.       (line    6)
* current_thread() (no módulo threading): Referência<2>.     (line   16)
* current() (método tkinter.ttk.Combobox): ttk Combobox.     (line    8)
* CurrentByteIndex (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  245)
* CurrentColumnNumber (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  249)
* currentframe() (no módulo inspect):    A pilha to interpretador.
                                                             (line  161)
* CurrentLineNumber (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  253)
* curs_set() (no módulo curses):         Funções<6>.         (line   61)
* Cursor (classe em sqlite3):            Cursor objects.     (line   19)
* cursor() (método sqlite3.Connection):  Connection objects. (line   27)
* cursyncup() (método curses.window):    Window Objects.     (line  174)
* Cut:                                   Help menu Shell and Editor.
                                                             (line   30)
* cutoff (atributo sys.hash_info):       sys — Parâmetros e funções específicas do sistema.
                                                             (line 1121)
* cwd() (método de classe pathlib.Path): Expandindo e resolvendo caminhos.
                                                             (line   31)
* cwd() (método ftplib.FTP):             FTP objects.        (line  336)
* cycle() (no módulo itertools):         Funções do intertools.
                                                             (line  249)
* CycleError:                            Exceções<4>.        (line    8)
* D_FMT (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  210)
* D_T_FMT (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  204)
* dados:                                 Objetos valores e tipos.
                                                             (line    6)
* dados;tabular:                         csv — Leitura e escrita de arquivos CSV.
                                                             (line    8)
* dados;tipo:                            A hierarquia de tipos padrão.
                                                             (line    6)
* daemon (atributo multiprocessing.Process): Process e exceções.
                                                             (line  135)
* daemon (atributo threading.Thread):    Thread objects.     (line  202)
* daemon_threads (atributo socketserver.ThreadingMixIn): Notas sobre criação do servidor.
                                                             (line   55)
* data (atributo collections.UserDict):  Objetos UserDict.   (line   24)
* data (atributo collections.UserList):  Objetos UserList.   (line   29)
* data (atributo collections.UserString): Objetos UserString.
                                                             (line   24)
* data (atributo plistlib.UID):          plistlib — Gera e analisa arquivos Apple plist.
                                                             (line  150)
* data (atributo select.kevent):         Kevent Objects.     (line  175)
* data (atributo selectors.SelectorKey): Classes<4>.         (line   48)
* data (atributo urllib.request.Request): Objeto Request.    (line   39)
* data (atributo xml.dom.Comment):       Comment Objects.    (line    9)
* data (atributo xml.dom.ProcessingInstruction): Objetos ProcessingInstruction.
                                                             (line   14)
* data (atributo xml.dom.Text):          Text and CDATASection Objects.
                                                             (line   15)
* data (atributo xmlrpc.client.Binary):  Objetos Binários.   (line   12)
* data_filter() (no módulo tarfile):     Default named filters.
                                                             (line   36)
* data_open() (método urllib.request.DataHandler): DataHandler Objects.
                                                             (line    6)
* data_received() (método asyncio.Protocol): Streaming Protocols.
                                                             (line   13)
* data() (método xml.etree.ElementTree.TreeBuilder): TreeBuilder Objects.
                                                             (line   33)
* DatabaseError:                         Exceções<7>.        (line   44)
* dataclass_transform() (no módulo typing): Funções e decoradores.
                                                             (line  119)
* dataclass() (no módulo dataclasses):   Conteúdo do módulo<8>.
                                                             (line    6)
* DataError:                             Exceções<7>.        (line   51)
* datagram_received() (método asyncio.DatagramProtocol): Protocolos de Datagramas.
                                                             (line    9)
* DatagramHandler (classe em logging.handlers): DatagramHandler.
                                                             (line   10)
* DatagramProtocol (classe em asyncio):  Protocolos de Base. (line   20)
* DatagramRequestHandler (classe em socketserver): Objetos manipulador de requisições.
                                                             (line   58)
* DatagramTransport (classe em asyncio): Transports Hierarchy.
                                                             (line   43)
* DataHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  429)
* date (classe em datetime):             Objetos date.       (line   13)
* date_time (atributo zipfile.ZipInfo):  Objetos ZipInfo.    (line   58)
* date_time_string() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  320)
* date() (método datetime.datetime):     Objetos datetime.   (line  456)
* DateHeader (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line  136)
* datetime (atributo email.headerregistry.DateHeader): email headerregistry Custom Header Objects.
                                                             (line  145)
* datetime (classe em datetime):         Objetos datetime.   (line   16)
* DateTime (classe em xmlrpc.client):    Objetos DateTime.   (line    6)
* day (atributo datetime.date):          Objetos date.       (line  125)
* day (atributo datetime.datetime):      Objetos datetime.   (line  324)
* Day (classe em calendar):              calendar — Funções gerais relacionadas ao calendário.
                                                             (line  478)
* DAY_1 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  227)
* DAY_2 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  227)
* DAY_3 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  227)
* DAY_4 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  227)
* DAY_5 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  227)
* DAY_6 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  227)
* DAY_7 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  227)
* day_abbr (no módulo calendar):         calendar — Funções gerais relacionadas ao calendário.
                                                             (line  456)
* day_name (no módulo calendar):         calendar — Funções gerais relacionadas ao calendário.
                                                             (line  447)
* daylight (no módulo time):             Constantes de Fuso Horário.
                                                             (line   14)
* days (atributo datetime.timedelta):    Objetos timedelta.  (line  112)
* DbfilenameShelf (classe em shelve):    Restrições.         (line   74)
* DC1 (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   80)
* DC2 (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   83)
* DC3 (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   87)
* DC4 (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   90)
* dcgettext() (no módulo locale):        Acesso a catálogos de mensagens.
                                                             (line   10)
* deactivate_stack_trampoline() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line 1847)
* deallocation, object:                  Finalization and De-allocation.
                                                             (line    6)
* debug (atributo imaplib.IMAP4):        Objetos IMAP4.      (line  400)
* debug (atributo shlex.shlex):          shlex Objects.      (line  162)
* debug (atributo sys.flags):            sys — Parâmetros e funções específicas do sistema.
                                                             (line  553)
* debug (atributo zipfile.ZipFile):      Objetos ZipFile.    (line  372)
* DEBUG (no módulo logging):             Níveis de Logging.  (line   25)
* DEBUG (no módulo re):                  Sinalizadores.      (line   33)
* debug (pdb command):                   Comandos de depuração.
                                                             (line  453)
* DEBUG_BYTECODE_SUFFIXES (no módulo importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line   20)
* DEBUG_COLLECTABLE (no módulo gc):      gc — Interface para o coletor de lixo.
                                                             (line  308)
* DEBUG_LEAK (no módulo gc):             gc — Interface para o coletor de lixo.
                                                             (line  328)
* DEBUG_SAVEALL (no módulo gc):          gc — Interface para o coletor de lixo.
                                                             (line  322)
* debug_src() (no módulo doctest):       Depuração.          (line  147)
* DEBUG_STATS (no módulo gc):            gc — Interface para o coletor de lixo.
                                                             (line  303)
* DEBUG_UNCOLLECTABLE (no módulo gc):    gc — Interface para o coletor de lixo.
                                                             (line  312)
* debug() (método logging.Logger):       Objetos Logger.     (line  193)
* debug() (método unittest.TestCase):    Casos de teste.     (line  128)
* debug() (método unittest.TestSuite):   Grouping tests.     (line   48)
* debug() (no módulo doctest):           Depuração.          (line  124)
* debug() (no módulo logging):           Funções de nível de módulo.
                                                             (line   46)
* debuglevel (atributo http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   69)
* DebugRunner (classe em doctest):       Depuração.          (line  168)
* DECEMBER (no módulo calendar):         calendar — Funções gerais relacionadas ao calendário.
                                                             (line  507)
* Decimal (classe em decimal):           Objetos de Decimal. (line    6)
* decimal() (no módulo unicodedata):     unicodedata — Banco de dados de Unicode.
                                                             (line   51)
* DecimalException (classe em decimal):  Sinais.             (line   30)
* declaração de codificação (arquivo fonte): Declarações de codificação.
                                                             (line    6)
* decode (atributo codecs.CodecInfo):    codecs — Codec registry and base classes.
                                                             (line   78)
* decode_header() (no módulo email.header): email header Internationalized headers.
                                                             (line  182)
* decode_params() (no módulo email.utils): email utils Utilitários diversos.
                                                             (line  226)
* decode_rfc2231() (no módulo email.utils): email utils Utilitários diversos.
                                                             (line  196)
* decode_source() (no módulo importlib.util): importlib util – Utility code for importers.
                                                             (line   74)
* decode() (método bytearray):           Operações com Bytes e Bytearray.
                                                             (line   93)
* decode() (método bytes):               Operações com Bytes e Bytearray.
                                                             (line   93)
* decode() (método codecs.Codec):        Stateless Encoding and Decoding.
                                                             (line   29)
* decode() (método codecs.IncrementalDecoder): IncrementalDecoder Objects.
                                                             (line   28)
* decode() (método json.JSONDecoder):    Codificadores e decodificadores.
                                                             (line   89)
* decode() (método xmlrpc.client.Binary): Objetos Binários.  (line   20)
* decode() (método xmlrpc.client.DateTime): Objetos DateTime.
                                                             (line   13)
* decode() (no módulo base64):           Legacy Interface.   (line    6)
* decode() (no módulo codecs):           codecs — Codec registry and base classes.
                                                             (line   34)
* decode() (no módulo quopri):           quopri — Codifica e decodifica dados MIME imprimidos entre aspas.
                                                             (line   19)
* decodebytes() (no módulo base64):      Legacy Interface.   (line   13)
* DecodedGenerator (classe em email.generator): email generator Geração de documentos MIME.
                                                             (line  240)
* decodestring() (no módulo quopri):     quopri — Codifica e decodifica dados MIME imprimidos entre aspas.
                                                             (line   43)
* decomposition() (no módulo unicodedata): unicodedata — Banco de dados de Unicode.
                                                             (line  124)
* decompress() (método bz2.BZ2Decompressor): Des compressão incremental.
                                                             (line   45)
* decompress() (método lzma.LZMADecompressor): Comprimindo e descomprimindo dados na memória.
                                                             (line  136)
* decompress() (método zlib.Decompress): zlib — Compactação compatível com gzip.
                                                             (line  274)
* decompress() (no módulo bz2):          De compressão de uma só vez one-shot.
                                                             (line   15)
* decompress() (no módulo gzip):         gzip — Suporte para arquivos gzip.
                                                             (line  220)
* decompress() (no módulo lzma):         Comprimindo e descomprimindo dados na memória.
                                                             (line  198)
* decompress() (no módulo zlib):         zlib — Compactação compatível com gzip.
                                                             (line  140)
* decompressobj() (no módulo zlib):      zlib — Compactação compatível com gzip.
                                                             (line  187)
* decorador:                             Glossário.          (line  441)
* DEDENT (no módulo token):              token — Constantes usadas com árvores de análises do Python.
                                                             (line   94)
* dedent() (no módulo textwrap):         textwrap — Quebra automática e preenchimento de texto.
                                                             (line   80)
* deepcopy() (no módulo copy):           copy — Operações de cópia profunda e cópia rasa.
                                                             (line   22)
* DEF_BUF_SIZE (no módulo zlib):         zlib — Compactação compatível com gzip.
                                                             (line  333)
* DEF_MEM_LEVEL (no módulo zlib):        zlib — Compactação compatível com gzip.
                                                             (line  329)
* def_prog_mode() (no módulo curses):    Funções<6>.         (line   70)
* def_shell_mode() (no módulo curses):   Funções<6>.         (line   77)
* default (atributo inspect.Parameter):  Introspecting callables with the Signature object.
                                                             (line  217)
* default (atributo optparse.Option):    Atributos da classe Option.
                                                             (line   45)
* default (no módulo email.policy):      email policy Policy Objects.
                                                             (line  504)
* DEFAULT (no módulo unittest.mock):     DEFAULT.            (line    6)
* DEFAULT_BUFFER_SIZE (no módulo io):    Interface de alto nível do módulo.
                                                             (line    6)
* default_bufsize (no módulo xml.dom.pulldom): xml dom pulldom — Suporte para construir árvores parciais de DOM.
                                                             (line  106)
* default_exception_handler() (método asyncio.loop): Tratando erros da API.
                                                             (line   36)
* default_factory (atributo collections.defaultdict): Objetos defaultdict.
                                                             (line   50)
* DEFAULT_FORMAT (no módulo tarfile):    tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  355)
* DEFAULT_IGNORES (no módulo filecmp):   A classe dircmp.    (line  118)
* default_loader() (no módulo xml.etree.ElementInclude): Funções<10>.
                                                             (line    6)
* default_max_str_digits (atributo sys.int_info): sys — Parâmetros e funções específicas do sistema.
                                                             (line 1215)
* default_open() (método urllib.request.BaseHandler): BaseHandler Objects.
                                                             (line   30)
* DEFAULT_PROTOCOL (no módulo pickle):   Interface do módulo.
                                                             (line   21)
* DEFAULT_TIMEOUT (atributo unittest.mock.ThreadingMock): A classe Mock.
                                                             (line 1003)
* default_timer() (no módulo timeit):    Interface em Python.
                                                             (line   35)
* default;parâmetro;valor:               Definições de função.
                                                             (line   69)
* default() (método cmd.Cmd):            Objetos Cmd.        (line   79)
* default() (método json.JSONEncoder):   Codificadores e decodificadores.
                                                             (line  208)
* DefaultContext (no módulo decimal):    Objetos de contexto.
                                                             (line   92)
* DefaultCookiePolicy (classe em http.cookiejar): http cookiejar — Cookie handling for HTTP clients.
                                                             (line   82)
* defaultdict (classe em collections):   Objetos defaultdict.
                                                             (line    6)
* DefaultDict (classe em typing):        Apelidos para tipos em collections.
                                                             (line    6)
* DefaultEventLoopPolicy (classe em asyncio): Policy Objects.
                                                             (line   54)
* DefaultHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  401)
* DefaultHandlerExpand() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  408)
* defaults() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  119)
* DefaultSelector (classe em selectors): Classes<4>.         (line  161)
* defaultTestLoader (no módulo unittest): Carregando e executando testes.
                                                             (line  460)
* defaultTestResult() (método unittest.TestCase): Casos de teste.
                                                             (line  765)
* defects (atributo email.headerregistry.BaseHeader): email headerregistry Custom Header Objects.
                                                             (line   52)
* defects (atributo email.message.EmailMessage): email message Representing an email message.
                                                             (line  713)
* defects (atributo email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  728)
* definida por usuário;função:           Funções definidas pelo usuário.
                                                             (line    6)
* definida por usuário;função;chamada:   Chamadas.           (line  138)
* definida por usuário;método:           Métodos de instância.
                                                             (line    6)
* DEFLATED (no módulo zlib):             zlib — Compactação compatível com gzip.
                                                             (line  319)
* defpath (no módulo os):                Diversas informações de sistema.
                                                             (line  149)
* DefragResult (classe em urllib.parse): Structured Parse Results.
                                                             (line   40)
* DefragResultBytes (classe em urllib.parse): Structured Parse Results.
                                                             (line   65)
* degrees() (no módulo math):            Conversão angular.  (line    6)
* degrees() (no módulo turtle):          Configurações de medida.
                                                             (line    6)
* Del (classe em ast):                   Variáveis.          (line   11)
* DEL (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line  129)
* del_param() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  384)
* del_param() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  546)
* delay_output() (no módulo curses):     Funções<6>.         (line   85)
* delay() (no módulo turtle):            Controle da animação.
                                                             (line    6)
* delayload (atributo http.cookiejar.FileCookieJar): CookieJar and FileCookieJar Objects.
                                                             (line  159)
* delch() (método curses.window):        Window Objects.     (line  179)
* dele() (método poplib.POP3):           Objetos POP3.       (line   68)
* Delete (classe em ast):                Instruções.         (line  138)
* DELETE_ATTR (opcode):                  Instruções em bytecode do Python.
                                                             (line  628)
* DELETE_DEREF (opcode):                 Instruções em bytecode do Python.
                                                             (line 1019)
* DELETE_FAST (opcode):                  Instruções em bytecode do Python.
                                                             (line  980)
* DELETE_GLOBAL (opcode):                Instruções em bytecode do Python.
                                                             (line  643)
* DELETE_NAME (opcode):                  Instruções em bytecode do Python.
                                                             (line  582)
* DELETE_SUBSCR (opcode):                Instruções em bytecode do Python.
                                                             (line  276)
* delete() (método ftplib.FTP):          FTP objects.        (line  329)
* delete() (método imaplib.IMAP4):       Objetos IMAP4.      (line   76)
* delete() (método tkinter.ttk.Treeview): ttk Treeview.      (line   73)
* deleteacl() (método imaplib.IMAP4):    Objetos IMAP4.      (line   80)
* deletefilehandler() (método _tkinter.Widget.tk): Tratadores de arquivos.
                                                             (line   39)
* DeleteKey() (no módulo winreg):        Funções<13>.        (line  102)
* DeleteKeyEx() (no módulo winreg):      Funções<13>.        (line  124)
* deleteln() (método curses.window):     Window Objects.     (line  183)
* deleteMe() (método bdb.Breakpoint):    bdb — Framework do depurador.
                                                             (line   45)
* DeleteValue() (no módulo winreg):      Funções<13>.        (line  161)
* delimitadores:                         Delimitadores.      (line    6)
* delimiter (atributo csv.Dialect):      Dialetos e parâmetros de formatação.
                                                             (line   19)
* delitem() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  196)
* deliver_challenge() (no módulo multiprocessing.connection): Listeners and Clients.
                                                             (line   15)
* delocalize() (no módulo locale):       locale — Serviços de internacionalização.
                                                             (line  511)
* demo_app() (no módulo wsgiref.simple_server): wsgiref simple_server – um servidor HTTP WSGI simples.
                                                             (line   36)
* denominator (atributo fractions.Fraction): fractions — Números racionais.
                                                             (line  120)
* denominator (atributo numbers.Rational): A torre numérica. (line   55)
* deprecated() (no módulo warnings):     Funções disponíveis.
                                                             (line  140)
* DeprecationWarning:                    Avisos.             (line   17)
* depuração:                             pdb — O depurador do Python.
                                                             (line    8)
* depuração;asserções:                   A instrução assert. (line    6)
* depurador:                             Referência<2>.      (line  135)
* depurador <1>:                         Debug menu Shell window only.
                                                             (line   15)
* depurador <2>:                         sys — Parâmetros e funções específicas do sistema.
                                                             (line  993)
* depurador <3>:                         sys — Parâmetros e funções específicas do sistema.
                                                             (line 1677)
* depurador;configuração;arquivo:        Comandos de depuração.
                                                             (line   63)
* deque (classe em collections):         Objetos deque.      (line    6)
* Deque (classe em typing):              Apelidos para tipos em collections.
                                                             (line   49)
* dequeue() (método logging.handlers.QueueListener): QueueListener.
                                                             (line   50)
* DER_cert_to_PEM_cert() (no módulo ssl): Manipulação de certificados.
                                                             (line   52)
* derive() (método BaseExceptionGroup):  Grupos de exceções. (line   82)
* derwin() (método curses.window):       Window Objects.     (line  188)
* descrgetfunc (C type):                 Slot Type typedefs. (line   69)
* description (atributo inspect.Parameter.kind): Introspecting callables with the Signature object.
                                                             (line  283)
* description (atributo sqlite3.Cursor): Cursor objects.     (line  195)
* descritor:                             Glossário.          (line  464)
* descrsetfunc (C type):                 Slot Type typedefs. (line   73)
* desempacotamento;dicionário:           Sintaxes de criação de dicionário.
                                                             (line   24)
* desempacotamento;em chamadas de função: Chamadas.          (line   76)
* Desempenho:                            timeit — Mede o tempo de execução de pequenos trechos de código.
                                                             (line    8)
* deserialize() (método sqlite3.Connection): Connection objects.
                                                             (line  698)
* desligamento do interpretador:         Glossário.          (line  899)
* deslocamento;operação:                 Operações de deslocamento.
                                                             (line    6)
* deslocamento;operações:                Operações de bits em tipos inteiros.
                                                             (line    6)
* despacho único:                        Glossário.          (line 1603)
* dest (atributo optparse.Option):       Atributos da classe Option.
                                                             (line   36)
* destructor (C type):                   Slot Type typedefs. (line   24)
* destrutor:                             Personalização básica.
                                                             (line   58)
* destrutor <1>:                         Instruções de atribuição.
                                                             (line   73)
* desvinculação;nome:                    A instrução del<2>. (line   15)
* detach() (método io.BufferedIOBase):   I/O Base Classes.   (line  259)
* detach() (método io.TextIOBase):       E/S de texto<2>.    (line   37)
* detach() (método socket.socket):       Socket Objects.     (line  100)
* detach() (método tkinter.ttk.Treeview): ttk Treeview.      (line   79)
* detach() (método weakref.finalize):    weakref — Referências fracas.
                                                             (line  314)
* Detach() (método winreg.PyHKEY):       Objetos identificador de registro.
                                                             (line   38)
* DETACHED_PROCESS (no módulo subprocess): Constantes do Windows.
                                                             (line  122)
* detect_api_mismatch() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  654)
* detect_encoding() (no módulo tokenize): Tokenizando entradas.
                                                             (line   80)
* deterministic profiling:               Introdução aos profilers.
                                                             (line    6)
* dev_mode (atributo sys.flags):         sys — Parâmetros e funções específicas do sistema.
                                                             (line  592)
* device_encoding() (no módulo os):      Operações dos descritores de arquivos.
                                                             (line   83)
* devmajor (atributo tarfile.TarInfo):   Objetos TarInfo.    (line  141)
* devminor (atributo tarfile.TarInfo):   Objetos TarInfo.    (line  145)
* devnull (no módulo os):                Diversas informações de sistema.
                                                             (line  164)
* DEVNULL (no módulo subprocess):        Usando o módulo subprocess.
                                                             (line  146)
* devpoll() (no módulo select):          select — Waiting for I/O completion.
                                                             (line   37)
* DevpollSelector (classe em selectors): Classes<4>.         (line  184)
* dgettext() (no módulo gettext):        API do GNU gettext. (line   39)
* dgettext() (no módulo locale):         Acesso a catálogos de mensagens.
                                                             (line    8)
* dialect (atributo csv.csvreader):      Objetos Reader.     (line   20)
* dialect (atributo csv.csvwriter):      Objetos Writer.     (line   32)
* Dialect (classe em csv):               Conteúdo do módulo<3>.
                                                             (line  196)
* Dialog (classe em tkinter.commondialog): tkinter commondialog — Modelos de janela de diálogo.
                                                             (line   14)
* Dialog (classe em tkinter.simpledialog): tkinter simpledialog — Diálogos de entrada padrão do Tkinter.
                                                             (line   21)
* dica de metaclasse:                    Determinando a metaclasse apropriada.
                                                             (line    6)
* dica de tipo:                          Glossário.          (line 1784)
* dicionário:                            Glossário.          (line  482)
* dicionário;compreensões:               Sintaxes de criação de dicionário.
                                                             (line    6)
* dicionário;sintaxe de criação:         Sintaxes de criação de dicionário.
                                                             (line    6)
* Dict (classe em ast):                  Literais<3>.        (line  105)
* Dict (classe em typing):               Apelidos de tipos embutidos.
                                                             (line    6)
* dict (classe interna):                 Tipo mapeamento — dict.
                                                             (line   19)
* DICT_MERGE (opcode):                   Instruções em bytecode do Python.
                                                             (line  756)
* DICT_UPDATE (opcode):                  Instruções em bytecode do Python.
                                                             (line  745)
* dict() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  224)
* DictComp (classe em ast):              Compreensões.       (line    6)
* dictConfig() (no módulo logging.config): Funções de configuração.
                                                             (line   13)
* DictReader (classe em csv):            Conteúdo do módulo<3>.
                                                             (line  110)
* DictWriter (classe em csv):            Conteúdo do módulo<3>.
                                                             (line  158)
* diff_bytes() (no módulo difflib):      difflib — Helpers for computing deltas.
                                                             (line  337)
* diff_files (atributo filecmp.dircmp):  A classe dircmp.    (line   96)
* Differ (classe em difflib):            difflib — Helpers for computing deltas.
                                                             (line   50)
* difference_update() (método set):      Tipo conjuntos — set frozenset.
                                                             (line  196)
* difference() (método frozenset):       Tipo conjuntos — set frozenset.
                                                             (line  119)
* difference() (método set):             Tipo conjuntos — set frozenset.
                                                             (line  119)
* dig (atributo sys.float_info):         sys — Parâmetros e funções específicas do sistema.
                                                             (line  656)
* digest_size (atributo hmac.HMAC):      hmac — Código de autenticação de mensagem com chave hash.
                                                             (line   95)
* digest() (método hashlib.hash):        Objetos hash.       (line   38)
* digest() (método hashlib.shake):       Resumos de comprimento variável de SHAKE.
                                                             (line   15)
* digest() (método hmac.HMAC):           hmac — Código de autenticação de mensagem com chave hash.
                                                             (line   61)
* digest() (no módulo hmac):             hmac — Código de autenticação de mensagem com chave hash.
                                                             (line   33)
* digit() (no módulo unicodedata):       unicodedata — Banco de dados de Unicode.
                                                             (line   62)
* digits (no módulo string):             Constantes de strings.
                                                             (line   24)
* dir() (método ftplib.FTP):             FTP objects.        (line  311)
* dircmp (classe em filecmp):            A classe dircmp.    (line    6)
* Directory (classe em tkinter.filedialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line   72)
* DirEntry (classe em os):               Arquivos e diretórios.
                                                             (line  958)
* diretório;alteração:                   Arquivos e diretórios.
                                                             (line  123)
* diretório;criação:                     Arquivos e diretórios.
                                                             (line  571)
* diretório;exclusão:                    Operações de diretório e arquivos.
                                                             (line  287)
* diretório;exclusão <1>:                Arquivos e diretórios.
                                                             (line  771)
* diretório;percorrer:                   Arquivos e diretórios.
                                                             (line 1735)
* diretório;percorrer <1>:               Arquivos e diretórios.
                                                             (line 1840)
* diretório;traversal:                   Arquivos e diretórios.
                                                             (line 1735)
* diretório;traversal <1>:               Arquivos e diretórios.
                                                             (line 1840)
* dirname() (no módulo os.path):         os path — Manipulações comuns de nomes de caminhos.
                                                             (line  114)
* dirs_double_event() (método tkinter.filedialog.FileDialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line   88)
* dirs_select_event() (método tkinter.filedialog.FileDialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line   93)
* DirsOnSysPath (classe em test.support.import_helper): test support import_helper — Utilities for import tests.
                                                             (line   97)
* DIRTYPE (no módulo tarfile):           tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  315)
* dis opção de linha de comando; -C:     Interface de linha de comando<16>.
                                                             (line   17)
* dis opção de linha de comando; -h:     Interface de linha de comando<16>.
                                                             (line   13)
* dis opção de linha de comando; -help:  Interface de linha de comando<16>.
                                                             (line   13)
* dis opção de linha de comando; -O:     Interface de linha de comando<16>.
                                                             (line   23)
* dis opção de linha de comando; -show-caches: Interface de linha de comando<16>.
                                                             (line   17)
* dis opção de linha de comando; -show-offsets: Interface de linha de comando<16>.
                                                             (line   23)
* dis() (método dis.Bytecode):           Análise de bytecode.
                                                             (line   62)
* dis() (no módulo dis):                 Funções de análise. (line   40)
* dis() (no módulo pickletools):         Interface programática<2>.
                                                             (line    6)
* DISABLE (no módulo sys.monitoring):    Desativação de eventos.
                                                             (line    6)
* disable (pdb command):                 Comandos de depuração.
                                                             (line  144)
* disable_faulthandler() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  367)
* disable_gc() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  380)
* disable_interspersed_args() (método optparse.OptionParser): Consultando e manipulando seu analisador sintático de opções.
                                                             (line   11)
* disable() (método bdb.Breakpoint):     bdb — Framework do depurador.
                                                             (line   55)
* disable() (método profile.Profile):    profile and cProfile Module Reference.
                                                             (line   84)
* disable() (no módulo faulthandler):    Fault handler state.
                                                             (line   26)
* disable() (no módulo gc):              gc — Interface para o coletor de lixo.
                                                             (line   26)
* disable() (no módulo logging):         Funções de nível de módulo.
                                                             (line  105)
* disabled (atributo logging.Logger):    Objetos Logger.     (line  102)
* DisableReflectionKey() (no módulo winreg): Funções<13>.    (line  492)
* disassemble() (no módulo dis):         Funções de análise. (line   99)
* discard (atributo http.cookiejar.Cookie): Objetos Cookie<2>.
                                                             (line   58)
* discard() (método mailbox.Mailbox):    Objetos Mailbox.    (line   77)
* discard() (método mailbox.MH):         MH objects.         (line   79)
* discard() (método set):                Tipo conjuntos — set frozenset.
                                                             (line  218)
* discover() (método unittest.TestLoader): Carregando e executando testes.
                                                             (line  119)
* disk_usage() (no módulo shutil):       Operações de diretório e arquivos.
                                                             (line  406)
* dispatch_call() (método bdb.Bdb):      bdb — Framework do depurador.
                                                             (line  216)
* dispatch_exception() (método bdb.Bdb): bdb — Framework do depurador.
                                                             (line  236)
* dispatch_line() (método bdb.Bdb):      bdb — Framework do depurador.
                                                             (line  206)
* dispatch_return() (método bdb.Bdb):    bdb — Framework do depurador.
                                                             (line  226)
* dispatch_table (atributo pickle.Pickler): Interface do módulo.
                                                             (line  188)
* DISPLAY:                               Módulos Tkinter.    (line   29)
* display (pdb command):                 Comandos de depuração.
                                                             (line  311)
* display_name (atributo email.headerregistry.Address): email headerregistry Custom Header Objects.
                                                             (line  426)
* display_name (atributo email.headerregistry.Group): email headerregistry Custom Header Objects.
                                                             (line  471)
* displayhook() (no módulo sys):         sys — Parâmetros e funções específicas do sistema.
                                                             (line  311)
* dist() (no módulo math):               Funções de soma e produto.
                                                             (line    6)
* distance() (no módulo turtle):         Fala o estado de Turtle.
                                                             (line   68)
* distb() (no módulo dis):               Funções de análise. (line   82)
* Distribution (classe em importlib.metadata): Distribuições.
                                                             (line   15)
* distribution() (no módulo importlib.metadata): Distribuições.
                                                             (line    6)
* Div (classe em ast):                   Expressões<2>.      (line   54)
* divide_int() (método decimal.Context): Objetos de contexto.
                                                             (line  315)
* divide() (método decimal.Context):     Objetos de contexto.
                                                             (line  311)
* divisão:                               Operações binárias aritméticas.
                                                             (line   35)
* divisão pelo piso:                     Glossário.          (line  629)
* division (no módulo __future__):       Conteúdo do módulo<9>.
                                                             (line   22)
* DivisionByZero (classe em decimal):    Sinais.             (line   35)
* divmod() (método decimal.Context):     Objetos de contexto.
                                                             (line  319)
* DLE (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   77)
* DllCanUnloadNow() (no módulo ctypes):  Funções utilitárias.
                                                             (line   95)
* DllGetClassObject() (no módulo ctypes): Funções utilitárias.
                                                             (line  103)
* dllhandle (no módulo sys):             sys — Parâmetros e funções específicas do sistema.
                                                             (line  305)
* dnd_start() (no módulo tkinter.dnd):   tkinter dnd — Suporte para arrastar e soltar.
                                                             (line   69)
* DndHandler (classe em tkinter.dnd):    tkinter dnd — Suporte para arrastar e soltar.
                                                             (line   45)
* dngettext() (no módulo gettext):       API do GNU gettext. (line   58)
* dnpgettext() (no módulo gettext):      API do GNU gettext. (line   69)
* Do inglês; Cyclic Redundancy Check:    zlib — Compactação compatível com gzip.
                                                             (line  127)
* do_clear() (método bdb.Bdb):           bdb — Framework do depurador.
                                                             (line  301)
* do_command() (método curses.textpad.Textbox): Textbox objects.
                                                             (line   30)
* do_GET() (método http.server.SimpleHTTPRequestHandler): http server — HTTP servers.
                                                             (line  385)
* do_handshake() (método ssl.SSLSocket): SSL Sockets.        (line  126)
* do_HEAD() (método http.server.SimpleHTTPRequestHandler): http server — HTTP servers.
                                                             (line  378)
* do_help() (método cmd.Cmd):            Objetos Cmd.        (line   50)
* do_POST() (método http.server.CGIHTTPRequestHandler): http server — HTTP servers.
                                                             (line  473)
* doc (atributo json.JSONDecodeError):   Exceções<17>.       (line   15)
* doc_header (atributo cmd.Cmd):         Objetos Cmd.        (line  158)
* DocCGIXMLRPCRequestHandler (classe em xmlrpc.server): Documentando servidor XMLRPC.
                                                             (line   24)
* DocFileSuite() (no módulo doctest):    API do Unittest.    (line   24)
* doClassCleanups() (método de classe unittest.TestCase): Casos de teste.
                                                             (line  859)
* doCleanups() (método unittest.TestCase): Casos de teste.   (line  817)
* docmd() (método smtplib.SMTP):         Objetos SMTP.       (line   17)
* docstring:                             Definições de classe.
                                                             (line    6)
* docstring <1>:                         Glossário.          (line  507)
* docstring (atributo doctest.DocTest):  DocTest Objects.    (line   49)
* docstrings:                            Definindo funções.  (line   21)
* docstrings <1>:                        Strings de documentação.
                                                             (line    6)
* DocTest (classe em doctest):           DocTest Objects.    (line    6)
* doctest opção de linha de comando; -f: Uso na linha de comando<6>.
                                                             (line   36)
* doctest opção de linha de comando; -fail-fast: Uso na linha de comando<6>.
                                                             (line   36)
* doctest opção de linha de comando; -o: Uso na linha de comando<6>.
                                                             (line   28)
* doctest opção de linha de comando; -option: Uso na linha de comando<6>.
                                                             (line   28)
* doctest opção de linha de comando; -v: Uso na linha de comando<6>.
                                                             (line   11)
* doctest opção de linha de comando; -verbose: Uso na linha de comando<6>.
                                                             (line   11)
* DocTestFailure:                        Depuração.          (line  186)
* DocTestFinder (classe em doctest):     DocTestFinder objects.
                                                             (line    6)
* DocTestParser (classe em doctest):     DocTestParser objects.
                                                             (line    6)
* DocTestRunner (classe em doctest):     DocTestRunner objects.
                                                             (line    6)
* DocTestSuite() (no módulo doctest):    API do Unittest.    (line  100)
* doctype() (método xml.etree.ElementTree.TreeBuilder): TreeBuilder Objects.
                                                             (line   67)
* documentação;geração:                  pydoc — Gerador de documentação e sistema de ajuda online.
                                                             (line    8)
* documentação;online:                   pydoc — Gerador de documentação e sistema de ajuda online.
                                                             (line    8)
* documentElement (atributo xml.dom.Document): Document Objects.
                                                             (line   10)
* DocXMLRPCRequestHandler (classe em xmlrpc.server): Documentando servidor XMLRPC.
                                                             (line   29)
* DocXMLRPCServer (classe em xmlrpc.server): Documentando servidor XMLRPC.
                                                             (line   11)
* does_esmtp (atributo smtplib.SMTP):    Objetos SMTP.       (line  361)
* domain (atributo email.headerregistry.Address): email headerregistry Custom Header Objects.
                                                             (line  437)
* domain (atributo http.cookiejar.Cookie): Objetos Cookie<2>.
                                                             (line   41)
* domain (atributo http.cookies.Morsel): Objetos Morsel.     (line   13)
* domain (atributo tracemalloc.DomainFilter): DomainFilter.  (line   20)
* domain (atributo tracemalloc.Filter):  Filter.             (line   31)
* domain (atributo tracemalloc.Trace):   Trace.              (line   15)
* domain_initial_dot (atributo http.cookiejar.Cookie): Objetos Cookie<2>.
                                                             (line   90)
* domain_return_ok() (método http.cookiejar.CookiePolicy): Objeto CookiePolicy.
                                                             (line   27)
* domain_specified (atributo http.cookiejar.Cookie): Objetos Cookie<2>.
                                                             (line   86)
* DomainFilter (classe em tracemalloc):  DomainFilter.       (line    6)
* DomainLiberal (atributo http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line  156)
* DomainRFC2965Match (atributo http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line  149)
* DomainStrict (atributo http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line  161)
* DomainStrictNoDots (atributo http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line  136)
* DomainStrictNonDomain (atributo http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line  142)
* DOMEventStream (classe em xml.dom.pulldom): Objetos DOMEventStream.
                                                             (line    6)
* DOMException:                          Exceções<20>.       (line   18)
* doModuleCleanups() (no módulo unittest): setUpModule and tearDownModule.
                                                             (line   45)
* DomstringSizeErr:                      Exceções<20>.       (line   23)
* done() (método asyncio.Future):        Objeto Future.      (line   65)
* done() (método asyncio.Task):          Objeto Task.        (line   69)
* done() (método concurrent.futures.Future): Future Objects. (line   32)
* done() (método graphlib.TopologicalSorter): graphlib — Funcionalidade para operar com estruturas do tipo grafo.
                                                             (line  137)
* done() (no módulo turtle):             Usando os eventos de tela.
                                                             (line  106)
* DONT_ACCEPT_BLANKLINE (no módulo doctest): Flags opcionais.
                                                             (line   28)
* DONT_ACCEPT_TRUE_FOR_1 (no módulo doctest): Flags opcionais.
                                                             (line   16)
* dont_write_bytecode (atributo sys.flags): sys — Parâmetros e funções específicas do sistema.
                                                             (line  568)
* dont_write_bytecode (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line  349)
* doRollover() (método logging.handlers.RotatingFileHandler): RotatingFileHandler.
                                                             (line   46)
* doRollover() (método logging.handlers.TimedRotatingFileHandler): TimedRotatingFileHandler.
                                                             (line  114)
* DOT (no módulo token):                 token — Constantes usadas com árvores de análises do Python.
                                                             (line  228)
* dot() (no módulo turtle):              Movimentos de Turtle.
                                                             (line  256)
* DOTALL (no módulo re):                 Sinalizadores.      (line  112)
* doublequote (atributo csv.Dialect):    Dialetos e parâmetros de formatação.
                                                             (line   24)
* DOUBLESLASH (no módulo token):         token — Constantes usadas com árvores de análises do Python.
                                                             (line  300)
* DOUBLESLASHEQUAL (no módulo token):    token — Constantes usadas com árvores de análises do Python.
                                                             (line  303)
* DOUBLESTAR (no módulo token):          token — Constantes usadas com árvores de análises do Python.
                                                             (line  264)
* DOUBLESTAREQUAL (no módulo token):     token — Constantes usadas com árvores de análises do Python.
                                                             (line  297)
* doupdate() (no módulo curses):         Funções<6>.         (line   89)
* down (pdb command):                    Comandos de depuração.
                                                             (line   93)
* down() (no módulo turtle):             Estado do Desenho.  (line    6)
* dpgettext() (no módulo gettext):       API do GNU gettext. (line   65)
* drain() (método asyncio.StreamWriter): StreamWriter.       (line   70)
* drive (atributo pathlib.PurePath):     Métodos e propriedades.
                                                             (line   15)
* drop_whitespace (atributo textwrap.TextWrapper): textwrap — Quebra automática e preenchimento de texto.
                                                             (line  210)
* dropwhile() (no módulo itertools):     Funções do intertools.
                                                             (line  271)
* dst() (método datetime.datetime):      Objetos datetime.   (line  555)
* dst() (método datetime.time):          Objetos time.       (line  255)
* dst() (método datetime.timezone):      Objetos timezone.   (line   59)
* dst() (método datetime.tzinfo):        Objetos tzinfo.     (line   70)
* DTDHandler (classe em xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line   24)
* dump_stats() (método profile.Profile): profile and cProfile Module Reference.
                                                             (line  107)
* dump_stats() (método pstats.Stats):    A classe Stats.     (line   59)
* dump_traceback_later() (no módulo faulthandler): Dumping the tracebacks after a timeout.
                                                             (line    6)
* dump_traceback() (no módulo faulthandler): Dumping the traceback.
                                                             (line    6)
* dump() (método pickle.Pickler):        Interface do módulo.
                                                             (line  163)
* dump() (método tracemalloc.Snapshot):  Snapshot.           (line   29)
* dump() (no módulo ast):                Auxiliares de ast.  (line  276)
* dump() (no módulo json):               Uso básico<2>.      (line    6)
* dump() (no módulo marshal):            marshal — Serialização interna de objetos Python.
                                                             (line   55)
* dump() (no módulo pickle):             Interface do módulo.
                                                             (line   36)
* dump() (no módulo plistlib):           plistlib — Gera e analisa arquivos Apple plist.
                                                             (line   95)
* dump() (no módulo xml.etree.ElementTree): Funções<9>.      (line   86)
* dumps() (no módulo json):              Uso básico<2>.      (line   96)
* dumps() (no módulo marshal):           marshal — Serialização interna de objetos Python.
                                                             (line  100)
* dumps() (no módulo pickle):            Interface do módulo.
                                                             (line   49)
* dumps() (no módulo plistlib):          plistlib — Gera e analisa arquivos Apple plist.
                                                             (line  133)
* dumps() (no módulo xmlrpc.client):     Convenience Functions.
                                                             (line    6)
* dunder:                                Glossário.          (line  532)
* dup() (método socket.socket):          Socket Objects.     (line  108)
* dup() (no módulo os):                  Operações dos descritores de arquivos.
                                                             (line   95)
* dup2() (no módulo os):                 Operações dos descritores de arquivos.
                                                             (line  108)
* DuplicateOptionError:                  Exceções<8>.        (line   25)
* DuplicateSectionError:                 Exceções<8>.        (line   15)
* dwFlags (atributo subprocess.STARTUPINFO): Windows Popen Helpers.
                                                             (line   19)
* DynamicClassAttribute() (no módulo types): Classes e funções de utilidades adicionais.
                                                             (line   55)
* e (no módulo cmath):                   Constantes<3>.      (line   10)
* e (no módulo math):                    Constantes<2>.      (line   10)
* e;em literal númerico:                 Inteiros literais.  (line   40)
* E/S com buffer de linha:               Funções embutidas<3>.
                                                             (line 1522)
* E/S sem buffer:                        Funções embutidas<3>.
                                                             (line 1522)
* E2BIG (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line   54)
* EACCES (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line   80)
* EADDRINUSE (no módulo errno):          errno — Símbolos padrão do sistema errno.
                                                             (line  432)
* EADDRNOTAVAIL (no módulo errno):       errno — Símbolos padrão do sistema errno.
                                                             (line  436)
* EADV (no módulo errno):                errno — Símbolos padrão do sistema errno.
                                                             (line  306)
* EAFNOSUPPORT (no módulo errno):        errno — Símbolos padrão do sistema errno.
                                                             (line  428)
* EAFP:                                  Glossário.          (line  539)
* EAGAIN (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line   71)
* eager_task_factory() (no módulo asyncio): Fábrica de tarefas ansiosas.
                                                             (line    6)
* EALREADY (no módulo errno):            errno — Símbolos padrão do sistema errno.
                                                             (line  501)
* east_asian_width() (no módulo unicodedata): unicodedata — Banco de dados de Unicode.
                                                             (line  108)
* EAUTH (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line  581)
* EBADARCH (no módulo errno):            errno — Símbolos padrão do sistema errno.
                                                             (line  587)
* EBADE (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line  242)
* EBADEXEC (no módulo errno):            errno — Símbolos padrão do sistema errno.
                                                             (line  593)
* EBADF (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line   62)
* EBADFD (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  342)
* EBADMACHO (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  599)
* EBADMSG (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  330)
* EBADR (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line  246)
* EBADRPC (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  665)
* EBADRQC (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  258)
* EBADSLT (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  262)
* EBFONT (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  270)
* EBUSY (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line   93)
* ECANCELED (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  692)
* ECHILD (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line   66)
* echo() (no módulo curses):             Funções<6>.         (line  105)
* echochar() (método curses.window):     Window Objects.     (line  198)
* ECHRNG (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  210)
* ECOMM (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line  314)
* ECONNABORTED (no módulo errno):        errno — Símbolos padrão do sistema errno.
                                                             (line  452)
* ECONNREFUSED (no módulo errno):        errno — Símbolos padrão do sistema errno.
                                                             (line  488)
* ECONNRESET (no módulo errno):          errno — Símbolos padrão do sistema errno.
                                                             (line  457)
* EDEADLK (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  173)
* EDEADLOCK (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  266)
* EDESTADDRREQ (no módulo errno):        errno — Símbolos padrão do sistema errno.
                                                             (line  390)
* EDEVERR (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  605)
* edit() (método curses.textpad.Textbox): Textbox objects.   (line   19)
* EDOM (no módulo errno):                errno — Símbolos padrão do sistema errno.
                                                             (line  165)
* EDOTDOT (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  326)
* EDQUOT (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  535)
* EEXIST (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line   97)
* EFAULT (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line   85)
* EFBIG (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line  140)
* EFD_CLOEXEC (no módulo os):            Arquivos e diretórios.
                                                             (line 2021)
* EFD_NONBLOCK (no módulo os):           Arquivos e diretórios.
                                                             (line 2030)
* EFD_SEMAPHORE (no módulo os):          Arquivos e diretórios.
                                                             (line 2039)
* effective() (no módulo bdb):           bdb — Framework do depurador.
                                                             (line  478)
* EFTYPE (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  611)
* ehlo_or_helo_if_needed() (método smtplib.SMTP): Objetos SMTP.
                                                             (line   75)
* ehlo_resp (atributo smtplib.SMTP):     Objetos SMTP.       (line  357)
* ehlo() (método smtplib.SMTP):          Objetos SMTP.       (line   58)
* EHOSTDOWN (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  493)
* EHOSTUNREACH (no módulo errno):        errno — Símbolos padrão do sistema errno.
                                                             (line  497)
* EIDRM (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line  206)
* EILSEQ (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  370)
* EINPROGRESS (no módulo errno):         errno — Símbolos padrão do sistema errno.
                                                             (line  506)
* EINTR (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line   41)
* EINVAL (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  120)
* EIO (no módulo errno):                 errno — Símbolos padrão do sistema errno.
                                                             (line   46)
* EISCONN (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  466)
* EISDIR (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  115)
* EISNAM (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  527)
* EJECT (atributo enum.FlagBoundary):    Tipos de Dados<2>.  (line  713)
* EKEYEXPIRED (no módulo errno):         errno — Símbolos padrão do sistema errno.
                                                             (line  557)
* EKEYREJECTED (no módulo errno):        errno — Símbolos padrão do sistema errno.
                                                             (line  565)
* EKEYREVOKED (no módulo errno):         errno — Símbolos padrão do sistema errno.
                                                             (line  561)
* EL2HLT (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  238)
* EL2NSYNC (no módulo errno):            errno — Símbolos padrão do sistema errno.
                                                             (line  214)
* EL3HLT (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  218)
* EL3RST (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  222)
* Element (classe em xml.etree.ElementTree): Element Objects.
                                                             (line    6)
* element_create() (método tkinter.ttk.Style): Ttk Styling.  (line  131)
* element_names() (método tkinter.ttk.Style): Ttk Styling.   (line  252)
* element_options() (método tkinter.ttk.Style): Ttk Styling. (line  256)
* ElementDeclHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  290)
* elements() (método collections.Counter): Objetos Counter.  (line   70)
* ElementTree (classe em xml.etree.ElementTree): ElementTree Objects.
                                                             (line    6)
* ELIBACC (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  350)
* ELIBBAD (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  354)
* ELIBEXEC (no módulo errno):            errno — Símbolos padrão do sistema errno.
                                                             (line  366)
* ELIBMAX (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  362)
* ELIBSCN (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  358)
* ELLIPSIS (no módulo doctest):          Flags opcionais.    (line   47)
* ELLIPSIS (no módulo token):            token — Constantes usadas com árvores de análises do Python.
                                                             (line  315)
* Ellipsis (variável interna):           Constantes embutidas.
                                                             (line   61)
* EllipsisType (no módulo types):        Tipos padrão do interpretador.
                                                             (line  146)
* ELNRNG (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  226)
* ELOCKUNMAPPED (no módulo errno):       errno — Símbolos padrão do sistema errno.
                                                             (line  573)
* ELOOP (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line  193)
* else;expressão condicional:            Expressões condicionais.
                                                             (line    6)
* EM (no módulo curses.ascii):           curses ascii — Utilitários para caracteres ASCII.
                                                             (line  105)
* EmailMessage (classe em email.message): email message Representing an email message.
                                                             (line   52)
* EmailPolicy (classe em email.policy):  email policy Policy Objects.
                                                             (line  360)
* Emax (atributo decimal.Context):       Objetos de contexto.
                                                             (line  142)
* embutido;método:                       Métodos embutidos.  (line    6)
* embutido;types:                        Tipos embutidos.    (line    9)
* EMEDIUMTYPE (no módulo errno):         errno — Símbolos padrão do sistema errno.
                                                             (line  549)
* EMFILE (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  128)
* Emin (atributo decimal.Context):       Objetos de contexto.
                                                             (line  142)
* emit() (método logging.FileHandler):   FileHandler.        (line   31)
* emit() (método logging.Handler):       Objetos Handler.    (line  109)
* emit() (método logging.handlers.BufferingHandler): MemoryHandler.
                                                             (line   24)
* emit() (método logging.handlers.DatagramHandler): DatagramHandler.
                                                             (line   29)
* emit() (método logging.handlers.HTTPHandler): HTTPHandler. (line   36)
* emit() (método logging.handlers.NTEventLogHandler): NTEventLogHandler.
                                                             (line   38)
* emit() (método logging.handlers.QueueHandler): QueueHandler.
                                                             (line   43)
* emit() (método logging.handlers.RotatingFileHandler): RotatingFileHandler.
                                                             (line   50)
* emit() (método logging.handlers.SMTPHandler): SMTPHandler. (line   35)
* emit() (método logging.handlers.SocketHandler): SocketHandler.
                                                             (line   24)
* emit() (método logging.handlers.SysLogHandler): SysLogHandler.
                                                             (line   62)
* emit() (método logging.handlers.TimedRotatingFileHandler): TimedRotatingFileHandler.
                                                             (line  118)
* emit() (método logging.handlers.WatchedFileHandler): WatchedFileHandler.
                                                             (line   54)
* emit() (método logging.NullHandler):   NullHandler.        (line   17)
* emit() (método logging.StreamHandler): StreamHandler.      (line   18)
* EMLINK (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  156)
* empacotamento (widgets):               O Empacotador.      (line    6)
* Empty:                                 queue — A synchronized queue class.
                                                             (line   82)
* empty (atributo inspect.Parameter):    Introspecting callables with the Signature object.
                                                             (line  200)
* empty (atributo inspect.Signature):    Introspecting callables with the Signature object.
                                                             (line  100)
* EMPTY_NAMESPACE (no módulo xml.dom):   Conteúdo do módulo<6>.
                                                             (line   35)
* empty() (método asyncio.Queue):        Queue.              (line   28)
* empty() (método multiprocessing.Queue): Encadeamentos e filas.
                                                             (line  125)
* empty() (método multiprocessing.SimpleQueue): Encadeamentos e filas.
                                                             (line  250)
* empty() (método queue.Queue):          Objetos Queue.      (line   15)
* empty() (método queue.SimpleQueue):    Objetos SimpleQueue.
                                                             (line   14)
* empty() (método sched.scheduler):      Objetos Scheduler.  (line   46)
* emptyline() (método cmd.Cmd):          Objetos Cmd.        (line   73)
* emscripten_version (atributo sys._emscripten_info): sys — Parâmetros e funções específicas do sistema.
                                                             (line  364)
* EMSGSIZE (no módulo errno):            errno — Símbolos padrão do sistema errno.
                                                             (line  394)
* EMULTIHOP (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  322)
* enable (pdb command):                  Comandos de depuração.
                                                             (line  153)
* enable_callback_tracebacks() (no módulo sqlite3): Funções do módulo.
                                                             (line  125)
* enable_interspersed_args() (método optparse.OptionParser): Consultando e manipulando seu analisador sintático de opções.
                                                             (line   33)
* enable_load_extension() (método sqlite3.Connection): Connection objects.
                                                             (line  425)
* enable_traversal() (método tkinter.ttk.Notebook): ttk Notebook.
                                                             (line   75)
* ENABLE_USER_SITE (no módulo site):     Conteúdo do módulo<10>.
                                                             (line   10)
* enable() (método bdb.Breakpoint):      bdb — Framework do depurador.
                                                             (line   51)
* enable() (método imaplib.IMAP4):       Objetos IMAP4.      (line   84)
* enable() (método profile.Profile):     profile and cProfile Module Reference.
                                                             (line   79)
* enable() (no módulo faulthandler):     Fault handler state.
                                                             (line    6)
* enable() (no módulo gc):               gc — Interface para o coletor de lixo.
                                                             (line   22)
* EnableControlFlowGuard:                Construção<40>.     (line   47)
* enabled (atributo bdb.Breakpoint):     bdb — Framework do depurador.
                                                             (line  109)
* EnableReflectionKey() (no módulo winreg): Funções<13>.     (line  510)
* ENAMETOOLONG (no módulo errno):        errno — Símbolos padrão do sistema errno.
                                                             (line  177)
* ENAVAIL (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  523)
* encadeamento;comparações:              Comparações.        (line   20)
* encadeamento;comparações <1>:          Comparações<2>.     (line    6)
* enclose() (método curses.window):      Window Objects.     (line  203)
* encode (atributo codecs.CodecInfo):    codecs — Codec registry and base classes.
                                                             (line   78)
* encode_7or8bit() (no módulo email.encoders): email encoders Codificadores.
                                                             (line   60)
* encode_base64() (no módulo email.encoders): email encoders Codificadores.
                                                             (line   51)
* encode_noop() (no módulo email.encoders): email encoders Codificadores.
                                                             (line   66)
* encode_quopri() (no módulo email.encoders): email encoders Codificadores.
                                                             (line   43)
* encode_rfc2231() (no módulo email.utils): email utils Utilitários diversos.
                                                             (line  200)
* encode() (método codecs.Codec):        Stateless Encoding and Decoding.
                                                             (line   11)
* encode() (método codecs.IncrementalEncoder): IncrementalEncoder Objects.
                                                             (line   28)
* encode() (método email.header.Header): email header Internationalized headers.
                                                             (line  124)
* encode() (método json.JSONEncoder):    Codificadores e decodificadores.
                                                             (line  227)
* encode() (método str):                 String Methods<2>.  (line   90)
* encode() (método xmlrpc.client.Binary): Objetos Binários.  (line   25)
* encode() (método xmlrpc.client.DateTime): Objetos DateTime.
                                                             (line   17)
* encode() (no módulo base64):           Legacy Interface.   (line   21)
* encode() (no módulo codecs):           codecs — Codec registry and base classes.
                                                             (line   23)
* encode() (no módulo quopri):           quopri — Codifica e decodifica dados MIME imprimidos entre aspas.
                                                             (line   30)
* encodebytes() (no módulo base64):      Legacy Interface.   (line   31)
* EncodedFile() (no módulo codecs):      codecs — Codec registry and base classes.
                                                             (line  212)
* encodePriority() (método logging.handlers.SysLogHandler): SysLogHandler.
                                                             (line   97)
* encodestring() (no módulo quopri):     quopri — Codifica e decodifica dados MIME imprimidos entre aspas.
                                                             (line   49)
* encoding (atributo curses.window):     Window Objects.     (line  213)
* encoding (atributo io.TextIOBase):     E/S de texto<2>.    (line   15)
* encoding (atributo UnicodeError):      Exceções concretas. (line  454)
* ENCODING (no módulo tarfile):          tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  288)
* ENCODING (no módulo token):            token — Constantes usadas com árvores de análises do Python.
                                                             (line  128)
* encodings_map (atributo mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line   34)
* encodings_map (no módulo mimetypes):   mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line  159)
* EncodingWarning:                       Avisos.             (line   71)
* end (atributo UnicodeError):           Exceções concretas. (line  470)
* END_ASYNC_FOR (opcode):                Instruções em bytecode do Python.
                                                             (line  344)
* end_col_offset (atributo ast.AST):     Classes de nós.     (line   51)
* end_colno (atributo traceback.FrameSummary): FrameSummary Objects.
                                                             (line   62)
* end_fill() (no módulo turtle):         Preenchimento.      (line   21)
* END_FOR (opcode):                      Instruções em bytecode do Python.
                                                             (line  149)
* end_headers() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  275)
* end_lineno (atributo ast.AST):         Classes de nós.     (line   51)
* end_lineno (atributo SyntaxError):     Exceções concretas. (line  343)
* end_lineno (atributo traceback.FrameSummary): FrameSummary Objects.
                                                             (line   49)
* end_lineno (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line   99)
* end_ns() (método xml.etree.ElementTree.TreeBuilder): TreeBuilder Objects.
                                                             (line   86)
* end_offset (atributo SyntaxError):     Exceções concretas. (line  349)
* end_offset (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line  115)
* end_poly() (no módulo turtle):         Métodos Especiais da Tartaruga.
                                                             (line   11)
* END_SEND (opcode):                     Instruções em bytecode do Python.
                                                             (line  156)
* end() (método re.Match):               Objetos correspondência.
                                                             (line  150)
* end() (método xml.etree.ElementTree.TreeBuilder): TreeBuilder Objects.
                                                             (line   38)
* endCDATA() (método xml.sax.handler.LexicalHandler): LexicalHandler Objects.
                                                             (line   39)
* EndCdataSectionHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  397)
* EndDoctypeDeclHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  285)
* endDocument() (método xml.sax.handler.ContentHandler): ContentHandler Objects.
                                                             (line   40)
* endDTD() (método xml.sax.handler.LexicalHandler): LexicalHandler Objects.
                                                             (line   28)
* endElement() (método xml.sax.handler.ContentHandler): ContentHandler Objects.
                                                             (line   94)
* EndElementHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  320)
* endElementNS() (método xml.sax.handler.ContentHandler): ContentHandler Objects.
                                                             (line  119)
* endheaders() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line  191)
* ENDMARKER (no módulo token):           token — Constantes usadas com árvores de análises do Python.
                                                             (line  124)
* EndNamespaceDeclHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  376)
* endpos (atributo re.Match):            Objetos correspondência.
                                                             (line  190)
* endPrefixMapping() (método xml.sax.handler.ContentHandler): ContentHandler Objects.
                                                             (line   73)
* endswith() (método bytearray):         Operações com Bytes e Bytearray.
                                                             (line  124)
* endswith() (método bytes):             Operações com Bytes e Bytearray.
                                                             (line  124)
* endswith() (método str):               String Methods<2>.  (line  123)
* endwin() (no módulo curses):           Funções<6>.         (line  110)
* ENEEDAUTH (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  617)
* ENETDOWN (no módulo errno):            errno — Símbolos padrão do sistema errno.
                                                             (line  440)
* ENETRESET (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  448)
* ENETUNREACH (no módulo errno):         errno — Símbolos padrão do sistema errno.
                                                             (line  444)
* ENFILE (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  124)
* ENOANO (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  254)
* ENOATTR (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  623)
* ENOBUFS (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  462)
* ENOCSI (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  234)
* ENODATA (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  278)
* ENODEV (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  106)
* ENOENT (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line   31)
* ENOEXEC (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line   58)
* ENOKEY (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  553)
* ENOLCK (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  181)
* ENOLINK (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  302)
* ENOMEDIUM (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  545)
* ENOMEM (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line   76)
* ENOMSG (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  202)
* ENONET (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  290)
* ENOPKG (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  294)
* ENOPOLICY (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  629)
* ENOPROTOOPT (no módulo errno):         errno — Símbolos padrão do sistema errno.
                                                             (line  402)
* ENOSPC (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  144)
* ENOSR (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line  286)
* ENOSTR (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  274)
* ENOSYS (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  185)
* ENOTACTIVE (no módulo errno):          errno — Símbolos padrão do sistema errno.
                                                             (line  577)
* ENOTBLK (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line   89)
* ENOTCAPABLE (no módulo errno):         errno — Símbolos padrão do sistema errno.
                                                             (line  683)
* ENOTCONN (no módulo errno):            errno — Símbolos padrão do sistema errno.
                                                             (line  470)
* ENOTDIR (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  110)
* ENOTEMPTY (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  189)
* ENOTNAM (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  519)
* ENOTRECOVERABLE (no módulo errno):     errno — Símbolos padrão do sistema errno.
                                                             (line  704)
* ENOTSOCK (no módulo errno):            errno — Símbolos padrão do sistema errno.
                                                             (line  386)
* ENOTSUP (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  418)
* ENOTTY (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  132)
* ENOTUNIQ (no módulo errno):            errno — Símbolos padrão do sistema errno.
                                                             (line  338)
* ENQ (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   34)
* enqueue_sentinel() (método logging.handlers.QueueListener): QueueListener.
                                                             (line   94)
* enqueue() (método logging.handlers.QueueHandler): QueueHandler.
                                                             (line   86)
* ensure_directories() (método venv.EnvBuilder): API<2>.     (line   91)
* ensure_future() (no módulo asyncio):   Funções Future.     (line   19)
* ensurepip opção de linha de comando; -altinstall: Interface de linha de comando<11>.
                                                             (line   42)
* ensurepip opção de linha de comando; -default-pip: Interface de linha de comando<11>.
                                                             (line   47)
* ensurepip opção de linha de comando; -root: Interface de linha de comando<11>.
                                                             (line   25)
* ensurepip opção de linha de comando; -user: Interface de linha de comando<11>.
                                                             (line   31)
* enter_async_context() (método contextlib.AsyncExitStack): Utilitários.
                                                             (line  636)
* enter_context() (método contextlib.ExitStack): Utilitários.
                                                             (line  551)
* enter() (método sched.scheduler):      Objetos Scheduler.  (line   30)
* enterabs() (método sched.scheduler):   Objetos Scheduler.  (line    9)
* enterAsyncContext() (método unittest.IsolatedAsyncioTestCase): Casos de teste.
                                                             (line  920)
* enterClassContext() (método de classe unittest.TestCase): Casos de teste.
                                                             (line  850)
* enterContext() (método unittest.TestCase): Casos de teste. (line  808)
* enterModuleContext() (no módulo unittest): setUpModule and tearDownModule.
                                                             (line   36)
* entities (atributo xml.dom.DocumentType): DocumentType Objects.
                                                             (line   38)
* EntityDeclHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  349)
* entitydefs (no módulo html.entities):  html entities — Definições de entidades gerais de HTML.
                                                             (line   26)
* EntityResolver (classe em xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line   31)
* entrada:                               Entrada de expressão.
                                                             (line    6)
* entrada de caminho:                    Glossário.          (line 1356)
* entrada padrão:                        Programas Python completos.
                                                             (line   25)
* entry_points() (no módulo importlib.metadata): Pontos de entrada.
                                                             (line    6)
* EntryPoint (classe em importlib.metadata): Pontos de entrada.
                                                             (line   27)
* EntryPoints (classe em importlib.metadata): Pontos de entrada.
                                                             (line   19)
* Enum (classe em enum):                 Tipos de Dados<2>.  (line  122)
* enum_certificates() (no módulo ssl):   Manipulação de certificados.
                                                             (line   87)
* enum_crls() (no módulo ssl):           Manipulação de certificados.
                                                             (line  110)
* EnumCheck (classe em enum):            Tipos de Dados<2>.  (line  617)
* EnumDict (classe em enum):             Tipos de Dados<2>.  (line  744)
* enumerate() (no módulo threading):     Referência<2>.      (line  101)
* EnumKey() (no módulo winreg):          Funções<13>.        (line  173)
* EnumType (classe em enum):             Tipos de Dados<2>.  (line    6)
* EnumValue() (no módulo winreg):        Funções<13>.        (line  194)
* EnvBuilder (classe em venv):           API<2>.             (line   11)
* environ (no módulo os):                Parâmetros de processo.
                                                             (line   16)
* environ (no módulo posix):             Conteúdo notável do módulo.
                                                             (line    9)
* environb (no módulo os):               Parâmetros de processo.
                                                             (line   59)
* EnvironmentError:                      Exceções concretas. (line  505)
* EnvironmentVarGuard (classe em test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   49)
* ENXIO (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line   50)
* eof (atributo bz2.BZ2Decompressor):    Des compressão incremental.
                                                             (line   73)
* eof (atributo lzma.LZMADecompressor):  Comprimindo e descomprimindo dados na memória.
                                                             (line  171)
* eof (atributo shlex.shlex):            shlex Objects.      (line  178)
* eof (atributo ssl.MemoryBIO):          Підтримка BIO пам’яті<2>.
                                                             (line  143)
* eof (atributo zlib.Decompress):        zlib — Compactação compatível com gzip.
                                                             (line  264)
* eof_received() (método asyncio.BufferedProtocol): Protocolos de Streaming Bufferizados.
                                                             (line   40)
* eof_received() (método asyncio.Protocol): Streaming Protocols.
                                                             (line   30)
* EOFError:                              Exceções concretas. (line   33)
* EOFError (exceção embutida):           Objetos arquivos.   (line   46)
* EOPNOTSUPP (no módulo errno):          errno — Símbolos padrão do sistema errno.
                                                             (line  414)
* EOT (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   31)
* EOVERFLOW (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  334)
* EOWNERDEAD (no módulo errno):          errno — Símbolos padrão do sistema errno.
                                                             (line  698)
* EPERM (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line   26)
* EPFNOSUPPORT (no módulo errno):        errno — Símbolos padrão do sistema errno.
                                                             (line  424)
* epilogue (atributo email.message.EmailMessage): email message Representing an email message.
                                                             (line  705)
* epilogue (atributo email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  718)
* EPIPE (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line  160)
* epoll() (no módulo select):            select — Waiting for I/O completion.
                                                             (line   57)
* EpollSelector (classe em selectors):   Classes<4>.         (line  175)
* EPROCLIM (no módulo errno):            errno — Símbolos padrão do sistema errno.
                                                             (line  635)
* EPROCUNAVAIL (no módulo errno):        errno — Símbolos padrão do sistema errno.
                                                             (line  641)
* EPROGMISMATCH (no módulo errno):       errno — Símbolos padrão do sistema errno.
                                                             (line  647)
* EPROGUNAVAIL (no módulo errno):        errno — Símbolos padrão do sistema errno.
                                                             (line  653)
* EPROTO (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  318)
* EPROTONOSUPPORT (no módulo errno):     errno — Símbolos padrão do sistema errno.
                                                             (line  406)
* EPROTOTYPE (no módulo errno):          errno — Símbolos padrão do sistema errno.
                                                             (line  398)
* epsilon (atributo sys.float_info):     sys — Parâmetros e funções específicas do sistema.
                                                             (line  649)
* EPWROFF (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  659)
* Eq (classe em ast):                    Expressões<2>.      (line  109)
* eq() (no módulo operator):             operator — Operadores padrões como funções.
                                                             (line   26)
* EQEQUAL (no módulo token):             token — Constantes usadas com árvores de análises do Python.
                                                             (line  240)
* EQFULL (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  539)
* EQUAL (no módulo token):               token — Constantes usadas com árvores de análises do Python.
                                                             (line  225)
* era:                                   time — Acesso ao horário e conversões.
                                                             (line   20)
* ERA (no módulo locale):                locale — Serviços de internacionalização.
                                                             (line  315)
* ERA_D_FMT (no módulo locale):          locale — Serviços de internacionalização.
                                                             (line  338)
* ERA_D_T_FMT (no módulo locale):        locale — Serviços de internacionalização.
                                                             (line  332)
* ERA_T_FMT (no módulo locale):          locale — Serviços de internacionalização.
                                                             (line  344)
* ERANGE (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  169)
* erase() (método curses.window):        Window Objects.     (line  223)
* erasechar() (no módulo curses):        Funções<6>.         (line  114)
* EREMCHG (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  346)
* EREMOTE (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  298)
* EREMOTEIO (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  531)
* ERESTART (no módulo errno):            errno — Símbolos padrão do sistema errno.
                                                             (line  374)
* erf() (no módulo math):                Funções especiais.  (line    6)
* erfc() (no módulo math):               Funções especiais.  (line   20)
* ERFKILL (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  569)
* EROFS (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line  152)
* ERPCMISMATCH (no módulo errno):        errno — Símbolos padrão do sistema errno.
                                                             (line  671)
* ERR (no módulo curses):                Constantes<6>.      (line    8)
* errcheck (atributo ctypes._CFuncPtr):  Foreign functions.  (line   70)
* errcode (atributo xmlrpc.client.ProtocolError): Objetos ProtocolError.
                                                             (line   17)
* errmsg (atributo xmlrpc.client.ProtocolError): Objetos ProtocolError.
                                                             (line   21)
* errno (atributo OSError):              Exceções concretas. (line  177)
* error:                                 Funções e exceções. (line    8)
* Error:                                 copy — Operações de cópia profunda e cópia rasa.
                                                             (line   33)
* Error <1>:                             Operações de diretório e arquivos.
                                                             (line  503)
* error <1>:                             dbm — Interfaces para “banco de dados” Unix.
                                                             (line   23)
* error <2>:                             dbm gnu — Gerenciador de banco de dados do GNU.
                                                             (line   23)
* error <3>:                             dbm ndbm — New Database Manager.
                                                             (line   29)
* error <4>:                             dbm dumb — Implementação portátil do DBM.
                                                             (line   23)
* Error <2>:                             Exceções<7>.        (line   15)
* error <5>:                             zlib — Compactação compatível com gzip.
                                                             (line   26)
* Error <3>:                             Conteúdo do módulo<3>.
                                                             (line  349)
* Error <4>:                             Exceções<8>.        (line    6)
* error <6>:                             os — Diversas interfaces de sistema operacional.
                                                             (line   52)
* error <7>:                             Funções<6>.         (line    8)
* error <8>:                             _thread— API de segmentação de baixo nível.
                                                             (line   21)
* error <9>:                             Exceções<15>.       (line    6)
* error <10>:                            select — Waiting for I/O completion.
                                                             (line   30)
* Error <5>:                             Exceções<18>.       (line    8)
* Error <6>:                             binascii — Converte entre binário e ASCII.
                                                             (line  160)
* error <11>:                            xml parsers expat — Fast XML parsing using Expat.
                                                             (line   30)
* Error <7>:                             Interface de linha de comando<6>.
                                                             (line   26)
* Error <8>:                             wave — Read and write WAV files.
                                                             (line   52)
* Error <9>:                             locale — Serviços de internacionalização.
                                                             (line   21)
* error <12>:                            resource — Informação de uso de recursos.
                                                             (line   20)
* error <13>:                            getopt — Analisador sintático no estilo C para opções de linha de comando.
                                                             (line   97)
* ERROR (no módulo logging):             Níveis de Logging.  (line   41)
* ERROR (no módulo tkinter.messagebox):  tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  194)
* error_body (atributo wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  266)
* error_content_type (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  157)
* error_headers (atributo wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  259)
* error_leader() (método shlex.shlex):   shlex Objects.      (line   69)
* error_message_format (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  149)
* error_output() (método wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  229)
* error_perm:                            Module variables.   (line   16)
* error_proto:                           Module variables.   (line   21)
* error_proto <1>:                       poplib — Cliente de protocolo POP3.
                                                             (line   90)
* error_received() (método asyncio.DatagramProtocol): Protocolos de Datagramas.
                                                             (line   15)
* error_reply:                           Module variables.   (line    6)
* error_status (atributo wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  253)
* error_temp:                            Module variables.   (line   11)
* error() (método argparse.ArgumentParser): Métodos de saída.
                                                             (line   19)
* error() (método logging.Logger):       Objetos Logger.     (line  312)
* error() (método urllib.request.OpenerDirector): OpenerDirector Objects.
                                                             (line   58)
* error() (método xml.sax.handler.ErrorHandler): ErrorHandler Objects.
                                                             (line   16)
* error() (no módulo logging):           Funções de nível de módulo.
                                                             (line   80)
* ErrorByteIndex (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  220)
* ErrorCode (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  224)
* errorcode (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line   12)
* ErrorColumnNumber (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  230)
* ErrorHandler (classe em xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line   38)
* errorlevel (atributo tarfile.TarFile): Objetos TarFile.    (line  228)
* ErrorLineNumber (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  234)
* errors (atributo io.TextIOBase):       E/S de texto<2>.    (line   20)
* errors (atributo unittest.TestLoader): Carregando e executando testes.
                                                             (line   18)
* errors (atributo unittest.TestResult): Carregando e executando testes.
                                                             (line  248)
* ErrorStream (classe em wsgiref.types): wsgiref types – WSGI types for static type checking.
                                                             (line   28)
* ErrorString() (no módulo xml.parsers.expat): xml parsers expat — Fast XML parsing using Expat.
                                                             (line   40)
* ERRORTOKEN (no módulo token):          token — Constantes usadas com árvores de análises do Python.
                                                             (line  163)
* erros:                                 Exceções<2>.        (line    6)
* Erros;logging:                         logging — Recursos de registro de eventos para Python.
                                                             (line    8)
* ESC (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line  111)
* escape (atributo shlex.shlex):         shlex Objects.      (line  110)
* escape() (no módulo glob):             glob — Expansão de padrão de nome de arquivo no estilo Unix.
                                                             (line  106)
* escape() (no módulo html):             html — Suporte HTML HyperText Markup Language.
                                                             (line   12)
* escape() (no módulo re):               Funções<2>.         (line  275)
* escape() (no módulo xml.sax.saxutils): xml sax saxutils — Utilitários de SAX.
                                                             (line   14)
* escapechar (atributo csv.Dialect):     Dialetos e parâmetros de formatação.
                                                             (line   36)
* escapedquotes (atributo shlex.shlex):  shlex Objects.      (line  122)
* escopo:                                Nomeação e ligação. (line    6)
* escopo <1>:                            Resolução de nomes. (line    6)
* escopo aninhado:                       Glossário.          (line 1234)
* escopo otimizado:                      Glossário.          (line 1270)
* escrita; gravação;valores:             Instruções de expressão.
                                                             (line   18)
* ESHLIBVERS (no módulo errno):          errno — Símbolos padrão do sistema errno.
                                                             (line  677)
* ESHUTDOWN (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  474)
* esmtp_features (atributo smtplib.SMTP): Objetos SMTP.      (line  366)
* ESOCKTNOSUPPORT (no módulo errno):     errno — Símbolos padrão do sistema errno.
                                                             (line  410)
* espaço:                                Indentação.         (line    6)
* espaço de nomes:                       Nomeação e ligação. (line    6)
* espaço de nomes <1>:                   Glossário.          (line 1195)
* espaço em branco inicial:              Indentação.         (line    6)
* espaço;em formatação no estilo printf: Formatação de string no estilo printf.
                                                             (line   71)
* espaço;em formatação no estilo printf <1>: Estilo de Formatação de bytes printf-style.
                                                             (line   65)
* espaço;na formatação de strings:       Minilinguagem de especificação de formato.
                                                             (line   76)
* especial;atributo:                     A hierarquia de tipos padrão.
                                                             (line   14)
* especial;método:                       Glossário.          (line 1631)
* ESPIPE (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  148)
* ESRCH (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line   36)
* ESRMNT (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  310)
* estado global:                         Glossário.          (line  792)
* ESTALE (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  511)
* ESTRPIPE (no módulo errno):            errno — Símbolos padrão do sistema errno.
                                                             (line  378)
* estrutura da linha:                    Estrutura das linhas.
                                                             (line    6)
* ETB (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   99)
* ETH_P_ALL (no módulo socket):          Constantes<8>.      (line  222)
* ETHERTYPE_ARP (no módulo socket):      Constantes<8>.      (line  364)
* ETHERTYPE_IP (no módulo socket):       Constantes<8>.      (line  364)
* ETHERTYPE_IPV6 (no módulo socket):     Constantes<8>.      (line  364)
* ETHERTYPE_VLAN (no módulo socket):     Constantes<8>.      (line  364)
* ETIME (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line  282)
* ETIMEDOUT (no módulo errno):           errno — Símbolos padrão do sistema errno.
                                                             (line  483)
* Etiny() (método decimal.Context):      Objetos de contexto.
                                                             (line  252)
* ETOOMANYREFS (no módulo errno):        errno — Símbolos padrão do sistema errno.
                                                             (line  479)
* Etop() (método decimal.Context):       Objetos de contexto.
                                                             (line  259)
* ETX (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   28)
* ETXTBSY (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  136)
* EUCLEAN (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  515)
* EUNATCH (no módulo errno):             errno — Símbolos padrão do sistema errno.
                                                             (line  230)
* EUSERS (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  382)
* Event (classe em asyncio):             Evento.             (line    6)
* Event (classe em multiprocessing):     Primitivas de sincronização.
                                                             (line   52)
* Event (classe em threading):           Event objects.      (line   14)
* EVENT_READ (no módulo selectors):      Classes<4>.         (line   23)
* EVENT_WRITE (no módulo selectors):     Classes<4>.         (line   26)
* Event() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  185)
* eventfd_read() (no módulo os):         Arquivos e diretórios.
                                                             (line 2001)
* eventfd_write() (no módulo os):        Arquivos e diretórios.
                                                             (line 2011)
* eventfd() (no módulo os):              Arquivos e diretórios.
                                                             (line 1947)
* EventLoop (classe em asyncio):         Implementações do laço de eventos.
                                                             (line   44)
* eventos (widgets):                     Ligações e Eventos. (line    6)
* eventos de auditoria:                  Depuração e perfilamento.
                                                             (line   14)
* events (atributo selectors.SelectorKey): Classes<4>.       (line   44)
* EWOULDBLOCK (no módulo errno):         errno — Símbolos padrão do sistema errno.
                                                             (line  197)
* EX_CANTCREAT (no módulo os):           Gerenciamento de processo.
                                                             (line  217)
* EX_CONFIG (no módulo os):              Gerenciamento de processo.
                                                             (line  255)
* EX_DATAERR (no módulo os):             Gerenciamento de processo.
                                                             (line  161)
* EX_IOERR (no módulo os):               Gerenciamento de processo.
                                                             (line  224)
* EX_NOHOST (no módulo os):              Gerenciamento de processo.
                                                             (line  182)
* EX_NOINPUT (no módulo os):             Gerenciamento de processo.
                                                             (line  168)
* EX_NOPERM (no módulo os):              Gerenciamento de processo.
                                                             (line  247)
* EX_NOTFOUND (no módulo os):            Gerenciamento de processo.
                                                             (line  262)
* EX_NOUSER (no módulo os):              Gerenciamento de processo.
                                                             (line  175)
* EX_OK (no módulo os):                  Gerenciamento de processo.
                                                             (line  145)
* EX_OSERR (no módulo os):               Gerenciamento de processo.
                                                             (line  202)
* EX_OSFILE (no módulo os):              Gerenciamento de processo.
                                                             (line  210)
* EX_PROTOCOL (no módulo os):            Gerenciamento de processo.
                                                             (line  240)
* EX_SOFTWARE (no módulo os):            Gerenciamento de processo.
                                                             (line  195)
* EX_TEMPFAIL (no módulo os):            Gerenciamento de processo.
                                                             (line  231)
* EX_UNAVAILABLE (no módulo os):         Gerenciamento de processo.
                                                             (line  188)
* EX_USAGE (no módulo os):               Gerenciamento de processo.
                                                             (line  153)
* EXACT_TOKEN_TYPES (no módulo token):   token — Constantes usadas com árvores de análises do Python.
                                                             (line  330)
* example (atributo doctest.DocTestFailure): Depuração.      (line  200)
* example (atributo doctest.UnexpectedException): Depuração. (line  221)
* Example (classe em doctest):           Example Objects.    (line    6)
* examples (atributo doctest.DocTest):   DocTest Objects.    (line   17)
* exc_info (atributo doctest.UnexpectedException): Depuração.
                                                             (line  225)
* exc_info (no módulo sys):              Objetos traceback.  (line    6)
* exc_info (no módulo sys) <1>:          Exceções<21>.       (line   48)
* exc_info() (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line  467)
* exc_msg (atributo doctest.Example):    Example Objects.    (line   31)
* exc_type (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line   79)
* exc_type_str (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line   85)
* exceção:                               Exceções<2>.        (line    6)
* exceção <1>:                           A instrução raise.  (line    6)
* exceção;AssertionError:                A instrução assert. (line   21)
* exceção;AttributeError:                Referências de atributo.
                                                             (line   10)
* exceção;encadeamento:                  A instrução raise.  (line   30)
* exceção;encadeamento <1>:              Contexto da exceção.
                                                             (line    6)
* exceção;GeneratorExit:                 Métodos de iterador gerador.
                                                             (line   66)
* exceção;GeneratorExit <1>:             Métodos geradores-iteradores assíncronos.
                                                             (line   60)
* exceção;ImportError:                   A instrução import. (line    6)
* exceção;manipulador (handler):         Objetos traceback.  (line    6)
* exceção;NameError:                     Identificadores Nomes.
                                                             (line   11)
* exceção;StopAsyncIteration:            Métodos geradores-iteradores assíncronos.
                                                             (line    9)
* exceção;StopIteration:                 Métodos de iterador gerador.
                                                             (line   13)
* exceção;StopIteration <1>:             A instrução yield.  (line    6)
* exceção;TypeError:                     Operações aritméticas unárias e bit a bit.
                                                             (line   25)
* exceção;ValueError:                    Operações de deslocamento.
                                                             (line   20)
* exceção;ZeroDivisionError:             Operações binárias aritméticas.
                                                             (line   35)
* excel (classe em csv):                 Conteúdo do módulo<3>.
                                                             (line  216)
* excel_tab (classe em csv):             Conteúdo do módulo<3>.
                                                             (line  222)
* ExceptHandler (classe em ast):         Fluxo de controle.  (line  201)
* excepthook() (no módulo sys):          sys — Parâmetros e funções específicas do sistema.
                                                             (line  410)
* excepthook() (no módulo threading):    Referência<2>.      (line   26)
* Exception:                             Classes base.       (line   68)
* EXCEPTION (no módulo _tkinter):        Tratadores de arquivos.
                                                             (line   43)
* EXCEPTION_HANDLED (monitoring event):  Eventos.            (line   26)
* exception() (método asyncio.Future):   Objeto Future.      (line  125)
* exception() (método asyncio.Task):     Objeto Task.        (line   91)
* exception() (método concurrent.futures.Future): Future Objects.
                                                             (line   52)
* exception() (método logging.Logger):   Objetos Logger.     (line  328)
* exception() (no módulo logging):       Funções de nível de módulo.
                                                             (line   92)
* exception() (no módulo sys):           sys — Parâmetros e funções específicas do sistema.
                                                             (line  454)
* ExceptionGroup:                        Grupos de exceções. (line   12)
* exceptions (atributo BaseExceptionGroup): Grupos de exceções.
                                                             (line   42)
* exceptions (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line   53)
* exceptions (pdb command):              Comandos de depuração.
                                                             (line  463)
* EXCLAMATION (no módulo token):         token — Constantes usadas com árvores de análises do Python.
                                                             (line  321)
* exclusão;alvo:                         A instrução del<2>. (line    6)
* exclusão;alvo;lista:                   A instrução del<2>. (line    6)
* exclusivo;or:                          Operações binárias bit a bit.
                                                             (line   17)
* EXDEV (no módulo errno):               errno — Símbolos padrão do sistema errno.
                                                             (line  102)
* exec_module() (método importlib.abc.InspectLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  270)
* exec_module() (método importlib.abc.Loader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  119)
* exec_module() (método importlib.abc.SourceLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  418)
* exec_module() (método importlib.machinery.ExtensionFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  330)
* exec_module() (método zipimport.zipimporter): Objetos zipimporter.
                                                             (line   31)
* exec_prefix (no módulo sys):           sys — Parâmetros e funções específicas do sistema.
                                                             (line  488)
* execl() (no módulo os):                Gerenciamento de processo.
                                                             (line   54)
* execle() (no módulo os):               Gerenciamento de processo.
                                                             (line   54)
* execlp() (no módulo os):               Gerenciamento de processo.
                                                             (line   54)
* execlpe() (no módulo os):              Gerenciamento de processo.
                                                             (line   54)
* execução, modelo:                      Modelo de execução. (line    6)
* execução;pilha (stack):                Objetos traceback.  (line    6)
* execução;quadro:                       Estrutura de um programa.
                                                             (line   20)
* execução;quadro <1>:                   Definições de classe.
                                                             (line    6)
* executable (in module sys):            Parâmetros de todo o processo.
                                                             (line  122)
* executable (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line  506)
* execute() (método sqlite3.Connection): Connection objects. (line   97)
* execute() (método sqlite3.Cursor):     Cursor objects.     (line   24)
* executemany() (método sqlite3.Connection): Connection objects.
                                                             (line  103)
* executemany() (método sqlite3.Cursor): Cursor objects.     (line   59)
* executescript() (método sqlite3.Connection): Connection objects.
                                                             (line  109)
* executescript() (método sqlite3.Cursor): Cursor objects.   (line  100)
* ExecutionLoader (classe em importlib.abc): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  283)
* Executor (classe em concurrent.futures): Executor Objects. (line    6)
* execv() (no módulo os):                Gerenciamento de processo.
                                                             (line   54)
* execve() (no módulo os):               Gerenciamento de processo.
                                                             (line   54)
* execvp() (no módulo os):               Gerenciamento de processo.
                                                             (line   54)
* execvpe() (no módulo os):              Gerenciamento de processo.
                                                             (line   54)
* EXFULL (no módulo errno):              errno — Símbolos padrão do sistema errno.
                                                             (line  250)
* exists() (método pathlib.Path):        Consultando tipo de arquivo e status.
                                                             (line   38)
* exists() (método tkinter.ttk.Treeview): ttk Treeview.      (line   89)
* exists() (método zipfile.Path):        Objetos Path.       (line   77)
* exists() (no módulo os.path):          os path — Manipulações comuns de nomes de caminhos.
                                                             (line  123)
* exit (função C):                       Controle de processos.
                                                             (line   24)
* exit (variável interna):               Constantes adicionadas pelo módulo site.
                                                             (line   12)
* exit() (método argparse.ArgumentParser): Métodos de saída. (line    6)
* exit() (no módulo _thread):            _thread— API de segmentação de baixo nível.
                                                             (line   81)
* exit() (no módulo sys):                sys — Parâmetros e funções específicas do sistema.
                                                             (line  514)
* exitcode (atributo multiprocessing.Process): Process e exceções.
                                                             (line  161)
* exitonclick() (no módulo turtle):      Métodos específico do Screen estes métodos não são herdados do TurtleScreen.
                                                             (line   10)
* ExitStack (classe em contextlib):      Utilitários.        (line  508)
* exp() (método decimal.Context):        Objetos de contexto.
                                                             (line  323)
* exp() (método decimal.Decimal):        Objetos de Decimal. (line  241)
* exp() (no módulo cmath):               Funções de potência e logarítmicas.
                                                             (line    6)
* exp() (no módulo math):                Funções de potências exponenciais e logarítmicas.
                                                             (line   12)
* exp2() (no módulo math):               Funções de potências exponenciais e logarítmicas.
                                                             (line   18)
* expand_tabs (atributo textwrap.TextWrapper): textwrap — Quebra automática e preenchimento de texto.
                                                             (line  175)
* expand() (método re.Match):            Objetos correspondência.
                                                             (line   24)
* ExpandEnvironmentStrings() (no módulo winreg): Funções<13>.
                                                             (line  232)
* expandNode() (método xml.dom.pulldom.DOMEventStream): Objetos DOMEventStream.
                                                             (line   21)
* expandtabs() (método bytearray):       Operações com Bytes e Bytearray.
                                                             (line  499)
* expandtabs() (método bytes):           Operações com Bytes e Bytearray.
                                                             (line  499)
* expandtabs() (método str):             String Methods<2>.  (line  144)
* expanduser() (método pathlib.Path):    Expandindo e resolvendo caminhos.
                                                             (line   18)
* expanduser() (no módulo os.path):      os path — Manipulações comuns de nomes de caminhos.
                                                             (line  148)
* expandvars() (no módulo os.path):      os path — Manipulações comuns de nomes de caminhos.
                                                             (line  174)
* Expat:                                 xml parsers expat — Fast XML parsing using Expat.
                                                             (line   11)
* ExpatError:                            xml parsers expat — Fast XML parsing using Expat.
                                                             (line   24)
* expected (atributo asyncio.IncompleteReadError): Exceções<13>.
                                                             (line   52)
* expectedFailure() (no módulo unittest): Ignorando testes e falhas esperadas.
                                                             (line   99)
* expectedFailures (atributo unittest.TestResult): Carregando e executando testes.
                                                             (line  268)
* expired() (método asyncio.Timeout):    Tempo limite.       (line   72)
* expires (atributo http.cookiejar.Cookie): Objetos Cookie<2>.
                                                             (line   53)
* expires (atributo http.cookies.Morsel): Objetos Morsel.    (line   13)
* exploded (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line   62)
* exploded (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line  113)
* exploded (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  264)
* exploded (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  328)
* expm1() (no módulo math):              Funções de potências exponenciais e logarítmicas.
                                                             (line   24)
* expovariate() (no módulo random):      Distribuições com valor real.
                                                             (line   39)
* Expr (classe em ast):                  Expressões<2>.      (line    6)
* expressão:                             Expressões.         (line    6)
* expressão <1>:                         Glossário.          (line  550)
* expressão de atribuição:               Operações booleanas.
                                                             (line   39)
* expressão geradora:                    Glossário.          (line  734)
* expressão geradora <1>:                Glossário.          (line  734)
* expressão nomeada:                     Operações booleanas.
                                                             (line   39)
* expressão;instrução:                   Instruções de expressão.
                                                             (line    6)
* expressão;lista:                       Listas de expressões.
                                                             (line    6)
* expressão;lista <1>:                   Instruções de expressão.
                                                             (line    6)
* expressão;lista <2>:                   Instruções de expressão.
                                                             (line    6)
* Expression (classe em ast):            Nós raízes.         (line   25)
* expunge() (método imaplib.IMAP4):      Objetos IMAP4.      (line   93)
* extend_path() (no módulo pkgutil):     pkgutil — Utilitário de extensão de pacote.
                                                             (line   20)
* extend() (método array.array):         array— Vetores eficientes de valores numéricos.
                                                             (line  161)
* extend() (método collections.deque):   Objetos deque.      (line   63)
* extend() (método sequence):            Tipos sequências mutáveis.
                                                             (line   94)
* extend() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line   94)
* EXTENDED_ARG (opcode):                 Instruções em bytecode do Python.
                                                             (line 1174)
* ExtendedContext (no módulo decimal):   Objetos de contexto.
                                                             (line   77)
* ExtendedInterpolation (classe em configparser): Interpolação de valores.
                                                             (line   41)
* extendleft() (método collections.deque): Objetos deque.    (line   68)
* extensão;módulo:                       A hierarquia de tipos padrão.
                                                             (line    6)
* EXTENSION_SUFFIXES (no módulo importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line   50)
* ExtensionFileLoader (classe em importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  296)
* extensions_map (atributo http.server.SimpleHTTPRequestHandler): http server — HTTP servers.
                                                             (line  365)
* External Data Representation:          Formato de fluxo de dados.
                                                             (line    6)
* external_attr (atributo zipfile.ZipInfo): Objetos ZipInfo. (line  148)
* ExternalClashError:                    Exceções<18>.       (line   24)
* ExternalEntityParserCreate() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line   44)
* ExternalEntityRefHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  424)
* extra (atributo zipfile.ZipInfo):      Objetos ZipInfo.    (line  114)
* extract_cookies() (método http.cookiejar.CookieJar): CookieJar and FileCookieJar Objects.
                                                             (line   31)
* extract_stack() (no módulo traceback): Funções de nível de módulo<2>.
                                                             (line   94)
* extract_tb() (no módulo traceback):    Funções de nível de módulo<2>.
                                                             (line   82)
* extract_version (atributo zipfile.ZipInfo): Objetos ZipInfo.
                                                             (line  128)
* extract() (método de classe traceback.StackSummary): StackSummary Objects.
                                                             (line   12)
* extract() (método tarfile.TarFile):    Objetos TarFile.    (line  179)
* extract() (método zipfile.ZipFile):    Objetos ZipFile.    (line  196)
* extractall() (método tarfile.TarFile): Objetos TarFile.    (line  142)
* extractall() (método zipfile.ZipFile): Objetos ZipFile.    (line  225)
* ExtractError:                          tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  231)
* extractfile() (método tarfile.TarFile): Objetos TarFile.   (line  212)
* extraction_filter (atributo tarfile.TarFile): Objetos TarFile.
                                                             (line  248)
* extsep (no módulo os):                 Diversas informações de sistema.
                                                             (line  136)
* f_back (atributo de frame):            Objetos quadro.     (line   10)
* f_back (atributo frame):               Atributos especiais de somente leitura<3>.
                                                             (line    6)
* f_builtins (atributo de frame):        Objetos quadro.     (line   10)
* f_builtins (atributo frame):           Atributos especiais de somente leitura<3>.
                                                             (line   31)
* f_code (atributo de frame):            Objetos quadro.     (line   10)
* f_code (atributo frame):               Atributos especiais de somente leitura<3>.
                                                             (line   11)
* F_CONTIGUOUS (atributo inspect.BufferFlags): Buffer flags. (line   27)
* f_contiguous (atributo memoryview):    Memory Views.       (line  490)
* f_globals (atributo de frame):         Objetos quadro.     (line   10)
* f_globals (atributo frame):            Atributos especiais de somente leitura<3>.
                                                             (line   27)
* f_lasti (atributo de frame):           Objetos quadro.     (line   10)
* f_lasti (atributo frame):              Atributos especiais de somente leitura<3>.
                                                             (line   35)
* f_lineno (atributo de frame):          Atributos especiais de somente leitura<3>.
                                                             (line   39)
* f_lineno (atributo frame):             Atributos especiais graváveis<2>.
                                                             (line   26)
* f_locals (atributo de frame):          Objetos quadro.     (line   10)
* f_locals (atributo frame):             Atributos especiais de somente leitura<3>.
                                                             (line   18)
* F_LOCK (no módulo os):                 Operações dos descritores de arquivos.
                                                             (line  287)
* F_OK (no módulo os):                   Arquivos e diretórios.
                                                             (line  112)
* F_TEST (no módulo os):                 Operações dos descritores de arquivos.
                                                             (line  287)
* F_TLOCK (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  287)
* f_trace (atributo de frame):           Atributos especiais de somente leitura<3>.
                                                             (line   40)
* f_trace (atributo frame):              Atributos especiais graváveis<2>.
                                                             (line    6)
* f_trace_lines (atributo de frame):     Atributos especiais de somente leitura<3>.
                                                             (line   40)
* f_trace_lines (atributo frame):        Atributos especiais graváveis<2>.
                                                             (line   13)
* f_trace_opcodes (atributo de frame):   Atributos especiais de somente leitura<3>.
                                                             (line   40)
* f_trace_opcodes (atributo frame):      Atributos especiais graváveis<2>.
                                                             (line   18)
* F_ULOCK (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  287)
* f-string:                              Refinando a formatação de saída.
                                                             (line   94)
* f-string <1>:                          Concatenação de literal de string.
                                                             (line   27)
* f-string <2>:                          Glossário.          (line  567)
* f-strings:                             String Methods<2>.  (line  917)
* f';literal de string formatado:        Literais de string e bytes.
                                                             (line   64)
* f";literal de string formatado:        Literais de string e bytes.
                                                             (line   64)
* fabs() (no módulo math):               Arimética de ponto flutuante.
                                                             (line   12)
* factorial() (no módulo math):          Funções de teoria dos números.
                                                             (line   23)
* factory() (método de classe importlib.util.LazyLoader): importlib util – Utility code for importers.
                                                             (line  226)
* FAIL_FAST (no módulo doctest):         Flags opcionais.    (line  138)
* fail() (método unittest.TestCase):     Casos de teste.     (line  711)
* failed (atributo doctest.TestResults): TestResults objects.
                                                             (line    8)
* failfast (atributo unittest.TestResult): Carregando e executando testes.
                                                             (line  306)
* failureException (atributo unittest.TestCase): Casos de teste.
                                                             (line  716)
* failures (atributo doctest.DocTestRunner): DocTestRunner objects.
                                                             (line  139)
* failures (atributo unittest.TestResult): Carregando e executando testes.
                                                             (line  254)
* FakePath (classe em test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   60)
* False:                                 numbers Integral.   (line   27)
* false:                                 Teste do valor verdade.
                                                             (line    6)
* False <1>:                             Teste do valor verdade.
                                                             (line   24)
* False <2>:                             Tipo booleano - bool.
                                                             (line    9)
* False (objeto embutido):               Teste do valor verdade.
                                                             (line   16)
* False (variável interna):              Constantes embutidas.
                                                             (line    9)
* families() (no módulo tkinter.font):   tkinter font — Invólucro de fontes Tkinter.
                                                             (line   92)
* family (atributo socket.socket):       Socket Objects.     (line  613)
* FancyURLopener (classe em urllib.request): Legacy interface.
                                                             (line  146)
* fast (atributo pickle.Pickler):        Interface do módulo.
                                                             (line  229)
* FastChildWatcher (classe em asyncio):  Monitores de processos.
                                                             (line  142)
* fatalError() (método xml.sax.handler.ErrorHandler): ErrorHandler Objects.
                                                             (line   24)
* fatia:                                 Fatiamentos.        (line    6)
* fatia <1>:                             Glossário.          (line 1608)
* fatia;atribuição:                      Tipos sequências mutáveis.
                                                             (line   17)
* fatia;operação:                        Operações comuns de sequências.
                                                             (line   20)
* fatiamento:                            Sequências.         (line   15)
* fatiamento <1>:                        Sequências mutáveis.
                                                             (line    6)
* fatiamento <2>:                        Fatiamentos.        (line    6)
* fatiamento;atribuição:                 Instruções de atribuição.
                                                             (line  129)
* Fault (classe em xmlrpc.client):       Objetos Fault.      (line    6)
* faultCode (atributo xmlrpc.client.Fault): Objetos Fault.   (line   11)
* faultString (atributo xmlrpc.client.Fault): Objetos Fault. (line   15)
* fchdir() (no módulo os):               Arquivos e diretórios.
                                                             (line  293)
* fchmod() (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  123)
* fchown() (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  140)
* fcntl() (no módulo fcntl):             fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line   68)
* fd (atributo selectors.SelectorKey):   Classes<4>.         (line   40)
* fd_count() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   97)
* fd() (no módulo turtle):               Movimentos de Turtle.
                                                             (line    6)
* fdatasync() (no módulo os):            Operações dos descritores de arquivos.
                                                             (line  155)
* fdopen() (no módulo os):               Criação de objetos arquivos.
                                                             (line    9)
* feature_external_ges (no módulo xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line   81)
* feature_external_pes (no módulo xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line   93)
* feature_namespace_prefixes (no módulo xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line   60)
* feature_namespaces (no módulo xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line   53)
* feature_string_interning (no módulo xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line   67)
* feature_validation (no módulo xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line   74)
* FEBRUARY (no módulo calendar):         calendar — Funções gerais relacionadas ao calendário.
                                                             (line  507)
* feed_eof() (método asyncio.StreamReader): StreamReader.    (line   16)
* feed() (método email.parser.BytesFeedParser): API do FeedParser.
                                                             (line   56)
* feed() (método html.parser.HTMLParser): Métodos HTMLParser.
                                                             (line    8)
* feed() (método xml.etree.ElementTree.XMLParser): Objetos XMLParser.
                                                             (line   27)
* feed() (método xml.etree.ElementTree.XMLPullParser): XMLPullParser Objects.
                                                             (line   18)
* feed() (método xml.sax.xmlreader.IncrementalParser): IncrementalParser Objects.
                                                             (line    9)
* FeedParser (classe em email.parser):   API do FeedParser.  (line   71)
* fetch() (método imaplib.IMAP4):        Objetos IMAP4.      (line   99)
* fetchall() (método sqlite3.Cursor):    Cursor objects.     (line  149)
* fetchmany() (método sqlite3.Cursor):   Cursor objects.     (line  129)
* fetchone() (método sqlite3.Cursor):    Cursor objects.     (line  122)
* FF (no módulo curses.ascii):           curses ascii — Utilitários para caracteres ASCII.
                                                             (line   63)
* fflags (atributo select.kevent):       Kevent Objects.     (line   90)
* Field (classe em dataclasses):         Conteúdo do módulo<8>.
                                                             (line  314)
* field_size_limit() (no módulo csv):    Conteúdo do módulo<3>.
                                                             (line  100)
* field() (no módulo dataclasses):       Conteúdo do módulo<8>.
                                                             (line  216)
* fieldnames (atributo csv.DictReader):  Objetos Reader.     (line   33)
* fields (atributo uuid.UUID):           uuid — Objetos UUID conforme RFC 4122.
                                                             (line   98)
* fields() (no módulo dataclasses):      Conteúdo do módulo<8>.
                                                             (line  342)
* FIFOTYPE (no módulo tarfile):          tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  319)
* file (atributo bdb.Breakpoint):        bdb — Framework do depurador.
                                                             (line   85)
* file (atributo pyclbr.Class):          Objetos classe<2>.  (line   12)
* file (atributo pyclbr.Function):       Objetos Function.   (line   11)
* FILE_ATTRIBUTE_ARCHIVE (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* FILE_ATTRIBUTE_COMPRESSED (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* FILE_ATTRIBUTE_DEVICE (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* FILE_ATTRIBUTE_DIRECTORY (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* FILE_ATTRIBUTE_ENCRYPTED (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* FILE_ATTRIBUTE_HIDDEN (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* FILE_ATTRIBUTE_INTEGRITY_STREAM (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* FILE_ATTRIBUTE_NO_SCRUB_DATA (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* FILE_ATTRIBUTE_NORMAL (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* FILE_ATTRIBUTE_NOT_CONTENT_INDEXED (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* FILE_ATTRIBUTE_OFFLINE (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* FILE_ATTRIBUTE_READONLY (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* FILE_ATTRIBUTE_REPARSE_POINT (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* FILE_ATTRIBUTE_SPARSE_FILE (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* FILE_ATTRIBUTE_SYSTEM (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* FILE_ATTRIBUTE_TEMPORARY (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* FILE_ATTRIBUTE_VIRTUAL (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  461)
* file_digest() (no módulo hashlib):     Hash de arquivo.    (line    9)
* file_open() (método urllib.request.FileHandler): FileHandler Objects.
                                                             (line    6)
* file_size (atributo zipfile.ZipInfo):  Objetos ZipInfo.    (line  164)
* fileConfig() (no módulo logging.config): Funções de configuração.
                                                             (line   64)
* FileCookieJar (classe em http.cookiejar): http cookiejar — Cookie handling for HTTP clients.
                                                             (line   57)
* FileDialog (classe em tkinter.filedialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line   80)
* FileExistsError:                       Exceções de sistema operacional.
                                                             (line   64)
* FileFinder (classe em importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  158)
* FileHandler (classe em logging):       FileHandler.        (line   10)
* FileHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  425)
* FileInput (classe em fileinput):       fileinput — Itera sobre linhas de múltiplos fluxos de entrada.
                                                             (line  142)
* FileIO (classe em io):                 Raw File I/O.       (line    6)
* filelineno() (no módulo fileinput):    fileinput — Itera sobre linhas de múltiplos fluxos de entrada.
                                                             (line  108)
* FileLoader (classe em importlib.abc):  importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  304)
* filemode() (no módulo stat):           stat — Interpretando resultados de stat.
                                                             (line  122)
* filename (atributo doctest.DocTest):   DocTest Objects.    (line   36)
* filename (atributo http.cookiejar.FileCookieJar): CookieJar and FileCookieJar Objects.
                                                             (line  154)
* filename (atributo inspect.FrameInfo): A pilha to interpretador.
                                                             (line   17)
* filename (atributo inspect.Traceback): A pilha to interpretador.
                                                             (line   57)
* filename (atributo netrc.NetrcParseError): netrc — Arquivo de processamento netrc.
                                                             (line   60)
* filename (atributo OSError):           Exceções concretas. (line  199)
* filename (atributo SyntaxError):       Exceções concretas. (line  324)
* filename (atributo traceback.FrameSummary): FrameSummary Objects.
                                                             (line   28)
* filename (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line   91)
* filename (atributo tracemalloc.Frame): Frame.              (line   13)
* filename (atributo zipfile.ZipFile):   Objetos ZipFile.    (line  368)
* filename (atributo zipfile.ZipInfo):   Objetos ZipInfo.    (line   54)
* filename_only (no módulo tabnanny):    tabnanny — Detecção de indentação ambígua.
                                                             (line   34)
* filename_pattern (atributo tracemalloc.Filter): Filter.    (line   54)
* filename() (no módulo fileinput):      fileinput — Itera sobre linhas de múltiplos fluxos de entrada.
                                                             (line   91)
* filename2 (atributo OSError):          Exceções concretas. (line  199)
* fileno() (método bz2.BZ2File):         Des compressão de arquivos.
                                                             (line   91)
* fileno() (método http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   36)
* fileno() (método io.IOBase):           I/O Base Classes.   (line   62)
* fileno() (método multiprocessing.connection.Connection): Objetos de conexão.
                                                             (line   33)
* fileno() (método select.devpoll):      /dev/poll Polling Objects.
                                                             (line   24)
* fileno() (método select.epoll):        Edge and Level Trigger Polling epoll Objects.
                                                             (line   73)
* fileno() (método select.kqueue):       Kqueue Objects.     (line   14)
* fileno() (método selectors.DevpollSelector): Classes<4>.   (line  188)
* fileno() (método selectors.EpollSelector): Classes<4>.     (line  179)
* fileno() (método selectors.KqueueSelector): Classes<4>.    (line  199)
* fileno() (método socket.socket):       Socket Objects.     (line  118)
* fileno() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line   15)
* fileno() (no módulo fileinput):        fileinput — Itera sobre linhas de múltiplos fluxos de entrada.
                                                             (line   96)
* FileNotFoundError:                     Exceções de sistema operacional.
                                                             (line   69)
* fileobj (atributo selectors.SelectorKey): Classes<4>.      (line   36)
* files_double_event() (método tkinter.filedialog.FileDialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line   97)
* files_select_event() (método tkinter.filedialog.FileDialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line  101)
* files() (método importlib.abc.TraversableResources): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  598)
* files() (método importlib.resources.abc.TraversableResources): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  177)
* files() (no módulo importlib.metadata): Arquivos de distribuição.
                                                             (line    6)
* files() (no módulo importlib.resources): importlib resources – Leitura abertura e acesso a recursos de pacotes.
                                                             (line   54)
* FileType (classe em argparse):         Objetos FileType.   (line    6)
* FileWrapper (classe em wsgiref.types): wsgiref types – WSGI types for static type checking.
                                                             (line   32)
* FileWrapper (classe em wsgiref.util):  wsgiref util – Utilidades do ambiente WSGI.
                                                             (line  119)
* fill() (método textwrap.TextWrapper):  textwrap — Quebra automática e preenchimento de texto.
                                                             (line  307)
* fill() (no módulo textwrap):           textwrap — Quebra automática e preenchimento de texto.
                                                             (line   34)
* fillcolor() (no módulo turtle):        Controle da Cor.    (line   62)
* filling() (no módulo turtle):          Preenchimento.      (line    6)
* fillvalue (atributo reprlib.Repr):     Objetos Repr.       (line   11)
* filter (atributo select.kevent):       Kevent Objects.     (line   15)
* Filter (classe em logging):            Filter Objects.     (line   13)
* Filter (classe em tracemalloc):        Filter.             (line    6)
* filter_command() (método tkinter.filedialog.FileDialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line  105)
* FILTER_DIR (no módulo unittest.mock):  FILTER_DIR.         (line    6)
* filter_traces() (método tracemalloc.Snapshot): Snapshot.   (line   35)
* filter() (método logging.Filter):      Filter Objects.     (line   20)
* filter() (método logging.Handler):     Objetos Handler.    (line   61)
* filter() (método logging.Logger):      Objetos Logger.     (line  343)
* filter() (no módulo curses):           Funções<6>.         (line  121)
* filter() (no módulo fnmatch):          fnmatch — Correspondência de padrões de nome de arquivo Unix.
                                                             (line   81)
* FilterError:                           tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  242)
* filterfalse() (no módulo itertools):   Funções do intertools.
                                                             (line  293)
* filterwarnings() (no módulo warnings): Funções disponíveis.
                                                             (line  111)
* Final (no módulo typing):              Formas especiais.   (line  228)
* final() (no módulo typing):            Funções e decoradores.
                                                             (line  318)
* finalizador:                           Personalização básica.
                                                             (line   58)
* finalization, of objects:              Finalization and De-allocation.
                                                             (line    6)
* finalize (classe em weakref):          weakref — Referências fracas.
                                                             (line  278)
* find_class() (método pickle.Unpickler): Interface do módulo.
                                                             (line  307)
* find_class() (protocolo pickle):       Restringindo globais.
                                                             (line    6)
* find_library() (no módulo ctypes.util): Funções utilitárias.
                                                             (line  111)
* find_loader() (no módulo pkgutil):     pkgutil — Utilitário de extensão de pacote.
                                                             (line   57)
* find_longest_match() (método difflib.SequenceMatcher): SequenceMatcher Objects.
                                                             (line   64)
* find_msvcrt() (no módulo ctypes.util): Funções utilitárias.
                                                             (line  123)
* find_spec() (método de classe importlib.machinery.PathFinder): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  119)
* find_spec() (método importlib.abc.MetaPathFinder): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line   36)
* find_spec() (método importlib.abc.PathEntryFinder): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line   73)
* find_spec() (método importlib.machinery.FileFinder): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  191)
* find_spec() (método zipimport.zipimporter): Objetos zipimporter.
                                                             (line   38)
* find_spec() (no módulo importlib.util): importlib util – Utility code for importers.
                                                             (line  103)
* find_unused_port() (no módulo test.support.socket_helper): test support socket_helper — Utilities for socket tests.
                                                             (line   15)
* find_user_password() (método urllib.request.HTTPPasswordMgr): HTTPPasswordMgr Objects.
                                                             (line   16)
* find_user_password() (método urllib.request.HTTPPasswordMgrWithPriorAuth): HTTPPasswordMgrWithPriorAuth Objects.
                                                             (line   19)
* find() (método bytearray):             Operações com Bytes e Bytearray.
                                                             (line  137)
* find() (método bytes):                 Operações com Bytes e Bytearray.
                                                             (line  137)
* find() (método doctest.DocTestFinder): DocTestFinder objects.
                                                             (line   32)
* find() (método mmap.mmap):             mmap — Suporte a arquivos mapeados na memória.
                                                             (line  199)
* find() (método str):                   String Methods<2>.  (line  170)
* find() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line  102)
* find() (método xml.etree.ElementTree.ElementTree): ElementTree Objects.
                                                             (line   21)
* find() (no módulo gettext):            API baseada em classe.
                                                             (line   14)
* findall() (método re.Pattern):         Objetos expressão regular.
                                                             (line   84)
* findall() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line  111)
* findall() (método xml.etree.ElementTree.ElementTree): ElementTree Objects.
                                                             (line   26)
* findall() (no módulo re):              Funções<2>.         (line  140)
* findCaller() (método logging.Logger):  Objetos Logger.     (line  360)
* findfile() (no módulo test.support):   test support — Utilitários para o conjunto de teste do Python.
                                                             (line  285)
* finditer() (método re.Pattern):        Objetos expressão regular.
                                                             (line   91)
* finditer() (no módulo re):             Funções<2>.         (line  168)
* findlabels() (no módulo dis):          Funções de análise. (line  185)
* findlinestarts() (no módulo dis):      Funções de análise. (line  168)
* findtext() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line  120)
* findtext() (método xml.etree.ElementTree.ElementTree): ElementTree Objects.
                                                             (line   31)
* finish_request() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line  136)
* finish() (método socketserver.BaseRequestHandler): Objetos manipulador de requisições.
                                                             (line   36)
* finish() (método tkinter.dnd.DndHandler): tkinter dnd — Suporte para arrastar e soltar.
                                                             (line   55)
* FIRST_COMPLETED (no módulo asyncio):   Primitivas de espera.
                                                             (line   36)
* FIRST_COMPLETED (no módulo concurrent.futures): Module Functions.
                                                             (line   30)
* FIRST_EXCEPTION (no módulo asyncio):   Primitivas de espera.
                                                             (line   40)
* FIRST_EXCEPTION (no módulo concurrent.futures): Module Functions.
                                                             (line   34)
* firstChild (atributo xml.dom.Node):    Objetos Node.       (line   54)
* FirstHeaderLineIsContinuationDefect:   email errors Classes de Exceção e Defeito.
                                                             (line   92)
* firstkey() (método dbm.gnu.gdbm):      dbm gnu — Gerenciador de banco de dados do GNU.
                                                             (line  100)
* firstweekday (atributo calendar.Calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line   43)
* firstweekday() (no módulo calendar):   calendar — Funções gerais relacionadas ao calendário.
                                                             (line  374)
* fix_missing_locations() (no módulo ast): Auxiliares de ast.
                                                             (line  149)
* fix_sentence_endings (atributo textwrap.TextWrapper): textwrap — Quebra automática e preenchimento de texto.
                                                             (line  231)
* Flag (classe em enum):                 Tipos de Dados<2>.  (line  440)
* flag_bits (atributo zipfile.ZipInfo):  Objetos ZipInfo.    (line  136)
* FlagBoundary (classe em enum):         Tipos de Dados<2>.  (line  676)
* flags (atributo decimal.Context):      Objetos de contexto.
                                                             (line  135)
* flags (atributo re.Pattern):           Objetos expressão regular.
                                                             (line  106)
* flags (atributo select.kevent):        Kevent Objects.     (line   52)
* flags (no módulo sys):                 sys — Parâmetros e funções específicas do sistema.
                                                             (line  547)
* flash() (no módulo curses):            Funções<6>.         (line  132)
* flatten() (método email.generator.BytesGenerator): email generator Geração de documentos MIME.
                                                             (line   83)
* flatten() (método email.generator.Generator): email generator Geração de documentos MIME.
                                                             (line  181)
* flattening;objetos:                    pickle — Serialização de objetos Python.
                                                             (line    8)
* float (classe interna):                Funções embutidas<3>.
                                                             (line  733)
* float_info (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line  634)
* float_repr_style (no módulo sys):      sys — Parâmetros e funções específicas do sistema.
                                                             (line  751)
* FloatingPointError:                    Exceções concretas. (line   40)
* FloatOperation (classe em decimal):    Sinais.             (line  107)
* flock() (no módulo fcntl):             fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line  165)
* floor() (no módulo math):              Tipos numéricos — int float complex.
                                                             (line  112)
* floor() (no módulo math) <1>:          Arimética de ponto flutuante.
                                                             (line   16)
* FloorDiv (classe em ast):              Expressões<2>.      (line   54)
* floordiv() (no módulo operator):       operator — Operadores padrões como funções.
                                                             (line   92)
* flush_headers() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  284)
* flush_std_streams() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  419)
* flush() (método bz2.BZ2Compressor):    Des compressão incremental.
                                                             (line   25)
* flush() (método io.BufferedWriter):    Buffered Streams.   (line  122)
* flush() (método io.IOBase):            I/O Base Classes.   (line   68)
* flush() (método logging.Handler):      Objetos Handler.    (line   69)
* flush() (método logging.handlers.BufferingHandler): MemoryHandler.
                                                             (line   30)
* flush() (método logging.handlers.MemoryHandler): MemoryHandler.
                                                             (line   61)
* flush() (método logging.StreamHandler): StreamHandler.     (line   26)
* flush() (método lzma.LZMACompressor):  Comprimindo e descomprimindo dados na memória.
                                                             (line   94)
* flush() (método mailbox.Mailbox):      Objetos Mailbox.    (line  250)
* flush() (método mailbox.Maildir):      Maildir objects.    (line  204)
* flush() (método mailbox.MH):           MH objects.         (line  102)
* flush() (método mmap.mmap):            mmap — Suporte a arquivos mapeados na memória.
                                                             (line  209)
* flush() (método xml.etree.ElementTree.XMLParser): Objetos XMLParser.
                                                             (line   31)
* flush() (método xml.etree.ElementTree.XMLPullParser): XMLPullParser Objects.
                                                             (line   22)
* flush() (método zlib.Compress):        zlib — Compactação compatível com gzip.
                                                             (line  218)
* flush() (método zlib.Decompress):      zlib — Compactação compatível com gzip.
                                                             (line  295)
* flushinp() (no módulo curses):         Funções<6>.         (line  139)
* FlushKey() (no módulo winreg):         Funções<13>.        (line  243)
* fma() (método decimal.Context):        Objetos de contexto.
                                                             (line  327)
* fma() (método decimal.Decimal):        Objetos de Decimal. (line  279)
* fma() (no módulo math):                Arimética de ponto flutuante.
                                                             (line   22)
* fmean() (no módulo statistics):        Detalhes das funções.
                                                             (line   50)
* fmod() (no módulo math):               Arimética de ponto flutuante.
                                                             (line   39)
* FMT_BINARY (no módulo plistlib):       plistlib — Gera e analisa arquivos Apple plist.
                                                             (line  165)
* FMT_XML (no módulo plistlib):          plistlib — Gera e analisa arquivos Apple plist.
                                                             (line  159)
* fnmatch() (no módulo fnmatch):         fnmatch — Correspondência de padrões de nome de arquivo Unix.
                                                             (line   54)
* fnmatchcase() (no módulo fnmatch):     fnmatch — Correspondência de padrões de nome de arquivo Unix.
                                                             (line   74)
* focus() (método tkinter.ttk.Treeview): ttk Treeview.       (line   93)
* fold (atributo datetime.datetime):     Objetos datetime.   (line  349)
* fold (atributo datetime.time):         Objetos time.       (line   72)
* fold_binary() (método email.policy.Compat32): email policy Policy Objects.
                                                             (line  608)
* fold_binary() (método email.policy.EmailPolicy): email policy Policy Objects.
                                                             (line  487)
* fold_binary() (método email.policy.Policy): email policy Policy Objects.
                                                             (line  351)
* fold() (método email.headerregistry.BaseHeader): email headerregistry Custom Header Objects.
                                                             (line   72)
* fold() (método email.policy.Compat32): email policy Policy Objects.
                                                             (line  600)
* fold() (método email.policy.EmailPolicy): email policy Policy Objects.
                                                             (line  467)
* fold() (método email.policy.Policy):   email policy Policy Objects.
                                                             (line  336)
* Font (classe em tkinter.font):         tkinter font — Invólucro de fontes Tkinter.
                                                             (line   20)
* For (classe em ast):                   Fluxo de controle.  (line   44)
* FOR_ITER (opcode):                     Instruções em bytecode do Python.
                                                             (line  912)
* for;em compreensões:                   Sintaxe de criação de listas conjuntos e dicionários.
                                                             (line   15)
* forget() (método tkinter.ttk.Notebook): ttk Notebook.      (line   18)
* forget() (no módulo test.support.import_helper): test support import_helper — Utilities for import tests.
                                                             (line   11)
* fork() (no módulo os):                 Gerenciamento de processo.
                                                             (line  269)
* fork() (no módulo pty):                pty — Utilitários de pseudoterminal.
                                                             (line   23)
* ForkingMixIn (classe em socketserver): Notas sobre criação do servidor.
                                                             (line   27)
* ForkingTCPServer (classe em socketserver): Notas sobre criação do servidor.
                                                             (line   68)
* ForkingUDPServer (classe em socketserver): Notas sobre criação do servidor.
                                                             (line   68)
* ForkingUnixDatagramServer (classe em socketserver): Notas sobre criação do servidor.
                                                             (line   68)
* ForkingUnixStreamServer (classe em socketserver): Notas sobre criação do servidor.
                                                             (line   68)
* forkpty() (no módulo os):              Gerenciamento de processo.
                                                             (line  318)
* forma entre parênteses:                Formas de parênteses.
                                                             (line    6)
* FORMAT (atributo inspect.BufferFlags): Buffer flags.       (line   19)
* format (atributo memoryview):          Memory Views.       (line  432)
* format (atributo multiprocessing.shared_memory.ShareableList): multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line  359)
* format (atributo struct.Struct):       Classes<3>.         (line   54)
* format_datetime() (no módulo email.utils): email utils Utilitários diversos.
                                                             (line  181)
* format_exc() (no módulo traceback):    Funções de nível de módulo<2>.
                                                             (line  164)
* format_exception_only() (método traceback.TracebackException): TracebackException Objects.
                                                             (line  155)
* format_exception_only() (no módulo traceback): Funções de nível de módulo<2>.
                                                             (line  118)
* format_exception() (no módulo traceback): Funções de nível de módulo<2>.
                                                             (line  148)
* format_field() (método string.Formatter): Formatação personalizada de strings.
                                                             (line  104)
* format_frame_summary() (método traceback.StackSummary): StackSummary Objects.
                                                             (line   53)
* format_help() (método argparse.ArgumentParser): Imprimindo a ajuda.
                                                             (line   31)
* format_list() (no módulo traceback):   Funções de nível de módulo<2>.
                                                             (line  108)
* format_map() (método str):             String Methods<2>.  (line  227)
* FORMAT_SIMPLE (opcode):                Instruções em bytecode do Python.
                                                             (line 1200)
* format_stack_entry() (método bdb.Bdb): bdb — Framework do depurador.
                                                             (line  426)
* format_stack() (no módulo traceback):  Funções de nível de módulo<2>.
                                                             (line  173)
* format_string() (no módulo locale):    locale — Serviços de internacionalização.
                                                             (line  471)
* format_tb() (no módulo traceback):     Funções de nível de módulo<2>.
                                                             (line  169)
* format_usage() (método argparse.Action): Classes de ação.  (line   57)
* format_usage() (método argparse.ArgumentParser): Imprimindo a ajuda.
                                                             (line   26)
* FORMAT_WITH_SPEC (opcode):             Instruções em bytecode do Python.
                                                             (line 1212)
* format() (função embutida);__str__() (método de objeto): Personalização básica.
                                                             (line  140)
* format() (método inspect.Signature):   Introspecting callables with the Signature object.
                                                             (line  157)
* format() (método logging.BufferingFormatter): Formatter Objects.
                                                             (line  154)
* format() (método logging.Formatter):   Formatter Objects.  (line   51)
* format() (método logging.Handler):     Objetos Handler.    (line  104)
* format() (método pprint.PrettyPrinter): Objetos PrettyPrinter.
                                                             (line   84)
* format() (método str):                 String Methods<2>.  (line  192)
* format() (método string.Formatter):    Formatação personalizada de strings.
                                                             (line   17)
* format() (método traceback.StackSummary): StackSummary Objects.
                                                             (line   38)
* format() (método traceback.TracebackException): TracebackException Objects.
                                                             (line  143)
* format() (método tracemalloc.Traceback): Traceback.        (line   37)
* formatação, string (%):                Formatação de string no estilo printf.
                                                             (line    6)
* formatação;bytearray (%):              Estilo de Formatação de bytes printf-style.
                                                             (line    6)
* formatação;bytes (%):                  Estilo de Formatação de bytes printf-style.
                                                             (line    6)
* formataddr() (no módulo email.utils):  email utils Utilitários diversos.
                                                             (line   73)
* formatargvalues() (no módulo inspect): Classes e funções<2>.
                                                             (line   73)
* formatdate() (no módulo email.utils):  email utils Utilitários diversos.
                                                             (line  159)
* formatday() (método calendar.TextCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  163)
* FormatError:                           Exceções<18>.       (line   31)
* FormatError() (no módulo ctypes):      Funções utilitárias.
                                                             (line  135)
* formatException() (método logging.Formatter): Formatter Objects.
                                                             (line  116)
* formatFooter() (método logging.BufferingFormatter): Formatter Objects.
                                                             (line  147)
* formatHeader() (método logging.BufferingFormatter): Formatter Objects.
                                                             (line  140)
* formatmonth() (método calendar.HTMLCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  237)
* formatmonth() (método calendar.TextCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  192)
* formatmonthname() (método calendar.HTMLCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  259)
* formatmonthname() (método calendar.TextCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  201)
* formatStack() (método logging.Formatter): Formatter Objects.
                                                             (line  124)
* FormattedValue (classe em ast):        Literais<3>.        (line   18)
* Formatter (classe em logging):         Formatter Objects.  (line    6)
* Formatter (classe em string):          Formatação personalizada de strings.
                                                             (line   13)
* formatTime() (método logging.Formatter): Formatter Objects.
                                                             (line   76)
* formatwarning() (no módulo warnings):  Funções disponíveis.
                                                             (line  102)
* formatweek() (método calendar.TextCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  170)
* formatweekday() (método calendar.TextCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  178)
* formatweekheader() (método calendar.TextCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  185)
* formatyear() (método calendar.HTMLCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  243)
* formatyear() (método calendar.TextCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  215)
* formatyearpage() (método calendar.HTMLCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  248)
* forward() (no módulo turtle):          Movimentos de Turtle.
                                                             (line    6)
* ForwardRef (classe em typing):         Auxiliares de introspecção.
                                                             (line  154)
* fp (atributo urllib.error.HTTPError):  urllib error — Classes de exceção levantadas por urllib request.
                                                             (line   65)
* fpathconf() (no módulo os):            Operações dos descritores de arquivos.
                                                             (line  164)
* Fraction (classe em fractions):        fractions — Números racionais.
                                                             (line   16)
* frame (atributo inspect.FrameInfo):    A pilha to interpretador.
                                                             (line   13)
* frame (atributo tkinter.scrolledtext.ScrolledText): tkinter scrolledtext — Widget de texto de rolado.
                                                             (line   27)
* Frame (classe em tracemalloc):         Frame.              (line    6)
* FrameInfo (classe em inspect):         A pilha to interpretador.
                                                             (line   11)
* FrameSummary (classe em traceback):    FrameSummary Objects.
                                                             (line   11)
* FrameType (no módulo types):           Tipos padrão do interpretador.
                                                             (line  199)
* free (C function):                     Visão Geral<4>.     (line   36)
* free_tool_id() (no módulo sys.monitoring): Registro e uso de ferramentas.
                                                             (line   13)
* freedesktop_os_release() (no módulo platform): Plataformas Linux.
                                                             (line    6)
* freefunc (C type):                     Slot Type typedefs. (line   27)
* freeze utility:                        Importando módulos<2>.
                                                             (line  282)
* freeze_support() (no módulo multiprocessing): Diversos<4>. (line   49)
* freeze() (no módulo gc):               gc — Interface para o coletor de lixo.
                                                             (line  208)
* frexp() (no módulo math):              Funções de manipulação de ponto flutuante.
                                                             (line   12)
* FRIDAY (no módulo calendar):           calendar — Funções gerais relacionadas ao calendário.
                                                             (line  465)
* from_address() (método ctypes._CData): Data types.         (line   44)
* from_buffer_copy() (método ctypes._CData): Data types.     (line   32)
* from_buffer() (método ctypes._CData):  Data types.         (line   19)
* from_bytes() (método de classe int):   Métodos adicionais em tipos inteiros.
                                                             (line  112)
* from_callable() (método de classe inspect.Signature): Introspecting callables with the Signature object.
                                                             (line  169)
* from_decimal() (método de classe fractions.Fraction): fractions — Números racionais.
                                                             (line  150)
* from_exception() (método de classe traceback.TracebackException): TracebackException Objects.
                                                             (line  126)
* from_file() (método de classe zipfile.ZipInfo): Objetos ZipInfo.
                                                             (line   14)
* from_file() (método de classe zoneinfo.ZoneInfo): A classe ZoneInfo.
                                                             (line   30)
* from_float() (método de classe decimal.Decimal): Objetos de Decimal.
                                                             (line  252)
* from_float() (método de classe fractions.Fraction): fractions — Números racionais.
                                                             (line  139)
* from_iterable() (método de classe itertools.chain): Funções do intertools.
                                                             (line  117)
* from_list() (método de classe traceback.StackSummary): StackSummary Objects.
                                                             (line   31)
* from_param() (método ctypes._CData):   Data types.         (line   53)
* from_samples() (método de classe statistics.NormalDist): Objetos NormalDist.
                                                             (line   47)
* from_traceback() (método de classe dis.Bytecode): Análise de bytecode.
                                                             (line   47)
* from_uri() (método de classe pathlib.Path): Analisando e gerando URIs.
                                                             (line   12)
* from;instrução import:                 Ligação de nomes.   (line    9)
* from;instrução import <1>:             A instrução import. (line   54)
* from;yield from expressão:             Expressões yield.   (line   67)
* frombuf() (método de classe tarfile.TarInfo): Objetos TarInfo.
                                                             (line   37)
* frombytes() (método array.array):      array— Vetores eficientes de valores numéricos.
                                                             (line  170)
* fromfd() (método select.epoll):        Edge and Level Trigger Polling epoll Objects.
                                                             (line   77)
* fromfd() (método select.kqueue):       Kqueue Objects.     (line   18)
* fromfd() (no módulo socket):           Criação de sockets. (line  159)
* fromfile() (método array.array):       array— Vetores eficientes de valores numéricos.
                                                             (line  180)
* fromhex() (método de classe bytearray): Objetos Bytearray. (line   40)
* fromhex() (método de classe bytes):    Objetos bytes.      (line   69)
* fromhex() (método de classe float):    Métodos adicionais em ponto flutuante.
                                                             (line   42)
* fromisocalendar() (método de classe datetime.date): Objetos date.
                                                             (line   91)
* fromisocalendar() (método de classe datetime.datetime): Objetos datetime.
                                                             (line  254)
* fromisoformat() (método de classe datetime.date): Objetos date.
                                                             (line   63)
* fromisoformat() (método de classe datetime.datetime): Objetos datetime.
                                                             (line  204)
* fromisoformat() (método de classe datetime.time): Objetos time.
                                                             (line  111)
* fromkeys() (método collections.Counter): Objetos Counter.  (line  124)
* fromkeys() (método de classe dict):    Tipo mapeamento — dict.
                                                             (line  173)
* fromlist() (método array.array):       array— Vetores eficientes de valores numéricos.
                                                             (line  188)
* fromordinal() (método de classe datetime.date): Objetos date.
                                                             (line   54)
* fromordinal() (método de classe datetime.datetime): Objetos datetime.
                                                             (line  179)
* fromshare() (no módulo socket):        Criação de sockets. (line  176)
* fromstring() (no módulo xml.etree.ElementTree): Funções<9>.
                                                             (line   99)
* fromstringlist() (no módulo xml.etree.ElementTree): Funções<9>.
                                                             (line  107)
* fromtarfile() (método de classe tarfile.TarInfo): Objetos TarInfo.
                                                             (line   44)
* fromtimestamp() (método de classe datetime.date): Objetos date.
                                                             (line   35)
* fromtimestamp() (método de classe datetime.datetime): Objetos datetime.
                                                             (line  102)
* fromunicode() (método array.array):    array— Vetores eficientes de valores numéricos.
                                                             (line  194)
* fromutc() (método datetime.timezone):  Objetos timezone.   (line   63)
* fromutc() (método datetime.tzinfo):    Objetos tzinfo.     (line  174)
* FrozenImporter (classe em importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line   83)
* FrozenInstanceError:                   Conteúdo do módulo<8>.
                                                             (line  520)
* FrozenSet (classe em typing):          Apelidos de tipos embutidos.
                                                             (line   42)
* frozenset (classe interna):            Tipo conjuntos — set frozenset.
                                                             (line   36)
* FS (no módulo curses.ascii):           curses ascii — Utilitários para caracteres ASCII.
                                                             (line  114)
* fs_is_case_insensitive() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  101)
* FS_NONASCII (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   11)
* fsdecode() (no módulo os):             Parâmetros de processo.
                                                             (line   96)
* fsencode() (no módulo os):             Parâmetros de processo.
                                                             (line   83)
* fspath() (no módulo os):               Parâmetros de processo.
                                                             (line  109)
* fstat() (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  186)
* fstatvfs() (no módulo os):             Operações dos descritores de arquivos.
                                                             (line  198)
* fstring:                               Refinando a formatação de saída.
                                                             (line   94)
* fstring <1>:                           Concatenação de literal de string.
                                                             (line   27)
* fstring <2>:                           String Methods<2>.  (line  917)
* FSTRING_END (no módulo token):         token — Constantes usadas com árvores de análises do Python.
                                                             (line  117)
* FSTRING_MIDDLE (no módulo token):      token — Constantes usadas com árvores de análises do Python.
                                                             (line  107)
* FSTRING_START (no módulo token):       token — Constantes usadas com árvores de análises do Python.
                                                             (line   99)
* fsum() (no módulo math):               Funções de soma e produto.
                                                             (line   18)
* fsync() (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  207)
* FTP:                                   urllib request Restrictions.
                                                             (line   37)
* FTP (classe em ftplib):                FTP objects.        (line    6)
* ftp_open() (método urllib.request.FTPHandler): FTPHandler Objects.
                                                             (line    6)
* FTP_TLS (classe em ftplib):            FTP_TLS objects.    (line    6)
* FTP;ftplib (standard module):          ftplib — FTP protocol client.
                                                             (line    8)
* FTP;protocolo:                         urllib request Restrictions.
                                                             (line    6)
* FTP;protocolo <1>:                     ftplib — FTP protocol client.
                                                             (line    8)
* FTPHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  435)
* ftruncate() (no módulo os):            Operações dos descritores de arquivos.
                                                             (line  220)
* Full:                                  queue — A synchronized queue class.
                                                             (line   88)
* FULL (atributo inspect.BufferFlags):   Buffer flags.       (line   45)
* full_match() (método pathlib.PurePath): Métodos e propriedades.
                                                             (line  257)
* FULL_RO (atributo inspect.BufferFlags): Buffer flags.      (line   47)
* full_url (atributo urllib.request.Request): Objeto Request.
                                                             (line   11)
* full() (método asyncio.Queue):         Queue.              (line   33)
* full() (método multiprocessing.Queue): Encadeamentos e filas.
                                                             (line  134)
* full() (método queue.Queue):           Objetos Queue.      (line   22)
* fullmatch() (método re.Pattern):       Objetos expressão regular.
                                                             (line   62)
* fullmatch() (no módulo re):            Funções<2>.         (line   72)
* fully_trusted_filter() (no módulo tarfile): Default named filters.
                                                             (line    9)
* func (atributo functools.partial):     Objetos partial.    (line    9)
* função:                                Glossário.          (line  656)
* função chave:                          Glossário.          (line  967)
* função de corrotina:                   Glossário.          (line  391)
* função de perfilação:                  Referência<2>.      (line  141)
* função de perfilação <1>:              Referência<2>.      (line  157)
* função de perfilação <2>:              sys — Parâmetros e funções específicas do sistema.
                                                             (line  988)
* função de perfilação <3>:              sys — Parâmetros e funções específicas do sistema.
                                                             (line 1586)
* função de rastreamento:                Referência<2>.      (line  119)
* função de rastreamento <1>:            Referência<2>.      (line  135)
* função de rastreamento <2>:            sys — Parâmetros e funções específicas do sistema.
                                                             (line  993)
* função de rastreamento <3>:            sys — Parâmetros e funções específicas do sistema.
                                                             (line 1677)
* função de retorno:                     Glossário.          (line  255)
* função embutida;__import__:            Importando módulos<2>.
                                                             (line   33)
* função embutida;abs:                   Emulando tipos numéricos.
                                                             (line  114)
* função embutida;abs <1>:               Protocolo de número.
                                                             (line  100)
* função embutida;ascii:                 Protocolo de objeto.
                                                             (line  344)
* função embutida;bytes:                 Personalização básica.
                                                             (line  158)
* função embutida;bytes <1>:             Protocolo de objeto.
                                                             (line  367)
* função embutida;chamada:               Chamadas.           (line  149)
* função embutida;chr:                   Sequências imutáveis.
                                                             (line   16)
* função embutida;classmethod:           Implementing functions and methods.
                                                             (line  195)
* função embutida;compile:               A instrução global. (line   23)
* função embutida;compile <1>:           Objetos código<2>.  (line    6)
* função embutida;compile <2>:           Tipos padrão do interpretador.
                                                             (line   58)
* função embutida;compile <3>:           Importando módulos<2>.
                                                             (line  135)
* função embutida;complexo:              Emulando tipos numéricos.
                                                             (line  121)
* função embutida;complexo <1>:          Tipos numéricos — int float complex.
                                                             (line   30)
* função embutida;divmod:                Emulando tipos numéricos.
                                                             (line   26)
* função embutida;divmod <1>:            Emulando tipos numéricos.
                                                             (line   56)
* função embutida;divmod <2>:            Protocolo de número.
                                                             (line   71)
* função embutida;eval:                  A instrução global. (line   23)
* função embutida;eval <1>:              Entrada de expressão.
                                                             (line    6)
* função embutida;eval <2>:              Objetos código<2>.  (line   17)
* função embutida;eval <3>:              Funções<4>.         (line   89)
* função embutida;eval <4>:              Objetos PrettyPrinter.
                                                             (line   69)
* função embutida;exec:                  A instrução global. (line   23)
* função embutida;exec <1>:              Funções embutidas<3>.
                                                             (line  643)
* função embutida;exec <2>:              Objetos código<2>.  (line   17)
* função embutida;fatia:                 Objetos slice.      (line    6)
* função embutida;fatia <1>:             Instruções em bytecode do Python.
                                                             (line 1158)
* função embutida;hash:                  Personalização básica.
                                                             (line  256)
* função embutida;hash <1>:              Tipos sequência imutáveis.
                                                             (line    6)
* função embutida;hash <2>:              Protocolo de objeto.
                                                             (line  417)
* função embutida;hash <3>:              PyTypeObject Slots. (line  376)
* função embutida;help:                  Interface com o sistema operacional.
                                                             (line   20)
* função embutida;id:                    Objetos valores e tipos.
                                                             (line   10)
* função embutida;int:                   Emulando tipos numéricos.
                                                             (line  121)
* função embutida;int <1>:               Tipos numéricos — int float complex.
                                                             (line   30)
* função embutida;int <2>:               Protocolo de número.
                                                             (line  258)
* função embutida;len:                   Sequências.         (line    6)
* função embutida;len <1>:               Tipos de conjuntos. (line    6)
* função embutida;len <2>:               Mapeamentos.        (line    6)
* função embutida;len <3>:               Emulando tipos contêineres.
                                                             (line   46)
* função embutida;len <4>:               Operações comuns de sequências.
                                                             (line   20)
* função embutida;len <5>:               Tipo mapeamento — dict.
                                                             (line    6)
* função embutida;len <6>:               Protocolo de objeto.
                                                             (line  464)
* função embutida;len <7>:               Protocolo de sequência.
                                                             (line   16)
* função embutida;len <8>:               Protocolo de mapeamento.
                                                             (line   19)
* função embutida;len <9>:               Objeto List.        (line   41)
* função embutida;len <10>:              Objetos dicionários.
                                                             (line  243)
* função embutida;len <11>:              Objeto Set.         (line   99)
* função embutida;max:                   Operações comuns de sequências.
                                                             (line   20)
* função embutida;min:                   Operações comuns de sequências.
                                                             (line   20)
* função embutida;open:                  Leitura e escrita de arquivos.
                                                             (line    6)
* função embutida;open <1>:              Objetos de E/S também conhecidos como objetos arquivo.
                                                             (line    6)
* função embutida;ord:                   Sequências imutáveis.
                                                             (line   16)
* função embutida;ponto flutuante:       Emulando tipos numéricos.
                                                             (line  121)
* função embutida;ponto flutuante <1>:   Tipos numéricos — int float complex.
                                                             (line   30)
* função embutida;ponto flutuante <2>:   Protocolo de número.
                                                             (line  266)
* função embutida;pow:                   Emulando tipos numéricos.
                                                             (line   26)
* função embutida;pow <1>:               Emulando tipos numéricos.
                                                             (line   26)
* função embutida;pow <2>:               Emulando tipos numéricos.
                                                             (line   56)
* função embutida;pow <3>:               Emulando tipos numéricos.
                                                             (line   67)
* função embutida;pow <4>:               Protocolo de número.
                                                             (line   80)
* função embutida;pow <5>:               Protocolo de número.
                                                             (line  206)
* função embutida;print:                 Personalização básica.
                                                             (line  163)
* função embutida;range:                 A instrução for.    (line   37)
* função embutida;repr:                  Instruções de expressão.
                                                             (line   18)
* função embutida;repr <1>:              Finalization and De-allocation.
                                                             (line   90)
* função embutida;repr <2>:              Protocolo de objeto.
                                                             (line  331)
* função embutida;repr <3>:              PyTypeObject Slots. (line  311)
* função embutida;round:                 Emulando tipos numéricos.
                                                             (line  144)
* função embutida;staticmethod:          Implementing functions and methods.
                                                             (line  203)
* função embutida;tipo:                  Objetos valores e tipos.
                                                             (line   10)
* função embutida;tipo <1>:              Metaclasses.        (line    6)
* função embutida;tipo <2>:              Objetos tipo.       (line    6)
* função embutida;tipo <3>:              Protocolo de objeto.
                                                             (line  446)
* função embutida;tupla:                 Protocolo de sequência.
                                                             (line  116)
* função embutida;tupla <1>:             Objeto List.        (line  164)
* função genérica:                       Glossário.          (line  744)
* função;annotations:                    Anotações de função.
                                                             (line    6)
* função;annotations <1>:                Definições de função.
                                                             (line  114)
* função;argumento:                      Tipos chamáveis.    (line    6)
* função;chamada:                        Tipos chamáveis.    (line    6)
* função;chamada <1>:                    Chamadas.           (line  138)
* função;chamada <2>:                    Chamadas.           (line  149)
* função;definição:                      A instrução return. (line    6)
* função;definição <1>:                  Definições de função.
                                                             (line    6)
* função;gerador:                        A instrução yield.  (line    6)
* função;nome:                           Definições de função.
                                                             (line    6)
* função;nome <1>:                       Definições de função.
                                                             (line    6)
* funcname (atributo bdb.Breakpoint):    bdb — Framework do depurador.
                                                             (line  104)
* funções de limpeza:                    Controle de processos.
                                                             (line   35)
* function (atributo inspect.FrameInfo): A pilha to interpretador.
                                                             (line   27)
* function (atributo inspect.Traceback): A pilha to interpretador.
                                                             (line   67)
* FUNCTION (atributo symtable.SymbolTableType): Examining Symbol Tables.
                                                             (line   15)
* Function (classe em pyclbr):           Objetos Function.   (line    6)
* Function (classe em symtable):         Examining Symbol Tables.
                                                             (line  122)
* FunctionDef (classe em ast):           Definições de função e classe.
                                                             (line    6)
* FunctionTestCase (classe em unittest): Casos de teste.     (line  979)
* FunctionType (classe em ast):          Nós raízes.         (line   56)
* FunctionType (no módulo types):        Tipos padrão do interpretador.
                                                             (line   25)
* funny_files (atributo filecmp.dircmp): A classe dircmp.    (line  101)
* Future (classe em asyncio):            Objeto Future.      (line    6)
* Future (classe em concurrent.futures): Future Objects.     (line   10)
* future;instrução:                      Instruções future.  (line    6)
* FutureWarning:                         Avisos.             (line   54)
* fwalk() (no módulo os):                Arquivos e diretórios.
                                                             (line 1837)
* gaierror:                              Exceções<15>.       (line   27)
* gamma() (no módulo math):              Funções especiais.  (line   29)
* gammavariate() (no módulo random):     Distribuições com valor real.
                                                             (line   49)
* gancho de entrada de caminho:          Glossário.          (line 1372)
* ganchos de caminho:                    Ganchos de importação.
                                                             (line    6)
* ganchos de importação:                 Ganchos de importação.
                                                             (line    6)
* ganchos;caminho:                       Ganchos de importação.
                                                             (line    6)
* ganchos;import:                        Ganchos de importação.
                                                             (line    6)
* ganchos;meta:                          Ganchos de importação.
                                                             (line    6)
* garbage (no módulo gc):                gc — Interface para o coletor de lixo.
                                                             (line  242)
* gather() (método curses.textpad.Textbox): Textbox objects. (line  109)
* gather() (no módulo asyncio):          Executando tarefas concorrentemente.
                                                             (line    6)
* gauss() (no módulo random):            Distribuições com valor real.
                                                             (line   62)
* gc_collect() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  372)
* gcd() (no módulo math):                Funções de teoria dos números.
                                                             (line   30)
* gcvisitobjects_t (C type):             Querying Garbage Collector State.
                                                             (line   26)
* ge() (no módulo operator):             operator — Operadores padrões como funções.
                                                             (line   26)
* generate_tokens() (no módulo tokenize): Tokenizando entradas.
                                                             (line   39)
* Generator (classe em collections.abc): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line   55)
* Generator (classe em email.generator): email generator Geração de documentos MIME.
                                                             (line  144)
* Generator (classe em typing):          Apelidos para outros ABCs em collections abc.
                                                             (line   38)
* generator_stop (no módulo __future__): Conteúdo do módulo<9>.
                                                             (line   43)
* GeneratorExit:                         Exceções concretas. (line   44)
* GeneratorExp (classe em ast):          Compreensões.       (line    6)
* generators (no módulo __future__):     Conteúdo do módulo<9>.
                                                             (line   18)
* GeneratorType (no módulo types):       Tipos padrão do interpretador.
                                                             (line   37)
* Generic (classe em typing):            Criando tipos genéricos e apelidos de tipo.
                                                             (line   15)
* generic_visit() (método ast.NodeVisitor): Auxiliares de ast.
                                                             (line  207)
* Generic;Alias:                         Tipo Generic Alias. (line    6)
* GenericAlias (classe em types):        Tipos padrão do interpretador.
                                                             (line  152)
* genérico;especial;atributo:            A hierarquia de tipos padrão.
                                                             (line   14)
* genops() (no módulo pickletools):      Interface programática<2>.
                                                             (line   23)
* geometric_mean() (no módulo statistics): Detalhes das funções.
                                                             (line   80)
* gerador:                               Glossário.          (line  710)
* gerador <1>:                           Glossário.          (line  710)
* gerador assíncrono:                    Glossário.          (line   95)
* gerador assíncrono;função:             Funções geradoras assíncronas.
                                                             (line    6)
* gerador assíncrono;iterador assíncrono: Funções geradoras assíncronas.
                                                             (line    6)
* gerador;expressão:                     Expressões geradoras<2>.
                                                             (line    6)
* gerador;função:                        Funções geradoras.  (line    6)
* gerador;função <1>:                    Expressões yield.   (line    6)
* gerador;função <2>:                    A instrução yield.  (line    6)
* gerador;iterador:                      Funções geradoras.  (line    6)
* gerador;iterador <1>:                  A instrução yield.  (line    6)
* gerenciador de contexto:               Gerenciadores de contexto da instrução with.
                                                             (line   14)
* gerenciador de contexto <1>:           Tipos de Gerenciador de Contexto.
                                                             (line    6)
* gerenciador de contexto <2>:           Glossário.          (line  358)
* gerenciador de contexto assíncrono:    Glossário.          (line   88)
* gerenciador de janela (widgets):       O Gerenciador de Janela.
                                                             (line    6)
* GET_AITER (opcode):                    Instruções em bytecode do Python.
                                                             (line  328)
* get_all_breaks() (método bdb.Bdb):     bdb — Framework do depurador.
                                                             (line  409)
* get_all_start_methods() (no módulo multiprocessing): Diversos<4>.
                                                             (line   75)
* get_all() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  254)
* get_all() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  364)
* get_all() (método wsgiref.headers.Headers): wsgiref headers – Ferramentas de cabeçalho de resposta WSGI.
                                                             (line   56)
* GET_ANEXT (opcode):                    Instruções em bytecode do Python.
                                                             (line  337)
* get_annotations() (no módulo inspect): Classes e funções<2>.
                                                             (line  156)
* get_app() (método wsgiref.simple_server.WSGIServer): wsgiref simple_server – um servidor HTTP WSGI simples.
                                                             (line   70)
* get_archive_formats() (no módulo shutil): Operações de arquivamento.
                                                             (line   68)
* get_args() (no módulo typing):         Auxiliares de introspecção.
                                                             (line   84)
* get_asyncgen_hooks() (no módulo sys):  sys — Parâmetros e funções específicas do sistema.
                                                             (line 1056)
* get_attribute() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  607)
* GET_AWAITABLE (opcode):                Instruções em bytecode do Python.
                                                             (line  309)
* get_begidx() (no módulo readline):     Autocomplemento.    (line   43)
* get_blocking() (no módulo os):         Operações dos descritores de arquivos.
                                                             (line  233)
* get_body_encoding() (método email.charset.Charset): email charset Representando conjuntos de caracteres.
                                                             (line  102)
* get_body() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  519)
* get_boundary() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  404)
* get_boundary() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  583)
* get_bpbynumber() (método bdb.Bdb):     bdb — Framework do depurador.
                                                             (line  384)
* get_break() (método bdb.Bdb):          bdb — Framework do depurador.
                                                             (line  394)
* get_breaks() (método bdb.Bdb):         bdb — Framework do depurador.
                                                             (line  399)
* get_buffer() (método asyncio.BufferedProtocol): Protocolos de Streaming Bufferizados.
                                                             (line   21)
* get_bytes() (método mailbox.Mailbox):  Objetos Mailbox.    (line  168)
* get_bytes() (método mailbox.mbox):     mbox objects.       (line   32)
* get_bytes() (método mailbox.MMDF):     MMDF objects.       (line   29)
* get_ca_certs() (método ssl.SSLContext): SSL Contexts.      (line  178)
* get_cache_token() (no módulo abc):     abc — Classes base abstratas.
                                                             (line  332)
* get_channel_binding() (método ssl.SSLSocket): SSL Sockets. (line  262)
* get_charset() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  268)
* get_charsets() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  432)
* get_charsets() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  617)
* get_child_watcher() (método asyncio.AbstractEventLoopPolicy): Policy Objects.
                                                             (line   33)
* get_child_watcher() (no módulo asyncio): Monitores de processos.
                                                             (line   25)
* get_children() (método symtable.SymbolTable): Examining Symbol Tables.
                                                             (line  118)
* get_children() (método tkinter.ttk.Treeview): ttk Treeview.
                                                             (line   19)
* get_ciphers() (método ssl.SSLContext): SSL Contexts.       (line  192)
* get_clock_info() (no módulo time):     Funções<5>.         (line  108)
* get_close_matches() (no módulo difflib): difflib — Helpers for computing deltas.
                                                             (line  205)
* get_code() (método importlib.abc.InspectLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  214)
* get_code() (método importlib.abc.SourceLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  414)
* get_code() (método importlib.machinery.ExtensionFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  342)
* get_code() (método importlib.machinery.SourcelessFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  277)
* get_code() (método zipimport.zipimporter): Objetos zipimporter.
                                                             (line   45)
* get_completer_delims() (no módulo readline): Autocomplemento.
                                                             (line   54)
* get_completer() (no módulo readline):  Autocomplemento.    (line   32)
* get_completion_type() (no módulo readline): Autocomplemento.
                                                             (line   37)
* get_config_h_filename() (no módulo sysconfig): Outras funções<3>.
                                                             (line   68)
* get_config_var() (no módulo sysconfig): Variáveis de configuração.
                                                             (line   27)
* get_config_vars() (no módulo sysconfig): Variáveis de configuração.
                                                             (line   16)
* get_content_charset() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  425)
* get_content_charset() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  606)
* get_content_disposition() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  456)
* get_content_disposition() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  631)
* get_content_maintype() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  324)
* get_content_maintype() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  434)
* get_content_subtype() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  330)
* get_content_subtype() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  440)
* get_content_type() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  308)
* get_content_type() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  418)
* get_content() (método email.contentmanager.ContentManager): email contentmanager Gerenciando conteúdo MIME.
                                                             (line   19)
* get_content() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  583)
* get_content() (no módulo email.contentmanager): Content Manager Instances.
                                                             (line   24)
* get_context() (método asyncio.Handle): Tratadores de função de retorno.
                                                             (line   11)
* get_context() (método asyncio.Task):   Objeto Task.        (line  178)
* get_context() (no módulo multiprocessing): Diversos<4>.    (line   85)
* get_coro() (método asyncio.Task):      Objeto Task.        (line  165)
* get_coroutine_origin_tracking_depth() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line 1070)
* get_count() (no módulo gc):            gc — Interface para o coletor de lixo.
                                                             (line  114)
* get_current_history_length() (no módulo readline): Lista de histórico.
                                                             (line   14)
* get_data() (método importlib.abc.FileLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  336)
* get_data() (método importlib.abc.ResourceLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  192)
* get_data() (método zipimport.zipimporter): Objetos zipimporter.
                                                             (line   51)
* get_data() (no módulo pkgutil):        pkgutil — Utilitário de extensão de pacote.
                                                             (line  193)
* get_date() (método mailbox.MaildirMessage): MaildirMessage objects.
                                                             (line   92)
* get_debug() (método asyncio.loop):     Habilitando o modo de debug.
                                                             (line    6)
* get_debug() (no módulo gc):            gc — Interface para o coletor de lixo.
                                                             (line   58)
* get_default_scheme() (no módulo sysconfig): Funções de caminho de instalação.
                                                             (line   14)
* get_default_type() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  335)
* get_default_type() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  445)
* get_default_verify_paths() (no módulo ssl): Manipulação de certificados.
                                                             (line   62)
* get_default() (método argparse.ArgumentParser): Padrões do analisador sintático.
                                                             (line   37)
* get_dialect() (no módulo csv):         Conteúdo do módulo<3>.
                                                             (line   90)
* get_disassembly_as_string() (método test.support.bytecode_helper.BytecodeTestCase): test support bytecode_helper — Ferramentas de suporte para testar a geração correta de bytecode.
                                                             (line   18)
* get_docstring() (no módulo ast):       Auxiliares de ast.  (line  125)
* get_doctest() (método doctest.DocTestParser): DocTestParser objects.
                                                             (line   13)
* get_endidx() (no módulo readline):     Autocomplemento.    (line   43)
* get_environ() (método wsgiref.simple_server.WSGIRequestHandler): wsgiref simple_server – um servidor HTTP WSGI simples.
                                                             (line   94)
* get_errno() (no módulo ctypes):        Funções utilitárias.
                                                             (line  151)
* get_escdelay() (no módulo curses):     Funções<6>.         (line  448)
* get_event_loop_policy() (no módulo asyncio): Getting and Setting the Policy.
                                                             (line    9)
* get_event_loop() (método asyncio.AbstractEventLoopPolicy): Policy Objects.
                                                             (line   12)
* get_event_loop() (no módulo asyncio):  Laço de eventos.    (line   43)
* get_events() (no módulo sys.monitoring): Definir eventos globalmente.
                                                             (line    9)
* get_examples() (método doctest.DocTestParser): DocTestParser objects.
                                                             (line   22)
* get_exception_handler() (método asyncio.loop): Tratando erros da API.
                                                             (line   29)
* get_exec_path() (no módulo os):        Parâmetros de processo.
                                                             (line  170)
* get_extra_info() (método asyncio.BaseTransport): Base Transport.
                                                             (line   21)
* get_extra_info() (método asyncio.StreamWriter): StreamWriter.
                                                             (line   65)
* get_field() (método string.Formatter): Formatação personalizada de strings.
                                                             (line   55)
* get_file_breaks() (método bdb.Bdb):    bdb — Framework do depurador.
                                                             (line  404)
* get_file() (método mailbox.Babyl):     Babyl objects.      (line   49)
* get_file() (método mailbox.Mailbox):   Objetos Mailbox.    (line  184)
* get_file() (método mailbox.Maildir):   Maildir objects.    (line  221)
* get_file() (método mailbox.mbox):      mbox objects.       (line   39)
* get_file() (método mailbox.MH):        MH objects.         (line   96)
* get_file() (método mailbox.MMDF):      MMDF objects.       (line   36)
* get_filename() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  394)
* get_filename() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  573)
* get_filename() (método importlib.abc.ExecutionLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  289)
* get_filename() (método importlib.abc.FileLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  332)
* get_filename() (método importlib.machinery.ExtensionFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  352)
* get_filename() (método zipimport.zipimporter): Objetos zipimporter.
                                                             (line   59)
* get_filter() (método tkinter.filedialog.FileDialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line  109)
* get_flags() (método mailbox.Maildir):  Maildir objects.    (line   92)
* get_flags() (método mailbox.MaildirMessage): MaildirMessage objects.
                                                             (line   63)
* get_flags() (método mailbox.mboxMessage): mboxMessage objects.
                                                             (line   64)
* get_flags() (método mailbox.MMDFMessage): MMDFMessage objects.
                                                             (line   63)
* get_folder() (método mailbox.Maildir): Maildir objects.    (line   69)
* get_folder() (método mailbox.MH):      MH objects.         (line   39)
* get_frees() (método symtable.Function): Examining Symbol Tables.
                                                             (line  145)
* get_freeze_count() (no módulo gc):     gc — Interface para o coletor de lixo.
                                                             (line  233)
* get_from() (método mailbox.mboxMessage): mboxMessage objects.
                                                             (line   47)
* get_from() (método mailbox.MMDFMessage): MMDFMessage objects.
                                                             (line   46)
* get_full_url() (método urllib.request.Request): Objeto Request.
                                                             (line  107)
* get_globals() (método symtable.Function): Examining Symbol Tables.
                                                             (line  136)
* get_grouped_opcodes() (método difflib.SequenceMatcher): SequenceMatcher Objects.
                                                             (line  168)
* get_handle_inheritable() (no módulo os): Herança de descritores de arquivos.
                                                             (line   40)
* get_header() (método urllib.request.Request): Objeto Request.
                                                             (line  121)
* get_history_item() (no módulo readline): Lista de histórico.
                                                             (line   20)
* get_history_length() (no módulo readline): Arquivo de histórico.
                                                             (line   31)
* get_id() (método symtable.SymbolTable): Examining Symbol Tables.
                                                             (line   69)
* get_ident() (no módulo _thread):       _thread— API de segmentação de baixo nível.
                                                             (line   91)
* get_ident() (no módulo threading):     Referência<2>.      (line   75)
* get_identifiers() (método string.Template): Strings template.
                                                             (line   78)
* get_identifiers() (método symtable.SymbolTable): Examining Symbol Tables.
                                                             (line  103)
* get_importer() (no módulo pkgutil):    pkgutil — Utilitário de extensão de pacote.
                                                             (line   76)
* get_info() (método mailbox.Maildir):   Maildir objects.    (line  155)
* get_info() (método mailbox.MaildirMessage): MaildirMessage objects.
                                                             (line  102)
* get_inheritable() (método socket.socket): Socket Objects.  (line  127)
* get_inheritable() (no módulo os):      Herança de descritores de arquivos.
                                                             (line   30)
* get_instructions() (no módulo dis):    Funções de análise. (line  139)
* get_int_max_str_digits() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line  864)
* get_interpreter() (no módulo zipapp):  API do Python.      (line   85)
* GET_ITER (opcode):                     Instruções em bytecode do Python.
                                                             (line  220)
* get_key() (método selectors.BaseSelector): Classes<4>.     (line  145)
* get_labels() (método mailbox.Babyl):   Babyl objects.      (line   35)
* get_labels() (método mailbox.BabylMessage): BabylMessage objects.
                                                             (line   47)
* get_last_error() (no módulo ctypes):   Funções utilitárias.
                                                             (line  159)
* GET_LEN (opcode):                      Instruções em bytecode do Python.
                                                             (line  534)
* get_line_buffer() (no módulo readline): Buffer de linha.   (line    8)
* get_lineno() (método symtable.SymbolTable): Examining Symbol Tables.
                                                             (line   85)
* get_loader() (no módulo pkgutil):      pkgutil — Utilitário de extensão de pacote.
                                                             (line   91)
* get_local_events() (no módulo sys.monitoring): Eventos por objeto código.
                                                             (line   11)
* get_locals() (método symtable.Function): Examining Symbol Tables.
                                                             (line  132)
* get_logger() (no módulo multiprocessing): Gerando logs<2>. (line   11)
* get_loop() (método asyncio.Future):    Objeto Future.      (line  138)
* get_loop() (método asyncio.Runner):    Runner context manager.
                                                             (line   57)
* get_loop() (método asyncio.Server):    Objetos Server.     (line   69)
* get_makefile_filename() (no módulo sysconfig): Outras funções<3>.
                                                             (line   72)
* get_map() (método selectors.BaseSelector): Classes<4>.     (line  153)
* get_matching_blocks() (método difflib.SequenceMatcher): SequenceMatcher Objects.
                                                             (line  107)
* get_message() (método mailbox.Mailbox): Objetos Mailbox.   (line  161)
* get_method() (método urllib.request.Request): Objeto Request.
                                                             (line   69)
* get_methods() (método symtable.Class): Examining Symbol Tables.
                                                             (line  155)
* get_mixed_type_key() (no módulo ipaddress): Outras funções de nível de módulo.
                                                             (line   59)
* get_name() (método asyncio.Task):      Objeto Task.        (line  185)
* get_name() (método symtable.Symbol):   Examining Symbol Tables.
                                                             (line  196)
* get_name() (método symtable.SymbolTable): Examining Symbol Tables.
                                                             (line   73)
* get_namespace() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  267)
* get_namespaces() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  263)
* get_native_id() (no módulo _thread):   _thread— API de segmentação de baixo nível.
                                                             (line  100)
* get_native_id() (no módulo threading): Referência<2>.      (line   86)
* get_nonlocals() (método symtable.Function): Examining Symbol Tables.
                                                             (line  140)
* get_nonstandard_attr() (método http.cookiejar.Cookie): Objetos Cookie<2>.
                                                             (line  102)
* get_nowait() (método asyncio.Queue):   Queue.              (line   48)
* get_nowait() (método multiprocessing.Queue): Encadeamentos e filas.
                                                             (line  177)
* get_nowait() (método queue.Queue):     Objetos Queue.      (line   66)
* get_nowait() (método queue.SimpleQueue): Objetos SimpleQueue.
                                                             (line   51)
* get_object_traceback() (no módulo tracemalloc): Funções<11>.
                                                             (line   12)
* get_objects() (no módulo gc):          gc — Interface para o coletor de lixo.
                                                             (line   62)
* get_opcodes() (método difflib.SequenceMatcher): SequenceMatcher Objects.
                                                             (line  125)
* get_option_group() (método optparse.OptionParser): Agrupando opções.
                                                             (line  103)
* get_option() (método optparse.OptionParser): Consultando e manipulando seu analisador sintático de opções.
                                                             (line   39)
* get_origin() (no módulo typing):       Auxiliares de introspecção.
                                                             (line   61)
* get_original_bases() (no módulo types): Criação de tipos dinâmicos.
                                                             (line   73)
* get_original_stdout() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  327)
* get_osfhandle() (no módulo msvcrt):    Operações com arquivos.
                                                             (line   61)
* get_output_charset() (método email.charset.Charset): email charset Representando conjuntos de caracteres.
                                                             (line  117)
* get_overloads() (no módulo typing):    Funções e decoradores.
                                                             (line  293)
* get_pagesize() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  294)
* get_param() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  480)
* get_parameters() (método symtable.Function): Examining Symbol Tables.
                                                             (line  127)
* get_params() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  459)
* get_path_names() (no módulo sysconfig): Funções de caminho de instalação.
                                                             (line   57)
* get_path() (no módulo sysconfig):      Funções de caminho de instalação.
                                                             (line   62)
* get_paths() (no módulo sysconfig):     Funções de caminho de instalação.
                                                             (line   93)
* get_payload() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  180)
* get_pid() (método asyncio.SubprocessTransport): Transportes de Subprocesso.
                                                             (line    6)
* get_pipe_transport() (método asyncio.SubprocessTransport): Transportes de Subprocesso.
                                                             (line   10)
* get_platform() (no módulo sysconfig):  Outras funções<3>.  (line   11)
* get_poly() (no módulo turtle):         Métodos Especiais da Tartaruga.
                                                             (line   17)
* get_preferred_scheme() (no módulo sysconfig): Funções de caminho de instalação.
                                                             (line   24)
* get_protocol_members() (no módulo typing): Auxiliares de introspecção.
                                                             (line  104)
* get_protocol() (método asyncio.BaseTransport): Base Transport.
                                                             (line   88)
* get_proxy_response_headers() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line  141)
* get_python_version() (no módulo sysconfig): Outras funções<3>.
                                                             (line    6)
* get_ready() (método graphlib.TopologicalSorter): graphlib — Funcionalidade para operar com estruturas do tipo grafo.
                                                             (line  152)
* get_referents() (no módulo gc):        gc — Interface para o coletor de lixo.
                                                             (line  146)
* get_referrers() (no módulo gc):        gc — Interface para o coletor de lixo.
                                                             (line  124)
* get_request() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line  142)
* get_resource_value() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  260)
* get_returncode() (método asyncio.SubprocessTransport): Transportes de Subprocesso.
                                                             (line   29)
* get_running_loop() (no módulo asyncio): Laço de eventos.   (line   30)
* get_scheme_names() (no módulo sysconfig): Funções de caminho de instalação.
                                                             (line    9)
* get_scheme() (método wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  192)
* get_selection() (método tkinter.filedialog.FileDialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line  113)
* get_sequences() (método mailbox.MH):   MH objects.         (line   56)
* get_sequences() (método mailbox.MHMessage): MHMessage objects.
                                                             (line   32)
* get_server_certificate() (no módulo ssl): Manipulação de certificados.
                                                             (line   29)
* get_server() (método multiprocessing.managers.BaseManager): Gerenciadores.
                                                             (line   65)
* get_shapepoly() (no módulo turtle):    Aparência.          (line  176)
* get_source_segment() (no módulo ast):  Auxiliares de ast.  (line  136)
* get_source() (método importlib.abc.InspectLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  229)
* get_source() (método importlib.abc.SourceLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  431)
* get_source() (método importlib.machinery.ExtensionFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  347)
* get_source() (método importlib.machinery.SourcelessFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  282)
* get_source() (método zipimport.zipimporter): Objetos zipimporter.
                                                             (line   67)
* get_stack() (método asyncio.Task):     Objeto Task.        (line  126)
* get_stack() (método bdb.Bdb):          bdb — Framework do depurador.
                                                             (line  417)
* get_start_method() (no módulo multiprocessing): Diversos<4>.
                                                             (line  100)
* get_starttag_text() (método html.parser.HTMLParser): Métodos HTMLParser.
                                                             (line   34)
* get_stats_profile() (método pstats.Stats): A classe Stats. (line  225)
* get_stats() (no módulo gc):            gc — Interface para o coletor de lixo.
                                                             (line   74)
* get_stderr() (método wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  129)
* get_stderr() (método wsgiref.simple_server.WSGIRequestHandler): wsgiref simple_server – um servidor HTTP WSGI simples.
                                                             (line  104)
* get_stdin() (método wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  123)
* get_string() (método mailbox.Mailbox): Objetos Mailbox.    (line  176)
* get_string() (método mailbox.mbox):    mbox objects.       (line   50)
* get_subdir() (método mailbox.MaildirMessage): MaildirMessage objects.
                                                             (line   47)
* get_symbols() (método symtable.SymbolTable): Examining Symbol Tables.
                                                             (line  113)
* get_tabsize() (no módulo curses):      Funções<6>.         (line  463)
* get_task_factory() (método asyncio.loop): Criando Futures e Tasks.
                                                             (line   72)
* get_terminal_size() (no módulo os):    Consultando o tamanho de um terminal.
                                                             (line    8)
* get_terminal_size() (no módulo shutil): Consultando o tamanho do terminal de saída.
                                                             (line    6)
* get_threshold() (no módulo gc):        gc — Interface para o coletor de lixo.
                                                             (line  119)
* get_token() (método shlex.shlex):      shlex Objects.      (line    8)
* get_tool() (no módulo sys.monitoring): Registro e uso de ferramentas.
                                                             (line   23)
* get_traceback_limit() (no módulo tracemalloc): Funções<11>.
                                                             (line   22)
* get_traced_memory() (no módulo tracemalloc): Funções<11>.  (line   32)
* get_tracemalloc_memory() (no módulo tracemalloc): Funções<11>.
                                                             (line   56)
* get_type_hints() (no módulo typing):   Auxiliares de introspecção.
                                                             (line    6)
* get_type() (método symtable.SymbolTable): Examining Symbol Tables.
                                                             (line   53)
* get_unixfrom() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  152)
* get_unixfrom() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  162)
* get_unpack_formats() (no módulo shutil): Operações de arquivamento.
                                                             (line  195)
* get_unverified_chain() (método ssl.SSLSocket): SSL Sockets.
                                                             (line  226)
* get_usage() (método optparse.OptionParser): Outros métodos.
                                                             (line   22)
* get_value() (método string.Formatter): Formatação personalizada de strings.
                                                             (line   66)
* get_verified_chain() (método ssl.SSLSocket): SSL Sockets.  (line  217)
* get_version() (método optparse.OptionParser): Exibindo uma string de versão.
                                                             (line   35)
* get_visible() (método mailbox.BabylMessage): BabylMessage objects.
                                                             (line   63)
* get_wch() (método curses.window):      Window Objects.     (line  243)
* get_write_buffer_limits() (método asyncio.WriteTransport): Write-only Transports.
                                                             (line   23)
* get_write_buffer_size() (método asyncio.WriteTransport): Write-only Transports.
                                                             (line   19)
* GET_YIELD_FROM_ITER (opcode):          Instruções em bytecode do Python.
                                                             (line  224)
* get() (método asyncio.Queue):          Queue.              (line   40)
* get() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  238)
* get() (método contextvars.Context):    Gerenciamento de contexto manual.
                                                             (line  118)
* get() (método contextvars.ContextVar): Variáveis de contexto.
                                                             (line   32)
* get() (método dict):                   Tipo mapeamento — dict.
                                                             (line  185)
* get() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  245)
* get() (método email.message.Message):  email message Message Representing an email message using the compat32 API.
                                                             (line  356)
* get() (método mailbox.Mailbox):        Objetos Mailbox.    (line  149)
* get() (método multiprocessing.pool.AsyncResult): Process Pools.
                                                             (line  203)
* get() (método multiprocessing.Queue):  Encadeamentos e filas.
                                                             (line  161)
* get() (método multiprocessing.SimpleQueue): Encadeamentos e filas.
                                                             (line  258)
* get() (método queue.Queue):            Objetos Queue.      (line   46)
* get() (método queue.SimpleQueue):      Objetos SimpleQueue.
                                                             (line   40)
* get() (método tkinter.ttk.Combobox):   ttk Combobox.       (line   15)
* get() (método tkinter.ttk.Spinbox):    ttk Spinbox.        (line    8)
* get() (método types.MappingProxyType): Tipos padrão do interpretador.
                                                             (line  265)
* get() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line   64)
* get() (no módulo webbrowser):          Interface de linha de comando<6>.
                                                             (line   71)
* getacl() (método imaplib.IMAP4):       Objetos IMAP4.      (line  106)
* getaddresses() (no módulo email.utils): email utils Utilitários diversos.
                                                             (line   88)
* getaddrinfo() (método asyncio.loop):   DNS.                (line    6)
* getaddrinfo() (no módulo socket):      Outras funções<2>.  (line   17)
* getallocatedblocks() (no módulo sys):  sys — Parâmetros e funções específicas do sistema.
                                                             (line  763)
* getandroidapilevel() (no módulo sys):  sys — Parâmetros e funções específicas do sistema.
                                                             (line  785)
* getannotation() (método imaplib.IMAP4): Objetos IMAP4.     (line  111)
* getargvalues() (no módulo inspect):    Classes e funções<2>.
                                                             (line   62)
* getasyncgenlocals() (no módulo inspect): Current State of Generators Coroutines and Asynchronous Generators.
                                                             (line  100)
* getasyncgenstate() (no módulo inspect): Current State of Generators Coroutines and Asynchronous Generators.
                                                             (line   47)
* getatime() (no módulo os.path):        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  188)
* getattr_static() (no módulo inspect):  Fetching attributes statically.
                                                             (line   16)
* getattrfunc (C type):                  Slot Type typedefs. (line   43)
* getAttribute() (método xml.dom.Element): Element Objects<2>.
                                                             (line   31)
* getAttributeNode() (método xml.dom.Element): Element Objects<2>.
                                                             (line   37)
* getAttributeNodeNS() (método xml.dom.Element): Element Objects<2>.
                                                             (line   47)
* getAttributeNS() (método xml.dom.Element): Element Objects<2>.
                                                             (line   41)
* getattrofunc (C type):                 Slot Type typedefs. (line   54)
* GetBase() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line   31)
* getbegyx() (método curses.window):     Window Objects.     (line  227)
* getbkgd() (método curses.window):      Window Objects.     (line  231)
* getblocking() (método socket.socket):  Socket Objects.     (line  164)
* getboolean() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  273)
* getbuffer() (método io.BytesIO):       Buffered Streams.   (line   21)
* getbufferproc (C type):                Slot Type typedefs. (line   98)
* getByteStream() (método xml.sax.xmlreader.InputSource): InputSource Objects.
                                                             (line   48)
* getcallargs() (no módulo inspect):     Classes e funções<2>.
                                                             (line   92)
* getcanvas() (no módulo turtle):        Configurações e métodos especiais.
                                                             (line   56)
* getch() (método curses.window):        Window Objects.     (line  236)
* getch() (no módulo msvcrt):            E/S de console.     (line   11)
* getCharacterStream() (método xml.sax.xmlreader.InputSource): InputSource Objects.
                                                             (line   64)
* getche() (no módulo msvcrt):           E/S de console.     (line   26)
* getChild() (método logging.Logger):    Objetos Logger.     (line  169)
* getChildren() (método logging.Logger): Objetos Logger.     (line  181)
* getclasstree() (no módulo inspect):    Classes e funções<2>.
                                                             (line    6)
* getclosurevars() (no módulo inspect):  Classes e funções<2>.
                                                             (line  123)
* getcode() (método http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   89)
* getcode() (método urllib.response.addinfourl): urllib response — Response classes used by urllib.
                                                             (line   45)
* getColumnNumber() (método xml.sax.xmlreader.Locator): Locator Objects.
                                                             (line    8)
* getcomments() (no módulo inspect):     Retrieving source code.
                                                             (line   18)
* getcompname() (método wave.Wave_read): Objetos Wave_read.  (line   41)
* getcomptype() (método wave.Wave_read): Objetos Wave_read.  (line   36)
* getconfig() (método sqlite3.Connection): Connection objects.
                                                             (line  648)
* getContentHandler() (método xml.sax.xmlreader.XMLReader): XMLReader Objects.
                                                             (line   21)
* getcontext() (no módulo decimal):      Objetos de contexto.
                                                             (line   13)
* getcoroutinelocals() (no módulo inspect): Current State of Generators Coroutines and Asynchronous Generators.
                                                             (line   92)
* getcoroutinestate() (no módulo inspect): Current State of Generators Coroutines and Asynchronous Generators.
                                                             (line   28)
* getctime() (no módulo os.path):        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  205)
* getcwd() (no módulo os):               Arquivos e diretórios.
                                                             (line  305)
* getcwdb() (no módulo os):              Arquivos e diretórios.
                                                             (line  309)
* getdecoder() (no módulo codecs):       codecs — Codec registry and base classes.
                                                             (line  116)
* getdefaultencoding() (no módulo sys):  sys — Parâmetros e funções específicas do sistema.
                                                             (line  797)
* getdefaultlocale() (no módulo locale): locale — Serviços de internacionalização.
                                                             (line  357)
* getdefaulttimeout() (no módulo socket): Outras funções<2>. (line  375)
* getdlopenflags() (no módulo sys):      sys — Parâmetros e funções específicas do sistema.
                                                             (line  802)
* getdoc() (no módulo inspect):          Retrieving source code.
                                                             (line    6)
* getDOMImplementation() (no módulo xml.dom): Conteúdo do módulo<6>.
                                                             (line   17)
* getDTDHandler() (método xml.sax.xmlreader.XMLReader): XMLReader Objects.
                                                             (line   30)
* getEffectiveLevel() (método logging.Logger): Objetos Logger.
                                                             (line  159)
* getegid() (no módulo os):              Parâmetros de processo.
                                                             (line  180)
* getElementsByTagName() (método xml.dom.Document): Document Objects.
                                                             (line   61)
* getElementsByTagName() (método xml.dom.Element): Element Objects<2>.
                                                             (line   14)
* getElementsByTagNameNS() (método xml.dom.Document): Document Objects.
                                                             (line   66)
* getElementsByTagNameNS() (método xml.dom.Element): Element Objects<2>.
                                                             (line   18)
* getencoder() (no módulo codecs):       codecs — Codec registry and base classes.
                                                             (line  108)
* getEncoding() (método xml.sax.xmlreader.InputSource): InputSource Objects.
                                                             (line   32)
* getencoding() (no módulo locale):      locale — Serviços de internacionalização.
                                                             (line  422)
* getEntityResolver() (método xml.sax.xmlreader.XMLReader): XMLReader Objects.
                                                             (line   39)
* getenv() (no módulo os):               Parâmetros de processo.
                                                             (line  138)
* getenvb() (no módulo os):              Parâmetros de processo.
                                                             (line  154)
* getErrorHandler() (método xml.sax.xmlreader.XMLReader): XMLReader Objects.
                                                             (line   50)
* geteuid() (no módulo os):              Parâmetros de processo.
                                                             (line  188)
* getEvent() (método xml.dom.pulldom.DOMEventStream): Objetos DOMEventStream.
                                                             (line   11)
* getEventCategory() (método logging.handlers.NTEventLogHandler): NTEventLogHandler.
                                                             (line   43)
* getEventType() (método logging.handlers.NTEventLogHandler): NTEventLogHandler.
                                                             (line   49)
* getException() (método xml.sax.SAXException): SAXException Objects.
                                                             (line   13)
* getFeature() (método xml.sax.xmlreader.XMLReader): XMLReader Objects.
                                                             (line   69)
* getfile() (no módulo inspect):         Retrieving source code.
                                                             (line   27)
* getFilesToDelete() (método logging.handlers.TimedRotatingFileHandler): TimedRotatingFileHandler.
                                                             (line  123)
* getfilesystemencodeerrors() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line  845)
* getfilesystemencoding() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line  811)
* getfirstweekday() (método calendar.Calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line   51)
* getfloat() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  266)
* getfqdn() (no módulo socket):          Outras funções<2>.  (line   99)
* getframeinfo() (no módulo inspect):    A pilha to interpretador.
                                                             (line  123)
* getframerate() (método wave.Wave_read): Objetos Wave_read. (line   28)
* getfullargspec() (no módulo inspect):  Classes e funções<2>.
                                                             (line   17)
* getgeneratorlocals() (no módulo inspect): Current State of Generators Coroutines and Asynchronous Generators.
                                                             (line   72)
* getgeneratorstate() (no módulo inspect): Current State of Generators Coroutines and Asynchronous Generators.
                                                             (line   12)
* getgid() (no módulo os):               Parâmetros de processo.
                                                             (line  194)
* getgrall() (no módulo grp):            grp — O banco de dados de grupos.
                                                             (line   60)
* getgrgid() (no módulo grp):            grp — O banco de dados de grupos.
                                                             (line   45)
* getgrnam() (no módulo grp):            grp — O banco de dados de grupos.
                                                             (line   54)
* getgrouplist() (no módulo os):         Parâmetros de processo.
                                                             (line  203)
* getgroups() (no módulo os):            Parâmetros de processo.
                                                             (line  215)
* getHandlerByName() (no módulo logging): Funções de nível de módulo.
                                                             (line  183)
* getHandlerNames() (no módulo logging): Funções de nível de módulo.
                                                             (line  190)
* getheader() (método http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   24)
* getheaders() (método http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   32)
* gethostbyaddr() (no módulo socket):    Parâmetros de processo.
                                                             (line  560)
* gethostbyaddr() (no módulo socket) <1>: Outras funções<2>. (line  156)
* gethostbyname_ex() (no módulo socket): Outras funções<2>.  (line  126)
* gethostbyname() (no módulo socket):    Outras funções<2>.  (line  111)
* gethostname() (no módulo socket):      Parâmetros de processo.
                                                             (line  560)
* gethostname() (no módulo socket) <1>:  Outras funções<2>.  (line  143)
* getincrementaldecoder() (no módulo codecs): codecs — Codec registry and base classes.
                                                             (line  132)
* getincrementalencoder() (no módulo codecs): codecs — Codec registry and base classes.
                                                             (line  124)
* getinfo() (método zipfile.ZipFile):    Objetos ZipFile.    (line  117)
* getinnerframes() (no módulo inspect):  A pilha to interpretador.
                                                             (line  146)
* GetInputContext() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line   37)
* getint() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  259)
* getitem() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  201)
* getiterfunc (C type):                  Slot Type typedefs. (line   86)
* getitimer() (no módulo signal):        Conteúdo do módulo<5>.
                                                             (line  474)
* getkey() (método curses.window):       Window Objects.     (line  251)
* GetLastError() (no módulo ctypes):     Funções utilitárias.
                                                             (line  143)
* getLength() (método xml.sax.xmlreader.Attributes): The Attributes Interface.
                                                             (line   11)
* getLevelName() (no módulo logging):    Funções de nível de módulo.
                                                             (line  150)
* getLevelNamesMapping() (no módulo logging): Funções de nível de módulo.
                                                             (line  141)
* getlimit() (método sqlite3.Connection): Connection objects.
                                                             (line  592)
* getline() (no módulo linecache):       linecache — Acesso aleatório a linhas de texto.
                                                             (line   24)
* getLineNumber() (método xml.sax.xmlreader.Locator): Locator Objects.
                                                             (line   12)
* getloadavg() (no módulo os):           Diversas informações de sistema.
                                                             (line   53)
* getlocale() (no módulo locale):        locale — Serviços de internacionalização.
                                                             (line  384)
* getLogger() (no módulo logging):       Funções de nível de módulo.
                                                             (line    9)
* getLoggerClass() (no módulo logging):  Funções de nível de módulo.
                                                             (line   23)
* getlogin() (no módulo os):             Parâmetros de processo.
                                                             (line  240)
* getLogRecordFactory() (no módulo logging): Funções de nível de módulo.
                                                             (line   34)
* getMandatoryRelease() (método __future__._Feature): Conteúdo do módulo<9>.
                                                             (line   74)
* getmark() (método wave.Wave_read):     Objetos Wave_read.  (line   72)
* getmarkers() (método wave.Wave_read):  Objetos Wave_read.  (line   64)
* getmaxyx() (método curses.window):     Window Objects.     (line  258)
* getmember() (método tarfile.TarFile):  Objetos TarFile.    (line  105)
* getmembers_static() (no módulo inspect): Tipos e membros.  (line  347)
* getmembers() (método tarfile.TarFile): Objetos TarFile.    (line  115)
* getmembers() (no módulo inspect):      Tipos e membros.    (line  334)
* getMessage() (método logging.LogRecord): LogRecord Objects.
                                                             (line   64)
* getMessage() (método xml.sax.SAXException): SAXException Objects.
                                                             (line    9)
* getMessageID() (método logging.handlers.NTEventLogHandler): NTEventLogHandler.
                                                             (line   60)
* getmodule() (no módulo inspect):       Retrieving source code.
                                                             (line   33)
* getmodulename() (no módulo inspect):   Tipos e membros.    (line  363)
* getmouse() (no módulo curses):         Funções<6>.         (line  145)
* getmro() (no módulo inspect):          Classes e funções<2>.
                                                             (line   84)
* getmtime() (no módulo os.path):        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  195)
* getName() (método threading.Thread):   Thread objects.     (line  159)
* getNameByQName() (método xml.sax.xmlreader.AttributesNS): The AttributesNS Interface.
                                                             (line   16)
* getnameinfo() (método asyncio.loop):   DNS.                (line   11)
* getnameinfo() (no módulo socket):      Outras funções<2>.  (line  172)
* getnames() (método tarfile.TarFile):   Objetos TarFile.    (line  121)
* getNames() (método xml.sax.xmlreader.Attributes): The Attributes Interface.
                                                             (line   15)
* getnchannels() (método wave.Wave_read): Objetos Wave_read. (line   19)
* getnframes() (método wave.Wave_read):  Objetos Wave_read.  (line   32)
* getnode() (no módulo uuid):            uuid — Objetos UUID conforme RFC 4122.
                                                             (line  163)
* getobjects() (no módulo sys):          sys — Parâmetros e funções específicas do sistema.
                                                             (line  961)
* getopt() (no módulo getopt):           getopt — Analisador sintático no estilo C para opções de linha de comando.
                                                             (line   33)
* GetoptError:                           getopt — Analisador sintático no estilo C para opções de linha de comando.
                                                             (line   86)
* getOptionalRelease() (método __future__._Feature): Conteúdo do módulo<9>.
                                                             (line   69)
* getouterframes() (no módulo inspect):  A pilha to interpretador.
                                                             (line  131)
* getoutput() (no módulo subprocess):    Legacy Shell Invocation Functions.
                                                             (line   45)
* getpagesize() (no módulo resource):    Uso de recursos.    (line  104)
* getparams() (método wave.Wave_read):   Objetos Wave_read.  (line   46)
* getparyx() (método curses.window):     Window Objects.     (line  262)
* getpass() (no módulo getpass):         getpass — Entrada de senha portátil.
                                                             (line   17)
* GetPassWarning:                        getpass — Entrada de senha portátil.
                                                             (line   35)
* getpeercert() (método ssl.SSLSocket):  SSL Sockets.        (line  148)
* getpeername() (método socket.socket):  Socket Objects.     (line  135)
* getpen() (no módulo turtle):           Métodos Especiais da Tartaruga.
                                                             (line   40)
* getpgid() (no módulo os):              Parâmetros de processo.
                                                             (line  251)
* getpgrp() (no módulo os):              Parâmetros de processo.
                                                             (line  258)
* getpid() (no módulo os):               Parâmetros de processo.
                                                             (line  264)
* getpos() (método html.parser.HTMLParser): Métodos HTMLParser.
                                                             (line   30)
* getppid() (no módulo os):              Parâmetros de processo.
                                                             (line  271)
* getpreferredencoding() (no módulo locale): locale — Serviços de internacionalização.
                                                             (line  396)
* getpriority() (no módulo os):          Parâmetros de processo.
                                                             (line  282)
* getprofile() (no módulo sys):          sys — Parâmetros e funções específicas do sistema.
                                                             (line  986)
* getprofile() (no módulo threading):    Referência<2>.      (line  155)
* getProperty() (método xml.sax.xmlreader.XMLReader): XMLReader Objects.
                                                             (line   83)
* getprotobyname() (no módulo socket):   Outras funções<2>.  (line  192)
* getproxies() (no módulo urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  169)
* getPublicId() (método xml.sax.xmlreader.InputSource): InputSource Objects.
                                                             (line   10)
* getPublicId() (método xml.sax.xmlreader.Locator): Locator Objects.
                                                             (line   16)
* getpwall() (no módulo pwd):            pwd — A senha do banco de dados.
                                                             (line   69)
* getpwnam() (no módulo pwd):            pwd — A senha do banco de dados.
                                                             (line   64)
* getpwuid() (no módulo pwd):            pwd — A senha do banco de dados.
                                                             (line   59)
* getQNameByName() (método xml.sax.xmlreader.AttributesNS): The AttributesNS Interface.
                                                             (line   20)
* getQNames() (método xml.sax.xmlreader.AttributesNS): The AttributesNS Interface.
                                                             (line   24)
* getquota() (método imaplib.IMAP4):     Objetos IMAP4.      (line  116)
* getquotaroot() (método imaplib.IMAP4): Objetos IMAP4.      (line  121)
* getrandbits() (método random.Random):  Gerador alternativo.
                                                             (line   46)
* getrandbits() (no módulo random):      Funções para inteiros.
                                                             (line   39)
* getrandom() (no módulo os):            Números aleatórios<2>.
                                                             (line    6)
* getreader() (no módulo codecs):        codecs — Codec registry and base classes.
                                                             (line  140)
* getrecursionlimit() (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line  890)
* getrefcount() (no módulo sys):         sys — Parâmetros e funções específicas do sistema.
                                                             (line  872)
* GetReparseDeferralEnabled() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  111)
* getresgid() (no módulo os):            Parâmetros de processo.
                                                             (line  330)
* getresponse() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line   81)
* getresuid() (no módulo os):            Parâmetros de processo.
                                                             (line  321)
* getrlimit() (no módulo resource):      Limites de recursos.
                                                             (line   26)
* getroot() (método xml.etree.ElementTree.ElementTree): ElementTree Objects.
                                                             (line   36)
* getrusage() (no módulo resource):      Uso de recursos.    (line    8)
* getsampwidth() (método wave.Wave_read): Objetos Wave_read. (line   24)
* getscreen() (no módulo turtle):        Métodos Especiais da Tartaruga.
                                                             (line   51)
* getservbyname() (no módulo socket):    Outras funções<2>.  (line  203)
* getservbyport() (no módulo socket):    Outras funções<2>.  (line  214)
* GetSetDescriptorType (no módulo types): Tipos padrão do interpretador.
                                                             (line  204)
* getshapes() (no módulo turtle):        Configurações e métodos especiais.
                                                             (line   65)
* getsid() (no módulo os):               Parâmetros de processo.
                                                             (line  517)
* getsignal() (no módulo signal):        Conteúdo do módulo<5>.
                                                             (line  317)
* getsitepackages() (no módulo site):    Conteúdo do módulo<10>.
                                                             (line   61)
* getsize() (no módulo os.path):         os path — Manipulações comuns de nomes de caminhos.
                                                             (line  217)
* getsizeof() (no módulo sys):           sys — Parâmetros e funções específicas do sistema.
                                                             (line  897)
* getsockname() (método socket.socket):  Socket Objects.     (line  143)
* getsockopt() (método socket.socket):   Socket Objects.     (line  149)
* getsource() (no módulo inspect):       Retrieving source code.
                                                             (line   59)
* getsourcefile() (no módulo inspect):   Retrieving source code.
                                                             (line   38)
* getsourcelines() (no módulo inspect):  Retrieving source code.
                                                             (line   45)
* getstate() (método codecs.IncrementalDecoder): IncrementalDecoder Objects.
                                                             (line   44)
* getstate() (método codecs.IncrementalEncoder): IncrementalEncoder Objects.
                                                             (line   42)
* getstate() (método random.Random):     Gerador alternativo.
                                                             (line   25)
* getstate() (no módulo random):         Funções de contabilidade.
                                                             (line   32)
* getstatusoutput() (no módulo subprocess): Legacy Shell Invocation Functions.
                                                             (line   11)
* getstr() (método curses.window):       Window Objects.     (line  268)
* getSubject() (método logging.handlers.SMTPHandler): SMTPHandler.
                                                             (line   39)
* getswitchinterval() (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line  920)
* getSystemId() (método xml.sax.xmlreader.InputSource): InputSource Objects.
                                                             (line   18)
* getSystemId() (método xml.sax.xmlreader.Locator): Locator Objects.
                                                             (line   20)
* getsyx() (no módulo curses):           Funções<6>.         (line  163)
* gettarinfo() (método tarfile.TarFile): Objetos TarFile.    (line  307)
* gettempdir() (no módulo tempfile):     tempfile — Generate temporary files and directories.
                                                             (line  320)
* gettempdirb() (no módulo tempfile):    tempfile — Generate temporary files and directories.
                                                             (line  352)
* gettempprefix() (no módulo tempfile):  tempfile — Generate temporary files and directories.
                                                             (line  358)
* gettempprefixb() (no módulo tempfile): tempfile — Generate temporary files and directories.
                                                             (line  363)
* getter (C type):                       Defining Getters and Setters.
                                                             (line   33)
* getTestCaseNames() (método unittest.TestLoader): Carregando e executando testes.
                                                             (line  113)
* gettext() (método gettext.GNUTranslations): A classe GNUTranslations.
                                                             (line   39)
* gettext() (método gettext.NullTranslations): A classe NullTranslations.
                                                             (line   37)
* gettext() (no módulo gettext):         API do GNU gettext. (line   32)
* gettext() (no módulo locale):          Acesso a catálogos de mensagens.
                                                             (line    6)
* gettimeout() (método socket.socket):   Socket Objects.     (line  173)
* gettrace() (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line  991)
* gettrace() (no módulo threading):      Referência<2>.      (line  133)
* getturtle() (no módulo turtle):        Métodos Especiais da Tartaruga.
                                                             (line   40)
* getType() (método xml.sax.xmlreader.Attributes): The Attributes Interface.
                                                             (line   19)
* getuid() (no módulo os):               Parâmetros de processo.
                                                             (line  339)
* getunicodeinternedsize() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line  779)
* geturl() (método http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   79)
* geturl() (método urllib.parse.urllib.parse.SplitResult): Structured Parse Results.
                                                             (line   12)
* geturl() (método urllib.response.addinfourl): urllib response — Response classes used by urllib.
                                                             (line   30)
* getuser() (no módulo getpass):         getpass — Entrada de senha portátil.
                                                             (line   40)
* getuserbase() (no módulo site):        Conteúdo do módulo<10>.
                                                             (line   68)
* getusersitepackages() (no módulo site): Conteúdo do módulo<10>.
                                                             (line   76)
* getvalue() (método io.BytesIO):        Buffered Streams.   (line   38)
* getvalue() (método io.StringIO):       E/S de texto<2>.    (line  265)
* getValue() (método xml.sax.xmlreader.Attributes): The Attributes Interface.
                                                             (line   24)
* getValueByQName() (método xml.sax.xmlreader.AttributesNS): The AttributesNS Interface.
                                                             (line   12)
* getwch() (no módulo msvcrt):           E/S de console.     (line   21)
* getwche() (no módulo msvcrt):          E/S de console.     (line   31)
* getweakrefcount() (no módulo weakref): weakref — Referências fracas.
                                                             (line  163)
* getweakrefs() (no módulo weakref):     weakref — Referências fracas.
                                                             (line  168)
* getwelcome() (método ftplib.FTP):      FTP objects.        (line  121)
* getwelcome() (método poplib.POP3):     Objetos POP3.       (line   20)
* getwin() (no módulo curses):           Funções<6>.         (line  169)
* getwindowsversion() (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line 1001)
* getwriter() (no módulo codecs):        codecs — Codec registry and base classes.
                                                             (line  148)
* getxattr() (no módulo os):             Atributos estendidos do Linux.
                                                             (line   10)
* getyx() (método curses.window):        Window Objects.     (line  279)
* gid (atributo tarfile.TarInfo):        Objetos TarInfo.    (line  113)
* GIL:                                   Glossário.          (line  762)
* glob() (método pathlib.Path):          Lendo diretórios.   (line   30)
* glob() (no módulo glob):               glob — Expansão de padrão de nome de arquivo no estilo Unix.
                                                             (line   31)
* Global (classe em ast):                Definições de função e classe.
                                                             (line  145)
* global_enum() (no módulo enum):        Utilities and Decorators.
                                                             (line   92)
* global;espaço de nomes:                Atributos especiais de somente leitura.
                                                             (line    6)
* global;nome;vinculação; ligação:       A instrução global. (line    6)
* globs (atributo doctest.DocTest):      DocTest Objects.    (line   22)
* gmtime() (no módulo time):             Funções<5>.         (line  142)
* gname (atributo tarfile.TarInfo):      Objetos TarInfo.    (line  129)
* GNOME:                                 O construtor Catalog.
                                                             (line    6)
* GNU_FORMAT (no módulo tarfile):        tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  347)
* gnu_getopt() (no módulo getopt):       getopt — Analisador sintático no estilo C para opções de linha de comando.
                                                             (line   73)
* GNUTranslations (classe em gettext):   A classe GNUTranslations.
                                                             (line   34)
* GNUTYPE_LONGLINK (no módulo tarfile):  tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  331)
* GNUTYPE_LONGNAME (no módulo tarfile):  tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  327)
* GNUTYPE_SPARSE (no módulo tarfile):    tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  335)
* go() (método tkinter.filedialog.FileDialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line  117)
* got (atributo doctest.DocTestFailure): Depuração.          (line  204)
* goto() (no módulo turtle):             Movimentos de Turtle.
                                                             (line   75)
* gramática:                             Notação.            (line    6)
* grantpt() (no módulo os):              Operações dos descritores de arquivos.
                                                             (line  254)
* GREATER (no módulo token):             token — Constantes usadas com árvores de análises do Python.
                                                             (line  222)
* GREATEREQUAL (no módulo token):        token — Constantes usadas com árvores de análises do Python.
                                                             (line  249)
* GRND_NONBLOCK (no módulo os):          Números aleatórios<2>.
                                                             (line   79)
* GRND_RANDOM (no módulo os):            Números aleatórios<2>.
                                                             (line   92)
* Group (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line  457)
* group() (método pathlib.Path):         Permissões e propriedade.
                                                             (line   23)
* group() (método re.Match):             Objetos correspondência.
                                                             (line   37)
* groupby() (no módulo itertools):       Funções do intertools.
                                                             (line  310)
* groupdict() (método re.Match):         Objetos correspondência.
                                                             (line  139)
* groupindex (atributo re.Pattern):      Objetos expressão regular.
                                                             (line  118)
* groups (atributo email.headerregistry.AddressHeader): email headerregistry Custom Header Objects.
                                                             (line  188)
* groups (atributo re.Pattern):          Objetos expressão regular.
                                                             (line  114)
* groups() (método re.Match):            Objetos correspondência.
                                                             (line  115)
* GS (no módulo curses.ascii):           curses ascii — Utilitários para caracteres ASCII.
                                                             (line  117)
* Gt (classe em ast):                    Expressões<2>.      (line  109)
* gt() (no módulo operator):             operator — Operadores padrões como funções.
                                                             (line   26)
* GtE (classe em ast):                   Expressões<2>.      (line  109)
* guard:                                 Guards.             (line    6)
* guess_all_extensions() (método mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line   73)
* guess_all_extensions() (no módulo mimetypes): mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line   66)
* guess_extension() (método mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line   56)
* guess_extension() (no módulo mimetypes): mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line   79)
* guess_file_type() (método mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line   66)
* guess_file_type() (no módulo mimetypes): mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line   57)
* guess_scheme() (no módulo wsgiref.util): wsgiref util – Utilidades do ambiente WSGI.
                                                             (line   14)
* guess_type() (método mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line   61)
* guess_type() (no módulo mimetypes):    mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line   24)
* GUI:                                   Interfaces gráficas de usuário com Tk.
                                                             (line    6)
* gzip opção de linha de comando; -best: Opções de linha de comando.
                                                             (line   14)
* gzip opção de linha de comando; -d:    Opções de linha de comando.
                                                             (line   18)
* gzip opção de linha de comando; -decompress: Opções de linha de comando.
                                                             (line   18)
* gzip opção de linha de comando; -fast: Opções de linha de comando.
                                                             (line   10)
* gzip opção de linha de comando; -h:    Opções de linha de comando.
                                                             (line   22)
* gzip opção de linha de comando; -help: Opções de linha de comando.
                                                             (line   22)
* gzip opção de linha de comando; file:  Opções de linha de comando.
                                                             (line    6)
* GzipFile (classe em gzip):             gzip — Suporte para arquivos gzip.
                                                             (line   74)
* halfdelay() (no módulo curses):        Funções<6>.         (line  211)
* Handle (classe em asyncio):            Tratadores de função de retorno.
                                                             (line    6)
* handle_charref() (método html.parser.HTMLParser): Métodos HTMLParser.
                                                             (line   95)
* handle_comment() (método html.parser.HTMLParser): Métodos HTMLParser.
                                                             (line  103)
* handle_data() (método html.parser.HTMLParser): Métodos HTMLParser.
                                                             (line   82)
* handle_decl() (método html.parser.HTMLParser): Métodos HTMLParser.
                                                             (line  116)
* handle_defect() (método email.policy.Policy): email policy Policy Objects.
                                                             (line  235)
* handle_endtag() (método html.parser.HTMLParser): Métodos HTMLParser.
                                                             (line   65)
* handle_entityref() (método html.parser.HTMLParser): Métodos HTMLParser.
                                                             (line   88)
* handle_error() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line  148)
* handle_expect_100() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  205)
* handle_one_request() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  199)
* handle_pi() (método html.parser.HTMLParser): Métodos HTMLParser.
                                                             (line  124)
* handle_request() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line   22)
* handle_request() (método xmlrpc.server.CGIXMLRPCRequestHandler): CGIXMLRPCRequestHandler.
                                                             (line   50)
* handle_startendtag() (método html.parser.HTMLParser): Métodos HTMLParser.
                                                             (line   73)
* handle_starttag() (método html.parser.HTMLParser): Métodos HTMLParser.
                                                             (line   47)
* handle_timeout() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line  158)
* handle() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  192)
* handle() (método logging.Handler):     Objetos Handler.    (line   83)
* handle() (método logging.handlers.QueueListener): QueueListener.
                                                             (line   67)
* handle() (método logging.Logger):      Objetos Logger.     (line  375)
* handle() (método logging.NullHandler): NullHandler.        (line   21)
* handle() (método socketserver.BaseRequestHandler): Objetos manipulador de requisições.
                                                             (line   21)
* handle() (método wsgiref.simple_server.WSGIRequestHandler): wsgiref simple_server – um servidor HTTP WSGI simples.
                                                             (line  110)
* handleError() (método logging.Handler): Objetos Handler.   (line   90)
* handleError() (método logging.handlers.SocketHandler): SocketHandler.
                                                             (line   34)
* Handler (classe em logging):           Objetos Handler.    (line   11)
* handlers (atributo logging.Logger):    Objetos Logger.     (line   92)
* Handlers (classe em signal):           Conteúdo do módulo<5>.
                                                             (line   24)
* hardlink_to() (método pathlib.Path):   Criando arquivos e diretórios.
                                                             (line   74)
* harmonic_mean() (no módulo statistics): Detalhes das funções.
                                                             (line  101)
* HAS_ALPN (no módulo ssl):              Constantes<9>.      (line  383)
* has_children() (método symtable.SymbolTable): Examining Symbol Tables.
                                                             (line   98)
* has_colors() (no módulo curses):       Funções<6>.         (line  176)
* has_default() (método typing.ParamSpec): Criando tipos genéricos e apelidos de tipo.
                                                             (line  449)
* has_default() (método typing.TypeVar): Criando tipos genéricos e apelidos de tipo.
                                                             (line  206)
* has_default() (método typing.TypeVarTuple): Criando tipos genéricos e apelidos de tipo.
                                                             (line  344)
* has_dualstack_ipv6() (no módulo socket): Criação de sockets.
                                                             (line  152)
* HAS_ECDH (no módulo ssl):              Constantes<9>.      (line  399)
* has_extended_color_support() (no módulo curses): Funções<6>.
                                                             (line  181)
* has_extn() (método smtplib.SMTP):      Objetos SMTP.       (line   85)
* has_header() (método csv.Sniffer):     Conteúdo do módulo<3>.
                                                             (line  252)
* has_header() (método urllib.request.Request): Objeto Request.
                                                             (line   95)
* has_ic() (no módulo curses):           Funções<6>.         (line  192)
* has_il() (no módulo curses):           Funções<6>.         (line  199)
* has_ipv6 (no módulo socket):           Constantes<8>.      (line  293)
* has_key() (no módulo curses):          Funções<6>.         (line  206)
* has_location (atributo importlib.machinery.ModuleSpec): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  447)
* HAS_NEVER_CHECK_COMMON_NAME (no módulo ssl): Constantes<9>.
                                                             (line  391)
* has_nonstandard_attr() (método http.cookiejar.Cookie): Objetos Cookie<2>.
                                                             (line   98)
* HAS_NPN (no módulo ssl):               Constantes<9>.      (line  414)
* has_option() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  150)
* has_option() (método optparse.OptionParser): Consultando e manipulando seu analisador sintático de opções.
                                                             (line   44)
* HAS_PSK (no módulo ssl):               Constantes<9>.      (line  466)
* has_section() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  140)
* HAS_SNI (no módulo ssl):               Constantes<9>.      (line  407)
* HAS_SSLv2 (no módulo ssl):             Constantes<9>.      (line  424)
* HAS_SSLv3 (no módulo ssl):             Constantes<9>.      (line  431)
* has_ticket (atributo ssl.SSLSession):  SSL session.        (line   20)
* HAS_TLSv1 (no módulo ssl):             Constantes<9>.      (line  438)
* HAS_TLSv1_1 (no módulo ssl):           Constantes<9>.      (line  445)
* HAS_TLSv1_2 (no módulo ssl):           Constantes<9>.      (line  452)
* HAS_TLSv1_3 (no módulo ssl):           Constantes<9>.      (line  459)
* hasarg (no módulo dis):                Opcode collections. (line   25)
* hasAttribute() (método xml.dom.Element): Element Objects<2>.
                                                             (line   22)
* hasAttributeNS() (método xml.dom.Element): Element Objects<2>.
                                                             (line   26)
* hasAttributes() (método xml.dom.Node): Objetos Node.       (line   94)
* hasChildNodes() (método xml.dom.Node): Objetos Node.       (line   98)
* hascompare (no módulo dis):            Opcode collections. (line   58)
* hasconst (no módulo dis):              Opcode collections. (line   31)
* hasexc (no módulo dis):                Opcode collections. (line   62)
* hasFeature() (método xml.dom.DOMImplementation): DOMImplementation Objects.
                                                             (line   11)
* hasfree (no módulo dis):               Opcode collections. (line   35)
* hash_bits (atributo sys.hash_info):    sys — Parâmetros e funções específicas do sistema.
                                                             (line 1113)
* hash_info (no módulo sys):             sys — Parâmetros e funções específicas do sistema.
                                                             (line 1082)
* hash_randomization (atributo sys.flags): sys — Parâmetros e funções específicas do sistema.
                                                             (line  589)
* hash.block_size (no módulo hashlib):   Objetos hash.       (line   13)
* hash.digest_size (no módulo hashlib):  Objetos hash.       (line    9)
* Hashable (classe em collections.abc):  Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line   10)
* Hashable (classe em typing):           Apelidos para outros ABCs em collections abc.
                                                             (line   54)
* hasHandlers() (método logging.Logger): Objetos Logger.     (line  390)
* hasheável:                             Sintaxes de criação de dicionário.
                                                             (line   39)
* hasheável <1>:                         Glossário.          (line  807)
* hashfunc (C type):                     Slot Type typedefs. (line   77)
* hasjabs (no módulo dis):               Opcode collections. (line   75)
* hasjrel (no módulo dis):               Opcode collections. (line   68)
* hasjump (no módulo dis):               Opcode collections. (line   47)
* haslocal (no módulo dis):              Opcode collections. (line   54)
* hasname (no módulo dis):               Opcode collections. (line   43)
* HAVE_ARGUMENT (opcode):                Instruções em bytecode do Python.
                                                             (line 1287)
* HAVE_CONTEXTVAR (no módulo decimal):   Constantes<4>.      (line   32)
* HAVE_DOCSTRINGS (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  172)
* HAVE_THREADS (no módulo decimal):      Constantes<4>.      (line   25)
* HCI_DATA_DIR (no módulo socket):       Constantes<8>.      (line  306)
* HCI_FILTER (no módulo socket):         Constantes<8>.      (line  306)
* HCI_TIME_STAMP (no módulo socket):     Constantes<8>.      (line  306)
* Header (classe em email.header):       email header Internationalized headers.
                                                             (line   59)
* header_encode_lines() (método email.charset.Charset): email charset Representando conjuntos de caracteres.
                                                             (line  131)
* header_encode() (método email.charset.Charset): email charset Representando conjuntos de caracteres.
                                                             (line  124)
* header_encoding (atributo email.charset.Charset): email charset Representando conjuntos de caracteres.
                                                             (line   63)
* header_factory (atributo email.policy.EmailPolicy): email policy Policy Objects.
                                                             (line  408)
* header_fetch_parse() (método email.policy.Compat32): email policy Policy Objects.
                                                             (line  594)
* header_fetch_parse() (método email.policy.EmailPolicy): email policy Policy Objects.
                                                             (line  458)
* header_fetch_parse() (método email.policy.Policy): email policy Policy Objects.
                                                             (line  319)
* header_items() (método urllib.request.Request): Objeto Request.
                                                             (line  126)
* header_max_count() (método email.policy.EmailPolicy): email policy Policy Objects.
                                                             (line  435)
* header_max_count() (método email.policy.Policy): email policy Policy Objects.
                                                             (line  260)
* header_offset (atributo zipfile.ZipInfo): Objetos ZipInfo. (line  152)
* header_source_parse() (método email.policy.Compat32): email policy Policy Objects.
                                                             (line  582)
* header_source_parse() (método email.policy.EmailPolicy): email policy Policy Objects.
                                                             (line  441)
* header_source_parse() (método email.policy.Policy): email policy Policy Objects.
                                                             (line  282)
* header_store_parse() (método email.policy.Compat32): email policy Policy Objects.
                                                             (line  590)
* header_store_parse() (método email.policy.EmailPolicy): email policy Policy Objects.
                                                             (line  449)
* header_store_parse() (método email.policy.Policy): email policy Policy Objects.
                                                             (line  303)
* HeaderDefect:                          email errors Classes de Exceção e Defeito.
                                                             (line   60)
* HeaderError:                           tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  237)
* HeaderParseError:                      email errors Classes de Exceção e Defeito.
                                                             (line   26)
* HeaderParser (classe em email.parser): Parser API.         (line  107)
* HeaderRegistry (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line  299)
* headers (atributo http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   56)
* headers (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  109)
* headers (atributo urllib.error.HTTPError): urllib error — Classes de exceção levantadas por urllib request.
                                                             (line   57)
* headers (atributo urllib.response.addinfourl): urllib response — Response classes used by urllib.
                                                             (line   19)
* headers (atributo xmlrpc.client.ProtocolError): Objetos ProtocolError.
                                                             (line   25)
* Headers (classe em wsgiref.headers):   wsgiref headers – Ferramentas de cabeçalho de resposta WSGI.
                                                             (line   10)
* HeaderWriteError:                      email errors Classes de Exceção e Defeito.
                                                             (line   50)
* heading() (método tkinter.ttk.Treeview): ttk Treeview.     (line   99)
* heading() (no módulo turtle):          Fala o estado de Turtle.
                                                             (line   58)
* heapify() (no módulo heapq):           heapq — Algoritmo de fila heap.
                                                             (line   41)
* heapmin() (no módulo msvcrt):          Outras funções<4>.  (line    6)
* heappop() (no módulo heapq):           heapq — Algoritmo de fila heap.
                                                             (line   49)
* heappush() (no módulo heapq):          heapq — Algoritmo de fila heap.
                                                             (line   45)
* heappushpop() (no módulo heapq):       heapq — Algoritmo de fila heap.
                                                             (line   56)
* heapreplace() (no módulo heapq):       heapq — Algoritmo de fila heap.
                                                             (line   63)
* helo_resp (atributo smtplib.SMTP):     Objetos SMTP.       (line  353)
* helo() (método smtplib.SMTP):          Objetos SMTP.       (line   47)
* help (atributo optparse.Option):       Atributos da classe Option.
                                                             (line   82)
* help (pdb command):                    Comandos de depuração.
                                                             (line   79)
* help;online:                           pydoc — Gerador de documentação e sistema de ajuda online.
                                                             (line    8)
* herança:                               Definições de classe.
                                                             (line    6)
* herror:                                Exceções<15>.       (line   13)
* hex (atributo uuid.UUID):              uuid — Objetos UUID conforme RFC 4122.
                                                             (line  131)
* hex() (método bytearray):              Objetos Bytearray.  (line   57)
* hex() (método bytes):                  Objetos bytes.      (line   86)
* hex() (método float):                  Métodos adicionais em ponto flutuante.
                                                             (line   35)
* hex() (método memoryview):             Memory Views.       (line  192)
* hexadecimal;literais:                  Tipos numéricos — int float complex.
                                                             (line   20)
* hexdigest() (método hashlib.hash):     Objetos hash.       (line   45)
* hexdigest() (método hashlib.shake):    Resumos de comprimento variável de SHAKE.
                                                             (line   21)
* hexdigest() (método hmac.HMAC):        hmac — Código de autenticação de mensagem com chave hash.
                                                             (line   74)
* hexdigits (no módulo string):          Constantes de strings.
                                                             (line   28)
* hexlify() (no módulo binascii):        binascii — Converte entre binário e ASCII.
                                                             (line  117)
* hexversion (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line 1131)
* hidden() (método curses.panel.Panel):  Objetos painel.     (line   25)
* hide_cookie2 (atributo http.cookiejar.CookiePolicy): Objeto CookiePolicy.
                                                             (line   76)
* hide() (método curses.panel.Panel):    Objetos painel.     (line   30)
* hide() (método tkinter.ttk.Notebook):  ttk Notebook.       (line   23)
* hideturtle() (no módulo turtle):       Visibilidade.       (line    6)
* HierarchyRequestErr:                   Exceções<20>.       (line   29)
* HIGH_PRIORITY_CLASS (no módulo subprocess): Constantes do Windows.
                                                             (line   82)
* HIGHEST_PROTOCOL (no módulo pickle):   Interface do módulo.
                                                             (line   14)
* hits (atributo bdb.Breakpoint):        bdb — Framework do depurador.
                                                             (line  127)
* HKEY_CLASSES_ROOT (no módulo winreg):  Constantes HKEY_*.  (line    6)
* HKEY_CURRENT_CONFIG (no módulo winreg): Constantes HKEY_*. (line   40)
* HKEY_CURRENT_USER (no módulo winreg):  Constantes HKEY_*.  (line   13)
* HKEY_DYN_DATA (no módulo winreg):      Constantes HKEY_*.  (line   45)
* HKEY_LOCAL_MACHINE (no módulo winreg): Constantes HKEY_*.  (line   21)
* HKEY_PERFORMANCE_DATA (no módulo winreg): Constantes HKEY_*.
                                                             (line   33)
* HKEY_USERS (no módulo winreg):         Constantes HKEY_*.  (line   27)
* hline() (método curses.window):        Window Objects.     (line  284)
* hls_to_rgb() (no módulo colorsys):     colorsys — Conversões entre sistemas de cores.
                                                             (line   40)
* HMAC (classe em hmac):                 hmac — Código de autenticação de mensagem com chave hash.
                                                             (line   47)
* HOME:                                  os path<5>.         (line   15)
* HOME <1>:                              Alterações na API Python<5>.
                                                             (line  121)
* HOME <2>:                              Windows<45>.        (line   15)
* HOME <3>:                              Windows<45>.        (line   18)
* HOME <4>:                              os path — Manipulações comuns de nomes de caminhos.
                                                             (line  154)
* HOME <5>:                              os path — Manipulações comuns de nomes de caminhos.
                                                             (line  172)
* HOME <6>:                              Módulos Tkinter.    (line   69)
* home() (método de classe pathlib.Path): Expandindo e resolvendo caminhos.
                                                             (line    6)
* home() (no módulo turtle):             Movimentos de Turtle.
                                                             (line  199)
* HOMEDRIVE:                             os path — Manipulações comuns de nomes de caminhos.
                                                             (line  161)
* HOMEPATH:                              os path — Manipulações comuns de nomes de caminhos.
                                                             (line  161)
* hook_compressed() (no módulo fileinput): fileinput — Itera sobre linhas de múltiplos fluxos de entrada.
                                                             (line  201)
* hook_encoded() (no módulo fileinput):  fileinput — Itera sobre linhas de múltiplos fluxos de entrada.
                                                             (line  221)
* Horário de verão:                      time — Acesso ao horário e conversões.
                                                             (line   47)
* host (atributo urllib.request.Request): Objeto Request.    (line   25)
* hostmask (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line  101)
* hostmask (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  320)
* hostname_checks_common_name (atributo ssl.SSLContext): SSL Contexts.
                                                             (line  614)
* hosts (atributo netrc.netrc):          Objetos netrc.      (line   25)
* hosts() (método ipaddress.IPv4Network): Objetos de rede.   (line  140)
* hosts() (método ipaddress.IPv6Network): Objetos de rede.   (line  338)
* hour (atributo datetime.datetime):     Objetos datetime.   (line  328)
* hour (atributo datetime.time):         Objetos time.       (line   51)
* HRESULT (classe em ctypes):            Tipos de dados fundamentais<2>.
                                                             (line  213)
* hStdError (atributo subprocess.STARTUPINFO): Windows Popen Helpers.
                                                             (line   42)
* hStdInput (atributo subprocess.STARTUPINFO): Windows Popen Helpers.
                                                             (line   27)
* hStdOutput (atributo subprocess.STARTUPINFO): Windows Popen Helpers.
                                                             (line   35)
* hsv_to_rgb() (no módulo colorsys):     colorsys — Conversões entre sistemas de cores.
                                                             (line   48)
* HT (no módulo curses.ascii):           curses ascii — Utilitários para caracteres ASCII.
                                                             (line   50)
* ht() (no módulo turtle):               Visibilidade.       (line    6)
* HTML:                                  html parser — Analisador simples de HTML e XHTML.
                                                             (line    8)
* HTML <1>:                              urllib request Restrictions.
                                                             (line   29)
* html5 (no módulo html.entities):       html entities — Definições de entidades gerais de HTML.
                                                             (line   14)
* HTMLCalendar (classe em calendar):     calendar — Funções gerais relacionadas ao calendário.
                                                             (line  231)
* HtmlDiff (classe em difflib):          difflib — Helpers for computing deltas.
                                                             (line   82)
* HTMLParser (classe em html.parser):    html parser — Analisador simples de HTML e XHTML.
                                                             (line   14)
* htonl() (no módulo socket):            Outras funções<2>.  (line  242)
* htons() (no módulo socket):            Outras funções<2>.  (line  249)
* HTTP (no módulo email.policy):         email policy Policy Objects.
                                                             (line  525)
* http_error_301() (método urllib.request.HTTPRedirectHandler): HTTPRedirectHandler Objects.
                                                             (line   35)
* http_error_302() (método urllib.request.HTTPRedirectHandler): HTTPRedirectHandler Objects.
                                                             (line   42)
* http_error_303() (método urllib.request.HTTPRedirectHandler): HTTPRedirectHandler Objects.
                                                             (line   48)
* http_error_307() (método urllib.request.HTTPRedirectHandler): HTTPRedirectHandler Objects.
                                                             (line   54)
* http_error_308() (método urllib.request.HTTPRedirectHandler): HTTPRedirectHandler Objects.
                                                             (line   61)
* http_error_401() (método urllib.request.HTTPBasicAuthHandler): HTTPBasicAuthHandler Objects.
                                                             (line    6)
* http_error_401() (método urllib.request.HTTPDigestAuthHandler): HTTPDigestAuthHandler Objects.
                                                             (line    6)
* http_error_407() (método urllib.request.ProxyBasicAuthHandler): ProxyBasicAuthHandler Objects.
                                                             (line    6)
* http_error_407() (método urllib.request.ProxyDigestAuthHandler): ProxyDigestAuthHandler Objects.
                                                             (line    6)
* http_error_auth_reqed() (método urllib.request.AbstractBasicAuthHandler): AbstractBasicAuthHandler Objects.
                                                             (line    6)
* http_error_auth_reqed() (método urllib.request.AbstractDigestAuthHandler): AbstractDigestAuthHandler Objects.
                                                             (line    6)
* http_error_default() (método urllib.request.BaseHandler): BaseHandler Objects.
                                                             (line   66)
* http_open() (método urllib.request.HTTPHandler): HTTPHandler Objects.
                                                             (line    6)
* HTTP_PORT (no módulo http.client):     http client — HTTP protocol client.
                                                             (line  201)
* http_response() (método urllib.request.HTTPErrorProcessor): HTTPErrorProcessor Objects.
                                                             (line    6)
* http_version (atributo wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  307)
* HTTP;http (módulo padrão):             http — módulos HTTP.
                                                             (line    8)
* HTTP;http.client (standard module):    http client — HTTP protocol client.
                                                             (line    8)
* HTTP;protocolo:                        urllib request Restrictions.
                                                             (line    6)
* HTTP;protocolo <1>:                    urllib request Restrictions.
                                                             (line   29)
* HTTP;protocolo <2>:                    http — módulos HTTP.
                                                             (line    8)
* HTTP;protocolo <3>:                    http client — HTTP protocol client.
                                                             (line    8)
* HTTP;protocolo <4>:                    http server — HTTP servers.
                                                             (line    8)
* http.server opção de linha de comando; -b: Interface de linha de comando<7>.
                                                             (line   21)
* http.server opção de linha de comando; -bind: Interface de linha de comando<7>.
                                                             (line   21)
* http.server opção de linha de comando; -cgi: Interface de linha de comando<7>.
                                                             (line   54)
* http.server opção de linha de comando; -d: Interface de linha de comando<7>.
                                                             (line   34)
* http.server opção de linha de comando; -directory: Interface de linha de comando<7>.
                                                             (line   34)
* http.server opção de linha de comando; -p: Interface de linha de comando<7>.
                                                             (line   44)
* http.server opção de linha de comando; -protocol: Interface de linha de comando<7>.
                                                             (line   44)
* http.server opção de linha de comando; port: Interface de linha de comando<7>.
                                                             (line   14)
* http.server;security:                  Considerações de segurança<3>.
                                                             (line    6)
* HTTPBasicAuthHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  364)
* HTTPConnection (classe em http.client): http client — HTTP protocol client.
                                                             (line   31)
* HTTPCookieProcessor (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  295)
* httpd:                                 http server — HTTP servers.
                                                             (line    8)
* HTTPDefaultErrorHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  286)
* HTTPDigestAuthHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  388)
* HTTPError:                             urllib error — Classes de exceção levantadas por urllib request.
                                                             (line   32)
* HTTPErrorProcessor (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  448)
* HTTPException:                         http client — HTTP protocol client.
                                                             (line  132)
* HTTPHandler (classe em logging.handlers): HTTPHandler.     (line   10)
* HTTPHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  412)
* HTTPMessage (classe em http.client):   HTTPMessage Objects.
                                                             (line    6)
* HTTPMethod (classe em http):           Categorias de HTTP status.
                                                             (line   38)
* httponly (atributo http.cookies.Morsel): Objetos Morsel.   (line   13)
* HTTPPasswordMgr (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  321)
* HTTPPasswordMgrWithDefaultRealm (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  325)
* HTTPPasswordMgrWithPriorAuth (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  331)
* HTTPRedirectHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  291)
* HTTPResponse (classe em http.client):  http client — HTTP protocol client.
                                                             (line   99)
* https_open() (método urllib.request.HTTPSHandler): Objetos HTTPSHandler.
                                                             (line    6)
* HTTPS_PORT (no módulo http.client):    http client — HTTP protocol client.
                                                             (line  205)
* https_response() (método urllib.request.HTTPErrorProcessor): HTTPErrorProcessor Objects.
                                                             (line   18)
* HTTPSConnection (classe em http.client): http client — HTTP protocol client.
                                                             (line   62)
* HTTPServer (classe em http.server):    http server — HTTP servers.
                                                             (line   30)
* HTTPSHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  416)
* HTTPStatus (classe em http):           http — módulos HTTP.
                                                             (line   28)
* HV_GUID_BROADCAST (no módulo socket):  Constantes<8>.      (line  344)
* HV_GUID_CHILDREN (no módulo socket):   Constantes<8>.      (line  344)
* HV_GUID_LOOPBACK (no módulo socket):   Constantes<8>.      (line  344)
* HV_GUID_PARENT (no módulo socket):     Constantes<8>.      (line  344)
* HV_GUID_WILDCARD (no módulo socket):   Constantes<8>.      (line  344)
* HV_GUID_ZERO (no módulo socket):       Constantes<8>.      (line  344)
* HV_PROTOCOL_RAW (no módulo socket):    Constantes<8>.      (line  344)
* HVSOCKET_ADDRESS_FLAG_PASSTHRU (no módulo socket): Constantes<8>.
                                                             (line  344)
* HVSOCKET_CONNECT_TIMEOUT (no módulo socket): Constantes<8>.
                                                             (line  344)
* HVSOCKET_CONNECT_TIMEOUT_MAX (no módulo socket): Constantes<8>.
                                                             (line  344)
* HVSOCKET_CONNECTED_SUSPEND (no módulo socket): Constantes<8>.
                                                             (line  344)
* hypot() (no módulo math):              Funções de soma e produto.
                                                             (line   35)
* I (no módulo re):                      Sinalizadores.      (line   39)
* iadd() (no módulo operator):           Operadores in-place.
                                                             (line   39)
* iand() (no módulo operator):           Operadores in-place.
                                                             (line   44)
* iconcat() (no módulo operator):        Operadores in-place.
                                                             (line   49)
* id (atributo ssl.SSLSession):          SSL session.        (line   12)
* id() (método unittest.TestCase):       Casos de teste.     (line  775)
* idcok() (método curses.window):        Window Objects.     (line  291)
* ident (atributo select.kevent):        Kevent Objects.     (line    8)
* ident (atributo threading.Thread):     Thread objects.     (line  167)
* identchars (atributo cmd.Cmd):         Objetos Cmd.        (line  138)
* identidade de um objeto:               Objetos valores e tipos.
                                                             (line   10)
* identidade;teste:                      Operações de teste de pertinência.
                                                             (line   41)
* identificador:                         Identificadores e palavras-chave.
                                                             (line    6)
* identificador <1>:                     Identificadores Nomes.
                                                             (line    6)
* identify_column() (método tkinter.ttk.Treeview): ttk Treeview.
                                                             (line  143)
* identify_element() (método tkinter.ttk.Treeview): ttk Treeview.
                                                             (line  172)
* identify_region() (método tkinter.ttk.Treeview): ttk Treeview.
                                                             (line  150)
* identify_row() (método tkinter.ttk.Treeview): ttk Treeview.
                                                             (line  139)
* identify() (método tkinter.ttk.Notebook): ttk Notebook.    (line   32)
* identify() (método tkinter.ttk.Treeview): ttk Treeview.    (line  133)
* identify() (método tkinter.ttk.Widget): ttk Widget.        (line   11)
* IDLE:                                  IDLE — editor e console Python<2>.
                                                             (line    8)
* IDLE <1>:                              Glossário.          (line  828)
* idle opção de linha de comando; -:     Uso na linha de comando<5>.
                                                             (line   49)
* idle opção de linha de comando; -c:    Uso na linha de comando<5>.
                                                             (line   13)
* idle opção de linha de comando; -d:    Uso na linha de comando<5>.
                                                             (line   19)
* idle opção de linha de comando; -e:    Uso na linha de comando<5>.
                                                             (line   23)
* idle opção de linha de comando; -h:    Uso na linha de comando<5>.
                                                             (line   27)
* idle opção de linha de comando; -i:    Uso na linha de comando<5>.
                                                             (line   31)
* idle opção de linha de comando; -r:    Uso na linha de comando<5>.
                                                             (line   35)
* idle opção de linha de comando; -s:    Uso na linha de comando<5>.
                                                             (line   39)
* idle opção de linha de comando; -t:    Uso na linha de comando<5>.
                                                             (line   45)
* IDLE_PRIORITY_CLASS (no módulo subprocess): Constantes do Windows.
                                                             (line   89)
* IDLESTARTUP:                           IDLE<41>.           (line  176)
* IDLESTARTUP <1>:                       IDLE<45>.           (line    9)
* IDLESTARTUP <2>:                       IDLE<51>.           (line    9)
* IDLESTARTUP <3>:                       Startup and Code Execution.
                                                             (line    7)
* IDLESTARTUP <4>:                       Uso na linha de comando<5>.
                                                             (line   41)
* idlok() (método curses.window):        Window Objects.     (line  299)
* If (classe em ast):                    Fluxo de controle.  (line    9)
* if_indextoname() (no módulo socket):   Outras funções<2>.  (line  444)
* if_nameindex() (no módulo socket):     Outras funções<2>.  (line  401)
* if_nametoindex() (no módulo socket):   Outras funções<2>.  (line  426)
* if;em compreensões:                    Sintaxe de criação de listas conjuntos e dicionários.
                                                             (line   15)
* if;expressão condicional:              Expressões condicionais.
                                                             (line    6)
* IfExp (classe em ast):                 Expressões<2>.      (line  157)
* ifloordiv() (no módulo operator):      Operadores in-place.
                                                             (line   55)
* iglob() (no módulo glob):              glob — Expansão de padrão de nome de arquivo no estilo Unix.
                                                             (line   83)
* ignorableWhitespace() (método xml.sax.handler.ContentHandler): ContentHandler Objects.
                                                             (line  148)
* ignore (atributo bdb.Breakpoint):      bdb — Framework do depurador.
                                                             (line  123)
* IGNORE (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  153)
* ignore (pdb command):                  Comandos de depuração.
                                                             (line  157)
* ignore_environment (atributo sys.flags): sys — Parâmetros e funções específicas do sistema.
                                                             (line  577)
* ignore_errors() (no módulo codecs):    Error Handlers.     (line  147)
* IGNORE_EXCEPTION_DETAIL (no módulo doctest): Flags opcionais.
                                                             (line   56)
* ignore_patterns() (no módulo shutil):  Operações de diretório e arquivos.
                                                             (line  205)
* ignore_warnings() (no módulo test.support.warnings_helper): test support warnings_helper — Utilities for warnings tests.
                                                             (line   11)
* ignore;error handler's name:           Error Handlers.     (line   15)
* IGNORECASE (no módulo re):             Sinalizadores.      (line   39)
* IISCGIHandler (classe em wsgiref.handlers): wsgiref handlers – classes base de servidor/gateway.
                                                             (line   24)
* IllegalMonthError:                     calendar — Funções gerais relacionadas ao calendário.
                                                             (line  535)
* IllegalWeekdayError:                   calendar — Funções gerais relacionadas ao calendário.
                                                             (line  544)
* ilshift() (no módulo operator):        Operadores in-place.
                                                             (line   60)
* imag (atributo numbers.Complex):       A torre numérica.   (line   19)
* imag (atributo sys.hash_info):         sys — Parâmetros e funções específicas do sistema.
                                                             (line 1104)
* imap_unordered() (método multiprocessing.pool.Pool): Process Pools.
                                                             (line  148)
* imap() (método multiprocessing.pool.Pool): Process Pools.  (line  133)
* IMAP4 (classe em imaplib):             imaplib — IMAP4 protocol client.
                                                             (line   25)
* IMAP4_SSL (classe em imaplib):         imaplib — IMAP4 protocol client.
                                                             (line   75)
* IMAP4_SSL;protocolo:                   imaplib — IMAP4 protocol client.
                                                             (line    8)
* IMAP4_stream (classe em imaplib):      imaplib — IMAP4 protocol client.
                                                             (line  107)
* IMAP4_stream;protocolo:                imaplib — IMAP4 protocol client.
                                                             (line    8)
* IMAP4;protocolo:                       imaplib — IMAP4 protocol client.
                                                             (line    8)
* IMAP4.abort:                           imaplib — IMAP4 protocol client.
                                                             (line   59)
* IMAP4.error:                           imaplib — IMAP4 protocol client.
                                                             (line   54)
* IMAP4.readonly:                        imaplib — IMAP4 protocol client.
                                                             (line   66)
* imatmul() (no módulo operator):        Operadores in-place.
                                                             (line   75)
* immedok() (método curses.window):      Window Objects.     (line  305)
* imod() (no módulo operator):           Operadores in-place.
                                                             (line   65)
* imortal:                               Glossário.          (line  835)
* impasse:                               Glossário.          (line  428)
* impl_detail() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  548)
* implementation (no módulo sys):        sys — Parâmetros e funções específicas do sistema.
                                                             (line 1154)
* Import (classe em ast):                Importações.        (line    6)
* import_curses (C macro):               API C de curses.    (line   16)
* import_fresh_module() (no módulo test.support.import_helper): test support import_helper — Utilities for import tests.
                                                             (line   16)
* IMPORT_FROM (opcode):                  Instruções em bytecode do Python.
                                                             (line  841)
* import_module() (no módulo importlib): Funções<12>.        (line   14)
* import_module() (no módulo test.support.import_helper): test support import_helper — Utilities for import tests.
                                                             (line   52)
* IMPORT_NAME (opcode):                  Instruções em bytecode do Python.
                                                             (line  832)
* importação:                            Glossário.          (line  865)
* importador:                            Glossário.          (line  870)
* ImportError:                           Exceções concretas. (line   52)
* ImportFrom (classe em ast):            Importações.        (line   20)
* ImportWarning:                         Avisos.             (line   59)
* imprimíveis entre aspas;codificação:   quopri — Codifica e decodifica dados MIME imprimidos entre aspas.
                                                             (line    8)
* ImproperConnectionState:               http client — HTTP protocol client.
                                                             (line  162)
* imul() (no módulo operator):           Operadores in-place.
                                                             (line   70)
* imutável:                              Glossário.          (line  845)
* imutável;dados;tipo:                   Literais<2>.        (line   18)
* imutável;objeto:                       Literais<2>.        (line   18)
* imutável;objeto <1>:                   Sintaxes de criação de dicionário.
                                                             (line   39)
* imutável;sequência;types:              Tipos sequência imutáveis.
                                                             (line    6)
* In (classe em ast):                    Expressões<2>.      (line  109)
* in_dll() (método ctypes._CData):       Data types.         (line   65)
* in_table_a1() (no módulo stringprep):  stringprep — Preparação de string para internet.
                                                             (line   40)
* in_table_b1() (no módulo stringprep):  stringprep — Preparação de string para internet.
                                                             (line   45)
* in_table_c11_c12() (no módulo stringprep): stringprep — Preparação de string para internet.
                                                             (line   71)
* in_table_c11() (no módulo stringprep): stringprep — Preparação de string para internet.
                                                             (line   61)
* in_table_c12() (no módulo stringprep): stringprep — Preparação de string para internet.
                                                             (line   66)
* in_table_c21_c22() (no módulo stringprep): stringprep — Preparação de string para internet.
                                                             (line   86)
* in_table_c21() (no módulo stringprep): stringprep — Preparação de string para internet.
                                                             (line   76)
* in_table_c22() (no módulo stringprep): stringprep — Preparação de string para internet.
                                                             (line   81)
* in_table_c3() (no módulo stringprep):  stringprep — Preparação de string para internet.
                                                             (line   91)
* in_table_c4() (no módulo stringprep):  stringprep — Preparação de string para internet.
                                                             (line   95)
* in_table_c5() (no módulo stringprep):  stringprep — Preparação de string para internet.
                                                             (line  100)
* in_table_c6() (no módulo stringprep):  stringprep — Preparação de string para internet.
                                                             (line  104)
* in_table_c7() (no módulo stringprep):  stringprep — Preparação de string para internet.
                                                             (line  109)
* in_table_c8() (no módulo stringprep):  stringprep — Preparação de string para internet.
                                                             (line  114)
* in_table_c9() (no módulo stringprep):  stringprep — Preparação de string para internet.
                                                             (line  119)
* in_table_d1() (no módulo stringprep):  stringprep — Preparação de string para internet.
                                                             (line  123)
* in_table_d2() (no módulo stringprep):  stringprep — Preparação de string para internet.
                                                             (line  128)
* in_transaction (atributo sqlite3.Connection): Connection objects.
                                                             (line  766)
* inch() (método curses.window):         Window Objects.     (line  313)
* include() (no módulo xml.etree.ElementInclude): Funções<10>.
                                                             (line   17)
* inclusive (atributo tracemalloc.DomainFilter): DomainFilter.
                                                             (line   12)
* inclusive (atributo tracemalloc.Filter): Filter.           (line   39)
* inclusive;or:                          Operações binárias bit a bit.
                                                             (line   22)
* Incomplete:                            binascii — Converte entre binário e ASCII.
                                                             (line  164)
* IncompleteRead:                        http client — HTTP protocol client.
                                                             (line  158)
* IncompleteReadError:                   Exceções<13>.       (line   44)
* incr_item():                           Exceções<21>.       (line   82)
* incr_item() <1>:                       Exceções<21>.       (line  127)
* increment_lineno() (no módulo ast):    Auxiliares de ast.  (line  159)
* incrementaldecoder (atributo codecs.CodecInfo): codecs — Codec registry and base classes.
                                                             (line   87)
* IncrementalDecoder (classe em codecs): IncrementalDecoder Objects.
                                                             (line   11)
* incrementalencoder (atributo codecs.CodecInfo): codecs — Codec registry and base classes.
                                                             (line   87)
* IncrementalEncoder (classe em codecs): IncrementalEncoder Objects.
                                                             (line   11)
* IncrementalNewlineDecoder (classe em io): E/S de texto<2>. (line  287)
* IncrementalParser (classe em xml.sax.xmlreader): xml sax xmlreader — Interface for XML parsers.
                                                             (line   20)
* indent (atributo doctest.Example):     Example Objects.    (line   47)
* indent (atributo reprlib.Repr):        Objetos Repr.       (line   55)
* INDENT (no módulo token):              token — Constantes usadas com árvores de análises do Python.
                                                             (line   89)
* indent() (no módulo textwrap):         textwrap — Quebra automática e preenchimento de texto.
                                                             (line  107)
* indent() (no módulo xml.etree.ElementTree): Funções<9>.    (line  117)
* indentação:                            Indentação.         (line    6)
* IndentationError:                      Exceções concretas. (line  364)
* index (atributo inspect.FrameInfo):    A pilha to interpretador.
                                                             (line   37)
* index (atributo inspect.Traceback):    A pilha to interpretador.
                                                             (line   77)
* index() (método array.array):          array— Vetores eficientes de valores numéricos.
                                                             (line  202)
* index() (método bytearray):            Operações com Bytes e Bytearray.
                                                             (line  158)
* index() (método bytes):                Operações com Bytes e Bytearray.
                                                             (line  158)
* index() (método collections.abc.ByteString): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line   82)
* index() (método collections.deque):    Objetos deque.      (line   75)
* index() (método multiprocessing.shared_memory.ShareableList): multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line  354)
* index() (método sequence):             Operações comuns de sequências.
                                                             (line  179)
* index() (método str):                  String Methods<2>.  (line  243)
* index() (método tkinter.ttk.Notebook): ttk Notebook.       (line   37)
* index() (método tkinter.ttk.Treeview): ttk Treeview.       (line  178)
* index() (no módulo operator):          operator — Operadores padrões como funções.
                                                             (line   97)
* IndexError:                            Exceções concretas. (line   80)
* indexOf() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  206)
* IndexSizeErr:                          Exceções<20>.       (line   34)
* indices() (método slice):              Objetos slice.      (line   17)
* INDIRECT (atributo inspect.BufferFlags): Buffer flags.     (line   31)
* inet_aton() (no módulo socket):        Outras funções<2>.  (line  259)
* inet_ntoa() (no módulo socket):        Outras funções<2>.  (line  279)
* inet_ntop() (no módulo socket):        Outras funções<2>.  (line  314)
* inet_pton() (no módulo socket):        Outras funções<2>.  (line  296)
* Inexact (classe em decimal):           Sinais.             (line   44)
* inf (atributo sys.hash_info):          sys — Parâmetros e funções específicas do sistema.
                                                             (line 1096)
* inf (no módulo cmath):                 Constantes<3>.      (line   20)
* inf (no módulo math):                  Constantes<2>.      (line   24)
* infile (atributo shlex.shlex):         shlex Objects.      (line  140)
* Infinity:                              Funções embutidas<3>.
                                                             (line  737)
* infj (no módulo cmath):                Constantes<3>.      (line   26)
* INFO (no módulo logging):              Níveis de Logging.  (line   30)
* INFO (no módulo tkinter.messagebox):   tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  196)
* info() (método dis.Bytecode):          Análise de bytecode.
                                                             (line   68)
* info() (método gettext.NullTranslations): A classe NullTranslations.
                                                             (line   66)
* info() (método http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   84)
* info() (método logging.Logger):        Objetos Logger.     (line  298)
* info() (método urllib.response.addinfourl): urllib response — Response classes used by urllib.
                                                             (line   35)
* info() (no módulo logging):            Funções de nível de módulo.
                                                             (line   64)
* infolist() (método zipfile.ZipFile):   Objetos ZipFile.    (line  123)
* informações de configuração:           sysconfig — Fornece acesso às informações de configuração do Python.
                                                             (line   10)
* init_color() (no módulo curses):       Funções<6>.         (line  220)
* init_pair() (no módulo curses):        Funções<6>.         (line  232)
* init() (no módulo mimetypes):          mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line   96)
* inited (no módulo mimetypes):          mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line  138)
* initgroups() (no módulo os):           Parâmetros de processo.
                                                             (line  348)
* initial_indent (atributo textwrap.TextWrapper): textwrap — Quebra automática e preenchimento de texto.
                                                             (line  219)
* initproc (C type):                     Slot Type typedefs. (line   35)
* initscr() (no módulo curses):          Funções<6>.         (line  245)
* InitVar (classe em dataclasses):       Conteúdo do módulo<8>.
                                                             (line  333)
* inode() (método os.DirEntry):          Arquivos e diretórios.
                                                             (line 1012)
* input_charset (atributo email.charset.Charset): email charset Representando conjuntos de caracteres.
                                                             (line   56)
* input_codec (atributo email.charset.Charset): email charset Representando conjuntos de caracteres.
                                                             (line   87)
* input() (no módulo fileinput):         fileinput — Itera sobre linhas de múltiplos fluxos de entrada.
                                                             (line   60)
* InputSource (classe em xml.sax.xmlreader): xml sax xmlreader — Interface for XML parsers.
                                                             (line   51)
* InputStream (classe em wsgiref.types): wsgiref types – WSGI types for static type checking.
                                                             (line   24)
* inquiry (C type):                      Suporte a Coleta Cíclica de Lixo.
                                                             (line  202)
* insch() (método curses.window):        Window Objects.     (line  319)
* insdelln() (método curses.window):     Window Objects.     (line  326)
* insert_text() (no módulo readline):    Buffer de linha.    (line   13)
* insert() (método array.array):         array— Vetores eficientes de valores numéricos.
                                                             (line  213)
* insert() (método collections.deque):   Objetos deque.      (line   83)
* insert() (método sequence):            Tipos sequências mutáveis.
                                                             (line   99)
* insert() (método tkinter.ttk.Notebook): ttk Notebook.      (line   42)
* insert() (método tkinter.ttk.Treeview): ttk Treeview.      (line  183)
* insert() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line  131)
* insertBefore() (método xml.dom.Node):  Objetos Node.       (line  121)
* insertln() (método curses.window):     Window Objects.     (line  334)
* insnstr() (método curses.window):      Window Objects.     (line  339)
* insort_left() (no módulo bisect):      bisect — Algoritmo de bisseção de vetor.
                                                             (line   73)
* insort_right() (no módulo bisect):     bisect — Algoritmo de bisseção de vetor.
                                                             (line   91)
* insort() (no módulo bisect):           bisect — Algoritmo de bisseção de vetor.
                                                             (line   91)
* inspect (atributo sys.flags):          sys — Parâmetros e funções específicas do sistema.
                                                             (line  556)
* inspect opção de linha de comando; -details: Interface de linha de comando<13>.
                                                             (line   13)
* InspectLoader (classe em importlib.abc): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  208)
* insstr() (método curses.window):       Window Objects.     (line  350)
* install_opener() (no módulo urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  114)
* install_scripts() (método venv.EnvBuilder): API<2>.        (line  183)
* install() (método gettext.NullTranslations): A classe NullTranslations.
                                                             (line   75)
* install() (no módulo gettext):         API baseada em classe.
                                                             (line   72)
* installHandler() (no módulo unittest): Tratamento de sinal.
                                                             (line   29)
* instância de classe;atributo:          Instâncias de classe<2>.
                                                             (line    6)
* instância de classe;atributo;atribuição: Instâncias de classe<2>.
                                                             (line   22)
* instância de classe;chamada:           Chamadas.           (line  159)
* instância;chamada:                     Chamadas.           (line  165)
* instate() (método tkinter.ttk.Widget): ttk Widget.         (line   18)
* instr() (método curses.window):        Window Objects.     (line  360)
* instream (atributo shlex.shlex):       shlex Objects.      (line  146)
* instrução:                             Glossário.          (line 1648)
* instrução;assert:                      A instrução assert. (line    6)
* instrução;assert <1>:                  Exceções concretas. (line   10)
* instrução;async def:                   Corrotinas<2>.      (line    8)
* instrução;async for:                   Definição de função de corrotina.
                                                             (line   30)
* instrução;async with:                  A instrução async for.
                                                             (line   43)
* instrução;atribuição, anotada:         instruções de atribuição anotado.
                                                             (line    6)
* instrução;aumentada, atribuição:       Instruções de atribuição aumentada.
                                                             (line    6)
* instrução;break:                       A instrução break.  (line    6)
* instrução;break <1>:                   A instrução while.  (line   17)
* instrução;break <2>:                   A instrução for.    (line   22)
* instrução;break <3>:                   Cláusula except*.   (line   68)
* instrução;break <4>:                   Cláusula finally.   (line   29)
* instrução;classe:                      Definições de classe.
                                                             (line    6)
* instrução;continue:                    A instrução continue.
                                                             (line    6)
* instrução;continue <1>:                A instrução while.  (line   17)
* instrução;continue <2>:                A instrução for.    (line   22)
* instrução;continue <3>:                Cláusula except*.   (line   67)
* instrução;continue <4>:                Cláusula finally.   (line   29)
* instrução;def:                         Definições de função.
                                                             (line    6)
* instrução;del:                         Personalização básica.
                                                             (line   58)
* instrução;del <1>:                     A instrução del<2>. (line    6)
* instrução;del <2>:                     Tipos sequências mutáveis.
                                                             (line   17)
* instrução;del <3>:                     Tipo mapeamento — dict.
                                                             (line    6)
* instrução;except:                      Exceções embutidas. (line    6)
* instrução;for:                         Instruções for.     (line    6)
* instrução;for <1>:                     A instrução break.  (line    6)
* instrução;for <2>:                     A instrução continue.
                                                             (line    6)
* instrução;for <3>:                     A instrução for.    (line    6)
* instrução;global:                      A instrução del<2>. (line   15)
* instrução;global <1>:                  A instrução global. (line    6)
* instrução;if:                          A instrução if.     (line    6)
* instrução;if <1>:                      Teste do valor verdade.
                                                             (line    6)
* instrução;import:                      Módulos<3>.         (line    6)
* instrução;import <1>:                  A instrução import. (line    6)
* instrução;import <2>:                  Funções embutidas<3>.
                                                             (line 2254)
* instrução;import <3>:                  site — Gancho de configuração específico do site.
                                                             (line   54)
* instrução;match:                       A instrução match.  (line    6)
* instrução;nonlocal:                    A instrução nonlocal.
                                                             (line    6)
* instrução;pass:                        A instrução pass.   (line    6)
* instrução;raise:                       A instrução raise.  (line    6)
* instrução;raise <1>:                   Exceções embutidas. (line   14)
* instrução;return:                      A instrução return. (line    6)
* instrução;return <1>:                  Cláusula except*.   (line   68)
* instrução;return <2>:                  Cláusula finally.   (line   29)
* instrução;tipo:                        A instrução type.   (line    6)
* instrução;try:                         Objetos traceback.  (line   32)
* instrução;try <1>:                     A instrução try.    (line    6)
* instrução;try <2>:                     Exceções embutidas. (line    6)
* instrução;while:                       A instrução break.  (line    6)
* instrução;while <1>:                   A instrução continue.
                                                             (line    6)
* instrução;while <2>:                   A instrução while.  (line    6)
* instrução;while <3>:                   Teste do valor verdade.
                                                             (line    6)
* instrução;with:                        Gerenciadores de contexto da instrução with.
                                                             (line   14)
* instrução;with <1>:                    A instrução with.   (line    6)
* instrução;yield:                       A instrução yield.  (line    6)
* Instruction (classe em dis):           Instruções em bytecode do Python.
                                                             (line   10)
* INSTRUCTION (monitoring event):        Eventos.            (line   30)
* Instruction.arg (no módulo dis):       Instruções em bytecode do Python.
                                                             (line   35)
* Instruction.argrepr (no módulo dis):   Instruções em bytecode do Python.
                                                             (line   49)
* Instruction.argval (no módulo dis):    Instruções em bytecode do Python.
                                                             (line   44)
* Instruction.baseopcode (no módulo dis): Instruções em bytecode do Python.
                                                             (line   24)
* Instruction.baseopname (no módulo dis): Instruções em bytecode do Python.
                                                             (line   29)
* Instruction.cache_info (no módulo dis): Instruções em bytecode do Python.
                                                             (line   95)
* Instruction.cache_offset (no módulo dis): Instruções em bytecode do Python.
                                                             (line   64)
* Instruction.end_offset (no módulo dis): Instruções em bytecode do Python.
                                                             (line   68)
* Instruction.is_jump_target (no módulo dis): Instruções em bytecode do Python.
                                                             (line   81)
* Instruction.jump_target (no módulo dis): Instruções em bytecode do Python.
                                                             (line   85)
* Instruction.line_number (no módulo dis): Instruções em bytecode do Python.
                                                             (line   76)
* Instruction.offset (no módulo dis):    Instruções em bytecode do Python.
                                                             (line   54)
* Instruction.oparg (no módulo dis):     Instruções em bytecode do Python.
                                                             (line   40)
* Instruction.opcode (no módulo dis):    Instruções em bytecode do Python.
                                                             (line   14)
* Instruction.opname (no módulo dis):    Instruções em bytecode do Python.
                                                             (line   20)
* Instruction.positions (no módulo dis): Instruções em bytecode do Python.
                                                             (line   90)
* Instruction.start_offset (no módulo dis): Instruções em bytecode do Python.
                                                             (line   58)
* Instruction.starts_line (no módulo dis): Instruções em bytecode do Python.
                                                             (line   72)
* int (atributo uuid.UUID):              uuid — Objetos UUID conforme RFC 4122.
                                                             (line  135)
* int (classe interna):                  Funções embutidas<3>.
                                                             (line  974)
* int_info (no módulo sys):              sys — Parâmetros e funções específicas do sistema.
                                                             (line 1199)
* int_max_str_digits (atributo sys.flags): sys — Parâmetros e funções específicas do sistema.
                                                             (line  602)
* Int2AP() (no módulo imaplib):          imaplib — IMAP4 protocol client.
                                                             (line  121)
* Integral (classe em numbers):          A torre numérica.   (line   59)
* Integrated Development Environment:    IDLE — editor e console Python<2>.
                                                             (line    8)
* IntegrityError:                        Exceções<7>.        (line   65)
* inteiro:                               Sequências imutáveis.
                                                             (line   16)
* inteiro;literais:                      Tipos numéricos — int float complex.
                                                             (line   20)
* inteiro;representação:                 numbers Integral.   (line    9)
* IntEnum (classe em enum):              Tipos de Dados<2>.  (line  373)
* interact (pdb command):                Comandos de depuração.
                                                             (line  373)
* interact() (método code.InteractiveConsole): Objetos de console Interativo.
                                                             (line   10)
* interact() (no módulo code):           code — Classes bases do interpretador.
                                                             (line   44)
* interactive (atributo sys.flags):      sys — Parâmetros e funções específicas do sistema.
                                                             (line  559)
* Interactive (classe em ast):           Nós raízes.         (line   36)
* InteractiveConsole (classe em code):   code — Classes bases do interpretador.
                                                             (line   31)
* InteractiveInterpreter (classe em code): code — Classes bases do interpretador.
                                                             (line   15)
* interativo:                            Glossário.          (line  875)
* interface de buffer;(veja o protocolo de buffer): Protocolo Iterador.
                                                             (line   79)
* Interface Gráfica do Usuário:          Interfaces gráficas de usuário com Tk.
                                                             (line    6)
* InterfaceError:                        Exceções<7>.        (line   37)
* intern() (no módulo sys):              sys — Parâmetros e funções específicas do sistema.
                                                             (line 1246)
* internal_attr (atributo zipfile.ZipInfo): Objetos ZipInfo. (line  144)
* Internaldate2tuple() (no módulo imaplib): imaplib — IMAP4 protocol client.
                                                             (line  115)
* InternalError:                         Exceções<7>.        (line   71)
* internalSubset (atributo xml.dom.DocumentType): DocumentType Objects.
                                                             (line   27)
* Internet:                              Protocolos de Internet e Suporte.
                                                             (line    6)
* INTERNET_TIMEOUT (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line   67)
* interpolação, string (%):              Formatação de string no estilo printf.
                                                             (line    6)
* interpolação;bytearray (%):            Estilo de Formatação de bytes printf-style.
                                                             (line    6)
* interpolação;bytes (%):                Estilo de Formatação de bytes printf-style.
                                                             (line    6)
* InterpolationDepthError:               Exceções<8>.        (line   45)
* InterpolationError:                    Exceções<8>.        (line   40)
* InterpolationMissingOptionError:       Exceções<8>.        (line   52)
* InterpolationSyntaxError:              Exceções<8>.        (line   57)
* interpretado:                          Glossário.          (line  887)
* interpretador:                         Componentes de Alto Nível.
                                                             (line    6)
* interpretador, prompts:                sys — Parâmetros e funções específicas do sistema.
                                                             (line 1554)
* interpreter lock:                      Estado de thread e a trava global do interpretador.
                                                             (line    6)
* interpreter_requires_environment() (no módulo test.support.script_helper): test support script_helper — Utilities for the Python execution tests.
                                                             (line    9)
* interrupt_main() (no módulo _thread):  _thread— API de segmentação de baixo nível.
                                                             (line   58)
* interrupt() (método sqlite3.Connection): Connection objects.
                                                             (line  339)
* InterruptedError:                      Exceções de sistema operacional.
                                                             (line   74)
* intersection_update() (método set):    Tipo conjuntos — set frozenset.
                                                             (line  189)
* intersection() (método frozenset):     Tipo conjuntos — set frozenset.
                                                             (line  111)
* intersection() (método set):           Tipo conjuntos — set frozenset.
                                                             (line  111)
* IntFlag (classe em enum):              Tipos de Dados<2>.  (line  553)
* intro (atributo cmd.Cmd):              Objetos Cmd.        (line  153)
* InuseAttributeErr:                     Exceções<20>.       (line   39)
* inv_cdf() (método statistics.NormalDist): Objetos NormalDist.
                                                             (line   98)
* inv() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line  107)
* InvalidAccessErr:                      Exceções<20>.       (line   44)
* invalidate_caches() (método de classe importlib.machinery.PathFinder): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  143)
* invalidate_caches() (método importlib.abc.MetaPathFinder): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line   51)
* invalidate_caches() (método importlib.abc.PathEntryFinder): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line   87)
* invalidate_caches() (método importlib.machinery.FileFinder): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  198)
* invalidate_caches() (método zipimport.zipimporter): Objetos zipimporter.
                                                             (line   90)
* invalidate_caches() (no módulo importlib): Funções<12>.    (line   41)
* InvalidBase64CharactersDefect:         email errors Classes de Exceção e Defeito.
                                                             (line  129)
* InvalidBase64LengthDefect:             email errors Classes de Exceção e Defeito.
                                                             (line  135)
* InvalidBase64PaddingDefect:            email errors Classes de Exceção e Defeito.
                                                             (line  123)
* InvalidCharacterErr:                   Exceções<20>.       (line   49)
* InvalidDateDefect:                     email errors Classes de Exceção e Defeito.
                                                             (line  141)
* InvalidFileException:                  plistlib — Gera e analisa arquivos Apple plist.
                                                             (line  173)
* InvalidModificationErr:                Exceções<20>.       (line   57)
* InvalidOperation (classe em decimal):  Sinais.             (line   53)
* InvalidStateErr:                       Exceções<20>.       (line   61)
* InvalidStateError:                     Exception classes.  (line   26)
* InvalidStateError <1>:                 Exceções<13>.       (line   30)
* InvalidTZPathWarning:                  Exceptions and warnings.
                                                             (line   12)
* InvalidURL:                            http client — HTTP protocol client.
                                                             (line  141)
* inversão:                              Operações aritméticas unárias e bit a bit.
                                                             (line   19)
* Invert (classe em ast):                Expressões<2>.      (line   28)
* invert() (no módulo operator):         operator — Operadores padrões como funções.
                                                             (line  107)
* invocação:                             Tipos chamáveis.    (line    6)
* IO (classe em typing):                 ABCs para trabalhar com E/S.
                                                             (line    6)
* IO_REPARSE_TAG_APPEXECLINK (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  485)
* IO_REPARSE_TAG_MOUNT_POINT (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  485)
* IO_REPARSE_TAG_SYMLINK (no módulo stat): stat — Interpretando resultados de stat.
                                                             (line  485)
* IOBase (classe em io):                 I/O Base Classes.   (line    6)
* IOCTL_VM_SOCKETS_GET_LOCAL_CID (no módulo socket): Constantes<8>.
                                                             (line  274)
* ioctl() (método socket.socket):        Socket Objects.     (line  179)
* ioctl() (no módulo fcntl):             fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line  106)
* IOError:                               Exceções concretas. (line  507)
* ior() (no módulo operator):            Operadores in-place.
                                                             (line   82)
* ios_ver() (no módulo platform):        Plataforma iOS.     (line    6)
* ip (atributo ipaddress.IPv4Interface): Objetos de interface.
                                                             (line   19)
* ip (atributo ipaddress.IPv6Interface): Objetos de interface.
                                                             (line   73)
* ip_address() (no módulo ipaddress):    Funções de fábrica de conveniência.
                                                             (line    9)
* ip_interface() (no módulo ipaddress):  Funções de fábrica de conveniência.
                                                             (line   38)
* ip_network() (no módulo ipaddress):    Funções de fábrica de conveniência.
                                                             (line   23)
* ipow() (no módulo operator):           Operadores in-place.
                                                             (line   87)
* ipv4_mapped (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  304)
* IPv4Address (classe em ipaddress):     Objetos de endereço.
                                                             (line   14)
* IPv4Interface (classe em ipaddress):   Objetos de interface.
                                                             (line    9)
* IPv4Network (classe em ipaddress):     Objetos de rede.    (line   14)
* IPV6_ENABLED (no módulo test.support.socket_helper): test support socket_helper — Utilities for socket tests.
                                                             (line   11)
* ipv6_mapped (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line  191)
* IPv6Address (classe em ipaddress):     Objetos de endereço.
                                                             (line  223)
* IPv6Interface (classe em ipaddress):   Objetos de interface.
                                                             (line   63)
* IPv6Network (classe em ipaddress):     Objetos de rede.    (line  258)
* irshift() (no módulo operator):        Operadores in-place.
                                                             (line   92)
* Is (classe em ast):                    Expressões<2>.      (line  109)
* is_() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line   67)
* is_absolute() (método pathlib.PurePath): Métodos e propriedades.
                                                             (line  185)
* is_active() (método asyncio.AbstractChildWatcher): Monitores de processos.
                                                             (line   72)
* is_active() (método graphlib.TopologicalSorter): graphlib — Funcionalidade para operar com estruturas do tipo grafo.
                                                             (line  113)
* is_alive() (método multiprocessing.Process): Process e exceções.
                                                             (line  127)
* is_alive() (método threading.Thread):  Thread objects.     (line  193)
* is_android (no módulo test.support):   test support — Utilitários para o conjunto de teste do Python.
                                                             (line   41)
* is_annotated() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  230)
* is_assigned() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  241)
* is_async (atributo pyclbr.Function):   Objetos Function.   (line   41)
* is_attachment() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  446)
* is_authenticated() (método urllib.request.HTTPPasswordMgrWithPriorAuth): HTTPPasswordMgrWithPriorAuth Objects.
                                                             (line   30)
* is_block_device() (método pathlib.Path): Consultando tipo de arquivo e status.
                                                             (line  143)
* is_blocked() (método http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line   60)
* is_canonical() (método decimal.Context): Objetos de contexto.
                                                             (line  331)
* is_canonical() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  287)
* is_char_device() (método pathlib.Path): Consultando tipo de arquivo e status.
                                                             (line  153)
* IS_CHARACTER_JUNK() (no módulo difflib): difflib — Helpers for computing deltas.
                                                             (line  362)
* is_check_supported() (no módulo lzma): Diversos<3>.        (line    6)
* is_closed() (método asyncio.loop):     Executar e interromper o laço.
                                                             (line   42)
* is_closing() (método asyncio.BaseTransport): Base Transport.
                                                             (line   17)
* is_closing() (método asyncio.StreamWriter): StreamWriter.  (line  112)
* is_dataclass() (no módulo dataclasses): Conteúdo do módulo<8>.
                                                             (line  477)
* is_declared_global() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  221)
* is_dir() (método importlib.abc.Traversable): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  547)
* is_dir() (método importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  110)
* is_dir() (método os.DirEntry):         Arquivos e diretórios.
                                                             (line 1023)
* is_dir() (método pathlib.Path):        Consultando tipo de arquivo e status.
                                                             (line   74)
* is_dir() (método zipfile.Path):        Objetos Path.       (line   59)
* is_dir() (método zipfile.ZipInfo):     Objetos ZipInfo.    (line   45)
* is_enabled() (no módulo faulthandler): Fault handler state.
                                                             (line   31)
* is_expired() (método http.cookiejar.Cookie): Objetos Cookie<2>.
                                                             (line  113)
* is_fifo() (método pathlib.Path):       Consultando tipo de arquivo e status.
                                                             (line  133)
* is_file() (método importlib.abc.Traversable): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  551)
* is_file() (método importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  114)
* is_file() (método os.DirEntry):        Arquivos e diretórios.
                                                             (line 1053)
* is_file() (método pathlib.Path):       Consultando tipo de arquivo e status.
                                                             (line   59)
* is_file() (método zipfile.Path):       Objetos Path.       (line   63)
* is_finalized() (no módulo gc):         gc — Interface para o coletor de lixo.
                                                             (line  188)
* is_finalizing() (no módulo sys):       sys — Parâmetros e funções específicas do sistema.
                                                             (line 1272)
* is_finite() (método decimal.Context):  Objetos de contexto.
                                                             (line  336)
* is_finite() (método decimal.Decimal):  Objetos de Decimal. (line  294)
* is_free() (método symtable.Symbol):    Examining Symbol Tables.
                                                             (line  236)
* is_global (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line  137)
* is_global (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  284)
* is_global() (método symtable.Symbol):  Examining Symbol Tables.
                                                             (line  213)
* is_hop_by_hop() (no módulo wsgiref.util): wsgiref util – Utilidades do ambiente WSGI.
                                                             (line  114)
* is_imported() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  204)
* is_infinite() (método decimal.Context): Objetos de contexto.
                                                             (line  341)
* is_infinite() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  299)
* is_integer() (método float):           Métodos adicionais em ponto flutuante.
                                                             (line   17)
* is_integer() (método fractions.Fraction): fractions — Números racionais.
                                                             (line  133)
* is_integer() (método int):             Métodos adicionais em tipos inteiros.
                                                             (line  172)
* is_junction() (método os.DirEntry):    Arquivos e diretórios.
                                                             (line 1090)
* is_junction() (método pathlib.Path):   Consultando tipo de arquivo e status.
                                                             (line   98)
* is_jython (no módulo test.support):    test support — Utilitários para o conjunto de teste do Python.
                                                             (line   37)
* IS_LINE_JUNK() (no módulo difflib):    difflib — Helpers for computing deltas.
                                                             (line  355)
* is_linetouched() (método curses.window): Window Objects.   (line  370)
* is_link_local (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line  186)
* is_link_local (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   84)
* is_link_local (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  294)
* is_link_local (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  314)
* is_local() (método symtable.Symbol):   Examining Symbol Tables.
                                                             (line  226)
* is_loopback (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line  181)
* is_loopback (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   82)
* is_loopback (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  292)
* is_loopback (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  312)
* is_mount() (método pathlib.Path):      Consultando tipo de arquivo e status.
                                                             (line  106)
* is_multicast (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line   94)
* is_multicast (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   74)
* is_multicast (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  280)
* is_multicast (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  304)
* is_multipart() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  134)
* is_multipart() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  145)
* is_namespace() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  245)
* is_nan() (método decimal.Context):     Objetos de contexto.
                                                             (line  346)
* is_nan() (método decimal.Decimal):     Objetos de Decimal. (line  304)
* is_nested() (método symtable.SymbolTable): Examining Symbol Tables.
                                                             (line   94)
* is_nonlocal() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  217)
* is_normal() (método decimal.Context):  Objetos de contexto.
                                                             (line  351)
* is_normal() (método decimal.Decimal):  Objetos de Decimal. (line  309)
* is_normalized() (no módulo unicodedata): unicodedata — Banco de dados de Unicode.
                                                             (line  169)
* is_not_allowed() (método http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line   74)
* is_not() (no módulo operator):         operator — Operadores padrões como funções.
                                                             (line   71)
* IS_OP (opcode):                        Instruções em bytecode do Python.
                                                             (line  820)
* is_optimized() (método symtable.SymbolTable): Examining Symbol Tables.
                                                             (line   90)
* is_package() (método importlib.abc.InspectLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  243)
* is_package() (método importlib.abc.SourceLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  436)
* is_package() (método importlib.machinery.ExtensionFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  337)
* is_package() (método importlib.machinery.SourceFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  228)
* is_package() (método importlib.machinery.SourcelessFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  273)
* is_package() (método zipimport.zipimporter): Objetos zipimporter.
                                                             (line   74)
* is_parameter() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  209)
* is_private (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line   99)
* is_private (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   76)
* is_private (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  282)
* is_private (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  306)
* is_protocol() (no módulo typing):      Auxiliares de introspecção.
                                                             (line  120)
* is_python_build() (no módulo sysconfig): Outras funções<3>.
                                                             (line   48)
* is_qnan() (método decimal.Context):    Objetos de contexto.
                                                             (line  356)
* is_qnan() (método decimal.Decimal):    Objetos de Decimal. (line  315)
* is_reading() (método asyncio.ReadTransport): Read-only Transports.
                                                             (line    6)
* is_referenced() (método symtable.Symbol): Examining Symbol Tables.
                                                             (line  200)
* is_relative_to() (método pathlib.PurePath): Métodos e propriedades.
                                                             (line  204)
* is_reserved (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line  165)
* is_reserved (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   80)
* is_reserved (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  290)
* is_reserved (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  310)
* is_reserved() (método pathlib.PurePath): Métodos e propriedades.
                                                             (line  229)
* is_resource_enabled() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  254)
* is_resource() (método importlib.abc.ResourceReader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  500)
* is_resource() (método importlib.resources.abc.ResourceReader): importlib resources abc – Classes base abstratas para recursos.
                                                             (line   65)
* is_resource() (no módulo importlib.resources): API funcional.
                                                             (line  143)
* is_running() (método asyncio.loop):    Executar e interromper o laço.
                                                             (line   38)
* is_safe (atributo uuid.UUID):          uuid — Objetos UUID conforme RFC 4122.
                                                             (line  154)
* is_serving() (método asyncio.Server):  Objetos Server.     (line  117)
* is_set() (método asyncio.Event):       Evento.             (line   65)
* is_set() (método threading.Event):     Event objects.      (line   24)
* is_signed() (método decimal.Context):  Objetos de contexto.
                                                             (line  361)
* is_signed() (método decimal.Decimal):  Objetos de Decimal. (line  320)
* is_site_local (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  296)
* is_site_local (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  365)
* is_skipped_module() (método bdb.Bdb):  bdb — Framework do depurador.
                                                             (line  250)
* is_snan() (método decimal.Context):    Objetos de contexto.
                                                             (line  366)
* is_snan() (método decimal.Decimal):    Objetos de Decimal. (line  326)
* is_socket() (método pathlib.Path):     Consultando tipo de arquivo e status.
                                                             (line  123)
* is_stack_trampoline_active() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line 1858)
* is_subnormal() (método decimal.Context): Objetos de contexto.
                                                             (line  371)
* is_subnormal() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  331)
* is_symlink() (método os.DirEntry):     Arquivos e diretórios.
                                                             (line 1069)
* is_symlink() (método pathlib.Path):    Consultando tipo de arquivo e status.
                                                             (line   90)
* is_symlink() (método zipfile.Path):    Objetos Path.       (line   67)
* is_tarfile() (no módulo tarfile):      tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  200)
* is_term_resized() (no módulo curses):  Funções<6>.         (line  253)
* is_tracing() (no módulo tracemalloc):  Funções<11>.        (line   61)
* is_tracked() (no módulo gc):           gc — Interface para o coletor de lixo.
                                                             (line  162)
* is_typeddict() (no módulo typing):     Auxiliares de introspecção.
                                                             (line  135)
* is_unspecified (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line  160)
* is_unspecified (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   78)
* is_unspecified (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  288)
* is_unspecified (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  308)
* is_valid() (método string.Template):   Strings template.   (line   70)
* is_wintouched() (método curses.window): Window Objects.    (line  377)
* is_zero() (método decimal.Context):    Objetos de contexto.
                                                             (line  376)
* is_zero() (método decimal.Decimal):    Objetos de Decimal. (line  336)
* is_zipfile() (no módulo zipfile):      zipfile — Trabalha com arquivos ZIP.
                                                             (line   79)
* isabs() (no módulo os.path):           os path — Manipulações comuns de nomes de caminhos.
                                                             (line  225)
* isabstract() (no módulo inspect):      Tipos e membros.    (line  538)
* IsADirectoryError:                     Exceções de sistema operacional.
                                                             (line   84)
* isalnum() (método bytearray):          Operações com Bytes e Bytearray.
                                                             (line  527)
* isalnum() (método bytes):              Operações com Bytes e Bytearray.
                                                             (line  527)
* isalnum() (método str):                String Methods<2>.  (line  257)
* isalnum() (no módulo curses.ascii):    curses ascii — Utilitários para caracteres ASCII.
                                                             (line  139)
* isalpha() (método bytearray):          Operações com Bytes e Bytearray.
                                                             (line  545)
* isalpha() (método bytes):              Operações com Bytes e Bytearray.
                                                             (line  545)
* isalpha() (método str):                String Methods<2>.  (line  264)
* isalpha() (no módulo curses.ascii):    curses ascii — Utilitários para caracteres ASCII.
                                                             (line  144)
* isascii() (método bytearray):          Operações com Bytes e Bytearray.
                                                             (line  561)
* isascii() (método bytes):              Operações com Bytes e Bytearray.
                                                             (line  561)
* isascii() (método str):                String Methods<2>.  (line  284)
* isascii() (no módulo curses.ascii):    curses ascii — Utilitários para caracteres ASCII.
                                                             (line  149)
* isasyncgen() (no módulo inspect):      Tipos e membros.    (line  498)
* isasyncgenfunction() (no módulo inspect): Tipos e membros. (line  477)
* isatty() (método io.IOBase):           I/O Base Classes.   (line   73)
* isatty() (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  267)
* isawaitable() (no módulo inspect):     Tipos e membros.    (line  456)
* isblank() (no módulo curses.ascii):    curses ascii — Utilitários para caracteres ASCII.
                                                             (line  154)
* isblk() (método tarfile.TarInfo):      Objetos TarInfo.    (line  210)
* isbuiltin() (no módulo inspect):       Tipos e membros.    (line  518)
* ischr() (método tarfile.TarInfo):      Objetos TarInfo.    (line  206)
* isclass() (no módulo inspect):         Tipos e membros.    (line  383)
* isclose() (no módulo cmath):           Funções de classificação.
                                                             (line   23)
* isclose() (no módulo math):            Funções de manipulação de ponto flutuante.
                                                             (line   26)
* iscntrl() (no módulo curses.ascii):    curses ascii — Utilitários para caracteres ASCII.
                                                             (line  159)
* iscode() (no módulo inspect):          Tipos e membros.    (line  514)
* iscoroutine() (no módulo asyncio):     Introspecção.       (line   26)
* iscoroutine() (no módulo inspect):     Tipos e membros.    (line  449)
* iscoroutinefunction() (no módulo inspect): Tipos e membros.
                                                             (line  413)
* isctrl() (no módulo curses.ascii):     curses ascii — Utilitários para caracteres ASCII.
                                                             (line  201)
* isDaemon() (método threading.Thread):  Thread objects.     (line  215)
* isdatadescriptor() (no módulo inspect): Tipos e membros.   (line  565)
* isdecimal() (método str):              String Methods<2>.  (line  297)
* isdev() (método tarfile.TarInfo):      Objetos TarInfo.    (line  218)
* isdevdrive() (no módulo os.path):      os path — Manipulações comuns de nomes de caminhos.
                                                             (line  301)
* isdigit() (método bytearray):          Operações com Bytes e Bytearray.
                                                             (line  570)
* isdigit() (método bytes):              Operações com Bytes e Bytearray.
                                                             (line  570)
* isdigit() (método str):                String Methods<2>.  (line  313)
* isdigit() (no módulo curses.ascii):    curses ascii — Utilitários para caracteres ASCII.
                                                             (line  164)
* isdir() (método tarfile.TarInfo):      Objetos TarInfo.    (line  194)
* isdir() (no módulo os.path):           os path — Manipulações comuns de nomes de caminhos.
                                                             (line  252)
* isdisjoint() (método frozenset):       Tipo conjuntos — set frozenset.
                                                             (line   72)
* isdisjoint() (método set):             Tipo conjuntos — set frozenset.
                                                             (line   72)
* isdown() (no módulo turtle):           Estado do Desenho.  (line   89)
* iselement() (no módulo xml.etree.ElementTree): Funções<9>. (line  129)
* isenabled() (no módulo gc):            gc — Interface para o coletor de lixo.
                                                             (line   30)
* isEnabledFor() (método logging.Logger): Objetos Logger.    (line  151)
* isendwin() (no módulo curses):         Funções<6>.         (line  258)
* ISEOF() (no módulo token):             token — Constantes usadas com árvores de análises do Python.
                                                             (line   40)
* isfifo() (método tarfile.TarInfo):     Objetos TarInfo.    (line  214)
* isfile() (método tarfile.TarInfo):     Objetos TarInfo.    (line  185)
* isfile() (no módulo os.path):          os path — Manipulações comuns de nomes de caminhos.
                                                             (line  243)
* isfinite() (no módulo cmath):          Funções de classificação.
                                                             (line    6)
* isfinite() (no módulo math):           Funções de manipulação de ponto flutuante.
                                                             (line   61)
* isfirstline() (no módulo fileinput):   fileinput — Itera sobre linhas de múltiplos fluxos de entrada.
                                                             (line  114)
* isframe() (no módulo inspect):         Tipos e membros.    (line  510)
* isfunction() (no módulo inspect):      Tipos e membros.    (line  392)
* isfuture() (no módulo asyncio):        Funções Future.     (line    6)
* isgenerator() (no módulo inspect):     Tipos e membros.    (line  409)
* isgeneratorfunction() (no módulo inspect): Tipos e membros.
                                                             (line  397)
* isgetsetdescriptor() (no módulo inspect): Tipos e membros. (line  578)
* isgraph() (no módulo curses.ascii):    curses ascii — Utilitários para caracteres ASCII.
                                                             (line  169)
* isidentifier() (método str):           String Methods<2>.  (line  324)
* isinf() (no módulo cmath):             Funções de classificação.
                                                             (line   13)
* isinf() (no módulo math):              Funções de manipulação de ponto flutuante.
                                                             (line   68)
* isjunction() (no módulo os.path):      os path — Manipulações comuns de nomes de caminhos.
                                                             (line  261)
* iskeyword() (no módulo keyword):       keyword — Testando palavras reservadas do Python.
                                                             (line   14)
* isleap() (no módulo calendar):         calendar — Funções gerais relacionadas ao calendário.
                                                             (line  379)
* islice() (no módulo itertools):        Funções do intertools.
                                                             (line  374)
* islink() (no módulo os.path):          os path — Manipulações comuns de nomes de caminhos.
                                                             (line  269)
* islnk() (método tarfile.TarInfo):      Objetos TarInfo.    (line  202)
* islower() (método bytearray):          Operações com Bytes e Bytearray.
                                                             (line  585)
* islower() (método bytes):              Operações com Bytes e Bytearray.
                                                             (line  585)
* islower() (método str):                String Methods<2>.  (line  343)
* islower() (no módulo curses.ascii):    curses ascii — Utilitários para caracteres ASCII.
                                                             (line  173)
* ismemberdescriptor() (no módulo inspect): Tipos e membros. (line  587)
* ismeta() (no módulo curses.ascii):     curses ascii — Utilitários para caracteres ASCII.
                                                             (line  206)
* ismethod() (no módulo inspect):        Tipos e membros.    (line  388)
* ismethoddescriptor() (no módulo inspect): Tipos e membros. (line  542)
* ismethodwrapper() (no módulo inspect): Tipos e membros.    (line  523)
* ismodule() (no módulo inspect):        Tipos e membros.    (line  379)
* ismount() (no módulo os.path):         os path — Manipulações comuns de nomes de caminhos.
                                                             (line  279)
* isnan() (no módulo cmath):             Funções de classificação.
                                                             (line   18)
* isnan() (no módulo math):              Funções de manipulação de ponto flutuante.
                                                             (line   73)
* ISNONTERMINAL() (no módulo token):     token — Constantes usadas com árvores de análises do Python.
                                                             (line   36)
* IsNot (classe em ast):                 Expressões<2>.      (line  109)
* isnumeric() (método str):              String Methods<2>.  (line  349)
* isocalendar() (método datetime.date):  Objetos date.       (line  244)
* isocalendar() (método datetime.datetime): Objetos datetime.
                                                             (line  669)
* isoformat() (método datetime.date):    Objetos date.       (line  271)
* isoformat() (método datetime.datetime): Objetos datetime.  (line  674)
* isoformat() (método datetime.time):    Objetos time.       (line  170)
* isolated (atributo sys.flags):         sys — Parâmetros e funções específicas do sistema.
                                                             (line  562)
* IsolatedAsyncioTestCase (classe em unittest): Casos de teste.
                                                             (line  876)
* isolation_level (atributo sqlite3.Connection): Connection objects.
                                                             (line  776)
* isoweekday() (método datetime.date):   Objetos date.       (line  237)
* isoweekday() (método datetime.datetime): Objetos datetime. (line  663)
* isprint() (no módulo curses.ascii):    curses ascii — Utilitários para caracteres ASCII.
                                                             (line  177)
* isprintable() (método str):            String Methods<2>.  (line  371)
* ispunct() (no módulo curses.ascii):    curses ascii — Utilitários para caracteres ASCII.
                                                             (line  181)
* isqrt() (no módulo math):              Funções de teoria dos números.
                                                             (line   44)
* isreadable() (método pprint.PrettyPrinter): Objetos PrettyPrinter.
                                                             (line   67)
* isreadable() (no módulo pprint):       Funções<4>.         (line   87)
* isrecursive() (método pprint.PrettyPrinter): Objetos PrettyPrinter.
                                                             (line   75)
* isrecursive() (no módulo pprint):      Funções<4>.         (line   96)
* isreg() (método tarfile.TarInfo):      Objetos TarInfo.    (line  190)
* isreserved() (no módulo os.path):      os path — Manipulações comuns de nomes de caminhos.
                                                             (line  322)
* isReservedKey() (método http.cookies.Morsel): Objetos Morsel.
                                                             (line   65)
* isroutine() (no módulo inspect):       Tipos e membros.    (line  533)
* isSameNode() (método xml.dom.Node):    Objetos Node.       (line  102)
* issoftkeyword() (no módulo keyword):   keyword — Testando palavras reservadas do Python.
                                                             (line   27)
* isspace() (método bytearray):          Operações com Bytes e Bytearray.
                                                             (line  604)
* isspace() (método bytes):              Operações com Bytes e Bytearray.
                                                             (line  604)
* isspace() (método str):                String Methods<2>.  (line  396)
* isspace() (no módulo curses.ascii):    curses ascii — Utilitários para caracteres ASCII.
                                                             (line  186)
* isstdin() (no módulo fileinput):       fileinput — Itera sobre linhas de múltiplos fluxos de entrada.
                                                             (line  119)
* issubset() (método frozenset):         Tipo conjuntos — set frozenset.
                                                             (line   79)
* issubset() (método set):               Tipo conjuntos — set frozenset.
                                                             (line   79)
* issuperset() (método frozenset):       Tipo conjuntos — set frozenset.
                                                             (line   91)
* issuperset() (método set):             Tipo conjuntos — set frozenset.
                                                             (line   91)
* issym() (método tarfile.TarInfo):      Objetos TarInfo.    (line  198)
* ISTERMINAL() (no módulo token):        token — Constantes usadas com árvores de análises do Python.
                                                             (line   32)
* istitle() (método bytearray):          Operações com Bytes e Bytearray.
                                                             (line  614)
* istitle() (método bytes):              Operações com Bytes e Bytearray.
                                                             (line  614)
* istitle() (método str):                String Methods<2>.  (line  406)
* istraceback() (no módulo inspect):     Tipos e membros.    (line  506)
* isub() (no módulo operator):           Operadores in-place.
                                                             (line   97)
* isupper() (método bytearray):          Operações com Bytes e Bytearray.
                                                             (line  628)
* isupper() (método bytes):              Operações com Bytes e Bytearray.
                                                             (line  628)
* isupper() (método str):                String Methods<2>.  (line  425)
* isupper() (no módulo curses.ascii):    curses ascii — Utilitários para caracteres ASCII.
                                                             (line  192)
* isvisible() (no módulo turtle):        Visibilidade.       (line   22)
* isxdigit() (no módulo curses.ascii):   curses ascii — Utilitários para caracteres ASCII.
                                                             (line  196)
* ITALIC (no módulo tkinter.font):       tkinter font — Invólucro de fontes Tkinter.
                                                             (line   15)
* item() (método tkinter.ttk.Treeview):  ttk Treeview.       (line  202)
* item() (método xml.dom.NamedNodeMap):  NamedNodeMap Objects.
                                                             (line   12)
* item() (método xml.dom.NodeList):      Objetos NodeList.   (line   15)
* itemgetter() (no módulo operator):     operator — Operadores padrões como funções.
                                                             (line  276)
* items() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  286)
* items() (método contextvars.Context):  Gerenciamento de contexto manual.
                                                             (line  142)
* items() (método dict):                 Tipo mapeamento — dict.
                                                             (line  192)
* items() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  240)
* items() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  351)
* items() (método mailbox.Mailbox):      Objetos Mailbox.    (line  143)
* items() (método types.MappingProxyType): Tipos padrão do interpretador.
                                                             (line  272)
* items() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line   71)
* itemsize (atributo array.array):       array— Vetores eficientes de valores numéricos.
                                                             (line  118)
* itemsize (atributo memoryview):        Memory Views.       (line  444)
* ItemsView (classe em collections.abc): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  125)
* ItemsView (classe em typing):          Apelidos de contêineres ABC em collections abc.
                                                             (line   55)
* iter_attachments() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  561)
* iter_child_nodes() (no módulo ast):    Auxiliares de ast.  (line  177)
* iter_fields() (no módulo ast):         Auxiliares de ast.  (line  172)
* iter_importers() (no módulo pkgutil):  pkgutil — Utilitário de extensão de pacote.
                                                             (line  111)
* iter_modules() (no módulo pkgutil):    pkgutil — Utilitário de extensão de pacote.
                                                             (line  131)
* iter_parts() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  577)
* iter_unpack() (método struct.Struct):  Classes<3>.         (line   46)
* iter_unpack() (no módulo struct):      Funções e exceções. (line   42)
* iter() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line  137)
* iter() (método xml.etree.ElementTree.ElementTree): ElementTree Objects.
                                                             (line   40)
* Iterable (classe em collections.abc):  Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line   25)
* Iterable (classe em typing):           Apelidos para outros ABCs em collections abc.
                                                             (line    6)
* iterador:                              Glossário.          (line  937)
* iterador assíncrono:                   Glossário.          (line  134)
* iterador gerador:                      Glossário.          (line  721)
* iterador gerador assíncrono:           Glossário.          (line  112)
* Iterator (classe em collections.abc):  Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line   42)
* Iterator (classe em typing):           Apelidos para outros ABCs em collections abc.
                                                             (line   14)
* iterável:                              Glossário.          (line  915)
* iterável assíncrono:                   Glossário.          (line  128)
* iterável;desempacotamento:             Listas de expressões.
                                                             (line   18)
* iterdecode() (no módulo codecs):       codecs — Codec registry and base classes.
                                                             (line  244)
* iterdir() (método importlib.abc.Traversable): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  543)
* iterdir() (método importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  106)
* iterdir() (método pathlib.Path):       Lendo diretórios.   (line    6)
* iterdir() (método zipfile.Path):       Objetos Path.       (line   55)
* iterdump() (método sqlite3.Connection): Connection objects.
                                                             (line  501)
* iterencode() (método json.JSONEncoder): Codificadores e decodificadores.
                                                             (line  235)
* iterencode() (no módulo codecs):       codecs — Codec registry and base classes.
                                                             (line  231)
* iterfind() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line  148)
* iterfind() (método xml.etree.ElementTree.ElementTree): ElementTree Objects.
                                                             (line   47)
* iteritems() (método mailbox.Mailbox):  Objetos Mailbox.    (line  134)
* iterkeys() (método mailbox.Mailbox):   Objetos Mailbox.    (line  108)
* itermonthdates() (método calendar.Calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line   71)
* itermonthdays() (método calendar.Calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line   79)
* itermonthdays2() (método calendar.Calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line   88)
* itermonthdays3() (método calendar.Calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line   96)
* itermonthdays4() (método calendar.Calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  106)
* iternextfunc (C type):                 Slot Type typedefs. (line   90)
* iterparse() (no módulo xml.etree.ElementTree): Funções<9>. (line  135)
* itertext() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line  157)
* itervalues() (método mailbox.Mailbox): Objetos Mailbox.    (line  117)
* iterweekdays() (método calendar.Calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line   65)
* ITIMER_PROF (no módulo signal):        Conteúdo do módulo<5>.
                                                             (line  254)
* ITIMER_REAL (no módulo signal):        Conteúdo do módulo<5>.
                                                             (line  244)
* ITIMER_VIRTUAL (no módulo signal):     Conteúdo do módulo<5>.
                                                             (line  249)
* ItimerError:                           Conteúdo do módulo<5>.
                                                             (line  289)
* itruediv() (no módulo operator):       Operadores in-place.
                                                             (line  102)
* ixor() (no módulo operator):           Operadores in-place.
                                                             (line  107)
* j;em literal númerico:                 Literais de ponto flutuante.
                                                             (line   28)
* JANUARY (no módulo calendar):          calendar — Funções gerais relacionadas ao calendário.
                                                             (line  507)
* java_ver() (no módulo platform):       Plataforma Java.    (line    6)
* Java;linguagem:                        numbers Real float. (line    6)
* join_thread() (método multiprocessing.Queue): Encadeamentos e filas.
                                                             (line  197)
* join_thread() (no módulo test.support.threading_helper): test support threading_helper — Utilities for threading tests.
                                                             (line   11)
* join() (método asyncio.Queue):         Queue.              (line   53)
* join() (método bytearray):             Operações com Bytes e Bytearray.
                                                             (line  170)
* join() (método bytes):                 Operações com Bytes e Bytearray.
                                                             (line  170)
* join() (método multiprocessing.JoinableQueue): Encadeamentos e filas.
                                                             (line  291)
* join() (método multiprocessing.pool.Pool): Process Pools.  (line  187)
* join() (método multiprocessing.Process): Process e exceções.
                                                             (line  100)
* join() (método queue.Queue):           Objetos Queue.      (line   88)
* join() (método str):                   String Methods<2>.  (line  440)
* join() (método threading.Thread):      Thread objects.     (line  127)
* join() (no módulo os.path):            os path — Manipulações comuns de nomes de caminhos.
                                                             (line  343)
* join() (no módulo shlex):              shlex — Simple lexical analysis.
                                                             (line   29)
* JoinableQueue (classe em multiprocessing): Encadeamentos e filas.
                                                             (line  266)
* JoinedStr (classe em ast):             Literais<3>.        (line   43)
* joinpath() (método importlib.abc.Traversable): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  555)
* joinpath() (método importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  118)
* joinpath() (método pathlib.PurePath):  Métodos e propriedades.
                                                             (line  243)
* joinpath() (método zipfile.Path):      Objetos Path.       (line  122)
* js_output() (método http.cookies.BaseCookie): Objetos Cookie.
                                                             (line   32)
* js_output() (método http.cookies.Morsel): Objetos Morsel.  (line   76)
* json.tool opção de linha de comando; -compact: Opções da linha de comando.
                                                             (line   48)
* json.tool opção de linha de comando; -h: Opções da linha de comando.
                                                             (line   54)
* json.tool opção de linha de comando; -help: Opções da linha de comando.
                                                             (line   54)
* json.tool opção de linha de comando; -indent: Opções da linha de comando.
                                                             (line   48)
* json.tool opção de linha de comando; -json-lines: Opções da linha de comando.
                                                             (line   42)
* json.tool opção de linha de comando; -no-ensure-ascii: Opções da linha de comando.
                                                             (line   35)
* json.tool opção de linha de comando; -no-indent: Opções da linha de comando.
                                                             (line   48)
* json.tool opção de linha de comando; -sort-keys: Opções da linha de comando.
                                                             (line   29)
* json.tool opção de linha de comando; -tab: Opções da linha de comando.
                                                             (line   48)
* json.tool opção de linha de comando; infile: Opções da linha de comando.
                                                             (line    6)
* json.tool opção de linha de comando; outfile: Opções da linha de comando.
                                                             (line   24)
* JSONDecodeError:                       Exceções<17>.       (line    6)
* JSONDecoder (classe em json):          Codificadores e decodificadores.
                                                             (line    6)
* JSONEncoder (classe em json):          Codificadores e decodificadores.
                                                             (line  107)
* JULY (no módulo calendar):             calendar — Funções gerais relacionadas ao calendário.
                                                             (line  507)
* JUMP (monitoring event):               Eventos.            (line   34)
* JUMP (opcode):                         Instruções em bytecode do Python.
                                                             (line 1441)
* jump (pdb command):                    Comandos de depuração.
                                                             (line  251)
* JUMP_BACKWARD (opcode):                Instruções em bytecode do Python.
                                                             (line  851)
* JUMP_BACKWARD_NO_INTERRUPT (opcode):   Instruções em bytecode do Python.
                                                             (line  857)
* JUMP_FORWARD (opcode):                 Instruções em bytecode do Python.
                                                             (line  847)
* JUMP_NO_INTERRUPT (opcode):            Instruções em bytecode do Python.
                                                             (line 1443)
* junção de linha:                       Linhas lógicas.     (line    6)
* junção de linha <1>:                   Junção de linha explícita.
                                                             (line    6)
* JUNE (no módulo calendar):             calendar — Funções gerais relacionadas ao calendário.
                                                             (line  507)
* kbhit() (no módulo msvcrt):            E/S de console.     (line    6)
* kde_random() (no módulo statistics):   Detalhes das funções.
                                                             (line  194)
* kde() (no módulo statistics):          Detalhes das funções.
                                                             (line  142)
* KEEP (atributo enum.FlagBoundary):     Tipos de Dados<2>.  (line  727)
* kevent() (no módulo select):           select — Waiting for I/O completion.
                                                             (line  110)
* key (atributo http.cookies.Morsel):    Objetos Morsel.     (line   57)
* key (atributo zoneinfo.ZoneInfo):      A classe ZoneInfo.  (line   80)
* KEY_A1 (no módulo curses):             Constantes<6>.      (line  234)
* KEY_A3 (no módulo curses):             Constantes<6>.      (line  237)
* KEY_ALL_ACCESS (no módulo winreg):     Direitos de acesso. (line    9)
* KEY_B2 (no módulo curses):             Constantes<6>.      (line  240)
* KEY_BACKSPACE (no módulo curses):      Constantes<6>.      (line  164)
* KEY_BEG (no módulo curses):            Constantes<6>.      (line  252)
* KEY_BREAK (no módulo curses):          Constantes<6>.      (line  146)
* KEY_BTAB (no módulo curses):           Constantes<6>.      (line  249)
* KEY_C1 (no módulo curses):             Constantes<6>.      (line  243)
* KEY_C3 (no módulo curses):             Constantes<6>.      (line  246)
* KEY_CANCEL (no módulo curses):         Constantes<6>.      (line  255)
* KEY_CATAB (no módulo curses):          Constantes<6>.      (line  216)
* KEY_CLEAR (no módulo curses):          Constantes<6>.      (line  189)
* KEY_CLOSE (no módulo curses):          Constantes<6>.      (line  258)
* KEY_COMMAND (no módulo curses):        Constantes<6>.      (line  261)
* KEY_COPY (no módulo curses):           Constantes<6>.      (line  264)
* KEY_CREATE (no módulo curses):         Constantes<6>.      (line  267)
* KEY_CREATE_LINK (no módulo winreg):    Direitos de acesso. (line   51)
* KEY_CREATE_SUB_KEY (no módulo winreg): Direitos de acesso. (line   38)
* KEY_CTAB (no módulo curses):           Constantes<6>.      (line  213)
* KEY_DC (no módulo curses):             Constantes<6>.      (line  180)
* KEY_DL (no módulo curses):             Constantes<6>.      (line  174)
* KEY_DOWN (no módulo curses):           Constantes<6>.      (line  149)
* KEY_EIC (no módulo curses):            Constantes<6>.      (line  186)
* KEY_END (no módulo curses):            Constantes<6>.      (line  270)
* KEY_ENTER (no módulo curses):          Constantes<6>.      (line  219)
* KEY_ENUMERATE_SUB_KEYS (no módulo winreg): Direitos de acesso.
                                                             (line   42)
* KEY_EOL (no módulo curses):            Constantes<6>.      (line  195)
* KEY_EOS (no módulo curses):            Constantes<6>.      (line  192)
* KEY_EXECUTE (no módulo winreg):        Direitos de acesso. (line   26)
* KEY_EXIT (no módulo curses):           Constantes<6>.      (line  273)
* KEY_F0 (no módulo curses):             Constantes<6>.      (line  167)
* KEY_FIND (no módulo curses):           Constantes<6>.      (line  276)
* KEY_Fn (no módulo curses):             Constantes<6>.      (line  171)
* KEY_HELP (no módulo curses):           Constantes<6>.      (line  279)
* KEY_HOME (no módulo curses):           Constantes<6>.      (line  161)
* KEY_IC (no módulo curses):             Constantes<6>.      (line  183)
* KEY_IL (no módulo curses):             Constantes<6>.      (line  177)
* KEY_LEFT (no módulo curses):           Constantes<6>.      (line  155)
* KEY_LL (no módulo curses):             Constantes<6>.      (line  231)
* KEY_MARK (no módulo curses):           Constantes<6>.      (line  282)
* KEY_MAX (no módulo curses):            Constantes<6>.      (line  423)
* KEY_MESSAGE (no módulo curses):        Constantes<6>.      (line  285)
* KEY_MIN (no módulo curses):            Constantes<6>.      (line  143)
* KEY_MOUSE (no módulo curses):          Constantes<6>.      (line  417)
* KEY_MOVE (no módulo curses):           Constantes<6>.      (line  288)
* KEY_NEXT (no módulo curses):           Constantes<6>.      (line  291)
* KEY_NOTIFY (no módulo winreg):         Direitos de acesso. (line   46)
* KEY_NPAGE (no módulo curses):          Constantes<6>.      (line  204)
* KEY_OPEN (no módulo curses):           Constantes<6>.      (line  294)
* KEY_OPTIONS (no módulo curses):        Constantes<6>.      (line  297)
* KEY_PPAGE (no módulo curses):          Constantes<6>.      (line  207)
* KEY_PREVIOUS (no módulo curses):       Constantes<6>.      (line  300)
* KEY_PRINT (no módulo curses):          Constantes<6>.      (line  228)
* KEY_QUERY_VALUE (no módulo winreg):    Direitos de acesso. (line   30)
* KEY_READ (no módulo winreg):           Direitos de acesso. (line   21)
* KEY_REDO (no módulo curses):           Constantes<6>.      (line  303)
* KEY_REFERENCE (no módulo curses):      Constantes<6>.      (line  306)
* KEY_REFRESH (no módulo curses):        Constantes<6>.      (line  309)
* KEY_REPLACE (no módulo curses):        Constantes<6>.      (line  312)
* KEY_RESET (no módulo curses):          Constantes<6>.      (line  225)
* KEY_RESIZE (no módulo curses):         Constantes<6>.      (line  420)
* KEY_RESTART (no módulo curses):        Constantes<6>.      (line  315)
* KEY_RESUME (no módulo curses):         Constantes<6>.      (line  318)
* KEY_RIGHT (no módulo curses):          Constantes<6>.      (line  158)
* KEY_SAVE (no módulo curses):           Constantes<6>.      (line  321)
* KEY_SBEG (no módulo curses):           Constantes<6>.      (line  324)
* KEY_SCANCEL (no módulo curses):        Constantes<6>.      (line  327)
* KEY_SCOMMAND (no módulo curses):       Constantes<6>.      (line  330)
* KEY_SCOPY (no módulo curses):          Constantes<6>.      (line  333)
* KEY_SCREATE (no módulo curses):        Constantes<6>.      (line  336)
* KEY_SDC (no módulo curses):            Constantes<6>.      (line  339)
* KEY_SDL (no módulo curses):            Constantes<6>.      (line  342)
* KEY_SELECT (no módulo curses):         Constantes<6>.      (line  345)
* KEY_SEND (no módulo curses):           Constantes<6>.      (line  348)
* KEY_SEOL (no módulo curses):           Constantes<6>.      (line  351)
* KEY_SET_VALUE (no módulo winreg):      Direitos de acesso. (line   34)
* KEY_SEXIT (no módulo curses):          Constantes<6>.      (line  354)
* KEY_SF (no módulo curses):             Constantes<6>.      (line  198)
* KEY_SFIND (no módulo curses):          Constantes<6>.      (line  357)
* KEY_SHELP (no módulo curses):          Constantes<6>.      (line  360)
* KEY_SHOME (no módulo curses):          Constantes<6>.      (line  363)
* KEY_SIC (no módulo curses):            Constantes<6>.      (line  366)
* KEY_SLEFT (no módulo curses):          Constantes<6>.      (line  369)
* KEY_SMESSAGE (no módulo curses):       Constantes<6>.      (line  372)
* KEY_SMOVE (no módulo curses):          Constantes<6>.      (line  375)
* KEY_SNEXT (no módulo curses):          Constantes<6>.      (line  378)
* KEY_SOPTIONS (no módulo curses):       Constantes<6>.      (line  381)
* KEY_SPREVIOUS (no módulo curses):      Constantes<6>.      (line  384)
* KEY_SPRINT (no módulo curses):         Constantes<6>.      (line  387)
* KEY_SR (no módulo curses):             Constantes<6>.      (line  201)
* KEY_SREDO (no módulo curses):          Constantes<6>.      (line  390)
* KEY_SREPLACE (no módulo curses):       Constantes<6>.      (line  393)
* KEY_SRESET (no módulo curses):         Constantes<6>.      (line  222)
* KEY_SRIGHT (no módulo curses):         Constantes<6>.      (line  396)
* KEY_SRSUME (no módulo curses):         Constantes<6>.      (line  399)
* KEY_SSAVE (no módulo curses):          Constantes<6>.      (line  402)
* KEY_SSUSPEND (no módulo curses):       Constantes<6>.      (line  405)
* KEY_STAB (no módulo curses):           Constantes<6>.      (line  210)
* KEY_SUNDO (no módulo curses):          Constantes<6>.      (line  408)
* KEY_SUSPEND (no módulo curses):        Constantes<6>.      (line  411)
* KEY_UNDO (no módulo curses):           Constantes<6>.      (line  414)
* KEY_UP (no módulo curses):             Constantes<6>.      (line  152)
* KEY_WOW64_32KEY (no módulo winreg):    Específico de 64 bits.
                                                             (line   15)
* KEY_WOW64_64KEY (no módulo winreg):    Específico de 64 bits.
                                                             (line    9)
* KEY_WRITE (no módulo winreg):          Direitos de acesso. (line   16)
* KeyboardInterrupt:                     Exceções concretas. (line   92)
* KeyboardInterrupt (built-in exception): Tratamento de sinal<2>.
                                                             (line    7)
* KeyboardInterrupt (built-in exception) <1>: Tratamento de sinal<2>.
                                                             (line   34)
* KeyboardInterrupt (built-in exception) <2>: Tratamento de sinal<2>.
                                                             (line   43)
* KeyError:                              Exceções concretas. (line   87)
* keylog_filename (atributo ssl.SSLContext): SSL Contexts.   (line  528)
* keyname() (no módulo curses):          Funções<6>.         (line  263)
* keypad() (método curses.window):       Window Objects.     (line  382)
* keyrefs() (método weakref.WeakKeyDictionary): weakref — Referências fracas.
                                                             (line  219)
* keys() (método contextvars.Context):   Gerenciamento de contexto manual.
                                                             (line  133)
* keys() (método dict):                  Tipo mapeamento — dict.
                                                             (line  198)
* keys() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  232)
* keys() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  343)
* keys() (método mailbox.Mailbox):       Objetos Mailbox.    (line  112)
* keys() (método sqlite3.Row):           Row objects.        (line   19)
* keys() (método types.MappingProxyType): Tipos padrão do interpretador.
                                                             (line  277)
* keys() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line   76)
* KeysView (classe em collections.abc):  Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  125)
* KeysView (classe em typing):           Apelidos de contêineres ABC em collections abc.
                                                             (line   64)
* keyword (classe em ast):               Expressões<2>.      (line  151)
* keywords (atributo functools.partial): Objetos partial.    (line   20)
* kill_python() (no módulo test.support.script_helper): test support script_helper — Utilities for the Python execution tests.
                                                             (line   77)
* kill() (método asyncio.subprocess.Process): Interagindo com subprocessos.
                                                             (line  108)
* kill() (método asyncio.SubprocessTransport): Transportes de Subprocesso.
                                                             (line   35)
* kill() (método multiprocessing.Process): Process e exceções.
                                                             (line  227)
* kill() (método subprocess.Popen):      Objetos Popen.      (line  100)
* kill() (no módulo os):                 Gerenciamento de processo.
                                                             (line  344)
* killchar() (no módulo curses):         Funções<6>.         (line  273)
* killpg() (no módulo os):               Gerenciamento de processo.
                                                             (line  367)
* kind (atributo inspect.Parameter):     Introspecting callables with the Signature object.
                                                             (line  229)
* knownfiles (no módulo mimetypes):      mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line  144)
* kqueue() (no módulo select):           select — Waiting for I/O completion.
                                                             (line   99)
* KqueueSelector (classe em selectors):  Classes<4>.         (line  195)
* KW_ONLY (no módulo dataclasses):       Conteúdo do módulo<8>.
                                                             (line  493)
* kwargs (atributo inspect.BoundArguments): Introspecting callables with the Signature object.
                                                             (line  359)
* kwargs (atributo typing.ParamSpec):    Criando tipos genéricos e apelidos de tipo.
                                                             (line  424)
* kwlist (no módulo keyword):            keyword — Testando palavras reservadas do Python.
                                                             (line   19)
* L (no módulo re):                      Sinalizadores.      (line   61)
* laço;instrução:                        A instrução break.  (line    6)
* laço;instrução <1>:                    A instrução continue.
                                                             (line    6)
* laço;instrução <2>:                    A instrução while.  (line    6)
* laço;instrução <3>:                    A instrução for.    (line    6)
* laço;sobre sequência mutável:          Operações comuns de sequências.
                                                             (line   66)
* lambda:                                Glossário.          (line  994)
* Lambda (classe em ast):                Definições de função e classe.
                                                             (line   32)
* lambda;expressão:                      Lambdas.            (line    6)
* lambda;expressão <1>:                  Definições de função.
                                                             (line  134)
* lambda;função:                         Lambdas.            (line    6)
* LambdaType (no módulo types):          Tipos padrão do interpretador.
                                                             (line   25)
* LANG:                                  API do GNU gettext. (line   21)
* LANG <1>:                              API baseada em classe.
                                                             (line   26)
* LANG <2>:                              locale — Serviços de internacionalização.
                                                             (line   65)
* LANG <3>:                              locale — Serviços de internacionalização.
                                                             (line  365)
* LANG <4>:                              locale — Serviços de internacionalização.
                                                             (line  370)
* LANGUAGE:                              API do GNU gettext. (line   20)
* LANGUAGE <1>:                          API baseada em classe.
                                                             (line   25)
* LARGEST (no módulo test.support):      test support — Utilitários para o conjunto de teste do Python.
                                                             (line  194)
* LargeZipFile:                          zipfile — Trabalha com arquivos ZIP.
                                                             (line   38)
* last_accepted (atributo multiprocessing.connection.Listener): Listeners and Clients.
                                                             (line  104)
* last_exc (no módulo sys):              sys — Parâmetros e funções específicas do sistema.
                                                             (line 1282)
* last_traceback (no módulo sys):        Objetos traceback.  (line    6)
* last_traceback (no módulo sys) <1>:    sys — Parâmetros e funções específicas do sistema.
                                                             (line 1304)
* last_type (no módulo sys):             sys — Parâmetros e funções específicas do sistema.
                                                             (line 1304)
* last_value (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line 1304)
* lastChild (atributo xml.dom.Node):     Objetos Node.       (line   59)
* lastcmd (atributo cmd.Cmd):            Objetos Cmd.        (line  142)
* lastgroup (atributo re.Match):         Objetos correspondência.
                                                             (line  205)
* lastindex (atributo re.Match):         Objetos correspondência.
                                                             (line  197)
* lastResort (no módulo logging):        Module-Level Attributes.
                                                             (line    6)
* lastrowid (atributo sqlite3.Cursor):   Cursor objects.     (line  205)
* layout() (método tkinter.ttk.Style):   Ttk Styling.        (line   96)
* lazycache() (no módulo linecache):     linecache — Acesso aleatório a linhas de texto.
                                                             (line   51)
* LazyLoader (classe em importlib.util): importlib util – Utility code for importers.
                                                             (line  196)
* LBRACE (no módulo token):              token — Constantes usadas com árvores de análises do Python.
                                                             (line  234)
* LBYL:                                  Glossário.          (line 1001)
* LC_ALL:                                API do GNU gettext. (line   20)
* LC_ALL <1>:                            API baseada em classe.
                                                             (line   25)
* LC_ALL (no módulo locale):             locale — Serviços de internacionalização.
                                                             (line  589)
* LC_COLLATE (no módulo locale):         locale — Serviços de internacionalização.
                                                             (line  552)
* LC_CTYPE (no módulo locale):           locale — Serviços de internacionalização.
                                                             (line  536)
* LC_MESSAGES:                           API do GNU gettext. (line   20)
* LC_MESSAGES <1>:                       API baseada em classe.
                                                             (line   26)
* LC_MESSAGES (no módulo locale):        locale — Serviços de internacionalização.
                                                             (line  569)
* LC_MONETARY (no módulo locale):        locale — Serviços de internacionalização.
                                                             (line  563)
* LC_NUMERIC (no módulo locale):         locale — Serviços de internacionalização.
                                                             (line  581)
* LC_TIME (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  558)
* lchflags() (no módulo os):             Arquivos e diretórios.
                                                             (line  318)
* lchmod() (método pathlib.Path):        Permissões e propriedade.
                                                             (line   60)
* lchmod() (no módulo os):               Arquivos e diretórios.
                                                             (line  333)
* lchown() (no módulo os):               Arquivos e diretórios.
                                                             (line  355)
* lcm() (no módulo math):                Funções de teoria dos números.
                                                             (line   57)
* ldexp() (no módulo math):              Funções de manipulação de ponto flutuante.
                                                             (line   78)
* LDFLAGS:                               New Improved and Deprecated Modules<4>.
                                                             (line   59)
* LDFLAGS <1>:                           Sinalizadores do pré-processador.
                                                             (line   19)
* LDFLAGS <2>:                           Sinalizadores do vinculador.
                                                             (line   15)
* LDFLAGS <3>:                           Sinalizadores do vinculador.
                                                             (line   18)
* LDFLAGS <4>:                           Sinalizadores do vinculador.
                                                             (line   28)
* LDFLAGS <5>:                           Sinalizadores do vinculador.
                                                             (line   31)
* LDFLAGS <6>:                           Sinalizadores do vinculador.
                                                             (line   36)
* LDFLAGS <7>:                           Sinalizadores do vinculador.
                                                             (line   51)
* LDFLAGS_NODIST:                        Sinalizadores do vinculador.
                                                             (line   26)
* LDFLAGS_NODIST <1>:                    Sinalizadores do vinculador.
                                                             (line   41)
* le() (no módulo operator):             operator — Operadores padrões como funções.
                                                             (line   26)
* leapdays() (no módulo calendar):       calendar — Funções gerais relacionadas ao calendário.
                                                             (line  384)
* leaveok() (método curses.window):      Window Objects.     (line  389)
* left (atributo filecmp.dircmp):        A classe dircmp.    (line   47)
* left_list (atributo filecmp.dircmp):   A classe dircmp.    (line   55)
* left_only (atributo filecmp.dircmp):   A classe dircmp.    (line   69)
* left() (no módulo turtle):             Movimentos de Turtle.
                                                             (line   58)
* LEFTSHIFT (no módulo token):           token — Constantes usadas com árvores de análises do Python.
                                                             (line  258)
* LEFTSHIFTEQUAL (no módulo token):      token — Constantes usadas com árvores de análises do Python.
                                                             (line  291)
* LEGACY_TRANSACTION_CONTROL (no módulo sqlite3): Constantes do módulo.
                                                             (line    6)
* lenfunc (C type):                      Slot Type typedefs. (line   94)
* length (atributo xml.dom.NamedNodeMap): NamedNodeMap Objects.
                                                             (line    8)
* length (atributo xml.dom.NodeList):    Objetos NodeList.   (line   21)
* length_hint() (no módulo operator):    operator — Operadores padrões como funções.
                                                             (line  215)
* LESS (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line  219)
* LESSEQUAL (no módulo token):           token — Constantes usadas com árvores de análises do Python.
                                                             (line  246)
* levantamento;exceção:                  A instrução raise.  (line    6)
* levantar uma exceção:                  Exceções<2>.        (line    6)
* level (atributo logging.Logger):       Objetos Logger.     (line   34)
* leves, processos:                      _thread— API de segmentação de baixo nível.
                                                             (line    6)
* LexicalHandler (classe em xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line   45)
* léxicas, definições:                   Notação.            (line   33)
* lexists() (no módulo os.path):         os path — Manipulações comuns de nomes de caminhos.
                                                             (line  139)
* LF (no módulo curses.ascii):           curses ascii — Utilitários para caracteres ASCII.
                                                             (line   54)
* lgamma() (no módulo math):             Funções especiais.  (line   35)
* libc_ver() (no módulo platform):       Plataformas Unix.   (line    6)
* LIBRARIES_ASSEMBLY_NAME_PREFIX (no módulo msvcrt): Outras funções<4>.
                                                             (line   99)
* library (atributo ssl.SSLError):       Exceções<16>.       (line   19)
* library (no módulo dbm.ndbm):          dbm ndbm — New Database Manager.
                                                             (line   35)
* LibraryLoader (classe em ctypes):      Loading shared libraries.
                                                             (line  174)
* license (variável interna):            Constantes adicionadas pelo módulo site.
                                                             (line   33)
* LifoQueue (classe em asyncio):         Filas LIFO último a entrar primeiro a sair.
                                                             (line    6)
* LifoQueue (classe em queue):           queue — A synchronized queue class.
                                                             (line   42)
* ligação (widgets):                     Ligações e Eventos. (line    6)
* limit_denominator() (método fractions.Fraction): fractions — Números racionais.
                                                             (line  159)
* LimitOverrunError:                     Exceções<13>.       (line   61)
* line (atributo bdb.Breakpoint):        bdb — Framework do depurador.
                                                             (line   89)
* line (atributo traceback.FrameSummary): FrameSummary Objects.
                                                             (line   43)
* LINE (monitoring event):               Eventos.            (line   38)
* line_buffering (atributo io.TextIOWrapper): E/S de texto<2>.
                                                             (line  171)
* line_num (atributo csv.csvreader):     Objetos Reader.     (line   25)
* linear_regression() (no módulo statistics): Detalhes das funções.
                                                             (line  656)
* lineno (atributo ast.AST):             Classes de nós.     (line   51)
* lineno (atributo doctest.DocTest):     DocTest Objects.    (line   42)
* lineno (atributo doctest.Example):     Example Objects.    (line   41)
* lineno (atributo inspect.FrameInfo):   A pilha to interpretador.
                                                             (line   22)
* lineno (atributo inspect.Traceback):   A pilha to interpretador.
                                                             (line   62)
* lineno (atributo json.JSONDecodeError): Exceções<17>.      (line   23)
* lineno (atributo netrc.NetrcParseError): netrc — Arquivo de processamento netrc.
                                                             (line   64)
* lineno (atributo pyclbr.Class):        Objetos classe<2>.  (line   24)
* lineno (atributo pyclbr.Function):     Objetos Function.   (line   23)
* lineno (atributo re.PatternError):     Exceções<3>.        (line   29)
* lineno (atributo shlex.shlex):         shlex Objects.      (line  169)
* lineno (atributo SyntaxError):         Exceções concretas. (line  328)
* lineno (atributo traceback.FrameSummary): FrameSummary Objects.
                                                             (line   34)
* lineno (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line   95)
* lineno (atributo tracemalloc.Filter):  Filter.             (line   49)
* lineno (atributo tracemalloc.Frame):   Frame.              (line   17)
* lineno (atributo xml.parsers.expat.ExpatError): Exceções ExpatError.
                                                             (line   27)
* lineno() (no módulo fileinput):        fileinput — Itera sobre linhas de múltiplos fluxos de entrada.
                                                             (line  102)
* LINES:                                 Funções<6>.         (line  125)
* LINES <1>:                             Funções<6>.         (line  595)
* LINES <2>:                             Funções<6>.         (line  597)
* lines (atributo os.terminal_size):     Consultando o tamanho de um terminal.
                                                             (line   34)
* LINES (no módulo curses):              Constantes<6>.      (line   51)
* linesep (atributo email.policy.Policy): email policy Policy Objects.
                                                             (line  153)
* linesep (no módulo os):                Diversas informações de sistema.
                                                             (line  155)
* lineterminator (atributo csv.Dialect): Dialetos e parâmetros de formatação.
                                                             (line   56)
* LineTooLong:                           http client — HTTP protocol client.
                                                             (line  183)
* linha de comando:                      Programas Python completos.
                                                             (line   25)
* linha em branco:                       Linhas em branco.   (line    6)
* linha física:                          Linhas lógicas.     (line    6)
* linha física <1>:                      Junção de linha explícita.
                                                             (line    6)
* linha física <2>:                      Literais de string e bytes.
                                                             (line   75)
* linha lógica:                          Linhas lógicas.     (line    6)
* link() (no módulo os):                 Arquivos e diretórios.
                                                             (line  370)
* LinkFallbackError:                     tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  276)
* linkname (atributo tarfile.TarInfo):   Objetos TarInfo.    (line   95)
* LinkOutsideDestinationError:           tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  271)
* List (classe em ast):                  Literais<3>.        (line   67)
* List (classe em typing):               Apelidos de tipos embutidos.
                                                             (line   18)
* list (classe interna):                 Listas<2>.          (line   10)
* list (pdb command):                    Comandos de depuração.
                                                             (line  262)
* LIST_APPEND (opcode):                  Instruções em bytecode do Python.
                                                             (line  388)
* list_dialects() (no módulo csv):       Conteúdo do módulo<3>.
                                                             (line   96)
* LIST_EXTEND (opcode):                  Instruções em bytecode do Python.
                                                             (line  723)
* list_folders() (método mailbox.Maildir): Maildir objects.  (line   65)
* list_folders() (método mailbox.MH):    MH objects.         (line   35)
* list() (método imaplib.IMAP4):         Objetos IMAP4.      (line  126)
* list() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  233)
* list() (método poplib.POP3):           Objetos POP3.       (line   57)
* list() (método tarfile.TarFile):       Objetos TarFile.    (line  126)
* lista:                                 Glossário.          (line 1022)
* lista de propriedades:                 plistlib — Gera e analisa arquivos Apple plist.
                                                             (line    8)
* lista;compreensões:                    Sintaxes de criação de lista.
                                                             (line    6)
* lista;sintaxe de criação:              Sintaxes de criação de lista.
                                                             (line    6)
* ListComp (classe em ast):              Compreensões.       (line    6)
* listdir() (no módulo os):              Arquivos e diretórios.
                                                             (line  392)
* listdrives() (no módulo os):           Arquivos e diretórios.
                                                             (line  432)
* listen() (método socket.socket):       Socket Objects.     (line  197)
* listen() (no módulo logging.config):   Funções de configuração.
                                                             (line  126)
* listen() (no módulo turtle):           Usando os eventos de tela.
                                                             (line    6)
* listener (atributo logging.handlers.QueueHandler): QueueHandler.
                                                             (line   92)
* Listener (classe em multiprocessing.connection): Listeners and Clients.
                                                             (line   50)
* listMethods() (método xmlrpc.client.ServerProxy.system): Objetos ServerProxy.
                                                             (line   17)
* listmounts() (no módulo os):           Arquivos e diretórios.
                                                             (line  453)
* listvolumes() (no módulo os):          Arquivos e diretórios.
                                                             (line  477)
* listxattr() (no módulo os):            Atributos estendidos do Linux.
                                                             (line   26)
* literais de string formatadas:         String Methods<2>.  (line  917)
* literal:                               Literais.           (line    6)
* literal <1>:                           Literais<2>.        (line    6)
* Literal (no módulo typing):            Formas especiais.   (line  134)
* literal de binário:                    Literais numéricos. (line    6)
* literal de bytes:                      Literais.           (line    8)
* literal de decimal:                    Literais numéricos. (line    6)
* literal de hexadecimal:                Literais numéricos. (line    6)
* literal de inteiro:                    Literais numéricos. (line    6)
* literal de número complexo:            Literais numéricos. (line    6)
* literal de número imaginário:          Literais numéricos. (line    6)
* literal de octal:                      Literais numéricos. (line    6)
* literal de ponto flutuante:            Literais numéricos. (line    6)
* literal de string:                     Literais.           (line    8)
* literal de string formatada com !:     String Methods<2>.  (line  917)
* literal de string formatado:           Refinando a formatação de saída.
                                                             (line   94)
* literal de string formatado <1>:       Concatenação de literal de string.
                                                             (line   27)
* literal de string interpolada:         Refinando a formatação de saída.
                                                             (line   94)
* literal de string interpolada <1>:     Concatenação de literal de string.
                                                             (line   27)
* literal de string interpolada <2>:     String Methods<2>.  (line  917)
* literal numérico:                      Literais numéricos. (line    6)
* literal_eval() (no módulo ast):        Auxiliares de ast.  (line   84)
* LiteralString (no módulo typing):      Tipos especiais.    (line   68)
* LittleEndianStructure (classe em ctypes): Tipos de dados estruturados.
                                                             (line   26)
* LittleEndianUnion (classe em ctypes):  Tipos de dados estruturados.
                                                             (line   16)
* livre;variável:                        Ligação de nomes.   (line   49)
* ljust() (método bytearray):            Operações com Bytes e Bytearray.
                                                             (line  312)
* ljust() (método bytes):                Operações com Bytes e Bytearray.
                                                             (line  312)
* ljust() (método str):                  String Methods<2>.  (line  455)
* LK_LOCK (no módulo msvcrt):            Operações com arquivos.
                                                             (line   20)
* LK_NBLCK (no módulo msvcrt):           Operações com arquivos.
                                                             (line   28)
* LK_NBRLCK (no módulo msvcrt):          Operações com arquivos.
                                                             (line   28)
* LK_RLCK (no módulo msvcrt):            Operações com arquivos.
                                                             (line   20)
* LK_UNLCK (no módulo msvcrt):           Operações com arquivos.
                                                             (line   34)
* ll (pdb command):                      Comandos de depuração.
                                                             (line  278)
* LMTP (classe em smtplib):              smtplib — Cliente de protocolo SMTP.
                                                             (line  107)
* ln() (método decimal.Context):         Objetos de contexto.
                                                             (line  381)
* ln() (método decimal.Decimal):         Objetos de Decimal. (line  341)
* LNKTYPE (no módulo tarfile):           tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  299)
* Load (classe em ast):                  Variáveis.          (line   11)
* LOAD_ASSERTION_ERROR (opcode):         Instruções em bytecode do Python.
                                                             (line  511)
* LOAD_ATTR (opcode):                    Instruções em bytecode do Python.
                                                             (line  763)
* LOAD_BUILD_CLASS (opcode):             Instruções em bytecode do Python.
                                                             (line  518)
* load_cert_chain() (método ssl.SSLContext): SSL Contexts.   (line  101)
* LOAD_CLOSURE (opcode):                 Instruções em bytecode do Python.
                                                             (line 1448)
* LOAD_CONST (opcode):                   Instruções em bytecode do Python.
                                                             (line  647)
* load_default_certs() (método ssl.SSLContext): SSL Contexts.
                                                             (line  132)
* LOAD_DEREF (opcode):                   Instruções em bytecode do Python.
                                                             (line  991)
* load_dh_params() (método ssl.SSLContext): SSL Contexts.    (line  353)
* load_extension() (método sqlite3.Connection): Connection objects.
                                                             (line  473)
* LOAD_FAST (opcode):                    Instruções em bytecode do Python.
                                                             (line  929)
* LOAD_FAST_AND_CLEAR (opcode):          Instruções em bytecode do Python.
                                                             (line  953)
* LOAD_FAST_CHECK (opcode):              Instruções em bytecode do Python.
                                                             (line  945)
* LOAD_FAST_LOAD_FAST (opcode):          Instruções em bytecode do Python.
                                                             (line  938)
* LOAD_FROM_DICT_OR_DEREF (opcode):      Instruções em bytecode do Python.
                                                             (line  999)
* LOAD_FROM_DICT_OR_GLOBALS (opcode):    Instruções em bytecode do Python.
                                                             (line  665)
* LOAD_GLOBAL (opcode):                  Instruções em bytecode do Python.
                                                             (line  922)
* LOAD_LOCALS (opcode):                  Instruções em bytecode do Python.
                                                             (line  656)
* LOAD_METHOD (opcode):                  Instruções em bytecode do Python.
                                                             (line 1458)
* load_module() (método importlib.abc.FileLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  325)
* load_module() (método importlib.abc.InspectLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  276)
* load_module() (método importlib.abc.Loader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  132)
* load_module() (método importlib.abc.SourceLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  424)
* load_module() (método importlib.machinery.SourceFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  243)
* load_module() (método importlib.machinery.SourcelessFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  287)
* load_module() (método zipimport.zipimporter): Objetos zipimporter.
                                                             (line   80)
* LOAD_NAME (opcode):                    Instruções em bytecode do Python.
                                                             (line  651)
* load_package_tests() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  639)
* LOAD_SUPER_ATTR (opcode):              Instruções em bytecode do Python.
                                                             (line  781)
* load_verify_locations() (método ssl.SSLContext): SSL Contexts.
                                                             (line  149)
* load() (método de classe tracemalloc.Snapshot): Snapshot.  (line   50)
* load() (método http.cookiejar.FileCookieJar): CookieJar and FileCookieJar Objects.
                                                             (line  126)
* load() (método http.cookies.BaseCookie): Objetos Cookie.   (line   40)
* load() (método pickle.Unpickler):      Interface do módulo.
                                                             (line  284)
* load() (no módulo json):               Uso básico<2>.      (line  112)
* load() (no módulo marshal):            marshal — Serialização interna de objetos Python.
                                                             (line   76)
* load() (no módulo pickle):             Interface do módulo.
                                                             (line   62)
* load() (no módulo plistlib):           plistlib — Gera e analisa arquivos Apple plist.
                                                             (line   48)
* load() (no módulo tomllib):            tomllib — Analisa arquivos TOML.
                                                             (line   32)
* loader (atributo importlib.machinery.ModuleSpec): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  398)
* Loader (classe em importlib.abc):      importlib abc – classes base abstratas relacionadas a importação.
                                                             (line   94)
* loader_state (atributo importlib.machinery.ModuleSpec): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  427)
* LoadError:                             http cookiejar — Cookie handling for HTTP clients.
                                                             (line   34)
* LoadFileDialog (classe em tkinter.filedialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line  139)
* LoadKey() (no módulo winreg):          Funções<13>.        (line  263)
* LoadLibrary() (método ctypes.LibraryLoader): Loading shared libraries.
                                                             (line  185)
* loads() (no módulo json):              Uso básico<2>.      (line  199)
* loads() (no módulo marshal):           marshal — Serialização interna de objetos Python.
                                                             (line  117)
* loads() (no módulo pickle):            Interface do módulo.
                                                             (line   80)
* loads() (no módulo plistlib):          plistlib — Gera e analisa arquivos Apple plist.
                                                             (line   84)
* loads() (no módulo tomllib):           tomllib — Analisa arquivos TOML.
                                                             (line   49)
* loads() (no módulo xmlrpc.client):     Convenience Functions.
                                                             (line   19)
* loadTestsFromModule() (método unittest.TestLoader): Carregando e executando testes.
                                                             (line   43)
* loadTestsFromName() (método unittest.TestLoader): Carregando e executando testes.
                                                             (line   72)
* loadTestsFromNames() (método unittest.TestLoader): Carregando e executando testes.
                                                             (line  106)
* loadTestsFromTestCase() (método unittest.TestLoader): Carregando e executando testes.
                                                             (line   31)
* local (classe em threading):           Thread-local data.  (line  127)
* LOCAL_CREDS (no módulo socket):        Constantes<8>.      (line  321)
* LOCAL_CREDS_PERSISTENT (no módulo socket): Constantes<8>.  (line  321)
* localcontext() (no módulo decimal):    Objetos de contexto.
                                                             (line   24)
* LOCALE (no módulo re):                 Sinalizadores.      (line   61)
* localeconv() (no módulo locale):       locale — Serviços de internacionalização.
                                                             (line   68)
* LocaleHTMLCalendar (classe em calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  347)
* LocaleTextCalendar (classe em calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  341)
* localizador:                           Localizadores e carregadores.
                                                             (line    6)
* localizador <1>:                       Glossário.          (line  616)
* localizador baseado no caminho:        O localizador baseado no caminho.
                                                             (line    6)
* localizador baseado no caminho <1>:    Glossário.          (line 1379)
* localizador de entrada de caminho:     Glossário.          (line 1362)
* localizador de metacaminho:            Glossário.          (line 1095)
* localizador;find_spec:                 O metacaminho.      (line    6)
* localize() (no módulo locale):         locale — Serviços de internacionalização.
                                                             (line  518)
* localName (atributo xml.dom.Attr):     Attr Objects.       (line   13)
* localName (atributo xml.dom.Node):     Objetos Node.       (line   64)
* localtime() (no módulo email.utils):   email utils Utilitários diversos.
                                                             (line   13)
* localtime() (no módulo time):          Funções<5>.         (line  152)
* Locator (classe em xml.sax.xmlreader): xml sax xmlreader — Interface for XML parsers.
                                                             (line   43)
* lock (atributo sys.thread_info):       sys — Parâmetros e funções específicas do sistema.
                                                             (line 2023)
* Lock (classe em asyncio):              Lock.               (line    6)
* Lock (classe em multiprocessing):      Primitivas de sincronização.
                                                             (line   59)
* Lock (classe em threading):            Lock objects.       (line   33)
* LOCK_EX (no módulo fcntl):             fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line  195)
* LOCK_NB (no módulo fcntl):             fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line  199)
* LOCK_SH (no módulo fcntl):             fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line  191)
* LOCK_UN (no módulo fcntl):             fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line  187)
* lock, interpreter:                     Estado de thread e a trava global do interpretador.
                                                             (line    6)
* lock() (método mailbox.Babyl):         Babyl objects.      (line   59)
* lock() (método mailbox.Mailbox):       Objetos Mailbox.    (line  257)
* lock() (método mailbox.Maildir):       Maildir objects.    (line  209)
* lock() (método mailbox.mbox):          mbox objects.       (line   57)
* lock() (método mailbox.MH):            MH objects.         (line   87)
* lock() (método mailbox.MMDF):          MMDF objects.       (line   47)
* Lock() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  190)
* locked() (método _thread.lock):        _thread— API de segmentação de baixo nível.
                                                             (line  182)
* locked() (método asyncio.Condition):   Condição.           (line   63)
* locked() (método asyncio.Lock):        Lock.               (line   58)
* locked() (método asyncio.Semaphore):   Semaphore.          (line   50)
* locked() (método threading.Lock):      Lock objects.       (line   87)
* lockf() (no módulo fcntl):             fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line  179)
* lockf() (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  272)
* locking() (no módulo msvcrt):          Operações com arquivos.
                                                             (line    6)
* LockType (no módulo _thread):          _thread— API de segmentação de baixo nível.
                                                             (line   28)
* LOG_ALERT (no módulo syslog):          syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  118)
* LOG_AUTH (no módulo syslog):           syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_AUTHPRIV (no módulo syslog):       syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_CONS (no módulo syslog):           syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  164)
* LOG_CRIT (no módulo syslog):           syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  118)
* LOG_CRON (no módulo syslog):           syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_DAEMON (no módulo syslog):         syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* log_date_time_string() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  329)
* LOG_DEBUG (no módulo syslog):          syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  118)
* LOG_EMERG (no módulo syslog):          syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  118)
* LOG_ERR (no módulo syslog):            syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  118)
* log_error() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  298)
* log_exception() (método wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  213)
* LOG_FTP (no módulo syslog):            syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_INFO (no módulo syslog):           syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  118)
* LOG_INSTALL (no módulo syslog):        syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_KERN (no módulo syslog):           syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_LAUNCHD (no módulo syslog):        syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_LOCAL0 (no módulo syslog):         syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_LOCAL1 (no módulo syslog):         syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_LOCAL2 (no módulo syslog):         syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_LOCAL3 (no módulo syslog):         syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_LOCAL4 (no módulo syslog):         syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_LOCAL5 (no módulo syslog):         syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_LOCAL6 (no módulo syslog):         syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_LOCAL7 (no módulo syslog):         syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_LPR (no módulo syslog):            syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_MAIL (no módulo syslog):           syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* log_message() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  304)
* LOG_NDELAY (no módulo syslog):         syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  164)
* LOG_NETINFO (no módulo syslog):        syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_NEWS (no módulo syslog):           syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_NOTICE (no módulo syslog):         syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  118)
* LOG_NOWAIT (no módulo syslog):         syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  164)
* LOG_ODELAY (no módulo syslog):         syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  164)
* LOG_PERROR (no módulo syslog):         syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  164)
* LOG_PID (no módulo syslog):            syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  164)
* LOG_RAS (no módulo syslog):            syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_REMOTEAUTH (no módulo syslog):     syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* log_request() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  291)
* LOG_SYSLOG (no módulo syslog):         syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* log_to_stderr() (no módulo multiprocessing): Gerando logs<2>.
                                                             (line   24)
* LOG_USER (no módulo syslog):           syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_UUCP (no módulo syslog):           syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  129)
* LOG_WARNING (no módulo syslog):        syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  118)
* log() (método logging.Logger):         Objetos Logger.     (line  323)
* log() (no módulo cmath):               Funções de potência e logarítmicas.
                                                             (line   11)
* log() (no módulo logging):             Funções de nível de módulo.
                                                             (line   99)
* log() (no módulo math):                Funções de potências exponenciais e logarítmicas.
                                                             (line   40)
* log10() (método decimal.Context):      Objetos de contexto.
                                                             (line  385)
* log10() (método decimal.Decimal):      Objetos de Decimal. (line  347)
* log10() (no módulo cmath):             Funções de potência e logarítmicas.
                                                             (line   17)
* log10() (no módulo math):              Funções de potências exponenciais e logarítmicas.
                                                             (line   67)
* log1p() (no módulo math):              Funções de potências exponenciais e logarítmicas.
                                                             (line   48)
* log2() (no módulo math):               Funções de potências exponenciais e logarítmicas.
                                                             (line   53)
* logb() (método decimal.Context):       Objetos de contexto.
                                                             (line  389)
* logb() (método decimal.Decimal):       Objetos de Decimal. (line  353)
* Logger (classe em logging):            Objetos Logger.     (line   24)
* LoggerAdapter (classe em logging):     LoggerAdapter Objects.
                                                             (line   11)
* logical_and() (método decimal.Context): Objetos de contexto.
                                                             (line  393)
* logical_and() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  362)
* logical_invert() (método decimal.Context): Objetos de contexto.
                                                             (line  397)
* logical_invert() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  368)
* logical_or() (método decimal.Context): Objetos de contexto.
                                                             (line  401)
* logical_or() (método decimal.Decimal): Objetos de Decimal. (line  373)
* logical_xor() (método decimal.Context): Objetos de contexto.
                                                             (line  405)
* logical_xor() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  379)
* login_cram_md5() (método imaplib.IMAP4): Objetos IMAP4.    (line  137)
* login_tty() (no módulo os):            Operações dos descritores de arquivos.
                                                             (line  299)
* login() (método ftplib.FTP):           FTP objects.        (line  128)
* login() (método imaplib.IMAP4):        Objetos IMAP4.      (line  132)
* login() (método smtplib.SMTP):         Objetos SMTP.       (line  102)
* LOGNAME:                               Parâmetros de processo.
                                                             (line  245)
* LOGNAME <1>:                           getpass — Entrada de senha portátil.
                                                             (line   44)
* lognormvariate() (no módulo random):   Distribuições com valor real.
                                                             (line   79)
* logout() (método imaplib.IMAP4):       Objetos IMAP4.      (line  146)
* LogRecord (classe em logging):         LogRecord Objects.  (line   11)
* LONG_MAX (C macro):                    Objetos Inteiros.   (line  155)
* LONG_TIMEOUT (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line   97)
* longMessage (atributo unittest.TestCase): Casos de teste.  (line  725)
* longname() (no módulo curses):         Funções<6>.         (line  280)
* lookup_error() (no módulo codecs):     Error Handlers.     (line  130)
* lookup() (método symtable.SymbolTable): Examining Symbol Tables.
                                                             (line  108)
* lookup() (método tkinter.ttk.Style):   Ttk Styling.        (line   81)
* lookup() (no módulo codecs):           codecs — Codec registry and base classes.
                                                             (line   56)
* lookup() (no módulo unicodedata):      unicodedata — Banco de dados de Unicode.
                                                             (line   22)
* LookupError:                           Classes base.       (line   85)
* loop_factory (atributo unittest.IsolatedAsyncioTestCase): Casos de teste.
                                                             (line  883)
* LOOPBACK_TIMEOUT (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line   50)
* lower() (método bytearray):            Operações com Bytes e Bytearray.
                                                             (line  647)
* lower() (método bytes):                Operações com Bytes e Bytearray.
                                                             (line  647)
* lower() (método str):                  String Methods<2>.  (line  473)
* LPAR (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line  180)
* lpAttributeList (atributo subprocess.STARTUPINFO): Windows Popen Helpers.
                                                             (line   60)
* lru_cache() (no módulo functools):     functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line  149)
* lseek() (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  310)
* LShift (classe em ast):                Expressões<2>.      (line   54)
* lshift() (no módulo operator):         operator — Operadores padrões como funções.
                                                             (line  115)
* LSQB (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line  186)
* lstat() (método pathlib.Path):         Consultando tipo de arquivo e status.
                                                             (line   32)
* lstat() (no módulo os):                Arquivos e diretórios.
                                                             (line  499)
* lstrip() (método bytearray):           Operações com Bytes e Bytearray.
                                                             (line  325)
* lstrip() (método bytes):               Operações com Bytes e Bytearray.
                                                             (line  325)
* lstrip() (método str):                 String Methods<2>.  (line  484)
* lsub() (método imaplib.IMAP4):         Objetos IMAP4.      (line  153)
* Lt (classe em ast):                    Expressões<2>.      (line  109)
* lt() (no módulo operator):             operator — Operadores padrões como funções.
                                                             (line   26)
* lt() (no módulo turtle):               Movimentos de Turtle.
                                                             (line   58)
* LtE (classe em ast):                   Expressões<2>.      (line  109)
* LWPCookieJar (classe em http.cookiejar): FileCookieJar subclasses and co-operation with web browsers.
                                                             (line   28)
* LZMACompressor (classe em lzma):       Comprimindo e descomprimindo dados na memória.
                                                             (line    6)
* LZMADecompressor (classe em lzma):     Comprimindo e descomprimindo dados na memória.
                                                             (line  102)
* LZMAError:                             lzma — Compressão usando o algoritmo LZMA.
                                                             (line   24)
* LZMAFile (classe em lzma):             Lendo e escrevendo arquivos comprimidos.
                                                             (line   48)
* M (no módulo re):                      Sinalizadores.      (line   86)
* mac_ver() (no módulo platform):        Plataforma macOS.   (line    6)
* machine() (no módulo platform):        Multiplataforma.    (line   38)
* macros (atributo netrc.netrc):         Objetos netrc.      (line   31)
* MADV_AUTOSYNC (no módulo mmap):        Constantes MADV_*.  (line    6)
* MADV_CORE (no módulo mmap):            Constantes MADV_*.  (line    6)
* MADV_DODUMP (no módulo mmap):          Constantes MADV_*.  (line    6)
* MADV_DOFORK (no módulo mmap):          Constantes MADV_*.  (line    6)
* MADV_DONTDUMP (no módulo mmap):        Constantes MADV_*.  (line    6)
* MADV_DONTFORK (no módulo mmap):        Constantes MADV_*.  (line    6)
* MADV_DONTNEED (no módulo mmap):        Constantes MADV_*.  (line    6)
* MADV_FREE (no módulo mmap):            Constantes MADV_*.  (line    6)
* MADV_FREE_REUSABLE (no módulo mmap):   Constantes MADV_*.  (line    6)
* MADV_FREE_REUSE (no módulo mmap):      Constantes MADV_*.  (line    6)
* MADV_HUGEPAGE (no módulo mmap):        Constantes MADV_*.  (line    6)
* MADV_HWPOISON (no módulo mmap):        Constantes MADV_*.  (line    6)
* MADV_MERGEABLE (no módulo mmap):       Constantes MADV_*.  (line    6)
* MADV_NOCORE (no módulo mmap):          Constantes MADV_*.  (line    6)
* MADV_NOHUGEPAGE (no módulo mmap):      Constantes MADV_*.  (line    6)
* MADV_NORMAL (no módulo mmap):          Constantes MADV_*.  (line    6)
* MADV_NOSYNC (no módulo mmap):          Constantes MADV_*.  (line    6)
* MADV_PROTECT (no módulo mmap):         Constantes MADV_*.  (line    6)
* MADV_RANDOM (no módulo mmap):          Constantes MADV_*.  (line    6)
* MADV_REMOVE (no módulo mmap):          Constantes MADV_*.  (line    6)
* MADV_SEQUENTIAL (no módulo mmap):      Constantes MADV_*.  (line    6)
* MADV_SOFT_OFFLINE (no módulo mmap):    Constantes MADV_*.  (line    6)
* MADV_UNMERGEABLE (no módulo mmap):     Constantes MADV_*.  (line    6)
* MADV_WILLNEED (no módulo mmap):        Constantes MADV_*.  (line    6)
* madvise() (método mmap.mmap):          mmap — Suporte a arquivos mapeados na memória.
                                                             (line  229)
* MAGIC_NUMBER (no módulo importlib.util): importlib util – Utility code for importers.
                                                             (line   13)
* MagicMock (classe em unittest.mock):   Magic Mock.         (line    9)
* mágico;método:                         Glossário.          (line 1086)
* Mailbox (classe em mailbox):           Objetos Mailbox.    (line    6)
* Maildir (classe em mailbox):           Maildir objects.    (line    6)
* MaildirMessage (classe em mailbox):    MaildirMessage objects.
                                                             (line    6)
* main_thread() (no módulo threading):   Referência<2>.      (line  109)
* main():                                Parâmetros de todo o processo.
                                                             (line    7)
* main() <1>:                            Parâmetros de todo o processo.
                                                             (line  227)
* main() <2>:                            PyConfig.           (line  130)
* main() (no módulo site):               Conteúdo do módulo<10>.
                                                             (line   45)
* main() (no módulo unittest):           Carregando e executando testes.
                                                             (line  517)
* mainloop() (no módulo turtle):         Usando os eventos de tela.
                                                             (line  106)
* maintype (atributo email.headerregistry.ContentTypeHeader): email headerregistry Custom Header Objects.
                                                             (line  276)
* mais:                                  Operações aritméticas unárias e bit a bit.
                                                             (line   15)
* major (atributo email.headerregistry.MIMEVersionHeader): email headerregistry Custom Header Objects.
                                                             (line  247)
* major() (no módulo os):                Arquivos e diretórios.
                                                             (line  656)
* make_alternative() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  608)
* make_archive() (no módulo shutil):     Operações de arquivamento.
                                                             (line   14)
* make_bad_fd() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  106)
* MAKE_CELL (opcode):                    Instruções em bytecode do Python.
                                                             (line  984)
* make_cookies() (método http.cookiejar.CookieJar): CookieJar and FileCookieJar Objects.
                                                             (line   61)
* make_dataclass() (no módulo dataclasses): Conteúdo do módulo<8>.
                                                             (line  404)
* make_file() (método difflib.HtmlDiff): difflib — Helpers for computing deltas.
                                                             (line  112)
* MAKE_FUNCTION (opcode):                Instruções em bytecode do Python.
                                                             (line 1123)
* make_header() (no módulo email.header): email header Internationalized headers.
                                                             (line  219)
* make_legacy_pyc() (no módulo test.support.import_helper): test support import_helper — Utilities for import tests.
                                                             (line   80)
* make_mixed() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  618)
* make_msgid() (no módulo email.utils):  email utils Utilitários diversos.
                                                             (line   28)
* make_parser() (no módulo xml.sax):     xml sax — Support for SAX2 parsers.
                                                             (line   27)
* make_pkg() (no módulo test.support.script_helper): test support script_helper — Utilities for the Python execution tests.
                                                             (line   97)
* make_related() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  599)
* make_script() (no módulo test.support.script_helper): test support script_helper — Utilities for the Python execution tests.
                                                             (line   82)
* make_server() (no módulo wsgiref.simple_server): wsgiref simple_server – um servidor HTTP WSGI simples.
                                                             (line   14)
* make_table() (método difflib.HtmlDiff): difflib — Helpers for computing deltas.
                                                             (line  144)
* make_zip_pkg() (no módulo test.support.script_helper): test support script_helper — Utilities for the Python execution tests.
                                                             (line  103)
* make_zip_script() (no módulo test.support.script_helper): test support script_helper — Utilities for the Python execution tests.
                                                             (line   89)
* makedev() (no módulo os):              Arquivos e diretórios.
                                                             (line  666)
* makedirs() (no módulo os):             Arquivos e diretórios.
                                                             (line  569)
* makeelement() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line  165)
* makefile() (método de socket):         Objetos de E/S também conhecidos como objetos arquivo.
                                                             (line    6)
* makefile() (método socket.socket):     Socket Objects.     (line  209)
* makeLogRecord() (no módulo logging):   Funções de nível de módulo.
                                                             (line  196)
* makePickle() (método logging.handlers.SocketHandler): SocketHandler.
                                                             (line   46)
* makeRecord() (método logging.Logger):  Objetos Logger.     (line  384)
* makeSocket() (método logging.handlers.DatagramHandler): DatagramHandler.
                                                             (line   38)
* makeSocket() (método logging.handlers.SocketHandler): SocketHandler.
                                                             (line   40)
* maketrans() (método estático bytearray): Operações com Bytes e Bytearray.
                                                             (line  181)
* maketrans() (método estático bytes):   Operações com Bytes e Bytearray.
                                                             (line  181)
* maketrans() (método estático str):     String Methods<2>.  (line  507)
* MalformedHeaderDefect:                 email errors Classes de Exceção e Defeito.
                                                             (line  108)
* malloc (C function):                   Visão Geral<4>.     (line   36)
* manager (atributo logging.LoggerAdapter): LoggerAdapter Objects.
                                                             (line   32)
* mangle_from_ (atributo email.policy.Compat32): email policy Policy Objects.
                                                             (line  575)
* mangle_from_ (atributo email.policy.Policy): email policy Policy Objects.
                                                             (line  187)
* manipular uma exceção:                 Exceções<2>.        (line    6)
* MANPAGER:                              pydoc — Gerador de documentação e sistema de ajuda online.
                                                             (line   47)
* MANPAGER <1>:                          pydoc — Gerador de documentação e sistema de ajuda online.
                                                             (line   49)
* mant_dig (atributo sys.float_info):    sys — Parâmetros e funções específicas do sistema.
                                                             (line  662)
* MAP_32BIT (no módulo mmap):            Constantes MAP_*.   (line    6)
* MAP_ADD (opcode):                      Instruções em bytecode do Python.
                                                             (line  397)
* MAP_ALIGNED_SUPER (no módulo mmap):    Constantes MAP_*.   (line    6)
* MAP_ANON (no módulo mmap):             Constantes MAP_*.   (line    6)
* MAP_ANONYMOUS (no módulo mmap):        Constantes MAP_*.   (line    6)
* map_async() (método multiprocessing.pool.Pool): Process Pools.
                                                             (line  114)
* MAP_CONCEAL (no módulo mmap):          Constantes MAP_*.   (line    6)
* MAP_DENYWRITE (no módulo mmap):        Constantes MAP_*.   (line    6)
* MAP_EXECUTABLE (no módulo mmap):       Constantes MAP_*.   (line    6)
* MAP_HASSEMAPHORE (no módulo mmap):     Constantes MAP_*.   (line    6)
* MAP_JIT (no módulo mmap):              Constantes MAP_*.   (line    6)
* MAP_NOCACHE (no módulo mmap):          Constantes MAP_*.   (line    6)
* MAP_NOEXTEND (no módulo mmap):         Constantes MAP_*.   (line    6)
* MAP_NORESERVE (no módulo mmap):        Constantes MAP_*.   (line    6)
* MAP_POPULATE (no módulo mmap):         Constantes MAP_*.   (line    6)
* MAP_PRIVATE (no módulo mmap):          Constantes MAP_*.   (line    6)
* MAP_RESILIENT_CODESIGN (no módulo mmap): Constantes MAP_*. (line    6)
* MAP_RESILIENT_MEDIA (no módulo mmap):  Constantes MAP_*.   (line    6)
* MAP_SHARED (no módulo mmap):           Constantes MAP_*.   (line    6)
* MAP_STACK (no módulo mmap):            Constantes MAP_*.   (line    6)
* map_table_b2() (no módulo stringprep): stringprep — Preparação de string para internet.
                                                             (line   50)
* map_table_b3() (no módulo stringprep): stringprep — Preparação de string para internet.
                                                             (line   55)
* map_to_type() (método email.headerregistry.HeaderRegistry): email headerregistry Custom Header Objects.
                                                             (line  377)
* MAP_TPRO (no módulo mmap):             Constantes MAP_*.   (line    6)
* MAP_TRANSLATED_ALLOW_EXECUTE (no módulo mmap): Constantes MAP_*.
                                                             (line    6)
* MAP_UNIX03 (no módulo mmap):           Constantes MAP_*.   (line    6)
* map() (método concurrent.futures.Executor): Executor Objects.
                                                             (line   22)
* map() (método multiprocessing.pool.Pool): Process Pools.   (line   97)
* map() (método tkinter.ttk.Style):      Ttk Styling.        (line   48)
* mapeamento:                            Glossário.          (line 1086)
* mapLogRecord() (método logging.handlers.HTTPHandler): HTTPHandler.
                                                             (line   27)
* Mapping (classe em collections.abc):   Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  120)
* Mapping (classe em typing):            Apelidos de contêineres ABC em collections abc.
                                                             (line   72)
* MappingProxyType (classe em types):    Tipos padrão do interpretador.
                                                             (line  229)
* MappingView (classe em collections.abc): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  125)
* MappingView (classe em typing):        Apelidos de contêineres ABC em collections abc.
                                                             (line   80)
* mapPriority() (método logging.handlers.SysLogHandler): SysLogHandler.
                                                             (line  204)
* maps (atributo collections.ChainMap):  Objetos ChainMap.   (line   40)
* máquina virtual:                       Glossário.          (line 1843)
* maquinário de importação:              O sistema de importação.
                                                             (line    6)
* MARCH (no módulo calendar):            calendar — Funções gerais relacionadas ao calendário.
                                                             (line  507)
* markcoroutinefunction() (no módulo inspect): Tipos e membros.
                                                             (line  433)
* marshalling;objetos:                   pickle — Serialização de objetos Python.
                                                             (line    8)
* mascaramento;operações:                Operações de bits em tipos inteiros.
                                                             (line    6)
* master (atributo tkinter.Tk):          Módulos Tkinter.    (line   79)
* Match (classe em ast):                 Correspondência de padrões.
                                                             (line    6)
* Match (classe em re):                  Objetos correspondência.
                                                             (line   15)
* Match (classe em typing):              Apelidos de outros tipos concretos.
                                                             (line    6)
* match_case (classe em ast):            Correspondência de padrões.
                                                             (line   15)
* MATCH_CLASS (opcode):                  Instruções em bytecode do Python.
                                                             (line 1225)
* MATCH_KEYS (opcode):                   Instruções em bytecode do Python.
                                                             (line  562)
* MATCH_MAPPING (opcode):                Instruções em bytecode do Python.
                                                             (line  542)
* MATCH_SEQUENCE (opcode):               Instruções em bytecode do Python.
                                                             (line  551)
* match_value() (método test.support.Matcher): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  804)
* match;case:                            A instrução match.  (line    6)
* match() (método pathlib.PurePath):     Métodos e propriedades.
                                                             (line  290)
* match() (método re.Pattern):           Objetos expressão regular.
                                                             (line   42)
* match() (no módulo re):                Funções<2>.         (line   51)
* MatchAs (classe em ast):               Correspondência de padrões.
                                                             (line  301)
* MatchClass (classe em ast):            Correspondência de padrões.
                                                             (line  235)
* Matcher (classe em test.support):      test support — Utilitários para o conjunto de teste do Python.
                                                             (line  797)
* matches() (método test.support.Matcher): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  799)
* MatchMapping (classe em ast):          Correspondência de padrões.
                                                             (line  188)
* MatchOr (classe em ast):               Correspondência de padrões.
                                                             (line  341)
* MatchSequence (classe em ast):         Correspondência de padrões.
                                                             (line  116)
* MatchSingleton (classe em ast):        Correspondência de padrões.
                                                             (line   91)
* MatchStar (classe em ast):             Correspondência de padrões.
                                                             (line  147)
* MatchValue (classe em ast):            Correspondência de padrões.
                                                             (line   64)
* matmul() (no módulo operator):         operator — Operadores padrões como funções.
                                                             (line  130)
* MatMult (classe em ast):               Expressões<2>.      (line   54)
* max (atributo datetime.date):          Objetos date.       (line  105)
* max (atributo datetime.datetime):      Objetos datetime.   (line  303)
* max (atributo datetime.time):          Objetos time.       (line   38)
* max (atributo datetime.timedelta):     Objetos timedelta.  (line   95)
* max (atributo sys.float_info):         sys — Parâmetros e funções específicas do sistema.
                                                             (line  668)
* max_10_exp (atributo sys.float_info):  sys — Parâmetros e funções específicas do sistema.
                                                             (line  677)
* max_count (atributo email.headerregistry.BaseHeader): email headerregistry Custom Header Objects.
                                                             (line   60)
* MAX_EMAX (no módulo decimal):          Constantes<4>.      (line   16)
* max_exp (atributo sys.float_info):     sys — Parâmetros e funções específicas do sistema.
                                                             (line  672)
* MAX_INTERPOLATION_DEPTH (no módulo configparser): Objetos ConfigParser.
                                                             (line  366)
* max_line_length (atributo email.policy.Policy): email policy Policy Objects.
                                                             (line  146)
* max_lines (atributo textwrap.TextWrapper): textwrap — Quebra automática e preenchimento de texto.
                                                             (line  280)
* max_mag() (método decimal.Context):    Objetos de contexto.
                                                             (line  414)
* max_mag() (método decimal.Decimal):    Objetos de Decimal. (line  393)
* max_memuse (no módulo test.support):   test support — Utilitários para o conjunto de teste do Python.
                                                             (line  154)
* MAX_PREC (no módulo decimal):          Constantes<4>.      (line   13)
* max_prefixlen (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line   51)
* max_prefixlen (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   69)
* max_prefixlen (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  278)
* max_prefixlen (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  302)
* MAX_Py_ssize_t (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  150)
* MAX_WBITS (no módulo zlib):            zlib — Compactação compatível com gzip.
                                                             (line  323)
* max() (método decimal.Context):        Objetos de contexto.
                                                             (line  410)
* max() (método decimal.Decimal):        Objetos de Decimal. (line  386)
* maxarray (atributo reprlib.Repr):      Objetos Repr.       (line   23)
* maxdeque (atributo reprlib.Repr):      Objetos Repr.       (line   23)
* maxdict (atributo reprlib.Repr):       Objetos Repr.       (line   23)
* maxDiff (atributo unittest.TestCase):  Casos de teste.     (line  742)
* maxfrozenset (atributo reprlib.Repr):  Objetos Repr.       (line   23)
* MAXIMUM_SUPPORTED (atributo ssl.TLSVersion): Constantes<9>.
                                                             (line  566)
* maximum_version (atributo ssl.SSLContext): SSL Contexts.   (line  539)
* maxlen (atributo collections.deque):   Objetos deque.      (line  127)
* maxlevel (atributo reprlib.Repr):      Objetos Repr.       (line   18)
* maxlist (atributo reprlib.Repr):       Objetos Repr.       (line   23)
* maxlong (atributo reprlib.Repr):       Objetos Repr.       (line   35)
* maxother (atributo reprlib.Repr):      Objetos Repr.       (line   48)
* maxset (atributo reprlib.Repr):        Objetos Repr.       (line   23)
* maxsize (atributo asyncio.Queue):      Queue.              (line   24)
* maxsize (no módulo sys):               sys — Parâmetros e funções específicas do sistema.
                                                             (line 1312)
* maxstring (atributo reprlib.Repr):     Objetos Repr.       (line   40)
* maxtuple (atributo reprlib.Repr):      Objetos Repr.       (line   23)
* maxunicode (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line 1319)
* MAXYEAR (no módulo datetime):          Constantes.         (line   13)
* MAY (no módulo calendar):              calendar — Funções gerais relacionadas ao calendário.
                                                             (line  507)
* MB_ICONASTERISK (no módulo winsound):  winsound — Interface de reprodução de som para o Windows.
                                                             (line  144)
* MB_ICONEXCLAMATION (no módulo winsound): winsound — Interface de reprodução de som para o Windows.
                                                             (line  148)
* MB_ICONHAND (no módulo winsound):      winsound — Interface de reprodução de som para o Windows.
                                                             (line  152)
* MB_ICONQUESTION (no módulo winsound):  winsound — Interface de reprodução de som para o Windows.
                                                             (line  156)
* MB_OK (no módulo winsound):            winsound — Interface de reprodução de som para o Windows.
                                                             (line  160)
* mbox (classe em mailbox):              mbox objects.       (line    6)
* mboxMessage (classe em mailbox):       mboxMessage objects.
                                                             (line    6)
* md5() (no módulo hashlib):             Construtores.       (line   20)
* mean (atributo statistics.NormalDist): Objetos NormalDist. (line   22)
* mean() (no módulo statistics):         Detalhes das funções.
                                                             (line   10)
* measure() (método tkinter.font.Font):  tkinter font — Invólucro de fontes Tkinter.
                                                             (line   65)
* median (atributo statistics.NormalDist): Objetos NormalDist.
                                                             (line   27)
* median_grouped() (no módulo statistics): Detalhes das funções.
                                                             (line  290)
* median_high() (no módulo statistics):  Detalhes das funções.
                                                             (line  270)
* median_low() (no módulo statistics):   Detalhes das funções.
                                                             (line  250)
* median() (no módulo statistics):       Detalhes das funções.
                                                             (line  221)
* member_names (atributo enum.EnumDict): Tipos de Dados<2>.  (line  759)
* member() (no módulo enum):             Utilities and Decorators.
                                                             (line   80)
* MemberDescriptorType (no módulo types): Tipos padrão do interpretador.
                                                             (line  212)
* memfd_create() (no módulo os):         Arquivos e diretórios.
                                                             (line 1901)
* memmove() (no módulo ctypes):          Funções utilitárias.
                                                             (line  169)
* Memória compartilhada:                 multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line   10)
* MemoryBIO (classe em ssl):             Підтримка BIO пам’яті<2>.
                                                             (line  134)
* MemoryError:                           Exceções concretas. (line  110)
* MemoryHandler (classe em logging.handlers): MemoryHandler. (line   41)
* memoryview (classe interna):           Memory Views.       (line   10)
* memset() (no módulo ctypes):           Funções utilitárias.
                                                             (line  175)
* menos:                                 Operações aritméticas unárias e bit a bit.
                                                             (line   11)
* merge() (no módulo heapq):             heapq — Algoritmo de fila heap.
                                                             (line   83)
* message (atributo BaseExceptionGroup): Grupos de exceções. (line   37)
* Message (classe em email.message):     email message Message Representing an email message using the compat32 API.
                                                             (line   49)
* Message (classe em mailbox):           Message objects.    (line    6)
* Message (classe em tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line   22)
* message digest, MD5:                   hashlib — Resumos de mensagens e hashes seguros.
                                                             (line    8)
* message_factory (atributo email.policy.Policy): email policy Policy Objects.
                                                             (line  196)
* message_from_binary_file() (no módulo email): Parser API.  (line  130)
* message_from_bytes() (no módulo email): Parser API.        (line  117)
* message_from_file() (no módulo email): Parser API.         (line  153)
* message_from_string() (no módulo email): Parser API.       (line  143)
* MessageBeep() (no módulo winsound):    winsound — Interface de reprodução de som para o Windows.
                                                             (line   34)
* MessageClass (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  173)
* MessageDefect:                         email errors Classes de Exceção e Defeito.
                                                             (line   55)
* MessageError:                          email errors Classes de Exceção e Defeito.
                                                             (line   13)
* MessageParseError:                     email errors Classes de Exceção e Defeito.
                                                             (line   19)
* messages (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   22)
* meta_path (no módulo sys):             sys — Parâmetros e funções específicas do sistema.
                                                             (line 1329)
* meta() (no módulo curses):             Funções<6>.         (line  287)
* metaclasse:                            Metaclasses.        (line    6)
* metaclasse <1>:                        Glossário.          (line 1105)
* metadata() (no módulo importlib.metadata): Metadados de distribuição.
                                                             (line    6)
* metaganchos:                           Ganchos de importação.
                                                             (line    6)
* MetaPathFinder (classe em importlib.abc): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line   27)
* metavar (atributo optparse.Option):    Atributos da classe Option.
                                                             (line   90)
* MetavarTypeHelpFormatter (classe em argparse): formatter_class.
                                                             (line   10)
* METH_CLASS (C macro):                  Implementing functions and methods.
                                                             (line  194)
* METH_COEXIST (C macro):                Implementing functions and methods.
                                                             (line  213)
* METH_FASTCALL (C macro):               Implementing functions and methods.
                                                             (line  124)
* METH_KEYWORDS (C macro):               Implementing functions and methods.
                                                             (line  108)
* METH_METHOD (C macro):                 Implementing functions and methods.
                                                             (line  151)
* METH_NOARGS (C macro):                 Implementing functions and methods.
                                                             (line  169)
* METH_O (C macro):                      Implementing functions and methods.
                                                             (line  181)
* METH_STATIC (C macro):                 Implementing functions and methods.
                                                             (line  202)
* METH_VARARGS (C macro):                Implementing functions and methods.
                                                             (line   98)
* method (atributo urllib.request.Request): Objeto Request.  (line   52)
* method_calls (atributo unittest.mock.Mock): A classe Mock. (line  509)
* methodcaller() (no módulo operator):   operator — Operadores padrões como funções.
                                                             (line  328)
* MethodDescriptorType (no módulo types): Tipos padrão do interpretador.
                                                             (line  110)
* methodHelp() (método xmlrpc.client.ServerProxy.system): Objetos ServerProxy.
                                                             (line   43)
* methods (atributo pyclbr.Class):       Objetos classe<2>.  (line   50)
* methodSignature() (método xmlrpc.client.ServerProxy.system): Objetos ServerProxy.
                                                             (line   22)
* MethodType (em tipos de módulos):      Objetos Function<3>.
                                                             (line   14)
* MethodType (em tipos de módulos) <1>:  Objetos método<2>.  (line   13)
* MethodType (no módulo types):          Tipos padrão do interpretador.
                                                             (line   79)
* MethodWrapperType (no módulo types):   Tipos padrão do interpretador.
                                                             (line   97)
* método:                                Glossário.          (line 1123)
* método embutido;chamada:               Chamadas.           (line  149)
* método especial:                       Glossário.          (line 1627)
* método mágico:                         Glossário.          (line 1082)
* método;chamada:                        Chamadas.           (line  149)
* metrics() (método tkinter.font.Font):  tkinter font — Invólucro de fontes Tkinter.
                                                             (line   72)
* MFD_ALLOW_SEALING (no módulo os):      Arquivos e diretórios.
                                                             (line 1919)
* MFD_CLOEXEC (no módulo os):            Arquivos e diretórios.
                                                             (line 1919)
* MFD_HUGE_16GB (no módulo os):          Arquivos e diretórios.
                                                             (line 1919)
* MFD_HUGE_16MB (no módulo os):          Arquivos e diretórios.
                                                             (line 1919)
* MFD_HUGE_1GB (no módulo os):           Arquivos e diretórios.
                                                             (line 1919)
* MFD_HUGE_1MB (no módulo os):           Arquivos e diretórios.
                                                             (line 1919)
* MFD_HUGE_256MB (no módulo os):         Arquivos e diretórios.
                                                             (line 1919)
* MFD_HUGE_2GB (no módulo os):           Arquivos e diretórios.
                                                             (line 1919)
* MFD_HUGE_2MB (no módulo os):           Arquivos e diretórios.
                                                             (line 1919)
* MFD_HUGE_32MB (no módulo os):          Arquivos e diretórios.
                                                             (line 1919)
* MFD_HUGE_512KB (no módulo os):         Arquivos e diretórios.
                                                             (line 1919)
* MFD_HUGE_512MB (no módulo os):         Arquivos e diretórios.
                                                             (line 1919)
* MFD_HUGE_64KB (no módulo os):          Arquivos e diretórios.
                                                             (line 1919)
* MFD_HUGE_8MB (no módulo os):           Arquivos e diretórios.
                                                             (line 1919)
* MFD_HUGE_MASK (no módulo os):          Arquivos e diretórios.
                                                             (line 1919)
* MFD_HUGE_SHIFT (no módulo os):         Arquivos e diretórios.
                                                             (line 1919)
* MFD_HUGETLB (no módulo os):            Arquivos e diretórios.
                                                             (line 1919)
* MH (classe em mailbox):                MH objects.         (line    6)
* MHMessage (classe em mailbox):         MHMessage objects.  (line    6)
* microsecond (atributo datetime.datetime): Objetos datetime.
                                                             (line  340)
* microsecond (atributo datetime.time):  Objetos time.       (line   63)
* microseconds (atributo datetime.timedelta): Objetos timedelta.
                                                             (line  131)
* MIME;base64 encoding:                  base64 — Base16 Base32 Base64 Base85 Data Encodings.
                                                             (line    8)
* MIME;cabeçalhos:                       mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line   26)
* MIME;cabeçalhos <1>:                   mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line   59)
* MIME;codificação de imprimíveis entre aspas: quopri — Codifica e decodifica dados MIME imprimidos entre aspas.
                                                             (line    8)
* MIME;tipo de conteúdo:                 mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line    8)
* MIMEApplication (classe em email.mime.application): email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line   99)
* MIMEAudio (classe em email.mime.audio): email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line  130)
* MIMEBase (classe em email.mime.base):  email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line   31)
* MIMEImage (classe em email.mime.image): email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line  164)
* MIMEMessage (classe em email.mime.message): email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line  200)
* MIMEMultipart (classe em email.mime.multipart): email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line   69)
* MIMENonMultipart (classe em email.mime.nonmultipart): email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line   58)
* MIMEPart (classe em email.message):    email message Representing an email message.
                                                             (line  719)
* MIMEText (classe em email.mime.text):  email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line  219)
* MimeTypes (classe em mimetypes):       Objetos MimeTypes.  (line   10)
* MIMEVersionHeader (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line  234)
* min (atributo datetime.date):          Objetos date.       (line  101)
* min (atributo datetime.datetime):      Objetos datetime.   (line  298)
* min (atributo datetime.time):          Objetos time.       (line   33)
* min (atributo datetime.timedelta):     Objetos timedelta.  (line   90)
* min (atributo sys.float_info):         sys — Parâmetros e funções específicas do sistema.
                                                             (line  683)
* min_10_exp (atributo sys.float_info):  sys — Parâmetros e funções específicas do sistema.
                                                             (line  697)
* MIN_EMIN (no módulo decimal):          Constantes<4>.      (line   19)
* MIN_ETINY (no módulo decimal):         Constantes<4>.      (line   22)
* min_exp (atributo sys.float_info):     sys — Parâmetros e funções específicas do sistema.
                                                             (line  692)
* min_mag() (método decimal.Context):    Objetos de contexto.
                                                             (line  422)
* min_mag() (método decimal.Decimal):    Objetos de Decimal. (line  405)
* min() (método decimal.Context):        Objetos de contexto.
                                                             (line  418)
* min() (método decimal.Decimal):        Objetos de Decimal. (line  398)
* MINEQUAL (no módulo token):            token — Constantes usadas com árvores de análises do Python.
                                                             (line  270)
* MINIMUM_SUPPORTED (atributo ssl.TLSVersion): Constantes<9>.
                                                             (line  564)
* minimum_version (atributo ssl.SSLContext): SSL Contexts.   (line  557)
* minor (atributo email.headerregistry.MIMEVersionHeader): email headerregistry Custom Header Objects.
                                                             (line  251)
* minor() (no módulo os):                Arquivos e diretórios.
                                                             (line  661)
* MINUS (no módulo token):               token — Constantes usadas com árvores de análises do Python.
                                                             (line  204)
* minus() (método decimal.Context):      Objetos de contexto.
                                                             (line  426)
* minute (atributo datetime.datetime):   Objetos datetime.   (line  332)
* minute (atributo datetime.time):       Objetos time.       (line   55)
* MINYEAR (no módulo datetime):          Constantes.         (line    8)
* mirrored() (no módulo unicodedata):    unicodedata — Banco de dados de Unicode.
                                                             (line  114)
* misc_header (atributo cmd.Cmd):        Objetos Cmd.        (line  163)
* MisplacedEnvelopeHeaderDefect:         email errors Classes de Exceção e Defeito.
                                                             (line   96)
* MISSING (atributo contextvars.Token):  Variáveis de contexto.
                                                             (line  100)
* MISSING (no módulo dataclasses):       Conteúdo do módulo<8>.
                                                             (line  489)
* MISSING (no módulo sys.monitoring):    Argumentos da função de retorno de chamada.
                                                             (line    6)
* MISSING_C_DOCSTRINGS (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  164)
* missing_compiler_executable() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  685)
* MissingHeaderBodySeparatorDefect:      email errors Classes de Exceção e Defeito.
                                                             (line  100)
* MissingSectionHeaderError:             Exceções<8>.        (line   63)
* mkd() (método ftplib.FTP):             FTP objects.        (line  340)
* mkdir() (método pathlib.Path):         Criando arquivos e diretórios.
                                                             (line   21)
* mkdir() (método zipfile.ZipFile):      Objetos ZipFile.    (line  354)
* mkdir() (no módulo os):                Arquivos e diretórios.
                                                             (line  533)
* mkdtemp() (no módulo tempfile):        tempfile — Generate temporary files and directories.
                                                             (line  289)
* mkfifo() (no módulo os):               Arquivos e diretórios.
                                                             (line  610)
* mknod() (no módulo os):                Arquivos e diretórios.
                                                             (line  634)
* mkstemp() (no módulo tempfile):        tempfile — Generate temporary files and directories.
                                                             (line  229)
* mktemp() (no módulo tempfile):         Deprecated functions and variables.
                                                             (line   15)
* mktime_tz() (no módulo email.utils):   email utils Utilitários diversos.
                                                             (line  152)
* mktime() (no módulo time):             Funções<5>.         (line  166)
* mlsd() (método ftplib.FTP):            FTP objects.        (line  286)
* mmap (classe em mmap):                 mmap — Suporte a arquivos mapeados na memória.
                                                             (line   57)
* MMDF (classe em mailbox):              MMDF objects.       (line    6)
* MMDFMessage (classe em mailbox):       MMDFMessage objects.
                                                             (line    6)
* Mock (classe em unittest.mock):        A classe Mock.      (line   25)
* mock_add_spec() (método unittest.mock.Mock): A classe Mock.
                                                             (line  250)
* mock_calls (atributo unittest.mock.Mock): A classe Mock.   (line  527)
* mock_open() (no módulo unittest.mock): mock_open.          (line    6)
* Mod (classe em ast):                   Expressões<2>.      (line   54)
* mod() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line  120)
* mode (atributo bz2.BZ2File):           Des compressão de arquivos.
                                                             (line  134)
* mode (atributo gzip.GzipFile):         gzip — Suporte para arquivos gzip.
                                                             (line  149)
* mode (atributo io.FileIO):             Raw File I/O.       (line   56)
* mode (atributo lzma.LZMAFile):         Lendo e escrevendo arquivos comprimidos.
                                                             (line  103)
* mode (atributo statistics.NormalDist): Objetos NormalDist. (line   32)
* mode (atributo tarfile.TarInfo):       Objetos TarInfo.    (line   78)
* mode() (no módulo statistics):         Detalhes das funções.
                                                             (line  339)
* mode() (no módulo turtle):             Configurações e métodos especiais.
                                                             (line    6)
* modelo de terminação:                  Exceções<2>.        (line   22)
* modf() (no módulo math):               Arimética de ponto flutuante.
                                                             (line   57)
* modificação concorrente:               Glossário.          (line  328)
* modified() (método urllib.robotparser.RobotFileParser): urllib robotparser — Analisador sintático de robots txt.
                                                             (line   47)
* modify() (método select.devpoll):      /dev/poll Polling Objects.
                                                             (line   49)
* modify() (método select.epoll):        Edge and Level Trigger Polling epoll Objects.
                                                             (line   85)
* modify() (método select.poll):         Polling Objects.    (line   60)
* modify() (método selectors.BaseSelector): Classes<4>.      (line   94)
* modo binário:                          Funções embutidas<3>.
                                                             (line 1522)
* modo interativo:                       Programas Python completos.
                                                             (line   19)
* module (atributo pyclbr.Class):        Objetos classe<2>.  (line   16)
* module (atributo pyclbr.Function):     Objetos Function.   (line   15)
* MODULE (atributo symtable.SymbolTableType): Examining Symbol Tables.
                                                             (line   11)
* Module (classe em ast):                Nós raízes.         (line    6)
* Module browser:                        Menu File Console e editor.
                                                             (line   22)
* module_from_spec() (no módulo importlib.util): importlib util – Utility code for importers.
                                                             (line  124)
* module; __future__:                    __future__ — Definições de instruções future.
                                                             (line    6)
* module; __main__:                      __main__ — Ambiente de código principal.
                                                             (line    6)
* module; _thread:                       _thread— API de segmentação de baixo nível.
                                                             (line    6)
* module; _tkinter:                      Módulos Tkinter.    (line  152)
* module; abc:                           abc — Classes base abstratas.
                                                             (line    6)
* module; aifc:                          aifc — Lê e escreve arquivos AIFF e AIFC.
                                                             (line    6)
* module; argparse:                      argparse — Analisador sintático para opções de linha de comando argumentos e subcomandos.
                                                             (line    6)
* module; array:                         array— Vetores eficientes de valores numéricos.
                                                             (line    6)
* module; ast:                           ast — Árvores de Sintaxe Abstrata.
                                                             (line    6)
* module; asynchat:                      asynchat — Manipulador de comando/resposta de socket assíncrono.
                                                             (line    6)
* module; asyncio:                       asyncio — E/S assíncrona.
                                                             (line    6)
* module; asyncore:                      asyncore — Manipulador de socket assíncrono.
                                                             (line    6)
* module; atexit:                        atexit — Manipuladores de saída.
                                                             (line    6)
* module; audioop:                       audioop — Manipulando dados de áudio original.
                                                             (line    6)
* module; base64:                        base64 — Base16 Base32 Base64 Base85 Data Encodings.
                                                             (line    6)
* module; bdb:                           bdb — Framework do depurador.
                                                             (line    6)
* module; binascii:                      binascii — Converte entre binário e ASCII.
                                                             (line    6)
* module; bisect:                        bisect — Algoritmo de bisseção de vetor.
                                                             (line    6)
* module; builtins:                      builtins — Objetos embutidos.
                                                             (line    6)
* module; bz2:                           bz2 — Suporte para compressão bzip2.
                                                             (line    6)
* module; calendar:                      calendar — Funções gerais relacionadas ao calendário.
                                                             (line    6)
* module; cgi:                           cgi — Suporte a Common Gateway Interface.
                                                             (line    6)
* module; cgitb:                         cgitb — Gerenciador de traceback para scripts de CGI.
                                                             (line    6)
* module; chunk:                         chunk — Lê dados em blocos IFF.
                                                             (line    6)
* module; cmath:                         cmath — Funções matemáticas para números complexos.
                                                             (line    6)
* module; cmd:                           cmd — Suporte para interpretadores de comando orientado a linhas.
                                                             (line    6)
* module; code:                          code — Classes bases do interpretador.
                                                             (line    6)
* module; codecs:                        codecs — Codec registry and base classes.
                                                             (line    6)
* module; codeop:                        codeop — Compila código Python.
                                                             (line    6)
* module; collections:                   collections — Tipos de dados de contêineres.
                                                             (line    6)
* module; collections.abc:               collections abc — Classes Base Abstratas para Contêineres.
                                                             (line    6)
* module; colorsys:                      colorsys — Conversões entre sistemas de cores.
                                                             (line    6)
* module; compileall:                    compileall — Compilar bibliotecas do Python para bytecode.
                                                             (line    6)
* module; concurrent.futures:            concurrent futures — Launching parallel tasks.
                                                             (line    6)
* module; configparser:                  configparser — Analisador sintático de arquivo de configuração.
                                                             (line    6)
* module; contextlib:                    contextlib — Utilitários para contextos da instrução with.
                                                             (line    6)
* module; contextvars:                   contextvars — Variáveis de contexto.
                                                             (line    6)
* module; copy:                          copy — Operações de cópia profunda e cópia rasa.
                                                             (line    6)
* module; copyreg:                       copyreg — Registra funções de suporte pickle.
                                                             (line    6)
* module; cProfile:                      profile and cProfile Module Reference.
                                                             (line    6)
* module; crypt:                         crypt — Função para verificar senhas Unix.
                                                             (line    6)
* module; csv:                           csv — Leitura e escrita de arquivos CSV.
                                                             (line    6)
* module; ctypes:                        ctypes — Uma biblioteca de funções externas para Python.
                                                             (line    6)
* module; curses:                        curses — Gerenciador de terminal para visualizadores de células de caracteres.
                                                             (line    6)
* module; curses.ascii:                  curses ascii — Utilitários para caracteres ASCII.
                                                             (line    6)
* module; curses.panel:                  curses panel — Uma extensão de pilha de painéis para o curses.
                                                             (line    6)
* module; curses.textpad:                curses textpad — Text input widget for curses programs.
                                                             (line    6)
* module; dataclasses:                   dataclasses — Data Classes.
                                                             (line    6)
* module; datetime:                      datetime — Tipos básicos de data e hora.
                                                             (line    6)
* module; dbm:                           dbm — Interfaces para “banco de dados” Unix.
                                                             (line    6)
* module; dbm.dumb:                      dbm dumb — Implementação portátil do DBM.
                                                             (line    6)
* module; dbm.gnu:                       dbm gnu — Gerenciador de banco de dados do GNU.
                                                             (line    6)
* module; dbm.ndbm:                      dbm ndbm — New Database Manager.
                                                             (line    6)
* module; dbm.sqlite3:                   dbm sqlite3 — Backend de SQLite para dbm.
                                                             (line    6)
* module; decimal:                       decimal — Aritmética de ponto fixo decimal e ponto flutuante.
                                                             (line    6)
* module; difflib:                       difflib — Helpers for computing deltas.
                                                             (line    6)
* module; dis:                           dis — Disassembler de bytecode do Python.
                                                             (line    6)
* module; distutils:                     distutils — Criação e instalação de módulos do Python.
                                                             (line    6)
* module; doctest:                       doctest — Teste exemplos interativos de Python.
                                                             (line    6)
* module; email:                         email — Um e-mail e um pacote MIME manipulável.
                                                             (line    6)
* module; email.charset:                 email charset Representando conjuntos de caracteres.
                                                             (line    6)
* module; email.contentmanager:          email contentmanager Gerenciando conteúdo MIME.
                                                             (line    6)
* module; email.encoders:                email encoders Codificadores.
                                                             (line    6)
* module; email.errors:                  email errors Classes de Exceção e Defeito.
                                                             (line    6)
* module; email.generator:               email generator Geração de documentos MIME.
                                                             (line    6)
* module; email.header:                  email header Internationalized headers.
                                                             (line    6)
* module; email.headerregistry:          email headerregistry Custom Header Objects.
                                                             (line    6)
* module; email.iterators:               email iterators Iteradores.
                                                             (line    6)
* module; email.message:                 email message Representing an email message.
                                                             (line    6)
* module; email.mime:                    email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line    6)
* module; email.mime.application:        email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line   99)
* module; email.mime.audio:              email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line  130)
* module; email.mime.base:               email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line   31)
* module; email.mime.image:              email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line  164)
* module; email.mime.message:            email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line  200)
* module; email.mime.multipart:          email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line   69)
* module; email.mime.nonmultipart:       email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line   58)
* module; email.mime.text:               email mimeemail mime Criando e-mail e objetos MIME do zero.
                                                             (line  219)
* module; email.parser:                  email parser Parsing email messages.
                                                             (line    6)
* module; email.policy:                  email policy Policy Objects.
                                                             (line    6)
* module; email.utils:                   email utils Utilitários diversos.
                                                             (line    6)
* module; encodings:                     encodings — Encodings package.
                                                             (line    6)
* module; encodings.idna:                encodings idna — Internationalized Domain Names in Applications.
                                                             (line    6)
* module; encodings.mbcs:                encodings mbcs — Windows ANSI codepage.
                                                             (line    6)
* module; encodings.utf_8_sig:           encodings utf_8_sig — UTF-8 codec with BOM signature.
                                                             (line    6)
* module; ensurepip:                     ensurepip — Inicialização do instalador do pip.
                                                             (line    6)
* module; enum:                          enum — Suporte a enumerações.
                                                             (line    6)
* module; errno:                         errno — Símbolos padrão do sistema errno.
                                                             (line    6)
* module; faulthandler:                  faulthandler — Dump the Python traceback.
                                                             (line    6)
* module; fcntl:                         fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line    6)
* module; filecmp:                       filecmp — Comparações de arquivos e diretórios.
                                                             (line    6)
* module; fileinput:                     fileinput — Itera sobre linhas de múltiplos fluxos de entrada.
                                                             (line    6)
* module; fnmatch:                       fnmatch — Correspondência de padrões de nome de arquivo Unix.
                                                             (line    6)
* module; fractions:                     fractions — Números racionais.
                                                             (line    6)
* module; ftplib:                        ftplib — FTP protocol client.
                                                             (line    6)
* module; functools:                     functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line    6)
* module; gc:                            gc — Interface para o coletor de lixo.
                                                             (line    6)
* module; getopt:                        getopt — Analisador sintático no estilo C para opções de linha de comando.
                                                             (line    6)
* module; getpass:                       getpass — Entrada de senha portátil.
                                                             (line    6)
* module; gettext:                       gettext — Serviços de internacionalização multilíngues.
                                                             (line    6)
* module; glob:                          glob — Expansão de padrão de nome de arquivo no estilo Unix.
                                                             (line    6)
* module; graphlib:                      graphlib — Funcionalidade para operar com estruturas do tipo grafo.
                                                             (line    6)
* module; grp:                           grp — O banco de dados de grupos.
                                                             (line    6)
* module; gzip:                          gzip — Suporte para arquivos gzip.
                                                             (line    6)
* module; hashlib:                       hashlib — Resumos de mensagens e hashes seguros.
                                                             (line    6)
* module; heapq:                         heapq — Algoritmo de fila heap.
                                                             (line    6)
* module; hmac:                          hmac — Código de autenticação de mensagem com chave hash.
                                                             (line    6)
* module; html:                          html — Suporte HTML HyperText Markup Language.
                                                             (line    6)
* module; html.entities:                 html entities — Definições de entidades gerais de HTML.
                                                             (line    6)
* module; html.parser:                   html parser — Analisador simples de HTML e XHTML.
                                                             (line    6)
* module; http:                          http — módulos HTTP.
                                                             (line    6)
* module; http.client:                   http client — HTTP protocol client.
                                                             (line    6)
* module; http.cookiejar:                http cookiejar — Cookie handling for HTTP clients.
                                                             (line    6)
* module; http.cookies:                  http cookies — HTTP state management.
                                                             (line    6)
* module; http.server:                   http server — HTTP servers.
                                                             (line    6)
* module; idlelib:                       idlelib — implementation of IDLE application.
                                                             (line    6)
* module; imaplib:                       imaplib — IMAP4 protocol client.
                                                             (line    6)
* module; imghdr:                        imghdr — Determina o tipo de uma imagem.
                                                             (line    6)
* module; imp:                           imp — Acessa os componentes internos de importação.
                                                             (line    6)
* module; importlib:                     importlib — A implementação de import.
                                                             (line    6)
* module; importlib.abc:                 importlib abc – classes base abstratas relacionadas a importação.
                                                             (line    6)
* module; importlib.machinery:           importlib machinery – Importadores e ganchos de caminho.
                                                             (line    6)
* module; importlib.metadata:            importlib metadata – Acessando metadados do pacote.
                                                             (line    6)
* module; importlib.resources:           importlib resources – Leitura abertura e acesso a recursos de pacotes.
                                                             (line    6)
* module; importlib.resources.abc:       importlib resources abc – Classes base abstratas para recursos.
                                                             (line    6)
* module; importlib.util:                importlib util – Utility code for importers.
                                                             (line    6)
* module; inspect:                       inspect — Inspecione objetos vivos.
                                                             (line    6)
* module; io:                            io — Ferramentas essenciais para trabalhar com fluxos.
                                                             (line    6)
* module; ipaddress:                     ipaddress — Biblioteca de manipulação de IPv4/IPv6.
                                                             (line    6)
* module; itertools:                     itertools — Funções que criam iteradores para laços eficientes.
                                                             (line    6)
* module; json:                          json — Codificador e decodificador JSON.
                                                             (line    6)
* module; json.tool:                     Interface de linha de comando<5>.
                                                             (line    6)
* module; keyword:                       keyword — Testando palavras reservadas do Python.
                                                             (line    6)
* module; linecache:                     linecache — Acesso aleatório a linhas de texto.
                                                             (line    6)
* module; locale:                        locale — Serviços de internacionalização.
                                                             (line    6)
* module; logging:                       logging — Recursos de registro de eventos para Python.
                                                             (line    6)
* module; logging.config:                logging config — Configuração do módulo logging.
                                                             (line    6)
* module; logging.handlers:              logging handlers — Manipuladores de logging.
                                                             (line    6)
* module; lzma:                          lzma — Compressão usando o algoritmo LZMA.
                                                             (line    6)
* module; mailbox:                       mailbox — Manipule caixas de entradas em vários formatos.
                                                             (line    6)
* module; mailcap:                       mailcap — Manipulação de arquivo Mailcap.
                                                             (line    6)
* module; marshal:                       marshal — Serialização interna de objetos Python.
                                                             (line    6)
* module; math:                          math — Funções matemáticas.
                                                             (line    6)
* module; mimetypes:                     mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line    6)
* module; mmap:                          mmap — Suporte a arquivos mapeados na memória.
                                                             (line    6)
* module; modulefinder:                  modulefinder — Procura módulos usados por um script.
                                                             (line    6)
* module; msilib:                        msilib — Lê e escreve arquivos do Microsoft Installer.
                                                             (line    6)
* module; msvcrt:                        msvcrt — Rotinas úteis do runtime MS VC++.
                                                             (line    6)
* module; multiprocessing:               multiprocessing — Paralelismo baseado em processo.
                                                             (line    6)
* module; multiprocessing.connection:    Listeners and Clients.
                                                             (line    6)
* module; multiprocessing.dummy:         The multiprocessing dummy module.
                                                             (line    6)
* module; multiprocessing.managers:      Gerenciadores.      (line   20)
* module; multiprocessing.pool:          Process Pools.      (line    6)
* module; multiprocessing.shared_memory: multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line    6)
* module; multiprocessing.sharedctypes:  O módulo multiprocessing sharedctypes.
                                                             (line    6)
* module; netrc:                         netrc — Arquivo de processamento netrc.
                                                             (line    6)
* module; nis:                           nis — Interface para NIS da Sun Yellow Pages.
                                                             (line    6)
* module; nntplib:                       nntplib — Cliente de protocolo NNTP.
                                                             (line    6)
* module; numbers:                       numbers — Classes base abstratas numéricas.
                                                             (line    6)
* module; operator:                      operator — Operadores padrões como funções.
                                                             (line    6)
* module; optparse:                      optparse — Analisador sintático para opções de linha de comando.
                                                             (line    6)
* module; os:                            os — Diversas interfaces de sistema operacional.
                                                             (line    6)
* module; os.path:                       os path — Manipulações comuns de nomes de caminhos.
                                                             (line    6)
* module; ossaudiodev:                   ossaudiodev — Acesso a dispositivos de áudio compatíveis com OSS.
                                                             (line    6)
* module; pathlib:                       pathlib — Caminhos do sistema de arquivos orientados a objetos.
                                                             (line    6)
* module; pdb:                           pdb — O depurador do Python.
                                                             (line    6)
* module; pickle:                        pickle — Serialização de objetos Python.
                                                             (line    6)
* module; pickletools:                   pickletools — Ferramentas para desenvolvedores pickle.
                                                             (line    6)
* module; pipes:                         pipes — Interface para pipelines do shell.
                                                             (line    6)
* module; pkgutil:                       pkgutil — Utilitário de extensão de pacote.
                                                             (line    6)
* module; platform:                      platform — Acesso aos dados de identificação da plataforma subjacente.
                                                             (line    6)
* module; plistlib:                      plistlib — Gera e analisa arquivos Apple plist.
                                                             (line    6)
* module; poplib:                        poplib — Cliente de protocolo POP3.
                                                             (line    6)
* module; posix:                         posix — As chamadas de sistema mais comuns do POSIX.
                                                             (line    6)
* module; pprint:                        pprint — Impressão bonita de dados.
                                                             (line    6)
* module; profile:                       profile and cProfile Module Reference.
                                                             (line    6)
* module; pstats:                        A classe Stats.     (line    9)
* module; pty:                           pty — Utilitários de pseudoterminal.
                                                             (line    6)
* module; pwd:                           pwd — A senha do banco de dados.
                                                             (line    6)
* module; py_compile:                    py_compile — Compila arquivos fonte do Python.
                                                             (line    6)
* module; pyclbr:                        pyclbr — Suporte a navegador de módulos do Python.
                                                             (line    6)
* module; pydoc:                         pydoc — Gerador de documentação e sistema de ajuda online.
                                                             (line    6)
* module; queue:                         queue — A synchronized queue class.
                                                             (line    6)
* module; quopri:                        quopri — Codifica e decodifica dados MIME imprimidos entre aspas.
                                                             (line    6)
* module; random:                        random — Gera números pseudoaleatórios.
                                                             (line    6)
* module; re:                            re — Operações com expressões regulares.
                                                             (line    6)
* module; readline:                      readline — Interface para o GNU readline.
                                                             (line    6)
* module; reprlib:                       reprlib — Implementação alternativa à repr.
                                                             (line    6)
* module; resource:                      resource — Informação de uso de recursos.
                                                             (line    6)
* module; rlcompleter:                   rlcompleter — Função de autocomplemento para GNU readline.
                                                             (line    6)
* module; runpy:                         runpy — Localizando e executando módulos Python.
                                                             (line    6)
* module; sched:                         sched — Agendador de eventos.
                                                             (line    6)
* module; secrets:                       secrets — Gera números aleatórios seguros para gerenciar segredos.
                                                             (line    6)
* module; select:                        select — Waiting for I/O completion.
                                                             (line    6)
* module; selectors:                     selectors — High-level I/O multiplexing.
                                                             (line    6)
* module; shelve:                        shelve — Python object persistence.
                                                             (line    6)
* module; shlex:                         shlex — Simple lexical analysis.
                                                             (line    6)
* module; shutil:                        shutil — Operações de arquivo de alto nível.
                                                             (line    6)
* module; signal:                        signal — Define manipuladores para eventos assíncronos.
                                                             (line    6)
* module; site:                          site — Gancho de configuração específico do site.
                                                             (line    6)
* module; sitecustomize:                 sitecustomize.      (line    6)
* module; smtpd:                         smtpd — Serviços SMTP.
                                                             (line    6)
* module; smtplib:                       smtplib — Cliente de protocolo SMTP.
                                                             (line    6)
* module; sndhdr:                        sndhdr — Determina o tipo de arquivos de som.
                                                             (line    6)
* module; socket:                        socket — Interface de rede de baixo nível.
                                                             (line    6)
* module; socketserver:                  socketserver — Um framework para servidores de rede.
                                                             (line    6)
* module; spwd:                          spwd — O banco de dados de senhas shadow.
                                                             (line    6)
* module; sqlite3:                       sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite.
                                                             (line    6)
* module; ssl:                           ssl — Invólucro de TLS/SSL para objetos socket.
                                                             (line    6)
* module; stat:                          stat — Interpretando resultados de stat.
                                                             (line    6)
* module; statistics:                    statistics — Funções estatísticas.
                                                             (line    6)
* module; string:                        string — Operações comuns de strings.
                                                             (line    6)
* module; stringprep:                    stringprep — Preparação de string para internet.
                                                             (line    6)
* module; struct:                        struct — Interpreta bytes como dados binários empacotados.
                                                             (line    6)
* module; subprocess:                    subprocess — Gerenciamento de subprocessos.
                                                             (line    6)
* module; sunau:                         sunau — Lê e escreve arquivos AU da Sun.
                                                             (line    6)
* module; symtable:                      symtable — Acesso a tabela de símbolos do compilador.
                                                             (line    6)
* module; sys:                           sys — Parâmetros e funções específicas do sistema.
                                                             (line    6)
* module; sys.monitoring:                sys monitoring — Monitoramento de eventos de execução.
                                                             (line    6)
* module; sysconfig:                     sysconfig — Fornece acesso às informações de configuração do Python.
                                                             (line    6)
* module; syslog:                        syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line    6)
* module; tabnanny:                      tabnanny — Detecção de indentação ambígua.
                                                             (line    6)
* module; tarfile:                       tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line    6)
* module; telnetlib:                     telnetlib — cliente Telnet.
                                                             (line    6)
* module; tempfile:                      tempfile — Generate temporary files and directories.
                                                             (line    6)
* module; termios:                       termios — Controle de tty no estilo POSIX.
                                                             (line    6)
* module; test:                          test — Pacote de Testes de Regressão do Python.
                                                             (line    6)
* module; test.regrtest:                 Executando testes usando a interface de linha de comando.
                                                             (line    6)
* module; test.support:                  test support — Utilitários para o conjunto de teste do Python.
                                                             (line    6)
* module; test.support.bytecode_helper:  test support bytecode_helper — Ferramentas de suporte para testar a geração correta de bytecode.
                                                             (line    6)
* module; test.support.import_helper:    test support import_helper — Utilities for import tests.
                                                             (line    6)
* module; test.support.os_helper:        test support os_helper — Utilities for os tests.
                                                             (line    6)
* module; test.support.script_helper:    test support script_helper — Utilities for the Python execution tests.
                                                             (line    6)
* module; test.support.socket_helper:    test support socket_helper — Utilities for socket tests.
                                                             (line    6)
* module; test.support.threading_helper: test support threading_helper — Utilities for threading tests.
                                                             (line    6)
* module; test.support.warnings_helper:  test support warnings_helper — Utilities for warnings tests.
                                                             (line    6)
* module; textwrap:                      textwrap — Quebra automática e preenchimento de texto.
                                                             (line    6)
* module; threading:                     threading — Paralelismo baseado em threads.
                                                             (line    6)
* module; time:                          time — Acesso ao horário e conversões.
                                                             (line    6)
* module; timeit:                        timeit — Mede o tempo de execução de pequenos trechos de código.
                                                             (line    6)
* module; tkinter:                       tkinter — Interface Python para Tcl/Tk.
                                                             (line    6)
* module; tkinter.colorchooser:          tkinter colorchooser — Diálogo de escolha de cor.
                                                             (line    6)
* module; tkinter.commondialog:          tkinter commondialog — Modelos de janela de diálogo.
                                                             (line    6)
* module; tkinter.dnd:                   tkinter dnd — Suporte para arrastar e soltar.
                                                             (line    6)
* module; tkinter.filedialog:            tkinter filedialog — Caixas de diálogo de seleção de arquivo.
                                                             (line    6)
* module; tkinter.font:                  tkinter font — Invólucro de fontes Tkinter.
                                                             (line    6)
* module; tkinter.messagebox:            tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line    6)
* module; tkinter.scrolledtext:          tkinter scrolledtext — Widget de texto de rolado.
                                                             (line    6)
* module; tkinter.simpledialog:          tkinter simpledialog — Diálogos de entrada padrão do Tkinter.
                                                             (line    6)
* module; tkinter.ttk:                   tkinter ttk — Widgets temáticos do Tk.
                                                             (line    6)
* module; token:                         token — Constantes usadas com árvores de análises do Python.
                                                             (line    6)
* module; tokenize:                      tokenize — Tokenizador para código-fonte Python.
                                                             (line    6)
* module; tomllib:                       tomllib — Analisa arquivos TOML.
                                                             (line    6)
* module; trace:                         trace — Rastreia ou acompanha a execução de instruções Python.
                                                             (line    6)
* module; traceback:                     traceback — Imprime ou recupera um traceback da pilha.
                                                             (line    6)
* module; tracemalloc:                   tracemalloc — Trace memory allocations.
                                                             (line    6)
* module; tty:                           tty — Funções de controle de terminal.
                                                             (line    6)
* module; turtle:                        turtle — Gráficos tartaruga.
                                                             (line    6)
* module; turtledemo:                    turtledemo — Scripts de Demonstração.
                                                             (line    6)
* module; types:                         types — Criação de tipos dinâmicos e nomes para tipos embutidos.
                                                             (line    6)
* module; typing:                        typing — Suporte para dicas de tipo.
                                                             (line    6)
* module; unicodedata:                   unicodedata — Banco de dados de Unicode.
                                                             (line    6)
* module; unittest:                      unittest — Framework de testes unitários.
                                                             (line    6)
* module; unittest.mock:                 unittest mock — mock object library.
                                                             (line    6)
* module; urllib:                        urllib — Módulos de manipulação de URL.
                                                             (line    6)
* module; urllib.error:                  urllib error — Classes de exceção levantadas por urllib request.
                                                             (line    6)
* module; urllib.parse:                  urllib parse — Analisa URLs para componentes.
                                                             (line    6)
* module; urllib.request:                urllib request — Biblioteca extensível para abrir URLs.
                                                             (line    6)
* module; urllib.response:               urllib response — Response classes used by urllib.
                                                             (line    6)
* module; urllib.robotparser:            urllib robotparser — Analisador sintático de robots txt.
                                                             (line    6)
* module; usercustomize:                 usercustomize.      (line    6)
* module; uu:                            uu — Codifica e decodifica arquivos uuencode.
                                                             (line    6)
* module; uuid:                          uuid — Objetos UUID conforme RFC 4122.
                                                             (line    8)
* module; venv:                          venv — Criação de ambientes virtuais.
                                                             (line    6)
* module; warnings:                      warnings — Controle de avisos.
                                                             (line    6)
* module; wave:                          wave — Read and write WAV files.
                                                             (line    6)
* module; weakref:                       weakref — Referências fracas.
                                                             (line    6)
* module; webbrowser:                    webbrowser — Controlador de navegador web conveniente.
                                                             (line    6)
* module; winreg:                        winreg — Acesso aos registros do Windows.
                                                             (line    6)
* module; winsound:                      winsound — Interface de reprodução de som para o Windows.
                                                             (line    6)
* module; wsgiref:                       wsgiref — Implementação de referência e utilitários WSGI.
                                                             (line    6)
* module; wsgiref.handlers:              wsgiref handlers – classes base de servidor/gateway.
                                                             (line    6)
* module; wsgiref.headers:               wsgiref headers – Ferramentas de cabeçalho de resposta WSGI.
                                                             (line    6)
* module; wsgiref.simple_server:         wsgiref simple_server – um servidor HTTP WSGI simples.
                                                             (line    6)
* module; wsgiref.types:                 wsgiref types – WSGI types for static type checking.
                                                             (line    6)
* module; wsgiref.util:                  wsgiref util – Utilidades do ambiente WSGI.
                                                             (line    6)
* module; wsgiref.validate:              wsgiref validate — Verificador de conformidade WSGI.
                                                             (line    6)
* module; xdrlib:                        xdrlib — Codifica e decodifica dados XDR.
                                                             (line    6)
* module; xml:                           Módulos de Processamento de XML.
                                                             (line    6)
* module; xml.dom:                       xml dom — The Document Object Model API.
                                                             (line    6)
* module; xml.dom.minidom:               xml dom minidom — Minimal DOM implementation.
                                                             (line    6)
* module; xml.dom.pulldom:               xml dom pulldom — Suporte para construir árvores parciais de DOM.
                                                             (line    6)
* module; xml.etree.ElementInclude:      Funções<10>.        (line    6)
* module; xml.etree.ElementTree:         xml etree ElementTree — A API XML ElementTree.
                                                             (line    6)
* module; xml.parsers.expat:             xml parsers expat — Fast XML parsing using Expat.
                                                             (line    6)
* module; xml.parsers.expat.errors:      Constantes de erro de expatriados.
                                                             (line    6)
* module; xml.parsers.expat.model:       Content Model Descriptions.
                                                             (line    6)
* module; xml.sax:                       xml sax — Support for SAX2 parsers.
                                                             (line    6)
* module; xml.sax.handler:               xml sax handler — Classes base para manipuladores de SAX.
                                                             (line    6)
* module; xml.sax.saxutils:              xml sax saxutils — Utilitários de SAX.
                                                             (line    6)
* module; xml.sax.xmlreader:             xml sax xmlreader — Interface for XML parsers.
                                                             (line    6)
* module; xmlrpc:                        xmlrpc — Módulos de servidor e cliente XMLRPC.
                                                             (line    6)
* module; xmlrpc.client:                 xmlrpc client — Cliente XML-RPC.
                                                             (line    6)
* module; xmlrpc.server:                 xmlrpc server — Servidores XML-RPC básicos.
                                                             (line    6)
* module; zipapp:                        zipapp — Gerencia arquivos zip executáveis do Python.
                                                             (line    6)
* module; zipfile:                       zipfile — Trabalha com arquivos ZIP.
                                                             (line    6)
* module; zipimport:                     zipimport - Importa módulos de arquivos Zip.
                                                             (line    6)
* module; zlib:                          zlib — Compactação compatível com gzip.
                                                             (line    6)
* module; zoneinfo:                      zoneinfo — Suporte a fuso horário da IANA.
                                                             (line    6)
* ModuleFinder (classe em modulefinder): modulefinder — Procura módulos usados por um script.
                                                             (line   26)
* ModuleInfo (classe em pkgutil):        pkgutil — Utilitário de extensão de pacote.
                                                             (line   13)
* ModuleNotFoundError:                   Exceções concretas. (line   72)
* modules (atributo modulefinder.ModuleFinder): modulefinder — Procura módulos usados por um script.
                                                             (line   50)
* modules (in module sys):               Importando módulos<2>.
                                                             (line    9)
* modules (in module sys) <1>:           Inicializando e encerrando o interpretador.
                                                             (line    7)
* modules (no módulo sys):               sys — Parâmetros e funções específicas do sistema.
                                                             (line 1362)
* modules_cleanup() (no módulo test.support.import_helper): test support import_helper — Utilities for import tests.
                                                             (line   71)
* modules_setup() (no módulo test.support.import_helper): test support import_helper — Utilities for import tests.
                                                             (line   67)
* ModuleSpec (classe em importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  376)
* ModuleType (classe em types):          Tipos padrão do interpretador.
                                                             (line  124)
* ModuleType (in module types):          Objetos do Módulo.  (line    7)
* módulo:                                Operações binárias aritméticas.
                                                             (line   48)
* módulo <1>:                            Glossário.          (line 1137)
* módulo de extensão:                    Glossário.          (line  562)
* módulo;__main__:                       Resolução de nomes. (line   57)
* módulo;__main__ <1>:                   Programas Python completos.
                                                             (line    6)
* módulo;__main__ <2>:                   Programas Python completos.
                                                             (line   19)
* módulo;__main__ <3>:                   runpy — Localizando e executando módulos Python.
                                                             (line   32)
* módulo;__main__ <4>:                   runpy — Localizando e executando módulos Python.
                                                             (line  107)
* módulo;__main__ <5>:                   Incorporando Python<2>.
                                                             (line   12)
* módulo;__main__ <6>:                   Inicializando e encerrando o interpretador.
                                                             (line    7)
* módulo;__main__ <7>:                   Sub-interpreter support.
                                                             (line  112)
* módulo;__main__ <8>:                   Sub-interpreter support.
                                                             (line  197)
* módulo;_locale:                        locale — Serviços de internacionalização.
                                                             (line   16)
* módulo;_thread:                        High-level API.     (line   53)
* módulo;array:                          Sequências mutáveis.
                                                             (line   10)
* módulo;array <1>:                      Tipos de sequência binária — bytes bytearray memoryview.
                                                             (line    6)
* módulo;base64:                         binascii — Converte entre binário e ASCII.
                                                             (line    6)
* módulo;bdb:                            pdb — O depurador do Python.
                                                             (line   18)
* módulo;builtins:                       A função dir.       (line   46)
* módulo;builtins <1>:                   Programas Python completos.
                                                             (line    6)
* módulo;builtins <2>:                   Funções embutidas<3>.
                                                             (line 2254)
* módulo;builtins <3>:                   Incorporando Python<2>.
                                                             (line   12)
* módulo;builtins <4>:                   Inicializando e encerrando o interpretador.
                                                             (line    7)
* módulo;builtins <5>:                   Sub-interpreter support.
                                                             (line  112)
* módulo;builtins <6>:                   Sub-interpreter support.
                                                             (line  197)
* módulo;cmd:                            pdb — O depurador do Python.
                                                             (line   18)
* módulo;collections:                    Sequências mutáveis.
                                                             (line   11)
* módulo;copy:                           copyreg — Registra funções de suporte pickle.
                                                             (line    8)
* módulo;dbm.gnu:                        Dicionários<2>.     (line   26)
* módulo;dbm.gnu <1>:                    Restrições.         (line    6)
* módulo;dbm.ndbm:                       Dicionários<2>.     (line   26)
* módulo;dbm.ndbm <1>:                   Restrições.         (line    6)
* módulo;errno:                          Exceções concretas. (line  158)
* módulo;espaço de nomes:                Módulos<3>.         (line   21)
* módulo;glob:                           fnmatch — Correspondência de padrões de nome de arquivo Unix.
                                                             (line   36)
* módulo;importação:                     A instrução import. (line    6)
* módulo;io:                             Objetos de E/S também conhecidos como objetos arquivo.
                                                             (line    6)
* módulo;json:                           Gravando dados estruturados com json.
                                                             (line    6)
* módulo;math:                           Tipos numéricos — int float complex.
                                                             (line  112)
* módulo;math <1>:                       Constantes<3>.      (line   47)
* módulo;os:                             posix — As chamadas de sistema mais comuns do POSIX.
                                                             (line   14)
* módulo;pesquisa;caminho:               O caminho de busca dos módulos.
                                                             (line    6)
* módulo;pesquisa;caminho <1>:           linecache — Acesso aleatório a linhas de texto.
                                                             (line   31)
* módulo;pesquisa;caminho <2>:           sys — Parâmetros e funções específicas do sistema.
                                                             (line 1389)
* módulo;pesquisa;caminho <3>:           site — Gancho de configuração específico do site.
                                                             (line   14)
* módulo;pesquisa;caminho <4>:           Incorporando Python<2>.
                                                             (line   12)
* módulo;pesquisa;caminho <5>:           Inicializando e encerrando o interpretador.
                                                             (line    7)
* módulo;pesquisa;caminho <6>:           Parâmetros de todo o processo.
                                                             (line  142)
* módulo;pickle:                         copy — Operações de cópia profunda e cópia rasa.
                                                             (line   76)
* módulo;pickle <1>:                     copyreg — Registra funções de suporte pickle.
                                                             (line    8)
* módulo;pickle <2>:                     shelve — Python object persistence.
                                                             (line    8)
* módulo;pickle <3>:                     marshal — Serialização interna de objetos Python.
                                                             (line   16)
* módulo;pty:                            Operações dos descritores de arquivos.
                                                             (line  492)
* módulo;pwd:                            os path — Manipulações comuns de nomes de caminhos.
                                                             (line  154)
* módulo;pyexpat:                        xml parsers expat — Fast XML parsing using Expat.
                                                             (line   19)
* módulo;re:                             String Methods<2>.  (line    6)
* módulo;re <1>:                         fnmatch — Correspondência de padrões de nome de arquivo Unix.
                                                             (line    8)
* módulo;shelve:                         marshal — Serialização interna de objetos Python.
                                                             (line   16)
* módulo;signal:                         _thread— API de segmentação de baixo nível.
                                                             (line  199)
* módulo;signal <1>:                     Tratamento de sinal<2>.
                                                             (line    7)
* módulo;signal <2>:                     Tratamento de sinal<2>.
                                                             (line   34)
* módulo;signal <3>:                     Tratamento de sinal<2>.
                                                             (line   43)
* módulo;socket:                         Protocolos de Internet e Suporte.
                                                             (line    6)
* módulo;stat:                           Arquivos e diretórios.
                                                             (line 1172)
* módulo;struct:                         Socket Objects.     (line  565)
* módulo;sys:                            Módulos padrões.    (line    6)
* módulo;sys <1>:                        Cláusula except.    (line   60)
* módulo;sys <2>:                        Programas Python completos.
                                                             (line    6)
* módulo;sys <3>:                        Funções embutidas<3>.
                                                             (line 1522)
* módulo;sys <4>:                        Incorporando Python<2>.
                                                             (line   12)
* módulo;sys <5>:                        Inicializando e encerrando o interpretador.
                                                             (line    7)
* módulo;sys <6>:                        Sub-interpreter support.
                                                             (line  112)
* módulo;sys <7>:                        Sub-interpreter support.
                                                             (line  197)
* módulo;types:                          Objetos tipo.       (line    6)
* módulo;urllib.request:                 http client — HTTP protocol client.
                                                             (line    8)
* modulus (atributo sys.hash_info):      sys — Parâmetros e funções específicas do sistema.
                                                             (line 1092)
* MON_1 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  251)
* MON_10 (no módulo locale):             locale — Serviços de internacionalização.
                                                             (line  251)
* MON_11 (no módulo locale):             locale — Serviços de internacionalização.
                                                             (line  251)
* MON_12 (no módulo locale):             locale — Serviços de internacionalização.
                                                             (line  251)
* MON_2 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  251)
* MON_3 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  251)
* MON_4 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  251)
* MON_5 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  251)
* MON_6 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  251)
* MON_7 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  251)
* MON_8 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  251)
* MON_9 (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  251)
* MONDAY (no módulo calendar):           calendar — Funções gerais relacionadas ao calendário.
                                                             (line  465)
* monotonic_ns() (no módulo time):       Funções<5>.         (line  214)
* monotonic() (no módulo time):          Funções<5>.         (line  181)
* month (atributo calendar.IllegalMonthError): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  540)
* month (atributo datetime.date):        Objetos date.       (line  121)
* month (atributo datetime.datetime):    Objetos datetime.   (line  320)
* Month (classe em calendar):            calendar — Funções gerais relacionadas ao calendário.
                                                             (line  525)
* month_abbr (no módulo calendar):       calendar — Funções gerais relacionadas ao calendário.
                                                             (line  496)
* month_name (no módulo calendar):       calendar — Funções gerais relacionadas ao calendário.
                                                             (line  486)
* month() (no módulo calendar):          calendar — Funções gerais relacionadas ao calendário.
                                                             (line  419)
* monthcalendar() (no módulo calendar):  calendar — Funções gerais relacionadas ao calendário.
                                                             (line  407)
* monthdatescalendar() (método calendar.Calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  116)
* monthdays2calendar() (método calendar.Calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  122)
* monthdayscalendar() (método calendar.Calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  128)
* monthrange() (no módulo calendar):     calendar — Funções gerais relacionadas ao calendário.
                                                             (line  402)
* Morsel (classe em http.cookies):       Objetos Morsel.     (line    6)
* most_common() (método collections.Counter): Objetos Counter.
                                                             (line   82)
* mouseinterval() (no módulo curses):    Funções<6>.         (line  292)
* mousemask() (no módulo curses):        Funções<6>.         (line  299)
* move_to_end() (método collections.OrderedDict): Objetos OrderedDict.
                                                             (line   74)
* move() (método curses.panel.Panel):    Objetos painel.     (line   35)
* move() (método curses.window):         Window Objects.     (line  398)
* move() (método mmap.mmap):             mmap — Suporte a arquivos mapeados na memória.
                                                             (line  242)
* move() (método tkinter.ttk.Treeview):  ttk Treeview.       (line  211)
* move() (no módulo shutil):             Operações de diretório e arquivos.
                                                             (line  360)
* MozillaCookieJar (classe em http.cookiejar): FileCookieJar subclasses and co-operation with web browsers.
                                                             (line    9)
* MRO:                                   Glossário.          (line 1154)
* mro() (método type):                   Métodos especiais.  (line    9)
* msg (atributo http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   40)
* msg (atributo json.JSONDecodeError):   Exceções<17>.       (line   11)
* msg (atributo netrc.NetrcParseError):  netrc — Arquivo de processamento netrc.
                                                             (line   56)
* msg (atributo re.PatternError):        Exceções<3>.        (line   16)
* msg (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line  122)
* mtime (atributo gzip.GzipFile):        gzip — Suporte para arquivos gzip.
                                                             (line  156)
* mtime (atributo tarfile.TarInfo):      Objetos TarInfo.    (line   69)
* mtime() (método urllib.robotparser.RobotFileParser): urllib robotparser — Analisador sintático de robots txt.
                                                             (line   40)
* mul() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line  125)
* Mult (classe em ast):                  Expressões<2>.      (line   54)
* MultiCall (classe em xmlrpc.client):   Objetos MultiCall.  (line    9)
* MULTILINE (no módulo re):              Sinalizadores.      (line   86)
* MultilineContinuationError:            Exceções<8>.        (line   77)
* MultiLoopChildWatcher (classe em asyncio): Monitores de processos.
                                                             (line  106)
* multimode() (no módulo statistics):    Detalhes das funções.
                                                             (line  376)
* MultipartConversionError:              email errors Classes de Exceção e Defeito.
                                                             (line   42)
* MultipartInvariantViolationDefect:     email errors Classes de Exceção e Defeito.
                                                             (line  116)
* multiplicação:                         Operações binárias aritméticas.
                                                             (line   17)
* multiplicação de matrizes:             Operações binárias aritméticas.
                                                             (line   27)
* multiply() (método decimal.Context):   Objetos de contexto.
                                                             (line  431)
* MutableMapping (classe em collections.abc): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  120)
* MutableMapping (classe em typing):     Apelidos de contêineres ABC em collections abc.
                                                             (line   89)
* MutableSequence (classe em collections.abc): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line   67)
* MutableSequence (classe em typing):    Apelidos de contêineres ABC em collections abc.
                                                             (line   99)
* MutableSet (classe em collections.abc): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  115)
* MutableSet (classe em typing):         Apelidos de contêineres ABC em collections abc.
                                                             (line  109)
* mutável:                               Glossário.          (line 1158)
* mutável;sequência;types:               Tipos sequências mutáveis.
                                                             (line    6)
* mvderwin() (método curses.window):     Window Objects.     (line  402)
* mvwin() (método curses.window):        Window Objects.     (line  409)
* myrights() (método imaplib.IMAP4):     Objetos IMAP4.      (line  160)
* N_TOKENS (no módulo token):            token — Constantes usadas com árvores de análises do Python.
                                                             (line  326)
* n_waiting (atributo asyncio.Barrier):  Barrier.            (line   98)
* n_waiting (atributo threading.Barrier): Barrier objects.   (line   97)
* NAK (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   93)
* name (atributo AttributeError):        Exceções concretas. (line   22)
* name (atributo bz2.BZ2File):           Des compressão de arquivos.
                                                             (line  140)
* name (atributo codecs.CodecInfo):      codecs — Codec registry and base classes.
                                                             (line   74)
* name (atributo contextvars.ContextVar): Variáveis de contexto.
                                                             (line   26)
* name (atributo doctest.DocTest):       DocTest Objects.    (line   30)
* name (atributo email.headerregistry.BaseHeader): email headerregistry Custom Header Objects.
                                                             (line   45)
* name (atributo enum.Enum):             Tipos de Dados<2>.  (line  126)
* name (atributo gzip.GzipFile):         gzip — Suporte para arquivos gzip.
                                                             (line  164)
* name (atributo hashlib.hash):          Objetos hash.       (line   19)
* name (atributo hmac.HMAC):             hmac — Código de autenticação de mensagem com chave hash.
                                                             (line  105)
* name (atributo http.cookiejar.Cookie): Objetos Cookie<2>.  (line   28)
* name (atributo ImportError):           Exceções concretas. (line   61)
* name (atributo importlib.abc.FileLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  317)
* name (atributo importlib.abc.Traversable): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  538)
* name (atributo importlib.machinery.AppleFrameworkLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  513)
* name (atributo importlib.machinery.ExtensionFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  315)
* name (atributo importlib.machinery.ModuleSpec): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  392)
* name (atributo importlib.machinery.SourceFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  220)
* name (atributo importlib.machinery.SourcelessFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  265)
* name (atributo importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  101)
* name (atributo inspect.Parameter):     Introspecting callables with the Signature object.
                                                             (line  205)
* name (atributo io.FileIO):             Raw File I/O.       (line   60)
* name (atributo logging.Logger):        Objetos Logger.     (line   26)
* name (atributo lzma.LZMAFile):         Lendo e escrevendo arquivos comprimidos.
                                                             (line  109)
* name (atributo multiprocessing.Process): Process e exceções.
                                                             (line  116)
* name (atributo multiprocessing.shared_memory.SharedMemory): multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line  132)
* name (atributo NameError):             Exceções concretas. (line  129)
* name (atributo os.DirEntry):           Arquivos e diretórios.
                                                             (line  987)
* name (atributo pathlib.PurePath):      Métodos e propriedades.
                                                             (line  124)
* name (atributo pyclbr.Class):          Objetos classe<2>.  (line   20)
* name (atributo pyclbr.Function):       Objetos Function.   (line   19)
* name (atributo sys.thread_info):       sys — Parâmetros e funções específicas do sistema.
                                                             (line 2010)
* name (atributo tarfile.TarInfo):       Objetos TarInfo.    (line   61)
* name (atributo tempfile.TemporaryDirectory): tempfile — Generate temporary files and directories.
                                                             (line  194)
* name (atributo threading.Thread):      Thread objects.     (line  153)
* name (atributo traceback.FrameSummary): FrameSummary Objects.
                                                             (line   38)
* name (atributo webbrowser.controller): Objetos controladores de navegador.
                                                             (line   10)
* name (atributo xml.dom.Attr):          Attr Objects.       (line    8)
* name (atributo xml.dom.DocumentType):  DocumentType Objects.
                                                             (line   33)
* name (atributo zipfile.Path):          Objetos Path.       (line   32)
* Name (classe em ast):                  Variáveis.          (line    6)
* name (no módulo os):                   os — Diversas interfaces de sistema operacional.
                                                             (line   56)
* NAME (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line   46)
* name() (no módulo unicodedata):        unicodedata — Banco de dados de Unicode.
                                                             (line   40)
* name2codepoint (no módulo html.entities): html entities — Definições de entidades gerais de HTML.
                                                             (line   31)
* NAMED_FLAGS (atributo enum.EnumCheck): Tipos de Dados<2>.  (line  653)
* NamedExpr (classe em ast):             Expressões<2>.      (line  185)
* NamedTemporaryFile() (no módulo tempfile): tempfile — Generate temporary files and directories.
                                                             (line   74)
* NamedTuple (classe em typing):         Outras diretivas especiais.
                                                             (line    9)
* namedtuple() (no módulo collections):  Função de fábrica para tuplas com campos nomeados namedtuple.
                                                             (line   11)
* NameError:                             Exceções concretas. (line  121)
* NameError (exceção embutida):          Resolução de nomes. (line   16)
* namelist() (método zipfile.ZipFile):   Objetos ZipFile.    (line  129)
* nameprep() (no módulo encodings.idna): encodings idna — Internationalized Domain Names in Applications.
                                                             (line   50)
* namer (atributo logging.handlers.BaseRotatingHandler): BaseRotatingHandler.
                                                             (line   18)
* namereplace_errors() (no módulo codecs): Error Handlers.   (line  181)
* namereplace;error handler's name:      Error Handlers.     (line   54)
* names() (no módulo tkinter.font):      tkinter font — Invólucro de fontes Tkinter.
                                                             (line   96)
* Namespace (classe em argparse):        O objeto Namespace. (line    6)
* Namespace (classe em multiprocessing.managers): Gerenciadores.
                                                             (line  245)
* NAMESPACE_DNS (no módulo uuid):        uuid — Objetos UUID conforme RFC 4122.
                                                             (line  211)
* NAMESPACE_OID (no módulo uuid):        uuid — Objetos UUID conforme RFC 4122.
                                                             (line  221)
* NAMESPACE_URL (no módulo uuid):        uuid — Objetos UUID conforme RFC 4122.
                                                             (line  216)
* NAMESPACE_X500 (no módulo uuid):       uuid — Objetos UUID conforme RFC 4122.
                                                             (line  226)
* namespace() (método imaplib.IMAP4):    Objetos IMAP4.      (line  165)
* Namespace() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  195)
* NamespaceErr:                          Exceções<20>.       (line   66)
* NamespaceLoader (classe em importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  358)
* namespaceURI (atributo xml.dom.Node):  Objetos Node.       (line   74)
* nametofont() (no módulo tkinter.font): tkinter font — Invólucro de fontes Tkinter.
                                                             (line  100)
* NaN:                                   Funções embutidas<3>.
                                                             (line  737)
* nan (atributo sys.hash_info):          sys — Parâmetros e funções específicas do sistema.
                                                             (line 1100)
* nan (no módulo cmath):                 Constantes<3>.      (line   33)
* nan (no módulo math):                  Constantes<2>.      (line   31)
* nanj (no módulo cmath):                Constantes<3>.      (line   40)
* NannyNag:                              tabnanny — Detecção de indentação ambígua.
                                                             (line   40)
* não determinístico:                    Glossário.          (line 1254)
* napms() (no módulo curses):            Funções<6>.         (line  308)
* nargs (atributo optparse.Option):      Atributos da classe Option.
                                                             (line   51)
* native_id (atributo threading.Thread): Thread objects.     (line  175)
* nbytes (atributo memoryview):          Memory Views.       (line  391)
* ncurses_version (no módulo curses):    Constantes<6>.      (line   22)
* ND (atributo inspect.BufferFlags):     Buffer flags.       (line   21)
* ndiff() (no módulo difflib):           difflib — Helpers for computing deltas.
                                                             (line  233)
* ndim (atributo memoryview):            Memory Views.       (line  457)
* ne() (no módulo operator):             operator — Operadores padrões como funções.
                                                             (line   26)
* needs_input (atributo bz2.BZ2Decompressor): Des compressão incremental.
                                                             (line   86)
* needs_input (atributo lzma.LZMADecompressor): Comprimindo e descomprimindo dados na memória.
                                                             (line  181)
* neg() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line  137)
* negação:                               Operações aritméticas unárias e bit a bit.
                                                             (line   11)
* nested_scopes (no módulo __future__):  Conteúdo do módulo<9>.
                                                             (line   14)
* netmask (atributo ipaddress.IPv4Network): Objetos de rede. (line  105)
* netmask (atributo ipaddress.IPv6Network): Objetos de rede. (line  322)
* NetmaskValueError:                     Exceções personalizadas.
                                                             (line   13)
* netrc (classe em netrc):               netrc — Arquivo de processamento netrc.
                                                             (line   13)
* NetrcParseError:                       netrc — Arquivo de processamento netrc.
                                                             (line   50)
* netscape (atributo http.cookiejar.CookiePolicy): Objeto CookiePolicy.
                                                             (line   68)
* network (atributo ipaddress.IPv4Interface): Objetos de interface.
                                                             (line   27)
* network (atributo ipaddress.IPv6Interface): Objetos de interface.
                                                             (line   75)
* network_address (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line   90)
* network_address (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  316)
* Never (no módulo typing):              Tipos especiais.    (line  100)
* NEVER_EQ (no módulo test.support):     test support — Utilitários para o conjunto de teste do Python.
                                                             (line  189)
* new_child() (método collections.ChainMap): Objetos ChainMap.
                                                             (line   48)
* new_class() (no módulo types):         Criação de tipos dinâmicos.
                                                             (line    6)
* new_event_loop() (método asyncio.AbstractEventLoopPolicy): Policy Objects.
                                                             (line   27)
* new_event_loop() (no módulo asyncio):  Laço de eventos.    (line   74)
* new_panel() (no módulo curses.panel):  Funções<7>.         (line   12)
* new() (no módulo hashlib):             Construtores.       (line    6)
* new() (no módulo hmac):                hmac — Código de autenticação de mensagem com chave hash.
                                                             (line   15)
* newfunc (C type):                      Slot Type typedefs. (line   31)
* NEWLINE (no módulo token):             token — Constantes usadas com árvores de análises do Python.
                                                             (line   78)
* newlines (atributo io.TextIOBase):     E/S de texto<2>.    (line   24)
* newpad() (no módulo curses):           Funções<6>.         (line  312)
* NewType (classe em typing):            Outras diretivas especiais.
                                                             (line  106)
* newwin() (no módulo curses):           Funções<6>.         (line  332)
* next (pdb command):                    Comandos de depuração.
                                                             (line  221)
* next_minus() (método decimal.Context): Objetos de contexto.
                                                             (line  435)
* next_minus() (método decimal.Decimal): Objetos de Decimal. (line  410)
* next_plus() (método decimal.Context):  Objetos de contexto.
                                                             (line  439)
* next_plus() (método decimal.Decimal):  Objetos de Decimal. (line  416)
* next_toward() (método decimal.Context): Objetos de contexto.
                                                             (line  443)
* next_toward() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  422)
* next() (método tarfile.TarFile):       Objetos TarFile.    (line  136)
* next() (método tkinter.ttk.Treeview):  ttk Treeview.       (line  222)
* nextafter() (no módulo math):          Funções de manipulação de ponto flutuante.
                                                             (line   83)
* nextfile() (no módulo fileinput):      fileinput — Itera sobre linhas de múltiplos fluxos de entrada.
                                                             (line  124)
* nextkey() (método dbm.gnu.gdbm):       dbm gnu — Gerenciador de banco de dados do GNU.
                                                             (line  108)
* nextSibling (atributo xml.dom.Node):   Objetos Node.       (line   42)
* ngettext() (método gettext.GNUTranslations): A classe GNUTranslations.
                                                             (line   48)
* ngettext() (método gettext.NullTranslations): A classe NullTranslations.
                                                             (line   43)
* ngettext() (no módulo gettext):        API do GNU gettext. (line   44)
* nice() (no módulo os):                 Gerenciamento de processo.
                                                             (line  376)
* NL (no módulo curses.ascii):           curses ascii — Utilitários para caracteres ASCII.
                                                             (line   57)
* NL (no módulo token):                  token — Constantes usadas com árvores de análises do Python.
                                                             (line   82)
* nl_langinfo() (no módulo locale):      locale — Serviços de internacionalização.
                                                             (line  186)
* nl() (no módulo curses):               Funções<6>.         (line  342)
* nlargest() (no módulo heapq):          heapq — Algoritmo de fila heap.
                                                             (line  112)
* nlst() (método ftplib.FTP):            FTP objects.        (line  301)
* NO (no módulo tkinter.messagebox):     tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  161)
* no_cache() (método de classe zoneinfo.ZoneInfo): A classe ZoneInfo.
                                                             (line   46)
* NO_EVENTS (monitoring event):          Eventos.            (line   95)
* no_proxy:                              urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  312)
* no_site (atributo sys.flags):          sys — Parâmetros e funções específicas do sistema.
                                                             (line  574)
* no_tracing() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  554)
* no_type_check_decorator() (no módulo typing): Funções e decoradores.
                                                             (line  367)
* no_type_check() (no módulo typing):    Funções e decoradores.
                                                             (line  355)
* no_user_site (atributo sys.flags):     sys — Parâmetros e funções específicas do sistema.
                                                             (line  571)
* NoBoundaryInMultipartDefect:           email errors Classes de Exceção e Defeito.
                                                             (line   75)
* nocbreak() (no módulo curses):         Funções<6>.         (line  348)
* NoDataAllowedErr:                      Exceções<20>.       (line   83)
* node (atributo uuid.UUID):             uuid — Objetos UUID conforme RFC 4122.
                                                             (line  122)
* node() (no módulo platform):           Multiplataforma.    (line   46)
* NoDefault (no módulo typing):          Auxiliares de introspecção.
                                                             (line  171)
* nodelay() (método curses.window):      Window Objects.     (line  413)
* nodeName (atributo xml.dom.Node):      Objetos Node.       (line   79)
* NodeTransformer (classe em ast):       Auxiliares de ast.  (line  231)
* nodeType (atributo xml.dom.Node):      Objetos Node.       (line    8)
* nodeValue (atributo xml.dom.Node):     Objetos Node.       (line   88)
* NodeVisitor (classe em ast):           Auxiliares de ast.  (line  190)
* noecho() (no módulo curses):           Funções<6>.         (line  353)
* NOEXPR (no módulo locale):             locale — Serviços de internacionalização.
                                                             (line  297)
* NOFLAG (no módulo re):                 Sinalizadores.      (line   99)
* nome:                                  Identificadores e palavras-chave.
                                                             (line    6)
* nome <1>:                              Ligação de nomes.   (line    6)
* nome <2>:                              Identificadores Nomes.
                                                             (line    6)
* nome qualificado:                      Glossário.          (line 1476)
* nome;desfiguração:                     Variáveis privadas. (line   14)
* nome;desfiguração <1>:                 Identificadores Nomes.
                                                             (line   15)
* nome;vinculação; ligação:              A instrução import. (line    6)
* nome;vinculação; ligação <1>:          A instrução import. (line   54)
* nome;vinculação; ligação <2>:          Definições de função.
                                                             (line    6)
* nome;vinculação; ligação <3>:          Definições de função.
                                                             (line    6)
* nome;vinculação; ligação <4>:          Definições de classe.
                                                             (line    6)
* Nomeada, memória compartilhada:        multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line   10)
* nomes de arquivos;expansão de curingas: fnmatch — Correspondência de padrões de nome de arquivo Unix.
                                                             (line    8)
* nomes de arquivos;expansão de nome de arquivo: glob — Expansão de padrão de nome de arquivo no estilo Unix.
                                                             (line    8)
* NoModificationAllowedErr:              Exceções<20>.       (line   88)
* NonCallableMagicMock (classe em unittest.mock): Magic Mock.
                                                             (line   22)
* NonCallableMock (classe em unittest.mock): A classe Mock.  (line  585)
* None (Objeto embutido):                Teste do valor verdade.
                                                             (line   16)
* None (variável interna):               Constantes embutidas.
                                                             (line   19)
* NoneType (no módulo types):            Tipos padrão do interpretador.
                                                             (line   19)
* nonl() (no módulo curses):             Funções<6>.         (line  357)
* Nonlocal (classe em ast):              Definições de função e classe.
                                                             (line  145)
* nonmember() (no módulo enum):          Utilities and Decorators.
                                                             (line   86)
* noop() (método imaplib.IMAP4):         Objetos IMAP4.      (line  169)
* noop() (método poplib.POP3):           Objetos POP3.       (line   79)
* NoOptionError:                         Exceções<8>.        (line   35)
* NOP (opcode):                          Instruções em bytecode do Python.
                                                             (line  137)
* noqiflush() (no módulo curses):        Funções<6>.         (line  367)
* noraw() (no módulo curses):            Funções<6>.         (line  375)
* NoReturn (no módulo typing):           Tipos especiais.    (line  100)
* NORMAL (no módulo tkinter.font):       tkinter font — Invólucro de fontes Tkinter.
                                                             (line   15)
* NORMAL_PRIORITY_CLASS (no módulo subprocess): Constantes do Windows.
                                                             (line   96)
* NormalDist (classe em statistics):     Objetos NormalDist. (line   14)
* normalize_encoding() (no módulo encodings): encodings — Encodings package.
                                                             (line    8)
* NORMALIZE_WHITESPACE (no módulo doctest): Flags opcionais. (line   37)
* normalize() (método decimal.Context):  Objetos de contexto.
                                                             (line  447)
* normalize() (método decimal.Decimal):  Objetos de Decimal. (line  430)
* normalize() (método xml.dom.Node):     Objetos Node.       (line  141)
* normalize() (no módulo locale):        locale — Serviços de internacionalização.
                                                             (line  445)
* normalize() (no módulo unicodedata):   unicodedata — Banco de dados de Unicode.
                                                             (line  133)
* normalvariate() (no módulo random):    Distribuições com valor real.
                                                             (line   86)
* normcase() (no módulo os.path):        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  378)
* normpath() (no módulo os.path):        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  389)
* NoSectionError:                        Exceções<8>.        (line   11)
* NoSuchMailboxError:                    Exceções<18>.       (line   12)
* Not (classe em ast):                   Expressões<2>.      (line   28)
* not_() (no módulo operator):           operator — Operadores padrões como funções.
                                                             (line   52)
* notação:                               Notação.            (line    6)
* NotADirectoryError:                    Exceções de sistema operacional.
                                                             (line   90)
* notationDecl() (método xml.sax.handler.DTDHandler): DTDHandler Objects.
                                                             (line    8)
* NotationDeclHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  363)
* notations (atributo xml.dom.DocumentType): DocumentType Objects.
                                                             (line   46)
* NotConnected:                          http client — HTTP protocol client.
                                                             (line  137)
* Notebook (classe em tkinter.ttk):      ttk Notebook.       (line    6)
* NotEmptyError:                         Exceções<18>.       (line   19)
* NotEq (classe em ast):                 Expressões<2>.      (line  109)
* NOTEQUAL (no módulo token):            token — Constantes usadas com árvores de análises do Python.
                                                             (line  243)
* NotFoundErr:                           Exceções<20>.       (line   72)
* notify_all() (método asyncio.Condition): Condição.         (line   67)
* notify_all() (método threading.Condition): Condition objects.
                                                             (line  172)
* notify() (método asyncio.Condition):   Condição.           (line   54)
* notify() (método threading.Condition): Condition objects.  (line  152)
* notimeout() (método curses.window):    Window Objects.     (line  417)
* NotImplemented (variável interna):     Constantes embutidas.
                                                             (line   27)
* NotImplementedError:                   Exceções concretas. (line  135)
* NotImplementedType (no módulo types):  Tipos padrão do interpretador.
                                                             (line  104)
* NotIn (classe em ast):                 Expressões<2>.      (line  109)
* NotRequired (no módulo typing):        Formas especiais.   (line  266)
* NOTSET (no módulo logging):            Níveis de Logging.  (line   17)
* NotStandaloneHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  414)
* NotSupportedErr:                       Exceções<20>.       (line   78)
* NotSupportedError:                     Exceções<7>.        (line   85)
* noutrefresh() (método curses.window):  Window Objects.     (line  425)
* nova vinculação; nova ligação;nome:    Instruções de atribuição.
                                                             (line    6)
* novas linhas universais:               Glossário.          (line 1801)
* novas linhas universais;função csv.reader: Conteúdo do módulo<3>.
                                                             (line    8)
* novas linhas universais;função embutida open(): Funções embutidas<3>.
                                                             (line 1457)
* novas linhas universais;io.IncrementalNewlineDecoder class: E/S de texto<2>.
                                                             (line  287)
* novas linhas universais;io.TextIOWrapper class: E/S de texto<2>.
                                                             (line  127)
* novas linhas universais;método bytearray.splitlines: Operações com Bytes e Bytearray.
                                                             (line  668)
* novas linhas universais;método bytes.splitlines: Operações com Bytes e Bytearray.
                                                             (line  668)
* novas linhas universais;Método importlib.abc.InspectLoader.get_source: importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  226)
* novas linhas universais;método str.splitlines: String Methods<2>.
                                                             (line  717)
* novas linhas universais;subprocess module: Argumentos usados frequentemente.
                                                             (line   34)
* novas linhas universais;What's new:    PEP 3116 New I/O Library.
                                                             (line   45)
* novas linhas universais;What's new <1>: New Improved and Removed Modules.
                                                             (line  138)
* novas linhas universais;What's new <2>: PEP 324 New subprocess Module.
                                                             (line   36)
* novas linhas universais;What's new <3>: PEP 277 Unicode file name support for Windows NT.
                                                             (line   36)
* NOVEMBER (no módulo calendar):         calendar — Funções gerais relacionadas ao calendário.
                                                             (line  507)
* now() (método de classe datetime.datetime): Objetos datetime.
                                                             (line   61)
* npgettext() (método gettext.GNUTranslations): A classe GNUTranslations.
                                                             (line   82)
* npgettext() (método gettext.NullTranslations): A classe NullTranslations.
                                                             (line   58)
* npgettext() (no módulo gettext):       API do GNU gettext. (line   67)
* NSIG (no módulo signal):               Conteúdo do módulo<5>.
                                                             (line  239)
* nsmallest() (no módulo heapq):         heapq — Algoritmo de fila heap.
                                                             (line  121)
* NTEventLogHandler (classe em logging.handlers): NTEventLogHandler.
                                                             (line   11)
* ntohl() (no módulo socket):            Outras funções<2>.  (line  225)
* ntohs() (no módulo socket):            Outras funções<2>.  (line  232)
* ntransfercmd() (método ftplib.FTP):    FTP objects.        (line  278)
* NUL (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   19)
* null;operação:                         A instrução pass.   (line    6)
* null;operação <1>:                     A instrução pass.   (line    6)
* nullcontext() (no módulo contextlib):  Utilitários.        (line  224)
* NullHandler (classe em logging):       NullHandler.        (line   13)
* NullTranslations (classe em gettext):  A classe NullTranslations.
                                                             (line   13)
* num_addresses (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line  132)
* num_addresses (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  334)
* num_tickets (atributo ssl.SSLContext): SSL Contexts.       (line  564)
* Number (classe em numbers):            numbers — Classes base abstratas numéricas.
                                                             (line   14)
* NUMBER (no módulo token):              token — Constantes usadas com árvores de análises do Python.
                                                             (line   52)
* number_class() (método decimal.Context): Objetos de contexto.
                                                             (line  451)
* number_class() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  453)
* numerator (atributo fractions.Fraction): fractions — Números racionais.
                                                             (line  116)
* numerator (atributo numbers.Rational): A torre numérica.   (line   51)
* numeric() (no módulo unicodedata):     unicodedata — Banco de dados de Unicode.
                                                             (line   71)
* numérico;conversões:                   Tipos numéricos — int float complex.
                                                             (line  112)
* numérico;literais:                     Tipos numéricos — int float complex.
                                                             (line   20)
* número:                                Literais numéricos. (line    6)
* número complexo:                       Glossário.          (line  301)
* número complexo;literais:              Tipos numéricos — int float complex.
                                                             (line   20)
* numinput() (no módulo turtle):         Métodos de entrada. (line   23)
* O_APPEND (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  429)
* O_ASYNC (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  473)
* O_BINARY (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  452)
* O_CLOEXEC (no módulo os):              Operações dos descritores de arquivos.
                                                             (line  439)
* O_CREAT (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  429)
* O_DIRECT (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  473)
* O_DIRECTORY (no módulo os):            Operações dos descritores de arquivos.
                                                             (line  473)
* O_DSYNC (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  439)
* O_EVTONLY (no módulo os):              Operações dos descritores de arquivos.
                                                             (line  462)
* O_EXCL (no módulo os):                 Operações dos descritores de arquivos.
                                                             (line  429)
* O_EXLOCK (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  473)
* O_FSYNC (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  462)
* O_NDELAY (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  439)
* O_NOATIME (no módulo os):              Operações dos descritores de arquivos.
                                                             (line  473)
* O_NOCTTY (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  439)
* O_NOFOLLOW (no módulo os):             Operações dos descritores de arquivos.
                                                             (line  473)
* O_NOFOLLOW_ANY (no módulo os):         Operações dos descritores de arquivos.
                                                             (line  462)
* O_NOINHERIT (no módulo os):            Operações dos descritores de arquivos.
                                                             (line  452)
* O_NONBLOCK (no módulo os):             Operações dos descritores de arquivos.
                                                             (line  439)
* O_PATH (no módulo os):                 Operações dos descritores de arquivos.
                                                             (line  473)
* O_RANDOM (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  452)
* O_RDONLY (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  429)
* O_RDWR (no módulo os):                 Operações dos descritores de arquivos.
                                                             (line  429)
* O_RSYNC (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  439)
* O_SEQUENTIAL (no módulo os):           Operações dos descritores de arquivos.
                                                             (line  452)
* O_SHLOCK (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  473)
* O_SHORT_LIVED (no módulo os):          Operações dos descritores de arquivos.
                                                             (line  452)
* O_SYMLINK (no módulo os):              Operações dos descritores de arquivos.
                                                             (line  462)
* O_SYNC (no módulo os):                 Operações dos descritores de arquivos.
                                                             (line  439)
* O_TEMPORARY (no módulo os):            Operações dos descritores de arquivos.
                                                             (line  452)
* O_TEXT (no módulo os):                 Operações dos descritores de arquivos.
                                                             (line  452)
* O_TMPFILE (no módulo os):              Operações dos descritores de arquivos.
                                                             (line  473)
* O_TRUNC (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  429)
* O_WRONLY (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  429)
* obj (atributo AttributeError):         Exceções concretas. (line   26)
* obj (atributo memoryview):             Memory Views.       (line  380)
* object (atributo UnicodeError):        Exceções concretas. (line  462)
* object (classe interna):               Funções embutidas<3>.
                                                             (line 1275)
* object.__match_args__ (variável interna): Customizando argumentos posicionais na classe correspondência de padrão.
                                                             (line   12)
* object.__slots__ (variável interna):   __slots__<2>.       (line   15)
* objeto:                                Objetos valores e tipos.
                                                             (line    6)
* objeto <1>:                            Glossário.          (line 1264)
* objeto arquivo:                        Glossário.          (line  573)
* objeto arquivo ou similar:             Glossário.          (line  590)
* objeto arquivo;função embutida open(): Funções embutidas<3>.
                                                             (line 1312)
* objeto arquivo;io module:              Visão Geral<2>.     (line    6)
* objeto buffer;(veja o protocolo de buffer): Protocolo Iterador.
                                                             (line   78)
* objeto bytes ou similar:               Glossário.          (line  205)
* objeto caminho ou similar:             Glossário.          (line 1384)
* objeto classe;chamada:                 Classes personalizadas.
                                                             (line   21)
* objeto classe;chamada <1>:             Classes personalizadas.
                                                             (line   33)
* objeto classe;chamada <2>:             Chamadas.           (line  155)
* objeto código:                         Objetos código.     (line    6)
* objeto código <1>:                     Métodos.            (line   44)
* objeto código <2>:                     marshal — Serialização interna de objetos Python.
                                                             (line   36)
* objeto código <3>:                     Objeto célula.      (line   59)
* objeto imutável:                       Objetos valores e tipos.
                                                             (line   10)
* objeto inalcançável:                   Objetos valores e tipos.
                                                             (line   37)
* objeto mutável:                        Objetos valores e tipos.
                                                             (line   10)
* objeto;arquivo:                        Leitura e escrita de arquivos.
                                                             (line    6)
* objeto;arquivo <1>:                    Objetos arquivos.   (line    6)
* objeto;Booleano:                       numbers Integral.   (line   27)
* objeto;Booleano <1>:                   Tipos numéricos — int float complex.
                                                             (line    6)
* objeto;bytearray:                      Tipos sequências mutáveis.
                                                             (line    6)
* objeto;bytearray <1>:                  Tipos de sequência binária — bytes bytearray memoryview.
                                                             (line    6)
* objeto;bytearray <2>:                  Objetos Bytearray.  (line    6)
* objeto;bytearray <3>:                  Objetos byte array. (line    6)
* objeto;bytes:                          Tipos de sequência binária — bytes bytearray memoryview.
                                                             (line    6)
* objeto;bytes <1>:                      Objetos bytes.      (line    6)
* objeto;bytes <2>:                      Objetos bytes<2>.   (line    9)
* objeto;Cápsula:                        Capsules<2>.        (line    6)
* objeto;chamável:                       Tipos chamáveis.    (line    6)
* objeto;chamável <1>:                   Fatiamentos.        (line   40)
* objeto;classe:                         Classes personalizadas.
                                                             (line   21)
* objeto;classe <1>:                     Chamadas.           (line  155)
* objeto;classe <2>:                     Definições de classe.
                                                             (line    6)
* objeto;código:                         Objetos código.     (line    6)
* objeto;código <1>:                     Métodos.            (line   45)
* objeto;código <2>:                     marshal — Serialização interna de objetos Python.
                                                             (line   36)
* objeto;código <3>:                     Objeto célula.      (line   60)
* objeto;complexo:                       numbers Complex complex.
                                                             (line    6)
* objeto;deallocation:                   Finalization and De-allocation.
                                                             (line    6)
* objeto;dicionário:                     Dicionários<2>.     (line    6)
* objeto;dicionário <1>:                 Classes personalizadas.
                                                             (line   21)
* objeto;dicionário <2>:                 Personalização básica.
                                                             (line  256)
* objeto;dicionário <3>:                 Sintaxes de criação de dicionário.
                                                             (line    6)
* objeto;dicionário <4>:                 Subscrições.        (line    6)
* objeto;dicionário <5>:                 Instruções de atribuição.
                                                             (line  118)
* objeto;dicionário <6>:                 Tipo mapeamento — dict.
                                                             (line    6)
* objeto;dicionário <7>:                 Objetos dicionários.
                                                             (line    6)
* objeto;Ellipsis:                       Ellipsis.           (line    6)
* objeto;fatia:                          Emulando tipos contêineres.
                                                             (line   71)
* objeto;finalization:                   Finalization and De-allocation.
                                                             (line    6)
* objeto;frozenset:                      Tipos de conjuntos. (line   30)
* objeto;frozenset <1>:                  Objeto Set.         (line    6)
* objeto;função:                         Funções definidas pelo usuário.
                                                             (line    6)
* objeto;função <1>:                     Funções embutidas<2>.
                                                             (line    6)
* objeto;função <2>:                     Chamadas.           (line  138)
* objeto;função <3>:                     Chamadas.           (line  149)
* objeto;função <4>:                     Definições de função.
                                                             (line    6)
* objeto;função <5>:                     Objetos Function<3>.
                                                             (line    6)
* objeto;função definida por usuário:    Funções definidas pelo usuário.
                                                             (line    6)
* objeto;função definida por usuário <1>: Chamadas.          (line  138)
* objeto;função definida por usuário <2>: Definições de função.
                                                             (line    6)
* objeto;função embutida:                Funções embutidas<2>.
                                                             (line    6)
* objeto;função embutida <1>:            Chamadas.           (line  149)
* objeto;GenericAlias:                   Tipo Generic Alias. (line    6)
* objeto;gerador:                        Atributos especiais de somente leitura<2>.
                                                             (line   90)
* objeto;gerador <1>:                    Expressões geradoras<2>.
                                                             (line    6)
* objeto;gerador <2>:                    Expressões yield.   (line  112)
* objeto;gerador assíncrono:             Funções geradoras assíncronas<2>.
                                                             (line   69)
* objeto;imutável:                       Sequências imutáveis.
                                                             (line    6)
* objeto;instancemethod:                 Objetos de Método de Instância.
                                                             (line    6)
* objeto;instância:                      Classes personalizadas.
                                                             (line   21)
* objeto;instância <1>:                  Instâncias de classe<2>.
                                                             (line    6)
* objeto;instância <2>:                  Chamadas.           (line  159)
* objeto;instância de classe:            Classes personalizadas.
                                                             (line   21)
* objeto;instância de classe <1>:        Instâncias de classe<2>.
                                                             (line    6)
* objeto;instância de classe <2>:        Chamadas.           (line  159)
* objeto;inteiro:                        numbers Integral.   (line    6)
* objeto;inteiro <1>:                    Tipos numéricos — int float complex.
                                                             (line    6)
* objeto;inteiro <2>:                    Objetos Inteiros.   (line    6)
* objeto;io.StringIO:                    Tipo sequência de texto — str.
                                                             (line   36)
* objeto;lista:                          Sequências mutáveis.
                                                             (line   18)
* objeto;lista <1>:                      Sintaxes de criação de lista.
                                                             (line    6)
* objeto;lista <2>:                      Referências de atributo.
                                                             (line   10)
* objeto;lista <3>:                      Subscrições.        (line    6)
* objeto;lista <4>:                      Fatiamentos.        (line    6)
* objeto;lista <5>:                      Instruções de atribuição.
                                                             (line  108)
* objeto;lista <6>:                      Tipos sequências mutáveis.
                                                             (line    6)
* objeto;lista <7>:                      Listas<2>.          (line    6)
* objeto;lista <8>:                      Objeto List.        (line    6)
* objeto;long integer:                   Objetos Inteiros.   (line    6)
* objeto;mapeamento:                     Mapeamentos.        (line    6)
* objeto;mapeamento <1>:                 Instâncias de classe<2>.
                                                             (line   27)
* objeto;mapeamento <2>:                 Subscrições.        (line    6)
* objeto;mapeamento <3>:                 Instruções de atribuição.
                                                             (line  118)
* objeto;mapeamento <4>:                 Tipo mapeamento — dict.
                                                             (line    6)
* objeto;mapeamento <5>:                 Coleções.           (line    6)
* objeto;memoryview:                     Tipos de sequência binária — bytes bytearray memoryview.
                                                             (line    6)
* objeto;memoryview <1>:                 Objeto Ellipsis.    (line   18)
* objeto;método:                         Objetos instância.  (line   27)
* objeto;método <1>:                     Métodos de instância.
                                                             (line    6)
* objeto;método <2>:                     Métodos embutidos.  (line    6)
* objeto;método <3>:                     Chamadas.           (line  149)
* objeto;método <4>:                     Métodos.            (line    6)
* objeto;método <5>:                     Objetos método<2>.  (line    6)
* objeto;método definido por usuário:    Métodos de instância.
                                                             (line    6)
* objeto;método embutido:                Métodos embutidos.  (line    6)
* objeto;método embutido <1>:            Chamadas.           (line  149)
* objeto;módulo:                         Módulos<3>.         (line    6)
* objeto;módulo <1>:                     Referências de atributo.
                                                             (line   10)
* objeto;módulo <2>:                     Objetos do Módulo.  (line    6)
* objeto;mutável:                        Sequências mutáveis.
                                                             (line    6)
* objeto;mutável <1>:                    Instruções de atribuição.
                                                             (line    6)
* objeto;mutável <2>:                    Instruções de atribuição.
                                                             (line  103)
* objeto;None:                           None.               (line    6)
* objeto;None <1>:                       Instruções de expressão.
                                                             (line   18)
* objeto;None <2>:                       O Objeto None.      (line    6)
* objeto;NotImplemented:                 NotImplemented.     (line    6)
* objeto;numérico:                       numbers Number.     (line    6)
* objeto;numérico <1>:                   Instâncias de classe<2>.
                                                             (line   27)
* objeto;numérico <2>:                   Comparações<2>.     (line   43)
* objeto;numérico <3>:                   Tipos numéricos — int float complex.
                                                             (line    6)
* objeto;numérico <4>:                   Objetos Numéricos.  (line    6)
* objeto;número complexo:                Tipos numéricos — int float complex.
                                                             (line    6)
* objeto;número complexo <1>:            Objetos números complexos.
                                                             (line    6)
* objeto;PickleBuffer:                   Objetos MemoryView. (line   85)
* objeto;ponto flutuante:                numbers Real float. (line    6)
* objeto;ponto flutuante <1>:            Tipos numéricos — int float complex.
                                                             (line    6)
* objeto;ponto flutuante <2>:            Objetos de ponto flutuante.
                                                             (line    6)
* objeto;quadro:                         Objetos quadro.     (line    6)
* objeto;range:                          Intervalos.         (line    6)
* objeto;sequência:                      Sequências.         (line    6)
* objeto;sequência <1>:                  Instâncias de classe<2>.
                                                             (line   27)
* objeto;sequência <2>:                  Subscrições.        (line    6)
* objeto;sequência <3>:                  Fatiamentos.        (line    6)
* objeto;sequência <4>:                  Operações de teste de pertinência.
                                                             (line   38)
* objeto;sequência <5>:                  Instruções de atribuição.
                                                             (line  108)
* objeto;sequência <6>:                  A instrução for.    (line    6)
* objeto;sequência <7>:                  Operações comuns de sequências.
                                                             (line    6)
* objeto;sequência <8>:                  Objetos Sequência.  (line    6)
* objeto;sequência imutável:             Sequências imutáveis.
                                                             (line    6)
* objeto;sequência mutável:              Sequências mutáveis.
                                                             (line    6)
* objeto;set:                            Tipos de conjuntos. (line   24)
* objeto;set <1>:                        Sintaxes de criação de conjunto.
                                                             (line    6)
* objeto;set <2>:                        Tipo conjuntos — set frozenset.
                                                             (line    6)
* objeto;set <3>:                        Objeto Set.         (line    6)
* objeto;socket:                         socket — Interface de rede de baixo nível.
                                                             (line   22)
* objeto;string:                         Subscrições.        (line    6)
* objeto;string <1>:                     Fatiamentos.        (line    6)
* objeto;string <2>:                     Intervalos.         (line  127)
* objeto;tipo:                           Funções embutidas<3>.
                                                             (line 2087)
* objeto;tipo <1>:                       Objetos tipos e contagens de referências.
                                                             (line    6)
* objeto;tipo <2>:                       Objetos tipo<2>.    (line    6)
* objeto;tipo conjunto:                  Tipos de conjuntos. (line    6)
* objeto;traceback:                      Objetos traceback.  (line    6)
* objeto;traceback <1>:                  A instrução raise.  (line   21)
* objeto;traceback <2>:                  Cláusula except.    (line   60)
* objeto;traceback <3>:                  sys — Parâmetros e funções específicas do sistema.
                                                             (line  478)
* objeto;traceback <4>:                  traceback — Imprime ou recupera um traceback da pilha.
                                                             (line   19)
* objeto;tupla:                          Sequências imutáveis.
                                                             (line   32)
* objeto;tupla <1>:                      Subscrições.        (line    6)
* objeto;tupla <2>:                      Fatiamentos.        (line    6)
* objeto;tupla <3>:                      Listas de expressões.
                                                             (line   13)
* objeto;tupla <4>:                      Tipos sequência imutáveis.
                                                             (line    6)
* objeto;tupla <5>:                      Tuplas.             (line    6)
* objeto;tupla <6>:                      Objeto tupla.       (line    6)
* objeto;União:                          Tipo União.         (line    6)
* objetos;comparando:                    Comparações<2>.     (line   43)
* objobjargproc (C type):                Slot Type typedefs. (line  136)
* objobjproc (C type):                   Slot Type typedefs. (line  132)
* octal;literais:                        Tipos numéricos — int float complex.
                                                             (line   20)
* octdigits (no módulo string):          Constantes de strings.
                                                             (line   32)
* OCTOBER (no módulo calendar):          calendar — Funções gerais relacionadas ao calendário.
                                                             (line  507)
* offset (atributo SyntaxError):         Exceções concretas. (line  334)
* offset (atributo tarfile.TarInfo):     Objetos TarInfo.    (line  149)
* offset (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line  110)
* offset (atributo xml.parsers.expat.ExpatError): Exceções ExpatError.
                                                             (line   32)
* offset_data (atributo tarfile.TarInfo): Objetos TarInfo.   (line  153)
* OK (no módulo curses):                 Constantes<6>.      (line   13)
* OK (no módulo tkinter.messagebox):     tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  155)
* ok_command() (método tkinter.filedialog.LoadFileDialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line  144)
* ok_command() (método tkinter.filedialog.SaveFileDialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line  154)
* ok_event() (método tkinter.filedialog.FileDialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line  122)
* OKCANCEL (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  173)
* old_value (atributo contextvars.Token): Variáveis de contexto.
                                                             (line   92)
* OleDLL (classe em ctypes):             Loading shared libraries.
                                                             (line   35)
* on_motion() (método tkinter.dnd.DndHandler): tkinter dnd — Suporte para arrastar e soltar.
                                                             (line   59)
* on_release() (método tkinter.dnd.DndHandler): tkinter dnd — Suporte para arrastar e soltar.
                                                             (line   64)
* onclick() (no módulo turtle):          Usando os eventos de tela.
                                                             (line   57)
* ondrag() (no módulo turtle):           Eventos Utilizados. (line   58)
* onecmd() (método cmd.Cmd):             Objetos Cmd.        (line   61)
* onkey() (no módulo turtle):            Usando os eventos de tela.
                                                             (line   12)
* onkeypress() (no módulo turtle):       Usando os eventos de tela.
                                                             (line   35)
* onkeyrelease() (no módulo turtle):     Usando os eventos de tela.
                                                             (line   12)
* onrelease() (no módulo turtle):        Eventos Utilizados. (line   30)
* onscreenclick() (no módulo turtle):    Usando os eventos de tela.
                                                             (line   57)
* ontimer() (no módulo turtle):          Usando os eventos de tela.
                                                             (line   86)
* OP (no módulo token):                  token — Constantes usadas com árvores de análises do Python.
                                                             (line   64)
* OP_ALL (no módulo ssl):                Constantes<9>.      (line  212)
* OP_CIPHER_SERVER_PREFERENCE (no módulo ssl): Constantes<9>.
                                                             (line  301)
* OP_ENABLE_KTLS (no módulo ssl):        Constantes<9>.      (line  359)
* OP_ENABLE_MIDDLEBOX_COMPAT (no módulo ssl): Constantes<9>. (line  325)
* OP_IGNORE_UNEXPECTED_EOF (no módulo ssl): Constantes<9>.   (line  351)
* OP_LEGACY_SERVER_CONNECT (no módulo ssl): Constantes<9>.   (line  376)
* OP_NO_COMPRESSION (no módulo ssl):     Constantes<9>.      (line  334)
* OP_NO_RENEGOTIATION (no módulo ssl):   Constantes<9>.      (line  291)
* OP_NO_SSLv2 (no módulo ssl):           Constantes<9>.      (line  220)
* OP_NO_SSLv3 (no módulo ssl):           Constantes<9>.      (line  230)
* OP_NO_TICKET (no módulo ssl):          Constantes<9>.      (line  345)
* OP_NO_TLSv1 (no módulo ssl):           Constantes<9>.      (line  240)
* OP_NO_TLSv1_1 (no módulo ssl):         Constantes<9>.      (line  252)
* OP_NO_TLSv1_2 (no módulo ssl):         Constantes<9>.      (line  264)
* OP_NO_TLSv1_3 (no módulo ssl):         Constantes<9>.      (line  276)
* OP_SINGLE_DH_USE (no módulo ssl):      Constantes<9>.      (line  309)
* OP_SINGLE_ECDH_USE (no módulo ssl):    Constantes<9>.      (line  317)
* opção de linha de comando; -?:         Opções genéricas.   (line    6)
* opção de linha de comando; -b:         Opções diversas.    (line    6)
* opção de linha de comando; -B:         Opções diversas.    (line   16)
* opção de linha de comando; -build:     Opções de compilação cruzada.
                                                             (line   12)
* opção de linha de comando; -c:         Opções de interface.
                                                             (line   39)
* opção de linha de comando; -check-hash-based-pycs: Opções diversas.
                                                             (line   22)
* opção de linha de comando; -d:         Opções diversas.    (line   37)
* opção de linha de comando; -disable-gil: Opções gerais.    (line  229)
* opção de linha de comando; -disable-ipv6: Opções gerais.   (line   16)
* opção de linha de comando; -disable-test-modules: Opções de instalação.
                                                             (line   25)
* opção de linha de comando; -E:         Opções diversas.    (line   45)
* opção de linha de comando; -enable-big-digits: Opções gerais.
                                                             (line   21)
* opção de linha de comando; -enable-bolt: Opções de desempenho.
                                                             (line   66)
* opção de linha de comando; -enable-experimental-jit: Opções gerais.
                                                             (line  242)
* opção de linha de comando; -enable-framework: Opções do macOS.
                                                             (line   16)
* opção de linha de comando; -enable-framework <1>: Opções do macOS.
                                                             (line   18)
* opção de linha de comando; -enable-framework <2>: Opções do iOS.
                                                             (line    8)
* opção de linha de comando; -enable-loadable-sqlite-extensions: Opções gerais.
                                                             (line    6)
* opção de linha de comando; -enable-optimizations: Opções de desempenho.
                                                             (line   10)
* opção de linha de comando; -enable-profiling: Opções de desempenho.
                                                             (line  134)
* opção de linha de comando; -enable-pystats: Opções gerais. (line  134)
* opção de linha de comando; -enable-shared: Opções da ligação<2>.
                                                             (line    6)
* opção de linha de comando; -enable-universalsdk: Opções do macOS.
                                                             (line    8)
* opção de linha de comando; -enable-universalsdk <1>: Opções do macOS.
                                                             (line   10)
* opção de linha de comando; -enable-wasm-dynamic-linking: Opções de WebAssembly.
                                                             (line   16)
* opção de linha de comando; -enable-wasm-pthreads: Opções de WebAssembly.
                                                             (line   26)
* opção de linha de comando; -exec-prefix: Opções de instalação.
                                                             (line   17)
* opção de linha de comando; -h:         Opções genéricas.   (line    6)
* opção de linha de comando; -help:      Opções genéricas.   (line    6)
* opção de linha de comando; -help-all:  Opções genéricas.   (line   27)
* opção de linha de comando; -help-env:  Opções genéricas.   (line   13)
* opção de linha de comando; -help-xoptions: Opções genéricas.
                                                             (line   20)
* opção de linha de comando; -host:      Opções de compilação cruzada.
                                                             (line   17)
* opção de linha de comando; -i:         Opções diversas.    (line   52)
* opção de linha de comando; -I:         Opções diversas.    (line   73)
* opção de linha de comando; -J:         Opções que você não deve usar.
                                                             (line    6)
* opção de linha de comando; -m:         Opções de interface.
                                                             (line   53)
* opção de linha de comando; -O:         Opções diversas.    (line   86)
* opção de linha de comando; -OO:        Opções diversas.    (line   97)
* opção de linha de comando; -P:         Opções diversas.    (line  107)
* opção de linha de comando; -prefix:    Opções de instalação.
                                                             (line    6)
* opção de linha de comando; -q:         Opções diversas.    (line  128)
* opção de linha de comando; -R:         Opções diversas.    (line  135)
* opção de linha de comando; -s:         Opções diversas.    (line  162)
* opção de linha de comando; -S:         Opções diversas.    (line  174)
* opção de linha de comando; -u:         Opções diversas.    (line  182)
* opção de linha de comando; -V:         Opções genéricas.   (line   33)
* opção de linha de comando; -v:         Opções diversas.    (line  192)
* opção de linha de comando; -version:   Opções genéricas.   (line   33)
* opção de linha de comando; -W:         Opções diversas.    (line  206)
* opção de linha de comando; -with-address-sanitizer: Opções de depuração.
                                                             (line   61)
* opção de linha de comando; -with-app-store-compliance: Opções do macOS.
                                                             (line   59)
* opção de linha de comando; -with-app-store-compliance <1>: Opções do macOS.
                                                             (line   61)
* opção de linha de comando; -with-assertions: Opções de depuração.
                                                             (line   36)
* opção de linha de comando; -with-build-python: Opções de compilação cruzada.
                                                             (line   22)
* opção de linha de comando; -with-builtin-hashlib-hashes: Opções de segurança.
                                                             (line   21)
* opção de linha de comando; -with-computed-gotos: Opções de desempenho.
                                                             (line  105)
* opção de linha de comando; -with-dbmliborder: Opções gerais.
                                                             (line   68)
* opção de linha de comando; -with-dtrace: Opções de depuração.
                                                             (line   53)
* opção de linha de comando; -with-emscripten-target: Opções de WebAssembly.
                                                             (line    6)
* opção de linha de comando; -with-ensurepip: Opções de instalação.
                                                             (line   33)
* opção de linha de comando; -with-framework-name: Opções do macOS.
                                                             (line   54)
* opção de linha de comando; -with-framework-name <1>: Opções do iOS.
                                                             (line   13)
* opção de linha de comando; -with-hash-algorithm: Opções de segurança.
                                                             (line    6)
* opção de linha de comando; -with-libc: Opções da biblioteca.
                                                             (line   58)
* opção de linha de comando; -with-libm: Opções da biblioteca.
                                                             (line   53)
* opção de linha de comando; -with-libs: Opções da biblioteca.
                                                             (line    6)
* opção de linha de comando; -with-lto:  Opções de desempenho.
                                                             (line   49)
* opção de linha de comando; -with-memory-sanitizer: Opções de depuração.
                                                             (line   71)
* opção de linha de comando; -with-openssl: Opções da biblioteca.
                                                             (line   63)
* opção de linha de comando; -with-openssl-rpath: Opções da biblioteca.
                                                             (line   69)
* opção de linha de comando; -with-pkg-config: Opções gerais.
                                                             (line  121)
* opção de linha de comando; -with-platlibdir: Opções gerais.
                                                             (line   98)
* opção de linha de comando; -with-pydebug: Opções de depuração.
                                                             (line    6)
* opção de linha de comando; -with-readline: Opções da biblioteca.
                                                             (line   35)
* opção de linha de comando; -with-ssl-default-suites: Opções de segurança.
                                                             (line   40)
* opção de linha de comando; -with-strict-overflow: Opções de desempenho.
                                                             (line  139)
* opção de linha de comando; -with-suffix: Opções gerais.    (line   32)
* opção de linha de comando; -with-system-expat: Opções da biblioteca.
                                                             (line   10)
* opção de linha de comando; -with-system-libmpdec: Opções da biblioteca.
                                                             (line   15)
* opção de linha de comando; -with-thread-sanitizer: Opções de depuração.
                                                             (line   85)
* opção de linha de comando; -with-trace-refs: Opções de depuração.
                                                             (line   11)
* opção de linha de comando; -with-tzpath: Opções gerais.    (line   44)
* opção de linha de comando; -with-undefined-behavior-sanitizer: Opções de depuração.
                                                             (line   78)
* opção de linha de comando; -with-universal-archs: Opções do macOS.
                                                             (line   24)
* opção de linha de comando; -with-valgrind: Opções de depuração.
                                                             (line   49)
* opção de linha de comando; -with-wheel-pkg-dir: Opções gerais.
                                                             (line  108)
* opção de linha de comando; -without-c-locale-coercion: Opções gerais.
                                                             (line   82)
* opção de linha de comando; -without-decimal-contextvar: Opções gerais.
                                                             (line   57)
* opção de linha de comando; -without-doc-strings: Opções de desempenho.
                                                             (line  124)
* opção de linha de comando; -without-freelists: Opções gerais.
                                                             (line   91)
* opção de linha de comando; -without-mimalloc: Opções de desempenho.
                                                             (line  110)
* opção de linha de comando; -without-pymalloc: Opções de desempenho.
                                                             (line  117)
* opção de linha de comando; -without-readline: Opções da biblioteca.
                                                             (line   45)
* opção de linha de comando; -without-static-libpython: Opções da ligação<2>.
                                                             (line   11)
* opção de linha de comando; -x:         Opções diversas.    (line  270)
* opção de linha de comando; -X:         Opções diversas.    (line  276)
* opção de linha de comando; BOLT_APPLY_FLAGS: Opções de desempenho.
                                                             (line   92)
* opção de linha de comando; BOLT_INSTRUMENT_FLAGS: Opções de desempenho.
                                                             (line   99)
* opção de linha de comando; BZIP2_CFLAGS: Opções para dependências de terceiros.
                                                             (line    8)
* opção de linha de comando; BZIP2_LIBS: Opções para dependências de terceiros.
                                                             (line   10)
* opção de linha de comando; CC:         Opções do compilador C.
                                                             (line    6)
* opção de linha de comando; CFLAGS:     Opções do compilador C.
                                                             (line   10)
* opção de linha de comando; CONFIG_SITE: Opções de compilação cruzada.
                                                             (line   28)
* opção de linha de comando; CPP:        Opções do compilador C.
                                                             (line   14)
* opção de linha de comando; CPPFLAGS:   Opções do compilador C.
                                                             (line   18)
* opção de linha de comando; CURSES_CFLAGS: Opções para dependências de terceiros.
                                                             (line   16)
* opção de linha de comando; CURSES_LIBS: Opções para dependências de terceiros.
                                                             (line   18)
* opção de linha de comando; GDBM_CFLAGS: Opções para dependências de terceiros.
                                                             (line   24)
* opção de linha de comando; GDBM_LIBS:  Opções para dependências de terceiros.
                                                             (line   26)
* opção de linha de comando; HOSTRUNNER: Opções de compilação cruzada.
                                                             (line   40)
* opção de linha de comando; LDFLAGS:    Opções da ligação.  (line    6)
* opção de linha de comando; LIBB2_CFLAGS: Opções para dependências de terceiros.
                                                             (line   30)
* opção de linha de comando; LIBB2_LIBS: Opções para dependências de terceiros.
                                                             (line   32)
* opção de linha de comando; LIBEDIT_CFLAGS: Opções para dependências de terceiros.
                                                             (line   38)
* opção de linha de comando; LIBEDIT_LIBS: Opções para dependências de terceiros.
                                                             (line   40)
* opção de linha de comando; LIBFFI_CFLAGS: Opções para dependências de terceiros.
                                                             (line   45)
* opção de linha de comando; LIBFFI_LIBS: Opções para dependências de terceiros.
                                                             (line   47)
* opção de linha de comando; LIBLZMA_CFLAGS: Opções para dependências de terceiros.
                                                             (line   62)
* opção de linha de comando; LIBLZMA_LIBS: Opções para dependências de terceiros.
                                                             (line   64)
* opção de linha de comando; LIBMPDEC_CFLAGS: Opções para dependências de terceiros.
                                                             (line   52)
* opção de linha de comando; LIBMPDEC_LIBS: Opções para dependências de terceiros.
                                                             (line   54)
* opção de linha de comando; LIBREADLINE_CFLAGS: Opções para dependências de terceiros.
                                                             (line   69)
* opção de linha de comando; LIBREADLINE_LIBS: Opções para dependências de terceiros.
                                                             (line   71)
* opção de linha de comando; LIBS:       Opções da ligação.  (line   10)
* opção de linha de comando; LIBSQLITE3_CFLAGS: Opções para dependências de terceiros.
                                                             (line   76)
* opção de linha de comando; LIBSQLITE3_LIBS: Opções para dependências de terceiros.
                                                             (line   78)
* opção de linha de comando; LIBUUID_CFLAGS: Opções para dependências de terceiros.
                                                             (line   83)
* opção de linha de comando; LIBUUID_LIBS: Opções para dependências de terceiros.
                                                             (line   85)
* opção de linha de comando; MACHDEP:    Opções da ligação.  (line   14)
* opção de linha de comando; PANEL_CFLAGS: Opções para dependências de terceiros.
                                                             (line   90)
* opção de linha de comando; PANEL_LIBS: Opções para dependências de terceiros.
                                                             (line   92)
* opção de linha de comando; PKG_CONFIG: Opções gerais.      (line  265)
* opção de linha de comando; PKG_CONFIG_LIBDIR: Opções gerais.
                                                             (line  269)
* opção de linha de comando; PKG_CONFIG_PATH: Opções gerais. (line  271)
* opção de linha de comando; TCLTK_CFLAGS: Opções para dependências de terceiros.
                                                             (line  101)
* opção de linha de comando; TCLTK_LIBS: Opções para dependências de terceiros.
                                                             (line  103)
* opção de linha de comando; ZLIB_CFLAGS: Opções para dependências de terceiros.
                                                             (line  108)
* opção de linha de comando; ZLIB_LIBS:  Opções para dependências de terceiros.
                                                             (line  110)
* Opções de Tipos de Dados do Tk:        Opções de Tipos de Dados do Tk.
                                                             (line    6)
* Open (classe em tkinter.filedialog):   Caixas de diálogo nativos de carregar/salvar.
                                                             (line   61)
* open_binary() (no módulo importlib.resources): API funcional.
                                                             (line   37)
* open_code() (no módulo io):            Interface de alto nível do módulo.
                                                             (line   23)
* open_connection() (no módulo asyncio): Streams.            (line   42)
* open_flags (no módulo dbm.gnu):        dbm gnu — Gerenciador de banco de dados do GNU.
                                                             (line   29)
* open_new_tab() (método webbrowser.controller): Objetos controladores de navegador.
                                                             (line   27)
* open_new_tab() (no módulo webbrowser): Interface de linha de comando<6>.
                                                             (line   62)
* open_new() (método webbrowser.controller): Objetos controladores de navegador.
                                                             (line   21)
* open_new() (no módulo webbrowser):     Interface de linha de comando<6>.
                                                             (line   54)
* open_osfhandle() (no módulo msvcrt):   Operações com arquivos.
                                                             (line   46)
* open_resource() (método importlib.abc.ResourceReader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  485)
* open_resource() (método importlib.resources.abc.ResourceReader): importlib resources abc – Classes base abstratas para recursos.
                                                             (line   50)
* open_text() (no módulo importlib.resources): API funcional.
                                                             (line   53)
* open_unix_connection() (no módulo asyncio): Streams.       (line  119)
* open_unknown() (método urllib.request.URLopener): Legacy interface.
                                                             (line  108)
* open_urlresource() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  596)
* open() (método de classe tarfile.TarFile): Objetos TarFile.
                                                             (line  100)
* open() (método imaplib.IMAP4):         Objetos IMAP4.      (line  173)
* open() (método importlib.abc.Traversable): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  563)
* open() (método importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  148)
* open() (método pathlib.Path):          Lendo e escrevendo arquivos.
                                                             (line    6)
* open() (método urllib.request.OpenerDirector): OpenerDirector Objects.
                                                             (line   46)
* open() (método urllib.request.URLopener): Legacy interface.
                                                             (line   97)
* open() (método webbrowser.controller): Objetos controladores de navegador.
                                                             (line   14)
* open() (método zipfile.Path):          Objetos Path.       (line   36)
* open() (método zipfile.ZipFile):       Objetos ZipFile.    (line  133)
* open() (no módulo bz2):                Des compressão de arquivos.
                                                             (line    6)
* open() (no módulo codecs):             codecs — Codec registry and base classes.
                                                             (line  182)
* open() (no módulo dbm.dumb):           dbm dumb — Implementação portátil do DBM.
                                                             (line   29)
* open() (no módulo dbm.gnu):            dbm gnu — Gerenciador de banco de dados do GNU.
                                                             (line   34)
* open() (no módulo dbm.ndbm):           dbm ndbm — New Database Manager.
                                                             (line   39)
* open() (no módulo dbm.sqlite3):        dbm sqlite3 — Backend de SQLite para dbm.
                                                             (line   23)
* open() (no módulo dbm):                dbm — Interfaces para “banco de dados” Unix.
                                                             (line   51)
* open() (no módulo gzip):               gzip — Suporte para arquivos gzip.
                                                             (line   28)
* open() (no módulo io):                 Interface de alto nível do módulo.
                                                             (line   13)
* open() (no módulo lzma):               Lendo e escrevendo arquivos comprimidos.
                                                             (line    6)
* open() (no módulo os):                 Operações dos descritores de arquivos.
                                                             (line  382)
* open() (no módulo shelve):             shelve — Python object persistence.
                                                             (line   17)
* open() (no módulo tarfile):            tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line   43)
* open() (no módulo tokenize):           Tokenizando entradas.
                                                             (line  105)
* open() (no módulo wave):               wave — Read and write WAV files.
                                                             (line   21)
* open() (no módulo webbrowser):         Interface de linha de comando<6>.
                                                             (line   32)
* OpenerDirector (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  275)
* OpenKey() (no módulo winreg):          Funções<13>.        (line  291)
* OpenKeyEx() (no módulo winreg):        Funções<13>.        (line  291)
* openlog() (no módulo syslog):          syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line   53)
* openpty() (no módulo os):              Operações dos descritores de arquivos.
                                                             (line  490)
* openpty() (no módulo pty):             pty — Utilitários de pseudoterminal.
                                                             (line   36)
* OPENSSL_VERSION (no módulo ssl):       Constantes<9>.      (line  480)
* OPENSSL_VERSION_INFO (no módulo ssl):  Constantes<9>.      (line  490)
* OPENSSL_VERSION_NUMBER (no módulo ssl): Constantes<9>.     (line  500)
* OpenSSL;(use in module hashlib):       Algoritmos de hash. (line   19)
* OpenSSL;(use in module ssl):           ssl — Invólucro de TLS/SSL para objetos socket.
                                                             (line    8)
* operação atômica:                      Glossário.          (line  143)
* operação com índice:                   Sequências.         (line    6)
* operações em;dicionário;tipo:          Tipo mapeamento — dict.
                                                             (line    6)
* operações em;inteiro;types:            Operações de bits em tipos inteiros.
                                                             (line    6)
* operações em;lista;tipo:               Tipos sequências mutáveis.
                                                             (line   17)
* operações em;mapeamento;types:         Tipo mapeamento — dict.
                                                             (line    6)
* operações em;numérico;types:           Tipos numéricos — int float complex.
                                                             (line   99)
* operações em;sequência;types:          Operações comuns de sequências.
                                                             (line   20)
* operações em;sequência;types <1>:      Tipos sequências mutáveis.
                                                             (line   17)
* operador morsa:                        Operações booleanas.
                                                             (line   39)
* operador morsa <1>:                    Glossário.          (line 1849)
* operador;- (menos):                    Operações aritméticas unárias e bit a bit.
                                                             (line   11)
* operador;- (menos) <1>:                Operações binárias aritméticas.
                                                             (line   85)
* operador;- (menos) <2>:                Tipos numéricos — int float complex.
                                                             (line   30)
* operador;!=:                           Comparações.        (line    6)
* operador;!= <1>:                       Comparações<2>.     (line    6)
* operador;@ (arroba):                   Operações binárias aritméticas.
                                                             (line   27)
* operador;* (asterisco):                Operações binárias aritméticas.
                                                             (line   17)
* operador;* (asterisco) <1>:            Tipos numéricos — int float complex.
                                                             (line   30)
* operador;**:                           O operador de potência.
                                                             (line    6)
* operador;** <1>:                       Tipos numéricos — int float complex.
                                                             (line   30)
* operador;/ (barra):                    Operações binárias aritméticas.
                                                             (line   35)
* operador;/ (barra) <1>:                Tipos numéricos — int float complex.
                                                             (line   30)
* operador;//:                           Operações binárias aritméticas.
                                                             (line   35)
* operador;// <1>:                       Tipos numéricos — int float complex.
                                                             (line   30)
* operador;& (e comercial):              Operações binárias bit a bit.
                                                             (line   13)
* operador;& (e comercial) <1>:          Operações de bits em tipos inteiros.
                                                             (line    6)
* operador;% (porcentagem):              Operações binárias aritméticas.
                                                             (line   48)
* operador;% (porcentagem) <1>:          Tipos numéricos — int float complex.
                                                             (line   30)
* operador;^ (circunflexo):              Operações binárias bit a bit.
                                                             (line   17)
* operador;^ (circunflexo) <1>:          Operações de bits em tipos inteiros.
                                                             (line    6)
* operador;+ (mais):                     Operações aritméticas unárias e bit a bit.
                                                             (line   15)
* operador;+ (mais) <1>:                 Operações binárias aritméticas.
                                                             (line   77)
* operador;+ (mais) <2>:                 Tipos numéricos — int float complex.
                                                             (line   30)
* operador;< (menor que):                Comparações.        (line    6)
* operador;< (menor que) <1>:            Comparações<2>.     (line    6)
* operador;<<:                           Operações de deslocamento.
                                                             (line    6)
* operador;<< <1>:                       Operações de bits em tipos inteiros.
                                                             (line    6)
* operador;<=:                           Comparações.        (line    6)
* operador;<= <1>:                       Comparações<2>.     (line    6)
* operador;==:                           Comparações.        (line    6)
* operador;== <1>:                       Comparações<2>.     (line    6)
* operador;> (maior):                    Comparações.        (line    6)
* operador;> (maior) <1>:                Comparações<2>.     (line    6)
* operador;>=:                           Comparações.        (line    6)
* operador;>= <1>:                       Comparações<2>.     (line    6)
* operador;>>:                           Operações de deslocamento.
                                                             (line    6)
* operador;>> <1>:                       Operações de bits em tipos inteiros.
                                                             (line    6)
* operador;| (barra vertical):           Operações binárias bit a bit.
                                                             (line   22)
* operador;| (barra vertical) <1>:       Operações de bits em tipos inteiros.
                                                             (line    6)
* operador;~ (til):                      Operações aritméticas unárias e bit a bit.
                                                             (line   19)
* operador;~ (til) <1>:                  Operações de bits em tipos inteiros.
                                                             (line    6)
* operador;and:                          Operações booleanas.
                                                             (line   22)
* operador;and <1>:                      Teste do valor verdade.
                                                             (line   24)
* operador;and <2>:                      Operações booleanas — and or not.
                                                             (line   24)
* operador;comparação:                   Comparações<2>.     (line    6)
* operador;in:                           Operações de teste de pertinência.
                                                             (line   38)
* operador;in <1>:                       Comparações<2>.     (line   64)
* operador;in <2>:                       Operações comuns de sequências.
                                                             (line   20)
* operador;is:                           Operações de teste de pertinência.
                                                             (line   41)
* operador;is <1>:                       Comparações<2>.     (line    6)
* operador;is not:                       Operações de teste de pertinência.
                                                             (line   41)
* operador;is not <1>:                   Comparações<2>.     (line    6)
* operador;not:                          Operações booleanas.
                                                             (line   19)
* operador;not <1>:                      Operações booleanas — and or not.
                                                             (line   24)
* operador;not in:                       Operações de teste de pertinência.
                                                             (line   38)
* operador;not in <1>:                   Comparações<2>.     (line   64)
* operador;not in <2>:                   Operações comuns de sequências.
                                                             (line   20)
* operador;or:                           Operações booleanas.
                                                             (line   26)
* operador;or <1>:                       Teste do valor verdade.
                                                             (line   24)
* operador;or <2>:                       Operações booleanas — and or not.
                                                             (line   24)
* operador;precedência:                  Precedência de operadores.
                                                             (line    6)
* operador;sobrecarga:                   Nomes de métodos especiais.
                                                             (line    6)
* operadores:                            Operadores.         (line    6)
* OperationalError:                      Exceções<7>.        (line   57)
* opmap (no módulo dis):                 Opcode collections. (line   17)
* opname (no módulo dis):                Opcode collections. (line   13)
* OPT:                                   Opções de depuração.
                                                             (line   42)
* optim_args_from_interpreter_flags() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  338)
* optimize (atributo sys.flags):         sys — Parâmetros e funções específicas do sistema.
                                                             (line  565)
* optimize() (no módulo pickletools):    Interface programática<2>.
                                                             (line   33)
* OPTIMIZED_BYTECODE_SUFFIXES (no módulo importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line   30)
* Option (classe em optparse):           Atributos da classe Option.
                                                             (line    6)
* Optional (no módulo typing):           Formas especiais.   (line   54)
* OptionConflictError:                   Exceções<10>.       (line   11)
* OptionError:                           Exceções<10>.       (line    6)
* OptionGroup (classe em optparse):      Agrupando opções.   (line   12)
* OptionParser (classe em optparse):     Criando o analisador sintático.
                                                             (line    9)
* options (atributo doctest.Example):    Example Objects.    (line   53)
* options (atributo ssl.SSLContext):     SSL Contexts.       (line  572)
* Options (classe em ssl):               Constantes<9>.      (line  341)
* options() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  145)
* OptionValueError:                      Exceções<10>.       (line   16)
* optionxform() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  336)
* Or (classe em ast):                    Expressões<2>.      (line   87)
* or_() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line  142)
* ordem de resolução de métodos:         Glossário.          (line 1130)
* ordered_attributes (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  195)
* OrderedDict (classe em collections):   Objetos OrderedDict.
                                                             (line   60)
* OrderedDict (classe em typing):        Apelidos para tipos em collections.
                                                             (line   17)
* orig_argv (no módulo sys):             sys — Parâmetros e funções específicas do sistema.
                                                             (line 1374)
* origin (atributo importlib.machinery.ModuleSpec): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  404)
* origin_req_host (atributo urllib.request.Request): Objeto Request.
                                                             (line   30)
* origin_server (atributo wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  295)
* os_environ (atributo wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  169)
* OSError:                               Exceções concretas. (line  153)
* OUT_TO_DEFAULT (no módulo msvcrt):     Outras funções<4>.  (line   20)
* OUT_TO_MSGBOX (no módulo msvcrt):      Outras funções<4>.  (line   30)
* OUT_TO_STDERR (no módulo msvcrt):      Outras funções<4>.  (line   25)
* output (atributo subprocess.CalledProcessError): Usando o módulo subprocess.
                                                             (line  230)
* output (atributo subprocess.TimeoutExpired): Usando o módulo subprocess.
                                                             (line  186)
* output (atributo unittest.TestCase):   Casos de teste.     (line  457)
* output_charset (atributo email.charset.Charset): email charset Representando conjuntos de caracteres.
                                                             (line   79)
* output_codec (atributo email.charset.Charset): email charset Representando conjuntos de caracteres.
                                                             (line   93)
* output_difference() (método doctest.OutputChecker): OutputChecker objects.
                                                             (line   27)
* output() (método http.cookies.BaseCookie): Objetos Cookie. (line   24)
* output() (método http.cookies.Morsel): Objetos Morsel.     (line   69)
* OutputChecker (classe em doctest):     OutputChecker objects.
                                                             (line    6)
* OutputString() (método http.cookies.Morsel): Objetos Morsel.
                                                             (line   84)
* OutsideDestinationError:               tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  256)
* Overflow (classe em decimal):          Sinais.             (line   70)
* OverflowError:                         Exceções concretas. (line  220)
* OverflowError (built-in exception):    Objetos Inteiros.   (line  155)
* OverflowError (built-in exception) <1>: Objetos Inteiros.  (line  210)
* OverflowError (built-in exception) <2>: Objetos Inteiros.  (line  251)
* OverflowError (built-in exception) <3>: Objetos Inteiros.  (line  263)
* OverflowError (built-in exception) <4>: Objetos Inteiros.  (line  275)
* OverflowError (built-in exception) <5>: Objetos Inteiros.  (line  288)
* overlap() (método statistics.NormalDist): Objetos NormalDist.
                                                             (line  109)
* overlaps() (método ipaddress.IPv4Network): Objetos de rede.
                                                             (line  159)
* overlaps() (método ipaddress.IPv6Network): Objetos de rede.
                                                             (line  348)
* overlay() (método curses.window):      Window Objects.     (line  432)
* overload() (no módulo typing):         Funções e decoradores.
                                                             (line  253)
* override() (no módulo typing):         Funções e decoradores.
                                                             (line  380)
* overwrite() (método curses.window):    Window Objects.     (line  445)
* owner() (método pathlib.Path):         Permissões e propriedade.
                                                             (line    6)
* p (pdb command):                       Comandos de depuração.
                                                             (line  289)
* P_ALL (no módulo os):                  Gerenciamento de processo.
                                                             (line 1006)
* P_DETACH (no módulo os):               Gerenciamento de processo.
                                                             (line  729)
* P_NOWAIT (no módulo os):               Gerenciamento de processo.
                                                             (line  708)
* P_NOWAITO (no módulo os):              Gerenciamento de processo.
                                                             (line  708)
* P_OVERLAY (no módulo os):              Gerenciamento de processo.
                                                             (line  729)
* P_PGID (no módulo os):                 Gerenciamento de processo.
                                                             (line 1006)
* P_PID (no módulo os):                  Gerenciamento de processo.
                                                             (line 1006)
* P_PIDFD (no módulo os):                Gerenciamento de processo.
                                                             (line 1006)
* P_WAIT (no módulo os):                 Gerenciamento de processo.
                                                             (line  718)
* pack_into() (método struct.Struct):    Classes<3>.         (line   29)
* pack_into() (no módulo struct):        Funções e exceções. (line   19)
* pack() (método mailbox.MH):            MH objects.         (line   67)
* pack() (método struct.Struct):         Classes<3>.         (line   24)
* pack() (no módulo struct):             Funções e exceções. (line   13)
* package variable;__all__:              Importando módulos<2>.
                                                             (line    9)
* PackageMetadata (classe em importlib.metadata): Metadados de distribuição.
                                                             (line   16)
* PackageNotFoundError:                  Visão Geral<3>.     (line   35)
* PackagePath (classe em importlib.metadata): Arquivos de distribuição.
                                                             (line   19)
* packages_distributions() (no módulo importlib.metadata): Mapeando importação pra pacotes de distribuição.
                                                             (line    6)
* packed (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line   73)
* packed (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  272)
* packing;binário;dados:                 struct — Interpreta bytes como dados binários empacotados.
                                                             (line    8)
* pacote:                                Pacotes<2>.         (line    6)
* pacote <1>:                            site — Gancho de configuração específico do site.
                                                             (line   78)
* pacote <2>:                            Glossário.          (line 1282)
* pacote de espaço de nomes:             Glossário.          (line 1209)
* pacote provisório:                     Glossário.          (line 1446)
* pacote regular:                        Glossário.          (line 1533)
* pacote;espaço de nomes:                Pacotes de espaço de nomes.
                                                             (line    6)
* pacote;porção:                         Pacotes de espaço de nomes.
                                                             (line    6)
* pacote;regular:                        Pacotes regulares.  (line    6)
* padrão AS, padrão OR, padrão de captura, padrão curinga: Padrões.
                                                             (line    6)
* padrão;saída:                          Instruções de expressão.
                                                             (line   18)
* padrões !:                             Padrões.            (line    6)
* PAGER:                                 pydoc — Gerador de documentação e sistema de ajuda online.
                                                             (line   47)
* pair_content() (no módulo curses):     Funções<6>.         (line  380)
* pair_number() (no módulo curses):      Funções<6>.         (line  386)
* pairwise() (no módulo itertools):      Funções do intertools.
                                                             (line  420)
* palavra reservada:                     Palavras reservadas.
                                                             (line    6)
* palavra reservada <1>:                 Palavras reservadas.
                                                             (line    6)
* palavra reservada <2>:                 Palavras reservadas contextuais.
                                                             (line    6)
* palavra reservada contextual:          Palavras reservadas contextuais.
                                                             (line    6)
* palavra reservada;as:                  A instrução import. (line    6)
* palavra reservada;as <1>:              A instrução try.    (line    6)
* palavra reservada;as <2>:              A instrução with.   (line    6)
* palavra reservada;as <3>:              A instrução match.  (line    6)
* palavra reservada;async:               Definição de função de corrotina.
                                                             (line    9)
* palavra reservada;await:               Chamadas.           (line  167)
* palavra reservada;await <1>:           Definição de função de corrotina.
                                                             (line    9)
* palavra reservada;case:                A instrução match.  (line    6)
* palavra reservada;elif:                A instrução if.     (line    6)
* palavra reservada;else:                A instrução break.  (line   12)
* palavra reservada;else <1>:            A instrução if.     (line    6)
* palavra reservada;else <2>:            A instrução while.  (line    6)
* palavra reservada;else <3>:            A instrução for.    (line    6)
* palavra reservada;else <4>:            A instrução try.    (line    6)
* palavra reservada;else <5>:            Cláusula except*.   (line   68)
* palavra reservada;except:              A instrução try.    (line    6)
* palavra reservada;except_star:         Cláusula except.    (line   83)
* palavra reservada;finally:             A instrução return. (line   17)
* palavra reservada;finally <1>:         A instrução break.  (line   18)
* palavra reservada;finally <2>:         A instrução continue.
                                                             (line    6)
* palavra reservada;finally <3>:         A instrução try.    (line    6)
* palavra reservada;finally <4>:         Cláusula else.      (line   11)
* palavra reservada;from:                Expressões yield.   (line    6)
* palavra reservada;from <1>:            A instrução import. (line    6)
* palavra reservada;if:                  A instrução match.  (line    6)
* palavra reservada;in:                  A instrução for.    (line    6)
* palavra reservada;yield:               Expressões yield.   (line    6)
* par chave/valor:                       Sintaxes de criação de dicionário.
                                                             (line    6)
* paralelismo:                           Glossário.          (line 1291)
* Parameter (classe em inspect):         Introspecting callables with the Signature object.
                                                             (line  190)
* ParameterizedMIMEHeader (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line  255)
* parameters (atributo inspect.Signature): Introspecting callables with the Signature object.
                                                             (line  105)
* parâmetro:                             Glossário.          (line 1302)
* parâmetro;definição de função:         Padrões de classe.  (line  146)
* parâmetro;diferença de argumento:      Como passo parâmetros opcionais ou parâmetros nomeados de uma função para outra?.
                                                             (line   17)
* parâmetro;semântica de chamadas:       Chamadas.           (line   26)
* parâmetros de tipo:                    Listas de parâmetros de tipo.
                                                             (line   11)
* params (atributo email.headerregistry.ParameterizedMIMEHeader): email headerregistry Custom Header Objects.
                                                             (line  263)
* ParamSpec (classe em ast):             Parâmetros de tipo. (line   37)
* ParamSpec (classe em typing):          Criando tipos genéricos e apelidos de tipo.
                                                             (line  362)
* ParamSpecArgs (no módulo typing):      Criando tipos genéricos e apelidos de tipo.
                                                             (line  487)
* ParamSpecKwargs (no módulo typing):    Criando tipos genéricos e apelidos de tipo.
                                                             (line  487)
* paramstyle (no módulo sqlite3):        Constantes do módulo.
                                                             (line   70)
* pardir (no módulo os):                 Diversas informações de sistema.
                                                             (line  113)
* parent (atributo importlib.machinery.ModuleSpec): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  440)
* parent (atributo logging.Logger):      Objetos Logger.     (line   43)
* parent (atributo pathlib.PurePath):    Métodos e propriedades.
                                                             (line   95)
* parent (atributo pyclbr.Class):        Objetos classe<2>.  (line   28)
* parent (atributo pyclbr.Function):     Objetos Function.   (line   27)
* parent (atributo urllib.request.BaseHandler): BaseHandler Objects.
                                                             (line   25)
* parent_process() (no módulo multiprocessing): Diversos<4>. (line   41)
* parent() (método tkinter.ttk.Treeview): ttk Treeview.      (line  227)
* parentNode (atributo xml.dom.Node):    Objetos Node.       (line   17)
* parents (atributo collections.ChainMap): Objetos ChainMap. (line   67)
* parents (atributo pathlib.PurePath):   Métodos e propriedades.
                                                             (line   79)
* paretovariate() (no módulo random):    Distribuições com valor real.
                                                             (line  101)
* parse_and_bind() (no módulo readline): Arquivo init.       (line    9)
* parse_args() (método argparse.ArgumentParser): O método parse_args.
                                                             (line    6)
* parse_args() (método optparse.OptionParser): Análise de argumentos.
                                                             (line    9)
* PARSE_COLNAMES (no módulo sqlite3):    Constantes do módulo.
                                                             (line   35)
* parse_config_h() (no módulo sysconfig): Outras funções<3>. (line   56)
* PARSE_DECLTYPES (no módulo sqlite3):   Constantes do módulo.
                                                             (line   13)
* parse_headers() (no módulo http.client): http client — HTTP protocol client.
                                                             (line  110)
* parse_intermixed_args() (método argparse.ArgumentParser): Análise misturada.
                                                             (line    6)
* parse_known_args() (método argparse.ArgumentParser): Análise parcial.
                                                             (line    6)
* parse_known_intermixed_args() (método argparse.ArgumentParser): Análise misturada.
                                                             (line    9)
* parse_qs() (no módulo urllib.parse):   Análise de URL.     (line  161)
* parse_qsl() (no módulo urllib.parse):  Análise de URL.     (line  210)
* parse() (método doctest.DocTestParser): DocTestParser objects.
                                                             (line   29)
* parse() (método email.parser.BytesParser): Parser API.     (line   35)
* parse() (método email.parser.Parser):  Parser API.         (line   87)
* parse() (método string.Formatter):     Formatação personalizada de strings.
                                                             (line   40)
* parse() (método urllib.robotparser.RobotFileParser): urllib robotparser — Analisador sintático de robots txt.
                                                             (line   30)
* parse() (método xml.etree.ElementTree.ElementTree): ElementTree Objects.
                                                             (line   54)
* Parse() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line    8)
* parse() (método xml.sax.xmlreader.XMLReader): XMLReader Objects.
                                                             (line    8)
* parse() (no módulo ast):               Auxiliares de ast.  (line    9)
* parse() (no módulo xml.dom.minidom):   xml dom minidom — Minimal DOM implementation.
                                                             (line   35)
* parse() (no módulo xml.dom.pulldom):   xml dom pulldom — Suporte para construir árvores parciais de DOM.
                                                             (line   87)
* parse() (no módulo xml.etree.ElementTree): Funções<9>.     (line  177)
* parse() (no módulo xml.sax):           xml sax — Support for SAX2 parsers.
                                                             (line   38)
* parseaddr() (no módulo email.utils):   email utils Utilitários diversos.
                                                             (line   59)
* parsebytes() (método email.parser.BytesParser): Parser API.
                                                             (line   55)
* parsedate_to_datetime() (no módulo email.utils): email utils Utilitários diversos.
                                                             (line  135)
* parsedate_tz() (no módulo email.utils): email utils Utilitários diversos.
                                                             (line  124)
* parsedate() (no módulo email.utils):   email utils Utilitários diversos.
                                                             (line  112)
* ParseError (classe em xml.etree.ElementTree): Exceções<19>.
                                                             (line    6)
* ParseFile() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line   16)
* ParseFlags() (no módulo imaplib):      imaplib — IMAP4 protocol client.
                                                             (line  126)
* parser (atributo pathlib.PurePath):    Métodos e propriedades.
                                                             (line    8)
* Parser (classe em email.parser):       Parser API.         (line   76)
* ParserCreate() (no módulo xml.parsers.expat): xml parsers expat — Fast XML parsing using Expat.
                                                             (line   45)
* ParseResult (classe em urllib.parse):  Structured Parse Results.
                                                             (line   48)
* ParseResultBytes (classe em urllib.parse): Structured Parse Results.
                                                             (line   73)
* parsestr() (método email.parser.Parser): Parser API.       (line   97)
* parseString() (no módulo xml.dom.minidom): xml dom minidom — Minimal DOM implementation.
                                                             (line   48)
* parseString() (no módulo xml.dom.pulldom): xml dom pulldom — Suporte para construir árvores parciais de DOM.
                                                             (line  101)
* parseString() (no módulo xml.sax):     xml sax — Support for SAX2 parsers.
                                                             (line   49)
* ParsingError:                          Exceções<8>.        (line   68)
* partial (atributo asyncio.IncompleteReadError): Exceções<13>.
                                                             (line   56)
* partial() (método imaplib.IMAP4):      Objetos IMAP4.      (line  192)
* partial() (no módulo functools):       functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line  327)
* partialmethod (classe em functools):   functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line  358)
* parties (atributo asyncio.Barrier):    Barrier.            (line   94)
* parties (atributo threading.Barrier):  Barrier objects.    (line   93)
* partition() (método bytearray):        Operações com Bytes e Bytearray.
                                                             (line  192)
* partition() (método bytes):            Operações com Bytes e Bytearray.
                                                             (line  192)
* partition() (método str):              String Methods<2>.  (line  526)
* parts (atributo pathlib.PurePath):     Acessando partes individuais.
                                                             (line    9)
* Pass (classe em ast):                  Instruções.         (line  153)
* pass_() (método poplib.POP3):          Objetos POP3.       (line   36)
* Paste:                                 Help menu Shell and Editor.
                                                             (line   30)
* patch.dict() (no módulo unittest.mock): patch dict.        (line    6)
* patch.multiple() (no módulo unittest.mock): patch multiple.
                                                             (line    6)
* patch.object() (no módulo unittest.mock): patch object.    (line    6)
* patch.stopall() (no módulo unittest.mock): métodos do patch start e stop.
                                                             (line   70)
* patch() (no módulo test.support):      test support — Utilitários para o conjunto de teste do Python.
                                                             (line  667)
* patch() (no módulo unittest.mock):     patch.              (line    9)
* PATH:                                  Alterações na API Python<5>.
                                                             (line  148)
* PATH <1>:                              Changes in ‘python’ Command Behavior<2>.
                                                             (line    6)
* PATH <2>:                              Changes in ‘python’ Command Behavior<2>.
                                                             (line   11)
* PATH <3>:                              Changes in ‘python’ Command Behavior<2>.
                                                             (line   12)
* PATH <4>:                              macOS<8>.           (line   16)
* PATH <5>:                              Windows<26>.        (line   56)
* PATH <6>:                              Windows<30>.        (line   14)
* PATH <7>:                              Segurança<40>.      (line   16)
* PATH <8>:                              Segurança<40>.      (line   20)
* PATH <9>:                              O caminho de busca dos módulos.
                                                             (line   17)
* PATH <10>:                             Scripts Python executáveis.
                                                             (line   11)
* PATH <11>:                             Variáveis de ambiente.
                                                             (line   27)
* PATH <12>:                             Diversos<2>.        (line   16)
* PATH <13>:                             Etapas de instalação.
                                                             (line   35)
* PATH <14>:                             Etapas de instalação.
                                                             (line   61)
* PATH <15>:                             Instalando sem UI.  (line   80)
* PATH <16>:                             Instalando sem UI.  (line   85)
* PATH <17>:                             Excursus Configurando variáveis de ambiente.
                                                             (line   23)
* PATH <18>:                             Excursus Configurando variáveis de ambiente.
                                                             (line   37)
* PATH <19>:                             Encontrando o executável do Python.
                                                             (line   14)
* PATH <20>:                             Encontrando o executável do Python.
                                                             (line   22)
* PATH <21>:                             Encontrando o executável do Python.
                                                             (line   24)
* PATH <22>:                             Inicializador Python para Windows.
                                                             (line   13)
* PATH <23>:                             Pela linha de comando.
                                                             (line    9)
* PATH <24>:                             Linhas Shebang.     (line   56)
* PATH <25>:                             Linhas Shebang.     (line   62)
* PATH <26>:                             Linhas Shebang.     (line   65)
* PATH <27>:                             Linhas Shebang.     (line   69)
* PATH <28>:                             Comparação com os módulos os e os path.
                                                             (line   43)
* PATH <29>:                             Operações de diretório e arquivos.
                                                             (line  457)
* PATH <30>:                             Operações de diretório e arquivos.
                                                             (line  463)
* PATH <31>:                             Gerenciamento de processo.
                                                             (line   46)
* PATH <32>:                             Gerenciamento de processo.
                                                             (line   88)
* PATH <33>:                             Gerenciamento de processo.
                                                             (line   92)
* PATH <34>:                             Gerenciamento de processo.
                                                             (line   94)
* PATH <35>:                             Gerenciamento de processo.
                                                             (line  569)
* PATH <36>:                             Gerenciamento de processo.
                                                             (line  662)
* PATH <37>:                             Gerenciamento de processo.
                                                             (line  666)
* PATH <38>:                             Gerenciamento de processo.
                                                             (line  668)
* PATH <39>:                             Diversas informações de sistema.
                                                             (line  145)
* PATH <40>:                             Construtor Popen.   (line   37)
* PATH <41>:                             webbrowser — Controlador de navegador web conveniente.
                                                             (line   54)
* PATH <42>:                             Como funcionam os venvs.
                                                             (line   17)
* PATH <43>:                             Como funcionam os venvs.
                                                             (line   62)
* PATH <44>:                             Como funcionam os venvs.
                                                             (line   67)
* PATH <45>:                             site — Gancho de configuração específico do site.
                                                             (line   68)
* PATH <46>:                             Incorporando Python<2>.
                                                             (line   31)
* PATH <47>:                             Incorporando Python<2>.
                                                             (line   37)
* PATH <48>:                             Como tornar um script Python executável no Unix?.
                                                             (line   24)
* PATH <49>:                             Como tornar um script Python executável no Unix?.
                                                             (line   28)
* path (atributo http.cookiejar.Cookie): Objetos Cookie<2>.  (line   45)
* path (atributo http.cookies.Morsel):   Objetos Morsel.     (line   13)
* path (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line   97)
* path (atributo ImportError):           Exceções concretas. (line   65)
* path (atributo importlib.abc.FileLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  321)
* path (atributo importlib.machinery.AppleFrameworkLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  517)
* path (atributo importlib.machinery.ExtensionFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  319)
* path (atributo importlib.machinery.FileFinder): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  187)
* path (atributo importlib.machinery.SourceFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  224)
* path (atributo importlib.machinery.SourcelessFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  269)
* path (atributo os.DirEntry):           Arquivos e diretórios.
                                                             (line  997)
* Path (classe em pathlib):              Caminhos concretos. (line   11)
* Path (classe em zipfile):              Objetos Path.       (line    6)
* path (no módulo sys):                  sys — Parâmetros e funções específicas do sistema.
                                                             (line 1387)
* path (no módulo sys) <1>:              Incorporando Python<2>.
                                                             (line   12)
* path (no módulo sys) <2>:              Inicializando e encerrando o interpretador.
                                                             (line    7)
* path (no módulo sys) <3>:              Parâmetros de todo o processo.
                                                             (line  142)
* Path browser:                          Menu File Console e editor.
                                                             (line   22)
* path_hook() (método de classe importlib.machinery.FileFinder): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  202)
* path_hooks (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line 1423)
* path_importer_cache (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line 1432)
* path_mtime() (método importlib.abc.SourceLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  387)
* path_return_ok() (método http.cookiejar.CookiePolicy): Objeto CookiePolicy.
                                                             (line   56)
* path_stats() (método importlib.abc.SourceLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  366)
* path_stats() (método importlib.machinery.SourceFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  233)
* Path.stem (no módulo zipfile):         Objetos Path.       (line   90)
* Path.suffix (no módulo zipfile):       Objetos Path.       (line   82)
* Path.suffixes (no módulo zipfile):     Objetos Path.       (line   97)
* path() (no módulo importlib.resources): API funcional.     (line  115)
* pathconf_names (no módulo os):         Arquivos e diretórios.
                                                             (line  697)
* pathconf() (no módulo os):             Arquivos e diretórios.
                                                             (line  671)
* PathEntryFinder (classe em importlib.abc): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line   61)
* PATHEXT:                               Other Improvements<2>.
                                                             (line   30)
* PATHEXT <1>:                           Biblioteca<110>.    (line  138)
* PATHEXT <2>:                           Instalando sem UI.  (line   81)
* PATHEXT <3>:                           Instalando sem UI.  (line   86)
* PATHEXT <4>:                           Operações de diretório e arquivos.
                                                             (line  473)
* PathFinder (classe em importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  110)
* PathLike (classe em os):               Parâmetros de processo.
                                                             (line  122)
* pathname2url() (no módulo urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  145)
* pathsep (no módulo os):                Diversas informações de sistema.
                                                             (line  142)
* pattern (atributo re.Pattern):         Objetos expressão regular.
                                                             (line  124)
* pattern (atributo re.PatternError):    Exceções<3>.        (line   20)
* Pattern (classe em re):                Objetos expressão regular.
                                                             (line    6)
* Pattern (classe em typing):            Apelidos de outros tipos concretos.
                                                             (line    6)
* PatternError:                          Exceções<3>.        (line    6)
* pause_reading() (método asyncio.ReadTransport): Read-only Transports.
                                                             (line   12)
* pause_writing() (método asyncio.BaseProtocol): Base Protocol.
                                                             (line   40)
* pause() (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  345)
* PAX_FORMAT (no módulo tarfile):        tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  351)
* pax_headers (atributo tarfile.TarFile): Objetos TarFile.   (line  334)
* pax_headers (atributo tarfile.TarInfo): Objetos TarInfo.   (line  161)
* pbkdf2_hmac() (no módulo hashlib):     Derivação de chave. (line   12)
* pd() (no módulo turtle):               Estado do Desenho.  (line    6)
* Pdb (classe em pdb):                   Interface de linha de comando<9>.
                                                             (line  129)
* Pdb (classe no pdb):                   pdb — O depurador do Python.
                                                             (line   18)
* pdb opção de linha de comando; -c:     Interface de linha de comando<9>.
                                                             (line   18)
* pdb opção de linha de comando; -command: Interface de linha de comando<9>.
                                                             (line   18)
* pdb opção de linha de comando; -m:     Interface de linha de comando<9>.
                                                             (line   25)
* pdf() (método statistics.NormalDist):  Objetos NormalDist. (line   77)
* peek() (método bz2.BZ2File):           Des compressão de arquivos.
                                                             (line   76)
* peek() (método gzip.GzipFile):         gzip — Suporte para arquivos gzip.
                                                             (line  135)
* peek() (método io.BufferedReader):     Buffered Streams.   (line   75)
* peek() (método lzma.LZMAFile):         Lendo e escrevendo arquivos comprimidos.
                                                             (line   90)
* peek() (método weakref.finalize):      weakref — Referências fracas.
                                                             (line  320)
* PEM_cert_to_DER_cert() (no módulo ssl): Manipulação de certificados.
                                                             (line   57)
* pen() (no módulo turtle):              Estado do Desenho.  (line   34)
* pencolor() (no módulo turtle):         Controle da Cor.    (line    6)
* pending (atributo ssl.MemoryBIO):      Підтримка BIO пам’яті<2>.
                                                             (line  139)
* pending() (método ssl.SSLSocket):      SSL Sockets.        (line  339)
* PendingDeprecationWarning:             Avisos.             (line   28)
* pendown() (no módulo turtle):          Estado do Desenho.  (line    6)
* pendurado;else:                        Instruções compostas.
                                                             (line   59)
* pensize() (no módulo turtle):          Estado do Desenho.  (line   18)
* penup() (no módulo turtle):            Estado do Desenho.  (line   12)
* PEP:                                   Glossário.          (line 1397)
* PERCENT (no módulo token):             token — Constantes usadas com árvores de análises do Python.
                                                             (line  231)
* PERCENTEQUAL (no módulo token):        token — Constantes usadas com árvores de análises do Python.
                                                             (line  279)
* perf_counter_ns() (no módulo time):    Funções<5>.         (line  245)
* perf_counter() (no módulo time):       Funções<5>.         (line  221)
* perfilador:                            sys — Parâmetros e funções específicas do sistema.
                                                             (line  988)
* perfilador <1>:                        sys — Parâmetros e funções específicas do sistema.
                                                             (line 1586)
* perm() (no módulo math):               Funções de teoria dos números.
                                                             (line   67)
* PermissionError:                       Exceções de sistema operacional.
                                                             (line   99)
* permutations() (no módulo itertools):  Funções do intertools.
                                                             (line  443)
* persistência:                          pickle — Serialização de objetos Python.
                                                             (line    8)
* persistent_id (protocolo pickle):      Persistência de objetos externos.
                                                             (line    6)
* persistent_id() (método pickle.Pickler): Interface do módulo.
                                                             (line  168)
* persistent_load (protocolo pickle):    Persistência de objetos externos.
                                                             (line    6)
* persistent_load() (método pickle.Unpickler): Interface do módulo.
                                                             (line  292)
* persistente;objetos:                   pickle — Serialização de objetos Python.
                                                             (line    8)
* pertinência;teste:                     Operações de teste de pertinência.
                                                             (line   38)
* PF_CAN (no módulo socket):             Constantes<8>.      (line  126)
* PF_DIVERT (no módulo socket):          Constantes<8>.      (line  202)
* PF_PACKET (no módulo socket):          Constantes<8>.      (line  212)
* PF_RDS (no módulo socket):             Constantes<8>.      (line  234)
* pformat() (método pprint.PrettyPrinter): Objetos PrettyPrinter.
                                                             (line   51)
* pformat() (no módulo pprint):          Funções<4>.         (line   78)
* pgettext() (método gettext.GNUTranslations): A classe GNUTranslations.
                                                             (line   71)
* pgettext() (método gettext.NullTranslations): A classe NullTranslations.
                                                             (line   50)
* pgettext() (no módulo gettext):        API do GNU gettext. (line   63)
* PGO (no módulo test.support):          test support — Utilitários para o conjunto de teste do Python.
                                                             (line  112)
* phase() (no módulo cmath):             Conversões de e para coordenadas polares.
                                                             (line   21)
* Philbrick, Geoff:                      Parâmetros nomeados para funções de extensão.
                                                             (line   25)
* pi (no módulo cmath):                  Constantes<3>.      (line    6)
* pi (no módulo math):                   Constantes<2>.      (line    6)
* pi() (método xml.etree.ElementTree.TreeBuilder): TreeBuilder Objects.
                                                             (line   56)
* pickle() (no módulo copyreg):          copyreg — Registra funções de suporte pickle.
                                                             (line   23)
* PickleBuffer (classe em pickle):       Interface do módulo.
                                                             (line  323)
* PickleError:                           Interface do módulo.
                                                             (line   99)
* Pickler (classe em pickle):            Interface do módulo.
                                                             (line  127)
* pickletools opção de linha de comando; -a: Opções da linha de comando<2>.
                                                             (line    6)
* pickletools opção de linha de comando; -annotate: Opções da linha de comando<2>.
                                                             (line    6)
* pickletools opção de linha de comando; -indentlevel: Opções da linha de comando<2>.
                                                             (line   14)
* pickletools opção de linha de comando; -l: Opções da linha de comando<2>.
                                                             (line   14)
* pickletools opção de linha de comando; -m: Opções da linha de comando<2>.
                                                             (line   18)
* pickletools opção de linha de comando; -memo: Opções da linha de comando<2>.
                                                             (line   18)
* pickletools opção de linha de comando; -o: Opções da linha de comando<2>.
                                                             (line   10)
* pickletools opção de linha de comando; -output: Opções da linha de comando<2>.
                                                             (line   10)
* pickletools opção de linha de comando; -p: Opções da linha de comando<2>.
                                                             (line   23)
* pickletools opção de linha de comando; -preamble: Opções da linha de comando<2>.
                                                             (line   23)
* pickling;objetos:                      pickle — Serialização de objetos Python.
                                                             (line    8)
* PicklingError:                         Interface do módulo.
                                                             (line  104)
* pid (atributo asyncio.subprocess.Process): Interagindo com subprocessos.
                                                             (line  140)
* pid (atributo multiprocessing.Process): Process e exceções.
                                                             (line  156)
* pid (atributo subprocess.Popen):       Objetos Popen.      (line  150)
* PIDFD_NONBLOCK (no módulo os):         Gerenciamento de processo.
                                                             (line  396)
* pidfd_open() (no módulo os):           Gerenciamento de processo.
                                                             (line  383)
* pidfd_send_signal() (no módulo signal): Conteúdo do módulo<5>.
                                                             (line  363)
* PidfdChildWatcher (classe em asyncio): Monitores de processos.
                                                             (line  156)
* pilha (stack);rastro (trace):          Objetos traceback.  (line    6)
* PIP_USER:                              Windows<47>.        (line  102)
* PIPE (no módulo subprocess):           Usando o módulo subprocess.
                                                             (line  154)
* PIPE_BUF (no módulo select):           select — Waiting for I/O completion.
                                                             (line  164)
* pipe_connection_lost() (método asyncio.SubprocessProtocol): Protocolos de Subprocesso.
                                                             (line   19)
* pipe_data_received() (método asyncio.SubprocessProtocol): Protocolos de Subprocesso.
                                                             (line   10)
* PIPE_MAX_SIZE (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  117)
* Pipe() (no módulo multiprocessing):    Encadeamentos e filas.
                                                             (line   83)
* pipe() (no módulo os):                 Operações dos descritores de arquivos.
                                                             (line  503)
* pipe2() (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  514)
* placeholder (atributo textwrap.TextWrapper): textwrap — Quebra automática e preenchimento de texto.
                                                             (line  288)
* platform (in module sys):              Parâmetros de todo o processo.
                                                             (line  182)
* platform (no módulo sys):              sys — Parâmetros e funções específicas do sistema.
                                                             (line 1443)
* platform opção de linha de comando; -nonaliased: Uso na linha de comando<3>.
                                                             (line   19)
* platform opção de linha de comando; -terse: Uso na linha de comando<3>.
                                                             (line   13)
* platform() (no módulo platform):       Multiplataforma.    (line   52)
* platlibdir (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line 1511)
* PlaySound() (no módulo winsound):      winsound — Interface de reprodução de som para o Windows.
                                                             (line   23)
* plist;arquivo:                         plistlib — Gera e analisa arquivos Apple plist.
                                                             (line    8)
* plock() (no módulo os):                Gerenciamento de processo.
                                                             (line  409)
* PLUS (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line  201)
* plus() (método decimal.Context):       Objetos de contexto.
                                                             (line  455)
* PLUSEQUAL (no módulo token):           token — Constantes usadas com árvores de análises do Python.
                                                             (line  267)
* pm() (no módulo pdb):                  Interface de linha de comando<9>.
                                                             (line  120)
* POINTER() (no módulo ctypes):          Funções utilitárias.
                                                             (line  181)
* pointer() (no módulo ctypes):          Funções utilitárias.
                                                             (line  187)
* polar() (no módulo cmath):             Conversões de e para coordenadas polares.
                                                             (line   39)
* Policy (classe em email.policy):       email policy Policy Objects.
                                                             (line  129)
* poll() (método multiprocessing.connection.Connection): Objetos de conexão.
                                                             (line   45)
* poll() (método select.devpoll):        /dev/poll Polling Objects.
                                                             (line   65)
* poll() (método select.epoll):          Edge and Level Trigger Polling epoll Objects.
                                                             (line   96)
* poll() (método select.poll):           Polling Objects.    (line   77)
* poll() (método subprocess.Popen):      Objetos Popen.      (line    8)
* poll() (no módulo select):             select — Waiting for I/O completion.
                                                             (line   91)
* PollSelector (classe em selectors):    Classes<4>.         (line  171)
* ponto flutuante;literais:              Tipos numéricos — int float complex.
                                                             (line   20)
* ponto flutuante;número:                numbers Real float. (line    6)
* Pool (classe em multiprocessing.pool): Process Pools.      (line    9)
* pop_all() (método contextlib.ExitStack): Utilitários.      (line  599)
* POP_BLOCK (opcode):                    Instruções em bytecode do Python.
                                                             (line 1436)
* POP_EXCEPT (opcode):                   Instruções em bytecode do Python.
                                                             (line  449)
* POP_JUMP_IF_FALSE (opcode):            Instruções em bytecode do Python.
                                                             (line  879)
* POP_JUMP_IF_NONE (opcode):             Instruções em bytecode do Python.
                                                             (line  903)
* POP_JUMP_IF_NOT_NONE (opcode):         Instruções em bytecode do Python.
                                                             (line  894)
* POP_JUMP_IF_TRUE (opcode):             Instruções em bytecode do Python.
                                                             (line  864)
* pop_source() (método shlex.shlex):     shlex Objects.      (line   63)
* POP_TOP (opcode):                      Instruções em bytecode do Python.
                                                             (line  143)
* pop() (método array.array):            array— Vetores eficientes de valores numéricos.
                                                             (line  219)
* pop() (método collections.deque):      Objetos deque.      (line   92)
* pop() (método dict):                   Tipo mapeamento — dict.
                                                             (line  203)
* pop() (método mailbox.Mailbox):        Objetos Mailbox.    (line  217)
* pop() (método sequence):               Tipos sequências mutáveis.
                                                             (line  104)
* pop() (método set):                    Tipo conjuntos — set frozenset.
                                                             (line  222)
* POP3 (classe em poplib):               poplib — Cliente de protocolo POP3.
                                                             (line   35)
* POP3_SSL (classe em poplib):           poplib — Cliente de protocolo POP3.
                                                             (line   55)
* POP3;protocolo:                        poplib — Cliente de protocolo POP3.
                                                             (line    8)
* Popen (classe em subprocess):          Construtor Popen.   (line   11)
* popen() (no módulo os):                Objetos de E/S também conhecidos como objetos arquivo.
                                                             (line    6)
* popen() (no módulo os) <1>:            Gerenciamento de processo.
                                                             (line  417)
* popen() (no módulo os) <2>:            select — Waiting for I/O completion.
                                                             (line  145)
* popitem() (método collections.OrderedDict): Objetos OrderedDict.
                                                             (line   67)
* popitem() (método dict):               Tipo mapeamento — dict.
                                                             (line  212)
* popitem() (método mailbox.Mailbox):    Objetos Mailbox.    (line  226)
* popleft() (método collections.deque):  Objetos deque.      (line   98)
* porção:                                Glossário.          (line 1414)
* port (atributo http.cookiejar.Cookie): Objetos Cookie<2>.  (line   36)
* port_specified (atributo http.cookiejar.Cookie): Objetos Cookie<2>.
                                                             (line   81)
* pos (atributo json.JSONDecodeError):   Exceções<17>.       (line   19)
* pos (atributo re.Match):               Objetos correspondência.
                                                             (line  183)
* pos (atributo re.PatternError):        Exceções<3>.        (line   24)
* pos() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line  147)
* pos() (no módulo turtle):              Fala o estado de Turtle.
                                                             (line    6)
* position (atributo xml.etree.ElementTree.ParseError): Exceções<19>.
                                                             (line   20)
* position() (no módulo turtle):         Fala o estado de Turtle.
                                                             (line    6)
* positions (atributo inspect.FrameInfo): A pilha to interpretador.
                                                             (line   42)
* positions (atributo inspect.Traceback): A pilha to interpretador.
                                                             (line   82)
* Positions (classe em dis):             Instruções em bytecode do Python.
                                                             (line  113)
* Positions.col_offset (no módulo dis):  Instruções em bytecode do Python.
                                                             (line  122)
* Positions.end_col_offset (no módulo dis): Instruções em bytecode do Python.
                                                             (line  124)
* Positions.end_lineno (no módulo dis):  Instruções em bytecode do Python.
                                                             (line  120)
* Positions.lineno (no módulo dis):      Instruções em bytecode do Python.
                                                             (line  118)
* POSIX_FADV_DONTNEED (no módulo os):    Operações dos descritores de arquivos.
                                                             (line  551)
* POSIX_FADV_NOREUSE (no módulo os):     Operações dos descritores de arquivos.
                                                             (line  551)
* POSIX_FADV_NORMAL (no módulo os):      Operações dos descritores de arquivos.
                                                             (line  551)
* POSIX_FADV_RANDOM (no módulo os):      Operações dos descritores de arquivos.
                                                             (line  551)
* POSIX_FADV_SEQUENTIAL (no módulo os):  Operações dos descritores de arquivos.
                                                             (line  551)
* POSIX_FADV_WILLNEED (no módulo os):    Operações dos descritores de arquivos.
                                                             (line  551)
* posix_fadvise() (no módulo os):        Operações dos descritores de arquivos.
                                                             (line  536)
* posix_fallocate() (no módulo os):      Operações dos descritores de arquivos.
                                                             (line  526)
* posix_openpt() (no módulo os):         Operações dos descritores de arquivos.
                                                             (line  579)
* POSIX_SPAWN_CLOSE (no módulo os):      Gerenciamento de processo.
                                                             (line  487)
* POSIX_SPAWN_CLOSEFROM (no módulo os):  Gerenciamento de processo.
                                                             (line  499)
* POSIX_SPAWN_DUP2 (no módulo os):       Gerenciamento de processo.
                                                             (line  493)
* POSIX_SPAWN_OPEN (no módulo os):       Gerenciamento de processo.
                                                             (line  481)
* posix_spawn() (no módulo os):          Gerenciamento de processo.
                                                             (line  457)
* posix_spawnp() (no módulo os):         Gerenciamento de processo.
                                                             (line  561)
* POSIX, memória compartilhada:          multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line   10)
* POSIX;controle de E/S:                 termios — Controle de tty no estilo POSIX.
                                                             (line    6)
* PosixPath (classe em pathlib):         Caminhos concretos. (line   23)
* post_handshake_auth (atributo ssl.SSLContext): SSL Contexts.
                                                             (line  590)
* post_mortem() (no módulo pdb):         Interface de linha de comando<9>.
                                                             (line  111)
* post_setup() (método venv.EnvBuilder): API<2>.             (line  177)
* postcmd() (método cmd.Cmd):            Objetos Cmd.        (line  107)
* postloop() (método cmd.Cmd):           Objetos Cmd.        (line  125)
* potência;operação:                     O operador de potência.
                                                             (line    6)
* Pow (classe em ast):                   Expressões<2>.      (line   54)
* pow() (no módulo math):                Funções de potências exponenciais e logarítmicas.
                                                             (line   72)
* pow() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line  152)
* power() (método decimal.Context):      Objetos de contexto.
                                                             (line  461)
* pp (pdb command):                      Comandos de depuração.
                                                             (line  296)
* pp() (no módulo pprint):               Funções<4>.         (line    6)
* pprint() (método pprint.PrettyPrinter): Objetos PrettyPrinter.
                                                             (line   57)
* pprint() (no módulo pprint):           Funções<4>.         (line   69)
* prcal() (no módulo calendar):          calendar — Funções gerais relacionadas ao calendário.
                                                             (line  425)
* pread() (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  566)
* preadv() (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  597)
* preamble (atributo email.message.EmailMessage): email message Representing an email message.
                                                             (line  681)
* preamble (atributo email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  694)
* prec (atributo decimal.Context):       Objetos de contexto.
                                                             (line  125)
* precmd() (método cmd.Cmd):             Objetos Cmd.        (line   97)
* prefix (atributo xml.dom.Attr):        Attr Objects.       (line   18)
* prefix (atributo xml.dom.Node):        Objetos Node.       (line   69)
* prefix (atributo zipimport.zipimporter): Objetos zipimporter.
                                                             (line  102)
* prefix (no módulo sys):                sys — Parâmetros e funções específicas do sistema.
                                                             (line 1537)
* PREFIXES (no módulo site):             Conteúdo do módulo<10>.
                                                             (line    6)
* prefixlen (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line  136)
* prefixlen (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  336)
* preloop() (método cmd.Cmd):            Objetos Cmd.        (line  119)
* prepare_class() (no módulo types):     Criação de tipos dinâmicos.
                                                             (line   24)
* prepare_input_source() (no módulo xml.sax.saxutils): xml sax saxutils — Utilitários de SAX.
                                                             (line   84)
* prepare() (método graphlib.TopologicalSorter): graphlib — Funcionalidade para operar com estruturas do tipo grafo.
                                                             (line  103)
* prepare() (método logging.handlers.QueueHandler): QueueHandler.
                                                             (line   53)
* prepare() (método logging.handlers.QueueListener): QueueListener.
                                                             (line   58)
* PrepareProtocol (classe em sqlite3):   PrepareProtocol objects.
                                                             (line    6)
* PrettyPrinter (classe em pprint):      Objetos PrettyPrinter.
                                                             (line    6)
* prev() (método tkinter.ttk.Treeview):  ttk Treeview.       (line  232)
* previousSibling (atributo xml.dom.Node): Objetos Node.     (line   32)
* primário:                              Primárias.          (line    6)
* print_callees() (método pstats.Stats): A classe Stats.     (line  217)
* print_callers() (método pstats.Stats): A classe Stats.     (line  196)
* print_exc() (método timeit.Timer):     Interface em Python.
                                                             (line  143)
* print_exc() (no módulo traceback):     Funções de nível de módulo<2>.
                                                             (line   58)
* print_exception() (no módulo traceback): Funções de nível de módulo<2>.
                                                             (line   24)
* print_function (no módulo __future__): Conteúdo do módulo<9>.
                                                             (line   35)
* print_help() (método argparse.ArgumentParser): Imprimindo a ajuda.
                                                             (line   16)
* print_last() (no módulo traceback):    Funções de nível de módulo<2>.
                                                             (line   63)
* print_list() (no módulo traceback):    Funções de nível de módulo<2>.
                                                             (line  101)
* print_stack() (método asyncio.Task):   Objeto Task.        (line  151)
* print_stack() (no módulo traceback):   Funções de nível de módulo<2>.
                                                             (line   70)
* print_stats() (método profile.Profile): profile and cProfile Module Reference.
                                                             (line   94)
* print_stats() (método pstats.Stats):   A classe Stats.     (line  164)
* print_tb() (no módulo traceback):      Funções de nível de módulo<2>.
                                                             (line    6)
* print_usage() (método argparse.ArgumentParser): Imprimindo a ajuda.
                                                             (line   10)
* print_usage() (método optparse.OptionParser): Outros métodos.
                                                             (line   15)
* print_version() (método optparse.OptionParser): Exibindo uma string de versão.
                                                             (line   27)
* print_warning() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  427)
* print() (função embutida);__str__() (método de objeto): Personalização básica.
                                                             (line  140)
* print() (método traceback.TracebackException): TracebackException Objects.
                                                             (line  136)
* printable (no módulo string):          Constantes de strings.
                                                             (line   41)
* printdir() (método zipfile.ZipFile):   Objetos ZipFile.    (line  247)
* printf, estilo de formatação:          Formatação de string no estilo printf.
                                                             (line    6)
* printf, estilo de formatação <1>:      Estilo de Formatação de bytes printf-style.
                                                             (line    6)
* PRIO_DARWIN_BG (no módulo os):         Parâmetros de processo.
                                                             (line  309)
* PRIO_DARWIN_NONUI (no módulo os):      Parâmetros de processo.
                                                             (line  309)
* PRIO_DARWIN_PROCESS (no módulo os):    Parâmetros de processo.
                                                             (line  309)
* PRIO_DARWIN_THREAD (no módulo os):     Parâmetros de processo.
                                                             (line  309)
* PRIO_PGRP (no módulo os):              Parâmetros de processo.
                                                             (line  298)
* PRIO_PROCESS (no módulo os):           Parâmetros de processo.
                                                             (line  298)
* PRIO_USER (no módulo os):              Parâmetros de processo.
                                                             (line  298)
* PriorityQueue (classe em asyncio):     Fila de prioridade. (line    6)
* PriorityQueue (classe em queue):       queue — A synchronized queue class.
                                                             (line   50)
* privados;nomes:                        Identificadores Nomes.
                                                             (line   15)
* prlimit() (no módulo resource):        Limites de recursos.
                                                             (line   58)
* prmonth() (método calendar.TextCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  210)
* prmonth() (no módulo calendar):        calendar — Funções gerais relacionadas ao calendário.
                                                             (line  414)
* ProactorEventLoop (classe em asyncio): Implementações do laço de eventos.
                                                             (line   32)
* procedimento;chamada:                  Instruções de expressão.
                                                             (line   18)
* Process (classe em multiprocessing):   Process e exceções. (line    6)
* process_cpu_count() (no módulo os):    Diversas informações de sistema.
                                                             (line   61)
* process_exited() (método asyncio.SubprocessProtocol): Protocolos de Subprocesso.
                                                             (line   26)
* process_request() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line  168)
* process_time_ns() (no módulo time):    Funções<5>.         (line  265)
* process_time() (no módulo time):       Funções<5>.         (line  252)
* process_tokens() (no módulo tabnanny): tabnanny — Detecção de indentação ambígua.
                                                             (line   45)
* process() (método logging.LoggerAdapter): LoggerAdapter Objects.
                                                             (line   23)
* ProcessError:                          Process e exceções. (line  267)
* processingInstruction() (método xml.sax.handler.ContentHandler): ContentHandler Objects.
                                                             (line  162)
* ProcessingInstruction() (no módulo xml.etree.ElementTree): Funções<9>.
                                                             (line  184)
* ProcessingInstructionHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  324)
* ProcessLookupError:                    Exceções de sistema operacional.
                                                             (line  109)
* processo;grupo:                        Parâmetros de processo.
                                                             (line  196)
* processo;grupo <1>:                    Parâmetros de processo.
                                                             (line  260)
* processo;id:                           Parâmetros de processo.
                                                             (line  266)
* processo;id do pai:                    Parâmetros de processo.
                                                             (line  273)
* processo;interrupção:                  Gerenciamento de processo.
                                                             (line  346)
* processo;interrupção <1>:              Gerenciamento de processo.
                                                             (line  369)
* processo;prioridade de agendamento:    Parâmetros de processo.
                                                             (line  284)
* processo;prioridade de agendamento <1>: Parâmetros de processo.
                                                             (line  473)
* processo;sinalização:                  Gerenciamento de processo.
                                                             (line  346)
* processo;sinalização <1>:              Gerenciamento de processo.
                                                             (line  369)
* processor() (no módulo platform):      Multiplataforma.    (line   74)
* processos leves:                       _thread— API de segmentação de baixo nível.
                                                             (line    6)
* ProcessPoolExecutor (classe em concurrent.futures): ProcessPoolExecutor.
                                                             (line   27)
* prod() (no módulo math):               Funções de soma e produto.
                                                             (line   54)
* product() (no módulo itertools):       Funções do intertools.
                                                             (line  495)
* Profile (classe em profile):           profile and cProfile Module Reference.
                                                             (line   35)
* PROFILE_TASK:                          Construção<20>.     (line   13)
* PROFILE_TASK <1>:                      Opções de desempenho.
                                                             (line   13)
* profiling, deterministic:              Introdução aos profilers.
                                                             (line    6)
* programa:                              Programas Python completos.
                                                             (line    6)
* ProgrammingError:                      Exceções<7>.        (line   78)
* Progressbar (classe em tkinter.ttk):   ttk Progressbar.    (line    6)
* prompt (atributo cmd.Cmd):             Objetos Cmd.        (line  134)
* prompt_user_passwd() (método urllib.request.FancyURLopener): Legacy interface.
                                                             (line  183)
* prompts do interpretador:              sys — Parâmetros e funções específicas do sistema.
                                                             (line 1554)
* propagate (atributo logging.Logger):   Objetos Logger.     (line   51)
* property (classe interna):             Funções embutidas<3>.
                                                             (line 1654)
* property_declaration_handler (no módulo xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line  111)
* property_dom_node (no módulo xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line  118)
* property_lexical_handler (no módulo xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line  104)
* property_xml_string (no módulo xml.sax.handler): xml sax handler — Classes base para manipuladores de SAX.
                                                             (line  125)
* property() (no módulo enum):           Utilities and Decorators.
                                                             (line   39)
* PropertyMock (classe em unittest.mock): A classe Mock.     (line  654)
* Propostas de Melhorias do Python; PEP 0007#documentation-strings: Documentação<25>.
                                                             (line   35)
* Propostas de Melhorias do Python; PEP 0249#threadsafety: Constantes do módulo.
                                                             (line  108)
* Propostas de Melhorias do Python; PEP 0453#recommendations-for-downstream-distributors: Bootstrapping pip By Default.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 0477#disabling-ensurepip-by-downstream-distributors: Bootstrapping pip By Default<2>.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 0564#annex-clocks-resolution-in-python: PEP 564 Novas funções de tempo com resolução de nanossegundos.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 0626#out-of-process-debuggers-and-profilers: Objetos código<3>.
                                                             (line  108)
* Propostas de Melhorias do Python; PEP 0632#migration-advice: Resumo – Destaques da versão<2>.
                                                             (line  116)
* Propostas de Melhorias do Python; PEP 0683: Contagem de referências.
                                                             (line   62)
* Propostas de Melhorias do Python; PEP 1: New Development Process.
                                                             (line   67)
* Propostas de Melhorias do Python; PEP 1 <1>: New Development Process.
                                                             (line   82)
* Propostas de Melhorias do Python; PEP 1 <2>: Glossário.    (line 1414)
* Propostas de Melhorias do Python; PEP 100: Unicode<2>.     (line   15)
* Propostas de Melhorias do Python; PEP 11: Suporte para plataformas móveis.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 11 <1>: Suporte para plataformas móveis.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 11 <2>: Mudanças na construção.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 11 <3>: Mudanças na construção.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 11 <4>: Mudanças na construção.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 11 <5>: Mudanças na construção.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 11 <6>: Mudanças na construção<3>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 11 <7>: PEP 538 Coerção de localidade C legada.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 11 <8>: Unsupported Operating Systems.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 11 <9>: Mudanças na biblioteca.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 11 <10>: Construção<30>.
                                                             (line   56)
* Propostas de Melhorias do Python; PEP 11 <11>: Construção<30>.
                                                             (line  107)
* Propostas de Melhorias do Python; PEP 11 <12>: Construção<68>.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 11 <13>: Requisitos de construção.
                                                             (line   54)
* Propostas de Melhorias do Python; PEP 11 <14>: Utilizando Python no Windows.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 11 <15>: Outras plataformas.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 11#tier-2: Resumo – Destaques da versão.
                                                             (line  145)
* Propostas de Melhorias do Python; PEP 11#tier-3: Resumo – Destaques da versão.
                                                             (line  140)
* Propostas de Melhorias do Python; PEP 11#tier-3 <1>: Resumo – Destaques da versão.
                                                             (line  143)
* Propostas de Melhorias do Python; PEP 11#tier-3 <2>: Mudanças na construção<3>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 201: New Development Process.
                                                             (line   86)
* Propostas de Melhorias do Python; PEP 205: PEP 205 Weak References.
                                                             (line   82)
* Propostas de Melhorias do Python; PEP 205 <1>: weakref — Referências fracas.
                                                             (line  367)
* Propostas de Melhorias do Python; PEP 207: PEP 207 Rich Comparisons.
                                                             (line   71)
* Propostas de Melhorias do Python; PEP 207 <1>: PEP 207 Rich Comparisons.
                                                             (line   77)
* Propostas de Melhorias do Python; PEP 208: PEP 208 New Coercion Model.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 217: PEP 217 Interactive Display Hook.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 218: PEP 218 Built-In Set Objects.
                                                             (line   50)
* Propostas de Melhorias do Python; PEP 218 <1>: Outras mudanças na linguagem<17>.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 218 <2>: PEP 218 A Standard Set Datatype.
                                                             (line   81)
* Propostas de Melhorias do Python; PEP 227: PEP 227 Nested Scopes.
                                                             (line   96)
* Propostas de Melhorias do Python; PEP 227 <1>: PEP 227 Nested Scopes<2>.
                                                             (line   96)
* Propostas de Melhorias do Python; PEP 227 <2>: Conteúdo do módulo<9>.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 229: PEP 229 New Build System.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 230: PEP 230 Warning Framework.
                                                             (line   73)
* Propostas de Melhorias do Python; PEP 232: PEP 232 Function Attributes.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 234: PEP 234 Iterators.
                                                             (line  124)
* Propostas de Melhorias do Python; PEP 235: Introdução<12>. (line   51)
* Propostas de Melhorias do Python; PEP 236: PEP 227 Nested Scopes<2>.
                                                             (line   87)
* Propostas de Melhorias do Python; PEP 236 <1>: PEP 227 Nested Scopes<2>.
                                                             (line   88)
* Propostas de Melhorias do Python; PEP 236 <2>: PEP 236 __future__ Directives.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 236 <3>: Instruções future.
                                                             (line   87)
* Propostas de Melhorias do Python; PEP 236 <4>: Conteúdo do módulo<9>.
                                                             (line  104)
* Propostas de Melhorias do Python; PEP 237: Inteiros.       (line    6)
* Propostas de Melhorias do Python; PEP 237 <1>: PEP 237 Unifying Long Integers and Integers.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 237 <2>: Outras mudanças na linguagem<17>.
                                                             (line   18)
* Propostas de Melhorias do Python; PEP 237 <3>: PEP 237 Unifying Long Integers and Integers<2>.
                                                             (line   37)
* Propostas de Melhorias do Python; PEP 237 <4>: Formatação de string no estilo printf.
                                                             (line  190)
* Propostas de Melhorias do Python; PEP 237 <5>: Estilo de Formatação de bytes printf-style.
                                                             (line  194)
* Propostas de Melhorias do Python; PEP 238: Inteiros.       (line   11)
* Propostas de Melhorias do Python; PEP 238 <1>: PEP 238 Changing the Division Operator.
                                                             (line   21)
* Propostas de Melhorias do Python; PEP 238 <2>: PEP 238 Changing the Division Operator.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 238 <3>: PEP 238 Changing the Division Operator.
                                                             (line   68)
* Propostas de Melhorias do Python; PEP 238 <4>: Conteúdo do módulo<9>.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 238 <5>: Glossário.  (line  638)
* Propostas de Melhorias do Python; PEP 241: PEP 241 Metadata in Python Packages.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 241 <1>: PEP 241 Metadata in Python Packages.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 241 <2>: PEP 241 Metadata in Python Packages.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 243: PEP 241 Metadata in Python Packages.
                                                             (line   40)
* Propostas de Melhorias do Python; PEP 246: Documentação<24>.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 246 <1>: PrepareProtocol objects.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 247: hmac<3>.        (line   20)
* Propostas de Melhorias do Python; PEP 249: sqlite3<2>.     (line   11)
* Propostas de Melhorias do Python; PEP 249 <1>: The sqlite3 package.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 249 <2>: The sqlite3 package.
                                                             (line  111)
* Propostas de Melhorias do Python; PEP 249 <3>: Biblioteca<52>.
                                                             (line  124)
* Propostas de Melhorias do Python; PEP 249 <4>: Biblioteca<67>.
                                                             (line  296)
* Propostas de Melhorias do Python; PEP 249 <5>: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 249 <6>: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite.
                                                             (line   45)
* Propostas de Melhorias do Python; PEP 249 <7>: Funções do módulo.
                                                             (line   72)
* Propostas de Melhorias do Python; PEP 249 <8>: Connection objects.
                                                             (line  734)
* Propostas de Melhorias do Python; PEP 249 <9>: Connection objects.
                                                             (line  737)
* Propostas de Melhorias do Python; PEP 249 <10>: Connection objects.
                                                             (line  749)
* Propostas de Melhorias do Python; PEP 249 <11>: Exceções<7>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 249 <12>: How to use placeholders to bind values in SQL queries.
                                                             (line   53)
* Propostas de Melhorias do Python; PEP 249 <13>: Controle de transações através do atributo autocommit.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 249 <14>: Controle de transações através do atributo autocommit.
                                                             (line   32)
* Propostas de Melhorias do Python; PEP 252: Related Links.  (line   17)
* Propostas de Melhorias do Python; PEP 252 <1>: Related Links.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 252 <2>: Implementando descritores.
                                                             (line   26)
* Propostas de Melhorias do Python; PEP 253: Old and New Classes.
                                                             (line   28)
* Propostas de Melhorias do Python; PEP 253 <1>: Multiple Inheritance The Diamond Rule.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 253 <2>: Related Links.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 253 <3>: Related Links.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 253 <4>: Related Links.
                                                             (line   21)
* Propostas de Melhorias do Python; PEP 255: PEP 255 Simple Generators.
                                                             (line   45)
* Propostas de Melhorias do Python; PEP 255 <1>: PEP 255 Simple Generators.
                                                             (line  131)
* Propostas de Melhorias do Python; PEP 255 <2>: PEP 255 Simple Generators<2>.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 255 <3>: PEP 255 Simple Generators<2>.
                                                             (line  129)
* Propostas de Melhorias do Python; PEP 255 <4>: Expressões yield.
                                                             (line   92)
* Propostas de Melhorias do Python; PEP 255 <5>: Conteúdo do módulo<9>.
                                                             (line   18)
* Propostas de Melhorias do Python; PEP 261: Unicode Changes.
                                                             (line   18)
* Propostas de Melhorias do Python; PEP 261 <1>: Unicode Changes.
                                                             (line   61)
* Propostas de Melhorias do Python; PEP 263: Outras mudanças na linguagem<16>.
                                                             (line   99)
* Propostas de Melhorias do Python; PEP 263 <1>: PEP 263 Source Code Encodings.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 263 <2>: Núcleo e embutidos<78>.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 263 <3>: Introdução<12>.
                                                             (line   55)
* Propostas de Melhorias do Python; PEP 263 <4>: Tokenizando entradas.
                                                             (line   37)
* Propostas de Melhorias do Python; PEP 263 <5>: Tokenizando entradas.
                                                             (line   92)
* Propostas de Melhorias do Python; PEP 263 <6>: Unicode Literals in Python Source Code.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 264: Outras alterações e correções<3>.
                                                             (line   55)
* Propostas de Melhorias do Python; PEP 273: PEP 273 Importing Modules from ZIP Archives.
                                                             (line   41)
* Propostas de Melhorias do Python; PEP 273 <1>: PEP 273 Importing Modules from ZIP Archives.
                                                             (line   44)
* Propostas de Melhorias do Python; PEP 273 <2>: zipimport - Importa módulos de arquivos Zip.
                                                             (line   46)
* Propostas de Melhorias do Python; PEP 273 <3>: zipimport - Importa módulos de arquivos Zip.
                                                             (line   49)
* Propostas de Melhorias do Python; PEP 274: Nova sintaxe.   (line   42)
* Propostas de Melhorias do Python; PEP 277: PEP 277 Unicode file name support for Windows NT.
                                                             (line   32)
* Propostas de Melhorias do Python; PEP 278: PEP 278 Universal Newline Support.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 278 <1>: Glossário.  (line 1808)
* Propostas de Melhorias do Python; PEP 279: PEP 279 enumerate.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 282: PEP 282 The logging Package.
                                                             (line  105)
* Propostas de Melhorias do Python; PEP 282 <1>: PEP 282 The logging Package.
                                                             (line  111)
* Propostas de Melhorias do Python; PEP 282 <2>: Operações de arquivamento.
                                                             (line   46)
* Propostas de Melhorias do Python; PEP 282 <3>: Integration with the warnings module.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 285: PEP 285 A Boolean Type.
                                                             (line   47)
* Propostas de Melhorias do Python; PEP 285 <1>: PEP 285 A Boolean Type.
                                                             (line   70)
* Propostas de Melhorias do Python; PEP 288: PEP 342 New Generator Features.
                                                             (line  146)
* Propostas de Melhorias do Python; PEP 289: PEP 289 Generator Expressions.
                                                             (line   55)
* Propostas de Melhorias do Python; PEP 289 <1>: Outras mudanças na linguagem<17>.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 289 <2>: Documentação do Python.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 292: PEP 292 Simpler String Substitutions.
                                                             (line   45)
* Propostas de Melhorias do Python; PEP 292 <1>: Strings template.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 293: PEP 293 Codec Error Handling Callbacks.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 3000: Python 3 0.    (line   43)
* Propostas de Melhorias do Python; PEP 301: PEP 301 Package Index and Metadata for Distutils.
                                                             (line   45)
* Propostas de Melhorias do Python; PEP 302: Using importlib as the Implementation of Import.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 302 <1>: Visible Changes.
                                                             (line   18)
* Propostas de Melhorias do Python; PEP 302 <2>: Porting Python code.
                                                             (line   71)
* Propostas de Melhorias do Python; PEP 302 <3>: New Improved and Deprecated Modules<2>.
                                                             (line  106)
* Propostas de Melhorias do Python; PEP 302 <4>: New Improved and Removed Modules.
                                                             (line  289)
* Propostas de Melhorias do Python; PEP 302 <5>: PEP 273 Importing Modules from ZIP Archives.
                                                             (line   46)
* Propostas de Melhorias do Python; PEP 302 <6>: PEP 302 New Import Hooks.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 302 <7>: PEP 302 New Import Hooks.
                                                             (line   38)
* Propostas de Melhorias do Python; PEP 302 <8>: PEP 302 New Import Hooks.
                                                             (line   62)
* Propostas de Melhorias do Python; PEP 302 <9>: O sistema de importação.
                                                             (line   44)
* Propostas de Melhorias do Python; PEP 302 <10>: Referências.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 302 <11>: Funções embutidas<3>.
                                                             (line 2262)
* Propostas de Melhorias do Python; PEP 302 <12>: linecache — Acesso aleatório a linhas de texto.
                                                             (line   32)
* Propostas de Melhorias do Python; PEP 302 <13>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1430)
* Propostas de Melhorias do Python; PEP 302 <14>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1441)
* Propostas de Melhorias do Python; PEP 302 <15>: zipimport - Importa módulos de arquivos Zip.
                                                             (line   51)
* Propostas de Melhorias do Python; PEP 302 <16>: pkgutil — Utilitário de extensão de pacote.
                                                             (line   69)
* Propostas de Melhorias do Python; PEP 302 <17>: pkgutil — Utilitário de extensão de pacote.
                                                             (line   89)
* Propostas de Melhorias do Python; PEP 302 <18>: pkgutil — Utilitário de extensão de pacote.
                                                             (line  104)
* Propostas de Melhorias do Python; PEP 302 <19>: pkgutil — Utilitário de extensão de pacote.
                                                             (line  129)
* Propostas de Melhorias do Python; PEP 302 <20>: pkgutil — Utilitário de extensão de pacote.
                                                             (line  151)
* Propostas de Melhorias do Python; PEP 302 <21>: pkgutil — Utilitário de extensão de pacote.
                                                             (line  191)
* Propostas de Melhorias do Python; PEP 302 <22>: runpy — Localizando e executando módulos Python.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 302 <23>: Introdução<12>.
                                                             (line   59)
* Propostas de Melhorias do Python; PEP 302 <24>: importlib abc – classes base abstratas relacionadas a importação.
                                                             (line   96)
* Propostas de Melhorias do Python; PEP 302 <25>: importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  185)
* Propostas de Melhorias do Python; PEP 302 <26>: importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  211)
* Propostas de Melhorias do Python; PEP 302 <27>: importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  287)
* Propostas de Melhorias do Python; PEP 302 <28>: Glossário. (line 1065)
* Propostas de Melhorias do Python; PEP 305: PEP 305 Comma-separated Files.
                                                             (line   42)
* Propostas de Melhorias do Python; PEP 305 <1>: csv — Leitura e escrita de arquivos CSV.
                                                             (line   38)
* Propostas de Melhorias do Python; PEP 307: PEP 307 Pickle Enhancements.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 307 <1>: PEP 307 Pickle Enhancements.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 307 <2>: PEP 307 Pickle Enhancements.
                                                             (line   42)
* Propostas de Melhorias do Python; PEP 307 <3>: Formato de fluxo de dados.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 308: PEP 308 Conditional Expressions.
                                                             (line   72)
* Propostas de Melhorias do Python; PEP 308 <1>: PEP 308 Conditional Expressions.
                                                             (line   78)
* Propostas de Melhorias do Python; PEP 308 <2>: Expressões condicionais.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 309: PEP 309 Partial Function Application.
                                                             (line   73)
* Propostas de Melhorias do Python; PEP 3100: Python 3 0.    (line   44)
* Propostas de Melhorias do Python; PEP 3101: PEP 3101 Uma nova abordagem para formatação de strings.
                                                             (line    3)
* Propostas de Melhorias do Python; PEP 3101 <1>: PEP 3101 Uma nova abordagem para formatação de strings.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 3101 <2>: PEP 3101 Advanced String Formatting.
                                                             (line  162)
* Propostas de Melhorias do Python; PEP 3101 <3>: Formatação personalizada de strings.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 3101 <4>: Formatação personalizada de strings.
                                                             (line   60)
* Propostas de Melhorias do Python; PEP 3102: Nova sintaxe.  (line   14)
* Propostas de Melhorias do Python; PEP 3104: Nova sintaxe.  (line   27)
* Propostas de Melhorias do Python; PEP 3104 <1>: A instrução nonlocal.
                                                             (line   26)
* Propostas de Melhorias do Python; PEP 3105: print é uma função.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 3105 <1>: PEP 3105 print As a Function.
                                                             (line   35)
* Propostas de Melhorias do Python; PEP 3105 <2>: Conteúdo do módulo<9>.
                                                             (line   35)
* Propostas de Melhorias do Python; PEP 3106: PEP 3106 Views de dicionário.
                                                             (line   59)
* Propostas de Melhorias do Python; PEP 3107: PEP 563 Avaliação Postergada de Anotações.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 3107 <1>: PEP 484 - Type Hints.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 3107 <2>: Nova sintaxe.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 3107 <3>: Anotações de função.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 3107 <4>: Definições de função.
                                                             (line  153)
* Propostas de Melhorias do Python; PEP 3108: Mudanças na biblioteca.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 3108 <1>: Mudanças na biblioteca.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 3108 <2>: Mudanças na biblioteca.
                                                             (line   96)
* Propostas de Melhorias do Python; PEP 3109: Sintaxe alterada.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 3109 <1>: Mudanças para exceções.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 3110: Sintaxe alterada.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 3110 <1>: Mudanças para exceções.
                                                             (line   38)
* Propostas de Melhorias do Python; PEP 3110 <2>: PEP 3110 Exception-Handling Changes.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 3111: Funções embutidas.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 3112: PEP 3112 Byte Literals.
                                                             (line   76)
* Propostas de Melhorias do Python; PEP 3112 <1>: Conteúdo do módulo<9>.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 3113: Sintaxe removida.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 3114: Operadores e métodos especiais.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 3115: types<7>.      (line   10)
* Propostas de Melhorias do Python; PEP 3115 <1>: Sintaxe alterada.
                                                             (line   18)
* Propostas de Melhorias do Python; PEP 3115 <2>: Preparando o espaço de nomes da classe.
                                                             (line   21)
* Propostas de Melhorias do Python; PEP 3115 <3>: Definições de classe.
                                                             (line   90)
* Propostas de Melhorias do Python; PEP 3115 <4>: Criação de tipos dinâmicos.
                                                             (line   55)
* Propostas de Melhorias do Python; PEP 3115 <5>: Definições de função e classe.
                                                             (line  181)
* Propostas de Melhorias do Python; PEP 3116: Otimizações<12>.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 3116 <1>: PEP 3116 New I/O Library.
                                                             (line   73)
* Propostas de Melhorias do Python; PEP 3116 <2>: Glossário. (line 1808)
* Propostas de Melhorias do Python; PEP 3118: Protocolo de Pickle 5 com buffers de dados fora da banda.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 3118 <1>: PEP 3118 New memoryview implementation and buffer protocol documentation.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 3118 <2>: Mudanças na API.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 3118 <3>: Mudanças a construções e API C<4>.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 3118 <4>: Mudanças a construções e API C<7>.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 3118 <5>: PEP 3118 Revised Buffer Protocol.
                                                             (line   46)
* Propostas de Melhorias do Python; PEP 3118 <6>: Biblioteca<148>.
                                                             (line   99)
* Propostas de Melhorias do Python; PEP 3118 <7>: Biblioteca<153>.
                                                             (line   61)
* Propostas de Melhorias do Python; PEP 3118 <8>: Biblioteca<182>.
                                                             (line  958)
* Propostas de Melhorias do Python; PEP 3118 <9>: Memory Views.
                                                             (line  116)
* Propostas de Melhorias do Python; PEP 3119: PEP 3119 Abstract Base Classes.
                                                             (line  138)
* Propostas de Melhorias do Python; PEP 3119 <1>: Personalizando verificações de instância e subclasse.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 3119 <2>: Exemplos e receitas.
                                                             (line   77)
* Propostas de Melhorias do Python; PEP 3119 <3>: abc — Classes base abstratas.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 3119 <4>: Protocolo de objeto.
                                                             (line  385)
* Propostas de Melhorias do Python; PEP 3119 <5>: Protocolo de objeto.
                                                             (line  405)
* Propostas de Melhorias do Python; PEP 3120: Texto vs Dados em vez de Unicode vs 8 bits.
                                                             (line  114)
* Propostas de Melhorias do Python; PEP 3120 <1>: Análise léxica.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 3120 <2>: Introdução<12>.
                                                             (line   91)
* Propostas de Melhorias do Python; PEP 3121: Mudanças a construções e API C<7>.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 3121 <1>: Biblioteca<122>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 3121 <2>: Inicializando módulos C.
                                                             (line   58)
* Propostas de Melhorias do Python; PEP 3123: Mudanças a construções e API C<7>.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 3127: PEP 3127 Integer Literal Support and Syntax.
                                                             (line   47)
* Propostas de Melhorias do Python; PEP 3129: PEP 3129 Class Decorators.
                                                             (line   24)
* Propostas de Melhorias do Python; PEP 3129 <1>: Definições de função.
                                                             (line  175)
* Propostas de Melhorias do Python; PEP 3129 <2>: Definições de classe.
                                                             (line   96)
* Propostas de Melhorias do Python; PEP 3131: Texto vs Dados em vez de Unicode vs 8 bits.
                                                             (line  116)
* Propostas de Melhorias do Python; PEP 3131 <1>: Biblioteca<137>.
                                                             (line  600)
* Propostas de Melhorias do Python; PEP 3131 <2>: Identificadores e palavras-chave.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 3131 <3>: Identificadores e palavras-chave.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 3132: Nova sintaxe.  (line   31)
* Propostas de Melhorias do Python; PEP 3132 <1>: Instruções de atribuição.
                                                             (line  163)
* Propostas de Melhorias do Python; PEP 3134: Sintaxe alterada.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 3134 <1>: Mudanças para exceções.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 3134 <2>: Mudanças para exceções.
                                                             (line   65)
* Propostas de Melhorias do Python; PEP 3134 <3>: Biblioteca<67>.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 3134 <4>: Classes base.
                                                             (line   32)
* Propostas de Melhorias do Python; PEP 3135: Funções embutidas.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 3135 <1>: Criando o objeto classe.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 3137: PEP 3137 O objeto memoryview.
                                                             (line   49)
* Propostas de Melhorias do Python; PEP 3138: Texto vs Dados em vez de Unicode vs 8 bits.
                                                             (line  109)
* Propostas de Melhorias do Python; PEP 314: PEP 314 Metadata for Python Software Packages v1 1.
                                                             (line   42)
* Propostas de Melhorias do Python; PEP 3141: PEP 3141 A Type Hierarchy for Numbers.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 3141 <1>: numbers — Classes base abstratas numéricas.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 3141 <2>: abc — Classes base abstratas.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 3144: ipaddress<6>.  (line   10)
* Propostas de Melhorias do Python; PEP 3147: PEP 421 Adding sys implementation.
                                                             (line   21)
* Propostas de Melhorias do Python; PEP 3147 <1>: PEP 3147 PYC Repository Directories.
                                                             (line   69)
* Propostas de Melhorias do Python; PEP 3147 <2>: Arquivos Python “compilados”.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 3147 <3>: Atributos relacionados à importação em objetos de módulo.
                                                             (line  165)
* Propostas de Melhorias do Python; PEP 3147 <4>: test support import_helper — Utilities for import tests.
                                                             (line   82)
* Propostas de Melhorias do Python; PEP 3147 <5>: runpy — Localizando e executando módulos Python.
                                                             (line   93)
* Propostas de Melhorias do Python; PEP 3147 <6>: Introdução<12>.
                                                             (line   95)
* Propostas de Melhorias do Python; PEP 3147 <7>: importlib util – Utility code for importers.
                                                             (line   24)
* Propostas de Melhorias do Python; PEP 3147 <8>: importlib util – Utility code for importers.
                                                             (line   61)
* Propostas de Melhorias do Python; PEP 3147 <9>: importlib util – Utility code for importers.
                                                             (line   65)
* Propostas de Melhorias do Python; PEP 3147 <10>: py_compile — Compila arquivos fonte do Python.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 3147 <11>: py_compile — Compila arquivos fonte do Python.
                                                             (line   73)
* Propostas de Melhorias do Python; PEP 3147 <12>: Uso na linha de comando<12>.
                                                             (line   72)
* Propostas de Melhorias do Python; PEP 3147 <13>: Funções públicas.
                                                             (line   44)
* Propostas de Melhorias do Python; PEP 3147 <14>: Funções públicas.
                                                             (line  131)
* Propostas de Melhorias do Python; PEP 3147 <15>: Importando módulos<2>.
                                                             (line  227)
* Propostas de Melhorias do Python; PEP 3147 <16>: Como faço para criar um arquivo pyc?.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 3148: PEP 3148 The concurrent futures module.
                                                             (line   51)
* Propostas de Melhorias do Python; PEP 3148 <1>: Module Functions.
                                                             (line   61)
* Propostas de Melhorias do Python; PEP 3149: PEP 3149 ABI Version Tagged so Files.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 3149 <1>: Núcleo e embutidos<177>.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 3149 <2>: sys — Parâmetros e funções específicas do sistema.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 3151: PEP 3151 Reworking the OS and IO exception hierarchy.
                                                             (line   84)
* Propostas de Melhorias do Python; PEP 3151 <1>: Exceções de sistema operacional.
                                                             (line  125)
* Propostas de Melhorias do Python; PEP 3151 <2>: Exceções<15>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 3151 <3>: select — Waiting for I/O completion.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 3151 <4>: resource — Informação de uso de recursos.
                                                             (line   24)
* Propostas de Melhorias do Python; PEP 3151 <5>: Tipos de exceção.
                                                             (line  252)
* Propostas de Melhorias do Python; PEP 3154: Resumo – Destaques da versão<10>.
                                                             (line   57)
* Propostas de Melhorias do Python; PEP 3154 <1>: pickle<4>. (line   16)
* Propostas de Melhorias do Python; PEP 3154 <2>: Biblioteca<137>.
                                                             (line 1280)
* Propostas de Melhorias do Python; PEP 3154 <3>: Formato de fluxo de dados.
                                                             (line   45)
* Propostas de Melhorias do Python; PEP 3155: PEP 3155 Qualified name for classes and functions.
                                                             (line   63)
* Propostas de Melhorias do Python; PEP 3155 <1>: Glossário. (line 1482)
* Propostas de Melhorias do Python; PEP 3156: Resumo – Destaques da versão<10>.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 3156 <1>: Resumo – Destaques da versão<10>.
                                                             (line   44)
* Propostas de Melhorias do Python; PEP 3156 <2>: asyncio<11>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 3156 <3>: asyncio<11>.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 3156 <4>: selectors<2>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 318: PEP 318 Decorators for Functions and Methods.
                                                             (line  101)
* Propostas de Melhorias do Python; PEP 318 <1>: PEP 318 Decorators for Functions and Methods.
                                                             (line  125)
* Propostas de Melhorias do Python; PEP 318 <2>: Outras mudanças na linguagem<17>.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 318 <3>: Definições de função.
                                                             (line  172)
* Propostas de Melhorias do Python; PEP 318 <4>: Definições de classe.
                                                             (line   99)
* Propostas de Melhorias do Python; PEP 322: PEP 322 Reverse Iteration.
                                                             (line   35)
* Propostas de Melhorias do Python; PEP 322 <1>: Outras mudanças na linguagem<17>.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 324: PEP 324 New subprocess Module.
                                                             (line   86)
* Propostas de Melhorias do Python; PEP 324 <1>: subprocess — Gerenciamento de subprocessos.
                                                             (line   25)
* Propostas de Melhorias do Python; PEP 325: PEP 342 New Generator Features.
                                                             (line  147)
* Propostas de Melhorias do Python; PEP 327: The Context type.
                                                             (line   56)
* Propostas de Melhorias do Python; PEP 328: Porting Python code.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 328 <1>: Sintaxe removida.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 328 <2>: PEP 328 Absolute and Relative Imports.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 328 <3>: PEP 328 Absolute and Relative Imports.
                                                             (line   82)
* Propostas de Melhorias do Python; PEP 328 <4>: PEP 328 Multi-line Imports.
                                                             (line   35)
* Propostas de Melhorias do Python; PEP 328 <5>: Outras mudanças na linguagem<17>.
                                                             (line   21)
* Propostas de Melhorias do Python; PEP 328 <6>: Referências.
                                                             (line   21)
* Propostas de Melhorias do Python; PEP 328 <7>: Funções embutidas<3>.
                                                             (line 2280)
* Propostas de Melhorias do Python; PEP 328 <8>: Conteúdo do módulo<9>.
                                                             (line   26)
* Propostas de Melhorias do Python; PEP 328 <9>: Introdução<12>.
                                                             (line   63)
* Propostas de Melhorias do Python; PEP 331: PEP 331 Locale-Independent Float/String Conversions.
                                                             (line   38)
* Propostas de Melhorias do Python; PEP 333: The wsgiref package.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 333 <1>: The wsgiref package.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 3333: Novos módulos<3>.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 3333 <1>: PEP 3333 Python Web Server Gateway Interface v1 0 1.
                                                             (line   50)
* Propostas de Melhorias do Python; PEP 3333 <2>: wsgiref — Implementação de referência e utilitários WSGI.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 3333 <3>: wsgiref util – Utilidades do ambiente WSGI.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 3333 <4>: wsgiref util – Utilidades do ambiente WSGI.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 3333 <5>: wsgiref util – Utilidades do ambiente WSGI.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 3333 <6>: wsgiref util – Utilidades do ambiente WSGI.
                                                             (line   78)
* Propostas de Melhorias do Python; PEP 3333 <7>: wsgiref headers – Ferramentas de cabeçalho de resposta WSGI.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 3333 <8>: wsgiref simple_server – um servidor HTTP WSGI simples.
                                                             (line   21)
* Propostas de Melhorias do Python; PEP 3333 <9>: wsgiref simple_server – um servidor HTTP WSGI simples.
                                                             (line  102)
* Propostas de Melhorias do Python; PEP 3333 <10>: wsgiref validate — Verificador de conformidade WSGI.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 3333 <11>: wsgiref validate — Verificador de conformidade WSGI.
                                                             (line   41)
* Propostas de Melhorias do Python; PEP 3333 <12>: wsgiref handlers – classes base de servidor/gateway.
                                                             (line  238)
* Propostas de Melhorias do Python; PEP 3333 <13>: wsgiref handlers – classes base de servidor/gateway.
                                                             (line  256)
* Propostas de Melhorias do Python; PEP 3333 <14>: wsgiref handlers – classes base de servidor/gateway.
                                                             (line  263)
* Propostas de Melhorias do Python; PEP 3333 <15>: wsgiref handlers – classes base de servidor/gateway.
                                                             (line  272)
* Propostas de Melhorias do Python; PEP 3333 <16>: wsgiref handlers – classes base de servidor/gateway.
                                                             (line  315)
* Propostas de Melhorias do Python; PEP 3333 <17>: wsgiref types – WSGI types for static type checking.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 3333 <18>: wsgiref types – WSGI types for static type checking.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 3333#input-and-error-streams: wsgiref types – WSGI types for static type checking.
                                                             (line   26)
* Propostas de Melhorias do Python; PEP 3333#input-and-error-streams <1>: wsgiref types – WSGI types for static type checking.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 3333#optional-platform-specific-file-handling: wsgiref types – WSGI types for static type checking.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 3333#the-start-response-callable: wsgiref types – WSGI types for static type checking.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 338: PEP 338 Executing Modules as Scripts.
                                                             (line   21)
* Propostas de Melhorias do Python; PEP 338 <1>: Opções de interface.
                                                             (line  106)
* Propostas de Melhorias do Python; PEP 338 <2>: Referências.
                                                             (line   25)
* Propostas de Melhorias do Python; PEP 338 <3>: runpy — Localizando e executando módulos Python.
                                                             (line  191)
* Propostas de Melhorias do Python; PEP 339: Mudanças a construções e API C<10>.
                                                             (line   46)
* Propostas de Melhorias do Python; PEP 341: PEP 341 Unified try/except/finally.
                                                             (line   44)
* Propostas de Melhorias do Python; PEP 342: PEP 342 New Generator Features.
                                                             (line   42)
* Propostas de Melhorias do Python; PEP 342 <1>: PEP 342 New Generator Features.
                                                             (line  140)
* Propostas de Melhorias do Python; PEP 342 <2>: Porting to Python 2 5.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 342 <3>: Expressões yield.
                                                             (line   97)
* Propostas de Melhorias do Python; PEP 342 <4>: Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line   58)
* Propostas de Melhorias do Python; PEP 342 <5>: Passando valores para um gerador.
                                                             (line   26)
* Propostas de Melhorias do Python; PEP 342 <6>: Documentação do Python.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 343: The contextlib module.
                                                             (line   64)
* Propostas de Melhorias do Python; PEP 343 <1>: PEP 342 New Generator Features.
                                                             (line  129)
* Propostas de Melhorias do Python; PEP 343 <2>: The contextlib module<2>.
                                                             (line   64)
* Propostas de Melhorias do Python; PEP 343 <3>: Gerenciadores de contexto da instrução with.
                                                             (line   47)
* Propostas de Melhorias do Python; PEP 343 <4>: A instrução with.
                                                             (line  113)
* Propostas de Melhorias do Python; PEP 343 <5>: Using a context manager as a function decorator.
                                                             (line   51)
* Propostas de Melhorias do Python; PEP 343 <6>: Conteúdo do módulo<9>.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 343 <7>: Glossário.  (line  358)
* Propostas de Melhorias do Python; PEP 343 <8>: Glossário.  (line  364)
* Propostas de Melhorias do Python; PEP 347: Mudanças a construções e API C<10>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 352: Mudanças para exceções.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 352 <1>: Deprecations and Removals.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 352 <2>: PEP 352 Exceptions as New-Style Classes.
                                                             (line   58)
* Propostas de Melhorias do Python; PEP 353: Portando para Python 3 10<2>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 353 <1>: PEP 353 Using ssize_t as the index type.
                                                             (line   49)
* Propostas de Melhorias do Python; PEP 353 <2>: PEP 353 Using ssize_t as the index type.
                                                             (line   55)
* Propostas de Melhorias do Python; PEP 353 <3>: Mudanças a construções e API C<10>.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 353 <4>: API C<44>.  (line   80)
* Propostas de Melhorias do Python; PEP 353 <5>: Tipos.      (line   17)
* Propostas de Melhorias do Python; PEP 356: What’s New in Python 2 5.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 357: PEP 357 The ‘__index__’ method.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 361: O que há de novo no Python 2 6.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 362: PEP 362 Function Signature Object.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 362 <1>: Introspecting callables with the Signature object.
                                                             (line  400)
* Propostas de Melhorias do Python; PEP 362 <2>: Glossário.  (line   88)
* Propostas de Melhorias do Python; PEP 362 <3>: Glossário.  (line 1356)
* Propostas de Melhorias do Python; PEP 366: Visible Changes.
                                                             (line   24)
* Propostas de Melhorias do Python; PEP 366 <1>: Atributos relacionados à importação em objetos de módulo.
                                                             (line   67)
* Propostas de Melhorias do Python; PEP 366 <2>: Referências.
                                                             (line   18)
* Propostas de Melhorias do Python; PEP 366 <3>: Referências.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 366 <4>: runpy — Localizando e executando módulos Python.
                                                             (line  195)
* Propostas de Melhorias do Python; PEP 366 <5>: Introdução<12>.
                                                             (line   67)
* Propostas de Melhorias do Python; PEP 370: PEP 370 Per-user site-packages Directory.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 370 <1>: Biblioteca<62>.
                                                             (line  605)
* Propostas de Melhorias do Python; PEP 370 <2>: Opções diversas.
                                                             (line  172)
* Propostas de Melhorias do Python; PEP 370 <3>: Variáveis de ambiente.
                                                             (line  212)
* Propostas de Melhorias do Python; PEP 370 <4>: Variáveis de ambiente.
                                                             (line  224)
* Propostas de Melhorias do Python; PEP 370 <5>: Interface de linha de comando<14>.
                                                             (line   38)
* Propostas de Melhorias do Python; PEP 371: PEP 371 The multiprocessing Package.
                                                             (line  147)
* Propostas de Melhorias do Python; PEP 372: PEP 372 Dicionários ordenados.
                                                             (line   32)
* Propostas de Melhorias do Python; PEP 372 <1>: PEP 372 Adicionando um dicionário ordenado a coleções.
                                                             (line   98)
* Propostas de Melhorias do Python; PEP 373: O futuro para o Python 2 x.
                                                             (line   25)
* Propostas de Melhorias do Python; PEP 373 <1>: Quão estável é o Python?.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 378: PEP 378 Especificador de formato para separador de milhares.
                                                             (line   32)
* Propostas de Melhorias do Python; PEP 378 <1>: PEP 378 Especificador de formato para separador de milhares<2>.
                                                             (line   37)
* Propostas de Melhorias do Python; PEP 378 <2>: Minilinguagem de especificação de formato.
                                                             (line  151)
* Propostas de Melhorias do Python; PEP 380: PEP 380 Syntax for Delegating to a Subgenerator.
                                                             (line   66)
* Propostas de Melhorias do Python; PEP 380 <1>: Expressões yield.
                                                             (line  102)
* Propostas de Melhorias do Python; PEP 380#use-of-stopiteration-to-return-values: O evento STOP_ITERATION.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 383: Documentação<25>.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 383 <1>: Error Handlers.
                                                             (line   50)
* Propostas de Melhorias do Python; PEP 383 <2>: Famílias de soquete.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 383 <3>: Locale Encoding.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 383 <4>: Locale Encoding.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 383 <5>: File System Encoding.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 384: Removidos<6>.   (line   53)
* Propostas de Melhorias do Python; PEP 384 <1>: PEP 384 Defining a Stable ABI.
                                                             (line   24)
* Propostas de Melhorias do Python; PEP 384 <2>: API C<38>.  (line  100)
* Propostas de Melhorias do Python; PEP 385: Code Repository.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 387: Avisos.         (line   26)
* Propostas de Melhorias do Python; PEP 387 <1>: Avisos.     (line   40)
* Propostas de Melhorias do Python; PEP 387 <2>: Estabilidade da API C.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 387 <3>: ABI Estável.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 387 <4>: Como funciona o esquema de numeração de versões do Python?.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 389: PEP 389 Argparse Command Line Parsing Module.
                                                             (line   92)
* Propostas de Melhorias do Python; PEP 389 <1>: PEP 389 O módulo argparse para analisar linhas de comando.
                                                             (line  104)
* Propostas de Melhorias do Python; PEP 391: PEP 391 Dictionary Based Configuration for Logging.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 391 <1>: PEP 391 Configuração baseada em dicionário para logging.
                                                             (line   97)
* Propostas de Melhorias do Python; PEP 392: O que há de novo no Python 3 2.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 393: Removidos<6>.   (line   26)
* Propostas de Melhorias do Python; PEP 393 <1>: Portando para Python 3 9<2>.
                                                             (line   46)
* Propostas de Melhorias do Python; PEP 393 <2>: Removidos<8>.
                                                             (line  101)
* Propostas de Melhorias do Python; PEP 393 <3>: PEP 393 Flexible String Representation.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 393 <4>: Funcionalidade.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 393 <5>: Desempenho e utilização de recursos.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 393 <6>: Otimizações<10>.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 393 <7>: Mudanças a construções e API C<4>.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 393 <8>: Deprecated Python modules functions and methods<4>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 393 <9>: Deprecated functions and types of the C API<3>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 393 <10>: Porting C code.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 393 <11>: API C<36>. (line  143)
* Propostas de Melhorias do Python; PEP 393 <12>: Encodings and Unicode.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 393 <13>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1324)
* Propostas de Melhorias do Python; PEP 393 <14>: Objetos Unicode.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 397: PEP 486 Make the Python Launcher aware of virtual environments.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 397 <1>: PEP 397 Python Launcher for Windows.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 397 <2>: Inicializador Python para Windows.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 398: O que há de novo no Python 3 3.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 4: Mudanças na biblioteca.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 405: PEP 405 Ambientes Virtuais.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 405 <1>: venv — Criação de ambientes virtuais.
                                                             (line   44)
* Propostas de Melhorias do Python; PEP 409: PEP 409 Suppressing exception context.
                                                             (line   63)
* Propostas de Melhorias do Python; PEP 411: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1067)
* Propostas de Melhorias do Python; PEP 411 <1>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1078)
* Propostas de Melhorias do Python; PEP 411 <2>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1807)
* Propostas de Melhorias do Python; PEP 411 <3>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1827)
* Propostas de Melhorias do Python; PEP 411 <4>: Glossário.  (line 1445)
* Propostas de Melhorias do Python; PEP 412: PEP 412 Key-Sharing Dictionary.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 412 <1>: functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line   96)
* Propostas de Melhorias do Python; PEP 414: PEP 414 Explicit Unicode literals.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 414 <1>: Literais de string e bytes.
                                                             (line   62)
* Propostas de Melhorias do Python; PEP 418: time<8>.        (line    6)
* Propostas de Melhorias do Python; PEP 420: PEP 420 Implicit Namespace Packages.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 420 <1>: PEP 420 Implicit Namespace Packages.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 420 <2>: Núcleo e embutidos<162>.
                                                             (line   56)
* Propostas de Melhorias do Python; PEP 420 <3>: Núcleo e embutidos<167>.
                                                             (line  114)
* Propostas de Melhorias do Python; PEP 420 <4>: O sistema de importação.
                                                             (line   47)
* Propostas de Melhorias do Python; PEP 420 <5>: Pacotes de espaço de nomes.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 420 <6>: Atributo __path__ dos módulos.
                                                             (line   23)
* Propostas de Melhorias do Python; PEP 420 <7>: Atributo __path__ dos módulos.
                                                             (line   24)
* Propostas de Melhorias do Python; PEP 420 <8>: Referências.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 420 <9>: Referências.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 420 <10>: Referências.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 420 <11>: Introdução<12>.
                                                             (line   71)
* Propostas de Melhorias do Python; PEP 420 <12>: Glossário. (line 1222)
* Propostas de Melhorias do Python; PEP 420 <13>: Glossário. (line 1420)
* Propostas de Melhorias do Python; PEP 421: SimpleNamespace.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 421 <1>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1191)
* Propostas de Melhorias do Python; PEP 421 <2>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1196)
* Propostas de Melhorias do Python; PEP 424: Outras mudanças na linguagem<10>.
                                                             (line   57)
* Propostas de Melhorias do Python; PEP 424 <1>: operador<3>.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 428: Resumo – Destaques da versão<10>.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 428 <1>: pathlib<11>.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 428 <2>: pathlib — Caminhos do sistema de arquivos orientados a objetos.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 429: O que há de novo no Python 3 4.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 432: Other CPython implementation changes.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 432 <1>: Núcleo e embutidos<145>.
                                                             (line  312)
* Propostas de Melhorias do Python; PEP 432 <2>: Multi-Phase Initialization Private Provisional API.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 432 <3>: Multi-Phase Initialization Private Provisional API.
                                                             (line   57)
* Propostas de Melhorias do Python; PEP 434: PEP 434 Exceção de aprimoramento do IDLE para todos os branches.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 434 <1>: idlelib — implementation of IDLE application.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 435: Resumo – Destaques da versão<10>.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 435 <1>: enum<9>.    (line    6)
* Propostas de Melhorias do Python; PEP 435 <2>: enum<9>.    (line   15)
* Propostas de Melhorias do Python; PEP 436: Resumo – Destaques da versão<10>.
                                                             (line  120)
* Propostas de Melhorias do Python; PEP 436 <1>: PEP 436 Argument Clinic.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 436 <2>: PEP 436 Argument Clinic.
                                                             (line   28)
* Propostas de Melhorias do Python; PEP 441: zipapp<2>.      (line    6)
* Propostas de Melhorias do Python; PEP 441 <1>: zipapp<2>.  (line   24)
* Propostas de Melhorias do Python; PEP 442: Removidos<7>.   (line   67)
* Propostas de Melhorias do Python; PEP 442 <1>: Resumo – Destaques da versão<10>.
                                                             (line  113)
* Propostas de Melhorias do Python; PEP 442 <2>: Resumo – Destaques da versão<10>.
                                                             (line  115)
* Propostas de Melhorias do Python; PEP 442 <3>: PEP 442 Safe Object Finalization.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 442 <4>: PEP 442 Safe Object Finalization.
                                                             (line   21)
* Propostas de Melhorias do Python; PEP 442 <5>: API C<51>.  (line   55)
* Propostas de Melhorias do Python; PEP 442 <6>: gc — Interface para o coletor de lixo.
                                                             (line  259)
* Propostas de Melhorias do Python; PEP 442 <7>: Gelo fino.  (line   38)
* Propostas de Melhorias do Python; PEP 442 <8>: Finalization and De-allocation.
                                                             (line   89)
* Propostas de Melhorias do Python; PEP 442 <9>: PyTypeObject Slots.
                                                             (line 1760)
* Propostas de Melhorias do Python; PEP 443: Resumo – Destaques da versão<10>.
                                                             (line   55)
* Propostas de Melhorias do Python; PEP 443 <1>: functools<5>.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 443 <2>: Glossário.  (line  752)
* Propostas de Melhorias do Python; PEP 445: Resumo – Destaques da versão<10>.
                                                             (line  118)
* Propostas de Melhorias do Python; PEP 445 <1>: PEP 445 Customization of CPython Memory Allocators.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 445 <2>: PEP 445 Customization of CPython Memory Allocators.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 445 <3>: Other Improvements<2>.
                                                             (line   63)
* Propostas de Melhorias do Python; PEP 446: Resumo – Destaques da versão<10>.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 446 <1>: Resumo – Destaques da versão<10>.
                                                             (line   78)
* Propostas de Melhorias do Python; PEP 446 <2>: PEP 446 Newly Created File Descriptors Are Non-Inheritable.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 446 <3>: PEP 446 Newly Created File Descriptors Are Non-Inheritable.
                                                             (line   26)
* Propostas de Melhorias do Python; PEP 446 <4>: Núcleo e embutidos<32>.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 448: PEP 448 - Additional Unpacking Generalizations.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 448 <1>: PEP 448 - Additional Unpacking Generalizations.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 448 <2>: Documentação<72>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 448 <3>: Documentação<76>.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 448 <4>: Núcleo e embutidos<170>.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 448 <5>: Núcleo e embutidos<173>.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 448 <6>: Sintaxes de criação de dicionário.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 448 <7>: Chamadas.   (line  127)
* Propostas de Melhorias do Python; PEP 448 <8>: Listas de expressões.
                                                             (line   24)
* Propostas de Melhorias do Python; PEP 450: Resumo – Destaques da versão<10>.
                                                             (line   47)
* Propostas de Melhorias do Python; PEP 450 <1>: statistics<6>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 450 <2>: statistics<6>.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 451: zipimport<2>.   (line    8)
* Propostas de Melhorias do Python; PEP 451 <1>: zipimport<3>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 451 <2>: PEP 489 Multi-phase extension module initialization.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 451 <3>: Resumo – Destaques da versão<10>.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 451 <4>: PEP 451 A ModuleSpec Type for the Import System.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 451 <5>: Biblioteca<62>.
                                                             (line  457)
* Propostas de Melhorias do Python; PEP 451 <6>: Núcleo e embutidos<162>.
                                                             (line   75)
* Propostas de Melhorias do Python; PEP 451 <7>: Referências.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 451 <8>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1356)
* Propostas de Melhorias do Python; PEP 451 <9>: pkgutil — Utilitário de extensão de pacote.
                                                             (line   71)
* Propostas de Melhorias do Python; PEP 451 <10>: pkgutil — Utilitário de extensão de pacote.
                                                             (line  106)
* Propostas de Melhorias do Python; PEP 451 <11>: runpy — Localizando e executando módulos Python.
                                                             (line   96)
* Propostas de Melhorias do Python; PEP 451 <12>: runpy — Localizando e executando módulos Python.
                                                             (line  180)
* Propostas de Melhorias do Python; PEP 451 <13>: runpy — Localizando e executando módulos Python.
                                                             (line  199)
* Propostas de Melhorias do Python; PEP 451 <14>: Introdução<12>.
                                                             (line   75)
* Propostas de Melhorias do Python; PEP 451 <15>: Inicialização multifásica.
                                                             (line   88)
* Propostas de Melhorias do Python; PEP 453: Resumo – Destaques da versão<10>.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 453 <1>: Resumo – Destaques da versão<10>.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 453 <2>: Bootstrapping pip By Default.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 453 <3>: Mudanças na documentação.
                                                             (line   21)
* Propostas de Melhorias do Python; PEP 453 <4>: ensurepip<2>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 453 <5>: venv<7>.    (line   13)
* Propostas de Melhorias do Python; PEP 453 <6>: Other Improvements<2>.
                                                             (line   73)
* Propostas de Melhorias do Python; PEP 453 <7>: PEP 477 Backport do ensurepip PEP 453 para o Python 2 7.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 453 <8>: Bootstrapping pip By Default<2>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 453 <9>: Mudanças na documentação<2>.
                                                             (line   21)
* Propostas de Melhorias do Python; PEP 453 <10>: ensurepip — Inicialização do instalador do pip.
                                                             (line   37)
* Propostas de Melhorias do Python; PEP 454: Resumo – Destaques da versão<10>.
                                                             (line   50)
* Propostas de Melhorias do Python; PEP 454 <1>: tracemalloc<4>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 454 <2>: tracemalloc<4>.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 456: Resumo – Destaques da versão<10>.
                                                             (line   75)
* Propostas de Melhorias do Python; PEP 456 <1>: PEP 456 Secure and Interchangeable Hash Algorithm.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 456 <2>: API do PyHash.
                                                             (line  143)
* Propostas de Melhorias do Python; PEP 461: PEP 461 - percent formatting support for bytes and bytearray.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 461 <1>: PEP 461 - percent formatting support for bytes and bytearray.
                                                             (line   41)
* Propostas de Melhorias do Python; PEP 461 <2>: Estilo de Formatação de bytes printf-style.
                                                             (line  203)
* Propostas de Melhorias do Python; PEP 465: PEP 465 - A dedicated infix operator for matrix multiplication.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 465 <1>: PEP 465 - A dedicated infix operator for matrix multiplication.
                                                             (line   45)
* Propostas de Melhorias do Python; PEP 465 <2>: Mudanças a construções e API C<3>.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 465 <3>: Ferramentas/Demos<54>.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 466: PEP 466 Aprimoramentos de segurança de rede do Python 2 7.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 466 <1>: PEP 466 Aprimoramentos de segurança de rede do Python 2 7.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 466 <2>: PEP 466 Aprimoramentos de segurança de rede do Python 2 7.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 466 <3>: PEP 466 Aprimoramentos de segurança de rede do Python 2 7.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 468: PEP 468 Preserving Keyword Argument Order.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 468 <1>: Biblioteca<155>.
                                                             (line   87)
* Propostas de Melhorias do Python; PEP 468 <2>: Objetos OrderedDict.
                                                             (line  107)
* Propostas de Melhorias do Python; PEP 471: PEP 471 - os scandir function – a better and faster directory iterator.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 471 <1>: PEP 471 - os scandir function – a better and faster directory iterator.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 471 <2>: Biblioteca<181>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 475: PEP 475 Retry system calls failing with EINTR.
                                                             (line   32)
* Propostas de Melhorias do Python; PEP 475 <1>: PEP 475 Retry system calls failing with EINTR.
                                                             (line   77)
* Propostas de Melhorias do Python; PEP 475 <2>: Alterações na API Python<9>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 475 <3>: Biblioteca<146>.
                                                             (line  228)
* Propostas de Melhorias do Python; PEP 475 <4>: Biblioteca<179>.
                                                             (line  143)
* Propostas de Melhorias do Python; PEP 475 <5>: Funções embutidas<3>.
                                                             (line 1554)
* Propostas de Melhorias do Python; PEP 475 <6>: Exceções de sistema operacional.
                                                             (line   81)
* Propostas de Melhorias do Python; PEP 475 <7>: Operações dos descritores de arquivos.
                                                             (line  416)
* Propostas de Melhorias do Python; PEP 475 <8>: Operações dos descritores de arquivos.
                                                             (line  773)
* Propostas de Melhorias do Python; PEP 475 <9>: Operações dos descritores de arquivos.
                                                             (line  967)
* Propostas de Melhorias do Python; PEP 475 <10>: Gerenciamento de processo.
                                                             (line  974)
* Propostas de Melhorias do Python; PEP 475 <11>: I/O Base Classes.
                                                             (line  282)
* Propostas de Melhorias do Python; PEP 475 <12>: I/O Base Classes.
                                                             (line  300)
* Propostas de Melhorias do Python; PEP 475 <13>: Funções<5>.
                                                             (line  320)
* Propostas de Melhorias do Python; PEP 475 <14>: Socket Objects.
                                                             (line   28)
* Propostas de Melhorias do Python; PEP 475 <15>: Socket Objects.
                                                             (line   82)
* Propostas de Melhorias do Python; PEP 475 <16>: Socket Objects.
                                                             (line  245)
* Propostas de Melhorias do Python; PEP 475 <17>: Socket Objects.
                                                             (line  259)
* Propostas de Melhorias do Python; PEP 475 <18>: Socket Objects.
                                                             (line  335)
* Propostas de Melhorias do Python; PEP 475 <19>: Socket Objects.
                                                             (line  409)
* Propostas de Melhorias do Python; PEP 475 <20>: Socket Objects.
                                                             (line  428)
* Propostas de Melhorias do Python; PEP 475 <21>: Socket Objects.
                                                             (line  447)
* Propostas de Melhorias do Python; PEP 475 <22>: Socket Objects.
                                                             (line  491)
* Propostas de Melhorias do Python; PEP 475 <23>: select — Waiting for I/O completion.
                                                             (line  161)
* Propostas de Melhorias do Python; PEP 475 <24>: /dev/poll Polling Objects.
                                                             (line   82)
* Propostas de Melhorias do Python; PEP 475 <25>: Edge and Level Trigger Polling epoll Objects.
                                                             (line  102)
* Propostas de Melhorias do Python; PEP 475 <26>: Polling Objects.
                                                             (line   94)
* Propostas de Melhorias do Python; PEP 475 <27>: Kqueue Objects.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 475 <28>: Classes<4>.
                                                             (line  133)
* Propostas de Melhorias do Python; PEP 475 <29>: Conteúdo do módulo<5>.
                                                             (line  633)
* Propostas de Melhorias do Python; PEP 475 <30>: Conteúdo do módulo<5>.
                                                             (line  654)
* Propostas de Melhorias do Python; PEP 476: PEP 476 Habilitando verificação de certificado por padrão para clientes http stdlib<2>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 477: PEP 477 Backport do ensurepip PEP 453 para o Python 2 7.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 478: O que há de novo no Python 3 5.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 479: Changes in Python Behavior.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 479 <1>: PEP 479 Change StopIteration handling inside generators.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 479 <2>: PEP 479 Change StopIteration handling inside generators.
                                                             (line   47)
* Propostas de Melhorias do Python; PEP 479 <3>: Biblioteca<137>.
                                                             (line 1268)
* Propostas de Melhorias do Python; PEP 479 <4>: Biblioteca<141>.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 479 <5>: Núcleo e embutidos<141>.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 479 <6>: Biblioteca<149>.
                                                             (line   95)
* Propostas de Melhorias do Python; PEP 479 <7>: Biblioteca<162>.
                                                             (line   80)
* Propostas de Melhorias do Python; PEP 479 <8>: Biblioteca<168>.
                                                             (line  326)
* Propostas de Melhorias do Python; PEP 479 <9>: Exceções concretas.
                                                             (line  299)
* Propostas de Melhorias do Python; PEP 479 <10>: Exceções concretas.
                                                             (line  301)
* Propostas de Melhorias do Python; PEP 479 <11>: Conteúdo do módulo<9>.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 483: PEP 484 - Type Hints.
                                                             (line   47)
* Propostas de Melhorias do Python; PEP 483 <1>: Glossário.  (line  761)
* Propostas de Melhorias do Python; PEP 484: PEP 695 Sintaxe do parâmetro de tipo.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 484 <1>: Novos recursos relacionados a dicas de tipo.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 484 <2>: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 484 <3>: Novos recursos relacionados a dicas de tipo<2>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 484 <4>: PEP 646 Genéricos variádicos.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 484 <5>: Novos recursos relacionados a dicas de tipo<3>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 484 <6>: PEP 612 variáveis de especificação de parâmetros.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 484 <7>: PEP 613 TypeAlias.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 484 <8>: ast<3>.     (line   18)
* Propostas de Melhorias do Python; PEP 484 <9>: ast<3>.     (line   21)
* Propostas de Melhorias do Python; PEP 484 <10>: PEP 560 Suporte básico para módulo typing e tipos genéricos.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 484 <11>: PEP 526 Syntax for variable annotations.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 484 <12>: PEP 484 - Type Hints.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 484 <13>: PEP 484 - Type Hints.
                                                             (line   41)
* Propostas de Melhorias do Python; PEP 484 <14>: Anotações de função.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 484 <15>: Emulando tipos genéricos.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 484 <16>: instruções de atribuição anotado.
                                                             (line   49)
* Propostas de Melhorias do Python; PEP 484 <17>: Definições de função.
                                                             (line  157)
* Propostas de Melhorias do Python; PEP 484 <18>: Atributos especiais de objetos GenericAlias.
                                                             (line   51)
* Propostas de Melhorias do Python; PEP 484 <19>: NewType.   (line   65)
* Propostas de Melhorias do Python; PEP 484 <20>: Subtipagem nominal vs estrutural.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 484 <21>: Subtipagem nominal vs estrutural.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 484 <22>: Criando tipos genéricos e apelidos de tipo.
                                                             (line  115)
* Propostas de Melhorias do Python; PEP 484 <23>: Funções e decoradores.
                                                             (line  286)
* Propostas de Melhorias do Python; PEP 484 <24>: Nós raízes.
                                                             (line   60)
* Propostas de Melhorias do Python; PEP 484 <25>: Auxiliares de ast.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 484 <26>: Auxiliares de ast.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 484 <27>: Sinalizadores do compilador<2>.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 484 <28>: Símbolos iniciais disponíveis.
                                                             (line   28)
* Propostas de Melhorias do Python; PEP 484 <29>: Símbolos iniciais disponíveis.
                                                             (line   38)
* Propostas de Melhorias do Python; PEP 484 <30>: Glossário. (line   53)
* Propostas de Melhorias do Python; PEP 484 <31>: Glossário. (line  682)
* Propostas de Melhorias do Python; PEP 484 <32>: Glossário. (line  762)
* Propostas de Melhorias do Python; PEP 484 <33>: Glossário. (line 1783)
* Propostas de Melhorias do Python; PEP 484 <34>: Glossário. (line 1800)
* Propostas de Melhorias do Python; PEP 484 <35>: Glossário. (line 1831)
* Propostas de Melhorias do Python; PEP 484#annotating-instance-and-class-methods: PEP 673 Tipo Self.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 485: PEP 485 A function for testing approximate equality.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 485 <1>: PEP 485 A function for testing approximate equality.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 485 <2>: Biblioteca<177>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 485 <3>: Funções de manipulação de ponto flutuante.
                                                             (line   59)
* Propostas de Melhorias do Python; PEP 485 <4>: Funções de classificação.
                                                             (line   56)
* Propostas de Melhorias do Python; PEP 486: PEP 486 Make the Python Launcher aware of virtual environments.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 486 <1>: PEP 486 Make the Python Launcher aware of virtual environments.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 486 <2>: Windows<79>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 487: PEP 487 Simpler customization of class creation.
                                                             (line   32)
* Propostas de Melhorias do Python; PEP 487 <1>: PEP 487 Descriptor Protocol Enhancements.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 487 <2>: PEP 487 Descriptor Protocol Enhancements.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 487 <3>: Alterações na API Python<8>.
                                                             (line  103)
* Propostas de Melhorias do Python; PEP 487 <4>: Documentação<62>.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 487 <5>: Documentação<69>.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 487 <6>: Núcleo e embutidos<159>.
                                                             (line   46)
* Propostas de Melhorias do Python; PEP 488: PEP 488 Elimination of PYO files.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 488 <1>: PEP 488 Elimination of PYO files.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 488 <2>: Alterações na API Python<9>.
                                                             (line   79)
* Propostas de Melhorias do Python; PEP 488 <3>: Núcleo e embutidos<177>.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 488 <4>: Opções diversas.
                                                             (line   91)
* Propostas de Melhorias do Python; PEP 488 <5>: Opções diversas.
                                                             (line   95)
* Propostas de Melhorias do Python; PEP 488 <6>: Opções diversas.
                                                             (line  102)
* Propostas de Melhorias do Python; PEP 488 <7>: Opções diversas.
                                                             (line  105)
* Propostas de Melhorias do Python; PEP 488 <8>: test support import_helper — Utilities for import tests.
                                                             (line   82)
* Propostas de Melhorias do Python; PEP 488 <9>: Introdução<12>.
                                                             (line   79)
* Propostas de Melhorias do Python; PEP 488 <10>: importlib util – Utility code for importers.
                                                             (line   24)
* Propostas de Melhorias do Python; PEP 488 <11>: importlib util – Utility code for importers.
                                                             (line   65)
* Propostas de Melhorias do Python; PEP 488 <12>: py_compile — Compila arquivos fonte do Python.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 489: PEP 489 Multi-phase extension module initialization.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 489 <1>: PEP 489 Multi-phase extension module initialization.
                                                             (line   18)
* Propostas de Melhorias do Python; PEP 489 <2>: Mudanças a construções e API C<3>.
                                                             (line   37)
* Propostas de Melhorias do Python; PEP 489 <3>: Biblioteca<29>.
                                                             (line  270)
* Propostas de Melhorias do Python; PEP 489 <4>: Biblioteca<46>.
                                                             (line   24)
* Propostas de Melhorias do Python; PEP 489 <5>: Biblioteca<101>.
                                                             (line   64)
* Propostas de Melhorias do Python; PEP 489 <6>: Biblioteca<101>.
                                                             (line   79)
* Propostas de Melhorias do Python; PEP 489 <7>: Biblioteca<103>.
                                                             (line   28)
* Propostas de Melhorias do Python; PEP 489 <8>: Biblioteca<104>.
                                                             (line   68)
* Propostas de Melhorias do Python; PEP 489 <9>: Biblioteca<104>.
                                                             (line  177)
* Propostas de Melhorias do Python; PEP 489 <10>: Biblioteca<105>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 489 <11>: Biblioteca<108>.
                                                             (line  103)
* Propostas de Melhorias do Python; PEP 489 <12>: API C<42>. (line   11)
* Propostas de Melhorias do Python; PEP 489 <13>: API C<42>. (line   14)
* Propostas de Melhorias do Python; PEP 489 <14>: API C<42>. (line   17)
* Propostas de Melhorias do Python; PEP 489 <15>: API C<42>. (line   20)
* Propostas de Melhorias do Python; PEP 489 <16>: API C<42>. (line   23)
* Propostas de Melhorias do Python; PEP 489 <17>: API C<42>. (line   26)
* Propostas de Melhorias do Python; PEP 489 <18>: API C<42>. (line   29)
* Propostas de Melhorias do Python; PEP 489 <19>: API C<42>. (line   38)
* Propostas de Melhorias do Python; PEP 489 <20>: API C<42>. (line   41)
* Propostas de Melhorias do Python; PEP 489 <21>: API C<42>. (line   44)
* Propostas de Melhorias do Python; PEP 489 <22>: API C<42>. (line   47)
* Propostas de Melhorias do Python; PEP 489 <23>: Biblioteca<110>.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 489 <24>: Biblioteca<111>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 489 <25>: Biblioteca<112>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 489 <26>: Biblioteca<112>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 489 <27>: Biblioteca<112>.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 489 <28>: Biblioteca<112>.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 489 <29>: Biblioteca<113>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 489 <30>: Biblioteca<113>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 489 <31>: Biblioteca<113>.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 489 <32>: Biblioteca<115>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 489 <33>: Biblioteca<117>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 489 <34>: Biblioteca<118>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 489 <35>: Biblioteca<125>.
                                                             (line   75)
* Propostas de Melhorias do Python; PEP 489 <36>: Biblioteca<125>.
                                                             (line   78)
* Propostas de Melhorias do Python; PEP 489 <37>: Biblioteca<125>.
                                                             (line  423)
* Propostas de Melhorias do Python; PEP 489 <38>: Núcleo e embutidos<124>.
                                                             (line   28)
* Propostas de Melhorias do Python; PEP 489 <39>: Núcleo e embutidos<124>.
                                                             (line   35)
* Propostas de Melhorias do Python; PEP 489 <40>: Núcleo e embutidos<124>.
                                                             (line   50)
* Propostas de Melhorias do Python; PEP 489 <41>: Núcleo e embutidos<125>.
                                                             (line   46)
* Propostas de Melhorias do Python; PEP 489 <42>: Núcleo e embutidos<125>.
                                                             (line   49)
* Propostas de Melhorias do Python; PEP 489 <43>: Núcleo e embutidos<125>.
                                                             (line   51)
* Propostas de Melhorias do Python; PEP 489 <44>: Núcleo e embutidos<125>.
                                                             (line   71)
* Propostas de Melhorias do Python; PEP 489 <45>: Núcleo e embutidos<125>.
                                                             (line   75)
* Propostas de Melhorias do Python; PEP 489 <46>: Núcleo e embutidos<126>.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 489 <47>: Núcleo e embutidos<126>.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 489 <48>: Núcleo e embutidos<126>.
                                                             (line   40)
* Propostas de Melhorias do Python; PEP 489 <49>: Núcleo e embutidos<126>.
                                                             (line   54)
* Propostas de Melhorias do Python; PEP 489 <50>: Núcleo e embutidos<126>.
                                                             (line  110)
* Propostas de Melhorias do Python; PEP 489 <51>: Núcleo e embutidos<126>.
                                                             (line  119)
* Propostas de Melhorias do Python; PEP 489 <52>: Núcleo e embutidos<127>.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 489 <53>: Núcleo e embutidos<127>.
                                                             (line   32)
* Propostas de Melhorias do Python; PEP 489 <54>: Núcleo e embutidos<127>.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 489 <55>: Núcleo e embutidos<127>.
                                                             (line   55)
* Propostas de Melhorias do Python; PEP 489 <56>: Núcleo e embutidos<127>.
                                                             (line   58)
* Propostas de Melhorias do Python; PEP 489 <57>: Núcleo e embutidos<128>.
                                                             (line   62)
* Propostas de Melhorias do Python; PEP 489 <58>: Introdução<12>.
                                                             (line   83)
* Propostas de Melhorias do Python; PEP 489 <59>: importlib machinery – Importadores e ganchos de caminho.
                                                             (line   79)
* Propostas de Melhorias do Python; PEP 489 <60>: importlib machinery – Importadores e ganchos de caminho.
                                                             (line  307)
* Propostas de Melhorias do Python; PEP 489 <61>: importlib machinery – Importadores e ganchos de caminho.
                                                             (line  326)
* Propostas de Melhorias do Python; PEP 489 <62>: importlib machinery – Importadores e ganchos de caminho.
                                                             (line  332)
* Propostas de Melhorias do Python; PEP 489 <63>: importlib util – Utility code for importers.
                                                             (line  187)
* Propostas de Melhorias do Python; PEP 489 <64>: Criando extensões sem ferramentas de terceiros.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 489 <65>: Construindo extensões C e C++.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 489 <66>: Inicialização multifásica.
                                                             (line  187)
* Propostas de Melhorias do Python; PEP 489 <67>: Sub-interpreter support.
                                                             (line   81)
* Propostas de Melhorias do Python; PEP 492: PEP 525 Asynchronous Generators.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 492 <1>: New Keywords.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 492 <2>: PEP 492 - Coroutines with async and await syntax.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 492 <3>: PEP 492 - Coroutines with async and await syntax.
                                                             (line   97)
* Propostas de Melhorias do Python; PEP 492 <4>: New Keywords<2>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 492 <5>: Alterações na API C<14>.
                                                             (line   25)
* Propostas de Melhorias do Python; PEP 492 <6>: Núcleo e embutidos<144>.
                                                             (line   98)
* Propostas de Melhorias do Python; PEP 492 <7>: Biblioteca<163>.
                                                             (line   51)
* Propostas de Melhorias do Python; PEP 492 <8>: Biblioteca<169>.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 492 <9>: Núcleo e embutidos<174>.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 492 <10>: Objetos aguardáveis.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 492 <11>: Expressões yield.
                                                             (line  109)
* Propostas de Melhorias do Python; PEP 492 <12>: A instrução async with.
                                                             (line   45)
* Propostas de Melhorias do Python; PEP 492 <13>: Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  190)
* Propostas de Melhorias do Python; PEP 492 <14>: Code Objects Bit Flags.
                                                             (line   38)
* Propostas de Melhorias do Python; PEP 492 <15>: Code Objects Bit Flags.
                                                             (line   47)
* Propostas de Melhorias do Python; PEP 492 <16>: Glossário. (line   94)
* Propostas de Melhorias do Python; PEP 492 <17>: Glossário. (line  127)
* Propostas de Melhorias do Python; PEP 492 <18>: Glossário. (line  134)
* Propostas de Melhorias do Python; PEP 492 <19>: Glossário. (line  143)
* Propostas de Melhorias do Python; PEP 492 <20>: Glossário. (line  173)
* Propostas de Melhorias do Python; PEP 492 <21>: Glossário. (line  391)
* Propostas de Melhorias do Python; PEP 492 <22>: Glossário. (line  399)
* Propostas de Melhorias do Python; PEP 493: PEP 493 Ferramentas de migração de verificação HTTPS para Python 2 7.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 494: What’s New In Python 3 6.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 495: PEP 495 Local Time Disambiguation.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 495 <1>: PEP 495 Local Time Disambiguation.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 495 <2>: Biblioteca<161>.
                                                             (line   96)
* Propostas de Melhorias do Python; PEP 495 <3>: Usando ZoneInfo.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 498: PEP 498 Formatted string literals.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 498 <1>: PEP 498 Formatted string literals.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 498 <2>: Núcleo e embutidos<162>.
                                                             (line  283)
* Propostas de Melhorias do Python; PEP 498 <3>: f-strings.  (line  157)
* Propostas de Melhorias do Python; PEP 498 <4>: Glossário.  (line  573)
* Propostas de Melhorias do Python; PEP 5: PEP 230 Warning Framework.
                                                             (line   66)
* Propostas de Melhorias do Python; PEP 5 <1>: É razoável propor mudanças incompatíveis com o Python?.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 506: segredos.       (line   19)
* Propostas de Melhorias do Python; PEP 506 <1>: Biblioteca<164>.
                                                             (line   60)
* Propostas de Melhorias do Python; PEP 506 <2>: secrets — Gera números aleatórios seguros para gerenciar segredos.
                                                             (line   25)
* Propostas de Melhorias do Python; PEP 511: Alterações na API Python<8>.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 514: Melhorias no inicializador py exe do Windows.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 514 <1>: Windows<28>.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 514 <2>: Windows<71>.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 514 <3>: Pela linha de comando.
                                                             (line   45)
* Propostas de Melhorias do Python; PEP 515: fractions<3>.   (line    6)
* Propostas de Melhorias do Python; PEP 515 <1>: PEP 515 Underscores in Numeric Literals.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 515 <2>: PEP 515 Underscores in Numeric Literals.
                                                             (line   32)
* Propostas de Melhorias do Python; PEP 515 <3>: Núcleo e embutidos<158>.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 515 <4>: Núcleo e embutidos<158>.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 515 <5>: Minilinguagem de especificação de formato.
                                                             (line  154)
* Propostas de Melhorias do Python; PEP 515 <6>: fractions — Números racionais.
                                                             (line   98)
* Propostas de Melhorias do Python; PEP 519: PEP 519 Adding a file system path protocol.
                                                             (line   62)
* Propostas de Melhorias do Python; PEP 519 <1>: Biblioteca<161>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 519 <2>: Núcleo e embutidos<161>.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 519 <3>: Biblioteca<163>.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 519 <4>: Biblioteca<163>.
                                                             (line   42)
* Propostas de Melhorias do Python; PEP 519 <5>: Biblioteca<163>.
                                                             (line   44)
* Propostas de Melhorias do Python; PEP 519 <6>: API C<72>.  (line    6)
* Propostas de Melhorias do Python; PEP 519 <7>: Glossário.  (line 1397)
* Propostas de Melhorias do Python; PEP 520: PEP 520 Preserving Class Attribute Definition Order.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 523: Novas funcionalidades<4>.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 523 <1>: Portando para Python 3 11<2>.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 523 <2>: Portando para Python 3 9<2>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 523 <3>: PEP 523 Adding a frame evaluation API to CPython.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 523 <4>: PEP 523 Adding a frame evaluation API to CPython.
                                                             (line   26)
* Propostas de Melhorias do Python; PEP 523 <5>: Núcleo e embutidos<35>.
                                                             (line   23)
* Propostas de Melhorias do Python; PEP 523 <6>: Ferramentas/Demos<36>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 523 <7>: Ferramentas/Demos<40>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 523 <8>: Núcleo e embutidos<158>.
                                                             (line   83)
* Propostas de Melhorias do Python; PEP 523 <9>: Internal Frames.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 523 <10>: Low-level API.
                                                             (line  188)
* Propostas de Melhorias do Python; PEP 523 <11>: Low-level API.
                                                             (line  197)
* Propostas de Melhorias do Python; PEP 524: Resumo – Destaques da versão<8>.
                                                             (line   77)
* Propostas de Melhorias do Python; PEP 524 <1>: os<8>.      (line   20)
* Propostas de Melhorias do Python; PEP 524 <2>: os<8>.      (line   25)
* Propostas de Melhorias do Python; PEP 524 <3>: Biblioteca<160>.
                                                             (line  150)
* Propostas de Melhorias do Python; PEP 524 <4>: Biblioteca<160>.
                                                             (line  154)
* Propostas de Melhorias do Python; PEP 524 <5>: Números aleatórios<2>.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 525: PEP 525 Asynchronous Generators.
                                                             (line   23)
* Propostas de Melhorias do Python; PEP 525 <1>: Núcleo e embutidos<158>.
                                                             (line   49)
* Propostas de Melhorias do Python; PEP 525 <2>: Expressões yield.
                                                             (line  107)
* Propostas de Melhorias do Python; PEP 525 <3>: Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  190)
* Propostas de Melhorias do Python; PEP 525 <4>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1065)
* Propostas de Melhorias do Python; PEP 525 <5>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1802)
* Propostas de Melhorias do Python; PEP 525 <6>: Code Objects Bit Flags.
                                                             (line   56)
* Propostas de Melhorias do Python; PEP 525 <7>: Objetos geradores assíncronos.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 525 <8>: Glossário.  (line  128)
* Propostas de Melhorias do Python; PEP 526: Outras mudanças na linguagem<4>.
                                                             (line   58)
* Propostas de Melhorias do Python; PEP 526 <1>: ast<3>.     (line   18)
* Propostas de Melhorias do Python; PEP 526 <2>: PEP 563 Avaliação Postergada de Anotações.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 526 <3>: PEP 526 Syntax for variable annotations.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 526 <4>: typing<9>.  (line   23)
* Propostas de Melhorias do Python; PEP 526 <5>: Núcleo e embutidos<158>.
                                                             (line   51)
* Propostas de Melhorias do Python; PEP 526 <6>: instruções de atribuição anotado.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 526 <7>: Definições de função.
                                                             (line  161)
* Propostas de Melhorias do Python; PEP 526 <8>: Formas especiais.
                                                             (line  200)
* Propostas de Melhorias do Python; PEP 526 <9>: Outras diretivas especiais.
                                                             (line   72)
* Propostas de Melhorias do Python; PEP 526 <10>: dataclasses — Data Classes.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 526 <11>: Variáveis de classe.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 526 <12>: Auxiliares de ast.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 526 <13>: Sinalizadores do compilador<2>.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 526 <14>: Glossário. (line   53)
* Propostas de Melhorias do Python; PEP 526 <15>: Glossário. (line 1831)
* Propostas de Melhorias do Python; PEP 528: PEP 528 Change Windows console encoding to UTF-8.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 528 <1>: Modo UTF-8. (line   36)
* Propostas de Melhorias do Python; PEP 528 <2>: Variáveis de configuração global.
                                                             (line  185)
* Propostas de Melhorias do Python; PEP 528 <3>: PyConfig.   (line  544)
* Propostas de Melhorias do Python; PEP 529: Alterações na API Python<5>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 529 <1>: PEP 529 Change Windows filesystem encoding to UTF-8.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 529 <2>: Documentação<25>.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 529 <3>: Biblioteca<132>.
                                                             (line  619)
* Propostas de Melhorias do Python; PEP 529 <4>: Windows<66>.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 529 <5>: Variáveis de ambiente.
                                                             (line  364)
* Propostas de Melhorias do Python; PEP 529 <6>: Modo UTF-8. (line   39)
* Propostas de Melhorias do Python; PEP 529 <7>: Arquivos e diretórios.
                                                             (line  314)
* Propostas de Melhorias do Python; PEP 529 <8>: sys — Parâmetros e funções específicas do sistema.
                                                             (line  839)
* Propostas de Melhorias do Python; PEP 529 <9>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1887)
* Propostas de Melhorias do Python; PEP 529 <10>: File System Encoding.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 529 <11>: Variáveis de configuração global.
                                                             (line  165)
* Propostas de Melhorias do Python; PEP 530: PEP 530 Asynchronous Comprehensions.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 530 <1>: PEP 530 Asynchronous Comprehensions.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 530 <2>: Núcleo e embutidos<158>.
                                                             (line  145)
* Propostas de Melhorias do Python; PEP 530 <3>: Sintaxe de criação de listas conjuntos e dicionários.
                                                             (line   57)
* Propostas de Melhorias do Python; PEP 538: PEP 538 Coerção de localidade C legada.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 538 <1>: PEP 538 Coerção de localidade C legada.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 538 <2>: PEP 538 Coerção de localidade C legada.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 538 <3>: PEP 540 Modo de tempo de execução UTF-8 forçado.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 538 <4>: Documentação<52>.
                                                             (line   68)
* Propostas de Melhorias do Python; PEP 538 <5>: Documentação<53>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 538 <6>: Núcleo e embutidos<145>.
                                                             (line  134)
* Propostas de Melhorias do Python; PEP 538 <7>: Variáveis de ambiente.
                                                             (line  438)
* Propostas de Melhorias do Python; PEP 538 <8>: Opções gerais.
                                                             (line   89)
* Propostas de Melhorias do Python; PEP 538 <9>: locale — Serviços de internacionalização.
                                                             (line  541)
* Propostas de Melhorias do Python; PEP 538 <10>: Configuração do Python.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 539: PEP 539 Nova API C para armazenamento local de thread.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 539 <1>: PEP 539 Nova API C para armazenamento local de thread.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 539 <2>: API C<61>.  (line   13)
* Propostas de Melhorias do Python; PEP 539 <3>: Thread Specific Storage TSS API.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 540: PEP 540 Modo de tempo de execução UTF-8 forçado.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 540 <1>: PEP 540 Modo de tempo de execução UTF-8 forçado.
                                                             (line   37)
* Propostas de Melhorias do Python; PEP 540 <2>: Núcleo e embutidos<142>.
                                                             (line   63)
* Propostas de Melhorias do Python; PEP 540 <3>: Modo UTF-8 do Python.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 540 <4>: locale — Serviços de internacionalização.
                                                             (line  541)
* Propostas de Melhorias do Python; PEP 540 <5>: Configuração do Python.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 544: typing<8>.      (line   33)
* Propostas de Melhorias do Python; PEP 544 <1>: Subtipagem nominal vs estrutural.
                                                             (line   25)
* Propostas de Melhorias do Python; PEP 544 <2>: Outras diretivas especiais.
                                                             (line  160)
* Propostas de Melhorias do Python; PEP 545: PEP 545 Traduções da documentação do Python.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 545 <1>: PEP 545 Traduções da documentação do Python.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 552: Outras mudanças na implementação do CPython.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 552 <1>: PEP 552 Arquivos pyc baseados em hash.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 552 <2>: PEP 552 Arquivos pyc baseados em hash.
                                                             (line   40)
* Propostas de Melhorias do Python; PEP 552 <3>: Biblioteca<137>.
                                                             (line  795)
* Propostas de Melhorias do Python; PEP 552 <4>: Núcleo e embutidos<142>.
                                                             (line   75)
* Propostas de Melhorias do Python; PEP 552 <5>: Introdução<12>.
                                                             (line   87)
* Propostas de Melhorias do Python; PEP 552 <6>: py_compile — Compila arquivos fonte do Python.
                                                             (line   87)
* Propostas de Melhorias do Python; PEP 552 <7>: PyConfig.   (line  275)
* Propostas de Melhorias do Python; PEP 553: PEP 553 breakpoint embutida.
                                                             (line   21)
* Propostas de Melhorias do Python; PEP 553 <1>: Núcleo e embutidos<144>.
                                                             (line   72)
* Propostas de Melhorias do Python; PEP 554: PEP 684 Uma GIL por interpretador.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 554 <1>: A Per-Interpreter GIL.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 557: dataclasses<3>. (line   26)
* Propostas de Melhorias do Python; PEP 557 <1>: dataclasses — Data Classes.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 560: PEP 560 Suporte básico para módulo typing e tipos genéricos.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 560 <1>: types<4>.   (line   12)
* Propostas de Melhorias do Python; PEP 560 <2>: Núcleo e embutidos<142>.
                                                             (line   66)
* Propostas de Melhorias do Python; PEP 560 <3>: Resolvendo entradas de MRO.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 560 <4>: __class_getitem__ versus __getitem__.
                                                             (line   85)
* Propostas de Melhorias do Python; PEP 560 <5>: Criação de tipos dinâmicos.
                                                             (line   61)
* Propostas de Melhorias do Python; PEP 560 <6>: Criação de tipos dinâmicos.
                                                             (line   77)
* Propostas de Melhorias do Python; PEP 560 <7>: Criação de tipos dinâmicos.
                                                             (line  115)
* Propostas de Melhorias do Python; PEP 562: PEP 562 Personalização de acesso aos atributos do módulo.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 562 <1>: Biblioteca<144>.
                                                             (line   63)
* Propostas de Melhorias do Python; PEP 562 <2>: Núcleo e embutidos<142>.
                                                             (line   69)
* Propostas de Melhorias do Python; PEP 562 <3>: Personalizando acesso a atributos de módulos.
                                                             (line   59)
* Propostas de Melhorias do Python; PEP 563: PEP 563 pode não ser o futuro.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 563 <1>: PEP 563 Avaliação Postergada de Anotações.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 563 <2>: Biblioteca<94>.
                                                             (line  300)
* Propostas de Melhorias do Python; PEP 563 <3>: Núcleo e embutidos<108>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 563 <4>: Instruções future.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 563 <5>: Definições de função.
                                                             (line  166)
* Propostas de Melhorias do Python; PEP 563 <6>: Constante.  (line   29)
* Propostas de Melhorias do Python; PEP 563 <7>: Conteúdo do módulo<9>.
                                                             (line  132)
* Propostas de Melhorias do Python; PEP 563 <8>: Conteúdo do módulo<9>.
                                                             (line   47)
* Propostas de Melhorias do Python; PEP 564: PEP 564 Novas funções de tempo com resolução de nanossegundos.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 564 <1>: PEP 564 Novas funções de tempo com resolução de nanossegundos.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 564 <2>: time<5>.    (line    6)
* Propostas de Melhorias do Python; PEP 564 <3>: Biblioteca<146>.
                                                             (line  299)
* Propostas de Melhorias do Python; PEP 565: PEP 565 Mostra DeprecationWarning em __main__.
                                                             (line   44)
* Propostas de Melhorias do Python; PEP 565 <1>: Avisos.     (line   23)
* Propostas de Melhorias do Python; PEP 566: Metadados de distribuição.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 567: contextvars.    (line   21)
* Propostas de Melhorias do Python; PEP 567 <1>: asyncio<7>. (line   19)
* Propostas de Melhorias do Python; PEP 567 <2>: Documentação<52>.
                                                             (line   86)
* Propostas de Melhorias do Python; PEP 567 <3>: Documentação<54>.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 567 <4>: Núcleo e embutidos<141>.
                                                             (line   63)
* Propostas de Melhorias do Python; PEP 567 <5>: contextvars — Variáveis de contexto.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 567 <6>: Agendando funções de retorno.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 567 <7>: Agendando funções de retorno atrasadas.
                                                             (line   37)
* Propostas de Melhorias do Python; PEP 567 <8>: Agendando funções de retorno atrasadas.
                                                             (line   59)
* Propostas de Melhorias do Python; PEP 567 <9>: Objeto Future.
                                                             (line  106)
* Propostas de Melhorias do Python; PEP 570: Parâmetros somente-posicionais.
                                                             (line   72)
* Propostas de Melhorias do Python; PEP 570 <1>: Núcleo e embutidos<132>.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 570 <2>: Definições de função.
                                                             (line  111)
* Propostas de Melhorias do Python; PEP 572: Outras mudanças na linguagem<2>.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 572 <1>: Expressões de atribuição.
                                                             (line   44)
* Propostas de Melhorias do Python; PEP 572 <2>: Alterações de bytecode do CPython<6>.
                                                             (line   28)
* Propostas de Melhorias do Python; PEP 572 <3>: Núcleo e embutidos<43>.
                                                             (line   40)
* Propostas de Melhorias do Python; PEP 572 <4>: Documentação<43>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 572 <5>: Núcleo e embutidos<130>.
                                                             (line  184)
* Propostas de Melhorias do Python; PEP 572 <6>: Núcleo e embutidos<135>.
                                                             (line   92)
* Propostas de Melhorias do Python; PEP 572 <7>: Sintaxes de criação de dicionário.
                                                             (line   49)
* Propostas de Melhorias do Python; PEP 572 <8>: Expressões de atribuição<2>.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 572 <9>: Padrões de captura.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 572 <10>: Por que não posso usar uma atribuição em uma expressão?.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 573: Resumo – Destaques da versão<5>.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 573 <1>: Novas funcionalidades<10>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 573 <2>: Núcleo e embutidos<124>.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 573 <3>: API C<45>.  (line   57)
* Propostas de Melhorias do Python; PEP 574: Protocolo de Pickle 5 com buffers de dados fora da banda.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 574 <1>: Formato de fluxo de dados.
                                                             (line   50)
* Propostas de Melhorias do Python; PEP 574 <2>: Exemplo<4>. (line   68)
* Propostas de Melhorias do Python; PEP 578: PEP 578 Ganchos de auditoria em tempo de execução Python.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 578 <1>: Tabela de eventos de auditoria.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 578 <2>: sys — Parâmetros e funções específicas do sistema.
                                                             (line   61)
* Propostas de Melhorias do Python; PEP 578 <3>: Funções de sistema.
                                                             (line  145)
* Propostas de Melhorias do Python; PEP 584: Resumo – Destaques da versão<5>.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 584 <1>: Operadores de mesclagem & atualização de dicionário.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 584 <2>: Biblioteca<127>.
                                                             (line  193)
* Propostas de Melhorias do Python; PEP 584 <3>: Biblioteca<127>.
                                                             (line  196)
* Propostas de Melhorias do Python; PEP 584 <4>: Biblioteca<127>.
                                                             (line  210)
* Propostas de Melhorias do Python; PEP 584 <5>: Biblioteca<128>.
                                                             (line   49)
* Propostas de Melhorias do Python; PEP 584 <6>: Biblioteca<128>.
                                                             (line   62)
* Propostas de Melhorias do Python; PEP 584 <7>: Biblioteca<128>.
                                                             (line  120)
* Propostas de Melhorias do Python; PEP 584 <8>: Biblioteca<128>.
                                                             (line  142)
* Propostas de Melhorias do Python; PEP 584 <9>: Objetos ChainMap.
                                                             (line   95)
* Propostas de Melhorias do Python; PEP 584 <10>: Objetos defaultdict.
                                                             (line   57)
* Propostas de Melhorias do Python; PEP 584 <11>: Objetos OrderedDict.
                                                             (line  112)
* Propostas de Melhorias do Python; PEP 584 <12>: weakref — Referências fracas.
                                                             (line  209)
* Propostas de Melhorias do Python; PEP 584 <13>: weakref — Referências fracas.
                                                             (line  230)
* Propostas de Melhorias do Python; PEP 584 <14>: Tipos padrão do interpretador.
                                                             (line  238)
* Propostas de Melhorias do Python; PEP 584 <15>: Parâmetros de processo.
                                                             (line   57)
* Propostas de Melhorias do Python; PEP 584 <16>: Parâmetros de processo.
                                                             (line   73)
* Propostas de Melhorias do Python; PEP 585: Resumo – Destaques da versão<5>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 585 <1>: Type hinting genéricos nas coleções padrão.
                                                             (line   18)
* Propostas de Melhorias do Python; PEP 585 <2>: Biblioteca<49>.
                                                             (line  158)
* Propostas de Melhorias do Python; PEP 585 <3>: Biblioteca<80>.
                                                             (line  124)
* Propostas de Melhorias do Python; PEP 585 <4>: Documentação<31>.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 585 <5>: Atributos especiais de objetos GenericAlias.
                                                             (line   55)
* Propostas de Melhorias do Python; PEP 585 <6>: collections abc — Classes Base Abstratas para Contêineres.
                                                             (line   86)
* Propostas de Melhorias do Python; PEP 585 <7>: Tipos padrão do interpretador.
                                                             (line  180)
* Propostas de Melhorias do Python; PEP 585 <8>: Auxiliares de introspecção.
                                                             (line  164)
* Propostas de Melhorias do Python; PEP 585 <9>: Apelidos descontinuados.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 585 <10>: Apelidos de tipos embutidos.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 585 <11>: Apelidos de tipos embutidos.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 585 <12>: Apelidos de tipos embutidos.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 585 <13>: Apelidos de tipos embutidos.
                                                             (line   47)
* Propostas de Melhorias do Python; PEP 585 <14>: Apelidos de tipos embutidos.
                                                             (line   59)
* Propostas de Melhorias do Python; PEP 585 <15>: Apelidos de tipos embutidos.
                                                             (line   73)
* Propostas de Melhorias do Python; PEP 585 <16>: Apelidos para tipos em collections.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 585 <17>: Apelidos para tipos em collections.
                                                             (line   25)
* Propostas de Melhorias do Python; PEP 585 <18>: Apelidos para tipos em collections.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 585 <19>: Apelidos para tipos em collections.
                                                             (line   46)
* Propostas de Melhorias do Python; PEP 585 <20>: Apelidos para tipos em collections.
                                                             (line   56)
* Propostas de Melhorias do Python; PEP 585 <21>: Apelidos de outros tipos concretos.
                                                             (line   18)
* Propostas de Melhorias do Python; PEP 585 <22>: Apelidos de contêineres ABC em collections abc.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 585 <23>: Apelidos de contêineres ABC em collections abc.
                                                             (line   44)
* Propostas de Melhorias do Python; PEP 585 <24>: Apelidos de contêineres ABC em collections abc.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 585 <25>: Apelidos de contêineres ABC em collections abc.
                                                             (line   61)
* Propostas de Melhorias do Python; PEP 585 <26>: Apelidos de contêineres ABC em collections abc.
                                                             (line   69)
* Propostas de Melhorias do Python; PEP 585 <27>: Apelidos de contêineres ABC em collections abc.
                                                             (line   77)
* Propostas de Melhorias do Python; PEP 585 <28>: Apelidos de contêineres ABC em collections abc.
                                                             (line   86)
* Propostas de Melhorias do Python; PEP 585 <29>: Apelidos de contêineres ABC em collections abc.
                                                             (line   96)
* Propostas de Melhorias do Python; PEP 585 <30>: Apelidos de contêineres ABC em collections abc.
                                                             (line  106)
* Propostas de Melhorias do Python; PEP 585 <31>: Apelidos de contêineres ABC em collections abc.
                                                             (line  114)
* Propostas de Melhorias do Python; PEP 585 <32>: Apelidos de contêineres ABC em collections abc.
                                                             (line  122)
* Propostas de Melhorias do Python; PEP 585 <33>: Apelidos de contêineres ABC em collections abc.
                                                             (line  130)
* Propostas de Melhorias do Python; PEP 585 <34>: Apelidos para ABCs assíncronas em collections abc.
                                                             (line   18)
* Propostas de Melhorias do Python; PEP 585 <35>: Apelidos para ABCs assíncronas em collections abc.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 585 <36>: Apelidos para ABCs assíncronas em collections abc.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 585 <37>: Apelidos para ABCs assíncronas em collections abc.
                                                             (line   59)
* Propostas de Melhorias do Python; PEP 585 <38>: Apelidos para ABCs assíncronas em collections abc.
                                                             (line   69)
* Propostas de Melhorias do Python; PEP 585 <39>: Apelidos para outros ABCs em collections abc.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 585 <40>: Apelidos para outros ABCs em collections abc.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 585 <41>: Apelidos para outros ABCs em collections abc.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 585 <42>: Apelidos para outros ABCs em collections abc.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 585 <43>: Apelidos para outros ABCs em collections abc.
                                                             (line   66)
* Propostas de Melhorias do Python; PEP 585 <44>: Apelidos de ABCs da contextlib.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 585 <45>: Apelidos de ABCs da contextlib.
                                                             (line   40)
* Propostas de Melhorias do Python; PEP 585 <46>: Cronograma de descontinuação dos principais recursos.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 585 <47>: Glossário. (line  762)
* Propostas de Melhorias do Python; PEP 586: typing<5>.      (line   10)
* Propostas de Melhorias do Python; PEP 586 <1>: typing<7>.  (line    7)
* Propostas de Melhorias do Python; PEP 586 <2>: typing<8>.  (line   19)
* Propostas de Melhorias do Python; PEP 586 <3>: Formas especiais.
                                                             (line  156)
* Propostas de Melhorias do Python; PEP 587: APIs C removidas.
                                                             (line  100)
* Propostas de Melhorias do Python; PEP 587 <1>: Descontinuados<4>.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 587 <2>: PEP 587 Configuração de Inicialização do Python.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 587 <3>: PEP 587 Configuração de Inicialização do Python.
                                                             (line   84)
* Propostas de Melhorias do Python; PEP 587 <4>: API C<36>.  (line  125)
* Propostas de Melhorias do Python; PEP 587 <5>: Núcleo e embutidos<130>.
                                                             (line   76)
* Propostas de Melhorias do Python; PEP 587 <6>: API C<52>.  (line    6)
* Propostas de Melhorias do Python; PEP 587 <7>: Configuração de inicialização do Python.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 589: typing<8>.      (line    8)
* Propostas de Melhorias do Python; PEP 589 <1>: Outras diretivas especiais.
                                                             (line  478)
* Propostas de Melhorias do Python; PEP 590: APIs C removidas.
                                                             (line  133)
* Propostas de Melhorias do Python; PEP 590 <1>: Portando para Python 3 11<2>.
                                                             (line  101)
* Propostas de Melhorias do Python; PEP 590 <2>: Otimizações<4>.
                                                             (line   62)
* Propostas de Melhorias do Python; PEP 590 <3>: Resumo – Destaques da versão<5>.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 590 <4>: Otimizações<5>.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 590 <5>: PEP 590 Vectorcall um protocolo de chamada rápida para CPython.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 590 <6>: Núcleo e embutidos<25>.
                                                             (line  149)
* Propostas de Melhorias do Python; PEP 590 <7>: Biblioteca<38>.
                                                             (line 1129)
* Propostas de Melhorias do Python; PEP 590 <8>: API C<21>.  (line  146)
* Propostas de Melhorias do Python; PEP 590 <9>: Núcleo e embutidos<48>.
                                                             (line  113)
* Propostas de Melhorias do Python; PEP 590 <10>: Biblioteca<67>.
                                                             (line   69)
* Propostas de Melhorias do Python; PEP 590 <11>: Núcleo e embutidos<70>.
                                                             (line   57)
* Propostas de Melhorias do Python; PEP 590 <12>: Núcleo e embutidos<79>.
                                                             (line  118)
* Propostas de Melhorias do Python; PEP 590 <13>: Núcleo e embutidos<88>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 590 <14>: Núcleo e embutidos<94>.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 590 <15>: Núcleo e embutidos<94>.
                                                             (line   59)
* Propostas de Melhorias do Python; PEP 590 <16>: Núcleo e embutidos<109>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 590 <17>: Núcleo e embutidos<109>.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 590 <18>: Núcleo e embutidos<125>.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 590 <19>: Núcleo e embutidos<125>.
                                                             (line   91)
* Propostas de Melhorias do Python; PEP 590 <20>: Núcleo e embutidos<126>.
                                                             (line   42)
* Propostas de Melhorias do Python; PEP 590 <21>: Núcleo e embutidos<126>.
                                                             (line   50)
* Propostas de Melhorias do Python; PEP 590 <22>: Núcleo e embutidos<126>.
                                                             (line   67)
* Propostas de Melhorias do Python; PEP 590 <23>: API C<52>. (line   17)
* Propostas de Melhorias do Python; PEP 590 <24>: O protocolo vectorcall.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 591: typing<8>.      (line   26)
* Propostas de Melhorias do Python; PEP 591 <1>: Formas especiais.
                                                             (line  248)
* Propostas de Melhorias do Python; PEP 591 <2>: Funções e decoradores.
                                                             (line  342)
* Propostas de Melhorias do Python; PEP 593: Resumo – Destaques da versão<5>.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 593 <1>: typing<6>.  (line    6)
* Propostas de Melhorias do Python; PEP 593 <2>: Biblioteca<129>.
                                                             (line   91)
* Propostas de Melhorias do Python; PEP 593 <3>: Formas especiais.
                                                             (line  443)
* Propostas de Melhorias do Python; PEP 593 <4>: Auxiliares de introspecção.
                                                             (line   53)
* Propostas de Melhorias do Python; PEP 594: Resumo – Destaques da versão.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 594 <1>: PEP 594 remove “baterias descarregadas” da biblioteca padrão.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 594 <2>: Remoção pendente no Python 3 13.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 594 <3>: asynchat e asyncore.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 594 <4>: smtpd.      (line    6)
* Propostas de Melhorias do Python; PEP 594 <5>: Resumo – Destaques da versão<3>.
                                                             (line   47)
* Propostas de Melhorias do Python; PEP 594 <6>: Módulos.    (line    6)
* Propostas de Melhorias do Python; PEP 594 <7>: Biblioteca<38>.
                                                             (line  894)
* Propostas de Melhorias do Python; PEP 594 <8>: Biblioteca<38>.
                                                             (line  897)
* Propostas de Melhorias do Python; PEP 594 <9>: Biblioteca<38>.
                                                             (line  900)
* Propostas de Melhorias do Python; PEP 594 <10>: Biblioteca<38>.
                                                             (line  908)
* Propostas de Melhorias do Python; PEP 594 <11>: Biblioteca<38>.
                                                             (line  912)
* Propostas de Melhorias do Python; PEP 594 <12>: Biblioteca<38>.
                                                             (line  918)
* Propostas de Melhorias do Python; PEP 594 <13>: Biblioteca<38>.
                                                             (line  921)
* Propostas de Melhorias do Python; PEP 594 <14>: Biblioteca<38>.
                                                             (line  936)
* Propostas de Melhorias do Python; PEP 594 <15>: Biblioteca<38>.
                                                             (line  939)
* Propostas de Melhorias do Python; PEP 594 <16>: Biblioteca<38>.
                                                             (line  946)
* Propostas de Melhorias do Python; PEP 594 <17>: Biblioteca<38>.
                                                             (line  949)
* Propostas de Melhorias do Python; PEP 594 <18>: Biblioteca<38>.
                                                             (line  952)
* Propostas de Melhorias do Python; PEP 594 <19>: Biblioteca<38>.
                                                             (line  955)
* Propostas de Melhorias do Python; PEP 594 <20>: Biblioteca<38>.
                                                             (line  958)
* Propostas de Melhorias do Python; PEP 594 <21>: Biblioteca<38>.
                                                             (line 1014)
* Propostas de Melhorias do Python; PEP 594 <22>: Biblioteca<38>.
                                                             (line 1017)
* Propostas de Melhorias do Python; PEP 594 <23>: Biblioteca<38>.
                                                             (line 1020)
* Propostas de Melhorias do Python; PEP 594 <24>: Biblioteca<38>.
                                                             (line 1023)
* Propostas de Melhorias do Python; PEP 594 <25>: Biblioteca<52>.
                                                             (line  105)
* Propostas de Melhorias do Python; PEP 594 <26>: Biblioteca<62>.
                                                             (line  684)
* Propostas de Melhorias do Python; PEP 594 <27>: Biblioteca<64>.
                                                             (line   94)
* Propostas de Melhorias do Python; PEP 594 <28>: Biblioteca<67>.
                                                             (line  124)
* Propostas de Melhorias do Python; PEP 594 <29>: Biblioteca<67>.
                                                             (line  150)
* Propostas de Melhorias do Python; PEP 594 <30>: Testes<30>.
                                                             (line   25)
* Propostas de Melhorias do Python; PEP 594 <31>: Módulos substituídos.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 594 <32>: aifc — Lê e escreve arquivos AIFF e AIFC.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <33>: asynchat — Manipulador de comando/resposta de socket assíncrono.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <34>: asyncore — Manipulador de socket assíncrono.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <35>: audioop — Manipulando dados de áudio original.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <36>: cgi — Suporte a Common Gateway Interface.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <37>: cgitb — Gerenciador de traceback para scripts de CGI.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <38>: chunk — Lê dados em blocos IFF.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <39>: crypt — Função para verificar senhas Unix.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <40>: imghdr — Determina o tipo de uma imagem.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <41>: mailcap — Manipulação de arquivo Mailcap.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <42>: msilib — Lê e escreve arquivos do Microsoft Installer.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <43>: nis — Interface para NIS da Sun Yellow Pages.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <44>: nntplib — Cliente de protocolo NNTP.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <45>: ossaudiodev — Acesso a dispositivos de áudio compatíveis com OSS.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <46>: pipes — Interface para pipelines do shell.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <47>: smtpd — Serviços SMTP.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <48>: sndhdr — Determina o tipo de arquivos de som.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <49>: spwd — O banco de dados de senhas shadow.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <50>: sunau — Lê e escreve arquivos AU da Sun.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <51>: telnetlib — cliente Telnet.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <52>: uu — Codifica e decodifica arquivos uuencode.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 594 <53>: xdrlib — Codifica e decodifica dados XDR.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 596: O que há de novo no Python 3 9.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 597: Resumo – Destaques da versão<4>.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 597 <1>: Biblioteca<96>.
                                                             (line   44)
* Propostas de Melhorias do Python; PEP 597 <2>: Ativar EncodingWarning.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 602: Resumo – Destaques da versão.
                                                             (line  172)
* Propostas de Melhorias do Python; PEP 602 <1>: Resumo – Destaques da versão<5>.
                                                             (line   61)
* Propostas de Melhorias do Python; PEP 602 <2>: Quão estável é o Python?.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 604: Resumo – Destaques da versão<4>.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 604 <1>: PEP 604 novo operador de união de tipo.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 604 <2>: Biblioteca<104>.
                                                             (line   25)
* Propostas de Melhorias do Python; PEP 604 <3>: Documentação<40>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 604 <4>: Tipo União. (line  106)
* Propostas de Melhorias do Python; PEP 604 <5>: Recuperando manualmente anotações transformadas em strings.
                                                             (line   42)
* Propostas de Melhorias do Python; PEP 610: Distribuições.  (line   51)
* Propostas de Melhorias do Python; PEP 612: Resumo – Destaques da versão<4>.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 612 <1>: PEP 612 variáveis de especificação de parâmetros.
                                                             (line   26)
* Propostas de Melhorias do Python; PEP 612 <2>: Biblioteca<91>.
                                                             (line  691)
* Propostas de Melhorias do Python; PEP 612 <3>: Biblioteca<94>.
                                                             (line   95)
* Propostas de Melhorias do Python; PEP 612 <4>: Biblioteca<103>.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 612 <5>: Biblioteca<104>.
                                                             (line   25)
* Propostas de Melhorias do Python; PEP 612 <6>: Biblioteca<104>.
                                                             (line  119)
* Propostas de Melhorias do Python; PEP 612 <7>: Anotações de objetos chamáveis.
                                                             (line   79)
* Propostas de Melhorias do Python; PEP 612 <8>: Tipos genéricos definidos pelo usuário.
                                                             (line  185)
* Propostas de Melhorias do Python; PEP 612 <9>: Formas especiais.
                                                             (line  127)
* Propostas de Melhorias do Python; PEP 612 <10>: Criando tipos genéricos e apelidos de tipo.
                                                             (line  480)
* Propostas de Melhorias do Python; PEP 612 <11>: Apelidos para outros ABCs em collections abc.
                                                             (line   35)
* Propostas de Melhorias do Python; PEP 613: Resumo – Destaques da versão<4>.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 613 <1>: PEP 613 TypeAlias.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 613 <2>: Biblioteca<110>.
                                                             (line   98)
* Propostas de Melhorias do Python; PEP 613 <3>: Tipos especiais.
                                                             (line  228)
* Propostas de Melhorias do Python; PEP 614: Resumo – Destaques da versão<5>.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 614 <1>: Outras mudanças na linguagem<5>.
                                                             (line   40)
* Propostas de Melhorias do Python; PEP 614 <2>: Núcleo e embutidos<126>.
                                                             (line  113)
* Propostas de Melhorias do Python; PEP 614 <3>: Definições de função.
                                                             (line   57)
* Propostas de Melhorias do Python; PEP 614 <4>: Definições de classe.
                                                             (line   64)
* Propostas de Melhorias do Python; PEP 615: Resumo – Destaques da versão<5>.
                                                             (line   53)
* Propostas de Melhorias do Python; PEP 615 <1>: zoneinfo.   (line   38)
* Propostas de Melhorias do Python; PEP 615 <2>: Biblioteca<126>.
                                                             (line   54)
* Propostas de Melhorias do Python; PEP 615 <3>: zoneinfo — Suporte a fuso horário da IANA.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 616: Resumo – Destaques da versão<5>.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 616 <1>: Novos métodos de strings para remover prefixos e sufixos.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 616 <2>: Núcleo e embutidos<125>.
                                                             (line   82)
* Propostas de Melhorias do Python; PEP 617: PEP 701 Formalização sintática de f-strings.
                                                             (line   71)
* Propostas de Melhorias do Python; PEP 617 <1>: Módulos.    (line   32)
* Propostas de Melhorias do Python; PEP 617 <2>: Gerenciadores de contexto entre parênteses.
                                                             (line   45)
* Propostas de Melhorias do Python; PEP 617 <3>: Resumo – Destaques da versão<5>.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 617 <4>: Novo analisador sintático.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 617 <5>: Descontinuados<7>.
                                                             (line   97)
* Propostas de Melhorias do Python; PEP 617 <6>: Biblioteca<91>.
                                                             (line  178)
* Propostas de Melhorias do Python; PEP 617 <7>: Biblioteca<127>.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 617 <8>: Especificação completa da gramática.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 618: Resumo – Destaques da versão<4>.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 618 <1>: Outras mudanças na linguagem<4>.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 618 <2>: Núcleo e embutidos<120>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 623: Resumo – Destaques da versão<2>.
                                                             (line  112)
* Propostas de Melhorias do Python; PEP 623 <1>: Otimizações<2>.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 623 <2>: Removidos<2>.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 623 <3>: Resumo – Destaques da versão<4>.
                                                             (line   43)
* Propostas de Melhorias do Python; PEP 623 <4>: API C<29>.  (line   21)
* Propostas de Melhorias do Python; PEP 623 <5>: Núcleo e embutidos<95>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 623 <6>: Documentação<35>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 623 <7>: Objetos Unicode.
                                                             (line   18)
* Propostas de Melhorias do Python; PEP 624: Resumo – Destaques da versão<3>.
                                                             (line   50)
* Propostas de Melhorias do Python; PEP 624 <1>: Removidos<4>.
                                                             (line   99)
* Propostas de Melhorias do Python; PEP 624 <2>: Resumo – Destaques da versão<4>.
                                                             (line   46)
* Propostas de Melhorias do Python; PEP 624 <3>: API C<36>.  (line  143)
* Propostas de Melhorias do Python; PEP 624#alternative-apis: Removidos<4>.
                                                             (line   99)
* Propostas de Melhorias do Python; PEP 626: Remoção pendente no Python 3 15.
                                                             (line   77)
* Propostas de Melhorias do Python; PEP 626 <1>: Descontinuados.
                                                             (line  237)
* Propostas de Melhorias do Python; PEP 626 <2>: Remoção pendente no Python 3 15<3>.
                                                             (line   77)
* Propostas de Melhorias do Python; PEP 626 <3>: Resumo – Destaques da versão<4>.
                                                             (line   24)
* Propostas de Melhorias do Python; PEP 626 <4>: Núcleo e embutidos<56>.
                                                             (line   45)
* Propostas de Melhorias do Python; PEP 626 <5>: Métodos de objetos código.
                                                             (line   86)
* Propostas de Melhorias do Python; PEP 626 <6>: Funções de análise.
                                                             (line  178)
* Propostas de Melhorias do Python; PEP 626 <7>: Remoção pendente no Python 3 15<5>.
                                                             (line   77)
* Propostas de Melhorias do Python; PEP 628: cmath.          (line    7)
* Propostas de Melhorias do Python; PEP 628 <1>: math<7>.    (line    7)
* Propostas de Melhorias do Python; PEP 628 <2>: Biblioteca<161>.
                                                             (line   32)
* Propostas de Melhorias do Python; PEP 632: Resumo – Destaques da versão<2>.
                                                             (line  116)
* Propostas de Melhorias do Python; PEP 632 <1>: distutils.  (line    6)
* Propostas de Melhorias do Python; PEP 632 <2>: Resumo – Destaques da versão<4>.
                                                             (line   41)
* Propostas de Melhorias do Python; PEP 632 <3>: distutils<2>.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 632 <4>: Biblioteca<52>.
                                                             (line   41)
* Propostas de Melhorias do Python; PEP 632 <5>: distutils — Criação e instalação de módulos do Python.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 634: Resumo – Destaques da versão<4>.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 634 <1>: Outros recursos-chave.
                                                             (line   57)
* Propostas de Melhorias do Python; PEP 634 <2>: Núcleo e embutidos<60>.
                                                             (line   55)
* Propostas de Melhorias do Python; PEP 634 <3>: Núcleo e embutidos<91>.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 634 <4>: Núcleo e embutidos<96>.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 634 <5>: Customizando argumentos posicionais na classe correspondência de padrão.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 634 <6>: A instrução match.
                                                             (line   35)
* Propostas de Melhorias do Python; PEP 634 <7>: Padrões de classe.
                                                             (line  142)
* Propostas de Melhorias do Python; PEP 634 <8>: PyTypeObject Slots.
                                                             (line  852)
* Propostas de Melhorias do Python; PEP 634 <9>: PyTypeObject Slots.
                                                             (line  876)
* Propostas de Melhorias do Python; PEP 635: Resumo – Destaques da versão<4>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 635 <1>: Outros recursos-chave.
                                                             (line   58)
* Propostas de Melhorias do Python; PEP 636: Resumo – Destaques da versão<4>.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 636 <1>: Outros recursos-chave.
                                                             (line   59)
* Propostas de Melhorias do Python; PEP 636 <2>: Instruções match.
                                                             (line  187)
* Propostas de Melhorias do Python; PEP 636 <3>: A instrução match.
                                                             (line   37)
* Propostas de Melhorias do Python; PEP 636 <4>: Padrões de classe.
                                                             (line  144)
* Propostas de Melhorias do Python; PEP 644: hashlib.        (line    8)
* Propostas de Melhorias do Python; PEP 644 <1>: Resumo – Destaques da versão<4>.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 644 <2>: hashlib<3>. (line    7)
* Propostas de Melhorias do Python; PEP 644 <3>: ssl<3>.     (line    7)
* Propostas de Melhorias do Python; PEP 644 <4>: Mudanças na construção<4>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 644 <5>: Núcleo e embutidos<32>.
                                                             (line  177)
* Propostas de Melhorias do Python; PEP 644 <6>: Biblioteca<62>.
                                                             (line  525)
* Propostas de Melhorias do Python; PEP 644 <7>: Construção<41>.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 644 <8>: ssl — Invólucro de TLS/SSL para objetos socket.
                                                             (line   59)
* Propostas de Melhorias do Python; PEP 646: PEP 646 Genéricos variádicos.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 646 <1>: PEP 646 Genéricos variádicos.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 646 <2>: Subscrições.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 646 <3>: Listas de expressões.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 646 <4>: Definições de função.
                                                             (line  132)
* Propostas de Melhorias do Python; PEP 646 <5>: Criando tipos genéricos e apelidos de tipo.
                                                             (line  330)
* Propostas de Melhorias do Python; PEP 647: Resumo – Destaques da versão<4>.
                                                             (line   35)
* Propostas de Melhorias do Python; PEP 647 <1>: PEP 647 guardas de tipo definidas pelo usuário.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 647 <2>: Biblioteca<94>.
                                                             (line  182)
* Propostas de Melhorias do Python; PEP 647 <3>: Formas especiais.
                                                             (line  563)
* Propostas de Melhorias do Python; PEP 649: Escopos de anotação.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 649 <1>: Conteúdo do módulo<9>.
                                                             (line  133)
* Propostas de Melhorias do Python; PEP 652: PEP 652 Mantendo a ABI estável.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 652 <1>: API C<37>.  (line   41)
* Propostas de Melhorias do Python; PEP 654: PEP 654 Grupos de exceção e except*.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 654 <1>: PEP 654 Grupos de exceção e except*.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 654 <2>: Novos opcodes.
                                                             (line   18)
* Propostas de Melhorias do Python; PEP 654 <3>: Núcleo e embutidos<53>.
                                                             (line   23)
* Propostas de Melhorias do Python; PEP 654 <4>: Núcleo e embutidos<76>.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 654 <5>: Núcleo e embutidos<79>.
                                                             (line   88)
* Propostas de Melhorias do Python; PEP 655: PEP 655 Marcando itens TypedDict individuais como obrigatórios ou não obrigatórios.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 655 <1>: Biblioteca<64>.
                                                             (line  266)
* Propostas de Melhorias do Python; PEP 655 <2>: Formas especiais.
                                                             (line  262)
* Propostas de Melhorias do Python; PEP 655 <3>: Formas especiais.
                                                             (line  271)
* Propostas de Melhorias do Python; PEP 655 <4>: Outras diretivas especiais.
                                                             (line  488)
* Propostas de Melhorias do Python; PEP 657: PEP 657 Localizações de erros refinadas em tracebacks.
                                                             (line   56)
* Propostas de Melhorias do Python; PEP 657 <1>: inspect<2>. (line   18)
* Propostas de Melhorias do Python; PEP 657 <2>: Biblioteca<64>.
                                                             (line  223)
* Propostas de Melhorias do Python; PEP 657 <3>: Núcleo e embutidos<87>.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 659: PEP 659 Interpretador adaptativo especializado.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 659 <1>: PEP 659 Interpretador adaptativo especializado.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 659 <2>: Desempenho com thread única.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 667: Resumo – Destaques da versão.
                                                             (line   42)
* Propostas de Melhorias do Python; PEP 667 <1>: Definidas semânticas de mutação para locals.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 667 <2>: Definidas semânticas de mutação para locals.
                                                             (line   45)
* Propostas de Melhorias do Python; PEP 667 <3>: APIs C descontinuadas.
                                                             (line   32)
* Propostas de Melhorias do Python; PEP 667 <4>: Alterações na API Python.
                                                             (line   19)
* Propostas de Melhorias do Python; PEP 667 <5>: Alterações na API Python.
                                                             (line   28)
* Propostas de Melhorias do Python; PEP 667 <6>: Alterações na API Python.
                                                             (line   35)
* Propostas de Melhorias do Python; PEP 667 <7>: Funções embutidas<3>.
                                                             (line 1178)
* Propostas de Melhorias do Python; PEP 667 <8>: Interface de linha de comando<9>.
                                                             (line   61)
* Propostas de Melhorias do Python; PEP 667 <9>: Reflexão.   (line   44)
* Propostas de Melhorias do Python; PEP 667 <10>: Objetos Frame.
                                                             (line  144)
* Propostas de Melhorias do Python; PEP 667 <11>: Proxies locais de quadro.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 667 <12>: Legacy Local Variable APIs.
                                                             (line   45)
* Propostas de Melhorias do Python; PEP 669: Resumo – Destaques da versão.
                                                             (line  117)
* Propostas de Melhorias do Python; PEP 669 <1>: Novas funcionalidades<2>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 669 <2>: PEP 669 Monitoramento de baixo impacto para CPython.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 669 <3>: Núcleo e embutidos<37>.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 670: Resumo – Destaques da versão<3>.
                                                             (line   53)
* Propostas de Melhorias do Python; PEP 670 <1>: Portando para Python 3 11<2>.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 673: PEP 673 Tipo Self.
                                                             (line   32)
* Propostas de Melhorias do Python; PEP 673 <1>: Biblioteca<71>.
                                                             (line  134)
* Propostas de Melhorias do Python; PEP 673 <2>: Tipos especiais.
                                                             (line  194)
* Propostas de Melhorias do Python; PEP 675: PEP 675 Tipo de string literal arbitrário.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 675 <1>: Biblioteca<67>.
                                                             (line   59)
* Propostas de Melhorias do Python; PEP 675 <2>: Tipos especiais.
                                                             (line   96)
* Propostas de Melhorias do Python; PEP 676: Documentação<26>.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 678: Outras mudanças na linguagem<2>.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 678 <1>: PEP 678 Exceções podem ser enriquecidas com notas.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 678 <2>: Núcleo e embutidos<36>.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 678 <3>: Núcleo e embutidos<39>.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 678 <4>: Núcleo e embutidos<60>.
                                                             (line  118)
* Propostas de Melhorias do Python; PEP 680: Resumo – Destaques da versão<3>.
                                                             (line   20)
* Propostas de Melhorias do Python; PEP 680 <1>: Novos módulos<3>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 680 <2>: Biblioteca<67>.
                                                             (line  205)
* Propostas de Melhorias do Python; PEP 681: PEP 681 Transformações de classe de dados.
                                                             (line   31)
* Propostas de Melhorias do Python; PEP 681 <1>: Biblioteca<64>.
                                                             (line  110)
* Propostas de Melhorias do Python; PEP 681 <2>: Funções e decoradores.
                                                             (line  249)
* Propostas de Melhorias do Python; PEP 682: Outras mudanças na linguagem<3>.
                                                             (line   52)
* Propostas de Melhorias do Python; PEP 682 <1>: Minilinguagem de especificação de formato.
                                                             (line   96)
* Propostas de Melhorias do Python; PEP 683: Novas funcionalidades<4>.
                                                             (line  155)
* Propostas de Melhorias do Python; PEP 683 <1>: Núcleo e embutidos<35>.
                                                             (line   70)
* Propostas de Melhorias do Python; PEP 683 <2>: Contagem de referências.
                                                             (line  124)
* Propostas de Melhorias do Python; PEP 683 <3>: Glossário.  (line  840)
* Propostas de Melhorias do Python; PEP 684: PEP 684 Uma GIL por interpretador.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 684 <1>: Novas funcionalidades<4>.
                                                             (line  190)
* Propostas de Melhorias do Python; PEP 684 <2>: High-level API.
                                                             (line   21)
* Propostas de Melhorias do Python; PEP 684 <3>: A Per-Interpreter GIL.
                                                             (line   14)
* Propostas de Melhorias do Python; PEP 686: Modo UTF-8 do Python.
                                                             (line   74)
* Propostas de Melhorias do Python; PEP 686 <1>: Codificação do texto.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 687: Biblioteca<34>. (line  148)
* Propostas de Melhorias do Python; PEP 687 <1>: Núcleo e embutidos<34>.
                                                             (line  342)
* Propostas de Melhorias do Python; PEP 687 <2>: Biblioteca<42>.
                                                             (line  293)
* Propostas de Melhorias do Python; PEP 687 <3>: Biblioteca<42>.
                                                             (line  300)
* Propostas de Melhorias do Python; PEP 687 <4>: Biblioteca<42>.
                                                             (line  333)
* Propostas de Melhorias do Python; PEP 687 <5>: Biblioteca<42>.
                                                             (line  336)
* Propostas de Melhorias do Python; PEP 687 <6>: Biblioteca<42>.
                                                             (line  346)
* Propostas de Melhorias do Python; PEP 687 <7>: Biblioteca<42>.
                                                             (line  403)
* Propostas de Melhorias do Python; PEP 687 <8>: Biblioteca<44>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 687 <9>: Biblioteca<45>.
                                                             (line  111)
* Propostas de Melhorias do Python; PEP 687 <10>: Biblioteca<45>.
                                                             (line  118)
* Propostas de Melhorias do Python; PEP 688: PEP 688 Tornando o protocolo de buffer acessível no Python.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 688 <1>: Núcleo e embutidos<37>.
                                                             (line   25)
* Propostas de Melhorias do Python; PEP 688 <2>: Emulando tipos buffer.
                                                             (line   39)
* Propostas de Melhorias do Python; PEP 688 <3>: Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  200)
* Propostas de Melhorias do Python; PEP 688#current-options: Remoção pendente no Python 3 17.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 688#current-options <1>: Remoção pendente no Python 3 17.
                                                             (line   60)
* Propostas de Melhorias do Python; PEP 688#current-options <2>: Descontinuados.
                                                             (line   76)
* Propostas de Melhorias do Python; PEP 688#current-options <3>: Remoção pendente no Python 3 17<2>.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 688#current-options <4>: Remoção pendente no Python 3 17<2>.
                                                             (line   60)
* Propostas de Melhorias do Python; PEP 688#current-options <5>: Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  113)
* Propostas de Melhorias do Python; PEP 688#current-options <6>: Apelidos de contêineres ABC em collections abc.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 688#current-options <7>: Remoção pendente no Python 3 17<3>.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 688#current-options <8>: Remoção pendente no Python 3 17<3>.
                                                             (line   60)
* Propostas de Melhorias do Python; PEP 689: API C<24>.      (line   26)
* Propostas de Melhorias do Python; PEP 692: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 692 <1>: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs.
                                                             (line   21)
* Propostas de Melhorias do Python; PEP 692 <2>: Biblioteca<42>.
                                                             (line  120)
* Propostas de Melhorias do Python; PEP 692 <3>: Documentação<17>.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 692 <4>: Formas especiais.
                                                             (line  645)
* Propostas de Melhorias do Python; PEP 693: O que há de novo no Python 3 12.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 695: PEP 695 Sintaxe do parâmetro de tipo.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 695 <1>: PEP 695 Sintaxe do parâmetro de tipo.
                                                             (line   63)
* Propostas de Melhorias do Python; PEP 695 <2>: Alterações de bytecode do CPython<2>.
                                                             (line   42)
* Propostas de Melhorias do Python; PEP 695 <3>: Biblioteca<26>.
                                                             (line   81)
* Propostas de Melhorias do Python; PEP 695 <4>: Biblioteca<29>.
                                                             (line  130)
* Propostas de Melhorias do Python; PEP 695 <5>: Biblioteca<38>.
                                                             (line   99)
* Propostas de Melhorias do Python; PEP 695 <6>: Biblioteca<38>.
                                                             (line  702)
* Propostas de Melhorias do Python; PEP 695 <7>: Biblioteca<38>.
                                                             (line  905)
* Propostas de Melhorias do Python; PEP 695 <8>: Biblioteca<38>.
                                                             (line  999)
* Propostas de Melhorias do Python; PEP 695 <9>: Núcleo e embutidos<35>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 695 <10>: Núcleo e embutidos<35>.
                                                             (line  105)
* Propostas de Melhorias do Python; PEP 695 <11>: Biblioteca<42>.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 695 <12>: Escopos de anotação.
                                                             (line   62)
* Propostas de Melhorias do Python; PEP 695 <13>: A instrução type.
                                                             (line   42)
* Propostas de Melhorias do Python; PEP 695 <14>: Tipos especiais.
                                                             (line   61)
* Propostas de Melhorias do Python; PEP 695 <15>: Criando tipos genéricos e apelidos de tipo.
                                                             (line  115)
* Propostas de Melhorias do Python; PEP 695 <16>: Criando tipos genéricos e apelidos de tipo.
                                                             (line  217)
* Propostas de Melhorias do Python; PEP 695 <17>: Criando tipos genéricos e apelidos de tipo.
                                                             (line  358)
* Propostas de Melhorias do Python; PEP 695 <18>: Criando tipos genéricos e apelidos de tipo.
                                                             (line  470)
* Propostas de Melhorias do Python; PEP 695 <19>: Cronograma de descontinuação dos principais recursos.
                                                             (line   29)
* Propostas de Melhorias do Python; PEP 696: Resumo – Destaques da versão.
                                                             (line  121)
* Propostas de Melhorias do Python; PEP 696 <1>: Núcleo e embutidos<25>.
                                                             (line  170)
* Propostas de Melhorias do Python; PEP 696 <2>: Escopos de anotação.
                                                             (line   65)
* Propostas de Melhorias do Python; PEP 696 <3>: Listas de parâmetros de tipo.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 697: Novas funcionalidades<4>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 697 <1>: Novas funcionalidades<4>.
                                                             (line   33)
* Propostas de Melhorias do Python; PEP 697 <2>: API C<22>.  (line   38)
* Propostas de Melhorias do Python; PEP 698: PEP 698 Substitui decorador para tipagem estática.
                                                             (line   30)
* Propostas de Melhorias do Python; PEP 698 <1>: Biblioteca<45>.
                                                             (line  100)
* Propostas de Melhorias do Python; PEP 698 <2>: Funções e decoradores.
                                                             (line  414)
* Propostas de Melhorias do Python; PEP 699: Remoção pendente no Python 3 14<2>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 699 <1>: Descontinuados<2>.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 699 <2>: Remoção pendente no Python 3 14<4>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 699 <3>: Construção<25>.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 699 <4>: Remoção pendente no Python 3 14<6>.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 7: Mudanças a construções e API C<2>.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 7 <1>: Requisitos de construção.
                                                             (line   54)
* Propostas de Melhorias do Python; PEP 7 <2>: Padrões de codificação.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 7 <3>: Macros úteis. (line  216)
* Propostas de Melhorias do Python; PEP 7 <4>: Macros úteis. (line  236)
* Propostas de Melhorias do Python; PEP 701: PEP 701 Formalização sintática de f-strings.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 701 <1>: PEP 701 Formalização sintática de f-strings.
                                                             (line   68)
* Propostas de Melhorias do Python; PEP 701 <2>: tokenize.   (line    6)
* Propostas de Melhorias do Python; PEP 701 <3>: Otimizações<2>.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 701 <4>: Alterações na API Python<2>.
                                                             (line   80)
* Propostas de Melhorias do Python; PEP 701 <5>: Alterações na API Python<2>.
                                                             (line   82)
* Propostas de Melhorias do Python; PEP 701 <6>: Alterações na API Python<2>.
                                                             (line  104)
* Propostas de Melhorias do Python; PEP 702: Resumo – Destaques da versão.
                                                             (line  125)
* Propostas de Melhorias do Python; PEP 702 <1>: avisos.     (line    6)
* Propostas de Melhorias do Python; PEP 702 <2>: Biblioteca<36>.
                                                             (line  500)
* Propostas de Melhorias do Python; PEP 702 <3>: Funções disponíveis.
                                                             (line  186)
* Propostas de Melhorias do Python; PEP 703: Resumo – Destaques da versão.
                                                             (line   10)
* Propostas de Melhorias do Python; PEP 703 <1>: Resumo – Destaques da versão.
                                                             (line   48)
* Propostas de Melhorias do Python; PEP 703 <2>: CPython com threads livres.
                                                             (line   58)
* Propostas de Melhorias do Python; PEP 703 <3>: Núcleo e embutidos<28>.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 703 <4>: API C<20>.  (line  136)
* Propostas de Melhorias do Python; PEP 703 <5>: Instalando binários com threads livres.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 703 <6>: Instalando binários com threads livres<2>.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 703 <7>: GIL and performance considerations.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 703 <8>: Suporte experimental do Python para threads livres.
                                                             (line   28)
* Propostas de Melhorias do Python; PEP 703 <9>: Não podemos remover a Trava Global do interpretador?.
                                                             (line   12)
* Propostas de Melhorias do Python; PEP 703 <10>: Glossário. (line  645)
* Propostas de Melhorias do Python; PEP 703 <11>: Glossário. (line  792)
* Propostas de Melhorias do Python; PEP 705: Resumo – Destaques da versão.
                                                             (line  129)
* Propostas de Melhorias do Python; PEP 705 <1>: typing.     (line    6)
* Propostas de Melhorias do Python; PEP 705 <2>: Biblioteca<34>.
                                                             (line   17)
* Propostas de Melhorias do Python; PEP 705 <3>: Formas especiais.
                                                             (line  292)
* Propostas de Melhorias do Python; PEP 706: Outras mudanças na linguagem<2>.
                                                             (line   82)
* Propostas de Melhorias do Python; PEP 706 <1>: tarfile<2>. (line   13)
* Propostas de Melhorias do Python; PEP 706 <2>: tarfile<3>. (line   13)
* Propostas de Melhorias do Python; PEP 706 <3>: tarfile<4>. (line   13)
* Propostas de Melhorias do Python; PEP 706 <4>: tarfile<6>. (line   13)
* Propostas de Melhorias do Python; PEP 706 <5>: Filtros de extração.
                                                             (line   22)
* Propostas de Melhorias do Python; PEP 709: Alterações na API Python.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 709 <1>: PEP 709 Fazendo inline de compreensão.
                                                             (line    9)
* Propostas de Melhorias do Python; PEP 709 <2>: PEP 709 Fazendo inline de compreensão.
                                                             (line   36)
* Propostas de Melhorias do Python; PEP 709 <3>: Alterações de bytecode do CPython<2>.
                                                             (line   34)
* Propostas de Melhorias do Python; PEP 709 <4>: Núcleo e embutidos<37>.
                                                             (line   27)
* Propostas de Melhorias do Python; PEP 709 <5>: Funções embutidas<3>.
                                                             (line 1176)
* Propostas de Melhorias do Python; PEP 719: O que há de novo no Python 3 13.
                                                             (line   16)
* Propostas de Melhorias do Python; PEP 730: Resumo – Destaques da versão.
                                                             (line  139)
* Propostas de Melhorias do Python; PEP 730 <1>: Suporte para plataformas móveis.
                                                             (line    6)
* Propostas de Melhorias do Python; PEP 730 <2>: Suporte para plataformas móveis.
                                                             (line   25)
* Propostas de Melhorias do Python; PEP 734: Biblioteca<29>. (line  172)
* Propostas de Melhorias do Python; PEP 737: Alterações na API C<2>.
                                                             (line   44)
* Propostas de Melhorias do Python; PEP 737 <1>: API C<16>.  (line    6)
* Propostas de Melhorias do Python; PEP 737 <2>: API C<16>.  (line   51)
* Propostas de Melhorias do Python; PEP 738: Resumo – Destaques da versão.
                                                             (line  142)
* Propostas de Melhorias do Python; PEP 738 <1>: Suporte para plataformas móveis.
                                                             (line   15)
* Propostas de Melhorias do Python; PEP 738 <2>: Suporte para plataformas móveis.
                                                             (line   25)
* Propostas de Melhorias do Python; PEP 738 <3>: Biblioteca<29>.
                                                             (line   56)
* Propostas de Melhorias do Python; PEP 742: Resumo – Destaques da versão.
                                                             (line  133)
* Propostas de Melhorias do Python; PEP 742 <1>: typing.     (line   10)
* Propostas de Melhorias do Python; PEP 742 <2>: Biblioteca<29>.
                                                             (line  255)
* Propostas de Melhorias do Python; PEP 742 <3>: Formas especiais.
                                                             (line  539)
* Propostas de Melhorias do Python; PEP 744: Resumo – Destaques da versão.
                                                             (line   11)
* Propostas de Melhorias do Python; PEP 744 <1>: Resumo – Destaques da versão.
                                                             (line   53)
* Propostas de Melhorias do Python; PEP 744 <2>: Um compilador just-in-time JIT experimental.
                                                             (line   63)
* Propostas de Melhorias do Python; PEP 8: Mudanças na biblioteca.
                                                             (line   28)
* Propostas de Melhorias do Python; PEP 8 <1>: Biblioteca<146>.
                                                             (line  124)
* Propostas de Melhorias do Python; PEP 8 <2>: IDLE<67>.     (line   81)
* Propostas de Melhorias do Python; PEP 8 <3>: Intermezzo estilo de codificação.
                                                             (line   13)
* Propostas de Melhorias do Python; PEP 8 <4>: Editores e IDEs.
                                                             (line    8)
* Propostas de Melhorias do Python; PEP 8 <5>: Comparações de valor.
                                                             (line   64)
* Propostas de Melhorias do Python; PEP 8 <6>: Funções embutidas<3>.
                                                             (line 1898)
* Propostas de Melhorias do Python; PEP 8 <7>: Curiosidades e conclusões<2>.
                                                             (line   37)
* Propostas de Melhorias do Python; PEP 8 <8>: Existem padrões para a codificação ou um guia de estilo utilizado pela comunidade Python?.
                                                             (line    7)
* Propostas de Melhorias do Python; PEP 8 <9>: Quando eu posso depender dos testes de identidade com o operador is?.
                                                             (line   60)
* prot_c() (método ftplib.FTP_TLS):      FTP_TLS objects.    (line  111)
* prot_p() (método ftplib.FTP_TLS):      FTP_TLS objects.    (line  107)
* proto (atributo socket.socket):        Socket Objects.     (line  621)
* protocol (atributo ssl.SSLContext):    SSL Contexts.       (line  609)
* Protocol (classe em asyncio):          Protocolos de Base. (line   10)
* Protocol (classe em typing):           Outras diretivas especiais.
                                                             (line  137)
* PROTOCOL_SSLv23 (no módulo ssl):       Constantes<9>.      (line  162)
* PROTOCOL_SSLv3 (no módulo ssl):        Constantes<9>.      (line  169)
* PROTOCOL_TLS (no módulo ssl):          Constantes<9>.      (line  132)
* PROTOCOL_TLS_CLIENT (no módulo ssl):   Constantes<9>.      (line  145)
* PROTOCOL_TLS_SERVER (no módulo ssl):   Constantes<9>.      (line  154)
* PROTOCOL_TLSv1 (no módulo ssl):        Constantes<9>.      (line  185)
* PROTOCOL_TLSv1_1 (no módulo ssl):      Constantes<9>.      (line  192)
* PROTOCOL_TLSv1_2 (no módulo ssl):      Constantes<9>.      (line  202)
* protocol_version (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  162)
* PROTOCOL_VERSION (atributo imaplib.IMAP4): Objetos IMAP4.  (line  395)
* ProtocolError (classe em xmlrpc.client): Objetos ProtocolError.
                                                             (line    6)
* protocolo de buffer:                   Protocolo Iterador. (line   79)
* protocolo de buffer;str (classe embutida): Tipo sequência de texto — str.
                                                             (line   66)
* protocolo de buffer;tipos de sequência binária: Formatação de string no estilo printf.
                                                             (line  198)
* protocolo de gerenciamento de contexto: Tipos de Gerenciador de Contexto.
                                                             (line    6)
* protocolo de gerenciamento de contexto <1>: Glossário.     (line  354)
* protocolo iterador:                    Tipos iteradores.   (line    6)
* protocolo;gerenciamento de contexto:   Tipos de Gerenciador de Contexto.
                                                             (line    6)
* protocolo;iterador:                    Tipos iteradores.   (line    6)
* proxy() (no módulo weakref):           weakref — Referências fracas.
                                                             (line  143)
* proxyauth() (método imaplib.IMAP4):    Objetos IMAP4.      (line  197)
* ProxyBasicAuthHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  373)
* ProxyDigestAuthHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  405)
* ProxyHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  299)
* ProxyType (no módulo weakref):         weakref — Referências fracas.
                                                             (line  348)
* ProxyTypes (no módulo weakref):        weakref — Referências fracas.
                                                             (line  357)
* pryear() (método calendar.TextCalendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  226)
* ps1 (no módulo sys):                   sys — Parâmetros e funções específicas do sistema.
                                                             (line 1551)
* ps2 (no módulo sys):                   sys — Parâmetros e funções específicas do sistema.
                                                             (line 1551)
* pstdev() (no módulo statistics):       Detalhes das funções.
                                                             (line  389)
* pthread_getcpuclockid() (no módulo time): Funções<5>.      (line   22)
* pthread_kill() (no módulo signal):     Conteúdo do módulo<5>.
                                                             (line  378)
* pthread_sigmask() (no módulo signal):  Conteúdo do módulo<5>.
                                                             (line  409)
* pthreads:                              _thread— API de segmentação de baixo nível.
                                                             (line   16)
* pthreads (atributo sys._emscripten_info): sys — Parâmetros e funções específicas do sistema.
                                                             (line  374)
* ptsname() (no módulo os):              Operações dos descritores de arquivos.
                                                             (line  657)
* pu() (no módulo turtle):               Estado do Desenho.  (line   12)
* publicId (atributo xml.dom.DocumentType): DocumentType Objects.
                                                             (line   17)
* PullDOM (classe em xml.dom.pulldom):   xml dom pulldom — Suporte para construir árvores parciais de DOM.
                                                             (line   79)
* punctuation (no módulo string):        Constantes de strings.
                                                             (line   36)
* punctuation_chars (atributo shlex.shlex): shlex Objects.   (line  183)
* PurePath (classe em pathlib):          Caminhos puros.     (line   10)
* PurePosixPath (classe em pathlib):     Caminhos puros.     (line   74)
* PureWindowsPath (classe em pathlib):   Caminhos puros.     (line   85)
* purge() (no módulo re):                Funções<2>.         (line  308)
* Purpose.CLIENT_AUTH (no módulo ssl):   Constantes<9>.      (line  541)
* Purpose.SERVER_AUTH (no módulo ssl):   Constantes<9>.      (line  532)
* push_async_callback() (método contextlib.AsyncExitStack): Utilitários.
                                                             (line  650)
* push_async_exit() (método contextlib.AsyncExitStack): Utilitários.
                                                             (line  645)
* PUSH_EXC_INFO (opcode):                Instruções em bytecode do Python.
                                                             (line  468)
* PUSH_NULL (opcode):                    Instruções em bytecode do Python.
                                                             (line 1116)
* push_source() (método shlex.shlex):    shlex Objects.      (line   56)
* push_token() (método shlex.shlex):     shlex Objects.      (line   16)
* push() (método code.InteractiveConsole): Objetos de console Interativo.
                                                             (line   30)
* push() (método contextlib.ExitStack):  Utilitários.        (line  566)
* put_nowait() (método asyncio.Queue):   Queue.              (line   73)
* put_nowait() (método multiprocessing.Queue): Encadeamentos e filas.
                                                             (line  157)
* put_nowait() (método queue.Queue):     Objetos Queue.      (line   42)
* put_nowait() (método queue.SimpleQueue): Objetos SimpleQueue.
                                                             (line   35)
* put() (método asyncio.Queue):          Queue.              (line   65)
* put() (método multiprocessing.Queue):  Encadeamentos e filas.
                                                             (line  140)
* put() (método multiprocessing.SimpleQueue): Encadeamentos e filas.
                                                             (line  262)
* put() (método queue.Queue):            Objetos Queue.      (line   29)
* put() (método queue.SimpleQueue):      Objetos SimpleQueue.
                                                             (line   20)
* putch() (no módulo msvcrt):            E/S de console.     (line   36)
* putenv() (no módulo os):               Parâmetros de processo.
                                                             (line  358)
* putheader() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line  184)
* putp() (no módulo curses):             Funções<6>.         (line  392)
* putrequest() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line  173)
* putwch() (no módulo msvcrt):           E/S de console.     (line   41)
* putwin() (método curses.window):       Window Objects.     (line  458)
* pvariance() (no módulo statistics):    Detalhes das funções.
                                                             (line  398)
* pwd() (método ftplib.FTP):             FTP objects.        (line  344)
* pwrite() (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  673)
* pwritev() (no módulo os):              Operações dos descritores de arquivos.
                                                             (line  684)
* Py_ABS (C macro):                      Macros úteis.       (line   34)
* Py_AddPendingCall (C function):        Notificações assíncronas.
                                                             (line   10)
* Py_ALWAYS_INLINE (C macro):            Macros úteis.       (line   44)
* Py_am_aiter (C macro):                 Async Object Structures.
                                                             (line   41)
* Py_am_anext (C macro):                 Async Object Structures.
                                                             (line   56)
* Py_am_await (C macro):                 Async Object Structures.
                                                             (line   26)
* Py_am_send (C macro):                  Async Object Structures.
                                                             (line   68)
* Py_ARRAY_LENGTH (C macro):             Macros úteis.       (line  256)
* Py_ASNATIVEBYTES_ALLOW_INDEX (C macro): Objetos Inteiros.  (line  483)
* Py_ASNATIVEBYTES_BIG_ENDIAN (C macro): Objetos Inteiros.   (line  468)
* Py_ASNATIVEBYTES_DEFAULTS (C macro):   Objetos Inteiros.   (line  465)
* Py_ASNATIVEBYTES_LITTLE_ENDIAN (C macro): Objetos Inteiros.
                                                             (line  471)
* Py_ASNATIVEBYTES_NATIVE_ENDIAN (C macro): Objetos Inteiros.
                                                             (line  474)
* Py_ASNATIVEBYTES_REJECT_NEGATIVE (C macro): Objetos Inteiros.
                                                             (line  480)
* Py_ASNATIVEBYTES_UNSIGNED_BUFFER (C macro): Objetos Inteiros.
                                                             (line  477)
* Py_AtExit (C function):                Controle de processos.
                                                             (line   34)
* Py_AUDIT_READ (C macro):               Member flags.       (line   12)
* Py_AuditHookFunction (C type):         Funções de sistema. (line  157)
* Py_BEGIN_ALLOW_THREADS (C macro):      Releasing the GIL from extension code.
                                                             (line   21)
* Py_BEGIN_ALLOW_THREADS (C macro) <1>:  High-level API.     (line  187)
* Py_BEGIN_CRITICAL_SECTION (C macro):   Python Critical Section API.
                                                             (line   57)
* Py_BEGIN_CRITICAL_SECTION2 (C macro):  Python Critical Section API.
                                                             (line   85)
* Py_bf_getbuffer (C macro):             Buffer Object Structures.
                                                             (line   16)
* Py_bf_releasebuffer (C macro):         Buffer Object Structures.
                                                             (line   67)
* Py_BLOCK_THREADS (C macro):            High-level API.     (line  201)
* Py_buffer (C type):                    Estrutura de Buffer.
                                                             (line   27)
* Py_buffer.buf (C member):              Estrutura de Buffer.
                                                             (line   29)
* Py_buffer.format (C member):           Estrutura de Buffer.
                                                             (line   92)
* Py_buffer.internal (C member):         Estrutura de Buffer.
                                                             (line  158)
* Py_buffer.itemsize (C member):         Estrutura de Buffer.
                                                             (line   72)
* Py_buffer.len (C member):              Estrutura de Buffer.
                                                             (line   55)
* Py_buffer.ndim (C member):             Estrutura de Buffer.
                                                             (line  101)
* Py_buffer.obj (C member):              Estrutura de Buffer.
                                                             (line   41)
* Py_buffer.readonly (C member):         Estrutura de Buffer.
                                                             (line   67)
* Py_buffer.shape (C member):            Estrutura de Buffer.
                                                             (line  110)
* Py_buffer.strides (C member):          Estrutura de Buffer.
                                                             (line  124)
* Py_buffer.suboffsets (C member):       Estrutura de Buffer.
                                                             (line  137)
* Py_BUILD_ASSERT (C macro):             Macros úteis.       (line  183)
* Py_BUILD_ASSERT_EXPR (C macro):        Macros úteis.       (line  195)
* Py_BuildValue (C function):            Construindo valores.
                                                             (line    6)
* Py_BytesMain (C function):             Inicializando e encerrando o interpretador.
                                                             (line  123)
* Py_BytesWarningFlag (C var):           Variáveis de configuração global.
                                                             (line   15)
* Py_CHARMASK (C macro):                 Macros úteis.       (line   70)
* Py_CLEANUP_SUPPORTED (C macro):        Outros objetos.     (line   40)
* Py_CLEAR (C function):                 Contagem de referências.
                                                             (line  146)
* Py_CompileString (C function):         A camada de nível muito alto.
                                                             (line  237)
* Py_CompileString (função C):           Símbolos iniciais disponíveis.
                                                             (line    8)
* Py_CompileString (função C) <1>:       Símbolos iniciais disponíveis.
                                                             (line   13)
* Py_CompileString (função C) <2>:       Símbolos iniciais disponíveis.
                                                             (line   20)
* Py_CompileString (função C) <3>:       Símbolos iniciais disponíveis.
                                                             (line   26)
* Py_CompileStringExFlags (C function):  A camada de nível muito alto.
                                                             (line  272)
* Py_CompileStringFlags (C function):    A camada de nível muito alto.
                                                             (line  244)
* Py_CompileStringObject (C function):   A camada de nível muito alto.
                                                             (line  250)
* Py_complex (C type):                   Números complexos como estruturas C.
                                                             (line   10)
* Py_complex.imag (C member):            Números complexos como estruturas C.
                                                             (line   17)
* Py_complex.real (C member):            Números complexos como estruturas C.
                                                             (line   17)
* Py_CONSTANT_ELLIPSIS (C macro):        Protocolo de objeto.
                                                             (line   28)
* Py_CONSTANT_EMPTY_BYTES (C macro):     Protocolo de objeto.
                                                             (line   43)
* Py_CONSTANT_EMPTY_STR (C macro):       Protocolo de objeto.
                                                             (line   40)
* Py_CONSTANT_EMPTY_TUPLE (C macro):     Protocolo de objeto.
                                                             (line   46)
* Py_CONSTANT_FALSE (C macro):           Protocolo de objeto.
                                                             (line   22)
* Py_CONSTANT_NONE (C macro):            Protocolo de objeto.
                                                             (line   19)
* Py_CONSTANT_NOT_IMPLEMENTED (C macro): Protocolo de objeto.
                                                             (line   31)
* Py_CONSTANT_ONE (C macro):             Protocolo de objeto.
                                                             (line   37)
* Py_CONSTANT_TRUE (C macro):            Protocolo de objeto.
                                                             (line   25)
* Py_CONSTANT_ZERO (C macro):            Protocolo de objeto.
                                                             (line   34)
* PY_CXX_CONST (C macro):                Funções da API.     (line  117)
* Py_DEBUG (C macro):                    Compilações de depuração.
                                                             (line   19)
* Py_DEBUG (no módulo test.support):     test support — Utilitários para o conjunto de teste do Python.
                                                             (line  123)
* Py_DebugFlag (C var):                  Variáveis de configuração global.
                                                             (line   30)
* Py_DecodeLocale (C function):          Utilitários do sistema operacional.
                                                             (line  135)
* Py_DECREF (C function):                Contagem de referências.
                                                             (line  106)
* Py_DecRef (C function):                Contagem de referências.
                                                             (line  169)
* Py_DECREF (função C):                  Contagens de referências<2>.
                                                             (line   19)
* Py_DEPRECATED (C macro):               Macros úteis.       (line   76)
* Py_DontWriteBytecodeFlag (C var):      Variáveis de configuração global.
                                                             (line   45)
* Py_DTSF_ADD_DOT_0 (C macro):           Conversão e formação de strings.
                                                             (line  140)
* Py_DTSF_ALT (C macro):                 Conversão e formação de strings.
                                                             (line  145)
* Py_DTSF_NO_NEG_0 (C macro):            Conversão e formação de strings.
                                                             (line  151)
* Py_DTSF_SIGN (C macro):                Conversão e formação de strings.
                                                             (line  135)
* Py_DTST_FINITE (C macro):              Conversão e formação de strings.
                                                             (line  164)
* Py_DTST_INFINITE (C macro):            Conversão e formação de strings.
                                                             (line  167)
* Py_DTST_NAN (C macro):                 Conversão e formação de strings.
                                                             (line  170)
* Py_Ellipsis (C var):                   Objeto Ellipsis.    (line   11)
* Py_EncodeLocale (C function):          Utilitários do sistema operacional.
                                                             (line  191)
* Py_END_ALLOW_THREADS (C macro):        Releasing the GIL from extension code.
                                                             (line   21)
* Py_END_ALLOW_THREADS (C macro) <1>:    High-level API.     (line  194)
* Py_END_CRITICAL_SECTION (C macro):     Python Critical Section API.
                                                             (line   72)
* Py_END_CRITICAL_SECTION2 (C macro):    Python Critical Section API.
                                                             (line  101)
* Py_EndInterpreter (C function):        Sub-interpreter support.
                                                             (line  206)
* Py_EnterRecursiveCall (C function):    Controle de recursão.
                                                             (line   13)
* Py_EQ (C macro):                       PyTypeObject Slots. (line 1120)
* Py_eval_input (C var):                 Símbolos iniciais disponíveis.
                                                             (line    6)
* Py_Exit (C function):                  Controle de processos.
                                                             (line   23)
* Py_ExitStatusException (C function):   PyStatus.           (line   65)
* Py_EXPORTED_SYMBOL (C macro):          Macros úteis.       (line  270)
* Py_False (C var):                      Objetos Booleanos.  (line   21)
* Py_FatalError (C function):            Controle de processos.
                                                             (line    6)
* Py_FatalError():                       Parâmetros de todo o processo.
                                                             (line  227)
* Py_FdIsInteractive (C function):       Utilitários do sistema operacional.
                                                             (line   18)
* Py_file_input (C var):                 Símbolos iniciais disponíveis.
                                                             (line   11)
* Py_Finalize (C function):              Inicializando e encerrando o interpretador.
                                                             (line  118)
* Py_FinalizeEx (C function):            Inicializando e encerrando o interpretador.
                                                             (line   66)
* Py_FinalizeEx (função C):              Controle de processos.
                                                             (line   24)
* Py_FinalizeEx (função C) <1>:          Controle de processos.
                                                             (line   35)
* Py_FinalizeEx (função C) <2>:          Inicializando e encerrando o interpretador.
                                                             (line    7)
* Py_FinalizeEx (função C) <3>:          Sub-interpreter support.
                                                             (line  169)
* Py_FinalizeEx (função C) <4>:          Sub-interpreter support.
                                                             (line  207)
* Py_FrozenFlag (C var):                 Variáveis de configuração global.
                                                             (line   60)
* Py_func_type_input (C var):            Símbolos iniciais disponíveis.
                                                             (line   24)
* Py_GE (C macro):                       PyTypeObject Slots. (line 1129)
* Py_GenericAlias (C function):          Objetos de indicação de tipos.
                                                             (line   10)
* Py_GenericAliasType (C var):           Objetos de indicação de tipos.
                                                             (line   43)
* Py_GetArgcArgv (C function):           Py_GetArgcArgv.     (line    6)
* Py_GetBuildInfo (C function):          Parâmetros de todo o processo.
                                                             (line  214)
* Py_GetCompiler (C function):           Parâmetros de todo o processo.
                                                             (line  203)
* Py_GetConstant (C function):           Protocolo de objeto.
                                                             (line    6)
* Py_GetConstantBorrowed (C function):   Protocolo de objeto.
                                                             (line   56)
* Py_GetCopyright (C function):          Parâmetros de todo o processo.
                                                             (line  193)
* Py_GETENV (C macro):                   Macros úteis.       (line   87)
* Py_GetExecPrefix (C function):         Parâmetros de todo o processo.
                                                             (line   69)
* Py_GetExecPrefix (função C):           Incorporando Python<2>.
                                                             (line   42)
* Py_GetPath (C function):               Parâmetros de todo o processo.
                                                             (line  141)
* Py_GetPath (função C):                 Incorporando Python<2>.
                                                             (line   42)
* Py_GetPath():                          Parâmetros de todo o processo.
                                                             (line    7)
* Py_GetPlatform (C function):           Parâmetros de todo o processo.
                                                             (line  181)
* Py_GetPrefix (C function):             Parâmetros de todo o processo.
                                                             (line   45)
* Py_GetPrefix (função C):               Incorporando Python<2>.
                                                             (line   42)
* Py_GetProgramFullPath (C function):    Parâmetros de todo o processo.
                                                             (line  121)
* Py_GetProgramFullPath (função C):      Incorporando Python<2>.
                                                             (line   42)
* Py_GetProgramName (C function):        Parâmetros de todo o processo.
                                                             (line   30)
* Py_GetPythonHome (C function):         Parâmetros de todo o processo.
                                                             (line  323)
* Py_GetRecursionLimit (C function):     Controle de recursão.
                                                             (line   70)
* Py_GetVersion (C function):            Parâmetros de todo o processo.
                                                             (line  166)
* Py_GT (C macro):                       PyTypeObject Slots. (line 1126)
* Py_HASH_ALGORITHM (C macro):           API do PyHash.      (line   21)
* Py_HASH_CUTOFF (C macro):              API do PyHash.      (line   45)
* Py_HASH_FNV (C macro):                 API do PyHash.      (line   31)
* Py_HASH_SIPHASH13 (C macro):           API do PyHash.      (line   31)
* Py_HASH_SIPHASH24 (C macro):           API do PyHash.      (line   31)
* Py_hash_t (C type):                    API do PyHash.      (line    9)
* Py_HashPointer (C function):           API do PyHash.      (line  147)
* Py_HashRandomizationFlag (C var):      Variáveis de configuração global.
                                                             (line   75)
* PY_HAVE_THREAD_NATIVE_ID (C macro):    Operating System Thread APIs.
                                                             (line   49)
* Py_hexdigits (C var):                  Variáveis utilitárias de codec.
                                                             (line    6)
* Py_HUGE_VAL (C macro):                 Objetos de ponto flutuante.
                                                             (line   85)
* Py_IgnoreEnvironmentFlag (C var):      Variáveis de configuração global.
                                                             (line   91)
* Py_IMPORTED_SYMBOL (C macro):          Macros úteis.       (line  278)
* Py_INCREF (C function):                Contagem de referências.
                                                             (line   43)
* Py_IncRef (C function):                Contagem de referências.
                                                             (line  163)
* Py_INCREF (função C):                  Contagens de referências<2>.
                                                             (line   19)
* Py_INFINITY (C macro):                 Objetos de ponto flutuante.
                                                             (line   69)
* Py_Initialize (C function):            Inicializando e encerrando o interpretador.
                                                             (line    6)
* Py_Initialize (função C):              Incorporando Python<2>.
                                                             (line   12)
* Py_Initialize (função C) <1>:          Sub-interpreter support.
                                                             (line  169)
* Py_Initialize():                       Parâmetros de todo o processo.
                                                             (line    7)
* Py_InitializeEx (C function):          Inicializando e encerrando o interpretador.
                                                             (line   30)
* Py_InitializeFromConfig (C function):  Inicializando e encerrando o interpretador.
                                                             (line   40)
* Py_InspectFlag (C var):                Variáveis de configuração global.
                                                             (line  106)
* Py_InteractiveFlag (C var):            Variáveis de configuração global.
                                                             (line  122)
* PY_INVALID_STACK_EFFECT (C macro):     Stack Effects.      (line   11)
* Py_Is (C function):                    Macros e tipos de objetos base.
                                                             (line   59)
* Py_IS_FINITE (C macro):                Objetos de ponto flutuante.
                                                             (line  135)
* Py_IS_INFINITY (C macro):              Objetos de ponto flutuante.
                                                             (line  144)
* Py_IS_NAN (C macro):                   Objetos de ponto flutuante.
                                                             (line  152)
* Py_IS_TYPE (C function):               Macros e tipos de objetos base.
                                                             (line   98)
* Py_ISALNUM (C macro):                  Classificação e conversão de caracteres.
                                                             (line   10)
* Py_ISALPHA (C macro):                  Classificação e conversão de caracteres.
                                                             (line   15)
* Py_ISDIGIT (C macro):                  Classificação e conversão de caracteres.
                                                             (line   20)
* Py_IsFalse (C function):               Macros e tipos de objetos base.
                                                             (line   79)
* Py_IsFinalizing (C function):          Inicializando e encerrando o interpretador.
                                                             (line   58)
* Py_IsInitialized (C function):         Inicializando e encerrando o interpretador.
                                                             (line   51)
* Py_IsInitialized (função C):           Incorporando Python<2>.
                                                             (line   51)
* Py_ISLOWER (C macro):                  Classificação e conversão de caracteres.
                                                             (line   25)
* Py_IsNone (C function):                Macros e tipos de objetos base.
                                                             (line   65)
* Py_IsolatedFlag (C var):               Variáveis de configuração global.
                                                             (line  132)
* Py_ISSPACE (C macro):                  Classificação e conversão de caracteres.
                                                             (line   35)
* Py_IsTrue (C function):                Macros e tipos de objetos base.
                                                             (line   72)
* Py_ISUPPER (C macro):                  Classificação e conversão de caracteres.
                                                             (line   30)
* Py_ISXDIGIT (C macro):                 Classificação e conversão de caracteres.
                                                             (line   41)
* Py_LE (C macro):                       PyTypeObject Slots. (line 1117)
* Py_LeaveRecursiveCall (C function):    Controle de recursão.
                                                             (line   34)
* Py_LegacyWindowsFSEncodingFlag (C var): Variáveis de configuração global.
                                                             (line  148)
* Py_LegacyWindowsStdioFlag (C var):     Variáveis de configuração global.
                                                             (line  171)
* Py_LIMITED_API (C macro):              API C Limitada.     (line   11)
* Py_LOCAL (C macro):                    Macros úteis.       (line   93)
* Py_LOCAL_INLINE (C macro):             Macros úteis.       (line   99)
* Py_LOCAL_SYMBOL (C macro):             Macros úteis.       (line  104)
* PY_LOCK_ACQUIRED (C enumerator):       Legacy Locking APIs.
                                                             (line   24)
* PY_LOCK_FAILURE (C enumerator):        Legacy Locking APIs.
                                                             (line   20)
* PY_LOCK_INTR (C enumerator):           Legacy Locking APIs.
                                                             (line   28)
* Py_LT (C macro):                       PyTypeObject Slots. (line 1114)
* Py_Main (C function):                  Inicializando e encerrando o interpretador.
                                                             (line  131)
* PY_MAJOR_VERSION (C macro):            API e Versionamento de ABI.
                                                             (line   13)
* Py_MakePendingCalls (C function):      Notificações assíncronas.
                                                             (line   58)
* Py_MATH_E (C macro):                   Objetos de ponto flutuante.
                                                             (line   92)
* Py_MATH_El (C macro):                  Objetos de ponto flutuante.
                                                             (line   97)
* Py_MATH_PI (C macro):                  Objetos de ponto flutuante.
                                                             (line  102)
* Py_MATH_PIl (C macro):                 Objetos de ponto flutuante.
                                                             (line  107)
* Py_MATH_TAU (C macro):                 Objetos de ponto flutuante.
                                                             (line  112)
* Py_MAX (C macro):                      Macros úteis.       (line  113)
* Py_MEMBER_SIZE (C macro):              Macros úteis.       (line  119)
* PY_MICRO_VERSION (C macro):            API e Versionamento de ABI.
                                                             (line   21)
* Py_MIN (C macro):                      Macros úteis.       (line  125)
* PY_MINOR_VERSION (C macro):            API e Versionamento de ABI.
                                                             (line   17)
* Py_mod_create (C macro):               Inicialização multifásica.
                                                             (line   78)
* Py_mod_exec (C macro):                 Inicialização multifásica.
                                                             (line  114)
* Py_mod_gil (C macro):                  Inicialização multifásica.
                                                             (line  159)
* Py_MOD_GIL_NOT_USED (C macro):         Inicialização multifásica.
                                                             (line  169)
* Py_MOD_GIL_USED (C macro):             Inicialização multifásica.
                                                             (line  163)
* Py_mod_multiple_interpreters (C macro): Inicialização multifásica.
                                                             (line  128)
* Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED (C macro): Inicialização multifásica.
                                                             (line  132)
* Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED (C macro): Inicialização multifásica.
                                                             (line  136)
* Py_MOD_PER_INTERPRETER_GIL_SUPPORTED (C macro): Inicialização multifásica.
                                                             (line  142)
* PY_MONITORING_EVENT_BRANCH (C macro):  Gerenciando o Estado de um Monitoramento.
                                                             (line   45)
* PY_MONITORING_EVENT_C_RAISE (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   51)
* PY_MONITORING_EVENT_C_RETURN (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   54)
* PY_MONITORING_EVENT_CALL (C macro):    Gerenciando o Estado de um Monitoramento.
                                                             (line   48)
* PY_MONITORING_EVENT_EXCEPTION_HANDLED (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   57)
* PY_MONITORING_EVENT_INSTRUCTION (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   60)
* PY_MONITORING_EVENT_JUMP (C macro):    Gerenciando o Estado de um Monitoramento.
                                                             (line   63)
* PY_MONITORING_EVENT_LINE (C macro):    Gerenciando o Estado de um Monitoramento.
                                                             (line   66)
* PY_MONITORING_EVENT_PY_RESUME (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   69)
* PY_MONITORING_EVENT_PY_RETURN (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   72)
* PY_MONITORING_EVENT_PY_START (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   75)
* PY_MONITORING_EVENT_PY_THROW (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   78)
* PY_MONITORING_EVENT_PY_UNWIND (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   81)
* PY_MONITORING_EVENT_PY_YIELD (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   84)
* PY_MONITORING_EVENT_RAISE (C macro):   Gerenciando o Estado de um Monitoramento.
                                                             (line   87)
* PY_MONITORING_EVENT_RERAISE (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   90)
* PY_MONITORING_EVENT_STOP_ITERATION (C macro): Gerenciando o Estado de um Monitoramento.
                                                             (line   93)
* PY_MONITORING_IS_INSTRUMENTED_EVENT (C function): Gerenciando o Estado de um Monitoramento.
                                                             (line  101)
* Py_mp_ass_subscript (C macro):         Mapping Object Structures.
                                                             (line   37)
* Py_mp_length (C macro):                Mapping Object Structures.
                                                             (line   15)
* Py_mp_subscript (C macro):             Mapping Object Structures.
                                                             (line   25)
* Py_NAN (C macro):                      Objetos de ponto flutuante.
                                                             (line   77)
* Py_nb_absolute (C macro):              Number Object Structures.
                                                             (line  121)
* Py_nb_add (C macro):                   Number Object Structures.
                                                             (line   73)
* Py_nb_and (C macro):                   Number Object Structures.
                                                             (line  149)
* Py_nb_bool (C macro):                  Number Object Structures.
                                                             (line  126)
* Py_nb_divmod (C macro):                Number Object Structures.
                                                             (line   97)
* Py_nb_float (C macro):                 Number Object Structures.
                                                             (line  172)
* Py_nb_floor_divide (C macro):          Number Object Structures.
                                                             (line  238)
* Py_nb_index (C macro):                 Number Object Structures.
                                                             (line  263)
* Py_nb_inplace_add (C macro):           Number Object Structures.
                                                             (line  178)
* Py_nb_inplace_and (C macro):           Number Object Structures.
                                                             (line  220)
* Py_nb_inplace_floor_divide (C macro):  Number Object Structures.
                                                             (line  251)
* Py_nb_inplace_lshift (C macro):        Number Object Structures.
                                                             (line  208)
* Py_nb_inplace_matrix_multiply (C macro): Number Object Structures.
                                                             (line  276)
* Py_nb_inplace_multiply (C macro):      Number Object Structures.
                                                             (line  190)
* Py_nb_inplace_or (C macro):            Number Object Structures.
                                                             (line  232)
* Py_nb_inplace_power (C macro):         Number Object Structures.
                                                             (line  202)
* Py_nb_inplace_remainder (C macro):     Number Object Structures.
                                                             (line  196)
* Py_nb_inplace_rshift (C macro):        Number Object Structures.
                                                             (line  214)
* Py_nb_inplace_subtract (C macro):      Number Object Structures.
                                                             (line  184)
* Py_nb_inplace_true_divide (C macro):   Number Object Structures.
                                                             (line  258)
* Py_nb_inplace_xor (C macro):           Number Object Structures.
                                                             (line  226)
* Py_nb_int (C macro):                   Number Object Structures.
                                                             (line  164)
* Py_nb_invert (C macro):                Number Object Structures.
                                                             (line  132)
* Py_nb_lshift (C macro):                Number Object Structures.
                                                             (line  138)
* Py_nb_matrix_multiply (C macro):       Number Object Structures.
                                                             (line  269)
* Py_nb_multiply (C macro):              Number Object Structures.
                                                             (line   85)
* Py_nb_negative (C macro):              Number Object Structures.
                                                             (line  109)
* Py_nb_or (C macro):                    Number Object Structures.
                                                             (line  159)
* Py_nb_positive (C macro):              Number Object Structures.
                                                             (line  115)
* Py_nb_power (C macro):                 Number Object Structures.
                                                             (line  103)
* Py_nb_remainder (C macro):             Number Object Structures.
                                                             (line   91)
* Py_nb_rshift (C macro):                Number Object Structures.
                                                             (line  144)
* Py_nb_subtract (C macro):              Number Object Structures.
                                                             (line   79)
* Py_nb_true_divide (C macro):           Number Object Structures.
                                                             (line  244)
* Py_nb_xor (C macro):                   Number Object Structures.
                                                             (line  154)
* Py_NE (C macro):                       PyTypeObject Slots. (line 1123)
* Py_NewInterpreter (C function):        Sub-interpreter support.
                                                             (line  196)
* Py_NewInterpreterFromConfig (C function): Sub-interpreter support.
                                                             (line  109)
* Py_NewRef (C function):                Contagem de referências.
                                                             (line   73)
* Py_NO_INLINE (C macro):                Macros úteis.       (line  131)
* Py_None (C var):                       O Objeto None.      (line   11)
* Py_NoSiteFlag (C var):                 Variáveis de configuração global.
                                                             (line  191)
* Py_NotImplemented (C var):             Protocolo de objeto.
                                                             (line   71)
* Py_NoUserSiteDirectory (C var):        Variáveis de configuração global.
                                                             (line  207)
* py_object (classe em ctypes):          Tipos de dados fundamentais<2>.
                                                             (line  220)
* Py_OpenCodeHookFunction (C type):      Objetos arquivos.   (line   67)
* Py_OptimizeFlag (C var):               Variáveis de configuração global.
                                                             (line  222)
* Py_PreInitialize (C function):         Pré-inicializar Python com PyPreConfig.
                                                             (line   22)
* Py_PreInitializeFromArgs (C function): Pré-inicializar Python com PyPreConfig.
                                                             (line   39)
* Py_PreInitializeFromBytesArgs (C function): Pré-inicializar Python com PyPreConfig.
                                                             (line   29)
* Py_PRINT_RAW (C macro):                Protocolo de objeto.
                                                             (line   82)
* Py_PRINT_RAW (macro C):                Objetos arquivos.   (line  121)
* Py_QuietFlag (C var):                  Variáveis de configuração global.
                                                             (line  234)
* Py_READONLY (C macro):                 Member flags.       (line    8)
* Py_REFCNT (C function):                Contagem de referências.
                                                             (line    9)
* Py_RELATIVE_OFFSET (C macro):          Member flags.       (line   16)
* PY_RELEASE_LEVEL (C macro):            API e Versionamento de ABI.
                                                             (line   25)
* PY_RELEASE_SERIAL (C macro):           API e Versionamento de ABI.
                                                             (line   30)
* Py_ReprEnter (C function):             Controle de recursão.
                                                             (line   48)
* Py_ReprLeave (C function):             Controle de recursão.
                                                             (line   65)
* PY_RESUME (monitoring event):          Eventos.            (line   43)
* PY_RETURN (monitoring event):          Eventos.            (line   48)
* Py_RETURN_FALSE (C macro):             Objetos Booleanos.  (line   37)
* Py_RETURN_INF (C macro):               Objetos de ponto flutuante.
                                                             (line  126)
* Py_RETURN_NAN (C macro):               Objetos de ponto flutuante.
                                                             (line  119)
* Py_RETURN_NONE (C macro):              O Objeto None.      (line   19)
* Py_RETURN_NOTIMPLEMENTED (C macro):    Protocolo de objeto.
                                                             (line   76)
* Py_RETURN_RICHCOMPARE (C macro):       PyTypeObject Slots. (line 1135)
* Py_RETURN_TRUE (C macro):              Objetos Booleanos.  (line   41)
* Py_RunMain (C function):               Inicializando e encerrando o interpretador.
                                                             (line  181)
* Py_SET_REFCNT (C function):            Contagem de referências.
                                                             (line   29)
* Py_SET_SIZE (C function):              Macros e tipos de objetos base.
                                                             (line  121)
* Py_SET_TYPE (C function):              Macros e tipos de objetos base.
                                                             (line  105)
* Py_SetProgramName (C function):        Parâmetros de todo o processo.
                                                             (line    6)
* Py_SetPythonHome (C function):         Parâmetros de todo o processo.
                                                             (line  303)
* Py_SetRecursionLimit (C function):     Controle de recursão.
                                                             (line   84)
* Py_SETREF (C macro):                   Contagem de referências.
                                                             (line  175)
* Py_single_input (C var):               Símbolos iniciais disponíveis.
                                                             (line   18)
* Py_SIZE (C function):                  Macros e tipos de objetos base.
                                                             (line  111)
* Py_sq_ass_item (C macro):              Sequence Object Structures.
                                                             (line   66)
* Py_sq_concat (C macro):                Sequence Object Structures.
                                                             (line   26)
* Py_sq_contains (C macro):              Sequence Object Structures.
                                                             (line   79)
* Py_sq_inplace_concat (C macro):        Sequence Object Structures.
                                                             (line   90)
* Py_sq_inplace_repeat (C macro):        Sequence Object Structures.
                                                             (line  104)
* Py_sq_item (C macro):                  Sequence Object Structures.
                                                             (line   47)
* Py_sq_length (C macro):                Sequence Object Structures.
                                                             (line   15)
* Py_sq_repeat (C macro):                Sequence Object Structures.
                                                             (line   36)
* Py_ssize_t (C type):                   Tipos.              (line   14)
* PY_SSIZE_T_MAX (C macro):              Objetos Inteiros.   (line  251)
* PY_START (monitoring event):           Eventos.            (line   53)
* Py_STRINGIFY (C macro):                Macros úteis.       (line  143)
* Py_T_BOOL (C macro):                   Member types.       (line   85)
* Py_T_BYTE (C macro):                   Member types.       (line   20)
* Py_T_CHAR (C macro):                   Member types.       (line  100)
* Py_T_DOUBLE (C macro):                 Member types.       (line   80)
* Py_T_FLOAT (C macro):                  Member types.       (line   75)
* Py_T_INT (C macro):                    Member types.       (line   30)
* Py_T_LONG (C macro):                   Member types.       (line   35)
* Py_T_LONGLONG (C macro):               Member types.       (line   40)
* Py_T_OBJECT_EX (C macro):              Member types.       (line  105)
* Py_T_PYSSIZET (C macro):               Member types.       (line   70)
* Py_T_SHORT (C macro):                  Member types.       (line   25)
* Py_T_STRING (C macro):                 Member types.       (line   90)
* Py_T_STRING_INPLACE (C macro):         Member types.       (line   95)
* Py_T_UBYTE (C macro):                  Member types.       (line   45)
* Py_T_UINT (C macro):                   Member types.       (line   50)
* Py_T_ULONG (C macro):                  Member types.       (line   60)
* Py_T_ULONGLONG (C macro):              Member types.       (line   65)
* Py_T_USHORT (C macro):                 Member types.       (line   55)
* PY_THROW (monitoring event):           Eventos.            (line   58)
* Py_TOLOWER (C macro):                  Classificação e conversão de caracteres.
                                                             (line   46)
* Py_TOUPPER (C macro):                  Classificação e conversão de caracteres.
                                                             (line   50)
* Py_tp_alloc (C macro):                 PyTypeObject Slots. (line 1497)
* Py_tp_base (C macro):                  PyTypeObject Slots. (line 1308)
* Py_tp_bases (C macro):                 PyTypeObject Slots. (line 1624)
* Py_tp_call (C macro):                  PyTypeObject Slots. (line  419)
* Py_tp_clear (C macro):                 PyTypeObject Slots. (line 1005)
* Py_tp_dealloc (C macro):               PyTypeObject Slots. (line  137)
* Py_tp_del (C macro):                   PyTypeObject Slots. (line 1700)
* Py_tp_descr_get (C macro):             PyTypeObject Slots. (line 1380)
* Py_tp_descr_set (C macro):             PyTypeObject Slots. (line 1396)
* Py_tp_doc (C macro):                   PyTypeObject Slots. (line  892)
* Py_tp_finalize (C macro):              PyTypeObject Slots. (line 1716)
* Py_tp_free (C macro):                  PyTypeObject Slots. (line 1565)
* Py_tp_getattr (C macro):               PyTypeObject Slots. (line  247)
* Py_tp_getattro (C macro):              PyTypeObject Slots. (line  464)
* Py_tp_getset (C macro):                PyTypeObject Slots. (line 1290)
* Py_tp_hash (C macro):                  PyTypeObject Slots. (line  374)
* Py_tp_init (C macro):                  PyTypeObject Slots. (line 1458)
* Py_tp_is_gc (C macro):                 PyTypeObject Slots. (line 1592)
* Py_tp_iter (C macro):                  PyTypeObject Slots. (line 1206)
* Py_tp_iternext (C macro):              PyTypeObject Slots. (line 1226)
* Py_tp_members (C macro):               PyTypeObject Slots. (line 1271)
* Py_tp_methods (C macro):               PyTypeObject Slots. (line 1252)
* Py_tp_new (C macro):                   PyTypeObject Slots. (line 1523)
* Py_tp_repr (C macro):                  PyTypeObject Slots. (line  309)
* Py_tp_richcompare (C macro):           PyTypeObject Slots. (line 1091)
* Py_tp_setattr (C macro):               PyTypeObject Slots. (line  270)
* Py_tp_setattro (C macro):              PyTypeObject Slots. (line  494)
* Py_tp_str (C macro):                   PyTypeObject Slots. (line  434)
* Py_tp_traverse (C macro):              PyTypeObject Slots. (line  906)
* Py_TPFLAGS_BASE_EXC_SUBCLASS (C macro): PyTypeObject Slots.
                                                             (line  743)
* Py_TPFLAGS_BASETYPE (C macro):         PyTypeObject Slots. (line  593)
* Py_TPFLAGS_BYTES_SUBCLASS (C macro):   PyTypeObject Slots. (line  737)
* Py_TPFLAGS_DEFAULT (C macro):          PyTypeObject Slots. (line  643)
* Py_TPFLAGS_DICT_SUBCLASS (C macro):    PyTypeObject Slots. (line  741)
* Py_TPFLAGS_DISALLOW_INSTANTIATION (C macro): PyTypeObject Slots.
                                                             (line  804)
* Py_TPFLAGS_HAVE_FINALIZE (C macro):    PyTypeObject Slots. (line  756)
* Py_TPFLAGS_HAVE_GC (C macro):          PyTypeObject Slots. (line  621)
* Py_TPFLAGS_HAVE_VECTORCALL (C macro):  PyTypeObject Slots. (line  767)
* Py_TPFLAGS_HEAPTYPE (C macro):         PyTypeObject Slots. (line  575)
* Py_TPFLAGS_IMMUTABLETYPE (C macro):    PyTypeObject Slots. (line  790)
* Py_TPFLAGS_ITEMS_AT_END (C macro):     PyTypeObject Slots. (line  711)
* Py_TPFLAGS_LIST_SUBCLASS (C macro):    PyTypeObject Slots. (line  733)
* Py_TPFLAGS_LONG_SUBCLASS (C macro):    PyTypeObject Slots. (line  731)
* Py_TPFLAGS_MANAGED_DICT (C macro):     PyTypeObject Slots. (line  679)
* Py_TPFLAGS_MANAGED_WEAKREF (C macro):  PyTypeObject Slots. (line  699)
* Py_TPFLAGS_MAPPING (C macro):          PyTypeObject Slots. (line  832)
* Py_TPFLAGS_METHOD_DESCRIPTOR (C macro): PyTypeObject Slots.
                                                             (line  654)
* Py_TPFLAGS_READY (C macro):            PyTypeObject Slots. (line  603)
* Py_TPFLAGS_READYING (C macro):         PyTypeObject Slots. (line  612)
* Py_TPFLAGS_SEQUENCE (C macro):         PyTypeObject Slots. (line  856)
* Py_TPFLAGS_TUPLE_SUBCLASS (C macro):   PyTypeObject Slots. (line  735)
* Py_TPFLAGS_TYPE_SUBCLASS (C macro):    PyTypeObject Slots. (line  745)
* Py_TPFLAGS_UNICODE_SUBCLASS (C macro): PyTypeObject Slots. (line  739)
* Py_TPFLAGS_VALID_VERSION_TAG (C macro): PyTypeObject Slots.
                                                             (line  880)
* Py_tracefunc (C type):                 Profiling and Tracing.
                                                             (line   18)
* Py_True (C var):                       Objetos Booleanos.  (line   29)
* Py_tss_NEEDS_INIT (C macro):           Thread Specific Storage TSS API.
                                                             (line   28)
* Py_tss_t (C type):                     Thread Specific Storage TSS API.
                                                             (line   17)
* Py_TYPE (C function):                  Macros e tipos de objetos base.
                                                             (line   86)
* Py_UCS1 (C type):                      Tipo Unicode.       (line    9)
* Py_UCS2 (C type):                      Tipo Unicode.       (line    9)
* Py_UCS4 (C type):                      Tipo Unicode.       (line    9)
* Py_uhash_t (C type):                   API do PyHash.      (line   15)
* Py_UNBLOCK_THREADS (C macro):          High-level API.     (line  206)
* Py_UnbufferedStdioFlag (C var):        Variáveis de configuração global.
                                                             (line  249)
* Py_UNICODE (C type):                   Tipo Unicode.       (line   19)
* Py_UNICODE_HIGH_SURROGATE (C function): Propriedade de caracteres Unicode.
                                                             (line  102)
* Py_UNICODE_IS_HIGH_SURROGATE (C function): Propriedade de caracteres Unicode.
                                                             (line   94)
* Py_UNICODE_IS_LOW_SURROGATE (C function): Propriedade de caracteres Unicode.
                                                             (line   98)
* Py_UNICODE_IS_SURROGATE (C function):  Propriedade de caracteres Unicode.
                                                             (line   90)
* Py_UNICODE_ISALNUM (C function):       Propriedade de caracteres Unicode.
                                                             (line   48)
* Py_UNICODE_ISALPHA (C function):       Propriedade de caracteres Unicode.
                                                             (line   44)
* Py_UNICODE_ISDECIMAL (C function):     Propriedade de caracteres Unicode.
                                                             (line   32)
* Py_UNICODE_ISDIGIT (C function):       Propriedade de caracteres Unicode.
                                                             (line   36)
* Py_UNICODE_ISLINEBREAK (C function):   Propriedade de caracteres Unicode.
                                                             (line   27)
* Py_UNICODE_ISLOWER (C function):       Propriedade de caracteres Unicode.
                                                             (line   15)
* Py_UNICODE_ISNUMERIC (C function):     Propriedade de caracteres Unicode.
                                                             (line   40)
* Py_UNICODE_ISPRINTABLE (C function):   Propriedade de caracteres Unicode.
                                                             (line   52)
* Py_UNICODE_ISSPACE (C function):       Propriedade de caracteres Unicode.
                                                             (line   10)
* Py_UNICODE_ISTITLE (C function):       Propriedade de caracteres Unicode.
                                                             (line   23)
* Py_UNICODE_ISUPPER (C function):       Propriedade de caracteres Unicode.
                                                             (line   19)
* Py_UNICODE_JOIN_SURROGATES (C function): Propriedade de caracteres Unicode.
                                                             (line  112)
* Py_UNICODE_LOW_SURROGATE (C function): Propriedade de caracteres Unicode.
                                                             (line  107)
* Py_UNICODE_TODECIMAL (C function):     Propriedade de caracteres Unicode.
                                                             (line   71)
* Py_UNICODE_TODIGIT (C function):       Propriedade de caracteres Unicode.
                                                             (line   77)
* Py_UNICODE_TOLOWER (C function):       Propriedade de caracteres Unicode.
                                                             (line   59)
* Py_UNICODE_TONUMERIC (C function):     Propriedade de caracteres Unicode.
                                                             (line   83)
* Py_UNICODE_TOTITLE (C function):       Propriedade de caracteres Unicode.
                                                             (line   67)
* Py_UNICODE_TOUPPER (C function):       Propriedade de caracteres Unicode.
                                                             (line   63)
* Py_UNREACHABLE (C macro):              Macros úteis.       (line  150)
* Py_UNUSED (C macro):                   Macros úteis.       (line  175)
* PY_UNWIND (monitoring event):          Eventos.            (line   62)
* Py_VaBuildValue (C function):          Construindo valores.
                                                             (line  216)
* PY_VECTORCALL_ARGUMENTS_OFFSET (C macro): O protocolo vectorcall.
                                                             (line   70)
* Py_VerboseFlag (C var):                Variáveis de configuração global.
                                                             (line  263)
* Py_Version (C var):                    API e Versionamento de ABI.
                                                             (line   69)
* PY_VERSION_HEX (C macro):              API e Versionamento de ABI.
                                                             (line   34)
* Py_VISIT (C macro):                    Suporte a Coleta Cíclica de Lixo.
                                                             (line  184)
* Py_XDECREF (C function):               Contagem de referências.
                                                             (line  140)
* Py_XDECREF (função C):                 Exceções<21>.       (line  127)
* Py_XINCREF (C function):               Contagem de referências.
                                                             (line   66)
* Py_XNewRef (C function):               Contagem de referências.
                                                             (line   97)
* Py_XSETREF (C macro):                  Contagem de referências.
                                                             (line  201)
* PY_YIELD (monitoring event):           Eventos.            (line   66)
* PyAIter_Check (C function):            Protocolo Iterador. (line   14)
* PyAnySet_Check (C function):           Objeto Set.         (line   54)
* PyAnySet_CheckExact (C function):      Objeto Set.         (line   67)
* PyAPI_DATA (C macro):                  Macros úteis.       (line  291)
* PyAPI_FUNC (C macro):                  Macros úteis.       (line  284)
* PyArg_Parse (C function):              Funções da API.     (line   56)
* PyArg_ParseTuple (C function):         Extraindo parâmetros em funções de extensão.
                                                             (line    6)
* PyArg_ParseTuple (C function) <1>:     Funções da API.     (line    6)
* PyArg_ParseTupleAndKeywords (C function): Parâmetros nomeados para funções de extensão.
                                                             (line    6)
* PyArg_ParseTupleAndKeywords (C function) <1>: Funções da API.
                                                             (line   19)
* PyArg_UnpackTuple (C function):        Funções da API.     (line   75)
* PyArg_ValidateKeywordArguments (C function): Funções da API.
                                                             (line   48)
* PyArg_VaParse (C function):            Funções da API.     (line   13)
* PyArg_VaParseTupleAndKeywords (C function): Funções da API.
                                                             (line   41)
* PyASCIIObject (C type):                Tipo Unicode.       (line   30)
* PyAsyncGen_CheckExact (C function):    Objetos geradores assíncronos.
                                                             (line   32)
* PyAsyncGen_New (C function):           Objetos geradores assíncronos.
                                                             (line   19)
* PyAsyncGen_Type (C var):               Objetos geradores assíncronos.
                                                             (line   11)
* PyAsyncMethods (C type):               Async Object Structures.
                                                             (line    8)
* PyAsyncMethods.am_aiter (C member):    Async Object Structures.
                                                             (line   38)
* PyAsyncMethods.am_anext (C member):    Async Object Structures.
                                                             (line   53)
* PyAsyncMethods.am_await (C member):    Async Object Structures.
                                                             (line   23)
* PyAsyncMethods.am_send (C member):     Async Object Structures.
                                                             (line   65)
* PyBaseObject_Type (C var):             Macros e tipos de objetos base.
                                                             (line   55)
* PyBool_Check (C function):             Objetos Booleanos.  (line   16)
* PyBool_FromLong (C function):          Objetos Booleanos.  (line   45)
* PyBool_Type (C var):                   Objetos Booleanos.  (line   11)
* PyBUF_ANY_CONTIGUOUS (C macro):        requisições contíguas.
                                                             (line   24)
* PyBUF_C_CONTIGUOUS (C macro):          requisições contíguas.
                                                             (line   14)
* PyBUF_CONTIG (C macro):                requisições compostas.
                                                             (line   49)
* PyBUF_CONTIG_RO (C macro):             requisições compostas.
                                                             (line   54)
* PyBUF_F_CONTIGUOUS (C macro):          requisições contíguas.
                                                             (line   19)
* PyBUF_FORMAT (C macro):                apenas em formato.  (line   21)
* PyBUF_FULL (C macro):                  requisições compostas.
                                                             (line   19)
* PyBUF_FULL_RO (C macro):               requisições compostas.
                                                             (line   24)
* PyBUF_INDIRECT (C macro):              forma avanços suboffsets.
                                                             (line   14)
* PyBUF_MAX_NDIM (C macro):              Estrutura de Buffer.
                                                             (line  169)
* PyBUF_ND (C macro):                    forma avanços suboffsets.
                                                             (line   24)
* PyBUF_READ (C macro):                  Objetos MemoryView. (line   24)
* PyBUF_RECORDS (C macro):               requisições compostas.
                                                             (line   29)
* PyBUF_RECORDS_RO (C macro):            requisições compostas.
                                                             (line   34)
* PyBUF_SIMPLE (C macro):                forma avanços suboffsets.
                                                             (line   29)
* PyBUF_STRIDED (C macro):               requisições compostas.
                                                             (line   39)
* PyBUF_STRIDED_RO (C macro):            requisições compostas.
                                                             (line   44)
* PyBUF_STRIDES (C macro):               forma avanços suboffsets.
                                                             (line   19)
* PyBUF_WRITABLE (C macro):              apenas em formato.  (line    6)
* PyBUF_WRITE (C macro):                 Objetos MemoryView. (line   28)
* PyBUF_WRITEABLE (C macro):             apenas em formato.  (line   16)
* PyBuffer_FillContiguousStrides (C function): Funções relacionadas ao Buffer.
                                                             (line   90)
* PyBuffer_FillInfo (C function):        Funções relacionadas ao Buffer.
                                                             (line   97)
* PyBuffer_FromContiguous (C function):  Funções relacionadas ao Buffer.
                                                             (line   66)
* PyBuffer_GetPointer (C function):      Funções relacionadas ao Buffer.
                                                             (line   60)
* PyBuffer_IsContiguous (C function):    Funções relacionadas ao Buffer.
                                                             (line   52)
* PyBuffer_Release (C function):         Funções relacionadas ao Buffer.
                                                             (line   33)
* PyBuffer_SizeFromFormat (C function):  Funções relacionadas ao Buffer.
                                                             (line   44)
* PyBuffer_ToContiguous (C function):    Funções relacionadas ao Buffer.
                                                             (line   73)
* PyBufferProcs (C type):                Buffer Object Structures.
                                                             (line    6)
* PyBufferProcs (tipo C):                Protocolo de buffer.
                                                             (line   21)
* PyBufferProcs.bf_getbuffer (C member): Buffer Object Structures.
                                                             (line   12)
* PyBufferProcs.bf_releasebuffer (C member): Buffer Object Structures.
                                                             (line   63)
* PyByteArray_AS_STRING (C function):    Macros.             (line    9)
* PyByteArray_AsString (C function):     Funções diretas da API.
                                                             (line   34)
* PyByteArray_Check (C function):        Macros para verificação de tipo.
                                                             (line    6)
* PyByteArray_CheckExact (C function):   Macros para verificação de tipo.
                                                             (line   12)
* PyByteArray_Concat (C function):       Funções diretas da API.
                                                             (line   21)
* PyByteArray_FromObject (C function):   Funções diretas da API.
                                                             (line    6)
* PyByteArray_FromStringAndSize (C function): Funções diretas da API.
                                                             (line   13)
* PyByteArray_GET_SIZE (C function):     Macros.             (line   14)
* PyByteArray_Resize (C function):       Funções diretas da API.
                                                             (line   40)
* PyByteArray_Size (C function):         Funções diretas da API.
                                                             (line   29)
* PyByteArray_Type (C var):              Objetos byte array. (line   11)
* PyByteArrayIter_Type (C var):          Outros objetos iteradores.
                                                             (line    6)
* PyByteArrayObject (C type):            Objetos byte array. (line    6)
* PyBytes_AS_STRING (C function):        Objetos bytes<2>.   (line  141)
* PyBytes_AsString (C function):         Objetos bytes<2>.   (line  130)
* PyBytes_AsStringAndSize (C function):  Objetos bytes<2>.   (line  146)
* PyBytes_Check (C function):            Objetos bytes<2>.   (line   19)
* PyBytes_CheckExact (C function):       Objetos bytes<2>.   (line   25)
* PyBytes_Concat (C function):           Objetos bytes<2>.   (line  168)
* PyBytes_ConcatAndDel (C function):     Objetos bytes<2>.   (line  177)
* PyBytes_DecodeEscape (C function):     Objetos bytes<2>.   (line  218)
* PyBytes_FromFormat (C function):       Objetos bytes<2>.   (line   45)
* PyBytes_FromFormatV (C function):      Objetos bytes<2>.   (line  111)
* PyBytes_FromObject (C function):       Objetos bytes<2>.   (line  117)
* PyBytes_FromString (C function):       Objetos bytes<2>.   (line   31)
* PyBytes_FromStringAndSize (C function): Objetos bytes<2>.  (line   37)
* PyBytes_GET_SIZE (C function):         Objetos bytes<2>.   (line  126)
* PyBytes_Repr (C function):             Objetos bytes<2>.   (line  198)
* PyBytes_Size (C function):             Objetos bytes<2>.   (line  122)
* PyBytes_Type (C var):                  Objetos bytes<2>.   (line   14)
* PyBytesIter_Type (C var):              Outros objetos iteradores.
                                                             (line    9)
* PyBytesObject (C type):                Objetos bytes<2>.   (line    9)
* pyc baseado em hash:                   Glossário.          (line  800)
* pycache_prefix (no módulo sys):        sys — Parâmetros e funções específicas do sistema.
                                                             (line  388)
* PyCallable_Check (C function):         API de suporte a chamadas.
                                                             (line    6)
* PyCallIter_Check (C function):         Objetos Iteradores. (line   35)
* PyCallIter_New (C function):           Objetos Iteradores. (line   40)
* PyCallIter_Type (C var):               Objetos Iteradores. (line   30)
* PyCapsule (C type):                    Capsules<2>.        (line   11)
* PyCapsule_CheckExact (C function):     Capsules<2>.        (line   35)
* PyCapsule_Destructor (C type):         Capsules<2>.        (line   26)
* PyCapsule_GetContext (C function):     Capsules<2>.        (line   82)
* PyCapsule_GetDestructor (C function):  Capsules<2>.        (line   71)
* PyCapsule_GetName (C function):        Capsules<2>.        (line   92)
* PyCapsule_GetPointer (C function):     Capsules<2>.        (line   60)
* PyCapsule_Import (C function):         Capsules<2>.        (line  101)
* PyCapsule_IsValid (C function):        Capsules<2>.        (line  123)
* PyCapsule_New (C function):            Capsules<2>.        (line   40)
* PyCapsule_SetContext (C function):     Capsules<2>.        (line  142)
* PyCapsule_SetDestructor (C function):  Capsules<2>.        (line  150)
* PyCapsule_SetName (C function):        Capsules<2>.        (line  158)
* PyCapsule_SetPointer (C function):     Capsules<2>.        (line  168)
* PyCapsule_Type (C var):                Capsules<2>.        (line   21)
* PyCell_Check (C function):             Objeto célula.      (line   25)
* PyCell_Get (C function):               Objeto célula.      (line   34)
* PyCell_GET (C function):               Objeto célula.      (line   39)
* PyCell_New (C function):               Objeto célula.      (line   30)
* PyCell_Set (C function):               Objeto célula.      (line   44)
* PyCell_SET (C function):               Objeto célula.      (line   53)
* PyCell_Type (C var):                   Objeto célula.      (line   21)
* PyCellObject (C type):                 Objeto célula.      (line   17)
* PyCF_ALLOW_TOP_LEVEL_AWAIT (C macro):  A camada de nível muito alto.
                                                             (line  358)
* PyCF_ALLOW_TOP_LEVEL_AWAIT (no módulo ast): Sinalizadores do compilador<2>.
                                                             (line    9)
* PyCF_ONLY_AST (C macro):               A camada de nível muito alto.
                                                             (line  358)
* PyCF_ONLY_AST (no módulo ast):         Sinalizadores do compilador<2>.
                                                             (line   16)
* PyCF_OPTIMIZED_AST (C macro):          A camada de nível muito alto.
                                                             (line  358)
* PyCF_OPTIMIZED_AST (no módulo ast):    Sinalizadores do compilador<2>.
                                                             (line   21)
* PyCF_TYPE_COMMENTS (C macro):          A camada de nível muito alto.
                                                             (line  358)
* PyCF_TYPE_COMMENTS (no módulo ast):    Sinalizadores do compilador<2>.
                                                             (line   28)
* PyCFunction (C type):                  Implementing functions and methods.
                                                             (line    6)
* PyCFunction_Check (C function):        Implementing functions and methods.
                                                             (line  273)
* PyCFunction_CheckExact (C function):   Implementing functions and methods.
                                                             (line  278)
* PyCFunction_GET_FLAGS (C function):    Implementing functions and methods.
                                                             (line  304)
* PyCFunction_GET_FUNCTION (C function): Implementing functions and methods.
                                                             (line  320)
* PyCFunction_GET_SELF (C function):     Implementing functions and methods.
                                                             (line  339)
* PyCFunction_GetFlags (C function):     Implementing functions and methods.
                                                             (line  294)
* PyCFunction_GetFunction (C function):  Implementing functions and methods.
                                                             (line  309)
* PyCFunction_GetSelf (C function):      Implementing functions and methods.
                                                             (line  325)
* PyCFunction_New (C function):          Implementing functions and methods.
                                                             (line  288)
* PyCFunction_NewEx (C function):        Implementing functions and methods.
                                                             (line  283)
* PyCFunction_Type (C var):              Implementing functions and methods.
                                                             (line  268)
* PyCFunctionFast (C type):              Implementing functions and methods.
                                                             (line   29)
* PyCFunctionFastWithKeywords (C type):  Implementing functions and methods.
                                                             (line   38)
* PyCFunctionWithKeywords (C type):      Implementing functions and methods.
                                                             (line   20)
* PycInvalidationMode (classe em py_compile): py_compile — Compila arquivos fonte do Python.
                                                             (line   98)
* PyClassMethod_New (C function):        Descritores embutidos.
                                                             (line   23)
* PyClassMethod_Type (C var):            Descritores embutidos.
                                                             (line   11)
* PyClassMethodDescr_Type (C var):       Descritores embutidos.
                                                             (line   16)
* PyCMethod (C type):                    Implementing functions and methods.
                                                             (line   49)
* PyCMethod_Check (C function):          Implementing functions and methods.
                                                             (line  231)
* PyCMethod_CheckExact (C function):     Implementing functions and methods.
                                                             (line  236)
* PyCMethod_New (C function):            Implementing functions and methods.
                                                             (line  241)
* PyCMethod_Type (C var):                Implementing functions and methods.
                                                             (line  225)
* PyCode_Addr2Line (C function):         Objetos código<3>.  (line  101)
* PyCode_Addr2Location (C function):     Objetos código<3>.  (line  110)
* PyCode_AddWatcher (C function):        Objetos código<3>.  (line  167)
* PyCode_Check (C function):             Objetos código<3>.  (line   20)
* PyCode_ClearWatcher (C function):      Objetos código<3>.  (line  177)
* PyCode_GetCellvars (C function):       Objetos código<3>.  (line  147)
* PyCode_GetCode (C function):           Objetos código<3>.  (line  123)
* PyCode_GetFreevars (C function):       Objetos código<3>.  (line  157)
* PyCode_GetNumFree (C function):        Objetos código<3>.  (line   25)
* PyCode_GetVarnames (C function):       Objetos código<3>.  (line  137)
* PyCode_New (função C):                 Objetos código<3>.  (line   65)
* PyCode_NewEmpty (C function):          Objetos código<3>.  (line   94)
* PyCode_NewWithPosOnlyArgs (C function): Objetos código<3>. (line   69)
* PyCode_Optimize (C function):          Objetos código<3>.  (line  232)
* PyCode_Type (C var):                   Objetos código<3>.  (line   15)
* PyCode_WatchCallback (C type):         Objetos código<3>.  (line  194)
* PyCodec_BackslashReplaceErrors (C function): API de registro de tratamentos de erros de decodificação Unicode.
                                                             (line   56)
* PyCodec_Decode (C function):           Registro de codec e funções de suporte.
                                                             (line   40)
* PyCodec_Decoder (C function):          API de pesquisa de codec.
                                                             (line   17)
* PyCodec_Encode (C function):           Registro de codec e funções de suporte.
                                                             (line   28)
* PyCodec_Encoder (C function):          API de pesquisa de codec.
                                                             (line   12)
* PyCodec_IgnoreErrors (C function):     API de registro de tratamentos de erros de decodificação Unicode.
                                                             (line   40)
* PyCodec_IncrementalDecoder (C function): API de pesquisa de codec.
                                                             (line   28)
* PyCodec_IncrementalEncoder (C function): API de pesquisa de codec.
                                                             (line   22)
* PyCodec_KnownEncoding (C function):    Registro de codec e funções de suporte.
                                                             (line   23)
* PyCodec_LookupError (C function):      API de registro de tratamentos de erros de decodificação Unicode.
                                                             (line   28)
* PyCodec_NameReplaceErrors (C function): API de registro de tratamentos de erros de decodificação Unicode.
                                                             (line   62)
* PyCodec_Register (C function):         Registro de codec e funções de suporte.
                                                             (line    6)
* PyCodec_RegisterError (C function):    API de registro de tratamentos de erros de decodificação Unicode.
                                                             (line    6)
* PyCodec_ReplaceErrors (C function):    API de registro de tratamentos de erros de decodificação Unicode.
                                                             (line   45)
* PyCodec_StreamReader (C function):     API de pesquisa de codec.
                                                             (line   34)
* PyCodec_StreamWriter (C function):     API de pesquisa de codec.
                                                             (line   40)
* PyCodec_StrictErrors (C function):     API de registro de tratamentos de erros de decodificação Unicode.
                                                             (line   36)
* PyCodec_Unregister (C function):       Registro de codec e funções de suporte.
                                                             (line   14)
* PyCodec_XMLCharRefReplaceErrors (C function): API de registro de tratamentos de erros de decodificação Unicode.
                                                             (line   50)
* PyCodeEvent (C type):                  Objetos código<3>.  (line  187)
* PyCodeObject (C type):                 Objetos código<3>.  (line   10)
* PyCompactUnicodeObject (C type):       Tipo Unicode.       (line   30)
* PyCompile_OpcodeStackEffect (C function): Stack Effects.   (line   19)
* PyCompile_OpcodeStackEffectWithJump (C function): Stack Effects.
                                                             (line   28)
* PyCompileError:                        py_compile — Compila arquivos fonte do Python.
                                                             (line   19)
* PyCompilerFlags (C struct):            A camada de nível muito alto.
                                                             (line  328)
* PyCompilerFlags.cf_feature_version (C member): A camada de nível muito alto.
                                                             (line  344)
* PyCompilerFlags.cf_flags (C member):   A camada de nível muito alto.
                                                             (line  340)
* PyComplex_AsCComplex (C function):     Números complexos como objetos Python.
                                                             (line   75)
* PyComplex_Check (C function):          Números complexos como objetos Python.
                                                             (line   16)
* PyComplex_CheckExact (C function):     Números complexos como objetos Python.
                                                             (line   22)
* PyComplex_FromCComplex (C function):   Números complexos como objetos Python.
                                                             (line   28)
* PyComplex_FromDoubles (C function):    Números complexos como objetos Python.
                                                             (line   34)
* PyComplex_ImagAsDouble (C function):   Números complexos como objetos Python.
                                                             (line   58)
* PyComplex_RealAsDouble (C function):   Números complexos como objetos Python.
                                                             (line   41)
* PyComplex_Type (C var):                Números complexos como objetos Python.
                                                             (line   11)
* PyComplexObject (C type):              Números complexos como objetos Python.
                                                             (line    6)
* PyConfig (C type):                     PyConfig.           (line    6)
* PyConfig_Clear (C function):           PyConfig.           (line   97)
* PyConfig_InitIsolatedConfig (C function): PyConfig.        (line   21)
* PyConfig_InitPythonConfig (C function): PyConfig.          (line   16)
* PyConfig_Read (C function):            PyConfig.           (line   67)
* PyConfig_SetArgv (C function):         PyConfig.           (line   42)
* PyConfig_SetBytesArgv (C function):    PyConfig.           (line   50)
* PyConfig_SetBytesString (C function):  PyConfig.           (line   33)
* PyConfig_SetString (C function):       PyConfig.           (line   26)
* PyConfig_SetWideStringList (C function): PyConfig.         (line   59)
* PyConfig.argv (C member):              PyConfig.           (line  128)
* PyConfig.base_exec_prefix (C member):  PyConfig.           (line  173)
* PyConfig.base_executable (C member):   PyConfig.           (line  183)
* PyConfig.base_prefix (C member):       PyConfig.           (line  197)
* PyConfig.buffered_stdio (C member):    PyConfig.           (line  207)
* PyConfig.bytes_warning (C member):     PyConfig.           (line  220)
* PyConfig.check_hash_pycs_mode (C member): PyConfig.        (line  257)
* PyConfig.code_debug_ranges (C member): PyConfig.           (line  243)
* PyConfig.configure_c_stdio (C member): PyConfig.           (line  277)
* PyConfig.cpu_count (C member):         PyConfig.           (line  490)
* PyConfig.dev_mode (C member):          PyConfig.           (line  293)
* PyConfig.dump_refs (C member):         PyConfig.           (line  302)
* PyConfig.exec_prefix (C member):       PyConfig.           (line  316)
* PyConfig.executable (C member):        PyConfig.           (line  328)
* PyConfig.faulthandler (C member):      PyConfig.           (line  339)
* PyConfig.filesystem_encoding (C member): PyConfig.         (line  351)
* PyConfig.filesystem_errors (C member): PyConfig.           (line  384)
* PyConfig.hash_seed (C member):         PyConfig.           (line  406)
* PyConfig.home (C member):              PyConfig.           (line  421)
* PyConfig.import_time (C member):       PyConfig.           (line  432)
* PyConfig.inspect (C member):           PyConfig.           (line  441)
* PyConfig.install_signal_handlers (C member): PyConfig.     (line  456)
* PyConfig.int_max_str_digits (C member): PyConfig.          (line  470)
* PyConfig.interactive (C member):       PyConfig.           (line  462)
* PyConfig.isolated (C member):          PyConfig.           (line  504)
* PyConfig.legacy_windows_stdio (C member): PyConfig.        (line  529)
* PyConfig.malloc_stats (C member):      PyConfig.           (line  547)
* PyConfig.module_search_paths (C member): PyConfig.         (line  591)
* PyConfig.module_search_paths_set (C member): PyConfig.     (line  593)
* PyConfig.optimization_level (C member): PyConfig.          (line  607)
* PyConfig.orig_argv (C member):         PyConfig.           (line  623)
* PyConfig.parse_argv (C member):        PyConfig.           (line  641)
* PyConfig.parser_debug (C member):      PyConfig.           (line  662)
* PyConfig.pathconfig_warnings (C member): PyConfig.         (line  676)
* PyConfig.perf_profiling (C member):    PyConfig.           (line  870)
* PyConfig.platlibdir (C member):        PyConfig.           (line  560)
* PyConfig.prefix (C member):            PyConfig.           (line  688)
* PyConfig.program_name (C member):      PyConfig.           (line  699)
* PyConfig.pycache_prefix (C member):    PyConfig.           (line  720)
* PyConfig.pythonpath_env (C member):    PyConfig.           (line  580)
* PyConfig.quiet (C member):             PyConfig.           (line  733)
* PyConfig.run_command (C member):       PyConfig.           (line  742)
* PyConfig.run_filename (C member):      PyConfig.           (line  750)
* PyConfig.run_module (C member):        PyConfig.           (line  764)
* PyConfig.run_presite (C member):       PyConfig.           (line  772)
* PyConfig.safe_path (C member):         PyConfig.           (line  151)
* PyConfig.show_ref_count (C member):    PyConfig.           (line  786)
* PyConfig.site_import (C member):       PyConfig.           (line  798)
* PyConfig.skip_source_first_line (C member): PyConfig.      (line  817)
* PyConfig.stdio_encoding (C member):    PyConfig.           (line  829)
* PyConfig.stdio_errors (C member):      PyConfig.           (line  831)
* PyConfig.tracemalloc (C member):       PyConfig.           (line  859)
* PyConfig.use_environment (C member):   PyConfig.           (line  889)
* PyConfig.use_hash_seed (C member):     PyConfig.           (line  408)
* PyConfig.user_site_directory (C member): PyConfig.         (line  901)
* PyConfig.verbose (C member):           PyConfig.           (line  914)
* PyConfig.warn_default_encoding (C member): PyConfig.       (line  233)
* PyConfig.warnoptions (C member):       PyConfig.           (line  931)
* PyConfig.write_bytecode (C member):    PyConfig.           (line  951)
* PyConfig.xoptions (C member):          PyConfig.           (line  964)
* PyContext (C type):                    Objetos de variáveis de contexto.
                                                             (line   25)
* PyContext_CheckExact (C function):     Objetos de variáveis de contexto.
                                                             (line   55)
* PyContext_Copy (C function):           Objetos de variáveis de contexto.
                                                             (line   76)
* PyContext_CopyCurrent (C function):    Objetos de variáveis de contexto.
                                                             (line   80)
* PyContext_Enter (C function):          Objetos de variáveis de contexto.
                                                             (line   84)
* PyContext_Exit (C function):           Objetos de variáveis de contexto.
                                                             (line   89)
* PyContext_New (C function):            Objetos de variáveis de contexto.
                                                             (line   72)
* PyContext_Type (C var):                Objetos de variáveis de contexto.
                                                             (line   40)
* PyContextToken (C type):               Objetos de variáveis de contexto.
                                                             (line   35)
* PyContextToken_CheckExact (C function): Objetos de variáveis de contexto.
                                                             (line   65)
* PyContextToken_Type (C var):           Objetos de variáveis de contexto.
                                                             (line   48)
* PyContextVar (C type):                 Objetos de variáveis de contexto.
                                                             (line   30)
* PyContextVar_CheckExact (C function):  Objetos de variáveis de contexto.
                                                             (line   60)
* PyContextVar_Get (C function):         Objetos de variáveis de contexto.
                                                             (line  105)
* PyContextVar_New (C function):         Objetos de variáveis de contexto.
                                                             (line   97)
* PyContextVar_Reset (C function):       Objetos de variáveis de contexto.
                                                             (line  130)
* PyContextVar_Set (C function):         Objetos de variáveis de contexto.
                                                             (line  124)
* PyContextVar_Type (C var):             Objetos de variáveis de contexto.
                                                             (line   44)
* PyCoro_CheckExact (C function):        Objetos corrotina<2>.
                                                             (line   19)
* PyCoro_New (C function):               Objetos corrotina<2>.
                                                             (line   24)
* PyCoro_Type (C var):                   Objetos corrotina<2>.
                                                             (line   15)
* PyCoroObject (C type):                 Objetos corrotina<2>.
                                                             (line   11)
* PyCurses_API (C var):                  API C de curses.    (line   30)
* PyCurses_API_pointers (C macro):       API C de curses.    (line   53)
* PyCurses_CAPSULE_NAME (C macro):       Dados internos.     (line    9)
* PyCursesInitialised (C macro):         API C de curses.    (line   86)
* PyCursesInitialisedColor (C macro):    API C de curses.    (line  100)
* PyCursesSetupTermCalled (C macro):     API C de curses.    (line   72)
* PyCursesWindow_Check (C function):     API C de curses.    (line   63)
* PyCursesWindow_Type (C var):           API C de curses.    (line   58)
* PyDate_Check (C function):             Objetos DateTime<2>.
                                                             (line  104)
* PyDate_CheckExact (C function):        Objetos DateTime<2>.
                                                             (line  110)
* PyDate_FromDate (C function):          Objetos DateTime<2>.
                                                             (line  162)
* PyDate_FromTimestamp (C function):     Objetos DateTime<2>.
                                                             (line  339)
* PyDateTime_CAPI (C type):              Objetos DateTime<2>.
                                                             (line   28)
* PyDateTime_CAPSULE_NAME (C macro):     Dados internos<2>.  (line    9)
* PyDateTime_Check (C function):         Objetos DateTime<2>.
                                                             (line  115)
* PyDateTime_CheckExact (C function):    Objetos DateTime<2>.
                                                             (line  121)
* PyDateTime_Date (C type):              Objetos DateTime<2>.
                                                             (line   43)
* PyDateTime_DATE_GET_FOLD (C function): Objetos DateTime<2>.
                                                             (line  260)
* PyDateTime_DATE_GET_HOUR (C function): Objetos DateTime<2>.
                                                             (line  243)
* PyDateTime_DATE_GET_MICROSECOND (C function): Objetos DateTime<2>.
                                                             (line  255)
* PyDateTime_DATE_GET_MINUTE (C function): Objetos DateTime<2>.
                                                             (line  247)
* PyDateTime_DATE_GET_SECOND (C function): Objetos DateTime<2>.
                                                             (line  251)
* PyDateTime_DATE_GET_TZINFO (C function): Objetos DateTime<2>.
                                                             (line  266)
* PyDateTime_DateTime (C type):          Objetos DateTime<2>.
                                                             (line   48)
* PyDateTime_DateTimeType (C var):       Objetos DateTime<2>.
                                                             (line   69)
* PyDateTime_DateType (C var):           Objetos DateTime<2>.
                                                             (line   63)
* PyDateTime_Delta (C type):             Objetos DateTime<2>.
                                                             (line   58)
* PyDateTime_DELTA_GET_DAYS (C function): Objetos DateTime<2>.
                                                             (line  310)
* PyDateTime_DELTA_GET_MICROSECONDS (C function): Objetos DateTime<2>.
                                                             (line  323)
* PyDateTime_DELTA_GET_SECONDS (C function): Objetos DateTime<2>.
                                                             (line  317)
* PyDateTime_DeltaType (C var):          Objetos DateTime<2>.
                                                             (line   81)
* PyDateTime_FromDateAndTime (C function): Objetos DateTime<2>.
                                                             (line  167)
* PyDateTime_FromDateAndTimeAndFold (C function): Objetos DateTime<2>.
                                                             (line  174)
* PyDateTime_FromTimestamp (C function): Objetos DateTime<2>.
                                                             (line  332)
* PyDateTime_GET_DAY (C function):       Objetos DateTime<2>.
                                                             (line  235)
* PyDateTime_GET_MONTH (C function):     Objetos DateTime<2>.
                                                             (line  231)
* PyDateTime_GET_YEAR (C function):      Objetos DateTime<2>.
                                                             (line  227)
* PyDateTime_IMPORT (C macro):           Objetos DateTime<2>.
                                                             (line   14)
* PyDateTime_Time (C type):              Objetos DateTime<2>.
                                                             (line   53)
* PyDateTime_TIME_GET_FOLD (C function): Objetos DateTime<2>.
                                                             (line  293)
* PyDateTime_TIME_GET_HOUR (C function): Objetos DateTime<2>.
                                                             (line  277)
* PyDateTime_TIME_GET_MICROSECOND (C function): Objetos DateTime<2>.
                                                             (line  289)
* PyDateTime_TIME_GET_MINUTE (C function): Objetos DateTime<2>.
                                                             (line  281)
* PyDateTime_TIME_GET_SECOND (C function): Objetos DateTime<2>.
                                                             (line  285)
* PyDateTime_TIME_GET_TZINFO (C function): Objetos DateTime<2>.
                                                             (line  299)
* PyDateTime_TimeType (C var):           Objetos DateTime<2>.
                                                             (line   75)
* PyDateTime_TimeZone_UTC (C var):       Objetos DateTime<2>.
                                                             (line   95)
* PyDateTime_TZInfoType (C var):         Objetos DateTime<2>.
                                                             (line   87)
* PyDateTimeAPI (C var):                 Objetos DateTime<2>.
                                                             (line   36)
* PyDelta_Check (C function):            Objetos DateTime<2>.
                                                             (line  138)
* PyDelta_CheckExact (C function):       Objetos DateTime<2>.
                                                             (line  144)
* PyDelta_FromDSU (C function):          Objetos DateTime<2>.
                                                             (line  197)
* PyDescr_IsData (C function):           Objetos descritores.
                                                             (line   67)
* PyDescr_NewClassMethod (C function):   Objetos descritores.
                                                             (line   62)
* PyDescr_NewGetSet (C function):        Objetos descritores.
                                                             (line   13)
* PyDescr_NewMember (C function):        Objetos descritores.
                                                             (line   18)
* PyDescr_NewMethod (C function):        Objetos descritores.
                                                             (line   37)
* PyDescr_NewWrapper (C function):       Objetos descritores.
                                                             (line   49)
* PyDict_AddWatcher (C function):        Objetos dicionários.
                                                             (line  346)
* PyDict_Check (C function):             Objetos dicionários.
                                                             (line   16)
* PyDict_CheckExact (C function):        Objetos dicionários.
                                                             (line   21)
* PyDict_Clear (C function):             Objetos dicionários.
                                                             (line   48)
* PyDict_ClearWatcher (C function):      Objetos dicionários.
                                                             (line  356)
* PyDict_Contains (C function):          Objetos dicionários.
                                                             (line   52)
* PyDict_ContainsString (C function):    Objetos dicionários.
                                                             (line   58)
* PyDict_Copy (C function):              Objetos dicionários.
                                                             (line   66)
* PyDict_DelItem (C function):           Objetos dicionários.
                                                             (line   86)
* PyDict_DelItemString (C function):     Objetos dicionários.
                                                             (line   93)
* PyDict_GET_SIZE (C function):          Objetos dicionários.
                                                             (line  248)
* PyDict_GetItem (C function):           Objetos dicionários.
                                                             (line  117)
* PyDict_GetItemRef (C function):        Objetos dicionários.
                                                             (line   99)
* PyDict_GetItemString (C function):     Objetos dicionários.
                                                             (line  141)
* PyDict_GetItemStringRef (C function):  Objetos dicionários.
                                                             (line  155)
* PyDict_GetItemWithError (C function):  Objetos dicionários.
                                                             (line  133)
* PyDict_Items (C function):             Objetos dicionários.
                                                             (line  227)
* PyDict_Keys (C function):              Objetos dicionários.
                                                             (line  232)
* PyDict_Merge (C function):             Objetos dicionários.
                                                             (line  311)
* PyDict_MergeFromSeq2 (C function):     Objetos dicionários.
                                                             (line  330)
* PyDict_New (C function):               Objetos dicionários.
                                                             (line   27)
* PyDict_Next (C function):              Objetos dicionários.
                                                             (line  252)
* PyDict_Pop (C function):               Objetos dicionários.
                                                             (line  197)
* PyDict_PopString (C function):         Objetos dicionários.
                                                             (line  218)
* PyDict_SetDefault (C function):        Objetos dicionários.
                                                             (line  164)
* PyDict_SetDefaultRef (C function):     Objetos dicionários.
                                                             (line  176)
* PyDict_SetItem (C function):           Objetos dicionários.
                                                             (line   71)
* PyDict_SetItemString (C function):     Objetos dicionários.
                                                             (line   79)
* PyDict_Size (C function):              Objetos dicionários.
                                                             (line  242)
* PyDict_Type (C var):                   Objetos dicionários.
                                                             (line   11)
* PyDict_Unwatch (C function):           Objetos dicionários.
                                                             (line  374)
* PyDict_Update (C function):            Objetos dicionários.
                                                             (line  322)
* PyDict_Values (C function):            Objetos dicionários.
                                                             (line  237)
* PyDict_Watch (C function):             Objetos dicionários.
                                                             (line  365)
* PyDict_WatchCallback (C type):         Objetos dicionários.
                                                             (line  394)
* PyDict_WatchEvent (C type):            Objetos dicionários.
                                                             (line  385)
* PyDictItems_Check (C function):        Objetos visão de dicionário.
                                                             (line   38)
* PyDictItems_Type (C var):              Objetos visão de dicionário.
                                                             (line   33)
* PyDictIterItem_Type (C var):           Outros objetos iteradores.
                                                             (line   42)
* PyDictIterKey_Type (C var):            Outros objetos iteradores.
                                                             (line   30)
* PyDictIterValue_Type (C var):          Outros objetos iteradores.
                                                             (line   36)
* PyDictKeys_Check (C function):         Objetos visão de dicionário.
                                                             (line   18)
* PyDictKeys_Type (C var):               Objetos visão de dicionário.
                                                             (line   13)
* PyDictObject (C type):                 Objetos dicionários.
                                                             (line    6)
* PyDictProxy_New (C function):          Objetos dicionários.
                                                             (line   31)
* PyDictProxy_Type (C var):              Objetos dicionários.
                                                             (line   38)
* PyDictRevIterItem_Type (C var):        Outros objetos iteradores.
                                                             (line   45)
* PyDictRevIterKey_Type (C var):         Outros objetos iteradores.
                                                             (line   33)
* PyDictRevIterValue_Type (C var):       Outros objetos iteradores.
                                                             (line   39)
* PyDictValues_Check (C function):       Objetos visão de dicionário.
                                                             (line   28)
* PyDictValues_Type (C var):             Objetos visão de dicionário.
                                                             (line   23)
* PyDictViewSet_Check (C function):      Objetos visão de dicionário.
                                                             (line    6)
* PyDLL (classe em ctypes):              Loading shared libraries.
                                                             (line   71)
* PyDoc_STR (C macro):                   Macros úteis.       (line  229)
* PyDoc_STRVAR (C macro):                Macros úteis.       (line  209)
* PyDoc_VAR (C macro):                   Macros úteis.       (line  246)
* PyEllipsis_Type (C var):               Objeto Ellipsis.    (line    6)
* PyEnum_Type (C var):                   Tipos de iteradores embutidos.
                                                             (line   14)
* PyErr_BadArgument (C function):        Levantando exceções<2>.
                                                             (line   46)
* PyErr_BadInternalCall (C function):    Levantando exceções<2>.
                                                             (line  229)
* PyErr_CheckSignals (C function):       Tratamento de sinal<2>.
                                                             (line    6)
* PyErr_Clear (C function):              Impressão e limpeza.
                                                             (line    6)
* PyErr_Clear (função C):                Exceções<21>.       (line   27)
* PyErr_Clear (função C) <1>:            Exceções<21>.       (line  127)
* PyErr_DisplayException (C function):   Impressão e limpeza.
                                                             (line   68)
* PyErr_ExceptionMatches (C function):   Consultando o indicador de erro.
                                                             (line   22)
* PyErr_ExceptionMatches (função C):     Exceções<21>.       (line  127)
* PyErr_Fetch (C function):              Finalization and De-allocation.
                                                             (line   33)
* PyErr_Fetch (C function) <1>:          Consultando o indicador de erro.
                                                             (line   74)
* PyErr_Format (C function):             Levantando exceções<2>.
                                                             (line   24)
* PyErr_FormatUnraisable (C function):   Impressão e limpeza.
                                                             (line   56)
* PyErr_FormatV (C function):            Levantando exceções<2>.
                                                             (line   34)
* PyErr_GetExcInfo (C function):         Consultando o indicador de erro.
                                                             (line  178)
* PyErr_GetHandledException (C function): Consultando o indicador de erro.
                                                             (line  149)
* PyErr_GetRaisedException (C function): Consultando o indicador de erro.
                                                             (line   36)
* PyErr_GivenExceptionMatches (C function): Consultando o indicador de erro.
                                                             (line   28)
* PyErr_NewException (C function):       Classes de exceção. (line    6)
* PyErr_NewExceptionWithDoc (C function): Classes de exceção.
                                                             (line   24)
* PyErr_NoMemory (C function):           Levantando exceções<2>.
                                                             (line   52)
* PyErr_NormalizeException (C function): Consultando o indicador de erro.
                                                             (line  125)
* PyErr_Occurred (C function):           Consultando o indicador de erro.
                                                             (line    6)
* PyErr_Occurred (função C):             Exceções<21>.       (line   13)
* PyErr_Print (C function):              Impressão e limpeza.
                                                             (line   30)
* PyErr_PrintEx (C function):            Impressão e limpeza.
                                                             (line   10)
* PyErr_ProgramText (C function):        Levantando exceções<2>.
                                                             (line  246)
* PyErr_ProgramTextObject (C function):  Levantando exceções<2>.
                                                             (line  236)
* PyErr_RangedSyntaxLocationObject (C function): Levantando exceções<2>.
                                                             (line  204)
* PyErr_ResourceWarning (C function):    Emitindo avisos.    (line   83)
* PyErr_Restore (C function):            Finalization and De-allocation.
                                                             (line   33)
* PyErr_Restore (C function) <1>:        Consultando o indicador de erro.
                                                             (line  102)
* PyErr_SetExcFromWindowsErr (C function): Levantando exceções<2>.
                                                             (line  117)
* PyErr_SetExcFromWindowsErrWithFilename (C function): Levantando exceções<2>.
                                                             (line  163)
* PyErr_SetExcFromWindowsErrWithFilenameObject (C function): Levantando exceções<2>.
                                                             (line  139)
* PyErr_SetExcFromWindowsErrWithFilenameObjects (C function): Levantando exceções<2>.
                                                             (line  151)
* PyErr_SetExcInfo (C function):         Consultando o indicador de erro.
                                                             (line  197)
* PyErr_SetFromErrno (C function):       Levantando exceções<2>.
                                                             (line   58)
* PyErr_SetFromErrnoWithFilename (C function): Levantando exceções<2>.
                                                             (line   94)
* PyErr_SetFromErrnoWithFilenameObject (C function): Levantando exceções<2>.
                                                             (line   74)
* PyErr_SetFromErrnoWithFilenameObjects (C function): Levantando exceções<2>.
                                                             (line   83)
* PyErr_SetFromWindowsErr (C function):  Levantando exceções<2>.
                                                             (line  101)
* PyErr_SetFromWindowsErrWithFilename (C function): Levantando exceções<2>.
                                                             (line  126)
* PyErr_SetHandledException (C function): Consultando o indicador de erro.
                                                             (line  165)
* PyErr_SetImportError (C function):     Levantando exceções<2>.
                                                             (line  173)
* PyErr_SetImportErrorSubclass (C function): Levantando exceções<2>.
                                                             (line  184)
* PyErr_SetInterrupt (C function):       Tratamento de sinal<2>.
                                                             (line   33)
* PyErr_SetInterruptEx (C function):     Tratamento de sinal<2>.
                                                             (line   42)
* PyErr_SetNone (C function):            Levantando exceções<2>.
                                                             (line   42)
* PyErr_SetObject (C function):          Levantando exceções<2>.
                                                             (line   19)
* PyErr_SetRaisedException (C function): Consultando o indicador de erro.
                                                             (line   64)
* PyErr_SetString (C function):          Levantando exceções<2>.
                                                             (line   10)
* PyErr_SetString (função C):            Exceções<21>.       (line   27)
* PyErr_SyntaxLocation (C function):     Levantando exceções<2>.
                                                             (line  223)
* PyErr_SyntaxLocationEx (C function):   Levantando exceções<2>.
                                                             (line  214)
* PyErr_SyntaxLocationObject (C function): Levantando exceções<2>.
                                                             (line  194)
* PyErr_WarnEx (C function):             Emitindo avisos.    (line   20)
* PyErr_WarnExplicit (C function):       Emitindo avisos.    (line   56)
* PyErr_WarnExplicitFormat (C function): Emitindo avisos.    (line   73)
* PyErr_WarnExplicitObject (C function): Emitindo avisos.    (line   43)
* PyErr_WarnFormat (C function):         Emitindo avisos.    (line   65)
* PyErr_WriteUnraisable (C function):    Impressão e limpeza.
                                                             (line   34)
* PyEval_AcquireThread (C function):     Low-level API.      (line  225)
* PyEval_AcquireThread():                High-level API.     (line   35)
* PyEval_EvalCode (C function):          A camada de nível muito alto.
                                                             (line  282)
* PyEval_EvalCodeEx (C function):        A camada de nível muito alto.
                                                             (line  289)
* PyEval_EvalFrame (C function):         A camada de nível muito alto.
                                                             (line  302)
* PyEval_EvalFrameEx (C function):       A camada de nível muito alto.
                                                             (line  308)
* PyEval_GetBuiltins (C function):       Reflexão.           (line    6)
* PyEval_GetFrame (C function):          Reflexão.           (line   61)
* PyEval_GetFrameBuiltins (C function):  Reflexão.           (line   68)
* PyEval_GetFrameGlobals (C function):   Reflexão.           (line   90)
* PyEval_GetFrameLocals (C function):    Reflexão.           (line   76)
* PyEval_GetFuncDesc (C function):       Reflexão.           (line  104)
* PyEval_GetFuncName (C function):       Reflexão.           (line   99)
* PyEval_GetGlobals (C function):        Reflexão.           (line   50)
* PyEval_GetLocals (C function):         Reflexão.           (line   17)
* PyEval_InitThreads (C function):       High-level API.     (line   34)
* PyEval_InitThreads():                  Inicializando e encerrando o interpretador.
                                                             (line    7)
* PyEval_MergeCompilerFlags (C function): A camada de nível muito alto.
                                                             (line  323)
* PyEval_ReleaseThread (C function):     Low-level API.      (line  248)
* PyEval_ReleaseThread():                High-level API.     (line   35)
* PyEval_RestoreThread (C function):     Releasing the GIL from extension code.
                                                             (line   33)
* PyEval_RestoreThread (C function) <1>: High-level API.     (line   59)
* PyEval_RestoreThread():                High-level API.     (line   35)
* PyEval_SaveThread (C function):        Releasing the GIL from extension code.
                                                             (line   33)
* PyEval_SaveThread (C function) <1>:    High-level API.     (line   53)
* PyEval_SaveThread():                   High-level API.     (line   35)
* PyEval_SetProfile (C function):        Profiling and Tracing.
                                                             (line  117)
* PyEval_SetProfileAllThreads (C function): Profiling and Tracing.
                                                             (line  131)
* PyEval_SetTrace (C function):          Profiling and Tracing.
                                                             (line  146)
* PyEval_SetTraceAllThreads (C function): Profiling and Tracing.
                                                             (line  161)
* PyExc_ArithmeticError (C var):         Tipos de exceção.   (line   23)
* PyExc_AssertionError (C var):          Tipos de exceção.   (line   27)
* PyExc_AttributeError (C var):          Tipos de exceção.   (line   31)
* PyExc_BaseException (C var):           Tipos de exceção.   (line   10)
* PyExc_BaseExceptionGroup (C var):      Tipos de exceção.   (line   14)
* PyExc_BlockingIOError (C var):         Tipos de exceção.   (line   35)
* PyExc_BrokenPipeError (C var):         Tipos de exceção.   (line   40)
* PyExc_BufferError (C var):             Tipos de exceção.   (line   45)
* PyExc_BytesWarning (C var):            Warning types.      (line   13)
* PyExc_ChildProcessError (C var):       Tipos de exceção.   (line   49)
* PyExc_ConnectionAbortedError (C var):  Tipos de exceção.   (line   54)
* PyExc_ConnectionError (C var):         Tipos de exceção.   (line   59)
* PyExc_ConnectionRefusedError (C var):  Tipos de exceção.   (line   64)
* PyExc_ConnectionResetError (C var):    Tipos de exceção.   (line   69)
* PyExc_DeprecationWarning (C var):      Warning types.      (line   17)
* PyExc_EncodingWarning (C var):         Warning types.      (line   21)
* PyExc_EnvironmentError (C var):        OSError aliases.    (line   15)
* PyExc_EOFError (C var):                Tipos de exceção.   (line   74)
* PyExc_Exception (C var):               Tipos de exceção.   (line   19)
* PyExc_FileExistsError (C var):         Tipos de exceção.   (line   77)
* PyExc_FileNotFoundError (C var):       Tipos de exceção.   (line   82)
* PyExc_FloatingPointError (C var):      Tipos de exceção.   (line   87)
* PyExc_FutureWarning (C var):           Warning types.      (line   26)
* PyExc_GeneratorExit (C var):           Tipos de exceção.   (line   91)
* PyExc_ImportError (C var):             Tipos de exceção.   (line   95)
* PyExc_ImportWarning (C var):           Warning types.      (line   30)
* PyExc_IndentationError (C var):        Tipos de exceção.   (line   99)
* PyExc_IndexError (C var):              Tipos de exceção.   (line  103)
* PyExc_InterruptedError (C var):        Tipos de exceção.   (line  107)
* PyExc_IOError (C var):                 OSError aliases.    (line   21)
* PyExc_IsADirectoryError (C var):       Tipos de exceção.   (line  112)
* PyExc_KeyboardInterrupt (C var):       Tipos de exceção.   (line  120)
* PyExc_KeyError (C var):                Tipos de exceção.   (line  117)
* PyExc_LookupError (C var):             Tipos de exceção.   (line  124)
* PyExc_MemoryError (C var):             Tipos de exceção.   (line  128)
* PyExc_ModuleNotFoundError (C var):     Tipos de exceção.   (line  132)
* PyExc_NameError (C var):               Tipos de exceção.   (line  137)
* PyExc_NotADirectoryError (C var):      Tipos de exceção.   (line  141)
* PyExc_NotImplementedError (C var):     Tipos de exceção.   (line  146)
* PyExc_OSError (C var):                 Tipos de exceção.   (line  150)
* PyExc_OverflowError (C var):           Tipos de exceção.   (line  153)
* PyExc_PendingDeprecationWarning (C var): Warning types.    (line   34)
* PyExc_PermissionError (C var):         Tipos de exceção.   (line  157)
* PyExc_ProcessLookupError (C var):      Tipos de exceção.   (line  162)
* PyExc_PythonFinalizationError (C var): Tipos de exceção.   (line  167)
* PyExc_RecursionError (C var):          Tipos de exceção.   (line  170)
* PyExc_ReferenceError (C var):          Tipos de exceção.   (line  175)
* PyExc_ResourceWarning (C var):         Warning types.      (line   38)
* PyExc_RuntimeError (C var):            Tipos de exceção.   (line  179)
* PyExc_RuntimeWarning (C var):          Warning types.      (line   43)
* PyExc_StopAsyncIteration (C var):      Tipos de exceção.   (line  183)
* PyExc_StopIteration (C var):           Tipos de exceção.   (line  188)
* PyExc_SyntaxError (C var):             Tipos de exceção.   (line  192)
* PyExc_SyntaxWarning (C var):           Warning types.      (line   47)
* PyExc_SystemError (C var):             Tipos de exceção.   (line  196)
* PyExc_SystemExit (C var):              Tipos de exceção.   (line  200)
* PyExc_TabError (C var):                Tipos de exceção.   (line  204)
* PyExc_TimeoutError (C var):            Tipos de exceção.   (line  207)
* PyExc_TypeError (C var):               Tipos de exceção.   (line  212)
* PyExc_UnboundLocalError (C var):       Tipos de exceção.   (line  216)
* PyExc_UnicodeDecodeError (C var):      Tipos de exceção.   (line  220)
* PyExc_UnicodeEncodeError (C var):      Tipos de exceção.   (line  224)
* PyExc_UnicodeError (C var):            Tipos de exceção.   (line  228)
* PyExc_UnicodeTranslateError (C var):   Tipos de exceção.   (line  232)
* PyExc_UnicodeWarning (C var):          Warning types.      (line   51)
* PyExc_UserWarning (C var):             Warning types.      (line   55)
* PyExc_ValueError (C var):              Tipos de exceção.   (line  236)
* PyExc_Warning (C var):                 Warning types.      (line   10)
* PyExc_WindowsError (C var):            OSError aliases.    (line   27)
* PyExc_ZeroDivisionError (C var):       Tipos de exceção.   (line  240)
* PyException_GetArgs (C function):      Objeto Exceção.     (line   59)
* PyException_GetCause (C function):     Objeto Exceção.     (line   43)
* PyException_GetContext (C function):   Objeto Exceção.     (line   28)
* PyException_GetTraceback (C function): Objeto Exceção.     (line   15)
* PyException_SetArgs (C function):      Objeto Exceção.     (line   64)
* PyException_SetCause (C function):     Objeto Exceção.     (line   50)
* PyException_SetContext (C function):   Objeto Exceção.     (line   37)
* PyException_SetTraceback (C function): Objeto Exceção.     (line   23)
* PyExceptionClass_Check (C function):   Classes de exceção. (line   34)
* PyExceptionClass_Name (C function):    Classes de exceção. (line   39)
* PyExceptionInstance_Check (C function): Objeto Exceção.    (line    6)
* PyExceptionInstance_Class (C macro):   Objeto Exceção.     (line   11)
* PyFile_FromFd (C function):            Objetos arquivos.   (line   16)
* PyFile_GetLine (C function):           Objetos arquivos.   (line   44)
* PyFile_OpenCode (C function):          Objetos arquivos.   (line  112)
* PyFile_OpenCodeObject (C function):    Objetos arquivos.   (line   96)
* PyFile_SetOpenCodeHook (C function):   Objetos arquivos.   (line   59)
* PyFile_WriteObject (C function):       Objetos arquivos.   (line  119)
* PyFile_WriteString (C function):       Objetos arquivos.   (line  129)
* PyFilter_Type (C var):                 Tipos de iteradores embutidos.
                                                             (line   17)
* PyFloat_AS_DOUBLE (C function):        Objetos de ponto flutuante.
                                                             (line   50)
* PyFloat_AsDouble (C function):         Objetos de ponto flutuante.
                                                             (line   38)
* PyFloat_Check (C function):            Objetos de ponto flutuante.
                                                             (line   16)
* PyFloat_CheckExact (C function):       Objetos de ponto flutuante.
                                                             (line   22)
* PyFloat_FromDouble (C function):       Objetos de ponto flutuante.
                                                             (line   33)
* PyFloat_FromString (C function):       Objetos de ponto flutuante.
                                                             (line   28)
* PyFloat_GetInfo (C function):          Objetos de ponto flutuante.
                                                             (line   55)
* PyFloat_GetMax (C function):           Objetos de ponto flutuante.
                                                             (line   61)
* PyFloat_GetMin (C function):           Objetos de ponto flutuante.
                                                             (line   65)
* PyFloat_Pack2 (C function):            Funções Pack.       (line   23)
* PyFloat_Pack4 (C function):            Funções Pack.       (line   28)
* PyFloat_Pack8 (C function):            Funções Pack.       (line   33)
* PyFloat_Type (C var):                  Objetos de ponto flutuante.
                                                             (line   11)
* PyFloat_Unpack2 (C function):          Funções de Unpack.  (line   21)
* PyFloat_Unpack4 (C function):          Funções de Unpack.  (line   26)
* PyFloat_Unpack8 (C function):          Funções de Unpack.  (line   31)
* PyFloatObject (C type):                Objetos de ponto flutuante.
                                                             (line    6)
* PyFrame_Check (C function):            Objetos Frame.      (line   38)
* PyFrame_FastToLocals (C function):     Legacy Local Variable APIs.
                                                             (line   21)
* PyFrame_FastToLocalsWithError (C function): Legacy Local Variable APIs.
                                                             (line   32)
* PyFrame_GetBack (C function):          Objetos Frame.      (line   45)
* PyFrame_GetBuiltins (C function):      Objetos Frame.      (line   55)
* PyFrame_GetCode (C function):          Objetos Frame.      (line   65)
* PyFrame_GetGenerator (C function):     Objetos Frame.      (line   76)
* PyFrame_GetGlobals (C function):       Objetos Frame.      (line   87)
* PyFrame_GetLasti (C function):         Objetos Frame.      (line   97)
* PyFrame_GetLineNumber (C function):    Objetos Frame.      (line  147)
* PyFrame_GetLocals (C function):        Objetos Frame.      (line  130)
* PyFrame_GetVar (C function):           Objetos Frame.      (line  105)
* PyFrame_GetVarString (C function):     Objetos Frame.      (line  122)
* PyFrame_LocalsToFast (C function):     Legacy Local Variable APIs.
                                                             (line    9)
* PyFrame_New (C function):              Objetos Frame.      (line   30)
* PyFrame_Type (C var):                  Objetos Frame.      (line   22)
* PyFrameLocalsProxy_Check (C function): Proxies locais de quadro.
                                                             (line   20)
* PyFrameLocalsProxy_Type (C var):       Proxies locais de quadro.
                                                             (line   16)
* PyFrameObject (C type):                Objetos Frame.      (line    6)
* PyFrozenSet_Check (C function):        Objeto Set.         (line   49)
* PyFrozenSet_CheckExact (C function):   Objeto Set.         (line   73)
* PyFrozenSet_New (C function):          Objeto Set.         (line   87)
* PyFrozenSet_Type (C var):              Objeto Set.         (line   35)
* PyFunction_AddWatcher (C function):    Objetos Function<3>.
                                                             (line  149)
* PyFunction_Check (C function):         Objetos Function<3>.
                                                             (line   18)
* PyFunction_ClearWatcher (C function):  Objetos Function<3>.
                                                             (line  160)
* PyFunction_GET_ANNOTATIONS (C function): Objetos Function<3>.
                                                             (line  131)
* PyFunction_GET_CLOSURE (C function):   Objetos Function<3>.
                                                             (line  131)
* PyFunction_GET_CODE (C function):      Objetos Function<3>.
                                                             (line  131)
* PyFunction_GET_DEFAULTS (C function):  Objetos Function<3>.
                                                             (line  131)
* PyFunction_GET_GLOBALS (C function):   Objetos Function<3>.
                                                             (line  131)
* PyFunction_GET_KW_DEFAULTS (C function): Objetos Function<3>.
                                                             (line  131)
* PyFunction_GET_MODULE (C function):    Objetos Function<3>.
                                                             (line  131)
* PyFunction_GetAnnotations (C function): Objetos Function<3>.
                                                             (line  118)
* PyFunction_GetClosure (C function):    Objetos Function<3>.
                                                             (line  105)
* PyFunction_GetCode (C function):       Objetos Function<3>.
                                                             (line   48)
* PyFunction_GetDefaults (C function):   Objetos Function<3>.
                                                             (line   65)
* PyFunction_GetGlobals (C function):    Objetos Function<3>.
                                                             (line   52)
* PyFunction_GetKwDefaults (C function): Objetos Function<3>.
                                                             (line   89)
* PyFunction_GetModule (C function):     Objetos Function<3>.
                                                             (line   56)
* PyFunction_New (C function):           Objetos Function<3>.
                                                             (line   24)
* PyFunction_NewWithQualName (C function): Objetos Function<3>.
                                                             (line   37)
* PyFunction_SetAnnotations (C function): Objetos Function<3>.
                                                             (line  123)
* PyFunction_SetClosure (C function):    Objetos Function<3>.
                                                             (line  110)
* PyFunction_SetDefaults (C function):   Objetos Function<3>.
                                                             (line   71)
* PyFunction_SetKwDefaults (C function): Objetos Function<3>.
                                                             (line   95)
* PyFunction_SetVectorcall (C function): Objetos Function<3>.
                                                             (line   79)
* PyFunction_Type (C var):               Objetos Function<3>.
                                                             (line   12)
* PyFunction_WatchCallback (C type):     Objetos Function<3>.
                                                             (line  186)
* PyFunction_WatchEvent (C type):        Objetos Function<3>.
                                                             (line  170)
* PyFunctionObject (C type):             Objetos Function<3>.
                                                             (line    8)
* PYFUNCTYPE() (no módulo ctypes):       Function prototypes.
                                                             (line   35)
* PyGC_Collect (C function):             Controlando o estado do coletor de lixo.
                                                             (line    9)
* PyGC_Disable (C function):             Controlando o estado do coletor de lixo.
                                                             (line   27)
* PyGC_Enable (C function):              Controlando o estado do coletor de lixo.
                                                             (line   20)
* PyGC_IsEnabled (C function):           Controlando o estado do coletor de lixo.
                                                             (line   34)
* PyGen_Check (C function):              Objetos Geradores.  (line   19)
* PyGen_CheckExact (C function):         Objetos Geradores.  (line   24)
* PyGen_GetCode (C function):            Objetos Geradores.  (line   41)
* PyGen_New (C function):                Objetos Geradores.  (line   29)
* PyGen_NewWithQualName (C function):    Objetos Geradores.  (line   34)
* PyGen_Type (C var):                    Objetos Geradores.  (line   15)
* PyGenObject (C type):                  Objetos Geradores.  (line   11)
* PyGetSetDef (C type):                  Defining Getters and Setters.
                                                             (line    6)
* PyGetSetDef.closure (C member):        Defining Getters and Setters.
                                                             (line   28)
* PyGetSetDef.doc (C member):            Defining Getters and Setters.
                                                             (line   24)
* PyGetSetDef.get (C member):            Defining Getters and Setters.
                                                             (line   15)
* PyGetSetDef.name (C member):           Defining Getters and Setters.
                                                             (line   11)
* PyGetSetDef.set (C member):            Defining Getters and Setters.
                                                             (line   19)
* PyGetSetDescr_Type (C var):            Objetos descritores.
                                                             (line   30)
* PyGILState_Check (C function):         High-level API.     (line  171)
* PyGILState_Ensure (C function):        High-level API.     (line  119)
* PyGILState_GetThisThreadState (C function): High-level API.
                                                             (line  162)
* PyGILState_Release (C function):       High-level API.     (line  152)
* PyGILState_STATE (C type):             High-level API.     (line  104)
* PyGILState_STATE.PyGILState_LOCKED (C enumerator): High-level API.
                                                             (line  109)
* PyGILState_STATE.PyGILState_UNLOCKED (C enumerator): High-level API.
                                                             (line  114)
* PyHASH_BITS (C macro):                 API do PyHash.      (line   74)
* PyHash_FuncDef (C type):               API do PyHash.      (line  103)
* PyHash_FuncDef.hash (C member):        API do PyHash.      (line  108)
* PyHash_FuncDef.hash_bits (C member):   API do PyHash.      (line  120)
* PyHash_FuncDef.name (C member):        API do PyHash.      (line  113)
* PyHash_FuncDef.seed_bits (C member):   API do PyHash.      (line  127)
* PyHash_GetFuncDef (C function):        API do PyHash.      (line  136)
* PyHASH_IMAG (C macro):                 API do PyHash.      (line   94)
* PyHASH_INF (C macro):                  API do PyHash.      (line   86)
* PyHASH_MODULUS (C macro):              API do PyHash.      (line   65)
* PyHASH_MULTIPLIER (C macro):           API do PyHash.      (line   80)
* PyImport_AddModule (C function):       Importando módulos<2>.
                                                             (line  126)
* PyImport_AddModuleObject (C function): Importando módulos<2>.
                                                             (line  117)
* PyImport_AddModuleRef (C function):    Importando módulos<2>.
                                                             (line   94)
* PyImport_AppendInittab (C function):   Importando módulos<2>.
                                                             (line  307)
* PyImport_ExecCodeModule (C function):  Importando módulos<2>.
                                                             (line  132)
* PyImport_ExecCodeModuleEx (C function): Importando módulos<2>.
                                                             (line  175)
* PyImport_ExecCodeModuleObject (C function): Importando módulos<2>.
                                                             (line  184)
* PyImport_ExecCodeModuleWithPathnames (C function): Importando módulos<2>.
                                                             (line  199)
* PyImport_ExtendInittab (C function):   Importando módulos<2>.
                                                             (line  334)
* PyImport_FrozenModules (C var):        Importando módulos<2>.
                                                             (line  298)
* PyImport_GetImporter (C function):     Importando módulos<2>.
                                                             (line  248)
* PyImport_GetMagicNumber (C function):  Importando módulos<2>.
                                                             (line  216)
* PyImport_GetMagicTag (C function):     Importando módulos<2>.
                                                             (line  225)
* PyImport_GetModule (C function):       Importando módulos<2>.
                                                             (line  239)
* PyImport_GetModuleDict (C function):   Importando módulos<2>.
                                                             (line  233)
* PyImport_Import (C function):          Importando módulos<2>.
                                                             (line   77)
* PyImport_ImportFrozenModule (C function): Importando módulos<2>.
                                                             (line  275)
* PyImport_ImportFrozenModuleObject (C function): Importando módulos<2>.
                                                             (line  261)
* PyImport_ImportModule (C function):    Importando módulos<2>.
                                                             (line    6)
* PyImport_ImportModuleEx (C function):  Importando módulos<2>.
                                                             (line   30)
* PyImport_ImportModuleLevel (C function): Importando módulos<2>.
                                                             (line   66)
* PyImport_ImportModuleLevelObject (C function): Importando módulos<2>.
                                                             (line   48)
* PyImport_ImportModuleNoBlock (C function): Importando módulos<2>.
                                                             (line   15)
* PyImport_Inittab (C var):              Importando módulos<2>.
                                                             (line  349)
* PyImport_ReloadModule (C function):    Importando módulos<2>.
                                                             (line   88)
* PyIndex_Check (C function):            Protocolo de número.
                                                             (line  306)
* PyInit_modulename (C function):        Construindo extensões C e C++.
                                                             (line   17)
* PyInstanceMethod_Check (C function):   Objetos de Método de Instância.
                                                             (line   16)
* PyInstanceMethod_Function (C function): Objetos de Método de Instância.
                                                             (line   28)
* PyInstanceMethod_GET_FUNCTION (C function): Objetos de Método de Instância.
                                                             (line   33)
* PyInstanceMethod_New (C function):     Objetos de Método de Instância.
                                                             (line   22)
* PyInstanceMethod_Type (C var):         Objetos de Método de Instância.
                                                             (line   11)
* PyInterpreterConfig (C type):          Sub-interpreter support.
                                                             (line   24)
* PyInterpreterConfig_DEFAULT_GIL (C macro): Sub-interpreter support.
                                                             (line   93)
* PyInterpreterConfig_OWN_GIL (C macro): Sub-interpreter support.
                                                             (line  102)
* PyInterpreterConfig_SHARED_GIL (C macro): Sub-interpreter support.
                                                             (line   98)
* PyInterpreterConfig.allow_daemon_threads (C member): Sub-interpreter support.
                                                             (line   69)
* PyInterpreterConfig.allow_exec (C member): Sub-interpreter support.
                                                             (line   54)
* PyInterpreterConfig.allow_fork (C member): Sub-interpreter support.
                                                             (line   45)
* PyInterpreterConfig.allow_threads (C member): Sub-interpreter support.
                                                             (line   64)
* PyInterpreterConfig.check_multi_interp_extensions (C member): Sub-interpreter support.
                                                             (line   76)
* PyInterpreterConfig.gil (C member):    Sub-interpreter support.
                                                             (line   88)
* PyInterpreterConfig.use_main_obmalloc (C member): Sub-interpreter support.
                                                             (line   35)
* PyInterpreterState (C type):           High-level API.     (line    9)
* PyInterpreterState_Clear (C function): Low-level API.      (line   20)
* PyInterpreterState_Delete (C function): Low-level API.     (line   28)
* PyInterpreterState_Get (C function):   Low-level API.      (line  116)
* PyInterpreterState_GetDict (C function): Low-level API.    (line  138)
* PyInterpreterState_GetID (C function): Low-level API.      (line  128)
* PyInterpreterState_Head (C function):  Advanced Debugger Support.
                                                             (line    9)
* PyInterpreterState_Main (C function):  Advanced Debugger Support.
                                                             (line   14)
* PyInterpreterState_New (C function):   Low-level API.      (line   12)
* PyInterpreterState_Next (C function):  Advanced Debugger Support.
                                                             (line   18)
* PyInterpreterState_ThreadHead (C function): Advanced Debugger Support.
                                                             (line   24)
* PyIter_Check (C function):             Protocolo Iterador. (line    8)
* PyIter_Next (C function):              Protocolo Iterador. (line   22)
* PyIter_Send (C function):              Protocolo Iterador. (line   63)
* PYLAUNCHER_ALLOW_INSTALL:              Windows<14>.        (line   25)
* PYLAUNCHER_ALLOW_INSTALL <1>:          Windows<28>.        (line   16)
* PyList_Append (C function):            Objeto List.        (line  107)
* PyList_AsTuple (C function):           Objeto List.        (line  162)
* PyList_Check (C function):             Objeto List.        (line   16)
* PyList_CheckExact (C function):        Objeto List.        (line   21)
* PyList_Clear (C function):             Objeto List.        (line  141)
* PyList_Extend (C function):            Objeto List.        (line  130)
* PyList_GET_ITEM (C function):          Objeto List.        (line   68)
* PyList_GET_SIZE (C function):          Objeto List.        (line   46)
* PyList_GetItem (C function):           Objeto List.        (line   61)
* PyList_GetItem (função C):             Detalhes da contagem de referências.
                                                             (line  121)
* PyList_GetItemRef (C function):        Objeto List.        (line   50)
* PyList_GetSlice (C function):          Objeto List.        (line  113)
* PyList_Insert (C function):            Objeto List.        (line  100)
* PyList_New (C function):               Objeto List.        (line   26)
* PyList_Reverse (C function):           Objeto List.        (line  157)
* PyList_SET_ITEM (C function):          Objeto List.        (line   84)
* PyList_SetItem (C function):           Objeto List.        (line   73)
* PyList_SetItem (função C):             Detalhes da contagem de referências.
                                                             (line   28)
* PyList_SetSlice (C function):          Objeto List.        (line  121)
* PyList_Size (C function):              Objeto List.        (line   40)
* PyList_Sort (C function):              Objeto List.        (line  152)
* PyList_Type (C var):                   Objeto List.        (line   11)
* PyListIter_Type (C var):               Outros objetos iteradores.
                                                             (line   12)
* PyListObject (C type):                 Objeto List.        (line    6)
* PyListRevIter_Type (C var):            Outros objetos iteradores.
                                                             (line   15)
* PyLockStatus (C type):                 Legacy Locking APIs.
                                                             (line   16)
* PyLong_AS_LONG (C function):           Objetos Inteiros.   (line  173)
* PyLong_AsDouble (C function):          Objetos Inteiros.   (line  337)
* PyLong_AsInt (C function):             Objetos Inteiros.   (line  182)
* PyLong_AsLong (C function):            Objetos Inteiros.   (line  154)
* PyLong_AsLongAndOverflow (C function): Objetos Inteiros.   (line  189)
* PyLong_AsLongLong (C function):        Objetos Inteiros.   (line  209)
* PyLong_AsLongLongAndOverflow (C function): Objetos Inteiros.
                                                             (line  228)
* PyLong_AsNativeBytes (C function):     Objetos Inteiros.   (line  368)
* PyLong_AsPid (C macro):                Objetos Inteiros.   (line  358)
* PyLong_AsSize_t (C function):          Objetos Inteiros.   (line  274)
* PyLong_AsSsize_t (C function):         Objetos Inteiros.   (line  250)
* PyLong_AsUnsignedLong (C function):    Objetos Inteiros.   (line  262)
* PyLong_AsUnsignedLongLong (C function): Objetos Inteiros.  (line  286)
* PyLong_AsUnsignedLongLongMask (C function): Objetos Inteiros.
                                                             (line  319)
* PyLong_AsUnsignedLongMask (C function): Objetos Inteiros.  (line  302)
* PyLong_AsVoidPtr (C function):         Objetos Inteiros.   (line  348)
* PyLong_Check (C function):             Objetos Inteiros.   (line   23)
* PyLong_CheckExact (C function):        Objetos Inteiros.   (line   29)
* PyLong_FromDouble (C function):        Objetos Inteiros.   (line   72)
* PyLong_FromLong (C function):          Objetos Inteiros.   (line   35)
* PyLong_FromLongLong (C function):      Objetos Inteiros.   (line   61)
* PyLong_FromNativeBytes (C function):   Objetos Inteiros.   (line  115)
* PyLong_FromPid (C macro):              Objetos Inteiros.   (line  144)
* PyLong_FromSize_t (C function):        Objetos Inteiros.   (line   56)
* PyLong_FromSsize_t (C function):       Objetos Inteiros.   (line   51)
* PyLong_FromString (C function):        Objetos Inteiros.   (line   77)
* PyLong_FromUnicodeObject (C function): Objetos Inteiros.   (line  102)
* PyLong_FromUnsignedLong (C function):  Objetos Inteiros.   (line   45)
* PyLong_FromUnsignedLongLong (C function): Objetos Inteiros.
                                                             (line   66)
* PyLong_FromUnsignedNativeBytes (C function): Objetos Inteiros.
                                                             (line  131)
* PyLong_FromVoidPtr (C function):       Objetos Inteiros.   (line  109)
* PyLong_GetInfo (C function):           Objetos Inteiros.   (line  521)
* PyLong_Type (C var):                   Objetos Inteiros.   (line   18)
* PyLongObject (C type):                 Objetos Inteiros.   (line   13)
* PyLongRangeIter_Type (C var):          Outros objetos iteradores.
                                                             (line   27)
* PyMap_Type (C var):                    Tipos de iteradores embutidos.
                                                             (line   21)
* PyMapping_Check (C function):          Protocolo de mapeamento.
                                                             (line    9)
* PyMapping_DelItem (C function):        Protocolo de mapeamento.
                                                             (line   62)
* PyMapping_DelItemString (C function):  Protocolo de mapeamento.
                                                             (line   66)
* PyMapping_GetItemString (C function):  Protocolo de mapeamento.
                                                             (line   24)
* PyMapping_GetOptionalItem (C function): Protocolo de mapeamento.
                                                             (line   31)
* PyMapping_GetOptionalItemString (C function): Protocolo de mapeamento.
                                                             (line   46)
* PyMapping_HasKey (C function):         Protocolo de mapeamento.
                                                             (line   89)
* PyMapping_HasKeyString (C function):   Protocolo de mapeamento.
                                                             (line  102)
* PyMapping_HasKeyStringWithError (C function): Protocolo de mapeamento.
                                                             (line   80)
* PyMapping_HasKeyWithError (C function): Protocolo de mapeamento.
                                                             (line   72)
* PyMapping_Items (C function):          Protocolo de mapeamento.
                                                             (line  132)
* PyMapping_Keys (C function):           Protocolo de mapeamento.
                                                             (line  116)
* PyMapping_Length (C function):         Protocolo de mapeamento.
                                                             (line   17)
* PyMapping_SetItemString (C function):  Protocolo de mapeamento.
                                                             (line   55)
* PyMapping_Size (C function):           Protocolo de mapeamento.
                                                             (line   17)
* PyMapping_Values (C function):         Protocolo de mapeamento.
                                                             (line  124)
* PyMappingMethods (C type):             Mapping Object Structures.
                                                             (line    6)
* PyMappingMethods.mp_ass_subscript (C member): Mapping Object Structures.
                                                             (line   33)
* PyMappingMethods.mp_length (C member): Mapping Object Structures.
                                                             (line   11)
* PyMappingMethods.mp_subscript (C member): Mapping Object Structures.
                                                             (line   21)
* PyMarshal_ReadLastObjectFromFile (C function): Suporte a marshalling de dados.
                                                             (line   77)
* PyMarshal_ReadLongFromFile (C function): Suporte a marshalling de dados.
                                                             (line   51)
* PyMarshal_ReadObjectFromFile (C function): Suporte a marshalling de dados.
                                                             (line   69)
* PyMarshal_ReadObjectFromString (C function): Suporte a marshalling de dados.
                                                             (line   91)
* PyMarshal_ReadShortFromFile (C function): Suporte a marshalling de dados.
                                                             (line   60)
* PyMarshal_WriteLongToFile (C function): Suporte a marshalling de dados.
                                                             (line   22)
* PyMarshal_WriteObjectToFile (C function): Suporte a marshalling de dados.
                                                             (line   33)
* PyMarshal_WriteObjectToString (C function): Suporte a marshalling de dados.
                                                             (line   42)
* PyMem_Calloc (C function):             Interface da Memória.
                                                             (line   27)
* PyMem_Del (C function):                Interface da Memória.
                                                             (line   83)
* PyMem_DEL (C macro):                   Apelidos descontinuados<2>.
                                                             (line   29)
* PYMEM_DOMAIN_MEM (C macro):            Alocadores de memória.
                                                             (line   52)
* PYMEM_DOMAIN_OBJ (C macro):            Alocadores de memória.
                                                             (line   64)
* PYMEM_DOMAIN_RAW (C macro):            Alocadores de memória.
                                                             (line   40)
* PyMem_Free (C function):               Interface da Memória.
                                                             (line   55)
* PyMem_FREE (C macro):                  Apelidos descontinuados<2>.
                                                             (line   26)
* PyMem_GetAllocator (C function):       Alocadores de memória.
                                                             (line   76)
* PyMem_Malloc (C function):             Interface da Memória.
                                                             (line   18)
* PyMem_MALLOC (C macro):                Apelidos descontinuados<2>.
                                                             (line   14)
* PyMem_New (C macro):                   Interface da Memória.
                                                             (line   67)
* PyMem_NEW (C macro):                   Apelidos descontinuados<2>.
                                                             (line   17)
* PyMem_RawCalloc (C function):          Raw Memory Interface.
                                                             (line   24)
* PyMem_RawFree (C function):            Raw Memory Interface.
                                                             (line   52)
* PyMem_RawMalloc (C function):          Raw Memory Interface.
                                                             (line   15)
* PyMem_RawRealloc (C function):         Raw Memory Interface.
                                                             (line   36)
* PyMem_Realloc (C function):            Interface da Memória.
                                                             (line   39)
* PyMem_REALLOC (C macro):               Apelidos descontinuados<2>.
                                                             (line   20)
* PyMem_Resize (C macro):                Interface da Memória.
                                                             (line   73)
* PyMem_RESIZE (C macro):                Apelidos descontinuados<2>.
                                                             (line   23)
* PyMem_SetAllocator (C function):       Alocadores de memória.
                                                             (line   81)
* PyMem_SetupDebugHooks (C function):    Alocadores de memória.
                                                             (line  124)
* PyMemAllocatorDomain (C type):         Alocadores de memória.
                                                             (line   36)
* PyMemAllocatorEx (C type):             Alocadores de memória.
                                                             (line    8)
* PyMember_GetOne (C function):          Accessing attributes of extension types.
                                                             (line   71)
* PyMember_SetOne (C function):          Accessing attributes of extension types.
                                                             (line   80)
* PyMemberDef (C type):                  Accessing attributes of extension types.
                                                             (line    6)
* PyMemberDef.doc (C member):            Accessing attributes of extension types.
                                                             (line   36)
* PyMemberDef.flags (C member):          Accessing attributes of extension types.
                                                             (line   31)
* PyMemberDef.name (C member):           Accessing attributes of extension types.
                                                             (line   14)
* PyMemberDef.offset (C member):         Accessing attributes of extension types.
                                                             (line   26)
* PyMemberDef.type (C member):           Accessing attributes of extension types.
                                                             (line   21)
* PyMemberDescr_Type (C var):            Objetos descritores.
                                                             (line   23)
* PyMemoryView_Check (C function):       Objetos MemoryView. (line   62)
* PyMemoryView_FromBuffer (C function):  Objetos MemoryView. (line   41)
* PyMemoryView_FromMemory (C function):  Objetos MemoryView. (line   32)
* PyMemoryView_FromObject (C function):  Objetos MemoryView. (line   15)
* PyMemoryView_GET_BASE (C function):    Objetos MemoryView. (line   76)
* PyMemoryView_GET_BUFFER (C function):  Objetos MemoryView. (line   68)
* PyMemoryView_GetContiguous (C function): Objetos MemoryView.
                                                             (line   49)
* PyMemoryView_Type (C var):             Objetos MemoryView. (line   10)
* PyMethod_Check (C function):           Objetos método<2>.  (line   17)
* PyMethod_Function (C function):        Objetos método<2>.  (line   31)
* PyMethod_GET_FUNCTION (C function):    Objetos método<2>.  (line   35)
* PyMethod_GET_SELF (C function):        Objetos método<2>.  (line   44)
* PyMethod_New (C function):             Objetos método<2>.  (line   23)
* PyMethod_Self (C function):            Objetos método<2>.  (line   40)
* PyMethod_Type (C var):                 Objetos método<2>.  (line   11)
* PyMethodDef (C type):                  Implementing functions and methods.
                                                             (line   63)
* PyMethodDef.ml_doc (C member):         Implementing functions and methods.
                                                             (line   80)
* PyMethodDef.ml_flags (C member):       Implementing functions and methods.
                                                             (line   76)
* PyMethodDef.ml_meth (C member):        Implementing functions and methods.
                                                             (line   72)
* PyMethodDef.ml_name (C member):        Implementing functions and methods.
                                                             (line   68)
* PyMethodDescr_Type (C var):            Objetos descritores.
                                                             (line   42)
* PyMODINIT_FUNC (C macro):              Macros úteis.       (line   11)
* PyModule_Add (C function):             Support functions.  (line   63)
* PyModule_AddFunctions (C function):    Funções de criação de módulo de baixo nível.
                                                             (line   54)
* PyModule_AddIntConstant (C function):  Support functions.  (line  113)
* PyModule_AddIntMacro (C macro):        Support functions.  (line  136)
* PyModule_AddObject (C function):       Support functions.  (line   79)
* PyModule_AddObjectRef (C function):    Support functions.  (line   11)
* PyModule_AddStringConstant (C function): Support functions.
                                                             (line  124)
* PyModule_AddStringMacro (C macro):     Support functions.  (line  144)
* PyModule_AddType (C function):         Support functions.  (line  148)
* PyModule_Check (C function):           Objetos do Módulo.  (line   13)
* PyModule_CheckExact (C function):      Objetos do Módulo.  (line   18)
* PyModule_Create (C function):          inicialização de fase única.
                                                             (line   10)
* PyModule_Create2 (C function):         inicialização de fase única.
                                                             (line   16)
* PyModule_ExecDef (C function):         Funções de criação de módulo de baixo nível.
                                                             (line   37)
* PyModule_FromDefAndSpec (C function):  Funções de criação de módulo de baixo nível.
                                                             (line   11)
* PyModule_FromDefAndSpec2 (C function): Funções de criação de módulo de baixo nível.
                                                             (line   20)
* PyModule_GetDef (C function):          Objetos do Módulo.  (line   88)
* PyModule_GetDict (C function):         Objetos do Módulo.  (line   46)
* PyModule_GetFilename (C function):     Objetos do Módulo.  (line  111)
* PyModule_GetFilenameObject (C function): Objetos do Módulo.
                                                             (line   98)
* PyModule_GetName (C function):         Objetos do Módulo.  (line   74)
* PyModule_GetNameObject (C function):   Objetos do Módulo.  (line   63)
* PyModule_GetState (C function):        Objetos do Módulo.  (line   83)
* PyModule_New (C function):             Objetos do Módulo.  (line   41)
* PyModule_NewObject (C function):       Objetos do Módulo.  (line   23)
* PyModule_SetDocString (C function):    Funções de criação de módulo de baixo nível.
                                                             (line   43)
* PyModule_Type (C var):                 Objetos do Módulo.  (line    6)
* PyModuleDef (C type):                  Inicializando módulos C.
                                                             (line   18)
* PyModuleDef_Init (C function):         Inicialização multifásica.
                                                             (line   47)
* PyModuleDef_Slot (C type):             Inicialização multifásica.
                                                             (line   60)
* PyModuleDef_Slot.slot (C member):      Inicialização multifásica.
                                                             (line   62)
* PyModuleDef_Slot.value (C member):     Inicialização multifásica.
                                                             (line   68)
* PyModuleDef.m_base (C member):         Inicializando módulos C.
                                                             (line   25)
* PyModuleDef.m_clear (C member):        Inicializando módulos C.
                                                             (line   93)
* PyModuleDef.m_doc (C member):          Inicializando módulos C.
                                                             (line   33)
* PyModuleDef.m_free (C member):         Inicializando módulos C.
                                                             (line  116)
* PyModuleDef.m_methods (C member):      Inicializando módulos C.
                                                             (line   60)
* PyModuleDef.m_name (C member):         Inicializando módulos C.
                                                             (line   29)
* PyModuleDef.m_size (C member):         Inicializando módulos C.
                                                             (line   38)
* PyModuleDef.m_slots (C member):        Inicializando módulos C.
                                                             (line   66)
* PyModuleDef.m_slots.m_reload (C member): Inicializando módulos C.
                                                             (line   75)
* PyModuleDef.m_traverse (C member):     Inicializando módulos C.
                                                             (line   77)
* PyMonitoring_EnterScope (C function):  Gerenciando o Estado de um Monitoramento.
                                                             (line    9)
* PyMonitoring_ExitScope (C function):   Gerenciando o Estado de um Monitoramento.
                                                             (line   96)
* PyMonitoring_FireBranchEvent (C function): Gerando eventos de execução.
                                                             (line   72)
* PyMonitoring_FireCallEvent (C function): Gerando eventos de execução.
                                                             (line   56)
* PyMonitoring_FireCRaiseEvent (C function): Gerando eventos de execução.
                                                             (line   95)
* PyMonitoring_FireCReturnEvent (C function): Gerando eventos de execução.
                                                             (line   78)
* PyMonitoring_FireExceptionHandledEvent (C function): Gerando eventos de execução.
                                                             (line  107)
* PyMonitoring_FireJumpEvent (C function): Gerando eventos de execução.
                                                             (line   67)
* PyMonitoring_FireLineEvent (C function): Gerando eventos de execução.
                                                             (line   62)
* PyMonitoring_FirePyResumeEvent (C function): Gerando eventos de execução.
                                                             (line   41)
* PyMonitoring_FirePyReturnEvent (C function): Gerando eventos de execução.
                                                             (line   46)
* PyMonitoring_FirePyStartEvent (C function): Gerando eventos de execução.
                                                             (line   36)
* PyMonitoring_FirePyThrowEvent (C function): Gerando eventos de execução.
                                                             (line   83)
* PyMonitoring_FirePyUnwindEvent (C function): Gerando eventos de execução.
                                                             (line  113)
* PyMonitoring_FirePyYieldEvent (C function): Gerando eventos de execução.
                                                             (line   51)
* PyMonitoring_FireRaiseEvent (C function): Gerando eventos de execução.
                                                             (line   89)
* PyMonitoring_FireReraiseEvent (C function): Gerando eventos de execução.
                                                             (line  101)
* PyMonitoring_FireStopIterationEvent (C function): Gerando eventos de execução.
                                                             (line  119)
* PyMonitoringState (C type):            Gerando eventos de execução.
                                                             (line   25)
* PyMutex (C type):                      Synchronization Primitives<2>.
                                                             (line    8)
* PyMutex_Lock (C function):             Synchronization Primitives<2>.
                                                             (line   25)
* PyMutex_Unlock (C function):           Synchronization Primitives<2>.
                                                             (line   34)
* PyNumber_Absolute (C function):        Protocolo de número.
                                                             (line   98)
* PyNumber_Add (C function):             Protocolo de número.
                                                             (line   14)
* PyNumber_And (C function):             Protocolo de número.
                                                             (line  124)
* PyNumber_AsSsize_t (C function):       Protocolo de número.
                                                             (line  291)
* PyNumber_Check (C function):           Protocolo de número.
                                                             (line    6)
* PyNumber_Divmod (C function):          Protocolo de número.
                                                             (line   68)
* PyNumber_Float (C function):           Protocolo de número.
                                                             (line  264)
* PyNumber_FloorDivide (C function):     Protocolo de número.
                                                             (line   43)
* PyNumber_Index (C function):           Protocolo de número.
                                                             (line  272)
* PyNumber_InPlaceAdd (C function):      Protocolo de número.
                                                             (line  145)
* PyNumber_InPlaceAnd (C function):      Protocolo de número.
                                                             (line  232)
* PyNumber_InPlaceFloorDivide (C function): Protocolo de número.
                                                             (line  176)
* PyNumber_InPlaceLshift (C function):   Protocolo de número.
                                                             (line  216)
* PyNumber_InPlaceMatrixMultiply (C function): Protocolo de número.
                                                             (line  166)
* PyNumber_InPlaceMultiply (C function): Protocolo de número.
                                                             (line  159)
* PyNumber_InPlaceOr (C function):       Protocolo de número.
                                                             (line  248)
* PyNumber_InPlacePower (C function):    Protocolo de número.
                                                             (line  203)
* PyNumber_InPlaceRemainder (C function): Protocolo de número.
                                                             (line  196)
* PyNumber_InPlaceRshift (C function):   Protocolo de número.
                                                             (line  224)
* PyNumber_InPlaceSubtract (C function): Protocolo de número.
                                                             (line  152)
* PyNumber_InPlaceTrueDivide (C function): Protocolo de número.
                                                             (line  184)
* PyNumber_InPlaceXor (C function):      Protocolo de número.
                                                             (line  240)
* PyNumber_Invert (C function):          Protocolo de número.
                                                             (line  105)
* PyNumber_Long (C function):            Protocolo de número.
                                                             (line  256)
* PyNumber_Lshift (C function):          Protocolo de número.
                                                             (line  110)
* PyNumber_MatrixMultiply (C function):  Protocolo de número.
                                                             (line   34)
* PyNumber_Multiply (C function):        Protocolo de número.
                                                             (line   27)
* PyNumber_Negative (C function):        Protocolo de número.
                                                             (line   88)
* PyNumber_Or (C function):              Protocolo de número.
                                                             (line  138)
* PyNumber_Positive (C function):        Protocolo de número.
                                                             (line   93)
* PyNumber_Power (C function):           Protocolo de número.
                                                             (line   77)
* PyNumber_Remainder (C function):       Protocolo de número.
                                                             (line   61)
* PyNumber_Rshift (C function):          Protocolo de número.
                                                             (line  117)
* PyNumber_Subtract (C function):        Protocolo de número.
                                                             (line   20)
* PyNumber_ToBase (C function):          Protocolo de número.
                                                             (line  281)
* PyNumber_TrueDivide (C function):      Protocolo de número.
                                                             (line   50)
* PyNumber_Xor (C function):             Protocolo de número.
                                                             (line  131)
* PyNumberMethods (C type):              Number Object Structures.
                                                             (line    6)
* PyNumberMethods.nb_absolute (C member): Number Object Structures.
                                                             (line  117)
* PyNumberMethods.nb_add (C member):     Number Object Structures.
                                                             (line   70)
* PyNumberMethods.nb_and (C member):     Number Object Structures.
                                                             (line  146)
* PyNumberMethods.nb_bool (C member):    Number Object Structures.
                                                             (line  123)
* PyNumberMethods.nb_divmod (C member):  Number Object Structures.
                                                             (line   93)
* PyNumberMethods.nb_float (C member):   Number Object Structures.
                                                             (line  168)
* PyNumberMethods.nb_floor_divide (C member): Number Object Structures.
                                                             (line  234)
* PyNumberMethods.nb_index (C member):   Number Object Structures.
                                                             (line  259)
* PyNumberMethods.nb_inplace_add (C member): Number Object Structures.
                                                             (line  174)
* PyNumberMethods.nb_inplace_and (C member): Number Object Structures.
                                                             (line  216)
* PyNumberMethods.nb_inplace_floor_divide (C member): Number Object Structures.
                                                             (line  246)
* PyNumberMethods.nb_inplace_lshift (C member): Number Object Structures.
                                                             (line  204)
* PyNumberMethods.nb_inplace_matrix_multiply (C member): Number Object Structures.
                                                             (line  271)
* PyNumberMethods.nb_inplace_multiply (C member): Number Object Structures.
                                                             (line  186)
* PyNumberMethods.nb_inplace_or (C member): Number Object Structures.
                                                             (line  228)
* PyNumberMethods.nb_inplace_power (C member): Number Object Structures.
                                                             (line  198)
* PyNumberMethods.nb_inplace_remainder (C member): Number Object Structures.
                                                             (line  192)
* PyNumberMethods.nb_inplace_rshift (C member): Number Object Structures.
                                                             (line  210)
* PyNumberMethods.nb_inplace_subtract (C member): Number Object Structures.
                                                             (line  180)
* PyNumberMethods.nb_inplace_true_divide (C member): Number Object Structures.
                                                             (line  253)
* PyNumberMethods.nb_inplace_xor (C member): Number Object Structures.
                                                             (line  222)
* PyNumberMethods.nb_int (C member):     Number Object Structures.
                                                             (line  161)
* PyNumberMethods.nb_invert (C member):  Number Object Structures.
                                                             (line  128)
* PyNumberMethods.nb_lshift (C member):  Number Object Structures.
                                                             (line  134)
* PyNumberMethods.nb_matrix_multiply (C member): Number Object Structures.
                                                             (line  265)
* PyNumberMethods.nb_multiply (C member): Number Object Structures.
                                                             (line   81)
* PyNumberMethods.nb_negative (C member): Number Object Structures.
                                                             (line  105)
* PyNumberMethods.nb_or (C member):      Number Object Structures.
                                                             (line  156)
* PyNumberMethods.nb_positive (C member): Number Object Structures.
                                                             (line  111)
* PyNumberMethods.nb_power (C member):   Number Object Structures.
                                                             (line   99)
* PyNumberMethods.nb_remainder (C member): Number Object Structures.
                                                             (line   87)
* PyNumberMethods.nb_reserved (C member): Number Object Structures.
                                                             (line  166)
* PyNumberMethods.nb_rshift (C member):  Number Object Structures.
                                                             (line  140)
* PyNumberMethods.nb_subtract (C member): Number Object Structures.
                                                             (line   75)
* PyNumberMethods.nb_true_divide (C member): Number Object Structures.
                                                             (line  240)
* PyNumberMethods.nb_xor (C member):     Number Object Structures.
                                                             (line  151)
* PyObject (C type):                     Macros e tipos de objetos base.
                                                             (line   14)
* PyObject_ASCII (C function):           Protocolo de objeto.
                                                             (line  342)
* PyObject_AsFileDescriptor (C function): Objetos arquivos.  (line   36)
* PyObject_Bytes (C function):           Protocolo de objeto.
                                                             (line  365)
* PyObject_Call (C function):            API de chamada de objetos.
                                                             (line   58)
* PyObject_CallFunction (C function):    API de chamada de objetos.
                                                             (line  110)
* PyObject_CallFunctionObjArgs (C function): API de chamada de objetos.
                                                             (line  153)
* PyObject_CallMethod (C function):      API de chamada de objetos.
                                                             (line  129)
* PyObject_CallMethodNoArgs (C function): API de chamada de objetos.
                                                             (line  179)
* PyObject_CallMethodObjArgs (C function): API de chamada de objetos.
                                                             (line  167)
* PyObject_CallMethodOneArg (C function): API de chamada de objetos.
                                                             (line  190)
* PyObject_CallNoArgs (C function):      API de chamada de objetos.
                                                             (line   75)
* PyObject_CallObject (C function):      Chamando funções Python de C.
                                                             (line   65)
* PyObject_CallObject (C function) <1>:  API de chamada de objetos.
                                                             (line   98)
* PyObject_Calloc (C function):          Alocadores de objeto.
                                                             (line   29)
* PyObject_CallOneArg (C function):      API de chamada de objetos.
                                                             (line   87)
* PyObject_CheckBuffer (C function):     Funções relacionadas ao Buffer.
                                                             (line    6)
* PyObject_ClearManagedDict (C function): Protocolo de objeto.
                                                             (line  593)
* PyObject_ClearWeakRefs (C function):   Objetos referência fraca<2>.
                                                             (line  109)
* PyObject_CopyData (C function):        Funções relacionadas ao Buffer.
                                                             (line   83)
* PyObject_DEL (C macro):                Apelidos descontinuados<3>.
                                                             (line   35)
* PyObject_Del (C macro):                Apelidos descontinuados<3>.
                                                             (line   38)
* PyObject_DelAttr (C function):         Protocolo de objeto.
                                                             (line  240)
* PyObject_DelAttrString (C function):   Protocolo de objeto.
                                                             (line  246)
* PyObject_DelItem (C function):         Protocolo de objeto.
                                                             (line  496)
* PyObject_DelItemString (C function):   Protocolo de objeto.
                                                             (line  501)
* PyObject_Dir (C function):             Protocolo de objeto.
                                                             (line  507)
* PyObject_Format (C function):          Protocolo de objeto.
                                                             (line  319)
* PyObject_Free (C function):            Alocadores de objeto.
                                                             (line   57)
* PyObject_FREE (C macro):               Apelidos descontinuados<3>.
                                                             (line   32)
* PyObject_GC_Del (C function):          Suporte a Coleta Cíclica de Lixo.
                                                             (line  133)
* PyObject_GC_IsFinalized (C function):  Suporte a Coleta Cíclica de Lixo.
                                                             (line  123)
* PyObject_GC_IsTracked (C function):    Suporte a Coleta Cíclica de Lixo.
                                                             (line  113)
* PyObject_GC_New (C macro):             Suporte a Coleta Cíclica de Lixo.
                                                             (line   56)
* PyObject_GC_NewVar (C macro):          Suporte a Coleta Cíclica de Lixo.
                                                             (line   61)
* PyObject_GC_Resize (C macro):          Suporte a Coleta Cíclica de Lixo.
                                                             (line   87)
* PyObject_GC_Track (C function):        Suporte a Coleta Cíclica de Lixo.
                                                             (line   97)
* PyObject_GC_UnTrack (C function):      Suporte a Coleta Cíclica de Lixo.
                                                             (line  138)
* PyObject_GenericGetAttr (C function):  Protocolo de objeto.
                                                             (line  187)
* PyObject_GenericGetDict (C function):  Protocolo de objeto.
                                                             (line  261)
* PyObject_GenericHash (C function):     API do PyHash.      (line  157)
* PyObject_GenericSetAttr (C function):  Protocolo de objeto.
                                                             (line  228)
* PyObject_GenericSetDict (C function):  Protocolo de objeto.
                                                             (line  278)
* PyObject_GetAIter (C function):        Protocolo de objeto.
                                                             (line  531)
* PyObject_GetArenaAllocator (C function): Customize pymalloc Arena Allocator.
                                                             (line   26)
* PyObject_GetAttr (C function):         Protocolo de objeto.
                                                             (line  143)
* PyObject_GetAttrString (C function):   Protocolo de objeto.
                                                             (line  153)
* PyObject_GetBuffer (C function):       Funções relacionadas ao Buffer.
                                                             (line   13)
* PyObject_GetItem (C function):         Protocolo de objeto.
                                                             (line  482)
* PyObject_GetItemData (C function):     Protocolo de objeto.
                                                             (line  572)
* PyObject_GetIter (C function):         Protocolo de objeto.
                                                             (line  517)
* PyObject_GetOptionalAttr (C function): Protocolo de objeto.
                                                             (line  163)
* PyObject_GetOptionalAttrString (C function): Protocolo de objeto.
                                                             (line  178)
* PyObject_GetTypeData (C function):     Protocolo de objeto.
                                                             (line  542)
* PyObject_HasAttr (C function):         Protocolo de objeto.
                                                             (line  115)
* PyObject_HasAttrString (C function):   Protocolo de objeto.
                                                             (line  128)
* PyObject_HasAttrStringWithError (C function): Protocolo de objeto.
                                                             (line  106)
* PyObject_HasAttrWithError (C function): Protocolo de objeto.
                                                             (line   97)
* PyObject_Hash (C function):            Protocolo de objeto.
                                                             (line  416)
* PyObject_HashNotImplemented (C function): Protocolo de objeto.
                                                             (line  426)
* PyObject_HEAD (C macro):               Macros e tipos de objetos base.
                                                             (line   35)
* PyObject_HEAD_INIT (C macro):          Macros e tipos de objetos base.
                                                             (line  127)
* PyObject_Init (C function):            Alocando objetos na heap.
                                                             (line   13)
* PyObject_INIT (C macro):               Apelidos descontinuados<3>.
                                                             (line   20)
* PyObject_INIT_VAR (C macro):           Apelidos descontinuados<3>.
                                                             (line   23)
* PyObject_InitVar (C function):         Alocando objetos na heap.
                                                             (line   20)
* PyObject_IS_GC (C function):           Suporte a Coleta Cíclica de Lixo.
                                                             (line  105)
* PyObject_IsInstance (C function):      Protocolo de objeto.
                                                             (line  395)
* PyObject_IsSubclass (C function):      Protocolo de objeto.
                                                             (line  375)
* PyObject_IsTrue (C function):          Protocolo de objeto.
                                                             (line  434)
* PyObject_Length (C function):          Protocolo de objeto.
                                                             (line  462)
* PyObject_LengthHint (C function):      Protocolo de objeto.
                                                             (line  471)
* PyObject_Malloc (C function):          Alocadores de objeto.
                                                             (line   20)
* PyObject_MALLOC (C macro):             Apelidos descontinuados<3>.
                                                             (line   26)
* PyObject_New (C macro):                Alocando objetos na heap.
                                                             (line   27)
* PyObject_NEW (C macro):                Apelidos descontinuados<3>.
                                                             (line   14)
* PyObject_NEW_VAR (C macro):            Apelidos descontinuados<3>.
                                                             (line   17)
* PyObject_NewVar (C macro):             Alocando objetos na heap.
                                                             (line   41)
* PyObject_Not (C function):             Protocolo de objeto.
                                                             (line  439)
* PyObject_Print (C function):           Protocolo de objeto.
                                                             (line   89)
* PyObject_Realloc (C function):         Alocadores de objeto.
                                                             (line   41)
* PyObject_REALLOC (C macro):            Apelidos descontinuados<3>.
                                                             (line   29)
* PyObject_Repr (C function):            Protocolo de objeto.
                                                             (line  329)
* PyObject_RichCompare (C function):     Protocolo de objeto.
                                                             (line  296)
* PyObject_RichCompareBool (C function): Protocolo de objeto.
                                                             (line  308)
* PyObject_SelfIter (C function):        Protocolo de objeto.
                                                             (line  525)
* PyObject_SetArenaAllocator (C function): Customize pymalloc Arena Allocator.
                                                             (line   31)
* PyObject_SetAttr (C function):         Protocolo de objeto.
                                                             (line  199)
* PyObject_SetAttrString (C function):   Protocolo de objeto.
                                                             (line  210)
* PyObject_SetItem (C function):         Protocolo de objeto.
                                                             (line  489)
* PyObject_Size (C function):            Protocolo de objeto.
                                                             (line  462)
* PyObject_Str (C function):             Protocolo de objeto.
                                                             (line  353)
* PyObject_Type (C function):            Protocolo de objeto.
                                                             (line  444)
* PyObject_TypeCheck (C function):       Protocolo de objeto.
                                                             (line  457)
* PyObject_VAR_HEAD (C macro):           Macros e tipos de objetos base.
                                                             (line   45)
* PyObject_Vectorcall (C function):      API de chamada de objetos.
                                                             (line  202)
* PyObject_VectorcallDict (C function):  API de chamada de objetos.
                                                             (line  220)
* PyObject_VectorcallMethod (C function): API de chamada de objetos.
                                                             (line  237)
* PyObject_VisitManagedDict (C function): Protocolo de objeto.
                                                             (line  583)
* PyObject.ob_refcnt (C member):         PyObject Slots.     (line   13)
* PyObject.ob_type (C member):           PyObject Slots.     (line   26)
* PyObjectArenaAllocator (C type):       Customize pymalloc Arena Allocator.
                                                             (line    8)
* PyODict_Check (C function):            Dicionários ordenados.
                                                             (line   16)
* PyODict_CheckExact (C function):       Dicionários ordenados.
                                                             (line   22)
* PyODict_Contains (C macro):            Dicionários ordenados.
                                                             (line   81)
* PyODict_DelItem (C function):          Dicionários ordenados.
                                                             (line   57)
* PyODict_GetItem (C macro):             Dicionários ordenados.
                                                             (line   72)
* PyODict_GetItemString (C macro):       Dicionários ordenados.
                                                             (line   78)
* PyODict_GetItemWithError (C macro):    Dicionários ordenados.
                                                             (line   75)
* PyODict_New (C function):              Dicionários ordenados.
                                                             (line   41)
* PyODict_SetItem (C function):          Dicionários ordenados.
                                                             (line   48)
* PyODict_Size (C macro):                Dicionários ordenados.
                                                             (line   84)
* PyODict_SIZE (C macro):                Dicionários ordenados.
                                                             (line   87)
* PyODict_Type (C var):                  Dicionários ordenados.
                                                             (line   11)
* PyODictItems_Type (C var):             Dicionários ordenados.
                                                             (line   37)
* PyODictIter_Type (C var):              Outros objetos iteradores.
                                                             (line   48)
* PyODictKeys_Type (C var):              Dicionários ordenados.
                                                             (line   28)
* PyODictValues_Type (C var):            Dicionários ordenados.
                                                             (line   32)
* PyOS_AfterFork (C function):           Utilitários do sistema operacional.
                                                             (line   81)
* PyOS_AfterFork_Child (C function):     Utilitários do sistema operacional.
                                                             (line   57)
* PyOS_AfterFork_Parent (C function):    Utilitários do sistema operacional.
                                                             (line   42)
* PyOS_BeforeFork (C function):          Utilitários do sistema operacional.
                                                             (line   29)
* PyOS_CheckStack (C function):          Utilitários do sistema operacional.
                                                             (line   92)
* PyOS_double_to_string (C function):    Conversão e formação de strings.
                                                             (line  122)
* PyOS_FSPath (C function):              Utilitários do sistema operacional.
                                                             (line    6)
* PyOS_getsig (C function):              Utilitários do sistema operacional.
                                                             (line  106)
* PyOS_InputHook (C var):                A camada de nível muito alto.
                                                             (line  148)
* PyOS_InterruptOccurred (C function):   Utilitários do sistema operacional.
                                                             (line  118)
* PyOS_mystricmp (C function):           Conversão e formação de strings.
                                                             (line  180)
* PyOS_mystrnicmp (C function):          Conversão e formação de strings.
                                                             (line  180)
* PyOS_ReadlineFunctionPointer (C var):  A camada de nível muito alto.
                                                             (line  161)
* PyOS_setsig (C function):              Utilitários do sistema operacional.
                                                             (line  111)
* PyOS_sighandler_t (C type):            Utilitários do sistema operacional.
                                                             (line  103)
* PyOS_snprintf (C function):            Conversão e formação de strings.
                                                             (line    8)
* PyOS_stricmp (C function):             Conversão e formação de strings.
                                                             (line  200)
* PyOS_string_to_double (C function):    Conversão e formação de strings.
                                                             (line   87)
* PyOS_strnicmp (C function):            Conversão e formação de strings.
                                                             (line  200)
* PyOS_strtol (C function):              Conversão e formação de strings.
                                                             (line   74)
* PyOS_strtoul (C function):             Conversão e formação de strings.
                                                             (line   51)
* PyOS_vsnprintf (C function):           Conversão e formação de strings.
                                                             (line   14)
* PyPickleBuffer_Check (C function):     Objetos buffer serializados com pickle.
                                                             (line   18)
* PyPickleBuffer_FromObject (C function): Objetos buffer serializados com pickle.
                                                             (line   23)
* PyPickleBuffer_GetBuffer (C function): Objetos buffer serializados com pickle.
                                                             (line   38)
* PyPickleBuffer_Release (C function):   Objetos buffer serializados com pickle.
                                                             (line   53)
* PyPickleBuffer_Type (C var):           Objetos buffer serializados com pickle.
                                                             (line   12)
* PyPreConfig (C type):                  PyPreConfig.        (line    6)
* PyPreConfig_InitIsolatedConfig (C function): PyPreConfig.  (line   18)
* PyPreConfig_InitPythonConfig (C function): PyPreConfig.    (line   12)
* PyPreConfig.allocator (C member):      PyPreConfig.        (line   26)
* PyPreConfig.coerce_c_locale (C member): PyPreConfig.       (line   86)
* PyPreConfig.coerce_c_locale_warn (C member): PyPreConfig.  (line   98)
* PyPreConfig.configure_locale (C member): PyPreConfig.      (line   73)
* PyPreConfig.dev_mode (C member):       PyPreConfig.        (line  106)
* PyPreConfig.isolated (C member):       PyPreConfig.        (line  113)
* PyPreConfig.legacy_windows_fs_encoding (C member): PyPreConfig.
                                                             (line  119)
* PyPreConfig.parse_argv (C member):     PyPreConfig.        (line  139)
* PyPreConfig.use_environment (C member): PyPreConfig.       (line  150)
* PyPreConfig.utf8_mode (C member):      PyPreConfig.        (line  158)
* PyProperty_Type (C var):               Objetos descritores.
                                                             (line    9)
* PyRange_Check (C function):            Objetos intervalo.  (line   10)
* PyRange_Type (C var):                  Objetos intervalo.  (line    6)
* PyRangeIter_Type (C var):              Outros objetos iteradores.
                                                             (line   24)
* PyRefTracer (C type):                  Reference tracing.  (line    8)
* PyRefTracer_CREATE (C var):            Reference tracing.  (line   21)
* PyRefTracer_DESTROY (C var):           Reference tracing.  (line   26)
* PyRefTracer_GetTracer (C function):    Reference tracing.  (line   48)
* PyRefTracer_SetTracer (C function):    Reference tracing.  (line   31)
* PyReversed_Type (C var):               Tipos de iteradores embutidos.
                                                             (line   24)
* PyRun_AnyFile (C function):            A camada de nível muito alto.
                                                             (line   25)
* PyRun_AnyFileEx (C function):          A camada de nível muito alto.
                                                             (line   38)
* PyRun_AnyFileExFlags (C function):     A camada de nível muito alto.
                                                             (line   45)
* PyRun_AnyFileFlags (C function):       A camada de nível muito alto.
                                                             (line   31)
* PyRun_File (C function):               A camada de nível muito alto.
                                                             (line  206)
* PyRun_FileEx (C function):             A camada de nível muito alto.
                                                             (line  212)
* PyRun_FileExFlags (C function):        A camada de nível muito alto.
                                                             (line  226)
* PyRun_FileFlags (C function):          A camada de nível muito alto.
                                                             (line  219)
* PyRun_InteractiveLoop (C function):    A camada de nível muito alto.
                                                             (line  133)
* PyRun_InteractiveLoopFlags (C function): A camada de nível muito alto.
                                                             (line  139)
* PyRun_InteractiveOne (C function):     A camada de nível muito alto.
                                                             (line  120)
* PyRun_InteractiveOneFlags (C function): A camada de nível muito alto.
                                                             (line  126)
* PyRun_InteractiveOneObject (C function): A camada de nível muito alto.
                                                             (line  106)
* PyRun_SimpleFile (C function):         A camada de nível muito alto.
                                                             (line   78)
* PyRun_SimpleFileEx (C function):       A camada de nível muito alto.
                                                             (line   84)
* PyRun_SimpleFileExFlags (C function):  A camada de nível muito alto.
                                                             (line   91)
* PyRun_SimpleString (C function):       A camada de nível muito alto.
                                                             (line   58)
* PyRun_SimpleStringFlags (C function):  A camada de nível muito alto.
                                                             (line   64)
* PyRun_String (C function):             A camada de nível muito alto.
                                                             (line  186)
* PyRun_StringFlags (C function):        A camada de nível muito alto.
                                                             (line  192)
* PySendResult (C type):                 Protocolo Iterador. (line   56)
* PySeqIter_Check (C function):          Objetos Iteradores. (line   19)
* PySeqIter_New (C function):            Objetos Iteradores. (line   24)
* PySeqIter_Type (C var):                Objetos Iteradores. (line   13)
* PySequence_Check (C function):         Protocolo de sequência.
                                                             (line    6)
* PySequence_Concat (C function):        Protocolo de sequência.
                                                             (line   21)
* PySequence_Contains (C function):      Protocolo de sequência.
                                                             (line   96)
* PySequence_Count (C function):         Protocolo de sequência.
                                                             (line   89)
* PySequence_DelItem (C function):       Protocolo de sequência.
                                                             (line   72)
* PySequence_DelSlice (C function):      Protocolo de sequência.
                                                             (line   83)
* PySequence_Fast (C function):          Protocolo de sequência.
                                                             (line  123)
* PySequence_Fast_GET_ITEM (C function): Protocolo de sequência.
                                                             (line  147)
* PySequence_Fast_GET_SIZE (C function): Protocolo de sequência.
                                                             (line  138)
* PySequence_Fast_ITEMS (C function):    Protocolo de sequência.
                                                             (line  153)
* PySequence_GetItem (C function):       Protocolo de sequência.
                                                             (line   49)
* PySequence_GetItem (função C):         Detalhes da contagem de referências.
                                                             (line  121)
* PySequence_GetSlice (C function):      Protocolo de sequência.
                                                             (line   55)
* PySequence_Index (C function):         Protocolo de sequência.
                                                             (line  102)
* PySequence_InPlaceConcat (C function): Protocolo de sequência.
                                                             (line   34)
* PySequence_InPlaceRepeat (C function): Protocolo de sequência.
                                                             (line   41)
* PySequence_ITEM (C function):          Protocolo de sequência.
                                                             (line  163)
* PySequence_Length (C function):        Protocolo de sequência.
                                                             (line   14)
* PySequence_List (C function):          Protocolo de sequência.
                                                             (line  108)
* PySequence_Repeat (C function):        Protocolo de sequência.
                                                             (line   27)
* PySequence_SetItem (C function):       Protocolo de sequência.
                                                             (line   62)
* PySequence_SetSlice (C function):      Protocolo de sequência.
                                                             (line   77)
* PySequence_Size (C function):          Protocolo de sequência.
                                                             (line   14)
* PySequence_Tuple (C function):         Protocolo de sequência.
                                                             (line  114)
* PySequenceMethods (C type):            Sequence Object Structures.
                                                             (line    6)
* PySequenceMethods.sq_ass_item (C member): Sequence Object Structures.
                                                             (line   62)
* PySequenceMethods.sq_concat (C member): Sequence Object Structures.
                                                             (line   22)
* PySequenceMethods.sq_contains (C member): Sequence Object Structures.
                                                             (line   75)
* PySequenceMethods.sq_inplace_concat (C member): Sequence Object Structures.
                                                             (line   86)
* PySequenceMethods.sq_inplace_repeat (C member): Sequence Object Structures.
                                                             (line  100)
* PySequenceMethods.sq_item (C member):  Sequence Object Structures.
                                                             (line   43)
* PySequenceMethods.sq_length (C member): Sequence Object Structures.
                                                             (line   11)
* PySequenceMethods.sq_repeat (C member): Sequence Object Structures.
                                                             (line   32)
* PySet_Add (C function):                Objeto Set.         (line  119)
* PySet_Check (C function):              Objeto Set.         (line   44)
* PySet_CheckExact (C function):         Objeto Set.         (line   60)
* PySet_Clear (C function):              Objeto Set.         (line  154)
* PySet_Contains (C function):           Objeto Set.         (line  110)
* PySet_Discard (C function):            Objeto Set.         (line  135)
* PySet_GET_SIZE (C function):           Objeto Set.         (line  106)
* PySet_New (C function):                Objeto Set.         (line   78)
* PySet_Pop (C function):                Objeto Set.         (line  146)
* PySet_Size (C function):               Objeto Set.         (line   98)
* PySet_Type (C var):                    Objeto Set.         (line   31)
* PySetIter_Type (C var):                Outros objetos iteradores.
                                                             (line   18)
* PySetObject (C type):                  Objeto Set.         (line   18)
* PySignal_SetWakeupFd (C function):     Tratamento de sinal<2>.
                                                             (line   67)
* PySlice_AdjustIndices (C function):    Objetos Slice.      (line  103)
* PySlice_Check (C function):            Objetos Slice.      (line   10)
* PySlice_GetIndices (C function):       Objetos Slice.      (line   27)
* PySlice_GetIndicesEx (C function):     Objetos Slice.      (line   44)
* PySlice_New (C function):              Objetos Slice.      (line   15)
* PySlice_Type (C var):                  Objetos Slice.      (line    6)
* PySlice_Unpack (C function):           Objetos Slice.      (line   88)
* PyState_AddModule (C function):        Pesquisa por módulos.
                                                             (line   25)
* PyState_FindModule (C function):       Pesquisa por módulos.
                                                             (line   15)
* PyState_RemoveModule (C function):     Pesquisa por módulos.
                                                             (line   49)
* PyStaticMethod_New (C function):       Descritores embutidos.
                                                             (line   38)
* PyStaticMethod_Type (C var):           Descritores embutidos.
                                                             (line   33)
* PyStatus (C type):                     PyStatus.           (line    6)
* PyStatus_Error (C function):           PyStatus.           (line   34)
* PyStatus_Exception (C function):       PyStatus.           (line   51)
* PyStatus_Exit (C function):            PyStatus.           (line   45)
* PyStatus_IsError (C function):         PyStatus.           (line   57)
* PyStatus_IsExit (C function):          PyStatus.           (line   61)
* PyStatus_NoMemory (C function):        PyStatus.           (line   41)
* PyStatus_Ok (C function):              PyStatus.           (line   30)
* PyStatus.err_msg (C member):           PyStatus.           (line   20)
* PyStatus.exitcode (C member):          PyStatus.           (line   16)
* PyStatus.func (C member):              PyStatus.           (line   24)
* PyStructSequence_Desc (C type):        Objetos sequência de estrutura.
                                                             (line   35)
* PyStructSequence_Desc.doc (C member):  Objetos sequência de estrutura.
                                                             (line   45)
* PyStructSequence_Desc.fields (C member): Objetos sequência de estrutura.
                                                             (line   49)
* PyStructSequence_Desc.n_in_sequence (C member): Objetos sequência de estrutura.
                                                             (line   54)
* PyStructSequence_Desc.name (C member): Objetos sequência de estrutura.
                                                             (line   40)
* PyStructSequence_Field (C type):       Objetos sequência de estrutura.
                                                             (line   59)
* PyStructSequence_Field.doc (C member): Objetos sequência de estrutura.
                                                             (line   73)
* PyStructSequence_Field.name (C member): Objetos sequência de estrutura.
                                                             (line   67)
* PyStructSequence_GET_ITEM (C function): Objetos sequência de estrutura.
                                                             (line  101)
* PyStructSequence_GetItem (C function): Objetos sequência de estrutura.
                                                             (line   91)
* PyStructSequence_InitType (C function): Objetos sequência de estrutura.
                                                             (line   21)
* PyStructSequence_InitType2 (C function): Objetos sequência de estrutura.
                                                             (line   27)
* PyStructSequence_New (C function):     Objetos sequência de estrutura.
                                                             (line   83)
* PyStructSequence_NewType (C function): Objetos sequência de estrutura.
                                                             (line   12)
* PyStructSequence_SET_ITEM (C function): Objetos sequência de estrutura.
                                                             (line  122)
* PyStructSequence_SetItem (C function): Objetos sequência de estrutura.
                                                             (line  109)
* PyStructSequence_UnnamedField (C var): Objetos sequência de estrutura.
                                                             (line   77)
* PySuper_Type (C var):                  Descritores embutidos.
                                                             (line    6)
* PySys_AddAuditHook (C function):       Funções de sistema. (line  121)
* PySys_Audit (C function):              Funções de sistema. (line   77)
* PySys_AuditTuple (C function):         Funções de sistema. (line  113)
* PySys_FormatStderr (C function):       Funções de sistema. (line   62)
* PySys_FormatStdout (C function):       Funções de sistema. (line   54)
* PySys_GetObject (C function):          Funções de sistema. (line   11)
* PySys_GetXOptions (C function):        Funções de sistema. (line   69)
* PySys_ResetWarnOptions (C function):   Funções de sistema. (line   22)
* PySys_SetArgv (C function):            Parâmetros de todo o processo.
                                                             (line  280)
* PySys_SetArgvEx (C function):          Parâmetros de todo o processo.
                                                             (line  225)
* PySys_SetObject (C function):          Funções de sistema. (line   16)
* PySys_WriteStderr (C function):        Funções de sistema. (line   49)
* PySys_WriteStdout (C function):        Funções de sistema. (line   31)
* Python 3000:                           Glossário.          (line 1450)
* Python Editor:                         IDLE — editor e console Python<2>.
                                                             (line    8)
* PYTHON_BASIC_REPL:                     Um melhor interpretador interativo.
                                                             (line   28)
* PYTHON_BASIC_REPL <1>:                 Biblioteca<16>.     (line  332)
* PYTHON_BASIC_REPL <2>:                 Biblioteca<16>.     (line  336)
* PYTHON_BASIC_REPL <3>:                 Núcleo e embutidos<22>.
                                                             (line   12)
* PYTHON_BASIC_REPL <4>:                 Modo interativo<2>. (line   26)
* PYTHON_BASIC_REPL <5>:                 Exemplo.            (line   81)
* PYTHON_BASIC_REPL <6>:                 asyncio — E/S assíncrona.
                                                             (line   82)
* python_branch() (no módulo platform):  Multiplataforma.    (line   93)
* python_build() (no módulo platform):   Multiplataforma.    (line   83)
* PYTHON_COLORS:                         Resumo – Destaques da versão.
                                                             (line   60)
* PYTHON_COLORS <1>:                     Mensagens de erro melhoradas.
                                                             (line    8)
* PYTHON_COLORS <2>:                     doctest.            (line    7)
* PYTHON_COLORS <3>:                     Controlando cores.  (line   25)
* python_compiler() (no módulo platform): Multiplataforma.   (line   88)
* PYTHON_CPU_COUNT:                      os.                 (line   12)
* PYTHON_CPU_COUNT <1>:                  Opções diversas.    (line  398)
* PYTHON_CPU_COUNT <2>:                  Diversas informações de sistema.
                                                             (line   49)
* PYTHON_CPU_COUNT <3>:                  Diversas informações de sistema.
                                                             (line   70)
* PYTHON_CPU_COUNT <4>:                  Diversos<4>.        (line   30)
* PYTHON_CPU_COUNT <5>:                  PyConfig.           (line  498)
* PYTHON_DOM:                            Conteúdo do módulo<6>.
                                                             (line   23)
* PYTHON_FROZEN_MODULES:                 Outras mudanças na linguagem.
                                                             (line   47)
* PYTHON_FROZEN_MODULES <1>:             Núcleo e embutidos<33>.
                                                             (line  109)
* PYTHON_FROZEN_MODULES <2>:             Opções diversas.    (line  367)
* PYTHON_GIL:                            CPython com threads livres.
                                                             (line   25)
* PYTHON_GIL <1>:                        CPython com threads livres.
                                                             (line   41)
* PYTHON_GIL <2>:                        Núcleo e embutidos<18>.
                                                             (line   37)
* PYTHON_GIL <3>:                        Opções diversas.    (line  417)
* PYTHON_GIL <4>:                        A trava global do interpretador no Python com threads livres.
                                                             (line    8)
* PYTHON_GIL <5>:                        Glossário.          (line  788)
* PYTHON_HISTORY:                        Outras mudanças na linguagem.
                                                             (line   59)
* PYTHON_HISTORY <1>:                    Biblioteca<36>.     (line  578)
* python_implementation() (no módulo platform): Multiplataforma.
                                                             (line   98)
* python_is_optimized() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  265)
* PYTHON_JIT:                            Um compilador just-in-time JIT experimental.
                                                             (line   21)
* PYTHON_JIT <1>:                        Um compilador just-in-time JIT experimental.
                                                             (line   24)
* PYTHON_JIT <2>:                        Um compilador just-in-time JIT experimental.
                                                             (line   28)
* PYTHON_PERF_JIT_SUPPORT:               Outras mudanças na linguagem.
                                                             (line   54)
* PYTHON_PERF_JIT_SUPPORT <1>:           Opções diversas.    (line  387)
* PYTHON_PERF_JIT_SUPPORT <2>:           PyConfig.           (line  878)
* PYTHON_PERF_JIT_SUPPORT <3>:           PyConfig.           (line  881)
* PYTHON_PERF_JIT_SUPPORT <4>:           Como trabalhar sem ponteiros de quadro.
                                                             (line   14)
* PYTHON_PRESITE:                        Opções diversas.    (line  409)
* PYTHON_PRESITE <1>:                    PyConfig.           (line  778)
* PYTHON_PRESITE=package.module:         Núcleo e embutidos<33>.
                                                             (line  160)
* python_revision() (no módulo platform): Multiplataforma.   (line  104)
* python_version_tuple() (no módulo platform): Multiplataforma.
                                                             (line  116)
* python_version() (no módulo platform): Multiplataforma.    (line  109)
* python-m-py_compile opção de linha de comando; -: Interface de linha de comando<15>.
                                                             (line   14)
* python-m-py_compile opção de linha de comando; -q: Interface de linha de comando<15>.
                                                             (line   20)
* python-m-py_compile opção de linha de comando; -quiet: Interface de linha de comando<15>.
                                                             (line   20)
* python-m-py_compile opção de linha de comando; <file>: Interface de linha de comando<15>.
                                                             (line   14)
* python-m-sqlite3-[-h]-[-v]-[filename]-[sql] opção de linha de comando; -h: Interface de linha de comando.
                                                             (line   14)
* python-m-sqlite3-[-h]-[-v]-[filename]-[sql] opção de linha de comando; -help: Interface de linha de comando.
                                                             (line   14)
* python-m-sqlite3-[-h]-[-v]-[filename]-[sql] opção de linha de comando; -v: Interface de linha de comando.
                                                             (line   18)
* python-m-sqlite3-[-h]-[-v]-[filename]-[sql] opção de linha de comando; -version: Interface de linha de comando.
                                                             (line   18)
* PYTHONASYNCIODEBUG:                    Habilitando o modo de debug.
                                                             (line   10)
* PYTHONASYNCIODEBUG <1>:                Modo de Depuração.  (line   11)
* PYTHONASYNCIODEBUG <2>:                Efeitos do Modo de Desenvolvimento do Python.
                                                             (line   68)
* PYTHONBREAKPOINT:                      PEP 553 breakpoint embutida.
                                                             (line   13)
* PYTHONBREAKPOINT <1>:                  Funções embutidas<3>.
                                                             (line  162)
* PYTHONBREAKPOINT <2>:                  sys — Parâmetros e funções específicas do sistema.
                                                             (line  267)
* PYTHONBREAKPOINT <3>:                  sys — Parâmetros e funções específicas do sistema.
                                                             (line  281)
* PYTHONBREAKPOINT <4>:                  sys — Parâmetros e funções específicas do sistema.
                                                             (line  286)
* PYTHONCASEOK:                          Alterações na API Python<4>.
                                                             (line   30)
* PYTHONCASEOK <1>:                      PEP 235 Importing Modules on Case-Insensitive Platforms.
                                                             (line   17)
* PYTHONCASEOK <2>:                      Biblioteca<128>.    (line  144)
* PYTHONCASEOK <3>:                      Funções embutidas<3>.
                                                             (line 2322)
* PYTHONCOERCECLOCALE:                   PEP 538 Coerção de localidade C legada.
                                                             (line   14)
* PYTHONCOERCECLOCALE <1>:               Opções gerais.      (line   89)
* PYTHONCOERCECLOCALE <2>:               Modo UTF-8 do Python.
                                                             (line   59)
* PYTHONCOERCECLOCALE <3>:               Configuração do Python.
                                                             (line   15)
* PYTHONDEBUG:                           Opções diversas.    (line   40)
* PYTHONDEBUG <1>:                       Compilação de depuração do Python.
                                                             (line   21)
* PYTHONDEBUG <2>:                       Variáveis de configuração global.
                                                             (line   40)
* PYTHONDEBUG <3>:                       PyConfig.           (line  669)
* PYTHONDEVMODE:                         Modo de Desenvolvimento do Python -X dev.
                                                             (line    7)
* PYTHONDEVMODE <1>:                     Opções diversas.    (line  323)
* PYTHONDEVMODE <2>:                     Modo de Desenvolvimento do Python.
                                                             (line   15)
* PYTHONDEVMODE <3>:                     PyConfig.           (line  297)
* PYTHONDONTWRITEBYTECODE:               Alterações no interpretador<2>.
                                                             (line   16)
* PYTHONDONTWRITEBYTECODE <1>:           Módulos Novos ou Aprimorados<2>.
                                                             (line  627)
* PYTHONDONTWRITEBYTECODE <2>:           Opções diversas.    (line   19)
* PYTHONDONTWRITEBYTECODE <3>:           sys — Parâmetros e funções específicas do sistema.
                                                             (line  354)
* PYTHONDONTWRITEBYTECODE <4>:           Variáveis de configuração global.
                                                             (line   55)
* PYTHONDONTWRITEBYTECODE <5>:           PyConfig.           (line  956)
* PYTHONDONTWRITEBYTECODE <6>:           Como faço para criar um arquivo pyc?.
                                                             (line   21)
* PYTHONDUMPREFS:                        A compilação de depuração usa a mesma ABI da compilação de lançamento.
                                                             (line   15)
* PYTHONDUMPREFS <1>:                    Construção<57>.     (line   54)
* PYTHONDUMPREFS <2>:                    Opções de depuração.
                                                             (line   22)
* PYTHONDUMPREFS <3>:                    Opções de depuração.
                                                             (line   24)
* PYTHONDUMPREFS <4>:                    PyConfig.           (line  308)
* PYTHONDUMPREFSFILE:                    Núcleo e embutidos<85>.
                                                             (line   16)
* PYTHONEXECUTABLE:                      PyConfig.           (line  704)
* PYTHONFAULTHANDLER:                    faulthandler<4>.    (line   12)
* PYTHONFAULTHANDLER <1>:                Opções diversas.    (line  282)
* PYTHONFAULTHANDLER <2>:                Efeitos do Modo de Desenvolvimento do Python.
                                                             (line   61)
* PYTHONFAULTHANDLER <3>:                faulthandler — Dump the Python traceback.
                                                             (line   15)
* PYTHONFAULTHANDLER <4>:                PyConfig.           (line  346)
* PythonFinalizationError:               Exceções concretas. (line  231)
* PYTHONHASHSEED:                        Builtin functions and types.
                                                             (line   17)
* PYTHONHASHSEED <1>:                    Porting Python code.
                                                             (line    6)
* PYTHONHASHSEED <2>:                    Núcleo e embutidos<142>.
                                                             (line   30)
* PYTHONHASHSEED <3>:                    Opções diversas.    (line  138)
* PYTHONHASHSEED <4>:                    Opções diversas.    (line  155)
* PYTHONHASHSEED <5>:                    Variáveis de ambiente.
                                                             (line  163)
* PYTHONHASHSEED <6>:                    Personalização básica.
                                                             (line  333)
* PYTHONHASHSEED <7>:                    Variáveis de configuração global.
                                                             (line   82)
* PYTHONHASHSEED <8>:                    Variáveis de configuração global.
                                                             (line   85)
* PYTHONHASHSEED <9>:                    PyConfig.           (line  416)
* PYTHONHOME:                            APIs C descontinuadas.
                                                             (line   25)
* PYTHONHOME <1>:                        Remoção pendente no Python 3 15<2>.
                                                             (line   35)
* PYTHONHOME <2>:                        Remoção pendente no Python 3 15<4>.
                                                             (line   35)
* PYTHONHOME <3>:                        Resumo – Destaques da versão<8>.
                                                             (line  107)
* PYTHONHOME <4>:                        Opções diversas.    (line   48)
* PYTHONHOME <5>:                        Variáveis de ambiente.
                                                             (line   19)
* PYTHONHOME <6>:                        Variáveis de ambiente.
                                                             (line   21)
* PYTHONHOME <7>:                        Variáveis de ambiente.
                                                             (line   38)
* PYTHONHOME <8>:                        Encontrando módulos.
                                                             (line   31)
* PYTHONHOME <9>:                        Encontrando módulos.
                                                             (line   49)
* PYTHONHOME <10>:                       Encontrando módulos.
                                                             (line   85)
* PYTHONHOME <11>:                       Adicionando Python a um projeto iOS.
                                                             (line  155)
* PYTHONHOME <12>:                       test support script_helper — Utilities for the Python execution tests.
                                                             (line   25)
* PYTHONHOME <13>:                       A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   34)
* PYTHONHOME <14>:                       Ambientes virtuais<2>.
                                                             (line   14)
* PYTHONHOME <15>:                       Incorporando Python<2>.
                                                             (line   38)
* PYTHONHOME <16>:                       Incorporando Python<2>.
                                                             (line   44)
* PYTHONHOME <17>:                       Variáveis de configuração global.
                                                             (line   99)
* PYTHONHOME <18>:                       Parâmetros de todo o processo.
                                                             (line  310)
* PYTHONHOME <19>:                       Parâmetros de todo o processo.
                                                             (line  326)
* PYTHONHOME <20>:                       Parâmetros de todo o processo.
                                                             (line  335)
* PYTHONHOME <21>:                       PyConfig.           (line  424)
* PYTHONHOME <22>:                       PyConfig.           (line  426)
* PYTHONHOME <23>:                       Remoção pendente no Python 3 15<6>.
                                                             (line   35)
* Pythônico:                             Glossário.          (line 1457)
* PYTHONINSPECT:                         Outras alterações e correções<2>.
                                                             (line   13)
* PYTHONINSPECT <1>:                     Núcleo e embutidos. (line   47)
* PYTHONINSPECT <2>:                     Opções diversas.    (line   71)
* PYTHONINSPECT <3>:                     Variáveis de configuração global.
                                                             (line  117)
* PYTHONINSPECT <4>:                     PyConfig.           (line  451)
* PYTHONINTMAXSTRDIGITS:                 Núcleo e embutidos<51>.
                                                             (line   74)
* PYTHONINTMAXSTRDIGITS <1>:             Opções diversas.    (line  306)
* PYTHONINTMAXSTRDIGITS <2>:             Configurando o limiter.
                                                             (line   10)
* PYTHONINTMAXSTRDIGITS <3>:             Configurando o limiter.
                                                             (line   17)
* PYTHONINTMAXSTRDIGITS <4>:             sys — Parâmetros e funções específicas do sistema.
                                                             (line 1223)
* PYTHONINTMAXSTRDIGITS <5>:             PyConfig.           (line  482)
* PYTHONIOENCODING:                      Other Improvements<2>.
                                                             (line   75)
* PYTHONIOENCODING <1>:                  Alterações no interpretador<2>.
                                                             (line   23)
* PYTHONIOENCODING <2>:                  Variáveis de ambiente.
                                                             (line  421)
* PYTHONIOENCODING <3>:                  Modo UTF-8 do Python.
                                                             (line   29)
* PYTHONIOENCODING <4>:                  sys — Parâmetros e funções específicas do sistema.
                                                             (line 1935)
* PYTHONIOENCODING <5>:                  PyConfig.           (line  838)
* PYTHONLEGACYWINDOWSFSENCODING:         Novas descontinuações.
                                                             (line  136)
* PYTHONLEGACYWINDOWSFSENCODING <1>:     Remoção pendente no Python 3 16.
                                                             (line   52)
* PYTHONLEGACYWINDOWSFSENCODING <2>:     Remoção pendente no Python 3 16<3>.
                                                             (line   52)
* PYTHONLEGACYWINDOWSFSENCODING <3>:     PEP 529 Change Windows filesystem encoding to UTF-8.
                                                             (line   18)
* PYTHONLEGACYWINDOWSFSENCODING <4>:     Windows<16>.        (line   40)
* PYTHONLEGACYWINDOWSFSENCODING <5>:     sys — Parâmetros e funções específicas do sistema.
                                                             (line 1873)
* PYTHONLEGACYWINDOWSFSENCODING <6>:     sys — Parâmetros e funções específicas do sistema.
                                                             (line 1884)
* PYTHONLEGACYWINDOWSFSENCODING <7>:     sys — Parâmetros e funções específicas do sistema.
                                                             (line 1890)
* PYTHONLEGACYWINDOWSFSENCODING <8>:     Variáveis de configuração global.
                                                             (line  161)
* PYTHONLEGACYWINDOWSFSENCODING <9>:     PyPreConfig.        (line  131)
* PYTHONLEGACYWINDOWSFSENCODING <10>:    Remoção pendente no Python 3 16<5>.
                                                             (line   52)
* PYTHONLEGACYWINDOWSSTDIO:              PEP 528 Change Windows console encoding to UTF-8.
                                                             (line   12)
* PYTHONLEGACYWINDOWSSTDIO <1>:          Variáveis de ambiente.
                                                             (line  200)
* PYTHONLEGACYWINDOWSSTDIO <2>:          sys — Parâmetros e funções específicas do sistema.
                                                             (line 1939)
* PYTHONLEGACYWINDOWSSTDIO <3>:          Variáveis de configuração global.
                                                             (line  181)
* PYTHONLEGACYWINDOWSSTDIO <4>:          PyConfig.           (line  535)
* PYTHONMALLOC:                          PYTHONMALLOC environment variable.
                                                             (line    6)
* PYTHONMALLOC <1>:                      Alterações na API C<13>.
                                                             (line    9)
* PYTHONMALLOC <2>:                      Núcleo e embutidos<162>.
                                                             (line   90)
* PYTHONMALLOC <3>:                      Variáveis de ambiente.
                                                             (line  342)
* PYTHONMALLOC <4>:                      Opções de desempenho.
                                                             (line  115)
* PYTHONMALLOC <5>:                      Opções de desempenho.
                                                             (line  122)
* PYTHONMALLOC <6>:                      Efeitos do Modo de Desenvolvimento do Python.
                                                             (line   47)
* PYTHONMALLOC <7>:                      Efeitos do Modo de Desenvolvimento do Python.
                                                             (line   52)
* PYTHONMALLOC <8>:                      Visão Geral<4>.     (line   78)
* PYTHONMALLOC <9>:                      Alocadores de memória padrão.
                                                             (line   26)
* PYTHONMALLOC <10>:                     Debug hooks on the Python memory allocators.
                                                             (line   11)
* PYTHONMALLOC <11>:                     The pymalloc allocator.
                                                             (line   27)
* PYTHONMALLOCSTATS:                     Núcleo e embutidos<162>.
                                                             (line   96)
* PYTHONMALLOCSTATS <1>:                 PyConfig.           (line  552)
* PYTHONMALLOCSTATS <2>:                 Visão Geral<4>.     (line   81)
* PYTHONNODEBUGRANGES:                   PEP 657 Localizações de erros refinadas em tracebacks.
                                                             (line   65)
* PYTHONNODEBUGRANGES <1>:               Opções diversas.    (line  355)
* PYTHONNODEBUGRANGES <2>:               Métodos de objetos código.
                                                             (line   43)
* PYTHONNODEBUGRANGES <3>:               PyConfig.           (line  249)
* PYTHONNOUSERSITE:                      PEP 370 Per-user site-packages Directory.
                                                             (line   30)
* PYTHONNOUSERSITE <1>:                  Opções diversas.    (line  167)
* PYTHONNOUSERSITE <2>:                  Conteúdo do módulo<10>.
                                                             (line   15)
* PYTHONNOUSERSITE <3>:                  Variáveis de configuração global.
                                                             (line  218)
* PYTHONNOUSERSITE <4>:                  PyConfig.           (line  909)
* PYTHONOPTIMIZE:                        Opções diversas.    (line   91)
* PYTHONOPTIMIZE <1>:                    Variáveis de configuração global.
                                                             (line  229)
* PYTHONOPTIMIZE <2>:                    PyConfig.           (line  619)
* PYTHONPATH:                            Changes in ‘python’ Command Behavior<2>.
                                                             (line    8)
* PYTHONPATH <1>:                        Changes in ‘python’ Command Behavior<2>.
                                                             (line    9)
* PYTHONPATH <2>:                        O caminho de busca dos módulos.
                                                             (line   16)
* PYTHONPATH <3>:                        Módulos padrões.    (line   35)
* PYTHONPATH <4>:                        Módulos padrões.    (line   35)
* PYTHONPATH <5>:                        Opções diversas.    (line   47)
* PYTHONPATH <6>:                        Variáveis de ambiente.
                                                             (line   32)
* PYTHONPATH <7>:                        Variáveis de ambiente.
                                                             (line   39)
* PYTHONPATH <8>:                        Variáveis de ambiente.
                                                             (line   42)
* PYTHONPATH <9>:                        Excursus Configurando variáveis de ambiente.
                                                             (line   39)
* PYTHONPATH <10>:                       Encontrando módulos.
                                                             (line   15)
* PYTHONPATH <11>:                       Encontrando módulos.
                                                             (line   40)
* PYTHONPATH <12>:                       Encontrando módulos.
                                                             (line   85)
* PYTHONPATH <13>:                       Adicionando Python a um projeto iOS.
                                                             (line  159)
* PYTHONPATH <14>:                       Adicionando Python a um projeto iOS.
                                                             (line  192)
* PYTHONPATH <15>:                       Adicionando Python a um projeto iOS.
                                                             (line  197)
* PYTHONPATH <16>:                       Localizadores de entrada de caminho.
                                                             (line    6)
* PYTHONPATH <17>:                       Localizadores de entrada de caminho.
                                                             (line   26)
* PYTHONPATH <18>:                       test support script_helper — Utilities for the Python execution tests.
                                                             (line   26)
* PYTHONPATH <19>:                       sys — Parâmetros e funções específicas do sistema.
                                                             (line 1390)
* PYTHONPATH <20>:                       sys — Parâmetros e funções específicas do sistema.
                                                             (line 1395)
* PYTHONPATH <21>:                       A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   16)
* PYTHONPATH <22>:                       A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   21)
* PYTHONPATH <23>:                       Construindo extensões C e C++.
                                                             (line   11)
* PYTHONPATH <24>:                       Incorporando Python<2>.
                                                             (line   40)
* PYTHONPATH <25>:                       Incorporando Python<2>.
                                                             (line   45)
* PYTHONPATH <26>:                       Variáveis de configuração global.
                                                             (line   98)
* PYTHONPATH <27>:                       PyConfig.           (line  585)
* PYTHONPERFSUPPORT:                     Outras mudanças na linguagem<2>.
                                                             (line   89)
* PYTHONPERFSUPPORT <1>:                 Opções diversas.    (line  377)
* PYTHONPERFSUPPORT <2>:                 Como habilitar o suporte a perfilação com perf.
                                                             (line    7)
* PYTHONPLATLIBDIR:                      Núcleo e embutidos<121>.
                                                             (line   47)
* PYTHONPLATLIBDIR <1>:                  A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   56)
* PYTHONPLATLIBDIR <2>:                  PyConfig.           (line  564)
* PYTHONPROFILEIMPORTTIME:               Outras mudanças na linguagem<7>.
                                                             (line   48)
* PYTHONPROFILEIMPORTTIME <1>:           Núcleo e embutidos<144>.
                                                             (line   66)
* PYTHONPROFILEIMPORTTIME <2>:           Opções diversas.    (line  315)
* PYTHONPROFILEIMPORTTIME <3>:           PyConfig.           (line  436)
* PYTHONPYCACHEPREFIX:                   Cache do sistema de arquivos paralelo para arquivos de bytecode compilados.
                                                             (line    6)
* PYTHONPYCACHEPREFIX <1>:               Núcleo e embutidos<135>.
                                                             (line  402)
* PYTHONPYCACHEPREFIX <2>:               Opções diversas.    (line  336)
* PYTHONPYCACHEPREFIX <3>:               sys — Parâmetros e funções específicas do sistema.
                                                             (line  405)
* PYTHONPYCACHEPREFIX <4>:               PyConfig.           (line  726)
* PYTHONREGRTEST_UNICODE_GUARD:          Testes<29>.         (line   13)
* PYTHONSAFEPATH:                        Resumo – Destaques da versão<3>.
                                                             (line   28)
* PYTHONSAFEPATH <1>:                    Outras mudanças na linguagem<3>.
                                                             (line   41)
* PYTHONSAFEPATH <2>:                    Segurança<24>.      (line    6)
* PYTHONSAFEPATH <3>:                    Opções diversas.    (line  123)
* PYTHONSAFEPATH <4>:                    sys — Parâmetros e funções específicas do sistema.
                                                             (line 1409)
* PYTHONSAFEPATH <5>:                    Considerações de Segurança<3>.
                                                             (line   47)
* PYTHONSAFEPATH <6>:                    PyConfig.           (line  166)
* PYTHONSTARTUP:                         sys<12>.            (line   17)
* PYTHONSTARTUP <1>:                     sys<12>.            (line   21)
* PYTHONSTARTUP <2>:                     Biblioteca.         (line  113)
* PYTHONSTARTUP <3>:                     Núcleo e embutidos<4>.
                                                             (line   24)
* PYTHONSTARTUP <4>:                     IDLE<41>.           (line  176)
* PYTHONSTARTUP <5>:                     IDLE<45>.           (line    9)
* PYTHONSTARTUP <6>:                     IDLE<51>.           (line    9)
* PYTHONSTARTUP <7>:                     Arquivo de inicialização do modo interativo.
                                                             (line    9)
* PYTHONSTARTUP <8>:                     Opções diversas.    (line   66)
* PYTHONSTARTUP <9>:                     Variáveis de ambiente.
                                                             (line  121)
* PYTHONSTARTUP <10>:                    Exemplo.            (line   10)
* PYTHONSTARTUP <11>:                    asyncio — E/S assíncrona.
                                                             (line   92)
* PYTHONSTARTUP <12>:                    Startup and Code Execution.
                                                             (line    7)
* PYTHONSTARTUP <13>:                    Uso na linha de comando<5>.
                                                             (line   42)
* PYTHONSTARTUP <14>:                    sys — Parâmetros e funções específicas do sistema.
                                                             (line 1236)
* PYTHONSTARTUP <15>:                    Configuração Readline.
                                                             (line   13)
* PYTHONTRACEMALLOC:                     Opções diversas.    (line  299)
* PYTHONTRACEMALLOC <1>:                 tracemalloc — Trace memory allocations.
                                                             (line   25)
* PYTHONTRACEMALLOC <2>:                 tracemalloc — Trace memory allocations.
                                                             (line   32)
* PYTHONTRACEMALLOC <3>:                 Funções<11>.        (line   90)
* PYTHONTRACEMALLOC <4>:                 PyConfig.           (line  866)
* PYTHONTZPATH:                          Exceptions and warnings.
                                                             (line   14)
* PYTHONUNBUFFERED:                      Núcleo e embutidos<128>.
                                                             (line  107)
* PYTHONUNBUFFERED <1>:                  Opções diversas.    (line  187)
* PYTHONUNBUFFERED <2>:                  sys — Parâmetros e funções específicas do sistema.
                                                             (line 1947)
* PYTHONUNBUFFERED <3>:                  Variáveis de configuração global.
                                                             (line  258)
* PYTHONUNBUFFERED <4>:                  PyConfig.           (line  213)
* PYTHONUOPS:                            Núcleo e embutidos<34>.
                                                             (line   29)
* PYTHONUOPS <1>:                        Núcleo e embutidos<34>.
                                                             (line  188)
* PYTHONUOPS <2>:                        Núcleo e embutidos<34>.
                                                             (line  270)
* PYTHONUOPS <3>:                        Núcleo e embutidos<34>.
                                                             (line  333)
* PYTHONUOPS <4>:                        Núcleo e embutidos<34>.
                                                             (line  403)
* PYTHONUSERBASE:                        PEP 370 Per-user site-packages Directory.
                                                             (line   23)
* PYTHONUSERBASE <1>:                    Conteúdo do módulo<10>.
                                                             (line   42)
* PYTHONUSERBASE <2>:                    Conteúdo do módulo<10>.
                                                             (line   72)
* PYTHONUSERSITE:                        test support script_helper — Utilities for the Python execution tests.
                                                             (line   26)
* PYTHONUTF8:                            PEP 540 Modo de tempo de execução UTF-8 forçado.
                                                             (line    7)
* PYTHONUTF8 <1>:                        Opções diversas.    (line  330)
* PYTHONUTF8 <2>:                        Variáveis de ambiente.
                                                             (line  431)
* PYTHONUTF8 <3>:                        Modo UTF-8.         (line   19)
* PYTHONUTF8 <4>:                        Modo UTF-8 do Python.
                                                             (line   53)
* PYTHONUTF8 <5>:                        Modo UTF-8 do Python.
                                                             (line   56)
* PYTHONUTF8 <6>:                        sys — Parâmetros e funções específicas do sistema.
                                                             (line 1938)
* PYTHONUTF8 <7>:                        PyPreConfig.        (line  163)
* PYTHONUTF8 <8>:                        Configuração do Python.
                                                             (line   14)
* PYTHONVERBOSE:                         Opções diversas.    (line  204)
* PYTHONVERBOSE <1>:                     Variáveis de configuração global.
                                                             (line  275)
* PYTHONVERBOSE <2>:                     PyConfig.           (line  926)
* PYTHONWARNDEFAULTENCODING:             EncodingWarning opcional e opção encoding="locale".
                                                             (line   21)
* PYTHONWARNDEFAULTENCODING <1>:         Biblioteca<96>.     (line   45)
* PYTHONWARNDEFAULTENCODING <2>:         Opções diversas.    (line  343)
* PYTHONWARNDEFAULTENCODING <3>:         Ativar EncodingWarning.
                                                             (line   10)
* PYTHONWARNINGS:                        avisos<3>.          (line   21)
* PYTHONWARNINGS <1>:                    Outras mudanças na linguagem<12>.
                                                             (line  160)
* PYTHONWARNINGS <2>:                    Mudanças no tratamento de avisos de descontinuação.
                                                             (line   28)
* PYTHONWARNINGS <3>:                    Alterações no interpretador.
                                                             (line    6)
* PYTHONWARNINGS <4>:                    Documentação<24>.   (line   67)
* PYTHONWARNINGS <5>:                    Opções diversas.    (line  262)
* PYTHONWARNINGS <6>:                    Efeitos do Modo de Desenvolvimento do Python.
                                                             (line   31)
* PYTHONWARNINGS <7>:                    O filtro de avisos. (line   48)
* PYTHONWARNINGS <8>:                    O filtro de avisos. (line   59)
* PYTHONWARNINGS <9>:                    Descrevendo filtros de aviso.
                                                             (line    8)
* PYTHONWARNINGS <10>:                   Descrevendo filtros de aviso.
                                                             (line   20)
* PYTHONWARNINGS <11>:                   Filtro de avisos padrão.
                                                             (line    7)
* PYTHONWARNINGS <12>:                   PyConfig.           (line  945)
* PyThread_acquire_lock (C function):    Legacy Locking APIs.
                                                             (line   72)
* PyThread_acquire_lock_timed (C function): Legacy Locking APIs.
                                                             (line   51)
* PyThread_allocate_lock (C function):   Legacy Locking APIs.
                                                             (line   32)
* PyThread_create_key (C function):      Thread Local Storage TLS API.
                                                             (line   18)
* PyThread_delete_key (C function):      Thread Local Storage TLS API.
                                                             (line   21)
* PyThread_delete_key_value (C function): Thread Local Storage TLS API.
                                                             (line   30)
* PyThread_exit_thread (C function):     Operating System Thread APIs.
                                                             (line   70)
* PyThread_free_lock (C function):       Legacy Locking APIs.
                                                             (line   45)
* PyThread_get_key_value (C function):   Thread Local Storage TLS API.
                                                             (line   27)
* PyThread_get_stacksize (C function):   Operating System Thread APIs.
                                                             (line  106)
* PyThread_get_thread_ident (C function): Operating System Thread APIs.
                                                             (line   25)
* PyThread_get_thread_native_id (C function): Operating System Thread APIs.
                                                             (line   53)
* PyThread_GetInfo (C function):         Operating System Thread APIs.
                                                             (line   37)
* PyThread_init_thread (C function):     Operating System Thread APIs.
                                                             (line   91)
* PYTHREAD_INVALID_THREAD_ID (C macro):  Operating System Thread APIs.
                                                             (line    6)
* PyThread_ReInitTLS (C function):       Thread Local Storage TLS API.
                                                             (line   33)
* PyThread_release_lock (C function):    Legacy Locking APIs.
                                                             (line   90)
* PyThread_set_key_value (C function):   Thread Local Storage TLS API.
                                                             (line   24)
* PyThread_set_stacksize (C function):   Operating System Thread APIs.
                                                             (line   96)
* PyThread_start_new_thread (C function): Operating System Thread APIs.
                                                             (line   12)
* PyThread_tss_alloc (C function):       Alocação dinâmica.  (line   11)
* PyThread_tss_create (C function):      Métodos<2>.         (line   16)
* PyThread_tss_delete (C function):      Métodos<2>.         (line   25)
* PyThread_tss_free (C function):        Alocação dinâmica.  (line   17)
* PyThread_tss_get (C function):         Métodos<2>.         (line   40)
* PyThread_tss_is_created (C function):  Métodos<2>.         (line   11)
* PyThread_tss_set (C function):         Métodos<2>.         (line   34)
* PyThread_type_lock (C type):           Legacy Locking APIs.
                                                             (line   12)
* PyThreadState (C type):                Estado de thread e a trava global do interpretador.
                                                             (line   23)
* PyThreadState (C type) <1>:            High-level API.     (line   25)
* PyThreadState_Clear (C function):      Low-level API.      (line   42)
* PyThreadState_Delete (C function):     Low-level API.      (line   53)
* PyThreadState_DeleteCurrent (C function): Low-level API.   (line   59)
* PyThreadState_EnterTracing (C function): Low-level API.    (line   97)
* PyThreadState_Get (C function):        High-level API.     (line   75)
* PyThreadState_GetDict (C function):    Low-level API.      (line  201)
* PyThreadState_GetFrame (C function):   Low-level API.      (line   66)
* PyThreadState_GetID (C function):      Low-level API.      (line   80)
* PyThreadState_GetInterpreter (C function): Low-level API.  (line   88)
* PyThreadState_GetUnchecked (C function): High-level API.   (line   83)
* PyThreadState_LeaveTracing (C function): Low-level API.    (line  106)
* PyThreadState_New (C function):        Low-level API.      (line   35)
* PyThreadState_Next (C function):       Advanced Debugger Support.
                                                             (line   30)
* PyThreadState_SetAsyncExc (C function): Low-level API.     (line  210)
* PyThreadState_Swap (C function):       High-level API.     (line   92)
* PyThreadState.interp (C member):       High-level API.     (line   30)
* PyTime_AsSecondsDouble (C function):   Funções de conversão.
                                                             (line    6)
* PyTime_Check (C function):             Objetos DateTime<2>.
                                                             (line  127)
* PyTime_CheckExact (C function):        Objetos DateTime<2>.
                                                             (line  133)
* PyTime_FromTime (C function):          Objetos DateTime<2>.
                                                             (line  183)
* PyTime_FromTimeAndFold (C function):   Objetos DateTime<2>.
                                                             (line  189)
* PyTime_MAX (C var):                    Tipos<2>.           (line   24)
* PyTime_MIN (C var):                    Tipos<2>.           (line   20)
* PyTime_Monotonic (C function):         Funções de relógio. (line   23)
* PyTime_MonotonicRaw (C function):      Funções de relógio brutas.
                                                             (line   16)
* PyTime_PerfCounter (C function):       Funções de relógio. (line   28)
* PyTime_PerfCounterRaw (C function):    Funções de relógio brutas.
                                                             (line   21)
* PyTime_t (C type):                     Tipos<2>.           (line    6)
* PyTime_Time (C function):              Funções de relógio. (line   33)
* PyTime_TimeRaw (C function):           Funções de relógio brutas.
                                                             (line   26)
* PyTimeZone_FromOffset (C function):    Objetos DateTime<2>.
                                                             (line  206)
* PyTimeZone_FromOffsetAndName (C function): Objetos DateTime<2>.
                                                             (line  214)
* PyTrace_C_CALL (C var):                Profiling and Tracing.
                                                             (line   94)
* PyTrace_C_EXCEPTION (C var):           Profiling and Tracing.
                                                             (line   99)
* PyTrace_C_RETURN (C var):              Profiling and Tracing.
                                                             (line  104)
* PyTrace_CALL (C var):                  Profiling and Tracing.
                                                             (line   62)
* PyTrace_EXCEPTION (C var):             Profiling and Tracing.
                                                             (line   70)
* PyTrace_LINE (C var):                  Profiling and Tracing.
                                                             (line   82)
* PyTrace_OPCODE (C var):                Profiling and Tracing.
                                                             (line  109)
* PyTrace_RETURN (C var):                Profiling and Tracing.
                                                             (line   89)
* PyTraceBack_Check (C function):        Tracebacks.         (line   11)
* PyTraceBack_Here (C function):         Tracebacks.         (line   16)
* PyTraceBack_Print (C function):        Tracebacks.         (line   27)
* PyTraceBack_Type (C var):              Tracebacks.         (line    6)
* PyTraceMalloc_Track (C function):      tracemalloc C API.  (line    8)
* PyTraceMalloc_Untrack (C function):    tracemalloc C API.  (line   20)
* PyTuple_Check (C function):            Objeto tupla.       (line   16)
* PyTuple_CheckExact (C function):       Objeto tupla.       (line   21)
* PyTuple_GET_ITEM (C function):         Objeto tupla.       (line   61)
* PyTuple_GET_SIZE (C function):         Objeto tupla.       (line   44)
* PyTuple_GetItem (C function):          Objeto tupla.       (line   48)
* PyTuple_GetSlice (C function):         Objeto tupla.       (line   67)
* PyTuple_New (C function):              Objeto tupla.       (line   26)
* PyTuple_Pack (C function):             Objeto tupla.       (line   31)
* PyTuple_SET_ITEM (C function):         Objeto tupla.       (line   86)
* PyTuple_SetItem (C function):          Objeto tupla.       (line   76)
* PyTuple_SetItem (função C):            Detalhes da contagem de referências.
                                                             (line   28)
* PyTuple_Size (C function):             Objeto tupla.       (line   39)
* PyTuple_Type (C var):                  Objeto tupla.       (line   11)
* PyTupleIter_Type (C var):              Outros objetos iteradores.
                                                             (line   21)
* PyTupleObject (C type):                Objeto tupla.       (line    6)
* PyType_AddWatcher (C function):        Objetos tipo<2>.    (line   67)
* PyType_Check (C function):             Objetos tipo<2>.    (line   15)
* PyType_CheckExact (C function):        Objetos tipo<2>.    (line   22)
* PyType_ClearCache (C function):        Objetos tipo<2>.    (line   28)
* PyType_ClearWatcher (C function):      Objetos tipo<2>.    (line   80)
* PyType_FastSubclass (C function):      Objetos tipo<2>.    (line  139)
* PyType_FromMetaclass (C function):     Creating Heap-Allocated Types.
                                                             (line    9)
* PyType_FromModuleAndSpec (C function): Creating Heap-Allocated Types.
                                                             (line   59)
* PyType_FromSpec (C function):          Creating Heap-Allocated Types.
                                                             (line   96)
* PyType_FromSpecWithBases (C function): Creating Heap-Allocated Types.
                                                             (line   79)
* PyType_GenericAlloc (C function):      Objetos tipo<2>.    (line  167)
* PyType_GenericNew (C function):        Objetos tipo<2>.    (line  175)
* PyType_GetDict (C function):           Objetos tipo<2>.    (line   44)
* PyType_GetFlags (C function):          Objetos tipo<2>.    (line   32)
* PyType_GetFullyQualifiedName (C function): Objetos tipo<2>.
                                                             (line  213)
* PyType_GetModule (C function):         Objetos tipo<2>.    (line  246)
* PyType_GetModuleByDef (C function):    Objetos tipo<2>.    (line  280)
* PyType_GetModuleName (C function):     Objetos tipo<2>.    (line  223)
* PyType_GetModuleState (C function):    Objetos tipo<2>.    (line  266)
* PyType_GetName (C function):           Objetos tipo<2>.    (line  198)
* PyType_GetQualName (C function):       Objetos tipo<2>.    (line  205)
* PyType_GetSlot (C function):           Objetos tipo<2>.    (line  231)
* PyType_GetTypeDataSize (C function):   Protocolo de objeto.
                                                             (line  555)
* PyType_HasFeature (C function):        Objetos tipo<2>.    (line  133)
* PyType_IS_GC (C function):             Objetos tipo<2>.    (line  153)
* PyType_IsSubtype (C function):         Objetos tipo<2>.    (line  158)
* PyType_Modified (C function):          Objetos tipo<2>.    (line   61)
* PyType_Ready (C function):             Objetos tipo<2>.    (line  182)
* PyType_Slot (C type):                  Creating Heap-Allocated Types.
                                                             (line  178)
* PyType_Slot.pfunc (C member):          Creating Heap-Allocated Types.
                                                             (line  240)
* PyType_Slot.slot (C member):           Creating Heap-Allocated Types.
                                                             (line  183)
* PyType_Spec (C type):                  Creating Heap-Allocated Types.
                                                             (line  111)
* PyType_Spec.basicsize (C member):      Creating Heap-Allocated Types.
                                                             (line  120)
* PyType_Spec.flags (C member):          Creating Heap-Allocated Types.
                                                             (line  164)
* PyType_Spec.itemsize (C member):       Creating Heap-Allocated Types.
                                                             (line  138)
* PyType_Spec.name (C member):           Creating Heap-Allocated Types.
                                                             (line  115)
* PyType_Spec.slots (C member):          Creating Heap-Allocated Types.
                                                             (line  171)
* PyType_SUPPORTS_WEAKREFS (C function): Objetos tipo<2>.    (line  312)
* PyType_Type (C var):                   Objetos tipo<2>.    (line   10)
* PyType_Unwatch (C function):           Objetos tipo<2>.    (line  108)
* PyType_Watch (C function):             Objetos tipo<2>.    (line   92)
* PyType_WatchCallback (C type):         Objetos tipo<2>.    (line  122)
* PyTypeObject (C type):                 Objetos tipo<2>.    (line    6)
* PyTypeObject.tp_alloc (C member):      PyTypeObject Slots. (line 1494)
* PyTypeObject.tp_as_async (C member):   PyTypeObject Slots. (line  290)
* PyTypeObject.tp_as_buffer (C member):  PyTypeObject Slots. (line  522)
* PyTypeObject.tp_as_mapping (C member): PyTypeObject Slots. (line  359)
* PyTypeObject.tp_as_number (C member):  PyTypeObject Slots. (line  335)
* PyTypeObject.tp_as_sequence (C member): PyTypeObject Slots.
                                                             (line  347)
* PyTypeObject.tp_base (C member):       PyTypeObject Slots. (line 1305)
* PyTypeObject.tp_bases (C member):      PyTypeObject Slots. (line 1621)
* PyTypeObject.tp_basicsize (C member):  PyTypeObject Slots. (line   48)
* PyTypeObject.tp_cache (C member):      PyTypeObject Slots. (line 1658)
* PyTypeObject.tp_call (C member):       PyTypeObject Slots. (line  416)
* PyTypeObject.tp_clear (C member):      PyTypeObject Slots. (line 1002)
* PyTypeObject.tp_dealloc (C member):    PyTypeObject Slots. (line  134)
* PyTypeObject.tp_del (C member):        PyTypeObject Slots. (line 1697)
* PyTypeObject.tp_descr_get (C member):  PyTypeObject Slots. (line 1376)
* PyTypeObject.tp_descr_set (C member):  PyTypeObject Slots. (line 1392)
* PyTypeObject.tp_dict (C member):       PyTypeObject Slots. (line 1340)
* PyTypeObject.tp_dictoffset (C member): PyTypeObject Slots. (line 1411)
* PyTypeObject.tp_doc (C member):        PyTypeObject Slots. (line  889)
* PyTypeObject.tp_finalize (C member):   PyTypeObject Slots. (line 1712)
* PyTypeObject.tp_flags (C member):      PyTypeObject Slots. (line  534)
* PyTypeObject.tp_free (C member):       PyTypeObject Slots. (line 1562)
* PyTypeObject.tp_getattr (C member):    PyTypeObject Slots. (line  243)
* PyTypeObject.tp_getattro (C member):   PyTypeObject Slots. (line  460)
* PyTypeObject.tp_getset (C member):     PyTypeObject Slots. (line 1286)
* PyTypeObject.tp_hash (C member):       PyTypeObject Slots. (line  371)
* PyTypeObject.tp_init (C member):       PyTypeObject Slots. (line 1455)
* PyTypeObject.tp_is_gc (C member):      PyTypeObject Slots. (line 1589)
* PyTypeObject.tp_itemsize (C member):   PyTypeObject Slots. (line   48)
* PyTypeObject.tp_iter (C member):       PyTypeObject Slots. (line 1203)
* PyTypeObject.tp_iternext (C member):   PyTypeObject Slots. (line 1222)
* PyTypeObject.tp_members (C member):    PyTypeObject Slots. (line 1267)
* PyTypeObject.tp_methods (C member):    PyTypeObject Slots. (line 1248)
* PyTypeObject.tp_mro (C member):        PyTypeObject Slots. (line 1644)
* PyTypeObject.tp_name (C member):       PyTypeObject Slots. (line   12)
* PyTypeObject.tp_new (C member):        PyTypeObject Slots. (line 1520)
* PyTypeObject.tp_repr (C member):       PyTypeObject Slots. (line  306)
* PyTypeObject.tp_richcompare (C member): PyTypeObject Slots.
                                                             (line 1087)
* PyTypeObject.tp_setattr (C member):    PyTypeObject Slots. (line  266)
* PyTypeObject.tp_setattro (C member):   PyTypeObject Slots. (line  490)
* PyTypeObject.tp_str (C member):        PyTypeObject Slots. (line  431)
* PyTypeObject.tp_subclasses (C member): PyTypeObject Slots. (line 1666)
* PyTypeObject.tp_traverse (C member):   PyTypeObject Slots. (line  902)
* PyTypeObject.tp_vectorcall (C member): PyTypeObject Slots. (line 1762)
* PyTypeObject.tp_vectorcall_offset (C member): PyTypeObject Slots.
                                                             (line  203)
* PyTypeObject.tp_version_tag (C member): PyTypeObject Slots.
                                                             (line 1704)
* PyTypeObject.tp_watched (C member):    PyTypeObject Slots. (line 1778)
* PyTypeObject.tp_weaklist (C member):   PyTypeObject Slots. (line 1682)
* PyTypeObject.tp_weaklistoffset (C member): PyTypeObject Slots.
                                                             (line 1167)
* PyTZInfo_Check (C function):           Objetos DateTime<2>.
                                                             (line  149)
* PyTZInfo_CheckExact (C function):      Objetos DateTime<2>.
                                                             (line  155)
* PyUnicode_1BYTE_DATA (C function):     Tipo Unicode.       (line   83)
* PyUnicode_1BYTE_KIND (C macro):        Tipo Unicode.       (line   98)
* PyUnicode_2BYTE_DATA (C function):     Tipo Unicode.       (line   83)
* PyUnicode_2BYTE_KIND (C macro):        Tipo Unicode.       (line   98)
* PyUnicode_4BYTE_DATA (C function):     Tipo Unicode.       (line   83)
* PyUnicode_4BYTE_KIND (C macro):        Tipo Unicode.       (line   98)
* PyUnicode_AsASCIIString (C function):  ASCII Codecs.       (line   16)
* PyUnicode_AsCharmapString (C function): Character Map Codecs.
                                                             (line   31)
* PyUnicode_AsEncodedString (C function): Generic Codecs.    (line   18)
* PyUnicode_AsLatin1String (C function): Latin-1 Codecs.     (line   17)
* PyUnicode_AsMBCSString (C function):   MBCS codecs for Windows.
                                                             (line   37)
* PyUnicode_AsRawUnicodeEscapeString (C function): Raw-Unicode-Escape Codecs.
                                                             (line   15)
* PyUnicode_AsUCS4 (C function):         Creating and accessing Unicode strings.
                                                             (line  387)
* PyUnicode_AsUCS4Copy (C function):     Creating and accessing Unicode strings.
                                                             (line  397)
* PyUnicode_AsUnicodeEscapeString (C function): Unicode-Escape Codecs.
                                                             (line   15)
* PyUnicode_AsUTF16String (C function):  UTF-16 Codecs.      (line   48)
* PyUnicode_AsUTF32String (C function):  UTF-32 Codecs.      (line   47)
* PyUnicode_AsUTF8 (C function):         UTF-8 Codecs.       (line   65)
* PyUnicode_AsUTF8AndSize (C function):  UTF-8 Codecs.       (line   35)
* PyUnicode_AsUTF8String (C function):   UTF-8 Codecs.       (line   25)
* PyUnicode_AsWideChar (C function):     wchar_t Support.    (line   16)
* PyUnicode_AsWideCharString (C function): wchar_t Support.  (line   34)
* PyUnicode_BuildEncodingMap (C function): Creating and accessing Unicode strings.
                                                             (line  297)
* PyUnicode_Check (C function):          Tipo Unicode.       (line   55)
* PyUnicode_CheckExact (C function):     Tipo Unicode.       (line   60)
* PyUnicode_Compare (C function):        Methods and Slot Functions.
                                                             (line  132)
* PyUnicode_CompareWithASCIIString (C function): Methods and Slot Functions.
                                                             (line  162)
* PyUnicode_Concat (C function):         Methods and Slot Functions.
                                                             (line   12)
* PyUnicode_Contains (C function):       Methods and Slot Functions.
                                                             (line  196)
* PyUnicode_CopyCharacters (C function): Creating and accessing Unicode strings.
                                                             (line  324)
* PyUnicode_Count (C function):          Methods and Slot Functions.
                                                             (line  118)
* PyUnicode_DATA (C function):           Tipo Unicode.       (line  117)
* PyUnicode_Decode (C function):         Generic Codecs.     (line    8)
* PyUnicode_DecodeASCII (C function):    ASCII Codecs.       (line    9)
* PyUnicode_DecodeCharmap (C function):  Character Map Codecs.
                                                             (line   15)
* PyUnicode_DecodeCodePageStateful (C function): MBCS codecs for Windows.
                                                             (line   29)
* PyUnicode_DecodeFSDefault (C function): File System Encoding.
                                                             (line   77)
* PyUnicode_DecodeFSDefaultAndSize (C function): File System Encoding.
                                                             (line   60)
* PyUnicode_DecodeLatin1 (C function):   Latin-1 Codecs.     (line   10)
* PyUnicode_DecodeLocale (C function):   Locale Encoding.    (line   37)
* PyUnicode_DecodeLocaleAndSize (C function): Locale Encoding.
                                                             (line    9)
* PyUnicode_DecodeMBCS (C function):     MBCS codecs for Windows.
                                                             (line   12)
* PyUnicode_DecodeMBCSStateful (C function): MBCS codecs for Windows.
                                                             (line   19)
* PyUnicode_DecodeRawUnicodeEscape (C function): Raw-Unicode-Escape Codecs.
                                                             (line    8)
* PyUnicode_DecodeUnicodeEscape (C function): Unicode-Escape Codecs.
                                                             (line    8)
* PyUnicode_DecodeUTF16 (C function):    UTF-16 Codecs.      (line    8)
* PyUnicode_DecodeUTF16Stateful (C function): UTF-16 Codecs. (line   36)
* PyUnicode_DecodeUTF32 (C function):    UTF-32 Codecs.      (line    8)
* PyUnicode_DecodeUTF32Stateful (C function): UTF-32 Codecs. (line   35)
* PyUnicode_DecodeUTF7 (C function):     UTF-7 Codecs.       (line    8)
* PyUnicode_DecodeUTF7Stateful (C function): UTF-7 Codecs.   (line   15)
* PyUnicode_DecodeUTF8 (C function):     UTF-8 Codecs.       (line    8)
* PyUnicode_DecodeUTF8Stateful (C function): UTF-8 Codecs.   (line   15)
* PyUnicode_EncodeCodePage (C function): MBCS codecs for Windows.
                                                             (line   45)
* PyUnicode_EncodeFSDefault (C function): File System Encoding.
                                                             (line   89)
* PyUnicode_EncodeLocale (C function):   Locale Encoding.    (line   46)
* PyUnicode_EqualToUTF8 (C function):    Methods and Slot Functions.
                                                             (line  153)
* PyUnicode_EqualToUTF8AndSize (C function): Methods and Slot Functions.
                                                             (line  140)
* PyUnicode_Fill (C function):           Creating and accessing Unicode strings.
                                                             (line  335)
* PyUnicode_Find (C function):           Methods and Slot Functions.
                                                             (line   91)
* PyUnicode_FindChar (C function):       Methods and Slot Functions.
                                                             (line  102)
* PyUnicode_Format (C function):         Methods and Slot Functions.
                                                             (line  190)
* PyUnicode_FromEncodedObject (C function): Creating and accessing Unicode strings.
                                                             (line  280)
* PyUnicode_FromFormat (C function):     Creating and accessing Unicode strings.
                                                             (line   63)
* PyUnicode_FromFormatV (C function):    Creating and accessing Unicode strings.
                                                             (line  256)
* PyUnicode_FromKindAndData (C function): Creating and accessing Unicode strings.
                                                             (line   23)
* PyUnicode_FromObject (C function):     Creating and accessing Unicode strings.
                                                             (line  262)
* PyUnicode_FromOrdinal (C function):    Creating and accessing Unicode strings.
                                                             (line  272)
* PyUnicode_FromString (C function):     Creating and accessing Unicode strings.
                                                             (line   57)
* PyUnicode_FromStringAndSize (C function): Creating and accessing Unicode strings.
                                                             (line   40)
* PyUnicode_FromWideChar (C function):   wchar_t Support.    (line    8)
* PyUnicode_FSConverter (C function):    File System Encoding.
                                                             (line   13)
* PyUnicode_FSDecoder (C function):      File System Encoding.
                                                             (line   38)
* PyUnicode_GET_LENGTH (C function):     Tipo Unicode.       (line   74)
* PyUnicode_GetDefaultEncoding (C function): Creating and accessing Unicode strings.
                                                             (line  307)
* PyUnicode_GetLength (C function):      Creating and accessing Unicode strings.
                                                             (line  315)
* PyUnicode_InternFromString (C function): Methods and Slot Functions.
                                                             (line  230)
* PyUnicode_InternInPlace (C function):  Methods and Slot Functions.
                                                             (line  204)
* PyUnicode_IsIdentifier (C function):   Tipo Unicode.       (line  166)
* PyUnicode_Join (C function):           Methods and Slot Functions.
                                                             (line   77)
* PyUnicode_KIND (C function):           Tipo Unicode.       (line  108)
* PyUnicode_MAX_CHAR_VALUE (C function): Tipo Unicode.       (line  156)
* PyUnicode_New (C function):            Creating and accessing Unicode strings.
                                                             (line    9)
* PyUnicode_Partition (C function):      Methods and Slot Functions.
                                                             (line   48)
* PyUnicode_READ (C function):           Tipo Unicode.       (line  138)
* PyUnicode_READ_CHAR (C function):      Tipo Unicode.       (line  147)
* PyUnicode_ReadChar (C function):       Creating and accessing Unicode strings.
                                                             (line  365)
* PyUnicode_READY (C function):          Tipo Unicode.       (line   65)
* PyUnicode_Replace (C function):        Methods and Slot Functions.
                                                             (line  124)
* PyUnicode_RichCompare (C function):    Methods and Slot Functions.
                                                             (line  172)
* PyUnicode_RPartition (C function):     Methods and Slot Functions.
                                                             (line   63)
* PyUnicode_RSplit (C function):         Methods and Slot Functions.
                                                             (line   30)
* PyUnicode_Split (C function):          Methods and Slot Functions.
                                                             (line   17)
* PyUnicode_Splitlines (C function):     Methods and Slot Functions.
                                                             (line   40)
* PyUnicode_Substring (C function):      Creating and accessing Unicode strings.
                                                             (line  377)
* PyUnicode_Tailmatch (C function):      Methods and Slot Functions.
                                                             (line   83)
* PyUnicode_Translate (C function):      Character Map Codecs.
                                                             (line   46)
* PyUnicode_Type (C var):                Tipo Unicode.       (line   41)
* PyUnicode_WRITE (C function):          Tipo Unicode.       (line  125)
* PyUnicode_WriteChar (C function):      Creating and accessing Unicode strings.
                                                             (line  349)
* PyUnicodeDecodeError_Create (C function): Objetos de exceção Unicode.
                                                             (line    9)
* PyUnicodeDecodeError_GetEncoding (C function): Objetos de exceção Unicode.
                                                             (line   17)
* PyUnicodeDecodeError_GetEnd (C function): Objetos de exceção Unicode.
                                                             (line   53)
* PyUnicodeDecodeError_GetObject (C function): Objetos de exceção Unicode.
                                                             (line   24)
* PyUnicodeDecodeError_GetReason (C function): Objetos de exceção Unicode.
                                                             (line   74)
* PyUnicodeDecodeError_GetStart (C function): Objetos de exceção Unicode.
                                                             (line   33)
* PyUnicodeDecodeError_SetEnd (C function): Objetos de exceção Unicode.
                                                             (line   64)
* PyUnicodeDecodeError_SetReason (C function): Objetos de exceção Unicode.
                                                             (line   83)
* PyUnicodeDecodeError_SetStart (C function): Objetos de exceção Unicode.
                                                             (line   43)
* PyUnicodeEncodeError_GetEncoding (C function): Objetos de exceção Unicode.
                                                             (line   17)
* PyUnicodeEncodeError_GetEnd (C function): Objetos de exceção Unicode.
                                                             (line   53)
* PyUnicodeEncodeError_GetObject (C function): Objetos de exceção Unicode.
                                                             (line   24)
* PyUnicodeEncodeError_GetReason (C function): Objetos de exceção Unicode.
                                                             (line   74)
* PyUnicodeEncodeError_GetStart (C function): Objetos de exceção Unicode.
                                                             (line   33)
* PyUnicodeEncodeError_SetEnd (C function): Objetos de exceção Unicode.
                                                             (line   64)
* PyUnicodeEncodeError_SetReason (C function): Objetos de exceção Unicode.
                                                             (line   83)
* PyUnicodeEncodeError_SetStart (C function): Objetos de exceção Unicode.
                                                             (line   43)
* PyUnicodeIter_Type (C var):            Tipo Unicode.       (line   46)
* PyUnicodeObject (C type):              Tipo Unicode.       (line   30)
* PyUnicodeTranslateError_GetEnd (C function): Objetos de exceção Unicode.
                                                             (line   53)
* PyUnicodeTranslateError_GetObject (C function): Objetos de exceção Unicode.
                                                             (line   24)
* PyUnicodeTranslateError_GetReason (C function): Objetos de exceção Unicode.
                                                             (line   74)
* PyUnicodeTranslateError_GetStart (C function): Objetos de exceção Unicode.
                                                             (line   33)
* PyUnicodeTranslateError_SetEnd (C function): Objetos de exceção Unicode.
                                                             (line   64)
* PyUnicodeTranslateError_SetReason (C function): Objetos de exceção Unicode.
                                                             (line   83)
* PyUnicodeTranslateError_SetStart (C function): Objetos de exceção Unicode.
                                                             (line   43)
* PyUnstable:                            API C Instável.     (line    6)
* PyUnstable_AtExit (C function):        Inicializando e encerrando o interpretador.
                                                             (line  216)
* PyUnstable_Code_GetExtra (C function): Informação adicional.
                                                             (line   38)
* PyUnstable_Code_GetFirstFree (C function): Objetos código<3>.
                                                             (line   31)
* PyUnstable_Code_New (C function):      Objetos código<3>.  (line   42)
* PyUnstable_Code_NewWithPosOnlyArgs (C function): Objetos código<3>.
                                                             (line   69)
* PyUnstable_Code_SetExtra (C function): Informação adicional.
                                                             (line   55)
* PyUnstable_Eval_RequestCodeExtraIndex (C function): Informação adicional.
                                                             (line   14)
* PyUnstable_Exc_PrepReraiseStar (C function): Objeto Exceção.
                                                             (line   68)
* PyUnstable_GC_VisitObjects (C function): Querying Garbage Collector State.
                                                             (line    9)
* PyUnstable_InterpreterFrame_GetCode (C function): Internal Frames.
                                                             (line   14)
* PyUnstable_InterpreterFrame_GetLasti (C function): Internal Frames.
                                                             (line   23)
* PyUnstable_InterpreterFrame_GetLine (C function): Internal Frames.
                                                             (line   31)
* PyUnstable_InterpreterState_GetMainModule (C function): Low-level API.
                                                             (line  155)
* PyUnstable_Long_CompactValue (C function): Objetos Inteiros.
                                                             (line  549)
* PyUnstable_Long_IsCompact (C function): Objetos Inteiros.  (line  531)
* PyUnstable_Module_SetGIL (C function): Support functions.  (line  158)
* PyUnstable_Object_ClearWeakRefsNoCallbacks (C function): Objetos referência fraca<2>.
                                                             (line  117)
* PyUnstable_Object_GC_NewWithExtraData (C function): Suporte a Coleta Cíclica de Lixo.
                                                             (line   66)
* PyUnstable_PerfMapState_Fini (C function): Suporte a Mapas do Perf.
                                                             (line   53)
* PyUnstable_PerfMapState_Init (C function): Suporte a Mapas do Perf.
                                                             (line   20)
* PyUnstable_Type_AssignVersionTag (C function): Objetos tipo<2>.
                                                             (line  302)
* PyUnstable_WritePerfMapEntry (C function): Suporte a Mapas do Perf.
                                                             (line   36)
* PyVarObject (C type):                  Macros e tipos de objetos base.
                                                             (line   26)
* PyVarObject_HEAD_INIT (C macro):       Macros e tipos de objetos base.
                                                             (line  135)
* PyVarObject.ob_size (C member):        PyVarObject Slots.  (line    6)
* PyVectorcall_Call (C function):        API de suporte à chamada de vetores.
                                                             (line   31)
* PyVectorcall_Function (C function):    API de suporte à chamada de vetores.
                                                             (line   18)
* PyVectorcall_NARGS (C function):       API de suporte à chamada de vetores.
                                                             (line    6)
* PyWeakref_Check (C function):          Objetos referência fraca<2>.
                                                             (line   12)
* PyWeakref_CheckProxy (C function):     Objetos referência fraca<2>.
                                                             (line   27)
* PyWeakref_CheckRef (C function):       Objetos referência fraca<2>.
                                                             (line   17)
* PyWeakref_CheckRefExact (C function):  Objetos referência fraca<2>.
                                                             (line   22)
* PyWeakref_GET_OBJECT (C function):     Objetos referência fraca<2>.
                                                             (line  102)
* PyWeakref_GetObject (C function):      Objetos referência fraca<2>.
                                                             (line   87)
* PyWeakref_GetRef (C function):         Objetos referência fraca<2>.
                                                             (line   72)
* PyWeakref_NewProxy (C function):       Objetos referência fraca<2>.
                                                             (line   52)
* PyWeakref_NewRef (C function):         Objetos referência fraca<2>.
                                                             (line   32)
* PyWideStringList (C type):             PyWideStringList.   (line    6)
* PyWideStringList_Append (C function):  PyWideStringList.   (line   15)
* PyWideStringList_Insert (C function):  PyWideStringList.   (line   23)
* PyWideStringList.items (C member):     PyWideStringList.   (line   43)
* PyWideStringList.length (C member):    PyWideStringList.   (line   39)
* PyWrapper_New (C function):            Objetos descritores.
                                                             (line   73)
* PyWrapperDescr_Type (C var):           Objetos descritores.
                                                             (line   53)
* PyZip_Type (C var):                    Tipos de iteradores embutidos.
                                                             (line   28)
* PyZipFile (classe em zipfile):         Objetos PyZipFile.  (line    9)
* qiflush() (no módulo curses):          Funções<6>.         (line  398)
* QName (classe em xml.etree.ElementTree): QName Objects.    (line    6)
* qsize() (método asyncio.Queue):        Queue.              (line   80)
* qsize() (método multiprocessing.Queue): Encadeamentos e filas.
                                                             (line  115)
* qsize() (método queue.Queue):          Objetos Queue.      (line    9)
* qsize() (método queue.SimpleQueue):    Objetos SimpleQueue.
                                                             (line    9)
* quantiles() (método statistics.NormalDist): Objetos NormalDist.
                                                             (line  116)
* quantiles() (no módulo statistics):    Detalhes das funções.
                                                             (line  524)
* quantize() (método decimal.Context):   Objetos de contexto.
                                                             (line  501)
* quantize() (método decimal.Decimal):   Objetos de Decimal. (line  485)
* QueryInfoKey() (no módulo winreg):     Funções<13>.        (line  324)
* QueryReflectionKey() (no módulo winreg): Funções<13>.      (line  527)
* QueryValue() (no módulo winreg):       Funções<13>.        (line  354)
* QueryValueEx() (no módulo winreg):     Funções<13>.        (line  374)
* QUESTION (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  198)
* queue (atributo sched.scheduler):      Objetos Scheduler.  (line   74)
* Queue (classe em asyncio):             Queue.              (line    6)
* Queue (classe em multiprocessing):     Encadeamentos e filas.
                                                             (line   96)
* Queue (classe em queue):               queue — A synchronized queue class.
                                                             (line   34)
* Queue() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  200)
* QueueEmpty:                            Exceções<12>.       (line    6)
* QueueFull:                             Exceções<12>.       (line   11)
* QueueHandler (classe em logging.handlers): QueueHandler.   (line   21)
* QueueListener (classe em logging.handlers): QueueListener. (line   25)
* QueueShutDown:                         Exceções<12>.       (line   16)
* quick_ratio() (método difflib.SequenceMatcher): SequenceMatcher Objects.
                                                             (line  204)
* quiet (atributo sys.flags):            sys — Parâmetros e funções específicas do sistema.
                                                             (line  586)
* quit (pdb command):                    Comandos de depuração.
                                                             (line  449)
* quit (variável interna):               Constantes adicionadas pelo módulo site.
                                                             (line   12)
* quit() (método ftplib.FTP):            FTP objects.        (line  360)
* quit() (método poplib.POP3):           Objetos POP3.       (line   83)
* quit() (método smtplib.SMTP):          Objetos SMTP.       (line  341)
* quit() (método tkinter.filedialog.FileDialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line  126)
* quitting (atributo de bdb.Bdb):        bdb — Framework do depurador.
                                                             (line  346)
* QUOTE_ALL (no módulo csv):             Conteúdo do módulo<3>.
                                                             (line  282)
* quote_from_bytes() (no módulo urllib.parse): URL Quoting.  (line   53)
* QUOTE_MINIMAL (no módulo csv):         Conteúdo do módulo<3>.
                                                             (line  287)
* QUOTE_NONE (no módulo csv):            Conteúdo do módulo<3>.
                                                             (line  308)
* QUOTE_NONNUMERIC (no módulo csv):      Conteúdo do módulo<3>.
                                                             (line  294)
* QUOTE_NOTNULL (no módulo csv):         Conteúdo do módulo<3>.
                                                             (line  321)
* quote_plus() (no módulo urllib.parse): URL Quoting.        (line   42)
* QUOTE_STRINGS (no módulo csv):         Conteúdo do módulo<3>.
                                                             (line  334)
* quote() (no módulo email.utils):       email utils Utilitários diversos.
                                                             (line   46)
* quote() (no módulo shlex):             shlex — Simple lexical analysis.
                                                             (line   43)
* quote() (no módulo urllib.parse):      URL Quoting.        (line   13)
* quoteattr() (no módulo xml.sax.saxutils): xml sax saxutils — Utilitários de SAX.
                                                             (line   39)
* quotechar (atributo csv.Dialect):      Dialetos e parâmetros de formatação.
                                                             (line   65)
* quotes (atributo shlex.shlex):         shlex Objects.      (line  115)
* quoting (atributo csv.Dialect):        Dialetos e parâmetros de formatação.
                                                             (line   76)
* R_OK (no módulo os):                   Arquivos e diretórios.
                                                             (line  112)
* r';literal de string bruta:            Literais de string e bytes.
                                                             (line   51)
* r";literal de string bruta:            Literais de string e bytes.
                                                             (line   51)
* radians() (no módulo math):            Conversão angular.  (line   10)
* radians() (no módulo turtle):          Configurações de medida.
                                                             (line   29)
* radix (atributo sys.float_info):       sys — Parâmetros e funções específicas do sistema.
                                                             (line  702)
* radix() (método decimal.Context):      Objetos de contexto.
                                                             (line  506)
* radix() (método decimal.Decimal):      Objetos de Decimal. (line  514)
* RADIXCHAR (no módulo locale):          locale — Serviços de internacionalização.
                                                             (line  281)
* Raise (classe em ast):                 Instruções.         (line  112)
* RAISE (monitoring event):              Eventos.            (line   71)
* raise_on_defect (atributo email.policy.Policy): email policy Policy Objects.
                                                             (line  181)
* raise_signal() (no módulo signal):     Conteúdo do módulo<5>.
                                                             (line  357)
* RAISE_VARARGS (opcode):                Instruções em bytecode do Python.
                                                             (line 1037)
* raiseExceptions (no módulo logging):   Module-Level Attributes.
                                                             (line   19)
* RAND_add() (no módulo ssl):            Random generation.  (line   30)
* RAND_bytes() (no módulo ssl):          Random generation.  (line    6)
* RAND_status() (no módulo ssl):         Random generation.  (line   23)
* randbelow() (no módulo secrets):       Números aleatórios. (line   20)
* randbits() (no módulo secrets):        Números aleatórios. (line   24)
* randbytes() (método random.Random):    Gerador alternativo.
                                                             (line   52)
* randbytes() (no módulo random):        Funções para bytes. (line    6)
* randint() (no módulo random):          Funções para inteiros.
                                                             (line   34)
* Random (classe em random):             Gerador alternativo.
                                                             (line    6)
* random opção de linha de comando; -c:  Uso na linha de comando<2>.
                                                             (line   18)
* random opção de linha de comando; -choice: Uso na linha de comando<2>.
                                                             (line   18)
* random opção de linha de comando; -f:  Uso na linha de comando<2>.
                                                             (line   29)
* random opção de linha de comando; -float: Uso na linha de comando<2>.
                                                             (line   29)
* random opção de linha de comando; -h:  Uso na linha de comando<2>.
                                                             (line   14)
* random opção de linha de comando; -help: Uso na linha de comando<2>.
                                                             (line   14)
* random opção de linha de comando; -i:  Uso na linha de comando<2>.
                                                             (line   23)
* random opção de linha de comando; -integer: Uso na linha de comando<2>.
                                                             (line   23)
* random() (método random.Random):       Gerador alternativo.
                                                             (line   37)
* random() (no módulo random):           Distribuições com valor real.
                                                             (line   12)
* randrange() (no módulo random):        Funções para inteiros.
                                                             (line    6)
* range (classe interna):                Intervalos.         (line   10)
* RARROW (no módulo token):              token — Constantes usadas com árvores de análises do Python.
                                                             (line  312)
* ratio() (método difflib.SequenceMatcher): SequenceMatcher Objects.
                                                             (line  180)
* Rational (classe em numbers):          A torre numérica.   (line   41)
* raw (atributo io.BufferedIOBase):      I/O Base Classes.   (line  252)
* raw_data_manager (no módulo email.contentmanager): Content Manager Instances.
                                                             (line   11)
* raw_decode() (método json.JSONDecoder): Codificadores e decodificadores.
                                                             (line   97)
* raw_input() (método code.InteractiveConsole): Objetos de console Interativo.
                                                             (line   47)
* raw() (método pickle.PickleBuffer):    Interface do módulo.
                                                             (line  340)
* raw() (no módulo curses):              Funções<6>.         (line  405)
* RawArray() (no módulo multiprocessing.sharedctypes): O módulo multiprocessing sharedctypes.
                                                             (line   17)
* RawConfigParser (classe em configparser): Objetos RawConfigParser.
                                                             (line    6)
* RawDescriptionHelpFormatter (classe em argparse): formatter_class.
                                                             (line   10)
* RawIOBase (classe em io):              I/O Base Classes.   (line  170)
* RawPen (classe em turtle):             Classes Públicas.   (line    6)
* RawTextHelpFormatter (classe em argparse): formatter_class.
                                                             (line   10)
* RawTurtle (classe em turtle):          Classes Públicas.   (line    6)
* RawValue() (no módulo multiprocessing.sharedctypes): O módulo multiprocessing sharedctypes.
                                                             (line   34)
* RBRACE (no módulo token):              token — Constantes usadas com árvores de análises do Python.
                                                             (line  237)
* re (atributo re.Match):                Objetos correspondência.
                                                             (line  210)
* READ (atributo inspect.BufferFlags):   Buffer flags.       (line   49)
* read_binary() (no módulo importlib.resources): API funcional.
                                                             (line   79)
* read_byte() (método mmap.mmap):        mmap — Suporte a arquivos mapeados na memória.
                                                             (line  259)
* read_bytes() (método importlib.abc.Traversable): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  572)
* read_bytes() (método importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  157)
* read_bytes() (método pathlib.Path):    Lendo e escrevendo arquivos.
                                                             (line   36)
* read_bytes() (método zipfile.Path):    Objetos Path.       (line  118)
* read_dict() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  220)
* read_environ() (no módulo wsgiref.handlers): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  313)
* read_events() (método xml.etree.ElementTree.XMLPullParser): XMLPullParser Objects.
                                                             (line   48)
* read_file() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  197)
* read_history_file() (no módulo readline): Arquivo de histórico.
                                                             (line    8)
* read_init_file() (no módulo readline): Arquivo init.       (line   14)
* read_mime_types() (no módulo mimetypes): mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line  119)
* READ_RESTRICTED (macro C):             Member flags.       (line   31)
* read_string() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  209)
* read_text() (método importlib.abc.Traversable): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  576)
* read_text() (método importlib.resources.abc.Traversable): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  161)
* read_text() (método pathlib.Path):     Lendo e escrevendo arquivos.
                                                             (line   18)
* read_text() (método zipfile.Path):     Objetos Path.       (line  105)
* read_text() (no módulo importlib.resources): API funcional.
                                                             (line   92)
* read_token() (método shlex.shlex):     shlex Objects.      (line   20)
* read_windows_registry() (método mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line   98)
* read() (método asyncio.StreamReader):  StreamReader.       (line   20)
* read() (método codecs.StreamReader):   StreamReader Objects.
                                                             (line   34)
* read() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  157)
* read() (método http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   13)
* read() (método imaplib.IMAP4):         Objetos IMAP4.      (line  202)
* read() (método io.BufferedIOBase):     I/O Base Classes.   (line  273)
* read() (método io.BufferedReader):     Buffered Streams.   (line   82)
* read() (método io.RawIOBase):          I/O Base Classes.   (line  184)
* read() (método io.TextIOBase):         E/S de texto<2>.    (line   52)
* read() (método mimetypes.MimeTypes):   Objetos MimeTypes.  (line   78)
* read() (método mmap.mmap):             mmap — Suporte a arquivos mapeados na memória.
                                                             (line  249)
* read() (método sqlite3.Blob):          Blob objects.       (line   45)
* read() (método ssl.MemoryBIO):         Підтримка BIO пам’яті<2>.
                                                             (line  148)
* read() (método ssl.SSLSocket):         SSL Sockets.        (line   76)
* read() (método urllib.robotparser.RobotFileParser): urllib robotparser — Analisador sintático de robots txt.
                                                             (line   25)
* read() (método zipfile.ZipFile):       Objetos ZipFile.    (line  256)
* read() (no módulo os):                 Operações dos descritores de arquivos.
                                                             (line  755)
* read1() (método bz2.BZ2File):          Des compressão de arquivos.
                                                             (line  115)
* read1() (método io.BufferedIOBase):    I/O Base Classes.   (line  297)
* read1() (método io.BufferedReader):    Buffered Streams.   (line   87)
* read1() (método io.BytesIO):           Buffered Streams.   (line   43)
* READABLE (no módulo _tkinter):         Tratadores de arquivos.
                                                             (line   43)
* readable() (método bz2.BZ2File):       Des compressão de arquivos.
                                                             (line   97)
* readable() (método io.IOBase):         I/O Base Classes.   (line   78)
* readall() (método io.RawIOBase):       I/O Base Classes.   (line  199)
* readbuffer_encode() (no módulo codecs): codecs — Codec registry and base classes.
                                                             (line  258)
* reader() (no módulo csv):              Conteúdo do módulo<3>.
                                                             (line    8)
* ReadError:                             tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  215)
* readexactly() (método asyncio.StreamReader): StreamReader. (line   46)
* readfp() (método mimetypes.MimeTypes): Objetos MimeTypes.  (line   88)
* readframes() (método wave.Wave_read):  Objetos Wave_read.  (line   52)
* readinto() (método bz2.BZ2File):       Des compressão de arquivos.
                                                             (line  126)
* readinto() (método http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   17)
* readinto() (método io.BufferedIOBase): I/O Base Classes.   (line  309)
* readinto() (método io.RawIOBase):      I/O Base Classes.   (line  204)
* readinto1() (método io.BufferedIOBase): I/O Base Classes.  (line  322)
* readinto1() (método io.BytesIO):       Buffered Streams.   (line   49)
* readline() (método asyncio.StreamReader): StreamReader.    (line   35)
* readline() (método codecs.StreamReader): StreamReader Objects.
                                                             (line   60)
* readline() (método imaplib.IMAP4):     Objetos IMAP4.      (line  207)
* readline() (método io.IOBase):         I/O Base Classes.   (line   83)
* readline() (método io.TextIOBase):     E/S de texto<2>.    (line   58)
* readline() (método mmap.mmap):         mmap — Suporte a arquivos mapeados na memória.
                                                             (line  264)
* readlines() (método codecs.StreamReader): StreamReader Objects.
                                                             (line   71)
* readlines() (método io.IOBase):        I/O Base Classes.   (line   92)
* readlink() (método pathlib.Path):      Expandindo e resolvendo caminhos.
                                                             (line   82)
* readlink() (no módulo os):             Arquivos e diretórios.
                                                             (line  706)
* readmodule_ex() (no módulo pyclbr):    pyclbr — Suporte a navegador de módulos do Python.
                                                             (line   33)
* readmodule() (no módulo pyclbr):       pyclbr — Suporte a navegador de módulos do Python.
                                                             (line   19)
* readonly (atributo memoryview):        Memory Views.       (line  428)
* READONLY (macro C):                    Member flags.       (line   36)
* ReadOnly (no módulo typing):           Formas especiais.   (line  275)
* ReadTransport (classe em asyncio):     Transports Hierarchy.
                                                             (line   20)
* readuntil() (método asyncio.StreamReader): StreamReader.   (line   55)
* readv() (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  895)
* ready() (método multiprocessing.pool.AsyncResult): Process Pools.
                                                             (line  216)
* real (atributo numbers.Complex):       A torre numérica.   (line   15)
* Real (classe em numbers):              A torre numérica.   (line   28)
* real_max_memuse (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  159)
* real_quick_ratio() (método difflib.SequenceMatcher): SequenceMatcher Objects.
                                                             (line  209)
* realloc (C function):                  Visão Geral<4>.     (line   36)
* realpath() (no módulo os.path):        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  409)
* REALTIME_PRIORITY_CLASS (no módulo subprocess): Constantes do Windows.
                                                             (line  103)
* reap_children() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  600)
* reap_threads() (no módulo test.support.threading_helper): test support threading_helper — Utilities for threading tests.
                                                             (line   17)
* reason (atributo http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   65)
* reason (atributo ssl.SSLError):        Exceções<16>.       (line   27)
* reason (atributo UnicodeError):        Exceções concretas. (line  458)
* reason (atributo urllib.error.HTTPError): urllib error — Classes de exceção levantadas por urllib request.
                                                             (line   52)
* reason (atributo urllib.error.URLError): urllib error — Classes de exceção levantadas por urllib request.
                                                             (line   23)
* reattach() (método tkinter.ttk.Treeview): ttk Treeview.    (line  237)
* recent() (método imaplib.IMAP4):       Objetos IMAP4.      (line  212)
* recipients (atributo smtplib.SMTPRecipientsRefused): smtplib — Cliente de protocolo SMTP.
                                                             (line  165)
* reconfigure() (método io.TextIOWrapper): E/S de texto<2>.  (line  182)
* record_original_stdout() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  322)
* RECORDS (atributo inspect.BufferFlags): Buffer flags.      (line   41)
* records (atributo unittest.TestCase):  Casos de teste.     (line  451)
* RECORDS_RO (atributo inspect.BufferFlags): Buffer flags.   (line   43)
* rect() (no módulo cmath):              Conversões de e para coordenadas polares.
                                                             (line   45)
* rectangle() (no módulo curses.textpad): curses textpad — Text input widget for curses programs.
                                                             (line   15)
* RecursionError:                        Exceções concretas. (line  250)
* recursive_repr() (no módulo reprlib):  reprlib — Implementação alternativa à repr.
                                                             (line   60)
* recv_bytes_into() (método multiprocessing.connection.Connection): Objetos de conexão.
                                                             (line   84)
* recv_bytes() (método multiprocessing.connection.Connection): Objetos de conexão.
                                                             (line   69)
* recv_fds() (no módulo socket):         Outras funções<2>.  (line  476)
* recv_into() (método socket.socket):    Socket Objects.     (line  386)
* recv() (método multiprocessing.connection.Connection): Objetos de conexão.
                                                             (line   25)
* recv() (método socket.socket):         Socket Objects.     (line  233)
* recvfrom_into() (método socket.socket): Socket Objects.    (line  376)
* recvfrom() (método socket.socket):     Socket Objects.     (line  247)
* recvmsg_into() (método socket.socket): Socket Objects.     (line  337)
* recvmsg() (método socket.socket):      Socket Objects.     (line  265)
* redirect_request() (método urllib.request.HTTPRedirectHandler): HTTPRedirectHandler Objects.
                                                             (line   15)
* redirect_stderr() (no módulo contextlib): Utilitários.     (line  360)
* redirect_stdout() (no módulo contextlib): Utilitários.     (line  320)
* redisplay() (no módulo readline):      Buffer de linha.    (line   19)
* redrawln() (método curses.window):     Window Objects.     (line  464)
* redrawwin() (método curses.window):    Window Objects.     (line  470)
* reduce() (no módulo functools):        functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line  403)
* reducer_override() (método pickle.Pickler): Interface do módulo.
                                                             (line  214)
* reentrant:                             Glossário.          (line 1540)
* ref (classe em weakref):               weakref — Referências fracas.
                                                             (line   95)
* refcount_test() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  559)
* ReferenceError:                        Exceções concretas. (line  259)
* ReferenceType (no módulo weakref):     weakref — Referências fracas.
                                                             (line  344)
* referência emprestada:                 Glossário.          (line  190)
* referência forte:                      Glossário.          (line 1665)
* refold_source (atributo email.policy.EmailPolicy): email policy Policy Objects.
                                                             (line  388)
* refresh() (método curses.window):      Window Objects.     (line  475)
* REG_BINARY (no módulo winreg):         Tipos de valores.   (line    8)
* REG_DWORD (no módulo winreg):          Tipos de valores.   (line   12)
* REG_DWORD_BIG_ENDIAN (no módulo winreg): Tipos de valores. (line   21)
* REG_DWORD_LITTLE_ENDIAN (no módulo winreg): Tipos de valores.
                                                             (line   16)
* REG_EXPAND_SZ (no módulo winreg):      Tipos de valores.   (line   25)
* REG_FULL_RESOURCE_DESCRIPTOR (no módulo winreg): Tipos de valores.
                                                             (line   61)
* REG_LINK (no módulo winreg):           Tipos de valores.   (line   30)
* REG_MULTI_SZ (no módulo winreg):       Tipos de valores.   (line   34)
* REG_NONE (no módulo winreg):           Tipos de valores.   (line   40)
* REG_QWORD (no módulo winreg):          Tipos de valores.   (line   44)
* REG_QWORD_LITTLE_ENDIAN (no módulo winreg): Tipos de valores.
                                                             (line   50)
* REG_RESOURCE_LIST (no módulo winreg):  Tipos de valores.   (line   57)
* REG_RESOURCE_REQUIREMENTS_LIST (no módulo winreg): Tipos de valores.
                                                             (line   65)
* REG_SZ (no módulo winreg):             Tipos de valores.   (line   69)
* RegexFlag (classe em re):              Sinalizadores.      (line    9)
* register_adapter() (no módulo sqlite3): Funções do módulo. (line  138)
* register_archive_format() (no módulo shutil): Operações de arquivamento.
                                                             (line   94)
* register_at_fork() (no módulo os):     Gerenciamento de processo.
                                                             (line  581)
* register_callback() (no módulo sys.monitoring): Registro de funções de retorno de chamada.
                                                             (line    8)
* register_converter() (no módulo sqlite3): Funções do módulo.
                                                             (line  145)
* register_defect() (método email.policy.Policy): email policy Policy Objects.
                                                             (line  246)
* register_dialect() (no módulo csv):    Conteúdo do módulo<3>.
                                                             (line   75)
* register_error() (no módulo codecs):   Error Handlers.     (line  101)
* register_function() (método xmlrpc.server.CGIXMLRPCRequestHandler): CGIXMLRPCRequestHandler.
                                                             (line    9)
* register_function() (método xmlrpc.server.SimpleXMLRPCServer): Objetos de SimpleXMLRPCServer.
                                                             (line   10)
* register_instance() (método xmlrpc.server.CGIXMLRPCRequestHandler): CGIXMLRPCRequestHandler.
                                                             (line   26)
* register_instance() (método xmlrpc.server.SimpleXMLRPCServer): Objetos de SimpleXMLRPCServer.
                                                             (line   27)
* register_introspection_functions() (método xmlrpc.server.CGIXMLRPCRequestHandler): CGIXMLRPCRequestHandler.
                                                             (line   41)
* register_introspection_functions() (método xmlrpc.server.SimpleXMLRPCServer): Objetos de SimpleXMLRPCServer.
                                                             (line   55)
* register_multicall_functions() (método xmlrpc.server.CGIXMLRPCRequestHandler): CGIXMLRPCRequestHandler.
                                                             (line   46)
* register_multicall_functions() (método xmlrpc.server.SimpleXMLRPCServer): Objetos de SimpleXMLRPCServer.
                                                             (line   60)
* register_namespace() (no módulo xml.etree.ElementTree): Funções<9>.
                                                             (line  199)
* register_optionflag() (no módulo doctest): Flags opcionais.
                                                             (line  154)
* register_shape() (no módulo turtle):   Configurações e métodos especiais.
                                                             (line   73)
* register_unpack_format() (no módulo shutil): Operações de arquivamento.
                                                             (line  166)
* register() (método abc.ABCMeta):       abc — Classes base abstratas.
                                                             (line   71)
* register() (método argparse.ArgumentParser): Registrando ações e tipos personalizados.
                                                             (line    6)
* register() (método functools.singledispatch): functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line  450)
* register() (método multiprocessing.managers.BaseManager): Gerenciadores.
                                                             (line   94)
* register() (método select.devpoll):    /dev/poll Polling Objects.
                                                             (line   30)
* register() (método select.epoll):      Edge and Level Trigger Polling epoll Objects.
                                                             (line   81)
* register() (método select.poll):       Polling Objects.    (line   15)
* register() (método selectors.BaseSelector): Classes<4>.    (line   65)
* register() (no módulo atexit):         atexit — Manipuladores de saída.
                                                             (line   27)
* register() (no módulo codecs):         codecs — Codec registry and base classes.
                                                             (line  159)
* register() (no módulo faulthandler):   Dumping the traceback on a user signal.
                                                             (line    6)
* register() (no módulo webbrowser):     Interface de linha de comando<6>.
                                                             (line   77)
* registerDOMImplementation() (no módulo xml.dom): Conteúdo do módulo<6>.
                                                             (line    8)
* registerResult() (no módulo unittest): Tratamento de sinal.
                                                             (line   35)
* REGTYPE (no módulo tarfile):           tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  294)
* relativa;import:                       A instrução import. (line  101)
* relativa;URL:                          urllib parse — Analisa URLs para componentes.
                                                             (line    8)
* relative_to() (método pathlib.PurePath): Métodos e propriedades.
                                                             (line  315)
* release() (método _thread.lock):       _thread— API de segmentação de baixo nível.
                                                             (line  177)
* release() (método asyncio.Condition):  Condição.           (line   78)
* release() (método asyncio.Lock):       Lock.               (line   49)
* release() (método asyncio.Semaphore):  Semaphore.          (line   54)
* release() (método logging.Handler):    Objetos Handler.    (line   31)
* release() (método memoryview):         Memory Views.       (line  246)
* release() (método multiprocessing.Lock): Primitivas de sincronização.
                                                             (line  111)
* release() (método multiprocessing.RLock): Primitivas de sincronização.
                                                             (line  172)
* release() (método pickle.PickleBuffer): Interface do módulo.
                                                             (line  348)
* release() (método threading.Condition): Condition objects. (line   91)
* release() (método threading.Lock):     Lock objects.       (line   73)
* release() (método threading.RLock):    RLock objects.      (line   94)
* release() (método threading.Semaphore): Semaphore objects. (line   63)
* release() (no módulo platform):        Multiplataforma.    (line  124)
* releasebufferproc (C type):            Slot Type typedefs. (line  102)
* reload() (no módulo importlib):        Funções<12>.        (line   57)
* relpath() (no módulo os.path):         os path — Manipulações comuns de nomes de caminhos.
                                                             (line  468)
* remainder_near() (método decimal.Context): Objetos de contexto.
                                                             (line  517)
* remainder_near() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  520)
* remainder() (método decimal.Context):  Objetos de contexto.
                                                             (line  510)
* remainder() (no módulo math):          Arimética de ponto flutuante.
                                                             (line   68)
* RemoteDisconnected:                    http client — HTTP protocol client.
                                                             (line  188)
* remove_child_handler() (método asyncio.AbstractChildWatcher): Monitores de processos.
                                                             (line   56)
* remove_done_callback() (método asyncio.Future): Objeto Future.
                                                             (line  108)
* remove_done_callback() (método asyncio.Task): Objeto Task. (line  116)
* remove_flag() (método mailbox.Maildir): Maildir objects.   (line  142)
* remove_flag() (método mailbox.MaildirMessage): MaildirMessage objects.
                                                             (line   84)
* remove_flag() (método mailbox.mboxMessage): mboxMessage objects.
                                                             (line   85)
* remove_flag() (método mailbox.MMDFMessage): MMDFMessage objects.
                                                             (line   84)
* remove_folder() (método mailbox.Maildir): Maildir objects. (line   80)
* remove_folder() (método mailbox.MH):   MH objects.         (line   50)
* remove_header() (método urllib.request.Request): Objeto Request.
                                                             (line  100)
* remove_history_item() (no módulo readline): Lista de histórico.
                                                             (line   26)
* remove_label() (método mailbox.BabylMessage): BabylMessage objects.
                                                             (line   59)
* remove_option() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  323)
* remove_option() (método optparse.OptionParser): Consultando e manipulando seu analisador sintático de opções.
                                                             (line   49)
* remove_reader() (método asyncio.loop): Observando descritores de arquivo.
                                                             (line   15)
* remove_section() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  330)
* remove_sequence() (método mailbox.MHMessage): MHMessage objects.
                                                             (line   46)
* remove_signal_handler() (método asyncio.loop): Sinais Unix.
                                                             (line   27)
* remove_writer() (método asyncio.loop): Observando descritores de arquivo.
                                                             (line   32)
* remove() (método array.array):         array— Vetores eficientes de valores numéricos.
                                                             (line  225)
* remove() (método collections.deque):   Objetos deque.      (line  104)
* remove() (método mailbox.Mailbox):     Objetos Mailbox.    (line   77)
* remove() (método mailbox.MH):          MH objects.         (line   79)
* remove() (método sequence):            Tipos sequências mutáveis.
                                                             (line  109)
* remove() (método set):                 Tipo conjuntos — set frozenset.
                                                             (line  213)
* remove() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line  171)
* remove() (no módulo os):               Arquivos e diretórios.
                                                             (line  744)
* removeAttribute() (método xml.dom.Element): Element Objects<2>.
                                                             (line   52)
* removeAttributeNode() (método xml.dom.Element): Element Objects<2>.
                                                             (line   57)
* removeAttributeNS() (método xml.dom.Element): Element Objects<2>.
                                                             (line   62)
* removeChild() (método xml.dom.Node):   Objetos Node.       (line  128)
* removedirs() (no módulo os):           Arquivos e diretórios.
                                                             (line  769)
* removeFilter() (método logging.Handler): Objetos Handler.  (line   57)
* removeFilter() (método logging.Logger): Objetos Logger.    (line  339)
* removeHandler() (método logging.Logger): Objetos Logger.   (line  356)
* removeHandler() (no módulo unittest):  Tratamento de sinal.
                                                             (line   52)
* removeprefix() (método bytearray):     Operações com Bytes e Bytearray.
                                                             (line   53)
* removeprefix() (método bytes):         Operações com Bytes e Bytearray.
                                                             (line   53)
* removeprefix() (método str):           String Methods<2>.  (line  534)
* removeResult() (no módulo unittest):   Tratamento de sinal.
                                                             (line   46)
* removesuffix() (método bytearray):     Operações com Bytes e Bytearray.
                                                             (line   73)
* removesuffix() (método bytes):         Operações com Bytes e Bytearray.
                                                             (line   73)
* removesuffix() (método str):           String Methods<2>.  (line  549)
* removexattr() (no módulo os):          Atributos estendidos do Linux.
                                                             (line   43)
* rename() (método ftplib.FTP):          FTP objects.        (line  325)
* rename() (método imaplib.IMAP4):       Objetos IMAP4.      (line  217)
* rename() (método pathlib.Path):        Renomeando e excluindo.
                                                             (line    6)
* rename() (no módulo os):               Arquivos e diretórios.
                                                             (line  787)
* renames() (no módulo os):              Arquivos e diretórios.
                                                             (line  825)
* reopenIfNeeded() (método logging.handlers.WatchedFileHandler): WatchedFileHandler.
                                                             (line   45)
* reorganize() (método dbm.gnu.gdbm):    dbm gnu — Gerenciador de banco de dados do GNU.
                                                             (line  119)
* repeat() (método timeit.Timer):        Interface em Python.
                                                             (line  117)
* repeat() (no módulo itertools):        Funções do intertools.
                                                             (line  536)
* repeat() (no módulo timeit):           Interface em Python.
                                                             (line   20)
* repetição;operação:                    Operações comuns de sequências.
                                                             (line   20)
* REPL:                                  Glossário.          (line 1560)
* replace_errors() (no módulo codecs):   Error Handlers.     (line  154)
* replace_header() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  301)
* replace_header() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  411)
* replace_history_item() (no módulo readline): Lista de histórico.
                                                             (line   32)
* replace_whitespace (atributo textwrap.TextWrapper): textwrap — Quebra automática e preenchimento de texto.
                                                             (line  190)
* replace;error handler's name:          Error Handlers.     (line   15)
* replace() (método bytearray):          Operações com Bytes e Bytearray.
                                                             (line  205)
* replace() (método bytes):              Operações com Bytes e Bytearray.
                                                             (line  205)
* replace() (método codeobject):         Métodos de objetos código.
                                                             (line   90)
* replace() (método curses.panel.Panel): Objetos painel.     (line   39)
* replace() (método datetime.date):      Objetos date.       (line  194)
* replace() (método datetime.datetime):  Objetos datetime.   (line  478)
* replace() (método datetime.time):      Objetos time.       (line  155)
* replace() (método inspect.Parameter):  Introspecting callables with the Signature object.
                                                             (line  302)
* replace() (método inspect.Signature):  Introspecting callables with the Signature object.
                                                             (line  137)
* replace() (método pathlib.Path):       Renomeando e excluindo.
                                                             (line   34)
* replace() (método str):                String Methods<2>.  (line  564)
* replace() (método tarfile.TarInfo):    Objetos TarInfo.    (line  166)
* replace() (no módulo copy):            copy — Operações de cópia profunda e cópia rasa.
                                                             (line   26)
* replace() (no módulo dataclasses):     Conteúdo do módulo<8>.
                                                             (line  446)
* replace() (no módulo os):              Arquivos e diretórios.
                                                             (line  844)
* replaceChild() (método xml.dom.Node):  Objetos Node.       (line  135)
* ReplacePackage() (no módulo modulefinder): modulefinder — Procura módulos usados por um script.
                                                             (line   21)
* REPORT_CDIFF (no módulo doctest):      Flags opcionais.    (line  113)
* REPORT_ERRMODE (no módulo msvcrt):     Outras funções<4>.  (line   35)
* report_failure() (método doctest.DocTestRunner): DocTestRunner objects.
                                                             (line   76)
* report_full_closure() (método filecmp.dircmp): A classe dircmp.
                                                             (line   33)
* REPORT_NDIFF (no módulo doctest):      Flags opcionais.    (line  118)
* REPORT_ONLY_FIRST_FAILURE (no módulo doctest): Flags opcionais.
                                                             (line  127)
* report_partial_closure() (método filecmp.dircmp): A classe dircmp.
                                                             (line   28)
* report_start() (método doctest.DocTestRunner): DocTestRunner objects.
                                                             (line   54)
* report_success() (método doctest.DocTestRunner): DocTestRunner objects.
                                                             (line   65)
* REPORT_UDIFF (no módulo doctest):      Flags opcionais.    (line  108)
* report_unexpected_exception() (método doctest.DocTestRunner): DocTestRunner objects.
                                                             (line   87)
* report() (método filecmp.dircmp):      A classe dircmp.    (line   23)
* report() (método modulefinder.ModuleFinder): modulefinder — Procura módulos usados por um script.
                                                             (line   39)
* REPORTING_FLAGS (no módulo doctest):   Flags opcionais.    (line  146)
* Repr (classe em reprlib):              reprlib — Implementação alternativa à repr.
                                                             (line   16)
* repr() (função embutida);__repr__() (método de objeto): Personalização básica.
                                                             (line  122)
* repr() (método reprlib.Repr):          Objetos Repr.       (line  110)
* repr() (no módulo reprlib):            reprlib — Implementação alternativa à repr.
                                                             (line   50)
* repr1() (método reprlib.Repr):         Objetos Repr.       (line  115)
* ReprEnum (classe em enum):             Tipos de Dados<2>.  (line  601)
* reprfunc (C type):                     Slot Type typedefs. (line   39)
* request (atributo socketserver.BaseRequestHandler): Objetos manipulador de requisições.
                                                             (line   43)
* Request (classe em urllib.request):    urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  190)
* request_queue_size (atributo socketserver.BaseServer): Objetos Server<2>.
                                                             (line  107)
* request_rate() (método urllib.robotparser.RobotFileParser): urllib robotparser — Analisador sintático de robots txt.
                                                             (line   62)
* request_uri() (no módulo wsgiref.util): wsgiref util – Utilidades do ambiente WSGI.
                                                             (line   27)
* request_version (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  104)
* request() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line    8)
* RequestHandlerClass (atributo socketserver.BaseServer): Objetos Server<2>.
                                                             (line   78)
* requestline (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line   86)
* Required (no módulo typing):           Formas especiais.   (line  256)
* requires_bz2() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  523)
* requires_docstrings() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  535)
* requires_freebsd_version() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  491)
* requires_gil_enabled() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  506)
* requires_gzip() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  519)
* requires_IEEE_754() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  511)
* requires_limited_api() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  539)
* requires_linux_version() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  496)
* requires_lzma() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  527)
* requires_mac_version() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  501)
* requires_resource() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  531)
* requires_zlib() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  515)
* requires() (no módulo importlib.metadata): Requisitos de distribuição.
                                                             (line    6)
* requires() (no módulo test.support):   test support — Utilitários para o conjunto de teste do Python.
                                                             (line  273)
* RERAISE (monitoring event):            Eventos.            (line   76)
* RERAISE (opcode):                      Instruções em bytecode do Python.
                                                             (line  457)
* reschedule() (método asyncio.Timeout): Tempo limite.       (line   68)
* reserved (atributo zipfile.ZipInfo):   Objetos ZipInfo.    (line  132)
* RESERVED_FUTURE (no módulo uuid):      uuid — Objetos UUID conforme RFC 4122.
                                                             (line  246)
* RESERVED_MICROSOFT (no módulo uuid):   uuid — Objetos UUID conforme RFC 4122.
                                                             (line  242)
* RESERVED_NCS (no módulo uuid):         uuid — Objetos UUID conforme RFC 4122.
                                                             (line  234)
* reset_mock() (método unittest.mock.AsyncMock): A classe Mock.
                                                             (line  899)
* reset_mock() (método unittest.mock.Mock): A classe Mock.   (line  203)
* reset_peak() (no módulo tracemalloc):  Funções<11>.        (line   38)
* reset_prog_mode() (no módulo curses):  Funções<6>.         (line  411)
* reset_shell_mode() (no módulo curses): Funções<6>.         (line  416)
* reset_tzpath() (no módulo zoneinfo):   Funções<3>.         (line   27)
* reset() (método asyncio.Barrier):      Barrier.            (line   78)
* reset() (método bdb.Bdb):              bdb — Framework do depurador.
                                                             (line  163)
* reset() (método codecs.IncrementalDecoder): IncrementalDecoder Objects.
                                                             (line   40)
* reset() (método codecs.IncrementalEncoder): IncrementalEncoder Objects.
                                                             (line   35)
* reset() (método codecs.StreamReader):  StreamReader Objects.
                                                             (line   83)
* reset() (método codecs.StreamWriter):  StreamWriter Objects.
                                                             (line   42)
* reset() (método contextvars.ContextVar): Variáveis de contexto.
                                                             (line   60)
* reset() (método html.parser.HTMLParser): Métodos HTMLParser.
                                                             (line   25)
* reset() (método threading.Barrier):    Barrier objects.    (line   71)
* reset() (método xml.dom.pulldom.DOMEventStream): Objetos DOMEventStream.
                                                             (line   37)
* reset() (método xml.sax.xmlreader.IncrementalParser): IncrementalParser Objects.
                                                             (line   19)
* reset() (no módulo turtle):            Mais sobre o Controle do Desenho.
                                                             (line    6)
* resetbuffer() (método code.InteractiveConsole): Objetos de console Interativo.
                                                             (line   43)
* resetscreen() (no módulo turtle):      Controle da Janela. (line   86)
* resetty() (no módulo curses):          Funções<6>.         (line  421)
* resetwarnings() (no módulo warnings):  Funções disponíveis.
                                                             (line  133)
* resize_term() (no módulo curses):      Funções<6>.         (line  426)
* resize() (método curses.window):       Window Objects.     (line  494)
* resize() (método mmap.mmap):           mmap — Suporte a arquivos mapeados na memória.
                                                             (line  270)
* resize() (no módulo ctypes):           Funções utilitárias.
                                                             (line  195)
* resizemode() (no módulo turtle):       Aparência.          (line   26)
* resizeterm() (no módulo curses):       Funções<6>.         (line  436)
* resolution (atributo datetime.date):   Objetos date.       (line  109)
* resolution (atributo datetime.datetime): Objetos datetime. (line  308)
* resolution (atributo datetime.time):   Objetos time.       (line   43)
* resolution (atributo datetime.timedelta): Objetos timedelta.
                                                             (line  101)
* resolve_bases() (no módulo types):     Criação de tipos dinâmicos.
                                                             (line   59)
* resolve_name() (no módulo importlib.util): importlib util – Utility code for importers.
                                                             (line   82)
* resolve_name() (no módulo pkgutil):    pkgutil — Utilitário de extensão de pacote.
                                                             (line  219)
* resolve() (método pathlib.Path):       Expandindo e resolvendo caminhos.
                                                             (line   50)
* resolveEntity() (método xml.sax.handler.EntityResolver): EntityResolver Objects.
                                                             (line    6)
* resource_path() (método importlib.abc.ResourceReader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  493)
* resource_path() (método importlib.resources.abc.ResourceReader): importlib resources abc – Classes base abstratas para recursos.
                                                             (line   58)
* ResourceDenied:                        test support — Utilitários para o conjunto de teste do Python.
                                                             (line   22)
* ResourceLoader (classe em importlib.abc): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  180)
* ResourceReader (classe em importlib.abc): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  445)
* ResourceReader (classe em importlib.resources.abc): importlib resources abc – Classes base abstratas para recursos.
                                                             (line   12)
* ResourceWarning:                       Avisos.             (line   84)
* response() (método imaplib.IMAP4):     Objetos IMAP4.      (line  221)
* ResponseNotReady:                      http client — HTTP protocol client.
                                                             (line  174)
* responses (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  179)
* responses (no módulo http.client):     http client — HTTP protocol client.
                                                             (line  209)
* restart (pdb command):                 Comandos de depuração.
                                                             (line  440)
* restart_events() (no módulo sys.monitoring): Desativação de eventos.
                                                             (line   26)
* restore() (método test.support.SaveSignals): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  792)
* restore() (no módulo difflib):         difflib — Helpers for computing deltas.
                                                             (line  271)
* RESTRICTED (macro C):                  Member flags.       (line   31)
* restrita;execução:                     Builtins e execução restrita.
                                                             (line    6)
* restype (atributo ctypes._CFuncPtr):   Foreign functions.  (line   32)
* result() (método asyncio.Future):      Objeto Future.      (line   34)
* result() (método asyncio.Task):        Objeto Task.        (line   77)
* result() (método concurrent.futures.Future): Future Objects.
                                                             (line   37)
* results() (método trace.Trace):        Interface programática.
                                                             (line   43)
* RESUME (opcode):                       Instruções em bytecode do Python.
                                                             (line 1242)
* resume_reading() (método asyncio.ReadTransport): Read-only Transports.
                                                             (line   21)
* resume_writing() (método asyncio.BaseProtocol): Base Protocol.
                                                             (line   44)
* retr() (método poplib.POP3):           Objetos POP3.       (line   63)
* retrbinary() (método ftplib.FTP):      FTP objects.        (line  175)
* retrieve() (método urllib.request.URLopener): Legacy interface.
                                                             (line  112)
* retrlines() (método ftplib.FTP):       FTP objects.        (line  200)
* RETRY (no módulo tkinter.messagebox):  tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  151)
* RETRYCANCEL (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  178)
* Return (classe em ast):                Definições de função e classe.
                                                             (line  114)
* return (pdb command):                  Comandos de depuração.
                                                             (line  242)
* return_annotation (atributo inspect.Signature): Introspecting callables with the Signature object.
                                                             (line  116)
* RETURN_CONST (opcode):                 Instruções em bytecode do Python.
                                                             (line  421)
* RETURN_GENERATOR (opcode):             Instruções em bytecode do Python.
                                                             (line 1267)
* return_ok() (método http.cookiejar.CookiePolicy): Objeto CookiePolicy.
                                                             (line   18)
* return_value (atributo unittest.mock.Mock): A classe Mock. (line  345)
* RETURN_VALUE (opcode):                 Instruções em bytecode do Python.
                                                             (line  417)
* returncode (atributo asyncio.subprocess.Process): Interagindo com subprocessos.
                                                             (line  148)
* returncode (atributo subprocess.CalledProcessError): Usando o módulo subprocess.
                                                             (line  220)
* returncode (atributo subprocess.CompletedProcess): Usando o módulo subprocess.
                                                             (line  113)
* returncode (atributo subprocess.Popen): Objetos Popen.     (line  157)
* retval (pdb command):                  Comandos de depuração.
                                                             (line  459)
* reveal_type() (no módulo typing):      Funções e decoradores.
                                                             (line   85)
* reverse_order() (método pstats.Stats): A classe Stats.     (line  157)
* reverse_pointer (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line   79)
* reverse_pointer (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  274)
* reverse() (método array.array):        array— Vetores eficientes de valores numéricos.
                                                             (line  235)
* reverse() (método collections.deque):  Objetos deque.      (line  109)
* reverse() (método sequence):           Tipos sequências mutáveis.
                                                             (line  116)
* Reversible (classe em collections.abc): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line   48)
* Reversible (classe em typing):         Apelidos para outros ABCs em collections abc.
                                                             (line   61)
* revert() (método http.cookiejar.FileCookieJar): CookieJar and FileCookieJar Objects.
                                                             (line  142)
* rewind() (método wave.Wave_read):      Objetos Wave_read.  (line   57)
* RFC_4122 (no módulo uuid):             uuid — Objetos UUID conforme RFC 4122.
                                                             (line  238)
* RFC; RFC 1123:                         Funções<5>.         (line  773)
* RFC; RFC 1123 <1>:                     Funções<5>.         (line  788)
* RFC; RFC 1123 <2>:                     Funções<5>.         (line  807)
* RFC; RFC 1321:                         hashlib — Resumos de mensagens e hashes seguros.
                                                             (line   15)
* RFC; RFC 1422:                         Certificados.       (line   38)
* RFC; RFC 1422 <1>:                     TLS 1 3.            (line   41)
* RFC; RFC 1521:                         Considerações de Segurança<2>.
                                                             (line   18)
* RFC; RFC 1521 <1>:                     quopri — Codifica e decodifica dados MIME imprimidos entre aspas.
                                                             (line   11)
* RFC; RFC 1521 <2>:                     quopri — Codifica e decodifica dados MIME imprimidos entre aspas.
                                                             (line   39)
* RFC; RFC 1522:                         binascii — Converte entre binário e ASCII.
                                                             (line   89)
* RFC; RFC 1522 <1>:                     quopri — Codifica e decodifica dados MIME imprimidos entre aspas.
                                                             (line   26)
* RFC; RFC 1522 <2>:                     quopri — Codifica e decodifica dados MIME imprimidos entre aspas.
                                                             (line   41)
* RFC; RFC 1730:                         imaplib — IMAP4 protocol client.
                                                             (line   14)
* RFC; RFC 1738:                         URL Quoting.        (line  187)
* RFC; RFC 1750:                         Random generation.  (line   34)
* RFC; RFC 1808:                         urllib<2>.          (line   23)
* RFC; RFC 1808 <1>:                     urllib parse — Analisa URLs para componentes.
                                                             (line   34)
* RFC; RFC 1808 <2>:                     Análise de URL.     (line   44)
* RFC; RFC 1808 <3>:                     URL Quoting.        (line  181)
* RFC; RFC 1869:                         smtplib — Cliente de protocolo SMTP.
                                                             (line   14)
* RFC; RFC 1869 <1>:                     smtplib — Cliente de protocolo SMTP.
                                                             (line  202)
* RFC; RFC 1870:                         smtpd<4>.           (line    6)
* RFC; RFC 1939:                         poplib — Cliente de protocolo POP3.
                                                             (line   12)
* RFC; RFC 1939 <1>:                     poplib — Cliente de protocolo POP3.
                                                             (line   13)
* RFC; RFC 2033:                         Módulos Novos ou Aprimorados<2>.
                                                             (line  569)
* RFC; RFC 2045:                         email — Um e-mail e um pacote MIME manipulável.
                                                             (line   15)
* RFC; RFC 2045 <1>:                     email message Representing an email message.
                                                             (line  316)
* RFC; RFC 2045 <2>:                     email message Representing an email message.
                                                             (line  318)
* RFC; RFC 2045 <3>:                     email message Representing an email message.
                                                             (line  321)
* RFC; RFC 2045 <4>:                     email headerregistry Custom Header Objects.
                                                             (line  239)
* RFC; RFC 2045 <5>:                     email headerregistry Custom Header Objects.
                                                             (line  297)
* RFC; RFC 2045 <6>:                     email message Message Representing an email message using the compat32 API.
                                                             (line  424)
* RFC; RFC 2045 <7>:                     email message Message Representing an email message using the compat32 API.
                                                             (line  428)
* RFC; RFC 2045 <8>:                     email message Message Representing an email message using the compat32 API.
                                                             (line  431)
* RFC; RFC 2045 <9>:                     email message Message Representing an email message using the compat32 API.
                                                             (line  528)
* RFC; RFC 2045 <10>:                    email header Internationalized headers.
                                                             (line   30)
* RFC; RFC 2045 <11>:                    base64 — Base16 Base32 Base64 Base85 Data Encodings.
                                                             (line   25)
* RFC; RFC 2045 <12>:                    base64 — Base16 Base32 Base64 Base85 Data Encodings.
                                                             (line   26)
* RFC; RFC 2045 <13>:                    Legacy Interface.   (line   29)
* RFC; RFC 2045 <14>:                    Legacy Interface.   (line   37)
* RFC; RFC 2045 Section 6.8:             Objetos Binários.   (line   31)
* RFC; RFC 2046:                         email — Um e-mail e um pacote MIME manipulável.
                                                             (line   15)
* RFC; RFC 2046 <1>:                     Content Manager Instances.
                                                             (line   93)
* RFC; RFC 2046 <2>:                     email header Internationalized headers.
                                                             (line   31)
* RFC; RFC 2047:                         PEP 3333 Python Web Server Gateway Interface v1 0 1.
                                                             (line   21)
* RFC; RFC 2047 <1>:                     email<6>.           (line   27)
* RFC; RFC 2047 <2>:                     email — Um e-mail e um pacote MIME manipulável.
                                                             (line   16)
* RFC; RFC 2047 <3>:                     email policy Policy Objects.
                                                             (line  364)
* RFC; RFC 2047 <4>:                     email policy Policy Objects.
                                                             (line  370)
* RFC; RFC 2047 <5>:                     email headerregistry Custom Header Objects.
                                                             (line   78)
* RFC; RFC 2047 <6>:                     email headerregistry Custom Header Objects.
                                                             (line  123)
* RFC; RFC 2047 <7>:                     email headerregistry Custom Header Objects.
                                                             (line  128)
* RFC; RFC 2047 <8>:                     email header Internationalized headers.
                                                             (line   31)
* RFC; RFC 2047 <9>:                     email header Internationalized headers.
                                                             (line   54)
* RFC; RFC 2047 <10>:                    email header Internationalized headers.
                                                             (line  116)
* RFC; RFC 2047 <11>:                    email header Internationalized headers.
                                                             (line  140)
* RFC; RFC 2047 <12>:                    email utils Utilitários diversos.
                                                             (line   82)
* RFC; RFC 2060:                         imaplib — IMAP4 protocol client.
                                                             (line   13)
* RFC; RFC 2060 <1>:                     Objetos IMAP4.      (line  319)
* RFC; RFC 2068:                         http cookies — HTTP state management.
                                                             (line   16)
* RFC; RFC 2104:                         Módulos Novos ou Aprimorados<3>.
                                                             (line   35)
* RFC; RFC 2104 <1>:                     hmac — Código de autenticação de mensagem com chave hash.
                                                             (line   10)
* RFC; RFC 2109:                         http cookies — HTTP state management.
                                                             (line   15)
* RFC; RFC 2109 <1>:                     http cookies — HTTP state management.
                                                             (line   36)
* RFC; RFC 2109 <2>:                     http cookies — HTTP state management.
                                                             (line   67)
* RFC; RFC 2109 <3>:                     Objetos Morsel.     (line    8)
* RFC; RFC 2109 <4>:                     Objetos Morsel.     (line   11)
* RFC; RFC 2109 <5>:                     Objetos Morsel.     (line   95)
* RFC; RFC 2109 <6>:                     Objetos Morsel.     (line  107)
* RFC; RFC 2109 <7>:                     http cookiejar — Cookie handling for HTTP clients.
                                                             (line   18)
* RFC; RFC 2109 <8>:                     http cookiejar — Cookie handling for HTTP clients.
                                                             (line  103)
* RFC; RFC 2109 <9>:                     http cookiejar — Cookie handling for HTTP clients.
                                                             (line  115)
* RFC; RFC 2109 <10>:                    http cookiejar — Cookie handling for HTTP clients.
                                                             (line  142)
* RFC; RFC 2109 <11>:                    DefaultCookiePolicy Objects.
                                                             (line   86)
* RFC; RFC 2109 <12>:                    Objetos Cookie<2>.  (line   11)
* RFC; RFC 2109 <13>:                    Objetos Cookie<2>.  (line   23)
* RFC; RFC 2109 <14>:                    Objetos Cookie<2>.  (line   74)
* RFC; RFC 2183:                         email — Um e-mail e um pacote MIME manipulável.
                                                             (line   16)
* RFC; RFC 2183 <1>:                     email message Representing an email message.
                                                             (line  461)
* RFC; RFC 2183 <2>:                     email message Message Representing an email message using the compat32 API.
                                                             (line  636)
* RFC; RFC 2231:                         Biblioteca<8>.      (line   23)
* RFC; RFC 2231 <1>:                     Biblioteca<29>.     (line  144)
* RFC; RFC 2231 <2>:                     email — Um e-mail e um pacote MIME manipulável.
                                                             (line   16)
* RFC; RFC 2231 <3>:                     email message Representing an email message.
                                                             (line  280)
* RFC; RFC 2231 <4>:                     email message Representing an email message.
                                                             (line  283)
* RFC; RFC 2231 <5>:                     email message Representing an email message.
                                                             (line  365)
* RFC; RFC 2231 <6>:                     email message Message Representing an email message using the compat32 API.
                                                             (line  387)
* RFC; RFC 2231 <7>:                     email message Message Representing an email message using the compat32 API.
                                                             (line  391)
* RFC; RFC 2231 <8>:                     email message Message Representing an email message using the compat32 API.
                                                             (line  493)
* RFC; RFC 2231 <9>:                     email message Message Representing an email message using the compat32 API.
                                                             (line  501)
* RFC; RFC 2231 <10>:                    email message Message Representing an email message using the compat32 API.
                                                             (line  535)
* RFC; RFC 2231 <11>:                    email header Internationalized headers.
                                                             (line   31)
* RFC; RFC 2231 <12>:                    email utils Utilitários diversos.
                                                             (line  198)
* RFC; RFC 2231 <13>:                    email utils Utilitários diversos.
                                                             (line  202)
* RFC; RFC 2231 <14>:                    email utils Utilitários diversos.
                                                             (line  212)
* RFC; RFC 2231 <15>:                    email utils Utilitários diversos.
                                                             (line  219)
* RFC; RFC 2231 <16>:                    email utils Utilitários diversos.
                                                             (line  228)
* RFC; RFC 2295:                         códigos de status HTTP.
                                                             (line  184)
* RFC; RFC 2324:                         códigos de status HTTP.
                                                             (line  133)
* RFC; RFC 2342:                         Módulos Novos ou Aprimorados<3>.
                                                             (line   94)
* RFC; RFC 2342 <1>:                     Objetos IMAP4.      (line  167)
* RFC; RFC 2368:                         URL Quoting.        (line  177)
* RFC; RFC 2373:                         Objetos de endereço.
                                                             (line   97)
* RFC; RFC 2373 <1>:                     Objetos de endereço.
                                                             (line  163)
* RFC; RFC 2373 <2>:                     Objetos de endereço.
                                                             (line  184)
* RFC; RFC 2396:                         urllib parse<5>.    (line    6)
* RFC; RFC 2396 <1>:                     urllib<2>.          (line   24)
* RFC; RFC 2396 <2>:                     Análise de URL.     (line  272)
* RFC; RFC 2396 <3>:                     URL Quoting.        (line   25)
* RFC; RFC 2396 <4>:                     URL Quoting.        (line  172)
* RFC; RFC 2397:                         DataHandler Objects.
                                                             (line    9)
* RFC; RFC 2449:                         Objetos POP3.       (line   26)
* RFC; RFC 2487:                         Módulos Novos ou Aprimorados<3>.
                                                             (line   86)
* RFC; RFC 2518:                         códigos de status HTTP.
                                                             (line   19)
* RFC; RFC 2595:                         poplib — Cliente de protocolo POP3.
                                                             (line   14)
* RFC; RFC 2595 <1>:                     Objetos POP3.       (line  116)
* RFC; RFC 2616:                         PEP 3333 Python Web Server Gateway Interface v1 0 1.
                                                             (line   20)
* RFC; RFC 2616 <1>:                     wsgiref util – Utilidades do ambiente WSGI.
                                                             (line  117)
* RFC; RFC 2616 <2>:                     wsgiref validate — Verificador de conformidade WSGI.
                                                             (line   28)
* RFC; RFC 2616 <3>:                     HTTPRedirectHandler Objects.
                                                             (line    8)
* RFC; RFC 2616 <4>:                     HTTPRedirectHandler Objects.
                                                             (line   28)
* RFC; RFC 2616 <5>:                     Legacy interface.   (line  163)
* RFC; RFC 2616 <6>:                     urllib error — Classes de exceção levantadas por urllib request.
                                                             (line   47)
* RFC; RFC 2616 <7>:                     Introdução<17>.     (line   34)
* RFC; RFC 2616 <8>:                     HTTPError.          (line   16)
* RFC; RFC 2616 <9>:                     Códigos de erro.    (line   12)
* RFC; RFC 2616 Section 14.23:           Objetos de HTTPConnection.
                                                             (line   32)
* RFC; RFC 2616 Section 5.1.2:           Objetos de HTTPConnection.
                                                             (line   13)
* RFC; RFC 2616 Section 5.1.2 <1>:       Objetos de HTTPConnection.
                                                             (line   33)
* RFC; RFC 2640:                         Alterações na API Python<4>.
                                                             (line   37)
* RFC; RFC 2640 <1>:                     Testes<46>.         (line   22)
* RFC; RFC 2640 <2>:                     ftplib — FTP protocol client.
                                                             (line   18)
* RFC; RFC 2640 <3>:                     FTP objects.        (line   64)
* RFC; RFC 2640 <4>:                     FTP_TLS objects.    (line   65)
* RFC; RFC 2732:                         urllib parse<6>.    (line   10)
* RFC; RFC 2732 <1>:                     Módulos Novos ou Aprimorados.
                                                             (line  666)
* RFC; RFC 2732 <2>:                     URL Quoting.        (line  168)
* RFC; RFC 2774:                         códigos de status HTTP.
                                                             (line  194)
* RFC; RFC 2818:                         ssl<12>.            (line   16)
* RFC; RFC 2821:                         email — Um e-mail e um pacote MIME manipulável.
                                                             (line   12)
* RFC; RFC 2822:                         Módulos Novos ou Aprimorados<3>.
                                                             (line   98)
* RFC; RFC 2822 <1>:                     Funções<5>.         (line  775)
* RFC; RFC 2822 <2>:                     Funções<5>.         (line  790)
* RFC; RFC 2822 <3>:                     Funções<5>.         (line  809)
* RFC; RFC 2822 <4>:                     email message Message Representing an email message using the compat32 API.
                                                             (line  277)
* RFC; RFC 2822 <5>:                     email header Internationalized headers.
                                                             (line   19)
* RFC; RFC 2822 <6>:                     email header Internationalized headers.
                                                             (line   22)
* RFC; RFC 2822 <7>:                     email header Internationalized headers.
                                                             (line   30)
* RFC; RFC 2822 <8>:                     email header Internationalized headers.
                                                             (line   87)
* RFC; RFC 2822 <9>:                     email header Internationalized headers.
                                                             (line  115)
* RFC; RFC 2822 <10>:                    email header Internationalized headers.
                                                             (line  133)
* RFC; RFC 2822 <11>:                    email utils Utilitários diversos.
                                                             (line   31)
* RFC; RFC 2822 <12>:                    email utils Utilitários diversos.
                                                             (line  114)
* RFC; RFC 2822 <13>:                    email utils Utilitários diversos.
                                                             (line  117)
* RFC; RFC 2822 <14>:                    email utils Utilitários diversos.
                                                             (line  246)
* RFC; RFC 2822 <15>:                    email utils Utilitários diversos.
                                                             (line  162)
* RFC; RFC 2964:                         http cookiejar — Cookie handling for HTTP clients.
                                                             (line  155)
* RFC; RFC 2965:                         urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  234)
* RFC; RFC 2965 <1>:                     urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  242)
* RFC; RFC 2965 <2>:                     Objeto Request.     (line   50)
* RFC; RFC 2965 <3>:                     http cookiejar — Cookie handling for HTTP clients.
                                                             (line   16)
* RFC; RFC 2965 <4>:                     http cookiejar — Cookie handling for HTTP clients.
                                                             (line  103)
* RFC; RFC 2965 <5>:                     http cookiejar — Cookie handling for HTTP clients.
                                                             (line  115)
* RFC; RFC 2965 <6>:                     http cookiejar — Cookie handling for HTTP clients.
                                                             (line  144)
* RFC; RFC 2965 <7>:                     http cookiejar — Cookie handling for HTTP clients.
                                                             (line  146)
* RFC; RFC 2965 <8>:                     http cookiejar — Cookie handling for HTTP clients.
                                                             (line  153)
* RFC; RFC 2965 <9>:                     FileCookieJar subclasses and co-operation with web browsers.
                                                             (line   16)
* RFC; RFC 2965 <10>:                    Objeto CookiePolicy.
                                                             (line   74)
* RFC; RFC 2965 <11>:                    Objeto CookiePolicy.
                                                             (line   79)
* RFC; RFC 2965 <12>:                    DefaultCookiePolicy Objects.
                                                             (line    8)
* RFC; RFC 2965 <13>:                    DefaultCookiePolicy Objects.
                                                             (line   90)
* RFC; RFC 2965 <14>:                    DefaultCookiePolicy Objects.
                                                             (line  101)
* RFC; RFC 2965 <15>:                    DefaultCookiePolicy Objects.
                                                             (line  105)
* RFC; RFC 2965 <16>:                    DefaultCookiePolicy Objects.
                                                             (line  114)
* RFC; RFC 2965 <17>:                    DefaultCookiePolicy Objects.
                                                             (line  151)
* RFC; RFC 2965 <18>:                    Objetos Cookie<2>.  (line   23)
* RFC; RFC 2965 <19>:                    Exemplos<29>.       (line   25)
* RFC; RFC 3056:                         Objetos de endereço.
                                                             (line  321)
* RFC; RFC 3164:                         Logging to syslog with RFC5424 support.
                                                             (line    7)
* RFC; RFC 3171:                         Objetos de endereço.
                                                             (line   97)
* RFC; RFC 3207:                         Módulos Novos ou Aprimorados<2>.
                                                             (line  574)
* RFC; RFC 3229:                         códigos de status HTTP.
                                                             (line   52)
* RFC; RFC 3280:                         SSL Sockets.        (line  161)
* RFC; RFC 3330:                         Objetos de endereço.
                                                             (line  183)
* RFC; RFC 3339:                         Exibindo data/hora em mensagens.
                                                             (line   17)
* RFC; RFC 3454:                         Segurança<22>.      (line   19)
* RFC; RFC 3454 <1>:                     stringprep — Preparação de string para internet.
                                                             (line   17)
* RFC; RFC 3454 <2>:                     stringprep — Preparação de string para internet.
                                                             (line   26)
* RFC; RFC 3490:                         Text Encodings.     (line   14)
* RFC; RFC 3490 <1>:                     encodings idna — Internationalized Domain Names in Applications.
                                                             (line    6)
* RFC; RFC 3490 <2>:                     encodings idna — Internationalized Domain Names in Applications.
                                                             (line   57)
* RFC; RFC 3490 <3>:                     encodings idna — Internationalized Domain Names in Applications.
                                                             (line   62)
* RFC; RFC 3490 Section 3.1:             encodings idna — Internationalized Domain Names in Applications.
                                                             (line   27)
* RFC; RFC 3491:                         Segurança<22>.      (line   21)
* RFC; RFC 3492:                         Text Encodings.     (line   36)
* RFC; RFC 3492 <1>:                     encodings idna — Internationalized Domain Names in Applications.
                                                             (line    7)
* RFC; RFC 3493:                         Exemplo<7>.         (line  227)
* RFC; RFC 3501:                         Objetos IMAP4.      (line  330)
* RFC; RFC 3542:                         Biblioteca<137>.    (line  351)
* RFC; RFC 3542 <1>:                     Outras funções<2>.  (line  341)
* RFC; RFC 3548:                         New Improved and Deprecated Modules<3>.
                                                             (line   16)
* RFC; RFC 3548 <1>:                     binascii — Converte entre binário e ASCII.
                                                             (line   53)
* RFC; RFC 3548 <2>:                     binascii — Converte entre binário e ASCII.
                                                             (line   69)
* RFC; RFC 3596 Section 2.5:             Biblioteca<21>.     (line   14)
* RFC; RFC 3659:                         FTP objects.        (line  289)
* RFC; RFC 3879:                         Objetos de endereço.
                                                             (line  178)
* RFC; RFC 3879 <1>:                     Objetos de endereço.
                                                             (line  300)
* RFC; RFC 3927:                         Objetos de endereço.
                                                             (line  189)
* RFC; RFC 3986:                         urllib parse.       (line   19)
* RFC; RFC 3986 <1>:                     urllib parse<3>.    (line    8)
* RFC; RFC 3986 <2>:                     urllib parse<4>.    (line    8)
* RFC; RFC 3986 <3>:                     urllib parse<5>.    (line    6)
* RFC; RFC 3986 <4>:                     urllib<2>.          (line   22)
* RFC; RFC 3986 <5>:                     Módulos Novos ou Aprimorados.
                                                             (line  645)
* RFC; RFC 3986 <6>:                     Portando para Python 2 7.
                                                             (line   82)
* RFC; RFC 3986 <7>:                     urllib parse — Analisa URLs para componentes.
                                                             (line   35)
* RFC; RFC 3986 <8>:                     Análise de URL.     (line  151)
* RFC; RFC 3986 <9>:                     Análise de URL.     (line  395)
* RFC; RFC 3986 <10>:                    Segurança ao analisar URLs.
                                                             (line   27)
* RFC; RFC 3986 <11>:                    URL Quoting.        (line   25)
* RFC; RFC 3986 <12>:                    URL Quoting.        (line  160)
* RFC; RFC 3986 <13>:                    http server — HTTP servers.
                                                             (line  101)
* RFC; RFC 4007:                         Objetos de endereço.
                                                             (line  241)
* RFC; RFC 4007 <1>:                     Objetos de endereço.
                                                             (line  313)
* RFC; RFC 4086:                         TLS 1 3.            (line   45)
* RFC; RFC 4122:                         New Improved and Removed Modules.
                                                             (line  416)
* RFC; RFC 4122 <1>:                     New Improved and Removed Modules.
                                                             (line  421)
* RFC; RFC 4122 <2>:                     uuid — Objetos UUID conforme RFC 4122.
                                                             (line    6)
* RFC; RFC 4122 <3>:                     uuid — Objetos UUID conforme RFC 4122.
                                                             (line   15)
* RFC; RFC 4122 <4>:                     uuid — Objetos UUID conforme RFC 4122.
                                                             (line   75)
* RFC; RFC 4122 <5>:                     uuid — Objetos UUID conforme RFC 4122.
                                                             (line  141)
* RFC; RFC 4122 <6>:                     uuid — Objetos UUID conforme RFC 4122.
                                                             (line  171)
* RFC; RFC 4122 <7>:                     uuid — Objetos UUID conforme RFC 4122.
                                                             (line  240)
* RFC; RFC 4122 <8>:                     uuid — Objetos UUID conforme RFC 4122.
                                                             (line  253)
* RFC; RFC 4180:                         csv — Leitura e escrita de arquivos CSV.
                                                             (line   13)
* RFC; RFC 4193:                         Objetos de endereço.
                                                             (line  302)
* RFC; RFC 4217:                         FTP_TLS objects.    (line   11)
* RFC; RFC 4291:                         Biblioteca<38>.     (line 1125)
* RFC; RFC 4291 <1>:                     Biblioteca<91>.     (line  653)
* RFC; RFC 4291 <2>:                     Objetos de endereço.
                                                             (line  194)
* RFC; RFC 4291 <3>:                     Objetos de endereço.
                                                             (line  234)
* RFC; RFC 4380:                         Objetos de endereço.
                                                             (line  328)
* RFC; RFC 4627:                         json — Codificador e decodificador JSON.
                                                             (line   11)
* RFC; RFC 4627 <1>:                     Valores não objeto e não vetor de nível superior.
                                                             (line    6)
* RFC; RFC 4648:                         Documentação<32>.   (line   32)
* RFC; RFC 4648 <1>:                     base64 — Base16 Base32 Base64 Base85 Data Encodings.
                                                             (line   12)
* RFC; RFC 4648 <2>:                     base64 — Base16 Base32 Base64 Base85 Data Encodings.
                                                             (line   19)
* RFC; RFC 4648 <3>:                     RFC 4648 Encodings. (line    6)
* RFC; RFC 4648 <4>:                     RFC 4648 Encodings. (line   88)
* RFC; RFC 4648 <5>:                     RFC 4648 Encodings. (line  103)
* RFC; RFC 4648 <6>:                     RFC 4648 Encodings. (line  110)
* RFC; RFC 4648 <7>:                     Considerações de Segurança<2>.
                                                             (line    6)
* RFC; RFC 4648 <8>:                     Considerações de Segurança<3>.
                                                             (line    9)
* RFC; RFC 4918:                         códigos de status HTTP.
                                                             (line   46)
* RFC; RFC 4918 <1>:                     códigos de status HTTP.
                                                             (line  142)
* RFC; RFC 4918 <2>:                     códigos de status HTTP.
                                                             (line  145)
* RFC; RFC 4918 <3>:                     códigos de status HTTP.
                                                             (line  188)
* RFC; RFC 4954:                         Objetos SMTP.       (line  135)
* RFC; RFC 4954 <1>:                     Objetos SMTP.       (line  158)
* RFC; RFC 5161:                         imaplib<2>.         (line   11)
* RFC; RFC 5161 <1>:                     Objetos IMAP4.      (line   86)
* RFC; RFC 5246:                         Constantes<9>.      (line  516)
* RFC; RFC 5246 <1>:                     TLS 1 3.            (line   53)
* RFC; RFC 5280:                         ssl.                (line   11)
* RFC; RFC 5280 <1>:                     Other Changes.      (line   20)
* RFC; RFC 5280 <2>:                     Alterações na API Python<9>.
                                                             (line   95)
* RFC; RFC 5280 <3>:                     Criação de contexto.
                                                             (line   40)
* RFC; RFC 5280 <4>:                     Criação de contexto.
                                                             (line   65)
* RFC; RFC 5280 <5>:                     Manipulação de certificados.
                                                             (line   22)
* RFC; RFC 5280 <6>:                     TLS 1 3.            (line   49)
* RFC; RFC 5321:                         smtpd<4>.           (line    6)
* RFC; RFC 5321 <1>:                     email headerregistry Custom Header Objects.
                                                             (line  453)
* RFC; RFC 5322:                         Baterias incluídas. (line   17)
* RFC; RFC 5322 <1>:                     Funções<5>.         (line  776)
* RFC; RFC 5322 <2>:                     Funções<5>.         (line  791)
* RFC; RFC 5322 <3>:                     Funções<5>.         (line  477)
* RFC; RFC 5322 <4>:                     Funções<5>.         (line  810)
* RFC; RFC 5322 <5>:                     email — Um e-mail e um pacote MIME manipulável.
                                                             (line   14)
* RFC; RFC 5322 <6>:                     email message Representing an email message.
                                                             (line   20)
* RFC; RFC 5322 <7>:                     email message Representing an email message.
                                                             (line   31)
* RFC; RFC 5322 <8>:                     Parser API.         (line   42)
* RFC; RFC 5322 <9>:                     email generator Geração de documentos MIME.
                                                             (line  107)
* RFC; RFC 5322 <10>:                    email generator Geração de documentos MIME.
                                                             (line  202)
* RFC; RFC 5322 <11>:                    email policy Policy Objects.
                                                             (line  149)
* RFC; RFC 5322 <12>:                    email policy Policy Objects.
                                                             (line  343)
* RFC; RFC 5322 <13>:                    email policy Policy Objects.
                                                             (line  364)
* RFC; RFC 5322 <14>:                    email policy Policy Objects.
                                                             (line  370)
* RFC; RFC 5322 <15>:                    email policy Policy Objects.
                                                             (line  382)
* RFC; RFC 5322 <16>:                    email policy Policy Objects.
                                                             (line  415)
* RFC; RFC 5322 <17>:                    email errors Classes de Exceção e Defeito.
                                                             (line   28)
* RFC; RFC 5322 <18>:                    email headerregistry Custom Header Objects.
                                                             (line   16)
* RFC; RFC 5322 <19>:                    email headerregistry Custom Header Objects.
                                                             (line  117)
* RFC; RFC 5322 <20>:                    email headerregistry Custom Header Objects.
                                                             (line  122)
* RFC; RFC 5322 <21>:                    email headerregistry Custom Header Objects.
                                                             (line  123)
* RFC; RFC 5322 <22>:                    email headerregistry Custom Header Objects.
                                                             (line  138)
* RFC; RFC 5322 <23>:                    email headerregistry Custom Header Objects.
                                                             (line  159)
* RFC; RFC 5322 <24>:                    email headerregistry Custom Header Objects.
                                                             (line  416)
* RFC; RFC 5322 <25>:                    email headerregistry Custom Header Objects.
                                                             (line  450)
* RFC; RFC 5322 <26>:                    email headerregistry Custom Header Objects.
                                                             (line  484)
* RFC; RFC 5322 <27>:                    email message Message Representing an email message using the compat32 API.
                                                             (line   21)
* RFC; RFC 5322 <28>:                    Message objects.    (line   17)
* RFC; RFC 5322 <29>:                    http client — HTTP protocol client.
                                                             (line  114)
* RFC; RFC 5322 <30>:                    Objetos SMTP.       (line  314)
* RFC; RFC 5322 <31>:                    http server — HTTP servers.
                                                             (line  116)
* RFC; RFC 5424:                         SysLogHandler.      (line   72)
* RFC; RFC 5424 <1>:                     Inserting a BOM into messages sent to a SysLogHandler.
                                                             (line    6)
* RFC; RFC 5424 <2>:                     Inserting a BOM into messages sent to a SysLogHandler.
                                                             (line   19)
* RFC; RFC 5424 <3>:                     Inserting a BOM into messages sent to a SysLogHandler.
                                                             (line   43)
* RFC; RFC 5424 <4>:                     Logging to syslog with RFC5424 support.
                                                             (line    6)
* RFC; RFC 5424 Section 6:               Inserting a BOM into messages sent to a SysLogHandler.
                                                             (line    9)
* RFC; RFC 5735:                         Objetos de endereço.
                                                             (line  162)
* RFC; RFC 5789:                         Métodos HTTP.       (line   37)
* RFC; RFC 5842:                         códigos de status HTTP.
                                                             (line   49)
* RFC; RFC 5842 <1>:                     códigos de status HTTP.
                                                             (line  191)
* RFC; RFC 5891:                         encodings idna — Internationalized Domain Names in Applications.
                                                             (line   11)
* RFC; RFC 5894:                         Segurança<22>.      (line   20)
* RFC; RFC 5895:                         encodings idna — Internationalized Domain Names in Applications.
                                                             (line   11)
* RFC; RFC 5929:                         SSL Sockets.        (line  271)
* RFC; RFC 6066:                         Constantes<9>.      (line  410)
* RFC; RFC 6066 <1>:                     SSL Contexts.       (line  290)
* RFC; RFC 6066 <2>:                     TLS 1 3.            (line   57)
* RFC; RFC 6152:                         smtpd<2>.           (line   15)
* RFC; RFC 6531:                         email<3>.           (line   19)
* RFC; RFC 6531 <1>:                     smtpd<2>.           (line   21)
* RFC; RFC 6531 <2>:                     smtplib<2>.         (line   15)
* RFC; RFC 6531 <3>:                     email message Representing an email message.
                                                             (line  103)
* RFC; RFC 6531 <4>:                     email policy Policy Objects.
                                                             (line  386)
* RFC; RFC 6531 <5>:                     smtplib — Cliente de protocolo SMTP.
                                                             (line   68)
* RFC; RFC 6532:                         email<3>.           (line   18)
* RFC; RFC 6532 <1>:                     email — Um e-mail e um pacote MIME manipulável.
                                                             (line   14)
* RFC; RFC 6532 <2>:                     email message Representing an email message.
                                                             (line   20)
* RFC; RFC 6532 <3>:                     Parser API.         (line   43)
* RFC; RFC 6532 <4>:                     email policy Policy Objects.
                                                             (line  384)
* RFC; RFC 6585:                         códigos de status HTTP.
                                                             (line  154)
* RFC; RFC 6585 <1>:                     códigos de status HTTP.
                                                             (line  157)
* RFC; RFC 6585 <2>:                     códigos de status HTTP.
                                                             (line  160)
* RFC; RFC 6585 <3>:                     códigos de status HTTP.
                                                             (line  197)
* RFC; RFC 6855:                         imaplib<2>.         (line   12)
* RFC; RFC 6855 <1>:                     imaplib<2>.         (line   14)
* RFC; RFC 6855 <2>:                     Objetos IMAP4.      (line   88)
* RFC; RFC 6855 <3>:                     Objetos IMAP4.      (line   91)
* RFC; RFC 6856:                         poplib<2>.          (line    6)
* RFC; RFC 6856 <1>:                     Objetos POP3.       (line  109)
* RFC; RFC 7159:                         json — Codificador e decodificador JSON.
                                                             (line   10)
* RFC; RFC 7159 <1>:                     Conformidade e interoperabilidade entre padrões.
                                                             (line    6)
* RFC; RFC 7159 <2>:                     Valores não objeto e não vetor de nível superior.
                                                             (line    9)
* RFC; RFC 7230:                         urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  205)
* RFC; RFC 7230 <1>:                     Objetos de HTTPConnection.
                                                             (line  199)
* RFC; RFC 7301:                         Application-Layer Protocol Negotiation Support.
                                                             (line   10)
* RFC; RFC 7301 <1>:                     Constantes<9>.      (line  387)
* RFC; RFC 7301 <2>:                     SSL Contexts.       (line  258)
* RFC; RFC 7525:                         TLS 1 3.            (line   65)
* RFC; RFC 7538:                         Biblioteca<81>.     (line  171)
* RFC; RFC 7693:                         BLAKE2.             (line    6)
* RFC; RFC 7725:                         códigos de status HTTP.
                                                             (line  163)
* RFC; RFC 7914:                         Derivação de chave. (line   54)
* RFC; RFC 8089:                         Analisando e gerando URIs.
                                                             (line    7)
* RFC; RFC 821:                          smtplib — Cliente de protocolo SMTP.
                                                             (line   13)
* RFC; RFC 821 <1>:                      smtplib — Cliente de protocolo SMTP.
                                                             (line  197)
* RFC; RFC 822:                          Módulos Novos ou Aprimorados<3>.
                                                             (line   98)
* RFC; RFC 822 <1>:                      Funções<5>.         (line  767)
* RFC; RFC 822 <2>:                      Funções<5>.         (line  771)
* RFC; RFC 822 <3>:                      Funções<5>.         (line  782)
* RFC; RFC 822 <4>:                      Funções<5>.         (line  786)
* RFC; RFC 822 <5>:                      Funções<5>.         (line  801)
* RFC; RFC 822 <6>:                      Funções<5>.         (line  805)
* RFC; RFC 822 <7>:                      email Exemplos.     (line   37)
* RFC; RFC 822 <8>:                      email header Internationalized headers.
                                                             (line   20)
* RFC; RFC 822 <9>:                      Objetos de HTTPConnection.
                                                             (line  186)
* RFC; RFC 822 <10>:                     Objetos SMTP.       (line   94)
* RFC; RFC 822 <11>:                     Objetos SMTP.       (line  229)
* RFC; RFC 822 <12>:                     Objetos SMTP.       (line  230)
* RFC; RFC 822 <13>:                     Exemplo SMTP.       (line   10)
* RFC; RFC 822 <14>:                     A classe GNUTranslations.
                                                             (line   14)
* RFC; RFC 8297:                         códigos de status HTTP.
                                                             (line   22)
* RFC; RFC 8305:                         Abrindo conexões de rede.
                                                             (line   78)
* RFC; RFC 8305 <1>:                     Abrindo conexões de rede.
                                                             (line   88)
* RFC; RFC 8470:                         códigos de status HTTP.
                                                             (line  148)
* RFC; RFC 850:                          Biblioteca<14>.     (line  207)
* RFC; RFC 9110:                         Biblioteca<14>.     (line  208)
* RFC; RFC 9110 <1>:                     códigos de status HTTP.
                                                             (line   13)
* RFC; RFC 9110 <2>:                     códigos de status HTTP.
                                                             (line   16)
* RFC; RFC 9110 <3>:                     códigos de status HTTP.
                                                             (line   25)
* RFC; RFC 9110 <4>:                     códigos de status HTTP.
                                                             (line   28)
* RFC; RFC 9110 <5>:                     códigos de status HTTP.
                                                             (line   31)
* RFC; RFC 9110 <6>:                     códigos de status HTTP.
                                                             (line   34)
* RFC; RFC 9110 <7>:                     códigos de status HTTP.
                                                             (line   37)
* RFC; RFC 9110 <8>:                     códigos de status HTTP.
                                                             (line   40)
* RFC; RFC 9110 <9>:                     códigos de status HTTP.
                                                             (line   43)
* RFC; RFC 9110 <10>:                    códigos de status HTTP.
                                                             (line   55)
* RFC; RFC 9110 <11>:                    códigos de status HTTP.
                                                             (line   58)
* RFC; RFC 9110 <12>:                    códigos de status HTTP.
                                                             (line   61)
* RFC; RFC 9110 <13>:                    códigos de status HTTP.
                                                             (line   64)
* RFC; RFC 9110 <14>:                    códigos de status HTTP.
                                                             (line   67)
* RFC; RFC 9110 <15>:                    códigos de status HTTP.
                                                             (line   70)
* RFC; RFC 9110 <16>:                    códigos de status HTTP.
                                                             (line   73)
* RFC; RFC 9110 <17>:                    códigos de status HTTP.
                                                             (line   76)
* RFC; RFC 9110 <18>:                    códigos de status HTTP.
                                                             (line   79)
* RFC; RFC 9110 <19>:                    códigos de status HTTP.
                                                             (line   82)
* RFC; RFC 9110 <20>:                    códigos de status HTTP.
                                                             (line   85)
* RFC; RFC 9110 <21>:                    códigos de status HTTP.
                                                             (line   88)
* RFC; RFC 9110 <22>:                    códigos de status HTTP.
                                                             (line   91)
* RFC; RFC 9110 <23>:                    códigos de status HTTP.
                                                             (line   94)
* RFC; RFC 9110 <24>:                    códigos de status HTTP.
                                                             (line   97)
* RFC; RFC 9110 <25>:                    códigos de status HTTP.
                                                             (line  100)
* RFC; RFC 9110 <26>:                    códigos de status HTTP.
                                                             (line  103)
* RFC; RFC 9110 <27>:                    códigos de status HTTP.
                                                             (line  106)
* RFC; RFC 9110 <28>:                    códigos de status HTTP.
                                                             (line  109)
* RFC; RFC 9110 <29>:                    códigos de status HTTP.
                                                             (line  112)
* RFC; RFC 9110 <30>:                    códigos de status HTTP.
                                                             (line  115)
* RFC; RFC 9110 <31>:                    códigos de status HTTP.
                                                             (line  118)
* RFC; RFC 9110 <32>:                    códigos de status HTTP.
                                                             (line  121)
* RFC; RFC 9110 <33>:                    códigos de status HTTP.
                                                             (line  124)
* RFC; RFC 9110 <34>:                    códigos de status HTTP.
                                                             (line  127)
* RFC; RFC 9110 <35>:                    códigos de status HTTP.
                                                             (line  130)
* RFC; RFC 9110 <36>:                    códigos de status HTTP.
                                                             (line  136)
* RFC; RFC 9110 <37>:                    códigos de status HTTP.
                                                             (line  139)
* RFC; RFC 9110 <38>:                    códigos de status HTTP.
                                                             (line  151)
* RFC; RFC 9110 <39>:                    códigos de status HTTP.
                                                             (line  166)
* RFC; RFC 9110 <40>:                    códigos de status HTTP.
                                                             (line  169)
* RFC; RFC 9110 <41>:                    códigos de status HTTP.
                                                             (line  172)
* RFC; RFC 9110 <42>:                    códigos de status HTTP.
                                                             (line  175)
* RFC; RFC 9110 <43>:                    códigos de status HTTP.
                                                             (line  178)
* RFC; RFC 9110 <44>:                    códigos de status HTTP.
                                                             (line  181)
* RFC; RFC 9110 <45>:                    Categorias de HTTP status.
                                                             (line   15)
* RFC; RFC 9110 <46>:                    Categorias de HTTP status.
                                                             (line   18)
* RFC; RFC 9110 <47>:                    Categorias de HTTP status.
                                                             (line   21)
* RFC; RFC 9110 <48>:                    Categorias de HTTP status.
                                                             (line   24)
* RFC; RFC 9110 <49>:                    Categorias de HTTP status.
                                                             (line   27)
* RFC; RFC 9110 <50>:                    Métodos HTTP.       (line   13)
* RFC; RFC 9110 <51>:                    Métodos HTTP.       (line   16)
* RFC; RFC 9110 <52>:                    Métodos HTTP.       (line   19)
* RFC; RFC 9110 <53>:                    Métodos HTTP.       (line   22)
* RFC; RFC 9110 <54>:                    Métodos HTTP.       (line   25)
* RFC; RFC 9110 <55>:                    Métodos HTTP.       (line   28)
* RFC; RFC 9110 <56>:                    Métodos HTTP.       (line   31)
* RFC; RFC 9110 <57>:                    Métodos HTTP.       (line   34)
* RFC; RFC 9239:                         Biblioteca<62>.     (line   76)
* RFC; RFC 9562 Section 6.10-3:          Biblioteca<7>.      (line  111)
* RFC; RFC 959:                          ftplib — FTP protocol client.
                                                             (line   16)
* rfc2109 (atributo http.cookiejar.Cookie): Objetos Cookie<2>.
                                                             (line   72)
* rfc2109_as_netscape (atributo http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line   83)
* rfc2965 (atributo http.cookiejar.CookiePolicy): Objeto CookiePolicy.
                                                             (line   72)
* rfile (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  118)
* rfile (atributo socketserver.DatagramRequestHandler): Objetos manipulador de requisições.
                                                             (line   65)
* rfind() (método bytearray):            Operações com Bytes e Bytearray.
                                                             (line  220)
* rfind() (método bytes):                Operações com Bytes e Bytearray.
                                                             (line  220)
* rfind() (método mmap.mmap):            mmap — Suporte a arquivos mapeados na memória.
                                                             (line  289)
* rfind() (método str):                  String Methods<2>.  (line  579)
* rgb_to_hls() (no módulo colorsys):     colorsys — Conversões entre sistemas de cores.
                                                             (line   36)
* rgb_to_hsv() (no módulo colorsys):     colorsys — Conversões entre sistemas de cores.
                                                             (line   44)
* rgb_to_yiq() (no módulo colorsys):     colorsys — Conversões entre sistemas de cores.
                                                             (line   28)
* rglob() (método pathlib.Path):         Lendo diretórios.   (line   85)
* richcmpfunc (C type):                  Slot Type typedefs. (line   81)
* right (atributo filecmp.dircmp):       A classe dircmp.    (line   51)
* right_list (atributo filecmp.dircmp):  A classe dircmp.    (line   60)
* right_only (atributo filecmp.dircmp):  A classe dircmp.    (line   73)
* right() (no módulo turtle):            Movimentos de Turtle.
                                                             (line   41)
* RIGHTSHIFT (no módulo token):          token — Constantes usadas com árvores de análises do Python.
                                                             (line  261)
* RIGHTSHIFTEQUAL (no módulo token):     token — Constantes usadas com árvores de análises do Python.
                                                             (line  294)
* rindex() (método bytearray):           Operações com Bytes e Bytearray.
                                                             (line  235)
* rindex() (método bytes):               Operações com Bytes e Bytearray.
                                                             (line  235)
* rindex() (método str):                 String Methods<2>.  (line  593)
* rjust() (método bytearray):            Operações com Bytes e Bytearray.
                                                             (line  355)
* rjust() (método bytes):                Operações com Bytes e Bytearray.
                                                             (line  355)
* rjust() (método str):                  String Methods<2>.  (line  598)
* RLIM_INFINITY (no módulo resource):    Limites de recursos.
                                                             (line   22)
* RLIMIT_AS (no módulo resource):        Limites de recursos.
                                                             (line  151)
* RLIMIT_CORE (no módulo resource):      Limites de recursos.
                                                             (line   93)
* RLIMIT_CPU (no módulo resource):       Limites de recursos.
                                                             (line  100)
* RLIMIT_DATA (no módulo resource):      Limites de recursos.
                                                             (line  112)
* RLIMIT_FSIZE (no módulo resource):     Limites de recursos.
                                                             (line  108)
* RLIMIT_KQUEUES (no módulo resource):   Limites de recursos.
                                                             (line  231)
* RLIMIT_MEMLOCK (no módulo resource):   Limites de recursos.
                                                             (line  140)
* RLIMIT_MSGQUEUE (no módulo resource):  Limites de recursos.
                                                             (line  156)
* RLIMIT_NICE (no módulo resource):      Limites de recursos.
                                                             (line  165)
* RLIMIT_NOFILE (no módulo resource):    Limites de recursos.
                                                             (line  131)
* RLIMIT_NPROC (no módulo resource):     Limites de recursos.
                                                             (line  127)
* RLIMIT_NPTS (no módulo resource):      Limites de recursos.
                                                             (line  223)
* RLIMIT_OFILE (no módulo resource):     Limites de recursos.
                                                             (line  136)
* RLIMIT_RSS (no módulo resource):       Limites de recursos.
                                                             (line  122)
* RLIMIT_RTPRIO (no módulo resource):    Limites de recursos.
                                                             (line  174)
* RLIMIT_RTTIME (no módulo resource):    Limites de recursos.
                                                             (line  182)
* RLIMIT_SBSIZE (no módulo resource):    Limites de recursos.
                                                             (line  200)
* RLIMIT_SIGPENDING (no módulo resource): Limites de recursos.
                                                             (line  192)
* RLIMIT_STACK (no módulo resource):     Limites de recursos.
                                                             (line  116)
* RLIMIT_SWAP (no módulo resource):      Limites de recursos.
                                                             (line  211)
* RLIMIT_VMEM (no módulo resource):      Limites de recursos.
                                                             (line  144)
* RLock (classe em multiprocessing):     Primitivas de sincronização.
                                                             (line  121)
* RLock (classe em threading):           RLock objects.      (line   32)
* RLock() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  205)
* rmd() (método ftplib.FTP):             FTP objects.        (line  348)
* rmdir() (método pathlib.Path):         Renomeando e excluindo.
                                                             (line   62)
* rmdir() (no módulo os):                Arquivos e diretórios.
                                                             (line  864)
* rmdir() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  111)
* rmtree() (no módulo shutil):           Operações de diretório e arquivos.
                                                             (line  284)
* rmtree() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  118)
* RobotFileParser (classe em urllib.robotparser): urllib robotparser — Analisador sintático de robots txt.
                                                             (line   16)
* robots.txt:                            urllib robotparser — Analisador sintático de robots txt.
                                                             (line    8)
* rollback() (método sqlite3.Connection): Connection objects.
                                                             (line   80)
* rollover() (método tempfile.SpooledTemporaryFile): tempfile — Generate temporary files and directories.
                                                             (line  162)
* ROMAN (no módulo tkinter.font):        tkinter font — Invólucro de fontes Tkinter.
                                                             (line   15)
* root (atributo pathlib.PurePath):      Métodos e propriedades.
                                                             (line   31)
* rotate() (método collections.deque):   Objetos deque.      (line  116)
* rotate() (método decimal.Context):     Objetos de contexto.
                                                             (line  523)
* rotate() (método decimal.Decimal):     Objetos de Decimal. (line  539)
* rotate() (método logging.handlers.BaseRotatingHandler): BaseRotatingHandler.
                                                             (line   79)
* RotatingFileHandler (classe em logging.handlers): RotatingFileHandler.
                                                             (line   10)
* rotation_filename() (método logging.handlers.BaseRotatingHandler): BaseRotatingHandler.
                                                             (line   61)
* rotator (atributo logging.handlers.BaseRotatingHandler): BaseRotatingHandler.
                                                             (line   52)
* ROUND_05UP (no módulo decimal):        Modos de arredondamento.
                                                             (line   35)
* ROUND_CEILING (no módulo decimal):     Modos de arredondamento.
                                                             (line    6)
* ROUND_DOWN (no módulo decimal):        Modos de arredondamento.
                                                             (line   10)
* ROUND_FLOOR (no módulo decimal):       Modos de arredondamento.
                                                             (line   14)
* ROUND_HALF_DOWN (no módulo decimal):   Modos de arredondamento.
                                                             (line   18)
* ROUND_HALF_EVEN (no módulo decimal):   Modos de arredondamento.
                                                             (line   22)
* ROUND_HALF_UP (no módulo decimal):     Modos de arredondamento.
                                                             (line   27)
* ROUND_UP (no módulo decimal):          Modos de arredondamento.
                                                             (line   31)
* Rounded (classe em decimal):           Sinais.             (line   81)
* rounding (atributo decimal.Context):   Objetos de contexto.
                                                             (line  130)
* rounds (atributo sys.float_info):      sys — Parâmetros e funções específicas do sistema.
                                                             (line  706)
* Row (classe em sqlite3):               Row objects.        (line    6)
* row_factory (atributo sqlite3.Connection): Connection objects.
                                                             (line  795)
* row_factory (atributo sqlite3.Cursor): Cursor objects.     (line  232)
* rowcount (atributo sqlite3.Cursor):    Cursor objects.     (line  221)
* RPAR (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line  183)
* rpartition() (método bytearray):       Operações com Bytes e Bytearray.
                                                             (line  247)
* rpartition() (método bytes):           Operações com Bytes e Bytearray.
                                                             (line  247)
* rpartition() (método str):             String Methods<2>.  (line  605)
* rpc_paths (atributo xmlrpc.server.SimpleXMLRPCRequestHandler): Objetos de SimpleXMLRPCServer.
                                                             (line   64)
* rpop() (método poplib.POP3):           Objetos POP3.       (line   47)
* RS (no módulo curses.ascii):           curses ascii — Utilitários para caracteres ASCII.
                                                             (line  120)
* rset() (método poplib.POP3):           Objetos POP3.       (line   75)
* RShift (classe em ast):                Expressões<2>.      (line   54)
* rshift() (no módulo operator):         operator — Operadores padrões como funções.
                                                             (line  157)
* rsplit() (método bytearray):           Operações com Bytes e Bytearray.
                                                             (line  368)
* rsplit() (método bytes):               Operações com Bytes e Bytearray.
                                                             (line  368)
* rsplit() (método str):                 String Methods<2>.  (line  624)
* RSQB (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line  189)
* rstrip() (método bytearray):           Operações com Bytes e Bytearray.
                                                             (line  380)
* rstrip() (método bytes):               Operações com Bytes e Bytearray.
                                                             (line  380)
* rstrip() (método str):                 String Methods<2>.  (line  634)
* rt() (no módulo turtle):               Movimentos de Turtle.
                                                             (line   41)
* RTLD_DEEPBIND (no módulo os):          Diversas informações de sistema.
                                                             (line  170)
* RTLD_GLOBAL (no módulo os):            Diversas informações de sistema.
                                                             (line  170)
* RTLD_LAZY (no módulo os):              Diversas informações de sistema.
                                                             (line  170)
* RTLD_LOCAL (no módulo os):             Diversas informações de sistema.
                                                             (line  170)
* RTLD_NODELETE (no módulo os):          Diversas informações de sistema.
                                                             (line  170)
* RTLD_NOLOAD (no módulo os):            Diversas informações de sistema.
                                                             (line  170)
* RTLD_NOW (no módulo os):               Diversas informações de sistema.
                                                             (line  170)
* ruler (atributo cmd.Cmd):              Objetos Cmd.        (line  175)
* run (pdb command):                     Comandos de depuração.
                                                             (line  440)
* Run script:                            Menu Format Somente na janela do Editor.
                                                             (line   56)
* run_coroutine_threadsafe() (no módulo asyncio): Agendando a partir de outras threads.
                                                             (line    6)
* run_docstring_examples() (no módulo doctest): Basic API.   (line  128)
* run_forever() (método asyncio.loop):   Executar e interromper o laço.
                                                             (line   17)
* run_in_executor() (método asyncio.loop): Executando código em conjuntos de threads ou processos.
                                                             (line    6)
* run_in_subinterp() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  675)
* run_module() (no módulo runpy):        runpy — Localizando e executando módulos Python.
                                                             (line   29)
* run_path() (no módulo runpy):          runpy — Localizando e executando módulos Python.
                                                             (line  105)
* run_python_until_end() (no módulo test.support.script_helper): test support script_helper — Utilities for the Python execution tests.
                                                             (line   30)
* run_script() (método modulefinder.ModuleFinder): modulefinder — Procura módulos usados por um script.
                                                             (line   45)
* run_until_complete() (método asyncio.loop): Executar e interromper o laço.
                                                             (line    6)
* run_with_locale() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  478)
* run_with_tz() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  486)
* run() (método asyncio.Runner):         Runner context manager.
                                                             (line   36)
* run() (método bdb.Bdb):                bdb — Framework do depurador.
                                                             (line  445)
* run() (método contextvars.Context):    Gerenciamento de contexto manual.
                                                             (line   64)
* run() (método doctest.DocTestRunner):  DocTestRunner objects.
                                                             (line  101)
* run() (método multiprocessing.Process): Process e exceções.
                                                             (line   69)
* run() (método pdb.Pdb):                Interface de linha de comando<9>.
                                                             (line  166)
* run() (método profile.Profile):        profile and cProfile Module Reference.
                                                             (line  111)
* run() (método sched.scheduler):        Objetos Scheduler.  (line   50)
* run() (método threading.Thread):       Thread objects.     (line  104)
* run() (método trace.Trace):            Interface programática.
                                                             (line   24)
* run() (método unittest.IsolatedAsyncioTestCase): Casos de teste.
                                                             (line  929)
* run() (método unittest.TestCase):      Casos de teste.     (line   90)
* run() (método unittest.TestSuite):     Grouping tests.     (line   41)
* run() (método unittest.TextTestRunner): Carregando e executando testes.
                                                             (line  509)
* run() (método wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line   99)
* run() (no módulo asyncio):             Executando um programa asyncio.
                                                             (line    6)
* run() (no módulo pdb):                 Interface de linha de comando<9>.
                                                             (line   68)
* run() (no módulo profile):             profile and cProfile Module Reference.
                                                             (line    9)
* run() (no módulo subprocess):          Usando o módulo subprocess.
                                                             (line   11)
* runcall() (método bdb.Bdb):            bdb — Framework do depurador.
                                                             (line  461)
* runcall() (método pdb.Pdb):            Interface de linha de comando<9>.
                                                             (line  166)
* runcall() (método profile.Profile):    profile and cProfile Module Reference.
                                                             (line  120)
* runcall() (no módulo pdb):             Interface de linha de comando<9>.
                                                             (line   88)
* runcode() (método code.InteractiveInterpreter): Objetos de interpretador interativo.
                                                             (line   33)
* runctx() (método bdb.Bdb):             bdb — Framework do depurador.
                                                             (line  457)
* runctx() (método profile.Profile):     profile and cProfile Module Reference.
                                                             (line  115)
* runctx() (método trace.Trace):         Interface programática.
                                                             (line   30)
* runctx() (no módulo profile):          profile and cProfile Module Reference.
                                                             (line   23)
* runeval() (método bdb.Bdb):            bdb — Framework do depurador.
                                                             (line  451)
* runeval() (método pdb.Pdb):            Interface de linha de comando<9>.
                                                             (line  166)
* runeval() (no módulo pdb):             Interface de linha de comando<9>.
                                                             (line   81)
* runfunc() (método trace.Trace):        Interface programática.
                                                             (line   37)
* Runner (classe em asyncio):            Runner context manager.
                                                             (line    6)
* running() (método concurrent.futures.Future): Future Objects.
                                                             (line   27)
* runsource() (método code.InteractiveInterpreter): Objetos de interpretador interativo.
                                                             (line    6)
* runtime (atributo sys._emscripten_info): sys — Parâmetros e funções específicas do sistema.
                                                             (line  369)
* runtime_checkable() (no módulo typing): Outras diretivas especiais.
                                                             (line  186)
* RuntimeError:                          Exceções concretas. (line  267)
* RuntimeWarning:                        Avisos.             (line   49)
* RUSAGE_BOTH (no módulo resource):      Uso de recursos.    (line  125)
* RUSAGE_CHILDREN (no módulo resource):  Uso de recursos.    (line  119)
* RUSAGE_SELF (no módulo resource):      Uso de recursos.    (line  113)
* RUSAGE_THREAD (no módulo resource):    Uso de recursos.    (line  131)
* RWF_APPEND (no módulo os):             Operações dos descritores de arquivos.
                                                             (line  740)
* RWF_DSYNC (no módulo os):              Operações dos descritores de arquivos.
                                                             (line  718)
* RWF_HIPRI (no módulo os):              Operações dos descritores de arquivos.
                                                             (line  644)
* RWF_NOWAIT (no módulo os):             Operações dos descritores de arquivos.
                                                             (line  629)
* RWF_SYNC (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  729)
* S (no módulo re):                      Sinalizadores.      (line  112)
* S_ENFMT (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  321)
* S_IEXEC (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  336)
* S_IFBLK (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  209)
* S_IFCHR (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  217)
* S_IFDIR (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  213)
* S_IFDOOR (no módulo stat):             stat — Interpretando resultados de stat.
                                                             (line  225)
* S_IFIFO (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  221)
* S_IFLNK (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  201)
* S_IFMT() (no módulo stat):             stat — Interpretando resultados de stat.
                                                             (line   79)
* S_IFPORT (no módulo stat):             stat — Interpretando resultados de stat.
                                                             (line  231)
* S_IFREG (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  205)
* S_IFSOCK (no módulo stat):             stat — Interpretando resultados de stat.
                                                             (line  197)
* S_IFWHT (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  237)
* S_IMODE() (no módulo stat):            stat — Interpretando resultados de stat.
                                                             (line   72)
* S_IREAD (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  328)
* S_IRGRP (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  293)
* S_IROTH (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  309)
* S_IRUSR (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  277)
* S_IRWXG (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  289)
* S_IRWXO (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  305)
* S_IRWXU (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  273)
* S_ISBLK() (no módulo stat):            stat — Interpretando resultados de stat.
                                                             (line   29)
* S_ISCHR() (no módulo stat):            stat — Interpretando resultados de stat.
                                                             (line   24)
* S_ISDIR() (no módulo stat):            stat — Interpretando resultados de stat.
                                                             (line   20)
* S_ISDOOR() (no módulo stat):           stat — Interpretando resultados de stat.
                                                             (line   51)
* S_ISFIFO() (no módulo stat):           stat — Interpretando resultados de stat.
                                                             (line   38)
* S_ISGID (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  254)
* S_ISLNK() (no módulo stat):            stat — Interpretando resultados de stat.
                                                             (line   43)
* S_ISPORT() (no módulo stat):           stat — Interpretando resultados de stat.
                                                             (line   57)
* S_ISREG() (no módulo stat):            stat — Interpretando resultados de stat.
                                                             (line   34)
* S_ISSOCK() (no módulo stat):           stat — Interpretando resultados de stat.
                                                             (line   47)
* S_ISUID (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  250)
* S_ISVTX (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  266)
* S_ISWHT() (no módulo stat):            stat — Interpretando resultados de stat.
                                                             (line   63)
* S_IWGRP (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  297)
* S_IWOTH (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  313)
* S_IWRITE (no módulo stat):             stat — Interpretando resultados de stat.
                                                             (line  332)
* S_IWUSR (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  281)
* S_IXGRP (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  301)
* S_IXOTH (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  317)
* S_IXUSR (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  285)
* safe (atributo uuid.SafeUUID):         uuid — Objetos UUID conforme RFC 4122.
                                                             (line   34)
* safe_path (atributo sys.flags):        sys — Parâmetros e funções específicas do sistema.
                                                             (line  599)
* safe_substitute() (método string.Template): Strings template.
                                                             (line   51)
* SafeChildWatcher (classe em asyncio):  Monitores de processos.
                                                             (line  126)
* saferepr() (no módulo pprint):         Funções<4>.         (line  103)
* SafeUUID (classe em uuid):             uuid — Objetos UUID conforme RFC 4122.
                                                             (line   30)
* saída:                                 Instruções de expressão.
                                                             (line   18)
* same_files (atributo filecmp.dircmp):  A classe dircmp.    (line   91)
* same_quantum() (método decimal.Context): Objetos de contexto.
                                                             (line  527)
* same_quantum() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  552)
* samefile() (método pathlib.Path):      Consultando tipo de arquivo e status.
                                                             (line  163)
* samefile() (no módulo os.path):        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  482)
* SameFileError:                         Operações de diretório e arquivos.
                                                             (line   63)
* sameopenfile() (no módulo os.path):    os path — Manipulações comuns de nomes de caminhos.
                                                             (line  497)
* samesite (atributo http.cookies.Morsel): Objetos Morsel.   (line   13)
* samestat() (no módulo os.path):        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  507)
* sample() (no módulo random):           Funções para sequências.
                                                             (line   71)
* samples() (método statistics.NormalDist): Objetos NormalDist.
                                                             (line   60)
* SATURDAY (no módulo calendar):         calendar — Funções gerais relacionadas ao calendário.
                                                             (line  465)
* save() (método http.cookiejar.FileCookieJar): CookieJar and FileCookieJar Objects.
                                                             (line  106)
* save() (método test.support.SaveSignals): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  787)
* SaveAs (classe em tkinter.filedialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line   61)
* SAVEDCWD (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   15)
* SaveFileDialog (classe em tkinter.filedialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line  149)
* SaveKey() (no módulo winreg):          Funções<13>.        (line  402)
* SaveSignals (classe em test.support):  test support — Utilitários para o conjunto de teste do Python.
                                                             (line  782)
* savetty() (no módulo curses):          Funções<6>.         (line  443)
* SAX2DOM (classe em xml.dom.pulldom):   xml dom pulldom — Suporte para construir árvores parciais de DOM.
                                                             (line   83)
* SAXException:                          xml sax — Support for SAX2 parsers.
                                                             (line   85)
* SAXNotRecognizedException:             xml sax — Support for SAX2 parsers.
                                                             (line  110)
* SAXNotSupportedException:              xml sax — Support for SAX2 parsers.
                                                             (line  117)
* SAXParseException:                     xml sax — Support for SAX2 parsers.
                                                             (line  102)
* scaleb() (método decimal.Context):     Objetos de contexto.
                                                             (line  531)
* scaleb() (método decimal.Decimal):     Objetos de Decimal. (line  563)
* scandir() (no módulo os):              Arquivos e diretórios.
                                                             (line  882)
* scanf (função C):                      Simulando scanf.    (line    6)
* SCHED_BATCH (no módulo os):            Interface do agendador.
                                                             (line   20)
* SCHED_FIFO (no módulo os):             Interface do agendador.
                                                             (line   34)
* sched_get_priority_max() (no módulo os): Interface do agendador.
                                                             (line   67)
* sched_get_priority_min() (no módulo os): Interface do agendador.
                                                             (line   62)
* sched_getaffinity() (no módulo os):    Interface do agendador.
                                                             (line  114)
* sched_getparam() (no módulo os):       Interface do agendador.
                                                             (line   91)
* sched_getscheduler() (no módulo os):   Interface do agendador.
                                                             (line   79)
* SCHED_IDLE (no módulo os):             Interface do agendador.
                                                             (line   25)
* SCHED_OTHER (no módulo os):            Interface do agendador.
                                                             (line   16)
* sched_param (classe em os):            Interface do agendador.
                                                             (line   50)
* sched_priority (atributo os.sched_param): Interface do agendador.
                                                             (line   58)
* SCHED_RESET_ON_FORK (no módulo os):    Interface do agendador.
                                                             (line   43)
* SCHED_RR (no módulo os):               Interface do agendador.
                                                             (line   39)
* sched_rr_get_interval() (no módulo os): Interface do agendador.
                                                             (line   97)
* sched_setaffinity() (no módulo os):    Interface do agendador.
                                                             (line  107)
* sched_setparam() (no módulo os):       Interface do agendador.
                                                             (line   85)
* sched_setscheduler() (no módulo os):   Interface do agendador.
                                                             (line   72)
* SCHED_SPORADIC (no módulo os):         Interface do agendador.
                                                             (line   30)
* sched_yield() (no módulo os):          Interface do agendador.
                                                             (line  102)
* scheduler (classe em sched):           sched — Agendador de eventos.
                                                             (line   13)
* SCM_CREDS2 (no módulo socket):         Constantes<8>.      (line  321)
* scope_id (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  311)
* Screen (classe em turtle):             Classes Públicas.   (line   30)
* screensize() (no módulo turtle):       Controle da Janela. (line   90)
* script_from_examples() (no módulo doctest): Depuração.     (line   72)
* scroll() (método curses.window):       Window Objects.     (line  502)
* ScrolledCanvas (classe em turtle):     Classes Públicas.   (line   35)
* ScrolledText (classe em tkinter.scrolledtext): tkinter scrolledtext — Widget de texto de rolado.
                                                             (line   25)
* scrollok() (método curses.window):     Window Objects.     (line  506)
* scrypt() (no módulo hashlib):          Derivação de chave. (line   50)
* seal() (no módulo unittest.mock):      Vedando mocks.      (line    6)
* search_function() (no módulo encodings): encodings — Encodings package.
                                                             (line   23)
* search() (método imaplib.IMAP4):       Objetos IMAP4.      (line  226)
* search() (método re.Pattern):          Objetos expressão regular.
                                                             (line   15)
* search() (no módulo re):               Funções<2>.         (line   37)
* second (atributo datetime.datetime):   Objetos datetime.   (line  336)
* second (atributo datetime.time):       Objetos time.       (line   59)
* seconds (atributo datetime.timedelta): Objetos timedelta.  (line  116)
* SECTCRE (atributo configparser.ConfigParser): Personalizando o comportamento do analisador sintático.
                                                             (line  315)
* sections() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  123)
* secure (atributo http.cookiejar.Cookie): Objetos Cookie<2>.
                                                             (line   49)
* secure (atributo http.cookies.Morsel): Objetos Morsel.     (line   13)
* secure hash algorithm, SHA1, SHA2, SHA224, SHA256, SHA384, SHA512, SHA3, Shake, Blake2: hashlib — Resumos de mensagens e hashes seguros.
                                                             (line    8)
* Secure Sockets Layer:                  ssl — Invólucro de TLS/SSL para objetos socket.
                                                             (line    8)
* security_level (atributo ssl.SSLContext): SSL Contexts.    (line  626)
* see() (método tkinter.ttk.Treeview):   ttk Treeview.       (line  241)
* seed_bits (atributo sys.hash_info):    sys — Parâmetros e funções específicas do sistema.
                                                             (line 1117)
* seed() (método random.Random):         Gerador alternativo.
                                                             (line   19)
* seed() (no módulo random):             Funções de contabilidade.
                                                             (line    6)
* SEEK_CUR (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  334)
* SEEK_DATA (no módulo os):              Operações dos descritores de arquivos.
                                                             (line  356)
* SEEK_END (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  334)
* SEEK_HOLE (no módulo os):              Operações dos descritores de arquivos.
                                                             (line  356)
* SEEK_SET (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  334)
* seek() (método io.IOBase):             I/O Base Classes.   (line  106)
* seek() (método io.TextIOBase):         E/S de texto<2>.    (line   66)
* seek() (método io.TextIOWrapper):      E/S de texto<2>.    (line  205)
* seek() (método mmap.mmap):             mmap — Suporte a arquivos mapeados na memória.
                                                             (line  299)
* seek() (método sqlite3.Blob):          Blob objects.       (line   63)
* seekable() (método bz2.BZ2File):       Des compressão de arquivos.
                                                             (line  103)
* seekable() (método io.IOBase):         I/O Base Classes.   (line  129)
* seekable() (método mmap.mmap):         mmap — Suporte a arquivos mapeados na memória.
                                                             (line  310)
* segundos desde a era:                  time — Acesso ao horário e conversões.
                                                             (line   24)
* seguro para thread:                    Glossário.          (line 1720)
* seleção item:                          Sequências.         (line    6)
* select() (método imaplib.IMAP4):       Objetos IMAP4.      (line  243)
* select() (método selectors.BaseSelector): Classes<4>.      (line  108)
* select() (método tkinter.ttk.Notebook): ttk Notebook.      (line   53)
* select() (no módulo select):           select — Waiting for I/O completion.
                                                             (line  117)
* selected_alpn_protocol() (método ssl.SSLSocket): SSL Sockets.
                                                             (line  277)
* selected_npn_protocol() (método ssl.SSLSocket): SSL Sockets.
                                                             (line  287)
* selection_add() (método tkinter.ttk.Treeview): ttk Treeview.
                                                             (line  264)
* selection_remove() (método tkinter.ttk.Treeview): ttk Treeview.
                                                             (line  271)
* selection_set() (método tkinter.ttk.Treeview): ttk Treeview.
                                                             (line  257)
* selection_toggle() (método tkinter.ttk.Treeview): ttk Treeview.
                                                             (line  278)
* selection() (método tkinter.ttk.Treeview): ttk Treeview.   (line  249)
* selector (atributo urllib.request.Request): Objeto Request.
                                                             (line   34)
* SelectorEventLoop (classe em asyncio): Implementações do laço de eventos.
                                                             (line   11)
* SelectorKey (classe em selectors):     Classes<4>.         (line   29)
* SelectSelector (classe em selectors):  Classes<4>.         (line  167)
* Self (no módulo typing):               Tipos especiais.    (line  140)
* semáforos binários:                    _thread— API de segmentação de baixo nível.
                                                             (line    6)
* Semaphore (classe em asyncio):         Semaphore.          (line    6)
* Semaphore (classe em multiprocessing): Primitivas de sincronização.
                                                             (line  191)
* Semaphore (classe em threading):       Semaphore objects.  (line   19)
* Semaphore() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  210)
* SEMI (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line  198)
* SEND (opcode):                         Instruções em bytecode do Python.
                                                             (line 1276)
* send_bytes() (método multiprocessing.connection.Connection): Objetos de conexão.
                                                             (line   58)
* send_error() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  216)
* send_fds() (no módulo socket):         Outras funções<2>.  (line  462)
* send_header() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  252)
* send_message() (método smtplib.SMTP):  Objetos SMTP.       (line  304)
* send_response_only() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  265)
* send_response() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  236)
* send_signal() (método asyncio.subprocess.Process): Interagindo com subprocessos.
                                                             (line   88)
* send_signal() (método asyncio.SubprocessTransport): Transportes de Subprocesso.
                                                             (line   44)
* send_signal() (método subprocess.Popen): Objetos Popen.    (line   83)
* send() (método coroutine):             Objetos corrotina.  (line   23)
* send() (método generator):             Métodos de iterador gerador.
                                                             (line   27)
* send() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line  218)
* send() (método imaplib.IMAP4):         Objetos IMAP4.      (line  250)
* send() (método logging.handlers.DatagramHandler): DatagramHandler.
                                                             (line   44)
* send() (método logging.handlers.SocketHandler): SocketHandler.
                                                             (line   65)
* send() (método multiprocessing.connection.Connection): Objetos de conexão.
                                                             (line   15)
* send() (método socket.socket):         Socket Objects.     (line  395)
* sendall() (método socket.socket):      Socket Objects.     (line  411)
* sendcmd() (método ftplib.FTP):         FTP objects.        (line  157)
* sendfile() (método asyncio.loop):      Transferindo arquivos.
                                                             (line    6)
* sendfile() (método socket.socket):     Socket Objects.     (line  504)
* sendfile() (método wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  282)
* sendfile() (no módulo os):             Operações dos descritores de arquivos.
                                                             (line  776)
* SendfileNotAvailableError:             Exceções<13>.       (line   37)
* sendfunc (C type):                     Slot Type typedefs. (line  114)
* sendmail() (método smtplib.SMTP):      Objetos SMTP.       (line  226)
* sendmsg_afalg() (método socket.socket): Socket Objects.    (line  493)
* sendmsg() (método socket.socket):      Socket Objects.     (line  449)
* sendto() (método asyncio.DatagramTransport): Transportes de datagrama.
                                                             (line    6)
* sendto() (método socket.socket):       Socket Objects.     (line  430)
* sentinel (atributo multiprocessing.Process): Process e exceções.
                                                             (line  191)
* sentinel (no módulo unittest.mock):    sentinel.           (line    6)
* sep (no módulo os):                    Diversas informações de sistema.
                                                             (line  119)
* SEPTEMBER (no módulo calendar):        calendar — Funções gerais relacionadas ao calendário.
                                                             (line  507)
* Sequence (classe em collections.abc):  Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line   67)
* Sequence (classe em typing):           Apelidos de contêineres ABC em collections abc.
                                                             (line  117)
* SequenceMatcher (classe em difflib):   SequenceMatcher Objects.
                                                             (line    8)
* sequência:                             Glossário.          (line 1574)
* sequência de escape:                   Literais de string e bytes.
                                                             (line   75)
* sequência de escape não reconhecida:   Sequências de escape.
                                                             (line  119)
* sequência mutável;laço sobre:          Operações comuns de sequências.
                                                             (line   66)
* sequência;item:                        Subscrições.        (line    6)
* sequência;iteração:                    Tipos iteradores.   (line    6)
* serialização;objetos:                  pickle — Serialização de objetos Python.
                                                             (line    8)
* serialize() (método sqlite3.Connection): Connection objects.
                                                             (line  677)
* serve_forever() (método asyncio.Server): Objetos Server.   (line   91)
* serve_forever() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line   34)
* server (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line   76)
* server (atributo socketserver.BaseRequestHandler): Objetos manipulador de requisições.
                                                             (line   53)
* Server (classe em asyncio):            Objetos Server.     (line   12)
* server_activate() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line  176)
* server_address (atributo socketserver.BaseServer): Objetos Server<2>.
                                                             (line   84)
* server_bind() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line  182)
* server_close() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line   65)
* server_hostname (atributo ssl.SSLSocket): SSL Sockets.     (line  357)
* server_side (atributo ssl.SSLSocket):  SSL Sockets.        (line  350)
* server_software (atributo wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  179)
* server_version (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  135)
* server_version (atributo http.server.SimpleHTTPRequestHandler): http server — HTTP servers.
                                                             (line  360)
* ServerProxy (classe em xmlrpc.client): xmlrpc client — Cliente XML-RPC.
                                                             (line   31)
* service_actions() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line   48)
* session (atributo ssl.SSLSocket):      SSL Sockets.        (line  370)
* session_reused (atributo ssl.SSLSocket): SSL Sockets.      (line  380)
* session_stats() (método ssl.SSLContext): SSL Contexts.     (line  481)
* Set (classe em ast):                   Literais<3>.        (line   92)
* Set (classe em collections.abc):       Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  115)
* Set (classe em typing):                Apelidos de tipos embutidos.
                                                             (line   30)
* set (classe interna):                  Tipo conjuntos — set frozenset.
                                                             (line   36)
* Set Breakpoint:                        Help menu Shell and Editor.
                                                             (line   30)
* SET_ADD (opcode):                      Instruções em bytecode do Python.
                                                             (line  379)
* set_all():                             Detalhes da contagem de referências.
                                                             (line  101)
* set_allowed_domains() (método http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line   70)
* set_alpn_protocols() (método ssl.SSLContext): SSL Contexts.
                                                             (line  252)
* set_app() (método wsgiref.simple_server.WSGIServer): wsgiref simple_server – um servidor HTTP WSGI simples.
                                                             (line   65)
* set_asyncgen_hooks() (no módulo sys):  sys — Parâmetros e funções específicas do sistema.
                                                             (line 1784)
* set_authorizer() (método sqlite3.Connection): Connection objects.
                                                             (line  345)
* set_auto_history() (no módulo readline): Lista de histórico.
                                                             (line   44)
* set_blocked_domains() (método http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line   56)
* set_blocking() (no módulo os):         Operações dos descritores de arquivos.
                                                             (line  837)
* set_boundary() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  412)
* set_boundary() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  591)
* set_break() (método bdb.Bdb):          bdb — Framework do depurador.
                                                             (line  355)
* set_charset() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  237)
* set_child_watcher() (método asyncio.AbstractEventLoopPolicy): Policy Objects.
                                                             (line   44)
* set_child_watcher() (no módulo asyncio): Monitores de processos.
                                                             (line   31)
* set_children() (método tkinter.ttk.Treeview): ttk Treeview.
                                                             (line   25)
* set_ciphers() (método ssl.SSLContext): SSL Contexts.       (line  238)
* set_completer_delims() (no módulo readline): Autocomplemento.
                                                             (line   54)
* set_completer() (no módulo readline):  Autocomplemento.    (line   16)
* set_completion_display_matches_hook() (no módulo readline): Autocomplemento.
                                                             (line   63)
* set_content() (método email.contentmanager.ContentManager): email contentmanager Gerenciando conteúdo MIME.
                                                             (line   40)
* set_content() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  591)
* set_content() (no módulo email.contentmanager): Content Manager Instances.
                                                             (line   35)
* set_continue() (método bdb.Bdb):       bdb — Framework do depurador.
                                                             (line  338)
* set_cookie_if_ok() (método http.cookiejar.CookieJar): CookieJar and FileCookieJar Objects.
                                                             (line   69)
* set_cookie() (método http.cookiejar.CookieJar): CookieJar and FileCookieJar Objects.
                                                             (line   73)
* set_coroutine_origin_tracking_depth() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line 1810)
* set_data() (método importlib.abc.SourceLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  401)
* set_data() (método importlib.machinery.SourceFileLoader): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  238)
* set_date() (método mailbox.MaildirMessage): MaildirMessage objects.
                                                             (line   97)
* set_debug() (método asyncio.loop):     Habilitando o modo de debug.
                                                             (line   14)
* set_debug() (no módulo gc):            gc — Interface para o coletor de lixo.
                                                             (line   51)
* set_debuglevel() (método ftplib.FTP):  FTP objects.        (line   74)
* set_debuglevel() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line   94)
* set_debuglevel() (método poplib.POP3): Objetos POP3.       (line   11)
* set_debuglevel() (método smtplib.SMTP): Objetos SMTP.      (line    8)
* set_default_executor() (método asyncio.loop): Executando código em conjuntos de threads ou processos.
                                                             (line   76)
* set_default_type() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  342)
* set_default_type() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  452)
* set_default_verify_paths() (método ssl.SSLContext): SSL Contexts.
                                                             (line  229)
* set_defaults() (método argparse.ArgumentParser): Padrões do analisador sintático.
                                                             (line    6)
* set_defaults() (método optparse.OptionParser): Outros métodos.
                                                             (line   27)
* set_ecdh_curve() (método ssl.SSLContext): SSL Contexts.    (line  366)
* set_errno() (no módulo ctypes):        Funções utilitárias.
                                                             (line  203)
* set_error_mode() (no módulo msvcrt):   Outras funções<4>.  (line   12)
* set_escdelay() (no módulo curses):     Funções<6>.         (line  454)
* set_event_loop_policy() (no módulo asyncio): Getting and Setting the Policy.
                                                             (line   13)
* set_event_loop() (método asyncio.AbstractEventLoopPolicy): Policy Objects.
                                                             (line   23)
* set_event_loop() (no módulo asyncio):  Laço de eventos.    (line   69)
* set_events() (no módulo sys.monitoring): Definir eventos globalmente.
                                                             (line   13)
* set_exception_handler() (método asyncio.loop): Tratando erros da API.
                                                             (line    8)
* set_exception() (método asyncio.Future): Objeto Future.    (line   58)
* set_exception() (método concurrent.futures.Future): Future Objects.
                                                             (line  117)
* set_executable() (no módulo multiprocessing): Diversos<4>. (line  119)
* set_filter() (método tkinter.filedialog.FileDialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line  131)
* set_flags() (método mailbox.Maildir):  Maildir objects.    (line  110)
* set_flags() (método mailbox.MaildirMessage): MaildirMessage objects.
                                                             (line   72)
* set_flags() (método mailbox.mboxMessage): mboxMessage objects.
                                                             (line   72)
* set_flags() (método mailbox.MMDFMessage): MMDFMessage objects.
                                                             (line   71)
* set_forkserver_preload() (no módulo multiprocessing): Diversos<4>.
                                                             (line  135)
* set_from() (método mailbox.mboxMessage): mboxMessage objects.
                                                             (line   53)
* set_from() (método mailbox.MMDFMessage): MMDFMessage objects.
                                                             (line   52)
* SET_FUNCTION_ATTRIBUTE (opcode):       Instruções em bytecode do Python.
                                                             (line 1137)
* set_handle_inheritable() (no módulo os): Herança de descritores de arquivos.
                                                             (line   47)
* set_history_length() (no módulo readline): Arquivo de histórico.
                                                             (line   31)
* set_info() (método mailbox.Maildir):   Maildir objects.    (line  172)
* set_info() (método mailbox.MaildirMessage): MaildirMessage objects.
                                                             (line  108)
* set_inheritable() (método socket.socket): Socket Objects.  (line  521)
* set_inheritable() (no módulo os):      Herança de descritores de arquivos.
                                                             (line   35)
* set_int_max_str_digits() (no módulo sys): sys — Parâmetros e funções específicas do sistema.
                                                             (line 1576)
* set_labels() (método mailbox.BabylMessage): BabylMessage objects.
                                                             (line   51)
* set_last_error() (no módulo ctypes):   Funções utilitárias.
                                                             (line  212)
* set_local_events() (no módulo sys.monitoring): Eventos por objeto código.
                                                             (line   16)
* set_memlimit() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  317)
* set_name() (método asyncio.Task):      Objeto Task.        (line  195)
* set_next() (método bdb.Bdb):           bdb — Framework do depurador.
                                                             (line  315)
* set_nonstandard_attr() (método http.cookiejar.Cookie): Objetos Cookie<2>.
                                                             (line  107)
* set_npn_protocols() (método ssl.SSLContext): SSL Contexts. (line  267)
* set_ok() (método http.cookiejar.CookiePolicy): Objeto CookiePolicy.
                                                             (line    9)
* set_param() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  351)
* set_param() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  520)
* set_pasv() (método ftplib.FTP):        FTP objects.        (line  213)
* set_payload() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  226)
* set_policy() (método http.cookiejar.CookieJar): CookieJar and FileCookieJar Objects.
                                                             (line   57)
* set_pre_input_hook() (no módulo readline): Ganchos de inicialização.
                                                             (line   15)
* set_progress_handler() (método sqlite3.Connection): Connection objects.
                                                             (line  378)
* set_protocol() (método asyncio.BaseTransport): Base Transport.
                                                             (line   81)
* set_proxy() (método urllib.request.Request): Objeto Request.
                                                             (line  115)
* set_psk_client_callback() (método ssl.SSLContext): SSL Contexts.
                                                             (line  661)
* set_psk_server_callback() (método ssl.SSLContext): SSL Contexts.
                                                             (line  713)
* set_quit() (método bdb.Bdb):           bdb — Framework do depurador.
                                                             (line  344)
* set_result() (método asyncio.Future):  Objeto Future.      (line   51)
* set_result() (método concurrent.futures.Future): Future Objects.
                                                             (line  105)
* set_return() (método bdb.Bdb):         bdb — Framework do depurador.
                                                             (line  319)
* set_running_or_notify_cancel() (método concurrent.futures.Future): Future Objects.
                                                             (line   85)
* set_selection() (método tkinter.filedialog.FileDialog): Caixas de diálogo nativos de carregar/salvar.
                                                             (line  135)
* set_seq1() (método difflib.SequenceMatcher): SequenceMatcher Objects.
                                                             (line   54)
* set_seq2() (método difflib.SequenceMatcher): SequenceMatcher Objects.
                                                             (line   59)
* set_seqs() (método difflib.SequenceMatcher): SequenceMatcher Objects.
                                                             (line   44)
* set_sequences() (método mailbox.MH):   MH objects.         (line   61)
* set_sequences() (método mailbox.MHMessage): MHMessage objects.
                                                             (line   37)
* set_server_documentation() (método xmlrpc.server.DocCGIXMLRPCRequestHandler): DocCGIXMLRPCRequestHandler.
                                                             (line   24)
* set_server_documentation() (método xmlrpc.server.DocXMLRPCServer): Objetos de DocXMLRPCServer.
                                                             (line   24)
* set_server_name() (método xmlrpc.server.DocCGIXMLRPCRequestHandler): DocCGIXMLRPCRequestHandler.
                                                             (line   18)
* set_server_name() (método xmlrpc.server.DocXMLRPCServer): Objetos de DocXMLRPCServer.
                                                             (line   18)
* set_server_title() (método xmlrpc.server.DocCGIXMLRPCRequestHandler): DocCGIXMLRPCRequestHandler.
                                                             (line   13)
* set_server_title() (método xmlrpc.server.DocXMLRPCServer): Objetos de DocXMLRPCServer.
                                                             (line   13)
* set_servername_callback() (método ssl.SSLContext): SSL Contexts.
                                                             (line  338)
* set_start_method() (no módulo multiprocessing): Diversos<4>.
                                                             (line  154)
* set_startup_hook() (no módulo readline): Ganchos de inicialização.
                                                             (line    6)
* set_step() (método bdb.Bdb):           bdb — Framework do depurador.
                                                             (line  311)
* set_subdir() (método mailbox.MaildirMessage): MaildirMessage objects.
                                                             (line   58)
* set_tabsize() (no módulo curses):      Funções<6>.         (line  469)
* set_task_factory() (método asyncio.loop): Criando Futures e Tasks.
                                                             (line   53)
* set_threshold() (no módulo gc):        gc — Interface para o coletor de lixo.
                                                             (line   93)
* set_trace_callback() (método sqlite3.Connection): Connection objects.
                                                             (line  396)
* set_trace() (método bdb.Bdb):          bdb — Framework do depurador.
                                                             (line  328)
* set_trace() (método pdb.Pdb):          Interface de linha de comando<9>.
                                                             (line  166)
* set_trace() (no módulo bdb):           bdb — Framework do depurador.
                                                             (line  494)
* set_trace() (no módulo pdb):           Interface de linha de comando<9>.
                                                             (line   96)
* set_tunnel() (método http.client.HTTPConnection): Objetos de HTTPConnection.
                                                             (line  104)
* set_type() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  554)
* set_unittest_reportflags() (no módulo doctest): API do Unittest.
                                                             (line  169)
* set_unixfrom() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  146)
* set_unixfrom() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  157)
* set_until() (método bdb.Bdb):          bdb — Framework do depurador.
                                                             (line  323)
* SET_UPDATE (opcode):                   Instruções em bytecode do Python.
                                                             (line  734)
* set_url() (método urllib.robotparser.RobotFileParser): urllib robotparser — Analisador sintático de robots txt.
                                                             (line   21)
* set_usage() (método optparse.OptionParser): Outros métodos.
                                                             (line    8)
* set_userptr() (método curses.panel.Panel): Objetos painel. (line   43)
* set_visible() (método mailbox.BabylMessage): BabylMessage objects.
                                                             (line   68)
* set_wakeup_fd() (no módulo signal):    Conteúdo do módulo<5>.
                                                             (line  481)
* set_write_buffer_limits() (método asyncio.WriteTransport): Write-only Transports.
                                                             (line   33)
* set;compreensões:                      Sintaxes de criação de conjunto.
                                                             (line    6)
* set;sintaxe de criação:                Sintaxes de criação de conjunto.
                                                             (line    6)
* set() (método asyncio.Event):          Evento.             (line   51)
* set() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  302)
* set() (método configparser.RawConfigParser): Objetos RawConfigParser.
                                                             (line   49)
* set() (método contextvars.ContextVar): Variáveis de contexto.
                                                             (line   48)
* set() (método http.cookies.Morsel):    Objetos Morsel.     (line   61)
* set() (método test.support.os_helper.EnvironmentVarGuard): test support os_helper — Utilities for os tests.
                                                             (line   66)
* set() (método threading.Event):        Event objects.      (line   30)
* set() (método tkinter.ttk.Combobox):   ttk Combobox.       (line   19)
* set() (método tkinter.ttk.Spinbox):    ttk Spinbox.        (line   12)
* set() (método tkinter.ttk.Treeview):   ttk Treeview.       (line  285)
* set() (método xml.etree.ElementTree.Element): Element Objects.
                                                             (line   81)
* setacl() (método imaplib.IMAP4):       Objetos IMAP4.      (line  257)
* SetAllocTrackerActivationThreshold() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  121)
* SetAllocTrackerMaximumAmplification() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  136)
* setannotation() (método imaplib.IMAP4): Objetos IMAP4.     (line  262)
* setattrfunc (C type):                  Slot Type typedefs. (line   48)
* setAttribute() (método xml.dom.Element): Element Objects<2>.
                                                             (line   67)
* setAttributeNode() (método xml.dom.Element): Element Objects<2>.
                                                             (line   71)
* setAttributeNodeNS() (método xml.dom.Element): Element Objects<2>.
                                                             (line   79)
* setAttributeNS() (método xml.dom.Element): Element Objects<2>.
                                                             (line   87)
* setattrofunc (C type):                 Slot Type typedefs. (line   61)
* SetBase() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line   22)
* setblocking() (método socket.socket):  Socket Objects.     (line  528)
* setByteStream() (método xml.sax.xmlreader.InputSource): InputSource Objects.
                                                             (line   36)
* setcbreak() (no módulo tty):           tty — Funções de controle de terminal.
                                                             (line   53)
* setCharacterStream() (método xml.sax.xmlreader.InputSource): InputSource Objects.
                                                             (line   55)
* SetComp (classe em ast):               Compreensões.       (line    6)
* setcomptype() (método wave.Wave_write): Objetos Wave_write.
                                                             (line   59)
* setconfig() (método sqlite3.Connection): Connection objects.
                                                             (line  661)
* setContentHandler() (método xml.sax.xmlreader.XMLReader): XMLReader Objects.
                                                             (line   25)
* setcontext() (no módulo decimal):      Objetos de contexto.
                                                             (line   17)
* setDaemon() (método threading.Thread): Thread objects.     (line  215)
* setdefault() (método dict):            Tipo mapeamento — dict.
                                                             (line  234)
* setdefault() (método http.cookies.Morsel): Objetos Morsel. (line  105)
* setdefaulttimeout() (no módulo socket): Outras funções<2>. (line  382)
* setdlopenflags() (no módulo sys):      sys — Parâmetros e funções específicas do sistema.
                                                             (line 1562)
* setDocumentLocator() (método xml.sax.handler.ContentHandler): ContentHandler Objects.
                                                             (line   10)
* setDTDHandler() (método xml.sax.xmlreader.XMLReader): XMLReader Objects.
                                                             (line   34)
* setegid() (no módulo os):              Parâmetros de processo.
                                                             (line  382)
* setEncoding() (método xml.sax.xmlreader.InputSource): InputSource Objects.
                                                             (line   22)
* setEntityResolver() (método xml.sax.xmlreader.XMLReader): XMLReader Objects.
                                                             (line   43)
* setErrorHandler() (método xml.sax.xmlreader.XMLReader): XMLReader Objects.
                                                             (line   54)
* seteuid() (no módulo os):              Parâmetros de processo.
                                                             (line  388)
* setFeature() (método xml.sax.xmlreader.XMLReader): XMLReader Objects.
                                                             (line   76)
* setfirstweekday() (método calendar.Calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line   58)
* setfirstweekday() (no módulo calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  362)
* setFormatter() (método logging.Handler): Objetos Handler.  (line   48)
* setframerate() (método wave.Wave_write): Objetos Wave_write.
                                                             (line   45)
* setgid() (no módulo os):               Parâmetros de processo.
                                                             (line  394)
* setgroups() (no módulo os):            Parâmetros de processo.
                                                             (line  400)
* seth() (no módulo turtle):             Movimentos de Turtle.
                                                             (line  170)
* setheading() (no módulo turtle):       Movimentos de Turtle.
                                                             (line  170)
* sethostname() (no módulo socket):      Outras funções<2>.  (line  389)
* setinputsizes() (método sqlite3.Cursor): Cursor objects.   (line  165)
* setitem() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  210)
* setitimer() (no módulo signal):        Conteúdo do módulo<5>.
                                                             (line  449)
* setLevel() (método logging.Handler):   Objetos Handler.    (line   35)
* setLevel() (método logging.Logger):    Objetos Logger.     (line  111)
* setlimit() (método sqlite3.Connection): Connection objects.
                                                             (line  615)
* setLocale() (método xml.sax.xmlreader.XMLReader): XMLReader Objects.
                                                             (line   60)
* setlocale() (no módulo locale):        locale — Serviços de internacionalização.
                                                             (line   26)
* setLoggerClass() (no módulo logging):  Funções de nível de módulo.
                                                             (line  323)
* setlogmask() (no módulo syslog):       syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line  103)
* setLogRecordFactory() (no módulo logging): Funções de nível de módulo.
                                                             (line  334)
* setMaxConns() (método urllib.request.CacheFTPHandler): CacheFTPHandler Objects.
                                                             (line   13)
* setmode() (no módulo msvcrt):          Operações com arquivos.
                                                             (line   39)
* setName() (método threading.Thread):   Thread objects.     (line  159)
* setnchannels() (método wave.Wave_write): Objetos Wave_write.
                                                             (line   37)
* setnframes() (método wave.Wave_write): Objetos Wave_write. (line   52)
* setns() (no módulo os):                Parâmetros de processo.
                                                             (line  415)
* setoutputsize() (método sqlite3.Cursor): Cursor objects.   (line  169)
* SetParamEntityParsing() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line   54)
* setparams() (método wave.Wave_write):  Objetos Wave_write. (line   64)
* setpassword() (método zipfile.ZipFile): Objetos ZipFile.   (line  251)
* setpgid() (no módulo os):              Parâmetros de processo.
                                                             (line  463)
* setpgrp() (no módulo os):              Parâmetros de processo.
                                                             (line  455)
* setpos() (método wave.Wave_read):      Objetos Wave_read.  (line   83)
* setpos() (no módulo turtle):           Movimentos de Turtle.
                                                             (line   75)
* setposition() (no módulo turtle):      Movimentos de Turtle.
                                                             (line   75)
* setpriority() (no módulo os):          Parâmetros de processo.
                                                             (line  471)
* setprofile_all_threads() (no módulo threading): Referência<2>.
                                                             (line  145)
* setprofile() (no módulo sys):          sys — Parâmetros e funções específicas do sistema.
                                                             (line 1584)
* setprofile() (no módulo threading):    Referência<2>.      (line  139)
* setProperty() (método xml.sax.xmlreader.XMLReader): XMLReader Objects.
                                                             (line   90)
* setPublicId() (método xml.sax.xmlreader.InputSource): InputSource Objects.
                                                             (line    6)
* setquota() (método imaplib.IMAP4):     Objetos IMAP4.      (line  267)
* setraw() (no módulo tty):              tty — Funções de controle de terminal.
                                                             (line   42)
* setrecursionlimit() (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line 1643)
* setregid() (no módulo os):             Parâmetros de processo.
                                                             (line  489)
* SetReparseDeferralEnabled() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line   82)
* setresgid() (no módulo os):            Parâmetros de processo.
                                                             (line  495)
* setresuid() (no módulo os):            Parâmetros de processo.
                                                             (line  503)
* setreuid() (no módulo os):             Parâmetros de processo.
                                                             (line  511)
* setrlimit() (no módulo resource):      Limites de recursos.
                                                             (line   33)
* setsampwidth() (método wave.Wave_write): Objetos Wave_write.
                                                             (line   41)
* setscrreg() (método curses.window):    Window Objects.     (line  516)
* setsid() (no módulo os):               Parâmetros de processo.
                                                             (line  524)
* setsockopt() (método socket.socket):   Socket Objects.     (line  561)
* setstate() (método codecs.IncrementalDecoder): IncrementalDecoder Objects.
                                                             (line   60)
* setstate() (método codecs.IncrementalEncoder): IncrementalEncoder Objects.
                                                             (line   51)
* setstate() (método random.Random):     Gerador alternativo.
                                                             (line   31)
* setstate() (no módulo random):         Funções de contabilidade.
                                                             (line   38)
* setStream() (método logging.StreamHandler): StreamHandler. (line   34)
* setswitchinterval (in module sys):     Estado de thread e a trava global do interpretador.
                                                             (line   15)
* setswitchinterval() (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line 1662)
* setswitchinterval() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  300)
* setSystemId() (método xml.sax.xmlreader.InputSource): InputSource Objects.
                                                             (line   14)
* setsyx() (no módulo curses):           Funções<6>.         (line  477)
* setTarget() (método logging.handlers.MemoryHandler): MemoryHandler.
                                                             (line   68)
* setter (C type):                       Defining Getters and Setters.
                                                             (line   42)
* settimeout() (método socket.socket):   Socket Objects.     (line  545)
* setTimeout() (método urllib.request.CacheFTPHandler): CacheFTPHandler Objects.
                                                             (line    9)
* settrace_all_threads() (no módulo threading): Referência<2>.
                                                             (line  123)
* settrace() (no módulo sys):            sys — Parâmetros e funções específicas do sistema.
                                                             (line 1675)
* settrace() (no módulo threading):      Referência<2>.      (line  117)
* setuid() (no módulo os):               Parâmetros de processo.
                                                             (line  531)
* setundobuffer() (no módulo turtle):    Métodos Especiais da Tartaruga.
                                                             (line   62)
* SETUP_ANNOTATIONS (opcode):            Instruções em bytecode do Python.
                                                             (line  440)
* SETUP_CLEANUP (opcode):                Instruções em bytecode do Python.
                                                             (line 1418)
* setup_environ() (método wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  200)
* SETUP_FINALLY (opcode):                Instruções em bytecode do Python.
                                                             (line 1411)
* setup_python() (método venv.EnvBuilder): API<2>.           (line  153)
* setup_scripts() (método venv.EnvBuilder): API<2>.          (line  161)
* setup_testing_defaults() (no módulo wsgiref.util): wsgiref util – Utilidades do ambiente WSGI.
                                                             (line   71)
* SETUP_WITH (opcode):                   Instruções em bytecode do Python.
                                                             (line 1426)
* setup() (método socketserver.BaseRequestHandler): Objetos manipulador de requisições.
                                                             (line   15)
* setUp() (método unittest.TestCase):    Casos de teste.     (line   34)
* setup() (no módulo turtle):            Métodos específico do Screen estes métodos não são herdados do TurtleScreen.
                                                             (line   21)
* setUpClass() (método unittest.TestCase): Casos de teste.   (line   58)
* setUpModule() (no módulo unittest):    setUpModule and tearDownModule.
                                                             (line    6)
* setupterm() (no módulo curses):        Funções<6>.         (line  482)
* SetValue() (no módulo winreg):         Funções<13>.        (line  427)
* SetValueEx() (no módulo winreg):       Funções<13>.        (line  458)
* setworldcoordinates() (no módulo turtle): Controle da Janela.
                                                             (line  118)
* setx() (no módulo turtle):             Movimentos de Turtle.
                                                             (line  142)
* setxattr() (no módulo os):             Atributos estendidos do Linux.
                                                             (line   60)
* sety() (no módulo turtle):             Movimentos de Turtle.
                                                             (line  156)
* SF_APPEND (no módulo stat):            stat — Interpretando resultados de stat.
                                                             (line  422)
* SF_ARCHIVED (no módulo stat):          stat — Interpretando resultados de stat.
                                                             (line  414)
* SF_DATALESS (no módulo stat):          stat — Interpretando resultados de stat.
                                                             (line  446)
* SF_FIRMLINK (no módulo stat):          stat — Interpretando resultados de stat.
                                                             (line  440)
* SF_IMMUTABLE (no módulo stat):         stat — Interpretando resultados de stat.
                                                             (line  418)
* SF_MNOWAIT (no módulo os):             Operações dos descritores de arquivos.
                                                             (line  816)
* SF_NOCACHE (no módulo os):             Operações dos descritores de arquivos.
                                                             (line  827)
* SF_NODISKIO (no módulo os):            Operações dos descritores de arquivos.
                                                             (line  816)
* SF_NOUNLINK (no módulo stat):          stat — Interpretando resultados de stat.
                                                             (line  432)
* SF_RESTRICTED (no módulo stat):        stat — Interpretando resultados de stat.
                                                             (line  426)
* SF_SETTABLE (no módulo stat):          stat — Interpretando resultados de stat.
                                                             (line  391)
* SF_SNAPSHOT (no módulo stat):          stat — Interpretando resultados de stat.
                                                             (line  436)
* SF_SUPPORTED (no módulo stat):         stat — Interpretando resultados de stat.
                                                             (line  397)
* SF_SYNC (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  816)
* SF_SYNTHETIC (no módulo stat):         stat — Interpretando resultados de stat.
                                                             (line  405)
* sha1() (no módulo hashlib):            Construtores.       (line   22)
* sha224() (no módulo hashlib):          Construtores.       (line   24)
* sha256() (no módulo hashlib):          Construtores.       (line   26)
* sha3_224() (no módulo hashlib):        Construtores.       (line   32)
* sha3_256() (no módulo hashlib):        Construtores.       (line   34)
* sha3_384() (no módulo hashlib):        Construtores.       (line   36)
* sha3_512() (no módulo hashlib):        Construtores.       (line   38)
* sha384() (no módulo hashlib):          Construtores.       (line   28)
* sha512() (no módulo hashlib):          Construtores.       (line   30)
* shake_128() (no módulo hashlib):       Resumos de comprimento variável de SHAKE.
                                                             (line    6)
* shake_256() (no módulo hashlib):       Resumos de comprimento variável de SHAKE.
                                                             (line    8)
* shape (atributo memoryview):           Memory Views.       (line  462)
* Shape (classe em turtle):              Classes Públicas.   (line   45)
* shape() (no módulo turtle):            Aparência.          (line    6)
* shapesize() (no módulo turtle):        Aparência.          (line   55)
* shapetransform() (no módulo turtle):   Aparência.          (line  143)
* share() (método socket.socket):        Socket Objects.     (line  593)
* ShareableList (classe em multiprocessing.shared_memory): multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line  288)
* ShareableList() (método multiprocessing.managers.SharedMemoryManager): multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line  247)
* shared_ciphers() (método ssl.SSLSocket): SSL Sockets.      (line  240)
* shared_memory (atributo sys._emscripten_info): sys — Parâmetros e funções específicas do sistema.
                                                             (line  379)
* SharedMemory (classe em multiprocessing.shared_memory): multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line   35)
* SharedMemory() (método multiprocessing.managers.SharedMemoryManager): multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line  242)
* SharedMemoryManager (classe em multiprocessing.managers): multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line  213)
* shearfactor() (no módulo turtle):      Aparência.          (line   87)
* Shelf (classe em shelve):              Restrições.         (line   27)
* shield() (no módulo asyncio):          Protegendo contra cancelamento.
                                                             (line    6)
* shift_path_info() (no módulo wsgiref.util): wsgiref util – Utilidades do ambiente WSGI.
                                                             (line   40)
* shift() (método decimal.Context):      Objetos de contexto.
                                                             (line  536)
* shift() (método decimal.Decimal):      Objetos de Decimal. (line  570)
* shlex (classe em shlex):               shlex — Simple lexical analysis.
                                                             (line   91)
* shm (atributo multiprocessing.shared_memory.ShareableList): multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line  365)
* SHORT_TIMEOUT (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line   84)
* shortDescription() (método unittest.TestCase): Casos de teste.
                                                             (line  781)
* shorten() (no módulo textwrap):        textwrap — Quebra automática e preenchimento de texto.
                                                             (line   50)
* shouldFlush() (método logging.handlers.BufferingHandler): MemoryHandler.
                                                             (line   36)
* shouldFlush() (método logging.handlers.MemoryHandler): MemoryHandler.
                                                             (line   72)
* shouldRollover() (método logging.handlers.RotatingFileHandler): RotatingFileHandler.
                                                             (line   55)
* shouldRollover() (método logging.handlers.TimedRotatingFileHandler): TimedRotatingFileHandler.
                                                             (line  130)
* shouldStop (atributo unittest.TestResult): Carregando e executando testes.
                                                             (line  286)
* show_code() (no módulo dis):           Funções de análise. (line   27)
* show_flag_values() (no módulo enum):   Utilities and Decorators.
                                                             (line  102)
* show() (método curses.panel.Panel):    Objetos painel.     (line   49)
* show() (método tkinter.commondialog.Dialog): tkinter commondialog — Modelos de janela de diálogo.
                                                             (line   16)
* show() (método tkinter.messagebox.Message): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line   83)
* showerror() (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  106)
* showinfo() (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line   92)
* showsyntaxerror() (método code.InteractiveInterpreter): Objetos de interpretador interativo.
                                                             (line   44)
* showtraceback() (método code.InteractiveInterpreter): Objetos de interpretador interativo.
                                                             (line   54)
* showturtle() (no módulo turtle):       Visibilidade.       (line   15)
* showwarning() (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  100)
* showwarning() (no módulo warnings):    Funções disponíveis.
                                                             (line   90)
* shuffle() (no módulo random):          Funções para sequências.
                                                             (line   54)
* SHUT_RD (no módulo socket):            Constantes<8>.      (line  375)
* SHUT_RDWR (no módulo socket):          Constantes<8>.      (line  375)
* SHUT_WR (no módulo socket):            Constantes<8>.      (line  375)
* ShutDown:                              queue — A synchronized queue class.
                                                             (line   94)
* shutdown_asyncgens() (método asyncio.loop): Executar e interromper o laço.
                                                             (line   59)
* shutdown_default_executor() (método asyncio.loop): Executar e interromper o laço.
                                                             (line   80)
* shutdown() (método asyncio.Queue):     Queue.              (line   84)
* shutdown() (método concurrent.futures.Executor): Executor Objects.
                                                             (line   53)
* shutdown() (método imaplib.IMAP4):     Objetos IMAP4.      (line  272)
* shutdown() (método multiprocessing.managers.BaseManager): Gerenciadores.
                                                             (line   86)
* shutdown() (método queue.Queue):       Terminating queues. (line    9)
* shutdown() (método socket.socket):     Socket Objects.     (line  584)
* shutdown() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line   57)
* shutdown() (no módulo logging):        Funções de nível de módulo.
                                                             (line  312)
* SI (no módulo curses.ascii):           curses ascii — Utilitários para caracteres ASCII.
                                                             (line   73)
* side_effect (atributo unittest.mock.Mock): A classe Mock.  (line  372)
* SIG_BLOCK (no módulo signal):          Conteúdo do módulo<5>.
                                                             (line  263)
* SIG_DFL (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line   45)
* SIG_IGN (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line   53)
* SIG_SETMASK (no módulo signal):        Conteúdo do módulo<5>.
                                                             (line  279)
* SIG_UNBLOCK (no módulo signal):        Conteúdo do módulo<5>.
                                                             (line  271)
* SIGABRT (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line   58)
* SIGALRM (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line   62)
* SIGBREAK (no módulo signal):           Conteúdo do módulo<5>.
                                                             (line   68)
* SIGBUS (no módulo signal):             Conteúdo do módulo<5>.
                                                             (line   74)
* SIGCHLD (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line   80)
* SIGCLD (no módulo signal):             Conteúdo do módulo<5>.
                                                             (line   86)
* SIGCONT (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line   92)
* SIGFPE (no módulo signal):             Conteúdo do módulo<5>.
                                                             (line   98)
* SIGHUP (no módulo signal):             Conteúdo do módulo<5>.
                                                             (line  108)
* SIGILL (no módulo signal):             Conteúdo do módulo<5>.
                                                             (line  115)
* SIGINT (C macro):                      Tratamento de sinal<2>.
                                                             (line    7)
* SIGINT (C macro) <1>:                  Tratamento de sinal<2>.
                                                             (line   34)
* SIGINT (no módulo signal):             Conteúdo do módulo<5>.
                                                             (line  119)
* siginterrupt() (no módulo signal):     Conteúdo do módulo<5>.
                                                             (line  528)
* SIGKILL (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  125)
* Sigmasks (classe em signal):           Conteúdo do módulo<5>.
                                                             (line   31)
* signal() (no módulo signal):           Conteúdo do módulo<5>.
                                                             (line  545)
* Signals (classe em signal):            Conteúdo do módulo<5>.
                                                             (line   17)
* signature (atributo inspect.BoundArguments): Introspecting callables with the Signature object.
                                                             (line  365)
* Signature (classe em inspect):         Introspecting callables with the Signature object.
                                                             (line   74)
* signature() (no módulo inspect):       Introspecting callables with the Signature object.
                                                             (line   12)
* sigpending() (no módulo signal):       Conteúdo do módulo<5>.
                                                             (line  575)
* SIGPIPE (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  133)
* SIGPROF (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  141)
* SIGQUIT (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  147)
* SIGSEGV (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  153)
* SIGSTKFLT (no módulo signal):          Conteúdo do módulo<5>.
                                                             (line  161)
* SIGSTOP (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  157)
* SIGTERM (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  173)
* sigtimedwait() (no módulo signal):     Conteúdo do módulo<5>.
                                                             (line  636)
* SIGUSR1 (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  177)
* SIGUSR2 (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  183)
* SIGVTALRM (no módulo signal):          Conteúdo do módulo<5>.
                                                             (line  189)
* sigwait() (no módulo signal):          Conteúdo do módulo<5>.
                                                             (line  590)
* sigwaitinfo() (no módulo signal):      Conteúdo do módulo<5>.
                                                             (line  607)
* SIGWINCH (no módulo signal):           Conteúdo do módulo<5>.
                                                             (line  195)
* SIGXCPU (no módulo signal):            Conteúdo do módulo<5>.
                                                             (line  201)
* SIMPLE (atributo inspect.BufferFlags): Buffer flags.       (line   15)
* Simple Mail Transfer Protocol:         smtplib — Cliente de protocolo SMTP.
                                                             (line    8)
* SimpleCookie (classe em http.cookies): http cookies — HTTP state management.
                                                             (line   49)
* simplefilter() (no módulo warnings):   Funções disponíveis.
                                                             (line  124)
* SimpleHandler (classe em wsgiref.handlers): wsgiref handlers – classes base de servidor/gateway.
                                                             (line   70)
* SimpleHTTPRequestHandler (classe em http.server): http server — HTTP servers.
                                                             (line  341)
* SimpleNamespace (classe em types):     Classes e funções de utilidades adicionais.
                                                             (line    6)
* SimpleQueue (classe em multiprocessing): Encadeamentos e filas.
                                                             (line  232)
* SimpleQueue (classe em queue):         queue — A synchronized queue class.
                                                             (line   75)
* simples;instrução:                     Instruções simples. (line    6)
* SimpleXMLRPCRequestHandler (classe em xmlrpc.server): xmlrpc server — Servidores XML-RPC básicos.
                                                             (line   68)
* SimpleXMLRPCServer (classe em xmlrpc.server): xmlrpc server — Servidores XML-RPC básicos.
                                                             (line   26)
* sin() (no módulo cmath):               Funções trigonométricas<2>.
                                                             (line   28)
* sin() (no módulo math):                Funções trigonométricas.
                                                             (line   34)
* SingleAddressHeader (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line  217)
* singledispatch() (no módulo functools): functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line  433)
* singledispatchmethod (classe em functools): functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line  607)
* Singleton;tupla:                       Sequências imutáveis.
                                                             (line   32)
* sinh() (no módulo cmath):              Funções hiperbólicas<2>.
                                                             (line   29)
* sinh() (no módulo math):               Funções hiperbólicas.
                                                             (line   25)
* sintaxe:                               Notação.            (line    6)
* SIO_KEEPALIVE_VALS (no módulo socket): Constantes<8>.      (line  247)
* SIO_LOOPBACK_FAST_PATH (no módulo socket): Constantes<8>.  (line  247)
* SIO_RCVALL (no módulo socket):         Constantes<8>.      (line  247)
* site opção de linha de comando; -user-base: Interface de linha de comando<14>.
                                                             (line   17)
* site opção de linha de comando; -user-site: Interface de linha de comando<14>.
                                                             (line   21)
* site_maps() (método urllib.robotparser.RobotFileParser): urllib robotparser — Analisador sintático de robots txt.
                                                             (line   73)
* site-packages;diretório:               site — Gancho de configuração específico do site.
                                                             (line   26)
* sitecustomize:                         Módulos de customização.
                                                             (line    6)
* sitecustomize <1>:                     Módulos de customização.
                                                             (line   18)
* sixtofour (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  318)
* size (atributo multiprocessing.shared_memory.SharedMemory): multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line  137)
* size (atributo struct.Struct):         Classes<3>.         (line   61)
* size (atributo tarfile.TarInfo):       Objetos TarInfo.    (line   65)
* size (atributo tracemalloc.Statistic): Statistic.          (line   19)
* size (atributo tracemalloc.StatisticDiff): StatisticDiff.  (line   26)
* size (atributo tracemalloc.Trace):     Trace.              (line   23)
* size_diff (atributo tracemalloc.StatisticDiff): StatisticDiff.
                                                             (line   32)
* SIZE_MAX (C macro):                    Objetos Inteiros.   (line  275)
* size() (método ftplib.FTP):            FTP objects.        (line  352)
* size() (método mmap.mmap):             mmap — Suporte a arquivos mapeados na memória.
                                                             (line  317)
* Sized (classe em collections.abc):     Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line   14)
* Sized (classe em typing):              Apelidos para outros ABCs em collections abc.
                                                             (line   69)
* sizeof_digit (atributo sys.int_info):  sys — Parâmetros e funções específicas do sistema.
                                                             (line 1211)
* sizeof() (no módulo ctypes):           Funções utilitárias.
                                                             (line  223)
* SKIP (no módulo doctest):              Flags opcionais.    (line   90)
* skip_if_broken_multiprocessing_synchronize() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  738)
* skip_unless_bind_unix_socket() (no módulo test.support.socket_helper): test support socket_helper — Utilities for socket tests.
                                                             (line   59)
* skip_unless_symlink() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  126)
* skip_unless_xattr() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  131)
* skip() (no módulo unittest):           Ignorando testes e falhas esperadas.
                                                             (line   86)
* skipIf() (no módulo unittest):         Ignorando testes e falhas esperadas.
                                                             (line   91)
* skipinitialspace (atributo csv.Dialect): Dialetos e parâmetros de formatação.
                                                             (line   84)
* skipped (atributo doctest.TestResults): TestResults objects.
                                                             (line   16)
* skipped (atributo unittest.TestResult): Carregando e executando testes.
                                                             (line  261)
* skippedEntity() (método xml.sax.handler.ContentHandler): ContentHandler Objects.
                                                             (line  174)
* skips (atributo doctest.DocTestRunner): DocTestRunner objects.
                                                             (line  143)
* SkipTest:                              Ignorando testes e falhas esperadas.
                                                             (line  107)
* skipTest() (método unittest.TestCase): Casos de teste.     (line  105)
* skipUnless() (no módulo unittest):     Ignorando testes e falhas esperadas.
                                                             (line   95)
* SLASH (no módulo token):               token — Constantes usadas com árvores de análises do Python.
                                                             (line  210)
* SLASHEQUAL (no módulo token):          token — Constantes usadas com árvores de análises do Python.
                                                             (line  276)
* sleep() (no módulo asyncio):           Dormindo.           (line    6)
* sleep() (no módulo time):              Funções<5>.         (line  272)
* sleeping_retry() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  228)
* Slice (classe em ast):                 Subscrição.         (line   27)
* slice (classe interna):                Funções embutidas<3>.
                                                             (line 1842)
* slow_callback_duration (atributo asyncio.loop): Habilitando o modo de debug.
                                                             (line   22)
* SMALLEST (no módulo test.support):     test support — Utilitários para o conjunto de teste do Python.
                                                             (line  199)
* SMTP (classe em smtplib):              smtplib — Cliente de protocolo SMTP.
                                                             (line   21)
* SMTP (no módulo email.policy):         email policy Policy Objects.
                                                             (line  510)
* smtp_code (atributo smtplib.SMTPResponseException): smtplib — Cliente de protocolo SMTP.
                                                             (line  147)
* smtp_error (atributo smtplib.SMTPResponseException): smtplib — Cliente de protocolo SMTP.
                                                             (line  151)
* SMTP_SSL (classe em smtplib):          smtplib — Cliente de protocolo SMTP.
                                                             (line   75)
* SMTP;protocolo:                        smtplib — Cliente de protocolo SMTP.
                                                             (line    8)
* SMTPAuthenticationError:               smtplib — Cliente de protocolo SMTP.
                                                             (line  189)
* SMTPConnectError:                      smtplib — Cliente de protocolo SMTP.
                                                             (line  175)
* SMTPDataError:                         smtplib — Cliente de protocolo SMTP.
                                                             (line  171)
* SMTPException:                         smtplib — Cliente de protocolo SMTP.
                                                             (line  127)
* SMTPHandler (classe em logging.handlers): SMTPHandler.     (line   10)
* SMTPHeloError:                         smtplib — Cliente de protocolo SMTP.
                                                             (line  179)
* SMTPNotSupportedError:                 smtplib — Cliente de protocolo SMTP.
                                                             (line  183)
* SMTPRecipientsRefused:                 smtplib — Cliente de protocolo SMTP.
                                                             (line  161)
* SMTPResponseException:                 smtplib — Cliente de protocolo SMTP.
                                                             (line  141)
* SMTPSenderRefused:                     smtplib — Cliente de protocolo SMTP.
                                                             (line  155)
* SMTPServerDisconnected:                smtplib — Cliente de protocolo SMTP.
                                                             (line  135)
* SMTPUTF8 (no módulo email.policy):     email policy Policy Objects.
                                                             (line  516)
* Snapshot (classe em tracemalloc):      Snapshot.           (line    6)
* SND_ALIAS (no módulo winsound):        winsound — Interface de reprodução de som para o Windows.
                                                             (line   50)
* SND_APPLICATION (no módulo winsound):  winsound — Interface de reprodução de som para o Windows.
                                                             (line  137)
* SND_ASYNC (no módulo winsound):        winsound — Interface de reprodução de som para o Windows.
                                                             (line  116)
* SND_FILENAME (no módulo winsound):     winsound — Interface de reprodução de som para o Windows.
                                                             (line   45)
* SND_LOOP (no módulo winsound):         winsound — Interface de reprodução de som para o Windows.
                                                             (line   92)
* SND_MEMORY (no módulo winsound):       winsound — Interface de reprodução de som para o Windows.
                                                             (line   98)
* SND_NODEFAULT (no módulo winsound):    winsound — Interface de reprodução de som para o Windows.
                                                             (line  121)
* SND_NOSTOP (no módulo winsound):       winsound — Interface de reprodução de som para o Windows.
                                                             (line  126)
* SND_NOWAIT (no módulo winsound):       winsound — Interface de reprodução de som para o Windows.
                                                             (line  130)
* SND_PURGE (no módulo winsound):        winsound — Interface de reprodução de som para o Windows.
                                                             (line  109)
* sni_callback (atributo ssl.SSLContext): SSL Contexts.      (line  285)
* sniff() (método csv.Sniffer):          Conteúdo do módulo<3>.
                                                             (line  244)
* Sniffer (classe em csv):               Conteúdo do módulo<3>.
                                                             (line  237)
* SO (no módulo curses.ascii):           curses ascii — Utilitários para caracteres ASCII.
                                                             (line   69)
* SO_INCOMING_CPU (no módulo socket):    Constantes<8>.      (line  335)
* sock_accept() (método asyncio.loop):   Trabalhando com objetos soquete diretamente.
                                                             (line  109)
* SOCK_CLOEXEC (no módulo socket):       Constantes<8>.      (line   38)
* sock_connect() (método asyncio.loop):  Trabalhando com objetos soquete diretamente.
                                                             (line   90)
* SOCK_DGRAM (no módulo socket):         Constantes<8>.      (line   27)
* SOCK_MAX_SIZE (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  131)
* SOCK_NONBLOCK (no módulo socket):      Constantes<8>.      (line   38)
* SOCK_RAW (no módulo socket):           Constantes<8>.      (line   27)
* SOCK_RDM (no módulo socket):           Constantes<8>.      (line   27)
* sock_recv_into() (método asyncio.loop): Trabalhando com objetos soquete diretamente.
                                                             (line   27)
* sock_recv() (método asyncio.loop):     Trabalhando com objetos soquete diretamente.
                                                             (line   13)
* sock_recvfrom_into() (método asyncio.loop): Trabalhando com objetos soquete diretamente.
                                                             (line   49)
* sock_recvfrom() (método asyncio.loop): Trabalhando com objetos soquete diretamente.
                                                             (line   38)
* sock_sendall() (método asyncio.loop):  Trabalhando com objetos soquete diretamente.
                                                             (line   60)
* sock_sendfile() (método asyncio.loop): Trabalhando com objetos soquete diretamente.
                                                             (line  132)
* sock_sendto() (método asyncio.loop):   Trabalhando com objetos soquete diretamente.
                                                             (line   79)
* SOCK_SEQPACKET (no módulo socket):     Constantes<8>.      (line   27)
* SOCK_STREAM (no módulo socket):        Constantes<8>.      (line   27)
* socket (atributo socketserver.BaseServer): Objetos Server<2>.
                                                             (line   93)
* socket (classe em socket):             Criação de sockets. (line    8)
* socket_type (atributo socketserver.BaseServer): Objetos Server<2>.
                                                             (line  117)
* socket() (in module socket):           select — Waiting for I/O completion.
                                                             (line  145)
* socket() (método imaplib.IMAP4):       Objetos IMAP4.      (line  277)
* SocketHandler (classe em logging.handlers): SocketHandler. (line   10)
* socketpair() (no módulo socket):       Criação de sockets. (line   64)
* sockets (atributo asyncio.Server):     Objetos Server.     (line  128)
* SocketType (no módulo socket):         Criação de sockets. (line  186)
* SOFT_KEYWORD (no módulo token):        token — Constantes usadas com árvores de análises do Python.
                                                             (line  154)
* softkwlist (no módulo keyword):        keyword — Testando palavras reservadas do Python.
                                                             (line   34)
* SOH (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   22)
* SOL_ALG (no módulo socket):            Constantes<8>.      (line  263)
* SOL_RDS (no módulo socket):            Constantes<8>.      (line  234)
* soma de verificação;Do inglês; Cyclic Redundancy Check: zlib — Compactação compatível com gzip.
                                                             (line  127)
* SOMAXCONN (no módulo socket):          Constantes<8>.      (line   54)
* sort_stats() (método pstats.Stats):    A classe Stats.     (line   67)
* sort() (método imaplib.IMAP4):         Objetos IMAP4.      (line  281)
* sort() (método list):                  Listas<2>.          (line   39)
* sortdict() (no módulo test.support):   test support — Utilitários para o conjunto de teste do Python.
                                                             (line  281)
* sortTestMethodsUsing (atributo unittest.TestLoader): Carregando e executando testes.
                                                             (line  197)
* source (atributo doctest.Example):     Example Objects.    (line   17)
* source (atributo shlex.shlex):         shlex Objects.      (line  151)
* source (pdb command):                  Comandos de depuração.
                                                             (line  305)
* SOURCE_DATE_EPOCH:                     py_compile<3>.      (line    7)
* SOURCE_DATE_EPOCH <1>:                 Biblioteca<137>.    (line  452)
* SOURCE_DATE_EPOCH <2>:                 Construção<65>.     (line   15)
* SOURCE_DATE_EPOCH <3>:                 py_compile — Compila arquivos fonte do Python.
                                                             (line   68)
* SOURCE_DATE_EPOCH <4>:                 py_compile — Compila arquivos fonte do Python.
                                                             (line   88)
* SOURCE_DATE_EPOCH <5>:                 py_compile — Compila arquivos fonte do Python.
                                                             (line   92)
* SOURCE_DATE_EPOCH <6>:                 Uso na linha de comando<12>.
                                                             (line  100)
* source_from_cache() (no módulo importlib.util): importlib util – Utility code for importers.
                                                             (line   59)
* source_hash() (no módulo importlib.util): importlib util – Utility code for importers.
                                                             (line  164)
* SOURCE_SUFFIXES (no módulo importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line   13)
* source_to_code() (método estático importlib.abc.InspectLoader): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  253)
* SourceFileLoader (classe em importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  212)
* sourcehook() (método shlex.shlex):     shlex Objects.      (line   26)
* SourcelessFileLoader (classe em importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  252)
* SourceLoader (classe em importlib.abc): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  340)
* SP (no módulo curses.ascii):           curses ascii — Utilitários para caracteres ASCII.
                                                             (line  126)
* span() (método re.Match):              Objetos correspondência.
                                                             (line  176)
* sparse (atributo tarfile.TarInfo):     Objetos TarInfo.    (line  157)
* spawn_python() (no módulo test.support.script_helper): test support script_helper — Utilities for the Python execution tests.
                                                             (line   69)
* spawn() (no módulo pty):               pty — Utilitários de pseudoterminal.
                                                             (line   43)
* spawnl() (no módulo os):               Gerenciamento de processo.
                                                             (line  620)
* spawnle() (no módulo os):              Gerenciamento de processo.
                                                             (line  620)
* spawnlp() (no módulo os):              Gerenciamento de processo.
                                                             (line  620)
* spawnlpe() (no módulo os):             Gerenciamento de processo.
                                                             (line  620)
* spawnv() (no módulo os):               Gerenciamento de processo.
                                                             (line  620)
* spawnve() (no módulo os):              Gerenciamento de processo.
                                                             (line  620)
* spawnvp() (no módulo os):              Gerenciamento de processo.
                                                             (line  620)
* spawnvpe() (no módulo os):             Gerenciamento de processo.
                                                             (line  620)
* spec de módulo:                        Localizadores e carregadores.
                                                             (line    6)
* spec de módulo <1>:                    Glossário.          (line 1146)
* spec_from_file_location() (no módulo importlib.util): importlib util – Utility code for importers.
                                                             (line  151)
* spec_from_loader() (no módulo importlib.util): importlib util – Utility code for importers.
                                                             (line  140)
* SpecialFileError:                      Operações de diretório e arquivos.
                                                             (line   56)
* SpecialFileError <1>:                  tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  261)
* specified_attributes (atributo xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  205)
* speed() (no módulo turtle):            Movimentos de Turtle.
                                                             (line  343)
* Spinbox (classe em tkinter.ttk):       ttk Spinbox.        (line    6)
* SPLICE_F_MORE (no módulo os):          Operações dos descritores de arquivos.
                                                             (line  889)
* SPLICE_F_MOVE (no módulo os):          Operações dos descritores de arquivos.
                                                             (line  889)
* SPLICE_F_NONBLOCK (no módulo os):      Operações dos descritores de arquivos.
                                                             (line  889)
* splice() (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  858)
* split() (método BaseExceptionGroup):   Grupos de exceções. (line   76)
* split() (método bytearray):            Operações com Bytes e Bytearray.
                                                             (line  410)
* split() (método bytes):                Operações com Bytes e Bytearray.
                                                             (line  410)
* split() (método re.Pattern):           Objetos expressão regular.
                                                             (line   80)
* split() (método str):                  String Methods<2>.  (line  657)
* split() (no módulo os.path):           os path — Manipulações comuns de nomes de caminhos.
                                                             (line  518)
* split() (no módulo re):                Funções<2>.         (line   86)
* split() (no módulo shlex):             shlex — Simple lexical analysis.
                                                             (line   17)
* splitdrive() (no módulo os.path):      os path — Manipulações comuns de nomes de caminhos.
                                                             (line  534)
* splitext() (no módulo os.path):        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  594)
* splitlines() (método bytearray):       Operações com Bytes e Bytearray.
                                                             (line  668)
* splitlines() (método bytes):           Operações com Bytes e Bytearray.
                                                             (line  668)
* splitlines() (método str):             String Methods<2>.  (line  717)
* SplitResult (classe em urllib.parse):  Structured Parse Results.
                                                             (line   55)
* SplitResultBytes (classe em urllib.parse): Structured Parse Results.
                                                             (line   82)
* splitroot() (no módulo os.path):       os path — Manipulações comuns de nomes de caminhos.
                                                             (line  560)
* SpooledTemporaryFile (classe em tempfile): tempfile — Generate temporary files and directories.
                                                             (line  152)
* sprintf, estilo de formatação:         Formatação de string no estilo printf.
                                                             (line    6)
* sprintf, estilo de formatação <1>:     Estilo de Formatação de bytes printf-style.
                                                             (line    6)
* SQLITE_DBCONFIG_DEFENSIVE (no módulo sqlite3): Constantes do módulo.
                                                             (line  147)
* SQLITE_DBCONFIG_DQS_DDL (no módulo sqlite3): Constantes do módulo.
                                                             (line  147)
* SQLITE_DBCONFIG_DQS_DML (no módulo sqlite3): Constantes do módulo.
                                                             (line  147)
* SQLITE_DBCONFIG_ENABLE_FKEY (no módulo sqlite3): Constantes do módulo.
                                                             (line  147)
* SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER (no módulo sqlite3): Constantes do módulo.
                                                             (line  147)
* SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION (no módulo sqlite3): Constantes do módulo.
                                                             (line  147)
* SQLITE_DBCONFIG_ENABLE_QPSG (no módulo sqlite3): Constantes do módulo.
                                                             (line  147)
* SQLITE_DBCONFIG_ENABLE_TRIGGER (no módulo sqlite3): Constantes do módulo.
                                                             (line  147)
* SQLITE_DBCONFIG_ENABLE_VIEW (no módulo sqlite3): Constantes do módulo.
                                                             (line  147)
* SQLITE_DBCONFIG_LEGACY_ALTER_TABLE (no módulo sqlite3): Constantes do módulo.
                                                             (line  147)
* SQLITE_DBCONFIG_LEGACY_FILE_FORMAT (no módulo sqlite3): Constantes do módulo.
                                                             (line  147)
* SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE (no módulo sqlite3): Constantes do módulo.
                                                             (line  147)
* SQLITE_DBCONFIG_RESET_DATABASE (no módulo sqlite3): Constantes do módulo.
                                                             (line  147)
* SQLITE_DBCONFIG_TRIGGER_EQP (no módulo sqlite3): Constantes do módulo.
                                                             (line  147)
* SQLITE_DBCONFIG_TRUSTED_SCHEMA (no módulo sqlite3): Constantes do módulo.
                                                             (line  147)
* SQLITE_DBCONFIG_WRITABLE_SCHEMA (no módulo sqlite3): Constantes do módulo.
                                                             (line  147)
* SQLITE_DENY (no módulo sqlite3):       Constantes do módulo.
                                                             (line   49)
* sqlite_errorcode (atributo sqlite3.Error): Exceções<7>.    (line   24)
* sqlite_errorname (atributo sqlite3.Error): Exceções<7>.    (line   30)
* SQLITE_IGNORE (no módulo sqlite3):     Constantes do módulo.
                                                             (line   49)
* SQLITE_OK (no módulo sqlite3):         Constantes do módulo.
                                                             (line   49)
* sqlite_version (no módulo sqlite3):    Constantes do módulo.
                                                             (line   78)
* sqlite_version_info (no módulo sqlite3): Constantes do módulo.
                                                             (line   83)
* sqrt() (método decimal.Context):       Objetos de contexto.
                                                             (line  540)
* sqrt() (método decimal.Decimal):       Objetos de Decimal. (line  582)
* sqrt() (no módulo cmath):              Funções de potência e logarítmicas.
                                                             (line   22)
* sqrt() (no módulo math):               Funções de potências exponenciais e logarítmicas.
                                                             (line   91)
* ssizeargfunc (C type):                 Slot Type typedefs. (line  124)
* ssizeobjargproc (C type):              Slot Type typedefs. (line  128)
* SSL:                                   ssl — Invólucro de TLS/SSL para objetos socket.
                                                             (line    8)
* ssl_version (atributo ftplib.FTP_TLS): FTP_TLS objects.    (line   84)
* SSLCertVerificationError:              Exceções<16>.       (line   79)
* SSLContext (classe em ssl):            SSL Contexts.       (line   14)
* SSLEOFError:                           Exceções<16>.       (line   71)
* SSLError:                              Exceções<16>.       (line    6)
* SSLErrorNumber (classe em ssl):        Constantes<9>.      (line  550)
* SSLKEYLOGFILE:                         Criação de contexto.
                                                             (line   34)
* SSLKEYLOGFILE <1>:                     Criação de contexto.
                                                             (line   83)
* SSLObject (classe em ssl):             Підтримка BIO пам’яті<2>.
                                                             (line   30)
* sslobject_class (atributo ssl.SSLContext): SSL Contexts.   (line  472)
* SSLSession (classe em ssl):            SSL session.        (line    8)
* SSLSocket (classe em ssl):             SSL Sockets.        (line    6)
* sslsocket_class (atributo ssl.SSLContext): SSL Contexts.   (line  446)
* SSLSyscallError:                       Exceções<16>.       (line   62)
* SSLv3 (atributo ssl.TLSVersion):       Constantes<9>.      (line  572)
* SSLWantReadError:                      Exceções<16>.       (line   44)
* SSLWantWriteError:                     Exceções<16>.       (line   53)
* SSLZeroReturnError:                    Exceções<16>.       (line   35)
* st_atime (atributo os.stat_result):    Arquivos e diretórios.
                                                             (line 1252)
* ST_ATIME (no módulo stat):             stat — Interpretando resultados de stat.
                                                             (line  165)
* st_atime_ns (atributo os.stat_result): Arquivos e diretórios.
                                                             (line 1271)
* st_birthtime (atributo os.stat_result): Arquivos e diretórios.
                                                             (line 1297)
* st_birthtime_ns (atributo os.stat_result): Arquivos e diretórios.
                                                             (line 1306)
* st_blksize (atributo os.stat_result):  Arquivos e diretórios.
                                                             (line 1345)
* st_blocks (atributo os.stat_result):   Arquivos e diretórios.
                                                             (line 1339)
* st_creator (atributo os.stat_result):  Arquivos e diretórios.
                                                             (line 1382)
* st_ctime (atributo os.stat_result):    Arquivos e diretórios.
                                                             (line 1261)
* ST_CTIME (no módulo stat):             stat — Interpretando resultados de stat.
                                                             (line  173)
* st_ctime_ns (atributo os.stat_result): Arquivos e diretórios.
                                                             (line 1285)
* st_dev (atributo os.stat_result):      Arquivos e diretórios.
                                                             (line 1227)
* ST_DEV (no módulo stat):               stat — Interpretando resultados de stat.
                                                             (line  144)
* st_file_attributes (atributo os.stat_result): Arquivos e diretórios.
                                                             (line 1393)
* st_flags (atributo os.stat_result):    Arquivos e diretórios.
                                                             (line 1355)
* st_fstype (atributo os.stat_result):   Arquivos e diretórios.
                                                             (line 1370)
* st_gen (atributo os.stat_result):      Arquivos e diretórios.
                                                             (line 1363)
* st_gid (atributo os.stat_result):      Arquivos e diretórios.
                                                             (line 1239)
* ST_GID (no módulo stat):               stat — Interpretando resultados de stat.
                                                             (line  156)
* st_ino (atributo os.stat_result):      Arquivos e diretórios.
                                                             (line 1217)
* ST_INO (no módulo stat):               stat — Interpretando resultados de stat.
                                                             (line  140)
* st_mode (atributo os.stat_result):     Arquivos e diretórios.
                                                             (line 1212)
* ST_MODE (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  136)
* st_mtime (atributo os.stat_result):    Arquivos e diretórios.
                                                             (line 1256)
* ST_MTIME (no módulo stat):             stat — Interpretando resultados de stat.
                                                             (line  169)
* st_mtime_ns (atributo os.stat_result): Arquivos e diretórios.
                                                             (line 1278)
* st_nlink (atributo os.stat_result):    Arquivos e diretórios.
                                                             (line 1231)
* ST_NLINK (no módulo stat):             stat — Interpretando resultados de stat.
                                                             (line  148)
* st_rdev (atributo os.stat_result):     Arquivos e diretórios.
                                                             (line 1351)
* st_reparse_tag (atributo os.stat_result): Arquivos e diretórios.
                                                             (line 1403)
* st_rsize (atributo os.stat_result):    Arquivos e diretórios.
                                                             (line 1378)
* st_size (atributo os.stat_result):     Arquivos e diretórios.
                                                             (line 1243)
* ST_SIZE (no módulo stat):              stat — Interpretando resultados de stat.
                                                             (line  160)
* st_type (atributo os.stat_result):     Arquivos e diretórios.
                                                             (line 1386)
* st_uid (atributo os.stat_result):      Arquivos e diretórios.
                                                             (line 1235)
* ST_UID (no módulo stat):               stat — Interpretando resultados de stat.
                                                             (line  152)
* st() (no módulo turtle):               Visibilidade.       (line   15)
* stack (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line   75)
* stack viewer:                          Debug menu Shell window only.
                                                             (line   15)
* stack_effect() (no módulo dis):        Funções de análise. (line  190)
* stack_size() (no módulo _thread):      _thread— API de segmentação de baixo nível.
                                                             (line  115)
* stack_size() (no módulo threading):    Referência<2>.      (line  162)
* stack() (no módulo inspect):           A pilha to interpretador.
                                                             (line  171)
* stackable;streams:                     codecs — Codec registry and base classes.
                                                             (line    8)
* StackSummary (classe em traceback):    StackSummary Objects.
                                                             (line   10)
* stamp() (no módulo turtle):            Movimentos de Turtle.
                                                             (line  285)
* Standard C:                            Literais de string e bytes.
                                                             (line   75)
* standard_b64decode() (no módulo base64): RFC 4648 Encodings.
                                                             (line   55)
* standard_b64encode() (no módulo base64): RFC 4648 Encodings.
                                                             (line   50)
* standend() (método curses.window):     Window Objects.     (line  521)
* standout() (método curses.window):     Window Objects.     (line  526)
* STAR (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line  207)
* STAREQUAL (no módulo token):           token — Constantes usadas com árvores de análises do Python.
                                                             (line  273)
* starmap_async() (método multiprocessing.pool.Pool): Process Pools.
                                                             (line  166)
* starmap() (método multiprocessing.pool.Pool): Process Pools.
                                                             (line  155)
* starmap() (no módulo itertools):       Funções do intertools.
                                                             (line  558)
* Starred (classe em ast):               Variáveis.          (line   41)
* start (atributo de objeto fatia):      Objetos slice.      (line   10)
* start (atributo de objeto fatia) <1>:  Fatiamentos.        (line   27)
* start (atributo range):                Intervalos.         (line   61)
* start (atributo slice):                Funções embutidas<3>.
                                                             (line 1856)
* start (atributo UnicodeError):         Exceções concretas. (line  466)
* start_color() (no módulo curses):      Funções<6>.         (line  490)
* start_new_thread() (no módulo _thread): _thread— API de segmentação de baixo nível.
                                                             (line   32)
* start_ns() (método xml.etree.ElementTree.TreeBuilder): TreeBuilder Objects.
                                                             (line   76)
* start_server() (no módulo asyncio):    Streams.            (line   76)
* start_serving() (método asyncio.Server): Objetos Server.   (line   75)
* start_threads() (no módulo test.support.threading_helper): test support threading_helper — Utilities for threading tests.
                                                             (line   22)
* start_tls() (método asyncio.loop):     Atualizando TLS.    (line    6)
* start_tls() (método asyncio.StreamWriter): StreamWriter.   (line   86)
* start_unix_server() (no módulo asyncio): Streams.          (line  146)
* start() (método logging.handlers.QueueListener): QueueListener.
                                                             (line   75)
* start() (método multiprocessing.managers.BaseManager): Gerenciadores.
                                                             (line   59)
* start() (método multiprocessing.Process): Process e exceções.
                                                             (line   92)
* start() (método re.Match):             Objetos correspondência.
                                                             (line  150)
* start() (método threading.Thread):     Thread objects.     (line   93)
* start() (método tkinter.ttk.Progressbar): ttk Progressbar. (line    8)
* start() (método xml.etree.ElementTree.TreeBuilder): TreeBuilder Objects.
                                                             (line   43)
* start() (no módulo tracemalloc):       Funções<11>.        (line   68)
* StartBoundaryNotFoundDefect:           email errors Classes de Exceção e Defeito.
                                                             (line   80)
* startCDATA() (método xml.sax.handler.LexicalHandler): LexicalHandler Objects.
                                                             (line   32)
* StartCdataSectionHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  391)
* StartDoctypeDeclHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  274)
* startDocument() (método xml.sax.handler.ContentHandler): ContentHandler Objects.
                                                             (line   32)
* startDTD() (método xml.sax.handler.LexicalHandler): LexicalHandler Objects.
                                                             (line   23)
* startElement() (método xml.sax.handler.ContentHandler): ContentHandler Objects.
                                                             (line   82)
* StartElementHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  312)
* startElementNS() (método xml.sax.handler.ContentHandler): ContentHandler Objects.
                                                             (line  101)
* STARTF_FORCEOFFFEEDBACK (no módulo subprocess): Constantes do Windows.
                                                             (line   47)
* STARTF_FORCEONFEEDBACK (no módulo subprocess): Constantes do Windows.
                                                             (line   38)
* STARTF_USESHOWWINDOW (no módulo subprocess): Constantes do Windows.
                                                             (line   33)
* STARTF_USESTDHANDLES (no módulo subprocess): Constantes do Windows.
                                                             (line   27)
* startfile() (no módulo os):            Gerenciamento de processo.
                                                             (line  741)
* StartNamespaceDeclHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  370)
* startPrefixMapping() (método xml.sax.handler.ContentHandler): ContentHandler Objects.
                                                             (line   49)
* StartResponse (classe em wsgiref.types): wsgiref types – WSGI types for static type checking.
                                                             (line   11)
* startswith() (método bytearray):       Operações com Bytes e Bytearray.
                                                             (line  260)
* startswith() (método bytes):           Operações com Bytes e Bytearray.
                                                             (line  260)
* startswith() (método str):             String Methods<2>.  (line  793)
* startTest() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  350)
* startTestRun() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  359)
* starttls() (método imaplib.IMAP4):     Objetos IMAP4.      (line  299)
* starttls() (método smtplib.SMTP):      Objetos SMTP.       (line  185)
* STARTUPINFO (classe em subprocess):    Windows Popen Helpers.
                                                             (line    9)
* stat_result (classe em os):            Arquivos e diretórios.
                                                             (line 1204)
* stat() (método os.DirEntry):           Arquivos e diretórios.
                                                             (line 1103)
* stat() (método pathlib.Path):          Consultando tipo de arquivo e status.
                                                             (line   13)
* stat() (método poplib.POP3):           Objetos POP3.       (line   52)
* stat() (no módulo os):                 Arquivos e diretórios.
                                                             (line 1143)
* state() (método tkinter.ttk.Widget):   ttk Widget.         (line   25)
* static_order() (método graphlib.TopologicalSorter): graphlib — Funcionalidade para operar com estruturas do tipo grafo.
                                                             (line  165)
* Statistic (classe em tracemalloc):     Statistic.          (line    6)
* StatisticDiff (classe em tracemalloc): StatisticDiff.      (line    6)
* statistics() (método tracemalloc.Snapshot): Snapshot.      (line   56)
* StatisticsError:                       Exceções<5>.        (line    8)
* Stats (classe em pstats):              A classe Stats.     (line    9)
* status (atributo http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   61)
* status (atributo urllib.response.addinfourl): urllib response — Response classes used by urllib.
                                                             (line   24)
* status() (método imaplib.IMAP4):       Objetos IMAP4.      (line  312)
* statvfs() (no módulo os):              Arquivos e diretórios.
                                                             (line 1456)
* STD_ERROR_HANDLE (no módulo subprocess): Constantes do Windows.
                                                             (line   18)
* STD_INPUT_HANDLE (no módulo subprocess): Constantes do Windows.
                                                             (line    8)
* STD_OUTPUT_HANDLE (no módulo subprocess): Constantes do Windows.
                                                             (line   13)
* stderr (atributo asyncio.subprocess.Process): Interagindo com subprocessos.
                                                             (line  128)
* stderr (atributo subprocess.CalledProcessError): Usando o módulo subprocess.
                                                             (line  239)
* stderr (atributo subprocess.CompletedProcess): Usando o módulo subprocess.
                                                             (line  132)
* stderr (atributo subprocess.Popen):    Objetos Popen.      (line  135)
* stderr (atributo subprocess.TimeoutExpired): Usando o módulo subprocess.
                                                             (line  199)
* stderr (no módulo sys):                Objetos de E/S também conhecidos como objetos arquivo.
                                                             (line    6)
* stderr (no módulo sys) <1>:            sys — Parâmetros e funções específicas do sistema.
                                                             (line 1892)
* stderr (no módulo sys) <2>:            Sub-interpreter support.
                                                             (line  112)
* stderr (no módulo sys) <3>:            Sub-interpreter support.
                                                             (line  197)
* stdev (atributo statistics.NormalDist): Objetos NormalDist.
                                                             (line   37)
* stdev() (no módulo statistics):        Detalhes das funções.
                                                             (line  455)
* stdin (atributo asyncio.subprocess.Process): Interagindo com subprocessos.
                                                             (line  118)
* stdin (atributo subprocess.Popen):     Objetos Popen.      (line  116)
* stdin (no módulo sys):                 Objetos de E/S também conhecidos como objetos arquivo.
                                                             (line    6)
* stdin (no módulo sys) <1>:             sys — Parâmetros e funções específicas do sistema.
                                                             (line 1892)
* stdin (no módulo sys) <2>:             Sub-interpreter support.
                                                             (line  112)
* stdin (no módulo sys) <3>:             Sub-interpreter support.
                                                             (line  197)
* stdio:                                 Objetos de E/S também conhecidos como objetos arquivo.
                                                             (line    6)
* stdlib:                                Glossário.          (line 1660)
* stdlib_module_names (no módulo sys):   sys — Parâmetros e funções específicas do sistema.
                                                             (line 1985)
* stdout (atributo asyncio.subprocess.Process): Interagindo com subprocessos.
                                                             (line  123)
* stdout (atributo subprocess.CalledProcessError): Usando o módulo subprocess.
                                                             (line  235)
* stdout (atributo subprocess.CompletedProcess): Usando o módulo subprocess.
                                                             (line  121)
* stdout (atributo subprocess.Popen):    Objetos Popen.      (line  125)
* stdout (atributo subprocess.TimeoutExpired): Usando o módulo subprocess.
                                                             (line  195)
* STDOUT (no módulo subprocess):         Usando o módulo subprocess.
                                                             (line  161)
* stdout (no módulo sys):                Objetos de E/S também conhecidos como objetos arquivo.
                                                             (line    6)
* stdout (no módulo sys) <1>:            sys — Parâmetros e funções específicas do sistema.
                                                             (line 1892)
* stdout (no módulo sys) <2>:            Sub-interpreter support.
                                                             (line  112)
* stdout (no módulo sys) <3>:            Sub-interpreter support.
                                                             (line  197)
* stem (atributo pathlib.PurePath):      Métodos e propriedades.
                                                             (line  164)
* step (atributo de objeto fatia):       Objetos slice.      (line   10)
* step (atributo de objeto fatia) <1>:   Fatiamentos.        (line   27)
* step (atributo range):                 Intervalos.         (line   70)
* step (atributo slice):                 Funções embutidas<3>.
                                                             (line 1860)
* step (pdb command):                    Comandos de depuração.
                                                             (line  216)
* step() (método tkinter.ttk.Progressbar): ttk Progressbar.  (line   15)
* stls() (método poplib.POP3):           Objetos POP3.       (line  114)
* stop (atributo de objeto fatia):       Objetos slice.      (line   10)
* stop (atributo de objeto fatia) <1>:   Fatiamentos.        (line   27)
* stop (atributo range):                 Intervalos.         (line   66)
* stop (atributo slice):                 Funções embutidas<3>.
                                                             (line 1858)
* stop_here() (método bdb.Bdb):          bdb — Framework do depurador.
                                                             (line  255)
* STOP_ITERATION (monitoring event):     Eventos.            (line   81)
* stop() (método asyncio.loop):          Executar e interromper o laço.
                                                             (line   34)
* stop() (método logging.handlers.QueueListener): QueueListener.
                                                             (line   85)
* stop() (método tkinter.ttk.Progressbar): ttk Progressbar.  (line   21)
* stop() (método unittest.TestResult):   Carregando e executando testes.
                                                             (line  330)
* stop() (no módulo tracemalloc):        Funções<11>.        (line   98)
* StopAsyncIteration:                    Exceções concretas. (line  305)
* StopIteration:                         Exceções concretas. (line  273)
* stopListening() (no módulo logging.config): Funções de configuração.
                                                             (line  185)
* stopTest() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  354)
* stopTestRun() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  365)
* storbinary() (método ftplib.FTP):      FTP objects.        (line  218)
* Store (classe em ast):                 Variáveis.          (line   11)
* STORE_ACTIONS (atributo optparse.Option): Adicionando novas ações.
                                                             (line   35)
* STORE_ATTR (opcode):                   Instruções em bytecode do Python.
                                                             (line  617)
* STORE_DEREF (opcode):                  Instruções em bytecode do Python.
                                                             (line 1011)
* STORE_FAST (opcode):                   Instruções em bytecode do Python.
                                                             (line  961)
* STORE_FAST_LOAD_FAST (opcode):         Instruções em bytecode do Python.
                                                             (line  972)
* STORE_FAST_STORE_FAST (opcode):        Instruções em bytecode do Python.
                                                             (line  965)
* STORE_GLOBAL (opcode):                 Instruções em bytecode do Python.
                                                             (line  638)
* STORE_NAME (opcode):                   Instruções em bytecode do Python.
                                                             (line  575)
* STORE_SLICE (opcode):                  Instruções em bytecode do Python.
                                                             (line  295)
* STORE_SUBSCR (opcode):                 Instruções em bytecode do Python.
                                                             (line  267)
* store() (método imaplib.IMAP4):        Objetos IMAP4.      (line  316)
* storlines() (método ftplib.FTP):       FTP objects.        (line  247)
* str (classe embutida);(veja também string): Intervalos.    (line  128)
* str (classe interna):                  Tipo sequência de texto — str.
                                                             (line   46)
* str_digits_check_threshold (atributo sys.int_info): sys — Parâmetros e funções específicas do sistema.
                                                             (line 1220)
* str() (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  505)
* strcoll() (no módulo locale):          locale — Serviços de internacionalização.
                                                             (line  456)
* StreamError:                           tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  226)
* StreamHandler (classe em logging):     StreamHandler.      (line   12)
* streamreader (atributo codecs.CodecInfo): codecs — Codec registry and base classes.
                                                             (line   96)
* StreamReader (classe em asyncio):      StreamReader.       (line    6)
* StreamReader (classe em codecs):       StreamReader Objects.
                                                             (line   10)
* StreamReaderWriter (classe em codecs): StreamReaderWriter Objects.
                                                             (line   12)
* StreamRecoder (classe em codecs):      StreamRecoder Objects.
                                                             (line   13)
* StreamRequestHandler (classe em socketserver): Objetos manipulador de requisições.
                                                             (line   58)
* streams:                               codecs — Codec registry and base classes.
                                                             (line    8)
* streamwriter (atributo codecs.CodecInfo): codecs — Codec registry and base classes.
                                                             (line   96)
* StreamWriter (classe em asyncio):      StreamWriter.       (line    6)
* StreamWriter (classe em codecs):       StreamWriter Objects.
                                                             (line   10)
* StrEnum (classe em enum):              Tipos de Dados<2>.  (line  403)
* strerror (atributo OSError):           Exceções concretas. (line  193)
* strerror (C function):                 Levantando exceções<2>.
                                                             (line   59)
* strerror() (no módulo os):             Parâmetros de processo.
                                                             (line  537)
* strftime() (método datetime.date):     Objetos date.       (line  300)
* strftime() (método datetime.datetime): Objetos datetime.   (line  778)
* strftime() (método datetime.time):     Objetos time.       (line  231)
* strftime() (no módulo time):           Funções<5>.         (line  328)
* strict (atributo csv.Dialect):         Dialetos e parâmetros de formatação.
                                                             (line   91)
* STRICT (atributo enum.FlagBoundary):   Tipos de Dados<2>.  (line  681)
* strict (no módulo email.policy):       email policy Policy Objects.
                                                             (line  531)
* strict_domain (atributo http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line   95)
* strict_errors() (no módulo codecs):    Error Handlers.     (line  141)
* strict_ns_domain (atributo http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line  117)
* strict_ns_set_initial_dollar (atributo http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line  122)
* strict_ns_set_path (atributo http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line  127)
* strict_ns_unverifiable (atributo http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line  112)
* strict_rfc2965_unverifiable (atributo http.cookiejar.DefaultCookiePolicy): DefaultCookiePolicy Objects.
                                                             (line  103)
* strict;error handler's name:           Error Handlers.     (line   15)
* STRIDED (atributo inspect.BufferFlags): Buffer flags.      (line   37)
* STRIDED_RO (atributo inspect.BufferFlags): Buffer flags.   (line   39)
* STRIDES (atributo inspect.BufferFlags): Buffer flags.      (line   23)
* strides (atributo memoryview):         Memory Views.       (line  470)
* string (atributo re.Match):            Objetos correspondência.
                                                             (line  216)
* STRING (no módulo token):              token — Constantes usadas com árvores de análises do Python.
                                                             (line   56)
* string bruta:                          Literais de string e bytes.
                                                             (line   36)
* string de documentação:                Atributos especiais de somente leitura<2>.
                                                             (line  105)
* string_at() (no módulo ctypes):        Funções utilitárias.
                                                             (line  228)
* string;__format__() (método de objeto): Personalização básica.
                                                             (line  163)
* string;__str__() (método de objeto):   Personalização básica.
                                                             (line  140)
* string;conversão:                      Personalização básica.
                                                             (line  163)
* string;conversão <1>:                  Instruções de expressão.
                                                             (line   18)
* string;format() (função embutida):     Funções embutidas<3>.
                                                             (line  801)
* string;formatação, printf:             Formatação de string no estilo printf.
                                                             (line    6)
* string;interpolação, printf:           Formatação de string no estilo printf.
                                                             (line    6)
* string;item:                           Subscrições.        (line   59)
* string;literal formatado:              Refinando a formatação de saída.
                                                             (line   94)
* string;literal formatado <1>:          Concatenação de literal de string.
                                                             (line   27)
* string;literal formatado <2>:          String Methods<2>.  (line  917)
* string;literal interpolado:            Refinando a formatação de saída.
                                                             (line   94)
* string;literal interpolado <1>:        Concatenação de literal de string.
                                                             (line   27)
* string;literal interpolado <2>:        String Methods<2>.  (line  917)
* string;métodos:                        Tipo sequência de texto — str.
                                                             (line   93)
* string;object representation:          Finalization and De-allocation.
                                                             (line   91)
* string;PyObject_Str (C function):      Protocolo de objeto.
                                                             (line  353)
* string;sequências imutáveis:           Sequências imutáveis.
                                                             (line   14)
* string;str (classe embutida):          Tipo sequência de texto — str.
                                                             (line   46)
* string;str() (função embutida):        Funções embutidas<3>.
                                                             (line 1954)
* string;tipo sequência de texto:        Intervalos.         (line  128)
* StringIO (classe em io):               E/S de texto<2>.    (line  240)
* strings, documentação:                 Definindo funções.  (line   21)
* strings, documentação <1>:             Definindo funções.  (line   21)
* strings, documentação <2>:             Strings de documentação.
                                                             (line    6)
* strings, documentação <3>:             Strings de documentação.
                                                             (line    6)
* strip_dirs() (método pstats.Stats):    A classe Stats.     (line   34)
* strip() (método bytearray):            Operações com Bytes e Bytearray.
                                                             (line  458)
* strip() (método bytes):                Operações com Bytes e Bytearray.
                                                             (line  458)
* strip() (método str):                  String Methods<2>.  (line  801)
* stripspaces (atributo curses.textpad.Textbox): Textbox objects.
                                                             (line  115)
* strptime() (método de classe datetime.datetime): Objetos datetime.
                                                             (line  264)
* strptime() (no módulo time):           Funções<5>.         (line  493)
* strsignal() (no módulo signal):        Conteúdo do módulo<5>.
                                                             (line  328)
* Struct (classe em struct):             Classes<3>.         (line    8)
* struct_time (classe em time):          Funções<5>.         (line  528)
* structmember.h:                        Member types.       (line  122)
* Structure (classe em ctypes):          Tipos de dados estruturados.
                                                             (line   33)
* strxfrm() (no módulo locale):          locale — Serviços de internacionalização.
                                                             (line  463)
* STX (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   25)
* Style (classe em tkinter.ttk):         Ttk Styling.        (line   20)
* suavemente descontinuado:              Glossário.          (line 1616)
* Sub (classe em ast):                   Expressões<2>.      (line   54)
* SUB (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line  108)
* sub() (método re.Pattern):             Objetos expressão regular.
                                                             (line   98)
* sub() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line  162)
* sub() (no módulo re):                  Funções<2>.         (line  184)
* subclasse;tipos imutáveis:             Personalização básica.
                                                             (line    8)
* subdirs (atributo filecmp.dircmp):     A classe dircmp.    (line  106)
* SubElement() (no módulo xml.etree.ElementTree): Funções<9>.
                                                             (line  209)
* subgroup() (método BaseExceptionGroup): Grupos de exceções.
                                                             (line   47)
* submit() (método concurrent.futures.Executor): Executor Objects.
                                                             (line   12)
* submodule_search_locations (atributo importlib.machinery.ModuleSpec): importlib machinery – Importadores e ganchos de caminho.
                                                             (line  414)
* subn() (método re.Pattern):            Objetos expressão regular.
                                                             (line  102)
* subn() (no módulo re):                 Funções<2>.         (line  265)
* subnet_of() (método ipaddress.IPv4Network): Objetos de rede.
                                                             (line  220)
* subnet_of() (método ipaddress.IPv6Network): Objetos de rede.
                                                             (line  356)
* subnets() (método ipaddress.IPv4Network): Objetos de rede. (line  177)
* subnets() (método ipaddress.IPv6Network): Objetos de rede. (line  352)
* Subnormal (classe em decimal):         Sinais.             (line   91)
* suboffsets (atributo memoryview):      Memory Views.       (line  479)
* subpad() (método curses.window):       Window Objects.     (line  530)
* subprocess_exec() (método asyncio.loop): Executando subprocessos.
                                                             (line   16)
* subprocess_shell() (método asyncio.loop): Executando subprocessos.
                                                             (line  115)
* SubprocessError:                       Usando o módulo subprocess.
                                                             (line  167)
* SubprocessProtocol (classe em asyncio): Protocolos de Base.
                                                             (line   24)
* SubprocessTransport (classe em asyncio): Transports Hierarchy.
                                                             (line   50)
* subscribe() (método imaplib.IMAP4):    Objetos IMAP4.      (line  340)
* subscrição:                            Sequências.         (line    6)
* subscrição <1>:                        Sequências mutáveis.
                                                             (line    6)
* subscrição <2>:                        Mapeamentos.        (line    6)
* subscrição <3>:                        Subscrições.        (line    6)
* subscrição;atribuição:                 Instruções de atribuição.
                                                             (line  103)
* subscrição;atribuição <1>:             Tipos sequências mutáveis.
                                                             (line   17)
* subscrição;operação:                   Operações comuns de sequências.
                                                             (line   20)
* Subscript (classe em ast):             Subscrição.         (line    6)
* subsequent_indent (atributo textwrap.TextWrapper): textwrap — Quebra automática e preenchimento de texto.
                                                             (line  225)
* substitute() (método string.Template): Strings template.   (line   41)
* substração:                            Operações binárias aritméticas.
                                                             (line   85)
* subTest() (método unittest.TestCase):  Casos de teste.     (line  113)
* subtract() (método collections.Counter): Objetos Counter.  (line   94)
* subtract() (método decimal.Context):   Objetos de contexto.
                                                             (line  545)
* subtype (atributo email.headerregistry.ContentTypeHeader): email headerregistry Custom Header Objects.
                                                             (line  278)
* subwin() (método curses.window):       Window Objects.     (line  537)
* successful() (método multiprocessing.pool.AsyncResult): Process Pools.
                                                             (line  220)
* suffix (atributo pathlib.PurePath):    Métodos e propriedades.
                                                             (line  139)
* suffix_map (atributo mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line   24)
* suffix_map (no módulo mimetypes):      mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line  150)
* suffixes (atributo pathlib.PurePath):  Métodos e propriedades.
                                                             (line  152)
* suiteClass (atributo unittest.TestLoader): Carregando e executando testes.
                                                             (line  203)
* sum_list():                            Detalhes da contagem de referências.
                                                             (line  148)
* sum_sequence():                        Detalhes da contagem de referências.
                                                             (line  175)
* sum_sequence() <1>:                    Exceções<21>.       (line   68)
* summarize_address_range() (no módulo ipaddress): Outras funções de nível de módulo.
                                                             (line   29)
* summarize() (método doctest.DocTestRunner): DocTestRunner objects.
                                                             (line  123)
* sumprod() (no módulo math):            Funções de soma e produto.
                                                             (line   65)
* SUNDAY (no módulo calendar):           calendar — Funções gerais relacionadas ao calendário.
                                                             (line  465)
* super (atributo pyclbr.Class):         Objetos classe<2>.  (line   42)
* super (classe interna):                Funções embutidas<3>.
                                                             (line 1989)
* supernet_of() (método ipaddress.IPv4Network): Objetos de rede.
                                                             (line  231)
* supernet_of() (método ipaddress.IPv6Network): Objetos de rede.
                                                             (line  358)
* supernet() (método ipaddress.IPv4Network): Objetos de rede.
                                                             (line  203)
* supernet() (método ipaddress.IPv6Network): Objetos de rede.
                                                             (line  354)
* supports_bytes_environ (no módulo os): Parâmetros de processo.
                                                             (line  544)
* supports_dir_fd (no módulo os):        Arquivos e diretórios.
                                                             (line 1504)
* supports_effective_ids (no módulo os): Arquivos e diretórios.
                                                             (line 1530)
* supports_fd (no módulo os):            Arquivos e diretórios.
                                                             (line 1549)
* supports_follow_symlinks (no módulo os): Arquivos e diretórios.
                                                             (line 1569)
* supports_unicode_filenames (no módulo os.path): os path — Manipulações comuns de nomes de caminhos.
                                                             (line  625)
* SupportsAbs (classe em typing):        Protocolos<3>.      (line    9)
* SupportsBytes (classe em typing):      Protocolos<3>.      (line   14)
* SupportsComplex (classe em typing):    Protocolos<3>.      (line   18)
* SupportsFloat (classe em typing):      Protocolos<3>.      (line   22)
* SupportsIndex (classe em typing):      Protocolos<3>.      (line   26)
* SupportsInt (classe em typing):        Protocolos<3>.      (line   32)
* SupportsRound (classe em typing):      Protocolos<3>.      (line   36)
* suppress() (no módulo contextlib):     Utilitários.        (line  273)
* SuppressCrashReport (classe em test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  766)
* surrogateescape;error handler's name:  Error Handlers.     (line   15)
* surrogatepass;error handler's name:    Error Handlers.     (line   73)
* SW_HIDE (no módulo subprocess):        Constantes do Windows.
                                                             (line   23)
* SWAP (opcode):                         Instruções em bytecode do Python.
                                                             (line  173)
* swap_attr() (no módulo test.support):  test support — Utilitários para o conjunto de teste do Python.
                                                             (line  385)
* swap_item() (no módulo test.support):  test support — Utilitários para o conjunto de teste do Python.
                                                             (line  402)
* swapcase() (método bytearray):         Operações com Bytes e Bytearray.
                                                             (line  694)
* swapcase() (método bytes):             Operações com Bytes e Bytearray.
                                                             (line  694)
* swapcase() (método str):               String Methods<2>.  (line  826)
* Symbol (classe em symtable):           Examining Symbol Tables.
                                                             (line  191)
* SymbolTable (classe em symtable):      Examining Symbol Tables.
                                                             (line   49)
* SymbolTableType (classe em symtable):  Examining Symbol Tables.
                                                             (line    6)
* symlink_to() (método pathlib.Path):    Criando arquivos e diretórios.
                                                             (line   46)
* symlink() (no módulo os):              Arquivos e diretórios.
                                                             (line 1594)
* symmetric_difference_update() (método set): Tipo conjuntos — set frozenset.
                                                             (line  202)
* symmetric_difference() (método frozenset): Tipo conjuntos — set frozenset.
                                                             (line  127)
* symmetric_difference() (método set):   Tipo conjuntos — set frozenset.
                                                             (line  127)
* symtable() (no módulo symtable):       Generating Symbol Tables.
                                                             (line    6)
* SYMTYPE (no módulo tarfile):           tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  303)
* SYN (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   96)
* sync() (método dbm.dumb.dumbdbm):      dbm dumb — Implementação portátil do DBM.
                                                             (line   84)
* sync() (método dbm.gnu.gdbm):          dbm gnu — Gerenciador de banco de dados do GNU.
                                                             (line  129)
* sync() (método shelve.Shelf):          shelve — Python object persistence.
                                                             (line   69)
* sync() (no módulo os):                 Arquivos e diretórios.
                                                             (line 1644)
* syncdown() (método curses.window):     Window Objects.     (line  547)
* synchronization primitive:             Glossário.          (line 1681)
* synchronized() (no módulo multiprocessing.sharedctypes): O módulo multiprocessing sharedctypes.
                                                             (line   98)
* SyncManager (classe em multiprocessing.managers): Gerenciadores.
                                                             (line  152)
* syncok() (método curses.window):       Window Objects.     (line  553)
* syncup() (método curses.window):       Window Objects.     (line  558)
* SyntaxErr:                             Exceções<20>.       (line   93)
* SyntaxError:                           Exceções concretas. (line  312)
* SyntaxWarning:                         Avisos.             (line   42)
* sys_version (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  142)
* sys.exc_info:                          Objetos traceback.  (line    6)
* sys.exception:                         Objetos traceback.  (line    6)
* sys.last_traceback:                    Objetos traceback.  (line    6)
* sys.meta_path:                         O metacaminho.      (line    6)
* sys.modules:                           O cache de módulos. (line    6)
* sys.path:                              Localizadores de entrada de caminho.
                                                             (line    6)
* sys.path_hooks:                        Localizadores de entrada de caminho.
                                                             (line    6)
* sys.path_importer_cache:               Localizadores de entrada de caminho.
                                                             (line    6)
* sys.stderr:                            Objetos de E/S também conhecidos como objetos arquivo.
                                                             (line    6)
* sys.stdin:                             Objetos de E/S também conhecidos como objetos arquivo.
                                                             (line    6)
* sys.stdout:                            Objetos de E/S também conhecidos como objetos arquivo.
                                                             (line    6)
* sysconf_names (no módulo os):          Diversas informações de sistema.
                                                             (line   89)
* sysconf() (no módulo os):              Diversas informações de sistema.
                                                             (line   78)
* syslog() (no módulo syslog):           syslog — Rotinas da biblioteca syslog do Unix.
                                                             (line   21)
* SysLogHandler (classe em logging.handlers): SysLogHandler. (line   10)
* system_alias() (no módulo platform):   Multiplataforma.    (line  140)
* system_must_validate_cert() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  473)
* system() (no módulo os):               Gerenciamento de processo.
                                                             (line  798)
* system() (no módulo platform):         Multiplataforma.    (line  129)
* SystemError:                           Exceções concretas. (line  375)
* SystemError (built-in exception):      Objetos do Módulo.  (line   66)
* SystemError (built-in exception) <1>:  Objetos do Módulo.  (line  101)
* SystemExit:                            Exceções concretas. (line  392)
* SystemExit (exceção embutida):         Exceções<2>.        (line   28)
* systemId (atributo xml.dom.DocumentType): DocumentType Objects.
                                                             (line   22)
* SystemRandom (classe em random):       Gerador alternativo.
                                                             (line   58)
* SystemRandom (classe em secrets):      Números aleatórios. (line    9)
* T_BOOL (macro C):                      Member types.       (line  122)
* T_BYTE (macro C):                      Member types.       (line  122)
* T_CHAR (macro C):                      Member types.       (line  122)
* T_DOUBLE (macro C):                    Member types.       (line  122)
* T_FLOAT (macro C):                     Member types.       (line  122)
* T_FMT (no módulo locale):              locale — Serviços de internacionalização.
                                                             (line  216)
* T_FMT_AMPM (no módulo locale):         locale — Serviços de internacionalização.
                                                             (line  222)
* T_INT (macro C):                       Member types.       (line  122)
* T_LONG (macro C):                      Member types.       (line  122)
* T_LONGLONG (macro C):                  Member types.       (line  122)
* T_NONE (C macro):                      Member types.       (line  133)
* T_OBJECT (C macro):                    Member types.       (line  127)
* T_OBJECT_EX (macro C):                 Member types.       (line  122)
* T_PYSSIZET (macro C):                  Member types.       (line  122)
* T_SHORT (macro C):                     Member types.       (line  122)
* T_STRING (macro C):                    Member types.       (line  122)
* T_STRING_INPLACE (macro C):            Member types.       (line  122)
* T_UBYTE (macro C):                     Member types.       (line  122)
* T_UINT (macro C):                      Member types.       (line  122)
* T_ULONG (macro C):                     Member types.       (line  122)
* T_ULONGULONG (macro C):                Member types.       (line  122)
* T_USHORT (macro C):                    Member types.       (line  122)
* TAB (no módulo curses.ascii):          curses ascii — Utilitários para caracteres ASCII.
                                                             (line   47)
* tab() (método tkinter.ttk.Notebook):   ttk Notebook.       (line   62)
* TabError:                              Exceções concretas. (line  369)
* tabs() (método tkinter.ttk.Notebook):  ttk Notebook.       (line   71)
* tabsize (atributo textwrap.TextWrapper): textwrap — Quebra automática e preenchimento de texto.
                                                             (line  181)
* tabulação:                             Indentação.         (line    6)
* tag (atributo xml.etree.ElementTree.Element): Element Objects.
                                                             (line   16)
* tag_bind() (método tkinter.ttk.Treeview): ttk Treeview.    (line  293)
* tag_configure() (método tkinter.ttk.Treeview): ttk Treeview.
                                                             (line  299)
* tag_has() (método tkinter.ttk.Treeview): ttk Treeview.     (line  309)
* tagName (atributo xml.dom.Element):    Element Objects<2>. (line    9)
* tail (atributo xml.etree.ElementTree.Element): Element Objects.
                                                             (line   21)
* take_snapshot() (no módulo tracemalloc): Funções<11>.      (line  110)
* takewhile() (no módulo itertools):     Funções do intertools.
                                                             (line  574)
* tan() (no módulo cmath):               Funções trigonométricas<2>.
                                                             (line   32)
* tan() (no módulo math):                Funções trigonométricas.
                                                             (line   38)
* tanh() (no módulo cmath):              Funções hiperbólicas<2>.
                                                             (line   33)
* tanh() (no módulo math):               Funções hiperbólicas.
                                                             (line   29)
* tar_filter() (no módulo tarfile):      Default named filters.
                                                             (line   15)
* TarError:                              tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  211)
* TarFile (classe em tarfile):           Objetos TarFile.    (line   23)
* tarfile opção de linha de comando; -c: Opções de linha de comando<3>.
                                                             (line   11)
* tarfile opção de linha de comando; -create: Opções de linha de comando<3>.
                                                             (line   11)
* tarfile opção de linha de comando; -e: Opções de linha de comando<3>.
                                                             (line   16)
* tarfile opção de linha de comando; -extract: Opções de linha de comando<3>.
                                                             (line   16)
* tarfile opção de linha de comando; -filter: Opções de linha de comando<3>.
                                                             (line   31)
* tarfile opção de linha de comando; -l: Opções de linha de comando<3>.
                                                             (line    6)
* tarfile opção de linha de comando; -list: Opções de linha de comando<3>.
                                                             (line    6)
* tarfile opção de linha de comando; -t: Opções de linha de comando<3>.
                                                             (line   22)
* tarfile opção de linha de comando; -test: Opções de linha de comando<3>.
                                                             (line   22)
* tarfile opção de linha de comando; -v: Opções de linha de comando<3>.
                                                             (line   27)
* tarfile opção de linha de comando; -verbose: Opções de linha de comando<3>.
                                                             (line   27)
* target (atributo xml.dom.ProcessingInstruction): Objetos ProcessingInstruction.
                                                             (line    9)
* tarinfo (atributo tarfile.FilterError): tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  246)
* TarInfo (classe em tarfile):           Objetos TarInfo.    (line   33)
* Task (classe em asyncio):              Objeto Task.        (line    6)
* task_done() (método asyncio.Queue):    Queue.              (line  121)
* task_done() (método multiprocessing.JoinableQueue): Encadeamentos e filas.
                                                             (line  275)
* task_done() (método queue.Queue):      Objetos Queue.      (line   73)
* TaskGroup (classe em asyncio):         Grupos de tarefas.  (line   10)
* tau (no módulo cmath):                 Constantes<3>.      (line   14)
* tau (no módulo math):                  Constantes<2>.      (line   14)
* tb_frame (atributo de traceback):      Objetos traceback.  (line   32)
* tb_frame (atributo traceback):         Objetos traceback.  (line   34)
* tb_lasti (atributo de traceback):      Objetos traceback.  (line   32)
* tb_lasti (atributo traceback):         Objetos traceback.  (line   46)
* tb_lineno (atributo de traceback):     Objetos traceback.  (line   32)
* tb_lineno (atributo traceback):        Objetos traceback.  (line   43)
* tb_locals (atributo unittest.TestResult): Carregando e executando testes.
                                                             (line  314)
* tb_next (atributo de traceback):       Objetos traceback.  (line   54)
* tb_next (atributo traceback):          Objetos traceback.  (line   54)
* tbreak (pdb command):                  Comandos de depuração.
                                                             (line  130)
* tcdrain() (no módulo termios):         termios — Controle de tty no estilo POSIX.
                                                             (line   68)
* tcflow() (no módulo termios):          termios — Controle de tty no estilo POSIX.
                                                             (line   79)
* tcflush() (no módulo termios):         termios — Controle de tty no estilo POSIX.
                                                             (line   73)
* tcgetattr() (no módulo termios):       termios — Controle de tty no estilo POSIX.
                                                             (line   28)
* tcgetpgrp() (no módulo os):            Operações dos descritores de arquivos.
                                                             (line  913)
* tcgetwinsize() (no módulo termios):    termios — Controle de tty no estilo POSIX.
                                                             (line   86)
* Tcl() (no módulo tkinter):             Módulos Tkinter.    (line   96)
* TCPServer (classe em socketserver):    socketserver — Um framework para servidores de rede.
                                                             (line   20)
* TCSADRAIN (no módulo termios):         termios — Controle de tty no estilo POSIX.
                                                             (line   51)
* TCSAFLUSH (no módulo termios):         termios — Controle de tty no estilo POSIX.
                                                             (line   56)
* TCSANOW (no módulo termios):           termios — Controle de tty no estilo POSIX.
                                                             (line   47)
* tcsendbreak() (no módulo termios):     termios — Controle de tty no estilo POSIX.
                                                             (line   61)
* tcsetattr() (no módulo termios):       termios — Controle de tty no estilo POSIX.
                                                             (line   40)
* tcsetpgrp() (no módulo os):            Operações dos descritores de arquivos.
                                                             (line  921)
* tcsetwinsize() (no módulo termios):    termios — Controle de tty no estilo POSIX.
                                                             (line   94)
* tearDown() (método unittest.TestCase): Casos de teste.     (line   43)
* tearDownClass() (método unittest.TestCase): Casos de teste.
                                                             (line   74)
* tearDownModule() (no módulo unittest): setUpModule and tearDownModule.
                                                             (line    6)
* tee() (no módulo itertools):           Funções do intertools.
                                                             (line  593)
* teleport() (no módulo turtle):         Movimentos de Turtle.
                                                             (line  107)
* tell() (método io.IOBase):             I/O Base Classes.   (line  135)
* tell() (método io.TextIOBase):         E/S de texto<2>.    (line   88)
* tell() (método io.TextIOWrapper):      E/S de texto<2>.    (line  234)
* tell() (método mmap.mmap):             mmap — Suporte a arquivos mapeados na memória.
                                                             (line  322)
* tell() (método sqlite3.Blob):          Blob objects.       (line   59)
* tell() (método wave.Wave_read):        Objetos Wave_read.  (line   87)
* tell() (método wave.Wave_write):       Objetos Wave_write. (line   70)
* TEMP:                                  Redirecionamento de dados locais registro e caminhos temporários.
                                                             (line    8)
* TEMP <1>:                              tempfile — Generate temporary files and directories.
                                                             (line  331)
* temp_cwd() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  136)
* temp_dir() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  151)
* temp_umask() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  161)
* tempdir (no módulo tempfile):          tempfile — Generate temporary files and directories.
                                                             (line  378)
* template (atributo string.Template):   Strings template.   (line   89)
* Template (classe em string):           Strings template.   (line   37)
* tempo da CPU:                          Funções<5>.         (line  254)
* tempo da CPU <1>:                      Funções<5>.         (line  635)
* tempo do processador:                  Funções<5>.         (line  254)
* tempo do processador <1>:              Funções<5>.         (line  635)
* Tempo Médio de Greenwich:              time — Acesso ao horário e conversões.
                                                             (line   40)
* Tempo Universal Coordenado:            time — Acesso ao horário e conversões.
                                                             (line   40)
* temporary (atributo bdb.Breakpoint):   bdb — Framework do depurador.
                                                             (line   94)
* temporary;arquivo:                     tempfile — Generate temporary files and directories.
                                                             (line    8)
* temporary;file name:                   tempfile — Generate temporary files and directories.
                                                             (line    8)
* TemporaryDirectory (classe em tempfile): tempfile — Generate temporary files and directories.
                                                             (line  184)
* TemporaryFile() (no módulo tempfile):  tempfile — Generate temporary files and directories.
                                                             (line   28)
* teredo (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  325)
* TERM:                                  Funções<6>.         (line  485)
* TERM <1>:                              Funções<6>.         (line  512)
* termattrs() (no módulo curses):        Funções<6>.         (line  504)
* terminal_size (classe em os):          Consultando o tamanho de um terminal.
                                                             (line   25)
* terminate() (método asyncio.subprocess.Process): Interagindo com subprocessos.
                                                             (line   98)
* terminate() (método asyncio.SubprocessTransport): Transportes de Subprocesso.
                                                             (line   49)
* terminate() (método multiprocessing.pool.Pool): Process Pools.
                                                             (line  181)
* terminate() (método multiprocessing.Process): Process e exceções.
                                                             (line  209)
* terminate() (método subprocess.Popen): Objetos Popen.      (line   94)
* terminator (atributo logging.StreamHandler): StreamHandler.
                                                             (line   49)
* termname() (no módulo curses):         Funções<6>.         (line  510)
* ternário;operador:                     Expressões condicionais.
                                                             (line    6)
* ternaryfunc (C type):                  Slot Type typedefs. (line  120)
* test (atributo doctest.DocTestFailure): Depuração.         (line  195)
* test (atributo doctest.UnexpectedException): Depuração.    (line  216)
* TEST_DATA_DIR (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  146)
* TEST_HOME_DIR (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  142)
* TEST_HTTP_URL (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  180)
* TEST_SUPPORT_DIR (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  137)
* TestCase (classe em unittest):         Casos de teste.     (line    6)
* TestFailed:                            test support — Utilitários para o conjunto de teste do Python.
                                                             (line   16)
* testfile() (no módulo doctest):        Basic API.          (line   13)
* TESTFN (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   19)
* TESTFN_NONASCII (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   25)
* TESTFN_UNDECODABLE (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   39)
* TESTFN_UNENCODABLE (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   33)
* TESTFN_UNICODE (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line   45)
* TestLoader (classe em unittest):       Carregando e executando testes.
                                                             (line    6)
* testMethodPrefix (atributo unittest.TestLoader): Carregando e executando testes.
                                                             (line  189)
* testmod() (no módulo doctest):         Basic API.          (line   91)
* testNamePatterns (atributo unittest.TestLoader): Carregando e executando testes.
                                                             (line  211)
* TestResult (classe em unittest):       Carregando e executando testes.
                                                             (line  228)
* TestResults (classe em doctest):       TestResults objects.
                                                             (line    6)
* testsource() (no módulo doctest):      Depuração.          (line  106)
* testsRun (atributo unittest.TestResult): Carregando e executando testes.
                                                             (line  291)
* TestSuite (classe em unittest):        Grouping tests.     (line    6)
* testzip() (método zipfile.ZipFile):    Objetos ZipFile.    (line  274)
* text (atributo SyntaxError):           Exceções concretas. (line  339)
* text (atributo traceback.TracebackException): TracebackException Objects.
                                                             (line  106)
* text (atributo xml.etree.ElementTree.Element): Element Objects.
                                                             (line   21)
* Text (classe em typing):               Apelidos de outros tipos concretos.
                                                             (line   21)
* text_encoding() (no módulo io):        Interface de alto nível do módulo.
                                                             (line   39)
* text_factory (atributo sqlite3.Connection): Connection objects.
                                                             (line  807)
* Textbox (classe em curses.textpad):    Textbox objects.    (line    8)
* TextCalendar (classe em calendar):     calendar — Funções gerais relacionadas ao calendário.
                                                             (line  157)
* textdomain() (no módulo gettext):      API do GNU gettext. (line   26)
* textdomain() (no módulo locale):       Acesso a catálogos de mensagens.
                                                             (line   12)
* textinput() (no módulo turtle):        Métodos de entrada. (line    6)
* TextIO (classe em typing):             ABCs para trabalhar com E/S.
                                                             (line    6)
* TextIOBase (classe em io):             E/S de texto<2>.    (line    6)
* TextIOWrapper (classe em io):          E/S de texto<2>.    (line   99)
* texto, modo:                           Funções embutidas<3>.
                                                             (line 1522)
* TextTestResult (classe em unittest):   Carregando e executando testes.
                                                             (line  449)
* TextTestRunner (classe em unittest):   Carregando e executando testes.
                                                             (line  466)
* TextWrapper (classe em textwrap):      textwrap — Quebra automática e preenchimento de texto.
                                                             (line  147)
* TFD_CLOEXEC (no módulo os):            Descritores de arquivo de temporizador.
                                                             (line  218)
* TFD_NONBLOCK (no módulo os):           Descritores de arquivo de temporizador.
                                                             (line  207)
* TFD_TIMER_ABSTIME (no módulo os):      Descritores de arquivo de temporizador.
                                                             (line  228)
* TFD_TIMER_CANCEL_ON_SET (no módulo os): Descritores de arquivo de temporizador.
                                                             (line  239)
* theme_create() (método tkinter.ttk.Style): Ttk Styling.    (line  260)
* theme_names() (método tkinter.ttk.Style): Ttk Styling.     (line  308)
* theme_settings() (método tkinter.ttk.Style): Ttk Styling.  (line  270)
* theme_use() (método tkinter.ttk.Style): Ttk Styling.       (line  312)
* THOUSEP (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  286)
* Thread (classe em threading):          Thread objects.     (line   57)
* thread_info (no módulo sys):           sys — Parâmetros e funções específicas do sistema.
                                                             (line 2005)
* thread_time_ns() (no módulo time):     Funções<5>.         (line  650)
* thread_time() (no módulo time):        Funções<5>.         (line  633)
* thread() (método imaplib.IMAP4):       Objetos IMAP4.      (line  344)
* ThreadedChildWatcher (classe em asyncio): Monitores de processos.
                                                             (line   90)
* threading_cleanup() (no módulo test.support.threading_helper): test support threading_helper — Utilities for threading tests.
                                                             (line   31)
* threading_setup() (no módulo test.support.threading_helper): test support threading_helper — Utilities for threading tests.
                                                             (line   37)
* ThreadingHTTPServer (classe em http.server): http server — HTTP servers.
                                                             (line   37)
* ThreadingMixIn (classe em socketserver): Notas sobre criação do servidor.
                                                             (line   27)
* ThreadingMock (classe em unittest.mock): A classe Mock.    (line  959)
* ThreadingTCPServer (classe em socketserver): Notas sobre criação do servidor.
                                                             (line   68)
* ThreadingUDPServer (classe em socketserver): Notas sobre criação do servidor.
                                                             (line   68)
* ThreadingUnixDatagramServer (classe em socketserver): Notas sobre criação do servidor.
                                                             (line   68)
* ThreadingUnixStreamServer (classe em socketserver): Notas sobre criação do servidor.
                                                             (line   68)
* ThreadPool (classe em multiprocessing.pool): The multiprocessing dummy module.
                                                             (line   16)
* ThreadPoolExecutor (classe em concurrent.futures): ThreadPoolExecutor.
                                                             (line   39)
* threads livres:                        Glossário.          (line  638)
* threads;POSIX:                         _thread— API de segmentação de baixo nível.
                                                             (line   16)
* threadsafety (no módulo sqlite3):      Constantes do módulo.
                                                             (line   88)
* throw() (método coroutine):            Objetos corrotina.  (line   33)
* throw() (método generator):            Métodos de iterador gerador.
                                                             (line   38)
* THURSDAY (no módulo calendar):         calendar — Funções gerais relacionadas ao calendário.
                                                             (line  465)
* ticket_lifetime_hint (atributo ssl.SSLSession): SSL session.
                                                             (line   18)
* tigetflag() (no módulo curses):        Funções<6>.         (line  515)
* tigetnum() (no módulo curses):         Funções<6>.         (line  522)
* tigetstr() (no módulo curses):         Funções<6>.         (line  529)
* TILDE (no módulo token):               token — Constantes usadas com árvores de análises do Python.
                                                             (line  252)
* tilt() (no módulo turtle):             Aparência.          (line  106)
* tiltangle() (no módulo turtle):        Aparência.          (line  123)
* time (atributo ssl.SSLSession):        SSL session.        (line   14)
* time (atributo uuid.UUID):             uuid — Objetos UUID conforme RFC 4122.
                                                             (line  125)
* time (classe em datetime):             Objetos time.       (line   10)
* time_hi_version (atributo uuid.UUID):  uuid — Objetos UUID conforme RFC 4122.
                                                             (line  113)
* time_low (atributo uuid.UUID):         uuid — Objetos UUID conforme RFC 4122.
                                                             (line  107)
* time_mid (atributo uuid.UUID):         uuid — Objetos UUID conforme RFC 4122.
                                                             (line  110)
* time_ns() (no módulo time):            Funções<5>.         (line  626)
* time() (método asyncio.loop):          Agendando funções de retorno atrasadas.
                                                             (line   66)
* time() (método datetime.datetime):     Objetos datetime.   (line  460)
* time() (no módulo time):               Funções<5>.         (line  588)
* Time2Internaldate() (no módulo imaplib): imaplib — IMAP4 protocol client.
                                                             (line  130)
* timedelta (classe em datetime):        Objetos timedelta.  (line    9)
* TimedRotatingFileHandler (classe em logging.handlers): TimedRotatingFileHandler.
                                                             (line   10)
* timegm() (no módulo calendar):         calendar — Funções gerais relacionadas ao calendário.
                                                             (line  436)
* timeit opção de linha de comando; -h:  Interface de linha de comando<10>.
                                                             (line   46)
* timeit opção de linha de comando; -help: Interface de linha de comando<10>.
                                                             (line   46)
* timeit opção de linha de comando; -n:  Interface de linha de comando<10>.
                                                             (line   13)
* timeit opção de linha de comando; -number: Interface de linha de comando<10>.
                                                             (line   13)
* timeit opção de linha de comando; -p:  Interface de linha de comando<10>.
                                                             (line   26)
* timeit opção de linha de comando; -process: Interface de linha de comando<10>.
                                                             (line   26)
* timeit opção de linha de comando; -r:  Interface de linha de comando<10>.
                                                             (line   17)
* timeit opção de linha de comando; -repeat: Interface de linha de comando<10>.
                                                             (line   17)
* timeit opção de linha de comando; -s:  Interface de linha de comando<10>.
                                                             (line   21)
* timeit opção de linha de comando; -setup: Interface de linha de comando<10>.
                                                             (line   21)
* timeit opção de linha de comando; -u:  Interface de linha de comando<10>.
                                                             (line   34)
* timeit opção de linha de comando; -unit: Interface de linha de comando<10>.
                                                             (line   34)
* timeit opção de linha de comando; -v:  Interface de linha de comando<10>.
                                                             (line   41)
* timeit opção de linha de comando; -verbose: Interface de linha de comando<10>.
                                                             (line   41)
* timeit() (método timeit.Timer):        Interface em Python.
                                                             (line   77)
* timeit() (no módulo timeit):           Interface em Python.
                                                             (line    8)
* timeout:                               Exceções<15>.       (line   40)
* timeout (atributo socketserver.BaseServer): Objetos Server<2>.
                                                             (line  123)
* timeout (atributo ssl.SSLSession):     SSL session.        (line   16)
* timeout (atributo subprocess.TimeoutExpired): Usando o módulo subprocess.
                                                             (line  182)
* Timeout (classe em asyncio):           Tempo limite.       (line   50)
* timeout_at() (no módulo asyncio):      Tempo limite.       (line   98)
* TIMEOUT_MAX (no módulo _thread):       _thread— API de segmentação de baixo nível.
                                                             (line  140)
* TIMEOUT_MAX (no módulo threading):     Referência<2>.      (line  189)
* timeout() (método curses.window):      Window Objects.     (line  563)
* timeout() (no módulo asyncio):         Tempo limite.       (line    6)
* TimeoutError:                          Exceções de sistema operacional.
                                                             (line  114)
* TimeoutError <1>:                      Process e exceções. (line  283)
* TimeoutError <2>:                      Exception classes.  (line   10)
* TimeoutError <3>:                      Exceções<13>.       (line   10)
* TimeoutExpired:                        Usando o módulo subprocess.
                                                             (line  173)
* Timer (classe em threading):           Timer objects.      (line   25)
* Timer (classe em timeit):              Interface em Python.
                                                             (line   44)
* timerfd_create() (no módulo os):       Descritores de arquivo de temporizador.
                                                             (line   11)
* timerfd_gettime_ns() (no módulo os):   Descritores de arquivo de temporizador.
                                                             (line  198)
* timerfd_gettime() (no módulo os):      Descritores de arquivo de temporizador.
                                                             (line  176)
* timerfd_settime_ns() (no módulo os):   Descritores de arquivo de temporizador.
                                                             (line  165)
* timerfd_settime() (no módulo os):      Descritores de arquivo de temporizador.
                                                             (line   91)
* TimerHandle (classe em asyncio):       Tratadores de função de retorno.
                                                             (line   29)
* times() (no módulo os):                Gerenciamento de processo.
                                                             (line  833)
* TIMESTAMP (atributo py_compile.PycInvalidationMode): py_compile — Compila arquivos fonte do Python.
                                                             (line  109)
* timestamp() (método datetime.datetime): Objetos datetime.  (line  619)
* timetuple() (método datetime.date):    Objetos date.       (line  210)
* timetuple() (método datetime.datetime): Objetos datetime.  (line  571)
* timetz() (método datetime.datetime):   Objetos datetime.   (line  469)
* timezone (classe em datetime):         Objetos timezone.   (line   15)
* timezone (no módulo time):             Constantes de Fuso Horário.
                                                             (line   19)
* tipagem pato:                          Glossário.          (line  517)
* tipo:                                  A hierarquia de tipos padrão.
                                                             (line    6)
* tipo <1>:                              Glossário.          (line 1755)
* tipo de um objeto:                     Objetos valores e tipos.
                                                             (line   10)
* tipo genérico:                         Glossário.          (line  752)
* tipo interno:                          Tipos internos.     (line    6)
* tipo;hierarquia:                       A hierarquia de tipos padrão.
                                                             (line    6)
* tipos, internos:                       Tipos internos.     (line    6)
* title() (método bytearray):            Operações com Bytes e Bytearray.
                                                             (line  721)
* title() (método bytes):                Operações com Bytes e Bytearray.
                                                             (line  721)
* title() (método str):                  String Methods<2>.  (line  832)
* title() (no módulo turtle):            Métodos específico do Screen estes métodos não são herdados do TurtleScreen.
                                                             (line   52)
* Tk:                                    Interfaces gráficas de usuário com Tk.
                                                             (line    6)
* tk (atributo tkinter.Tk):              Módulos Tkinter.    (line   72)
* Tk (classe em tkinter):                Módulos Tkinter.    (line   14)
* Tkinter:                               Interfaces gráficas de usuário com Tk.
                                                             (line    6)
* TLS:                                   ssl — Invólucro de TLS/SSL para objetos socket.
                                                             (line    8)
* TLSv1 (atributo ssl.TLSVersion):       Constantes<9>.      (line  574)
* TLSv1_1 (atributo ssl.TLSVersion):     Constantes<9>.      (line  576)
* TLSv1_2 (atributo ssl.TLSVersion):     Constantes<9>.      (line  578)
* TLSv1_3 (atributo ssl.TLSVersion):     Constantes<9>.      (line  580)
* TLSVersion (classe em ssl):            Constantes<9>.      (line  556)
* tm_gmtoff (atributo time.struct_time): Funções<5>.         (line  571)
* tm_hour (atributo time.struct_time):   Funções<5>.         (line  548)
* tm_isdst (atributo time.struct_time):  Funções<5>.         (line  565)
* tm_mday (atributo time.struct_time):   Funções<5>.         (line  545)
* tm_min (atributo time.struct_time):    Funções<5>.         (line  551)
* tm_mon (atributo time.struct_time):    Funções<5>.         (line  542)
* tm_sec (atributo time.struct_time):    Funções<5>.         (line  554)
* tm_wday (atributo time.struct_time):   Funções<5>.         (line  559)
* tm_yday (atributo time.struct_time):   Funções<5>.         (line  562)
* tm_year (atributo time.struct_time):   Funções<5>.         (line  539)
* tm_zone (atributo time.struct_time):   Funções<5>.         (line  568)
* TMP:                                   tempfile — Generate temporary files and directories.
                                                             (line  333)
* TMPDIR:                                Biblioteca<7>.      (line  122)
* TMPDIR <1>:                            Testes<28>.         (line   68)
* TMPDIR <2>:                            tempfile — Generate temporary files and directories.
                                                             (line  329)
* TO_BOOL (opcode):                      Instruções em bytecode do Python.
                                                             (line  232)
* to_bytes() (método int):               Métodos adicionais em tipos inteiros.
                                                             (line   57)
* to_eng_string() (método decimal.Context): Objetos de contexto.
                                                             (line  549)
* to_eng_string() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  586)
* to_integral_exact() (método decimal.Context): Objetos de contexto.
                                                             (line  558)
* to_integral_exact() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  604)
* to_integral_value() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  614)
* to_integral() (método decimal.Decimal): Objetos de Decimal.
                                                             (line  598)
* to_sci_string() (método decimal.Context): Objetos de contexto.
                                                             (line  562)
* to_thread() (no módulo asyncio):       Executando em threads.
                                                             (line    6)
* ToASCII() (no módulo encodings.idna):  encodings idna — Internationalized Domain Names in Applications.
                                                             (line   55)
* tobuf() (método tarfile.TarInfo):      Objetos TarInfo.    (line   49)
* tobytes() (método array.array):        array— Vetores eficientes de valores numéricos.
                                                             (line  239)
* tobytes() (método memoryview):         Memory Views.       (line  166)
* today() (método de classe datetime.date): Objetos date.    (line   29)
* today() (método de classe datetime.datetime): Objetos datetime.
                                                             (line   47)
* tofile() (método array.array):         array— Vetores eficientes de valores numéricos.
                                                             (line  248)
* tok_name (no módulo token):            token — Constantes usadas com árvores de análises do Python.
                                                             (line   26)
* token:                                 Análise léxica.     (line    6)
* token <1>:                             Glossário.          (line 1733)
* token (atributo shlex.shlex):          shlex Objects.      (line  173)
* Token (classe em contextvars):         Variáveis de contexto.
                                                             (line   79)
* token DEDENT:                          Indentação.         (line   35)
* token DEDENT <1>:                      Instruções compostas.
                                                             (line   59)
* token INDENT:                          Indentação.         (line   35)
* token NEWLINE:                         Linhas lógicas.     (line    6)
* token NEWLINE <1>:                     Instruções compostas.
                                                             (line   59)
* token_bytes() (no módulo secrets):     Gerando tokens.     (line   10)
* token_hex() (no módulo secrets):       Gerando tokens.     (line   19)
* token_urlsafe() (no módulo secrets):   Gerando tokens.     (line   29)
* TokenError:                            Tokenizando entradas.
                                                             (line  112)
* tokenize opção de linha de comando; -e: Uso na linha de comando<11>.
                                                             (line   19)
* tokenize opção de linha de comando; -exact: Uso na linha de comando<11>.
                                                             (line   19)
* tokenize opção de linha de comando; -h: Uso na linha de comando<11>.
                                                             (line   15)
* tokenize opção de linha de comando; -help: Uso na linha de comando<11>.
                                                             (line   15)
* tokenize() (no módulo tokenize):       Tokenizando entradas.
                                                             (line    8)
* tolist() (método array.array):         array— Vetores eficientes de valores numéricos.
                                                             (line  253)
* tolist() (método memoryview):          Memory Views.       (line  210)
* TOMLDecodeError:                       tomllib — Analisa arquivos TOML.
                                                             (line   61)
* toordinal() (método datetime.date):    Objetos date.       (line  225)
* toordinal() (método datetime.datetime): Objetos datetime.  (line  614)
* top_panel() (no módulo curses.panel):  Funções<7>.         (line   19)
* top() (método curses.panel.Panel):     Objetos painel.     (line   53)
* top() (método poplib.POP3):            Objetos POP3.       (line   87)
* TopologicalSorter (classe em graphlib): graphlib — Funcionalidade para operar com estruturas do tipo grafo.
                                                             (line   10)
* toprettyxml() (método xml.dom.minidom.Node): Objetos DOM.  (line   72)
* toreadonly() (método memoryview):      Memory Views.       (line  227)
* tostring() (no módulo xml.etree.ElementTree): Funções<9>.  (line  222)
* tostringlist() (no módulo xml.etree.ElementTree): Funções<9>.
                                                             (line  245)
* total_changes (atributo sqlite3.Connection): Connection objects.
                                                             (line  817)
* total_nframe (atributo tracemalloc.Traceback): Traceback.  (line   28)
* total_ordering() (no módulo functools): functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line  278)
* total_seconds() (método datetime.timedelta): Objetos timedelta.
                                                             (line  253)
* total() (método collections.Counter):  Objetos Counter.    (line  110)
* touch() (método pathlib.Path):         Criando arquivos e diretórios.
                                                             (line    6)
* touchline() (método curses.window):    Window Objects.     (line  573)
* touchwin() (método curses.window):     Window Objects.     (line  580)
* tounicode() (método array.array):      array— Vetores eficientes de valores numéricos.
                                                             (line  257)
* ToUnicode() (no módulo encodings.idna): encodings idna — Internationalized Domain Names in Applications.
                                                             (line   60)
* towards() (no módulo turtle):          Fala o estado de Turtle.
                                                             (line   15)
* toxml() (método xml.dom.minidom.Node): Objetos DOM.        (line   52)
* tparm() (no módulo curses):            Funções<6>.         (line  536)
* Trace (classe em trace):               Interface programática.
                                                             (line    6)
* Trace (classe em tracemalloc):         Trace.              (line    6)
* trace opção de linha de comando; -c:   Opções principais.  (line   12)
* trace opção de linha de comando; -C:   Modificadores.      (line   11)
* trace opção de linha de comando; -count: Opções principais.
                                                             (line   12)
* trace opção de linha de comando; -coverdir: Modificadores. (line   11)
* trace opção de linha de comando; -f:   Modificadores.      (line    6)
* trace opção de linha de comando; -file: Modificadores.     (line    6)
* trace opção de linha de comando; -g:   Modificadores.      (line   33)
* trace opção de linha de comando; -help: Uso na linha de comando<7>.
                                                             (line   15)
* trace opção de linha de comando; -ignore-dir: Filtros.     (line   14)
* trace opção de linha de comando; -ignore-module: Filtros.  (line    8)
* trace opção de linha de comando; -l:   Opções principais.  (line   23)
* trace opção de linha de comando; -listfuncs: Opções principais.
                                                             (line   23)
* trace opção de linha de comando; -m:   Modificadores.      (line   17)
* trace opção de linha de comando; -missing: Modificadores.  (line   17)
* trace opção de linha de comando; -no-report: Modificadores.
                                                             (line   27)
* trace opção de linha de comando; -r:   Opções principais.  (line   27)
* trace opção de linha de comando; -R:   Modificadores.      (line   27)
* trace opção de linha de comando; -report: Opções principais.
                                                             (line   27)
* trace opção de linha de comando; -s:   Modificadores.      (line   22)
* trace opção de linha de comando; -summary: Modificadores.  (line   22)
* trace opção de linha de comando; -t:   Opções principais.  (line   19)
* trace opção de linha de comando; -T:   Opções principais.  (line   33)
* trace opção de linha de comando; -timing: Modificadores.   (line   33)
* trace opção de linha de comando; -trace: Opções principais.
                                                             (line   19)
* trace opção de linha de comando; -trackcalls: Opções principais.
                                                             (line   33)
* trace opção de linha de comando; -version: Uso na linha de comando<7>.
                                                             (line   19)
* trace_dispatch() (método bdb.Bdb):     bdb — Framework do depurador.
                                                             (line  169)
* trace() (no módulo inspect):           A pilha to interpretador.
                                                             (line  184)
* traceback (atributo tracemalloc.Statistic): Statistic.     (line   23)
* traceback (atributo tracemalloc.StatisticDiff): StatisticDiff.
                                                             (line   38)
* traceback (atributo tracemalloc.Trace): Trace.             (line   27)
* Traceback (classe em inspect):         A pilha to interpretador.
                                                             (line   55)
* Traceback (classe em tracemalloc):     Traceback.          (line    6)
* traceback_limit (atributo tracemalloc.Snapshot): Snapshot. (line   83)
* traceback_limit (atributo wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  223)
* TracebackException (classe em traceback): TracebackException Objects.
                                                             (line   15)
* tracebacklimit (no módulo sys):        sys — Parâmetros e funções específicas do sistema.
                                                             (line 2041)
* TracebackType (classe em types):       Tipos padrão do interpretador.
                                                             (line  190)
* tracer() (no módulo turtle):           Controle da animação.
                                                             (line   24)
* traces (atributo tracemalloc.Snapshot): Snapshot.          (line   89)
* transfercmd() (método ftplib.FTP):     FTP objects.        (line  257)
* transient_internet() (no módulo test.support.socket_helper): test support socket_helper — Utilities for socket tests.
                                                             (line   64)
* translate() (método bytearray):        Operações com Bytes e Bytearray.
                                                             (line  272)
* translate() (método bytes):            Operações com Bytes e Bytearray.
                                                             (line  272)
* translate() (método str):              String Methods<2>.  (line  869)
* translate() (no módulo fnmatch):       fnmatch — Correspondência de padrões de nome de arquivo Unix.
                                                             (line   88)
* translate() (no módulo glob):          glob — Expansão de padrão de nome de arquivo no estilo Unix.
                                                             (line  117)
* translation() (no módulo gettext):     API baseada em classe.
                                                             (line   44)
* transport (atributo asyncio.StreamWriter): StreamWriter.   (line   61)
* Transport (classe em asyncio):         Transports Hierarchy.
                                                             (line   29)
* Transport Layer Security:              ssl — Invólucro de TLS/SSL para objetos socket.
                                                             (line    8)
* traps (atributo decimal.Context):      Objetos de contexto.
                                                             (line  135)
* tratador de erros e codificação do sistema de arquivos: Glossário.
                                                             (line  594)
* tratador de exceção:                   Exceções<2>.        (line    6)
* tratamento de erros:                   Exceções<2>.        (line    6)
* trava:                                 Glossário.          (line 1037)
* trava global do interpretador:         Estado de thread e a trava global do interpretador.
                                                             (line    6)
* trava global do interpretador <1>:     Glossário.          (line  766)
* Traversable (classe em importlib.abc): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  525)
* Traversable (classe em importlib.resources.abc): importlib resources abc – Classes base abstratas para recursos.
                                                             (line   93)
* TraversableResources (classe em importlib.abc): importlib abc – classes base abstratas relacionadas a importação.
                                                             (line  580)
* TraversableResources (classe em importlib.resources.abc): importlib resources abc – Classes base abstratas para recursos.
                                                             (line  165)
* traverseproc (C type):                 Suporte a Coleta Cíclica de Lixo.
                                                             (line  165)
* TreeBuilder (classe em xml.etree.ElementTree): TreeBuilder Objects.
                                                             (line    6)
* Treeview (classe em tkinter.ttk):      ttk Treeview.       (line    6)
* triangular() (no módulo random):       Distribuições com valor real.
                                                             (line   26)
* tries (atributo doctest.DocTestRunner): DocTestRunner objects.
                                                             (line  135)
* True:                                  numbers Integral.   (line   27)
* true:                                  Teste do valor verdade.
                                                             (line   10)
* True <1>:                              Teste do valor verdade.
                                                             (line   24)
* True <2>:                              Tipo booleano - bool.
                                                             (line    9)
* True (variável interna):               Constantes embutidas.
                                                             (line   14)
* truediv() (no módulo operator):        operator — Operadores padrões como funções.
                                                             (line  167)
* trunc() (no módulo math):              Tipos numéricos — int float complex.
                                                             (line  112)
* trunc() (no módulo math) <1>:          Arimética de ponto flutuante.
                                                             (line   90)
* truncate() (método io.IOBase):         I/O Base Classes.   (line  139)
* truncate() (no módulo os):             Arquivos e diretórios.
                                                             (line 1652)
* truth() (no módulo operator):          operator — Operadores padrões como funções.
                                                             (line   61)
* Try (classe em ast):                   Fluxo de controle.  (line  130)
* TryStar (classe em ast):               Fluxo de controle.  (line  173)
* ttk:                                   tkinter ttk — Widgets temáticos do Tk.
                                                             (line    8)
* tty;controle de E/S:                   termios — Controle de tty no estilo POSIX.
                                                             (line    6)
* ttyname() (no módulo os):              Operações dos descritores de arquivos.
                                                             (line  929)
* TUESDAY (no módulo calendar):          calendar — Funções gerais relacionadas ao calendário.
                                                             (line  465)
* tupla nomeada:                         Glossário.          (line 1167)
* Tuple (classe em ast):                 Literais<3>.        (line   67)
* tuple (classe interna):                Tuplas.             (line   13)
* Tuple (no módulo typing):              Apelidos de tipos embutidos.
                                                             (line   50)
* Turtle (classe em turtle):             Classes Públicas.   (line   16)
* turtles() (no módulo turtle):          Configurações e métodos especiais.
                                                             (line   99)
* TurtleScreen (classe em turtle):       Classes Públicas.   (line   22)
* turtlesize() (no módulo turtle):       Aparência.          (line   55)
* type (atributo optparse.Option):       Atributos da classe Option.
                                                             (line   28)
* type (atributo socket.socket):         Socket Objects.     (line  617)
* type (atributo tarfile.TarInfo):       Objetos TarInfo.    (line   86)
* type (atributo urllib.request.Request): Objeto Request.    (line   21)
* Type (classe em typing):               Apelidos de tipos embutidos.
                                                             (line   62)
* type (classe interna):                 Funções embutidas<3>.
                                                             (line 2083)
* TYPE_ALIAS (atributo symtable.SymbolTableType): Examining Symbol Tables.
                                                             (line   31)
* type_check_only() (no módulo typing):  Funções e decoradores.
                                                             (line  418)
* TYPE_CHECKER (atributo optparse.Option): Adicionando novos tipos.
                                                             (line   16)
* TYPE_CHECKING (no módulo typing):      Constante.          (line    6)
* type_comment (atributo ast.arg):       Definições de função e classe.
                                                             (line   74)
* type_comment (atributo ast.Assign):    Instruções.         (line   15)
* type_comment (atributo ast.For):       Fluxo de controle.  (line   54)
* type_comment (atributo ast.FunctionDef): Definições de função e classe.
                                                             (line   25)
* type_comment (atributo ast.With):      Fluxo de controle.  (line  236)
* TYPE_COMMENT (no módulo token):        token — Constantes usadas com árvores de análises do Python.
                                                             (line  148)
* TYPE_IGNORE (no módulo token):         token — Constantes usadas com árvores de análises do Python.
                                                             (line  141)
* TYPE_PARAMETERS (atributo symtable.SymbolTableType): Examining Symbol Tables.
                                                             (line   35)
* TYPE_VARIABLE (atributo symtable.SymbolTableType): Examining Symbol Tables.
                                                             (line   40)
* typeahead() (no módulo curses):        Funções<6>.         (line  544)
* TypeAlias (classe em ast):             Instruções.         (line  162)
* TypeAlias (no módulo typing):          Tipos especiais.    (line  198)
* TypeAliasType (classe em typing):      Criando tipos genéricos e apelidos de tipo.
                                                             (line  509)
* typecode (atributo array.array):       array— Vetores eficientes de valores numéricos.
                                                             (line  114)
* typecodes (no módulo array):           array— Vetores eficientes de valores numéricos.
                                                             (line   83)
* TYPED_ACTIONS (atributo optparse.Option): Adicionando novas ações.
                                                             (line   39)
* typed_subpart_iterator() (no módulo email.iterators): email iterators Iteradores.
                                                             (line   28)
* TypedDict (classe em typing):          Outras diretivas especiais.
                                                             (line  250)
* TypeError:                             Exceções concretas. (line  420)
* TypeGuard (no módulo typing):          Formas especiais.   (line  544)
* TypeIgnore (classe em ast):            Anotações de tipos. (line    6)
* TypeIs (no módulo typing):             Formas especiais.   (line  449)
* TYPES (atributo optparse.Option):      Adicionando novos tipos.
                                                             (line   11)
* types_map (atributo mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line   40)
* types_map (no módulo mimetypes):       mimetypes — Mapeia nomes de arquivos para tipos MIME.
                                                             (line  164)
* types_map_inv (atributo mimetypes.MimeTypes): Objetos MimeTypes.
                                                             (line   48)
* TypeVar (classe em ast):               Parâmetros de tipo. (line    9)
* TypeVar (classe em typing):            Criando tipos genéricos e apelidos de tipo.
                                                             (line   54)
* TypeVarTuple (classe em ast):          Parâmetros de tipo. (line   69)
* TypeVarTuple (classe em typing):       Criando tipos genéricos e apelidos de tipo.
                                                             (line  222)
* TZ:                                    Funções<5>.         (line  660)
* TZ <1>:                                Funções<5>.         (line  662)
* TZ <2>:                                Funções<5>.         (line  670)
* TZ <3>:                                Funções<5>.         (line  675)
* TZ <4>:                                Funções<5>.         (line  677)
* TZ <5>:                                Funções<5>.         (line  740)
* tzinfo (atributo datetime.datetime):   Objetos datetime.   (line  344)
* tzinfo (atributo datetime.time):       Objetos time.       (line   67)
* tzinfo (classe em datetime):           Objetos tzinfo.     (line    6)
* tzname (no módulo time):               Constantes de Fuso Horário.
                                                             (line   26)
* tzname() (método datetime.datetime):   Objetos datetime.   (line  565)
* tzname() (método datetime.time):       Objetos time.       (line  265)
* tzname() (método datetime.timezone):   Objetos timezone.   (line   44)
* tzname() (método datetime.tzinfo):     Objetos tzinfo.     (line  133)
* TZPATH (no módulo zoneinfo):           Globals.            (line    6)
* tzset() (no módulo time):              Funções<5>.         (line  657)
* U (no módulo re):                      Sinalizadores.      (line  121)
* u';literal de string:                  Literais.           (line    8)
* u";literal de string:                  Literais.           (line    8)
* UAdd (classe em ast):                  Expressões<2>.      (line   28)
* ucd_3_2_0 (no módulo unicodedata):     unicodedata — Banco de dados de Unicode.
                                                             (line  183)
* udata (atributo select.kevent):        Kevent Objects.     (line  179)
* UDPServer (classe em socketserver):    socketserver — Um framework para servidores de rede.
                                                             (line   29)
* UF_APPEND (no módulo stat):            stat — Interpretando resultados de stat.
                                                             (line  357)
* UF_COMPRESSED (no módulo stat):        stat — Interpretando resultados de stat.
                                                             (line  370)
* UF_DATAVAULT (no módulo stat):         stat — Interpretando resultados de stat.
                                                             (line  380)
* UF_HIDDEN (no módulo stat):            stat — Interpretando resultados de stat.
                                                             (line  387)
* UF_IMMUTABLE (no módulo stat):         stat — Interpretando resultados de stat.
                                                             (line  353)
* UF_NODUMP (no módulo stat):            stat — Interpretando resultados de stat.
                                                             (line  349)
* UF_NOUNLINK (no módulo stat):          stat — Interpretando resultados de stat.
                                                             (line  366)
* UF_OPAQUE (no módulo stat):            stat — Interpretando resultados de stat.
                                                             (line  361)
* UF_SETTABLE (no módulo stat):          stat — Interpretando resultados de stat.
                                                             (line  343)
* UF_TRACKED (no módulo stat):           stat — Interpretando resultados de stat.
                                                             (line  374)
* uid (atributo tarfile.TarInfo):        Objetos TarInfo.    (line  105)
* UID (classe em plistlib):              plistlib — Gera e analisa arquivos Apple plist.
                                                             (line  144)
* uid() (método imaplib.IMAP4):          Objetos IMAP4.      (line  367)
* uidl() (método poplib.POP3):           Objetos POP3.       (line   99)
* ULONG_MAX (C macro):                   Objetos Inteiros.   (line  263)
* ulp() (no módulo math):                Funções de manipulação de ponto flutuante.
                                                             (line  109)
* umask() (no módulo os):                Parâmetros de processo.
                                                             (line  551)
* unalias (pdb command):                 Comandos de depuração.
                                                             (line  419)
* uname (atributo tarfile.TarInfo):      Objetos TarInfo.    (line  121)
* uname() (no módulo os):                Parâmetros de processo.
                                                             (line  558)
* uname() (no módulo platform):          Multiplataforma.    (line  157)
* unária;aritmética;operação:            Operações aritméticas unárias e bit a bit.
                                                             (line    6)
* unária;bit a bit;operação:             Operações aritméticas unárias e bit a bit.
                                                             (line    6)
* UNARY_INVERT (opcode):                 Instruções em bytecode do Python.
                                                             (line  216)
* UNARY_NEGATIVE (opcode):               Instruções em bytecode do Python.
                                                             (line  205)
* UNARY_NOT (opcode):                    Instruções em bytecode do Python.
                                                             (line  209)
* unaryfunc (C type):                    Slot Type typedefs. (line  106)
* UnaryOp (classe em ast):               Expressões<2>.      (line   23)
* UnboundLocalError:                     Resolução de nomes. (line   16)
* UnboundLocalError <1>:                 Exceções concretas. (line  438)
* uncancel() (método asyncio.Task):      Objeto Task.        (line  247)
* UNCHECKED_HASH (atributo py_compile.PycInvalidationMode): py_compile — Compila arquivos fonte do Python.
                                                             (line  123)
* unconsumed_tail (atributo zlib.Decompress): zlib — Compactação compatível com gzip.
                                                             (line  254)
* unctrl() (no módulo curses.ascii):     curses ascii — Utilitários para caracteres ASCII.
                                                             (line  241)
* unctrl() (no módulo curses):           Funções<6>.         (line  556)
* Underflow (classe em decimal):         Sinais.             (line   99)
* undisplay (pdb command):               Comandos de depuração.
                                                             (line  366)
* undo() (no módulo turtle):             Movimentos de Turtle.
                                                             (line  331)
* undobufferentries() (no módulo turtle): Métodos Especiais da Tartaruga.
                                                             (line   75)
* undoc_header (atributo cmd.Cmd):       Objetos Cmd.        (line  169)
* unescape() (no módulo html):           html — Suporte HTML HyperText Markup Language.
                                                             (line   24)
* unescape() (no módulo xml.sax.saxutils): xml sax saxutils — Utilitários de SAX.
                                                             (line   28)
* UnexpectedException:                   Depuração.          (line  208)
* unexpectedSuccesses (atributo unittest.TestResult): Carregando e executando testes.
                                                             (line  274)
* unfreeze() (no módulo gc):             gc — Interface para o coletor de lixo.
                                                             (line  226)
* unget_wch() (no módulo curses):        Funções<6>.         (line  576)
* ungetch() (no módulo curses):          Funções<6>.         (line  563)
* ungetch() (no módulo msvcrt):          E/S de console.     (line   46)
* ungetmouse() (no módulo curses):       Funções<6>.         (line  585)
* ungetwch() (no módulo msvcrt):         E/S de console.     (line   52)
* unhexlify() (no módulo binascii):      binascii — Converte entre binário e ASCII.
                                                             (line  147)
* união;tipo:                            Tipo União.         (line    6)
* Unicode:                               Sequências imutáveis.
                                                             (line   16)
* Unicode <1>:                           unicodedata — Banco de dados de Unicode.
                                                             (line    6)
* Unicode <2>:                           codecs — Codec registry and base classes.
                                                             (line    8)
* UNICODE (no módulo re):                Sinalizadores.      (line  121)
* unicode_literals (no módulo __future__): Conteúdo do módulo<9>.
                                                             (line   39)
* Unicode;banco de dados:                unicodedata — Banco de dados de Unicode.
                                                             (line    6)
* UnicodeDecodeError:                    Exceções concretas. (line  479)
* UnicodeEncodeError:                    Exceções concretas. (line  474)
* UnicodeError:                          Exceções concretas. (line  444)
* UnicodeTranslateError:                 Exceções concretas. (line  484)
* UnicodeWarning:                        Avisos.             (line   67)
* unidata_version (no módulo unicodedata): unicodedata — Banco de dados de Unicode.
                                                             (line  179)
* unified_diff() (no módulo difflib):    difflib — Helpers for computing deltas.
                                                             (line  293)
* uniform() (no módulo random):          Distribuições com valor real.
                                                             (line   17)
* UnimplementedFileMode:                 http client — HTTP protocol client.
                                                             (line  154)
* Union (classe em ctypes):              Tipos de dados estruturados.
                                                             (line    6)
* Union (no módulo typing):              Formas especiais.   (line    9)
* union() (método frozenset):            Tipo conjuntos — set frozenset.
                                                             (line  103)
* union() (método set):                  Tipo conjuntos — set frozenset.
                                                             (line  103)
* UnionType (classe em types):           Tipos padrão do interpretador.
                                                             (line  184)
* UNIQUE (atributo enum.EnumCheck):      Tipos de Dados<2>.  (line  623)
* unique() (no módulo enum):             Utilities and Decorators.
                                                             (line   53)
* unittest opção de linha de comando; -b: Opções de linha de comando<4>.
                                                             (line    8)
* unittest opção de linha de comando; -buffer: Opções de linha de comando<4>.
                                                             (line    8)
* unittest opção de linha de comando; -c: Opções de linha de comando<4>.
                                                             (line   15)
* unittest opção de linha de comando; -catch: Opções de linha de comando<4>.
                                                             (line   15)
* unittest opção de linha de comando; -durations: Opções de linha de comando<4>.
                                                             (line   51)
* unittest opção de linha de comando; -f: Opções de linha de comando<4>.
                                                             (line   25)
* unittest opção de linha de comando; -failfast: Opções de linha de comando<4>.
                                                             (line   25)
* unittest opção de linha de comando; -k: Opções de linha de comando<4>.
                                                             (line   29)
* unittest opção de linha de comando; -locals: Opções de linha de comando<4>.
                                                             (line   47)
* unittest-discover opção de linha de comando; -p: Test Discovery.
                                                             (line   36)
* unittest-discover opção de linha de comando; -pattern: Test Discovery.
                                                             (line   36)
* unittest-discover opção de linha de comando; -s: Test Discovery.
                                                             (line   32)
* unittest-discover opção de linha de comando; -start-directory: Test Discovery.
                                                             (line   32)
* unittest-discover opção de linha de comando; -t: Test Discovery.
                                                             (line   41)
* unittest-discover opção de linha de comando; -top-level-directory: Test Discovery.
                                                             (line   41)
* unittest-discover opção de linha de comando; -v: Test Discovery.
                                                             (line   28)
* unittest-discover opção de linha de comando; -verbose: Test Discovery.
                                                             (line   28)
* UNIX:                                  Programas Python completos.
                                                             (line   25)
* unix_dialect (classe em csv):          Conteúdo do módulo<3>.
                                                             (line  228)
* unix_shell (no módulo test.support):   test support — Utilitários para o conjunto de teste do Python.
                                                             (line   45)
* UNIX;controle de arquivo:              fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line    6)
* UNIX;controle de E/S:                  fcntl — as chamadas de sistema fcntl e ioctl.
                                                             (line    6)
* UnixDatagramServer (classe em socketserver): socketserver — Um framework para servidores de rede.
                                                             (line   36)
* UnixStreamServer (classe em socketserver): socketserver — Um framework para servidores de rede.
                                                             (line   36)
* unknown (atributo uuid.SafeUUID):      uuid — Objetos UUID conforme RFC 4122.
                                                             (line   43)
* unknown_decl() (método html.parser.HTMLParser): Métodos HTMLParser.
                                                             (line  138)
* unknown_open() (método urllib.request.BaseHandler): BaseHandler Objects.
                                                             (line   56)
* unknown_open() (método urllib.request.UnknownHandler): Objetos UnknownHandler.
                                                             (line    6)
* UnknownHandler (classe em urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  444)
* UnknownProtocol:                       http client — HTTP protocol client.
                                                             (line  146)
* UnknownTransferEncoding:               http client — HTTP protocol client.
                                                             (line  150)
* unlink() (método multiprocessing.shared_memory.SharedMemory): multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos.
                                                             (line  112)
* unlink() (método pathlib.Path):        Renomeando e excluindo.
                                                             (line   48)
* unlink() (método xml.dom.minidom.Node): Objetos DOM.       (line   10)
* unlink() (no módulo os):               Arquivos e diretórios.
                                                             (line 1672)
* unlink() (no módulo test.support.os_helper): test support os_helper — Utilities for os tests.
                                                             (line  166)
* unload() (no módulo test.support.import_helper): test support import_helper — Utilities for import tests.
                                                             (line   76)
* unlock() (método mailbox.Babyl):       Babyl objects.      (line   59)
* unlock() (método mailbox.Mailbox):     Objetos Mailbox.    (line  266)
* unlock() (método mailbox.Maildir):     Maildir objects.    (line  209)
* unlock() (método mailbox.mbox):        mbox objects.       (line   57)
* unlock() (método mailbox.MH):          MH objects.         (line   87)
* unlock() (método mailbox.MMDF):        MMDF objects.       (line   47)
* unlockpt() (no módulo os):             Operações dos descritores de arquivos.
                                                             (line  937)
* UNNAMED_SECTION (no módulo configparser): Objetos ConfigParser.
                                                             (line  360)
* Unpack (no módulo typing):             Formas especiais.   (line  604)
* unpack_archive() (no módulo shutil):   Operações de arquivamento.
                                                             (line  127)
* UNPACK_EX (opcode):                    Instruções em bytecode do Python.
                                                             (line  596)
* unpack_from() (método struct.Struct):  Classes<3>.         (line   40)
* unpack_from() (no módulo struct):      Funções e exceções. (line   34)
* UNPACK_SEQUENCE (opcode):              Instruções em bytecode do Python.
                                                             (line  587)
* unpack() (método struct.Struct):       Classes<3>.         (line   34)
* unpack() (no módulo struct):           Funções e exceções. (line   26)
* unparse() (no módulo ast):             Auxiliares de ast.  (line   68)
* unparsedEntityDecl() (método xml.sax.handler.DTDHandler): DTDHandler Objects.
                                                             (line   12)
* UnparsedEntityDeclHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  340)
* Unpickler (classe em pickle):          Interface do módulo.
                                                             (line  241)
* UnpicklingError:                       Interface do módulo.
                                                             (line  114)
* unquote_plus() (no módulo urllib.parse): URL Quoting.      (line   81)
* unquote_to_bytes() (no módulo urllib.parse): URL Quoting.  (line   91)
* unquote() (no módulo email.utils):     email utils Utilitários diversos.
                                                             (line   52)
* unquote() (no módulo urllib.parse):    URL Quoting.        (line   61)
* unraisablehook() (no módulo sys):      sys — Parâmetros e funções específicas do sistema.
                                                             (line 2050)
* unregister_archive_format() (no módulo shutil): Operações de arquivamento.
                                                             (line  123)
* unregister_dialect() (no módulo csv):  Conteúdo do módulo<3>.
                                                             (line   84)
* unregister_unpack_format() (no módulo shutil): Operações de arquivamento.
                                                             (line  190)
* unregister() (método select.devpoll):  /dev/poll Polling Objects.
                                                             (line   55)
* unregister() (método select.epoll):    Edge and Level Trigger Polling epoll Objects.
                                                             (line   89)
* unregister() (método select.poll):     Polling Objects.    (line   67)
* unregister() (método selectors.BaseSelector): Classes<4>.  (line   80)
* unregister() (no módulo atexit):       atexit — Manipuladores de saída.
                                                             (line   61)
* unregister() (no módulo codecs):       codecs — Codec registry and base classes.
                                                             (line  170)
* unregister() (no módulo faulthandler): Dumping the traceback on a user signal.
                                                             (line   23)
* unsafe (atributo uuid.SafeUUID):       uuid — Objetos UUID conforme RFC 4122.
                                                             (line   39)
* unselect() (método imaplib.IMAP4):     Objetos IMAP4.      (line  378)
* unset() (método test.support.os_helper.EnvironmentVarGuard): test support os_helper — Utilities for os tests.
                                                             (line   71)
* unsetenv() (no módulo os):             Parâmetros de processo.
                                                             (line  594)
* unshare() (no módulo os):              Parâmetros de processo.
                                                             (line  613)
* UnstructuredHeader (classe em email.headerregistry): email headerregistry Custom Header Objects.
                                                             (line  115)
* unsubscribe() (método imaplib.IMAP4):  Objetos IMAP4.      (line  374)
* UnsupportedOperation:                  Exceções<6>.        (line    6)
* UnsupportedOperation <1>:              Interface de alto nível do módulo.
                                                             (line   73)
* until (pdb command):                   Comandos de depuração.
                                                             (line  230)
* untokenize() (no módulo tokenize):     Tokenizando entradas.
                                                             (line   59)
* untouchwin() (método curses.window):   Window Objects.     (line  585)
* unused_data (atributo bz2.BZ2Decompressor): Des compressão incremental.
                                                             (line   79)
* unused_data (atributo lzma.LZMADecompressor): Comprimindo e descomprimindo dados na memória.
                                                             (line  175)
* unused_data (atributo zlib.Decompress): zlib — Compactação compatível com gzip.
                                                             (line  246)
* unverifiable (atributo urllib.request.Request): Objeto Request.
                                                             (line   47)
* unwrap() (método ssl.SSLSocket):       SSL Sockets.        (line  298)
* unwrap() (no módulo inspect):          Classes e funções<2>.
                                                             (line  139)
* unwrap() (no módulo urllib.parse):     Análise de URL.     (line  424)
* up (pdb command):                      Comandos de depuração.
                                                             (line   98)
* up() (no módulo turtle):               Estado do Desenho.  (line   12)
* update_abstractmethods() (no módulo abc): abc — Classes base abstratas.
                                                             (line  343)
* update_authenticated() (método urllib.request.HTTPPasswordMgrWithPriorAuth): HTTPPasswordMgrWithPriorAuth Objects.
                                                             (line   24)
* update_lines_cols() (no módulo curses): Funções<6>.        (line  569)
* update_panels() (no módulo curses.panel): Funções<7>.      (line   23)
* update_visible() (método mailbox.BabylMessage): BabylMessage objects.
                                                             (line   76)
* update_wrapper() (no módulo functools): functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line  657)
* update() (método collections.Counter): Objetos Counter.    (line  129)
* update() (método dict):                Tipo mapeamento — dict.
                                                             (line  240)
* update() (método hashlib.hash):        Objetos hash.       (line   31)
* update() (método hmac.HMAC):           hmac — Código de autenticação de mensagem com chave hash.
                                                             (line   51)
* update() (método http.cookies.Morsel): Objetos Morsel.     (line   91)
* update() (método mailbox.Mailbox):     Objetos Mailbox.    (line  236)
* update() (método mailbox.Maildir):     Maildir objects.    (line  193)
* update() (método set):                 Tipo conjuntos — set frozenset.
                                                             (line  183)
* update() (método trace.CoverageResults): Interface programática.
                                                             (line   57)
* update() (no módulo turtle):           Controle da animação.
                                                             (line   48)
* upgrade_dependencies() (método venv.EnvBuilder): API<2>.   (line  166)
* upper() (método bytearray):            Operações com Bytes e Bytearray.
                                                             (line  766)
* upper() (método bytes):                Operações com Bytes e Bytearray.
                                                             (line  766)
* upper() (método str):                  String Methods<2>.  (line  889)
* urandom() (no módulo os):              Números aleatórios<2>.
                                                             (line   29)
* URL:                                   urllib parse — Analisa URLs para componentes.
                                                             (line    8)
* URL <1>:                               urllib robotparser — Analisador sintático de robots txt.
                                                             (line    8)
* URL <2>:                               http server — HTTP servers.
                                                             (line    8)
* url (atributo http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   51)
* url (atributo urllib.error.HTTPError): urllib error — Classes de exceção levantadas por urllib request.
                                                             (line   40)
* url (atributo urllib.response.addinfourl): urllib response — Response classes used by urllib.
                                                             (line   14)
* url (atributo xmlrpc.client.ProtocolError): Objetos ProtocolError.
                                                             (line   13)
* URL;parsing:                           urllib parse — Analisa URLs para componentes.
                                                             (line    8)
* url2pathname() (no módulo urllib.request): urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  157)
* urlcleanup() (no módulo urllib.request): Legacy interface. (line   62)
* urldefrag() (no módulo urllib.parse):  Análise de URL.     (line  397)
* urlencode() (no módulo urllib.parse):  URL Quoting.        (line  104)
* URLError:                              urllib error — Classes de exceção levantadas por urllib request.
                                                             (line   17)
* urljoin() (no módulo urllib.parse):    Análise de URL.     (line  360)
* urlopen() (no módulo urllib.request):  urllib request — Biblioteca extensível para abrir URLs.
                                                             (line   33)
* URLopener (classe em urllib.request):  Legacy interface.   (line   67)
* urlparse() (no módulo urllib.parse):   Análise de URL.     (line   10)
* urlretrieve() (no módulo urllib.request): Legacy interface.
                                                             (line   10)
* urlsafe_b64decode() (no módulo base64): RFC 4648 Encodings.
                                                             (line   67)
* urlsafe_b64encode() (no módulo base64): RFC 4648 Encodings.
                                                             (line   60)
* urlsplit() (no módulo urllib.parse):   Análise de URL.     (line  265)
* urlunparse() (no módulo urllib.parse): Análise de URL.     (line  256)
* urlunsplit() (no módulo urllib.parse): Análise de URL.     (line  350)
* urn (atributo uuid.UUID):              uuid — Objetos UUID conforme RFC 4122.
                                                             (line  139)
* US (no módulo curses.ascii):           curses ascii — Utilitários para caracteres ASCII.
                                                             (line  123)
* use_default_colors() (no módulo curses): Funções<6>.       (line  600)
* use_env() (no módulo curses):          Funções<6>.         (line  590)
* use_rawinput (atributo cmd.Cmd):       Objetos Cmd.        (line  181)
* USE_STACKCHECK (macro C):              Utilitários do sistema operacional.
                                                             (line   94)
* use_tool_id() (no módulo sys.monitoring): Registro e uso de ferramentas.
                                                             (line    6)
* UseForeignDTD() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line   63)
* USER:                                  getpass — Entrada de senha portátil.
                                                             (line   44)
* USER_BASE (no módulo site):            Conteúdo do módulo<10>.
                                                             (line   33)
* user_call() (método bdb.Bdb):          bdb — Framework do depurador.
                                                             (line  277)
* user_exception() (método bdb.Bdb):     bdb — Framework do depurador.
                                                             (line  296)
* user_line() (método bdb.Bdb):          bdb — Framework do depurador.
                                                             (line  285)
* user_return() (método bdb.Bdb):        bdb — Framework do depurador.
                                                             (line  291)
* USER_SITE (no módulo site):            Conteúdo do módulo<10>.
                                                             (line   20)
* user() (método poplib.POP3):           Objetos POP3.       (line   31)
* usercustomize:                         Módulos de customização.
                                                             (line    7)
* usercustomize <1>:                     Módulos de customização.
                                                             (line   20)
* UserDict (classe em collections):      Objetos UserDict.   (line   12)
* UserList (classe em collections):      Objetos UserList.   (line   16)
* USERNAME:                              os path — Manipulações comuns de nomes de caminhos.
                                                             (line  163)
* USERNAME <1>:                          Parâmetros de processo.
                                                             (line  245)
* USERNAME <2>:                          getpass — Entrada de senha portátil.
                                                             (line   45)
* username (atributo email.headerregistry.Address): email headerregistry Custom Header Objects.
                                                             (line  432)
* USERPROFILE:                           os path<5>.         (line   15)
* USERPROFILE <1>:                       Alterações na API Python<5>.
                                                             (line  121)
* USERPROFILE <2>:                       Windows<45>.        (line   15)
* USERPROFILE <3>:                       os path — Manipulações comuns de nomes de caminhos.
                                                             (line  160)
* userptr() (método curses.panel.Panel): Objetos painel.     (line   57)
* UserString (classe em collections):    Objetos UserString. (line   12)
* UserWarning:                           Avisos.             (line   13)
* USTAR_FORMAT (no módulo tarfile):      tarfile — Ler e gravar arquivos do tipo tar.
                                                             (line  343)
* usuário;definição de id:               Parâmetros de processo.
                                                             (line  533)
* usuário;id:                            Parâmetros de processo.
                                                             (line  341)
* usuário;id efetivo:                    Parâmetros de processo.
                                                             (line  190)
* USub (classe em ast):                  Expressões<2>.      (line   28)
* UTC:                                   time — Acesso ao horário e conversões.
                                                             (line   40)
* utc (atributo datetime.timezone):      Objetos timezone.   (line   70)
* UTC (no módulo datetime):              Constantes.         (line   18)
* utcfromtimestamp() (método de classe datetime.datetime): Objetos datetime.
                                                             (line  136)
* utcnow() (método de classe datetime.datetime): Objetos datetime.
                                                             (line   82)
* utcoffset() (método datetime.datetime): Objetos datetime.  (line  545)
* utcoffset() (método datetime.time):    Objetos time.       (line  245)
* utcoffset() (método datetime.timezone): Objetos timezone.  (line   32)
* utcoffset() (método datetime.tzinfo):  Objetos tzinfo.     (line   42)
* utctimetuple() (método datetime.datetime): Objetos datetime.
                                                             (line  591)
* utf8 (atributo email.policy.EmailPolicy): email policy Policy Objects.
                                                             (line  380)
* utf8_enabled (atributo imaplib.IMAP4): Objetos IMAP4.      (line  406)
* utf8_mode (atributo sys.flags):        sys — Parâmetros e funções específicas do sistema.
                                                             (line  596)
* utf8() (método poplib.POP3):           Objetos POP3.       (line  106)
* utime() (no módulo os):                Arquivos e diretórios.
                                                             (line 1687)
* UUID (classe em uuid):                 uuid — Objetos UUID conforme RFC 4122.
                                                             (line   48)
* uuid opção de linha de comando; -h:    Uso na linha de comando<4>.
                                                             (line   15)
* uuid opção de linha de comando; -help: Uso na linha de comando<4>.
                                                             (line   15)
* uuid opção de linha de comando; -n:    Uso na linha de comando<4>.
                                                             (line   25)
* uuid opção de linha de comando; -N:    Uso na linha de comando<4>.
                                                             (line   33)
* uuid opção de linha de comando; -name: Uso na linha de comando<4>.
                                                             (line   33)
* uuid opção de linha de comando; -namespace: Uso na linha de comando<4>.
                                                             (line   25)
* uuid opção de linha de comando; -u:    Uso na linha de comando<4>.
                                                             (line   19)
* uuid opção de linha de comando; -uuid: Uso na linha de comando<4>.
                                                             (line   19)
* uuid1() (no módulo uuid):              uuid — Objetos UUID conforme RFC 4122.
                                                             (line  184)
* uuid3() (no módulo uuid):              uuid — Objetos UUID conforme RFC 4122.
                                                             (line  192)
* uuid4() (no módulo uuid):              uuid — Objetos UUID conforme RFC 4122.
                                                             (line  198)
* uuid5() (no módulo uuid):              uuid — Objetos UUID conforme RFC 4122.
                                                             (line  202)
* v4_int_to_packed() (no módulo ipaddress): Outras funções de nível de módulo.
                                                             (line    8)
* v6_int_to_packed() (no módulo ipaddress): Outras funções de nível de módulo.
                                                             (line   21)
* valid_signals() (no módulo signal):    Conteúdo do módulo<5>.
                                                             (line  337)
* validator() (no módulo wsgiref.validate): wsgiref validate — Verificador de conformidade WSGI.
                                                             (line   22)
* valor:                                 Sintaxes de criação de dicionário.
                                                             (line    6)
* valor de um objeto:                    Objetos valores e tipos.
                                                             (line   10)
* value (atributo ctypes._SimpleCData):  Tipos de dados fundamentais<2>.
                                                             (line   17)
* value (atributo enum.Enum):            Tipos de Dados<2>.  (line  133)
* value (atributo http.cookiejar.Cookie): Objetos Cookie<2>. (line   32)
* value (atributo http.cookies.Morsel):  Objetos Morsel.     (line   49)
* value (atributo StopIteration):        Exceções concretas. (line  279)
* value (atributo xml.dom.Attr):         Attr Objects.       (line   23)
* value_decode() (método http.cookies.BaseCookie): Objetos Cookie.
                                                             (line    6)
* value_encode() (método http.cookies.BaseCookie): Objetos Cookie.
                                                             (line   13)
* Value() (método multiprocessing.managers.SyncManager): Gerenciadores.
                                                             (line  219)
* Value() (no módulo multiprocessing.sharedctypes): O módulo multiprocessing sharedctypes.
                                                             (line   72)
* Value() (no módulo multiprocessing):   Objetos ctypes compartilhados.
                                                             (line    9)
* ValueError:                            Exceções concretas. (line  489)
* valuerefs() (método weakref.WeakValueDictionary): weakref — Referências fracas.
                                                             (line  236)
* Values (classe em optparse):           Definindo as opções.
                                                             (line   86)
* values() (método contextvars.Context): Gerenciamento de contexto manual.
                                                             (line  137)
* values() (método dict):                Tipo mapeamento — dict.
                                                             (line  258)
* values() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  236)
* values() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  347)
* values() (método mailbox.Mailbox):     Objetos Mailbox.    (line  129)
* values() (método types.MappingProxyType): Tipos padrão do interpretador.
                                                             (line  281)
* ValuesView (classe em collections.abc): Classes Base Abstrata de Coleções – Descrições Detalhadas.
                                                             (line  125)
* ValuesView (classe em typing):         Apelidos de contêineres ABC em collections abc.
                                                             (line  125)
* var (atributo contextvars.Token):      Variáveis de contexto.
                                                             (line   87)
* variance (atributo statistics.NormalDist): Objetos NormalDist.
                                                             (line   42)
* variance() (no módulo statistics):     Detalhes das funções.
                                                             (line  464)
* variant (atributo uuid.UUID):          uuid — Objetos UUID conforme RFC 4122.
                                                             (line  143)
* variáveis de ambiente;definição:       Parâmetros de processo.
                                                             (line  360)
* variáveis de ambiente;exclusão:        Parâmetros de processo.
                                                             (line  596)
* variável de ambiente; __PYVENV_LAUNCHER__: PyConfig.       (line  187)
* variável de ambiente; __PYVENV_LAUNCHER__ <1>: PyConfig.   (line  707)
* variável de ambiente; BASECFLAGS:      Sinalizadores do compilador.
                                                             (line   69)
* variável de ambiente; BASECPPFLAGS:    Sinalizadores do pré-processador.
                                                             (line   23)
* variável de ambiente; BLDSHARED:       Sinalizadores do vinculador.
                                                             (line   68)
* variável de ambiente; BROWSER:         webbrowser — Controlador de navegador web conveniente.
                                                             (line   21)
* variável de ambiente; BROWSER <1>:     webbrowser — Controlador de navegador web conveniente.
                                                             (line   36)
* variável de ambiente; BROWSER <2>:     Interface de linha de comando<6>.
                                                             (line   90)
* variável de ambiente; CC:              New Improved and Deprecated Modules<4>.
                                                             (line   58)
* variável de ambiente; CC <1>:          Sinalizadores do compilador.
                                                             (line    6)
* variável de ambiente; CCSHARED:        Sinalizadores do compilador.
                                                             (line   84)
* variável de ambiente; CFLAGS:          New Improved and Deprecated Modules<4>.
                                                             (line   59)
* variável de ambiente; CFLAGS <1>:      Opções de desempenho.
                                                             (line   31)
* variável de ambiente; CFLAGS <2>:      Sinalizadores do compilador.
                                                             (line   18)
* variável de ambiente; CFLAGS <3>:      Sinalizadores do compilador.
                                                             (line   26)
* variável de ambiente; CFLAGS <4>:      Sinalizadores do compilador.
                                                             (line   29)
* variável de ambiente; CFLAGS <5>:      Sinalizadores do compilador.
                                                             (line   34)
* variável de ambiente; CFLAGS <6>:      Sinalizadores do compilador.
                                                             (line   57)
* variável de ambiente; CFLAGS <7>:      Sinalizadores do vinculador.
                                                             (line   18)
* variável de ambiente; CFLAGS_ALIASING: Sinalizadores do compilador.
                                                             (line   77)
* variável de ambiente; CFLAGS_NODIST:   Sinalizadores do compilador.
                                                             (line   22)
* variável de ambiente; CFLAGS_NODIST <1>: Sinalizadores do compilador.
                                                             (line   24)
* variável de ambiente; CFLAGS_NODIST <2>: Sinalizadores do compilador.
                                                             (line   64)
* variável de ambiente; CFLAGS_NODIST <3>: Sinalizadores do vinculador.
                                                             (line   26)
* variável de ambiente; CFLAGSFORSHARED: Sinalizadores do compilador.
                                                             (line   91)
* variável de ambiente; COLUMNS:         Funções<6>.         (line  595)
* variável de ambiente; COLUMNS <1>:     Funções<6>.         (line  598)
* variável de ambiente; COMPILEALL_OPTS: Sinalizadores do compilador.
                                                             (line   44)
* variável de ambiente; COMSPEC:         Gerenciamento de processo.
                                                             (line  813)
* variável de ambiente; COMSPEC <1>:     Construtor Popen.   (line  117)
* variável de ambiente; CONFIGURE_CFLAGS: Sinalizadores do compilador.
                                                             (line   55)
* variável de ambiente; CONFIGURE_CFLAGS_NODIST: Sinalizadores do compilador.
                                                             (line   62)
* variável de ambiente; CONFIGURE_CPPFLAGS: Sinalizadores do pré-processador.
                                                             (line    6)
* variável de ambiente; CONFIGURE_LDFLAGS: Sinalizadores do vinculador.
                                                             (line   13)
* variável de ambiente; CONFIGURE_LDFLAGS_NODIST: Sinalizadores do vinculador.
                                                             (line   39)
* variável de ambiente; CPPFLAGS:        New Improved and Deprecated Modules<4>.
                                                             (line   59)
* variável de ambiente; CPPFLAGS <1>:    Sinalizadores do pré-processador.
                                                             (line    8)
* variável de ambiente; CPPFLAGS <2>:    Sinalizadores do pré-processador.
                                                             (line   13)
* variável de ambiente; CPPFLAGS <3>:    Sinalizadores do pré-processador.
                                                             (line   19)
* variável de ambiente; CPPFLAGS <4>:    Sinalizadores do vinculador.
                                                             (line   51)
* variável de ambiente; CXX:             Sinalizadores do compilador.
                                                             (line   12)
* variável de ambiente; DISPLAY:         Módulos Tkinter.    (line   29)
* variável de ambiente; EnableControlFlowGuard: Construção<40>.
                                                             (line   47)
* variável de ambiente; EXTRA_CFLAGS:    Sinalizadores do compilador.
                                                             (line   51)
* variável de ambiente; HOME:            os path<5>.         (line   15)
* variável de ambiente; HOME <1>:        Alterações na API Python<5>.
                                                             (line  121)
* variável de ambiente; HOME <2>:        Windows<45>.        (line   15)
* variável de ambiente; HOME <3>:        Windows<45>.        (line   18)
* variável de ambiente; HOME <4>:        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  154)
* variável de ambiente; HOME <5>:        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  172)
* variável de ambiente; HOME <6>:        Módulos Tkinter.    (line   69)
* variável de ambiente; HOMEDRIVE:       os path — Manipulações comuns de nomes de caminhos.
                                                             (line  161)
* variável de ambiente; HOMEPATH:        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  161)
* variável de ambiente; IDLESTARTUP:     IDLE<41>.           (line  176)
* variável de ambiente; IDLESTARTUP <1>: IDLE<45>.           (line    9)
* variável de ambiente; IDLESTARTUP <2>: IDLE<51>.           (line    9)
* variável de ambiente; IDLESTARTUP <3>: Startup and Code Execution.
                                                             (line    7)
* variável de ambiente; IDLESTARTUP <4>: Uso na linha de comando<5>.
                                                             (line   41)
* variável de ambiente; LANG:            API do GNU gettext. (line   21)
* variável de ambiente; LANG <1>:        API baseada em classe.
                                                             (line   26)
* variável de ambiente; LANG <2>:        locale — Serviços de internacionalização.
                                                             (line   65)
* variável de ambiente; LANG <3>:        locale — Serviços de internacionalização.
                                                             (line  365)
* variável de ambiente; LANG <4>:        locale — Serviços de internacionalização.
                                                             (line  370)
* variável de ambiente; LANGUAGE:        API do GNU gettext. (line   20)
* variável de ambiente; LANGUAGE <1>:    API baseada em classe.
                                                             (line   25)
* variável de ambiente; LC_ALL:          API do GNU gettext. (line   20)
* variável de ambiente; LC_ALL <1>:      API baseada em classe.
                                                             (line   25)
* variável de ambiente; LC_MESSAGES:     API do GNU gettext. (line   20)
* variável de ambiente; LC_MESSAGES <1>: API baseada em classe.
                                                             (line   26)
* variável de ambiente; LDFLAGS:         New Improved and Deprecated Modules<4>.
                                                             (line   59)
* variável de ambiente; LDFLAGS <1>:     Sinalizadores do pré-processador.
                                                             (line   19)
* variável de ambiente; LDFLAGS <2>:     Sinalizadores do vinculador.
                                                             (line   15)
* variável de ambiente; LDFLAGS <3>:     Sinalizadores do vinculador.
                                                             (line   18)
* variável de ambiente; LDFLAGS <4>:     Sinalizadores do vinculador.
                                                             (line   28)
* variável de ambiente; LDFLAGS <5>:     Sinalizadores do vinculador.
                                                             (line   31)
* variável de ambiente; LDFLAGS <6>:     Sinalizadores do vinculador.
                                                             (line   36)
* variável de ambiente; LDFLAGS <7>:     Sinalizadores do vinculador.
                                                             (line   46)
* variável de ambiente; LDFLAGS <8>:     Sinalizadores do vinculador.
                                                             (line   51)
* variável de ambiente; LDFLAGS_NODIST:  Sinalizadores do vinculador.
                                                             (line   24)
* variável de ambiente; LDFLAGS_NODIST <1>: Sinalizadores do vinculador.
                                                             (line   26)
* variável de ambiente; LDFLAGS_NODIST <2>: Sinalizadores do vinculador.
                                                             (line   41)
* variável de ambiente; LDSHARED:        Sinalizadores do vinculador.
                                                             (line   62)
* variável de ambiente; LIBS:            Sinalizadores do vinculador.
                                                             (line   55)
* variável de ambiente; LINES:           Funções<6>.         (line  125)
* variável de ambiente; LINES <1>:       Funções<6>.         (line  595)
* variável de ambiente; LINES <2>:       Funções<6>.         (line  597)
* variável de ambiente; LINKCC:          Sinalizadores do vinculador.
                                                             (line    6)
* variável de ambiente; LOGNAME:         Parâmetros de processo.
                                                             (line  245)
* variável de ambiente; LOGNAME <1>:     getpass — Entrada de senha portátil.
                                                             (line   44)
* variável de ambiente; MANPAGER:        pydoc — Gerador de documentação e sistema de ajuda online.
                                                             (line   47)
* variável de ambiente; MANPAGER <1>:    pydoc — Gerador de documentação e sistema de ajuda online.
                                                             (line   49)
* variável de ambiente; no_proxy:        urllib request — Biblioteca extensível para abrir URLs.
                                                             (line  312)
* variável de ambiente; OPT:             Opções de depuração.
                                                             (line   42)
* variável de ambiente; OPT <1>:         Sinalizadores do compilador.
                                                             (line   73)
* variável de ambiente; PAGER:           pydoc — Gerador de documentação e sistema de ajuda online.
                                                             (line   47)
* variável de ambiente; PATH:            Alterações na API Python<5>.
                                                             (line  148)
* variável de ambiente; PATH <1>:        Changes in ‘python’ Command Behavior<2>.
                                                             (line    6)
* variável de ambiente; PATH <2>:        Changes in ‘python’ Command Behavior<2>.
                                                             (line   11)
* variável de ambiente; PATH <3>:        Changes in ‘python’ Command Behavior<2>.
                                                             (line   12)
* variável de ambiente; PATH <4>:        macOS<8>.           (line   16)
* variável de ambiente; PATH <5>:        Windows<26>.        (line   56)
* variável de ambiente; PATH <6>:        Windows<30>.        (line   14)
* variável de ambiente; PATH <7>:        Segurança<40>.      (line   16)
* variável de ambiente; PATH <8>:        Segurança<40>.      (line   20)
* variável de ambiente; PATH <9>:        O caminho de busca dos módulos.
                                                             (line   17)
* variável de ambiente; PATH <10>:       Scripts Python executáveis.
                                                             (line   11)
* variável de ambiente; PATH <11>:       Variáveis de ambiente.
                                                             (line   27)
* variável de ambiente; PATH <12>:       Diversos<2>.        (line   16)
* variável de ambiente; PATH <13>:       Etapas de instalação.
                                                             (line   35)
* variável de ambiente; PATH <14>:       Etapas de instalação.
                                                             (line   61)
* variável de ambiente; PATH <15>:       Instalando sem UI.  (line   80)
* variável de ambiente; PATH <16>:       Instalando sem UI.  (line   85)
* variável de ambiente; PATH <17>:       Excursus Configurando variáveis de ambiente.
                                                             (line   23)
* variável de ambiente; PATH <18>:       Excursus Configurando variáveis de ambiente.
                                                             (line   37)
* variável de ambiente; PATH <19>:       Encontrando o executável do Python.
                                                             (line   14)
* variável de ambiente; PATH <20>:       Encontrando o executável do Python.
                                                             (line   22)
* variável de ambiente; PATH <21>:       Encontrando o executável do Python.
                                                             (line   24)
* variável de ambiente; PATH <22>:       Inicializador Python para Windows.
                                                             (line   13)
* variável de ambiente; PATH <23>:       Pela linha de comando.
                                                             (line    9)
* variável de ambiente; PATH <24>:       Linhas Shebang.     (line   56)
* variável de ambiente; PATH <25>:       Linhas Shebang.     (line   62)
* variável de ambiente; PATH <26>:       Linhas Shebang.     (line   65)
* variável de ambiente; PATH <27>:       Linhas Shebang.     (line   69)
* variável de ambiente; PATH <28>:       Comparação com os módulos os e os path.
                                                             (line   43)
* variável de ambiente; PATH <29>:       Operações de diretório e arquivos.
                                                             (line  457)
* variável de ambiente; PATH <30>:       Operações de diretório e arquivos.
                                                             (line  463)
* variável de ambiente; PATH <31>:       Gerenciamento de processo.
                                                             (line   46)
* variável de ambiente; PATH <32>:       Gerenciamento de processo.
                                                             (line   88)
* variável de ambiente; PATH <33>:       Gerenciamento de processo.
                                                             (line   92)
* variável de ambiente; PATH <34>:       Gerenciamento de processo.
                                                             (line   94)
* variável de ambiente; PATH <35>:       Gerenciamento de processo.
                                                             (line  569)
* variável de ambiente; PATH <36>:       Gerenciamento de processo.
                                                             (line  662)
* variável de ambiente; PATH <37>:       Gerenciamento de processo.
                                                             (line  666)
* variável de ambiente; PATH <38>:       Gerenciamento de processo.
                                                             (line  668)
* variável de ambiente; PATH <39>:       Diversas informações de sistema.
                                                             (line  145)
* variável de ambiente; PATH <40>:       Construtor Popen.   (line   37)
* variável de ambiente; PATH <41>:       webbrowser — Controlador de navegador web conveniente.
                                                             (line   54)
* variável de ambiente; PATH <42>:       Como funcionam os venvs.
                                                             (line   17)
* variável de ambiente; PATH <43>:       Como funcionam os venvs.
                                                             (line   62)
* variável de ambiente; PATH <44>:       Como funcionam os venvs.
                                                             (line   67)
* variável de ambiente; PATH <45>:       site — Gancho de configuração específico do site.
                                                             (line   68)
* variável de ambiente; PATH <46>:       Incorporando Python<2>.
                                                             (line   31)
* variável de ambiente; PATH <47>:       Incorporando Python<2>.
                                                             (line   37)
* variável de ambiente; PATH <48>:       Como tornar um script Python executável no Unix?.
                                                             (line   24)
* variável de ambiente; PATH <49>:       Como tornar um script Python executável no Unix?.
                                                             (line   28)
* variável de ambiente; PATHEXT:         Other Improvements<2>.
                                                             (line   30)
* variável de ambiente; PATHEXT <1>:     Biblioteca<110>.    (line  138)
* variável de ambiente; PATHEXT <2>:     Instalando sem UI.  (line   81)
* variável de ambiente; PATHEXT <3>:     Instalando sem UI.  (line   86)
* variável de ambiente; PATHEXT <4>:     Operações de diretório e arquivos.
                                                             (line  473)
* variável de ambiente; PIP_USER:        Windows<47>.        (line  102)
* variável de ambiente; PROFILE_TASK:    Construção<20>.     (line   13)
* variável de ambiente; PROFILE_TASK <1>: Opções de desempenho.
                                                             (line   13)
* variável de ambiente; PROFILE_TASK <2>: Opções de desempenho.
                                                             (line   37)
* variável de ambiente; PURIFY:          Sinalizadores do compilador.
                                                             (line  137)
* variável de ambiente; PY_BUILTIN_MODULE_CFLAGS: Sinalizadores do compilador.
                                                             (line  127)
* variável de ambiente; PY_CFLAGS:       Sinalizadores do compilador.
                                                             (line   99)
* variável de ambiente; PY_CFLAGS_NODIST: Sinalizadores do compilador.
                                                             (line  104)
* variável de ambiente; PY_CORE_CFLAGS:  Sinalizadores do compilador.
                                                             (line  121)
* variável de ambiente; PY_CORE_LDFLAGS: Sinalizadores do vinculador.
                                                             (line   84)
* variável de ambiente; PY_CPPFLAGS:     Sinalizadores do pré-processador.
                                                             (line   27)
* variável de ambiente; PY_LDFLAGS:      Sinalizadores do vinculador.
                                                             (line   74)
* variável de ambiente; PY_LDFLAGS_NODIST: Sinalizadores do vinculador.
                                                             (line   78)
* variável de ambiente; PY_STDMODULE_CFLAGS: Sinalizadores do compilador.
                                                             (line  111)
* variável de ambiente; PYLAUNCHER_ALLOW_INSTALL: Windows<14>.
                                                             (line   25)
* variável de ambiente; PYLAUNCHER_ALLOW_INSTALL <1>: Windows<28>.
                                                             (line   16)
* variável de ambiente; PYTHON_BASIC_REPL: Um melhor interpretador interativo.
                                                             (line   28)
* variável de ambiente; PYTHON_BASIC_REPL <1>: Biblioteca<16>.
                                                             (line  332)
* variável de ambiente; PYTHON_BASIC_REPL <2>: Biblioteca<16>.
                                                             (line  336)
* variável de ambiente; PYTHON_BASIC_REPL <3>: Núcleo e embutidos<22>.
                                                             (line   12)
* variável de ambiente; PYTHON_BASIC_REPL <4>: Modo interativo<2>.
                                                             (line   26)
* variável de ambiente; PYTHON_BASIC_REPL <5>: Variáveis de ambiente.
                                                             (line  546)
* variável de ambiente; PYTHON_BASIC_REPL <6>: Exemplo.      (line   81)
* variável de ambiente; PYTHON_BASIC_REPL <7>: asyncio — E/S assíncrona.
                                                             (line   82)
* variável de ambiente; PYTHON_COLORS:   Resumo – Destaques da versão.
                                                             (line   60)
* variável de ambiente; PYTHON_COLORS <1>: Mensagens de erro melhoradas.
                                                             (line    8)
* variável de ambiente; PYTHON_COLORS <2>: doctest.          (line    7)
* variável de ambiente; PYTHON_COLORS <3>: Controlando cores.
                                                             (line   25)
* variável de ambiente; PYTHON_COLORS <4>: Variáveis de ambiente.
                                                             (line  538)
* variável de ambiente; PYTHON_CPU_COUNT: os.                (line   12)
* variável de ambiente; PYTHON_CPU_COUNT <1>: Opções diversas.
                                                             (line  398)
* variável de ambiente; PYTHON_CPU_COUNT <2>: Variáveis de ambiente.
                                                             (line  512)
* variável de ambiente; PYTHON_CPU_COUNT <3>: Diversas informações de sistema.
                                                             (line   49)
* variável de ambiente; PYTHON_CPU_COUNT <4>: Diversas informações de sistema.
                                                             (line   70)
* variável de ambiente; PYTHON_CPU_COUNT <5>: Diversos<4>.   (line   30)
* variável de ambiente; PYTHON_CPU_COUNT <6>: PyConfig.      (line  498)
* variável de ambiente; PYTHON_DOM:      Conteúdo do módulo<6>.
                                                             (line   23)
* variável de ambiente; PYTHON_FROZEN_MODULES: Outras mudanças na linguagem.
                                                             (line   47)
* variável de ambiente; PYTHON_FROZEN_MODULES <1>: Núcleo e embutidos<33>.
                                                             (line  109)
* variável de ambiente; PYTHON_FROZEN_MODULES <2>: Opções diversas.
                                                             (line  367)
* variável de ambiente; PYTHON_FROZEN_MODULES <3>: Variáveis de ambiente.
                                                             (line  522)
* variável de ambiente; PYTHON_GIL:      CPython com threads livres.
                                                             (line   25)
* variável de ambiente; PYTHON_GIL <1>:  CPython com threads livres.
                                                             (line   41)
* variável de ambiente; PYTHON_GIL <2>:  Núcleo e embutidos<18>.
                                                             (line   37)
* variável de ambiente; PYTHON_GIL <3>:  Opções diversas.    (line  417)
* variável de ambiente; PYTHON_GIL <4>:  Variáveis de ambiente.
                                                             (line  563)
* variável de ambiente; PYTHON_GIL <5>:  A trava global do interpretador no Python com threads livres.
                                                             (line    8)
* variável de ambiente; PYTHON_GIL <6>:  Glossário.          (line  788)
* variável de ambiente; PYTHON_HISTORY:  Outras mudanças na linguagem.
                                                             (line   59)
* variável de ambiente; PYTHON_HISTORY <1>: Biblioteca<36>.  (line  578)
* variável de ambiente; PYTHON_HISTORY <2>: Variáveis de ambiente.
                                                             (line  555)
* variável de ambiente; PYTHON_JIT:      Um compilador just-in-time JIT experimental.
                                                             (line   21)
* variável de ambiente; PYTHON_JIT <1>:  Um compilador just-in-time JIT experimental.
                                                             (line   24)
* variável de ambiente; PYTHON_JIT <2>:  Um compilador just-in-time JIT experimental.
                                                             (line   28)
* variável de ambiente; PYTHON_JIT <3>:  Variáveis de ambiente.
                                                             (line  576)
* variável de ambiente; PYTHON_PERF_JIT_SUPPORT: Outras mudanças na linguagem.
                                                             (line   54)
* variável de ambiente; PYTHON_PERF_JIT_SUPPORT <1>: Opções diversas.
                                                             (line  387)
* variável de ambiente; PYTHON_PERF_JIT_SUPPORT <2>: Variáveis de ambiente.
                                                             (line  497)
* variável de ambiente; PYTHON_PERF_JIT_SUPPORT <3>: PyConfig.
                                                             (line  878)
* variável de ambiente; PYTHON_PERF_JIT_SUPPORT <4>: PyConfig.
                                                             (line  881)
* variável de ambiente; PYTHON_PERF_JIT_SUPPORT <5>: Como trabalhar sem ponteiros de quadro.
                                                             (line   14)
* variável de ambiente; PYTHON_PRESITE:  Opções diversas.    (line  409)
* variável de ambiente; PYTHON_PRESITE <1>: Variáveis de modo de depuração.
                                                             (line   26)
* variável de ambiente; PYTHON_PRESITE <2>: PyConfig.        (line  778)
* variável de ambiente; PYTHON_PRESITE=package.module: Núcleo e embutidos<33>.
                                                             (line  160)
* variável de ambiente; PYTHONASYNCIODEBUG: Variáveis de ambiente.
                                                             (line  287)
* variável de ambiente; PYTHONASYNCIODEBUG <1>: Habilitando o modo de debug.
                                                             (line   10)
* variável de ambiente; PYTHONASYNCIODEBUG <2>: Modo de Depuração.
                                                             (line   11)
* variável de ambiente; PYTHONASYNCIODEBUG <3>: Efeitos do Modo de Desenvolvimento do Python.
                                                             (line   68)
* variável de ambiente; PYTHONBREAKPOINT: PEP 553 breakpoint embutida.
                                                             (line   13)
* variável de ambiente; PYTHONBREAKPOINT <1>: Variáveis de ambiente.
                                                             (line   83)
* variável de ambiente; PYTHONBREAKPOINT <2>: Funções embutidas<3>.
                                                             (line  162)
* variável de ambiente; PYTHONBREAKPOINT <3>: sys — Parâmetros e funções específicas do sistema.
                                                             (line  267)
* variável de ambiente; PYTHONBREAKPOINT <4>: sys — Parâmetros e funções específicas do sistema.
                                                             (line  281)
* variável de ambiente; PYTHONBREAKPOINT <5>: sys — Parâmetros e funções específicas do sistema.
                                                             (line  286)
* variável de ambiente; PYTHONCASEOK:    Alterações na API Python<4>.
                                                             (line   30)
* variável de ambiente; PYTHONCASEOK <1>: PEP 235 Importing Modules on Case-Insensitive Platforms.
                                                             (line   17)
* variável de ambiente; PYTHONCASEOK <2>: Biblioteca<128>.   (line  144)
* variável de ambiente; PYTHONCASEOK <3>: Variáveis de ambiente.
                                                             (line  136)
* variável de ambiente; PYTHONCASEOK <4>: Funções embutidas<3>.
                                                             (line 2322)
* variável de ambiente; PYTHONCOERCECLOCALE: PEP 538 Coerção de localidade C legada.
                                                             (line   14)
* variável de ambiente; PYTHONCOERCECLOCALE <1>: Variáveis de ambiente.
                                                             (line  381)
* variável de ambiente; PYTHONCOERCECLOCALE <2>: Opções gerais.
                                                             (line   89)
* variável de ambiente; PYTHONCOERCECLOCALE <3>: Modo UTF-8 do Python.
                                                             (line   59)
* variável de ambiente; PYTHONCOERCECLOCALE <4>: Configuração do Python.
                                                             (line   15)
* variável de ambiente; PYTHONDEBUG:     Opções diversas.    (line   40)
* variável de ambiente; PYTHONDEBUG <1>: Variáveis de ambiente.
                                                             (line   97)
* variável de ambiente; PYTHONDEBUG <2>: Compilação de depuração do Python.
                                                             (line   21)
* variável de ambiente; PYTHONDEBUG <3>: Variáveis de configuração global.
                                                             (line   40)
* variável de ambiente; PYTHONDEBUG <4>: PyConfig.           (line  669)
* variável de ambiente; PYTHONDEVMODE:   Modo de Desenvolvimento do Python -X dev.
                                                             (line    7)
* variável de ambiente; PYTHONDEVMODE <1>: Opções diversas.  (line  323)
* variável de ambiente; PYTHONDEVMODE <2>: Variáveis de ambiente.
                                                             (line  440)
* variável de ambiente; PYTHONDEVMODE <3>: Modo de Desenvolvimento do Python.
                                                             (line   15)
* variável de ambiente; PYTHONDEVMODE <4>: PyConfig.         (line  297)
* variável de ambiente; PYTHONDONTWRITEBYTECODE: Alterações no interpretador<2>.
                                                             (line   16)
* variável de ambiente; PYTHONDONTWRITEBYTECODE <1>: Módulos Novos ou Aprimorados<2>.
                                                             (line  627)
* variável de ambiente; PYTHONDONTWRITEBYTECODE <2>: Opções diversas.
                                                             (line   19)
* variável de ambiente; PYTHONDONTWRITEBYTECODE <3>: Variáveis de ambiente.
                                                             (line  142)
* variável de ambiente; PYTHONDONTWRITEBYTECODE <4>: sys — Parâmetros e funções específicas do sistema.
                                                             (line  354)
* variável de ambiente; PYTHONDONTWRITEBYTECODE <5>: Variáveis de configuração global.
                                                             (line   55)
* variável de ambiente; PYTHONDONTWRITEBYTECODE <6>: PyConfig.
                                                             (line  956)
* variável de ambiente; PYTHONDONTWRITEBYTECODE <7>: Como faço para criar um arquivo pyc?.
                                                             (line   21)
* variável de ambiente; PYTHONDUMPREFS:  A compilação de depuração usa a mesma ABI da compilação de lançamento.
                                                             (line   15)
* variável de ambiente; PYTHONDUMPREFS <1>: Construção<57>.  (line   54)
* variável de ambiente; PYTHONDUMPREFS <2>: Variáveis de modo de depuração.
                                                             (line    6)
* variável de ambiente; PYTHONDUMPREFS <3>: Opções de depuração.
                                                             (line   22)
* variável de ambiente; PYTHONDUMPREFS <4>: Opções de depuração.
                                                             (line   24)
* variável de ambiente; PYTHONDUMPREFS <5>: PyConfig.        (line  308)
* variável de ambiente; PYTHONDUMPREFSFILE: Núcleo e embutidos<85>.
                                                             (line   16)
* variável de ambiente; PYTHONDUMPREFSFILE <1>: Variáveis de modo de depuração.
                                                             (line   14)
* variável de ambiente; PYTHONEXECUTABLE: Variáveis de ambiente.
                                                             (line  226)
* variável de ambiente; PYTHONEXECUTABLE <1>: PyConfig.      (line  704)
* variável de ambiente; PYTHONFAULTHANDLER: faulthandler<4>. (line   12)
* variável de ambiente; PYTHONFAULTHANDLER <1>: Opções diversas.
                                                             (line  282)
* variável de ambiente; PYTHONFAULTHANDLER <2>: Variáveis de ambiente.
                                                             (line  254)
* variável de ambiente; PYTHONFAULTHANDLER <3>: Efeitos do Modo de Desenvolvimento do Python.
                                                             (line   61)
* variável de ambiente; PYTHONFAULTHANDLER <4>: faulthandler — Dump the Python traceback.
                                                             (line   15)
* variável de ambiente; PYTHONFAULTHANDLER <5>: PyConfig.    (line  346)
* variável de ambiente; PYTHONHASHSEED:  Builtin functions and types.
                                                             (line   17)
* variável de ambiente; PYTHONHASHSEED <1>: Porting Python code.
                                                             (line    6)
* variável de ambiente; PYTHONHASHSEED <2>: Núcleo e embutidos<142>.
                                                             (line   30)
* variável de ambiente; PYTHONHASHSEED <3>: Opções diversas. (line  138)
* variável de ambiente; PYTHONHASHSEED <4>: Opções diversas. (line  155)
* variável de ambiente; PYTHONHASHSEED <5>: Variáveis de ambiente.
                                                             (line  157)
* variável de ambiente; PYTHONHASHSEED <6>: Variáveis de ambiente.
                                                             (line  163)
* variável de ambiente; PYTHONHASHSEED <7>: Personalização básica.
                                                             (line  333)
* variável de ambiente; PYTHONHASHSEED <8>: Variáveis de configuração global.
                                                             (line   82)
* variável de ambiente; PYTHONHASHSEED <9>: Variáveis de configuração global.
                                                             (line   85)
* variável de ambiente; PYTHONHASHSEED <10>: PyConfig.       (line  416)
* variável de ambiente; PYTHONHOME:      APIs C descontinuadas.
                                                             (line   25)
* variável de ambiente; PYTHONHOME <1>:  Remoção pendente no Python 3 15<2>.
                                                             (line   35)
* variável de ambiente; PYTHONHOME <2>:  Remoção pendente no Python 3 15<4>.
                                                             (line   35)
* variável de ambiente; PYTHONHOME <3>:  Resumo – Destaques da versão<8>.
                                                             (line  107)
* variável de ambiente; PYTHONHOME <4>:  Opções diversas.    (line   48)
* variável de ambiente; PYTHONHOME <5>:  Variáveis de ambiente.
                                                             (line   11)
* variável de ambiente; PYTHONHOME <6>:  Variáveis de ambiente.
                                                             (line   19)
* variável de ambiente; PYTHONHOME <7>:  Variáveis de ambiente.
                                                             (line   21)
* variável de ambiente; PYTHONHOME <8>:  Variáveis de ambiente.
                                                             (line   38)
* variável de ambiente; PYTHONHOME <9>:  Encontrando módulos.
                                                             (line   31)
* variável de ambiente; PYTHONHOME <10>: Encontrando módulos.
                                                             (line   49)
* variável de ambiente; PYTHONHOME <11>: Encontrando módulos.
                                                             (line   85)
* variável de ambiente; PYTHONHOME <12>: Adicionando Python a um projeto iOS.
                                                             (line  155)
* variável de ambiente; PYTHONHOME <13>: test support script_helper — Utilities for the Python execution tests.
                                                             (line   25)
* variável de ambiente; PYTHONHOME <14>: A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   34)
* variável de ambiente; PYTHONHOME <15>: Ambientes virtuais<2>.
                                                             (line   14)
* variável de ambiente; PYTHONHOME <16>: Incorporando Python<2>.
                                                             (line   38)
* variável de ambiente; PYTHONHOME <17>: Incorporando Python<2>.
                                                             (line   44)
* variável de ambiente; PYTHONHOME <18>: Variáveis de configuração global.
                                                             (line   99)
* variável de ambiente; PYTHONHOME <19>: Parâmetros de todo o processo.
                                                             (line  310)
* variável de ambiente; PYTHONHOME <20>: Parâmetros de todo o processo.
                                                             (line  326)
* variável de ambiente; PYTHONHOME <21>: Parâmetros de todo o processo.
                                                             (line  335)
* variável de ambiente; PYTHONHOME <22>: PyConfig.           (line  424)
* variável de ambiente; PYTHONHOME <23>: PyConfig.           (line  426)
* variável de ambiente; PYTHONHOME <24>: Remoção pendente no Python 3 15<6>.
                                                             (line   35)
* variável de ambiente; PYTHONINSPECT:   Outras alterações e correções<2>.
                                                             (line   13)
* variável de ambiente; PYTHONINSPECT <1>: Núcleo e embutidos.
                                                             (line   47)
* variável de ambiente; PYTHONINSPECT <2>: Opções diversas.  (line   71)
* variável de ambiente; PYTHONINSPECT <3>: Variáveis de ambiente.
                                                             (line  106)
* variável de ambiente; PYTHONINSPECT <4>: Variáveis de configuração global.
                                                             (line  117)
* variável de ambiente; PYTHONINSPECT <5>: PyConfig.         (line  451)
* variável de ambiente; PYTHONINTMAXSTRDIGITS: Núcleo e embutidos<51>.
                                                             (line   74)
* variável de ambiente; PYTHONINTMAXSTRDIGITS <1>: Opções diversas.
                                                             (line  306)
* variável de ambiente; PYTHONINTMAXSTRDIGITS <2>: Variáveis de ambiente.
                                                             (line  177)
* variável de ambiente; PYTHONINTMAXSTRDIGITS <3>: Configurando o limiter.
                                                             (line   10)
* variável de ambiente; PYTHONINTMAXSTRDIGITS <4>: Configurando o limiter.
                                                             (line   17)
* variável de ambiente; PYTHONINTMAXSTRDIGITS <5>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1223)
* variável de ambiente; PYTHONINTMAXSTRDIGITS <6>: PyConfig. (line  482)
* variável de ambiente; PYTHONIOENCODING: Other Improvements<2>.
                                                             (line   75)
* variável de ambiente; PYTHONIOENCODING <1>: Alterações no interpretador<2>.
                                                             (line   23)
* variável de ambiente; PYTHONIOENCODING <2>: Variáveis de ambiente.
                                                             (line  185)
* variável de ambiente; PYTHONIOENCODING <3>: Variáveis de ambiente.
                                                             (line  421)
* variável de ambiente; PYTHONIOENCODING <4>: Modo UTF-8 do Python.
                                                             (line   29)
* variável de ambiente; PYTHONIOENCODING <5>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1935)
* variável de ambiente; PYTHONIOENCODING <6>: PyConfig.      (line  838)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING: Novas descontinuações.
                                                             (line  136)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <1>: Remoção pendente no Python 3 16.
                                                             (line   52)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <2>: Remoção pendente no Python 3 16<3>.
                                                             (line   52)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <3>: PEP 529 Change Windows filesystem encoding to UTF-8.
                                                             (line   18)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <4>: Windows<16>.
                                                             (line   40)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <5>: Variáveis de ambiente.
                                                             (line  351)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <6>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1873)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <7>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1884)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <8>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1890)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <9>: Variáveis de configuração global.
                                                             (line  161)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <10>: PyPreConfig.
                                                             (line  131)
* variável de ambiente; PYTHONLEGACYWINDOWSFSENCODING <11>: Remoção pendente no Python 3 16<5>.
                                                             (line   52)
* variável de ambiente; PYTHONLEGACYWINDOWSSTDIO: PEP 528 Change Windows console encoding to UTF-8.
                                                             (line   12)
* variável de ambiente; PYTHONLEGACYWINDOWSSTDIO <1>: Variáveis de ambiente.
                                                             (line  200)
* variável de ambiente; PYTHONLEGACYWINDOWSSTDIO <2>: Variáveis de ambiente.
                                                             (line  366)
* variável de ambiente; PYTHONLEGACYWINDOWSSTDIO <3>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1939)
* variável de ambiente; PYTHONLEGACYWINDOWSSTDIO <4>: Variáveis de configuração global.
                                                             (line  181)
* variável de ambiente; PYTHONLEGACYWINDOWSSTDIO <5>: PyConfig.
                                                             (line  535)
* variável de ambiente; PYTHONMALLOC:    PYTHONMALLOC environment variable.
                                                             (line    6)
* variável de ambiente; PYTHONMALLOC <1>: Alterações na API C<13>.
                                                             (line    9)
* variável de ambiente; PYTHONMALLOC <2>: Núcleo e embutidos<162>.
                                                             (line   90)
* variável de ambiente; PYTHONMALLOC <3>: Variáveis de ambiente.
                                                             (line  295)
* variável de ambiente; PYTHONMALLOC <4>: Variáveis de ambiente.
                                                             (line  342)
* variável de ambiente; PYTHONMALLOC <5>: Opções de desempenho.
                                                             (line  115)
* variável de ambiente; PYTHONMALLOC <6>: Opções de desempenho.
                                                             (line  122)
* variável de ambiente; PYTHONMALLOC <7>: Efeitos do Modo de Desenvolvimento do Python.
                                                             (line   47)
* variável de ambiente; PYTHONMALLOC <8>: Efeitos do Modo de Desenvolvimento do Python.
                                                             (line   52)
* variável de ambiente; PYTHONMALLOC <9>: Visão Geral<4>.    (line   78)
* variável de ambiente; PYTHONMALLOC <10>: Alocadores de memória padrão.
                                                             (line   26)
* variável de ambiente; PYTHONMALLOC <11>: Debug hooks on the Python memory allocators.
                                                             (line   11)
* variável de ambiente; PYTHONMALLOC <12>: The pymalloc allocator.
                                                             (line   27)
* variável de ambiente; PYTHONMALLOCSTATS: Núcleo e embutidos<162>.
                                                             (line   96)
* variável de ambiente; PYTHONMALLOCSTATS <1>: Variáveis de ambiente.
                                                             (line  336)
* variável de ambiente; PYTHONMALLOCSTATS <2>: PyConfig.     (line  552)
* variável de ambiente; PYTHONMALLOCSTATS <3>: Visão Geral<4>.
                                                             (line   81)
* variável de ambiente; PYTHONNODEBUGRANGES: PEP 657 Localizações de erros refinadas em tracebacks.
                                                             (line   65)
* variável de ambiente; PYTHONNODEBUGRANGES <1>: Opções diversas.
                                                             (line  355)
* variável de ambiente; PYTHONNODEBUGRANGES <2>: Variáveis de ambiente.
                                                             (line  471)
* variável de ambiente; PYTHONNODEBUGRANGES <3>: Métodos de objetos código.
                                                             (line   43)
* variável de ambiente; PYTHONNODEBUGRANGES <4>: PyConfig.   (line  249)
* variável de ambiente; PYTHONNOUSERSITE: PEP 370 Per-user site-packages Directory.
                                                             (line   30)
* variável de ambiente; PYTHONNOUSERSITE <1>: Opções diversas.
                                                             (line  167)
* variável de ambiente; PYTHONNOUSERSITE <2>: Variáveis de ambiente.
                                                             (line  204)
* variável de ambiente; PYTHONNOUSERSITE <3>: Conteúdo do módulo<10>.
                                                             (line   15)
* variável de ambiente; PYTHONNOUSERSITE <4>: Variáveis de configuração global.
                                                             (line  218)
* variável de ambiente; PYTHONNOUSERSITE <5>: PyConfig.      (line  909)
* variável de ambiente; PYTHONOPTIMIZE:  Opções diversas.    (line   91)
* variável de ambiente; PYTHONOPTIMIZE <1>: Variáveis de ambiente.
                                                             (line   77)
* variável de ambiente; PYTHONOPTIMIZE <2>: Variáveis de configuração global.
                                                             (line  229)
* variável de ambiente; PYTHONOPTIMIZE <3>: PyConfig.        (line  619)
* variável de ambiente; PYTHONPATH:      Changes in ‘python’ Command Behavior<2>.
                                                             (line    8)
* variável de ambiente; PYTHONPATH <1>:  Changes in ‘python’ Command Behavior<2>.
                                                             (line    9)
* variável de ambiente; PYTHONPATH <2>:  O caminho de busca dos módulos.
                                                             (line   16)
* variável de ambiente; PYTHONPATH <3>:  Módulos padrões.    (line   35)
* variável de ambiente; PYTHONPATH <4>:  Módulos padrões.    (line   35)
* variável de ambiente; PYTHONPATH <5>:  Opções diversas.    (line   47)
* variável de ambiente; PYTHONPATH <6>:  Variáveis de ambiente.
                                                             (line   24)
* variável de ambiente; PYTHONPATH <7>:  Variáveis de ambiente.
                                                             (line   32)
* variável de ambiente; PYTHONPATH <8>:  Variáveis de ambiente.
                                                             (line   39)
* variável de ambiente; PYTHONPATH <9>:  Variáveis de ambiente.
                                                             (line   42)
* variável de ambiente; PYTHONPATH <10>: Excursus Configurando variáveis de ambiente.
                                                             (line   39)
* variável de ambiente; PYTHONPATH <11>: Encontrando módulos.
                                                             (line   15)
* variável de ambiente; PYTHONPATH <12>: Encontrando módulos.
                                                             (line   40)
* variável de ambiente; PYTHONPATH <13>: Encontrando módulos.
                                                             (line   85)
* variável de ambiente; PYTHONPATH <14>: Adicionando Python a um projeto iOS.
                                                             (line  159)
* variável de ambiente; PYTHONPATH <15>: Adicionando Python a um projeto iOS.
                                                             (line  192)
* variável de ambiente; PYTHONPATH <16>: Adicionando Python a um projeto iOS.
                                                             (line  197)
* variável de ambiente; PYTHONPATH <17>: Localizadores de entrada de caminho.
                                                             (line   26)
* variável de ambiente; PYTHONPATH <18>: test support script_helper — Utilities for the Python execution tests.
                                                             (line   26)
* variável de ambiente; PYTHONPATH <19>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1390)
* variável de ambiente; PYTHONPATH <20>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1395)
* variável de ambiente; PYTHONPATH <21>: A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   16)
* variável de ambiente; PYTHONPATH <22>: A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   21)
* variável de ambiente; PYTHONPATH <23>: Construindo extensões C e C++.
                                                             (line   11)
* variável de ambiente; PYTHONPATH <24>: Incorporando Python<2>.
                                                             (line   40)
* variável de ambiente; PYTHONPATH <25>: Incorporando Python<2>.
                                                             (line   45)
* variável de ambiente; PYTHONPATH <26>: Variáveis de configuração global.
                                                             (line   98)
* variável de ambiente; PYTHONPATH <27>: PyConfig.           (line  585)
* variável de ambiente; PYTHONPERFSUPPORT: Outras mudanças na linguagem<2>.
                                                             (line   89)
* variável de ambiente; PYTHONPERFSUPPORT <1>: Opções diversas.
                                                             (line  377)
* variável de ambiente; PYTHONPERFSUPPORT <2>: Variáveis de ambiente.
                                                             (line  483)
* variável de ambiente; PYTHONPERFSUPPORT <3>: Como habilitar o suporte a perfilação com perf.
                                                             (line    7)
* variável de ambiente; PYTHONPLATLIBDIR: Núcleo e embutidos<121>.
                                                             (line   47)
* variável de ambiente; PYTHONPLATLIBDIR <1>: Variáveis de ambiente.
                                                             (line   55)
* variável de ambiente; PYTHONPLATLIBDIR <2>: A inicialização do caminho de pesquisa de módulos sys path.
                                                             (line   56)
* variável de ambiente; PYTHONPLATLIBDIR <3>: PyConfig.      (line  564)
* variável de ambiente; PYTHONPROFILEIMPORTTIME: Outras mudanças na linguagem<7>.
                                                             (line   48)
* variável de ambiente; PYTHONPROFILEIMPORTTIME <1>: Núcleo e embutidos<144>.
                                                             (line   66)
* variável de ambiente; PYTHONPROFILEIMPORTTIME <2>: Opções diversas.
                                                             (line  315)
* variável de ambiente; PYTHONPROFILEIMPORTTIME <3>: Variáveis de ambiente.
                                                             (line  279)
* variável de ambiente; PYTHONPROFILEIMPORTTIME <4>: PyConfig.
                                                             (line  436)
* variável de ambiente; PYTHONPYCACHEPREFIX: Cache do sistema de arquivos paralelo para arquivos de bytecode compilados.
                                                             (line    6)
* variável de ambiente; PYTHONPYCACHEPREFIX <1>: Núcleo e embutidos<135>.
                                                             (line  402)
* variável de ambiente; PYTHONPYCACHEPREFIX <2>: Opções diversas.
                                                             (line  336)
* variável de ambiente; PYTHONPYCACHEPREFIX <3>: Variáveis de ambiente.
                                                             (line  148)
* variável de ambiente; PYTHONPYCACHEPREFIX <4>: sys — Parâmetros e funções específicas do sistema.
                                                             (line  405)
* variável de ambiente; PYTHONPYCACHEPREFIX <5>: PyConfig.   (line  726)
* variável de ambiente; PYTHONREGRTEST_UNICODE_GUARD: Testes<29>.
                                                             (line   13)
* variável de ambiente; PYTHONSAFEPATH:  Resumo – Destaques da versão<3>.
                                                             (line   28)
* variável de ambiente; PYTHONSAFEPATH <1>: Outras mudanças na linguagem<3>.
                                                             (line   41)
* variável de ambiente; PYTHONSAFEPATH <2>: Segurança<24>.   (line    6)
* variável de ambiente; PYTHONSAFEPATH <3>: Opções diversas. (line  123)
* variável de ambiente; PYTHONSAFEPATH <4>: Variáveis de ambiente.
                                                             (line   47)
* variável de ambiente; PYTHONSAFEPATH <5>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1409)
* variável de ambiente; PYTHONSAFEPATH <6>: Considerações de Segurança<3>.
                                                             (line   47)
* variável de ambiente; PYTHONSAFEPATH <7>: PyConfig.        (line  166)
* variável de ambiente; PYTHONSTARTUP:   sys<12>.            (line   17)
* variável de ambiente; PYTHONSTARTUP <1>: sys<12>.          (line   21)
* variável de ambiente; PYTHONSTARTUP <2>: Biblioteca.       (line  113)
* variável de ambiente; PYTHONSTARTUP <3>: Núcleo e embutidos<4>.
                                                             (line   24)
* variável de ambiente; PYTHONSTARTUP <4>: IDLE<41>.         (line  176)
* variável de ambiente; PYTHONSTARTUP <5>: IDLE<45>.         (line    9)
* variável de ambiente; PYTHONSTARTUP <6>: IDLE<51>.         (line    9)
* variável de ambiente; PYTHONSTARTUP <7>: Arquivo de inicialização do modo interativo.
                                                             (line    9)
* variável de ambiente; PYTHONSTARTUP <8>: Opções diversas.  (line   66)
* variável de ambiente; PYTHONSTARTUP <9>: Variáveis de ambiente.
                                                             (line   62)
* variável de ambiente; PYTHONSTARTUP <10>: Variáveis de ambiente.
                                                             (line  121)
* variável de ambiente; PYTHONSTARTUP <11>: Exemplo.         (line   10)
* variável de ambiente; PYTHONSTARTUP <12>: asyncio — E/S assíncrona.
                                                             (line   92)
* variável de ambiente; PYTHONSTARTUP <13>: Startup and Code Execution.
                                                             (line    7)
* variável de ambiente; PYTHONSTARTUP <14>: Uso na linha de comando<5>.
                                                             (line   42)
* variável de ambiente; PYTHONSTARTUP <15>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1236)
* variável de ambiente; PYTHONSTARTUP <16>: Configuração Readline.
                                                             (line   13)
* variável de ambiente; PYTHONTRACEMALLOC: Opções diversas.  (line  299)
* variável de ambiente; PYTHONTRACEMALLOC <1>: Variáveis de ambiente.
                                                             (line  266)
* variável de ambiente; PYTHONTRACEMALLOC <2>: tracemalloc — Trace memory allocations.
                                                             (line   25)
* variável de ambiente; PYTHONTRACEMALLOC <3>: tracemalloc — Trace memory allocations.
                                                             (line   32)
* variável de ambiente; PYTHONTRACEMALLOC <4>: Funções<11>.  (line   90)
* variável de ambiente; PYTHONTRACEMALLOC <5>: PyConfig.     (line  866)
* variável de ambiente; PYTHONTZPATH:    Configuração do ambiente.
                                                             (line   11)
* variável de ambiente; PYTHONTZPATH <1>: Exceptions and warnings.
                                                             (line   14)
* variável de ambiente; PYTHONUNBUFFERED: Núcleo e embutidos<128>.
                                                             (line  107)
* variável de ambiente; PYTHONUNBUFFERED <1>: Opções diversas.
                                                             (line  187)
* variável de ambiente; PYTHONUNBUFFERED <2>: Variáveis de ambiente.
                                                             (line  125)
* variável de ambiente; PYTHONUNBUFFERED <3>: sys — Parâmetros e funções específicas do sistema.
                                                             (line 1947)
* variável de ambiente; PYTHONUNBUFFERED <4>: Variáveis de configuração global.
                                                             (line  258)
* variável de ambiente; PYTHONUNBUFFERED <5>: PyConfig.      (line  213)
* variável de ambiente; PYTHONUOPS:      Núcleo e embutidos<34>.
                                                             (line   29)
* variável de ambiente; PYTHONUOPS <1>:  Núcleo e embutidos<34>.
                                                             (line  188)
* variável de ambiente; PYTHONUOPS <2>:  Núcleo e embutidos<34>.
                                                             (line  270)
* variável de ambiente; PYTHONUOPS <3>:  Núcleo e embutidos<34>.
                                                             (line  333)
* variável de ambiente; PYTHONUOPS <4>:  Núcleo e embutidos<34>.
                                                             (line  403)
* variável de ambiente; PYTHONUSERBASE:  PEP 370 Per-user site-packages Directory.
                                                             (line   23)
* variável de ambiente; PYTHONUSERBASE <1>: Variáveis de ambiente.
                                                             (line  214)
* variável de ambiente; PYTHONUSERBASE <2>: Conteúdo do módulo<10>.
                                                             (line   42)
* variável de ambiente; PYTHONUSERBASE <3>: Conteúdo do módulo<10>.
                                                             (line   72)
* variável de ambiente; PYTHONUSERSITE:  test support script_helper — Utilities for the Python execution tests.
                                                             (line   26)
* variável de ambiente; PYTHONUTF8:      PEP 540 Modo de tempo de execução UTF-8 forçado.
                                                             (line    7)
* variável de ambiente; PYTHONUTF8 <1>:  Opções diversas.    (line  330)
* variável de ambiente; PYTHONUTF8 <2>:  Variáveis de ambiente.
                                                             (line  431)
* variável de ambiente; PYTHONUTF8 <3>:  Variáveis de ambiente.
                                                             (line  450)
* variável de ambiente; PYTHONUTF8 <4>:  Modo UTF-8.         (line   19)
* variável de ambiente; PYTHONUTF8 <5>:  Modo UTF-8 do Python.
                                                             (line   53)
* variável de ambiente; PYTHONUTF8 <6>:  Modo UTF-8 do Python.
                                                             (line   56)
* variável de ambiente; PYTHONUTF8 <7>:  sys — Parâmetros e funções específicas do sistema.
                                                             (line 1938)
* variável de ambiente; PYTHONUTF8 <8>:  PyPreConfig.        (line  163)
* variável de ambiente; PYTHONUTF8 <9>:  Configuração do Python.
                                                             (line   14)
* variável de ambiente; PYTHONVERBOSE:   Opções diversas.    (line  204)
* variável de ambiente; PYTHONVERBOSE <1>: Variáveis de ambiente.
                                                             (line  130)
* variável de ambiente; PYTHONVERBOSE <2>: Variáveis de configuração global.
                                                             (line  275)
* variável de ambiente; PYTHONVERBOSE <3>: PyConfig.         (line  926)
* variável de ambiente; PYTHONWARNDEFAULTENCODING: EncodingWarning opcional e opção encoding="locale".
                                                             (line   21)
* variável de ambiente; PYTHONWARNDEFAULTENCODING <1>: Biblioteca<96>.
                                                             (line   45)
* variável de ambiente; PYTHONWARNDEFAULTENCODING <2>: Opções diversas.
                                                             (line  343)
* variável de ambiente; PYTHONWARNDEFAULTENCODING <3>: Variáveis de ambiente.
                                                             (line  461)
* variável de ambiente; PYTHONWARNDEFAULTENCODING <4>: Ativar EncodingWarning.
                                                             (line   10)
* variável de ambiente; PYTHONWARNINGS:  avisos<3>.          (line   21)
* variável de ambiente; PYTHONWARNINGS <1>: Outras mudanças na linguagem<12>.
                                                             (line  160)
* variável de ambiente; PYTHONWARNINGS <2>: Mudanças no tratamento de avisos de descontinuação.
                                                             (line   28)
* variável de ambiente; PYTHONWARNINGS <3>: Alterações no interpretador.
                                                             (line    6)
* variável de ambiente; PYTHONWARNINGS <4>: Documentação<24>.
                                                             (line   67)
* variável de ambiente; PYTHONWARNINGS <5>: Opções diversas. (line  262)
* variável de ambiente; PYTHONWARNINGS <6>: Variáveis de ambiente.
                                                             (line  232)
* variável de ambiente; PYTHONWARNINGS <7>: Efeitos do Modo de Desenvolvimento do Python.
                                                             (line   31)
* variável de ambiente; PYTHONWARNINGS <8>: O filtro de avisos.
                                                             (line   48)
* variável de ambiente; PYTHONWARNINGS <9>: O filtro de avisos.
                                                             (line   59)
* variável de ambiente; PYTHONWARNINGS <10>: Descrevendo filtros de aviso.
                                                             (line    8)
* variável de ambiente; PYTHONWARNINGS <11>: Descrevendo filtros de aviso.
                                                             (line   20)
* variável de ambiente; PYTHONWARNINGS <12>: Filtro de avisos padrão.
                                                             (line    7)
* variável de ambiente; PYTHONWARNINGS <13>: PyConfig.       (line  945)
* variável de ambiente; SOURCE_DATE_EPOCH: py_compile<3>.    (line    7)
* variável de ambiente; SOURCE_DATE_EPOCH <1>: Biblioteca<137>.
                                                             (line  452)
* variável de ambiente; SOURCE_DATE_EPOCH <2>: Construção<65>.
                                                             (line   15)
* variável de ambiente; SOURCE_DATE_EPOCH <3>: py_compile — Compila arquivos fonte do Python.
                                                             (line   68)
* variável de ambiente; SOURCE_DATE_EPOCH <4>: py_compile — Compila arquivos fonte do Python.
                                                             (line   88)
* variável de ambiente; SOURCE_DATE_EPOCH <5>: py_compile — Compila arquivos fonte do Python.
                                                             (line   92)
* variável de ambiente; SOURCE_DATE_EPOCH <6>: Uso na linha de comando<12>.
                                                             (line  100)
* variável de ambiente; SSLKEYLOGFILE:   Criação de contexto.
                                                             (line   34)
* variável de ambiente; SSLKEYLOGFILE <1>: Criação de contexto.
                                                             (line   83)
* variável de ambiente; TEMP:            Redirecionamento de dados locais registro e caminhos temporários.
                                                             (line    8)
* variável de ambiente; TEMP <1>:        tempfile — Generate temporary files and directories.
                                                             (line  331)
* variável de ambiente; TERM:            Funções<6>.         (line  485)
* variável de ambiente; TERM <1>:        Funções<6>.         (line  512)
* variável de ambiente; TMP:             tempfile — Generate temporary files and directories.
                                                             (line  333)
* variável de ambiente; TMPDIR:          Biblioteca<7>.      (line  122)
* variável de ambiente; TMPDIR <1>:      Testes<28>.         (line   68)
* variável de ambiente; TMPDIR <2>:      tempfile — Generate temporary files and directories.
                                                             (line  329)
* variável de ambiente; TZ:              Funções<5>.         (line  660)
* variável de ambiente; TZ <1>:          Funções<5>.         (line  662)
* variável de ambiente; TZ <2>:          Funções<5>.         (line  670)
* variável de ambiente; TZ <3>:          Funções<5>.         (line  675)
* variável de ambiente; TZ <4>:          Funções<5>.         (line  677)
* variável de ambiente; TZ <5>:          Funções<5>.         (line  740)
* variável de ambiente; USER:            getpass — Entrada de senha portátil.
                                                             (line   44)
* variável de ambiente; USERNAME:        os path — Manipulações comuns de nomes de caminhos.
                                                             (line  163)
* variável de ambiente; USERNAME <1>:    Parâmetros de processo.
                                                             (line  245)
* variável de ambiente; USERNAME <2>:    getpass — Entrada de senha portátil.
                                                             (line   45)
* variável de ambiente; USERPROFILE:     os path<5>.         (line   15)
* variável de ambiente; USERPROFILE <1>: Alterações na API Python<5>.
                                                             (line  121)
* variável de ambiente; USERPROFILE <2>: Windows<45>.        (line   15)
* variável de ambiente; USERPROFILE <3>: os path — Manipulações comuns de nomes de caminhos.
                                                             (line  160)
* variável de classe:                    Glossário.          (line  266)
* variável de clausura:                  Glossário.          (line  272)
* variável de contexto:                  Glossário.          (line  364)
* variável livre:                        Glossário.          (line  646)
* vazia;lista:                           Sintaxes de criação de lista.
                                                             (line    6)
* vazia;tupla:                           Sequências imutáveis.
                                                             (line   32)
* vazia;tupla <1>:                       Formas de parênteses.
                                                             (line   16)
* vbar (atributo tkinter.scrolledtext.ScrolledText): tkinter scrolledtext — Widget de texto de rolado.
                                                             (line   31)
* VBAR (no módulo token):                token — Constantes usadas com árvores de análises do Python.
                                                             (line  213)
* VBAREQUAL (no módulo token):           token — Constantes usadas com árvores de análises do Python.
                                                             (line  285)
* VC_ASSEMBLY_PUBLICKEYTOKEN (no módulo msvcrt): Outras funções<4>.
                                                             (line   94)
* Vec2D (classe em turtle):              Classes Públicas.   (line   90)
* vectorcallfunc (C type):               O protocolo vectorcall.
                                                             (line   42)
* venv opção de linha de comando; -clear: Criando ambientes virtuais<2>.
                                                             (line   64)
* venv opção de linha de comando; -copies: Criando ambientes virtuais<2>.
                                                             (line   59)
* venv opção de linha de comando; -prompt: Criando ambientes virtuais<2>.
                                                             (line   79)
* venv opção de linha de comando; -symlinks: Criando ambientes virtuais<2>.
                                                             (line   54)
* venv opção de linha de comando; -system-site-packages: Criando ambientes virtuais<2>.
                                                             (line   49)
* venv opção de linha de comando; -upgrade: Criando ambientes virtuais<2>.
                                                             (line   69)
* venv opção de linha de comando; -upgrade-deps: Criando ambientes virtuais<2>.
                                                             (line   83)
* venv opção de linha de comando; -without-pip: Criando ambientes virtuais<2>.
                                                             (line   74)
* venv opção de linha de comando; -without-scm-ignore-files: Criando ambientes virtuais<2>.
                                                             (line   88)
* venv opção de linha de comando; ENV_DIR: Criando ambientes virtuais<2>.
                                                             (line   44)
* verbose (atributo sys.flags):          sys — Parâmetros e funções específicas do sistema.
                                                             (line  580)
* VERBOSE (no módulo re):                Sinalizadores.      (line  132)
* verbose (no módulo tabnanny):          tabnanny — Detecção de indentação ambígua.
                                                             (line   28)
* verbose (no módulo test.support):      test support — Utilitários para o conjunto de teste do Python.
                                                             (line   30)
* verdade;valor:                         Teste do valor verdade.
                                                             (line    6)
* verificador de tipo estático:          Glossário.          (line 1654)
* VERIFY_ALLOW_PROXY_CERTS (no módulo ssl): Constantes<9>.   (line   99)
* verify_client_post_handshake() (método ssl.SSLSocket): SSL Sockets.
                                                             (line  307)
* verify_code (atributo ssl.SSLCertVerificationError): Exceções<16>.
                                                             (line   86)
* VERIFY_CRL_CHECK_CHAIN (no módulo ssl): Constantes<9>.     (line   85)
* VERIFY_CRL_CHECK_LEAF (no módulo ssl): Constantes<9>.      (line   74)
* VERIFY_DEFAULT (no módulo ssl):        Constantes<9>.      (line   66)
* verify_flags (atributo ssl.SSLContext): SSL Contexts.      (line  633)
* verify_generated_headers (atributo email.policy.Policy): email policy Policy Objects.
                                                             (line  204)
* verify_message (atributo ssl.SSLCertVerificationError): Exceções<16>.
                                                             (line   90)
* verify_mode (atributo ssl.SSLContext): SSL Contexts.       (line  648)
* verify_request() (método socketserver.BaseServer): Objetos Server<2>.
                                                             (line  187)
* VERIFY_X509_PARTIAL_CHAIN (no módulo ssl): Constantes<9>.  (line  115)
* VERIFY_X509_STRICT (no módulo ssl):    Constantes<9>.      (line   92)
* VERIFY_X509_TRUSTED_FIRST (no módulo ssl): Constantes<9>.  (line  106)
* verify() (método smtplib.SMTP):        Objetos SMTP.       (line   91)
* verify() (no módulo enum):             Utilities and Decorators.
                                                             (line   72)
* VerifyFlags (classe em ssl):           Constantes<9>.      (line  126)
* VerifyMode (classe em ssl):            Constantes<9>.      (line   60)
* version (atributo email.headerregistry.MIMEVersionHeader): email headerregistry Custom Header Objects.
                                                             (line  242)
* version (atributo http.client.HTTPResponse): Objetos HTTPResponse.
                                                             (line   46)
* version (atributo http.cookiejar.Cookie): Objetos Cookie<2>.
                                                             (line   20)
* version (atributo http.cookies.Morsel): Objetos Morsel.    (line   13)
* version (atributo ipaddress.IPv4Address): Objetos de endereço.
                                                             (line   47)
* version (atributo ipaddress.IPv4Network): Objetos de rede. (line   67)
* version (atributo ipaddress.IPv6Address): Objetos de endereço.
                                                             (line  276)
* version (atributo ipaddress.IPv6Network): Objetos de rede. (line  300)
* version (atributo sys.thread_info):    sys — Parâmetros e funções específicas do sistema.
                                                             (line 2034)
* version (atributo urllib.request.URLopener): Legacy interface.
                                                             (line  138)
* version (atributo uuid.UUID):          uuid — Objetos UUID conforme RFC 4122.
                                                             (line  149)
* version (in module sys):               Parâmetros de todo o processo.
                                                             (line  172)
* version (in module sys) <1>:           Parâmetros de todo o processo.
                                                             (line  210)
* version (in module sys) <2>:           Parâmetros de todo o processo.
                                                             (line  221)
* version (no módulo curses):            Constantes<6>.      (line   18)
* version (no módulo marshal):           marshal — Serialização interna de objetos Python.
                                                             (line  137)
* version (no módulo sqlite3):           Constantes do módulo.
                                                             (line  127)
* version (no módulo sys):               sys — Parâmetros e funções específicas do sistema.
                                                             (line 2100)
* version_info (no módulo sqlite3):      Constantes do módulo.
                                                             (line  137)
* version_info (no módulo sys):          sys — Parâmetros e funções específicas do sistema.
                                                             (line 2115)
* version_string() (método http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  314)
* version() (método ssl.SSLSocket):      SSL Sockets.        (line  329)
* version() (no módulo ensurepip):       API do módulo.      (line    8)
* version() (no módulo importlib.metadata): Versões de distribuição.
                                                             (line    6)
* version() (no módulo platform):        Multiplataforma.    (line  147)
* vetores:                               array— Vetores eficientes de valores numéricos.
                                                             (line    6)
* vformat() (método string.Formatter):   Formatação personalizada de strings.
                                                             (line   26)
* vinculação; ligação;nome:              Ligação de nomes.   (line    6)
* vinculação; ligação;nome <1>:          Instruções de atribuição.
                                                             (line    6)
* vírgula:                               Formas de parênteses.
                                                             (line   20)
* visão de dicionário:                   Glossário.          (line  497)
* visit_Constant() (método ast.NodeVisitor): Auxiliares de ast.
                                                             (line  217)
* visit() (método ast.NodeVisitor):      Auxiliares de ast.  (line  200)
* visitproc (C type):                    Suporte a Coleta Cíclica de Lixo.
                                                             (line  153)
* vline() (método curses.window):        Window Objects.     (line  590)
* voidcmd() (método ftplib.FTP):         FTP objects.        (line  165)
* volume (atributo zipfile.ZipInfo):     Objetos ZipInfo.    (line  140)
* vonmisesvariate() (no módulo random):  Distribuições com valor real.
                                                             (line   93)
* VT (no módulo curses.ascii):           curses ascii — Utilitários para caracteres ASCII.
                                                             (line   60)
* W_OK (no módulo os):                   Arquivos e diretórios.
                                                             (line  112)
* wait_closed() (método asyncio.Server): Objetos Server.     (line  123)
* wait_closed() (método asyncio.StreamWriter): StreamWriter. (line  119)
* wait_for() (método asyncio.Condition): Condição.           (line  102)
* wait_for() (método threading.Condition): Condition objects.
                                                             (line  128)
* wait_for() (no módulo asyncio):        Tempo limite.       (line  118)
* wait_process() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  435)
* wait_threads_exit() (no módulo test.support.threading_helper): test support threading_helper — Utilities for threading tests.
                                                             (line   41)
* wait_until_any_call_with() (método unittest.mock.ThreadingMock): A classe Mock.
                                                             (line  989)
* wait_until_called() (método unittest.mock.ThreadingMock): A classe Mock.
                                                             (line  974)
* wait() (método asyncio.Barrier):       Barrier.            (line   52)
* wait() (método asyncio.Condition):     Condição.           (line   85)
* wait() (método asyncio.Event):         Evento.             (line   44)
* wait() (método asyncio.subprocess.Process): Interagindo com subprocessos.
                                                             (line   37)
* wait() (método multiprocessing.pool.AsyncResult): Process Pools.
                                                             (line  211)
* wait() (método subprocess.Popen):      Objetos Popen.      (line   13)
* wait() (método threading.Barrier):     Barrier objects.    (line   43)
* wait() (método threading.Condition):   Condition objects.  (line   97)
* wait() (método threading.Event):       Event objects.      (line   42)
* wait() (no módulo asyncio):            Primitivas de espera.
                                                             (line    6)
* wait() (no módulo concurrent.futures): Module Functions.   (line    6)
* wait() (no módulo multiprocessing.connection): Listeners and Clients.
                                                             (line  114)
* wait() (no módulo os):                 Gerenciamento de processo.
                                                             (line  864)
* wait3() (no módulo os):                Gerenciamento de processo.
                                                             (line  977)
* wait4() (no módulo os):                Gerenciamento de processo.
                                                             (line  992)
* waitid() (no módulo os):               Gerenciamento de processo.
                                                             (line  889)
* waitpid() (no módulo os):              Gerenciamento de processo.
                                                             (line  929)
* waitstatus_to_exitcode() (no módulo os): Gerenciamento de processo.
                                                             (line 1115)
* walk_packages() (no módulo pkgutil):   pkgutil — Utilitário de extensão de pacote.
                                                             (line  153)
* walk_stack() (no módulo traceback):    Funções de nível de módulo<2>.
                                                             (line  185)
* walk_tb() (no módulo traceback):       Funções de nível de módulo<2>.
                                                             (line  194)
* walk() (método email.message.EmailMessage): email message Representing an email message.
                                                             (line  468)
* walk() (método email.message.Message): email message Message Representing an email message using the compat32 API.
                                                             (line  640)
* walk() (método pathlib.Path):          Lendo diretórios.   (line  113)
* walk() (no módulo ast):                Auxiliares de ast.  (line  183)
* walk() (no módulo os):                 Arquivos e diretórios.
                                                             (line 1733)
* want (atributo doctest.Example):       Example Objects.    (line   23)
* warn_default_encoding (atributo sys.flags): sys — Parâmetros e funções específicas do sistema.
                                                             (line  606)
* warn_explicit() (no módulo warnings):  Funções disponíveis.
                                                             (line   62)
* warn() (no módulo warnings):           Funções disponíveis.
                                                             (line    6)
* Warning:                               Avisos.             (line    9)
* Warning <1>:                           Exceções<7>.        (line    8)
* WARNING (no módulo logging):           Níveis de Logging.  (line   34)
* WARNING (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  200)
* warning() (método logging.Logger):     Objetos Logger.     (line  303)
* warning() (método xml.sax.handler.ErrorHandler): ErrorHandler Objects.
                                                             (line   29)
* warning() (no módulo logging):         Funções de nível de módulo.
                                                             (line   70)
* WarningsRecorder (classe em test.support.warnings_helper): test support warnings_helper — Utilities for warnings tests.
                                                             (line  119)
* warnoptions (no módulo sys):           sys — Parâmetros e funções específicas do sistema.
                                                             (line 2129)
* wasSuccessful() (método unittest.TestResult): Carregando e executando testes.
                                                             (line  321)
* WatchedFileHandler (classe em logging.handlers): WatchedFileHandler.
                                                             (line   27)
* Wave_read (classe em wave):            Objetos Wave_read.  (line    6)
* Wave_write (classe em wave):           Objetos Wave_write. (line    6)
* WCONTINUED (no módulo os):             Gerenciamento de processo.
                                                             (line 1033)
* WCOREDUMP() (no módulo os):            Gerenciamento de processo.
                                                             (line 1156)
* WeakKeyDictionary (classe em weakref): weakref — Referências fracas.
                                                             (line  173)
* WeakMethod (classe em weakref):        weakref — Referências fracas.
                                                             (line  246)
* WeakSet (classe em weakref):           weakref — Referências fracas.
                                                             (line  240)
* WeakValueDictionary (classe em weakref): weakref — Referências fracas.
                                                             (line  223)
* webbrowser opção de linha de comando; -n: Interface de linha de comando<6>.
                                                             (line   10)
* webbrowser opção de linha de comando; -new-tab: Interface de linha de comando<6>.
                                                             (line   14)
* webbrowser opção de linha de comando; -new-window: Interface de linha de comando<6>.
                                                             (line   10)
* webbrowser opção de linha de comando; -t: Interface de linha de comando<6>.
                                                             (line   14)
* WEDNESDAY (no módulo calendar):        calendar — Funções gerais relacionadas ao calendário.
                                                             (line  465)
* weekday (atributo calendar.IllegalWeekdayError): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  550)
* weekday() (método datetime.date):      Objetos date.       (line  231)
* weekday() (método datetime.datetime):  Objetos datetime.   (line  657)
* weekday() (no módulo calendar):        calendar — Funções gerais relacionadas ao calendário.
                                                             (line  392)
* weekheader() (no módulo calendar):     calendar — Funções gerais relacionadas ao calendário.
                                                             (line  397)
* weibullvariate() (no módulo random):   Distribuições com valor real.
                                                             (line  105)
* WEXITED (no módulo os):                Gerenciamento de processo.
                                                             (line 1043)
* WEXITSTATUS() (no módulo os):          Gerenciamento de processo.
                                                             (line 1202)
* wfile (atributo http.server.BaseHTTPRequestHandler): http server — HTTP servers.
                                                             (line  123)
* wfile (atributo socketserver.DatagramRequestHandler): Objetos manipulador de requisições.
                                                             (line   71)
* whatis (pdb command):                  Comandos de depuração.
                                                             (line  301)
* when() (método asyncio.Timeout):       Tempo limite.       (line   63)
* when() (método asyncio.TimerHandle):   Tratadores de função de retorno.
                                                             (line   36)
* where (pdb command):                   Comandos de depuração.
                                                             (line   87)
* which() (no módulo shutil):            Operações de diretório e arquivos.
                                                             (line  446)
* whichdb() (no módulo dbm):             dbm — Interfaces para “banco de dados” Unix.
                                                             (line   30)
* While (classe em ast):                 Fluxo de controle.  (line   77)
* whitespace (atributo shlex.shlex):     shlex Objects.      (line  104)
* whitespace (no módulo string):         Constantes de strings.
                                                             (line   52)
* whitespace_split (atributo shlex.shlex): shlex Objects.    (line  128)
* Widget (classe em tkinter.ttk):        ttk Widget.         (line    9)
* width (atributo sys.hash_info):        sys — Parâmetros e funções específicas do sistema.
                                                             (line 1088)
* width (atributo textwrap.TextWrapper): textwrap — Quebra automática e preenchimento de texto.
                                                             (line  167)
* width() (no módulo turtle):            Estado do Desenho.  (line   18)
* WIFCONTINUED() (no módulo os):         Gerenciamento de processo.
                                                             (line 1166)
* WIFEXITED() (no módulo os):            Gerenciamento de processo.
                                                             (line 1194)
* WIFSIGNALED() (no módulo os):          Gerenciamento de processo.
                                                             (line 1187)
* WIFSTOPPED() (no módulo os):           Gerenciamento de processo.
                                                             (line 1176)
* win32_edition() (no módulo platform):  Plataforma Windows. (line   25)
* win32_is_iot() (no módulo platform):   Plataforma Windows. (line   34)
* win32_ver() (no módulo platform):      Plataforma Windows. (line    6)
* WinDLL (classe em ctypes):             Loading shared libraries.
                                                             (line   55)
* window (classe em curses):             Window Objects.     (line    6)
* window_height() (no módulo turtle):    Configurações e métodos especiais.
                                                             (line  106)
* window_width() (no módulo turtle):     Configurações e métodos especiais.
                                                             (line  113)
* window() (método curses.panel.Panel):  Objetos painel.     (line   62)
* Windows:                               Programas Python completos.
                                                             (line   25)
* WindowsError:                          Exceções concretas. (line  509)
* WindowsPath (classe em pathlib):       Caminhos concretos. (line   39)
* WindowsProactorEventLoopPolicy (classe em asyncio): Policy Objects.
                                                             (line   78)
* WindowsRegistryFinder (classe em importlib.machinery): importlib machinery – Importadores e ganchos de caminho.
                                                             (line   95)
* WindowsSelectorEventLoopPolicy (classe em asyncio): Policy Objects.
                                                             (line   71)
* winerror (atributo OSError):           Exceções concretas. (line  181)
* WinError() (no módulo ctypes):         Funções utilitárias.
                                                             (line  237)
* WINFUNCTYPE() (no módulo ctypes):      Function prototypes.
                                                             (line   25)
* WinSock:                               select — Waiting for I/O completion.
                                                             (line  153)
* winver (no módulo sys):                sys — Parâmetros e funções específicas do sistema.
                                                             (line 2135)
* With (classe em ast):                  Fluxo de controle.  (line  230)
* WITH_EXCEPT_START (opcode):            Instruções em bytecode do Python.
                                                             (line  498)
* with_hostmask (atributo ipaddress.IPv4Interface): Objetos de interface.
                                                             (line   54)
* with_hostmask (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line  127)
* with_hostmask (atributo ipaddress.IPv6Interface): Objetos de interface.
                                                             (line   81)
* with_hostmask (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  332)
* with_name() (método pathlib.PurePath): Métodos e propriedades.
                                                             (line  362)
* with_netmask (atributo ipaddress.IPv4Interface): Objetos de interface.
                                                             (line   45)
* with_netmask (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line  122)
* with_netmask (atributo ipaddress.IPv6Interface): Objetos de interface.
                                                             (line   79)
* with_netmask (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  330)
* with_prefixlen (atributo ipaddress.IPv4Interface): Objetos de interface.
                                                             (line   36)
* with_prefixlen (atributo ipaddress.IPv4Network): Objetos de rede.
                                                             (line  109)
* with_prefixlen (atributo ipaddress.IPv6Interface): Objetos de interface.
                                                             (line   77)
* with_prefixlen (atributo ipaddress.IPv6Network): Objetos de rede.
                                                             (line  324)
* with_pymalloc() (no módulo test.support): test support — Utilitários para o conjunto de teste do Python.
                                                             (line  269)
* with_segments() (método pathlib.PurePath): Métodos e propriedades.
                                                             (line  418)
* with_statement (no módulo __future__): Conteúdo do módulo<9>.
                                                             (line   31)
* with_stem() (método pathlib.PurePath): Métodos e propriedades.
                                                             (line  378)
* with_suffix() (método pathlib.PurePath): Métodos e propriedades.
                                                             (line  401)
* with_traceback() (método BaseException): Classes base.     (line   27)
* withitem (classe em ast):              Fluxo de controle.  (line  241)
* WNOHANG (no módulo os):                Gerenciamento de processo.
                                                             (line 1078)
* WNOWAIT (no módulo os):                Gerenciamento de processo.
                                                             (line 1087)
* wordchars (atributo shlex.shlex):      shlex Objects.      (line   91)
* World Wide Web:                        Protocolos de Internet e Suporte.
                                                             (line    6)
* World Wide Web <1>:                    urllib parse — Analisa URLs para componentes.
                                                             (line    8)
* World Wide Web <2>:                    urllib robotparser — Analisador sintático de robots txt.
                                                             (line    8)
* wrap_bio() (método ssl.SSLContext):    SSL Contexts.       (line  455)
* wrap_future() (no módulo asyncio):     Funções Future.     (line   51)
* wrap_socket() (método ssl.SSLContext): SSL Contexts.       (line  388)
* wrap() (método textwrap.TextWrapper):  textwrap — Quebra automática e preenchimento de texto.
                                                             (line  298)
* wrap() (no módulo textwrap):           textwrap — Quebra automática e preenchimento de texto.
                                                             (line   17)
* wrapper() (no módulo curses):          Funções<6>.         (line  609)
* WrapperDescriptorType (no módulo types): Tipos padrão do interpretador.
                                                             (line   90)
* wraps() (no módulo functools):         functools — Funções e operações de ordem superior em objetos chamáveis.
                                                             (line  705)
* WRITABLE (atributo inspect.BufferFlags): Buffer flags.     (line   17)
* WRITABLE (no módulo _tkinter):         Tratadores de arquivos.
                                                             (line   43)
* writable() (método bz2.BZ2File):       Des compressão de arquivos.
                                                             (line  109)
* writable() (método io.IOBase):         I/O Base Classes.   (line  152)
* WRITE (atributo inspect.BufferFlags):  Buffer flags.       (line   51)
* write_byte() (método mmap.mmap):       mmap — Suporte a arquivos mapeados na memória.
                                                             (line  342)
* write_bytes() (método pathlib.Path):   Lendo e escrevendo arquivos.
                                                             (line   68)
* write_docstringdict() (no módulo turtle): Tradução de docstrings em diferentes idiomas.
                                                             (line   10)
* write_eof() (método asyncio.StreamWriter): StreamWriter.   (line   56)
* write_eof() (método asyncio.WriteTransport): Write-only Transports.
                                                             (line   74)
* write_eof() (método ssl.MemoryBIO):    Підтримка BIO пам’яті<2>.
                                                             (line  161)
* write_history_file() (no módulo readline): Arquivo de histórico.
                                                             (line   14)
* WRITE_RESTRICTED (macro C):            Member flags.       (line   31)
* write_results() (método trace.CoverageResults): Interface programática.
                                                             (line   61)
* write_text() (método pathlib.Path):    Lendo e escrevendo arquivos.
                                                             (line   49)
* write_through (atributo io.TextIOWrapper): E/S de texto<2>.
                                                             (line  175)
* write() (método asyncio.StreamWriter): StreamWriter.       (line   15)
* write() (método asyncio.WriteTransport): Write-only Transports.
                                                             (line   60)
* write() (método code.InteractiveInterpreter): Objetos de interpretador interativo.
                                                             (line   63)
* write() (método codecs.StreamWriter):  StreamWriter Objects.
                                                             (line   31)
* write() (método configparser.ConfigParser): Objetos ConfigParser.
                                                             (line  309)
* write() (método email.generator.BytesGenerator): email generator Geração de documentos MIME.
                                                             (line  123)
* write() (método email.generator.Generator): email generator Geração de documentos MIME.
                                                             (line  221)
* write() (método io.BufferedIOBase):    I/O Base Classes.   (line  335)
* write() (método io.BufferedWriter):    Buffered Streams.   (line  128)
* write() (método io.RawIOBase):         I/O Base Classes.   (line  212)
* write() (método io.TextIOBase):        E/S de texto<2>.    (line   94)
* write() (método mmap.mmap):            mmap — Suporte a arquivos mapeados na memória.
                                                             (line  326)
* write() (método sqlite3.Blob):         Blob objects.       (line   53)
* write() (método ssl.MemoryBIO):        Підтримка BIO пам’яті<2>.
                                                             (line  153)
* write() (método ssl.SSLSocket):        SSL Sockets.        (line   96)
* write() (método xml.etree.ElementTree.ElementTree): ElementTree Objects.
                                                             (line   62)
* write() (método zipfile.ZipFile):      Objetos ZipFile.    (line  284)
* write() (no módulo os):                Operações dos descritores de arquivos.
                                                             (line  950)
* write() (no módulo turtle):            Mais sobre o Controle do Desenho.
                                                             (line   29)
* writeframes() (método wave.Wave_write): Objetos Wave_write.
                                                             (line   83)
* writeframesraw() (método wave.Wave_write): Objetos Wave_write.
                                                             (line   76)
* writeheader() (método csv.DictWriter): Objetos Writer.     (line   38)
* writelines() (método asyncio.StreamWriter): StreamWriter.  (line   29)
* writelines() (método asyncio.WriteTransport): Write-only Transports.
                                                             (line   67)
* writelines() (método codecs.StreamWriter): StreamWriter Objects.
                                                             (line   35)
* writelines() (método io.IOBase):       I/O Base Classes.   (line  158)
* writepy() (método zipfile.PyZipFile):  Objetos PyZipFile.  (line   19)
* writer() (no módulo csv):              Conteúdo do módulo<3>.
                                                             (line   42)
* writerow() (método csv.csvwriter):     Objetos Writer.     (line   16)
* writerows() (método csv.csvwriter):    Objetos Writer.     (line   24)
* writestr() (método zipfile.ZipFile):   Objetos ZipFile.    (line  322)
* WriteTransport (classe em asyncio):    Transports Hierarchy.
                                                             (line   11)
* writev() (no módulo os):               Operações dos descritores de arquivos.
                                                             (line  970)
* writexml() (método xml.dom.minidom.Node): Objetos DOM.     (line   27)
* WrongDocumentErr:                      Exceções<20>.       (line   97)
* wsgi_file_wrapper (atributo wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  275)
* wsgi_multiprocess (atributo wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  156)
* wsgi_multithread (atributo wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  149)
* wsgi_run_once (atributo wsgiref.handlers.BaseHandler): wsgiref handlers – classes base de servidor/gateway.
                                                             (line  163)
* WSGIApplication (no módulo wsgiref.types): wsgiref types – WSGI types for static type checking.
                                                             (line   20)
* WSGIEnvironment (no módulo wsgiref.types): wsgiref types – WSGI types for static type checking.
                                                             (line   16)
* WSGIRequestHandler (classe em wsgiref.simple_server): wsgiref simple_server – um servidor HTTP WSGI simples.
                                                             (line   80)
* WSGIServer (classe em wsgiref.simple_server): wsgiref simple_server – um servidor HTTP WSGI simples.
                                                             (line   48)
* wShowWindow (atributo subprocess.STARTUPINFO): Windows Popen Helpers.
                                                             (line   49)
* WSTOPPED (no módulo os):               Gerenciamento de processo.
                                                             (line 1055)
* WSTOPSIG() (no módulo os):             Gerenciamento de processo.
                                                             (line 1211)
* wstring_at() (no módulo ctypes):       Funções utilitárias.
                                                             (line  250)
* WTERMSIG() (no módulo os):             Gerenciamento de processo.
                                                             (line 1220)
* WUNTRACED (no módulo os):              Gerenciamento de processo.
                                                             (line 1067)
* WWW:                                   Protocolos de Internet e Suporte.
                                                             (line    6)
* WWW <1>:                               urllib parse — Analisa URLs para componentes.
                                                             (line    8)
* WWW <2>:                               urllib robotparser — Analisador sintático de robots txt.
                                                             (line    8)
* WWW;server:                            http server — HTTP servers.
                                                             (line    8)
* X (no módulo re):                      Sinalizadores.      (line  132)
* X_OK (no módulo os):                   Arquivos e diretórios.
                                                             (line  112)
* X509 certificate:                      SSL Contexts.       (line  761)
* xatom() (método imaplib.IMAP4):        Objetos IMAP4.      (line  388)
* XATTR_CREATE (no módulo os):           Atributos estendidos do Linux.
                                                             (line   92)
* XATTR_REPLACE (no módulo os):          Atributos estendidos do Linux.
                                                             (line   97)
* XATTR_SIZE_MAX (no módulo os):         Atributos estendidos do Linux.
                                                             (line   87)
* xcor() (no módulo turtle):             Fala o estado de Turtle.
                                                             (line   34)
* XHTML:                                 html parser — Analisador simples de HTML e XHTML.
                                                             (line    8)
* XHTML_NAMESPACE (no módulo xml.dom):   Conteúdo do módulo<6>.
                                                             (line   53)
* XML_ERROR_ABORTED (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  180)
* XML_ERROR_AMPLIFICATION_LIMIT_BREACH (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  215)
* XML_ERROR_ASYNC_ENTITY (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   29)
* XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   31)
* XML_ERROR_BAD_CHAR_REF (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   37)
* XML_ERROR_BINARY_ENTITY_REF (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   42)
* XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  135)
* XML_ERROR_DUPLICATE_ATTRIBUTE (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   47)
* XML_ERROR_ENTITY_DECLARED_IN_PE (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  126)
* XML_ERROR_EXTERNAL_ENTITY_HANDLING (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  116)
* XML_ERROR_FEATURE_REQUIRES_XML_DTD (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  128)
* XML_ERROR_FINISHED (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  184)
* XML_ERROR_INCOMPLETE_PE (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  152)
* XML_ERROR_INCORRECT_ENCODING (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   51)
* XML_ERROR_INVALID_ARGUMENT (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  207)
* XML_ERROR_INVALID_TOKEN (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   53)
* XML_ERROR_JUNK_AFTER_DOC_ELEMENT (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   59)
* XML_ERROR_MISPLACED_XML_PI (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   64)
* XML_ERROR_NO_BUFFER (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  211)
* XML_ERROR_NO_ELEMENTS (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   69)
* XML_ERROR_NO_MEMORY (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   74)
* XML_ERROR_NOT_STANDALONE (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  118)
* XML_ERROR_NOT_SUSPENDED (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  175)
* XML_ERROR_PARAM_ENTITY_REF (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   78)
* XML_ERROR_PARTIAL_CHAR (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   82)
* XML_ERROR_PUBLICID (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  165)
* XML_ERROR_RECURSIVE_ENTITY_REF (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   86)
* XML_ERROR_RESERVED_NAMESPACE_URI (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  202)
* XML_ERROR_RESERVED_PREFIX_XML (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  192)
* XML_ERROR_RESERVED_PREFIX_XMLNS (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  197)
* XML_ERROR_SUSPEND_PE (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  190)
* XML_ERROR_SUSPENDED (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  169)
* XML_ERROR_SYNTAX (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   91)
* XML_ERROR_TAG_MISMATCH (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   95)
* XML_ERROR_TEXT_DECL (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  160)
* XML_ERROR_UNBOUND_PREFIX (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  142)
* XML_ERROR_UNCLOSED_CDATA_SECTION (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  112)
* XML_ERROR_UNCLOSED_TOKEN (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line   99)
* XML_ERROR_UNDECLARING_PREFIX (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  147)
* XML_ERROR_UNDEFINED_ENTITY (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  104)
* XML_ERROR_UNEXPECTED_STATE (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  124)
* XML_ERROR_UNKNOWN_ENCODING (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  108)
* XML_ERROR_XML_DECL (no módulo xml.parsers.expat.errors): Constantes de erro de expatriados.
                                                             (line  156)
* XML_NAMESPACE (no módulo xml.dom):     Conteúdo do módulo<6>.
                                                             (line   42)
* XML() (no módulo xml.etree.ElementTree): Funções<9>.       (line  272)
* xmlcharrefreplace_errors() (no módulo codecs): Error Handlers.
                                                             (line  172)
* xmlcharrefreplace;error handler's name: Error Handlers.    (line   54)
* XmlDeclHandler() (método xml.parsers.expat.xmlparser): Objetos XMLParser<2>.
                                                             (line  263)
* XMLFilterBase (classe em xml.sax.saxutils): xml sax saxutils — Utilitários de SAX.
                                                             (line   75)
* XMLGenerator (classe em xml.sax.saxutils): xml sax saxutils — Utilitários de SAX.
                                                             (line   58)
* XMLID() (no módulo xml.etree.ElementTree): Funções<9>.     (line  280)
* XMLNS_NAMESPACE (no módulo xml.dom):   Conteúdo do módulo<6>.
                                                             (line   47)
* XMLParser (classe em xml.etree.ElementTree): Objetos XMLParser.
                                                             (line    6)
* XMLParserType (no módulo xml.parsers.expat): xml parsers expat — Fast XML parsing using Expat.
                                                             (line   34)
* XMLPullParser (classe em xml.etree.ElementTree): XMLPullParser Objects.
                                                             (line    6)
* XMLReader (classe em xml.sax.xmlreader): xml sax xmlreader — Interface for XML parsers.
                                                             (line   16)
* xor() (no módulo operator):            operator — Operadores padrões como funções.
                                                             (line  173)
* xview() (método tkinter.ttk.Treeview): ttk Treeview.       (line  317)
* ycor() (no módulo turtle):             Fala o estado de Turtle.
                                                             (line   46)
* year (atributo datetime.date):         Objetos date.       (line  116)
* year (atributo datetime.datetime):     Objetos datetime.   (line  315)
* yeardatescalendar() (método calendar.Calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  134)
* yeardays2calendar() (método calendar.Calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  142)
* yeardayscalendar() (método calendar.Calendar): calendar — Funções gerais relacionadas ao calendário.
                                                             (line  150)
* YES (no módulo tkinter.messagebox):    tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  159)
* YESEXPR (no módulo locale):            locale — Serviços de internacionalização.
                                                             (line  291)
* YESNO (no módulo tkinter.messagebox):  tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  183)
* YESNOCANCEL (no módulo tkinter.messagebox): tkinter messagebox — Prompts de mensagem do Tkinter.
                                                             (line  188)
* Yield (classe em ast):                 Definições de função e classe.
                                                             (line  124)
* YIELD_VALUE (opcode):                  Instruções em bytecode do Python.
                                                             (line  427)
* yield;exemplos:                        Métodos de iterador gerador.
                                                             (line   84)
* yield;expressão:                       Expressões yield.   (line    6)
* yield;yield from (in What's New):      PEP 3151 Reworking the OS and IO exception hierarchy.
                                                             (line   87)
* YieldFrom (classe em ast):             Definições de função e classe.
                                                             (line  124)
* yiq_to_rgb() (no módulo colorsys):     colorsys — Conversões entre sistemas de cores.
                                                             (line   32)
* yview() (método tkinter.ttk.Treeview): ttk Treeview.       (line  321)
* Z_BEST_COMPRESSION (no módulo zlib):   zlib — Compactação compatível com gzip.
                                                             (line  347)
* Z_BEST_SPEED (no módulo zlib):         zlib — Compactação compatível com gzip.
                                                             (line  343)
* Z_BLOCK (no módulo zlib):              zlib — Compactação compatível com gzip.
                                                             (line  414)
* Z_DEFAULT_COMPRESSION (no módulo zlib): zlib — Compactação compatível com gzip.
                                                             (line  351)
* Z_DEFAULT_STRATEGY (no módulo zlib):   zlib — Compactação compatível com gzip.
                                                             (line  356)
* Z_FILTERED (no módulo zlib):           zlib — Compactação compatível com gzip.
                                                             (line  360)
* Z_FINISH (no módulo zlib):             zlib — Compactação compatível com gzip.
                                                             (line  409)
* Z_FIXED (no módulo zlib):              zlib — Compactação compatível com gzip.
                                                             (line  379)
* Z_FULL_FLUSH (no módulo zlib):         zlib — Compactação compatível com gzip.
                                                             (line  404)
* Z_HUFFMAN_ONLY (no módulo zlib):       zlib — Compactação compatível com gzip.
                                                             (line  365)
* Z_NO_COMPRESSION (no módulo zlib):     zlib — Compactação compatível com gzip.
                                                             (line  337)
* Z_NO_FLUSH (no módulo zlib):           zlib — Compactação compatível com gzip.
                                                             (line  389)
* Z_PARTIAL_FLUSH (no módulo zlib):      zlib — Compactação compatível com gzip.
                                                             (line  395)
* Z_RLE (no módulo zlib):                zlib — Compactação compatível com gzip.
                                                             (line  369)
* Z_SYNC_FLUSH (no módulo zlib):         zlib — Compactação compatível com gzip.
                                                             (line  399)
* Z_TREES (no módulo zlib):              zlib — Compactação compatível com gzip.
                                                             (line  423)
* z;na formatação de strings:            Minilinguagem de especificação de formato.
                                                             (line   92)
* z85decode() (no módulo base64):        Base85 Encodings.   (line  100)
* z85encode() (no módulo base64):        Base85 Encodings.   (line   92)
* Zen do Python:                         Glossário.          (line 1855)
* ZeroDivisionError:                     Exceções concretas. (line  495)
* zfill() (método bytearray):            Operações com Bytes e Bytearray.
                                                             (line  786)
* zfill() (método bytes):                Operações com Bytes e Bytearray.
                                                             (line  786)
* zfill() (método str):                  String Methods<2>.  (line  901)
* ZIP_BZIP2 (no módulo zipfile):         zipfile — Trabalha com arquivos ZIP.
                                                             (line   97)
* ZIP_DEFLATED (no módulo zipfile):      zipfile — Trabalha com arquivos ZIP.
                                                             (line   92)
* zip_longest() (no módulo itertools):   Funções do intertools.
                                                             (line  666)
* ZIP_LZMA (no módulo zipfile):          zipfile — Trabalha com arquivos ZIP.
                                                             (line  104)
* ZIP_STORED (no módulo zipfile):        zipfile — Trabalha com arquivos ZIP.
                                                             (line   88)
* zipapp opção de linha de comando; -c:  Interface de linha de comando<12>.
                                                             (line   46)
* zipapp opção de linha de comando; -compress: Interface de linha de comando<12>.
                                                             (line   46)
* zipapp opção de linha de comando; -h:  Interface de linha de comando<12>.
                                                             (line   62)
* zipapp opção de linha de comando; -help: Interface de linha de comando<12>.
                                                             (line   62)
* zipapp opção de linha de comando; -info: Interface de linha de comando<12>.
                                                             (line   56)
* zipapp opção de linha de comando; -m:  Interface de linha de comando<12>.
                                                             (line   37)
* zipapp opção de linha de comando; -main: Interface de linha de comando<12>.
                                                             (line   37)
* zipapp opção de linha de comando; -o:  Interface de linha de comando<12>.
                                                             (line   18)
* zipapp opção de linha de comando; -output: Interface de linha de comando<12>.
                                                             (line   18)
* zipapp opção de linha de comando; -p:  Interface de linha de comando<12>.
                                                             (line   30)
* zipapp opção de linha de comando; -python: Interface de linha de comando<12>.
                                                             (line   30)
* ZipFile (classe em zipfile):           Objetos ZipFile.    (line    6)
* zipfile opção de linha de comando; -c: Opções de linha de comando<2>.
                                                             (line   11)
* zipfile opção de linha de comando; -create: Opções de linha de comando<2>.
                                                             (line   11)
* zipfile opção de linha de comando; -e: Opções de linha de comando<2>.
                                                             (line   16)
* zipfile opção de linha de comando; -extract: Opções de linha de comando<2>.
                                                             (line   16)
* zipfile opção de linha de comando; -l: Opções de linha de comando<2>.
                                                             (line    6)
* zipfile opção de linha de comando; -list: Opções de linha de comando<2>.
                                                             (line    6)
* zipfile opção de linha de comando; -metadata-encoding: Opções de linha de comando<2>.
                                                             (line   26)
* zipfile opção de linha de comando; -t: Opções de linha de comando<2>.
                                                             (line   21)
* zipfile opção de linha de comando; -test: Opções de linha de comando<2>.
                                                             (line   21)
* zipimporter (classe em zipimport):     Objetos zipimporter.
                                                             (line    8)
* ZipImportError:                        zipimport - Importa módulos de arquivos Zip.
                                                             (line   60)
* ZipInfo (classe em zipfile):           zipfile — Trabalha com arquivos ZIP.
                                                             (line   60)
* ZLIB_RUNTIME_VERSION (no módulo zlib): zlib — Compactação compatível com gzip.
                                                             (line  443)
* ZLIB_VERSION (no módulo zlib):         zlib — Compactação compatível com gzip.
                                                             (line  436)
* ZoneInfo (classe em zoneinfo):         A classe ZoneInfo.  (line    6)
* ZoneInfoNotFoundError:                 Exceptions and warnings.
                                                             (line    6)
* zscore() (método statistics.NormalDist): Objetos NormalDist.
                                                             (line  127)
* сертифікати:                           SSL Contexts.       (line  762)

                                                               



Tag Table:
Node: Top358
Ref: contents doc578
Ref: 135578
Node: O que há de novo no Python261519
Ref: whatsnew/index doc261627
Ref: 136261627
Ref: whatsnew/index python-documentation-contents261627
Ref: 137261627
Ref: whatsnew/index what-s-new-in-python261627
Ref: 138261627
Ref: whatsnew/index whatsnew-index261627
Ref: 139261627
Node: O que há de novo no Python 3 13263403
Ref: whatsnew/3 13 doc263540
Ref: 13a263540
Ref: whatsnew/3 13 what-s-new-in-python-3-13263540
Ref: 13b263540
Ref: O que há de novo no Python 3 13-Footnote-1264528
Node: Resumo – Destaques da versão264570
Ref: whatsnew/3 13 summary-release-highlights264700
Ref: 13d264700
Ref: Resumo – Destaques da versão-Footnote-1272298
Ref: Resumo – Destaques da versão-Footnote-2272340
Ref: Resumo – Destaques da versão-Footnote-3272382
Ref: Resumo – Destaques da versão-Footnote-4272424
Ref: Resumo – Destaques da versão-Footnote-5272466
Ref: Resumo – Destaques da versão-Footnote-6272508
Ref: Resumo – Destaques da versão-Footnote-7272550
Ref: Resumo – Destaques da versão-Footnote-8272580
Ref: Resumo – Destaques da versão-Footnote-9272620
Ref: Resumo – Destaques da versão-Footnote-10272662
Ref: Resumo – Destaques da versão-Footnote-11272705
Ref: Resumo – Destaques da versão-Footnote-12272748
Ref: Resumo – Destaques da versão-Footnote-13272791
Ref: Resumo – Destaques da versão-Footnote-14272834
Ref: Resumo – Destaques da versão-Footnote-15272877
Ref: Resumo – Destaques da versão-Footnote-16272927
Ref: Resumo – Destaques da versão-Footnote-17272970
Ref: Resumo – Destaques da versão-Footnote-18273020
Ref: Resumo – Destaques da versão-Footnote-19273070
Node: Novas funcionalidades273113
Ref: whatsnew/3 13 new-features273281
Ref: 167273281
Node: Um melhor interpretador interativo273682
Ref: whatsnew/3 13 a-better-interactive-interpreter273811
Ref: 168273811
Ref: whatsnew/3 13 whatsnew313-better-interactive-interpreter273811
Ref: 13e273811
Ref: Um melhor interpretador interativo-Footnote-1275230
Ref: Um melhor interpretador interativo-Footnote-2275256
Node: Mensagens de erro melhoradas275312
Ref: whatsnew/3 13 improved-error-messages275476
Ref: 170275476
Ref: whatsnew/3 13 whatsnew313-improved-error-messages275476
Ref: 147275476
Ref: Mensagens de erro melhoradas-Footnote-1277959
Ref: Mensagens de erro melhoradas-Footnote-2277989
Ref: Mensagens de erro melhoradas-Footnote-3278022
Ref: Mensagens de erro melhoradas-Footnote-4278078
Ref: Mensagens de erro melhoradas-Footnote-5278133
Node: CPython com threads livres278189
Ref: whatsnew/3 13 free-threaded-cpython278362
Ref: 171278362
Ref: whatsnew/3 13 whatsnew313-free-threaded-cpython278362
Ref: 13f278362
Ref: CPython com threads livres-Footnote-1281762
Ref: CPython com threads livres-Footnote-2281804
Node: Um compilador just-in-time JIT experimental281857
Ref: whatsnew/3 13 an-experimental-just-in-time-jit-compiler282048
Ref: 17a282048
Ref: whatsnew/3 13 whatsnew313-jit-compiler282048
Ref: 140282048
Ref: Um compilador just-in-time JIT experimental-Footnote-1284939
Ref: Um compilador just-in-time JIT experimental-Footnote-2285011
Node: Definidas semânticas de mutação para locals285053
Ref: whatsnew/3 13 defined-mutation-semantics-for-locals285250
Ref: 17d285250
Ref: whatsnew/3 13 whatsnew313-locals-semantics285250
Ref: 142285250
Ref: Definidas semânticas de mutação para locals-Footnote-1288288
Ref: Definidas semânticas de mutação para locals-Footnote-2288330
Ref: Definidas semânticas de mutação para locals-Footnote-3288372
Node: Suporte para plataformas móveis288427
Ref: whatsnew/3 13 support-for-mobile-platforms288572
Ref: 185288572
Ref: whatsnew/3 13 whatsnew313-platform-support288572
Ref: 165288572
Ref: Suporte para plataformas móveis-Footnote-1289725
Ref: Suporte para plataformas móveis-Footnote-2289767
Ref: Suporte para plataformas móveis-Footnote-3289809
Ref: Suporte para plataformas móveis-Footnote-4289865
Ref: Suporte para plataformas móveis-Footnote-5289907
Ref: Suporte para plataformas móveis-Footnote-6289949
Ref: Suporte para plataformas móveis-Footnote-7290005
Ref: Suporte para plataformas móveis-Footnote-8290047
Node: Outras mudanças na linguagem290089
Ref: whatsnew/3 13 other-language-changes290240
Ref: 186290240
Ref: Outras mudanças na linguagem-Footnote-1295454
Ref: Outras mudanças na linguagem-Footnote-2295509
Ref: Outras mudanças na linguagem-Footnote-3295565
Ref: Outras mudanças na linguagem-Footnote-4295621
Ref: Outras mudanças na linguagem-Footnote-5295677
Ref: Outras mudanças na linguagem-Footnote-6295733
Ref: Outras mudanças na linguagem-Footnote-7295789
Ref: Outras mudanças na linguagem-Footnote-8295844
Ref: Outras mudanças na linguagem-Footnote-9295900
Ref: Outras mudanças na linguagem-Footnote-10295955
Ref: Outras mudanças na linguagem-Footnote-11296012
Ref: Outras mudanças na linguagem-Footnote-12296069
Ref: Outras mudanças na linguagem-Footnote-13296126
Ref: Outras mudanças na linguagem-Footnote-14296183
Ref: Outras mudanças na linguagem-Footnote-15296240
Ref: Outras mudanças na linguagem-Footnote-16296297
Ref: Outras mudanças na linguagem-Footnote-17296354
Ref: Outras mudanças na linguagem-Footnote-18296410
Node: Novos módulos296467
Ref: whatsnew/3 13 new-modules296616
Ref: 19b296616
Ref: Novos módulos-Footnote-1296847
Node: Módulos melhorados296903
Ref: whatsnew/3 13 improved-modules297036
Ref: 19c297036
Node: argparse297709
Ref: whatsnew/3 13 argparse297787
Ref: 19d297787
Ref: argparse-Footnote-1298126
Node: array298181
Ref: whatsnew/3 13 array298271
Ref: 19f298271
Ref: array-Footnote-1298727
Ref: array-Footnote-2298782
Node: ast298838
Ref: whatsnew/3 13 ast298927
Ref: 1a3298927
Ref: ast-Footnote-1300589
Ref: ast-Footnote-2300645
Ref: ast-Footnote-3300701
Ref: ast-Footnote-4300757
Node: asyncio300813
Ref: whatsnew/3 13 asyncio300903
Ref: 1a9300903
Ref: asyncio-Footnote-1305047
Ref: asyncio-Footnote-2305102
Ref: asyncio-Footnote-3305158
Ref: asyncio-Footnote-4305214
Ref: asyncio-Footnote-5305270
Ref: asyncio-Footnote-6305326
Ref: asyncio-Footnote-7305381
Ref: asyncio-Footnote-8305437
Ref: asyncio-Footnote-9305493
Node: base64305549
Ref: whatsnew/3 13 base64305646
Ref: 1c1305646
Ref: base64-Footnote-1305966
Ref: base64-Footnote-2306006
Node: compileall306061
Ref: whatsnew/3 13 compileall306169
Ref: 1c3306169
Ref: compileall-Footnote-1306471
Node: concurrent futures306527
Ref: whatsnew/3 13 concurrent-futures306641
Ref: 1c6306641
Ref: concurrent futures-Footnote-1306959
Node: configparser307015
Ref: whatsnew/3 13 configparser307123
Ref: 1c7307123
Ref: configparser-Footnote-1307474
Node: copy307529
Ref: whatsnew/3 13 copy307625
Ref: 1c9307625
Ref: copy-Footnote-1308588
Node: ctypes308644
Ref: whatsnew/3 13 ctypes308731
Ref: 1d3308731
Ref: ctypes-Footnote-1309749
Ref: ctypes-Footnote-2309805
Node: dbm309861
Ref: whatsnew/3 13 dbm309947
Ref: 1d6309947
Ref: dbm-Footnote-1310428
Ref: dbm-Footnote-2310484
Node: dis310540
Ref: whatsnew/3 13 dis310627
Ref: 1d7310627
Ref: dis-Footnote-1311443
Ref: dis-Footnote-2311499
Node: doctest311555
Ref: whatsnew/3 13 doctest311644
Ref: 1db311644
Ref: whatsnew/3 13 whatsnew313-doctest311644
Ref: 149311644
Ref: doctest-Footnote-1312318
Ref: doctest-Footnote-2312348
Ref: doctest-Footnote-3312381
Ref: doctest-Footnote-4312437
Node: email312493
Ref: whatsnew/3 13 email312583
Ref: 1df312583
Ref: email-Footnote-1313845
Ref: email-Footnote-2313901
Ref: email-Footnote-3313957
Node: enum314013
Ref: whatsnew/3 13 enum314105
Ref: 1e3314105
Node: fractions314246
Ref: whatsnew/3 13 fractions314337
Ref: 1e6314337
Ref: fractions-Footnote-1314714
Node: glob314770
Ref: whatsnew/3 13 glob314866
Ref: 1e9314866
Ref: glob-Footnote-1315139
Node: importlib315194
Ref: whatsnew/3 13 importlib315283
Ref: 1eb315283
Ref: importlib-Footnote-1316242
Ref: importlib-Footnote-2316298
Node: io316354
Ref: whatsnew/3 13 io316448
Ref: 1f4316448
Ref: io-Footnote-1316943
Node: ipaddress316998
Ref: whatsnew/3 13 ipaddress317092
Ref: 1fa317092
Ref: ipaddress-Footnote-1317583
Ref: ipaddress-Footnote-2317639
Node: itertools317695
Ref: whatsnew/3 13 itertools317794
Ref: 200317794
Ref: itertools-Footnote-1318102
Node: marshal318158
Ref: whatsnew/3 13 marshal318252
Ref: 203318252
Ref: marshal-Footnote-1318605
Node: math318661
Ref: whatsnew/3 13 math318755
Ref: 204318755
Ref: math-Footnote-1319289
Node: mimetypes319344
Ref: whatsnew/3 13 mimetypes319435
Ref: 206319435
Ref: mimetypes-Footnote-1319794
Node: mmap319849
Ref: whatsnew/3 13 mmap319951
Ref: 20a319951
Ref: mmap-Footnote-1320861
Ref: mmap-Footnote-2320917
Ref: mmap-Footnote-3320973
Node: multiprocessing321028
Ref: whatsnew/3 13 multiprocessing321123
Ref: 20e321123
Ref: multiprocessing-Footnote-1321437
Node: os321493
Ref: whatsnew/3 13 os321591
Ref: 20f321591
Ref: os-Footnote-1324215
Ref: os-Footnote-2324271
Ref: os-Footnote-3324327
Ref: os-Footnote-4324381
Ref: os-Footnote-5324437
Ref: os-Footnote-6324492
Ref: os-Footnote-7324548
Ref: os-Footnote-8324603
Ref: os-Footnote-9324659
Ref: os-Footnote-10324715
Node: os path324772
Ref: whatsnew/3 13 os-path324862
Ref: 222324862
Ref: os path-Footnote-1325543
Ref: os path-Footnote-2325598
Ref: os path-Footnote-3325653
Node: pathlib325708
Ref: whatsnew/3 13 pathlib325799
Ref: 226325799
Ref: pathlib-Footnote-1327435
Ref: pathlib-Footnote-2327490
Ref: pathlib-Footnote-3327546
Ref: pathlib-Footnote-4327601
Ref: pathlib-Footnote-5327656
Ref: pathlib-Footnote-6327711
Ref: pathlib-Footnote-7327767
Node: pdb327823
Ref: whatsnew/3 13 pdb327912
Ref: 233327912
Ref: pdb-Footnote-1329112
Ref: pdb-Footnote-2329168
Ref: pdb-Footnote-3329224
Ref: pdb-Footnote-4329280
Ref: pdb-Footnote-5329336
Node: queue329392
Ref: whatsnew/3 13 queue329480
Ref: 239329480
Ref: queue-Footnote-1329730
Node: random329786
Ref: whatsnew/3 13 random329873
Ref: 23c329873
Ref: random-Footnote-1330063
Node: re330119
Ref: whatsnew/3 13 re330207
Ref: 23d330207
Node: shutil330395
Ref: whatsnew/3 13 shutil330481
Ref: 23f330481
Ref: shutil-Footnote-1330710
Node: site330765
Ref: whatsnew/3 13 site330856
Ref: 241330856
Ref: site-Footnote-1331153
Node: sqlite3331209
Ref: whatsnew/3 13 sqlite3331297
Ref: 243331297
Ref: sqlite3-Footnote-1331774
Ref: sqlite3-Footnote-2331830
Node: ssl331885
Ref: whatsnew/3 13 ssl331979
Ref: 248331979
Ref: ssl-Footnote-1332685
Ref: ssl-Footnote-2332744
Node: statistics332800
Ref: whatsnew/3 13 statistics332897
Ref: 249332897
Ref: statistics-Footnote-1333457
Ref: statistics-Footnote-2333513
Node: subprocess333569
Ref: whatsnew/3 13 subprocess333666
Ref: 24c333666
Ref: whatsnew/3 13 whatsnew313-subprocess333666
Ref: 24d333666
Ref: subprocess-Footnote-1334690
Node: sys334746
Ref: whatsnew/3 13 sys334841
Ref: 24f334841
Ref: sys-Footnote-1335154
Node: tempfile335209
Ref: whatsnew/3 13 tempfile335298
Ref: 251335298
Ref: tempfile-Footnote-1335664
Ref: tempfile-Footnote-2335719
Node: time335775
Ref: whatsnew/3 13 time335868
Ref: 252335868
Ref: time-Footnote-1336533
Ref: time-Footnote-2336588
Node: tkinter336643
Ref: whatsnew/3 13 tkinter336737
Ref: 255336737
Ref: tkinter-Footnote-1339178
Ref: tkinter-Footnote-2339233
Ref: tkinter-Footnote-3339288
Ref: tkinter-Footnote-4339343
Ref: tkinter-Footnote-5339398
Ref: tkinter-Footnote-6339453
Ref: tkinter-Footnote-7339508
Ref: tkinter-Footnote-8339564
Ref: tkinter-Footnote-9339620
Node: traceback339676
Ref: whatsnew/3 13 traceback339771
Ref: 25a339771
Ref: traceback-Footnote-1340543
Ref: traceback-Footnote-2340599
Node: types340655
Ref: whatsnew/3 13 types340749
Ref: 260340749
Ref: types-Footnote-1341099
Node: typing341155
Ref: whatsnew/3 13 typing341251
Ref: 261341251
Ref: typing-Footnote-1342381
Ref: typing-Footnote-2342423
Ref: typing-Footnote-3342465
Ref: typing-Footnote-4342521
Ref: typing-Footnote-5342577
Ref: typing-Footnote-6342633
Node: unicodedata342688
Ref: whatsnew/3 13 unicodedata342783
Ref: 268342783
Ref: unicodedata-Footnote-1342983
Ref: unicodedata-Footnote-2343039
Node: venv343095
Ref: whatsnew/3 13 venv343190
Ref: 269343190
Ref: venv-Footnote-1343771
Node: avisos343827
Ref: whatsnew/3 13 warnings343914
Ref: 26c343914
Ref: avisos-Footnote-1344418
Ref: avisos-Footnote-2344460
Node: xml344516
Ref: whatsnew/3 13 xml344608
Ref: 26e344608
Ref: xml-Footnote-1345409
Ref: xml-Footnote-2345465
Ref: xml-Footnote-3345521
Node: zipimport345576
Ref: whatsnew/3 13 zipimport345653
Ref: 274345653
Ref: zipimport-Footnote-1345883
Ref: zipimport-Footnote-2345945
Node: Otimizações346000
Ref: whatsnew/3 13 optimizations346144
Ref: 275346144
Ref: Otimizações-Footnote-1347424
Ref: Otimizações-Footnote-2347480
Ref: Otimizações-Footnote-3347536
Node: Módulos e APIs removidas347592
Ref: whatsnew/3 13 removed-modules-and-apis347740
Ref: 277347740
Node: PEP 594 remove “baterias descarregadas” da biblioteca padrão348218
Ref: whatsnew/3 13 pep-594-remove-dead-batteries-from-the-standard-library348358
Ref: 278348358
Ref: whatsnew/3 13 whatsnew313-pep594348358
Ref: 143348358
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-1353741
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-2353783
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-3353831
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-4353877
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-5353926
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-6353970
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-7354014
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-8354061
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-9354110
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-10354151
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-11354198
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-12354245
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-13354288
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-14354336
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-15354386
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-16354450
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-17354494
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-18354539
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-19354587
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-20354638
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-21354690
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-22354732
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-23354784
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-24354826
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-25354876
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-26354920
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-27354965
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-28355013
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-29355064
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-30355110
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-31355160
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-32355206
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-33355250
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-34355304
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-35355351
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-36355402
Ref: PEP 594 remove “baterias descarregadas” da biblioteca padrão-Footnote-37355459
Node: 2to3355516
Ref: whatsnew/3 13 to3355673
Ref: 27e355673
Ref: 2to3-Footnote-1355891
Node: builtins355947
Ref: whatsnew/3 13 builtins356054
Ref: 27f356054
Ref: builtins-Footnote-1356812
Ref: builtins-Footnote-2356867
Ref: builtins-Footnote-3356922
Node: configparser<2>356977
Ref: whatsnew/3 13 id3357098
Ref: 281357098
Ref: configparser<2>-Footnote-1357402
Node: importlib metadata357458
Ref: whatsnew/3 13 importlib-metadata357577
Ref: 282357577
Ref: importlib metadata-Footnote-1357845
Node: locale357901
Ref: whatsnew/3 13 locale358011
Ref: 285358011
Ref: locale-Footnote-1358271
Node: opcode358327
Ref: whatsnew/3 13 opcode358427
Ref: 286358427
Ref: opcode-Footnote-1359084
Ref: opcode-Footnote-2359140
Node: optparse359196
Ref: whatsnew/3 13 optparse359300
Ref: 287359300
Ref: optparse-Footnote-1360196
Node: pathlib<2>360252
Ref: whatsnew/3 13 id4360355
Ref: 288360355
Ref: pathlib<2>-Footnote-1360658
Node: re<2>360713
Ref: whatsnew/3 13 id5360819
Ref: 289360819
Ref: re<2>-Footnote-1361097
Node: tkinter tix361153
Ref: whatsnew/3 13 tkinter-tix361255
Ref: 28a361255
Ref: tkinter tix-Footnote-1361535
Node: turtle361590
Ref: whatsnew/3 13 turtle361696
Ref: 28b361696
Ref: turtle-Footnote-1361983
Node: typing<2>362039
Ref: whatsnew/3 13 id6362142
Ref: 28c362142
Ref: typing<2>-Footnote-1362659
Ref: typing<2>-Footnote-2362714
Node: unittest362770
Ref: whatsnew/3 13 unittest362873
Ref: 28d362873
Ref: unittest-Footnote-1363604
Ref: unittest-Footnote-2363660
Node: urllib363716
Ref: whatsnew/3 13 urllib363820
Ref: 292363820
Ref: urllib-Footnote-1364458
Node: webbrowser364514
Ref: whatsnew/3 13 webbrowser364601
Ref: 296364601
Ref: webbrowser-Footnote-1365091
Ref: webbrowser-Footnote-2365147
Node: Novas descontinuações365203
Ref: whatsnew/3 13 new-deprecations365373
Ref: 298365373
Ref: Novas descontinuações-Footnote-1374473
Ref: Novas descontinuações-Footnote-2374528
Ref: Novas descontinuações-Footnote-3374583
Ref: Novas descontinuações-Footnote-4374639
Ref: Novas descontinuações-Footnote-5374695
Ref: Novas descontinuações-Footnote-6374750
Ref: Novas descontinuações-Footnote-7374806
Ref: Novas descontinuações-Footnote-8374861
Ref: Novas descontinuações-Footnote-9374917
Ref: Novas descontinuações-Footnote-10374973
Ref: Novas descontinuações-Footnote-11375030
Ref: Novas descontinuações-Footnote-12375086
Ref: Novas descontinuações-Footnote-13375142
Ref: Novas descontinuações-Footnote-14375198
Ref: Novas descontinuações-Footnote-15375255
Ref: Novas descontinuações-Footnote-16375311
Ref: Novas descontinuações-Footnote-17375368
Ref: Novas descontinuações-Footnote-18375425
Ref: Novas descontinuações-Footnote-19375482
Ref: Novas descontinuações-Footnote-20375538
Ref: Novas descontinuações-Footnote-21375595
Ref: Novas descontinuações-Footnote-22375652
Ref: Novas descontinuações-Footnote-23375709
Ref: Novas descontinuações-Footnote-24375766
Ref: Novas descontinuações-Footnote-25375823
Ref: Novas descontinuações-Footnote-26375880
Ref: Novas descontinuações-Footnote-27375937
Node: Remoção pendente no Python 3 14375994
Ref: whatsnew/3 13 pending-removal-in-python-3-14376129
Ref: 2b8376129
Ref: Remoção pendente no Python 3 14-Footnote-1380893
Ref: Remoção pendente no Python 3 14-Footnote-2380948
Ref: Remoção pendente no Python 3 14-Footnote-3381003
Ref: Remoção pendente no Python 3 14-Footnote-4381058
Ref: Remoção pendente no Python 3 14-Footnote-5381113
Ref: Remoção pendente no Python 3 14-Footnote-6381169
Ref: Remoção pendente no Python 3 14-Footnote-7381225
Ref: Remoção pendente no Python 3 14-Footnote-8381280
Ref: Remoção pendente no Python 3 14-Footnote-9381335
Ref: Remoção pendente no Python 3 14-Footnote-10381391
Ref: Remoção pendente no Python 3 14-Footnote-11381447
Ref: Remoção pendente no Python 3 14-Footnote-12381503
Node: Remoção pendente no Python 3 15381559
Ref: whatsnew/3 13 pending-removal-in-python-3-15381736
Ref: 2d4381736
Ref: Remoção pendente no Python 3 15-Footnote-1386327
Ref: Remoção pendente no Python 3 15-Footnote-2386382
Ref: Remoção pendente no Python 3 15-Footnote-3386437
Ref: Remoção pendente no Python 3 15-Footnote-4386492
Ref: Remoção pendente no Python 3 15-Footnote-5386548
Ref: Remoção pendente no Python 3 15-Footnote-6386590
Node: Remoção pendente no Python 3 16386646
Ref: whatsnew/3 13 pending-removal-in-python-3-16386823
Ref: 2e1386823
Ref: Remoção pendente no Python 3 16-Footnote-1389135
Node: Remoção pendente no Python 3 17389191
Ref: whatsnew/3 13 pending-removal-in-python-3-17389368
Ref: 2e6389368
Ref: Remoção pendente no Python 3 17-Footnote-1392509
Ref: Remoção pendente no Python 3 17-Footnote-2392567
Ref: Remoção pendente no Python 3 17-Footnote-3392622
Ref: Remoção pendente no Python 3 17-Footnote-4392680
Node: Remoção pendente no Python 3 18392735
Ref: whatsnew/3 13 pending-removal-in-python-3-18392917
Ref: 2ef392917
Ref: Remoção pendente no Python 3 18-Footnote-1393356
Node: Remoção pendente em versões futuras393411
Ref: whatsnew/3 13 pending-removal-in-future-versions393551
Ref: 2f0393551
Ref: Remoção pendente em versões futuras-Footnote-1400680
Ref: Remoção pendente em versões futuras-Footnote-2400735
Ref: Remoção pendente em versões futuras-Footnote-3400791
Ref: Remoção pendente em versões futuras-Footnote-4400847
Ref: Remoção pendente em versões futuras-Footnote-5400902
Node: Alterações de bytecode do CPython400957
Ref: whatsnew/3 13 cpython-bytecode-changes401123
Ref: 313401123
Ref: Alterações de bytecode do CPython-Footnote-1401632
Node: Alterações na API C401688
Ref: whatsnew/3 13 c-api-changes401856
Ref: 316401856
Node: Novas funcionalidades<2>402104
Ref: whatsnew/3 13 id7402219
Ref: 317402219
Ref: Novas funcionalidades<2>-Footnote-1413530
Ref: Novas funcionalidades<2>-Footnote-2413572
Ref: Novas funcionalidades<2>-Footnote-3413628
Ref: Novas funcionalidades<2>-Footnote-4413684
Ref: Novas funcionalidades<2>-Footnote-5413740
Ref: Novas funcionalidades<2>-Footnote-6413796
Ref: Novas funcionalidades<2>-Footnote-7413852
Ref: Novas funcionalidades<2>-Footnote-8413908
Ref: Novas funcionalidades<2>-Footnote-9413964
Ref: Novas funcionalidades<2>-Footnote-10414020
Ref: Novas funcionalidades<2>-Footnote-11414077
Ref: Novas funcionalidades<2>-Footnote-12414134
Ref: Novas funcionalidades<2>-Footnote-13414190
Ref: Novas funcionalidades<2>-Footnote-14414247
Ref: Novas funcionalidades<2>-Footnote-15414304
Ref: Novas funcionalidades<2>-Footnote-16414361
Ref: Novas funcionalidades<2>-Footnote-17414418
Ref: Novas funcionalidades<2>-Footnote-18414475
Ref: Novas funcionalidades<2>-Footnote-19414532
Ref: Novas funcionalidades<2>-Footnote-20414589
Ref: Novas funcionalidades<2>-Footnote-21414645
Ref: Novas funcionalidades<2>-Footnote-22414702
Ref: Novas funcionalidades<2>-Footnote-23414759
Ref: Novas funcionalidades<2>-Footnote-24414813
Ref: Novas funcionalidades<2>-Footnote-25414870
Ref: Novas funcionalidades<2>-Footnote-26414926
Ref: Novas funcionalidades<2>-Footnote-27414982
Ref: Novas funcionalidades<2>-Footnote-28415039
Ref: Novas funcionalidades<2>-Footnote-29415096
Ref: Novas funcionalidades<2>-Footnote-30415153
Ref: Novas funcionalidades<2>-Footnote-31415210
Ref: Novas funcionalidades<2>-Footnote-32415267
Node: Alterações na API C<2>415324
Ref: whatsnew/3 13 changed-c-apis415475
Ref: 382415475
Ref: Alterações na API C<2>-Footnote-1418234
Ref: Alterações na API C<2>-Footnote-2418289
Ref: Alterações na API C<2>-Footnote-3418345
Ref: Alterações na API C<2>-Footnote-4418401
Ref: Alterações na API C<2>-Footnote-5418457
Ref: Alterações na API C<2>-Footnote-6418499
Ref: Alterações na API C<2>-Footnote-7418555
Ref: Alterações na API C<2>-Footnote-8418611
Node: Mudanças na API C Limitada418667
Ref: whatsnew/3 13 limited-c-api-changes418810
Ref: 38f418810
Ref: Mudanças na API C Limitada-Footnote-1419553
Ref: Mudanças na API C Limitada-Footnote-2419608
Ref: Mudanças na API C Limitada-Footnote-3419664
Node: APIs C removidas419720
Ref: whatsnew/3 13 removed-c-apis419860
Ref: 397419860
Ref: APIs C removidas-Footnote-1426278
Ref: APIs C removidas-Footnote-2426334
Ref: APIs C removidas-Footnote-3426389
Ref: APIs C removidas-Footnote-4426445
Ref: APIs C removidas-Footnote-5426487
Ref: APIs C removidas-Footnote-6426543
Ref: APIs C removidas-Footnote-7426599
Ref: APIs C removidas-Footnote-8426655
Ref: APIs C removidas-Footnote-9426708
Ref: APIs C removidas-Footnote-10426764
Ref: APIs C removidas-Footnote-11426807
Ref: APIs C removidas-Footnote-12426864
Ref: APIs C removidas-Footnote-13426921
Ref: APIs C removidas-Footnote-14426978
Node: APIs C descontinuadas427035
Ref: whatsnew/3 13 deprecated-c-apis427139
Ref: 3ae427139
Ref: APIs C descontinuadas-Footnote-1429888
Ref: APIs C descontinuadas-Footnote-2429944
Ref: APIs C descontinuadas-Footnote-3429986
Ref: APIs C descontinuadas-Footnote-4430042
Ref: APIs C descontinuadas-Footnote-5430097
Ref: APIs C descontinuadas-Footnote-6430153
Ref: APIs C descontinuadas-Footnote-7430206
Node: Remoção pendente no Python 3 14<2>430262
Ref: whatsnew/3 13 id8430401
Ref: 3c0430401
Ref: Remoção pendente no Python 3 14<2>-Footnote-1433398
Ref: Remoção pendente no Python 3 14<2>-Footnote-2433440
Ref: Remoção pendente no Python 3 14<2>-Footnote-3433496
Node: Remoção pendente no Python 3 15<2>433551
Ref: whatsnew/3 13 id9433735
Ref: 3ec433735
Node: Remoção pendente no Python 3 16<2>434902
Ref: whatsnew/3 13 id10435091
Ref: 3f0435091
Node: Remoção pendente em versões futuras<2>435221
Ref: whatsnew/3 13 id11435365
Ref: 3f1435365
Node: Mudanças na construção437469
Ref: whatsnew/3 13 build-changes437629
Ref: 40f437629
Ref: whatsnew/3 13 pythoncapi-compat-project437629
Ref: 410437629
Ref: Mudanças na construção-Footnote-1440498
Ref: Mudanças na construção-Footnote-2440540
Ref: Mudanças na construção-Footnote-3440596
Ref: Mudanças na construção-Footnote-4440638
Ref: Mudanças na construção-Footnote-5440694
Ref: Mudanças na construção-Footnote-6440736
Ref: Mudanças na construção-Footnote-7440792
Ref: Mudanças na construção-Footnote-8440834
Ref: Mudanças na construção-Footnote-9440890
Ref: Mudanças na construção-Footnote-10440945
Ref: Mudanças na construção-Footnote-11441002
Ref: Mudanças na construção-Footnote-12441059
Ref: Mudanças na construção-Footnote-13441107
Ref: Mudanças na construção-Footnote-14441164
Ref: Mudanças na construção-Footnote-15441221
Ref: Mudanças na construção-Footnote-16441278
Node: Portando para o Python 3 13441334
Ref: whatsnew/3 13 porting-to-python-3-13441505
Ref: 146441505
Node: Alterações na API Python441795
Ref: whatsnew/3 13 changes-in-the-python-api441918
Ref: 413441918
Ref: whatsnew/3 13 pep667-porting-notes-py441989
Ref: 183441989
Ref: Alterações na API Python-Footnote-1445888
Ref: Alterações na API Python-Footnote-2445930
Ref: Alterações na API Python-Footnote-3445972
Ref: Alterações na API Python-Footnote-4446014
Ref: Alterações na API Python-Footnote-5446056
Ref: Alterações na API Python-Footnote-6446112
Ref: Alterações na API Python-Footnote-7446168
Ref: Alterações na API Python-Footnote-8446223
Node: Alterações na API C<3>446279
Ref: whatsnew/3 13 changes-in-the-c-api446402
Ref: 41d446402
Ref: whatsnew/3 13 pep667-porting-notes-c449193
Ref: 184449193
Ref: Alterações na API C<3>-Footnote-1453216
Ref: Alterações na API C<3>-Footnote-2453272
Ref: Alterações na API C<3>-Footnote-3453328
Ref: Alterações na API C<3>-Footnote-4453384
Ref: Alterações na API C<3>-Footnote-5453439
Ref: Alterações na API C<3>-Footnote-6453495
Node: Mudanças em teste de regressão453548
Ref: whatsnew/3 13 regression-test-changes453726
Ref: 423453726
Ref: Mudanças em teste de regressão-Footnote-1454228
Node: Alterações notáveis no 3 13 1454284
Ref: whatsnew/3 13 notable-changes-in-3-13-1454467
Ref: 425454467
Node: sys<2>454570
Ref: whatsnew/3 13 id12454645
Ref: 426454645
Node: Alterações notáveis no 3 13 4454920
Ref: whatsnew/3 13 notable-changes-in-3-13-4455062
Ref: 428455062
Node: os path<2>455185
Ref: whatsnew/3 13 id13455280
Ref: 429455280
Ref: os path<2>-Footnote-1455725
Node: tarfile455780
Ref: whatsnew/3 13 tarfile455875
Ref: 42c455875
Ref: tarfile-Footnote-1457023
Ref: tarfile-Footnote-2457079
Ref: tarfile-Footnote-3457134
Ref: tarfile-Footnote-4457190
Ref: tarfile-Footnote-5457246
Ref: tarfile-Footnote-6457301
Ref: tarfile-Footnote-7457357
Ref: tarfile-Footnote-8457413
Node: O que há de novo no Python 3 12457468
Ref: whatsnew/3 12 doc457646
Ref: 432457646
Ref: whatsnew/3 12 translation-repo457646
Ref: 433457646
Ref: whatsnew/3 12 what-s-new-in-python-3-12457646
Ref: 434457646
Ref: O que há de novo no Python 3 12-Footnote-1458728
Node: Resumo – Destaques da versão<2>458770
Ref: whatsnew/3 12 summary-release-highlights458906
Ref: 435458906
Ref: Resumo – Destaques da versão<2>-Footnote-1464012
Ref: Resumo – Destaques da versão<2>-Footnote-2464060
Ref: Resumo – Destaques da versão<2>-Footnote-3464102
Ref: Resumo – Destaques da versão<2>-Footnote-4464144
Ref: Resumo – Destaques da versão<2>-Footnote-5464203
Ref: Resumo – Destaques da versão<2>-Footnote-6464282
Node: Novas funcionalidades<3>464337
Ref: whatsnew/3 12 new-features464525
Ref: 450464525
Node: PEP 695 Sintaxe do parâmetro de tipo465227
Ref: whatsnew/3 12 pep-695-type-parameter-syntax465380
Ref: 451465380
Ref: whatsnew/3 12 whatsnew312-pep695465380
Ref: 437465380
Ref: PEP 695 Sintaxe do parâmetro de tipo-Footnote-1468183
Ref: PEP 695 Sintaxe do parâmetro de tipo-Footnote-2468225
Ref: PEP 695 Sintaxe do parâmetro de tipo-Footnote-3468267
Ref: PEP 695 Sintaxe do parâmetro de tipo-Footnote-4468309
Node: PEP 701 Formalização sintática de f-strings468365
Ref: whatsnew/3 12 pep-701-syntactic-formalization-of-f-strings468560
Ref: 459468560
Ref: whatsnew/3 12 whatsnew312-pep701468560
Ref: 43b468560
Ref: PEP 701 Formalização sintática de f-strings-Footnote-1473083
Ref: PEP 701 Formalização sintática de f-strings-Footnote-2473125
Ref: PEP 701 Formalização sintática de f-strings-Footnote-3473167
Ref: PEP 701 Formalização sintática de f-strings-Footnote-4473209
Node: PEP 684 Uma GIL por interpretador473265
Ref: whatsnew/3 12 pep-684-a-per-interpreter-gil473474
Ref: 45b473474
Ref: whatsnew/3 12 whatsnew312-pep684473474
Ref: 43c473474
Ref: PEP 684 Uma GIL por interpretador-Footnote-1474634
Ref: PEP 684 Uma GIL por interpretador-Footnote-2474676
Ref: PEP 684 Uma GIL por interpretador-Footnote-3474718
Node: PEP 669 Monitoramento de baixo impacto para CPython474774
Ref: whatsnew/3 12 pep-669-low-impact-monitoring-for-cpython474996
Ref: 45d474996
Ref: whatsnew/3 12 whatsnew312-pep669474996
Ref: 43d474996
Ref: PEP 669 Monitoramento de baixo impacto para CPython-Footnote-1475625
Ref: PEP 669 Monitoramento de baixo impacto para CPython-Footnote-2475667
Node: PEP 688 Tornando o protocolo de buffer acessível no Python475723
Ref: whatsnew/3 12 pep-688-making-the-buffer-protocol-accessible-in-python475950
Ref: 45e475950
Ref: whatsnew/3 12 whatsnew312-pep688475950
Ref: 440475950
Ref: PEP 688 Tornando o protocolo de buffer acessível no Python-Footnote-1476671
Ref: PEP 688 Tornando o protocolo de buffer acessível no Python-Footnote-2476713
Node: PEP 709 Fazendo inline de compreensão476769
Ref: whatsnew/3 12 pep-709-comprehension-inlining476976
Ref: 461476976
Ref: whatsnew/3 12 whatsnew312-pep709476976
Ref: 447476976
Ref: PEP 709 Fazendo inline de compreensão-Footnote-1478839
Ref: PEP 709 Fazendo inline de compreensão-Footnote-2478881
Node: Mensagens de erro melhoradas<2>478923
Ref: whatsnew/3 12 improved-error-messages479062
Ref: 43e479062
Ref: Mensagens de erro melhoradas<2>-Footnote-1481524
Ref: Mensagens de erro melhoradas<2>-Footnote-2481579
Ref: Mensagens de erro melhoradas<2>-Footnote-3481634
Ref: Mensagens de erro melhoradas<2>-Footnote-4481689
Node: Novos recursos relacionados a dicas de tipo481744
Ref: whatsnew/3 12 new-features-related-to-type-hints481930
Ref: 462481930
Ref: Novos recursos relacionados a dicas de tipo-Footnote-1482438
Node: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs482480
Ref: whatsnew/3 12 pep-692-using-typeddict-for-more-precise-kwargs-typing482681
Ref: 463482681
Ref: whatsnew/3 12 whatsnew312-pep692482681
Ref: 448482681
Ref: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs-Footnote-1483432
Ref: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs-Footnote-2483474
Ref: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs-Footnote-3483516
Ref: PEP 692 Usando TypedDict para tipagem mais precisa de **kwargs-Footnote-4483558
Node: PEP 698 Substitui decorador para tipagem estática483614
Ref: whatsnew/3 12 pep-698-override-decorator-for-static-typing483815
Ref: 464483815
Ref: whatsnew/3 12 whatsnew312-pep698483815
Ref: 44a483815
Ref: PEP 698 Substitui decorador para tipagem estática-Footnote-1484848
Ref: PEP 698 Substitui decorador para tipagem estática-Footnote-2484890
Node: Outras mudanças na linguagem<2>484946
Ref: whatsnew/3 12 other-language-changes485125
Ref: 465485125
Ref: Outras mudanças na linguagem<2>-Footnote-1490322
Ref: Outras mudanças na linguagem<2>-Footnote-2490377
Ref: Outras mudanças na linguagem<2>-Footnote-3490432
Ref: Outras mudanças na linguagem<2>-Footnote-4490487
Ref: Outras mudanças na linguagem<2>-Footnote-5490529
Ref: Outras mudanças na linguagem<2>-Footnote-6490585
Ref: Outras mudanças na linguagem<2>-Footnote-7490627
Ref: Outras mudanças na linguagem<2>-Footnote-8490682
Ref: Outras mudanças na linguagem<2>-Footnote-9490738
Ref: Outras mudanças na linguagem<2>-Footnote-10490793
Ref: Outras mudanças na linguagem<2>-Footnote-11490849
Ref: Outras mudanças na linguagem<2>-Footnote-12490905
Ref: Outras mudanças na linguagem<2>-Footnote-13490962
Ref: Outras mudanças na linguagem<2>-Footnote-14491019
Ref: Outras mudanças na linguagem<2>-Footnote-15491075
Ref: Outras mudanças na linguagem<2>-Footnote-16491118
Ref: Outras mudanças na linguagem<2>-Footnote-17491174
Node: Novos módulos<2>491230
Ref: whatsnew/3 12 new-modules491388
Ref: 472491388
Node: Módulos melhorados<2>491444
Ref: whatsnew/3 12 improved-modules491586
Ref: 473491586
Node: array<2>492229
Ref: whatsnew/3 12 array492315
Ref: 474492315
Ref: array<2>-Footnote-1492550
Node: asyncio<2>492605
Ref: whatsnew/3 12 asyncio492708
Ref: 475492708
Ref: asyncio<2>-Footnote-1494876
Ref: asyncio<2>-Footnote-2494931
Ref: asyncio<2>-Footnote-3494987
Ref: asyncio<2>-Footnote-4495043
Ref: asyncio<2>-Footnote-5495099
Ref: asyncio<2>-Footnote-6495154
Ref: asyncio<2>-Footnote-7495209
Ref: asyncio<2>-Footnote-8495264
Ref: asyncio<2>-Footnote-9495320
Ref: asyncio<2>-Footnote-10495376
Node: calendar495432
Ref: whatsnew/3 12 calendar495530
Ref: 480495530
Ref: calendar-Footnote-1495779
Node: csv495835
Ref: whatsnew/3 12 csv495929
Ref: 483495929
Node: dis<2>496186
Ref: whatsnew/3 12 dis496284
Ref: 488496284
Ref: dis<2>-Footnote-1496913
Ref: dis<2>-Footnote-2496968
Node: fractions<2>497023
Ref: whatsnew/3 12 fractions497137
Ref: 48b497137
Ref: fractions<2>-Footnote-1497374
Node: importlib resources497430
Ref: whatsnew/3 12 importlib-resources497545
Ref: 48c497545
Ref: importlib resources-Footnote-1497953
Ref: importlib resources-Footnote-2498008
Node: inspect498064
Ref: whatsnew/3 12 inspect498179
Ref: 48f498179
Ref: inspect-Footnote-1498991
Ref: inspect-Footnote-2499046
Ref: inspect-Footnote-3499101
Node: itertools<2>499157
Ref: whatsnew/3 12 itertools499260
Ref: 495499260
Ref: itertools<2>-Footnote-1499532
Node: math<2>499587
Ref: whatsnew/3 12 math499688
Ref: 496499688
Ref: math<2>-Footnote-1500126
Ref: math<2>-Footnote-2500182
Node: os<2>500237
Ref: whatsnew/3 12 os500336
Ref: 499500336
Ref: os<2>-Footnote-1501789
Ref: os<2>-Footnote-2501844
Ref: os<2>-Footnote-3501899
Ref: os<2>-Footnote-4501955
Node: os path<3>502010
Ref: whatsnew/3 12 os-path502112
Ref: 4a2502112
Ref: os path<3>-Footnote-1502526
Ref: os path<3>-Footnote-2502581
Node: pathlib<3>502637
Ref: whatsnew/3 12 pathlib502742
Ref: 4a5502742
Ref: pathlib<3>-Footnote-1504215
Ref: pathlib<3>-Footnote-2504270
Ref: pathlib<3>-Footnote-3504325
Node: platform504380
Ref: whatsnew/3 12 platform504481
Ref: 4ad504481
Ref: platform-Footnote-1504865
Node: pdb<2>504920
Ref: whatsnew/3 12 pdb505020
Ref: 4ae505020
Ref: pdb<2>-Footnote-1505335
Node: random<2>505391
Ref: whatsnew/3 12 random505492
Ref: 4af505492
Ref: random<2>-Footnote-1505814
Ref: random<2>-Footnote-2505869
Node: shutil<2>505925
Ref: whatsnew/3 12 shutil506030
Ref: 4b2506030
Ref: shutil<2>-Footnote-1507546
Ref: shutil<2>-Footnote-2507601
Ref: shutil<2>-Footnote-3507657
Ref: shutil<2>-Footnote-4507713
Ref: shutil<2>-Footnote-5507769
Node: sqlite3<2>507825
Ref: whatsnew/3 12 sqlite3507934
Ref: 4b5507934
Ref: sqlite3<2>-Footnote-1508961
Ref: sqlite3<2>-Footnote-2509016
Ref: sqlite3<2>-Footnote-3509058
Ref: sqlite3<2>-Footnote-4509113
Ref: sqlite3<2>-Footnote-5509169
Node: statistics<2>509225
Ref: whatsnew/3 12 statistics509331
Ref: 4bb509331
Ref: statistics<2>-Footnote-1509631
Node: sys<3>509686
Ref: whatsnew/3 12 sys509793
Ref: 4bd509793
Ref: sys<3>-Footnote-1511441
Ref: sys<3>-Footnote-2511497
Ref: sys<3>-Footnote-3511552
Ref: sys<3>-Footnote-4511608
Node: tempfile<2>511664
Ref: whatsnew/3 12 tempfile511767
Ref: 4c5511767
Ref: tempfile<2>-Footnote-1512175
Node: threading512230
Ref: whatsnew/3 12 threading512337
Ref: 4c7512337
Ref: threading-Footnote-1512724
Node: tkinter<2>512779
Ref: whatsnew/3 12 tkinter512883
Ref: 4ca512883
Ref: tkinter<2>-Footnote-1513402
Node: tokenize513457
Ref: whatsnew/3 12 tokenize513560
Ref: 4cb513560
Ref: tokenize-Footnote-1513925
Ref: tokenize-Footnote-2513967
Node: types<2>514023
Ref: whatsnew/3 12 types514125
Ref: 4cd514125
Ref: types<2>-Footnote-1514456
Node: typing<3>514512
Ref: whatsnew/3 12 typing514620
Ref: 4d0514620
Ref: whatsnew/3 12 whatsnew-typing-py312514620
Ref: 4d1514620
Ref: typing<3>-Footnote-1517601
Ref: typing<3>-Footnote-2517657
Ref: typing<3>-Footnote-3517712
Ref: typing<3>-Footnote-4517768
Ref: typing<3>-Footnote-5517824
Node: unicodedata<2>517879
Ref: whatsnew/3 12 unicodedata517990
Ref: 4d5517990
Ref: unicodedata<2>-Footnote-1518197
Node: unittest<2>518252
Ref: whatsnew/3 12 unittest518358
Ref: 4d6518358
Ref: unittest<2>-Footnote-1519169
Node: uuid519224
Ref: whatsnew/3 12 uuid519307
Ref: 4d7519307
Ref: uuid-Footnote-1519486
Node: Otimizações<2>519541
Ref: whatsnew/3 12 optimizations519704
Ref: 4d8519704
Ref: Otimizações<2>-Footnote-1521254
Ref: Otimizações<2>-Footnote-2521296
Ref: Otimizações<2>-Footnote-3521351
Ref: Otimizações<2>-Footnote-4521406
Ref: Otimizações<2>-Footnote-5521462
Ref: Otimizações<2>-Footnote-6521517
Ref: Otimizações<2>-Footnote-7521573
Ref: Otimizações<2>-Footnote-8521615
Ref: Otimizações<2>-Footnote-9521671
Node: Alterações de bytecode do CPython<2>521727
Ref: whatsnew/3 12 cpython-bytecode-changes521889
Ref: 4dd521889
Ref: Alterações de bytecode do CPython<2>-Footnote-1524024
Ref: Alterações de bytecode do CPython<2>-Footnote-2524079
Ref: Alterações de bytecode do CPython<2>-Footnote-3524135
Ref: Alterações de bytecode do CPython<2>-Footnote-4524190
Ref: Alterações de bytecode do CPython<2>-Footnote-5524245
Ref: Alterações de bytecode do CPython<2>-Footnote-6524300
Ref: Alterações de bytecode do CPython<2>-Footnote-7524356
Ref: Alterações de bytecode do CPython<2>-Footnote-8524411
Ref: Alterações de bytecode do CPython<2>-Footnote-9524467
Ref: Alterações de bytecode do CPython<2>-Footnote-10524509
Ref: Alterações de bytecode do CPython<2>-Footnote-11524566
Ref: Alterações de bytecode do CPython<2>-Footnote-12524622
Ref: Alterações de bytecode do CPython<2>-Footnote-13524665
Ref: Alterações de bytecode do CPython<2>-Footnote-14524722
Ref: Alterações de bytecode do CPython<2>-Footnote-15524779
Node: Ferramentas e daemons524836
Ref: whatsnew/3 12 demos-and-tools524996
Ref: 4ea524996
Ref: Ferramentas e daemons-Footnote-1525502
Ref: Ferramentas e daemons-Footnote-2525550
Ref: Ferramentas e daemons-Footnote-3525605
Ref: Ferramentas e daemons-Footnote-4525653
Node: Descontinuados525708
Ref: whatsnew/3 12 deprecated525839
Ref: 4eb525839
Ref: Descontinuados-Footnote-1537876
Ref: Descontinuados-Footnote-2537931
Ref: Descontinuados-Footnote-3537986
Ref: Descontinuados-Footnote-4538041
Ref: Descontinuados-Footnote-5538096
Ref: Descontinuados-Footnote-6538152
Ref: Descontinuados-Footnote-7538208
Ref: Descontinuados-Footnote-8538266
Ref: Descontinuados-Footnote-9538321
Ref: Descontinuados-Footnote-10538377
Ref: Descontinuados-Footnote-11538433
Ref: Descontinuados-Footnote-12538489
Ref: Descontinuados-Footnote-13538546
Ref: Descontinuados-Footnote-14538602
Ref: Descontinuados-Footnote-15538658
Ref: Descontinuados-Footnote-16538714
Ref: Descontinuados-Footnote-17538770
Ref: Descontinuados-Footnote-18538873
Ref: Descontinuados-Footnote-19538930
Ref: Descontinuados-Footnote-20538986
Ref: Descontinuados-Footnote-21539043
Ref: Descontinuados-Footnote-22539100
Ref: Descontinuados-Footnote-23539156
Ref: Descontinuados-Footnote-24539212
Ref: Descontinuados-Footnote-25539268
Ref: Descontinuados-Footnote-26539324
Ref: Descontinuados-Footnote-27539380
Ref: Descontinuados-Footnote-28539436
Ref: Descontinuados-Footnote-29539493
Ref: Descontinuados-Footnote-30539536
Node: Remoção pendente no Python 3 13539593
Ref: whatsnew/3 12 pending-removal-in-python-3-13539722
Ref: 4fb539722
Ref: Remoção pendente no Python 3 13-Footnote-1540802
Ref: Remoção pendente no Python 3 13-Footnote-2540844
Ref: Remoção pendente no Python 3 13-Footnote-3540899
Ref: Remoção pendente no Python 3 13-Footnote-4540954
Ref: Remoção pendente no Python 3 13-Footnote-5541009
Ref: Remoção pendente no Python 3 13-Footnote-6541064
Ref: Remoção pendente no Python 3 13-Footnote-7541119
Ref: Remoção pendente no Python 3 13-Footnote-8541174
Ref: Remoção pendente no Python 3 13-Footnote-9541229
Ref: Remoção pendente no Python 3 13-Footnote-10541284
Ref: Remoção pendente no Python 3 13-Footnote-11541340
Node: Remoção pendente no Python 3 14<3>541396
Ref: whatsnew/3 12 pending-removal-in-python-3-14541570
Ref: 4fc541570
Ref: Remoção pendente no Python 3 14<3>-Footnote-1546348
Ref: Remoção pendente no Python 3 14<3>-Footnote-2546403
Ref: Remoção pendente no Python 3 14<3>-Footnote-3546458
Ref: Remoção pendente no Python 3 14<3>-Footnote-4546513
Ref: Remoção pendente no Python 3 14<3>-Footnote-5546568
Ref: Remoção pendente no Python 3 14<3>-Footnote-6546624
Ref: Remoção pendente no Python 3 14<3>-Footnote-7546680
Ref: Remoção pendente no Python 3 14<3>-Footnote-8546735
Ref: Remoção pendente no Python 3 14<3>-Footnote-9546790
Ref: Remoção pendente no Python 3 14<3>-Footnote-10546846
Ref: Remoção pendente no Python 3 14<3>-Footnote-11546902
Ref: Remoção pendente no Python 3 14<3>-Footnote-12546958
Node: Remoção pendente no Python 3 15<3>547014
Ref: whatsnew/3 12 pending-removal-in-python-3-15547191
Ref: 4fd547191
Ref: Remoção pendente no Python 3 15<3>-Footnote-1551791
Ref: Remoção pendente no Python 3 15<3>-Footnote-2551846
Ref: Remoção pendente no Python 3 15<3>-Footnote-3551901
Ref: Remoção pendente no Python 3 15<3>-Footnote-4551956
Ref: Remoção pendente no Python 3 15<3>-Footnote-5552012
Ref: Remoção pendente no Python 3 15<3>-Footnote-6552054
Node: Remoção pendente no Python 3 16<3>552110
Ref: whatsnew/3 12 pending-removal-in-python-3-16552287
Ref: 4fe552287
Ref: Remoção pendente no Python 3 16<3>-Footnote-1554601
Node: Remoção pendente no Python 3 17<2>554657
Ref: whatsnew/3 12 pending-removal-in-python-3-17554839
Ref: 4ff554839
Ref: Remoção pendente no Python 3 17<2>-Footnote-1557982
Ref: Remoção pendente no Python 3 17<2>-Footnote-2558040
Ref: Remoção pendente no Python 3 17<2>-Footnote-3558095
Ref: Remoção pendente no Python 3 17<2>-Footnote-4558153
Node: Remoção pendente em versões futuras<3>558208
Ref: whatsnew/3 12 pending-removal-in-future-versions558345
Ref: 500558345
Ref: Remoção pendente em versões futuras<3>-Footnote-1565476
Ref: Remoção pendente em versões futuras<3>-Footnote-2565531
Ref: Remoção pendente em versões futuras<3>-Footnote-3565587
Ref: Remoção pendente em versões futuras<3>-Footnote-4565643
Ref: Remoção pendente em versões futuras<3>-Footnote-5565698
Node: Removidos565753
Ref: whatsnew/3 12 removed565888
Ref: 501565888
Ref: whatsnew/3 12 whatsnew312-removed565888
Ref: 502565888
Node: asynchat e asyncore566324
Ref: whatsnew/3 12 asynchat-and-asyncore566413
Ref: 503566413
Ref: asynchat e asyncore-Footnote-1566737
Ref: asynchat e asyncore-Footnote-2566779
Node: configparser<3>566834
Ref: whatsnew/3 12 configparser566941
Ref: 504566941
Ref: configparser<3>-Footnote-1567608
Node: distutils567663
Ref: whatsnew/3 12 distutils567760
Ref: 507567760
Ref: whatsnew/3 12 whatsnew312-removed-distutils567760
Ref: 508567760
Ref: distutils-Footnote-1568210
Ref: distutils-Footnote-2568252
Node: ensurepip568307
Ref: whatsnew/3 12 ensurepip568396
Ref: 509568396
Ref: ensurepip-Footnote-1569456
Node: enum<2>569511
Ref: whatsnew/3 12 enum569597
Ref: 50a569597
Ref: enum<2>-Footnote-1569844
Node: ftplib569899
Ref: whatsnew/3 12 ftplib569980
Ref: 50b569980
Ref: ftplib-Footnote-1570234
Node: gzip570289
Ref: whatsnew/3 12 gzip570370
Ref: 50c570370
Ref: gzip-Footnote-1570804
Node: hashlib570859
Ref: whatsnew/3 12 hashlib570946
Ref: 50e570946
Ref: hashlib-Footnote-1571394
Ref: hashlib-Footnote-2571436
Node: importlib<2>571491
Ref: whatsnew/3 12 importlib571577
Ref: 510571577
Ref: importlib<2>-Footnote-1572484
Ref: importlib<2>-Footnote-2572539
Ref: importlib<2>-Footnote-3572594
Ref: importlib<2>-Footnote-4572649
Ref: importlib<2>-Footnote-5572704
Node: imp572759
Ref: whatsnew/3 12 imp572843
Ref: 511572843
Ref: whatsnew/3 12 whatsnew312-removed-imp572843
Ref: 512572843
Ref: imp-Footnote-1577004
Node: io<2>577059
Ref: whatsnew/3 12 io577140
Ref: 51b577140
Ref: io<2>-Footnote-1577582
Node: locale<2>577637
Ref: whatsnew/3 12 locale577720
Ref: 51e577720
Ref: locale<2>-Footnote-1578002
Node: smtpd578057
Ref: whatsnew/3 12 smtpd578145
Ref: 520578145
Ref: smtpd-Footnote-1578500
Ref: smtpd-Footnote-2578542
Ref: smtpd-Footnote-3578585
Node: sqlite3<3>578640
Ref: whatsnew/3 12 id2578725
Ref: 521578725
Ref: sqlite3<3>-Footnote-1579518
Node: ssl<2>579573
Ref: whatsnew/3 12 ssl579664
Ref: 522579664
Ref: ssl<2>-Footnote-1580775
Ref: ssl<2>-Footnote-2580830
Ref: ssl<2>-Footnote-3580885
Ref: ssl<2>-Footnote-4580941
Node: unittest<3>580996
Ref: whatsnew/3 12 id3581090
Ref: 526581090
Ref: whatsnew/3 12 unittest-testcase-removed-aliases581210
Ref: 44e581210
Ref: unittest<3>-Footnote-1585923
Node: webbrowser<2>585978
Ref: whatsnew/3 12 webbrowser586087
Ref: 532586087
Ref: webbrowser<2>-Footnote-1586409
Node: xml etree ElementTree586465
Ref: whatsnew/3 12 xml-etree-elementtree586575
Ref: 533586575
Ref: xml etree ElementTree-Footnote-1587059
Node: zipimport<2>587114
Ref: whatsnew/3 12 zipimport587217
Ref: 535587217
Ref: zipimport<2>-Footnote-1587566
Ref: zipimport<2>-Footnote-2587608
Node: Outros587663
Ref: whatsnew/3 12 others587736
Ref: 536587736
Ref: Outros-Footnote-1588739
Ref: Outros-Footnote-2588793
Ref: Outros-Footnote-3588848
Ref: Outros-Footnote-4588903
Ref: Outros-Footnote-5588958
Node: Portando para Python 3 12589013
Ref: whatsnew/3 12 porting-to-python-3-12589162
Ref: 537589162
Ref: whatsnew/3 12 whatsnew312-porting-to-python312589162
Ref: 4cc589162
Node: Alterações na API Python<2>589427
Ref: whatsnew/3 12 changes-in-the-python-api589518
Ref: 538589518
Ref: Alterações na API Python<2>-Footnote-1596320
Ref: Alterações na API Python<2>-Footnote-2596375
Ref: Alterações na API Python<2>-Footnote-3596430
Ref: Alterações na API Python<2>-Footnote-4596473
Ref: Alterações na API Python<2>-Footnote-5596528
Ref: Alterações na API Python<2>-Footnote-6596583
Ref: Alterações na API Python<2>-Footnote-7596638
Ref: Alterações na API Python<2>-Footnote-8596694
Ref: Alterações na API Python<2>-Footnote-9596736
Ref: Alterações na API Python<2>-Footnote-10596778
Ref: Alterações na API Python<2>-Footnote-11596821
Node: Mudanças na construção<2>596878
Ref: whatsnew/3 12 build-changes597042
Ref: 544597042
Ref: Mudanças na construção<2>-Footnote-1598943
Ref: Mudanças na construção<2>-Footnote-2598998
Ref: Mudanças na construção<2>-Footnote-3599053
Ref: Mudanças na construção<2>-Footnote-4599108
Ref: Mudanças na construção<2>-Footnote-5599163
Ref: Mudanças na construção<2>-Footnote-6599218
Node: Alterações na API C<4>599273
Ref: whatsnew/3 12 c-api-changes599403
Ref: 545599403
Node: Novas funcionalidades<4>599644
Ref: whatsnew/3 12 id4599766
Ref: 546599766
Ref: whatsnew/3 12 whatsnew312-pep697599829
Ref: 445599829
Ref: whatsnew/3 12 whatsnew312-pep683606496
Ref: 446606496
Ref: Novas funcionalidades<4>-Footnote-1608367
Ref: Novas funcionalidades<4>-Footnote-2608409
Ref: Novas funcionalidades<4>-Footnote-3608451
Ref: Novas funcionalidades<4>-Footnote-4608507
Ref: Novas funcionalidades<4>-Footnote-5608549
Ref: Novas funcionalidades<4>-Footnote-6608605
Ref: Novas funcionalidades<4>-Footnote-7608660
Ref: Novas funcionalidades<4>-Footnote-8608715
Ref: Novas funcionalidades<4>-Footnote-9608770
Ref: Novas funcionalidades<4>-Footnote-10608825
Ref: Novas funcionalidades<4>-Footnote-11608881
Ref: Novas funcionalidades<4>-Footnote-12608937
Ref: Novas funcionalidades<4>-Footnote-13608993
Ref: Novas funcionalidades<4>-Footnote-14609049
Ref: Novas funcionalidades<4>-Footnote-15609105
Ref: Novas funcionalidades<4>-Footnote-16609162
Ref: Novas funcionalidades<4>-Footnote-17609219
Ref: Novas funcionalidades<4>-Footnote-18609276
Ref: Novas funcionalidades<4>-Footnote-19609333
Ref: Novas funcionalidades<4>-Footnote-20609376
Ref: Novas funcionalidades<4>-Footnote-21609432
Ref: Novas funcionalidades<4>-Footnote-22609475
Ref: Novas funcionalidades<4>-Footnote-23609532
Node: Portando para Python 3 12<2>609589
Ref: whatsnew/3 12 id5609737
Ref: 570609737
Ref: Portando para Python 3 12<2>-Footnote-1617838
Ref: Portando para Python 3 12<2>-Footnote-2617893
Ref: Portando para Python 3 12<2>-Footnote-3617948
Ref: Portando para Python 3 12<2>-Footnote-4618003
Ref: Portando para Python 3 12<2>-Footnote-5618058
Ref: Portando para Python 3 12<2>-Footnote-6618113
Ref: Portando para Python 3 12<2>-Footnote-7618168
Ref: Portando para Python 3 12<2>-Footnote-8618224
Node: Descontinuados<2>618280
Ref: whatsnew/3 12 id6618416
Ref: 58c618416
Ref: Descontinuados<2>-Footnote-1624004
Ref: Descontinuados<2>-Footnote-2624046
Ref: Descontinuados<2>-Footnote-3624102
Ref: Descontinuados<2>-Footnote-4624157
Ref: Descontinuados<2>-Footnote-5624212
Ref: Descontinuados<2>-Footnote-6624267
Ref: Descontinuados<2>-Footnote-7624323
Ref: Descontinuados<2>-Footnote-8624379
Node: Remoção pendente no Python 3 14<4>624435
Ref: whatsnew/3 12 id7624570
Ref: 596624570
Ref: Remoção pendente no Python 3 14<4>-Footnote-1627567
Ref: Remoção pendente no Python 3 14<4>-Footnote-2627609
Ref: Remoção pendente no Python 3 14<4>-Footnote-3627665
Node: Remoção pendente no Python 3 15<4>627720
Ref: whatsnew/3 12 id8627900
Ref: 597627900
Node: Remoção pendente no Python 3 16<4>629067
Ref: whatsnew/3 12 id9629252
Ref: 598629252
Node: Remoção pendente em versões futuras<4>629382
Ref: whatsnew/3 12 id10629522
Ref: 599629522
Node: Removidos<2>631626
Ref: whatsnew/3 12 id11631725
Ref: 59a631725
Ref: Removidos<2>-Footnote-1632637
Ref: Removidos<2>-Footnote-2632692
Ref: Removidos<2>-Footnote-3632734
Node: O que há de novo no Python 3 11632789
Ref: whatsnew/3 11 doc632967
Ref: 59b632967
Ref: whatsnew/3 11 translation-repo632967
Ref: 59c632967
Ref: whatsnew/3 11 what-s-new-in-python-3-11632967
Ref: 59d632967
Node: Resumo – Destaques da versão<3>634282
Ref: whatsnew/3 11 summary-release-highlights634418
Ref: 59e634418
Ref: whatsnew/3 11 whatsnew311-summary634418
Ref: 59f634418
Ref: Resumo – Destaques da versão<3>-Footnote-1636135
Ref: Resumo – Destaques da versão<3>-Footnote-2636177
Ref: Resumo – Destaques da versão<3>-Footnote-3636202
Ref: Resumo – Destaques da versão<3>-Footnote-4636244
Ref: Resumo – Destaques da versão<3>-Footnote-5636286
Node: Novas funcionalidades<5>636328
Ref: whatsnew/3 11 new-features636519
Ref: 5af636519
Ref: whatsnew/3 11 whatsnew311-features636519
Ref: 5b0636519
Node: PEP 657 Localizações de erros refinadas em tracebacks636987
Ref: whatsnew/3 11 pep-657-fine-grained-error-locations-in-tracebacks637149
Ref: 5b1637149
Ref: whatsnew/3 11 whatsnew311-pep657637149
Ref: 5a3637149
Ref: PEP 657 Localizações de erros refinadas em tracebacks-Footnote-1640212
Ref: PEP 657 Localizações de erros refinadas em tracebacks-Footnote-2640254
Node: PEP 654 Grupos de exceção e except*640319
Ref: whatsnew/3 11 pep-654-exception-groups-and-except640541
Ref: 5b7640541
Ref: whatsnew/3 11 whatsnew311-pep654640541
Ref: 5a1640541
Ref: PEP 654 Grupos de exceção e except*-Footnote-1641233
Ref: PEP 654 Grupos de exceção e except*-Footnote-2641275
Ref: PEP 654 Grupos de exceção e except*-Footnote-3641317
Node: PEP 678 Exceções podem ser enriquecidas com notas641382
Ref: whatsnew/3 11 pep-678-exceptions-can-be-enriched-with-notes641593
Ref: 5b9641593
Ref: whatsnew/3 11 whatsnew311-pep678641593
Ref: 5a2641593
Ref: PEP 678 Exceções podem ser enriquecidas com notas-Footnote-1642150
Ref: PEP 678 Exceções podem ser enriquecidas com notas-Footnote-2642192
Node: Melhorias no inicializador py exe do Windows642257
Ref: whatsnew/3 11 whatsnew311-windows-launcher642422
Ref: 5bc642422
Ref: whatsnew/3 11 windows-py-exe-launcher-improvements642422
Ref: 5bd642422
Ref: whatsnew/3 11 new-feat-related-type-hints-311643872
Ref: 5bf643872
Ref: Melhorias no inicializador py exe do Windows-Footnote-1643910
Ref: Melhorias no inicializador py exe do Windows-Footnote-2643952
Node: Novos recursos relacionados a dicas de tipo<2>643983
Ref: whatsnew/3 11 new-features-related-to-type-hints644172
Ref: 5c0644172
Ref: whatsnew/3 11 whatsnew311-typing-features644172
Ref: 5c1644172
Ref: Novos recursos relacionados a dicas de tipo<2>-Footnote-1644940
Node: PEP 646 Genéricos variádicos644982
Ref: whatsnew/3 11 pep-646-variadic-generics645189
Ref: 5c2645189
Ref: whatsnew/3 11 whatsnew311-pep646645189
Ref: 5a7645189
Ref: PEP 646 Genéricos variádicos-Footnote-1646264
Ref: PEP 646 Genéricos variádicos-Footnote-2646306
Ref: PEP 646 Genéricos variádicos-Footnote-3646348
Ref: PEP 646 Genéricos variádicos-Footnote-4646390
Node: PEP 655 Marcando itens TypedDict individuais como obrigatórios ou não obrigatórios646455
Ref: whatsnew/3 11 pep-655-marking-individual-typeddict-items-as-required-or-not-required646688
Ref: 5c3646688
Ref: whatsnew/3 11 whatsnew311-pep655646688
Ref: 5a8646688
Ref: PEP 655 Marcando itens TypedDict individuais como obrigatórios ou não obrigatórios-Footnote-1648004
Ref: PEP 655 Marcando itens TypedDict individuais como obrigatórios ou não obrigatórios-Footnote-2648046
Node: PEP 673 Tipo Self648111
Ref: whatsnew/3 11 pep-673-self-type648356
Ref: 5c6648356
Ref: whatsnew/3 11 whatsnew311-pep673648356
Ref: 5a9648356
Ref: PEP 673 Tipo Self-Footnote-1649449
Ref: PEP 673 Tipo Self-Footnote-2649530
Ref: PEP 673 Tipo Self-Footnote-3649572
Node: PEP 675 Tipo de string literal arbitrário649637
Ref: whatsnew/3 11 pep-675-arbitrary-literal-string-type649840
Ref: 5c9649840
Ref: whatsnew/3 11 whatsnew311-pep675649840
Ref: 5aa649840
Ref: PEP 675 Tipo de string literal arbitrário-Footnote-1651377
Ref: PEP 675 Tipo de string literal arbitrário-Footnote-2651419
Node: PEP 681 Transformações de classe de dados651484
Ref: whatsnew/3 11 pep-681-data-class-transforms651700
Ref: 5cb651700
Ref: whatsnew/3 11 whatsnew311-pep681651700
Ref: 5ab651700
Ref: PEP 681 Transformações de classe de dados-Footnote-1652827
Ref: PEP 681 Transformações de classe de dados-Footnote-2652869
Node: PEP 563 pode não ser o futuro652924
Ref: whatsnew/3 11 pep-563-may-not-be-the-future653089
Ref: 5cc653089
Ref: whatsnew/3 11 whatsnew311-pep563-deferred653089
Ref: 5cd653089
Ref: PEP 563 pode não ser o futuro-Footnote-1653497
Ref: PEP 563 pode não ser o futuro-Footnote-2653539
Node: Outras mudanças na linguagem<3>653650
Ref: whatsnew/3 11 other-language-changes653861
Ref: 5ce653861
Ref: whatsnew/3 11 whatsnew311-other-lang-changes653861
Ref: 5cf653861
Ref: whatsnew/3 11 whatsnew311-pythonsafepath655894
Ref: 5a6655894
Ref: Outras mudanças na linguagem<3>-Footnote-1657335
Ref: Outras mudanças na linguagem<3>-Footnote-2657400
Ref: Outras mudanças na linguagem<3>-Footnote-3657465
Ref: Outras mudanças na linguagem<3>-Footnote-4657530
Ref: Outras mudanças na linguagem<3>-Footnote-5657595
Ref: Outras mudanças na linguagem<3>-Footnote-6657650
Ref: Outras mudanças na linguagem<3>-Footnote-7657715
Ref: Outras mudanças na linguagem<3>-Footnote-8657770
Ref: Outras mudanças na linguagem<3>-Footnote-9657812
Ref: Outras mudanças na linguagem<3>-Footnote-10657867
Node: Outras mudanças na implementação do CPython657923
Ref: whatsnew/3 11 other-cpython-implementation-changes658105
Ref: 5e5658105
Ref: whatsnew/3 11 whatsnew311-other-implementation-changes658105
Ref: 5e6658105
Ref: Outras mudanças na implementação do CPython-Footnote-1661681
Ref: Outras mudanças na implementação do CPython-Footnote-2661746
Ref: Outras mudanças na implementação do CPython-Footnote-3661788
Ref: Outras mudanças na implementação do CPython-Footnote-4661853
Ref: Outras mudanças na implementação do CPython-Footnote-5661918
Ref: Outras mudanças na implementação do CPython-Footnote-6661983
Ref: Outras mudanças na implementação do CPython-Footnote-7662048
Ref: Outras mudanças na implementação do CPython-Footnote-8662113
Node: Novos módulos<3>662169
Ref: whatsnew/3 11 new-modules662341
Ref: 5f6662341
Ref: whatsnew/3 11 whatsnew311-new-modules662341
Ref: 5f7662341
Ref: Novos módulos<3>-Footnote-1662729
Ref: Novos módulos<3>-Footnote-2662754
Ref: Novos módulos<3>-Footnote-3662796
Ref: Novos módulos<3>-Footnote-4662861
Ref: Novos módulos<3>-Footnote-5662903
Node: Módulos melhorados<3>662968
Ref: whatsnew/3 11 improved-modules663110
Ref: 5f8663110
Ref: whatsnew/3 11 whatsnew311-improved-modules663110
Ref: 5f9663110
Node: asyncio<3>663842
Ref: whatsnew/3 11 asyncio663930
Ref: 5fa663930
Ref: whatsnew/3 11 whatsnew311-asyncio663930
Ref: 5fb663930
Ref: asyncio<3>-Footnote-1665957
Ref: asyncio<3>-Footnote-2666012
Ref: asyncio<3>-Footnote-3666067
Ref: asyncio<3>-Footnote-4666122
Ref: asyncio<3>-Footnote-5666177
Ref: asyncio<3>-Footnote-6666242
Node: contextlib666307
Ref: whatsnew/3 11 contextlib666415
Ref: 60a666415
Ref: whatsnew/3 11 whatsnew311-contextlib666415
Ref: 60b666415
Ref: contextlib-Footnote-1666764
Node: dataclasses666829
Ref: whatsnew/3 11 dataclasses666935
Ref: 60e666935
Ref: whatsnew/3 11 whatsnew311-dataclasses666935
Ref: 60f666935
Ref: dataclasses-Footnote-1667319
Node: datetime667384
Ref: whatsnew/3 11 datetime667487
Ref: 612667487
Ref: whatsnew/3 11 whatsnew311-datetime667487
Ref: 613667487
Ref: datetime-Footnote-1668074
Ref: datetime-Footnote-2668129
Node: enum<3>668184
Ref: whatsnew/3 11 enum668281
Ref: 618668281
Ref: whatsnew/3 11 whatsnew311-enum668281
Ref: 619668281
Node: fcntl671088
Ref: whatsnew/3 11 fcntl671189
Ref: 633671189
Ref: whatsnew/3 11 whatsnew311-fcntl671189
Ref: 634671189
Node: fractions<3>671450
Ref: whatsnew/3 11 fractions671553
Ref: 635671553
Ref: whatsnew/3 11 whatsnew311-fractions671553
Ref: 636671553
Ref: fractions<3>-Footnote-1672012
Ref: fractions<3>-Footnote-2672054
Ref: fractions<3>-Footnote-3672119
Node: functools672184
Ref: whatsnew/3 11 functools672289
Ref: 637672289
Ref: whatsnew/3 11 whatsnew311-functools672289
Ref: 638672289
Ref: functools-Footnote-1673378
Node: gzip<2>673443
Ref: whatsnew/3 11 gzip673546
Ref: 63c673546
Ref: whatsnew/3 11 whatsnew311-gzip673546
Ref: 63d673546
Ref: gzip<2>-Footnote-1674333
Node: hashlib<2>674389
Ref: whatsnew/3 11 hashlib674497
Ref: 640674497
Ref: whatsnew/3 11 whatsnew311-hashlib674497
Ref: 641674497
Ref: hashlib<2>-Footnote-1675339
Ref: hashlib<2>-Footnote-2675371
Ref: hashlib<2>-Footnote-3675436
Ref: hashlib<2>-Footnote-4675501
Node: IDLE e idlelib675556
Ref: whatsnew/3 11 idle-and-idlelib675667
Ref: 645675667
Ref: whatsnew/3 11 whatsnew311-idle675667
Ref: 646675667
Ref: IDLE e idlelib-Footnote-1676003
Ref: IDLE e idlelib-Footnote-2676068
Node: inspect<2>676123
Ref: whatsnew/3 11 inspect676233
Ref: 647676233
Ref: whatsnew/3 11 whatsnew311-inspect676233
Ref: 648676233
Ref: inspect<2>-Footnote-1677377
Ref: inspect<2>-Footnote-2677442
Ref: inspect<2>-Footnote-3677507
Ref: inspect<2>-Footnote-4677549
Node: locale<3>677604
Ref: whatsnew/3 11 locale677707
Ref: 654677707
Ref: whatsnew/3 11 whatsnew311-locale677707
Ref: 655677707
Node: logging677943
Ref: whatsnew/3 11 logging678043
Ref: 657678043
Ref: whatsnew/3 11 whatsnew311-logging678043
Ref: 658678043
Ref: logging-Footnote-1678797
Ref: logging-Footnote-2678852
Node: math<3>678907
Ref: whatsnew/3 11 math679006
Ref: 65e679006
Ref: whatsnew/3 11 whatsnew311-math679006
Ref: 65f679006
Ref: math<3>-Footnote-1679832
Ref: math<3>-Footnote-2679897
Ref: math<3>-Footnote-3679962
Ref: math<3>-Footnote-4680027
Node: operador680092
Ref: whatsnew/3 11 operator680189
Ref: 664680189
Ref: whatsnew/3 11 whatsnew311-operator680189
Ref: 665680189
Ref: operador-Footnote-1680454
Node: os<3>680519
Ref: whatsnew/3 11 os680619
Ref: 666680619
Ref: whatsnew/3 11 whatsnew311-os680619
Ref: 667680619
Ref: os<3>-Footnote-1680874
Node: pathlib<4>680939
Ref: whatsnew/3 11 pathlib681036
Ref: 668681036
Ref: whatsnew/3 11 whatsnew311-pathlib681036
Ref: 669681036
Ref: pathlib<4>-Footnote-1681378
Ref: pathlib<4>-Footnote-2681443
Node: re<3>681508
Ref: whatsnew/3 11 re681609
Ref: 66c681609
Ref: whatsnew/3 11 whatsnew311-re681609
Ref: 66d681609
Ref: re<3>-Footnote-1681928
Node: shutil<3>681994
Ref: whatsnew/3 11 shutil682091
Ref: 66e682091
Ref: whatsnew/3 11 whatsnew311-shutil682091
Ref: 66f682091
Ref: shutil<3>-Footnote-1682297
Node: socket682362
Ref: whatsnew/3 11 socket682464
Ref: 670682464
Ref: whatsnew/3 11 whatsnew311-socket682464
Ref: 671682464
Ref: socket-Footnote-1682903
Ref: socket-Footnote-2682968
Node: sqlite3<4>683033
Ref: whatsnew/3 11 sqlite3683132
Ref: 673683132
Ref: whatsnew/3 11 whatsnew311-sqlite3683132
Ref: 674683132
Ref: sqlite3<4>-Footnote-1685684
Ref: sqlite3<4>-Footnote-2685749
Ref: sqlite3<4>-Footnote-3685814
Ref: sqlite3<4>-Footnote-4685879
Ref: sqlite3<4>-Footnote-5685944
Ref: sqlite3<4>-Footnote-6686009
Ref: sqlite3<4>-Footnote-7686074
Ref: sqlite3<4>-Footnote-8686139
Ref: sqlite3<4>-Footnote-9686204
Ref: sqlite3<4>-Footnote-10686269
Ref: sqlite3<4>-Footnote-11686335
Node: string686401
Ref: whatsnew/3 11 string686500
Ref: 683686500
Ref: whatsnew/3 11 whatsnew311-string686500
Ref: 684686500
Ref: string-Footnote-1686875
Node: sys<4>686930
Ref: whatsnew/3 11 sys687028
Ref: 688687028
Ref: whatsnew/3 11 whatsnew311-sys687028
Ref: 689687028
Ref: sys<4>-Footnote-1687753
Ref: sys<4>-Footnote-2687818
Ref: sys<4>-Footnote-3687883
Node: sysconfig687938
Ref: whatsnew/3 11 sysconfig688041
Ref: 68d688041
Ref: whatsnew/3 11 whatsnew311-sysconfig688041
Ref: 68e688041
Ref: sysconfig-Footnote-1688933
Node: tempfile<3>688998
Ref: whatsnew/3 11 tempfile689107
Ref: 691689107
Ref: whatsnew/3 11 whatsnew311-tempfile689107
Ref: 692689107
Ref: tempfile<3>-Footnote-1689569
Node: threading<2>689624
Ref: whatsnew/3 11 threading689731
Ref: 696689731
Ref: whatsnew/3 11 whatsnew311-threading689731
Ref: 697689731
Ref: threading<2>-Footnote-1690277
Node: time<2>690342
Ref: whatsnew/3 11 time690448
Ref: 69b690448
Ref: whatsnew/3 11 whatsnew311-time690448
Ref: 69c690448
Ref: time<2>-Footnote-1691302
Ref: time<2>-Footnote-2691367
Ref: time<2>-Footnote-3691464
Ref: time<2>-Footnote-4691529
Node: tkinter<3>691594
Ref: whatsnew/3 11 tkinter691700
Ref: 69e691700
Ref: whatsnew/3 11 whatsnew311-tkinter691700
Ref: 69f691700
Ref: tkinter<3>-Footnote-1692002
Node: traceback<2>692057
Ref: whatsnew/3 11 traceback692165
Ref: 6a1692165
Ref: whatsnew/3 11 whatsnew311-traceback692165
Ref: 6a2692165
Ref: traceback<2>-Footnote-1692691
Ref: traceback<2>-Footnote-2692756
Node: typing<4>692821
Ref: whatsnew/3 11 typing692933
Ref: 6a5692933
Ref: whatsnew/3 11 whatsnew311-typing692933
Ref: 6a6692933
Ref: typing<4>-Footnote-1696614
Ref: typing<4>-Footnote-2696669
Ref: typing<4>-Footnote-3696724
Ref: typing<4>-Footnote-4696779
Ref: typing<4>-Footnote-5696834
Ref: typing<4>-Footnote-6696899
Ref: typing<4>-Footnote-7696954
Ref: typing<4>-Footnote-8697009
Ref: typing<4>-Footnote-9697064
Ref: typing<4>-Footnote-10697119
Ref: typing<4>-Footnote-11697175
Ref: typing<4>-Footnote-12697231
Ref: typing<4>-Footnote-13697287
Ref: typing<4>-Footnote-14697343
Ref: typing<4>-Footnote-15697399
Node: unicodedata<3>697455
Ref: whatsnew/3 11 unicodedata697566
Ref: 6b5697566
Ref: whatsnew/3 11 whatsnew311-unicodedata697566
Ref: 6b6697566
Ref: unicodedata<3>-Footnote-1697774
Node: unittest<4>697839
Ref: whatsnew/3 11 unittest697948
Ref: 6b7697948
Ref: whatsnew/3 11 whatsnew311-unittest697948
Ref: 6b8697948
Ref: unittest<4>-Footnote-1698364
Node: venv<2>698429
Ref: whatsnew/3 11 venv698533
Ref: 6bd698533
Ref: whatsnew/3 11 whatsnew311-venv698533
Ref: 6be698533
Ref: venv<2>-Footnote-1699215
Node: avisos<2>699280
Ref: whatsnew/3 11 warnings699380
Ref: 6bf699380
Ref: whatsnew/3 11 whatsnew311-warnings699380
Ref: 6c0699380
Ref: avisos<2>-Footnote-1699721
Node: zipfile699786
Ref: whatsnew/3 11 whatsnew311-zipfile699870
Ref: 6c2699870
Ref: whatsnew/3 11 zipfile699870
Ref: 6c3699870
Ref: zipfile-Footnote-1700509
Ref: zipfile-Footnote-2700574
Ref: zipfile-Footnote-3700629
Node: Otimizações<3>700684
Ref: whatsnew/3 11 optimizations700829
Ref: 6ca700829
Ref: whatsnew/3 11 whatsnew311-optimizations700829
Ref: 6cb700829
Ref: Otimizações<3>-Footnote-1703441
Ref: Otimizações<3>-Footnote-2703506
Ref: Otimizações<3>-Footnote-3703561
Ref: Otimizações<3>-Footnote-4703616
Ref: Otimizações<3>-Footnote-5703671
Ref: Otimizações<3>-Footnote-6703736
Ref: Otimizações<3>-Footnote-7703791
Ref: Otimizações<3>-Footnote-8703856
Ref: Otimizações<3>-Footnote-9703911
Node: CPython mais rápido703976
Ref: whatsnew/3 11 faster-cpython704137
Ref: 6d6704137
Ref: whatsnew/3 11 whatsnew311-faster-cpython704137
Ref: 5a0704137
Ref: CPython mais rápido-Footnote-1704848
Ref: CPython mais rápido-Footnote-2704914
Node: Inicialização mais rápida704962
Ref: whatsnew/3 11 faster-startup705088
Ref: 6d9705088
Ref: whatsnew/3 11 whatsnew311-faster-startup705088
Ref: 6d7705088
Node: Importações congeladas/objetos de código estático705228
Ref: whatsnew/3 11 frozen-imports-static-code-objects705346
Ref: 6da705346
Ref: whatsnew/3 11 whatsnew311-faster-imports705346
Ref: 6db705346
Node: Tempo de execução mais rápido706324
Ref: whatsnew/3 11 faster-runtime706467
Ref: 6dd706467
Ref: whatsnew/3 11 whatsnew311-faster-runtime706467
Ref: 6d8706467
Node: Quadros Python menos custosos e mais preguiçosos706751
Ref: whatsnew/3 11 cheaper-lazy-python-frames706914
Ref: 6de706914
Ref: whatsnew/3 11 whatsnew311-lazy-python-frames706914
Ref: 6df706914
Ref: whatsnew/3 11 inline-calls708058
Ref: 6e3708058
Ref: Quadros Python menos custosos e mais preguiçosos-Footnote-1708096
Node: Chamadas de função Python em linha708161
Ref: whatsnew/3 11 inlined-python-function-calls708379
Ref: 6e4708379
Ref: whatsnew/3 11 whatsnew311-inline-calls708379
Ref: 6e5708379
Ref: Chamadas de função Python em linha-Footnote-1709475
Node: PEP 659 Interpretador adaptativo especializado709540
Ref: whatsnew/3 11 pep-659-specializing-adaptive-interpreter709700
Ref: 6e6709700
Ref: whatsnew/3 11 whatsnew311-pep659709700
Ref: 17c709700
Ref: PEP 659 Interpretador adaptativo especializado-Footnote-1717302
Ref: PEP 659 Interpretador adaptativo especializado-Footnote-2717344
Ref: PEP 659 Interpretador adaptativo especializado-Footnote-3717386
Ref: PEP 659 Interpretador adaptativo especializado-Footnote-4717527
Node: Diversos717780
Ref: whatsnew/3 11 misc717898
Ref: 6e7717898
Ref: whatsnew/3 11 whatsnew311-faster-cpython-misc717898
Ref: 6e8717898
Ref: Diversos-Footnote-1719060
Ref: Diversos-Footnote-2719125
Ref: Diversos-Footnote-3719190
Ref: Diversos-Footnote-4719255
Ref: Diversos-Footnote-5719320
Ref: Diversos-Footnote-6719391
Node: FAQ719446
Ref: whatsnew/3 11 faq719537
Ref: 6ea719537
Ref: whatsnew/3 11 whatsnew311-faster-cpython-faq719537
Ref: 6eb719537
Node: Como devo escrever meu código para utilizar esses aceleradores?719888
Ref: whatsnew/3 11 faster-cpython-faq-my-code720037
Ref: 6ec720037
Ref: whatsnew/3 11 how-should-i-write-my-code-to-utilize-these-speedups720037
Ref: 6ed720037
Node: O CPython 3 11 usará mais memória?720374
Ref: whatsnew/3 11 faster-cpython-faq-memory720598
Ref: 6ee720598
Ref: whatsnew/3 11 will-cpython-3-11-use-more-memory720598
Ref: 6ef720598
Node: Não vejo nenhuma aceleração em minha carga de trabalho Por que?720892
Ref: whatsnew/3 11 faster-cpython-ymmv721077
Ref: 6f0721077
Ref: whatsnew/3 11 i-don-t-see-any-speedups-in-my-workload-why721077
Ref: 6f1721077
Node: Existe um compilador JIT?721767
Ref: whatsnew/3 11 faster-cpython-jit721907
Ref: 6f2721907
Ref: whatsnew/3 11 is-there-a-jit-compiler721907
Ref: 6f3721907
Node: Sobre722033
Ref: whatsnew/3 11 about722107
Ref: 6f4722107
Ref: whatsnew/3 11 whatsnew311-faster-cpython-about722107
Ref: 6f5722107
Node: Alterações de bytecode do CPython<3>722468
Ref: whatsnew/3 11 cpython-bytecode-changes722630
Ref: 6f7722630
Ref: whatsnew/3 11 whatsnew311-bytecode-changes722630
Ref: 6f8722630
Node: Novos opcodes723273
Ref: whatsnew/3 11 new-opcodes723391
Ref: 6fa723391
Ref: whatsnew/3 11 whatsnew311-added-opcodes723391
Ref: 6fb723391
Ref: Novos opcodes-Footnote-1724251
Node: Opcodes substituídos724293
Ref: whatsnew/3 11 replaced-opcodes724447
Ref: 704724447
Ref: whatsnew/3 11 whatsnew311-replaced-opcodes724447
Ref: 705724447
Ref: whatsnew/3 11 whatsnew311-changed-opcodes727276
Ref: 70e727276
Ref: whatsnew/3 11 whatsnew311-removed-opcodes727276
Ref: 70f727276
Ref: Opcodes substituídos-Footnote-1727312
Node: Opcodes alterados/removidos727536
Ref: whatsnew/3 11 changed-removed-opcodes727668
Ref: 710727668
Ref: whatsnew/3 11 whatsnew311-changed-removed-opcodes727668
Ref: 711727668
Ref: whatsnew/3 11 whatsnew311-deprecated728287
Ref: 714728287
Ref: Opcodes alterados/removidos-Footnote-1728324
Node: Descontinuados<3>728379
Ref: whatsnew/3 11 deprecated728554
Ref: 715728554
Ref: whatsnew/3 11 whatsnew311-python-api-deprecated728554
Ref: 716728554
Ref: whatsnew/3 11 whatsnew311-deprecated-language728742
Ref: 718728742
Node: Linguagem/Embutidos728813
Ref: whatsnew/3 11 language-builtins728903
Ref: 719728903
Ref: whatsnew/3 11 whatsnew311-deprecated-builtins728903
Ref: 71a728903
Ref: Linguagem/Embutidos-Footnote-1730203
Ref: Linguagem/Embutidos-Footnote-2730268
Ref: Linguagem/Embutidos-Footnote-3730323
Ref: Linguagem/Embutidos-Footnote-4730378
Node: Módulos730443
Ref: whatsnew/3 11 modules730560
Ref: 71e730560
Ref: whatsnew/3 11 whatsnew311-deprecated-modules730560
Ref: 71f730560
Ref: whatsnew/3 11 whatsnew311-pep594730596
Ref: 5ac730596
Ref: Módulos-Footnote-1732883
Ref: Módulos-Footnote-2732925
Ref: Módulos-Footnote-3732990
Ref: Módulos-Footnote-4733045
Ref: Módulos-Footnote-5733110
Ref: Módulos-Footnote-6733152
Ref: Módulos-Footnote-7733217
Node: Biblioteca Padrão733282
Ref: whatsnew/3 11 standard-library733371
Ref: 720733371
Ref: whatsnew/3 11 whatsnew311-deprecated-stdlib733371
Ref: 721733371
Ref: whatsnew/3 11 whatsnew311-pending-removal738519
Ref: 726738519
Ref: Biblioteca Padrão-Footnote-1738556
Ref: Biblioteca Padrão-Footnote-2738621
Ref: Biblioteca Padrão-Footnote-3738686
Ref: Biblioteca Padrão-Footnote-4738741
Ref: Biblioteca Padrão-Footnote-5738796
Ref: Biblioteca Padrão-Footnote-6738851
Ref: Biblioteca Padrão-Footnote-7738906
Ref: Biblioteca Padrão-Footnote-8738971
Ref: Biblioteca Padrão-Footnote-9739026
Ref: Biblioteca Padrão-Footnote-10739081
Ref: Biblioteca Padrão-Footnote-11739147
Ref: Biblioteca Padrão-Footnote-12739212
Node: Pendente remoção no Python 3 12739268
Ref: whatsnew/3 11 pending-removal-in-python-3-12739417
Ref: 727739417
Ref: whatsnew/3 11 whatsnew311-python-api-pending-removal739417
Ref: 728739417
Ref: whatsnew/3 11 whatsnew311-removed745097
Ref: 72d745097
Node: Removidos<3>745097
Ref: whatsnew/3 11 removed745254
Ref: 72e745254
Ref: whatsnew/3 11 whatsnew311-python-api-removed745254
Ref: 72f745254
Ref: whatsnew/3 11 whatsnew311-porting750168
Ref: 73c750168
Ref: Removidos<3>-Footnote-1750205
Ref: Removidos<3>-Footnote-2750270
Ref: Removidos<3>-Footnote-3750335
Ref: Removidos<3>-Footnote-4750400
Ref: Removidos<3>-Footnote-5750465
Ref: Removidos<3>-Footnote-6750530
Ref: Removidos<3>-Footnote-7750595
Ref: Removidos<3>-Footnote-8750660
Ref: Removidos<3>-Footnote-9750725
Ref: Removidos<3>-Footnote-10750790
Ref: Removidos<3>-Footnote-11750856
Ref: Removidos<3>-Footnote-12750922
Ref: Removidos<3>-Footnote-13750988
Ref: Removidos<3>-Footnote-14751054
Ref: Removidos<3>-Footnote-15751096
Node: Portando para Python 3 11751150
Ref: whatsnew/3 11 porting-to-python-3-11751302
Ref: 73d751302
Ref: whatsnew/3 11 whatsnew311-python-api-porting751302
Ref: 73e751302
Ref: Portando para Python 3 11-Footnote-1754652
Ref: Portando para Python 3 11-Footnote-2754717
Ref: Portando para Python 3 11-Footnote-3754772
Ref: Portando para Python 3 11-Footnote-4754837
Ref: Portando para Python 3 11-Footnote-5754902
Ref: Portando para Python 3 11-Footnote-6754967
Ref: Portando para Python 3 11-Footnote-7755032
Ref: Portando para Python 3 11-Footnote-8755097
Node: Mudanças na construção<3>755162
Ref: whatsnew/3 11 build-changes755326
Ref: 749755326
Ref: whatsnew/3 11 whatsnew311-build-changes755326
Ref: 74a755326
Ref: Mudanças na construção<3>-Footnote-1759964
Ref: Mudanças na construção<3>-Footnote-2760013
Ref: Mudanças na construção<3>-Footnote-3760055
Ref: Mudanças na construção<3>-Footnote-4760088
Ref: Mudanças na construção<3>-Footnote-5760120
Ref: Mudanças na construção<3>-Footnote-6760146
Ref: Mudanças na construção<3>-Footnote-7760175
Ref: Mudanças na construção<3>-Footnote-8760230
Ref: Mudanças na construção<3>-Footnote-9760285
Ref: Mudanças na construção<3>-Footnote-10760340
Ref: Mudanças na construção<3>-Footnote-11760384
Ref: Mudanças na construção<3>-Footnote-12760468
Ref: Mudanças na construção<3>-Footnote-13760534
Ref: Mudanças na construção<3>-Footnote-14760600
Ref: Mudanças na construção<3>-Footnote-15760666
Ref: Mudanças na construção<3>-Footnote-16760714
Ref: Mudanças na construção<3>-Footnote-17760780
Ref: Mudanças na construção<3>-Footnote-18760846
Ref: Mudanças na construção<3>-Footnote-19760874
Ref: Mudanças na construção<3>-Footnote-20760940
Ref: Mudanças na construção<3>-Footnote-21761003
Ref: Mudanças na construção<3>-Footnote-22761031
Ref: Mudanças na construção<3>-Footnote-23761097
Ref: Mudanças na construção<3>-Footnote-24761163
Ref: Mudanças na construção<3>-Footnote-25761229
Ref: Mudanças na construção<3>-Footnote-26761295
Ref: Mudanças na construção<3>-Footnote-27761345
Ref: Mudanças na construção<3>-Footnote-28761411
Ref: Mudanças na construção<3>-Footnote-29761477
Ref: Mudanças na construção<3>-Footnote-30761543
Ref: Mudanças na construção<3>-Footnote-31761609
Ref: Mudanças na construção<3>-Footnote-32761675
Ref: Mudanças na construção<3>-Footnote-33761741
Node: Alterações na API C<5>761807
Ref: whatsnew/3 11 c-api-changes761978
Ref: 74e761978
Ref: whatsnew/3 11 whatsnew311-c-api761978
Ref: 74f761978
Node: Novas funcionalidades<6>762294
Ref: whatsnew/3 11 id5762416
Ref: 750762416
Ref: whatsnew/3 11 whatsnew311-c-api-new-features762416
Ref: 751762416
Ref: Novas funcionalidades<6>-Footnote-1765471
Ref: Novas funcionalidades<6>-Footnote-2765536
Ref: Novas funcionalidades<6>-Footnote-3765601
Ref: Novas funcionalidades<6>-Footnote-4765666
Ref: Novas funcionalidades<6>-Footnote-5765731
Ref: Novas funcionalidades<6>-Footnote-6765796
Ref: Novas funcionalidades<6>-Footnote-7765861
Ref: Novas funcionalidades<6>-Footnote-8765926
Ref: Novas funcionalidades<6>-Footnote-9765991
Node: Portando para Python 3 11<2>766046
Ref: whatsnew/3 11 id6766194
Ref: 774766194
Ref: whatsnew/3 11 whatsnew311-c-api-porting766194
Ref: 73f766194
Ref: whatsnew/3 11 whatsnew311-pep670766265
Ref: 5ae766265
Ref: whatsnew/3 11 pyframeobject-3-11-hiding774147
Ref: 788774147
Ref: Portando para Python 3 11<2>-Footnote-1780414
Ref: Portando para Python 3 11<2>-Footnote-2780477
Ref: Portando para Python 3 11<2>-Footnote-3780519
Ref: Portando para Python 3 11<2>-Footnote-4780574
Ref: Portando para Python 3 11<2>-Footnote-5780639
Ref: Portando para Python 3 11<2>-Footnote-6780704
Ref: Portando para Python 3 11<2>-Footnote-7780769
Ref: Portando para Python 3 11<2>-Footnote-8780811
Ref: Portando para Python 3 11<2>-Footnote-9780876
Ref: Portando para Python 3 11<2>-Footnote-10780931
Ref: Portando para Python 3 11<2>-Footnote-11780987
Ref: Portando para Python 3 11<2>-Footnote-12781053
Ref: Portando para Python 3 11<2>-Footnote-13781096
Ref: Portando para Python 3 11<2>-Footnote-14781162
Ref: Portando para Python 3 11<2>-Footnote-15781228
Ref: Portando para Python 3 11<2>-Footnote-16781294
Ref: Portando para Python 3 11<2>-Footnote-17781360
Ref: Portando para Python 3 11<2>-Footnote-18781426
Ref: Portando para Python 3 11<2>-Footnote-19781492
Ref: Portando para Python 3 11<2>-Footnote-20781548
Ref: Portando para Python 3 11<2>-Footnote-21781601
Ref: Portando para Python 3 11<2>-Footnote-22781667
Ref: Portando para Python 3 11<2>-Footnote-23781733
Ref: Portando para Python 3 11<2>-Footnote-24781786
Node: Descontinuados<4>781819
Ref: whatsnew/3 11 id7781979
Ref: 791781979
Ref: whatsnew/3 11 whatsnew311-c-api-deprecated781979
Ref: 717781979
Ref: Descontinuados<4>-Footnote-1782979
Ref: Descontinuados<4>-Footnote-2783021
Ref: Descontinuados<4>-Footnote-3783076
Node: Pendente remoção no Python 3 12<2>783141
Ref: whatsnew/3 11 id8783285
Ref: 793783285
Ref: whatsnew/3 11 whatsnew311-c-api-pending-removal783285
Ref: 729783285
Node: Removidos<4>784042
Ref: whatsnew/3 11 id9784160
Ref: 795784160
Ref: whatsnew/3 11 whatsnew311-c-api-removed784160
Ref: 730784160
Ref: whatsnew/3 11 whatsnew311-pep624786471
Ref: 5ad786471
Ref: Removidos<4>-Footnote-1787435
Ref: Removidos<4>-Footnote-2787500
Ref: Removidos<4>-Footnote-3787565
Ref: Removidos<4>-Footnote-4787630
Ref: Removidos<4>-Footnote-5787695
Ref: Removidos<4>-Footnote-6787760
Ref: Removidos<4>-Footnote-7787825
Ref: Removidos<4>-Footnote-8787890
Ref: Removidos<4>-Footnote-9787955
Ref: Removidos<4>-Footnote-10788020
Ref: Removidos<4>-Footnote-11788063
Ref: Removidos<4>-Footnote-12788123
Node: Alterações notáveis no 3 11 4788189
Ref: whatsnew/3 11 notable-changes-in-3-11-4788364
Ref: 79b788364
Node: tarfile<2>788475
Ref: whatsnew/3 11 tarfile788554
Ref: 79c788554
Ref: tarfile<2>-Footnote-1789164
Node: Alterações notáveis no 3 11 5789206
Ref: whatsnew/3 11 notable-changes-in-3-11-5789348
Ref: 79d789348
Node: OpenSSL789448
Ref: whatsnew/3 11 openssl789524
Ref: 79e789524
Node: O que há de novo no Python 3 10789657
Ref: whatsnew/3 10 doc789834
Ref: 79f789834
Ref: whatsnew/3 10 translation-repo789834
Ref: 7a0789834
Ref: whatsnew/3 10 what-s-new-in-python-3-10789834
Ref: 7a1789834
Node: Resumo – Destaques da versão<4>791111
Ref: whatsnew/3 10 summary-release-highlights791247
Ref: 7a2791247
Ref: Resumo – Destaques da versão<4>-Footnote-1792584
Ref: Resumo – Destaques da versão<4>-Footnote-2792626
Ref: Resumo – Destaques da versão<4>-Footnote-3792668
Ref: Resumo – Destaques da versão<4>-Footnote-4792710
Ref: Resumo – Destaques da versão<4>-Footnote-5792775
Ref: Resumo – Destaques da versão<4>-Footnote-6792817
Ref: Resumo – Destaques da versão<4>-Footnote-7792859
Ref: Resumo – Destaques da versão<4>-Footnote-8792901
Ref: Resumo – Destaques da versão<4>-Footnote-9792943
Ref: Resumo – Destaques da versão<4>-Footnote-10792985
Ref: Resumo – Destaques da versão<4>-Footnote-11793028
Ref: Resumo – Destaques da versão<4>-Footnote-12793071
Ref: Resumo – Destaques da versão<4>-Footnote-13793114
Ref: Resumo – Destaques da versão<4>-Footnote-14793157
Ref: Resumo – Destaques da versão<4>-Footnote-15793200
Node: Novas funcionalidades<7>793243
Ref: whatsnew/3 10 new-features793434
Ref: 7a3793434
Node: Gerenciadores de contexto entre parênteses793887
Ref: whatsnew/3 10 parenthesized-context-managers794026
Ref: 7a4794026
Ref: whatsnew/3 10 whatsnew310-pep563794026
Ref: 7a5794026
Ref: Gerenciadores de contexto entre parênteses-Footnote-1795348
Ref: Gerenciadores de contexto entre parênteses-Footnote-2795390
Ref: Gerenciadores de contexto entre parênteses-Footnote-3795455
Node: Melhores mensagens de erro795520
Ref: whatsnew/3 10 better-error-messages795740
Ref: 7a6795740
Node: SyntaxErrors795895
Ref: whatsnew/3 10 syntaxerrors795996
Ref: 7a7795996
Ref: SyntaxErrors-Footnote-1801425
Ref: SyntaxErrors-Footnote-2801490
Ref: SyntaxErrors-Footnote-3801555
Ref: SyntaxErrors-Footnote-4801620
Ref: SyntaxErrors-Footnote-5801685
Ref: SyntaxErrors-Footnote-6801750
Ref: SyntaxErrors-Footnote-7801815
Ref: SyntaxErrors-Footnote-8801880
Ref: SyntaxErrors-Footnote-9801945
Ref: SyntaxErrors-Footnote-10802010
Ref: SyntaxErrors-Footnote-11802076
Node: IndentationErrors802142
Ref: whatsnew/3 10 indentationerrors802267
Ref: 7a8802267
Node: AttributeErrors802689
Ref: whatsnew/3 10 attributeerrors802812
Ref: 7aa802812
Ref: AttributeErrors-Footnote-1803653
Node: NameErrors803718
Ref: whatsnew/3 10 nameerrors803815
Ref: 7ab803815
Ref: NameErrors-Footnote-1804734
Node: PEP 626 Números de linha precisos para depuração e outras ferramentas804799
Ref: whatsnew/3 10 pep-626-precise-line-numbers-for-debugging-and-other-tools805022
Ref: 7ac805022
Node: PEP 634 Correspondência de padrão estrutural805807
Ref: whatsnew/3 10 pep-634-structural-pattern-matching806056
Ref: 7ae806056
Node: Sintaxe e operações806969
Ref: whatsnew/3 10 syntax-and-operations807103
Ref: 7af807103
Node: Abordagem declarativa808284
Ref: whatsnew/3 10 declarative-approach808468
Ref: 7b0808468
Node: Padrão simples corresponder a um literal809844
Ref: whatsnew/3 10 simple-pattern-match-to-a-literal810043
Ref: 7b1810043
Node: Comportamento sem o curinga811492
Ref: whatsnew/3 10 behavior-without-the-wildcard811597
Ref: 7b2811597
Node: Padrões com uma literal e variável812214
Ref: whatsnew/3 10 patterns-with-a-literal-and-variable812410
Ref: 7b3812410
Node: Padrões e classes813427
Ref: whatsnew/3 10 patterns-and-classes813600
Ref: 7b4813600
Node: Padrões com parâmetros posicionais814545
Ref: whatsnew/3 10 patterns-with-positional-parameters814636
Ref: 7b5814636
Node: Padrões aninhados815259
Ref: whatsnew/3 10 nested-patterns815426
Ref: 7b6815426
Node: Padrões complexos e o curinga816097
Ref: whatsnew/3 10 complex-patterns-and-the-wildcard816252
Ref: 7b7816252
Node: Guarda816817
Ref: whatsnew/3 10 guard816975
Ref: 7b8816975
Node: Outros recursos-chave817445
Ref: whatsnew/3 10 other-key-features817564
Ref: 7b9817564
Ref: Outros recursos-chave-Footnote-1819991
Ref: Outros recursos-chave-Footnote-2820033
Ref: Outros recursos-chave-Footnote-3820075
Node: EncodingWarning opcional e opção encoding="locale"820117
Ref: whatsnew/3 10 optional-encodingwarning-and-encoding-locale-option820285
Ref: 7ba820285
Ref: whatsnew/3 10 whatsnew310-pep597820285
Ref: 7bb820285
Node: Novos recursos relacionados a dicas de tipo<3>821260
Ref: whatsnew/3 10 new-feat-related-type-hints821449
Ref: 7bf821449
Ref: whatsnew/3 10 new-features-related-to-type-hints821449
Ref: 7c0821449
Ref: Novos recursos relacionados a dicas de tipo<3>-Footnote-1822051
Node: PEP 604 novo operador de união de tipo822093
Ref: whatsnew/3 10 pep-604-new-type-union-operator822276
Ref: 7c1822276
Ref: PEP 604 novo operador de união de tipo-Footnote-1823434
Ref: PEP 604 novo operador de união de tipo-Footnote-2823476
Ref: PEP 604 novo operador de união de tipo-Footnote-3823541
Node: PEP 612 variáveis de especificação de parâmetros823606
Ref: whatsnew/3 10 pep-612-parameter-specification-variables823815
Ref: 7c4823815
Ref: PEP 612 variáveis de especificação de parâmetros-Footnote-1825233
Ref: PEP 612 variáveis de especificação de parâmetros-Footnote-2825275
Ref: PEP 612 variáveis de especificação de parâmetros-Footnote-3825317
Ref: PEP 612 variáveis de especificação de parâmetros-Footnote-4825382
Node: PEP 613 TypeAlias825447
Ref: whatsnew/3 10 pep-613-typealias825664
Ref: 7c9825664
Ref: PEP 613 TypeAlias-Footnote-1826576
Ref: PEP 613 TypeAlias-Footnote-2826618
Ref: PEP 613 TypeAlias-Footnote-3826660
Node: PEP 647 guardas de tipo definidas pelo usuário826725
Ref: whatsnew/3 10 pep-647-user-defined-type-guards826881
Ref: 7cb826881
Ref: PEP 647 guardas de tipo definidas pelo usuário-Footnote-1827426
Ref: PEP 647 guardas de tipo definidas pelo usuário-Footnote-2827468
Node: Outras mudanças na linguagem<4>827533
Ref: whatsnew/3 10 other-language-changes827715
Ref: 7cc827715
Ref: Outras mudanças na linguagem<4>-Footnote-1832815
Ref: Outras mudanças na linguagem<4>-Footnote-2832880
Ref: Outras mudanças na linguagem<4>-Footnote-3832945
Ref: Outras mudanças na linguagem<4>-Footnote-4832987
Ref: Outras mudanças na linguagem<4>-Footnote-5833052
Ref: Outras mudanças na linguagem<4>-Footnote-6833117
Ref: Outras mudanças na linguagem<4>-Footnote-7833182
Ref: Outras mudanças na linguagem<4>-Footnote-8833247
Ref: Outras mudanças na linguagem<4>-Footnote-9833312
Ref: Outras mudanças na linguagem<4>-Footnote-10833354
Ref: Outras mudanças na linguagem<4>-Footnote-11833420
Ref: Outras mudanças na linguagem<4>-Footnote-12833486
Ref: Outras mudanças na linguagem<4>-Footnote-13833552
Ref: Outras mudanças na linguagem<4>-Footnote-14833618
Ref: Outras mudanças na linguagem<4>-Footnote-15833684
Ref: Outras mudanças na linguagem<4>-Footnote-16833750
Node: Novos módulos<4>833816
Ref: whatsnew/3 10 new-modules833974
Ref: 7dc833974
Node: Módulos melhorados<4>834030
Ref: whatsnew/3 10 improved-modules834172
Ref: 7dd834172
Node: asyncio<4>835282
Ref: whatsnew/3 10 asyncio835371
Ref: 7de835371
Ref: asyncio<4>-Footnote-1835573
Node: argparse<2>835638
Ref: whatsnew/3 10 argparse835744
Ref: 7e0835744
Ref: argparse<2>-Footnote-1836069
Node: array<3>836133
Ref: whatsnew/3 10 array836252
Ref: 7e1836252
Ref: array<3>-Footnote-1836492
Node: asynchat asyncore smtpd836557
Ref: whatsnew/3 10 asynchat-asyncore-smtpd836674
Ref: 7e3836674
Node: base64<2>836969
Ref: whatsnew/3 10 base64837081
Ref: 7e4837081
Node: bdb837261
Ref: whatsnew/3 10 bdb837356
Ref: 7e7837356
Ref: bdb-Footnote-1837562
Node: bisect837627
Ref: whatsnew/3 10 bisect837719
Ref: 7e8837719
Ref: bisect-Footnote-1837942
Node: codecs838006
Ref: whatsnew/3 10 codecs838110
Ref: 7e9838110
Ref: codecs-Footnote-1838343
Node: collections abc838408
Ref: whatsnew/3 10 collections-abc838519
Ref: 7eb838519
Ref: collections abc-Footnote-1839520
Node: contextlib<2>839585
Ref: whatsnew/3 10 contextlib839696
Ref: 7ee839696
Ref: contextlib<2>-Footnote-1840300
Ref: contextlib<2>-Footnote-2840365
Node: curses840430
Ref: whatsnew/3 10 curses840540
Ref: 7f2840540
Ref: curses-Footnote-1841260
Ref: curses-Footnote-2841325
Node: dataclasses<2>841390
Ref: whatsnew/3 10 dataclasses841499
Ref: 7f8841499
Node: __slots__841594
Ref: whatsnew/3 10 slots841686
Ref: 7f9841686
Ref: __slots__-Footnote-1841898
Node: Campos somente-nomeados841963
Ref: whatsnew/3 10 keyword-only-fields842055
Ref: 7fa842055
Ref: Campos somente-nomeados-Footnote-1843650
Node: distutils<2>843715
Ref: whatsnew/3 10 distutils843828
Ref: 7fb843828
Ref: whatsnew/3 10 distutils-deprecated843828
Ref: 72a843828
Ref: distutils<2>-Footnote-1844775
Ref: distutils<2>-Footnote-2844817
Node: doctest<2>844882
Ref: whatsnew/3 10 doctest844990
Ref: 7fc844990
Ref: doctest<2>-Footnote-1845193
Node: encodings845258
Ref: whatsnew/3 10 encodings845361
Ref: 7fd845361
Ref: encodings-Footnote-1845561
Node: enum<4>845626
Ref: whatsnew/3 10 enum845728
Ref: 7ff845728
Ref: enum<4>-Footnote-1846238
Ref: enum<4>-Footnote-2846303
Node: fileinput846368
Ref: whatsnew/3 10 fileinput846473
Ref: 801846473
Ref: fileinput-Footnote-1846936
Ref: fileinput-Footnote-2847001
Node: faulthandler847065
Ref: whatsnew/3 10 faulthandler847165
Ref: 804847165
Ref: faulthandler-Footnote-1847409
Node: gc847474
Ref: whatsnew/3 10 gc847572
Ref: 805847572
Ref: gc-Footnote-1847814
Node: glob<2>847879
Ref: whatsnew/3 10 glob847975
Ref: 809847975
Ref: glob<2>-Footnote-1848247
Node: hashlib<3>848312
Ref: whatsnew/3 10 hashlib848410
Ref: 80b848410
Ref: hashlib<3>-Footnote-1848976
Ref: hashlib<3>-Footnote-2849018
Ref: hashlib<3>-Footnote-3849083
Ref: hashlib<3>-Footnote-4849148
Node: hmac849213
Ref: whatsnew/3 10 hmac849321
Ref: 80c849321
Ref: hmac-Footnote-1849514
Node: IDLE e idlelib<2>849579
Ref: whatsnew/3 10 idle-and-idlelib849698
Ref: 80d849698
Ref: IDLE e idlelib<2>-Footnote-1852074
Ref: IDLE e idlelib<2>-Footnote-2852139
Ref: IDLE e idlelib<2>-Footnote-3852204
Ref: IDLE e idlelib<2>-Footnote-4852269
Ref: IDLE e idlelib<2>-Footnote-5852334
Ref: IDLE e idlelib<2>-Footnote-6852399
Ref: IDLE e idlelib<2>-Footnote-7852464
Ref: IDLE e idlelib<2>-Footnote-8852529
Node: importlib metadata<2>852584
Ref: whatsnew/3 10 importlib-metadata852709
Ref: 812852709
Ref: importlib metadata<2>-Footnote-1853363
Node: inspect<3>853436
Ref: whatsnew/3 10 inspect853556
Ref: 815853556
Ref: inspect<3>-Footnote-1854839
Ref: inspect<3>-Footnote-2854904
Node: itertools<3>854969
Ref: whatsnew/3 10 itertools855077
Ref: 817855077
Ref: itertools<3>-Footnote-1855251
Node: linecache855316
Ref: whatsnew/3 10 linecache855419
Ref: 819855419
Ref: linecache-Footnote-1855626
Node: os<4>855691
Ref: whatsnew/3 10 os855792
Ref: 81a855792
Ref: os<4>-Footnote-1856636
Ref: os<4>-Footnote-2856701
Ref: os<4>-Footnote-3856766
Ref: os<4>-Footnote-4856831
Node: os path<4>856896
Ref: whatsnew/3 10 os-path856998
Ref: 821856998
Ref: os path<4>-Footnote-1857353
Node: pathlib<5>857418
Ref: whatsnew/3 10 pathlib857526
Ref: 822857526
Ref: pathlib<5>-Footnote-1858287
Ref: pathlib<5>-Footnote-2858352
Ref: pathlib<5>-Footnote-3858417
Ref: pathlib<5>-Footnote-4858482
Node: platform<2>858547
Ref: whatsnew/3 10 platform858651
Ref: 828858651
Ref: platform<2>-Footnote-1858949
Ref: platform<2>-Footnote-2859022
Node: pprint859087
Ref: whatsnew/3 10 pprint859191
Ref: 82a859191
Ref: pprint-Footnote-1859556
Ref: pprint-Footnote-2859621
Node: py_compile859686
Ref: whatsnew/3 10 py-compile859785
Ref: 82c859785
Ref: py_compile-Footnote-1860012
Node: pyclbr860077
Ref: whatsnew/3 10 pyclbr860176
Ref: 82d860176
Ref: pyclbr-Footnote-1860530
Node: shelve860595
Ref: whatsnew/3 10 shelve860697
Ref: 830860697
Ref: shelve-Footnote-1860978
Node: statistics<3>861043
Ref: whatsnew/3 10 statistics861146
Ref: 832861146
Ref: statistics<3>-Footnote-1861407
Node: site<2>861472
Ref: whatsnew/3 10 site861578
Ref: 835861578
Ref: site<2>-Footnote-1861775
Node: socket<2>861840
Ref: whatsnew/3 10 socket861939
Ref: 836861939
Ref: socket<2>-Footnote-1862412
Ref: socket<2>-Footnote-2862477
Ref: socket<2>-Footnote-3862542
Node: ssl<3>862607
Ref: whatsnew/3 10 ssl862709
Ref: 839862709
Ref: ssl<3>-Footnote-1864754
Ref: ssl<3>-Footnote-2864796
Ref: ssl<3>-Footnote-3864861
Ref: ssl<3>-Footnote-4864926
Ref: ssl<3>-Footnote-5864991
Ref: ssl<3>-Footnote-6865056
Ref: ssl<3>-Footnote-7865121
Ref: ssl<3>-Footnote-8865186
Ref: ssl<3>-Footnote-9865251
Ref: ssl<3>-Footnote-10865316
Ref: ssl<3>-Footnote-11865382
Ref: ssl<3>-Footnote-12865448
Ref: ssl<3>-Footnote-13865514
Ref: ssl<3>-Footnote-14865580
Ref: ssl<3>-Footnote-15865646
Node: sqlite3<5>865712
Ref: whatsnew/3 10 sqlite3865811
Ref: 840865811
Ref: sqlite3<5>-Footnote-1866062
Node: sys<5>866127
Ref: whatsnew/3 10 sys866227
Ref: 842866227
Ref: sys<5>-Footnote-1866637
Ref: sys<5>-Footnote-2866702
Node: _thread866767
Ref: whatsnew/3 10 thread866869
Ref: 845866869
Ref: _thread-Footnote-1867133
Node: threading<3>867198
Ref: whatsnew/3 10 threading867306
Ref: 848867306
Ref: threading<3>-Footnote-1867884
Ref: threading<3>-Footnote-2867949
Node: traceback<3>868014
Ref: whatsnew/3 10 traceback868123
Ref: 84f868123
Ref: traceback<3>-Footnote-1868463
Node: types<3>868528
Ref: whatsnew/3 10 types868634
Ref: 853868634
Ref: types<3>-Footnote-1868966
Node: typing<5>869031
Ref: whatsnew/3 10 typing869136
Ref: 857869136
Ref: typing<5>-Footnote-1871626
Ref: typing<5>-Footnote-2871668
Ref: typing<5>-Footnote-3871733
Ref: typing<5>-Footnote-4871798
Ref: typing<5>-Footnote-5871863
Node: unittest<5>871928
Ref: whatsnew/3 10 unittest872037
Ref: 85a872037
Ref: unittest<5>-Footnote-1872270
Node: urllib parse872335
Ref: whatsnew/3 10 urllib-parse872441
Ref: 85d872441
Ref: urllib parse-Footnote-1873693
Ref: urllib parse-Footnote-2873758
Ref: urllib parse-Footnote-3873817
Node: xml<2>873872
Ref: whatsnew/3 10 xml873979
Ref: 85e873979
Ref: xml<2>-Footnote-1874200
Node: zipimport<3>874265
Ref: whatsnew/3 10 zipimport874351
Ref: 860874351
Ref: zipimport<3>-Footnote-1874753
Ref: zipimport<3>-Footnote-2874795
Ref: zipimport<3>-Footnote-3874860
Node: Otimizações<4>874925
Ref: whatsnew/3 10 optimizations875067
Ref: 864875067
Ref: Otimizações<4>-Footnote-1878877
Ref: Otimizações<4>-Footnote-2878942
Ref: Otimizações<4>-Footnote-3879007
Ref: Otimizações<4>-Footnote-4879072
Ref: Otimizações<4>-Footnote-5879137
Ref: Otimizações<4>-Footnote-6879202
Ref: Otimizações<4>-Footnote-7879323
Ref: Otimizações<4>-Footnote-8879388
Ref: Otimizações<4>-Footnote-9879453
Ref: Otimizações<4>-Footnote-10879518
Ref: Otimizações<4>-Footnote-11879584
Ref: Otimizações<4>-Footnote-12879650
Ref: Otimizações<4>-Footnote-13879693
Ref: Otimizações<4>-Footnote-14879759
Ref: Otimizações<4>-Footnote-15879825
Ref: Otimizações<4>-Footnote-16879891
Ref: Otimizações<4>-Footnote-17879957
Ref: Otimizações<4>-Footnote-18880023
Node: Descontinuados<5>880089
Ref: whatsnew/3 10 deprecated880221
Ref: 86b880221
Ref: whatsnew/3 10 whatsnew310-deprecated880221
Ref: 83e880221
Ref: Descontinuados<5>-Footnote-1890213
Ref: Descontinuados<5>-Footnote-2890278
Ref: Descontinuados<5>-Footnote-3890343
Ref: Descontinuados<5>-Footnote-4890408
Ref: Descontinuados<5>-Footnote-5890473
Ref: Descontinuados<5>-Footnote-6890538
Ref: Descontinuados<5>-Footnote-7890603
Ref: Descontinuados<5>-Footnote-8890668
Ref: Descontinuados<5>-Footnote-9890733
Ref: Descontinuados<5>-Footnote-10890798
Ref: Descontinuados<5>-Footnote-11890864
Ref: Descontinuados<5>-Footnote-12890930
Ref: Descontinuados<5>-Footnote-13890996
Ref: Descontinuados<5>-Footnote-14891062
Ref: Descontinuados<5>-Footnote-15891121
Ref: Descontinuados<5>-Footnote-16891187
Ref: Descontinuados<5>-Footnote-17891243
Ref: Descontinuados<5>-Footnote-18891309
Ref: Descontinuados<5>-Footnote-19891375
Ref: Descontinuados<5>-Footnote-20891441
Node: Removidos<5>891507
Ref: whatsnew/3 10 removed891648
Ref: 879891648
Ref: whatsnew/3 10 whatsnew310-removed891648
Ref: 87a891648
Ref: Removidos<5>-Footnote-1895144
Ref: Removidos<5>-Footnote-2895209
Ref: Removidos<5>-Footnote-3895274
Ref: Removidos<5>-Footnote-4895339
Ref: Removidos<5>-Footnote-5895404
Ref: Removidos<5>-Footnote-6895469
Ref: Removidos<5>-Footnote-7895534
Node: Portando para Python 3 10895599
Ref: whatsnew/3 10 porting-to-python-3-10895761
Ref: 87f895761
Node: Alterações na sintaxe Python896112
Ref: whatsnew/3 10 changes-in-the-python-syntax896242
Ref: 880896242
Ref: Alterações na sintaxe Python-Footnote-1896905
Node: Alterações na API Python<3>896970
Ref: whatsnew/3 10 changes-in-the-python-api897133
Ref: 881897133
Ref: whatsnew/3 10 changes-python-api897133
Ref: 87e897133
Ref: Alterações na API Python<3>-Footnote-1900213
Ref: Alterações na API Python<3>-Footnote-2900278
Ref: Alterações na API Python<3>-Footnote-3900343
Ref: Alterações na API Python<3>-Footnote-4900408
Ref: Alterações na API Python<3>-Footnote-5900473
Ref: Alterações na API Python<3>-Footnote-6900538
Node: Alterações na API C<6>900603
Ref: whatsnew/3 10 changes-in-the-c-api900727
Ref: 888900727
Node: Alterações de bytecode do CPython<4>903355
Ref: whatsnew/3 10 cpython-bytecode-changes903533
Ref: 88e903533
Ref: Alterações de bytecode do CPython<4>-Footnote-1903855
Node: Mudanças na construção<4>903920
Ref: whatsnew/3 10 build-changes904097
Ref: 88f904097
Ref: Mudanças na construção<4>-Footnote-1906776
Ref: Mudanças na construção<4>-Footnote-2906818
Ref: Mudanças na construção<4>-Footnote-3906883
Ref: Mudanças na construção<4>-Footnote-4906948
Ref: Mudanças na construção<4>-Footnote-5907013
Ref: Mudanças na construção<4>-Footnote-6907078
Ref: Mudanças na construção<4>-Footnote-7907143
Ref: Mudanças na construção<4>-Footnote-8907208
Ref: Mudanças na construção<4>-Footnote-9907273
Ref: Mudanças na construção<4>-Footnote-10907338
Ref: Mudanças na construção<4>-Footnote-11907404
Node: Alterações na API C<7>907470
Ref: whatsnew/3 10 c-api-changes907651
Ref: 894907651
Node: PEP 652 Mantendo a ABI estável907961
Ref: whatsnew/3 10 pep-652-maintaining-the-stable-abi908086
Ref: 895908086
Ref: PEP 652 Mantendo a ABI estável-Footnote-1908552
Ref: PEP 652 Mantendo a ABI estável-Footnote-2908594
Node: Novas funcionalidades<8>908659
Ref: whatsnew/3 10 id1908821
Ref: 896908821
Ref: Novas funcionalidades<8>-Footnote-1913830
Ref: Novas funcionalidades<8>-Footnote-2913895
Ref: Novas funcionalidades<8>-Footnote-3913960
Ref: Novas funcionalidades<8>-Footnote-4914025
Ref: Novas funcionalidades<8>-Footnote-5914090
Ref: Novas funcionalidades<8>-Footnote-6914155
Ref: Novas funcionalidades<8>-Footnote-7914220
Ref: Novas funcionalidades<8>-Footnote-8914287
Ref: Novas funcionalidades<8>-Footnote-9914352
Ref: Novas funcionalidades<8>-Footnote-10914417
Ref: Novas funcionalidades<8>-Footnote-11914483
Ref: Novas funcionalidades<8>-Footnote-12914549
Ref: Novas funcionalidades<8>-Footnote-13914615
Ref: Novas funcionalidades<8>-Footnote-14914681
Ref: Novas funcionalidades<8>-Footnote-15914747
Ref: Novas funcionalidades<8>-Footnote-16914813
Ref: Novas funcionalidades<8>-Footnote-17914879
Ref: Novas funcionalidades<8>-Footnote-18914945
Node: Portando para Python 3 10<2>915011
Ref: whatsnew/3 10 id2915159
Ref: 8ab915159
Ref: Portando para Python 3 10<2>-Footnote-1919061
Ref: Portando para Python 3 10<2>-Footnote-2919103
Ref: Portando para Python 3 10<2>-Footnote-3919168
Ref: Portando para Python 3 10<2>-Footnote-4919233
Ref: Portando para Python 3 10<2>-Footnote-5919298
Ref: Portando para Python 3 10<2>-Footnote-6919363
Ref: Portando para Python 3 10<2>-Footnote-7919428
Ref: Portando para Python 3 10<2>-Footnote-8919493
Ref: Portando para Python 3 10<2>-Footnote-9919558
Ref: Portando para Python 3 10<2>-Footnote-10919623
Ref: Portando para Python 3 10<2>-Footnote-11919689
Node: Descontinuados<6>919755
Ref: whatsnew/3 10 id3919891
Ref: 8b5919891
Ref: Descontinuados<6>-Footnote-1920207
Node: Removidos<6>920272
Ref: whatsnew/3 10 id4920371
Ref: 8b7920371
Ref: Removidos<6>-Footnote-1925535
Ref: Removidos<6>-Footnote-2925600
Ref: Removidos<6>-Footnote-3925642
Ref: Removidos<6>-Footnote-4925707
Ref: Removidos<6>-Footnote-5925772
Ref: Removidos<6>-Footnote-6925837
Ref: Removidos<6>-Footnote-7925902
Ref: Removidos<6>-Footnote-8925967
Ref: Removidos<6>-Footnote-9926032
Ref: Removidos<6>-Footnote-10926074
Ref: Removidos<6>-Footnote-11926140
Ref: Removidos<6>-Footnote-12926206
Ref: Removidos<6>-Footnote-13926272
Ref: Removidos<6>-Footnote-14926338
Ref: Removidos<6>-Footnote-15926404
Ref: Removidos<6>-Footnote-16926470
Node: Recursos de segurança notáveis no 3 10 7926536
Ref: whatsnew/3 10 notable-security-feature-in-3-10-7926731
Ref: 8c4926731
Ref: Recursos de segurança notáveis no 3 10 7-Footnote-1927568
Node: Recursos de segurança notáveis no 3 10 8927624
Ref: whatsnew/3 10 notable-security-feature-in-3-10-8927828
Ref: 8c5927828
Ref: Recursos de segurança notáveis no 3 10 8-Footnote-1928323
Node: Alterações notáveis no 3 10 12928378
Ref: whatsnew/3 10 notable-changes-in-3-10-12928531
Ref: 8c6928531
Node: tarfile<3>928644
Ref: whatsnew/3 10 tarfile928724
Ref: 8c7928724
Ref: tarfile<3>-Footnote-1929334
Node: O que há de novo no Python 3 9929376
Ref: whatsnew/3 9 doc929552
Ref: 8c8929552
Ref: whatsnew/3 9 translation-repo929552
Ref: 8c9929552
Ref: whatsnew/3 9 what-s-new-in-python-3-9929552
Ref: 8ca929552
Ref: O que há de novo no Python 3 9-Footnote-1931042
Node: Resumo – Destaques da versão<5>931084
Ref: whatsnew/3 9 summary-release-highlights931249
Ref: 8cb931249
Ref: Resumo – Destaques da versão<5>-Footnote-1933412
Ref: Resumo – Destaques da versão<5>-Footnote-2933454
Ref: Resumo – Destaques da versão<5>-Footnote-3933496
Ref: Resumo – Destaques da versão<5>-Footnote-4933538
Ref: Resumo – Destaques da versão<5>-Footnote-5933580
Ref: Resumo – Destaques da versão<5>-Footnote-6933622
Ref: Resumo – Destaques da versão<5>-Footnote-7933664
Ref: Resumo – Destaques da versão<5>-Footnote-8933706
Ref: Resumo – Destaques da versão<5>-Footnote-9933748
Ref: Resumo – Destaques da versão<5>-Footnote-10933790
Node: Você deve verificar DeprecationWarning no seu código933833
Ref: whatsnew/3 9 you-should-check-for-deprecationwarning-in-your-code934031
Ref: 8cc934031
Node: Novas funcionalidades<9>935891
Ref: whatsnew/3 9 new-features936087
Ref: 8d2936087
Node: Operadores de mesclagem & atualização de dicionário936357
Ref: whatsnew/3 9 dictionary-merge-update-operators936538
Ref: 8d3936538
Ref: Operadores de mesclagem & atualização de dicionário-Footnote-1937375
Ref: Operadores de mesclagem & atualização de dicionário-Footnote-2937417
Node: Novos métodos de strings para remover prefixos e sufixos937482
Ref: whatsnew/3 9 new-string-methods-to-remove-prefixes-and-suffixes937718
Ref: 8d4937718
Ref: Novos métodos de strings para remover prefixos e sufixos-Footnote-1938273
Ref: Novos métodos de strings para remover prefixos e sufixos-Footnote-2938315
Node: Type hinting genéricos nas coleções padrão938380
Ref: whatsnew/3 9 type-hinting-generics-in-standard-collections938588
Ref: 8d7938588
Ref: Type hinting genéricos nas coleções padrão-Footnote-1939339
Ref: Type hinting genéricos nas coleções padrão-Footnote-2939381
Node: Novo analisador sintático939446
Ref: whatsnew/3 9 new-parser939588
Ref: 8d8939588
Ref: Novo analisador sintático-Footnote-1940654
Ref: Novo analisador sintático-Footnote-2940741
Ref: Novo analisador sintático-Footnote-3940804
Ref: Novo analisador sintático-Footnote-4940846
Node: Outras mudanças na linguagem<5>940911
Ref: whatsnew/3 9 other-language-changes941070
Ref: 8d9941070
Ref: Outras mudanças na linguagem<5>-Footnote-1944447
Ref: Outras mudanças na linguagem<5>-Footnote-2944512
Ref: Outras mudanças na linguagem<5>-Footnote-3944577
Ref: Outras mudanças na linguagem<5>-Footnote-4944642
Ref: Outras mudanças na linguagem<5>-Footnote-5944707
Ref: Outras mudanças na linguagem<5>-Footnote-6944749
Ref: Outras mudanças na linguagem<5>-Footnote-7944814
Ref: Outras mudanças na linguagem<5>-Footnote-8944879
Ref: Outras mudanças na linguagem<5>-Footnote-9944944
Ref: Outras mudanças na linguagem<5>-Footnote-10945009
Ref: Outras mudanças na linguagem<5>-Footnote-11945075
Node: Novos módulos<5>945141
Ref: whatsnew/3 9 new-modules945298
Ref: 8e3945298
Node: zoneinfo945376
Ref: whatsnew/3 9 zoneinfo945455
Ref: 8e4945455
Ref: zoneinfo-Footnote-1946644
Ref: zoneinfo-Footnote-2946685
Node: graphlib946727
Ref: whatsnew/3 9 graphlib946806
Ref: 8e6946806
Ref: graphlib-Footnote-1947148
Node: Módulos melhorados<5>947213
Ref: whatsnew/3 9 improved-modules947354
Ref: 8e8947354
Node: ast<2>948170
Ref: whatsnew/3 9 ast948254
Ref: 8e9948254
Ref: ast<2>-Footnote-1948958
Ref: ast<2>-Footnote-2949023
Ref: ast<2>-Footnote-3949088
Node: asyncio<5>949153
Ref: whatsnew/3 9 asyncio949259
Ref: 8ec949259
Ref: asyncio<5>-Footnote-1951158
Ref: asyncio<5>-Footnote-2951223
Ref: asyncio<5>-Footnote-3951288
Ref: asyncio<5>-Footnote-4951353
Ref: asyncio<5>-Footnote-5951418
Ref: asyncio<5>-Footnote-6951483
Node: compileall<2>951548
Ref: whatsnew/3 9 compileall951669
Ref: 8f1951669
Ref: compileall<2>-Footnote-1952331
Ref: compileall<2>-Footnote-2952396
Node: concurrent futures<2>952461
Ref: whatsnew/3 9 concurrent-futures952581
Ref: 8f2952581
Ref: concurrent futures<2>-Footnote-1953558
Ref: concurrent futures<2>-Footnote-2953623
Ref: concurrent futures<2>-Footnote-3953688
Node: curses<2>953753
Ref: whatsnew/3 9 curses953871
Ref: 8f5953871
Ref: curses<2>-Footnote-1954154
Node: datetime<2>954219
Ref: whatsnew/3 9 datetime954328
Ref: 8fa954328
Ref: datetime<2>-Footnote-1954652
Node: distutils<3>954717
Ref: whatsnew/3 9 distutils954825
Ref: 8fd954825
Ref: distutils<3>-Footnote-1955086
Node: fcntl<2>955151
Ref: whatsnew/3 9 fcntl955257
Ref: 8fe955257
Ref: fcntl<2>-Footnote-1955475
Node: ftplib<2>955540
Ref: whatsnew/3 9 ftplib955639
Ref: 8ff955639
Ref: ftplib<2>-Footnote-1955948
Node: gc<2>956013
Ref: whatsnew/3 9 gc956114
Ref: 902956114
Ref: gc<2>-Footnote-1956658
Ref: gc<2>-Footnote-2956723
Node: hashlib<4>956788
Ref: whatsnew/3 9 hashlib956884
Ref: 904956884
Ref: hashlib<4>-Footnote-1957436
Ref: hashlib<4>-Footnote-2957501
Node: http957566
Ref: whatsnew/3 9 http957674
Ref: 905957674
Ref: http-Footnote-1957957
Ref: http-Footnote-2958022
Node: IDLE e idlelib<3>958087
Ref: whatsnew/3 9 idle-and-idlelib958192
Ref: 907958192
Ref: IDLE e idlelib<3>-Footnote-1959565
Ref: IDLE e idlelib<3>-Footnote-2959629
Ref: IDLE e idlelib<3>-Footnote-3959694
Ref: IDLE e idlelib<3>-Footnote-4959759
Ref: IDLE e idlelib<3>-Footnote-5959824
Ref: IDLE e idlelib<3>-Footnote-6959889
Ref: IDLE e idlelib<3>-Footnote-7959954
Node: imaplib960019
Ref: whatsnew/3 9 imaplib960132
Ref: 908960132
Ref: imaplib-Footnote-1961024
Ref: imaplib-Footnote-2961089
Node: importlib<3>961154
Ref: whatsnew/3 9 importlib961260
Ref: 90f961260
Ref: importlib<3>-Footnote-1962135
Ref: importlib<3>-Footnote-2962200
Ref: importlib<3>-Footnote-3962265
Node: inspect<4>962330
Ref: whatsnew/3 9 inspect962441
Ref: 911962441
Ref: inspect<4>-Footnote-1962676
Ref: inspect<4>-Footnote-2962741
Node: ipaddress<2>962806
Ref: whatsnew/3 9 ipaddress962912
Ref: 913962912
Ref: ipaddress<2>-Footnote-1963539
Ref: ipaddress<2>-Footnote-2963604
Node: math<4>963669
Ref: whatsnew/3 9 math963783
Ref: 915963783
Ref: math<4>-Footnote-1964567
Ref: math<4>-Footnote-2964632
Ref: math<4>-Footnote-3964697
Ref: math<4>-Footnote-4964762
Node: multiprocessing<2>964827
Ref: whatsnew/3 9 multiprocessing964936
Ref: 919964936
Ref: multiprocessing<2>-Footnote-1965201
Node: nntplib965266
Ref: whatsnew/3 9 nntplib965373
Ref: 91c965373
Ref: nntplib-Footnote-1965681
Node: os<5>965746
Ref: whatsnew/3 9 os965845
Ref: 91d965845
Ref: os<5>-Footnote-1966683
Ref: os<5>-Footnote-2966748
Ref: os<5>-Footnote-3966813
Ref: os<5>-Footnote-4966878
Ref: os<5>-Footnote-5966943
Ref: os<5>-Footnote-6967008
Node: pathlib<6>967073
Ref: whatsnew/3 9 pathlib967171
Ref: 924967171
Ref: pathlib<6>-Footnote-1967401
Node: pdb<3>967466
Ref: whatsnew/3 9 pdb967565
Ref: 927967565
Ref: pdb<3>-Footnote-1967761
Node: poplib967826
Ref: whatsnew/3 9 poplib967924
Ref: 929967924
Ref: poplib-Footnote-1968234
Node: pprint<2>968299
Ref: whatsnew/3 9 pprint968396
Ref: 92c968396
Ref: pprint<2>-Footnote-1968594
Node: pydoc968659
Ref: whatsnew/3 9 pydoc968759
Ref: 92d968759
Ref: pydoc-Footnote-1969052
Node: random<3>969117
Ref: whatsnew/3 9 random969214
Ref: 92f969214
Ref: random<3>-Footnote-1969427
Node: signal969492
Ref: whatsnew/3 9 signal969591
Ref: 931969591
Ref: signal-Footnote-1969829
Node: smtplib969894
Ref: whatsnew/3 9 smtplib969993
Ref: 933969993
Ref: smtplib-Footnote-1970438
Ref: smtplib-Footnote-2970503
Node: socket<3>970568
Ref: whatsnew/3 9 socket970668
Ref: 937970668
Ref: socket<3>-Footnote-1971256
Ref: socket<3>-Footnote-2971321
Ref: socket<3>-Footnote-3971386
Node: time<3>971451
Ref: whatsnew/3 9 time971550
Ref: 93c971550
Ref: time<3>-Footnote-1971894
Node: sys<6>971959
Ref: whatsnew/3 9 sys972060
Ref: 93e972060
Ref: sys<6>-Footnote-1972785
Ref: sys<6>-Footnote-2972852
Node: tracemalloc972917
Ref: whatsnew/3 9 tracemalloc973020
Ref: 941973020
Ref: tracemalloc-Footnote-1973338
Node: typing<6>973403
Ref: whatsnew/3 9 typing973514
Ref: 943973514
Ref: typing<6>-Footnote-1973901
Node: unicodedata<4>973943
Ref: whatsnew/3 9 unicodedata974050
Ref: 945974050
Ref: unicodedata<4>-Footnote-1974209
Node: venv<3>974274
Ref: whatsnew/3 9 venv974378
Ref: 946974378
Ref: venv<3>-Footnote-1974853
Node: xml<3>974918
Ref: whatsnew/3 9 xml974999
Ref: 947974999
Ref: xml<3>-Footnote-1975398
Node: Otimizações<5>975463
Ref: whatsnew/3 9 optimizations975604
Ref: 948975604
Ref: Otimizações<5>-Footnote-1981726
Ref: Otimizações<5>-Footnote-2981791
Ref: Otimizações<5>-Footnote-3981856
Ref: Otimizações<5>-Footnote-4981921
Ref: Otimizações<5>-Footnote-5981986
Ref: Otimizações<5>-Footnote-6982028
Ref: Otimizações<5>-Footnote-7982093
Ref: Otimizações<5>-Footnote-8982157
Ref: Otimizações<5>-Footnote-9982222
Ref: Otimizações<5>-Footnote-10982287
Ref: Otimizações<5>-Footnote-11982353
Ref: Otimizações<5>-Footnote-12982482
Node: Descontinuados<7>982531
Ref: whatsnew/3 9 deprecated982662
Ref: 94d982662
Ref: Descontinuados<7>-Footnote-1988055
Ref: Descontinuados<7>-Footnote-2988120
Ref: Descontinuados<7>-Footnote-3988185
Ref: Descontinuados<7>-Footnote-4988250
Ref: Descontinuados<7>-Footnote-5988315
Ref: Descontinuados<7>-Footnote-6988380
Ref: Descontinuados<7>-Footnote-7988445
Ref: Descontinuados<7>-Footnote-8988510
Ref: Descontinuados<7>-Footnote-9988575
Ref: Descontinuados<7>-Footnote-10988640
Ref: Descontinuados<7>-Footnote-11988706
Ref: Descontinuados<7>-Footnote-12988772
Ref: Descontinuados<7>-Footnote-13988838
Ref: Descontinuados<7>-Footnote-14988904
Ref: Descontinuados<7>-Footnote-15988970
Ref: Descontinuados<7>-Footnote-16989013
Ref: Descontinuados<7>-Footnote-17989053
Ref: Descontinuados<7>-Footnote-18989092
Ref: Descontinuados<7>-Footnote-19989158
Node: Removidos<7>989224
Ref: whatsnew/3 9 removed989363
Ref: 94f989363
Ref: whatsnew/3 9 removed-in-python-39989363
Ref: 8d1989363
Ref: Removidos<7>-Footnote-1995654
Ref: Removidos<7>-Footnote-2995719
Ref: Removidos<7>-Footnote-3995784
Ref: Removidos<7>-Footnote-4995849
Ref: Removidos<7>-Footnote-5995914
Ref: Removidos<7>-Footnote-6995979
Ref: Removidos<7>-Footnote-7996044
Ref: Removidos<7>-Footnote-8996109
Ref: Removidos<7>-Footnote-9996174
Ref: Removidos<7>-Footnote-10996239
Ref: Removidos<7>-Footnote-11996305
Ref: Removidos<7>-Footnote-12996348
Ref: Removidos<7>-Footnote-13996414
Ref: Removidos<7>-Footnote-14996480
Ref: Removidos<7>-Footnote-15996546
Ref: Removidos<7>-Footnote-16996612
Ref: Removidos<7>-Footnote-17996678
Ref: Removidos<7>-Footnote-18996744
Ref: Removidos<7>-Footnote-19996810
Ref: Removidos<7>-Footnote-20996876
Ref: Removidos<7>-Footnote-21996942
Ref: Removidos<7>-Footnote-22997008
Node: Portando para Python 3 9997074
Ref: whatsnew/3 9 porting-to-python-3-9997224
Ref: 95f997224
Node: Alterações na API Python<4>997617
Ref: whatsnew/3 9 changes-in-the-python-api997740
Ref: 960997740
Ref: Alterações na API Python<4>-Footnote-11002219
Ref: Alterações na API Python<4>-Footnote-21002284
Ref: Alterações na API Python<4>-Footnote-31002349
Ref: Alterações na API Python<4>-Footnote-41002414
Ref: Alterações na API Python<4>-Footnote-51002473
Ref: Alterações na API Python<4>-Footnote-61002538
Ref: Alterações na API Python<4>-Footnote-71002603
Ref: Alterações na API Python<4>-Footnote-81002668
Ref: Alterações na API Python<4>-Footnote-91002733
Ref: Alterações na API Python<4>-Footnote-101002798
Ref: Alterações na API Python<4>-Footnote-111002864
Node: Alterações na API C<8>1002930
Ref: whatsnew/3 9 changes-in-the-c-api1003100
Ref: 96b1003100
Ref: Alterações na API C<8>-Footnote-11005326
Ref: Alterações na API C<8>-Footnote-21005391
Ref: Alterações na API C<8>-Footnote-31005456
Node: Alterações de bytecode do CPython<5>1005521
Ref: whatsnew/3 9 cpython-bytecode-changes1005653
Ref: 96d1005653
Ref: Alterações de bytecode do CPython<5>-Footnote-11006539
Ref: Alterações de bytecode do CPython<5>-Footnote-21006604
Node: Mudanças na construção<5>1006669
Ref: whatsnew/3 9 build-changes1006831
Ref: 9711006831
Ref: Mudanças na construção<5>-Footnote-11009625
Ref: Mudanças na construção<5>-Footnote-21009692
Ref: Mudanças na construção<5>-Footnote-31009757
Ref: Mudanças na construção<5>-Footnote-41009822
Ref: Mudanças na construção<5>-Footnote-51009887
Ref: Mudanças na construção<5>-Footnote-61009952
Ref: Mudanças na construção<5>-Footnote-71010017
Ref: Mudanças na construção<5>-Footnote-81010082
Node: Alterações na API C<9>1010147
Ref: whatsnew/3 9 c-api-changes1010323
Ref: 9731010323
Node: Novas funcionalidades<10>1010526
Ref: whatsnew/3 9 id11010648
Ref: 9741010648
Ref: Novas funcionalidades<10>-Footnote-11013895
Ref: Novas funcionalidades<10>-Footnote-21013937
Ref: Novas funcionalidades<10>-Footnote-31014002
Ref: Novas funcionalidades<10>-Footnote-41014067
Ref: Novas funcionalidades<10>-Footnote-51014132
Ref: Novas funcionalidades<10>-Footnote-61014197
Ref: Novas funcionalidades<10>-Footnote-71014262
Ref: Novas funcionalidades<10>-Footnote-81014327
Ref: Novas funcionalidades<10>-Footnote-91014392
Ref: Novas funcionalidades<10>-Footnote-101014457
Ref: Novas funcionalidades<10>-Footnote-111014523
Ref: Novas funcionalidades<10>-Footnote-121014589
Node: Portando para Python 3 9<2>1014655
Ref: whatsnew/3 9 id21014798
Ref: 9801014798
Ref: Portando para Python 3 9<2>-Footnote-11018834
Ref: Portando para Python 3 9<2>-Footnote-21018876
Ref: Portando para Python 3 9<2>-Footnote-31018941
Ref: Portando para Python 3 9<2>-Footnote-41019006
Ref: Portando para Python 3 9<2>-Footnote-51019070
Ref: Portando para Python 3 9<2>-Footnote-61019135
Ref: Portando para Python 3 9<2>-Footnote-71019200
Ref: Portando para Python 3 9<2>-Footnote-81019242
Ref: Portando para Python 3 9<2>-Footnote-91019307
Ref: Portando para Python 3 9<2>-Footnote-101019372
Ref: Portando para Python 3 9<2>-Footnote-111019438
Node: Removidos<8>1019504
Ref: whatsnew/3 9 id31019613
Ref: 9931019613
Ref: Removidos<8>-Footnote-11023678
Ref: Removidos<8>-Footnote-21023743
Ref: Removidos<8>-Footnote-31023808
Ref: Removidos<8>-Footnote-41023873
Ref: Removidos<8>-Footnote-51023938
Ref: Removidos<8>-Footnote-61024003
Ref: Removidos<8>-Footnote-71024068
Ref: Removidos<8>-Footnote-81024133
Ref: Removidos<8>-Footnote-91024198
Ref: Removidos<8>-Footnote-101024263
Ref: Removidos<8>-Footnote-111024329
Ref: Removidos<8>-Footnote-121024372
Ref: Removidos<8>-Footnote-131024438
Node: Alterações notáveis no Python 3 9 11024504
Ref: whatsnew/3 9 notable-changes-in-python-3-9-11024690
Ref: 9961024690
Node: typing<7>1024915
Ref: whatsnew/3 9 id41025056
Ref: 9971025056
Ref: typing<7>-Footnote-11026396
Ref: typing<7>-Footnote-21026438
Node: Suporte a macOS 11 0 Big Sur e Apple Silicon Mac1026503
Ref: whatsnew/3 9 macos-11-0-big-sur-and-apple-silicon-mac-support1026644
Ref: 9981026644
Ref: Suporte a macOS 11 0 Big Sur e Apple Silicon Mac-Footnote-11027605
Node: Alterações notáveis no Python 3 9 21027670
Ref: whatsnew/3 9 notable-changes-in-python-3-9-21027870
Ref: 9991027870
Node: collections abc<2>1028042
Ref: whatsnew/3 9 collections-abc1028159
Ref: 99a1028159
Ref: collections abc<2>-Footnote-11029168
Node: urllib parse<2>1029233
Ref: whatsnew/3 9 urllib-parse1029350
Ref: 99b1029350
Ref: urllib parse<2>-Footnote-11030116
Node: Alterações notáveis no Python 3 9 31030181
Ref: whatsnew/3 9 notable-changes-in-python-3-9-31030381
Ref: 99c1030381
Ref: Alterações notáveis no Python 3 9 3-Footnote-11030925
Node: Alterações notáveis no Python 3 9 51030980
Ref: whatsnew/3 9 notable-changes-in-python-3-9-51031184
Ref: 99d1031184
Node: urllib parse<3>1031317
Ref: whatsnew/3 9 id51031407
Ref: 99e1031407
Ref: urllib parse<3>-Footnote-11031986
Ref: urllib parse<3>-Footnote-21032045
Node: Recursos de segurança notáveis no 3 9 141032100
Ref: whatsnew/3 9 notable-security-feature-in-3-9-141032298
Ref: 99f1032298
Ref: Recursos de segurança notáveis no 3 9 14-Footnote-11033135
Node: Alterações notáveis no 3 9 171033191
Ref: whatsnew/3 9 notable-changes-in-3-9-171033342
Ref: 9a01033342
Node: tarfile<4>1033453
Ref: whatsnew/3 9 tarfile1033532
Ref: 9a11033532
Ref: tarfile<4>-Footnote-11034142
Node: O que há de novo no Python 3 81034184
Ref: whatsnew/3 8 doc1034359
Ref: 9a21034359
Ref: whatsnew/3 8 translation-repo1034359
Ref: 9a31034359
Ref: whatsnew/3 8 what-s-new-in-python-3-81034359
Ref: 9a41034359
Node: Resumo – Destaques da versão<6>1035965
Ref: whatsnew/3 8 summary-release-highlights1036101
Ref: 9a51036101
Node: Novas funcionalidades<11>1036175
Ref: whatsnew/3 8 new-features1036352
Ref: 9a61036352
Node: Expressões de atribuição1037156
Ref: whatsnew/3 8 assignment-expressions1037285
Ref: 9a71037285
Ref: Expressões de atribuição-Footnote-11038992
Ref: Expressões de atribuição-Footnote-21039089
Ref: Expressões de atribuição-Footnote-31039131
Node: Parâmetros somente-posicionais1039196
Ref: whatsnew/3 8 positional-only-parameters1039408
Ref: 9a81039408
Ref: Parâmetros somente-posicionais-Footnote-11042277
Ref: Parâmetros somente-posicionais-Footnote-21042339
Ref: Parâmetros somente-posicionais-Footnote-31042381
Node: Cache do sistema de arquivos paralelo para arquivos de bytecode compilados1042446
Ref: whatsnew/3 8 parallel-filesystem-cache-for-compiled-bytecode-files1042707
Ref: 9aa1042707
Ref: Cache do sistema de arquivos paralelo para arquivos de bytecode compilados-Footnote-11043408
Node: A compilação de depuração usa a mesma ABI da compilação de lançamento1043473
Ref: whatsnew/3 8 debug-build-uses-the-same-abi-as-release-build1043780
Ref: 9ad1043780
Ref: A compilação de depuração usa a mesma ABI da compilação de lançamento-Footnote-11046464
Ref: A compilação de depuração usa a mesma ABI da compilação de lançamento-Footnote-21046529
Ref: A compilação de depuração usa a mesma ABI da compilação de lançamento-Footnote-31046594
Ref: A compilação de depuração usa a mesma ABI da compilação de lançamento-Footnote-41046659
Node: O suporte a f-strings = para expressões de auto-documentação e depuração1046724
Ref: whatsnew/3 8 bpo-36817-whatsnew1047015
Ref: 9af1047015
Ref: whatsnew/3 8 f-strings-support-for-self-documenting-expressions-and-debugging1047015
Ref: 9b01047015
Ref: O suporte a f-strings = para expressões de auto-documentação e depuração-Footnote-11048152
Node: PEP 578 Ganchos de auditoria em tempo de execução Python1048217
Ref: whatsnew/3 8 pep-578-python-runtime-audit-hooks1048483
Ref: 9b21048483
Ref: PEP 578 Ganchos de auditoria em tempo de execução Python-Footnote-11049065
Node: PEP 587 Configuração de Inicialização do Python1049107
Ref: whatsnew/3 8 pep-587-python-initialization-configuration1049359
Ref: 9b31049359
Ref: PEP 587 Configuração de Inicialização do Python-Footnote-11051442
Ref: PEP 587 Configuração de Inicialização do Python-Footnote-21051484
Ref: PEP 587 Configuração de Inicialização do Python-Footnote-31051526
Node: PEP 590 Vectorcall um protocolo de chamada rápida para CPython1051591
Ref: whatsnew/3 8 pep-590-vectorcall-a-fast-calling-protocol-for-cpython1051841
Ref: 9ce1051841
Ref: PEP 590 Vectorcall um protocolo de chamada rápida para CPython-Footnote-11052505
Ref: PEP 590 Vectorcall um protocolo de chamada rápida para CPython-Footnote-21052547
Node: Protocolo de Pickle 5 com buffers de dados fora da banda1052612
Ref: whatsnew/3 8 pickle-protocol-5-with-out-of-band-data-buffers1052802
Ref: 9cf1052802
Ref: Protocolo de Pickle 5 com buffers de dados fora da banda-Footnote-11053662
Ref: Protocolo de Pickle 5 com buffers de dados fora da banda-Footnote-21053704
Ref: Protocolo de Pickle 5 com buffers de dados fora da banda-Footnote-31053746
Node: Outras mudanças na linguagem<6>1053811
Ref: whatsnew/3 8 other-language-changes1053971
Ref: 9d01053971
Ref: Outras mudanças na linguagem<6>-Footnote-11061696
Ref: Outras mudanças na linguagem<6>-Footnote-21061761
Ref: Outras mudanças na linguagem<6>-Footnote-31061826
Ref: Outras mudanças na linguagem<6>-Footnote-41061891
Ref: Outras mudanças na linguagem<6>-Footnote-51061956
Ref: Outras mudanças na linguagem<6>-Footnote-61062021
Ref: Outras mudanças na linguagem<6>-Footnote-71062086
Ref: Outras mudanças na linguagem<6>-Footnote-81062151
Ref: Outras mudanças na linguagem<6>-Footnote-91062216
Ref: Outras mudanças na linguagem<6>-Footnote-101062281
Ref: Outras mudanças na linguagem<6>-Footnote-111062347
Ref: Outras mudanças na linguagem<6>-Footnote-121062415
Ref: Outras mudanças na linguagem<6>-Footnote-131062481
Ref: Outras mudanças na linguagem<6>-Footnote-141062551
Ref: Outras mudanças na linguagem<6>-Footnote-151062611
Ref: Outras mudanças na linguagem<6>-Footnote-161062677
Ref: Outras mudanças na linguagem<6>-Footnote-171062743
Node: Novos módulos<6>1062809
Ref: whatsnew/3 8 new-modules1062966
Ref: 9dd1062966
Ref: Novos módulos<6>-Footnote-11064067
Node: Módulos melhorados<6>1064132
Ref: whatsnew/3 8 improved-modules1064273
Ref: 9de1064273
Node: ast<3>1065289
Ref: whatsnew/3 8 ast1065373
Ref: 9df1065373
Ref: ast<3>-Footnote-11066497
Ref: ast<3>-Footnote-21066562
Ref: ast<3>-Footnote-31066604
Ref: ast<3>-Footnote-41066646
Ref: ast<3>-Footnote-51066688
Node: asyncio<6>1066753
Ref: whatsnew/3 8 asyncio1066857
Ref: 9e11066857
Ref: asyncio<6>-Footnote-11070151
Ref: asyncio<6>-Footnote-21070216
Ref: asyncio<6>-Footnote-31070281
Ref: asyncio<6>-Footnote-41070346
Ref: asyncio<6>-Footnote-51070411
Ref: asyncio<6>-Footnote-61070476
Ref: asyncio<6>-Footnote-71070541
Ref: asyncio<6>-Footnote-81070606
Ref: asyncio<6>-Footnote-91070671
Ref: asyncio<6>-Footnote-101070724
Node: builtins<2>1070790
Ref: whatsnew/3 8 builtins1070899
Ref: 9e71070899
Ref: builtins<2>-Footnote-11071450
Node: collections1071515
Ref: whatsnew/3 8 collections1071622
Ref: 9e81071622
Ref: collections-Footnote-11072150
Node: cProfile1072215
Ref: whatsnew/3 8 cprofile1072317
Ref: 9ea1072317
Ref: cProfile-Footnote-11072707
Node: csv<2>1072772
Ref: whatsnew/3 8 csv1072872
Ref: 9ec1072872
Ref: csv<2>-Footnote-11073210
Node: curses<3>1073275
Ref: whatsnew/3 8 curses1073376
Ref: 9ee1073376
Ref: curses<3>-Footnote-11073640
Node: ctypes<2>1073705
Ref: whatsnew/3 8 ctypes1073811
Ref: 9f01073811
Ref: ctypes<2>-Footnote-11074381
Node: datetime<3>1074446
Ref: whatsnew/3 8 datetime1074555
Ref: 9f31074555
Ref: datetime<3>-Footnote-11075010
Node: functools<2>1075075
Ref: whatsnew/3 8 functools1075180
Ref: 9f61075180
Ref: functools<2>-Footnote-11076787
Ref: functools<2>-Footnote-21076852
Ref: functools<2>-Footnote-31076917
Node: gc<3>1076982
Ref: whatsnew/3 8 gc1077083
Ref: 9fb1077083
Ref: gc<3>-Footnote-11077325
Node: gettext1077390
Ref: whatsnew/3 8 gettext1077486
Ref: 9fc1077486
Ref: gettext-Footnote-11077692
Node: gzip<3>1077756
Ref: whatsnew/3 8 gzip1077864
Ref: 9fe1077864
Ref: gzip<3>-Footnote-11078305
Ref: gzip<3>-Footnote-21078370
Node: IDLE e idlelib<4>1078434
Ref: whatsnew/3 8 idle-and-idlelib1078545
Ref: a001078545
Ref: IDLE e idlelib<4>-Footnote-11080872
Ref: IDLE e idlelib<4>-Footnote-21080939
Ref: IDLE e idlelib<4>-Footnote-31081003
Ref: IDLE e idlelib<4>-Footnote-41081068
Ref: IDLE e idlelib<4>-Footnote-51081133
Ref: IDLE e idlelib<4>-Footnote-61081198
Ref: IDLE e idlelib<4>-Footnote-71081262
Ref: IDLE e idlelib<4>-Footnote-81081327
Node: inspect<5>1081392
Ref: whatsnew/3 8 inspect1081501
Ref: a011081501
Ref: inspect<5>-Footnote-11082276
Node: io<3>1082341
Ref: whatsnew/3 8 io1082445
Ref: a031082445
Ref: io<3>-Footnote-11082842
Node: itertools<4>1082907
Ref: whatsnew/3 8 itertools1083010
Ref: a041083010
Ref: itertools<4>-Footnote-11083404
Node: json tool1083469
Ref: whatsnew/3 8 json-tool1083577
Ref: a061083577
Ref: json tool-Footnote-11083808
Node: logging<2>1083873
Ref: whatsnew/3 8 logging1083976
Ref: a071083976
Ref: logging<2>-Footnote-11084756
Node: math<5>1084821
Ref: whatsnew/3 8 math1084922
Ref: a091084922
Ref: math<5>-Footnote-11086741
Ref: math<5>-Footnote-21086806
Ref: math<5>-Footnote-31086871
Ref: math<5>-Footnote-41086936
Ref: math<5>-Footnote-51087001
Ref: math<5>-Footnote-61087066
Ref: math<5>-Footnote-71087131
Ref: math<5>-Footnote-81087196
Node: mmap<2>1087261
Ref: whatsnew/3 8 mmap1087370
Ref: a0f1087370
Ref: mmap<2>-Footnote-11087615
Node: multiprocessing<3>1087680
Ref: whatsnew/3 8 multiprocessing1087787
Ref: a111087787
Ref: multiprocessing<3>-Footnote-11088106
Ref: multiprocessing<3>-Footnote-21088171
Node: os<6>1088236
Ref: whatsnew/3 8 os1088346
Ref: a121088346
Ref: os<6>-Footnote-11090062
Ref: os<6>-Footnote-21090127
Ref: os<6>-Footnote-31090192
Node: os path<5>1090257
Ref: whatsnew/3 8 os-path1090359
Ref: a171090359
Ref: os path<5>-Footnote-11091442
Ref: os path<5>-Footnote-21091507
Ref: os path<5>-Footnote-31091572
Node: pathlib<7>1091637
Ref: whatsnew/3 8 pathlib1091740
Ref: a1f1091740
Ref: pathlib<7>-Footnote-11092741
Ref: pathlib<7>-Footnote-21092806
Node: pickle1092871
Ref: whatsnew/3 8 pickle1092972
Ref: a271092972
Ref: pickle-Footnote-11093349
Node: plistlib1093414
Ref: whatsnew/3 8 plistlib1093514
Ref: a2a1093514
Ref: plistlib-Footnote-11093773
Node: pprint<3>1093838
Ref: whatsnew/3 8 pprint1093945
Ref: a2c1093945
Ref: pprint<3>-Footnote-11095084
Node: py_compile<2>1095149
Ref: whatsnew/3 8 py-compile1095253
Ref: a2e1095253
Ref: py_compile<2>-Footnote-11095462
Node: shlex1095527
Ref: whatsnew/3 8 shlex1095631
Ref: a301095631
Ref: shlex-Footnote-11095837
Node: shutil<4>1095902
Ref: whatsnew/3 8 shutil1096002
Ref: a321096002
Ref: shutil<4>-Footnote-11096688
Ref: shutil<4>-Footnote-21096753
Ref: shutil<4>-Footnote-31096818
Node: socket<4>1096883
Ref: whatsnew/3 8 socket1096984
Ref: a341096984
Ref: socket<4>-Footnote-11097597
Ref: socket<4>-Footnote-21097662
Node: ssl<4>1097727
Ref: whatsnew/3 8 ssl1097832
Ref: a3a1097832
Ref: ssl<4>-Footnote-11098108
Node: statistics<4>1098173
Ref: whatsnew/3 8 statistics1098275
Ref: a3d1098275
Ref: statistics<4>-Footnote-11100067
Ref: statistics<4>-Footnote-21100132
Ref: statistics<4>-Footnote-31100197
Ref: statistics<4>-Footnote-41100262
Ref: statistics<4>-Footnote-51100327
Node: sys<7>1100392
Ref: whatsnew/3 8 sys1100498
Ref: a421100498
Ref: sys<7>-Footnote-11100979
Node: tarfile<5>1101044
Ref: whatsnew/3 8 tarfile1101149
Ref: a441101149
Ref: tarfile<5>-Footnote-11101595
Node: threading<4>1101660
Ref: whatsnew/3 8 threading1101770
Ref: a451101770
Ref: threading<4>-Footnote-11102561
Ref: threading<4>-Footnote-21102628
Node: tokenize<2>1102693
Ref: whatsnew/3 8 tokenize1102803
Ref: a491102803
Ref: tokenize<2>-Footnote-11103161
Node: tkinter<4>1103226
Ref: whatsnew/3 8 tkinter1103331
Ref: a4a1103331
Ref: tkinter<4>-Footnote-11103898
Ref: tkinter<4>-Footnote-21103963
Ref: tkinter<4>-Footnote-31104028
Node: time<4>1104093
Ref: whatsnew/3 8 time1104196
Ref: a4b1104196
Ref: time<4>-Footnote-11104386
Node: typing<8>1104451
Ref: whatsnew/3 8 typing1104558
Ref: a4d1104558
Ref: typing<8>-Footnote-11106135
Ref: typing<8>-Footnote-21106177
Ref: typing<8>-Footnote-31106219
Ref: typing<8>-Footnote-41106261
Node: unicodedata<5>1106303
Ref: whatsnew/3 8 unicodedata1106414
Ref: a501106414
Ref: unicodedata<5>-Footnote-11106860
Ref: unicodedata<5>-Footnote-21106922
Ref: unicodedata<5>-Footnote-31106987
Node: unittest<6>1107052
Ref: whatsnew/3 8 unittest1107161
Ref: a521107161
Ref: unittest<6>-Footnote-11108525
Ref: unittest<6>-Footnote-21108590
Ref: unittest<6>-Footnote-31108655
Ref: unittest<6>-Footnote-41108720
Node: venv<4>1108785
Ref: whatsnew/3 8 venv1108887
Ref: a591108887
Ref: venv<4>-Footnote-11109141
Node: weakref1109206
Ref: whatsnew/3 8 weakref1109303
Ref: a5a1109303
Ref: weakref-Footnote-11109615
Node: xml<4>1109680
Ref: whatsnew/3 8 xml1109776
Ref: a5c1109776
Ref: xml<4>-Footnote-11111017
Ref: xml<4>-Footnote-21111082
Ref: xml<4>-Footnote-31111147
Ref: xml<4>-Footnote-41111212
Ref: xml<4>-Footnote-51111277
Node: xmlrpc1111342
Ref: whatsnew/3 8 xmlrpc1111422
Ref: a601111422
Ref: xmlrpc-Footnote-11111862
Node: Otimizações<6>1111927
Ref: whatsnew/3 8 optimizations1112084
Ref: a621112084
Ref: Otimizações<6>-Footnote-11116938
Ref: Otimizações<6>-Footnote-21117003
Ref: Otimizações<6>-Footnote-31117068
Ref: Otimizações<6>-Footnote-41117133
Ref: Otimizações<6>-Footnote-51117198
Ref: Otimizações<6>-Footnote-61117263
Ref: Otimizações<6>-Footnote-71117328
Ref: Otimizações<6>-Footnote-81117393
Ref: Otimizações<6>-Footnote-91117458
Ref: Otimizações<6>-Footnote-101117523
Ref: Otimizações<6>-Footnote-111117589
Ref: Otimizações<6>-Footnote-121117655
Node: Mudanças a construções e API C1117721
Ref: whatsnew/3 8 build-and-c-api-changes1117873
Ref: a6c1117873
Ref: Mudanças a construções e API C-Footnote-11123882
Ref: Mudanças a construções e API C-Footnote-21123947
Ref: Mudanças a construções e API C-Footnote-31124012
Ref: Mudanças a construções e API C-Footnote-41124077
Ref: Mudanças a construções e API C-Footnote-51124142
Ref: Mudanças a construções e API C-Footnote-61124207
Ref: Mudanças a construções e API C-Footnote-71124272
Ref: Mudanças a construções e API C-Footnote-81124337
Ref: Mudanças a construções e API C-Footnote-91124402
Ref: Mudanças a construções e API C-Footnote-101124467
Ref: Mudanças a construções e API C-Footnote-111124533
Ref: Mudanças a construções e API C-Footnote-121124599
Node: Descontinuados<8>1124665
Ref: whatsnew/3 8 deprecated1124829
Ref: a761124829
Ref: Descontinuados<8>-Footnote-11130854
Ref: Descontinuados<8>-Footnote-21130919
Ref: Descontinuados<8>-Footnote-31130984
Ref: Descontinuados<8>-Footnote-41131049
Ref: Descontinuados<8>-Footnote-51131113
Ref: Descontinuados<8>-Footnote-61131178
Ref: Descontinuados<8>-Footnote-71131243
Ref: Descontinuados<8>-Footnote-81131308
Ref: Descontinuados<8>-Footnote-91131373
Ref: Descontinuados<8>-Footnote-101131438
Ref: Descontinuados<8>-Footnote-111131504
Ref: Descontinuados<8>-Footnote-121131570
Ref: Descontinuados<8>-Footnote-131131636
Node: Remoção de APIs e recursos1131702
Ref: whatsnew/3 8 api-and-feature-removals1131859
Ref: a901131859
Ref: Remoção de APIs e recursos-Footnote-11134738
Ref: Remoção de APIs e recursos-Footnote-21134793
Ref: Remoção de APIs e recursos-Footnote-31134858
Ref: Remoção de APIs e recursos-Footnote-41134923
Ref: Remoção de APIs e recursos-Footnote-51134988
Ref: Remoção de APIs e recursos-Footnote-61135053
Ref: Remoção de APIs e recursos-Footnote-71135118
Ref: Remoção de APIs e recursos-Footnote-81135183
Ref: Remoção de APIs e recursos-Footnote-91135248
Ref: Remoção de APIs e recursos-Footnote-101135313
Ref: Remoção de APIs e recursos-Footnote-111135379
Node: Portando para o Python 3 81135445
Ref: whatsnew/3 8 porting-to-python-3-81135623
Ref: a941135623
Node: Alterações no comportamento do Python1136116
Ref: whatsnew/3 8 changes-in-python-behavior1136256
Ref: a951136256
Ref: Alterações no comportamento do Python-Footnote-11138766
Ref: Alterações no comportamento do Python-Footnote-21138831
Ref: Alterações no comportamento do Python-Footnote-31138896
Ref: Alterações no comportamento do Python-Footnote-41138961
Ref: Alterações no comportamento do Python-Footnote-51139026
Ref: Alterações no comportamento do Python-Footnote-61139091
Node: Alterações na API Python<5>1139156
Ref: whatsnew/3 8 changes-in-the-python-api1139330
Ref: a9a1139330
Ref: whatsnew/3 8 bpo-36085-whatsnew1146815
Ref: aad1146815
Ref: Alterações na API Python<5>-Footnote-11148618
Ref: Alterações na API Python<5>-Footnote-21148660
Ref: Alterações na API Python<5>-Footnote-31148725
Ref: Alterações na API Python<5>-Footnote-41148790
Ref: Alterações na API Python<5>-Footnote-51148855
Ref: Alterações na API Python<5>-Footnote-61148920
Ref: Alterações na API Python<5>-Footnote-71148985
Ref: Alterações na API Python<5>-Footnote-81149050
Ref: Alterações na API Python<5>-Footnote-91149115
Ref: Alterações na API Python<5>-Footnote-101149180
Ref: Alterações na API Python<5>-Footnote-111149246
Ref: Alterações na API Python<5>-Footnote-121149312
Ref: Alterações na API Python<5>-Footnote-131149378
Ref: Alterações na API Python<5>-Footnote-141149444
Ref: Alterações na API Python<5>-Footnote-151149510
Ref: Alterações na API Python<5>-Footnote-161149576
Ref: Alterações na API Python<5>-Footnote-171149642
Ref: Alterações na API Python<5>-Footnote-181149707
Ref: Alterações na API Python<5>-Footnote-191149773
Ref: Alterações na API Python<5>-Footnote-201149839
Ref: Alterações na API Python<5>-Footnote-211149905
Ref: Alterações na API Python<5>-Footnote-221149971
Ref: Alterações na API Python<5>-Footnote-231150037
Ref: Alterações na API Python<5>-Footnote-241150103
Ref: Alterações na API Python<5>-Footnote-251150169
Ref: Alterações na API Python<5>-Footnote-261150235
Node: Alterações na API C<10>1150301
Ref: whatsnew/3 8 changes-in-the-c-api1150474
Ref: aaf1150474
Ref: Alterações na API C<10>-Footnote-11156606
Ref: Alterações na API C<10>-Footnote-21156671
Ref: Alterações na API C<10>-Footnote-31156736
Ref: Alterações na API C<10>-Footnote-41156801
Ref: Alterações na API C<10>-Footnote-51156866
Ref: Alterações na API C<10>-Footnote-61156931
Ref: Alterações na API C<10>-Footnote-71156996
Ref: Alterações na API C<10>-Footnote-81157061
Node: Alterações de bytecode do CPython<6>1157126
Ref: whatsnew/3 8 cpython-bytecode-changes1157294
Ref: ab71157294
Ref: Alterações de bytecode do CPython<6>-Footnote-11158722
Ref: Alterações de bytecode do CPython<6>-Footnote-21158787
Ref: Alterações de bytecode do CPython<6>-Footnote-31158852
Ref: Alterações de bytecode do CPython<6>-Footnote-41158894
Node: Ferramentas e daemons<2>1158959
Ref: whatsnew/3 8 demos-and-tools1159093
Ref: Ferramentas e daemons<2>-Footnote-11162427
Ref: Ferramentas e daemons<2>-Footnote-21162492
Ref: Ferramentas e daemons<2>-Footnote-31162620
Node: Alterações notáveis no Python 3 8 11162668
Ref: whatsnew/3 8 notable-changes-in-python-3-8-11162856
Ref: abd1162856
Ref: Alterações notáveis no Python 3 8 1-Footnote-11163403
Node: Alterações notáveis no Python 3 8 21163468
Ref: whatsnew/3 8 notable-changes-in-python-3-8-21163668
Ref: abe1163668
Ref: Alterações notáveis no Python 3 8 2-Footnote-11164023
Node: Alterações notáveis no Python 3 8 31164078
Ref: whatsnew/3 8 notable-changes-in-python-3-8-31164278
Ref: abf1164278
Ref: Alterações notáveis no Python 3 8 3-Footnote-11164707
Node: Alterações notáveis no Python 3 8 81164762
Ref: whatsnew/3 8 notable-changes-in-python-3-8-81164962
Ref: ac01164962
Ref: Alterações notáveis no Python 3 8 8-Footnote-11165773
Node: Alterações notáveis no Python 3 8 91165838
Ref: whatsnew/3 8 notable-changes-in-python-3-8-91166039
Ref: ac11166039
Ref: Alterações notáveis no Python 3 8 9-Footnote-11166583
Node: Alterações notáveis no Python 3 8 101166638
Ref: whatsnew/3 8 notable-changes-in-python-3-8-101166843
Ref: ac21166843
Node: Suporte a macOS 11 0 Big Sur e Apple Silicon Mac<2>1167052
Ref: whatsnew/3 8 macos-11-0-big-sur-and-apple-silicon-mac-support1167179
Ref: ac31167179
Ref: Suporte a macOS 11 0 Big Sur e Apple Silicon Mac<2>-Footnote-11168304
Node: Alterações notáveis no Python 3 8 10<2>1168359
Ref: whatsnew/3 8 id11168565
Ref: ac41168565
Node: urllib parse<4>1168700
Ref: whatsnew/3 8 urllib-parse1168794
Ref: ac51168794
Ref: urllib parse<4>-Footnote-11169374
Ref: urllib parse<4>-Footnote-21169433
Node: Alterações notáveis no Python 3 8 121169498
Ref: whatsnew/3 8 notable-changes-in-python-3-8-121169707
Ref: ac61169707
Node: Alterações na API Python<6>1169870
Ref: whatsnew/3 8 id21169975
Ref: ac71169975
Ref: Alterações na API Python<6>-Footnote-11170623
Node: Recursos de segurança notáveis no 3 8 141170688
Ref: whatsnew/3 8 notable-security-feature-in-3-8-141170887
Ref: ac81170887
Ref: Recursos de segurança notáveis no 3 8 14-Footnote-11171724
Node: Alterações notáveis no 3 8 171171780
Ref: whatsnew/3 8 notable-changes-in-3-8-171171931
Ref: ac91171931
Node: tarfile<6>1172042
Ref: whatsnew/3 8 id31172121
Ref: aca1172121
Ref: tarfile<6>-Footnote-11172731
Node: O que há de novo no Python 3 71172773
Ref: whatsnew/3 7 doc1172943
Ref: acb1172943
Ref: whatsnew/3 7 translation-repo1172943
Ref: acc1172943
Ref: whatsnew/3 7 what-s-new-in-python-3-71172943
Ref: acd1172943
Node: Resumo – Destaques da versão<7>1174586
Ref: whatsnew/3 7 summary-release-highlights1174722
Ref: ace1174722
Ref: Resumo – Destaques da versão<7>-Footnote-11177084
Ref: Resumo – Destaques da versão<7>-Footnote-21177164
Ref: Resumo – Destaques da versão<7>-Footnote-31177200
Ref: Resumo – Destaques da versão<7>-Footnote-41177236
Node: Novas funcionalidades<12>1177272
Ref: whatsnew/3 7 new-features1177449
Ref: ae21177449
Node: PEP 563 Avaliação Postergada de Anotações1178744
Ref: whatsnew/3 7 pep-563-postponed-evaluation-of-annotations1178900
Ref: ae31178900
Ref: whatsnew/3 7 whatsnew37-pep5631178900
Ref: acf1178900
Ref: PEP 563 Avaliação Postergada de Anotações-Footnote-11180822
Ref: PEP 563 Avaliação Postergada de Anotações-Footnote-21180864
Ref: PEP 563 Avaliação Postergada de Anotações-Footnote-31180906
Node: PEP 538 Coerção de localidade C legada1180948
Ref: whatsnew/3 7 pep-538-legacy-c-locale-coercion1181163
Ref: ae41181163
Ref: whatsnew/3 7 whatsnew37-pep5381181163
Ref: ad91181163
Ref: PEP 538 Coerção de localidade C legada-Footnote-11183941
Ref: PEP 538 Coerção de localidade C legada-Footnote-21183983
Ref: PEP 538 Coerção de localidade C legada-Footnote-31184025
Ref: PEP 538 Coerção de localidade C legada-Footnote-41184067
Node: PEP 540 Modo de tempo de execução UTF-8 forçado1184109
Ref: whatsnew/3 7 pep-540-forced-utf-8-runtime-mode1184306
Ref: ae71184306
Ref: whatsnew/3 7 whatsnew37-pep5401184306
Ref: ada1184306
Ref: PEP 540 Modo de tempo de execução UTF-8 forçado-Footnote-11186089
Ref: PEP 540 Modo de tempo de execução UTF-8 forçado-Footnote-21186131
Ref: PEP 540 Modo de tempo de execução UTF-8 forçado-Footnote-31186173
Node: PEP 553 breakpoint embutida1186215
Ref: whatsnew/3 7 pep-553-built-in-breakpoint1186425
Ref: ae91186425
Ref: whatsnew/3 7 whatsnew37-pep5531186425
Ref: ad31186425
Ref: PEP 553 breakpoint embutida-Footnote-11187302
Node: PEP 539 Nova API C para armazenamento local de thread1187344
Ref: whatsnew/3 7 pep-539-new-c-api-for-thread-local-storage1187563
Ref: aec1187563
Ref: whatsnew/3 7 whatsnew37-pep5391187563
Ref: ade1187563
Ref: PEP 539 Nova API C para armazenamento local de thread-Footnote-11189275
Ref: PEP 539 Nova API C para armazenamento local de thread-Footnote-21189317
Node: PEP 562 Personalização de acesso aos atributos do módulo1189359
Ref: whatsnew/3 7 pep-562-customization-of-access-to-module-attributes1189616
Ref: af01189616
Ref: whatsnew/3 7 whatsnew37-pep5621189616
Ref: ad41189616
Ref: PEP 562 Personalização de acesso aos atributos do módulo-Footnote-11190254
Node: PEP 564 Novas funções de tempo com resolução de nanossegundos1190296
Ref: whatsnew/3 7 pep-564-new-time-functions-with-nanosecond-resolution1190545
Ref: af31190545
Ref: whatsnew/3 7 whatsnew37-pep5641190545
Ref: ad81190545
Ref: PEP 564 Novas funções de tempo com resolução de nanossegundos-Footnote-11191710
Ref: PEP 564 Novas funções de tempo com resolução de nanossegundos-Footnote-21191752
Ref: PEP 564 Novas funções de tempo com resolução de nanossegundos-Footnote-31191829
Node: PEP 565 Mostra DeprecationWarning em __main__1191871
Ref: whatsnew/3 7 pep-565-show-deprecationwarning-in-main1192123
Ref: afa1192123
Ref: whatsnew/3 7 whatsnew37-pep5651192123
Ref: add1192123
Ref: PEP 565 Mostra DeprecationWarning em __main__-Footnote-11194293
Node: PEP 560 Suporte básico para módulo typing e tipos genéricos1194335
Ref: whatsnew/3 7 pep-560-core-support-for-typing-module-and-generic-types1194559
Ref: afb1194559
Ref: whatsnew/3 7 whatsnew37-pep5601194559
Ref: ad51194559
Ref: PEP 560 Suporte básico para módulo typing e tipos genéricos-Footnote-11195542
Ref: PEP 560 Suporte básico para módulo typing e tipos genéricos-Footnote-21195584
Node: PEP 552 Arquivos pyc baseados em hash1195626
Ref: whatsnew/3 7 pep-552-hash-based-pyc-files1195852
Ref: afd1195852
Ref: whatsnew/3 7 whatsnew37-pep5521195852
Ref: adb1195852
Ref: PEP 552 Arquivos pyc baseados em hash-Footnote-11197919
Ref: PEP 552 Arquivos pyc baseados em hash-Footnote-21197960
Ref: PEP 552 Arquivos pyc baseados em hash-Footnote-31198002
Node: PEP 545 Traduções da documentação do Python1198044
Ref: whatsnew/3 7 pep-545-python-documentation-translations1198248
Ref: afe1198248
Ref: whatsnew/3 7 whatsnew37-pep5451198248
Ref: adf1198248
Ref: PEP 545 Traduções da documentação do Python-Footnote-11198862
Ref: PEP 545 Traduções da documentação do Python-Footnote-21198904
Node: Modo de Desenvolvimento do Python -X dev1198946
Ref: whatsnew/3 7 python-development-mode-x-dev1199104
Ref: aff1199104
Ref: whatsnew/3 7 whatsnew37-devmode1199104
Ref: adc1199104
Node: Outras mudanças na linguagem<7>1199667
Ref: whatsnew/3 7 other-language-changes1199827
Ref: b011199827
Ref: Outras mudanças na linguagem<7>-Footnote-11202398
Ref: Outras mudanças na linguagem<7>-Footnote-21202463
Ref: Outras mudanças na linguagem<7>-Footnote-31202528
Ref: Outras mudanças na linguagem<7>-Footnote-41202593
Ref: Outras mudanças na linguagem<7>-Footnote-51202658
Ref: Outras mudanças na linguagem<7>-Footnote-61202723
Ref: Outras mudanças na linguagem<7>-Footnote-71202788
Ref: Outras mudanças na linguagem<7>-Footnote-81202853
Ref: Outras mudanças na linguagem<7>-Footnote-91202918
Ref: Outras mudanças na linguagem<7>-Footnote-101202983
Node: Novos módulos<7>1203049
Ref: whatsnew/3 7 new-modules1203206
Ref: b091203206
Node: contextvars1203352
Ref: whatsnew/3 7 contextvars1203440
Ref: b0a1203440
Ref: whatsnew/3 7 whatsnew37-pep5671203440
Ref: ad01203440
Ref: contextvars-Footnote-11204281
Node: dataclasses<3>1204323
Ref: whatsnew/3 7 dataclasses1204442
Ref: b0c1204442
Ref: whatsnew/3 7 whatsnew37-pep5571204442
Ref: ad11204442
Ref: dataclasses<3>-Footnote-11205145
Node: importlib resources<2>1205187
Ref: whatsnew/3 7 importlib-resources1205286
Ref: b0f1205286
Ref: whatsnew/3 7 whatsnew37-importlib-resources1205286
Ref: ad21205286
Ref: importlib resources<2>-Footnote-11206053
Ref: importlib resources<2>-Footnote-21206118
Node: Módulos melhorados<7>1206180
Ref: whatsnew/3 7 improved-modules1206330
Ref: b111206330
Node: argparse<3>1207776
Ref: whatsnew/3 7 argparse1207865
Ref: b121207865
Ref: argparse<3>-Footnote-11208101
Node: asyncio<7>1208166
Ref: whatsnew/3 7 asyncio1208272
Ref: b141208272
Ref: whatsnew/3 7 whatsnew37-asyncio1208272
Ref: ad71208272
Ref: asyncio<7>-Footnote-11214910
Ref: asyncio<7>-Footnote-21214975
Ref: asyncio<7>-Footnote-31215017
Ref: asyncio<7>-Footnote-41215082
Ref: asyncio<7>-Footnote-51215147
Ref: asyncio<7>-Footnote-61215212
Ref: asyncio<7>-Footnote-71215277
Ref: asyncio<7>-Footnote-81215342
Ref: asyncio<7>-Footnote-91215407
Ref: asyncio<7>-Footnote-101215472
Ref: asyncio<7>-Footnote-111215538
Ref: asyncio<7>-Footnote-121215604
Ref: asyncio<7>-Footnote-131215670
Ref: asyncio<7>-Footnote-141215736
Ref: asyncio<7>-Footnote-151215802
Ref: asyncio<7>-Footnote-161215868
Ref: asyncio<7>-Footnote-171215934
Ref: asyncio<7>-Footnote-181216000
Ref: asyncio<7>-Footnote-191216066
Ref: asyncio<7>-Footnote-201216132
Ref: asyncio<7>-Footnote-211216198
Ref: asyncio<7>-Footnote-221216264
Ref: asyncio<7>-Footnote-231216330
Ref: asyncio<7>-Footnote-241216396
Node: binascii1216462
Ref: whatsnew/3 7 binascii1216568
Ref: b321216568
Ref: binascii-Footnote-11216847
Node: calendar<2>1216912
Ref: whatsnew/3 7 calendar1217022
Ref: b341217022
Ref: calendar<2>-Footnote-11217272
Node: collections<2>1217337
Ref: whatsnew/3 7 collections1217452
Ref: b361217452
Ref: collections<2>-Footnote-11217643
Node: compileall<3>1217708
Ref: whatsnew/3 7 compileall1217833
Ref: b371217833
Ref: compileall<3>-Footnote-11218230
Node: concurrent futures<3>1218295
Ref: whatsnew/3 7 concurrent-futures1218419
Ref: b391218419
Ref: concurrent futures<3>-Footnote-11218861
Ref: concurrent futures<3>-Footnote-21218926
Node: contextlib<3>1218991
Ref: whatsnew/3 7 contextlib1219113
Ref: b3a1219113
Ref: contextlib<3>-Footnote-11219643
Ref: contextlib<3>-Footnote-21219708
Ref: contextlib<3>-Footnote-31219773
Ref: contextlib<3>-Footnote-41219838
Node: cProfile<2>1219903
Ref: whatsnew/3 7 cprofile1220009
Ref: b3f1220009
Ref: cProfile<2>-Footnote-11220235
Node: crypt1220300
Ref: whatsnew/3 7 crypt1220404
Ref: b401220404
Ref: crypt-Footnote-11220725
Ref: crypt-Footnote-21220790
Node: datetime<4>1220855
Ref: whatsnew/3 7 datetime1220954
Ref: b411220954
Ref: datetime<4>-Footnote-11221365
Ref: datetime<4>-Footnote-21221430
Node: dbm<2>1221494
Ref: whatsnew/3 7 dbm1221595
Ref: b431221595
Node: decimal1221740
Ref: whatsnew/3 7 decimal1221836
Ref: b441221836
Ref: decimal-Footnote-11222057
Node: dis<3>1222122
Ref: whatsnew/3 7 dis1222224
Ref: b451222224
Ref: dis<3>-Footnote-11222627
Node: distutils<4>1222692
Ref: whatsnew/3 7 distutils1222794
Ref: b471222794
Ref: distutils<4>-Footnote-11223042
Node: enum<5>1223107
Ref: whatsnew/3 7 enum1223215
Ref: b481223215
Ref: enum<5>-Footnote-11223896
Ref: enum<5>-Footnote-21223961
Node: functools<3>1224026
Ref: whatsnew/3 7 functools1224127
Ref: b4a1224127
Ref: functools<3>-Footnote-11224356
Node: gc<4>1224421
Ref: whatsnew/3 7 gc1224522
Ref: b4b1224522
Ref: gc<4>-Footnote-11225061
Node: hmac<2>1225126
Ref: whatsnew/3 7 hmac1225226
Ref: b4f1225226
Ref: hmac<2>-Footnote-11225489
Node: http client1225554
Ref: whatsnew/3 7 http-client1225660
Ref: b521225660
Ref: http client-Footnote-11225917
Node: http server1225982
Ref: whatsnew/3 7 http-server1226095
Ref: b551226095
Ref: http server-Footnote-11226978
Ref: http server-Footnote-21227043
Ref: http server-Footnote-31227108
Node: idlelib e IDLE1227173
Ref: whatsnew/3 7 idlelib-and-idle1227287
Ref: b591227287
Ref: idlelib e IDLE-Footnote-11230370
Ref: idlelib e IDLE-Footnote-21230435
Ref: idlelib e IDLE-Footnote-31230502
Ref: idlelib e IDLE-Footnote-41230567
Ref: idlelib e IDLE-Footnote-51230632
Ref: idlelib e IDLE-Footnote-61230697
Ref: idlelib e IDLE-Footnote-71230762
Ref: idlelib e IDLE-Footnote-81230827
Ref: idlelib e IDLE-Footnote-91230892
Ref: idlelib e IDLE-Footnote-101230957
Ref: idlelib e IDLE-Footnote-111231025
Ref: idlelib e IDLE-Footnote-121231090
Ref: idlelib e IDLE-Footnote-131231156
Node: importlib<4>1231222
Ref: whatsnew/3 7 importlib1231330
Ref: b5a1231330
Ref: importlib<4>-Footnote-11232223
Ref: importlib<4>-Footnote-21232288
Ref: importlib<4>-Footnote-31232353
Node: io<4>1232418
Ref: whatsnew/3 7 io1232524
Ref: b5d1232524
Ref: io<4>-Footnote-11232789
Ref: io<4>-Footnote-21232854
Node: ipaddress<3>1232919
Ref: whatsnew/3 7 ipaddress1233025
Ref: b5f1233025
Ref: ipaddress<3>-Footnote-11233345
Node: itertools<5>1233410
Ref: whatsnew/3 7 itertools1233520
Ref: b601233520
Ref: itertools<5>-Footnote-11233757
Node: locale<4>1233822
Ref: whatsnew/3 7 locale1233930
Ref: b621233930
Ref: locale<4>-Footnote-11234344
Node: logging<3>1234409
Ref: whatsnew/3 7 logging1234512
Ref: b631234512
Ref: logging<3>-Footnote-11235036
Ref: logging<3>-Footnote-21235101
Ref: logging<3>-Footnote-31235166
Node: math<6>1235231
Ref: whatsnew/3 7 math1235337
Ref: b671235337
Ref: math<6>-Footnote-11235550
Node: mimetypes<2>1235615
Ref: whatsnew/3 7 mimetypes1235717
Ref: b691235717
Ref: mimetypes<2>-Footnote-11235932
Node: msilib1235997
Ref: whatsnew/3 7 msilib1236110
Ref: b6a1236110
Ref: msilib-Footnote-11236305
Node: multiprocessing<4>1236370
Ref: whatsnew/3 7 multiprocessing1236476
Ref: b6b1236476
Ref: multiprocessing<4>-Footnote-11237129
Ref: multiprocessing<4>-Footnote-21237194
Ref: multiprocessing<4>-Footnote-31237259
Node: os<7>1237324
Ref: whatsnew/3 7 os1237434
Ref: b701237434
Ref: os<7>-Footnote-11238732
Ref: os<7>-Footnote-21238797
Ref: os<7>-Footnote-31238862
Ref: os<7>-Footnote-41238927
Ref: os<7>-Footnote-51238992
Ref: os<7>-Footnote-61239057
Ref: os<7>-Footnote-71239122
Node: pathlib<8>1239187
Ref: whatsnew/3 7 pathlib1239285
Ref: b7b1239285
Ref: pathlib<8>-Footnote-11239545
Node: pdb<4>1239610
Ref: whatsnew/3 7 pdb1239716
Ref: b7c1239716
Ref: pdb<4>-Footnote-11240126
Ref: pdb<4>-Footnote-21240191
Node: py_compile<3>1240256
Ref: whatsnew/3 7 py-compile1240360
Ref: b7d1240360
Ref: py_compile<3>-Footnote-11240814
Ref: py_compile<3>-Footnote-21240855
Node: pydoc<2>1240920
Ref: whatsnew/3 7 pydoc1241026
Ref: b7e1241026
Ref: pydoc<2>-Footnote-11241250
Node: queue<2>1241315
Ref: whatsnew/3 7 queue1241413
Ref: b7f1241413
Ref: queue<2>-Footnote-11241596
Node: re<4>1241661
Ref: whatsnew/3 7 re1241760
Ref: b811241760
Ref: re<4>-Footnote-11242842
Ref: re<4>-Footnote-21242907
Ref: re<4>-Footnote-31242972
Ref: re<4>-Footnote-41243037
Ref: re<4>-Footnote-51243102
Node: signal<2>1243167
Ref: whatsnew/3 7 signal1243267
Ref: b851243267
Ref: signal<2>-Footnote-11243586
Node: socket<5>1243651
Ref: whatsnew/3 7 socket1243758
Ref: b871243758
Ref: socket<5>-Footnote-11244864
Ref: socket<5>-Footnote-21244929
Ref: socket<5>-Footnote-31244994
Ref: socket<5>-Footnote-41245059
Ref: socket<5>-Footnote-51245124
Ref: socket<5>-Footnote-61245189
Node: socketserver1245254
Ref: whatsnew/3 7 socketserver1245362
Ref: b8d1245362
Node: sqlite3<6>1245852
Ref: whatsnew/3 7 sqlite31245957
Ref: b911245957
Ref: sqlite3<6>-Footnote-11246399
Ref: sqlite3<6>-Footnote-21246464
Node: ssl<5>1246529
Ref: whatsnew/3 7 ssl1246631
Ref: b931246631
Ref: ssl<5>-Footnote-11249897
Ref: ssl<5>-Footnote-21249962
Ref: ssl<5>-Footnote-31250027
Ref: ssl<5>-Footnote-41250092
Ref: ssl<5>-Footnote-51250157
Ref: ssl<5>-Footnote-61250222
Ref: ssl<5>-Footnote-71250287
Ref: ssl<5>-Footnote-81250352
Ref: ssl<5>-Footnote-91250417
Ref: ssl<5>-Footnote-101250482
Ref: ssl<5>-Footnote-111250548
Ref: ssl<5>-Footnote-121250614
Ref: ssl<5>-Footnote-131250680
Ref: ssl<5>-Footnote-141250746
Node: string<2>1250802
Ref: whatsnew/3 7 string1250907
Ref: b9c1250907
Ref: string<2>-Footnote-11251184
Node: subprocess<2>1251251
Ref: whatsnew/3 7 subprocess1251356
Ref: b9d1251356
Ref: subprocess<2>-Footnote-11252678
Ref: subprocess<2>-Footnote-21252743
Ref: subprocess<2>-Footnote-31252808
Ref: subprocess<2>-Footnote-41252873
Node: sys<8>1252938
Ref: whatsnew/3 7 sys1253041
Ref: ba11253041
Ref: sys<8>-Footnote-11253781
Ref: sys<8>-Footnote-21253846
Ref: sys<8>-Footnote-31253911
Node: time<5>1253976
Ref: whatsnew/3 7 time1254076
Ref: ba51254076
Ref: time<5>-Footnote-11255285
Ref: time<5>-Footnote-21255327
Node: tkinter<5>1255392
Ref: whatsnew/3 7 tkinter1255500
Ref: bab1255500
Ref: tkinter<5>-Footnote-11255681
Node: tracemalloc<2>1255746
Ref: whatsnew/3 7 tracemalloc1255855
Ref: bad1255855
Ref: tracemalloc<2>-Footnote-11256321
Node: types<4>1256386
Ref: whatsnew/3 7 types1256499
Ref: bb01256499
Ref: types<4>-Footnote-11257014
Ref: types<4>-Footnote-21257079
Ref: types<4>-Footnote-31257144
Ref: types<4>-Footnote-41257186
Node: unicodedata<6>1257251
Ref: whatsnew/3 7 unicodedata1257361
Ref: bb51257361
Ref: unicodedata<6>-Footnote-11257564
Node: unittest<7>1257620
Ref: whatsnew/3 7 unittest1257735
Ref: bb61257735
Ref: unittest<7>-Footnote-11258140
Node: unittest mock1258205
Ref: whatsnew/3 7 unittest-mock1258321
Ref: bb71258321
Ref: unittest mock-Footnote-11258839
Ref: unittest mock-Footnote-21258904
Node: urllib parse<5>1258969
Ref: whatsnew/3 7 urllib-parse1259076
Ref: bba1259076
Ref: urllib parse<5>-Footnote-11259389
Ref: urllib parse<5>-Footnote-21259448
Ref: urllib parse<5>-Footnote-31259507
Node: uu1259572
Ref: whatsnew/3 7 uu1259673
Ref: bbc1259673
Ref: uu-Footnote-11259939
Node: uuid<2>1260004
Ref: whatsnew/3 7 uuid1260099
Ref: bbd1260099
Ref: uuid<2>-Footnote-11260739
Ref: uuid<2>-Footnote-21260804
Node: avisos<3>1260869
Ref: whatsnew/3 7 warnings1260968
Ref: bc11260968
Ref: avisos<3>-Footnote-11262391
Ref: avisos<3>-Footnote-21262456
Ref: avisos<3>-Footnote-31262521
Ref: avisos<3>-Footnote-41262586
Node: xml<5>1262651
Ref: whatsnew/3 7 xml1262752
Ref: bc31262752
Ref: xml<5>-Footnote-11263036
Node: xml etree1263091
Ref: whatsnew/3 7 xml-etree1263196
Ref: bc41263196
Ref: xml etree-Footnote-11263537
Node: xmlrpc server1263602
Ref: whatsnew/3 7 xmlrpc-server1263707
Ref: bc61263707
Ref: xmlrpc server-Footnote-11263918
Node: zipapp1263982
Ref: whatsnew/3 7 zipapp1264088
Ref: bc71264088
Ref: zipapp-Footnote-11264612
Ref: zipapp-Footnote-21264677
Node: zipfile<2>1264742
Ref: whatsnew/3 7 zipfile1264826
Ref: bc91264826
Ref: zipfile<2>-Footnote-11265191
Ref: zipfile<2>-Footnote-21265256
Node: Alterações na API C<11>1265321
Ref: whatsnew/3 7 c-api-changes1265482
Ref: bca1265482
Ref: Alterações na API C<11>-Footnote-11270014
Ref: Alterações na API C<11>-Footnote-21270079
Ref: Alterações na API C<11>-Footnote-31270144
Ref: Alterações na API C<11>-Footnote-41270209
Ref: Alterações na API C<11>-Footnote-51270274
Ref: Alterações na API C<11>-Footnote-61270339
Ref: Alterações na API C<11>-Footnote-71270404
Ref: Alterações na API C<11>-Footnote-81270469
Ref: Alterações na API C<11>-Footnote-91270534
Ref: Alterações na API C<11>-Footnote-101270599
Ref: Alterações na API C<11>-Footnote-111270665
Ref: Alterações na API C<11>-Footnote-121270731
Ref: Alterações na API C<11>-Footnote-131270797
Ref: Alterações na API C<11>-Footnote-141270863
Ref: Alterações na API C<11>-Footnote-151270929
Ref: Alterações na API C<11>-Footnote-161270994
Ref: Alterações na API C<11>-Footnote-171271060
Ref: Alterações na API C<11>-Footnote-181271126
Ref: Alterações na API C<11>-Footnote-191271192
Ref: Alterações na API C<11>-Footnote-201271258
Node: Mudanças na construção<6>1271324
Ref: whatsnew/3 7 build-changes1271479
Ref: be41271479
Ref: Mudanças na construção<6>-Footnote-11272633
Ref: Mudanças na construção<6>-Footnote-21272698
Ref: Mudanças na construção<6>-Footnote-31272763
Node: Otimizações<7>1272828
Ref: whatsnew/3 7 optimizations1273007
Ref: be51273007
Ref: whatsnew/3 7 whatsnew37-perf1273007
Ref: ae01273007
Ref: whatsnew/3 7 whatsnew37-asyncio-perf1273699
Ref: b151273699
Ref: Otimizações<7>-Footnote-11278283
Ref: Otimizações<7>-Footnote-21278348
Ref: Otimizações<7>-Footnote-31278413
Ref: Otimizações<7>-Footnote-41278478
Ref: Otimizações<7>-Footnote-51278543
Ref: Otimizações<7>-Footnote-61278608
Ref: Otimizações<7>-Footnote-71278673
Ref: Otimizações<7>-Footnote-81278738
Ref: Otimizações<7>-Footnote-91278803
Ref: Otimizações<7>-Footnote-101278868
Ref: Otimizações<7>-Footnote-111278934
Ref: Otimizações<7>-Footnote-121279000
Ref: Otimizações<7>-Footnote-131279066
Ref: Otimizações<7>-Footnote-141279132
Ref: Otimizações<7>-Footnote-151279198
Ref: Otimizações<7>-Footnote-161279264
Ref: Otimizações<7>-Footnote-171279330
Ref: Otimizações<7>-Footnote-181279396
Ref: Otimizações<7>-Footnote-191279462
Ref: Otimizações<7>-Footnote-201279528
Ref: Otimizações<7>-Footnote-211279594
Ref: Otimizações<7>-Footnote-221279660
Ref: Otimizações<7>-Footnote-231279726
Ref: Otimizações<7>-Footnote-241279792
Ref: Otimizações<7>-Footnote-251279858
Ref: Otimizações<7>-Footnote-261279924
Ref: Otimizações<7>-Footnote-271279990
Ref: Otimizações<7>-Footnote-281280056
Ref: Otimizações<7>-Footnote-291280122
Ref: Otimizações<7>-Footnote-301280188
Node: Outras mudanças na implementação do CPython<2>1280254
Ref: whatsnew/3 7 other-cpython-implementation-changes1280442
Ref: bf51280442
Ref: Outras mudanças na implementação do CPython<2>-Footnote-11281866
Ref: Outras mudanças na implementação do CPython<2>-Footnote-21281931
Ref: Outras mudanças na implementação do CPython<2>-Footnote-31281996
Ref: Outras mudanças na implementação do CPython<2>-Footnote-41282061
Ref: Outras mudanças na implementação do CPython<2>-Footnote-51282126
Node: Comportamento do Python descontinuado1282191
Ref: whatsnew/3 7 deprecated-python-behavior1282410
Ref: bf81282410
Ref: Comportamento do Python descontinuado-Footnote-11283541
Ref: Comportamento do Python descontinuado-Footnote-21283606
Node: Deprecated Python modules functions and methods1283671
Ref: whatsnew/3 7 deprecated-python-modules-functions-and-methods1283884
Ref: bfa1283884
Node: aifc1284282
Ref: whatsnew/3 7 aifc1284389
Ref: bfb1284389
Ref: aifc-Footnote-11284609
Node: asyncio<8>1284674
Ref: whatsnew/3 7 id21284804
Ref: bfc1284804
Ref: whatsnew/3 7 whatsnew37-asyncio-deprecated1284804
Ref: b311284804
Ref: asyncio<8>-Footnote-11285329
Ref: asyncio<8>-Footnote-21285394
Node: collections<3>1285459
Ref: whatsnew/3 7 id31285591
Ref: bfd1285591
Ref: collections<3>-Footnote-11285970
Node: dbm<3>1286035
Ref: whatsnew/3 7 id41286164
Ref: bfe1286164
Ref: dbm<3>-Footnote-11286565
Node: enum<6>1286630
Ref: whatsnew/3 7 id51286755
Ref: bff1286755
Ref: enum<6>-Footnote-11287216
Node: gettext<2>1287281
Ref: whatsnew/3 7 gettext1287412
Ref: c001287412
Ref: gettext<2>-Footnote-11287657
Node: importlib<5>1287722
Ref: whatsnew/3 7 id61287855
Ref: c011287855
Ref: importlib<5>-Footnote-11288370
Node: locale<5>1288435
Ref: whatsnew/3 7 id71288565
Ref: c031288565
Ref: locale<5>-Footnote-11288768
Node: macpath1288833
Ref: whatsnew/3 7 macpath1288963
Ref: c041288963
Ref: macpath-Footnote-11289153
Node: threading<5>1289217
Ref: whatsnew/3 7 threading1289347
Ref: c051289347
Ref: threading<5>-Footnote-11289645
Node: socket<6>1289710
Ref: whatsnew/3 7 id81289839
Ref: c061289839
Ref: socket<6>-Footnote-11290184
Node: ssl<6>1290249
Ref: whatsnew/3 7 id91290371
Ref: c071290371
Ref: ssl<6>-Footnote-11290583
Node: sunau1290648
Ref: whatsnew/3 7 sunau1290767
Ref: c081290767
Ref: sunau-Footnote-11290993
Node: sys<9>1291058
Ref: whatsnew/3 7 id101291175
Ref: c091291175
Ref: sys<9>-Footnote-11291492
Node: wave1291557
Ref: whatsnew/3 7 wave1291660
Ref: c0a1291660
Ref: wave-Footnote-11291888
Node: Deprecated functions and types of the C API1291953
Ref: whatsnew/3 7 deprecated-functions-and-types-of-the-c-api1292154
Ref: c0b1292154
Ref: Deprecated functions and types of the C API-Footnote-11292812
Ref: Deprecated functions and types of the C API-Footnote-21292877
Node: Platform Support Removals1292942
Ref: whatsnew/3 7 id111293127
Ref: c0c1293127
Ref: whatsnew/3 7 platform-support-removals1293127
Ref: b961293127
Ref: Platform Support Removals-Footnote-11294539
Ref: Platform Support Removals-Footnote-21294606
Node: Remoção de APIs e recursos<2>1294686
Ref: whatsnew/3 7 api-and-feature-removals1294843
Ref: c0d1294843
Ref: Remoção de APIs e recursos<2>-Footnote-11297756
Ref: Remoção de APIs e recursos<2>-Footnote-21297821
Ref: Remoção de APIs e recursos<2>-Footnote-31297886
Node: Module Removals1297951
Ref: whatsnew/3 7 module-removals1298103
Ref: c111298103
Ref: Module Removals-Footnote-11298438
Node: Windows-only Changes1298503
Ref: whatsnew/3 7 windows-only-changes1298645
Ref: c121298645
Ref: Windows-only Changes-Footnote-11299522
Ref: Windows-only Changes-Footnote-21299587
Node: Porting to Python 3 71299652
Ref: whatsnew/3 7 porting-to-python-3-71299810
Ref: c131299810
Ref: whatsnew/3 7 porting-to-python-371299810
Ref: ae11299810
Node: Changes in Python Behavior1300319
Ref: whatsnew/3 7 changes-in-python-behavior1300441
Ref: c141300441
Ref: Changes in Python Behavior-Footnote-11302307
Ref: Changes in Python Behavior-Footnote-21302372
Ref: Changes in Python Behavior-Footnote-31302414
Ref: Changes in Python Behavior-Footnote-41302479
Ref: Changes in Python Behavior-Footnote-51302544
Ref: Changes in Python Behavior-Footnote-61302609
Node: Alterações na API Python<7>1302674
Ref: whatsnew/3 7 changes-in-the-python-api1302830
Ref: c171302830
Ref: Alterações na API Python<7>-Footnote-11312398
Ref: Alterações na API Python<7>-Footnote-21312463
Ref: Alterações na API Python<7>-Footnote-31312528
Ref: Alterações na API Python<7>-Footnote-41312593
Ref: Alterações na API Python<7>-Footnote-51312658
Ref: Alterações na API Python<7>-Footnote-61312723
Ref: Alterações na API Python<7>-Footnote-71312788
Ref: Alterações na API Python<7>-Footnote-81312853
Ref: Alterações na API Python<7>-Footnote-91312918
Ref: Alterações na API Python<7>-Footnote-101312983
Ref: Alterações na API Python<7>-Footnote-111313049
Ref: Alterações na API Python<7>-Footnote-121313115
Ref: Alterações na API Python<7>-Footnote-131313181
Ref: Alterações na API Python<7>-Footnote-141313247
Ref: Alterações na API Python<7>-Footnote-151313290
Ref: Alterações na API Python<7>-Footnote-161313356
Ref: Alterações na API Python<7>-Footnote-171313422
Ref: Alterações na API Python<7>-Footnote-181313488
Ref: Alterações na API Python<7>-Footnote-191313554
Ref: Alterações na API Python<7>-Footnote-201313620
Ref: Alterações na API Python<7>-Footnote-211313686
Ref: Alterações na API Python<7>-Footnote-221313752
Ref: Alterações na API Python<7>-Footnote-231313818
Ref: Alterações na API Python<7>-Footnote-241313884
Ref: Alterações na API Python<7>-Footnote-251313950
Ref: Alterações na API Python<7>-Footnote-261314016
Ref: Alterações na API Python<7>-Footnote-271314082
Ref: Alterações na API Python<7>-Footnote-281314148
Ref: Alterações na API Python<7>-Footnote-291314214
Ref: Alterações na API Python<7>-Footnote-301314280
Node: Alterações na API C<12>1314346
Ref: whatsnew/3 7 changes-in-the-c-api1314514
Ref: c371314514
Ref: Alterações na API C<12>-Footnote-11315150
Node: Alterações de bytecode do CPython<7>1315215
Ref: whatsnew/3 7 cpython-bytecode-changes1315377
Ref: c381315377
Ref: Alterações de bytecode do CPython<7>-Footnote-11315743
Ref: Alterações de bytecode do CPython<7>-Footnote-21315808
Node: Windows-only Changes<2>1315873
Ref: whatsnew/3 7 id121316046
Ref: c3a1316046
Ref: Windows-only Changes<2>-Footnote-11316372
Node: Other CPython implementation changes1316437
Ref: whatsnew/3 7 id131316563
Ref: c3c1316563
Ref: Other CPython implementation changes-Footnote-11318893
Ref: Other CPython implementation changes-Footnote-21318935
Ref: Other CPython implementation changes-Footnote-31319000
Node: Notable changes in Python 3 7 11319065
Ref: whatsnew/3 7 notable-changes-in-python-3-7-11319234
Ref: c3e1319234
Ref: Notable changes in Python 3 7 1-Footnote-11320171
Ref: Notable changes in Python 3 7 1-Footnote-21320236
Ref: Notable changes in Python 3 7 1-Footnote-31320301
Node: Notable changes in Python 3 7 21320366
Ref: whatsnew/3 7 notable-changes-in-python-3-7-21320545
Ref: c411320545
Node: Notable changes in Python 3 7 61321040
Ref: whatsnew/3 7 notable-changes-in-python-3-7-61321220
Ref: c421321220
Ref: Notable changes in Python 3 7 6-Footnote-11321756
Node: Notable changes in Python 3 7 101321821
Ref: whatsnew/3 7 notable-changes-in-python-3-7-101322002
Ref: c431322002
Ref: Notable changes in Python 3 7 10-Footnote-11322804
Node: Notable changes in Python 3 7 111322869
Ref: whatsnew/3 7 notable-changes-in-python-3-7-111323053
Ref: c441323053
Ref: Notable changes in Python 3 7 11-Footnote-11324032
Ref: Notable changes in Python 3 7 11-Footnote-21324087
Node: Notable security feature in 3 7 141324142
Ref: whatsnew/3 7 notable-security-feature-in-3-7-141324285
Ref: c451324285
Ref: Notable security feature in 3 7 14-Footnote-11325108
Node: What’s New In Python 3 61325164
Ref: whatsnew/3 6 doc1325334
Ref: c461325334
Ref: whatsnew/3 6 translation-repo1325334
Ref: c471325334
Ref: whatsnew/3 6 what-s-new-in-python-3-61325334
Ref: c481325334
Ref: What’s New In Python 3 6-Footnote-11326763
Ref: What’s New In Python 3 6-Footnote-21326823
Node: Resumo – Destaques da versão<8>1326865
Ref: whatsnew/3 6 summary-release-highlights1326996
Ref: c491326996
Ref: Resumo – Destaques da versão<8>-Footnote-11331256
Ref: Resumo – Destaques da versão<8>-Footnote-21331336
Ref: Resumo – Destaques da versão<8>-Footnote-31331426
Node: Novas funcionalidades<13>1331468
Ref: whatsnew/3 6 new-features1331640
Ref: c5d1331640
Ref: whatsnew/3 6 pypy-dict-implementation1331640
Ref: c5e1331640
Node: PEP 498 Formatted string literals1333068
Ref: whatsnew/3 6 pep-498-formatted-string-literals1333211
Ref: c5f1333211
Ref: whatsnew/3 6 whatsnew36-pep4981333211
Ref: c4a1333211
Ref: PEP 498 Formatted string literals-Footnote-11334200
Ref: PEP 498 Formatted string literals-Footnote-21334242
Node: PEP 526 Syntax for variable annotations1334284
Ref: whatsnew/3 6 pep-526-syntax-for-variable-annotations1334475
Ref: c601334475
Ref: whatsnew/3 6 whatsnew36-pep5261334475
Ref: c4c1334475
Ref: PEP 526 Syntax for variable annotations-Footnote-11335724
Ref: PEP 526 Syntax for variable annotations-Footnote-21335766
Ref: PEP 526 Syntax for variable annotations-Footnote-31335808
Ref: PEP 526 Syntax for variable annotations-Footnote-41335843
Node: PEP 515 Underscores in Numeric Literals1335884
Ref: whatsnew/3 6 pep-515-underscores-in-numeric-literals1336073
Ref: c611336073
Ref: whatsnew/3 6 whatsnew36-pep5151336073
Ref: c4b1336073
Ref: PEP 515 Underscores in Numeric Literals-Footnote-11337147
Ref: PEP 515 Underscores in Numeric Literals-Footnote-21337189
Node: PEP 525 Asynchronous Generators1337231
Ref: whatsnew/3 6 pep-525-asynchronous-generators1337416
Ref: c621337416
Ref: whatsnew/3 6 whatsnew36-pep5251337416
Ref: c4d1337416
Ref: PEP 525 Asynchronous Generators-Footnote-11338256
Ref: PEP 525 Asynchronous Generators-Footnote-21338298
Node: PEP 530 Asynchronous Comprehensions1338340
Ref: whatsnew/3 6 pep-530-asynchronous-comprehensions1338533
Ref: c631338533
Ref: whatsnew/3 6 whatsnew36-pep5301338533
Ref: c4e1338533
Ref: PEP 530 Asynchronous Comprehensions-Footnote-11339096
Ref: PEP 530 Asynchronous Comprehensions-Footnote-21339138
Node: PEP 487 Simpler customization of class creation1339180
Ref: whatsnew/3 6 pep-487-simpler-customization-of-class-creation1339382
Ref: c641339382
Ref: whatsnew/3 6 whatsnew36-pep4871339382
Ref: c511339382
Ref: PEP 487 Simpler customization of class creation-Footnote-11340477
Node: PEP 487 Descriptor Protocol Enhancements1340519
Ref: whatsnew/3 6 pep-487-descriptor-protocol-enhancements1340728
Ref: c671340728
Ref: whatsnew/3 6 whatsnew36-pep487-descriptors1340728
Ref: c681340728
Ref: PEP 487 Descriptor Protocol Enhancements-Footnote-11341984
Ref: PEP 487 Descriptor Protocol Enhancements-Footnote-21342026
Node: PEP 519 Adding a file system path protocol1342068
Ref: whatsnew/3 6 pep-519-adding-a-file-system-path-protocol1342263
Ref: c6b1342263
Ref: whatsnew/3 6 whatsnew36-pep5191342263
Ref: c561342263
Ref: PEP 519 Adding a file system path protocol-Footnote-11345095
Node: PEP 495 Local Time Disambiguation1345137
Ref: whatsnew/3 6 pep-495-local-time-disambiguation1345343
Ref: c711345343
Ref: whatsnew/3 6 whatsnew36-pep4951345343
Ref: c571345343
Ref: PEP 495 Local Time Disambiguation-Footnote-11346761
Ref: PEP 495 Local Time Disambiguation-Footnote-21346803
Node: PEP 529 Change Windows filesystem encoding to UTF-81346845
Ref: whatsnew/3 6 pep-529-change-windows-filesystem-encoding-to-utf-81347057
Ref: c731347057
Ref: whatsnew/3 6 whatsnew36-pep5291347057
Ref: c5b1347057
Ref: PEP 529 Change Windows filesystem encoding to UTF-8-Footnote-11348087
Node: PEP 528 Change Windows console encoding to UTF-81348129
Ref: whatsnew/3 6 pep-528-change-windows-console-encoding-to-utf-81348359
Ref: c751348359
Ref: whatsnew/3 6 whatsnew36-pep5281348359
Ref: c5a1348359
Ref: PEP 528 Change Windows console encoding to UTF-8-Footnote-11349067
Node: PEP 520 Preserving Class Attribute Definition Order1349109
Ref: whatsnew/3 6 pep-520-preserving-class-attribute-definition-order1349329
Ref: c771349329
Ref: whatsnew/3 6 whatsnew36-pep5201349329
Ref: c521349329
Ref: PEP 520 Preserving Class Attribute Definition Order-Footnote-11349974
Node: PEP 468 Preserving Keyword Argument Order1350016
Ref: whatsnew/3 6 pep-468-preserving-keyword-argument-order1350211
Ref: c7a1350211
Ref: whatsnew/3 6 whatsnew36-pep4681350211
Ref: c531350211
Ref: PEP 468 Preserving Keyword Argument Order-Footnote-11350577
Node: New dict implementation1350619
Ref: whatsnew/3 6 new-dict-implementation1350811
Ref: c7b1350811
Ref: whatsnew/3 6 whatsnew36-compactdict1350811
Ref: c501350811
Ref: New dict implementation-Footnote-11351789
Ref: New dict implementation-Footnote-21351869
Ref: New dict implementation-Footnote-31351959
Ref: New dict implementation-Footnote-41352024
Node: PEP 523 Adding a frame evaluation API to CPython1352104
Ref: whatsnew/3 6 pep-523-adding-a-frame-evaluation-api-to-cpython1352288
Ref: c7c1352288
Ref: whatsnew/3 6 whatsnew36-pep5231352288
Ref: c7d1352288
Ref: PEP 523 Adding a frame evaluation API to CPython-Footnote-11353464
Ref: PEP 523 Adding a frame evaluation API to CPython-Footnote-21353506
Node: PYTHONMALLOC environment variable1353548
Ref: whatsnew/3 6 pythonmalloc-environment-variable1353745
Ref: c7e1353745
Ref: whatsnew/3 6 whatsnew36-pythonmalloc1353745
Ref: c551353745
Ref: PYTHONMALLOC environment variable-Footnote-11356927
Ref: PYTHONMALLOC environment variable-Footnote-21356992
Node: DTrace and SystemTap probing support1357057
Ref: whatsnew/3 6 dtrace-and-systemtap-probing-support1357197
Ref: c861357197
Ref: whatsnew/3 6 whatsnew36-tracing1357197
Ref: c541357197
Ref: DTrace and SystemTap probing support-Footnote-11358040
Node: Outras mudanças na linguagem<8>1358105
Ref: whatsnew/3 6 other-language-changes1358260
Ref: c881358260
Ref: Outras mudanças na linguagem<8>-Footnote-11359673
Ref: Outras mudanças na linguagem<8>-Footnote-21359738
Ref: Outras mudanças na linguagem<8>-Footnote-31359803
Ref: Outras mudanças na linguagem<8>-Footnote-41359868
Node: Novos módulos<8>1359933
Ref: whatsnew/3 6 new-modules1360085
Ref: c8c1360085
Node: segredos1360150
Ref: whatsnew/3 6 secrets1360212
Ref: c8d1360212
Ref: whatsnew/3 6 whatsnew36-pep5061360212
Ref: c4f1360212
Ref: segredos-Footnote-11360900
Node: Módulos melhorados<8>1360942
Ref: whatsnew/3 6 improved-modules1361078
Ref: c8e1361078
Node: array<4>1362559
Ref: whatsnew/3 6 array1362641
Ref: c8f1362641
Ref: array<4>-Footnote-11362934
Node: ast<4>1362999
Ref: whatsnew/3 6 ast1363100
Ref: c901363100
Ref: ast<4>-Footnote-11363349
Node: asyncio<9>1363414
Ref: whatsnew/3 6 asyncio1363518
Ref: c911363518
Ref: asyncio<9>-Footnote-11366865
Ref: asyncio<9>-Footnote-21366930
Ref: asyncio<9>-Footnote-31366975
Ref: asyncio<9>-Footnote-41367040
Ref: asyncio<9>-Footnote-51367105
Ref: asyncio<9>-Footnote-61367170
Ref: asyncio<9>-Footnote-71367235
Ref: asyncio<9>-Footnote-81367300
Ref: asyncio<9>-Footnote-91367365
Ref: asyncio<9>-Footnote-101367430
Ref: asyncio<9>-Footnote-111367496
Ref: asyncio<9>-Footnote-121367562
Node: binascii<2>1367628
Ref: whatsnew/3 6 binascii1367731
Ref: c9b1367731
Ref: binascii<2>-Footnote-11368016
Node: cmath1368081
Ref: whatsnew/3 6 cmath1368188
Ref: c9d1368188
Ref: cmath-Footnote-11368659
Ref: cmath-Footnote-21368724
Ref: cmath-Footnote-31368766
Node: collections<4>1368831
Ref: whatsnew/3 6 collections1368948
Ref: ca41368948
Ref: collections<4>-Footnote-11370054
Ref: collections<4>-Footnote-21370119
Ref: collections<4>-Footnote-31370184
Ref: collections<4>-Footnote-41370249
Ref: collections<4>-Footnote-51370314
Ref: collections<4>-Footnote-61370379
Node: concurrent futures<4>1370444
Ref: whatsnew/3 6 concurrent-futures1370569
Ref: ca91370569
Ref: concurrent futures<4>-Footnote-11370900
Node: contextlib<4>1370965
Ref: whatsnew/3 6 contextlib1371087
Ref: caa1371087
Ref: contextlib<4>-Footnote-11371583
Node: datetime<5>1371648
Ref: whatsnew/3 6 datetime1371759
Ref: cad1371759
Ref: datetime<5>-Footnote-11372781
Ref: datetime<5>-Footnote-21372846
Ref: datetime<5>-Footnote-31372911
Ref: datetime<5>-Footnote-41372976
Node: decimal<2>1373041
Ref: whatsnew/3 6 decimal1373151
Ref: cb21373151
Ref: decimal<2>-Footnote-11373564
Node: distutils<5>1373629
Ref: whatsnew/3 6 distutils1373736
Ref: cb41373736
Ref: distutils<5>-Footnote-11374110
Node: email<2>1374175
Ref: whatsnew/3 6 email1374284
Ref: cb51374284
Ref: email<2>-Footnote-11375200
Ref: email<2>-Footnote-21375265
Ref: email<2>-Footnote-31375330
Node: encodings<2>1375395
Ref: whatsnew/3 6 encodings1375499
Ref: cb91375499
Ref: encodings<2>-Footnote-11375794
Node: enum<7>1375859
Ref: whatsnew/3 6 enum1375970
Ref: cba1375970
Ref: enum<7>-Footnote-11376727
Node: faulthandler<2>1376792
Ref: whatsnew/3 6 faulthandler1376903
Ref: cbd1376903
Ref: faulthandler<2>-Footnote-11377166
Node: fileinput<2>1377231
Ref: whatsnew/3 6 fileinput1377345
Ref: cbf1377345
Ref: fileinput<2>-Footnote-11377533
Node: hashlib<5>1377598
Ref: whatsnew/3 6 hashlib1377711
Ref: cc11377711
Ref: hashlib<5>-Footnote-11378760
Ref: hashlib<5>-Footnote-21378825
Ref: hashlib<5>-Footnote-31378890
Ref: hashlib<5>-Footnote-41378955
Node: http client<2>1379020
Ref: whatsnew/3 6 http-client1379138
Ref: cc81379138
Ref: http client<2>-Footnote-11379398
Node: idlelib e IDLE<2>1379463
Ref: whatsnew/3 6 idlelib-and-idle1379583
Ref: ccb1379583
Ref: idlelib e IDLE<2>-Footnote-11383131
Ref: idlelib e IDLE<2>-Footnote-21383196
Ref: idlelib e IDLE<2>-Footnote-31383261
Ref: idlelib e IDLE<2>-Footnote-41383328
Ref: idlelib e IDLE<2>-Footnote-51383393
Ref: idlelib e IDLE<2>-Footnote-61383458
Ref: idlelib e IDLE<2>-Footnote-71383523
Ref: idlelib e IDLE<2>-Footnote-81383588
Ref: idlelib e IDLE<2>-Footnote-91383653
Ref: idlelib e IDLE<2>-Footnote-101383718
Ref: idlelib e IDLE<2>-Footnote-111383784
Node: importlib<6>1383852
Ref: whatsnew/3 6 importlib1383968
Ref: ccc1383968
Ref: importlib<6>-Footnote-11384795
Node: inspect<6>1384860
Ref: whatsnew/3 6 inspect1384963
Ref: cd21384963
Ref: inspect<6>-Footnote-11385738
Ref: inspect<6>-Footnote-21385803
Node: json1385868
Ref: whatsnew/3 6 json1385969
Ref: cd31385969
Ref: json-Footnote-11386241
Node: logging<4>1386306
Ref: whatsnew/3 6 logging1386404
Ref: cd51386404
Ref: logging<4>-Footnote-11386668
Node: math<7>1386733
Ref: whatsnew/3 6 math1386845
Ref: cd71386845
Ref: math<7>-Footnote-11387077
Ref: math<7>-Footnote-21387142
Node: multiprocessing<5>1387184
Ref: whatsnew/3 6 multiprocessing1387291
Ref: cd81387291
Ref: multiprocessing<5>-Footnote-11387520
Node: os<8>1387584
Ref: whatsnew/3 6 os1387694
Ref: cdb1387694
Ref: os<8>-Footnote-11388694
Ref: os<8>-Footnote-21388759
Ref: os<8>-Footnote-31388801
Node: pathlib<9>1388843
Ref: whatsnew/3 6 pathlib1388941
Ref: cde1388941
Ref: pathlib<9>-Footnote-11389175
Node: pdb<5>1389240
Ref: whatsnew/3 6 pdb1389342
Ref: cdf1389342
Node: pickle<2>1389499
Ref: whatsnew/3 6 pickle1389602
Ref: ce01389602
Ref: pickle<2>-Footnote-11389919
Node: pickletools1389984
Ref: whatsnew/3 6 pickletools1390089
Ref: ce21390089
Ref: pickletools-Footnote-11390317
Node: pydoc<3>1390382
Ref: whatsnew/3 6 pydoc1390487
Ref: ce41390487
Ref: pydoc<3>-Footnote-11390881
Ref: pydoc<3>-Footnote-21390945
Node: random<4>1391010
Ref: whatsnew/3 6 random1391109
Ref: ce51391109
Ref: random<4>-Footnote-11391364
Node: re<5>1391429
Ref: whatsnew/3 6 re1391528
Ref: ce71391528
Ref: re<5>-Footnote-11392239
Ref: re<5>-Footnote-21392305
Ref: re<5>-Footnote-31392370
Node: readline1392435
Ref: whatsnew/3 6 readline1392536
Ref: ce91392536
Ref: readline-Footnote-11392767
Node: rlcompleter1392832
Ref: whatsnew/3 6 rlcompleter1392936
Ref: ceb1392936
Ref: rlcompleter-Footnote-11393240
Ref: rlcompleter-Footnote-21393305
Node: shlex<2>1393370
Ref: whatsnew/3 6 shlex1393473
Ref: cec1393473
Ref: shlex<2>-Footnote-11393763
Node: site<3>1393830
Ref: whatsnew/3 6 site1393932
Ref: cef1393932
Ref: site<3>-Footnote-11394196
Node: sqlite3<7>1394261
Ref: whatsnew/3 6 sqlite31394364
Ref: cf01394364
Ref: sqlite3<7>-Footnote-11394567
Node: socket<7>1394632
Ref: whatsnew/3 6 socket1394743
Ref: cf21394743
Ref: socket<7>-Footnote-11395700
Ref: socket<7>-Footnote-21395765
Ref: socket<7>-Footnote-31395830
Ref: socket<7>-Footnote-41395895
Ref: socket<7>-Footnote-51395960
Node: socketserver<2>1396025
Ref: whatsnew/3 6 socketserver1396132
Ref: cf91396132
Ref: socketserver<2>-Footnote-11396767
Ref: socketserver<2>-Footnote-21396832
Node: ssl<7>1396897
Ref: whatsnew/3 6 ssl1397008
Ref: cfd1397008
Ref: ssl<7>-Footnote-11398435
Ref: ssl<7>-Footnote-21398500
Ref: ssl<7>-Footnote-31398565
Ref: ssl<7>-Footnote-41398630
Ref: ssl<7>-Footnote-51398695
Ref: ssl<7>-Footnote-61398760
Ref: ssl<7>-Footnote-71398825
Ref: ssl<7>-Footnote-81398890
Node: statistics<5>1398945
Ref: whatsnew/3 6 statistics1399047
Ref: d011399047
Ref: statistics<5>-Footnote-11399237
Node: struct1399302
Ref: whatsnew/3 6 struct1399411
Ref: d031399411
Ref: struct-Footnote-11399642
Node: subprocess<3>1399707
Ref: whatsnew/3 6 subprocess1399810
Ref: d041399810
Ref: subprocess<3>-Footnote-11400503
Ref: subprocess<3>-Footnote-21400568
Node: sys<10>1400632
Ref: whatsnew/3 6 sys1400738
Ref: d061400738
Ref: sys<10>-Footnote-11401339
Ref: sys<10>-Footnote-21401404
Node: telnetlib1401469
Ref: whatsnew/3 6 telnetlib1401569
Ref: d091401569
Ref: telnetlib-Footnote-11401744
Node: time<6>1401809
Ref: whatsnew/3 6 time1401908
Ref: d0a1401908
Node: timeit1402047
Ref: whatsnew/3 6 timeit1402147
Ref: d0c1402147
Ref: timeit-Footnote-11402606
Ref: timeit-Footnote-21402670
Node: tkinter<6>1402735
Ref: whatsnew/3 6 tkinter1402840
Ref: d0f1402840
Ref: tkinter<6>-Footnote-11403284
Node: traceback<4>1403349
Ref: whatsnew/3 6 traceback1403462
Ref: d101403462
Ref: whatsnew/3 6 whatsnew36-traceback1403462
Ref: c8b1403462
Ref: traceback<4>-Footnote-11404097
Node: tracemalloc<3>1404162
Ref: whatsnew/3 6 tracemalloc1404274
Ref: d111404274
Ref: tracemalloc<3>-Footnote-11404634
Node: typing<9>1404699
Ref: whatsnew/3 6 typing1404813
Ref: d131404813
Ref: whatsnew/3 6 whatsnew36-typing1404813
Ref: c581404813
Ref: typing<9>-Footnote-11406465
Ref: typing<9>-Footnote-21406515
Ref: typing<9>-Footnote-31406580
Ref: typing<9>-Footnote-41406645
Ref: typing<9>-Footnote-51406687
Ref: typing<9>-Footnote-61406737
Ref: typing<9>-Footnote-71406789
Node: unicodedata<7>1406841
Ref: whatsnew/3 6 unicodedata1406957
Ref: d171406957
Ref: unicodedata<7>-Footnote-11407145
Node: unittest mock<2>1407196
Ref: whatsnew/3 6 unittest-mock1407317
Ref: d181407317
Ref: unittest mock<2>-Footnote-11407834
Ref: unittest mock<2>-Footnote-21407899
Node: urllib request1407964
Ref: whatsnew/3 6 urllib-request1408089
Ref: d1c1408089
Ref: urllib request-Footnote-11408461
Node: urllib robotparser1408526
Ref: whatsnew/3 6 urllib-robotparser1408642
Ref: d1e1408642
Ref: urllib robotparser-Footnote-11408887
Node: venv<5>1408952
Ref: whatsnew/3 6 venv1409063
Ref: d201409063
Ref: venv<5>-Footnote-11409350
Node: avisos<4>1409415
Ref: whatsnew/3 6 warnings1409514
Ref: d211409514
Ref: avisos<4>-Footnote-11410783
Ref: avisos<4>-Footnote-21410848
Node: winreg1410913
Ref: whatsnew/3 6 winreg1411013
Ref: d231411013
Ref: winreg-Footnote-11411186
Node: winsound1411251
Ref: whatsnew/3 6 winsound1411355
Ref: d251411355
Ref: winsound-Footnote-11411554
Node: xmlrpc client1411619
Ref: whatsnew/3 6 xmlrpc-client1411727
Ref: d291411727
Ref: xmlrpc client-Footnote-11412020
Node: zipfile<3>1412085
Ref: whatsnew/3 6 zipfile1412189
Ref: d2a1412189
Ref: zipfile<3>-Footnote-11412723
Ref: zipfile<3>-Footnote-21412788
Node: zlib1412853
Ref: whatsnew/3 6 zlib1412935
Ref: d2e1412935
Ref: zlib-Footnote-11413191
Ref: zlib-Footnote-21413256
Node: Otimizações<8>1413321
Ref: whatsnew/3 6 optimizations1413476
Ref: d301413476
Ref: Otimizações<8>-Footnote-11417343
Ref: Otimizações<8>-Footnote-21417408
Ref: Otimizações<8>-Footnote-31417473
Ref: Otimizações<8>-Footnote-41417538
Ref: Otimizações<8>-Footnote-51417603
Ref: Otimizações<8>-Footnote-61417668
Ref: Otimizações<8>-Footnote-71417733
Ref: Otimizações<8>-Footnote-81417798
Ref: Otimizações<8>-Footnote-91417863
Ref: Otimizações<8>-Footnote-101417928
Ref: Otimizações<8>-Footnote-111417994
Ref: Otimizações<8>-Footnote-121418060
Ref: Otimizações<8>-Footnote-131418126
Ref: Otimizações<8>-Footnote-141418192
Ref: Otimizações<8>-Footnote-151418258
Ref: Otimizações<8>-Footnote-161418324
Ref: Otimizações<8>-Footnote-171418390
Ref: Otimizações<8>-Footnote-181418456
Ref: Otimizações<8>-Footnote-191418522
Ref: Otimizações<8>-Footnote-201418588
Ref: Otimizações<8>-Footnote-211418654
Node: Mudanças a construções e API C<2>1418720
Ref: whatsnew/3 6 build-and-c-api-changes1418871
Ref: d361418871
Ref: Mudanças a construções e API C<2>-Footnote-11421341
Ref: Mudanças a construções e API C<2>-Footnote-21421383
Ref: Mudanças a construções e API C<2>-Footnote-31421448
Ref: Mudanças a construções e API C<2>-Footnote-41421513
Ref: Mudanças a construções e API C<2>-Footnote-51421578
Ref: Mudanças a construções e API C<2>-Footnote-61421642
Ref: Mudanças a construções e API C<2>-Footnote-71421707
Ref: Mudanças a construções e API C<2>-Footnote-81421772
Ref: Mudanças a construções e API C<2>-Footnote-91421837
Ref: Mudanças a construções e API C<2>-Footnote-101421902
Node: Other Improvements1421968
Ref: whatsnew/3 6 other-improvements1422120
Ref: d3c1422120
Node: Descontinuados<9>1422489
Ref: whatsnew/3 6 deprecated1422617
Ref: d3e1422617
Node: New Keywords1422961
Ref: whatsnew/3 6 new-keywords1423062
Ref: d3f1423062
Ref: New Keywords-Footnote-11423455
Node: Deprecated Python behavior1423497
Ref: whatsnew/3 6 deprecated-python-behavior1423657
Ref: d401423657
Ref: Deprecated Python behavior-Footnote-11424864
Ref: Deprecated Python behavior-Footnote-21424929
Ref: Deprecated Python behavior-Footnote-31424994
Node: Deprecated Python modules functions and methods<2>1425059
Ref: whatsnew/3 6 deprecated-python-modules-functions-and-methods1425213
Ref: d421425213
Node: asynchat1425522
Ref: whatsnew/3 6 asynchat1425634
Ref: d431425634
Ref: asynchat-Footnote-11425818
Node: asyncore1425883
Ref: whatsnew/3 6 asyncore1426010
Ref: d441426010
Ref: asyncore-Footnote-11426194
Node: dbm<4>1426259
Ref: whatsnew/3 6 dbm1426390
Ref: d451426390
Ref: dbm<4>-Footnote-11426750
Node: distutils<6>1426815
Ref: whatsnew/3 6 id21426941
Ref: d461426941
Ref: distutils<6>-Footnote-11427271
Node: grp1427336
Ref: whatsnew/3 6 grp1427468
Ref: d471427468
Ref: grp-Footnote-11427666
Node: importlib<7>1427731
Ref: whatsnew/3 6 id31427856
Ref: d491427856
Node: os<9>1428510
Ref: whatsnew/3 6 id41428637
Ref: d4e1428637
Ref: os<9>-Footnote-11428931
Ref: os<9>-Footnote-21428996
Node: re<6>1429061
Ref: whatsnew/3 6 id51429182
Ref: d501429182
Ref: re<6>-Footnote-11429508
Node: ssl<8>1429573
Ref: whatsnew/3 6 id61429699
Ref: d511429699
Ref: ssl<8>-Footnote-11430494
Ref: ssl<8>-Footnote-21430559
Ref: ssl<8>-Footnote-31430624
Node: tkinter<7>1430689
Ref: whatsnew/3 6 id71430817
Ref: d521430817
Node: venv<6>1430970
Ref: whatsnew/3 6 id81431083
Ref: d531431083
Ref: whatsnew/3 6 whatsnew36-venv1431083
Ref: d541431083
Ref: venv<6>-Footnote-11431434
Node: xml<6>1431499
Ref: whatsnew/3 6 xml1431673
Ref: d551431673
Ref: xml<6>-Footnote-11431977
Node: Deprecated functions and types of the C API<2>1432032
Ref: whatsnew/3 6 deprecated-functions-and-types-of-the-c-api1432180
Ref: d561432180
Node: Deprecated Build Options1432529
Ref: whatsnew/3 6 deprecated-build-options1432662
Ref: d581432662
Node: Removidos<9>1433103
Ref: whatsnew/3 6 removed1433234
Ref: d591433234
Node: Remoção de APIs e recursos<3>1433344
Ref: whatsnew/3 6 api-and-feature-removals1433424
Ref: d5a1433424
Ref: Remoção de APIs e recursos<3>-Footnote-11435520
Ref: Remoção de APIs e recursos<3>-Footnote-21435585
Node: Porting to Python 3 61435663
Ref: whatsnew/3 6 porting-to-python-3-61435808
Ref: d5d1435808
Node: Changes in ‘python’ Command Behavior1436241
Ref: whatsnew/3 6 changes-in-python-command-behavior1436377
Ref: d5e1436377
Ref: Changes in ‘python’ Command Behavior-Footnote-11436857
Node: Alterações na API Python<8>1436922
Ref: whatsnew/3 6 changes-in-the-python-api1437092
Ref: d5f1437092
Ref: Alterações na API Python<8>-Footnote-11447219
Ref: Alterações na API Python<8>-Footnote-21447283
Ref: Alterações na API Python<8>-Footnote-31447325
Ref: Alterações na API Python<8>-Footnote-41447390
Ref: Alterações na API Python<8>-Footnote-51447455
Ref: Alterações na API Python<8>-Footnote-61447520
Ref: Alterações na API Python<8>-Footnote-71447585
Ref: Alterações na API Python<8>-Footnote-81447650
Ref: Alterações na API Python<8>-Footnote-91447715
Ref: Alterações na API Python<8>-Footnote-101447780
Ref: Alterações na API Python<8>-Footnote-111447846
Ref: Alterações na API Python<8>-Footnote-121447889
Ref: Alterações na API Python<8>-Footnote-131447955
Ref: Alterações na API Python<8>-Footnote-141448021
Ref: Alterações na API Python<8>-Footnote-151448087
Ref: Alterações na API Python<8>-Footnote-161448153
Ref: Alterações na API Python<8>-Footnote-171448218
Ref: Alterações na API Python<8>-Footnote-181448284
Ref: Alterações na API Python<8>-Footnote-191448350
Ref: Alterações na API Python<8>-Footnote-201448416
Node: Alterações na API C<13>1448482
Ref: whatsnew/3 6 changes-in-the-c-api1448650
Ref: d711448650
Ref: Alterações na API C<13>-Footnote-11449304
Ref: Alterações na API C<13>-Footnote-21449369
Node: Alterações de bytecode do CPython<8>1449433
Ref: whatsnew/3 6 cpython-bytecode-changes1449563
Ref: d731449563
Ref: Alterações de bytecode do CPython<8>-Footnote-11451209
Ref: Alterações de bytecode do CPython<8>-Footnote-21451274
Ref: Alterações de bytecode do CPython<8>-Footnote-31451339
Ref: Alterações de bytecode do CPython<8>-Footnote-41451404
Ref: Alterações de bytecode do CPython<8>-Footnote-51451469
Ref: Alterações de bytecode do CPython<8>-Footnote-61451534
Ref: Alterações de bytecode do CPython<8>-Footnote-71451599
Ref: Alterações de bytecode do CPython<8>-Footnote-81451664
Ref: Alterações de bytecode do CPython<8>-Footnote-91451729
Node: Notable changes in Python 3 6 21451794
Ref: whatsnew/3 6 notable-changes-in-python-3-6-21451958
Ref: d7a1451958
Node: Novo alvo de construção make regen-all1452141
Ref: whatsnew/3 6 new-make-regen-all-build-target1452302
Ref: d7b1452302
Ref: Novo alvo de construção make regen-all-Footnote-11453210
Ref: Novo alvo de construção make regen-all-Footnote-21453278
Node: Remoção do alvo de construção make touch1453343
Ref: whatsnew/3 6 removal-of-make-touch-build-target1453504
Ref: d7c1453504
Ref: Remoção do alvo de construção make touch-Footnote-11453969
Node: Notable changes in Python 3 6 41454034
Ref: whatsnew/3 6 notable-changes-in-python-3-6-41454208
Ref: d7d1454208
Ref: Notable changes in Python 3 6 4-Footnote-11454581
Ref: Notable changes in Python 3 6 4-Footnote-21454646
Node: Notable changes in Python 3 6 51454711
Ref: whatsnew/3 6 notable-changes-in-python-3-6-51454885
Ref: d7e1454885
Ref: Notable changes in Python 3 6 5-Footnote-11455188
Node: Notable changes in Python 3 6 71455253
Ref: whatsnew/3 6 notable-changes-in-python-3-6-71455428
Ref: d7f1455428
Ref: Notable changes in Python 3 6 7-Footnote-11455934
Ref: Notable changes in Python 3 6 7-Footnote-21455989
Node: Notable changes in Python 3 6 101456054
Ref: whatsnew/3 6 notable-changes-in-python-3-6-101456230
Ref: d801456230
Ref: Notable changes in Python 3 6 10-Footnote-11456768
Node: Notable changes in Python 3 6 131456833
Ref: whatsnew/3 6 notable-changes-in-python-3-6-131457010
Ref: d811457010
Ref: Notable changes in Python 3 6 13-Footnote-11457812
Node: Notable changes in Python 3 6 141457877
Ref: whatsnew/3 6 notable-changes-in-python-3-6-141458013
Ref: d821458013
Ref: Notable changes in Python 3 6 14-Footnote-11458992
Ref: Notable changes in Python 3 6 14-Footnote-21459047
Node: O que há de novo no Python 3 51459102
Ref: whatsnew/3 5 doc1459272
Ref: d831459272
Ref: whatsnew/3 5 translation-repo1459272
Ref: d841459272
Ref: whatsnew/3 5 what-s-new-in-python-3-51459272
Ref: d851459272
Ref: O que há de novo no Python 3 5-Footnote-11460309
Ref: O que há de novo no Python 3 5-Footnote-21460369
Node: Resumo – Destaques da versão<9>1460411
Ref: whatsnew/3 5 summary-release-highlights1460547
Ref: d861460547
Ref: Resumo – Destaques da versão<9>-Footnote-11464303
Ref: Resumo – Destaques da versão<9>-Footnote-21464367
Ref: Resumo – Destaques da versão<9>-Footnote-31464432
Ref: Resumo – Destaques da versão<9>-Footnote-41464497
Ref: Resumo – Destaques da versão<9>-Footnote-51464562
Ref: Resumo – Destaques da versão<9>-Footnote-61464627
Ref: Resumo – Destaques da versão<9>-Footnote-71464692
Node: Novas funcionalidades<14>1464757
Ref: whatsnew/3 5 new-features1464934
Ref: d991464934
Node: PEP 492 - Coroutines with async and await syntax1466048
Ref: whatsnew/3 5 pep-492-coroutines-with-async-and-await-syntax1466229
Ref: d9a1466229
Ref: whatsnew/3 5 whatsnew-pep-4921466229
Ref: d871466229
Ref: PEP 492 - Coroutines with async and await syntax-Footnote-11469315
Ref: PEP 492 - Coroutines with async and await syntax-Footnote-21469357
Node: PEP 465 - A dedicated infix operator for matrix multiplication1469399
Ref: whatsnew/3 5 pep-465-a-dedicated-infix-operator-for-matrix-multiplication1469635
Ref: da01469635
Ref: whatsnew/3 5 whatsnew-pep-4651469635
Ref: d881469635
Ref: PEP 465 - A dedicated infix operator for matrix multiplication-Footnote-11471043
Ref: PEP 465 - A dedicated infix operator for matrix multiplication-Footnote-21471085
Node: PEP 448 - Additional Unpacking Generalizations1471127
Ref: whatsnew/3 5 pep-448-additional-unpacking-generalizations1471375
Ref: da41471375
Ref: whatsnew/3 5 whatsnew-pep-4481471375
Ref: d891471375
Ref: PEP 448 - Additional Unpacking Generalizations-Footnote-11472495
Ref: PEP 448 - Additional Unpacking Generalizations-Footnote-21472537
Node: PEP 461 - percent formatting support for bytes and bytearray1472579
Ref: whatsnew/3 5 pep-461-percent-formatting-support-for-bytes-and-bytearray1472785
Ref: da81472785
Ref: whatsnew/3 5 whatsnew-pep-4611472785
Ref: d8c1472785
Ref: PEP 461 - percent formatting support for bytes and bytearray-Footnote-11474326
Ref: PEP 461 - percent formatting support for bytes and bytearray-Footnote-21474368
Node: PEP 484 - Type Hints1474410
Ref: whatsnew/3 5 pep-484-type-hints1474642
Ref: daa1474642
Ref: whatsnew/3 5 whatsnew-pep-4841474642
Ref: d8a1474642
Ref: PEP 484 - Type Hints-Footnote-11476300
Ref: PEP 484 - Type Hints-Footnote-21476342
Ref: PEP 484 - Type Hints-Footnote-31476384
Ref: PEP 484 - Type Hints-Footnote-41476414
Ref: PEP 484 - Type Hints-Footnote-51476456
Node: PEP 471 - os scandir function – a better and faster directory iterator1476498
Ref: whatsnew/3 5 pep-471-os-scandir-function-a-better-and-faster-directory-iterator1476715
Ref: dab1476715
Ref: whatsnew/3 5 whatsnew-pep-4711476715
Ref: d951476715
Ref: PEP 471 - os scandir function – a better and faster directory iterator-Footnote-11478076
Ref: PEP 471 - os scandir function – a better and faster directory iterator-Footnote-21478118
Node: PEP 475 Retry system calls failing with EINTR1478160
Ref: whatsnew/3 5 pep-475-retry-system-calls-failing-with-eintr1478412
Ref: dad1478412
Ref: whatsnew/3 5 whatsnew-pep-4751478412
Ref: dae1478412
Ref: PEP 475 Retry system calls failing with EINTR-Footnote-11481479
Ref: PEP 475 Retry system calls failing with EINTR-Footnote-21481521
Node: PEP 479 Change StopIteration handling inside generators1481563
Ref: whatsnew/3 5 pep-479-change-stopiteration-handling-inside-generators1481794
Ref: dd41481794
Ref: whatsnew/3 5 whatsnew-pep-4791481794
Ref: d411481794
Ref: PEP 479 Change StopIteration handling inside generators-Footnote-11483729
Ref: PEP 479 Change StopIteration handling inside generators-Footnote-21483771
Node: PEP 485 A function for testing approximate equality1483813
Ref: whatsnew/3 5 pep-485-a-function-for-testing-approximate-equality1484061
Ref: dd61484061
Ref: whatsnew/3 5 whatsnew-pep-4851484061
Ref: dd71484061
Ref: PEP 485 A function for testing approximate equality-Footnote-11485251
Ref: PEP 485 A function for testing approximate equality-Footnote-21485293
Node: PEP 486 Make the Python Launcher aware of virtual environments1485335
Ref: whatsnew/3 5 pep-486-make-the-python-launcher-aware-of-virtual-environments1485560
Ref: dda1485560
Ref: whatsnew/3 5 whatsnew-pep-4861485560
Ref: ddb1485560
Ref: PEP 486 Make the Python Launcher aware of virtual environments-Footnote-11486139
Ref: PEP 486 Make the Python Launcher aware of virtual environments-Footnote-21486181
Ref: PEP 486 Make the Python Launcher aware of virtual environments-Footnote-31486223
Node: PEP 488 Elimination of PYO files1486265
Ref: whatsnew/3 5 pep-488-elimination-of-pyo-files1486490
Ref: ddc1486490
Ref: whatsnew/3 5 whatsnew-pep-4881486490
Ref: d911486490
Ref: PEP 488 Elimination of PYO files-Footnote-11487361
Ref: PEP 488 Elimination of PYO files-Footnote-21487403
Node: PEP 489 Multi-phase extension module initialization1487445
Ref: whatsnew/3 5 pep-489-multi-phase-extension-module-initialization1487599
Ref: ddf1487599
Ref: whatsnew/3 5 whatsnew-pep-4891487599
Ref: d921487599
Ref: PEP 489 Multi-phase extension module initialization-Footnote-11488370
Ref: PEP 489 Multi-phase extension module initialization-Footnote-21488412
Ref: PEP 489 Multi-phase extension module initialization-Footnote-31488454
Node: Outras mudanças na linguagem<9>1488496
Ref: whatsnew/3 5 other-language-changes1488656
Ref: de01488656
Ref: Outras mudanças na linguagem<9>-Footnote-11489682
Ref: Outras mudanças na linguagem<9>-Footnote-21489747
Ref: Outras mudanças na linguagem<9>-Footnote-31489812
Ref: Outras mudanças na linguagem<9>-Footnote-41489877
Ref: Outras mudanças na linguagem<9>-Footnote-51489942
Ref: Outras mudanças na linguagem<9>-Footnote-61490007
Ref: Outras mudanças na linguagem<9>-Footnote-71490072
Node: Novos módulos<9>1490137
Ref: whatsnew/3 5 new-modules1490294
Ref: de21490294
Node: typing<10>1490389
Ref: whatsnew/3 5 typing1490471
Ref: de31490471
Node: zipapp<2>1490682
Ref: whatsnew/3 5 whatsnew-zipapp1490764
Ref: d8b1490764
Ref: whatsnew/3 5 zipapp1490764
Ref: de41490764
Ref: zipapp<2>-Footnote-11491479
Ref: zipapp<2>-Footnote-21491521
Ref: zipapp<2>-Footnote-31491588
Ref: zipapp<2>-Footnote-41491653
Node: Módulos melhorados<9>1491695
Ref: whatsnew/3 5 improved-modules1491846
Ref: de51491846
Node: argparse<4>1493553
Ref: whatsnew/3 5 argparse1493643
Ref: de61493643
Ref: argparse<4>-Footnote-11493966
Node: asyncio<10>1494031
Ref: whatsnew/3 5 asyncio1494133
Ref: de91494133
Ref: asyncio<10>-Footnote-11497611
Ref: asyncio<10>-Footnote-21497676
Ref: asyncio<10>-Footnote-31497741
Node: bz21497786
Ref: whatsnew/3 5 bz21497880
Ref: df31497880
Ref: bz2-Footnote-11498135
Node: cgi1498200
Ref: whatsnew/3 5 cgi1498291
Ref: df51498291
Ref: cgi-Footnote-11498486
Node: cmath<2>1498551
Ref: whatsnew/3 5 cmath1498646
Ref: df61498646
Ref: cmath<2>-Footnote-11498860
Node: código1498925
Ref: whatsnew/3 5 code1499031
Ref: df71499031
Ref: código-Footnote-11499287
Node: collections<5>1499352
Ref: whatsnew/3 5 collections1499468
Ref: df91499468
Ref: whatsnew/3 5 whatsnew-ordereddict1499509
Ref: d931499509
Ref: collections<5>-Footnote-11500793
Ref: collections<5>-Footnote-21500858
Ref: collections<5>-Footnote-31500923
Ref: collections<5>-Footnote-41500988
Ref: collections<5>-Footnote-51501053
Node: collections abc<3>1501118
Ref: whatsnew/3 5 collections-abc1501240
Ref: e041501240
Ref: collections abc<3>-Footnote-11501910
Ref: collections abc<3>-Footnote-21501975
Ref: collections abc<3>-Footnote-31502040
Ref: collections abc<3>-Footnote-41502105
Node: compileall<4>1502153
Ref: whatsnew/3 5 compileall1502282
Ref: e0a1502282
Ref: compileall<4>-Footnote-11503157
Ref: compileall<4>-Footnote-21503222
Ref: compileall<4>-Footnote-31503287
Node: concurrent futures<5>1503352
Ref: whatsnew/3 5 concurrent-futures1503478
Ref: e0d1503478
Ref: concurrent futures<5>-Footnote-11503980
Ref: concurrent futures<5>-Footnote-21504045
Node: configparser<4>1504110
Ref: whatsnew/3 5 configparser1504236
Ref: e0f1504236
Ref: configparser<4>-Footnote-11505187
Node: contextlib<5>1505252
Ref: whatsnew/3 5 contextlib1505363
Ref: e101505363
Ref: contextlib<5>-Footnote-11505973
Node: csv<3>1506038
Ref: whatsnew/3 5 csv1506143
Ref: e131506143
Ref: csv<3>-Footnote-11506347
Node: curses<4>1506412
Ref: whatsnew/3 5 curses1506510
Ref: e151506510
Ref: curses<4>-Footnote-11506798
Node: dbm<5>1506862
Ref: whatsnew/3 5 dbm1506961
Ref: e191506961
Ref: dbm<5>-Footnote-11507164
Node: difflib1507229
Ref: whatsnew/3 5 difflib1507331
Ref: e1a1507331
Ref: difflib-Footnote-11507867
Ref: difflib-Footnote-21507931
Node: distutils<7>1507996
Ref: whatsnew/3 5 distutils1508102
Ref: e1d1508102
Ref: distutils<7>-Footnote-11508553
Ref: distutils<7>-Footnote-21508617
Node: doctest<3>1508682
Ref: whatsnew/3 5 doctest1508789
Ref: e1e1508789
Ref: doctest<3>-Footnote-11509074
Node: email<3>1509139
Ref: whatsnew/3 5 email1509241
Ref: e211509241
Ref: email<3>-Footnote-11510352
Ref: email<3>-Footnote-21510417
Ref: email<3>-Footnote-31510482
Ref: email<3>-Footnote-41510541
Ref: email<3>-Footnote-51510600
Ref: email<3>-Footnote-61510665
Node: enum<8>1510730
Ref: whatsnew/3 5 enum1510837
Ref: e271510837
Ref: enum<8>-Footnote-11511228
Node: faulthandler<3>1511293
Ref: whatsnew/3 5 faulthandler1511404
Ref: e281511404
Ref: faulthandler<3>-Footnote-11511716
Node: functools<4>1511781
Ref: whatsnew/3 5 functools1511892
Ref: e2c1511892
Ref: whatsnew/3 5 whatsnew-lrucache1511931
Ref: d961511931
Ref: functools<4>-Footnote-11512157
Node: glob<3>1512222
Ref: whatsnew/3 5 glob1512325
Ref: e2d1512325
Ref: glob<3>-Footnote-11512577
Node: gzip<4>1512642
Ref: whatsnew/3 5 gzip1512738
Ref: e2e1512738
Ref: gzip<4>-Footnote-11512963
Node: heapq1513028
Ref: whatsnew/3 5 heapq1513124
Ref: e2f1513124
Ref: heapq-Footnote-11513764
Node: http<2>1513829
Ref: whatsnew/3 5 http1513932
Ref: e321513932
Ref: http<2>-Footnote-11514178
Node: http client<3>1514243
Ref: whatsnew/3 5 http-client1514358
Ref: e331514358
Ref: http client<3>-Footnote-11515102
Node: idlelib e IDLE<3>1515166
Ref: whatsnew/3 5 idlelib-and-idle1515284
Ref: e371515284
Node: imaplib<2>1515674
Ref: whatsnew/3 5 imaplib1515784
Ref: e381515784
Ref: imaplib<2>-Footnote-11516663
Ref: imaplib<2>-Footnote-21516727
Ref: imaplib<2>-Footnote-31516786
Ref: imaplib<2>-Footnote-41516845
Ref: imaplib<2>-Footnote-51516904
Ref: imaplib<2>-Footnote-61516969
Node: imghdr1517034
Ref: whatsnew/3 5 imghdr1517139
Ref: e3b1517139
Ref: imghdr-Footnote-11517427
Ref: imghdr-Footnote-21517459
Ref: imghdr-Footnote-31517524
Ref: imghdr-Footnote-41517567
Node: importlib<8>1517632
Ref: whatsnew/3 5 importlib1517737
Ref: e3c1517737
Ref: importlib<8>-Footnote-11518572
Ref: importlib<8>-Footnote-21518637
Ref: importlib<8>-Footnote-31518702
Node: inspect<7>1518767
Ref: whatsnew/3 5 inspect1518871
Ref: e401518871
Ref: inspect<7>-Footnote-11520428
Ref: inspect<7>-Footnote-21520493
Ref: inspect<7>-Footnote-31520558
Ref: inspect<7>-Footnote-41520623
Ref: inspect<7>-Footnote-51520688
Ref: inspect<7>-Footnote-61520753
Ref: inspect<7>-Footnote-71520818
Ref: inspect<7>-Footnote-81520883
Node: io<5>1520948
Ref: whatsnew/3 5 io1521052
Ref: e461521052
Ref: io<5>-Footnote-11521350
Node: ipaddress<4>1521415
Ref: whatsnew/3 5 ipaddress1521516
Ref: e4a1521516
Ref: ipaddress<4>-Footnote-11522550
Ref: ipaddress<4>-Footnote-21522615
Node: json<2>1522680
Ref: whatsnew/3 5 json1522788
Ref: e4c1522788
Ref: json<2>-Footnote-11523288
Ref: json<2>-Footnote-21523353
Node: linecache<2>1523418
Ref: whatsnew/3 5 linecache1523523
Ref: e4e1523523
Ref: linecache<2>-Footnote-11523933
Node: locale<6>1523998
Ref: whatsnew/3 5 locale1524106
Ref: e511524106
Ref: locale<6>-Footnote-11524671
Node: logging<5>1524736
Ref: whatsnew/3 5 logging1524836
Ref: e531524836
Ref: logging<5>-Footnote-11525806
Ref: logging<5>-Footnote-21525871
Node: lzma1525936
Ref: whatsnew/3 5 lzma1526034
Ref: e5a1526034
Ref: lzma-Footnote-11526296
Node: math<8>1526361
Ref: whatsnew/3 5 math1526467
Ref: e5c1526467
Ref: math<8>-Footnote-11527009
Ref: math<8>-Footnote-21527074
Ref: math<8>-Footnote-31527139
Node: multiprocessing<6>1527204
Ref: whatsnew/3 5 multiprocessing1527317
Ref: e5d1527317
Ref: multiprocessing<6>-Footnote-11527567
Node: operador<2>1527632
Ref: whatsnew/3 5 operator1527744
Ref: e5f1527744
Ref: operador<2>-Footnote-11528149
Ref: operador<2>-Footnote-21528214
Node: os<10>1528279
Ref: whatsnew/3 5 os1528384
Ref: e641528384
Ref: os<10>-Footnote-11530232
Ref: os<10>-Footnote-21530297
Ref: os<10>-Footnote-31530362
Ref: os<10>-Footnote-41530427
Ref: os<10>-Footnote-51530492
Ref: os<10>-Footnote-61530557
Node: pathlib<10>1530622
Ref: whatsnew/3 5 pathlib1530725
Ref: e6c1530725
Ref: pathlib<10>-Footnote-11532196
Ref: pathlib<10>-Footnote-21532261
Ref: pathlib<10>-Footnote-31532326
Ref: pathlib<10>-Footnote-41532391
Ref: pathlib<10>-Footnote-51532456
Node: pickle<3>1532521
Ref: whatsnew/3 5 pickle1532627
Ref: e751532627
Ref: pickle<3>-Footnote-11532943
Node: poplib<2>1533008
Ref: whatsnew/3 5 poplib1533108
Ref: e761533108
Ref: poplib<2>-Footnote-11533350
Ref: poplib<2>-Footnote-21533409
Node: re<7>1533474
Ref: whatsnew/3 5 re1533576
Ref: e781533576
Ref: re<7>-Footnote-11534812
Ref: re<7>-Footnote-21534876
Ref: re<7>-Footnote-31534941
Ref: re<7>-Footnote-41535008
Node: readline<2>1535073
Ref: whatsnew/3 5 readline1535175
Ref: e7e1535175
Ref: readline<2>-Footnote-11535438
Node: selectors1535503
Ref: whatsnew/3 5 selectors1535609
Ref: e801535609
Ref: selectors-Footnote-11535831
Node: shutil<5>1535896
Ref: whatsnew/3 5 shutil1536000
Ref: e811536000
Ref: shutil<5>-Footnote-11536479
Ref: shutil<5>-Footnote-21536544
Node: signal<3>1536608
Ref: whatsnew/3 5 signal1536711
Ref: e831536711
Ref: signal<3>-Footnote-11537178
Ref: signal<3>-Footnote-21537243
Node: smtpd<2>1537308
Ref: whatsnew/3 5 smtpd1537412
Ref: e841537412
Ref: smtpd<2>-Footnote-11539048
Ref: smtpd<2>-Footnote-21539113
Ref: smtpd<2>-Footnote-31539172
Ref: smtpd<2>-Footnote-41539237
Ref: smtpd<2>-Footnote-51539296
Ref: smtpd<2>-Footnote-61539361
Node: smtplib<2>1539426
Ref: whatsnew/3 5 smtplib1539527
Ref: e851539527
Ref: smtplib<2>-Footnote-11540148
Ref: smtplib<2>-Footnote-21540213
Ref: smtplib<2>-Footnote-31540278
Ref: smtplib<2>-Footnote-41540337
Node: sndhdr1540402
Ref: whatsnew/3 5 sndhdr1540504
Ref: e8a1540504
Ref: sndhdr-Footnote-11540707
Node: socket<8>1540772
Ref: whatsnew/3 5 socket1540870
Ref: e8b1540870
Ref: socket<8>-Footnote-11541841
Ref: socket<8>-Footnote-21541906
Ref: socket<8>-Footnote-31541971
Ref: socket<8>-Footnote-41542036
Node: ssl<9>1542101
Ref: whatsnew/3 5 ssl1542203
Ref: e8f1542203
Node: Підтримка BIO пам’яті1542352
Ref: whatsnew/3 5 memory-bio-support1542488
Ref: e901542488
Ref: whatsnew/3 5 whatsnew-sslmemorybio1542488
Ref: d941542488
Ref: Підтримка BIO пам’яті-Footnote-11543394
Node: Application-Layer Protocol Negotiation Support1543459
Ref: whatsnew/3 5 application-layer-protocol-negotiation-support1543617
Ref: e921543617
Ref: Application-Layer Protocol Negotiation Support-Footnote-11544322
Ref: Application-Layer Protocol Negotiation Support-Footnote-21544387
Node: Other Changes1544446
Ref: whatsnew/3 5 other-changes1544557
Ref: e961544557
Ref: Other Changes-Footnote-11546143
Ref: Other Changes-Footnote-21546208
Ref: Other Changes-Footnote-31546273
Ref: Other Changes-Footnote-41546338
Ref: Other Changes-Footnote-51546397
Ref: Other Changes-Footnote-61546462
Ref: Other Changes-Footnote-71546527
Ref: Other Changes-Footnote-81546592
Node: sqlite3<8>1546657
Ref: whatsnew/3 5 sqlite31546763
Ref: e9f1546763
Ref: sqlite3<8>-Footnote-11547092
Ref: sqlite3<8>-Footnote-21547157
Node: subprocess<4>1547222
Ref: whatsnew/3 5 subprocess1547329
Ref: ea11547329
Ref: whatsnew/3 5 whatsnew-subprocess1547329
Ref: d971547329
Ref: subprocess<4>-Footnote-11548343
Node: sys<11>1548408
Ref: whatsnew/3 5 sys1548517
Ref: ea31548517
Ref: sys<11>-Footnote-11549167
Ref: sys<11>-Footnote-21549232
Node: sysconfig<2>1549297
Ref: whatsnew/3 5 sysconfig1549403
Ref: ea41549403
Ref: sysconfig<2>-Footnote-11549636
Node: tarfile<7>1549701
Ref: whatsnew/3 5 tarfile1549812
Ref: ea51549812
Ref: tarfile<7>-Footnote-11550723
Ref: tarfile<7>-Footnote-21550788
Ref: tarfile<7>-Footnote-31550853
Node: threading<6>1550918
Ref: whatsnew/3 5 threading1551024
Ref: ea91551024
Ref: threading<6>-Footnote-11551276
Node: time<7>1551341
Ref: whatsnew/3 5 time1551446
Ref: eab1551446
Ref: time<7>-Footnote-11551623
Node: timeit<2>1551688
Ref: whatsnew/3 5 timeit1551791
Ref: eac1551791
Ref: timeit<2>-Footnote-11552256
Ref: timeit<2>-Footnote-21552321
Node: tkinter<8>1552385
Ref: whatsnew/3 5 tkinter1552493
Ref: eae1552493
Ref: tkinter<8>-Footnote-11552825
Node: traceback<5>1552890
Ref: whatsnew/3 5 traceback1552997
Ref: eaf1552997
Ref: whatsnew/3 5 whatsnew-traceback1552997
Ref: d981552997
Ref: traceback<5>-Footnote-11553590
Ref: traceback<5>-Footnote-21553655
Ref: traceback<5>-Footnote-31553720
Node: types<5>1553785
Ref: whatsnew/3 5 types1553896
Ref: eb61553896
Ref: types<5>-Footnote-11554340
Ref: types<5>-Footnote-21554405
Node: unicodedata<8>1554470
Ref: whatsnew/3 5 unicodedata1554580
Ref: eb91554580
Ref: unicodedata<8>-Footnote-11554732
Node: unittest<8>1554783
Ref: whatsnew/3 5 unittest1554901
Ref: eba1554901
Ref: unittest<8>-Footnote-11555695
Ref: unittest<8>-Footnote-21555760
Ref: unittest<8>-Footnote-31555825
Node: unittest mock<3>1555890
Ref: whatsnew/3 5 unittest-mock1556003
Ref: ebc1556003
Ref: unittest mock<3>-Footnote-11556944
Ref: unittest mock<3>-Footnote-21557009
Ref: unittest mock<3>-Footnote-31557074
Ref: unittest mock<3>-Footnote-41557139
Ref: unittest mock<3>-Footnote-51557204
Ref: unittest mock<3>-Footnote-61557269
Node: urllib<2>1557334
Ref: whatsnew/3 5 urllib1557443
Ref: ec21557443
Ref: urllib<2>-Footnote-11558603
Ref: urllib<2>-Footnote-21558668
Ref: urllib<2>-Footnote-31558732
Ref: urllib<2>-Footnote-41558797
Ref: urllib<2>-Footnote-51558862
Ref: urllib<2>-Footnote-61558921
Ref: urllib<2>-Footnote-71558980
Ref: urllib<2>-Footnote-81559039
Node: wsgiref1559104
Ref: whatsnew/3 5 wsgiref1559206
Ref: ec61559206
Ref: wsgiref-Footnote-11559444
Node: xmlrpc<2>1559508
Ref: whatsnew/3 5 xmlrpc1559608
Ref: ec81559608
Ref: xmlrpc<2>-Footnote-11559978
Ref: xmlrpc<2>-Footnote-21560043
Node: xml sax1560108
Ref: whatsnew/3 5 xml-sax1560211
Ref: ec91560211
Ref: xml sax-Footnote-11560544
Ref: xml sax-Footnote-21560608
Node: zipfile<4>1560673
Ref: whatsnew/3 5 zipfile1560758
Ref: ecc1560758
Ref: zipfile<4>-Footnote-11561098
Ref: zipfile<4>-Footnote-21561163
Node: Other module-level changes1561228
Ref: whatsnew/3 5 other-module-level-changes1561378
Ref: ecd1561378
Ref: Other module-level changes-Footnote-11561705
Node: Otimizações<9>1561770
Ref: whatsnew/3 5 optimizations1561934
Ref: ece1561934
Ref: Otimizações<9>-Footnote-11564989
Ref: Otimizações<9>-Footnote-21565054
Ref: Otimizações<9>-Footnote-31565119
Ref: Otimizações<9>-Footnote-41565184
Ref: Otimizações<9>-Footnote-51565249
Ref: Otimizações<9>-Footnote-61565314
Ref: Otimizações<9>-Footnote-71565379
Ref: Otimizações<9>-Footnote-81565444
Ref: Otimizações<9>-Footnote-91565509
Ref: Otimizações<9>-Footnote-101565574
Ref: Otimizações<9>-Footnote-111565640
Ref: Otimizações<9>-Footnote-121565706
Ref: Otimizações<9>-Footnote-131565772
Ref: Otimizações<9>-Footnote-141565838
Ref: Otimizações<9>-Footnote-151565904
Ref: Otimizações<9>-Footnote-161565970
Ref: Otimizações<9>-Footnote-171566036
Ref: Otimizações<9>-Footnote-181566102
Ref: Otimizações<9>-Footnote-191566168
Ref: Otimizações<9>-Footnote-201566234
Node: Mudanças a construções e API C<3>1566300
Ref: whatsnew/3 5 build-and-c-api-changes1566456
Ref: edb1566456
Ref: Mudanças a construções e API C<3>-Footnote-11570035
Ref: Mudanças a construções e API C<3>-Footnote-21570100
Ref: Mudanças a construções e API C<3>-Footnote-31570165
Ref: Mudanças a construções e API C<3>-Footnote-41570230
Ref: Mudanças a construções e API C<3>-Footnote-51570295
Ref: Mudanças a construções e API C<3>-Footnote-61570360
Ref: Mudanças a construções e API C<3>-Footnote-71570402
Ref: Mudanças a construções e API C<3>-Footnote-81570467
Ref: Mudanças a construções e API C<3>-Footnote-91570532
Ref: Mudanças a construções e API C<3>-Footnote-101570574
Node: Descontinuados<10>1570680
Ref: whatsnew/3 5 deprecated1570833
Ref: ee71570833
Node: New Keywords<2>1571140
Ref: whatsnew/3 5 new-keywords1571259
Ref: ee81571259
Ref: New Keywords<2>-Footnote-11571533
Node: Comportamento do Python descontinuado<2>1571575
Ref: whatsnew/3 5 deprecated-python-behavior1571732
Ref: ee91571732
Node: Unsupported Operating Systems1572169
Ref: whatsnew/3 5 unsupported-operating-systems1572361
Ref: eea1572361
Ref: Unsupported Operating Systems-Footnote-11572602
Node: Deprecated Python modules functions and methods<3>1572644
Ref: whatsnew/3 5 deprecated-python-modules-functions-and-methods1572787
Ref: eeb1572787
Ref: Deprecated Python modules functions and methods<3>-Footnote-11575699
Ref: Deprecated Python modules functions and methods<3>-Footnote-21575764
Ref: Deprecated Python modules functions and methods<3>-Footnote-31575828
Ref: Deprecated Python modules functions and methods<3>-Footnote-41575893
Ref: Deprecated Python modules functions and methods<3>-Footnote-51575958
Ref: Deprecated Python modules functions and methods<3>-Footnote-61576023
Ref: Deprecated Python modules functions and methods<3>-Footnote-71576088
Ref: Deprecated Python modules functions and methods<3>-Footnote-81576153
Node: Removidos<10>1576218
Ref: whatsnew/3 5 removed1576356
Ref: ef01576356
Node: Remoção de APIs e recursos<4>1576466
Ref: whatsnew/3 5 api-and-feature-removals1576547
Ref: ef11576547
Ref: Remoção de APIs e recursos<4>-Footnote-11577410
Ref: Remoção de APIs e recursos<4>-Footnote-21577474
Node: Porting to Python 3 51577539
Ref: whatsnew/3 5 porting-to-python-3-51577690
Ref: ef21577690
Node: Alterações no comportamento do Python<2>1578086
Ref: whatsnew/3 5 changes-in-python-behavior1578224
Ref: ef31578224
Node: Alterações na API Python<9>1578658
Ref: whatsnew/3 5 changes-in-the-python-api1578830
Ref: ef41578830
Ref: Alterações na API Python<9>-Footnote-11585748
Ref: Alterações na API Python<9>-Footnote-21585790
Ref: Alterações na API Python<9>-Footnote-31585855
Ref: Alterações na API Python<9>-Footnote-41585920
Ref: Alterações na API Python<9>-Footnote-51585985
Ref: Alterações na API Python<9>-Footnote-61586050
Ref: Alterações na API Python<9>-Footnote-71586115
Ref: Alterações na API Python<9>-Footnote-81586180
Ref: Alterações na API Python<9>-Footnote-91586245
Ref: Alterações na API Python<9>-Footnote-101586310
Ref: Alterações na API Python<9>-Footnote-111586376
Ref: Alterações na API Python<9>-Footnote-121586442
Ref: Alterações na API Python<9>-Footnote-131586507
Ref: Alterações na API Python<9>-Footnote-141586550
Ref: Alterações na API Python<9>-Footnote-151586610
Ref: Alterações na API Python<9>-Footnote-161586676
Ref: Alterações na API Python<9>-Footnote-171586742
Ref: Alterações na API Python<9>-Footnote-181586808
Node: Alterações na API C<14>1586873
Ref: whatsnew/3 5 changes-in-the-c-api1586994
Ref: efc1586994
Ref: Alterações na API C<14>-Footnote-11588298
Ref: Alterações na API C<14>-Footnote-21588363
Ref: Alterações na API C<14>-Footnote-31588428
Node: Notable changes in Python 3 5 41588470
Ref: whatsnew/3 5 notable-changes-in-python-3-5-41588599
Ref: f001588599
Node: Novo alvo de construção make regen-all<2>1588874
Ref: whatsnew/3 5 new-make-regen-all-build-target1589041
Ref: f011589041
Ref: Novo alvo de construção make regen-all<2>-Footnote-11589949
Ref: Novo alvo de construção make regen-all<2>-Footnote-21590017
Node: Remoção do alvo de construção make touch<2>1590082
Ref: whatsnew/3 5 removal-of-make-touch-build-target1590249
Ref: f021590249
Ref: Remoção do alvo de construção make touch<2>-Footnote-11590714
Node: O que há de novo no Python 3 41590779
Ref: whatsnew/3 4 doc1590954
Ref: f031590954
Ref: whatsnew/3 4 translation-repo1590954
Ref: f041590954
Ref: whatsnew/3 4 what-s-new-in-python-3-41590954
Ref: f051590954
Ref: O que há de novo no Python 3 4-Footnote-11591757
Ref: O que há de novo no Python 3 4-Footnote-21591817
Node: Resumo – Destaques da versão<10>1591859
Ref: whatsnew/3 4 summary-release-highlights1591996
Ref: f061591996
Ref: Resumo – Destaques da versão<10>-Footnote-11596354
Ref: Resumo – Destaques da versão<10>-Footnote-21596396
Ref: Resumo – Destaques da versão<10>-Footnote-31596438
Ref: Resumo – Destaques da versão<10>-Footnote-41596503
Ref: Resumo – Destaques da versão<10>-Footnote-51596545
Ref: Resumo – Destaques da versão<10>-Footnote-61596610
Ref: Resumo – Destaques da versão<10>-Footnote-71596652
Ref: Resumo – Destaques da versão<10>-Footnote-81596694
Ref: Resumo – Destaques da versão<10>-Footnote-91596736
Ref: Resumo – Destaques da versão<10>-Footnote-101596778
Ref: Resumo – Destaques da versão<10>-Footnote-111596821
Ref: Resumo – Destaques da versão<10>-Footnote-121596864
Ref: Resumo – Destaques da versão<10>-Footnote-131596907
Ref: Resumo – Destaques da versão<10>-Footnote-141596950
Ref: Resumo – Destaques da versão<10>-Footnote-151596993
Ref: Resumo – Destaques da versão<10>-Footnote-161597058
Ref: Resumo – Destaques da versão<10>-Footnote-171597124
Ref: Resumo – Destaques da versão<10>-Footnote-181597167
Ref: Resumo – Destaques da versão<10>-Footnote-191597210
Ref: Resumo – Destaques da versão<10>-Footnote-201597276
Ref: Resumo – Destaques da versão<10>-Footnote-211597322
Ref: Resumo – Destaques da versão<10>-Footnote-221597365
Ref: Resumo – Destaques da versão<10>-Footnote-231597408
Ref: Resumo – Destaques da versão<10>-Footnote-241597474
Ref: Resumo – Destaques da versão<10>-Footnote-251597517
Node: Novas funcionalidades<15>1597560
Ref: whatsnew/3 4 new-features1597724
Ref: f211597724
Node: PEP 453 Explicit Bootstrapping of PIP in Python Installations1598250
Ref: whatsnew/3 4 pep-453-explicit-bootstrapping-of-pip-in-python-installations1598440
Ref: f221598440
Ref: whatsnew/3 4 whatsnew-pep-4531598440
Ref: f071598440
Node: Bootstrapping pip By Default1598660
Ref: whatsnew/3 4 bootstrapping-pip-by-default1598822
Ref: f231598822
Ref: Bootstrapping pip By Default-Footnote-11601723
Ref: Bootstrapping pip By Default-Footnote-21601765
Node: Mudanças na documentação1601852
Ref: whatsnew/3 4 documentation-changes1602014
Ref: f261602014
Ref: Mudanças na documentação-Footnote-11602967
Ref: Mudanças na documentação-Footnote-21603004
Node: PEP 446 Newly Created File Descriptors Are Non-Inheritable1603046
Ref: whatsnew/3 4 pep-446-newly-created-file-descriptors-are-non-inheritable1603276
Ref: f2a1603276
Ref: whatsnew/3 4 whatsnew-pep-4461603276
Ref: f081603276
Ref: PEP 446 Newly Created File Descriptors Are Non-Inheritable-Footnote-11604301
Ref: PEP 446 Newly Created File Descriptors Are Non-Inheritable-Footnote-21604343
Node: Melhorias no manuseio de Codecs1604385
Ref: whatsnew/3 4 codec-handling-improvements1604601
Ref: f0a1604601
Ref: whatsnew/3 4 improvements-to-codec-handling1604601
Ref: f321604601
Ref: Melhorias no manuseio de Codecs-Footnote-11608811
Ref: Melhorias no manuseio de Codecs-Footnote-21608875
Ref: Melhorias no manuseio de Codecs-Footnote-31608940
Ref: Melhorias no manuseio de Codecs-Footnote-41609005
Node: PEP 451 A ModuleSpec Type for the Import System1609070
Ref: whatsnew/3 4 pep-451-a-modulespec-type-for-the-import-system1609261
Ref: f371609261
Ref: whatsnew/3 4 whatsnew-pep-4511609261
Ref: f0b1609261
Ref: PEP 451 A ModuleSpec Type for the Import System-Footnote-11610218
Ref: PEP 451 A ModuleSpec Type for the Import System-Footnote-21610260
Node: Outras mudanças na linguagem<10>1610340
Ref: whatsnew/3 4 other-language-changes1610491
Ref: f391610491
Ref: Outras mudanças na linguagem<10>-Footnote-11613173
Ref: Outras mudanças na linguagem<10>-Footnote-21613238
Ref: Outras mudanças na linguagem<10>-Footnote-31613303
Ref: Outras mudanças na linguagem<10>-Footnote-41613368
Ref: Outras mudanças na linguagem<10>-Footnote-51613435
Ref: Outras mudanças na linguagem<10>-Footnote-61613500
Ref: Outras mudanças na linguagem<10>-Footnote-71613565
Ref: Outras mudanças na linguagem<10>-Footnote-81613630
Ref: Outras mudanças na linguagem<10>-Footnote-91613695
Ref: Outras mudanças na linguagem<10>-Footnote-101613760
Ref: Outras mudanças na linguagem<10>-Footnote-111613826
Ref: Outras mudanças na linguagem<10>-Footnote-121613869
Node: Novos módulos<10>1613935
Ref: whatsnew/3 4 new-modules1614087
Ref: f3e1614087
Node: asyncio<11>1614320
Ref: whatsnew/3 4 asyncio1614407
Ref: f3f1614407
Ref: whatsnew/3 4 whatsnew-asyncio1614407
Ref: f0d1614407
Ref: asyncio<11>-Footnote-11615012
Ref: asyncio<11>-Footnote-21615054
Node: ensurepip<2>1615096
Ref: whatsnew/3 4 ensurepip1615199
Ref: f401615199
Ref: whatsnew/3 4 whatsnew-ensurepip1615199
Ref: f0e1615199
Ref: ensurepip<2>-Footnote-11616473
Node: enum<9>1616515
Ref: whatsnew/3 4 enum1616618
Ref: f411616618
Ref: whatsnew/3 4 whatsnew-enum1616618
Ref: f0f1616618
Ref: enum<9>-Footnote-11617195
Ref: enum<9>-Footnote-21617237
Node: pathlib<11>1617279
Ref: whatsnew/3 4 pathlib1617382
Ref: f421617382
Ref: whatsnew/3 4 whatsnew-pathlib1617382
Ref: f101617382
Ref: pathlib<11>-Footnote-11618007
Node: selectors<2>1618049
Ref: whatsnew/3 4 selectors1618158
Ref: f431618158
Ref: whatsnew/3 4 whatsnew-selectors1618158
Ref: f111618158
Ref: selectors<2>-Footnote-11618418
Node: statistics<6>1618460
Ref: whatsnew/3 4 statistics1618572
Ref: f441618572
Ref: whatsnew/3 4 whatsnew-statistics1618572
Ref: f121618572
Ref: statistics<6>-Footnote-11619044
Ref: statistics<6>-Footnote-21619086
Node: tracemalloc<4>1619128
Ref: whatsnew/3 4 tracemalloc1619219
Ref: f451619219
Ref: whatsnew/3 4 whatsnew-tracemalloc1619219
Ref: f131619219
Ref: tracemalloc<4>-Footnote-11619890
Ref: tracemalloc<4>-Footnote-21619932
Node: Módulos melhorados<10>1619974
Ref: whatsnew/3 4 improved-modules1620131
Ref: f461620131
Node: abc1621480
Ref: whatsnew/3 4 abc1621559
Ref: f471621559
Ref: abc-Footnote-11622082
Ref: abc-Footnote-21622147
Node: aifc<2>1622212
Ref: whatsnew/3 4 aifc1622311
Ref: f4b1622311
Ref: aifc<2>-Footnote-11622921
Ref: aifc<2>-Footnote-21622986
Ref: aifc<2>-Footnote-31623051
Node: argparse<5>1623115
Ref: whatsnew/3 4 argparse1623218
Ref: f4c1623218
Ref: argparse<5>-Footnote-11623466
Node: audioop1623531
Ref: whatsnew/3 4 audioop1623636
Ref: f4e1623636
Ref: audioop-Footnote-11624162
Ref: audioop-Footnote-21624227
Ref: audioop-Footnote-31624292
Node: base64<3>1624357
Ref: whatsnew/3 4 base641624465
Ref: f4f1624465
Ref: base64<3>-Footnote-11625298
Ref: base64<3>-Footnote-21625363
Node: collections<6>1625428
Ref: whatsnew/3 4 collections1625537
Ref: f541625537
Ref: collections<6>-Footnote-11625869
Node: colorsys1625934
Ref: whatsnew/3 4 colorsys1626047
Ref: f561626047
Ref: colorsys-Footnote-11626417
Node: contextlib<6>1626482
Ref: whatsnew/3 4 contextlib1626587
Ref: f571626587
Ref: contextlib<6>-Footnote-11627774
Ref: contextlib<6>-Footnote-21627839
Ref: contextlib<6>-Footnote-31627904
Node: dbm<6>1627969
Ref: whatsnew/3 4 dbm1628072
Ref: f5b1628072
Ref: dbm<6>-Footnote-11628421
Node: dis<4>1628486
Ref: whatsnew/3 4 dis1628586
Ref: f5d1628586
Ref: dis<4>-Footnote-11631194
Ref: dis<4>-Footnote-21631259
Ref: dis<4>-Footnote-31631324
Node: doctest<4>1631389
Ref: whatsnew/3 4 doctest1631491
Ref: f651631491
Ref: doctest<4>-Footnote-11632261
Ref: doctest<4>-Footnote-21632326
Ref: doctest<4>-Footnote-31632391
Node: email<4>1632455
Ref: whatsnew/3 4 email1632558
Ref: f681632558
Ref: whatsnew/3 4 whatsnew-email-contentmanager1633808
Ref: f171633808
Ref: email<4>-Footnote-11634737
Ref: email<4>-Footnote-21634802
Ref: email<4>-Footnote-31634867
Ref: email<4>-Footnote-41634932
Node: filecmp1634997
Ref: whatsnew/3 4 filecmp1635102
Ref: f701635102
Ref: filecmp-Footnote-11635850
Ref: filecmp-Footnote-21635915
Node: functools<5>1635980
Ref: whatsnew/3 4 functools1636082
Ref: f741636082
Ref: whatsnew/3 4 whatsnew-singledispatch1636531
Ref: f141636531
Ref: functools<5>-Footnote-11637495
Ref: functools<5>-Footnote-21637559
Ref: functools<5>-Footnote-31637601
Ref: functools<5>-Footnote-41637666
Node: gc<5>1637731
Ref: whatsnew/3 4 gc1637833
Ref: f761637833
Ref: gc<5>-Footnote-11638101
Node: glob<4>1638166
Ref: whatsnew/3 4 glob1638266
Ref: f781638266
Ref: glob<4>-Footnote-11638572
Node: hashlib<6>1638636
Ref: whatsnew/3 4 hashlib1638738
Ref: f7a1638738
Ref: hashlib<6>-Footnote-11639373
Ref: hashlib<6>-Footnote-21639418
Ref: hashlib<6>-Footnote-31639483
Node: hmac<3>1639548
Ref: whatsnew/3 4 hmac1639647
Ref: f7c1639647
Ref: hmac<3>-Footnote-11640675
Ref: hmac<3>-Footnote-21640740
Ref: hmac<3>-Footnote-31640805
Ref: hmac<3>-Footnote-41640847
Node: html1640912
Ref: whatsnew/3 4 html1641008
Ref: f811641008
Ref: html-Footnote-11641767
Ref: html-Footnote-21641831
Ref: html-Footnote-31641896
Node: http<3>1641961
Ref: whatsnew/3 4 http1642067
Ref: f821642067
Ref: http<3>-Footnote-11642716
Ref: http<3>-Footnote-21642781
Node: idlelib e IDLE<4>1642846
Ref: whatsnew/3 4 idlelib-and-idle1642960
Ref: f861642960
Node: importlib<9>1643352
Ref: whatsnew/3 4 importlib1643469
Ref: f871643469
Ref: importlib<9>-Footnote-11645453
Ref: importlib<9>-Footnote-21645518
Ref: importlib<9>-Footnote-31645583
Ref: importlib<9>-Footnote-41645648
Ref: importlib<9>-Footnote-51645713
Ref: importlib<9>-Footnote-61645778
Ref: importlib<9>-Footnote-71645843
Node: inspect<8>1645908
Ref: whatsnew/3 4 inspect1646020
Ref: f8e1646020
Ref: inspect<8>-Footnote-11647730
Ref: inspect<8>-Footnote-21647795
Ref: inspect<8>-Footnote-31647860
Ref: inspect<8>-Footnote-41647925
Ref: inspect<8>-Footnote-51647990
Ref: inspect<8>-Footnote-61648055
Node: ipaddress<5>1648120
Ref: whatsnew/3 4 ipaddress1648230
Ref: f921648230
Ref: ipaddress<5>-Footnote-11648758
Node: logging<6>1648823
Ref: whatsnew/3 4 logging1648933
Ref: f941648933
Ref: logging<6>-Footnote-11650065
Ref: logging<6>-Footnote-21650129
Ref: logging<6>-Footnote-31650194
Node: marshal<2>1650259
Ref: whatsnew/3 4 marshal1650364
Ref: f9a1650364
Ref: whatsnew/3 4 whatsnew-marshal-31650364
Ref: f0c1650364
Ref: marshal<2>-Footnote-11651045
Ref: marshal<2>-Footnote-21651110
Node: mmap<3>1651175
Ref: whatsnew/3 4 mmap1651288
Ref: f9b1651288
Ref: mmap<3>-Footnote-11651460
Node: multiprocessing<7>1651524
Ref: whatsnew/3 4 multiprocessing1651638
Ref: f9c1651638
Ref: whatsnew/3 4 whatsnew-multiprocessing-no-fork1651691
Ref: f161651691
Ref: multiprocessing<7>-Footnote-11653503
Ref: multiprocessing<7>-Footnote-21653567
Ref: multiprocessing<7>-Footnote-31653632
Ref: multiprocessing<7>-Footnote-41653696
Node: operador<3>1653761
Ref: whatsnew/3 4 operator1653874
Ref: fa01653874
Ref: operador<3>-Footnote-11654427
Ref: operador<3>-Footnote-21654469
Ref: operador<3>-Footnote-31654534
Node: os<11>1654599
Ref: whatsnew/3 4 os1654700
Ref: fa21654700
Ref: os<11>-Footnote-11656147
Ref: os<11>-Footnote-21656212
Ref: os<11>-Footnote-31656277
Ref: os<11>-Footnote-41656341
Node: pdb<6>1656406
Ref: whatsnew/3 4 pdb1656505
Ref: fa81656505
Ref: pdb<6>-Footnote-11657501
Ref: pdb<6>-Footnote-21657566
Node: pickle<4>1657631
Ref: whatsnew/3 4 pickle1657735
Ref: fab1657735
Ref: whatsnew/3 4 whatsnew-protocol-41657735
Ref: f151657735
Ref: pickle<4>-Footnote-11658337
Node: plistlib<2>1658379
Ref: whatsnew/3 4 plistlib1658486
Ref: fac1658486
Ref: plistlib<2>-Footnote-11659022
Node: poplib<3>1659087
Ref: whatsnew/3 4 poplib1659194
Ref: faf1659194
Ref: poplib<3>-Footnote-11659584
Node: pprint<4>1659648
Ref: whatsnew/3 4 pprint1659747
Ref: fb21659747
Ref: pprint<4>-Footnote-11660367
Ref: pprint<4>-Footnote-21660432
Node: pty1660497
Ref: whatsnew/3 4 pty1660595
Ref: fb51660595
Node: pydoc<4>1660788
Ref: whatsnew/3 4 pydoc1660882
Ref: fb71660882
Ref: pydoc<4>-Footnote-11661939
Ref: pydoc<4>-Footnote-21662004
Node: re<8>1662069
Ref: whatsnew/3 4 re1662168
Ref: fb81662168
Ref: re<8>-Footnote-11662919
Ref: re<8>-Footnote-21662984
Ref: re<8>-Footnote-31663049
Node: resource1663114
Ref: whatsnew/3 4 resource1663211
Ref: fbd1663211
Ref: resource-Footnote-11664064
Ref: resource-Footnote-21664129
Ref: resource-Footnote-31664194
Node: select1664259
Ref: whatsnew/3 4 select1664360
Ref: fc71664360
Ref: select-Footnote-11664869
Ref: select-Footnote-21664934
Node: shelve<2>1664999
Ref: whatsnew/3 4 shelve1665101
Ref: fce1665101
Ref: shelve<2>-Footnote-11665373
Node: shutil<6>1665438
Ref: whatsnew/3 4 shutil1665542
Ref: fd01665542
Ref: shutil<6>-Footnote-11665915
Node: smtpd<3>1665982
Ref: whatsnew/3 4 smtpd1666087
Ref: fd31666087
Ref: smtpd<3>-Footnote-11666447
Node: smtplib<3>1666512
Ref: whatsnew/3 4 smtplib1666617
Ref: fd41666617
Ref: smtplib<3>-Footnote-11666979
Node: socket<9>1667043
Ref: whatsnew/3 4 socket1667150
Ref: fd61667150
Ref: socket<9>-Footnote-11667933
Ref: socket<9>-Footnote-21667998
Node: sqlite3<9>1668062
Ref: whatsnew/3 4 sqlite31668166
Ref: fda1668166
Ref: sqlite3<9>-Footnote-11668457
Ref: sqlite3<9>-Footnote-21668497
Node: ssl<10>1668562
Ref: whatsnew/3 4 ssl1668661
Ref: fdb1668661
Ref: whatsnew/3 4 whatsnew-tls-11-121668690
Ref: f191668690
Ref: whatsnew/3 4 whatsnew34-sslcontext1668960
Ref: f1c1668960
Ref: whatsnew/3 4 whatsnew34-win-cert-store1671634
Ref: f1a1671634
Ref: whatsnew/3 4 whatsnew34-sni1671888
Ref: f1b1671888
Ref: ssl<10>-Footnote-11672337
Ref: ssl<10>-Footnote-21672402
Ref: ssl<10>-Footnote-31672467
Ref: ssl<10>-Footnote-41672532
Ref: ssl<10>-Footnote-51672597
Ref: ssl<10>-Footnote-61672662
Ref: ssl<10>-Footnote-71672726
Ref: ssl<10>-Footnote-81672791
Ref: ssl<10>-Footnote-91672856
Ref: ssl<10>-Footnote-101672920
Node: stat1672986
Ref: whatsnew/3 4 stat1673084
Ref: fed1673084
Ref: stat-Footnote-11673557
Ref: stat-Footnote-21673622
Node: struct<2>1673687
Ref: whatsnew/3 4 struct1673791
Ref: ff21673791
Ref: struct<2>-Footnote-11674123
Node: subprocess<5>1674188
Ref: whatsnew/3 4 subprocess1674296
Ref: ff51674296
Ref: subprocess<5>-Footnote-11674748
Ref: subprocess<5>-Footnote-21674813
Node: sunau<2>1674878
Ref: whatsnew/3 4 sunau1674984
Ref: ff91674984
Ref: sunau<2>-Footnote-11675768
Ref: sunau<2>-Footnote-21675833
Ref: sunau<2>-Footnote-31675898
Ref: sunau<2>-Footnote-41675963
Node: sys<12>1676027
Ref: whatsnew/3 4 sys1676130
Ref: ffa1676130
Ref: sys<12>-Footnote-11677419
Ref: sys<12>-Footnote-21677484
Node: tarfile<8>1677548
Ref: whatsnew/3 4 tarfile1677651
Ref: 10001677651
Ref: tarfile<8>-Footnote-11677976
Node: textwrap1678041
Ref: whatsnew/3 4 textwrap1678149
Ref: 10021678149
Ref: textwrap-Footnote-11678854
Ref: textwrap-Footnote-21678919
Node: threading<7>1678984
Ref: whatsnew/3 4 threading1679094
Ref: 10071679094
Ref: threading<7>-Footnote-11679440
Node: traceback<6>1679505
Ref: whatsnew/3 4 traceback1679615
Ref: 10091679615
Ref: traceback<6>-Footnote-11679931
Node: types<6>1679998
Ref: whatsnew/3 4 types1680105
Ref: 100b1680105
Ref: types<6>-Footnote-11680616
Node: urllib<3>1680681
Ref: whatsnew/3 4 urllib1680787
Ref: 100c1680787
Ref: urllib<3>-Footnote-11682117
Ref: urllib<3>-Footnote-21682182
Ref: urllib<3>-Footnote-31682247
Ref: urllib<3>-Footnote-41682312
Ref: urllib<3>-Footnote-51682377
Ref: urllib<3>-Footnote-61682442
Node: unittest<9>1682507
Ref: whatsnew/3 4 unittest1682612
Ref: 10161682612
Ref: unittest<9>-Footnote-11685791
Ref: unittest<9>-Footnote-21685856
Ref: unittest<9>-Footnote-31685921
Ref: unittest<9>-Footnote-41685986
Ref: unittest<9>-Footnote-51686051
Ref: unittest<9>-Footnote-61686116
Ref: unittest<9>-Footnote-71686181
Ref: unittest<9>-Footnote-81686246
Ref: unittest<9>-Footnote-91686311
Node: venv<7>1686376
Ref: whatsnew/3 4 venv1686479
Ref: 101e1686479
Ref: venv<7>-Footnote-11687037
Ref: venv<7>-Footnote-21687102
Ref: venv<7>-Footnote-31687167
Node: wave<2>1687209
Ref: whatsnew/3 4 wave1687311
Ref: 101f1687311
Ref: wave<2>-Footnote-11687958
Ref: wave<2>-Footnote-21688023
Ref: wave<2>-Footnote-31688088
Ref: wave<2>-Footnote-41688152
Node: weakref<2>1688216
Ref: whatsnew/3 4 weakref1688323
Ref: 10241688323
Ref: weakref<2>-Footnote-11688947
Ref: weakref<2>-Footnote-21689012
Ref: weakref<2>-Footnote-31689077
Node: xml etree<2>1689142
Ref: whatsnew/3 4 xml-etree1689252
Ref: 10281689252
Ref: xml etree<2>-Footnote-11690002
Ref: xml etree<2>-Footnote-21690067
Node: zipfile<5>1690132
Ref: whatsnew/3 4 zipfile1690223
Ref: 102d1690223
Ref: zipfile<5>-Footnote-11690763
Ref: zipfile<5>-Footnote-21690828
Node: CPython Implementation Changes1690893
Ref: whatsnew/3 4 cpython-implementation-changes1691050
Ref: 10301691050
Node: PEP 445 Customization of CPython Memory Allocators1691594
Ref: whatsnew/3 4 pep-445-customization-of-cpython-memory-allocators1691752
Ref: 10311691752
Ref: whatsnew/3 4 whatsnew-pep-4451691752
Ref: f1f1691752
Ref: PEP 445 Customization of CPython Memory Allocators-Footnote-11692154
Ref: PEP 445 Customization of CPython Memory Allocators-Footnote-21692196
Node: PEP 442 Safe Object Finalization1692238
Ref: whatsnew/3 4 pep-442-safe-object-finalization1692454
Ref: 10321692454
Ref: whatsnew/3 4 whatsnew-pep-4421692454
Ref: f1e1692454
Ref: PEP 442 Safe Object Finalization-Footnote-11693329
Ref: PEP 442 Safe Object Finalization-Footnote-21693371
Node: PEP 456 Secure and Interchangeable Hash Algorithm1693413
Ref: whatsnew/3 4 pep-456-secure-and-interchangeable-hash-algorithm1693602
Ref: 10341693602
Ref: whatsnew/3 4 whatsnew-pep-4561693602
Ref: f181693602
Ref: PEP 456 Secure and Interchangeable Hash Algorithm-Footnote-11694551
Ref: PEP 456 Secure and Interchangeable Hash Algorithm-Footnote-21694593
Node: PEP 436 Argument Clinic1694658
Ref: whatsnew/3 4 pep-436-argument-clinic1694857
Ref: 10361694857
Ref: whatsnew/3 4 whatsnew-pep-4361694857
Ref: f201694857
Ref: PEP 436 Argument Clinic-Footnote-11695970
Ref: PEP 436 Argument Clinic-Footnote-21696012
Node: Other Alterações a compilações e API C1696054
Ref: whatsnew/3 4 other-build-and-c-api-changes1696225
Ref: 10371696225
Ref: Other Alterações a compilações e API C-Footnote-11698334
Ref: Other Alterações a compilações e API C-Footnote-21698399
Ref: Other Alterações a compilações e API C-Footnote-31698464
Ref: Other Alterações a compilações e API C-Footnote-41698531
Ref: Other Alterações a compilações e API C-Footnote-51698595
Ref: Other Alterações a compilações e API C-Footnote-61698660
Ref: Other Alterações a compilações e API C-Footnote-71698733
Ref: Other Alterações a compilações e API C-Footnote-81698797
Ref: Other Alterações a compilações e API C-Footnote-91698862
Node: Other Improvements<2>1698927
Ref: whatsnew/3 4 other-improvements1699099
Ref: 103b1699099
Ref: whatsnew/3 4 other-improvements-3-41699099
Ref: 103c1699099
Ref: whatsnew/3 4 whatsnew-isolated-mode1699156
Ref: f091699156
Ref: Other Improvements<2>-Footnote-11703280
Ref: Other Improvements<2>-Footnote-21703345
Ref: Other Improvements<2>-Footnote-31703409
Ref: Other Improvements<2>-Footnote-41703474
Ref: Other Improvements<2>-Footnote-51703539
Ref: Other Improvements<2>-Footnote-61703604
Ref: Other Improvements<2>-Footnote-71703669
Ref: Other Improvements<2>-Footnote-81703764
Ref: Other Improvements<2>-Footnote-91703815
Ref: Other Improvements<2>-Footnote-101703880
Ref: Other Improvements<2>-Footnote-111703946
Ref: Other Improvements<2>-Footnote-121704012
Ref: Other Improvements<2>-Footnote-131704055
Ref: Other Improvements<2>-Footnote-141704121
Ref: Other Improvements<2>-Footnote-151704187
Ref: Other Improvements<2>-Footnote-161704253
Ref: Other Improvements<2>-Footnote-171704319
Ref: Other Improvements<2>-Footnote-181704362
Ref: Other Improvements<2>-Footnote-191704428
Ref: Other Improvements<2>-Footnote-201704494
Ref: Other Improvements<2>-Footnote-211704560
Node: Otimizações Relevantes1704626
Ref: whatsnew/3 4 significant-optimizations1704747
Ref: 10411704747
Ref: Otimizações Relevantes-Footnote-11707551
Ref: Otimizações Relevantes-Footnote-21707616
Ref: Otimizações Relevantes-Footnote-31707681
Ref: Otimizações Relevantes-Footnote-41707746
Ref: Otimizações Relevantes-Footnote-51707811
Ref: Otimizações Relevantes-Footnote-61707876
Ref: Otimizações Relevantes-Footnote-71707941
Ref: Otimizações Relevantes-Footnote-81708005
Ref: Otimizações Relevantes-Footnote-91708070
Ref: Otimizações Relevantes-Footnote-101708135
Ref: Otimizações Relevantes-Footnote-111708201
Ref: Otimizações Relevantes-Footnote-121708267
Ref: Otimizações Relevantes-Footnote-131708333
Node: Descontinuados<11>1708399
Ref: whatsnew/3 4 deprecated1708546
Ref: 10451708546
Ref: whatsnew/3 4 deprecated-3-41708546
Ref: f381708546
Node: Deprecations in the Python API1708996
Ref: whatsnew/3 4 deprecations-in-the-python-api1709109
Ref: 10461709109
Node: Deprecated Features1712757
Ref: whatsnew/3 4 deprecated-features1712870
Ref: 104a1712870
Ref: Deprecated Features-Footnote-11713284
Ref: Deprecated Features-Footnote-21713349
Node: Removidos<11>1713414
Ref: whatsnew/3 4 removed1713552
Ref: 104c1713552
Node: Operating Systems No Longer Supported1713722
Ref: whatsnew/3 4 operating-systems-no-longer-supported1713849
Ref: 104d1713849
Ref: Operating Systems No Longer Supported-Footnote-11714264
Ref: Operating Systems No Longer Supported-Footnote-21714329
Ref: Operating Systems No Longer Supported-Footnote-31714394
Node: Remoção de APIs e recursos<5>1714459
Ref: whatsnew/3 4 api-and-feature-removals1714608
Ref: 104e1714608
Ref: Remoção de APIs e recursos<5>-Footnote-11717072
Ref: Remoção de APIs e recursos<5>-Footnote-21717108
Ref: Remoção de APIs e recursos<5>-Footnote-31717173
Ref: Remoção de APIs e recursos<5>-Footnote-41717238
Ref: Remoção de APIs e recursos<5>-Footnote-51717303
Ref: Remoção de APIs e recursos<5>-Footnote-61717368
Ref: Remoção de APIs e recursos<5>-Footnote-71717432
Node: Code Cleanups1717497
Ref: whatsnew/3 4 code-cleanups1717600
Ref: 10501717600
Ref: Code Cleanups-Footnote-11718264
Node: Porting to Python 3 41718329
Ref: whatsnew/3 4 porting-to-python-3-41718466
Ref: 10511718466
Node: Changes in ‘python’ Command Behavior<2>1718865
Ref: whatsnew/3 4 changes-in-python-command-behavior1719005
Ref: 10521719005
Ref: Changes in ‘python’ Command Behavior<2>-Footnote-11720120
Node: Alterações na API Python<10>1720185
Ref: whatsnew/3 4 changes-in-the-python-api1720359
Ref: 10541720359
Ref: Alterações na API Python<10>-Footnote-11733847
Ref: Alterações na API Python<10>-Footnote-21733912
Ref: Alterações na API Python<10>-Footnote-31733977
Ref: Alterações na API Python<10>-Footnote-41734042
Ref: Alterações na API Python<10>-Footnote-51734107
Ref: Alterações na API Python<10>-Footnote-61734172
Ref: Alterações na API Python<10>-Footnote-71734237
Ref: Alterações na API Python<10>-Footnote-81734302
Ref: Alterações na API Python<10>-Footnote-91734366
Ref: Alterações na API Python<10>-Footnote-101734431
Ref: Alterações na API Python<10>-Footnote-111734497
Ref: Alterações na API Python<10>-Footnote-121734563
Ref: Alterações na API Python<10>-Footnote-131734629
Ref: Alterações na API Python<10>-Footnote-141734695
Ref: Alterações na API Python<10>-Footnote-151734761
Ref: Alterações na API Python<10>-Footnote-161734827
Ref: Alterações na API Python<10>-Footnote-171734893
Ref: Alterações na API Python<10>-Footnote-181734959
Ref: Alterações na API Python<10>-Footnote-191735025
Ref: Alterações na API Python<10>-Footnote-201735091
Ref: Alterações na API Python<10>-Footnote-211735157
Ref: Alterações na API Python<10>-Footnote-221735223
Ref: Alterações na API Python<10>-Footnote-231735289
Ref: Alterações na API Python<10>-Footnote-241735354
Node: Alterações na API C<15>1735420
Ref: whatsnew/3 4 changes-in-the-c-api1735542
Ref: 10651735542
Ref: Alterações na API C<15>-Footnote-11737309
Ref: Alterações na API C<15>-Footnote-21737374
Node: Alterado em 3 4 31737439
Ref: whatsnew/3 4 changed-in-3-4-31737554
Ref: 106b1737554
Node: PEP 476 Habilitando verificação de certificado por padrão para clientes http stdlib1737794
Ref: whatsnew/3 4 pep-4761737934
Ref: 106c1737934
Ref: whatsnew/3 4 pep-476-enabling-certificate-verification-by-default-for-stdlib-http-clients1737934
Ref: 106d1737934
Node: O que há de novo no Python 3 31738963
Ref: whatsnew/3 3 doc1739138
Ref: 106e1739138
Ref: whatsnew/3 3 translation-repo1739138
Ref: 106f1739138
Ref: whatsnew/3 3 what-s-new-in-python-3-31739138
Ref: 10701739138
Ref: O que há de novo no Python 3 3-Footnote-11741154
Ref: O que há de novo no Python 3 3-Footnote-21741214
Node: Resumo – Destaques da versão<11>1741256
Ref: whatsnew/3 3 summary-release-highlights1741394
Ref: 10711741394
Node: PEP 405 Ambientes Virtuais1742768
Ref: whatsnew/3 3 pep-4051742950
Ref: 10731742950
Ref: whatsnew/3 3 pep-405-virtual-environments1742950
Ref: 107b1742950
Ref: PEP 405 Ambientes Virtuais-Footnote-11743939
Node: PEP 420 Implicit Namespace Packages1743981
Ref: whatsnew/3 3 pep-420-implicit-namespace-packages1744200
Ref: 107c1744200
Ref: PEP 420 Implicit Namespace Packages-Footnote-11744718
Ref: PEP 420 Implicit Namespace Packages-Footnote-21744760
Node: PEP 3118 New memoryview implementation and buffer protocol documentation1744802
Ref: whatsnew/3 3 pep-3118-new-memoryview-implementation-and-buffer-protocol-documentation1745033
Ref: 107d1745033
Ref: whatsnew/3 3 pep-3118-update1745033
Ref: 107e1745033
Ref: PEP 3118 New memoryview implementation and buffer protocol documentation-Footnote-11746170
Node: Recursos1746212
Ref: whatsnew/3 3 features1746354
Ref: 107f1746354
Ref: Recursos-Footnote-11747158
Node: Mudanças na API1747223
Ref: whatsnew/3 3 api-changes1747365
Ref: 10801747365
Ref: Mudanças na API-Footnote-11748398
Ref: Mudanças na API-Footnote-21748463
Node: PEP 393 Flexible String Representation1748505
Ref: whatsnew/3 3 pep-3931748736
Ref: 10761748736
Ref: whatsnew/3 3 pep-393-flexible-string-representation1748736
Ref: 10831748736
Ref: PEP 393 Flexible String Representation-Footnote-11749805
Node: Funcionalidade1749847
Ref: whatsnew/3 3 functionality1749982
Ref: 10841749982
Ref: Funcionalidade-Footnote-11751434
Ref: Funcionalidade-Footnote-21751476
Node: Desempenho e utilização de recursos1751541
Ref: whatsnew/3 3 performance-and-resource-usage1751676
Ref: 10861751676
Ref: Desempenho e utilização de recursos-Footnote-11752926
Node: PEP 397 Python Launcher for Windows1752968
Ref: whatsnew/3 3 pep-3971753179
Ref: 10871753179
Ref: whatsnew/3 3 pep-397-python-launcher-for-windows1753179
Ref: 10881753179
Ref: PEP 397 Python Launcher for Windows-Footnote-11754741
Ref: PEP 397 Python Launcher for Windows-Footnote-21754805
Node: PEP 3151 Reworking the OS and IO exception hierarchy1754847
Ref: whatsnew/3 3 pep-31511755067
Ref: 10741755067
Ref: whatsnew/3 3 pep-3151-reworking-the-os-and-io-exception-hierarchy1755067
Ref: 108a1755067
Ref: PEP 3151 Reworking the OS and IO exception hierarchy-Footnote-11757657
Node: PEP 380 Syntax for Delegating to a Subgenerator1757699
Ref: whatsnew/3 3 pep-3801757921
Ref: 10721757921
Ref: whatsnew/3 3 pep-380-syntax-for-delegating-to-a-subgenerator1757921
Ref: 10991757921
Ref: PEP 380 Syntax for Delegating to a Subgenerator-Footnote-11760369
Node: PEP 409 Suppressing exception context1760411
Ref: whatsnew/3 3 pep-409-suppressing-exception-context1760614
Ref: 109b1760614
Ref: PEP 409 Suppressing exception context-Footnote-11762709
Node: PEP 414 Explicit Unicode literals1762751
Ref: whatsnew/3 3 pep-414-explicit-unicode-literals1762956
Ref: 109c1762956
Ref: PEP 414 Explicit Unicode literals-Footnote-11763676
Node: PEP 3155 Qualified name for classes and functions1763718
Ref: whatsnew/3 3 pep-3155-qualified-name-for-classes-and-functions1763916
Ref: 109d1763916
Ref: PEP 3155 Qualified name for classes and functions-Footnote-11765538
Node: PEP 412 Key-Sharing Dictionary1765580
Ref: whatsnew/3 3 pep-4121765778
Ref: 10771765778
Ref: whatsnew/3 3 pep-412-key-sharing-dictionary1765778
Ref: 10a01765778
Ref: PEP 412 Key-Sharing Dictionary-Footnote-11766304
Node: PEP 362 Function Signature Object1766346
Ref: whatsnew/3 3 pep-362-function-signature-object1766528
Ref: 10a11766528
Ref: PEP 362 Function Signature Object-Footnote-11767430
Node: PEP 421 Adding sys implementation1767472
Ref: whatsnew/3 3 pep-421-adding-sys-implementation1767671
Ref: 10a31767671
Ref: PEP 421 Adding sys implementation-Footnote-11768887
Node: SimpleNamespace1768929
Ref: whatsnew/3 3 simplenamespace1769014
Ref: 10a41769014
Ref: SimpleNamespace-Footnote-11769639
Node: Using importlib as the Implementation of Import1769681
Ref: whatsnew/3 3 importlib1769880
Ref: 10751769880
Ref: whatsnew/3 3 using-importlib-as-the-implementation-of-import1769880
Ref: 10a51769880
Ref: Using importlib as the Implementation of Import-Footnote-11771160
Ref: Using importlib as the Implementation of Import-Footnote-21771224
Ref: Using importlib as the Implementation of Import-Footnote-31771289
Ref: Using importlib as the Implementation of Import-Footnote-41771354
Ref: Using importlib as the Implementation of Import-Footnote-51771419
Node: New APIs1771461
Ref: whatsnew/3 3 new-apis1771577
Ref: 10a81771577
Node: Visible Changes1773422
Ref: whatsnew/3 3 visible-changes1773538
Ref: 10af1773538
Ref: Visible Changes-Footnote-11775393
Ref: Visible Changes-Footnote-21775435
Node: Outras mudanças na linguagem<11>1775477
Ref: whatsnew/3 3 other-language-changes1775670
Ref: 10b01775670
Ref: Outras mudanças na linguagem<11>-Footnote-11777663
Ref: Outras mudanças na linguagem<11>-Footnote-21777728
Ref: Outras mudanças na linguagem<11>-Footnote-31777793
Ref: Outras mudanças na linguagem<11>-Footnote-41777858
Ref: Outras mudanças na linguagem<11>-Footnote-51777923
Ref: Outras mudanças na linguagem<11>-Footnote-61777988
Ref: Outras mudanças na linguagem<11>-Footnote-71778053
Ref: Outras mudanças na linguagem<11>-Footnote-81778118
Node: A Finer-Grained Import Lock1778183
Ref: whatsnew/3 3 a-finer-grained-import-lock1778356
Ref: 10b31778356
Ref: A Finer-Grained Import Lock-Footnote-11779101
Node: Builtin functions and types1779165
Ref: whatsnew/3 3 builtin-functions-and-types1779323
Ref: 10b41779323
Ref: Builtin functions and types-Footnote-11780560
Node: Novos módulos<11>1780624
Ref: whatsnew/3 3 new-modules1780778
Ref: 10b71780778
Node: faulthandler<4>1780911
Ref: whatsnew/3 3 faulthandler1781002
Ref: 10b81781002
Node: ipaddress<6>1781961
Ref: whatsnew/3 3 ipaddress1782068
Ref: 10bf1782068
Ref: ipaddress<6>-Footnote-11782414
Node: lzma<2>1782456
Ref: whatsnew/3 3 lzma1782539
Ref: 10c01782539
Ref: lzma<2>-Footnote-11782853
Node: Módulos melhorados<11>1782917
Ref: whatsnew/3 3 improved-modules1783061
Ref: 10c11783061
Node: abc<2>1784401
Ref: whatsnew/3 3 abc1784484
Ref: 10c21784484
Ref: abc<2>-Footnote-11785470
Ref: abc<2>-Footnote-21785535
Node: array<5>1785600
Ref: whatsnew/3 3 array1785701
Ref: 10c81785701
Ref: array<5>-Footnote-11785935
Node: base64<4>1786002
Ref: whatsnew/3 3 base641786108
Ref: 10c91786108
Ref: base64<4>-Footnote-11786408
Node: binascii<3>1786473
Ref: whatsnew/3 3 binascii1786577
Ref: 10ca1786577
Ref: binascii<3>-Footnote-11786833
Node: bz2<2>1786898
Ref: whatsnew/3 3 bz21787002
Ref: 10cb1787002
Ref: bz2<2>-Footnote-11787977
Ref: bz2<2>-Footnote-21788041
Node: codecs<2>1788105
Ref: whatsnew/3 3 codecs1788212
Ref: 10ce1788212
Ref: codecs<2>-Footnote-11789534
Ref: codecs<2>-Footnote-21789599
Ref: codecs<2>-Footnote-31789664
Node: collections<7>1789729
Ref: whatsnew/3 3 collections1789843
Ref: 10cf1789843
Ref: collections<7>-Footnote-11790611
Ref: collections<7>-Footnote-21790676
Ref: collections<7>-Footnote-31790741
Ref: collections<7>-Footnote-41790806
Node: contextlib<7>1790871
Ref: whatsnew/3 3 contextlib1790984
Ref: 10d11790984
Ref: contextlib<7>-Footnote-11791579
Node: crypt<2>1791644
Ref: whatsnew/3 3 crypt1791752
Ref: 10d21791752
Ref: crypt<2>-Footnote-11791956
Node: curses<5>1792021
Ref: whatsnew/3 3 curses1792127
Ref: 10d31792127
Ref: curses<5>-Footnote-11792939
Node: datetime<6>1793003
Ref: whatsnew/3 3 datetime1793111
Ref: 10d81793111
Ref: datetime<6>-Footnote-11793772
Node: decimal<3>1793837
Ref: whatsnew/3 3 decimal1793944
Ref: 10da1793944
Ref: whatsnew/3 3 new-decimal1793944
Ref: 10781793944
Ref: decimal<3>-Footnote-11795660
Node: Recursos<2>1795724
Ref: whatsnew/3 3 id11795810
Ref: 10db1795810
Node: Mudanças na API<2>1796186
Ref: whatsnew/3 3 id21796272
Ref: 10de1796272
Node: email<5>1799157
Ref: whatsnew/3 3 email1799262
Ref: 10f01799262
Ref: whatsnew/3 3 new-email1799262
Ref: 10791799262
Node: Policy Framework1799393
Ref: whatsnew/3 3 policy-framework1799501
Ref: 10f11799501
Node: Provisional Policy with New Header API1802419
Ref: whatsnew/3 3 provisional-policy-with-new-header-api1802553
Ref: 10f51802553
Node: Other API Changes1807135
Ref: whatsnew/3 3 other-api-changes1807244
Ref: 10f91807244
Node: ftplib<3>1808093
Ref: whatsnew/3 3 ftplib1808200
Ref: 10ff1808200
Ref: ftplib<3>-Footnote-11809113
Ref: ftplib<3>-Footnote-21809177
Ref: ftplib<3>-Footnote-31809242
Node: functools<6>1809307
Ref: whatsnew/3 3 functools1809411
Ref: 11041809411
Ref: functools<6>-Footnote-11809759
Node: gc<6>1809824
Ref: whatsnew/3 3 gc1809926
Ref: 11051809926
Node: hmac<4>1810101
Ref: whatsnew/3 3 hmac1810198
Ref: 11071810198
Ref: hmac<4>-Footnote-11810465
Node: http<4>1810530
Ref: whatsnew/3 3 http1810629
Ref: 11091810629
Ref: http<4>-Footnote-11811315
Ref: http<4>-Footnote-21811379
Ref: http<4>-Footnote-31811444
Node: html<2>1811509
Ref: whatsnew/3 3 html1811611
Ref: 11101811611
Ref: html<2>-Footnote-11812612
Ref: html<2>-Footnote-21812677
Ref: html<2>-Footnote-31812742
Ref: html<2>-Footnote-41812807
Ref: html<2>-Footnote-51812872
Ref: html<2>-Footnote-61812937
Ref: html<2>-Footnote-71813004
Ref: html<2>-Footnote-81813070
Ref: html<2>-Footnote-91813135
Ref: html<2>-Footnote-101813200
Ref: html<2>-Footnote-111813268
Ref: html<2>-Footnote-121813335
Ref: html<2>-Footnote-131813401
Ref: html<2>-Footnote-141813467
Ref: html<2>-Footnote-151813532
Ref: html<2>-Footnote-161813598
Node: imaplib<3>1813664
Ref: whatsnew/3 3 imaplib1813769
Ref: 11121813769
Ref: imaplib<3>-Footnote-11814011
Node: inspect<9>1814075
Ref: whatsnew/3 3 inspect1814178
Ref: 11131814178
Ref: inspect<9>-Footnote-11814892
Ref: inspect<9>-Footnote-21814957
Node: io<6>1815022
Ref: whatsnew/3 3 io1815127
Ref: 11161815127
Ref: io<6>-Footnote-11815777
Node: itertools<6>1815842
Ref: whatsnew/3 3 itertools1815947
Ref: 11171815947
Node: logging<7>1816105
Ref: whatsnew/3 3 logging1816212
Ref: 11181816212
Node: math<9>1816665
Ref: whatsnew/3 3 math1816767
Ref: 11191816767
Ref: math<9>-Footnote-11816993
Node: mmap<4>1817058
Ref: whatsnew/3 3 mmap1817168
Ref: 111b1817168
Ref: mmap<4>-Footnote-11817506
Node: multiprocessing<8>1817571
Ref: whatsnew/3 3 multiprocessing1817684
Ref: 111d1817684
Ref: multiprocessing<8>-Footnote-11818861
Ref: multiprocessing<8>-Footnote-21818926
Ref: multiprocessing<8>-Footnote-31818990
Ref: multiprocessing<8>-Footnote-41819054
Node: nntplib<2>1819119
Ref: whatsnew/3 3 nntplib1819231
Ref: 11261819231
Ref: nntplib<2>-Footnote-11819791
Node: os<12>1819855
Ref: whatsnew/3 3 os1819955
Ref: 11271819955
Ref: os<12>-Footnote-11827410
Ref: os<12>-Footnote-21827475
Ref: os<12>-Footnote-31827539
Ref: os<12>-Footnote-41827604
Ref: os<12>-Footnote-51827669
Ref: os<12>-Footnote-61827734
Ref: os<12>-Footnote-71827798
Ref: os<12>-Footnote-81827863
Ref: os<12>-Footnote-91827928
Ref: os<12>-Footnote-101827993
Ref: os<12>-Footnote-111828058
Node: pdb<7>1828124
Ref: whatsnew/3 3 pdb1828223
Ref: 115f1828223
Ref: pdb<7>-Footnote-11828506
Node: pickle<5>1828571
Ref: whatsnew/3 3 pickle1828672
Ref: 11601828672
Ref: pickle<5>-Footnote-11828943
Node: pydoc<5>1829008
Ref: whatsnew/3 3 pydoc1829108
Ref: 11621829108
Node: re<9>1829307
Ref: whatsnew/3 3 re1829403
Ref: 11631829403
Ref: re<9>-Footnote-11829599
Node: sched1829663
Ref: whatsnew/3 3 sched1829760
Ref: 11641829760
Ref: sched-Footnote-11830907
Ref: sched-Footnote-21830972
Ref: sched-Footnote-31831036
Ref: sched-Footnote-41831101
Ref: sched-Footnote-51831166
Node: select<2>1831231
Ref: whatsnew/3 3 select1831331
Ref: 11691831331
Ref: select<2>-Footnote-11831596
Node: shlex<3>1831660
Ref: whatsnew/3 3 shlex1831764
Ref: 116a1831764
Node: shutil<7>1832071
Ref: whatsnew/3 3 shutil1832175
Ref: 116b1832175
Ref: shutil<7>-Footnote-11834053
Ref: shutil<7>-Footnote-21834118
Ref: shutil<7>-Footnote-31834183
Ref: shutil<7>-Footnote-41834248
Ref: shutil<7>-Footnote-51834313
Ref: shutil<7>-Footnote-61834378
Ref: shutil<7>-Footnote-71834443
Ref: shutil<7>-Footnote-81834507
Node: signal<4>1834571
Ref: whatsnew/3 3 signal1834675
Ref: 116e1834675
Ref: signal<4>-Footnote-11835748
Node: smtpd<4>1835812
Ref: whatsnew/3 3 smtpd1835917
Ref: 11751835917
Ref: smtpd<4>-Footnote-11836400
Ref: smtpd<4>-Footnote-21836459
Ref: smtpd<4>-Footnote-31836518
Node: smtplib<4>1836582
Ref: whatsnew/3 3 smtplib1836688
Ref: 11761836688
Ref: smtplib<4>-Footnote-11837442
Ref: smtplib<4>-Footnote-21837507
Ref: smtplib<4>-Footnote-31837572
Node: socket<10>1837636
Ref: whatsnew/3 3 socket1837749
Ref: 11781837749
Ref: socket<10>-Footnote-11838991
Ref: socket<10>-Footnote-21839055
Ref: socket<10>-Footnote-31839120
Ref: socket<10>-Footnote-41839209
Ref: socket<10>-Footnote-51839274
Node: socketserver<3>1839339
Ref: whatsnew/3 3 socketserver1839453
Ref: 117b1839453
Ref: socketserver<3>-Footnote-11839831
Node: sqlite3<10>1839896
Ref: whatsnew/3 3 sqlite31840007
Ref: 117f1840007
Ref: sqlite3<10>-Footnote-11840284
Node: ssl<11>1840349
Ref: whatsnew/3 3 ssl1840452
Ref: 11801840452
Ref: ssl<11>-Footnote-11842673
Ref: ssl<11>-Footnote-21842738
Ref: ssl<11>-Footnote-31842803
Ref: ssl<11>-Footnote-41842868
Ref: ssl<11>-Footnote-51842933
Ref: ssl<11>-Footnote-61842998
Ref: ssl<11>-Footnote-71843063
Ref: ssl<11>-Footnote-81843128
Ref: ssl<11>-Footnote-91843193
Ref: ssl<11>-Footnote-101843258
Ref: ssl<11>-Footnote-111843324
Node: stat<2>1843390
Ref: whatsnew/3 3 stat1843491
Ref: 11891843491
Ref: stat<2>-Footnote-11843789
Node: struct<3>1843854
Ref: whatsnew/3 3 struct1843961
Ref: 118b1843961
Ref: struct<3>-Footnote-11844210
Node: subprocess<6>1844274
Ref: whatsnew/3 3 subprocess1844381
Ref: 118c1844381
Ref: subprocess<6>-Footnote-11844719
Ref: subprocess<6>-Footnote-21844783
Node: sys<13>1844847
Ref: whatsnew/3 3 sys1844955
Ref: 118e1844955
Ref: sys<13>-Footnote-11845176
Node: tarfile<9>1845241
Ref: whatsnew/3 3 tarfile1845347
Ref: 11901845347
Ref: tarfile<9>-Footnote-11845556
Node: tempfile<4>1845620
Ref: whatsnew/3 3 tempfile1845730
Ref: 11911845730
Ref: tempfile<4>-Footnote-11845957
Node: textwrap<2>1846021
Ref: whatsnew/3 3 textwrap1846133
Ref: 11921846133
Ref: textwrap<2>-Footnote-11846379
Node: threading<8>1846444
Ref: whatsnew/3 3 threading1846552
Ref: 11931846552
Ref: threading<8>-Footnote-11847491
Ref: threading<8>-Footnote-21847556
Node: time<8>1847620
Ref: whatsnew/3 3 time1847725
Ref: 119a1847725
Ref: time<8>-Footnote-11848697
Ref: time<8>-Footnote-21848739
Node: types<7>1848804
Ref: whatsnew/3 3 types1848909
Ref: 119f1848909
Ref: types<7>-Footnote-11849249
Ref: types<7>-Footnote-21849314
Ref: types<7>-Footnote-31849356
Node: unittest<10>1849421
Ref: whatsnew/3 3 unittest1849528
Ref: 11a21849528
Ref: unittest<10>-Footnote-11849947
Node: urllib<4>1850012
Ref: whatsnew/3 3 urllib1850124
Ref: 11a71850124
Ref: urllib<4>-Footnote-11850480
Node: webbrowser<3>1850547
Ref: whatsnew/3 3 webbrowser1850671
Ref: 11a91850671
Ref: webbrowser<3>-Footnote-11851215
Ref: webbrowser<3>-Footnote-21851280
Node: xml etree ElementTree<2>1851345
Ref: whatsnew/3 3 xml-etree-elementtree1851467
Ref: 11aa1851467
Node: zlib<2>1851988
Ref: whatsnew/3 3 zlib1852088
Ref: 11ab1852088
Ref: zlib<2>-Footnote-11852564
Ref: zlib<2>-Footnote-21852629
Node: Otimizações<10>1852694
Ref: whatsnew/3 3 optimizations1852856
Ref: 11ae1852856
Ref: Otimizações<10>-Footnote-11853667
Ref: Otimizações<10>-Footnote-21853709
Ref: Otimizações<10>-Footnote-31853774
Ref: Otimizações<10>-Footnote-41853839
Node: Mudanças a construções e API C<4>1853904
Ref: whatsnew/3 3 build-and-c-api-changes1854061
Ref: 10811854061
Ref: Mudanças a construções e API C<4>-Footnote-11855981
Ref: Mudanças a construções e API C<4>-Footnote-21856023
Ref: Mudanças a construções e API C<4>-Footnote-31856065
Node: Descontinuados<12>1856130
Ref: whatsnew/3 3 deprecated1856291
Ref: 11c41856291
Node: Unsupported Operating Systems<2>1856638
Ref: whatsnew/3 3 unsupported-operating-systems1856784
Ref: 11c51856784
Node: Deprecated Python modules functions and methods<4>1857140
Ref: whatsnew/3 3 deprecated-python-modules-functions-and-methods1857341
Ref: 11c61857341
Ref: Deprecated Python modules functions and methods<4>-Footnote-11859693
Ref: Deprecated Python modules functions and methods<4>-Footnote-21859757
Ref: Deprecated Python modules functions and methods<4>-Footnote-31859799
Ref: Deprecated Python modules functions and methods<4>-Footnote-41859864
Ref: Deprecated Python modules functions and methods<4>-Footnote-51859929
Node: Deprecated functions and types of the C API<3>1859994
Ref: whatsnew/3 3 deprecated-functions-and-types-of-the-c-api1860182
Ref: 11ca1860182
Ref: Deprecated functions and types of the C API<3>-Footnote-11863208
Node: Deprecated features1863250
Ref: whatsnew/3 3 deprecated-features1863379
Ref: 11d41863379
Node: Porting to Python 3 31863604
Ref: whatsnew/3 3 porting-to-python-3-31863720
Ref: 11d51863720
Node: Porting Python code1864019
Ref: whatsnew/3 3 porting-python-code1864119
Ref: 10a71864119
Ref: whatsnew/3 3 portingpythoncode1864119
Ref: 11d61864119
Ref: Porting Python code-Footnote-11871164
Ref: Porting Python code-Footnote-21871229
Ref: Porting Python code-Footnote-31871294
Ref: Porting Python code-Footnote-41871359
Ref: Porting Python code-Footnote-51871401
Ref: Porting Python code-Footnote-61871443
Ref: Porting Python code-Footnote-71871507
Ref: Porting Python code-Footnote-81871574
Ref: Porting Python code-Footnote-91871639
Ref: Porting Python code-Footnote-101871703
Node: Porting C code1871769
Ref: whatsnew/3 3 porting-c-code1871899
Ref: 10821871899
Ref: Porting C code-Footnote-11873400
Node: Building C extensions1873442
Ref: whatsnew/3 3 building-c-extensions1873580
Ref: 11e51873580
Ref: Building C extensions-Footnote-11874180
Node: Command Line Switch Changes1874245
Ref: whatsnew/3 3 command-line-switch-changes1874360
Ref: 11e61874360
Ref: Command Line Switch Changes-Footnote-11874928
Ref: Command Line Switch Changes-Footnote-21874993
Node: O que há de novo no Python 3 21875058
Ref: whatsnew/3 2 doc1875233
Ref: 11e81875233
Ref: whatsnew/3 2 translation-repo1875233
Ref: 11e91875233
Ref: whatsnew/3 2 what-s-new-in-python-3-21875233
Ref: 11ea1875233
Ref: O que há de novo no Python 3 2-Footnote-11876682
Ref: O que há de novo no Python 3 2-Footnote-21876781
Node: PEP 384 Defining a Stable ABI1876823
Ref: whatsnew/3 2 pep-384-defining-a-stable-abi1876973
Ref: 11eb1876973
Ref: PEP 384 Defining a Stable ABI-Footnote-11878071
Node: PEP 389 Argparse Command Line Parsing Module1878113
Ref: whatsnew/3 2 pep-389-argparse-command-line-parsing-module1878322
Ref: 11ec1878322
Ref: PEP 389 Argparse Command Line Parsing Module-Footnote-11882472
Node: PEP 391 Dictionary Based Configuration for Logging1882514
Ref: whatsnew/3 2 pep-391-dictionary-based-configuration-for-logging1882732
Ref: 11ee1882732
Ref: PEP 391 Dictionary Based Configuration for Logging-Footnote-11885036
Node: PEP 3148 The concurrent futures module1885078
Ref: whatsnew/3 2 pep-3148-the-concurrent-futures-module1885287
Ref: 11f01885287
Ref: PEP 3148 The concurrent futures module-Footnote-11887996
Node: PEP 3147 PYC Repository Directories1888038
Ref: whatsnew/3 2 pep-3147-pyc-repository-directories1888233
Ref: 11f41888233
Ref: PEP 3147 PYC Repository Directories-Footnote-11891309
Node: PEP 3149 ABI Version Tagged so Files1891351
Ref: whatsnew/3 2 pep-3149-abi-version-tagged-so-files1891559
Ref: 11f61891559
Ref: PEP 3149 ABI Version Tagged so Files-Footnote-11892824
Node: PEP 3333 Python Web Server Gateway Interface v1 0 11892866
Ref: whatsnew/3 2 pep-3333-python-web-server-gateway-interface-v1-0-11893072
Ref: 11f71893072
Ref: PEP 3333 Python Web Server Gateway Interface v1 0 1-Footnote-11895443
Ref: PEP 3333 Python Web Server Gateway Interface v1 0 1-Footnote-21895502
Ref: PEP 3333 Python Web Server Gateway Interface v1 0 1-Footnote-31895561
Node: Outras mudanças na linguagem<12>1895603
Ref: whatsnew/3 2 other-language-changes1895808
Ref: 11fa1895808
Ref: Outras mudanças na linguagem<12>-Footnote-11905375
Ref: Outras mudanças na linguagem<12>-Footnote-21905439
Ref: Outras mudanças na linguagem<12>-Footnote-31905503
Ref: Outras mudanças na linguagem<12>-Footnote-41905570
Ref: Outras mudanças na linguagem<12>-Footnote-51905634
Ref: Outras mudanças na linguagem<12>-Footnote-61905698
Ref: Outras mudanças na linguagem<12>-Footnote-71905762
Ref: Outras mudanças na linguagem<12>-Footnote-81905826
Ref: Outras mudanças na linguagem<12>-Footnote-91905890
Ref: Outras mudanças na linguagem<12>-Footnote-101905954
Ref: Outras mudanças na linguagem<12>-Footnote-111906020
Ref: Outras mudanças na linguagem<12>-Footnote-121906087
Ref: Outras mudanças na linguagem<12>-Footnote-131906152
Ref: Outras mudanças na linguagem<12>-Footnote-141906217
Ref: Outras mudanças na linguagem<12>-Footnote-151906283
Ref: Outras mudanças na linguagem<12>-Footnote-161906349
Node: New Improved and Deprecated Modules1906414
Ref: whatsnew/3 2 new-improved-and-deprecated-modules1906583
Ref: 12071906583
Node: email<6>1908624
Ref: whatsnew/3 2 email1908724
Ref: 12081908724
Ref: email<6>-Footnote-11910707
Ref: email<6>-Footnote-21910766
Ref: email<6>-Footnote-31910830
Node: elementtree1910895
Ref: whatsnew/3 2 elementtree1911016
Ref: 12101911016
Ref: elementtree-Footnote-11912503
Ref: elementtree-Footnote-21912603
Node: functools<7>1912667
Ref: whatsnew/3 2 functools1912792
Ref: 12171912792
Ref: functools<7>-Footnote-11916264
Ref: functools<7>-Footnote-21916347
Ref: functools<7>-Footnote-31916426
Ref: functools<7>-Footnote-41916491
Ref: functools<7>-Footnote-51916556
Ref: functools<7>-Footnote-61916620
Ref: functools<7>-Footnote-71916684
Ref: functools<7>-Footnote-81916748
Node: itertools<7>1916800
Ref: whatsnew/3 2 itertools1916928
Ref: 121b1916928
Node: collections<8>1917621
Ref: whatsnew/3 2 collections1917749
Ref: 121d1917749
Ref: collections<8>-Footnote-11919998
Ref: collections<8>-Footnote-21920058
Node: threading<9>1920105
Ref: whatsnew/3 2 threading1920238
Ref: 12221920238
Ref: threading<9>-Footnote-11923004
Ref: threading<9>-Footnote-21923065
Ref: threading<9>-Footnote-31923164
Ref: threading<9>-Footnote-41923236
Node: datetime and time1923300
Ref: whatsnew/3 2 datetime-and-time1923427
Ref: 12261923427
Ref: datetime and time-Footnote-11926221
Ref: datetime and time-Footnote-21926288
Ref: datetime and time-Footnote-31926352
Ref: datetime and time-Footnote-41926416
Ref: datetime and time-Footnote-51926480
Ref: datetime and time-Footnote-61926547
Ref: datetime and time-Footnote-71926611
Node: math<10>1926676
Ref: whatsnew/3 2 math1926797
Ref: 122a1926797
Ref: math<10>-Footnote-11928680
Node: abc<3>1928733
Ref: whatsnew/3 2 abc1928842
Ref: 122f1928842
Ref: abc<3>-Footnote-11929469
Node: io<7>1929533
Ref: whatsnew/3 2 io1929641
Ref: 12301929641
Ref: io<7>-Footnote-11930809
Node: reprlib1930873
Ref: whatsnew/3 2 reprlib1930985
Ref: 12321930985
Ref: reprlib-Footnote-11931970
Ref: reprlib-Footnote-21932034
Node: logging<8>1932098
Ref: whatsnew/3 2 logging1932211
Ref: 12341932211
Node: csv<4>1934076
Ref: whatsnew/3 2 csv1934195
Ref: 123c1934195
Ref: csv<4>-Footnote-11935061
Ref: csv<4>-Footnote-21935125
Node: contextlib<8>1935192
Ref: whatsnew/3 2 contextlib1935322
Ref: 12401935322
Ref: contextlib<8>-Footnote-11937540
Node: decimal and fractions1937604
Ref: whatsnew/3 2 decimal-and-fractions1937731
Ref: 12431937731
Ref: decimal and fractions-Footnote-11940165
Ref: decimal and fractions-Footnote-21940229
Ref: decimal and fractions-Footnote-31940293
Ref: decimal and fractions-Footnote-41940357
Ref: decimal and fractions-Footnote-51940421
Ref: decimal and fractions-Footnote-61940485
Node: ftp1940549
Ref: whatsnew/3 2 ftp1940668
Ref: 12471940668
Ref: ftp-Footnote-11942013
Ref: ftp-Footnote-21942077
Ref: ftp-Footnote-31942141
Ref: ftp-Footnote-41942205
Node: popen1942269
Ref: whatsnew/3 2 popen1942376
Ref: 12481942376
Ref: popen-Footnote-11942683
Ref: popen-Footnote-21942747
Node: select<3>1942812
Ref: whatsnew/3 2 select1942932
Ref: 12491942932
Ref: select<3>-Footnote-11943366
Node: gzip and zipfile1943430
Ref: whatsnew/3 2 gzip-and-zipfile1943556
Ref: 124b1943556
Ref: gzip and zipfile-Footnote-11945123
Ref: gzip and zipfile-Footnote-21945187
Ref: gzip and zipfile-Footnote-31945251
Ref: gzip and zipfile-Footnote-41945318
Ref: gzip and zipfile-Footnote-51945382
Ref: gzip and zipfile-Footnote-61945446
Node: tarfile<10>1945510
Ref: whatsnew/3 2 tarfile1945637
Ref: 124f1945637
Ref: tarfile<10>-Footnote-11947213
Node: hashlib<7>1947277
Ref: whatsnew/3 2 hashlib1947394
Ref: 12521947394
Ref: hashlib<7>-Footnote-11948151
Node: ast<5>1948215
Ref: whatsnew/3 2 ast1948327
Ref: 12531948327
Node: os<13>1949266
Ref: whatsnew/3 2 os1949377
Ref: 12541949377
Node: shutil<8>1950152
Ref: whatsnew/3 2 shutil1950268
Ref: 12581950268
Node: sqlite3<11>1952438
Ref: whatsnew/3 2 sqlite31952555
Ref: 125a1952555
Ref: sqlite3<11>-Footnote-11953206
Node: html<3>1953270
Ref: whatsnew/3 2 html1953388
Ref: 125b1953388
Node: socket<11>1953677
Ref: whatsnew/3 2 socket1953791
Ref: 125c1953791
Ref: socket<11>-Footnote-11954437
Ref: socket<11>-Footnote-21954501
Node: ssl<12>1954565
Ref: whatsnew/3 2 ssl1954676
Ref: 125e1954676
Ref: ssl<12>-Footnote-11956778
Ref: ssl<12>-Footnote-21956837
Ref: ssl<12>-Footnote-31956909
Ref: ssl<12>-Footnote-41956973
Ref: ssl<12>-Footnote-51957037
Ref: ssl<12>-Footnote-61957101
Ref: ssl<12>-Footnote-71957165
Ref: ssl<12>-Footnote-81957229
Ref: ssl<12>-Footnote-91957293
Node: nntp1957357
Ref: whatsnew/3 2 nntp1957480
Ref: 12621957480
Ref: nntp-Footnote-11958035
Ref: nntp-Footnote-21958099
Node: сертифікати1958163
Ref: whatsnew/3 2 certificates1958289
Ref: 12631958289
Ref: сертифікати-Footnote-11958696
Node: imaplib<4>1958760
Ref: whatsnew/3 2 imaplib1958896
Ref: 12651958896
Ref: imaplib<4>-Footnote-11959170
Node: http client<4>1959234
Ref: whatsnew/3 2 http-client1959360
Ref: 12671959360
Ref: http client<4>-Footnote-11960787
Node: unittest<11>1960852
Ref: whatsnew/3 2 unittest1960977
Ref: 126a1960977
Ref: unittest<11>-Footnote-11965661
Ref: unittest<11>-Footnote-21965726
Ref: unittest<11>-Footnote-31965790
Node: random<5>1965854
Ref: whatsnew/3 2 random1965974
Ref: 126f1965974
Ref: random<5>-Footnote-11966640
Node: poplib<4>1966704
Ref: whatsnew/3 2 poplib1966823
Ref: 12721966823
Ref: poplib<4>-Footnote-11967177
Node: asyncore<2>1967241
Ref: whatsnew/3 2 asyncore1967362
Ref: 12731967362
Ref: asyncore<2>-Footnote-11967817
Node: tempfile<5>1967881
Ref: whatsnew/3 2 tempfile1968004
Ref: 12741968004
Ref: tempfile<5>-Footnote-11968413
Node: inspect<10>1968477
Ref: whatsnew/3 2 inspect1968597
Ref: 12761968597
Ref: inspect<10>-Footnote-11969972
Node: pydoc<6>1970037
Ref: whatsnew/3 2 pydoc1970152
Ref: 12781970152
Ref: pydoc<6>-Footnote-11970471
Node: dis<5>1970535
Ref: whatsnew/3 2 dis1970645
Ref: 12791970645
Ref: dis<5>-Footnote-11972796
Node: dbm<7>1972860
Ref: whatsnew/3 2 dbm1972971
Ref: 127b1972971
Ref: dbm<7>-Footnote-11973160
Node: ctypes<3>1973224
Ref: whatsnew/3 2 ctypes1973336
Ref: 127c1973336
Node: site<4>1973455
Ref: whatsnew/3 2 site1973573
Ref: 127e1973573
Ref: site<4>-Footnote-11974807
Node: sysconfig<3>1974871
Ref: whatsnew/3 2 sysconfig1974986
Ref: 12821974986
Node: pdb<8>1977217
Ref: whatsnew/3 2 pdb1977340
Ref: 12861977340
Node: configparser<5>1978251
Ref: whatsnew/3 2 configparser1978377
Ref: 12871978377
Node: urllib parse<6>1981243
Ref: whatsnew/3 2 urllib-parse1981370
Ref: 12881981370
Ref: urllib parse<6>-Footnote-11983392
Ref: urllib parse<6>-Footnote-21983435
Ref: urllib parse<6>-Footnote-31983494
Ref: urllib parse<6>-Footnote-41983558
Ref: urllib parse<6>-Footnote-51983622
Node: mailbox1983686
Ref: whatsnew/3 2 mailbox1983808
Ref: 128c1983808
Ref: mailbox-Footnote-11985388
Node: turtledemo1985452
Ref: whatsnew/3 2 turtledemo1985550
Ref: 12931985550
Ref: turtledemo-Footnote-11985987
Node: Multi-threading1986052
Ref: whatsnew/3 2 multi-threading1986205
Ref: 12941986205
Ref: Multi-threading-Footnote-11987854
Ref: Multi-threading-Footnote-21987933
Ref: Multi-threading-Footnote-31987997
Ref: Multi-threading-Footnote-41988063
Node: Otimizações<11>1988127
Ref: whatsnew/3 2 optimizations1988252
Ref: 12961988252
Ref: Otimizações<11>-Footnote-11991757
Ref: Otimizações<11>-Footnote-21991821
Ref: Otimizações<11>-Footnote-31991885
Ref: Otimizações<11>-Footnote-41991949
Ref: Otimizações<11>-Footnote-51991995
Ref: Otimizações<11>-Footnote-61992059
Ref: Otimizações<11>-Footnote-71992123
Ref: Otimizações<11>-Footnote-81992188
Ref: Otimizações<11>-Footnote-91992252
Ref: Otimizações<11>-Footnote-101992316
Ref: Otimizações<11>-Footnote-111992381
Ref: Otimizações<11>-Footnote-121992446
Ref: Otimizações<11>-Footnote-131992511
Ref: Otimizações<11>-Footnote-141992579
Ref: Otimizações<11>-Footnote-151992644
Ref: Otimizações<11>-Footnote-161992710
Node: Unicode1992775
Ref: whatsnew/3 2 unicode1992891
Ref: 129b1992891
Ref: Unicode-Footnote-11993443
Ref: Unicode-Footnote-21993494
Ref: Unicode-Footnote-31993538
Node: Codecs1993610
Ref: whatsnew/3 2 codecs1993723
Ref: 129c1993723
Ref: Codecs-Footnote-11994653
Node: Documentação1994720
Ref: whatsnew/3 2 documentation1994830
Ref: 129d1994830
Ref: Documentação-Footnote-11996488
Ref: Documentação-Footnote-21996557
Ref: Documentação-Footnote-31996633
Ref: Documentação-Footnote-41996697
Node: IDLE1996761
Ref: whatsnew/3 2 idle1996880
Ref: 12a11996880
Ref: IDLE-Footnote-11997266
Ref: IDLE-Footnote-21997330
Node: Code Repository1997394
Ref: whatsnew/3 2 code-repository1997535
Ref: 12a21997535
Ref: Code Repository-Footnote-11998144
Ref: Code Repository-Footnote-21998183
Ref: Code Repository-Footnote-31998225
Ref: Code Repository-Footnote-41998279
Node: Mudanças a construções e API C<5>1998323
Ref: whatsnew/3 2 build-and-c-api-changes1998481
Ref: 12a31998481
Ref: Mudanças a construções e API C<5>-Footnote-12002658
Ref: Mudanças a construções e API C<5>-Footnote-22002723
Ref: Mudanças a construções e API C<5>-Footnote-32002787
Ref: Mudanças a construções e API C<5>-Footnote-42002851
Ref: Mudanças a construções e API C<5>-Footnote-52002915
Ref: Mudanças a construções e API C<5>-Footnote-62002979
Ref: Mudanças a construções e API C<5>-Footnote-72003043
Ref: Mudanças a construções e API C<5>-Footnote-82003107
Ref: Mudanças a construções e API C<5>-Footnote-92003171
Ref: Mudanças a construções e API C<5>-Footnote-102003235
Ref: Mudanças a construções e API C<5>-Footnote-112003300
Ref: Mudanças a construções e API C<5>-Footnote-122003365
Ref: Mudanças a construções e API C<5>-Footnote-132003430
Ref: Mudanças a construções e API C<5>-Footnote-142003495
Ref: Mudanças a construções e API C<5>-Footnote-152003578
Node: Porting to Python 3 22003679
Ref: whatsnew/3 2 porting-to-python-3-22003813
Ref: 12ac2003813
Ref: Porting to Python 3 2-Footnote-12010688
Ref: Porting to Python 3 2-Footnote-22010752
Ref: Porting to Python 3 2-Footnote-32010816
Ref: Porting to Python 3 2-Footnote-42010861
Ref: Porting to Python 3 2-Footnote-52010926
Ref: Porting to Python 3 2-Footnote-62010991
Ref: Porting to Python 3 2-Footnote-72011056
Node: O que há de novo no Python 3 12011120
Ref: whatsnew/3 1 doc2011295
Ref: 12bc2011295
Ref: whatsnew/3 1 translation-repo2011295
Ref: 12bd2011295
Ref: whatsnew/3 1 what-s-new-in-python-3-12011295
Ref: 12be2011295
Node: PEP 372 Dicionários ordenados2012043
Ref: whatsnew/3 1 pep-372-ordered-dictionaries2012209
Ref: 12bf2012209
Ref: PEP 372 Dicionários ordenados-Footnote-12014874
Ref: PEP 372 Dicionários ordenados-Footnote-22014902
Node: PEP 378 Especificador de formato para separador de milhares2014944
Ref: whatsnew/3 1 pep-378-format-specifier-for-thousands-separator2015152
Ref: 12c02015152
Ref: PEP 378 Especificador de formato para separador de milhares-Footnote-12016430
Node: Outras mudanças na linguagem<13>2016472
Ref: whatsnew/3 1 other-language-changes2016688
Ref: 12c12016688
Ref: Outras mudanças na linguagem<13>-Footnote-12021517
Ref: Outras mudanças na linguagem<13>-Footnote-22021584
Ref: Outras mudanças na linguagem<13>-Footnote-32021648
Ref: Outras mudanças na linguagem<13>-Footnote-42021712
Ref: Outras mudanças na linguagem<13>-Footnote-52021776
Ref: Outras mudanças na linguagem<13>-Footnote-62021821
Ref: Outras mudanças na linguagem<13>-Footnote-72021885
Node: New Improved and Deprecated Modules<2>2021949
Ref: whatsnew/3 1 new-improved-and-deprecated-modules2022123
Ref: 12c22022123
Ref: New Improved and Deprecated Modules<2>-Footnote-12030733
Ref: New Improved and Deprecated Modules<2>-Footnote-22030800
Ref: New Improved and Deprecated Modules<2>-Footnote-32030864
Ref: New Improved and Deprecated Modules<2>-Footnote-42030928
Ref: New Improved and Deprecated Modules<2>-Footnote-52030992
Ref: New Improved and Deprecated Modules<2>-Footnote-62031056
Ref: New Improved and Deprecated Modules<2>-Footnote-72031098
Ref: New Improved and Deprecated Modules<2>-Footnote-82031162
Ref: New Improved and Deprecated Modules<2>-Footnote-92031226
Ref: New Improved and Deprecated Modules<2>-Footnote-102031290
Ref: New Improved and Deprecated Modules<2>-Footnote-112031355
Ref: New Improved and Deprecated Modules<2>-Footnote-122031420
Ref: New Improved and Deprecated Modules<2>-Footnote-132031485
Node: Otimizações<12>2031550
Ref: whatsnew/3 1 optimizations2031698
Ref: 12d22031698
Ref: Otimizações<12>-Footnote-12033875
Ref: Otimizações<12>-Footnote-22033917
Ref: Otimizações<12>-Footnote-32033981
Ref: Otimizações<12>-Footnote-42034045
Ref: Otimizações<12>-Footnote-52034109
Ref: Otimizações<12>-Footnote-62034135
Ref: Otimizações<12>-Footnote-72034199
Node: IDLE<2>2034263
Ref: whatsnew/3 1 idle2034409
Ref: 12d32034409
Ref: IDLE<2>-Footnote-12034626
Node: Mudanças a construções e API C<6>2034690
Ref: whatsnew/3 1 build-and-c-api-changes2034840
Ref: 12d42034840
Ref: Mudanças a construções e API C<6>-Footnote-12037210
Ref: Mudanças a construções e API C<6>-Footnote-22037274
Ref: Mudanças a construções e API C<6>-Footnote-32037338
Ref: Mudanças a construções e API C<6>-Footnote-42037402
Ref: Mudanças a construções e API C<6>-Footnote-52037466
Node: Porting to Python 3 12037530
Ref: whatsnew/3 1 porting-to-python-3-12037664
Ref: 12d82037664
Node: O que há de novo no Python 3 02038816
Ref: whatsnew/3 0 doc2038991
Ref: 12d92038991
Ref: whatsnew/3 0 translation-repo2038991
Ref: 12da2038991
Ref: whatsnew/3 0 what-s-new-in-python-3-02038991
Ref: 12db2038991
Node: Obstáculos comuns2041057
Ref: whatsnew/3 0 common-stumbling-blocks2041192
Ref: 12dc2041192
Node: print é uma função2041593
Ref: whatsnew/3 0 print-is-a-function2041723
Ref: 12dd2041723
Ref: print é uma função-Footnote-12043512
Node: Visualizações e iteradores em vez de listas2043554
Ref: whatsnew/3 0 views-and-iterators-instead-of-lists2043721
Ref: 12de2043721
Node: Comparações de ordenação2045781
Ref: whatsnew/3 0 ordering-comparisons2045935
Ref: 12e12045935
Node: Inteiros2047505
Ref: whatsnew/3 0 integers2047656
Ref: 12e32047656
Ref: Inteiros-Footnote-12048966
Ref: Inteiros-Footnote-22049008
Node: Texto vs Dados em vez de Unicode vs 8 bits2049050
Ref: whatsnew/3 0 text-vs-data-instead-of-unicode-vs-8-bit2049164
Ref: 12e42049164
Ref: Texto vs Dados em vez de Unicode vs 8 bits-Footnote-12056475
Ref: Texto vs Dados em vez de Unicode vs 8 bits-Footnote-22056517
Ref: Texto vs Dados em vez de Unicode vs 8 bits-Footnote-32056559
Node: Visão geral das alterações da sintaxe2056601
Ref: whatsnew/3 0 overview-of-syntax-changes2056782
Ref: 12e82056782
Node: Nova sintaxe2057035
Ref: whatsnew/3 0 new-syntax2057149
Ref: 12e92057149
Ref: Nova sintaxe-Footnote-12059973
Ref: Nova sintaxe-Footnote-22060015
Ref: Nova sintaxe-Footnote-32060057
Ref: Nova sintaxe-Footnote-42060099
Ref: Nova sintaxe-Footnote-52060141
Node: Sintaxe alterada2060183
Ref: whatsnew/3 0 changed-syntax2060322
Ref: 12ec2060322
Ref: Sintaxe alterada-Footnote-12062187
Ref: Sintaxe alterada-Footnote-22062229
Ref: Sintaxe alterada-Footnote-32062271
Ref: Sintaxe alterada-Footnote-42062313
Node: Sintaxe removida2062355
Ref: whatsnew/3 0 removed-syntax2062473
Ref: 12ed2062473
Ref: Sintaxe removida-Footnote-12063805
Ref: Sintaxe removida-Footnote-22063847
Node: Mudanças já presentes no Python 2 62063889
Ref: whatsnew/3 0 changes-already-present-in-python-2-62064075
Ref: 12ef2064075
Node: Mudanças na biblioteca2068116
Ref: whatsnew/3 0 library-changes2068318
Ref: 13022068318
Ref: Mudanças na biblioteca-Footnote-12074760
Ref: Mudanças na biblioteca-Footnote-22074802
Ref: Mudanças na biblioteca-Footnote-32074844
Ref: Mudanças na biblioteca-Footnote-42074886
Ref: Mudanças na biblioteca-Footnote-52074928
Ref: Mudanças na biblioteca-Footnote-62074970
Node: PEP 3101 Uma nova abordagem para formatação de strings2075012
Ref: whatsnew/3 0 pep-3101-a-new-approach-to-string-formatting2075202
Ref: 13072075202
Ref: PEP 3101 Uma nova abordagem para formatação de strings-Footnote-12075652
Node: Mudanças para exceções2075694
Ref: whatsnew/3 0 changes-to-exceptions2075886
Ref: 13082075886
Ref: Mudanças para exceções-Footnote-12079759
Ref: Mudanças para exceções-Footnote-22079801
Ref: Mudanças para exceções-Footnote-32079843
Ref: Mudanças para exceções-Footnote-42079885
Ref: Mudanças para exceções-Footnote-52079927
Node: Outras mudanças diversas2079969
Ref: whatsnew/3 0 miscellaneous-other-changes2080141
Ref: 130c2080141
Node: Operadores e métodos especiais2080277
Ref: whatsnew/3 0 operators-and-special-methods2080398
Ref: 130d2080398
Ref: Operadores e métodos especiais-Footnote-12082137
Node: Funções embutidas2082179
Ref: whatsnew/3 0 builtins2082300
Ref: 13192082300
Ref: Funções embutidas-Footnote-12084920
Ref: Funções embutidas-Footnote-22084962
Node: Mudanças a construções e API C<7>2085004
Ref: whatsnew/3 0 build-and-c-api-changes2085161
Ref: 13202085161
Ref: Mudanças a construções e API C<7>-Footnote-12086274
Ref: Mudanças a construções e API C<7>-Footnote-22086316
Ref: Mudanças a construções e API C<7>-Footnote-32086358
Node: Desempenho2086400
Ref: whatsnew/3 0 performance2086558
Ref: 13222086558
Node: Portando para o Python 3 02086935
Ref: whatsnew/3 0 porting-to-python-3-02087048
Ref: 13232087048
Node: O que há de novo no Python 2 72088724
Ref: whatsnew/2 7 doc2088899
Ref: 13252088899
Ref: whatsnew/2 7 translation-repo2088899
Ref: 13262088899
Ref: whatsnew/2 7 what-s-new-in-python-2-72088899
Ref: 13272088899
Node: O futuro para o Python 2 x2091617
Ref: whatsnew/2 7 the-future-for-python-2-x2091773
Ref: 13282091773
Ref: whatsnew/2 7 whatsnew27-python312091773
Ref: 13292091773
Ref: O futuro para o Python 2 x-Footnote-12095528
Ref: O futuro para o Python 2 x-Footnote-22095570
Node: Mudanças no tratamento de avisos de descontinuação2095607
Ref: whatsnew/2 7 changes-to-the-handling-of-deprecation-warnings2095794
Ref: 132b2095794
Ref: Mudanças no tratamento de avisos de descontinuação-Footnote-12097532
Node: Recursos do Python 3 12097596
Ref: whatsnew/2 7 python-3-1-features2097813
Ref: 132c2097813
Node: PEP 372 Adicionando um dicionário ordenado a coleções2099931
Ref: whatsnew/2 7 pep-03722100157
Ref: 132d2100157
Ref: whatsnew/2 7 pep-372-adding-an-ordered-dictionary-to-collections2100157
Ref: 13302100157
Ref: PEP 372 Adicionando um dicionário ordenado a coleções-Footnote-12104000
Ref: PEP 372 Adicionando um dicionário ordenado a coleções-Footnote-22104028
Node: PEP 378 Especificador de formato para separador de milhares<2>2104070
Ref: whatsnew/2 7 pep-03782104332
Ref: 132e2104332
Ref: whatsnew/2 7 pep-378-format-specifier-for-thousands-separator2104332
Ref: 13322104332
Ref: PEP 378 Especificador de formato para separador de milhares<2>-Footnote-12105974
Node: PEP 389 O módulo argparse para analisar linhas de comando2106016
Ref: whatsnew/2 7 pep-389-the-argparse-module-for-parsing-command-lines2106280
Ref: 13332106280
Ref: PEP 389 O módulo argparse para analisar linhas de comando-Footnote-12110586
Node: PEP 391 Configuração baseada em dicionário para logging2110628
Ref: whatsnew/2 7 pep-391-dictionary-based-configuration-for-logging2110859
Ref: 13342110859
Ref: PEP 391 Configuração baseada em dicionário para logging-Footnote-12114995
Node: PEP 3106 Views de dicionário2115037
Ref: whatsnew/2 7 pep-3106-dictionary-views2115238
Ref: 133b2115238
Ref: PEP 3106 Views de dicionário-Footnote-12117449
Ref: PEP 3106 Views de dicionário-Footnote-22117491
Node: PEP 3137 O objeto memoryview2117555
Ref: whatsnew/2 7 pep-3137-the-memoryview-object2117731
Ref: 133c2117731
Ref: PEP 3137 O objeto memoryview-Footnote-12119417
Ref: PEP 3137 O objeto memoryview-Footnote-22119459
Node: Outras mudanças na linguagem<14>2119523
Ref: whatsnew/2 7 other-language-changes2119699
Ref: 133d2119699
Ref: Outras mudanças na linguagem<14>-Footnote-12130583
Ref: Outras mudanças na linguagem<14>-Footnote-22130647
Ref: Outras mudanças na linguagem<14>-Footnote-32130711
Ref: Outras mudanças na linguagem<14>-Footnote-42130775
Ref: Outras mudanças na linguagem<14>-Footnote-52130839
Ref: Outras mudanças na linguagem<14>-Footnote-62130903
Ref: Outras mudanças na linguagem<14>-Footnote-72130967
Ref: Outras mudanças na linguagem<14>-Footnote-82131031
Ref: Outras mudanças na linguagem<14>-Footnote-92131095
Ref: Outras mudanças na linguagem<14>-Footnote-102131159
Ref: Outras mudanças na linguagem<14>-Footnote-112131224
Ref: Outras mudanças na linguagem<14>-Footnote-122131289
Ref: Outras mudanças na linguagem<14>-Footnote-132131354
Ref: Outras mudanças na linguagem<14>-Footnote-142131419
Ref: Outras mudanças na linguagem<14>-Footnote-152131487
Ref: Outras mudanças na linguagem<14>-Footnote-162131552
Ref: Outras mudanças na linguagem<14>-Footnote-172131617
Ref: Outras mudanças na linguagem<14>-Footnote-182131682
Ref: Outras mudanças na linguagem<14>-Footnote-192131750
Ref: Outras mudanças na linguagem<14>-Footnote-202131815
Ref: Outras mudanças na linguagem<14>-Footnote-212131880
Ref: Outras mudanças na linguagem<14>-Footnote-222131945
Ref: Outras mudanças na linguagem<14>-Footnote-232132010
Ref: Outras mudanças na linguagem<14>-Footnote-242132075
Node: Alterações no interpretador2132140
Ref: whatsnew/2 7 interpreter-changes2132265
Ref: 13412132265
Ref: whatsnew/2 7 new-27-interpreter2132265
Ref: 13422132265
Ref: Alterações no interpretador-Footnote-12132972
Node: Otimizações<13>2133036
Ref: whatsnew/2 7 optimizations2133161
Ref: 13432133161
Ref: Otimizações<13>-Footnote-12138528
Ref: Otimizações<13>-Footnote-22138592
Ref: Otimizações<13>-Footnote-32138656
Ref: Otimizações<13>-Footnote-42138720
Ref: Otimizações<13>-Footnote-52138784
Ref: Otimizações<13>-Footnote-62138848
Ref: Otimizações<13>-Footnote-72138915
Ref: Otimizações<13>-Footnote-82138979
Ref: Otimizações<13>-Footnote-92139043
Ref: Otimizações<13>-Footnote-102139107
Ref: Otimizações<13>-Footnote-112139172
Ref: Otimizações<13>-Footnote-122139237
Ref: Otimizações<13>-Footnote-132139302
Node: Módulos Novos ou Aprimorados2139367
Ref: whatsnew/2 7 new-and-improved-modules2139551
Ref: 13452139551
Ref: Módulos Novos ou Aprimorados-Footnote-12177458
Ref: Módulos Novos ou Aprimorados-Footnote-22177522
Ref: Módulos Novos ou Aprimorados-Footnote-32177586
Ref: Módulos Novos ou Aprimorados-Footnote-42177639
Ref: Módulos Novos ou Aprimorados-Footnote-52177703
Ref: Módulos Novos ou Aprimorados-Footnote-62177767
Ref: Módulos Novos ou Aprimorados-Footnote-72177834
Ref: Módulos Novos ou Aprimorados-Footnote-82177898
Ref: Módulos Novos ou Aprimorados-Footnote-92177962
Ref: Módulos Novos ou Aprimorados-Footnote-102178026
Ref: Módulos Novos ou Aprimorados-Footnote-112178091
Ref: Módulos Novos ou Aprimorados-Footnote-122178156
Ref: Módulos Novos ou Aprimorados-Footnote-132178221
Ref: Módulos Novos ou Aprimorados-Footnote-142178261
Ref: Módulos Novos ou Aprimorados-Footnote-152178326
Ref: Módulos Novos ou Aprimorados-Footnote-162178391
Ref: Módulos Novos ou Aprimorados-Footnote-172178456
Ref: Módulos Novos ou Aprimorados-Footnote-182178521
Ref: Módulos Novos ou Aprimorados-Footnote-192178586
Ref: Módulos Novos ou Aprimorados-Footnote-202178651
Ref: Módulos Novos ou Aprimorados-Footnote-212178716
Ref: Módulos Novos ou Aprimorados-Footnote-222178781
Ref: Módulos Novos ou Aprimorados-Footnote-232178846
Ref: Módulos Novos ou Aprimorados-Footnote-242178911
Ref: Módulos Novos ou Aprimorados-Footnote-252178976
Ref: Módulos Novos ou Aprimorados-Footnote-262179041
Ref: Módulos Novos ou Aprimorados-Footnote-272179109
Ref: Módulos Novos ou Aprimorados-Footnote-282179174
Ref: Módulos Novos ou Aprimorados-Footnote-292179239
Ref: Módulos Novos ou Aprimorados-Footnote-302179304
Ref: Módulos Novos ou Aprimorados-Footnote-312179369
Ref: Módulos Novos ou Aprimorados-Footnote-322179434
Ref: Módulos Novos ou Aprimorados-Footnote-332179499
Ref: Módulos Novos ou Aprimorados-Footnote-342179564
Ref: Módulos Novos ou Aprimorados-Footnote-352179629
Ref: Módulos Novos ou Aprimorados-Footnote-362179694
Ref: Módulos Novos ou Aprimorados-Footnote-372179759
Ref: Módulos Novos ou Aprimorados-Footnote-382179824
Ref: Módulos Novos ou Aprimorados-Footnote-392179889
Ref: Módulos Novos ou Aprimorados-Footnote-402179954
Ref: Módulos Novos ou Aprimorados-Footnote-412180019
Ref: Módulos Novos ou Aprimorados-Footnote-422180084
Ref: Módulos Novos ou Aprimorados-Footnote-432180149
Ref: Módulos Novos ou Aprimorados-Footnote-442180214
Ref: Módulos Novos ou Aprimorados-Footnote-452180279
Ref: Módulos Novos ou Aprimorados-Footnote-462180344
Ref: Módulos Novos ou Aprimorados-Footnote-472180409
Ref: Módulos Novos ou Aprimorados-Footnote-482180474
Ref: Módulos Novos ou Aprimorados-Footnote-492180542
Ref: Módulos Novos ou Aprimorados-Footnote-502180607
Ref: Módulos Novos ou Aprimorados-Footnote-512180672
Ref: Módulos Novos ou Aprimorados-Footnote-522180737
Ref: Módulos Novos ou Aprimorados-Footnote-532180802
Ref: Módulos Novos ou Aprimorados-Footnote-542180867
Ref: Módulos Novos ou Aprimorados-Footnote-552180932
Ref: Módulos Novos ou Aprimorados-Footnote-562180997
Ref: Módulos Novos ou Aprimorados-Footnote-572181062
Ref: Módulos Novos ou Aprimorados-Footnote-582181127
Ref: Módulos Novos ou Aprimorados-Footnote-592181192
Ref: Módulos Novos ou Aprimorados-Footnote-602181257
Ref: Módulos Novos ou Aprimorados-Footnote-612181322
Ref: Módulos Novos ou Aprimorados-Footnote-622181387
Ref: Módulos Novos ou Aprimorados-Footnote-632181452
Ref: Módulos Novos ou Aprimorados-Footnote-642181517
Ref: Módulos Novos ou Aprimorados-Footnote-652181582
Ref: Módulos Novos ou Aprimorados-Footnote-662181647
Ref: Módulos Novos ou Aprimorados-Footnote-672181712
Ref: Módulos Novos ou Aprimorados-Footnote-682181777
Ref: Módulos Novos ou Aprimorados-Footnote-692181842
Ref: Módulos Novos ou Aprimorados-Footnote-702181888
Ref: Módulos Novos ou Aprimorados-Footnote-712181953
Ref: Módulos Novos ou Aprimorados-Footnote-722182018
Ref: Módulos Novos ou Aprimorados-Footnote-732182072
Ref: Módulos Novos ou Aprimorados-Footnote-742182137
Ref: Módulos Novos ou Aprimorados-Footnote-752182202
Ref: Módulos Novos ou Aprimorados-Footnote-762182267
Ref: Módulos Novos ou Aprimorados-Footnote-772182332
Ref: Módulos Novos ou Aprimorados-Footnote-782182397
Ref: Módulos Novos ou Aprimorados-Footnote-792182465
Ref: Módulos Novos ou Aprimorados-Footnote-802182530
Ref: Módulos Novos ou Aprimorados-Footnote-812182595
Ref: Módulos Novos ou Aprimorados-Footnote-822182660
Ref: Módulos Novos ou Aprimorados-Footnote-832182725
Ref: Módulos Novos ou Aprimorados-Footnote-842182790
Ref: Módulos Novos ou Aprimorados-Footnote-852182855
Ref: Módulos Novos ou Aprimorados-Footnote-862182923
Ref: Módulos Novos ou Aprimorados-Footnote-872182991
Ref: Módulos Novos ou Aprimorados-Footnote-882183056
Ref: Módulos Novos ou Aprimorados-Footnote-892183116
Ref: Módulos Novos ou Aprimorados-Footnote-902183176
Ref: Módulos Novos ou Aprimorados-Footnote-912183241
Ref: Módulos Novos ou Aprimorados-Footnote-922183306
Ref: Módulos Novos ou Aprimorados-Footnote-932183371
Ref: Módulos Novos ou Aprimorados-Footnote-942183436
Ref: Módulos Novos ou Aprimorados-Footnote-952183501
Ref: Módulos Novos ou Aprimorados-Footnote-962183566
Ref: Módulos Novos ou Aprimorados-Footnote-972183631
Node: Novo módulo importlib2183696
Ref: whatsnew/2 7 importlib-section2183815
Ref: 132f2183815
Ref: whatsnew/2 7 new-module-importlib2183815
Ref: 13702183815
Node: Novo módulo sysconfig2185394
Ref: whatsnew/2 7 new-module-sysconfig2185552
Ref: 13712185552
Node: ttk Widgets temáticos para Tk2187001
Ref: whatsnew/2 7 ttk-themed-widgets-for-tk2187164
Ref: 13732187164
Ref: ttk Widgets temáticos para Tk-Footnote-12188346
Ref: ttk Widgets temáticos para Tk-Footnote-22188410
Node: Módulo atualizado unittest2188474
Ref: whatsnew/2 7 unittest-section2188649
Ref: 13742188649
Ref: whatsnew/2 7 updated-module-unittest2188649
Ref: 13752188649
Ref: Módulo atualizado unittest-Footnote-12198205
Ref: Módulo atualizado unittest-Footnote-22198249
Ref: Módulo atualizado unittest-Footnote-32198276
Ref: Módulo atualizado unittest-Footnote-42198313
Ref: Módulo atualizado unittest-Footnote-52198377
Ref: Módulo atualizado unittest-Footnote-62198441
Ref: Módulo atualizado unittest-Footnote-72198508
Ref: Módulo atualizado unittest-Footnote-82198572
Ref: Módulo atualizado unittest-Footnote-92198636
Ref: Módulo atualizado unittest-Footnote-102198700
Ref: Módulo atualizado unittest-Footnote-112198765
Ref: Módulo atualizado unittest-Footnote-122198830
Ref: Módulo atualizado unittest-Footnote-132198895
Ref: Módulo atualizado unittest-Footnote-142198960
Ref: Módulo atualizado unittest-Footnote-152199025
Node: Módulo atualizado ElementTree 1 32199090
Ref: whatsnew/2 7 elementtree-section2199226
Ref: 13912199226
Ref: whatsnew/2 7 updated-module-elementtree-1-32199226
Ref: 13922199226
Ref: Módulo atualizado ElementTree 1 3-Footnote-12203469
Node: Mudanças a construções e API C<8>2203533
Ref: whatsnew/2 7 build-and-c-api-changes2203717
Ref: 13952203717
Ref: Mudanças a construções e API C<8>-Footnote-12213197
Ref: Mudanças a construções e API C<8>-Footnote-22213310
Ref: Mudanças a construções e API C<8>-Footnote-32213374
Ref: Mudanças a construções e API C<8>-Footnote-42213438
Ref: Mudanças a construções e API C<8>-Footnote-52213502
Ref: Mudanças a construções e API C<8>-Footnote-62213566
Ref: Mudanças a construções e API C<8>-Footnote-72213630
Ref: Mudanças a construções e API C<8>-Footnote-82213694
Ref: Mudanças a construções e API C<8>-Footnote-92213749
Ref: Mudanças a construções e API C<8>-Footnote-102213813
Ref: Mudanças a construções e API C<8>-Footnote-112213878
Ref: Mudanças a construções e API C<8>-Footnote-122213943
Ref: Mudanças a construções e API C<8>-Footnote-132214008
Ref: Mudanças a construções e API C<8>-Footnote-142214076
Ref: Mudanças a construções e API C<8>-Footnote-152214144
Ref: Mudanças a construções e API C<8>-Footnote-162214209
Ref: Mudanças a construções e API C<8>-Footnote-172214274
Ref: Mudanças a construções e API C<8>-Footnote-182214339
Ref: Mudanças a construções e API C<8>-Footnote-192214404
Ref: Mudanças a construções e API C<8>-Footnote-202214469
Ref: Mudanças a construções e API C<8>-Footnote-212214537
Ref: Mudanças a construções e API C<8>-Footnote-222214602
Node: Capsules2214667
Ref: whatsnew/2 7 capsules2214799
Ref: 13a12214799
Ref: whatsnew/2 7 whatsnew27-capsules2214799
Ref: 13a22214799
Ref: Capsules-Footnote-12216938
Node: Alterações específicas da porta Windows2217002
Ref: whatsnew/2 7 port-specific-changes-windows2217186
Ref: 13a52217186
Ref: Alterações específicas da porta Windows-Footnote-12219106
Ref: Alterações específicas da porta Windows-Footnote-22219170
Ref: Alterações específicas da porta Windows-Footnote-32219234
Ref: Alterações específicas da porta Windows-Footnote-42219298
Ref: Alterações específicas da porta Windows-Footnote-52219365
Ref: Alterações específicas da porta Windows-Footnote-62219429
Node: Alterações específicas da porta Mac OS X2219493
Ref: whatsnew/2 7 port-specific-changes-mac-os-x2219711
Ref: 13b12219711
Ref: Alterações específicas da porta Mac OS X-Footnote-12220821
Ref: Alterações específicas da porta Mac OS X-Footnote-22220885
Node: Alterações específicas da porta FreeBSD2220950
Ref: whatsnew/2 7 port-specific-changes-freebsd2221117
Ref: 13b22221117
Ref: Alterações específicas da porta FreeBSD-Footnote-12221577
Node: Outras alterações e correções2221641
Ref: whatsnew/2 7 other-changes-and-fixes2221820
Ref: 13b32221820
Ref: Outras alterações e correções-Footnote-12224255
Ref: Outras alterações e correções-Footnote-22224319
Ref: Outras alterações e correções-Footnote-32224386
Ref: Outras alterações e correções-Footnote-42224450
Ref: Outras alterações e correções-Footnote-52224514
Node: Portando para Python 2 72224578
Ref: whatsnew/2 7 porting-to-python-2-72224790
Ref: 13b52224790
Ref: Portando para Python 2 7-Footnote-12230759
Ref: Portando para Python 2 7-Footnote-22230823
Ref: Portando para Python 2 7-Footnote-32230887
Ref: Portando para Python 2 7-Footnote-42230951
Ref: Portando para Python 2 7-Footnote-52231015
Ref: Portando para Python 2 7-Footnote-62231079
Ref: Portando para Python 2 7-Footnote-72231143
Ref: Portando para Python 2 7-Footnote-82231207
Ref: Portando para Python 2 7-Footnote-92231271
Ref: Portando para Python 2 7-Footnote-102231335
Ref: Portando para Python 2 7-Footnote-112231400
Ref: Portando para Python 2 7-Footnote-122231465
Ref: Portando para Python 2 7-Footnote-132231530
Ref: Portando para Python 2 7-Footnote-142231590
Node: Novos recursos adicionados às versões de manutenção do Python 2 72231655
Ref: whatsnew/2 7 new-features-added-to-python-2-7-maintenance-releases2231849
Ref: 13b62231849
Ref: whatsnew/2 7 py27-maintenance-enhancements2231849
Ref: 132a2231849
Node: Duas novas variáveis de ambiente para modo de depuração2233586
Ref: whatsnew/2 7 two-new-environment-variables-for-debug-mode2233824
Ref: 13b72233824
Ref: Duas novas variáveis de ambiente para modo de depuração-Footnote-12234598
Ref: Duas novas variáveis de ambiente para modo de depuração-Footnote-22234663
Node: PEP 434 Exceção de aprimoramento do IDLE para todos os branches2234728
Ref: whatsnew/2 7 pep-434-idle-enhancement-exception-for-all-branches2235033
Ref: 13b82235033
Ref: PEP 434 Exceção de aprimoramento do IDLE para todos os branches-Footnote-12235619
Node: PEP 466 Aprimoramentos de segurança de rede do Python 2 72235661
Ref: whatsnew/2 7 pep-466-network-security-enhancements-for-python-2-72235963
Ref: 13b92235963
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-12238434
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-22238476
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-32238518
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-42238583
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-52238648
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-62238690
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-72238755
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-82238820
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-92238875
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-102238917
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-112238983
Ref: PEP 466 Aprimoramentos de segurança de rede do Python 2 7-Footnote-122239049
Node: PEP 477 Backport do ensurepip PEP 453 para o Python 2 72239115
Ref: whatsnew/2 7 pep-477-backport-ensurepip-pep-453-to-python-2-72239441
Ref: 13bc2239441
Ref: PEP 477 Backport do ensurepip PEP 453 para o Python 2 7-Footnote-12239969
Ref: PEP 477 Backport do ensurepip PEP 453 para o Python 2 7-Footnote-22240011
Node: Bootstrapping pip By Default<2>2240053
Ref: whatsnew/2 7 bootstrapping-pip-by-default2240215
Ref: 13bd2240215
Ref: Bootstrapping pip By Default<2>-Footnote-12241986
Ref: Bootstrapping pip By Default<2>-Footnote-22242028
Node: Mudanças na documentação<2>2242118
Ref: whatsnew/2 7 documentation-changes2242280
Ref: 13be2242280
Ref: Mudanças na documentação<2>-Footnote-12243235
Ref: Mudanças na documentação<2>-Footnote-22243272
Node: PEP 476 Habilitando verificação de certificado por padrão para clientes http stdlib<2>2243314
Ref: whatsnew/2 7 pep-476-enabling-certificate-verification-by-default-for-stdlib-http-clients2243654
Ref: 13bf2243654
Ref: PEP 476 Habilitando verificação de certificado por padrão para clientes http stdlib<2>-Footnote-12244843
Node: PEP 493 Ferramentas de migração de verificação HTTPS para Python 2 72244885
Ref: whatsnew/2 7 pep-493-https-verification-migration-tools-for-python-2-72245213
Ref: 13c02245213
Ref: PEP 493 Ferramentas de migração de verificação HTTPS para Python 2 7-Footnote-12246505
Node: Novo alvo de construção make regen-all<3>2246547
Ref: whatsnew/2 7 new-make-regen-all-build-target2246833
Ref: 13c12246833
Ref: Novo alvo de construção make regen-all<3>-Footnote-12247744
Ref: Novo alvo de construção make regen-all<3>-Footnote-22247812
Node: Remoção do alvo de construção make touch<3>2247877
Ref: whatsnew/2 7 removal-of-make-touch-build-target2248082
Ref: 13c22248082
Ref: Remoção do alvo de construção make touch<3>-Footnote-12248552
Node: Reconhecimentos2248617
Ref: whatsnew/2 7 acknowledgements2248778
Ref: 13c32248778
Ref: whatsnew/2 7 acks272248778
Ref: 13c42248778
Node: O que há de novo no Python 2 62249049
Ref: whatsnew/2 6 doc2249219
Ref: 13c52249219
Ref: whatsnew/2 6 translation-repo2249219
Ref: 13c62249219
Ref: whatsnew/2 6 what-s-new-in-python-2-62249219
Ref: 13c72249219
Ref: whatsnew/2 6 whats-new-in-2-62249219
Ref: 12f02249219
Ref: O que há de novo no Python 2 6-Footnote-12252335
Node: Python 3 02252377
Ref: whatsnew/2 6 python-3-02252498
Ref: 13c82252498
Ref: Python 3 0-Footnote-12254615
Ref: Python 3 0-Footnote-22254657
Node: Changes to the Development Process2254699
Ref: whatsnew/2 6 changes-to-the-development-process2254861
Ref: 13c92254861
Node: New Issue Tracker Roundup2255379
Ref: whatsnew/2 6 new-issue-tracker-roundup2255538
Ref: 13ca2255538
Ref: New Issue Tracker Roundup-Footnote-12257593
Ref: New Issue Tracker Roundup-Footnote-22257642
Ref: New Issue Tracker Roundup-Footnote-32257673
Ref: New Issue Tracker Roundup-Footnote-42257713
Ref: New Issue Tracker Roundup-Footnote-52257748
Node: New Documentation Format reStructuredText Using Sphinx2257786
Ref: whatsnew/2 6 new-documentation-format-restructuredtext-using-sphinx2257945
Ref: 13cb2257945
Ref: New Documentation Format reStructuredText Using Sphinx-Footnote-12260066
Ref: New Documentation Format reStructuredText Using Sphinx-Footnote-22260125
Ref: New Documentation Format reStructuredText Using Sphinx-Footnote-32260174
Ref: New Documentation Format reStructuredText Using Sphinx-Footnote-42260210
Node: PEP 343 The ‘with’ statement2260250
Ref: whatsnew/2 6 pep-03432260454
Ref: 12f12260454
Ref: whatsnew/2 6 pep-343-the-with-statement2260454
Ref: 13cc2260454
Node: Writing Context Managers2263739
Ref: whatsnew/2 6 new-26-context-managers2263862
Ref: 12f22263862
Ref: whatsnew/2 6 writing-context-managers2263862
Ref: 13ce2263862
Node: The contextlib module2268407
Ref: whatsnew/2 6 new-module-contextlib2268530
Ref: 12f32268530
Ref: whatsnew/2 6 the-contextlib-module2268530
Ref: 13cf2268530
Ref: The contextlib module-Footnote-12271051
Node: PEP 366 Explicit Relative Imports From a Main Module2271093
Ref: whatsnew/2 6 pep-03662271303
Ref: 12f42271303
Ref: whatsnew/2 6 pep-366-explicit-relative-imports-from-a-main-module2271303
Ref: 13d12271303
Node: PEP 370 Per-user site-packages Directory2272062
Ref: whatsnew/2 6 pep-03702272275
Ref: 12f52272275
Ref: whatsnew/2 6 pep-370-per-user-site-packages-directory2272275
Ref: 13d32272275
Ref: PEP 370 Per-user site-packages Directory-Footnote-12273742
Node: PEP 371 The multiprocessing Package2273784
Ref: whatsnew/2 6 pep-03712273980
Ref: 12f62273980
Ref: whatsnew/2 6 pep-371-the-multiprocessing-package2273980
Ref: 13d72273980
Ref: PEP 371 The multiprocessing Package-Footnote-12279229
Node: PEP 3101 Advanced String Formatting2279271
Ref: whatsnew/2 6 pep-31012279455
Ref: 12f72279455
Ref: whatsnew/2 6 pep-3101-advanced-string-formatting2279455
Ref: 13e12279455
Ref: PEP 3101 Advanced String Formatting-Footnote-12285193
Node: PEP 3105 print As a Function2285235
Ref: whatsnew/2 6 pep-31052285419
Ref: 12f82285419
Ref: whatsnew/2 6 pep-3105-print-as-a-function2285419
Ref: 13e32285419
Ref: PEP 3105 print As a Function-Footnote-12286553
Node: PEP 3110 Exception-Handling Changes2286595
Ref: whatsnew/2 6 pep-31102286766
Ref: 12f92286766
Ref: whatsnew/2 6 pep-3110-exception-handling-changes2286766
Ref: 13e42286766
Ref: PEP 3110 Exception-Handling Changes-Footnote-12288372
Node: PEP 3112 Byte Literals2288414
Ref: whatsnew/2 6 pep-31122288581
Ref: 12fa2288581
Ref: whatsnew/2 6 pep-3112-byte-literals2288581
Ref: 13e52288581
Ref: PEP 3112 Byte Literals-Footnote-12291648
Node: PEP 3116 New I/O Library2291690
Ref: whatsnew/2 6 pep-31162291854
Ref: 12fb2291854
Ref: whatsnew/2 6 pep-3116-new-i-o-library2291854
Ref: 13f12291854
Ref: PEP 3116 New I/O Library-Footnote-12295663
Node: PEP 3118 Revised Buffer Protocol2295705
Ref: whatsnew/2 6 pep-31182295877
Ref: 12fc2295877
Ref: whatsnew/2 6 pep-3118-revised-buffer-protocol2295877
Ref: 13fb2295877
Ref: PEP 3118 Revised Buffer Protocol-Footnote-12298007
Node: PEP 3119 Abstract Base Classes2298049
Ref: whatsnew/2 6 pep-31192298240
Ref: 12fd2298240
Ref: whatsnew/2 6 pep-3119-abstract-base-classes2298240
Ref: 13ff2298240
Ref: PEP 3119 Abstract Base Classes-Footnote-12303634
Node: PEP 3127 Integer Literal Support and Syntax2303676
Ref: whatsnew/2 6 pep-31272303860
Ref: 12fe2303860
Ref: whatsnew/2 6 pep-3127-integer-literal-support-and-syntax2303860
Ref: 14012303860
Ref: PEP 3127 Integer Literal Support and Syntax-Footnote-12305232
Node: PEP 3129 Class Decorators2305274
Ref: whatsnew/2 6 pep-31292305465
Ref: 12ff2305465
Ref: whatsnew/2 6 pep-3129-class-decorators2305465
Ref: 14022305465
Ref: PEP 3129 Class Decorators-Footnote-12305864
Node: PEP 3141 A Type Hierarchy for Numbers2305906
Ref: whatsnew/2 6 pep-31412306087
Ref: 13002306087
Ref: whatsnew/2 6 pep-3141-a-type-hierarchy-for-numbers2306087
Ref: 14032306087
Ref: PEP 3141 A Type Hierarchy for Numbers-Footnote-12308295
Ref: PEP 3141 A Type Hierarchy for Numbers-Footnote-22308337
Ref: PEP 3141 A Type Hierarchy for Numbers-Footnote-32308435
Node: The fractions Module2308541
Ref: whatsnew/2 6 the-fractions-module2308635
Ref: 14072308635
Node: Outras mudanças na linguagem<15>2310242
Ref: whatsnew/2 6 other-language-changes2310430
Ref: 14082310430
Ref: Outras mudanças na linguagem<15>-Footnote-12319360
Ref: Outras mudanças na linguagem<15>-Footnote-22319427
Ref: Outras mudanças na linguagem<15>-Footnote-32319491
Ref: Outras mudanças na linguagem<15>-Footnote-42319558
Ref: Outras mudanças na linguagem<15>-Footnote-52319622
Ref: Outras mudanças na linguagem<15>-Footnote-62319686
Ref: Outras mudanças na linguagem<15>-Footnote-72319750
Ref: Outras mudanças na linguagem<15>-Footnote-82319814
Ref: Outras mudanças na linguagem<15>-Footnote-92319878
Ref: Outras mudanças na linguagem<15>-Footnote-102319942
Ref: Outras mudanças na linguagem<15>-Footnote-112320007
Ref: Outras mudanças na linguagem<15>-Footnote-122320072
Ref: Outras mudanças na linguagem<15>-Footnote-132320140
Ref: Outras mudanças na linguagem<15>-Footnote-142320208
Ref: Outras mudanças na linguagem<15>-Footnote-152320276
Ref: Outras mudanças na linguagem<15>-Footnote-162320344
Node: Otimizações<14>2320412
Ref: whatsnew/2 6 optimizations2320540
Ref: 14102320540
Ref: Otimizações<14>-Footnote-12323395
Ref: Otimizações<14>-Footnote-22323462
Ref: Otimizações<14>-Footnote-32323529
Ref: Otimizações<14>-Footnote-42323593
Node: Alterações no interpretador<2>2323657
Ref: whatsnew/2 6 interpreter-changes2323785
Ref: 14112323785
Ref: whatsnew/2 6 new-26-interpreter2323785
Ref: 14122323785
Node: Módulos Novos ou Aprimorados<2>2325393
Ref: whatsnew/2 6 new-and-improved-modules2325569
Ref: 14162325569
Ref: Módulos Novos ou Aprimorados<2>-Footnote-12368202
Ref: Módulos Novos ou Aprimorados<2>-Footnote-22368269
Ref: Módulos Novos ou Aprimorados<2>-Footnote-32368322
Ref: Módulos Novos ou Aprimorados<2>-Footnote-42368386
Ref: Módulos Novos ou Aprimorados<2>-Footnote-52368452
Ref: Módulos Novos ou Aprimorados<2>-Footnote-62368516
Ref: Módulos Novos ou Aprimorados<2>-Footnote-72368583
Ref: Módulos Novos ou Aprimorados<2>-Footnote-82368647
Ref: Módulos Novos ou Aprimorados<2>-Footnote-92368701
Ref: Módulos Novos ou Aprimorados<2>-Footnote-102368768
Ref: Módulos Novos ou Aprimorados<2>-Footnote-112368836
Ref: Módulos Novos ou Aprimorados<2>-Footnote-122368904
Ref: Módulos Novos ou Aprimorados<2>-Footnote-132368969
Ref: Módulos Novos ou Aprimorados<2>-Footnote-142369034
Ref: Módulos Novos ou Aprimorados<2>-Footnote-152369101
Ref: Módulos Novos ou Aprimorados<2>-Footnote-162369166
Ref: Módulos Novos ou Aprimorados<2>-Footnote-172369234
Ref: Módulos Novos ou Aprimorados<2>-Footnote-182369299
Ref: Módulos Novos ou Aprimorados<2>-Footnote-192369367
Ref: Módulos Novos ou Aprimorados<2>-Footnote-202369435
Ref: Módulos Novos ou Aprimorados<2>-Footnote-212369503
Ref: Módulos Novos ou Aprimorados<2>-Footnote-222369570
Ref: Módulos Novos ou Aprimorados<2>-Footnote-232369638
Ref: Módulos Novos ou Aprimorados<2>-Footnote-242369706
Ref: Módulos Novos ou Aprimorados<2>-Footnote-252369771
Ref: Módulos Novos ou Aprimorados<2>-Footnote-262369836
Ref: Módulos Novos ou Aprimorados<2>-Footnote-272369904
Ref: Módulos Novos ou Aprimorados<2>-Footnote-282369972
Ref: Módulos Novos ou Aprimorados<2>-Footnote-292370039
Ref: Módulos Novos ou Aprimorados<2>-Footnote-302370104
Ref: Módulos Novos ou Aprimorados<2>-Footnote-312370169
Ref: Módulos Novos ou Aprimorados<2>-Footnote-322370234
Ref: Módulos Novos ou Aprimorados<2>-Footnote-332370299
Ref: Módulos Novos ou Aprimorados<2>-Footnote-342370364
Ref: Módulos Novos ou Aprimorados<2>-Footnote-352370429
Ref: Módulos Novos ou Aprimorados<2>-Footnote-362370494
Ref: Módulos Novos ou Aprimorados<2>-Footnote-372370554
Ref: Módulos Novos ou Aprimorados<2>-Footnote-382370621
Ref: Módulos Novos ou Aprimorados<2>-Footnote-392370681
Ref: Módulos Novos ou Aprimorados<2>-Footnote-402370748
Ref: Módulos Novos ou Aprimorados<2>-Footnote-412370813
Ref: Módulos Novos ou Aprimorados<2>-Footnote-422370880
Ref: Módulos Novos ou Aprimorados<2>-Footnote-432370948
Ref: Módulos Novos ou Aprimorados<2>-Footnote-442371013
Ref: Módulos Novos ou Aprimorados<2>-Footnote-452371078
Ref: Módulos Novos ou Aprimorados<2>-Footnote-462371143
Ref: Módulos Novos ou Aprimorados<2>-Footnote-472371211
Ref: Módulos Novos ou Aprimorados<2>-Footnote-482371276
Ref: Módulos Novos ou Aprimorados<2>-Footnote-492371341
Ref: Módulos Novos ou Aprimorados<2>-Footnote-502371409
Ref: Módulos Novos ou Aprimorados<2>-Footnote-512371474
Ref: Módulos Novos ou Aprimorados<2>-Footnote-522371542
Ref: Módulos Novos ou Aprimorados<2>-Footnote-532371607
Ref: Módulos Novos ou Aprimorados<2>-Footnote-542371675
Ref: Módulos Novos ou Aprimorados<2>-Footnote-552371740
Ref: Módulos Novos ou Aprimorados<2>-Footnote-562371808
Ref: Módulos Novos ou Aprimorados<2>-Footnote-572371873
Ref: Módulos Novos ou Aprimorados<2>-Footnote-582371941
Ref: Módulos Novos ou Aprimorados<2>-Footnote-592372009
Ref: Módulos Novos ou Aprimorados<2>-Footnote-602372074
Ref: Módulos Novos ou Aprimorados<2>-Footnote-612372139
Ref: Módulos Novos ou Aprimorados<2>-Footnote-622372206
Ref: Módulos Novos ou Aprimorados<2>-Footnote-632372274
Node: The ast module2372342
Ref: whatsnew/2 6 the-ast-module2372460
Ref: 142b2372460
Node: The future_builtins module2375121
Ref: whatsnew/2 6 the-future-builtins-module2375290
Ref: 142c2375290
Node: The json module JavaScript Object Notation2376396
Ref: whatsnew/2 6 the-json-module-javascript-object-notation2376593
Ref: 142e2376593
Node: The plistlib module A Property-List Parser2377605
Ref: whatsnew/2 6 the-plistlib-module-a-property-list-parser2377795
Ref: 142f2377795
Node: ctypes Enhancements2379166
Ref: whatsnew/2 6 ctypes-enhancements2379334
Ref: 14302379334
Ref: ctypes Enhancements-Footnote-12381101
Ref: ctypes Enhancements-Footnote-22381168
Node: Improved SSL Support2381232
Ref: whatsnew/2 6 improved-ssl-support2381349
Ref: 14312381349
Ref: Improved SSL Support-Footnote-12382301
Node: Deprecations and Removals2382334
Ref: whatsnew/2 6 deprecations-and-removals2382513
Ref: 14322382513
Ref: Deprecations and Removals-Footnote-12384375
Node: Mudanças a construções e API C<9>2384417
Ref: whatsnew/2 6 build-and-c-api-changes2384585
Ref: 14342384585
Ref: Mudanças a construções e API C<9>-Footnote-12392274
Ref: Mudanças a construções e API C<9>-Footnote-22392329
Ref: Mudanças a construções e API C<9>-Footnote-32392384
Ref: Mudanças a construções e API C<9>-Footnote-42392448
Ref: Mudanças a construções e API C<9>-Footnote-52392515
Ref: Mudanças a construções e API C<9>-Footnote-62392579
Ref: Mudanças a construções e API C<9>-Footnote-72392643
Node: Alterações específicas da porta Windows<2>2392710
Ref: whatsnew/2 6 port-specific-changes-windows2392883
Ref: 143b2392883
Ref: Alterações específicas da porta Windows<2>-Footnote-12395376
Ref: Alterações específicas da porta Windows<2>-Footnote-22395442
Ref: Alterações específicas da porta Windows<2>-Footnote-32395509
Node: Alterações específicas da porta Mac OS X<2>2395573
Ref: whatsnew/2 6 port-specific-changes-mac-os-x2395781
Ref: 14402395781
Ref: Alterações específicas da porta Mac OS X<2>-Footnote-12397075
Node: Port-Specific Changes IRIX2397142
Ref: whatsnew/2 6 port-specific-changes-irix2397296
Ref: 14412397296
Node: Porting to Python 2 62397815
Ref: whatsnew/2 6 porting-to-python-2-62397976
Ref: 14422397976
Ref: Porting to Python 2 6-Footnote-12401825
Ref: Porting to Python 2 6-Footnote-22401892
Ref: Porting to Python 2 6-Footnote-32401959
Node: Reconhecimentos<2>2402026
Ref: whatsnew/2 6 acknowledgements2402142
Ref: 14442402142
Ref: whatsnew/2 6 acks2402142
Ref: 14452402142
Node: What’s New in Python 2 52402482
Ref: whatsnew/2 5 doc2402647
Ref: 14462402647
Ref: whatsnew/2 5 translation-repo2402647
Ref: 14472402647
Ref: whatsnew/2 5 what-s-new-in-python-2-52402647
Ref: 14482402647
Ref: What’s New in Python 2 5-Footnote-12406334
Node: PEP 308 Conditional Expressions2406376
Ref: whatsnew/2 5 pep-3082406515
Ref: 14492406515
Ref: whatsnew/2 5 pep-308-conditional-expressions2406515
Ref: 144e2406515
Ref: PEP 308 Conditional Expressions-Footnote-12410004
Ref: PEP 308 Conditional Expressions-Footnote-22410046
Node: PEP 309 Partial Function Application2410088
Ref: whatsnew/2 5 pep-3092410286
Ref: 144f2410286
Ref: whatsnew/2 5 pep-309-partial-function-application2410286
Ref: 14502410286
Ref: PEP 309 Partial Function Application-Footnote-12413149
Node: PEP 314 Metadata for Python Software Packages v1 12413191
Ref: whatsnew/2 5 pep-3142413395
Ref: 14512413395
Ref: whatsnew/2 5 pep-314-metadata-for-python-software-packages-v1-12413395
Ref: 14522413395
Ref: PEP 314 Metadata for Python Software Packages v1 1-Footnote-12415234
Node: PEP 328 Absolute and Relative Imports2415276
Ref: whatsnew/2 5 pep-3282415480
Ref: 144c2415480
Ref: whatsnew/2 5 pep-328-absolute-and-relative-imports2415480
Ref: 14532415480
Ref: PEP 328 Absolute and Relative Imports-Footnote-12419301
Ref: PEP 328 Absolute and Relative Imports-Footnote-22419343
Node: PEP 338 Executing Modules as Scripts2419385
Ref: whatsnew/2 5 pep-3382419573
Ref: 14542419573
Ref: whatsnew/2 5 pep-338-executing-modules-as-scripts2419573
Ref: 14552419573
Ref: PEP 338 Executing Modules as Scripts-Footnote-12420473
Node: PEP 341 Unified try/except/finally2420515
Ref: whatsnew/2 5 pep-3412420696
Ref: 144d2420696
Ref: whatsnew/2 5 pep-341-unified-try-except-finally2420696
Ref: 14562420696
Ref: PEP 341 Unified try/except/finally-Footnote-12422468
Node: PEP 342 New Generator Features2422510
Ref: whatsnew/2 5 pep-3422422690
Ref: 144b2422690
Ref: whatsnew/2 5 pep-342-new-generator-features2422690
Ref: 14572422690
Ref: PEP 342 New Generator Features-Footnote-12429362
Ref: PEP 342 New Generator Features-Footnote-22429404
Ref: PEP 342 New Generator Features-Footnote-32429446
Ref: PEP 342 New Generator Features-Footnote-42429488
Ref: PEP 342 New Generator Features-Footnote-52429530
Node: PEP 343 The ‘with’ statement<2>2429572
Ref: whatsnew/2 5 pep-3432429757
Ref: 144a2429757
Ref: whatsnew/2 5 pep-343-the-with-statement2429757
Ref: 14582429757
Node: Writing Context Managers<2>2432779
Ref: whatsnew/2 5 new-25-context-managers2432911
Ref: 14592432911
Ref: whatsnew/2 5 writing-context-managers2432911
Ref: 145a2432911
Node: The contextlib module<2>2437339
Ref: whatsnew/2 5 contextlibmod2437471
Ref: 145b2437471
Ref: whatsnew/2 5 the-contextlib-module2437471
Ref: 145c2437471
Ref: The contextlib module<2>-Footnote-12439970
Node: PEP 352 Exceptions as New-Style Classes2440012
Ref: whatsnew/2 5 pep-3522440206
Ref: 145d2440206
Ref: whatsnew/2 5 pep-352-exceptions-as-new-style-classes2440206
Ref: 145e2440206
Ref: PEP 352 Exceptions as New-Style Classes-Footnote-12442700
Node: PEP 353 Using ssize_t as the index type2442742
Ref: whatsnew/2 5 pep-3532442935
Ref: 145f2442935
Ref: whatsnew/2 5 pep-353-using-ssize-t-as-the-index-type2442935
Ref: 14602442935
Ref: PEP 353 Using ssize_t as the index type-Footnote-12445838
Ref: PEP 353 Using ssize_t as the index type-Footnote-22445880
Node: PEP 357 The ‘__index__’ method2445922
Ref: whatsnew/2 5 pep-3572446109
Ref: 14622446109
Ref: whatsnew/2 5 pep-357-the-index-method2446109
Ref: 14632446109
Ref: PEP 357 The ‘__index__’ method-Footnote-12447823
Node: Outras mudanças na linguagem<16>2447865
Ref: whatsnew/2 5 other-lang2448045
Ref: 14662448045
Ref: whatsnew/2 5 other-language-changes2448045
Ref: 14672448045
Ref: Outras mudanças na linguagem<16>-Footnote-12455015
Node: Interactive Interpreter Changes2455057
Ref: whatsnew/2 5 interactive2455184
Ref: 146d2455184
Ref: whatsnew/2 5 interactive-interpreter-changes2455184
Ref: 146e2455184
Node: Otimizações<15>2455961
Ref: whatsnew/2 5 optimizations2456088
Ref: 14702456088
Ref: whatsnew/2 5 opts2456088
Ref: 14712456088
Node: New Improved and Removed Modules2459904
Ref: whatsnew/2 5 modules2460087
Ref: 14722460087
Ref: whatsnew/2 5 new-improved-and-removed-modules2460087
Ref: 14732460087
Ref: New Improved and Removed Modules-Footnote-12484594
Ref: New Improved and Removed Modules-Footnote-22484636
Ref: New Improved and Removed Modules-Footnote-32484695
Node: The ctypes package2484754
Ref: whatsnew/2 5 module-ctypes2484873
Ref: 147d2484873
Ref: whatsnew/2 5 the-ctypes-package2484873
Ref: 147e2484873
Node: The ElementTree package2488158
Ref: whatsnew/2 5 module-etree2488305
Ref: 14802488305
Ref: whatsnew/2 5 the-elementtree-package2488305
Ref: 14812488305
Node: The hashlib package2493613
Ref: whatsnew/2 5 module-hashlib2493761
Ref: 14822493761
Ref: whatsnew/2 5 the-hashlib-package2493761
Ref: 14832493761
Node: The sqlite3 package2495351
Ref: whatsnew/2 5 module-sqlite2495495
Ref: 14842495495
Ref: whatsnew/2 5 the-sqlite3-package2495495
Ref: 14852495495
Ref: The sqlite3 package-Footnote-12499576
Ref: The sqlite3 package-Footnote-22499618
Node: The wsgiref package2499660
Ref: whatsnew/2 5 module-wsgiref2499776
Ref: 14862499776
Ref: whatsnew/2 5 the-wsgiref-package2499776
Ref: 14872499776
Ref: The wsgiref package-Footnote-12500764
Ref: The wsgiref package-Footnote-22500806
Node: Mudanças a construções e API C<10>2500848
Ref: whatsnew/2 5 build-and-c-api-changes2501019
Ref: 14882501019
Ref: whatsnew/2 5 build-api2501019
Ref: 14892501019
Ref: Mudanças a construções e API C<10>-Footnote-12508082
Ref: Mudanças a construções e API C<10>-Footnote-22508124
Ref: Mudanças a construções e API C<10>-Footnote-32508166
Node: Port-Specific Changes2508208
Ref: whatsnew/2 5 port-specific-changes2508303
Ref: 14952508303
Ref: whatsnew/2 5 ports2508303
Ref: 14962508303
Ref: Port-Specific Changes-Footnote-12508980
Node: Porting to Python 2 52509044
Ref: whatsnew/2 5 porting2509201
Ref: 14972509201
Ref: whatsnew/2 5 porting-to-python-2-52509201
Ref: 14982509201
Ref: Porting to Python 2 5-Footnote-12512030
Node: Reconhecimentos<3>2512072
Ref: whatsnew/2 5 acknowledgements2512183
Ref: 14992512183
Node: What’s New in Python 2 42512675
Ref: whatsnew/2 4 doc2512835
Ref: 149a2512835
Ref: whatsnew/2 4 translation-repo2512835
Ref: 149b2512835
Ref: whatsnew/2 4 what-s-new-in-python-2-42512835
Ref: 149c2512835
Node: PEP 218 Built-In Set Objects2514971
Ref: whatsnew/2 4 pep-218-built-in-set-objects2515114
Ref: 149d2515114
Ref: PEP 218 Built-In Set Objects-Footnote-12517355
Node: PEP 237 Unifying Long Integers and Integers2517397
Ref: whatsnew/2 4 pep-237-unifying-long-integers-and-integers2517578
Ref: 149e2517578
Ref: PEP 237 Unifying Long Integers and Integers-Footnote-12518624
Node: PEP 289 Generator Expressions2518666
Ref: whatsnew/2 4 pep-289-generator-expressions2518855
Ref: 149f2518855
Ref: PEP 289 Generator Expressions-Footnote-12521132
Node: PEP 292 Simpler String Substitutions2521174
Ref: whatsnew/2 4 pep-292-simpler-string-substitutions2521364
Ref: 14a02521364
Ref: PEP 292 Simpler String Substitutions-Footnote-12523168
Node: PEP 318 Decorators for Functions and Methods2523210
Ref: whatsnew/2 4 pep-318-decorators-for-functions-and-methods2523396
Ref: 14a12523396
Ref: PEP 318 Decorators for Functions and Methods-Footnote-12527930
Ref: PEP 318 Decorators for Functions and Methods-Footnote-22527972
Node: PEP 322 Reverse Iteration2528014
Ref: whatsnew/2 4 pep-322-reverse-iteration2528193
Ref: 14a32528193
Ref: PEP 322 Reverse Iteration-Footnote-12529160
Node: PEP 324 New subprocess Module2529202
Ref: whatsnew/2 4 pep-324-new-subprocess-module2529362
Ref: 14a42529362
Ref: PEP 324 New subprocess Module-Footnote-12533150
Node: PEP 327 Decimal Data Type2533192
Ref: whatsnew/2 4 pep-327-decimal-data-type2533353
Ref: 14a62533353
Node: Why is Decimal needed?2533925
Ref: whatsnew/2 4 why-is-decimal-needed2534034
Ref: 14a72534034
Node: The Decimal type2536618
Ref: whatsnew/2 4 the-decimal-type2536752
Ref: 14a82536752
Node: The Context type2539924
Ref: whatsnew/2 4 the-context-type2540027
Ref: 14a92540027
Ref: The Context type-Footnote-12542639
Ref: The Context type-Footnote-22542681
Node: PEP 328 Multi-line Imports2542764
Ref: whatsnew/2 4 pep-328-multi-line-imports2542947
Ref: 14aa2542947
Ref: PEP 328 Multi-line Imports-Footnote-12544450
Node: PEP 331 Locale-Independent Float/String Conversions2544492
Ref: whatsnew/2 4 pep-331-locale-independent-float-string-conversions2544683
Ref: 14ab2544683
Ref: PEP 331 Locale-Independent Float/String Conversions-Footnote-12546415
Ref: PEP 331 Locale-Independent Float/String Conversions-Footnote-22546505
Node: Outras mudanças na linguagem<17>2546547
Ref: whatsnew/2 4 other-language-changes2546750
Ref: 14ac2546750
Ref: Outras mudanças na linguagem<17>-Footnote-12553747
Ref: Outras mudanças na linguagem<17>-Footnote-22553789
Ref: Outras mudanças na linguagem<17>-Footnote-32553831
Ref: Outras mudanças na linguagem<17>-Footnote-42553873
Ref: Outras mudanças na linguagem<17>-Footnote-52553915
Ref: Outras mudanças na linguagem<17>-Footnote-62553957
Node: Otimizações<16>2553999
Ref: whatsnew/2 4 optimizations2554086
Ref: 14ae2554086
Node: New Improved and Deprecated Modules<3>2556839
Ref: whatsnew/2 4 new-improved-and-deprecated-modules2557028
Ref: 14af2557028
Ref: New Improved and Deprecated Modules<3>-Footnote-12574339
Node: cookielib2574398
Ref: whatsnew/2 4 cookielib2574501
Ref: 14b32574501
Node: doctest<5>2575441
Ref: whatsnew/2 4 doctest2575544
Ref: 14b42575544
Node: Mudanças a construções e API C<11>2578284
Ref: whatsnew/2 4 build-and-c-api-changes2578461
Ref: 14ba2578461
Node: Port-Specific Changes<2>2581113
Ref: whatsnew/2 4 port-specific-changes2581211
Ref: 14c12581211
Node: Porting to Python 2 42581390
Ref: whatsnew/2 4 porting-to-python-2-42581547
Ref: 14c22581547
Node: Reconhecimentos<4>2583515
Ref: whatsnew/2 4 acknowledgements2583626
Ref: 14c42583626
Ref: whatsnew/2 4 acks2583626
Ref: 14c52583626
Node: What’s New in Python 2 32583957
Ref: whatsnew/2 3 doc2584117
Ref: 14c62584117
Ref: whatsnew/2 3 translation-repo2584117
Ref: 14c72584117
Ref: whatsnew/2 3 what-s-new-in-python-2-32584117
Ref: 14c82584117
Node: PEP 218 A Standard Set Datatype2587187
Ref: whatsnew/2 3 pep-218-a-standard-set-datatype2587315
Ref: 14ca2587315
Ref: PEP 218 A Standard Set Datatype-Footnote-12589837
Node: PEP 255 Simple Generators2589879
Ref: whatsnew/2 3 pep-255-simple-generators2590045
Ref: 14cf2590045
Ref: whatsnew/2 3 section-generators2590045
Ref: 14d02590045
Ref: PEP 255 Simple Generators-Footnote-12596234
Ref: PEP 255 Simple Generators-Footnote-22596276
Node: PEP 263 Source Code Encodings2596318
Ref: whatsnew/2 3 pep-263-source-code-encodings2596496
Ref: 14d12596496
Ref: whatsnew/2 3 section-encodings2596496
Ref: 14d22596496
Ref: PEP 263 Source Code Encodings-Footnote-12597713
Node: PEP 273 Importing Modules from ZIP Archives2597755
Ref: whatsnew/2 3 pep-273-importing-modules-from-zip-archives2597956
Ref: 14d32597956
Ref: PEP 273 Importing Modules from ZIP Archives-Footnote-12599995
Ref: PEP 273 Importing Modules from ZIP Archives-Footnote-22600037
Ref: PEP 273 Importing Modules from ZIP Archives-Footnote-32600079
Node: PEP 277 Unicode file name support for Windows NT2600121
Ref: whatsnew/2 3 pep-277-unicode-file-name-support-for-windows-nt2600326
Ref: 14d52600326
Ref: PEP 277 Unicode file name support for Windows NT-Footnote-12601813
Node: PEP 278 Universal Newline Support2601855
Ref: whatsnew/2 3 pep-278-universal-newline-support2602034
Ref: 14d72602034
Ref: PEP 278 Universal Newline Support-Footnote-12603550
Node: PEP 279 enumerate2603592
Ref: whatsnew/2 3 pep-279-enumerate2603750
Ref: 14d82603750
Ref: whatsnew/2 3 section-enumerate2603750
Ref: 14d92603750
Ref: PEP 279 enumerate-Footnote-12604613
Node: PEP 282 The logging Package2604655
Ref: whatsnew/2 3 pep-282-the-logging-package2604802
Ref: 14da2604802
Ref: PEP 282 The logging Package-Footnote-12609623
Ref: PEP 282 The logging Package-Footnote-22609665
Node: PEP 285 A Boolean Type2609707
Ref: whatsnew/2 3 pep-285-a-boolean-type2609875
Ref: 14e02609875
Ref: whatsnew/2 3 section-bool2609875
Ref: 14e12609875
Ref: PEP 285 A Boolean Type-Footnote-12612329
Ref: PEP 285 A Boolean Type-Footnote-22612371
Node: PEP 293 Codec Error Handling Callbacks2612413
Ref: whatsnew/2 3 pep-293-codec-error-handling-callbacks2612602
Ref: 14e22612602
Ref: PEP 293 Codec Error Handling Callbacks-Footnote-12614160
Node: PEP 301 Package Index and Metadata for Distutils2614202
Ref: whatsnew/2 3 pep-301-package-index-and-metadata-for-distutils2614393
Ref: 14e52614393
Ref: whatsnew/2 3 section-pep3012614393
Ref: 14e62614393
Ref: PEP 301 Package Index and Metadata for Distutils-Footnote-12616042
Ref: PEP 301 Package Index and Metadata for Distutils-Footnote-22616078
Node: PEP 302 New Import Hooks2616120
Ref: whatsnew/2 3 pep-302-new-import-hooks2616302
Ref: 14e72616302
Ref: whatsnew/2 3 section-pep3022616302
Ref: 14d42616302
Ref: PEP 302 New Import Hooks-Footnote-12618914
Ref: PEP 302 New Import Hooks-Footnote-22618956
Ref: PEP 302 New Import Hooks-Footnote-32618998
Node: PEP 305 Comma-separated Files2619040
Ref: whatsnew/2 3 pep-305-comma-separated-files2619201
Ref: 14e82619201
Ref: whatsnew/2 3 section-pep3052619201
Ref: 14e92619201
Ref: PEP 305 Comma-separated Files-Footnote-12620687
Node: PEP 307 Pickle Enhancements2620729
Ref: whatsnew/2 3 pep-307-pickle-enhancements2620881
Ref: 14ea2620881
Ref: whatsnew/2 3 section-pep3072620881
Ref: 14eb2620881
Ref: PEP 307 Pickle Enhancements-Footnote-12622859
Ref: PEP 307 Pickle Enhancements-Footnote-22622901
Ref: PEP 307 Pickle Enhancements-Footnote-32622943
Node: Extended Slices2622985
Ref: whatsnew/2 3 extended-slices2623141
Ref: 14ee2623141
Ref: whatsnew/2 3 section-slices2623141
Ref: 14ef2623141
Node: Outras mudanças na linguagem<18>2626533
Ref: whatsnew/2 3 other-language-changes2626700
Ref: 14f02626700
Ref: Outras mudanças na linguagem<18>-Footnote-12634520
Node: String Changes2634593
Ref: whatsnew/2 3 string-changes2634703
Ref: 14f62634703
Node: Otimizações<17>2637227
Ref: whatsnew/2 3 optimizations2637337
Ref: 14fb2637337
Node: New Improved and Deprecated Modules<4>2638808
Ref: whatsnew/2 3 new-improved-and-deprecated-modules2638999
Ref: 14fd2638999
Ref: New Improved and Deprecated Modules<4>-Footnote-12663792
Node: Date/Time Type2663832
Ref: whatsnew/2 3 date-time-type2663949
Ref: 15112663949
Node: The optparse Module2666281
Ref: whatsnew/2 3 the-optparse-module2666398
Ref: 15142666398
Node: Pymalloc A Specialized Object Allocator2668472
Ref: whatsnew/2 3 pymalloc-a-specialized-object-allocator2668667
Ref: 15172668667
Ref: whatsnew/2 3 section-pymalloc2668667
Ref: 15182668667
Node: Mudanças a construções e API C<12>2672574
Ref: whatsnew/2 3 build-and-c-api-changes2672767
Ref: 151a2672767
Node: Port-Specific Changes<3>2676222
Ref: whatsnew/2 3 port-specific-changes2676320
Ref: 15202676320
Node: Outras alterações e correções<2>2677555
Ref: whatsnew/2 3 other-changes-and-fixes2677730
Ref: 15212677730
Ref: whatsnew/2 3 section-other2677730
Ref: 14fc2677730
Node: Porting to Python 2 32680251
Ref: whatsnew/2 3 porting-to-python-2-32680407
Ref: 15242680407
Node: Reconhecimentos<5>2683216
Ref: whatsnew/2 3 acknowledgements2683327
Ref: 15252683327
Ref: whatsnew/2 3 acks2683327
Ref: 15262683327
Node: What’s New in Python 2 22683946
Ref: whatsnew/2 2 doc2684106
Ref: 15272684106
Ref: whatsnew/2 2 translation-repo2684106
Ref: 15282684106
Ref: whatsnew/2 2 what-s-new-in-python-2-22684106
Ref: 15292684106
Node: Introdução2684868
Ref: whatsnew/2 2 introduction2684991
Ref: 152a2684991
Ref: Introdução-Footnote-12685961
Ref: Introdução-Footnote-22686010
Node: PEPs 252 and 253 Type and Class Changes2686059
Ref: whatsnew/2 2 peps-252-and-253-type-and-class-changes2686208
Ref: 152b2686208
Node: Old and New Classes2689648
Ref: whatsnew/2 2 old-and-new-classes2689763
Ref: 152e2689763
Ref: Old and New Classes-Footnote-12692169
Node: Descriptors2692211
Ref: whatsnew/2 2 descriptors2692372
Ref: 152f2692372
Node: Multiple Inheritance The Diamond Rule2696239
Ref: whatsnew/2 2 multiple-inheritance-the-diamond-rule2696397
Ref: 15312696397
Ref: Multiple Inheritance The Diamond Rule-Footnote-12699282
Node: Attribute Access2699324
Ref: whatsnew/2 2 attribute-access2699484
Ref: 15322699484
Node: Related Links2703286
Ref: whatsnew/2 2 related-links2703400
Ref: 15342703400
Ref: whatsnew/2 2 sect-rellinks2703400
Ref: 152d2703400
Ref: Related Links-Footnote-12704882
Ref: Related Links-Footnote-22704924
Ref: Related Links-Footnote-32704966
Ref: Related Links-Footnote-42705008
Ref: Related Links-Footnote-52705050
Node: PEP 234 Iterators2705092
Ref: whatsnew/2 2 pep-234-iterators2705257
Ref: 15362705257
Ref: PEP 234 Iterators-Footnote-12710141
Node: PEP 255 Simple Generators<2>2710183
Ref: whatsnew/2 2 pep-255-simple-generators2710355
Ref: 15392710355
Ref: PEP 255 Simple Generators<2>-Footnote-12716419
Ref: PEP 255 Simple Generators<2>-Footnote-22716461
Node: PEP 237 Unifying Long Integers and Integers<2>2716503
Ref: whatsnew/2 2 pep-237-unifying-long-integers-and-integers2716696
Ref: 153a2716696
Ref: PEP 237 Unifying Long Integers and Integers<2>-Footnote-12718426
Node: PEP 238 Changing the Division Operator2718468
Ref: whatsnew/2 2 pep-238-changing-the-division-operator2718648
Ref: 153b2718648
Ref: PEP 238 Changing the Division Operator-Footnote-12722307
Ref: PEP 238 Changing the Division Operator-Footnote-22722349
Ref: PEP 238 Changing the Division Operator-Footnote-32722391
Node: Unicode Changes2722433
Ref: whatsnew/2 2 unicode-changes2722588
Ref: 153d2722588
Ref: Unicode Changes-Footnote-12725225
Ref: Unicode Changes-Footnote-22725267
Node: PEP 227 Nested Scopes2725309
Ref: whatsnew/2 2 pep-227-nested-scopes2725458
Ref: 153e2725458
Ref: PEP 227 Nested Scopes-Footnote-12729809
Node: Módulos Novos ou Aprimorados<3>2729851
Ref: whatsnew/2 2 new-and-improved-modules2730014
Ref: 153f2730014
Ref: Módulos Novos ou Aprimorados<3>-Footnote-12736733
Ref: Módulos Novos ou Aprimorados<3>-Footnote-22736792
Ref: Módulos Novos ou Aprimorados<3>-Footnote-32736851
Ref: Módulos Novos ou Aprimorados<3>-Footnote-42736910
Ref: Módulos Novos ou Aprimorados<3>-Footnote-52736969
Node: Interpreter Changes and Fixes2737027
Ref: whatsnew/2 2 interpreter-changes-and-fixes2737205
Ref: 15442737205
Node: Outras alterações e correções<3>2741977
Ref: whatsnew/2 2 other-changes-and-fixes2742141
Ref: 15552742141
Ref: Outras alterações e correções<3>-Footnote-12748831
Node: Reconhecimentos<6>2748873
Ref: whatsnew/2 2 acknowledgements2748999
Ref: 15582748999
Node: What’s New in Python 2 12749598
Ref: whatsnew/2 1 doc2749758
Ref: 15592749758
Ref: whatsnew/2 1 translation-repo2749758
Ref: 155a2749758
Ref: whatsnew/2 1 what-s-new-in-python-2-12749758
Ref: 155b2749758
Node: Introdução<2>2750790
Ref: whatsnew/2 1 introduction2750901
Ref: 155c2750901
Node: PEP 227 Nested Scopes<2>2751995
Ref: whatsnew/2 1 pep-227-nested-scopes2752144
Ref: 155d2752144
Ref: PEP 227 Nested Scopes<2>-Footnote-12756515
Ref: PEP 227 Nested Scopes<2>-Footnote-22756557
Ref: PEP 227 Nested Scopes<2>-Footnote-32756599
Node: PEP 236 __future__ Directives2756641
Ref: whatsnew/2 1 pep-236-future-directives2756799
Ref: 155e2756799
Ref: PEP 236 __future__ Directives-Footnote-12758041
Node: PEP 207 Rich Comparisons2758083
Ref: whatsnew/2 1 pep-207-rich-comparisons2758242
Ref: 155f2758242
Ref: PEP 207 Rich Comparisons-Footnote-12761661
Ref: PEP 207 Rich Comparisons-Footnote-22761703
Node: PEP 230 Warning Framework2761745
Ref: whatsnew/2 1 pep-230-warning-framework2761899
Ref: 15612761899
Ref: PEP 230 Warning Framework-Footnote-12765185
Ref: PEP 230 Warning Framework-Footnote-22765227
Node: PEP 229 New Build System2765269
Ref: whatsnew/2 1 pep-229-new-build-system2765422
Ref: 15632765422
Ref: PEP 229 New Build System-Footnote-12767347
Node: PEP 205 Weak References2767389
Ref: whatsnew/2 1 pep-205-weak-references2767544
Ref: 15642767544
Ref: PEP 205 Weak References-Footnote-12770662
Node: PEP 232 Function Attributes2770704
Ref: whatsnew/2 1 pep-232-function-attributes2770890
Ref: 15652770890
Ref: PEP 232 Function Attributes-Footnote-12772415
Node: PEP 235 Importing Modules on Case-Insensitive Platforms2772457
Ref: whatsnew/2 1 pep-235-importing-modules-on-case-insensitive-platforms2772652
Ref: 15662772652
Node: PEP 217 Interactive Display Hook2773555
Ref: whatsnew/2 1 pep-217-interactive-display-hook2773749
Ref: 15672773749
Ref: PEP 217 Interactive Display Hook-Footnote-12774683
Node: PEP 208 New Coercion Model2774725
Ref: whatsnew/2 1 pep-208-new-coercion-model2774899
Ref: 15692774899
Ref: PEP 208 New Coercion Model-Footnote-12776526
Node: PEP 241 Metadata in Python Packages2776568
Ref: whatsnew/2 1 pep-241-metadata-in-python-packages2776742
Ref: 156a2776742
Ref: PEP 241 Metadata in Python Packages-Footnote-12778864
Ref: PEP 241 Metadata in Python Packages-Footnote-22778946
Ref: PEP 241 Metadata in Python Packages-Footnote-32778988
Ref: PEP 241 Metadata in Python Packages-Footnote-42779030
Ref: PEP 241 Metadata in Python Packages-Footnote-52779072
Node: Módulos Novos ou Aprimorados<4>2779114
Ref: whatsnew/2 1 new-and-improved-modules2779298
Ref: 156b2779298
Node: Outras alterações e correções<4>2785164
Ref: whatsnew/2 1 other-changes-and-fixes2785331
Ref: 156c2785331
Node: Reconhecimentos<7>2791302
Ref: whatsnew/2 1 acknowledgements2791428
Ref: 15702791428
Node: What’s New in Python 2 02791717
Ref: whatsnew/2 0 doc2791860
Ref: 15712791860
Ref: whatsnew/2 0 translation-repo2791860
Ref: 15722791860
Ref: whatsnew/2 0 what-s-new-in-python-2-02791860
Ref: 15732791860
Node: Introdução<3>2792555
Ref: whatsnew/2 0 introduction2792664
Ref: 15742792664
Node: What About Python 1 6?2793546
Ref: whatsnew/2 0 what-about-python-1-62793687
Ref: 15752793687
Node: New Development Process2794928
Ref: whatsnew/2 0 new-development-process2795064
Ref: 15762795064
Ref: New Development Process-Footnote-12800204
Ref: New Development Process-Footnote-22800246
Ref: New Development Process-Footnote-32800288
Node: Unicode<2>2800330
Ref: whatsnew/2 0 unicode2800466
Ref: 15772800466
Ref: Unicode<2>-Footnote-12806636
Node: Compreensões de lista2806678
Ref: whatsnew/2 0 list-comprehensions2806811
Ref: 15782806811
Node: Augmented Assignment2810548
Ref: whatsnew/2 0 augmented-assignment2810685
Ref: 15792810685
Node: String Methods2812215
Ref: whatsnew/2 0 string-methods2812358
Ref: 157a2812358
Node: Garbage Collection of Cycles2814211
Ref: whatsnew/2 0 garbage-collection-of-cycles2814352
Ref: 157b2814352
Node: Other Core Changes2817699
Ref: whatsnew/2 0 other-core-changes2817840
Ref: 157c2817840
Node: Minor Language Changes2818125
Ref: whatsnew/2 0 minor-language-changes2818240
Ref: 157d2818240
Node: Changes to Built-in Functions2823325
Ref: whatsnew/2 0 changes-to-built-in-functions2823440
Ref: 15802823440
Node: Porting to 2 02825730
Ref: whatsnew/2 0 porting-to-2-02825870
Ref: 15812825870
Node: Extending/Embedding Changes2831214
Ref: whatsnew/2 0 extending-embedding-changes2831376
Ref: 15842831376
Node: Distutils Making Modules Easy to Install2835228
Ref: whatsnew/2 0 distutils-making-modules-easy-to-install2835387
Ref: 15892835387
Node: XML Modules2838747
Ref: whatsnew/2 0 xml-modules2838893
Ref: 158a2838893
Node: SAX2 Support2839792
Ref: whatsnew/2 0 sax2-support2839872
Ref: 158b2839872
Node: DOM Support2841532
Ref: whatsnew/2 0 dom-support2841642
Ref: 158f2841642
Node: Relationship to PyXML2844470
Ref: whatsnew/2 0 relationship-to-pyxml2844559
Ref: 15902844559
Node: Module changes2845849
Ref: whatsnew/2 0 module-changes2845973
Ref: 15912845973
Node: Novos módulos<12>2848459
Ref: whatsnew/2 0 new-modules2848589
Ref: 15922848589
Node: IDLE Improvements2852596
Ref: whatsnew/2 0 idle-improvements2852742
Ref: 15932852742
Node: Deleted and Deprecated Modules2853877
Ref: whatsnew/2 0 deleted-and-deprecated-modules2854023
Ref: 15942854023
Node: Reconhecimentos<8>2854775
Ref: whatsnew/2 0 acknowledgements2854895
Ref: 15952854895
Ref: Reconhecimentos<8>-Footnote-12855499
Ref: Reconhecimentos<8>-Footnote-22855539
Node: Changelog2855603
Ref: whatsnew/changelog doc2855711
Ref: 15962855711
Ref: whatsnew/changelog changelog2855711
Ref: 13c2855711
Ref: whatsnew/changelog id12855711
Ref: 15972855711
Ref: whatsnew/changelog translation-repo2855711
Ref: 15982855711
Node: Python seguinte2861728
Ref: whatsnew/changelog python-next2861818
Ref: 15992861818
Node: Windows2862053
Ref: whatsnew/changelog windows2862138
Ref: 159a2862138
Ref: Windows-Footnote-12862341
Node: Ferramentas/Demos2862397
Ref: whatsnew/changelog tools-demos2862497
Ref: 159b2862497
Ref: Ferramentas/Demos-Footnote-12862732
Node: Testes2862788
Ref: whatsnew/changelog tests2862891
Ref: 159c2862891
Ref: Testes-Footnote-12863507
Ref: Testes-Footnote-22863562
Ref: Testes-Footnote-32863618
Ref: Testes-Footnote-42863674
Node: Segurança2863739
Ref: whatsnew/changelog security2863835
Ref: 159d2863835
Ref: Segurança-Footnote-12864928
Ref: Segurança-Footnote-22864984
Ref: Segurança-Footnote-32865040
Ref: Segurança-Footnote-42865096
Ref: Segurança-Footnote-52865152
Ref: Segurança-Footnote-62865208
Node: Biblioteca2865264
Ref: whatsnew/changelog library2865361
Ref: 159e2865361
Ref: Biblioteca-Footnote-12875733
Ref: Biblioteca-Footnote-22875789
Ref: Biblioteca-Footnote-32875845
Ref: Biblioteca-Footnote-42875901
Ref: Biblioteca-Footnote-52875957
Ref: Biblioteca-Footnote-62876013
Ref: Biblioteca-Footnote-72876069
Ref: Biblioteca-Footnote-82876125
Ref: Biblioteca-Footnote-92876180
Ref: Biblioteca-Footnote-102876236
Ref: Biblioteca-Footnote-112876293
Ref: Biblioteca-Footnote-122876350
Ref: Biblioteca-Footnote-132876407
Ref: Biblioteca-Footnote-142876464
Ref: Biblioteca-Footnote-152876521
Ref: Biblioteca-Footnote-162876578
Ref: Biblioteca-Footnote-172876635
Ref: Biblioteca-Footnote-182876692
Ref: Biblioteca-Footnote-192876749
Ref: Biblioteca-Footnote-202876806
Ref: Biblioteca-Footnote-212876863
Ref: Biblioteca-Footnote-222876920
Ref: Biblioteca-Footnote-232876977
Ref: Biblioteca-Footnote-242877034
Ref: Biblioteca-Footnote-252877091
Ref: Biblioteca-Footnote-262877148
Ref: Biblioteca-Footnote-272877205
Ref: Biblioteca-Footnote-282877262
Ref: Biblioteca-Footnote-292877319
Ref: Biblioteca-Footnote-302877376
Ref: Biblioteca-Footnote-312877433
Ref: Biblioteca-Footnote-322877490
Ref: Biblioteca-Footnote-332877547
Ref: Biblioteca-Footnote-342877604
Ref: Biblioteca-Footnote-352877661
Ref: Biblioteca-Footnote-362877718
Ref: Biblioteca-Footnote-372877775
Ref: Biblioteca-Footnote-382877832
Ref: Biblioteca-Footnote-392877889
Ref: Biblioteca-Footnote-402877946
Ref: Biblioteca-Footnote-412878003
Ref: Biblioteca-Footnote-422878060
Ref: Biblioteca-Footnote-432878117
Ref: Biblioteca-Footnote-442878173
Ref: Biblioteca-Footnote-452878229
Ref: Biblioteca-Footnote-462878286
Ref: Biblioteca-Footnote-472878343
Ref: Biblioteca-Footnote-482878400
Ref: Biblioteca-Footnote-492878457
Ref: Biblioteca-Footnote-502878514
Ref: Biblioteca-Footnote-512878570
Ref: Biblioteca-Footnote-522878627
Ref: Biblioteca-Footnote-532878683
Ref: Biblioteca-Footnote-542878740
Ref: Biblioteca-Footnote-552878797
Node: IDLE<3>2878854
Ref: whatsnew/changelog idle2878960
Ref: 15b22878960
Ref: IDLE<3>-Footnote-12879109
Node: Núcleo e embutidos2879165
Ref: whatsnew/changelog core-and-builtins2879266
Ref: 15b32879266
Ref: Núcleo e embutidos-Footnote-12883707
Ref: Núcleo e embutidos-Footnote-22883763
Ref: Núcleo e embutidos-Footnote-32883819
Ref: Núcleo e embutidos-Footnote-42883875
Ref: Núcleo e embutidos-Footnote-52883931
Ref: Núcleo e embutidos-Footnote-62883987
Ref: Núcleo e embutidos-Footnote-72884043
Ref: Núcleo e embutidos-Footnote-82884099
Ref: Núcleo e embutidos-Footnote-92884155
Ref: Núcleo e embutidos-Footnote-102884211
Ref: Núcleo e embutidos-Footnote-112884268
Ref: Núcleo e embutidos-Footnote-122884325
Ref: Núcleo e embutidos-Footnote-132884382
Ref: Núcleo e embutidos-Footnote-142884439
Ref: Núcleo e embutidos-Footnote-152884496
Ref: Núcleo e embutidos-Footnote-162884553
Ref: Núcleo e embutidos-Footnote-172884610
Ref: Núcleo e embutidos-Footnote-182884667
Ref: Núcleo e embutidos-Footnote-192884724
Ref: Núcleo e embutidos-Footnote-202884781
Ref: Núcleo e embutidos-Footnote-212884838
Ref: Núcleo e embutidos-Footnote-222884895
Ref: Núcleo e embutidos-Footnote-232884952
Ref: Núcleo e embutidos-Footnote-242885009
Ref: Núcleo e embutidos-Footnote-252885066
Node: API C2885123
Ref: whatsnew/changelog c-api2885229
Ref: 15c12885229
Ref: API C-Footnote-12885416
Node: Construção2885472
Ref: whatsnew/changelog build2885550
Ref: 15c22885550
Ref: Construção-Footnote-12886289
Ref: Construção-Footnote-22886345
Ref: Construção-Footnote-32886401
Node: Python 3 13 11 final2886457
Ref: whatsnew/changelog python-3-13-11-final2886576
Ref: 15c32886576
Node: Segurança<2>2886776
Ref: whatsnew/changelog id22886868
Ref: 15c42886868
Ref: Segurança<2>-Footnote-12887830
Ref: Segurança<2>-Footnote-22887886
Ref: Segurança<2>-Footnote-32887942
Node: Biblioteca<2>2887998
Ref: whatsnew/changelog id32888121
Ref: 15c62888121
Ref: Biblioteca<2>-Footnote-12888913
Ref: Biblioteca<2>-Footnote-22888969
Node: Núcleo e embutidos<2>2889025
Ref: whatsnew/changelog id42889126
Ref: 15c72889126
Ref: Núcleo e embutidos<2>-Footnote-12889366
Node: Python 3 13 10 final2889422
Ref: whatsnew/changelog python-3-13-10-final2889545
Ref: 15c82889545
Node: Ferramentas/Demos<2>2889882
Ref: whatsnew/changelog id52889977
Ref: 15c92889977
Ref: Ferramentas/Demos<2>-Footnote-12890191
Node: Testes<2>2890247
Ref: whatsnew/changelog id62890364
Ref: 15ca2890364
Ref: Testes<2>-Footnote-12890930
Ref: Testes<2>-Footnote-22890986
Ref: Testes<2>-Footnote-32891042
Node: Segurança<3>2891098
Ref: whatsnew/changelog id72891208
Ref: 15cb2891208
Ref: Segurança<3>-Footnote-12892355
Ref: Segurança<3>-Footnote-22892411
Ref: Segurança<3>-Footnote-32892467
Ref: Segurança<3>-Footnote-42892523
Ref: Segurança<3>-Footnote-52892579
Node: Biblioteca<3>2892635
Ref: whatsnew/changelog id82892743
Ref: 15cc2892743
Ref: Biblioteca<3>-Footnote-12903470
Ref: Biblioteca<3>-Footnote-22903525
Ref: Biblioteca<3>-Footnote-32903580
Ref: Biblioteca<3>-Footnote-42903636
Ref: Biblioteca<3>-Footnote-52903691
Ref: Biblioteca<3>-Footnote-62903747
Ref: Biblioteca<3>-Footnote-72903803
Ref: Biblioteca<3>-Footnote-82903859
Ref: Biblioteca<3>-Footnote-92903915
Ref: Biblioteca<3>-Footnote-102903971
Ref: Biblioteca<3>-Footnote-112904028
Ref: Biblioteca<3>-Footnote-122904085
Ref: Biblioteca<3>-Footnote-132904142
Ref: Biblioteca<3>-Footnote-142904199
Ref: Biblioteca<3>-Footnote-152904256
Ref: Biblioteca<3>-Footnote-162904313
Ref: Biblioteca<3>-Footnote-172904370
Ref: Biblioteca<3>-Footnote-182904427
Ref: Biblioteca<3>-Footnote-192904484
Ref: Biblioteca<3>-Footnote-202904541
Ref: Biblioteca<3>-Footnote-212904598
Ref: Biblioteca<3>-Footnote-222904655
Ref: Biblioteca<3>-Footnote-232904712
Ref: Biblioteca<3>-Footnote-242904769
Ref: Biblioteca<3>-Footnote-252904826
Ref: Biblioteca<3>-Footnote-262904883
Ref: Biblioteca<3>-Footnote-272904940
Ref: Biblioteca<3>-Footnote-282904997
Ref: Biblioteca<3>-Footnote-292905054
Ref: Biblioteca<3>-Footnote-302905111
Ref: Biblioteca<3>-Footnote-312905168
Ref: Biblioteca<3>-Footnote-322905225
Ref: Biblioteca<3>-Footnote-332905282
Ref: Biblioteca<3>-Footnote-342905339
Ref: Biblioteca<3>-Footnote-352905396
Ref: Biblioteca<3>-Footnote-362905452
Ref: Biblioteca<3>-Footnote-372905509
Ref: Biblioteca<3>-Footnote-382905549
Ref: Biblioteca<3>-Footnote-392905591
Ref: Biblioteca<3>-Footnote-402905648
Ref: Biblioteca<3>-Footnote-412905705
Ref: Biblioteca<3>-Footnote-422905761
Ref: Biblioteca<3>-Footnote-432905818
Ref: Biblioteca<3>-Footnote-442905875
Ref: Biblioteca<3>-Footnote-452905932
Ref: Biblioteca<3>-Footnote-462905989
Ref: Biblioteca<3>-Footnote-472906045
Ref: Biblioteca<3>-Footnote-482906101
Ref: Biblioteca<3>-Footnote-492906157
Ref: Biblioteca<3>-Footnote-502906213
Ref: Biblioteca<3>-Footnote-512906270
Ref: Biblioteca<3>-Footnote-522906327
Ref: Biblioteca<3>-Footnote-532906384
Ref: Biblioteca<3>-Footnote-542906441
Node: IDLE<4>2906498
Ref: whatsnew/changelog id92906610
Ref: 15de2906610
Ref: IDLE<4>-Footnote-12906796
Node: Documentação<2>2906851
Ref: whatsnew/changelog documentation2906972
Ref: 15df2906972
Ref: Documentação<2>-Footnote-12907486
Ref: Documentação<2>-Footnote-22907542
Ref: Documentação<2>-Footnote-32907607
Node: Núcleo e embutidos<3>2907663
Ref: whatsnew/changelog id102907785
Ref: 15e12907785
Ref: Núcleo e embutidos<3>-Footnote-12911542
Ref: Núcleo e embutidos<3>-Footnote-22911598
Ref: Núcleo e embutidos<3>-Footnote-32911654
Ref: Núcleo e embutidos<3>-Footnote-42911710
Ref: Núcleo e embutidos<3>-Footnote-52911766
Ref: Núcleo e embutidos<3>-Footnote-62911822
Ref: Núcleo e embutidos<3>-Footnote-72911878
Ref: Núcleo e embutidos<3>-Footnote-82911934
Ref: Núcleo e embutidos<3>-Footnote-92911990
Ref: Núcleo e embutidos<3>-Footnote-102912046
Ref: Núcleo e embutidos<3>-Footnote-112912103
Ref: Núcleo e embutidos<3>-Footnote-122912160
Ref: Núcleo e embutidos<3>-Footnote-132912217
Ref: Núcleo e embutidos<3>-Footnote-142912274
Ref: Núcleo e embutidos<3>-Footnote-152912331
Ref: Núcleo e embutidos<3>-Footnote-162912388
Ref: Núcleo e embutidos<3>-Footnote-172912445
Ref: Núcleo e embutidos<3>-Footnote-182912502
Ref: Núcleo e embutidos<3>-Footnote-192912559
Node: API C<2>2912616
Ref: whatsnew/changelog id112912712
Ref: 15e52912712
Ref: API C<2>-Footnote-12913122
Ref: API C<2>-Footnote-22913178
Node: Python 3 13 9 final2913234
Ref: whatsnew/changelog python-3-13-9-final2913356
Ref: 15e72913356
Node: Biblioteca<4>2913478
Ref: whatsnew/changelog id122913547
Ref: 15e82913547
Ref: Biblioteca<4>-Footnote-12913782
Node: Python 3 13 8 final2913838
Ref: whatsnew/changelog python-3-13-8-final2913959
Ref: 15e92913959
Node: macOS2914313
Ref: whatsnew/changelog macos2914393
Ref: 15ea2914393
Ref: macOS-Footnote-12914624
Ref: macOS-Footnote-22914680
Node: Windows<2>2914736
Ref: whatsnew/changelog id132914845
Ref: 15eb2914845
Ref: Windows<2>-Footnote-12915100
Ref: Windows<2>-Footnote-22915156
Node: Ferramentas/Demos<3>2915212
Ref: whatsnew/changelog id142915325
Ref: 15ec2915325
Ref: Ferramentas/Demos<3>-Footnote-12915881
Ref: Ferramentas/Demos<3>-Footnote-22915937
Node: Testes<3>2915993
Ref: whatsnew/changelog id152916109
Ref: 15ed2916109
Ref: Testes<3>-Footnote-12916320
Node: Segurança<4>2916376
Ref: whatsnew/changelog id162916485
Ref: 15ee2916485
Ref: Segurança<4>-Footnote-12917535
Ref: Segurança<4>-Footnote-22917591
Ref: Segurança<4>-Footnote-32917647
Node: Biblioteca<5>2917703
Ref: whatsnew/changelog id172917825
Ref: 15f22917825
Ref: Biblioteca<5>-Footnote-12924072
Ref: Biblioteca<5>-Footnote-22924128
Ref: Biblioteca<5>-Footnote-32924184
Ref: Biblioteca<5>-Footnote-42924240
Ref: Biblioteca<5>-Footnote-52924296
Ref: Biblioteca<5>-Footnote-62924352
Ref: Biblioteca<5>-Footnote-72924408
Ref: Biblioteca<5>-Footnote-82924464
Ref: Biblioteca<5>-Footnote-92924520
Ref: Biblioteca<5>-Footnote-102924576
Ref: Biblioteca<5>-Footnote-112924633
Ref: Biblioteca<5>-Footnote-122924689
Ref: Biblioteca<5>-Footnote-132924746
Ref: Biblioteca<5>-Footnote-142924803
Ref: Biblioteca<5>-Footnote-152924860
Ref: Biblioteca<5>-Footnote-162924917
Ref: Biblioteca<5>-Footnote-172924973
Ref: Biblioteca<5>-Footnote-182925030
Ref: Biblioteca<5>-Footnote-192925087
Ref: Biblioteca<5>-Footnote-202925144
Ref: Biblioteca<5>-Footnote-212925201
Ref: Biblioteca<5>-Footnote-222925258
Ref: Biblioteca<5>-Footnote-232925315
Ref: Biblioteca<5>-Footnote-242925372
Ref: Biblioteca<5>-Footnote-252925429
Ref: Biblioteca<5>-Footnote-262925486
Ref: Biblioteca<5>-Footnote-272925543
Ref: Biblioteca<5>-Footnote-282925600
Ref: Biblioteca<5>-Footnote-292925657
Ref: Biblioteca<5>-Footnote-302925714
Ref: Biblioteca<5>-Footnote-312925771
Ref: Biblioteca<5>-Footnote-322925828
Ref: Biblioteca<5>-Footnote-332925884
Ref: Biblioteca<5>-Footnote-342925950
Node: Núcleo e embutidos<4>2926016
Ref: whatsnew/changelog id182926133
Ref: 15fb2926133
Ref: Núcleo e embutidos<4>-Footnote-12927294
Ref: Núcleo e embutidos<4>-Footnote-22927350
Ref: Núcleo e embutidos<4>-Footnote-32927405
Ref: Núcleo e embutidos<4>-Footnote-42927461
Ref: Núcleo e embutidos<4>-Footnote-52927517
Ref: Núcleo e embutidos<4>-Footnote-62927573
Ref: Núcleo e embutidos<4>-Footnote-72927629
Node: API C<3>2927685
Ref: whatsnew/changelog id192927804
Ref: 15ff2927804
Ref: API C<3>-Footnote-12929052
Node: Construção<2>2929107
Ref: whatsnew/changelog id202929195
Ref: 16002929195
Ref: Construção<2>-Footnote-12929582
Node: Python 3 13 7 final2929638
Ref: whatsnew/changelog python-3-13-7-final2929759
Ref: 16012929759
Node: Biblioteca<6>2929972
Ref: whatsnew/changelog id212930067
Ref: 16022930067
Ref: Biblioteca<6>-Footnote-12931008
Ref: Biblioteca<6>-Footnote-22931064
Ref: Biblioteca<6>-Footnote-32931120
Ref: Biblioteca<6>-Footnote-42931176
Node: Documentação<3>2931232
Ref: whatsnew/changelog id222931358
Ref: 16082931358
Ref: Documentação<3>-Footnote-12931537
Node: Núcleo e embutidos<5>2931593
Ref: whatsnew/changelog id232931697
Ref: 16092931697
Ref: Núcleo e embutidos<5>-Footnote-12932191
Node: Python 3 13 6 final2932247
Ref: whatsnew/changelog python-3-13-6-final2932368
Ref: 160a2932368
Node: macOS<2>2932749
Ref: whatsnew/changelog id242932832
Ref: 160b2932832
Ref: macOS<2>-Footnote-12933275
Ref: macOS<2>-Footnote-22933331
Node: Windows<3>2933387
Ref: whatsnew/changelog id252933499
Ref: 160c2933499
Ref: Windows<3>-Footnote-12933674
Node: Ferramentas/Demos<4>2933730
Ref: whatsnew/changelog id262933843
Ref: 160d2933843
Ref: Ferramentas/Demos<4>-Footnote-12934046
Node: Testes<4>2934102
Ref: whatsnew/changelog id272934218
Ref: 160e2934218
Ref: Testes<4>-Footnote-12934677
Ref: Testes<4>-Footnote-22934733
Ref: Testes<4>-Footnote-32934789
Node: Segurança<5>2934845
Ref: whatsnew/changelog id282934954
Ref: 160f2934954
Ref: Segurança<5>-Footnote-12937049
Ref: Segurança<5>-Footnote-22937105
Ref: Segurança<5>-Footnote-32937161
Ref: Segurança<5>-Footnote-42937217
Node: Biblioteca<7>2937273
Ref: whatsnew/changelog id292937390
Ref: 16102937390
Ref: Biblioteca<7>-Footnote-12944624
Ref: Biblioteca<7>-Footnote-22944680
Ref: Biblioteca<7>-Footnote-32944736
Ref: Biblioteca<7>-Footnote-42944792
Ref: Biblioteca<7>-Footnote-52944847
Ref: Biblioteca<7>-Footnote-62944902
Ref: Biblioteca<7>-Footnote-72944958
Ref: Biblioteca<7>-Footnote-82945014
Ref: Biblioteca<7>-Footnote-92945070
Ref: Biblioteca<7>-Footnote-102945126
Ref: Biblioteca<7>-Footnote-112945183
Ref: Biblioteca<7>-Footnote-122945239
Ref: Biblioteca<7>-Footnote-132945295
Ref: Biblioteca<7>-Footnote-142945352
Ref: Biblioteca<7>-Footnote-152945409
Ref: Biblioteca<7>-Footnote-162945466
Ref: Biblioteca<7>-Footnote-172945522
Ref: Biblioteca<7>-Footnote-182945578
Ref: Biblioteca<7>-Footnote-192945635
Ref: Biblioteca<7>-Footnote-202945692
Ref: Biblioteca<7>-Footnote-212945749
Ref: Biblioteca<7>-Footnote-222945806
Ref: Biblioteca<7>-Footnote-232945863
Ref: Biblioteca<7>-Footnote-242945920
Ref: Biblioteca<7>-Footnote-252945977
Ref: Biblioteca<7>-Footnote-262946034
Ref: Biblioteca<7>-Footnote-272946091
Ref: Biblioteca<7>-Footnote-282946148
Ref: Biblioteca<7>-Footnote-292946205
Ref: Biblioteca<7>-Footnote-302946281
Ref: Biblioteca<7>-Footnote-312946338
Ref: Biblioteca<7>-Footnote-322946395
Ref: Biblioteca<7>-Footnote-332946452
Ref: Biblioteca<7>-Footnote-342946509
Ref: Biblioteca<7>-Footnote-352946566
Ref: Biblioteca<7>-Footnote-362946623
Ref: Biblioteca<7>-Footnote-372946679
Node: Documentação<4>2946736
Ref: whatsnew/changelog id302946862
Ref: 16152946862
Ref: Documentação<4>-Footnote-12947099
Node: Núcleo e embutidos<6>2947155
Ref: whatsnew/changelog id312947283
Ref: 16162947283
Ref: Núcleo e embutidos<6>-Footnote-12950512
Ref: Núcleo e embutidos<6>-Footnote-22950567
Ref: Núcleo e embutidos<6>-Footnote-32950623
Ref: Núcleo e embutidos<6>-Footnote-42950679
Ref: Núcleo e embutidos<6>-Footnote-52950735
Ref: Núcleo e embutidos<6>-Footnote-62950790
Ref: Núcleo e embutidos<6>-Footnote-72950846
Ref: Núcleo e embutidos<6>-Footnote-82950902
Ref: Núcleo e embutidos<6>-Footnote-92950958
Ref: Núcleo e embutidos<6>-Footnote-102951014
Ref: Núcleo e embutidos<6>-Footnote-112951071
Ref: Núcleo e embutidos<6>-Footnote-122951128
Ref: Núcleo e embutidos<6>-Footnote-132951185
Ref: Núcleo e embutidos<6>-Footnote-142951241
Ref: Núcleo e embutidos<6>-Footnote-152951298
Node: Construção<3>2951355
Ref: whatsnew/changelog id322951457
Ref: 16172951457
Ref: Construção<3>-Footnote-12951632
Node: Python 3 13 5 final2951688
Ref: whatsnew/changelog python-3-13-5-final2951809
Ref: 16182951809
Node: Windows<4>2952041
Ref: whatsnew/changelog id332952125
Ref: 16192952125
Ref: Windows<4>-Footnote-12952410
Node: Testes<5>2952466
Ref: whatsnew/changelog id342952572
Ref: 161a2952572
Ref: Testes<5>-Footnote-12952701
Node: Biblioteca<8>2952757
Ref: whatsnew/changelog id352952875
Ref: 161b2952875
Ref: Biblioteca<8>-Footnote-12954188
Ref: Biblioteca<8>-Footnote-22954244
Ref: Biblioteca<8>-Footnote-32954300
Ref: Biblioteca<8>-Footnote-42954356
Ref: Biblioteca<8>-Footnote-52954412
Ref: Biblioteca<8>-Footnote-62954468
Ref: Biblioteca<8>-Footnote-72954527
Ref: Biblioteca<8>-Footnote-82954583
Ref: Biblioteca<8>-Footnote-92954639
Node: Núcleo e embutidos<7>2954695
Ref: whatsnew/changelog id362954812
Ref: 161d2954812
Ref: Núcleo e embutidos<7>-Footnote-12955126
Ref: Núcleo e embutidos<7>-Footnote-22955182
Node: API C<4>2955238
Ref: whatsnew/changelog id372955333
Ref: 161e2955333
Ref: API C<4>-Footnote-12955845
Ref: API C<4>-Footnote-22955901
Node: Python 3 13 4 final2955957
Ref: whatsnew/changelog python-3-13-4-final2956078
Ref: 16212956078
Node: Windows<5>2956533
Ref: whatsnew/changelog id382956617
Ref: 16222956617
Ref: Windows<5>-Footnote-12957280
Ref: Windows<5>-Footnote-22957336
Ref: Windows<5>-Footnote-32957391
Ref: Windows<5>-Footnote-42957447
Node: Testes<6>2957503
Ref: whatsnew/changelog id392957609
Ref: 16232957609
Ref: Testes<6>-Footnote-12958535
Ref: Testes<6>-Footnote-22958591
Ref: Testes<6>-Footnote-32958647
Ref: Testes<6>-Footnote-42958703
Node: Segurança<6>2958759
Ref: whatsnew/changelog id402958868
Ref: 16242958868
Ref: Segurança<6>-Footnote-12959611
Ref: Segurança<6>-Footnote-22959667
Ref: Segurança<6>-Footnote-32959723
Ref: Segurança<6>-Footnote-42959778
Ref: Segurança<6>-Footnote-52959833
Ref: Segurança<6>-Footnote-62959888
Ref: Segurança<6>-Footnote-72959944
Node: Biblioteca<9>2960000
Ref: whatsnew/changelog id412960107
Ref: 16252960107
Ref: Biblioteca<9>-Footnote-12970309
Ref: Biblioteca<9>-Footnote-22970365
Ref: Biblioteca<9>-Footnote-32970421
Ref: Biblioteca<9>-Footnote-42970477
Ref: Biblioteca<9>-Footnote-52970533
Ref: Biblioteca<9>-Footnote-62970588
Ref: Biblioteca<9>-Footnote-72970644
Ref: Biblioteca<9>-Footnote-82970700
Ref: Biblioteca<9>-Footnote-92970755
Ref: Biblioteca<9>-Footnote-102970811
Ref: Biblioteca<9>-Footnote-112970868
Ref: Biblioteca<9>-Footnote-122970925
Ref: Biblioteca<9>-Footnote-132970982
Ref: Biblioteca<9>-Footnote-142971039
Ref: Biblioteca<9>-Footnote-152971096
Ref: Biblioteca<9>-Footnote-162971153
Ref: Biblioteca<9>-Footnote-172971209
Ref: Biblioteca<9>-Footnote-182971265
Ref: Biblioteca<9>-Footnote-192971322
Ref: Biblioteca<9>-Footnote-202971379
Ref: Biblioteca<9>-Footnote-212971436
Ref: Biblioteca<9>-Footnote-222971493
Ref: Biblioteca<9>-Footnote-232971550
Ref: Biblioteca<9>-Footnote-242971607
Ref: Biblioteca<9>-Footnote-252971664
Ref: Biblioteca<9>-Footnote-262971721
Ref: Biblioteca<9>-Footnote-272971778
Ref: Biblioteca<9>-Footnote-282971835
Ref: Biblioteca<9>-Footnote-292971892
Ref: Biblioteca<9>-Footnote-302971949
Ref: Biblioteca<9>-Footnote-312972006
Ref: Biblioteca<9>-Footnote-322972063
Ref: Biblioteca<9>-Footnote-332972120
Ref: Biblioteca<9>-Footnote-342972177
Ref: Biblioteca<9>-Footnote-352972234
Ref: Biblioteca<9>-Footnote-362972291
Ref: Biblioteca<9>-Footnote-372972347
Ref: Biblioteca<9>-Footnote-382972404
Ref: Biblioteca<9>-Footnote-392972461
Ref: Biblioteca<9>-Footnote-402972518
Ref: Biblioteca<9>-Footnote-412972575
Ref: Biblioteca<9>-Footnote-422972632
Ref: Biblioteca<9>-Footnote-432972689
Ref: Biblioteca<9>-Footnote-442972746
Ref: Biblioteca<9>-Footnote-452972803
Ref: Biblioteca<9>-Footnote-462972860
Ref: Biblioteca<9>-Footnote-472972917
Ref: Biblioteca<9>-Footnote-482972973
Ref: Biblioteca<9>-Footnote-492973029
Node: IDLE<5>2973095
Ref: whatsnew/changelog id422973206
Ref: 162f2973206
Ref: IDLE<5>-Footnote-12973364
Node: Documentação<5>2973420
Ref: whatsnew/changelog id432973532
Ref: 16302973532
Ref: Documentação<5>-Footnote-12973763
Node: Biblioteca<10>2973819
Ref: whatsnew/changelog id442973946
Ref: 16322973946
Ref: Biblioteca<10>-Footnote-12974153
Node: Núcleo e embutidos<8>2974209
Ref: whatsnew/changelog id452974333
Ref: 16332974333
Ref: Núcleo e embutidos<8>-Footnote-12974615
Node: Biblioteca<11>2974671
Ref: whatsnew/changelog id462974803
Ref: 16342974803
Ref: Biblioteca<11>-Footnote-12975032
Node: Núcleo e embutidos<9>2975088
Ref: whatsnew/changelog id472975206
Ref: 16352975206
Ref: Núcleo e embutidos<9>-Footnote-12978791
Ref: Núcleo e embutidos<9>-Footnote-22978847
Ref: Núcleo e embutidos<9>-Footnote-32978903
Ref: Núcleo e embutidos<9>-Footnote-42978959
Ref: Núcleo e embutidos<9>-Footnote-52979015
Ref: Núcleo e embutidos<9>-Footnote-62979071
Ref: Núcleo e embutidos<9>-Footnote-72979127
Ref: Núcleo e embutidos<9>-Footnote-82979183
Ref: Núcleo e embutidos<9>-Footnote-92979239
Ref: Núcleo e embutidos<9>-Footnote-102979295
Ref: Núcleo e embutidos<9>-Footnote-112979352
Ref: Núcleo e embutidos<9>-Footnote-122979409
Ref: Núcleo e embutidos<9>-Footnote-132979466
Ref: Núcleo e embutidos<9>-Footnote-142979511
Ref: Núcleo e embutidos<9>-Footnote-152979568
Ref: Núcleo e embutidos<9>-Footnote-162979625
Ref: Núcleo e embutidos<9>-Footnote-172979682
Ref: Núcleo e embutidos<9>-Footnote-182979739
Ref: Núcleo e embutidos<9>-Footnote-192979796
Ref: Núcleo e embutidos<9>-Footnote-202979853
Ref: Núcleo e embutidos<9>-Footnote-212979910
Node: API C<5>2979967
Ref: whatsnew/changelog id482980086
Ref: 16392980086
Ref: API C<5>-Footnote-12980296
Node: Construção<4>2980352
Ref: whatsnew/changelog id492980440
Ref: 163b2980440
Ref: Construção<4>-Footnote-12981418
Ref: Construção<4>-Footnote-22981474
Ref: Construção<4>-Footnote-32981530
Ref: Construção<4>-Footnote-42981586
Ref: Construção<4>-Footnote-52981642
Ref: Construção<4>-Footnote-62981698
Node: Python 3 13 3 final2981754
Ref: whatsnew/changelog python-3-13-3-final2981875
Ref: 163c2981875
Node: macOS<3>2982374
Ref: whatsnew/changelog id502982457
Ref: 163d2982457
Ref: macOS<3>-Footnote-12982897
Ref: macOS<3>-Footnote-22982953
Ref: macOS<3>-Footnote-32983009
Ref: macOS<3>-Footnote-42983065
Node: Windows<6>2983120
Ref: whatsnew/changelog id512983232
Ref: 163e2983232
Ref: Windows<6>-Footnote-12983754
Ref: Windows<6>-Footnote-22983810
Ref: Windows<6>-Footnote-32983866
Ref: Windows<6>-Footnote-42983922
Node: Ferramentas/Demos<5>2983989
Ref: whatsnew/changelog id522984102
Ref: 163f2984102
Ref: Ferramentas/Demos<5>-Footnote-12984596
Ref: Ferramentas/Demos<5>-Footnote-22984652
Ref: Ferramentas/Demos<5>-Footnote-32984707
Node: Testes<7>2984763
Ref: whatsnew/changelog id532984879
Ref: 16402984879
Ref: Testes<7>-Footnote-12985679
Ref: Testes<7>-Footnote-22985735
Ref: Testes<7>-Footnote-32985791
Ref: Testes<7>-Footnote-42985847
Ref: Testes<7>-Footnote-52985903
Node: Segurança<7>2985959
Ref: whatsnew/changelog id542986069
Ref: 16412986069
Ref: Segurança<7>-Footnote-12987194
Ref: Segurança<7>-Footnote-22987250
Ref: Segurança<7>-Footnote-32987306
Ref: Segurança<7>-Footnote-42987362
Node: Biblioteca<12>2987418
Ref: whatsnew/changelog id552987526
Ref: 16422987526
Ref: Biblioteca<12>-Footnote-12995632
Ref: Biblioteca<12>-Footnote-22995688
Ref: Biblioteca<12>-Footnote-32995744
Ref: Biblioteca<12>-Footnote-42995800
Ref: Biblioteca<12>-Footnote-52995856
Ref: Biblioteca<12>-Footnote-62995912
Ref: Biblioteca<12>-Footnote-72995968
Ref: Biblioteca<12>-Footnote-82996024
Ref: Biblioteca<12>-Footnote-92996080
Ref: Biblioteca<12>-Footnote-102996136
Ref: Biblioteca<12>-Footnote-112996193
Ref: Biblioteca<12>-Footnote-122996250
Ref: Biblioteca<12>-Footnote-132996307
Ref: Biblioteca<12>-Footnote-142996364
Ref: Biblioteca<12>-Footnote-152996421
Ref: Biblioteca<12>-Footnote-162996478
Ref: Biblioteca<12>-Footnote-172996535
Ref: Biblioteca<12>-Footnote-182996592
Ref: Biblioteca<12>-Footnote-192996649
Ref: Biblioteca<12>-Footnote-202996706
Ref: Biblioteca<12>-Footnote-212996763
Ref: Biblioteca<12>-Footnote-222996820
Ref: Biblioteca<12>-Footnote-232996877
Ref: Biblioteca<12>-Footnote-242996934
Ref: Biblioteca<12>-Footnote-252996991
Ref: Biblioteca<12>-Footnote-262997048
Ref: Biblioteca<12>-Footnote-272997105
Ref: Biblioteca<12>-Footnote-282997161
Ref: Biblioteca<12>-Footnote-292997218
Ref: Biblioteca<12>-Footnote-302997274
Ref: Biblioteca<12>-Footnote-312997331
Ref: Biblioteca<12>-Footnote-322997388
Ref: Biblioteca<12>-Footnote-332997445
Ref: Biblioteca<12>-Footnote-342997502
Ref: Biblioteca<12>-Footnote-352997559
Ref: Biblioteca<12>-Footnote-362997615
Ref: Biblioteca<12>-Footnote-372997672
Ref: Biblioteca<12>-Footnote-382997729
Ref: Biblioteca<12>-Footnote-392997786
Ref: Biblioteca<12>-Footnote-402997843
Ref: Biblioteca<12>-Footnote-412997900
Ref: Biblioteca<12>-Footnote-422997957
Ref: Biblioteca<12>-Footnote-432998014
Ref: Biblioteca<12>-Footnote-442998071
Node: IDLE<6>2998128
Ref: whatsnew/changelog id562998240
Ref: 16522998240
Ref: IDLE<6>-Footnote-12998484
Node: Documentação<6>2998540
Ref: whatsnew/changelog id572998661
Ref: 16532998661
Ref: Documentação<6>-Footnote-12999258
Ref: Documentação<6>-Footnote-22999314
Ref: Documentação<6>-Footnote-32999370
Ref: Documentação<6>-Footnote-42999426
Node: Núcleo e embutidos<10>2999481
Ref: whatsnew/changelog id582999609
Ref: 16572999609
Ref: Núcleo e embutidos<10>-Footnote-13002388
Ref: Núcleo e embutidos<10>-Footnote-23002444
Ref: Núcleo e embutidos<10>-Footnote-33002500
Ref: Núcleo e embutidos<10>-Footnote-43002556
Ref: Núcleo e embutidos<10>-Footnote-53002612
Ref: Núcleo e embutidos<10>-Footnote-63002668
Ref: Núcleo e embutidos<10>-Footnote-73002724
Ref: Núcleo e embutidos<10>-Footnote-83002780
Ref: Núcleo e embutidos<10>-Footnote-93002836
Ref: Núcleo e embutidos<10>-Footnote-103002892
Ref: Núcleo e embutidos<10>-Footnote-113002949
Ref: Núcleo e embutidos<10>-Footnote-123003006
Ref: Núcleo e embutidos<10>-Footnote-133003063
Ref: Núcleo e embutidos<10>-Footnote-143003120
Ref: Núcleo e embutidos<10>-Footnote-153003176
Ref: Núcleo e embutidos<10>-Footnote-163003233
Ref: Núcleo e embutidos<10>-Footnote-173003290
Node: Biblioteca<13>3003347
Ref: whatsnew/changelog id593003481
Ref: 165b3003481
Ref: Biblioteca<13>-Footnote-13003648
Node: Núcleo e embutidos<11>3003704
Ref: whatsnew/changelog id603003823
Ref: 165c3003823
Ref: Núcleo e embutidos<11>-Footnote-13005762
Ref: Núcleo e embutidos<11>-Footnote-23005818
Ref: Núcleo e embutidos<11>-Footnote-33005874
Ref: Núcleo e embutidos<11>-Footnote-43005930
Ref: Núcleo e embutidos<11>-Footnote-53005986
Ref: Núcleo e embutidos<11>-Footnote-63006042
Ref: Núcleo e embutidos<11>-Footnote-73006098
Ref: Núcleo e embutidos<11>-Footnote-83006154
Ref: Núcleo e embutidos<11>-Footnote-93006210
Ref: Núcleo e embutidos<11>-Footnote-103006266
Node: API C<6>3006323
Ref: whatsnew/changelog id613006443
Ref: 165f3006443
Ref: API C<6>-Footnote-13006855
Ref: API C<6>-Footnote-23006911
Node: Construção<5>3006967
Ref: whatsnew/changelog id623007055
Ref: 16603007055
Ref: Construção<5>-Footnote-13008061
Ref: Construção<5>-Footnote-23008117
Ref: Construção<5>-Footnote-33008173
Ref: Construção<5>-Footnote-43008229
Ref: Construção<5>-Footnote-53008285
Ref: Construção<5>-Footnote-63008341
Node: Python 3 13 2 final3008397
Ref: whatsnew/changelog python-3-13-2-final3008518
Ref: 16613008518
Node: macOS<4>3008952
Ref: whatsnew/changelog id633009035
Ref: 16623009035
Ref: macOS<4>-Footnote-13009249
Node: Windows<7>3009305
Ref: whatsnew/changelog id643009417
Ref: 16633009417
Ref: Windows<7>-Footnote-13009618
Node: Ferramentas/Demos<6>3009674
Ref: whatsnew/changelog id653009787
Ref: 16643009787
Ref: Ferramentas/Demos<6>-Footnote-13010215
Ref: Ferramentas/Demos<6>-Footnote-23010271
Node: Testes<8>3010327
Ref: whatsnew/changelog id663010443
Ref: 16653010443
Ref: Testes<8>-Footnote-13010894
Ref: Testes<8>-Footnote-23010950
Ref: Testes<8>-Footnote-33011006
Node: Segurança<8>3011062
Ref: whatsnew/changelog id673011172
Ref: 16663011172
Ref: Segurança<8>-Footnote-13013194
Ref: Segurança<8>-Footnote-23013250
Ref: Segurança<8>-Footnote-33013311
Ref: Segurança<8>-Footnote-43013367
Ref: Segurança<8>-Footnote-53013423
Ref: Segurança<8>-Footnote-63013478
Node: Biblioteca<14>3013534
Ref: whatsnew/changelog id683013652
Ref: 16673013652
Ref: Biblioteca<14>-Footnote-13023450
Ref: Biblioteca<14>-Footnote-23023506
Ref: Biblioteca<14>-Footnote-33023562
Ref: Biblioteca<14>-Footnote-43023618
Ref: Biblioteca<14>-Footnote-53023674
Ref: Biblioteca<14>-Footnote-63023730
Ref: Biblioteca<14>-Footnote-73023786
Ref: Biblioteca<14>-Footnote-83023842
Ref: Biblioteca<14>-Footnote-93023898
Ref: Biblioteca<14>-Footnote-103023954
Ref: Biblioteca<14>-Footnote-113024011
Ref: Biblioteca<14>-Footnote-123024068
Ref: Biblioteca<14>-Footnote-133024125
Ref: Biblioteca<14>-Footnote-143024182
Ref: Biblioteca<14>-Footnote-153024239
Ref: Biblioteca<14>-Footnote-163024296
Ref: Biblioteca<14>-Footnote-173024353
Ref: Biblioteca<14>-Footnote-183024410
Ref: Biblioteca<14>-Footnote-193024467
Ref: Biblioteca<14>-Footnote-203024524
Ref: Biblioteca<14>-Footnote-213024580
Ref: Biblioteca<14>-Footnote-223024637
Ref: Biblioteca<14>-Footnote-233024694
Ref: Biblioteca<14>-Footnote-243024751
Ref: Biblioteca<14>-Footnote-253024807
Ref: Biblioteca<14>-Footnote-263024864
Ref: Biblioteca<14>-Footnote-273024921
Ref: Biblioteca<14>-Footnote-283024978
Ref: Biblioteca<14>-Footnote-293025035
Ref: Biblioteca<14>-Footnote-303025092
Ref: Biblioteca<14>-Footnote-313025149
Ref: Biblioteca<14>-Footnote-323025205
Ref: Biblioteca<14>-Footnote-333025262
Ref: Biblioteca<14>-Footnote-343025319
Ref: Biblioteca<14>-Footnote-353025367
Ref: Biblioteca<14>-Footnote-363025412
Ref: Biblioteca<14>-Footnote-373025469
Ref: Biblioteca<14>-Footnote-383025526
Ref: Biblioteca<14>-Footnote-393025583
Ref: Biblioteca<14>-Footnote-403025640
Ref: Biblioteca<14>-Footnote-413025697
Ref: Biblioteca<14>-Footnote-423025753
Ref: Biblioteca<14>-Footnote-433025809
Ref: Biblioteca<14>-Footnote-443025866
Ref: Biblioteca<14>-Footnote-453025922
Ref: Biblioteca<14>-Footnote-463025979
Ref: Biblioteca<14>-Footnote-473026036
Ref: Biblioteca<14>-Footnote-483026093
Ref: Biblioteca<14>-Footnote-493026150
Ref: Biblioteca<14>-Footnote-503026207
Ref: Biblioteca<14>-Footnote-513026264
Ref: Biblioteca<14>-Footnote-523026321
Ref: Biblioteca<14>-Footnote-533026378
Ref: Biblioteca<14>-Footnote-543026435
Ref: Biblioteca<14>-Footnote-553026494
Ref: Biblioteca<14>-Footnote-563026554
Ref: Biblioteca<14>-Footnote-573026611
Node: Documentação<7>3026668
Ref: whatsnew/changelog id693026787
Ref: 166c3026787
Ref: Documentação<7>-Footnote-13027224
Ref: Documentação<7>-Footnote-23027280
Node: Biblioteca<15>3027335
Ref: whatsnew/changelog id703027463
Ref: 166e3027463
Ref: Biblioteca<15>-Footnote-13027697
Node: Núcleo e embutidos<12>3027753
Ref: whatsnew/changelog id713027872
Ref: 166f3027872
Ref: Núcleo e embutidos<12>-Footnote-13030901
Ref: Núcleo e embutidos<12>-Footnote-23030957
Ref: Núcleo e embutidos<12>-Footnote-33031013
Ref: Núcleo e embutidos<12>-Footnote-43031069
Ref: Núcleo e embutidos<12>-Footnote-53031125
Ref: Núcleo e embutidos<12>-Footnote-63031181
Ref: Núcleo e embutidos<12>-Footnote-73031237
Ref: Núcleo e embutidos<12>-Footnote-83031293
Ref: Núcleo e embutidos<12>-Footnote-93031349
Ref: Núcleo e embutidos<12>-Footnote-103031405
Ref: Núcleo e embutidos<12>-Footnote-113031462
Ref: Núcleo e embutidos<12>-Footnote-123031519
Ref: Núcleo e embutidos<12>-Footnote-133031576
Ref: Núcleo e embutidos<12>-Footnote-143031633
Ref: Núcleo e embutidos<12>-Footnote-153031690
Ref: Núcleo e embutidos<12>-Footnote-163031747
Ref: Núcleo e embutidos<12>-Footnote-173031804
Node: API C<7>3031861
Ref: whatsnew/changelog id723031981
Ref: 16713031981
Ref: API C<7>-Footnote-13032178
Node: Construção<6>3032234
Ref: whatsnew/changelog id733032322
Ref: 16733032322
Ref: Construção<6>-Footnote-13033189
Ref: Construção<6>-Footnote-23033245
Ref: Construção<6>-Footnote-33033301
Ref: Construção<6>-Footnote-43033357
Ref: Construção<6>-Footnote-53033413
Node: Python 3 13 1 final3033469
Ref: whatsnew/changelog python-3-13-1-final3033590
Ref: 16743033590
Node: macOS<5>3034167
Ref: whatsnew/changelog id743034250
Ref: 16753034250
Ref: macOS<5>-Footnote-13034409
Node: Windows<8>3034465
Ref: whatsnew/changelog id753034577
Ref: 16763034577
Ref: Windows<8>-Footnote-13035776
Ref: Windows<8>-Footnote-23035832
Ref: Windows<8>-Footnote-33035888
Ref: Windows<8>-Footnote-43035944
Ref: Windows<8>-Footnote-53036000
Ref: Windows<8>-Footnote-63036056
Ref: Windows<8>-Footnote-73036112
Ref: Windows<8>-Footnote-83036168
Ref: Windows<8>-Footnote-93036224
Node: Ferramentas/Demos<7>3036280
Ref: whatsnew/changelog id763036393
Ref: 16773036393
Ref: Ferramentas/Demos<7>-Footnote-13036778
Ref: Ferramentas/Demos<7>-Footnote-23036834
Node: Testes<9>3036890
Ref: whatsnew/changelog id773037006
Ref: 16783037006
Ref: Testes<9>-Footnote-13037583
Ref: Testes<9>-Footnote-23037639
Ref: Testes<9>-Footnote-33037695
Node: Segurança<9>3037751
Ref: whatsnew/changelog id783037861
Ref: 16793037861
Ref: Segurança<9>-Footnote-13038412
Ref: Segurança<9>-Footnote-23038468
Ref: Segurança<9>-Footnote-33038524
Node: Biblioteca<16>3038580
Ref: whatsnew/changelog id793038688
Ref: 167a3038688
Ref: Biblioteca<16>-Footnote-13062391
Ref: Biblioteca<16>-Footnote-23062447
Ref: Biblioteca<16>-Footnote-33062503
Ref: Biblioteca<16>-Footnote-43062559
Ref: Biblioteca<16>-Footnote-53062615
Ref: Biblioteca<16>-Footnote-63062671
Ref: Biblioteca<16>-Footnote-73062727
Ref: Biblioteca<16>-Footnote-83062783
Ref: Biblioteca<16>-Footnote-93062839
Ref: Biblioteca<16>-Footnote-103062895
Ref: Biblioteca<16>-Footnote-113062952
Ref: Biblioteca<16>-Footnote-123063009
Ref: Biblioteca<16>-Footnote-133063066
Ref: Biblioteca<16>-Footnote-143063123
Ref: Biblioteca<16>-Footnote-153063179
Ref: Biblioteca<16>-Footnote-163063235
Ref: Biblioteca<16>-Footnote-173063292
Ref: Biblioteca<16>-Footnote-183063349
Ref: Biblioteca<16>-Footnote-193063406
Ref: Biblioteca<16>-Footnote-203063463
Ref: Biblioteca<16>-Footnote-213063520
Ref: Biblioteca<16>-Footnote-223063577
Ref: Biblioteca<16>-Footnote-233063634
Ref: Biblioteca<16>-Footnote-243063691
Ref: Biblioteca<16>-Footnote-253063748
Ref: Biblioteca<16>-Footnote-263063805
Ref: Biblioteca<16>-Footnote-273063862
Ref: Biblioteca<16>-Footnote-283063919
Ref: Biblioteca<16>-Footnote-293063976
Ref: Biblioteca<16>-Footnote-303064033
Ref: Biblioteca<16>-Footnote-313064090
Ref: Biblioteca<16>-Footnote-323064147
Ref: Biblioteca<16>-Footnote-333064204
Ref: Biblioteca<16>-Footnote-343064261
Ref: Biblioteca<16>-Footnote-353064318
Ref: Biblioteca<16>-Footnote-363064375
Ref: Biblioteca<16>-Footnote-373064432
Ref: Biblioteca<16>-Footnote-383064489
Ref: Biblioteca<16>-Footnote-393064546
Ref: Biblioteca<16>-Footnote-403064603
Ref: Biblioteca<16>-Footnote-413064660
Ref: Biblioteca<16>-Footnote-423064717
Ref: Biblioteca<16>-Footnote-433064774
Ref: Biblioteca<16>-Footnote-443064831
Ref: Biblioteca<16>-Footnote-453064888
Ref: Biblioteca<16>-Footnote-463064945
Ref: Biblioteca<16>-Footnote-473065002
Ref: Biblioteca<16>-Footnote-483065059
Ref: Biblioteca<16>-Footnote-493065116
Ref: Biblioteca<16>-Footnote-503065173
Ref: Biblioteca<16>-Footnote-513065230
Ref: Biblioteca<16>-Footnote-523065287
Ref: Biblioteca<16>-Footnote-533065344
Ref: Biblioteca<16>-Footnote-543065401
Ref: Biblioteca<16>-Footnote-553065458
Ref: Biblioteca<16>-Footnote-563065515
Ref: Biblioteca<16>-Footnote-573065572
Ref: Biblioteca<16>-Footnote-583065629
Ref: Biblioteca<16>-Footnote-593065686
Ref: Biblioteca<16>-Footnote-603065743
Ref: Biblioteca<16>-Footnote-613065800
Ref: Biblioteca<16>-Footnote-623065857
Ref: Biblioteca<16>-Footnote-633065914
Ref: Biblioteca<16>-Footnote-643065970
Ref: Biblioteca<16>-Footnote-653066027
Ref: Biblioteca<16>-Footnote-663066084
Ref: Biblioteca<16>-Footnote-673066141
Ref: Biblioteca<16>-Footnote-683066198
Ref: Biblioteca<16>-Footnote-693066255
Ref: Biblioteca<16>-Footnote-703066312
Ref: Biblioteca<16>-Footnote-713066368
Ref: Biblioteca<16>-Footnote-723066424
Ref: Biblioteca<16>-Footnote-733066481
Ref: Biblioteca<16>-Footnote-743066538
Ref: Biblioteca<16>-Footnote-753066595
Ref: Biblioteca<16>-Footnote-763066652
Ref: Biblioteca<16>-Footnote-773066709
Ref: Biblioteca<16>-Footnote-783066766
Ref: Biblioteca<16>-Footnote-793066823
Ref: Biblioteca<16>-Footnote-803066879
Ref: Biblioteca<16>-Footnote-813066936
Ref: Biblioteca<16>-Footnote-823066993
Ref: Biblioteca<16>-Footnote-833067050
Ref: Biblioteca<16>-Footnote-843067107
Ref: Biblioteca<16>-Footnote-853067164
Ref: Biblioteca<16>-Footnote-863067221
Ref: Biblioteca<16>-Footnote-873067277
Ref: Biblioteca<16>-Footnote-883067334
Ref: Biblioteca<16>-Footnote-893067390
Ref: Biblioteca<16>-Footnote-903067446
Ref: Biblioteca<16>-Footnote-913067503
Ref: Biblioteca<16>-Footnote-923067560
Ref: Biblioteca<16>-Footnote-933067616
Ref: Biblioteca<16>-Footnote-943067673
Ref: Biblioteca<16>-Footnote-953067730
Ref: Biblioteca<16>-Footnote-963067786
Ref: Biblioteca<16>-Footnote-973067842
Ref: Biblioteca<16>-Footnote-983067898
Ref: Biblioteca<16>-Footnote-993067954
Ref: Biblioteca<16>-Footnote-1003068011
Ref: Biblioteca<16>-Footnote-1013068068
Ref: Biblioteca<16>-Footnote-1023068126
Ref: Biblioteca<16>-Footnote-1033068184
Ref: Biblioteca<16>-Footnote-1043068242
Ref: Biblioteca<16>-Footnote-1053068300
Ref: Biblioteca<16>-Footnote-1063068358
Ref: Biblioteca<16>-Footnote-1073068416
Ref: Biblioteca<16>-Footnote-1083068474
Ref: Biblioteca<16>-Footnote-1093068531
Ref: Biblioteca<16>-Footnote-1103068589
Ref: Biblioteca<16>-Footnote-1113068647
Ref: Biblioteca<16>-Footnote-1123068705
Ref: Biblioteca<16>-Footnote-1133068763
Ref: Biblioteca<16>-Footnote-1143068820
Ref: Biblioteca<16>-Footnote-1153068877
Ref: Biblioteca<16>-Footnote-1163068944
Node: IDLE<7>3069011
Ref: whatsnew/changelog id803069123
Ref: 16943069123
Ref: IDLE<7>-Footnote-13069360
Node: Documentação<8>3069416
Ref: whatsnew/changelog id813069537
Ref: 16953069537
Ref: Documentação<8>-Footnote-13071751
Ref: Documentação<8>-Footnote-23071807
Ref: Documentação<8>-Footnote-33071863
Ref: Documentação<8>-Footnote-43071919
Ref: Documentação<8>-Footnote-53071975
Ref: Documentação<8>-Footnote-63072030
Ref: Documentação<8>-Footnote-73072086
Ref: Documentação<8>-Footnote-83072141
Node: Núcleo e embutidos<13>3072206
Ref: whatsnew/changelog id823072334
Ref: 169a3072334
Ref: Núcleo e embutidos<13>-Footnote-13073428
Ref: Núcleo e embutidos<13>-Footnote-23073484
Ref: Núcleo e embutidos<13>-Footnote-33073540
Ref: Núcleo e embutidos<13>-Footnote-43073596
Ref: Núcleo e embutidos<13>-Footnote-53073652
Ref: Núcleo e embutidos<13>-Footnote-63073708
Node: Biblioteca<17>3073764
Ref: whatsnew/changelog id833073898
Ref: 169e3073898
Ref: Biblioteca<17>-Footnote-13074212
Node: Núcleo e embutidos<14>3074268
Ref: whatsnew/changelog id843074393
Ref: 169f3074393
Ref: Núcleo e embutidos<14>-Footnote-13077936
Ref: Núcleo e embutidos<14>-Footnote-23077992
Ref: Núcleo e embutidos<14>-Footnote-33078048
Ref: Núcleo e embutidos<14>-Footnote-43078104
Ref: Núcleo e embutidos<14>-Footnote-53078160
Ref: Núcleo e embutidos<14>-Footnote-63078216
Ref: Núcleo e embutidos<14>-Footnote-73078272
Ref: Núcleo e embutidos<14>-Footnote-83078328
Ref: Núcleo e embutidos<14>-Footnote-93078384
Ref: Núcleo e embutidos<14>-Footnote-103078440
Ref: Núcleo e embutidos<14>-Footnote-113078497
Ref: Núcleo e embutidos<14>-Footnote-123078554
Ref: Núcleo e embutidos<14>-Footnote-133078611
Ref: Núcleo e embutidos<14>-Footnote-143078668
Ref: Núcleo e embutidos<14>-Footnote-153078725
Ref: Núcleo e embutidos<14>-Footnote-163078782
Ref: Núcleo e embutidos<14>-Footnote-173078839
Node: Biblioteca<18>3078896
Ref: whatsnew/changelog id853079030
Ref: 16a43079030
Ref: Biblioteca<18>-Footnote-13079427
Ref: Biblioteca<18>-Footnote-23079483
Node: Núcleo e embutidos<15>3079539
Ref: whatsnew/changelog id863079658
Ref: 16a53079658
Ref: Núcleo e embutidos<15>-Footnote-13079954
Node: API C<8>3080010
Ref: whatsnew/changelog id873080130
Ref: 16a63080130
Ref: API C<8>-Footnote-13080818
Ref: API C<8>-Footnote-23080874
Ref: API C<8>-Footnote-33080930
Node: Construção<7>3080995
Ref: whatsnew/changelog id883081083
Ref: 16a73081083
Ref: Construção<7>-Footnote-13082095
Ref: Construção<7>-Footnote-23082151
Ref: Construção<7>-Footnote-33082206
Ref: Construção<7>-Footnote-43082262
Ref: Construção<7>-Footnote-53082327
Ref: Construção<7>-Footnote-63082382
Ref: Construção<7>-Footnote-73082438
Ref: Construção<7>-Footnote-83082494
Ref: Construção<7>-Footnote-93082550
Node: Python 3 13 0 final3082606
Ref: whatsnew/changelog python-3-13-0-final3082741
Ref: 16a83082741
Node: Biblioteca<19>3082921
Ref: whatsnew/changelog id893083023
Ref: 16a93083023
Ref: Biblioteca<19>-Footnote-13083267
Node: Núcleo e embutidos<16>3083323
Ref: whatsnew/changelog id903083425
Ref: 16aa3083425
Ref: Núcleo e embutidos<16>-Footnote-13083666
Node: Python 3 13 0 release candidate 33083722
Ref: whatsnew/changelog python-3-13-0-release-candidate-33083871
Ref: 16ab3083871
Node: macOS<6>3084249
Ref: whatsnew/changelog id913084346
Ref: 16ac3084346
Ref: macOS<6>-Footnote-13084528
Node: Windows<9>3084584
Ref: whatsnew/changelog id923084700
Ref: 16ad3084700
Ref: Windows<9>-Footnote-13085153
Ref: Windows<9>-Footnote-23085209
Ref: Windows<9>-Footnote-33085265
Node: Testes<10>3085321
Ref: whatsnew/changelog id933085443
Ref: 16ae3085443
Ref: Testes<10>-Footnote-13085591
Node: Biblioteca<20>3085647
Ref: whatsnew/changelog id943085766
Ref: 16af3085766
Ref: Biblioteca<20>-Footnote-13088614
Ref: Biblioteca<20>-Footnote-23088670
Ref: Biblioteca<20>-Footnote-33088726
Ref: Biblioteca<20>-Footnote-43088782
Ref: Biblioteca<20>-Footnote-53088838
Ref: Biblioteca<20>-Footnote-63088894
Ref: Biblioteca<20>-Footnote-73088949
Ref: Biblioteca<20>-Footnote-83089005
Ref: Biblioteca<20>-Footnote-93089061
Ref: Biblioteca<20>-Footnote-103089117
Ref: Biblioteca<20>-Footnote-113089174
Ref: Biblioteca<20>-Footnote-123089231
Ref: Biblioteca<20>-Footnote-133089288
Ref: Biblioteca<20>-Footnote-143089345
Ref: Biblioteca<20>-Footnote-153089402
Ref: Biblioteca<20>-Footnote-163089459
Node: IDLE<8>3089525
Ref: whatsnew/changelog id953089651
Ref: 16b23089651
Ref: IDLE<8>-Footnote-13089935
Ref: IDLE<8>-Footnote-23089991
Node: Documentação<9>3090047
Ref: whatsnew/changelog id963090182
Ref: 16b33090182
Ref: Documentação<9>-Footnote-13090584
Ref: Documentação<9>-Footnote-23090640
Node: Núcleo e embutidos<17>3090696
Ref: whatsnew/changelog id973090832
Ref: 16b43090832
Ref: Núcleo e embutidos<17>-Footnote-13092905
Ref: Núcleo e embutidos<17>-Footnote-23092961
Ref: Núcleo e embutidos<17>-Footnote-33093017
Ref: Núcleo e embutidos<17>-Footnote-43093073
Ref: Núcleo e embutidos<17>-Footnote-53093129
Ref: Núcleo e embutidos<17>-Footnote-63093185
Ref: Núcleo e embutidos<17>-Footnote-73093241
Ref: Núcleo e embutidos<17>-Footnote-83093297
Ref: Núcleo e embutidos<17>-Footnote-93093352
Ref: Núcleo e embutidos<17>-Footnote-103093408
Ref: Núcleo e embutidos<17>-Footnote-113093464
Node: API C<9>3093521
Ref: whatsnew/changelog id983093655
Ref: 16b53093655
Ref: API C<9>-Footnote-13094005
Ref: API C<9>-Footnote-23094061
Node: Construção<8>3094117
Ref: whatsnew/changelog id993094219
Ref: 16b63094219
Ref: Construção<8>-Footnote-13094590
Ref: Construção<8>-Footnote-23094646
Node: Python 3 13 0 release candidate 23094702
Ref: whatsnew/changelog python-3-13-0-release-candidate-23094865
Ref: 16b73094865
Node: macOS<7>3095311
Ref: whatsnew/changelog id1003095409
Ref: 16b83095409
Ref: macOS<7>-Footnote-13095578
Node: Windows<10>3095634
Ref: whatsnew/changelog id1013095761
Ref: 16b93095761
Ref: Windows<10>-Footnote-13096279
Ref: Windows<10>-Footnote-23096335
Ref: Windows<10>-Footnote-33096391
Ref: Windows<10>-Footnote-43096447
Node: Ferramentas/Demos<8>3096502
Ref: whatsnew/changelog id1023096631
Ref: 16ba3096631
Ref: Ferramentas/Demos<8>-Footnote-13096869
Node: Testes<11>3096925
Ref: whatsnew/changelog id1033097057
Ref: 16bb3097057
Ref: Testes<11>-Footnote-13097396
Ref: Testes<11>-Footnote-23097452
Node: Segurança<10>3097508
Ref: whatsnew/changelog id1043097634
Ref: 16bc3097634
Ref: Segurança<10>-Footnote-13097906
Ref: Segurança<10>-Footnote-23097962
Node: Biblioteca<21>3098018
Ref: whatsnew/changelog id1053098141
Ref: 16bd3098141
Ref: Biblioteca<21>-Footnote-13103668
Ref: Biblioteca<21>-Footnote-23103724
Ref: Biblioteca<21>-Footnote-33103780
Ref: Biblioteca<21>-Footnote-43103836
Ref: Biblioteca<21>-Footnote-53103907
Ref: Biblioteca<21>-Footnote-63103963
Ref: Biblioteca<21>-Footnote-73104019
Ref: Biblioteca<21>-Footnote-83104075
Ref: Biblioteca<21>-Footnote-93104131
Ref: Biblioteca<21>-Footnote-103104187
Ref: Biblioteca<21>-Footnote-113104244
Ref: Biblioteca<21>-Footnote-123104301
Ref: Biblioteca<21>-Footnote-133104357
Ref: Biblioteca<21>-Footnote-143104414
Ref: Biblioteca<21>-Footnote-153104471
Ref: Biblioteca<21>-Footnote-163104528
Ref: Biblioteca<21>-Footnote-173104585
Ref: Biblioteca<21>-Footnote-183104642
Ref: Biblioteca<21>-Footnote-193104699
Ref: Biblioteca<21>-Footnote-203104756
Ref: Biblioteca<21>-Footnote-213104813
Ref: Biblioteca<21>-Footnote-223104870
Ref: Biblioteca<21>-Footnote-233104927
Ref: Biblioteca<21>-Footnote-243104984
Ref: Biblioteca<21>-Footnote-253105040
Ref: Biblioteca<21>-Footnote-263105097
Ref: Biblioteca<21>-Footnote-273105153
Ref: Biblioteca<21>-Footnote-283105210
Ref: Biblioteca<21>-Footnote-293105267
Ref: Biblioteca<21>-Footnote-303105324
Ref: Biblioteca<21>-Footnote-313105381
Ref: Biblioteca<21>-Footnote-323105438
Ref: Biblioteca<21>-Footnote-333105495
Ref: Biblioteca<21>-Footnote-343105552
Node: IDLE<9>3105609
Ref: whatsnew/changelog id1063105732
Ref: 16c83105732
Ref: IDLE<9>-Footnote-13106048
Node: Biblioteca<22>3106104
Ref: whatsnew/changelog id1073106236
Ref: 16c93106236
Ref: Biblioteca<22>-Footnote-13106499
Node: Núcleo e embutidos<18>3106555
Ref: whatsnew/changelog id1083106689
Ref: 16ca3106689
Ref: Núcleo e embutidos<18>-Footnote-13110590
Ref: Núcleo e embutidos<18>-Footnote-23110646
Ref: Núcleo e embutidos<18>-Footnote-33110702
Ref: Núcleo e embutidos<18>-Footnote-43110758
Ref: Núcleo e embutidos<18>-Footnote-53110814
Ref: Núcleo e embutidos<18>-Footnote-63110870
Ref: Núcleo e embutidos<18>-Footnote-73110926
Ref: Núcleo e embutidos<18>-Footnote-83110982
Ref: Núcleo e embutidos<18>-Footnote-93111038
Ref: Núcleo e embutidos<18>-Footnote-103111094
Ref: Núcleo e embutidos<18>-Footnote-113111151
Ref: Núcleo e embutidos<18>-Footnote-123111208
Ref: Núcleo e embutidos<18>-Footnote-133111265
Ref: Núcleo e embutidos<18>-Footnote-143111322
Ref: Núcleo e embutidos<18>-Footnote-153111379
Ref: Núcleo e embutidos<18>-Footnote-163111436
Ref: Núcleo e embutidos<18>-Footnote-173111493
Ref: Núcleo e embutidos<18>-Footnote-183111550
Ref: Núcleo e embutidos<18>-Footnote-193111607
Ref: Núcleo e embutidos<18>-Footnote-203111664
Ref: Núcleo e embutidos<18>-Footnote-213111721
Ref: Núcleo e embutidos<18>-Footnote-223111778
Ref: Núcleo e embutidos<18>-Footnote-233111835
Ref: Núcleo e embutidos<18>-Footnote-243111892
Ref: Núcleo e embutidos<18>-Footnote-253111948
Ref: Núcleo e embutidos<18>-Footnote-263112004
Node: API C<10>3112061
Ref: whatsnew/changelog id1093112196
Ref: 16cc3112196
Ref: API C<10>-Footnote-13112444
Node: Construção<9>3112500
Ref: whatsnew/changelog id1103112603
Ref: 16cd3112603
Ref: Construção<9>-Footnote-13113651
Ref: Construção<9>-Footnote-23113707
Ref: Construção<9>-Footnote-33113763
Ref: Construção<9>-Footnote-43113819
Ref: Construção<9>-Footnote-53113875
Node: Python 3 13 0 release candidate 13113931
Ref: whatsnew/changelog python-3-13-0-release-candidate-13114081
Ref: 16ce3114081
Node: Testes<12>3114413
Ref: whatsnew/changelog id1113114516
Ref: 16cf3114516
Ref: Testes<12>-Footnote-13114963
Ref: Testes<12>-Footnote-23115018
Node: Segurança<11>3115073
Ref: whatsnew/changelog id1123115199
Ref: 16d23115199
Ref: Segurança<11>-Footnote-13115879
Ref: Segurança<11>-Footnote-23115935
Node: Biblioteca<23>3115991
Ref: whatsnew/changelog id1133116115
Ref: 16d33116115
Ref: Biblioteca<23>-Footnote-13118317
Ref: Biblioteca<23>-Footnote-23118373
Ref: Biblioteca<23>-Footnote-33118429
Ref: Biblioteca<23>-Footnote-43118485
Ref: Biblioteca<23>-Footnote-53118541
Ref: Biblioteca<23>-Footnote-63118597
Ref: Biblioteca<23>-Footnote-73118653
Ref: Biblioteca<23>-Footnote-83118708
Ref: Biblioteca<23>-Footnote-93118764
Ref: Biblioteca<23>-Footnote-103118820
Ref: Biblioteca<23>-Footnote-113118877
Ref: Biblioteca<23>-Footnote-123118933
Ref: Biblioteca<23>-Footnote-133118990
Node: IDLE<10>3119047
Ref: whatsnew/changelog id1143119180
Ref: 16d83119180
Ref: IDLE<10>-Footnote-13119427
Node: Núcleo e embutidos<19>3119483
Ref: whatsnew/changelog id1153119611
Ref: 16d93119611
Ref: Núcleo e embutidos<19>-Footnote-13120780
Ref: Núcleo e embutidos<19>-Footnote-23120836
Ref: Núcleo e embutidos<19>-Footnote-33120892
Ref: Núcleo e embutidos<19>-Footnote-43120948
Ref: Núcleo e embutidos<19>-Footnote-53121004
Ref: Núcleo e embutidos<19>-Footnote-63121060
Ref: Núcleo e embutidos<19>-Footnote-73121116
Node: API C<11>3121172
Ref: whatsnew/changelog id1163121308
Ref: 16db3121308
Ref: API C<11>-Footnote-13121632
Ref: API C<11>-Footnote-23121688
Node: Construção<10>3121744
Ref: whatsnew/changelog id1173121848
Ref: 16dd3121848
Ref: Construção<10>-Footnote-13122110
Node: Python 3 13 0 beta 43122166
Ref: whatsnew/changelog python-3-13-0-beta-43122303
Ref: 16df3122303
Node: Testes<13>3122617
Ref: whatsnew/changelog id1183122707
Ref: 16e03122707
Ref: Testes<13>-Footnote-13123648
Ref: Testes<13>-Footnote-23123704
Ref: Testes<13>-Footnote-33123760
Ref: Testes<13>-Footnote-43123816
Node: Biblioteca<24>3123872
Ref: whatsnew/changelog id1193123979
Ref: 16e23123979
Ref: Biblioteca<24>-Footnote-13126641
Ref: Biblioteca<24>-Footnote-23126696
Ref: Biblioteca<24>-Footnote-33126752
Ref: Biblioteca<24>-Footnote-43126808
Ref: Biblioteca<24>-Footnote-53126864
Ref: Biblioteca<24>-Footnote-63126920
Ref: Biblioteca<24>-Footnote-73126975
Ref: Biblioteca<24>-Footnote-83127031
Ref: Biblioteca<24>-Footnote-93127087
Ref: Biblioteca<24>-Footnote-103127143
Ref: Biblioteca<24>-Footnote-113127200
Ref: Biblioteca<24>-Footnote-123127257
Ref: Biblioteca<24>-Footnote-133127314
Ref: Biblioteca<24>-Footnote-143127371
Node: IDLE<11>3127428
Ref: whatsnew/changelog id1203127543
Ref: 16e43127543
Ref: IDLE<11>-Footnote-13127779
Node: Documentação<10>3127834
Ref: whatsnew/changelog id1213127958
Ref: 16e53127958
Ref: Documentação<10>-Footnote-13128338
Ref: Documentação<10>-Footnote-23128394
Node: Núcleo e embutidos<20>3128450
Ref: whatsnew/changelog id1223128575
Ref: 16e83128575
Ref: Núcleo e embutidos<20>-Footnote-13130829
Ref: Núcleo e embutidos<20>-Footnote-23130885
Ref: Núcleo e embutidos<20>-Footnote-33130941
Ref: Núcleo e embutidos<20>-Footnote-43130997
Ref: Núcleo e embutidos<20>-Footnote-53131053
Ref: Núcleo e embutidos<20>-Footnote-63131109
Ref: Núcleo e embutidos<20>-Footnote-73131165
Ref: Núcleo e embutidos<20>-Footnote-83131221
Ref: Núcleo e embutidos<20>-Footnote-93131277
Ref: Núcleo e embutidos<20>-Footnote-103131333
Ref: Núcleo e embutidos<20>-Footnote-113131390
Ref: Núcleo e embutidos<20>-Footnote-123131447
Ref: Núcleo e embutidos<20>-Footnote-133131504
Ref: Núcleo e embutidos<20>-Footnote-143131561
Node: API C<12>3131618
Ref: whatsnew/changelog id1233131741
Ref: 16e93131741
Ref: API C<12>-Footnote-13133001
Ref: API C<12>-Footnote-23133056
Ref: API C<12>-Footnote-33133112
Ref: API C<12>-Footnote-43133168
Node: Construção<11>3133224
Ref: whatsnew/changelog id1243133315
Ref: 16ed3133315
Ref: Construção<11>-Footnote-13134271
Ref: Construção<11>-Footnote-23134327
Ref: Construção<11>-Footnote-33134383
Ref: Construção<11>-Footnote-43134439
Ref: Construção<11>-Footnote-53134495
Ref: Construção<11>-Footnote-63134551
Ref: Construção<11>-Footnote-73134607
Node: Python 3 13 0 beta 33134663
Ref: whatsnew/changelog python-3-13-0-beta-33134787
Ref: 16ee3134787
Node: Núcleo e embutidos<21>3135101
Ref: whatsnew/changelog id1253135204
Ref: 16ef3135204
Ref: Núcleo e embutidos<21>-Footnote-13137332
Ref: Núcleo e embutidos<21>-Footnote-23137388
Ref: Núcleo e embutidos<21>-Footnote-33137444
Ref: Núcleo e embutidos<21>-Footnote-43137500
Ref: Núcleo e embutidos<21>-Footnote-53137556
Ref: Núcleo e embutidos<21>-Footnote-63137612
Ref: Núcleo e embutidos<21>-Footnote-73137668
Ref: Núcleo e embutidos<21>-Footnote-83137724
Ref: Núcleo e embutidos<21>-Footnote-93137780
Ref: Núcleo e embutidos<21>-Footnote-103137836
Node: Biblioteca<25>3137893
Ref: whatsnew/changelog id1263138028
Ref: 16f03138028
Ref: Biblioteca<25>-Footnote-13138312
Node: Núcleo e embutidos<22>3138368
Ref: whatsnew/changelog id1273138494
Ref: 16f13138494
Ref: Núcleo e embutidos<22>-Footnote-13139999
Ref: Núcleo e embutidos<22>-Footnote-23140055
Ref: Núcleo e embutidos<22>-Footnote-33140111
Ref: Núcleo e embutidos<22>-Footnote-43140167
Ref: Núcleo e embutidos<22>-Footnote-53140222
Ref: Núcleo e embutidos<22>-Footnote-63140278
Ref: Núcleo e embutidos<22>-Footnote-73140334
Ref: Núcleo e embutidos<22>-Footnote-83140390
Ref: Núcleo e embutidos<22>-Footnote-93140446
Ref: Núcleo e embutidos<22>-Footnote-103140502
Node: Biblioteca<26>3140568
Ref: whatsnew/changelog id1283140696
Ref: 16f23140696
Ref: Biblioteca<26>-Footnote-13146664
Ref: Biblioteca<26>-Footnote-23146720
Ref: Biblioteca<26>-Footnote-33146776
Ref: Biblioteca<26>-Footnote-43146832
Ref: Biblioteca<26>-Footnote-53146888
Ref: Biblioteca<26>-Footnote-63146944
Ref: Biblioteca<26>-Footnote-73147000
Ref: Biblioteca<26>-Footnote-83147056
Ref: Biblioteca<26>-Footnote-93147112
Ref: Biblioteca<26>-Footnote-103147168
Ref: Biblioteca<26>-Footnote-113147225
Ref: Biblioteca<26>-Footnote-123147282
Ref: Biblioteca<26>-Footnote-133147339
Ref: Biblioteca<26>-Footnote-143147396
Ref: Biblioteca<26>-Footnote-153147453
Ref: Biblioteca<26>-Footnote-163147510
Ref: Biblioteca<26>-Footnote-173147566
Ref: Biblioteca<26>-Footnote-183147623
Ref: Biblioteca<26>-Footnote-193147680
Ref: Biblioteca<26>-Footnote-203147737
Ref: Biblioteca<26>-Footnote-213147794
Ref: Biblioteca<26>-Footnote-223147837
Ref: Biblioteca<26>-Footnote-233147894
Ref: Biblioteca<26>-Footnote-243147951
Ref: Biblioteca<26>-Footnote-253148008
Ref: Biblioteca<26>-Footnote-263148064
Ref: Biblioteca<26>-Footnote-273148121
Ref: Biblioteca<26>-Footnote-283148178
Ref: Biblioteca<26>-Footnote-293148235
Ref: Biblioteca<26>-Footnote-303148292
Ref: Biblioteca<26>-Footnote-313148349
Ref: Biblioteca<26>-Footnote-323148406
Ref: Biblioteca<26>-Footnote-333148462
Ref: Biblioteca<26>-Footnote-343148518
Ref: Biblioteca<26>-Footnote-353148575
Ref: Biblioteca<26>-Footnote-363148632
Node: Construção<12>3148689
Ref: whatsnew/changelog id1293148803
Ref: 16fb3148803
Ref: Construção<12>-Footnote-13149404
Ref: Construção<12>-Footnote-23149460
Ref: Construção<12>-Footnote-33149516
Ref: Construção<12>-Footnote-43149572
Node: API C<13>3149628
Ref: whatsnew/changelog id1303149719
Ref: 16fc3149719
Ref: API C<13>-Footnote-13150905
Ref: API C<13>-Footnote-23150961
Ref: API C<13>-Footnote-33151017
Ref: API C<13>-Footnote-43151073
Ref: API C<13>-Footnote-53151129
Ref: API C<13>-Footnote-63151185
Node: Python 3 13 0 beta 23151241
Ref: whatsnew/changelog python-3-13-0-beta-23151365
Ref: 16ff3151365
Node: Segurança<12>3151677
Ref: whatsnew/changelog id1313151780
Ref: 17003151780
Ref: Segurança<12>-Footnote-13152338
Ref: Segurança<12>-Footnote-23152394
Ref: Segurança<12>-Footnote-33152450
Node: Núcleo e embutidos<23>3152505
Ref: whatsnew/changelog id1323152631
Ref: 17013152631
Ref: Núcleo e embutidos<23>-Footnote-13155797
Ref: Núcleo e embutidos<23>-Footnote-23155853
Ref: Núcleo e embutidos<23>-Footnote-33155909
Ref: Núcleo e embutidos<23>-Footnote-43155965
Ref: Núcleo e embutidos<23>-Footnote-53156021
Ref: Núcleo e embutidos<23>-Footnote-63156077
Ref: Núcleo e embutidos<23>-Footnote-73156133
Ref: Núcleo e embutidos<23>-Footnote-83156189
Ref: Núcleo e embutidos<23>-Footnote-93156245
Ref: Núcleo e embutidos<23>-Footnote-103156301
Ref: Núcleo e embutidos<23>-Footnote-113156358
Ref: Núcleo e embutidos<23>-Footnote-123156415
Ref: Núcleo e embutidos<23>-Footnote-133156472
Ref: Núcleo e embutidos<23>-Footnote-143156529
Ref: Núcleo e embutidos<23>-Footnote-153156586
Ref: Núcleo e embutidos<23>-Footnote-163156643
Ref: Núcleo e embutidos<23>-Footnote-173156700
Ref: Núcleo e embutidos<23>-Footnote-183156757
Ref: Núcleo e embutidos<23>-Footnote-193156814
Node: Biblioteca<27>3156871
Ref: whatsnew/changelog id1333156993
Ref: 17023156993
Ref: Biblioteca<27>-Footnote-13164381
Ref: Biblioteca<27>-Footnote-23164437
Ref: Biblioteca<27>-Footnote-33164493
Ref: Biblioteca<27>-Footnote-43164549
Ref: Biblioteca<27>-Footnote-53164605
Ref: Biblioteca<27>-Footnote-63164660
Ref: Biblioteca<27>-Footnote-73164715
Ref: Biblioteca<27>-Footnote-83164771
Ref: Biblioteca<27>-Footnote-93164826
Ref: Biblioteca<27>-Footnote-103164882
Ref: Biblioteca<27>-Footnote-113164939
Ref: Biblioteca<27>-Footnote-123164996
Ref: Biblioteca<27>-Footnote-133165053
Ref: Biblioteca<27>-Footnote-143165110
Ref: Biblioteca<27>-Footnote-153165167
Ref: Biblioteca<27>-Footnote-163165224
Ref: Biblioteca<27>-Footnote-173165281
Ref: Biblioteca<27>-Footnote-183165338
Ref: Biblioteca<27>-Footnote-193165395
Ref: Biblioteca<27>-Footnote-203165452
Ref: Biblioteca<27>-Footnote-213165509
Ref: Biblioteca<27>-Footnote-223165565
Ref: Biblioteca<27>-Footnote-233165622
Ref: Biblioteca<27>-Footnote-243165679
Ref: Biblioteca<27>-Footnote-253165736
Ref: Biblioteca<27>-Footnote-263165793
Ref: Biblioteca<27>-Footnote-273165850
Ref: Biblioteca<27>-Footnote-283165907
Ref: Biblioteca<27>-Footnote-293165964
Ref: Biblioteca<27>-Footnote-303166021
Ref: Biblioteca<27>-Footnote-313166078
Ref: Biblioteca<27>-Footnote-323166135
Ref: Biblioteca<27>-Footnote-333166192
Ref: Biblioteca<27>-Footnote-343166275
Ref: Biblioteca<27>-Footnote-353166332
Ref: Biblioteca<27>-Footnote-363166389
Ref: Biblioteca<27>-Footnote-373166445
Ref: Biblioteca<27>-Footnote-383166502
Ref: Biblioteca<27>-Footnote-393166558
Ref: Biblioteca<27>-Footnote-403166624
Node: Testes<14>3166680
Ref: whatsnew/changelog id1343166795
Ref: 17073166795
Ref: Testes<14>-Footnote-13167006
Node: Construção<13>3167062
Ref: whatsnew/changelog id1353167174
Ref: 17083167174
Ref: Construção<13>-Footnote-13168360
Ref: Construção<13>-Footnote-23168416
Ref: Construção<13>-Footnote-33168472
Ref: Construção<13>-Footnote-43168528
Ref: Construção<13>-Footnote-53168584
Node: Windows<11>3168640
Ref: whatsnew/changelog id1363168751
Ref: 17093168751
Ref: Windows<11>-Footnote-13169807
Ref: Windows<11>-Footnote-23169863
Ref: Windows<11>-Footnote-33169919
Ref: Windows<11>-Footnote-43169975
Ref: Windows<11>-Footnote-53170031
Ref: Windows<11>-Footnote-63170087
Ref: Windows<11>-Footnote-73170143
Node: API C<14>3170199
Ref: whatsnew/changelog id1373170285
Ref: 170a3170285
Ref: API C<14>-Footnote-13171768
Ref: API C<14>-Footnote-23171824
Ref: API C<14>-Footnote-33171880
Ref: API C<14>-Footnote-43171936
Ref: API C<14>-Footnote-53171992
Ref: API C<14>-Footnote-63172048
Node: Python 3 13 0 beta 13172104
Ref: whatsnew/changelog python-3-13-0-beta-13172229
Ref: 170d3172229
Node: Segurança<13>3172672
Ref: whatsnew/changelog id1383172775
Ref: 170e3172775
Ref: Segurança<13>-Footnote-13173206
Ref: Segurança<13>-Footnote-23173262
Node: Núcleo e embutidos<24>3173318
Ref: whatsnew/changelog id1393173444
Ref: 170f3173444
Ref: Núcleo e embutidos<24>-Footnote-13174739
Ref: Núcleo e embutidos<24>-Footnote-23174795
Ref: Núcleo e embutidos<24>-Footnote-33174851
Node: Biblioteca<28>3174907
Ref: whatsnew/changelog id1403175042
Ref: 17103175042
Ref: Biblioteca<28>-Footnote-13175382
Node: Núcleo e embutidos<25>3175437
Ref: whatsnew/changelog id1413175563
Ref: 17113175563
Ref: Núcleo e embutidos<25>-Footnote-13184257
Ref: Núcleo e embutidos<25>-Footnote-23184313
Ref: Núcleo e embutidos<25>-Footnote-33184369
Ref: Núcleo e embutidos<25>-Footnote-43184425
Ref: Núcleo e embutidos<25>-Footnote-53184481
Ref: Núcleo e embutidos<25>-Footnote-63184537
Ref: Núcleo e embutidos<25>-Footnote-73184593
Ref: Núcleo e embutidos<25>-Footnote-83184649
Ref: Núcleo e embutidos<25>-Footnote-93184705
Ref: Núcleo e embutidos<25>-Footnote-103184761
Ref: Núcleo e embutidos<25>-Footnote-113184818
Ref: Núcleo e embutidos<25>-Footnote-123184874
Ref: Núcleo e embutidos<25>-Footnote-133184931
Ref: Núcleo e embutidos<25>-Footnote-143184988
Ref: Núcleo e embutidos<25>-Footnote-153185045
Ref: Núcleo e embutidos<25>-Footnote-163185102
Ref: Núcleo e embutidos<25>-Footnote-173185159
Ref: Núcleo e embutidos<25>-Footnote-183185216
Ref: Núcleo e embutidos<25>-Footnote-193185273
Ref: Núcleo e embutidos<25>-Footnote-203185330
Ref: Núcleo e embutidos<25>-Footnote-213185387
Ref: Núcleo e embutidos<25>-Footnote-223185444
Ref: Núcleo e embutidos<25>-Footnote-233185501
Ref: Núcleo e embutidos<25>-Footnote-243185558
Ref: Núcleo e embutidos<25>-Footnote-253185615
Ref: Núcleo e embutidos<25>-Footnote-263185672
Ref: Núcleo e embutidos<25>-Footnote-273185729
Ref: Núcleo e embutidos<25>-Footnote-283185786
Ref: Núcleo e embutidos<25>-Footnote-293185843
Ref: Núcleo e embutidos<25>-Footnote-303185900
Ref: Núcleo e embutidos<25>-Footnote-313185957
Ref: Núcleo e embutidos<25>-Footnote-323186014
Ref: Núcleo e embutidos<25>-Footnote-333186071
Ref: Núcleo e embutidos<25>-Footnote-343186114
Ref: Núcleo e embutidos<25>-Footnote-353186171
Ref: Núcleo e embutidos<25>-Footnote-363186228
Ref: Núcleo e embutidos<25>-Footnote-373186285
Ref: Núcleo e embutidos<25>-Footnote-383186342
Ref: Núcleo e embutidos<25>-Footnote-393186399
Ref: Núcleo e embutidos<25>-Footnote-403186442
Ref: Núcleo e embutidos<25>-Footnote-413186498
Ref: Núcleo e embutidos<25>-Footnote-423186555
Ref: Núcleo e embutidos<25>-Footnote-433186611
Ref: Núcleo e embutidos<25>-Footnote-443186667
Node: Biblioteca<29>3186724
Ref: whatsnew/changelog id1423186854
Ref: 17143186854
Ref: Biblioteca<29>-Footnote-13204650
Ref: Biblioteca<29>-Footnote-23204706
Ref: Biblioteca<29>-Footnote-33204762
Ref: Biblioteca<29>-Footnote-43204818
Ref: Biblioteca<29>-Footnote-53204874
Ref: Biblioteca<29>-Footnote-63204930
Ref: Biblioteca<29>-Footnote-73204986
Ref: Biblioteca<29>-Footnote-83205042
Ref: Biblioteca<29>-Footnote-93205098
Ref: Biblioteca<29>-Footnote-103205154
Ref: Biblioteca<29>-Footnote-113205211
Ref: Biblioteca<29>-Footnote-123205268
Ref: Biblioteca<29>-Footnote-133205325
Ref: Biblioteca<29>-Footnote-143205382
Ref: Biblioteca<29>-Footnote-153205425
Ref: Biblioteca<29>-Footnote-163205482
Ref: Biblioteca<29>-Footnote-173205539
Ref: Biblioteca<29>-Footnote-183205596
Ref: Biblioteca<29>-Footnote-193205653
Ref: Biblioteca<29>-Footnote-203205710
Ref: Biblioteca<29>-Footnote-213205767
Ref: Biblioteca<29>-Footnote-223205824
Ref: Biblioteca<29>-Footnote-233205881
Ref: Biblioteca<29>-Footnote-243205938
Ref: Biblioteca<29>-Footnote-253205994
Ref: Biblioteca<29>-Footnote-263206051
Ref: Biblioteca<29>-Footnote-273206108
Ref: Biblioteca<29>-Footnote-283206165
Ref: Biblioteca<29>-Footnote-293206222
Ref: Biblioteca<29>-Footnote-303206279
Ref: Biblioteca<29>-Footnote-313206336
Ref: Biblioteca<29>-Footnote-323206379
Ref: Biblioteca<29>-Footnote-333206436
Ref: Biblioteca<29>-Footnote-343206493
Ref: Biblioteca<29>-Footnote-353206550
Ref: Biblioteca<29>-Footnote-363206606
Ref: Biblioteca<29>-Footnote-373206666
Ref: Biblioteca<29>-Footnote-383206722
Ref: Biblioteca<29>-Footnote-393206779
Ref: Biblioteca<29>-Footnote-403206836
Ref: Biblioteca<29>-Footnote-413206893
Ref: Biblioteca<29>-Footnote-423206949
Ref: Biblioteca<29>-Footnote-433207005
Ref: Biblioteca<29>-Footnote-443207048
Ref: Biblioteca<29>-Footnote-453207105
Ref: Biblioteca<29>-Footnote-463207162
Ref: Biblioteca<29>-Footnote-473207219
Ref: Biblioteca<29>-Footnote-483207276
Ref: Biblioteca<29>-Footnote-493207333
Ref: Biblioteca<29>-Footnote-503207390
Ref: Biblioteca<29>-Footnote-513207447
Ref: Biblioteca<29>-Footnote-523207504
Ref: Biblioteca<29>-Footnote-533207561
Ref: Biblioteca<29>-Footnote-543207618
Ref: Biblioteca<29>-Footnote-553207675
Ref: Biblioteca<29>-Footnote-563207732
Ref: Biblioteca<29>-Footnote-573207789
Ref: Biblioteca<29>-Footnote-583207846
Ref: Biblioteca<29>-Footnote-593207903
Ref: Biblioteca<29>-Footnote-603207960
Ref: Biblioteca<29>-Footnote-613208017
Ref: Biblioteca<29>-Footnote-623208074
Ref: Biblioteca<29>-Footnote-633208117
Ref: Biblioteca<29>-Footnote-643208174
Ref: Biblioteca<29>-Footnote-653208231
Ref: Biblioteca<29>-Footnote-663208288
Ref: Biblioteca<29>-Footnote-673208345
Ref: Biblioteca<29>-Footnote-683208388
Ref: Biblioteca<29>-Footnote-693208444
Ref: Biblioteca<29>-Footnote-703208500
Ref: Biblioteca<29>-Footnote-713208557
Ref: Biblioteca<29>-Footnote-723208614
Ref: Biblioteca<29>-Footnote-733208671
Ref: Biblioteca<29>-Footnote-743208727
Ref: Biblioteca<29>-Footnote-753208783
Ref: Biblioteca<29>-Footnote-763208840
Ref: Biblioteca<29>-Footnote-773208897
Ref: Biblioteca<29>-Footnote-783208954
Ref: Biblioteca<29>-Footnote-793209011
Ref: Biblioteca<29>-Footnote-803209067
Ref: Biblioteca<29>-Footnote-813209124
Ref: Biblioteca<29>-Footnote-823209181
Ref: Biblioteca<29>-Footnote-833209237
Ref: Biblioteca<29>-Footnote-843209294
Ref: Biblioteca<29>-Footnote-853209351
Ref: Biblioteca<29>-Footnote-863209407
Ref: Biblioteca<29>-Footnote-873209463
Ref: Biblioteca<29>-Footnote-883209529
Ref: Biblioteca<29>-Footnote-893209595
Ref: Biblioteca<29>-Footnote-903209661
Ref: Biblioteca<29>-Footnote-913209727
Node: Documentação<11>3209793
Ref: whatsnew/changelog id1433209916
Ref: 17233209916
Ref: Documentação<11>-Footnote-13210104
Node: Construção<14>3210160
Ref: whatsnew/changelog id1443210280
Ref: 17243210280
Ref: Construção<14>-Footnote-13211324
Ref: Construção<14>-Footnote-23211380
Ref: Construção<14>-Footnote-33211436
Ref: Construção<14>-Footnote-43211492
Ref: Construção<14>-Footnote-53211548
Ref: Construção<14>-Footnote-63211604
Node: Windows<12>3211660
Ref: whatsnew/changelog id1453211770
Ref: 17253211770
Ref: Windows<12>-Footnote-13212927
Ref: Windows<12>-Footnote-23212983
Ref: Windows<12>-Footnote-33213039
Ref: Windows<12>-Footnote-43213095
Ref: Windows<12>-Footnote-53213151
Ref: Windows<12>-Footnote-63213207
Ref: Windows<12>-Footnote-73213262
Node: macOS<8>3213318
Ref: whatsnew/changelog id1463213420
Ref: 17263213420
Ref: macOS<8>-Footnote-13213927
Ref: macOS<8>-Footnote-23213983
Ref: macOS<8>-Footnote-33214039
Ref: macOS<8>-Footnote-43214095
Node: IDLE<12>3214150
Ref: whatsnew/changelog id1473214250
Ref: 17273214250
Ref: IDLE<12>-Footnote-13214413
Node: API C<15>3214478
Ref: whatsnew/changelog id1483214561
Ref: 17283214561
Ref: API C<15>-Footnote-13215936
Ref: API C<15>-Footnote-23215992
Ref: API C<15>-Footnote-33216048
Ref: API C<15>-Footnote-43216104
Ref: API C<15>-Footnote-53216160
Ref: API C<15>-Footnote-63216216
Ref: API C<15>-Footnote-73216271
Node: Python 3 13 0 alpha 63216327
Ref: whatsnew/changelog python-3-13-0-alpha-63216453
Ref: 17303216453
Node: Núcleo e embutidos<26>3216853
Ref: whatsnew/changelog id1493216957
Ref: 17313216957
Ref: Núcleo e embutidos<26>-Footnote-13222043
Ref: Núcleo e embutidos<26>-Footnote-23222099
Ref: Núcleo e embutidos<26>-Footnote-33222155
Ref: Núcleo e embutidos<26>-Footnote-43222211
Ref: Núcleo e embutidos<26>-Footnote-53222267
Ref: Núcleo e embutidos<26>-Footnote-63222323
Ref: Núcleo e embutidos<26>-Footnote-73222379
Ref: Núcleo e embutidos<26>-Footnote-83222435
Ref: Núcleo e embutidos<26>-Footnote-93222490
Ref: Núcleo e embutidos<26>-Footnote-103222537
Ref: Núcleo e embutidos<26>-Footnote-113222594
Ref: Núcleo e embutidos<26>-Footnote-123222651
Ref: Núcleo e embutidos<26>-Footnote-133222708
Ref: Núcleo e embutidos<26>-Footnote-143222765
Ref: Núcleo e embutidos<26>-Footnote-153222822
Ref: Núcleo e embutidos<26>-Footnote-163222879
Ref: Núcleo e embutidos<26>-Footnote-173222936
Ref: Núcleo e embutidos<26>-Footnote-183222993
Ref: Núcleo e embutidos<26>-Footnote-193223050
Node: Biblioteca<30>3223107
Ref: whatsnew/changelog id1503223243
Ref: 17353223243
Ref: Biblioteca<30>-Footnote-13223614
Ref: Biblioteca<30>-Footnote-23223670
Node: Núcleo e embutidos<27>3223725
Ref: whatsnew/changelog id1513223852
Ref: 17363223852
Ref: Núcleo e embutidos<27>-Footnote-13224089
Node: Biblioteca<31>3224154
Ref: whatsnew/changelog id1523224285
Ref: 17373224285
Ref: Biblioteca<31>-Footnote-13235818
Ref: Biblioteca<31>-Footnote-23235874
Ref: Biblioteca<31>-Footnote-33235930
Ref: Biblioteca<31>-Footnote-43235986
Ref: Biblioteca<31>-Footnote-53236042
Ref: Biblioteca<31>-Footnote-63236098
Ref: Biblioteca<31>-Footnote-73236154
Ref: Biblioteca<31>-Footnote-83236210
Ref: Biblioteca<31>-Footnote-93236266
Ref: Biblioteca<31>-Footnote-103236322
Ref: Biblioteca<31>-Footnote-113236379
Ref: Biblioteca<31>-Footnote-123236435
Ref: Biblioteca<31>-Footnote-133236491
Ref: Biblioteca<31>-Footnote-143236548
Ref: Biblioteca<31>-Footnote-153236605
Ref: Biblioteca<31>-Footnote-163236661
Ref: Biblioteca<31>-Footnote-173236718
Ref: Biblioteca<31>-Footnote-183236775
Ref: Biblioteca<31>-Footnote-193236832
Ref: Biblioteca<31>-Footnote-203236889
Ref: Biblioteca<31>-Footnote-213236946
Ref: Biblioteca<31>-Footnote-223237003
Ref: Biblioteca<31>-Footnote-233237060
Ref: Biblioteca<31>-Footnote-243237117
Ref: Biblioteca<31>-Footnote-253237174
Ref: Biblioteca<31>-Footnote-263237231
Ref: Biblioteca<31>-Footnote-273237287
Ref: Biblioteca<31>-Footnote-283237344
Ref: Biblioteca<31>-Footnote-293237401
Ref: Biblioteca<31>-Footnote-303237457
Ref: Biblioteca<31>-Footnote-313237514
Ref: Biblioteca<31>-Footnote-323237571
Ref: Biblioteca<31>-Footnote-333237627
Ref: Biblioteca<31>-Footnote-343237684
Ref: Biblioteca<31>-Footnote-353237752
Ref: Biblioteca<31>-Footnote-363237808
Ref: Biblioteca<31>-Footnote-373237865
Ref: Biblioteca<31>-Footnote-383237922
Ref: Biblioteca<31>-Footnote-393237979
Ref: Biblioteca<31>-Footnote-403238036
Ref: Biblioteca<31>-Footnote-413238092
Ref: Biblioteca<31>-Footnote-423238148
Ref: Biblioteca<31>-Footnote-433238204
Ref: Biblioteca<31>-Footnote-443238261
Ref: Biblioteca<31>-Footnote-453238318
Ref: Biblioteca<31>-Footnote-463238375
Ref: Biblioteca<31>-Footnote-473238432
Ref: Biblioteca<31>-Footnote-483238488
Ref: Biblioteca<31>-Footnote-493238544
Ref: Biblioteca<31>-Footnote-503238601
Ref: Biblioteca<31>-Footnote-513238658
Ref: Biblioteca<31>-Footnote-523238715
Ref: Biblioteca<31>-Footnote-533238772
Ref: Biblioteca<31>-Footnote-543238829
Ref: Biblioteca<31>-Footnote-553238885
Ref: Biblioteca<31>-Footnote-563238942
Ref: Biblioteca<31>-Footnote-573238999
Ref: Biblioteca<31>-Footnote-583239056
Ref: Biblioteca<31>-Footnote-593239112
Ref: Biblioteca<31>-Footnote-603239168
Ref: Biblioteca<31>-Footnote-613239234
Ref: Biblioteca<31>-Footnote-623239300
Ref: Biblioteca<31>-Footnote-633239366
Ref: Biblioteca<31>-Footnote-643239422
Node: Documentação<12>3239488
Ref: whatsnew/changelog id1533239606
Ref: 173f3239606
Ref: Documentação<12>-Footnote-13240069
Ref: Documentação<12>-Footnote-23240125
Ref: Documentação<12>-Footnote-33240181
Node: Testes<15>3240236
Ref: whatsnew/changelog id1543240356
Ref: 17403240356
Ref: Testes<15>-Footnote-13241586
Ref: Testes<15>-Footnote-23241641
Ref: Testes<15>-Footnote-33241697
Ref: Testes<15>-Footnote-43241753
Ref: Testes<15>-Footnote-53241809
Ref: Testes<15>-Footnote-63241865
Ref: Testes<15>-Footnote-73241921
Node: Construção<15>3241977
Ref: whatsnew/changelog id1553242090
Ref: 17413242090
Ref: Construção<15>-Footnote-13242433
Ref: Construção<15>-Footnote-23242489
Ref: Construção<15>-Footnote-33242545
Node: Windows<13>3242600
Ref: whatsnew/changelog id1563242712
Ref: 17423242712
Ref: Windows<13>-Footnote-13244253
Ref: Windows<13>-Footnote-23244309
Ref: Windows<13>-Footnote-33244365
Ref: Windows<13>-Footnote-43244420
Ref: Windows<13>-Footnote-53244476
Ref: Windows<13>-Footnote-63244531
Node: API C<16>3244587
Ref: whatsnew/changelog id1573244674
Ref: 17443244674
Ref: API C<16>-Footnote-13248190
Ref: API C<16>-Footnote-23248246
Ref: API C<16>-Footnote-33248288
Ref: API C<16>-Footnote-43248343
Ref: API C<16>-Footnote-53248399
Ref: API C<16>-Footnote-63248455
Ref: API C<16>-Footnote-73248511
Ref: API C<16>-Footnote-83248567
Ref: API C<16>-Footnote-93248623
Ref: API C<16>-Footnote-103248679
Ref: API C<16>-Footnote-113248736
Ref: API C<16>-Footnote-123248793
Ref: API C<16>-Footnote-133248850
Ref: API C<16>-Footnote-143248907
Ref: API C<16>-Footnote-153248950
Ref: API C<16>-Footnote-163249007
Ref: API C<16>-Footnote-173249064
Ref: API C<16>-Footnote-183249120
Ref: API C<16>-Footnote-193249177
Node: Python 3 13 0 alpha 53249234
Ref: whatsnew/changelog python-3-13-0-alpha-53249361
Ref: 17473249361
Node: Segurança<14>3249949
Ref: whatsnew/changelog id1583250053
Ref: 17483250053
Ref: Segurança<14>-Footnote-13250907
Ref: Segurança<14>-Footnote-23250963
Ref: Segurança<14>-Footnote-33251019
Node: Núcleo e embutidos<28>3251075
Ref: whatsnew/changelog id1593251202
Ref: 17493251202
Ref: Núcleo e embutidos<28>-Footnote-13252758
Ref: Núcleo e embutidos<28>-Footnote-23252814
Ref: Núcleo e embutidos<28>-Footnote-33252870
Ref: Núcleo e embutidos<28>-Footnote-43252912
Ref: Núcleo e embutidos<28>-Footnote-53252968
Ref: Núcleo e embutidos<28>-Footnote-63253024
Ref: Núcleo e embutidos<28>-Footnote-73253080
Ref: Núcleo e embutidos<28>-Footnote-83253136
Ref: Núcleo e embutidos<28>-Footnote-93253192
Ref: Núcleo e embutidos<28>-Footnote-103253248
Ref: Núcleo e embutidos<28>-Footnote-113253305
Ref: Núcleo e embutidos<28>-Footnote-123253362
Node: Biblioteca<32>3253419
Ref: whatsnew/changelog id1603253555
Ref: 174a3253555
Ref: Biblioteca<32>-Footnote-13253831
Node: Núcleo e embutidos<29>3253887
Ref: whatsnew/changelog id1613254014
Ref: 174b3254014
Ref: Núcleo e embutidos<29>-Footnote-13254307
Node: Biblioteca<33>3254363
Ref: whatsnew/changelog id1623254499
Ref: 174c3254499
Ref: Biblioteca<33>-Footnote-13254808
Node: Núcleo e embutidos<30>3254864
Ref: whatsnew/changelog id1633254991
Ref: 174d3254991
Ref: Núcleo e embutidos<30>-Footnote-13255900
Ref: Núcleo e embutidos<30>-Footnote-23255956
Ref: Núcleo e embutidos<30>-Footnote-33256012
Node: Biblioteca<34>3256067
Ref: whatsnew/changelog id1643256198
Ref: 174e3256198
Ref: Biblioteca<34>-Footnote-13269169
Ref: Biblioteca<34>-Footnote-23269225
Ref: Biblioteca<34>-Footnote-33269281
Ref: Biblioteca<34>-Footnote-43269337
Ref: Biblioteca<34>-Footnote-53269393
Ref: Biblioteca<34>-Footnote-63269435
Ref: Biblioteca<34>-Footnote-73269491
Ref: Biblioteca<34>-Footnote-83269547
Ref: Biblioteca<34>-Footnote-93269603
Ref: Biblioteca<34>-Footnote-103269658
Ref: Biblioteca<34>-Footnote-113269714
Ref: Biblioteca<34>-Footnote-123269770
Ref: Biblioteca<34>-Footnote-133269826
Ref: Biblioteca<34>-Footnote-143269882
Ref: Biblioteca<34>-Footnote-153269939
Ref: Biblioteca<34>-Footnote-163269996
Ref: Biblioteca<34>-Footnote-173270052
Ref: Biblioteca<34>-Footnote-183270108
Ref: Biblioteca<34>-Footnote-193270165
Ref: Biblioteca<34>-Footnote-203270221
Ref: Biblioteca<34>-Footnote-213270278
Ref: Biblioteca<34>-Footnote-223270335
Ref: Biblioteca<34>-Footnote-233270392
Ref: Biblioteca<34>-Footnote-243270449
Ref: Biblioteca<34>-Footnote-253270505
Ref: Biblioteca<34>-Footnote-263270561
Ref: Biblioteca<34>-Footnote-273270618
Ref: Biblioteca<34>-Footnote-283270675
Ref: Biblioteca<34>-Footnote-293270732
Ref: Biblioteca<34>-Footnote-303270789
Ref: Biblioteca<34>-Footnote-313270846
Ref: Biblioteca<34>-Footnote-323270903
Ref: Biblioteca<34>-Footnote-333270960
Ref: Biblioteca<34>-Footnote-343271017
Ref: Biblioteca<34>-Footnote-353271074
Ref: Biblioteca<34>-Footnote-363271131
Ref: Biblioteca<34>-Footnote-373271174
Ref: Biblioteca<34>-Footnote-383271231
Ref: Biblioteca<34>-Footnote-393271288
Ref: Biblioteca<34>-Footnote-403271345
Ref: Biblioteca<34>-Footnote-413271402
Ref: Biblioteca<34>-Footnote-423271459
Ref: Biblioteca<34>-Footnote-433271516
Ref: Biblioteca<34>-Footnote-443271573
Ref: Biblioteca<34>-Footnote-453271630
Ref: Biblioteca<34>-Footnote-463271687
Ref: Biblioteca<34>-Footnote-473271744
Ref: Biblioteca<34>-Footnote-483271800
Ref: Biblioteca<34>-Footnote-493271857
Ref: Biblioteca<34>-Footnote-503271914
Ref: Biblioteca<34>-Footnote-513271970
Ref: Biblioteca<34>-Footnote-523272026
Ref: Biblioteca<34>-Footnote-533272083
Ref: Biblioteca<34>-Footnote-543272139
Ref: Biblioteca<34>-Footnote-553272196
Ref: Biblioteca<34>-Footnote-563272252
Ref: Biblioteca<34>-Footnote-573272309
Ref: Biblioteca<34>-Footnote-583272366
Ref: Biblioteca<34>-Footnote-593272422
Ref: Biblioteca<34>-Footnote-603272478
Ref: Biblioteca<34>-Footnote-613272534
Ref: Biblioteca<34>-Footnote-623272600
Ref: Biblioteca<34>-Footnote-633272666
Ref: Biblioteca<34>-Footnote-643272732
Ref: Biblioteca<34>-Footnote-653272798
Ref: Biblioteca<34>-Footnote-663272864
Ref: Biblioteca<34>-Footnote-673272930
Node: Documentação<13>3272996
Ref: whatsnew/changelog id1653273114
Ref: 17573273114
Ref: Documentação<13>-Footnote-13273389
Ref: Documentação<13>-Footnote-23273445
Ref: Documentação<13>-Footnote-33273501
Node: Testes<16>3273557
Ref: whatsnew/changelog id1663273677
Ref: 17583273677
Ref: Testes<16>-Footnote-13275062
Ref: Testes<16>-Footnote-23275117
Ref: Testes<16>-Footnote-33275172
Ref: Testes<16>-Footnote-43275228
Ref: Testes<16>-Footnote-53275284
Ref: Testes<16>-Footnote-63275340
Ref: Testes<16>-Footnote-73275396
Ref: Testes<16>-Footnote-83275452
Ref: Testes<16>-Footnote-93275508
Node: Construção<16>3275564
Ref: whatsnew/changelog id1673275677
Ref: 17593275677
Ref: Construção<16>-Footnote-13276775
Ref: Construção<16>-Footnote-23276831
Ref: Construção<16>-Footnote-33276886
Ref: Construção<16>-Footnote-43276942
Ref: Construção<16>-Footnote-53276997
Ref: Construção<16>-Footnote-63277053
Ref: Construção<16>-Footnote-73277109
Ref: Construção<16>-Footnote-83277165
Ref: Construção<16>-Footnote-93277221
Node: Windows<14>3277277
Ref: whatsnew/changelog id1683277388
Ref: 175a3277388
Ref: Windows<14>-Footnote-13278598
Ref: Windows<14>-Footnote-23278654
Ref: Windows<14>-Footnote-33278710
Ref: Windows<14>-Footnote-43278766
Node: macOS<9>3278822
Ref: whatsnew/changelog id1693278925
Ref: 175b3278925
Ref: macOS<9>-Footnote-13279065
Node: IDLE<13>3279121
Ref: whatsnew/changelog id1703279233
Ref: 175c3279233
Ref: IDLE<13>-Footnote-13279459
Node: Ferramentas/Demos<9>3279514
Ref: whatsnew/changelog id1713279627
Ref: 175d3279627
Ref: Ferramentas/Demos<9>-Footnote-13279898
Ref: Ferramentas/Demos<9>-Footnote-23279954
Node: API C<17>3280019
Ref: whatsnew/changelog id1723280115
Ref: 175e3280115
Ref: API C<17>-Footnote-13280720
Ref: API C<17>-Footnote-23280776
Node: Python 3 13 0 alpha 43280832
Ref: whatsnew/changelog python-3-13-0-alpha-43280959
Ref: 17633280959
Node: Segurança<15>3281393
Ref: whatsnew/changelog id1733281497
Ref: 17643281497
Ref: Segurança<15>-Footnote-13281783
Ref: Segurança<15>-Footnote-23281839
Node: Núcleo e embutidos<31>3281895
Ref: whatsnew/changelog id1743282022
Ref: 17653282022
Ref: Núcleo e embutidos<31>-Footnote-13287873
Ref: Núcleo e embutidos<31>-Footnote-23287929
Ref: Núcleo e embutidos<31>-Footnote-33287985
Ref: Núcleo e embutidos<31>-Footnote-43288041
Ref: Núcleo e embutidos<31>-Footnote-53288097
Ref: Núcleo e embutidos<31>-Footnote-63288153
Ref: Núcleo e embutidos<31>-Footnote-73288209
Ref: Núcleo e embutidos<31>-Footnote-83288265
Ref: Núcleo e embutidos<31>-Footnote-93288321
Ref: Núcleo e embutidos<31>-Footnote-103288377
Ref: Núcleo e embutidos<31>-Footnote-113288433
Ref: Núcleo e embutidos<31>-Footnote-123288490
Ref: Núcleo e embutidos<31>-Footnote-133288547
Ref: Núcleo e embutidos<31>-Footnote-143288604
Ref: Núcleo e embutidos<31>-Footnote-153288661
Ref: Núcleo e embutidos<31>-Footnote-163288718
Ref: Núcleo e embutidos<31>-Footnote-173288775
Ref: Núcleo e embutidos<31>-Footnote-183288832
Ref: Núcleo e embutidos<31>-Footnote-193288889
Ref: Núcleo e embutidos<31>-Footnote-203288946
Ref: Núcleo e embutidos<31>-Footnote-213289003
Ref: Núcleo e embutidos<31>-Footnote-223289060
Ref: Núcleo e embutidos<31>-Footnote-233289117
Ref: Núcleo e embutidos<31>-Footnote-243289174
Ref: Núcleo e embutidos<31>-Footnote-253289231
Ref: Núcleo e embutidos<31>-Footnote-263289288
Ref: Núcleo e embutidos<31>-Footnote-273289345
Ref: Núcleo e embutidos<31>-Footnote-283289408
Ref: Núcleo e embutidos<31>-Footnote-293289465
Ref: Núcleo e embutidos<31>-Footnote-303289521
Node: Biblioteca<35>3289578
Ref: whatsnew/changelog id1753289709
Ref: 176a3289709
Ref: Biblioteca<35>-Footnote-13304984
Ref: Biblioteca<35>-Footnote-23305040
Ref: Biblioteca<35>-Footnote-33305096
Ref: Biblioteca<35>-Footnote-43305152
Ref: Biblioteca<35>-Footnote-53305208
Ref: Biblioteca<35>-Footnote-63305264
Ref: Biblioteca<35>-Footnote-73305320
Ref: Biblioteca<35>-Footnote-83305376
Ref: Biblioteca<35>-Footnote-93305431
Ref: Biblioteca<35>-Footnote-103305486
Ref: Biblioteca<35>-Footnote-113305543
Ref: Biblioteca<35>-Footnote-123305599
Ref: Biblioteca<35>-Footnote-133305656
Ref: Biblioteca<35>-Footnote-143305712
Ref: Biblioteca<35>-Footnote-153305769
Ref: Biblioteca<35>-Footnote-163305826
Ref: Biblioteca<35>-Footnote-173305883
Ref: Biblioteca<35>-Footnote-183305940
Ref: Biblioteca<35>-Footnote-193305997
Ref: Biblioteca<35>-Footnote-203306053
Ref: Biblioteca<35>-Footnote-213306110
Ref: Biblioteca<35>-Footnote-223306167
Ref: Biblioteca<35>-Footnote-233306223
Ref: Biblioteca<35>-Footnote-243306280
Ref: Biblioteca<35>-Footnote-253306337
Ref: Biblioteca<35>-Footnote-263306393
Ref: Biblioteca<35>-Footnote-273306449
Ref: Biblioteca<35>-Footnote-283306505
Ref: Biblioteca<35>-Footnote-293306562
Ref: Biblioteca<35>-Footnote-303306618
Ref: Biblioteca<35>-Footnote-313306675
Ref: Biblioteca<35>-Footnote-323306732
Ref: Biblioteca<35>-Footnote-333306789
Ref: Biblioteca<35>-Footnote-343306846
Ref: Biblioteca<35>-Footnote-353306903
Ref: Biblioteca<35>-Footnote-363306960
Ref: Biblioteca<35>-Footnote-373307016
Ref: Biblioteca<35>-Footnote-383307073
Ref: Biblioteca<35>-Footnote-393307130
Ref: Biblioteca<35>-Footnote-403307187
Ref: Biblioteca<35>-Footnote-413307244
Ref: Biblioteca<35>-Footnote-423307301
Ref: Biblioteca<35>-Footnote-433307345
Ref: Biblioteca<35>-Footnote-443307402
Ref: Biblioteca<35>-Footnote-453307459
Ref: Biblioteca<35>-Footnote-463307516
Ref: Biblioteca<35>-Footnote-473307573
Ref: Biblioteca<35>-Footnote-483307629
Ref: Biblioteca<35>-Footnote-493307686
Ref: Biblioteca<35>-Footnote-503307743
Ref: Biblioteca<35>-Footnote-513307799
Ref: Biblioteca<35>-Footnote-523307856
Ref: Biblioteca<35>-Footnote-533307913
Ref: Biblioteca<35>-Footnote-543307969
Ref: Biblioteca<35>-Footnote-553308026
Ref: Biblioteca<35>-Footnote-563308083
Ref: Biblioteca<35>-Footnote-573308140
Ref: Biblioteca<35>-Footnote-583308196
Ref: Biblioteca<35>-Footnote-593308253
Ref: Biblioteca<35>-Footnote-603308309
Ref: Biblioteca<35>-Footnote-613308366
Ref: Biblioteca<35>-Footnote-623308423
Ref: Biblioteca<35>-Footnote-633308480
Ref: Biblioteca<35>-Footnote-643308536
Ref: Biblioteca<35>-Footnote-653308592
Ref: Biblioteca<35>-Footnote-663308649
Ref: Biblioteca<35>-Footnote-673308706
Ref: Biblioteca<35>-Footnote-683308762
Ref: Biblioteca<35>-Footnote-693308818
Ref: Biblioteca<35>-Footnote-703308875
Ref: Biblioteca<35>-Footnote-713308932
Ref: Biblioteca<35>-Footnote-723308989
Ref: Biblioteca<35>-Footnote-733309045
Ref: Biblioteca<35>-Footnote-743309102
Ref: Biblioteca<35>-Footnote-753309158
Ref: Biblioteca<35>-Footnote-763309215
Ref: Biblioteca<35>-Footnote-773309271
Node: Documentação<14>3309337
Ref: whatsnew/changelog id1763309455
Ref: 177c3309455
Ref: Documentação<14>-Footnote-13310000
Ref: Documentação<14>-Footnote-23310056
Node: Testes<17>3310112
Ref: whatsnew/changelog id1773310232
Ref: 177d3310232
Ref: Testes<17>-Footnote-13310666
Ref: Testes<17>-Footnote-23310722
Node: Construção<17>3310778
Ref: whatsnew/changelog id1783310891
Ref: 177e3310891
Ref: Construção<17>-Footnote-13311488
Ref: Construção<17>-Footnote-23311544
Ref: Construção<17>-Footnote-33311600
Ref: Construção<17>-Footnote-43311656
Node: Windows<15>3311712
Ref: whatsnew/changelog id1793311824
Ref: 177f3311824
Ref: Windows<15>-Footnote-13312675
Ref: Windows<15>-Footnote-23312731
Ref: Windows<15>-Footnote-33312787
Ref: Windows<15>-Footnote-43312843
Ref: Windows<15>-Footnote-53312899
Ref: Windows<15>-Footnote-63312955
Ref: Windows<15>-Footnote-73313011
Node: macOS<10>3313066
Ref: whatsnew/changelog id1803313170
Ref: 17803313170
Ref: macOS<10>-Footnote-13313774
Ref: macOS<10>-Footnote-23313830
Ref: macOS<10>-Footnote-33313886
Ref: macOS<10>-Footnote-43313942
Node: IDLE<14>3313997
Ref: whatsnew/changelog id1813314111
Ref: 17823314111
Ref: IDLE<14>-Footnote-13314487
Ref: IDLE<14>-Footnote-23314542
Node: Ferramentas/Demos<10>3314598
Ref: whatsnew/changelog id1823314712
Ref: 17833314712
Ref: Ferramentas/Demos<10>-Footnote-13315381
Ref: Ferramentas/Demos<10>-Footnote-23315437
Ref: Ferramentas/Demos<10>-Footnote-33315493
Node: API C<18>3315549
Ref: whatsnew/changelog id1833315646
Ref: 17853315646
Ref: API C<18>-Footnote-13317690
Ref: API C<18>-Footnote-23317746
Ref: API C<18>-Footnote-33317802
Ref: API C<18>-Footnote-43317858
Ref: API C<18>-Footnote-53317914
Ref: API C<18>-Footnote-63317970
Ref: API C<18>-Footnote-73318026
Node: Python 3 13 0 alpha 33318082
Ref: whatsnew/changelog python-3-13-0-alpha-33318209
Ref: 17883318209
Node: Segurança<16>3318599
Ref: whatsnew/changelog id1843318703
Ref: 17893318703
Ref: Segurança<16>-Footnote-13319018
Ref: Segurança<16>-Footnote-23319074
Node: Núcleo e embutidos<32>3319130
Ref: whatsnew/changelog id1853319257
Ref: 178a3319257
Ref: Núcleo e embutidos<32>-Footnote-13327535
Ref: Núcleo e embutidos<32>-Footnote-23327591
Ref: Núcleo e embutidos<32>-Footnote-33327647
Ref: Núcleo e embutidos<32>-Footnote-43327703
Ref: Núcleo e embutidos<32>-Footnote-53327759
Ref: Núcleo e embutidos<32>-Footnote-63327814
Ref: Núcleo e embutidos<32>-Footnote-73327856
Ref: Núcleo e embutidos<32>-Footnote-83327912
Ref: Núcleo e embutidos<32>-Footnote-93327968
Ref: Núcleo e embutidos<32>-Footnote-103328024
Ref: Núcleo e embutidos<32>-Footnote-113328081
Ref: Núcleo e embutidos<32>-Footnote-123328137
Ref: Núcleo e embutidos<32>-Footnote-133328194
Ref: Núcleo e embutidos<32>-Footnote-143328251
Ref: Núcleo e embutidos<32>-Footnote-153328308
Ref: Núcleo e embutidos<32>-Footnote-163328365
Ref: Núcleo e embutidos<32>-Footnote-173328422
Ref: Núcleo e embutidos<32>-Footnote-183328479
Ref: Núcleo e embutidos<32>-Footnote-193328536
Ref: Núcleo e embutidos<32>-Footnote-203328593
Ref: Núcleo e embutidos<32>-Footnote-213328650
Ref: Núcleo e embutidos<32>-Footnote-223328707
Ref: Núcleo e embutidos<32>-Footnote-233328764
Ref: Núcleo e embutidos<32>-Footnote-243328821
Ref: Núcleo e embutidos<32>-Footnote-253328877
Ref: Núcleo e embutidos<32>-Footnote-263328934
Ref: Núcleo e embutidos<32>-Footnote-273328991
Ref: Núcleo e embutidos<32>-Footnote-283329047
Ref: Núcleo e embutidos<32>-Footnote-293329104
Ref: Núcleo e embutidos<32>-Footnote-303329161
Ref: Núcleo e embutidos<32>-Footnote-313329218
Ref: Núcleo e embutidos<32>-Footnote-323329275
Ref: Núcleo e embutidos<32>-Footnote-333329332
Ref: Núcleo e embutidos<32>-Footnote-343329388
Ref: Núcleo e embutidos<32>-Footnote-353329445
Ref: Núcleo e embutidos<32>-Footnote-363329502
Ref: Núcleo e embutidos<32>-Footnote-373329559
Ref: Núcleo e embutidos<32>-Footnote-383329616
Ref: Núcleo e embutidos<32>-Footnote-393329672
Ref: Núcleo e embutidos<32>-Footnote-403329729
Ref: Núcleo e embutidos<32>-Footnote-413329786
Ref: Núcleo e embutidos<32>-Footnote-423329843
Ref: Núcleo e embutidos<32>-Footnote-433329899
Ref: Núcleo e embutidos<32>-Footnote-443329965
Ref: Núcleo e embutidos<32>-Footnote-453330031
Ref: Núcleo e embutidos<32>-Footnote-463330074
Node: Biblioteca<36>3330140
Ref: whatsnew/changelog id1863330271
Ref: 178f3330271
Ref: Biblioteca<36>-Footnote-13357912
Ref: Biblioteca<36>-Footnote-23357968
Ref: Biblioteca<36>-Footnote-33358024
Ref: Biblioteca<36>-Footnote-43358080
Ref: Biblioteca<36>-Footnote-53358136
Ref: Biblioteca<36>-Footnote-63358192
Ref: Biblioteca<36>-Footnote-73358248
Ref: Biblioteca<36>-Footnote-83358304
Ref: Biblioteca<36>-Footnote-93358360
Ref: Biblioteca<36>-Footnote-103358416
Ref: Biblioteca<36>-Footnote-113358472
Ref: Biblioteca<36>-Footnote-123358529
Ref: Biblioteca<36>-Footnote-133358586
Ref: Biblioteca<36>-Footnote-143358643
Ref: Biblioteca<36>-Footnote-153358700
Ref: Biblioteca<36>-Footnote-163358757
Ref: Biblioteca<36>-Footnote-173358814
Ref: Biblioteca<36>-Footnote-183358871
Ref: Biblioteca<36>-Footnote-193358928
Ref: Biblioteca<36>-Footnote-203358985
Ref: Biblioteca<36>-Footnote-213359041
Ref: Biblioteca<36>-Footnote-223359098
Ref: Biblioteca<36>-Footnote-233359154
Ref: Biblioteca<36>-Footnote-243359211
Ref: Biblioteca<36>-Footnote-253359268
Ref: Biblioteca<36>-Footnote-263359325
Ref: Biblioteca<36>-Footnote-273359382
Ref: Biblioteca<36>-Footnote-283359439
Ref: Biblioteca<36>-Footnote-293359496
Ref: Biblioteca<36>-Footnote-303359553
Ref: Biblioteca<36>-Footnote-313359610
Ref: Biblioteca<36>-Footnote-323359667
Ref: Biblioteca<36>-Footnote-333359723
Ref: Biblioteca<36>-Footnote-343359780
Ref: Biblioteca<36>-Footnote-353359837
Ref: Biblioteca<36>-Footnote-363359894
Ref: Biblioteca<36>-Footnote-373359950
Ref: Biblioteca<36>-Footnote-383360007
Ref: Biblioteca<36>-Footnote-393360064
Ref: Biblioteca<36>-Footnote-403360121
Ref: Biblioteca<36>-Footnote-413360178
Ref: Biblioteca<36>-Footnote-423360235
Ref: Biblioteca<36>-Footnote-433360292
Ref: Biblioteca<36>-Footnote-443360349
Ref: Biblioteca<36>-Footnote-453360406
Ref: Biblioteca<36>-Footnote-463360463
Ref: Biblioteca<36>-Footnote-473360519
Ref: Biblioteca<36>-Footnote-483360576
Ref: Biblioteca<36>-Footnote-493360632
Ref: Biblioteca<36>-Footnote-503360689
Ref: Biblioteca<36>-Footnote-513360746
Ref: Biblioteca<36>-Footnote-523360803
Ref: Biblioteca<36>-Footnote-533360860
Ref: Biblioteca<36>-Footnote-543360917
Ref: Biblioteca<36>-Footnote-553360974
Ref: Biblioteca<36>-Footnote-563361030
Ref: Biblioteca<36>-Footnote-573361087
Ref: Biblioteca<36>-Footnote-583361143
Ref: Biblioteca<36>-Footnote-593361199
Ref: Biblioteca<36>-Footnote-603361255
Ref: Biblioteca<36>-Footnote-613361312
Ref: Biblioteca<36>-Footnote-623361369
Ref: Biblioteca<36>-Footnote-633361425
Ref: Biblioteca<36>-Footnote-643361481
Ref: Biblioteca<36>-Footnote-653361538
Ref: Biblioteca<36>-Footnote-663361595
Ref: Biblioteca<36>-Footnote-673361652
Ref: Biblioteca<36>-Footnote-683361709
Ref: Biblioteca<36>-Footnote-693361766
Ref: Biblioteca<36>-Footnote-703361823
Ref: Biblioteca<36>-Footnote-713361879
Ref: Biblioteca<36>-Footnote-723361936
Ref: Biblioteca<36>-Footnote-733361993
Ref: Biblioteca<36>-Footnote-743362050
Ref: Biblioteca<36>-Footnote-753362107
Ref: Biblioteca<36>-Footnote-763362164
Ref: Biblioteca<36>-Footnote-773362221
Ref: Biblioteca<36>-Footnote-783362277
Ref: Biblioteca<36>-Footnote-793362334
Ref: Biblioteca<36>-Footnote-803362391
Ref: Biblioteca<36>-Footnote-813362448
Ref: Biblioteca<36>-Footnote-823362504
Ref: Biblioteca<36>-Footnote-833362561
Ref: Biblioteca<36>-Footnote-843362618
Ref: Biblioteca<36>-Footnote-853362675
Ref: Biblioteca<36>-Footnote-863362732
Ref: Biblioteca<36>-Footnote-873362788
Ref: Biblioteca<36>-Footnote-883362845
Ref: Biblioteca<36>-Footnote-893362901
Ref: Biblioteca<36>-Footnote-903362958
Ref: Biblioteca<36>-Footnote-913363015
Ref: Biblioteca<36>-Footnote-923363072
Ref: Biblioteca<36>-Footnote-933363129
Ref: Biblioteca<36>-Footnote-943363186
Ref: Biblioteca<36>-Footnote-953363242
Ref: Biblioteca<36>-Footnote-963363299
Ref: Biblioteca<36>-Footnote-973363355
Ref: Biblioteca<36>-Footnote-983363412
Ref: Biblioteca<36>-Footnote-993363468
Ref: Biblioteca<36>-Footnote-1003363524
Ref: Biblioteca<36>-Footnote-1013363581
Ref: Biblioteca<36>-Footnote-1023363639
Ref: Biblioteca<36>-Footnote-1033363697
Ref: Biblioteca<36>-Footnote-1043363755
Ref: Biblioteca<36>-Footnote-1053363813
Ref: Biblioteca<36>-Footnote-1063363870
Ref: Biblioteca<36>-Footnote-1073363927
Ref: Biblioteca<36>-Footnote-1083363985
Ref: Biblioteca<36>-Footnote-1093364043
Ref: Biblioteca<36>-Footnote-1103364101
Ref: Biblioteca<36>-Footnote-1113364158
Ref: Biblioteca<36>-Footnote-1123364216
Ref: Biblioteca<36>-Footnote-1133364274
Ref: Biblioteca<36>-Footnote-1143364331
Ref: Biblioteca<36>-Footnote-1153364389
Ref: Biblioteca<36>-Footnote-1163364433
Ref: Biblioteca<36>-Footnote-1173364491
Ref: Biblioteca<36>-Footnote-1183364548
Ref: Biblioteca<36>-Footnote-1193364605
Ref: Biblioteca<36>-Footnote-1203364662
Ref: Biblioteca<36>-Footnote-1213364729
Ref: Biblioteca<36>-Footnote-1223364796
Ref: Biblioteca<36>-Footnote-1233364863
Ref: Biblioteca<36>-Footnote-1243364930
Ref: Biblioteca<36>-Footnote-1253364997
Ref: Biblioteca<36>-Footnote-1263365064
Ref: Biblioteca<36>-Footnote-1273365131
Ref: Biblioteca<36>-Footnote-1283365198
Ref: Biblioteca<36>-Footnote-1293365265
Ref: Biblioteca<36>-Footnote-1303365332
Ref: Biblioteca<36>-Footnote-1313365399
Ref: Biblioteca<36>-Footnote-1323365466
Ref: Biblioteca<36>-Footnote-1333365533
Ref: Biblioteca<36>-Footnote-1343365600
Node: Documentação<15>3365667
Ref: whatsnew/changelog id1873365785
Ref: 17aa3365785
Ref: Documentação<15>-Footnote-13366401
Ref: Documentação<15>-Footnote-23366457
Ref: Documentação<15>-Footnote-33366513
Ref: Documentação<15>-Footnote-43366568
Node: Testes<18>3366626
Ref: whatsnew/changelog id1883366746
Ref: 17ab3366746
Ref: Testes<18>-Footnote-13368908
Ref: Testes<18>-Footnote-23368964
Ref: Testes<18>-Footnote-33369020
Ref: Testes<18>-Footnote-43369076
Ref: Testes<18>-Footnote-53369131
Ref: Testes<18>-Footnote-63369187
Ref: Testes<18>-Footnote-73369243
Ref: Testes<18>-Footnote-83369299
Ref: Testes<18>-Footnote-93369355
Ref: Testes<18>-Footnote-103369411
Node: Construção<18>3369477
Ref: whatsnew/changelog id1893369590
Ref: 17ac3369590
Ref: Construção<18>-Footnote-13371039
Ref: Construção<18>-Footnote-23371095
Ref: Construção<18>-Footnote-33371151
Ref: Construção<18>-Footnote-43371207
Ref: Construção<18>-Footnote-53371263
Ref: Construção<18>-Footnote-63371319
Ref: Construção<18>-Footnote-73371375
Ref: Construção<18>-Footnote-83371440
Node: Windows<16>3371505
Ref: whatsnew/changelog id1903371617
Ref: 17ad3371617
Ref: Windows<16>-Footnote-13373660
Ref: Windows<16>-Footnote-23373716
Ref: Windows<16>-Footnote-33373772
Ref: Windows<16>-Footnote-43373828
Ref: Windows<16>-Footnote-53373884
Ref: Windows<16>-Footnote-63373939
Ref: Windows<16>-Footnote-73373994
Ref: Windows<16>-Footnote-83374050
Ref: Windows<16>-Footnote-93374106
Ref: Windows<16>-Footnote-103374161
Ref: Windows<16>-Footnote-113374217
Node: macOS<11>3374283
Ref: whatsnew/changelog id1913374387
Ref: 17ae3374387
Ref: macOS<11>-Footnote-13377063
Ref: macOS<11>-Footnote-23377119
Ref: macOS<11>-Footnote-33377175
Ref: macOS<11>-Footnote-43377231
Ref: macOS<11>-Footnote-53377286
Ref: macOS<11>-Footnote-63377341
Ref: macOS<11>-Footnote-73377396
Ref: macOS<11>-Footnote-83377452
Ref: macOS<11>-Footnote-93377508
Ref: macOS<11>-Footnote-103377564
Ref: macOS<11>-Footnote-113377621
Ref: macOS<11>-Footnote-123377678
Node: IDLE<15>3377735
Ref: whatsnew/changelog id1923377837
Ref: 17af3377837
Ref: IDLE<15>-Footnote-13378492
Ref: IDLE<15>-Footnote-23378547
Ref: IDLE<15>-Footnote-33378603
Ref: IDLE<15>-Footnote-43378659
Ref: IDLE<15>-Footnote-53378715
Ref: IDLE<15>-Footnote-63378771
Node: API C<19>3378836
Ref: whatsnew/changelog id1933378920
Ref: 17b03378920
Ref: API C<19>-Footnote-13379692
Ref: API C<19>-Footnote-23379748
Ref: API C<19>-Footnote-33379804
Ref: API C<19>-Footnote-43379860
Node: Python 3 13 0 alpha 23379915
Ref: whatsnew/changelog python-3-13-0-alpha-23380042
Ref: 17b13380042
Node: Núcleo e embutidos<33>3380408
Ref: whatsnew/changelog id1943380512
Ref: 17b23380512
Ref: Núcleo e embutidos<33>-Footnote-13389344
Ref: Núcleo e embutidos<33>-Footnote-23389400
Ref: Núcleo e embutidos<33>-Footnote-33389456
Ref: Núcleo e embutidos<33>-Footnote-43389512
Ref: Núcleo e embutidos<33>-Footnote-53389568
Ref: Núcleo e embutidos<33>-Footnote-63389624
Ref: Núcleo e embutidos<33>-Footnote-73389680
Ref: Núcleo e embutidos<33>-Footnote-83389736
Ref: Núcleo e embutidos<33>-Footnote-93389791
Ref: Núcleo e embutidos<33>-Footnote-103389846
Ref: Núcleo e embutidos<33>-Footnote-113389902
Ref: Núcleo e embutidos<33>-Footnote-123389959
Ref: Núcleo e embutidos<33>-Footnote-133390016
Ref: Núcleo e embutidos<33>-Footnote-143390073
Ref: Núcleo e embutidos<33>-Footnote-153390130
Ref: Núcleo e embutidos<33>-Footnote-163390187
Ref: Núcleo e embutidos<33>-Footnote-173390244
Ref: Núcleo e embutidos<33>-Footnote-183390301
Ref: Núcleo e embutidos<33>-Footnote-193390358
Ref: Núcleo e embutidos<33>-Footnote-203390415
Ref: Núcleo e embutidos<33>-Footnote-213390472
Ref: Núcleo e embutidos<33>-Footnote-223390529
Ref: Núcleo e embutidos<33>-Footnote-233390586
Ref: Núcleo e embutidos<33>-Footnote-243390643
Ref: Núcleo e embutidos<33>-Footnote-253390700
Ref: Núcleo e embutidos<33>-Footnote-263390757
Ref: Núcleo e embutidos<33>-Footnote-273390814
Ref: Núcleo e embutidos<33>-Footnote-283390871
Ref: Núcleo e embutidos<33>-Footnote-293390928
Ref: Núcleo e embutidos<33>-Footnote-303390984
Ref: Núcleo e embutidos<33>-Footnote-313391040
Ref: Núcleo e embutidos<33>-Footnote-323391097
Ref: Núcleo e embutidos<33>-Footnote-333391154
Ref: Núcleo e embutidos<33>-Footnote-343391211
Ref: Núcleo e embutidos<33>-Footnote-353391268
Ref: Núcleo e embutidos<33>-Footnote-363391325
Ref: Núcleo e embutidos<33>-Footnote-373391382
Ref: Núcleo e embutidos<33>-Footnote-383391439
Ref: Núcleo e embutidos<33>-Footnote-393391496
Ref: Núcleo e embutidos<33>-Footnote-403391553
Ref: Núcleo e embutidos<33>-Footnote-413391610
Ref: Núcleo e embutidos<33>-Footnote-423391667
Ref: Núcleo e embutidos<33>-Footnote-433391724
Ref: Núcleo e embutidos<33>-Footnote-443391780
Ref: Núcleo e embutidos<33>-Footnote-453391846
Ref: Núcleo e embutidos<33>-Footnote-463391903
Ref: Núcleo e embutidos<33>-Footnote-473391969
Ref: Núcleo e embutidos<33>-Footnote-483392026
Ref: Núcleo e embutidos<33>-Footnote-493392083
Ref: Núcleo e embutidos<33>-Footnote-503392140
Node: Biblioteca<37>3392206
Ref: whatsnew/changelog id1953392329
Ref: 17b53392329
Ref: Biblioteca<37>-Footnote-13403967
Ref: Biblioteca<37>-Footnote-23404023
Ref: Biblioteca<37>-Footnote-33404079
Ref: Biblioteca<37>-Footnote-43404135
Ref: Biblioteca<37>-Footnote-53404191
Ref: Biblioteca<37>-Footnote-63404247
Ref: Biblioteca<37>-Footnote-73404303
Ref: Biblioteca<37>-Footnote-83404359
Ref: Biblioteca<37>-Footnote-93404415
Ref: Biblioteca<37>-Footnote-103404471
Ref: Biblioteca<37>-Footnote-113404528
Ref: Biblioteca<37>-Footnote-123404584
Ref: Biblioteca<37>-Footnote-133404641
Ref: Biblioteca<37>-Footnote-143404698
Ref: Biblioteca<37>-Footnote-153404755
Ref: Biblioteca<37>-Footnote-163404812
Ref: Biblioteca<37>-Footnote-173404869
Ref: Biblioteca<37>-Footnote-183404926
Ref: Biblioteca<37>-Footnote-193404983
Ref: Biblioteca<37>-Footnote-203405039
Ref: Biblioteca<37>-Footnote-213405096
Ref: Biblioteca<37>-Footnote-223405153
Ref: Biblioteca<37>-Footnote-233405209
Ref: Biblioteca<37>-Footnote-243405266
Ref: Biblioteca<37>-Footnote-253405322
Ref: Biblioteca<37>-Footnote-263405379
Ref: Biblioteca<37>-Footnote-273405436
Ref: Biblioteca<37>-Footnote-283405493
Ref: Biblioteca<37>-Footnote-293405550
Ref: Biblioteca<37>-Footnote-303405607
Ref: Biblioteca<37>-Footnote-313405664
Ref: Biblioteca<37>-Footnote-323405721
Ref: Biblioteca<37>-Footnote-333405778
Ref: Biblioteca<37>-Footnote-343405835
Ref: Biblioteca<37>-Footnote-353405892
Ref: Biblioteca<37>-Footnote-363405949
Ref: Biblioteca<37>-Footnote-373406006
Ref: Biblioteca<37>-Footnote-383406063
Ref: Biblioteca<37>-Footnote-393406119
Ref: Biblioteca<37>-Footnote-403406175
Ref: Biblioteca<37>-Footnote-413406232
Ref: Biblioteca<37>-Footnote-423406289
Ref: Biblioteca<37>-Footnote-433406346
Ref: Biblioteca<37>-Footnote-443406402
Ref: Biblioteca<37>-Footnote-453406458
Ref: Biblioteca<37>-Footnote-463406515
Ref: Biblioteca<37>-Footnote-473406572
Ref: Biblioteca<37>-Footnote-483406629
Ref: Biblioteca<37>-Footnote-493406686
Ref: Biblioteca<37>-Footnote-503406742
Ref: Biblioteca<37>-Footnote-513406799
Ref: Biblioteca<37>-Footnote-523406856
Ref: Biblioteca<37>-Footnote-533406913
Ref: Biblioteca<37>-Footnote-543406969
Ref: Biblioteca<37>-Footnote-553407025
Ref: Biblioteca<37>-Footnote-563407081
Ref: Biblioteca<37>-Footnote-573407138
Ref: Biblioteca<37>-Footnote-583407195
Ref: Biblioteca<37>-Footnote-593407251
Ref: Biblioteca<37>-Footnote-603407307
Ref: Biblioteca<37>-Footnote-613407394
Ref: Biblioteca<37>-Footnote-623407450
Node: Testes<19>3407506
Ref: whatsnew/changelog id1963407622
Ref: 17c93407622
Ref: Testes<19>-Footnote-13409371
Ref: Testes<19>-Footnote-23409427
Ref: Testes<19>-Footnote-33409483
Ref: Testes<19>-Footnote-43409539
Ref: Testes<19>-Footnote-53409595
Ref: Testes<19>-Footnote-63409651
Ref: Testes<19>-Footnote-73409707
Ref: Testes<19>-Footnote-83409763
Node: Construção<19>3409819
Ref: whatsnew/changelog id1973409932
Ref: 17ca3409932
Ref: Construção<19>-Footnote-13411021
Ref: Construção<19>-Footnote-23411076
Ref: Construção<19>-Footnote-33411132
Ref: Construção<19>-Footnote-43411182
Ref: Construção<19>-Footnote-53411238
Ref: Construção<19>-Footnote-63411294
Node: Windows<17>3411349
Ref: whatsnew/changelog id1983411461
Ref: 17cb3411461
Ref: Windows<17>-Footnote-13411985
Ref: Windows<17>-Footnote-23412041
Ref: Windows<17>-Footnote-33412097
Node: macOS<12>3412153
Ref: whatsnew/changelog id1993412257
Ref: 17cd3412257
Ref: macOS<12>-Footnote-13413292
Ref: macOS<12>-Footnote-23413347
Ref: macOS<12>-Footnote-33413403
Ref: macOS<12>-Footnote-43413459
Ref: macOS<12>-Footnote-53413514
Node: IDLE<16>3413569
Ref: whatsnew/changelog id2003413683
Ref: 17ce3413683
Ref: IDLE<16>-Footnote-13414035
Node: Ferramentas/Demos<11>3414100
Ref: whatsnew/changelog id2013414214
Ref: 17cf3414214
Ref: Ferramentas/Demos<11>-Footnote-13414612
Node: API C<20>3414668
Ref: whatsnew/changelog id2023414765
Ref: 17d03414765
Ref: API C<20>-Footnote-13420336
Ref: API C<20>-Footnote-23420392
Ref: API C<20>-Footnote-33420448
Ref: API C<20>-Footnote-43420504
Ref: API C<20>-Footnote-53420560
Ref: API C<20>-Footnote-63420616
Ref: API C<20>-Footnote-73420672
Ref: API C<20>-Footnote-83420728
Ref: API C<20>-Footnote-93420784
Ref: API C<20>-Footnote-103420840
Ref: API C<20>-Footnote-113420897
Ref: API C<20>-Footnote-123420940
Ref: API C<20>-Footnote-133420997
Ref: API C<20>-Footnote-143421054
Ref: API C<20>-Footnote-153421111
Ref: API C<20>-Footnote-163421168
Ref: API C<20>-Footnote-173421225
Ref: API C<20>-Footnote-183421281
Ref: API C<20>-Footnote-193421337
Ref: API C<20>-Footnote-203421394
Node: Python 3 13 0 alpha 13421450
Ref: whatsnew/changelog python-3-13-0-alpha-13421576
Ref: 17d13421576
Node: Segurança<17>3422010
Ref: whatsnew/changelog id2033422114
Ref: 17d23422114
Ref: Segurança<17>-Footnote-13423513
Ref: Segurança<17>-Footnote-23423569
Ref: Segurança<17>-Footnote-33423625
Ref: Segurança<17>-Footnote-43423681
Ref: Segurança<17>-Footnote-53423737
Ref: Segurança<17>-Footnote-63423793
Ref: Segurança<17>-Footnote-73423848
Node: Núcleo e embutidos<34>3423904
Ref: whatsnew/changelog id2043424031
Ref: 17d33424031
Ref: Núcleo e embutidos<34>-Footnote-13458132
Ref: Núcleo e embutidos<34>-Footnote-23458188
Ref: Núcleo e embutidos<34>-Footnote-33458244
Ref: Núcleo e embutidos<34>-Footnote-43458300
Ref: Núcleo e embutidos<34>-Footnote-53458356
Ref: Núcleo e embutidos<34>-Footnote-63458412
Ref: Núcleo e embutidos<34>-Footnote-73458468
Ref: Núcleo e embutidos<34>-Footnote-83458524
Ref: Núcleo e embutidos<34>-Footnote-93458580
Ref: Núcleo e embutidos<34>-Footnote-103458636
Ref: Núcleo e embutidos<34>-Footnote-113458693
Ref: Núcleo e embutidos<34>-Footnote-123458750
Ref: Núcleo e embutidos<34>-Footnote-133458807
Ref: Núcleo e embutidos<34>-Footnote-143458864
Ref: Núcleo e embutidos<34>-Footnote-153458921
Ref: Núcleo e embutidos<34>-Footnote-163458978
Ref: Núcleo e embutidos<34>-Footnote-173459035
Ref: Núcleo e embutidos<34>-Footnote-183459092
Ref: Núcleo e embutidos<34>-Footnote-193459149
Ref: Núcleo e embutidos<34>-Footnote-203459206
Ref: Núcleo e embutidos<34>-Footnote-213459263
Ref: Núcleo e embutidos<34>-Footnote-223459320
Ref: Núcleo e embutidos<34>-Footnote-233459377
Ref: Núcleo e embutidos<34>-Footnote-243459434
Ref: Núcleo e embutidos<34>-Footnote-253459491
Ref: Núcleo e embutidos<34>-Footnote-263459548
Ref: Núcleo e embutidos<34>-Footnote-273459605
Ref: Núcleo e embutidos<34>-Footnote-283459662
Ref: Núcleo e embutidos<34>-Footnote-293459719
Ref: Núcleo e embutidos<34>-Footnote-303459776
Ref: Núcleo e embutidos<34>-Footnote-313459833
Ref: Núcleo e embutidos<34>-Footnote-323459890
Ref: Núcleo e embutidos<34>-Footnote-333459947
Ref: Núcleo e embutidos<34>-Footnote-343460004
Ref: Núcleo e embutidos<34>-Footnote-353460061
Ref: Núcleo e embutidos<34>-Footnote-363460118
Ref: Núcleo e embutidos<34>-Footnote-373460175
Ref: Núcleo e embutidos<34>-Footnote-383460232
Ref: Núcleo e embutidos<34>-Footnote-393460289
Ref: Núcleo e embutidos<34>-Footnote-403460346
Ref: Núcleo e embutidos<34>-Footnote-413460403
Ref: Núcleo e embutidos<34>-Footnote-423460460
Ref: Núcleo e embutidos<34>-Footnote-433460517
Ref: Núcleo e embutidos<34>-Footnote-443460574
Ref: Núcleo e embutidos<34>-Footnote-453460630
Ref: Núcleo e embutidos<34>-Footnote-463460687
Ref: Núcleo e embutidos<34>-Footnote-473460744
Ref: Núcleo e embutidos<34>-Footnote-483460801
Ref: Núcleo e embutidos<34>-Footnote-493460858
Ref: Núcleo e embutidos<34>-Footnote-503460915
Ref: Núcleo e embutidos<34>-Footnote-513460972
Ref: Núcleo e embutidos<34>-Footnote-523461029
Ref: Núcleo e embutidos<34>-Footnote-533461086
Ref: Núcleo e embutidos<34>-Footnote-543461143
Ref: Núcleo e embutidos<34>-Footnote-553461200
Ref: Núcleo e embutidos<34>-Footnote-563461257
Ref: Núcleo e embutidos<34>-Footnote-573461314
Ref: Núcleo e embutidos<34>-Footnote-583461371
Ref: Núcleo e embutidos<34>-Footnote-593461428
Ref: Núcleo e embutidos<34>-Footnote-603461485
Ref: Núcleo e embutidos<34>-Footnote-613461542
Ref: Núcleo e embutidos<34>-Footnote-623461599
Ref: Núcleo e embutidos<34>-Footnote-633461656
Ref: Núcleo e embutidos<34>-Footnote-643461713
Ref: Núcleo e embutidos<34>-Footnote-653461769
Ref: Núcleo e embutidos<34>-Footnote-663461826
Ref: Núcleo e embutidos<34>-Footnote-673461883
Ref: Núcleo e embutidos<34>-Footnote-683461939
Ref: Núcleo e embutidos<34>-Footnote-693461996
Ref: Núcleo e embutidos<34>-Footnote-703462053
Ref: Núcleo e embutidos<34>-Footnote-713462110
Ref: Núcleo e embutidos<34>-Footnote-723462167
Ref: Núcleo e embutidos<34>-Footnote-733462224
Ref: Núcleo e embutidos<34>-Footnote-743462280
Ref: Núcleo e embutidos<34>-Footnote-753462337
Ref: Núcleo e embutidos<34>-Footnote-763462394
Ref: Núcleo e embutidos<34>-Footnote-773462451
Ref: Núcleo e embutidos<34>-Footnote-783462508
Ref: Núcleo e embutidos<34>-Footnote-793462565
Ref: Núcleo e embutidos<34>-Footnote-803462622
Ref: Núcleo e embutidos<34>-Footnote-813462679
Ref: Núcleo e embutidos<34>-Footnote-823462736
Ref: Núcleo e embutidos<34>-Footnote-833462793
Ref: Núcleo e embutidos<34>-Footnote-843462850
Ref: Núcleo e embutidos<34>-Footnote-853462893
Ref: Núcleo e embutidos<34>-Footnote-863462950
Ref: Núcleo e embutidos<34>-Footnote-873463007
Ref: Núcleo e embutidos<34>-Footnote-883463064
Ref: Núcleo e embutidos<34>-Footnote-893463120
Ref: Núcleo e embutidos<34>-Footnote-903463177
Ref: Núcleo e embutidos<34>-Footnote-913463234
Ref: Núcleo e embutidos<34>-Footnote-923463291
Ref: Núcleo e embutidos<34>-Footnote-933463348
Ref: Núcleo e embutidos<34>-Footnote-943463405
Ref: Núcleo e embutidos<34>-Footnote-953463462
Ref: Núcleo e embutidos<34>-Footnote-963463519
Ref: Núcleo e embutidos<34>-Footnote-973463576
Ref: Núcleo e embutidos<34>-Footnote-983463633
Ref: Núcleo e embutidos<34>-Footnote-993463690
Ref: Núcleo e embutidos<34>-Footnote-1003463747
Ref: Núcleo e embutidos<34>-Footnote-1013463805
Ref: Núcleo e embutidos<34>-Footnote-1023463863
Ref: Núcleo e embutidos<34>-Footnote-1033463921
Ref: Núcleo e embutidos<34>-Footnote-1043463979
Ref: Núcleo e embutidos<34>-Footnote-1053464037
Ref: Núcleo e embutidos<34>-Footnote-1063464095
Ref: Núcleo e embutidos<34>-Footnote-1073464152
Ref: Núcleo e embutidos<34>-Footnote-1083464209
Ref: Núcleo e embutidos<34>-Footnote-1093464267
Ref: Núcleo e embutidos<34>-Footnote-1103464325
Ref: Núcleo e embutidos<34>-Footnote-1113464383
Ref: Núcleo e embutidos<34>-Footnote-1123464441
Ref: Núcleo e embutidos<34>-Footnote-1133464499
Ref: Núcleo e embutidos<34>-Footnote-1143464557
Ref: Núcleo e embutidos<34>-Footnote-1153464615
Ref: Núcleo e embutidos<34>-Footnote-1163464673
Ref: Núcleo e embutidos<34>-Footnote-1173464731
Ref: Núcleo e embutidos<34>-Footnote-1183464789
Ref: Núcleo e embutidos<34>-Footnote-1193464847
Ref: Núcleo e embutidos<34>-Footnote-1203464905
Ref: Núcleo e embutidos<34>-Footnote-1213464962
Ref: Núcleo e embutidos<34>-Footnote-1223465020
Ref: Núcleo e embutidos<34>-Footnote-1233465078
Ref: Núcleo e embutidos<34>-Footnote-1243465135
Ref: Núcleo e embutidos<34>-Footnote-1253465193
Ref: Núcleo e embutidos<34>-Footnote-1263465251
Ref: Núcleo e embutidos<34>-Footnote-1273465309
Ref: Núcleo e embutidos<34>-Footnote-1283465367
Ref: Núcleo e embutidos<34>-Footnote-1293465425
Ref: Núcleo e embutidos<34>-Footnote-1303465483
Ref: Núcleo e embutidos<34>-Footnote-1313465541
Ref: Núcleo e embutidos<34>-Footnote-1323465599
Ref: Núcleo e embutidos<34>-Footnote-1333465657
Ref: Núcleo e embutidos<34>-Footnote-1343465715
Ref: Núcleo e embutidos<34>-Footnote-1353465773
Ref: Núcleo e embutidos<34>-Footnote-1363465831
Ref: Núcleo e embutidos<34>-Footnote-1373465889
Ref: Núcleo e embutidos<34>-Footnote-1383465947
Ref: Núcleo e embutidos<34>-Footnote-1393466005
Ref: Núcleo e embutidos<34>-Footnote-1403466063
Ref: Núcleo e embutidos<34>-Footnote-1413466121
Ref: Núcleo e embutidos<34>-Footnote-1423466179
Ref: Núcleo e embutidos<34>-Footnote-1433466237
Ref: Núcleo e embutidos<34>-Footnote-1443466295
Ref: Núcleo e embutidos<34>-Footnote-1453466352
Ref: Núcleo e embutidos<34>-Footnote-1463466410
Ref: Núcleo e embutidos<34>-Footnote-1473466468
Ref: Núcleo e embutidos<34>-Footnote-1483466525
Ref: Núcleo e embutidos<34>-Footnote-1493466583
Ref: Núcleo e embutidos<34>-Footnote-1503466641
Ref: Núcleo e embutidos<34>-Footnote-1513466699
Ref: Núcleo e embutidos<34>-Footnote-1523466757
Ref: Núcleo e embutidos<34>-Footnote-1533466815
Ref: Núcleo e embutidos<34>-Footnote-1543466873
Ref: Núcleo e embutidos<34>-Footnote-1553466931
Ref: Núcleo e embutidos<34>-Footnote-1563466989
Ref: Núcleo e embutidos<34>-Footnote-1573467047
Ref: Núcleo e embutidos<34>-Footnote-1583467105
Ref: Núcleo e embutidos<34>-Footnote-1593467163
Ref: Núcleo e embutidos<34>-Footnote-1603467221
Ref: Núcleo e embutidos<34>-Footnote-1613467279
Ref: Núcleo e embutidos<34>-Footnote-1623467337
Ref: Núcleo e embutidos<34>-Footnote-1633467395
Ref: Núcleo e embutidos<34>-Footnote-1643467453
Ref: Núcleo e embutidos<34>-Footnote-1653467511
Ref: Núcleo e embutidos<34>-Footnote-1663467569
Ref: Núcleo e embutidos<34>-Footnote-1673467627
Ref: Núcleo e embutidos<34>-Footnote-1683467684
Ref: Núcleo e embutidos<34>-Footnote-1693467741
Ref: Núcleo e embutidos<34>-Footnote-1703467798
Ref: Núcleo e embutidos<34>-Footnote-1713467856
Node: Biblioteca<38>3467913
Ref: whatsnew/changelog id2053468044
Ref: 17e83468044
Ref: Biblioteca<38>-Footnote-13520362
Ref: Biblioteca<38>-Footnote-23520418
Ref: Biblioteca<38>-Footnote-33520474
Ref: Biblioteca<38>-Footnote-43520530
Ref: Biblioteca<38>-Footnote-53520585
Ref: Biblioteca<38>-Footnote-63520641
Ref: Biblioteca<38>-Footnote-73520697
Ref: Biblioteca<38>-Footnote-83520753
Ref: Biblioteca<38>-Footnote-93520808
Ref: Biblioteca<38>-Footnote-103520864
Ref: Biblioteca<38>-Footnote-113520920
Ref: Biblioteca<38>-Footnote-123520977
Ref: Biblioteca<38>-Footnote-133521034
Ref: Biblioteca<38>-Footnote-143521091
Ref: Biblioteca<38>-Footnote-153521148
Ref: Biblioteca<38>-Footnote-163521205
Ref: Biblioteca<38>-Footnote-173521262
Ref: Biblioteca<38>-Footnote-183521319
Ref: Biblioteca<38>-Footnote-193521376
Ref: Biblioteca<38>-Footnote-203521433
Ref: Biblioteca<38>-Footnote-213521490
Ref: Biblioteca<38>-Footnote-223521547
Ref: Biblioteca<38>-Footnote-233521604
Ref: Biblioteca<38>-Footnote-243521661
Ref: Biblioteca<38>-Footnote-253521704
Ref: Biblioteca<38>-Footnote-263521760
Ref: Biblioteca<38>-Footnote-273521817
Ref: Biblioteca<38>-Footnote-283521874
Ref: Biblioteca<38>-Footnote-293521931
Ref: Biblioteca<38>-Footnote-303521988
Ref: Biblioteca<38>-Footnote-313522045
Ref: Biblioteca<38>-Footnote-323522102
Ref: Biblioteca<38>-Footnote-333522159
Ref: Biblioteca<38>-Footnote-343522216
Ref: Biblioteca<38>-Footnote-353522273
Ref: Biblioteca<38>-Footnote-363522330
Ref: Biblioteca<38>-Footnote-373522387
Ref: Biblioteca<38>-Footnote-383522443
Ref: Biblioteca<38>-Footnote-393522500
Ref: Biblioteca<38>-Footnote-403522557
Ref: Biblioteca<38>-Footnote-413522614
Ref: Biblioteca<38>-Footnote-423522671
Ref: Biblioteca<38>-Footnote-433522728
Ref: Biblioteca<38>-Footnote-443522785
Ref: Biblioteca<38>-Footnote-453522842
Ref: Biblioteca<38>-Footnote-463522899
Ref: Biblioteca<38>-Footnote-473522956
Ref: Biblioteca<38>-Footnote-483523013
Ref: Biblioteca<38>-Footnote-493523070
Ref: Biblioteca<38>-Footnote-503523127
Ref: Biblioteca<38>-Footnote-513523183
Ref: Biblioteca<38>-Footnote-523523240
Ref: Biblioteca<38>-Footnote-533523296
Ref: Biblioteca<38>-Footnote-543523353
Ref: Biblioteca<38>-Footnote-553523410
Ref: Biblioteca<38>-Footnote-563523467
Ref: Biblioteca<38>-Footnote-573523524
Ref: Biblioteca<38>-Footnote-583523581
Ref: Biblioteca<38>-Footnote-593523638
Ref: Biblioteca<38>-Footnote-603523695
Ref: Biblioteca<38>-Footnote-613523752
Ref: Biblioteca<38>-Footnote-623523809
Ref: Biblioteca<38>-Footnote-633523866
Ref: Biblioteca<38>-Footnote-643523923
Ref: Biblioteca<38>-Footnote-653523980
Ref: Biblioteca<38>-Footnote-663524037
Ref: Biblioteca<38>-Footnote-673524094
Ref: Biblioteca<38>-Footnote-683524151
Ref: Biblioteca<38>-Footnote-693524208
Ref: Biblioteca<38>-Footnote-703524264
Ref: Biblioteca<38>-Footnote-713524321
Ref: Biblioteca<38>-Footnote-723524378
Ref: Biblioteca<38>-Footnote-733524435
Ref: Biblioteca<38>-Footnote-743524492
Ref: Biblioteca<38>-Footnote-753524549
Ref: Biblioteca<38>-Footnote-763524605
Ref: Biblioteca<38>-Footnote-773524662
Ref: Biblioteca<38>-Footnote-783524719
Ref: Biblioteca<38>-Footnote-793524776
Ref: Biblioteca<38>-Footnote-803524833
Ref: Biblioteca<38>-Footnote-813524890
Ref: Biblioteca<38>-Footnote-823524947
Ref: Biblioteca<38>-Footnote-833525004
Ref: Biblioteca<38>-Footnote-843525060
Ref: Biblioteca<38>-Footnote-853525116
Ref: Biblioteca<38>-Footnote-863525172
Ref: Biblioteca<38>-Footnote-873525228
Ref: Biblioteca<38>-Footnote-883525285
Ref: Biblioteca<38>-Footnote-893525342
Ref: Biblioteca<38>-Footnote-903525399
Ref: Biblioteca<38>-Footnote-913525456
Ref: Biblioteca<38>-Footnote-923525513
Ref: Biblioteca<38>-Footnote-933525569
Ref: Biblioteca<38>-Footnote-943525626
Ref: Biblioteca<38>-Footnote-953525683
Ref: Biblioteca<38>-Footnote-963525740
Ref: Biblioteca<38>-Footnote-973525796
Ref: Biblioteca<38>-Footnote-983525853
Ref: Biblioteca<38>-Footnote-993525910
Ref: Biblioteca<38>-Footnote-1003525967
Ref: Biblioteca<38>-Footnote-1013526025
Ref: Biblioteca<38>-Footnote-1023526083
Ref: Biblioteca<38>-Footnote-1033526141
Ref: Biblioteca<38>-Footnote-1043526199
Ref: Biblioteca<38>-Footnote-1053526257
Ref: Biblioteca<38>-Footnote-1063526315
Ref: Biblioteca<38>-Footnote-1073526373
Ref: Biblioteca<38>-Footnote-1083526430
Ref: Biblioteca<38>-Footnote-1093526488
Ref: Biblioteca<38>-Footnote-1103526545
Ref: Biblioteca<38>-Footnote-1113526603
Ref: Biblioteca<38>-Footnote-1123526660
Ref: Biblioteca<38>-Footnote-1133526717
Ref: Biblioteca<38>-Footnote-1143526774
Ref: Biblioteca<38>-Footnote-1153526832
Ref: Biblioteca<38>-Footnote-1163526890
Ref: Biblioteca<38>-Footnote-1173526948
Ref: Biblioteca<38>-Footnote-1183527006
Ref: Biblioteca<38>-Footnote-1193527064
Ref: Biblioteca<38>-Footnote-1203527122
Ref: Biblioteca<38>-Footnote-1213527180
Ref: Biblioteca<38>-Footnote-1223527238
Ref: Biblioteca<38>-Footnote-1233527296
Ref: Biblioteca<38>-Footnote-1243527354
Ref: Biblioteca<38>-Footnote-1253527412
Ref: Biblioteca<38>-Footnote-1263527470
Ref: Biblioteca<38>-Footnote-1273527528
Ref: Biblioteca<38>-Footnote-1283527586
Ref: Biblioteca<38>-Footnote-1293527644
Ref: Biblioteca<38>-Footnote-1303527702
Ref: Biblioteca<38>-Footnote-1313527760
Ref: Biblioteca<38>-Footnote-1323527818
Ref: Biblioteca<38>-Footnote-1333527876
Ref: Biblioteca<38>-Footnote-1343527934
Ref: Biblioteca<38>-Footnote-1353527992
Ref: Biblioteca<38>-Footnote-1363528049
Ref: Biblioteca<38>-Footnote-1373528107
Ref: Biblioteca<38>-Footnote-1383528165
Ref: Biblioteca<38>-Footnote-1393528223
Ref: Biblioteca<38>-Footnote-1403528281
Ref: Biblioteca<38>-Footnote-1413528339
Ref: Biblioteca<38>-Footnote-1423528397
Ref: Biblioteca<38>-Footnote-1433528455
Ref: Biblioteca<38>-Footnote-1443528513
Ref: Biblioteca<38>-Footnote-1453528571
Ref: Biblioteca<38>-Footnote-1463528629
Ref: Biblioteca<38>-Footnote-1473528687
Ref: Biblioteca<38>-Footnote-1483528745
Ref: Biblioteca<38>-Footnote-1493528803
Ref: Biblioteca<38>-Footnote-1503528860
Ref: Biblioteca<38>-Footnote-1513528918
Ref: Biblioteca<38>-Footnote-1523528975
Ref: Biblioteca<38>-Footnote-1533529033
Ref: Biblioteca<38>-Footnote-1543529091
Ref: Biblioteca<38>-Footnote-1553529149
Ref: Biblioteca<38>-Footnote-1563529207
Ref: Biblioteca<38>-Footnote-1573529265
Ref: Biblioteca<38>-Footnote-1583529323
Ref: Biblioteca<38>-Footnote-1593529381
Ref: Biblioteca<38>-Footnote-1603529439
Ref: Biblioteca<38>-Footnote-1613529497
Ref: Biblioteca<38>-Footnote-1623529555
Ref: Biblioteca<38>-Footnote-1633529613
Ref: Biblioteca<38>-Footnote-1643529671
Ref: Biblioteca<38>-Footnote-1653529729
Ref: Biblioteca<38>-Footnote-1663529787
Ref: Biblioteca<38>-Footnote-1673529844
Ref: Biblioteca<38>-Footnote-1683529901
Ref: Biblioteca<38>-Footnote-1693529959
Ref: Biblioteca<38>-Footnote-1703530017
Ref: Biblioteca<38>-Footnote-1713530075
Ref: Biblioteca<38>-Footnote-1723530133
Ref: Biblioteca<38>-Footnote-1733530177
Ref: Biblioteca<38>-Footnote-1743530235
Ref: Biblioteca<38>-Footnote-1753530293
Ref: Biblioteca<38>-Footnote-1763530351
Ref: Biblioteca<38>-Footnote-1773530409
Ref: Biblioteca<38>-Footnote-1783530467
Ref: Biblioteca<38>-Footnote-1793530525
Ref: Biblioteca<38>-Footnote-1803530583
Ref: Biblioteca<38>-Footnote-1813530641
Ref: Biblioteca<38>-Footnote-1823530699
Ref: Biblioteca<38>-Footnote-1833530757
Ref: Biblioteca<38>-Footnote-1843530815
Ref: Biblioteca<38>-Footnote-1853530873
Ref: Biblioteca<38>-Footnote-1863530931
Ref: Biblioteca<38>-Footnote-1873530989
Ref: Biblioteca<38>-Footnote-1883531047
Ref: Biblioteca<38>-Footnote-1893531105
Ref: Biblioteca<38>-Footnote-1903531163
Ref: Biblioteca<38>-Footnote-1913531221
Ref: Biblioteca<38>-Footnote-1923531279
Ref: Biblioteca<38>-Footnote-1933531337
Ref: Biblioteca<38>-Footnote-1943531395
Ref: Biblioteca<38>-Footnote-1953531453
Ref: Biblioteca<38>-Footnote-1963531511
Ref: Biblioteca<38>-Footnote-1973531569
Ref: Biblioteca<38>-Footnote-1983531626
Ref: Biblioteca<38>-Footnote-1993531684
Ref: Biblioteca<38>-Footnote-2003531742
Ref: Biblioteca<38>-Footnote-2013531800
Ref: Biblioteca<38>-Footnote-2023531858
Ref: Biblioteca<38>-Footnote-2033531916
Ref: Biblioteca<38>-Footnote-2043531974
Ref: Biblioteca<38>-Footnote-2053532032
Ref: Biblioteca<38>-Footnote-2063532089
Ref: Biblioteca<38>-Footnote-2073532147
Ref: Biblioteca<38>-Footnote-2083532205
Ref: Biblioteca<38>-Footnote-2093532263
Ref: Biblioteca<38>-Footnote-2103532321
Ref: Biblioteca<38>-Footnote-2113532378
Ref: Biblioteca<38>-Footnote-2123532436
Ref: Biblioteca<38>-Footnote-2133532494
Ref: Biblioteca<38>-Footnote-2143532552
Ref: Biblioteca<38>-Footnote-2153532610
Ref: Biblioteca<38>-Footnote-2163532668
Ref: Biblioteca<38>-Footnote-2173532726
Ref: Biblioteca<38>-Footnote-2183532784
Ref: Biblioteca<38>-Footnote-2193532828
Ref: Biblioteca<38>-Footnote-2203532886
Ref: Biblioteca<38>-Footnote-2213532930
Ref: Biblioteca<38>-Footnote-2223532988
Ref: Biblioteca<38>-Footnote-2233533032
Ref: Biblioteca<38>-Footnote-2243533090
Ref: Biblioteca<38>-Footnote-2253533134
Ref: Biblioteca<38>-Footnote-2263533192
Ref: Biblioteca<38>-Footnote-2273533236
Ref: Biblioteca<38>-Footnote-2283533294
Ref: Biblioteca<38>-Footnote-2293533338
Ref: Biblioteca<38>-Footnote-2303533396
Ref: Biblioteca<38>-Footnote-2313533454
Ref: Biblioteca<38>-Footnote-2323533498
Ref: Biblioteca<38>-Footnote-2333533556
Ref: Biblioteca<38>-Footnote-2343533600
Ref: Biblioteca<38>-Footnote-2353533658
Ref: Biblioteca<38>-Footnote-2363533716
Ref: Biblioteca<38>-Footnote-2373533774
Ref: Biblioteca<38>-Footnote-2383533832
Ref: Biblioteca<38>-Footnote-2393533876
Ref: Biblioteca<38>-Footnote-2403533934
Ref: Biblioteca<38>-Footnote-2413533978
Ref: Biblioteca<38>-Footnote-2423534025
Ref: Biblioteca<38>-Footnote-2433534082
Ref: Biblioteca<38>-Footnote-2443534140
Ref: Biblioteca<38>-Footnote-2453534184
Ref: Biblioteca<38>-Footnote-2463534242
Ref: Biblioteca<38>-Footnote-2473534286
Ref: Biblioteca<38>-Footnote-2483534344
Ref: Biblioteca<38>-Footnote-2493534388
Ref: Biblioteca<38>-Footnote-2503534446
Ref: Biblioteca<38>-Footnote-2513534490
Ref: Biblioteca<38>-Footnote-2523534548
Ref: Biblioteca<38>-Footnote-2533534592
Ref: Biblioteca<38>-Footnote-2543534650
Ref: Biblioteca<38>-Footnote-2553534708
Ref: Biblioteca<38>-Footnote-2563534766
Ref: Biblioteca<38>-Footnote-2573534824
Ref: Biblioteca<38>-Footnote-2583534881
Ref: Biblioteca<38>-Footnote-2593534939
Ref: Biblioteca<38>-Footnote-2603534983
Ref: Biblioteca<38>-Footnote-2613535041
Ref: Biblioteca<38>-Footnote-2623535099
Ref: Biblioteca<38>-Footnote-2633535157
Ref: Biblioteca<38>-Footnote-2643535215
Ref: Biblioteca<38>-Footnote-2653535259
Ref: Biblioteca<38>-Footnote-2663535317
Ref: Biblioteca<38>-Footnote-2673535361
Ref: Biblioteca<38>-Footnote-2683535419
Ref: Biblioteca<38>-Footnote-2693535463
Ref: Biblioteca<38>-Footnote-2703535521
Ref: Biblioteca<38>-Footnote-2713535565
Ref: Biblioteca<38>-Footnote-2723535623
Ref: Biblioteca<38>-Footnote-2733535680
Ref: Biblioteca<38>-Footnote-2743535738
Ref: Biblioteca<38>-Footnote-2753535796
Ref: Biblioteca<38>-Footnote-2763535854
Ref: Biblioteca<38>-Footnote-2773535912
Ref: Biblioteca<38>-Footnote-2783535970
Ref: Biblioteca<38>-Footnote-2793536028
Ref: Biblioteca<38>-Footnote-2803536086
Ref: Biblioteca<38>-Footnote-2813536144
Ref: Biblioteca<38>-Footnote-2823536202
Ref: Biblioteca<38>-Footnote-2833536260
Ref: Biblioteca<38>-Footnote-2843536317
Ref: Biblioteca<38>-Footnote-2853536375
Ref: Biblioteca<38>-Footnote-2863536433
Ref: Biblioteca<38>-Footnote-2873536491
Ref: Biblioteca<38>-Footnote-2883536548
Ref: Biblioteca<38>-Footnote-2893536606
Ref: Biblioteca<38>-Footnote-2903536663
Ref: Biblioteca<38>-Footnote-2913536720
Ref: Biblioteca<38>-Footnote-2923536777
Ref: Biblioteca<38>-Footnote-2933536834
Ref: Biblioteca<38>-Footnote-2943536891
Ref: Biblioteca<38>-Footnote-2953536948
Ref: Biblioteca<38>-Footnote-2963537005
Ref: Biblioteca<38>-Footnote-2973537072
Ref: Biblioteca<38>-Footnote-2983537133
Ref: Biblioteca<38>-Footnote-2993537200
Ref: Biblioteca<38>-Footnote-3003537244
Ref: Biblioteca<38>-Footnote-3013537311
Ref: Biblioteca<38>-Footnote-3023537378
Ref: Biblioteca<38>-Footnote-3033537445
Ref: Biblioteca<38>-Footnote-3043537512
Node: Documentação<16>3537579
Ref: whatsnew/changelog id2063537697
Ref: 17fc3537697
Ref: Documentação<16>-Footnote-13539649
Ref: Documentação<16>-Footnote-23539705
Ref: Documentação<16>-Footnote-33539761
Ref: Documentação<16>-Footnote-43539817
Ref: Documentação<16>-Footnote-53539873
Ref: Documentação<16>-Footnote-63539929
Ref: Documentação<16>-Footnote-73539985
Ref: Documentação<16>-Footnote-83540041
Ref: Documentação<16>-Footnote-93540097
Ref: Documentação<16>-Footnote-103540152
Ref: Documentação<16>-Footnote-113540208
Ref: Documentação<16>-Footnote-123540265
Ref: Documentação<16>-Footnote-133540321
Ref: Documentação<16>-Footnote-143540378
Node: Testes<20>3540435
Ref: whatsnew/changelog id2073540555
Ref: 17fd3540555
Ref: Testes<20>-Footnote-13553732
Ref: Testes<20>-Footnote-23553788
Ref: Testes<20>-Footnote-33553844
Ref: Testes<20>-Footnote-43553900
Ref: Testes<20>-Footnote-53553956
Ref: Testes<20>-Footnote-63554011
Ref: Testes<20>-Footnote-73554067
Ref: Testes<20>-Footnote-83554123
Ref: Testes<20>-Footnote-93554179
Ref: Testes<20>-Footnote-103554235
Ref: Testes<20>-Footnote-113554292
Ref: Testes<20>-Footnote-123554349
Ref: Testes<20>-Footnote-133554406
Ref: Testes<20>-Footnote-143554463
Ref: Testes<20>-Footnote-153554520
Ref: Testes<20>-Footnote-163554577
Ref: Testes<20>-Footnote-173554634
Ref: Testes<20>-Footnote-183554691
Ref: Testes<20>-Footnote-193554748
Ref: Testes<20>-Footnote-203554805
Ref: Testes<20>-Footnote-213554862
Ref: Testes<20>-Footnote-223554919
Ref: Testes<20>-Footnote-233554976
Ref: Testes<20>-Footnote-243555033
Ref: Testes<20>-Footnote-253555090
Ref: Testes<20>-Footnote-263555147
Ref: Testes<20>-Footnote-273555204
Ref: Testes<20>-Footnote-283555261
Ref: Testes<20>-Footnote-293555318
Ref: Testes<20>-Footnote-303555375
Ref: Testes<20>-Footnote-313555432
Ref: Testes<20>-Footnote-323555489
Ref: Testes<20>-Footnote-333555546
Ref: Testes<20>-Footnote-343555590
Ref: Testes<20>-Footnote-353555646
Ref: Testes<20>-Footnote-363555703
Ref: Testes<20>-Footnote-373555759
Ref: Testes<20>-Footnote-383555815
Ref: Testes<20>-Footnote-393555872
Ref: Testes<20>-Footnote-403555929
Ref: Testes<20>-Footnote-413555986
Ref: Testes<20>-Footnote-423556043
Ref: Testes<20>-Footnote-433556100
Ref: Testes<20>-Footnote-443556157
Ref: Testes<20>-Footnote-453556214
Ref: Testes<20>-Footnote-463556271
Ref: Testes<20>-Footnote-473556328
Ref: Testes<20>-Footnote-483556385
Ref: Testes<20>-Footnote-493556442
Ref: Testes<20>-Footnote-503556499
Ref: Testes<20>-Footnote-513556556
Ref: Testes<20>-Footnote-523556613
Ref: Testes<20>-Footnote-533556670
Ref: Testes<20>-Footnote-543556727
Ref: Testes<20>-Footnote-553556784
Ref: Testes<20>-Footnote-563556841
Ref: Testes<20>-Footnote-573556898
Ref: Testes<20>-Footnote-583556954
Ref: Testes<20>-Footnote-593557011
Node: Construção<20>3557067
Ref: whatsnew/changelog id2083557180
Ref: 17ff3557180
Ref: Construção<20>-Footnote-13561199
Ref: Construção<20>-Footnote-23561255
Ref: Construção<20>-Footnote-33561311
Ref: Construção<20>-Footnote-43561367
Ref: Construção<20>-Footnote-53561423
Ref: Construção<20>-Footnote-63561479
Ref: Construção<20>-Footnote-73561535
Ref: Construção<20>-Footnote-83561590
Ref: Construção<20>-Footnote-93561646
Ref: Construção<20>-Footnote-103561702
Ref: Construção<20>-Footnote-113561758
Ref: Construção<20>-Footnote-123561815
Ref: Construção<20>-Footnote-133561872
Ref: Construção<20>-Footnote-143561929
Ref: Construção<20>-Footnote-153561986
Ref: Construção<20>-Footnote-163562042
Ref: Construção<20>-Footnote-173562099
Ref: Construção<20>-Footnote-183562156
Ref: Construção<20>-Footnote-193562213
Ref: Construção<20>-Footnote-203562270
Ref: Construção<20>-Footnote-213562326
Ref: Construção<20>-Footnote-223562383
Ref: Construção<20>-Footnote-233562439
Ref: Construção<20>-Footnote-243562496
Node: Windows<18>3562553
Ref: whatsnew/changelog id2093562665
Ref: 18013562665
Ref: Windows<18>-Footnote-13565183
Ref: Windows<18>-Footnote-23565239
Ref: Windows<18>-Footnote-33565295
Ref: Windows<18>-Footnote-43565350
Ref: Windows<18>-Footnote-53565406
Ref: Windows<18>-Footnote-63565462
Ref: Windows<18>-Footnote-73565517
Ref: Windows<18>-Footnote-83565573
Ref: Windows<18>-Footnote-93565629
Ref: Windows<18>-Footnote-103565685
Ref: Windows<18>-Footnote-113565742
Ref: Windows<18>-Footnote-123565798
Ref: Windows<18>-Footnote-133565855
Node: macOS<13>3565912
Ref: whatsnew/changelog id2103566016
Ref: 18023566016
Ref: macOS<13>-Footnote-13566280
Ref: macOS<13>-Footnote-23566336
Ref: macOS<13>-Footnote-33566392
Node: IDLE<17>3566447
Ref: whatsnew/changelog id2113566561
Ref: 18033566561
Ref: IDLE<17>-Footnote-13566752
Node: Ferramentas/Demos<12>3566808
Ref: whatsnew/changelog id2123566922
Ref: 18043566922
Ref: Ferramentas/Demos<12>-Footnote-13569461
Ref: Ferramentas/Demos<12>-Footnote-23569517
Ref: Ferramentas/Demos<12>-Footnote-33569573
Ref: Ferramentas/Demos<12>-Footnote-43569635
Ref: Ferramentas/Demos<12>-Footnote-53569724
Ref: Ferramentas/Demos<12>-Footnote-63569780
Ref: Ferramentas/Demos<12>-Footnote-73569874
Ref: Ferramentas/Demos<12>-Footnote-83569930
Ref: Ferramentas/Demos<12>-Footnote-93569986
Ref: Ferramentas/Demos<12>-Footnote-103570041
Ref: Ferramentas/Demos<12>-Footnote-113570137
Ref: Ferramentas/Demos<12>-Footnote-123570194
Ref: Ferramentas/Demos<12>-Footnote-133570251
Ref: Ferramentas/Demos<12>-Footnote-143570308
Ref: Ferramentas/Demos<12>-Footnote-153570365
Ref: Ferramentas/Demos<12>-Footnote-163570422
Ref: Ferramentas/Demos<12>-Footnote-173570479
Ref: Ferramentas/Demos<12>-Footnote-183570535
Node: API C<21>3570633
Ref: whatsnew/changelog id2133570730
Ref: 18053570730
Ref: API C<21>-Footnote-13585648
Ref: API C<21>-Footnote-23585703
Ref: API C<21>-Footnote-33585759
Ref: API C<21>-Footnote-43585815
Ref: API C<21>-Footnote-53585871
Ref: API C<21>-Footnote-63585927
Ref: API C<21>-Footnote-73585983
Ref: API C<21>-Footnote-83586038
Ref: API C<21>-Footnote-93586094
Ref: API C<21>-Footnote-103586150
Ref: API C<21>-Footnote-113586207
Ref: API C<21>-Footnote-123586264
Ref: API C<21>-Footnote-133586321
Ref: API C<21>-Footnote-143586378
Ref: API C<21>-Footnote-153586435
Ref: API C<21>-Footnote-163586492
Ref: API C<21>-Footnote-173586549
Ref: API C<21>-Footnote-183586606
Ref: API C<21>-Footnote-193586663
Ref: API C<21>-Footnote-203586720
Ref: API C<21>-Footnote-213586777
Ref: API C<21>-Footnote-223586834
Ref: API C<21>-Footnote-233586891
Ref: API C<21>-Footnote-243586948
Ref: API C<21>-Footnote-253587005
Ref: API C<21>-Footnote-263587062
Ref: API C<21>-Footnote-273587119
Ref: API C<21>-Footnote-283587176
Ref: API C<21>-Footnote-293587233
Ref: API C<21>-Footnote-303587290
Ref: API C<21>-Footnote-313587347
Ref: API C<21>-Footnote-323587404
Ref: API C<21>-Footnote-333587447
Ref: API C<21>-Footnote-343587504
Ref: API C<21>-Footnote-353587561
Ref: API C<21>-Footnote-363587618
Ref: API C<21>-Footnote-373587675
Ref: API C<21>-Footnote-383587732
Ref: API C<21>-Footnote-393587789
Ref: API C<21>-Footnote-403587846
Ref: API C<21>-Footnote-413587903
Ref: API C<21>-Footnote-423587960
Ref: API C<21>-Footnote-433588017
Ref: API C<21>-Footnote-443588074
Ref: API C<21>-Footnote-453588131
Ref: API C<21>-Footnote-463588188
Ref: API C<21>-Footnote-473588245
Ref: API C<21>-Footnote-483588302
Ref: API C<21>-Footnote-493588359
Ref: API C<21>-Footnote-503588415
Ref: API C<21>-Footnote-513588472
Ref: API C<21>-Footnote-523588529
Ref: API C<21>-Footnote-533588586
Ref: API C<21>-Footnote-543588643
Ref: API C<21>-Footnote-553588700
Ref: API C<21>-Footnote-563588757
Ref: API C<21>-Footnote-573588814
Ref: API C<21>-Footnote-583588871
Ref: API C<21>-Footnote-593588937
Node: Python 3 12 0 beta 13589003
Ref: whatsnew/changelog python-3-12-0-beta-13589129
Ref: 18103589129
Node: Segurança<18>3589747
Ref: whatsnew/changelog id2143589841
Ref: 18113589841
Ref: Segurança<18>-Footnote-13590663
Ref: Segurança<18>-Footnote-23590718
Ref: Segurança<18>-Footnote-33590774
Ref: Segurança<18>-Footnote-43590829
Ref: Segurança<18>-Footnote-53590885
Node: Biblioteca<39>3590941
Ref: whatsnew/changelog id2153591067
Ref: 18123591067
Ref: Biblioteca<39>-Footnote-13591289
Node: Núcleo e embutidos<35>3591345
Ref: whatsnew/changelog id2163591471
Ref: 18133591471
Ref: Núcleo e embutidos<35>-Footnote-13597904
Ref: Núcleo e embutidos<35>-Footnote-23597960
Ref: Núcleo e embutidos<35>-Footnote-33598016
Ref: Núcleo e embutidos<35>-Footnote-43598058
Ref: Núcleo e embutidos<35>-Footnote-53598114
Ref: Núcleo e embutidos<35>-Footnote-63598170
Ref: Núcleo e embutidos<35>-Footnote-73598226
Ref: Núcleo e embutidos<35>-Footnote-83598268
Ref: Núcleo e embutidos<35>-Footnote-93598324
Ref: Núcleo e embutidos<35>-Footnote-103598380
Ref: Núcleo e embutidos<35>-Footnote-113598436
Ref: Núcleo e embutidos<35>-Footnote-123598492
Ref: Núcleo e embutidos<35>-Footnote-133598549
Ref: Núcleo e embutidos<35>-Footnote-143598606
Ref: Núcleo e embutidos<35>-Footnote-153598649
Ref: Núcleo e embutidos<35>-Footnote-163598706
Ref: Núcleo e embutidos<35>-Footnote-173598763
Ref: Núcleo e embutidos<35>-Footnote-183598820
Ref: Núcleo e embutidos<35>-Footnote-193598877
Ref: Núcleo e embutidos<35>-Footnote-203598934
Ref: Núcleo e embutidos<35>-Footnote-213598991
Ref: Núcleo e embutidos<35>-Footnote-223599048
Ref: Núcleo e embutidos<35>-Footnote-233599105
Ref: Núcleo e embutidos<35>-Footnote-243599162
Ref: Núcleo e embutidos<35>-Footnote-253599219
Node: Biblioteca<40>3599262
Ref: whatsnew/changelog id2173599397
Ref: 18143599397
Ref: Biblioteca<40>-Footnote-13599826
Ref: Biblioteca<40>-Footnote-23599882
Node: Núcleo e embutidos<36>3599938
Ref: whatsnew/changelog id2183600064
Ref: 18153600064
Ref: Núcleo e embutidos<36>-Footnote-13602415
Ref: Núcleo e embutidos<36>-Footnote-23602471
Ref: Núcleo e embutidos<36>-Footnote-33602527
Ref: Núcleo e embutidos<36>-Footnote-43602583
Ref: Núcleo e embutidos<36>-Footnote-53602639
Ref: Núcleo e embutidos<36>-Footnote-63602695
Ref: Núcleo e embutidos<36>-Footnote-73602751
Ref: Núcleo e embutidos<36>-Footnote-83602807
Ref: Núcleo e embutidos<36>-Footnote-93602862
Ref: Núcleo e embutidos<36>-Footnote-103602918
Ref: Núcleo e embutidos<36>-Footnote-113602974
Ref: Núcleo e embutidos<36>-Footnote-123603030
Ref: Núcleo e embutidos<36>-Footnote-133603073
Node: Biblioteca<41>3603130
Ref: whatsnew/changelog id2193603265
Ref: 18163603265
Ref: Biblioteca<41>-Footnote-13603472
Node: Núcleo e embutidos<37>3603528
Ref: whatsnew/changelog id2203603654
Ref: 18173603654
Ref: Núcleo e embutidos<37>-Footnote-13605307
Ref: Núcleo e embutidos<37>-Footnote-23605363
Ref: Núcleo e embutidos<37>-Footnote-33605418
Ref: Núcleo e embutidos<37>-Footnote-43605474
Ref: Núcleo e embutidos<37>-Footnote-53605530
Ref: Núcleo e embutidos<37>-Footnote-63605572
Ref: Núcleo e embutidos<37>-Footnote-73605627
Ref: Núcleo e embutidos<37>-Footnote-83605683
Ref: Núcleo e embutidos<37>-Footnote-93605725
Ref: Núcleo e embutidos<37>-Footnote-103605780
Ref: Núcleo e embutidos<37>-Footnote-113605823
Ref: Núcleo e embutidos<37>-Footnote-123605879
Ref: Núcleo e embutidos<37>-Footnote-133605935
Node: Biblioteca<42>3606001
Ref: whatsnew/changelog id2213606131
Ref: 18183606131
Ref: Biblioteca<42>-Footnote-13629791
Ref: Biblioteca<42>-Footnote-23629856
Ref: Biblioteca<42>-Footnote-33629912
Ref: Biblioteca<42>-Footnote-43629954
Ref: Biblioteca<42>-Footnote-53630010
Ref: Biblioteca<42>-Footnote-63630066
Ref: Biblioteca<42>-Footnote-73630122
Ref: Biblioteca<42>-Footnote-83630178
Ref: Biblioteca<42>-Footnote-93630233
Ref: Biblioteca<42>-Footnote-103630289
Ref: Biblioteca<42>-Footnote-113630346
Ref: Biblioteca<42>-Footnote-123630403
Ref: Biblioteca<42>-Footnote-133630460
Ref: Biblioteca<42>-Footnote-143630517
Ref: Biblioteca<42>-Footnote-153630574
Ref: Biblioteca<42>-Footnote-163630631
Ref: Biblioteca<42>-Footnote-173630688
Ref: Biblioteca<42>-Footnote-183630764
Ref: Biblioteca<42>-Footnote-193630821
Ref: Biblioteca<42>-Footnote-203630878
Ref: Biblioteca<42>-Footnote-213630934
Ref: Biblioteca<42>-Footnote-223630991
Ref: Biblioteca<42>-Footnote-233631057
Ref: Biblioteca<42>-Footnote-243631114
Ref: Biblioteca<42>-Footnote-253631170
Ref: Biblioteca<42>-Footnote-263631226
Ref: Biblioteca<42>-Footnote-273631283
Ref: Biblioteca<42>-Footnote-283631340
Ref: Biblioteca<42>-Footnote-293631397
Ref: Biblioteca<42>-Footnote-303631454
Ref: Biblioteca<42>-Footnote-313631511
Ref: Biblioteca<42>-Footnote-323631568
Ref: Biblioteca<42>-Footnote-333631625
Ref: Biblioteca<42>-Footnote-343631668
Ref: Biblioteca<42>-Footnote-353631725
Ref: Biblioteca<42>-Footnote-363631782
Ref: Biblioteca<42>-Footnote-373631839
Ref: Biblioteca<42>-Footnote-383631896
Ref: Biblioteca<42>-Footnote-393631952
Ref: Biblioteca<42>-Footnote-403632009
Ref: Biblioteca<42>-Footnote-413632065
Ref: Biblioteca<42>-Footnote-423632122
Ref: Biblioteca<42>-Footnote-433632179
Ref: Biblioteca<42>-Footnote-443632236
Ref: Biblioteca<42>-Footnote-453632293
Ref: Biblioteca<42>-Footnote-463632350
Ref: Biblioteca<42>-Footnote-473632407
Ref: Biblioteca<42>-Footnote-483632463
Ref: Biblioteca<42>-Footnote-493632519
Ref: Biblioteca<42>-Footnote-503632576
Ref: Biblioteca<42>-Footnote-513632633
Ref: Biblioteca<42>-Footnote-523632690
Ref: Biblioteca<42>-Footnote-533632747
Ref: Biblioteca<42>-Footnote-543632803
Ref: Biblioteca<42>-Footnote-553632860
Ref: Biblioteca<42>-Footnote-563632916
Ref: Biblioteca<42>-Footnote-573632973
Ref: Biblioteca<42>-Footnote-583633030
Ref: Biblioteca<42>-Footnote-593633086
Ref: Biblioteca<42>-Footnote-603633142
Ref: Biblioteca<42>-Footnote-613633199
Ref: Biblioteca<42>-Footnote-623633256
Ref: Biblioteca<42>-Footnote-633633312
Ref: Biblioteca<42>-Footnote-643633369
Ref: Biblioteca<42>-Footnote-653633426
Ref: Biblioteca<42>-Footnote-663633483
Ref: Biblioteca<42>-Footnote-673633540
Ref: Biblioteca<42>-Footnote-683633597
Ref: Biblioteca<42>-Footnote-693633654
Ref: Biblioteca<42>-Footnote-703633711
Ref: Biblioteca<42>-Footnote-713633768
Ref: Biblioteca<42>-Footnote-723633825
Ref: Biblioteca<42>-Footnote-733633882
Ref: Biblioteca<42>-Footnote-743633939
Ref: Biblioteca<42>-Footnote-753633996
Ref: Biblioteca<42>-Footnote-763634053
Ref: Biblioteca<42>-Footnote-773634110
Ref: Biblioteca<42>-Footnote-783634167
Ref: Biblioteca<42>-Footnote-793634210
Ref: Biblioteca<42>-Footnote-803634267
Ref: Biblioteca<42>-Footnote-813634324
Ref: Biblioteca<42>-Footnote-823634367
Ref: Biblioteca<42>-Footnote-833634423
Ref: Biblioteca<42>-Footnote-843634479
Ref: Biblioteca<42>-Footnote-853634536
Ref: Biblioteca<42>-Footnote-863634593
Ref: Biblioteca<42>-Footnote-873634650
Ref: Biblioteca<42>-Footnote-883634707
Ref: Biblioteca<42>-Footnote-893634764
Ref: Biblioteca<42>-Footnote-903634807
Ref: Biblioteca<42>-Footnote-913634864
Ref: Biblioteca<42>-Footnote-923634907
Ref: Biblioteca<42>-Footnote-933634963
Ref: Biblioteca<42>-Footnote-943635020
Ref: Biblioteca<42>-Footnote-953635077
Ref: Biblioteca<42>-Footnote-963635120
Ref: Biblioteca<42>-Footnote-973635177
Ref: Biblioteca<42>-Footnote-983635234
Ref: Biblioteca<42>-Footnote-993635291
Ref: Biblioteca<42>-Footnote-1003635347
Ref: Biblioteca<42>-Footnote-1013635405
Ref: Biblioteca<42>-Footnote-1023635463
Ref: Biblioteca<42>-Footnote-1033635521
Ref: Biblioteca<42>-Footnote-1043635579
Ref: Biblioteca<42>-Footnote-1053635637
Ref: Biblioteca<42>-Footnote-1063635695
Ref: Biblioteca<42>-Footnote-1073635752
Ref: Biblioteca<42>-Footnote-1083635809
Ref: Biblioteca<42>-Footnote-1093635867
Ref: Biblioteca<42>-Footnote-1103635911
Ref: Biblioteca<42>-Footnote-1113635968
Ref: Biblioteca<42>-Footnote-1123636026
Ref: Biblioteca<42>-Footnote-1133636084
Ref: Biblioteca<42>-Footnote-1143636141
Ref: Biblioteca<42>-Footnote-1153636198
Ref: Biblioteca<42>-Footnote-1163636255
Ref: Biblioteca<42>-Footnote-1173636313
Ref: Biblioteca<42>-Footnote-1183636371
Ref: Biblioteca<42>-Footnote-1193636428
Ref: Biblioteca<42>-Footnote-1203636485
Ref: Biblioteca<42>-Footnote-1213636542
Ref: Biblioteca<42>-Footnote-1223636599
Ref: Biblioteca<42>-Footnote-1233636656
Ref: Biblioteca<42>-Footnote-1243636713
Ref: Biblioteca<42>-Footnote-1253636770
Ref: Biblioteca<42>-Footnote-1263636827
Ref: Biblioteca<42>-Footnote-1273636884
Ref: Biblioteca<42>-Footnote-1283636941
Ref: Biblioteca<42>-Footnote-1293636998
Ref: Biblioteca<42>-Footnote-1303637055
Ref: Biblioteca<42>-Footnote-1313637112
Ref: Biblioteca<42>-Footnote-1323637169
Ref: Biblioteca<42>-Footnote-1333637226
Ref: Biblioteca<42>-Footnote-1343637293
Ref: Biblioteca<42>-Footnote-1353637360
Ref: Biblioteca<42>-Footnote-1363637427
Ref: Biblioteca<42>-Footnote-1373637494
Ref: Biblioteca<42>-Footnote-1383637561
Ref: Biblioteca<42>-Footnote-1393637628
Ref: Biblioteca<42>-Footnote-1403637695
Node: Documentação<17>3637762
Ref: whatsnew/changelog id2223637879
Ref: 18243637879
Ref: Documentação<17>-Footnote-13638652
Ref: Documentação<17>-Footnote-23638707
Ref: Documentação<17>-Footnote-33638763
Ref: Documentação<17>-Footnote-43638805
Ref: Documentação<17>-Footnote-53638860
Ref: Documentação<17>-Footnote-63638915
Node: Testes<21>3638970
Ref: whatsnew/changelog id2233639089
Ref: 18253639089
Ref: Testes<21>-Footnote-13640008
Ref: Testes<21>-Footnote-23640064
Ref: Testes<21>-Footnote-33640120
Ref: Testes<21>-Footnote-43640175
Ref: Testes<21>-Footnote-53640231
Ref: Testes<21>-Footnote-63640287
Node: Construção<21>3640342
Ref: whatsnew/changelog id2243640454
Ref: 18273640454
Ref: Construção<21>-Footnote-13642052
Ref: Construção<21>-Footnote-23642108
Ref: Construção<21>-Footnote-33642163
Ref: Construção<21>-Footnote-43642219
Ref: Construção<21>-Footnote-53642275
Ref: Construção<21>-Footnote-63642331
Ref: Construção<21>-Footnote-73642386
Ref: Construção<21>-Footnote-83642441
Ref: Construção<21>-Footnote-93642497
Node: Windows<19>3642552
Ref: whatsnew/changelog id2253642663
Ref: 18283642663
Ref: Windows<19>-Footnote-13643518
Ref: Windows<19>-Footnote-23643574
Ref: Windows<19>-Footnote-33643629
Ref: Windows<19>-Footnote-43643685
Ref: Windows<19>-Footnote-53643741
Ref: Windows<19>-Footnote-63643797
Node: macOS<14>3643852
Ref: whatsnew/changelog id2263643955
Ref: 18293643955
Ref: macOS<14>-Footnote-13644759
Ref: macOS<14>-Footnote-23644814
Ref: macOS<14>-Footnote-33644870
Ref: macOS<14>-Footnote-43644926
Ref: macOS<14>-Footnote-53644982
Ref: macOS<14>-Footnote-63645037
Node: IDLE<18>3645093
Ref: whatsnew/changelog id2273645206
Ref: 182a3645206
Ref: IDLE<18>-Footnote-13645490
Ref: IDLE<18>-Footnote-23645546
Ref: IDLE<18>-Footnote-33645602
Node: Ferramentas/Demos<13>3645657
Ref: whatsnew/changelog id2283645770
Ref: 182b3645770
Ref: Ferramentas/Demos<13>-Footnote-13646042
Node: API C<22>3646098
Ref: whatsnew/changelog id2293646194
Ref: 182c3646194
Ref: API C<22>-Footnote-13649181
Ref: API C<22>-Footnote-23649237
Ref: API C<22>-Footnote-33649293
Ref: API C<22>-Footnote-43649349
Ref: API C<22>-Footnote-53649405
Ref: API C<22>-Footnote-63649461
Ref: API C<22>-Footnote-73649517
Ref: API C<22>-Footnote-83649559
Ref: API C<22>-Footnote-93649615
Ref: API C<22>-Footnote-103649671
Ref: API C<22>-Footnote-113649727
Node: Python 3 12 0 alpha 73649783
Ref: whatsnew/changelog python-3-12-0-alpha-73649909
Ref: 18333649909
Node: Núcleo e embutidos<38>3650435
Ref: whatsnew/changelog id2303650539
Ref: 18343650539
Ref: Núcleo e embutidos<38>-Footnote-13651876
Ref: Núcleo e embutidos<38>-Footnote-23651932
Ref: Núcleo e embutidos<38>-Footnote-33651987
Ref: Núcleo e embutidos<38>-Footnote-43652043
Ref: Núcleo e embutidos<38>-Footnote-53652099
Ref: Núcleo e embutidos<38>-Footnote-63652155
Ref: Núcleo e embutidos<38>-Footnote-73652211
Ref: Núcleo e embutidos<38>-Footnote-83652267
Ref: Núcleo e embutidos<38>-Footnote-93652323
Ref: Núcleo e embutidos<38>-Footnote-103652379
Node: Biblioteca<43>3652435
Ref: whatsnew/changelog id2313652571
Ref: 18363652571
Ref: Biblioteca<43>-Footnote-13652884
Node: Núcleo e embutidos<39>3652940
Ref: whatsnew/changelog id2323653069
Ref: 18373653069
Ref: Núcleo e embutidos<39>-Footnote-13654394
Ref: Núcleo e embutidos<39>-Footnote-23654450
Ref: Núcleo e embutidos<39>-Footnote-33654506
Ref: Núcleo e embutidos<39>-Footnote-43654562
Ref: Núcleo e embutidos<39>-Footnote-53654604
Ref: Núcleo e embutidos<39>-Footnote-63654660
Ref: Núcleo e embutidos<39>-Footnote-73654716
Ref: Núcleo e embutidos<39>-Footnote-83654772
Node: Construção<22>3654828
Ref: whatsnew/changelog id2333654966
Ref: 18383654966
Ref: Construção<22>-Footnote-13655158
Node: Núcleo e embutidos<40>3655214
Ref: whatsnew/changelog id2343655343
Ref: 18393655343
Ref: Núcleo e embutidos<40>-Footnote-13655546
Node: Biblioteca<44>3655602
Ref: whatsnew/changelog id2353655733
Ref: 183a3655733
Ref: Biblioteca<44>-Footnote-13663681
Ref: Biblioteca<44>-Footnote-23663748
Ref: Biblioteca<44>-Footnote-33663790
Ref: Biblioteca<44>-Footnote-43663846
Ref: Biblioteca<44>-Footnote-53663902
Ref: Biblioteca<44>-Footnote-63663958
Ref: Biblioteca<44>-Footnote-73664014
Ref: Biblioteca<44>-Footnote-83664070
Ref: Biblioteca<44>-Footnote-93664126
Ref: Biblioteca<44>-Footnote-103664182
Ref: Biblioteca<44>-Footnote-113664239
Ref: Biblioteca<44>-Footnote-123664296
Ref: Biblioteca<44>-Footnote-133664353
Ref: Biblioteca<44>-Footnote-143664410
Ref: Biblioteca<44>-Footnote-153664467
Ref: Biblioteca<44>-Footnote-163664523
Ref: Biblioteca<44>-Footnote-173664579
Ref: Biblioteca<44>-Footnote-183664635
Ref: Biblioteca<44>-Footnote-193664692
Ref: Biblioteca<44>-Footnote-203664749
Ref: Biblioteca<44>-Footnote-213664806
Ref: Biblioteca<44>-Footnote-223664863
Ref: Biblioteca<44>-Footnote-233664920
Ref: Biblioteca<44>-Footnote-243664977
Ref: Biblioteca<44>-Footnote-253665033
Ref: Biblioteca<44>-Footnote-263665090
Ref: Biblioteca<44>-Footnote-273665146
Ref: Biblioteca<44>-Footnote-283665203
Ref: Biblioteca<44>-Footnote-293665260
Ref: Biblioteca<44>-Footnote-303665317
Ref: Biblioteca<44>-Footnote-313665373
Ref: Biblioteca<44>-Footnote-323665430
Ref: Biblioteca<44>-Footnote-333665487
Ref: Biblioteca<44>-Footnote-343665544
Ref: Biblioteca<44>-Footnote-353665600
Ref: Biblioteca<44>-Footnote-363665657
Ref: Biblioteca<44>-Footnote-373665713
Ref: Biblioteca<44>-Footnote-383665769
Ref: Biblioteca<44>-Footnote-393665825
Ref: Biblioteca<44>-Footnote-403665881
Ref: Biblioteca<44>-Footnote-413665937
Ref: Biblioteca<44>-Footnote-423665993
Ref: Biblioteca<44>-Footnote-433666049
Node: Documentação<18>3666115
Ref: whatsnew/changelog id2363666233
Ref: 18413666233
Ref: Documentação<18>-Footnote-13666432
Node: Testes<22>3666488
Ref: whatsnew/changelog id2373666608
Ref: 18423666608
Ref: Testes<22>-Footnote-13666967
Ref: Testes<22>-Footnote-23667023
Ref: Testes<22>-Footnote-33667079
Node: Construção<23>3667135
Ref: whatsnew/changelog id2383667248
Ref: 18433667248
Ref: Construção<23>-Footnote-13667506
Ref: Construção<23>-Footnote-23667562
Node: Windows<20>3667618
Ref: whatsnew/changelog id2393667742
Ref: 18443667742
Ref: Windows<20>-Footnote-13668042
Ref: Windows<20>-Footnote-23668098
Node: Ferramentas/Demos<14>3668153
Ref: whatsnew/changelog id2403668270
Ref: 18453668270
Ref: Ferramentas/Demos<14>-Footnote-13668417
Node: API C<23>3668473
Ref: whatsnew/changelog id2413668570
Ref: 18463668570
Ref: API C<23>-Footnote-13668788
Node: Python 3 12 0 alpha 63668844
Ref: whatsnew/changelog python-3-12-0-alpha-63668971
Ref: 18473668971
Node: Segurança<19>3669343
Ref: whatsnew/changelog id2423669447
Ref: 18483669447
Ref: Segurança<19>-Footnote-13670388
Ref: Segurança<19>-Footnote-23670443
Ref: Segurança<19>-Footnote-33670499
Ref: Segurança<19>-Footnote-43670554
Ref: Segurança<19>-Footnote-53670609
Ref: Segurança<19>-Footnote-63670664
Ref: Segurança<19>-Footnote-73670725
Ref: Segurança<19>-Footnote-83670780
Ref: Segurança<19>-Footnote-93670828
Node: Núcleo e embutidos<41>3670884
Ref: whatsnew/changelog id2433671011
Ref: 18493671011
Ref: Núcleo e embutidos<41>-Footnote-13674652
Ref: Núcleo e embutidos<41>-Footnote-23674708
Ref: Núcleo e embutidos<41>-Footnote-33674764
Ref: Núcleo e embutidos<41>-Footnote-43674820
Ref: Núcleo e embutidos<41>-Footnote-53674876
Ref: Núcleo e embutidos<41>-Footnote-63674932
Ref: Núcleo e embutidos<41>-Footnote-73674988
Ref: Núcleo e embutidos<41>-Footnote-83675044
Ref: Núcleo e embutidos<41>-Footnote-93675100
Ref: Núcleo e embutidos<41>-Footnote-103675156
Ref: Núcleo e embutidos<41>-Footnote-113675213
Ref: Núcleo e embutidos<41>-Footnote-123675270
Ref: Núcleo e embutidos<41>-Footnote-133675326
Ref: Núcleo e embutidos<41>-Footnote-143675383
Ref: Núcleo e embutidos<41>-Footnote-153675440
Ref: Núcleo e embutidos<41>-Footnote-163675496
Ref: Núcleo e embutidos<41>-Footnote-173675552
Ref: Núcleo e embutidos<41>-Footnote-183675609
Ref: Núcleo e embutidos<41>-Footnote-193675666
Ref: Núcleo e embutidos<41>-Footnote-203675723
Ref: Núcleo e embutidos<41>-Footnote-213675780
Ref: Núcleo e embutidos<41>-Footnote-223675837
Node: Biblioteca<45>3675893
Ref: whatsnew/changelog id2443676024
Ref: 184d3676024
Ref: Biblioteca<45>-Footnote-13681873
Ref: Biblioteca<45>-Footnote-23681929
Ref: Biblioteca<45>-Footnote-33681985
Ref: Biblioteca<45>-Footnote-43682040
Ref: Biblioteca<45>-Footnote-53682095
Ref: Biblioteca<45>-Footnote-63682151
Ref: Biblioteca<45>-Footnote-73682207
Ref: Biblioteca<45>-Footnote-83682263
Ref: Biblioteca<45>-Footnote-93682319
Ref: Biblioteca<45>-Footnote-103682386
Ref: Biblioteca<45>-Footnote-113682442
Ref: Biblioteca<45>-Footnote-123682526
Ref: Biblioteca<45>-Footnote-133682583
Ref: Biblioteca<45>-Footnote-143682639
Ref: Biblioteca<45>-Footnote-153682696
Ref: Biblioteca<45>-Footnote-163682752
Ref: Biblioteca<45>-Footnote-173682808
Ref: Biblioteca<45>-Footnote-183682865
Ref: Biblioteca<45>-Footnote-193682922
Ref: Biblioteca<45>-Footnote-203682979
Ref: Biblioteca<45>-Footnote-213683036
Ref: Biblioteca<45>-Footnote-223683093
Ref: Biblioteca<45>-Footnote-233683150
Ref: Biblioteca<45>-Footnote-243683207
Ref: Biblioteca<45>-Footnote-253683263
Ref: Biblioteca<45>-Footnote-263683320
Ref: Biblioteca<45>-Footnote-273683363
Ref: Biblioteca<45>-Footnote-283683419
Ref: Biblioteca<45>-Footnote-293683476
Ref: Biblioteca<45>-Footnote-303683533
Ref: Biblioteca<45>-Footnote-313683576
Ref: Biblioteca<45>-Footnote-323683633
Ref: Biblioteca<45>-Footnote-333683689
Ref: Biblioteca<45>-Footnote-343683732
Ref: Biblioteca<45>-Footnote-353683788
Ref: Biblioteca<45>-Footnote-363683844
Node: Documentação<19>3683910
Ref: whatsnew/changelog id2453684028
Ref: 18573684028
Ref: Documentação<19>-Footnote-13684337
Ref: Documentação<19>-Footnote-23684392
Node: Testes<23>3684447
Ref: whatsnew/changelog id2463684567
Ref: 18593684567
Ref: Testes<23>-Footnote-13685145
Ref: Testes<23>-Footnote-23685201
Ref: Testes<23>-Footnote-33685256
Node: Construção<24>3685311
Ref: whatsnew/changelog id2473685424
Ref: 185a3685424
Ref: Construção<24>-Footnote-13686115
Ref: Construção<24>-Footnote-23686170
Ref: Construção<24>-Footnote-33686225
Ref: Construção<24>-Footnote-43686281
Node: Windows<21>3686336
Ref: whatsnew/changelog id2483686448
Ref: 185c3686448
Ref: Windows<21>-Footnote-13687467
Ref: Windows<21>-Footnote-23687523
Ref: Windows<21>-Footnote-33687579
Ref: Windows<21>-Footnote-43687635
Ref: Windows<21>-Footnote-53687691
Ref: Windows<21>-Footnote-63687747
Ref: Windows<21>-Footnote-73687803
Ref: Windows<21>-Footnote-83687859
Node: macOS<15>3687915
Ref: whatsnew/changelog id2493688020
Ref: 185d3688020
Ref: macOS<15>-Footnote-13688150
Node: API C<24>3688206
Ref: whatsnew/changelog id2503688291
Ref: 185e3688291
Ref: API C<24>-Footnote-13689388
Ref: API C<24>-Footnote-23689444
Ref: API C<24>-Footnote-33689499
Ref: API C<24>-Footnote-43689555
Ref: API C<24>-Footnote-53689610
Node: Python 3 12 0 alpha 53689652
Ref: whatsnew/changelog python-3-12-0-alpha-53689779
Ref: 185f3689779
Node: Segurança<20>3690111
Ref: whatsnew/changelog id2513690215
Ref: 18603690215
Ref: Segurança<20>-Footnote-13690596
Ref: Segurança<20>-Footnote-23690651
Node: Núcleo e embutidos<42>3690699
Ref: whatsnew/changelog id2533690826
Ref: 18613690826
Ref: Núcleo e embutidos<42>-Footnote-13693728
Ref: Núcleo e embutidos<42>-Footnote-23693783
Ref: Núcleo e embutidos<42>-Footnote-33693838
Ref: Núcleo e embutidos<42>-Footnote-43693894
Ref: Núcleo e embutidos<42>-Footnote-53693950
Ref: Núcleo e embutidos<42>-Footnote-63694006
Ref: Núcleo e embutidos<42>-Footnote-73694062
Ref: Núcleo e embutidos<42>-Footnote-83694118
Ref: Núcleo e embutidos<42>-Footnote-93694174
Ref: Núcleo e embutidos<42>-Footnote-103694230
Ref: Núcleo e embutidos<42>-Footnote-113694287
Ref: Núcleo e embutidos<42>-Footnote-123694344
Ref: Núcleo e embutidos<42>-Footnote-133694401
Ref: Núcleo e embutidos<42>-Footnote-143694458
Ref: Núcleo e embutidos<42>-Footnote-153694514
Ref: Núcleo e embutidos<42>-Footnote-163694571
Node: Biblioteca<46>3694628
Ref: whatsnew/changelog id2543694759
Ref: 18643694759
Ref: Biblioteca<46>-Footnote-13700025
Ref: Biblioteca<46>-Footnote-23700090
Ref: Biblioteca<46>-Footnote-33700146
Ref: Biblioteca<46>-Footnote-43700202
Ref: Biblioteca<46>-Footnote-53700258
Ref: Biblioteca<46>-Footnote-63700314
Ref: Biblioteca<46>-Footnote-73700370
Ref: Biblioteca<46>-Footnote-83700425
Ref: Biblioteca<46>-Footnote-93700467
Ref: Biblioteca<46>-Footnote-103700523
Ref: Biblioteca<46>-Footnote-113700580
Ref: Biblioteca<46>-Footnote-123700637
Ref: Biblioteca<46>-Footnote-133700693
Ref: Biblioteca<46>-Footnote-143700750
Ref: Biblioteca<46>-Footnote-153700807
Ref: Biblioteca<46>-Footnote-163700864
Ref: Biblioteca<46>-Footnote-173700920
Ref: Biblioteca<46>-Footnote-183700977
Ref: Biblioteca<46>-Footnote-193701034
Ref: Biblioteca<46>-Footnote-203701090
Ref: Biblioteca<46>-Footnote-213701146
Ref: Biblioteca<46>-Footnote-223701202
Ref: Biblioteca<46>-Footnote-233701258
Ref: Biblioteca<46>-Footnote-243701314
Ref: Biblioteca<46>-Footnote-253701370
Ref: Biblioteca<46>-Footnote-263701426
Ref: Biblioteca<46>-Footnote-273701482
Ref: Biblioteca<46>-Footnote-283701548
Ref: Biblioteca<46>-Footnote-293701614
Ref: Biblioteca<46>-Footnote-303701680
Node: Documentação<20>3701736
Ref: whatsnew/changelog id2553701854
Ref: 186d3701854
Ref: Documentação<20>-Footnote-13702139
Node: Testes<24>3702194
Ref: whatsnew/changelog id2563702314
Ref: 186e3702314
Ref: Testes<24>-Footnote-13702478
Node: Construção<25>3702534
Ref: whatsnew/changelog id2573702647
Ref: 186f3702647
Ref: Construção<25>-Footnote-13704098
Ref: Construção<25>-Footnote-23704154
Ref: Construção<25>-Footnote-33704210
Ref: Construção<25>-Footnote-43704265
Ref: Construção<25>-Footnote-53704321
Ref: Construção<25>-Footnote-63704363
Ref: Construção<25>-Footnote-73704419
Ref: Construção<25>-Footnote-83704475
Ref: Construção<25>-Footnote-93704530
Ref: Construção<25>-Footnote-103704585
Node: Windows<22>3704641
Ref: whatsnew/changelog id2583704735
Ref: 18703704735
Ref: Windows<22>-Footnote-13705987
Ref: Windows<22>-Footnote-23706043
Ref: Windows<22>-Footnote-33706099
Ref: Windows<22>-Footnote-43706154
Ref: Windows<22>-Footnote-53706210
Ref: Windows<22>-Footnote-63706265
Ref: Windows<22>-Footnote-73706321
Node: Python 3 12 0 alpha 43706377
Ref: whatsnew/changelog python-3-12-0-alpha-43706504
Ref: 18713706504
Node: Núcleo e embutidos<43>3707046
Ref: whatsnew/changelog id2593707150
Ref: 18723707150
Ref: Núcleo e embutidos<43>-Footnote-13709061
Ref: Núcleo e embutidos<43>-Footnote-23709117
Ref: Núcleo e embutidos<43>-Footnote-33709172
Ref: Núcleo e embutidos<43>-Footnote-43709227
Ref: Núcleo e embutidos<43>-Footnote-53709283
Ref: Núcleo e embutidos<43>-Footnote-63709339
Ref: Núcleo e embutidos<43>-Footnote-73709395
Ref: Núcleo e embutidos<43>-Footnote-83709451
Ref: Núcleo e embutidos<43>-Footnote-93709507
Ref: Núcleo e embutidos<43>-Footnote-103709563
Ref: Núcleo e embutidos<43>-Footnote-113709619
Ref: Núcleo e embutidos<43>-Footnote-123709662
Ref: Núcleo e embutidos<43>-Footnote-133709719
Node: Biblioteca<47>3709776
Ref: whatsnew/changelog id2603709912
Ref: 18743709912
Ref: Biblioteca<47>-Footnote-13710107
Node: Núcleo e embutidos<44>3710163
Ref: whatsnew/changelog id2613710290
Ref: 18763710290
Ref: Núcleo e embutidos<44>-Footnote-13713026
Ref: Núcleo e embutidos<44>-Footnote-23713082
Ref: Núcleo e embutidos<44>-Footnote-33713138
Ref: Núcleo e embutidos<44>-Footnote-43713193
Ref: Núcleo e embutidos<44>-Footnote-53713249
Ref: Núcleo e embutidos<44>-Footnote-63713304
Ref: Núcleo e embutidos<44>-Footnote-73713360
Ref: Núcleo e embutidos<44>-Footnote-83713415
Ref: Núcleo e embutidos<44>-Footnote-93713470
Ref: Núcleo e embutidos<44>-Footnote-103713525
Ref: Núcleo e embutidos<44>-Footnote-113713582
Ref: Núcleo e embutidos<44>-Footnote-123713639
Ref: Núcleo e embutidos<44>-Footnote-133713696
Ref: Núcleo e embutidos<44>-Footnote-143713753
Ref: Núcleo e embutidos<44>-Footnote-153713809
Ref: Núcleo e embutidos<44>-Footnote-163713865
Ref: Núcleo e embutidos<44>-Footnote-173713921
Ref: Núcleo e embutidos<44>-Footnote-183713977
Node: Biblioteca<48>3714033
Ref: whatsnew/changelog id2623714169
Ref: 18783714169
Ref: Biblioteca<48>-Footnote-13714313
Node: Núcleo e embutidos<45>3714368
Ref: whatsnew/changelog id2633714495
Ref: 187a3714495
Ref: Núcleo e embutidos<45>-Footnote-13714773
Node: Biblioteca<49>3714838
Ref: whatsnew/changelog id2643714969
Ref: 187b3714969
Ref: Biblioteca<49>-Footnote-13725275
Ref: Biblioteca<49>-Footnote-23725331
Ref: Biblioteca<49>-Footnote-33725387
Ref: Biblioteca<49>-Footnote-43725443
Ref: Biblioteca<49>-Footnote-53725499
Ref: Biblioteca<49>-Footnote-63725554
Ref: Biblioteca<49>-Footnote-73725609
Ref: Biblioteca<49>-Footnote-83725665
Ref: Biblioteca<49>-Footnote-93725721
Ref: Biblioteca<49>-Footnote-103725776
Ref: Biblioteca<49>-Footnote-113725833
Ref: Biblioteca<49>-Footnote-123725889
Ref: Biblioteca<49>-Footnote-133725946
Ref: Biblioteca<49>-Footnote-143726002
Ref: Biblioteca<49>-Footnote-153726058
Ref: Biblioteca<49>-Footnote-163726115
Ref: Biblioteca<49>-Footnote-173726172
Ref: Biblioteca<49>-Footnote-183726229
Ref: Biblioteca<49>-Footnote-193726286
Ref: Biblioteca<49>-Footnote-203726343
Ref: Biblioteca<49>-Footnote-213726400
Ref: Biblioteca<49>-Footnote-223726457
Ref: Biblioteca<49>-Footnote-233726513
Ref: Biblioteca<49>-Footnote-243726570
Ref: Biblioteca<49>-Footnote-253726627
Ref: Biblioteca<49>-Footnote-263726684
Ref: Biblioteca<49>-Footnote-273726740
Ref: Biblioteca<49>-Footnote-283726797
Ref: Biblioteca<49>-Footnote-293726854
Ref: Biblioteca<49>-Footnote-303726911
Ref: Biblioteca<49>-Footnote-313726968
Ref: Biblioteca<49>-Footnote-323727034
Ref: Biblioteca<49>-Footnote-333727091
Ref: Biblioteca<49>-Footnote-343727147
Ref: Biblioteca<49>-Footnote-353727203
Ref: Biblioteca<49>-Footnote-363727259
Ref: Biblioteca<49>-Footnote-373727315
Ref: Biblioteca<49>-Footnote-383727371
Ref: Biblioteca<49>-Footnote-393727427
Ref: Biblioteca<49>-Footnote-403727483
Ref: Biblioteca<49>-Footnote-413727539
Ref: Biblioteca<49>-Footnote-423727595
Ref: Biblioteca<49>-Footnote-433727638
Ref: Biblioteca<49>-Footnote-443727694
Ref: Biblioteca<49>-Footnote-453727750
Ref: Biblioteca<49>-Footnote-463727806
Ref: Biblioteca<49>-Footnote-473727862
Ref: Biblioteca<49>-Footnote-483727918
Ref: Biblioteca<49>-Footnote-493727974
Ref: Biblioteca<49>-Footnote-503728030
Ref: Biblioteca<49>-Footnote-513728086
Ref: Biblioteca<49>-Footnote-523728142
Ref: Biblioteca<49>-Footnote-533728198
Ref: Biblioteca<49>-Footnote-543728254
Ref: Biblioteca<49>-Footnote-553728320
Ref: Biblioteca<49>-Footnote-563728386
Node: Documentação<21>3728452
Ref: whatsnew/changelog id2653728570
Ref: 18853728570
Ref: Documentação<21>-Footnote-13729153
Ref: Documentação<21>-Footnote-23729209
Ref: Documentação<21>-Footnote-33729265
Node: Testes<25>3729330
Ref: whatsnew/changelog id2663729450
Ref: 18873729450
Ref: Testes<25>-Footnote-13729907
Ref: Testes<25>-Footnote-23729963
Ref: Testes<25>-Footnote-33730019
Node: Construção<26>3730074
Ref: whatsnew/changelog id2673730187
Ref: 18883730187
Ref: Construção<26>-Footnote-13731086
Ref: Construção<26>-Footnote-23731142
Ref: Construção<26>-Footnote-33731197
Node: Windows<23>3731262
Ref: whatsnew/changelog id2683731374
Ref: 18893731374
Ref: Windows<23>-Footnote-13732301
Ref: Windows<23>-Footnote-23732357
Ref: Windows<23>-Footnote-33732412
Ref: Windows<23>-Footnote-43732467
Ref: Windows<23>-Footnote-53732522
Ref: Windows<23>-Footnote-63732587
Node: macOS<16>3732652
Ref: whatsnew/changelog id2693732769
Ref: 188c3732769
Ref: macOS<16>-Footnote-13733053
Ref: macOS<16>-Footnote-23733109
Node: Ferramentas/Demos<15>3733165
Ref: whatsnew/changelog id2703733280
Ref: 188d3733280
Ref: Ferramentas/Demos<15>-Footnote-13733668
Ref: Ferramentas/Demos<15>-Footnote-23733733
Node: API C<25>3733789
Ref: whatsnew/changelog id2713733886
Ref: 188e3733886
Ref: API C<25>-Footnote-13734455
Ref: API C<25>-Footnote-23734510
Ref: API C<25>-Footnote-33734565
Node: Python 3 12 0 alpha 33734620
Ref: whatsnew/changelog python-3-12-0-alpha-33734747
Ref: 188f3734747
Node: Segurança<21>3735241
Ref: whatsnew/changelog id2723735345
Ref: 18903735345
Ref: Segurança<21>-Footnote-13735908
Ref: Segurança<21>-Footnote-23735964
Node: Núcleo e embutidos<46>3736019
Ref: whatsnew/changelog id2733736146
Ref: 18913736146
Ref: Núcleo e embutidos<46>-Footnote-13737469
Ref: Núcleo e embutidos<46>-Footnote-23737524
Ref: Núcleo e embutidos<46>-Footnote-33737579
Ref: Núcleo e embutidos<46>-Footnote-43737634
Ref: Núcleo e embutidos<46>-Footnote-53737689
Ref: Núcleo e embutidos<46>-Footnote-63737744
Ref: Núcleo e embutidos<46>-Footnote-73737799
Node: Biblioteca<50>3737854
Ref: whatsnew/changelog id2743737990
Ref: 18923737990
Ref: Biblioteca<50>-Footnote-13738331
Ref: Biblioteca<50>-Footnote-23738386
Node: Núcleo e embutidos<47>3738441
Ref: whatsnew/changelog id2753738568
Ref: 18933738568
Ref: Núcleo e embutidos<47>-Footnote-13740384
Ref: Núcleo e embutidos<47>-Footnote-23740439
Ref: Núcleo e embutidos<47>-Footnote-33740494
Ref: Núcleo e embutidos<47>-Footnote-43740549
Ref: Núcleo e embutidos<47>-Footnote-53740604
Ref: Núcleo e embutidos<47>-Footnote-63740659
Ref: Núcleo e embutidos<47>-Footnote-73740714
Ref: Núcleo e embutidos<47>-Footnote-83740779
Ref: Núcleo e embutidos<47>-Footnote-93740844
Node: Biblioteca<51>3740909
Ref: whatsnew/changelog id2763741040
Ref: 18943741040
Ref: Biblioteca<51>-Footnote-13747288
Ref: Biblioteca<51>-Footnote-23747344
Ref: Biblioteca<51>-Footnote-33747399
Ref: Biblioteca<51>-Footnote-43747454
Ref: Biblioteca<51>-Footnote-53747509
Ref: Biblioteca<51>-Footnote-63747564
Ref: Biblioteca<51>-Footnote-73747619
Ref: Biblioteca<51>-Footnote-83747674
Ref: Biblioteca<51>-Footnote-93747729
Ref: Biblioteca<51>-Footnote-103747784
Ref: Biblioteca<51>-Footnote-113747840
Ref: Biblioteca<51>-Footnote-123747896
Ref: Biblioteca<51>-Footnote-133747952
Ref: Biblioteca<51>-Footnote-143748008
Ref: Biblioteca<51>-Footnote-153748064
Ref: Biblioteca<51>-Footnote-163748120
Ref: Biblioteca<51>-Footnote-173748176
Ref: Biblioteca<51>-Footnote-183748232
Ref: Biblioteca<51>-Footnote-193748288
Ref: Biblioteca<51>-Footnote-203748344
Ref: Biblioteca<51>-Footnote-213748400
Ref: Biblioteca<51>-Footnote-223748456
Ref: Biblioteca<51>-Footnote-233748512
Ref: Biblioteca<51>-Footnote-243748568
Ref: Biblioteca<51>-Footnote-253748624
Ref: Biblioteca<51>-Footnote-263748680
Ref: Biblioteca<51>-Footnote-273748736
Ref: Biblioteca<51>-Footnote-283748792
Ref: Biblioteca<51>-Footnote-293748848
Ref: Biblioteca<51>-Footnote-303748904
Ref: Biblioteca<51>-Footnote-313748960
Ref: Biblioteca<51>-Footnote-323749026
Ref: Biblioteca<51>-Footnote-333749092
Ref: Biblioteca<51>-Footnote-343749158
Node: Documentação<22>3749224
Ref: whatsnew/changelog id2773749342
Ref: 18983749342
Ref: Documentação<22>-Footnote-13750111
Ref: Documentação<22>-Footnote-23750166
Ref: Documentação<22>-Footnote-33750218
Ref: Documentação<22>-Footnote-43750242
Ref: Documentação<22>-Footnote-53750297
Ref: Documentação<22>-Footnote-63750352
Ref: Documentação<22>-Footnote-73750407
Node: Testes<26>3750472
Ref: whatsnew/changelog id2783750592
Ref: 18993750592
Ref: Testes<26>-Footnote-13751371
Ref: Testes<26>-Footnote-23751426
Ref: Testes<26>-Footnote-33751481
Ref: Testes<26>-Footnote-43751536
Ref: Testes<26>-Footnote-53751591
Ref: Testes<26>-Footnote-63751646
Node: Construção<27>3751701
Ref: whatsnew/changelog id2793751814
Ref: 189a3751814
Ref: Construção<27>-Footnote-13752790
Ref: Construção<27>-Footnote-23752845
Ref: Construção<27>-Footnote-33752900
Ref: Construção<27>-Footnote-43752955
Ref: Construção<27>-Footnote-53753010
Node: Windows<24>3753065
Ref: whatsnew/changelog id2803753177
Ref: 189b3753177
Ref: Windows<24>-Footnote-13753717
Ref: Windows<24>-Footnote-23753772
Ref: Windows<24>-Footnote-33753827
Ref: Windows<24>-Footnote-43753882
Node: macOS<17>3753947
Ref: whatsnew/changelog id2813754064
Ref: 189c3754064
Ref: macOS<17>-Footnote-13754334
Ref: macOS<17>-Footnote-23754389
Node: Ferramentas/Demos<16>3754444
Ref: whatsnew/changelog id2823754559
Ref: 189d3754559
Ref: Ferramentas/Demos<16>-Footnote-13755063
Node: API C<26>3755118
Ref: whatsnew/changelog id2833755215
Ref: 189e3755215
Ref: API C<26>-Footnote-13756036
Ref: API C<26>-Footnote-23756091
Ref: API C<26>-Footnote-33756146
Node: Python 3 12 0 alpha 23756201
Ref: whatsnew/changelog python-3-12-0-alpha-23756328
Ref: 18a03756328
Node: Segurança<22>3756782
Ref: whatsnew/changelog id2843756886
Ref: 18a13756886
Ref: Segurança<22>-Footnote-13758022
Ref: Segurança<22>-Footnote-23758077
Ref: Segurança<22>-Footnote-33758136
Ref: Segurança<22>-Footnote-43758195
Ref: Segurança<22>-Footnote-53758254
Node: Núcleo e embutidos<48>3758309
Ref: whatsnew/changelog id2853758438
Ref: 18a23758438
Ref: Núcleo e embutidos<48>-Footnote-13765189
Ref: Núcleo e embutidos<48>-Footnote-23765244
Ref: Núcleo e embutidos<48>-Footnote-33765299
Ref: Núcleo e embutidos<48>-Footnote-43765354
Ref: Núcleo e embutidos<48>-Footnote-53765409
Ref: Núcleo e embutidos<48>-Footnote-63765464
Ref: Núcleo e embutidos<48>-Footnote-73765519
Ref: Núcleo e embutidos<48>-Footnote-83765574
Ref: Núcleo e embutidos<48>-Footnote-93765629
Ref: Núcleo e embutidos<48>-Footnote-103765684
Ref: Núcleo e embutidos<48>-Footnote-113765740
Ref: Núcleo e embutidos<48>-Footnote-123765796
Ref: Núcleo e embutidos<48>-Footnote-133765852
Ref: Núcleo e embutidos<48>-Footnote-143765908
Ref: Núcleo e embutidos<48>-Footnote-153765964
Ref: Núcleo e embutidos<48>-Footnote-163766020
Ref: Núcleo e embutidos<48>-Footnote-173766076
Ref: Núcleo e embutidos<48>-Footnote-183766132
Ref: Núcleo e embutidos<48>-Footnote-193766188
Ref: Núcleo e embutidos<48>-Footnote-203766244
Ref: Núcleo e embutidos<48>-Footnote-213766300
Ref: Núcleo e embutidos<48>-Footnote-223766356
Ref: Núcleo e embutidos<48>-Footnote-233766412
Ref: Núcleo e embutidos<48>-Footnote-243766468
Ref: Núcleo e embutidos<48>-Footnote-253766511
Ref: Núcleo e embutidos<48>-Footnote-263766567
Ref: Núcleo e embutidos<48>-Footnote-273766623
Node: Construção<28>3766679
Ref: whatsnew/changelog id2863766817
Ref: 18a93766817
Ref: Construção<28>-Footnote-13767014
Node: Núcleo e embutidos<49>3767069
Ref: whatsnew/changelog id2873767198
Ref: 18aa3767198
Ref: Núcleo e embutidos<49>-Footnote-13768338
Ref: Núcleo e embutidos<49>-Footnote-23768393
Ref: Núcleo e embutidos<49>-Footnote-33768448
Ref: Núcleo e embutidos<49>-Footnote-43768503
Ref: Núcleo e embutidos<49>-Footnote-53768558
Ref: Núcleo e embutidos<49>-Footnote-63768613
Node: Biblioteca<52>3768668
Ref: whatsnew/changelog id2883768799
Ref: 18ad3768799
Ref: Biblioteca<52>-Footnote-13774722
Ref: Biblioteca<52>-Footnote-23774777
Ref: Biblioteca<52>-Footnote-33774832
Ref: Biblioteca<52>-Footnote-43774887
Ref: Biblioteca<52>-Footnote-53774942
Ref: Biblioteca<52>-Footnote-63774997
Ref: Biblioteca<52>-Footnote-73775052
Ref: Biblioteca<52>-Footnote-83775107
Ref: Biblioteca<52>-Footnote-93775162
Ref: Biblioteca<52>-Footnote-103775217
Ref: Biblioteca<52>-Footnote-113775273
Ref: Biblioteca<52>-Footnote-123775329
Ref: Biblioteca<52>-Footnote-133775385
Ref: Biblioteca<52>-Footnote-143775428
Ref: Biblioteca<52>-Footnote-153775484
Ref: Biblioteca<52>-Footnote-163775540
Ref: Biblioteca<52>-Footnote-173775596
Ref: Biblioteca<52>-Footnote-183775652
Ref: Biblioteca<52>-Footnote-193775708
Ref: Biblioteca<52>-Footnote-203775764
Ref: Biblioteca<52>-Footnote-213775820
Ref: Biblioteca<52>-Footnote-223775876
Ref: Biblioteca<52>-Footnote-233775932
Ref: Biblioteca<52>-Footnote-243775988
Ref: Biblioteca<52>-Footnote-253776044
Ref: Biblioteca<52>-Footnote-263776100
Ref: Biblioteca<52>-Footnote-273776156
Ref: Biblioteca<52>-Footnote-283776212
Ref: Biblioteca<52>-Footnote-293776268
Ref: Biblioteca<52>-Footnote-303776324
Ref: Biblioteca<52>-Footnote-313776380
Ref: Biblioteca<52>-Footnote-323776436
Ref: Biblioteca<52>-Footnote-333776479
Ref: Biblioteca<52>-Footnote-343776535
Ref: Biblioteca<52>-Footnote-353776591
Ref: Biblioteca<52>-Footnote-363776647
Ref: Biblioteca<52>-Footnote-373776703
Ref: Biblioteca<52>-Footnote-383776746
Ref: Biblioteca<52>-Footnote-393776802
Ref: Biblioteca<52>-Footnote-403776858
Ref: Biblioteca<52>-Footnote-413776924
Ref: Biblioteca<52>-Footnote-423776990
Node: Documentação<23>3777056
Ref: whatsnew/changelog id2893777174
Ref: 18b23777174
Ref: Documentação<23>-Footnote-13777493
Ref: Documentação<23>-Footnote-23777548
Node: Testes<27>3777603
Ref: whatsnew/changelog id2903777723
Ref: 18b33777723
Ref: Testes<27>-Footnote-13778613
Ref: Testes<27>-Footnote-23778668
Ref: Testes<27>-Footnote-33778723
Ref: Testes<27>-Footnote-43778778
Ref: Testes<27>-Footnote-53778833
Node: Construção<29>3778898
Ref: whatsnew/changelog id2913779011
Ref: 18b43779011
Ref: Construção<29>-Footnote-13780716
Ref: Construção<29>-Footnote-23780771
Ref: Construção<29>-Footnote-33780826
Ref: Construção<29>-Footnote-43780881
Ref: Construção<29>-Footnote-53780936
Ref: Construção<29>-Footnote-63780991
Ref: Construção<29>-Footnote-73781046
Ref: Construção<29>-Footnote-83781136
Ref: Construção<29>-Footnote-93781191
Ref: Construção<29>-Footnote-103781246
Node: Windows<25>3781302
Ref: whatsnew/changelog id2923781414
Ref: 18b63781414
Ref: Windows<25>-Footnote-13782125
Ref: Windows<25>-Footnote-23782180
Ref: Windows<25>-Footnote-33782236
Ref: Windows<25>-Footnote-43782291
Ref: Windows<25>-Footnote-53782346
Ref: Windows<25>-Footnote-63782401
Node: macOS<18>3782456
Ref: whatsnew/changelog id2933782561
Ref: 18b73782561
Ref: macOS<18>-Footnote-13782692
Node: API C<27>3782747
Ref: whatsnew/changelog id2943782832
Ref: 18b83782832
Ref: API C<27>-Footnote-13784909
Ref: API C<27>-Footnote-23784964
Ref: API C<27>-Footnote-33785019
Ref: API C<27>-Footnote-43785074
Ref: API C<27>-Footnote-53785129
Ref: API C<27>-Footnote-63785184
Ref: API C<27>-Footnote-73785239
Node: Python 3 12 0 alpha 13785294
Ref: whatsnew/changelog python-3-12-0-alpha-13785420
Ref: 18ba3785420
Node: Segurança<23>3786556
Ref: whatsnew/changelog id2953786660
Ref: 18bb3786660
Ref: Segurança<23>-Footnote-13788500
Ref: Segurança<23>-Footnote-23788555
Ref: Segurança<23>-Footnote-33788610
Ref: Segurança<23>-Footnote-43788682
Ref: Segurança<23>-Footnote-53788738
Ref: Segurança<23>-Footnote-63788793
Ref: Segurança<23>-Footnote-73788848
Ref: Segurança<23>-Footnote-83788903
Node: Núcleo e embutidos<50>3788958
Ref: whatsnew/changelog id2963789085
Ref: 18bc3789085
Ref: Núcleo e embutidos<50>-Footnote-13790368
Ref: Núcleo e embutidos<50>-Footnote-23790423
Ref: Núcleo e embutidos<50>-Footnote-33790478
Ref: Núcleo e embutidos<50>-Footnote-43790533
Ref: Núcleo e embutidos<50>-Footnote-53790588
Ref: Núcleo e embutidos<50>-Footnote-63790643
Ref: Núcleo e embutidos<50>-Footnote-73790698
Ref: Núcleo e embutidos<50>-Footnote-83790753
Node: Biblioteca<53>3790808
Ref: whatsnew/changelog id2973790944
Ref: 18bd3790944
Ref: Biblioteca<53>-Footnote-13791217
Ref: Biblioteca<53>-Footnote-23791272
Node: Núcleo e embutidos<51>3791327
Ref: whatsnew/changelog id2983791454
Ref: 18be3791454
Ref: Núcleo e embutidos<51>-Footnote-13794906
Ref: Núcleo e embutidos<51>-Footnote-23794961
Ref: Núcleo e embutidos<51>-Footnote-33795016
Ref: Núcleo e embutidos<51>-Footnote-43795071
Ref: Núcleo e embutidos<51>-Footnote-53795126
Ref: Núcleo e embutidos<51>-Footnote-63795181
Ref: Núcleo e embutidos<51>-Footnote-73795236
Ref: Núcleo e embutidos<51>-Footnote-83795291
Ref: Núcleo e embutidos<51>-Footnote-93795346
Ref: Núcleo e embutidos<51>-Footnote-103795401
Ref: Núcleo e embutidos<51>-Footnote-113795457
Ref: Núcleo e embutidos<51>-Footnote-123795513
Ref: Núcleo e embutidos<51>-Footnote-133795569
Ref: Núcleo e embutidos<51>-Footnote-143795625
Ref: Núcleo e embutidos<51>-Footnote-153795681
Ref: Núcleo e embutidos<51>-Footnote-163795737
Ref: Núcleo e embutidos<51>-Footnote-173795793
Node: Biblioteca<54>3795849
Ref: whatsnew/changelog id2993795985
Ref: 18c33795985
Ref: Biblioteca<54>-Footnote-13796127
Node: Núcleo e embutidos<52>3796182
Ref: whatsnew/changelog id3003796309
Ref: 18c43796309
Ref: Núcleo e embutidos<52>-Footnote-13798039
Ref: Núcleo e embutidos<52>-Footnote-23798094
Ref: Núcleo e embutidos<52>-Footnote-33798149
Ref: Núcleo e embutidos<52>-Footnote-43798204
Ref: Núcleo e embutidos<52>-Footnote-53798259
Ref: Núcleo e embutidos<52>-Footnote-63798314
Ref: Núcleo e embutidos<52>-Footnote-73798369
Ref: Núcleo e embutidos<52>-Footnote-83798424
Ref: Núcleo e embutidos<52>-Footnote-93798479
Ref: Núcleo e embutidos<52>-Footnote-103798534
Ref: Núcleo e embutidos<52>-Footnote-113798590
Node: Biblioteca<55>3798646
Ref: whatsnew/changelog id3013798782
Ref: 18c63798782
Ref: Biblioteca<55>-Footnote-13798996
Ref: Biblioteca<55>-Footnote-23799051
Node: Núcleo e embutidos<53>3799106
Ref: whatsnew/changelog id3023799233
Ref: 18c73799233
Ref: Núcleo e embutidos<53>-Footnote-13808502
Ref: Núcleo e embutidos<53>-Footnote-23808557
Ref: Núcleo e embutidos<53>-Footnote-33808612
Ref: Núcleo e embutidos<53>-Footnote-43808667
Ref: Núcleo e embutidos<53>-Footnote-53808722
Ref: Núcleo e embutidos<53>-Footnote-63808777
Ref: Núcleo e embutidos<53>-Footnote-73808832
Ref: Núcleo e embutidos<53>-Footnote-83808874
Ref: Núcleo e embutidos<53>-Footnote-93808929
Ref: Núcleo e embutidos<53>-Footnote-103808984
Ref: Núcleo e embutidos<53>-Footnote-113809040
Ref: Núcleo e embutidos<53>-Footnote-123809096
Ref: Núcleo e embutidos<53>-Footnote-133809152
Ref: Núcleo e embutidos<53>-Footnote-143809208
Ref: Núcleo e embutidos<53>-Footnote-153809264
Ref: Núcleo e embutidos<53>-Footnote-163809320
Ref: Núcleo e embutidos<53>-Footnote-173809376
Ref: Núcleo e embutidos<53>-Footnote-183809432
Ref: Núcleo e embutidos<53>-Footnote-193809488
Ref: Núcleo e embutidos<53>-Footnote-203809544
Ref: Núcleo e embutidos<53>-Footnote-213809600
Ref: Núcleo e embutidos<53>-Footnote-223809656
Ref: Núcleo e embutidos<53>-Footnote-233809712
Ref: Núcleo e embutidos<53>-Footnote-243809768
Ref: Núcleo e embutidos<53>-Footnote-253809824
Ref: Núcleo e embutidos<53>-Footnote-263809880
Ref: Núcleo e embutidos<53>-Footnote-273809936
Ref: Núcleo e embutidos<53>-Footnote-283809992
Ref: Núcleo e embutidos<53>-Footnote-293810048
Ref: Núcleo e embutidos<53>-Footnote-303810104
Ref: Núcleo e embutidos<53>-Footnote-313810160
Ref: Núcleo e embutidos<53>-Footnote-323810216
Ref: Núcleo e embutidos<53>-Footnote-333810272
Ref: Núcleo e embutidos<53>-Footnote-343810328
Ref: Núcleo e embutidos<53>-Footnote-353810384
Ref: Núcleo e embutidos<53>-Footnote-363810440
Ref: Núcleo e embutidos<53>-Footnote-373810496
Ref: Núcleo e embutidos<53>-Footnote-383810552
Ref: Núcleo e embutidos<53>-Footnote-393810608
Ref: Núcleo e embutidos<53>-Footnote-403810664
Ref: Núcleo e embutidos<53>-Footnote-413810720
Ref: Núcleo e embutidos<53>-Footnote-423810776
Ref: Núcleo e embutidos<53>-Footnote-433810832
Ref: Núcleo e embutidos<53>-Footnote-443810888
Ref: Núcleo e embutidos<53>-Footnote-453810944
Ref: Núcleo e embutidos<53>-Footnote-463811000
Node: Biblioteca<56>3811056
Ref: whatsnew/changelog id3033811192
Ref: 18c93811192
Ref: Biblioteca<56>-Footnote-13811392
Node: Núcleo e embutidos<54>3811447
Ref: whatsnew/changelog id3043811574
Ref: 18cc3811574
Ref: Núcleo e embutidos<54>-Footnote-13812045
Ref: Núcleo e embutidos<54>-Footnote-23812100
Node: Biblioteca<57>3812155
Ref: whatsnew/changelog id3053812291
Ref: 18cd3812291
Ref: Biblioteca<57>-Footnote-13812578
Node: Núcleo e embutidos<55>3812633
Ref: whatsnew/changelog id3063812760
Ref: 18ce3812760
Ref: Núcleo e embutidos<55>-Footnote-13812959
Node: Biblioteca<58>3813014
Ref: whatsnew/changelog id3073813150
Ref: 18cf3813150
Ref: Biblioteca<58>-Footnote-13813599
Ref: Biblioteca<58>-Footnote-23813654
Node: Núcleo e embutidos<56>3813709
Ref: whatsnew/changelog id3083813836
Ref: 18d03813836
Ref: Núcleo e embutidos<56>-Footnote-13819331
Ref: Núcleo e embutidos<56>-Footnote-23819386
Ref: Núcleo e embutidos<56>-Footnote-33819441
Ref: Núcleo e embutidos<56>-Footnote-43819496
Ref: Núcleo e embutidos<56>-Footnote-53819551
Ref: Núcleo e embutidos<56>-Footnote-63819606
Ref: Núcleo e embutidos<56>-Footnote-73819661
Ref: Núcleo e embutidos<56>-Footnote-83819716
Ref: Núcleo e embutidos<56>-Footnote-93819771
Ref: Núcleo e embutidos<56>-Footnote-103819826
Ref: Núcleo e embutidos<56>-Footnote-113819882
Ref: Núcleo e embutidos<56>-Footnote-123819938
Ref: Núcleo e embutidos<56>-Footnote-133819981
Ref: Núcleo e embutidos<56>-Footnote-143820037
Ref: Núcleo e embutidos<56>-Footnote-153820093
Ref: Núcleo e embutidos<56>-Footnote-163820149
Ref: Núcleo e embutidos<56>-Footnote-173820205
Ref: Núcleo e embutidos<56>-Footnote-183820261
Ref: Núcleo e embutidos<56>-Footnote-193820317
Ref: Núcleo e embutidos<56>-Footnote-203820373
Ref: Núcleo e embutidos<56>-Footnote-213820429
Ref: Núcleo e embutidos<56>-Footnote-223820485
Ref: Núcleo e embutidos<56>-Footnote-233820541
Ref: Núcleo e embutidos<56>-Footnote-243820597
Ref: Núcleo e embutidos<56>-Footnote-253820653
Ref: Núcleo e embutidos<56>-Footnote-263820709
Ref: Núcleo e embutidos<56>-Footnote-273820765
Ref: Núcleo e embutidos<56>-Footnote-283820821
Ref: Núcleo e embutidos<56>-Footnote-293820877
Ref: Núcleo e embutidos<56>-Footnote-303820933
Ref: Núcleo e embutidos<56>-Footnote-313820989
Ref: Núcleo e embutidos<56>-Footnote-323821045
Ref: Núcleo e embutidos<56>-Footnote-333821101
Ref: Núcleo e embutidos<56>-Footnote-343821157
Node: Biblioteca<59>3821213
Ref: whatsnew/changelog id3093821349
Ref: 18d13821349
Ref: Biblioteca<59>-Footnote-13821790
Node: Núcleo e embutidos<57>3821845
Ref: whatsnew/changelog id3103821972
Ref: 18d23821972
Ref: Núcleo e embutidos<57>-Footnote-13827247
Ref: Núcleo e embutidos<57>-Footnote-23827302
Ref: Núcleo e embutidos<57>-Footnote-33827357
Ref: Núcleo e embutidos<57>-Footnote-43827412
Ref: Núcleo e embutidos<57>-Footnote-53827467
Ref: Núcleo e embutidos<57>-Footnote-63827522
Ref: Núcleo e embutidos<57>-Footnote-73827577
Ref: Núcleo e embutidos<57>-Footnote-83827632
Ref: Núcleo e embutidos<57>-Footnote-93827687
Ref: Núcleo e embutidos<57>-Footnote-103827742
Ref: Núcleo e embutidos<57>-Footnote-113827798
Ref: Núcleo e embutidos<57>-Footnote-123827854
Ref: Núcleo e embutidos<57>-Footnote-133827910
Ref: Núcleo e embutidos<57>-Footnote-143827966
Ref: Núcleo e embutidos<57>-Footnote-153828022
Ref: Núcleo e embutidos<57>-Footnote-163828078
Ref: Núcleo e embutidos<57>-Footnote-173828134
Ref: Núcleo e embutidos<57>-Footnote-183828190
Ref: Núcleo e embutidos<57>-Footnote-193828246
Ref: Núcleo e embutidos<57>-Footnote-203828306
Ref: Núcleo e embutidos<57>-Footnote-213828362
Ref: Núcleo e embutidos<57>-Footnote-223828418
Ref: Núcleo e embutidos<57>-Footnote-233828474
Ref: Núcleo e embutidos<57>-Footnote-243828530
Ref: Núcleo e embutidos<57>-Footnote-253828586
Ref: Núcleo e embutidos<57>-Footnote-263828642
Ref: Núcleo e embutidos<57>-Footnote-273828698
Ref: Núcleo e embutidos<57>-Footnote-283828754
Ref: Núcleo e embutidos<57>-Footnote-293828810
Ref: Núcleo e embutidos<57>-Footnote-303828866
Ref: Núcleo e embutidos<57>-Footnote-313828922
Ref: Núcleo e embutidos<57>-Footnote-323828978
Node: Biblioteca<60>3829034
Ref: whatsnew/changelog id3113829170
Ref: 18d33829170
Ref: Biblioteca<60>-Footnote-13829337
Node: Núcleo e embutidos<58>3829392
Ref: whatsnew/changelog id3123829519
Ref: 18d43829519
Ref: Núcleo e embutidos<58>-Footnote-13829976
Ref: Núcleo e embutidos<58>-Footnote-23830031
Node: Biblioteca<61>3830086
Ref: whatsnew/changelog id3133830222
Ref: 18d53830222
Ref: Biblioteca<61>-Footnote-13830381
Node: Núcleo e embutidos<59>3830436
Ref: whatsnew/changelog id3143830563
Ref: 18d63830563
Ref: Núcleo e embutidos<59>-Footnote-13831438
Ref: Núcleo e embutidos<59>-Footnote-23831493
Ref: Núcleo e embutidos<59>-Footnote-33831548
Ref: Núcleo e embutidos<59>-Footnote-43831603
Ref: Núcleo e embutidos<59>-Footnote-53831668
Ref: Núcleo e embutidos<59>-Footnote-63831733
Node: Biblioteca<62>3831798
Ref: whatsnew/changelog id3153831929
Ref: 18d73831929
Ref: Biblioteca<62>-Footnote-13875303
Ref: Biblioteca<62>-Footnote-23875358
Ref: Biblioteca<62>-Footnote-33875413
Ref: Biblioteca<62>-Footnote-43875468
Ref: Biblioteca<62>-Footnote-53875523
Ref: Biblioteca<62>-Footnote-63875578
Ref: Biblioteca<62>-Footnote-73875633
Ref: Biblioteca<62>-Footnote-83875688
Ref: Biblioteca<62>-Footnote-93875743
Ref: Biblioteca<62>-Footnote-103875798
Ref: Biblioteca<62>-Footnote-113875854
Ref: Biblioteca<62>-Footnote-123875910
Ref: Biblioteca<62>-Footnote-133875966
Ref: Biblioteca<62>-Footnote-143876022
Ref: Biblioteca<62>-Footnote-153876078
Ref: Biblioteca<62>-Footnote-163876134
Ref: Biblioteca<62>-Footnote-173876190
Ref: Biblioteca<62>-Footnote-183876246
Ref: Biblioteca<62>-Footnote-193876302
Ref: Biblioteca<62>-Footnote-203876362
Ref: Biblioteca<62>-Footnote-213876418
Ref: Biblioteca<62>-Footnote-223876474
Ref: Biblioteca<62>-Footnote-233876530
Ref: Biblioteca<62>-Footnote-243876586
Ref: Biblioteca<62>-Footnote-253876642
Ref: Biblioteca<62>-Footnote-263876698
Ref: Biblioteca<62>-Footnote-273876754
Ref: Biblioteca<62>-Footnote-283876810
Ref: Biblioteca<62>-Footnote-293876866
Ref: Biblioteca<62>-Footnote-303876922
Ref: Biblioteca<62>-Footnote-313876978
Ref: Biblioteca<62>-Footnote-323877034
Ref: Biblioteca<62>-Footnote-333877090
Ref: Biblioteca<62>-Footnote-343877146
Ref: Biblioteca<62>-Footnote-353877202
Ref: Biblioteca<62>-Footnote-363877258
Ref: Biblioteca<62>-Footnote-373877314
Ref: Biblioteca<62>-Footnote-383877370
Ref: Biblioteca<62>-Footnote-393877426
Ref: Biblioteca<62>-Footnote-403877482
Ref: Biblioteca<62>-Footnote-413877538
Ref: Biblioteca<62>-Footnote-423877594
Ref: Biblioteca<62>-Footnote-433877650
Ref: Biblioteca<62>-Footnote-443877706
Ref: Biblioteca<62>-Footnote-453877762
Ref: Biblioteca<62>-Footnote-463877818
Ref: Biblioteca<62>-Footnote-473877874
Ref: Biblioteca<62>-Footnote-483877930
Ref: Biblioteca<62>-Footnote-493877986
Ref: Biblioteca<62>-Footnote-503878042
Ref: Biblioteca<62>-Footnote-513878098
Ref: Biblioteca<62>-Footnote-523878154
Ref: Biblioteca<62>-Footnote-533878210
Ref: Biblioteca<62>-Footnote-543878266
Ref: Biblioteca<62>-Footnote-553878322
Ref: Biblioteca<62>-Footnote-563878378
Ref: Biblioteca<62>-Footnote-573878434
Ref: Biblioteca<62>-Footnote-583878490
Ref: Biblioteca<62>-Footnote-593878546
Ref: Biblioteca<62>-Footnote-603878602
Ref: Biblioteca<62>-Footnote-613878658
Ref: Biblioteca<62>-Footnote-623878714
Ref: Biblioteca<62>-Footnote-633878770
Ref: Biblioteca<62>-Footnote-643878826
Ref: Biblioteca<62>-Footnote-653878882
Ref: Biblioteca<62>-Footnote-663878938
Ref: Biblioteca<62>-Footnote-673878994
Ref: Biblioteca<62>-Footnote-683879060
Ref: Biblioteca<62>-Footnote-693879116
Ref: Biblioteca<62>-Footnote-703879172
Ref: Biblioteca<62>-Footnote-713879228
Ref: Biblioteca<62>-Footnote-723879284
Ref: Biblioteca<62>-Footnote-733879340
Ref: Biblioteca<62>-Footnote-743879396
Ref: Biblioteca<62>-Footnote-753879452
Ref: Biblioteca<62>-Footnote-763879508
Ref: Biblioteca<62>-Footnote-773879564
Ref: Biblioteca<62>-Footnote-783879620
Ref: Biblioteca<62>-Footnote-793879676
Ref: Biblioteca<62>-Footnote-803879732
Ref: Biblioteca<62>-Footnote-813879788
Ref: Biblioteca<62>-Footnote-823879844
Ref: Biblioteca<62>-Footnote-833879900
Ref: Biblioteca<62>-Footnote-843879956
Ref: Biblioteca<62>-Footnote-853880012
Ref: Biblioteca<62>-Footnote-863880068
Ref: Biblioteca<62>-Footnote-873880124
Ref: Biblioteca<62>-Footnote-883880180
Ref: Biblioteca<62>-Footnote-893880236
Ref: Biblioteca<62>-Footnote-903880292
Ref: Biblioteca<62>-Footnote-913880348
Ref: Biblioteca<62>-Footnote-923880404
Ref: Biblioteca<62>-Footnote-933880460
Ref: Biblioteca<62>-Footnote-943880516
Ref: Biblioteca<62>-Footnote-953880572
Ref: Biblioteca<62>-Footnote-963880628
Ref: Biblioteca<62>-Footnote-973880684
Ref: Biblioteca<62>-Footnote-983880740
Ref: Biblioteca<62>-Footnote-993880796
Ref: Biblioteca<62>-Footnote-1003880852
Ref: Biblioteca<62>-Footnote-1013880909
Ref: Biblioteca<62>-Footnote-1023880966
Ref: Biblioteca<62>-Footnote-1033881023
Ref: Biblioteca<62>-Footnote-1043881080
Ref: Biblioteca<62>-Footnote-1053881137
Ref: Biblioteca<62>-Footnote-1063881194
Ref: Biblioteca<62>-Footnote-1073881251
Ref: Biblioteca<62>-Footnote-1083881308
Ref: Biblioteca<62>-Footnote-1093881365
Ref: Biblioteca<62>-Footnote-1103881422
Ref: Biblioteca<62>-Footnote-1113881479
Ref: Biblioteca<62>-Footnote-1123881536
Ref: Biblioteca<62>-Footnote-1133881593
Ref: Biblioteca<62>-Footnote-1143881650
Ref: Biblioteca<62>-Footnote-1153881707
Ref: Biblioteca<62>-Footnote-1163881764
Ref: Biblioteca<62>-Footnote-1173881821
Ref: Biblioteca<62>-Footnote-1183881878
Ref: Biblioteca<62>-Footnote-1193881935
Ref: Biblioteca<62>-Footnote-1203881992
Ref: Biblioteca<62>-Footnote-1213882049
Ref: Biblioteca<62>-Footnote-1223882106
Ref: Biblioteca<62>-Footnote-1233882163
Ref: Biblioteca<62>-Footnote-1243882207
Ref: Biblioteca<62>-Footnote-1253882264
Ref: Biblioteca<62>-Footnote-1263882321
Ref: Biblioteca<62>-Footnote-1273882378
Ref: Biblioteca<62>-Footnote-1283882435
Ref: Biblioteca<62>-Footnote-1293882492
Ref: Biblioteca<62>-Footnote-1303882549
Ref: Biblioteca<62>-Footnote-1313882606
Ref: Biblioteca<62>-Footnote-1323882663
Ref: Biblioteca<62>-Footnote-1333882720
Ref: Biblioteca<62>-Footnote-1343882777
Ref: Biblioteca<62>-Footnote-1353882834
Ref: Biblioteca<62>-Footnote-1363882891
Ref: Biblioteca<62>-Footnote-1373882948
Ref: Biblioteca<62>-Footnote-1383883005
Ref: Biblioteca<62>-Footnote-1393883062
Ref: Biblioteca<62>-Footnote-1403883120
Ref: Biblioteca<62>-Footnote-1413883177
Ref: Biblioteca<62>-Footnote-1423883234
Ref: Biblioteca<62>-Footnote-1433883278
Ref: Biblioteca<62>-Footnote-1443883335
Ref: Biblioteca<62>-Footnote-1453883392
Ref: Biblioteca<62>-Footnote-1463883449
Ref: Biblioteca<62>-Footnote-1473883506
Ref: Biblioteca<62>-Footnote-1483883563
Ref: Biblioteca<62>-Footnote-1493883620
Ref: Biblioteca<62>-Footnote-1503883677
Ref: Biblioteca<62>-Footnote-1513883734
Ref: Biblioteca<62>-Footnote-1523883791
Ref: Biblioteca<62>-Footnote-1533883848
Ref: Biblioteca<62>-Footnote-1543883905
Ref: Biblioteca<62>-Footnote-1553883962
Ref: Biblioteca<62>-Footnote-1563884019
Ref: Biblioteca<62>-Footnote-1573884076
Ref: Biblioteca<62>-Footnote-1583884133
Ref: Biblioteca<62>-Footnote-1593884190
Ref: Biblioteca<62>-Footnote-1603884247
Ref: Biblioteca<62>-Footnote-1613884304
Ref: Biblioteca<62>-Footnote-1623884361
Ref: Biblioteca<62>-Footnote-1633884405
Ref: Biblioteca<62>-Footnote-1643884462
Ref: Biblioteca<62>-Footnote-1653884519
Ref: Biblioteca<62>-Footnote-1663884576
Ref: Biblioteca<62>-Footnote-1673884633
Ref: Biblioteca<62>-Footnote-1683884690
Ref: Biblioteca<62>-Footnote-1693884747
Ref: Biblioteca<62>-Footnote-1703884804
Ref: Biblioteca<62>-Footnote-1713884861
Ref: Biblioteca<62>-Footnote-1723884918
Ref: Biblioteca<62>-Footnote-1733884975
Ref: Biblioteca<62>-Footnote-1743885032
Ref: Biblioteca<62>-Footnote-1753885089
Ref: Biblioteca<62>-Footnote-1763885146
Ref: Biblioteca<62>-Footnote-1773885203
Ref: Biblioteca<62>-Footnote-1783885260
Ref: Biblioteca<62>-Footnote-1793885317
Ref: Biblioteca<62>-Footnote-1803885374
Ref: Biblioteca<62>-Footnote-1813885431
Ref: Biblioteca<62>-Footnote-1823885475
Ref: Biblioteca<62>-Footnote-1833885532
Ref: Biblioteca<62>-Footnote-1843885589
Ref: Biblioteca<62>-Footnote-1853885646
Ref: Biblioteca<62>-Footnote-1863885703
Ref: Biblioteca<62>-Footnote-1873885760
Ref: Biblioteca<62>-Footnote-1883885817
Ref: Biblioteca<62>-Footnote-1893885874
Ref: Biblioteca<62>-Footnote-1903885931
Ref: Biblioteca<62>-Footnote-1913885988
Ref: Biblioteca<62>-Footnote-1923886045
Ref: Biblioteca<62>-Footnote-1933886102
Ref: Biblioteca<62>-Footnote-1943886159
Ref: Biblioteca<62>-Footnote-1953886216
Ref: Biblioteca<62>-Footnote-1963886273
Ref: Biblioteca<62>-Footnote-1973886330
Ref: Biblioteca<62>-Footnote-1983886387
Ref: Biblioteca<62>-Footnote-1993886444
Ref: Biblioteca<62>-Footnote-2003886501
Ref: Biblioteca<62>-Footnote-2013886558
Ref: Biblioteca<62>-Footnote-2023886615
Ref: Biblioteca<62>-Footnote-2033886672
Ref: Biblioteca<62>-Footnote-2043886729
Ref: Biblioteca<62>-Footnote-2053886786
Ref: Biblioteca<62>-Footnote-2063886843
Ref: Biblioteca<62>-Footnote-2073886900
Ref: Biblioteca<62>-Footnote-2083886957
Ref: Biblioteca<62>-Footnote-2093887014
Ref: Biblioteca<62>-Footnote-2103887071
Ref: Biblioteca<62>-Footnote-2113887128
Ref: Biblioteca<62>-Footnote-2123887185
Ref: Biblioteca<62>-Footnote-2133887242
Ref: Biblioteca<62>-Footnote-2143887299
Ref: Biblioteca<62>-Footnote-2153887356
Ref: Biblioteca<62>-Footnote-2163887413
Ref: Biblioteca<62>-Footnote-2173887470
Ref: Biblioteca<62>-Footnote-2183887527
Ref: Biblioteca<62>-Footnote-2193887584
Ref: Biblioteca<62>-Footnote-2203887641
Ref: Biblioteca<62>-Footnote-2213887698
Ref: Biblioteca<62>-Footnote-2223887755
Ref: Biblioteca<62>-Footnote-2233887812
Ref: Biblioteca<62>-Footnote-2243887869
Ref: Biblioteca<62>-Footnote-2253887926
Ref: Biblioteca<62>-Footnote-2263887983
Ref: Biblioteca<62>-Footnote-2273888050
Ref: Biblioteca<62>-Footnote-2283888117
Ref: Biblioteca<62>-Footnote-2293888184
Ref: Biblioteca<62>-Footnote-2303888241
Ref: Biblioteca<62>-Footnote-2313888308
Ref: Biblioteca<62>-Footnote-2323888375
Ref: Biblioteca<62>-Footnote-2333888442
Ref: Biblioteca<62>-Footnote-2343888509
Ref: Biblioteca<62>-Footnote-2353888576
Ref: Biblioteca<62>-Footnote-2363888643
Ref: Biblioteca<62>-Footnote-2373888710
Ref: Biblioteca<62>-Footnote-2383888777
Ref: Biblioteca<62>-Footnote-2393888844
Ref: Biblioteca<62>-Footnote-2403888911
Ref: Biblioteca<62>-Footnote-2413888978
Ref: Biblioteca<62>-Footnote-2423889045
Ref: Biblioteca<62>-Footnote-2433889112
Ref: Biblioteca<62>-Footnote-2443889179
Ref: Biblioteca<62>-Footnote-2453889246
Ref: Biblioteca<62>-Footnote-2463889313
Ref: Biblioteca<62>-Footnote-2473889380
Ref: Biblioteca<62>-Footnote-2483889447
Ref: Biblioteca<62>-Footnote-2493889514
Ref: Biblioteca<62>-Footnote-2503889581
Ref: Biblioteca<62>-Footnote-2513889648
Ref: Biblioteca<62>-Footnote-2523889715
Ref: Biblioteca<62>-Footnote-2533889782
Ref: Biblioteca<62>-Footnote-2543889849
Node: Documentação<24>3889916
Ref: whatsnew/changelog id3163890034
Ref: 18f43890034
Ref: Documentação<24>-Footnote-13893801
Ref: Documentação<24>-Footnote-23893856
Ref: Documentação<24>-Footnote-33893911
Ref: Documentação<24>-Footnote-43893957
Ref: Documentação<24>-Footnote-53894012
Ref: Documentação<24>-Footnote-63894067
Ref: Documentação<24>-Footnote-73894122
Ref: Documentação<24>-Footnote-83894177
Ref: Documentação<24>-Footnote-93894232
Ref: Documentação<24>-Footnote-103894287
Ref: Documentação<24>-Footnote-113894343
Ref: Documentação<24>-Footnote-123894399
Ref: Documentação<24>-Footnote-133894455
Ref: Documentação<24>-Footnote-143894511
Ref: Documentação<24>-Footnote-153894554
Ref: Documentação<24>-Footnote-163894610
Ref: Documentação<24>-Footnote-173894666
Ref: Documentação<24>-Footnote-183894722
Ref: Documentação<24>-Footnote-193894778
Ref: Documentação<24>-Footnote-203894834
Ref: Documentação<24>-Footnote-213894890
Ref: Documentação<24>-Footnote-223894946
Ref: Documentação<24>-Footnote-233895002
Ref: Documentação<24>-Footnote-243895068
Ref: Documentação<24>-Footnote-253895134
Ref: Documentação<24>-Footnote-263895200
Ref: Documentação<24>-Footnote-273895266
Node: Testes<28>3895332
Ref: whatsnew/changelog id3173895452
Ref: 18fb3895452
Ref: Testes<28>-Footnote-13900839
Ref: Testes<28>-Footnote-23900894
Ref: Testes<28>-Footnote-33900949
Ref: Testes<28>-Footnote-43901004
Ref: Testes<28>-Footnote-53901059
Ref: Testes<28>-Footnote-63901146
Ref: Testes<28>-Footnote-73901201
Ref: Testes<28>-Footnote-83901256
Ref: Testes<28>-Footnote-93901311
Ref: Testes<28>-Footnote-103901366
Ref: Testes<28>-Footnote-113901422
Ref: Testes<28>-Footnote-123901478
Ref: Testes<28>-Footnote-133901534
Ref: Testes<28>-Footnote-143901590
Ref: Testes<28>-Footnote-153901646
Ref: Testes<28>-Footnote-163901702
Ref: Testes<28>-Footnote-173901758
Ref: Testes<28>-Footnote-183901814
Ref: Testes<28>-Footnote-193901870
Ref: Testes<28>-Footnote-203901926
Ref: Testes<28>-Footnote-213901982
Ref: Testes<28>-Footnote-223902038
Ref: Testes<28>-Footnote-233902094
Ref: Testes<28>-Footnote-243902150
Ref: Testes<28>-Footnote-253902206
Ref: Testes<28>-Footnote-263902262
Ref: Testes<28>-Footnote-273902318
Ref: Testes<28>-Footnote-283902374
Ref: Testes<28>-Footnote-293902430
Ref: Testes<28>-Footnote-303902486
Ref: Testes<28>-Footnote-313902542
Ref: Testes<28>-Footnote-323902598
Ref: Testes<28>-Footnote-333902654
Ref: Testes<28>-Footnote-343902710
Ref: Testes<28>-Footnote-353902766
Ref: Testes<28>-Footnote-363902822
Node: Construção<30>3902888
Ref: whatsnew/changelog id3183903001
Ref: 18ff3903001
Ref: Construção<30>-Footnote-13908498
Ref: Construção<30>-Footnote-23908553
Ref: Construção<30>-Footnote-33908608
Ref: Construção<30>-Footnote-43908663
Ref: Construção<30>-Footnote-53908718
Ref: Construção<30>-Footnote-63908773
Ref: Construção<30>-Footnote-73908828
Ref: Construção<30>-Footnote-83908883
Ref: Construção<30>-Footnote-93908938
Ref: Construção<30>-Footnote-103908993
Ref: Construção<30>-Footnote-113909049
Ref: Construção<30>-Footnote-123909105
Ref: Construção<30>-Footnote-133909161
Ref: Construção<30>-Footnote-143909217
Ref: Construção<30>-Footnote-153909273
Ref: Construção<30>-Footnote-163909329
Ref: Construção<30>-Footnote-173909372
Ref: Construção<30>-Footnote-183909428
Ref: Construção<30>-Footnote-193909484
Ref: Construção<30>-Footnote-203909540
Ref: Construção<30>-Footnote-213909596
Ref: Construção<30>-Footnote-223909652
Ref: Construção<30>-Footnote-233909708
Ref: Construção<30>-Footnote-243909764
Ref: Construção<30>-Footnote-253909820
Ref: Construção<30>-Footnote-263909876
Ref: Construção<30>-Footnote-273909932
Ref: Construção<30>-Footnote-283909988
Ref: Construção<30>-Footnote-293910044
Ref: Construção<30>-Footnote-303910100
Ref: Construção<30>-Footnote-313910156
Ref: Construção<30>-Footnote-323910199
Ref: Construção<30>-Footnote-333910255
Ref: Construção<30>-Footnote-343910311
Ref: Construção<30>-Footnote-353910367
Ref: Construção<30>-Footnote-363910423
Node: Windows<26>3910489
Ref: whatsnew/changelog id3193910601
Ref: 19003910601
Ref: Windows<26>-Footnote-13915068
Ref: Windows<26>-Footnote-23915123
Ref: Windows<26>-Footnote-33915178
Ref: Windows<26>-Footnote-43915233
Ref: Windows<26>-Footnote-53915288
Ref: Windows<26>-Footnote-63915343
Ref: Windows<26>-Footnote-73915398
Ref: Windows<26>-Footnote-83915453
Ref: Windows<26>-Footnote-93915508
Ref: Windows<26>-Footnote-103915563
Ref: Windows<26>-Footnote-113915619
Ref: Windows<26>-Footnote-123915675
Ref: Windows<26>-Footnote-133915731
Ref: Windows<26>-Footnote-143915787
Ref: Windows<26>-Footnote-153915843
Ref: Windows<26>-Footnote-163915899
Ref: Windows<26>-Footnote-173915955
Ref: Windows<26>-Footnote-183916011
Ref: Windows<26>-Footnote-193916067
Ref: Windows<26>-Footnote-203916123
Ref: Windows<26>-Footnote-213916179
Ref: Windows<26>-Footnote-223916235
Ref: Windows<26>-Footnote-233916291
Ref: Windows<26>-Footnote-243916347
Ref: Windows<26>-Footnote-253916403
Ref: Windows<26>-Footnote-263916459
Ref: Windows<26>-Footnote-273916525
Ref: Windows<26>-Footnote-283916581
Ref: Windows<26>-Footnote-293916647
Node: macOS<19>3916713
Ref: whatsnew/changelog id3203916817
Ref: 19023916817
Ref: macOS<19>-Footnote-13917369
Node: IDLE<19>3917424
Ref: whatsnew/changelog id3213917538
Ref: 19033917538
Ref: IDLE<19>-Footnote-13918453
Ref: IDLE<19>-Footnote-23918508
Ref: IDLE<19>-Footnote-33918563
Ref: IDLE<19>-Footnote-43918618
Ref: IDLE<19>-Footnote-53918673
Ref: IDLE<19>-Footnote-63918728
Ref: IDLE<19>-Footnote-73918783
Node: Ferramentas/Demos<17>3918838
Ref: whatsnew/changelog id3223918952
Ref: 19043918952
Ref: Ferramentas/Demos<17>-Footnote-13920508
Ref: Ferramentas/Demos<17>-Footnote-23920563
Ref: Ferramentas/Demos<17>-Footnote-33920618
Ref: Ferramentas/Demos<17>-Footnote-43920666
Ref: Ferramentas/Demos<17>-Footnote-53920721
Ref: Ferramentas/Demos<17>-Footnote-63920769
Ref: Ferramentas/Demos<17>-Footnote-73920824
Ref: Ferramentas/Demos<17>-Footnote-83920879
Ref: Ferramentas/Demos<17>-Footnote-93920934
Ref: Ferramentas/Demos<17>-Footnote-103920989
Ref: Ferramentas/Demos<17>-Footnote-113921045
Ref: Ferramentas/Demos<17>-Footnote-123921101
Node: API C<28>3921157
Ref: whatsnew/changelog id3243921254
Ref: 19053921254
Ref: API C<28>-Footnote-13928801
Ref: API C<28>-Footnote-23928856
Ref: API C<28>-Footnote-33928911
Ref: API C<28>-Footnote-43928966
Ref: API C<28>-Footnote-53929021
Ref: API C<28>-Footnote-63929076
Ref: API C<28>-Footnote-73929131
Ref: API C<28>-Footnote-83929186
Ref: API C<28>-Footnote-93929241
Ref: API C<28>-Footnote-103929296
Ref: API C<28>-Footnote-113929352
Ref: API C<28>-Footnote-123929408
Ref: API C<28>-Footnote-133929464
Ref: API C<28>-Footnote-143929520
Ref: API C<28>-Footnote-153929576
Ref: API C<28>-Footnote-163929632
Ref: API C<28>-Footnote-173929688
Ref: API C<28>-Footnote-183929744
Ref: API C<28>-Footnote-193929800
Ref: API C<28>-Footnote-203929856
Ref: API C<28>-Footnote-213929912
Ref: API C<28>-Footnote-223929968
Ref: API C<28>-Footnote-233930024
Ref: API C<28>-Footnote-243930080
Ref: API C<28>-Footnote-253930136
Ref: API C<28>-Footnote-263930192
Ref: API C<28>-Footnote-273930248
Ref: API C<28>-Footnote-283930304
Ref: API C<28>-Footnote-293930360
Ref: API C<28>-Footnote-303930416
Ref: API C<28>-Footnote-313930472
Ref: API C<28>-Footnote-323930528
Ref: API C<28>-Footnote-333930584
Ref: API C<28>-Footnote-343930640
Node: Python 3 11 0 beta 13930706
Ref: whatsnew/changelog python-3-11-0-beta-13930832
Ref: 19073930832
Node: Segurança<24>3931406
Ref: whatsnew/changelog id3253931509
Ref: 19083931509
Ref: Segurança<24>-Footnote-13931811
Node: Núcleo e embutidos<60>3931866
Ref: whatsnew/changelog id3263931992
Ref: 19093931992
Ref: Núcleo e embutidos<60>-Footnote-13938653
Ref: Núcleo e embutidos<60>-Footnote-23938708
Ref: Núcleo e embutidos<60>-Footnote-33938773
Ref: Núcleo e embutidos<60>-Footnote-43938828
Ref: Núcleo e embutidos<60>-Footnote-53938893
Ref: Núcleo e embutidos<60>-Footnote-63938948
Ref: Núcleo e embutidos<60>-Footnote-73939003
Ref: Núcleo e embutidos<60>-Footnote-83939058
Ref: Núcleo e embutidos<60>-Footnote-93939113
Ref: Núcleo e embutidos<60>-Footnote-103939168
Ref: Núcleo e embutidos<60>-Footnote-113939224
Ref: Núcleo e embutidos<60>-Footnote-123939280
Ref: Núcleo e embutidos<60>-Footnote-133939336
Ref: Núcleo e embutidos<60>-Footnote-143939392
Ref: Núcleo e embutidos<60>-Footnote-153939435
Ref: Núcleo e embutidos<60>-Footnote-163939491
Ref: Núcleo e embutidos<60>-Footnote-173939547
Ref: Núcleo e embutidos<60>-Footnote-183939603
Ref: Núcleo e embutidos<60>-Footnote-193939659
Ref: Núcleo e embutidos<60>-Footnote-203939715
Ref: Núcleo e embutidos<60>-Footnote-213939771
Ref: Núcleo e embutidos<60>-Footnote-223939837
Ref: Núcleo e embutidos<60>-Footnote-233939893
Ref: Núcleo e embutidos<60>-Footnote-243939949
Ref: Núcleo e embutidos<60>-Footnote-253940005
Ref: Núcleo e embutidos<60>-Footnote-263940061
Ref: Núcleo e embutidos<60>-Footnote-273940117
Ref: Núcleo e embutidos<60>-Footnote-283940173
Ref: Núcleo e embutidos<60>-Footnote-293940229
Ref: Núcleo e embutidos<60>-Footnote-303940285
Ref: Núcleo e embutidos<60>-Footnote-313940341
Ref: Núcleo e embutidos<60>-Footnote-323940397
Ref: Núcleo e embutidos<60>-Footnote-333940440
Ref: Núcleo e embutidos<60>-Footnote-343940496
Ref: Núcleo e embutidos<60>-Footnote-353940552
Ref: Núcleo e embutidos<60>-Footnote-363940608
Ref: Núcleo e embutidos<60>-Footnote-373940674
Ref: Núcleo e embutidos<60>-Footnote-383940730
Ref: Núcleo e embutidos<60>-Footnote-393940786
Ref: Núcleo e embutidos<60>-Footnote-403940852
Node: Biblioteca<63>3940918
Ref: whatsnew/changelog id3273941053
Ref: 190c3941053
Ref: Biblioteca<63>-Footnote-13941526
Node: Núcleo e embutidos<61>3941591
Ref: whatsnew/changelog id3283941719
Ref: 190d3941719
Ref: Núcleo e embutidos<61>-Footnote-13943498
Ref: Núcleo e embutidos<61>-Footnote-23943563
Ref: Núcleo e embutidos<61>-Footnote-33943628
Ref: Núcleo e embutidos<61>-Footnote-43943693
Ref: Núcleo e embutidos<61>-Footnote-53943758
Ref: Núcleo e embutidos<61>-Footnote-63943823
Ref: Núcleo e embutidos<61>-Footnote-73943888
Ref: Núcleo e embutidos<61>-Footnote-83943953
Ref: Núcleo e embutidos<61>-Footnote-93944018
Node: Construção<31>3944083
Ref: whatsnew/changelog id3293944220
Ref: 19113944220
Ref: Construção<31>-Footnote-13944359
Node: Núcleo e embutidos<62>3944424
Ref: whatsnew/changelog id3303944552
Ref: 19123944552
Ref: Núcleo e embutidos<62>-Footnote-13945379
Ref: Núcleo e embutidos<62>-Footnote-23945444
Ref: Núcleo e embutidos<62>-Footnote-33945509
Node: Biblioteca<64>3945574
Ref: whatsnew/changelog id3313945704
Ref: 19133945704
Ref: Biblioteca<64>-Footnote-13963266
Ref: Biblioteca<64>-Footnote-23963321
Ref: Biblioteca<64>-Footnote-33963376
Ref: Biblioteca<64>-Footnote-43963431
Ref: Biblioteca<64>-Footnote-53963486
Ref: Biblioteca<64>-Footnote-63963541
Ref: Biblioteca<64>-Footnote-73963596
Ref: Biblioteca<64>-Footnote-83963651
Ref: Biblioteca<64>-Footnote-93963706
Ref: Biblioteca<64>-Footnote-103963761
Ref: Biblioteca<64>-Footnote-113963817
Ref: Biblioteca<64>-Footnote-123963873
Ref: Biblioteca<64>-Footnote-133963929
Ref: Biblioteca<64>-Footnote-143963985
Ref: Biblioteca<64>-Footnote-153964041
Ref: Biblioteca<64>-Footnote-163964097
Ref: Biblioteca<64>-Footnote-173964153
Ref: Biblioteca<64>-Footnote-183964209
Ref: Biblioteca<64>-Footnote-193964265
Ref: Biblioteca<64>-Footnote-203964321
Ref: Biblioteca<64>-Footnote-213964377
Ref: Biblioteca<64>-Footnote-223964433
Ref: Biblioteca<64>-Footnote-233964489
Ref: Biblioteca<64>-Footnote-243964545
Ref: Biblioteca<64>-Footnote-253964611
Ref: Biblioteca<64>-Footnote-263964667
Ref: Biblioteca<64>-Footnote-273964723
Ref: Biblioteca<64>-Footnote-283964766
Ref: Biblioteca<64>-Footnote-293964822
Ref: Biblioteca<64>-Footnote-303964878
Ref: Biblioteca<64>-Footnote-313964934
Ref: Biblioteca<64>-Footnote-323964990
Ref: Biblioteca<64>-Footnote-333965033
Ref: Biblioteca<64>-Footnote-343965089
Ref: Biblioteca<64>-Footnote-353965145
Ref: Biblioteca<64>-Footnote-363965201
Ref: Biblioteca<64>-Footnote-373965257
Ref: Biblioteca<64>-Footnote-383965313
Ref: Biblioteca<64>-Footnote-393965369
Ref: Biblioteca<64>-Footnote-403965425
Ref: Biblioteca<64>-Footnote-413965481
Ref: Biblioteca<64>-Footnote-423965537
Ref: Biblioteca<64>-Footnote-433965593
Ref: Biblioteca<64>-Footnote-443965649
Ref: Biblioteca<64>-Footnote-453965705
Ref: Biblioteca<64>-Footnote-463965761
Ref: Biblioteca<64>-Footnote-473965817
Ref: Biblioteca<64>-Footnote-483965873
Ref: Biblioteca<64>-Footnote-493965929
Ref: Biblioteca<64>-Footnote-503965985
Ref: Biblioteca<64>-Footnote-513966041
Ref: Biblioteca<64>-Footnote-523966097
Ref: Biblioteca<64>-Footnote-533966153
Ref: Biblioteca<64>-Footnote-543966209
Ref: Biblioteca<64>-Footnote-553966265
Ref: Biblioteca<64>-Footnote-563966321
Ref: Biblioteca<64>-Footnote-573966387
Ref: Biblioteca<64>-Footnote-583966443
Ref: Biblioteca<64>-Footnote-593966499
Ref: Biblioteca<64>-Footnote-603966555
Ref: Biblioteca<64>-Footnote-613966611
Ref: Biblioteca<64>-Footnote-623966667
Ref: Biblioteca<64>-Footnote-633966723
Ref: Biblioteca<64>-Footnote-643966779
Ref: Biblioteca<64>-Footnote-653966835
Ref: Biblioteca<64>-Footnote-663966891
Ref: Biblioteca<64>-Footnote-673966934
Ref: Biblioteca<64>-Footnote-683966990
Ref: Biblioteca<64>-Footnote-693967046
Ref: Biblioteca<64>-Footnote-703967102
Ref: Biblioteca<64>-Footnote-713967158
Ref: Biblioteca<64>-Footnote-723967214
Ref: Biblioteca<64>-Footnote-733967270
Ref: Biblioteca<64>-Footnote-743967326
Ref: Biblioteca<64>-Footnote-753967382
Ref: Biblioteca<64>-Footnote-763967448
Ref: Biblioteca<64>-Footnote-773967504
Ref: Biblioteca<64>-Footnote-783967560
Ref: Biblioteca<64>-Footnote-793967616
Ref: Biblioteca<64>-Footnote-803967682
Ref: Biblioteca<64>-Footnote-813967748
Ref: Biblioteca<64>-Footnote-823967791
Ref: Biblioteca<64>-Footnote-833967857
Ref: Biblioteca<64>-Footnote-843967923
Ref: Biblioteca<64>-Footnote-853967989
Ref: Biblioteca<64>-Footnote-863968055
Ref: Biblioteca<64>-Footnote-873968121
Ref: Biblioteca<64>-Footnote-883968187
Ref: Biblioteca<64>-Footnote-893968253
Ref: Biblioteca<64>-Footnote-903968319
Ref: Biblioteca<64>-Footnote-913968385
Ref: Biblioteca<64>-Footnote-923968451
Ref: Biblioteca<64>-Footnote-933968517
Ref: Biblioteca<64>-Footnote-943968583
Ref: Biblioteca<64>-Footnote-953968649
Ref: Biblioteca<64>-Footnote-963968715
Ref: Biblioteca<64>-Footnote-973968781
Ref: Biblioteca<64>-Footnote-983968847
Ref: Biblioteca<64>-Footnote-993968913
Ref: Biblioteca<64>-Footnote-1003968979
Ref: Biblioteca<64>-Footnote-1013969046
Ref: Biblioteca<64>-Footnote-1023969113
Ref: Biblioteca<64>-Footnote-1033969180
Ref: Biblioteca<64>-Footnote-1043969247
Ref: Biblioteca<64>-Footnote-1053969314
Ref: Biblioteca<64>-Footnote-1063969381
Ref: Biblioteca<64>-Footnote-1073969448
Ref: Biblioteca<64>-Footnote-1083969515
Ref: Biblioteca<64>-Footnote-1093969582
Ref: Biblioteca<64>-Footnote-1103969649
Ref: Biblioteca<64>-Footnote-1113969716
Ref: Biblioteca<64>-Footnote-1123969783
Ref: Biblioteca<64>-Footnote-1133969850
Ref: Biblioteca<64>-Footnote-1143969917
Ref: Biblioteca<64>-Footnote-1153969984
Ref: Biblioteca<64>-Footnote-1163970051
Ref: Biblioteca<64>-Footnote-1173970118
Ref: Biblioteca<64>-Footnote-1183970185
Ref: Biblioteca<64>-Footnote-1193970252
Ref: Biblioteca<64>-Footnote-1203970319
Node: Documentação<25>3970386
Ref: whatsnew/changelog id3323970503
Ref: 19203970503
Ref: Documentação<25>-Footnote-13972061
Ref: Documentação<25>-Footnote-23972116
Ref: Documentação<25>-Footnote-33972171
Ref: Documentação<25>-Footnote-43972226
Ref: Documentação<25>-Footnote-53972281
Ref: Documentação<25>-Footnote-63972346
Ref: Documentação<25>-Footnote-73972411
Ref: Documentação<25>-Footnote-83972476
Ref: Documentação<25>-Footnote-93972541
Ref: Documentação<25>-Footnote-103972583
Ref: Documentação<25>-Footnote-113972626
Ref: Documentação<25>-Footnote-123972692
Ref: Documentação<25>-Footnote-133972758
Ref: Documentação<25>-Footnote-143972823
Node: Testes<29>3972889
Ref: whatsnew/changelog id3333973008
Ref: 19233973008
Ref: Testes<29>-Footnote-13974352
Ref: Testes<29>-Footnote-23974407
Ref: Testes<29>-Footnote-33974462
Ref: Testes<29>-Footnote-43974517
Ref: Testes<29>-Footnote-53974572
Ref: Testes<29>-Footnote-63974627
Ref: Testes<29>-Footnote-73974692
Ref: Testes<29>-Footnote-83974757
Node: Construção<32>3974822
Ref: whatsnew/changelog id3343974934
Ref: 19263974934
Ref: Construção<32>-Footnote-13975619
Ref: Construção<32>-Footnote-23975674
Ref: Construção<32>-Footnote-33975729
Ref: Construção<32>-Footnote-43975794
Node: Windows<27>3975859
Ref: whatsnew/changelog id3353975970
Ref: 19273975970
Ref: Windows<27>-Footnote-13976612
Ref: Windows<27>-Footnote-23976677
Ref: Windows<27>-Footnote-33976742
Ref: Windows<27>-Footnote-43976807
Ref: Windows<27>-Footnote-53976872
Node: macOS<20>3976937
Ref: whatsnew/changelog id3363977053
Ref: 19283977053
Ref: macOS<20>-Footnote-13977185
Node: Ferramentas/Demos<18>3977250
Ref: whatsnew/changelog id3373977364
Ref: 19293977364
Ref: Ferramentas/Demos<18>-Footnote-13977935
Ref: Ferramentas/Demos<18>-Footnote-23977990
Ref: Ferramentas/Demos<18>-Footnote-33978045
Node: API C<29>3978100
Ref: whatsnew/changelog id3383978196
Ref: 192a3978196
Ref: API C<29>-Footnote-13980359
Ref: API C<29>-Footnote-23980414
Ref: API C<29>-Footnote-33980469
Ref: API C<29>-Footnote-43980524
Ref: API C<29>-Footnote-53980579
Ref: API C<29>-Footnote-63980634
Ref: API C<29>-Footnote-73980676
Ref: API C<29>-Footnote-83980731
Ref: API C<29>-Footnote-93980786
Ref: API C<29>-Footnote-103980851
Ref: API C<29>-Footnote-113980917
Ref: API C<29>-Footnote-123980983
Ref: API C<29>-Footnote-133981049
Node: Python 3 11 0 alpha 73981115
Ref: whatsnew/changelog python-3-11-0-alpha-73981241
Ref: 192e3981241
Node: Núcleo e embutidos<63>3981783
Ref: whatsnew/changelog id3393981887
Ref: 192f3981887
Ref: Núcleo e embutidos<63>-Footnote-13985226
Ref: Núcleo e embutidos<63>-Footnote-23985291
Ref: Núcleo e embutidos<63>-Footnote-33985356
Ref: Núcleo e embutidos<63>-Footnote-43985421
Ref: Núcleo e embutidos<63>-Footnote-53985486
Ref: Núcleo e embutidos<63>-Footnote-63985551
Ref: Núcleo e embutidos<63>-Footnote-73985616
Ref: Núcleo e embutidos<63>-Footnote-83985681
Ref: Núcleo e embutidos<63>-Footnote-93985746
Ref: Núcleo e embutidos<63>-Footnote-103985811
Ref: Núcleo e embutidos<63>-Footnote-113985877
Ref: Núcleo e embutidos<63>-Footnote-123985943
Ref: Núcleo e embutidos<63>-Footnote-133986009
Ref: Núcleo e embutidos<63>-Footnote-143986075
Ref: Núcleo e embutidos<63>-Footnote-153986141
Ref: Núcleo e embutidos<63>-Footnote-163986207
Ref: Núcleo e embutidos<63>-Footnote-173986273
Node: Biblioteca<65>3986339
Ref: whatsnew/changelog id3403986475
Ref: 19313986475
Ref: Biblioteca<65>-Footnote-13986766
Node: Núcleo e embutidos<64>3986831
Ref: whatsnew/changelog id3413986958
Ref: 19323986958
Ref: Núcleo e embutidos<64>-Footnote-13987812
Ref: Núcleo e embutidos<64>-Footnote-23987877
Ref: Núcleo e embutidos<64>-Footnote-33987942
Ref: Núcleo e embutidos<64>-Footnote-43988007
Ref: Núcleo e embutidos<64>-Footnote-53988072
Node: Biblioteca<66>3988137
Ref: whatsnew/changelog id3423988273
Ref: 19333988273
Ref: Biblioteca<66>-Footnote-13988490
Node: Núcleo e embutidos<65>3988555
Ref: whatsnew/changelog id3433988682
Ref: 19353988682
Ref: Núcleo e embutidos<65>-Footnote-13989950
Ref: Núcleo e embutidos<65>-Footnote-23990015
Ref: Núcleo e embutidos<65>-Footnote-33990080
Ref: Núcleo e embutidos<65>-Footnote-43990145
Ref: Núcleo e embutidos<65>-Footnote-53990210
Ref: Núcleo e embutidos<65>-Footnote-63990275
Ref: Núcleo e embutidos<65>-Footnote-73990340
Ref: Núcleo e embutidos<65>-Footnote-83990405
Ref: Núcleo e embutidos<65>-Footnote-93990470
Node: Biblioteca<67>3990535
Ref: whatsnew/changelog id3443990666
Ref: 19373990666
Ref: Biblioteca<67>-Footnote-14004874
Ref: Biblioteca<67>-Footnote-24004939
Ref: Biblioteca<67>-Footnote-34005004
Ref: Biblioteca<67>-Footnote-44005069
Ref: Biblioteca<67>-Footnote-54005134
Ref: Biblioteca<67>-Footnote-64005199
Ref: Biblioteca<67>-Footnote-74005263
Ref: Biblioteca<67>-Footnote-84005328
Ref: Biblioteca<67>-Footnote-94005393
Ref: Biblioteca<67>-Footnote-104005458
Ref: Biblioteca<67>-Footnote-114005524
Ref: Biblioteca<67>-Footnote-124005590
Ref: Biblioteca<67>-Footnote-134005656
Ref: Biblioteca<67>-Footnote-144005722
Ref: Biblioteca<67>-Footnote-154005765
Ref: Biblioteca<67>-Footnote-164005831
Ref: Biblioteca<67>-Footnote-174005897
Ref: Biblioteca<67>-Footnote-184005963
Ref: Biblioteca<67>-Footnote-194006006
Ref: Biblioteca<67>-Footnote-204006072
Ref: Biblioteca<67>-Footnote-214006138
Ref: Biblioteca<67>-Footnote-224006204
Ref: Biblioteca<67>-Footnote-234006247
Ref: Biblioteca<67>-Footnote-244006313
Ref: Biblioteca<67>-Footnote-254006379
Ref: Biblioteca<67>-Footnote-264006445
Ref: Biblioteca<67>-Footnote-274006511
Ref: Biblioteca<67>-Footnote-284006577
Ref: Biblioteca<67>-Footnote-294006643
Ref: Biblioteca<67>-Footnote-304006710
Ref: Biblioteca<67>-Footnote-314006776
Ref: Biblioteca<67>-Footnote-324006842
Ref: Biblioteca<67>-Footnote-334006908
Ref: Biblioteca<67>-Footnote-344006974
Ref: Biblioteca<67>-Footnote-354007017
Ref: Biblioteca<67>-Footnote-364007083
Ref: Biblioteca<67>-Footnote-374007149
Ref: Biblioteca<67>-Footnote-384007214
Ref: Biblioteca<67>-Footnote-394007280
Ref: Biblioteca<67>-Footnote-404007346
Ref: Biblioteca<67>-Footnote-414007412
Ref: Biblioteca<67>-Footnote-424007478
Ref: Biblioteca<67>-Footnote-434007521
Ref: Biblioteca<67>-Footnote-444007587
Ref: Biblioteca<67>-Footnote-454007653
Ref: Biblioteca<67>-Footnote-464007719
Ref: Biblioteca<67>-Footnote-474007785
Ref: Biblioteca<67>-Footnote-484007851
Ref: Biblioteca<67>-Footnote-494007917
Ref: Biblioteca<67>-Footnote-504007983
Ref: Biblioteca<67>-Footnote-514008049
Ref: Biblioteca<67>-Footnote-524008115
Ref: Biblioteca<67>-Footnote-534008181
Ref: Biblioteca<67>-Footnote-544008247
Ref: Biblioteca<67>-Footnote-554008313
Ref: Biblioteca<67>-Footnote-564008379
Ref: Biblioteca<67>-Footnote-574008445
Ref: Biblioteca<67>-Footnote-584008511
Ref: Biblioteca<67>-Footnote-594008577
Ref: Biblioteca<67>-Footnote-604008620
Ref: Biblioteca<67>-Footnote-614008687
Ref: Biblioteca<67>-Footnote-624008753
Ref: Biblioteca<67>-Footnote-634008819
Ref: Biblioteca<67>-Footnote-644008885
Ref: Biblioteca<67>-Footnote-654008951
Ref: Biblioteca<67>-Footnote-664009017
Ref: Biblioteca<67>-Footnote-674009083
Ref: Biblioteca<67>-Footnote-684009149
Ref: Biblioteca<67>-Footnote-694009215
Ref: Biblioteca<67>-Footnote-704009281
Ref: Biblioteca<67>-Footnote-714009347
Ref: Biblioteca<67>-Footnote-724009413
Ref: Biblioteca<67>-Footnote-734009479
Ref: Biblioteca<67>-Footnote-744009545
Ref: Biblioteca<67>-Footnote-754009611
Ref: Biblioteca<67>-Footnote-764009677
Ref: Biblioteca<67>-Footnote-774009743
Ref: Biblioteca<67>-Footnote-784009809
Ref: Biblioteca<67>-Footnote-794009875
Ref: Biblioteca<67>-Footnote-804009941
Ref: Biblioteca<67>-Footnote-814010007
Ref: Biblioteca<67>-Footnote-824010073
Ref: Biblioteca<67>-Footnote-834010139
Ref: Biblioteca<67>-Footnote-844010182
Ref: Biblioteca<67>-Footnote-854010248
Ref: Biblioteca<67>-Footnote-864010314
Ref: Biblioteca<67>-Footnote-874010380
Ref: Biblioteca<67>-Footnote-884010446
Node: Documentação<26>4010512
Ref: whatsnew/changelog id3454010630
Ref: 19434010630
Ref: Documentação<26>-Footnote-14011772
Ref: Documentação<26>-Footnote-24011837
Ref: Documentação<26>-Footnote-34011902
Ref: Documentação<26>-Footnote-44011944
Ref: Documentação<26>-Footnote-54012009
Ref: Documentação<26>-Footnote-64012074
Ref: Documentação<26>-Footnote-74012139
Ref: Documentação<26>-Footnote-84012204
Node: Testes<30>4012269
Ref: whatsnew/changelog id3464012389
Ref: 19464012389
Ref: Testes<30>-Footnote-14013360
Ref: Testes<30>-Footnote-24013425
Ref: Testes<30>-Footnote-34013490
Ref: Testes<30>-Footnote-44013555
Ref: Testes<30>-Footnote-54013620
Ref: Testes<30>-Footnote-64013685
Ref: Testes<30>-Footnote-74013750
Ref: Testes<30>-Footnote-84013815
Node: Construção<33>4013857
Ref: whatsnew/changelog id3474013970
Ref: 19474013970
Ref: Construção<33>-Footnote-14015270
Ref: Construção<33>-Footnote-24015335
Ref: Construção<33>-Footnote-34015400
Ref: Construção<33>-Footnote-44015465
Ref: Construção<33>-Footnote-54015530
Ref: Construção<33>-Footnote-64015595
Ref: Construção<33>-Footnote-74015660
Ref: Construção<33>-Footnote-84015725
Ref: Construção<33>-Footnote-94015790
Node: Windows<28>4015855
Ref: whatsnew/changelog id3484015967
Ref: 19494015967
Ref: Windows<28>-Footnote-14017165
Ref: Windows<28>-Footnote-24017230
Ref: Windows<28>-Footnote-34017286
Ref: Windows<28>-Footnote-44017351
Ref: Windows<28>-Footnote-54017416
Ref: Windows<28>-Footnote-64017458
Ref: Windows<28>-Footnote-74017523
Ref: Windows<28>-Footnote-84017588
Ref: Windows<28>-Footnote-94017653
Ref: Windows<28>-Footnote-104017708
Ref: Windows<28>-Footnote-114017765
Ref: Windows<28>-Footnote-124017831
Node: macOS<21>4017888
Ref: whatsnew/changelog id3494018005
Ref: 194a4018005
Ref: macOS<21>-Footnote-14018343
Ref: macOS<21>-Footnote-24018408
Node: Ferramentas/Demos<19>4018473
Ref: whatsnew/changelog id3504018588
Ref: 194b4018588
Ref: Ferramentas/Demos<19>-Footnote-14018807
Node: API C<30>4018872
Ref: whatsnew/changelog id3514018969
Ref: 194c4018969
Ref: API C<30>-Footnote-14021228
Ref: API C<30>-Footnote-24021293
Ref: API C<30>-Footnote-34021358
Ref: API C<30>-Footnote-44021423
Ref: API C<30>-Footnote-54021488
Ref: API C<30>-Footnote-64021553
Ref: API C<30>-Footnote-74021618
Ref: API C<30>-Footnote-84021683
Node: Python 3 11 0 alpha 64021748
Ref: whatsnew/changelog python-3-11-0-alpha-64021875
Ref: 194f4021875
Node: Núcleo e embutidos<66>4022449
Ref: whatsnew/changelog id3524022553
Ref: 19504022553
Ref: Núcleo e embutidos<66>-Footnote-14025942
Ref: Núcleo e embutidos<66>-Footnote-24026007
Ref: Núcleo e embutidos<66>-Footnote-34026072
Ref: Núcleo e embutidos<66>-Footnote-44026137
Ref: Núcleo e embutidos<66>-Footnote-54026202
Ref: Núcleo e embutidos<66>-Footnote-64026267
Ref: Núcleo e embutidos<66>-Footnote-74026332
Ref: Núcleo e embutidos<66>-Footnote-84026397
Ref: Núcleo e embutidos<66>-Footnote-94026462
Ref: Núcleo e embutidos<66>-Footnote-104026527
Ref: Núcleo e embutidos<66>-Footnote-114026593
Ref: Núcleo e embutidos<66>-Footnote-124026659
Ref: Núcleo e embutidos<66>-Footnote-134026725
Ref: Núcleo e embutidos<66>-Footnote-144026791
Ref: Núcleo e embutidos<66>-Footnote-154026857
Ref: Núcleo e embutidos<66>-Footnote-164026923
Ref: Núcleo e embutidos<66>-Footnote-174026989
Ref: Núcleo e embutidos<66>-Footnote-184027055
Ref: Núcleo e embutidos<66>-Footnote-194027121
Ref: Núcleo e embutidos<66>-Footnote-204027187
Ref: Núcleo e embutidos<66>-Footnote-214027253
Ref: Núcleo e embutidos<66>-Footnote-224027319
Ref: Núcleo e embutidos<66>-Footnote-234027385
Ref: Núcleo e embutidos<66>-Footnote-244027451
Ref: Núcleo e embutidos<66>-Footnote-254027517
Ref: Núcleo e embutidos<66>-Footnote-264027583
Node: Biblioteca<68>4027649
Ref: whatsnew/changelog id3534027785
Ref: 19544027785
Ref: Biblioteca<68>-Footnote-14027924
Node: Núcleo e embutidos<67>4027989
Ref: whatsnew/changelog id3544028116
Ref: 19554028116
Ref: Núcleo e embutidos<67>-Footnote-14030224
Ref: Núcleo e embutidos<67>-Footnote-24030289
Ref: Núcleo e embutidos<67>-Footnote-34030354
Ref: Núcleo e embutidos<67>-Footnote-44030419
Ref: Núcleo e embutidos<67>-Footnote-54030484
Ref: Núcleo e embutidos<67>-Footnote-64030549
Ref: Núcleo e embutidos<67>-Footnote-74030614
Ref: Núcleo e embutidos<67>-Footnote-84030679
Ref: Núcleo e embutidos<67>-Footnote-94030744
Ref: Núcleo e embutidos<67>-Footnote-104030809
Ref: Núcleo e embutidos<67>-Footnote-114030875
Node: Biblioteca<69>4030941
Ref: whatsnew/changelog id3554031077
Ref: 19564031077
Ref: Biblioteca<69>-Footnote-14031343
Node: Núcleo e embutidos<68>4031408
Ref: whatsnew/changelog id3564031535
Ref: 19574031535
Ref: Núcleo e embutidos<68>-Footnote-14032140
Ref: Núcleo e embutidos<68>-Footnote-24032205
Ref: Núcleo e embutidos<68>-Footnote-34032270
Ref: Núcleo e embutidos<68>-Footnote-44032335
Node: Biblioteca<70>4032400
Ref: whatsnew/changelog id3574032536
Ref: 19584032536
Ref: Biblioteca<70>-Footnote-14032835
Ref: Biblioteca<70>-Footnote-24032900
Node: Núcleo e embutidos<69>4032965
Ref: whatsnew/changelog id3584033092
Ref: 19594033092
Ref: Núcleo e embutidos<69>-Footnote-14033794
Ref: Núcleo e embutidos<69>-Footnote-24033859
Ref: Núcleo e embutidos<69>-Footnote-34033924
Node: Biblioteca<71>4033989
Ref: whatsnew/changelog id3594034120
Ref: 195c4034120
Ref: Biblioteca<71>-Footnote-14042351
Ref: Biblioteca<71>-Footnote-24042416
Ref: Biblioteca<71>-Footnote-34042481
Ref: Biblioteca<71>-Footnote-44042546
Ref: Biblioteca<71>-Footnote-54042611
Ref: Biblioteca<71>-Footnote-64042676
Ref: Biblioteca<71>-Footnote-74042741
Ref: Biblioteca<71>-Footnote-84042806
Ref: Biblioteca<71>-Footnote-94042871
Ref: Biblioteca<71>-Footnote-104042936
Ref: Biblioteca<71>-Footnote-114043002
Ref: Biblioteca<71>-Footnote-124043068
Ref: Biblioteca<71>-Footnote-134043134
Ref: Biblioteca<71>-Footnote-144043200
Ref: Biblioteca<71>-Footnote-154043266
Ref: Biblioteca<71>-Footnote-164043332
Ref: Biblioteca<71>-Footnote-174043398
Ref: Biblioteca<71>-Footnote-184043464
Ref: Biblioteca<71>-Footnote-194043530
Ref: Biblioteca<71>-Footnote-204043596
Ref: Biblioteca<71>-Footnote-214043662
Ref: Biblioteca<71>-Footnote-224043728
Ref: Biblioteca<71>-Footnote-234043794
Ref: Biblioteca<71>-Footnote-244043860
Ref: Biblioteca<71>-Footnote-254043926
Ref: Biblioteca<71>-Footnote-264043992
Ref: Biblioteca<71>-Footnote-274044058
Ref: Biblioteca<71>-Footnote-284044124
Ref: Biblioteca<71>-Footnote-294044190
Ref: Biblioteca<71>-Footnote-304044256
Ref: Biblioteca<71>-Footnote-314044322
Ref: Biblioteca<71>-Footnote-324044388
Ref: Biblioteca<71>-Footnote-334044454
Ref: Biblioteca<71>-Footnote-344044520
Ref: Biblioteca<71>-Footnote-354044563
Ref: Biblioteca<71>-Footnote-364044629
Ref: Biblioteca<71>-Footnote-374044695
Ref: Biblioteca<71>-Footnote-384044761
Ref: Biblioteca<71>-Footnote-394044827
Ref: Biblioteca<71>-Footnote-404044893
Ref: Biblioteca<71>-Footnote-414044959
Ref: Biblioteca<71>-Footnote-424045025
Ref: Biblioteca<71>-Footnote-434045091
Ref: Biblioteca<71>-Footnote-444045157
Ref: Biblioteca<71>-Footnote-454045223
Ref: Biblioteca<71>-Footnote-464045289
Ref: Biblioteca<71>-Footnote-474045355
Ref: Biblioteca<71>-Footnote-484045421
Node: Documentação<27>4045487
Ref: whatsnew/changelog id3604045605
Ref: 19674045605
Ref: Documentação<27>-Footnote-14045824
Node: Testes<31>4045889
Ref: whatsnew/changelog id3614046009
Ref: 19684046009
Ref: Testes<31>-Footnote-14046982
Ref: Testes<31>-Footnote-24047047
Ref: Testes<31>-Footnote-34047112
Ref: Testes<31>-Footnote-44047177
Ref: Testes<31>-Footnote-54047242
Node: Construção<34>4047307
Ref: whatsnew/changelog id3624047420
Ref: 19694047420
Ref: Construção<34>-Footnote-14048862
Ref: Construção<34>-Footnote-24048927
Ref: Construção<34>-Footnote-34048992
Ref: Construção<34>-Footnote-44049057
Ref: Construção<34>-Footnote-54049122
Ref: Construção<34>-Footnote-64049187
Ref: Construção<34>-Footnote-74049252
Node: Windows<29>4049317
Ref: whatsnew/changelog id3634049428
Ref: 196a4049428
Ref: Windows<29>-Footnote-14050088
Ref: Windows<29>-Footnote-24050153
Ref: Windows<29>-Footnote-34050218
Node: IDLE<20>4050283
Ref: whatsnew/changelog id3644050387
Ref: 196b4050387
Ref: IDLE<20>-Footnote-14050669
Ref: IDLE<20>-Footnote-24050734
Node: API C<31>4050799
Ref: whatsnew/changelog id3654050883
Ref: 196c4050883
Ref: API C<31>-Footnote-14051832
Ref: API C<31>-Footnote-24051897
Ref: API C<31>-Footnote-34051962
Ref: API C<31>-Footnote-44052027
Ref: API C<31>-Footnote-54052092
Node: Python 3 11 0 alpha 54052157
Ref: whatsnew/changelog python-3-11-0-alpha-54052284
Ref: 196d4052284
Node: Núcleo e embutidos<70>4052834
Ref: whatsnew/changelog id3664052938
Ref: 196e4052938
Ref: Núcleo e embutidos<70>-Footnote-14056877
Ref: Núcleo e embutidos<70>-Footnote-24056942
Ref: Núcleo e embutidos<70>-Footnote-34057007
Ref: Núcleo e embutidos<70>-Footnote-44057072
Ref: Núcleo e embutidos<70>-Footnote-54057137
Ref: Núcleo e embutidos<70>-Footnote-64057202
Ref: Núcleo e embutidos<70>-Footnote-74057267
Ref: Núcleo e embutidos<70>-Footnote-84057332
Ref: Núcleo e embutidos<70>-Footnote-94057397
Ref: Núcleo e embutidos<70>-Footnote-104057462
Ref: Núcleo e embutidos<70>-Footnote-114057528
Ref: Núcleo e embutidos<70>-Footnote-124057594
Ref: Núcleo e embutidos<70>-Footnote-134057660
Ref: Núcleo e embutidos<70>-Footnote-144057703
Ref: Núcleo e embutidos<70>-Footnote-154057769
Ref: Núcleo e embutidos<70>-Footnote-164057835
Ref: Núcleo e embutidos<70>-Footnote-174057901
Ref: Núcleo e embutidos<70>-Footnote-184057967
Ref: Núcleo e embutidos<70>-Footnote-194058033
Node: Biblioteca<72>4058099
Ref: whatsnew/changelog id3674058235
Ref: 19704058235
Ref: Biblioteca<72>-Footnote-14058461
Node: Núcleo e embutidos<71>4058526
Ref: whatsnew/changelog id3684058653
Ref: 19714058653
Ref: Núcleo e embutidos<71>-Footnote-14059395
Ref: Núcleo e embutidos<71>-Footnote-24059460
Ref: Núcleo e embutidos<71>-Footnote-34059525
Ref: Núcleo e embutidos<71>-Footnote-44059590
Node: Biblioteca<73>4059655
Ref: whatsnew/changelog id3694059784
Ref: 19734059784
Ref: Biblioteca<73>-Footnote-14059918
Node: Construção<35>4059983
Ref: whatsnew/changelog id3704060112
Ref: 19744060112
Ref: Construção<35>-Footnote-14060251
Node: Núcleo e embutidos<72>4060316
Ref: whatsnew/changelog id3714060445
Ref: 19754060445
Ref: Núcleo e embutidos<72>-Footnote-14060748
Node: Biblioteca<74>4060813
Ref: whatsnew/changelog id3724060944
Ref: 19764060944
Ref: Biblioteca<74>-Footnote-14066900
Ref: Biblioteca<74>-Footnote-24066965
Ref: Biblioteca<74>-Footnote-34067030
Ref: Biblioteca<74>-Footnote-44067095
Ref: Biblioteca<74>-Footnote-54067160
Ref: Biblioteca<74>-Footnote-64067225
Ref: Biblioteca<74>-Footnote-74067290
Ref: Biblioteca<74>-Footnote-84067355
Ref: Biblioteca<74>-Footnote-94067420
Ref: Biblioteca<74>-Footnote-104067485
Ref: Biblioteca<74>-Footnote-114067551
Ref: Biblioteca<74>-Footnote-124067617
Ref: Biblioteca<74>-Footnote-134067683
Ref: Biblioteca<74>-Footnote-144067749
Ref: Biblioteca<74>-Footnote-154067815
Ref: Biblioteca<74>-Footnote-164067881
Ref: Biblioteca<74>-Footnote-174067947
Ref: Biblioteca<74>-Footnote-184068013
Ref: Biblioteca<74>-Footnote-194068079
Ref: Biblioteca<74>-Footnote-204068145
Ref: Biblioteca<74>-Footnote-214068211
Ref: Biblioteca<74>-Footnote-224068277
Ref: Biblioteca<74>-Footnote-234068343
Ref: Biblioteca<74>-Footnote-244068409
Ref: Biblioteca<74>-Footnote-254068475
Ref: Biblioteca<74>-Footnote-264068541
Ref: Biblioteca<74>-Footnote-274068607
Ref: Biblioteca<74>-Footnote-284068673
Ref: Biblioteca<74>-Footnote-294068739
Ref: Biblioteca<74>-Footnote-304068805
Ref: Biblioteca<74>-Footnote-314068871
Ref: Biblioteca<74>-Footnote-324068937
Ref: Biblioteca<74>-Footnote-334069003
Ref: Biblioteca<74>-Footnote-344069069
Ref: Biblioteca<74>-Footnote-354069135
Ref: Biblioteca<74>-Footnote-364069201
Ref: Biblioteca<74>-Footnote-374069267
Node: Documentação<28>4069333
Ref: whatsnew/changelog id3734069451
Ref: 197c4069451
Ref: Documentação<28>-Footnote-14069640
Node: Testes<32>4069705
Ref: whatsnew/changelog id3744069825
Ref: 197d4069825
Ref: Testes<32>-Footnote-14071976
Ref: Testes<32>-Footnote-24072041
Ref: Testes<32>-Footnote-34072106
Ref: Testes<32>-Footnote-44072171
Ref: Testes<32>-Footnote-54072236
Ref: Testes<32>-Footnote-64072301
Ref: Testes<32>-Footnote-74072366
Ref: Testes<32>-Footnote-84072431
Ref: Testes<32>-Footnote-94072496
Ref: Testes<32>-Footnote-104072561
Ref: Testes<32>-Footnote-114072627
Node: Construção<36>4072693
Ref: whatsnew/changelog id3754072806
Ref: 197e4072806
Ref: Construção<36>-Footnote-14074554
Ref: Construção<36>-Footnote-24074619
Ref: Construção<36>-Footnote-34074684
Ref: Construção<36>-Footnote-44074749
Ref: Construção<36>-Footnote-54074814
Ref: Construção<36>-Footnote-64074879
Ref: Construção<36>-Footnote-74074944
Ref: Construção<36>-Footnote-84075009
Ref: Construção<36>-Footnote-94075074
Ref: Construção<36>-Footnote-104075139
Node: Windows<30>4075205
Ref: whatsnew/changelog id3764075317
Ref: 197f4075317
Ref: Windows<30>-Footnote-14075855
Ref: Windows<30>-Footnote-24075920
Ref: Windows<30>-Footnote-34075985
Node: macOS<22>4076050
Ref: whatsnew/changelog id3774076154
Ref: 19804076154
Ref: macOS<22>-Footnote-14076286
Node: IDLE<21>4076351
Ref: whatsnew/changelog id3784076453
Ref: 19814076453
Ref: IDLE<21>-Footnote-14076874
Node: API C<32>4076939
Ref: whatsnew/changelog id3794077023
Ref: 19824077023
Ref: API C<32>-Footnote-14077916
Ref: API C<32>-Footnote-24077981
Ref: API C<32>-Footnote-34078046
Ref: API C<32>-Footnote-44078111
Ref: API C<32>-Footnote-54078176
Node: Python 3 11 0 alpha 44078241
Ref: whatsnew/changelog python-3-11-0-alpha-44078368
Ref: 19834078368
Node: Núcleo e embutidos<73>4078944
Ref: whatsnew/changelog id3804079048
Ref: 19844079048
Ref: Núcleo e embutidos<73>-Footnote-14081251
Ref: Núcleo e embutidos<73>-Footnote-24081316
Ref: Núcleo e embutidos<73>-Footnote-34081381
Ref: Núcleo e embutidos<73>-Footnote-44081446
Ref: Núcleo e embutidos<73>-Footnote-54081511
Ref: Núcleo e embutidos<73>-Footnote-64081576
Ref: Núcleo e embutidos<73>-Footnote-74081641
Ref: Núcleo e embutidos<73>-Footnote-84081706
Ref: Núcleo e embutidos<73>-Footnote-94081771
Ref: Núcleo e embutidos<73>-Footnote-104081836
Ref: Núcleo e embutidos<73>-Footnote-114081902
Node: Biblioteca<75>4081968
Ref: whatsnew/changelog id3814082104
Ref: 19864082104
Ref: Biblioteca<75>-Footnote-14082311
Node: Núcleo e embutidos<74>4082376
Ref: whatsnew/changelog id3824082503
Ref: 19874082503
Ref: Núcleo e embutidos<74>-Footnote-14083233
Ref: Núcleo e embutidos<74>-Footnote-24083298
Ref: Núcleo e embutidos<74>-Footnote-34083363
Ref: Núcleo e embutidos<74>-Footnote-44083428
Ref: Núcleo e embutidos<74>-Footnote-54083493
Node: Biblioteca<76>4083558
Ref: whatsnew/changelog id3834083694
Ref: 19884083694
Ref: Biblioteca<76>-Footnote-14083844
Node: Núcleo e embutidos<75>4083909
Ref: whatsnew/changelog id3844084036
Ref: 19894084036
Ref: Núcleo e embutidos<75>-Footnote-14086586
Ref: Núcleo e embutidos<75>-Footnote-24086651
Ref: Núcleo e embutidos<75>-Footnote-34086716
Ref: Núcleo e embutidos<75>-Footnote-44086781
Ref: Núcleo e embutidos<75>-Footnote-54086846
Ref: Núcleo e embutidos<75>-Footnote-64086911
Ref: Núcleo e embutidos<75>-Footnote-74086976
Ref: Núcleo e embutidos<75>-Footnote-84087041
Ref: Núcleo e embutidos<75>-Footnote-94087106
Ref: Núcleo e embutidos<75>-Footnote-104087171
Ref: Núcleo e embutidos<75>-Footnote-114087237
Ref: Núcleo e embutidos<75>-Footnote-124087303
Ref: Núcleo e embutidos<75>-Footnote-134087369
Ref: Núcleo e embutidos<75>-Footnote-144087435
Ref: Núcleo e embutidos<75>-Footnote-154087501
Node: Biblioteca<77>4087567
Ref: whatsnew/changelog id3854087703
Ref: 198a4087703
Ref: Biblioteca<77>-Footnote-14087881
Node: Núcleo e embutidos<76>4087946
Ref: whatsnew/changelog id3864088073
Ref: 198b4088073
Ref: Núcleo e embutidos<76>-Footnote-14089357
Ref: Núcleo e embutidos<76>-Footnote-24089422
Ref: Núcleo e embutidos<76>-Footnote-34089487
Ref: Núcleo e embutidos<76>-Footnote-44089552
Ref: Núcleo e embutidos<76>-Footnote-54089617
Ref: Núcleo e embutidos<76>-Footnote-64089659
Ref: Núcleo e embutidos<76>-Footnote-74089724
Node: Biblioteca<78>4089789
Ref: whatsnew/changelog id3874089920
Ref: 198c4089920
Ref: Biblioteca<78>-Footnote-14097207
Ref: Biblioteca<78>-Footnote-24097272
Ref: Biblioteca<78>-Footnote-34097337
Ref: Biblioteca<78>-Footnote-44097402
Ref: Biblioteca<78>-Footnote-54097467
Ref: Biblioteca<78>-Footnote-64097532
Ref: Biblioteca<78>-Footnote-74097597
Ref: Biblioteca<78>-Footnote-84097662
Ref: Biblioteca<78>-Footnote-94097727
Ref: Biblioteca<78>-Footnote-104097792
Ref: Biblioteca<78>-Footnote-114097858
Ref: Biblioteca<78>-Footnote-124097924
Ref: Biblioteca<78>-Footnote-134097990
Ref: Biblioteca<78>-Footnote-144098056
Ref: Biblioteca<78>-Footnote-154098122
Ref: Biblioteca<78>-Footnote-164098188
Ref: Biblioteca<78>-Footnote-174098254
Ref: Biblioteca<78>-Footnote-184098320
Ref: Biblioteca<78>-Footnote-194098386
Ref: Biblioteca<78>-Footnote-204098452
Ref: Biblioteca<78>-Footnote-214098518
Ref: Biblioteca<78>-Footnote-224098584
Ref: Biblioteca<78>-Footnote-234098650
Ref: Biblioteca<78>-Footnote-244098716
Ref: Biblioteca<78>-Footnote-254098782
Ref: Biblioteca<78>-Footnote-264098848
Ref: Biblioteca<78>-Footnote-274098914
Ref: Biblioteca<78>-Footnote-284098980
Ref: Biblioteca<78>-Footnote-294099046
Ref: Biblioteca<78>-Footnote-304099112
Ref: Biblioteca<78>-Footnote-314099178
Ref: Biblioteca<78>-Footnote-324099244
Ref: Biblioteca<78>-Footnote-334099310
Ref: Biblioteca<78>-Footnote-344099376
Ref: Biblioteca<78>-Footnote-354099442
Ref: Biblioteca<78>-Footnote-364099508
Ref: Biblioteca<78>-Footnote-374099574
Ref: Biblioteca<78>-Footnote-384099640
Ref: Biblioteca<78>-Footnote-394099706
Ref: Biblioteca<78>-Footnote-404099772
Ref: Biblioteca<78>-Footnote-414099838
Ref: Biblioteca<78>-Footnote-424099904
Ref: Biblioteca<78>-Footnote-434099970
Ref: Biblioteca<78>-Footnote-444100036
Node: Documentação<29>4100102
Ref: whatsnew/changelog id3884100220
Ref: 19914100220
Ref: Documentação<29>-Footnote-14100717
Ref: Documentação<29>-Footnote-24100782
Ref: Documentação<29>-Footnote-34100847
Ref: Documentação<29>-Footnote-44100912
Node: Testes<33>4100977
Ref: whatsnew/changelog id3894101097
Ref: 19944101097
Ref: Testes<33>-Footnote-14102029
Ref: Testes<33>-Footnote-24102094
Ref: Testes<33>-Footnote-34102159
Ref: Testes<33>-Footnote-44102224
Ref: Testes<33>-Footnote-54102289
Ref: Testes<33>-Footnote-64102354
Ref: Testes<33>-Footnote-74102419
Ref: Testes<33>-Footnote-84102484
Node: Construção<37>4102549
Ref: whatsnew/changelog id3904102662
Ref: 19954102662
Ref: Construção<37>-Footnote-14104756
Ref: Construção<37>-Footnote-24104821
Ref: Construção<37>-Footnote-34104886
Ref: Construção<37>-Footnote-44104951
Ref: Construção<37>-Footnote-54105016
Ref: Construção<37>-Footnote-64105081
Ref: Construção<37>-Footnote-74105146
Ref: Construção<37>-Footnote-84105211
Ref: Construção<37>-Footnote-94105276
Ref: Construção<37>-Footnote-104105341
Ref: Construção<37>-Footnote-114105407
Ref: Construção<37>-Footnote-124105473
Node: Windows<31>4105539
Ref: whatsnew/changelog id3914105651
Ref: 19964105651
Ref: Windows<31>-Footnote-14105872
Node: macOS<23>4105937
Ref: whatsnew/changelog id3924106042
Ref: 19974106042
Ref: macOS<23>-Footnote-14106282
Node: API C<33>4106347
Ref: whatsnew/changelog id3934106432
Ref: 19984106432
Ref: API C<33>-Footnote-14107710
Ref: API C<33>-Footnote-24107775
Ref: API C<33>-Footnote-34107840
Ref: API C<33>-Footnote-44107905
Ref: API C<33>-Footnote-54107970
Node: Python 3 11 0 alpha 34108035
Ref: whatsnew/changelog python-3-11-0-alpha-34108162
Ref: 199a4108162
Node: Núcleo e embutidos<77>4108582
Ref: whatsnew/changelog id3944108686
Ref: 199b4108686
Ref: Núcleo e embutidos<77>-Footnote-14111274
Ref: Núcleo e embutidos<77>-Footnote-24111339
Ref: Núcleo e embutidos<77>-Footnote-34111404
Ref: Núcleo e embutidos<77>-Footnote-44111469
Ref: Núcleo e embutidos<77>-Footnote-54111534
Ref: Núcleo e embutidos<77>-Footnote-64111599
Ref: Núcleo e embutidos<77>-Footnote-74111664
Ref: Núcleo e embutidos<77>-Footnote-84111729
Ref: Núcleo e embutidos<77>-Footnote-94111794
Ref: Núcleo e embutidos<77>-Footnote-104111859
Ref: Núcleo e embutidos<77>-Footnote-114111925
Ref: Núcleo e embutidos<77>-Footnote-124111991
Node: Biblioteca<79>4112057
Ref: whatsnew/changelog id3954112193
Ref: 199d4112193
Ref: Biblioteca<79>-Footnote-14112371
Node: Núcleo e embutidos<78>4112436
Ref: whatsnew/changelog id3964112563
Ref: 199e4112563
Ref: Núcleo e embutidos<78>-Footnote-14115595
Ref: Núcleo e embutidos<78>-Footnote-24115660
Ref: Núcleo e embutidos<78>-Footnote-34115725
Ref: Núcleo e embutidos<78>-Footnote-44115790
Ref: Núcleo e embutidos<78>-Footnote-54115855
Ref: Núcleo e embutidos<78>-Footnote-64115920
Ref: Núcleo e embutidos<78>-Footnote-74115985
Ref: Núcleo e embutidos<78>-Footnote-84116050
Ref: Núcleo e embutidos<78>-Footnote-94116115
Ref: Núcleo e embutidos<78>-Footnote-104116157
Ref: Núcleo e embutidos<78>-Footnote-114116223
Ref: Núcleo e embutidos<78>-Footnote-124116289
Ref: Núcleo e embutidos<78>-Footnote-134116355
Ref: Núcleo e embutidos<78>-Footnote-144116421
Ref: Núcleo e embutidos<78>-Footnote-154116487
Ref: Núcleo e embutidos<78>-Footnote-164116553
Ref: Núcleo e embutidos<78>-Footnote-174116619
Ref: Núcleo e embutidos<78>-Footnote-184116685
Ref: Núcleo e embutidos<78>-Footnote-194116751
Ref: Núcleo e embutidos<78>-Footnote-204116817
Ref: Núcleo e embutidos<78>-Footnote-214116883
Node: Biblioteca<80>4116949
Ref: whatsnew/changelog id3974117080
Ref: 199f4117080
Ref: Biblioteca<80>-Footnote-14123060
Ref: Biblioteca<80>-Footnote-24123125
Ref: Biblioteca<80>-Footnote-34123190
Ref: Biblioteca<80>-Footnote-44123255
Ref: Biblioteca<80>-Footnote-54123320
Ref: Biblioteca<80>-Footnote-64123385
Ref: Biblioteca<80>-Footnote-74123450
Ref: Biblioteca<80>-Footnote-84123515
Ref: Biblioteca<80>-Footnote-94123580
Ref: Biblioteca<80>-Footnote-104123645
Ref: Biblioteca<80>-Footnote-114123711
Ref: Biblioteca<80>-Footnote-124123777
Ref: Biblioteca<80>-Footnote-134123843
Ref: Biblioteca<80>-Footnote-144123909
Ref: Biblioteca<80>-Footnote-154123975
Ref: Biblioteca<80>-Footnote-164124041
Ref: Biblioteca<80>-Footnote-174124107
Ref: Biblioteca<80>-Footnote-184124173
Ref: Biblioteca<80>-Footnote-194124239
Ref: Biblioteca<80>-Footnote-204124305
Ref: Biblioteca<80>-Footnote-214124371
Ref: Biblioteca<80>-Footnote-224124437
Ref: Biblioteca<80>-Footnote-234124503
Ref: Biblioteca<80>-Footnote-244124569
Ref: Biblioteca<80>-Footnote-254124635
Ref: Biblioteca<80>-Footnote-264124701
Ref: Biblioteca<80>-Footnote-274124767
Ref: Biblioteca<80>-Footnote-284124833
Ref: Biblioteca<80>-Footnote-294124899
Ref: Biblioteca<80>-Footnote-304124965
Ref: Biblioteca<80>-Footnote-314125031
Ref: Biblioteca<80>-Footnote-324125074
Ref: Biblioteca<80>-Footnote-334125140
Ref: Biblioteca<80>-Footnote-344125206
Ref: Biblioteca<80>-Footnote-354125272
Ref: Biblioteca<80>-Footnote-364125338
Node: Documentação<30>4125404
Ref: whatsnew/changelog id3984125522
Ref: 19a14125522
Ref: Documentação<30>-Footnote-14126830
Ref: Documentação<30>-Footnote-24126895
Ref: Documentação<30>-Footnote-34126960
Ref: Documentação<30>-Footnote-44127025
Ref: Documentação<30>-Footnote-54127090
Ref: Documentação<30>-Footnote-64127155
Ref: Documentação<30>-Footnote-74127220
Ref: Documentação<30>-Footnote-84127285
Ref: Documentação<30>-Footnote-94127350
Node: Testes<34>4127415
Ref: whatsnew/changelog id3994127535
Ref: 19a24127535
Ref: Testes<34>-Footnote-14128348
Ref: Testes<34>-Footnote-24128413
Ref: Testes<34>-Footnote-34128478
Ref: Testes<34>-Footnote-44128543
Ref: Testes<34>-Footnote-54128608
Ref: Testes<34>-Footnote-64128673
Node: Construção<38>4128738
Ref: whatsnew/changelog id4004128851
Ref: 19a34128851
Ref: Construção<38>-Footnote-14134663
Ref: Construção<38>-Footnote-24134728
Ref: Construção<38>-Footnote-34134793
Ref: Construção<38>-Footnote-44134858
Ref: Construção<38>-Footnote-54134923
Ref: Construção<38>-Footnote-64134988
Ref: Construção<38>-Footnote-74135053
Ref: Construção<38>-Footnote-84135118
Ref: Construção<38>-Footnote-94135183
Ref: Construção<38>-Footnote-104135248
Ref: Construção<38>-Footnote-114135314
Ref: Construção<38>-Footnote-124135380
Ref: Construção<38>-Footnote-134135446
Ref: Construção<38>-Footnote-144135512
Ref: Construção<38>-Footnote-154135578
Ref: Construção<38>-Footnote-164135644
Ref: Construção<38>-Footnote-174135710
Ref: Construção<38>-Footnote-184135776
Ref: Construção<38>-Footnote-194135842
Ref: Construção<38>-Footnote-204135908
Ref: Construção<38>-Footnote-214135974
Ref: Construção<38>-Footnote-224136040
Ref: Construção<38>-Footnote-234136106
Ref: Construção<38>-Footnote-244136172
Ref: Construção<38>-Footnote-254136238
Ref: Construção<38>-Footnote-264136304
Ref: Construção<38>-Footnote-274136370
Ref: Construção<38>-Footnote-284136436
Ref: Construção<38>-Footnote-294136502
Ref: Construção<38>-Footnote-304136568
Ref: Construção<38>-Footnote-314136634
Ref: Construção<38>-Footnote-324136700
Ref: Construção<38>-Footnote-334136766
Node: Windows<32>4136832
Ref: whatsnew/changelog id4014136944
Ref: 19a44136944
Ref: Windows<32>-Footnote-14138135
Ref: Windows<32>-Footnote-24138200
Ref: Windows<32>-Footnote-34138265
Ref: Windows<32>-Footnote-44138330
Ref: Windows<32>-Footnote-54138395
Ref: Windows<32>-Footnote-64138460
Node: macOS<24>4138525
Ref: whatsnew/changelog id4024138630
Ref: 19a54138630
Ref: macOS<24>-Footnote-14138780
Node: API C<34>4138845
Ref: whatsnew/changelog id4034138930
Ref: 19a64138930
Ref: API C<34>-Footnote-14139137
Node: Python 3 11 0 alpha 24139202
Ref: whatsnew/changelog python-3-11-0-alpha-24139329
Ref: 19a74139329
Node: Núcleo e embutidos<79>4139689
Ref: whatsnew/changelog id4044139793
Ref: 19a84139793
Ref: Núcleo e embutidos<79>-Footnote-14145176
Ref: Núcleo e embutidos<79>-Footnote-24145241
Ref: Núcleo e embutidos<79>-Footnote-34145306
Ref: Núcleo e embutidos<79>-Footnote-44145371
Ref: Núcleo e embutidos<79>-Footnote-54145436
Ref: Núcleo e embutidos<79>-Footnote-64145501
Ref: Núcleo e embutidos<79>-Footnote-74145566
Ref: Núcleo e embutidos<79>-Footnote-84145631
Ref: Núcleo e embutidos<79>-Footnote-94145696
Ref: Núcleo e embutidos<79>-Footnote-104145761
Ref: Núcleo e embutidos<79>-Footnote-114145827
Ref: Núcleo e embutidos<79>-Footnote-124145893
Ref: Núcleo e embutidos<79>-Footnote-134145959
Ref: Núcleo e embutidos<79>-Footnote-144146025
Ref: Núcleo e embutidos<79>-Footnote-154146091
Ref: Núcleo e embutidos<79>-Footnote-164146157
Ref: Núcleo e embutidos<79>-Footnote-174146223
Ref: Núcleo e embutidos<79>-Footnote-184146289
Ref: Núcleo e embutidos<79>-Footnote-194146355
Ref: Núcleo e embutidos<79>-Footnote-204146421
Ref: Núcleo e embutidos<79>-Footnote-214146464
Ref: Núcleo e embutidos<79>-Footnote-224146530
Ref: Núcleo e embutidos<79>-Footnote-234146596
Ref: Núcleo e embutidos<79>-Footnote-244146662
Ref: Núcleo e embutidos<79>-Footnote-254146728
Ref: Núcleo e embutidos<79>-Footnote-264146794
Node: Biblioteca<81>4146837
Ref: whatsnew/changelog id4054146968
Ref: 19aa4146968
Ref: Biblioteca<81>-Footnote-14154543
Ref: Biblioteca<81>-Footnote-24154608
Ref: Biblioteca<81>-Footnote-34154673
Ref: Biblioteca<81>-Footnote-44154738
Ref: Biblioteca<81>-Footnote-54154803
Ref: Biblioteca<81>-Footnote-64154868
Ref: Biblioteca<81>-Footnote-74154933
Ref: Biblioteca<81>-Footnote-84154998
Ref: Biblioteca<81>-Footnote-94155063
Ref: Biblioteca<81>-Footnote-104155128
Ref: Biblioteca<81>-Footnote-114155194
Ref: Biblioteca<81>-Footnote-124155260
Ref: Biblioteca<81>-Footnote-134155326
Ref: Biblioteca<81>-Footnote-144155392
Ref: Biblioteca<81>-Footnote-154155458
Ref: Biblioteca<81>-Footnote-164155524
Ref: Biblioteca<81>-Footnote-174155590
Ref: Biblioteca<81>-Footnote-184155656
Ref: Biblioteca<81>-Footnote-194155722
Ref: Biblioteca<81>-Footnote-204155788
Ref: Biblioteca<81>-Footnote-214155854
Ref: Biblioteca<81>-Footnote-224155920
Ref: Biblioteca<81>-Footnote-234155986
Ref: Biblioteca<81>-Footnote-244156052
Ref: Biblioteca<81>-Footnote-254156118
Ref: Biblioteca<81>-Footnote-264156184
Ref: Biblioteca<81>-Footnote-274156250
Ref: Biblioteca<81>-Footnote-284156316
Ref: Biblioteca<81>-Footnote-294156382
Ref: Biblioteca<81>-Footnote-304156448
Ref: Biblioteca<81>-Footnote-314156514
Ref: Biblioteca<81>-Footnote-324156580
Ref: Biblioteca<81>-Footnote-334156646
Ref: Biblioteca<81>-Footnote-344156712
Ref: Biblioteca<81>-Footnote-354156778
Ref: Biblioteca<81>-Footnote-364156844
Ref: Biblioteca<81>-Footnote-374156910
Ref: Biblioteca<81>-Footnote-384156976
Ref: Biblioteca<81>-Footnote-394157042
Ref: Biblioteca<81>-Footnote-404157108
Ref: Biblioteca<81>-Footnote-414157174
Ref: Biblioteca<81>-Footnote-424157240
Ref: Biblioteca<81>-Footnote-434157306
Ref: Biblioteca<81>-Footnote-444157366
Ref: Biblioteca<81>-Footnote-454157432
Node: Documentação<31>4157498
Ref: whatsnew/changelog id4064157616
Ref: 19af4157616
Ref: Documentação<31>-Footnote-14159112
Ref: Documentação<31>-Footnote-24159177
Ref: Documentação<31>-Footnote-34159242
Ref: Documentação<31>-Footnote-44159307
Ref: Documentação<31>-Footnote-54159372
Ref: Documentação<31>-Footnote-64159437
Ref: Documentação<31>-Footnote-74159502
Ref: Documentação<31>-Footnote-84159567
Ref: Documentação<31>-Footnote-94159632
Ref: Documentação<31>-Footnote-104159674
Ref: Documentação<31>-Footnote-114159740
Node: Testes<35>4159806
Ref: whatsnew/changelog id4074159926
Ref: 19b34159926
Ref: Testes<35>-Footnote-14162202
Ref: Testes<35>-Footnote-24162267
Ref: Testes<35>-Footnote-34162332
Ref: Testes<35>-Footnote-44162397
Ref: Testes<35>-Footnote-54162462
Ref: Testes<35>-Footnote-64162527
Ref: Testes<35>-Footnote-74162592
Ref: Testes<35>-Footnote-84162657
Ref: Testes<35>-Footnote-94162722
Ref: Testes<35>-Footnote-104162787
Ref: Testes<35>-Footnote-114162853
Ref: Testes<35>-Footnote-124162919
Ref: Testes<35>-Footnote-134162985
Node: Construção<39>4163051
Ref: whatsnew/changelog id4084163164
Ref: 19b44163164
Ref: Construção<39>-Footnote-14165853
Ref: Construção<39>-Footnote-24165918
Ref: Construção<39>-Footnote-34165983
Ref: Construção<39>-Footnote-44166048
Ref: Construção<39>-Footnote-54166113
Ref: Construção<39>-Footnote-64166178
Ref: Construção<39>-Footnote-74166243
Ref: Construção<39>-Footnote-84166308
Ref: Construção<39>-Footnote-94166373
Ref: Construção<39>-Footnote-104166438
Ref: Construção<39>-Footnote-114166504
Ref: Construção<39>-Footnote-124166570
Ref: Construção<39>-Footnote-134166636
Ref: Construção<39>-Footnote-144166702
Ref: Construção<39>-Footnote-154166768
Node: Windows<33>4166834
Ref: whatsnew/changelog id4094166946
Ref: 19b54166946
Ref: Windows<33>-Footnote-14167501
Ref: Windows<33>-Footnote-24167566
Ref: Windows<33>-Footnote-34167631
Node: macOS<25>4167696
Ref: whatsnew/changelog id4104167800
Ref: 19b64167800
Ref: macOS<25>-Footnote-14168061
Node: IDLE<22>4168126
Ref: whatsnew/changelog id4114168228
Ref: 19b74168228
Ref: IDLE<22>-Footnote-14168389
Node: API C<35>4168454
Ref: whatsnew/changelog id4124168538
Ref: 19b84168538
Ref: API C<35>-Footnote-14172268
Ref: API C<35>-Footnote-24172333
Ref: API C<35>-Footnote-34172398
Ref: API C<35>-Footnote-44172463
Ref: API C<35>-Footnote-54172528
Ref: API C<35>-Footnote-64172593
Ref: API C<35>-Footnote-74172658
Ref: API C<35>-Footnote-84172723
Ref: API C<35>-Footnote-94172788
Ref: API C<35>-Footnote-104172853
Ref: API C<35>-Footnote-114172919
Ref: API C<35>-Footnote-124172985
Ref: API C<35>-Footnote-134173051
Ref: API C<35>-Footnote-144173117
Node: Python 3 11 0 alpha 14173183
Ref: whatsnew/changelog python-3-11-0-alpha-14173309
Ref: 19b94173309
Node: Segurança<25>4174445
Ref: whatsnew/changelog id4134174549
Ref: 19ba4174549
Ref: Segurança<25>-Footnote-14175911
Ref: Segurança<25>-Footnote-24175976
Ref: Segurança<25>-Footnote-34176041
Ref: Segurança<25>-Footnote-44176106
Ref: Segurança<25>-Footnote-54176171
Ref: Segurança<25>-Footnote-64176226
Ref: Segurança<25>-Footnote-74176291
Node: Núcleo e embutidos<80>4176356
Ref: whatsnew/changelog id4144176483
Ref: 19bc4176483
Ref: Núcleo e embutidos<80>-Footnote-14177597
Ref: Núcleo e embutidos<80>-Footnote-24177662
Ref: Núcleo e embutidos<80>-Footnote-34177727
Ref: Núcleo e embutidos<80>-Footnote-44177792
Ref: Núcleo e embutidos<80>-Footnote-54177857
Ref: Núcleo e embutidos<80>-Footnote-64177922
Node: Biblioteca<82>4177987
Ref: whatsnew/changelog id4154178123
Ref: 19be4178123
Ref: Biblioteca<82>-Footnote-14178627
Ref: Biblioteca<82>-Footnote-24178692
Node: Núcleo e embutidos<81>4178757
Ref: whatsnew/changelog id4164178884
Ref: 19c14178884
Ref: Núcleo e embutidos<81>-Footnote-14179072
Node: Biblioteca<83>4179137
Ref: whatsnew/changelog id4174179273
Ref: 19c24179273
Ref: Biblioteca<83>-Footnote-14179534
Node: Núcleo e embutidos<82>4179599
Ref: whatsnew/changelog id4184179726
Ref: 19c34179726
Ref: Núcleo e embutidos<82>-Footnote-14182575
Ref: Núcleo e embutidos<82>-Footnote-24182640
Ref: Núcleo e embutidos<82>-Footnote-34182705
Ref: Núcleo e embutidos<82>-Footnote-44182772
Ref: Núcleo e embutidos<82>-Footnote-54182837
Ref: Núcleo e embutidos<82>-Footnote-64182902
Ref: Núcleo e embutidos<82>-Footnote-74182967
Ref: Núcleo e embutidos<82>-Footnote-84183032
Ref: Núcleo e embutidos<82>-Footnote-94183097
Node: Biblioteca<84>4183162
Ref: whatsnew/changelog id4194183298
Ref: 19c44183298
Ref: Biblioteca<84>-Footnote-14183577
Node: Núcleo e embutidos<83>4183642
Ref: whatsnew/changelog id4204183769
Ref: 19c54183769
Ref: Núcleo e embutidos<83>-Footnote-14184231
Ref: Núcleo e embutidos<83>-Footnote-24184296
Ref: Núcleo e embutidos<83>-Footnote-34184361
Node: Biblioteca<85>4184426
Ref: whatsnew/changelog id4214184562
Ref: 19c64184562
Ref: Biblioteca<85>-Footnote-14184907
Node: Núcleo e embutidos<84>4184972
Ref: whatsnew/changelog id4224185099
Ref: 19c74185099
Ref: Núcleo e embutidos<84>-Footnote-14186116
Ref: Núcleo e embutidos<84>-Footnote-24186181
Ref: Núcleo e embutidos<84>-Footnote-34186246
Ref: Núcleo e embutidos<84>-Footnote-44186311
Ref: Núcleo e embutidos<84>-Footnote-54186376
Node: Biblioteca<86>4186441
Ref: whatsnew/changelog id4234186577
Ref: 19c84186577
Ref: Biblioteca<86>-Footnote-14186781
Node: Núcleo e embutidos<85>4186846
Ref: whatsnew/changelog id4244186973
Ref: 19c94186973
Ref: Núcleo e embutidos<85>-Footnote-14192016
Ref: Núcleo e embutidos<85>-Footnote-24192081
Ref: Núcleo e embutidos<85>-Footnote-34192146
Ref: Núcleo e embutidos<85>-Footnote-44192211
Ref: Núcleo e embutidos<85>-Footnote-54192276
Ref: Núcleo e embutidos<85>-Footnote-64192341
Ref: Núcleo e embutidos<85>-Footnote-74192406
Ref: Núcleo e embutidos<85>-Footnote-84192471
Ref: Núcleo e embutidos<85>-Footnote-94192536
Ref: Núcleo e embutidos<85>-Footnote-104192601
Ref: Núcleo e embutidos<85>-Footnote-114192667
Ref: Núcleo e embutidos<85>-Footnote-124192733
Ref: Núcleo e embutidos<85>-Footnote-134192799
Ref: Núcleo e embutidos<85>-Footnote-144192865
Ref: Núcleo e embutidos<85>-Footnote-154192931
Ref: Núcleo e embutidos<85>-Footnote-164192997
Ref: Núcleo e embutidos<85>-Footnote-174193063
Ref: Núcleo e embutidos<85>-Footnote-184193129
Ref: Núcleo e embutidos<85>-Footnote-194193195
Ref: Núcleo e embutidos<85>-Footnote-204193261
Ref: Núcleo e embutidos<85>-Footnote-214193327
Ref: Núcleo e embutidos<85>-Footnote-224193393
Ref: Núcleo e embutidos<85>-Footnote-234193459
Ref: Núcleo e embutidos<85>-Footnote-244193525
Ref: Núcleo e embutidos<85>-Footnote-254193591
Ref: Núcleo e embutidos<85>-Footnote-264193657
Ref: Núcleo e embutidos<85>-Footnote-274193723
Ref: Núcleo e embutidos<85>-Footnote-284193789
Ref: Núcleo e embutidos<85>-Footnote-294193855
Ref: Núcleo e embutidos<85>-Footnote-304193921
Ref: Núcleo e embutidos<85>-Footnote-314193987
Ref: Núcleo e embutidos<85>-Footnote-324194053
Node: Biblioteca<87>4194119
Ref: whatsnew/changelog id4254194255
Ref: 19cb4194255
Ref: Biblioteca<87>-Footnote-14194528
Node: Núcleo e embutidos<86>4194593
Ref: whatsnew/changelog id4264194720
Ref: 19cc4194720
Ref: Núcleo e embutidos<86>-Footnote-14196567
Ref: Núcleo e embutidos<86>-Footnote-24196632
Ref: Núcleo e embutidos<86>-Footnote-34196697
Ref: Núcleo e embutidos<86>-Footnote-44196762
Ref: Núcleo e embutidos<86>-Footnote-54196827
Ref: Núcleo e embutidos<86>-Footnote-64196892
Ref: Núcleo e embutidos<86>-Footnote-74196957
Ref: Núcleo e embutidos<86>-Footnote-84197022
Ref: Núcleo e embutidos<86>-Footnote-94197087
Node: Biblioteca<88>4197152
Ref: whatsnew/changelog id4274197288
Ref: 19cd4197288
Ref: Biblioteca<88>-Footnote-14197620
Node: Núcleo e embutidos<87>4197685
Ref: whatsnew/changelog id4284197812
Ref: 19ce4197812
Ref: Núcleo e embutidos<87>-Footnote-14198348
Ref: Núcleo e embutidos<87>-Footnote-24198413
Ref: Núcleo e embutidos<87>-Footnote-34198455
Node: Biblioteca<89>4198520
Ref: whatsnew/changelog id4294198656
Ref: 19cf4198656
Ref: Biblioteca<89>-Footnote-14198972
Node: Núcleo e embutidos<88>4199037
Ref: whatsnew/changelog id4304199164
Ref: 19d04199164
Ref: Núcleo e embutidos<88>-Footnote-14202933
Ref: Núcleo e embutidos<88>-Footnote-24202998
Ref: Núcleo e embutidos<88>-Footnote-34203040
Ref: Núcleo e embutidos<88>-Footnote-44203105
Ref: Núcleo e embutidos<88>-Footnote-54203170
Ref: Núcleo e embutidos<88>-Footnote-64203235
Ref: Núcleo e embutidos<88>-Footnote-74203300
Ref: Núcleo e embutidos<88>-Footnote-84203365
Ref: Núcleo e embutidos<88>-Footnote-94203430
Ref: Núcleo e embutidos<88>-Footnote-104203495
Ref: Núcleo e embutidos<88>-Footnote-114203561
Ref: Núcleo e embutidos<88>-Footnote-124203627
Ref: Núcleo e embutidos<88>-Footnote-134203693
Ref: Núcleo e embutidos<88>-Footnote-144203759
Ref: Núcleo e embutidos<88>-Footnote-154203825
Ref: Núcleo e embutidos<88>-Footnote-164203891
Ref: Núcleo e embutidos<88>-Footnote-174203957
Ref: Núcleo e embutidos<88>-Footnote-184204023
Ref: Núcleo e embutidos<88>-Footnote-194204089
Ref: Núcleo e embutidos<88>-Footnote-204204155
Ref: Núcleo e embutidos<88>-Footnote-214204221
Ref: Núcleo e embutidos<88>-Footnote-224204287
Node: Biblioteca<90>4204353
Ref: whatsnew/changelog id4314204489
Ref: 19d14204489
Ref: Biblioteca<90>-Footnote-14204749
Node: Núcleo e embutidos<89>4204814
Ref: whatsnew/changelog id4324204941
Ref: 19d24204941
Ref: Núcleo e embutidos<89>-Footnote-14210644
Ref: Núcleo e embutidos<89>-Footnote-24210709
Ref: Núcleo e embutidos<89>-Footnote-34210774
Ref: Núcleo e embutidos<89>-Footnote-44210839
Ref: Núcleo e embutidos<89>-Footnote-54210904
Ref: Núcleo e embutidos<89>-Footnote-64210969
Ref: Núcleo e embutidos<89>-Footnote-74211034
Ref: Núcleo e embutidos<89>-Footnote-84211099
Ref: Núcleo e embutidos<89>-Footnote-94211164
Ref: Núcleo e embutidos<89>-Footnote-104211229
Ref: Núcleo e embutidos<89>-Footnote-114211295
Ref: Núcleo e embutidos<89>-Footnote-124211361
Ref: Núcleo e embutidos<89>-Footnote-134211427
Ref: Núcleo e embutidos<89>-Footnote-144211493
Ref: Núcleo e embutidos<89>-Footnote-154211559
Ref: Núcleo e embutidos<89>-Footnote-164211625
Ref: Núcleo e embutidos<89>-Footnote-174211691
Ref: Núcleo e embutidos<89>-Footnote-184211757
Ref: Núcleo e embutidos<89>-Footnote-194211823
Ref: Núcleo e embutidos<89>-Footnote-204211889
Ref: Núcleo e embutidos<89>-Footnote-214211955
Ref: Núcleo e embutidos<89>-Footnote-224212021
Ref: Núcleo e embutidos<89>-Footnote-234212087
Ref: Núcleo e embutidos<89>-Footnote-244212153
Ref: Núcleo e embutidos<89>-Footnote-254212219
Ref: Núcleo e embutidos<89>-Footnote-264212285
Ref: Núcleo e embutidos<89>-Footnote-274212351
Ref: Núcleo e embutidos<89>-Footnote-284212417
Ref: Núcleo e embutidos<89>-Footnote-294212483
Ref: Núcleo e embutidos<89>-Footnote-304212549
Node: Biblioteca<91>4212615
Ref: whatsnew/changelog id4334212746
Ref: 19d34212746
Ref: Biblioteca<91>-Footnote-14252585
Ref: Biblioteca<91>-Footnote-24252650
Ref: Biblioteca<91>-Footnote-34252715
Ref: Biblioteca<91>-Footnote-44252780
Ref: Biblioteca<91>-Footnote-54252847
Ref: Biblioteca<91>-Footnote-64252912
Ref: Biblioteca<91>-Footnote-74252977
Ref: Biblioteca<91>-Footnote-84253042
Ref: Biblioteca<91>-Footnote-94253107
Ref: Biblioteca<91>-Footnote-104253172
Ref: Biblioteca<91>-Footnote-114253238
Ref: Biblioteca<91>-Footnote-124253304
Ref: Biblioteca<91>-Footnote-134253370
Ref: Biblioteca<91>-Footnote-144253436
Ref: Biblioteca<91>-Footnote-154253502
Ref: Biblioteca<91>-Footnote-164253568
Ref: Biblioteca<91>-Footnote-174253634
Ref: Biblioteca<91>-Footnote-184253700
Ref: Biblioteca<91>-Footnote-194253766
Ref: Biblioteca<91>-Footnote-204253832
Ref: Biblioteca<91>-Footnote-214253898
Ref: Biblioteca<91>-Footnote-224253964
Ref: Biblioteca<91>-Footnote-234254030
Ref: Biblioteca<91>-Footnote-244254096
Ref: Biblioteca<91>-Footnote-254254162
Ref: Biblioteca<91>-Footnote-264254228
Ref: Biblioteca<91>-Footnote-274254294
Ref: Biblioteca<91>-Footnote-284254360
Ref: Biblioteca<91>-Footnote-294254426
Ref: Biblioteca<91>-Footnote-304254492
Ref: Biblioteca<91>-Footnote-314254558
Ref: Biblioteca<91>-Footnote-324254624
Ref: Biblioteca<91>-Footnote-334254690
Ref: Biblioteca<91>-Footnote-344254756
Ref: Biblioteca<91>-Footnote-354254822
Ref: Biblioteca<91>-Footnote-364254865
Ref: Biblioteca<91>-Footnote-374254931
Ref: Biblioteca<91>-Footnote-384254997
Ref: Biblioteca<91>-Footnote-394255063
Ref: Biblioteca<91>-Footnote-404255129
Ref: Biblioteca<91>-Footnote-414255195
Ref: Biblioteca<91>-Footnote-424255261
Ref: Biblioteca<91>-Footnote-434255327
Ref: Biblioteca<91>-Footnote-444255393
Ref: Biblioteca<91>-Footnote-454255459
Ref: Biblioteca<91>-Footnote-464255525
Ref: Biblioteca<91>-Footnote-474255591
Ref: Biblioteca<91>-Footnote-484255657
Ref: Biblioteca<91>-Footnote-494255723
Ref: Biblioteca<91>-Footnote-504255789
Ref: Biblioteca<91>-Footnote-514255855
Ref: Biblioteca<91>-Footnote-524255921
Ref: Biblioteca<91>-Footnote-534255987
Ref: Biblioteca<91>-Footnote-544256053
Ref: Biblioteca<91>-Footnote-554256119
Ref: Biblioteca<91>-Footnote-564256185
Ref: Biblioteca<91>-Footnote-574256251
Ref: Biblioteca<91>-Footnote-584256317
Ref: Biblioteca<91>-Footnote-594256383
Ref: Biblioteca<91>-Footnote-604256449
Ref: Biblioteca<91>-Footnote-614256515
Ref: Biblioteca<91>-Footnote-624256581
Ref: Biblioteca<91>-Footnote-634256647
Ref: Biblioteca<91>-Footnote-644256713
Ref: Biblioteca<91>-Footnote-654256779
Ref: Biblioteca<91>-Footnote-664256845
Ref: Biblioteca<91>-Footnote-674256911
Ref: Biblioteca<91>-Footnote-684256977
Ref: Biblioteca<91>-Footnote-694257043
Ref: Biblioteca<91>-Footnote-704257109
Ref: Biblioteca<91>-Footnote-714257175
Ref: Biblioteca<91>-Footnote-724257241
Ref: Biblioteca<91>-Footnote-734257307
Ref: Biblioteca<91>-Footnote-744257373
Ref: Biblioteca<91>-Footnote-754257439
Ref: Biblioteca<91>-Footnote-764257505
Ref: Biblioteca<91>-Footnote-774257571
Ref: Biblioteca<91>-Footnote-784257637
Ref: Biblioteca<91>-Footnote-794257703
Ref: Biblioteca<91>-Footnote-804257769
Ref: Biblioteca<91>-Footnote-814257835
Ref: Biblioteca<91>-Footnote-824257901
Ref: Biblioteca<91>-Footnote-834257967
Ref: Biblioteca<91>-Footnote-844258033
Ref: Biblioteca<91>-Footnote-854258099
Ref: Biblioteca<91>-Footnote-864258165
Ref: Biblioteca<91>-Footnote-874258231
Ref: Biblioteca<91>-Footnote-884258297
Ref: Biblioteca<91>-Footnote-894258363
Ref: Biblioteca<91>-Footnote-904258429
Ref: Biblioteca<91>-Footnote-914258495
Ref: Biblioteca<91>-Footnote-924258561
Ref: Biblioteca<91>-Footnote-934258627
Ref: Biblioteca<91>-Footnote-944258693
Ref: Biblioteca<91>-Footnote-954258759
Ref: Biblioteca<91>-Footnote-964258825
Ref: Biblioteca<91>-Footnote-974258891
Ref: Biblioteca<91>-Footnote-984258957
Ref: Biblioteca<91>-Footnote-994259023
Ref: Biblioteca<91>-Footnote-1004259089
Ref: Biblioteca<91>-Footnote-1014259156
Ref: Biblioteca<91>-Footnote-1024259223
Ref: Biblioteca<91>-Footnote-1034259290
Ref: Biblioteca<91>-Footnote-1044259357
Ref: Biblioteca<91>-Footnote-1054259424
Ref: Biblioteca<91>-Footnote-1064259491
Ref: Biblioteca<91>-Footnote-1074259558
Ref: Biblioteca<91>-Footnote-1084259625
Ref: Biblioteca<91>-Footnote-1094259692
Ref: Biblioteca<91>-Footnote-1104259759
Ref: Biblioteca<91>-Footnote-1114259826
Ref: Biblioteca<91>-Footnote-1124259893
Ref: Biblioteca<91>-Footnote-1134259960
Ref: Biblioteca<91>-Footnote-1144260027
Ref: Biblioteca<91>-Footnote-1154260094
Ref: Biblioteca<91>-Footnote-1164260161
Ref: Biblioteca<91>-Footnote-1174260228
Ref: Biblioteca<91>-Footnote-1184260295
Ref: Biblioteca<91>-Footnote-1194260362
Ref: Biblioteca<91>-Footnote-1204260429
Ref: Biblioteca<91>-Footnote-1214260496
Ref: Biblioteca<91>-Footnote-1224260563
Ref: Biblioteca<91>-Footnote-1234260630
Ref: Biblioteca<91>-Footnote-1244260697
Ref: Biblioteca<91>-Footnote-1254260764
Ref: Biblioteca<91>-Footnote-1264260831
Ref: Biblioteca<91>-Footnote-1274260898
Ref: Biblioteca<91>-Footnote-1284260965
Ref: Biblioteca<91>-Footnote-1294261032
Ref: Biblioteca<91>-Footnote-1304261099
Ref: Biblioteca<91>-Footnote-1314261166
Ref: Biblioteca<91>-Footnote-1324261233
Ref: Biblioteca<91>-Footnote-1334261300
Ref: Biblioteca<91>-Footnote-1344261367
Ref: Biblioteca<91>-Footnote-1354261434
Ref: Biblioteca<91>-Footnote-1364261501
Ref: Biblioteca<91>-Footnote-1374261568
Ref: Biblioteca<91>-Footnote-1384261635
Ref: Biblioteca<91>-Footnote-1394261702
Ref: Biblioteca<91>-Footnote-1404261769
Ref: Biblioteca<91>-Footnote-1414261836
Ref: Biblioteca<91>-Footnote-1424261903
Ref: Biblioteca<91>-Footnote-1434261970
Ref: Biblioteca<91>-Footnote-1444262037
Ref: Biblioteca<91>-Footnote-1454262104
Ref: Biblioteca<91>-Footnote-1464262171
Ref: Biblioteca<91>-Footnote-1474262238
Ref: Biblioteca<91>-Footnote-1484262304
Ref: Biblioteca<91>-Footnote-1494262371
Ref: Biblioteca<91>-Footnote-1504262438
Ref: Biblioteca<91>-Footnote-1514262499
Ref: Biblioteca<91>-Footnote-1524262566
Ref: Biblioteca<91>-Footnote-1534262633
Ref: Biblioteca<91>-Footnote-1544262700
Ref: Biblioteca<91>-Footnote-1554262767
Ref: Biblioteca<91>-Footnote-1564262834
Ref: Biblioteca<91>-Footnote-1574262901
Ref: Biblioteca<91>-Footnote-1584262968
Ref: Biblioteca<91>-Footnote-1594263035
Ref: Biblioteca<91>-Footnote-1604263079
Ref: Biblioteca<91>-Footnote-1614263146
Ref: Biblioteca<91>-Footnote-1624263213
Ref: Biblioteca<91>-Footnote-1634263280
Ref: Biblioteca<91>-Footnote-1644263347
Ref: Biblioteca<91>-Footnote-1654263414
Ref: Biblioteca<91>-Footnote-1664263481
Ref: Biblioteca<91>-Footnote-1674263548
Ref: Biblioteca<91>-Footnote-1684263615
Ref: Biblioteca<91>-Footnote-1694263682
Ref: Biblioteca<91>-Footnote-1704263749
Ref: Biblioteca<91>-Footnote-1714263816
Ref: Biblioteca<91>-Footnote-1724263883
Ref: Biblioteca<91>-Footnote-1734263950
Ref: Biblioteca<91>-Footnote-1744264017
Ref: Biblioteca<91>-Footnote-1754264084
Ref: Biblioteca<91>-Footnote-1764264151
Ref: Biblioteca<91>-Footnote-1774264218
Ref: Biblioteca<91>-Footnote-1784264285
Ref: Biblioteca<91>-Footnote-1794264352
Ref: Biblioteca<91>-Footnote-1804264419
Ref: Biblioteca<91>-Footnote-1814264486
Ref: Biblioteca<91>-Footnote-1824264553
Ref: Biblioteca<91>-Footnote-1834264620
Ref: Biblioteca<91>-Footnote-1844264687
Ref: Biblioteca<91>-Footnote-1854264754
Ref: Biblioteca<91>-Footnote-1864264821
Ref: Biblioteca<91>-Footnote-1874264888
Ref: Biblioteca<91>-Footnote-1884264955
Ref: Biblioteca<91>-Footnote-1894265022
Ref: Biblioteca<91>-Footnote-1904265089
Ref: Biblioteca<91>-Footnote-1914265156
Ref: Biblioteca<91>-Footnote-1924265223
Ref: Biblioteca<91>-Footnote-1934265290
Ref: Biblioteca<91>-Footnote-1944265357
Ref: Biblioteca<91>-Footnote-1954265424
Ref: Biblioteca<91>-Footnote-1964265490
Ref: Biblioteca<91>-Footnote-1974265557
Ref: Biblioteca<91>-Footnote-1984265624
Ref: Biblioteca<91>-Footnote-1994265691
Ref: Biblioteca<91>-Footnote-2004265758
Ref: Biblioteca<91>-Footnote-2014265825
Ref: Biblioteca<91>-Footnote-2024265892
Ref: Biblioteca<91>-Footnote-2034265959
Ref: Biblioteca<91>-Footnote-2044266026
Ref: Biblioteca<91>-Footnote-2054266093
Ref: Biblioteca<91>-Footnote-2064266160
Ref: Biblioteca<91>-Footnote-2074266227
Ref: Biblioteca<91>-Footnote-2084266294
Ref: Biblioteca<91>-Footnote-2094266361
Node: Documentação<32>4266428
Ref: whatsnew/changelog id4344266546
Ref: 19ea4266546
Ref: Documentação<32>-Footnote-14272890
Ref: Documentação<32>-Footnote-24272955
Ref: Documentação<32>-Footnote-34273020
Ref: Documentação<32>-Footnote-44273085
Ref: Documentação<32>-Footnote-54273150
Ref: Documentação<32>-Footnote-64273215
Ref: Documentação<32>-Footnote-74273267
Ref: Documentação<32>-Footnote-84273332
Ref: Documentação<32>-Footnote-94273397
Ref: Documentação<32>-Footnote-104273456
Ref: Documentação<32>-Footnote-114273522
Ref: Documentação<32>-Footnote-124273588
Ref: Documentação<32>-Footnote-134273654
Ref: Documentação<32>-Footnote-144273720
Ref: Documentação<32>-Footnote-154273786
Ref: Documentação<32>-Footnote-164273852
Ref: Documentação<32>-Footnote-174273918
Ref: Documentação<32>-Footnote-184273984
Ref: Documentação<32>-Footnote-194274050
Ref: Documentação<32>-Footnote-204274116
Ref: Documentação<32>-Footnote-214274182
Ref: Documentação<32>-Footnote-224274248
Ref: Documentação<32>-Footnote-234274314
Ref: Documentação<32>-Footnote-244274380
Ref: Documentação<32>-Footnote-254274446
Ref: Documentação<32>-Footnote-264274512
Ref: Documentação<32>-Footnote-274274578
Ref: Documentação<32>-Footnote-284274644
Ref: Documentação<32>-Footnote-294274710
Ref: Documentação<32>-Footnote-304274776
Ref: Documentação<32>-Footnote-314274842
Ref: Documentação<32>-Footnote-324274908
Ref: Documentação<32>-Footnote-334274974
Ref: Documentação<32>-Footnote-344275040
Ref: Documentação<32>-Footnote-354275106
Ref: Documentação<32>-Footnote-364275172
Ref: Documentação<32>-Footnote-374275238
Ref: Documentação<32>-Footnote-384275304
Ref: Documentação<32>-Footnote-394275370
Ref: Documentação<32>-Footnote-404275436
Ref: Documentação<32>-Footnote-414275502
Ref: Documentação<32>-Footnote-424275568
Node: Testes<36>4275634
Ref: whatsnew/changelog id4354275754
Ref: 19ec4275754
Ref: Testes<36>-Footnote-14281618
Ref: Testes<36>-Footnote-24281683
Ref: Testes<36>-Footnote-34281748
Ref: Testes<36>-Footnote-44281813
Ref: Testes<36>-Footnote-54281878
Ref: Testes<36>-Footnote-64281943
Ref: Testes<36>-Footnote-74282008
Ref: Testes<36>-Footnote-84282073
Ref: Testes<36>-Footnote-94282138
Ref: Testes<36>-Footnote-104282203
Ref: Testes<36>-Footnote-114282269
Ref: Testes<36>-Footnote-124282335
Ref: Testes<36>-Footnote-134282401
Ref: Testes<36>-Footnote-144282467
Ref: Testes<36>-Footnote-154282533
Ref: Testes<36>-Footnote-164282599
Ref: Testes<36>-Footnote-174282665
Ref: Testes<36>-Footnote-184282731
Ref: Testes<36>-Footnote-194282797
Ref: Testes<36>-Footnote-204282863
Ref: Testes<36>-Footnote-214282929
Ref: Testes<36>-Footnote-224282995
Ref: Testes<36>-Footnote-234283061
Ref: Testes<36>-Footnote-244283127
Ref: Testes<36>-Footnote-254283193
Ref: Testes<36>-Footnote-264283259
Ref: Testes<36>-Footnote-274283325
Ref: Testes<36>-Footnote-284283391
Ref: Testes<36>-Footnote-294283457
Ref: Testes<36>-Footnote-304283523
Ref: Testes<36>-Footnote-314283589
Ref: Testes<36>-Footnote-324283655
Ref: Testes<36>-Footnote-334283721
Ref: Testes<36>-Footnote-344283787
Ref: Testes<36>-Footnote-354283853
Node: Construção<40>4283919
Ref: whatsnew/changelog id4364284032
Ref: 19ef4284032
Ref: Construção<40>-Footnote-14286123
Ref: Construção<40>-Footnote-24286188
Ref: Construção<40>-Footnote-34286253
Ref: Construção<40>-Footnote-44286318
Ref: Construção<40>-Footnote-54286383
Ref: Construção<40>-Footnote-64286448
Ref: Construção<40>-Footnote-74286513
Ref: Construção<40>-Footnote-84286578
Ref: Construção<40>-Footnote-94286643
Ref: Construção<40>-Footnote-104286708
Ref: Construção<40>-Footnote-114286774
Node: Windows<34>4286840
Ref: whatsnew/changelog id4374286952
Ref: 19f04286952
Ref: Windows<34>-Footnote-14288062
Ref: Windows<34>-Footnote-24288127
Ref: Windows<34>-Footnote-34288192
Ref: Windows<34>-Footnote-44288257
Ref: Windows<34>-Footnote-54288322
Ref: Windows<34>-Footnote-64288387
Ref: Windows<34>-Footnote-74288452
Ref: Windows<34>-Footnote-84288517
Ref: Windows<34>-Footnote-94288582
Node: macOS<26>4288647
Ref: whatsnew/changelog id4384288751
Ref: 19f24288751
Ref: macOS<26>-Footnote-14289908
Ref: macOS<26>-Footnote-24289973
Ref: macOS<26>-Footnote-34290038
Ref: macOS<26>-Footnote-44290103
Ref: macOS<26>-Footnote-54290168
Ref: macOS<26>-Footnote-64290233
Ref: macOS<26>-Footnote-74290298
Node: IDLE<23>4290363
Ref: whatsnew/changelog id4394290477
Ref: 19f34290477
Ref: IDLE<23>-Footnote-14292008
Ref: IDLE<23>-Footnote-24292073
Ref: IDLE<23>-Footnote-34292138
Ref: IDLE<23>-Footnote-44292203
Ref: IDLE<23>-Footnote-54292268
Ref: IDLE<23>-Footnote-64292333
Ref: IDLE<23>-Footnote-74292398
Ref: IDLE<23>-Footnote-84292463
Ref: IDLE<23>-Footnote-94292528
Node: Ferramentas/Demos<20>4292593
Ref: whatsnew/changelog id4404292707
Ref: 19f44292707
Ref: Ferramentas/Demos<20>-Footnote-14293523
Ref: Ferramentas/Demos<20>-Footnote-24293588
Ref: Ferramentas/Demos<20>-Footnote-34293653
Ref: Ferramentas/Demos<20>-Footnote-44293718
Ref: Ferramentas/Demos<20>-Footnote-54293783
Ref: Ferramentas/Demos<20>-Footnote-64293848
Node: API C<36>4293913
Ref: whatsnew/changelog id4414294010
Ref: 19f54294010
Ref: API C<36>-Footnote-14299873
Ref: API C<36>-Footnote-24299938
Ref: API C<36>-Footnote-34300003
Ref: API C<36>-Footnote-44300068
Ref: API C<36>-Footnote-54300133
Ref: API C<36>-Footnote-64300198
Ref: API C<36>-Footnote-74300263
Ref: API C<36>-Footnote-84300328
Ref: API C<36>-Footnote-94300393
Ref: API C<36>-Footnote-104300458
Ref: API C<36>-Footnote-114300524
Ref: API C<36>-Footnote-124300590
Ref: API C<36>-Footnote-134300656
Ref: API C<36>-Footnote-144300722
Ref: API C<36>-Footnote-154300788
Ref: API C<36>-Footnote-164300854
Ref: API C<36>-Footnote-174300920
Ref: API C<36>-Footnote-184300986
Ref: API C<36>-Footnote-194301052
Ref: API C<36>-Footnote-204301118
Ref: API C<36>-Footnote-214301161
Ref: API C<36>-Footnote-224301227
Ref: API C<36>-Footnote-234301293
Ref: API C<36>-Footnote-244301359
Ref: API C<36>-Footnote-254301402
Ref: API C<36>-Footnote-264301445
Node: Python 3 10 0 beta 14301511
Ref: whatsnew/changelog python-3-10-0-beta-14301637
Ref: 19f84301637
Node: Segurança<26>4302181
Ref: whatsnew/changelog id4424302284
Ref: 19f94302284
Ref: Segurança<26>-Footnote-14305223
Ref: Segurança<26>-Footnote-24305288
Ref: Segurança<26>-Footnote-34305353
Ref: Segurança<26>-Footnote-44305418
Ref: Segurança<26>-Footnote-54305483
Ref: Segurança<26>-Footnote-64305548
Ref: Segurança<26>-Footnote-74305613
Ref: Segurança<26>-Footnote-84305678
Ref: Segurança<26>-Footnote-94305743
Ref: Segurança<26>-Footnote-104305808
Ref: Segurança<26>-Footnote-114305874
Node: Núcleo e embutidos<90>4305940
Ref: whatsnew/changelog id4434306066
Ref: 19fc4306066
Ref: Núcleo e embutidos<90>-Footnote-14307427
Ref: Núcleo e embutidos<90>-Footnote-24307492
Ref: Núcleo e embutidos<90>-Footnote-34307557
Ref: Núcleo e embutidos<90>-Footnote-44307622
Ref: Núcleo e embutidos<90>-Footnote-54307687
Ref: Núcleo e embutidos<90>-Footnote-64307752
Ref: Núcleo e embutidos<90>-Footnote-74307817
Node: Biblioteca<92>4307882
Ref: whatsnew/changelog id4444308017
Ref: 19fe4308017
Ref: Biblioteca<92>-Footnote-14308288
Ref: Biblioteca<92>-Footnote-24308353
Node: Núcleo e embutidos<91>4308418
Ref: whatsnew/changelog id4454308544
Ref: 19ff4308544
Ref: Núcleo e embutidos<91>-Footnote-14312565
Ref: Núcleo e embutidos<91>-Footnote-24312630
Ref: Núcleo e embutidos<91>-Footnote-34312695
Ref: Núcleo e embutidos<91>-Footnote-44312760
Ref: Núcleo e embutidos<91>-Footnote-54312825
Ref: Núcleo e embutidos<91>-Footnote-64312867
Ref: Núcleo e embutidos<91>-Footnote-74312932
Ref: Núcleo e embutidos<91>-Footnote-84312997
Ref: Núcleo e embutidos<91>-Footnote-94313062
Ref: Núcleo e embutidos<91>-Footnote-104313127
Ref: Núcleo e embutidos<91>-Footnote-114313193
Ref: Núcleo e embutidos<91>-Footnote-124313259
Ref: Núcleo e embutidos<91>-Footnote-134313325
Ref: Núcleo e embutidos<91>-Footnote-144313391
Ref: Núcleo e embutidos<91>-Footnote-154313457
Ref: Núcleo e embutidos<91>-Footnote-164313523
Ref: Núcleo e embutidos<91>-Footnote-174313589
Ref: Núcleo e embutidos<91>-Footnote-184313655
Ref: Núcleo e embutidos<91>-Footnote-194313721
Ref: Núcleo e embutidos<91>-Footnote-204313787
Ref: Núcleo e embutidos<91>-Footnote-214313853
Ref: Núcleo e embutidos<91>-Footnote-224313919
Node: Biblioteca<93>4313985
Ref: whatsnew/changelog id4464314120
Ref: 1a024314120
Ref: Biblioteca<93>-Footnote-14314317
Node: Núcleo e embutidos<92>4314382
Ref: whatsnew/changelog id4474314508
Ref: 1a034314508
Ref: Núcleo e embutidos<92>-Footnote-14315163
Ref: Núcleo e embutidos<92>-Footnote-24315228
Ref: Núcleo e embutidos<92>-Footnote-34315293
Node: Biblioteca<94>4315358
Ref: whatsnew/changelog id4484315488
Ref: 1a044315488
Ref: Biblioteca<94>-Footnote-14332308
Ref: Biblioteca<94>-Footnote-24332373
Ref: Biblioteca<94>-Footnote-34332438
Ref: Biblioteca<94>-Footnote-44332503
Ref: Biblioteca<94>-Footnote-54332568
Ref: Biblioteca<94>-Footnote-64332633
Ref: Biblioteca<94>-Footnote-74332698
Ref: Biblioteca<94>-Footnote-84332763
Ref: Biblioteca<94>-Footnote-94332828
Ref: Biblioteca<94>-Footnote-104332893
Ref: Biblioteca<94>-Footnote-114332959
Ref: Biblioteca<94>-Footnote-124333025
Ref: Biblioteca<94>-Footnote-134333091
Ref: Biblioteca<94>-Footnote-144333157
Ref: Biblioteca<94>-Footnote-154333223
Ref: Biblioteca<94>-Footnote-164333289
Ref: Biblioteca<94>-Footnote-174333355
Ref: Biblioteca<94>-Footnote-184333421
Ref: Biblioteca<94>-Footnote-194333487
Ref: Biblioteca<94>-Footnote-204333553
Ref: Biblioteca<94>-Footnote-214333619
Ref: Biblioteca<94>-Footnote-224333685
Ref: Biblioteca<94>-Footnote-234333728
Ref: Biblioteca<94>-Footnote-244333794
Ref: Biblioteca<94>-Footnote-254333860
Ref: Biblioteca<94>-Footnote-264333926
Ref: Biblioteca<94>-Footnote-274333992
Ref: Biblioteca<94>-Footnote-284334058
Ref: Biblioteca<94>-Footnote-294334124
Ref: Biblioteca<94>-Footnote-304334190
Ref: Biblioteca<94>-Footnote-314334256
Ref: Biblioteca<94>-Footnote-324334322
Ref: Biblioteca<94>-Footnote-334334388
Ref: Biblioteca<94>-Footnote-344334454
Ref: Biblioteca<94>-Footnote-354334520
Ref: Biblioteca<94>-Footnote-364334586
Ref: Biblioteca<94>-Footnote-374334652
Ref: Biblioteca<94>-Footnote-384334718
Ref: Biblioteca<94>-Footnote-394334784
Ref: Biblioteca<94>-Footnote-404334850
Ref: Biblioteca<94>-Footnote-414334916
Ref: Biblioteca<94>-Footnote-424334982
Ref: Biblioteca<94>-Footnote-434335025
Ref: Biblioteca<94>-Footnote-444335091
Ref: Biblioteca<94>-Footnote-454335157
Ref: Biblioteca<94>-Footnote-464335213
Ref: Biblioteca<94>-Footnote-474335279
Ref: Biblioteca<94>-Footnote-484335345
Ref: Biblioteca<94>-Footnote-494335411
Ref: Biblioteca<94>-Footnote-504335477
Ref: Biblioteca<94>-Footnote-514335543
Ref: Biblioteca<94>-Footnote-524335609
Ref: Biblioteca<94>-Footnote-534335675
Ref: Biblioteca<94>-Footnote-544335740
Ref: Biblioteca<94>-Footnote-554335806
Ref: Biblioteca<94>-Footnote-564335872
Ref: Biblioteca<94>-Footnote-574335938
Ref: Biblioteca<94>-Footnote-584336003
Ref: Biblioteca<94>-Footnote-594336069
Ref: Biblioteca<94>-Footnote-604336135
Ref: Biblioteca<94>-Footnote-614336201
Ref: Biblioteca<94>-Footnote-624336267
Ref: Biblioteca<94>-Footnote-634336333
Ref: Biblioteca<94>-Footnote-644336399
Ref: Biblioteca<94>-Footnote-654336465
Ref: Biblioteca<94>-Footnote-664336531
Ref: Biblioteca<94>-Footnote-674336597
Ref: Biblioteca<94>-Footnote-684336663
Ref: Biblioteca<94>-Footnote-694336706
Ref: Biblioteca<94>-Footnote-704336772
Ref: Biblioteca<94>-Footnote-714336838
Ref: Biblioteca<94>-Footnote-724336904
Ref: Biblioteca<94>-Footnote-734336970
Ref: Biblioteca<94>-Footnote-744337036
Ref: Biblioteca<94>-Footnote-754337102
Ref: Biblioteca<94>-Footnote-764337168
Ref: Biblioteca<94>-Footnote-774337234
Ref: Biblioteca<94>-Footnote-784337300
Ref: Biblioteca<94>-Footnote-794337366
Ref: Biblioteca<94>-Footnote-804337432
Ref: Biblioteca<94>-Footnote-814337498
Ref: Biblioteca<94>-Footnote-824337564
Ref: Biblioteca<94>-Footnote-834337630
Node: Documentação<33>4337696
Ref: whatsnew/changelog id4494337813
Ref: 1a0b4337813
Ref: Documentação<33>-Footnote-14338827
Ref: Documentação<33>-Footnote-24338892
Ref: Documentação<33>-Footnote-34338957
Ref: Documentação<33>-Footnote-44339022
Ref: Documentação<33>-Footnote-54339087
Ref: Documentação<33>-Footnote-64339152
Ref: Documentação<33>-Footnote-74339217
Node: Testes<37>4339282
Ref: whatsnew/changelog id4504339401
Ref: 1a0c4339401
Ref: Testes<37>-Footnote-14340482
Ref: Testes<37>-Footnote-24340547
Ref: Testes<37>-Footnote-34340612
Ref: Testes<37>-Footnote-44340677
Ref: Testes<37>-Footnote-54340742
Node: Construção<41>4340807
Ref: whatsnew/changelog id4514340919
Ref: 1a0d4340919
Ref: Construção<41>-Footnote-14341193
Ref: Construção<41>-Footnote-24341258
Ref: Construção<41>-Footnote-34341323
Node: Windows<35>4341365
Ref: whatsnew/changelog id4524341476
Ref: 1a0e4341476
Ref: Windows<35>-Footnote-14342821
Ref: Windows<35>-Footnote-24342886
Ref: Windows<35>-Footnote-34342951
Ref: Windows<35>-Footnote-44343016
Ref: Windows<35>-Footnote-54343081
Ref: Windows<35>-Footnote-64343146
Ref: Windows<35>-Footnote-74343211
Ref: Windows<35>-Footnote-84343276
Ref: Windows<35>-Footnote-94343341
Node: macOS<27>4343406
Ref: whatsnew/changelog id4534343509
Ref: 1a124343509
Ref: macOS<27>-Footnote-14344819
Ref: macOS<27>-Footnote-24344884
Ref: macOS<27>-Footnote-34344949
Ref: macOS<27>-Footnote-44345014
Ref: macOS<27>-Footnote-54345079
Ref: macOS<27>-Footnote-64345144
Node: IDLE<24>4345209
Ref: whatsnew/changelog id4544345310
Ref: 1a134345310
Ref: IDLE<24>-Footnote-14346112
Ref: IDLE<24>-Footnote-24346177
Ref: IDLE<24>-Footnote-34346242
Ref: IDLE<24>-Footnote-44346307
Ref: IDLE<24>-Footnote-54346372
Node: API C<37>4346437
Ref: whatsnew/changelog id4554346520
Ref: 1a144346520
Ref: API C<37>-Footnote-14348768
Ref: API C<37>-Footnote-24348833
Ref: API C<37>-Footnote-34348898
Ref: API C<37>-Footnote-44348963
Ref: API C<37>-Footnote-54349028
Ref: API C<37>-Footnote-64349093
Ref: API C<37>-Footnote-74349158
Ref: API C<37>-Footnote-84349223
Ref: API C<37>-Footnote-94349288
Ref: API C<37>-Footnote-104349330
Node: Python 3 10 0 alpha 74349396
Ref: whatsnew/changelog python-3-10-0-alpha-74349522
Ref: 1a154349522
Node: Segurança<27>4349970
Ref: whatsnew/changelog id4564350074
Ref: 1a164350074
Ref: Segurança<27>-Footnote-14351161
Ref: Segurança<27>-Footnote-24351226
Ref: Segurança<27>-Footnote-34351281
Ref: Segurança<27>-Footnote-44351346
Node: Núcleo e embutidos<93>4351411
Ref: whatsnew/changelog id4574351538
Ref: 1a174351538
Ref: Núcleo e embutidos<93>-Footnote-14352161
Ref: Núcleo e embutidos<93>-Footnote-24352226
Ref: Núcleo e embutidos<93>-Footnote-34352291
Ref: Núcleo e embutidos<93>-Footnote-44352356
Node: Biblioteca<95>4352421
Ref: whatsnew/changelog id4584352557
Ref: 1a184352557
Ref: Biblioteca<95>-Footnote-14352741
Node: Núcleo e embutidos<94>4352806
Ref: whatsnew/changelog id4594352933
Ref: 1a194352933
Ref: Núcleo e embutidos<94>-Footnote-14356823
Ref: Núcleo e embutidos<94>-Footnote-24356888
Ref: Núcleo e embutidos<94>-Footnote-34356953
Ref: Núcleo e embutidos<94>-Footnote-44357018
Ref: Núcleo e embutidos<94>-Footnote-54357060
Ref: Núcleo e embutidos<94>-Footnote-64357125
Ref: Núcleo e embutidos<94>-Footnote-74357190
Ref: Núcleo e embutidos<94>-Footnote-84357255
Ref: Núcleo e embutidos<94>-Footnote-94357320
Ref: Núcleo e embutidos<94>-Footnote-104357385
Ref: Núcleo e embutidos<94>-Footnote-114357451
Ref: Núcleo e embutidos<94>-Footnote-124357517
Ref: Núcleo e embutidos<94>-Footnote-134357583
Ref: Núcleo e embutidos<94>-Footnote-144357649
Ref: Núcleo e embutidos<94>-Footnote-154357715
Ref: Núcleo e embutidos<94>-Footnote-164357781
Ref: Núcleo e embutidos<94>-Footnote-174357847
Ref: Núcleo e embutidos<94>-Footnote-184357890
Ref: Núcleo e embutidos<94>-Footnote-194357956
Node: Biblioteca<96>4358022
Ref: whatsnew/changelog id4604358153
Ref: 1a1a4358153
Ref: Biblioteca<96>-Footnote-14365842
Ref: Biblioteca<96>-Footnote-24365907
Ref: Biblioteca<96>-Footnote-34365972
Ref: Biblioteca<96>-Footnote-44366037
Ref: Biblioteca<96>-Footnote-54366102
Ref: Biblioteca<96>-Footnote-64366167
Ref: Biblioteca<96>-Footnote-74366232
Ref: Biblioteca<96>-Footnote-84366297
Ref: Biblioteca<96>-Footnote-94366362
Ref: Biblioteca<96>-Footnote-104366427
Ref: Biblioteca<96>-Footnote-114366493
Ref: Biblioteca<96>-Footnote-124366559
Ref: Biblioteca<96>-Footnote-134366625
Ref: Biblioteca<96>-Footnote-144366691
Ref: Biblioteca<96>-Footnote-154366757
Ref: Biblioteca<96>-Footnote-164366800
Ref: Biblioteca<96>-Footnote-174366866
Ref: Biblioteca<96>-Footnote-184366932
Ref: Biblioteca<96>-Footnote-194366998
Ref: Biblioteca<96>-Footnote-204367064
Ref: Biblioteca<96>-Footnote-214367130
Ref: Biblioteca<96>-Footnote-224367196
Ref: Biblioteca<96>-Footnote-234367262
Ref: Biblioteca<96>-Footnote-244367328
Ref: Biblioteca<96>-Footnote-254367394
Ref: Biblioteca<96>-Footnote-264367476
Ref: Biblioteca<96>-Footnote-274367542
Ref: Biblioteca<96>-Footnote-284367608
Ref: Biblioteca<96>-Footnote-294367674
Ref: Biblioteca<96>-Footnote-304367740
Ref: Biblioteca<96>-Footnote-314367806
Ref: Biblioteca<96>-Footnote-324367872
Ref: Biblioteca<96>-Footnote-334367938
Ref: Biblioteca<96>-Footnote-344368004
Ref: Biblioteca<96>-Footnote-354368070
Ref: Biblioteca<96>-Footnote-364368136
Ref: Biblioteca<96>-Footnote-374368202
Ref: Biblioteca<96>-Footnote-384368268
Ref: Biblioteca<96>-Footnote-394368334
Ref: Biblioteca<96>-Footnote-404368400
Ref: Biblioteca<96>-Footnote-414368466
Ref: Biblioteca<96>-Footnote-424368532
Ref: Biblioteca<96>-Footnote-434368598
Ref: Biblioteca<96>-Footnote-444368664
Ref: Biblioteca<96>-Footnote-454368730
Node: Documentação<34>4368796
Ref: whatsnew/changelog id4614368914
Ref: 1a224368914
Ref: Documentação<34>-Footnote-14369611
Ref: Documentação<34>-Footnote-24369676
Ref: Documentação<34>-Footnote-34369741
Ref: Documentação<34>-Footnote-44369806
Node: Testes<38>4369871
Ref: whatsnew/changelog id4624369991
Ref: 1a234369991
Ref: Testes<38>-Footnote-14370298
Ref: Testes<38>-Footnote-24370363
Node: Construção<42>4370428
Ref: whatsnew/changelog id4634370541
Ref: 1a244370541
Ref: Construção<42>-Footnote-14371524
Ref: Construção<42>-Footnote-24371589
Ref: Construção<42>-Footnote-34371654
Ref: Construção<42>-Footnote-44371719
Ref: Construção<42>-Footnote-54371784
Ref: Construção<42>-Footnote-64371849
Node: Windows<36>4371914
Ref: whatsnew/changelog id4644372025
Ref: 1a254372025
Ref: Windows<36>-Footnote-14372215
Node: IDLE<25>4372280
Ref: whatsnew/changelog id4654372384
Ref: 1a264372384
Ref: IDLE<25>-Footnote-14372627
Node: API C<38>4372692
Ref: whatsnew/changelog id4664372776
Ref: 1a274372776
Ref: API C<38>-Footnote-14376250
Ref: API C<38>-Footnote-24376315
Ref: API C<38>-Footnote-34376380
Ref: API C<38>-Footnote-44376445
Ref: API C<38>-Footnote-54376510
Ref: API C<38>-Footnote-64376575
Ref: API C<38>-Footnote-74376640
Ref: API C<38>-Footnote-84376705
Ref: API C<38>-Footnote-94376770
Node: Python 3 10 0 alpha 64376812
Ref: whatsnew/changelog python-3-10-0-alpha-64376939
Ref: 1a284376939
Node: Segurança<28>4377485
Ref: whatsnew/changelog id4674377589
Ref: 1a294377589
Ref: Segurança<28>-Footnote-14377838
Node: Núcleo e embutidos<95>4377903
Ref: whatsnew/changelog id4684378030
Ref: 1a2a4378030
Ref: Núcleo e embutidos<95>-Footnote-14379678
Ref: Núcleo e embutidos<95>-Footnote-24379743
Ref: Núcleo e embutidos<95>-Footnote-34379808
Ref: Núcleo e embutidos<95>-Footnote-44379850
Ref: Núcleo e embutidos<95>-Footnote-54379915
Ref: Núcleo e embutidos<95>-Footnote-64379980
Ref: Núcleo e embutidos<95>-Footnote-74380045
Ref: Núcleo e embutidos<95>-Footnote-84380110
Node: Biblioteca<97>4380175
Ref: whatsnew/changelog id4694380311
Ref: 1a2b4380311
Ref: Biblioteca<97>-Footnote-14381017
Node: Núcleo e embutidos<96>4381082
Ref: whatsnew/changelog id4704381209
Ref: 1a2c4381209
Ref: Núcleo e embutidos<96>-Footnote-14381906
Ref: Núcleo e embutidos<96>-Footnote-24381971
Ref: Núcleo e embutidos<96>-Footnote-34382036
Ref: Núcleo e embutidos<96>-Footnote-44382101
Ref: Núcleo e embutidos<96>-Footnote-54382166
Node: Biblioteca<98>4382208
Ref: whatsnew/changelog id4714382344
Ref: 1a2d4382344
Ref: Biblioteca<98>-Footnote-14382760
Node: Núcleo e embutidos<97>4382825
Ref: whatsnew/changelog id4724382952
Ref: 1a2e4382952
Ref: Núcleo e embutidos<97>-Footnote-14383268
Node: Biblioteca<99>4383333
Ref: whatsnew/changelog id4734383464
Ref: 1a2f4383464
Ref: Biblioteca<99>-Footnote-14386305
Ref: Biblioteca<99>-Footnote-24386370
Ref: Biblioteca<99>-Footnote-34386435
Ref: Biblioteca<99>-Footnote-44386500
Ref: Biblioteca<99>-Footnote-54386565
Ref: Biblioteca<99>-Footnote-64386630
Ref: Biblioteca<99>-Footnote-74386695
Ref: Biblioteca<99>-Footnote-84386760
Ref: Biblioteca<99>-Footnote-94386825
Ref: Biblioteca<99>-Footnote-104386890
Ref: Biblioteca<99>-Footnote-114386956
Ref: Biblioteca<99>-Footnote-124387022
Ref: Biblioteca<99>-Footnote-134387088
Ref: Biblioteca<99>-Footnote-144387154
Ref: Biblioteca<99>-Footnote-154387220
Ref: Biblioteca<99>-Footnote-164387286
Node: Documentação<35>4387352
Ref: whatsnew/changelog id4744387470
Ref: 1a334387470
Ref: Documentação<35>-Footnote-14387824
Ref: Documentação<35>-Footnote-24387889
Ref: Documentação<35>-Footnote-34387954
Node: Testes<39>4387996
Ref: whatsnew/changelog id4754388116
Ref: 1a344388116
Ref: Testes<39>-Footnote-14388309
Node: Construção<43>4388374
Ref: whatsnew/changelog id4764388487
Ref: 1a354388487
Ref: Construção<43>-Footnote-14389570
Ref: Construção<43>-Footnote-24389635
Ref: Construção<43>-Footnote-34389700
Ref: Construção<43>-Footnote-44389765
Ref: Construção<43>-Footnote-54389830
Node: Windows<37>4389895
Ref: whatsnew/changelog id4774390007
Ref: 1a364390007
Ref: Windows<37>-Footnote-14390173
Node: macOS<28>4390238
Ref: whatsnew/changelog id4784390342
Ref: 1a384390342
Ref: macOS<28>-Footnote-14390485
Node: IDLE<26>4390550
Ref: whatsnew/changelog id4794390652
Ref: 1a394390652
Ref: IDLE<26>-Footnote-14390924
Node: API C<39>4390989
Ref: whatsnew/changelog id4804391073
Ref: 1a3a4391073
Ref: API C<39>-Footnote-14392827
Ref: API C<39>-Footnote-24392892
Ref: API C<39>-Footnote-34392957
Ref: API C<39>-Footnote-44393022
Ref: API C<39>-Footnote-54393087
Ref: API C<39>-Footnote-64393152
Ref: API C<39>-Footnote-74393217
Ref: API C<39>-Footnote-84393282
Ref: API C<39>-Footnote-94393347
Node: Python 3 10 0 alpha 54393412
Ref: whatsnew/changelog python-3-10-0-alpha-54393539
Ref: 1a424393539
Node: Segurança<29>4394009
Ref: whatsnew/changelog id4814394113
Ref: 1a434394113
Ref: Segurança<29>-Footnote-14394338
Node: Núcleo e embutidos<98>4394403
Ref: whatsnew/changelog id4824394531
Ref: 1a464394531
Ref: Núcleo e embutidos<98>-Footnote-14396665
Ref: Núcleo e embutidos<98>-Footnote-24396730
Ref: Núcleo e embutidos<98>-Footnote-34396795
Ref: Núcleo e embutidos<98>-Footnote-44396860
Ref: Núcleo e embutidos<98>-Footnote-54396925
Ref: Núcleo e embutidos<98>-Footnote-64396990
Ref: Núcleo e embutidos<98>-Footnote-74397055
Ref: Núcleo e embutidos<98>-Footnote-84397120
Ref: Núcleo e embutidos<98>-Footnote-94397185
Ref: Núcleo e embutidos<98>-Footnote-104397250
Ref: Núcleo e embutidos<98>-Footnote-114397316
Ref: Núcleo e embutidos<98>-Footnote-124397382
Node: Biblioteca<100>4397448
Ref: whatsnew/changelog id4834397585
Ref: 1a474397585
Ref: Biblioteca<100>-Footnote-14397807
Node: Núcleo e embutidos<99>4397872
Ref: whatsnew/changelog id4844398001
Ref: 1a484398001
Ref: Núcleo e embutidos<99>-Footnote-14398343
Ref: Núcleo e embutidos<99>-Footnote-24398408
Node: Biblioteca<101>4398473
Ref: whatsnew/changelog id4854398605
Ref: 1a494398605
Ref: Biblioteca<101>-Footnote-14403555
Ref: Biblioteca<101>-Footnote-24403620
Ref: Biblioteca<101>-Footnote-34403685
Ref: Biblioteca<101>-Footnote-44403750
Ref: Biblioteca<101>-Footnote-54403815
Ref: Biblioteca<101>-Footnote-64403880
Ref: Biblioteca<101>-Footnote-74403945
Ref: Biblioteca<101>-Footnote-84404010
Ref: Biblioteca<101>-Footnote-94404075
Ref: Biblioteca<101>-Footnote-104404140
Ref: Biblioteca<101>-Footnote-114404206
Ref: Biblioteca<101>-Footnote-124404272
Ref: Biblioteca<101>-Footnote-134404338
Ref: Biblioteca<101>-Footnote-144404404
Ref: Biblioteca<101>-Footnote-154404470
Ref: Biblioteca<101>-Footnote-164404536
Ref: Biblioteca<101>-Footnote-174404602
Ref: Biblioteca<101>-Footnote-184404668
Ref: Biblioteca<101>-Footnote-194404711
Ref: Biblioteca<101>-Footnote-204404777
Ref: Biblioteca<101>-Footnote-214404843
Ref: Biblioteca<101>-Footnote-224404909
Ref: Biblioteca<101>-Footnote-234404975
Ref: Biblioteca<101>-Footnote-244405043
Ref: Biblioteca<101>-Footnote-254405086
Ref: Biblioteca<101>-Footnote-264405152
Ref: Biblioteca<101>-Footnote-274405218
Ref: Biblioteca<101>-Footnote-284405284
Ref: Biblioteca<101>-Footnote-294405350
Ref: Biblioteca<101>-Footnote-304405416
Ref: Biblioteca<101>-Footnote-314405482
Ref: Biblioteca<101>-Footnote-324405548
Ref: Biblioteca<101>-Footnote-334405614
Ref: Biblioteca<101>-Footnote-344405680
Node: Documentação<36>4405746
Ref: whatsnew/changelog id4864405865
Ref: 1a4a4405865
Ref: Documentação<36>-Footnote-14406193
Ref: Documentação<36>-Footnote-24406258
Node: Testes<40>4406323
Ref: whatsnew/changelog id4874406443
Ref: 1a4b4406443
Ref: Testes<40>-Footnote-14406801
Ref: Testes<40>-Footnote-24406866
Node: Construção<44>4406931
Ref: whatsnew/changelog id4884407044
Ref: 1a4c4407044
Ref: Construção<44>-Footnote-14408279
Ref: Construção<44>-Footnote-24408344
Ref: Construção<44>-Footnote-34408409
Ref: Construção<44>-Footnote-44408474
Ref: Construção<44>-Footnote-54408539
Node: Windows<38>4408604
Ref: whatsnew/changelog id4894408716
Ref: 1a4d4408716
Ref: Windows<38>-Footnote-14408929
Ref: Windows<38>-Footnote-24408994
Node: macOS<29>4409059
Ref: whatsnew/changelog id4904409163
Ref: 1a4e4409163
Ref: macOS<29>-Footnote-14409416
Node: IDLE<27>4409481
Ref: whatsnew/changelog id4914409583
Ref: 1a4f4409583
Ref: IDLE<27>-Footnote-14410147
Ref: IDLE<27>-Footnote-24410212
Ref: IDLE<27>-Footnote-34410277
Ref: IDLE<27>-Footnote-44410342
Node: API C<40>4410407
Ref: whatsnew/changelog id4924410491
Ref: 1a504410491
Ref: API C<40>-Footnote-14411097
Ref: API C<40>-Footnote-24411162
Node: Python 3 10 0 alpha 44411227
Ref: whatsnew/changelog python-3-10-0-alpha-44411354
Ref: 1a524411354
Node: Núcleo e embutidos<100>4411878
Ref: whatsnew/changelog id4934411984
Ref: 1a534411984
Ref: Núcleo e embutidos<100>-Footnote-14413459
Ref: Núcleo e embutidos<100>-Footnote-24413524
Ref: Núcleo e embutidos<100>-Footnote-34413589
Ref: Núcleo e embutidos<100>-Footnote-44413654
Ref: Núcleo e embutidos<100>-Footnote-54413719
Ref: Núcleo e embutidos<100>-Footnote-64413784
Ref: Núcleo e embutidos<100>-Footnote-74413849
Ref: Núcleo e embutidos<100>-Footnote-84413914
Ref: Núcleo e embutidos<100>-Footnote-94413979
Ref: Núcleo e embutidos<100>-Footnote-104414044
Node: Biblioteca<102>4414110
Ref: whatsnew/changelog id4944414249
Ref: 1a544414249
Ref: Biblioteca<102>-Footnote-14414524
Node: Núcleo e embutidos<101>4414589
Ref: whatsnew/changelog id4954414719
Ref: 1a554414719
Ref: Núcleo e embutidos<101>-Footnote-14414999
Node: Biblioteca<103>4415064
Ref: whatsnew/changelog id4964415203
Ref: 1a574415203
Ref: Biblioteca<103>-Footnote-14416475
Ref: Biblioteca<103>-Footnote-24416540
Ref: Biblioteca<103>-Footnote-34416582
Ref: Biblioteca<103>-Footnote-44416647
Ref: Biblioteca<103>-Footnote-54416712
Ref: Biblioteca<103>-Footnote-64416777
Ref: Biblioteca<103>-Footnote-74416844
Node: Núcleo e embutidos<102>4416886
Ref: whatsnew/changelog id4974417016
Ref: 1a584417016
Ref: Núcleo e embutidos<102>-Footnote-14417474
Ref: Núcleo e embutidos<102>-Footnote-24417539
Node: Biblioteca<104>4417604
Ref: whatsnew/changelog id4984417737
Ref: 1a594417737
Ref: Biblioteca<104>-Footnote-14426569
Ref: Biblioteca<104>-Footnote-24426634
Ref: Biblioteca<104>-Footnote-34426699
Ref: Biblioteca<104>-Footnote-44426764
Ref: Biblioteca<104>-Footnote-54426829
Ref: Biblioteca<104>-Footnote-64426894
Ref: Biblioteca<104>-Footnote-74426959
Ref: Biblioteca<104>-Footnote-84427001
Ref: Biblioteca<104>-Footnote-94427043
Ref: Biblioteca<104>-Footnote-104427108
Ref: Biblioteca<104>-Footnote-114427174
Ref: Biblioteca<104>-Footnote-124427240
Ref: Biblioteca<104>-Footnote-134427306
Ref: Biblioteca<104>-Footnote-144427372
Ref: Biblioteca<104>-Footnote-154427438
Ref: Biblioteca<104>-Footnote-164427504
Ref: Biblioteca<104>-Footnote-174427570
Ref: Biblioteca<104>-Footnote-184427636
Ref: Biblioteca<104>-Footnote-194427701
Ref: Biblioteca<104>-Footnote-204427769
Ref: Biblioteca<104>-Footnote-214427812
Ref: Biblioteca<104>-Footnote-224427878
Ref: Biblioteca<104>-Footnote-234427944
Ref: Biblioteca<104>-Footnote-244428010
Ref: Biblioteca<104>-Footnote-254428076
Ref: Biblioteca<104>-Footnote-264428142
Ref: Biblioteca<104>-Footnote-274428208
Ref: Biblioteca<104>-Footnote-284428274
Ref: Biblioteca<104>-Footnote-294428340
Ref: Biblioteca<104>-Footnote-304428406
Ref: Biblioteca<104>-Footnote-314428472
Ref: Biblioteca<104>-Footnote-324428538
Ref: Biblioteca<104>-Footnote-334428581
Ref: Biblioteca<104>-Footnote-344428647
Ref: Biblioteca<104>-Footnote-354428713
Ref: Biblioteca<104>-Footnote-364428779
Ref: Biblioteca<104>-Footnote-374428845
Ref: Biblioteca<104>-Footnote-384428911
Ref: Biblioteca<104>-Footnote-394428977
Ref: Biblioteca<104>-Footnote-404429043
Ref: Biblioteca<104>-Footnote-414429109
Ref: Biblioteca<104>-Footnote-424429175
Ref: Biblioteca<104>-Footnote-434429241
Ref: Biblioteca<104>-Footnote-444429307
Ref: Biblioteca<104>-Footnote-454429373
Ref: Biblioteca<104>-Footnote-464429439
Ref: Biblioteca<104>-Footnote-474429505
Ref: Biblioteca<104>-Footnote-484429573
Ref: Biblioteca<104>-Footnote-494429616
Ref: Biblioteca<104>-Footnote-504429682
Ref: Biblioteca<104>-Footnote-514429748
Ref: Biblioteca<104>-Footnote-524429814
Ref: Biblioteca<104>-Footnote-534429880
Ref: Biblioteca<104>-Footnote-544429946
Ref: Biblioteca<104>-Footnote-554430012
Ref: Biblioteca<104>-Footnote-564430078
Ref: Biblioteca<104>-Footnote-574430144
Ref: Biblioteca<104>-Footnote-584430210
Node: Documentação<37>4430276
Ref: whatsnew/changelog id4994430395
Ref: 1a5f4430395
Ref: Documentação<37>-Footnote-14430711
Ref: Documentação<37>-Footnote-24430776
Node: Testes<41>4430841
Ref: whatsnew/changelog id5004430961
Ref: 1a614430961
Ref: Testes<41>-Footnote-14431740
Ref: Testes<41>-Footnote-24431805
Ref: Testes<41>-Footnote-34431870
Ref: Testes<41>-Footnote-44431935
Ref: Testes<41>-Footnote-54432000
Ref: Testes<41>-Footnote-64432065
Ref: Testes<41>-Footnote-74432130
Ref: Testes<41>-Footnote-84432195
Node: Construção<45>4432260
Ref: whatsnew/changelog id5014432371
Ref: 1a624432371
Ref: Construção<45>-Footnote-14433374
Ref: Construção<45>-Footnote-24433439
Ref: Construção<45>-Footnote-34433504
Ref: Construção<45>-Footnote-44433569
Ref: Construção<45>-Footnote-54433634
Ref: Construção<45>-Footnote-64433699
Node: macOS<30>4433764
Ref: whatsnew/changelog id5024433886
Ref: 1a634433886
Ref: macOS<30>-Footnote-14434206
Ref: macOS<30>-Footnote-24434271
Ref: macOS<30>-Footnote-34434336
Node: Ferramentas/Demos<21>4434401
Ref: whatsnew/changelog id5034434516
Ref: 1a644434516
Ref: Ferramentas/Demos<21>-Footnote-14434854
Ref: Ferramentas/Demos<21>-Footnote-24434919
Node: API C<41>4434984
Ref: whatsnew/changelog id5044435081
Ref: 1a654435081
Ref: API C<41>-Footnote-14435924
Ref: API C<41>-Footnote-24435989
Ref: API C<41>-Footnote-34436054
Ref: API C<41>-Footnote-44436121
Ref: API C<41>-Footnote-54436186
Node: Python 3 10 0 alpha 34436251
Ref: whatsnew/changelog python-3-10-0-alpha-34436378
Ref: 1a664436378
Node: Segurança<30>4437054
Ref: whatsnew/changelog id5054437159
Ref: 1a674437159
Ref: Segurança<30>-Footnote-14437402
Node: Núcleo e embutidos<103>4437467
Ref: whatsnew/changelog id5064437596
Ref: 1a684437596
Ref: Núcleo e embutidos<103>-Footnote-14439218
Ref: Núcleo e embutidos<103>-Footnote-24439283
Ref: Núcleo e embutidos<103>-Footnote-34439348
Ref: Núcleo e embutidos<103>-Footnote-44439413
Ref: Núcleo e embutidos<103>-Footnote-54439478
Node: Biblioteca<105>4439543
Ref: whatsnew/changelog id5074439682
Ref: 1a6b4439682
Ref: Biblioteca<105>-Footnote-14439914
Ref: Biblioteca<105>-Footnote-24439981
Node: Núcleo e embutidos<104>4440023
Ref: whatsnew/changelog id5084440153
Ref: 1a6c4440153
Ref: Núcleo e embutidos<104>-Footnote-14441999
Ref: Núcleo e embutidos<104>-Footnote-24442064
Ref: Núcleo e embutidos<104>-Footnote-34442129
Ref: Núcleo e embutidos<104>-Footnote-44442194
Ref: Núcleo e embutidos<104>-Footnote-54442259
Ref: Núcleo e embutidos<104>-Footnote-64442324
Ref: Núcleo e embutidos<104>-Footnote-74442389
Ref: Núcleo e embutidos<104>-Footnote-84442454
Ref: Núcleo e embutidos<104>-Footnote-94442519
Ref: Núcleo e embutidos<104>-Footnote-104442584
Node: Biblioteca<106>4442650
Ref: whatsnew/changelog id5094442789
Ref: 1a6d4442789
Ref: Biblioteca<106>-Footnote-14442932
Node: Núcleo e embutidos<105>4442997
Ref: whatsnew/changelog id5104443127
Ref: 1a6e4443127
Ref: Núcleo e embutidos<105>-Footnote-14443356
Node: Biblioteca<107>4443421
Ref: whatsnew/changelog id5114443560
Ref: 1a6f4443560
Ref: Biblioteca<107>-Footnote-14443702
Node: Núcleo e embutidos<106>4443767
Ref: whatsnew/changelog id5124443897
Ref: 1a704443897
Ref: Núcleo e embutidos<106>-Footnote-14444485
Ref: Núcleo e embutidos<106>-Footnote-24444550
Ref: Núcleo e embutidos<106>-Footnote-34444615
Node: Biblioteca<108>4444680
Ref: whatsnew/changelog id5134444813
Ref: 1a714444813
Ref: Biblioteca<108>-Footnote-14455891
Ref: Biblioteca<108>-Footnote-24455955
Ref: Biblioteca<108>-Footnote-34456020
Ref: Biblioteca<108>-Footnote-44456085
Ref: Biblioteca<108>-Footnote-54456150
Ref: Biblioteca<108>-Footnote-64456215
Ref: Biblioteca<108>-Footnote-74456280
Ref: Biblioteca<108>-Footnote-84456345
Ref: Biblioteca<108>-Footnote-94456410
Ref: Biblioteca<108>-Footnote-104456475
Ref: Biblioteca<108>-Footnote-114456541
Ref: Biblioteca<108>-Footnote-124456607
Ref: Biblioteca<108>-Footnote-134456673
Ref: Biblioteca<108>-Footnote-144456739
Ref: Biblioteca<108>-Footnote-154456805
Ref: Biblioteca<108>-Footnote-164456871
Ref: Biblioteca<108>-Footnote-174456937
Ref: Biblioteca<108>-Footnote-184457003
Ref: Biblioteca<108>-Footnote-194457069
Ref: Biblioteca<108>-Footnote-204457135
Ref: Biblioteca<108>-Footnote-214457201
Ref: Biblioteca<108>-Footnote-224457267
Ref: Biblioteca<108>-Footnote-234457333
Ref: Biblioteca<108>-Footnote-244457401
Ref: Biblioteca<108>-Footnote-254457467
Ref: Biblioteca<108>-Footnote-264457533
Ref: Biblioteca<108>-Footnote-274457576
Ref: Biblioteca<108>-Footnote-284457642
Ref: Biblioteca<108>-Footnote-294457708
Ref: Biblioteca<108>-Footnote-304457774
Ref: Biblioteca<108>-Footnote-314457840
Ref: Biblioteca<108>-Footnote-324457906
Ref: Biblioteca<108>-Footnote-334457972
Ref: Biblioteca<108>-Footnote-344458038
Ref: Biblioteca<108>-Footnote-354458104
Ref: Biblioteca<108>-Footnote-364458170
Ref: Biblioteca<108>-Footnote-374458236
Ref: Biblioteca<108>-Footnote-384458302
Ref: Biblioteca<108>-Footnote-394458368
Ref: Biblioteca<108>-Footnote-404458434
Ref: Biblioteca<108>-Footnote-414458500
Ref: Biblioteca<108>-Footnote-424458566
Ref: Biblioteca<108>-Footnote-434458632
Ref: Biblioteca<108>-Footnote-444458698
Ref: Biblioteca<108>-Footnote-454458764
Ref: Biblioteca<108>-Footnote-464458830
Ref: Biblioteca<108>-Footnote-474458896
Ref: Biblioteca<108>-Footnote-484458962
Ref: Biblioteca<108>-Footnote-494459028
Ref: Biblioteca<108>-Footnote-504459094
Ref: Biblioteca<108>-Footnote-514459160
Ref: Biblioteca<108>-Footnote-524459226
Ref: Biblioteca<108>-Footnote-534459292
Ref: Biblioteca<108>-Footnote-544459358
Ref: Biblioteca<108>-Footnote-554459424
Ref: Biblioteca<108>-Footnote-564459490
Ref: Biblioteca<108>-Footnote-574459556
Ref: Biblioteca<108>-Footnote-584459622
Ref: Biblioteca<108>-Footnote-594459688
Ref: Biblioteca<108>-Footnote-604459754
Ref: Biblioteca<108>-Footnote-614459820
Ref: Biblioteca<108>-Footnote-624459886
Ref: Biblioteca<108>-Footnote-634459952
Ref: Biblioteca<108>-Footnote-644460018
Ref: Biblioteca<108>-Footnote-654460084
Node: Documentação<38>4460150
Ref: whatsnew/changelog id5144460269
Ref: 1a764460269
Ref: Documentação<38>-Footnote-14460737
Ref: Documentação<38>-Footnote-24460802
Ref: Documentação<38>-Footnote-34460867
Node: Testes<42>4460932
Ref: whatsnew/changelog id5154461052
Ref: 1a774461052
Ref: Testes<42>-Footnote-14462264
Ref: Testes<42>-Footnote-24462329
Ref: Testes<42>-Footnote-34462394
Ref: Testes<42>-Footnote-44462459
Ref: Testes<42>-Footnote-54462524
Ref: Testes<42>-Footnote-64462589
Ref: Testes<42>-Footnote-74462654
Ref: Testes<42>-Footnote-84462719
Ref: Testes<42>-Footnote-94462784
Ref: Testes<42>-Footnote-104462849
Ref: Testes<42>-Footnote-114462915
Ref: Testes<42>-Footnote-124462981
Node: Construção<46>4463047
Ref: whatsnew/changelog id5164463160
Ref: 1a784463160
Ref: Construção<46>-Footnote-14464315
Ref: Construção<46>-Footnote-24464380
Ref: Construção<46>-Footnote-34464445
Ref: Construção<46>-Footnote-44464510
Ref: Construção<46>-Footnote-54464575
Ref: Construção<46>-Footnote-64464640
Ref: Construção<46>-Footnote-74464705
Node: Windows<39>4464770
Ref: whatsnew/changelog id5174464882
Ref: 1a794464882
Ref: Windows<39>-Footnote-14465176
Ref: Windows<39>-Footnote-24465241
Node: macOS<31>4465306
Ref: whatsnew/changelog id5184465410
Ref: 1a7a4465410
Ref: macOS<31>-Footnote-14466360
Ref: macOS<31>-Footnote-24466425
Ref: macOS<31>-Footnote-34466490
Ref: macOS<31>-Footnote-44466555
Ref: macOS<31>-Footnote-54466620
Node: IDLE<28>4466685
Ref: whatsnew/changelog id5194466799
Ref: 1a7b4466799
Ref: IDLE<28>-Footnote-14467221
Ref: IDLE<28>-Footnote-24467286
Ref: IDLE<28>-Footnote-34467351
Node: Ferramentas/Demos<22>4467416
Ref: whatsnew/changelog id5204467530
Ref: 1a7c4467530
Ref: Ferramentas/Demos<22>-Footnote-14467944
Ref: Ferramentas/Demos<22>-Footnote-24468009
Node: API C<42>4468074
Ref: whatsnew/changelog id5214468171
Ref: 1a7d4468171
Ref: API C<42>-Footnote-14472943
Ref: API C<42>-Footnote-24473008
Ref: API C<42>-Footnote-34473075
Ref: API C<42>-Footnote-44473117
Ref: API C<42>-Footnote-54473184
Ref: API C<42>-Footnote-64473226
Ref: API C<42>-Footnote-74473293
Ref: API C<42>-Footnote-84473335
Ref: API C<42>-Footnote-94473402
Ref: API C<42>-Footnote-104473444
Ref: API C<42>-Footnote-114473512
Ref: API C<42>-Footnote-124473555
Ref: API C<42>-Footnote-134473623
Ref: API C<42>-Footnote-144473666
Ref: API C<42>-Footnote-154473734
Ref: API C<42>-Footnote-164473777
Ref: API C<42>-Footnote-174473843
Ref: API C<42>-Footnote-184473911
Ref: API C<42>-Footnote-194473954
Ref: API C<42>-Footnote-204474022
Ref: API C<42>-Footnote-214474065
Ref: API C<42>-Footnote-224474133
Ref: API C<42>-Footnote-234474176
Ref: API C<42>-Footnote-244474244
Ref: API C<42>-Footnote-254474287
Ref: API C<42>-Footnote-264474353
Ref: API C<42>-Footnote-274474419
Ref: API C<42>-Footnote-284474485
Ref: API C<42>-Footnote-294474551
Ref: API C<42>-Footnote-304474617
Ref: API C<42>-Footnote-314474683
Ref: API C<42>-Footnote-324474749
Ref: API C<42>-Footnote-334474817
Ref: API C<42>-Footnote-344474883
Ref: API C<42>-Footnote-354474949
Ref: API C<42>-Footnote-364475015
Node: Python 3 10 0 alpha 24475081
Ref: whatsnew/changelog python-3-10-0-alpha-24475208
Ref: 1a7f4475208
Node: Segurança<31>4475680
Ref: whatsnew/changelog id5224475785
Ref: 1a804475785
Ref: Segurança<31>-Footnote-14476264
Ref: Segurança<31>-Footnote-24476329
Node: Núcleo e embutidos<107>4476394
Ref: whatsnew/changelog id5234476523
Ref: 1a814476523
Ref: Núcleo e embutidos<107>-Footnote-14479881
Ref: Núcleo e embutidos<107>-Footnote-24479946
Ref: Núcleo e embutidos<107>-Footnote-34480011
Ref: Núcleo e embutidos<107>-Footnote-44480076
Ref: Núcleo e embutidos<107>-Footnote-54480141
Ref: Núcleo e embutidos<107>-Footnote-64480206
Ref: Núcleo e embutidos<107>-Footnote-74480271
Ref: Núcleo e embutidos<107>-Footnote-84480336
Ref: Núcleo e embutidos<107>-Footnote-94480401
Ref: Núcleo e embutidos<107>-Footnote-104480466
Ref: Núcleo e embutidos<107>-Footnote-114480532
Ref: Núcleo e embutidos<107>-Footnote-124480598
Ref: Núcleo e embutidos<107>-Footnote-134480664
Ref: Núcleo e embutidos<107>-Footnote-144480730
Ref: Núcleo e embutidos<107>-Footnote-154480796
Ref: Núcleo e embutidos<107>-Footnote-164480862
Ref: Núcleo e embutidos<107>-Footnote-174480928
Ref: Núcleo e embutidos<107>-Footnote-184480994
Node: Biblioteca<109>4481060
Ref: whatsnew/changelog id5244481199
Ref: 1a844481199
Ref: Biblioteca<109>-Footnote-14481511
Node: Núcleo e embutidos<108>4481576
Ref: whatsnew/changelog id5254481706
Ref: 1a854481706
Ref: Núcleo e embutidos<108>-Footnote-14482037
Ref: Núcleo e embutidos<108>-Footnote-24482102
Node: Biblioteca<110>4482144
Ref: whatsnew/changelog id5264482277
Ref: 1a864482277
Ref: Biblioteca<110>-Footnote-14489322
Ref: Biblioteca<110>-Footnote-24489387
Ref: Biblioteca<110>-Footnote-34489452
Ref: Biblioteca<110>-Footnote-44489517
Ref: Biblioteca<110>-Footnote-54489582
Ref: Biblioteca<110>-Footnote-64489647
Ref: Biblioteca<110>-Footnote-74489712
Ref: Biblioteca<110>-Footnote-84489754
Ref: Biblioteca<110>-Footnote-94489819
Ref: Biblioteca<110>-Footnote-104489884
Ref: Biblioteca<110>-Footnote-114489950
Ref: Biblioteca<110>-Footnote-124490016
Ref: Biblioteca<110>-Footnote-134490082
Ref: Biblioteca<110>-Footnote-144490148
Ref: Biblioteca<110>-Footnote-154490214
Ref: Biblioteca<110>-Footnote-164490280
Ref: Biblioteca<110>-Footnote-174490346
Ref: Biblioteca<110>-Footnote-184490412
Ref: Biblioteca<110>-Footnote-194490478
Ref: Biblioteca<110>-Footnote-204490544
Ref: Biblioteca<110>-Footnote-214490610
Ref: Biblioteca<110>-Footnote-224490676
Ref: Biblioteca<110>-Footnote-234490742
Ref: Biblioteca<110>-Footnote-244490808
Ref: Biblioteca<110>-Footnote-254490874
Ref: Biblioteca<110>-Footnote-264490917
Ref: Biblioteca<110>-Footnote-274490983
Ref: Biblioteca<110>-Footnote-284491049
Ref: Biblioteca<110>-Footnote-294491115
Ref: Biblioteca<110>-Footnote-304491181
Ref: Biblioteca<110>-Footnote-314491247
Ref: Biblioteca<110>-Footnote-324491313
Ref: Biblioteca<110>-Footnote-334491379
Ref: Biblioteca<110>-Footnote-344491445
Ref: Biblioteca<110>-Footnote-354491511
Ref: Biblioteca<110>-Footnote-364491577
Ref: Biblioteca<110>-Footnote-374491642
Ref: Biblioteca<110>-Footnote-384491708
Ref: Biblioteca<110>-Footnote-394491774
Ref: Biblioteca<110>-Footnote-404491840
Ref: Biblioteca<110>-Footnote-414491906
Node: Documentação<39>4491972
Ref: whatsnew/changelog id5274492091
Ref: 1a894492091
Ref: Documentação<39>-Footnote-14492941
Ref: Documentação<39>-Footnote-24493006
Ref: Documentação<39>-Footnote-34493071
Ref: Documentação<39>-Footnote-44493136
Ref: Documentação<39>-Footnote-54493201
Ref: Documentação<39>-Footnote-64493266
Node: Testes<43>4493331
Ref: whatsnew/changelog id5284493451
Ref: 1a8c4493451
Ref: Testes<43>-Footnote-14494090
Ref: Testes<43>-Footnote-24494155
Ref: Testes<43>-Footnote-34494220
Ref: Testes<43>-Footnote-44494285
Node: Construção<47>4494350
Ref: whatsnew/changelog id5294494463
Ref: 1a8d4494463
Ref: Construção<47>-Footnote-14494739
Node: Windows<40>4494804
Ref: whatsnew/changelog id5304494916
Ref: 1a8e4494916
Ref: Windows<40>-Footnote-14495392
Ref: Windows<40>-Footnote-24495457
Ref: Windows<40>-Footnote-34495522
Ref: Windows<40>-Footnote-44495587
Ref: Windows<40>-Footnote-54495652
Node: macOS<32>4495717
Ref: whatsnew/changelog id5314495821
Ref: 1a8f4495821
Ref: macOS<32>-Footnote-14495973
Node: IDLE<29>4496038
Ref: whatsnew/changelog id5324496140
Ref: 1a904496140
Ref: IDLE<29>-Footnote-14496755
Ref: IDLE<29>-Footnote-24496820
Ref: IDLE<29>-Footnote-34496885
Node: API C<43>4496950
Ref: whatsnew/changelog id5334497034
Ref: 1a914497034
Ref: API C<43>-Footnote-14498369
Ref: API C<43>-Footnote-24498434
Ref: API C<43>-Footnote-34498499
Ref: API C<43>-Footnote-44498564
Ref: API C<43>-Footnote-54498629
Ref: API C<43>-Footnote-64498694
Ref: API C<43>-Footnote-74498759
Ref: API C<43>-Footnote-84498824
Node: Python 3 10 0 alpha 14498889
Ref: whatsnew/changelog python-3-10-0-alpha-14499014
Ref: 1a934499014
Node: Segurança<32>4500526
Ref: whatsnew/changelog id5344500631
Ref: 1a944500631
Ref: Segurança<32>-Footnote-14501537
Ref: Segurança<32>-Footnote-24501602
Ref: Segurança<32>-Footnote-34501667
Ref: Segurança<32>-Footnote-44501723
Ref: Segurança<32>-Footnote-54501788
Ref: Segurança<32>-Footnote-64501853
Ref: Segurança<32>-Footnote-74501909
Ref: Segurança<32>-Footnote-84501974
Node: Núcleo e embutidos<109>4502039
Ref: whatsnew/changelog id5354502168
Ref: 1a954502168
Ref: Núcleo e embutidos<109>-Footnote-14502863
Ref: Núcleo e embutidos<109>-Footnote-24502928
Ref: Núcleo e embutidos<109>-Footnote-34502993
Ref: Núcleo e embutidos<109>-Footnote-44503035
Ref: Núcleo e embutidos<109>-Footnote-54503100
Ref: Núcleo e embutidos<109>-Footnote-64503165
Node: Biblioteca<111>4503207
Ref: whatsnew/changelog id5364503346
Ref: 1a964503346
Ref: Biblioteca<111>-Footnote-14503535
Ref: Biblioteca<111>-Footnote-24503602
Node: Núcleo e embutidos<110>4503644
Ref: whatsnew/changelog id5374503774
Ref: 1a974503774
Ref: Núcleo e embutidos<110>-Footnote-14504169
Ref: Núcleo e embutidos<110>-Footnote-24504234
Node: Biblioteca<112>4504299
Ref: whatsnew/changelog id5384504438
Ref: 1a984504438
Ref: Biblioteca<112>-Footnote-14505065
Ref: Biblioteca<112>-Footnote-24505132
Ref: Biblioteca<112>-Footnote-34505174
Ref: Biblioteca<112>-Footnote-44505241
Ref: Biblioteca<112>-Footnote-54505283
Ref: Biblioteca<112>-Footnote-64505350
Ref: Biblioteca<112>-Footnote-74505392
Ref: Biblioteca<112>-Footnote-84505459
Ref: Biblioteca<112>-Footnote-94505501
Node: Núcleo e embutidos<111>4505568
Ref: whatsnew/changelog id5394505698
Ref: 1a994505698
Ref: Núcleo e embutidos<111>-Footnote-14505960
Node: Biblioteca<113>4506025
Ref: whatsnew/changelog id5404506164
Ref: 1a9a4506164
Ref: Biblioteca<113>-Footnote-14506589
Ref: Biblioteca<113>-Footnote-24506656
Ref: Biblioteca<113>-Footnote-34506698
Ref: Biblioteca<113>-Footnote-44506765
Ref: Biblioteca<113>-Footnote-54506807
Ref: Biblioteca<113>-Footnote-64506874
Node: Núcleo e embutidos<112>4506916
Ref: whatsnew/changelog id5414507046
Ref: 1a9b4507046
Ref: Núcleo e embutidos<112>-Footnote-14507303
Node: Biblioteca<114>4507368
Ref: whatsnew/changelog id5424507507
Ref: 1a9c4507507
Ref: Biblioteca<114>-Footnote-14507813
Node: Núcleo e embutidos<113>4507878
Ref: whatsnew/changelog id5434508008
Ref: 1a9d4508008
Ref: Núcleo e embutidos<113>-Footnote-14508454
Ref: Núcleo e embutidos<113>-Footnote-24508519
Node: Biblioteca<115>4508584
Ref: whatsnew/changelog id5444508723
Ref: 1a9e4508723
Ref: Biblioteca<115>-Footnote-14508919
Ref: Biblioteca<115>-Footnote-24508986
Node: Núcleo e embutidos<114>4509028
Ref: whatsnew/changelog id5454509158
Ref: 1a9f4509158
Ref: Núcleo e embutidos<114>-Footnote-14509633
Node: Biblioteca<116>4509698
Ref: whatsnew/changelog id5464509837
Ref: 1aa04509837
Ref: Biblioteca<116>-Footnote-14510004
Node: Núcleo e embutidos<115>4510069
Ref: whatsnew/changelog id5474510199
Ref: 1aa14510199
Ref: Núcleo e embutidos<115>-Footnote-14510399
Node: Biblioteca<117>4510466
Ref: whatsnew/changelog id5484510605
Ref: 1aa24510605
Ref: Biblioteca<117>-Footnote-14510806
Ref: Biblioteca<117>-Footnote-24510873
Node: Núcleo e embutidos<116>4510915
Ref: whatsnew/changelog id5494511045
Ref: 1aa34511045
Ref: Núcleo e embutidos<116>-Footnote-14511524
Ref: Núcleo e embutidos<116>-Footnote-24511589
Ref: Núcleo e embutidos<116>-Footnote-34511654
Node: Biblioteca<118>4511719
Ref: whatsnew/changelog id5504511858
Ref: 1aa44511858
Ref: Biblioteca<118>-Footnote-14512085
Ref: Biblioteca<118>-Footnote-24512152
Node: Núcleo e embutidos<117>4512194
Ref: whatsnew/changelog id5514512324
Ref: 1aa54512324
Ref: Núcleo e embutidos<117>-Footnote-14513785
Ref: Núcleo e embutidos<117>-Footnote-24513850
Ref: Núcleo e embutidos<117>-Footnote-34513915
Ref: Núcleo e embutidos<117>-Footnote-44513980
Ref: Núcleo e embutidos<117>-Footnote-54514045
Ref: Núcleo e embutidos<117>-Footnote-64514110
Ref: Núcleo e embutidos<117>-Footnote-74514175
Ref: Núcleo e embutidos<117>-Footnote-84514240
Ref: Núcleo e embutidos<117>-Footnote-94514305
Ref: Núcleo e embutidos<117>-Footnote-104514370
Ref: Núcleo e embutidos<117>-Footnote-114514436
Node: Biblioteca<119>4514504
Ref: whatsnew/changelog id5524514643
Ref: 1aa64514643
Ref: Biblioteca<119>-Footnote-14514793
Node: Núcleo e embutidos<118>4514860
Ref: whatsnew/changelog id5534514990
Ref: 1aa74514990
Ref: Núcleo e embutidos<118>-Footnote-14515562
Ref: Núcleo e embutidos<118>-Footnote-24515627
Node: Biblioteca<120>4515692
Ref: whatsnew/changelog id5544515831
Ref: 1aa84515831
Ref: Biblioteca<120>-Footnote-14516067
Ref: Biblioteca<120>-Footnote-24516134
Node: Núcleo e embutidos<119>4516201
Ref: whatsnew/changelog id5554516331
Ref: 1aa94516331
Ref: Núcleo e embutidos<119>-Footnote-14518310
Ref: Núcleo e embutidos<119>-Footnote-24518375
Ref: Núcleo e embutidos<119>-Footnote-34518440
Ref: Núcleo e embutidos<119>-Footnote-44518505
Ref: Núcleo e embutidos<119>-Footnote-54518570
Ref: Núcleo e embutidos<119>-Footnote-64518635
Ref: Núcleo e embutidos<119>-Footnote-74518700
Ref: Núcleo e embutidos<119>-Footnote-84518765
Ref: Núcleo e embutidos<119>-Footnote-94518830
Ref: Núcleo e embutidos<119>-Footnote-104518895
Ref: Núcleo e embutidos<119>-Footnote-114518961
Ref: Núcleo e embutidos<119>-Footnote-124519027
Ref: Núcleo e embutidos<119>-Footnote-134519093
Node: Biblioteca<121>4519159
Ref: whatsnew/changelog id5564519298
Ref: 1aaa4519298
Ref: Biblioteca<121>-Footnote-14519455
Node: Núcleo e embutidos<120>4519520
Ref: whatsnew/changelog id5574519650
Ref: 1aab4519650
Ref: Núcleo e embutidos<120>-Footnote-14520771
Ref: Núcleo e embutidos<120>-Footnote-24520836
Ref: Núcleo e embutidos<120>-Footnote-34520901
Ref: Núcleo e embutidos<120>-Footnote-44520943
Ref: Núcleo e embutidos<120>-Footnote-54521010
Ref: Núcleo e embutidos<120>-Footnote-64521075
Ref: Núcleo e embutidos<120>-Footnote-74521140
Ref: Núcleo e embutidos<120>-Footnote-84521207
Node: Biblioteca<122>4521272
Ref: whatsnew/changelog id5584521411
Ref: 1aac4521411
Ref: Biblioteca<122>-Footnote-14521631
Ref: Biblioteca<122>-Footnote-24521696
Node: Núcleo e embutidos<121>4521738
Ref: whatsnew/changelog id5594521868
Ref: 1aad4521868
Ref: Núcleo e embutidos<121>-Footnote-14526808
Ref: Núcleo e embutidos<121>-Footnote-24526873
Ref: Núcleo e embutidos<121>-Footnote-34526938
Ref: Núcleo e embutidos<121>-Footnote-44527003
Ref: Núcleo e embutidos<121>-Footnote-54527068
Ref: Núcleo e embutidos<121>-Footnote-64527133
Ref: Núcleo e embutidos<121>-Footnote-74527198
Ref: Núcleo e embutidos<121>-Footnote-84527263
Ref: Núcleo e embutidos<121>-Footnote-94527328
Ref: Núcleo e embutidos<121>-Footnote-104527393
Ref: Núcleo e embutidos<121>-Footnote-114527459
Ref: Núcleo e embutidos<121>-Footnote-124527525
Ref: Núcleo e embutidos<121>-Footnote-134527591
Ref: Núcleo e embutidos<121>-Footnote-144527659
Ref: Núcleo e embutidos<121>-Footnote-154527725
Ref: Núcleo e embutidos<121>-Footnote-164527791
Ref: Núcleo e embutidos<121>-Footnote-174527857
Ref: Núcleo e embutidos<121>-Footnote-184527923
Ref: Núcleo e embutidos<121>-Footnote-194527989
Ref: Núcleo e embutidos<121>-Footnote-204528055
Ref: Núcleo e embutidos<121>-Footnote-214528121
Ref: Núcleo e embutidos<121>-Footnote-224528187
Ref: Núcleo e embutidos<121>-Footnote-234528253
Ref: Núcleo e embutidos<121>-Footnote-244528319
Ref: Núcleo e embutidos<121>-Footnote-254528385
Ref: Núcleo e embutidos<121>-Footnote-264528451
Node: Biblioteca<123>4528516
Ref: whatsnew/changelog id5604528655
Ref: 1ab24528655
Ref: Biblioteca<123>-Footnote-14528878
Ref: Biblioteca<123>-Footnote-24528945
Node: Núcleo e embutidos<122>4529012
Ref: whatsnew/changelog id5614529142
Ref: 1ab34529142
Ref: Núcleo e embutidos<122>-Footnote-14529732
Ref: Núcleo e embutidos<122>-Footnote-24529797
Node: Biblioteca<124>4529862
Ref: whatsnew/changelog id5624530001
Ref: 1ab44530001
Ref: Biblioteca<124>-Footnote-14530375
Node: Núcleo e embutidos<123>4530440
Ref: whatsnew/changelog id5634530570
Ref: 1ab54530570
Ref: Núcleo e embutidos<123>-Footnote-14530917
Ref: Núcleo e embutidos<123>-Footnote-24530982
Node: Biblioteca<125>4531047
Ref: whatsnew/changelog id5644531180
Ref: 1ab64531180
Ref: Biblioteca<125>-Footnote-14553370
Ref: Biblioteca<125>-Footnote-24553435
Ref: Biblioteca<125>-Footnote-34553500
Ref: Biblioteca<125>-Footnote-44553565
Ref: Biblioteca<125>-Footnote-54553630
Ref: Biblioteca<125>-Footnote-64553695
Ref: Biblioteca<125>-Footnote-74553760
Ref: Biblioteca<125>-Footnote-84553825
Ref: Biblioteca<125>-Footnote-94553890
Ref: Biblioteca<125>-Footnote-104553955
Ref: Biblioteca<125>-Footnote-114554021
Ref: Biblioteca<125>-Footnote-124554087
Ref: Biblioteca<125>-Footnote-134554153
Ref: Biblioteca<125>-Footnote-144554219
Ref: Biblioteca<125>-Footnote-154554285
Ref: Biblioteca<125>-Footnote-164554351
Ref: Biblioteca<125>-Footnote-174554404
Ref: Biblioteca<125>-Footnote-184554470
Ref: Biblioteca<125>-Footnote-194554536
Ref: Biblioteca<125>-Footnote-204554602
Ref: Biblioteca<125>-Footnote-214554670
Ref: Biblioteca<125>-Footnote-224554713
Ref: Biblioteca<125>-Footnote-234554781
Ref: Biblioteca<125>-Footnote-244554824
Ref: Biblioteca<125>-Footnote-254554890
Ref: Biblioteca<125>-Footnote-264554956
Ref: Biblioteca<125>-Footnote-274555022
Ref: Biblioteca<125>-Footnote-284555088
Ref: Biblioteca<125>-Footnote-294555154
Ref: Biblioteca<125>-Footnote-304555220
Ref: Biblioteca<125>-Footnote-314555286
Ref: Biblioteca<125>-Footnote-324555352
Ref: Biblioteca<125>-Footnote-334555418
Ref: Biblioteca<125>-Footnote-344555484
Ref: Biblioteca<125>-Footnote-354555550
Ref: Biblioteca<125>-Footnote-364555616
Ref: Biblioteca<125>-Footnote-374555682
Ref: Biblioteca<125>-Footnote-384555748
Ref: Biblioteca<125>-Footnote-394555814
Ref: Biblioteca<125>-Footnote-404555880
Ref: Biblioteca<125>-Footnote-414555946
Ref: Biblioteca<125>-Footnote-424556012
Ref: Biblioteca<125>-Footnote-434556078
Ref: Biblioteca<125>-Footnote-444556144
Ref: Biblioteca<125>-Footnote-454556210
Ref: Biblioteca<125>-Footnote-464556276
Ref: Biblioteca<125>-Footnote-474556342
Ref: Biblioteca<125>-Footnote-484556408
Ref: Biblioteca<125>-Footnote-494556474
Ref: Biblioteca<125>-Footnote-504556540
Ref: Biblioteca<125>-Footnote-514556606
Ref: Biblioteca<125>-Footnote-524556672
Ref: Biblioteca<125>-Footnote-534556738
Ref: Biblioteca<125>-Footnote-544556804
Ref: Biblioteca<125>-Footnote-554556870
Ref: Biblioteca<125>-Footnote-564556936
Ref: Biblioteca<125>-Footnote-574557002
Ref: Biblioteca<125>-Footnote-584557059
Ref: Biblioteca<125>-Footnote-594557125
Ref: Biblioteca<125>-Footnote-604557191
Ref: Biblioteca<125>-Footnote-614557257
Ref: Biblioteca<125>-Footnote-624557323
Ref: Biblioteca<125>-Footnote-634557389
Ref: Biblioteca<125>-Footnote-644557455
Ref: Biblioteca<125>-Footnote-654557521
Ref: Biblioteca<125>-Footnote-664557587
Ref: Biblioteca<125>-Footnote-674557653
Ref: Biblioteca<125>-Footnote-684557719
Ref: Biblioteca<125>-Footnote-694557785
Ref: Biblioteca<125>-Footnote-704557851
Ref: Biblioteca<125>-Footnote-714557917
Ref: Biblioteca<125>-Footnote-724557983
Ref: Biblioteca<125>-Footnote-734558049
Ref: Biblioteca<125>-Footnote-744558115
Ref: Biblioteca<125>-Footnote-754558181
Ref: Biblioteca<125>-Footnote-764558247
Ref: Biblioteca<125>-Footnote-774558313
Ref: Biblioteca<125>-Footnote-784558379
Ref: Biblioteca<125>-Footnote-794558445
Ref: Biblioteca<125>-Footnote-804558511
Ref: Biblioteca<125>-Footnote-814558577
Ref: Biblioteca<125>-Footnote-824558643
Ref: Biblioteca<125>-Footnote-834558709
Ref: Biblioteca<125>-Footnote-844558775
Ref: Biblioteca<125>-Footnote-854558841
Ref: Biblioteca<125>-Footnote-864558907
Ref: Biblioteca<125>-Footnote-874558973
Ref: Biblioteca<125>-Footnote-884559039
Ref: Biblioteca<125>-Footnote-894559105
Ref: Biblioteca<125>-Footnote-904559171
Ref: Biblioteca<125>-Footnote-914559237
Ref: Biblioteca<125>-Footnote-924559303
Ref: Biblioteca<125>-Footnote-934559369
Ref: Biblioteca<125>-Footnote-944559435
Ref: Biblioteca<125>-Footnote-954559501
Ref: Biblioteca<125>-Footnote-964559567
Ref: Biblioteca<125>-Footnote-974559633
Ref: Biblioteca<125>-Footnote-984559699
Ref: Biblioteca<125>-Footnote-994559765
Ref: Biblioteca<125>-Footnote-1004559831
Ref: Biblioteca<125>-Footnote-1014559898
Ref: Biblioteca<125>-Footnote-1024559965
Ref: Biblioteca<125>-Footnote-1034560032
Ref: Biblioteca<125>-Footnote-1044560099
Ref: Biblioteca<125>-Footnote-1054560166
Ref: Biblioteca<125>-Footnote-1064560233
Ref: Biblioteca<125>-Footnote-1074560300
Ref: Biblioteca<125>-Footnote-1084560367
Ref: Biblioteca<125>-Footnote-1094560434
Ref: Biblioteca<125>-Footnote-1104560501
Ref: Biblioteca<125>-Footnote-1114560568
Ref: Biblioteca<125>-Footnote-1124560635
Ref: Biblioteca<125>-Footnote-1134560702
Ref: Biblioteca<125>-Footnote-1144560769
Ref: Biblioteca<125>-Footnote-1154560836
Ref: Biblioteca<125>-Footnote-1164560903
Ref: Biblioteca<125>-Footnote-1174560970
Ref: Biblioteca<125>-Footnote-1184561037
Ref: Biblioteca<125>-Footnote-1194561104
Ref: Biblioteca<125>-Footnote-1204561171
Ref: Biblioteca<125>-Footnote-1214561237
Ref: Biblioteca<125>-Footnote-1224561304
Ref: Biblioteca<125>-Footnote-1234561371
Ref: Biblioteca<125>-Footnote-1244561438
Ref: Biblioteca<125>-Footnote-1254561505
Ref: Biblioteca<125>-Footnote-1264561549
Ref: Biblioteca<125>-Footnote-1274561616
Ref: Biblioteca<125>-Footnote-1284561683
Ref: Biblioteca<125>-Footnote-1294561750
Ref: Biblioteca<125>-Footnote-1304561817
Ref: Biblioteca<125>-Footnote-1314561884
Ref: Biblioteca<125>-Footnote-1324561951
Ref: Biblioteca<125>-Footnote-1334562018
Ref: Biblioteca<125>-Footnote-1344562085
Ref: Biblioteca<125>-Footnote-1354562152
Ref: Biblioteca<125>-Footnote-1364562219
Ref: Biblioteca<125>-Footnote-1374562286
Ref: Biblioteca<125>-Footnote-1384562353
Ref: Biblioteca<125>-Footnote-1394562420
Ref: Biblioteca<125>-Footnote-1404562487
Ref: Biblioteca<125>-Footnote-1414562554
Ref: Biblioteca<125>-Footnote-1424562621
Ref: Biblioteca<125>-Footnote-1434562688
Ref: Biblioteca<125>-Footnote-1444562755
Ref: Biblioteca<125>-Footnote-1454562822
Ref: Biblioteca<125>-Footnote-1464562889
Ref: Biblioteca<125>-Footnote-1474562956
Ref: Biblioteca<125>-Footnote-1484563023
Ref: Biblioteca<125>-Footnote-1494563090
Ref: Biblioteca<125>-Footnote-1504563157
Ref: Biblioteca<125>-Footnote-1514563224
Ref: Biblioteca<125>-Footnote-1524563291
Ref: Biblioteca<125>-Footnote-1534563358
Ref: Biblioteca<125>-Footnote-1544563425
Node: Documentação<40>4563492
Ref: whatsnew/changelog id5654563611
Ref: 1abd4563611
Ref: Documentação<40>-Footnote-14565378
Ref: Documentação<40>-Footnote-24565443
Ref: Documentação<40>-Footnote-34565485
Ref: Documentação<40>-Footnote-44565550
Ref: Documentação<40>-Footnote-54565615
Ref: Documentação<40>-Footnote-64565680
Ref: Documentação<40>-Footnote-74565745
Ref: Documentação<40>-Footnote-84565810
Ref: Documentação<40>-Footnote-94565875
Ref: Documentação<40>-Footnote-104565940
Ref: Documentação<40>-Footnote-114566006
Ref: Documentação<40>-Footnote-124566072
Ref: Documentação<40>-Footnote-134566138
Ref: Documentação<40>-Footnote-144566204
Node: Testes<44>4566270
Ref: whatsnew/changelog id5664566390
Ref: 1abf4566390
Ref: Testes<44>-Footnote-14568547
Ref: Testes<44>-Footnote-24568612
Ref: Testes<44>-Footnote-34568677
Ref: Testes<44>-Footnote-44568742
Ref: Testes<44>-Footnote-54568807
Ref: Testes<44>-Footnote-64568872
Ref: Testes<44>-Footnote-74568937
Ref: Testes<44>-Footnote-84569002
Ref: Testes<44>-Footnote-94569067
Ref: Testes<44>-Footnote-104569132
Ref: Testes<44>-Footnote-114569198
Ref: Testes<44>-Footnote-124569264
Ref: Testes<44>-Footnote-134569330
Ref: Testes<44>-Footnote-144569396
Ref: Testes<44>-Footnote-154569462
Ref: Testes<44>-Footnote-164569528
Node: Construção<48>4569594
Ref: whatsnew/changelog id5674569707
Ref: 1ac24569707
Ref: Construção<48>-Footnote-14570640
Ref: Construção<48>-Footnote-24570705
Ref: Construção<48>-Footnote-34570770
Ref: Construção<48>-Footnote-44570835
Ref: Construção<48>-Footnote-54570900
Ref: Construção<48>-Footnote-64570965
Node: Windows<41>4571030
Ref: whatsnew/changelog id5684571142
Ref: 1ac34571142
Ref: Windows<41>-Footnote-14572915
Ref: Windows<41>-Footnote-24572980
Ref: Windows<41>-Footnote-34573045
Ref: Windows<41>-Footnote-44573110
Ref: Windows<41>-Footnote-54573175
Ref: Windows<41>-Footnote-64573240
Ref: Windows<41>-Footnote-74573305
Ref: Windows<41>-Footnote-84573370
Ref: Windows<41>-Footnote-94573435
Ref: Windows<41>-Footnote-104573500
Ref: Windows<41>-Footnote-114573566
Ref: Windows<41>-Footnote-124573632
Ref: Windows<41>-Footnote-134573698
Ref: Windows<41>-Footnote-144573764
Node: macOS<33>4573830
Ref: whatsnew/changelog id5694573934
Ref: 1ac44573934
Ref: macOS<33>-Footnote-14574825
Ref: macOS<33>-Footnote-24574890
Ref: macOS<33>-Footnote-34574955
Ref: macOS<33>-Footnote-44575020
Ref: macOS<33>-Footnote-54575085
Ref: macOS<33>-Footnote-64575150
Node: IDLE<30>4575215
Ref: whatsnew/changelog id5704575317
Ref: 1ac54575317
Ref: IDLE<30>-Footnote-14576482
Ref: IDLE<30>-Footnote-24576547
Ref: IDLE<30>-Footnote-34576612
Ref: IDLE<30>-Footnote-44576677
Ref: IDLE<30>-Footnote-54576742
Ref: IDLE<30>-Footnote-64576807
Ref: IDLE<30>-Footnote-74576872
Ref: IDLE<30>-Footnote-84576937
Ref: IDLE<30>-Footnote-94577002
Ref: IDLE<30>-Footnote-104577067
Ref: IDLE<30>-Footnote-114577133
Node: API C<44>4577199
Ref: whatsnew/changelog id5714577283
Ref: 1ac64577283
Ref: API C<44>-Footnote-14582471
Ref: API C<44>-Footnote-24582536
Ref: API C<44>-Footnote-34582601
Ref: API C<44>-Footnote-44582666
Ref: API C<44>-Footnote-54582731
Ref: API C<44>-Footnote-64582796
Ref: API C<44>-Footnote-74582861
Ref: API C<44>-Footnote-84582926
Ref: API C<44>-Footnote-94582991
Ref: API C<44>-Footnote-104583056
Ref: API C<44>-Footnote-114583122
Ref: API C<44>-Footnote-124583188
Ref: API C<44>-Footnote-134583254
Ref: API C<44>-Footnote-144583320
Ref: API C<44>-Footnote-154583386
Ref: API C<44>-Footnote-164583452
Ref: API C<44>-Footnote-174583518
Ref: API C<44>-Footnote-184583584
Ref: API C<44>-Footnote-194583650
Ref: API C<44>-Footnote-204583716
Ref: API C<44>-Footnote-214583759
Ref: API C<44>-Footnote-224583825
Ref: API C<44>-Footnote-234583891
Ref: API C<44>-Footnote-244583957
Ref: API C<44>-Footnote-254584023
Ref: API C<44>-Footnote-264584089
Ref: API C<44>-Footnote-274584155
Ref: API C<44>-Footnote-284584221
Ref: API C<44>-Footnote-294584287
Node: Python 3 9 0 beta 14584353
Ref: whatsnew/changelog python-3-9-0-beta-14584477
Ref: 1ad04584477
Node: Segurança<33>4584891
Ref: whatsnew/changelog id5724584994
Ref: 1ad14584994
Ref: Segurança<33>-Footnote-14585201
Node: Núcleo e embutidos<124>4585266
Ref: whatsnew/changelog id5734585393
Ref: 1ad24585393
Ref: Núcleo e embutidos<124>-Footnote-14587939
Ref: Núcleo e embutidos<124>-Footnote-24588004
Ref: Núcleo e embutidos<124>-Footnote-34588069
Ref: Núcleo e embutidos<124>-Footnote-44588134
Ref: Núcleo e embutidos<124>-Footnote-54588199
Ref: Núcleo e embutidos<124>-Footnote-64588264
Ref: Núcleo e embutidos<124>-Footnote-74588306
Ref: Núcleo e embutidos<124>-Footnote-84588371
Ref: Núcleo e embutidos<124>-Footnote-94588436
Ref: Núcleo e embutidos<124>-Footnote-104588503
Ref: Núcleo e embutidos<124>-Footnote-114588546
Ref: Núcleo e embutidos<124>-Footnote-124588612
Ref: Núcleo e embutidos<124>-Footnote-134588680
Ref: Núcleo e embutidos<124>-Footnote-144588723
Ref: Núcleo e embutidos<124>-Footnote-154588789
Ref: Núcleo e embutidos<124>-Footnote-164588855
Ref: Núcleo e embutidos<124>-Footnote-174588921
Ref: Núcleo e embutidos<124>-Footnote-184588987
Ref: Núcleo e embutidos<124>-Footnote-194589055
Ref: Núcleo e embutidos<124>-Footnote-204589098
Ref: Núcleo e embutidos<124>-Footnote-214589164
Ref: Núcleo e embutidos<124>-Footnote-224589230
Ref: Núcleo e embutidos<124>-Footnote-234589296
Ref: Núcleo e embutidos<124>-Footnote-244589362
Node: Biblioteca<126>4589428
Ref: whatsnew/changelog id5744589559
Ref: 1ad44589559
Ref: Biblioteca<126>-Footnote-14596958
Ref: Biblioteca<126>-Footnote-24597023
Ref: Biblioteca<126>-Footnote-34597088
Ref: Biblioteca<126>-Footnote-44597153
Ref: Biblioteca<126>-Footnote-54597218
Ref: Biblioteca<126>-Footnote-64597283
Ref: Biblioteca<126>-Footnote-74597348
Ref: Biblioteca<126>-Footnote-84597413
Ref: Biblioteca<126>-Footnote-94597478
Ref: Biblioteca<126>-Footnote-104597543
Ref: Biblioteca<126>-Footnote-114597609
Ref: Biblioteca<126>-Footnote-124597675
Ref: Biblioteca<126>-Footnote-134597741
Ref: Biblioteca<126>-Footnote-144597807
Ref: Biblioteca<126>-Footnote-154597873
Ref: Biblioteca<126>-Footnote-164597916
Ref: Biblioteca<126>-Footnote-174597982
Ref: Biblioteca<126>-Footnote-184598048
Ref: Biblioteca<126>-Footnote-194598114
Ref: Biblioteca<126>-Footnote-204598180
Ref: Biblioteca<126>-Footnote-214598246
Ref: Biblioteca<126>-Footnote-224598312
Ref: Biblioteca<126>-Footnote-234598378
Ref: Biblioteca<126>-Footnote-244598444
Ref: Biblioteca<126>-Footnote-254598510
Ref: Biblioteca<126>-Footnote-264598576
Ref: Biblioteca<126>-Footnote-274598642
Ref: Biblioteca<126>-Footnote-284598708
Ref: Biblioteca<126>-Footnote-294598774
Ref: Biblioteca<126>-Footnote-304598840
Ref: Biblioteca<126>-Footnote-314598906
Ref: Biblioteca<126>-Footnote-324598972
Ref: Biblioteca<126>-Footnote-334599038
Ref: Biblioteca<126>-Footnote-344599104
Ref: Biblioteca<126>-Footnote-354599170
Ref: Biblioteca<126>-Footnote-364599236
Ref: Biblioteca<126>-Footnote-374599302
Ref: Biblioteca<126>-Footnote-384599368
Ref: Biblioteca<126>-Footnote-394599434
Ref: Biblioteca<126>-Footnote-404599500
Ref: Biblioteca<126>-Footnote-414599566
Ref: Biblioteca<126>-Footnote-424599632
Ref: Biblioteca<126>-Footnote-434599698
Ref: Biblioteca<126>-Footnote-444599764
Ref: Biblioteca<126>-Footnote-454599830
Ref: Biblioteca<126>-Footnote-464599896
Ref: Biblioteca<126>-Footnote-474599962
Ref: Biblioteca<126>-Footnote-484600028
Ref: Biblioteca<126>-Footnote-494600094
Ref: Biblioteca<126>-Footnote-504600160
Node: Documentação<41>4600226
Ref: whatsnew/changelog id5754600343
Ref: 1ad94600343
Ref: Documentação<41>-Footnote-14601012
Ref: Documentação<41>-Footnote-24601077
Ref: Documentação<41>-Footnote-34601142
Ref: Documentação<41>-Footnote-44601207
Ref: Documentação<41>-Footnote-54601272
Node: Testes<45>4601337
Ref: whatsnew/changelog id5764601455
Ref: 1ada4601455
Ref: Testes<45>-Footnote-14601812
Ref: Testes<45>-Footnote-24601877
Node: Construção<49>4601942
Ref: whatsnew/changelog id5774602053
Ref: 1adb4602053
Ref: Construção<49>-Footnote-14602405
Ref: Construção<49>-Footnote-24602470
Node: Windows<42>4602535
Ref: whatsnew/changelog id5784602645
Ref: 1adc4602645
Ref: Windows<42>-Footnote-14603100
Ref: Windows<42>-Footnote-24603165
Ref: Windows<42>-Footnote-34603230
Node: macOS<34>4603295
Ref: whatsnew/changelog id5794603410
Ref: 1add4603410
Ref: macOS<34>-Footnote-14604033
Ref: macOS<34>-Footnote-24604098
Node: Ferramentas/Demos<23>4604163
Ref: whatsnew/changelog id5804604276
Ref: 1ade4604276
Ref: Ferramentas/Demos<23>-Footnote-14604773
Ref: Ferramentas/Demos<23>-Footnote-24604838
Ref: Ferramentas/Demos<23>-Footnote-34604903
Node: API C<45>4604968
Ref: whatsnew/changelog id5814605063
Ref: 1adf4605063
Ref: API C<45>-Footnote-14607089
Ref: API C<45>-Footnote-24607154
Ref: API C<45>-Footnote-34607219
Ref: API C<45>-Footnote-44607284
Ref: API C<45>-Footnote-54607349
Ref: API C<45>-Footnote-64607414
Ref: API C<45>-Footnote-74607479
Ref: API C<45>-Footnote-84607544
Ref: API C<45>-Footnote-94607609
Ref: API C<45>-Footnote-104607674
Ref: API C<45>-Footnote-114607740
Node: Python 3 9 0 alpha 64607783
Ref: whatsnew/changelog python-3-9-0-alpha-64607906
Ref: 1ae04607906
Node: Segurança<34>4608340
Ref: whatsnew/changelog id5824608444
Ref: 1ae14608444
Ref: Segurança<34>-Footnote-14609095
Ref: Segurança<34>-Footnote-24609160
Ref: Segurança<34>-Footnote-34609225
Ref: Segurança<34>-Footnote-44609290
Node: Núcleo e embutidos<125>4609345
Ref: whatsnew/changelog id5834609473
Ref: 1ae24609473
Ref: Núcleo e embutidos<125>-Footnote-14613249
Ref: Núcleo e embutidos<125>-Footnote-24613314
Ref: Núcleo e embutidos<125>-Footnote-34613379
Ref: Núcleo e embutidos<125>-Footnote-44613444
Ref: Núcleo e embutidos<125>-Footnote-54613509
Ref: Núcleo e embutidos<125>-Footnote-64613574
Ref: Núcleo e embutidos<125>-Footnote-74613639
Ref: Núcleo e embutidos<125>-Footnote-84613704
Ref: Núcleo e embutidos<125>-Footnote-94613769
Ref: Núcleo e embutidos<125>-Footnote-104613834
Ref: Núcleo e embutidos<125>-Footnote-114613877
Ref: Núcleo e embutidos<125>-Footnote-124613943
Ref: Núcleo e embutidos<125>-Footnote-134614011
Ref: Núcleo e embutidos<125>-Footnote-144614054
Ref: Núcleo e embutidos<125>-Footnote-154614122
Ref: Núcleo e embutidos<125>-Footnote-164614165
Ref: Núcleo e embutidos<125>-Footnote-174614233
Ref: Núcleo e embutidos<125>-Footnote-184614276
Ref: Núcleo e embutidos<125>-Footnote-194614342
Ref: Núcleo e embutidos<125>-Footnote-204614408
Ref: Núcleo e embutidos<125>-Footnote-214614476
Ref: Núcleo e embutidos<125>-Footnote-224614544
Ref: Núcleo e embutidos<125>-Footnote-234614610
Ref: Núcleo e embutidos<125>-Footnote-244614678
Ref: Núcleo e embutidos<125>-Footnote-254614721
Ref: Núcleo e embutidos<125>-Footnote-264614789
Ref: Núcleo e embutidos<125>-Footnote-274614832
Ref: Núcleo e embutidos<125>-Footnote-284614898
Ref: Núcleo e embutidos<125>-Footnote-294614964
Ref: Núcleo e embutidos<125>-Footnote-304615007
Ref: Núcleo e embutidos<125>-Footnote-314615073
Ref: Núcleo e embutidos<125>-Footnote-324615139
Ref: Núcleo e embutidos<125>-Footnote-334615205
Node: Biblioteca<127>4615248
Ref: whatsnew/changelog id5844615380
Ref: 1ae34615380
Ref: Biblioteca<127>-Footnote-14625654
Ref: Biblioteca<127>-Footnote-24625719
Ref: Biblioteca<127>-Footnote-34625784
Ref: Biblioteca<127>-Footnote-44625849
Ref: Biblioteca<127>-Footnote-54625914
Ref: Biblioteca<127>-Footnote-64625979
Ref: Biblioteca<127>-Footnote-74626021
Ref: Biblioteca<127>-Footnote-84626086
Ref: Biblioteca<127>-Footnote-94626151
Ref: Biblioteca<127>-Footnote-104626216
Ref: Biblioteca<127>-Footnote-114626282
Ref: Biblioteca<127>-Footnote-124626348
Ref: Biblioteca<127>-Footnote-134626414
Ref: Biblioteca<127>-Footnote-144626480
Ref: Biblioteca<127>-Footnote-154626546
Ref: Biblioteca<127>-Footnote-164626612
Ref: Biblioteca<127>-Footnote-174626678
Ref: Biblioteca<127>-Footnote-184626744
Ref: Biblioteca<127>-Footnote-194626810
Ref: Biblioteca<127>-Footnote-204626876
Ref: Biblioteca<127>-Footnote-214626942
Ref: Biblioteca<127>-Footnote-224627008
Ref: Biblioteca<127>-Footnote-234627074
Ref: Biblioteca<127>-Footnote-244627140
Ref: Biblioteca<127>-Footnote-254627206
Ref: Biblioteca<127>-Footnote-264627272
Ref: Biblioteca<127>-Footnote-274627338
Ref: Biblioteca<127>-Footnote-284627404
Ref: Biblioteca<127>-Footnote-294627470
Ref: Biblioteca<127>-Footnote-304627536
Ref: Biblioteca<127>-Footnote-314627602
Ref: Biblioteca<127>-Footnote-324627668
Ref: Biblioteca<127>-Footnote-334627734
Ref: Biblioteca<127>-Footnote-344627800
Ref: Biblioteca<127>-Footnote-354627866
Ref: Biblioteca<127>-Footnote-364627932
Ref: Biblioteca<127>-Footnote-374627998
Ref: Biblioteca<127>-Footnote-384628064
Ref: Biblioteca<127>-Footnote-394628130
Ref: Biblioteca<127>-Footnote-404628196
Ref: Biblioteca<127>-Footnote-414628262
Ref: Biblioteca<127>-Footnote-424628328
Ref: Biblioteca<127>-Footnote-434628394
Ref: Biblioteca<127>-Footnote-444628460
Ref: Biblioteca<127>-Footnote-454628526
Ref: Biblioteca<127>-Footnote-464628592
Ref: Biblioteca<127>-Footnote-474628658
Ref: Biblioteca<127>-Footnote-484628724
Ref: Biblioteca<127>-Footnote-494628767
Ref: Biblioteca<127>-Footnote-504628833
Ref: Biblioteca<127>-Footnote-514628876
Ref: Biblioteca<127>-Footnote-524628942
Ref: Biblioteca<127>-Footnote-534629008
Ref: Biblioteca<127>-Footnote-544629074
Ref: Biblioteca<127>-Footnote-554629117
Ref: Biblioteca<127>-Footnote-564629183
Ref: Biblioteca<127>-Footnote-574629249
Ref: Biblioteca<127>-Footnote-584629315
Ref: Biblioteca<127>-Footnote-594629381
Ref: Biblioteca<127>-Footnote-604629447
Ref: Biblioteca<127>-Footnote-614629513
Node: Documentação<42>4629579
Ref: whatsnew/changelog id5854629697
Ref: 1ae84629697
Ref: Documentação<42>-Footnote-14630277
Ref: Documentação<42>-Footnote-24630342
Ref: Documentação<42>-Footnote-34630407
Ref: Documentação<42>-Footnote-44630472
Node: Testes<46>4630537
Ref: whatsnew/changelog id5864630656
Ref: 1aeb4630656
Ref: Testes<46>-Footnote-14631739
Ref: Testes<46>-Footnote-24631804
Ref: Testes<46>-Footnote-34631869
Ref: Testes<46>-Footnote-44631934
Ref: Testes<46>-Footnote-54631999
Ref: Testes<46>-Footnote-64632064
Ref: Testes<46>-Footnote-74632129
Ref: Testes<46>-Footnote-84632188
Ref: Testes<46>-Footnote-94632253
Node: Construção<50>4632317
Ref: whatsnew/changelog id5874632429
Ref: 1aed4632429
Ref: Construção<50>-Footnote-14632862
Ref: Construção<50>-Footnote-24632927
Ref: Construção<50>-Footnote-34632992
Node: Windows<43>4633057
Ref: whatsnew/changelog id5884633168
Ref: 1aee4633168
Ref: Windows<43>-Footnote-14633381
Ref: Windows<43>-Footnote-24633446
Node: macOS<35>4633510
Ref: whatsnew/changelog id5894633613
Ref: 1aef4633613
Ref: macOS<35>-Footnote-14634069
Ref: macOS<35>-Footnote-24634134
Node: IDLE<31>4634199
Ref: whatsnew/changelog id5904634312
Ref: 1af04634312
Ref: IDLE<31>-Footnote-14634656
Ref: IDLE<31>-Footnote-24634721
Node: Ferramentas/Demos<24>4634786
Ref: whatsnew/changelog id5914634899
Ref: 1af14634899
Ref: Ferramentas/Demos<24>-Footnote-14635378
Ref: Ferramentas/Demos<24>-Footnote-24635443
Ref: Ferramentas/Demos<24>-Footnote-34635508
Node: API C<46>4635573
Ref: whatsnew/changelog id5924635669
Ref: 1af24635669
Ref: API C<46>-Footnote-14637644
Ref: API C<46>-Footnote-24637709
Ref: API C<46>-Footnote-34637774
Ref: API C<46>-Footnote-44637839
Ref: API C<46>-Footnote-54637904
Ref: API C<46>-Footnote-64637969
Ref: API C<46>-Footnote-74638034
Ref: API C<46>-Footnote-84638099
Ref: API C<46>-Footnote-94638164
Node: Python 3 9 0 alpha 54638229
Ref: whatsnew/changelog python-3-9-0-alpha-54638353
Ref: 1af34638353
Node: Segurança<35>4638787
Ref: whatsnew/changelog id5934638891
Ref: 1af44638891
Ref: Segurança<35>-Footnote-14639178
Ref: Segurança<35>-Footnote-24639243
Node: Núcleo e embutidos<126>4639299
Ref: whatsnew/changelog id5944639427
Ref: 1af54639427
Ref: Núcleo e embutidos<126>-Footnote-14645335
Ref: Núcleo e embutidos<126>-Footnote-24645400
Ref: Núcleo e embutidos<126>-Footnote-34645467
Ref: Núcleo e embutidos<126>-Footnote-44645509
Ref: Núcleo e embutidos<126>-Footnote-54645576
Ref: Núcleo e embutidos<126>-Footnote-64645618
Ref: Núcleo e embutidos<126>-Footnote-74645683
Ref: Núcleo e embutidos<126>-Footnote-84645748
Ref: Núcleo e embutidos<126>-Footnote-94645815
Ref: Núcleo e embutidos<126>-Footnote-104645882
Ref: Núcleo e embutidos<126>-Footnote-114645925
Ref: Núcleo e embutidos<126>-Footnote-124645991
Ref: Núcleo e embutidos<126>-Footnote-134646034
Ref: Núcleo e embutidos<126>-Footnote-144646100
Ref: Núcleo e embutidos<126>-Footnote-154646166
Ref: Núcleo e embutidos<126>-Footnote-164646209
Ref: Núcleo e embutidos<126>-Footnote-174646277
Ref: Núcleo e embutidos<126>-Footnote-184646320
Ref: Núcleo e embutidos<126>-Footnote-194646386
Ref: Núcleo e embutidos<126>-Footnote-204646452
Ref: Núcleo e embutidos<126>-Footnote-214646518
Ref: Núcleo e embutidos<126>-Footnote-224646584
Ref: Núcleo e embutidos<126>-Footnote-234646627
Ref: Núcleo e embutidos<126>-Footnote-244646693
Ref: Núcleo e embutidos<126>-Footnote-254646759
Ref: Núcleo e embutidos<126>-Footnote-264646825
Ref: Núcleo e embutidos<126>-Footnote-274646891
Ref: Núcleo e embutidos<126>-Footnote-284646957
Ref: Núcleo e embutidos<126>-Footnote-294647023
Ref: Núcleo e embutidos<126>-Footnote-304647089
Ref: Núcleo e embutidos<126>-Footnote-314647155
Ref: Núcleo e embutidos<126>-Footnote-324647223
Ref: Núcleo e embutidos<126>-Footnote-334647266
Ref: Núcleo e embutidos<126>-Footnote-344647332
Ref: Núcleo e embutidos<126>-Footnote-354647375
Ref: Núcleo e embutidos<126>-Footnote-364647441
Ref: Núcleo e embutidos<126>-Footnote-374647509
Ref: Núcleo e embutidos<126>-Footnote-384647552
Ref: Núcleo e embutidos<126>-Footnote-394647618
Ref: Núcleo e embutidos<126>-Footnote-404647684
Ref: Núcleo e embutidos<126>-Footnote-414647750
Ref: Núcleo e embutidos<126>-Footnote-424647816
Node: Biblioteca<128>4647882
Ref: whatsnew/changelog id5954648014
Ref: 1af64648014
Ref: Biblioteca<128>-Footnote-14657193
Ref: Biblioteca<128>-Footnote-24657258
Ref: Biblioteca<128>-Footnote-34657323
Ref: Biblioteca<128>-Footnote-44657388
Ref: Biblioteca<128>-Footnote-54657453
Ref: Biblioteca<128>-Footnote-64657518
Ref: Biblioteca<128>-Footnote-74657583
Ref: Biblioteca<128>-Footnote-84657648
Ref: Biblioteca<128>-Footnote-94657713
Ref: Biblioteca<128>-Footnote-104657778
Ref: Biblioteca<128>-Footnote-114657844
Ref: Biblioteca<128>-Footnote-124657910
Ref: Biblioteca<128>-Footnote-134657953
Ref: Biblioteca<128>-Footnote-144658019
Ref: Biblioteca<128>-Footnote-154658085
Ref: Biblioteca<128>-Footnote-164658151
Ref: Biblioteca<128>-Footnote-174658194
Ref: Biblioteca<128>-Footnote-184658260
Ref: Biblioteca<128>-Footnote-194658326
Ref: Biblioteca<128>-Footnote-204658392
Ref: Biblioteca<128>-Footnote-214658458
Ref: Biblioteca<128>-Footnote-224658524
Ref: Biblioteca<128>-Footnote-234658590
Ref: Biblioteca<128>-Footnote-244658656
Ref: Biblioteca<128>-Footnote-254658722
Ref: Biblioteca<128>-Footnote-264658788
Ref: Biblioteca<128>-Footnote-274658854
Ref: Biblioteca<128>-Footnote-284658920
Ref: Biblioteca<128>-Footnote-294658986
Ref: Biblioteca<128>-Footnote-304659052
Ref: Biblioteca<128>-Footnote-314659118
Ref: Biblioteca<128>-Footnote-324659184
Ref: Biblioteca<128>-Footnote-334659227
Ref: Biblioteca<128>-Footnote-344659293
Ref: Biblioteca<128>-Footnote-354659359
Ref: Biblioteca<128>-Footnote-364659425
Ref: Biblioteca<128>-Footnote-374659491
Ref: Biblioteca<128>-Footnote-384659557
Ref: Biblioteca<128>-Footnote-394659623
Ref: Biblioteca<128>-Footnote-404659666
Ref: Biblioteca<128>-Footnote-414659732
Ref: Biblioteca<128>-Footnote-424659798
Ref: Biblioteca<128>-Footnote-434659864
Ref: Biblioteca<128>-Footnote-444659930
Ref: Biblioteca<128>-Footnote-454659996
Ref: Biblioteca<128>-Footnote-464660062
Ref: Biblioteca<128>-Footnote-474660128
Ref: Biblioteca<128>-Footnote-484660194
Ref: Biblioteca<128>-Footnote-494660260
Ref: Biblioteca<128>-Footnote-504660326
Ref: Biblioteca<128>-Footnote-514660392
Ref: Biblioteca<128>-Footnote-524660458
Ref: Biblioteca<128>-Footnote-534660524
Ref: Biblioteca<128>-Footnote-544660590
Node: Documentação<43>4660656
Ref: whatsnew/changelog id5964660774
Ref: 1afc4660774
Ref: Documentação<43>-Footnote-14661416
Ref: Documentação<43>-Footnote-24661481
Ref: Documentação<43>-Footnote-34661523
Ref: Documentação<43>-Footnote-44661588
Ref: Documentação<43>-Footnote-54661653
Ref: Documentação<43>-Footnote-64661718
Ref: Documentação<43>-Footnote-74661783
Node: Testes<47>4661848
Ref: whatsnew/changelog id5974661967
Ref: 1afd4661967
Ref: Testes<47>-Footnote-14662655
Ref: Testes<47>-Footnote-24662720
Ref: Testes<47>-Footnote-34662785
Ref: Testes<47>-Footnote-44662850
Node: Construção<51>4662915
Ref: whatsnew/changelog id5984663027
Ref: 1afe4663027
Ref: Construção<51>-Footnote-14663914
Ref: Construção<51>-Footnote-24663979
Ref: Construção<51>-Footnote-34664044
Node: Windows<44>4664111
Ref: whatsnew/changelog id5994664222
Ref: 1aff4664222
Ref: Windows<44>-Footnote-14665104
Ref: Windows<44>-Footnote-24665169
Ref: Windows<44>-Footnote-34665234
Ref: Windows<44>-Footnote-44665299
Ref: Windows<44>-Footnote-54665364
Ref: Windows<44>-Footnote-64665429
Node: macOS<36>4665494
Ref: whatsnew/changelog id6004665597
Ref: 1b004665597
Ref: macOS<36>-Footnote-14665727
Node: IDLE<32>4665792
Ref: whatsnew/changelog id6014665905
Ref: 1b014665905
Ref: IDLE<32>-Footnote-14666467
Ref: IDLE<32>-Footnote-24666532
Ref: IDLE<32>-Footnote-34666597
Ref: IDLE<32>-Footnote-44666662
Node: Ferramentas/Demos<25>4666727
Ref: whatsnew/changelog id6024666840
Ref: 1b024666840
Ref: Ferramentas/Demos<25>-Footnote-14667389
Ref: Ferramentas/Demos<25>-Footnote-24667454
Node: API C<47>4667519
Ref: whatsnew/changelog id6034667615
Ref: 1b034667615
Ref: API C<47>-Footnote-14671177
Ref: API C<47>-Footnote-24671242
Ref: API C<47>-Footnote-34671307
Ref: API C<47>-Footnote-44671372
Ref: API C<47>-Footnote-54671437
Ref: API C<47>-Footnote-64671502
Ref: API C<47>-Footnote-74671567
Ref: API C<47>-Footnote-84671632
Ref: API C<47>-Footnote-94671697
Ref: API C<47>-Footnote-104671762
Ref: API C<47>-Footnote-114671828
Ref: API C<47>-Footnote-124671894
Ref: API C<47>-Footnote-134671960
Ref: API C<47>-Footnote-144672026
Ref: API C<47>-Footnote-154672092
Ref: API C<47>-Footnote-164672158
Ref: API C<47>-Footnote-174672224
Node: Python 3 9 0 alpha 44672290
Ref: whatsnew/changelog python-3-9-0-alpha-44672414
Ref: 1b084672414
Node: Segurança<36>4672784
Ref: whatsnew/changelog id6044672888
Ref: 1b094672888
Ref: Segurança<36>-Footnote-14673302
Ref: Segurança<36>-Footnote-24673367
Ref: Segurança<36>-Footnote-34673432
Node: Núcleo e embutidos<127>4673497
Ref: whatsnew/changelog id6054673625
Ref: 1b0a4673625
Ref: Núcleo e embutidos<127>-Footnote-14677041
Ref: Núcleo e embutidos<127>-Footnote-24677106
Ref: Núcleo e embutidos<127>-Footnote-34677171
Ref: Núcleo e embutidos<127>-Footnote-44677236
Ref: Núcleo e embutidos<127>-Footnote-54677301
Ref: Núcleo e embutidos<127>-Footnote-64677366
Ref: Núcleo e embutidos<127>-Footnote-74677431
Ref: Núcleo e embutidos<127>-Footnote-84677496
Ref: Núcleo e embutidos<127>-Footnote-94677563
Ref: Núcleo e embutidos<127>-Footnote-104677605
Ref: Núcleo e embutidos<127>-Footnote-114677673
Ref: Núcleo e embutidos<127>-Footnote-124677716
Ref: Núcleo e embutidos<127>-Footnote-134677782
Ref: Núcleo e embutidos<127>-Footnote-144677848
Ref: Núcleo e embutidos<127>-Footnote-154677914
Ref: Núcleo e embutidos<127>-Footnote-164677980
Ref: Núcleo e embutidos<127>-Footnote-174678046
Ref: Núcleo e embutidos<127>-Footnote-184678114
Ref: Núcleo e embutidos<127>-Footnote-194678157
Ref: Núcleo e embutidos<127>-Footnote-204678225
Ref: Núcleo e embutidos<127>-Footnote-214678268
Ref: Núcleo e embutidos<127>-Footnote-224678336
Ref: Núcleo e embutidos<127>-Footnote-234678379
Ref: Núcleo e embutidos<127>-Footnote-244678445
Ref: Núcleo e embutidos<127>-Footnote-254678511
Ref: Núcleo e embutidos<127>-Footnote-264678577
Ref: Núcleo e embutidos<127>-Footnote-274678643
Ref: Núcleo e embutidos<127>-Footnote-284678709
Ref: Núcleo e embutidos<127>-Footnote-294678775
Node: Biblioteca<129>4678841
Ref: whatsnew/changelog id6064678973
Ref: 1b0d4678973
Ref: Biblioteca<129>-Footnote-14685174
Ref: Biblioteca<129>-Footnote-24685239
Ref: Biblioteca<129>-Footnote-34685304
Ref: Biblioteca<129>-Footnote-44685369
Ref: Biblioteca<129>-Footnote-54685434
Ref: Biblioteca<129>-Footnote-64685499
Ref: Biblioteca<129>-Footnote-74685564
Ref: Biblioteca<129>-Footnote-84685629
Ref: Biblioteca<129>-Footnote-94685694
Ref: Biblioteca<129>-Footnote-104685759
Ref: Biblioteca<129>-Footnote-114685825
Ref: Biblioteca<129>-Footnote-124685891
Ref: Biblioteca<129>-Footnote-134685957
Ref: Biblioteca<129>-Footnote-144686023
Ref: Biblioteca<129>-Footnote-154686089
Ref: Biblioteca<129>-Footnote-164686155
Ref: Biblioteca<129>-Footnote-174686237
Ref: Biblioteca<129>-Footnote-184686303
Ref: Biblioteca<129>-Footnote-194686369
Ref: Biblioteca<129>-Footnote-204686435
Ref: Biblioteca<129>-Footnote-214686501
Ref: Biblioteca<129>-Footnote-224686567
Ref: Biblioteca<129>-Footnote-234686633
Ref: Biblioteca<129>-Footnote-244686699
Ref: Biblioteca<129>-Footnote-254686765
Ref: Biblioteca<129>-Footnote-264686831
Ref: Biblioteca<129>-Footnote-274686897
Ref: Biblioteca<129>-Footnote-284686940
Ref: Biblioteca<129>-Footnote-294687006
Ref: Biblioteca<129>-Footnote-304687072
Ref: Biblioteca<129>-Footnote-314687138
Ref: Biblioteca<129>-Footnote-324687204
Ref: Biblioteca<129>-Footnote-334687270
Ref: Biblioteca<129>-Footnote-344687336
Ref: Biblioteca<129>-Footnote-354687402
Ref: Biblioteca<129>-Footnote-364687468
Ref: Biblioteca<129>-Footnote-374687534
Ref: Biblioteca<129>-Footnote-384687600
Ref: Biblioteca<129>-Footnote-394687666
Node: Documentação<44>4687732
Ref: whatsnew/changelog id6074687850
Ref: 1b0f4687850
Ref: Documentação<44>-Footnote-14688891
Ref: Documentação<44>-Footnote-24688956
Ref: Documentação<44>-Footnote-34689021
Ref: Documentação<44>-Footnote-44689086
Ref: Documentação<44>-Footnote-54689151
Ref: Documentação<44>-Footnote-64689216
Ref: Documentação<44>-Footnote-74689281
Node: Testes<48>4689345
Ref: whatsnew/changelog id6084689464
Ref: 1b104689464
Ref: Testes<48>-Footnote-14689800
Ref: Testes<48>-Footnote-24689865
Node: Construção<52>4689930
Ref: whatsnew/changelog id6094690042
Ref: 1b114690042
Ref: Construção<52>-Footnote-14690184
Node: Windows<45>4690249
Ref: whatsnew/changelog id6104690359
Ref: 1b124690359
Ref: Windows<45>-Footnote-14691165
Ref: Windows<45>-Footnote-24691230
Ref: Windows<45>-Footnote-34691295
Ref: Windows<45>-Footnote-44691360
Ref: Windows<45>-Footnote-54691425
Ref: Windows<45>-Footnote-64691490
Node: IDLE<33>4691555
Ref: whatsnew/changelog id6114691658
Ref: 1b134691658
Ref: IDLE<33>-Footnote-14692205
Ref: IDLE<33>-Footnote-24692270
Ref: IDLE<33>-Footnote-34692335
Ref: IDLE<33>-Footnote-44692400
Ref: IDLE<33>-Footnote-54692465
Node: API C<48>4692530
Ref: whatsnew/changelog id6124692613
Ref: 1b144692613
Ref: API C<48>-Footnote-14695272
Ref: API C<48>-Footnote-24695337
Ref: API C<48>-Footnote-34695402
Ref: API C<48>-Footnote-44695467
Ref: API C<48>-Footnote-54695532
Ref: API C<48>-Footnote-64695597
Ref: API C<48>-Footnote-74695662
Ref: API C<48>-Footnote-84695727
Ref: API C<48>-Footnote-94695792
Ref: API C<48>-Footnote-104695857
Ref: API C<48>-Footnote-114695923
Ref: API C<48>-Footnote-124695989
Node: Python 3 9 0 alpha 34696055
Ref: whatsnew/changelog python-3-9-0-alpha-34696179
Ref: 1b194696179
Node: Núcleo e embutidos<128>4696473
Ref: whatsnew/changelog id6134696578
Ref: 1b1a4696578
Ref: Núcleo e embutidos<128>-Footnote-14700685
Ref: Núcleo e embutidos<128>-Footnote-24700750
Ref: Núcleo e embutidos<128>-Footnote-34700815
Ref: Núcleo e embutidos<128>-Footnote-44700880
Ref: Núcleo e embutidos<128>-Footnote-54700945
Ref: Núcleo e embutidos<128>-Footnote-64701010
Ref: Núcleo e embutidos<128>-Footnote-74701075
Ref: Núcleo e embutidos<128>-Footnote-84701140
Ref: Núcleo e embutidos<128>-Footnote-94701205
Ref: Núcleo e embutidos<128>-Footnote-104701270
Ref: Núcleo e embutidos<128>-Footnote-114701336
Ref: Núcleo e embutidos<128>-Footnote-124701404
Ref: Núcleo e embutidos<128>-Footnote-134701447
Ref: Núcleo e embutidos<128>-Footnote-144701513
Ref: Núcleo e embutidos<128>-Footnote-154701579
Ref: Núcleo e embutidos<128>-Footnote-164701645
Ref: Núcleo e embutidos<128>-Footnote-174701711
Ref: Núcleo e embutidos<128>-Footnote-184701777
Ref: Núcleo e embutidos<128>-Footnote-194701843
Ref: Núcleo e embutidos<128>-Footnote-204701909
Ref: Núcleo e embutidos<128>-Footnote-214701975
Ref: Núcleo e embutidos<128>-Footnote-224702041
Ref: Núcleo e embutidos<128>-Footnote-234702107
Ref: Núcleo e embutidos<128>-Footnote-244702173
Node: Biblioteca<130>4702239
Ref: whatsnew/changelog id6144702371
Ref: 1b1e4702371
Ref: Biblioteca<130>-Footnote-14711997
Ref: Biblioteca<130>-Footnote-24712062
Ref: Biblioteca<130>-Footnote-34712127
Ref: Biblioteca<130>-Footnote-44712192
Ref: Biblioteca<130>-Footnote-54712257
Ref: Biblioteca<130>-Footnote-64712322
Ref: Biblioteca<130>-Footnote-74712387
Ref: Biblioteca<130>-Footnote-84712452
Ref: Biblioteca<130>-Footnote-94712517
Ref: Biblioteca<130>-Footnote-104712582
Ref: Biblioteca<130>-Footnote-114712648
Ref: Biblioteca<130>-Footnote-124712714
Ref: Biblioteca<130>-Footnote-134712780
Ref: Biblioteca<130>-Footnote-144712846
Ref: Biblioteca<130>-Footnote-154712912
Ref: Biblioteca<130>-Footnote-164712978
Ref: Biblioteca<130>-Footnote-174713044
Ref: Biblioteca<130>-Footnote-184713110
Ref: Biblioteca<130>-Footnote-194713176
Ref: Biblioteca<130>-Footnote-204713242
Ref: Biblioteca<130>-Footnote-214713308
Ref: Biblioteca<130>-Footnote-224713374
Ref: Biblioteca<130>-Footnote-234713440
Ref: Biblioteca<130>-Footnote-244713506
Ref: Biblioteca<130>-Footnote-254713572
Ref: Biblioteca<130>-Footnote-264713638
Ref: Biblioteca<130>-Footnote-274713704
Ref: Biblioteca<130>-Footnote-284713770
Ref: Biblioteca<130>-Footnote-294713836
Ref: Biblioteca<130>-Footnote-304713902
Ref: Biblioteca<130>-Footnote-314713968
Ref: Biblioteca<130>-Footnote-324714034
Ref: Biblioteca<130>-Footnote-334714100
Ref: Biblioteca<130>-Footnote-344714166
Ref: Biblioteca<130>-Footnote-354714232
Ref: Biblioteca<130>-Footnote-364714298
Ref: Biblioteca<130>-Footnote-374714364
Ref: Biblioteca<130>-Footnote-384714430
Ref: Biblioteca<130>-Footnote-394714496
Ref: Biblioteca<130>-Footnote-404714562
Ref: Biblioteca<130>-Footnote-414714628
Ref: Biblioteca<130>-Footnote-424714694
Ref: Biblioteca<130>-Footnote-434714760
Ref: Biblioteca<130>-Footnote-444714826
Ref: Biblioteca<130>-Footnote-454714892
Ref: Biblioteca<130>-Footnote-464714958
Ref: Biblioteca<130>-Footnote-474715024
Ref: Biblioteca<130>-Footnote-484715090
Ref: Biblioteca<130>-Footnote-494715156
Ref: Biblioteca<130>-Footnote-504715222
Ref: Biblioteca<130>-Footnote-514715288
Ref: Biblioteca<130>-Footnote-524715354
Ref: Biblioteca<130>-Footnote-534715420
Node: Documentação<45>4715486
Ref: whatsnew/changelog id6154715610
Ref: 1b204715610
Ref: Documentação<45>-Footnote-14716225
Ref: Documentação<45>-Footnote-24716290
Ref: Documentação<45>-Footnote-34716355
Node: Construção<53>4716419
Ref: whatsnew/changelog id6164716536
Ref: 1b224716536
Ref: Construção<53>-Footnote-14717074
Ref: Construção<53>-Footnote-24717139
Ref: Construção<53>-Footnote-34717204
Node: IDLE<34>4717269
Ref: whatsnew/changelog id6174717377
Ref: 1b234717377
Ref: IDLE<34>-Footnote-14717798
Ref: IDLE<34>-Footnote-24717863
Ref: IDLE<34>-Footnote-34717928
Node: API C<49>4717993
Ref: whatsnew/changelog id6184718076
Ref: 1b244718076
Ref: API C<49>-Footnote-14718841
Ref: API C<49>-Footnote-24718906
Node: Python 3 9 0 alpha 24718971
Ref: whatsnew/changelog python-3-9-0-alpha-24719095
Ref: 1b254719095
Node: Segurança<37>4719485
Ref: whatsnew/changelog id6194719589
Ref: 1b264719589
Ref: Segurança<37>-Footnote-14720465
Ref: Segurança<37>-Footnote-24720530
Ref: Segurança<37>-Footnote-34720595
Ref: Segurança<37>-Footnote-44720660
Node: Núcleo e embutidos<129>4720725
Ref: whatsnew/changelog id6204720853
Ref: 1b274720853
Ref: Núcleo e embutidos<129>-Footnote-14724565
Ref: Núcleo e embutidos<129>-Footnote-24724630
Ref: Núcleo e embutidos<129>-Footnote-34724695
Ref: Núcleo e embutidos<129>-Footnote-44724760
Ref: Núcleo e embutidos<129>-Footnote-54724825
Ref: Núcleo e embutidos<129>-Footnote-64724890
Ref: Núcleo e embutidos<129>-Footnote-74724955
Ref: Núcleo e embutidos<129>-Footnote-84725020
Ref: Núcleo e embutidos<129>-Footnote-94725085
Ref: Núcleo e embutidos<129>-Footnote-104725150
Ref: Núcleo e embutidos<129>-Footnote-114725216
Ref: Núcleo e embutidos<129>-Footnote-124725282
Ref: Núcleo e embutidos<129>-Footnote-134725348
Ref: Núcleo e embutidos<129>-Footnote-144725414
Ref: Núcleo e embutidos<129>-Footnote-154725480
Ref: Núcleo e embutidos<129>-Footnote-164725546
Ref: Núcleo e embutidos<129>-Footnote-174725612
Ref: Núcleo e embutidos<129>-Footnote-184725678
Ref: Núcleo e embutidos<129>-Footnote-194725744
Ref: Núcleo e embutidos<129>-Footnote-204725810
Node: Biblioteca<131>4725876
Ref: whatsnew/changelog id6214726008
Ref: 1b284726008
Ref: Biblioteca<131>-Footnote-14733797
Ref: Biblioteca<131>-Footnote-24733862
Ref: Biblioteca<131>-Footnote-34733927
Ref: Biblioteca<131>-Footnote-44733992
Ref: Biblioteca<131>-Footnote-54734057
Ref: Biblioteca<131>-Footnote-64734122
Ref: Biblioteca<131>-Footnote-74734187
Ref: Biblioteca<131>-Footnote-84734252
Ref: Biblioteca<131>-Footnote-94734317
Ref: Biblioteca<131>-Footnote-104734382
Ref: Biblioteca<131>-Footnote-114734448
Ref: Biblioteca<131>-Footnote-124734514
Ref: Biblioteca<131>-Footnote-134734580
Ref: Biblioteca<131>-Footnote-144734646
Ref: Biblioteca<131>-Footnote-154734712
Ref: Biblioteca<131>-Footnote-164734778
Ref: Biblioteca<131>-Footnote-174734844
Ref: Biblioteca<131>-Footnote-184734910
Ref: Biblioteca<131>-Footnote-194734976
Ref: Biblioteca<131>-Footnote-204735042
Ref: Biblioteca<131>-Footnote-214735108
Ref: Biblioteca<131>-Footnote-224735174
Ref: Biblioteca<131>-Footnote-234735240
Ref: Biblioteca<131>-Footnote-244735306
Ref: Biblioteca<131>-Footnote-254735372
Ref: Biblioteca<131>-Footnote-264735438
Ref: Biblioteca<131>-Footnote-274735504
Ref: Biblioteca<131>-Footnote-284735570
Ref: Biblioteca<131>-Footnote-294735636
Ref: Biblioteca<131>-Footnote-304735702
Ref: Biblioteca<131>-Footnote-314735768
Ref: Biblioteca<131>-Footnote-324735834
Ref: Biblioteca<131>-Footnote-334735900
Ref: Biblioteca<131>-Footnote-344735966
Ref: Biblioteca<131>-Footnote-354736032
Ref: Biblioteca<131>-Footnote-364736098
Ref: Biblioteca<131>-Footnote-374736164
Ref: Biblioteca<131>-Footnote-384736230
Ref: Biblioteca<131>-Footnote-394736296
Ref: Biblioteca<131>-Footnote-404736362
Node: Documentação<46>4736428
Ref: whatsnew/changelog id6224736546
Ref: 1b294736546
Ref: Documentação<46>-Footnote-14737133
Ref: Documentação<46>-Footnote-24737198
Ref: Documentação<46>-Footnote-34737263
Node: Testes<49>4737328
Ref: whatsnew/changelog id6234737447
Ref: 1b2a4737447
Ref: Testes<49>-Footnote-14740029
Ref: Testes<49>-Footnote-24740094
Ref: Testes<49>-Footnote-34740159
Ref: Testes<49>-Footnote-44740224
Ref: Testes<49>-Footnote-54740289
Ref: Testes<49>-Footnote-64740354
Ref: Testes<49>-Footnote-74740419
Ref: Testes<49>-Footnote-84740484
Ref: Testes<49>-Footnote-94740549
Ref: Testes<49>-Footnote-104740614
Ref: Testes<49>-Footnote-114740680
Ref: Testes<49>-Footnote-124740746
Ref: Testes<49>-Footnote-134740812
Node: Construção<54>4740878
Ref: whatsnew/changelog id6244740990
Ref: 1b2e4740990
Ref: Construção<54>-Footnote-14741404
Ref: Construção<54>-Footnote-24741469
Node: Windows<46>4741534
Ref: whatsnew/changelog id6254741645
Ref: 1b2f4741645
Ref: Windows<46>-Footnote-14741886
Ref: Windows<46>-Footnote-24741951
Node: macOS<37>4742016
Ref: whatsnew/changelog id6264742119
Ref: 1b304742119
Ref: macOS<37>-Footnote-14742427
Node: IDLE<35>4742492
Ref: whatsnew/changelog id6274742593
Ref: 1b314742593
Ref: IDLE<35>-Footnote-14743188
Ref: IDLE<35>-Footnote-24743253
Ref: IDLE<35>-Footnote-34743318
Ref: IDLE<35>-Footnote-44743383
Node: API C<50>4743448
Ref: whatsnew/changelog id6284743531
Ref: 1b324743531
Ref: API C<50>-Footnote-14744065
Ref: API C<50>-Footnote-24744130
Ref: API C<50>-Footnote-34744195
Node: Python 3 9 0 alpha 14744260
Ref: whatsnew/changelog python-3-9-0-alpha-14744383
Ref: 1b334744383
Node: Segurança<38>4744817
Ref: whatsnew/changelog id6294744921
Ref: 1b344744921
Ref: Segurança<38>-Footnote-14747246
Ref: Segurança<38>-Footnote-24747311
Ref: Segurança<38>-Footnote-34747376
Ref: Segurança<38>-Footnote-44747441
Ref: Segurança<38>-Footnote-54747506
Ref: Segurança<38>-Footnote-64747571
Ref: Segurança<38>-Footnote-74747636
Ref: Segurança<38>-Footnote-84747692
Ref: Segurança<38>-Footnote-94747757
Ref: Segurança<38>-Footnote-104747822
Ref: Segurança<38>-Footnote-114747888
Ref: Segurança<38>-Footnote-124747954
Ref: Segurança<38>-Footnote-134748020
Ref: Segurança<38>-Footnote-144748086
Ref: Segurança<38>-Footnote-154748152
Node: Núcleo e embutidos<130>4748218
Ref: whatsnew/changelog id6304748346
Ref: 1b374748346
Ref: Núcleo e embutidos<130>-Footnote-14763897
Ref: Núcleo e embutidos<130>-Footnote-24763962
Ref: Núcleo e embutidos<130>-Footnote-34764027
Ref: Núcleo e embutidos<130>-Footnote-44764092
Ref: Núcleo e embutidos<130>-Footnote-54764157
Ref: Núcleo e embutidos<130>-Footnote-64764222
Ref: Núcleo e embutidos<130>-Footnote-74764287
Ref: Núcleo e embutidos<130>-Footnote-84764352
Ref: Núcleo e embutidos<130>-Footnote-94764417
Ref: Núcleo e embutidos<130>-Footnote-104764482
Ref: Núcleo e embutidos<130>-Footnote-114764548
Ref: Núcleo e embutidos<130>-Footnote-124764614
Ref: Núcleo e embutidos<130>-Footnote-134764680
Ref: Núcleo e embutidos<130>-Footnote-144764746
Ref: Núcleo e embutidos<130>-Footnote-154764812
Ref: Núcleo e embutidos<130>-Footnote-164764878
Ref: Núcleo e embutidos<130>-Footnote-174764944
Ref: Núcleo e embutidos<130>-Footnote-184765010
Ref: Núcleo e embutidos<130>-Footnote-194765076
Ref: Núcleo e embutidos<130>-Footnote-204765142
Ref: Núcleo e embutidos<130>-Footnote-214765185
Ref: Núcleo e embutidos<130>-Footnote-224765251
Ref: Núcleo e embutidos<130>-Footnote-234765317
Ref: Núcleo e embutidos<130>-Footnote-244765383
Ref: Núcleo e embutidos<130>-Footnote-254765449
Ref: Núcleo e embutidos<130>-Footnote-264765515
Ref: Núcleo e embutidos<130>-Footnote-274765581
Ref: Núcleo e embutidos<130>-Footnote-284765647
Ref: Núcleo e embutidos<130>-Footnote-294765713
Ref: Núcleo e embutidos<130>-Footnote-304765779
Ref: Núcleo e embutidos<130>-Footnote-314765845
Ref: Núcleo e embutidos<130>-Footnote-324765911
Ref: Núcleo e embutidos<130>-Footnote-334765977
Ref: Núcleo e embutidos<130>-Footnote-344766043
Ref: Núcleo e embutidos<130>-Footnote-354766109
Ref: Núcleo e embutidos<130>-Footnote-364766175
Ref: Núcleo e embutidos<130>-Footnote-374766241
Ref: Núcleo e embutidos<130>-Footnote-384766307
Ref: Núcleo e embutidos<130>-Footnote-394766373
Ref: Núcleo e embutidos<130>-Footnote-404766439
Ref: Núcleo e embutidos<130>-Footnote-414766504
Ref: Núcleo e embutidos<130>-Footnote-424766570
Ref: Núcleo e embutidos<130>-Footnote-434766636
Ref: Núcleo e embutidos<130>-Footnote-444766702
Ref: Núcleo e embutidos<130>-Footnote-454766768
Ref: Núcleo e embutidos<130>-Footnote-464766834
Ref: Núcleo e embutidos<130>-Footnote-474766900
Ref: Núcleo e embutidos<130>-Footnote-484766966
Ref: Núcleo e embutidos<130>-Footnote-494767032
Ref: Núcleo e embutidos<130>-Footnote-504767098
Ref: Núcleo e embutidos<130>-Footnote-514767164
Ref: Núcleo e embutidos<130>-Footnote-524767230
Ref: Núcleo e embutidos<130>-Footnote-534767296
Ref: Núcleo e embutidos<130>-Footnote-544767339
Ref: Núcleo e embutidos<130>-Footnote-554767405
Ref: Núcleo e embutidos<130>-Footnote-564767471
Ref: Núcleo e embutidos<130>-Footnote-574767537
Ref: Núcleo e embutidos<130>-Footnote-584767603
Ref: Núcleo e embutidos<130>-Footnote-594767669
Ref: Núcleo e embutidos<130>-Footnote-604767735
Ref: Núcleo e embutidos<130>-Footnote-614767801
Ref: Núcleo e embutidos<130>-Footnote-624767867
Ref: Núcleo e embutidos<130>-Footnote-634767933
Ref: Núcleo e embutidos<130>-Footnote-644767999
Ref: Núcleo e embutidos<130>-Footnote-654768065
Ref: Núcleo e embutidos<130>-Footnote-664768131
Ref: Núcleo e embutidos<130>-Footnote-674768197
Ref: Núcleo e embutidos<130>-Footnote-684768263
Ref: Núcleo e embutidos<130>-Footnote-694768329
Ref: Núcleo e embutidos<130>-Footnote-704768395
Ref: Núcleo e embutidos<130>-Footnote-714768461
Ref: Núcleo e embutidos<130>-Footnote-724768527
Ref: Núcleo e embutidos<130>-Footnote-734768593
Ref: Núcleo e embutidos<130>-Footnote-744768659
Ref: Núcleo e embutidos<130>-Footnote-754768725
Ref: Núcleo e embutidos<130>-Footnote-764768791
Ref: Núcleo e embutidos<130>-Footnote-774768857
Ref: Núcleo e embutidos<130>-Footnote-784768923
Ref: Núcleo e embutidos<130>-Footnote-794768989
Ref: Núcleo e embutidos<130>-Footnote-804769055
Ref: Núcleo e embutidos<130>-Footnote-814769121
Ref: Núcleo e embutidos<130>-Footnote-824769187
Ref: Núcleo e embutidos<130>-Footnote-834769253
Ref: Núcleo e embutidos<130>-Footnote-844769319
Ref: Núcleo e embutidos<130>-Footnote-854769385
Ref: Núcleo e embutidos<130>-Footnote-864769451
Ref: Núcleo e embutidos<130>-Footnote-874769517
Ref: Núcleo e embutidos<130>-Footnote-884769583
Ref: Núcleo e embutidos<130>-Footnote-894769649
Ref: Núcleo e embutidos<130>-Footnote-904769715
Ref: Núcleo e embutidos<130>-Footnote-914769781
Ref: Núcleo e embutidos<130>-Footnote-924769847
Ref: Núcleo e embutidos<130>-Footnote-934769913
Ref: Núcleo e embutidos<130>-Footnote-944769979
Node: Biblioteca<132>4770045
Ref: whatsnew/changelog id6314770177
Ref: 1b3c4770177
Ref: Biblioteca<132>-Footnote-14809671
Ref: Biblioteca<132>-Footnote-24809736
Ref: Biblioteca<132>-Footnote-34809801
Ref: Biblioteca<132>-Footnote-44809866
Ref: Biblioteca<132>-Footnote-54809931
Ref: Biblioteca<132>-Footnote-64809996
Ref: Biblioteca<132>-Footnote-74810061
Ref: Biblioteca<132>-Footnote-84810126
Ref: Biblioteca<132>-Footnote-94810191
Ref: Biblioteca<132>-Footnote-104810256
Ref: Biblioteca<132>-Footnote-114810322
Ref: Biblioteca<132>-Footnote-124810388
Ref: Biblioteca<132>-Footnote-134810454
Ref: Biblioteca<132>-Footnote-144810520
Ref: Biblioteca<132>-Footnote-154810586
Ref: Biblioteca<132>-Footnote-164810652
Ref: Biblioteca<132>-Footnote-174810718
Ref: Biblioteca<132>-Footnote-184810784
Ref: Biblioteca<132>-Footnote-194810850
Ref: Biblioteca<132>-Footnote-204810916
Ref: Biblioteca<132>-Footnote-214810982
Ref: Biblioteca<132>-Footnote-224811048
Ref: Biblioteca<132>-Footnote-234811114
Ref: Biblioteca<132>-Footnote-244811180
Ref: Biblioteca<132>-Footnote-254811246
Ref: Biblioteca<132>-Footnote-264811312
Ref: Biblioteca<132>-Footnote-274811378
Ref: Biblioteca<132>-Footnote-284811444
Ref: Biblioteca<132>-Footnote-294811510
Ref: Biblioteca<132>-Footnote-304811576
Ref: Biblioteca<132>-Footnote-314811642
Ref: Biblioteca<132>-Footnote-324811708
Ref: Biblioteca<132>-Footnote-334811774
Ref: Biblioteca<132>-Footnote-344811840
Ref: Biblioteca<132>-Footnote-354811906
Ref: Biblioteca<132>-Footnote-364811972
Ref: Biblioteca<132>-Footnote-374812038
Ref: Biblioteca<132>-Footnote-384812104
Ref: Biblioteca<132>-Footnote-394812170
Ref: Biblioteca<132>-Footnote-404812236
Ref: Biblioteca<132>-Footnote-414812302
Ref: Biblioteca<132>-Footnote-424812368
Ref: Biblioteca<132>-Footnote-434812434
Ref: Biblioteca<132>-Footnote-444812500
Ref: Biblioteca<132>-Footnote-454812566
Ref: Biblioteca<132>-Footnote-464812632
Ref: Biblioteca<132>-Footnote-474812698
Ref: Biblioteca<132>-Footnote-484812764
Ref: Biblioteca<132>-Footnote-494812830
Ref: Biblioteca<132>-Footnote-504812896
Ref: Biblioteca<132>-Footnote-514812962
Ref: Biblioteca<132>-Footnote-524813028
Ref: Biblioteca<132>-Footnote-534813094
Ref: Biblioteca<132>-Footnote-544813160
Ref: Biblioteca<132>-Footnote-554813226
Ref: Biblioteca<132>-Footnote-564813292
Ref: Biblioteca<132>-Footnote-574813358
Ref: Biblioteca<132>-Footnote-584813424
Ref: Biblioteca<132>-Footnote-594813490
Ref: Biblioteca<132>-Footnote-604813556
Ref: Biblioteca<132>-Footnote-614813622
Ref: Biblioteca<132>-Footnote-624813688
Ref: Biblioteca<132>-Footnote-634813754
Ref: Biblioteca<132>-Footnote-644813819
Ref: Biblioteca<132>-Footnote-654813885
Ref: Biblioteca<132>-Footnote-664813951
Ref: Biblioteca<132>-Footnote-674814017
Ref: Biblioteca<132>-Footnote-684814083
Ref: Biblioteca<132>-Footnote-694814149
Ref: Biblioteca<132>-Footnote-704814215
Ref: Biblioteca<132>-Footnote-714814281
Ref: Biblioteca<132>-Footnote-724814347
Ref: Biblioteca<132>-Footnote-734814413
Ref: Biblioteca<132>-Footnote-744814479
Ref: Biblioteca<132>-Footnote-754814545
Ref: Biblioteca<132>-Footnote-764814611
Ref: Biblioteca<132>-Footnote-774814719
Ref: Biblioteca<132>-Footnote-784814785
Ref: Biblioteca<132>-Footnote-794814851
Ref: Biblioteca<132>-Footnote-804814917
Ref: Biblioteca<132>-Footnote-814814983
Ref: Biblioteca<132>-Footnote-824815049
Ref: Biblioteca<132>-Footnote-834815115
Ref: Biblioteca<132>-Footnote-844815181
Ref: Biblioteca<132>-Footnote-854815247
Ref: Biblioteca<132>-Footnote-864815313
Ref: Biblioteca<132>-Footnote-874815379
Ref: Biblioteca<132>-Footnote-884815445
Ref: Biblioteca<132>-Footnote-894815511
Ref: Biblioteca<132>-Footnote-904815577
Ref: Biblioteca<132>-Footnote-914815643
Ref: Biblioteca<132>-Footnote-924815709
Ref: Biblioteca<132>-Footnote-934815775
Ref: Biblioteca<132>-Footnote-944815841
Ref: Biblioteca<132>-Footnote-954815907
Ref: Biblioteca<132>-Footnote-964815973
Ref: Biblioteca<132>-Footnote-974816039
Ref: Biblioteca<132>-Footnote-984816105
Ref: Biblioteca<132>-Footnote-994816171
Ref: Biblioteca<132>-Footnote-1004816237
Ref: Biblioteca<132>-Footnote-1014816304
Ref: Biblioteca<132>-Footnote-1024816371
Ref: Biblioteca<132>-Footnote-1034816438
Ref: Biblioteca<132>-Footnote-1044816505
Ref: Biblioteca<132>-Footnote-1054816572
Ref: Biblioteca<132>-Footnote-1064816639
Ref: Biblioteca<132>-Footnote-1074816706
Ref: Biblioteca<132>-Footnote-1084816772
Ref: Biblioteca<132>-Footnote-1094816839
Ref: Biblioteca<132>-Footnote-1104816906
Ref: Biblioteca<132>-Footnote-1114816973
Ref: Biblioteca<132>-Footnote-1124817040
Ref: Biblioteca<132>-Footnote-1134817107
Ref: Biblioteca<132>-Footnote-1144817174
Ref: Biblioteca<132>-Footnote-1154817241
Ref: Biblioteca<132>-Footnote-1164817308
Ref: Biblioteca<132>-Footnote-1174817375
Ref: Biblioteca<132>-Footnote-1184817442
Ref: Biblioteca<132>-Footnote-1194817509
Ref: Biblioteca<132>-Footnote-1204817576
Ref: Biblioteca<132>-Footnote-1214817643
Ref: Biblioteca<132>-Footnote-1224817710
Ref: Biblioteca<132>-Footnote-1234817777
Ref: Biblioteca<132>-Footnote-1244817844
Ref: Biblioteca<132>-Footnote-1254817911
Ref: Biblioteca<132>-Footnote-1264817978
Ref: Biblioteca<132>-Footnote-1274818045
Ref: Biblioteca<132>-Footnote-1284818112
Ref: Biblioteca<132>-Footnote-1294818179
Ref: Biblioteca<132>-Footnote-1304818246
Ref: Biblioteca<132>-Footnote-1314818313
Ref: Biblioteca<132>-Footnote-1324818380
Ref: Biblioteca<132>-Footnote-1334818447
Ref: Biblioteca<132>-Footnote-1344818514
Ref: Biblioteca<132>-Footnote-1354818581
Ref: Biblioteca<132>-Footnote-1364818648
Ref: Biblioteca<132>-Footnote-1374818725
Ref: Biblioteca<132>-Footnote-1384818792
Ref: Biblioteca<132>-Footnote-1394818859
Ref: Biblioteca<132>-Footnote-1404818926
Ref: Biblioteca<132>-Footnote-1414818993
Ref: Biblioteca<132>-Footnote-1424819060
Ref: Biblioteca<132>-Footnote-1434819127
Ref: Biblioteca<132>-Footnote-1444819194
Ref: Biblioteca<132>-Footnote-1454819261
Ref: Biblioteca<132>-Footnote-1464819328
Ref: Biblioteca<132>-Footnote-1474819395
Ref: Biblioteca<132>-Footnote-1484819462
Ref: Biblioteca<132>-Footnote-1494819529
Ref: Biblioteca<132>-Footnote-1504819596
Ref: Biblioteca<132>-Footnote-1514819663
Ref: Biblioteca<132>-Footnote-1524819730
Ref: Biblioteca<132>-Footnote-1534819797
Ref: Biblioteca<132>-Footnote-1544819864
Ref: Biblioteca<132>-Footnote-1554819931
Ref: Biblioteca<132>-Footnote-1564819998
Ref: Biblioteca<132>-Footnote-1574820065
Ref: Biblioteca<132>-Footnote-1584820132
Ref: Biblioteca<132>-Footnote-1594820199
Ref: Biblioteca<132>-Footnote-1604820266
Ref: Biblioteca<132>-Footnote-1614820333
Ref: Biblioteca<132>-Footnote-1624820400
Ref: Biblioteca<132>-Footnote-1634820467
Ref: Biblioteca<132>-Footnote-1644820534
Ref: Biblioteca<132>-Footnote-1654820601
Ref: Biblioteca<132>-Footnote-1664820668
Ref: Biblioteca<132>-Footnote-1674820735
Ref: Biblioteca<132>-Footnote-1684820802
Ref: Biblioteca<132>-Footnote-1694820869
Ref: Biblioteca<132>-Footnote-1704820936
Ref: Biblioteca<132>-Footnote-1714821003
Ref: Biblioteca<132>-Footnote-1724821070
Ref: Biblioteca<132>-Footnote-1734821114
Ref: Biblioteca<132>-Footnote-1744821181
Ref: Biblioteca<132>-Footnote-1754821248
Ref: Biblioteca<132>-Footnote-1764821315
Ref: Biblioteca<132>-Footnote-1774821382
Ref: Biblioteca<132>-Footnote-1784821449
Ref: Biblioteca<132>-Footnote-1794821516
Ref: Biblioteca<132>-Footnote-1804821583
Ref: Biblioteca<132>-Footnote-1814821650
Ref: Biblioteca<132>-Footnote-1824821717
Ref: Biblioteca<132>-Footnote-1834821784
Ref: Biblioteca<132>-Footnote-1844821851
Ref: Biblioteca<132>-Footnote-1854821918
Ref: Biblioteca<132>-Footnote-1864821985
Ref: Biblioteca<132>-Footnote-1874822052
Ref: Biblioteca<132>-Footnote-1884822119
Ref: Biblioteca<132>-Footnote-1894822186
Ref: Biblioteca<132>-Footnote-1904822253
Ref: Biblioteca<132>-Footnote-1914822320
Ref: Biblioteca<132>-Footnote-1924822387
Ref: Biblioteca<132>-Footnote-1934822454
Ref: Biblioteca<132>-Footnote-1944822521
Ref: Biblioteca<132>-Footnote-1954822588
Ref: Biblioteca<132>-Footnote-1964822655
Ref: Biblioteca<132>-Footnote-1974822722
Ref: Biblioteca<132>-Footnote-1984822789
Ref: Biblioteca<132>-Footnote-1994822856
Ref: Biblioteca<132>-Footnote-2004822923
Ref: Biblioteca<132>-Footnote-2014822990
Ref: Biblioteca<132>-Footnote-2024823057
Ref: Biblioteca<132>-Footnote-2034823124
Ref: Biblioteca<132>-Footnote-2044823191
Ref: Biblioteca<132>-Footnote-2054823258
Ref: Biblioteca<132>-Footnote-2064823325
Ref: Biblioteca<132>-Footnote-2074823392
Ref: Biblioteca<132>-Footnote-2084823459
Ref: Biblioteca<132>-Footnote-2094823526
Ref: Biblioteca<132>-Footnote-2104823593
Ref: Biblioteca<132>-Footnote-2114823660
Ref: Biblioteca<132>-Footnote-2124823727
Ref: Biblioteca<132>-Footnote-2134823794
Ref: Biblioteca<132>-Footnote-2144823861
Ref: Biblioteca<132>-Footnote-2154823928
Ref: Biblioteca<132>-Footnote-2164823995
Ref: Biblioteca<132>-Footnote-2174824062
Ref: Biblioteca<132>-Footnote-2184824129
Ref: Biblioteca<132>-Footnote-2194824196
Ref: Biblioteca<132>-Footnote-2204824263
Ref: Biblioteca<132>-Footnote-2214824330
Ref: Biblioteca<132>-Footnote-2224824397
Ref: Biblioteca<132>-Footnote-2234824464
Ref: Biblioteca<132>-Footnote-2244824531
Ref: Biblioteca<132>-Footnote-2254824598
Ref: Biblioteca<132>-Footnote-2264824665
Ref: Biblioteca<132>-Footnote-2274824732
Ref: Biblioteca<132>-Footnote-2284824799
Ref: Biblioteca<132>-Footnote-2294824866
Ref: Biblioteca<132>-Footnote-2304824933
Ref: Biblioteca<132>-Footnote-2314825000
Ref: Biblioteca<132>-Footnote-2324825067
Ref: Biblioteca<132>-Footnote-2334825134
Ref: Biblioteca<132>-Footnote-2344825201
Ref: Biblioteca<132>-Footnote-2354825268
Ref: Biblioteca<132>-Footnote-2364825335
Ref: Biblioteca<132>-Footnote-2374825402
Ref: Biblioteca<132>-Footnote-2384825469
Ref: Biblioteca<132>-Footnote-2394825536
Ref: Biblioteca<132>-Footnote-2404825602
Ref: Biblioteca<132>-Footnote-2414825669
Ref: Biblioteca<132>-Footnote-2424825736
Ref: Biblioteca<132>-Footnote-2434825803
Ref: Biblioteca<132>-Footnote-2444825870
Ref: Biblioteca<132>-Footnote-2454825937
Ref: Biblioteca<132>-Footnote-2464826004
Ref: Biblioteca<132>-Footnote-2474826071
Ref: Biblioteca<132>-Footnote-2484826138
Ref: Biblioteca<132>-Footnote-2494826205
Ref: Biblioteca<132>-Footnote-2504826272
Ref: Biblioteca<132>-Footnote-2514826339
Ref: Biblioteca<132>-Footnote-2524826406
Ref: Biblioteca<132>-Footnote-2534826473
Node: Documentação<47>4826539
Ref: whatsnew/changelog id6324826657
Ref: 1b494826657
Ref: Documentação<47>-Footnote-14831128
Ref: Documentação<47>-Footnote-24831193
Ref: Documentação<47>-Footnote-34831258
Ref: Documentação<47>-Footnote-44831323
Ref: Documentação<47>-Footnote-54831388
Ref: Documentação<47>-Footnote-64831453
Ref: Documentação<47>-Footnote-74831518
Ref: Documentação<47>-Footnote-84831583
Ref: Documentação<47>-Footnote-94831648
Ref: Documentação<47>-Footnote-104831713
Ref: Documentação<47>-Footnote-114831779
Ref: Documentação<47>-Footnote-124831845
Ref: Documentação<47>-Footnote-134831911
Ref: Documentação<47>-Footnote-144831977
Ref: Documentação<47>-Footnote-154832043
Ref: Documentação<47>-Footnote-164832109
Ref: Documentação<47>-Footnote-174832175
Ref: Documentação<47>-Footnote-184832241
Ref: Documentação<47>-Footnote-194832307
Ref: Documentação<47>-Footnote-204832373
Ref: Documentação<47>-Footnote-214832439
Ref: Documentação<47>-Footnote-224832505
Ref: Documentação<47>-Footnote-234832571
Ref: Documentação<47>-Footnote-244832637
Ref: Documentação<47>-Footnote-254832703
Ref: Documentação<47>-Footnote-264832769
Ref: Documentação<47>-Footnote-274832835
Ref: Documentação<47>-Footnote-284832901
Ref: Documentação<47>-Footnote-294832967
Ref: Documentação<47>-Footnote-304833033
Ref: Documentação<47>-Footnote-314833099
Ref: Documentação<47>-Footnote-324833165
Ref: Documentação<47>-Footnote-334833231
Ref: Documentação<47>-Footnote-344833297
Ref: Documentação<47>-Footnote-354833363
Node: Testes<50>4833429
Ref: whatsnew/changelog id6334833548
Ref: 1b4b4833548
Ref: Testes<50>-Footnote-14841687
Ref: Testes<50>-Footnote-24841752
Ref: Testes<50>-Footnote-34841817
Ref: Testes<50>-Footnote-44841882
Ref: Testes<50>-Footnote-54841947
Ref: Testes<50>-Footnote-64842012
Ref: Testes<50>-Footnote-74842077
Ref: Testes<50>-Footnote-84842142
Ref: Testes<50>-Footnote-94842207
Ref: Testes<50>-Footnote-104842272
Ref: Testes<50>-Footnote-114842338
Ref: Testes<50>-Footnote-124842404
Ref: Testes<50>-Footnote-134842470
Ref: Testes<50>-Footnote-144842536
Ref: Testes<50>-Footnote-154842602
Ref: Testes<50>-Footnote-164842668
Ref: Testes<50>-Footnote-174842734
Ref: Testes<50>-Footnote-184842800
Ref: Testes<50>-Footnote-194842866
Ref: Testes<50>-Footnote-204842932
Ref: Testes<50>-Footnote-214842998
Ref: Testes<50>-Footnote-224843064
Ref: Testes<50>-Footnote-234843130
Ref: Testes<50>-Footnote-244843196
Ref: Testes<50>-Footnote-254843262
Ref: Testes<50>-Footnote-264843328
Ref: Testes<50>-Footnote-274843394
Ref: Testes<50>-Footnote-284843460
Ref: Testes<50>-Footnote-294843526
Ref: Testes<50>-Footnote-304843592
Ref: Testes<50>-Footnote-314843658
Ref: Testes<50>-Footnote-324843724
Ref: Testes<50>-Footnote-334843790
Ref: Testes<50>-Footnote-344843856
Ref: Testes<50>-Footnote-354843922
Ref: Testes<50>-Footnote-364843988
Ref: Testes<50>-Footnote-374844054
Ref: Testes<50>-Footnote-384844120
Ref: Testes<50>-Footnote-394844186
Ref: Testes<50>-Footnote-404844252
Ref: Testes<50>-Footnote-414844318
Ref: Testes<50>-Footnote-424844384
Ref: Testes<50>-Footnote-434844450
Ref: Testes<50>-Footnote-444844516
Ref: Testes<50>-Footnote-454844582
Ref: Testes<50>-Footnote-464844648
Ref: Testes<50>-Footnote-474844714
Ref: Testes<50>-Footnote-484844780
Node: Construção<55>4844846
Ref: whatsnew/changelog id6344844958
Ref: 1b514844958
Ref: Construção<55>-Footnote-14848809
Ref: Construção<55>-Footnote-24848874
Ref: Construção<55>-Footnote-34848939
Ref: Construção<55>-Footnote-44849004
Ref: Construção<55>-Footnote-54849069
Ref: Construção<55>-Footnote-64849134
Ref: Construção<55>-Footnote-74849199
Ref: Construção<55>-Footnote-84849264
Ref: Construção<55>-Footnote-94849329
Ref: Construção<55>-Footnote-104849394
Ref: Construção<55>-Footnote-114849460
Ref: Construção<55>-Footnote-124849526
Ref: Construção<55>-Footnote-134849592
Ref: Construção<55>-Footnote-144849658
Ref: Construção<55>-Footnote-154849724
Ref: Construção<55>-Footnote-164849790
Node: Windows<47>4849856
Ref: whatsnew/changelog id6354849967
Ref: 1b534849967
Ref: Windows<47>-Footnote-14854875
Ref: Windows<47>-Footnote-24854940
Ref: Windows<47>-Footnote-34855005
Ref: Windows<47>-Footnote-44855070
Ref: Windows<47>-Footnote-54855135
Ref: Windows<47>-Footnote-64855200
Ref: Windows<47>-Footnote-74855265
Ref: Windows<47>-Footnote-84855330
Ref: Windows<47>-Footnote-94855395
Ref: Windows<47>-Footnote-104855460
Ref: Windows<47>-Footnote-114855526
Ref: Windows<47>-Footnote-124855592
Ref: Windows<47>-Footnote-134855658
Ref: Windows<47>-Footnote-144855724
Ref: Windows<47>-Footnote-154855790
Ref: Windows<47>-Footnote-164855856
Ref: Windows<47>-Footnote-174855922
Ref: Windows<47>-Footnote-184855988
Ref: Windows<47>-Footnote-194856054
Ref: Windows<47>-Footnote-204856120
Ref: Windows<47>-Footnote-214856186
Ref: Windows<47>-Footnote-224856252
Ref: Windows<47>-Footnote-234856318
Ref: Windows<47>-Footnote-244856383
Ref: Windows<47>-Footnote-254856448
Ref: Windows<47>-Footnote-264856514
Ref: Windows<47>-Footnote-274856580
Ref: Windows<47>-Footnote-284856646
Ref: Windows<47>-Footnote-294856712
Ref: Windows<47>-Footnote-304856778
Ref: Windows<47>-Footnote-314856844
Ref: Windows<47>-Footnote-324856910
Ref: Windows<47>-Footnote-334856976
Ref: Windows<47>-Footnote-344857042
Ref: Windows<47>-Footnote-354857108
Ref: Windows<47>-Footnote-364857174
Ref: Windows<47>-Footnote-374857240
Ref: Windows<47>-Footnote-384857306
Ref: Windows<47>-Footnote-394857372
Ref: Windows<47>-Footnote-404857438
Ref: Windows<47>-Footnote-414857504
Ref: Windows<47>-Footnote-424857570
Node: macOS<38>4857636
Ref: whatsnew/changelog id6364857739
Ref: 1b564857739
Ref: macOS<38>-Footnote-14858572
Ref: macOS<38>-Footnote-24858637
Ref: macOS<38>-Footnote-34858702
Ref: macOS<38>-Footnote-44858767
Ref: macOS<38>-Footnote-54858832
Ref: macOS<38>-Footnote-64858897
Node: IDLE<36>4858962
Ref: whatsnew/changelog id6374859075
Ref: 1b574859075
Ref: IDLE<36>-Footnote-14863814
Ref: IDLE<36>-Footnote-24863879
Ref: IDLE<36>-Footnote-34863943
Ref: IDLE<36>-Footnote-44864008
Ref: IDLE<36>-Footnote-54864073
Ref: IDLE<36>-Footnote-64864138
Ref: IDLE<36>-Footnote-74864203
Ref: IDLE<36>-Footnote-84864268
Ref: IDLE<36>-Footnote-94864333
Ref: IDLE<36>-Footnote-104864398
Ref: IDLE<36>-Footnote-114864464
Ref: IDLE<36>-Footnote-124864530
Ref: IDLE<36>-Footnote-134864596
Ref: IDLE<36>-Footnote-144864662
Ref: IDLE<36>-Footnote-154864728
Ref: IDLE<36>-Footnote-164864794
Ref: IDLE<36>-Footnote-174864860
Ref: IDLE<36>-Footnote-184864926
Ref: IDLE<36>-Footnote-194864992
Ref: IDLE<36>-Footnote-204865058
Ref: IDLE<36>-Footnote-214865124
Ref: IDLE<36>-Footnote-224865190
Ref: IDLE<36>-Footnote-234865256
Ref: IDLE<36>-Footnote-244865322
Ref: IDLE<36>-Footnote-254865388
Ref: IDLE<36>-Footnote-264865454
Ref: IDLE<36>-Footnote-274865520
Ref: IDLE<36>-Footnote-284865586
Ref: IDLE<36>-Footnote-294865652
Ref: IDLE<36>-Footnote-304865717
Node: Ferramentas/Demos<26>4865783
Ref: whatsnew/changelog id6384865896
Ref: 1b584865896
Ref: Ferramentas/Demos<26>-Footnote-14866909
Ref: Ferramentas/Demos<26>-Footnote-24866974
Ref: Ferramentas/Demos<26>-Footnote-34867039
Ref: Ferramentas/Demos<26>-Footnote-44867104
Ref: Ferramentas/Demos<26>-Footnote-54867169
Ref: Ferramentas/Demos<26>-Footnote-64867234
Ref: Ferramentas/Demos<26>-Footnote-74867299
Ref: Ferramentas/Demos<26>-Footnote-84867364
Node: API C<51>4867429
Ref: whatsnew/changelog id6394867525
Ref: 1b5a4867525
Ref: API C<51>-Footnote-14872920
Ref: API C<51>-Footnote-24872985
Ref: API C<51>-Footnote-34873050
Ref: API C<51>-Footnote-44873115
Ref: API C<51>-Footnote-54873180
Ref: API C<51>-Footnote-64873245
Ref: API C<51>-Footnote-74873310
Ref: API C<51>-Footnote-84873375
Ref: API C<51>-Footnote-94873440
Ref: API C<51>-Footnote-104873505
Ref: API C<51>-Footnote-114873571
Ref: API C<51>-Footnote-124873637
Ref: API C<51>-Footnote-134873703
Ref: API C<51>-Footnote-144873769
Ref: API C<51>-Footnote-154873812
Ref: API C<51>-Footnote-164873878
Ref: API C<51>-Footnote-174873944
Ref: API C<51>-Footnote-184874010
Ref: API C<51>-Footnote-194874076
Ref: API C<51>-Footnote-204874142
Ref: API C<51>-Footnote-214874208
Ref: API C<51>-Footnote-224874274
Ref: API C<51>-Footnote-234874340
Ref: API C<51>-Footnote-244874406
Ref: API C<51>-Footnote-254874472
Ref: API C<51>-Footnote-264874538
Ref: API C<51>-Footnote-274874604
Ref: API C<51>-Footnote-284874670
Ref: API C<51>-Footnote-294874736
Ref: API C<51>-Footnote-304874802
Ref: API C<51>-Footnote-314874868
Ref: API C<51>-Footnote-324874934
Ref: API C<51>-Footnote-334875000
Ref: API C<51>-Footnote-344875066
Node: Python 3 8 0 beta 14875132
Ref: whatsnew/changelog python-3-8-0-beta-14875255
Ref: 1b5e4875255
Node: Segurança<39>4875687
Ref: whatsnew/changelog id6404875790
Ref: 1b5f4875790
Ref: Segurança<39>-Footnote-14876387
Ref: Segurança<39>-Footnote-24876452
Ref: Segurança<39>-Footnote-34876507
Ref: Segurança<39>-Footnote-44876572
Node: Núcleo e embutidos<131>4876637
Ref: whatsnew/changelog id6414876764
Ref: 1b604876764
Ref: Núcleo e embutidos<131>-Footnote-14884827
Ref: Núcleo e embutidos<131>-Footnote-24884892
Ref: Núcleo e embutidos<131>-Footnote-34884957
Ref: Núcleo e embutidos<131>-Footnote-44885022
Ref: Núcleo e embutidos<131>-Footnote-54885087
Ref: Núcleo e embutidos<131>-Footnote-64885152
Ref: Núcleo e embutidos<131>-Footnote-74885217
Ref: Núcleo e embutidos<131>-Footnote-84885282
Ref: Núcleo e embutidos<131>-Footnote-94885347
Ref: Núcleo e embutidos<131>-Footnote-104885412
Ref: Núcleo e embutidos<131>-Footnote-114885478
Ref: Núcleo e embutidos<131>-Footnote-124885544
Ref: Núcleo e embutidos<131>-Footnote-134885610
Ref: Núcleo e embutidos<131>-Footnote-144885676
Ref: Núcleo e embutidos<131>-Footnote-154885742
Ref: Núcleo e embutidos<131>-Footnote-164885808
Ref: Núcleo e embutidos<131>-Footnote-174885874
Ref: Núcleo e embutidos<131>-Footnote-184885940
Ref: Núcleo e embutidos<131>-Footnote-194886005
Ref: Núcleo e embutidos<131>-Footnote-204886071
Ref: Núcleo e embutidos<131>-Footnote-214886137
Ref: Núcleo e embutidos<131>-Footnote-224886203
Ref: Núcleo e embutidos<131>-Footnote-234886268
Ref: Núcleo e embutidos<131>-Footnote-244886334
Ref: Núcleo e embutidos<131>-Footnote-254886400
Ref: Núcleo e embutidos<131>-Footnote-264886466
Ref: Núcleo e embutidos<131>-Footnote-274886532
Ref: Núcleo e embutidos<131>-Footnote-284886598
Ref: Núcleo e embutidos<131>-Footnote-294886664
Ref: Núcleo e embutidos<131>-Footnote-304886730
Ref: Núcleo e embutidos<131>-Footnote-314886796
Ref: Núcleo e embutidos<131>-Footnote-324886862
Ref: Núcleo e embutidos<131>-Footnote-334886928
Ref: Núcleo e embutidos<131>-Footnote-344886994
Ref: Núcleo e embutidos<131>-Footnote-354887060
Ref: Núcleo e embutidos<131>-Footnote-364887126
Ref: Núcleo e embutidos<131>-Footnote-374887192
Ref: Núcleo e embutidos<131>-Footnote-384887258
Ref: Núcleo e embutidos<131>-Footnote-394887324
Ref: Núcleo e embutidos<131>-Footnote-404887390
Ref: Núcleo e embutidos<131>-Footnote-414887456
Ref: Núcleo e embutidos<131>-Footnote-424887522
Ref: Núcleo e embutidos<131>-Footnote-434887588
Ref: Núcleo e embutidos<131>-Footnote-444887654
Node: Biblioteca<133>4887720
Ref: whatsnew/changelog id6424887851
Ref: 1b634887851
Ref: Biblioteca<133>-Footnote-14906127
Ref: Biblioteca<133>-Footnote-24906192
Ref: Biblioteca<133>-Footnote-34906257
Ref: Biblioteca<133>-Footnote-44906322
Ref: Biblioteca<133>-Footnote-54906387
Ref: Biblioteca<133>-Footnote-64906452
Ref: Biblioteca<133>-Footnote-74906517
Ref: Biblioteca<133>-Footnote-84906582
Ref: Biblioteca<133>-Footnote-94906647
Ref: Biblioteca<133>-Footnote-104906712
Ref: Biblioteca<133>-Footnote-114906778
Ref: Biblioteca<133>-Footnote-124906844
Ref: Biblioteca<133>-Footnote-134906910
Ref: Biblioteca<133>-Footnote-144906976
Ref: Biblioteca<133>-Footnote-154907042
Ref: Biblioteca<133>-Footnote-164907108
Ref: Biblioteca<133>-Footnote-174907174
Ref: Biblioteca<133>-Footnote-184907240
Ref: Biblioteca<133>-Footnote-194907306
Ref: Biblioteca<133>-Footnote-204907372
Ref: Biblioteca<133>-Footnote-214907438
Ref: Biblioteca<133>-Footnote-224907504
Ref: Biblioteca<133>-Footnote-234907570
Ref: Biblioteca<133>-Footnote-244907636
Ref: Biblioteca<133>-Footnote-254907704
Ref: Biblioteca<133>-Footnote-264907770
Ref: Biblioteca<133>-Footnote-274907836
Ref: Biblioteca<133>-Footnote-284907902
Ref: Biblioteca<133>-Footnote-294907968
Ref: Biblioteca<133>-Footnote-304908034
Ref: Biblioteca<133>-Footnote-314908100
Ref: Biblioteca<133>-Footnote-324908166
Ref: Biblioteca<133>-Footnote-334908232
Ref: Biblioteca<133>-Footnote-344908298
Ref: Biblioteca<133>-Footnote-354908364
Ref: Biblioteca<133>-Footnote-364908430
Ref: Biblioteca<133>-Footnote-374908496
Ref: Biblioteca<133>-Footnote-384908562
Ref: Biblioteca<133>-Footnote-394908628
Ref: Biblioteca<133>-Footnote-404908694
Ref: Biblioteca<133>-Footnote-414908760
Ref: Biblioteca<133>-Footnote-424908826
Ref: Biblioteca<133>-Footnote-434908892
Ref: Biblioteca<133>-Footnote-444908958
Ref: Biblioteca<133>-Footnote-454909024
Ref: Biblioteca<133>-Footnote-464909090
Ref: Biblioteca<133>-Footnote-474909156
Ref: Biblioteca<133>-Footnote-484909222
Ref: Biblioteca<133>-Footnote-494909288
Ref: Biblioteca<133>-Footnote-504909354
Ref: Biblioteca<133>-Footnote-514909420
Ref: Biblioteca<133>-Footnote-524909486
Ref: Biblioteca<133>-Footnote-534909552
Ref: Biblioteca<133>-Footnote-544909618
Ref: Biblioteca<133>-Footnote-554909684
Ref: Biblioteca<133>-Footnote-564909750
Ref: Biblioteca<133>-Footnote-574909816
Ref: Biblioteca<133>-Footnote-584909882
Ref: Biblioteca<133>-Footnote-594909948
Ref: Biblioteca<133>-Footnote-604910014
Ref: Biblioteca<133>-Footnote-614910080
Ref: Biblioteca<133>-Footnote-624910146
Ref: Biblioteca<133>-Footnote-634910212
Ref: Biblioteca<133>-Footnote-644910278
Ref: Biblioteca<133>-Footnote-654910344
Ref: Biblioteca<133>-Footnote-664910410
Ref: Biblioteca<133>-Footnote-674910476
Ref: Biblioteca<133>-Footnote-684910542
Ref: Biblioteca<133>-Footnote-694910607
Ref: Biblioteca<133>-Footnote-704910673
Ref: Biblioteca<133>-Footnote-714910738
Ref: Biblioteca<133>-Footnote-724910804
Ref: Biblioteca<133>-Footnote-734910870
Ref: Biblioteca<133>-Footnote-744910936
Ref: Biblioteca<133>-Footnote-754911002
Ref: Biblioteca<133>-Footnote-764911068
Ref: Biblioteca<133>-Footnote-774911134
Ref: Biblioteca<133>-Footnote-784911200
Ref: Biblioteca<133>-Footnote-794911266
Ref: Biblioteca<133>-Footnote-804911332
Ref: Biblioteca<133>-Footnote-814911398
Ref: Biblioteca<133>-Footnote-824911464
Ref: Biblioteca<133>-Footnote-834911530
Ref: Biblioteca<133>-Footnote-844911596
Ref: Biblioteca<133>-Footnote-854911662
Ref: Biblioteca<133>-Footnote-864911728
Ref: Biblioteca<133>-Footnote-874911794
Ref: Biblioteca<133>-Footnote-884911860
Ref: Biblioteca<133>-Footnote-894911926
Ref: Biblioteca<133>-Footnote-904911992
Ref: Biblioteca<133>-Footnote-914912058
Ref: Biblioteca<133>-Footnote-924912124
Ref: Biblioteca<133>-Footnote-934912190
Ref: Biblioteca<133>-Footnote-944912256
Ref: Biblioteca<133>-Footnote-954912322
Ref: Biblioteca<133>-Footnote-964912388
Ref: Biblioteca<133>-Footnote-974912454
Ref: Biblioteca<133>-Footnote-984912520
Ref: Biblioteca<133>-Footnote-994912586
Ref: Biblioteca<133>-Footnote-1004912652
Ref: Biblioteca<133>-Footnote-1014912719
Ref: Biblioteca<133>-Footnote-1024912786
Ref: Biblioteca<133>-Footnote-1034912853
Ref: Biblioteca<133>-Footnote-1044912920
Ref: Biblioteca<133>-Footnote-1054912987
Ref: Biblioteca<133>-Footnote-1064913054
Ref: Biblioteca<133>-Footnote-1074913121
Node: Documentação<48>4913188
Ref: whatsnew/changelog id6434913305
Ref: 1b6b4913305
Ref: Documentação<48>-Footnote-14915383
Ref: Documentação<48>-Footnote-24915448
Ref: Documentação<48>-Footnote-34915513
Ref: Documentação<48>-Footnote-44915578
Ref: Documentação<48>-Footnote-54915643
Ref: Documentação<48>-Footnote-64915708
Ref: Documentação<48>-Footnote-74915773
Ref: Documentação<48>-Footnote-84915838
Ref: Documentação<48>-Footnote-94915903
Ref: Documentação<48>-Footnote-104915968
Ref: Documentação<48>-Footnote-114916034
Ref: Documentação<48>-Footnote-124916100
Ref: Documentação<48>-Footnote-134916166
Ref: Documentação<48>-Footnote-144916232
Node: Testes<51>4916298
Ref: whatsnew/changelog id6444916416
Ref: 1b6c4916416
Ref: Testes<51>-Footnote-14918056
Ref: Testes<51>-Footnote-24918121
Ref: Testes<51>-Footnote-34918186
Ref: Testes<51>-Footnote-44918251
Ref: Testes<51>-Footnote-54918316
Ref: Testes<51>-Footnote-64918381
Ref: Testes<51>-Footnote-74918446
Ref: Testes<51>-Footnote-84918511
Ref: Testes<51>-Footnote-94918576
Ref: Testes<51>-Footnote-104918641
Node: Construção<56>4918707
Ref: whatsnew/changelog id6454918818
Ref: 1b6e4918818
Ref: Construção<56>-Footnote-14920078
Ref: Construção<56>-Footnote-24920143
Node: Windows<48>4920208
Ref: whatsnew/changelog id6464920318
Ref: 1b6f4920318
Ref: Windows<48>-Footnote-14920750
Ref: Windows<48>-Footnote-24920815
Ref: Windows<48>-Footnote-34920880
Ref: Windows<48>-Footnote-44920945
Node: macOS<39>4921010
Ref: whatsnew/changelog id6474921112
Ref: 1b704921112
Ref: macOS<39>-Footnote-14921414
Node: IDLE<37>4921479
Ref: whatsnew/changelog id6484921591
Ref: 1b714921591
Ref: IDLE<37>-Footnote-14922193
Ref: IDLE<37>-Footnote-24922258
Ref: IDLE<37>-Footnote-34922323
Ref: IDLE<37>-Footnote-44922388
Ref: IDLE<37>-Footnote-54922453
Ref: IDLE<37>-Footnote-64922518
Node: Ferramentas/Demos<27>4922583
Ref: whatsnew/changelog id6494922695
Ref: 1b724922695
Ref: Ferramentas/Demos<27>-Footnote-14922910
Node: API C<52>4922975
Ref: whatsnew/changelog id6504923070
Ref: 1b734923070
Ref: API C<52>-Footnote-14924410
Ref: API C<52>-Footnote-24924475
Ref: API C<52>-Footnote-34924517
Ref: API C<52>-Footnote-44924582
Ref: API C<52>-Footnote-54924647
Ref: API C<52>-Footnote-64924712
Ref: API C<52>-Footnote-74924754
Ref: API C<52>-Footnote-84924819
Ref: API C<52>-Footnote-94924884
Node: Python 3 8 0 alpha 44924949
Ref: whatsnew/changelog python-3-8-0-alpha-44925072
Ref: 1b754925072
Node: Segurança<40>4925506
Ref: whatsnew/changelog id6514925610
Ref: 1b764925610
Ref: Segurança<40>-Footnote-14926498
Ref: Segurança<40>-Footnote-24926563
Ref: Segurança<40>-Footnote-34926628
Ref: Segurança<40>-Footnote-44926683
Node: Núcleo e embutidos<132>4926748
Ref: whatsnew/changelog id6524926876
Ref: 1b774926876
Ref: Núcleo e embutidos<132>-Footnote-14930154
Ref: Núcleo e embutidos<132>-Footnote-24930219
Ref: Núcleo e embutidos<132>-Footnote-34930284
Ref: Núcleo e embutidos<132>-Footnote-44930349
Ref: Núcleo e embutidos<132>-Footnote-54930414
Ref: Núcleo e embutidos<132>-Footnote-64930479
Ref: Núcleo e embutidos<132>-Footnote-74930544
Ref: Núcleo e embutidos<132>-Footnote-84930609
Ref: Núcleo e embutidos<132>-Footnote-94930674
Ref: Núcleo e embutidos<132>-Footnote-104930716
Ref: Núcleo e embutidos<132>-Footnote-114930782
Ref: Núcleo e embutidos<132>-Footnote-124930848
Ref: Núcleo e embutidos<132>-Footnote-134930914
Ref: Núcleo e embutidos<132>-Footnote-144930980
Ref: Núcleo e embutidos<132>-Footnote-154931046
Ref: Núcleo e embutidos<132>-Footnote-164931112
Ref: Núcleo e embutidos<132>-Footnote-174931178
Ref: Núcleo e embutidos<132>-Footnote-184931244
Ref: Núcleo e embutidos<132>-Footnote-194931310
Ref: Núcleo e embutidos<132>-Footnote-204931376
Node: Biblioteca<134>4931442
Ref: whatsnew/changelog id6534931574
Ref: 1b784931574
Ref: Biblioteca<134>-Footnote-14940915
Ref: Biblioteca<134>-Footnote-24940980
Ref: Biblioteca<134>-Footnote-34941045
Ref: Biblioteca<134>-Footnote-44941110
Ref: Biblioteca<134>-Footnote-54941177
Ref: Biblioteca<134>-Footnote-64941242
Ref: Biblioteca<134>-Footnote-74941307
Ref: Biblioteca<134>-Footnote-84941372
Ref: Biblioteca<134>-Footnote-94941437
Ref: Biblioteca<134>-Footnote-104941502
Ref: Biblioteca<134>-Footnote-114941568
Ref: Biblioteca<134>-Footnote-124941634
Ref: Biblioteca<134>-Footnote-134941700
Ref: Biblioteca<134>-Footnote-144941766
Ref: Biblioteca<134>-Footnote-154941832
Ref: Biblioteca<134>-Footnote-164941898
Ref: Biblioteca<134>-Footnote-174941964
Ref: Biblioteca<134>-Footnote-184942030
Ref: Biblioteca<134>-Footnote-194942096
Ref: Biblioteca<134>-Footnote-204942162
Ref: Biblioteca<134>-Footnote-214942228
Ref: Biblioteca<134>-Footnote-224942294
Ref: Biblioteca<134>-Footnote-234942360
Ref: Biblioteca<134>-Footnote-244942426
Ref: Biblioteca<134>-Footnote-254942492
Ref: Biblioteca<134>-Footnote-264942558
Ref: Biblioteca<134>-Footnote-274942624
Ref: Biblioteca<134>-Footnote-284942690
Ref: Biblioteca<134>-Footnote-294942756
Ref: Biblioteca<134>-Footnote-304942822
Ref: Biblioteca<134>-Footnote-314942888
Ref: Biblioteca<134>-Footnote-324942954
Ref: Biblioteca<134>-Footnote-334943020
Ref: Biblioteca<134>-Footnote-344943086
Ref: Biblioteca<134>-Footnote-354943152
Ref: Biblioteca<134>-Footnote-364943218
Ref: Biblioteca<134>-Footnote-374943284
Ref: Biblioteca<134>-Footnote-384943350
Ref: Biblioteca<134>-Footnote-394943416
Ref: Biblioteca<134>-Footnote-404943482
Ref: Biblioteca<134>-Footnote-414943548
Ref: Biblioteca<134>-Footnote-424943614
Ref: Biblioteca<134>-Footnote-434943680
Ref: Biblioteca<134>-Footnote-444943746
Ref: Biblioteca<134>-Footnote-454943812
Ref: Biblioteca<134>-Footnote-464943878
Ref: Biblioteca<134>-Footnote-474943944
Ref: Biblioteca<134>-Footnote-484944010
Ref: Biblioteca<134>-Footnote-494944076
Ref: Biblioteca<134>-Footnote-504944142
Ref: Biblioteca<134>-Footnote-514944208
Ref: Biblioteca<134>-Footnote-524944274
Ref: Biblioteca<134>-Footnote-534944340
Ref: Biblioteca<134>-Footnote-544944406
Node: Documentação<49>4944472
Ref: whatsnew/changelog id6544944590
Ref: 1b7c4944590
Ref: Documentação<49>-Footnote-14946041
Ref: Documentação<49>-Footnote-24946106
Ref: Documentação<49>-Footnote-34946171
Ref: Documentação<49>-Footnote-44946236
Ref: Documentação<49>-Footnote-54946301
Ref: Documentação<49>-Footnote-64946340
Ref: Documentação<49>-Footnote-74946405
Ref: Documentação<49>-Footnote-84946470
Ref: Documentação<49>-Footnote-94946535
Ref: Documentação<49>-Footnote-104946600
Ref: Documentação<49>-Footnote-114946666
Ref: Documentação<49>-Footnote-124946732
Node: Testes<52>4946798
Ref: whatsnew/changelog id6554946917
Ref: 1b7d4946917
Ref: Testes<52>-Footnote-14949169
Ref: Testes<52>-Footnote-24949234
Ref: Testes<52>-Footnote-34949299
Ref: Testes<52>-Footnote-44949364
Ref: Testes<52>-Footnote-54949429
Ref: Testes<52>-Footnote-64949494
Ref: Testes<52>-Footnote-74949559
Ref: Testes<52>-Footnote-84949624
Ref: Testes<52>-Footnote-94949689
Ref: Testes<52>-Footnote-104949754
Ref: Testes<52>-Footnote-114949820
Ref: Testes<52>-Footnote-124949886
Ref: Testes<52>-Footnote-134949952
Ref: Testes<52>-Footnote-144950018
Ref: Testes<52>-Footnote-154950084
Node: Construção<57>4950150
Ref: whatsnew/changelog id6564950262
Ref: 1b7f4950262
Ref: Construção<57>-Footnote-14953445
Ref: Construção<57>-Footnote-24953510
Ref: Construção<57>-Footnote-34953575
Ref: Construção<57>-Footnote-44953640
Ref: Construção<57>-Footnote-54953705
Ref: Construção<57>-Footnote-64953770
Ref: Construção<57>-Footnote-74953835
Ref: Construção<57>-Footnote-84953900
Ref: Construção<57>-Footnote-94953965
Ref: Construção<57>-Footnote-104954030
Ref: Construção<57>-Footnote-114954096
Ref: Construção<57>-Footnote-124954162
Ref: Construção<57>-Footnote-134954228
Node: Windows<49>4954294
Ref: whatsnew/changelog id6574954405
Ref: 1b804954405
Ref: Windows<49>-Footnote-14957057
Ref: Windows<49>-Footnote-24957122
Ref: Windows<49>-Footnote-34957187
Ref: Windows<49>-Footnote-44957252
Ref: Windows<49>-Footnote-54957317
Ref: Windows<49>-Footnote-64957382
Ref: Windows<49>-Footnote-74957447
Ref: Windows<49>-Footnote-84957512
Ref: Windows<49>-Footnote-94957577
Ref: Windows<49>-Footnote-104957642
Ref: Windows<49>-Footnote-114957708
Ref: Windows<49>-Footnote-124957774
Node: macOS<40>4957840
Ref: whatsnew/changelog id6584957943
Ref: 1b814957943
Ref: macOS<40>-Footnote-14958257
Ref: macOS<40>-Footnote-24958322
Node: IDLE<38>4958387
Ref: whatsnew/changelog id6594958500
Ref: 1b824958500
Ref: IDLE<38>-Footnote-14958747
Node: Ferramentas/Demos<28>4958812
Ref: whatsnew/changelog id6604958925
Ref: 1b834958925
Ref: Ferramentas/Demos<28>-Footnote-14959091
Node: API C<53>4959156
Ref: whatsnew/changelog id6614959252
Ref: 1b844959252
Ref: API C<53>-Footnote-14961257
Ref: API C<53>-Footnote-24961322
Ref: API C<53>-Footnote-34961387
Ref: API C<53>-Footnote-44961452
Ref: API C<53>-Footnote-54961517
Ref: API C<53>-Footnote-64961582
Node: Python 3 8 0 alpha 34961647
Ref: whatsnew/changelog python-3-8-0-alpha-34961771
Ref: 1b874961771
Node: Segurança<41>4962185
Ref: whatsnew/changelog id6624962289
Ref: 1b884962289
Ref: Segurança<41>-Footnote-14962856
Ref: Segurança<41>-Footnote-24962921
Node: Núcleo e embutidos<133>4962986
Ref: whatsnew/changelog id6634963114
Ref: 1b8a4963114
Ref: Núcleo e embutidos<133>-Footnote-14966699
Ref: Núcleo e embutidos<133>-Footnote-24966764
Ref: Núcleo e embutidos<133>-Footnote-34966829
Ref: Núcleo e embutidos<133>-Footnote-44966894
Ref: Núcleo e embutidos<133>-Footnote-54966959
Ref: Núcleo e embutidos<133>-Footnote-64967024
Ref: Núcleo e embutidos<133>-Footnote-74967089
Ref: Núcleo e embutidos<133>-Footnote-84967154
Ref: Núcleo e embutidos<133>-Footnote-94967219
Ref: Núcleo e embutidos<133>-Footnote-104967284
Ref: Núcleo e embutidos<133>-Footnote-114967350
Ref: Núcleo e embutidos<133>-Footnote-124967416
Ref: Núcleo e embutidos<133>-Footnote-134967482
Ref: Núcleo e embutidos<133>-Footnote-144967548
Ref: Núcleo e embutidos<133>-Footnote-154967614
Ref: Núcleo e embutidos<133>-Footnote-164967680
Ref: Núcleo e embutidos<133>-Footnote-174967746
Ref: Núcleo e embutidos<133>-Footnote-184967812
Ref: Núcleo e embutidos<133>-Footnote-194967878
Ref: Núcleo e embutidos<133>-Footnote-204967944
Ref: Núcleo e embutidos<133>-Footnote-214968010
Ref: Núcleo e embutidos<133>-Footnote-224968076
Node: Biblioteca<135>4968142
Ref: whatsnew/changelog id6644968274
Ref: 1b8c4968274
Ref: Biblioteca<135>-Footnote-14973898
Ref: Biblioteca<135>-Footnote-24973963
Ref: Biblioteca<135>-Footnote-34974028
Ref: Biblioteca<135>-Footnote-44974093
Ref: Biblioteca<135>-Footnote-54974158
Ref: Biblioteca<135>-Footnote-64974223
Ref: Biblioteca<135>-Footnote-74974288
Ref: Biblioteca<135>-Footnote-84974353
Ref: Biblioteca<135>-Footnote-94974418
Ref: Biblioteca<135>-Footnote-104974483
Ref: Biblioteca<135>-Footnote-114974549
Ref: Biblioteca<135>-Footnote-124974615
Ref: Biblioteca<135>-Footnote-134974681
Ref: Biblioteca<135>-Footnote-144974747
Ref: Biblioteca<135>-Footnote-154974813
Ref: Biblioteca<135>-Footnote-164974879
Ref: Biblioteca<135>-Footnote-174974945
Ref: Biblioteca<135>-Footnote-184975011
Ref: Biblioteca<135>-Footnote-194975077
Ref: Biblioteca<135>-Footnote-204975143
Ref: Biblioteca<135>-Footnote-214975209
Ref: Biblioteca<135>-Footnote-224975275
Ref: Biblioteca<135>-Footnote-234975341
Ref: Biblioteca<135>-Footnote-244975407
Ref: Biblioteca<135>-Footnote-254975473
Ref: Biblioteca<135>-Footnote-264975539
Ref: Biblioteca<135>-Footnote-274975605
Ref: Biblioteca<135>-Footnote-284975671
Ref: Biblioteca<135>-Footnote-294975737
Ref: Biblioteca<135>-Footnote-304975803
Ref: Biblioteca<135>-Footnote-314975869
Ref: Biblioteca<135>-Footnote-324975935
Ref: Biblioteca<135>-Footnote-334976001
Ref: Biblioteca<135>-Footnote-344976067
Ref: Biblioteca<135>-Footnote-354976133
Ref: Biblioteca<135>-Footnote-364976199
Ref: Biblioteca<135>-Footnote-374976265
Node: Documentação<50>4976331
Ref: whatsnew/changelog id6654976449
Ref: 1b8e4976449
Ref: Documentação<50>-Footnote-14977020
Ref: Documentação<50>-Footnote-24977085
Ref: Documentação<50>-Footnote-34977150
Node: Testes<53>4977215
Ref: whatsnew/changelog id6664977334
Ref: 1b8f4977334
Ref: Testes<53>-Footnote-14977848
Ref: Testes<53>-Footnote-24977913
Ref: Testes<53>-Footnote-34977978
Node: Construção<58>4978043
Ref: whatsnew/changelog id6674978155
Ref: 1b904978155
Ref: Construção<58>-Footnote-14978687
Ref: Construção<58>-Footnote-24978752
Ref: Construção<58>-Footnote-34978817
Ref: Construção<58>-Footnote-44978882
Node: Windows<50>4978947
Ref: whatsnew/changelog id6684979057
Ref: 1b914979057
Ref: Windows<50>-Footnote-14979508
Ref: Windows<50>-Footnote-24979573
Ref: Windows<50>-Footnote-34979638
Node: IDLE<39>4979703
Ref: whatsnew/changelog id6694979818
Ref: 1b924979818
Ref: IDLE<39>-Footnote-14980927
Ref: IDLE<39>-Footnote-24980992
Ref: IDLE<39>-Footnote-34981057
Ref: IDLE<39>-Footnote-44981122
Ref: IDLE<39>-Footnote-54981187
Ref: IDLE<39>-Footnote-64981252
Ref: IDLE<39>-Footnote-74981317
Ref: IDLE<39>-Footnote-84981382
Ref: IDLE<39>-Footnote-94981447
Node: Ferramentas/Demos<29>4981512
Ref: whatsnew/changelog id6704981625
Ref: 1b934981625
Ref: Ferramentas/Demos<29>-Footnote-14981850
Ref: Ferramentas/Demos<29>-Footnote-24981915
Node: API C<54>4981980
Ref: whatsnew/changelog id6714982076
Ref: 1b944982076
Ref: API C<54>-Footnote-14982468
Ref: API C<54>-Footnote-24982533
Node: Python 3 8 0 alpha 24982598
Ref: whatsnew/changelog python-3-8-0-alpha-24982722
Ref: 1b954982722
Node: Núcleo e embutidos<134>4983008
Ref: whatsnew/changelog id6724983113
Ref: 1b964983113
Ref: Núcleo e embutidos<134>-Footnote-14986255
Ref: Núcleo e embutidos<134>-Footnote-24986320
Ref: Núcleo e embutidos<134>-Footnote-34986385
Ref: Núcleo e embutidos<134>-Footnote-44986450
Ref: Núcleo e embutidos<134>-Footnote-54986515
Ref: Núcleo e embutidos<134>-Footnote-64986582
Ref: Núcleo e embutidos<134>-Footnote-74986647
Ref: Núcleo e embutidos<134>-Footnote-84986712
Ref: Núcleo e embutidos<134>-Footnote-94986777
Ref: Núcleo e embutidos<134>-Footnote-104986842
Ref: Núcleo e embutidos<134>-Footnote-114986908
Ref: Núcleo e embutidos<134>-Footnote-124986974
Ref: Núcleo e embutidos<134>-Footnote-134987040
Ref: Núcleo e embutidos<134>-Footnote-144987106
Ref: Núcleo e embutidos<134>-Footnote-154987172
Ref: Núcleo e embutidos<134>-Footnote-164987238
Ref: Núcleo e embutidos<134>-Footnote-174987304
Node: Biblioteca<136>4987370
Ref: whatsnew/changelog id6734987502
Ref: 1b974987502
Ref: Biblioteca<136>-Footnote-14991223
Ref: Biblioteca<136>-Footnote-24991288
Ref: Biblioteca<136>-Footnote-34991353
Ref: Biblioteca<136>-Footnote-44991418
Ref: Biblioteca<136>-Footnote-54991483
Ref: Biblioteca<136>-Footnote-64991548
Ref: Biblioteca<136>-Footnote-74991613
Ref: Biblioteca<136>-Footnote-84991678
Ref: Biblioteca<136>-Footnote-94991743
Ref: Biblioteca<136>-Footnote-104991808
Ref: Biblioteca<136>-Footnote-114991874
Ref: Biblioteca<136>-Footnote-124991940
Ref: Biblioteca<136>-Footnote-134992006
Ref: Biblioteca<136>-Footnote-144992072
Ref: Biblioteca<136>-Footnote-154992138
Ref: Biblioteca<136>-Footnote-164992204
Ref: Biblioteca<136>-Footnote-174992270
Node: Documentação<51>4992336
Ref: whatsnew/changelog id6744992454
Ref: 1b9a4992454
Ref: Documentação<51>-Footnote-14992832
Ref: Documentação<51>-Footnote-24992897
Ref: Documentação<51>-Footnote-34992962
Node: Testes<54>4993027
Ref: whatsnew/changelog id6754993141
Ref: 1b9b4993141
Ref: Testes<54>-Footnote-14994508
Ref: Testes<54>-Footnote-24994573
Ref: Testes<54>-Footnote-34994638
Ref: Testes<54>-Footnote-44994703
Ref: Testes<54>-Footnote-54994768
Ref: Testes<54>-Footnote-64994833
Ref: Testes<54>-Footnote-74994898
Ref: Testes<54>-Footnote-84994963
Node: Windows<51>4995028
Ref: whatsnew/changelog id6764995132
Ref: 1b9c4995132
Ref: Windows<51>-Footnote-14995729
Ref: Windows<51>-Footnote-24995794
Ref: Windows<51>-Footnote-34995859
Ref: Windows<51>-Footnote-44995924
Ref: Windows<51>-Footnote-54995989
Node: IDLE<40>4996054
Ref: whatsnew/changelog id6774996139
Ref: 1b9d4996139
Ref: IDLE<40>-Footnote-14996445
Ref: IDLE<40>-Footnote-24996510
Ref: IDLE<40>-Footnote-34996575
Node: Python 3 8 0 alpha 14996640
Ref: whatsnew/changelog python-3-8-0-alpha-14996762
Ref: 1b9e4996762
Node: Segurança<42>4997196
Ref: whatsnew/changelog id6784997300
Ref: 1b9f4997300
Ref: Segurança<42>-Footnote-14999643
Ref: Segurança<42>-Footnote-24999708
Ref: Segurança<42>-Footnote-34999763
Ref: Segurança<42>-Footnote-44999828
Ref: Segurança<42>-Footnote-54999893
Ref: Segurança<42>-Footnote-64999958
Ref: Segurança<42>-Footnote-75000023
Ref: Segurança<42>-Footnote-85000079
Ref: Segurança<42>-Footnote-95000144
Ref: Segurança<42>-Footnote-105000209
Ref: Segurança<42>-Footnote-115000275
Ref: Segurança<42>-Footnote-125000341
Ref: Segurança<42>-Footnote-135000397
Ref: Segurança<42>-Footnote-145000463
Ref: Segurança<42>-Footnote-155000529
Ref: Segurança<42>-Footnote-165000585
Ref: Segurança<42>-Footnote-175000641
Node: Núcleo e embutidos<135>5000707
Ref: whatsnew/changelog id6795000835
Ref: 1ba05000835
Ref: Núcleo e embutidos<135>-Footnote-15027028
Ref: Núcleo e embutidos<135>-Footnote-25027093
Ref: Núcleo e embutidos<135>-Footnote-35027158
Ref: Núcleo e embutidos<135>-Footnote-45027223
Ref: Núcleo e embutidos<135>-Footnote-55027288
Ref: Núcleo e embutidos<135>-Footnote-65027353
Ref: Núcleo e embutidos<135>-Footnote-75027418
Ref: Núcleo e embutidos<135>-Footnote-85027483
Ref: Núcleo e embutidos<135>-Footnote-95027548
Ref: Núcleo e embutidos<135>-Footnote-105027613
Ref: Núcleo e embutidos<135>-Footnote-115027679
Ref: Núcleo e embutidos<135>-Footnote-125027745
Ref: Núcleo e embutidos<135>-Footnote-135027811
Ref: Núcleo e embutidos<135>-Footnote-145027877
Ref: Núcleo e embutidos<135>-Footnote-155027943
Ref: Núcleo e embutidos<135>-Footnote-165028009
Ref: Núcleo e embutidos<135>-Footnote-175028075
Ref: Núcleo e embutidos<135>-Footnote-185028141
Ref: Núcleo e embutidos<135>-Footnote-195028207
Ref: Núcleo e embutidos<135>-Footnote-205028273
Ref: Núcleo e embutidos<135>-Footnote-215028339
Ref: Núcleo e embutidos<135>-Footnote-225028405
Ref: Núcleo e embutidos<135>-Footnote-235028471
Ref: Núcleo e embutidos<135>-Footnote-245028537
Ref: Núcleo e embutidos<135>-Footnote-255028603
Ref: Núcleo e embutidos<135>-Footnote-265028646
Ref: Núcleo e embutidos<135>-Footnote-275028712
Ref: Núcleo e embutidos<135>-Footnote-285028778
Ref: Núcleo e embutidos<135>-Footnote-295028844
Ref: Núcleo e embutidos<135>-Footnote-305028910
Ref: Núcleo e embutidos<135>-Footnote-315028976
Ref: Núcleo e embutidos<135>-Footnote-325029042
Ref: Núcleo e embutidos<135>-Footnote-335029108
Ref: Núcleo e embutidos<135>-Footnote-345029174
Ref: Núcleo e embutidos<135>-Footnote-355029240
Ref: Núcleo e embutidos<135>-Footnote-365029306
Ref: Núcleo e embutidos<135>-Footnote-375029372
Ref: Núcleo e embutidos<135>-Footnote-385029438
Ref: Núcleo e embutidos<135>-Footnote-395029504
Ref: Núcleo e embutidos<135>-Footnote-405029570
Ref: Núcleo e embutidos<135>-Footnote-415029636
Ref: Núcleo e embutidos<135>-Footnote-425029702
Ref: Núcleo e embutidos<135>-Footnote-435029768
Ref: Núcleo e embutidos<135>-Footnote-445029834
Ref: Núcleo e embutidos<135>-Footnote-455029900
Ref: Núcleo e embutidos<135>-Footnote-465029966
Ref: Núcleo e embutidos<135>-Footnote-475030032
Ref: Núcleo e embutidos<135>-Footnote-485030098
Ref: Núcleo e embutidos<135>-Footnote-495030164
Ref: Núcleo e embutidos<135>-Footnote-505030230
Ref: Núcleo e embutidos<135>-Footnote-515030296
Ref: Núcleo e embutidos<135>-Footnote-525030362
Ref: Núcleo e embutidos<135>-Footnote-535030428
Ref: Núcleo e embutidos<135>-Footnote-545030494
Ref: Núcleo e embutidos<135>-Footnote-555030560
Ref: Núcleo e embutidos<135>-Footnote-565030626
Ref: Núcleo e embutidos<135>-Footnote-575030692
Ref: Núcleo e embutidos<135>-Footnote-585030758
Ref: Núcleo e embutidos<135>-Footnote-595030824
Ref: Núcleo e embutidos<135>-Footnote-605030889
Ref: Núcleo e embutidos<135>-Footnote-615030955
Ref: Núcleo e embutidos<135>-Footnote-625031021
Ref: Núcleo e embutidos<135>-Footnote-635031087
Ref: Núcleo e embutidos<135>-Footnote-645031153
Ref: Núcleo e embutidos<135>-Footnote-655031219
Ref: Núcleo e embutidos<135>-Footnote-665031285
Ref: Núcleo e embutidos<135>-Footnote-675031351
Ref: Núcleo e embutidos<135>-Footnote-685031417
Ref: Núcleo e embutidos<135>-Footnote-695031483
Ref: Núcleo e embutidos<135>-Footnote-705031549
Ref: Núcleo e embutidos<135>-Footnote-715031615
Ref: Núcleo e embutidos<135>-Footnote-725031681
Ref: Núcleo e embutidos<135>-Footnote-735031747
Ref: Núcleo e embutidos<135>-Footnote-745031813
Ref: Núcleo e embutidos<135>-Footnote-755031879
Ref: Núcleo e embutidos<135>-Footnote-765031945
Ref: Núcleo e embutidos<135>-Footnote-775032011
Ref: Núcleo e embutidos<135>-Footnote-785032077
Ref: Núcleo e embutidos<135>-Footnote-795032143
Ref: Núcleo e embutidos<135>-Footnote-805032209
Ref: Núcleo e embutidos<135>-Footnote-815032275
Ref: Núcleo e embutidos<135>-Footnote-825032341
Ref: Núcleo e embutidos<135>-Footnote-835032407
Ref: Núcleo e embutidos<135>-Footnote-845032473
Ref: Núcleo e embutidos<135>-Footnote-855032539
Ref: Núcleo e embutidos<135>-Footnote-865032605
Ref: Núcleo e embutidos<135>-Footnote-875032671
Ref: Núcleo e embutidos<135>-Footnote-885032737
Ref: Núcleo e embutidos<135>-Footnote-895032803
Ref: Núcleo e embutidos<135>-Footnote-905032869
Ref: Núcleo e embutidos<135>-Footnote-915032935
Ref: Núcleo e embutidos<135>-Footnote-925033001
Ref: Núcleo e embutidos<135>-Footnote-935033067
Ref: Núcleo e embutidos<135>-Footnote-945033133
Ref: Núcleo e embutidos<135>-Footnote-955033199
Ref: Núcleo e embutidos<135>-Footnote-965033265
Ref: Núcleo e embutidos<135>-Footnote-975033333
Ref: Núcleo e embutidos<135>-Footnote-985033399
Ref: Núcleo e embutidos<135>-Footnote-995033465
Ref: Núcleo e embutidos<135>-Footnote-1005033531
Ref: Núcleo e embutidos<135>-Footnote-1015033598
Ref: Núcleo e embutidos<135>-Footnote-1025033665
Ref: Núcleo e embutidos<135>-Footnote-1035033732
Ref: Núcleo e embutidos<135>-Footnote-1045033799
Ref: Núcleo e embutidos<135>-Footnote-1055033866
Ref: Núcleo e embutidos<135>-Footnote-1065033933
Ref: Núcleo e embutidos<135>-Footnote-1075034000
Ref: Núcleo e embutidos<135>-Footnote-1085034067
Ref: Núcleo e embutidos<135>-Footnote-1095034134
Ref: Núcleo e embutidos<135>-Footnote-1105034201
Ref: Núcleo e embutidos<135>-Footnote-1115034268
Ref: Núcleo e embutidos<135>-Footnote-1125034335
Ref: Núcleo e embutidos<135>-Footnote-1135034402
Ref: Núcleo e embutidos<135>-Footnote-1145034469
Ref: Núcleo e embutidos<135>-Footnote-1155034536
Ref: Núcleo e embutidos<135>-Footnote-1165034603
Ref: Núcleo e embutidos<135>-Footnote-1175034670
Ref: Núcleo e embutidos<135>-Footnote-1185034737
Ref: Núcleo e embutidos<135>-Footnote-1195034804
Ref: Núcleo e embutidos<135>-Footnote-1205034871
Ref: Núcleo e embutidos<135>-Footnote-1215034938
Ref: Núcleo e embutidos<135>-Footnote-1225035005
Ref: Núcleo e embutidos<135>-Footnote-1235035072
Ref: Núcleo e embutidos<135>-Footnote-1245035139
Ref: Núcleo e embutidos<135>-Footnote-1255035206
Ref: Núcleo e embutidos<135>-Footnote-1265035273
Ref: Núcleo e embutidos<135>-Footnote-1275035340
Ref: Núcleo e embutidos<135>-Footnote-1285035407
Ref: Núcleo e embutidos<135>-Footnote-1295035474
Ref: Núcleo e embutidos<135>-Footnote-1305035541
Ref: Núcleo e embutidos<135>-Footnote-1315035608
Ref: Núcleo e embutidos<135>-Footnote-1325035675
Ref: Núcleo e embutidos<135>-Footnote-1335035742
Ref: Núcleo e embutidos<135>-Footnote-1345035809
Ref: Núcleo e embutidos<135>-Footnote-1355035876
Ref: Núcleo e embutidos<135>-Footnote-1365035943
Ref: Núcleo e embutidos<135>-Footnote-1375036010
Ref: Núcleo e embutidos<135>-Footnote-1385036077
Ref: Núcleo e embutidos<135>-Footnote-1395036144
Ref: Núcleo e embutidos<135>-Footnote-1405036211
Ref: Núcleo e embutidos<135>-Footnote-1415036278
Ref: Núcleo e embutidos<135>-Footnote-1425036345
Ref: Núcleo e embutidos<135>-Footnote-1435036412
Ref: Núcleo e embutidos<135>-Footnote-1445036479
Ref: Núcleo e embutidos<135>-Footnote-1455036546
Ref: Núcleo e embutidos<135>-Footnote-1465036613
Ref: Núcleo e embutidos<135>-Footnote-1475036680
Ref: Núcleo e embutidos<135>-Footnote-1485036747
Ref: Núcleo e embutidos<135>-Footnote-1495036814
Ref: Núcleo e embutidos<135>-Footnote-1505036881
Ref: Núcleo e embutidos<135>-Footnote-1515036948
Ref: Núcleo e embutidos<135>-Footnote-1525037015
Ref: Núcleo e embutidos<135>-Footnote-1535037082
Ref: Núcleo e embutidos<135>-Footnote-1545037149
Ref: Núcleo e embutidos<135>-Footnote-1555037216
Ref: Núcleo e embutidos<135>-Footnote-1565037283
Ref: Núcleo e embutidos<135>-Footnote-1575037350
Ref: Núcleo e embutidos<135>-Footnote-1585037417
Ref: Núcleo e embutidos<135>-Footnote-1595037484
Ref: Núcleo e embutidos<135>-Footnote-1605037551
Ref: Núcleo e embutidos<135>-Footnote-1615037618
Ref: Núcleo e embutidos<135>-Footnote-1625037685
Node: Biblioteca<137>5037752
Ref: whatsnew/changelog id6805037884
Ref: 1ba65037884
Ref: Biblioteca<137>-Footnote-15109077
Ref: Biblioteca<137>-Footnote-25109142
Ref: Biblioteca<137>-Footnote-35109207
Ref: Biblioteca<137>-Footnote-45109272
Ref: Biblioteca<137>-Footnote-55109337
Ref: Biblioteca<137>-Footnote-65109402
Ref: Biblioteca<137>-Footnote-75109467
Ref: Biblioteca<137>-Footnote-85109532
Ref: Biblioteca<137>-Footnote-95109597
Ref: Biblioteca<137>-Footnote-105109662
Ref: Biblioteca<137>-Footnote-115109728
Ref: Biblioteca<137>-Footnote-125109794
Ref: Biblioteca<137>-Footnote-135109860
Ref: Biblioteca<137>-Footnote-145109926
Ref: Biblioteca<137>-Footnote-155109992
Ref: Biblioteca<137>-Footnote-165110058
Ref: Biblioteca<137>-Footnote-175110124
Ref: Biblioteca<137>-Footnote-185110190
Ref: Biblioteca<137>-Footnote-195110256
Ref: Biblioteca<137>-Footnote-205110322
Ref: Biblioteca<137>-Footnote-215110388
Ref: Biblioteca<137>-Footnote-225110454
Ref: Biblioteca<137>-Footnote-235110520
Ref: Biblioteca<137>-Footnote-245110586
Ref: Biblioteca<137>-Footnote-255110652
Ref: Biblioteca<137>-Footnote-265110718
Ref: Biblioteca<137>-Footnote-275110784
Ref: Biblioteca<137>-Footnote-285110850
Ref: Biblioteca<137>-Footnote-295110916
Ref: Biblioteca<137>-Footnote-305110982
Ref: Biblioteca<137>-Footnote-315111048
Ref: Biblioteca<137>-Footnote-325111114
Ref: Biblioteca<137>-Footnote-335111180
Ref: Biblioteca<137>-Footnote-345111246
Ref: Biblioteca<137>-Footnote-355111312
Ref: Biblioteca<137>-Footnote-365111378
Ref: Biblioteca<137>-Footnote-375111444
Ref: Biblioteca<137>-Footnote-385111510
Ref: Biblioteca<137>-Footnote-395111576
Ref: Biblioteca<137>-Footnote-405111642
Ref: Biblioteca<137>-Footnote-415111708
Ref: Biblioteca<137>-Footnote-425111774
Ref: Biblioteca<137>-Footnote-435111840
Ref: Biblioteca<137>-Footnote-445111906
Ref: Biblioteca<137>-Footnote-455111972
Ref: Biblioteca<137>-Footnote-465112038
Ref: Biblioteca<137>-Footnote-475112104
Ref: Biblioteca<137>-Footnote-485112170
Ref: Biblioteca<137>-Footnote-495112236
Ref: Biblioteca<137>-Footnote-505112302
Ref: Biblioteca<137>-Footnote-515112368
Ref: Biblioteca<137>-Footnote-525112434
Ref: Biblioteca<137>-Footnote-535112500
Ref: Biblioteca<137>-Footnote-545112566
Ref: Biblioteca<137>-Footnote-555112632
Ref: Biblioteca<137>-Footnote-565112698
Ref: Biblioteca<137>-Footnote-575112764
Ref: Biblioteca<137>-Footnote-585112830
Ref: Biblioteca<137>-Footnote-595112896
Ref: Biblioteca<137>-Footnote-605112962
Ref: Biblioteca<137>-Footnote-615113028
Ref: Biblioteca<137>-Footnote-625113094
Ref: Biblioteca<137>-Footnote-635113160
Ref: Biblioteca<137>-Footnote-645113226
Ref: Biblioteca<137>-Footnote-655113292
Ref: Biblioteca<137>-Footnote-665113358
Ref: Biblioteca<137>-Footnote-675113424
Ref: Biblioteca<137>-Footnote-685113490
Ref: Biblioteca<137>-Footnote-695113556
Ref: Biblioteca<137>-Footnote-705113622
Ref: Biblioteca<137>-Footnote-715113688
Ref: Biblioteca<137>-Footnote-725113754
Ref: Biblioteca<137>-Footnote-735113820
Ref: Biblioteca<137>-Footnote-745113886
Ref: Biblioteca<137>-Footnote-755113952
Ref: Biblioteca<137>-Footnote-765114018
Ref: Biblioteca<137>-Footnote-775114084
Ref: Biblioteca<137>-Footnote-785114150
Ref: Biblioteca<137>-Footnote-795114216
Ref: Biblioteca<137>-Footnote-805114282
Ref: Biblioteca<137>-Footnote-815114348
Ref: Biblioteca<137>-Footnote-825114414
Ref: Biblioteca<137>-Footnote-835114480
Ref: Biblioteca<137>-Footnote-845114546
Ref: Biblioteca<137>-Footnote-855114612
Ref: Biblioteca<137>-Footnote-865114678
Ref: Biblioteca<137>-Footnote-875114744
Ref: Biblioteca<137>-Footnote-885114810
Ref: Biblioteca<137>-Footnote-895114876
Ref: Biblioteca<137>-Footnote-905114942
Ref: Biblioteca<137>-Footnote-915115008
Ref: Biblioteca<137>-Footnote-925115074
Ref: Biblioteca<137>-Footnote-935115140
Ref: Biblioteca<137>-Footnote-945115200
Ref: Biblioteca<137>-Footnote-955115266
Ref: Biblioteca<137>-Footnote-965115332
Ref: Biblioteca<137>-Footnote-975115398
Ref: Biblioteca<137>-Footnote-985115464
Ref: Biblioteca<137>-Footnote-995115530
Ref: Biblioteca<137>-Footnote-1005115596
Ref: Biblioteca<137>-Footnote-1015115663
Ref: Biblioteca<137>-Footnote-1025115730
Ref: Biblioteca<137>-Footnote-1035115797
Ref: Biblioteca<137>-Footnote-1045115864
Ref: Biblioteca<137>-Footnote-1055115931
Ref: Biblioteca<137>-Footnote-1065115998
Ref: Biblioteca<137>-Footnote-1075116065
Ref: Biblioteca<137>-Footnote-1085116132
Ref: Biblioteca<137>-Footnote-1095116199
Ref: Biblioteca<137>-Footnote-1105116266
Ref: Biblioteca<137>-Footnote-1115116333
Ref: Biblioteca<137>-Footnote-1125116400
Ref: Biblioteca<137>-Footnote-1135116467
Ref: Biblioteca<137>-Footnote-1145116534
Ref: Biblioteca<137>-Footnote-1155116601
Ref: Biblioteca<137>-Footnote-1165116668
Ref: Biblioteca<137>-Footnote-1175116735
Ref: Biblioteca<137>-Footnote-1185116802
Ref: Biblioteca<137>-Footnote-1195116869
Ref: Biblioteca<137>-Footnote-1205116936
Ref: Biblioteca<137>-Footnote-1215117003
Ref: Biblioteca<137>-Footnote-1225117070
Ref: Biblioteca<137>-Footnote-1235117137
Ref: Biblioteca<137>-Footnote-1245117204
Ref: Biblioteca<137>-Footnote-1255117271
Ref: Biblioteca<137>-Footnote-1265117337
Ref: Biblioteca<137>-Footnote-1275117404
Ref: Biblioteca<137>-Footnote-1285117471
Ref: Biblioteca<137>-Footnote-1295117538
Ref: Biblioteca<137>-Footnote-1305117605
Ref: Biblioteca<137>-Footnote-1315117672
Ref: Biblioteca<137>-Footnote-1325117739
Ref: Biblioteca<137>-Footnote-1335117806
Ref: Biblioteca<137>-Footnote-1345117873
Ref: Biblioteca<137>-Footnote-1355117940
Ref: Biblioteca<137>-Footnote-1365118007
Ref: Biblioteca<137>-Footnote-1375118073
Ref: Biblioteca<137>-Footnote-1385118140
Ref: Biblioteca<137>-Footnote-1395118207
Ref: Biblioteca<137>-Footnote-1405118274
Ref: Biblioteca<137>-Footnote-1415118341
Ref: Biblioteca<137>-Footnote-1425118408
Ref: Biblioteca<137>-Footnote-1435118475
Ref: Biblioteca<137>-Footnote-1445118542
Ref: Biblioteca<137>-Footnote-1455118609
Ref: Biblioteca<137>-Footnote-1465118676
Ref: Biblioteca<137>-Footnote-1475118743
Ref: Biblioteca<137>-Footnote-1485118810
Ref: Biblioteca<137>-Footnote-1495118877
Ref: Biblioteca<137>-Footnote-1505118944
Ref: Biblioteca<137>-Footnote-1515119011
Ref: Biblioteca<137>-Footnote-1525119078
Ref: Biblioteca<137>-Footnote-1535119145
Ref: Biblioteca<137>-Footnote-1545119212
Ref: Biblioteca<137>-Footnote-1555119278
Ref: Biblioteca<137>-Footnote-1565119345
Ref: Biblioteca<137>-Footnote-1575119412
Ref: Biblioteca<137>-Footnote-1585119479
Ref: Biblioteca<137>-Footnote-1595119546
Ref: Biblioteca<137>-Footnote-1605119613
Ref: Biblioteca<137>-Footnote-1615119680
Ref: Biblioteca<137>-Footnote-1625119724
Ref: Biblioteca<137>-Footnote-1635119791
Ref: Biblioteca<137>-Footnote-1645119858
Ref: Biblioteca<137>-Footnote-1655119925
Ref: Biblioteca<137>-Footnote-1665119991
Ref: Biblioteca<137>-Footnote-1675120058
Ref: Biblioteca<137>-Footnote-1685120125
Ref: Biblioteca<137>-Footnote-1695120192
Ref: Biblioteca<137>-Footnote-1705120259
Ref: Biblioteca<137>-Footnote-1715120326
Ref: Biblioteca<137>-Footnote-1725120393
Ref: Biblioteca<137>-Footnote-1735120460
Ref: Biblioteca<137>-Footnote-1745120527
Ref: Biblioteca<137>-Footnote-1755120593
Ref: Biblioteca<137>-Footnote-1765120660
Ref: Biblioteca<137>-Footnote-1775120727
Ref: Biblioteca<137>-Footnote-1785120794
Ref: Biblioteca<137>-Footnote-1795120861
Ref: Biblioteca<137>-Footnote-1805120928
Ref: Biblioteca<137>-Footnote-1815120994
Ref: Biblioteca<137>-Footnote-1825121061
Ref: Biblioteca<137>-Footnote-1835121128
Ref: Biblioteca<137>-Footnote-1845121195
Ref: Biblioteca<137>-Footnote-1855121262
Ref: Biblioteca<137>-Footnote-1865121329
Ref: Biblioteca<137>-Footnote-1875121396
Ref: Biblioteca<137>-Footnote-1885121463
Ref: Biblioteca<137>-Footnote-1895121530
Ref: Biblioteca<137>-Footnote-1905121597
Ref: Biblioteca<137>-Footnote-1915121664
Ref: Biblioteca<137>-Footnote-1925121731
Ref: Biblioteca<137>-Footnote-1935121798
Ref: Biblioteca<137>-Footnote-1945121865
Ref: Biblioteca<137>-Footnote-1955121932
Ref: Biblioteca<137>-Footnote-1965121999
Ref: Biblioteca<137>-Footnote-1975122066
Ref: Biblioteca<137>-Footnote-1985122133
Ref: Biblioteca<137>-Footnote-1995122200
Ref: Biblioteca<137>-Footnote-2005122267
Ref: Biblioteca<137>-Footnote-2015122334
Ref: Biblioteca<137>-Footnote-2025122401
Ref: Biblioteca<137>-Footnote-2035122469
Ref: Biblioteca<137>-Footnote-2045122536
Ref: Biblioteca<137>-Footnote-2055122603
Ref: Biblioteca<137>-Footnote-2065122670
Ref: Biblioteca<137>-Footnote-2075122737
Ref: Biblioteca<137>-Footnote-2085122804
Ref: Biblioteca<137>-Footnote-2095122871
Ref: Biblioteca<137>-Footnote-2105122938
Ref: Biblioteca<137>-Footnote-2115123005
Ref: Biblioteca<137>-Footnote-2125123072
Ref: Biblioteca<137>-Footnote-2135123139
Ref: Biblioteca<137>-Footnote-2145123183
Ref: Biblioteca<137>-Footnote-2155123250
Ref: Biblioteca<137>-Footnote-2165123317
Ref: Biblioteca<137>-Footnote-2175123384
Ref: Biblioteca<137>-Footnote-2185123451
Ref: Biblioteca<137>-Footnote-2195123518
Ref: Biblioteca<137>-Footnote-2205123585
Ref: Biblioteca<137>-Footnote-2215123652
Ref: Biblioteca<137>-Footnote-2225123719
Ref: Biblioteca<137>-Footnote-2235123786
Ref: Biblioteca<137>-Footnote-2245123853
Ref: Biblioteca<137>-Footnote-2255123920
Ref: Biblioteca<137>-Footnote-2265123987
Ref: Biblioteca<137>-Footnote-2275124054
Ref: Biblioteca<137>-Footnote-2285124121
Ref: Biblioteca<137>-Footnote-2295124188
Ref: Biblioteca<137>-Footnote-2305124255
Ref: Biblioteca<137>-Footnote-2315124322
Ref: Biblioteca<137>-Footnote-2325124389
Ref: Biblioteca<137>-Footnote-2335124456
Ref: Biblioteca<137>-Footnote-2345124523
Ref: Biblioteca<137>-Footnote-2355124590
Ref: Biblioteca<137>-Footnote-2365124657
Ref: Biblioteca<137>-Footnote-2375124724
Ref: Biblioteca<137>-Footnote-2385124791
Ref: Biblioteca<137>-Footnote-2395124858
Ref: Biblioteca<137>-Footnote-2405124925
Ref: Biblioteca<137>-Footnote-2415124992
Ref: Biblioteca<137>-Footnote-2425125059
Ref: Biblioteca<137>-Footnote-2435125126
Ref: Biblioteca<137>-Footnote-2445125193
Ref: Biblioteca<137>-Footnote-2455125260
Ref: Biblioteca<137>-Footnote-2465125327
Ref: Biblioteca<137>-Footnote-2475125394
Ref: Biblioteca<137>-Footnote-2485125461
Ref: Biblioteca<137>-Footnote-2495125528
Ref: Biblioteca<137>-Footnote-2505125595
Ref: Biblioteca<137>-Footnote-2515125662
Ref: Biblioteca<137>-Footnote-2525125729
Ref: Biblioteca<137>-Footnote-2535125796
Ref: Biblioteca<137>-Footnote-2545125863
Ref: Biblioteca<137>-Footnote-2555125930
Ref: Biblioteca<137>-Footnote-2565125997
Ref: Biblioteca<137>-Footnote-2575126064
Ref: Biblioteca<137>-Footnote-2585126131
Ref: Biblioteca<137>-Footnote-2595126198
Ref: Biblioteca<137>-Footnote-2605126265
Ref: Biblioteca<137>-Footnote-2615126331
Ref: Biblioteca<137>-Footnote-2625126398
Ref: Biblioteca<137>-Footnote-2635126465
Ref: Biblioteca<137>-Footnote-2645126532
Ref: Biblioteca<137>-Footnote-2655126599
Ref: Biblioteca<137>-Footnote-2665126666
Ref: Biblioteca<137>-Footnote-2675126733
Ref: Biblioteca<137>-Footnote-2685126800
Ref: Biblioteca<137>-Footnote-2695126867
Ref: Biblioteca<137>-Footnote-2705126934
Ref: Biblioteca<137>-Footnote-2715127001
Ref: Biblioteca<137>-Footnote-2725127068
Ref: Biblioteca<137>-Footnote-2735127135
Ref: Biblioteca<137>-Footnote-2745127202
Ref: Biblioteca<137>-Footnote-2755127269
Ref: Biblioteca<137>-Footnote-2765127336
Ref: Biblioteca<137>-Footnote-2775127403
Ref: Biblioteca<137>-Footnote-2785127470
Ref: Biblioteca<137>-Footnote-2795127537
Ref: Biblioteca<137>-Footnote-2805127604
Ref: Biblioteca<137>-Footnote-2815127671
Ref: Biblioteca<137>-Footnote-2825127738
Ref: Biblioteca<137>-Footnote-2835127805
Ref: Biblioteca<137>-Footnote-2845127872
Ref: Biblioteca<137>-Footnote-2855127939
Ref: Biblioteca<137>-Footnote-2865128006
Ref: Biblioteca<137>-Footnote-2875128073
Ref: Biblioteca<137>-Footnote-2885128140
Ref: Biblioteca<137>-Footnote-2895128207
Ref: Biblioteca<137>-Footnote-2905128274
Ref: Biblioteca<137>-Footnote-2915128341
Ref: Biblioteca<137>-Footnote-2925128408
Ref: Biblioteca<137>-Footnote-2935128475
Ref: Biblioteca<137>-Footnote-2945128542
Ref: Biblioteca<137>-Footnote-2955128609
Ref: Biblioteca<137>-Footnote-2965128676
Ref: Biblioteca<137>-Footnote-2975128743
Ref: Biblioteca<137>-Footnote-2985128810
Ref: Biblioteca<137>-Footnote-2995128877
Ref: Biblioteca<137>-Footnote-3005128944
Ref: Biblioteca<137>-Footnote-3015129011
Ref: Biblioteca<137>-Footnote-3025129078
Ref: Biblioteca<137>-Footnote-3035129145
Ref: Biblioteca<137>-Footnote-3045129212
Ref: Biblioteca<137>-Footnote-3055129279
Ref: Biblioteca<137>-Footnote-3065129346
Ref: Biblioteca<137>-Footnote-3075129413
Ref: Biblioteca<137>-Footnote-3085129480
Ref: Biblioteca<137>-Footnote-3095129547
Ref: Biblioteca<137>-Footnote-3105129614
Ref: Biblioteca<137>-Footnote-3115129681
Ref: Biblioteca<137>-Footnote-3125129748
Ref: Biblioteca<137>-Footnote-3135129815
Ref: Biblioteca<137>-Footnote-3145129882
Ref: Biblioteca<137>-Footnote-3155129949
Ref: Biblioteca<137>-Footnote-3165130016
Ref: Biblioteca<137>-Footnote-3175130083
Ref: Biblioteca<137>-Footnote-3185130150
Ref: Biblioteca<137>-Footnote-3195130217
Ref: Biblioteca<137>-Footnote-3205130284
Ref: Biblioteca<137>-Footnote-3215130351
Ref: Biblioteca<137>-Footnote-3225130418
Ref: Biblioteca<137>-Footnote-3235130485
Ref: Biblioteca<137>-Footnote-3245130552
Ref: Biblioteca<137>-Footnote-3255130619
Ref: Biblioteca<137>-Footnote-3265130686
Ref: Biblioteca<137>-Footnote-3275130753
Ref: Biblioteca<137>-Footnote-3285130820
Ref: Biblioteca<137>-Footnote-3295130888
Ref: Biblioteca<137>-Footnote-3305130955
Ref: Biblioteca<137>-Footnote-3315131022
Ref: Biblioteca<137>-Footnote-3325131089
Ref: Biblioteca<137>-Footnote-3335131156
Ref: Biblioteca<137>-Footnote-3345131223
Ref: Biblioteca<137>-Footnote-3355131290
Ref: Biblioteca<137>-Footnote-3365131357
Ref: Biblioteca<137>-Footnote-3375131424
Ref: Biblioteca<137>-Footnote-3385131491
Ref: Biblioteca<137>-Footnote-3395131558
Ref: Biblioteca<137>-Footnote-3405131625
Ref: Biblioteca<137>-Footnote-3415131692
Ref: Biblioteca<137>-Footnote-3425131759
Ref: Biblioteca<137>-Footnote-3435131826
Ref: Biblioteca<137>-Footnote-3445131893
Ref: Biblioteca<137>-Footnote-3455131960
Ref: Biblioteca<137>-Footnote-3465132004
Ref: Biblioteca<137>-Footnote-3475132071
Ref: Biblioteca<137>-Footnote-3485132138
Ref: Biblioteca<137>-Footnote-3495132205
Ref: Biblioteca<137>-Footnote-3505132249
Ref: Biblioteca<137>-Footnote-3515132316
Ref: Biblioteca<137>-Footnote-3525132383
Ref: Biblioteca<137>-Footnote-3535132450
Ref: Biblioteca<137>-Footnote-3545132517
Ref: Biblioteca<137>-Footnote-3555132584
Ref: Biblioteca<137>-Footnote-3565132651
Ref: Biblioteca<137>-Footnote-3575132718
Ref: Biblioteca<137>-Footnote-3585132785
Ref: Biblioteca<137>-Footnote-3595132852
Ref: Biblioteca<137>-Footnote-3605132919
Ref: Biblioteca<137>-Footnote-3615132986
Ref: Biblioteca<137>-Footnote-3625133053
Ref: Biblioteca<137>-Footnote-3635133120
Ref: Biblioteca<137>-Footnote-3645133187
Ref: Biblioteca<137>-Footnote-3655133254
Ref: Biblioteca<137>-Footnote-3665133321
Ref: Biblioteca<137>-Footnote-3675133388
Ref: Biblioteca<137>-Footnote-3685133455
Ref: Biblioteca<137>-Footnote-3695133522
Ref: Biblioteca<137>-Footnote-3705133589
Ref: Biblioteca<137>-Footnote-3715133656
Ref: Biblioteca<137>-Footnote-3725133723
Ref: Biblioteca<137>-Footnote-3735133790
Ref: Biblioteca<137>-Footnote-3745133857
Ref: Biblioteca<137>-Footnote-3755133924
Ref: Biblioteca<137>-Footnote-3765133991
Ref: Biblioteca<137>-Footnote-3775134058
Ref: Biblioteca<137>-Footnote-3785134125
Ref: Biblioteca<137>-Footnote-3795134192
Ref: Biblioteca<137>-Footnote-3805134259
Ref: Biblioteca<137>-Footnote-3815134326
Ref: Biblioteca<137>-Footnote-3825134393
Ref: Biblioteca<137>-Footnote-3835134460
Ref: Biblioteca<137>-Footnote-3845134527
Ref: Biblioteca<137>-Footnote-3855134594
Ref: Biblioteca<137>-Footnote-3865134661
Ref: Biblioteca<137>-Footnote-3875134728
Ref: Biblioteca<137>-Footnote-3885134795
Ref: Biblioteca<137>-Footnote-3895134862
Ref: Biblioteca<137>-Footnote-3905134929
Ref: Biblioteca<137>-Footnote-3915134996
Ref: Biblioteca<137>-Footnote-3925135063
Ref: Biblioteca<137>-Footnote-3935135130
Ref: Biblioteca<137>-Footnote-3945135197
Ref: Biblioteca<137>-Footnote-3955135264
Ref: Biblioteca<137>-Footnote-3965135331
Ref: Biblioteca<137>-Footnote-3975135398
Ref: Biblioteca<137>-Footnote-3985135465
Ref: Biblioteca<137>-Footnote-3995135532
Ref: Biblioteca<137>-Footnote-4005135599
Ref: Biblioteca<137>-Footnote-4015135666
Ref: Biblioteca<137>-Footnote-4025135733
Ref: Biblioteca<137>-Footnote-4035135800
Ref: Biblioteca<137>-Footnote-4045135867
Ref: Biblioteca<137>-Footnote-4055135934
Ref: Biblioteca<137>-Footnote-4065136001
Ref: Biblioteca<137>-Footnote-4075136068
Ref: Biblioteca<137>-Footnote-4085136135
Ref: Biblioteca<137>-Footnote-4095136202
Ref: Biblioteca<137>-Footnote-4105136269
Ref: Biblioteca<137>-Footnote-4115136336
Ref: Biblioteca<137>-Footnote-4125136403
Ref: Biblioteca<137>-Footnote-4135136470
Ref: Biblioteca<137>-Footnote-4145136537
Ref: Biblioteca<137>-Footnote-4155136604
Ref: Biblioteca<137>-Footnote-4165136671
Ref: Biblioteca<137>-Footnote-4175136738
Ref: Biblioteca<137>-Footnote-4185136805
Ref: Biblioteca<137>-Footnote-4195136872
Ref: Biblioteca<137>-Footnote-4205136939
Ref: Biblioteca<137>-Footnote-4215137006
Ref: Biblioteca<137>-Footnote-4225137073
Ref: Biblioteca<137>-Footnote-4235137139
Ref: Biblioteca<137>-Footnote-4245137206
Ref: Biblioteca<137>-Footnote-4255137273
Ref: Biblioteca<137>-Footnote-4265137340
Ref: Biblioteca<137>-Footnote-4275137407
Ref: Biblioteca<137>-Footnote-4285137474
Ref: Biblioteca<137>-Footnote-4295137541
Ref: Biblioteca<137>-Footnote-4305137608
Ref: Biblioteca<137>-Footnote-4315137675
Ref: Biblioteca<137>-Footnote-4325137742
Ref: Biblioteca<137>-Footnote-4335137809
Ref: Biblioteca<137>-Footnote-4345137876
Ref: Biblioteca<137>-Footnote-4355137943
Ref: Biblioteca<137>-Footnote-4365138010
Ref: Biblioteca<137>-Footnote-4375138077
Node: Documentação<52>5138144
Ref: whatsnew/changelog id6815138262
Ref: 1bc05138262
Ref: Documentação<52>-Footnote-15144953
Ref: Documentação<52>-Footnote-25145018
Ref: Documentação<52>-Footnote-35145083
Ref: Documentação<52>-Footnote-45145148
Ref: Documentação<52>-Footnote-55145213
Ref: Documentação<52>-Footnote-65145278
Ref: Documentação<52>-Footnote-75145343
Ref: Documentação<52>-Footnote-85145408
Ref: Documentação<52>-Footnote-95145473
Ref: Documentação<52>-Footnote-105145538
Ref: Documentação<52>-Footnote-115145604
Ref: Documentação<52>-Footnote-125145670
Ref: Documentação<52>-Footnote-135145736
Ref: Documentação<52>-Footnote-145145802
Ref: Documentação<52>-Footnote-155145868
Ref: Documentação<52>-Footnote-165145934
Ref: Documentação<52>-Footnote-175146000
Ref: Documentação<52>-Footnote-185146066
Ref: Documentação<52>-Footnote-195146132
Ref: Documentação<52>-Footnote-205146198
Ref: Documentação<52>-Footnote-215146264
Ref: Documentação<52>-Footnote-225146330
Ref: Documentação<52>-Footnote-235146396
Ref: Documentação<52>-Footnote-245146439
Ref: Documentação<52>-Footnote-255146505
Ref: Documentação<52>-Footnote-265146571
Ref: Documentação<52>-Footnote-275146637
Ref: Documentação<52>-Footnote-285146703
Ref: Documentação<52>-Footnote-295146769
Ref: Documentação<52>-Footnote-305146812
Ref: Documentação<52>-Footnote-315146878
Ref: Documentação<52>-Footnote-325146944
Ref: Documentação<52>-Footnote-335147010
Ref: Documentação<52>-Footnote-345147076
Ref: Documentação<52>-Footnote-355147142
Ref: Documentação<52>-Footnote-365147208
Ref: Documentação<52>-Footnote-375147274
Ref: Documentação<52>-Footnote-385147340
Ref: Documentação<52>-Footnote-395147406
Ref: Documentação<52>-Footnote-405147472
Ref: Documentação<52>-Footnote-415147538
Ref: Documentação<52>-Footnote-425147604
Ref: Documentação<52>-Footnote-435147670
Ref: Documentação<52>-Footnote-445147736
Ref: Documentação<52>-Footnote-455147802
Ref: Documentação<52>-Footnote-465147868
Ref: Documentação<52>-Footnote-475147934
Ref: Documentação<52>-Footnote-485148000
Ref: Documentação<52>-Footnote-495148066
Ref: Documentação<52>-Footnote-505148132
Ref: Documentação<52>-Footnote-515148197
Ref: Documentação<52>-Footnote-525148263
Ref: Documentação<52>-Footnote-535148329
Ref: Documentação<52>-Footnote-545148395
Ref: Documentação<52>-Footnote-555148461
Ref: Documentação<52>-Footnote-565148527
Ref: Documentação<52>-Footnote-575148592
Ref: Documentação<52>-Footnote-585148658
Ref: Documentação<52>-Footnote-595148724
Node: Testes<55>5148790
Ref: whatsnew/changelog id6825148909
Ref: 1bc25148909
Ref: Testes<55>-Footnote-15156537
Ref: Testes<55>-Footnote-25156602
Ref: Testes<55>-Footnote-35156667
Ref: Testes<55>-Footnote-45156732
Ref: Testes<55>-Footnote-55156797
Ref: Testes<55>-Footnote-65156862
Ref: Testes<55>-Footnote-75156927
Ref: Testes<55>-Footnote-85156992
Ref: Testes<55>-Footnote-95157057
Ref: Testes<55>-Footnote-105157122
Ref: Testes<55>-Footnote-115157188
Ref: Testes<55>-Footnote-125157254
Ref: Testes<55>-Footnote-135157320
Ref: Testes<55>-Footnote-145157386
Ref: Testes<55>-Footnote-155157452
Ref: Testes<55>-Footnote-165157518
Ref: Testes<55>-Footnote-175157584
Ref: Testes<55>-Footnote-185157650
Ref: Testes<55>-Footnote-195157716
Ref: Testes<55>-Footnote-205157782
Ref: Testes<55>-Footnote-215157848
Ref: Testes<55>-Footnote-225157914
Ref: Testes<55>-Footnote-235157980
Ref: Testes<55>-Footnote-245158046
Ref: Testes<55>-Footnote-255158112
Ref: Testes<55>-Footnote-265158178
Ref: Testes<55>-Footnote-275158244
Ref: Testes<55>-Footnote-285158310
Ref: Testes<55>-Footnote-295158376
Ref: Testes<55>-Footnote-305158442
Ref: Testes<55>-Footnote-315158508
Ref: Testes<55>-Footnote-325158574
Ref: Testes<55>-Footnote-335158640
Ref: Testes<55>-Footnote-345158706
Ref: Testes<55>-Footnote-355158772
Ref: Testes<55>-Footnote-365158838
Ref: Testes<55>-Footnote-375158904
Ref: Testes<55>-Footnote-385158970
Ref: Testes<55>-Footnote-395159036
Ref: Testes<55>-Footnote-405159102
Ref: Testes<55>-Footnote-415159168
Ref: Testes<55>-Footnote-425159234
Ref: Testes<55>-Footnote-435159300
Ref: Testes<55>-Footnote-445159366
Ref: Testes<55>-Footnote-455159432
Ref: Testes<55>-Footnote-465159498
Ref: Testes<55>-Footnote-475159564
Ref: Testes<55>-Footnote-485159630
Node: Construção<59>5159696
Ref: whatsnew/changelog id6835159808
Ref: 1bc35159808
Ref: Construção<59>-Footnote-15164948
Ref: Construção<59>-Footnote-25165013
Ref: Construção<59>-Footnote-35165078
Ref: Construção<59>-Footnote-45165143
Ref: Construção<59>-Footnote-55165208
Ref: Construção<59>-Footnote-65165273
Ref: Construção<59>-Footnote-75165338
Ref: Construção<59>-Footnote-85165403
Ref: Construção<59>-Footnote-95165468
Ref: Construção<59>-Footnote-105165533
Ref: Construção<59>-Footnote-115165599
Ref: Construção<59>-Footnote-125165665
Ref: Construção<59>-Footnote-135165731
Ref: Construção<59>-Footnote-145165797
Ref: Construção<59>-Footnote-155165863
Ref: Construção<59>-Footnote-165165929
Ref: Construção<59>-Footnote-175165995
Ref: Construção<59>-Footnote-185166061
Ref: Construção<59>-Footnote-195166127
Ref: Construção<59>-Footnote-205166193
Ref: Construção<59>-Footnote-215166259
Ref: Construção<59>-Footnote-225166325
Ref: Construção<59>-Footnote-235166391
Ref: Construção<59>-Footnote-245166456
Ref: Construção<59>-Footnote-255166522
Ref: Construção<59>-Footnote-265166588
Ref: Construção<59>-Footnote-275166654
Ref: Construção<59>-Footnote-285166720
Ref: Construção<59>-Footnote-295166786
Ref: Construção<59>-Footnote-305166852
Ref: Construção<59>-Footnote-315166918
Ref: Construção<59>-Footnote-325166984
Ref: Construção<59>-Footnote-335167050
Ref: Construção<59>-Footnote-345167116
Ref: Construção<59>-Footnote-355167182
Ref: Construção<59>-Footnote-365167248
Ref: Construção<59>-Footnote-375167314
Node: Windows<52>5167380
Ref: whatsnew/changelog id6845167491
Ref: 1bc55167491
Ref: Windows<52>-Footnote-15171914
Ref: Windows<52>-Footnote-25171979
Ref: Windows<52>-Footnote-35172044
Ref: Windows<52>-Footnote-45172109
Ref: Windows<52>-Footnote-55172174
Ref: Windows<52>-Footnote-65172239
Ref: Windows<52>-Footnote-75172304
Ref: Windows<52>-Footnote-85172369
Ref: Windows<52>-Footnote-95172434
Ref: Windows<52>-Footnote-105172499
Ref: Windows<52>-Footnote-115172565
Ref: Windows<52>-Footnote-125172631
Ref: Windows<52>-Footnote-135172697
Ref: Windows<52>-Footnote-145172763
Ref: Windows<52>-Footnote-155172829
Ref: Windows<52>-Footnote-165172895
Ref: Windows<52>-Footnote-175172961
Ref: Windows<52>-Footnote-185173027
Ref: Windows<52>-Footnote-195173093
Ref: Windows<52>-Footnote-205173159
Ref: Windows<52>-Footnote-215173225
Ref: Windows<52>-Footnote-225173291
Ref: Windows<52>-Footnote-235173357
Ref: Windows<52>-Footnote-245173423
Ref: Windows<52>-Footnote-255173489
Ref: Windows<52>-Footnote-265173555
Ref: Windows<52>-Footnote-275173621
Ref: Windows<52>-Footnote-285173687
Ref: Windows<52>-Footnote-295173753
Ref: Windows<52>-Footnote-305173819
Ref: Windows<52>-Footnote-315173885
Ref: Windows<52>-Footnote-325173951
Ref: Windows<52>-Footnote-335174017
Ref: Windows<52>-Footnote-345174083
Ref: Windows<52>-Footnote-355174149
Ref: Windows<52>-Footnote-365174215
Ref: Windows<52>-Footnote-375174281
Ref: Windows<52>-Footnote-385174347
Ref: Windows<52>-Footnote-395174413
Ref: Windows<52>-Footnote-405174479
Node: macOS<41>5174544
Ref: whatsnew/changelog id6855174647
Ref: 1bc65174647
Ref: macOS<41>-Footnote-15176254
Ref: macOS<41>-Footnote-25176319
Ref: macOS<41>-Footnote-35176384
Ref: macOS<41>-Footnote-45176449
Ref: macOS<41>-Footnote-55176514
Ref: macOS<41>-Footnote-65176579
Ref: macOS<41>-Footnote-75176644
Ref: macOS<41>-Footnote-85176709
Ref: macOS<41>-Footnote-95176774
Ref: macOS<41>-Footnote-105176839
Node: IDLE<41>5176905
Ref: whatsnew/changelog id6865177018
Ref: 1bc75177018
Ref: IDLE<41>-Footnote-15185480
Ref: IDLE<41>-Footnote-25185545
Ref: IDLE<41>-Footnote-35185610
Ref: IDLE<41>-Footnote-45185675
Ref: IDLE<41>-Footnote-55185740
Ref: IDLE<41>-Footnote-65185805
Ref: IDLE<41>-Footnote-75185870
Ref: IDLE<41>-Footnote-85185935
Ref: IDLE<41>-Footnote-95186000
Ref: IDLE<41>-Footnote-105186065
Ref: IDLE<41>-Footnote-115186131
Ref: IDLE<41>-Footnote-125186197
Ref: IDLE<41>-Footnote-135186263
Ref: IDLE<41>-Footnote-145186329
Ref: IDLE<41>-Footnote-155186395
Ref: IDLE<41>-Footnote-165186461
Ref: IDLE<41>-Footnote-175186527
Ref: IDLE<41>-Footnote-185186593
Ref: IDLE<41>-Footnote-195186659
Ref: IDLE<41>-Footnote-205186725
Ref: IDLE<41>-Footnote-215186791
Ref: IDLE<41>-Footnote-225186857
Ref: IDLE<41>-Footnote-235186923
Ref: IDLE<41>-Footnote-245186989
Ref: IDLE<41>-Footnote-255187055
Ref: IDLE<41>-Footnote-265187121
Ref: IDLE<41>-Footnote-275187187
Ref: IDLE<41>-Footnote-285187255
Ref: IDLE<41>-Footnote-295187321
Ref: IDLE<41>-Footnote-305187387
Ref: IDLE<41>-Footnote-315187453
Ref: IDLE<41>-Footnote-325187519
Ref: IDLE<41>-Footnote-335187585
Ref: IDLE<41>-Footnote-345187651
Ref: IDLE<41>-Footnote-355187717
Ref: IDLE<41>-Footnote-365187783
Ref: IDLE<41>-Footnote-375187849
Ref: IDLE<41>-Footnote-385187915
Ref: IDLE<41>-Footnote-395187981
Ref: IDLE<41>-Footnote-405188047
Ref: IDLE<41>-Footnote-415188113
Ref: IDLE<41>-Footnote-425188179
Ref: IDLE<41>-Footnote-435188245
Ref: IDLE<41>-Footnote-445188311
Ref: IDLE<41>-Footnote-455188377
Ref: IDLE<41>-Footnote-465188443
Ref: IDLE<41>-Footnote-475188509
Ref: IDLE<41>-Footnote-485188575
Ref: IDLE<41>-Footnote-495188641
Ref: IDLE<41>-Footnote-505188707
Ref: IDLE<41>-Footnote-515188773
Ref: IDLE<41>-Footnote-525188839
Ref: IDLE<41>-Footnote-535188905
Ref: IDLE<41>-Footnote-545188971
Ref: IDLE<41>-Footnote-555189037
Ref: IDLE<41>-Footnote-565189103
Ref: IDLE<41>-Footnote-575189169
Ref: IDLE<41>-Footnote-585189235
Ref: IDLE<41>-Footnote-595189301
Node: Ferramentas/Demos<30>5189367
Ref: whatsnew/changelog id6875189480
Ref: 1bc85189480
Ref: Ferramentas/Demos<30>-Footnote-15191141
Ref: Ferramentas/Demos<30>-Footnote-25191206
Ref: Ferramentas/Demos<30>-Footnote-35191271
Ref: Ferramentas/Demos<30>-Footnote-45191336
Ref: Ferramentas/Demos<30>-Footnote-55191401
Ref: Ferramentas/Demos<30>-Footnote-65191466
Ref: Ferramentas/Demos<30>-Footnote-75191531
Ref: Ferramentas/Demos<30>-Footnote-85191596
Ref: Ferramentas/Demos<30>-Footnote-95191661
Ref: Ferramentas/Demos<30>-Footnote-105191726
Ref: Ferramentas/Demos<30>-Footnote-115191792
Ref: Ferramentas/Demos<30>-Footnote-125191858
Node: API C<55>5191924
Ref: whatsnew/changelog id6885192020
Ref: 1bc95192020
Ref: API C<55>-Footnote-15195453
Ref: API C<55>-Footnote-25195518
Ref: API C<55>-Footnote-35195583
Ref: API C<55>-Footnote-45195648
Ref: API C<55>-Footnote-55195713
Ref: API C<55>-Footnote-65195778
Ref: API C<55>-Footnote-75195843
Ref: API C<55>-Footnote-85195908
Ref: API C<55>-Footnote-95195973
Ref: API C<55>-Footnote-105196038
Ref: API C<55>-Footnote-115196104
Ref: API C<55>-Footnote-125196170
Ref: API C<55>-Footnote-135196236
Ref: API C<55>-Footnote-145196302
Ref: API C<55>-Footnote-155196368
Ref: API C<55>-Footnote-165196434
Ref: API C<55>-Footnote-175196500
Ref: API C<55>-Footnote-185196566
Ref: API C<55>-Footnote-195196632
Ref: API C<55>-Footnote-205196698
Ref: API C<55>-Footnote-215196764
Ref: API C<55>-Footnote-225196830
Node: Python 3 7 0 final5196896
Ref: whatsnew/changelog python-3-7-0-final5197030
Ref: 1bd25197030
Node: Biblioteca<138>5197181
Ref: whatsnew/changelog id6895197269
Ref: 1bd35197269
Ref: Biblioteca<138>-Footnote-15197445
Node: API C<56>5197510
Ref: whatsnew/changelog id6905197598
Ref: 1bd55197598
Ref: API C<56>-Footnote-15197809
Node: Python 3 7 0 release candidate 15197874
Ref: whatsnew/changelog python-3-7-0-release-candidate-15198007
Ref: 1bd65198007
Node: Núcleo e embutidos<136>5198329
Ref: whatsnew/changelog id6915198446
Ref: 1bd75198446
Ref: Núcleo e embutidos<136>-Footnote-15199093
Ref: Núcleo e embutidos<136>-Footnote-25199158
Ref: Núcleo e embutidos<136>-Footnote-35199223
Ref: Núcleo e embutidos<136>-Footnote-45199288
Node: Biblioteca<139>5199353
Ref: whatsnew/changelog id6925199497
Ref: 1bd85199497
Ref: Biblioteca<139>-Footnote-15201201
Ref: Biblioteca<139>-Footnote-25201266
Ref: Biblioteca<139>-Footnote-35201331
Ref: Biblioteca<139>-Footnote-45201396
Ref: Biblioteca<139>-Footnote-55201461
Ref: Biblioteca<139>-Footnote-65201526
Ref: Biblioteca<139>-Footnote-75201591
Ref: Biblioteca<139>-Footnote-85201656
Ref: Biblioteca<139>-Footnote-95201721
Ref: Biblioteca<139>-Footnote-105201786
Ref: Biblioteca<139>-Footnote-115201852
Ref: Biblioteca<139>-Footnote-125201918
Ref: Biblioteca<139>-Footnote-135201984
Node: Documentação<53>5202050
Ref: whatsnew/changelog id6935202186
Ref: 1bd95202186
Ref: Documentação<53>-Footnote-15202693
Ref: Documentação<53>-Footnote-25202758
Ref: Documentação<53>-Footnote-35202800
Ref: Documentação<53>-Footnote-45202865
Node: Construção<60>5202930
Ref: whatsnew/changelog id6945203062
Ref: 1bda5203062
Ref: Construção<60>-Footnote-15203336
Node: Windows<53>5203400
Ref: whatsnew/changelog id6955203522
Ref: 1bdb5203522
Ref: Windows<53>-Footnote-15203679
Node: IDLE<42>5203744
Ref: whatsnew/changelog id6965203841
Ref: 1bdc5203841
Ref: IDLE<42>-Footnote-15205061
Ref: IDLE<42>-Footnote-25205126
Ref: IDLE<42>-Footnote-35205191
Ref: IDLE<42>-Footnote-45205256
Ref: IDLE<42>-Footnote-55205321
Ref: IDLE<42>-Footnote-65205386
Node: Python 3 7 0 beta 55205451
Ref: whatsnew/changelog python-3-7-0-beta-55205585
Ref: 1bdd5205585
Node: Núcleo e embutidos<137>5205899
Ref: whatsnew/changelog id6975206003
Ref: 1bde5206003
Ref: Núcleo e embutidos<137>-Footnote-15207520
Ref: Núcleo e embutidos<137>-Footnote-25207585
Ref: Núcleo e embutidos<137>-Footnote-35207650
Ref: Núcleo e embutidos<137>-Footnote-45207715
Ref: Núcleo e embutidos<137>-Footnote-55207780
Ref: Núcleo e embutidos<137>-Footnote-65207845
Ref: Núcleo e embutidos<137>-Footnote-75207910
Ref: Núcleo e embutidos<137>-Footnote-85207975
Ref: Núcleo e embutidos<137>-Footnote-95208040
Node: Biblioteca<140>5208105
Ref: whatsnew/changelog id6985208236
Ref: 1bdf5208236
Ref: Biblioteca<140>-Footnote-15213872
Ref: Biblioteca<140>-Footnote-25213937
Ref: Biblioteca<140>-Footnote-35214002
Ref: Biblioteca<140>-Footnote-45214067
Ref: Biblioteca<140>-Footnote-55214132
Ref: Biblioteca<140>-Footnote-65214197
Ref: Biblioteca<140>-Footnote-75214262
Ref: Biblioteca<140>-Footnote-85214327
Ref: Biblioteca<140>-Footnote-95214392
Ref: Biblioteca<140>-Footnote-105214457
Ref: Biblioteca<140>-Footnote-115214523
Ref: Biblioteca<140>-Footnote-125214589
Ref: Biblioteca<140>-Footnote-135214655
Ref: Biblioteca<140>-Footnote-145214721
Ref: Biblioteca<140>-Footnote-155214787
Ref: Biblioteca<140>-Footnote-165214853
Ref: Biblioteca<140>-Footnote-175214919
Ref: Biblioteca<140>-Footnote-185214985
Ref: Biblioteca<140>-Footnote-195215051
Ref: Biblioteca<140>-Footnote-205215117
Ref: Biblioteca<140>-Footnote-215215183
Ref: Biblioteca<140>-Footnote-225215249
Ref: Biblioteca<140>-Footnote-235215315
Ref: Biblioteca<140>-Footnote-245215381
Ref: Biblioteca<140>-Footnote-255215447
Ref: Biblioteca<140>-Footnote-265215513
Ref: Biblioteca<140>-Footnote-275215579
Ref: Biblioteca<140>-Footnote-285215645
Ref: Biblioteca<140>-Footnote-295215711
Ref: Biblioteca<140>-Footnote-305215777
Ref: Biblioteca<140>-Footnote-315215843
Ref: Biblioteca<140>-Footnote-325215909
Ref: Biblioteca<140>-Footnote-335215975
Ref: Biblioteca<140>-Footnote-345216041
Ref: Biblioteca<140>-Footnote-355216107
Ref: Biblioteca<140>-Footnote-365216173
Ref: Biblioteca<140>-Footnote-375216239
Ref: Biblioteca<140>-Footnote-385216305
Node: Documentação<54>5216371
Ref: whatsnew/changelog id6995216488
Ref: 1be05216488
Ref: Documentação<54>-Footnote-15216958
Ref: Documentação<54>-Footnote-25217023
Ref: Documentação<54>-Footnote-35217088
Ref: Documentação<54>-Footnote-45217130
Ref: Documentação<54>-Footnote-55217195
Ref: Documentação<54>-Footnote-65217260
Node: Testes<56>5217325
Ref: whatsnew/changelog id7005217443
Ref: 1be15217443
Ref: Testes<56>-Footnote-15217794
Ref: Testes<56>-Footnote-25217859
Node: Construção<61>5217924
Ref: whatsnew/changelog id7015218033
Ref: 1be25218033
Ref: Construção<61>-Footnote-15218524
Ref: Construção<61>-Footnote-25218589
Ref: Construção<61>-Footnote-35218654
Node: macOS<42>5218719
Ref: whatsnew/changelog id7025218826
Ref: 1be35218826
Ref: macOS<42>-Footnote-15219068
Node: IDLE<43>5219133
Ref: whatsnew/changelog id7035219215
Ref: 1be45219215
Ref: IDLE<43>-Footnote-15219494
Ref: IDLE<43>-Footnote-25219559
Ref: IDLE<43>-Footnote-35219624
Node: Python 3 7 0 beta 45219689
Ref: whatsnew/changelog python-3-7-0-beta-45219810
Ref: 1be55219810
Node: Núcleo e embutidos<138>5220192
Ref: whatsnew/changelog id7045220296
Ref: 1be65220296
Ref: Núcleo e embutidos<138>-Footnote-15221433
Ref: Núcleo e embutidos<138>-Footnote-25221498
Ref: Núcleo e embutidos<138>-Footnote-35221563
Ref: Núcleo e embutidos<138>-Footnote-45221628
Ref: Núcleo e embutidos<138>-Footnote-55221693
Ref: Núcleo e embutidos<138>-Footnote-65221758
Ref: Núcleo e embutidos<138>-Footnote-75221823
Node: Biblioteca<141>5221888
Ref: whatsnew/changelog id7055222019
Ref: 1be75222019
Ref: Biblioteca<141>-Footnote-15224862
Ref: Biblioteca<141>-Footnote-25224927
Ref: Biblioteca<141>-Footnote-35224992
Ref: Biblioteca<141>-Footnote-45225057
Ref: Biblioteca<141>-Footnote-55225123
Ref: Biblioteca<141>-Footnote-65225188
Ref: Biblioteca<141>-Footnote-75225253
Ref: Biblioteca<141>-Footnote-85225318
Ref: Biblioteca<141>-Footnote-95225383
Ref: Biblioteca<141>-Footnote-105225448
Ref: Biblioteca<141>-Footnote-115225514
Ref: Biblioteca<141>-Footnote-125225580
Ref: Biblioteca<141>-Footnote-135225646
Ref: Biblioteca<141>-Footnote-145225712
Ref: Biblioteca<141>-Footnote-155225778
Ref: Biblioteca<141>-Footnote-165225844
Ref: Biblioteca<141>-Footnote-175225910
Ref: Biblioteca<141>-Footnote-185225953
Ref: Biblioteca<141>-Footnote-195226019
Ref: Biblioteca<141>-Footnote-205226085
Ref: Biblioteca<141>-Footnote-215226151
Ref: Biblioteca<141>-Footnote-225226217
Node: Documentação<55>5226283
Ref: whatsnew/changelog id7065226400
Ref: 1be85226400
Ref: Documentação<55>-Footnote-15227151
Ref: Documentação<55>-Footnote-25227216
Ref: Documentação<55>-Footnote-35227281
Ref: Documentação<55>-Footnote-45227346
Ref: Documentação<55>-Footnote-55227411
Ref: Documentação<55>-Footnote-65227475
Node: Testes<57>5227540
Ref: whatsnew/changelog id7075227658
Ref: 1be95227658
Ref: Testes<57>-Footnote-15227876
Node: Construção<62>5227941
Ref: whatsnew/changelog id7085228052
Ref: 1bea5228052
Ref: Construção<62>-Footnote-15228754
Ref: Construção<62>-Footnote-25228819
Ref: Construção<62>-Footnote-35228884
Ref: Construção<62>-Footnote-45228949
Ref: Construção<62>-Footnote-55229014
Node: Windows<54>5229079
Ref: whatsnew/changelog id7095229189
Ref: 1beb5229189
Ref: Windows<54>-Footnote-15229330
Node: macOS<43>5229395
Ref: whatsnew/changelog id7105229497
Ref: 1bec5229497
Ref: macOS<43>-Footnote-15229638
Node: IDLE<44>5229703
Ref: whatsnew/changelog id7115229815
Ref: 1bed5229815
Ref: IDLE<44>-Footnote-15230405
Ref: IDLE<44>-Footnote-25230470
Node: Ferramentas/Demos<31>5230535
Ref: whatsnew/changelog id7125230629
Ref: 1bee5230629
Ref: Ferramentas/Demos<31>-Footnote-15231249
Ref: Ferramentas/Demos<31>-Footnote-25231314
Ref: Ferramentas/Demos<31>-Footnote-35231379
Ref: Ferramentas/Demos<31>-Footnote-45231444
Node: Python 3 7 0 beta 35231509
Ref: whatsnew/changelog python-3-7-0-beta-35231630
Ref: 1bef5231630
Node: Segurança<43>5232062
Ref: whatsnew/changelog id7135232165
Ref: 1bf05232165
Ref: Segurança<43>-Footnote-15232800
Ref: Segurança<43>-Footnote-25232865
Ref: Segurança<43>-Footnote-35232920
Ref: Segurança<43>-Footnote-45232985
Ref: Segurança<43>-Footnote-55233050
Ref: Segurança<43>-Footnote-65233105
Node: Núcleo e embutidos<139>5233160
Ref: whatsnew/changelog id7145233287
Ref: 1bf15233287
Ref: Núcleo e embutidos<139>-Footnote-15234500
Ref: Núcleo e embutidos<139>-Footnote-25234565
Ref: Núcleo e embutidos<139>-Footnote-35234630
Ref: Núcleo e embutidos<139>-Footnote-45234695
Ref: Núcleo e embutidos<139>-Footnote-55234760
Ref: Núcleo e embutidos<139>-Footnote-65234825
Ref: Núcleo e embutidos<139>-Footnote-75234890
Node: Biblioteca<142>5234955
Ref: whatsnew/changelog id7155235086
Ref: 1bf25235086
Ref: Biblioteca<142>-Footnote-15239147
Ref: Biblioteca<142>-Footnote-25239212
Ref: Biblioteca<142>-Footnote-35239277
Ref: Biblioteca<142>-Footnote-45239342
Ref: Biblioteca<142>-Footnote-55239407
Ref: Biblioteca<142>-Footnote-65239472
Ref: Biblioteca<142>-Footnote-75239537
Ref: Biblioteca<142>-Footnote-85239602
Ref: Biblioteca<142>-Footnote-95239667
Ref: Biblioteca<142>-Footnote-105239732
Ref: Biblioteca<142>-Footnote-115239798
Ref: Biblioteca<142>-Footnote-125239864
Ref: Biblioteca<142>-Footnote-135239930
Ref: Biblioteca<142>-Footnote-145239996
Ref: Biblioteca<142>-Footnote-155240062
Ref: Biblioteca<142>-Footnote-165240128
Ref: Biblioteca<142>-Footnote-175240194
Ref: Biblioteca<142>-Footnote-185240260
Ref: Biblioteca<142>-Footnote-195240326
Ref: Biblioteca<142>-Footnote-205240392
Ref: Biblioteca<142>-Footnote-215240458
Ref: Biblioteca<142>-Footnote-225240524
Ref: Biblioteca<142>-Footnote-235240590
Ref: Biblioteca<142>-Footnote-245240656
Ref: Biblioteca<142>-Footnote-255240722
Ref: Biblioteca<142>-Footnote-265240788
Ref: Biblioteca<142>-Footnote-275240854
Node: Documentação<56>5240920
Ref: whatsnew/changelog id7165241037
Ref: 1bf35241037
Ref: Documentação<56>-Footnote-15241674
Ref: Documentação<56>-Footnote-25241739
Ref: Documentação<56>-Footnote-35241804
Ref: Documentação<56>-Footnote-45241869
Ref: Documentação<56>-Footnote-55241934
Node: Testes<58>5241999
Ref: whatsnew/changelog id7175242117
Ref: 1bf45242117
Ref: Testes<58>-Footnote-15242452
Ref: Testes<58>-Footnote-25242517
Ref: Testes<58>-Footnote-35242582
Node: Construção<63>5242647
Ref: whatsnew/changelog id7185242758
Ref: 1bf55242758
Ref: Construção<63>-Footnote-15242907
Node: Windows<55>5242972
Ref: whatsnew/changelog id7195243082
Ref: 1bf65243082
Ref: Windows<55>-Footnote-15243361
Ref: Windows<55>-Footnote-25243426
Node: macOS<44>5243491
Ref: whatsnew/changelog id7205243593
Ref: 1bf75243593
Ref: macOS<44>-Footnote-15244025
Node: IDLE<45>5244090
Ref: whatsnew/changelog id7215244202
Ref: 1bf85244202
Ref: IDLE<45>-Footnote-15244916
Ref: IDLE<45>-Footnote-25244981
Node: Ferramentas/Demos<32>5245046
Ref: whatsnew/changelog id7225245158
Ref: 1bf95245158
Ref: Ferramentas/Demos<32>-Footnote-15245400
Node: API C<57>5245465
Ref: whatsnew/changelog id7235245560
Ref: 1bfa5245560
Ref: API C<57>-Footnote-15245944
Ref: API C<57>-Footnote-25246009
Node: Python 3 7 0 beta 25246074
Ref: whatsnew/changelog python-3-7-0-beta-25246195
Ref: 1bfb5246195
Node: Segurança<44>5246607
Ref: whatsnew/changelog id7245246710
Ref: 1bfc5246710
Ref: Segurança<44>-Footnote-15246898
Node: Núcleo e embutidos<140>5246963
Ref: whatsnew/changelog id7255247090
Ref: 1bfd5247090
Ref: Núcleo e embutidos<140>-Footnote-15247924
Ref: Núcleo e embutidos<140>-Footnote-25247989
Ref: Núcleo e embutidos<140>-Footnote-35248054
Ref: Núcleo e embutidos<140>-Footnote-45248119
Ref: Núcleo e embutidos<140>-Footnote-55248184
Ref: Núcleo e embutidos<140>-Footnote-65248249
Ref: Núcleo e embutidos<140>-Footnote-75248314
Node: Biblioteca<143>5248379
Ref: whatsnew/changelog id7265248510
Ref: 1bfe5248510
Ref: Biblioteca<143>-Footnote-15254951
Ref: Biblioteca<143>-Footnote-25255016
Ref: Biblioteca<143>-Footnote-35255081
Ref: Biblioteca<143>-Footnote-45255146
Ref: Biblioteca<143>-Footnote-55255211
Ref: Biblioteca<143>-Footnote-65255276
Ref: Biblioteca<143>-Footnote-75255341
Ref: Biblioteca<143>-Footnote-85255406
Ref: Biblioteca<143>-Footnote-95255471
Ref: Biblioteca<143>-Footnote-105255536
Ref: Biblioteca<143>-Footnote-115255602
Ref: Biblioteca<143>-Footnote-125255668
Ref: Biblioteca<143>-Footnote-135255734
Ref: Biblioteca<143>-Footnote-145255800
Ref: Biblioteca<143>-Footnote-155255866
Ref: Biblioteca<143>-Footnote-165255932
Ref: Biblioteca<143>-Footnote-175255998
Ref: Biblioteca<143>-Footnote-185256064
Ref: Biblioteca<143>-Footnote-195256130
Ref: Biblioteca<143>-Footnote-205256196
Ref: Biblioteca<143>-Footnote-215256262
Ref: Biblioteca<143>-Footnote-225256328
Ref: Biblioteca<143>-Footnote-235256394
Ref: Biblioteca<143>-Footnote-245256460
Ref: Biblioteca<143>-Footnote-255256526
Ref: Biblioteca<143>-Footnote-265256592
Ref: Biblioteca<143>-Footnote-275256658
Ref: Biblioteca<143>-Footnote-285256724
Ref: Biblioteca<143>-Footnote-295256790
Ref: Biblioteca<143>-Footnote-305256856
Ref: Biblioteca<143>-Footnote-315256922
Ref: Biblioteca<143>-Footnote-325256988
Ref: Biblioteca<143>-Footnote-335257054
Ref: Biblioteca<143>-Footnote-345257120
Node: Documentação<57>5257186
Ref: whatsnew/changelog id7275257303
Ref: 1bff5257303
Ref: Documentação<57>-Footnote-15258254
Ref: Documentação<57>-Footnote-25258319
Ref: Documentação<57>-Footnote-35258384
Ref: Documentação<57>-Footnote-45258449
Ref: Documentação<57>-Footnote-55258514
Ref: Documentação<57>-Footnote-65258579
Ref: Documentação<57>-Footnote-75258643
Ref: Documentação<57>-Footnote-85258708
Node: Testes<59>5258773
Ref: whatsnew/changelog id7285258891
Ref: 1c005258891
Ref: Testes<59>-Footnote-15259036
Node: Construção<64>5259101
Ref: whatsnew/changelog id7295259212
Ref: 1c015259212
Ref: Construção<64>-Footnote-15259365
Node: Windows<56>5259430
Ref: whatsnew/changelog id7305259540
Ref: 1c025259540
Ref: Windows<56>-Footnote-15260276
Ref: Windows<56>-Footnote-25260341
Ref: Windows<56>-Footnote-35260406
Ref: Windows<56>-Footnote-45260471
Ref: Windows<56>-Footnote-55260536
Ref: Windows<56>-Footnote-65260601
Node: macOS<45>5260666
Ref: whatsnew/changelog id7315260768
Ref: 1c035260768
Ref: macOS<45>-Footnote-15260903
Node: IDLE<46>5260968
Ref: whatsnew/changelog id7325261080
Ref: 1c045261080
Ref: IDLE<46>-Footnote-15261927
Ref: IDLE<46>-Footnote-25261992
Ref: IDLE<46>-Footnote-35262057
Ref: IDLE<46>-Footnote-45262122
Ref: IDLE<46>-Footnote-55262187
Ref: IDLE<46>-Footnote-65262252
Node: Ferramentas/Demos<33>5262317
Ref: whatsnew/changelog id7335262411
Ref: 1c055262411
Ref: Ferramentas/Demos<33>-Footnote-15262642
Node: Python 3 7 0 beta 15262707
Ref: whatsnew/changelog python-3-7-0-beta-15262829
Ref: 1c065262829
Node: Núcleo e embutidos<141>5263169
Ref: whatsnew/changelog id7345263273
Ref: 1c075263273
Ref: Núcleo e embutidos<141>-Footnote-15266710
Ref: Núcleo e embutidos<141>-Footnote-25266775
Ref: Núcleo e embutidos<141>-Footnote-35266840
Ref: Núcleo e embutidos<141>-Footnote-45266905
Ref: Núcleo e embutidos<141>-Footnote-55266970
Ref: Núcleo e embutidos<141>-Footnote-65267035
Ref: Núcleo e embutidos<141>-Footnote-75267100
Ref: Núcleo e embutidos<141>-Footnote-85267165
Ref: Núcleo e embutidos<141>-Footnote-95267230
Ref: Núcleo e embutidos<141>-Footnote-105267272
Ref: Núcleo e embutidos<141>-Footnote-115267338
Ref: Núcleo e embutidos<141>-Footnote-125267404
Ref: Núcleo e embutidos<141>-Footnote-135267470
Ref: Núcleo e embutidos<141>-Footnote-145267536
Ref: Núcleo e embutidos<141>-Footnote-155267602
Ref: Núcleo e embutidos<141>-Footnote-165267668
Ref: Núcleo e embutidos<141>-Footnote-175267734
Ref: Núcleo e embutidos<141>-Footnote-185267800
Ref: Núcleo e embutidos<141>-Footnote-195267843
Ref: Núcleo e embutidos<141>-Footnote-205267909
Ref: Núcleo e embutidos<141>-Footnote-215267975
Ref: Núcleo e embutidos<141>-Footnote-225268041
Ref: Núcleo e embutidos<141>-Footnote-235268107
Node: Biblioteca<144>5268173
Ref: whatsnew/changelog id7355268304
Ref: 1c085268304
Ref: Biblioteca<144>-Footnote-15275692
Ref: Biblioteca<144>-Footnote-25275757
Ref: Biblioteca<144>-Footnote-35275822
Ref: Biblioteca<144>-Footnote-45275887
Ref: Biblioteca<144>-Footnote-55275952
Ref: Biblioteca<144>-Footnote-65276017
Ref: Biblioteca<144>-Footnote-75276082
Ref: Biblioteca<144>-Footnote-85276147
Ref: Biblioteca<144>-Footnote-95276212
Ref: Biblioteca<144>-Footnote-105276277
Ref: Biblioteca<144>-Footnote-115276343
Ref: Biblioteca<144>-Footnote-125276409
Ref: Biblioteca<144>-Footnote-135276475
Ref: Biblioteca<144>-Footnote-145276541
Ref: Biblioteca<144>-Footnote-155276607
Ref: Biblioteca<144>-Footnote-165276673
Ref: Biblioteca<144>-Footnote-175276739
Ref: Biblioteca<144>-Footnote-185276805
Ref: Biblioteca<144>-Footnote-195276848
Ref: Biblioteca<144>-Footnote-205276914
Ref: Biblioteca<144>-Footnote-215276980
Ref: Biblioteca<144>-Footnote-225277046
Ref: Biblioteca<144>-Footnote-235277112
Ref: Biblioteca<144>-Footnote-245277178
Ref: Biblioteca<144>-Footnote-255277244
Ref: Biblioteca<144>-Footnote-265277310
Ref: Biblioteca<144>-Footnote-275277376
Ref: Biblioteca<144>-Footnote-285277442
Ref: Biblioteca<144>-Footnote-295277508
Ref: Biblioteca<144>-Footnote-305277574
Ref: Biblioteca<144>-Footnote-315277640
Ref: Biblioteca<144>-Footnote-325277706
Ref: Biblioteca<144>-Footnote-335277772
Ref: Biblioteca<144>-Footnote-345277838
Ref: Biblioteca<144>-Footnote-355277904
Ref: Biblioteca<144>-Footnote-365277970
Ref: Biblioteca<144>-Footnote-375278036
Ref: Biblioteca<144>-Footnote-385278102
Ref: Biblioteca<144>-Footnote-395278168
Ref: Biblioteca<144>-Footnote-405278234
Ref: Biblioteca<144>-Footnote-415278300
Ref: Biblioteca<144>-Footnote-425278366
Ref: Biblioteca<144>-Footnote-435278432
Ref: Biblioteca<144>-Footnote-445278498
Ref: Biblioteca<144>-Footnote-455278564
Ref: Biblioteca<144>-Footnote-465278630
Ref: Biblioteca<144>-Footnote-475278696
Node: Documentação<58>5278762
Ref: whatsnew/changelog id7365278879
Ref: 1c095278879
Ref: Documentação<58>-Footnote-15279420
Ref: Documentação<58>-Footnote-25279485
Ref: Documentação<58>-Footnote-35279550
Node: Testes<60>5279615
Ref: whatsnew/changelog id7375279733
Ref: 1c0a5279733
Ref: Testes<60>-Footnote-15280647
Ref: Testes<60>-Footnote-25280712
Ref: Testes<60>-Footnote-35280777
Ref: Testes<60>-Footnote-45280842
Ref: Testes<60>-Footnote-55280907
Ref: Testes<60>-Footnote-65280972
Node: Construção<65>5281037
Ref: whatsnew/changelog id7385281148
Ref: 1c0b5281148
Ref: Construção<65>-Footnote-15281763
Ref: Construção<65>-Footnote-25281828
Ref: Construção<65>-Footnote-35281893
Ref: Construção<65>-Footnote-45281958
Node: Windows<57>5282023
Ref: whatsnew/changelog id7395282133
Ref: 1c0c5282133
Ref: Windows<57>-Footnote-15282514
Ref: Windows<57>-Footnote-25282579
Ref: Windows<57>-Footnote-35282644
Node: macOS<46>5282709
Ref: whatsnew/changelog id7405282812
Ref: 1c0d5282812
Ref: macOS<46>-Footnote-15283334
Ref: macOS<46>-Footnote-25283399
Node: API C<58>5283464
Ref: whatsnew/changelog id7415283547
Ref: 1c0e5283547
Ref: API C<58>-Footnote-15283868
Ref: API C<58>-Footnote-25283933
Node: Python 3 7 0 alpha 45283998
Ref: whatsnew/changelog python-3-7-0-alpha-45284121
Ref: 1c0f5284121
Node: Núcleo e embutidos<142>5284453
Ref: whatsnew/changelog id7425284558
Ref: 1c105284558
Ref: Núcleo e embutidos<142>-Footnote-15288068
Ref: Núcleo e embutidos<142>-Footnote-25288133
Ref: Núcleo e embutidos<142>-Footnote-35288198
Ref: Núcleo e embutidos<142>-Footnote-45288263
Ref: Núcleo e embutidos<142>-Footnote-55288328
Ref: Núcleo e embutidos<142>-Footnote-65288393
Ref: Núcleo e embutidos<142>-Footnote-75288458
Ref: Núcleo e embutidos<142>-Footnote-85288523
Ref: Núcleo e embutidos<142>-Footnote-95288588
Ref: Núcleo e embutidos<142>-Footnote-105288653
Ref: Núcleo e embutidos<142>-Footnote-115288719
Ref: Núcleo e embutidos<142>-Footnote-125288785
Ref: Núcleo e embutidos<142>-Footnote-135288851
Ref: Núcleo e embutidos<142>-Footnote-145288917
Ref: Núcleo e embutidos<142>-Footnote-155288983
Ref: Núcleo e embutidos<142>-Footnote-165289049
Ref: Núcleo e embutidos<142>-Footnote-175289115
Ref: Núcleo e embutidos<142>-Footnote-185289181
Ref: Núcleo e embutidos<142>-Footnote-195289247
Ref: Núcleo e embutidos<142>-Footnote-205289290
Ref: Núcleo e embutidos<142>-Footnote-215289356
Ref: Núcleo e embutidos<142>-Footnote-225289399
Ref: Núcleo e embutidos<142>-Footnote-235289465
Ref: Núcleo e embutidos<142>-Footnote-245289508
Ref: Núcleo e embutidos<142>-Footnote-255289574
Ref: Núcleo e embutidos<142>-Footnote-265289640
Ref: Núcleo e embutidos<142>-Footnote-275289683
Node: Biblioteca<145>5289749
Ref: whatsnew/changelog id7435289881
Ref: 1c125289881
Ref: Biblioteca<145>-Footnote-15297905
Ref: Biblioteca<145>-Footnote-25297970
Ref: Biblioteca<145>-Footnote-35298035
Ref: Biblioteca<145>-Footnote-45298100
Ref: Biblioteca<145>-Footnote-55298165
Ref: Biblioteca<145>-Footnote-65298230
Ref: Biblioteca<145>-Footnote-75298295
Ref: Biblioteca<145>-Footnote-85298360
Ref: Biblioteca<145>-Footnote-95298425
Ref: Biblioteca<145>-Footnote-105298490
Ref: Biblioteca<145>-Footnote-115298556
Ref: Biblioteca<145>-Footnote-125298622
Ref: Biblioteca<145>-Footnote-135298688
Ref: Biblioteca<145>-Footnote-145298754
Ref: Biblioteca<145>-Footnote-155298820
Ref: Biblioteca<145>-Footnote-165298886
Ref: Biblioteca<145>-Footnote-175298952
Ref: Biblioteca<145>-Footnote-185299018
Ref: Biblioteca<145>-Footnote-195299084
Ref: Biblioteca<145>-Footnote-205299150
Ref: Biblioteca<145>-Footnote-215299216
Ref: Biblioteca<145>-Footnote-225299282
Ref: Biblioteca<145>-Footnote-235299348
Ref: Biblioteca<145>-Footnote-245299414
Ref: Biblioteca<145>-Footnote-255299480
Ref: Biblioteca<145>-Footnote-265299546
Ref: Biblioteca<145>-Footnote-275299612
Ref: Biblioteca<145>-Footnote-285299678
Ref: Biblioteca<145>-Footnote-295299744
Ref: Biblioteca<145>-Footnote-305299810
Ref: Biblioteca<145>-Footnote-315299876
Ref: Biblioteca<145>-Footnote-325299942
Ref: Biblioteca<145>-Footnote-335300008
Ref: Biblioteca<145>-Footnote-345300074
Ref: Biblioteca<145>-Footnote-355300140
Ref: Biblioteca<145>-Footnote-365300206
Ref: Biblioteca<145>-Footnote-375300272
Ref: Biblioteca<145>-Footnote-385300338
Ref: Biblioteca<145>-Footnote-395300404
Ref: Biblioteca<145>-Footnote-405300470
Ref: Biblioteca<145>-Footnote-415300536
Ref: Biblioteca<145>-Footnote-425300602
Ref: Biblioteca<145>-Footnote-435300668
Ref: Biblioteca<145>-Footnote-445300734
Ref: Biblioteca<145>-Footnote-455300800
Ref: Biblioteca<145>-Footnote-465300866
Ref: Biblioteca<145>-Footnote-475300932
Ref: Biblioteca<145>-Footnote-485300998
Ref: Biblioteca<145>-Footnote-495301064
Ref: Biblioteca<145>-Footnote-505301130
Ref: Biblioteca<145>-Footnote-515301196
Ref: Biblioteca<145>-Footnote-525301262
Ref: Biblioteca<145>-Footnote-535301328
Ref: Biblioteca<145>-Footnote-545301394
Node: Documentação<59>5301460
Ref: whatsnew/changelog id7445301578
Ref: 1c135301578
Ref: Documentação<59>-Footnote-15301748
Node: Testes<61>5301813
Ref: whatsnew/changelog id7455301927
Ref: 1c145301927
Ref: Testes<61>-Footnote-15302324
Ref: Testes<61>-Footnote-25302389
Node: Windows<58>5302454
Ref: whatsnew/changelog id7465302571
Ref: 1c155302571
Ref: Windows<58>-Footnote-15302770
Node: Ferramentas/Demos<34>5302835
Ref: whatsnew/changelog id7475302951
Ref: 1c165302951
Ref: Ferramentas/Demos<34>-Footnote-15303245
Node: API C<59>5303310
Ref: whatsnew/changelog id7485303406
Ref: 1c175303406
Ref: API C<59>-Footnote-15304050
Ref: API C<59>-Footnote-25304115
Ref: API C<59>-Footnote-35304180
Ref: API C<59>-Footnote-45304245
Node: Python 3 7 0 alpha 35304310
Ref: whatsnew/changelog python-3-7-0-alpha-35304434
Ref: 1c185304434
Node: Núcleo e embutidos<143>5304838
Ref: whatsnew/changelog id7495304943
Ref: 1c195304943
Ref: Núcleo e embutidos<143>-Footnote-15310081
Ref: Núcleo e embutidos<143>-Footnote-25310146
Ref: Núcleo e embutidos<143>-Footnote-35310211
Ref: Núcleo e embutidos<143>-Footnote-45310276
Ref: Núcleo e embutidos<143>-Footnote-55310341
Ref: Núcleo e embutidos<143>-Footnote-65310406
Ref: Núcleo e embutidos<143>-Footnote-75310471
Ref: Núcleo e embutidos<143>-Footnote-85310536
Ref: Núcleo e embutidos<143>-Footnote-95310601
Ref: Núcleo e embutidos<143>-Footnote-105310666
Ref: Núcleo e embutidos<143>-Footnote-115310732
Ref: Núcleo e embutidos<143>-Footnote-125310798
Ref: Núcleo e embutidos<143>-Footnote-135310864
Ref: Núcleo e embutidos<143>-Footnote-145310930
Ref: Núcleo e embutidos<143>-Footnote-155310996
Ref: Núcleo e embutidos<143>-Footnote-165311062
Ref: Núcleo e embutidos<143>-Footnote-175311128
Ref: Núcleo e embutidos<143>-Footnote-185311194
Ref: Núcleo e embutidos<143>-Footnote-195311260
Ref: Núcleo e embutidos<143>-Footnote-205311326
Ref: Núcleo e embutidos<143>-Footnote-215311392
Ref: Núcleo e embutidos<143>-Footnote-225311458
Node: Biblioteca<146>5311524
Ref: whatsnew/changelog id7505311656
Ref: 1c1a5311656
Ref: Biblioteca<146>-Footnote-15327718
Ref: Biblioteca<146>-Footnote-25327783
Ref: Biblioteca<146>-Footnote-35327848
Ref: Biblioteca<146>-Footnote-45327913
Ref: Biblioteca<146>-Footnote-55327978
Ref: Biblioteca<146>-Footnote-65328043
Ref: Biblioteca<146>-Footnote-75328108
Ref: Biblioteca<146>-Footnote-85328173
Ref: Biblioteca<146>-Footnote-95328238
Ref: Biblioteca<146>-Footnote-105328303
Ref: Biblioteca<146>-Footnote-115328369
Ref: Biblioteca<146>-Footnote-125328435
Ref: Biblioteca<146>-Footnote-135328501
Ref: Biblioteca<146>-Footnote-145328567
Ref: Biblioteca<146>-Footnote-155328633
Ref: Biblioteca<146>-Footnote-165328699
Ref: Biblioteca<146>-Footnote-175328765
Ref: Biblioteca<146>-Footnote-185328831
Ref: Biblioteca<146>-Footnote-195328897
Ref: Biblioteca<146>-Footnote-205328963
Ref: Biblioteca<146>-Footnote-215329029
Ref: Biblioteca<146>-Footnote-225329095
Ref: Biblioteca<146>-Footnote-235329161
Ref: Biblioteca<146>-Footnote-245329227
Ref: Biblioteca<146>-Footnote-255329293
Ref: Biblioteca<146>-Footnote-265329361
Ref: Biblioteca<146>-Footnote-275329427
Ref: Biblioteca<146>-Footnote-285329493
Ref: Biblioteca<146>-Footnote-295329559
Ref: Biblioteca<146>-Footnote-305329625
Ref: Biblioteca<146>-Footnote-315329691
Ref: Biblioteca<146>-Footnote-325329757
Ref: Biblioteca<146>-Footnote-335329800
Ref: Biblioteca<146>-Footnote-345329866
Ref: Biblioteca<146>-Footnote-355329932
Ref: Biblioteca<146>-Footnote-365329998
Ref: Biblioteca<146>-Footnote-375330064
Ref: Biblioteca<146>-Footnote-385330130
Ref: Biblioteca<146>-Footnote-395330196
Ref: Biblioteca<146>-Footnote-405330262
Ref: Biblioteca<146>-Footnote-415330328
Ref: Biblioteca<146>-Footnote-425330394
Ref: Biblioteca<146>-Footnote-435330460
Ref: Biblioteca<146>-Footnote-445330526
Ref: Biblioteca<146>-Footnote-455330592
Ref: Biblioteca<146>-Footnote-465330658
Ref: Biblioteca<146>-Footnote-475330723
Ref: Biblioteca<146>-Footnote-485330789
Ref: Biblioteca<146>-Footnote-495330855
Ref: Biblioteca<146>-Footnote-505330921
Ref: Biblioteca<146>-Footnote-515330987
Ref: Biblioteca<146>-Footnote-525331053
Ref: Biblioteca<146>-Footnote-535331119
Ref: Biblioteca<146>-Footnote-545331185
Ref: Biblioteca<146>-Footnote-555331251
Ref: Biblioteca<146>-Footnote-565331317
Ref: Biblioteca<146>-Footnote-575331383
Ref: Biblioteca<146>-Footnote-585331449
Ref: Biblioteca<146>-Footnote-595331515
Ref: Biblioteca<146>-Footnote-605331581
Ref: Biblioteca<146>-Footnote-615331647
Ref: Biblioteca<146>-Footnote-625331713
Ref: Biblioteca<146>-Footnote-635331756
Ref: Biblioteca<146>-Footnote-645331822
Ref: Biblioteca<146>-Footnote-655331888
Ref: Biblioteca<146>-Footnote-665331954
Ref: Biblioteca<146>-Footnote-675332020
Ref: Biblioteca<146>-Footnote-685332086
Ref: Biblioteca<146>-Footnote-695332152
Ref: Biblioteca<146>-Footnote-705332218
Ref: Biblioteca<146>-Footnote-715332284
Ref: Biblioteca<146>-Footnote-725332350
Ref: Biblioteca<146>-Footnote-735332416
Ref: Biblioteca<146>-Footnote-745332482
Ref: Biblioteca<146>-Footnote-755332548
Ref: Biblioteca<146>-Footnote-765332614
Ref: Biblioteca<146>-Footnote-775332680
Ref: Biblioteca<146>-Footnote-785332746
Ref: Biblioteca<146>-Footnote-795332812
Ref: Biblioteca<146>-Footnote-805332878
Ref: Biblioteca<146>-Footnote-815332944
Ref: Biblioteca<146>-Footnote-825333010
Ref: Biblioteca<146>-Footnote-835333053
Ref: Biblioteca<146>-Footnote-845333119
Ref: Biblioteca<146>-Footnote-855333185
Ref: Biblioteca<146>-Footnote-865333251
Ref: Biblioteca<146>-Footnote-875333317
Ref: Biblioteca<146>-Footnote-885333383
Ref: Biblioteca<146>-Footnote-895333449
Ref: Biblioteca<146>-Footnote-905333515
Ref: Biblioteca<146>-Footnote-915333581
Ref: Biblioteca<146>-Footnote-925333647
Ref: Biblioteca<146>-Footnote-935333713
Ref: Biblioteca<146>-Footnote-945333779
Ref: Biblioteca<146>-Footnote-955333845
Ref: Biblioteca<146>-Footnote-965333911
Ref: Biblioteca<146>-Footnote-975333977
Ref: Biblioteca<146>-Footnote-985334043
Node: Documentação<60>5334109
Ref: whatsnew/changelog id7515334227
Ref: 1c1f5334227
Ref: Documentação<60>-Footnote-15334410
Node: Testes<62>5334475
Ref: whatsnew/changelog id7525334594
Ref: 1c205334594
Ref: Testes<62>-Footnote-15335806
Ref: Testes<62>-Footnote-25335871
Ref: Testes<62>-Footnote-35335936
Ref: Testes<62>-Footnote-45336001
Ref: Testes<62>-Footnote-55336066
Ref: Testes<62>-Footnote-65336131
Ref: Testes<62>-Footnote-75336196
Node: Construção<66>5336261
Ref: whatsnew/changelog id7535336373
Ref: 1c215336373
Ref: Construção<66>-Footnote-15337599
Ref: Construção<66>-Footnote-25337664
Ref: Construção<66>-Footnote-35337729
Ref: Construção<66>-Footnote-45337794
Ref: Construção<66>-Footnote-55337859
Ref: Construção<66>-Footnote-65337924
Ref: Construção<66>-Footnote-75337989
Ref: Construção<66>-Footnote-85338054
Ref: Construção<66>-Footnote-95338119
Ref: Construção<66>-Footnote-105338184
Ref: Construção<66>-Footnote-115338250
Ref: Construção<66>-Footnote-125338316
Node: Windows<59>5338382
Ref: whatsnew/changelog id7545338493
Ref: 1c225338493
Ref: Windows<59>-Footnote-15339026
Ref: Windows<59>-Footnote-25339090
Ref: Windows<59>-Footnote-35339155
Ref: Windows<59>-Footnote-45339220
Node: macOS<47>5339285
Ref: whatsnew/changelog id7555339388
Ref: 1c235339388
Ref: macOS<47>-Footnote-15339522
Node: IDLE<47>5339587
Ref: whatsnew/changelog id7565339700
Ref: 1c245339700
Ref: IDLE<47>-Footnote-15341793
Ref: IDLE<47>-Footnote-25341858
Ref: IDLE<47>-Footnote-35341923
Ref: IDLE<47>-Footnote-45341988
Ref: IDLE<47>-Footnote-55342053
Ref: IDLE<47>-Footnote-65342118
Ref: IDLE<47>-Footnote-75342183
Ref: IDLE<47>-Footnote-85342248
Node: Ferramentas/Demos<35>5342313
Ref: whatsnew/changelog id7575342426
Ref: 1c255342426
Ref: Ferramentas/Demos<35>-Footnote-15342970
Ref: Ferramentas/Demos<35>-Footnote-25343035
Node: API C<60>5343100
Ref: whatsnew/changelog id7585343196
Ref: 1c265343196
Ref: API C<60>-Footnote-15344324
Ref: API C<60>-Footnote-25344389
Ref: API C<60>-Footnote-35344454
Ref: API C<60>-Footnote-45344519
Ref: API C<60>-Footnote-55344584
Ref: API C<60>-Footnote-65344649
Node: Python 3 7 0 alpha 25344714
Ref: whatsnew/changelog python-3-7-0-alpha-25344838
Ref: 1c275344838
Node: Núcleo e embutidos<144>5345132
Ref: whatsnew/changelog id7595345237
Ref: 1c285345237
Ref: Núcleo e embutidos<144>-Footnote-15349433
Ref: Núcleo e embutidos<144>-Footnote-25349498
Ref: Núcleo e embutidos<144>-Footnote-35349563
Ref: Núcleo e embutidos<144>-Footnote-45349628
Ref: Núcleo e embutidos<144>-Footnote-55349693
Ref: Núcleo e embutidos<144>-Footnote-65349758
Ref: Núcleo e embutidos<144>-Footnote-75349823
Ref: Núcleo e embutidos<144>-Footnote-85349888
Ref: Núcleo e embutidos<144>-Footnote-95349953
Ref: Núcleo e embutidos<144>-Footnote-105350018
Ref: Núcleo e embutidos<144>-Footnote-115350084
Ref: Núcleo e embutidos<144>-Footnote-125350150
Ref: Núcleo e embutidos<144>-Footnote-135350216
Ref: Núcleo e embutidos<144>-Footnote-145350282
Ref: Núcleo e embutidos<144>-Footnote-155350348
Ref: Núcleo e embutidos<144>-Footnote-165350414
Ref: Núcleo e embutidos<144>-Footnote-175350480
Ref: Núcleo e embutidos<144>-Footnote-185350546
Ref: Núcleo e embutidos<144>-Footnote-195350612
Ref: Núcleo e embutidos<144>-Footnote-205350678
Ref: Núcleo e embutidos<144>-Footnote-215350721
Ref: Núcleo e embutidos<144>-Footnote-225350787
Ref: Núcleo e embutidos<144>-Footnote-235350853
Ref: Núcleo e embutidos<144>-Footnote-245350919
Ref: Núcleo e embutidos<144>-Footnote-255350985
Ref: Núcleo e embutidos<144>-Footnote-265351051
Ref: Núcleo e embutidos<144>-Footnote-275351117
Node: Biblioteca<147>5351160
Ref: whatsnew/changelog id7605351292
Ref: 1c295351292
Ref: Biblioteca<147>-Footnote-15355365
Ref: Biblioteca<147>-Footnote-25355430
Ref: Biblioteca<147>-Footnote-35355495
Ref: Biblioteca<147>-Footnote-45355560
Ref: Biblioteca<147>-Footnote-55355625
Ref: Biblioteca<147>-Footnote-65355690
Ref: Biblioteca<147>-Footnote-75355755
Ref: Biblioteca<147>-Footnote-85355820
Ref: Biblioteca<147>-Footnote-95355885
Ref: Biblioteca<147>-Footnote-105355950
Ref: Biblioteca<147>-Footnote-115356016
Ref: Biblioteca<147>-Footnote-125356082
Ref: Biblioteca<147>-Footnote-135356148
Ref: Biblioteca<147>-Footnote-145356214
Ref: Biblioteca<147>-Footnote-155356280
Ref: Biblioteca<147>-Footnote-165356346
Ref: Biblioteca<147>-Footnote-175356412
Ref: Biblioteca<147>-Footnote-185356478
Ref: Biblioteca<147>-Footnote-195356544
Ref: Biblioteca<147>-Footnote-205356610
Ref: Biblioteca<147>-Footnote-215356676
Ref: Biblioteca<147>-Footnote-225356742
Ref: Biblioteca<147>-Footnote-235356808
Ref: Biblioteca<147>-Footnote-245356874
Ref: Biblioteca<147>-Footnote-255356940
Ref: Biblioteca<147>-Footnote-265357006
Node: Documentação<61>5357072
Ref: whatsnew/changelog id7615357196
Ref: 1c2a5357196
Ref: Documentação<61>-Footnote-15357587
Ref: Documentação<61>-Footnote-25357652
Node: Construção<67>5357717
Ref: whatsnew/changelog id7625357834
Ref: 1c2b5357834
Ref: Construção<67>-Footnote-15358473
Ref: Construção<67>-Footnote-25358538
Ref: Construção<67>-Footnote-35358603
Ref: Construção<67>-Footnote-45358668
Ref: Construção<67>-Footnote-55358733
Ref: Construção<67>-Footnote-65358798
Node: IDLE<48>5358863
Ref: whatsnew/changelog id7635358971
Ref: 1c2c5358971
Ref: IDLE<48>-Footnote-15360277
Ref: IDLE<48>-Footnote-25360342
Ref: IDLE<48>-Footnote-35360407
Ref: IDLE<48>-Footnote-45360472
Ref: IDLE<48>-Footnote-55360537
Ref: IDLE<48>-Footnote-65360602
Node: API C<61>5360669
Ref: whatsnew/changelog id7645360752
Ref: 1c2d5360752
Ref: API C<61>-Footnote-15361476
Ref: API C<61>-Footnote-25361541
Ref: API C<61>-Footnote-35361606
Ref: API C<61>-Footnote-45361671
Node: Python 3 7 0 alpha 15361713
Ref: whatsnew/changelog python-3-7-0-alpha-15361835
Ref: 1c2e5361835
Node: Segurança<45>5362249
Ref: whatsnew/changelog id7655362353
Ref: 1c2f5362353
Ref: Segurança<45>-Footnote-15364010
Ref: Segurança<45>-Footnote-25364075
Ref: Segurança<45>-Footnote-35364140
Ref: Segurança<45>-Footnote-45364205
Ref: Segurança<45>-Footnote-55364270
Ref: Segurança<45>-Footnote-65364335
Ref: Segurança<45>-Footnote-75364390
Ref: Segurança<45>-Footnote-85364445
Ref: Segurança<45>-Footnote-95364500
Ref: Segurança<45>-Footnote-105364555
Ref: Segurança<45>-Footnote-115364611
Ref: Segurança<45>-Footnote-125364667
Ref: Segurança<45>-Footnote-135364733
Ref: Segurança<45>-Footnote-145364799
Ref: Segurança<45>-Footnote-155364855
Node: Núcleo e embutidos<145>5364911
Ref: whatsnew/changelog id7665365039
Ref: 1c305365039
Ref: Núcleo e embutidos<145>-Footnote-15385946
Ref: Núcleo e embutidos<145>-Footnote-25386011
Ref: Núcleo e embutidos<145>-Footnote-35386076
Ref: Núcleo e embutidos<145>-Footnote-45386141
Ref: Núcleo e embutidos<145>-Footnote-55386206
Ref: Núcleo e embutidos<145>-Footnote-65386271
Ref: Núcleo e embutidos<145>-Footnote-75386336
Ref: Núcleo e embutidos<145>-Footnote-85386401
Ref: Núcleo e embutidos<145>-Footnote-95386466
Ref: Núcleo e embutidos<145>-Footnote-105386531
Ref: Núcleo e embutidos<145>-Footnote-115386597
Ref: Núcleo e embutidos<145>-Footnote-125386663
Ref: Núcleo e embutidos<145>-Footnote-135386729
Ref: Núcleo e embutidos<145>-Footnote-145386795
Ref: Núcleo e embutidos<145>-Footnote-155386861
Ref: Núcleo e embutidos<145>-Footnote-165386927
Ref: Núcleo e embutidos<145>-Footnote-175386993
Ref: Núcleo e embutidos<145>-Footnote-185387059
Ref: Núcleo e embutidos<145>-Footnote-195387125
Ref: Núcleo e embutidos<145>-Footnote-205387191
Ref: Núcleo e embutidos<145>-Footnote-215387257
Ref: Núcleo e embutidos<145>-Footnote-225387323
Ref: Núcleo e embutidos<145>-Footnote-235387389
Ref: Núcleo e embutidos<145>-Footnote-245387455
Ref: Núcleo e embutidos<145>-Footnote-255387521
Ref: Núcleo e embutidos<145>-Footnote-265387587
Ref: Núcleo e embutidos<145>-Footnote-275387653
Ref: Núcleo e embutidos<145>-Footnote-285387719
Ref: Núcleo e embutidos<145>-Footnote-295387785
Ref: Núcleo e embutidos<145>-Footnote-305387851
Ref: Núcleo e embutidos<145>-Footnote-315387917
Ref: Núcleo e embutidos<145>-Footnote-325387983
Ref: Núcleo e embutidos<145>-Footnote-335388049
Ref: Núcleo e embutidos<145>-Footnote-345388115
Ref: Núcleo e embutidos<145>-Footnote-355388181
Ref: Núcleo e embutidos<145>-Footnote-365388224
Ref: Núcleo e embutidos<145>-Footnote-375388290
Ref: Núcleo e embutidos<145>-Footnote-385388356
Ref: Núcleo e embutidos<145>-Footnote-395388422
Ref: Núcleo e embutidos<145>-Footnote-405388488
Ref: Núcleo e embutidos<145>-Footnote-415388554
Ref: Núcleo e embutidos<145>-Footnote-425388620
Ref: Núcleo e embutidos<145>-Footnote-435388686
Ref: Núcleo e embutidos<145>-Footnote-445388752
Ref: Núcleo e embutidos<145>-Footnote-455388818
Ref: Núcleo e embutidos<145>-Footnote-465388884
Ref: Núcleo e embutidos<145>-Footnote-475388950
Ref: Núcleo e embutidos<145>-Footnote-485389016
Ref: Núcleo e embutidos<145>-Footnote-495389082
Ref: Núcleo e embutidos<145>-Footnote-505389148
Ref: Núcleo e embutidos<145>-Footnote-515389214
Ref: Núcleo e embutidos<145>-Footnote-525389280
Ref: Núcleo e embutidos<145>-Footnote-535389346
Ref: Núcleo e embutidos<145>-Footnote-545389412
Ref: Núcleo e embutidos<145>-Footnote-555389478
Ref: Núcleo e embutidos<145>-Footnote-565389544
Ref: Núcleo e embutidos<145>-Footnote-575389610
Ref: Núcleo e embutidos<145>-Footnote-585389676
Ref: Núcleo e embutidos<145>-Footnote-595389742
Ref: Núcleo e embutidos<145>-Footnote-605389808
Ref: Núcleo e embutidos<145>-Footnote-615389874
Ref: Núcleo e embutidos<145>-Footnote-625389940
Ref: Núcleo e embutidos<145>-Footnote-635390006
Ref: Núcleo e embutidos<145>-Footnote-645390072
Ref: Núcleo e embutidos<145>-Footnote-655390138
Ref: Núcleo e embutidos<145>-Footnote-665390204
Ref: Núcleo e embutidos<145>-Footnote-675390270
Ref: Núcleo e embutidos<145>-Footnote-685390336
Ref: Núcleo e embutidos<145>-Footnote-695390402
Ref: Núcleo e embutidos<145>-Footnote-705390468
Ref: Núcleo e embutidos<145>-Footnote-715390534
Ref: Núcleo e embutidos<145>-Footnote-725390600
Ref: Núcleo e embutidos<145>-Footnote-735390666
Ref: Núcleo e embutidos<145>-Footnote-745390732
Ref: Núcleo e embutidos<145>-Footnote-755390798
Ref: Núcleo e embutidos<145>-Footnote-765390864
Ref: Núcleo e embutidos<145>-Footnote-775390930
Ref: Núcleo e embutidos<145>-Footnote-785390996
Ref: Núcleo e embutidos<145>-Footnote-795391062
Ref: Núcleo e embutidos<145>-Footnote-805391128
Ref: Núcleo e embutidos<145>-Footnote-815391194
Ref: Núcleo e embutidos<145>-Footnote-825391260
Ref: Núcleo e embutidos<145>-Footnote-835391326
Ref: Núcleo e embutidos<145>-Footnote-845391392
Ref: Núcleo e embutidos<145>-Footnote-855391458
Ref: Núcleo e embutidos<145>-Footnote-865391524
Ref: Núcleo e embutidos<145>-Footnote-875391590
Ref: Núcleo e embutidos<145>-Footnote-885391656
Ref: Núcleo e embutidos<145>-Footnote-895391722
Ref: Núcleo e embutidos<145>-Footnote-905391788
Ref: Núcleo e embutidos<145>-Footnote-915391831
Ref: Núcleo e embutidos<145>-Footnote-925391897
Ref: Núcleo e embutidos<145>-Footnote-935391963
Ref: Núcleo e embutidos<145>-Footnote-945392029
Ref: Núcleo e embutidos<145>-Footnote-955392095
Ref: Núcleo e embutidos<145>-Footnote-965392161
Ref: Núcleo e embutidos<145>-Footnote-975392227
Ref: Núcleo e embutidos<145>-Footnote-985392293
Ref: Núcleo e embutidos<145>-Footnote-995392359
Ref: Núcleo e embutidos<145>-Footnote-1005392425
Ref: Núcleo e embutidos<145>-Footnote-1015392492
Ref: Núcleo e embutidos<145>-Footnote-1025392559
Ref: Núcleo e embutidos<145>-Footnote-1035392626
Ref: Núcleo e embutidos<145>-Footnote-1045392693
Ref: Núcleo e embutidos<145>-Footnote-1055392760
Ref: Núcleo e embutidos<145>-Footnote-1065392827
Ref: Núcleo e embutidos<145>-Footnote-1075392894
Ref: Núcleo e embutidos<145>-Footnote-1085392961
Ref: Núcleo e embutidos<145>-Footnote-1095393028
Ref: Núcleo e embutidos<145>-Footnote-1105393095
Ref: Núcleo e embutidos<145>-Footnote-1115393162
Ref: Núcleo e embutidos<145>-Footnote-1125393229
Ref: Núcleo e embutidos<145>-Footnote-1135393296
Ref: Núcleo e embutidos<145>-Footnote-1145393363
Ref: Núcleo e embutidos<145>-Footnote-1155393430
Ref: Núcleo e embutidos<145>-Footnote-1165393497
Ref: Núcleo e embutidos<145>-Footnote-1175393564
Ref: Núcleo e embutidos<145>-Footnote-1185393631
Ref: Núcleo e embutidos<145>-Footnote-1195393698
Ref: Núcleo e embutidos<145>-Footnote-1205393765
Ref: Núcleo e embutidos<145>-Footnote-1215393832
Ref: Núcleo e embutidos<145>-Footnote-1225393899
Ref: Núcleo e embutidos<145>-Footnote-1235393966
Ref: Núcleo e embutidos<145>-Footnote-1245394033
Ref: Núcleo e embutidos<145>-Footnote-1255394100
Ref: Núcleo e embutidos<145>-Footnote-1265394167
Ref: Núcleo e embutidos<145>-Footnote-1275394234
Ref: Núcleo e embutidos<145>-Footnote-1285394301
Ref: Núcleo e embutidos<145>-Footnote-1295394368
Ref: Núcleo e embutidos<145>-Footnote-1305394435
Ref: Núcleo e embutidos<145>-Footnote-1315394502
Ref: Núcleo e embutidos<145>-Footnote-1325394569
Ref: Núcleo e embutidos<145>-Footnote-1335394636
Ref: Núcleo e embutidos<145>-Footnote-1345394703
Ref: Núcleo e embutidos<145>-Footnote-1355394770
Ref: Núcleo e embutidos<145>-Footnote-1365394837
Ref: Núcleo e embutidos<145>-Footnote-1375394904
Ref: Núcleo e embutidos<145>-Footnote-1385394971
Ref: Núcleo e embutidos<145>-Footnote-1395395038
Ref: Núcleo e embutidos<145>-Footnote-1405395105
Ref: Núcleo e embutidos<145>-Footnote-1415395172
Ref: Núcleo e embutidos<145>-Footnote-1425395239
Ref: Núcleo e embutidos<145>-Footnote-1435395306
Ref: Núcleo e embutidos<145>-Footnote-1445395373
Ref: Núcleo e embutidos<145>-Footnote-1455395440
Ref: Núcleo e embutidos<145>-Footnote-1465395507
Ref: Núcleo e embutidos<145>-Footnote-1475395574
Ref: Núcleo e embutidos<145>-Footnote-1485395641
Node: Biblioteca<148>5395708
Ref: whatsnew/changelog id7675395840
Ref: 1c315395840
Ref: Biblioteca<148>-Footnote-15442502
Ref: Biblioteca<148>-Footnote-25442567
Ref: Biblioteca<148>-Footnote-35442632
Ref: Biblioteca<148>-Footnote-45442697
Ref: Biblioteca<148>-Footnote-55442762
Ref: Biblioteca<148>-Footnote-65442827
Ref: Biblioteca<148>-Footnote-75442892
Ref: Biblioteca<148>-Footnote-85442957
Ref: Biblioteca<148>-Footnote-95443022
Ref: Biblioteca<148>-Footnote-105443087
Ref: Biblioteca<148>-Footnote-115443153
Ref: Biblioteca<148>-Footnote-125443219
Ref: Biblioteca<148>-Footnote-135443285
Ref: Biblioteca<148>-Footnote-145443351
Ref: Biblioteca<148>-Footnote-155443417
Ref: Biblioteca<148>-Footnote-165443483
Ref: Biblioteca<148>-Footnote-175443549
Ref: Biblioteca<148>-Footnote-185443615
Ref: Biblioteca<148>-Footnote-195443681
Ref: Biblioteca<148>-Footnote-205443747
Ref: Biblioteca<148>-Footnote-215443813
Ref: Biblioteca<148>-Footnote-225443881
Ref: Biblioteca<148>-Footnote-235443947
Ref: Biblioteca<148>-Footnote-245444013
Ref: Biblioteca<148>-Footnote-255444079
Ref: Biblioteca<148>-Footnote-265444145
Ref: Biblioteca<148>-Footnote-275444188
Ref: Biblioteca<148>-Footnote-285444254
Ref: Biblioteca<148>-Footnote-295444320
Ref: Biblioteca<148>-Footnote-305444386
Ref: Biblioteca<148>-Footnote-315444452
Ref: Biblioteca<148>-Footnote-325444518
Ref: Biblioteca<148>-Footnote-335444584
Ref: Biblioteca<148>-Footnote-345444650
Ref: Biblioteca<148>-Footnote-355444715
Ref: Biblioteca<148>-Footnote-365444781
Ref: Biblioteca<148>-Footnote-375444847
Ref: Biblioteca<148>-Footnote-385444913
Ref: Biblioteca<148>-Footnote-395444979
Ref: Biblioteca<148>-Footnote-405445044
Ref: Biblioteca<148>-Footnote-415445110
Ref: Biblioteca<148>-Footnote-425445176
Ref: Biblioteca<148>-Footnote-435445242
Ref: Biblioteca<148>-Footnote-445445308
Ref: Biblioteca<148>-Footnote-455445374
Ref: Biblioteca<148>-Footnote-465445440
Ref: Biblioteca<148>-Footnote-475445506
Ref: Biblioteca<148>-Footnote-485445572
Ref: Biblioteca<148>-Footnote-495445638
Ref: Biblioteca<148>-Footnote-505445704
Ref: Biblioteca<148>-Footnote-515445770
Ref: Biblioteca<148>-Footnote-525445836
Ref: Biblioteca<148>-Footnote-535445901
Ref: Biblioteca<148>-Footnote-545445967
Ref: Biblioteca<148>-Footnote-555446033
Ref: Biblioteca<148>-Footnote-565446099
Ref: Biblioteca<148>-Footnote-575446165
Ref: Biblioteca<148>-Footnote-585446231
Ref: Biblioteca<148>-Footnote-595446297
Ref: Biblioteca<148>-Footnote-605446363
Ref: Biblioteca<148>-Footnote-615446429
Ref: Biblioteca<148>-Footnote-625446495
Ref: Biblioteca<148>-Footnote-635446561
Ref: Biblioteca<148>-Footnote-645446627
Ref: Biblioteca<148>-Footnote-655446693
Ref: Biblioteca<148>-Footnote-665446759
Ref: Biblioteca<148>-Footnote-675446825
Ref: Biblioteca<148>-Footnote-685446891
Ref: Biblioteca<148>-Footnote-695446957
Ref: Biblioteca<148>-Footnote-705447023
Ref: Biblioteca<148>-Footnote-715447089
Ref: Biblioteca<148>-Footnote-725447155
Ref: Biblioteca<148>-Footnote-735447220
Ref: Biblioteca<148>-Footnote-745447286
Ref: Biblioteca<148>-Footnote-755447352
Ref: Biblioteca<148>-Footnote-765447418
Ref: Biblioteca<148>-Footnote-775447484
Ref: Biblioteca<148>-Footnote-785447550
Ref: Biblioteca<148>-Footnote-795447616
Ref: Biblioteca<148>-Footnote-805447682
Ref: Biblioteca<148>-Footnote-815447748
Ref: Biblioteca<148>-Footnote-825447814
Ref: Biblioteca<148>-Footnote-835447880
Ref: Biblioteca<148>-Footnote-845447946
Ref: Biblioteca<148>-Footnote-855448012
Ref: Biblioteca<148>-Footnote-865448078
Ref: Biblioteca<148>-Footnote-875448144
Ref: Biblioteca<148>-Footnote-885448210
Ref: Biblioteca<148>-Footnote-895448276
Ref: Biblioteca<148>-Footnote-905448342
Ref: Biblioteca<148>-Footnote-915448408
Ref: Biblioteca<148>-Footnote-925448474
Ref: Biblioteca<148>-Footnote-935448540
Ref: Biblioteca<148>-Footnote-945448606
Ref: Biblioteca<148>-Footnote-955448672
Ref: Biblioteca<148>-Footnote-965448738
Ref: Biblioteca<148>-Footnote-975448804
Ref: Biblioteca<148>-Footnote-985448870
Ref: Biblioteca<148>-Footnote-995448936
Ref: Biblioteca<148>-Footnote-1005449002
Ref: Biblioteca<148>-Footnote-1015449069
Ref: Biblioteca<148>-Footnote-1025449136
Ref: Biblioteca<148>-Footnote-1035449203
Ref: Biblioteca<148>-Footnote-1045449270
Ref: Biblioteca<148>-Footnote-1055449337
Ref: Biblioteca<148>-Footnote-1065449404
Ref: Biblioteca<148>-Footnote-1075449471
Ref: Biblioteca<148>-Footnote-1085449538
Ref: Biblioteca<148>-Footnote-1095449605
Ref: Biblioteca<148>-Footnote-1105449672
Ref: Biblioteca<148>-Footnote-1115449739
Ref: Biblioteca<148>-Footnote-1125449806
Ref: Biblioteca<148>-Footnote-1135449873
Ref: Biblioteca<148>-Footnote-1145449940
Ref: Biblioteca<148>-Footnote-1155450007
Ref: Biblioteca<148>-Footnote-1165450074
Ref: Biblioteca<148>-Footnote-1175450140
Ref: Biblioteca<148>-Footnote-1185450207
Ref: Biblioteca<148>-Footnote-1195450274
Ref: Biblioteca<148>-Footnote-1205450341
Ref: Biblioteca<148>-Footnote-1215450408
Ref: Biblioteca<148>-Footnote-1225450475
Ref: Biblioteca<148>-Footnote-1235450542
Ref: Biblioteca<148>-Footnote-1245450609
Ref: Biblioteca<148>-Footnote-1255450676
Ref: Biblioteca<148>-Footnote-1265450743
Ref: Biblioteca<148>-Footnote-1275450810
Ref: Biblioteca<148>-Footnote-1285450877
Ref: Biblioteca<148>-Footnote-1295450944
Ref: Biblioteca<148>-Footnote-1305451011
Ref: Biblioteca<148>-Footnote-1315451078
Ref: Biblioteca<148>-Footnote-1325451145
Ref: Biblioteca<148>-Footnote-1335451212
Ref: Biblioteca<148>-Footnote-1345451279
Ref: Biblioteca<148>-Footnote-1355451346
Ref: Biblioteca<148>-Footnote-1365451413
Ref: Biblioteca<148>-Footnote-1375451480
Ref: Biblioteca<148>-Footnote-1385451547
Ref: Biblioteca<148>-Footnote-1395451614
Ref: Biblioteca<148>-Footnote-1405451681
Ref: Biblioteca<148>-Footnote-1415451748
Ref: Biblioteca<148>-Footnote-1425451815
Ref: Biblioteca<148>-Footnote-1435451882
Ref: Biblioteca<148>-Footnote-1445451949
Ref: Biblioteca<148>-Footnote-1455452016
Ref: Biblioteca<148>-Footnote-1465452083
Ref: Biblioteca<148>-Footnote-1475452149
Ref: Biblioteca<148>-Footnote-1485452216
Ref: Biblioteca<148>-Footnote-1495452283
Ref: Biblioteca<148>-Footnote-1505452350
Ref: Biblioteca<148>-Footnote-1515452417
Ref: Biblioteca<148>-Footnote-1525452484
Ref: Biblioteca<148>-Footnote-1535452551
Ref: Biblioteca<148>-Footnote-1545452618
Ref: Biblioteca<148>-Footnote-1555452685
Ref: Biblioteca<148>-Footnote-1565452752
Ref: Biblioteca<148>-Footnote-1575452819
Ref: Biblioteca<148>-Footnote-1585452886
Ref: Biblioteca<148>-Footnote-1595452953
Ref: Biblioteca<148>-Footnote-1605453020
Ref: Biblioteca<148>-Footnote-1615453087
Ref: Biblioteca<148>-Footnote-1625453154
Ref: Biblioteca<148>-Footnote-1635453221
Ref: Biblioteca<148>-Footnote-1645453288
Ref: Biblioteca<148>-Footnote-1655453355
Ref: Biblioteca<148>-Footnote-1665453422
Ref: Biblioteca<148>-Footnote-1675453489
Ref: Biblioteca<148>-Footnote-1685453556
Ref: Biblioteca<148>-Footnote-1695453623
Ref: Biblioteca<148>-Footnote-1705453689
Ref: Biblioteca<148>-Footnote-1715453756
Ref: Biblioteca<148>-Footnote-1725453823
Ref: Biblioteca<148>-Footnote-1735453890
Ref: Biblioteca<148>-Footnote-1745453957
Ref: Biblioteca<148>-Footnote-1755454024
Ref: Biblioteca<148>-Footnote-1765454091
Ref: Biblioteca<148>-Footnote-1775454158
Ref: Biblioteca<148>-Footnote-1785454225
Ref: Biblioteca<148>-Footnote-1795454292
Ref: Biblioteca<148>-Footnote-1805454359
Ref: Biblioteca<148>-Footnote-1815454425
Ref: Biblioteca<148>-Footnote-1825454492
Ref: Biblioteca<148>-Footnote-1835454559
Ref: Biblioteca<148>-Footnote-1845454626
Ref: Biblioteca<148>-Footnote-1855454693
Ref: Biblioteca<148>-Footnote-1865454760
Ref: Biblioteca<148>-Footnote-1875454826
Ref: Biblioteca<148>-Footnote-1885454893
Ref: Biblioteca<148>-Footnote-1895454960
Ref: Biblioteca<148>-Footnote-1905455027
Ref: Biblioteca<148>-Footnote-1915455094
Ref: Biblioteca<148>-Footnote-1925455161
Ref: Biblioteca<148>-Footnote-1935455228
Ref: Biblioteca<148>-Footnote-1945455295
Ref: Biblioteca<148>-Footnote-1955455362
Ref: Biblioteca<148>-Footnote-1965455429
Ref: Biblioteca<148>-Footnote-1975455496
Ref: Biblioteca<148>-Footnote-1985455563
Ref: Biblioteca<148>-Footnote-1995455630
Ref: Biblioteca<148>-Footnote-2005455697
Ref: Biblioteca<148>-Footnote-2015455764
Ref: Biblioteca<148>-Footnote-2025455831
Ref: Biblioteca<148>-Footnote-2035455898
Ref: Biblioteca<148>-Footnote-2045455965
Ref: Biblioteca<148>-Footnote-2055456032
Ref: Biblioteca<148>-Footnote-2065456099
Ref: Biblioteca<148>-Footnote-2075456166
Ref: Biblioteca<148>-Footnote-2085456233
Ref: Biblioteca<148>-Footnote-2095456300
Ref: Biblioteca<148>-Footnote-2105456367
Ref: Biblioteca<148>-Footnote-2115456434
Ref: Biblioteca<148>-Footnote-2125456501
Ref: Biblioteca<148>-Footnote-2135456568
Ref: Biblioteca<148>-Footnote-2145456635
Ref: Biblioteca<148>-Footnote-2155456702
Ref: Biblioteca<148>-Footnote-2165456769
Ref: Biblioteca<148>-Footnote-2175456836
Ref: Biblioteca<148>-Footnote-2185456903
Ref: Biblioteca<148>-Footnote-2195456970
Ref: Biblioteca<148>-Footnote-2205457037
Ref: Biblioteca<148>-Footnote-2215457104
Ref: Biblioteca<148>-Footnote-2225457171
Ref: Biblioteca<148>-Footnote-2235457238
Ref: Biblioteca<148>-Footnote-2245457305
Ref: Biblioteca<148>-Footnote-2255457371
Ref: Biblioteca<148>-Footnote-2265457438
Ref: Biblioteca<148>-Footnote-2275457505
Ref: Biblioteca<148>-Footnote-2285457572
Ref: Biblioteca<148>-Footnote-2295457639
Ref: Biblioteca<148>-Footnote-2305457706
Ref: Biblioteca<148>-Footnote-2315457773
Ref: Biblioteca<148>-Footnote-2325457840
Ref: Biblioteca<148>-Footnote-2335457907
Ref: Biblioteca<148>-Footnote-2345457974
Ref: Biblioteca<148>-Footnote-2355458041
Ref: Biblioteca<148>-Footnote-2365458108
Ref: Biblioteca<148>-Footnote-2375458175
Ref: Biblioteca<148>-Footnote-2385458242
Ref: Biblioteca<148>-Footnote-2395458309
Ref: Biblioteca<148>-Footnote-2405458376
Ref: Biblioteca<148>-Footnote-2415458443
Ref: Biblioteca<148>-Footnote-2425458510
Ref: Biblioteca<148>-Footnote-2435458577
Ref: Biblioteca<148>-Footnote-2445458644
Ref: Biblioteca<148>-Footnote-2455458711
Ref: Biblioteca<148>-Footnote-2465458778
Ref: Biblioteca<148>-Footnote-2475458845
Ref: Biblioteca<148>-Footnote-2485458912
Ref: Biblioteca<148>-Footnote-2495458979
Ref: Biblioteca<148>-Footnote-2505459046
Ref: Biblioteca<148>-Footnote-2515459113
Ref: Biblioteca<148>-Footnote-2525459180
Ref: Biblioteca<148>-Footnote-2535459247
Ref: Biblioteca<148>-Footnote-2545459314
Ref: Biblioteca<148>-Footnote-2555459381
Ref: Biblioteca<148>-Footnote-2565459448
Ref: Biblioteca<148>-Footnote-2575459515
Ref: Biblioteca<148>-Footnote-2585459582
Ref: Biblioteca<148>-Footnote-2595459649
Ref: Biblioteca<148>-Footnote-2605459716
Ref: Biblioteca<148>-Footnote-2615459783
Ref: Biblioteca<148>-Footnote-2625459850
Ref: Biblioteca<148>-Footnote-2635459917
Ref: Biblioteca<148>-Footnote-2645459984
Ref: Biblioteca<148>-Footnote-2655460051
Ref: Biblioteca<148>-Footnote-2665460118
Ref: Biblioteca<148>-Footnote-2675460185
Ref: Biblioteca<148>-Footnote-2685460252
Ref: Biblioteca<148>-Footnote-2695460319
Ref: Biblioteca<148>-Footnote-2705460386
Ref: Biblioteca<148>-Footnote-2715460453
Ref: Biblioteca<148>-Footnote-2725460520
Ref: Biblioteca<148>-Footnote-2735460576
Ref: Biblioteca<148>-Footnote-2745460643
Ref: Biblioteca<148>-Footnote-2755460710
Ref: Biblioteca<148>-Footnote-2765460777
Ref: Biblioteca<148>-Footnote-2775460844
Ref: Biblioteca<148>-Footnote-2785460911
Ref: Biblioteca<148>-Footnote-2795460978
Ref: Biblioteca<148>-Footnote-2805461045
Ref: Biblioteca<148>-Footnote-2815461112
Ref: Biblioteca<148>-Footnote-2825461179
Ref: Biblioteca<148>-Footnote-2835461246
Ref: Biblioteca<148>-Footnote-2845461313
Ref: Biblioteca<148>-Footnote-2855461380
Ref: Biblioteca<148>-Footnote-2865461447
Ref: Biblioteca<148>-Footnote-2875461514
Ref: Biblioteca<148>-Footnote-2885461581
Ref: Biblioteca<148>-Footnote-2895461648
Ref: Biblioteca<148>-Footnote-2905461715
Ref: Biblioteca<148>-Footnote-2915461782
Ref: Biblioteca<148>-Footnote-2925461849
Ref: Biblioteca<148>-Footnote-2935461916
Ref: Biblioteca<148>-Footnote-2945461983
Ref: Biblioteca<148>-Footnote-2955462050
Ref: Biblioteca<148>-Footnote-2965462117
Ref: Biblioteca<148>-Footnote-2975462184
Ref: Biblioteca<148>-Footnote-2985462251
Ref: Biblioteca<148>-Footnote-2995462318
Ref: Biblioteca<148>-Footnote-3005462385
Ref: Biblioteca<148>-Footnote-3015462452
Ref: Biblioteca<148>-Footnote-3025462519
Ref: Biblioteca<148>-Footnote-3035462586
Ref: Biblioteca<148>-Footnote-3045462653
Ref: Biblioteca<148>-Footnote-3055462720
Ref: Biblioteca<148>-Footnote-3065462787
Ref: Biblioteca<148>-Footnote-3075462854
Ref: Biblioteca<148>-Footnote-3085462921
Ref: Biblioteca<148>-Footnote-3095462988
Ref: Biblioteca<148>-Footnote-3105463055
Ref: Biblioteca<148>-Footnote-3115463122
Ref: Biblioteca<148>-Footnote-3125463189
Ref: Biblioteca<148>-Footnote-3135463256
Ref: Biblioteca<148>-Footnote-3145463323
Ref: Biblioteca<148>-Footnote-3155463390
Ref: Biblioteca<148>-Footnote-3165463457
Ref: Biblioteca<148>-Footnote-3175463524
Ref: Biblioteca<148>-Footnote-3185463591
Ref: Biblioteca<148>-Footnote-3195463658
Ref: Biblioteca<148>-Footnote-3205463725
Ref: Biblioteca<148>-Footnote-3215463792
Ref: Biblioteca<148>-Footnote-3225463859
Ref: Biblioteca<148>-Footnote-3235463926
Ref: Biblioteca<148>-Footnote-3245463993
Ref: Biblioteca<148>-Footnote-3255464060
Ref: Biblioteca<148>-Footnote-3265464127
Node: Documentação<62>5464194
Ref: whatsnew/changelog id7685464312
Ref: 1c325464312
Ref: Documentação<62>-Footnote-15466478
Ref: Documentação<62>-Footnote-25466543
Ref: Documentação<62>-Footnote-35466608
Ref: Documentação<62>-Footnote-45466673
Ref: Documentação<62>-Footnote-55466738
Ref: Documentação<62>-Footnote-65466803
Ref: Documentação<62>-Footnote-75466868
Ref: Documentação<62>-Footnote-85466933
Ref: Documentação<62>-Footnote-95466998
Ref: Documentação<62>-Footnote-105467063
Ref: Documentação<62>-Footnote-115467129
Ref: Documentação<62>-Footnote-125467195
Ref: Documentação<62>-Footnote-135467261
Ref: Documentação<62>-Footnote-145467327
Ref: Documentação<62>-Footnote-155467393
Ref: Documentação<62>-Footnote-165467459
Ref: Documentação<62>-Footnote-175467502
Node: Testes<63>5467568
Ref: whatsnew/changelog id7695467687
Ref: 1c355467687
Ref: Testes<63>-Footnote-15470453
Ref: Testes<63>-Footnote-25470518
Ref: Testes<63>-Footnote-35470583
Ref: Testes<63>-Footnote-45470648
Ref: Testes<63>-Footnote-55470713
Ref: Testes<63>-Footnote-65470778
Ref: Testes<63>-Footnote-75470843
Ref: Testes<63>-Footnote-85470908
Ref: Testes<63>-Footnote-95470973
Ref: Testes<63>-Footnote-105471038
Ref: Testes<63>-Footnote-115471104
Ref: Testes<63>-Footnote-125471170
Ref: Testes<63>-Footnote-135471236
Ref: Testes<63>-Footnote-145471302
Ref: Testes<63>-Footnote-155471368
Ref: Testes<63>-Footnote-165471434
Ref: Testes<63>-Footnote-175471500
Ref: Testes<63>-Footnote-185471566
Ref: Testes<63>-Footnote-195471632
Node: Construção<68>5471698
Ref: whatsnew/changelog id7705471810
Ref: 1c365471810
Ref: Construção<68>-Footnote-15476591
Ref: Construção<68>-Footnote-25476656
Ref: Construção<68>-Footnote-35476721
Ref: Construção<68>-Footnote-45476786
Ref: Construção<68>-Footnote-55476828
Ref: Construção<68>-Footnote-65476893
Ref: Construção<68>-Footnote-75476958
Ref: Construção<68>-Footnote-85477023
Ref: Construção<68>-Footnote-95477088
Ref: Construção<68>-Footnote-105477153
Ref: Construção<68>-Footnote-115477219
Ref: Construção<68>-Footnote-125477285
Ref: Construção<68>-Footnote-135477351
Ref: Construção<68>-Footnote-145477417
Ref: Construção<68>-Footnote-155477483
Ref: Construção<68>-Footnote-165477549
Ref: Construção<68>-Footnote-175477615
Ref: Construção<68>-Footnote-185477681
Ref: Construção<68>-Footnote-195477747
Ref: Construção<68>-Footnote-205477813
Ref: Construção<68>-Footnote-215477879
Ref: Construção<68>-Footnote-225477945
Ref: Construção<68>-Footnote-235478011
Ref: Construção<68>-Footnote-245478077
Ref: Construção<68>-Footnote-255478143
Ref: Construção<68>-Footnote-265478209
Ref: Construção<68>-Footnote-275478275
Ref: Construção<68>-Footnote-285478341
Ref: Construção<68>-Footnote-295478407
Ref: Construção<68>-Footnote-305478473
Ref: Construção<68>-Footnote-315478539
Ref: Construção<68>-Footnote-325478605
Ref: Construção<68>-Footnote-335478671
Ref: Construção<68>-Footnote-345478737
Ref: Construção<68>-Footnote-355478803
Ref: Construção<68>-Footnote-365478869
Ref: Construção<68>-Footnote-375478935
Node: Windows<60>5479001
Ref: whatsnew/changelog id7715479111
Ref: 1c375479111
Ref: Windows<60>-Footnote-15481597
Ref: Windows<60>-Footnote-25481662
Ref: Windows<60>-Footnote-35481727
Ref: Windows<60>-Footnote-45481792
Ref: Windows<60>-Footnote-55481857
Ref: Windows<60>-Footnote-65481922
Ref: Windows<60>-Footnote-75481987
Ref: Windows<60>-Footnote-85482052
Ref: Windows<60>-Footnote-95482117
Ref: Windows<60>-Footnote-105482182
Ref: Windows<60>-Footnote-115482248
Ref: Windows<60>-Footnote-125482314
Ref: Windows<60>-Footnote-135482380
Ref: Windows<60>-Footnote-145482446
Ref: Windows<60>-Footnote-155482512
Ref: Windows<60>-Footnote-165482578
Ref: Windows<60>-Footnote-175482644
Ref: Windows<60>-Footnote-185482710
Ref: Windows<60>-Footnote-195482776
Ref: Windows<60>-Footnote-205482842
Ref: Windows<60>-Footnote-215482908
Ref: Windows<60>-Footnote-225482974
Ref: Windows<60>-Footnote-235483040
Ref: Windows<60>-Footnote-245483106
Ref: Windows<60>-Footnote-255483172
Node: IDLE<49>5483238
Ref: whatsnew/changelog id7725483353
Ref: 1c385483353
Ref: IDLE<49>-Footnote-15493354
Ref: IDLE<49>-Footnote-25493419
Ref: IDLE<49>-Footnote-35493484
Ref: IDLE<49>-Footnote-45493549
Ref: IDLE<49>-Footnote-55493614
Ref: IDLE<49>-Footnote-65493679
Ref: IDLE<49>-Footnote-75493744
Ref: IDLE<49>-Footnote-85493809
Ref: IDLE<49>-Footnote-95493874
Ref: IDLE<49>-Footnote-105493939
Ref: IDLE<49>-Footnote-115494005
Ref: IDLE<49>-Footnote-125494071
Ref: IDLE<49>-Footnote-135494137
Ref: IDLE<49>-Footnote-145494203
Ref: IDLE<49>-Footnote-155494269
Ref: IDLE<49>-Footnote-165494335
Ref: IDLE<49>-Footnote-175494401
Ref: IDLE<49>-Footnote-185494467
Ref: IDLE<49>-Footnote-195494533
Ref: IDLE<49>-Footnote-205494599
Ref: IDLE<49>-Footnote-215494665
Ref: IDLE<49>-Footnote-225494731
Ref: IDLE<49>-Footnote-235494797
Ref: IDLE<49>-Footnote-245494863
Ref: IDLE<49>-Footnote-255494929
Ref: IDLE<49>-Footnote-265494995
Ref: IDLE<49>-Footnote-275495061
Ref: IDLE<49>-Footnote-285495127
Ref: IDLE<49>-Footnote-295495193
Ref: IDLE<49>-Footnote-305495259
Ref: IDLE<49>-Footnote-315495325
Ref: IDLE<49>-Footnote-325495391
Ref: IDLE<49>-Footnote-335495457
Ref: IDLE<49>-Footnote-345495523
Ref: IDLE<49>-Footnote-355495588
Ref: IDLE<49>-Footnote-365495654
Ref: IDLE<49>-Footnote-375495720
Ref: IDLE<49>-Footnote-385495786
Ref: IDLE<49>-Footnote-395495852
Ref: IDLE<49>-Footnote-405495918
Ref: IDLE<49>-Footnote-415495984
Ref: IDLE<49>-Footnote-425496050
Ref: IDLE<49>-Footnote-435496116
Ref: IDLE<49>-Footnote-445496181
Ref: IDLE<49>-Footnote-455496247
Ref: IDLE<49>-Footnote-465496313
Ref: IDLE<49>-Footnote-475496379
Ref: IDLE<49>-Footnote-485496445
Ref: IDLE<49>-Footnote-495496511
Ref: IDLE<49>-Footnote-505496577
Ref: IDLE<49>-Footnote-515496643
Node: Ferramentas/Demos<36>5496709
Ref: whatsnew/changelog id7735496822
Ref: 1c395496822
Ref: Ferramentas/Demos<36>-Footnote-15498322
Ref: Ferramentas/Demos<36>-Footnote-25498387
Ref: Ferramentas/Demos<36>-Footnote-35498429
Ref: Ferramentas/Demos<36>-Footnote-45498494
Ref: Ferramentas/Demos<36>-Footnote-55498559
Ref: Ferramentas/Demos<36>-Footnote-65498624
Ref: Ferramentas/Demos<36>-Footnote-75498689
Ref: Ferramentas/Demos<36>-Footnote-85498754
Node: API C<62>5498819
Ref: whatsnew/changelog id7745498915
Ref: 1c3a5498915
Ref: API C<62>-Footnote-15501979
Ref: API C<62>-Footnote-25502044
Ref: API C<62>-Footnote-35502109
Ref: API C<62>-Footnote-45502174
Ref: API C<62>-Footnote-55502239
Ref: API C<62>-Footnote-65502303
Ref: API C<62>-Footnote-75502368
Ref: API C<62>-Footnote-85502433
Ref: API C<62>-Footnote-95502498
Ref: API C<62>-Footnote-105502563
Ref: API C<62>-Footnote-115502629
Ref: API C<62>-Footnote-125502695
Ref: API C<62>-Footnote-135502761
Ref: API C<62>-Footnote-145502827
Ref: API C<62>-Footnote-155502893
Node: Python 3 6 6 final5502959
Ref: whatsnew/changelog python-3-6-6-final5503093
Ref: 1c3b5503093
Node: Python 3 6 6 release candidate 15503228
Ref: whatsnew/changelog python-3-6-6-release-candidate-15503360
Ref: 1c3c5503360
Node: Núcleo e embutidos<146>5503788
Ref: whatsnew/changelog id7755503905
Ref: 1c3d5503905
Ref: Núcleo e embutidos<146>-Footnote-15505490
Ref: Núcleo e embutidos<146>-Footnote-25505555
Ref: Núcleo e embutidos<146>-Footnote-35505620
Ref: Núcleo e embutidos<146>-Footnote-45505685
Ref: Núcleo e embutidos<146>-Footnote-55505750
Ref: Núcleo e embutidos<146>-Footnote-65505815
Ref: Núcleo e embutidos<146>-Footnote-75505880
Ref: Núcleo e embutidos<146>-Footnote-85505945
Ref: Núcleo e embutidos<146>-Footnote-95506010
Ref: Núcleo e embutidos<146>-Footnote-105506075
Ref: Núcleo e embutidos<146>-Footnote-115506141
Ref: Núcleo e embutidos<146>-Footnote-125506207
Node: Biblioteca<149>5506273
Ref: whatsnew/changelog id7765506417
Ref: 1c3e5506417
Ref: Biblioteca<149>-Footnote-15511904
Ref: Biblioteca<149>-Footnote-25511969
Ref: Biblioteca<149>-Footnote-35512034
Ref: Biblioteca<149>-Footnote-45512099
Ref: Biblioteca<149>-Footnote-55512164
Ref: Biblioteca<149>-Footnote-65512229
Ref: Biblioteca<149>-Footnote-75512294
Ref: Biblioteca<149>-Footnote-85512359
Ref: Biblioteca<149>-Footnote-95512424
Ref: Biblioteca<149>-Footnote-105512489
Ref: Biblioteca<149>-Footnote-115512555
Ref: Biblioteca<149>-Footnote-125512621
Ref: Biblioteca<149>-Footnote-135512687
Ref: Biblioteca<149>-Footnote-145512753
Ref: Biblioteca<149>-Footnote-155512819
Ref: Biblioteca<149>-Footnote-165512885
Ref: Biblioteca<149>-Footnote-175512951
Ref: Biblioteca<149>-Footnote-185513017
Ref: Biblioteca<149>-Footnote-195513083
Ref: Biblioteca<149>-Footnote-205513149
Ref: Biblioteca<149>-Footnote-215513215
Ref: Biblioteca<149>-Footnote-225513282
Ref: Biblioteca<149>-Footnote-235513348
Ref: Biblioteca<149>-Footnote-245513414
Ref: Biblioteca<149>-Footnote-255513480
Ref: Biblioteca<149>-Footnote-265513546
Ref: Biblioteca<149>-Footnote-275513612
Ref: Biblioteca<149>-Footnote-285513678
Ref: Biblioteca<149>-Footnote-295513721
Ref: Biblioteca<149>-Footnote-305513787
Ref: Biblioteca<149>-Footnote-315513853
Ref: Biblioteca<149>-Footnote-325513919
Ref: Biblioteca<149>-Footnote-335513985
Ref: Biblioteca<149>-Footnote-345514051
Ref: Biblioteca<149>-Footnote-355514117
Ref: Biblioteca<149>-Footnote-365514183
Ref: Biblioteca<149>-Footnote-375514249
Ref: Biblioteca<149>-Footnote-385514315
Ref: Biblioteca<149>-Footnote-395514381
Node: Documentação<63>5514447
Ref: whatsnew/changelog id7775514577
Ref: 1c3f5514577
Ref: Documentação<63>-Footnote-15516068
Ref: Documentação<63>-Footnote-25516133
Ref: Documentação<63>-Footnote-35516198
Ref: Documentação<63>-Footnote-45516263
Ref: Documentação<63>-Footnote-55516328
Ref: Documentação<63>-Footnote-65516393
Ref: Documentação<63>-Footnote-75516458
Ref: Documentação<63>-Footnote-85516523
Ref: Documentação<63>-Footnote-95516588
Ref: Documentação<63>-Footnote-105516653
Ref: Documentação<63>-Footnote-115516719
Ref: Documentação<63>-Footnote-125516785
Ref: Documentação<63>-Footnote-135516850
Node: Testes<64>5516916
Ref: whatsnew/changelog id7785517047
Ref: 1c405517047
Ref: Testes<64>-Footnote-15517271
Ref: Testes<64>-Footnote-25517336
Node: Construção<69>5517401
Ref: whatsnew/changelog id7795517525
Ref: 1c415517525
Ref: Construção<69>-Footnote-15518334
Ref: Construção<69>-Footnote-25518398
Ref: Construção<69>-Footnote-35518463
Ref: Construção<69>-Footnote-45518528
Ref: Construção<69>-Footnote-55518593
Node: Windows<61>5518658
Ref: whatsnew/changelog id7805518781
Ref: 1c425518781
Ref: Windows<61>-Footnote-15518918
Node: macOS<48>5518983
Ref: whatsnew/changelog id7815519098
Ref: 1c435519098
Ref: macOS<48>-Footnote-15519239
Node: IDLE<50>5519304
Ref: whatsnew/changelog id7825519429
Ref: 1c445519429
Ref: IDLE<50>-Footnote-15521498
Ref: IDLE<50>-Footnote-25521563
Ref: IDLE<50>-Footnote-35521628
Ref: IDLE<50>-Footnote-45521693
Ref: IDLE<50>-Footnote-55521758
Ref: IDLE<50>-Footnote-65521823
Ref: IDLE<50>-Footnote-75521888
Ref: IDLE<50>-Footnote-85521953
Ref: IDLE<50>-Footnote-95522018
Ref: IDLE<50>-Footnote-105522083
Ref: IDLE<50>-Footnote-115522149
Ref: IDLE<50>-Footnote-125522215
Node: Ferramentas/Demos<37>5522281
Ref: whatsnew/changelog id7835522406
Ref: 1c455522406
Ref: Ferramentas/Demos<37>-Footnote-15523173
Ref: Ferramentas/Demos<37>-Footnote-25523238
Ref: Ferramentas/Demos<37>-Footnote-35523303
Ref: Ferramentas/Demos<37>-Footnote-45523368
Ref: Ferramentas/Demos<37>-Footnote-55523433
Node: API C<63>5523498
Ref: whatsnew/changelog id7845523606
Ref: 1c465523606
Ref: API C<63>-Footnote-15523819
Node: Python 3 6 5 final5523884
Ref: whatsnew/changelog python-3-6-5-final5524030
Ref: 1c475524030
Node: Testes<65>5524186
Ref: whatsnew/changelog id7855524276
Ref: 1c485524276
Ref: Testes<65>-Footnote-15524432
Node: Construção<70>5524497
Ref: whatsnew/changelog id7865524587
Ref: 1c495524587
Ref: Construção<70>-Footnote-15524736
Node: Python 3 6 5 release candidate 15524801
Ref: whatsnew/changelog python-3-6-5-release-candidate-15524933
Ref: 1c4a5524933
Node: Segurança<46>5525391
Ref: whatsnew/changelog id7875525507
Ref: 1c4b5525507
Ref: Segurança<46>-Footnote-15525941
Ref: Segurança<46>-Footnote-25526006
Ref: Segurança<46>-Footnote-35526071
Ref: Segurança<46>-Footnote-45526126
Node: Núcleo e embutidos<147>5526181
Ref: whatsnew/changelog id7885526321
Ref: 1c4c5526321
Ref: Núcleo e embutidos<147>-Footnote-15528498
Ref: Núcleo e embutidos<147>-Footnote-25528563
Ref: Núcleo e embutidos<147>-Footnote-35528628
Ref: Núcleo e embutidos<147>-Footnote-45528693
Ref: Núcleo e embutidos<147>-Footnote-55528758
Ref: Núcleo e embutidos<147>-Footnote-65528823
Ref: Núcleo e embutidos<147>-Footnote-75528888
Ref: Núcleo e embutidos<147>-Footnote-85528953
Ref: Núcleo e embutidos<147>-Footnote-95529018
Ref: Núcleo e embutidos<147>-Footnote-105529083
Ref: Núcleo e embutidos<147>-Footnote-115529149
Ref: Núcleo e embutidos<147>-Footnote-125529215
Ref: Núcleo e embutidos<147>-Footnote-135529281
Ref: Núcleo e embutidos<147>-Footnote-145529347
Node: Biblioteca<150>5529413
Ref: whatsnew/changelog id7895529557
Ref: 1c4d5529557
Ref: Biblioteca<150>-Footnote-15535494
Ref: Biblioteca<150>-Footnote-25535559
Ref: Biblioteca<150>-Footnote-35535624
Ref: Biblioteca<150>-Footnote-45535689
Ref: Biblioteca<150>-Footnote-55535754
Ref: Biblioteca<150>-Footnote-65535819
Ref: Biblioteca<150>-Footnote-75535884
Ref: Biblioteca<150>-Footnote-85535949
Ref: Biblioteca<150>-Footnote-95536014
Ref: Biblioteca<150>-Footnote-105536079
Ref: Biblioteca<150>-Footnote-115536145
Ref: Biblioteca<150>-Footnote-125536211
Ref: Biblioteca<150>-Footnote-135536277
Ref: Biblioteca<150>-Footnote-145536343
Ref: Biblioteca<150>-Footnote-155536409
Ref: Biblioteca<150>-Footnote-165536475
Ref: Biblioteca<150>-Footnote-175536541
Ref: Biblioteca<150>-Footnote-185536607
Ref: Biblioteca<150>-Footnote-195536673
Ref: Biblioteca<150>-Footnote-205536739
Ref: Biblioteca<150>-Footnote-215536805
Ref: Biblioteca<150>-Footnote-225536871
Ref: Biblioteca<150>-Footnote-235536937
Ref: Biblioteca<150>-Footnote-245537003
Ref: Biblioteca<150>-Footnote-255537069
Ref: Biblioteca<150>-Footnote-265537135
Ref: Biblioteca<150>-Footnote-275537201
Ref: Biblioteca<150>-Footnote-285537267
Ref: Biblioteca<150>-Footnote-295537333
Ref: Biblioteca<150>-Footnote-305537399
Ref: Biblioteca<150>-Footnote-315537465
Ref: Biblioteca<150>-Footnote-325537531
Ref: Biblioteca<150>-Footnote-335537597
Ref: Biblioteca<150>-Footnote-345537663
Ref: Biblioteca<150>-Footnote-355537729
Ref: Biblioteca<150>-Footnote-365537795
Ref: Biblioteca<150>-Footnote-375537861
Ref: Biblioteca<150>-Footnote-385537927
Ref: Biblioteca<150>-Footnote-395537993
Ref: Biblioteca<150>-Footnote-405538059
Node: Documentação<64>5538125
Ref: whatsnew/changelog id7905538255
Ref: 1c4e5538255
Ref: Documentação<64>-Footnote-15539091
Ref: Documentação<64>-Footnote-25539156
Ref: Documentação<64>-Footnote-35539221
Ref: Documentação<64>-Footnote-45539285
Ref: Documentação<64>-Footnote-55539350
Ref: Documentação<64>-Footnote-65539415
Node: Testes<66>5539480
Ref: whatsnew/changelog id7915539611
Ref: 1c4f5539611
Ref: Testes<66>-Footnote-15540274
Ref: Testes<66>-Footnote-25540339
Ref: Testes<66>-Footnote-35540404
Ref: Testes<66>-Footnote-45540469
Node: Construção<71>5540534
Ref: whatsnew/changelog id7925540658
Ref: 1c505540658
Ref: Construção<71>-Footnote-15540859
Node: Windows<62>5540924
Ref: whatsnew/changelog id7935541047
Ref: 1c515541047
Ref: Windows<62>-Footnote-15541997
Ref: Windows<62>-Footnote-25542062
Ref: Windows<62>-Footnote-35542127
Ref: Windows<62>-Footnote-45542192
Ref: Windows<62>-Footnote-55542257
Ref: Windows<62>-Footnote-65542322
Ref: Windows<62>-Footnote-75542387
Ref: Windows<62>-Footnote-85542452
Node: macOS<49>5542517
Ref: whatsnew/changelog id7945542632
Ref: 1c525542632
Ref: macOS<49>-Footnote-15543025
Node: IDLE<51>5543090
Ref: whatsnew/changelog id7955543215
Ref: 1c535543215
Ref: IDLE<51>-Footnote-15544709
Ref: IDLE<51>-Footnote-25544774
Ref: IDLE<51>-Footnote-35544839
Ref: IDLE<51>-Footnote-45544904
Ref: IDLE<51>-Footnote-55544969
Ref: IDLE<51>-Footnote-65545034
Ref: IDLE<51>-Footnote-75545099
Ref: IDLE<51>-Footnote-85545164
Node: Ferramentas/Demos<38>5545229
Ref: whatsnew/changelog id7965545354
Ref: 1c545545354
Ref: Ferramentas/Demos<38>-Footnote-15545786
Ref: Ferramentas/Demos<38>-Footnote-25545851
Node: API C<64>5545916
Ref: whatsnew/changelog id7975546024
Ref: 1c555546024
Ref: API C<64>-Footnote-15546274
Node: Python 3 6 4 final5546339
Ref: whatsnew/changelog python-3-6-4-final5546485
Ref: 1c565546485
Node: Python 3 6 4 release candidate 15546641
Ref: whatsnew/changelog python-3-6-4-release-candidate-15546773
Ref: 1c575546773
Node: Núcleo e embutidos<148>5547201
Ref: whatsnew/changelog id7985547318
Ref: 1c585547318
Ref: Núcleo e embutidos<148>-Footnote-15552053
Ref: Núcleo e embutidos<148>-Footnote-25552118
Ref: Núcleo e embutidos<148>-Footnote-35552183
Ref: Núcleo e embutidos<148>-Footnote-45552248
Ref: Núcleo e embutidos<148>-Footnote-55552313
Ref: Núcleo e embutidos<148>-Footnote-65552378
Ref: Núcleo e embutidos<148>-Footnote-75552443
Ref: Núcleo e embutidos<148>-Footnote-85552508
Ref: Núcleo e embutidos<148>-Footnote-95552573
Ref: Núcleo e embutidos<148>-Footnote-105552638
Ref: Núcleo e embutidos<148>-Footnote-115552704
Ref: Núcleo e embutidos<148>-Footnote-125552770
Ref: Núcleo e embutidos<148>-Footnote-135552836
Ref: Núcleo e embutidos<148>-Footnote-145552902
Ref: Núcleo e embutidos<148>-Footnote-155552968
Ref: Núcleo e embutidos<148>-Footnote-165553034
Ref: Núcleo e embutidos<148>-Footnote-175553100
Ref: Núcleo e embutidos<148>-Footnote-185553166
Ref: Núcleo e embutidos<148>-Footnote-195553232
Ref: Núcleo e embutidos<148>-Footnote-205553298
Ref: Núcleo e embutidos<148>-Footnote-215553364
Ref: Núcleo e embutidos<148>-Footnote-225553430
Ref: Núcleo e embutidos<148>-Footnote-235553496
Ref: Núcleo e embutidos<148>-Footnote-245553562
Node: Biblioteca<151>5553628
Ref: whatsnew/changelog id7995553772
Ref: 1c595553772
Ref: Biblioteca<151>-Footnote-15561103
Ref: Biblioteca<151>-Footnote-25561168
Ref: Biblioteca<151>-Footnote-35561233
Ref: Biblioteca<151>-Footnote-45561298
Ref: Biblioteca<151>-Footnote-55561363
Ref: Biblioteca<151>-Footnote-65561428
Ref: Biblioteca<151>-Footnote-75561493
Ref: Biblioteca<151>-Footnote-85561558
Ref: Biblioteca<151>-Footnote-95561623
Ref: Biblioteca<151>-Footnote-105561688
Ref: Biblioteca<151>-Footnote-115561754
Ref: Biblioteca<151>-Footnote-125561820
Ref: Biblioteca<151>-Footnote-135561886
Ref: Biblioteca<151>-Footnote-145561952
Ref: Biblioteca<151>-Footnote-155562018
Ref: Biblioteca<151>-Footnote-165562084
Ref: Biblioteca<151>-Footnote-175562149
Ref: Biblioteca<151>-Footnote-185562215
Ref: Biblioteca<151>-Footnote-195562281
Ref: Biblioteca<151>-Footnote-205562347
Ref: Biblioteca<151>-Footnote-215562413
Ref: Biblioteca<151>-Footnote-225562479
Ref: Biblioteca<151>-Footnote-235562545
Ref: Biblioteca<151>-Footnote-245562611
Ref: Biblioteca<151>-Footnote-255562677
Ref: Biblioteca<151>-Footnote-265562743
Ref: Biblioteca<151>-Footnote-275562809
Ref: Biblioteca<151>-Footnote-285562875
Ref: Biblioteca<151>-Footnote-295562941
Ref: Biblioteca<151>-Footnote-305563007
Ref: Biblioteca<151>-Footnote-315563073
Ref: Biblioteca<151>-Footnote-325563139
Ref: Biblioteca<151>-Footnote-335563205
Ref: Biblioteca<151>-Footnote-345563271
Ref: Biblioteca<151>-Footnote-355563337
Ref: Biblioteca<151>-Footnote-365563403
Ref: Biblioteca<151>-Footnote-375563469
Ref: Biblioteca<151>-Footnote-385563535
Ref: Biblioteca<151>-Footnote-395563601
Ref: Biblioteca<151>-Footnote-405563667
Ref: Biblioteca<151>-Footnote-415563733
Ref: Biblioteca<151>-Footnote-425563799
Ref: Biblioteca<151>-Footnote-435563865
Ref: Biblioteca<151>-Footnote-445563931
Ref: Biblioteca<151>-Footnote-455563997
Ref: Biblioteca<151>-Footnote-465564063
Ref: Biblioteca<151>-Footnote-475564129
Ref: Biblioteca<151>-Footnote-485564195
Ref: Biblioteca<151>-Footnote-495564261
Ref: Biblioteca<151>-Footnote-505564327
Ref: Biblioteca<151>-Footnote-515564393
Ref: Biblioteca<151>-Footnote-525564459
Node: Documentação<65>5564525
Ref: whatsnew/changelog id8005564655
Ref: 1c5a5564655
Ref: Documentação<65>-Footnote-15565144
Ref: Documentação<65>-Footnote-25565209
Ref: Documentação<65>-Footnote-35565274
Node: Testes<67>5565339
Ref: whatsnew/changelog id8015565470
Ref: 1c5b5565470
Ref: Testes<67>-Footnote-15566150
Ref: Testes<67>-Footnote-25566215
Ref: Testes<67>-Footnote-35566280
Ref: Testes<67>-Footnote-45566345
Node: Construção<72>5566410
Ref: whatsnew/changelog id8025566534
Ref: 1c5c5566534
Ref: Construção<72>-Footnote-15567450
Ref: Construção<72>-Footnote-25567515
Ref: Construção<72>-Footnote-35567580
Ref: Construção<72>-Footnote-45567645
Ref: Construção<72>-Footnote-55567710
Ref: Construção<72>-Footnote-65567775
Ref: Construção<72>-Footnote-75567840
Ref: Construção<72>-Footnote-85567905
Ref: Construção<72>-Footnote-95567970
Node: Windows<63>5568035
Ref: whatsnew/changelog id8035568158
Ref: 1c5d5568158
Ref: Windows<63>-Footnote-15568476
Ref: Windows<63>-Footnote-25568540
Node: macOS<50>5568605
Ref: whatsnew/changelog id8045568720
Ref: 1c5e5568720
Ref: macOS<50>-Footnote-15568854
Node: IDLE<52>5568919
Ref: whatsnew/changelog id8055569044
Ref: 1c5f5569044
Ref: IDLE<52>-Footnote-15572381
Ref: IDLE<52>-Footnote-25572446
Ref: IDLE<52>-Footnote-35572511
Ref: IDLE<52>-Footnote-45572576
Ref: IDLE<52>-Footnote-55572641
Ref: IDLE<52>-Footnote-65572706
Ref: IDLE<52>-Footnote-75572771
Ref: IDLE<52>-Footnote-85572836
Ref: IDLE<52>-Footnote-95572901
Ref: IDLE<52>-Footnote-105572966
Ref: IDLE<52>-Footnote-115573032
Ref: IDLE<52>-Footnote-125573098
Ref: IDLE<52>-Footnote-135573164
Ref: IDLE<52>-Footnote-145573230
Node: Ferramentas/Demos<39>5573298
Ref: whatsnew/changelog id8065573423
Ref: 1c605573423
Ref: Ferramentas/Demos<39>-Footnote-15573725
Node: API C<65>5573790
Ref: whatsnew/changelog id8075573898
Ref: 1c615573898
Ref: API C<65>-Footnote-15574626
Ref: API C<65>-Footnote-25574691
Ref: API C<65>-Footnote-35574756
Ref: API C<65>-Footnote-45574821
Node: Python 3 6 3 final5574886
Ref: whatsnew/changelog python-3-6-3-final5575032
Ref: 1c625575032
Node: Biblioteca<152>5575197
Ref: whatsnew/changelog id8085575292
Ref: 1c635575292
Ref: Biblioteca<152>-Footnote-15575500
Node: Construção<73>5575565
Ref: whatsnew/changelog id8095575660
Ref: 1c645575660
Ref: Construção<73>-Footnote-15575963
Ref: Construção<73>-Footnote-25576028
Node: Python 3 6 3 release candidate 15576093
Ref: whatsnew/changelog python-3-6-3-release-candidate-15576225
Ref: 1c655576225
Node: Segurança<47>5576643
Ref: whatsnew/changelog id8105576759
Ref: 1c665576759
Ref: Segurança<47>-Footnote-15577068
Ref: Segurança<47>-Footnote-25577133
Node: Núcleo e embutidos<149>5577198
Ref: whatsnew/changelog id8115577338
Ref: 1c675577338
Ref: Núcleo e embutidos<149>-Footnote-15580872
Ref: Núcleo e embutidos<149>-Footnote-25580937
Ref: Núcleo e embutidos<149>-Footnote-35581002
Ref: Núcleo e embutidos<149>-Footnote-45581067
Ref: Núcleo e embutidos<149>-Footnote-55581132
Ref: Núcleo e embutidos<149>-Footnote-65581197
Ref: Núcleo e embutidos<149>-Footnote-75581262
Ref: Núcleo e embutidos<149>-Footnote-85581327
Ref: Núcleo e embutidos<149>-Footnote-95581392
Ref: Núcleo e embutidos<149>-Footnote-105581457
Ref: Núcleo e embutidos<149>-Footnote-115581523
Ref: Núcleo e embutidos<149>-Footnote-125581589
Ref: Núcleo e embutidos<149>-Footnote-135581655
Ref: Núcleo e embutidos<149>-Footnote-145581721
Ref: Núcleo e embutidos<149>-Footnote-155581787
Ref: Núcleo e embutidos<149>-Footnote-165581853
Ref: Núcleo e embutidos<149>-Footnote-175581919
Ref: Núcleo e embutidos<149>-Footnote-185581985
Ref: Núcleo e embutidos<149>-Footnote-195582051
Ref: Núcleo e embutidos<149>-Footnote-205582117
Ref: Núcleo e embutidos<149>-Footnote-215582183
Ref: Núcleo e embutidos<149>-Footnote-225582249
Node: Biblioteca<153>5582315
Ref: whatsnew/changelog id8125582459
Ref: 1c685582459
Ref: Biblioteca<153>-Footnote-15588466
Ref: Biblioteca<153>-Footnote-25588531
Ref: Biblioteca<153>-Footnote-35588596
Ref: Biblioteca<153>-Footnote-45588661
Ref: Biblioteca<153>-Footnote-55588726
Ref: Biblioteca<153>-Footnote-65588791
Ref: Biblioteca<153>-Footnote-75588856
Ref: Biblioteca<153>-Footnote-85588921
Ref: Biblioteca<153>-Footnote-95588986
Ref: Biblioteca<153>-Footnote-105589051
Ref: Biblioteca<153>-Footnote-115589117
Ref: Biblioteca<153>-Footnote-125589183
Ref: Biblioteca<153>-Footnote-135589249
Ref: Biblioteca<153>-Footnote-145589315
Ref: Biblioteca<153>-Footnote-155589381
Ref: Biblioteca<153>-Footnote-165589446
Ref: Biblioteca<153>-Footnote-175589512
Ref: Biblioteca<153>-Footnote-185589578
Ref: Biblioteca<153>-Footnote-195589621
Ref: Biblioteca<153>-Footnote-205589687
Ref: Biblioteca<153>-Footnote-215589753
Ref: Biblioteca<153>-Footnote-225589819
Ref: Biblioteca<153>-Footnote-235589885
Ref: Biblioteca<153>-Footnote-245589951
Ref: Biblioteca<153>-Footnote-255590017
Ref: Biblioteca<153>-Footnote-265590083
Ref: Biblioteca<153>-Footnote-275590149
Ref: Biblioteca<153>-Footnote-285590215
Ref: Biblioteca<153>-Footnote-295590281
Ref: Biblioteca<153>-Footnote-305590347
Ref: Biblioteca<153>-Footnote-315590413
Ref: Biblioteca<153>-Footnote-325590479
Ref: Biblioteca<153>-Footnote-335590545
Ref: Biblioteca<153>-Footnote-345590611
Ref: Biblioteca<153>-Footnote-355590677
Ref: Biblioteca<153>-Footnote-365590743
Ref: Biblioteca<153>-Footnote-375590809
Ref: Biblioteca<153>-Footnote-385590875
Ref: Biblioteca<153>-Footnote-395590941
Ref: Biblioteca<153>-Footnote-405591007
Ref: Biblioteca<153>-Footnote-415591073
Ref: Biblioteca<153>-Footnote-425591139
Node: Documentação<66>5591205
Ref: whatsnew/changelog id8135591335
Ref: 1c695591335
Ref: Documentação<66>-Footnote-15591758
Ref: Documentação<66>-Footnote-25591823
Ref: Documentação<66>-Footnote-35591888
Node: Testes<68>5591953
Ref: whatsnew/changelog id8145592084
Ref: 1c6a5592084
Ref: Testes<68>-Footnote-15592791
Ref: Testes<68>-Footnote-25592856
Ref: Testes<68>-Footnote-35592921
Ref: Testes<68>-Footnote-45592986
Node: Construção<74>5593051
Ref: whatsnew/changelog id8155593175
Ref: 1c6b5593175
Ref: Construção<74>-Footnote-15593362
Node: Windows<64>5593427
Ref: whatsnew/changelog id8165593549
Ref: 1c6c5593549
Ref: Windows<64>-Footnote-15594057
Ref: Windows<64>-Footnote-25594122
Ref: Windows<64>-Footnote-35594187
Ref: Windows<64>-Footnote-45594252
Node: IDLE<53>5594317
Ref: whatsnew/changelog id8175594444
Ref: 1c6d5594444
Ref: IDLE<53>-Footnote-15603277
Ref: IDLE<53>-Footnote-25603342
Ref: IDLE<53>-Footnote-35603407
Ref: IDLE<53>-Footnote-45603472
Ref: IDLE<53>-Footnote-55603537
Ref: IDLE<53>-Footnote-65603602
Ref: IDLE<53>-Footnote-75603667
Ref: IDLE<53>-Footnote-85603732
Ref: IDLE<53>-Footnote-95603797
Ref: IDLE<53>-Footnote-105603862
Ref: IDLE<53>-Footnote-115603928
Ref: IDLE<53>-Footnote-125603994
Ref: IDLE<53>-Footnote-135604060
Ref: IDLE<53>-Footnote-145604126
Ref: IDLE<53>-Footnote-155604192
Ref: IDLE<53>-Footnote-165604258
Ref: IDLE<53>-Footnote-175604324
Ref: IDLE<53>-Footnote-185604390
Ref: IDLE<53>-Footnote-195604456
Ref: IDLE<53>-Footnote-205604522
Ref: IDLE<53>-Footnote-215604588
Ref: IDLE<53>-Footnote-225604654
Ref: IDLE<53>-Footnote-235604720
Ref: IDLE<53>-Footnote-245604786
Ref: IDLE<53>-Footnote-255604852
Ref: IDLE<53>-Footnote-265604918
Ref: IDLE<53>-Footnote-275604984
Ref: IDLE<53>-Footnote-285605050
Ref: IDLE<53>-Footnote-295605116
Ref: IDLE<53>-Footnote-305605182
Ref: IDLE<53>-Footnote-315605248
Ref: IDLE<53>-Footnote-325605314
Ref: IDLE<53>-Footnote-335605380
Ref: IDLE<53>-Footnote-345605446
Ref: IDLE<53>-Footnote-355605511
Ref: IDLE<53>-Footnote-365605577
Ref: IDLE<53>-Footnote-375605643
Ref: IDLE<53>-Footnote-385605709
Ref: IDLE<53>-Footnote-395605775
Ref: IDLE<53>-Footnote-405605841
Ref: IDLE<53>-Footnote-415605907
Ref: IDLE<53>-Footnote-425605973
Ref: IDLE<53>-Footnote-435606039
Node: Ferramentas/Demos<40>5606104
Ref: whatsnew/changelog id8185606211
Ref: 1c6e5606211
Ref: Ferramentas/Demos<40>-Footnote-15606785
Ref: Ferramentas/Demos<40>-Footnote-25606850
Node: Python 3 6 2 final5606892
Ref: whatsnew/changelog python-3-6-2-final5607038
Ref: 1c6f5607038
Node: Python 3 6 2 release candidate 25607166
Ref: whatsnew/changelog python-3-6-2-release-candidate-25607312
Ref: 1c705607312
Node: Segurança<48>5607470
Ref: whatsnew/changelog id8195607553
Ref: 1c715607553
Ref: Segurança<48>-Footnote-15608681
Ref: Segurança<48>-Footnote-25608746
Ref: Segurança<48>-Footnote-35608811
Ref: Segurança<48>-Footnote-45608866
Ref: Segurança<48>-Footnote-55608921
Ref: Segurança<48>-Footnote-65608976
Ref: Segurança<48>-Footnote-75609031
Ref: Segurança<48>-Footnote-85609086
Ref: Segurança<48>-Footnote-95609141
Node: Python 3 6 2 release candidate 15609206
Ref: whatsnew/changelog python-3-6-2-release-candidate-15609352
Ref: 1c725609352
Node: Segurança<49>5609790
Ref: whatsnew/changelog id8205609906
Ref: 1c735609906
Ref: Segurança<49>-Footnote-15610182
Ref: Segurança<49>-Footnote-25610247
Ref: Segurança<49>-Footnote-35610302
Node: Núcleo e embutidos<150>5610357
Ref: whatsnew/changelog id8215610497
Ref: 1c745610497
Ref: Núcleo e embutidos<150>-Footnote-15612500
Ref: Núcleo e embutidos<150>-Footnote-25612565
Ref: Núcleo e embutidos<150>-Footnote-35612630
Ref: Núcleo e embutidos<150>-Footnote-45612695
Ref: Núcleo e embutidos<150>-Footnote-55612760
Ref: Núcleo e embutidos<150>-Footnote-65612825
Ref: Núcleo e embutidos<150>-Footnote-75612890
Ref: Núcleo e embutidos<150>-Footnote-85612955
Ref: Núcleo e embutidos<150>-Footnote-95613020
Ref: Núcleo e embutidos<150>-Footnote-105613085
Ref: Núcleo e embutidos<150>-Footnote-115613151
Ref: Núcleo e embutidos<150>-Footnote-125613217
Ref: Núcleo e embutidos<150>-Footnote-135613283
Ref: Núcleo e embutidos<150>-Footnote-145613349
Ref: Núcleo e embutidos<150>-Footnote-155613415
Node: Biblioteca<154>5613481
Ref: whatsnew/changelog id8225613615
Ref: 1c755613615
Ref: Biblioteca<154>-Footnote-15622049
Ref: Biblioteca<154>-Footnote-25622114
Ref: Biblioteca<154>-Footnote-35622179
Ref: Biblioteca<154>-Footnote-45622244
Ref: Biblioteca<154>-Footnote-55622309
Ref: Biblioteca<154>-Footnote-65622374
Ref: Biblioteca<154>-Footnote-75622439
Ref: Biblioteca<154>-Footnote-85622504
Ref: Biblioteca<154>-Footnote-95622569
Ref: Biblioteca<154>-Footnote-105622634
Ref: Biblioteca<154>-Footnote-115622700
Ref: Biblioteca<154>-Footnote-125622766
Ref: Biblioteca<154>-Footnote-135622832
Ref: Biblioteca<154>-Footnote-145622898
Ref: Biblioteca<154>-Footnote-155622964
Ref: Biblioteca<154>-Footnote-165623030
Ref: Biblioteca<154>-Footnote-175623096
Ref: Biblioteca<154>-Footnote-185623162
Ref: Biblioteca<154>-Footnote-195623228
Ref: Biblioteca<154>-Footnote-205623294
Ref: Biblioteca<154>-Footnote-215623360
Ref: Biblioteca<154>-Footnote-225623426
Ref: Biblioteca<154>-Footnote-235623492
Ref: Biblioteca<154>-Footnote-245623558
Ref: Biblioteca<154>-Footnote-255623624
Ref: Biblioteca<154>-Footnote-265623690
Ref: Biblioteca<154>-Footnote-275623756
Ref: Biblioteca<154>-Footnote-285623822
Ref: Biblioteca<154>-Footnote-295623888
Ref: Biblioteca<154>-Footnote-305623954
Ref: Biblioteca<154>-Footnote-315624020
Ref: Biblioteca<154>-Footnote-325624086
Ref: Biblioteca<154>-Footnote-335624152
Ref: Biblioteca<154>-Footnote-345624218
Ref: Biblioteca<154>-Footnote-355624284
Ref: Biblioteca<154>-Footnote-365624350
Ref: Biblioteca<154>-Footnote-375624416
Ref: Biblioteca<154>-Footnote-385624482
Ref: Biblioteca<154>-Footnote-395624548
Ref: Biblioteca<154>-Footnote-405624614
Ref: Biblioteca<154>-Footnote-415624680
Ref: Biblioteca<154>-Footnote-425624746
Ref: Biblioteca<154>-Footnote-435624812
Ref: Biblioteca<154>-Footnote-445624878
Ref: Biblioteca<154>-Footnote-455624944
Ref: Biblioteca<154>-Footnote-465625010
Ref: Biblioteca<154>-Footnote-475625076
Ref: Biblioteca<154>-Footnote-485625142
Ref: Biblioteca<154>-Footnote-495625208
Ref: Biblioteca<154>-Footnote-505625274
Ref: Biblioteca<154>-Footnote-515625340
Ref: Biblioteca<154>-Footnote-525625406
Ref: Biblioteca<154>-Footnote-535625472
Ref: Biblioteca<154>-Footnote-545625538
Ref: Biblioteca<154>-Footnote-555625604
Ref: Biblioteca<154>-Footnote-565625669
Ref: Biblioteca<154>-Footnote-575625735
Ref: Biblioteca<154>-Footnote-585625801
Ref: Biblioteca<154>-Footnote-595625867
Ref: Biblioteca<154>-Footnote-605625933
Node: IDLE<54>5625999
Ref: whatsnew/changelog id8235626118
Ref: 1c765626118
Ref: IDLE<54>-Footnote-15627123
Ref: IDLE<54>-Footnote-25627188
Ref: IDLE<54>-Footnote-35627253
Ref: IDLE<54>-Footnote-45627318
Ref: IDLE<54>-Footnote-55627383
Ref: IDLE<54>-Footnote-65627448
Node: API C<66>5627513
Ref: whatsnew/changelog id8245627633
Ref: 1c775627633
Ref: API C<66>-Footnote-15627821
Node: Construção<75>5627886
Ref: whatsnew/changelog id8255628016
Ref: 1c785628016
Ref: Construção<75>-Footnote-15628837
Ref: Construção<75>-Footnote-25628902
Ref: Construção<75>-Footnote-35628967
Ref: Construção<75>-Footnote-45629032
Ref: Construção<75>-Footnote-55629097
Node: Documentação<67>5629162
Ref: whatsnew/changelog id8265629304
Ref: 1c795629304
Ref: Documentação<67>-Footnote-15630033
Ref: Documentação<67>-Footnote-25630098
Ref: Documentação<67>-Footnote-35630163
Node: Ferramentas/Demos<41>5630228
Ref: whatsnew/changelog id8275630364
Ref: 1c7a5630364
Ref: Ferramentas/Demos<41>-Footnote-15630566
Node: Testes<69>5630631
Ref: whatsnew/changelog id8285630760
Ref: 1c7b5630760
Ref: Testes<69>-Footnote-15631423
Ref: Testes<69>-Footnote-25631488
Node: Windows<65>5631553
Ref: whatsnew/changelog id8295631652
Ref: 1c7c5631652
Ref: Windows<65>-Footnote-15632096
Ref: Windows<65>-Footnote-25632161
Node: Python 3 6 1 final5632226
Ref: whatsnew/changelog python-3-6-1-final5632372
Ref: 1c7d5632372
Node: Núcleo e embutidos<151>5632555
Ref: whatsnew/changelog id8305632659
Ref: 1c7e5632659
Ref: Núcleo e embutidos<151>-Footnote-15633281
Ref: Núcleo e embutidos<151>-Footnote-25633346
Node: Construção<76>5633411
Ref: whatsnew/changelog id8315633515
Ref: 1c7f5633515
Ref: Construção<76>-Footnote-15633719
Node: Python 3 6 1 release candidate 15633784
Ref: whatsnew/changelog python-3-6-1-release-candidate-15633916
Ref: 1c805633916
Node: Núcleo e embutidos<152>5634280
Ref: whatsnew/changelog id8325634397
Ref: 1c815634397
Ref: Núcleo e embutidos<152>-Footnote-15637232
Ref: Núcleo e embutidos<152>-Footnote-25637297
Ref: Núcleo e embutidos<152>-Footnote-35637362
Ref: Núcleo e embutidos<152>-Footnote-45637427
Ref: Núcleo e embutidos<152>-Footnote-55637492
Ref: Núcleo e embutidos<152>-Footnote-65637557
Ref: Núcleo e embutidos<152>-Footnote-75637622
Ref: Núcleo e embutidos<152>-Footnote-85637687
Ref: Núcleo e embutidos<152>-Footnote-95637752
Ref: Núcleo e embutidos<152>-Footnote-105637817
Ref: Núcleo e embutidos<152>-Footnote-115637883
Ref: Núcleo e embutidos<152>-Footnote-125637949
Ref: Núcleo e embutidos<152>-Footnote-135638015
Ref: Núcleo e embutidos<152>-Footnote-145638081
Ref: Núcleo e embutidos<152>-Footnote-155638147
Ref: Núcleo e embutidos<152>-Footnote-165638213
Ref: Núcleo e embutidos<152>-Footnote-175638279
Ref: Núcleo e embutidos<152>-Footnote-185638345
Ref: Núcleo e embutidos<152>-Footnote-195638411
Ref: Núcleo e embutidos<152>-Footnote-205638477
Ref: Núcleo e embutidos<152>-Footnote-215638543
Ref: Núcleo e embutidos<152>-Footnote-225638609
Node: Biblioteca<155>5638675
Ref: whatsnew/changelog id8335638809
Ref: 1c825638809
Ref: Biblioteca<155>-Footnote-15644462
Ref: Biblioteca<155>-Footnote-25644527
Ref: Biblioteca<155>-Footnote-35644592
Ref: Biblioteca<155>-Footnote-45644657
Ref: Biblioteca<155>-Footnote-55644722
Ref: Biblioteca<155>-Footnote-65644787
Ref: Biblioteca<155>-Footnote-75644852
Ref: Biblioteca<155>-Footnote-85644917
Ref: Biblioteca<155>-Footnote-95644982
Ref: Biblioteca<155>-Footnote-105645047
Ref: Biblioteca<155>-Footnote-115645113
Ref: Biblioteca<155>-Footnote-125645179
Ref: Biblioteca<155>-Footnote-135645245
Ref: Biblioteca<155>-Footnote-145645311
Ref: Biblioteca<155>-Footnote-155645377
Ref: Biblioteca<155>-Footnote-165645443
Ref: Biblioteca<155>-Footnote-175645509
Ref: Biblioteca<155>-Footnote-185645575
Ref: Biblioteca<155>-Footnote-195645641
Ref: Biblioteca<155>-Footnote-205645707
Ref: Biblioteca<155>-Footnote-215645773
Ref: Biblioteca<155>-Footnote-225645839
Ref: Biblioteca<155>-Footnote-235645905
Ref: Biblioteca<155>-Footnote-245645971
Ref: Biblioteca<155>-Footnote-255646037
Ref: Biblioteca<155>-Footnote-265646103
Ref: Biblioteca<155>-Footnote-275646169
Ref: Biblioteca<155>-Footnote-285646212
Ref: Biblioteca<155>-Footnote-295646278
Ref: Biblioteca<155>-Footnote-305646344
Ref: Biblioteca<155>-Footnote-315646410
Ref: Biblioteca<155>-Footnote-325646476
Ref: Biblioteca<155>-Footnote-335646542
Ref: Biblioteca<155>-Footnote-345646608
Ref: Biblioteca<155>-Footnote-355646674
Ref: Biblioteca<155>-Footnote-365646739
Ref: Biblioteca<155>-Footnote-375646805
Ref: Biblioteca<155>-Footnote-385646871
Ref: Biblioteca<155>-Footnote-395646937
Ref: Biblioteca<155>-Footnote-405647003
Ref: Biblioteca<155>-Footnote-415647069
Ref: Biblioteca<155>-Footnote-425647135
Ref: Biblioteca<155>-Footnote-435647201
Ref: Biblioteca<155>-Footnote-445647267
Node: IDLE<55>5647333
Ref: whatsnew/changelog id8345647454
Ref: 1c835647454
Ref: IDLE<55>-Footnote-15647743
Ref: IDLE<55>-Footnote-25647808
Node: Windows<66>5647873
Ref: whatsnew/changelog id8355647988
Ref: 1c845647988
Ref: Windows<66>-Footnote-15648635
Ref: Windows<66>-Footnote-25648700
Ref: Windows<66>-Footnote-35648765
Ref: Windows<66>-Footnote-45648830
Ref: Windows<66>-Footnote-55648895
Ref: Windows<66>-Footnote-65648937
Ref: Windows<66>-Footnote-75649002
Ref: Windows<66>-Footnote-85649067
Node: API C<67>5649132
Ref: whatsnew/changelog id8365649257
Ref: 1c855649257
Ref: API C<67>-Footnote-15650083
Ref: API C<67>-Footnote-25650148
Ref: API C<67>-Footnote-35650213
Node: Documentação<68>5650278
Ref: whatsnew/changelog id8375650402
Ref: 1c865650402
Ref: Documentação<68>-Footnote-15650939
Ref: Documentação<68>-Footnote-25651004
Ref: Documentação<68>-Footnote-35651069
Ref: Documentação<68>-Footnote-45651134
Node: Testes<70>5651199
Ref: whatsnew/changelog id8385651330
Ref: 1c875651330
Ref: Testes<70>-Footnote-15652317
Ref: Testes<70>-Footnote-25652382
Ref: Testes<70>-Footnote-35652447
Ref: Testes<70>-Footnote-45652512
Ref: Testes<70>-Footnote-55652577
Node: Construção<77>5652642
Ref: whatsnew/changelog id8395652746
Ref: 1c885652746
Ref: Construção<77>-Footnote-15654019
Ref: Construção<77>-Footnote-25654084
Ref: Construção<77>-Footnote-35654149
Ref: Construção<77>-Footnote-45654214
Ref: Construção<77>-Footnote-55654279
Ref: Construção<77>-Footnote-65654344
Ref: Construção<77>-Footnote-75654409
Ref: Construção<77>-Footnote-85654474
Ref: Construção<77>-Footnote-95654539
Ref: Construção<77>-Footnote-105654604
Node: Python 3 6 0 final5654670
Ref: whatsnew/changelog python-3-6-0-final5654816
Ref: 1c895654816
Node: Python 3 6 0 release candidate 25654944
Ref: whatsnew/changelog python-3-6-0-release-candidate-25655090
Ref: 1c8a5655090
Node: Núcleo e embutidos<153>5655369
Ref: whatsnew/changelog id8405655492
Ref: 1c8b5655492
Ref: Núcleo e embutidos<153>-Footnote-15655880
Ref: Núcleo e embutidos<153>-Footnote-25655945
Node: Ferramentas/Demos<42>5656010
Ref: whatsnew/changelog id8415656153
Ref: 1c8c5656153
Ref: Ferramentas/Demos<42>-Footnote-15656299
Node: Windows<67>5656364
Ref: whatsnew/changelog id8425656499
Ref: 1c8d5656499
Ref: Windows<67>-Footnote-15656625
Node: Construção<78>5656690
Ref: whatsnew/changelog id8435656795
Ref: 1c8e5656795
Ref: Construção<78>-Footnote-15656962
Node: Python 3 6 0 release candidate 15657027
Ref: whatsnew/changelog python-3-6-0-release-candidate-15657174
Ref: 1c8f5657174
Node: Núcleo e embutidos<154>5657484
Ref: whatsnew/changelog id8445657601
Ref: 1c905657601
Ref: Núcleo e embutidos<154>-Footnote-15658413
Ref: Núcleo e embutidos<154>-Footnote-25658478
Ref: Núcleo e embutidos<154>-Footnote-35658543
Ref: Núcleo e embutidos<154>-Footnote-45658608
Node: Biblioteca<156>5658673
Ref: whatsnew/changelog id8455658808
Ref: 1c915658808
Ref: Biblioteca<156>-Footnote-15659853
Ref: Biblioteca<156>-Footnote-25659918
Ref: Biblioteca<156>-Footnote-35659983
Ref: Biblioteca<156>-Footnote-45660048
Ref: Biblioteca<156>-Footnote-55660113
Ref: Biblioteca<156>-Footnote-65660178
Node: API C<68>5660243
Ref: whatsnew/changelog id8465660372
Ref: 1c925660372
Ref: API C<68>-Footnote-15660530
Node: Documentação<69>5660595
Ref: whatsnew/changelog id8475660730
Ref: 1c935660730
Ref: Documentação<69>-Footnote-15661070
Ref: Documentação<69>-Footnote-25661135
Node: Ferramentas/Demos<43>5661177
Ref: whatsnew/changelog id8485661294
Ref: 1c945661294
Ref: Ferramentas/Demos<43>-Footnote-15661472
Node: Python 3 6 0 beta 45661537
Ref: whatsnew/changelog python-3-6-0-beta-45661671
Ref: 1c955661671
Node: Núcleo e embutidos<155>5661947
Ref: whatsnew/changelog id8495662051
Ref: 1c965662051
Ref: Núcleo e embutidos<155>-Footnote-15663606
Ref: Núcleo e embutidos<155>-Footnote-25663671
Ref: Núcleo e embutidos<155>-Footnote-35663736
Ref: Núcleo e embutidos<155>-Footnote-45663801
Ref: Núcleo e embutidos<155>-Footnote-55663866
Ref: Núcleo e embutidos<155>-Footnote-65663931
Ref: Núcleo e embutidos<155>-Footnote-75663996
Ref: Núcleo e embutidos<155>-Footnote-85664061
Ref: Núcleo e embutidos<155>-Footnote-95664126
Ref: Núcleo e embutidos<155>-Footnote-105664191
Ref: Núcleo e embutidos<155>-Footnote-115664257
Node: Biblioteca<157>5664323
Ref: whatsnew/changelog id8505664454
Ref: 1c975664454
Ref: Biblioteca<157>-Footnote-15666462
Ref: Biblioteca<157>-Footnote-25666527
Ref: Biblioteca<157>-Footnote-35666592
Ref: Biblioteca<157>-Footnote-45666657
Ref: Biblioteca<157>-Footnote-55666722
Ref: Biblioteca<157>-Footnote-65666787
Ref: Biblioteca<157>-Footnote-75666852
Ref: Biblioteca<157>-Footnote-85666917
Ref: Biblioteca<157>-Footnote-95666982
Ref: Biblioteca<157>-Footnote-105667047
Ref: Biblioteca<157>-Footnote-115667113
Ref: Biblioteca<157>-Footnote-125667179
Ref: Biblioteca<157>-Footnote-135667245
Ref: Biblioteca<157>-Footnote-145667311
Ref: Biblioteca<157>-Footnote-155667377
Ref: Biblioteca<157>-Footnote-165667443
Ref: Biblioteca<157>-Footnote-175667509
Ref: Biblioteca<157>-Footnote-185667575
Node: Documentação<70>5667641
Ref: whatsnew/changelog id8515667758
Ref: 1c985667758
Ref: Documentação<70>-Footnote-15667909
Node: Testes<71>5667974
Ref: whatsnew/changelog id8525668092
Ref: 1c995668092
Ref: Testes<71>-Footnote-15668356
Ref: Testes<71>-Footnote-25668421
Node: Construção<79>5668486
Ref: whatsnew/changelog id8535668577
Ref: 1c9a5668577
Ref: Construção<79>-Footnote-15668952
Ref: Construção<79>-Footnote-25669017
Ref: Construção<79>-Footnote-35669082
Node: Python 3 6 0 beta 35669147
Ref: whatsnew/changelog python-3-6-0-beta-35669268
Ref: 1c9b5669268
Node: Núcleo e embutidos<156>5669530
Ref: whatsnew/changelog id8545669634
Ref: 1c9c5669634
Ref: Núcleo e embutidos<156>-Footnote-15670544
Ref: Núcleo e embutidos<156>-Footnote-25670609
Ref: Núcleo e embutidos<156>-Footnote-35670674
Ref: Núcleo e embutidos<156>-Footnote-45670739
Ref: Núcleo e embutidos<156>-Footnote-55670804
Ref: Núcleo e embutidos<156>-Footnote-65670869
Ref: Núcleo e embutidos<156>-Footnote-75670934
Node: Biblioteca<158>5670999
Ref: whatsnew/changelog id8555671123
Ref: 1c9d5671123
Ref: Biblioteca<158>-Footnote-15674176
Ref: Biblioteca<158>-Footnote-25674241
Ref: Biblioteca<158>-Footnote-35674306
Ref: Biblioteca<158>-Footnote-45674371
Ref: Biblioteca<158>-Footnote-55674436
Ref: Biblioteca<158>-Footnote-65674501
Ref: Biblioteca<158>-Footnote-75674566
Ref: Biblioteca<158>-Footnote-85674631
Ref: Biblioteca<158>-Footnote-95674696
Ref: Biblioteca<158>-Footnote-105674761
Ref: Biblioteca<158>-Footnote-115674827
Ref: Biblioteca<158>-Footnote-125674893
Ref: Biblioteca<158>-Footnote-135674959
Ref: Biblioteca<158>-Footnote-145675025
Ref: Biblioteca<158>-Footnote-155675091
Ref: Biblioteca<158>-Footnote-165675157
Ref: Biblioteca<158>-Footnote-175675223
Ref: Biblioteca<158>-Footnote-185675289
Ref: Biblioteca<158>-Footnote-195675355
Ref: Biblioteca<158>-Footnote-205675421
Ref: Biblioteca<158>-Footnote-215675487
Ref: Biblioteca<158>-Footnote-225675553
Ref: Biblioteca<158>-Footnote-235675619
Ref: Biblioteca<158>-Footnote-245675685
Node: Windows<68>5675751
Ref: whatsnew/changelog id8565675867
Ref: 1c9e5675867
Ref: Windows<68>-Footnote-15676011
Node: Construção<80>5676076
Ref: whatsnew/changelog id8575676187
Ref: 1c9f5676187
Ref: Construção<80>-Footnote-15676518
Ref: Construção<80>-Footnote-25676583
Ref: Construção<80>-Footnote-35676648
Node: Testes<72>5676713
Ref: whatsnew/changelog id8585676804
Ref: 1ca05676804
Ref: Testes<72>-Footnote-15677065
Ref: Testes<72>-Footnote-25677130
Node: Python 3 6 0 beta 25677195
Ref: whatsnew/changelog python-3-6-0-beta-25677316
Ref: 1ca15677316
Node: Núcleo e embutidos<157>5677598
Ref: whatsnew/changelog id8595677702
Ref: 1ca25677702
Ref: Núcleo e embutidos<157>-Footnote-15680449
Ref: Núcleo e embutidos<157>-Footnote-25680514
Ref: Núcleo e embutidos<157>-Footnote-35680579
Ref: Núcleo e embutidos<157>-Footnote-45680644
Ref: Núcleo e embutidos<157>-Footnote-55680709
Ref: Núcleo e embutidos<157>-Footnote-65680774
Ref: Núcleo e embutidos<157>-Footnote-75680839
Ref: Núcleo e embutidos<157>-Footnote-85680904
Ref: Núcleo e embutidos<157>-Footnote-95680969
Ref: Núcleo e embutidos<157>-Footnote-105681034
Ref: Núcleo e embutidos<157>-Footnote-115681100
Ref: Núcleo e embutidos<157>-Footnote-125681166
Ref: Núcleo e embutidos<157>-Footnote-135681232
Ref: Núcleo e embutidos<157>-Footnote-145681298
Ref: Núcleo e embutidos<157>-Footnote-155681364
Ref: Núcleo e embutidos<157>-Footnote-165681430
Ref: Núcleo e embutidos<157>-Footnote-175681496
Ref: Núcleo e embutidos<157>-Footnote-185681562
Ref: Núcleo e embutidos<157>-Footnote-195681628
Ref: Núcleo e embutidos<157>-Footnote-205681694
Ref: Núcleo e embutidos<157>-Footnote-215681760
Ref: Núcleo e embutidos<157>-Footnote-225681826
Ref: Núcleo e embutidos<157>-Footnote-235681892
Node: Biblioteca<159>5681958
Ref: whatsnew/changelog id8605682082
Ref: 1ca35682082
Ref: Biblioteca<159>-Footnote-15687878
Ref: Biblioteca<159>-Footnote-25687943
Ref: Biblioteca<159>-Footnote-35688008
Ref: Biblioteca<159>-Footnote-45688073
Ref: Biblioteca<159>-Footnote-55688138
Ref: Biblioteca<159>-Footnote-65688203
Ref: Biblioteca<159>-Footnote-75688268
Ref: Biblioteca<159>-Footnote-85688333
Ref: Biblioteca<159>-Footnote-95688398
Ref: Biblioteca<159>-Footnote-105688463
Ref: Biblioteca<159>-Footnote-115688529
Ref: Biblioteca<159>-Footnote-125688595
Ref: Biblioteca<159>-Footnote-135688661
Ref: Biblioteca<159>-Footnote-145688727
Ref: Biblioteca<159>-Footnote-155688793
Ref: Biblioteca<159>-Footnote-165688859
Ref: Biblioteca<159>-Footnote-175688925
Ref: Biblioteca<159>-Footnote-185688991
Ref: Biblioteca<159>-Footnote-195689057
Ref: Biblioteca<159>-Footnote-205689123
Ref: Biblioteca<159>-Footnote-215689189
Ref: Biblioteca<159>-Footnote-225689255
Ref: Biblioteca<159>-Footnote-235689321
Ref: Biblioteca<159>-Footnote-245689387
Ref: Biblioteca<159>-Footnote-255689453
Ref: Biblioteca<159>-Footnote-265689519
Ref: Biblioteca<159>-Footnote-275689585
Ref: Biblioteca<159>-Footnote-285689651
Ref: Biblioteca<159>-Footnote-295689717
Ref: Biblioteca<159>-Footnote-305689783
Ref: Biblioteca<159>-Footnote-315689849
Ref: Biblioteca<159>-Footnote-325689915
Ref: Biblioteca<159>-Footnote-335689981
Ref: Biblioteca<159>-Footnote-345690047
Ref: Biblioteca<159>-Footnote-355690113
Ref: Biblioteca<159>-Footnote-365690179
Ref: Biblioteca<159>-Footnote-375690245
Ref: Biblioteca<159>-Footnote-385690311
Ref: Biblioteca<159>-Footnote-395690377
Ref: Biblioteca<159>-Footnote-405690443
Ref: Biblioteca<159>-Footnote-415690509
Ref: Biblioteca<159>-Footnote-425690575
Ref: Biblioteca<159>-Footnote-435690641
Ref: Biblioteca<159>-Footnote-445690707
Ref: Biblioteca<159>-Footnote-455690773
Ref: Biblioteca<159>-Footnote-465690839
Ref: Biblioteca<159>-Footnote-475690905
Ref: Biblioteca<159>-Footnote-485690971
Node: Windows<69>5691037
Ref: whatsnew/changelog id8615691146
Ref: 1ca45691146
Ref: Windows<69>-Footnote-15691957
Ref: Windows<69>-Footnote-25692022
Ref: Windows<69>-Footnote-35692087
Ref: Windows<69>-Footnote-45692152
Ref: Windows<69>-Footnote-55692217
Ref: Windows<69>-Footnote-65692282
Ref: Windows<69>-Footnote-75692347
Ref: Windows<69>-Footnote-85692412
Ref: Windows<69>-Footnote-95692477
Ref: Windows<69>-Footnote-105692542
Node: API C<69>5692608
Ref: whatsnew/changelog id8625692718
Ref: 1ca55692718
Ref: API C<69>-Footnote-15692972
Node: Construção<81>5693037
Ref: whatsnew/changelog id8635693146
Ref: 1ca65693146
Ref: Construção<81>-Footnote-15693584
Ref: Construção<81>-Footnote-25693649
Ref: Construção<81>-Footnote-35693714
Node: Testes<73>5693779
Ref: whatsnew/changelog id8645693870
Ref: 1ca75693870
Ref: Testes<73>-Footnote-15694009
Node: Python 3 6 0 beta 15694074
Ref: whatsnew/changelog python-3-6-0-beta-15694196
Ref: 1ca85694196
Node: Núcleo e embutidos<158>5694540
Ref: whatsnew/changelog id8655694644
Ref: 1ca95694644
Ref: Núcleo e embutidos<158>-Footnote-15700846
Ref: Núcleo e embutidos<158>-Footnote-25700911
Ref: Núcleo e embutidos<158>-Footnote-35700976
Ref: Núcleo e embutidos<158>-Footnote-45701041
Ref: Núcleo e embutidos<158>-Footnote-55701083
Ref: Núcleo e embutidos<158>-Footnote-65701148
Ref: Núcleo e embutidos<158>-Footnote-75701213
Ref: Núcleo e embutidos<158>-Footnote-85701278
Ref: Núcleo e embutidos<158>-Footnote-95701343
Ref: Núcleo e embutidos<158>-Footnote-105701408
Ref: Núcleo e embutidos<158>-Footnote-115701474
Ref: Núcleo e embutidos<158>-Footnote-125701540
Ref: Núcleo e embutidos<158>-Footnote-135701606
Ref: Núcleo e embutidos<158>-Footnote-145701649
Ref: Núcleo e embutidos<158>-Footnote-155701715
Ref: Núcleo e embutidos<158>-Footnote-165701781
Ref: Núcleo e embutidos<158>-Footnote-175701824
Ref: Núcleo e embutidos<158>-Footnote-185701890
Ref: Núcleo e embutidos<158>-Footnote-195701933
Ref: Núcleo e embutidos<158>-Footnote-205701999
Ref: Núcleo e embutidos<158>-Footnote-215702065
Ref: Núcleo e embutidos<158>-Footnote-225702131
Ref: Núcleo e embutidos<158>-Footnote-235702197
Ref: Núcleo e embutidos<158>-Footnote-245702263
Ref: Núcleo e embutidos<158>-Footnote-255702329
Ref: Núcleo e embutidos<158>-Footnote-265702395
Ref: Núcleo e embutidos<158>-Footnote-275702461
Ref: Núcleo e embutidos<158>-Footnote-285702504
Ref: Núcleo e embutidos<158>-Footnote-295702570
Ref: Núcleo e embutidos<158>-Footnote-305702636
Ref: Núcleo e embutidos<158>-Footnote-315702702
Ref: Núcleo e embutidos<158>-Footnote-325702768
Ref: Núcleo e embutidos<158>-Footnote-335702834
Ref: Núcleo e embutidos<158>-Footnote-345702900
Ref: Núcleo e embutidos<158>-Footnote-355702966
Ref: Núcleo e embutidos<158>-Footnote-365703032
Ref: Núcleo e embutidos<158>-Footnote-375703098
Ref: Núcleo e embutidos<158>-Footnote-385703164
Ref: Núcleo e embutidos<158>-Footnote-395703230
Ref: Núcleo e embutidos<158>-Footnote-405703296
Ref: Núcleo e embutidos<158>-Footnote-415703362
Ref: Núcleo e embutidos<158>-Footnote-425703428
Ref: Núcleo e embutidos<158>-Footnote-435703494
Ref: Núcleo e embutidos<158>-Footnote-445703560
Ref: Núcleo e embutidos<158>-Footnote-455703626
Ref: Núcleo e embutidos<158>-Footnote-465703692
Ref: Núcleo e embutidos<158>-Footnote-475703735
Node: Biblioteca<160>5703801
Ref: whatsnew/changelog id8665703922
Ref: 1caa5703922
Ref: Biblioteca<160>-Footnote-15714920
Ref: Biblioteca<160>-Footnote-25714985
Ref: Biblioteca<160>-Footnote-35715050
Ref: Biblioteca<160>-Footnote-45715115
Ref: Biblioteca<160>-Footnote-55715180
Ref: Biblioteca<160>-Footnote-65715245
Ref: Biblioteca<160>-Footnote-75715310
Ref: Biblioteca<160>-Footnote-85715375
Ref: Biblioteca<160>-Footnote-95715440
Ref: Biblioteca<160>-Footnote-105715505
Ref: Biblioteca<160>-Footnote-115715571
Ref: Biblioteca<160>-Footnote-125715637
Ref: Biblioteca<160>-Footnote-135715703
Ref: Biblioteca<160>-Footnote-145715769
Ref: Biblioteca<160>-Footnote-155715835
Ref: Biblioteca<160>-Footnote-165715901
Ref: Biblioteca<160>-Footnote-175715967
Ref: Biblioteca<160>-Footnote-185716035
Ref: Biblioteca<160>-Footnote-195716101
Ref: Biblioteca<160>-Footnote-205716167
Ref: Biblioteca<160>-Footnote-215716233
Ref: Biblioteca<160>-Footnote-225716299
Ref: Biblioteca<160>-Footnote-235716365
Ref: Biblioteca<160>-Footnote-245716431
Ref: Biblioteca<160>-Footnote-255716497
Ref: Biblioteca<160>-Footnote-265716564
Ref: Biblioteca<160>-Footnote-275716630
Ref: Biblioteca<160>-Footnote-285716696
Ref: Biblioteca<160>-Footnote-295716762
Ref: Biblioteca<160>-Footnote-305716828
Ref: Biblioteca<160>-Footnote-315716894
Ref: Biblioteca<160>-Footnote-325716960
Ref: Biblioteca<160>-Footnote-335717026
Ref: Biblioteca<160>-Footnote-345717092
Ref: Biblioteca<160>-Footnote-355717158
Ref: Biblioteca<160>-Footnote-365717224
Ref: Biblioteca<160>-Footnote-375717290
Ref: Biblioteca<160>-Footnote-385717356
Ref: Biblioteca<160>-Footnote-395717422
Ref: Biblioteca<160>-Footnote-405717488
Ref: Biblioteca<160>-Footnote-415717554
Ref: Biblioteca<160>-Footnote-425717620
Ref: Biblioteca<160>-Footnote-435717663
Ref: Biblioteca<160>-Footnote-445717729
Ref: Biblioteca<160>-Footnote-455717772
Ref: Biblioteca<160>-Footnote-465717838
Ref: Biblioteca<160>-Footnote-475717904
Ref: Biblioteca<160>-Footnote-485717970
Ref: Biblioteca<160>-Footnote-495718036
Ref: Biblioteca<160>-Footnote-505718102
Ref: Biblioteca<160>-Footnote-515718168
Ref: Biblioteca<160>-Footnote-525718234
Ref: Biblioteca<160>-Footnote-535718300
Ref: Biblioteca<160>-Footnote-545718356
Ref: Biblioteca<160>-Footnote-555718422
Ref: Biblioteca<160>-Footnote-565718488
Ref: Biblioteca<160>-Footnote-575718554
Ref: Biblioteca<160>-Footnote-585718620
Ref: Biblioteca<160>-Footnote-595718686
Ref: Biblioteca<160>-Footnote-605718752
Ref: Biblioteca<160>-Footnote-615718818
Ref: Biblioteca<160>-Footnote-625718884
Ref: Biblioteca<160>-Footnote-635718950
Ref: Biblioteca<160>-Footnote-645719016
Ref: Biblioteca<160>-Footnote-655719082
Ref: Biblioteca<160>-Footnote-665719148
Ref: Biblioteca<160>-Footnote-675719214
Ref: Biblioteca<160>-Footnote-685719280
Ref: Biblioteca<160>-Footnote-695719346
Ref: Biblioteca<160>-Footnote-705719412
Ref: Biblioteca<160>-Footnote-715719478
Ref: Biblioteca<160>-Footnote-725719544
Ref: Biblioteca<160>-Footnote-735719610
Ref: Biblioteca<160>-Footnote-745719676
Ref: Biblioteca<160>-Footnote-755719742
Ref: Biblioteca<160>-Footnote-765719808
Ref: Biblioteca<160>-Footnote-775719873
Ref: Biblioteca<160>-Footnote-785719938
Ref: Biblioteca<160>-Footnote-795720004
Ref: Biblioteca<160>-Footnote-805720070
Ref: Biblioteca<160>-Footnote-815720135
Ref: Biblioteca<160>-Footnote-825720201
Node: IDLE<56>5720267
Ref: whatsnew/changelog id8675720373
Ref: 1cab5720373
Ref: IDLE<56>-Footnote-15721139
Ref: IDLE<56>-Footnote-25721204
Ref: IDLE<56>-Footnote-35721269
Ref: IDLE<56>-Footnote-45721334
Ref: IDLE<56>-Footnote-55721399
Ref: IDLE<56>-Footnote-65721464
Node: API C<70>5721529
Ref: whatsnew/changelog id8685721630
Ref: 1cac5721630
Ref: API C<70>-Footnote-15721902
Ref: API C<70>-Footnote-25721967
Node: Testes<74>5722032
Ref: whatsnew/changelog id8695722141
Ref: 1cad5722141
Ref: Testes<74>-Footnote-15722663
Ref: Testes<74>-Footnote-25722728
Ref: Testes<74>-Footnote-35722793
Ref: Testes<74>-Footnote-45722858
Node: Construção<82>5722923
Ref: whatsnew/changelog id8705723044
Ref: 1cae5723044
Ref: Construção<82>-Footnote-15724441
Ref: Construção<82>-Footnote-25724506
Ref: Construção<82>-Footnote-35724571
Ref: Construção<82>-Footnote-45724636
Ref: Construção<82>-Footnote-55724701
Ref: Construção<82>-Footnote-65724766
Ref: Construção<82>-Footnote-75724831
Ref: Construção<82>-Footnote-85724896
Ref: Construção<82>-Footnote-95724961
Ref: Construção<82>-Footnote-105725026
Ref: Construção<82>-Footnote-115725092
Node: Ferramentas/Demos<44>5725158
Ref: whatsnew/changelog id8715725280
Ref: 1caf5725280
Ref: Ferramentas/Demos<44>-Footnote-15725571
Node: Windows<70>5725636
Ref: whatsnew/changelog id8725725733
Ref: 1cb05725733
Ref: Windows<70>-Footnote-15726702
Ref: Windows<70>-Footnote-25726767
Ref: Windows<70>-Footnote-35726832
Ref: Windows<70>-Footnote-45726896
Ref: Windows<70>-Footnote-55726961
Ref: Windows<70>-Footnote-65727026
Ref: Windows<70>-Footnote-75727090
Ref: Windows<70>-Footnote-85727155
Ref: Windows<70>-Footnote-95727220
Ref: Windows<70>-Footnote-105727285
Ref: Windows<70>-Footnote-115727351
Node: Python 3 6 0 alpha 45727417
Ref: whatsnew/changelog python-3-6-0-alpha-45727540
Ref: 1cb15727540
Node: Núcleo e embutidos<159>5727822
Ref: whatsnew/changelog id8735727927
Ref: 1cb25727927
Ref: Núcleo e embutidos<159>-Footnote-15729888
Ref: Núcleo e embutidos<159>-Footnote-25729953
Ref: Núcleo e embutidos<159>-Footnote-35730018
Ref: Núcleo e embutidos<159>-Footnote-45730083
Ref: Núcleo e embutidos<159>-Footnote-55730148
Ref: Núcleo e embutidos<159>-Footnote-65730213
Ref: Núcleo e embutidos<159>-Footnote-75730278
Ref: Núcleo e embutidos<159>-Footnote-85730343
Ref: Núcleo e embutidos<159>-Footnote-95730408
Ref: Núcleo e embutidos<159>-Footnote-105730472
Ref: Núcleo e embutidos<159>-Footnote-115730538
Ref: Núcleo e embutidos<159>-Footnote-125730604
Ref: Núcleo e embutidos<159>-Footnote-135730670
Ref: Núcleo e embutidos<159>-Footnote-145730736
Node: Biblioteca<161>5730779
Ref: whatsnew/changelog id8745730901
Ref: 1cb35730901
Ref: Biblioteca<161>-Footnote-15735420
Ref: Biblioteca<161>-Footnote-25735485
Ref: Biblioteca<161>-Footnote-35735527
Ref: Biblioteca<161>-Footnote-45735592
Ref: Biblioteca<161>-Footnote-55735657
Ref: Biblioteca<161>-Footnote-65735722
Ref: Biblioteca<161>-Footnote-75735787
Ref: Biblioteca<161>-Footnote-85735852
Ref: Biblioteca<161>-Footnote-95735917
Ref: Biblioteca<161>-Footnote-105735982
Ref: Biblioteca<161>-Footnote-115736048
Ref: Biblioteca<161>-Footnote-125736091
Ref: Biblioteca<161>-Footnote-135736157
Ref: Biblioteca<161>-Footnote-145736223
Ref: Biblioteca<161>-Footnote-155736289
Ref: Biblioteca<161>-Footnote-165736355
Ref: Biblioteca<161>-Footnote-175736420
Ref: Biblioteca<161>-Footnote-185736486
Ref: Biblioteca<161>-Footnote-195736552
Ref: Biblioteca<161>-Footnote-205736618
Ref: Biblioteca<161>-Footnote-215736684
Ref: Biblioteca<161>-Footnote-225736750
Ref: Biblioteca<161>-Footnote-235736816
Ref: Biblioteca<161>-Footnote-245736882
Ref: Biblioteca<161>-Footnote-255736948
Ref: Biblioteca<161>-Footnote-265737014
Ref: Biblioteca<161>-Footnote-275737080
Ref: Biblioteca<161>-Footnote-285737146
Ref: Biblioteca<161>-Footnote-295737205
Ref: Biblioteca<161>-Footnote-305737270
Ref: Biblioteca<161>-Footnote-315737336
Ref: Biblioteca<161>-Footnote-325737402
Ref: Biblioteca<161>-Footnote-335737468
Ref: Biblioteca<161>-Footnote-345737511
Ref: Biblioteca<161>-Footnote-355737577
Ref: Biblioteca<161>-Footnote-365737642
Ref: Biblioteca<161>-Footnote-375737708
Ref: Biblioteca<161>-Footnote-385737774
Ref: Biblioteca<161>-Footnote-395737840
Node: IDLE<57>5737906
Ref: whatsnew/changelog id8755738014
Ref: 1cb45738014
Ref: IDLE<57>-Footnote-15739338
Ref: IDLE<57>-Footnote-25739403
Ref: IDLE<57>-Footnote-35739468
Ref: IDLE<57>-Footnote-45739533
Ref: IDLE<57>-Footnote-55739598
Ref: IDLE<57>-Footnote-65739663
Ref: IDLE<57>-Footnote-75739728
Ref: IDLE<57>-Footnote-85739793
Node: Testes<75>5739858
Ref: whatsnew/changelog id8765739962
Ref: 1cb55739962
Ref: Testes<75>-Footnote-15740553
Ref: Testes<75>-Footnote-25740618
Ref: Testes<75>-Footnote-35740683
Ref: Testes<75>-Footnote-45740748
Node: Windows<71>5740813
Ref: whatsnew/changelog id8775740925
Ref: 1cb65740925
Ref: Windows<71>-Footnote-15741301
Ref: Windows<71>-Footnote-25741366
Ref: Windows<71>-Footnote-35741431
Ref: Windows<71>-Footnote-45741473
Ref: Windows<71>-Footnote-55741538
Node: Construção<83>5741603
Ref: whatsnew/changelog id8785741696
Ref: 1cb75741696
Ref: Construção<83>-Footnote-15742609
Ref: Construção<83>-Footnote-25742674
Ref: Construção<83>-Footnote-35742739
Ref: Construção<83>-Footnote-45742804
Ref: Construção<83>-Footnote-55742869
Ref: Construção<83>-Footnote-65742934
Node: Python 3 6 0 alpha 35742999
Ref: whatsnew/changelog python-3-6-0-alpha-35743123
Ref: 1cb85743123
Node: Segurança<50>5743513
Ref: whatsnew/changelog id8795743617
Ref: 1cb95743617
Ref: Segurança<50>-Footnote-15743998
Ref: Segurança<50>-Footnote-25744063
Node: Núcleo e embutidos<160>5744128
Ref: whatsnew/changelog id8805744256
Ref: 1cba5744256
Ref: Núcleo e embutidos<160>-Footnote-15745010
Ref: Núcleo e embutidos<160>-Footnote-25745075
Ref: Núcleo e embutidos<160>-Footnote-35745140
Ref: Núcleo e embutidos<160>-Footnote-45745205
Node: Biblioteca<162>5745270
Ref: whatsnew/changelog id8815745392
Ref: 1cbb5745392
Ref: Biblioteca<162>-Footnote-15749511
Ref: Biblioteca<162>-Footnote-25749576
Ref: Biblioteca<162>-Footnote-35749641
Ref: Biblioteca<162>-Footnote-45749706
Ref: Biblioteca<162>-Footnote-55749771
Ref: Biblioteca<162>-Footnote-65749836
Ref: Biblioteca<162>-Footnote-75749901
Ref: Biblioteca<162>-Footnote-85749966
Ref: Biblioteca<162>-Footnote-95750031
Ref: Biblioteca<162>-Footnote-105750096
Ref: Biblioteca<162>-Footnote-115750162
Ref: Biblioteca<162>-Footnote-125750228
Ref: Biblioteca<162>-Footnote-135750294
Ref: Biblioteca<162>-Footnote-145750360
Ref: Biblioteca<162>-Footnote-155750426
Ref: Biblioteca<162>-Footnote-165750492
Ref: Biblioteca<162>-Footnote-175750558
Ref: Biblioteca<162>-Footnote-185750624
Ref: Biblioteca<162>-Footnote-195750690
Ref: Biblioteca<162>-Footnote-205750756
Ref: Biblioteca<162>-Footnote-215750822
Ref: Biblioteca<162>-Footnote-225750865
Ref: Biblioteca<162>-Footnote-235750931
Ref: Biblioteca<162>-Footnote-245750997
Ref: Biblioteca<162>-Footnote-255751062
Ref: Biblioteca<162>-Footnote-265751128
Node: IDLE<58>5751194
Ref: whatsnew/changelog id8825751301
Ref: 1cbc5751301
Ref: IDLE<58>-Footnote-15752967
Ref: IDLE<58>-Footnote-25753032
Ref: IDLE<58>-Footnote-35753097
Ref: IDLE<58>-Footnote-45753162
Ref: IDLE<58>-Footnote-55753227
Ref: IDLE<58>-Footnote-65753292
Ref: IDLE<58>-Footnote-75753357
Ref: IDLE<58>-Footnote-85753422
Ref: IDLE<58>-Footnote-95753487
Ref: IDLE<58>-Footnote-105753552
Node: API C<71>5753618
Ref: whatsnew/changelog id8835753726
Ref: 1cbd5753726
Ref: API C<71>-Footnote-15753966
Node: Construção<84>5754031
Ref: whatsnew/changelog id8845754152
Ref: 1cbe5754152
Ref: Construção<84>-Footnote-15755141
Ref: Construção<84>-Footnote-25755206
Ref: Construção<84>-Footnote-35755271
Ref: Construção<84>-Footnote-45755336
Ref: Construção<84>-Footnote-55755401
Node: Ferramentas/Demos<45>5755466
Ref: whatsnew/changelog id8855755596
Ref: 1cbf5755596
Ref: Ferramentas/Demos<45>-Footnote-15755892
Ref: Ferramentas/Demos<45>-Footnote-25755957
Node: Documentação<71>5756022
Ref: whatsnew/changelog id8865756146
Ref: 1cc05756146
Ref: Documentação<71>-Footnote-15756527
Ref: Documentação<71>-Footnote-25756592
Node: Testes<76>5756657
Ref: whatsnew/changelog id8875756751
Ref: 1cc15756751
Ref: Testes<76>-Footnote-15756921
Node: Python 3 6 0 alpha 25756986
Ref: whatsnew/changelog python-3-6-0-alpha-25757110
Ref: 1cc25757110
Node: Segurança<51>5757524
Ref: whatsnew/changelog id8885757628
Ref: 1cc35757628
Ref: Segurança<51>-Footnote-15758122
Ref: Segurança<51>-Footnote-25758187
Ref: Segurança<51>-Footnote-35758242
Ref: Segurança<51>-Footnote-45758297
Node: Núcleo e embutidos<161>5758362
Ref: whatsnew/changelog id8895758490
Ref: 1cc45758490
Ref: Núcleo e embutidos<161>-Footnote-15760125
Ref: Núcleo e embutidos<161>-Footnote-25760190
Ref: Núcleo e embutidos<161>-Footnote-35760255
Ref: Núcleo e embutidos<161>-Footnote-45760320
Ref: Núcleo e embutidos<161>-Footnote-55760385
Ref: Núcleo e embutidos<161>-Footnote-65760450
Ref: Núcleo e embutidos<161>-Footnote-75760492
Ref: Núcleo e embutidos<161>-Footnote-85760557
Ref: Núcleo e embutidos<161>-Footnote-95760622
Ref: Núcleo e embutidos<161>-Footnote-105760687
Ref: Núcleo e embutidos<161>-Footnote-115760753
Ref: Núcleo e embutidos<161>-Footnote-125760819
Node: Biblioteca<163>5760885
Ref: whatsnew/changelog id8905761007
Ref: 1cc55761007
Ref: Biblioteca<163>-Footnote-15766224
Ref: Biblioteca<163>-Footnote-25766289
Ref: Biblioteca<163>-Footnote-35766354
Ref: Biblioteca<163>-Footnote-45766419
Ref: Biblioteca<163>-Footnote-55766484
Ref: Biblioteca<163>-Footnote-65766549
Ref: Biblioteca<163>-Footnote-75766614
Ref: Biblioteca<163>-Footnote-85766679
Ref: Biblioteca<163>-Footnote-95766744
Ref: Biblioteca<163>-Footnote-105766786
Ref: Biblioteca<163>-Footnote-115766852
Ref: Biblioteca<163>-Footnote-125766918
Ref: Biblioteca<163>-Footnote-135766984
Ref: Biblioteca<163>-Footnote-145767027
Ref: Biblioteca<163>-Footnote-155767093
Ref: Biblioteca<163>-Footnote-165767136
Ref: Biblioteca<163>-Footnote-175767179
Ref: Biblioteca<163>-Footnote-185767245
Ref: Biblioteca<163>-Footnote-195767311
Ref: Biblioteca<163>-Footnote-205767377
Ref: Biblioteca<163>-Footnote-215767443
Ref: Biblioteca<163>-Footnote-225767509
Ref: Biblioteca<163>-Footnote-235767575
Ref: Biblioteca<163>-Footnote-245767641
Ref: Biblioteca<163>-Footnote-255767707
Ref: Biblioteca<163>-Footnote-265767773
Ref: Biblioteca<163>-Footnote-275767839
Ref: Biblioteca<163>-Footnote-285767905
Ref: Biblioteca<163>-Footnote-295767971
Ref: Biblioteca<163>-Footnote-305768037
Ref: Biblioteca<163>-Footnote-315768103
Ref: Biblioteca<163>-Footnote-325768169
Ref: Biblioteca<163>-Footnote-335768235
Ref: Biblioteca<163>-Footnote-345768301
Ref: Biblioteca<163>-Footnote-355768367
Node: IDLE<59>5768433
Ref: whatsnew/changelog id8915768549
Ref: 1cc65768549
Ref: IDLE<59>-Footnote-15771202
Ref: IDLE<59>-Footnote-25771266
Ref: IDLE<59>-Footnote-35771331
Ref: IDLE<59>-Footnote-45771396
Ref: IDLE<59>-Footnote-55771461
Ref: IDLE<59>-Footnote-65771526
Ref: IDLE<59>-Footnote-75771591
Ref: IDLE<59>-Footnote-85771656
Ref: IDLE<59>-Footnote-95771721
Ref: IDLE<59>-Footnote-105771786
Ref: IDLE<59>-Footnote-115771852
Ref: IDLE<59>-Footnote-125771918
Ref: IDLE<59>-Footnote-135771984
Ref: IDLE<59>-Footnote-145772050
Ref: IDLE<59>-Footnote-155772116
Ref: IDLE<59>-Footnote-165772182
Ref: IDLE<59>-Footnote-175772248
Ref: IDLE<59>-Footnote-185772314
Ref: IDLE<59>-Footnote-195772380
Node: Documentação<72>5772446
Ref: whatsnew/changelog id8925772557
Ref: 1cc75772557
Ref: Documentação<72>-Footnote-15773004
Ref: Documentação<72>-Footnote-25773069
Ref: Documentação<72>-Footnote-35773134
Ref: Documentação<72>-Footnote-45773176
Node: Testes<77>5773241
Ref: whatsnew/changelog id8935773355
Ref: 1cc85773355
Ref: Testes<77>-Footnote-15773737
Ref: Testes<77>-Footnote-25773802
Node: Windows<72>5773867
Ref: whatsnew/changelog id8945773979
Ref: 1cc95773979
Ref: Windows<72>-Footnote-15774389
Ref: Windows<72>-Footnote-25774454
Node: Construção<85>5774519
Ref: whatsnew/changelog id8955774630
Ref: 1cca5774630
Ref: Construção<85>-Footnote-15774919
Ref: Construção<85>-Footnote-25774984
Node: API C<72>5775049
Ref: whatsnew/changelog id8965775170
Ref: 1ccb5775170
Ref: API C<72>-Footnote-15775408
Ref: API C<72>-Footnote-25775473
Ref: API C<72>-Footnote-35775515
Node: Ferramentas/Demos<46>5775580
Ref: whatsnew/changelog id8975775676
Ref: 1ccc5775676
Ref: Ferramentas/Demos<46>-Footnote-15775886
Node: Python 3 6 0 alpha 15775951
Ref: whatsnew/changelog python-3-6-0-alpha-15776073
Ref: 1ccd5776073
Node: Segurança<52>5776487
Ref: whatsnew/changelog id8985776591
Ref: 1cce5776591
Ref: Segurança<52>-Footnote-15777085
Ref: Segurança<52>-Footnote-25777150
Ref: Segurança<52>-Footnote-35777215
Node: Núcleo e embutidos<162>5777280
Ref: whatsnew/changelog id8995777408
Ref: 1ccf5777408
Ref: Núcleo e embutidos<162>-Footnote-15790603
Ref: Núcleo e embutidos<162>-Footnote-25790668
Ref: Núcleo e embutidos<162>-Footnote-35790733
Ref: Núcleo e embutidos<162>-Footnote-45790798
Ref: Núcleo e embutidos<162>-Footnote-55790863
Ref: Núcleo e embutidos<162>-Footnote-65790928
Ref: Núcleo e embutidos<162>-Footnote-75790993
Ref: Núcleo e embutidos<162>-Footnote-85791058
Ref: Núcleo e embutidos<162>-Footnote-95791123
Ref: Núcleo e embutidos<162>-Footnote-105791188
Ref: Núcleo e embutidos<162>-Footnote-115791254
Ref: Núcleo e embutidos<162>-Footnote-125791320
Ref: Núcleo e embutidos<162>-Footnote-135791386
Ref: Núcleo e embutidos<162>-Footnote-145791452
Ref: Núcleo e embutidos<162>-Footnote-155791518
Ref: Núcleo e embutidos<162>-Footnote-165791584
Ref: Núcleo e embutidos<162>-Footnote-175791627
Ref: Núcleo e embutidos<162>-Footnote-185791693
Ref: Núcleo e embutidos<162>-Footnote-195791759
Ref: Núcleo e embutidos<162>-Footnote-205791825
Ref: Núcleo e embutidos<162>-Footnote-215791891
Ref: Núcleo e embutidos<162>-Footnote-225791957
Ref: Núcleo e embutidos<162>-Footnote-235792023
Ref: Núcleo e embutidos<162>-Footnote-245792066
Ref: Núcleo e embutidos<162>-Footnote-255792132
Ref: Núcleo e embutidos<162>-Footnote-265792198
Ref: Núcleo e embutidos<162>-Footnote-275792264
Ref: Núcleo e embutidos<162>-Footnote-285792330
Ref: Núcleo e embutidos<162>-Footnote-295792396
Ref: Núcleo e embutidos<162>-Footnote-305792462
Ref: Núcleo e embutidos<162>-Footnote-315792528
Ref: Núcleo e embutidos<162>-Footnote-325792594
Ref: Núcleo e embutidos<162>-Footnote-335792660
Ref: Núcleo e embutidos<162>-Footnote-345792726
Ref: Núcleo e embutidos<162>-Footnote-355792792
Ref: Núcleo e embutidos<162>-Footnote-365792858
Ref: Núcleo e embutidos<162>-Footnote-375792923
Ref: Núcleo e embutidos<162>-Footnote-385792989
Ref: Núcleo e embutidos<162>-Footnote-395793055
Ref: Núcleo e embutidos<162>-Footnote-405793121
Ref: Núcleo e embutidos<162>-Footnote-415793187
Ref: Núcleo e embutidos<162>-Footnote-425793253
Ref: Núcleo e embutidos<162>-Footnote-435793319
Ref: Núcleo e embutidos<162>-Footnote-445793385
Ref: Núcleo e embutidos<162>-Footnote-455793451
Ref: Núcleo e embutidos<162>-Footnote-465793517
Ref: Núcleo e embutidos<162>-Footnote-475793583
Ref: Núcleo e embutidos<162>-Footnote-485793649
Ref: Núcleo e embutidos<162>-Footnote-495793715
Ref: Núcleo e embutidos<162>-Footnote-505793781
Ref: Núcleo e embutidos<162>-Footnote-515793847
Ref: Núcleo e embutidos<162>-Footnote-525793913
Ref: Núcleo e embutidos<162>-Footnote-535793978
Ref: Núcleo e embutidos<162>-Footnote-545794044
Ref: Núcleo e embutidos<162>-Footnote-555794110
Ref: Núcleo e embutidos<162>-Footnote-565794176
Ref: Núcleo e embutidos<162>-Footnote-575794242
Ref: Núcleo e embutidos<162>-Footnote-585794308
Ref: Núcleo e embutidos<162>-Footnote-595794374
Ref: Núcleo e embutidos<162>-Footnote-605794440
Ref: Núcleo e embutidos<162>-Footnote-615794506
Ref: Núcleo e embutidos<162>-Footnote-625794572
Ref: Núcleo e embutidos<162>-Footnote-635794638
Ref: Núcleo e embutidos<162>-Footnote-645794704
Ref: Núcleo e embutidos<162>-Footnote-655794770
Ref: Núcleo e embutidos<162>-Footnote-665794836
Ref: Núcleo e embutidos<162>-Footnote-675794902
Ref: Núcleo e embutidos<162>-Footnote-685794968
Ref: Núcleo e embutidos<162>-Footnote-695795034
Ref: Núcleo e embutidos<162>-Footnote-705795100
Ref: Núcleo e embutidos<162>-Footnote-715795166
Ref: Núcleo e embutidos<162>-Footnote-725795232
Ref: Núcleo e embutidos<162>-Footnote-735795298
Ref: Núcleo e embutidos<162>-Footnote-745795364
Ref: Núcleo e embutidos<162>-Footnote-755795430
Ref: Núcleo e embutidos<162>-Footnote-765795496
Ref: Núcleo e embutidos<162>-Footnote-775795562
Ref: Núcleo e embutidos<162>-Footnote-785795628
Ref: Núcleo e embutidos<162>-Footnote-795795693
Ref: Núcleo e embutidos<162>-Footnote-805795759
Ref: Núcleo e embutidos<162>-Footnote-815795802
Ref: Núcleo e embutidos<162>-Footnote-825795868
Ref: Núcleo e embutidos<162>-Footnote-835795934
Ref: Núcleo e embutidos<162>-Footnote-845796000
Ref: Núcleo e embutidos<162>-Footnote-855796066
Ref: Núcleo e embutidos<162>-Footnote-865796132
Ref: Núcleo e embutidos<162>-Footnote-875796198
Node: Biblioteca<164>5796264
Ref: whatsnew/changelog id9005796386
Ref: 1cd15796386
Ref: Biblioteca<164>-Footnote-15827487
Ref: Biblioteca<164>-Footnote-25827552
Ref: Biblioteca<164>-Footnote-35827617
Ref: Biblioteca<164>-Footnote-45827682
Ref: Biblioteca<164>-Footnote-55827747
Ref: Biblioteca<164>-Footnote-65827812
Ref: Biblioteca<164>-Footnote-75827877
Ref: Biblioteca<164>-Footnote-85827942
Ref: Biblioteca<164>-Footnote-95828007
Ref: Biblioteca<164>-Footnote-105828072
Ref: Biblioteca<164>-Footnote-115828138
Ref: Biblioteca<164>-Footnote-125828204
Ref: Biblioteca<164>-Footnote-135828270
Ref: Biblioteca<164>-Footnote-145828336
Ref: Biblioteca<164>-Footnote-155828402
Ref: Biblioteca<164>-Footnote-165828468
Ref: Biblioteca<164>-Footnote-175828534
Ref: Biblioteca<164>-Footnote-185828600
Ref: Biblioteca<164>-Footnote-195828643
Ref: Biblioteca<164>-Footnote-205828709
Ref: Biblioteca<164>-Footnote-215828775
Ref: Biblioteca<164>-Footnote-225828841
Ref: Biblioteca<164>-Footnote-235828907
Ref: Biblioteca<164>-Footnote-245828973
Ref: Biblioteca<164>-Footnote-255829039
Ref: Biblioteca<164>-Footnote-265829105
Ref: Biblioteca<164>-Footnote-275829171
Ref: Biblioteca<164>-Footnote-285829237
Ref: Biblioteca<164>-Footnote-295829303
Ref: Biblioteca<164>-Footnote-305829369
Ref: Biblioteca<164>-Footnote-315829435
Ref: Biblioteca<164>-Footnote-325829501
Ref: Biblioteca<164>-Footnote-335829567
Ref: Biblioteca<164>-Footnote-345829633
Ref: Biblioteca<164>-Footnote-355829699
Ref: Biblioteca<164>-Footnote-365829765
Ref: Biblioteca<164>-Footnote-375829831
Ref: Biblioteca<164>-Footnote-385829897
Ref: Biblioteca<164>-Footnote-395829963
Ref: Biblioteca<164>-Footnote-405830029
Ref: Biblioteca<164>-Footnote-415830095
Ref: Biblioteca<164>-Footnote-425830161
Ref: Biblioteca<164>-Footnote-435830227
Ref: Biblioteca<164>-Footnote-445830293
Ref: Biblioteca<164>-Footnote-455830359
Ref: Biblioteca<164>-Footnote-465830425
Ref: Biblioteca<164>-Footnote-475830491
Ref: Biblioteca<164>-Footnote-485830557
Ref: Biblioteca<164>-Footnote-495830623
Ref: Biblioteca<164>-Footnote-505830689
Ref: Biblioteca<164>-Footnote-515830755
Ref: Biblioteca<164>-Footnote-525830821
Ref: Biblioteca<164>-Footnote-535830887
Ref: Biblioteca<164>-Footnote-545830953
Ref: Biblioteca<164>-Footnote-555831019
Ref: Biblioteca<164>-Footnote-565831085
Ref: Biblioteca<164>-Footnote-575831151
Ref: Biblioteca<164>-Footnote-585831217
Ref: Biblioteca<164>-Footnote-595831283
Ref: Biblioteca<164>-Footnote-605831349
Ref: Biblioteca<164>-Footnote-615831415
Ref: Biblioteca<164>-Footnote-625831481
Ref: Biblioteca<164>-Footnote-635831547
Ref: Biblioteca<164>-Footnote-645831613
Ref: Biblioteca<164>-Footnote-655831679
Ref: Biblioteca<164>-Footnote-665831745
Ref: Biblioteca<164>-Footnote-675831811
Ref: Biblioteca<164>-Footnote-685831877
Ref: Biblioteca<164>-Footnote-695831943
Ref: Biblioteca<164>-Footnote-705832009
Ref: Biblioteca<164>-Footnote-715832075
Ref: Biblioteca<164>-Footnote-725832141
Ref: Biblioteca<164>-Footnote-735832207
Ref: Biblioteca<164>-Footnote-745832273
Ref: Biblioteca<164>-Footnote-755832339
Ref: Biblioteca<164>-Footnote-765832405
Ref: Biblioteca<164>-Footnote-775832471
Ref: Biblioteca<164>-Footnote-785832537
Ref: Biblioteca<164>-Footnote-795832603
Ref: Biblioteca<164>-Footnote-805832669
Ref: Biblioteca<164>-Footnote-815832734
Ref: Biblioteca<164>-Footnote-825832800
Ref: Biblioteca<164>-Footnote-835832866
Ref: Biblioteca<164>-Footnote-845832932
Ref: Biblioteca<164>-Footnote-855832998
Ref: Biblioteca<164>-Footnote-865833064
Ref: Biblioteca<164>-Footnote-875833130
Ref: Biblioteca<164>-Footnote-885833196
Ref: Biblioteca<164>-Footnote-895833262
Ref: Biblioteca<164>-Footnote-905833328
Ref: Biblioteca<164>-Footnote-915833394
Ref: Biblioteca<164>-Footnote-925833460
Ref: Biblioteca<164>-Footnote-935833526
Ref: Biblioteca<164>-Footnote-945833592
Ref: Biblioteca<164>-Footnote-955833658
Ref: Biblioteca<164>-Footnote-965833724
Ref: Biblioteca<164>-Footnote-975833790
Ref: Biblioteca<164>-Footnote-985833856
Ref: Biblioteca<164>-Footnote-995833922
Ref: Biblioteca<164>-Footnote-1005833988
Ref: Biblioteca<164>-Footnote-1015834055
Ref: Biblioteca<164>-Footnote-1025834122
Ref: Biblioteca<164>-Footnote-1035834189
Ref: Biblioteca<164>-Footnote-1045834256
Ref: Biblioteca<164>-Footnote-1055834323
Ref: Biblioteca<164>-Footnote-1065834390
Ref: Biblioteca<164>-Footnote-1075834457
Ref: Biblioteca<164>-Footnote-1085834524
Ref: Biblioteca<164>-Footnote-1095834591
Ref: Biblioteca<164>-Footnote-1105834658
Ref: Biblioteca<164>-Footnote-1115834725
Ref: Biblioteca<164>-Footnote-1125834792
Ref: Biblioteca<164>-Footnote-1135834859
Ref: Biblioteca<164>-Footnote-1145834926
Ref: Biblioteca<164>-Footnote-1155834993
Ref: Biblioteca<164>-Footnote-1165835060
Ref: Biblioteca<164>-Footnote-1175835127
Ref: Biblioteca<164>-Footnote-1185835194
Ref: Biblioteca<164>-Footnote-1195835261
Ref: Biblioteca<164>-Footnote-1205835328
Ref: Biblioteca<164>-Footnote-1215835395
Ref: Biblioteca<164>-Footnote-1225835462
Ref: Biblioteca<164>-Footnote-1235835529
Ref: Biblioteca<164>-Footnote-1245835596
Ref: Biblioteca<164>-Footnote-1255835663
Ref: Biblioteca<164>-Footnote-1265835730
Ref: Biblioteca<164>-Footnote-1275835797
Ref: Biblioteca<164>-Footnote-1285835864
Ref: Biblioteca<164>-Footnote-1295835931
Ref: Biblioteca<164>-Footnote-1305835998
Ref: Biblioteca<164>-Footnote-1315836065
Ref: Biblioteca<164>-Footnote-1325836132
Ref: Biblioteca<164>-Footnote-1335836199
Ref: Biblioteca<164>-Footnote-1345836266
Ref: Biblioteca<164>-Footnote-1355836333
Ref: Biblioteca<164>-Footnote-1365836400
Ref: Biblioteca<164>-Footnote-1375836467
Ref: Biblioteca<164>-Footnote-1385836534
Ref: Biblioteca<164>-Footnote-1395836601
Ref: Biblioteca<164>-Footnote-1405836668
Ref: Biblioteca<164>-Footnote-1415836735
Ref: Biblioteca<164>-Footnote-1425836802
Ref: Biblioteca<164>-Footnote-1435836869
Ref: Biblioteca<164>-Footnote-1445836936
Ref: Biblioteca<164>-Footnote-1455837002
Ref: Biblioteca<164>-Footnote-1465837069
Ref: Biblioteca<164>-Footnote-1475837136
Ref: Biblioteca<164>-Footnote-1485837203
Ref: Biblioteca<164>-Footnote-1495837270
Ref: Biblioteca<164>-Footnote-1505837337
Ref: Biblioteca<164>-Footnote-1515837403
Ref: Biblioteca<164>-Footnote-1525837470
Ref: Biblioteca<164>-Footnote-1535837537
Ref: Biblioteca<164>-Footnote-1545837604
Ref: Biblioteca<164>-Footnote-1555837671
Ref: Biblioteca<164>-Footnote-1565837738
Ref: Biblioteca<164>-Footnote-1575837805
Ref: Biblioteca<164>-Footnote-1585837872
Ref: Biblioteca<164>-Footnote-1595837939
Ref: Biblioteca<164>-Footnote-1605838006
Ref: Biblioteca<164>-Footnote-1615838072
Ref: Biblioteca<164>-Footnote-1625838139
Ref: Biblioteca<164>-Footnote-1635838206
Ref: Biblioteca<164>-Footnote-1645838273
Ref: Biblioteca<164>-Footnote-1655838340
Ref: Biblioteca<164>-Footnote-1665838407
Ref: Biblioteca<164>-Footnote-1675838474
Ref: Biblioteca<164>-Footnote-1685838541
Ref: Biblioteca<164>-Footnote-1695838608
Ref: Biblioteca<164>-Footnote-1705838675
Ref: Biblioteca<164>-Footnote-1715838742
Ref: Biblioteca<164>-Footnote-1725838809
Ref: Biblioteca<164>-Footnote-1735838876
Ref: Biblioteca<164>-Footnote-1745838943
Ref: Biblioteca<164>-Footnote-1755839010
Ref: Biblioteca<164>-Footnote-1765839077
Ref: Biblioteca<164>-Footnote-1775839144
Ref: Biblioteca<164>-Footnote-1785839211
Ref: Biblioteca<164>-Footnote-1795839278
Ref: Biblioteca<164>-Footnote-1805839345
Ref: Biblioteca<164>-Footnote-1815839412
Ref: Biblioteca<164>-Footnote-1825839479
Ref: Biblioteca<164>-Footnote-1835839546
Ref: Biblioteca<164>-Footnote-1845839613
Ref: Biblioteca<164>-Footnote-1855839680
Ref: Biblioteca<164>-Footnote-1865839747
Ref: Biblioteca<164>-Footnote-1875839814
Ref: Biblioteca<164>-Footnote-1885839881
Ref: Biblioteca<164>-Footnote-1895839948
Ref: Biblioteca<164>-Footnote-1905840015
Ref: Biblioteca<164>-Footnote-1915840082
Ref: Biblioteca<164>-Footnote-1925840149
Ref: Biblioteca<164>-Footnote-1935840216
Ref: Biblioteca<164>-Footnote-1945840283
Ref: Biblioteca<164>-Footnote-1955840350
Ref: Biblioteca<164>-Footnote-1965840417
Ref: Biblioteca<164>-Footnote-1975840484
Ref: Biblioteca<164>-Footnote-1985840551
Ref: Biblioteca<164>-Footnote-1995840618
Ref: Biblioteca<164>-Footnote-2005840685
Ref: Biblioteca<164>-Footnote-2015840752
Ref: Biblioteca<164>-Footnote-2025840819
Ref: Biblioteca<164>-Footnote-2035840886
Ref: Biblioteca<164>-Footnote-2045840953
Ref: Biblioteca<164>-Footnote-2055841020
Ref: Biblioteca<164>-Footnote-2065841087
Ref: Biblioteca<164>-Footnote-2075841154
Ref: Biblioteca<164>-Footnote-2085841221
Ref: Biblioteca<164>-Footnote-2095841287
Ref: Biblioteca<164>-Footnote-2105841353
Ref: Biblioteca<164>-Footnote-2115841420
Ref: Biblioteca<164>-Footnote-2125841487
Ref: Biblioteca<164>-Footnote-2135841554
Ref: Biblioteca<164>-Footnote-2145841621
Ref: Biblioteca<164>-Footnote-2155841688
Ref: Biblioteca<164>-Footnote-2165841755
Ref: Biblioteca<164>-Footnote-2175841822
Ref: Biblioteca<164>-Footnote-2185841889
Ref: Biblioteca<164>-Footnote-2195841956
Ref: Biblioteca<164>-Footnote-2205842023
Ref: Biblioteca<164>-Footnote-2215842090
Ref: Biblioteca<164>-Footnote-2225842157
Ref: Biblioteca<164>-Footnote-2235842224
Ref: Biblioteca<164>-Footnote-2245842291
Node: IDLE<60>5842358
Ref: whatsnew/changelog id9015842474
Ref: 1cd35842474
Ref: IDLE<60>-Footnote-15848053
Ref: IDLE<60>-Footnote-25848118
Ref: IDLE<60>-Footnote-35848183
Ref: IDLE<60>-Footnote-45848248
Ref: IDLE<60>-Footnote-55848313
Ref: IDLE<60>-Footnote-65848378
Ref: IDLE<60>-Footnote-75848443
Ref: IDLE<60>-Footnote-85848508
Ref: IDLE<60>-Footnote-95848573
Ref: IDLE<60>-Footnote-105848638
Ref: IDLE<60>-Footnote-115848704
Ref: IDLE<60>-Footnote-125848770
Ref: IDLE<60>-Footnote-135848836
Ref: IDLE<60>-Footnote-145848902
Ref: IDLE<60>-Footnote-155848968
Ref: IDLE<60>-Footnote-165849034
Ref: IDLE<60>-Footnote-175849100
Ref: IDLE<60>-Footnote-185849166
Ref: IDLE<60>-Footnote-195849232
Ref: IDLE<60>-Footnote-205849298
Ref: IDLE<60>-Footnote-215849364
Ref: IDLE<60>-Footnote-225849430
Ref: IDLE<60>-Footnote-235849496
Ref: IDLE<60>-Footnote-245849562
Ref: IDLE<60>-Footnote-255849628
Ref: IDLE<60>-Footnote-265849694
Ref: IDLE<60>-Footnote-275849760
Ref: IDLE<60>-Footnote-285849826
Node: Documentação<73>5849892
Ref: whatsnew/changelog id9025850003
Ref: 1cd45850003
Ref: Documentação<73>-Footnote-15850799
Ref: Documentação<73>-Footnote-25850864
Ref: Documentação<73>-Footnote-35850928
Ref: Documentação<73>-Footnote-45850993
Ref: Documentação<73>-Footnote-55851058
Node: Testes<78>5851123
Ref: whatsnew/changelog id9035851242
Ref: 1cd55851242
Ref: Testes<78>-Footnote-15853000
Ref: Testes<78>-Footnote-25853065
Ref: Testes<78>-Footnote-35853130
Ref: Testes<78>-Footnote-45853195
Ref: Testes<78>-Footnote-55853260
Ref: Testes<78>-Footnote-65853325
Ref: Testes<78>-Footnote-75853390
Ref: Testes<78>-Footnote-85853455
Ref: Testes<78>-Footnote-95853520
Ref: Testes<78>-Footnote-105853585
Ref: Testes<78>-Footnote-115853651
Ref: Testes<78>-Footnote-125853717
Ref: Testes<78>-Footnote-135853783
Node: Construção<86>5853849
Ref: whatsnew/changelog id9045853961
Ref: 1cd65853961
Ref: Construção<86>-Footnote-15856703
Ref: Construção<86>-Footnote-25856768
Ref: Construção<86>-Footnote-35856833
Ref: Construção<86>-Footnote-45856898
Ref: Construção<86>-Footnote-55856963
Ref: Construção<86>-Footnote-65857028
Ref: Construção<86>-Footnote-75857093
Ref: Construção<86>-Footnote-85857158
Ref: Construção<86>-Footnote-95857223
Ref: Construção<86>-Footnote-105857288
Ref: Construção<86>-Footnote-115857354
Ref: Construção<86>-Footnote-125857420
Ref: Construção<86>-Footnote-135857486
Ref: Construção<86>-Footnote-145857552
Ref: Construção<86>-Footnote-155857618
Ref: Construção<86>-Footnote-165857684
Ref: Construção<86>-Footnote-175857750
Ref: Construção<86>-Footnote-185857816
Ref: Construção<86>-Footnote-195857882
Node: Windows<73>5857948
Ref: whatsnew/changelog id9055858071
Ref: 1cd75858071
Ref: Windows<73>-Footnote-15858719
Ref: Windows<73>-Footnote-25858784
Ref: Windows<73>-Footnote-35858849
Ref: Windows<73>-Footnote-45858914
Ref: Windows<73>-Footnote-55858979
Ref: Windows<73>-Footnote-65859044
Node: Ferramentas/Demos<47>5859109
Ref: whatsnew/changelog id9065859225
Ref: 1cd85859225
Ref: Ferramentas/Demos<47>-Footnote-15860027
Ref: Ferramentas/Demos<47>-Footnote-25860092
Ref: Ferramentas/Demos<47>-Footnote-35860157
Ref: Ferramentas/Demos<47>-Footnote-45860222
Ref: Ferramentas/Demos<47>-Footnote-55860287
Ref: Ferramentas/Demos<47>-Footnote-65860352
Node: API C<73>5860417
Ref: whatsnew/changelog id9075860513
Ref: 1cd95860513
Ref: API C<73>-Footnote-15861010
Ref: API C<73>-Footnote-25861075
Node: Python 3 5 5 final5861140
Ref: whatsnew/changelog python-3-5-5-final5861274
Ref: 1cda5861274
Node: Python 3 5 5 release candidate 15861409
Ref: whatsnew/changelog python-3-5-5-release-candidate-15861541
Ref: 1cdb5861541
Node: Segurança<53>5861779
Ref: whatsnew/changelog id9085861895
Ref: 1cdc5861895
Ref: Segurança<53>-Footnote-15863169
Ref: Segurança<53>-Footnote-25863234
Ref: Segurança<53>-Footnote-35863299
Ref: Segurança<53>-Footnote-45863364
Ref: Segurança<53>-Footnote-55863429
Ref: Segurança<53>-Footnote-65863487
Node: Núcleo e embutidos<163>5863552
Ref: whatsnew/changelog id9095863692
Ref: 1cdd5863692
Ref: Núcleo e embutidos<163>-Footnote-15863920
Node: Biblioteca<165>5863985
Ref: whatsnew/changelog id9105864102
Ref: 1cde5864102
Ref: Biblioteca<165>-Footnote-15864635
Ref: Biblioteca<165>-Footnote-25864700
Node: Python 3 5 4 final5864765
Ref: whatsnew/changelog python-3-5-4-final5864911
Ref: 1cdf5864911
Node: Biblioteca<166>5865044
Ref: whatsnew/changelog id9115865114
Ref: 1ce05865114
Ref: Biblioteca<166>-Footnote-15865320
Node: Python 3 5 4 release candidate 15865385
Ref: whatsnew/changelog python-3-5-4-release-candidate-15865517
Ref: 1ce15865517
Node: Segurança<54>5865895
Ref: whatsnew/changelog id9125866011
Ref: 1ce25866011
Ref: Segurança<54>-Footnote-15867342
Ref: Segurança<54>-Footnote-25867407
Ref: Segurança<54>-Footnote-35867472
Ref: Segurança<54>-Footnote-45867527
Ref: Segurança<54>-Footnote-55867582
Ref: Segurança<54>-Footnote-65867637
Ref: Segurança<54>-Footnote-75867692
Ref: Segurança<54>-Footnote-85867747
Ref: Segurança<54>-Footnote-95867802
Ref: Segurança<54>-Footnote-105867867
Ref: Segurança<54>-Footnote-115867933
Ref: Segurança<54>-Footnote-125867989
Node: Núcleo e embutidos<164>5868045
Ref: whatsnew/changelog id9135868185
Ref: 1ce35868185
Ref: Núcleo e embutidos<164>-Footnote-15870445
Ref: Núcleo e embutidos<164>-Footnote-25870510
Ref: Núcleo e embutidos<164>-Footnote-35870575
Ref: Núcleo e embutidos<164>-Footnote-45870640
Ref: Núcleo e embutidos<164>-Footnote-55870705
Ref: Núcleo e embutidos<164>-Footnote-65870770
Ref: Núcleo e embutidos<164>-Footnote-75870835
Ref: Núcleo e embutidos<164>-Footnote-85870900
Ref: Núcleo e embutidos<164>-Footnote-95870965
Ref: Núcleo e embutidos<164>-Footnote-105871030
Ref: Núcleo e embutidos<164>-Footnote-115871096
Ref: Núcleo e embutidos<164>-Footnote-125871162
Ref: Núcleo e embutidos<164>-Footnote-135871228
Ref: Núcleo e embutidos<164>-Footnote-145871294
Ref: Núcleo e embutidos<164>-Footnote-155871360
Node: Biblioteca<167>5871426
Ref: whatsnew/changelog id9145871570
Ref: 1ce45871570
Ref: Biblioteca<167>-Footnote-15881779
Ref: Biblioteca<167>-Footnote-25881844
Ref: Biblioteca<167>-Footnote-35881909
Ref: Biblioteca<167>-Footnote-45881974
Ref: Biblioteca<167>-Footnote-55882039
Ref: Biblioteca<167>-Footnote-65882104
Ref: Biblioteca<167>-Footnote-75882169
Ref: Biblioteca<167>-Footnote-85882234
Ref: Biblioteca<167>-Footnote-95882299
Ref: Biblioteca<167>-Footnote-105882364
Ref: Biblioteca<167>-Footnote-115882430
Ref: Biblioteca<167>-Footnote-125882496
Ref: Biblioteca<167>-Footnote-135882562
Ref: Biblioteca<167>-Footnote-145882628
Ref: Biblioteca<167>-Footnote-155882694
Ref: Biblioteca<167>-Footnote-165882760
Ref: Biblioteca<167>-Footnote-175882826
Ref: Biblioteca<167>-Footnote-185882892
Ref: Biblioteca<167>-Footnote-195882958
Ref: Biblioteca<167>-Footnote-205883024
Ref: Biblioteca<167>-Footnote-215883090
Ref: Biblioteca<167>-Footnote-225883156
Ref: Biblioteca<167>-Footnote-235883222
Ref: Biblioteca<167>-Footnote-245883288
Ref: Biblioteca<167>-Footnote-255883354
Ref: Biblioteca<167>-Footnote-265883420
Ref: Biblioteca<167>-Footnote-275883486
Ref: Biblioteca<167>-Footnote-285883552
Ref: Biblioteca<167>-Footnote-295883618
Ref: Biblioteca<167>-Footnote-305883684
Ref: Biblioteca<167>-Footnote-315883750
Ref: Biblioteca<167>-Footnote-325883816
Ref: Biblioteca<167>-Footnote-335883882
Ref: Biblioteca<167>-Footnote-345883948
Ref: Biblioteca<167>-Footnote-355884014
Ref: Biblioteca<167>-Footnote-365884080
Ref: Biblioteca<167>-Footnote-375884146
Ref: Biblioteca<167>-Footnote-385884212
Ref: Biblioteca<167>-Footnote-395884278
Ref: Biblioteca<167>-Footnote-405884344
Ref: Biblioteca<167>-Footnote-415884410
Ref: Biblioteca<167>-Footnote-425884476
Ref: Biblioteca<167>-Footnote-435884542
Ref: Biblioteca<167>-Footnote-445884608
Ref: Biblioteca<167>-Footnote-455884674
Ref: Biblioteca<167>-Footnote-465884740
Ref: Biblioteca<167>-Footnote-475884806
Ref: Biblioteca<167>-Footnote-485884872
Ref: Biblioteca<167>-Footnote-495884938
Ref: Biblioteca<167>-Footnote-505885004
Ref: Biblioteca<167>-Footnote-515885070
Ref: Biblioteca<167>-Footnote-525885136
Ref: Biblioteca<167>-Footnote-535885202
Ref: Biblioteca<167>-Footnote-545885268
Ref: Biblioteca<167>-Footnote-555885333
Ref: Biblioteca<167>-Footnote-565885399
Ref: Biblioteca<167>-Footnote-575885465
Ref: Biblioteca<167>-Footnote-585885531
Ref: Biblioteca<167>-Footnote-595885597
Ref: Biblioteca<167>-Footnote-605885663
Ref: Biblioteca<167>-Footnote-615885729
Ref: Biblioteca<167>-Footnote-625885795
Ref: Biblioteca<167>-Footnote-635885861
Ref: Biblioteca<167>-Footnote-645885927
Ref: Biblioteca<167>-Footnote-655885993
Ref: Biblioteca<167>-Footnote-665886059
Ref: Biblioteca<167>-Footnote-675886125
Ref: Biblioteca<167>-Footnote-685886191
Ref: Biblioteca<167>-Footnote-695886257
Ref: Biblioteca<167>-Footnote-705886323
Ref: Biblioteca<167>-Footnote-715886389
Ref: Biblioteca<167>-Footnote-725886455
Ref: Biblioteca<167>-Footnote-735886521
Ref: Biblioteca<167>-Footnote-745886587
Node: Documentação<74>5886653
Ref: whatsnew/changelog id9155886783
Ref: 1ce55886783
Ref: Documentação<74>-Footnote-15887495
Ref: Documentação<74>-Footnote-25887560
Ref: Documentação<74>-Footnote-35887625
Ref: Documentação<74>-Footnote-45887690
Ref: Documentação<74>-Footnote-55887755
Ref: Documentação<74>-Footnote-65887820
Node: Testes<79>5887885
Ref: whatsnew/changelog id9165888016
Ref: 1ce65888016
Ref: Testes<79>-Footnote-15890127
Ref: Testes<79>-Footnote-25890192
Ref: Testes<79>-Footnote-35890257
Ref: Testes<79>-Footnote-45890322
Ref: Testes<79>-Footnote-55890387
Ref: Testes<79>-Footnote-65890452
Ref: Testes<79>-Footnote-75890517
Ref: Testes<79>-Footnote-85890582
Ref: Testes<79>-Footnote-95890647
Node: Construção<87>5890712
Ref: whatsnew/changelog id9175890836
Ref: 1ce75890836
Ref: Construção<87>-Footnote-15891366
Ref: Construção<87>-Footnote-25891431
Ref: Construção<87>-Footnote-35891496
Node: Windows<74>5891561
Ref: whatsnew/changelog id9185891684
Ref: 1ce85891684
Ref: Windows<74>-Footnote-15891944
Ref: Windows<74>-Footnote-25892009
Node: API C<74>5892074
Ref: whatsnew/changelog id9195892172
Ref: 1ce95892172
Ref: API C<74>-Footnote-15892781
Ref: API C<74>-Footnote-25892846
Node: Python 3 5 3 final5892911
Ref: whatsnew/changelog python-3-5-3-final5893057
Ref: 1cea5893057
Node: Python 3 5 3 release candidate 15893211
Ref: whatsnew/changelog python-3-5-3-release-candidate-15893343
Ref: 1ceb5893343
Node: Segurança<55>5893783
Ref: whatsnew/changelog id9205893899
Ref: 1cec5893899
Ref: Segurança<55>-Footnote-15894282
Ref: Segurança<55>-Footnote-25894347
Node: Núcleo e embutidos<165>5894412
Ref: whatsnew/changelog id9215894552
Ref: 1ced5894552
Ref: Núcleo e embutidos<165>-Footnote-15900015
Ref: Núcleo e embutidos<165>-Footnote-25900080
Ref: Núcleo e embutidos<165>-Footnote-35900145
Ref: Núcleo e embutidos<165>-Footnote-45900210
Ref: Núcleo e embutidos<165>-Footnote-55900275
Ref: Núcleo e embutidos<165>-Footnote-65900340
Ref: Núcleo e embutidos<165>-Footnote-75900405
Ref: Núcleo e embutidos<165>-Footnote-85900470
Ref: Núcleo e embutidos<165>-Footnote-95900535
Ref: Núcleo e embutidos<165>-Footnote-105900600
Ref: Núcleo e embutidos<165>-Footnote-115900666
Ref: Núcleo e embutidos<165>-Footnote-125900732
Ref: Núcleo e embutidos<165>-Footnote-135900798
Ref: Núcleo e embutidos<165>-Footnote-145900864
Ref: Núcleo e embutidos<165>-Footnote-155900930
Ref: Núcleo e embutidos<165>-Footnote-165900996
Ref: Núcleo e embutidos<165>-Footnote-175901062
Ref: Núcleo e embutidos<165>-Footnote-185901128
Ref: Núcleo e embutidos<165>-Footnote-195901194
Ref: Núcleo e embutidos<165>-Footnote-205901260
Ref: Núcleo e embutidos<165>-Footnote-215901326
Ref: Núcleo e embutidos<165>-Footnote-225901392
Ref: Núcleo e embutidos<165>-Footnote-235901458
Ref: Núcleo e embutidos<165>-Footnote-245901524
Ref: Núcleo e embutidos<165>-Footnote-255901590
Ref: Núcleo e embutidos<165>-Footnote-265901656
Ref: Núcleo e embutidos<165>-Footnote-275901722
Ref: Núcleo e embutidos<165>-Footnote-285901788
Ref: Núcleo e embutidos<165>-Footnote-295901854
Ref: Núcleo e embutidos<165>-Footnote-305901920
Ref: Núcleo e embutidos<165>-Footnote-315901986
Ref: Núcleo e embutidos<165>-Footnote-325902052
Ref: Núcleo e embutidos<165>-Footnote-335902118
Ref: Núcleo e embutidos<165>-Footnote-345902184
Ref: Núcleo e embutidos<165>-Footnote-355902250
Ref: Núcleo e embutidos<165>-Footnote-365902316
Ref: Núcleo e embutidos<165>-Footnote-375902382
Ref: Núcleo e embutidos<165>-Footnote-385902448
Ref: Núcleo e embutidos<165>-Footnote-395902514
Ref: Núcleo e embutidos<165>-Footnote-405902580
Ref: Núcleo e embutidos<165>-Footnote-415902646
Ref: Núcleo e embutidos<165>-Footnote-425902712
Ref: Núcleo e embutidos<165>-Footnote-435902778
Node: Biblioteca<168>5902844
Ref: whatsnew/changelog id9225902978
Ref: 1cee5902978
Ref: Biblioteca<168>-Footnote-15918999
Ref: Biblioteca<168>-Footnote-25919064
Ref: Biblioteca<168>-Footnote-35919129
Ref: Biblioteca<168>-Footnote-45919194
Ref: Biblioteca<168>-Footnote-55919259
Ref: Biblioteca<168>-Footnote-65919323
Ref: Biblioteca<168>-Footnote-75919388
Ref: Biblioteca<168>-Footnote-85919453
Ref: Biblioteca<168>-Footnote-95919518
Ref: Biblioteca<168>-Footnote-105919583
Ref: Biblioteca<168>-Footnote-115919649
Ref: Biblioteca<168>-Footnote-125919715
Ref: Biblioteca<168>-Footnote-135919781
Ref: Biblioteca<168>-Footnote-145919847
Ref: Biblioteca<168>-Footnote-155919913
Ref: Biblioteca<168>-Footnote-165919979
Ref: Biblioteca<168>-Footnote-175920045
Ref: Biblioteca<168>-Footnote-185920111
Ref: Biblioteca<168>-Footnote-195920177
Ref: Biblioteca<168>-Footnote-205920243
Ref: Biblioteca<168>-Footnote-215920309
Ref: Biblioteca<168>-Footnote-225920375
Ref: Biblioteca<168>-Footnote-235920441
Ref: Biblioteca<168>-Footnote-245920507
Ref: Biblioteca<168>-Footnote-255920573
Ref: Biblioteca<168>-Footnote-265920639
Ref: Biblioteca<168>-Footnote-275920705
Ref: Biblioteca<168>-Footnote-285920771
Ref: Biblioteca<168>-Footnote-295920837
Ref: Biblioteca<168>-Footnote-305920903
Ref: Biblioteca<168>-Footnote-315920969
Ref: Biblioteca<168>-Footnote-325921035
Ref: Biblioteca<168>-Footnote-335921103
Ref: Biblioteca<168>-Footnote-345921169
Ref: Biblioteca<168>-Footnote-355921235
Ref: Biblioteca<168>-Footnote-365921301
Ref: Biblioteca<168>-Footnote-375921367
Ref: Biblioteca<168>-Footnote-385921433
Ref: Biblioteca<168>-Footnote-395921499
Ref: Biblioteca<168>-Footnote-405921565
Ref: Biblioteca<168>-Footnote-415921631
Ref: Biblioteca<168>-Footnote-425921697
Ref: Biblioteca<168>-Footnote-435921763
Ref: Biblioteca<168>-Footnote-445921829
Ref: Biblioteca<168>-Footnote-455921895
Ref: Biblioteca<168>-Footnote-465921961
Ref: Biblioteca<168>-Footnote-475922027
Ref: Biblioteca<168>-Footnote-485922093
Ref: Biblioteca<168>-Footnote-495922159
Ref: Biblioteca<168>-Footnote-505922225
Ref: Biblioteca<168>-Footnote-515922291
Ref: Biblioteca<168>-Footnote-525922357
Ref: Biblioteca<168>-Footnote-535922423
Ref: Biblioteca<168>-Footnote-545922489
Ref: Biblioteca<168>-Footnote-555922555
Ref: Biblioteca<168>-Footnote-565922621
Ref: Biblioteca<168>-Footnote-575922687
Ref: Biblioteca<168>-Footnote-585922753
Ref: Biblioteca<168>-Footnote-595922819
Ref: Biblioteca<168>-Footnote-605922885
Ref: Biblioteca<168>-Footnote-615922941
Ref: Biblioteca<168>-Footnote-625923007
Ref: Biblioteca<168>-Footnote-635923073
Ref: Biblioteca<168>-Footnote-645923139
Ref: Biblioteca<168>-Footnote-655923205
Ref: Biblioteca<168>-Footnote-665923271
Ref: Biblioteca<168>-Footnote-675923337
Ref: Biblioteca<168>-Footnote-685923403
Ref: Biblioteca<168>-Footnote-695923469
Ref: Biblioteca<168>-Footnote-705923535
Ref: Biblioteca<168>-Footnote-715923601
Ref: Biblioteca<168>-Footnote-725923667
Ref: Biblioteca<168>-Footnote-735923732
Ref: Biblioteca<168>-Footnote-745923798
Ref: Biblioteca<168>-Footnote-755923864
Ref: Biblioteca<168>-Footnote-765923930
Ref: Biblioteca<168>-Footnote-775923996
Ref: Biblioteca<168>-Footnote-785924062
Ref: Biblioteca<168>-Footnote-795924128
Ref: Biblioteca<168>-Footnote-805924194
Ref: Biblioteca<168>-Footnote-815924253
Ref: Biblioteca<168>-Footnote-825924319
Ref: Biblioteca<168>-Footnote-835924385
Ref: Biblioteca<168>-Footnote-845924451
Ref: Biblioteca<168>-Footnote-855924517
Ref: Biblioteca<168>-Footnote-865924583
Ref: Biblioteca<168>-Footnote-875924649
Ref: Biblioteca<168>-Footnote-885924715
Ref: Biblioteca<168>-Footnote-895924781
Ref: Biblioteca<168>-Footnote-905924847
Ref: Biblioteca<168>-Footnote-915924913
Ref: Biblioteca<168>-Footnote-925924979
Ref: Biblioteca<168>-Footnote-935925045
Ref: Biblioteca<168>-Footnote-945925111
Ref: Biblioteca<168>-Footnote-955925177
Ref: Biblioteca<168>-Footnote-965925243
Ref: Biblioteca<168>-Footnote-975925309
Ref: Biblioteca<168>-Footnote-985925352
Ref: Biblioteca<168>-Footnote-995925418
Ref: Biblioteca<168>-Footnote-1005925484
Ref: Biblioteca<168>-Footnote-1015925551
Ref: Biblioteca<168>-Footnote-1025925618
Ref: Biblioteca<168>-Footnote-1035925685
Ref: Biblioteca<168>-Footnote-1045925752
Ref: Biblioteca<168>-Footnote-1055925819
Ref: Biblioteca<168>-Footnote-1065925886
Ref: Biblioteca<168>-Footnote-1075925953
Ref: Biblioteca<168>-Footnote-1085926020
Ref: Biblioteca<168>-Footnote-1095926087
Ref: Biblioteca<168>-Footnote-1105926154
Ref: Biblioteca<168>-Footnote-1115926221
Ref: Biblioteca<168>-Footnote-1125926288
Ref: Biblioteca<168>-Footnote-1135926355
Ref: Biblioteca<168>-Footnote-1145926422
Ref: Biblioteca<168>-Footnote-1155926489
Ref: Biblioteca<168>-Footnote-1165926556
Ref: Biblioteca<168>-Footnote-1175926623
Ref: Biblioteca<168>-Footnote-1185926690
Ref: Biblioteca<168>-Footnote-1195926757
Ref: Biblioteca<168>-Footnote-1205926824
Ref: Biblioteca<168>-Footnote-1215926891
Ref: Biblioteca<168>-Footnote-1225926958
Ref: Biblioteca<168>-Footnote-1235927025
Ref: Biblioteca<168>-Footnote-1245927092
Ref: Biblioteca<168>-Footnote-1255927159
Ref: Biblioteca<168>-Footnote-1265927226
Node: IDLE<61>5927293
Ref: whatsnew/changelog id9235927412
Ref: 1cef5927412
Ref: IDLE<61>-Footnote-15928663
Ref: IDLE<61>-Footnote-25928728
Ref: IDLE<61>-Footnote-35928793
Ref: IDLE<61>-Footnote-45928858
Ref: IDLE<61>-Footnote-55928923
Ref: IDLE<61>-Footnote-65928988
Ref: IDLE<61>-Footnote-75929053
Ref: IDLE<61>-Footnote-85929118
Node: API C<75>5929183
Ref: whatsnew/changelog id9245929305
Ref: 1cf05929305
Ref: API C<75>-Footnote-15929637
Ref: API C<75>-Footnote-25929702
Node: Documentação<75>5929767
Ref: whatsnew/changelog id9255929891
Ref: 1cf15929891
Ref: Documentação<75>-Footnote-15930044
Node: Testes<80>5930109
Ref: whatsnew/changelog id9265930245
Ref: 1cf25930245
Ref: Testes<80>-Footnote-15930940
Ref: Testes<80>-Footnote-25931005
Ref: Testes<80>-Footnote-35931070
Ref: Testes<80>-Footnote-45931135
Ref: Testes<80>-Footnote-55931200
Ref: Testes<80>-Footnote-65931265
Node: Ferramentas/Demos<48>5931330
Ref: whatsnew/changelog id9275931459
Ref: 1cf35931459
Ref: Ferramentas/Demos<48>-Footnote-15931955
Ref: Ferramentas/Demos<48>-Footnote-25932020
Ref: Ferramentas/Demos<48>-Footnote-35932085
Node: Windows<75>5932150
Ref: whatsnew/changelog id9285932285
Ref: 1cf45932285
Ref: Windows<75>-Footnote-15932787
Ref: Windows<75>-Footnote-25932852
Ref: Windows<75>-Footnote-35932917
Ref: Windows<75>-Footnote-45932982
Ref: Windows<75>-Footnote-55933047
Node: Construção<88>5933112
Ref: whatsnew/changelog id9295933217
Ref: 1cf55933217
Ref: Construção<88>-Footnote-15935938
Ref: Construção<88>-Footnote-25936003
Ref: Construção<88>-Footnote-35936068
Ref: Construção<88>-Footnote-45936133
Ref: Construção<88>-Footnote-55936198
Ref: Construção<88>-Footnote-65936263
Ref: Construção<88>-Footnote-75936328
Ref: Construção<88>-Footnote-85936393
Ref: Construção<88>-Footnote-95936458
Ref: Construção<88>-Footnote-105936523
Ref: Construção<88>-Footnote-115936589
Ref: Construção<88>-Footnote-125936655
Ref: Construção<88>-Footnote-135936721
Ref: Construção<88>-Footnote-145936787
Ref: Construção<88>-Footnote-155936853
Ref: Construção<88>-Footnote-165936919
Ref: Construção<88>-Footnote-175936985
Ref: Construção<88>-Footnote-185937051
Ref: Construção<88>-Footnote-195937117
Ref: Construção<88>-Footnote-205937183
Ref: Construção<88>-Footnote-215937249
Ref: Construção<88>-Footnote-225937315
Node: Python 3 5 2 final5937381
Ref: whatsnew/changelog python-3-5-2-final5937527
Ref: 1cf65937527
Node: Núcleo e embutidos<166>5937718
Ref: whatsnew/changelog id9305937816
Ref: 1cf75937816
Ref: Núcleo e embutidos<166>-Footnote-15937979
Node: Testes<81>5938044
Ref: whatsnew/changelog id9315938159
Ref: 1cf85938159
Ref: Testes<81>-Footnote-15938323
Node: IDLE<62>5938388
Ref: whatsnew/changelog id9325938470
Ref: 1cf95938470
Ref: IDLE<62>-Footnote-15938626
Node: Python 3 5 2 release candidate 15938691
Ref: whatsnew/changelog python-3-5-2-release-candidate-15938823
Ref: 1cfa5938823
Node: Segurança<56>5939243
Ref: whatsnew/changelog id9335939359
Ref: 1cfb5939359
Ref: Segurança<56>-Footnote-15940271
Ref: Segurança<56>-Footnote-25940336
Ref: Segurança<56>-Footnote-35940391
Ref: Segurança<56>-Footnote-45940446
Ref: Segurança<56>-Footnote-55940511
Ref: Segurança<56>-Footnote-65940576
Ref: Segurança<56>-Footnote-75940641
Node: Núcleo e embutidos<167>5940706
Ref: whatsnew/changelog id9345940846
Ref: 1cfc5940846
Ref: Núcleo e embutidos<167>-Footnote-15946702
Ref: Núcleo e embutidos<167>-Footnote-25946767
Ref: Núcleo e embutidos<167>-Footnote-35946832
Ref: Núcleo e embutidos<167>-Footnote-45946897
Ref: Núcleo e embutidos<167>-Footnote-55946962
Ref: Núcleo e embutidos<167>-Footnote-65947027
Ref: Núcleo e embutidos<167>-Footnote-75947092
Ref: Núcleo e embutidos<167>-Footnote-85947157
Ref: Núcleo e embutidos<167>-Footnote-95947222
Ref: Núcleo e embutidos<167>-Footnote-105947287
Ref: Núcleo e embutidos<167>-Footnote-115947353
Ref: Núcleo e embutidos<167>-Footnote-125947419
Ref: Núcleo e embutidos<167>-Footnote-135947485
Ref: Núcleo e embutidos<167>-Footnote-145947551
Ref: Núcleo e embutidos<167>-Footnote-155947617
Ref: Núcleo e embutidos<167>-Footnote-165947683
Ref: Núcleo e embutidos<167>-Footnote-175947749
Ref: Núcleo e embutidos<167>-Footnote-185947814
Ref: Núcleo e embutidos<167>-Footnote-195947880
Ref: Núcleo e embutidos<167>-Footnote-205947946
Ref: Núcleo e embutidos<167>-Footnote-215948012
Ref: Núcleo e embutidos<167>-Footnote-225948078
Ref: Núcleo e embutidos<167>-Footnote-235948144
Ref: Núcleo e embutidos<167>-Footnote-245948210
Ref: Núcleo e embutidos<167>-Footnote-255948276
Ref: Núcleo e embutidos<167>-Footnote-265948342
Ref: Núcleo e embutidos<167>-Footnote-275948408
Ref: Núcleo e embutidos<167>-Footnote-285948474
Ref: Núcleo e embutidos<167>-Footnote-295948540
Ref: Núcleo e embutidos<167>-Footnote-305948606
Ref: Núcleo e embutidos<167>-Footnote-315948672
Ref: Núcleo e embutidos<167>-Footnote-325948715
Ref: Núcleo e embutidos<167>-Footnote-335948781
Ref: Núcleo e embutidos<167>-Footnote-345948847
Ref: Núcleo e embutidos<167>-Footnote-355948913
Ref: Núcleo e embutidos<167>-Footnote-365948979
Ref: Núcleo e embutidos<167>-Footnote-375949045
Ref: Núcleo e embutidos<167>-Footnote-385949111
Node: Biblioteca<169>5949177
Ref: whatsnew/changelog id9355949311
Ref: 1cfd5949311
Ref: Biblioteca<169>-Footnote-15966138
Ref: Biblioteca<169>-Footnote-25966203
Ref: Biblioteca<169>-Footnote-35966268
Ref: Biblioteca<169>-Footnote-45966310
Ref: Biblioteca<169>-Footnote-55966375
Ref: Biblioteca<169>-Footnote-65966440
Ref: Biblioteca<169>-Footnote-75966505
Ref: Biblioteca<169>-Footnote-85966570
Ref: Biblioteca<169>-Footnote-95966635
Ref: Biblioteca<169>-Footnote-105966700
Ref: Biblioteca<169>-Footnote-115966766
Ref: Biblioteca<169>-Footnote-125966832
Ref: Biblioteca<169>-Footnote-135966898
Ref: Biblioteca<169>-Footnote-145966964
Ref: Biblioteca<169>-Footnote-155967030
Ref: Biblioteca<169>-Footnote-165967096
Ref: Biblioteca<169>-Footnote-175967162
Ref: Biblioteca<169>-Footnote-185967228
Ref: Biblioteca<169>-Footnote-195967294
Ref: Biblioteca<169>-Footnote-205967360
Ref: Biblioteca<169>-Footnote-215967426
Ref: Biblioteca<169>-Footnote-225967492
Ref: Biblioteca<169>-Footnote-235967558
Ref: Biblioteca<169>-Footnote-245967624
Ref: Biblioteca<169>-Footnote-255967690
Ref: Biblioteca<169>-Footnote-265967756
Ref: Biblioteca<169>-Footnote-275967822
Ref: Biblioteca<169>-Footnote-285967888
Ref: Biblioteca<169>-Footnote-295967954
Ref: Biblioteca<169>-Footnote-305968020
Ref: Biblioteca<169>-Footnote-315968086
Ref: Biblioteca<169>-Footnote-325968152
Ref: Biblioteca<169>-Footnote-335968218
Ref: Biblioteca<169>-Footnote-345968284
Ref: Biblioteca<169>-Footnote-355968350
Ref: Biblioteca<169>-Footnote-365968416
Ref: Biblioteca<169>-Footnote-375968482
Ref: Biblioteca<169>-Footnote-385968548
Ref: Biblioteca<169>-Footnote-395968614
Ref: Biblioteca<169>-Footnote-405968680
Ref: Biblioteca<169>-Footnote-415968746
Ref: Biblioteca<169>-Footnote-425968812
Ref: Biblioteca<169>-Footnote-435968878
Ref: Biblioteca<169>-Footnote-445968944
Ref: Biblioteca<169>-Footnote-455969010
Ref: Biblioteca<169>-Footnote-465969076
Ref: Biblioteca<169>-Footnote-475969142
Ref: Biblioteca<169>-Footnote-485969208
Ref: Biblioteca<169>-Footnote-495969274
Ref: Biblioteca<169>-Footnote-505969340
Ref: Biblioteca<169>-Footnote-515969406
Ref: Biblioteca<169>-Footnote-525969472
Ref: Biblioteca<169>-Footnote-535969538
Ref: Biblioteca<169>-Footnote-545969604
Ref: Biblioteca<169>-Footnote-555969670
Ref: Biblioteca<169>-Footnote-565969736
Ref: Biblioteca<169>-Footnote-575969802
Ref: Biblioteca<169>-Footnote-585969868
Ref: Biblioteca<169>-Footnote-595969934
Ref: Biblioteca<169>-Footnote-605970000
Ref: Biblioteca<169>-Footnote-615970066
Ref: Biblioteca<169>-Footnote-625970131
Ref: Biblioteca<169>-Footnote-635970197
Ref: Biblioteca<169>-Footnote-645970263
Ref: Biblioteca<169>-Footnote-655970329
Ref: Biblioteca<169>-Footnote-665970395
Ref: Biblioteca<169>-Footnote-675970461
Ref: Biblioteca<169>-Footnote-685970527
Ref: Biblioteca<169>-Footnote-695970593
Ref: Biblioteca<169>-Footnote-705970659
Ref: Biblioteca<169>-Footnote-715970725
Ref: Biblioteca<169>-Footnote-725970791
Ref: Biblioteca<169>-Footnote-735970857
Ref: Biblioteca<169>-Footnote-745970923
Ref: Biblioteca<169>-Footnote-755970989
Ref: Biblioteca<169>-Footnote-765971055
Ref: Biblioteca<169>-Footnote-775971121
Ref: Biblioteca<169>-Footnote-785971187
Ref: Biblioteca<169>-Footnote-795971253
Ref: Biblioteca<169>-Footnote-805971319
Ref: Biblioteca<169>-Footnote-815971385
Ref: Biblioteca<169>-Footnote-825971451
Ref: Biblioteca<169>-Footnote-835971517
Ref: Biblioteca<169>-Footnote-845971583
Ref: Biblioteca<169>-Footnote-855971649
Ref: Biblioteca<169>-Footnote-865971715
Ref: Biblioteca<169>-Footnote-875971781
Ref: Biblioteca<169>-Footnote-885971847
Ref: Biblioteca<169>-Footnote-895971913
Ref: Biblioteca<169>-Footnote-905971979
Ref: Biblioteca<169>-Footnote-915972045
Ref: Biblioteca<169>-Footnote-925972111
Ref: Biblioteca<169>-Footnote-935972177
Ref: Biblioteca<169>-Footnote-945972243
Ref: Biblioteca<169>-Footnote-955972309
Ref: Biblioteca<169>-Footnote-965972375
Ref: Biblioteca<169>-Footnote-975972441
Ref: Biblioteca<169>-Footnote-985972507
Ref: Biblioteca<169>-Footnote-995972573
Ref: Biblioteca<169>-Footnote-1005972639
Ref: Biblioteca<169>-Footnote-1015972706
Ref: Biblioteca<169>-Footnote-1025972772
Ref: Biblioteca<169>-Footnote-1035972839
Ref: Biblioteca<169>-Footnote-1045972906
Ref: Biblioteca<169>-Footnote-1055972973
Ref: Biblioteca<169>-Footnote-1065973040
Ref: Biblioteca<169>-Footnote-1075973107
Ref: Biblioteca<169>-Footnote-1085973174
Ref: Biblioteca<169>-Footnote-1095973241
Ref: Biblioteca<169>-Footnote-1105973308
Ref: Biblioteca<169>-Footnote-1115973375
Ref: Biblioteca<169>-Footnote-1125973442
Ref: Biblioteca<169>-Footnote-1135973509
Ref: Biblioteca<169>-Footnote-1145973576
Ref: Biblioteca<169>-Footnote-1155973643
Ref: Biblioteca<169>-Footnote-1165973710
Ref: Biblioteca<169>-Footnote-1175973777
Ref: Biblioteca<169>-Footnote-1185973844
Ref: Biblioteca<169>-Footnote-1195973911
Ref: Biblioteca<169>-Footnote-1205973978
Node: IDLE<63>5974045
Ref: whatsnew/changelog id9365974173
Ref: 1cfe5974173
Ref: IDLE<63>-Footnote-15976536
Ref: IDLE<63>-Footnote-25976600
Ref: IDLE<63>-Footnote-35976665
Ref: IDLE<63>-Footnote-45976730
Ref: IDLE<63>-Footnote-55976795
Ref: IDLE<63>-Footnote-65976860
Ref: IDLE<63>-Footnote-75976925
Ref: IDLE<63>-Footnote-85976990
Ref: IDLE<63>-Footnote-95977055
Ref: IDLE<63>-Footnote-105977120
Ref: IDLE<63>-Footnote-115977186
Ref: IDLE<63>-Footnote-125977252
Ref: IDLE<63>-Footnote-135977318
Ref: IDLE<63>-Footnote-145977384
Ref: IDLE<63>-Footnote-155977450
Node: Documentação<76>5977516
Ref: whatsnew/changelog id9375977639
Ref: 1cff5977639
Ref: Documentação<76>-Footnote-15978599
Ref: Documentação<76>-Footnote-25978664
Ref: Documentação<76>-Footnote-35978729
Ref: Documentação<76>-Footnote-45978771
Ref: Documentação<76>-Footnote-55978836
Ref: Documentação<76>-Footnote-65978900
Ref: Documentação<76>-Footnote-75978965
Ref: Documentação<76>-Footnote-85979030
Node: Testes<82>5979095
Ref: whatsnew/changelog id9385979226
Ref: 1d005979226
Ref: Testes<82>-Footnote-15980103
Ref: Testes<82>-Footnote-25980168
Ref: Testes<82>-Footnote-35980233
Ref: Testes<82>-Footnote-45980298
Ref: Testes<82>-Footnote-55980363
Ref: Testes<82>-Footnote-65980428
Ref: Testes<82>-Footnote-75980493
Node: Construção<89>5980558
Ref: whatsnew/changelog id9395980682
Ref: 1d015980682
Ref: Construção<89>-Footnote-15983222
Ref: Construção<89>-Footnote-25983287
Ref: Construção<89>-Footnote-35983352
Ref: Construção<89>-Footnote-45983417
Ref: Construção<89>-Footnote-55983482
Ref: Construção<89>-Footnote-65983547
Ref: Construção<89>-Footnote-75983612
Ref: Construção<89>-Footnote-85983677
Ref: Construção<89>-Footnote-95983742
Ref: Construção<89>-Footnote-105983807
Ref: Construção<89>-Footnote-115983873
Ref: Construção<89>-Footnote-125983939
Ref: Construção<89>-Footnote-135984005
Ref: Construção<89>-Footnote-145984071
Ref: Construção<89>-Footnote-155984137
Ref: Construção<89>-Footnote-165984203
Ref: Construção<89>-Footnote-175984269
Node: Windows<76>5984335
Ref: whatsnew/changelog id9405984470
Ref: 1d025984470
Ref: Windows<76>-Footnote-15985180
Ref: Windows<76>-Footnote-25985245
Ref: Windows<76>-Footnote-35985310
Ref: Windows<76>-Footnote-45985375
Ref: Windows<76>-Footnote-55985440
Ref: Windows<76>-Footnote-65985505
Node: Ferramentas/Demos<49>5985570
Ref: whatsnew/changelog id9415985680
Ref: 1d035985680
Ref: Ferramentas/Demos<49>-Footnote-15986316
Ref: Ferramentas/Demos<49>-Footnote-25986381
Ref: Ferramentas/Demos<49>-Footnote-35986446
Ref: Ferramentas/Demos<49>-Footnote-45986511
Node: Python 3 5 1 final5986576
Ref: whatsnew/changelog python-3-5-1-final5986722
Ref: 1d045986722
Node: Núcleo e embutidos<168>5986897
Ref: whatsnew/changelog id9425986996
Ref: 1d055986996
Ref: Núcleo e embutidos<168>-Footnote-15987185
Node: Windows<77>5987250
Ref: whatsnew/changelog id9435987349
Ref: 1d065987349
Ref: Windows<77>-Footnote-15987541
Node: Python 3 5 1 release candidate 15987606
Ref: whatsnew/changelog python-3-5-1-release-candidate-15987738
Ref: 1d075987738
Node: Núcleo e embutidos<169>5988128
Ref: whatsnew/changelog id9445988245
Ref: 1d085988245
Ref: Núcleo e embutidos<169>-Footnote-15991396
Ref: Núcleo e embutidos<169>-Footnote-25991461
Ref: Núcleo e embutidos<169>-Footnote-35991526
Ref: Núcleo e embutidos<169>-Footnote-45991591
Ref: Núcleo e embutidos<169>-Footnote-55991656
Ref: Núcleo e embutidos<169>-Footnote-65991721
Ref: Núcleo e embutidos<169>-Footnote-75991786
Ref: Núcleo e embutidos<169>-Footnote-85991851
Ref: Núcleo e embutidos<169>-Footnote-95991916
Ref: Núcleo e embutidos<169>-Footnote-105991981
Ref: Núcleo e embutidos<169>-Footnote-115992047
Ref: Núcleo e embutidos<169>-Footnote-125992113
Ref: Núcleo e embutidos<169>-Footnote-135992179
Ref: Núcleo e embutidos<169>-Footnote-145992245
Ref: Núcleo e embutidos<169>-Footnote-155992311
Ref: Núcleo e embutidos<169>-Footnote-165992377
Ref: Núcleo e embutidos<169>-Footnote-175992443
Ref: Núcleo e embutidos<169>-Footnote-185992509
Ref: Núcleo e embutidos<169>-Footnote-195992575
Node: Biblioteca<170>5992641
Ref: whatsnew/changelog id9455992775
Ref: 1d095992775
Ref: Biblioteca<170>-Footnote-16003186
Ref: Biblioteca<170>-Footnote-26003251
Ref: Biblioteca<170>-Footnote-36003316
Ref: Biblioteca<170>-Footnote-46003381
Ref: Biblioteca<170>-Footnote-56003445
Ref: Biblioteca<170>-Footnote-66003510
Ref: Biblioteca<170>-Footnote-76003575
Ref: Biblioteca<170>-Footnote-86003640
Ref: Biblioteca<170>-Footnote-96003705
Ref: Biblioteca<170>-Footnote-106003770
Ref: Biblioteca<170>-Footnote-116003836
Ref: Biblioteca<170>-Footnote-126003902
Ref: Biblioteca<170>-Footnote-136003968
Ref: Biblioteca<170>-Footnote-146004034
Ref: Biblioteca<170>-Footnote-156004100
Ref: Biblioteca<170>-Footnote-166004166
Ref: Biblioteca<170>-Footnote-176004232
Ref: Biblioteca<170>-Footnote-186004298
Ref: Biblioteca<170>-Footnote-196004364
Ref: Biblioteca<170>-Footnote-206004430
Ref: Biblioteca<170>-Footnote-216004496
Ref: Biblioteca<170>-Footnote-226004562
Ref: Biblioteca<170>-Footnote-236004628
Ref: Biblioteca<170>-Footnote-246004694
Ref: Biblioteca<170>-Footnote-256004760
Ref: Biblioteca<170>-Footnote-266004826
Ref: Biblioteca<170>-Footnote-276004892
Ref: Biblioteca<170>-Footnote-286004958
Ref: Biblioteca<170>-Footnote-296005024
Ref: Biblioteca<170>-Footnote-306005090
Ref: Biblioteca<170>-Footnote-316005156
Ref: Biblioteca<170>-Footnote-326005222
Ref: Biblioteca<170>-Footnote-336005288
Ref: Biblioteca<170>-Footnote-346005354
Ref: Biblioteca<170>-Footnote-356005420
Ref: Biblioteca<170>-Footnote-366005486
Ref: Biblioteca<170>-Footnote-376005552
Ref: Biblioteca<170>-Footnote-386005618
Ref: Biblioteca<170>-Footnote-396005684
Ref: Biblioteca<170>-Footnote-406005750
Ref: Biblioteca<170>-Footnote-416005816
Ref: Biblioteca<170>-Footnote-426005882
Ref: Biblioteca<170>-Footnote-436005948
Ref: Biblioteca<170>-Footnote-446006014
Ref: Biblioteca<170>-Footnote-456006080
Ref: Biblioteca<170>-Footnote-466006146
Ref: Biblioteca<170>-Footnote-476006212
Ref: Biblioteca<170>-Footnote-486006278
Ref: Biblioteca<170>-Footnote-496006344
Ref: Biblioteca<170>-Footnote-506006410
Ref: Biblioteca<170>-Footnote-516006476
Ref: Biblioteca<170>-Footnote-526006542
Ref: Biblioteca<170>-Footnote-536006608
Ref: Biblioteca<170>-Footnote-546006674
Ref: Biblioteca<170>-Footnote-556006740
Ref: Biblioteca<170>-Footnote-566006806
Ref: Biblioteca<170>-Footnote-576006872
Ref: Biblioteca<170>-Footnote-586006938
Ref: Biblioteca<170>-Footnote-596007004
Ref: Biblioteca<170>-Footnote-606007070
Ref: Biblioteca<170>-Footnote-616007136
Ref: Biblioteca<170>-Footnote-626007202
Ref: Biblioteca<170>-Footnote-636007268
Ref: Biblioteca<170>-Footnote-646007334
Ref: Biblioteca<170>-Footnote-656007400
Ref: Biblioteca<170>-Footnote-666007466
Ref: Biblioteca<170>-Footnote-676007532
Ref: Biblioteca<170>-Footnote-686007598
Ref: Biblioteca<170>-Footnote-696007664
Ref: Biblioteca<170>-Footnote-706007730
Node: IDLE<64>6007796
Ref: whatsnew/changelog id9466007924
Ref: 1d0a6007924
Ref: IDLE<64>-Footnote-16012877
Ref: IDLE<64>-Footnote-26012942
Ref: IDLE<64>-Footnote-36013007
Ref: IDLE<64>-Footnote-46013072
Ref: IDLE<64>-Footnote-56013137
Ref: IDLE<64>-Footnote-66013202
Ref: IDLE<64>-Footnote-76013267
Ref: IDLE<64>-Footnote-86013332
Ref: IDLE<64>-Footnote-96013397
Ref: IDLE<64>-Footnote-106013462
Ref: IDLE<64>-Footnote-116013528
Ref: IDLE<64>-Footnote-126013594
Ref: IDLE<64>-Footnote-136013660
Ref: IDLE<64>-Footnote-146013726
Ref: IDLE<64>-Footnote-156013792
Ref: IDLE<64>-Footnote-166013858
Ref: IDLE<64>-Footnote-176013924
Ref: IDLE<64>-Footnote-186013990
Ref: IDLE<64>-Footnote-196014056
Ref: IDLE<64>-Footnote-206014122
Ref: IDLE<64>-Footnote-216014188
Ref: IDLE<64>-Footnote-226014254
Ref: IDLE<64>-Footnote-236014320
Ref: IDLE<64>-Footnote-246014386
Ref: IDLE<64>-Footnote-256014452
Node: Documentação<77>6014518
Ref: whatsnew/changelog id9476014641
Ref: 1d0b6014641
Ref: Documentação<77>-Footnote-16015724
Ref: Documentação<77>-Footnote-26015789
Ref: Documentação<77>-Footnote-36015854
Ref: Documentação<77>-Footnote-46015919
Ref: Documentação<77>-Footnote-56015984
Ref: Documentação<77>-Footnote-66016049
Node: Testes<83>6016114
Ref: whatsnew/changelog id9486016245
Ref: 1d0c6016245
Ref: Testes<83>-Footnote-16016756
Ref: Testes<83>-Footnote-26016821
Ref: Testes<83>-Footnote-36016886
Node: Construção<90>6016951
Ref: whatsnew/changelog id9496017075
Ref: 1d0d6017075
Ref: Construção<90>-Footnote-16017514
Ref: Construção<90>-Footnote-26017579
Ref: Construção<90>-Footnote-36017644
Node: Windows<78>6017709
Ref: whatsnew/changelog id9506017844
Ref: 1d0e6017844
Ref: Windows<78>-Footnote-16019119
Ref: Windows<78>-Footnote-26019184
Ref: Windows<78>-Footnote-36019249
Ref: Windows<78>-Footnote-46019314
Ref: Windows<78>-Footnote-56019379
Ref: Windows<78>-Footnote-66019444
Ref: Windows<78>-Footnote-76019509
Ref: Windows<78>-Footnote-86019574
Ref: Windows<78>-Footnote-96019639
Ref: Windows<78>-Footnote-106019704
Ref: Windows<78>-Footnote-116019770
Ref: Windows<78>-Footnote-126019836
Ref: Windows<78>-Footnote-136019902
Ref: Windows<78>-Footnote-146019968
Node: Ferramentas/Demos<50>6020034
Ref: whatsnew/changelog id9516020144
Ref: 1d0f6020144
Ref: Ferramentas/Demos<50>-Footnote-16020308
Node: Python 3 5 0 final6020373
Ref: whatsnew/changelog python-3-5-0-final6020519
Ref: 1d106020519
Node: Construção<91>6020655
Ref: whatsnew/changelog id9526020726
Ref: 1d116020726
Ref: Construção<91>-Footnote-16020916
Node: Python 3 5 0 release candidate 46020981
Ref: whatsnew/changelog python-3-5-0-release-candidate-46021127
Ref: 1d126021127
Node: Biblioteca<171>6021322
Ref: whatsnew/changelog id9536021431
Ref: 1d136021431
Ref: Biblioteca<171>-Footnote-16021568
Node: Construção<92>6021633
Ref: whatsnew/changelog id9546021742
Ref: 1d146021742
Ref: Construção<92>-Footnote-16021938
Node: Python 3 5 0 release candidate 36022003
Ref: whatsnew/changelog python-3-5-0-release-candidate-36022163
Ref: 1d156022163
Node: Núcleo e embutidos<170>6022373
Ref: whatsnew/changelog id9556022490
Ref: 1d166022490
Ref: Núcleo e embutidos<170>-Footnote-16022863
Ref: Núcleo e embutidos<170>-Footnote-26022928
Ref: Núcleo e embutidos<170>-Footnote-36022993
Ref: Núcleo e embutidos<170>-Footnote-46023058
Node: Biblioteca<172>6023100
Ref: whatsnew/changelog id9566023217
Ref: 1d176023217
Ref: Biblioteca<172>-Footnote-16023999
Ref: Biblioteca<172>-Footnote-26024064
Ref: Biblioteca<172>-Footnote-36024129
Ref: Biblioteca<172>-Footnote-46024194
Ref: Biblioteca<172>-Footnote-56024259
Node: Python 3 5 0 release candidate 26024324
Ref: whatsnew/changelog python-3-5-0-release-candidate-26024484
Ref: 1d186024484
Node: Núcleo e embutidos<171>6024694
Ref: whatsnew/changelog id9576024811
Ref: 1d196024811
Ref: Núcleo e embutidos<171>-Footnote-16025360
Ref: Núcleo e embutidos<171>-Footnote-26025425
Ref: Núcleo e embutidos<171>-Footnote-36025490
Node: Biblioteca<173>6025555
Ref: whatsnew/changelog id9586025672
Ref: 1d1a6025672
Ref: Biblioteca<173>-Footnote-16025961
Ref: Biblioteca<173>-Footnote-26026026
Ref: Biblioteca<173>-Footnote-36026091
Node: Python 3 5 0 release candidate 16026156
Ref: whatsnew/changelog python-3-5-0-release-candidate-16026303
Ref: 1d1b6026303
Node: Núcleo e embutidos<172>6026591
Ref: whatsnew/changelog id9596026708
Ref: 1d1c6026708
Ref: Núcleo e embutidos<172>-Footnote-16026891
Node: Biblioteca<174>6026956
Ref: whatsnew/changelog id9606027090
Ref: 1d1d6027090
Ref: Biblioteca<174>-Footnote-16028680
Ref: Biblioteca<174>-Footnote-26028745
Ref: Biblioteca<174>-Footnote-36028810
Ref: Biblioteca<174>-Footnote-46028875
Ref: Biblioteca<174>-Footnote-56028939
Ref: Biblioteca<174>-Footnote-66029004
Ref: Biblioteca<174>-Footnote-76029069
Ref: Biblioteca<174>-Footnote-86029134
Ref: Biblioteca<174>-Footnote-96029199
Ref: Biblioteca<174>-Footnote-106029264
Ref: Biblioteca<174>-Footnote-116029330
Ref: Biblioteca<174>-Footnote-126029396
Ref: Biblioteca<174>-Footnote-136029462
Ref: Biblioteca<174>-Footnote-146029528
Ref: Biblioteca<174>-Footnote-156029594
Node: IDLE<65>6029660
Ref: whatsnew/changelog id9616029788
Ref: 1d1e6029788
Ref: IDLE<65>-Footnote-16030541
Ref: IDLE<65>-Footnote-26030606
Ref: IDLE<65>-Footnote-36030671
Ref: IDLE<65>-Footnote-46030736
Node: Documentação<78>6030801
Ref: whatsnew/changelog id9626030924
Ref: 1d1f6030924
Ref: Documentação<78>-Footnote-16031586
Ref: Documentação<78>-Footnote-26031651
Ref: Documentação<78>-Footnote-36031716
Ref: Documentação<78>-Footnote-46031781
Node: Testes<84>6031846
Ref: whatsnew/changelog id9636031952
Ref: 1d206031952
Ref: Testes<84>-Footnote-16032194
Node: Python 3 5 0 beta 46032259
Ref: whatsnew/changelog python-3-5-0-beta-46032393
Ref: 1d216032393
Node: Núcleo e embutidos<173>6032611
Ref: whatsnew/changelog id9646032715
Ref: 1d226032715
Ref: Núcleo e embutidos<173>-Footnote-16033524
Ref: Núcleo e embutidos<173>-Footnote-26033589
Ref: Núcleo e embutidos<173>-Footnote-36033654
Ref: Núcleo e embutidos<173>-Footnote-46033696
Ref: Núcleo e embutidos<173>-Footnote-56033761
Ref: Núcleo e embutidos<173>-Footnote-66033826
Ref: Núcleo e embutidos<173>-Footnote-76033891
Ref: Núcleo e embutidos<173>-Footnote-86033956
Node: Biblioteca<175>6034021
Ref: whatsnew/changelog id9656034150
Ref: 1d236034150
Ref: Biblioteca<175>-Footnote-16036439
Ref: Biblioteca<175>-Footnote-26036504
Ref: Biblioteca<175>-Footnote-36036569
Ref: Biblioteca<175>-Footnote-46036634
Ref: Biblioteca<175>-Footnote-56036699
Ref: Biblioteca<175>-Footnote-66036764
Ref: Biblioteca<175>-Footnote-76036829
Ref: Biblioteca<175>-Footnote-86036894
Ref: Biblioteca<175>-Footnote-96036959
Ref: Biblioteca<175>-Footnote-106037024
Ref: Biblioteca<175>-Footnote-116037090
Ref: Biblioteca<175>-Footnote-126037156
Ref: Biblioteca<175>-Footnote-136037222
Ref: Biblioteca<175>-Footnote-146037288
Ref: Biblioteca<175>-Footnote-156037354
Ref: Biblioteca<175>-Footnote-166037420
Ref: Biblioteca<175>-Footnote-176037486
Ref: Biblioteca<175>-Footnote-186037552
Ref: Biblioteca<175>-Footnote-196037618
Node: Construção<93>6037684
Ref: whatsnew/changelog id9666037780
Ref: 1d246037780
Ref: Construção<93>-Footnote-16037957
Node: Python 3 5 0 beta 36038022
Ref: whatsnew/changelog python-3-5-0-beta-36038143
Ref: 1d256038143
Node: Núcleo e embutidos<174>6038421
Ref: whatsnew/changelog id9676038525
Ref: 1d266038525
Ref: Núcleo e embutidos<174>-Footnote-16039855
Ref: Núcleo e embutidos<174>-Footnote-26039920
Ref: Núcleo e embutidos<174>-Footnote-36039985
Ref: Núcleo e embutidos<174>-Footnote-46040050
Ref: Núcleo e embutidos<174>-Footnote-56040092
Ref: Núcleo e embutidos<174>-Footnote-66040157
Node: Biblioteca<176>6040222
Ref: whatsnew/changelog id9686040345
Ref: 1d276040345
Ref: Biblioteca<176>-Footnote-16042313
Ref: Biblioteca<176>-Footnote-26042378
Ref: Biblioteca<176>-Footnote-36042443
Ref: Biblioteca<176>-Footnote-46042508
Ref: Biblioteca<176>-Footnote-56042573
Ref: Biblioteca<176>-Footnote-66042638
Ref: Biblioteca<176>-Footnote-76042703
Ref: Biblioteca<176>-Footnote-86042768
Ref: Biblioteca<176>-Footnote-96042833
Ref: Biblioteca<176>-Footnote-106042898
Ref: Biblioteca<176>-Footnote-116042964
Ref: Biblioteca<176>-Footnote-126043030
Ref: Biblioteca<176>-Footnote-136043096
Ref: Biblioteca<176>-Footnote-146043162
Ref: Biblioteca<176>-Footnote-156043228
Ref: Biblioteca<176>-Footnote-166043294
Ref: Biblioteca<176>-Footnote-176043360
Ref: Biblioteca<176>-Footnote-186043426
Node: Testes<85>6043492
Ref: whatsnew/changelog id9696043609
Ref: 1d286043609
Ref: Testes<85>-Footnote-16043893
Ref: Testes<85>-Footnote-26043958
Node: Documentação<79>6044023
Ref: whatsnew/changelog id9706044141
Ref: 1d296044141
Ref: Documentação<79>-Footnote-16044485
Ref: Documentação<79>-Footnote-26044550
Node: Construção<94>6044615
Ref: whatsnew/changelog id9716044714
Ref: 1d2a6044714
Ref: Construção<94>-Footnote-16044891
Node: Python 3 5 0 beta 26044956
Ref: whatsnew/changelog python-3-5-0-beta-26045077
Ref: 1d2b6045077
Node: Núcleo e embutidos<175>6045261
Ref: whatsnew/changelog id9726045365
Ref: 1d2c6045365
Ref: Núcleo e embutidos<175>-Footnote-16046121
Ref: Núcleo e embutidos<175>-Footnote-26046186
Ref: Núcleo e embutidos<175>-Footnote-36046251
Ref: Núcleo e embutidos<175>-Footnote-46046316
Ref: Núcleo e embutidos<175>-Footnote-56046381
Node: Biblioteca<177>6046446
Ref: whatsnew/changelog id9736046550
Ref: 1d2d6046550
Ref: Biblioteca<177>-Footnote-16047263
Ref: Biblioteca<177>-Footnote-26047328
Ref: Biblioteca<177>-Footnote-36047393
Ref: Biblioteca<177>-Footnote-46047435
Ref: Biblioteca<177>-Footnote-56047499
Ref: Biblioteca<177>-Footnote-66047564
Ref: Biblioteca<177>-Footnote-76047629
Node: Python 3 5 0 beta 16047694
Ref: whatsnew/changelog python-3-5-0-beta-16047816
Ref: 1d2e6047816
Node: Núcleo e embutidos<176>6048122
Ref: whatsnew/changelog id9746048226
Ref: 1d2f6048226
Ref: Núcleo e embutidos<176>-Footnote-16050102
Ref: Núcleo e embutidos<176>-Footnote-26050167
Ref: Núcleo e embutidos<176>-Footnote-36050232
Ref: Núcleo e embutidos<176>-Footnote-46050297
Ref: Núcleo e embutidos<176>-Footnote-56050362
Ref: Núcleo e embutidos<176>-Footnote-66050427
Ref: Núcleo e embutidos<176>-Footnote-76050492
Ref: Núcleo e embutidos<176>-Footnote-86050557
Ref: Núcleo e embutidos<176>-Footnote-96050622
Ref: Núcleo e embutidos<176>-Footnote-106050687
Ref: Núcleo e embutidos<176>-Footnote-116050752
Ref: Núcleo e embutidos<176>-Footnote-126050818
Ref: Núcleo e embutidos<176>-Footnote-136050884
Ref: Núcleo e embutidos<176>-Footnote-146050950
Ref: Núcleo e embutidos<176>-Footnote-156051016
Ref: Núcleo e embutidos<176>-Footnote-166051082
Ref: Núcleo e embutidos<176>-Footnote-176051148
Ref: Núcleo e embutidos<176>-Footnote-186051213
Ref: Núcleo e embutidos<176>-Footnote-196051279
Node: Biblioteca<178>6051345
Ref: whatsnew/changelog id9756051466
Ref: 1d306051466
Ref: Biblioteca<178>-Footnote-16059134
Ref: Biblioteca<178>-Footnote-26059199
Ref: Biblioteca<178>-Footnote-36059264
Ref: Biblioteca<178>-Footnote-46059329
Ref: Biblioteca<178>-Footnote-56059394
Ref: Biblioteca<178>-Footnote-66059459
Ref: Biblioteca<178>-Footnote-76059524
Ref: Biblioteca<178>-Footnote-86059589
Ref: Biblioteca<178>-Footnote-96059654
Ref: Biblioteca<178>-Footnote-106059719
Ref: Biblioteca<178>-Footnote-116059784
Ref: Biblioteca<178>-Footnote-126059850
Ref: Biblioteca<178>-Footnote-136059916
Ref: Biblioteca<178>-Footnote-146059982
Ref: Biblioteca<178>-Footnote-156060047
Ref: Biblioteca<178>-Footnote-166060113
Ref: Biblioteca<178>-Footnote-176060179
Ref: Biblioteca<178>-Footnote-186060245
Ref: Biblioteca<178>-Footnote-196060311
Ref: Biblioteca<178>-Footnote-206060377
Ref: Biblioteca<178>-Footnote-216060443
Ref: Biblioteca<178>-Footnote-226060509
Ref: Biblioteca<178>-Footnote-236060575
Ref: Biblioteca<178>-Footnote-246060641
Ref: Biblioteca<178>-Footnote-256060707
Ref: Biblioteca<178>-Footnote-266060772
Ref: Biblioteca<178>-Footnote-276060838
Ref: Biblioteca<178>-Footnote-286060904
Ref: Biblioteca<178>-Footnote-296060970
Ref: Biblioteca<178>-Footnote-306061036
Ref: Biblioteca<178>-Footnote-316061102
Ref: Biblioteca<178>-Footnote-326061168
Ref: Biblioteca<178>-Footnote-336061234
Ref: Biblioteca<178>-Footnote-346061300
Ref: Biblioteca<178>-Footnote-356061366
Ref: Biblioteca<178>-Footnote-366061432
Ref: Biblioteca<178>-Footnote-376061498
Ref: Biblioteca<178>-Footnote-386061564
Ref: Biblioteca<178>-Footnote-396061630
Ref: Biblioteca<178>-Footnote-406061696
Ref: Biblioteca<178>-Footnote-416061762
Ref: Biblioteca<178>-Footnote-426061827
Ref: Biblioteca<178>-Footnote-436061893
Ref: Biblioteca<178>-Footnote-446061959
Ref: Biblioteca<178>-Footnote-456062025
Ref: Biblioteca<178>-Footnote-466062091
Ref: Biblioteca<178>-Footnote-476062157
Ref: Biblioteca<178>-Footnote-486062223
Ref: Biblioteca<178>-Footnote-496062289
Ref: Biblioteca<178>-Footnote-506062355
Ref: Biblioteca<178>-Footnote-516062421
Ref: Biblioteca<178>-Footnote-526062487
Ref: Biblioteca<178>-Footnote-536062553
Ref: Biblioteca<178>-Footnote-546062619
Ref: Biblioteca<178>-Footnote-556062685
Ref: Biblioteca<178>-Footnote-566062751
Node: IDLE<66>6062817
Ref: whatsnew/changelog id9766062924
Ref: 1d316062924
Ref: IDLE<66>-Footnote-16063093
Node: Testes<86>6063158
Ref: whatsnew/changelog id9776063268
Ref: 1d326063268
Ref: Testes<86>-Footnote-16063568
Ref: Testes<86>-Footnote-26063633
Node: Documentação<80>6063697
Ref: whatsnew/changelog id9786063820
Ref: 1d336063820
Ref: Documentação<80>-Footnote-16064227
Ref: Documentação<80>-Footnote-26064292
Ref: Documentação<80>-Footnote-36064357
Node: Ferramentas/Demos<51>6064422
Ref: whatsnew/changelog id9796064526
Ref: 1d346064526
Ref: Ferramentas/Demos<51>-Footnote-16065057
Ref: Ferramentas/Demos<51>-Footnote-26065122
Ref: Ferramentas/Demos<51>-Footnote-36065187
Ref: Ferramentas/Demos<51>-Footnote-46065252
Node: Python 3 5 0 alpha 46065317
Ref: whatsnew/changelog python-3-5-0-alpha-46065440
Ref: 1d356065440
Node: Núcleo e embutidos<177>6065746
Ref: whatsnew/changelog id9806065851
Ref: 1d366065851
Ref: Núcleo e embutidos<177>-Footnote-16067223
Ref: Núcleo e embutidos<177>-Footnote-26067288
Ref: Núcleo e embutidos<177>-Footnote-36067330
Ref: Núcleo e embutidos<177>-Footnote-46067395
Ref: Núcleo e embutidos<177>-Footnote-56067460
Ref: Núcleo e embutidos<177>-Footnote-66067502
Ref: Núcleo e embutidos<177>-Footnote-76067567
Ref: Núcleo e embutidos<177>-Footnote-86067632
Ref: Núcleo e embutidos<177>-Footnote-96067697
Ref: Núcleo e embutidos<177>-Footnote-106067762
Ref: Núcleo e embutidos<177>-Footnote-116067828
Node: Biblioteca<179>6067894
Ref: whatsnew/changelog id9816068024
Ref: 1d376068024
Ref: Biblioteca<179>-Footnote-16074747
Ref: Biblioteca<179>-Footnote-26074812
Ref: Biblioteca<179>-Footnote-36074877
Ref: Biblioteca<179>-Footnote-46074941
Ref: Biblioteca<179>-Footnote-56075006
Ref: Biblioteca<179>-Footnote-66075071
Ref: Biblioteca<179>-Footnote-76075135
Ref: Biblioteca<179>-Footnote-86075200
Ref: Biblioteca<179>-Footnote-96075265
Ref: Biblioteca<179>-Footnote-106075330
Ref: Biblioteca<179>-Footnote-116075396
Ref: Biblioteca<179>-Footnote-126075462
Ref: Biblioteca<179>-Footnote-136075528
Ref: Biblioteca<179>-Footnote-146075594
Ref: Biblioteca<179>-Footnote-156075660
Ref: Biblioteca<179>-Footnote-166075726
Ref: Biblioteca<179>-Footnote-176075792
Ref: Biblioteca<179>-Footnote-186075858
Ref: Biblioteca<179>-Footnote-196075924
Ref: Biblioteca<179>-Footnote-206075990
Ref: Biblioteca<179>-Footnote-216076056
Ref: Biblioteca<179>-Footnote-226076122
Ref: Biblioteca<179>-Footnote-236076188
Ref: Biblioteca<179>-Footnote-246076254
Ref: Biblioteca<179>-Footnote-256076320
Ref: Biblioteca<179>-Footnote-266076386
Ref: Biblioteca<179>-Footnote-276076452
Ref: Biblioteca<179>-Footnote-286076518
Ref: Biblioteca<179>-Footnote-296076584
Ref: Biblioteca<179>-Footnote-306076650
Ref: Biblioteca<179>-Footnote-316076715
Ref: Biblioteca<179>-Footnote-326076781
Ref: Biblioteca<179>-Footnote-336076847
Ref: Biblioteca<179>-Footnote-346076913
Ref: Biblioteca<179>-Footnote-356076979
Ref: Biblioteca<179>-Footnote-366077045
Ref: Biblioteca<179>-Footnote-376077111
Ref: Biblioteca<179>-Footnote-386077177
Ref: Biblioteca<179>-Footnote-396077243
Ref: Biblioteca<179>-Footnote-406077309
Ref: Biblioteca<179>-Footnote-416077375
Ref: Biblioteca<179>-Footnote-426077441
Ref: Biblioteca<179>-Footnote-436077484
Ref: Biblioteca<179>-Footnote-446077550
Ref: Biblioteca<179>-Footnote-456077616
Ref: Biblioteca<179>-Footnote-466077682
Ref: Biblioteca<179>-Footnote-476077748
Ref: Biblioteca<179>-Footnote-486077814
Node: Construção<95>6077880
Ref: whatsnew/changelog id9826077996
Ref: 1d386077996
Ref: Construção<95>-Footnote-16078293
Ref: Construção<95>-Footnote-26078358
Node: Testes<87>6078423
Ref: whatsnew/changelog id9836078545
Ref: 1d396078545
Ref: Testes<87>-Footnote-16078848
Ref: Testes<87>-Footnote-26078913
Node: Ferramentas/Demos<52>6078978
Ref: whatsnew/changelog id9846079093
Ref: 1d3a6079093
Ref: Ferramentas/Demos<52>-Footnote-16080139
Ref: Ferramentas/Demos<52>-Footnote-26080204
Ref: Ferramentas/Demos<52>-Footnote-36080269
Ref: Ferramentas/Demos<52>-Footnote-46080334
Ref: Ferramentas/Demos<52>-Footnote-56080399
Ref: Ferramentas/Demos<52>-Footnote-66080464
Node: API C<76>6080529
Ref: whatsnew/changelog id9856080625
Ref: 1d3b6080625
Ref: API C<76>-Footnote-16080780
Node: Python 3 5 0 alpha 36080845
Ref: whatsnew/changelog python-3-5-0-alpha-36080969
Ref: 1d3c6080969
Node: Núcleo e embutidos<178>6081255
Ref: whatsnew/changelog id9866081360
Ref: 1d3d6081360
Ref: Núcleo e embutidos<178>-Footnote-16082159
Ref: Núcleo e embutidos<178>-Footnote-26082224
Ref: Núcleo e embutidos<178>-Footnote-36082289
Ref: Núcleo e embutidos<178>-Footnote-46082354
Ref: Núcleo e embutidos<178>-Footnote-56082419
Ref: Núcleo e embutidos<178>-Footnote-66082484
Node: Biblioteca<180>6082549
Ref: whatsnew/changelog id9876082679
Ref: 1d3e6082679
Ref: Biblioteca<180>-Footnote-16089121
Ref: Biblioteca<180>-Footnote-26089186
Ref: Biblioteca<180>-Footnote-36089251
Ref: Biblioteca<180>-Footnote-46089316
Ref: Biblioteca<180>-Footnote-56089381
Ref: Biblioteca<180>-Footnote-66089446
Ref: Biblioteca<180>-Footnote-76089511
Ref: Biblioteca<180>-Footnote-86089576
Ref: Biblioteca<180>-Footnote-96089641
Ref: Biblioteca<180>-Footnote-106089706
Ref: Biblioteca<180>-Footnote-116089772
Ref: Biblioteca<180>-Footnote-126089838
Ref: Biblioteca<180>-Footnote-136089904
Ref: Biblioteca<180>-Footnote-146089970
Ref: Biblioteca<180>-Footnote-156090035
Ref: Biblioteca<180>-Footnote-166090101
Ref: Biblioteca<180>-Footnote-176090167
Ref: Biblioteca<180>-Footnote-186090233
Ref: Biblioteca<180>-Footnote-196090299
Ref: Biblioteca<180>-Footnote-206090365
Ref: Biblioteca<180>-Footnote-216090431
Ref: Biblioteca<180>-Footnote-226090497
Ref: Biblioteca<180>-Footnote-236090563
Ref: Biblioteca<180>-Footnote-246090629
Ref: Biblioteca<180>-Footnote-256090695
Ref: Biblioteca<180>-Footnote-266090761
Ref: Biblioteca<180>-Footnote-276090827
Ref: Biblioteca<180>-Footnote-286090893
Ref: Biblioteca<180>-Footnote-296090959
Ref: Biblioteca<180>-Footnote-306091025
Ref: Biblioteca<180>-Footnote-316091090
Ref: Biblioteca<180>-Footnote-326091156
Ref: Biblioteca<180>-Footnote-336091222
Ref: Biblioteca<180>-Footnote-346091288
Ref: Biblioteca<180>-Footnote-356091353
Ref: Biblioteca<180>-Footnote-366091419
Ref: Biblioteca<180>-Footnote-376091485
Ref: Biblioteca<180>-Footnote-386091551
Ref: Biblioteca<180>-Footnote-396091617
Ref: Biblioteca<180>-Footnote-406091683
Ref: Biblioteca<180>-Footnote-416091749
Ref: Biblioteca<180>-Footnote-426091815
Node: Construção<96>6091881
Ref: whatsnew/changelog id9886091997
Ref: 1d3f6091997
Ref: Construção<96>-Footnote-16092154
Node: Testes<88>6092219
Ref: whatsnew/changelog id9896092341
Ref: 1d406092341
Ref: Testes<88>-Footnote-16092568
Ref: Testes<88>-Footnote-26092633
Node: Ferramentas/Demos<53>6092698
Ref: whatsnew/changelog id9906092795
Ref: 1d416092795
Ref: Ferramentas/Demos<53>-Footnote-16093076
Node: Python 3 5 0 alpha 26093141
Ref: whatsnew/changelog python-3-5-0-alpha-26093265
Ref: 1d426093265
Node: Núcleo e embutidos<179>6093529
Ref: whatsnew/changelog id9916093634
Ref: 1d436093634
Ref: Núcleo e embutidos<179>-Footnote-16093935
Node: Biblioteca<181>6094000
Ref: whatsnew/changelog id9926094130
Ref: 1d446094130
Ref: Biblioteca<181>-Footnote-16098453
Ref: Biblioteca<181>-Footnote-26098518
Ref: Biblioteca<181>-Footnote-36098560
Ref: Biblioteca<181>-Footnote-46098625
Ref: Biblioteca<181>-Footnote-56098690
Ref: Biblioteca<181>-Footnote-66098755
Ref: Biblioteca<181>-Footnote-76098820
Ref: Biblioteca<181>-Footnote-86098885
Ref: Biblioteca<181>-Footnote-96098950
Ref: Biblioteca<181>-Footnote-106099014
Ref: Biblioteca<181>-Footnote-116099080
Ref: Biblioteca<181>-Footnote-126099146
Ref: Biblioteca<181>-Footnote-136099212
Ref: Biblioteca<181>-Footnote-146099278
Ref: Biblioteca<181>-Footnote-156099344
Ref: Biblioteca<181>-Footnote-166099410
Ref: Biblioteca<181>-Footnote-176099475
Ref: Biblioteca<181>-Footnote-186099542
Ref: Biblioteca<181>-Footnote-196099607
Ref: Biblioteca<181>-Footnote-206099673
Ref: Biblioteca<181>-Footnote-216099738
Ref: Biblioteca<181>-Footnote-226099804
Ref: Biblioteca<181>-Footnote-236099870
Ref: Biblioteca<181>-Footnote-246099936
Ref: Biblioteca<181>-Footnote-256100002
Ref: Biblioteca<181>-Footnote-266100068
Ref: Biblioteca<181>-Footnote-276100134
Ref: Biblioteca<181>-Footnote-286100200
Ref: Biblioteca<181>-Footnote-296100266
Ref: Biblioteca<181>-Footnote-306100332
Ref: Biblioteca<181>-Footnote-316100398
Ref: Biblioteca<181>-Footnote-326100464
Ref: Biblioteca<181>-Footnote-336100530
Ref: Biblioteca<181>-Footnote-346100596
Ref: Biblioteca<181>-Footnote-356100662
Ref: Biblioteca<181>-Footnote-366100728
Ref: Biblioteca<181>-Footnote-376100794
Node: Construção<97>6100860
Ref: whatsnew/changelog id9936100975
Ref: 1d456100975
Ref: Construção<97>-Footnote-16101258
Ref: Construção<97>-Footnote-26101323
Node: API C<77>6101388
Ref: whatsnew/changelog id9946101499
Ref: 1d466101499
Ref: API C<77>-Footnote-16101681
Node: Windows<79>6101746
Ref: whatsnew/changelog id9956101832
Ref: 1d476101832
Ref: Windows<79>-Footnote-16102129
Ref: Windows<79>-Footnote-26102194
Ref: Windows<79>-Footnote-36102236
Node: Python 3 5 0 alpha 16102301
Ref: whatsnew/changelog python-3-5-0-alpha-16102396
Ref: 1d486102396
Node: Núcleo e embutidos<180>6102782
Ref: whatsnew/changelog id9966102887
Ref: 1d496102887
Ref: Núcleo e embutidos<180>-Footnote-16112815
Ref: Núcleo e embutidos<180>-Footnote-26112880
Ref: Núcleo e embutidos<180>-Footnote-36112945
Ref: Núcleo e embutidos<180>-Footnote-46113010
Ref: Núcleo e embutidos<180>-Footnote-56113075
Ref: Núcleo e embutidos<180>-Footnote-66113140
Ref: Núcleo e embutidos<180>-Footnote-76113205
Ref: Núcleo e embutidos<180>-Footnote-86113270
Ref: Núcleo e embutidos<180>-Footnote-96113335
Ref: Núcleo e embutidos<180>-Footnote-106113400
Ref: Núcleo e embutidos<180>-Footnote-116113466
Ref: Núcleo e embutidos<180>-Footnote-126113532
Ref: Núcleo e embutidos<180>-Footnote-136113598
Ref: Núcleo e embutidos<180>-Footnote-146113664
Ref: Núcleo e embutidos<180>-Footnote-156113730
Ref: Núcleo e embutidos<180>-Footnote-166113796
Ref: Núcleo e embutidos<180>-Footnote-176113862
Ref: Núcleo e embutidos<180>-Footnote-186113928
Ref: Núcleo e embutidos<180>-Footnote-196113994
Ref: Núcleo e embutidos<180>-Footnote-206114060
Ref: Núcleo e embutidos<180>-Footnote-216114126
Ref: Núcleo e embutidos<180>-Footnote-226114192
Ref: Núcleo e embutidos<180>-Footnote-236114258
Ref: Núcleo e embutidos<180>-Footnote-246114324
Ref: Núcleo e embutidos<180>-Footnote-256114390
Ref: Núcleo e embutidos<180>-Footnote-266114456
Ref: Núcleo e embutidos<180>-Footnote-276114522
Ref: Núcleo e embutidos<180>-Footnote-286114588
Ref: Núcleo e embutidos<180>-Footnote-296114654
Ref: Núcleo e embutidos<180>-Footnote-306114720
Ref: Núcleo e embutidos<180>-Footnote-316114786
Ref: Núcleo e embutidos<180>-Footnote-326114852
Ref: Núcleo e embutidos<180>-Footnote-336114918
Ref: Núcleo e embutidos<180>-Footnote-346114986
Ref: Núcleo e embutidos<180>-Footnote-356115052
Ref: Núcleo e embutidos<180>-Footnote-366115118
Ref: Núcleo e embutidos<180>-Footnote-376115184
Ref: Núcleo e embutidos<180>-Footnote-386115250
Ref: Núcleo e embutidos<180>-Footnote-396115316
Ref: Núcleo e embutidos<180>-Footnote-406115382
Ref: Núcleo e embutidos<180>-Footnote-416115448
Ref: Núcleo e embutidos<180>-Footnote-426115514
Ref: Núcleo e embutidos<180>-Footnote-436115580
Ref: Núcleo e embutidos<180>-Footnote-446115646
Ref: Núcleo e embutidos<180>-Footnote-456115712
Ref: Núcleo e embutidos<180>-Footnote-466115778
Ref: Núcleo e embutidos<180>-Footnote-476115844
Ref: Núcleo e embutidos<180>-Footnote-486115910
Ref: Núcleo e embutidos<180>-Footnote-496115976
Ref: Núcleo e embutidos<180>-Footnote-506116042
Ref: Núcleo e embutidos<180>-Footnote-516116108
Ref: Núcleo e embutidos<180>-Footnote-526116174
Ref: Núcleo e embutidos<180>-Footnote-536116240
Ref: Núcleo e embutidos<180>-Footnote-546116306
Ref: Núcleo e embutidos<180>-Footnote-556116372
Ref: Núcleo e embutidos<180>-Footnote-566116438
Ref: Núcleo e embutidos<180>-Footnote-576116504
Ref: Núcleo e embutidos<180>-Footnote-586116570
Ref: Núcleo e embutidos<180>-Footnote-596116636
Ref: Núcleo e embutidos<180>-Footnote-606116702
Ref: Núcleo e embutidos<180>-Footnote-616116768
Ref: Núcleo e embutidos<180>-Footnote-626116834
Ref: Núcleo e embutidos<180>-Footnote-636116900
Ref: Núcleo e embutidos<180>-Footnote-646116966
Ref: Núcleo e embutidos<180>-Footnote-656117032
Ref: Núcleo e embutidos<180>-Footnote-666117098
Ref: Núcleo e embutidos<180>-Footnote-676117163
Ref: Núcleo e embutidos<180>-Footnote-686117229
Ref: Núcleo e embutidos<180>-Footnote-696117295
Ref: Núcleo e embutidos<180>-Footnote-706117361
Ref: Núcleo e embutidos<180>-Footnote-716117427
Ref: Núcleo e embutidos<180>-Footnote-726117493
Ref: Núcleo e embutidos<180>-Footnote-736117558
Node: Biblioteca<182>6117624
Ref: whatsnew/changelog id9976117746
Ref: 1d4a6117746
Ref: Biblioteca<182>-Footnote-16170283
Ref: Biblioteca<182>-Footnote-26170348
Ref: Biblioteca<182>-Footnote-36170413
Ref: Biblioteca<182>-Footnote-46170478
Ref: Biblioteca<182>-Footnote-56170543
Ref: Biblioteca<182>-Footnote-66170608
Ref: Biblioteca<182>-Footnote-76170673
Ref: Biblioteca<182>-Footnote-86170738
Ref: Biblioteca<182>-Footnote-96170803
Ref: Biblioteca<182>-Footnote-106170868
Ref: Biblioteca<182>-Footnote-116170934
Ref: Biblioteca<182>-Footnote-126171000
Ref: Biblioteca<182>-Footnote-136171066
Ref: Biblioteca<182>-Footnote-146171132
Ref: Biblioteca<182>-Footnote-156171198
Ref: Biblioteca<182>-Footnote-166171264
Ref: Biblioteca<182>-Footnote-176171330
Ref: Biblioteca<182>-Footnote-186171396
Ref: Biblioteca<182>-Footnote-196171462
Ref: Biblioteca<182>-Footnote-206171528
Ref: Biblioteca<182>-Footnote-216171594
Ref: Biblioteca<182>-Footnote-226171660
Ref: Biblioteca<182>-Footnote-236171726
Ref: Biblioteca<182>-Footnote-246171792
Ref: Biblioteca<182>-Footnote-256171858
Ref: Biblioteca<182>-Footnote-266171924
Ref: Biblioteca<182>-Footnote-276171990
Ref: Biblioteca<182>-Footnote-286172056
Ref: Biblioteca<182>-Footnote-296172122
Ref: Biblioteca<182>-Footnote-306172188
Ref: Biblioteca<182>-Footnote-316172254
Ref: Biblioteca<182>-Footnote-326172320
Ref: Biblioteca<182>-Footnote-336172386
Ref: Biblioteca<182>-Footnote-346172452
Ref: Biblioteca<182>-Footnote-356172518
Ref: Biblioteca<182>-Footnote-366172584
Ref: Biblioteca<182>-Footnote-376172650
Ref: Biblioteca<182>-Footnote-386172716
Ref: Biblioteca<182>-Footnote-396172782
Ref: Biblioteca<182>-Footnote-406172848
Ref: Biblioteca<182>-Footnote-416172914
Ref: Biblioteca<182>-Footnote-426172980
Ref: Biblioteca<182>-Footnote-436173046
Ref: Biblioteca<182>-Footnote-446173112
Ref: Biblioteca<182>-Footnote-456173178
Ref: Biblioteca<182>-Footnote-466173244
Ref: Biblioteca<182>-Footnote-476173310
Ref: Biblioteca<182>-Footnote-486173376
Ref: Biblioteca<182>-Footnote-496173442
Ref: Biblioteca<182>-Footnote-506173508
Ref: Biblioteca<182>-Footnote-516173574
Ref: Biblioteca<182>-Footnote-526173640
Ref: Biblioteca<182>-Footnote-536173706
Ref: Biblioteca<182>-Footnote-546173772
Ref: Biblioteca<182>-Footnote-556173838
Ref: Biblioteca<182>-Footnote-566173906
Ref: Biblioteca<182>-Footnote-576173972
Ref: Biblioteca<182>-Footnote-586174038
Ref: Biblioteca<182>-Footnote-596174104
Ref: Biblioteca<182>-Footnote-606174170
Ref: Biblioteca<182>-Footnote-616174236
Ref: Biblioteca<182>-Footnote-626174292
Ref: Biblioteca<182>-Footnote-636174358
Ref: Biblioteca<182>-Footnote-646174424
Ref: Biblioteca<182>-Footnote-656174490
Ref: Biblioteca<182>-Footnote-666174556
Ref: Biblioteca<182>-Footnote-676174622
Ref: Biblioteca<182>-Footnote-686174688
Ref: Biblioteca<182>-Footnote-696174754
Ref: Biblioteca<182>-Footnote-706174820
Ref: Biblioteca<182>-Footnote-716174886
Ref: Biblioteca<182>-Footnote-726174952
Ref: Biblioteca<182>-Footnote-736175018
Ref: Biblioteca<182>-Footnote-746175084
Ref: Biblioteca<182>-Footnote-756175150
Ref: Biblioteca<182>-Footnote-766175216
Ref: Biblioteca<182>-Footnote-776175282
Ref: Biblioteca<182>-Footnote-786175348
Ref: Biblioteca<182>-Footnote-796175414
Ref: Biblioteca<182>-Footnote-806175480
Ref: Biblioteca<182>-Footnote-816175546
Ref: Biblioteca<182>-Footnote-826175612
Ref: Biblioteca<182>-Footnote-836175678
Ref: Biblioteca<182>-Footnote-846175744
Ref: Biblioteca<182>-Footnote-856175810
Ref: Biblioteca<182>-Footnote-866175876
Ref: Biblioteca<182>-Footnote-876175942
Ref: Biblioteca<182>-Footnote-886176008
Ref: Biblioteca<182>-Footnote-896176074
Ref: Biblioteca<182>-Footnote-906176140
Ref: Biblioteca<182>-Footnote-916176206
Ref: Biblioteca<182>-Footnote-926176272
Ref: Biblioteca<182>-Footnote-936176338
Ref: Biblioteca<182>-Footnote-946176404
Ref: Biblioteca<182>-Footnote-956176470
Ref: Biblioteca<182>-Footnote-966176536
Ref: Biblioteca<182>-Footnote-976176601
Ref: Biblioteca<182>-Footnote-986176667
Ref: Biblioteca<182>-Footnote-996176733
Ref: Biblioteca<182>-Footnote-1006176799
Ref: Biblioteca<182>-Footnote-1016176865
Ref: Biblioteca<182>-Footnote-1026176932
Ref: Biblioteca<182>-Footnote-1036176999
Ref: Biblioteca<182>-Footnote-1046177066
Ref: Biblioteca<182>-Footnote-1056177133
Ref: Biblioteca<182>-Footnote-1066177200
Ref: Biblioteca<182>-Footnote-1076177267
Ref: Biblioteca<182>-Footnote-1086177333
Ref: Biblioteca<182>-Footnote-1096177399
Ref: Biblioteca<182>-Footnote-1106177466
Ref: Biblioteca<182>-Footnote-1116177533
Ref: Biblioteca<182>-Footnote-1126177600
Ref: Biblioteca<182>-Footnote-1136177667
Ref: Biblioteca<182>-Footnote-1146177734
Ref: Biblioteca<182>-Footnote-1156177801
Ref: Biblioteca<182>-Footnote-1166177868
Ref: Biblioteca<182>-Footnote-1176177935
Ref: Biblioteca<182>-Footnote-1186178002
Ref: Biblioteca<182>-Footnote-1196178069
Ref: Biblioteca<182>-Footnote-1206178136
Ref: Biblioteca<182>-Footnote-1216178203
Ref: Biblioteca<182>-Footnote-1226178272
Ref: Biblioteca<182>-Footnote-1236178339
Ref: Biblioteca<182>-Footnote-1246178406
Ref: Biblioteca<182>-Footnote-1256178473
Ref: Biblioteca<182>-Footnote-1266178540
Ref: Biblioteca<182>-Footnote-1276178607
Ref: Biblioteca<182>-Footnote-1286178674
Ref: Biblioteca<182>-Footnote-1296178741
Ref: Biblioteca<182>-Footnote-1306178808
Ref: Biblioteca<182>-Footnote-1316178875
Ref: Biblioteca<182>-Footnote-1326178942
Ref: Biblioteca<182>-Footnote-1336179009
Ref: Biblioteca<182>-Footnote-1346179076
Ref: Biblioteca<182>-Footnote-1356179143
Ref: Biblioteca<182>-Footnote-1366179210
Ref: Biblioteca<182>-Footnote-1376179277
Ref: Biblioteca<182>-Footnote-1386179344
Ref: Biblioteca<182>-Footnote-1396179411
Ref: Biblioteca<182>-Footnote-1406179478
Ref: Biblioteca<182>-Footnote-1416179545
Ref: Biblioteca<182>-Footnote-1426179612
Ref: Biblioteca<182>-Footnote-1436179678
Ref: Biblioteca<182>-Footnote-1446179744
Ref: Biblioteca<182>-Footnote-1456179811
Ref: Biblioteca<182>-Footnote-1466179878
Ref: Biblioteca<182>-Footnote-1476179945
Ref: Biblioteca<182>-Footnote-1486180012
Ref: Biblioteca<182>-Footnote-1496180079
Ref: Biblioteca<182>-Footnote-1506180146
Ref: Biblioteca<182>-Footnote-1516180213
Ref: Biblioteca<182>-Footnote-1526180280
Ref: Biblioteca<182>-Footnote-1536180347
Ref: Biblioteca<182>-Footnote-1546180414
Ref: Biblioteca<182>-Footnote-1556180481
Ref: Biblioteca<182>-Footnote-1566180548
Ref: Biblioteca<182>-Footnote-1576180615
Ref: Biblioteca<182>-Footnote-1586180681
Ref: Biblioteca<182>-Footnote-1596180748
Ref: Biblioteca<182>-Footnote-1606180815
Ref: Biblioteca<182>-Footnote-1616180882
Ref: Biblioteca<182>-Footnote-1626180949
Ref: Biblioteca<182>-Footnote-1636181016
Ref: Biblioteca<182>-Footnote-1646181083
Ref: Biblioteca<182>-Footnote-1656181150
Ref: Biblioteca<182>-Footnote-1666181217
Ref: Biblioteca<182>-Footnote-1676181284
Ref: Biblioteca<182>-Footnote-1686181351
Ref: Biblioteca<182>-Footnote-1696181418
Ref: Biblioteca<182>-Footnote-1706181485
Ref: Biblioteca<182>-Footnote-1716181552
Ref: Biblioteca<182>-Footnote-1726181619
Ref: Biblioteca<182>-Footnote-1736181686
Ref: Biblioteca<182>-Footnote-1746181753
Ref: Biblioteca<182>-Footnote-1756181820
Ref: Biblioteca<182>-Footnote-1766181887
Ref: Biblioteca<182>-Footnote-1776181954
Ref: Biblioteca<182>-Footnote-1786182021
Ref: Biblioteca<182>-Footnote-1796182088
Ref: Biblioteca<182>-Footnote-1806182155
Ref: Biblioteca<182>-Footnote-1816182222
Ref: Biblioteca<182>-Footnote-1826182289
Ref: Biblioteca<182>-Footnote-1836182356
Ref: Biblioteca<182>-Footnote-1846182423
Ref: Biblioteca<182>-Footnote-1856182490
Ref: Biblioteca<182>-Footnote-1866182557
Ref: Biblioteca<182>-Footnote-1876182624
Ref: Biblioteca<182>-Footnote-1886182691
Ref: Biblioteca<182>-Footnote-1896182757
Ref: Biblioteca<182>-Footnote-1906182824
Ref: Biblioteca<182>-Footnote-1916182891
Ref: Biblioteca<182>-Footnote-1926182958
Ref: Biblioteca<182>-Footnote-1936183025
Ref: Biblioteca<182>-Footnote-1946183092
Ref: Biblioteca<182>-Footnote-1956183159
Ref: Biblioteca<182>-Footnote-1966183226
Ref: Biblioteca<182>-Footnote-1976183292
Ref: Biblioteca<182>-Footnote-1986183359
Ref: Biblioteca<182>-Footnote-1996183426
Ref: Biblioteca<182>-Footnote-2006183493
Ref: Biblioteca<182>-Footnote-2016183560
Ref: Biblioteca<182>-Footnote-2026183627
Ref: Biblioteca<182>-Footnote-2036183694
Ref: Biblioteca<182>-Footnote-2046183760
Ref: Biblioteca<182>-Footnote-2056183827
Ref: Biblioteca<182>-Footnote-2066183894
Ref: Biblioteca<182>-Footnote-2076183961
Ref: Biblioteca<182>-Footnote-2086184028
Ref: Biblioteca<182>-Footnote-2096184095
Ref: Biblioteca<182>-Footnote-2106184162
Ref: Biblioteca<182>-Footnote-2116184229
Ref: Biblioteca<182>-Footnote-2126184296
Ref: Biblioteca<182>-Footnote-2136184363
Ref: Biblioteca<182>-Footnote-2146184430
Ref: Biblioteca<182>-Footnote-2156184497
Ref: Biblioteca<182>-Footnote-2166184564
Ref: Biblioteca<182>-Footnote-2176184631
Ref: Biblioteca<182>-Footnote-2186184698
Ref: Biblioteca<182>-Footnote-2196184765
Ref: Biblioteca<182>-Footnote-2206184832
Ref: Biblioteca<182>-Footnote-2216184899
Ref: Biblioteca<182>-Footnote-2226184966
Ref: Biblioteca<182>-Footnote-2236185033
Ref: Biblioteca<182>-Footnote-2246185100
Ref: Biblioteca<182>-Footnote-2256185166
Ref: Biblioteca<182>-Footnote-2266185232
Ref: Biblioteca<182>-Footnote-2276185299
Ref: Biblioteca<182>-Footnote-2286185366
Ref: Biblioteca<182>-Footnote-2296185433
Ref: Biblioteca<182>-Footnote-2306185500
Ref: Biblioteca<182>-Footnote-2316185567
Ref: Biblioteca<182>-Footnote-2326185634
Ref: Biblioteca<182>-Footnote-2336185701
Ref: Biblioteca<182>-Footnote-2346185768
Ref: Biblioteca<182>-Footnote-2356185835
Ref: Biblioteca<182>-Footnote-2366185902
Ref: Biblioteca<182>-Footnote-2376185969
Ref: Biblioteca<182>-Footnote-2386186036
Ref: Biblioteca<182>-Footnote-2396186103
Ref: Biblioteca<182>-Footnote-2406186170
Ref: Biblioteca<182>-Footnote-2416186237
Ref: Biblioteca<182>-Footnote-2426186304
Ref: Biblioteca<182>-Footnote-2436186371
Ref: Biblioteca<182>-Footnote-2446186438
Ref: Biblioteca<182>-Footnote-2456186505
Ref: Biblioteca<182>-Footnote-2466186571
Ref: Biblioteca<182>-Footnote-2476186638
Ref: Biblioteca<182>-Footnote-2486186705
Ref: Biblioteca<182>-Footnote-2496186772
Ref: Biblioteca<182>-Footnote-2506186839
Ref: Biblioteca<182>-Footnote-2516186906
Ref: Biblioteca<182>-Footnote-2526186973
Ref: Biblioteca<182>-Footnote-2536187040
Ref: Biblioteca<182>-Footnote-2546187107
Ref: Biblioteca<182>-Footnote-2556187174
Ref: Biblioteca<182>-Footnote-2566187241
Ref: Biblioteca<182>-Footnote-2576187308
Ref: Biblioteca<182>-Footnote-2586187375
Ref: Biblioteca<182>-Footnote-2596187442
Ref: Biblioteca<182>-Footnote-2606187509
Ref: Biblioteca<182>-Footnote-2616187576
Ref: Biblioteca<182>-Footnote-2626187643
Ref: Biblioteca<182>-Footnote-2636187710
Ref: Biblioteca<182>-Footnote-2646187777
Ref: Biblioteca<182>-Footnote-2656187844
Ref: Biblioteca<182>-Footnote-2666187911
Ref: Biblioteca<182>-Footnote-2676187978
Ref: Biblioteca<182>-Footnote-2686188045
Ref: Biblioteca<182>-Footnote-2696188112
Ref: Biblioteca<182>-Footnote-2706188179
Ref: Biblioteca<182>-Footnote-2716188246
Ref: Biblioteca<182>-Footnote-2726188313
Ref: Biblioteca<182>-Footnote-2736188380
Ref: Biblioteca<182>-Footnote-2746188447
Ref: Biblioteca<182>-Footnote-2756188514
Ref: Biblioteca<182>-Footnote-2766188581
Ref: Biblioteca<182>-Footnote-2776188648
Ref: Biblioteca<182>-Footnote-2786188714
Ref: Biblioteca<182>-Footnote-2796188781
Ref: Biblioteca<182>-Footnote-2806188848
Ref: Biblioteca<182>-Footnote-2816188915
Ref: Biblioteca<182>-Footnote-2826188982
Ref: Biblioteca<182>-Footnote-2836189049
Ref: Biblioteca<182>-Footnote-2846189116
Ref: Biblioteca<182>-Footnote-2856189183
Ref: Biblioteca<182>-Footnote-2866189250
Ref: Biblioteca<182>-Footnote-2876189317
Ref: Biblioteca<182>-Footnote-2886189384
Ref: Biblioteca<182>-Footnote-2896189451
Ref: Biblioteca<182>-Footnote-2906189495
Ref: Biblioteca<182>-Footnote-2916189562
Ref: Biblioteca<182>-Footnote-2926189629
Ref: Biblioteca<182>-Footnote-2936189696
Ref: Biblioteca<182>-Footnote-2946189763
Ref: Biblioteca<182>-Footnote-2956189830
Ref: Biblioteca<182>-Footnote-2966189897
Ref: Biblioteca<182>-Footnote-2976189964
Ref: Biblioteca<182>-Footnote-2986190031
Ref: Biblioteca<182>-Footnote-2996190098
Ref: Biblioteca<182>-Footnote-3006190165
Ref: Biblioteca<182>-Footnote-3016190232
Ref: Biblioteca<182>-Footnote-3026190299
Ref: Biblioteca<182>-Footnote-3036190366
Ref: Biblioteca<182>-Footnote-3046190433
Ref: Biblioteca<182>-Footnote-3056190500
Ref: Biblioteca<182>-Footnote-3066190567
Ref: Biblioteca<182>-Footnote-3076190634
Ref: Biblioteca<182>-Footnote-3086190701
Ref: Biblioteca<182>-Footnote-3096190768
Ref: Biblioteca<182>-Footnote-3106190835
Ref: Biblioteca<182>-Footnote-3116190902
Ref: Biblioteca<182>-Footnote-3126190969
Ref: Biblioteca<182>-Footnote-3136191036
Ref: Biblioteca<182>-Footnote-3146191103
Ref: Biblioteca<182>-Footnote-3156191170
Ref: Biblioteca<182>-Footnote-3166191236
Ref: Biblioteca<182>-Footnote-3176191303
Ref: Biblioteca<182>-Footnote-3186191370
Ref: Biblioteca<182>-Footnote-3196191437
Ref: Biblioteca<182>-Footnote-3206191504
Ref: Biblioteca<182>-Footnote-3216191571
Ref: Biblioteca<182>-Footnote-3226191638
Ref: Biblioteca<182>-Footnote-3236191705
Ref: Biblioteca<182>-Footnote-3246191772
Ref: Biblioteca<182>-Footnote-3256191839
Ref: Biblioteca<182>-Footnote-3266191906
Ref: Biblioteca<182>-Footnote-3276191973
Ref: Biblioteca<182>-Footnote-3286192040
Ref: Biblioteca<182>-Footnote-3296192107
Ref: Biblioteca<182>-Footnote-3306192174
Ref: Biblioteca<182>-Footnote-3316192241
Ref: Biblioteca<182>-Footnote-3326192308
Ref: Biblioteca<182>-Footnote-3336192375
Ref: Biblioteca<182>-Footnote-3346192442
Ref: Biblioteca<182>-Footnote-3356192509
Ref: Biblioteca<182>-Footnote-3366192575
Ref: Biblioteca<182>-Footnote-3376192642
Ref: Biblioteca<182>-Footnote-3386192709
Ref: Biblioteca<182>-Footnote-3396192766
Ref: Biblioteca<182>-Footnote-3406192833
Ref: Biblioteca<182>-Footnote-3416192900
Ref: Biblioteca<182>-Footnote-3426192967
Ref: Biblioteca<182>-Footnote-3436193034
Ref: Biblioteca<182>-Footnote-3446193101
Ref: Biblioteca<182>-Footnote-3456193168
Ref: Biblioteca<182>-Footnote-3466193235
Ref: Biblioteca<182>-Footnote-3476193302
Ref: Biblioteca<182>-Footnote-3486193369
Ref: Biblioteca<182>-Footnote-3496193436
Ref: Biblioteca<182>-Footnote-3506193503
Ref: Biblioteca<182>-Footnote-3516193570
Ref: Biblioteca<182>-Footnote-3526193637
Ref: Biblioteca<182>-Footnote-3536193704
Ref: Biblioteca<182>-Footnote-3546193771
Ref: Biblioteca<182>-Footnote-3556193838
Ref: Biblioteca<182>-Footnote-3566193905
Ref: Biblioteca<182>-Footnote-3576193972
Ref: Biblioteca<182>-Footnote-3586194039
Ref: Biblioteca<182>-Footnote-3596194106
Ref: Biblioteca<182>-Footnote-3606194173
Ref: Biblioteca<182>-Footnote-3616194240
Ref: Biblioteca<182>-Footnote-3626194307
Ref: Biblioteca<182>-Footnote-3636194374
Ref: Biblioteca<182>-Footnote-3646194441
Ref: Biblioteca<182>-Footnote-3656194508
Ref: Biblioteca<182>-Footnote-3666194575
Ref: Biblioteca<182>-Footnote-3676194642
Ref: Biblioteca<182>-Footnote-3686194709
Ref: Biblioteca<182>-Footnote-3696194776
Ref: Biblioteca<182>-Footnote-3706194843
Ref: Biblioteca<182>-Footnote-3716194910
Ref: Biblioteca<182>-Footnote-3726194977
Ref: Biblioteca<182>-Footnote-3736195043
Ref: Biblioteca<182>-Footnote-3746195110
Ref: Biblioteca<182>-Footnote-3756195177
Ref: Biblioteca<182>-Footnote-3766195244
Ref: Biblioteca<182>-Footnote-3776195311
Ref: Biblioteca<182>-Footnote-3786195378
Ref: Biblioteca<182>-Footnote-3796195445
Ref: Biblioteca<182>-Footnote-3806195512
Ref: Biblioteca<182>-Footnote-3816195579
Ref: Biblioteca<182>-Footnote-3826195646
Ref: Biblioteca<182>-Footnote-3836195713
Ref: Biblioteca<182>-Footnote-3846195780
Ref: Biblioteca<182>-Footnote-3856195847
Ref: Biblioteca<182>-Footnote-3866195913
Ref: Biblioteca<182>-Footnote-3876195980
Ref: Biblioteca<182>-Footnote-3886196047
Ref: Biblioteca<182>-Footnote-3896196114
Ref: Biblioteca<182>-Footnote-3906196181
Ref: Biblioteca<182>-Footnote-3916196246
Ref: Biblioteca<182>-Footnote-3926196313
Ref: Biblioteca<182>-Footnote-3936196380
Ref: Biblioteca<182>-Footnote-3946196447
Ref: Biblioteca<182>-Footnote-3956196514
Ref: Biblioteca<182>-Footnote-3966196581
Ref: Biblioteca<182>-Footnote-3976196648
Ref: Biblioteca<182>-Footnote-3986196715
Node: IDLE<67>6196782
Ref: whatsnew/changelog id9986196896
Ref: 1d4b6196896
Ref: IDLE<67>-Footnote-16200394
Ref: IDLE<67>-Footnote-26200459
Ref: IDLE<67>-Footnote-36200524
Ref: IDLE<67>-Footnote-46200588
Ref: IDLE<67>-Footnote-56200653
Ref: IDLE<67>-Footnote-66200717
Ref: IDLE<67>-Footnote-76200782
Ref: IDLE<67>-Footnote-86200847
Ref: IDLE<67>-Footnote-96200912
Ref: IDLE<67>-Footnote-106200977
Ref: IDLE<67>-Footnote-116201043
Ref: IDLE<67>-Footnote-126201109
Ref: IDLE<67>-Footnote-136201175
Ref: IDLE<67>-Footnote-146201241
Ref: IDLE<67>-Footnote-156201307
Ref: IDLE<67>-Footnote-166201373
Ref: IDLE<67>-Footnote-176201439
Ref: IDLE<67>-Footnote-186201505
Ref: IDLE<67>-Footnote-196201571
Ref: IDLE<67>-Footnote-206201637
Ref: IDLE<67>-Footnote-216201703
Ref: IDLE<67>-Footnote-226201769
Ref: IDLE<67>-Footnote-236201835
Ref: IDLE<67>-Footnote-246201878
Ref: IDLE<67>-Footnote-256201944
Ref: IDLE<67>-Footnote-266202010
Node: Construção<98>6202076
Ref: whatsnew/changelog id9996202184
Ref: 1d4c6202184
Ref: Construção<98>-Footnote-16205630
Ref: Construção<98>-Footnote-26205695
Ref: Construção<98>-Footnote-36205760
Ref: Construção<98>-Footnote-46205825
Ref: Construção<98>-Footnote-56205890
Ref: Construção<98>-Footnote-66205955
Ref: Construção<98>-Footnote-76206020
Ref: Construção<98>-Footnote-86206085
Ref: Construção<98>-Footnote-96206150
Ref: Construção<98>-Footnote-106206215
Ref: Construção<98>-Footnote-116206281
Ref: Construção<98>-Footnote-126206347
Ref: Construção<98>-Footnote-136206413
Ref: Construção<98>-Footnote-146206479
Ref: Construção<98>-Footnote-156206545
Ref: Construção<98>-Footnote-166206611
Ref: Construção<98>-Footnote-176206677
Ref: Construção<98>-Footnote-186206743
Ref: Construção<98>-Footnote-196206809
Ref: Construção<98>-Footnote-206206875
Ref: Construção<98>-Footnote-216206941
Ref: Construção<98>-Footnote-226207007
Ref: Construção<98>-Footnote-236207073
Ref: Construção<98>-Footnote-246207139
Ref: Construção<98>-Footnote-256207205
Ref: Construção<98>-Footnote-266207271
Node: API C<78>6207337
Ref: whatsnew/changelog id10006207455
Ref: 1d4d6207455
Ref: API C<78>-Footnote-16208822
Ref: API C<78>-Footnote-26208887
Ref: API C<78>-Footnote-36208952
Ref: API C<78>-Footnote-46209017
Ref: API C<78>-Footnote-56209082
Ref: API C<78>-Footnote-66209147
Ref: API C<78>-Footnote-76209212
Node: Documentação<81>6209277
Ref: whatsnew/changelog id10016209389
Ref: 1d4e6209389
Ref: Documentação<81>-Footnote-16211233
Ref: Documentação<81>-Footnote-26211298
Ref: Documentação<81>-Footnote-36211363
Ref: Documentação<81>-Footnote-46211428
Ref: Documentação<81>-Footnote-56211493
Ref: Documentação<81>-Footnote-66211557
Ref: Documentação<81>-Footnote-76211622
Ref: Documentação<81>-Footnote-86211687
Ref: Documentação<81>-Footnote-96211752
Ref: Documentação<81>-Footnote-106211817
Ref: Documentação<81>-Footnote-116211883
Node: Testes<89>6211949
Ref: whatsnew/changelog id10026212073
Ref: 1d4f6212073
Ref: Testes<89>-Footnote-16216272
Ref: Testes<89>-Footnote-26216337
Ref: Testes<89>-Footnote-36216402
Ref: Testes<89>-Footnote-46216467
Ref: Testes<89>-Footnote-56216532
Ref: Testes<89>-Footnote-66216597
Ref: Testes<89>-Footnote-76216662
Ref: Testes<89>-Footnote-86216727
Ref: Testes<89>-Footnote-96216792
Ref: Testes<89>-Footnote-106216857
Ref: Testes<89>-Footnote-116216923
Ref: Testes<89>-Footnote-126216989
Ref: Testes<89>-Footnote-136217055
Ref: Testes<89>-Footnote-146217121
Ref: Testes<89>-Footnote-156217186
Ref: Testes<89>-Footnote-166217252
Ref: Testes<89>-Footnote-176217318
Ref: Testes<89>-Footnote-186217384
Ref: Testes<89>-Footnote-196217450
Ref: Testes<89>-Footnote-206217516
Ref: Testes<89>-Footnote-216217582
Ref: Testes<89>-Footnote-226217648
Ref: Testes<89>-Footnote-236217714
Ref: Testes<89>-Footnote-246217780
Ref: Testes<89>-Footnote-256217846
Ref: Testes<89>-Footnote-266217912
Ref: Testes<89>-Footnote-276217978
Ref: Testes<89>-Footnote-286218044
Ref: Testes<89>-Footnote-296218110
Ref: Testes<89>-Footnote-306218176
Ref: Testes<89>-Footnote-316218242
Ref: Testes<89>-Footnote-326218308
Ref: Testes<89>-Footnote-336218374
Ref: Testes<89>-Footnote-346218440
Ref: Testes<89>-Footnote-356218506
Ref: Testes<89>-Footnote-366218572
Ref: Testes<89>-Footnote-376218638
Node: Ferramentas/Demos<54>6218704
Ref: whatsnew/changelog id10036218821
Ref: 1d506218821
Ref: Ferramentas/Demos<54>-Footnote-16220521
Ref: Ferramentas/Demos<54>-Footnote-26220586
Ref: Ferramentas/Demos<54>-Footnote-36220651
Ref: Ferramentas/Demos<54>-Footnote-46220716
Ref: Ferramentas/Demos<54>-Footnote-56220781
Ref: Ferramentas/Demos<54>-Footnote-66220846
Ref: Ferramentas/Demos<54>-Footnote-76220911
Ref: Ferramentas/Demos<54>-Footnote-86220976
Ref: Ferramentas/Demos<54>-Footnote-96221041
Ref: Ferramentas/Demos<54>-Footnote-106221106
Ref: Ferramentas/Demos<54>-Footnote-116221149
Ref: Ferramentas/Demos<54>-Footnote-126221215
Ref: Ferramentas/Demos<54>-Footnote-136221281
Node: Windows<80>6221347
Ref: whatsnew/changelog id10046221445
Ref: 1d516221445
Ref: Windows<80>-Footnote-16222744
Ref: Windows<80>-Footnote-26222809
Ref: Windows<80>-Footnote-36222874
Ref: Windows<80>-Footnote-46222939
Ref: Windows<80>-Footnote-56223004
Ref: Windows<80>-Footnote-66223069
Ref: Windows<80>-Footnote-76223134
Node: O tutorial do Python6223199
Ref: tutorial/index doc6223335
Ref: 1d526223335
Ref: tutorial/index the-python-tutorial6223335
Ref: 1d536223335
Ref: tutorial/index translation-repo6223335
Ref: 1d546223335
Ref: tutorial/index tutorial-index6223335
Ref: 1d556223335
Node: Abrindo seu apetite6226615
Ref: tutorial/appetite doc6226733
Ref: 1d596226733
Ref: tutorial/appetite tut-intro6226733
Ref: 1d5a6226733
Ref: tutorial/appetite whetting-your-appetite6226733
Ref: 1d5b6226733
Node: Utilizando o interpretador Python6231930
Ref: tutorial/interpreter doc6232092
Ref: 1d5c6232092
Ref: tutorial/interpreter translation-repo6232092
Ref: 1d5d6232092
Ref: tutorial/interpreter tut-using6232092
Ref: 1d5e6232092
Ref: tutorial/interpreter using-the-python-interpreter6232092
Ref: 1d5f6232092
Node: Chamando o interpretador6232243
Ref: tutorial/interpreter invoking-the-interpreter6232376
Ref: 1d606232376
Ref: tutorial/interpreter tut-invoking6232376
Ref: 1d616232376
Ref: Chamando o interpretador-Footnote-16235798
Node: Passagem de argumentos6235995
Ref: tutorial/interpreter argument-passing6236102
Ref: 1d656236102
Ref: tutorial/interpreter tut-argpassing6236102
Ref: 1d666236102
Node: Modo interativo6237106
Ref: tutorial/interpreter interactive-mode6237213
Ref: 1d676237213
Ref: tutorial/interpreter tut-interactive6237213
Ref: ffc6237213
Node: O interpretador e seu ambiente6238319
Ref: tutorial/interpreter the-interpreter-and-its-environment6238452
Ref: 1d686238452
Ref: tutorial/interpreter tut-interp6238452
Ref: 1d696238452
Node: Edição de código-fonte6238567
Ref: tutorial/interpreter source-code-encoding6238659
Ref: 1d6a6238659
Ref: tutorial/interpreter tut-source-encoding6238659
Ref: 1d6b6238659
Node: Uma introdução informal ao Python6239987
Ref: tutorial/introduction doc6240167
Ref: 1d6d6240167
Ref: tutorial/introduction an-informal-introduction-to-python6240167
Ref: 1d6e6240167
Ref: tutorial/introduction translation-repo6240167
Ref: 1d6f6240167
Ref: tutorial/introduction tut-informal6240167
Ref: 1d706240167
Node: Usando Python como uma calculadora6241597
Ref: tutorial/introduction tut-calculator6241749
Ref: 1d716241749
Ref: tutorial/introduction using-python-as-a-calculator6241749
Ref: 1d726241749
Node: Números6242024
Ref: tutorial/introduction numbers6242117
Ref: 1d736242117
Ref: tutorial/introduction tut-numbers6242117
Ref: 1d746242117
Ref: Números-Footnote-16245342
Node: Texto6245559
Ref: tutorial/introduction text6245667
Ref: 1d766245667
Ref: tutorial/introduction tut-strings6245667
Ref: 1d776245667
Ref: Texto-Footnote-16254738
Node: Listas6255057
Ref: tutorial/introduction lists6255148
Ref: 1d7c6255148
Ref: tutorial/introduction tut-lists6255148
Ref: 1d7d6255148
Node: Primeiros passos para a programação6258525
Ref: tutorial/introduction first-steps-towards-programming6258677
Ref: 1d806258677
Ref: tutorial/introduction tut-firststeps6258677
Ref: 1d816258677
Ref: Primeiros passos para a programação-Footnote-16261988
Node: Mais ferramentas de controle de fluxo6262050
Ref: tutorial/controlflow doc6262216
Ref: 1d836262216
Ref: tutorial/controlflow more-control-flow-tools6262216
Ref: 1d846262216
Ref: tutorial/controlflow translation-repo6262216
Ref: 1d856262216
Ref: tutorial/controlflow tut-morecontrol6262216
Ref: 1d866262216
Node: Instruções if6262777
Ref: tutorial/controlflow if-statements6262891
Ref: 1d876262891
Ref: tutorial/controlflow tut-if6262891
Ref: 1d886262891
Node: Instruções for6263967
Ref: tutorial/controlflow for-statements6264106
Ref: 1d8b6264106
Ref: tutorial/controlflow tut-for6264106
Ref: 1d8c6264106
Node: A função range6265442
Ref: tutorial/controlflow the-range-function6265595
Ref: 1d8d6265595
Ref: tutorial/controlflow tut-range6265595
Ref: 1d8e6265595
Node: Instruções break e continue6267782
Ref: tutorial/controlflow break-and-continue-statements6267944
Ref: 1d916267944
Ref: tutorial/controlflow tut-break6267944
Ref: 1d926267944
Ref: tutorial/controlflow tut-for-else6269012
Ref: 1d936269012
Node: Cláusulas else em laços6269013
Ref: tutorial/controlflow break-and-continue-statements-and-else-clauses-on-loops6269176
Ref: 1d946269176
Ref: tutorial/controlflow else-clauses-on-loops6269176
Ref: 1d956269176
Node: Instruções pass6271589
Ref: tutorial/controlflow pass-statements6271741
Ref: 1d976271741
Ref: tutorial/controlflow tut-pass6271741
Ref: 1d986271741
Node: Instruções match6272969
Ref: tutorial/controlflow match-statements6273115
Ref: 1d9b6273115
Ref: tutorial/controlflow tut-match6273115
Ref: 1d8a6273115
Ref: Instruções match-Footnote-16280432
Node: Definindo funções6280474
Ref: tutorial/controlflow defining-functions6280638
Ref: 1d9c6280638
Ref: tutorial/controlflow tut-functions6280638
Ref: 1d9d6280638
Ref: Definindo funções-Footnote-16285905
Node: Mais sobre definição de funções6286147
Ref: tutorial/controlflow more-on-defining-functions6286327
Ref: 1da06286327
Ref: tutorial/controlflow tut-defining6286327
Ref: 1da16286327
Node: Argumentos com valor padrão6286780
Ref: tutorial/controlflow default-argument-values6286908
Ref: 1da26286908
Ref: tutorial/controlflow tut-defaultargs6286908
Ref: 1da36286908
Node: Argumentos nomeados6289041
Ref: tutorial/controlflow keyword-arguments6289199
Ref: 1da46289199
Ref: tutorial/controlflow tut-keywordargs6289199
Ref: 1da56289199
Node: Parâmetros especiais6293156
Ref: tutorial/controlflow special-parameters6293319
Ref: 1da76293319
Node: Argumentos posicional-ou-nomeados6294632
Ref: tutorial/controlflow positional-or-keyword-arguments6294766
Ref: 1da86294766
Node: Parâmetros somente-posicionais<2>6294998
Ref: tutorial/controlflow positional-only-parameters6295168
Ref: 1da96295168
Node: Argumentos somente-nomeados6295823
Ref: tutorial/controlflow keyword-only-arguments6295981
Ref: 1daa6295981
Node: Exemplos de funções6296277
Ref: tutorial/controlflow function-examples6296414
Ref: 1dab6296414
Node: Recapitulando6299650
Ref: tutorial/controlflow recap6299751
Ref: 1dac6299751
Node: Listas de argumentos arbitrárias6300691
Ref: tutorial/controlflow arbitrary-argument-lists6300870
Ref: 1dad6300870
Ref: tutorial/controlflow tut-arbitraryargs6300870
Ref: 1dae6300870
Node: Desempacotando listas de argumentos6302008
Ref: tutorial/controlflow tut-unpacking-arguments6302184
Ref: 1daf6302184
Ref: tutorial/controlflow unpacking-argument-lists6302184
Ref: 1db06302184
Node: Expressões lambda6303564
Ref: tutorial/controlflow lambda-expressions6303732
Ref: 1db16303732
Ref: tutorial/controlflow tut-lambda6303732
Ref: 1db26303732
Node: Strings de documentação6304912
Ref: tutorial/controlflow documentation-strings6305068
Ref: 1db36305068
Ref: tutorial/controlflow tut-docstrings6305068
Ref: 1d9e6305068
Node: Anotações de função6306527
Ref: tutorial/controlflow function-annotations6306656
Ref: 1db46306656
Ref: tutorial/controlflow tut-annotations6306656
Ref: 1db56306656
Ref: Anotações de função-Footnote-16307973
Ref: Anotações de função-Footnote-26308015
Node: Intermezzo estilo de codificação6308057
Ref: tutorial/controlflow intermezzo-coding-style6308209
Ref: 1db86308209
Ref: tutorial/controlflow tut-codingstyle6308209
Ref: 1db96308209
Ref: Intermezzo estilo de codificação-Footnote-16310648
Node: Estruturas de dados6310690
Ref: tutorial/datastructures doc6310832
Ref: 1dbb6310832
Ref: tutorial/datastructures data-structures6310832
Ref: 1dbc6310832
Ref: tutorial/datastructures translation-repo6310832
Ref: 1dbd6310832
Ref: tutorial/datastructures tut-structures6310832
Ref: 1d906310832
Node: Mais sobre listas6311204
Ref: tutorial/datastructures more-on-lists6311303
Ref: 1dbe6311303
Ref: tutorial/datastructures tut-morelists6311303
Ref: 1dbf6311303
Ref: Mais sobre listas-Footnote-16315326
Node: Usando listas como pilhas6315477
Ref: tutorial/datastructures tut-lists-as-stacks6315589
Ref: 1dc16315589
Ref: tutorial/datastructures using-lists-as-stacks6315589
Ref: 1dc26315589
Node: Usando listas como filas6316271
Ref: tutorial/datastructures tut-lists-as-queues6316417
Ref: 1dc46316417
Ref: tutorial/datastructures using-lists-as-queues6316417
Ref: 1dc56316417
Node: Compreensões de lista<2>6317548
Ref: tutorial/datastructures list-comprehensions6317701
Ref: 1dc66317701
Ref: tutorial/datastructures tut-listcomps6317701
Ref: 1dc76317701
Node: Compreensões de lista aninhadas6321215
Ref: tutorial/datastructures nested-list-comprehensions6321335
Ref: 1dc86321335
Node: A instrução del6323084
Ref: tutorial/datastructures the-del-statement6323212
Ref: 1dc96323212
Ref: tutorial/datastructures tut-del6323212
Ref: 1dca6323212
Node: Tuplas e Sequências6324159
Ref: tutorial/datastructures tuples-and-sequences6324279
Ref: 1dcb6324279
Ref: tutorial/datastructures tut-tuples6324279
Ref: 1da66324279
Node: Conjuntos6327526
Ref: tutorial/datastructures sets6327641
Ref: 1dcd6327641
Ref: tutorial/datastructures tut-sets6327641
Ref: 1dce6327641
Node: Dicionários6329574
Ref: tutorial/datastructures dictionaries6329692
Ref: 1dd06329692
Ref: tutorial/datastructures tut-dictionaries6329692
Ref: 1dd16329692
Node: Técnicas de iteração6333120
Ref: tutorial/datastructures looping-techniques6333251
Ref: 1dd36333251
Ref: tutorial/datastructures tut-loopidioms6333251
Ref: 1d8f6333251
Node: Mais sobre condições6335906
Ref: tutorial/datastructures more-on-conditions6336062
Ref: 1dd46336062
Ref: tutorial/datastructures tut-conditions6336062
Ref: 1dd56336062
Node: Comparando sequências e outros tipos6338401
Ref: tutorial/datastructures comparing-sequences-and-other-types6338525
Ref: 1dd76338525
Ref: tutorial/datastructures tut-comparing6338525
Ref: 1dd86338525
Node: Módulos<2>6340230
Ref: tutorial/modules doc6340351
Ref: 1dd96340351
Ref: tutorial/modules modules6340351
Ref: 1dda6340351
Ref: tutorial/modules translation-repo6340351
Ref: 1ddb6340351
Ref: tutorial/modules tut-modules6340351
Ref: 1ddc6340351
Node: Mais sobre módulos6343178
Ref: tutorial/modules more-on-modules6343271
Ref: 1ddf6343271
Ref: tutorial/modules tut-moremodules6343271
Ref: 1de06343271
Ref: Mais sobre módulos-Footnote-16346682
Node: Executando módulos como scripts6346902
Ref: tutorial/modules executing-modules-as-scripts6347030
Ref: 1de16347030
Ref: tutorial/modules tut-modulesasscripts6347030
Ref: 1de26347030
Node: O caminho de busca dos módulos6348023
Ref: tutorial/modules the-module-search-path6348192
Ref: 1de36348192
Ref: tutorial/modules tut-searchpath6348192
Ref: 1de46348192
Node: Arquivos Python “compilados”6349949
Ref: tutorial/modules compiled-python-files6350077
Ref: 1de86350077
Ref: tutorial/modules tut-pycache6350077
Ref: 6dc6350077
Ref: Arquivos Python “compilados”-Footnote-16352541
Node: Módulos padrões6352583
Ref: tutorial/modules standard-modules6352699
Ref: 1de96352699
Ref: tutorial/modules tut-standardmodules6352699
Ref: 1de76352699
Node: A função dir6354285
Ref: tutorial/modules the-dir-function6354389
Ref: 1dea6354389
Ref: tutorial/modules tut-dir6354389
Ref: 1deb6354389
Node: Pacotes6358896
Ref: tutorial/modules packages6358974
Ref: 1dec6358974
Ref: tutorial/modules tut-packages6358974
Ref: 1ded6358974
Node: Importando * de um pacote6363519
Ref: tutorial/modules importing-from-a-package6363628
Ref: 1def6363628
Ref: tutorial/modules tut-pkg-import-star6363628
Ref: 1df06363628
Node: Referências em um mesmo pacote6367202
Ref: tutorial/modules id26367353
Ref: 1df16367353
Ref: tutorial/modules intra-package-references6367353
Ref: 1df26367353
Node: Pacotes em múltiplos diretórios6368492
Ref: tutorial/modules packages-in-multiple-directories6368609
Ref: 1df36368609
Node: Entrada e Saída6369164
Ref: tutorial/inputoutput doc6369284
Ref: 1df56369284
Ref: tutorial/inputoutput input-and-output6369284
Ref: 1df66369284
Ref: tutorial/inputoutput translation-repo6369284
Ref: 1df76369284
Ref: tutorial/inputoutput tut-io6369284
Ref: 1df86369284
Node: Refinando a formatação de saída6369641
Ref: tutorial/inputoutput fancier-output-formatting6369766
Ref: 1df96369766
Ref: tutorial/inputoutput tut-formatting6369766
Ref: 1dfa6369766
Node: Strings literais formatadas6374099
Ref: tutorial/inputoutput formatted-string-literals6374222
Ref: 1dfd6374222
Ref: tutorial/inputoutput tut-f-strings6374222
Ref: 1dfc6374222
Node: O método format6376388
Ref: tutorial/inputoutput the-string-format-method6376549
Ref: 1dfe6376549
Ref: tutorial/inputoutput tut-string-format6376549
Ref: 1dff6376549
Node: Formatação manual de string6379526
Ref: tutorial/inputoutput manual-string-formatting6379698
Ref: 1e006379698
Node: Formatação de strings à moda antiga6381355
Ref: tutorial/inputoutput old-string-formatting6381502
Ref: 1e046381502
Node: Leitura e escrita de arquivos6382152
Ref: tutorial/inputoutput reading-and-writing-files6382277
Ref: 1e056382277
Ref: tutorial/inputoutput tut-files6382277
Ref: 1e066382277
Node: Métodos de objetos arquivo6385825
Ref: tutorial/inputoutput methods-of-file-objects6385963
Ref: 1e076385963
Ref: tutorial/inputoutput tut-filemethods6385963
Ref: 1e086385963
Node: Gravando dados estruturados com json6389830
Ref: tutorial/inputoutput saving-structured-data-with-json6389968
Ref: 1e0a6389968
Ref: tutorial/inputoutput tut-json6389968
Ref: 1e0b6389968
Ref: Gravando dados estruturados com json-Footnote-16393090
Node: Erros e exceções6393115
Ref: tutorial/errors doc6393231
Ref: 1e0f6393231
Ref: tutorial/errors errors-and-exceptions6393231
Ref: 1e106393231
Ref: tutorial/errors translation-repo6393231
Ref: 1e116393231
Ref: tutorial/errors tut-errors6393231
Ref: 1e126393231
Node: Erros de sintaxe6393824
Ref: tutorial/errors syntax-errors6393914
Ref: 1e136393914
Ref: tutorial/errors tut-syntaxerrors6393914
Ref: 1e146393914
Node: Exceções6394759
Ref: tutorial/errors exceptions6394882
Ref: 1e156394882
Ref: tutorial/errors tut-exceptions6394882
Ref: 1e166394882
Node: Tratamento de exceções6396936
Ref: tutorial/errors handling-exceptions6397064
Ref: 1e176397064
Ref: tutorial/errors tut-handling6397064
Ref: 1d966397064
Node: Levantando exceções6404194
Ref: tutorial/errors raising-exceptions6404338
Ref: 1e186404338
Ref: tutorial/errors tut-raising6404338
Ref: 1e196404338
Node: Encadeamento de exceções6405662
Ref: tutorial/errors exception-chaining6405816
Ref: 1e1a6405816
Ref: tutorial/errors tut-exception-chaining6405816
Ref: 1e1b6405816
Node: Exceções definidas pelo usuário6408129
Ref: tutorial/errors tut-userexceptions6408290
Ref: 1e1c6408290
Ref: tutorial/errors user-defined-exceptions6408290
Ref: 1e1d6408290
Node: Definindo ações de limpeza6409172
Ref: tutorial/errors defining-clean-up-actions6409338
Ref: 1e1e6409338
Ref: tutorial/errors tut-cleanup6409338
Ref: 1e1f6409338
Node: Ações de limpeza predefinidas6412942
Ref: tutorial/errors predefined-clean-up-actions6413129
Ref: 1e206413129
Ref: tutorial/errors tut-cleanup-with6413129
Ref: 1e216413129
Node: Criando e tratando várias exceções não relacionadas6414313
Ref: tutorial/errors raising-and-handling-multiple-unrelated-exceptions6414505
Ref: 1e226414505
Ref: tutorial/errors tut-exception-groups6414505
Ref: 1e236414505
Node: Enriquecendo exceções com notas6418070
Ref: tutorial/errors enriching-exceptions-with-notes6418222
Ref: 1e246418222
Ref: tutorial/errors tut-exception-notes6418222
Ref: 1e256418222
Node: Classes6421195
Ref: tutorial/classes doc6421335
Ref: 1e266421335
Ref: tutorial/classes classes6421335
Ref: 1e276421335
Ref: tutorial/classes translation-repo6421335
Ref: 1e286421335
Ref: tutorial/classes tut-classes6421335
Ref: 1d9f6421335
Node: Uma palavra sobre nomes e objetos6424078
Ref: tutorial/classes a-word-about-names-and-objects6424201
Ref: 1e2a6424201
Ref: tutorial/classes tut-object6424201
Ref: 1e2b6424201
Node: Escopos e espaços de nomes do Python6425181
Ref: tutorial/classes python-scopes-and-namespaces6425344
Ref: 1e2c6425344
Ref: tutorial/classes tut-scopes6425344
Ref: 1dde6425344
Ref: Escopos e espaços de nomes do Python-Footnote-16432041
Node: Exemplo de escopos e espaço de nomes6432453
Ref: tutorial/classes scopes-and-namespaces-example6432564
Ref: 1e2e6432564
Ref: tutorial/classes tut-scopeexample6432564
Ref: 1e2f6432564
Node: Uma primeira olhada nas classes6434044
Ref: tutorial/classes a-first-look-at-classes6434199
Ref: 1e306434199
Ref: tutorial/classes tut-firstclasses6434199
Ref: 1dba6434199
Node: Sintaxe da definição de classe6434530
Ref: tutorial/classes class-definition-syntax6434653
Ref: 1e316434653
Ref: tutorial/classes tut-classdefinition6434653
Ref: 1e326434653
Node: Objetos classe6436279
Ref: tutorial/classes class-objects6436429
Ref: 1e336436429
Ref: tutorial/classes tut-classobjects6436429
Ref: 1e346436429
Node: Objetos instância6438848
Ref: tutorial/classes instance-objects6438981
Ref: 1e366438981
Ref: tutorial/classes tut-instanceobjects6438981
Ref: 1e376438981
Node: Objetos método6440499
Ref: tutorial/classes method-objects6440651
Ref: 1e386440651
Ref: tutorial/classes tut-methodobjects6440651
Ref: 1e396440651
Node: Variáveis de classe e instância6442651
Ref: tutorial/classes class-and-instance-variables6442776
Ref: 1e3a6442776
Ref: tutorial/classes tut-class-and-instance-variables6442776
Ref: 1e3b6442776
Node: Observações aleatórias6445141
Ref: tutorial/classes random-remarks6445267
Ref: 1e3c6445267
Ref: tutorial/classes tut-remarks6445267
Ref: 1e3d6445267
Node: Herança6449423
Ref: tutorial/classes inheritance6449537
Ref: 1e3e6449537
Ref: tutorial/classes tut-inheritance6449537
Ref: 1e3f6449537
Node: Herança múltipla6452532
Ref: tutorial/classes multiple-inheritance6452595
Ref: 1e406452595
Ref: tutorial/classes tut-multiple6452595
Ref: 1e416452595
Node: Variáveis privadas6454743
Ref: tutorial/classes private-variables6454858
Ref: 1e426454858
Ref: tutorial/classes tut-private6454858
Ref: 1e296454858
Node: Curiosidades e conclusões6457968
Ref: tutorial/classes odds-and-ends6458085
Ref: 1e446458085
Ref: tutorial/classes tut-odds6458085
Ref: 1e456458085
Node: Iteradores6459288
Ref: tutorial/classes iterators6459395
Ref: 1e486459395
Ref: tutorial/classes tut-iterators6459395
Ref: 1e496459395
Node: Geradores6461752
Ref: tutorial/classes generators6461854
Ref: 1e4b6461854
Ref: tutorial/classes tut-generators6461854
Ref: 1e4c6461854
Node: Expressões geradoras6463331
Ref: tutorial/classes generator-expressions6463414
Ref: 1e4f6463414
Ref: tutorial/classes tut-genexps6463414
Ref: 1e506463414
Node: Um breve passeio pela biblioteca padrão6464491
Ref: tutorial/stdlib doc6464666
Ref: 1e516464666
Ref: tutorial/stdlib brief-tour-of-the-standard-library6464666
Ref: 1e526464666
Ref: tutorial/stdlib translation-repo6464666
Ref: 1e536464666
Ref: tutorial/stdlib tut-brieftour6464666
Ref: 1e546464666
Node: Interface com o sistema operacional6465123
Ref: tutorial/stdlib operating-system-interface6465262
Ref: 1e556465262
Ref: tutorial/stdlib tut-os-interface6465262
Ref: 1e566465262
Node: Caracteres curinga6466615
Ref: tutorial/stdlib file-wildcards6466793
Ref: 1e576466793
Ref: tutorial/stdlib tut-file-wildcards6466793
Ref: 1e586466793
Node: Argumentos de linha de comando6467083
Ref: tutorial/stdlib command-line-arguments6467278
Ref: 1e596467278
Ref: tutorial/stdlib tut-command-line-arguments6467278
Ref: 1e5a6467278
Node: Redirecionamento de erros e encerramento do programa6468501
Ref: tutorial/stdlib error-output-redirection-and-program-termination6468715
Ref: 1e5b6468715
Ref: tutorial/stdlib tut-stderr6468715
Ref: 1e5c6468715
Node: Reconhecimento de padrões em strings6469249
Ref: tutorial/stdlib string-pattern-matching6469444
Ref: 1e5d6469444
Ref: tutorial/stdlib tut-string-pattern-matching6469444
Ref: 1e5e6469444
Node: Matemática6470179
Ref: tutorial/stdlib mathematics6470340
Ref: 1e5f6470340
Ref: tutorial/stdlib tut-mathematics6470340
Ref: 1e606470340
Node: Acesso à internet6471566
Ref: tutorial/stdlib internet-access6471701
Ref: 1e616471701
Ref: tutorial/stdlib tut-internet-access6471701
Ref: 1e626471701
Node: Data e hora6472792
Ref: tutorial/stdlib dates-and-times6472936
Ref: 1e636472936
Ref: tutorial/stdlib tut-dates-and-times6472936
Ref: 1e646472936
Node: Compressão de dados6473793
Ref: tutorial/stdlib data-compression6473942
Ref: 1e656473942
Ref: tutorial/stdlib tut-data-compression6473942
Ref: 1e666473942
Node: Medição de desempenho6474547
Ref: tutorial/stdlib performance-measurement6474706
Ref: 1e676474706
Ref: tutorial/stdlib tut-performance-measurement6474706
Ref: 1e686474706
Node: Controle de qualidade6475616
Ref: tutorial/stdlib quality-control6475774
Ref: 1e696475774
Ref: tutorial/stdlib tut-quality-control6475774
Ref: 1e6a6475774
Node: Baterias incluídas6477507
Ref: tutorial/stdlib batteries-included6477633
Ref: 1e6b6477633
Ref: tutorial/stdlib tut-batteries-included6477633
Ref: 1e6c6477633
Ref: Baterias incluídas-Footnote-16479625
Node: Um breve passeio pela biblioteca padrão — parte II6479684
Ref: tutorial/stdlib2 doc6479880
Ref: 1e6d6479880
Ref: tutorial/stdlib2 brief-tour-of-the-standard-library-part-ii6479880
Ref: 1e6e6479880
Ref: tutorial/stdlib2 translation-repo6479880
Ref: 1e6f6479880
Ref: tutorial/stdlib2 tut-brieftourtwo6479880
Ref: 1e706479880
Node: Formatando a saída6480436
Ref: tutorial/stdlib2 output-formatting6480570
Ref: 1e716480570
Ref: tutorial/stdlib2 tut-output-formatting6480570
Ref: 1e726480570
Node: Usando templates6482842
Ref: tutorial/stdlib2 templating6483028
Ref: 1e736483028
Ref: tutorial/stdlib2 tut-templating6483028
Ref: 1e746483028
Node: Trabalhando com formatos binários de dados6486000
Ref: tutorial/stdlib2 tut-binary-formats6486185
Ref: 1e756486185
Ref: tutorial/stdlib2 working-with-binary-data-record-layouts6486185
Ref: 1e766486185
Node: Multi-threading<2>6487556
Ref: tutorial/stdlib2 multi-threading6487737
Ref: 1e776487737
Ref: tutorial/stdlib2 tut-multi-threading6487737
Ref: 1e786487737
Node: Gerando logs6490048
Ref: tutorial/stdlib2 logging6490205
Ref: 1e796490205
Ref: tutorial/stdlib2 tut-logging6490205
Ref: 1e7a6490205
Node: Referências fracas6491572
Ref: tutorial/stdlib2 tut-weak-references6491748
Ref: 1e7b6491748
Ref: tutorial/stdlib2 weak-references6491748
Ref: 1e7c6491748
Node: Ferramentas para trabalhar com listas6493633
Ref: tutorial/stdlib2 tools-for-working-with-lists6493836
Ref: 1e7d6493836
Ref: tutorial/stdlib2 tut-list-tools6493836
Ref: 1e7e6493836
Node: Aritmética decimal com ponto flutuante6496515
Ref: tutorial/stdlib2 decimal-floating-point-arithmetic6496690
Ref: 1e7f6496690
Ref: tutorial/stdlib2 tut-decimal-fp6496690
Ref: 1e806496690
Node: Ambientes virtuais e pacotes6498830
Ref: tutorial/venv doc6498994
Ref: 1e816498994
Ref: tutorial/venv translation-repo6498994
Ref: 1e826498994
Ref: tutorial/venv tut-venv6498994
Ref: 1e836498994
Ref: tutorial/venv virtual-environments-and-packages6498994
Ref: 1e846498994
Node: Introdução<4>6499171
Ref: tutorial/venv introduction6499286
Ref: 1e856499286
Node: Criando ambientes virtuais6500690
Ref: tutorial/venv creating-virtual-environments6500843
Ref: 1e876500843
Node: Gerenciando pacotes com o pip6503001
Ref: tutorial/venv managing-packages-with-pip6503130
Ref: 1e886503130
Ref: Gerenciando pacotes com o pip-Footnote-16507186
Ref: Gerenciando pacotes com o pip-Footnote-26507211
Node: E agora?6507289
Ref: tutorial/whatnow doc6507461
Ref: 1e896507461
Ref: tutorial/whatnow translation-repo6507461
Ref: 1e8a6507461
Ref: tutorial/whatnow tut-whatnow6507461
Ref: 1e8b6507461
Ref: tutorial/whatnow what-now6507461
Ref: 1e8c6507461
Ref: E agora?-Footnote-16511203
Node: Edição de entrada interativa e substituição de histórico6511405
Ref: tutorial/interactive doc6511604
Ref: 1e8e6511604
Ref: tutorial/interactive interactive-input-editing-and-history-substitution6511604
Ref: 1e8f6511604
Ref: tutorial/interactive translation-repo6511604
Ref: 1e906511604
Ref: tutorial/interactive tut-interacting6511604
Ref: 1d646511604
Ref: Edição de entrada interativa e substituição de histórico-Footnote-16512256
Node: Tab completion e histórico de edição6512317
Ref: tutorial/interactive tab-completion-and-history-editing6512503
Ref: 1e916512503
Ref: tutorial/interactive tut-keybindings6512503
Ref: 1e926512503
Node: Alternativas ao interpretador interativo6513458
Ref: tutorial/interactive alternatives-to-the-interactive-interpreter6513644
Ref: 1e936513644
Ref: tutorial/interactive tut-commentary6513644
Ref: 1e946513644
Ref: Alternativas ao interpretador interativo-Footnote-16514588
Ref: Alternativas ao interpretador interativo-Footnote-26514617
Node: Aritmética de ponto flutuante problemas e limitações6514658
Ref: tutorial/floatingpoint doc6514854
Ref: 1e966514854
Ref: tutorial/floatingpoint floating-point-arithmetic-issues-and-limitations6514854
Ref: 1e976514854
Ref: tutorial/floatingpoint translation-repo6514854
Ref: 1e986514854
Ref: tutorial/floatingpoint tut-fp-issues6514854
Ref: 1e996514854
Ref: Aritmética de ponto flutuante problemas e limitações-Footnote-16525819
Ref: Aritmética de ponto flutuante problemas e limitações-Footnote-26525897
Node: Erro de representação6525948
Ref: tutorial/floatingpoint representation-error6526063
Ref: 1e9c6526063
Ref: tutorial/floatingpoint tut-fp-error6526063
Ref: 1e9d6526063
Node: Anexo6529741
Ref: tutorial/appendix doc6529867
Ref: 1e9e6529867
Ref: tutorial/appendix appendix6529867
Ref: 1e9f6529867
Ref: tutorial/appendix translation-repo6529867
Ref: 1ea06529867
Ref: tutorial/appendix tut-appendix6529867
Ref: 1ea16529867
Node: Modo interativo<2>6529939
Ref: tutorial/appendix interactive-mode6529999
Ref: 1ea26529999
Ref: tutorial/appendix tut-interac6529999
Ref: 16f6529999
Node: Tratamento de erros6531390
Ref: tutorial/appendix error-handling6531500
Ref: 1ea36531500
Ref: tutorial/appendix tut-error6531500
Ref: 1ea46531500
Ref: Tratamento de erros-Footnote-16532788
Node: Scripts Python executáveis6532867
Ref: tutorial/appendix executable-python-scripts6533031
Ref: 1ea56533031
Ref: tutorial/appendix tut-scripts6533031
Ref: 1d6c6533031
Node: Arquivo de inicialização do modo interativo6534193
Ref: tutorial/appendix the-interactive-startup-file6534364
Ref: 1ea66534364
Ref: tutorial/appendix tut-startup6534364
Ref: 1ea76534364
Node: Módulos de customização6535989
Ref: tutorial/appendix the-customization-modules6536124
Ref: 1ea86536124
Ref: tutorial/appendix tut-customize6536124
Ref: 1ea96536124
Node: Configurações e Uso do Python6537046
Ref: using/index doc6537188
Ref: 1eaa6537188
Ref: using/index python-setup-and-usage6537188
Ref: 1eab6537188
Ref: using/index translation-repo6537188
Ref: 1eac6537188
Ref: using/index using-index6537188
Ref: 1ead6537188
Node: Linha de comando e ambiente6537719
Ref: using/cmdline doc6537860
Ref: 1eae6537860
Ref: using/cmdline command-line-and-environment6537860
Ref: 1eaf6537860
Ref: using/cmdline using-on-general6537860
Ref: 1b366537860
Node: Linha de comando6538244
Ref: using/cmdline command-line6538355
Ref: 1eb16538355
Ref: using/cmdline using-on-cmdline6538355
Ref: 103d6538355
Node: Opções de interface6538813
Ref: using/cmdline interface-options6538915
Ref: 1eb26538915
Ref: using/cmdline using-on-interface-options6538915
Ref: 1eb36538915
Ref: using/cmdline cmdoption-c6540510
Ref: 5e06540510
Ref: using/cmdline cmdoption-m6541145
Ref: 5e16541145
Ref: using/cmdline cmdarg-dash6543859
Ref: 1eb46543859
Ref: using/cmdline cmdarg-script6544296
Ref: 1eb56544296
Ref: Opções de interface-Footnote-16546367
Node: Opções genéricas6546409
Ref: using/cmdline generic-options6546537
Ref: 1eb66546537
Ref: using/cmdline using-on-generic-options6546537
Ref: 1eb76546537
Ref: using/cmdline cmdoption-06546591
Ref: 146f6546591
Ref: using/cmdline cmdoption-h6546606
Ref: 1eb86546606
Ref: using/cmdline cmdoption-help6546621
Ref: 5f06546621
Ref: using/cmdline cmdoption-help-env6546771
Ref: 5f26546771
Ref: using/cmdline cmdoption-help-xoptions6546927
Ref: 5f36546927
Ref: using/cmdline cmdoption-help-all6547091
Ref: 5f46547091
Ref: using/cmdline cmdoption-V6547204
Ref: 1776547204
Ref: using/cmdline cmdoption-version6547219
Ref: d3d6547219
Node: Opções diversas6547604
Ref: using/cmdline miscellaneous-options6547728
Ref: 1eb96547728
Ref: using/cmdline using-on-misc-options6547728
Ref: 103e6547728
Ref: using/cmdline cmdoption-b6547779
Ref: 5e36547779
Ref: using/cmdline cmdoption-B6548203
Ref: 14146548203
Ref: using/cmdline cmdoption-check-hash-based-pycs6548385
Ref: 1eba6548385
Ref: using/cmdline cmdoption-d6549216
Ref: 1ebb6549216
Ref: using/cmdline cmdoption-E6549496
Ref: 9646549496
Ref: using/cmdline cmdoption-i6549735
Ref: 15236549735
Ref: using/cmdline cmdoption-I6550455
Ref: 9656550455
Ref: using/cmdline cmdoption-O6550945
Ref: ddd6550945
Ref: using/cmdline cmdoption-OO6551377
Ref: dde6551377
Ref: using/cmdline cmdoption-P6551738
Ref: 5a46551738
Ref: using/cmdline cmdoption-q6552437
Ref: 15a56552437
Ref: using/cmdline cmdoption-R6552585
Ref: 1c116552585
Ref: using/cmdline cmdoption-s6553808
Ref: 13d56553808
Ref: using/cmdline cmdoption-S6554060
Ref: 11e76554060
Ref: using/cmdline cmdoption-u6554412
Ref: 1b1c6554412
Ref: using/cmdline cmdoption-v6554689
Ref: 146c6554689
Ref: using/cmdline using-on-warnings6555268
Ref: 1ec06555268
Ref: using/cmdline cmdoption-W6555268
Ref: 8cd6555268
Ref: using/cmdline cmdoption-x6558107
Ref: 1ec26558107
Ref: using/cmdline cmdoption-X6558286
Ref: 1766558286
Ref: Opções diversas-Footnote-16565703
Ref: Opções diversas-Footnote-26565745
Ref: Opções diversas-Footnote-36565787
Ref: Opções diversas-Footnote-46565829
Ref: Opções diversas-Footnote-56565871
Node: Controlando cores6565913
Ref: using/cmdline controlling-color6566051
Ref: 1ec86566051
Ref: using/cmdline using-on-controlling-color6566051
Ref: 16b6566051
Ref: Controlando cores-Footnote-16567241
Ref: Controlando cores-Footnote-26567274
Node: Opções que você não deve usar6567304
Ref: using/cmdline no-color6567416
Ref: 1ec96567416
Ref: using/cmdline options-you-shouldn-t-use6567416
Ref: 1eca6567416
Ref: using/cmdline cmdoption-J6567497
Ref: 14136567497
Ref: Opções que você não deve usar-Footnote-16567590
Node: Variáveis de ambiente6567622
Ref: using/cmdline environment-variables6567733
Ref: 1ecb6567733
Ref: using/cmdline using-on-envvars6567733
Ref: 5f16567733
Ref: using/cmdline envvar-PYTHONHOME6568051
Ref: 3bc6568051
Ref: using/cmdline envvar-PYTHONPATH6568693
Ref: 10536568693
Ref: using/cmdline envvar-PYTHONSAFEPATH6569878
Ref: 5a56569878
Ref: using/cmdline envvar-PYTHONPLATLIBDIR6570141
Ref: 1ab06570141
Ref: using/cmdline envvar-PYTHONSTARTUP6570323
Ref: ffe6570323
Ref: using/cmdline envvar-PYTHONOPTIMIZE6571078
Ref: 1ebd6571078
Ref: using/cmdline envvar-PYTHONBREAKPOINT6571324
Ref: aeb6571324
Ref: using/cmdline envvar-PYTHONDEBUG6572005
Ref: 1ebc6572005
Ref: using/cmdline envvar-PYTHONINSPECT6572382
Ref: 15226572382
Ref: using/cmdline envvar-PYTHONUNBUFFERED6573069
Ref: 1b1d6573069
Ref: using/cmdline envvar-PYTHONVERBOSE6573224
Ref: 1ebf6573224
Ref: using/cmdline envvar-PYTHONCASEOK6573471
Ref: 9636573471
Ref: using/cmdline envvar-PYTHONDONTWRITEBYTECODE6573679
Ref: 14156573679
Ref: using/cmdline envvar-PYTHONPYCACHEPREFIX6573939
Ref: 9ab6573939
Ref: using/cmdline envvar-PYTHONHASHSEED6574317
Ref: 10b66574317
Ref: using/cmdline envvar-PYTHONINTMAXSTRDIGITS6575074
Ref: 18c26575074
Ref: using/cmdline envvar-PYTHONIOENCODING6575354
Ref: 10406575354
Ref: using/cmdline envvar-PYTHONNOUSERSITE6576222
Ref: 13d66576222
Ref: using/cmdline envvar-PYTHONUSERBASE6576494
Ref: 13d46576494
Ref: using/cmdline envvar-PYTHONEXECUTABLE6576873
Ref: 1ed16576873
Ref: using/cmdline envvar-PYTHONWARNINGS6577109
Ref: bc26577109
Ref: using/cmdline envvar-PYTHONFAULTHANDLER6578161
Ref: 10be6578161
Ref: using/cmdline envvar-PYTHONTRACEMALLOC6578692
Ref: 1ec46578692
Ref: using/cmdline envvar-PYTHONPROFILEIMPORTTIME6579308
Ref: b086579308
Ref: using/cmdline envvar-PYTHONASYNCIODEBUG6579612
Ref: 1ed26579612
Ref: using/cmdline envvar-PYTHONMALLOC6579852
Ref: c7f6579852
Ref: using/cmdline envvar-PYTHONMALLOCSTATS6581443
Ref: 1cd06581443
Ref: using/cmdline envvar-PYTHONLEGACYWINDOWSFSENCODING6582112
Ref: 2af6582112
Ref: using/cmdline envvar-PYTHONLEGACYWINDOWSSTDIO6582731
Ref: c766582731
Ref: using/cmdline envvar-PYTHONCOERCECLOCALE6583261
Ref: ae56583261
Ref: using/cmdline envvar-PYTHONDEVMODE6586339
Ref: b006586339
Ref: using/cmdline envvar-PYTHONUTF86586754
Ref: ae86586754
Ref: using/cmdline envvar-PYTHONWARNDEFAULTENCODING6587090
Ref: 7bd6587090
Ref: using/cmdline envvar-PYTHONNODEBUGRANGES6587433
Ref: 5b66587433
Ref: using/cmdline envvar-PYTHONPERFSUPPORT6587975
Ref: 46e6587975
Ref: using/cmdline envvar-PYTHON_PERF_JIT_SUPPORT6588482
Ref: 1906588482
Ref: using/cmdline envvar-PYTHON_CPU_COUNT6589030
Ref: 2106589030
Ref: using/cmdline envvar-PYTHON_FROZEN_MODULES6589367
Ref: 18e6589367
Ref: using/cmdline envvar-PYTHON_COLORS6590134
Ref: 14a6590134
Ref: using/cmdline envvar-PYTHON_BASIC_REPL6590420
Ref: 16e6590420
Ref: using/cmdline envvar-PYTHON_HISTORY6590782
Ref: 1916590782
Ref: using/cmdline envvar-PYTHON_GIL6591057
Ref: 1756591057
Ref: using/cmdline envvar-PYTHON_JIT6591546
Ref: 17b6591546
Ref: Variáveis de ambiente-Footnote-16591925
Ref: Variáveis de ambiente-Footnote-26591967
Ref: Variáveis de ambiente-Footnote-36592009
Ref: Variáveis de ambiente-Footnote-46592051
Node: Variáveis de modo de depuração6592093
Ref: using/cmdline debug-mode-variables6592185
Ref: 1eda6592185
Ref: using/cmdline envvar-PYTHONDUMPREFS6592267
Ref: 9ae6592267
Ref: using/cmdline envvar-PYTHONDUMPREFSFILE6592535
Ref: 19ca6592535
Ref: using/cmdline envvar-PYTHON_PRESITE6592932
Ref: 1ec66592932
Node: Utilizando Python em plataformas Unix6593768
Ref: using/unix doc6593939
Ref: 1edb6593939
Ref: using/unix translation-repo6593939
Ref: 1edc6593939
Ref: using/unix using-on-unix6593939
Ref: 1edd6593939
Ref: using/unix using-python-on-unix-platforms6593939
Ref: 1ede6593939
Node: Obtendo e instalando a versão mais recente do Python6594214
Ref: using/unix getting-and-installing-the-latest-version-of-python6594369
Ref: 1edf6594369
Node: No Linux6594537
Ref: using/unix on-linux6594664
Ref: 1ee06594664
Node: Instalação do IDLE6595683
Ref: using/unix installing-idle6595748
Ref: 1ee16595748
Ref: using/unix installing-idle-on-linux6595748
Ref: 1ee26595748
Node: No FreeBSD e OpenBSD6596241
Ref: using/unix on-freebsd-and-openbsd6596368
Ref: 1ee36596368
Node: Compilando o Python6596924
Ref: using/unix building-python6597130
Ref: 1ee46597130
Ref: using/unix building-python-on-unix6597130
Ref: f256597130
Ref: Compilando o Python-Footnote-16598053
Ref: Compilando o Python-Footnote-26598102
Ref: Compilando o Python-Footnote-36598165
Node: Paths e arquivos relacionados com o Python6598228
Ref: using/unix python-related-paths-and-files6598392
Ref: 1ee66598392
Node: Diversos<2>6600036
Ref: using/unix miscellaneous6600202
Ref: 1ee96600202
Node: OpenSSL personalizado6600792
Ref: using/unix custom-openssl6600907
Ref: 1eea6600907
Ref: using/unix unix-custom-openssl6600907
Ref: 1eeb6600907
Node: Configurando o Python6602655
Ref: using/configure doc6602827
Ref: 1eec6602827
Ref: using/configure configure-python6602827
Ref: 1eed6602827
Ref: using/configure translation-repo6602827
Ref: 1eee6602827
Node: Requisitos de construção6603056
Ref: using/configure build-requirements6603165
Ref: 1eef6603165
Ref: Requisitos de construção-Footnote-16605057
Ref: Requisitos de construção-Footnote-26605100
Ref: Requisitos de construção-Footnote-36605183
Ref: Requisitos de construção-Footnote-46605230
Ref: Requisitos de construção-Footnote-56605287
Ref: Requisitos de construção-Footnote-66605344
Ref: Requisitos de construção-Footnote-76605386
Node: Arquivos gerados6605428
Ref: using/configure generated-files6605572
Ref: 1ef06605572
Node: Script configure6606082
Ref: using/configure configure-script6606151
Ref: 1ef16606151
Node: Opções de configuração6606702
Ref: using/configure configure-options6606850
Ref: 1ee56606850
Ref: using/configure id16606850
Ref: 1ef26606850
Node: Opções gerais6607549
Ref: using/configure general-options6607660
Ref: 1ef36607660
Ref: using/configure cmdoption-enable-loadable-sqlite-extensions6607707
Ref: 1ef46607707
Ref: using/configure cmdoption-disable-ipv66608033
Ref: 1ef56608033
Ref: using/configure cmdoption-enable-big-digits6608175
Ref: 74d6608175
Ref: using/configure cmdoption-with-suffix6608480
Ref: 1ef66608480
Ref: using/configure cmdoption-with-tzpath6608957
Ref: 1ef76608957
Ref: using/configure cmdoption-without-decimal-contextvar6609425
Ref: 1efa6609425
Ref: using/configure cmdoption-with-dbmliborder6609776
Ref: 1efc6609776
Ref: using/configure cmdoption-without-c-locale-coercion6610108
Ref: 1efd6610108
Ref: using/configure cmdoption-without-freelists6610374
Ref: 74c6610374
Ref: using/configure cmdoption-with-platlibdir6610522
Ref: 1efe6610522
Ref: using/configure cmdoption-with-wheel-pkg-dir6610768
Ref: 8916610768
Ref: using/configure cmdoption-with-pkg-config6611228
Ref: 1eff6611228
Ref: using/configure cmdoption-enable-pystats6611603
Ref: 18c06611603
Ref: using/configure free-threading-build6614188
Ref: 1f006614188
Ref: using/configure cmdoption-disable-gil6614188
Ref: 1746614188
Ref: using/configure cmdoption-enable-experimental-jit6614580
Ref: 1f016614580
Ref: using/configure cmdoption-arg-PKG_CONFIG6615368
Ref: 1f026615368
Ref: using/configure cmdoption-arg-PKG_CONFIG_LIBDIR6615443
Ref: 1f036615443
Ref: using/configure cmdoption-arg-PKG_CONFIG_PATH6615474
Ref: 1f046615474
Ref: Opções gerais-Footnote-16615575
Node: Opções do compilador C6615617
Ref: using/configure c-compiler-options6615758
Ref: 1f056615758
Ref: using/configure cmdoption-arg-CC6615823
Ref: 1f066615823
Ref: using/configure cmdoption-arg-CFLAGS6615870
Ref: 1f076615870
Ref: using/configure cmdoption-arg-CPP6615927
Ref: 1f086615927
Ref: using/configure cmdoption-arg-CPPFLAGS6615981
Ref: 1f096615981
Node: Opções da ligação6616074
Ref: using/configure linker-options6616240
Ref: 1f0a6616240
Ref: using/configure cmdoption-arg-LDFLAGS6616297
Ref: 1f0b6616297
Ref: using/configure cmdoption-arg-LIBS6616388
Ref: 1f0c6616388
Ref: using/configure cmdoption-arg-MACHDEP6616479
Ref: 1f0d6616479
Node: Opções para dependências de terceiros6616564
Ref: using/configure options-for-third-party-dependencies6616729
Ref: 1f0e6616729
Ref: using/configure cmdoption-arg-BZIP2_CFLAGS6616854
Ref: 1f0f6616854
Ref: using/configure cmdoption-arg-BZIP2_LIBS6616880
Ref: 1f106616880
Ref: using/configure cmdoption-arg-CURSES_CFLAGS6617066
Ref: 1f116617066
Ref: using/configure cmdoption-arg-CURSES_LIBS6617093
Ref: 1f126617093
Ref: using/configure cmdoption-arg-GDBM_CFLAGS6617290
Ref: 1f136617290
Ref: using/configure cmdoption-arg-GDBM_LIBS6617315
Ref: 1f146617315
Ref: using/configure cmdoption-arg-LIBB2_CFLAGS6617404
Ref: 1f156617404
Ref: using/configure cmdoption-arg-LIBB2_LIBS6617430
Ref: 1f166617430
Ref: using/configure cmdoption-arg-LIBEDIT_CFLAGS6617623
Ref: 1f186617623
Ref: using/configure cmdoption-arg-LIBEDIT_LIBS6617651
Ref: 1f196617651
Ref: using/configure cmdoption-arg-LIBFFI_CFLAGS6617822
Ref: 1f1a6617822
Ref: using/configure cmdoption-arg-LIBFFI_LIBS6617849
Ref: 1f1b6617849
Ref: using/configure cmdoption-arg-LIBMPDEC_CFLAGS6618016
Ref: 1f1c6618016
Ref: using/configure cmdoption-arg-LIBMPDEC_LIBS6618045
Ref: 1f1d6618045
Ref: using/configure cmdoption-arg-LIBLZMA_CFLAGS6618355
Ref: 1f1e6618355
Ref: using/configure cmdoption-arg-LIBLZMA_LIBS6618383
Ref: 1f1f6618383
Ref: using/configure cmdoption-arg-LIBREADLINE_CFLAGS6618550
Ref: 1f206618550
Ref: using/configure cmdoption-arg-LIBREADLINE_LIBS6618582
Ref: 1f216618582
Ref: using/configure cmdoption-arg-LIBSQLITE3_CFLAGS6618761
Ref: 1f226618761
Ref: using/configure cmdoption-arg-LIBSQLITE3_LIBS6618792
Ref: 1f236618792
Ref: using/configure cmdoption-arg-LIBUUID_CFLAGS6618968
Ref: 1f246618968
Ref: using/configure cmdoption-arg-LIBUUID_LIBS6618996
Ref: 1f256618996
Ref: using/configure cmdoption-arg-PANEL_CFLAGS6619164
Ref: 1f266619164
Ref: using/configure cmdoption-arg-PANEL_LIBS6619190
Ref: 1f276619190
Ref: using/configure cmdoption-arg-TCLTK_CFLAGS6619485
Ref: 1f286619485
Ref: using/configure cmdoption-arg-TCLTK_LIBS6619511
Ref: 1f296619511
Ref: using/configure cmdoption-arg-ZLIB_CFLAGS6619633
Ref: 1f2a6619633
Ref: using/configure cmdoption-arg-ZLIB_LIBS6619658
Ref: 1f2b6619658
Node: Opções de WebAssembly6619822
Ref: using/configure webassembly-options6619990
Ref: 1f2c6619990
Ref: using/configure cmdoption-with-emscripten-target6620053
Ref: 1f2d6620053
Ref: using/configure cmdoption-enable-wasm-dynamic-linking6620347
Ref: 19486620347
Ref: using/configure cmdoption-enable-wasm-pthreads6620660
Ref: 19186620660
Node: Opções de instalação6620774
Ref: using/configure install-options6620924
Ref: 1f2e6620924
Ref: using/configure cmdoption-prefix6620987
Ref: 1ee76620987
Ref: using/configure cmdoption-exec-prefix6621346
Ref: 1ee86621346
Ref: using/configure cmdoption-disable-test-modules6621582
Ref: 8906621582
Ref: using/configure cmdoption-with-ensurepip6621825
Ref: 1f2f6621825
Node: Opções de desempenho6622251
Ref: using/configure performance-options6622415
Ref: 1f306622415
Ref: using/configure cmdoption-enable-optimizations6622696
Ref: 8656622696
Ref: using/configure envvar-PROFILE_TASK6623867
Ref: 18006623867
Ref: using/configure cmdoption-with-lto6624224
Ref: 74b6624224
Ref: using/configure cmdoption-enable-bolt6624855
Ref: 1f316624855
Ref: using/configure cmdoption-arg-BOLT_APPLY_FLAGS6626081
Ref: 1f326626081
Ref: using/configure cmdoption-arg-BOLT_INSTRUMENT_FLAGS6626232
Ref: 1f336626232
Ref: using/configure cmdoption-with-computed-gotos6626366
Ref: 1f346626366
Ref: using/configure cmdoption-without-mimalloc6626521
Ref: 1f356626521
Ref: using/configure cmdoption-without-pymalloc6626708
Ref: 1f366626708
Ref: using/configure cmdoption-without-doc-strings6626924
Ref: 1f376626924
Ref: using/configure cmdoption-enable-profiling6627247
Ref: 1f386627247
Ref: using/configure cmdoption-with-strict-overflow6627374
Ref: 185b6627374
Ref: Opções de desempenho-Footnote-16627578
Ref: Opções de desempenho-Footnote-26627638
Node: Compilação de depuração do Python6627686
Ref: using/configure debug-build6627849
Ref: 1f96627849
Ref: using/configure python-debug-build6627849
Ref: 1f396627849
Node: Opções de depuração6630452
Ref: using/configure debug-options6630617
Ref: 1f3a6630617
Ref: using/configure cmdoption-with-pydebug6630678
Ref: 4246630678
Ref: using/configure cmdoption-with-trace-refs6630826
Ref: 3956630826
Ref: using/configure cmdoption-with-assertions6631590
Ref: 38c6631590
Ref: using/configure cmdoption-with-valgrind6632019
Ref: 1f3c6632019
Ref: using/configure cmdoption-with-dtrace6632104
Ref: 1f3d6632104
Ref: using/configure cmdoption-with-address-sanitizer6632289
Ref: 1f3e6632289
Ref: using/configure cmdoption-with-memory-sanitizer6632707
Ref: 1f3f6632707
Ref: using/configure cmdoption-with-undefined-behavior-sanitizer6632883
Ref: 1f406632883
Ref: using/configure cmdoption-with-thread-sanitizer6633085
Ref: 1f416633085
Node: Opções da ligação<2>6633256
Ref: using/configure id26633406
Ref: 1f426633406
Ref: using/configure cmdoption-enable-shared6633465
Ref: 8666633465
Ref: using/configure cmdoption-without-static-libpython6633606
Ref: 8926633606
Node: Opções da biblioteca6633805
Ref: using/configure libraries-options6633954
Ref: 1f436633954
Ref: using/configure cmdoption-with-libs6634017
Ref: 1f446634017
Ref: using/configure cmdoption-with-system-expat6634111
Ref: 18b56634111
Ref: using/configure cmdoption-with-system-libmpdec6634254
Ref: 4126634254
Ref: using/configure cmdoption-with-readline6634865
Ref: 1f456634865
Ref: using/configure cmdoption-without-readline6635118
Ref: 1f466635118
Ref: using/configure cmdoption-with-libm6635312
Ref: 1f476635312
Ref: using/configure cmdoption-with-libc6635446
Ref: 1f486635446
Ref: using/configure cmdoption-with-openssl6635570
Ref: 1f496635570
Ref: using/configure cmdoption-with-openssl-rpath6635669
Ref: 8936635669
Node: Opções de segurança6636066
Ref: using/configure security-options6636208
Ref: 1f4a6636208
Ref: using/configure cmdoption-with-hash-algorithm6636270
Ref: 1f4b6636270
Ref: using/configure cmdoption-with-builtin-hashlib-hashes6636614
Ref: 1f4c6636614
Ref: using/configure cmdoption-with-ssl-default-suites6636923
Ref: 1f4d6636923
Node: Opções do macOS6637461
Ref: using/configure macos-options6637596
Ref: 1f4e6637596
Ref: using/configure cmdoption-enable-universalsdk6637674
Ref: 9726637674
Ref: using/configure cmdoption-06637709
Ref: 1f4f6637709
Ref: using/configure cmdoption-enable-framework6637913
Ref: 1f506637913
Ref: using/configure cmdoption-16637945
Ref: 1f516637945
Ref: using/configure cmdoption-with-universal-archs6638160
Ref: 1f526638160
Ref: using/configure cmdoption-with-framework-name6639022
Ref: 1f536639022
Ref: using/configure cmdoption-with-app-store-compliance6639218
Ref: 16de6639218
Ref: using/configure cmdoption-26639259
Ref: 1f546639259
Ref: Opções do macOS-Footnote-16639823
Ref: Opções do macOS-Footnote-26639890
Node: Opções do iOS6639991
Ref: using/configure ios-options6640136
Ref: 1f556640136
Ref: using/configure cmdoption-36640210
Ref: 1f566640210
Ref: using/configure cmdoption-46640398
Ref: 1f576640398
Ref: Opções do iOS-Footnote-16640541
Node: Opções de compilação cruzada6640608
Ref: using/configure cross-compiling-options6640727
Ref: 1f586640727
Ref: using/configure cmdoption-build6641160
Ref: 1f596641160
Ref: using/configure cmdoption-host6641279
Ref: 1f5a6641279
Ref: using/configure cmdoption-with-build-python6641411
Ref: 1f5b6641411
Ref: using/configure cmdoption-arg-CONFIG_SITE6641572
Ref: 1f5c6641572
Ref: using/configure cmdoption-arg-HOSTRUNNER6641883
Ref: 1f5d6641883
Node: Sistema de Construção Python6642249
Ref: using/configure python-build-system6642424
Ref: 1f5e6642424
Node: Arquivos principais do sistema de construção6642646
Ref: using/configure main-files-of-the-build-system6642801
Ref: 1f5f6642801
Node: Principais etapas de construção6643202
Ref: using/configure main-build-steps6643394
Ref: 1f606643394
Node: Alvos principais do Makefile6643858
Ref: using/configure main-makefile-targets6644016
Ref: 1f616644016
Node: make6644255
Ref: using/configure make6644346
Ref: 1f626644346
Node: make platform6645882
Ref: using/configure make-platform6645998
Ref: 1f636645998
Node: make profile-opt6646345
Ref: using/configure make-profile-opt6646467
Ref: 1f646646467
Node: make clean6646747
Ref: using/configure make-clean6646870
Ref: 1f656646870
Node: make distclean6646940
Ref: using/configure make-distclean6647059
Ref: 1f666647059
Ref: make distclean-Footnote-16647315
Node: make install6647796
Ref: using/configure make-install6647914
Ref: 1f676647914
Node: make test6648005
Ref: using/configure make-test6648126
Ref: 1f686648126
Node: make buildbottest6648499
Ref: using/configure make-buildbottest6648622
Ref: 1f696648622
Node: make regen-all6648826
Ref: using/configure make-regen-all6648931
Ref: 1f6a6648931
Node: Extensões C6649272
Ref: using/configure c-extensions6649388
Ref: 1f6b6649388
Node: Sinalizadores do compilador e do vinculador6651191
Ref: using/configure compiler-and-linker-flags6651331
Ref: 1f6c6651331
Node: Sinalizadores do pré-processador6651648
Ref: using/configure preprocessor-flags6651797
Ref: 1f6d6651797
Ref: using/configure envvar-CONFIGURE_CPPFLAGS6651881
Ref: 1f6e6651881
Ref: using/configure envvar-CPPFLAGS6652054
Ref: 15016652054
Ref: using/configure envvar-BASECPPFLAGS6652472
Ref: 1f6f6652472
Ref: using/configure envvar-PY_CPPFLAGS6652546
Ref: 1f706652546
Node: Sinalizadores do compilador6652839
Ref: using/configure compiler-flags6653024
Ref: 1f716653024
Ref: using/configure envvar-CC6653097
Ref: 14fe6653097
Ref: using/configure envvar-CXX6653194
Ref: 1f726653194
Ref: using/configure envvar-CFLAGS6653294
Ref: 14ff6653294
Ref: using/configure envvar-CFLAGS_NODIST6653366
Ref: 1f736653366
Ref: using/configure envvar-COMPILEALL_OPTS6654349
Ref: 1f746654349
Ref: using/configure envvar-EXTRA_CFLAGS6654572
Ref: 1f756654572
Ref: using/configure envvar-CONFIGURE_CFLAGS6654656
Ref: 1f766654656
Ref: using/configure envvar-CONFIGURE_CFLAGS_NODIST6654825
Ref: 1f776654825
Ref: using/configure envvar-BASECFLAGS6655008
Ref: 1f786655008
Ref: using/configure envvar-OPT6655087
Ref: 1f3b6655087
Ref: using/configure envvar-CFLAGS_ALIASING6655156
Ref: 1f796655156
Ref: using/configure envvar-CCSHARED6655335
Ref: 1f7a6655335
Ref: using/configure envvar-CFLAGSFORSHARED6655522
Ref: 1f7b6655522
Ref: using/configure envvar-PY_CFLAGS6655789
Ref: 1f7c6655789
Ref: using/configure envvar-PY_CFLAGS_NODIST6655921
Ref: 1f7d6655921
Ref: using/configure envvar-PY_STDMODULE_CFLAGS6656099
Ref: 1f7e6656099
Ref: using/configure envvar-PY_CORE_CFLAGS6656366
Ref: 1f7f6656366
Ref: using/configure envvar-PY_BUILTIN_MODULE_CFLAGS6656503
Ref: 1f806656503
Ref: using/configure envvar-PURIFY6656821
Ref: 1f816656821
Ref: Sinalizadores do compilador-Footnote-16657005
Node: Sinalizadores do vinculador6657060
Ref: using/configure linker-flags6657203
Ref: 1f826657203
Ref: using/configure envvar-LINKCC6657276
Ref: 1f836657276
Ref: using/configure envvar-CONFIGURE_LDFLAGS6657451
Ref: 1f846657451
Ref: using/configure envvar-LDFLAGS_NODIST6657824
Ref: 1f856657824
Ref: using/configure envvar-CONFIGURE_LDFLAGS_NODIST6658537
Ref: 1f866658537
Ref: using/configure envvar-LDFLAGS6658722
Ref: 15006658722
Ref: using/configure envvar-LIBS6659102
Ref: 1f876659102
Ref: using/configure envvar-LDSHARED6659277
Ref: 1f886659277
Ref: using/configure envvar-BLDSHARED6659420
Ref: 1f896659420
Ref: using/configure envvar-PY_LDFLAGS6659584
Ref: 1f8a6659584
Ref: using/configure envvar-PY_LDFLAGS_NODIST6659677
Ref: 1f8b6659677
Ref: using/configure envvar-PY_CORE_LDFLAGS6659824
Ref: 1f8c6659824
Ref: Sinalizadores do vinculador-Footnote-16660038
Node: Utilizando Python no Windows6660093
Ref: using/windows doc6660250
Ref: 1f8d6660250
Ref: using/windows translation-repo6660250
Ref: 1f8e6660250
Ref: using/windows using-on-windows6660250
Ref: ab66660250
Ref: using/windows using-python-on-windows6660250
Ref: 1f8f6660250
Ref: Utilizando Python no Windows-Footnote-16662847
Ref: Utilizando Python no Windows-Footnote-26662889
Node: O instalador completo6662931
Ref: using/windows the-full-installer6663050
Ref: 1f936663050
Ref: using/windows windows-full6663050
Ref: 1f906663050
Node: Etapas de instalação6663311
Ref: using/windows installation-steps6663435
Ref: 1f946663435
Node: Removendo a Limitação do MAX_PATH6665880
Ref: using/windows max-path6666030
Ref: c5c6666030
Ref: using/windows removing-the-max-path-limitation6666030
Ref: 1f966666030
Node: Instalando sem UI6667015
Ref: using/windows install-quiet-option6667166
Ref: 5ee6667166
Ref: using/windows installing-without-ui6667166
Ref: 1f976667166
Node: Instalando Sem Download6678384
Ref: using/windows install-layout-option6678528
Ref: 1f956678528
Ref: using/windows installing-without-downloading6678528
Ref: 1f986678528
Node: Modificando uma instalação6679589
Ref: using/windows modifying-an-install6679755
Ref: 1f996679755
Node: Instalando binários com threads livres6680782
Ref: using/windows install-freethreaded-windows6680916
Ref: 1726680916
Ref: using/windows installing-free-threaded-binaries6680916
Ref: 1f9a6680916
Ref: Instalando binários com threads livres-Footnote-16683087
Node: O pacote Microsoft Store6683129
Ref: using/windows the-microsoft-store-package6683277
Ref: 1f9b6683277
Ref: using/windows windows-store6683277
Ref: 1d626683277
Node: Problemas conhecidos6685730
Ref: using/windows known-issues6685811
Ref: 1f9c6685811
Node: Redirecionamento de dados locais registro e caminhos temporários6686017
Ref: using/windows redirection-of-local-data-registry-and-temporary-paths6686139
Ref: 1f9d6686139
Ref: Redirecionamento de dados locais registro e caminhos temporários-Footnote-16688479
Node: Os pacotes nuget org6688570
Ref: using/windows the-nuget-org-packages6688716
Ref: 1f9e6688716
Ref: using/windows windows-nuget6688716
Ref: 1f916688716
Ref: Os pacotes nuget org-Footnote-16691327
Ref: Os pacotes nuget org-Footnote-26691358
Ref: Os pacotes nuget org-Footnote-36691404
Ref: Os pacotes nuget org-Footnote-46691453
Node: Pacotes com threads livres6691504
Ref: using/windows free-threaded-packages6691587
Ref: 1f9f6691587
Ref: Pacotes com threads livres-Footnote-16692204
Ref: Pacotes com threads livres-Footnote-26692263
Ref: Pacotes com threads livres-Footnote-36692325
Node: O pacote embutível6692389
Ref: using/windows the-embeddable-package6692531
Ref: 1fa06692531
Ref: using/windows windows-embeddable6692531
Ref: 1f926692531
Ref: O pacote embutível-Footnote-16694481
Node: Aplicação Python6694595
Ref: using/windows python-application6694697
Ref: 1fa16694697
Node: Incorporando Python6696400
Ref: using/windows embedding-python6696502
Ref: 1fa26696502
Node: Pacotes Alternativos6697353
Ref: using/windows alternative-bundles6697499
Ref: 1fa36697499
Ref: Pacotes Alternativos-Footnote-16698517
Ref: Pacotes Alternativos-Footnote-26698570
Ref: Pacotes Alternativos-Footnote-36698613
Ref: Pacotes Alternativos-Footnote-46698665
Ref: Pacotes Alternativos-Footnote-56698832
Node: Configurando o Python<2>6698869
Ref: using/windows configuring-python6699006
Ref: 1fa46699006
Node: Excursus Configurando variáveis de ambiente6699648
Ref: using/windows excursus-setting-environment-variables6699797
Ref: 1fa56699797
Ref: using/windows setting-envvars6699797
Ref: 1d636699797
Node: Encontrando o executável do Python6702258
Ref: using/windows finding-the-python-executable6702407
Ref: 1fa66702407
Ref: using/windows windows-path-mod6702407
Ref: 10896702407
Node: Modo UTF-86703889
Ref: using/windows utf-8-mode6704039
Ref: 1fa76704039
Ref: using/windows win-utf8-mode6704039
Ref: 1fa86704039
Ref: Modo UTF-8-Footnote-16705776
Ref: Modo UTF-8-Footnote-26705818
Node: Inicializador Python para Windows6705860
Ref: using/windows launcher6706006
Ref: 5be6706006
Ref: using/windows python-launcher-for-windows6706006
Ref: 1fa96706006
Ref: Inicializador Python para Windows-Footnote-16707000
Node: Começando6707042
Ref: using/windows getting-started6707145
Ref: 1faa6707145
Node: Pela linha de comando6707293
Ref: using/windows from-the-command-line6707388
Ref: 1fab6707388
Ref: Pela linha de comando-Footnote-16710263
Node: Ambientes virtuais6710305
Ref: using/windows virtual-environments6710422
Ref: 1fac6710422
Node: Por um script6710940
Ref: using/windows from-a-script6711064
Ref: 1fad6711064
Node: Por associação de arquivos6712195
Ref: using/windows from-file-associations6712292
Ref: 1fae6712292
Node: Linhas Shebang6712931
Ref: using/windows shebang-lines6713071
Ref: 1faf6713071
Node: Argumentos em linhas shebang6717432
Ref: using/windows arguments-in-shebang-lines6717578
Ref: 1fb16717578
Node: Personalização6717882
Ref: using/windows customization6718027
Ref: 1fb26718027
Node: Personalização via arquivos INI6718170
Ref: using/windows customization-via-ini-files6718306
Ref: 1fb36718306
Ref: using/windows launcher-ini6718306
Ref: 1fb06718306
Node: Personalizando versões padrão do Python6719066
Ref: using/windows customizing-default-python-versions6719202
Ref: 1fb46719202
Node: Diagnósticos6723361
Ref: using/windows diagnostics6723498
Ref: 1fb56723498
Node: Teste de simulação6724055
Ref: using/windows dry-run6724196
Ref: 1fb66724196
Node: Instalar sob demanda6724702
Ref: using/windows install-on-demand6724849
Ref: 1fb76724849
Node: Códigos de retorno6725494
Ref: using/windows return-codes6725612
Ref: 1fb86725612
Node: Encontrando módulos6727585
Ref: using/windows finding-modules6727740
Ref: 1fb96727740
Ref: using/windows windows-finding-modules6727740
Ref: c3b6727740
Node: Módulos adicionais6733444
Ref: using/windows additional-modules6733594
Ref: 1fba6733594
Node: PyWin326734058
Ref: using/windows pywin326734139
Ref: 1fbc6734139
Ref: PyWin32-Footnote-16734764
Ref: PyWin32-Footnote-26734806
Ref: PyWin32-Footnote-36734895
Ref: PyWin32-Footnote-46734964
Ref: PyWin32-Footnote-56735058
Ref: PyWin32-Footnote-66735117
Node: cx_Freeze6735167
Ref: using/windows cx-freeze6735248
Ref: 1fbd6735248
Ref: cx_Freeze-Footnote-16735550
Node: Compilando Python no Windows6735602
Ref: using/windows compiling-python-on-windows6735750
Ref: 1fbe6735750
Ref: Compilando Python no Windows-Footnote-16736491
Ref: Compilando Python no Windows-Footnote-26736540
Node: Outras plataformas6736603
Ref: using/windows other-platforms6736723
Ref: 1fc06736723
Ref: Outras plataformas-Footnote-16737379
Ref: Outras plataformas-Footnote-26737421
Ref: Outras plataformas-Footnote-36737463
Ref: Outras plataformas-Footnote-46737518
Ref: Outras plataformas-Footnote-56737546
Ref: Outras plataformas-Footnote-66737603
Node: Usando Python em macOS6737653
Ref: using/mac doc6737817
Ref: 1fc16737817
Ref: using/mac translation-repo6737817
Ref: 1fc26737817
Ref: using/mac using-on-mac6737817
Ref: 1fc36737817
Ref: using/mac using-python-on-macos6737817
Ref: 1fc46737817
Ref: using/mac getting-osx6738624
Ref: 1fc66738624
Ref: Usando Python em macOS-Footnote-16738899
Node: Usando Python para macOS do python org6738941
Ref: using/mac getting-and-installing-macpython6739075
Ref: 1736739075
Ref: using/mac using-python-for-macos-from-python-org6739075
Ref: 1fc76739075
Node: Etapas de instalação<2>6739272
Ref: using/mac installation-steps6739411
Ref: 1fc86739411
Ref: Etapas de instalação<2>-Footnote-16744989
Ref: Etapas de instalação<2>-Footnote-26745031
Ref: Etapas de instalação<2>-Footnote-36745079
Ref: Etapas de instalação<2>-Footnote-46745136
Ref: Etapas de instalação<2>-Footnote-56745183
Node: Como executar um script Python6745232
Ref: using/mac how-to-run-a-python-script6745371
Ref: 1fca6745371
Node: Distribuições alternativas6747519
Ref: using/mac alternative-bundles6747701
Ref: 1fc56747701
Ref: using/mac alternative-distributions6747701
Ref: 1fcc6747701
Ref: Distribuições alternativas-Footnote-16748823
Ref: Distribuições alternativas-Footnote-26748876
Ref: Distribuições alternativas-Footnote-36748919
Ref: Distribuições alternativas-Footnote-46748943
Node: Instalando pacotes adicionais ao python6748976
Ref: using/mac installing-additional-python-packages6749140
Ref: 1fcd6749140
Ref: using/mac mac-package-manager6749140
Ref: 1fce6749140
Ref: using/mac osx-gui-scripts6749317
Ref: 1fcf6749317
Ref: Instalando pacotes adicionais ao python-Footnote-16749355
Node: Programação de GUI6749434
Ref: using/mac gui-programming6749589
Ref: 1fd06749589
Ref: using/mac gui-programming-on-the-mac6749589
Ref: 1fd16749589
Ref: Programação de GUI-Footnote-16750713
Ref: Programação de GUI-Footnote-26750754
Ref: Programação de GUI-Footnote-36750794
Ref: Programação de GUI-Footnote-46750835
Ref: Programação de GUI-Footnote-56750889
Ref: Programação de GUI-Footnote-66750914
Ref: Programação de GUI-Footnote-76750950
Ref: Programação de GUI-Footnote-86750978
Node: Tópicos Avançados6751007
Ref: using/mac advanced-topics6751138
Ref: 1fd26751138
Node: Instalando binários com threads livres<2>6751399
Ref: using/mac install-freethreaded-macos6751544
Ref: 1fc96751544
Ref: using/mac installing-free-threaded-binaries6751544
Ref: 1fd36751544
Ref: Instalando binários com threads livres<2>-Footnote-16756944
Node: Instalação usando a linha de comando6756986
Ref: using/mac installing-using-the-command-line6757172
Ref: 1fd46757172
Node: Distribuindo aplicações Python6760122
Ref: using/mac distributing-python-applications6760294
Ref: 1fd56760294
Ref: using/mac distributing-python-applications-on-the-mac6760294
Ref: 1fd66760294
Ref: Distribuindo aplicações Python-Footnote-16761000
Ref: Distribuindo aplicações Python-Footnote-26761041
Ref: Distribuindo aplicações Python-Footnote-36761082
Ref: Distribuindo aplicações Python-Footnote-46761110
Node: Conformidade com a App Store6761143
Ref: using/mac app-store-compliance6761268
Ref: 1fd76761268
Ref: Conformidade com a App Store-Footnote-16762562
Node: Outros recursos6762656
Ref: using/mac other-resources6762758
Ref: 1fd86762758
Ref: Outros recursos-Footnote-16763051
Ref: Outros recursos-Footnote-26763094
Node: Utilizando Python no Android6763163
Ref: using/android doc6763319
Ref: 1fd96763319
Ref: using/android translation-repo6763319
Ref: 1fda6763319
Ref: using/android using-android6763319
Ref: 1fdb6763319
Ref: using/android using-python-on-android6763319
Ref: 1fdc6763319
Node: Adicionando Python a uma aplicação Android6764759
Ref: using/android adding-python-to-an-android-app6764918
Ref: 1fdf6764918
Ref: Adicionando Python a uma aplicação Android-Footnote-16766433
Ref: Adicionando Python a uma aplicação Android-Footnote-26766474
Ref: Adicionando Python a uma aplicação Android-Footnote-36766515
Ref: Adicionando Python a uma aplicação Android-Footnote-46766551
Ref: Adicionando Python a uma aplicação Android-Footnote-56766618
Ref: Adicionando Python a uma aplicação Android-Footnote-66766649
Ref: Adicionando Python a uma aplicação Android-Footnote-76766717
Ref: Adicionando Python a uma aplicação Android-Footnote-86766787
Ref: Adicionando Python a uma aplicação Android-Footnote-96766877
Ref: Adicionando Python a uma aplicação Android-Footnote-106766999
Node: Construindo um pacote Python para Android6767100
Ref: using/android building-a-python-package-for-android6767259
Ref: 1fe06767259
Ref: Construindo um pacote Python para Android-Footnote-16767672
Node: Usando Python no iOS6767738
Ref: using/ios doc6767887
Ref: 1fe16767887
Ref: using/ios translation-repo6767887
Ref: 1fe26767887
Ref: using/ios using-ios6767887
Ref: 1fe36767887
Ref: using/ios using-python-on-ios6767887
Ref: 1fe46767887
Ref: Usando Python no iOS-Footnote-16769600
Ref: Usando Python no iOS-Footnote-26769628
Node: Python em tempo de execução no iOS6769653
Ref: using/ios python-at-runtime-on-ios6769779
Ref: 1fe56769779
Node: Compatibilidade com a versão do iOS6770059
Ref: using/ios ios-version-compatibility6770206
Ref: 1fe66770206
Node: Identificação da plataforma6770796
Ref: using/ios platform-identification6770989
Ref: 1fe76770989
Node: Disponibilidade da biblioteca padrão6771672
Ref: using/ios standard-library-availability6771859
Ref: 1fea6771859
Node: Módulos de extensão binária6772123
Ref: using/ios binary-extension-modules6772309
Ref: 1feb6772309
Node: Binários stub do compilador6775349
Ref: using/ios compiler-stub-binaries6775489
Ref: 1fef6775489
Node: Instalando Python no iOS6777036
Ref: using/ios installing-python-on-ios6777202
Ref: 1ff06777202
Node: Ferramentas para construir aplicações de iOS6777396
Ref: using/ios tools-for-building-ios-apps6777547
Ref: 1ff16777547
Node: Adicionando Python a um projeto iOS6778468
Ref: using/ios adding-ios6778653
Ref: 1fec6778653
Ref: using/ios adding-python-to-an-ios-project6778653
Ref: 1ff26778653
Ref: Adicionando Python a um projeto iOS-Footnote-16788489
Ref: Adicionando Python a um projeto iOS-Footnote-26788534
Node: Testando um pacote Python6788601
Ref: using/ios testing-a-python-package6788731
Ref: 1ff46788731
Ref: Testando um pacote Python-Footnote-16791489
Ref: Testando um pacote Python-Footnote-26791553
Node: Conformidade com a App Store<2>6791620
Ref: using/ios app-store-compliance6791741
Ref: 1ff56791741
Ref: Conformidade com a App Store<2>-Footnote-16792822
Node: Editores e IDEs6792916
Ref: using/editors doc6793028
Ref: 1ff66793028
Ref: using/editors editors6793028
Ref: 1fcb6793028
Ref: using/editors editors-and-ides6793028
Ref: 1ff76793028
Ref: using/editors translation-repo6793028
Ref: 1ff86793028
Ref: Editores e IDEs-Footnote-16793396
Node: IDLE — editor e console Python6793438
Ref: using/editors idle-python-editor-and-shell6793553
Ref: 1ff96793553
Node: Outros editores e IDEs6794010
Ref: using/editors other-editors-and-ides6794125
Ref: 1ffa6794125
Ref: Outros editores e IDEs-Footnote-16794555
Ref: Outros editores e IDEs-Footnote-26794598
Ref: Outros editores e IDEs-Footnote-36794649
Node: A Referência da Linguagem Python6794720
Ref: reference/index doc6794872
Ref: 1ffb6794872
Ref: reference/index reference-index6794872
Ref: 1456794872
Ref: reference/index the-python-language-reference6794872
Ref: 1ffc6794872
Ref: reference/index translation-repo6794872
Ref: 1ffd6794872
Node: Introdução<5>6795944
Ref: reference/introduction doc6796054
Ref: 1ffe6796054
Ref: reference/introduction id16796054
Ref: 1fff6796054
Ref: reference/introduction introduction6796054
Ref: 20006796054
Node: Implementações Alternativas6798043
Ref: reference/introduction alternate-implementations6798142
Ref: 20016798142
Ref: reference/introduction implementations6798142
Ref: 1eb06798142
Ref: Implementações Alternativas-Footnote-16800692
Ref: Implementações Alternativas-Footnote-26800724
Ref: Implementações Alternativas-Footnote-36800761
Ref: Implementações Alternativas-Footnote-46800793
Node: Notação6800819
Ref: reference/introduction id26800918
Ref: 20026800918
Ref: reference/introduction notation6800918
Ref: 20036800918
Ref: reference/introduction grammar-token-notation-name6801122
Ref: 20046801122
Ref: reference/introduction grammar-token-notation-lc_letter6801196
Ref: 20056801196
Ref: Notação-Footnote-16803457
Node: Análise léxica6803521
Ref: reference/lexical_analysis doc6803655
Ref: 20066803655
Ref: reference/lexical_analysis lexical6803655
Ref: 20076803655
Ref: reference/lexical_analysis lexical-analysis6803655
Ref: 20086803655
Ref: reference/lexical_analysis translation-repo6803655
Ref: 20096803655
Ref: Análise léxica-Footnote-16804472
Node: Estrutura das linhas6804514
Ref: reference/lexical_analysis id16804609
Ref: 200b6804609
Ref: reference/lexical_analysis line-structure6804609
Ref: 200c6804609
Node: Linhas lógicas6804974
Ref: reference/lexical_analysis id26805070
Ref: 200d6805070
Ref: reference/lexical_analysis logical-lines6805070
Ref: 200e6805070
Node: Linhas físicas6805505
Ref: reference/lexical_analysis id36805622
Ref: 200f6805622
Ref: reference/lexical_analysis physical-lines6805622
Ref: 20106805622
Node: Comentários6806505
Ref: reference/lexical_analysis comments6806637
Ref: 20116806637
Ref: reference/lexical_analysis id46806637
Ref: 20126806637
Node: Declarações de codificação6806977
Ref: reference/lexical_analysis encoding-declarations6807122
Ref: 20136807122
Ref: reference/lexical_analysis encodings6807122
Ref: 20146807122
Node: Junção de linha explícita6808414
Ref: reference/lexical_analysis explicit-joining6808575
Ref: 20156808575
Ref: reference/lexical_analysis explicit-line-joining6808575
Ref: 20166808575
Node: Junção de linha implícita6809638
Ref: reference/lexical_analysis implicit-joining6809785
Ref: 20176809785
Ref: reference/lexical_analysis implicit-line-joining6809785
Ref: 20186809785
Node: Linhas em branco6810698
Ref: reference/lexical_analysis blank-lines6810829
Ref: 20196810829
Ref: reference/lexical_analysis id56810829
Ref: 201a6810829
Node: Indentação6811390
Ref: reference/lexical_analysis id66811524
Ref: 201b6811524
Ref: reference/lexical_analysis indentation6811524
Ref: 201c6811524
Node: Espaços em branco entre tokens6815108
Ref: reference/lexical_analysis whitespace6815217
Ref: 201d6815217
Ref: reference/lexical_analysis whitespace-between-tokens6815217
Ref: 201e6815217
Node: Outros tokens6815679
Ref: reference/lexical_analysis id76815815
Ref: 201f6815815
Ref: reference/lexical_analysis other-tokens6815815
Ref: 20206815815
Node: Identificadores e palavras-chave6816300
Ref: reference/lexical_analysis identifiers6816424
Ref: 20216816424
Ref: reference/lexical_analysis identifiers-and-keywords6816424
Ref: 20226816424
Ref: reference/lexical_analysis grammar-token-python-grammar-identifier6817360
Ref: 20236817360
Ref: reference/lexical_analysis grammar-token-python-grammar-id_start6817432
Ref: 20266817432
Ref: reference/lexical_analysis grammar-token-python-grammar-id_continue6817581
Ref: 20276817581
Ref: reference/lexical_analysis grammar-token-python-grammar-xid_start6817741
Ref: 20246817741
Ref: reference/lexical_analysis grammar-token-python-grammar-xid_continue6817861
Ref: 20256817861
Ref: Identificadores e palavras-chave-Footnote-16819063
Ref: Identificadores e palavras-chave-Footnote-26819105
Ref: Identificadores e palavras-chave-Footnote-36819147
Node: Palavras reservadas6819210
Ref: reference/lexical_analysis id86819338
Ref: 20286819338
Ref: reference/lexical_analysis keywords6819338
Ref: 20296819338
Node: Palavras reservadas contextuais6819996
Ref: reference/lexical_analysis id96820170
Ref: 202a6820170
Ref: reference/lexical_analysis soft-keywords6820170
Ref: 80f6820170
Node: Classes reservadas de identificadores6821039
Ref: reference/lexical_analysis id-classes6821185
Ref: 202b6821185
Ref: reference/lexical_analysis reserved-classes-of-identifiers6821185
Ref: 202c6821185
Node: Literais6823342
Ref: reference/lexical_analysis id106823463
Ref: 202e6823463
Ref: reference/lexical_analysis literals6823463
Ref: 202f6823463
Node: Literais de string e bytes6823770
Ref: reference/lexical_analysis string-and-bytes-literals6823885
Ref: 20306823885
Ref: reference/lexical_analysis strings6823885
Ref: 20316823885
Ref: reference/lexical_analysis grammar-token-python-grammar-stringliteral6824030
Ref: 20326824030
Ref: reference/lexical_analysis grammar-token-python-grammar-stringprefix6824135
Ref: 20336824135
Ref: reference/lexical_analysis grammar-token-python-grammar-shortstring6824275
Ref: 20346824275
Ref: reference/lexical_analysis grammar-token-python-grammar-longstring6824378
Ref: 20356824378
Ref: reference/lexical_analysis grammar-token-python-grammar-shortstringitem6824487
Ref: 20366824487
Ref: reference/lexical_analysis grammar-token-python-grammar-longstringitem6824572
Ref: 20376824572
Ref: reference/lexical_analysis grammar-token-python-grammar-shortstringchar6824656
Ref: 20386824656
Ref: reference/lexical_analysis grammar-token-python-grammar-longstringchar6824739
Ref: 203a6824739
Ref: reference/lexical_analysis grammar-token-python-grammar-stringescapeseq6824798
Ref: 20396824798
Ref: reference/lexical_analysis grammar-token-python-grammar-bytesliteral6824851
Ref: 203b6824851
Ref: reference/lexical_analysis grammar-token-python-grammar-bytesprefix6824950
Ref: 203c6824950
Ref: reference/lexical_analysis grammar-token-python-grammar-shortbytes6825040
Ref: 203d6825040
Ref: reference/lexical_analysis grammar-token-python-grammar-longbytes6825140
Ref: 203e6825140
Ref: reference/lexical_analysis grammar-token-python-grammar-shortbytesitem6825246
Ref: 203f6825246
Ref: reference/lexical_analysis grammar-token-python-grammar-longbytesitem6825328
Ref: 20406825328
Ref: reference/lexical_analysis grammar-token-python-grammar-shortbyteschar6825409
Ref: 20416825409
Ref: reference/lexical_analysis grammar-token-python-grammar-longbyteschar6825490
Ref: 20436825490
Ref: reference/lexical_analysis grammar-token-python-grammar-bytesescapeseq6825547
Ref: 20426825547
Ref: Literais de string e bytes-Footnote-16828296
Node: Sequências de escape6828338
Ref: reference/lexical_analysis escape-sequences6828422
Ref: 45a6828422
Ref: reference/lexical_analysis id116828422
Ref: 20446828422
Ref: Sequências de escape-Footnote-16835638
Node: Concatenação de literal de string6835710
Ref: reference/lexical_analysis string-concatenation6835843
Ref: 20456835843
Ref: reference/lexical_analysis string-literal-concatenation6835843
Ref: 20466835843
Ref: reference/lexical_analysis f-strings6837063
Ref: 9b16837063
Node: f-strings6837063
Ref: reference/lexical_analysis formatted-string-literals6837189
Ref: 20476837189
Ref: reference/lexical_analysis id136837189
Ref: 20486837189
Ref: reference/lexical_analysis grammar-token-python-grammar-f_string6837838
Ref: 20496837838
Ref: reference/lexical_analysis grammar-token-python-grammar-replacement_field6837941
Ref: 204b6837941
Ref: reference/lexical_analysis grammar-token-python-grammar-f_expression6838069
Ref: 204c6838069
Ref: reference/lexical_analysis grammar-token-python-grammar-conversion6838327
Ref: 204d6838327
Ref: reference/lexical_analysis grammar-token-python-grammar-format_spec6838370
Ref: 204e6838370
Ref: reference/lexical_analysis grammar-token-python-grammar-literal_char6838459
Ref: 204a6838459
Ref: f-strings-Footnote-16844531
Node: Literais numéricos6844573
Ref: reference/lexical_analysis numbers6844681
Ref: 20526844681
Ref: reference/lexical_analysis numeric-literals6844681
Ref: 20536844681
Node: Inteiros literais6845153
Ref: reference/lexical_analysis integer-literals6845279
Ref: 20546845279
Ref: reference/lexical_analysis integers6845279
Ref: 20556845279
Ref: reference/lexical_analysis grammar-token-python-grammar-integer6845405
Ref: 20566845405
Ref: reference/lexical_analysis grammar-token-python-grammar-decinteger6845529
Ref: 20576845529
Ref: reference/lexical_analysis grammar-token-python-grammar-bininteger6845625
Ref: 20586845625
Ref: reference/lexical_analysis grammar-token-python-grammar-octinteger6845694
Ref: 20596845694
Ref: reference/lexical_analysis grammar-token-python-grammar-hexinteger6845763
Ref: 205a6845763
Ref: reference/lexical_analysis grammar-token-python-grammar-nonzerodigit6845832
Ref: 205b6845832
Ref: reference/lexical_analysis grammar-token-python-grammar-digit6845864
Ref: 205c6845864
Ref: reference/lexical_analysis grammar-token-python-grammar-bindigit6845896
Ref: 205d6845896
Ref: reference/lexical_analysis grammar-token-python-grammar-octdigit6845928
Ref: 205e6845928
Ref: reference/lexical_analysis grammar-token-python-grammar-hexdigit6845960
Ref: 205f6845960
Node: Literais de ponto flutuante6846905
Ref: reference/lexical_analysis floating6847033
Ref: 20606847033
Ref: reference/lexical_analysis floating-point-literals6847033
Ref: 20616847033
Ref: reference/lexical_analysis grammar-token-python-grammar-floatnumber6847189
Ref: 20626847189
Ref: reference/lexical_analysis grammar-token-python-grammar-pointfloat6847265
Ref: 20636847265
Ref: reference/lexical_analysis grammar-token-python-grammar-exponentfloat6847364
Ref: 20646847364
Ref: reference/lexical_analysis grammar-token-python-grammar-digitpart6847460
Ref: 20656847460
Ref: reference/lexical_analysis grammar-token-python-grammar-fraction6847530
Ref: 20666847530
Ref: reference/lexical_analysis grammar-token-python-grammar-exponent6847580
Ref: 20676847580
Node: Literais imaginários6848217
Ref: reference/lexical_analysis imaginary6848319
Ref: 20686848319
Ref: reference/lexical_analysis imaginary-literals6848319
Ref: 20696848319
Ref: reference/lexical_analysis grammar-token-python-grammar-imagnumber6848459
Ref: 206a6848459
Node: Operadores6849015
Ref: reference/lexical_analysis id146849117
Ref: 206b6849117
Ref: reference/lexical_analysis operators6849117
Ref: 206c6849117
Node: Delimitadores6849357
Ref: reference/lexical_analysis delimiters6849442
Ref: 206d6849442
Ref: reference/lexical_analysis id156849442
Ref: 206e6849442
Node: Modelo de dados6850442
Ref: reference/datamodel doc6850581
Ref: 206f6850581
Ref: reference/datamodel data-model6850581
Ref: 20706850581
Ref: reference/datamodel datamodel6850581
Ref: 1ae96850581
Ref: reference/datamodel translation-repo6850581
Ref: 20716850581
Node: Objetos valores e tipos6850766
Ref: reference/datamodel objects6850879
Ref: 20726850879
Ref: reference/datamodel objects-values-and-types6850879
Ref: 20736850879
Ref: Objetos valores e tipos-Footnote-16856138
Node: A hierarquia de tipos padrão6856371
Ref: reference/datamodel the-standard-type-hierarchy6856520
Ref: 20746856520
Ref: reference/datamodel types6856520
Ref: 20756856520
Node: None6857668
Ref: reference/datamodel none6857761
Ref: 20766857761
Node: NotImplemented6858110
Ref: reference/datamodel notimplemented6858220
Ref: 20776858220
Node: Ellipsis6859113
Ref: reference/datamodel ellipsis6859233
Ref: 20796859233
Node: numbers Number6859483
Ref: reference/datamodel numbers-number6859600
Ref: 207a6859600
Node: numbers Integral6860952
Ref: reference/datamodel numbers-integral6861046
Ref: 207b6861046
Node: numbers Real float6862389
Ref: reference/datamodel numbers-real-float6862515
Ref: 207c6862515
Node: numbers Complex complex6863145
Ref: reference/datamodel numbers-complex-complex6863246
Ref: 207d6863246
Node: Sequências6863672
Ref: reference/datamodel sequences6863799
Ref: 207e6863799
Node: Sequências imutáveis6865105
Ref: reference/datamodel immutable-sequences6865205
Ref: 207f6865205
Node: Sequências mutáveis6867391
Ref: reference/datamodel mutable-sequences6867491
Ref: 20816867491
Node: Tipos de conjuntos6868573
Ref: reference/datamodel set-types6868697
Ref: 20826868697
Node: Mapeamentos6870130
Ref: reference/datamodel mappings6870259
Ref: 20846870259
Node: Dicionários<2>6870777
Ref: reference/datamodel dictionaries6870840
Ref: 20856870840
Node: Tipos chamáveis6872466
Ref: reference/datamodel callable-types6872588
Ref: 20866872588
Node: Funções definidas pelo usuário6873046
Ref: reference/datamodel user-defined-funcs6873163
Ref: 2996873163
Ref: reference/datamodel user-defined-functions6873163
Ref: 20876873163
Node: Atributos especiais de somente leitura6873616
Ref: reference/datamodel special-read-only-attributes6873763
Ref: 20886873763
Ref: reference/datamodel function __builtins__6874185
Ref: 20896874185
Ref: reference/datamodel function __globals__6874635
Ref: 13166874635
Ref: reference/datamodel function __closure__6875143
Ref: 13136875143
Node: Atributos especiais graváveis6875919
Ref: reference/datamodel special-writable-attributes6876066
Ref: 208c6876066
Ref: reference/datamodel function __doc__6876531
Ref: 12196876531
Ref: reference/datamodel function __name__6876826
Ref: 13176876826
Ref: reference/datamodel function __qualname__6877119
Ref: 208d6877119
Ref: reference/datamodel function __module__6877573
Ref: 208e6877573
Ref: reference/datamodel function __defaults__6877878
Ref: 13146877878
Ref: reference/datamodel function __code__6878386
Ref: 29a6878386
Ref: reference/datamodel function __dict__6878683
Ref: 13156878683
Ref: reference/datamodel function __annotations__6879079
Ref: 12186879079
Ref: reference/datamodel function __kwdefaults__6879717
Ref: 105e6879717
Ref: reference/datamodel function __type_params__6880040
Ref: 20906880040
Node: Métodos de instância6881095
Ref: reference/datamodel id26881240
Ref: 20926881240
Ref: reference/datamodel instance-methods6881240
Ref: 1e476881240
Ref: reference/datamodel method __self__6881530
Ref: 140f6881530
Ref: reference/datamodel method __func__6881837
Ref: 13406881837
Ref: reference/datamodel method __doc__6882053
Ref: 20946882053
Ref: reference/datamodel method __name__6882559
Ref: 20956882559
Ref: reference/datamodel method __module__6882851
Ref: 20966882851
Ref: reference/datamodel method-binding6883475
Ref: 20936883475
Node: Funções geradoras6885037
Ref: reference/datamodel generator-functions6885171
Ref: 20976885171
Node: Funções de corrotina6885880
Ref: reference/datamodel coroutine-functions6886024
Ref: 20986886024
Node: Funções geradoras assíncronas6886447
Ref: reference/datamodel asynchronous-generator-functions6886594
Ref: 209a6886594
Node: Funções embutidas<2>6887469
Ref: reference/datamodel built-in-functions6887612
Ref: 209b6887612
Ref: reference/datamodel builtin-functions6887612
Ref: 20916887612
Node: Métodos embutidos6888454
Ref: reference/datamodel built-in-methods6888575
Ref: 209c6888575
Ref: reference/datamodel builtin-methods6888575
Ref: 209d6888575
Node: Classes<2>6889090
Ref: reference/datamodel classes6889210
Ref: 209e6889210
Ref: reference/datamodel id36889210
Ref: 209f6889210
Node: Instâncias de classe6889590
Ref: reference/datamodel class-instances6889683
Ref: 20a06889683
Node: Módulos<3>6889871
Ref: reference/datamodel module-objects6890004
Ref: 20a16890004
Ref: reference/datamodel modules6890004
Ref: 20a26890004
Node: Atributos relacionados à importação em objetos de módulo6891140
Ref: reference/datamodel import-mod-attrs6891306
Ref: 20a46891306
Ref: reference/datamodel import-related-attributes-on-module-objects6891306
Ref: 20a56891306
Ref: reference/datamodel module __name__6893048
Ref: 13d26893048
Ref: reference/datamodel module __spec__6893433
Ref: 20a76893433
Ref: reference/datamodel module __package__6893741
Ref: 2d76893741
Ref: reference/datamodel module __loader__6895983
Ref: 2e26895983
Ref: reference/datamodel module __path__6897321
Ref: 1df46897321
Ref: reference/datamodel module __file__6897804
Ref: 20ad6897804
Ref: reference/datamodel module __cached__6897835
Ref: 2d56897835
Ref: Atributos relacionados à importação em objetos de módulo-Footnote-16900102
Ref: Atributos relacionados à importação em objetos de módulo-Footnote-26900144
Node: Outros atributos graváveis em objetos de módulo6900186
Ref: reference/datamodel other-writable-attributes-on-module-objects6900384
Ref: 20af6900384
Ref: reference/datamodel module __doc__6900637
Ref: 19786900637
Ref: reference/datamodel module __annotations__6900793
Ref: 20b06900793
Node: Dicionários do módulo6901106
Ref: reference/datamodel module-dictionaries6901235
Ref: 20b16901235
Ref: reference/datamodel module __dict__6901382
Ref: 20b26901382
Node: Classes personalizadas6902027
Ref: reference/datamodel class-attrs-and-methods6902168
Ref: 20b36902168
Ref: reference/datamodel custom-classes6902168
Ref: 20b46902168
Node: Atributos especiais6904020
Ref: reference/datamodel special-attributes6904125
Ref: 20b56904125
Ref: reference/datamodel type __name__6904501
Ref: 14f36904501
Ref: reference/datamodel type __qualname__6904792
Ref: 20b66904792
Ref: reference/datamodel type __module__6905106
Ref: 3746905106
Ref: reference/datamodel type __dict__6905320
Ref: c786905320
Ref: reference/datamodel type __bases__6905747
Ref: 14f46905747
Ref: reference/datamodel type __base__6906265
Ref: 20b76906265
Ref: reference/datamodel type __doc__6906756
Ref: 1e356906756
Ref: reference/datamodel type __annotations__6907094
Ref: 20b96907094
Ref: reference/datamodel type __type_params__6908564
Ref: 20ba6908564
Ref: reference/datamodel type __static_attributes__6909088
Ref: 14b6909088
Ref: reference/datamodel type __firstlineno__6909642
Ref: 14c6909642
Ref: reference/datamodel type __mro__6910288
Ref: 20bb6910288
Node: Métodos especiais6910600
Ref: reference/datamodel special-methods6910705
Ref: 20bc6910705
Ref: reference/datamodel type mro6910886
Ref: 20bd6910886
Ref: reference/datamodel type __subclasses__6911163
Ref: 5736911163
Node: Instâncias de classe<2>6911549
Ref: reference/datamodel id46911733
Ref: 20be6911733
Node: Atributos especiais<2>6913390
Ref: reference/datamodel id56913473
Ref: 20c16913473
Ref: reference/datamodel object __class__6913532
Ref: 14f56913532
Ref: reference/datamodel object __dict__6913622
Ref: 55b6913622
Node: Objetos de E/S também conhecidos como objetos arquivo6913900
Ref: reference/datamodel i-o-objects-also-known-as-file-objects6914076
Ref: 20c36914076
Node: Tipos internos6914880
Ref: reference/datamodel internal-types6915023
Ref: 20c56915023
Node: Objetos código6915423
Ref: reference/datamodel code-objects6915512
Ref: 1d26915512
Ref: reference/datamodel id66915512
Ref: 20c66915512
Node: Atributos especiais de somente leitura<2>6916344
Ref: reference/datamodel id76916473
Ref: 20c76916473
Ref: reference/datamodel codeobject co_name6916602
Ref: 20c86916602
Ref: reference/datamodel codeobject co_qualname6916792
Ref: 20c96916792
Ref: reference/datamodel codeobject co_argcount6917126
Ref: 20ca6917126
Ref: reference/datamodel codeobject co_posonlyargcount6917621
Ref: 20cb6917621
Ref: reference/datamodel codeobject co_kwonlyargcount6918020
Ref: 20cc6918020
Ref: reference/datamodel codeobject co_nlocals6918410
Ref: 20cd6918410
Ref: reference/datamodel codeobject co_varnames6918722
Ref: 20ce6918722
Ref: reference/datamodel codeobject co_cellvars6919115
Ref: 20cf6919115
Ref: reference/datamodel codeobject co_freevars6919621
Ref: 208b6919621
Ref: reference/datamodel codeobject co_code6920456
Ref: 20d26920456
Ref: reference/datamodel codeobject co_consts6920767
Ref: 165a6920767
Ref: reference/datamodel codeobject co_names6921075
Ref: 20d36921075
Ref: reference/datamodel codeobject co_filename6921384
Ref: 13b46921384
Ref: reference/datamodel codeobject co_firstlineno6921604
Ref: 20d46921604
Ref: reference/datamodel codeobject co_lnotab6921815
Ref: 2e06921815
Ref: reference/datamodel codeobject co_stacksize6922654
Ref: 20d56922654
Ref: reference/datamodel codeobject co_flags6922866
Ref: 20d66922866
Node: Métodos de objetos código6924089
Ref: reference/datamodel methods-on-code-objects6924218
Ref: 20d96924218
Ref: reference/datamodel codeobject co_positions6924291
Ref: 5b36924291
Ref: reference/datamodel codeobject co_lines6926001
Ref: 2fb6926001
Ref: reference/datamodel codeobject replace6927717
Ref: 20da6927717
Ref: Métodos de objetos código-Footnote-16928034
Node: Objetos quadro6928076
Ref: reference/datamodel frame-objects6928191
Ref: 6e06928191
Ref: reference/datamodel id86928191
Ref: 20db6928191
Node: Atributos especiais de somente leitura<3>6928607
Ref: reference/datamodel id96928741
Ref: 20dc6928741
Ref: reference/datamodel frame f_back6928864
Ref: 78c6928864
Ref: reference/datamodel frame f_code6929265
Ref: 20dd6929265
Ref: reference/datamodel frame f_locals6929851
Ref: 1826929851
Ref: reference/datamodel frame f_globals6930602
Ref: 20de6930602
Ref: reference/datamodel frame f_builtins6930903
Ref: 20df6930903
Ref: reference/datamodel frame f_lasti6931212
Ref: 88c6931212
Node: Atributos especiais graváveis<2>6931534
Ref: reference/datamodel id106931703
Ref: 20e06931703
Ref: reference/datamodel frame f_trace6931810
Ref: 20e16931810
Ref: reference/datamodel frame f_trace_lines6932444
Ref: bf66932444
Ref: reference/datamodel frame f_trace_opcodes6932854
Ref: bf76932854
Ref: reference/datamodel frame f_lineno6933574
Ref: 7ad6933574
Node: Métodos de objetos quadro6934220
Ref: reference/datamodel frame-object-methods6934339
Ref: 20e26934339
Ref: reference/datamodel frame clear6934454
Ref: 2806934454
Node: Objetos traceback6935174
Ref: reference/datamodel id116935287
Ref: 20e36935287
Ref: reference/datamodel traceback-objects6935287
Ref: b076935287
Ref: reference/datamodel traceback tb_frame6936740
Ref: 20e46936740
Ref: reference/datamodel traceback tb_lineno6937442
Ref: 20e56937442
Ref: reference/datamodel traceback tb_lasti6937660
Ref: 20e66937660
Ref: reference/datamodel traceback tb_next6938035
Ref: b066938035
Node: Objetos slice6938326
Ref: reference/datamodel slice-objects6938450
Ref: 20e76938450
Ref: reference/datamodel slice indices6938987
Ref: 105d6938987
Node: Objetos método estático6939487
Ref: reference/datamodel static-method-objects6939619
Ref: 20eb6939619
Node: Objetos método de classe6940283
Ref: reference/datamodel class-method-objects6940393
Ref: 20ec6940393
Node: Nomes de métodos especiais6940884
Ref: reference/datamodel special-method-names6941020
Ref: 20ed6941020
Ref: reference/datamodel specialnames6941020
Ref: c896941020
Ref: Nomes de métodos especiais-Footnote-16943147
Node: Personalização básica6943509
Ref: reference/datamodel basic-customization6943643
Ref: 20ee6943643
Ref: reference/datamodel customization6943643
Ref: 20ef6943643
Ref: reference/datamodel object __new__6943707
Ref: 5806943707
Ref: reference/datamodel object __init__6945406
Ref: 6b06945406
Ref: reference/datamodel object __del__6946353
Ref: 10336946353
Ref: reference/datamodel object __repr__6949882
Ref: 61c6949882
Ref: reference/datamodel object __str__6950856
Ref: 61d6950856
Ref: reference/datamodel object __bytes__6951563
Ref: 5e86951563
Ref: reference/datamodel object __format__6951830
Ref: 61e6951830
Ref: reference/datamodel richcmpfuncs6953162
Ref: 20f06953162
Ref: reference/datamodel object __lt__6953162
Ref: 12e26953162
Ref: reference/datamodel object __le__6953203
Ref: 134f6953203
Ref: reference/datamodel object __eq__6953244
Ref: b0d6953244
Ref: reference/datamodel object __ne__6953285
Ref: 15606953285
Ref: reference/datamodel object __gt__6953326
Ref: 13506953326
Ref: reference/datamodel object __ge__6953367
Ref: 13516953367
Ref: reference/datamodel object __hash__6956699
Ref: b0e6956699
Ref: reference/datamodel object __bool__6961265
Ref: 13186961265
Node: Personalizando o acesso aos atributos6961818
Ref: reference/datamodel attribute-access6961997
Ref: 20f16961997
Ref: reference/datamodel customizing-attribute-access6961997
Ref: 20f26961997
Ref: reference/datamodel object __getattr__6962266
Ref: 4d36962266
Ref: reference/datamodel object __getattribute__6963632
Ref: beb6963632
Ref: reference/datamodel object __setattr__6964808
Ref: 20bf6964808
Ref: reference/datamodel object __delattr__6965528
Ref: 20c06965528
Ref: reference/datamodel object __dir__6965946
Ref: 15fe6965946
Node: Personalizando acesso a atributos de módulos6966323
Ref: reference/datamodel customizing-module-attribute-access6966476
Ref: 20f46966476
Ref: reference/datamodel module __getattr__6966584
Ref: af16966584
Ref: reference/datamodel module __dir__6966619
Ref: af26966619
Ref: reference/datamodel module __class__6967537
Ref: 20f56967537
Ref: Personalizando acesso a atributos de módulos-Footnote-16968870
Node: Implementando descritores6968912
Ref: reference/datamodel descriptors6969095
Ref: c6a6969095
Ref: reference/datamodel implementing-descriptors6969095
Ref: 20f66969095
Ref: reference/datamodel object __get__6969680
Ref: 15306969680
Ref: reference/datamodel object __set__6970700
Ref: 20f76970700
Ref: reference/datamodel object __delete__6971093
Ref: 16f56971093
Ref: reference/datamodel object __objclass__6971325
Ref: 20f96971325
Ref: Implementando descritores-Footnote-16971941
Node: Invocando descritores6971983
Ref: reference/datamodel descriptor-invocation6972133
Ref: 20f86972133
Ref: reference/datamodel invoking-descriptors6972133
Ref: 20fa6972133
Node: __slots__<2>6975517
Ref: reference/datamodel id136975633
Ref: 20fb6975633
Ref: reference/datamodel slots6975633
Ref: 20c26975633
Ref: reference/datamodel object __slots__6976072
Ref: 15336976072
Ref: reference/datamodel datamodel-note-slots6976420
Ref: 20fc6976420
Node: Personalizando a criação de classe6979761
Ref: reference/datamodel class-customization6979971
Ref: c666979971
Ref: reference/datamodel customizing-class-creation6979971
Ref: 20fe6979971
Ref: reference/datamodel object __init_subclass__6980500
Ref: 6316980500
Ref: reference/datamodel object __set_name__6982055
Ref: c696982055
Node: Metaclasses6983087
Ref: reference/datamodel id146983206
Ref: 20ff6983206
Ref: reference/datamodel metaclasses6983206
Ref: 21006983206
Node: Resolvendo entradas de MRO6984333
Ref: reference/datamodel resolving-mro-entries6984497
Ref: 21016984497
Ref: reference/datamodel object __mro_entries__6984568
Ref: afc6984568
Ref: Resolvendo entradas de MRO-Footnote-16985644
Node: Determinando a metaclasse apropriada6985686
Ref: reference/datamodel determining-the-appropriate-metaclass6985878
Ref: 21026985878
Node: Preparando o espaço de nomes da classe6986918
Ref: reference/datamodel prepare6987112
Ref: c796987112
Ref: reference/datamodel preparing-the-class-namespace6987112
Ref: 21036987112
Ref: Preparando o espaço de nomes da classe-Footnote-16988099
Node: Executando o corpo da classe6988141
Ref: reference/datamodel executing-the-class-body6988322
Ref: 21046988322
Node: Criando o objeto classe6989156
Ref: reference/datamodel class-object-creation6989319
Ref: c656989319
Ref: reference/datamodel creating-the-class-object6989319
Ref: 21056989319
Ref: Criando o objeto classe-Footnote-16991890
Node: Usos para metaclasses6991932
Ref: reference/datamodel uses-for-metaclasses6992058
Ref: 21066992058
Node: Personalizando verificações de instância e subclasse6992419
Ref: reference/datamodel customizing-instance-and-subclass-checks6992617
Ref: 21076992617
Ref: reference/datamodel type __instancecheck__6993151
Ref: 21086993151
Ref: reference/datamodel type __subclasscheck__6993404
Ref: 21096993404
Ref: Personalizando verificações de instância e subclasse-Footnote-16994426
Node: Emulando tipos genéricos6994468
Ref: reference/datamodel emulating-generic-types6994657
Ref: 210a6994657
Ref: reference/datamodel object __class_getitem__6995687
Ref: 73b6995687
Ref: Emulando tipos genéricos-Footnote-16996222
Node: O propósito de __class_getitem__6996264
Ref: reference/datamodel the-purpose-of-class-getitem6996404
Ref: 210c6996404
Node: __class_getitem__ versus __getitem__6997410
Ref: reference/datamodel class-getitem-versus-getitem6997550
Ref: 210e6997550
Ref: reference/datamodel classgetitem-versus-getitem6997550
Ref: 210f6997550
Ref: __class_getitem__ versus __getitem__-Footnote-17001013
Node: Emulando objetos chamáveis7001055
Ref: reference/datamodel emulating-callable-objects7001216
Ref: 21137001216
Ref: reference/datamodel id157001216
Ref: 21147001216
Ref: reference/datamodel object __call__7001290
Ref: 5587001290
Node: Emulando tipos contêineres7001602
Ref: reference/datamodel emulating-container-types7001763
Ref: 21157001763
Ref: reference/datamodel sequence-types7001763
Ref: 21167001763
Ref: reference/datamodel object __len__7004309
Ref: 15b47004309
Ref: reference/datamodel object __length_hint__7005034
Ref: f3d7005034
Ref: reference/datamodel object __getitem__7005881
Ref: 2837005881
Ref: reference/datamodel object __setitem__7007117
Ref: 130e7007117
Ref: reference/datamodel object __delitem__7007641
Ref: 130f7007641
Ref: reference/datamodel object __missing__7008101
Ref: 11fd7008101
Ref: reference/datamodel object __iter__7008324
Ref: c8a7008324
Ref: reference/datamodel object __reversed__7008644
Ref: ca77008644
Ref: reference/datamodel object __contains__7009679
Ref: 14007009679
Node: Emulando tipos numéricos7010317
Ref: reference/datamodel emulating-numeric-types7010496
Ref: 21287010496
Ref: reference/datamodel numeric-types7010496
Ref: 21297010496
Ref: reference/datamodel object __add__7010846
Ref: 21217010846
Ref: reference/datamodel object __sub__7010888
Ref: 212a7010888
Ref: reference/datamodel object __mul__7010930
Ref: 21247010930
Ref: reference/datamodel object __matmul__7010972
Ref: da17010972
Ref: reference/datamodel object __truediv__7011017
Ref: ebf7011017
Ref: reference/datamodel object __floordiv__7011063
Ref: 153c7011063
Ref: reference/datamodel object __mod__7011110
Ref: 212b7011110
Ref: reference/datamodel object __divmod__7011152
Ref: ec07011152
Ref: reference/datamodel object __pow__7011197
Ref: 7d47011197
Ref: reference/datamodel object __lshift__7011249
Ref: 212c7011249
Ref: reference/datamodel object __rshift__7011294
Ref: 212d7011294
Ref: reference/datamodel object __and__7011339
Ref: 212e7011339
Ref: reference/datamodel object __xor__7011381
Ref: 212f7011381
Ref: reference/datamodel object __or__7011423
Ref: 21307011423
Ref: reference/datamodel object __radd__7012421
Ref: 21227012421
Ref: reference/datamodel object __rsub__7012464
Ref: 21317012464
Ref: reference/datamodel object __rmul__7012507
Ref: 21257012507
Ref: reference/datamodel object __rmatmul__7012550
Ref: da27012550
Ref: reference/datamodel object __rtruediv__7012596
Ref: 21327012596
Ref: reference/datamodel object __rfloordiv__7012643
Ref: 21337012643
Ref: reference/datamodel object __rmod__7012691
Ref: dff7012691
Ref: reference/datamodel object __rdivmod__7012734
Ref: 21347012734
Ref: reference/datamodel object __rpow__7012780
Ref: 7d57012780
Ref: reference/datamodel object __rlshift__7012833
Ref: 21357012833
Ref: reference/datamodel object __rrshift__7012879
Ref: 21367012879
Ref: reference/datamodel object __rand__7012925
Ref: 21377012925
Ref: reference/datamodel object __rxor__7012968
Ref: 21387012968
Ref: reference/datamodel object __ror__7013011
Ref: 21397013011
Ref: reference/datamodel object __iadd__7014350
Ref: 21237014350
Ref: reference/datamodel object __isub__7014393
Ref: 213a7014393
Ref: reference/datamodel object __imul__7014436
Ref: 21267014436
Ref: reference/datamodel object __imatmul__7014479
Ref: da37014479
Ref: reference/datamodel object __itruediv__7014525
Ref: 213b7014525
Ref: reference/datamodel object __ifloordiv__7014572
Ref: 213c7014572
Ref: reference/datamodel object __imod__7014620
Ref: 213d7014620
Ref: reference/datamodel object __ipow__7014663
Ref: 7d27014663
Ref: reference/datamodel object __ilshift__7014716
Ref: 213e7014716
Ref: reference/datamodel object __irshift__7014762
Ref: 213f7014762
Ref: reference/datamodel object __iand__7014808
Ref: 21407014808
Ref: reference/datamodel object __ixor__7014851
Ref: 21417014851
Ref: reference/datamodel object __ior__7014894
Ref: 21427014894
Ref: reference/datamodel object __neg__7016134
Ref: 21447016134
Ref: reference/datamodel object __pos__7016169
Ref: 21457016169
Ref: reference/datamodel object __abs__7016204
Ref: 21467016204
Ref: reference/datamodel object __invert__7016239
Ref: 21477016239
Ref: reference/datamodel object __complex__7016401
Ref: 5e77016401
Ref: reference/datamodel object __int__7016440
Ref: 71c7016440
Ref: reference/datamodel object __float__7016475
Ref: 9d47016475
Ref: reference/datamodel object __index__7016683
Ref: 71d7016683
Ref: reference/datamodel object __round__7017375
Ref: 21487017375
Ref: reference/datamodel object __trunc__7017423
Ref: 71b7017423
Ref: reference/datamodel object __floor__7017460
Ref: 21497017460
Ref: reference/datamodel object __ceil__7017497
Ref: 214a7017497
Ref: Emulando tipos numéricos-Footnote-17018232
Ref: Emulando tipos numéricos-Footnote-27018549
Node: Gerenciadores de contexto da instrução with7018769
Ref: reference/datamodel context-managers7018994
Ref: 214c7018994
Ref: reference/datamodel with-statement-context-managers7018994
Ref: 214d7018994
Ref: reference/datamodel object __enter__7019966
Ref: 5c87019966
Ref: reference/datamodel object __exit__7020247
Ref: 13447020247
Ref: Gerenciadores de contexto da instrução with-Footnote-17021175
Node: Customizando argumentos posicionais na classe correspondência de padrão7021217
Ref: reference/datamodel class-pattern-matching7021438
Ref: 214f7021438
Ref: reference/datamodel customizing-positional-arguments-in-class-pattern-matching7021438
Ref: 21507021438
Ref: reference/datamodel object __match_args__7021907
Ref: 1a017021907
Ref: Customizando argumentos posicionais na classe correspondência de padrão-Footnote-17022929
Node: Emulando tipos buffer7022971
Ref: reference/datamodel emulating-buffer-types7023175
Ref: 21517023175
Ref: reference/datamodel python-buffer-protocol7023175
Ref: 21527023175
Ref: reference/datamodel object __buffer__7023660
Ref: 45f7023660
Ref: reference/datamodel object __release_buffer__7024161
Ref: 17e77024161
Ref: Emulando tipos buffer-Footnote-17024936
Node: Pesquisa de método especial7024978
Ref: reference/datamodel special-lookup7025100
Ref: 20f37025100
Ref: reference/datamodel special-method-lookup7025100
Ref: 21537025100
Node: Corrotinas7027948
Ref: reference/datamodel coroutines7028046
Ref: 21547028046
Node: Objetos aguardáveis7028209
Ref: reference/datamodel awaitable-objects7028302
Ref: 21557028302
Ref: reference/datamodel object __await__7028763
Ref: d9d7028763
Ref: Objetos aguardáveis-Footnote-17029647
Node: Objetos corrotina7029689
Ref: reference/datamodel coroutine-objects7029814
Ref: 20997029814
Ref: reference/datamodel id187029814
Ref: 21567029814
Ref: reference/datamodel coroutine send7030738
Ref: 21597030738
Ref: reference/datamodel coroutine throw7031254
Ref: 4f77031254
Ref: reference/datamodel coroutine close7032053
Ref: 215b7032053
Node: Iteradores assíncronos7032685
Ref: reference/datamodel async-iterators7032828
Ref: d9f7032828
Ref: reference/datamodel asynchronous-iterators7032828
Ref: 215c7032828
Ref: reference/datamodel object __aiter__7033133
Ref: c167033133
Ref: reference/datamodel object __anext__7033225
Ref: 16597033225
Node: Gerenciadores de contexto assíncronos7034144
Ref: reference/datamodel async-context-managers7034261
Ref: 5fc7034261
Ref: reference/datamodel asynchronous-context-managers7034261
Ref: 215d7034261
Ref: reference/datamodel object __aenter__7034687
Ref: 215e7034687
Ref: reference/datamodel object __aexit__7034852
Ref: 17167034852
Node: Modelo de execução7035358
Ref: reference/executionmodel doc7035506
Ref: 215f7035506
Ref: reference/executionmodel execmodel7035506
Ref: 21607035506
Ref: reference/executionmodel execution-model7035506
Ref: 21617035506
Ref: reference/executionmodel translation-repo7035506
Ref: 21627035506
Node: Estrutura de um programa7035650
Ref: reference/executionmodel prog-structure7035762
Ref: 21637035762
Ref: reference/executionmodel structure-of-a-program7035762
Ref: 21647035762
Node: Nomeação e ligação7036983
Ref: reference/executionmodel naming7037117
Ref: 208a7037117
Ref: reference/executionmodel naming-and-binding7037117
Ref: 21657037117
Node: Ligação de nomes7037359
Ref: reference/executionmodel bind-names7037465
Ref: 21667037465
Ref: reference/executionmodel binding-of-names7037465
Ref: 21677037465
Node: Resolução de nomes7039467
Ref: reference/executionmodel resolution-of-names7039603
Ref: 216a7039603
Ref: reference/executionmodel resolve-names7039603
Ref: 216b7039603
Node: Escopos de anotação7043952
Ref: reference/executionmodel annotation-scopes7044093
Ref: 1887044093
Ref: reference/executionmodel id17044093
Ref: 216d7044093
Ref: Escopos de anotação-Footnote-17047125
Ref: Escopos de anotação-Footnote-27047167
Ref: Escopos de anotação-Footnote-37047209
Node: Avaliação preguiçosa7047251
Ref: reference/executionmodel id27047402
Ref: 216e7047402
Ref: reference/executionmodel lazy-evaluation7047402
Ref: 4577047402
Node: Builtins e execução restrita7049180
Ref: reference/executionmodel builtins-and-restricted-execution7049345
Ref: 216f7049345
Ref: reference/executionmodel restrict-exec7049345
Ref: 21707049345
Node: Interação com recursos dinâmicos7050190
Ref: reference/executionmodel dynamic-features7050323
Ref: 21717050323
Ref: reference/executionmodel interaction-with-dynamic-features7050323
Ref: 21727050323
Ref: Interação com recursos dinâmicos-Footnote-17051194
Node: Exceções<2>7051340
Ref: reference/executionmodel exceptions7051441
Ref: 21737051441
Ref: reference/executionmodel id47051441
Ref: 21747051441
Node: O sistema de importação7053760
Ref: reference/import doc7053904
Ref: 21757053904
Ref: reference/import importsystem7053904
Ref: 20a37053904
Ref: reference/import the-import-system7053904
Ref: 21767053904
Ref: reference/import translation-repo7053904
Ref: 21777053904
Ref: O sistema de importação-Footnote-17056840
Ref: O sistema de importação-Footnote-27056882
Ref: O sistema de importação-Footnote-37056924
Node: importlib<10>7056966
Ref: reference/import importlib7057060
Ref: 21797057060
Node: Pacotes<2>7057481
Ref: reference/import packages7057600
Ref: 217a7057600
Node: Pacotes regulares7059112
Ref: reference/import regular-packages7059212
Ref: 217b7059212
Node: Pacotes de espaço de nomes7060526
Ref: reference/import namespace-packages7060626
Ref: 217d7060626
Ref: reference/import reference-namespace-package7060626
Ref: 217e7060626
Ref: Pacotes de espaço de nomes-Footnote-17062188
Node: Caminho de busca7062230
Ref: reference/import searching7062346
Ref: 21807062346
Node: O cache de módulos7063243
Ref: reference/import the-module-cache7063352
Ref: 21817063352
Node: Localizadores e carregadores7065091
Ref: reference/import finders-and-loaders7065232
Ref: 21827065232
Ref: reference/import id27065232
Ref: 21837065232
Node: Ganchos de importação7067367
Ref: reference/import import-hooks7067502
Ref: 21867067502
Node: O metacaminho7068569
Ref: reference/import the-meta-path7068667
Ref: 21877068667
Node: Carregando7072324
Ref: reference/import loading7072462
Ref: 21897072462
Ref: Carregando-Footnote-17075874
Node: Carregadores7076297
Ref: reference/import loaders7076376
Ref: 218a7076376
Node: Submódulos7079980
Ref: reference/import submodules7080095
Ref: 218b7080095
Node: Especificações de módulo7081392
Ref: reference/import id47081525
Ref: 218c7081525
Ref: reference/import module-specs7081525
Ref: 20a97081525
Node: Atributo __path__ dos módulos7082755
Ref: reference/import package-path-rules7082904
Ref: 20ab7082904
Ref: reference/import path-attributes-on-modules7082904
Ref: 218f7082904
Ref: Atributo __path__ dos módulos-Footnote-17084368
Ref: Atributo __path__ dos módulos-Footnote-27084410
Node: Representações do módulo7084452
Ref: reference/import module-reprs7084608
Ref: 21907084608
Node: Invalidação de bytecode em cache7086243
Ref: reference/import cached-bytecode-invalidation7086360
Ref: 21917086360
Ref: reference/import pyc-invalidation7086360
Ref: 5ec7086360
Node: O localizador baseado no caminho7088002
Ref: reference/import the-path-based-finder7088170
Ref: 21927088170
Node: Localizadores de entrada de caminho7091204
Ref: reference/import path-entry-finders7091363
Ref: 21947091363
Node: Protocolo do localizador de entrada de caminho7097125
Ref: reference/import path-entry-finder-protocol7097284
Ref: 21967097284
Node: Substituindo o sistema de importação padrão7100078
Ref: reference/import replacing-the-standard-import-system7100269
Ref: 21977100269
Node: Importações relativas ao pacote7101207
Ref: reference/import package-relative-imports7101405
Ref: 21987101405
Ref: reference/import relativeimports7101405
Ref: 21997101405
Node: Considerações especiais para __main__7102689
Ref: reference/import import-dunder-main7102853
Ref: 219a7102853
Ref: reference/import special-considerations-for-main7102853
Ref: 219b7102853
Node: __main__ __spec__7103546
Ref: reference/import id57103639
Ref: 219c7103639
Ref: reference/import main-spec7103639
Ref: 218e7103639
Node: Referências7105154
Ref: reference/import references7105276
Ref: 219d7105276
Ref: Referências-Footnote-17106650
Ref: Referências-Footnote-27106702
Ref: Referências-Footnote-37106744
Ref: Referências-Footnote-47106786
Ref: Referências-Footnote-57106828
Ref: Referências-Footnote-67106870
Ref: Referências-Footnote-77106912
Ref: Referências-Footnote-87106954
Ref: Referências-Footnote-97106996
Ref: Referências-Footnote-107107038
Node: Expressões7107081
Ref: reference/expressions doc7107225
Ref: 219e7107225
Ref: reference/expressions expressions7107225
Ref: 219f7107225
Ref: reference/expressions id17107225
Ref: 21a07107225
Ref: reference/expressions translation-repo7107225
Ref: 21a17107225
Ref: reference/expressions grammar-token-python-grammar-name7107541
Ref: 21a27107541
Node: Conversões aritméticas7108180
Ref: reference/expressions arithmetic-conversions7108268
Ref: 21a37108268
Ref: reference/expressions conversions7108268
Ref: 21a47108268
Node: Átomos7109089
Ref: reference/expressions atoms7109196
Ref: 21a57109196
Ref: reference/expressions id27109196
Ref: 21a67109196
Ref: reference/expressions grammar-token-python-grammar-atom7109477
Ref: 21a77109477
Ref: reference/expressions grammar-token-python-grammar-enclosure7109568
Ref: 21a97109568
Node: Identificadores Nomes7110193
Ref: reference/expressions atom-identifiers7110278
Ref: 202d7110278
Ref: reference/expressions identifiers-names7110278
Ref: 21b07110278
Ref: reference/expressions private-name-mangling7110783
Ref: 1e437110783
Node: Desfiguração de nome privado7110828
Ref: reference/expressions id37110916
Ref: 21b17110916
Node: Literais<2>7112923
Ref: reference/expressions atom-literals7113038
Ref: 21b27113038
Ref: reference/expressions literals7113038
Ref: 21b37113038
Ref: reference/expressions grammar-token-python-grammar-literal7113155
Ref: 21a87113155
Node: Formas de parênteses7113957
Ref: reference/expressions parenthesized7114106
Ref: 21b47114106
Ref: reference/expressions parenthesized-forms7114106
Ref: 21b57114106
Ref: reference/expressions grammar-token-python-grammar-parenth_form7114250
Ref: 21aa7114250
Node: Sintaxe de criação de listas conjuntos e dicionários7115104
Ref: reference/expressions comprehensions7115272
Ref: 5d07115272
Ref: reference/expressions displays-for-lists-sets-and-dictionaries7115272
Ref: 21b77115272
Ref: reference/expressions grammar-token-python-grammar-comprehension7115824
Ref: 21b87115824
Ref: reference/expressions grammar-token-python-grammar-comp_for7115904
Ref: 21ba7115904
Ref: reference/expressions grammar-token-python-grammar-comp_iter7116019
Ref: 21bd7116019
Ref: reference/expressions grammar-token-python-grammar-comp_if7116087
Ref: 21be7116087
Ref: Sintaxe de criação de listas conjuntos e dicionários-Footnote-17118720
Node: Sintaxes de criação de lista7118762
Ref: reference/expressions list-displays7118942
Ref: 21bf7118942
Ref: reference/expressions lists7118942
Ref: 21c07118942
Ref: reference/expressions grammar-token-python-grammar-list_display7119120
Ref: 21ab7119120
Node: Sintaxes de criação de conjunto7119653
Ref: reference/expressions set7119814
Ref: 21c27119814
Ref: reference/expressions set-displays7119814
Ref: 21c37119814
Ref: reference/expressions grammar-token-python-grammar-set_display7120078
Ref: 21ad7120078
Node: Sintaxes de criação de dicionário7120727
Ref: reference/expressions dict7120882
Ref: da77120882
Ref: reference/expressions dictionary-displays7120882
Ref: 21c47120882
Ref: reference/expressions grammar-token-python-grammar-dict_display7121111
Ref: 21ac7121111
Ref: reference/expressions grammar-token-python-grammar-dict_item_list7121211
Ref: 21c57121211
Ref: reference/expressions grammar-token-python-grammar-dict_item7121298
Ref: 21c77121298
Ref: reference/expressions grammar-token-python-grammar-dict_comprehension7121406
Ref: 21c67121406
Ref: Sintaxes de criação de dicionário-Footnote-17123534
Ref: Sintaxes de criação de dicionário-Footnote-27123576
Node: Expressões geradoras<2>7123618
Ref: reference/expressions generator-expressions7123757
Ref: 21c97123757
Ref: reference/expressions genexpr7123757
Ref: 21ca7123757
Ref: reference/expressions grammar-token-python-grammar-generator_expression7123896
Ref: 21ae7123896
Node: Expressões yield7126015
Ref: reference/expressions yield-expressions7126109
Ref: 21cb7126109
Ref: reference/expressions yieldexpr7126109
Ref: 21cc7126109
Ref: reference/expressions grammar-token-python-grammar-yield_atom7126163
Ref: 21af7126163
Ref: reference/expressions grammar-token-python-grammar-yield_from7126227
Ref: 21cd7126227
Ref: reference/expressions grammar-token-python-grammar-yield_expression7126292
Ref: 20517126292
Ref: Expressões yield-Footnote-17131477
Ref: Expressões yield-Footnote-27131519
Ref: Expressões yield-Footnote-37131561
Ref: Expressões yield-Footnote-47131603
Ref: Expressões yield-Footnote-57131645
Node: Métodos de iterador gerador7131687
Ref: reference/expressions generator-iterator-methods7131786
Ref: 21d17131786
Ref: reference/expressions generator-methods7131786
Ref: 21587131786
Ref: reference/expressions generator __next__7132152
Ref: 1e4e7132152
Ref: reference/expressions generator send7132918
Ref: 215a7132918
Ref: reference/expressions generator throw7133481
Ref: 4f87133481
Ref: reference/expressions generator close7134857
Ref: 15b97134857
Node: Exemplos7135897
Ref: reference/expressions examples7136040
Ref: 21d27136040
Node: Funções geradoras assíncronas<2>7137159
Ref: reference/expressions asynchronous-generator-functions7137316
Ref: 21d07137316
Ref: reference/expressions id47137316
Ref: 21d37137316
Ref: Funções geradoras assíncronas<2>-Footnote-17141251
Node: Métodos geradores-iteradores assíncronos7141331
Ref: reference/expressions asynchronous-generator-iterator-methods7141471
Ref: 21d57141471
Ref: reference/expressions asynchronous-generator-methods7141471
Ref: 21d67141471
Ref: reference/expressions agen __anext__7141718
Ref: 21d47141718
Ref: reference/expressions agen asend7142663
Ref: 8df7142663
Ref: reference/expressions agen athrow7143524
Ref: 4f97143524
Ref: reference/expressions agen aclose7144435
Ref: 8de7144435
Node: Primárias7145583
Ref: reference/expressions id57145682
Ref: 21d77145682
Ref: reference/expressions primaries7145682
Ref: 21d87145682
Ref: reference/expressions grammar-token-python-grammar-primary7145813
Ref: 21d97145813
Node: Referências de atributo7146034
Ref: reference/expressions attribute-references7146127
Ref: 21de7146127
Ref: reference/expressions id67146127
Ref: 21df7146127
Ref: reference/expressions grammar-token-python-grammar-attributeref7146269
Ref: 21da7146269
Node: Subscrições7147138
Ref: reference/expressions id77147251
Ref: 21e07147251
Ref: reference/expressions subscriptions7147251
Ref: 21107147251
Ref: reference/expressions grammar-token-python-grammar-subscription7147539
Ref: 21db7147539
Ref: Subscrições-Footnote-17150370
Node: Fatiamentos7150412
Ref: reference/expressions id87150509
Ref: 21e17150509
Ref: reference/expressions slicings7150509
Ref: 21e27150509
Ref: reference/expressions grammar-token-python-grammar-slicing7150806
Ref: 21dc7150806
Ref: reference/expressions grammar-token-python-grammar-slice_list7150881
Ref: 21e37150881
Ref: reference/expressions grammar-token-python-grammar-slice_item7150964
Ref: 21e47150964
Ref: reference/expressions grammar-token-python-grammar-proper_slice7151038
Ref: 21e57151038
Ref: reference/expressions grammar-token-python-grammar-lower_bound7151148
Ref: 21e67151148
Ref: reference/expressions grammar-token-python-grammar-upper_bound7151194
Ref: 21e77151194
Ref: reference/expressions grammar-token-python-grammar-stride7151240
Ref: 21e87151240
Node: Chamadas7152602
Ref: reference/expressions calls7152677
Ref: da57152677
Ref: reference/expressions id97152677
Ref: 21e97152677
Ref: reference/expressions grammar-token-python-grammar-call7152864
Ref: 21dd7152864
Ref: reference/expressions grammar-token-python-grammar-argument_list7152987
Ref: 21eb7152987
Ref: reference/expressions grammar-token-python-grammar-positional_arguments7153327
Ref: 21ec7153327
Ref: reference/expressions grammar-token-python-grammar-positional_item7153422
Ref: 21ef7153422
Ref: reference/expressions grammar-token-python-grammar-starred_and_keywords7153517
Ref: 21ed7153517
Ref: reference/expressions grammar-token-python-grammar-keywords_arguments7153702
Ref: 21ee7153702
Ref: reference/expressions grammar-token-python-grammar-keyword_item7153889
Ref: 21f07153889
Ref: Chamadas-Footnote-17161332
Node: Expressão await7161374
Ref: reference/expressions await7161489
Ref: 1b97161489
Ref: reference/expressions await-expression7161489
Ref: 21f17161489
Ref: reference/expressions grammar-token-python-grammar-await_expr7161688
Ref: 21f27161688
Node: O operador de potência7161766
Ref: reference/expressions power7161916
Ref: 21f37161916
Ref: reference/expressions the-power-operator7161916
Ref: 21f47161916
Ref: reference/expressions grammar-token-python-grammar-power7162168
Ref: 21f57162168
Node: Operações aritméticas unárias e bit a bit7163477
Ref: reference/expressions unary7163645
Ref: 21f77163645
Ref: reference/expressions unary-arithmetic-and-bitwise-operations7163645
Ref: 21f87163645
Ref: reference/expressions grammar-token-python-grammar-u_expr7163827
Ref: 21f67163827
Node: Operações binárias aritméticas7164666
Ref: reference/expressions binary7164838
Ref: 21f97164838
Ref: reference/expressions binary-arithmetic-operations7164838
Ref: 21fa7164838
Ref: reference/expressions grammar-token-python-grammar-m_expr7165229
Ref: 21fb7165229
Ref: reference/expressions grammar-token-python-grammar-a_expr7165528
Ref: 21fc7165528
Ref: Operações binárias aritméticas-Footnote-17169481
Ref: Operações binárias aritméticas-Footnote-27170141
Node: Operações de deslocamento7170436
Ref: reference/expressions shifting7170594
Ref: 21fe7170594
Ref: reference/expressions shifting-operations7170594
Ref: 21ff7170594
Ref: reference/expressions grammar-token-python-grammar-shift_expr7170748
Ref: 22007170748
Node: Operações binárias bit a bit7171529
Ref: reference/expressions binary-bitwise-operations7171666
Ref: 22017171666
Ref: reference/expressions bitwise7171666
Ref: 22027171666
Ref: reference/expressions grammar-token-python-grammar-and_expr7171821
Ref: 22037171821
Ref: reference/expressions grammar-token-python-grammar-xor_expr7171915
Ref: 22047171915
Ref: reference/expressions grammar-token-python-grammar-or_expr7172005
Ref: 20507172005
Node: Comparações7172768
Ref: reference/expressions comparisons7172899
Ref: 22057172899
Ref: reference/expressions id127172899
Ref: 22067172899
Ref: reference/expressions grammar-token-python-grammar-comparison7173238
Ref: 22077173238
Ref: reference/expressions grammar-token-python-grammar-comp_operator7173333
Ref: 22087173333
Node: Comparações de valor7174534
Ref: reference/expressions expressions-value-comparisons7174651
Ref: 19a97174651
Ref: reference/expressions value-comparisons7174651
Ref: 22097174651
Ref: reference/expressions in7183320
Ref: 2f47183320
Ref: reference/expressions not-in7183320
Ref: 62f7183320
Ref: Comparações de valor-Footnote-17183358
Ref: Comparações de valor-Footnote-27183400
Node: Operações de teste de pertinência7184630
Ref: reference/expressions membership-test-details7184783
Ref: 21277184783
Ref: reference/expressions membership-test-operations7184783
Ref: 220a7184783
Ref: reference/expressions is7186869
Ref: 2f57186869
Node: Comparações de identidade7186869
Ref: reference/expressions identity-comparisons7186991
Ref: 220b7186991
Ref: reference/expressions is-not7186991
Ref: 220c7186991
Ref: reference/expressions booleans7187357
Ref: 220d7187357
Ref: reference/expressions and7187357
Ref: 2f17187357
Ref: reference/expressions or7187357
Ref: 2f67187357
Ref: Comparações de identidade-Footnote-17187395
Node: Operações booleanas7187739
Ref: reference/expressions boolean-operations7187869
Ref: 220e7187869
Ref: reference/expressions not7187869
Ref: 220f7187869
Ref: reference/expressions grammar-token-python-grammar-or_test7187926
Ref: 21bc7187926
Ref: reference/expressions grammar-token-python-grammar-and_test7188016
Ref: 22107188016
Ref: reference/expressions grammar-token-python-grammar-not_test7188108
Ref: 22117188108
Node: Expressões de atribuição<2>7189685
Ref: reference/expressions assignment-expressions7189826
Ref: 22127189826
Ref: reference/expressions id157189826
Ref: 22137189826
Ref: reference/expressions grammar-token-python-grammar-assignment_expression7189894
Ref: 21b97189894
Ref: Expressões de atribuição<2>-Footnote-17191076
Node: Expressões condicionais7191118
Ref: reference/expressions conditional-expressions7191245
Ref: 22147191245
Ref: reference/expressions if-expr7191245
Ref: 22157191245
Ref: reference/expressions grammar-token-python-grammar-conditional_expression7191309
Ref: 204f7191309
Ref: reference/expressions grammar-token-python-grammar-expression7191421
Ref: 21c87191421
Ref: reference/expressions lambdas7192002
Ref: 22177192002
Ref: Expressões condicionais-Footnote-17192040
Node: Lambdas7192082
Ref: reference/expressions id167192200
Ref: 22187192200
Ref: reference/expressions lambda7192200
Ref: 12df7192200
Ref: reference/expressions grammar-token-python-grammar-lambda_expr7192231
Ref: 22167192231
Node: Listas de expressões7192834
Ref: reference/expressions expression-lists7192948
Ref: 221a7192948
Ref: reference/expressions exprlists7192948
Ref: da67192948
Ref: reference/expressions grammar-token-python-grammar-starred_expression7193006
Ref: 21b67193006
Ref: reference/expressions grammar-token-python-grammar-flexible_expression7193067
Ref: 221b7193067
Ref: reference/expressions grammar-token-python-grammar-flexible_expression_list7193170
Ref: 21c17193170
Ref: reference/expressions grammar-token-python-grammar-starred_expression_list7193283
Ref: 221c7193283
Ref: reference/expressions grammar-token-python-grammar-expression_list7193394
Ref: 221d7193394
Ref: reference/expressions grammar-token-python-grammar-yield_list7193489
Ref: 21ce7193489
Ref: Listas de expressões-Footnote-17194719
Ref: Listas de expressões-Footnote-27194761
Node: Ordem de avaliação7194803
Ref: reference/expressions evalorder7194936
Ref: 221e7194936
Ref: reference/expressions evaluation-order7194936
Ref: 221f7194936
Node: Precedência de operadores7195438
Ref: reference/expressions operator-precedence7195541
Ref: 22207195541
Ref: reference/expressions operator-summary7195541
Ref: 22217195541
Ref: Precedência de operadores-Footnote-17200563
Ref: Precedência de operadores-Footnote-27200732
Node: Instruções simples7200838
Ref: reference/simple_stmts doc7200979
Ref: 22227200979
Ref: reference/simple_stmts simple7200979
Ref: 22237200979
Ref: reference/simple_stmts simple-statements7200979
Ref: 22247200979
Ref: reference/simple_stmts translation-repo7200979
Ref: 22257200979
Ref: reference/simple_stmts grammar-token-python-grammar-simple_stmt7201224
Ref: 22267201224
Node: Instruções de expressão7202458
Ref: reference/simple_stmts expression-statements7202578
Ref: 22387202578
Ref: reference/simple_stmts exprstmts7202578
Ref: 22397202578
Ref: reference/simple_stmts grammar-token-python-grammar-expression_stmt7203052
Ref: 22277203052
Node: Instruções de atribuição7203525
Ref: reference/simple_stmts assignment7203674
Ref: 21687203674
Ref: reference/simple_stmts assignment-statements7203674
Ref: 223a7203674
Ref: reference/simple_stmts grammar-token-python-grammar-assignment_stmt7203873
Ref: 22297203873
Ref: reference/simple_stmts grammar-token-python-grammar-target_list7203996
Ref: 21bb7203996
Ref: reference/simple_stmts grammar-token-python-grammar-target7204074
Ref: 223b7204074
Ref: reference/simple_stmts attr-target-note7207819
Ref: 223c7207819
Ref: Instruções de atribuição-Footnote-17212181
Node: Instruções de atribuição aumentada7212223
Ref: reference/simple_stmts augassign7212371
Ref: 223d7212371
Ref: reference/simple_stmts augmented-assignment-statements7212371
Ref: 223e7212371
Ref: reference/simple_stmts grammar-token-python-grammar-augmented_assignment_stmt7212596
Ref: 222a7212596
Ref: reference/simple_stmts grammar-token-python-grammar-augtarget7212736
Ref: 223f7212736
Ref: reference/simple_stmts grammar-token-python-grammar-augop7212874
Ref: 22407212874
Node: instruções de atribuição anotado7214710
Ref: reference/simple_stmts annassign7214858
Ref: 22417214858
Ref: reference/simple_stmts annotated-assignment-statements7214858
Ref: 22427214858
Ref: reference/simple_stmts grammar-token-python-grammar-annotated_assignment_stmt7215120
Ref: 222b7215120
Ref: instruções de atribuição anotado-Footnote-17217491
Ref: instruções de atribuição anotado-Footnote-27217533
Node: A instrução assert7217575
Ref: reference/simple_stmts assert7217716
Ref: 96f7217716
Ref: reference/simple_stmts the-assert-statement7217716
Ref: 22437217716
Ref: reference/simple_stmts grammar-token-python-grammar-assert_stmt7217884
Ref: 22287217884
Node: A instrução pass7219063
Ref: reference/simple_stmts pass7219196
Ref: 1d997219196
Ref: reference/simple_stmts the-pass-statement7219196
Ref: 22447219196
Ref: reference/simple_stmts grammar-token-python-grammar-pass_stmt7219253
Ref: 222c7219253
Node: A instrução del<2>7219635
Ref: reference/simple_stmts del7219768
Ref: 18a77219768
Ref: reference/simple_stmts the-del-statement7219768
Ref: 22457219768
Ref: reference/simple_stmts grammar-token-python-grammar-del_stmt7219823
Ref: 222d7219823
Node: A instrução return7220825
Ref: reference/simple_stmts return7220959
Ref: 9d67220959
Ref: reference/simple_stmts the-return-statement7220959
Ref: 22467220959
Ref: reference/simple_stmts grammar-token-python-grammar-return_stmt7221020
Ref: 222e7221020
Node: A instrução yield7222277
Ref: reference/simple_stmts the-yield-statement7222410
Ref: 22477222410
Ref: reference/simple_stmts yield7222410
Ref: 9d57222410
Ref: reference/simple_stmts grammar-token-python-grammar-yield_stmt7222469
Ref: 222f7222469
Node: A instrução raise7223379
Ref: reference/simple_stmts raise7223511
Ref: 5ed7223511
Ref: reference/simple_stmts the-raise-statement7223511
Ref: 22487223511
Ref: reference/simple_stmts grammar-token-python-grammar-raise_stmt7223570
Ref: 22307223570
Node: A instrução break7227992
Ref: reference/simple_stmts break7228127
Ref: ab87228127
Ref: reference/simple_stmts the-break-statement7228127
Ref: 224b7228127
Ref: reference/simple_stmts grammar-token-python-grammar-break_stmt7228186
Ref: 22317228186
Node: A instrução continue7228826
Ref: reference/simple_stmts continue7228962
Ref: 9d17228962
Ref: reference/simple_stmts the-continue-statement7228962
Ref: 224c7228962
Ref: reference/simple_stmts grammar-token-python-grammar-continue_stmt7229029
Ref: 22327229029
Ref: reference/simple_stmts import7229534
Ref: 5e27229534
Node: A instrução import7229536
Ref: reference/simple_stmts from7229673
Ref: 12ee7229673
Ref: reference/simple_stmts the-import-statement7229673
Ref: 224d7229673
Ref: reference/simple_stmts grammar-token-python-grammar-import_stmt7229736
Ref: 22337229736
Ref: reference/simple_stmts grammar-token-python-grammar-module7230397
Ref: 224e7230397
Ref: reference/simple_stmts grammar-token-python-grammar-relative_module7230477
Ref: 224f7230477
Ref: reference/simple_stmts module __all__7233945
Ref: d627233945
Node: Instruções future7236254
Ref: reference/simple_stmts future7236330
Ref: 1897236330
Ref: reference/simple_stmts future-statements7236330
Ref: 22507236330
Ref: reference/simple_stmts grammar-token-python-grammar-future_stmt7236883
Ref: 22347236883
Ref: reference/simple_stmts grammar-token-python-grammar-feature7237263
Ref: 22517237263
Ref: Instruções future-Footnote-17240261
Ref: Instruções future-Footnote-27240303
Node: A instrução global7240345
Ref: reference/simple_stmts global7240482
Ref: 18a7240482
Ref: reference/simple_stmts the-global-statement7240482
Ref: 22527240482
Ref: reference/simple_stmts grammar-token-python-grammar-global_stmt7240545
Ref: 22357240545
Node: A instrução nonlocal7242021
Ref: reference/simple_stmts nonlocal7242156
Ref: 12ea7242156
Ref: reference/simple_stmts the-nonlocal-statement7242156
Ref: 22537242156
Ref: reference/simple_stmts grammar-token-python-grammar-nonlocal_stmt7242223
Ref: 22367242223
Ref: A instrução nonlocal-Footnote-17243588
Node: A instrução type7243630
Ref: reference/simple_stmts the-type-statement7243736
Ref: 22547243736
Ref: reference/simple_stmts type7243736
Ref: 4387243736
Ref: reference/simple_stmts grammar-token-python-grammar-type_stmt7243795
Ref: 22377243795
Ref: A instrução type-Footnote-17245261
Node: Instruções compostas7245303
Ref: reference/compound_stmts doc7245459
Ref: 22567245459
Ref: reference/compound_stmts compound7245459
Ref: 22577245459
Ref: reference/compound_stmts compound-statements7245459
Ref: 22587245459
Ref: reference/compound_stmts translation-repo7245459
Ref: 22597245459
Ref: reference/compound_stmts grammar-token-python-grammar-compound_stmt7247515
Ref: 225a7247515
Ref: reference/compound_stmts grammar-token-python-grammar-suite7248051
Ref: 22667248051
Ref: reference/compound_stmts grammar-token-python-grammar-statement7248153
Ref: 22687248153
Ref: reference/compound_stmts grammar-token-python-grammar-stmt_list7248236
Ref: 22677248236
Ref: reference/compound_stmts if7248874
Ref: 2f37248874
Ref: reference/compound_stmts elif7248874
Ref: 1d897248874
Node: A instrução if7249140
Ref: reference/compound_stmts else7249243
Ref: 18c7249243
Ref: reference/compound_stmts the-if-statement7249243
Ref: 22697249243
Ref: reference/compound_stmts grammar-token-python-grammar-if_stmt7249364
Ref: 225b7249364
Node: A instrução while7250045
Ref: reference/compound_stmts the-while-statement7250174
Ref: 226a7250174
Ref: reference/compound_stmts while7250174
Ref: 1d827250174
Ref: reference/compound_stmts grammar-token-python-grammar-while_stmt7250343
Ref: 225c7250343
Node: A instrução for7250988
Ref: reference/compound_stmts for7251118
Ref: 2f27251118
Ref: reference/compound_stmts the-for-statement7251118
Ref: 226b7251118
Ref: reference/compound_stmts grammar-token-python-grammar-for_stmt7251323
Ref: 225d7251323
Node: A instrução try7253111
Ref: reference/compound_stmts the-try-statement7253240
Ref: 226c7253240
Ref: reference/compound_stmts try7253240
Ref: 6e97253240
Ref: reference/compound_stmts grammar-token-python-grammar-try_stmt7253413
Ref: 225e7253413
Ref: reference/compound_stmts grammar-token-python-grammar-try1_stmt7253505
Ref: 226d7253505
Ref: reference/compound_stmts grammar-token-python-grammar-try2_stmt7253769
Ref: 226e7253769
Ref: reference/compound_stmts grammar-token-python-grammar-try3_stmt7254035
Ref: 226f7254035
Node: Cláusula except7254481
Ref: reference/compound_stmts except7254577
Ref: 18b7254577
Ref: reference/compound_stmts except-clause7254577
Ref: 22707254577
Ref: Cláusula except-Footnote-17258068
Node: Cláusula except*7258275
Ref: reference/compound_stmts except-star7258394
Ref: 5b87258394
Ref: reference/compound_stmts id27258394
Ref: 22717258394
Node: Cláusula else7261628
Ref: reference/compound_stmts else-clause7261748
Ref: 22727261748
Ref: reference/compound_stmts except-else7261748
Ref: 22737261748
Node: Cláusula finally7262142
Ref: reference/compound_stmts finally7262236
Ref: 9d27262236
Ref: reference/compound_stmts finally-clause7262236
Ref: 22747262236
Ref: reference/compound_stmts with7264045
Ref: 5d27264045
Node: A instrução with7264045
Ref: reference/compound_stmts as7264176
Ref: 22757264176
Ref: reference/compound_stmts the-with-statement7264176
Ref: 22767264176
Ref: reference/compound_stmts grammar-token-python-grammar-with_stmt7264584
Ref: 225f7264584
Ref: reference/compound_stmts grammar-token-python-grammar-with_stmt_contents7264725
Ref: 22777264725
Ref: reference/compound_stmts grammar-token-python-grammar-with_item7264806
Ref: 22787264806
Ref: reference/compound_stmts match7268200
Ref: 8107268200
Ref: A instrução with-Footnote-17268236
Node: A instrução match7268278
Ref: reference/compound_stmts case7268416
Ref: 22797268416
Ref: reference/compound_stmts the-match-statement7268416
Ref: 227a7268416
Ref: reference/compound_stmts grammar-token-python-grammar-match_stmt7268579
Ref: 22607268579
Ref: reference/compound_stmts grammar-token-python-grammar-subject_expr7268686
Ref: 227b7268686
Ref: reference/compound_stmts grammar-token-python-grammar-case_block7268799
Ref: 227c7268799
Ref: A instrução match-Footnote-17269829
Ref: A instrução match-Footnote-27269871
Node: Visão Geral7269913
Ref: reference/compound_stmts overview7269996
Ref: 227f7269996
Node: Guards7272822
Ref: reference/compound_stmts guards7272942
Ref: 22817272942
Ref: reference/compound_stmts grammar-token-python-grammar-guard7272973
Ref: 227e7272973
Node: Blocos irrefutáveis de case7274206
Ref: reference/compound_stmts irrefutable-case7274322
Ref: 22827274322
Ref: reference/compound_stmts irrefutable-case-blocks7274322
Ref: 22837274322
Node: Padrões7275105
Ref: reference/compound_stmts patterns7275206
Ref: 22877275206
Ref: reference/compound_stmts grammar-token-python-grammar-patterns7275597
Ref: 227d7275597
Ref: reference/compound_stmts grammar-token-python-grammar-pattern7275679
Ref: 22897275679
Ref: reference/compound_stmts grammar-token-python-grammar-closed_pattern7275753
Ref: 228c7275753
Node: Padrões OR7276819
Ref: reference/compound_stmts id37276895
Ref: 22957276895
Ref: reference/compound_stmts or-patterns7276895
Ref: 22857276895
Ref: reference/compound_stmts grammar-token-python-grammar-or_pattern7277038
Ref: 228b7277038
Node: Padrões AS7277709
Ref: reference/compound_stmts as-patterns7277811
Ref: 22847277811
Ref: reference/compound_stmts id47277811
Ref: 22967277811
Ref: reference/compound_stmts grammar-token-python-grammar-as_pattern7277968
Ref: 228a7277968
Node: Padrões literais7278367
Ref: reference/compound_stmts id57278477
Ref: 22977278477
Ref: reference/compound_stmts literal-patterns7278477
Ref: 22987278477
Ref: reference/compound_stmts grammar-token-python-grammar-literal_pattern7278619
Ref: 228d7278619
Ref: reference/compound_stmts grammar-token-python-grammar-signed_number7278939
Ref: 22997278939
Node: Padrões de captura7279639
Ref: reference/compound_stmts capture-patterns7279755
Ref: 22867279755
Ref: reference/compound_stmts id67279755
Ref: 229b7279755
Ref: reference/compound_stmts grammar-token-python-grammar-capture_pattern7279882
Ref: 228e7279882
Ref: Padrões de captura-Footnote-17280717
Node: Padrões curingas7280759
Ref: reference/compound_stmts id77280875
Ref: 229c7280875
Ref: reference/compound_stmts wildcard-patterns7280875
Ref: 8117280875
Ref: reference/compound_stmts grammar-token-python-grammar-wildcard_pattern7281035
Ref: 228f7281035
Node: Padrões de valor7281359
Ref: reference/compound_stmts id87281473
Ref: 229d7281473
Ref: reference/compound_stmts value-patterns7281473
Ref: 229e7281473
Ref: reference/compound_stmts grammar-token-python-grammar-value_pattern7281597
Ref: 22907281597
Ref: reference/compound_stmts grammar-token-python-grammar-attr7281638
Ref: 229f7281638
Ref: reference/compound_stmts grammar-token-python-grammar-name_or_attr7281696
Ref: 22a07281696
Node: Padrões de grupo7282412
Ref: reference/compound_stmts group-patterns7282531
Ref: 22a17282531
Ref: reference/compound_stmts id97282531
Ref: 22a27282531
Ref: reference/compound_stmts grammar-token-python-grammar-group_pattern7282771
Ref: 22917282771
Node: Padrões de sequência7282886
Ref: reference/compound_stmts id107283010
Ref: 22a37283010
Ref: reference/compound_stmts sequence-patterns7283010
Ref: 22a47283010
Ref: reference/compound_stmts grammar-token-python-grammar-sequence_pattern7283244
Ref: 22927283244
Ref: reference/compound_stmts grammar-token-python-grammar-open_sequence_pattern7283401
Ref: 22887283401
Ref: reference/compound_stmts grammar-token-python-grammar-maybe_sequence_pattern7283507
Ref: 22a57283507
Ref: reference/compound_stmts grammar-token-python-grammar-maybe_star_pattern7283581
Ref: 22a67283581
Ref: reference/compound_stmts grammar-token-python-grammar-star_pattern7283662
Ref: 22a77283662
Ref: Padrões de sequência-Footnote-17287150
Node: Padrões de mapeamento7287917
Ref: reference/compound_stmts id127288042
Ref: 22a87288042
Ref: reference/compound_stmts mapping-patterns7288042
Ref: 22a97288042
Ref: reference/compound_stmts grammar-token-python-grammar-mapping_pattern7288243
Ref: 22937288243
Ref: reference/compound_stmts grammar-token-python-grammar-items_pattern7288309
Ref: 22aa7288309
Ref: reference/compound_stmts grammar-token-python-grammar-key_value_pattern7288379
Ref: 22ab7288379
Ref: reference/compound_stmts grammar-token-python-grammar-double_star_pattern7288557
Ref: 22ac7288557
Ref: Padrões de mapeamento-Footnote-17290422
Node: Padrões de classe7290930
Ref: reference/compound_stmts class-patterns7291024
Ref: 22ad7291024
Ref: reference/compound_stmts id147291024
Ref: 22ae7291024
Ref: reference/compound_stmts grammar-token-python-grammar-class_pattern7291188
Ref: 22947291188
Ref: reference/compound_stmts grammar-token-python-grammar-pattern_arguments7291289
Ref: 22af7291289
Ref: reference/compound_stmts grammar-token-python-grammar-positional_patterns7291448
Ref: 22b07291448
Ref: reference/compound_stmts grammar-token-python-grammar-keyword_patterns7291503
Ref: 22b17291503
Ref: reference/compound_stmts grammar-token-python-grammar-keyword_pattern7291566
Ref: 22b27291566
Ref: reference/compound_stmts function7296181
Ref: 1db67296181
Ref: Padrões de classe-Footnote-17296217
Ref: Padrões de classe-Footnote-27296259
Node: Definições de função7296301
Ref: reference/compound_stmts def7296443
Ref: 14a27296443
Ref: reference/compound_stmts function-definitions7296443
Ref: 22b37296443
Ref: reference/compound_stmts grammar-token-python-grammar-funcdef7296644
Ref: 22617296644
Ref: reference/compound_stmts grammar-token-python-grammar-decorators7296887
Ref: 22b47296887
Ref: reference/compound_stmts grammar-token-python-grammar-decorator7296946
Ref: 22b67296946
Ref: reference/compound_stmts grammar-token-python-grammar-parameter_list7297028
Ref: 22197297028
Ref: reference/compound_stmts grammar-token-python-grammar-parameter_list_no_posonly7297253
Ref: 22b87297253
Ref: reference/compound_stmts grammar-token-python-grammar-parameter_list_starargs7297466
Ref: 22b97297466
Ref: reference/compound_stmts grammar-token-python-grammar-parameter_star_kwargs7297800
Ref: 22bb7297800
Ref: reference/compound_stmts grammar-token-python-grammar-parameter7297869
Ref: 22bc7297869
Ref: reference/compound_stmts grammar-token-python-grammar-star_parameter7297958
Ref: 22ba7297958
Ref: reference/compound_stmts grammar-token-python-grammar-defparameter7298053
Ref: 22b77298053
Ref: reference/compound_stmts grammar-token-python-grammar-funcname7298141
Ref: 22b57298141
Ref: Definições de função-Footnote-17305848
Ref: Definições de função-Footnote-27306051
Ref: Definições de função-Footnote-37306093
Ref: Definições de função-Footnote-47306135
Ref: Definições de função-Footnote-57306177
Ref: Definições de função-Footnote-67306219
Ref: Definições de função-Footnote-77306261
Ref: Definições de função-Footnote-87306303
Ref: Definições de função-Footnote-97306345
Ref: Definições de função-Footnote-107306387
Node: Definições de classe7306430
Ref: reference/compound_stmts class7306566
Ref: 131a7306566
Ref: reference/compound_stmts class-definitions7306566
Ref: 22be7306566
Ref: reference/compound_stmts grammar-token-python-grammar-classdef7306735
Ref: 22627306735
Ref: reference/compound_stmts grammar-token-python-grammar-inheritance7306890
Ref: 22c07306890
Ref: reference/compound_stmts grammar-token-python-grammar-classname7306948
Ref: 22bf7306948
Ref: Definições de classe-Footnote-17310593
Ref: Definições de classe-Footnote-27310796
Ref: Definições de classe-Footnote-37310838
Ref: Definições de classe-Footnote-47310880
Ref: Definições de classe-Footnote-57310922
Node: Corrotinas<2>7310964
Ref: reference/compound_stmts async7311105
Ref: 7327311105
Ref: reference/compound_stmts coroutines7311105
Ref: 22c17311105
Node: Definição de função de corrotina7311276
Ref: reference/compound_stmts async-def7311394
Ref: 5d17311394
Ref: reference/compound_stmts coroutine-function-definition7311394
Ref: 22c27311394
Ref: reference/compound_stmts grammar-token-python-grammar-async_funcdef7311481
Ref: 22657311481
Node: A instrução async for7312535
Ref: reference/compound_stmts async-for7312686
Ref: aba7312686
Ref: reference/compound_stmts the-async-for-statement7312686
Ref: 22c37312686
Ref: reference/compound_stmts grammar-token-python-grammar-async_for_stmt7312757
Ref: 22647312757
Node: A instrução async with7313731
Ref: reference/compound_stmts async-with7313837
Ref: 5d57313837
Ref: reference/compound_stmts the-async-with-statement7313837
Ref: 22c47313837
Ref: reference/compound_stmts grammar-token-python-grammar-async_with_stmt7313910
Ref: 22637313910
Ref: A instrução async with-Footnote-17315095
Node: Listas de parâmetros de tipo7315137
Ref: reference/compound_stmts type-parameter-lists7315247
Ref: 22c57315247
Ref: reference/compound_stmts type-params7315247
Ref: 2b37315247
Ref: reference/compound_stmts grammar-token-python-grammar-type_params7315440
Ref: 22557315440
Ref: reference/compound_stmts grammar-token-python-grammar-type_param7315525
Ref: 22c67315525
Ref: reference/compound_stmts grammar-token-python-grammar-typevar7315621
Ref: 22c77315621
Ref: reference/compound_stmts grammar-token-python-grammar-typevartuple7315729
Ref: 22c87315729
Ref: reference/compound_stmts grammar-token-python-grammar-paramspec7315810
Ref: 22c97315810
Ref: Listas de parâmetros de tipo-Footnote-17320629
Node: Funções genéricas7320671
Ref: reference/compound_stmts generic-functions7320784
Ref: 4537320784
Ref: reference/compound_stmts id177320784
Ref: 22cb7320784
Node: Classes genéricas7322687
Ref: reference/compound_stmts generic-classes7322835
Ref: 4527322835
Ref: reference/compound_stmts id187322835
Ref: 22cc7322835
Node: Apelidos de tipo genérico7324024
Ref: reference/compound_stmts generic-type-aliases7324143
Ref: 4567324143
Ref: reference/compound_stmts id197324143
Ref: 22cd7324143
Node: Componentes de Alto Nível7325022
Ref: reference/toplevel_components doc7325196
Ref: 22ce7325196
Ref: reference/toplevel_components top-level7325196
Ref: 22cf7325196
Ref: reference/toplevel_components top-level-components7325196
Ref: 22d07325196
Ref: reference/toplevel_components translation-repo7325196
Ref: 22d17325196
Node: Programas Python completos7325652
Ref: reference/toplevel_components complete-python-programs7325768
Ref: 22d27325768
Ref: reference/toplevel_components programs7325768
Ref: 218d7325768
Node: Entrada de arquivo7327270
Ref: reference/toplevel_components file-input7327413
Ref: 22d37327413
Ref: reference/toplevel_components id17327413
Ref: 22d47327413
Ref: reference/toplevel_components grammar-token-python-grammar-file_input7327532
Ref: 22d57327532
Node: Entrada interativa7327850
Ref: reference/toplevel_components interactive7327988
Ref: 22d67327988
Ref: reference/toplevel_components interactive-input7327988
Ref: 22d77327988
Ref: reference/toplevel_components grammar-token-python-grammar-interactive_input7328112
Ref: 22d87328112
Node: Entrada de expressão7328408
Ref: reference/toplevel_components expression-input7328519
Ref: 22d97328519
Ref: reference/toplevel_components id27328519
Ref: 22da7328519
Ref: reference/toplevel_components grammar-token-python-grammar-eval_input7328755
Ref: 22db7328755
Node: Especificação completa da gramática7328814
Ref: reference/grammar doc7328957
Ref: 229a7328957
Ref: reference/grammar full-grammar-specification7328957
Ref: 22dc7328957
Ref: reference/grammar id17328957
Ref: 22dd7328957
Ref: reference/grammar translation-repo7328957
Ref: 22de7328957
Ref: Especificação completa da gramática-Footnote-17401255
Ref: Especificação completa da gramática-Footnote-27401327
Ref: Especificação completa da gramática-Footnote-37401401
Ref: Especificação completa da gramática-Footnote-47401488
Ref: Especificação completa da gramática-Footnote-57401553
Node: A Biblioteca Padrão do Python7401595
Ref: library/index doc7401764
Ref: 22df7401764
Ref: library/index library-index7401764
Ref: 1447401764
Ref: library/index the-python-standard-library7401764
Ref: 22e07401764
Ref: library/index translation-repo7401764
Ref: 22e17401764
Ref: A Biblioteca Padrão do Python-Footnote-17404963
Node: Introdução<6>7404988
Ref: library/intro doc7405101
Ref: 22e27405101
Ref: library/intro introduction7405101
Ref: 22e37405101
Ref: library/intro library-intro7405101
Ref: 22e47405101
Node: Observações sobre disponibilidade7408101
Ref: library/intro availability7408188
Ref: 1ed87408188
Ref: library/intro notes-on-availability7408188
Ref: 22e57408188
Node: Plataformas WebAssembly7409094
Ref: library/intro wasm-availability7409217
Ref: 18f57409217
Ref: library/intro webassembly-platforms7409217
Ref: 22e67409217
Ref: library/intro mobile-availability7412002
Ref: 1fde7412002
Ref: Plataformas WebAssembly-Footnote-17412039
Ref: Plataformas WebAssembly-Footnote-27412072
Ref: Plataformas WebAssembly-Footnote-37412104
Ref: Plataformas WebAssembly-Footnote-47412130
Ref: Plataformas WebAssembly-Footnote-57412162
Ref: Plataformas WebAssembly-Footnote-67412188
Ref: Plataformas WebAssembly-Footnote-77412218
Ref: Plataformas WebAssembly-Footnote-87412247
Ref: Plataformas WebAssembly-Footnote-97412277
Node: Plataformas móveis7412337
Ref: library/intro ios-availability7412460
Ref: 22e77412460
Ref: library/intro mobile-platforms7412460
Ref: 22e87412460
Ref: Plataformas móveis-Footnote-17415670
Node: Funções embutidas<3>7415736
Ref: library/functions doc7415878
Ref: 22e97415878
Ref: library/functions built-in-funcs7415878
Ref: 129e7415878
Ref: library/functions built-in-functions7415878
Ref: 22ea7415878
Ref: library/functions translation-repo7415878
Ref: 22eb7415878
Ref: library/functions abs7419333
Ref: 1e2d7419333
Ref: library/functions aiter7419607
Ref: 7d67419607
Ref: library/functions all7419934
Ref: 14697419934
Ref: library/functions anext7420266
Ref: 7d77420266
Ref: library/functions any7421021
Ref: 14687421021
Ref: library/functions ascii7421361
Ref: 142d7421361
Ref: library/functions bin7421749
Ref: 12eb7421749
Ref: library/functions bool7422475
Ref: 4687422475
Ref: library/functions breakpoint7423141
Ref: 2347423141
Ref: library/functions func-bytearray7424475
Ref: 1c347424475
Ref: library/functions func-bytes7425969
Ref: 1c337425969
Ref: library/functions callable7426755
Ref: 12067426755
Ref: library/functions chr7427335
Ref: 17687427335
Ref: library/functions classmethod7427816
Ref: 1667427816
Ref: library/functions compile7429541
Ref: 1927429541
Ref: library/functions complex7433946
Ref: 2f87433946
Ref: library/functions grammar-token-float-complexvalue7435588
Ref: 22fe7435588
Ref: library/functions delattr7437323
Ref: 22ec7437323
Ref: library/functions func-dict7437781
Ref: 22ed7437781
Ref: library/functions dir7438258
Ref: 6327438258
Ref: library/functions divmod7441110
Ref: 9a97441110
Ref: library/functions enumerate7441824
Ref: 14c97441824
Ref: library/functions func-eval7442729
Ref: 23027442729
Ref: library/functions eval7442729
Ref: 1807442729
Ref: library/functions exec7446129
Ref: 17f7446129
Ref: library/functions filter7450139
Ref: 8687450139
Ref: library/functions float7450965
Ref: 2f77450965
Ref: library/functions grammar-token-float-sign7451996
Ref: 23007451996
Ref: library/functions grammar-token-float-infinity7452034
Ref: 23047452034
Ref: library/functions grammar-token-float-nan7452081
Ref: 23057452081
Ref: library/functions grammar-token-float-digit7452115
Ref: 23067452115
Ref: library/functions grammar-token-float-digitpart7452217
Ref: 23077452217
Ref: library/functions grammar-token-float-number7452292
Ref: 23087452292
Ref: library/functions grammar-token-float-exponent7452403
Ref: 23097452403
Ref: library/functions grammar-token-float-floatnumber7452486
Ref: 230a7452486
Ref: library/functions grammar-token-float-absfloatvalue7452558
Ref: 23017452558
Ref: library/functions grammar-token-float-floatvalue7452654
Ref: 22ff7452654
Ref: library/functions format7453937
Ref: 61f7453937
Ref: library/functions func-frozenset7455068
Ref: 22ee7455068
Ref: library/functions getattr7455565
Ref: bea7455565
Ref: library/functions globals7456448
Ref: 19937456448
Ref: library/functions hasattr7456720
Ref: 4d27456720
Ref: library/functions hash7457055
Ref: 5eb7457055
Ref: library/functions help7457696
Ref: 8dd7457696
Ref: library/functions hex7458879
Ref: 13127458879
Ref: library/functions id7460034
Ref: 146a7460034
Ref: library/functions input7460491
Ref: 131b7460491
Ref: library/functions int7461517
Ref: 2577461517
Ref: library/functions isinstance7465111
Ref: 4427465111
Ref: library/functions issubclass7465982
Ref: 7c27465982
Ref: library/functions iter7466600
Ref: 7d87466600
Ref: library/functions len7468151
Ref: 62e7468151
Ref: library/functions func-list7468575
Ref: 22ef7468575
Ref: library/functions locals7468820
Ref: 1417468820
Ref: library/functions map7471803
Ref: 8677471803
Ref: library/functions max7472376
Ref: f3b7472376
Ref: library/functions func-memoryview7473748
Ref: 22f07473748
Ref: library/functions min7473940
Ref: f3a7473940
Ref: library/functions next7475299
Ref: 7d97475299
Ref: library/functions object7475648
Ref: a967475648
Ref: library/functions oct7476159
Ref: 13117476159
Ref: library/functions open7477004
Ref: 51c7477004
Ref: library/functions filemodes7478628
Ref: 230e7478628
Ref: library/functions open-newline-parameter7484431
Ref: 7417484431
Ref: library/functions ord7489755
Ref: 20807489755
Ref: library/functions pow7490314
Ref: 9da7490314
Ref: library/functions print7492593
Ref: fa97492593
Ref: library/functions property7493870
Ref: 1947493870
Ref: library/functions property getter7495613
Ref: 17507495613
Ref: library/functions property setter7495641
Ref: 17517495641
Ref: library/functions property deleter7495669
Ref: 17527495669
Ref: library/functions property __name__7496926
Ref: 1937496926
Ref: library/functions func-range7497124
Ref: 22f17497124
Ref: library/functions repr7497409
Ref: 8007497409
Ref: library/functions reversed7498415
Ref: 8697498415
Ref: library/functions round7498749
Ref: 131d7498749
Ref: library/functions func-set7500213
Ref: 22f27500213
Ref: library/functions setattr7500695
Ref: 22f37500695
Ref: library/functions slice7501836
Ref: 4697501836
Ref: library/functions slice start7502423
Ref: 20e87502423
Ref: library/functions slice stop7502449
Ref: 20e97502449
Ref: library/functions slice step7502474
Ref: 20ea7502474
Ref: library/functions sorted7502957
Ref: be77502957
Ref: library/functions staticmethod7504816
Ref: 4167504816
Ref: library/functions func-str7506719
Ref: 22f47506719
Ref: library/functions sum7507164
Ref: 46a7507164
Ref: library/functions super7508099
Ref: 4db7508099
Ref: library/functions func-tuple7512689
Ref: 22f57512689
Ref: library/functions type7512937
Ref: d6b7512937
Ref: library/functions vars7514790
Ref: 1bba7514790
Ref: library/functions zip7515772
Ref: 7d17515772
Ref: library/functions import__7519875
Ref: 8da7519875
Ref: Funções embutidas<3>-Footnote-17523474
Ref: Funções embutidas<3>-Footnote-27523720
Ref: Funções embutidas<3>-Footnote-37523762
Ref: Funções embutidas<3>-Footnote-47523804
Ref: Funções embutidas<3>-Footnote-57523846
Ref: Funções embutidas<3>-Footnote-67523888
Ref: Funções embutidas<3>-Footnote-77523965
Ref: Funções embutidas<3>-Footnote-87524013
Ref: Funções embutidas<3>-Footnote-97524055
Node: Constantes embutidas7524097
Ref: library/constants doc7524239
Ref: 23187524239
Ref: library/constants built-in-constants7524239
Ref: 23197524239
Ref: library/constants built-in-consts7524239
Ref: 231a7524239
Ref: library/constants translation-repo7524239
Ref: 231b7524239
Ref: library/constants False7524394
Ref: b497524394
Ref: library/constants True7524541
Ref: c277524541
Ref: library/constants None7524691
Ref: 6757524691
Ref: library/constants NotImplemented7525022
Ref: 7d37525022
Ref: library/constants Ellipsis7526845
Ref: 231c7526845
Ref: library/constants debug__7527203
Ref: 7db7527203
Node: Constantes adicionadas pelo módulo site7527722
Ref: library/constants constants-added-by-the-site-module7527819
Ref: 231d7527819
Ref: library/constants site-consts7527819
Ref: 231e7527819
Ref: library/constants quit7528237
Ref: 231f7528237
Ref: library/constants exit7528264
Ref: 23207528264
Ref: library/constants copyright7528856
Ref: 15b07528856
Ref: library/constants credits7528876
Ref: 15b17528876
Ref: library/constants license7529020
Ref: 15af7529020
Node: Tipos embutidos7529269
Ref: library/stdtypes doc7529409
Ref: 23217529409
Ref: library/stdtypes bltin-types7529409
Ref: 23227529409
Ref: library/stdtypes built-in-types7529409
Ref: 23237529409
Ref: library/stdtypes translation-repo7529409
Ref: 23247529409
Node: Teste do valor verdade7531202
Ref: library/stdtypes truth7531321
Ref: 162d7531321
Ref: library/stdtypes truth-value-testing7531321
Ref: 23257531321
Ref: Teste do valor verdade-Footnote-17532476
Node: Operações booleanas — and or not7532636
Ref: library/stdtypes boolean7532780
Ref: 23267532780
Ref: library/stdtypes boolean-operations-and-or-not7532780
Ref: 23277532780
Node: Comparações<2>7534202
Ref: library/stdtypes comparisons7534362
Ref: 23287534362
Ref: library/stdtypes stdcomparisons7534362
Ref: 23297534362
Node: Tipos numéricos — int float complex7536927
Ref: library/stdtypes numeric-types-int-float-complex7537071
Ref: 232a7537071
Ref: library/stdtypes typesnumeric7537071
Ref: 1d757537071
Ref: Tipos numéricos — int float complex-Footnote-17545754
Ref: Tipos numéricos — int float complex-Footnote-27545876
Node: Operações de bits em tipos inteiros7545953
Ref: library/stdtypes bitstring-ops7546111
Ref: 232c7546111
Ref: library/stdtypes bitwise-operations-on-integer-types7546111
Ref: 232d7546111
Node: Métodos adicionais em tipos inteiros7548631
Ref: library/stdtypes additional-methods-on-integer-types7548836
Ref: 232e7548836
Ref: library/stdtypes int bit_length7549064
Ref: 232f7549064
Ref: library/stdtypes int bit_count7550051
Ref: 7cd7550051
Ref: library/stdtypes int to_bytes7550528
Ref: 19bd7550528
Ref: library/stdtypes int from_bytes7552747
Ref: 19727552747
Ref: library/stdtypes int as_integer_ratio7554715
Ref: 9d37554715
Ref: library/stdtypes int is_integer7555058
Ref: 18737555058
Node: Métodos adicionais em ponto flutuante7555234
Ref: library/stdtypes additional-methods-on-float7555429
Ref: 23327555429
Ref: library/stdtypes float as_integer_ratio7555666
Ref: 1e9a7555666
Ref: library/stdtypes float is_integer7555986
Ref: 23317555986
Ref: library/stdtypes float hex7556709
Ref: 1e9b7556709
Ref: library/stdtypes float fromhex7556979
Ref: 23337556979
Node: Hashing de tipos numéricos7558699
Ref: library/stdtypes hashing-of-numeric-types7558848
Ref: 23347558848
Ref: library/stdtypes numeric-hash7558848
Ref: 23357558848
Ref: library/stdtypes bltin-boolean-values7563218
Ref: 23377563218
Node: Tipo booleano - bool7563219
Ref: library/stdtypes boolean-type-bool7563363
Ref: 23387563363
Ref: library/stdtypes typebool7563363
Ref: 22f67563363
Node: Tipos iteradores7564658
Ref: library/stdtypes iterator-types7564802
Ref: 23397564802
Ref: library/stdtypes typeiter7564802
Ref: 230c7564802
Ref: library/stdtypes container __iter__7565255
Ref: 1e4a7565255
Ref: library/stdtypes iterator __iter__7566037
Ref: 1e4d7566037
Ref: library/stdtypes iterator __next__7566405
Ref: 13107566405
Node: Tipos geradores7567239
Ref: library/stdtypes generator-types7567307
Ref: 233a7567307
Ref: library/stdtypes id37567307
Ref: 233b7567307
Node: Tipos sequências — list tuple range7567831
Ref: library/stdtypes sequence-types-list-tuple-range7567987
Ref: 233c7567987
Ref: library/stdtypes typesseq7567987
Ref: 1dcc7567987
Node: Operações comuns de sequências7568503
Ref: library/stdtypes common-sequence-operations7568647
Ref: 233d7568647
Ref: library/stdtypes typesseq-common7568647
Ref: 233e7568647
Ref: library/stdtypes list count7577207
Ref: 140c7577207
Ref: library/stdtypes sequence count7577207
Ref: 211a7577207
Ref: library/stdtypes list index7577319
Ref: 140b7577319
Ref: library/stdtypes sequence index7577319
Ref: 211c7577319
Ref: Operações comuns de sequências-Footnote-17577972
Node: Tipos sequência imutáveis7578073
Ref: library/stdtypes immutable-sequence-types7578253
Ref: 23427578253
Ref: library/stdtypes typesseq-immutable7578253
Ref: 23437578253
Node: Tipos sequências mutáveis7578893
Ref: library/stdtypes mutable-sequence-types7579049
Ref: 23447579049
Ref: library/stdtypes typesseq-mutable7579049
Ref: 22f77579049
Ref: library/stdtypes bytearray append7582561
Ref: 13ec7582561
Ref: library/stdtypes sequence append7582561
Ref: 21187582561
Ref: library/stdtypes bytearray clear7582720
Ref: 23457582720
Ref: library/stdtypes sequence clear7582720
Ref: 21197582720
Ref: library/stdtypes bytearray copy7582882
Ref: 23467582882
Ref: library/stdtypes sequence copy7582882
Ref: 23477582882
Ref: library/stdtypes bytearray extend7583231
Ref: 15b67583231
Ref: library/stdtypes sequence extend7583231
Ref: 211b7583231
Ref: library/stdtypes bytearray insert7583413
Ref: 23487583413
Ref: library/stdtypes sequence insert7583413
Ref: 211d7583413
Ref: library/stdtypes bytearray pop7583588
Ref: 13ed7583588
Ref: library/stdtypes sequence pop7583588
Ref: 211e7583588
Ref: library/stdtypes bytearray remove7583769
Ref: 23497583769
Ref: library/stdtypes sequence remove7583769
Ref: 211f7583769
Ref: library/stdtypes bytearray reverse7583974
Ref: 13ee7583974
Ref: library/stdtypes sequence reverse7583974
Ref: 21207583974
Node: Listas<2>7584237
Ref: library/stdtypes lists7584372
Ref: 234a7584372
Ref: library/stdtypes typesseq-list7584372
Ref: 1dc07584372
Ref: library/stdtypes list7584584
Ref: 6117584584
Ref: library/stdtypes list sort7585824
Ref: be87585824
Node: Tuplas7588487
Ref: library/stdtypes tuples7588605
Ref: 234b7588605
Ref: library/stdtypes typesseq-tuple7588605
Ref: 22807588605
Ref: library/stdtypes tuple7589029
Ref: 3707589029
Node: Intervalos7590719
Ref: library/stdtypes ranges7590819
Ref: 234c7590819
Ref: library/stdtypes typesseq-range7590819
Ref: 23127590819
Ref: library/stdtypes range7591028
Ref: 94a7591028
Ref: library/stdtypes range start7593144
Ref: 234d7593144
Ref: library/stdtypes range stop7593269
Ref: 234e7593269
Ref: library/stdtypes range step7593334
Ref: 234f7593334
Ref: Intervalos-Footnote-17595470
Node: Tipo sequência de texto — str7595556
Ref: library/stdtypes text-sequence-type-str7595755
Ref: 23507595755
Ref: library/stdtypes textseq7595755
Ref: 1d7a7595755
Ref: library/stdtypes str7597668
Ref: 44c7597668
Node: String Methods<2>7600118
Ref: library/stdtypes id57600250
Ref: 23527600250
Ref: library/stdtypes string-methods7600250
Ref: 1d7b7600250
Ref: library/stdtypes str capitalize7601253
Ref: 23557601253
Ref: library/stdtypes str casefold7601668
Ref: e007601668
Ref: library/stdtypes str center7602515
Ref: 1e037602515
Ref: library/stdtypes str count7603028
Ref: 17327603028
Ref: library/stdtypes str encode7603733
Ref: 8db7603733
Ref: library/stdtypes str endswith7605124
Ref: efb7605124
Ref: library/stdtypes str expandtabs7605982
Ref: 23567605982
Ref: library/stdtypes str find7607391
Ref: ed77607391
Ref: library/stdtypes str format7608182
Ref: 6217608182
Ref: library/stdtypes str format_map7610053
Ref: e017610053
Ref: library/stdtypes str index7610616
Ref: 17337610616
Ref: library/stdtypes str isalnum7611100
Ref: 23577611100
Ref: library/stdtypes str isalpha7611450
Ref: 23587611450
Ref: library/stdtypes str isascii7612303
Ref: b047612303
Ref: library/stdtypes str isdecimal7612684
Ref: 235a7612684
Ref: library/stdtypes str isdigit7613356
Ref: 235b7613356
Ref: library/stdtypes str isidentifier7613937
Ref: 1ad37613937
Ref: library/stdtypes str islower7614521
Ref: 235d7614521
Ref: library/stdtypes str isnumeric7614758
Ref: 235e7614758
Ref: library/stdtypes str isprintable7615705
Ref: e027615705
Ref: library/stdtypes str isspace7616794
Ref: 235f7616794
Ref: library/stdtypes str istitle7617235
Ref: 23607617235
Ref: library/stdtypes str isupper7617836
Ref: 23627617836
Ref: library/stdtypes meth-str-join7618273
Ref: 23637618273
Ref: library/stdtypes str join7618273
Ref: 23407618273
Ref: library/stdtypes str ljust7618819
Ref: 1e027618819
Ref: library/stdtypes str lower7619393
Ref: 19017619393
Ref: library/stdtypes str lstrip7619732
Ref: 14f87619732
Ref: library/stdtypes str maketrans7620656
Ref: e037620656
Ref: library/stdtypes str partition7621513
Ref: eda7621513
Ref: library/stdtypes str removeprefix7621872
Ref: 8d57621872
Ref: library/stdtypes str removesuffix7622306
Ref: 8d67622306
Ref: library/stdtypes str replace7622769
Ref: 19a7622769
Ref: library/stdtypes str rfind7623356
Ref: ed87623356
Ref: library/stdtypes str rindex7623851
Ref: 12997623851
Ref: library/stdtypes str rjust7624022
Ref: 1e017624022
Ref: library/stdtypes str rpartition7624360
Ref: 129a7624360
Ref: library/stdtypes str rsplit7625066
Ref: 12977625066
Ref: library/stdtypes str rstrip7625591
Ref: 14f97625591
Ref: library/stdtypes str split7626488
Ref: ed97626488
Ref: library/stdtypes str splitlines7628791
Ref: 12987628791
Ref: library/stdtypes str startswith7631652
Ref: efa7631652
Ref: library/stdtypes str strip7632037
Ref: 14f77632037
Ref: library/stdtypes str swapcase7633137
Ref: 23657633137
Ref: library/stdtypes str title7633367
Ref: 23617633367
Ref: library/stdtypes str translate7634703
Ref: 23647634703
Ref: library/stdtypes str upper7635720
Ref: 23687635720
Ref: library/stdtypes str zfill7636304
Ref: 14fa7636304
Ref: String Methods<2>-Footnote-17636867
Ref: String Methods<2>-Footnote-27636931
Ref: String Methods<2>-Footnote-37636995
Ref: String Methods<2>-Footnote-47637212
Ref: String Methods<2>-Footnote-57637429
Ref: String Methods<2>-Footnote-67637646
Ref: String Methods<2>-Footnote-77637710
Ref: String Methods<2>-Footnote-87637927
Node: Strings literais formatadas f-strings7637991
Ref: library/stdtypes formatted-string-literals-f-strings7638171
Ref: 23697638171
Node: Formatação de string no estilo printf7642110
Ref: library/stdtypes old-string-formatting7642264
Ref: 6cc7642264
Ref: library/stdtypes printf-style-string-formatting7642264
Ref: 236a7642264
Ref: Formatação de string no estilo printf-Footnote-17652223
Ref: Formatação de string no estilo printf-Footnote-27652358
Node: Tipos de sequência binária — bytes bytearray memoryview7652400
Ref: library/stdtypes binary-sequence-types-bytes-bytearray-memoryview7652593
Ref: 236c7652593
Ref: library/stdtypes binaryseq7652593
Ref: 22f97652593
Node: Objetos bytes7653368
Ref: library/stdtypes bytes-objects7653503
Ref: 236d7653503
Ref: library/stdtypes typebytes7653503
Ref: 22fb7653503
Ref: library/stdtypes bytes7653910
Ref: 1c27653910
Ref: library/stdtypes bytes fromhex7656469
Ref: b027656469
Ref: library/stdtypes bytes hex7657151
Ref: d8d7657151
Node: Objetos Bytearray7659009
Ref: library/stdtypes bytearray-objects7659186
Ref: 236e7659186
Ref: library/stdtypes typebytearray7659186
Ref: 22fa7659186
Ref: library/stdtypes bytearray7659331
Ref: 2ea7659331
Ref: library/stdtypes bytearray fromhex7660535
Ref: b037660535
Ref: library/stdtypes bytearray hex7661249
Ref: d8e7661249
Node: Operações com Bytes e Bytearray7662441
Ref: library/stdtypes bytes-and-bytearray-operations7662649
Ref: 236f7662649
Ref: library/stdtypes bytes-methods7662649
Ref: 22f87662649
Ref: library/stdtypes bytes count7663990
Ref: 23707663990
Ref: library/stdtypes bytearray count7664037
Ref: 15ba7664037
Ref: library/stdtypes bytes removeprefix7664693
Ref: 23717664693
Ref: library/stdtypes bytearray removeprefix7664737
Ref: 23727664737
Ref: library/stdtypes bytes removesuffix7665392
Ref: 23737665392
Ref: library/stdtypes bytearray removesuffix7665436
Ref: 23747665436
Ref: library/stdtypes bytes decode7666125
Ref: 8dc7666125
Ref: library/stdtypes bytearray decode7666187
Ref: 23757666187
Ref: library/stdtypes bytes endswith7667602
Ref: 23767667602
Ref: library/stdtypes bytearray endswith7667655
Ref: 13e97667655
Ref: library/stdtypes bytes find7668195
Ref: 195e7668195
Ref: library/stdtypes bytearray find7668241
Ref: 13ea7668241
Ref: library/stdtypes bytes index7669117
Ref: 23777669117
Ref: library/stdtypes bytearray index7669164
Ref: 15bb7669164
Ref: library/stdtypes bytes join7669596
Ref: 23417669596
Ref: library/stdtypes bytearray join7669634
Ref: 23787669634
Ref: library/stdtypes bytes maketrans7670126
Ref: 12b67670126
Ref: library/stdtypes bytearray maketrans7670176
Ref: 12b77670176
Ref: library/stdtypes bytes partition7670568
Ref: 237a7670568
Ref: library/stdtypes bytearray partition7670606
Ref: 237b7670606
Ref: library/stdtypes bytes replace7671113
Ref: 237c7671113
Ref: library/stdtypes bytearray replace7671164
Ref: 237d7671164
Ref: library/stdtypes bytes rfind7671768
Ref: 195f7671768
Ref: library/stdtypes bytearray rfind7671815
Ref: 13eb7671815
Ref: library/stdtypes bytes rindex7672441
Ref: 237e7672441
Ref: library/stdtypes bytearray rindex7672489
Ref: 15bc7672489
Ref: library/stdtypes bytes rpartition7672924
Ref: 237f7672924
Ref: library/stdtypes bytearray rpartition7672963
Ref: 23807672963
Ref: library/stdtypes bytes startswith7673472
Ref: 23817673472
Ref: library/stdtypes bytearray startswith7673527
Ref: 13e87673527
Ref: library/stdtypes bytes translate7674038
Ref: 23797674038
Ref: library/stdtypes bytearray translate7674090
Ref: 133f7674090
Ref: library/stdtypes bytes center7675203
Ref: 23827675203
Ref: library/stdtypes bytearray center7675255
Ref: 23837675255
Ref: library/stdtypes bytes ljust7675809
Ref: 23847675809
Ref: library/stdtypes bytearray ljust7675860
Ref: 23857675860
Ref: library/stdtypes bytes lstrip7676420
Ref: 23867676420
Ref: library/stdtypes bytearray lstrip7676462
Ref: 23877676462
Ref: library/stdtypes bytes rjust7677736
Ref: 23887677736
Ref: library/stdtypes bytearray rjust7677787
Ref: 23897677787
Ref: library/stdtypes bytes rsplit7678346
Ref: 238a7678346
Ref: library/stdtypes bytearray rsplit7678396
Ref: 15bf7678396
Ref: library/stdtypes bytes rstrip7678981
Ref: 238b7678981
Ref: library/stdtypes bytearray rstrip7679023
Ref: 238c7679023
Ref: library/stdtypes bytes split7680273
Ref: 238d7680273
Ref: library/stdtypes bytearray split7680322
Ref: 15be7680322
Ref: library/stdtypes bytes strip7682441
Ref: 238e7682441
Ref: library/stdtypes bytearray strip7682482
Ref: 238f7682482
Ref: library/stdtypes bytes capitalize7683763
Ref: 23907683763
Ref: library/stdtypes bytearray capitalize7683796
Ref: 23917683796
Ref: library/stdtypes bytes expandtabs7684268
Ref: 23927684268
Ref: library/stdtypes bytearray expandtabs7684310
Ref: 23937684310
Ref: library/stdtypes bytes isalnum7685825
Ref: 23947685825
Ref: library/stdtypes bytearray isalnum7685855
Ref: 23957685855
Ref: library/stdtypes bytes isalpha7686446
Ref: 23967686446
Ref: library/stdtypes bytearray isalpha7686476
Ref: 23977686476
Ref: library/stdtypes bytes isascii7686951
Ref: 23987686951
Ref: library/stdtypes bytearray isascii7686981
Ref: 23997686981
Ref: library/stdtypes bytes isdigit7687223
Ref: 239a7687223
Ref: library/stdtypes bytearray isdigit7687253
Ref: 239b7687253
Ref: library/stdtypes bytes islower7687667
Ref: 239c7687667
Ref: library/stdtypes bytearray islower7687697
Ref: 239d7687697
Ref: library/stdtypes bytes isspace7688295
Ref: 239e7688295
Ref: library/stdtypes bytearray isspace7688325
Ref: 239f7688325
Ref: library/stdtypes bytes istitle7688749
Ref: 23a07688749
Ref: library/stdtypes bytearray istitle7688779
Ref: 23a17688779
Ref: library/stdtypes bytes isupper7689166
Ref: 23a37689166
Ref: library/stdtypes bytearray isupper7689196
Ref: 23a47689196
Ref: library/stdtypes bytes lower7689806
Ref: 23a57689806
Ref: library/stdtypes bytearray lower7689834
Ref: 23a67689834
Ref: library/stdtypes bytes splitlines7690555
Ref: 23a77690555
Ref: library/stdtypes bytearray splitlines7690602
Ref: 23a87690602
Ref: library/stdtypes bytes swapcase7691633
Ref: 23a97691633
Ref: library/stdtypes bytearray swapcase7691664
Ref: 23aa7691664
Ref: library/stdtypes bytes title7692705
Ref: 23a27692705
Ref: library/stdtypes bytearray title7692733
Ref: 23ab7692733
Ref: library/stdtypes bytes upper7694586
Ref: 23ac7694586
Ref: library/stdtypes bytearray upper7694614
Ref: 23ad7694614
Ref: library/stdtypes bytes zfill7695325
Ref: 23ae7695325
Ref: library/stdtypes bytearray zfill7695361
Ref: 23af7695361
Node: Estilo de Formatação de bytes printf-style7696147
Ref: library/stdtypes bytes-formatting7696350
Ref: da97696350
Ref: library/stdtypes printf-style-bytes-formatting7696350
Ref: 23b07696350
Ref: Estilo de Formatação de bytes printf-style-Footnote-17706509
Ref: Estilo de Formatação de bytes printf-style-Footnote-27706644
Ref: Estilo de Formatação de bytes printf-style-Footnote-37706686
Node: Memory Views7706728
Ref: library/stdtypes memory-views7706889
Ref: 23b17706889
Ref: library/stdtypes typememoryview7706889
Ref: 230d7706889
Ref: library/stdtypes memoryview7707089
Ref: 2eb7707089
Ref: library/stdtypes memoryview __eq__7711112
Ref: 23b57711112
Ref: library/stdtypes memoryview tobytes7713240
Ref: 23b67713240
Ref: library/stdtypes memoryview hex7714412
Ref: d8f7714412
Ref: library/stdtypes memoryview tolist7714994
Ref: 23b27714994
Ref: library/stdtypes memoryview toreadonly7715591
Ref: 23b77715591
Ref: library/stdtypes memoryview release7716219
Ref: 11fe7716219
Ref: library/stdtypes memoryview cast7717663
Ref: 23b87717663
Ref: library/stdtypes memoryview obj7720886
Ref: 23ba7720886
Ref: library/stdtypes memoryview nbytes7721124
Ref: 23bb7721124
Ref: library/stdtypes memoryview readonly7722264
Ref: 23bc7722264
Ref: library/stdtypes memoryview format7722357
Ref: 23b47722357
Ref: library/stdtypes memoryview itemsize7722927
Ref: 23b37722927
Ref: library/stdtypes memoryview ndim7723300
Ref: 23bd7723300
Ref: library/stdtypes memoryview shape7723449
Ref: 23be7723449
Ref: library/stdtypes memoryview strides7723711
Ref: 23bf7723711
Ref: library/stdtypes memoryview suboffsets7724012
Ref: 23c07724012
Ref: library/stdtypes memoryview c_contiguous7724142
Ref: 23c17724142
Ref: library/stdtypes memoryview f_contiguous7724286
Ref: 23c27724286
Ref: library/stdtypes memoryview contiguous7724446
Ref: 23c37724446
Ref: Memory Views-Footnote-17724621
Node: Tipo conjuntos — set frozenset7724663
Ref: library/stdtypes set-types-set-frozenset7724848
Ref: 23c47724848
Ref: library/stdtypes types-set7724848
Ref: 1dcf7724848
Ref: library/stdtypes set7726577
Ref: 5d97726577
Ref: library/stdtypes frozenset7726610
Ref: 5da7726610
Ref: library/stdtypes frozenset isdisjoint7727668
Ref: 23c67727668
Ref: library/stdtypes set isdisjoint7727713
Ref: 23c77727713
Ref: library/stdtypes frozenset issubset7727925
Ref: 23c87727925
Ref: library/stdtypes set issubset7727968
Ref: 23c97727968
Ref: library/stdtypes frozenset issuperset7728244
Ref: 23ca7728244
Ref: library/stdtypes set issuperset7728289
Ref: 19107728289
Ref: library/stdtypes frozenset union7728569
Ref: 14cb7728569
Ref: library/stdtypes set union7728608
Ref: 23cb7728608
Ref: library/stdtypes frozenset intersection7728759
Ref: 14cc7728759
Ref: library/stdtypes set intersection7728805
Ref: 190f7728805
Ref: library/stdtypes frozenset difference7728970
Ref: 23cc7728970
Ref: library/stdtypes set difference7729014
Ref: 23cd7729014
Ref: library/stdtypes frozenset symmetric_difference7729176
Ref: 23ce7729176
Ref: library/stdtypes set symmetric_difference7729231
Ref: 23cf7729231
Ref: library/stdtypes frozenset copy7729415
Ref: 23d07729415
Ref: library/stdtypes set copy7729446
Ref: 23d17729446
Ref: library/stdtypes set update7731743
Ref: 23d27731743
Ref: library/stdtypes set intersection_update7731873
Ref: 14cd7731873
Ref: library/stdtypes set difference_update7732044
Ref: 23d37732044
Ref: library/stdtypes set symmetric_difference_update7732194
Ref: 14ce7732194
Ref: library/stdtypes set add7732391
Ref: 20837732391
Ref: library/stdtypes set remove7732469
Ref: 23c57732469
Ref: library/stdtypes set discard7732627
Ref: 23d47732627
Ref: library/stdtypes set pop7732731
Ref: 23d57732731
Ref: library/stdtypes set clear7732880
Ref: 23d67732880
Node: Tipo mapeamento — dict7733439
Ref: library/stdtypes mapping-types-dict7733597
Ref: 23d77733597
Ref: library/stdtypes typesmapping7733597
Ref: ad67733597
Ref: library/stdtypes dict7734451
Ref: 2567734451
Ref: library/stdtypes dict clear7740331
Ref: 15e27740331
Ref: library/stdtypes dict copy7740408
Ref: be97740408
Ref: library/stdtypes dict fromkeys7740493
Ref: 16377740493
Ref: library/stdtypes dict get7741111
Ref: 1dd27741111
Ref: library/stdtypes dict items7741424
Ref: 7d07741424
Ref: library/stdtypes dict keys7741635
Ref: 7ce7741635
Ref: library/stdtypes dict pop7741806
Ref: 3437741806
Ref: library/stdtypes dict popitem7742130
Ref: 156f7742130
Ref: library/stdtypes dict setdefault7742982
Ref: 10b27742982
Ref: library/stdtypes dict update7743230
Ref: 14ad7743230
Ref: library/stdtypes dict values7744010
Ref: 7cf7744010
Node: Objetos de visão de dicionário7745832
Ref: library/stdtypes dict-views7745925
Ref: 23d87745925
Ref: library/stdtypes dictionary-view-objects7745925
Ref: 23d97745925
Node: Tipos de Gerenciador de Contexto7749882
Ref: library/stdtypes context-manager-types7750064
Ref: 23db7750064
Ref: library/stdtypes typecontextmanager7750064
Ref: 214e7750064
Ref: library/stdtypes contextmanager __enter__7750538
Ref: 23dc7750538
Ref: library/stdtypes contextmanager __exit__7751650
Ref: 23dd7751650
Node: Tipos de anotação de tipo — Apelido genérico União7754377
Ref: library/stdtypes type-annotation-types-generic-alias-union7754557
Ref: 23de7754557
Node: Tipo Generic Alias7754855
Ref: library/stdtypes generic-alias-type7754986
Ref: 23df7754986
Ref: library/stdtypes types-genericalias7754986
Ref: 6b27754986
Node: Classes genéricas padrão7759970
Ref: library/stdtypes standard-generic-classes7760103
Ref: 23e17760103
Node: Atributos especiais de objetos GenericAlias7762516
Ref: library/stdtypes special-attributes-of-genericalias-objects7762649
Ref: 23ef7762649
Ref: library/stdtypes genericalias __origin__7762849
Ref: 23f07762849
Ref: library/stdtypes genericalias __args__7763020
Ref: 23e07763020
Ref: library/stdtypes genericalias __parameters__7763332
Ref: 23f17763332
Ref: library/stdtypes genericalias __unpacked__7763934
Ref: 23f27763934
Ref: Atributos especiais de objetos GenericAlias-Footnote-17764858
Ref: Atributos especiais de objetos GenericAlias-Footnote-27764900
Node: Tipo União7764942
Ref: library/stdtypes types-union7765073
Ref: 7c37765073
Ref: library/stdtypes union-type7765073
Ref: 23f37765073
Ref: Tipo União-Footnote-17768714
Node: Outros tipos embutidos7768756
Ref: library/stdtypes other-built-in-types7768923
Ref: 23f47768923
Ref: library/stdtypes typesother7768923
Ref: 23f57768923
Node: Módulos<4>7769348
Ref: library/stdtypes modules7769459
Ref: 23f67769459
Ref: library/stdtypes typesmodules7769459
Ref: 23f77769459
Node: Classes e Instâncias de Classes7770728
Ref: library/stdtypes classes-and-class-instances7770857
Ref: 23f87770857
Ref: library/stdtypes typesobjects7770857
Ref: 23f97770857
Node: Funções7771035
Ref: library/stdtypes functions7771161
Ref: 23fa7771161
Ref: library/stdtypes typesfunctions7771161
Ref: 23fb7771161
Node: Métodos7771707
Ref: library/stdtypes methods7771819
Ref: 23fc7771819
Ref: library/stdtypes typesmethods7771819
Ref: 23fd7771819
Node: Objetos código<2>7773844
Ref: library/stdtypes bltin-code-objects7773959
Ref: 23fe7773959
Ref: library/stdtypes code-objects7773959
Ref: 23ff7773959
Node: Objetos tipo7774884
Ref: library/stdtypes bltin-type-objects7775004
Ref: 23177775004
Ref: library/stdtypes type-objects7775004
Ref: 24007775004
Node: O objeto nulo7775375
Ref: library/stdtypes bltin-null-object7775494
Ref: 24017775494
Ref: library/stdtypes the-null-object7775494
Ref: 24027775494
Node: O Objeto Ellipsis7775821
Ref: library/stdtypes bltin-ellipsis-object7775951
Ref: 1d9a7775951
Ref: library/stdtypes the-ellipsis-object7775951
Ref: 24037775951
Ref: O Objeto Ellipsis-Footnote-17777216
Node: O Objeto NotImplemented7777301
Ref: library/stdtypes bltin-notimplemented-object7777434
Ref: 24067777434
Ref: library/stdtypes the-notimplemented-object7777434
Ref: 24077777434
Node: Objetos Internos7777864
Ref: library/stdtypes internal-objects7777971
Ref: 24087777971
Ref: library/stdtypes typesinternal7777971
Ref: 24097777971
Node: Atributos Especiais7778230
Ref: library/stdtypes special-attributes7778404
Ref: 240a7778404
Ref: library/stdtypes specialattrs7778404
Ref: 240b7778404
Ref: library/stdtypes definition __name__7778666
Ref: 109f7778666
Ref: library/stdtypes definition __qualname__7778779
Ref: 109e7778779
Ref: library/stdtypes definition __module__7778959
Ref: 240c7778959
Ref: library/stdtypes definition __doc__7779065
Ref: 92e7779065
Ref: library/stdtypes definition __type_params__7779196
Ref: 22ca7779196
Node: Limitação de comprimento de string na conversão para inteiro7779467
Ref: library/stdtypes int-max-str-digits7779610
Ref: 5f57779610
Ref: library/stdtypes integer-string-conversion-length-limitation7779610
Ref: 240d7779610
Ref: Limitação de comprimento de string na conversão para inteiro-Footnote-17782589
Node: APIs afetadas7782645
Ref: library/stdtypes affected-apis7782789
Ref: 240e7782789
Node: Configurando o limiter7783770
Ref: library/stdtypes configuring-the-limit7783949
Ref: 240f7783949
Node: Configuração recomendada7786736
Ref: library/stdtypes recommended-configuration7786893
Ref: 24127786893
Node: Exceções embutidas7787827
Ref: library/exceptions doc7787982
Ref: 24137787982
Ref: library/exceptions bltin-exceptions7787982
Ref: 19b17787982
Ref: library/exceptions built-in-exceptions7787982
Ref: 24147787982
Ref: library/exceptions translation-repo7787982
Ref: 24157787982
Node: Contexto da exceção7789893
Ref: library/exceptions exception-context7790012
Ref: 24167790012
Ref: library/exceptions BaseException __context__7790180
Ref: 130a7790180
Ref: library/exceptions BaseException __cause__7790220
Ref: 130b7790220
Ref: library/exceptions BaseException __suppress_context__7790258
Ref: 224a7790258
Node: Herdando de exceções embutidas7792074
Ref: library/exceptions inheriting-from-built-in-exceptions7792214
Ref: 24177792214
Ref: Herdando de exceções embutidas-Footnote-17793110
Node: Classes base7793183
Ref: library/exceptions base-classes7793322
Ref: 24187793322
Ref: library/exceptions BaseException7793455
Ref: 5bb7793455
Ref: library/exceptions BaseException args7793866
Ref: 56c7793866
Ref: library/exceptions BaseException with_traceback7794276
Ref: 22497794276
Ref: library/exceptions BaseException __traceback__7795249
Ref: 13097795249
Ref: library/exceptions BaseException add_note7795451
Ref: 5ba7795451
Ref: library/exceptions BaseException __notes__7795756
Ref: 24197795756
Ref: library/exceptions Exception7796009
Ref: 9e27796009
Ref: library/exceptions ArithmeticError7796226
Ref: 241a7796226
Ref: library/exceptions BufferError7796449
Ref: 15bd7796449
Ref: library/exceptions LookupError7796579
Ref: 23677796579
Ref: Classes base-Footnote-17796901
Node: Exceções concretas7796943
Ref: library/exceptions concrete-exceptions7797056
Ref: 241c7797056
Ref: library/exceptions AssertionError7797174
Ref: 6a97797174
Ref: library/exceptions AttributeError7797270
Ref: 34b7797270
Ref: library/exceptions AttributeError name7797666
Ref: 241d7797666
Ref: library/exceptions AttributeError obj7797751
Ref: 241e7797751
Ref: library/exceptions EOFError7797935
Ref: 131c7797935
Ref: library/exceptions FloatingPointError7798228
Ref: 241b7798228
Ref: library/exceptions GeneratorExit7798292
Ref: 140e7798292
Ref: library/exceptions ImportError7798623
Ref: 4197798623
Ref: library/exceptions ImportError name7798978
Ref: 24207798978
Ref: library/exceptions ImportError path7799068
Ref: 24217799068
Ref: library/exceptions ModuleNotFoundError7799260
Ref: b5b7799260
Ref: library/exceptions IndexError7799553
Ref: 157e7799553
Ref: library/exceptions KeyError7799833
Ref: 3447799833
Ref: library/exceptions KeyboardInterrupt7799977
Ref: 9d97799977
Ref: library/exceptions MemoryError7800925
Ref: 15c57800925
Ref: library/exceptions NameError7801524
Ref: 43f7801524
Ref: library/exceptions NameError name7801837
Ref: 24237801837
Ref: library/exceptions NotImplementedError7801995
Ref: 2287801995
Ref: library/exceptions OSError7802903
Ref: 4177802903
Ref: library/exceptions OSError errno7804068
Ref: 15d57804068
Ref: library/exceptions OSError winerror7804162
Ref: 24257804162
Ref: library/exceptions OSError strerror7804742
Ref: 24267804742
Ref: library/exceptions OSError filename7804974
Ref: 24277804974
Ref: library/exceptions OSError filename27805002
Ref: 24287805002
Ref: library/exceptions OverflowError7806083
Ref: 8857806083
Ref: library/exceptions PythonFinalizationError7806640
Ref: 14d7806640
Ref: library/exceptions RecursionError7807296
Ref: d907807296
Ref: library/exceptions ReferenceError7807645
Ref: 15567807645
Ref: library/exceptions RuntimeError7807994
Ref: 1957807994
Ref: library/exceptions StopIteration7808203
Ref: c157808203
Ref: library/exceptions StopIteration value7808429
Ref: 21577808429
Ref: library/exceptions StopAsyncIteration7809619
Ref: 1ba57809619
Ref: library/exceptions SyntaxError7809826
Ref: 18d7809826
Ref: library/exceptions SyntaxError filename7810388
Ref: 24297810388
Ref: library/exceptions SyntaxError lineno7810480
Ref: 242a7810480
Ref: library/exceptions SyntaxError offset7810668
Ref: 242b7810668
Ref: library/exceptions SyntaxError text7810837
Ref: 242c7810837
Ref: library/exceptions SyntaxError end_lineno7810917
Ref: 242d7810917
Ref: library/exceptions SyntaxError end_offset7811117
Ref: 242e7811117
Ref: library/exceptions IndentationError7811780
Ref: 7a97811780
Ref: library/exceptions TabError7811947
Ref: 5437811947
Ref: library/exceptions SystemError7812132
Ref: 5757812132
Ref: library/exceptions SystemExit7813050
Ref: d637813050
Ref: library/exceptions SystemExit code7814424
Ref: 24307814424
Ref: library/exceptions TypeError7814564
Ref: 2c37814564
Ref: library/exceptions UnboundLocalError7815459
Ref: 157f7815459
Ref: library/exceptions UnicodeError7815697
Ref: 12e67815697
Ref: library/exceptions UnicodeError encoding7816109
Ref: 24317816109
Ref: library/exceptions UnicodeError reason7816194
Ref: 24327816194
Ref: library/exceptions UnicodeError object7816285
Ref: 24337816285
Ref: library/exceptions UnicodeError start7816386
Ref: 16a27816386
Ref: library/exceptions UnicodeError end7816484
Ref: 16a37816484
Ref: library/exceptions UnicodeEncodeError7816586
Ref: 6777816586
Ref: library/exceptions UnicodeDecodeError7816759
Ref: a1d7816759
Ref: library/exceptions UnicodeTranslateError7816934
Ref: 24347816934
Ref: library/exceptions ValueError7817107
Ref: 2027817107
Ref: library/exceptions ZeroDivisionError7817354
Ref: 94c7817354
Ref: library/exceptions EnvironmentError7817723
Ref: 108c7817723
Ref: library/exceptions IOError7817756
Ref: 108b7817756
Ref: library/exceptions WindowsError7817780
Ref: 108d7817780
Ref: Exceções concretas-Footnote-17817930
Ref: Exceções concretas-Footnote-27817972
Node: Exceções de sistema operacional7818014
Ref: library/exceptions os-exceptions7818104
Ref: 24247818104
Ref: library/exceptions BlockingIOError7818314
Ref: 10907818314
Ref: library/exceptions BlockingIOError characters_written7818711
Ref: 24397818711
Ref: library/exceptions ChildProcessError7818962
Ref: 10917818962
Ref: library/exceptions ConnectionError7819113
Ref: e367819113
Ref: library/exceptions BrokenPipeError7819382
Ref: 10957819382
Ref: library/exceptions ConnectionAbortedError7819715
Ref: 10967819715
Ref: library/exceptions ConnectionRefusedError7819934
Ref: 10977819934
Ref: library/exceptions ConnectionResetError7820152
Ref: 10987820152
Ref: library/exceptions FileExistsError7820355
Ref: 10567820355
Ref: library/exceptions FileNotFoundError7820511
Ref: 42b7820511
Ref: library/exceptions InterruptedError7820677
Ref: db07820677
Ref: library/exceptions IsADirectoryError7821133
Ref: 10927821133
Ref: library/exceptions NotADirectoryError7821337
Ref: 10937821337
Ref: library/exceptions PermissionError7821759
Ref: d657821759
Ref: library/exceptions ProcessLookupError7822157
Ref: 10947822157
Ref: library/exceptions TimeoutError7822303
Ref: 8387822303
Ref: Exceções de sistema operacional-Footnote-17822678
Ref: Exceções de sistema operacional-Footnote-27822720
Node: Avisos7822762
Ref: library/exceptions warning-categories-as-exceptions7822883
Ref: 24477822883
Ref: library/exceptions warnings7822883
Ref: 24487822883
Ref: library/exceptions Warning7823052
Ref: 244a7823052
Ref: library/exceptions UserWarning7823120
Ref: 244b7823120
Ref: library/exceptions DeprecationWarning7823212
Ref: 1a57823212
Ref: library/exceptions PendingDeprecationWarning7823606
Ref: 8ce7823606
Ref: library/exceptions SyntaxWarning7824168
Ref: 4667824168
Ref: library/exceptions RuntimeWarning7824400
Ref: 1bd7824400
Ref: library/exceptions FutureWarning7824519
Ref: 4157824519
Ref: library/exceptions ImportWarning7824680
Ref: 4fa7824680
Ref: library/exceptions UnicodeWarning7824926
Ref: 146b7824926
Ref: library/exceptions EncodingWarning7825011
Ref: 1ec57825011
Ref: library/exceptions BytesWarning7825200
Ref: c3d7825200
Ref: library/exceptions ResourceWarning7825321
Ref: 2447825321
Ref: Avisos-Footnote-17825614
Ref: Avisos-Footnote-27825656
Ref: Avisos-Footnote-37825698
Node: Grupos de exceções7825740
Ref: library/exceptions exception-groups7825866
Ref: 244c7825866
Ref: library/exceptions lib-exception-groups7825866
Ref: 244d7825866
Ref: library/exceptions ExceptionGroup7826287
Ref: 1b67826287
Ref: library/exceptions BaseExceptionGroup7826330
Ref: 25f7826330
Ref: library/exceptions BaseExceptionGroup message7827631
Ref: 244e7827631
Ref: library/exceptions BaseExceptionGroup exceptions7827759
Ref: 244f7827759
Ref: library/exceptions BaseExceptionGroup subgroup7827917
Ref: 17b47827917
Ref: library/exceptions BaseExceptionGroup split7829407
Ref: 16707829407
Ref: library/exceptions BaseExceptionGroup derive7829642
Ref: 17b37829642
Node: Hierarquia das exceções7832753
Ref: library/exceptions exception-hierarchy7832864
Ref: 24507832864
Ref: library/text stringservices7835756
Ref: 23517835756
Node: Serviços de Processamento de Texto7835757
Ref: library/text doc7835925
Ref: 24517835925
Ref: library/text text-processing-services7835925
Ref: 24527835925
Ref: library/text textservices7835925
Ref: 23547835925
Ref: library/text translation-repo7835925
Ref: 24537835925
Node: string — Operações comuns de strings7836845
Ref: library/string doc7837010
Ref: 24557837010
Ref: library/string module-string7837010
Ref: d37837010
Ref: library/string string-common-string-operations7837010
Ref: 24567837010
Ref: string — Operações comuns de strings-Footnote-17837507
Node: Constantes de strings7837573
Ref: library/string string-constants7837717
Ref: 24577837717
Ref: library/string string ascii_letters7837823
Ref: 13067837823
Ref: library/string string ascii_lowercase7838021
Ref: 24587838021
Ref: library/string string ascii_uppercase7838179
Ref: 24597838179
Ref: library/string string digits7838337
Ref: 245a7838337
Ref: library/string string hexdigits7838397
Ref: 245b7838397
Ref: library/string string octdigits7838472
Ref: 245c7838472
Ref: library/string string punctuation7838533
Ref: 245d7838533
Ref: library/string string printable7838712
Ref: 166d7838712
Ref: library/string string whitespace7839183
Ref: 245e7839183
Ref: Constantes de strings-Footnote-17839480
Node: Formatação personalizada de strings7839526
Ref: library/string custom-string-formatting7839709
Ref: 245f7839709
Ref: library/string string-formatting7839709
Ref: 23537839709
Ref: library/string string Formatter7840219
Ref: eec7840219
Ref: library/string string Formatter format7840323
Ref: c1a7840323
Ref: library/string string Formatter vformat7840718
Ref: 24607840718
Ref: library/string string Formatter parse7841460
Ref: 24617841460
Ref: library/string string Formatter get_field7842261
Ref: 24627842261
Ref: library/string string Formatter get_value7842835
Ref: 24637842835
Ref: library/string string Formatter check_unused_args7844119
Ref: 24647844119
Ref: library/string string Formatter format_field7844799
Ref: 24657844799
Ref: library/string string Formatter convert_field7845038
Ref: 24667845038
Ref: Formatação personalizada de strings-Footnote-17845413
Ref: Formatação personalizada de strings-Footnote-27845455
Node: Sintaxe das strings de formato7845497
Ref: library/string format-string-syntax7845675
Ref: 24677845675
Ref: library/string formatstrings7845675
Ref: 13e27845675
Ref: library/string grammar-token-format-string-replacement_field7846522
Ref: 24687846522
Ref: library/string grammar-token-format-string-field_name7846644
Ref: 24697846644
Ref: library/string grammar-token-format-string-arg_name7846765
Ref: 246c7846765
Ref: library/string grammar-token-format-string-attribute_name7846840
Ref: 246d7846840
Ref: library/string grammar-token-format-string-element_index7846891
Ref: 246e7846891
Ref: library/string grammar-token-format-string-index_string7846966
Ref: 246f7846966
Ref: library/string grammar-token-format-string-conversion7847029
Ref: 246a7847029
Ref: library/string grammar-token-format-string-format_spec7847072
Ref: 246b7847072
Node: Minilinguagem de especificação de formato7851609
Ref: library/string format-specification-mini-language7851747
Ref: 24727851747
Ref: library/string formatspec7851747
Ref: 1e87851747
Ref: library/string grammar-token-format-spec-format_spec7852759
Ref: 24707852759
Ref: library/string grammar-token-format-spec-options7852893
Ref: 24737852893
Ref: library/string grammar-token-format-spec-fill7852988
Ref: 24787852988
Ref: library/string grammar-token-format-spec-align7853025
Ref: 24797853025
Ref: library/string grammar-token-format-spec-sign7853068
Ref: 247a7853068
Ref: library/string grammar-token-format-spec-width7853105
Ref: 24747853105
Ref: library/string grammar-token-format-spec-grouping7853146
Ref: 24757853146
Ref: library/string grammar-token-format-spec-precision7853177
Ref: 24767853177
Ref: library/string grammar-token-format-spec-type7853218
Ref: 24777853218
Ref: Minilinguagem de especificação de formato-Footnote-17868965
Ref: Minilinguagem de especificação de formato-Footnote-27869007
Ref: Minilinguagem de especificação de formato-Footnote-37869049
Node: Exemplos de formato7869091
Ref: library/string format-examples7869229
Ref: 247c7869229
Ref: library/string formatexamples7869229
Ref: 24717869229
Node: Strings template7874149
Ref: library/string id17874310
Ref: 247d7874310
Ref: library/string template-strings7874310
Ref: 236b7874310
Ref: library/string string Template7875961
Ref: 6877875961
Ref: library/string string Template substitute7876072
Ref: 247e7876072
Ref: library/string string Template safe_substitute7876579
Ref: 247f7876579
Ref: library/string string Template is_valid7877653
Ref: 6867877653
Ref: library/string string Template get_identifiers7877899
Ref: 6857877899
Ref: library/string string Template template7878253
Ref: 24807878253
Ref: Strings template-Footnote-17882466
Ref: Strings template-Footnote-27882508
Node: Funções auxiliares7882560
Ref: library/string helper-functions7882682
Ref: 24817882682
Ref: library/string string capwords7882739
Ref: 23667882739
Node: re — Operações com expressões regulares7883299
Ref: library/re doc7883513
Ref: 24827883513
Ref: library/re module-re7883513
Ref: b97883513
Ref: library/re re-regular-expression-operations7883513
Ref: 24837883513
Ref: library/re translation-repo7883513
Ref: 24847883513
Ref: re — Operações com expressões regulares-Footnote-17886534
Ref: re — Operações com expressões regulares-Footnote-27886594
Node: Sintaxe de expressão regular7886634
Ref: library/re re-syntax7886773
Ref: 7247886773
Ref: library/re regular-expression-syntax7886773
Ref: 24857886773
Ref: library/re re-conditional-expression7909881
Ref: 18b07909881
Ref: library/re re-special-sequences7910615
Ref: 24927910615
Ref: Sintaxe de expressão regular-Footnote-17917934
Ref: Sintaxe de expressão regular-Footnote-27917976
Node: Conteúdo do módulo7918048
Ref: library/re contents-of-module-re7918222
Ref: 24917918222
Ref: library/re module-contents7918222
Ref: 24937918222
Node: Sinalizadores7918613
Ref: library/re flags7918704
Ref: 24947918704
Ref: library/re re RegexFlag7918900
Ref: 62d7918900
Ref: library/re re A7919098
Ref: 248a7919098
Ref: library/re re ASCII7919113
Ref: 62c7919113
Ref: library/re re DEBUG7919918
Ref: 24957919918
Ref: library/re re I7920059
Ref: 248b7920059
Ref: library/re re IGNORECASE7920074
Ref: 181a7920074
Ref: library/re re L7921244
Ref: 248c7921244
Ref: library/re re LOCALE7921259
Ref: b827921259
Ref: library/re re M7922425
Ref: 248d7922425
Ref: library/re re MULTILINE7922440
Ref: 24897922440
Ref: library/re re NOFLAG7923004
Ref: 24967923004
Ref: library/re re S7923472
Ref: 248e7923472
Ref: library/re re DOTALL7923487
Ref: 24887923487
Ref: library/re re U7923778
Ref: 248f7923778
Ref: library/re re UNICODE7923793
Ref: b837923793
Ref: library/re re X7924150
Ref: 24907924150
Ref: library/re re VERBOSE7924165
Ref: 24977924165
Node: Funções<2>7925358
Ref: library/re functions7925471
Ref: 24987925471
Ref: library/re re compile7925506
Ref: bee7925506
Ref: library/re re search7926758
Ref: 126d7926758
Ref: library/re re match7927436
Ref: 126e7927436
Ref: library/re re fullmatch7928381
Ref: fb97928381
Ref: library/re re split7928987
Ref: 2a27928987
Ref: library/re re findall7931585
Ref: 10607931585
Ref: library/re re finditer7932998
Ref: 15427932998
Ref: library/re re sub7933777
Ref: 2a37933777
Ref: library/re re subn7937975
Ref: 2a47937975
Ref: library/re re escape7938417
Ref: c237938417
Ref: library/re re purge7939956
Ref: 249c7939956
Node: Exceções<3>7940026
Ref: library/re exceptions7940117
Ref: 249d7940117
Ref: library/re re PatternError7940154
Ref: 23e7940154
Ref: library/re re PatternError msg7940673
Ref: e797940673
Ref: library/re re PatternError pattern7940743
Ref: e7a7940743
Ref: library/re re PatternError pos7940815
Ref: e7b7940815
Ref: library/re re PatternError lineno7940944
Ref: e7c7940944
Ref: library/re re PatternError colno7941036
Ref: e7d7941036
Node: Objetos expressão regular7941382
Ref: library/re re-objects7941551
Ref: fbb7941551
Ref: library/re regular-expression-objects7941551
Ref: 249e7941551
Ref: library/re re Pattern7941621
Ref: 18f27941621
Ref: library/re re Pattern search7941904
Ref: 249a7941904
Ref: library/re re Pattern match7943444
Ref: 24997943444
Ref: library/re re Pattern fullmatch7944383
Ref: fba7944383
Ref: library/re re Pattern split7945263
Ref: 249f7945263
Ref: library/re re Pattern findall7945388
Ref: 24a07945388
Ref: library/re re Pattern finditer7945666
Ref: 24a17945666
Ref: library/re re Pattern sub7945946
Ref: 24a27945946
Ref: library/re re Pattern subn7946070
Ref: 24a37946070
Ref: library/re re Pattern flags7946196
Ref: 24a47946196
Ref: library/re re Pattern groups7946540
Ref: 24a57946540
Ref: library/re re Pattern groupindex7946619
Ref: 24a67946619
Ref: library/re re Pattern pattern7946859
Ref: 24a77946859
Node: Objetos correspondência7947132
Ref: library/re id37947311
Ref: 24a87947311
Ref: library/re match-objects7947311
Ref: fbc7947311
Ref: library/re re Match7947719
Ref: ce87947719
Ref: library/re re Match expand7948014
Ref: 24a97948014
Ref: library/re re Match group7948672
Ref: 10617948672
Ref: library/re re Match __getitem__7951132
Ref: 24aa7951132
Ref: library/re re Match groups7951883
Ref: 10627951883
Ref: library/re re Match groupdict7952782
Ref: 24ab7952782
Ref: library/re re Match start7953277
Ref: 24ac7953277
Ref: library/re re Match end7953312
Ref: 24ad7953312
Ref: library/re re Match span7954437
Ref: 24ae7954437
Ref: library/re re Match pos7954746
Ref: 24af7954746
Ref: library/re re Match endpos7955027
Ref: 24b07955027
Ref: library/re re Match lastindex7955294
Ref: 24b17955294
Ref: library/re re Match lastgroup7955698
Ref: 24b27955698
Ref: library/re re Match re7955873
Ref: 24b37955873
Ref: library/re re Match string7956058
Ref: 24b47956058
Node: Exemplos de expressão regular7956319
Ref: library/re re-examples7956463
Ref: 129f7956463
Ref: library/re regular-expression-examples7956463
Ref: 24b57956463
Node: Verificando por um par7956862
Ref: library/re checking-for-a-pair7956975
Ref: 24b67956975
Node: Simulando scanf7959149
Ref: library/re simulating-scanf7959286
Ref: 24b77959286
Node: search vs match7961386
Ref: library/re id47961530
Ref: 24b87961530
Ref: library/re search-vs-match7961530
Ref: 249b7961530
Node: Criando uma lista telefônica7963157
Ref: library/re making-a-phonebook7963302
Ref: 24b97963302
Node: Mastigando texto7965628
Ref: library/re text-munging7965789
Ref: 24ba7965789
Node: Encontrando todos os advérbios7966669
Ref: library/re finding-all-adverbs7966850
Ref: 24bb7966850
Node: Encontrando todos os advérbios e suas posições7967384
Ref: library/re finding-all-adverbs-and-their-positions7967574
Ref: 24bc7967574
Node: Notação de string bruta7968358
Ref: library/re raw-string-notation7968542
Ref: 24bd7968542
Node: Escrevendo um tokenizador7969588
Ref: library/re writing-a-tokenizer7969714
Ref: 24be7969714
Ref: library/re frie097973156
Ref: 24867973156
Ref: Escrevendo um tokenizador-Footnote-17973442
Node: difflib — Helpers for computing deltas7973497
Ref: library/difflib doc7973727
Ref: 24bf7973727
Ref: library/difflib difflib-helpers-for-computing-deltas7973727
Ref: 24c07973727
Ref: library/difflib module-difflib7973727
Ref: 377973727
Ref: library/difflib translation-repo7973727
Ref: 24c17973727
Ref: library/difflib difflib Differ7976240
Ref: 24c27976240
Ref: library/difflib difflib HtmlDiff7977423
Ref: 16447977423
Ref: library/difflib difflib HtmlDiff __init__7977794
Ref: 24c37977794
Ref: library/difflib difflib HtmlDiff make_file7978608
Ref: e1b7978608
Ref: library/difflib difflib HtmlDiff make_table7980293
Ref: 24c57980293
Ref: library/difflib difflib context_diff7980755
Ref: 24c67980755
Ref: library/difflib difflib get_close_matches7982801
Ref: 24c97982801
Ref: library/difflib difflib ndiff7983965
Ref: 24c47983965
Ref: library/difflib difflib restore7985530
Ref: 24cc7985530
Ref: library/difflib difflib unified_diff7986273
Ref: 24ce7986273
Ref: library/difflib difflib diff_bytes7988198
Ref: e1c7988198
Ref: library/difflib difflib IS_LINE_JUNK7989097
Ref: 24ca7989097
Ref: library/difflib difflib IS_CHARACTER_JUNK7989399
Ref: 24cb7989399
Ref: difflib — Helpers for computing deltas-Footnote-17990074
Ref: difflib — Helpers for computing deltas-Footnote-27990141
Node: SequenceMatcher Objects7990221
Ref: library/difflib sequence-matcher7990354
Ref: 24cf7990354
Ref: library/difflib sequencematcher-objects7990354
Ref: 24d07990354
Ref: library/difflib difflib SequenceMatcher7990481
Ref: 104f7990481
Ref: library/difflib difflib SequenceMatcher set_seqs7992024
Ref: 24d17992024
Ref: library/difflib difflib SequenceMatcher set_seq17992444
Ref: 24d37992444
Ref: library/difflib difflib SequenceMatcher set_seq27992588
Ref: 24d27992588
Ref: library/difflib difflib SequenceMatcher find_longest_match7992732
Ref: 1ad87992732
Ref: library/difflib difflib SequenceMatcher get_matching_blocks7994891
Ref: 24d47994891
Ref: library/difflib difflib SequenceMatcher get_opcodes7995809
Ref: 24d57995809
Ref: library/difflib difflib SequenceMatcher get_grouped_opcodes7997801
Ref: 24d67997801
Ref: library/difflib difflib SequenceMatcher ratio7998235
Ref: 24d77998235
Ref: library/difflib difflib SequenceMatcher quick_ratio7999259
Ref: 24d87999259
Ref: library/difflib difflib SequenceMatcher real_quick_ratio7999380
Ref: 24d97999380
Node: SequenceMatcher Examples7999913
Ref: library/difflib id18000069
Ref: 24da8000069
Ref: library/difflib sequencematcher-examples8000069
Ref: 24db8000069
Ref: SequenceMatcher Examples-Footnote-18001816
Node: Differ Objects8001893
Ref: library/difflib differ-objects8002040
Ref: 24dc8002040
Ref: library/difflib id28002040
Ref: 24dd8002040
Ref: library/difflib difflib Differ compare8003447
Ref: 24cd8003447
Node: Differ Example8003972
Ref: library/difflib differ-example8004130
Ref: 24de8004130
Ref: library/difflib differ-examples8004130
Ref: 24df8004130
Node: A command-line interface to difflib8006395
Ref: library/difflib a-command-line-interface-to-difflib8006552
Ref: 24e08006552
Ref: library/difflib difflib-interface8006552
Ref: 24c88006552
Node: ndiff example8009191
Ref: library/difflib ndiff-example8009325
Ref: 24e18009325
Node: textwrap — Quebra automática e preenchimento de texto8012975
Ref: library/textwrap doc8013202
Ref: 24e28013202
Ref: library/textwrap module-textwrap8013202
Ref: ec8013202
Ref: library/textwrap textwrap-text-wrapping-and-filling8013202
Ref: 24e38013202
Ref: library/textwrap translation-repo8013202
Ref: 24e48013202
Ref: library/textwrap textwrap wrap8013824
Ref: 150f8013824
Ref: library/textwrap textwrap fill8014601
Ref: 150e8014601
Ref: library/textwrap textwrap shorten8015242
Ref: 10068015242
Ref: library/textwrap textwrap dedent8016581
Ref: 24ea8016581
Ref: library/textwrap textwrap indent8017594
Ref: 2768017594
Ref: library/textwrap textwrap TextWrapper8019078
Ref: 10038019078
Ref: library/textwrap textwrap TextWrapper width8019784
Ref: 24ec8019784
Ref: library/textwrap textwrap TextWrapper expand_tabs8020131
Ref: 24e78020131
Ref: library/textwrap textwrap TextWrapper tabsize8020369
Ref: 24e68020369
Ref: library/textwrap textwrap TextWrapper replace_whitespace8020703
Ref: 24e98020703
Ref: library/textwrap textwrap TextWrapper drop_whitespace8021803
Ref: 24e88021803
Ref: library/textwrap textwrap TextWrapper initial_indent8022276
Ref: 24ed8022276
Ref: library/textwrap textwrap TextWrapper subsequent_indent8022523
Ref: 24ee8022523
Ref: library/textwrap textwrap TextWrapper fix_sentence_endings8022765
Ref: 24ef8022765
Ref: library/textwrap textwrap TextWrapper break_long_words8024030
Ref: 24eb8024030
Ref: library/textwrap textwrap TextWrapper break_on_hyphens8024540
Ref: 24f08024540
Ref: library/textwrap textwrap TextWrapper max_lines8025171
Ref: 10048025171
Ref: library/textwrap textwrap TextWrapper placeholder8025421
Ref: 10058025421
Ref: library/textwrap textwrap TextWrapper wrap8025758
Ref: 24e58025758
Ref: library/textwrap textwrap TextWrapper fill8026214
Ref: 24f18026214
Ref: textwrap — Quebra automática e preenchimento de texto-Footnote-18026399
Node: unicodedata — Banco de dados de Unicode8026467
Ref: library/unicodedata doc8026705
Ref: 24f28026705
Ref: library/unicodedata module-unicodedata8026705
Ref: 1058026705
Ref: library/unicodedata translation-repo8026705
Ref: 24f38026705
Ref: library/unicodedata unicodedata-unicode-database8026705
Ref: 24f48026705
Ref: library/unicodedata unicodedata lookup8027359
Ref: 10b18027359
Ref: library/unicodedata unicodedata name8028033
Ref: 24f58028033
Ref: library/unicodedata unicodedata decimal8028452
Ref: 24f68028452
Ref: library/unicodedata unicodedata digit8028884
Ref: 24f78028884
Ref: library/unicodedata unicodedata numeric8029220
Ref: 12a48029220
Ref: library/unicodedata unicodedata category8029540
Ref: 24f88029540
Ref: library/unicodedata unicodedata bidirectional8029940
Ref: 24f98029940
Ref: library/unicodedata unicodedata combining8030399
Ref: 24fa8030399
Ref: library/unicodedata unicodedata east_asian_width8030704
Ref: 24fb8030704
Ref: library/unicodedata unicodedata mirrored8030928
Ref: 24fc8030928
Ref: library/unicodedata unicodedata decomposition8031258
Ref: 24fd8031258
Ref: library/unicodedata unicodedata normalize8031556
Ref: 6d58031556
Ref: library/unicodedata unicodedata is_normalized8033428
Ref: a518033428
Ref: library/unicodedata unicodedata unidata_version8033742
Ref: 24fe8033742
Ref: library/unicodedata unicodedata ucd_3_2_08033844
Ref: 147b8033844
Ref: unicodedata — Banco de dados de Unicode-Footnote-18034143
Ref: unicodedata — Banco de dados de Unicode-Footnote-28034193
Ref: unicodedata — Banco de dados de Unicode-Footnote-38034239
Ref: unicodedata — Banco de dados de Unicode-Footnote-48034311
Ref: unicodedata — Banco de dados de Unicode-Footnote-58034386
Ref: unicodedata — Banco de dados de Unicode-Footnote-68034469
Ref: unicodedata — Banco de dados de Unicode-Footnote-78034546
Ref: unicodedata — Banco de dados de Unicode-Footnote-88034638
Node: stringprep — Preparação de string para internet8034696
Ref: library/stringprep doc8034920
Ref: 24ff8034920
Ref: library/stringprep module-stringprep8034920
Ref: d48034920
Ref: library/stringprep stringprep-internet-string-preparation8034920
Ref: 25008034920
Ref: library/stringprep translation-repo8034920
Ref: 25018034920
Ref: library/stringprep stringprep in_table_a18036994
Ref: 25028036994
Ref: library/stringprep stringprep in_table_b18037143
Ref: 25038037143
Ref: library/stringprep stringprep map_table_b28037270
Ref: 25048037270
Ref: library/stringprep stringprep map_table_b38037444
Ref: 25058037444
Ref: library/stringprep stringprep in_table_c118037641
Ref: 25068037641
Ref: library/stringprep stringprep in_table_c128037771
Ref: 25078037771
Ref: library/stringprep stringprep in_table_c11_c128037906
Ref: 25088037906
Ref: library/stringprep stringprep in_table_c218038057
Ref: 25098038057
Ref: library/stringprep stringprep in_table_c228038188
Ref: 250a8038188
Ref: library/stringprep stringprep in_table_c21_c228038324
Ref: 250b8038324
Ref: library/stringprep stringprep in_table_c38038476
Ref: 250c8038476
Ref: library/stringprep stringprep in_table_c48038582
Ref: 250d8038582
Ref: library/stringprep stringprep in_table_c58038715
Ref: 250e8038715
Ref: library/stringprep stringprep in_table_c68038830
Ref: 250f8038830
Ref: library/stringprep stringprep in_table_c78038961
Ref: 25108038961
Ref: library/stringprep stringprep in_table_c88039109
Ref: 25118039109
Ref: library/stringprep stringprep in_table_c98039268
Ref: 25128039268
Ref: library/stringprep stringprep in_table_d18039380
Ref: 25138039380
Ref: library/stringprep stringprep in_table_d28039539
Ref: 25148039539
Ref: stringprep — Preparação de string para internet-Footnote-18039722
Ref: stringprep — Preparação de string para internet-Footnote-28039792
Ref: stringprep — Preparação de string para internet-Footnote-38039851
Node: readline — Interface para o GNU readline8039910
Ref: library/readline doc8040154
Ref: 25158040154
Ref: library/readline module-readline8040154
Ref: ba8040154
Ref: library/readline readline-gnu-readline-interface8040154
Ref: 25168040154
Ref: library/readline translation-repo8040154
Ref: 25178040154
Ref: library/readline readline backend8042494
Ref: 17a38042494
Ref: readline — Interface para o GNU readline-Footnote-18042870
Node: Arquivo init8042955
Ref: library/readline init-file8043070
Ref: 25188043070
Ref: library/readline readline parse_and_bind8043206
Ref: 25198043206
Ref: library/readline readline read_init_file8043386
Ref: 251a8043386
Node: Buffer de linha8043632
Ref: library/readline line-buffer8043777
Ref: 251b8043777
Ref: library/readline readline get_line_buffer8043877
Ref: 251c8043877
Ref: library/readline readline insert_text8044025
Ref: 251d8044025
Ref: library/readline readline redisplay8044234
Ref: 150d8044234
Node: Arquivo de histórico8044430
Ref: library/readline history-file8044582
Ref: 251e8044582
Ref: library/readline readline read_history_file8044699
Ref: 251f8044699
Ref: library/readline readline write_history_file8044956
Ref: 25208044956
Ref: library/readline readline append_history_file8045248
Ref: e7f8045248
Ref: library/readline readline get_history_length8045674
Ref: 25218045674
Ref: library/readline readline set_history_length8045719
Ref: 16e18045719
Node: Lista de histórico8046118
Ref: library/readline history-list8046281
Ref: 25228046281
Ref: library/readline readline clear_history8046403
Ref: 25238046403
Ref: library/readline readline get_current_history_length8046648
Ref: 150c8046648
Ref: library/readline readline get_history_item8046918
Ref: 150b8046918
Ref: library/readline readline remove_history_item8047138
Ref: 25248047138
Ref: library/readline readline replace_history_item8047376
Ref: 25258047376
Ref: library/readline readline add_history8047630
Ref: 25268047630
Ref: library/readline readline set_auto_history8047830
Ref: cea8047830
Node: Ganchos de inicialização8048309
Ref: library/readline startup-hooks8048466
Ref: 25278048466
Ref: library/readline readline set_startup_hook8048535
Ref: 25288048535
Ref: library/readline readline set_pre_input_hook8048966
Ref: 25298048966
Node: Autocomplemento8049567
Ref: library/readline completion8049712
Ref: 252a8049712
Ref: library/readline readline-completion8049712
Ref: 252b8049712
Ref: library/readline readline set_completer8050348
Ref: 252c8050348
Ref: library/readline readline get_completer8051229
Ref: 252d8051229
Ref: library/readline readline get_completion_type8051392
Ref: 252e8051392
Ref: library/readline readline get_begidx8051614
Ref: 1a308051614
Ref: library/readline readline get_endidx8051651
Ref: 1a318051651
Ref: library/readline readline set_completer_delims8052152
Ref: 17a68052152
Ref: library/readline readline get_completer_delims8052205
Ref: 252f8052205
Ref: library/readline readline set_completion_display_matches_hook8052559
Ref: 25308052559
Node: Exemplo8053239
Ref: library/readline example8053349
Ref: 25318053349
Ref: library/readline readline-example8053349
Ref: 25328053349
Node: rlcompleter — Função de autocomplemento para GNU readline8056309
Ref: library/rlcompleter doc8056493
Ref: 25348056493
Ref: library/rlcompleter module-rlcompleter8056493
Ref: bd8056493
Ref: library/rlcompleter rlcompleter-completion-function-for-gnu-readline8056493
Ref: 25358056493
Ref: library/rlcompleter translation-repo8056493
Ref: 25368056493
Ref: library/rlcompleter completer-objects8058087
Ref: 25388058087
Ref: library/rlcompleter rlcompleter Completer8058087
Ref: 1ab88058087
Ref: library/rlcompleter rlcompleter Completer complete8058174
Ref: 25378058174
Ref: rlcompleter — Função de autocomplemento para GNU readline-Footnote-18059305
Node: Serviços de Dados Binários8059376
Ref: library/binary doc8059538
Ref: 25398059538
Ref: library/binary binary-data-services8059538
Ref: 253a8059538
Ref: library/binary binaryservices8059538
Ref: 24548059538
Ref: library/binary translation-repo8059538
Ref: 253b8059538
Node: struct — Interpreta bytes como dados binários empacotados8060418
Ref: library/struct doc8060594
Ref: 253c8060594
Ref: library/struct struct-interpret-bytes-as-packed-binary-data8060594
Ref: 253d8060594
Ref: library/struct module-struct8060734
Ref: d58060734
Ref: struct — Interpreta bytes como dados binários empacotados-Footnote-18062637
Node: Funções e exceções8062703
Ref: library/struct functions-and-exceptions8062845
Ref: 25408062845
Ref: library/struct struct error8062959
Ref: 13688062959
Ref: library/struct struct pack8063098
Ref: 12b88063098
Ref: library/struct struct pack_into8063340
Ref: 25418063340
Ref: library/struct struct unpack8063639
Ref: 18db8063639
Ref: library/struct struct unpack_from8064006
Ref: 25428064006
Ref: library/struct struct iter_unpack8064402
Ref: ff38064402
Ref: library/struct struct calcsize8064929
Ref: 1b3b8064929
Node: Format Strings8065128
Ref: library/struct format-strings8065291
Ref: 25438065291
Ref: library/struct struct-format-strings8065291
Ref: 253e8065291
Node: Byte Order Size and Alignment8065933
Ref: library/struct byte-order-size-and-alignment8066043
Ref: 25458066043
Ref: library/struct struct-alignment8066043
Ref: 253f8066043
Ref: Byte Order Size and Alignment-Footnote-18069779
Node: Caracteres Formatados8069833
Ref: library/struct format-characters8069963
Ref: 25448069963
Ref: library/struct id18069963
Ref: 25478069963
Ref: Caracteres Formatados-Footnote-18081493
Ref: Caracteres Formatados-Footnote-28081554
Node: Exemplos<2>8081630
Ref: library/struct examples8081722
Ref: 25488081722
Ref: library/struct struct-examples8081722
Ref: 25468081722
Node: Applications8084237
Ref: library/struct applications8084388
Ref: 25498084388
Ref: library/struct id28084388
Ref: 254a8084388
Node: Native Formats8084889
Ref: library/struct native-formats8084977
Ref: 254d8084977
Ref: library/struct struct-native-formats8084977
Ref: 254b8084977
Node: Standard Formats8086125
Ref: library/struct standard-formats8086213
Ref: 254e8086213
Ref: library/struct struct-standard-formats8086213
Ref: 254c8086213
Node: Classes<3>8087656
Ref: library/struct classes8087784
Ref: 254f8087784
Ref: library/struct struct-objects8087784
Ref: 25508087784
Ref: library/struct struct Struct8087880
Ref: 15a08087880
Ref: library/struct struct Struct pack8088577
Ref: 25518088577
Ref: library/struct struct Struct pack_into8088760
Ref: 25538088760
Ref: library/struct struct Struct unpack8088919
Ref: 25548088919
Ref: library/struct struct Struct unpack_from8089120
Ref: 25558089120
Ref: library/struct struct Struct iter_unpack8089379
Ref: ff48089379
Ref: library/struct struct Struct format8089638
Ref: c208089638
Ref: library/struct struct Struct size8089853
Ref: 25528089853
Node: codecs — Codec registry and base classes8090189
Ref: library/codecs doc8090365
Ref: 25568090365
Ref: library/codecs codecs-codec-registry-and-base-classes8090365
Ref: 25578090365
Ref: library/codecs module-codecs8090365
Ref: 1b8090365
Ref: library/codecs translation-repo8090365
Ref: 25588090365
Ref: library/codecs codecs encode8091259
Ref: f338091259
Ref: library/codecs codecs decode8091754
Ref: f348091754
Ref: library/codecs codecs charmap_build8092249
Ref: 255a8092249
Ref: library/codecs codecs lookup8092742
Ref: 96a8092742
Ref: library/codecs codecs CodecInfo8093240
Ref: 17ee8093240
Ref: library/codecs codecs CodecInfo name8093537
Ref: 255b8093537
Ref: library/codecs codecs CodecInfo encode8093599
Ref: 255c8093599
Ref: library/codecs codecs CodecInfo decode8093625
Ref: 255d8093625
Ref: library/codecs codecs CodecInfo incrementalencoder8094002
Ref: 25618094002
Ref: library/codecs codecs CodecInfo incrementaldecoder8094040
Ref: 25628094040
Ref: library/codecs codecs CodecInfo streamwriter8094378
Ref: 25658094378
Ref: library/codecs codecs CodecInfo streamreader8094410
Ref: 25668094410
Ref: library/codecs codecs getencoder8094862
Ref: 25698094862
Ref: library/codecs codecs getdecoder8095074
Ref: 256a8095074
Ref: library/codecs codecs getincrementalencoder8095286
Ref: 256b8095286
Ref: library/codecs codecs getincrementaldecoder8095592
Ref: 256c8095592
Ref: library/codecs codecs getreader8095898
Ref: 256d8095898
Ref: library/codecs codecs getwriter8096144
Ref: 256e8096144
Ref: library/codecs codecs register8096473
Ref: 256f8096473
Ref: library/codecs codecs unregister8096949
Ref: 7ea8096949
Ref: library/codecs codecs open8097452
Ref: 7408097452
Ref: library/codecs codecs EncodedFile8098820
Ref: 25718098820
Ref: library/codecs codecs iterencode8099677
Ref: 25728099677
Ref: library/codecs codecs iterdecode8100262
Ref: 25738100262
Ref: library/codecs codecs readbuffer_encode8100921
Ref: 25748100921
Ref: library/codecs codecs BOM8101422
Ref: 25758101422
Ref: library/codecs codecs BOM_BE8101443
Ref: 25768101443
Ref: library/codecs codecs BOM_LE8101467
Ref: 25778101467
Ref: library/codecs codecs BOM_UTF88101491
Ref: 25788101491
Ref: library/codecs codecs BOM_UTF168101517
Ref: 25798101517
Ref: library/codecs codecs BOM_UTF16_BE8101544
Ref: 257a8101544
Ref: library/codecs codecs BOM_UTF16_LE8101574
Ref: 257b8101574
Ref: library/codecs codecs BOM_UTF328101604
Ref: 257c8101604
Ref: library/codecs codecs BOM_UTF32_BE8101631
Ref: 257d8101631
Ref: library/codecs codecs BOM_UTF32_LE8101661
Ref: 257e8101661
Ref: codecs — Codec registry and base classes-Footnote-18102844
Node: Codec Base Classes8102910
Ref: library/codecs codec-base-classes8103037
Ref: 25598103037
Ref: library/codecs id18103037
Ref: 257f8103037
Ref: library/codecs surrogateescape8103630
Ref: 25808103630
Node: Error Handlers8103767
Ref: library/codecs error-handlers8103876
Ref: 18fa8103876
Ref: library/codecs id28103876
Ref: 25818103876
Ref: library/codecs codecs register_error8108820
Ref: 14e38108820
Ref: library/codecs codecs lookup_error8110362
Ref: 14e48110362
Ref: library/codecs codecs strict_errors8110657
Ref: 25828110657
Ref: library/codecs codecs ignore_errors8110831
Ref: 25838110831
Ref: library/codecs codecs replace_errors8111028
Ref: 25848111028
Ref: library/codecs codecs backslashreplace_errors8111279
Ref: 25858111279
Ref: library/codecs codecs xmlcharrefreplace_errors8111743
Ref: 25868111743
Ref: library/codecs codecs namereplace_errors8112107
Ref: 25878112107
Ref: Error Handlers-Footnote-18112675
Node: Stateless Encoding and Decoding8112717
Ref: library/codecs codec-objects8112868
Ref: 25608112868
Ref: library/codecs stateless-encoding-and-decoding8112868
Ref: 25888112868
Ref: library/codecs codecs Codec8113086
Ref: 25898113086
Ref: library/codecs codecs Codec encode8113112
Ref: 255e8113112
Ref: library/codecs codecs Codec decode8113933
Ref: 255f8113933
Node: Incremental Encoding and Decoding8114964
Ref: library/codecs incremental-encoding-and-decoding8115129
Ref: 258a8115129
Node: IncrementalEncoder Objects8115969
Ref: library/codecs incremental-encoder-objects8116100
Ref: 258d8116100
Ref: library/codecs incrementalencoder-objects8116100
Ref: 258e8116100
Ref: library/codecs codecs IncrementalEncoder8116399
Ref: 25638116399
Ref: library/codecs codecs IncrementalEncoder encode8117185
Ref: 258b8117185
Ref: library/codecs codecs IncrementalEncoder reset8117483
Ref: 258f8117483
Ref: library/codecs codecs IncrementalEncoder getstate8117753
Ref: 25908117753
Ref: library/codecs codecs IncrementalEncoder setstate8118167
Ref: 25918118167
Node: IncrementalDecoder Objects8118335
Ref: library/codecs incremental-decoder-objects8118466
Ref: 25928118466
Ref: library/codecs incrementaldecoder-objects8118466
Ref: 25938118466
Ref: library/codecs codecs IncrementalDecoder8118765
Ref: 25648118765
Ref: library/codecs codecs IncrementalDecoder decode8119551
Ref: 258c8119551
Ref: library/codecs codecs IncrementalDecoder reset8120185
Ref: 25948120185
Ref: library/codecs codecs IncrementalDecoder getstate8120264
Ref: 25958120264
Ref: library/codecs codecs IncrementalDecoder setstate8121212
Ref: 25968121212
Node: Stream Encoding and Decoding8121379
Ref: library/codecs stream-encoding-and-decoding8121504
Ref: 25978121504
Node: StreamWriter Objects8121931
Ref: library/codecs stream-writer-objects8122045
Ref: 25988122045
Ref: library/codecs streamwriter-objects8122045
Ref: 25998122045
Ref: library/codecs codecs StreamWriter8122307
Ref: 25678122307
Ref: library/codecs codecs StreamWriter write8123265
Ref: 259a8123265
Ref: library/codecs codecs StreamWriter writelines8123364
Ref: 259b8123364
Ref: library/codecs codecs StreamWriter reset8123671
Ref: 259c8123671
Node: StreamReader Objects8124127
Ref: library/codecs stream-reader-objects8124276
Ref: 259d8124276
Ref: library/codecs streamreader-objects8124276
Ref: 259e8124276
Ref: library/codecs codecs StreamReader8124538
Ref: 25688124538
Ref: library/codecs codecs StreamReader read8125610
Ref: 259f8125610
Ref: library/codecs codecs StreamReader readline8126869
Ref: 25a08126869
Ref: library/codecs codecs StreamReader readlines8127221
Ref: 25a18127221
Ref: library/codecs codecs StreamReader reset8127673
Ref: 25a28127673
Node: StreamReaderWriter Objects8128077
Ref: library/codecs stream-reader-writer8128227
Ref: 25a38128227
Ref: library/codecs streamreaderwriter-objects8128227
Ref: 25a48128227
Ref: library/codecs codecs StreamReaderWriter8128562
Ref: 25708128562
Node: StreamRecoder Objects8129218
Ref: library/codecs stream-recoder-objects8129339
Ref: 25a58129339
Ref: library/codecs streamrecoder-objects8129339
Ref: 25a68129339
Ref: library/codecs codecs StreamRecoder8129689
Ref: 1b688129689
Node: Encodings and Unicode8130844
Ref: library/codecs encodings-and-unicode8130998
Ref: 25a78130998
Ref: library/codecs encodings-overview8130998
Ref: 25a88130998
Ref: Encodings and Unicode-Footnote-18137924
Node: Standard Encodings8137966
Ref: library/codecs id38138127
Ref: 25a98138127
Ref: library/codecs standard-encodings8138127
Ref: de18138127
Ref: Standard Encodings-Footnote-18160500
Node: Python Specific Encodings8160578
Ref: library/codecs python-specific-encodings8160749
Ref: 25aa8160749
Node: Text Encodings8161368
Ref: library/codecs text-encodings8161470
Ref: 25ab8161470
Ref: Text Encodings-Footnote-18165025
Ref: Text Encodings-Footnote-28165084
Node: Binary Transforms8165143
Ref: library/codecs binary-transforms8165280
Ref: f358165280
Ref: library/codecs id48165280
Ref: 25ac8165280
Ref: Binary Transforms-Footnote-18168973
Node: Standalone Codec Functions8169114
Ref: library/codecs id68169252
Ref: 25b28169252
Ref: library/codecs standalone-codec-functions8169252
Ref: 25b38169252
Ref: library/codecs codecs codecs escape_encode8169664
Ref: 25b48169664
Ref: library/codecs codecs codecs escape_decode8170036
Ref: 25b58170036
Node: Text Transforms8170359
Ref: library/codecs id78170471
Ref: 25b68170471
Ref: library/codecs text-transforms8170471
Ref: f368170471
Node: encodings — Encodings package8171227
Ref: library/codecs encodings-encodings-package8171445
Ref: 25b78171445
Ref: library/codecs module-encodings8171445
Ref: 518171445
Ref: library/codecs encodings normalize_encoding8171583
Ref: 7fe8171583
Ref: library/codecs encodings search_function8172159
Ref: 25b88172159
Ref: library/codecs encodings CodecRegistryError8172903
Ref: 25b98172903
Node: encodings idna — Internationalized Domain Names in Applications8173002
Ref: library/codecs encodings-idna-internationalized-domain-names-in-applications8173235
Ref: 25ba8173235
Ref: library/codecs module-encodings idna8173235
Ref: 528173235
Ref: library/codecs encodings idna nameprep8175850
Ref: 25bb8175850
Ref: library/codecs encodings idna ToASCII8176038
Ref: 25bc8176038
Ref: library/codecs encodings idna ToUnicode8176198
Ref: 25bd8176198
Ref: encodings idna — Internationalized Domain Names in Applications-Footnote-18176345
Ref: encodings idna — Internationalized Domain Names in Applications-Footnote-28176404
Ref: encodings idna — Internationalized Domain Names in Applications-Footnote-38176463
Ref: encodings idna — Internationalized Domain Names in Applications-Footnote-48176522
Ref: encodings idna — Internationalized Domain Names in Applications-Footnote-58176581
Ref: encodings idna — Internationalized Domain Names in Applications-Footnote-68176620
Ref: encodings idna — Internationalized Domain Names in Applications-Footnote-78176691
Ref: encodings idna — Internationalized Domain Names in Applications-Footnote-88176750
Node: encodings mbcs — Windows ANSI codepage8176809
Ref: library/codecs encodings-mbcs-windows-ansi-codepage8177065
Ref: 25be8177065
Ref: library/codecs module-encodings mbcs8177065
Ref: 538177065
Node: encodings utf_8_sig — UTF-8 codec with BOM signature8177463
Ref: library/codecs encodings-utf-8-sig-utf-8-codec-with-bom-signature8177645
Ref: 25bf8177645
Ref: library/codecs module-encodings utf_8_sig8177645
Ref: 548177645
Node: Tipos de Dados8178090
Ref: library/datatypes doc8178251
Ref: 25c08178251
Ref: library/datatypes data-types8178251
Ref: 25c18178251
Ref: library/datatypes datatypes8178251
Ref: 25c28178251
Ref: library/datatypes translation-repo8178251
Ref: 25c38178251
Node: datetime — Tipos básicos de data e hora8179783
Ref: library/datetime doc8179929
Ref: 25c48179929
Ref: library/datetime datetime-basic-date-and-time-types8179929
Ref: 25c58179929
Ref: library/datetime module-datetime8179929
Ref: 308179929
Ref: datetime — Tipos básicos de data e hora-Footnote-18181384
Ref: datetime — Tipos básicos de data e hora-Footnote-28181452
Ref: datetime — Tipos básicos de data e hora-Footnote-38181503
Node: Objetos Conscientes e Ingênuos8181546
Ref: library/datetime aware-and-naive-objects8181675
Ref: 25c78181675
Ref: library/datetime datetime-naive-aware8181675
Ref: 25c88181675
Ref: Objetos Conscientes e Ingênuos-Footnote-18183790
Node: Constantes8183853
Ref: library/datetime constants8184009
Ref: 25c98184009
Ref: library/datetime datetime MINYEAR8184107
Ref: 25ca8184107
Ref: library/datetime datetime MAXYEAR8184261
Ref: 25cb8184261
Ref: library/datetime datetime UTC8184415
Ref: 4ee8184415
Node: Tipos disponíveis8184564
Ref: library/datetime available-types8184706
Ref: 25cc8184706
Node: Propriedades Comuns8186582
Ref: library/datetime common-properties8186716
Ref: 25dd8186716
Node: Determinando se um Objeto é Consciente ou Ingênuo8187163
Ref: library/datetime determining-if-an-object-is-aware-or-naive8187297
Ref: 25de8187297
Node: Objetos timedelta8188124
Ref: library/datetime datetime-timedelta8188268
Ref: 25df8188268
Ref: library/datetime timedelta-objects8188268
Ref: 25e08188268
Ref: library/datetime datetime timedelta8188464
Ref: 9d78188464
Ref: library/datetime datetime timedelta min8191402
Ref: 25e18191402
Ref: library/datetime datetime timedelta max8191516
Ref: 25e28191516
Ref: library/datetime datetime timedelta resolution8191694
Ref: 25e38191694
Ref: library/datetime datetime timedelta days8192072
Ref: 25e48192072
Ref: library/datetime datetime timedelta seconds8192151
Ref: 25e58192151
Ref: library/datetime datetime timedelta microseconds8192675
Ref: 25e68192675
Ref: library/datetime datetime timedelta total_seconds8198899
Ref: 134a8198899
Node: Exemplos de uso timedelta8199470
Ref: library/datetime examples-of-usage-timedelta8199549
Ref: 25e78199549
Node: Objetos date8200469
Ref: library/datetime date-objects8200611
Ref: 25e88200611
Ref: library/datetime datetime-date8200611
Ref: 25e98200611
Ref: library/datetime datetime date8200970
Ref: 1cd8200970
Ref: library/datetime datetime date today8201450
Ref: 15128201450
Ref: library/datetime datetime date fromtimestamp8201591
Ref: bed8201591
Ref: library/datetime datetime date fromordinal8202625
Ref: bec8202625
Ref: library/datetime datetime date fromisoformat8202993
Ref: 6158202993
Ref: library/datetime datetime date fromisocalendar8203954
Ref: 9f48203954
Ref: library/datetime datetime date min8204263
Ref: 25ea8204263
Ref: library/datetime datetime date max8204355
Ref: 25eb8204355
Ref: library/datetime datetime date resolution8204449
Ref: 25ec8204449
Ref: library/datetime datetime date year8204621
Ref: 25cd8204621
Ref: library/datetime datetime date month8204727
Ref: 25ce8204727
Ref: library/datetime datetime date day8204792
Ref: 25cf8204792
Ref: library/datetime datetime date replace8207710
Ref: 17738207710
Ref: library/datetime datetime date timetuple8208193
Ref: 25ed8208193
Ref: library/datetime datetime date toordinal8208703
Ref: 25ee8208703
Ref: library/datetime datetime date weekday8208951
Ref: 25ef8208951
Ref: library/datetime datetime date isoweekday8209184
Ref: 25f08209184
Ref: library/datetime datetime date isocalendar8209451
Ref: 8fb8209451
Ref: library/datetime datetime date isoformat8210629
Ref: 25f18210629
Ref: library/datetime datetime date __str__8210859
Ref: 25f28210859
Ref: library/datetime datetime date ctime8210968
Ref: 25f38210968
Ref: library/datetime datetime date strftime8211458
Ref: cb08211458
Ref: library/datetime datetime date __format__8211804
Ref: 25f58211804
Ref: Objetos date-Footnote-18212274
Ref: Objetos date-Footnote-28212603
Node: Exemplos de uso date8212822
Ref: library/datetime examples-of-usage-date8212891
Ref: 25f68212891
Node: Objetos datetime8214832
Ref: library/datetime datetime-datetime8214969
Ref: 25f78214969
Ref: library/datetime datetime-objects8214969
Ref: 25f88214969
Ref: library/datetime datetime datetime8215439
Ref: 1cc8215439
Ref: library/datetime datetime datetime today8216363
Ref: 25f98216363
Ref: library/datetime datetime datetime now8216753
Ref: 4ec8216753
Ref: library/datetime datetime datetime utcnow8217662
Ref: 2fc8217662
Ref: library/datetime datetime datetime fromtimestamp8218551
Ref: 4ed8218551
Ref: library/datetime datetime datetime utcfromtimestamp8220464
Ref: 2fd8220464
Ref: library/datetime datetime datetime fromordinal8222432
Ref: 25fa8222432
Ref: library/datetime datetime datetime combine8222850
Ref: cb18222850
Ref: library/datetime datetime datetime fromisoformat8223698
Ref: 6178223698
Ref: library/datetime datetime datetime fromisocalendar8225896
Ref: 9f58225896
Ref: library/datetime datetime datetime strptime8226299
Ref: 16f68226299
Ref: library/datetime datetime datetime min8227881
Ref: 18f08227881
Ref: library/datetime datetime datetime max8228012
Ref: 25fb8228012
Ref: library/datetime datetime datetime resolution8228164
Ref: 25fc8228164
Ref: library/datetime datetime datetime year8228363
Ref: 25d58228363
Ref: library/datetime datetime datetime month8228473
Ref: 25d68228473
Ref: library/datetime datetime datetime day8228542
Ref: 25d78228542
Ref: library/datetime datetime datetime hour8228646
Ref: 25d88228646
Ref: library/datetime datetime datetime minute8228711
Ref: 25d98228711
Ref: library/datetime datetime datetime second8228778
Ref: 25da8228778
Ref: library/datetime datetime datetime microsecond8228845
Ref: 25db8228845
Ref: library/datetime datetime datetime tzinfo8228922
Ref: 25dc8228922
Ref: library/datetime datetime datetime fold8229077
Ref: c728229077
Ref: library/datetime datetime datetime date8234483
Ref: 25fd8234483
Ref: library/datetime datetime datetime time8234584
Ref: 25fe8234584
Ref: library/datetime datetime datetime timetz8234918
Ref: 25ff8234918
Ref: library/datetime datetime datetime replace8235226
Ref: 15138235226
Ref: library/datetime datetime datetime astimezone8235937
Ref: 9d88235937
Ref: library/datetime datetime datetime utcoffset8238481
Ref: 26008238481
Ref: library/datetime datetime datetime dst8238889
Ref: 26018238889
Ref: library/datetime datetime datetime tzname8239303
Ref: 26038239303
Ref: library/datetime datetime datetime timetuple8239548
Ref: 26048239548
Ref: library/datetime datetime datetime utctimetuple8240465
Ref: 26068240465
Ref: library/datetime datetime datetime toordinal8241765
Ref: 26078241765
Ref: library/datetime datetime datetime timestamp8241906
Ref: 10d98241906
Ref: library/datetime datetime datetime weekday8243577
Ref: 26088243577
Ref: library/datetime datetime datetime isoweekday8243792
Ref: 26098243792
Ref: library/datetime datetime datetime isocalendar8244036
Ref: 8fc8244036
Ref: library/datetime datetime datetime isoformat8244232
Ref: b428244232
Ref: library/datetime datetime datetime __str__8247388
Ref: 260a8247388
Ref: library/datetime datetime datetime ctime8247537
Ref: 260b8247537
Ref: library/datetime datetime datetime strftime8248182
Ref: caf8248182
Ref: library/datetime datetime datetime __format__8248441
Ref: 260c8248441
Node: Exemplos de uso datetime8248898
Ref: library/datetime examples-of-usage-datetime8248975
Ref: 260d8248975
Node: Objetos time8253419
Ref: library/datetime datetime-time8253558
Ref: 260e8253558
Ref: library/datetime time-objects8253558
Ref: 260f8253558
Ref: library/datetime datetime time8253778
Ref: 1ce8253778
Ref: library/datetime datetime time min8254496
Ref: 26108254496
Ref: library/datetime datetime time max8254611
Ref: 26118254611
Ref: library/datetime datetime time resolution8254736
Ref: 26128254736
Ref: library/datetime datetime time hour8255013
Ref: 25d08255013
Ref: library/datetime datetime time minute8255074
Ref: 25d18255074
Ref: library/datetime datetime time second8255137
Ref: 25d28255137
Ref: library/datetime datetime time microsecond8255200
Ref: 25d38255200
Ref: library/datetime datetime time tzinfo8255273
Ref: 25d48255273
Ref: library/datetime datetime time fold8255430
Ref: cae8255430
Ref: library/datetime datetime time fromisoformat8257169
Ref: 6168257169
Ref: library/datetime datetime time replace8258844
Ref: 17748258844
Ref: library/datetime datetime time isoformat8259486
Ref: 26138259486
Ref: library/datetime datetime time __str__8261616
Ref: 26158261616
Ref: library/datetime datetime time strftime8261726
Ref: 18808261726
Ref: library/datetime datetime time __format__8261971
Ref: 26168261971
Ref: library/datetime datetime time utcoffset8262349
Ref: 26148262349
Ref: library/datetime datetime time dst8262753
Ref: 26178262753
Ref: library/datetime datetime time tzname8263164
Ref: 26188263164
Ref: Objetos time-Footnote-18263506
Node: Exemplos de uso time8263571
Ref: library/datetime examples-of-usage-time8263640
Ref: 26198263640
Node: Objetos tzinfo8264518
Ref: library/datetime datetime-tzinfo8264657
Ref: 261a8264657
Ref: library/datetime tzinfo-objects8264657
Ref: 261b8264657
Ref: library/datetime datetime tzinfo8264714
Ref: 5de8264714
Ref: library/datetime datetime tzinfo utcoffset8266666
Ref: 261c8266666
Ref: library/datetime datetime tzinfo dst8268026
Ref: 261d8268026
Ref: library/datetime datetime tzinfo tzname8271002
Ref: 261e8271002
Ref: library/datetime datetime tzinfo fromutc8273301
Ref: 26028273301
Ref: Objetos tzinfo-Footnote-18287104
Node: Objetos timezone8287144
Ref: library/datetime datetime-timezone8287307
Ref: 261f8287307
Ref: library/datetime timezone-objects8287307
Ref: 26208287307
Ref: library/datetime datetime timezone8287765
Ref: 10fe8287765
Ref: library/datetime datetime timezone utcoffset8288441
Ref: 26218288441
Ref: library/datetime datetime timezone tzname8288847
Ref: 26228288847
Ref: library/datetime datetime timezone dst8289536
Ref: 26238289536
Ref: library/datetime datetime timezone fromutc8289601
Ref: 26248289601
Ref: library/datetime datetime timezone utc8289815
Ref: 6148289815
Node: Comportamento de strftime e strptime8289900
Ref: library/datetime strftime-and-strptime-behavior8290040
Ref: 26258290040
Ref: library/datetime strftime-strptime-behavior8290040
Ref: 18de8290040
Ref: library/datetime format-codes8292294
Ref: 25c68292294
Node: Códigos de formato strftime e strptime8292415
Ref: library/datetime strftime-and-strptime-format-codes8292554
Ref: 26268292554
Ref: Códigos de formato strftime e strptime-Footnote-18303976
Node: Detalhes técnicos8304024
Ref: library/datetime technical-detail8304163
Ref: 26278304163
Ref: Detalhes técnicos-Footnote-18312237
Node: zoneinfo — Suporte a fuso horário da IANA8312292
Ref: library/zoneinfo doc8312504
Ref: 26288312504
Ref: library/zoneinfo module-zoneinfo8312504
Ref: 1348312504
Ref: library/zoneinfo translation-repo8312504
Ref: 26298312504
Ref: library/zoneinfo zoneinfo-iana-time-zone-support8312504
Ref: 262a8312504
Ref: zoneinfo — Suporte a fuso horário da IANA-Footnote-18313874
Ref: zoneinfo — Suporte a fuso horário da IANA-Footnote-28313939
Ref: zoneinfo — Suporte a fuso horário da IANA-Footnote-38313981
Ref: zoneinfo — Suporte a fuso horário da IANA-Footnote-48314022
Node: Usando ZoneInfo8314063
Ref: library/zoneinfo using-zoneinfo8314183
Ref: 262b8314183
Ref: Usando ZoneInfo-Footnote-18316183
Node: Fontes de dados8316225
Ref: library/zoneinfo data-sources8316371
Ref: 262c8316371
Ref: Fontes de dados-Footnote-18317146
Node: Configurando as fontes de dados8317187
Ref: library/zoneinfo configuring-the-data-sources8317270
Ref: 262d8317270
Ref: library/zoneinfo zoneinfo-data-configuration8317270
Ref: 262e8317270
Node: Configuração em tempo de compilação8318147
Ref: library/zoneinfo compile-time-configuration8318289
Ref: 26318318289
Ref: library/zoneinfo zoneinfo-data-compile-time-config8318289
Ref: 1ef98318289
Node: Configuração do ambiente8319156
Ref: library/zoneinfo environment-configuration8319344
Ref: 26328319344
Ref: library/zoneinfo zoneinfo-data-environment-var8319344
Ref: 262f8319344
Ref: library/zoneinfo envvar-PYTHONTZPATH8319672
Ref: 26338319672
Node: Configuração em tempo de execução8320414
Ref: library/zoneinfo runtime-configuration8320554
Ref: 26358320554
Ref: library/zoneinfo zoneinfo-data-runtime-config8320554
Ref: 26308320554
Node: A classe ZoneInfo8321006
Ref: library/zoneinfo the-zoneinfo-class8321149
Ref: 26368321149
Ref: library/zoneinfo zoneinfo ZoneInfo8321210
Ref: 8e58321210
Ref: library/zoneinfo zoneinfo ZoneInfo from_file8322181
Ref: 15a38322181
Ref: library/zoneinfo zoneinfo ZoneInfo no_cache8322818
Ref: 26398322818
Ref: library/zoneinfo zoneinfo ZoneInfo clear_cache8323541
Ref: 26378323541
Ref: library/zoneinfo zoneinfo ZoneInfo key8324337
Ref: 263a8324337
Node: String representations8325192
Ref: library/zoneinfo string-representations8325297
Ref: 263c8325297
Node: Pickle serialization8326106
Ref: library/zoneinfo pickle-serialization8326211
Ref: 263d8326211
Ref: library/zoneinfo pickling8326211
Ref: 26388326211
Node: Funções<3>8328606
Ref: library/zoneinfo functions8328741
Ref: 263e8328741
Ref: library/zoneinfo zoneinfo available_timezones8328778
Ref: 1ad58328778
Ref: library/zoneinfo zoneinfo reset_tzpath8329754
Ref: 15f58329754
Node: Globals8330450
Ref: library/zoneinfo globals8330591
Ref: 263f8330591
Ref: library/zoneinfo zoneinfo TZPATH8330626
Ref: 1ef88330626
Node: Exceptions and warnings8331404
Ref: library/zoneinfo exceptions-and-warnings8331524
Ref: 26408331524
Ref: library/zoneinfo zoneinfo ZoneInfoNotFoundError8331591
Ref: 16118331591
Ref: library/zoneinfo zoneinfo InvalidTZPathWarning8331822
Ref: 26348331822
Node: calendar — Funções gerais relacionadas ao calendário8331999
Ref: library/calendar doc8332215
Ref: 26418332215
Ref: library/calendar calendar-general-calendar-related-functions8332215
Ref: 26428332215
Ref: library/calendar module-calendar8332215
Ref: 148332215
Ref: library/calendar translation-repo8332215
Ref: 26438332215
Ref: library/calendar calendar Calendar8333542
Ref: 26458333542
Ref: library/calendar calendar Calendar firstweekday8334131
Ref: 26488334131
Ref: library/calendar calendar Calendar getfirstweekday8334394
Ref: 264a8334394
Ref: library/calendar calendar Calendar setfirstweekday8334607
Ref: 26498334607
Ref: library/calendar calendar Calendar iterweekdays8334845
Ref: 264b8334845
Ref: library/calendar calendar Calendar itermonthdates8335087
Ref: c338335087
Ref: library/calendar calendar Calendar itermonthdays8335452
Ref: 264c8335452
Ref: library/calendar calendar Calendar itermonthdays28335860
Ref: 264d8335860
Ref: library/calendar calendar Calendar itermonthdays38336223
Ref: c348336223
Ref: library/calendar calendar Calendar itermonthdays48336613
Ref: c358336613
Ref: library/calendar calendar Calendar monthdatescalendar8337021
Ref: 264e8337021
Ref: library/calendar calendar Calendar monthdays2calendar8337250
Ref: 264f8337250
Ref: library/calendar calendar Calendar monthdayscalendar8337495
Ref: 26508337495
Ref: library/calendar calendar Calendar yeardatescalendar8337711
Ref: 26518337711
Ref: library/calendar calendar Calendar yeardays2calendar8338121
Ref: 26528338121
Ref: library/calendar calendar Calendar yeardayscalendar8338477
Ref: 26538338477
Ref: library/calendar calendar TextCalendar8338784
Ref: 26548338784
Ref: library/calendar calendar TextCalendar formatday8338986
Ref: 26558338986
Ref: library/calendar calendar TextCalendar formatweek8339323
Ref: 26568339323
Ref: library/calendar calendar TextCalendar formatweekday8339701
Ref: 26578339701
Ref: library/calendar calendar TextCalendar formatweekheader8340030
Ref: 26588340030
Ref: library/calendar calendar TextCalendar formatmonth8340360
Ref: 26598340360
Ref: library/calendar calendar TextCalendar formatmonthname8340844
Ref: 265a8340844
Ref: library/calendar calendar TextCalendar prmonth8341260
Ref: 265b8341260
Ref: library/calendar calendar TextCalendar formatyear8341420
Ref: 265c8341420
Ref: library/calendar calendar TextCalendar pryear8342019
Ref: 265d8342019
Ref: library/calendar calendar HTMLCalendar8342187
Ref: b358342187
Ref: library/calendar calendar HTMLCalendar formatmonth8342371
Ref: 265e8342371
Ref: library/calendar calendar HTMLCalendar formatyear8342634
Ref: 265f8342634
Ref: library/calendar calendar HTMLCalendar formatyearpage8342826
Ref: 26608342826
Ref: library/calendar calendar HTMLCalendar formatmonthname8343377
Ref: 26618343377
Ref: library/calendar calendar HTMLCalendar cssclasses8343782
Ref: 26628343782
Ref: library/calendar calendar HTMLCalendar cssclass_noday8344229
Ref: 26638344229
Ref: library/calendar calendar HTMLCalendar cssclasses_weekday_head8344399
Ref: 26648344399
Ref: library/calendar calendar HTMLCalendar cssclass_month_head8344647
Ref: 26658344647
Ref: library/calendar calendar HTMLCalendar cssclass_month8344856
Ref: 26668344856
Ref: library/calendar calendar HTMLCalendar cssclass_year8345068
Ref: 26678345068
Ref: library/calendar calendar HTMLCalendar cssclass_year_head8345287
Ref: 26688345287
Ref: library/calendar calendar LocaleTextCalendar8346259
Ref: 7448346259
Ref: library/calendar calendar LocaleHTMLCalendar8346512
Ref: 7458346512
Ref: library/calendar calendar setfirstweekday8347153
Ref: 26448347153
Ref: library/calendar calendar firstweekday8347674
Ref: 266e8347674
Ref: library/calendar calendar isleap8347801
Ref: 266f8347801
Ref: library/calendar calendar leapdays8347941
Ref: 26708347941
Ref: library/calendar calendar weekday8348187
Ref: 26718348187
Ref: library/calendar calendar weekheader8348390
Ref: 26728348390
Ref: library/calendar calendar monthrange8348569
Ref: 26738348569
Ref: library/calendar calendar monthcalendar8348745
Ref: 26748348745
Ref: library/calendar calendar prmonth8349061
Ref: 26758349061
Ref: library/calendar calendar month8349210
Ref: 16868349210
Ref: library/calendar calendar prcal8349421
Ref: 26768349421
Ref: library/calendar calendar calendar8349576
Ref: 26778349576
Ref: library/calendar calendar timegm8349811
Ref: 26788349811
Ref: library/calendar calendar day_name8350315
Ref: 26798350315
Ref: library/calendar calendar day_abbr8350609
Ref: 267a8350609
Ref: library/calendar calendar MONDAY8350882
Ref: 26468350882
Ref: library/calendar calendar TUESDAY8350908
Ref: 26698350908
Ref: library/calendar calendar WEDNESDAY8350935
Ref: 266a8350935
Ref: library/calendar calendar THURSDAY8350964
Ref: 266b8350964
Ref: library/calendar calendar FRIDAY8350992
Ref: 266c8350992
Ref: library/calendar calendar SATURDAY8351018
Ref: 266d8351018
Ref: library/calendar calendar SUNDAY8351046
Ref: 26478351046
Ref: library/calendar calendar Day8351207
Ref: 4828351207
Ref: library/calendar calendar month_name8351472
Ref: 267b8351472
Ref: library/calendar calendar month_abbr8351934
Ref: 267c8351934
Ref: library/calendar calendar JANUARY8352375
Ref: 2f98352375
Ref: library/calendar calendar FEBRUARY8352402
Ref: 2fa8352402
Ref: library/calendar calendar MARCH8352430
Ref: 267d8352430
Ref: library/calendar calendar APRIL8352455
Ref: 267e8352455
Ref: library/calendar calendar MAY8352480
Ref: 267f8352480
Ref: library/calendar calendar JUNE8352503
Ref: 26808352503
Ref: library/calendar calendar JULY8352527
Ref: 26818352527
Ref: library/calendar calendar AUGUST8352551
Ref: 26828352551
Ref: library/calendar calendar SEPTEMBER8352577
Ref: 26838352577
Ref: library/calendar calendar OCTOBER8352606
Ref: 26848352606
Ref: library/calendar calendar NOVEMBER8352633
Ref: 26858352633
Ref: library/calendar calendar DECEMBER8352661
Ref: 26868352661
Ref: library/calendar calendar Month8352826
Ref: 4818352826
Ref: library/calendar calendar IllegalMonthError8353157
Ref: 16858353157
Ref: library/calendar calendar IllegalMonthError month8353351
Ref: 26878353351
Ref: library/calendar calendar IllegalWeekdayError8353419
Ref: 26888353419
Ref: library/calendar calendar IllegalWeekdayError weekday8353630
Ref: 26898353630
Ref: calendar — Funções gerais relacionadas ao calendário-Footnote-18354033
Node: Uso na linha de comando8354101
Ref: library/calendar calendar-cli8354218
Ref: 268a8354218
Ref: library/calendar command-line-usage8354218
Ref: 268b8354218
Ref: library/calendar cmdoption-calendar-help8356786
Ref: 268c8356786
Ref: library/calendar cmdoption-calendar-h8356786
Ref: 268d8356786
Ref: library/calendar cmdoption-calendar-locale8356850
Ref: 268e8356850
Ref: library/calendar cmdoption-calendar-L8356850
Ref: 268f8356850
Ref: library/calendar cmdoption-calendar-encoding8356987
Ref: 26908356987
Ref: library/calendar cmdoption-calendar-e8356987
Ref: 26918356987
Ref: library/calendar cmdoption-calendar-type8357164
Ref: 26928357164
Ref: library/calendar cmdoption-calendar-t8357164
Ref: 26938357164
Ref: library/calendar cmdoption-calendar-first-weekday8357293
Ref: 26948357293
Ref: library/calendar cmdoption-calendar-f8357293
Ref: 26958357293
Ref: library/calendar cmdoption-calendar-arg-year8357519
Ref: 26968357519
Ref: library/calendar cmdoption-calendar-arg-month8357603
Ref: 26978357603
Ref: library/calendar cmdoption-calendar-width8357859
Ref: 26988357859
Ref: library/calendar cmdoption-calendar-w8357859
Ref: 26998357859
Ref: library/calendar cmdoption-calendar-lines8358055
Ref: 269a8358055
Ref: library/calendar cmdoption-calendar-l8358055
Ref: 269b8358055
Ref: library/calendar cmdoption-calendar-spacing8358248
Ref: 269c8358248
Ref: library/calendar cmdoption-calendar-s8358248
Ref: 269d8358248
Ref: library/calendar cmdoption-calendar-months8358399
Ref: 269e8358399
Ref: library/calendar cmdoption-calendar-m8358399
Ref: 269f8358399
Ref: library/calendar cmdoption-calendar-css8358527
Ref: 26a08358527
Ref: library/calendar cmdoption-calendar-c8358527
Ref: 26a18358527
Node: collections — Tipos de dados de contêineres8358728
Ref: library/collections doc8358960
Ref: 26a28358960
Ref: library/collections collections-container-datatypes8358960
Ref: 26a38358960
Ref: library/collections module-collections8358960
Ref: 1d8358960
Ref: library/collections translation-repo8358960
Ref: 26a48358960
Ref: collections — Tipos de dados de contêineres-Footnote-18361353
Node: Objetos ChainMap8361434
Ref: library/collections chainmap-objects8361557
Ref: 26a58361557
Ref: library/collections collections ChainMap8361991
Ref: c368361991
Ref: library/collections collections ChainMap maps8363127
Ref: 26a68363127
Ref: library/collections collections ChainMap new_child8363488
Ref: f558363488
Ref: library/collections collections ChainMap parents8364384
Ref: 26a78364384
Ref: Objetos ChainMap-Footnote-18366496
Ref: Objetos ChainMap-Footnote-28366538
Ref: Objetos ChainMap-Footnote-38366633
Ref: Objetos ChainMap-Footnote-48366680
Ref: Objetos ChainMap-Footnote-58366759
Ref: Objetos ChainMap-Footnote-68366856
Node: Exemplos e Receitas de ChainMap8366909
Ref: library/collections chainmap-examples-and-recipes8366993
Ref: 26a88366993
Node: Objetos Counter8370317
Ref: library/collections counter-objects8370462
Ref: 26a98370462
Ref: library/collections collections Counter8371205
Ref: 10d08371205
Ref: library/collections collections Counter elements8373470
Ref: 13488373470
Ref: library/collections collections Counter most_common8373962
Ref: 13478373962
Ref: library/collections collections Counter subtract8374476
Ref: 121e8374476
Ref: library/collections collections Counter total8375101
Ref: 26aa8375101
Ref: library/collections collections Counter fromkeys8375474
Ref: 26ab8375474
Ref: library/collections collections Counter update8375615
Ref: 15a48375615
Ref: Objetos Counter-Footnote-18381310
Ref: Objetos Counter-Footnote-28381389
Ref: Objetos Counter-Footnote-38381441
Node: Objetos deque8381534
Ref: library/collections deque-objects8381682
Ref: 26ac8381682
Ref: library/collections collections deque8381735
Ref: 5dc8381735
Ref: library/collections collections deque append8383484
Ref: 26ad8383484
Ref: library/collections collections deque appendleft8383564
Ref: 26ae8383564
Ref: library/collections collections deque clear8383648
Ref: 26af8383648
Ref: library/collections collections deque copy8383762
Ref: dfc8383762
Ref: library/collections collections deque count8383869
Ref: 12208383869
Ref: library/collections collections deque extend8383995
Ref: 26b08383995
Ref: library/collections collections deque extendleft8384128
Ref: 26b18384128
Ref: library/collections collections deque index8384394
Ref: dfa8384394
Ref: library/collections collections deque insert8384699
Ref: dfb8384699
Ref: library/collections collections deque pop8384957
Ref: 26b28384957
Ref: library/collections collections deque popleft8385142
Ref: 26b38385142
Ref: library/collections collections deque remove8385332
Ref: 1a5b8385332
Ref: library/collections collections deque reverse8385488
Ref: 12218385488
Ref: library/collections collections deque rotate8385651
Ref: 1a1c8385651
Ref: library/collections collections deque maxlen8386075
Ref: 13498386075
Node: Receitas de deque8388874
Ref: library/collections deque-recipes8388941
Ref: 26b48388941
Ref: Receitas de deque-Footnote-18391526
Node: Objetos defaultdict8391587
Ref: library/collections defaultdict-objects8391783
Ref: 26b58391783
Ref: library/collections collections defaultdict8391848
Ref: 11fc8391848
Ref: library/collections collections defaultdict __missing__8392660
Ref: 26b78392660
Ref: library/collections collections defaultdict default_factory8393913
Ref: 26b68393913
Ref: Objetos defaultdict-Footnote-18394374
Node: Exemplos de defaultdict8394416
Ref: library/collections defaultdict-examples8394495
Ref: 26b88394495
Node: Função de fábrica para tuplas com campos nomeados namedtuple8397258
Ref: library/collections namedtuple-factory-function-for-tuples-with-named-fields8397460
Ref: 26b98397460
Ref: library/collections collections namedtuple8397895
Ref: 1ca8397895
Ref: library/collections collections somenamedtuple _make8402232
Ref: 26bb8402232
Ref: library/collections collections somenamedtuple _asdict8402484
Ref: 9e98402484
Ref: library/collections collections somenamedtuple _replace8403212
Ref: 26bc8403212
Ref: library/collections collections somenamedtuple _fields8403868
Ref: 26bd8403868
Ref: library/collections collections somenamedtuple _field_defaults8404395
Ref: 26ba8404395
Node: Objetos OrderedDict8407388
Ref: library/collections ordereddict-objects8407587
Ref: 26be8407587
Ref: library/collections collections OrderedDict8410188
Ref: 5db8410188
Ref: library/collections collections OrderedDict popitem8410412
Ref: 13318410412
Ref: library/collections collections OrderedDict move_to_end8410726
Ref: 121f8410726
Ref: library/collections collections-ordereddict-eq8411525
Ref: 16b18411525
Ref: Objetos OrderedDict-Footnote-18412554
Ref: Objetos OrderedDict-Footnote-28412596
Node: Exemplos e receitas de OrderedDict8412638
Ref: library/collections ordereddict-examples-and-recipes8412728
Ref: 26c08412728
Node: Objetos UserDict8415798
Ref: library/collections userdict-objects8415950
Ref: 26c18415950
Ref: library/collections collections UserDict8416347
Ref: 1b0c8416347
Ref: library/collections collections UserDict data8416961
Ref: 26c28416961
Node: Objetos UserList8417092
Ref: library/collections userlist-objects8417243
Ref: 26c38417243
Ref: library/collections collections UserList8417838
Ref: 152c8417838
Ref: library/collections collections UserList data8418479
Ref: 26c48418479
Node: Objetos UserString8419295
Ref: library/collections userstring-objects8419421
Ref: 26c58419421
Ref: library/collections collections UserString8419812
Ref: dfd8419812
Ref: library/collections collections UserString data8420432
Ref: 26c68420432
Node: collections abc — Classes Base Abstratas para Contêineres8420735
Ref: library/collections abc doc8420942
Ref: 26c78420942
Ref: library/collections abc collections-abc-abstract-base-classes-for-containers8420942
Ref: 26c88420942
Ref: library/collections abc module-collections abc8420942
Ref: 1e8420942
Ref: library/collections abc translation-repo8420942
Ref: 26c98420942
Ref: collections abc — Classes Base Abstratas para Contêineres-Footnote-18425111
Ref: collections abc — Classes Base Abstratas para Contêineres-Footnote-28425188
Node: Classes Base Abstratas de Coleções8425230
Ref: library/collections abc collections-abstract-base-classes8425435
Ref: 87c8425435
Ref: library/collections abc id18425435
Ref: 26ca8425435
Ref: Classes Base Abstratas de Coleções-Footnote-18435132
Ref: Classes Base Abstratas de Coleções-Footnote-28435456
Ref: Classes Base Abstratas de Coleções-Footnote-38435780
Ref: Classes Base Abstratas de Coleções-Footnote-48436104
Ref: Classes Base Abstratas de Coleções-Footnote-58436463
Ref: Classes Base Abstratas de Coleções-Footnote-68436787
Ref: Classes Base Abstratas de Coleções-Footnote-78437111
Ref: Classes Base Abstratas de Coleções-Footnote-88437435
Ref: Classes Base Abstratas de Coleções-Footnote-98437759
Ref: Classes Base Abstratas de Coleções-Footnote-108438083
Ref: Classes Base Abstratas de Coleções-Footnote-118438408
Ref: Classes Base Abstratas de Coleções-Footnote-128438733
Ref: Classes Base Abstratas de Coleções-Footnote-138439058
Ref: Classes Base Abstratas de Coleções-Footnote-148439383
Ref: Classes Base Abstratas de Coleções-Footnote-158439708
Ref: Classes Base Abstratas de Coleções-Footnote-168440033
Node: Classes Base Abstrata de Coleções – Descrições Detalhadas8440358
Ref: library/collections abc collections-abstract-base-classes-detailed-descriptions8440591
Ref: 26cc8440591
Ref: library/collections abc collections abc Container8440730
Ref: 23e48440730
Ref: library/collections abc collections abc Hashable8440843
Ref: 4f58440843
Ref: library/collections abc collections abc Sized8440950
Ref: 4f68440950
Ref: library/collections abc collections abc Callable8441054
Ref: 7ec8441054
Ref: library/collections abc collections abc Iterable8441294
Ref: 23e28441294
Ref: library/collections abc collections abc Collection8441784
Ref: ca58441784
Ref: library/collections abc collections abc Iterator8441916
Ref: 23e38441916
Ref: library/collections abc collections abc Reversible8442123
Ref: ca68442123
Ref: library/collections abc collections abc Generator8442293
Ref: e058442293
Ref: library/collections abc collections abc Sequence8442736
Ref: 12048442736
Ref: library/collections abc collections abc MutableSequence8442773
Ref: 1a18442773
Ref: library/collections abc collections abc ByteString8442817
Ref: 2e78442817
Ref: library/collections abc collections abc ByteString index8443486
Ref: 26ce8443486
Ref: library/collections abc collections abc Set8444959
Ref: 23da8444959
Ref: library/collections abc collections abc MutableSet8444991
Ref: 23e58444991
Ref: library/collections abc collections abc Mapping8445099
Ref: 8d08445099
Ref: library/collections abc collections abc MutableMapping8445135
Ref: 10eb8445135
Ref: library/collections abc collections abc MappingView8445244
Ref: 23e68445244
Ref: library/collections abc collections abc ItemsView8445284
Ref: 23e88445284
Ref: library/collections abc collections abc KeysView8445322
Ref: 23e78445322
Ref: library/collections abc collections abc ValuesView8445359
Ref: 23e98445359
Ref: library/collections abc collections abc Awaitable8445470
Ref: e068445470
Ref: library/collections abc collections abc Coroutine8446251
Ref: e078446251
Ref: library/collections abc collections abc AsyncIterable8447369
Ref: e098447369
Ref: library/collections abc collections abc AsyncIterator8447579
Ref: e088447579
Ref: library/collections abc collections abc AsyncGenerator8447806
Ref: ca88447806
Ref: library/collections abc collections abc Buffer8448159
Ref: 2e98448159
Ref: Classes Base Abstrata de Coleções – Descrições Detalhadas-Footnote-18448404
Ref: Classes Base Abstrata de Coleções – Descrições Detalhadas-Footnote-28448446
Ref: Classes Base Abstrata de Coleções – Descrições Detalhadas-Footnote-38448504
Ref: Classes Base Abstrata de Coleções – Descrições Detalhadas-Footnote-48448546
Ref: Classes Base Abstrata de Coleções – Descrições Detalhadas-Footnote-58448588
Node: Exemplos e receitas8448630
Ref: library/collections abc examples-and-recipes8448818
Ref: 26cf8448818
Ref: Exemplos e receitas-Footnote-18452029
Ref: Exemplos e receitas-Footnote-28452082
Node: heapq — Algoritmo de fila heap8452124
Ref: library/heapq doc8452328
Ref: 26d08452328
Ref: library/heapq heapq-heap-queue-algorithm8452328
Ref: 26d18452328
Ref: library/heapq module-heapq8452328
Ref: 698452328
Ref: library/heapq translation-repo8452328
Ref: 26d28452328
Ref: library/heapq heapq heapify8454025
Ref: 26d38454025
Ref: library/heapq heapq heappush8454126
Ref: 15048454126
Ref: library/heapq heapq heappop8454239
Ref: 15058454239
Ref: library/heapq heapq heappushpop8454509
Ref: 26d48454509
Ref: library/heapq heapq heapreplace8454793
Ref: 26d58454793
Ref: library/heapq heapq merge8455660
Ref: e308455660
Ref: library/heapq heapq nlargest8456985
Ref: 26d68456985
Ref: library/heapq heapq nsmallest8457411
Ref: 26d78457411
Ref: heapq — Algoritmo de fila heap-Footnote-18458328
Node: Exemplos básicos8458393
Ref: library/heapq basic-examples8458534
Ref: 26d88458534
Ref: Exemplos básicos-Footnote-18459572
Node: Notas de implementação da fila de prioridade8459619
Ref: library/heapq priority-queue-implementation-notes8459775
Ref: 26d98459775
Ref: Notas de implementação da fila de prioridade-Footnote-18462990
Node: Teoria8463043
Ref: library/heapq theory8463173
Ref: 26da8463173
Ref: Teoria-Footnote-18467840
Node: bisect — Algoritmo de bisseção de vetor8468560
Ref: library/bisect doc8468753
Ref: 26db8468753
Ref: library/bisect bisect-array-bisection-algorithm8468753
Ref: 26dc8468753
Ref: library/bisect module-bisect8468753
Ref: 118468753
Ref: library/bisect translation-repo8468753
Ref: 26dd8468753
Ref: library/bisect bisect-functions8470343
Ref: 26df8470343
Ref: library/bisect bisect bisect_left8470384
Ref: 26e08470384
Ref: library/bisect bisect bisect_right8471695
Ref: 26e18471695
Ref: library/bisect bisect bisect8471766
Ref: 26e28471766
Ref: library/bisect bisect insort_left8472329
Ref: 26de8472329
Ref: library/bisect bisect insort_right8473065
Ref: 26e38473065
Ref: library/bisect bisect insort8473136
Ref: 26e48473136
Ref: bisect — Algoritmo de bisseção de vetor-Footnote-18474071
Node: Observações sobre desempenho8474137
Ref: library/bisect performance-notes8474284
Ref: 26e58474284
Ref: Observações sobre desempenho-Footnote-18475835
Ref: Observações sobre desempenho-Footnote-28475890
Node: Buscando em listas ordenadas8475960
Ref: library/bisect searching-sorted-lists8476127
Ref: 26e68476127
Node: Exemplos<3>8477435
Ref: library/bisect examples8477563
Ref: 26e78477563
Ref: library/bisect bisect-example8477598
Ref: 26e88477598
Node: array— Vetores eficientes de valores numéricos8480238
Ref: library/array doc8480430
Ref: 26e98480430
Ref: library/array array-efficient-arrays-of-numeric-values8480430
Ref: 26ea8480430
Ref: library/array module-array8480430
Ref: 78480430
Ref: library/array translation-repo8480430
Ref: 26eb8480430
Ref: library/array array typecodes8485409
Ref: 26ed8485409
Ref: library/array array array8485528
Ref: 1a08485528
Ref: library/array array array typecode8486854
Ref: 26f08486854
Ref: library/array array array itemsize8486951
Ref: 26ec8486951
Ref: library/array array array append8487068
Ref: 26f18487068
Ref: library/array array array buffer_info8487164
Ref: 26f28487164
Ref: library/array array array byteswap8488355
Ref: 26f38488355
Ref: library/array array array count8488765
Ref: 26f48488765
Ref: library/array array array extend8488859
Ref: 26ef8488859
Ref: library/array array array frombytes8489269
Ref: 12b38489269
Ref: library/array array array fromfile8489682
Ref: 13038489682
Ref: library/array array array fromlist8490022
Ref: 26f58490022
Ref: library/array array array fromunicode8490235
Ref: 26ee8490235
Ref: library/array array array index8490609
Ref: 7e28490609
Ref: library/array array array insert8491078
Ref: 26f68491078
Ref: library/array array array pop8491285
Ref: 26f78491285
Ref: library/array array array remove8491516
Ref: 26f88491516
Ref: library/array array array clear8491604
Ref: 1a28491604
Ref: library/array array array reverse8491718
Ref: 26f98491718
Ref: library/array array array tobytes8491795
Ref: 12b28491795
Ref: library/array array array tofile8492158
Ref: 13048492158
Ref: library/array array array tolist8492300
Ref: 26fa8492300
Ref: library/array array array tounicode8492388
Ref: 26fb8492388
Ref: array— Vetores eficientes de valores numéricos-Footnote-18493699
Node: weakref — Referências fracas8493726
Ref: library/weakref doc8493943
Ref: 26fc8493943
Ref: library/weakref mod-weakref8493943
Ref: f3c8493943
Ref: library/weakref module-weakref8493943
Ref: 1148493943
Ref: library/weakref translation-repo8493943
Ref: 26fd8493943
Ref: library/weakref weakref-weak-references8493943
Ref: 26fe8493943
Ref: library/weakref weakref ref8498435
Ref: 10268498435
Ref: library/weakref weakref ref __callback__8500510
Ref: 10278500510
Ref: library/weakref weakref proxy8500918
Ref: a5b8500918
Ref: library/weakref weakref getweakrefcount8502008
Ref: 27008502008
Ref: library/weakref weakref getweakrefs8502160
Ref: 27018502160
Ref: library/weakref weakref WeakKeyDictionary8502326
Ref: 1ae68502326
Ref: library/weakref weakref WeakKeyDictionary keyrefs8504299
Ref: 27028504299
Ref: library/weakref weakref WeakValueDictionary8504405
Ref: 1ae58504405
Ref: library/weakref weakref WeakValueDictionary valuerefs8504917
Ref: 27038504917
Ref: library/weakref weakref WeakSet8505028
Ref: 5dd8505028
Ref: library/weakref weakref WeakMethod8505237
Ref: 10258505237
Ref: library/weakref weakref finalize8506326
Ref: a868506326
Ref: library/weakref weakref finalize __call__8507812
Ref: 27048507812
Ref: library/weakref weakref finalize detach8508030
Ref: 27058508030
Ref: library/weakref weakref finalize peek8508235
Ref: 27068508235
Ref: library/weakref weakref finalize alive8508407
Ref: 27078508407
Ref: library/weakref weakref finalize atexit8508539
Ref: 27088508539
Ref: library/weakref weakref ReferenceType8509173
Ref: 18e88509173
Ref: library/weakref weakref ProxyType8509260
Ref: 18e98509260
Ref: library/weakref weakref CallableProxyType8509375
Ref: 18ea8509375
Ref: library/weakref weakref ProxyTypes8509479
Ref: 27098509479
Ref: weakref — Referências fracas-Footnote-18510187
Ref: weakref — Referências fracas-Footnote-28510254
Ref: weakref — Referências fracas-Footnote-38510296
Ref: weakref — Referências fracas-Footnote-48510338
Node: Objetos referência fraca8510380
Ref: library/weakref weak-reference-objects8510492
Ref: 270a8510492
Ref: library/weakref weakref-objects8510492
Ref: 270b8510492
Node: Exemplo<2>8513167
Ref: library/weakref example8513309
Ref: 270c8513309
Ref: library/weakref weakref-example8513309
Ref: 270d8513309
Node: Objetos finalizadores8513871
Ref: library/weakref finalize-examples8514033
Ref: 270e8514033
Ref: library/weakref finalizer-objects8514033
Ref: 270f8514033
Node: Comparando finalizadores com métodos __del__8515960
Ref: library/weakref comparing-finalizers-with-del-methods8516103
Ref: 27108516103
Node: types — Criação de tipos dinâmicos e nomes para tipos embutidos8519081
Ref: library/types doc8519302
Ref: 27118519302
Ref: library/types module-types8519302
Ref: 1038519302
Ref: library/types translation-repo8519302
Ref: 27128519302
Ref: library/types types-dynamic-type-creation-and-names-for-built-in-types8519302
Ref: 27138519302
Ref: types — Criação de tipos dinâmicos e nomes para tipos embutidos-Footnote-18520188
Node: Criação de tipos dinâmicos8520253
Ref: library/types dynamic-type-creation8520426
Ref: 27148520426
Ref: library/types types new_class8520502
Ref: 11a08520502
Ref: library/types types prepare_class8521301
Ref: 11a18521301
Ref: library/types types resolve_bases8522550
Ref: bb48522550
Ref: library/types types get_original_bases8523152
Ref: 4ce8523152
Ref: Criação de tipos dinâmicos-Footnote-18524737
Ref: Criação de tipos dinâmicos-Footnote-28524779
Ref: Criação de tipos dinâmicos-Footnote-38524821
Ref: Criação de tipos dinâmicos-Footnote-48524863
Node: Tipos padrão do interpretador8524905
Ref: library/types standard-interpreter-types8525131
Ref: 27158525131
Ref: library/types types NoneType8525727
Ref: 8558525727
Ref: library/types types FunctionType8525820
Ref: 8878525820
Ref: library/types types LambdaType8525849
Ref: 27168525849
Ref: library/types types GeneratorType8526237
Ref: 17218526237
Ref: library/types types CoroutineType8526366
Ref: eb88526366
Ref: library/types types AsyncGeneratorType8526530
Ref: 27178526530
Ref: library/types types CodeType8526721
Ref: 2df8526721
Ref: library/types types CellType8527363
Ref: 27188527363
Ref: library/types types MethodType8527574
Ref: 190e8527574
Ref: library/types types BuiltinFunctionType8527676
Ref: 27198527676
Ref: library/types types BuiltinMethodType8527712
Ref: 271a8527712
Ref: library/types types WrapperDescriptorType8527939
Ref: bb18527939
Ref: library/types types MethodWrapperType8528158
Ref: 64b8528158
Ref: library/types types NotImplementedType8528371
Ref: 8568528371
Ref: library/types types MethodDescriptorType8528484
Ref: bb28528484
Ref: library/types types ClassMethodDescriptorType8528649
Ref: bb38528649
Ref: library/types types ModuleType8528857
Ref: e3f8528857
Ref: library/types types EllipsisType8529699
Ref: 8548529699
Ref: library/types types GenericAlias8529801
Ref: 7ed8529801
Ref: library/types types UnionType8530780
Ref: 63a8530780
Ref: library/types types TracebackType8530896
Ref: b058530896
Ref: library/types types FrameType8531241
Ref: 19778531241
Ref: library/types types GetSetDescriptorType8531399
Ref: 271b8531399
Ref: library/types types MemberDescriptorType8531775
Ref: 271c8531775
Ref: library/types types MappingProxyType8532573
Ref: 46d8532573
Ref: library/types types MappingProxyType copy8533630
Ref: 271d8533630
Ref: library/types types MappingProxyType get8533718
Ref: 271e8533718
Ref: library/types types MappingProxyType items8534021
Ref: 271f8534021
Ref: library/types types MappingProxyType keys8534159
Ref: 27208534159
Ref: library/types types MappingProxyType values8534258
Ref: 27218534258
Ref: library/types types CapsuleType8534649
Ref: 27228534649
Ref: Tipos padrão do interpretador-Footnote-18534796
Ref: Tipos padrão do interpretador-Footnote-28534838
Node: Classes e funções de utilidades adicionais8534880
Ref: library/types additional-utility-classes-and-functions8535112
Ref: 27248535112
Ref: library/types types SimpleNamespace8535219
Ref: 1d18535219
Ref: library/types types DynamicClassAttribute8537355
Ref: 62a8537355
Node: Funções de utilidade de corrotina8538087
Ref: library/types coroutine-utility-functions8538280
Ref: 27258538280
Ref: library/types types coroutine8538369
Ref: eb78538369
Node: copy — Operações de cópia profunda e cópia rasa8539233
Ref: library/copy doc8539460
Ref: 27268539460
Ref: library/copy copy-shallow-and-deep-copy-operations8539460
Ref: 27278539460
Ref: library/copy module-copy8539460
Ref: 258539460
Ref: library/copy translation-repo8539460
Ref: 27288539460
Ref: library/copy copy copy8540068
Ref: 5348540068
Ref: library/copy copy deepcopy8540139
Ref: b848540139
Ref: library/copy copy replace8540226
Ref: 1518540226
Ref: library/copy copy Error8540415
Ref: 27298540415
Ref: library/copy shallow-vs-deep-copy8540493
Ref: 1d7f8540493
Ref: library/copy object __copy__8542720
Ref: 15fc8542720
Ref: library/copy object __deepcopy__8542868
Ref: 15fd8542868
Ref: library/copy object __replace__8543606
Ref: 1528543606
Ref: copy — Operações de cópia profunda e cópia rasa-Footnote-18544023
Node: pprint — Impressão bonita de dados8544087
Ref: library/pprint doc8544293
Ref: 272a8544293
Ref: library/pprint module-pprint8544293
Ref: ae8544293
Ref: library/pprint pprint-data-pretty-printer8544293
Ref: 272b8544293
Ref: library/pprint translation-repo8544293
Ref: 272c8544293
Ref: pprint — Impressão bonita de dados-Footnote-18545553
Node: Funções<4>8545619
Ref: library/pprint functions8545735
Ref: 272d8545735
Ref: library/pprint pprint-functions8545735
Ref: 272e8545735
Ref: library/pprint pprint pp8545772
Ref: a2d8545772
Ref: library/pprint pprint pprint8548537
Ref: 82b8548537
Ref: library/pprint pprint pformat8548958
Ref: fb48548958
Ref: library/pprint pprint isreadable8549420
Ref: 272f8549420
Ref: library/pprint pprint isrecursive8549731
Ref: 27308549731
Ref: library/pprint pprint saferepr8550054
Ref: 27318550054
Node: Objetos PrettyPrinter8550726
Ref: library/pprint id18550861
Ref: 27328550861
Ref: library/pprint prettyprinter-objects8550861
Ref: 27338550861
Ref: library/pprint pprint PrettyPrinter8550924
Ref: fb38550924
Ref: library/pprint pprint PrettyPrinter pformat8552630
Ref: 27348552630
Ref: library/pprint pprint PrettyPrinter pprint8552834
Ref: 27358552834
Ref: library/pprint pprint PrettyPrinter isreadable8553232
Ref: 27368553232
Ref: library/pprint pprint PrettyPrinter isrecursive8553652
Ref: 27378553652
Ref: library/pprint pprint PrettyPrinter format8554008
Ref: 1a748554008
Node: Exemplo<3>8555212
Ref: library/pprint example8555326
Ref: 27388555326
Ref: library/pprint pprint-example8555326
Ref: 27398555326
Ref: Exemplo<3>-Footnote-18562671
Node: reprlib — Implementação alternativa à repr8562696
Ref: library/reprlib doc8562881
Ref: 273a8562881
Ref: library/reprlib module-reprlib8562881
Ref: bb8562881
Ref: library/reprlib reprlib-alternate-repr-implementation8562881
Ref: 273b8562881
Ref: library/reprlib translation-repo8562881
Ref: 273c8562881
Ref: library/reprlib reprlib Repr8563386
Ref: 273d8563386
Ref: library/reprlib reprlib aRepr8564449
Ref: 273f8564449
Ref: library/reprlib reprlib repr8564736
Ref: 27408564736
Ref: library/reprlib reprlib recursive_repr8565164
Ref: 12338565164
Ref: reprlib — Implementação alternativa à repr-Footnote-18565990
Node: Objetos Repr8566057
Ref: library/reprlib id18566185
Ref: 273e8566185
Ref: library/reprlib repr-objects8566185
Ref: 27428566185
Ref: library/reprlib reprlib Repr fillvalue8566453
Ref: 27438566453
Ref: library/reprlib reprlib Repr maxlevel8566606
Ref: 27448566606
Ref: library/reprlib reprlib Repr maxdict8566737
Ref: 27458566737
Ref: library/reprlib reprlib Repr maxlist8566764
Ref: 27468566764
Ref: library/reprlib reprlib Repr maxtuple8566791
Ref: 27478566791
Ref: library/reprlib reprlib Repr maxset8566819
Ref: 27488566819
Ref: library/reprlib reprlib Repr maxfrozenset8566845
Ref: 27498566845
Ref: library/reprlib reprlib Repr maxdeque8566877
Ref: 274a8566877
Ref: library/reprlib reprlib Repr maxarray8566905
Ref: 274b8566905
Ref: library/reprlib reprlib Repr maxlong8567135
Ref: 274c8567135
Ref: library/reprlib reprlib Repr maxstring8567309
Ref: 274d8567309
Ref: library/reprlib reprlib Repr maxother8567674
Ref: 274e8567674
Ref: library/reprlib reprlib Repr indent8567981
Ref: 274f8567981
Ref: library/reprlib reprlib Repr repr8569532
Ref: 27418569532
Ref: library/reprlib reprlib Repr repr18569666
Ref: 27508569666
Node: Estendendo objetos Repr8570543
Ref: library/reprlib subclassing-repr-objects8570671
Ref: 27518570671
Ref: library/reprlib subclassing-reprs8570671
Ref: 27528570671
Node: enum — Suporte a enumerações8571386
Ref: library/enum doc8571602
Ref: 27538571602
Ref: library/enum enum-support-for-enumerations8571602
Ref: 27548571602
Ref: library/enum module-enum8571602
Ref: 568571602
Ref: library/enum translation-repo8571602
Ref: 27558571602
Ref: enum — Suporte a enumerações-Footnote-18573610
Node: Conteúdo do módulo<2>8573674
Ref: library/enum module-contents8573792
Ref: 275a8573792
Node: Tipos de Dados<2>8577483
Ref: library/enum data-types8577634
Ref: 275e8577634
Ref: library/enum enum EnumType8577683
Ref: 1e58577683
Ref: library/enum enum EnumType __call__8578358
Ref: 27608578358
Ref: library/enum enum EnumType __contains__8579635
Ref: 27618579635
Ref: library/enum enum EnumType __dir__8580092
Ref: 27628580092
Ref: library/enum enum EnumType __getitem__8580474
Ref: 27638580474
Ref: library/enum enum EnumType __iter__8580691
Ref: 27648580691
Ref: library/enum enum EnumType __len__8580889
Ref: 27658580889
Ref: library/enum enum EnumType __members__8581020
Ref: 27668581020
Ref: library/enum enum EnumType __reversed__8581160
Ref: 27678581160
Ref: library/enum enum Enum8581380
Ref: 6308581380
Ref: library/enum enum Enum name8581469
Ref: 27688581469
Ref: library/enum enum Enum value8581610
Ref: 27698581610
Ref: library/enum enum Enum _name_8582572
Ref: 276b8582572
Ref: library/enum enum Enum _value_8582626
Ref: 276c8582626
Ref: library/enum enum Enum _order_8582727
Ref: 276d8582727
Ref: library/enum enum Enum _ignore_8582923
Ref: 276e8582923
Ref: library/enum enum Enum __dir__8583300
Ref: 198d8583300
Ref: library/enum enum Enum _generate_next_value_8584193
Ref: 27708584193
Ref: library/enum enum Enum __init__8585142
Ref: 27718585142
Ref: library/enum enum Enum __init_subclass__8585625
Ref: 27728585625
Ref: library/enum enum Enum _missing_8585790
Ref: 27738585790
Ref: library/enum enum Enum __new__8586698
Ref: 276a8586698
Ref: library/enum enum Enum __repr__8587365
Ref: 18828587365
Ref: library/enum enum Enum __str__8588142
Ref: 6228588142
Ref: library/enum enum Enum __format__8588818
Ref: 6208588818
Ref: library/enum enum Enum _add_alias_8589744
Ref: 27748589744
Ref: library/enum enum Enum _add_value_alias_8590098
Ref: 27758590098
Ref: library/enum enum IntEnum8590460
Ref: d008590460
Ref: library/enum enum StrEnum8591504
Ref: 61a8591504
Ref: library/enum enum Flag8592914
Ref: 6238592914
Ref: library/enum enum Flag __contains__8593198
Ref: 27768593198
Ref: library/enum enum Flag __or__8594651
Ref: 27778594651
Ref: library/enum enum Flag __and__8594830
Ref: 27788594830
Ref: library/enum enum Flag __xor__8595067
Ref: 27798595067
Ref: library/enum enum Flag _numeric_repr_8595605
Ref: 277a8595605
Ref: library/enum enum IntFlag8596108
Ref: cbb8596108
Ref: library/enum enum ReprEnum8597733
Ref: 61b8597733
Ref: library/enum enum EnumCheck8598253
Ref: 6268598253
Ref: library/enum enum EnumCheck UNIQUE8598458
Ref: 277b8598458
Ref: library/enum enum EnumCheck CONTINUOUS8598944
Ref: 277c8598944
Ref: library/enum enum EnumCheck NAMED_FLAGS8599473
Ref: 277d8599473
Ref: library/enum enum FlagBoundary8600348
Ref: 6248600348
Ref: library/enum enum FlagBoundary STRICT8600494
Ref: 277e8600494
Ref: library/enum enum FlagBoundary CONFORM8601142
Ref: 277f8601142
Ref: library/enum enum FlagBoundary EJECT8601610
Ref: 27808601610
Ref: library/enum enum FlagBoundary KEEP8602049
Ref: 27818602049
Ref: library/enum enum EnumDict8602579
Ref: 1e48602579
Ref: library/enum enum EnumDict member_names8603312
Ref: 27828603312
Node: Nomes __dunder__ suportados8603554
Ref: library/enum supported-dunder-names8603669
Ref: 27838603669
Node: Nomes _sunder_ suportados8604100
Ref: library/enum supported-sunder-names8604215
Ref: 27848604215
Ref: Nomes _sunder_ suportados-Footnote-18606012
Node: Utilities and Decorators8606099
Ref: library/enum ipython-s-rich-display8606232
Ref: 27858606232
Ref: library/enum utilities-and-decorators8606232
Ref: 27868606232
Ref: library/enum enum auto8606301
Ref: cbc8606301
Ref: library/enum enum property8607837
Ref: 6298607837
Ref: library/enum enum unique8608363
Ref: 275c8608363
Ref: library/enum enum verify8608993
Ref: 6258608993
Ref: library/enum enum member8609254
Ref: 6278609254
Ref: library/enum enum nonmember8609385
Ref: 6288609385
Ref: library/enum enum global_enum8609523
Ref: 62b8609523
Ref: library/enum enum show_flag_values8609897
Ref: 275d8609897
Node: Notas8610127
Ref: library/enum notes8610234
Ref: 275b8610234
Node: graphlib — Funcionalidade para operar com estruturas do tipo grafo8611168
Ref: library/graphlib doc8611328
Ref: 27878611328
Ref: library/graphlib graphlib-functionality-to-operate-with-graph-like-structures8611328
Ref: 27888611328
Ref: library/graphlib module-graphlib8611328
Ref: 658611328
Ref: library/graphlib translation-repo8611328
Ref: 27898611328
Ref: library/graphlib graphlib TopologicalSorter8611592
Ref: 8e78611592
Ref: library/graphlib graphlib TopologicalSorter add8615161
Ref: 278a8615161
Ref: library/graphlib graphlib TopologicalSorter prepare8615972
Ref: 278b8615972
Ref: library/graphlib graphlib TopologicalSorter is_active8616491
Ref: 278c8616491
Ref: library/graphlib graphlib TopologicalSorter done8617372
Ref: 278e8617372
Ref: library/graphlib graphlib TopologicalSorter get_ready8618083
Ref: 278d8618083
Ref: library/graphlib graphlib TopologicalSorter static_order8618685
Ref: 278f8618685
Ref: graphlib — Funcionalidade para operar com estruturas do tipo grafo-Footnote-18620211
Node: Exceções<4>8620279
Ref: library/graphlib exceptions8620397
Ref: 27918620397
Ref: library/graphlib graphlib CycleError8620509
Ref: 27908620509
Node: Módulos Matemáticos e Numéricos8621175
Ref: library/numeric doc8621343
Ref: 27928621343
Ref: library/numeric numeric8621343
Ref: 27938621343
Ref: library/numeric numeric-and-mathematical-modules8621343
Ref: 27948621343
Ref: library/numeric translation-repo8621343
Ref: 27958621343
Node: numbers — Classes base abstratas numéricas8622303
Ref: library/numbers doc8622459
Ref: 27968622459
Ref: library/numbers module-numbers8622459
Ref: 9e8622459
Ref: library/numbers numbers-numeric-abstract-base-classes8622459
Ref: 27978622459
Ref: library/numbers numbers Number8622892
Ref: 27988622892
Ref: numbers — Classes base abstratas numéricas-Footnote-18623206
Ref: numbers — Classes base abstratas numéricas-Footnote-28623273
Node: A torre numérica8623315
Ref: library/numbers the-numeric-tower8623458
Ref: 27998623458
Ref: library/numbers numbers Complex8623510
Ref: 279a8623510
Ref: library/numbers numbers Complex real8623964
Ref: 279b8623964
Ref: library/numbers numbers Complex imag8624051
Ref: 279c8624051
Ref: library/numbers numbers Complex conjugate8624145
Ref: 279d8624145
Ref: library/numbers numbers Real8624304
Ref: 232b8624304
Ref: library/numbers numbers Rational8624816
Ref: 13018624816
Ref: library/numbers numbers Rational numerator8625214
Ref: 279e8625214
Ref: library/numbers numbers Rational denominator8625302
Ref: 279f8625302
Ref: library/numbers numbers Integral8625394
Ref: 214b8625394
Node: Notas para implementadores de tipos8625776
Ref: library/numbers notes-for-type-implementers8625919
Ref: 27a08625919
Node: Adicionando mais ABCs numéricas8626844
Ref: library/numbers adding-more-numeric-abcs8626998
Ref: 27a18626998
Node: Implementando as operações aritméticas8627362
Ref: library/numbers id18627516
Ref: 27a28627516
Ref: library/numbers implementing-the-arithmetic-operations8627516
Ref: 20788627516
Node: math — Funções matemáticas8632248
Ref: library/math doc8632469
Ref: 27a38632469
Ref: library/math math-mathematical-functions8632469
Ref: 27a48632469
Ref: library/math module-math8632469
Ref: 8e8632469
Ref: library/math translation-repo8632469
Ref: 27a58632469
Ref: math — Funções matemáticas-Footnote-18647340
Ref: math — Funções matemáticas-Footnote-28647392
Ref: math — Funções matemáticas-Footnote-38647444
Ref: math — Funções matemáticas-Footnote-48647496
Node: Funções de teoria dos números8647548
Ref: library/math number-theoretic-functions8647686
Ref: 27b78647686
Ref: library/math math comb8647766
Ref: 6d08647766
Ref: library/math math factorial8648346
Ref: 94e8648346
Ref: library/math math gcd8648557
Ref: 9168648557
Ref: library/math math isqrt8649133
Ref: a0d8649133
Ref: library/math math lcm8649657
Ref: 9178649657
Ref: library/math math perm8650081
Ref: 6d18650081
Node: Arimética de ponto flutuante8650634
Ref: library/math floating-point-arithmetic8650826
Ref: 27b88650826
Ref: library/math math ceil8650902
Ref: 14058650902
Ref: library/math math fabs8651129
Ref: 27a68651129
Ref: library/math math floor8651197
Ref: 14048651197
Ref: library/math math fma8651435
Ref: 2058651435
Ref: library/math math fmod8652251
Ref: 21fd8652251
Ref: library/math math modf8653386
Ref: 27a78653386
Ref: library/math math remainder8653861
Ref: b688653861
Ref: library/math math trunc8654968
Ref: 14068654968
Node: Funções de manipulação de ponto flutuante8655835
Ref: library/math floating-point-manipulation-functions8656047
Ref: 27b98656047
Ref: library/math math copysign8656152
Ref: 141a8656152
Ref: library/math math frexp8656380
Ref: 27a88656380
Ref: library/math math isclose8657087
Ref: dd88657087
Ref: library/math math isfinite8658760
Ref: 122b8658760
Ref: library/math math isinf8658977
Ref: 14188658977
Ref: library/math math isnan8659113
Ref: 14198659113
Ref: library/math math ldexp8659241
Ref: 162b8659241
Ref: library/math math nextafter8659378
Ref: 4988659378
Ref: library/math math ulp8660091
Ref: 9188660091
Ref: Funções de manipulação de ponto flutuante-Footnote-18661313
Node: Funções de potências exponenciais e logarítmicas8661355
Ref: library/math power-exponential-and-logarithmic-functions8661565
Ref: 27ba8661565
Ref: library/math math cbrt8661686
Ref: 6618661686
Ref: library/math math exp8661786
Ref: 13588661786
Ref: library/math math exp28662009
Ref: 6608662009
Ref: library/math math expm18662104
Ref: 122c8662104
Ref: library/math math log8662756
Ref: 15088662756
Ref: library/math math log1p8662996
Ref: 141f8662996
Ref: library/math math log28663155
Ref: 111a8663155
Ref: library/math math log108663525
Ref: 27a98663525
Ref: library/math math pow8663663
Ref: 6628663663
Ref: library/math math sqrt8664575
Ref: a0e8664575
Ref: Funções de potências exponenciais e logarítmicas-Footnote-18664678
Node: Funções de soma e produto8664737
Ref: library/math summation-and-product-functions8664920
Ref: 27bb8664920
Ref: library/math math dist8664991
Ref: a0a8664991
Ref: library/math math fsum8665342
Ref: 141b8665342
Ref: library/math math hypot8666104
Ref: a0b8666104
Ref: library/math math prod8666883
Ref: a0c8666883
Ref: library/math math sumprod8667274
Ref: 4978667274
Ref: Funções de soma e produto-Footnote-18667791
Node: Conversão angular8667896
Ref: library/math angular-conversion8668053
Ref: 27bc8668053
Ref: library/math math degrees8668107
Ref: 27aa8668107
Ref: library/math math radians8668192
Ref: 27ab8668192
Node: Funções trigonométricas8668277
Ref: library/math trigonometric-functions8668430
Ref: 27bd8668430
Ref: library/math math acos8668498
Ref: 27ac8668498
Ref: library/math math asin8668627
Ref: 27ad8668627
Ref: library/math math atan8668759
Ref: 27ae8668759
Ref: library/math math atan28668895
Ref: 27af8668895
Ref: library/math math cos8669406
Ref: 15078669406
Ref: library/math math sin8669475
Ref: 15068669475
Ref: library/math math tan8669541
Ref: 27b08669541
Node: Funções hiperbólicas8669611
Ref: library/math hyperbolic-functions8669765
Ref: 27be8669765
Ref: library/math math acosh8669946
Ref: 141c8669946
Ref: library/math math asinh8670029
Ref: 141d8670029
Ref: library/math math atanh8670109
Ref: 141e8670109
Ref: library/math math cosh8670193
Ref: 27b18670193
Ref: library/math math sinh8670267
Ref: 27b28670267
Ref: library/math math tanh8670338
Ref: 27b38670338
Ref: Funções hiperbólicas-Footnote-18670449
Node: Funções especiais8670508
Ref: library/math special-functions8670649
Ref: 27bf8670649
Ref: library/math math erf8670704
Ref: bf38670704
Ref: library/math math erfc8671139
Ref: bf48671139
Ref: library/math math gamma8671443
Ref: 122d8671443
Ref: library/math math lgamma8671547
Ref: 122e8671547
Ref: Funções especiais-Footnote-18671729
Ref: Funções especiais-Footnote-28671781
Ref: Funções especiais-Footnote-38671852
Ref: Funções especiais-Footnote-48671905
Ref: Funções especiais-Footnote-58671964
Node: Constantes<2>8672016
Ref: library/math constants8672125
Ref: 27c08672125
Ref: library/math math pi8672166
Ref: 27b48672166
Ref: library/math math e8672265
Ref: 27b58672265
Ref: library/math math tau8672362
Ref: 27b68672362
Ref: library/math math inf8672771
Ref: ca18672771
Ref: library/math math nan8672970
Ref: 6638672970
Ref: Constantes<2>-Footnote-18675048
Ref: Constantes<2>-Footnote-28675084
Ref: Constantes<2>-Footnote-38675112
Node: cmath — Funções matemáticas para números complexos8675159
Ref: library/cmath doc8675398
Ref: 27c18675398
Ref: library/cmath cmath-mathematical-functions-for-complex-numbers8675398
Ref: 27c28675398
Ref: library/cmath module-cmath8675398
Ref: 188675398
Ref: library/cmath translation-repo8675398
Ref: 27c38675398
Node: Conversões de e para coordenadas polares8684065
Ref: library/cmath conversions-to-and-from-polar-coordinates8684246
Ref: 27dc8684246
Ref: library/cmath cmath phase8685070
Ref: 27c58685070
Ref: library/cmath cmath polar8685867
Ref: 27c68685867
Ref: library/cmath cmath rect8686107
Ref: 27c78686107
Node: Funções de potência e logarítmicas8686285
Ref: library/cmath power-and-logarithmic-functions8686504
Ref: 27dd8686504
Ref: library/cmath cmath exp8686595
Ref: 27c88686595
Ref: library/cmath cmath log8686716
Ref: 27c98686716
Ref: library/cmath cmath log108686972
Ref: 27ca8686972
Ref: library/cmath cmath sqrt8687117
Ref: 27c48687117
Node: Funções trigonométricas<2>8687254
Ref: library/cmath trigonometric-functions8687458
Ref: 27de8687458
Ref: library/cmath cmath acos8687526
Ref: 27cb8687526
Ref: library/cmath cmath asin8687771
Ref: 27cc8687771
Ref: library/cmath cmath atan8687903
Ref: 27cd8687903
Ref: library/cmath cmath cos8688177
Ref: 27ce8688177
Ref: library/cmath cmath sin8688238
Ref: 27cf8688238
Ref: library/cmath cmath tan8688296
Ref: 27d08688296
Node: Funções hiperbólicas<2>8688358
Ref: library/cmath hyperbolic-functions8688552
Ref: 27df8688552
Ref: library/cmath cmath acosh8688614
Ref: 27d18688614
Ref: library/cmath cmath asinh8688808
Ref: 27d28688808
Ref: library/cmath cmath atanh8689095
Ref: 27d38689095
Ref: library/cmath cmath cosh8689362
Ref: 27d48689362
Ref: library/cmath cmath sinh8689437
Ref: 27d58689437
Ref: library/cmath cmath tanh8689509
Ref: 27d68689509
Node: Funções de classificação8689585
Ref: library/cmath classification-functions8689763
Ref: 27e08689763
Ref: library/cmath cmath isfinite8689834
Ref: 27d78689834
Ref: library/cmath cmath isinf8690022
Ref: 27d88690022
Ref: library/cmath cmath isnan8690171
Ref: 27d98690171
Ref: library/cmath cmath isclose8690315
Ref: dd98690315
Ref: Funções de classificação-Footnote-18692011
Node: Constantes<3>8692053
Ref: library/cmath constants8692196
Ref: 27e18692196
Ref: library/cmath cmath pi8692235
Ref: 27da8692235
Ref: library/cmath cmath e8692316
Ref: 27db8692316
Ref: library/cmath cmath tau8692395
Ref: c9e8692395
Ref: library/cmath cmath inf8692510
Ref: c9f8692510
Ref: library/cmath cmath infj8692640
Ref: ca28692640
Ref: library/cmath cmath nan8692828
Ref: ca08692828
Ref: library/cmath cmath nanj8693016
Ref: ca38693016
Node: decimal — Aritmética de ponto fixo decimal e ponto flutuante8694528
Ref: library/decimal doc8694768
Ref: 27e28694768
Ref: library/decimal decimal-decimal-fixed-point-and-floating-point-arithmetic8694768
Ref: 27e38694768
Ref: library/decimal module-decimal8694768
Ref: 368694768
Ref: library/decimal translation-repo8694768
Ref: 27e48694768
Ref: decimal — Aritmética de ponto fixo decimal e ponto flutuante-Footnote-18700355
Ref: decimal — Aritmética de ponto fixo decimal e ponto flutuante-Footnote-28700422
Ref: decimal — Aritmética de ponto fixo decimal e ponto flutuante-Footnote-38700485
Node: Tutorial de início rápido8700539
Ref: library/decimal decimal-tutorial8700693
Ref: 27f48700693
Ref: library/decimal quick-start-tutorial8700693
Ref: 27f58700693
Node: Objetos de Decimal8708946
Ref: library/decimal decimal-decimal8709128
Ref: 27f88709128
Ref: library/decimal decimal-objects8709128
Ref: 27f98709128
Ref: library/decimal decimal Decimal8709183
Ref: 29d8709183
Ref: library/decimal decimal Decimal adjusted8714883
Ref: 27fa8714883
Ref: library/decimal decimal Decimal as_integer_ratio8715240
Ref: cb38715240
Ref: library/decimal decimal Decimal as_tuple8715703
Ref: 27fb8715703
Ref: library/decimal decimal Decimal canonical8715868
Ref: 27fc8715868
Ref: library/decimal decimal Decimal compare8716140
Ref: 27fd8716140
Ref: library/decimal decimal Decimal compare_signal8716586
Ref: 27fe8716586
Ref: library/decimal decimal Decimal compare_total8716916
Ref: 27ff8716916
Ref: library/decimal decimal Decimal compare_total_mag8718269
Ref: 28008718269
Ref: library/decimal decimal Decimal conjugate8718928
Ref: 28018718928
Ref: library/decimal decimal Decimal copy_abs8719081
Ref: 28028719081
Ref: library/decimal decimal Decimal copy_negate8719315
Ref: 28038719315
Ref: library/decimal decimal Decimal copy_sign8719547
Ref: 28048719547
Ref: library/decimal decimal Decimal exp8720154
Ref: 10e98720154
Ref: library/decimal decimal Decimal from_float8720603
Ref: 12448720603
Ref: library/decimal decimal Decimal fma8721808
Ref: 28058721808
Ref: library/decimal decimal Decimal is_canonical8722071
Ref: 28068722071
Ref: library/decimal decimal Decimal is_finite8722368
Ref: 28078722368
Ref: library/decimal decimal Decimal is_infinite8722545
Ref: 28088722545
Ref: library/decimal decimal Decimal is_nan8722711
Ref: 28098722711
Ref: library/decimal decimal Decimal is_normal8722874
Ref: 280a8722874
Ref: library/decimal decimal Decimal is_qnan8723101
Ref: 280b8723101
Ref: library/decimal decimal Decimal is_signed8723252
Ref: 280c8723252
Ref: library/decimal decimal Decimal is_snan8723465
Ref: 280d8723465
Ref: library/decimal decimal Decimal is_subnormal8723610
Ref: 280e8723610
Ref: library/decimal decimal Decimal is_zero8723769
Ref: 280f8723769
Ref: library/decimal decimal Decimal ln8723932
Ref: 10ea8723932
Ref: library/decimal decimal Decimal log108724152
Ref: 28108724152
Ref: library/decimal decimal Decimal logb8724370
Ref: 28118724370
Ref: library/decimal decimal Decimal logical_and8724789
Ref: 28128724789
Ref: library/decimal decimal Decimal logical_invert8725070
Ref: 28148725070
Ref: library/decimal decimal Decimal logical_or8725256
Ref: 28158725256
Ref: library/decimal decimal Decimal logical_xor8725534
Ref: 28168725534
Ref: library/decimal decimal Decimal max8725837
Ref: 28178725837
Ref: library/decimal decimal Decimal max_mag8726153
Ref: 28188726153
Ref: library/decimal decimal Decimal min8726335
Ref: 28198726335
Ref: library/decimal decimal Decimal min_mag8726651
Ref: 281a8726651
Ref: library/decimal decimal Decimal next_minus8726833
Ref: 281b8726833
Ref: library/decimal decimal Decimal next_plus8727081
Ref: 281c8727081
Ref: library/decimal decimal Decimal next_toward8727325
Ref: 281d8727325
Ref: library/decimal decimal Decimal normalize8727717
Ref: 281e8727717
Ref: library/decimal decimal Decimal number_class8728849
Ref: 281f8728849
Ref: library/decimal decimal Decimal quantize8729976
Ref: 10ef8729976
Ref: library/decimal decimal Decimal radix8731358
Ref: 28218731358
Ref: library/decimal decimal Decimal remainder_near8731578
Ref: 28228731578
Ref: library/decimal decimal Decimal rotate8732441
Ref: 28238732441
Ref: library/decimal decimal Decimal same_quantum8733198
Ref: 28248733198
Ref: library/decimal decimal Decimal scaleb8733664
Ref: 28258733664
Ref: library/decimal decimal Decimal shift8733947
Ref: 28268733947
Ref: library/decimal decimal Decimal sqrt8734625
Ref: 28278734625
Ref: library/decimal decimal Decimal to_eng_string8734736
Ref: 28288734736
Ref: library/decimal decimal Decimal to_integral8735214
Ref: 28298735214
Ref: library/decimal decimal Decimal to_integral_exact8735446
Ref: 282b8735446
Ref: library/decimal decimal Decimal to_integral_value8735955
Ref: 282a8735955
Node: Operandos lógicos8738657
Ref: library/decimal logical-operands8738730
Ref: 282c8738730
Ref: library/decimal logical-operands-label8738730
Ref: 28138738730
Node: Objetos de contexto8739109
Ref: library/decimal context-objects8739277
Ref: 282d8739277
Ref: library/decimal decimal-context8739277
Ref: 247b8739277
Ref: library/decimal decimal getcontext8739701
Ref: 16be8739701
Ref: library/decimal decimal setcontext8739790
Ref: 27f68739790
Ref: library/decimal decimal localcontext8740035
Ref: 13cd8740035
Ref: library/decimal decimal BasicContext8741718
Ref: 10e38741718
Ref: library/decimal decimal ExtendedContext8742248
Ref: 10e48742248
Ref: library/decimal decimal DefaultContext8742966
Ref: 10e28742966
Ref: library/decimal decimal Context8744131
Ref: 10ee8744131
Ref: library/decimal decimal Context prec8744545
Ref: 282e8744545
Ref: library/decimal decimal Context rounding8744714
Ref: 282f8744714
Ref: library/decimal decimal Context traps8744840
Ref: 10ed8744840
Ref: library/decimal decimal Context flags8744865
Ref: 10ec8744865
Ref: library/decimal decimal Context Emin8745065
Ref: 10e68745065
Ref: library/decimal decimal Context Emax8745089
Ref: 10e58745089
Ref: library/decimal decimal Context capitals8745355
Ref: 28318745355
Ref: library/decimal decimal Context clamp8745614
Ref: 11dd8745614
Ref: library/decimal decimal Context clear_flags8747556
Ref: 27f78747556
Ref: library/decimal decimal Context clear_traps8747647
Ref: 28328747647
Ref: library/decimal decimal Context copy8747773
Ref: 28338747773
Ref: library/decimal decimal Context copy_decimal8747846
Ref: 28348747846
Ref: library/decimal decimal Context create_decimal8747949
Ref: 10e88747949
Ref: library/decimal decimal Context create_decimal_from_float8749192
Ref: 28358749192
Ref: library/decimal decimal Context Etiny8750034
Ref: 28208750034
Ref: library/decimal decimal Context Etop8750296
Ref: 28368750296
Ref: library/decimal decimal Context abs8750801
Ref: 28378750801
Ref: library/decimal decimal Context add8750875
Ref: 28388750875
Ref: library/decimal decimal Context canonical8750948
Ref: 134b8750948
Ref: library/decimal decimal Context compare8751034
Ref: 28398751034
Ref: library/decimal decimal Context compare_signal8751115
Ref: 283a8751115
Ref: library/decimal decimal Context compare_total8751223
Ref: 283b8751223
Ref: library/decimal decimal Context compare_total_mag8751337
Ref: 283c8751337
Ref: library/decimal decimal Context copy_abs8751484
Ref: 283d8751484
Ref: library/decimal decimal Context copy_negate8751585
Ref: 283e8751585
Ref: library/decimal decimal Context copy_sign8751683
Ref: 283f8751683
Ref: library/decimal decimal Context divide8751764
Ref: 28408751764
Ref: library/decimal decimal Context divide_int8751841
Ref: 28418751841
Ref: library/decimal decimal Context divmod8751948
Ref: 28428751948
Ref: library/decimal decimal Context exp8752056
Ref: 28438752056
Ref: library/decimal decimal Context fma8752119
Ref: 28448752119
Ref: library/decimal decimal Context is_canonical8752210
Ref: 134c8752210
Ref: library/decimal decimal Context is_finite8752349
Ref: 28458752349
Ref: library/decimal decimal Context is_infinite8752482
Ref: 28468752482
Ref: library/decimal decimal Context is_nan8752619
Ref: 28478752619
Ref: library/decimal decimal Context is_normal8752755
Ref: 28488752755
Ref: library/decimal decimal Context is_qnan8752899
Ref: 28498752899
Ref: library/decimal decimal Context is_signed8753041
Ref: 284a8753041
Ref: library/decimal decimal Context is_snan8753176
Ref: 284b8753176
Ref: library/decimal decimal Context is_subnormal8753319
Ref: 284c8753319
Ref: library/decimal decimal Context is_zero8753458
Ref: 284d8753458
Ref: library/decimal decimal Context ln8753587
Ref: 284e8753587
Ref: library/decimal decimal Context log108753672
Ref: 284f8753672
Ref: library/decimal decimal Context logb8753754
Ref: 28508753754
Ref: library/decimal decimal Context logical_and8753848
Ref: 28518753848
Ref: library/decimal decimal Context logical_invert8753964
Ref: 28528753964
Ref: library/decimal decimal Context logical_or8754050
Ref: 28538754050
Ref: library/decimal decimal Context logical_xor8754166
Ref: 28548754166
Ref: library/decimal decimal Context max8754303
Ref: 28558754303
Ref: library/decimal decimal Context max_mag8754403
Ref: 28568754403
Ref: library/decimal decimal Context min8754510
Ref: 28578754510
Ref: library/decimal decimal Context min_mag8754610
Ref: 28588754610
Ref: library/decimal decimal Context minus8754717
Ref: 28598754717
Ref: library/decimal decimal Context multiply8754845
Ref: 285a8754845
Ref: library/decimal decimal Context next_minus8754926
Ref: 285b8754926
Ref: library/decimal decimal Context next_plus8755028
Ref: 285c8755028
Ref: library/decimal decimal Context next_toward8755129
Ref: 285d8755129
Ref: library/decimal decimal Context normalize8755240
Ref: 285e8755240
Ref: library/decimal decimal Context number_class8755326
Ref: 285f8755326
Ref: library/decimal decimal Context plus8755418
Ref: 28608755418
Ref: library/decimal decimal Context power8755664
Ref: 28618755664
Ref: library/decimal decimal Context quantize8757554
Ref: 28628757554
Ref: library/decimal decimal Context radix8757680
Ref: 28638757680
Ref: library/decimal decimal Context remainder8757763
Ref: 28648757763
Ref: library/decimal decimal Context remainder_near8757955
Ref: 28658757955
Ref: library/decimal decimal Context rotate8758185
Ref: 28668758185
Ref: library/decimal decimal Context same_quantum8758273
Ref: 28678758273
Ref: library/decimal decimal Context scaleb8758392
Ref: 28688758392
Ref: library/decimal decimal Context shift8758518
Ref: 28698758518
Ref: library/decimal decimal Context sqrt8758612
Ref: 286a8758612
Ref: library/decimal decimal Context subtract8758734
Ref: 286b8758734
Ref: library/decimal decimal Context to_eng_string8758821
Ref: 286c8758821
Ref: library/decimal decimal Context to_integral_exact8759188
Ref: 286d8759188
Ref: library/decimal decimal Context to_sci_string8759278
Ref: 286e8759278
Node: Constantes<4>8759393
Ref: library/decimal constants8759566
Ref: 286f8759566
Ref: library/decimal decimal-rounding-modes8759566
Ref: 28708759566
Ref: library/decimal decimal MAX_PREC8760018
Ref: 10df8760018
Ref: library/decimal decimal MAX_EMAX8760153
Ref: 10e08760153
Ref: library/decimal decimal MIN_EMIN8760288
Ref: 10e18760288
Ref: library/decimal decimal MIN_ETINY8760424
Ref: 28718760424
Ref: library/decimal decimal HAVE_THREADS8760552
Ref: 10dd8760552
Ref: library/decimal decimal HAVE_CONTEXTVAR8760716
Ref: 1efb8760716
Node: Modos de arredondamento8761109
Ref: library/decimal rounding-modes8761269
Ref: 28308761269
Ref: library/decimal decimal ROUND_CEILING8761334
Ref: 27e58761334
Ref: library/decimal decimal ROUND_DOWN8761404
Ref: 27e68761404
Ref: library/decimal decimal ROUND_FLOOR8761461
Ref: 27e78761461
Ref: library/decimal decimal ROUND_HALF_DOWN8761530
Ref: 27e88761530
Ref: library/decimal decimal ROUND_HALF_EVEN8761632
Ref: 27e98761632
Ref: library/decimal decimal ROUND_HALF_UP8761760
Ref: 27ea8761760
Ref: library/decimal decimal ROUND_UP8761865
Ref: 27eb8761865
Ref: library/decimal decimal ROUND_05UP8761931
Ref: 27ec8761931
Node: Sinais8762114
Ref: library/decimal decimal-signals8762296
Ref: 28728762296
Ref: library/decimal signals8762296
Ref: 28738762296
Ref: library/decimal decimal Clamped8763112
Ref: 27ed8763112
Ref: library/decimal decimal DecimalException8763441
Ref: 28748763441
Ref: library/decimal decimal DivisionByZero8763569
Ref: 27ee8763569
Ref: library/decimal decimal Inexact8763919
Ref: 27ef8763919
Ref: library/decimal decimal InvalidOperation8764263
Ref: 10e78764263
Ref: library/decimal decimal Overflow8764717
Ref: 27f28764717
Ref: library/decimal decimal Rounded8765163
Ref: 27f08765163
Ref: library/decimal decimal Subnormal8765579
Ref: 27f18765579
Ref: library/decimal decimal Underflow8765841
Ref: 27f38765841
Ref: library/decimal decimal FloatOperation8766105
Ref: 10dc8766105
Node: Observações sobre ponto flutuante8767507
Ref: library/decimal decimal-notes8767689
Ref: 28758767689
Ref: library/decimal floating-point-notes8767689
Ref: 28768767689
Node: Atenuando o erro de arredondamento com maior precisão8767867
Ref: library/decimal mitigating-round-off-error-with-increased-precision8768019
Ref: 28778768019
Node: Valores especiais8769758
Ref: library/decimal special-values8769910
Ref: 28788769910
Node: Trabalhando com threads8773263
Ref: library/decimal decimal-threads8773447
Ref: 28798773447
Ref: library/decimal working-with-threads8773447
Ref: 287a8773447
Node: Receitas8774874
Ref: library/decimal decimal-recipes8775040
Ref: 287b8775040
Ref: library/decimal recipes8775040
Ref: 287c8775040
Node: FAQ sobre Decimal8780091
Ref: library/decimal decimal-faq8780225
Ref: 287d8780225
Ref: library/decimal id18780225
Ref: 287e8780225
Ref: FAQ sobre Decimal-Footnote-18789762
Ref: FAQ sobre Decimal-Footnote-28789829
Ref: FAQ sobre Decimal-Footnote-38789865
Ref: FAQ sobre Decimal-Footnote-48789926
Ref: FAQ sobre Decimal-Footnote-58790029
Node: fractions — Números racionais8790186
Ref: library/fractions doc8790412
Ref: 287f8790412
Ref: library/fractions fractions-rational-numbers8790412
Ref: 28808790412
Ref: library/fractions module-fractions8790412
Ref: 5d8790412
Ref: library/fractions translation-repo8790412
Ref: 28818790412
Ref: library/fractions fractions Fraction8790820
Ref: 1e78790820
Ref: library/fractions fractions Fraction numerator8795404
Ref: 28838795404
Ref: library/fractions fractions Fraction denominator8795483
Ref: 28848795483
Ref: library/fractions fractions Fraction as_integer_ratio8795606
Ref: 28858795606
Ref: library/fractions fractions Fraction is_integer8795861
Ref: 28868795861
Ref: library/fractions fractions Fraction from_float8795993
Ref: 12458795993
Ref: library/fractions fractions Fraction from_decimal8796466
Ref: 12468796466
Ref: library/fractions fractions Fraction limit_denominator8796857
Ref: 28828796857
Ref: library/fractions fractions Fraction __floor__8797764
Ref: 187f8797764
Ref: library/fractions fractions Fraction __ceil__8798067
Ref: 187e8798067
Ref: library/fractions fractions Fraction __round__8798252
Ref: 187d8798252
Ref: library/fractions fractions Fraction __format__8798765
Ref: 28878798765
Ref: fractions — Números racionais-Footnote-18801238
Ref: fractions — Números racionais-Footnote-28801307
Node: random — Gera números pseudoaleatórios8801349
Ref: library/random doc8801550
Ref: 28888801550
Ref: library/random module-random8801550
Ref: b88801550
Ref: library/random random-generate-pseudo-random-numbers8801550
Ref: 28898801550
Ref: library/random translation-repo8801550
Ref: 288a8801550
Ref: random — Gera números pseudoaleatórios-Footnote-18805135
Ref: random — Gera números pseudoaleatórios-Footnote-28805201
Node: Funções de contabilidade8805291
Ref: library/random bookkeeping-functions8805425
Ref: 288c8805425
Ref: library/random random seed8805494
Ref: 12b58805494
Ref: library/random random getstate8806662
Ref: 288d8806662
Ref: library/random random setstate8806859
Ref: 288e8806859
Node: Funções para bytes8807134
Ref: library/random functions-for-bytes8807300
Ref: 288f8807300
Ref: library/random random randbytes8807357
Ref: 16298807357
Node: Funções para inteiros8807577
Ref: library/random functions-for-integers8807743
Ref: 28918807743
Ref: library/random random randrange8807806
Ref: 86f8807806
Ref: library/random random randint8808956
Ref: 12708808956
Ref: library/random random getrandbits8809108
Ref: 10438809108
Node: Funções para sequências8809591
Ref: library/random functions-for-sequences8809762
Ref: 28928809762
Ref: library/random random choice8809830
Ref: 12718809830
Ref: library/random random choices8809996
Ref: ce68809996
Ref: library/random random shuffle8812211
Ref: 7478812211
Ref: library/random random sample8812939
Ref: 7468812939
Node: Distribuições discretas8814633
Ref: library/random discrete-distributions8814811
Ref: 28938814811
Ref: library/random random binomialvariate8814933
Ref: 4b08814933
Ref: Distribuições discretas-Footnote-18815531
Node: Distribuições com valor real8815595
Ref: library/random id18815766
Ref: 28948815766
Ref: library/random real-valued-distributions8815766
Ref: 28958815766
Ref: library/random random random8816154
Ref: 7488816154
Ref: library/random random uniform8816289
Ref: 28968816289
Ref: library/random random triangular8816645
Ref: 28978816645
Ref: library/random random betavariate8817035
Ref: 28988817035
Ref: library/random random expovariate8817229
Ref: 4b18817229
Ref: library/random random gammavariate8817697
Ref: 28998817697
Ref: library/random random gauss8818226
Ref: 19628818226
Ref: library/random random lognormvariate8819014
Ref: 289a8819014
Ref: library/random random normalvariate8819309
Ref: 19638819309
Ref: library/random random vonmisesvariate8819526
Ref: 289b8819526
Ref: library/random random paretovariate8819877
Ref: 289c8819877
Ref: library/random random weibullvariate8819988
Ref: 289d8819988
Node: Gerador alternativo8820144
Ref: library/random alternative-generator8820319
Ref: 289e8820319
Ref: library/random random Random8820376
Ref: 19e78820376
Ref: library/random random Random seed8820904
Ref: 1af98820904
Ref: library/random random Random getstate8821107
Ref: 289f8821107
Ref: library/random random Random setstate8821301
Ref: 28a08821301
Ref: library/random random Random random8821500
Ref: 28a18821500
Ref: library/random random Random getrandbits8821794
Ref: 28a28821794
Ref: library/random random Random randbytes8821995
Ref: 9308821995
Ref: library/random random SystemRandom8822192
Ref: 288b8822192
Node: Notas sobre reprodutibilidade8822713
Ref: library/random notes-on-reproducibility8822869
Ref: 28a38822869
Node: Exemplos<4>8823688
Ref: library/random examples8823836
Ref: 28a48823836
Ref: library/random random-examples8823836
Ref: 121c8823836
Ref: Exemplos<4>-Footnote-18829230
Ref: Exemplos<4>-Footnote-28829297
Ref: Exemplos<4>-Footnote-38829378
Ref: Exemplos<4>-Footnote-48829424
Ref: Exemplos<4>-Footnote-58829476
Ref: Exemplos<4>-Footnote-68829531
Ref: Exemplos<4>-Footnote-78829599
Ref: Exemplos<4>-Footnote-88829635
Ref: Exemplos<4>-Footnote-98829705
Node: Receitas<2>8829741
Ref: library/random recipes8829886
Ref: 28a58829886
Ref: Receitas<2>-Footnote-18833802
Node: Uso na linha de comando<2>8833870
Ref: library/random command-line-usage8834032
Ref: 28a68834032
Ref: library/random random-cli8834032
Ref: 1548834032
Ref: library/random cmdoption-random-h8834326
Ref: 28a78834326
Ref: library/random cmdoption-random-help8834326
Ref: 28a88834326
Ref: library/random cmdoption-random-c8834390
Ref: 28a98834390
Ref: library/random cmdoption-random-choice8834425
Ref: 28aa8834425
Ref: library/random cmdoption-random-i8834534
Ref: 28ab8834534
Ref: library/random cmdoption-random-integer8834553
Ref: 28ac8834553
Ref: library/random cmdoption-random-f8834674
Ref: 28ad8834674
Ref: library/random cmdoption-random-float8834693
Ref: 28ae8834693
Node: Exemplos na linha de comando8835053
Ref: library/random command-line-example8835195
Ref: 28af8835195
Ref: library/random random-cli-example8835195
Ref: 28b08835195
Node: statistics — Funções estatísticas8836065
Ref: library/statistics doc8836225
Ref: 28b18836225
Ref: library/statistics module-statistics8836225
Ref: d28836225
Ref: library/statistics statistics-mathematical-statistics-functions8836225
Ref: 28b28836225
Ref: library/statistics translation-repo8836225
Ref: 28b38836225
Ref: statistics — Funções estatísticas-Footnote-18838937
Ref: statistics — Funções estatísticas-Footnote-28839007
Ref: statistics — Funções estatísticas-Footnote-38839033
Node: Médias e medidas de valor central8839060
Ref: library/statistics averages-and-measures-of-central-location8839201
Ref: 28b48839201
Node: Medidas de espalhamento8841111
Ref: library/statistics measures-of-spread8841310
Ref: 28bb8841310
Node: Estatísticas para relações entre duas entradas8841941
Ref: library/statistics statistics-for-relations-between-two-inputs8842128
Ref: 28bd8842128
Node: Detalhes das funções8842724
Ref: library/statistics function-details8842901
Ref: 28be8842901
Ref: library/statistics statistics mean8843125
Ref: 6d28843125
Ref: library/statistics statistics fmean8844775
Ref: a3e8844775
Ref: library/statistics statistics geometric_mean8845858
Ref: a3f8845858
Ref: library/statistics statistics harmonic_mean8846589
Ref: d028846589
Ref: library/statistics statistics kde8848284
Ref: 24a8848284
Ref: library/statistics statistics kde_random8850393
Ref: 24b8850393
Ref: library/statistics statistics median8851571
Ref: 28b58851571
Ref: library/statistics statistics median_low8852711
Ref: 28b68852711
Ref: library/statistics statistics median_high8853483
Ref: 28b78853483
Ref: library/statistics statistics median_grouped8854258
Ref: 28b88854258
Ref: library/statistics statistics mode8856278
Ref: 28b98856278
Ref: library/statistics statistics multimode8857976
Ref: 28ba8857976
Ref: library/statistics statistics pstdev8858387
Ref: 15d38858387
Ref: library/statistics statistics pvariance8858687
Ref: 28bc8858687
Ref: library/statistics statistics stdev8861186
Ref: 6d48861186
Ref: library/statistics statistics variance8861477
Ref: 6d38861477
Ref: library/statistics statistics quantiles8863958
Ref: a408863958
Ref: library/statistics statistics covariance8867119
Ref: 8338867119
Ref: library/statistics statistics correlation8867787
Ref: 4bc8867787
Ref: library/statistics statistics linear_regression8870032
Ref: 8348870032
Ref: Detalhes das funções-Footnote-18872703
Ref: Detalhes das funções-Footnote-28872749
Ref: Detalhes das funções-Footnote-38872808
Ref: Detalhes das funções-Footnote-48872904
Ref: Detalhes das funções-Footnote-58872962
Ref: Detalhes das funções-Footnote-68873041
Ref: Detalhes das funções-Footnote-78873092
Ref: Detalhes das funções-Footnote-88873162
Ref: Detalhes das funções-Footnote-98873243
Ref: Detalhes das funções-Footnote-108873315
Ref: Detalhes das funções-Footnote-118873379
Node: Exceções<5>8873437
Ref: library/statistics exceptions8873583
Ref: 28c08873583
Ref: library/statistics statistics StatisticsError8873655
Ref: 28bf8873655
Node: Objetos NormalDist8873791
Ref: library/statistics normaldist-objects8873937
Ref: 28c18873937
Ref: library/statistics statistics NormalDist8874341
Ref: a418874341
Ref: library/statistics statistics NormalDist mean8874615
Ref: 28c28874615
Ref: library/statistics statistics NormalDist median8874752
Ref: 28c38874752
Ref: library/statistics statistics NormalDist mode8874880
Ref: 28c48874880
Ref: library/statistics statistics NormalDist stdev8875003
Ref: 28c58875003
Ref: library/statistics statistics NormalDist variance8875137
Ref: 28c68875137
Ref: library/statistics statistics NormalDist from_samples8875308
Ref: 28c78875308
Ref: library/statistics statistics NormalDist samples8875958
Ref: 28c88875958
Ref: library/statistics statistics NormalDist pdf8876621
Ref: 28c98876621
Ref: library/statistics statistics NormalDist cdf8877275
Ref: 28ca8877275
Ref: library/statistics statistics NormalDist inv_cdf8877558
Ref: 28cb8877558
Ref: library/statistics statistics NormalDist overlap8878023
Ref: 28cc8878023
Ref: library/statistics statistics NormalDist quantiles8878302
Ref: 28cd8878302
Ref: library/statistics statistics NormalDist zscore8878780
Ref: 28ce8878780
Ref: Objetos NormalDist-Footnote-18880296
Ref: Objetos NormalDist-Footnote-28880355
Ref: Objetos NormalDist-Footnote-38880419
Ref: Objetos NormalDist-Footnote-48880476
Ref: Objetos NormalDist-Footnote-58880529
Ref: Objetos NormalDist-Footnote-68880586
Ref: Objetos NormalDist-Footnote-78880647
Ref: Objetos NormalDist-Footnote-88880705
Ref: Objetos NormalDist-Footnote-98880758
Ref: Objetos NormalDist-Footnote-108880807
Ref: Objetos NormalDist-Footnote-118880865
Ref: Objetos NormalDist-Footnote-128880938
Ref: Objetos NormalDist-Footnote-138880985
Ref: Objetos NormalDist-Footnote-148881120
Ref: Objetos NormalDist-Footnote-158881167
Ref: Objetos NormalDist-Footnote-168881245
Node: Exemplos e receitas<2>8881330
Ref: library/statistics examples-and-recipes8881454
Ref: 28cf8881454
Node: Problemas clássicos de probabilidade8881693
Ref: library/statistics classic-probability-problems8881839
Ref: 28d08881839
Ref: Problemas clássicos de probabilidade-Footnote-18882733
Ref: Problemas clássicos de probabilidade-Footnote-28882804
Ref: Problemas clássicos de probabilidade-Footnote-38882850
Node: Entradas de Monte Carlo para simulações8882894
Ref: library/statistics monte-carlo-inputs-for-simulations8883091
Ref: 28d18883091
Ref: Entradas de Monte Carlo para simulações-Footnote-18883811
Node: Aproximação de distribuições binomiais8883872
Ref: library/statistics approximating-binomial-distributions8884064
Ref: 28d28884064
Ref: Aproximação de distribuições binomiais-Footnote-18885592
Node: Classificador bayesiano ingênuo8885656
Ref: library/statistics naive-bayesian-classifier8885798
Ref: 28d38885798
Ref: Classificador bayesiano ingênuo-Footnote-18887807
Ref: Classificador bayesiano ingênuo-Footnote-28887891
Ref: Classificador bayesiano ingênuo-Footnote-38887952
Node: Módulos de Programação Funcional8888022
Ref: library/functional doc8888207
Ref: 28d48888207
Ref: library/functional functional-programming-modules8888207
Ref: 28d58888207
Ref: library/functional translation-repo8888207
Ref: 28d68888207
Node: itertools — Funções que criam iteradores para laços eficientes8888717
Ref: library/itertools doc8888942
Ref: 28d78888942
Ref: library/itertools itertools-functions-creating-iterators-for-efficient-looping8888942
Ref: 28d88888942
Ref: library/itertools module-itertools8888942
Ref: 818888942
Node: Funções do intertools8900275
Ref: library/itertools itertool-functions8900433
Ref: 28e08900433
Ref: library/itertools itertools-functions8900433
Ref: 28e18900433
Ref: library/itertools itertools accumulate8900695
Ref: a058900695
Ref: library/itertools itertools batched8903178
Ref: 2018903178
Ref: library/itertools itertools chain8904593
Ref: 23158904593
Ref: library/itertools itertools chain from_iterable8905084
Ref: 28db8905084
Ref: library/itertools itertools combinations8905527
Ref: 13568905527
Ref: library/itertools itertools combinations_with_replacement8907224
Ref: 12c38907224
Ref: library/itertools itertools compress8908919
Ref: 12c48908919
Ref: library/itertools itertools count8909422
Ref: 12c58909422
Ref: library/itertools itertools cycle8910295
Ref: 28d98910295
Ref: library/itertools itertools dropwhile8911027
Ref: 28dc8911027
Ref: library/itertools itertools filterfalse8911758
Ref: 23038911758
Ref: library/itertools itertools groupby8912355
Ref: 28dd8912355
Ref: library/itertools itertools islice8915086
Ref: b618915086
Ref: library/itertools itertools pairwise8916952
Ref: 8188916952
Ref: library/itertools itertools permutations8917582
Ref: 1a6a8917582
Ref: library/itertools itertools product8919659
Ref: 13578919659
Ref: library/itertools itertools repeat8921419
Ref: 28da8921419
Ref: library/itertools itertools starmap8922121
Ref: 11238922121
Ref: library/itertools itertools takewhile8922769
Ref: 28de8922769
Ref: library/itertools itertools tee8923572
Ref: 28df8923572
Ref: library/itertools itertools zip_longest8926315
Ref: 12e08926315
Ref: Funções do intertools-Footnote-18927832
Ref: Funções do intertools-Footnote-28927906
Ref: Funções do intertools-Footnote-38927961
Ref: Funções do intertools-Footnote-48928017
Node: Receitas com itertools8928115
Ref: library/itertools id18928273
Ref: 28e38928273
Ref: library/itertools itertools-recipes8928273
Ref: 12a08928273
Ref: Receitas com itertools-Footnote-18942022
Ref: Receitas com itertools-Footnote-28942071
Node: functools — Funções e operações de ordem superior em objetos chamáveis8942142
Ref: library/functools doc8942423
Ref: 28e48942423
Ref: library/functools functools-higher-order-functions-and-operations-on-callable-objects8942423
Ref: 28e58942423
Ref: library/functools module-functools8942423
Ref: 5f8942423
Ref: library/functools translation-repo8942423
Ref: 28e68942423
Ref: library/functools functools cache8942990
Ref: 16078942990
Ref: library/functools functools cached_property8944379
Ref: 5418944379
Ref: library/functools functools cmp_to_key8947943
Ref: 121a8947943
Ref: library/functools functools lru_cache8949100
Ref: 9f78949100
Ref: library/functools functools lru_cache cache_info8951719
Ref: 28e88951719
Ref: library/functools functools lru_cache cache_clear8951984
Ref: 28e98951984
Ref: library/functools functools total_ordering8954779
Ref: f758954779
Ref: library/functools functools partial8957026
Ref: 4148957026
Ref: library/functools functools partialmethod8958409
Ref: a858958409
Ref: library/functools functools reduce8960160
Ref: 131f8960160
Ref: library/functools functools singledispatch8961418
Ref: 6398961418
Ref: library/functools functools singledispatch register8962022
Ref: 28eb8962022
Ref: library/functools functools singledispatchmethod8967931
Ref: 9f88967931
Ref: library/functools functools update_wrapper8969655
Ref: 10588969655
Ref: library/functools functools wraps8972247
Ref: f918972247
Ref: functools — Funções e operações de ordem superior em objetos chamáveis-Footnote-18973546
Ref: functools — Funções e operações de ordem superior em objetos chamáveis-Footnote-28973615
Ref: functools — Funções e operações de ordem superior em objetos chamáveis-Footnote-38973665
Ref: functools — Funções e operações de ordem superior em objetos chamáveis-Footnote-48973707
Ref: functools — Funções e operações de ordem superior em objetos chamáveis-Footnote-58973799
Ref: functools — Funções e operações de ordem superior em objetos chamáveis-Footnote-68973861
Ref: functools — Funções e operações de ordem superior em objetos chamáveis-Footnote-78973923
Node: Objetos partial8973988
Ref: library/functools id18974117
Ref: 28ed8974117
Ref: library/functools partial-objects8974117
Ref: 28ea8974117
Ref: library/functools functools partial func8974298
Ref: 28ee8974298
Ref: library/functools functools partial args8974486
Ref: 28ef8974486
Ref: library/functools functools partial keywords8974657
Ref: 28f08974657
Node: operator — Operadores padrões como funções8975241
Ref: library/operator doc8975446
Ref: 28f18975446
Ref: library/operator module-operator8975446
Ref: 9f8975446
Ref: library/operator operator-standard-operators-as-functions8975446
Ref: 28f28975446
Ref: library/operator translation-repo8975446
Ref: 28f38975446
Ref: library/operator operator lt8976474
Ref: 28f48976474
Ref: library/operator operator le8976507
Ref: 28f58976507
Ref: library/operator operator eq8976540
Ref: 28f68976540
Ref: library/operator operator ne8976573
Ref: 28f78976573
Ref: library/operator operator ge8976606
Ref: 28f88976606
Ref: library/operator operator gt8976639
Ref: 28f98976639
Ref: library/operator operator __lt__8976672
Ref: 28fa8976672
Ref: library/operator operator __le__8976709
Ref: 28fb8976709
Ref: library/operator operator __eq__8976746
Ref: 28fc8976746
Ref: library/operator operator __ne__8976783
Ref: 28fd8976783
Ref: library/operator operator __ge__8976820
Ref: 28fe8976820
Ref: library/operator operator __gt__8976857
Ref: 28ff8976857
Ref: library/operator operator not_8977657
Ref: 29008977657
Ref: library/operator operator __not__8977691
Ref: 29018977691
Ref: library/operator operator truth8978038
Ref: 29028978038
Ref: library/operator operator is_8978243
Ref: 29038978243
Ref: library/operator operator is_not8978337
Ref: 29048978337
Ref: library/operator operator abs8978501
Ref: 29058978501
Ref: library/operator operator __abs__8978534
Ref: 29068978534
Ref: library/operator operator add8978613
Ref: 29078978613
Ref: library/operator operator __add__8978647
Ref: 29088978647
Ref: library/operator operator and_8978743
Ref: 29098978743
Ref: library/operator operator __and__8978778
Ref: 290a8978778
Ref: library/operator operator floordiv8978855
Ref: 290b8978855
Ref: library/operator operator __floordiv__8978894
Ref: 290c8978894
Ref: library/operator operator index8978966
Ref: 1a5e8978966
Ref: library/operator operator __index__8978999
Ref: 290d8978999
Ref: library/operator operator inv8979310
Ref: 290e8979310
Ref: library/operator operator invert8979343
Ref: 290f8979343
Ref: library/operator operator __inv__8979379
Ref: 29108979379
Ref: library/operator operator __invert__8979416
Ref: 29118979416
Ref: library/operator operator lshift8979543
Ref: 29128979543
Ref: library/operator operator __lshift__8979580
Ref: 29138979580
Ref: library/operator operator mod8979675
Ref: 29148979675
Ref: library/operator operator __mod__8979709
Ref: 29158979709
Ref: library/operator operator mul8979775
Ref: 28e28979775
Ref: library/operator operator __mul__8979809
Ref: 29168979809
Ref: library/operator operator matmul8979905
Ref: e628979905
Ref: library/operator operator __matmul__8979942
Ref: 29178979942
Ref: library/operator operator neg8980044
Ref: 29188980044
Ref: library/operator operator __neg__8980077
Ref: 29198980077
Ref: library/operator operator or_8980156
Ref: 291a8980156
Ref: library/operator operator __or__8980190
Ref: 291b8980190
Ref: library/operator operator pos8980266
Ref: 291c8980266
Ref: library/operator operator __pos__8980299
Ref: 291d8980299
Ref: library/operator operator pow8980380
Ref: 291e8980380
Ref: library/operator operator __pow__8980414
Ref: 291f8980414
Ref: library/operator operator rshift8980511
Ref: 29208980511
Ref: library/operator operator __rshift__8980548
Ref: 29218980548
Ref: library/operator operator sub8980642
Ref: 29228980642
Ref: library/operator operator __sub__8980676
Ref: 29238980676
Ref: library/operator operator truediv8980742
Ref: 29248980742
Ref: library/operator operator __truediv__8980780
Ref: 29258980780
Ref: library/operator operator xor8980942
Ref: 29268980942
Ref: library/operator operator __xor__8980976
Ref: 29278980976
Ref: library/operator operator concat8981154
Ref: 29288981154
Ref: library/operator operator __concat__8981191
Ref: 29298981191
Ref: library/operator operator contains8981290
Ref: 8e08981290
Ref: library/operator operator __contains__8981329
Ref: 292a8981329
Ref: library/operator operator countOf8981461
Ref: 8e28981461
Ref: library/operator operator delitem8981555
Ref: 292b8981555
Ref: library/operator operator __delitem__8981593
Ref: 292c8981593
Ref: library/operator operator getitem8981680
Ref: 292d8981680
Ref: library/operator operator __getitem__8981718
Ref: 292e8981718
Ref: library/operator operator indexOf8981806
Ref: 8e18981806
Ref: library/operator operator setitem8981908
Ref: 292f8981908
Ref: library/operator operator __setitem__8981949
Ref: 29308981949
Ref: library/operator operator length_hint8982048
Ref: fa18982048
Ref: library/operator operator call8982421
Ref: 19ab8982421
Ref: library/operator operator __call__8982475
Ref: 29318982475
Ref: library/operator operator attrgetter8982943
Ref: e608982943
Ref: library/operator operator itemgetter8984283
Ref: a6b8984283
Ref: library/operator operator methodcaller8986128
Ref: e618986128
Ref: operator — Operadores padrões como funções-Footnote-18986975
Node: Mapeando os operadores para suas respectivas funções8987043
Ref: library/operator mapping-operators-to-functions8987209
Ref: 29328987209
Ref: library/operator operator-map8987209
Ref: 29338987209
Node: Operadores in-place8994734
Ref: library/operator in-place-operators8994900
Ref: 29348994900
Ref: library/operator operator iadd8996286
Ref: 29368996286
Ref: library/operator operator __iadd__8996321
Ref: 29378996321
Ref: library/operator operator iand8996419
Ref: 29388996419
Ref: library/operator operator __iand__8996454
Ref: 29398996454
Ref: library/operator operator iconcat8996552
Ref: 293a8996552
Ref: library/operator operator __iconcat__8996590
Ref: 293b8996590
Ref: library/operator operator ifloordiv8996731
Ref: 293c8996731
Ref: library/operator operator __ifloordiv__8996771
Ref: 293d8996771
Ref: library/operator operator ilshift8996880
Ref: 293e8996880
Ref: library/operator operator __ilshift__8996918
Ref: 293f8996918
Ref: library/operator operator imod8997023
Ref: 29408997023
Ref: library/operator operator __imod__8997058
Ref: 29418997058
Ref: library/operator operator imul8997156
Ref: 29428997156
Ref: library/operator operator __imul__8997191
Ref: 29438997191
Ref: library/operator operator imatmul8997289
Ref: e638997289
Ref: library/operator operator __imatmul__8997327
Ref: 29448997327
Ref: library/operator operator ior8997464
Ref: 29458997464
Ref: library/operator operator __ior__8997498
Ref: 29468997498
Ref: library/operator operator ipow8997594
Ref: 29478997594
Ref: library/operator operator __ipow__8997629
Ref: 29488997629
Ref: library/operator operator irshift8997728
Ref: 29498997728
Ref: library/operator operator __irshift__8997766
Ref: 294a8997766
Ref: library/operator operator isub8997871
Ref: 294b8997871
Ref: library/operator operator __isub__8997906
Ref: 294c8997906
Ref: library/operator operator itruediv8998004
Ref: 294d8998004
Ref: library/operator operator __itruediv__8998043
Ref: 294e8998043
Ref: library/operator operator ixor8998149
Ref: 294f8998149
Ref: library/operator operator __ixor__8998184
Ref: 29508998184
Node: Acesso a arquivos e diretórios8998282
Ref: library/filesys doc8998455
Ref: 29518998455
Ref: library/filesys file-and-directory-access8998455
Ref: 29528998455
Ref: library/filesys filesys8998455
Ref: 29538998455
Ref: library/filesys translation-repo8998455
Ref: 29548998455
Node: pathlib — Caminhos do sistema de arquivos orientados a objetos8999463
Ref: library/pathlib doc8999658
Ref: 29558999658
Ref: library/pathlib module-pathlib8999658
Ref: a48999658
Ref: library/pathlib pathlib-object-oriented-filesystem-paths8999658
Ref: 29568999658
Ref: pathlib — Caminhos do sistema de arquivos orientados a objetos-Footnote-19002153
Ref: pathlib — Caminhos do sistema de arquivos orientados a objetos-Footnote-29002218
Node: Uso básico9002260
Ref: library/pathlib basic-use9002394
Ref: 295a9002394
Node: Exceções<6>9003391
Ref: library/pathlib exceptions9003548
Ref: 295b9003548
Ref: library/pathlib pathlib UnsupportedOperation9003587
Ref: 2279003587
Node: Caminhos puros9003826
Ref: library/pathlib id19003990
Ref: 295c9003990
Ref: library/pathlib pure-paths9003990
Ref: 29579003990
Ref: library/pathlib pathlib PurePath9004252
Ref: 4a69004252
Ref: library/pathlib pathlib PurePosixPath9006810
Ref: 295d9006810
Ref: library/pathlib pathlib PureWindowsPath9007154
Ref: 17f79007154
Ref: Caminhos puros-Footnote-19008033
Node: Propriedades gerais9008092
Ref: library/pathlib general-properties9008184
Ref: 295e9008184
Node: Operadores<2>9009098
Ref: library/pathlib operators9009227
Ref: 295f9009227
Node: Acessando partes individuais9010931
Ref: library/pathlib accessing-individual-parts9011064
Ref: 29609011064
Ref: library/pathlib pathlib PurePath parts9011240
Ref: 29619011240
Node: Métodos e propriedades9011660
Ref: library/pathlib methods-and-properties9011771
Ref: 29629011771
Ref: library/pathlib pathlib PurePath parser9011900
Ref: 22c9011900
Ref: library/pathlib pathlib PurePath drive9012117
Ref: 29639012117
Ref: library/pathlib pathlib PurePath root9012592
Ref: 29649012592
Ref: library/pathlib pathlib PurePath anchor9013717
Ref: 29659013717
Ref: library/pathlib pathlib PurePath parents9014103
Ref: 8239014103
Ref: library/pathlib pathlib PurePath parent9014598
Ref: 18219014598
Ref: library/pathlib pathlib PurePath name9015475
Ref: 29669015475
Ref: library/pathlib pathlib PurePath suffix9015920
Ref: 29679015920
Ref: library/pathlib pathlib PurePath suffixes9016309
Ref: 29689016309
Ref: library/pathlib pathlib PurePath stem9016691
Ref: 29699016691
Ref: library/pathlib pathlib PurePath as_posix9017008
Ref: 296a9017008
Ref: library/pathlib pathlib PurePath is_absolute9017265
Ref: 18209017265
Ref: library/pathlib pathlib PurePath is_relative_to9017856
Ref: 2c99017856
Ref: library/pathlib pathlib PurePath is_reserved9018637
Ref: 2a69018637
Ref: library/pathlib pathlib PurePath joinpath9019289
Ref: 296b9019289
Ref: library/pathlib pathlib PurePath full_match9019870
Ref: 22b9019870
Ref: library/pathlib pathlib PurePath match9020901
Ref: 4ac9020901
Ref: library/pathlib pathlib PurePath relative_to9021875
Ref: 2ca9021875
Ref: library/pathlib pathlib PurePath with_name9024225
Ref: 17ea9024225
Ref: library/pathlib pathlib PurePath with_stem9024945
Ref: 17539024945
Ref: library/pathlib pathlib PurePath with_suffix9025974
Ref: 17039025974
Ref: library/pathlib pathlib PurePath with_segments9026643
Ref: 4a79026643
Ref: Métodos e propriedades-Footnote-19027600
Node: Caminhos concretos9027692
Ref: library/pathlib concrete-paths9027864
Ref: 29589027864
Ref: library/pathlib id29027864
Ref: 296d9027864
Ref: library/pathlib pathlib Path9028181
Ref: 2299028181
Ref: library/pathlib pathlib PosixPath9028580
Ref: 296e9028580
Ref: library/pathlib pathlib WindowsPath9029124
Ref: 29599029124
Node: Analisando e gerando URIs9030749
Ref: library/pathlib parsing-and-generating-uris9030870
Ref: 296f9030870
Ref: library/pathlib pathlib Path from_uri9031196
Ref: 22a9031196
Ref: library/pathlib pathlib Path as_uri9032390
Ref: 29719032390
Ref: Analisando e gerando URIs-Footnote-19032971
Node: Expandindo e resolvendo caminhos9033030
Ref: library/pathlib expanding-and-resolving-paths9033196
Ref: 29729033196
Ref: library/pathlib pathlib Path home9033283
Ref: e709033283
Ref: library/pathlib pathlib Path expanduser9033694
Ref: e6f9033694
Ref: library/pathlib pathlib Path cwd9034140
Ref: 181f9034140
Ref: library/pathlib pathlib Path absolute9034376
Ref: 17a29034376
Ref: library/pathlib pathlib Path resolve9034692
Ref: 17ef9034692
Ref: library/pathlib pathlib Path readlink9035933
Ref: 9259035933
Node: Consultando tipo de arquivo e status9036458
Ref: library/pathlib querying-file-type-and-status9036626
Ref: 29739036626
Ref: library/pathlib pathlib Path stat9037116
Ref: 8269037116
Ref: library/pathlib pathlib Path lstat9037770
Ref: 29749037770
Ref: library/pathlib pathlib Path exists9037961
Ref: a209037961
Ref: library/pathlib pathlib Path is_file9038570
Ref: 22f9038570
Ref: library/pathlib pathlib Path is_dir9039146
Ref: 2309039146
Ref: library/pathlib pathlib Path is_symlink9039738
Ref: a229039738
Ref: library/pathlib pathlib Path is_junction9040004
Ref: 4ab9040004
Ref: library/pathlib pathlib Path is_mount9040253
Ref: a219040253
Ref: library/pathlib pathlib Path is_socket9041061
Ref: a269041061
Ref: library/pathlib pathlib Path is_fifo9041448
Ref: a259041448
Ref: library/pathlib pathlib Path is_block_device9041817
Ref: a239041817
Ref: library/pathlib pathlib Path is_char_device9042226
Ref: a249042226
Ref: library/pathlib pathlib Path samefile9042642
Ref: e6d9042642
Node: Lendo e escrevendo arquivos9043236
Ref: library/pathlib reading-and-writing-files9043389
Ref: 29759043389
Ref: library/pathlib pathlib Path open9043466
Ref: 29769043466
Ref: library/pathlib pathlib Path read_text9043817
Ref: e729043817
Ref: library/pathlib pathlib Path read_bytes9044384
Ref: e749044384
Ref: library/pathlib pathlib Path write_text9044709
Ref: e719044709
Ref: library/pathlib pathlib Path write_bytes9045313
Ref: e739045313
Node: Lendo diretórios9045706
Ref: library/pathlib reading-directories9045853
Ref: 29779045853
Ref: library/pathlib pathlib Path iterdir9045909
Ref: 171d9045909
Ref: library/pathlib pathlib Path glob9046802
Ref: 22d9046802
Ref: library/pathlib pathlib Path rglob9049106
Ref: 22e9049106
Ref: library/pathlib pathlib Path walk9050015
Ref: 4a89050015
Node: Criando arquivos e diretórios9055394
Ref: library/pathlib creating-files-and-directories9055536
Ref: 29799055536
Ref: library/pathlib pathlib Path touch9055618
Ref: 297a9055618
Ref: library/pathlib pathlib Path mkdir9056286
Ref: e6e9056286
Ref: library/pathlib pathlib Path symlink_to9057446
Ref: 8259057446
Ref: library/pathlib pathlib Path hardlink_to9058617
Ref: 8249058617
Node: Renomeando e excluindo9059091
Ref: library/pathlib renaming-and-deleting9059241
Ref: 297b9059241
Ref: library/pathlib pathlib Path rename9059308
Ref: 297c9059308
Ref: library/pathlib pathlib Path replace9060414
Ref: 297d9060414
Ref: library/pathlib pathlib Path unlink9061005
Ref: 1b699061005
Ref: library/pathlib pathlib Path rmdir9061556
Ref: 29789061556
Node: Permissões e propriedade9061646
Ref: library/pathlib permissions-and-ownership9061757
Ref: 297e9061757
Ref: library/pathlib pathlib Path owner9061829
Ref: 2319061829
Ref: library/pathlib pathlib Path group9062519
Ref: 2329062519
Ref: library/pathlib pathlib Path chmod9063205
Ref: 8279063205
Ref: library/pathlib pathlib Path lchmod9063821
Ref: 297f9063821
Node: Linguagem de padrões9064012
Ref: library/pathlib pathlib-pattern-language9064201
Ref: 296c9064201
Ref: library/pathlib pattern-language9064201
Ref: 29809064201
Node: Comparação com o módulo glob9067016
Ref: library/pathlib comparison-to-the-glob-module9067228
Ref: 29819067228
Node: Comparação com os módulos os e os path9068746
Ref: library/pathlib comparison-to-the-os-and-os-path-modules9068928
Ref: 29829068928
Node: Ferramentas correspondentes9071321
Ref: library/pathlib corresponding-tools9071426
Ref: 29839071426
Ref: Ferramentas correspondentes-Footnote-19076702
Ref: Ferramentas correspondentes-Footnote-29077055
Ref: Ferramentas correspondentes-Footnote-39077247
Ref: Ferramentas correspondentes-Footnote-49077490
Node: os path — Manipulações comuns de nomes de caminhos9077737
Ref: library/os path doc9077982
Ref: 29879077982
Ref: library/os path module-os path9077982
Ref: a29077982
Ref: library/os path os-path-common-pathname-manipulations9077982
Ref: 29889077982
Ref: library/os path translation-repo9077982
Ref: 29899077982
Ref: library/os path os path abspath9080243
Ref: 135f9080243
Ref: library/os path os path basename9080640
Ref: 29859080640
Ref: library/os path os path commonpath9081164
Ref: e6a9081164
Ref: library/os path os path commonprefix9081808
Ref: e6b9081808
Ref: library/os path os path dirname9082517
Ref: 29849082517
Ref: library/os path os path exists9082813
Ref: a189082813
Ref: library/os path os path lexists9083483
Ref: a199083483
Ref: library/os path os path expanduser9083802
Ref: a1e9083802
Ref: library/os path os path expandvars9084959
Ref: 14209084959
Ref: library/os path os path getatime9085490
Ref: 298b9085490
Ref: library/os path os path getmtime9085806
Ref: 298c9085806
Ref: library/os path os path getctime9086213
Ref: 298d9086213
Ref: library/os path os path getsize9086739
Ref: 298e9086739
Ref: library/os path os path isabs9086992
Ref: 2249086992
Ref: library/os path os path isfile9087565
Ref: a1b9087565
Ref: library/os path os path isdir9087902
Ref: a1a9087902
Ref: library/os path os path isjunction9088234
Ref: 4a39088234
Ref: library/os path os path islink9088520
Ref: a169088520
Ref: library/os path os path ismount9088875
Ref: a1c9088875
Ref: library/os path os path isdevdrive9090033
Ref: 17399090033
Ref: library/os path os path isreserved9091000
Ref: 2239091000
Ref: library/os path os path join9091999
Ref: 171f9091999
Ref: library/os path os path normcase9093466
Ref: 298f9093466
Ref: library/os path os path normpath9093890
Ref: 135e9093890
Ref: library/os path os path realpath9094906
Ref: 2259094906
Ref: library/os path os path ALLOW_MISSING9097369
Ref: 42a9097369
Ref: library/os path os path relpath9097522
Ref: 4aa9097522
Ref: library/os path os path samefile9098094
Ref: fa59098094
Ref: library/os path os path sameopenfile9098693
Ref: 29919098693
Ref: library/os path os path samestat9098995
Ref: fa49098995
Ref: library/os path os path split9099475
Ref: 298a9099475
Ref: library/os path os path splitdrive9100302
Ref: c0f9100302
Ref: library/os path os path splitroot9101229
Ref: 4a49101229
Ref: library/os path os path splitext9102591
Ref: 29869102591
Ref: library/os path os path supports_unicode_filenames9103587
Ref: 14d69103587
Ref: os path — Manipulações comuns de nomes de caminhos-Footnote-19103828
Ref: os path — Manipulações comuns de nomes de caminhos-Footnote-29103899
Ref: os path — Manipulações comuns de nomes de caminhos-Footnote-39103968
Ref: os path — Manipulações comuns de nomes de caminhos-Footnote-49104034
Ref: os path — Manipulações comuns de nomes de caminhos-Footnote-59104089
Ref: os path — Manipulações comuns de nomes de caminhos-Footnote-69104181
Node: stat — Interpretando resultados de stat9104273
Ref: library/stat doc9104505
Ref: 29929104505
Ref: library/stat module-stat9104505
Ref: d19104505
Ref: library/stat stat-interpreting-stat-results9104505
Ref: 29939104505
Ref: library/stat translation-repo9104505
Ref: 29949104505
Ref: library/stat stat S_ISDIR9105207
Ref: 29959105207
Ref: library/stat stat S_ISCHR9105306
Ref: 29969105306
Ref: library/stat stat S_ISBLK9105444
Ref: 29979105444
Ref: library/stat stat S_ISREG9105578
Ref: 29989105578
Ref: library/stat stat S_ISFIFO9105682
Ref: 29999105682
Ref: library/stat stat S_ISLNK9105804
Ref: 299a9105804
Ref: library/stat stat S_ISSOCK9105908
Ref: 299b9105908
Ref: library/stat stat S_ISDOOR9106005
Ref: 1b3d9106005
Ref: library/stat stat S_ISPORT9106134
Ref: 1b3e9106134
Ref: library/stat stat S_ISWHT9106274
Ref: 1b3f9106274
Ref: library/stat stat S_IMODE9106498
Ref: 299c9106498
Ref: library/stat stat S_IFMT9106776
Ref: 299d9106776
Ref: library/stat stat filemode9108411
Ref: 118a9108411
Ref: library/stat stat ST_MODE9108856
Ref: fee9108856
Ref: library/stat stat ST_INO9108915
Ref: 299e9108915
Ref: library/stat stat ST_DEV9108962
Ref: 299f9108962
Ref: library/stat stat ST_NLINK9109026
Ref: 29a09109026
Ref: library/stat stat ST_UID9109088
Ref: 29a19109088
Ref: library/stat stat ST_GID9109156
Ref: 29a29109156
Ref: library/stat stat ST_SIZE9109221
Ref: 29a39109221
Ref: library/stat stat ST_ATIME9109357
Ref: 29a49109357
Ref: library/stat stat ST_MTIME9109412
Ref: 29a59109412
Ref: library/stat stat ST_CTIME9109474
Ref: 29a69109474
Ref: library/stat stat S_IFSOCK9110641
Ref: 29a79110641
Ref: library/stat stat S_IFLNK9110681
Ref: 29a89110681
Ref: library/stat stat S_IFREG9110728
Ref: 29a99110728
Ref: library/stat stat S_IFBLK9110775
Ref: 29aa9110775
Ref: library/stat stat S_IFDIR9110827
Ref: 29ab9110827
Ref: library/stat stat S_IFCHR9110869
Ref: 29ac9110869
Ref: library/stat stat S_IFIFO9110926
Ref: 29ad9110926
Ref: library/stat stat S_IFDOOR9110962
Ref: fef9110962
Ref: library/stat stat S_IFPORT9111033
Ref: ff09111033
Ref: library/stat stat S_IFWHT9111115
Ref: ff19111115
Ref: library/stat stat S_ISUID9111465
Ref: 29ae9111465
Ref: library/stat stat S_ISGID9111516
Ref: 29af9111516
Ref: library/stat stat S_ISVTX9112134
Ref: 29b29112134
Ref: library/stat stat S_IRWXU9112416
Ref: 29b39112416
Ref: library/stat stat S_IRUSR9112501
Ref: 29b49112501
Ref: library/stat stat S_IWUSR9112572
Ref: 29b59112572
Ref: library/stat stat S_IXUSR9112643
Ref: 29b69112643
Ref: library/stat stat S_IRWXG9112717
Ref: 29b79112717
Ref: library/stat stat S_IRGRP9112783
Ref: 29b89112783
Ref: library/stat stat S_IWGRP9112846
Ref: 29b99112846
Ref: library/stat stat S_IXGRP9112909
Ref: 29b09112909
Ref: library/stat stat S_IRWXO9112975
Ref: 29ba9112975
Ref: library/stat stat S_IROTH9113060
Ref: 29bb9113060
Ref: library/stat stat S_IWOTH9113125
Ref: 29bc9113125
Ref: library/stat stat S_IXOTH9113190
Ref: 29bd9113190
Ref: library/stat stat S_ENFMT9113258
Ref: 29b19113258
Ref: library/stat stat S_IREAD9113539
Ref: 29be9113539
Ref: library/stat stat S_IWRITE9113613
Ref: 29bf9113613
Ref: library/stat stat S_IEXEC9113688
Ref: 29c09113688
Ref: library/stat stat UF_SETTABLE9113858
Ref: 29c19113858
Ref: library/stat stat UF_NODUMP9113975
Ref: 29c29113975
Ref: library/stat stat UF_IMMUTABLE9114031
Ref: 29c39114031
Ref: library/stat stat UF_APPEND9114100
Ref: 29c49114100
Ref: library/stat stat UF_OPAQUE9114171
Ref: 29c59114171
Ref: library/stat stat UF_NOUNLINK9114282
Ref: 29c69114282
Ref: library/stat stat UF_COMPRESSED9114364
Ref: 29c79114364
Ref: library/stat stat UF_TRACKED9114450
Ref: 29c89114450
Ref: library/stat stat UF_DATAVAULT9114564
Ref: 29c99114564
Ref: library/stat stat UF_HIDDEN9114709
Ref: 29ca9114709
Ref: library/stat stat SF_SETTABLE9114799
Ref: 29cb9114799
Ref: library/stat stat SF_SUPPORTED9114917
Ref: 29cc9114917
Ref: library/stat stat SF_SYNTHETIC9115077
Ref: 29cd9115077
Ref: library/stat stat SF_ARCHIVED9115264
Ref: 29ce9115264
Ref: library/stat stat SF_IMMUTABLE9115333
Ref: 29cf9115333
Ref: library/stat stat SF_APPEND9115402
Ref: 29d09115402
Ref: library/stat stat SF_RESTRICTED9115473
Ref: 29d19115473
Ref: library/stat stat SF_NOUNLINK9115607
Ref: 29d29115607
Ref: library/stat stat SF_SNAPSHOT9115689
Ref: 29d39115689
Ref: library/stat stat SF_FIRMLINK9115770
Ref: 29d49115770
Ref: library/stat stat SF_DATALESS9115878
Ref: 29d59115878
Ref: library/stat stat FILE_ATTRIBUTE_ARCHIVE9116384
Ref: 29d69116384
Ref: library/stat stat FILE_ATTRIBUTE_COMPRESSED9116422
Ref: 29d79116422
Ref: library/stat stat FILE_ATTRIBUTE_DEVICE9116463
Ref: 29d89116463
Ref: library/stat stat FILE_ATTRIBUTE_DIRECTORY9116500
Ref: 29d99116500
Ref: library/stat stat FILE_ATTRIBUTE_ENCRYPTED9116540
Ref: 29da9116540
Ref: library/stat stat FILE_ATTRIBUTE_HIDDEN9116580
Ref: 29db9116580
Ref: library/stat stat FILE_ATTRIBUTE_INTEGRITY_STREAM9116617
Ref: 29dc9116617
Ref: library/stat stat FILE_ATTRIBUTE_NORMAL9116664
Ref: 29dd9116664
Ref: library/stat stat FILE_ATTRIBUTE_NOT_CONTENT_INDEXED9116701
Ref: 29de9116701
Ref: library/stat stat FILE_ATTRIBUTE_NO_SCRUB_DATA9116751
Ref: 29df9116751
Ref: library/stat stat FILE_ATTRIBUTE_OFFLINE9116795
Ref: 29e09116795
Ref: library/stat stat FILE_ATTRIBUTE_READONLY9116833
Ref: 29e19116833
Ref: library/stat stat FILE_ATTRIBUTE_REPARSE_POINT9116872
Ref: 29e29116872
Ref: library/stat stat FILE_ATTRIBUTE_SPARSE_FILE9116916
Ref: 29e39116916
Ref: library/stat stat FILE_ATTRIBUTE_SYSTEM9116958
Ref: 29e49116958
Ref: library/stat stat FILE_ATTRIBUTE_TEMPORARY9116995
Ref: 29e59116995
Ref: library/stat stat FILE_ATTRIBUTE_VIRTUAL9117035
Ref: 29e69117035
Ref: library/stat stat IO_REPARSE_TAG_SYMLINK9117326
Ref: 29e79117326
Ref: library/stat stat IO_REPARSE_TAG_MOUNT_POINT9117364
Ref: 29e89117364
Ref: library/stat stat IO_REPARSE_TAG_APPEXECLINK9117406
Ref: 29e99117406
Ref: stat — Interpretando resultados de stat-Footnote-19117518
Ref: stat — Interpretando resultados de stat-Footnote-29117582
Ref: stat — Interpretando resultados de stat-Footnote-39117629
Node: filecmp — Comparações de arquivos e diretórios9117709
Ref: library/filecmp doc9117940
Ref: 29ea9117940
Ref: library/filecmp filecmp-file-and-directory-comparisons9117940
Ref: 29eb9117940
Ref: library/filecmp module-filecmp9117940
Ref: 5a9117940
Ref: library/filecmp translation-repo9117940
Ref: 29ec9117940
Ref: library/filecmp filecmp cmp9118437
Ref: 17549118437
Ref: library/filecmp filecmp cmpfiles9119345
Ref: 16d49119345
Ref: library/filecmp filecmp clear_cache9120322
Ref: f719120322
Ref: filecmp — Comparações de arquivos e diretórios-Footnote-19120669
Node: A classe dircmp9120736
Ref: library/filecmp dircmp-objects9120839
Ref: 29ed9120839
Ref: library/filecmp the-dircmp-class9120839
Ref: 29ee9120839
Ref: library/filecmp filecmp dircmp9120898
Ref: f739120898
Ref: library/filecmp filecmp dircmp report9121634
Ref: 29ef9121634
Ref: library/filecmp filecmp dircmp report_partial_closure9121754
Ref: 29f09121754
Ref: library/filecmp filecmp dircmp report_full_closure9121894
Ref: 29f19121894
Ref: library/filecmp filecmp dircmp left9122483
Ref: 29f29122483
Ref: library/filecmp filecmp dircmp right9122537
Ref: 29f39122537
Ref: library/filecmp filecmp dircmp left_list9122592
Ref: 29f49122592
Ref: library/filecmp filecmp dircmp right_list9122710
Ref: 29f59122710
Ref: library/filecmp filecmp dircmp common9122829
Ref: 29f69122829
Ref: library/filecmp filecmp dircmp left_only9122907
Ref: 29f79122907
Ref: library/filecmp filecmp dircmp right_only9122989
Ref: 29f89122989
Ref: library/filecmp filecmp dircmp common_dirs9123072
Ref: 29f99123072
Ref: library/filecmp filecmp dircmp common_files9123144
Ref: 29fa9123144
Ref: library/filecmp filecmp dircmp common_funny9123211
Ref: 29fb9123211
Ref: library/filecmp filecmp dircmp same_files9123404
Ref: 29fc9123404
Ref: library/filecmp filecmp dircmp diff_files9123556
Ref: 29fd9123556
Ref: library/filecmp filecmp dircmp funny_files9123731
Ref: 29fe9123731
Ref: library/filecmp filecmp dircmp subdirs9123851
Ref: 1a729123851
Ref: library/filecmp filecmp DEFAULT_IGNORES9124361
Ref: f729124361
Node: tempfile — Generate temporary files and directories9125069
Ref: library/tempfile doc9125322
Ref: 29ff9125322
Ref: library/tempfile module-tempfile9125322
Ref: e09125322
Ref: library/tempfile tempfile-generate-temporary-files-and-directories9125322
Ref: 2a009125322
Ref: library/tempfile translation-repo9125322
Ref: 2a019125322
Ref: library/tempfile tempfile TemporaryFile9126490
Ref: 2a029126490
Ref: library/tempfile tempfile NamedTemporaryFile9128685
Ref: 4c69128685
Ref: library/tempfile tempfile SpooledTemporaryFile9132505
Ref: 6939132505
Ref: library/tempfile tempfile SpooledTemporaryFile rollover9133028
Ref: 2a059133028
Ref: library/tempfile tempfile TemporaryDirectory9134004
Ref: 12759134004
Ref: library/tempfile tempfile TemporaryDirectory name9134532
Ref: 2a069134532
Ref: library/tempfile tempfile TemporaryDirectory cleanup9134886
Ref: 2a079134886
Ref: library/tempfile tempfile mkstemp9136164
Ref: 2a039136164
Ref: library/tempfile tempfile mkdtemp9139073
Ref: 21f9139073
Ref: library/tempfile tempfile gettempdir9140319
Ref: 1a1f9140319
Ref: library/tempfile tempfile gettempdirb9141520
Ref: 1a209141520
Ref: library/tempfile tempfile gettempprefix9141666
Ref: 2a099141666
Ref: library/tempfile tempfile gettempprefixb9141825
Ref: 2a0a9141825
Ref: library/tempfile tempfile tempdir9142409
Ref: 1a1e9142409
Ref: tempfile — Generate temporary files and directories-Footnote-19143524
Node: Exemplos<5>9143592
Ref: library/tempfile examples9143736
Ref: 2a0b9143736
Ref: library/tempfile tempfile-examples9143736
Ref: 2a049143736
Node: Deprecated functions and variables9145131
Ref: library/tempfile deprecated-functions-and-variables9145275
Ref: 2a0c9145275
Ref: library/tempfile tempfile-mktemp-deprecated9145275
Ref: 2a0d9145275
Ref: library/tempfile tempfile mktemp9145905
Ref: 19bb9145905
Node: glob — Expansão de padrão de nome de arquivo no estilo Unix9147032
Ref: library/glob doc9147298
Ref: 2a0e9147298
Ref: library/glob glob-unix-style-pathname-pattern-expansion9147298
Ref: 2a0f9147298
Ref: library/glob module-glob9147298
Ref: 649147298
Ref: library/glob translation-repo9147298
Ref: 2a109147298
Ref: library/glob glob glob9148604
Ref: 29f9148604
Ref: library/glob glob iglob9151147
Ref: 80a9151147
Ref: library/glob glob escape9152106
Ref: f799152106
Ref: library/glob glob translate9152588
Ref: 1ea9152588
Ref: glob — Expansão de padrão de nome de arquivo no estilo Unix-Footnote-19154344
Node: Exemplos<6>9154408
Ref: library/glob examples9154519
Ref: 2a119154519
Node: fnmatch — Correspondência de padrões de nome de arquivo Unix9155690
Ref: library/fnmatch doc9155952
Ref: 2a129155952
Ref: library/fnmatch fnmatch-unix-filename-pattern-matching9155952
Ref: 2a139155952
Ref: library/fnmatch module-fnmatch9155952
Ref: 5c9155952
Ref: library/fnmatch translation-repo9155952
Ref: 2a149155952
Ref: library/fnmatch fnmatch fnmatch9158110
Ref: 19df9158110
Ref: library/fnmatch fnmatch fnmatchcase9158887
Ref: 19e09158887
Ref: library/fnmatch fnmatch filter9159181
Ref: 19e19159181
Ref: library/fnmatch fnmatch translate9159502
Ref: 1bbe9159502
Ref: fnmatch — Correspondência de padrões de nome de arquivo Unix-Footnote-19160158
Node: linecache — Acesso aleatório a linhas de texto9160225
Ref: library/linecache doc9160472
Ref: 2a159160472
Ref: library/linecache linecache-random-access-to-text-lines9160472
Ref: 2a169160472
Ref: library/linecache module-linecache9160472
Ref: 859160472
Ref: library/linecache translation-repo9160472
Ref: 2a179160472
Ref: library/linecache linecache getline9161391
Ref: e509161391
Ref: library/linecache linecache clearcache9162206
Ref: 2a1a9162206
Ref: library/linecache linecache checkcache9162389
Ref: 166a9162389
Ref: library/linecache linecache lazycache9162679
Ref: e4f9162679
Ref: linecache — Acesso aleatório a linhas de texto-Footnote-19163282
Ref: linecache — Acesso aleatório a linhas de texto-Footnote-29163351
Node: shutil — Operações de arquivo de alto nível9163393
Ref: library/shutil doc9163567
Ref: 2a1b9163567
Ref: library/shutil module-shutil9163567
Ref: c59163567
Ref: library/shutil shutil-high-level-file-operations9163567
Ref: 2a1c9163567
Ref: library/shutil translation-repo9163567
Ref: 2a1d9163567
Ref: shutil — Operações de arquivo de alto nível-Footnote-19164863
Node: Operações de diretório e arquivos9164929
Ref: library/shutil directory-and-files-operations9165086
Ref: 2a1e9165086
Ref: library/shutil file-operations9165086
Ref: 2a1f9165086
Ref: library/shutil shutil copyfileobj9165176
Ref: a669165176
Ref: library/shutil shutil copyfile9165824
Ref: a639165824
Ref: library/shutil shutil SpecialFileError9167675
Ref: 13609167675
Ref: library/shutil shutil SameFileError9167873
Ref: fd29167873
Ref: library/shutil shutil copymode9168055
Ref: 179f9168055
Ref: library/shutil shutil copystat9169033
Ref: 116d9169033
Ref: library/shutil shutil copy9171381
Ref: a649171381
Ref: library/shutil shutil copy29173060
Ref: a659173060
Ref: library/shutil shutil ignore_patterns9174812
Ref: 2a209174812
Ref: library/shutil shutil copytree9175146
Ref: a339175146
Ref: library/shutil shutil rmtree9178963
Ref: 3019178963
Ref: library/shutil shutil rmtree avoids_symlink_attacks9182103
Ref: 2a219182103
Ref: library/shutil shutil move9182506
Ref: e829182506
Ref: library/shutil shutil disk_usage9184737
Ref: 116c9184737
Ref: library/shutil shutil chown9185527
Ref: 2409185527
Ref: library/shutil shutil which9186211
Ref: 4b49186211
Ref: library/shutil shutil Error9188997
Ref: fd19188997
Node: Operações de cópia eficientes dependentes da plataforma9189389
Ref: library/shutil platform-dependent-efficient-copy-operations9189548
Ref: 2a239189548
Ref: library/shutil shutil-platform-dependent-efficient-copy-operations9189548
Ref: a679189548
Ref: Operações de cópia eficientes dependentes da plataforma-Footnote-19190810
Ref: Operações de cópia eficientes dependentes da plataforma-Footnote-29190875
Node: Exemplo de copytree9190923
Ref: library/shutil copytree-example9191105
Ref: 2a249191105
Ref: library/shutil shutil-copytree-example9191105
Ref: 2a259191105
Node: exemplo rmtree9191780
Ref: library/shutil rmtree-example9191895
Ref: 2a269191895
Ref: library/shutil shutil-rmtree-example9191895
Ref: 2a229191895
Node: Operações de arquivamento9192481
Ref: library/shutil archiving-operations9192690
Ref: 12599192690
Ref: library/shutil id19192690
Ref: 2a279192690
Ref: library/shutil shutil make_archive9193031
Ref: 4b39193031
Ref: library/shutil shutil get_archive_formats9195589
Ref: 2a2a9195589
Ref: library/shutil shutil register_archive_format9196559
Ref: 2a299196559
Ref: library/shutil shutil unregister_archive_format9197946
Ref: 2a2b9197946
Ref: library/shutil shutil unpack_archive9198075
Ref: 46b9198075
Ref: library/shutil shutil register_unpack_format9200014
Ref: 2a2c9200014
Ref: library/shutil shutil unregister_unpack_format9200968
Ref: 2a2e9200968
Ref: library/shutil shutil get_unpack_formats9201117
Ref: 2a2d9201117
Ref: Operações de arquivamento-Footnote-19202215
Node: Exemplo de arquivo9202257
Ref: library/shutil archiving-example9202384
Ref: 2a2f9202384
Ref: library/shutil shutil-archiving-example9202384
Ref: 2a309202384
Node: Exemplo de arquivamento com base_dir9203489
Ref: library/shutil archiving-example-with-base-dir9203616
Ref: 2a319203616
Ref: library/shutil shutil-archiving-example-with-basedir9203616
Ref: 2a289203616
Node: Consultando o tamanho do terminal de saída9204735
Ref: library/shutil querying-the-size-of-the-output-terminal9204899
Ref: 2a329204899
Ref: library/shutil shutil get_terminal_size9205005
Ref: 11429205005
Ref: Consultando o tamanho do terminal de saída-Footnote-19206777
Node: Persistência de Dados9206860
Ref: library/persistence doc9207033
Ref: 2a359207033
Ref: library/persistence data-persistence9207033
Ref: 2a369207033
Ref: library/persistence persistence9207033
Ref: 2a379207033
Ref: library/persistence translation-repo9207033
Ref: 2a389207033
Node: pickle — Serialização de objetos Python9208021
Ref: library/pickle doc9208180
Ref: 2a399208180
Ref: library/pickle module-pickle9208180
Ref: a69208180
Ref: library/pickle pickle-python-object-serialization9208180
Ref: 2a3a9208180
Ref: pickle — Serialização de objetos Python-Footnote-19210388
Ref: pickle — Serialização de objetos Python-Footnote-29210454
Node: Relacionamento com outros módulos Python9210514
Ref: library/pickle relationship-to-other-python-modules9210669
Ref: 2a3c9210669
Node: Comparação com marshal9210836
Ref: library/pickle comparison-with-marshal9210968
Ref: 2a3d9210968
Node: Comparação com json9212561
Ref: library/pickle comparison-with-json9212693
Ref: 2a3b9212693
Ref: library/pickle id29212693
Ref: 2a3e9212693
Ref: Comparação com json-Footnote-19214010
Node: Formato de fluxo de dados9214035
Ref: library/pickle data-stream-format9214219
Ref: 2a409214219
Ref: library/pickle pickle-protocols9214219
Ref: ce19214219
Ref: Formato de fluxo de dados-Footnote-19217662
Ref: Formato de fluxo de dados-Footnote-29217704
Ref: Formato de fluxo de dados-Footnote-39217746
Node: Interface do módulo9217788
Ref: library/pickle module-interface9217986
Ref: 2a439217986
Ref: library/pickle pickle HIGHEST_PROTOCOL9218477
Ref: 14ed9218477
Ref: library/pickle pickle DEFAULT_PROTOCOL9218765
Ref: 8319218765
Ref: library/pickle pickle dump9219342
Ref: 2a449219342
Ref: library/pickle pickle dumps9219874
Ref: 14ec9219874
Ref: library/pickle pickle load9220359
Ref: d329220359
Ref: library/pickle pickle loads9221180
Ref: d339221180
Ref: library/pickle pickle PickleError9221979
Ref: 2a459221979
Ref: library/pickle pickle PicklingError9222131
Ref: 2a469222131
Ref: library/pickle pickle UnpicklingError9222482
Ref: 2a489222482
Ref: library/pickle pickle Pickler9223040
Ref: a289223040
Ref: library/pickle pickle Pickler dump9224789
Ref: 1bbd9224789
Ref: library/pickle pickle Pickler persistent_id9224947
Ref: 16879224947
Ref: library/pickle pickle Pickler dispatch_table9225838
Ref: 11619225838
Ref: library/pickle pickle Pickler reducer_override9227110
Ref: a299227110
Ref: library/pickle pickle Pickler fast9227806
Ref: 2a4e9227806
Ref: library/pickle pickle Unpickler9228382
Ref: 159f9228382
Ref: library/pickle pickle Unpickler load9230744
Ref: 2a509230744
Ref: library/pickle pickle Unpickler persistent_load9231088
Ref: 168e9231088
Ref: library/pickle pickle Unpickler find_class9231699
Ref: 2a519231699
Ref: library/pickle pickle PickleBuffer9232451
Ref: 15a29232451
Ref: library/pickle pickle PickleBuffer raw9233146
Ref: 2a539233146
Ref: library/pickle pickle PickleBuffer release9233498
Ref: 2a549233498
Node: O que pode ser serializado e desserializado com pickle?9233600
Ref: library/pickle pickle-picklable9233819
Ref: 2a479233819
Ref: library/pickle what-can-be-pickled-and-unpickled9233819
Ref: 2a559233819
Ref: O que pode ser serializado e desserializado com pickle?-Footnote-19237127
Ref: O que pode ser serializado e desserializado com pickle?-Footnote-29237296
Node: Serializando com pickle instâncias de classes9237437
Ref: library/pickle pickle-inst9237697
Ref: 2a3f9237697
Ref: library/pickle pickling-class-instances9237697
Ref: 2a569237697
Ref: library/pickle object __getnewargs_ex__9238826
Ref: 2a579238826
Ref: library/pickle object __getnewargs__9239738
Ref: dfe9239738
Ref: library/pickle object __getstate__9240367
Ref: 5d89240367
Ref: library/pickle object __setstate__9241874
Ref: 9dc9241874
Ref: library/pickle object __reduce__9244009
Ref: 9db9244009
Ref: library/pickle object __reduce_ex__9247078
Ref: 16a19247078
Ref: Serializando com pickle instâncias de classes-Footnote-19247806
Node: Persistência de objetos externos9247910
Ref: library/pickle persistence-of-external-objects9248054
Ref: 2a599248054
Ref: library/pickle pickle-persistent9248054
Ref: 2a4a9248054
Ref: Persistência de objetos externos-Footnote-19253057
Node: Tabelas de despacho9253375
Ref: library/pickle dispatch-tables9253563
Ref: 2a5a9253563
Ref: library/pickle pickle-dispatch9253563
Ref: 2a4c9253563
Node: Manipulação de objetos com estado9254950
Ref: library/pickle handling-stateful-objects9255096
Ref: 2a5b9255096
Ref: library/pickle pickle-state9255096
Ref: 2a589255096
Node: Redução personalizada para tipos funções e outros objetos9257563
Ref: library/pickle custom-reduction-for-types-functions-and-other-objects9257789
Ref: 2a5c9257789
Ref: library/pickle reducer-override9257789
Ref: 2a4d9257789
Node: Buffers fora da banda9260023
Ref: library/pickle out-of-band-buffers9260223
Ref: 2a5d9260223
Ref: library/pickle pickle-oob9260223
Ref: 2a499260223
Node: API de provedor9261156
Ref: library/pickle provider-api9261255
Ref: 2a5e9261255
Node: API de consumidor9261962
Ref: library/pickle consumer-api9262080
Ref: 2a5f9262080
Node: Exemplo<4>9263477
Ref: library/pickle example9263571
Ref: 2a609263571
Ref: Exemplo<4>-Footnote-19266149
Node: Restringindo globais9266191
Ref: library/pickle pickle-restrict9266343
Ref: 2a529266343
Ref: library/pickle restricting-globals9266343
Ref: 2a619266343
Node: Desempenho<2>9269272
Ref: library/pickle performance9269414
Ref: 2a629269414
Node: Exemplos<7>9269705
Ref: library/pickle examples9269818
Ref: 2a639269818
Ref: library/pickle pickle-example9269818
Ref: 2a649269818
Node: copyreg — Registra funções de suporte pickle9271151
Ref: library/copyreg doc9271355
Ref: 2a659271355
Ref: library/copyreg copyreg-register-pickle-support-functions9271355
Ref: 2a669271355
Ref: library/copyreg module-copyreg9271355
Ref: 269271355
Ref: library/copyreg translation-repo9271355
Ref: 2a679271355
Ref: library/copyreg copyreg constructor9271999
Ref: 2a689271999
Ref: library/copyreg copyreg pickle9272222
Ref: 2a4b9272222
Ref: copyreg — Registra funções de suporte pickle-Footnote-19272978
Node: Exemplo<5>9273045
Ref: library/copyreg example9273140
Ref: 2a699273140
Node: shelve — Python object persistence9273687
Ref: library/shelve doc9273900
Ref: 2a6a9273900
Ref: library/shelve module-shelve9273900
Ref: c39273900
Ref: library/shelve shelve-python-object-persistence9273900
Ref: 2a6b9273900
Ref: library/shelve translation-repo9273900
Ref: 2a6c9273900
Ref: library/shelve shelve open9274487
Ref: 17f39274487
Ref: library/shelve shelve-security9276550
Ref: 2a709276550
Ref: library/shelve shelve Shelf sync9277047
Ref: 2a6e9277047
Ref: library/shelve shelve Shelf close9277369
Ref: 2a6f9277369
Ref: shelve — Python object persistence-Footnote-19277757
Ref: shelve — Python object persistence-Footnote-29277823
Node: Restrições9277928
Ref: library/shelve restrictions9278032
Ref: 2a719278032
Ref: library/shelve shelve Shelf9279219
Ref: fcf9279219
Ref: library/shelve shelve BsdDbShelf9280640
Ref: 23ed9280640
Ref: library/shelve shelve DbfilenameShelf9281363
Ref: 23ee9281363
Ref: Restrições-Footnote-19281979
Node: Exemplo<6>9282032
Ref: library/shelve example9282136
Ref: 2a729282136
Ref: library/shelve shelve-example9282136
Ref: 2a6d9282136
Node: marshal — Serialização interna de objetos Python9283822
Ref: library/marshal doc9284036
Ref: 2a739284036
Ref: library/marshal marshal-internal-python-object-serialization9284036
Ref: 2a749284036
Ref: library/marshal module-marshal9284036
Ref: 8d9284036
Ref: library/marshal translation-repo9284036
Ref: 2a759284036
Ref: library/marshal marshal dump9286981
Ref: 2a769286981
Ref: library/marshal marshal load9287864
Ref: 1b8b9287864
Ref: library/marshal marshal dumps9288975
Ref: ed49288975
Ref: library/marshal marshal loads9289701
Ref: 2a779289701
Ref: library/marshal marshal version9290562
Ref: 2a789290562
Ref: marshal — Serialização interna de objetos Python-Footnote-19290937
Node: dbm — Interfaces para “banco de dados” Unix9291315
Ref: library/dbm doc9291564
Ref: 2a799291564
Ref: library/dbm dbm-interfaces-to-unix-databases9291564
Ref: 2a7a9291564
Ref: library/dbm module-dbm9291564
Ref: 319291564
Ref: library/dbm translation-repo9291564
Ref: 2a7b9291564
Ref: library/dbm dbm error9292144
Ref: 2a7c9292144
Ref: library/dbm dbm whichdb9292436
Ref: 2a7d9292436
Ref: library/dbm dbm open9293185
Ref: f5c9293185
Ref: dbm — Interfaces para “banco de dados” Unix-Footnote-19297400
Ref: dbm — Interfaces para “banco de dados” Unix-Footnote-29297472
Node: dbm sqlite3 — Backend de SQLite para dbm9297525
Ref: library/dbm dbm-sqlite3-sqlite-backend-for-dbm9297710
Ref: 2a7e9297710
Ref: library/dbm module-dbm sqlite39297710
Ref: 359297710
Ref: library/dbm dbm sqlite3 open9298435
Ref: 2a7f9298435
Ref: library/dbm dbm sqlite3 sqlite3 close9299690
Ref: 2a809299690
Ref: dbm sqlite3 — Backend de SQLite para dbm-Footnote-19299804
Node: dbm gnu — Gerenciador de banco de dados do GNU9299875
Ref: library/dbm dbm-gnu-gnu-database-manager9300102
Ref: 2a819300102
Ref: library/dbm module-dbm gnu9300102
Ref: 339300102
Ref: library/dbm dbm gnu error9300858
Ref: aa99300858
Ref: library/dbm dbm gnu open_flags9301082
Ref: 2a829301082
Ref: library/dbm dbm gnu open9301208
Ref: 1bb79301208
Ref: library/dbm dbm gnu gdbm close9303580
Ref: 2a839303580
Ref: library/dbm dbm gnu gdbm firstkey9303653
Ref: 2a849303653
Ref: library/dbm dbm gnu gdbm nextkey9304008
Ref: 2a859304008
Ref: library/dbm dbm gnu gdbm reorganize9304391
Ref: 2a869304391
Ref: library/dbm dbm gnu gdbm sync9304888
Ref: 2a879304888
Ref: dbm gnu — Gerenciador de banco de dados do GNU-Footnote-19305103
Node: dbm ndbm — New Database Manager9305170
Ref: library/dbm dbm-ndbm-new-database-manager9305400
Ref: 2a889305400
Ref: library/dbm module-dbm ndbm9305400
Ref: 349305400
Ref: library/dbm dbm ndbm error9306481
Ref: aaa9306481
Ref: library/dbm dbm ndbm library9306707
Ref: 2a899306707
Ref: library/dbm dbm ndbm open9306791
Ref: 1bb89306791
Ref: library/dbm dbm ndbm ndbm close9308466
Ref: 2a8a9308466
Ref: dbm ndbm — New Database Manager-Footnote-19308575
Node: dbm dumb — Implementação portátil do DBM9308643
Ref: library/dbm dbm-dumb-portable-dbm-implementation9308816
Ref: 2a8b9308816
Ref: library/dbm module-dbm dumb9308816
Ref: 329308816
Ref: library/dbm dbm dumb error9309648
Ref: aa89309648
Ref: library/dbm dbm dumb open9309874
Ref: aa59309874
Ref: library/dbm dbm dumb dumbdbm close9311899
Ref: 2a8c9311899
Ref: library/dbm dbm dumb dumbdbm sync9311970
Ref: 2a8d9311970
Ref: dbm dumb — Implementação portátil do DBM-Footnote-19312190
Node: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite9312258
Ref: library/sqlite3 doc9312446
Ref: 2a8e9312446
Ref: library/sqlite3 module-sqlite39312446
Ref: cf9312446
Ref: library/sqlite3 sqlite3-db-api-2-0-interface-for-sqlite-databases9312446
Ref: 2a8f9312446
Ref: library/sqlite3 translation-repo9312446
Ref: 2a909312446
Ref: library/sqlite3 sqlite3-intro9312645
Ref: 2a919312645
Ref: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite-Footnote-19314221
Ref: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite-Footnote-29314286
Ref: sqlite3 —- interface DB-API 2 0 interface para bancos de dados SQLite-Footnote-39314328
Node: Tutorial9314370
Ref: library/sqlite3 sqlite3-tutorial9314506
Ref: 2a929314506
Ref: library/sqlite3 tutorial9314506
Ref: 2a969314506
Ref: Tutorial-Footnote-19320801
Ref: Tutorial-Footnote-29320858
Ref: Tutorial-Footnote-39320917
Ref: Tutorial-Footnote-49320966
Ref: Tutorial-Footnote-59321012
Node: Referência9321064
Ref: library/sqlite3 reference9321228
Ref: 2aa09321228
Ref: library/sqlite3 sqlite3-reference9321228
Ref: 2a939321228
Ref: library/sqlite3 sqlite3-module-contents9321270
Ref: 2aa19321270
Node: Funções do módulo9321617
Ref: library/sqlite3 module-functions9321715
Ref: 2aa29321715
Ref: library/sqlite3 sqlite3-module-functions9321715
Ref: 2aa39321715
Ref: library/sqlite3 sqlite3 connect9321773
Ref: 2a89321773
Ref: library/sqlite3 sqlite3 complete_statement9326645
Ref: 2aac9326645
Ref: library/sqlite3 sqlite3 enable_callback_tracebacks9327462
Ref: 2aad9327462
Ref: library/sqlite3 sqlite3 register_adapter9328126
Ref: 2aae9328126
Ref: library/sqlite3 sqlite3 register_converter9328464
Ref: 2aa59328464
Ref: Funções do módulo-Footnote-19329113
Ref: Funções do módulo-Footnote-29329156
Ref: Funções do módulo-Footnote-39329198
Node: Constantes do módulo9329275
Ref: library/sqlite3 module-constants9329400
Ref: 2ab09329400
Ref: library/sqlite3 sqlite3-module-constants9329400
Ref: 2ab19329400
Ref: library/sqlite3 sqlite3 LEGACY_TRANSACTION_CONTROL9329462
Ref: 2aaa9329462
Ref: library/sqlite3 sqlite3 PARSE_DECLTYPES9329743
Ref: 2aa69329743
Ref: library/sqlite3 sqlite3 PARSE_COLNAMES9330724
Ref: 2aa79330724
Ref: library/sqlite3 sqlite3 SQLITE_OK9331319
Ref: 2ab29331319
Ref: library/sqlite3 sqlite3 SQLITE_DENY9331347
Ref: 2ab39331347
Ref: library/sqlite3 sqlite3 SQLITE_IGNORE9331377
Ref: 2ab49331377
Ref: library/sqlite3 sqlite3 apilevel9331811
Ref: 2ab59331811
Ref: library/sqlite3 sqlite3 paramstyle9331954
Ref: 2ab69331954
Ref: library/sqlite3 sqlite3 sqlite_version9332231
Ref: 2ab79332231
Ref: library/sqlite3 sqlite3 sqlite_version_info9332345
Ref: 2ab89332345
Ref: library/sqlite3 sqlite3 threadsafety9332487
Ref: 67c9332487
Ref: library/sqlite3 sqlite3 version9334819
Ref: 2cf9334819
Ref: library/sqlite3 sqlite3 version_info9335249
Ref: 2d09335249
Ref: library/sqlite3 sqlite3-dbconfig-constants9335707
Ref: 2ab99335707
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_DEFENSIVE9335707
Ref: 2aba9335707
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_DQS_DDL9335751
Ref: 2abb9335751
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_DQS_DML9335793
Ref: 2abc9335793
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_ENABLE_FKEY9335835
Ref: 2abd9335835
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_ENABLE_FTS3_TOKENIZER9335881
Ref: 2abe9335881
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_ENABLE_LOAD_EXTENSION9335937
Ref: 2abf9335937
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_ENABLE_QPSG9335993
Ref: 2ac09335993
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_ENABLE_TRIGGER9336039
Ref: 2ac19336039
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_ENABLE_VIEW9336088
Ref: 2ac29336088
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_LEGACY_ALTER_TABLE9336134
Ref: 2ac39336134
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_LEGACY_FILE_FORMAT9336187
Ref: 2ac49336187
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_NO_CKPT_ON_CLOSE9336240
Ref: 2ac59336240
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_RESET_DATABASE9336291
Ref: 2ac69336291
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_TRIGGER_EQP9336340
Ref: 2ac79336340
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_TRUSTED_SCHEMA9336386
Ref: 2ac89336386
Ref: library/sqlite3 sqlite3 SQLITE_DBCONFIG_WRITABLE_SCHEMA9336435
Ref: 2ac99336435
Ref: Constantes do módulo-Footnote-19336954
Ref: Constantes do módulo-Footnote-29336997
Ref: Constantes do módulo-Footnote-39337052
Node: Connection objects9337103
Ref: library/sqlite3 connection-objects9337222
Ref: 2aca9337222
Ref: library/sqlite3 sqlite3-connection-objects9337222
Ref: 2acb9337222
Ref: library/sqlite3 sqlite3 Connection9337279
Ref: 2459337279
Ref: library/sqlite3 sqlite3 Connection cursor9337970
Ref: 2a979337970
Ref: library/sqlite3 sqlite3 Connection blobopen9338283
Ref: 6819338283
Ref: library/sqlite3 sqlite3 Connection commit9339564
Ref: 2a9b9339564
Ref: library/sqlite3 sqlite3 Connection rollback9339924
Ref: 2acd9339924
Ref: library/sqlite3 sqlite3 Connection close9340291
Ref: 2469340291
Ref: library/sqlite3 sqlite3 Connection execute9340711
Ref: 2ace9340711
Ref: library/sqlite3 sqlite3 Connection executemany9340939
Ref: 2acf9340939
Ref: library/sqlite3 sqlite3 Connection executescript9341173
Ref: 2ad09341173
Ref: library/sqlite3 sqlite3 Connection create_function9341396
Ref: 2a99341396
Ref: library/sqlite3 sqlite3 Connection create_aggregate9343076
Ref: 2aa9343076
Ref: library/sqlite3 sqlite3 Connection create_window_function9345022
Ref: 6809345022
Ref: library/sqlite3 sqlite3 Connection create_collation9348238
Ref: 6769348238
Ref: library/sqlite3 sqlite3 Connection interrupt9349672
Ref: 2ad49349672
Ref: library/sqlite3 sqlite3 Connection set_authorizer9349901
Ref: 2ab9349901
Ref: library/sqlite3 sqlite3 Connection set_progress_handler9351544
Ref: 2ac9351544
Ref: library/sqlite3 sqlite3 Connection set_trace_callback9352396
Ref: 2ad9352396
Ref: library/sqlite3 sqlite3 Connection enable_load_extension9353704
Ref: 8419353704
Ref: library/sqlite3 sqlite3 Connection load_extension9356060
Ref: 4b89356060
Ref: library/sqlite3 sqlite3 Connection iterdump9357065
Ref: 2479357065
Ref: library/sqlite3 sqlite3 Connection backup9358097
Ref: b929358097
Ref: library/sqlite3 sqlite3 Connection getlimit9360481
Ref: 67b9360481
Ref: library/sqlite3 sqlite3 Connection setlimit9361129
Ref: 67a9361129
Ref: library/sqlite3 sqlite3 Connection getconfig9362239
Ref: 4b99362239
Ref: library/sqlite3 sqlite3 Connection setconfig9362523
Ref: 4ba9362523
Ref: library/sqlite3 sqlite3 Connection serialize9362981
Ref: 67e9362981
Ref: library/sqlite3 sqlite3 Connection deserialize9363746
Ref: 67f9363746
Ref: library/sqlite3 sqlite3 Connection autocommit9364921
Ref: 4b69364921
Ref: library/sqlite3 sqlite3 Connection in_transaction9366362
Ref: 2ad79366362
Ref: library/sqlite3 sqlite3 Connection isolation_level9366652
Ref: 2aa89366652
Ref: library/sqlite3 sqlite3 Connection row_factory9367590
Ref: 171a9367590
Ref: library/sqlite3 sqlite3 Connection text_factory9368092
Ref: 2ad99368092
Ref: library/sqlite3 sqlite3 Connection total_changes9368504
Ref: 2ada9368504
Ref: Connection objects-Footnote-19368734
Ref: Connection objects-Footnote-29368780
Ref: Connection objects-Footnote-39368845
Ref: Connection objects-Footnote-49368904
Ref: Connection objects-Footnote-59368963
Ref: Connection objects-Footnote-69369005
Ref: Connection objects-Footnote-79369047
Ref: Connection objects-Footnote-89369139
Ref: Connection objects-Footnote-99369181
Ref: Connection objects-Footnote-109369273
Node: Cursor objects9369374
Ref: library/sqlite3 cursor-objects9369483
Ref: 2adb9369483
Ref: library/sqlite3 sqlite3-cursor-objects9369483
Ref: 2adc9369483
Ref: library/sqlite3 sqlite3 Cursor9370093
Ref: 2a989370093
Ref: library/sqlite3 sqlite3 Cursor execute9370205
Ref: 2d19370205
Ref: library/sqlite3 sqlite3 Cursor executemany9371710
Ref: 2d29371710
Ref: library/sqlite3 sqlite3 Cursor executescript9373220
Ref: 2ad19373220
Ref: library/sqlite3 sqlite3 Cursor fetchone9374067
Ref: 2a999374067
Ref: library/sqlite3 sqlite3 Cursor fetchmany9374348
Ref: 15f09374348
Ref: library/sqlite3 sqlite3 Cursor fetchall9375307
Ref: 2a9c9375307
Ref: library/sqlite3 sqlite3 Cursor close9375589
Ref: 2add9375589
Ref: library/sqlite3 sqlite3 Cursor setinputsizes9375894
Ref: 2ade9375894
Ref: library/sqlite3 sqlite3 Cursor setoutputsize9376004
Ref: 2adf9376004
Ref: library/sqlite3 sqlite3 Cursor arraysize9376126
Ref: 15f19376126
Ref: library/sqlite3 sqlite3 Cursor connection9376466
Ref: 2ae09376466
Ref: library/sqlite3 sqlite3 Cursor description9376967
Ref: 16499376967
Ref: library/sqlite3 sqlite3 Cursor lastrowid9377342
Ref: cf19377342
Ref: library/sqlite3 sqlite3 Cursor rowcount9378035
Ref: 18eb9378035
Ref: library/sqlite3 sqlite3 Cursor row_factory9378592
Ref: 2ad89378592
Ref: library/sqlite3 sqlite3-columns-by-name9379383
Ref: 2ae19379383
Ref: Cursor objects-Footnote-19379419
Ref: Cursor objects-Footnote-29379476
Node: Row objects9379527
Ref: library/sqlite3 row-objects9379630
Ref: 2ae29379630
Ref: library/sqlite3 sqlite3-row-objects9379630
Ref: 2ae39379630
Ref: library/sqlite3 sqlite3 Row9379673
Ref: ea09379673
Ref: library/sqlite3 sqlite3 Row keys9380132
Ref: 2ae49380132
Node: Blob objects9380412
Ref: library/sqlite3 blob-objects9380524
Ref: 2ae59380524
Ref: library/sqlite3 sqlite3-blob-objects9380524
Ref: 2ae69380524
Ref: library/sqlite3 sqlite3 Blob9380569
Ref: 6829380569
Ref: library/sqlite3 sqlite3 Blob close9381745
Ref: 2ae79381745
Ref: library/sqlite3 sqlite3 Blob read9381996
Ref: 2ae89381996
Ref: library/sqlite3 sqlite3 Blob write9382353
Ref: 2ae99382353
Ref: library/sqlite3 sqlite3 Blob tell9382583
Ref: 2aea9382583
Ref: library/sqlite3 sqlite3 Blob seek9382669
Ref: 2aeb9382669
Node: PrepareProtocol objects9383094
Ref: library/sqlite3 prepareprotocol-objects9383208
Ref: 2aec9383208
Ref: library/sqlite3 sqlite3 PrepareProtocol9383275
Ref: 18f69383275
Ref: PrepareProtocol objects-Footnote-19383545
Node: Exceções<7>9383587
Ref: library/sqlite3 exceptions9383712
Ref: 2aee9383712
Ref: library/sqlite3 sqlite3-exceptions9383712
Ref: 2aef9383712
Ref: library/sqlite3 sqlite3 Warning9383822
Ref: 19409383822
Ref: library/sqlite3 sqlite3 Error9384123
Ref: 19ae9384123
Ref: library/sqlite3 sqlite3 Error sqlite_errorcode9384479
Ref: 6789384479
Ref: library/sqlite3 sqlite3 Error sqlite_errorname9384612
Ref: 6799384612
Ref: library/sqlite3 sqlite3 InterfaceError9384776
Ref: 67d9384776
Ref: library/sqlite3 sqlite3 DatabaseError9385055
Ref: 2ad59385055
Ref: library/sqlite3 sqlite3 DataError9385370
Ref: 19dc9385370
Ref: library/sqlite3 sqlite3 OperationalError9385619
Ref: 19dd9385619
Ref: library/sqlite3 sqlite3 IntegrityError9385973
Ref: 2af09385973
Ref: library/sqlite3 sqlite3 InternalError9386185
Ref: 2af19386185
Ref: library/sqlite3 sqlite3 ProgrammingError9386461
Ref: 4f29386461
Ref: library/sqlite3 sqlite3 NotSupportedError9386769
Ref: 2ad39386769
Ref: Exceções<7>-Footnote-19387202
Ref: Exceções<7>-Footnote-29387244
Ref: Exceções<7>-Footnote-39387284
Node: SQLite and Python types9387324
Ref: library/sqlite3 sqlite-and-python-types9387468
Ref: 2af29387468
Ref: library/sqlite3 sqlite3-types9387468
Ref: 2aa49387468
Node: Default adapters and converters deprecated9389386
Ref: library/sqlite3 default-adapters-and-converters-deprecated9389546
Ref: 2af39389546
Ref: library/sqlite3 sqlite3-default-converters9389546
Ref: 4ef9389546
Ref: Default adapters and converters deprecated-Footnote-19390778
Node: Interface de linha de comando9390825
Ref: library/sqlite3 command-line-interface9390953
Ref: 2af49390953
Ref: library/sqlite3 sqlite3-cli9390953
Ref: 4419390953
Ref: library/sqlite3 cmdoption-python-m-sqlite3-h-v-filename-sql-h9391317
Ref: 2af59391317
Ref: library/sqlite3 cmdoption-python-m-sqlite3-h-v-filename-sql-help9391317
Ref: 2af69391317
Ref: library/sqlite3 cmdoption-python-m-sqlite3-h-v-filename-sql-v9391363
Ref: 2af79391363
Ref: library/sqlite3 cmdoption-python-m-sqlite3-h-v-filename-sql-version9391363
Ref: 2af89391363
Node: Guias de como fazer9391466
Ref: library/sqlite3 how-to-guides9391634
Ref: 2af99391634
Ref: library/sqlite3 sqlite3-howtos9391634
Ref: 2a949391634
Node: How to use placeholders to bind values in SQL queries9392112
Ref: library/sqlite3 how-to-use-placeholders-to-bind-values-in-sql-queries9392279
Ref: 2afa9392279
Ref: library/sqlite3 sqlite3-placeholders9392279
Ref: 2d39392279
Ref: How to use placeholders to bind values in SQL queries-Footnote-19394532
Ref: How to use placeholders to bind values in SQL queries-Footnote-29394584
Node: How to adapt custom Python types to SQLite values9394626
Ref: library/sqlite3 how-to-adapt-custom-python-types-to-sqlite-values9394853
Ref: 2afb9394853
Ref: library/sqlite3 sqlite3-adapters9394853
Ref: 2a9d9394853
Node: How to write adaptable objects9395642
Ref: library/sqlite3 how-to-write-adaptable-objects9395800
Ref: 2afc9395800
Ref: library/sqlite3 sqlite3-conform9395800
Ref: 2aed9395800
Node: How to register adapter callables9396711
Ref: library/sqlite3 how-to-register-adapter-callables9396869
Ref: 2afd9396869
Node: How to convert SQLite values to custom Python types9397513
Ref: library/sqlite3 how-to-convert-sqlite-values-to-custom-python-types9397716
Ref: 2afe9397716
Ref: library/sqlite3 sqlite3-converters9397716
Ref: 2a9e9397716
Node: Adapter and converter recipes9400287
Ref: library/sqlite3 adapter-and-converter-recipes9400479
Ref: 2aff9400479
Ref: library/sqlite3 sqlite3-adapter-converter-recipes9400479
Ref: 4f09400479
Node: How to use connection shortcut methods9401936
Ref: library/sqlite3 how-to-use-connection-shortcut-methods9402118
Ref: 2b009402118
Ref: library/sqlite3 sqlite3-connection-shortcuts9402118
Ref: 2acc9402118
Node: How to use the connection context manager9403402
Ref: library/sqlite3 how-to-use-the-connection-context-manager9403583
Ref: 2b019403583
Ref: library/sqlite3 sqlite3-connection-context-manager9403583
Ref: 18f79403583
Node: How to work with SQLite URIs9405334
Ref: library/sqlite3 how-to-work-with-sqlite-uris9405512
Ref: 2b029405512
Ref: library/sqlite3 sqlite3-uri-tricks9405512
Ref: 2aab9405512
Ref: How to work with SQLite URIs-Footnote-19406815
Node: How to create and use row factories9406855
Ref: library/sqlite3 how-to-create-and-use-row-factories9407030
Ref: 2b039407030
Ref: library/sqlite3 sqlite3-howto-row-factory9407030
Ref: 2a9f9407030
Node: How to handle non-UTF-8 text encodings9409890
Ref: library/sqlite3 how-to-handle-non-utf-8-text-encodings9410028
Ref: 2b049410028
Ref: library/sqlite3 sqlite3-howto-encoding9410028
Ref: 2ad69410028
Ref: How to handle non-UTF-8 text encodings-Footnote-19411361
Node: Explicação9411410
Ref: library/sqlite3 explanation9411558
Ref: 2b059411558
Ref: library/sqlite3 sqlite3-explanation9411558
Ref: 2a959411558
Ref: library/sqlite3 sqlite3-transaction-control9411603
Ref: 2b069411603
Node: Controle de transações9411642
Ref: library/sqlite3 sqlite3-controlling-transactions9411715
Ref: 2a9a9411715
Ref: library/sqlite3 transaction-control9411715
Ref: 2b079411715
Node: Controle de transações através do atributo autocommit9412263
Ref: library/sqlite3 sqlite3-transaction-control-autocommit9412449
Ref: 4b79412449
Ref: library/sqlite3 transaction-control-via-the-autocommit-attribute9412449
Ref: 2b089412449
Ref: Controle de transações através do atributo autocommit-Footnote-19414371
Ref: Controle de transações através do atributo autocommit-Footnote-29414413
Ref: Controle de transações através do atributo autocommit-Footnote-39414505
Node: Controle de transação através do atributo isolation_level9414547
Ref: library/sqlite3 sqlite3-transaction-control-isolation-level9414733
Ref: 2aa99414733
Ref: library/sqlite3 transaction-control-via-the-isolation-level-attribute9414733
Ref: 2b099414733
Ref: Controle de transação através do atributo isolation_level-Footnote-19417012
Ref: Controle de transação através do atributo isolation_level-Footnote-29417112
Node: Compressão de Dados e Arquivamento9417204
Ref: library/archiving doc9417365
Ref: 2a419417365
Ref: library/archiving archiving9417365
Ref: 2b0a9417365
Ref: library/archiving data-compression-and-archiving9417365
Ref: 2b0b9417365
Ref: library/archiving translation-repo9417365
Ref: 2b0c9417365
Node: zlib — Compactação compatível com gzip9417980
Ref: library/zlib doc9418139
Ref: 2b0d9418139
Ref: library/zlib module-zlib9418139
Ref: 1339418139
Ref: library/zlib zlib-compression-compatible-with-gzip9418139
Ref: 2b0e9418139
Ref: library/zlib zlib error9419147
Ref: 2b0f9419147
Ref: library/zlib zlib adler329419246
Ref: 19449419246
Ref: library/zlib zlib compress9420181
Ref: 63f9420181
Ref: library/zlib compress-wbits9420729
Ref: 2b149420729
Ref: library/zlib zlib compressobj9422074
Ref: 2b169422074
Ref: library/zlib zlib crc329424054
Ref: 178b9424054
Ref: library/zlib zlib decompress9424869
Ref: d2f9424869
Ref: library/zlib decompress-wbits9425316
Ref: 2b1d9425316
Ref: library/zlib zlib decompressobj9427204
Ref: 2b1e9427204
Ref: library/zlib zlib Compress compress9428270
Ref: 2b1f9428270
Ref: library/zlib zlib Compress flush9428666
Ref: 2b209428666
Ref: library/zlib zlib Compress copy9429543
Ref: 2b279429543
Ref: library/zlib zlib Decompress unused_data9429981
Ref: 2b289429981
Ref: library/zlib zlib Decompress unconsumed_tail9430334
Ref: 2b299430334
Ref: library/zlib zlib Decompress eof9430834
Ref: 11ac9430834
Ref: library/zlib zlib Decompress decompress9431102
Ref: 2b2a9431102
Ref: library/zlib zlib Decompress flush9432225
Ref: 2b2b9432225
Ref: library/zlib zlib Decompress copy9432666
Ref: 2b2c9432666
Ref: library/zlib zlib DEFLATED9433194
Ref: 2b179433194
Ref: library/zlib zlib MAX_WBITS9433267
Ref: 2b159433267
Ref: library/zlib zlib DEF_MEM_LEVEL9433476
Ref: 2b2d9433476
Ref: library/zlib zlib DEF_BUF_SIZE9433572
Ref: 2b2e9433572
Ref: library/zlib zlib Z_NO_COMPRESSION9433673
Ref: 2b129433673
Ref: library/zlib zlib Z_BEST_SPEED9433797
Ref: 2b109433797
Ref: library/zlib zlib Z_BEST_COMPRESSION9433910
Ref: 2b119433910
Ref: library/zlib zlib Z_DEFAULT_COMPRESSION9434027
Ref: 2b139434027
Ref: library/zlib zlib Z_DEFAULT_STRATEGY9434228
Ref: 2b189434228
Ref: library/zlib zlib Z_FILTERED9434327
Ref: 2b199434327
Ref: library/zlib zlib Z_HUFFMAN_ONLY9434445
Ref: 2b1a9434445
Ref: library/zlib zlib Z_RLE9434552
Ref: 2b1b9434552
Ref: library/zlib zlib Z_FIXED9434831
Ref: 2b1c9434831
Ref: library/zlib zlib Z_NO_FLUSH9435088
Ref: 2b219435088
Ref: library/zlib zlib Z_PARTIAL_FLUSH9435220
Ref: 2b229435220
Ref: library/zlib zlib Z_SYNC_FLUSH9435320
Ref: 2b239435320
Ref: library/zlib zlib Z_FULL_FLUSH9435444
Ref: 2b249435444
Ref: library/zlib zlib Z_FINISH9435577
Ref: 2b269435577
Ref: library/zlib zlib Z_BLOCK9435710
Ref: 2b259435710
Ref: library/zlib zlib Z_TREES9435954
Ref: 2b2f9435954
Ref: library/zlib zlib ZLIB_VERSION9436378
Ref: 2b309436378
Ref: library/zlib zlib ZLIB_RUNTIME_VERSION9436657
Ref: 11ad9436657
Ref: zlib — Compactação compatível com gzip-Footnote-19437310
Ref: zlib — Compactação compatível com gzip-Footnote-29437355
Ref: zlib — Compactação compatível com gzip-Footnote-39437396
Node: gzip — Suporte para arquivos gzip9437449
Ref: library/gzip doc9437655
Ref: 2b319437655
Ref: library/gzip gzip-support-for-gzip-files9437655
Ref: 2b329437655
Ref: library/gzip module-gzip9437655
Ref: 679437655
Ref: library/gzip translation-repo9437655
Ref: 2b339437655
Ref: library/gzip gzip open9438684
Ref: 2b349438684
Ref: library/gzip gzip BadGzipFile9440304
Ref: 9ff9440304
Ref: library/gzip gzip GzipFile9440580
Ref: 41a9440580
Ref: library/gzip gzip GzipFile peek9443788
Ref: 124c9443788
Ref: library/gzip gzip GzipFile mode9444340
Ref: 2b379444340
Ref: library/gzip gzip GzipFile mtime9444532
Ref: 2b359444532
Ref: library/gzip gzip GzipFile name9444906
Ref: 50d9444906
Ref: library/gzip gzip compress9446223
Ref: 63e9446223
Ref: library/gzip gzip decompress9447290
Ref: 124d9447290
Ref: gzip — Suporte para arquivos gzip-Footnote-19448026
Node: Exemplos de uso9448090
Ref: library/gzip examples-of-usage9448218
Ref: 2b399448218
Ref: library/gzip gzip-usage-examples9448218
Ref: 2b3a9448218
Ref: Exemplos de uso-Footnote-19449391
Node: Interface de linha de comando<2>9449444
Ref: library/gzip command-line-interface9449572
Ref: 2b3b9449572
Ref: library/gzip gzip-cli9449572
Ref: 2b3c9449572
Node: Opções de linha de comando9450065
Ref: library/gzip command-line-options9450162
Ref: 2b3d9450162
Ref: library/gzip cmdoption-gzip-arg-file9450237
Ref: 2b3e9450237
Ref: library/gzip cmdoption-gzip-fast9450328
Ref: 2b3f9450328
Ref: library/gzip cmdoption-gzip-best9450419
Ref: 2b409450419
Ref: library/gzip cmdoption-gzip-d9450510
Ref: 2b419450510
Ref: library/gzip cmdoption-gzip-decompress9450510
Ref: 2b429450510
Ref: library/gzip cmdoption-gzip-h9450574
Ref: 2b439450574
Ref: library/gzip cmdoption-gzip-help9450574
Ref: 2b449450574
Node: bz2 — Suporte para compressão bzip29450631
Ref: library/bz2 doc9450838
Ref: 2b459450838
Ref: library/bz2 bz2-support-for-bzip2-compression9450838
Ref: 2b469450838
Ref: library/bz2 module-bz29450838
Ref: 139450838
Ref: library/bz2 translation-repo9450838
Ref: 2b479450838
Ref: bz2 — Suporte para compressão bzip2-Footnote-19451849
Node: Des compressão de arquivos9451912
Ref: library/bz2 de-compression-of-files9452050
Ref: 2b489452050
Ref: library/bz2 bz2 open9452126
Ref: 10cc9452126
Ref: library/bz2 bz2 BZ2File9453659
Ref: 86a9453659
Ref: library/bz2 bz2 BZ2File peek9455155
Ref: 2b4a9455155
Ref: library/bz2 bz2 BZ2File fileno9455792
Ref: 2b4b9455792
Ref: library/bz2 bz2 BZ2File readable9455934
Ref: 2b4c9455934
Ref: library/bz2 bz2 BZ2File seekable9456060
Ref: 2b4d9456060
Ref: library/bz2 bz2 BZ2File writable9456178
Ref: 2b4e9456178
Ref: library/bz2 bz2 BZ2File read19456307
Ref: 2b4f9456307
Ref: library/bz2 bz2 BZ2File readinto9456679
Ref: 2b509456679
Ref: library/bz2 bz2 BZ2File mode9456838
Ref: 2b519456838
Ref: library/bz2 bz2 BZ2File name9456964
Ref: 2b529456964
Node: Des compressão incremental9458291
Ref: library/bz2 incremental-de-compression9458476
Ref: 2b549458476
Ref: library/bz2 bz2 BZ2Compressor9458552
Ref: 18569458552
Ref: library/bz2 bz2 BZ2Compressor compress9458896
Ref: 2b559458896
Ref: library/bz2 bz2 BZ2Compressor flush9459271
Ref: 2b569459271
Ref: library/bz2 bz2 BZ2Decompressor9459511
Ref: 18549459511
Ref: library/bz2 bz2 BZ2Decompressor decompress9460099
Ref: df49460099
Ref: library/bz2 bz2 BZ2Decompressor eof9461577
Ref: 2b599461577
Ref: library/bz2 bz2 BZ2Decompressor unused_data9461705
Ref: 2b589461705
Ref: library/bz2 bz2 BZ2Decompressor needs_input9461922
Ref: 2b579461922
Node: De compressão de uma só vez one-shot9462164
Ref: library/bz2 one-shot-de-compression9462340
Ref: 2b5a9462340
Ref: library/bz2 bz2 compress9462441
Ref: 25ad9462441
Ref: library/bz2 bz2 decompress9462734
Ref: 10cd9462734
Node: Exemplos de uso<2>9463098
Ref: library/bz2 bz2-usage-examples9463238
Ref: 2b5b9463238
Ref: library/bz2 examples-of-usage9463238
Ref: 2b5c9463238
Node: lzma — Compressão usando o algoritmo LZMA9466216
Ref: library/lzma doc9466425
Ref: 2b5d9466425
Ref: library/lzma lzma-compression-using-the-lzma-algorithm9466425
Ref: 2b5e9466425
Ref: library/lzma module-lzma9466425
Ref: 8a9466425
Ref: library/lzma translation-repo9466425
Ref: 2b5f9466425
Ref: library/lzma lzma LZMAError9467314
Ref: 2b609467314
Ref: lzma — Compressão usando o algoritmo LZMA-Footnote-19467759
Node: Lendo e escrevendo arquivos comprimidos9467823
Ref: library/lzma reading-and-writing-compressed-files9467998
Ref: 2b619467998
Ref: library/lzma lzma open9468097
Ref: 2b629468097
Ref: library/lzma lzma LZMAFile9469977
Ref: 10429469977
Ref: library/lzma lzma LZMAFile peek9471993
Ref: 2b639471993
Ref: library/lzma lzma LZMAFile mode9472659
Ref: 2b649472659
Ref: library/lzma lzma LZMAFile name9472785
Ref: 2b659472785
Node: Comprimindo e descomprimindo dados na memória9473264
Ref: library/lzma compressing-and-decompressing-data-in-memory9473459
Ref: 2b669473459
Ref: library/lzma lzma LZMACompressor9473571
Ref: 18559473571
Ref: library/lzma lzma LZMACompressor compress9477045
Ref: 2b699477045
Ref: library/lzma lzma LZMACompressor flush9477557
Ref: 2b6a9477557
Ref: library/lzma lzma LZMADecompressor9477837
Ref: 18539477837
Ref: library/lzma lzma LZMADecompressor decompress9479504
Ref: e5b9479504
Ref: library/lzma lzma LZMADecompressor check9480982
Ref: 2b6e9480982
Ref: library/lzma lzma LZMADecompressor eof9481261
Ref: 2b6f9481261
Ref: library/lzma lzma LZMADecompressor unused_data9481351
Ref: 2b6d9481351
Ref: library/lzma lzma LZMADecompressor needs_input9481523
Ref: 2b6c9481523
Ref: library/lzma lzma compress9481765
Ref: 2b679481765
Ref: library/lzma lzma decompress9482116
Ref: 2b6b9482116
Node: Diversos<3>9482630
Ref: library/lzma miscellaneous9482833
Ref: 2b709482833
Ref: library/lzma lzma is_check_supported9482870
Ref: 2b719482870
Node: Especificando cadeias de filtros personalizadas9483281
Ref: library/lzma filter-chain-specs9483449
Ref: 2b689483449
Ref: library/lzma specifying-custom-filter-chains9483449
Ref: 2b729483449
Node: Exemplos<8>9486437
Ref: library/lzma examples9486585
Ref: 2b739486585
Node: zipfile — Trabalha com arquivos ZIP9487995
Ref: library/zipfile doc9488211
Ref: 2b749488211
Ref: library/zipfile module-zipfile9488211
Ref: 1319488211
Ref: library/zipfile translation-repo9488211
Ref: 2b759488211
Ref: library/zipfile zipfile-work-with-zip-archives9488211
Ref: 2b769488211
Ref: library/zipfile zipfile BadZipFile9489137
Ref: 18f39489137
Ref: library/zipfile zipfile BadZipfile9489265
Ref: 2b779489265
Ref: library/zipfile zipfile LargeZipFile9489445
Ref: 2b789489445
Ref: library/zipfile zipfile ZipInfo9490093
Ref: d2c9490093
Ref: library/zipfile zipfile is_zipfile9491112
Ref: 136e9491112
Ref: library/zipfile zipfile ZIP_STORED9491466
Ref: 2b7d9491466
Ref: library/zipfile zipfile ZIP_DEFLATED9491563
Ref: 2b7e9491563
Ref: library/zipfile zipfile ZIP_BZIP29491700
Ref: 2b7f9491700
Ref: library/zipfile zipfile ZIP_LZMA9491863
Ref: 2b809491863
Ref: zipfile — Trabalha com arquivos ZIP-Footnote-19492966
Ref: zipfile — Trabalha com arquivos ZIP-Footnote-29493031
Ref: zipfile — Trabalha com arquivos ZIP-Footnote-39493099
Ref: zipfile — Trabalha com arquivos ZIP-Footnote-49493167
Node: Objetos ZipFile9493208
Ref: library/zipfile id19493318
Ref: 2b819493318
Ref: library/zipfile zipfile-objects9493318
Ref: 2b799493318
Ref: library/zipfile zipfile ZipFile9493369
Ref: 6c49493369
Ref: library/zipfile zipfile ZipFile close9498818
Ref: 2b829498818
Ref: library/zipfile zipfile ZipFile getinfo9498993
Ref: 2b7a9498993
Ref: library/zipfile zipfile ZipFile infolist9499242
Ref: 2b7b9499242
Ref: library/zipfile zipfile ZipFile namelist9499485
Ref: 2b839499485
Ref: library/zipfile zipfile ZipFile open9499575
Ref: 41b9499575
Ref: library/zipfile zipfile ZipFile extract9502647
Ref: 2b869502647
Ref: library/zipfile zipfile ZipFile extractall9504125
Ref: 2b879504125
Ref: library/zipfile zipfile ZipFile printdir9505228
Ref: 2b889505228
Ref: library/zipfile zipfile ZipFile setpassword9505336
Ref: 2b899505336
Ref: library/zipfile zipfile ZipFile read9505487
Ref: 2b859505487
Ref: library/zipfile zipfile ZipFile testzip9506489
Ref: 2b8a9506489
Ref: library/zipfile zipfile ZipFile write9506895
Ref: d709506895
Ref: library/zipfile zipfile ZipFile writestr9508862
Ref: 136f9508862
Ref: library/zipfile zipfile ZipFile mkdir9510513
Ref: 6c59510513
Ref: library/zipfile zipfile ZipFile filename9511046
Ref: 2b8b9511046
Ref: library/zipfile zipfile ZipFile debug9511105
Ref: 2b8c9511105
Ref: library/zipfile zipfile ZipFile comment9511339
Ref: 2b8d9511339
Node: Objetos Path9511674
Ref: library/zipfile id29511810
Ref: 2b8e9511810
Ref: library/zipfile path-objects9511810
Ref: 2b8f9511810
Ref: library/zipfile zipfile Path9511855
Ref: 6c99511855
Ref: library/zipfile zipfile Path name9513124
Ref: 2b909513124
Ref: library/zipfile zipfile Path open9513186
Ref: 16809513186
Ref: library/zipfile zipfile Path iterdir9514190
Ref: 2b919514190
Ref: library/zipfile zipfile Path is_dir9514265
Ref: 2b929514265
Ref: library/zipfile zipfile Path is_file9514374
Ref: 2b939514374
Ref: library/zipfile zipfile Path is_symlink9514481
Ref: 2b949514481
Ref: library/zipfile zipfile Path exists9514749
Ref: 2b959514749
Ref: library/zipfile zipfile Path suffix9514889
Ref: 6c79514889
Ref: library/zipfile zipfile Path stem9515130
Ref: 6c69515130
Ref: library/zipfile zipfile Path suffixes9515290
Ref: 6c89515290
Ref: library/zipfile zipfile Path read_text9515495
Ref: 18669515495
Ref: library/zipfile zipfile Path read_bytes9516132
Ref: 2b969516132
Ref: library/zipfile zipfile Path joinpath9516203
Ref: 2b979516203
Ref: Objetos Path-Footnote-19516913
Node: Objetos PyZipFile9516952
Ref: library/zipfile id39517088
Ref: 2b989517088
Ref: library/zipfile pyzipfile-objects9517088
Ref: 2b999517088
Ref: library/zipfile zipfile PyZipFile9517281
Ref: 102f9517281
Ref: library/zipfile zipfile PyZipFile writepy9517628
Ref: 102e9517628
Node: Objetos ZipInfo9520761
Ref: library/zipfile id49520917
Ref: 2b9a9520917
Ref: library/zipfile zipinfo-objects9520917
Ref: 2b7c9520917
Ref: library/zipfile zipfile ZipInfo from_file9521313
Ref: d2b9521313
Ref: library/zipfile zipfile ZipInfo is_dir9522543
Ref: d2d9522543
Ref: library/zipfile zipfile ZipInfo filename9522767
Ref: 2b9b9522767
Ref: library/zipfile zipfile ZipInfo date_time9522832
Ref: 2b9c9522832
Ref: library/zipfile zipfile ZipInfo compress_type9524699
Ref: 2b9d9524699
Ref: library/zipfile zipfile ZipInfo comment9524783
Ref: 2b9e9524783
Ref: library/zipfile zipfile ZipInfo extra9524905
Ref: 2b9f9524905
Ref: library/zipfile zipfile ZipInfo create_system9525112
Ref: 2ba09525112
Ref: library/zipfile zipfile ZipInfo create_version9525189
Ref: 2ba19525189
Ref: library/zipfile zipfile ZipInfo extract_version9525276
Ref: 2ba29525276
Ref: library/zipfile zipfile ZipInfo reserved9525375
Ref: 2ba39525375
Ref: library/zipfile zipfile ZipInfo flag_bits9525427
Ref: 2ba49525427
Ref: library/zipfile zipfile ZipInfo volume9525494
Ref: 2ba59525494
Ref: library/zipfile zipfile ZipInfo internal_attr9525574
Ref: 2ba69525574
Ref: library/zipfile zipfile ZipInfo external_attr9525637
Ref: 2ba79525637
Ref: library/zipfile zipfile ZipInfo header_offset9525710
Ref: 2ba89525710
Ref: library/zipfile zipfile ZipInfo CRC9525804
Ref: 2ba99525804
Ref: library/zipfile zipfile ZipInfo compress_size9525872
Ref: 2baa9525872
Ref: library/zipfile zipfile ZipInfo file_size9525946
Ref: 2b849525946
Ref: Objetos ZipInfo-Footnote-19526057
Node: Interface de linha de comando<3>9526125
Ref: library/zipfile command-line-interface9526292
Ref: 2bab9526292
Ref: library/zipfile zipfile-commandline9526292
Ref: 2bac9526292
Node: Opções de linha de comando<2>9527165
Ref: library/zipfile command-line-options9527265
Ref: 2bb09527265
Ref: library/zipfile cmdoption-zipfile-l9527340
Ref: 2baf9527340
Ref: library/zipfile cmdoption-zipfile-list9527365
Ref: 2bb19527365
Ref: library/zipfile cmdoption-zipfile-c9527435
Ref: 2bad9527435
Ref: library/zipfile cmdoption-zipfile-create9527484
Ref: 2bb29527484
Ref: library/zipfile cmdoption-zipfile-e9527595
Ref: 2bae9527595
Ref: library/zipfile cmdoption-zipfile-extract9527633
Ref: 2bb39527633
Ref: library/zipfile cmdoption-zipfile-t9527738
Ref: 2bb49527738
Ref: library/zipfile cmdoption-zipfile-test9527763
Ref: 2bb59527763
Ref: library/zipfile cmdoption-zipfile-metadata-encoding9527842
Ref: 2bb69527842
Node: Armadilhas de descompressão9528035
Ref: library/zipfile decompression-pitfalls9528178
Ref: 2bb79528178
Node: Do próprio arquivo9528506
Ref: library/zipfile from-file-itself9528634
Ref: 2bb89528634
Node: Limitações do sistema de arquivos9528856
Ref: library/zipfile file-system-limitations9529017
Ref: 2bb99529017
Node: Limitações de recursos9529374
Ref: library/zipfile resources-limitations9529529
Ref: 2bba9529529
Ref: library/zipfile zipfile-resources-limitations9529529
Ref: 2bbb9529529
Ref: Limitações de recursos-Footnote-19529884
Node: Interrupção9529931
Ref: library/zipfile interruption9530087
Ref: 2bbc9530087
Node: Comportamentos padrão da extração9530302
Ref: library/zipfile default-behaviors-of-extraction9530425
Ref: 2bbd9530425
Node: tarfile — Ler e gravar arquivos do tipo tar9530719
Ref: library/tarfile doc9530882
Ref: 2bbe9530882
Ref: library/tarfile module-tarfile9530882
Ref: de9530882
Ref: library/tarfile tarfile-read-and-write-tar-archive-files9530882
Ref: 2bbf9530882
Ref: library/tarfile translation-repo9530882
Ref: 2bc09530882
Ref: library/tarfile tarfile open9532627
Ref: ea69532627
Ref: library/tarfile tarfile is_tarfile9539703
Ref: 19659539703
Ref: library/tarfile tarfile TarError9540073
Ref: 2bc49540073
Ref: library/tarfile tarfile ReadError9540171
Ref: 19da9540171
Ref: library/tarfile tarfile CompressionError9540358
Ref: 2bc29540358
Ref: library/tarfile tarfile StreamError9540538
Ref: 2bc59540538
Ref: library/tarfile tarfile ExtractError9540675
Ref: 2bc69540675
Ref: library/tarfile tarfile HeaderError9540861
Ref: 2bc79540861
Ref: library/tarfile tarfile FilterError9540990
Ref: 2bc99540990
Ref: library/tarfile tarfile FilterError tarinfo9541093
Ref: 2bcb9541093
Ref: library/tarfile tarfile AbsolutePathError9541232
Ref: 2bcd9541232
Ref: library/tarfile tarfile OutsideDestinationError9541359
Ref: 2bce9541359
Ref: library/tarfile tarfile SpecialFileError9541498
Ref: 2bcf9541498
Ref: library/tarfile tarfile AbsoluteLinkError9541656
Ref: 2bd09541656
Ref: library/tarfile tarfile LinkOutsideDestinationError9541792
Ref: 2bd19541792
Ref: library/tarfile tarfile LinkFallbackError9541959
Ref: 4309541959
Ref: library/tarfile tarfile ENCODING9542405
Ref: 2bd29542405
Ref: library/tarfile tarfile REGTYPE9542593
Ref: 2bd39542593
Ref: library/tarfile tarfile AREGTYPE9542619
Ref: 2bd49542619
Ref: library/tarfile tarfile LNKTYPE9542689
Ref: 2bd69542689
Ref: library/tarfile tarfile SYMTYPE9542772
Ref: 2bd79542772
Ref: library/tarfile tarfile CHRTYPE9542842
Ref: 2bd89542842
Ref: library/tarfile tarfile BLKTYPE9542931
Ref: 2bd99542931
Ref: library/tarfile tarfile DIRTYPE9543015
Ref: 2bda9543015
Ref: library/tarfile tarfile FIFOTYPE9543080
Ref: 2bdb9543080
Ref: library/tarfile tarfile CONTTYPE9543164
Ref: 2bdc9543164
Ref: library/tarfile tarfile GNUTYPE_LONGNAME9543237
Ref: 2bdd9543237
Ref: library/tarfile tarfile GNUTYPE_LONGLINK9543324
Ref: 2bde9543324
Ref: library/tarfile tarfile GNUTYPE_SPARSE9543411
Ref: 2bdf9543411
Ref: library/tarfile tarfile USTAR_FORMAT9543700
Ref: 2be19543700
Ref: library/tarfile tarfile GNU_FORMAT9543768
Ref: 2be29543768
Ref: library/tarfile tarfile PAX_FORMAT9543820
Ref: 2be39543820
Ref: library/tarfile tarfile DEFAULT_FORMAT9543884
Ref: 2be49543884
Ref: tarfile — Ler e gravar arquivos do tipo tar-Footnote-19544818
Ref: tarfile — Ler e gravar arquivos do tipo tar-Footnote-29544885
Node: Objetos TarFile9544957
Ref: library/tarfile id19545078
Ref: 2be59545078
Ref: library/tarfile tarfile-objects9545078
Ref: 2bc19545078
Ref: library/tarfile tarfile TarFile9546047
Ref: 12509546047
Ref: library/tarfile tarfile TarFile open9549733
Ref: 19669549733
Ref: library/tarfile tarfile TarFile getmember9549907
Ref: 19799549907
Ref: library/tarfile tarfile TarFile getmembers9550276
Ref: ea89550276
Ref: library/tarfile tarfile TarFile getnames9550459
Ref: 2be79550459
Ref: library/tarfile tarfile TarFile list9550635
Ref: ea79550635
Ref: library/tarfile tarfile TarFile next9551124
Ref: 2be89551124
Ref: library/tarfile tarfile TarFile extractall9551361
Ref: 42e9551361
Ref: library/tarfile tarfile TarFile extract9553198
Ref: 42f9553198
Ref: library/tarfile tarfile TarFile extractfile9554567
Ref: 2be99554567
Ref: library/tarfile tarfile TarFile errorlevel9555235
Ref: 4319555235
Ref: library/tarfile tarfile TarFile extraction_filter9556204
Ref: 2bea9556204
Ref: library/tarfile tarfile TarFile add9557520
Ref: c0e9557520
Ref: library/tarfile tarfile TarFile addfile9558436
Ref: 171c9558436
Ref: library/tarfile tarfile TarFile gettarinfo9558958
Ref: 2bec9558958
Ref: library/tarfile tarfile TarFile close9560112
Ref: 2bef9560112
Ref: library/tarfile tarfile TarFile pax_headers9560256
Ref: 2bf09560256
Node: Objetos TarInfo9560393
Ref: library/tarfile id29560544
Ref: 2bf19560544
Ref: library/tarfile tarinfo-objects9560544
Ref: 2bcc9560544
Ref: library/tarfile tarfile TarInfo9561768
Ref: 12519561768
Ref: library/tarfile tarfile TarInfo frombuf9561849
Ref: 2bc89561849
Ref: library/tarfile tarfile TarInfo fromtarfile9562088
Ref: 2bf39562088
Ref: library/tarfile tarfile TarInfo tobuf9562271
Ref: 2bf49562271
Ref: library/tarfile tarfile TarInfo name9562712
Ref: 2bee9562712
Ref: library/tarfile tarfile TarInfo size9562780
Ref: 2bed9562780
Ref: library/tarfile tarfile TarInfo mtime9562849
Ref: 2bf59562849
Ref: library/tarfile tarfile TarInfo mode9563209
Ref: 2bf89563209
Ref: library/tarfile tarfile TarInfo type9563481
Ref: 2bd59563481
Ref: library/tarfile tarfile TarInfo linkname9563924
Ref: 2bf99563924
Ref: library/tarfile tarfile TarInfo uid9564335
Ref: 2bfa9564335
Ref: library/tarfile tarfile TarInfo gid9564627
Ref: 2bfb9564627
Ref: library/tarfile tarfile TarInfo uname9564916
Ref: 2bfc9564916
Ref: library/tarfile tarfile TarInfo gname9565160
Ref: 2bfd9565160
Ref: library/tarfile tarfile TarInfo chksum9565401
Ref: 2bfe9565401
Ref: library/tarfile tarfile TarInfo devmajor9565491
Ref: 2bff9565491
Ref: library/tarfile tarfile TarInfo devminor9565580
Ref: 2c009565580
Ref: library/tarfile tarfile TarInfo offset9565665
Ref: 2c019565665
Ref: library/tarfile tarfile TarInfo offset_data9565752
Ref: 2c029565752
Ref: library/tarfile tarfile TarInfo sparse9565845
Ref: 2c039565845
Ref: library/tarfile tarfile TarInfo pax_headers9565908
Ref: 2c049565908
Ref: library/tarfile tarfile TarInfo replace9566050
Ref: 2bf29566050
Ref: library/tarfile tarfile TarInfo isfile9566745
Ref: 2c059566745
Ref: library/tarfile tarfile TarInfo isreg9566866
Ref: 2c069566866
Ref: library/tarfile tarfile TarInfo isdir9566933
Ref: 2c079566933
Ref: library/tarfile tarfile TarInfo issym9567017
Ref: 2c089567017
Ref: library/tarfile tarfile TarInfo islnk9567106
Ref: 2c099567106
Ref: library/tarfile tarfile TarInfo ischr9567192
Ref: 2c0a9567192
Ref: library/tarfile tarfile TarInfo isblk9567275
Ref: 2c0b9567275
Ref: library/tarfile tarfile TarInfo isfifo9567361
Ref: 2c0c9567361
Ref: library/tarfile tarfile TarInfo isdev9567440
Ref: 2c0d9567440
Node: Filtros de extração9567562
Ref: library/tarfile extraction-filters9567730
Ref: 2c0e9567730
Ref: library/tarfile tarfile-extraction-filter9567730
Ref: 46c9567730
Ref: Filtros de extração-Footnote-19570850
Node: Default named filters9570892
Ref: library/tarfile default-named-filters9570993
Ref: 2c109570993
Ref: library/tarfile tarfile fully_trusted_filter9571157
Ref: 2beb9571157
Ref: library/tarfile tarfile tar_filter9571307
Ref: 2c0f9571307
Ref: library/tarfile tarfile data_filter9572114
Ref: 42d9572114
Node: Filter errors9573825
Ref: library/tarfile filter-errors9573969
Ref: 2c119573969
Ref: library/tarfile tarfile-extraction-refuse9573969
Ref: 2bca9573969
Node: Dicas para verificação adicional9574329
Ref: library/tarfile hints-for-further-verification9574493
Ref: 2c129574493
Node: Suporte a versões mais antigas do Python9576246
Ref: library/tarfile supporting-older-python-versions9576431
Ref: 2c139576431
Node: Stateful extraction filter example9578012
Ref: library/tarfile stateful-extraction-filter-example9578154
Ref: 2c149578154
Node: Interface de linha de comando<4>9578949
Ref: library/tarfile command-line-interface9579113
Ref: 2c159579113
Ref: library/tarfile tarfile-commandline9579113
Ref: 10019579113
Node: Opções de linha de comando<3>9580107
Ref: library/tarfile command-line-options9580207
Ref: 2c199580207
Ref: library/tarfile cmdoption-tarfile-l9580284
Ref: 2c189580284
Ref: library/tarfile cmdoption-tarfile-list9580309
Ref: 2c1a9580309
Ref: library/tarfile cmdoption-tarfile-c9580382
Ref: 2c169580382
Ref: library/tarfile cmdoption-tarfile-create9580431
Ref: 2c1b9580431
Ref: library/tarfile cmdoption-tarfile-e9580546
Ref: 2c179580546
Ref: library/tarfile cmdoption-tarfile-extract9580586
Ref: 2c1c9580586
Ref: library/tarfile cmdoption-tarfile-t9580722
Ref: 2c1d9580722
Ref: library/tarfile cmdoption-tarfile-test9580747
Ref: 2c1e9580747
Ref: library/tarfile cmdoption-tarfile-v9580825
Ref: 2c1f9580825
Ref: library/tarfile cmdoption-tarfile-verbose9580825
Ref: 2c209580825
Ref: library/tarfile cmdoption-tarfile-filter9580876
Ref: 2c219580876
Node: Exemplos<9>9581114
Ref: library/tarfile examples9581280
Ref: 2c229581280
Ref: library/tarfile tar-examples9581280
Ref: 2bc39581280
Node: Reading examples9581371
Ref: library/tarfile reading-examples9581460
Ref: 2c239581460
Node: Writing examples9582578
Ref: library/tarfile writing-examples9582667
Ref: 2c249582667
Node: Formatos tar suportados9583839
Ref: library/tarfile supported-tar-formats9583993
Ref: 2c259583993
Ref: library/tarfile tar-formats9583993
Ref: 2be09583993
Node: Problemas de Unicode9586219
Ref: library/tarfile tar-unicode9586353
Ref: 2be69586353
Ref: library/tarfile unicode-issues9586353
Ref: 2c269586353
Node: Formatos de Arquivo9588353
Ref: library/fileformats doc9588517
Ref: 2c289588517
Ref: library/fileformats file-formats9588517
Ref: 2c299588517
Ref: library/fileformats fileformats9588517
Ref: 2c2a9588517
Ref: library/fileformats translation-repo9588517
Ref: 2c2b9588517
Node: csv — Leitura e escrita de arquivos CSV9589044
Ref: library/csv doc9589217
Ref: 2c2c9589217
Ref: library/csv csv-csv-file-reading-and-writing9589217
Ref: 2c2d9589217
Ref: library/csv module-csv9589217
Ref: 299589217
Ref: csv — Leitura e escrita de arquivos CSV-Footnote-19591253
Ref: csv — Leitura e escrita de arquivos CSV-Footnote-29591316
Ref: csv — Leitura e escrita de arquivos CSV-Footnote-39591375
Node: Conteúdo do módulo<3>9591417
Ref: library/csv csv-contents9591565
Ref: 2c2e9591565
Ref: library/csv module-contents9591565
Ref: 2c2f9591565
Ref: library/csv csv reader9591681
Ref: 4869591681
Ref: library/csv csv writer9593450
Ref: 4879593450
Ref: library/csv csv register_dialect9595354
Ref: 2c329595354
Ref: library/csv csv unregister_dialect9595856
Ref: 191e9595856
Ref: library/csv csv get_dialect9596064
Ref: 191d9596064
Ref: library/csv csv list_dialects9596308
Ref: 191f9596308
Ref: library/csv csv field_size_limit9596400
Ref: 191c9596400
Ref: library/csv csv DictReader9596700
Ref: 9ed9596700
Ref: library/csv csv DictWriter9598684
Ref: 123e9598684
Ref: library/csv csv Dialect9600583
Ref: 17719600583
Ref: library/csv csv excel9601489
Ref: 2c349601489
Ref: library/csv csv excel_tab9601679
Ref: 2c359601679
Ref: library/csv csv unix_dialect9601896
Ref: 123d9601896
Ref: library/csv csv Sniffer9602218
Ref: 2c369602218
Ref: library/csv csv Sniffer sniff9602394
Ref: 2c379602394
Ref: library/csv csv Sniffer has_header9602758
Ref: 19e29602758
Ref: library/csv csv-constants9604001
Ref: 2c389604001
Ref: library/csv csv QUOTE_ALL9604059
Ref: 2c399604059
Ref: library/csv csv QUOTE_MINIMAL9604166
Ref: 2c3a9604166
Ref: library/csv csv QUOTE_NONNUMERIC9604424
Ref: 16d79604424
Ref: library/csv csv QUOTE_NONE9605007
Ref: 2c3b9605007
Ref: library/csv csv QUOTE_NOTNULL9605646
Ref: 4849605646
Ref: library/csv csv QUOTE_STRINGS9606126
Ref: 4859606126
Ref: library/csv csv Error9606680
Ref: 2c339606680
Ref: Conteúdo do módulo<3>-Footnote-19606818
Ref: Conteúdo do módulo<3>-Footnote-29607211
Node: Dialetos e parâmetros de formatação9607604
Ref: library/csv csv-fmt-params9607775
Ref: 2c319607775
Ref: library/csv dialects-and-formatting-parameters9607775
Ref: 2c3c9607775
Ref: library/csv csv Dialect delimiter9608605
Ref: 2c3d9608605
Ref: library/csv csv Dialect doublequote9608728
Ref: 2c3e9608728
Ref: library/csv csv Dialect escapechar9609234
Ref: 2c3f9609234
Ref: library/csv csv Dialect lineterminator9609975
Ref: 2c409609975
Ref: library/csv csv Dialect quotechar9610326
Ref: 2c419610326
Ref: library/csv csv Dialect quoting9610865
Ref: 2c429610865
Ref: library/csv csv Dialect skipinitialspace9611204
Ref: 2c439611204
Ref: library/csv csv Dialect strict9611497
Ref: 2c449611497
Node: Objetos Reader9611648
Ref: library/csv id39611810
Ref: 2c459611810
Ref: library/csv reader-objects9611810
Ref: 2c309611810
Ref: library/csv csv csvreader __next__9612009
Ref: 2c469612009
Ref: library/csv csv csvreader dialect9612424
Ref: 2c479612424
Ref: library/csv csv csvreader line_num9612546
Ref: 2c489612546
Ref: library/csv csv DictReader fieldnames9612808
Ref: 2c499612808
Node: Objetos Writer9613019
Ref: library/csv writer-objects9613155
Ref: 2c4a9613155
Ref: library/csv csv csvwriter writerow9613791
Ref: e149613791
Ref: library/csv csv csvwriter writerows9614126
Ref: 2c4b9614126
Ref: library/csv csv csvwriter dialect9614406
Ref: 2c4c9614406
Ref: library/csv csv DictWriter writeheader9614567
Ref: 123f9614567
Node: Exemplos<10>9615085
Ref: library/csv csv-examples9615198
Ref: 2c4d9615198
Ref: library/csv examples9615198
Ref: 2c4e9615198
Node: configparser — Analisador sintático de arquivo de configuração9617288
Ref: library/configparser doc9617503
Ref: 2c4f9617503
Ref: library/configparser configparser-configuration-file-parser9617503
Ref: 2c509617503
Ref: library/configparser module-configparser9617503
Ref: 229617503
Ref: library/configparser translation-repo9617503
Ref: 2c519617503
Ref: configparser — Analisador sintático de arquivo de configuração-Footnote-19619260
Node: Início rápido9619332
Ref: library/configparser quick-start9619485
Ref: 2c529619485
Ref: Início rápido-Footnote-19623387
Ref: Início rápido-Footnote-29623663
Node: Tipos de dados suportados9623939
Ref: library/configparser supported-datatypes9624117
Ref: 2c569624117
Ref: Tipos de dados suportados-Footnote-19625712
Ref: Tipos de dados suportados-Footnote-29625988
Node: Valores reservas9626264
Ref: library/configparser fallback-values9626453
Ref: 2c5a9626453
Node: Estrutura dos arquivos INI9628068
Ref: library/configparser supported-ini-file-structure9628254
Ref: 2c539628254
Ref: Estrutura dos arquivos INI-Footnote-19631429
Ref: Estrutura dos arquivos INI-Footnote-29631705
Ref: Estrutura dos arquivos INI-Footnote-39631981
Ref: Estrutura dos arquivos INI-Footnote-49632257
Ref: Estrutura dos arquivos INI-Footnote-59632533
Node: Seções não nomeadas9632809
Ref: library/configparser id109633004
Ref: 2c5d9633004
Ref: library/configparser unnamed-sections9633004
Ref: 2c5e9633004
Node: Interpolação de valores9633492
Ref: library/configparser interpolation-of-values9633703
Ref: 2c5f9633703
Ref: library/configparser configparser BasicInterpolation9633973
Ref: 7229633973
Ref: library/configparser configparser ExtendedInterpolation9635343
Ref: 7239635343
Ref: Interpolação de valores-Footnote-19636880
Node: Acesso através do protocolo de mapeamento9637156
Ref: library/configparser mapping-protocol-access9637400
Ref: 2c549637400
Ref: Acesso através do protocolo de mapeamento-Footnote-19640690
Node: Personalizando o comportamento do analisador sintático9640966
Ref: library/configparser customizing-parser-behaviour9641209
Ref: 2c559641209
Ref: library/configparser configparser ConfigParser BOOLEAN_STATES9653074
Ref: 2c639653074
Ref: library/configparser configparser ConfigParser SECTCRE9655392
Ref: 2c5b9655392
Node: Exemplos de APIs legadas9656667
Ref: library/configparser legacy-api-examples9656888
Ref: 2c649656888
Node: Objetos ConfigParser9660936
Ref: library/configparser configparser-objects9661125
Ref: 2c659661125
Ref: library/configparser id139661125
Ref: 2c669661125
Ref: library/configparser configparser ConfigParser9661188
Ref: 1c89661188
Ref: library/configparser configparser ConfigParser defaults9667103
Ref: 2c699667103
Ref: library/configparser configparser ConfigParser sections9667211
Ref: 2c6a9667211
Ref: library/configparser configparser ConfigParser add_section9667359
Ref: 12af9667359
Ref: library/configparser configparser ConfigParser has_section9667904
Ref: 2c6b9667904
Ref: library/configparser configparser ConfigParser options9668071
Ref: 2c6c9668071
Ref: library/configparser configparser ConfigParser has_option9668199
Ref: 2c6d9668199
Ref: library/configparser configparser ConfigParser read9668519
Ref: 14b09668519
Ref: library/configparser configparser ConfigParser read_file9670472
Ref: 5069670472
Ref: library/configparser configparser ConfigParser read_string9670985
Ref: 2c629670985
Ref: library/configparser configparser ConfigParser read_dict9671394
Ref: 2c609671394
Ref: library/configparser configparser ConfigParser get9672211
Ref: 12ad9672211
Ref: library/configparser configparser ConfigParser getint9673271
Ref: 2c589673271
Ref: library/configparser configparser ConfigParser getfloat9673572
Ref: 2c599673572
Ref: library/configparser configparser ConfigParser getboolean9673886
Ref: 2c579673886
Ref: library/configparser configparser ConfigParser items9674666
Ref: 2c6e9674666
Ref: library/configparser configparser ConfigParser set9675371
Ref: 12ae9675371
Ref: library/configparser configparser ConfigParser write9675693
Ref: 2c619675693
Ref: library/configparser configparser ConfigParser remove_option9676438
Ref: 2c709676438
Ref: library/configparser configparser ConfigParser remove_section9676762
Ref: 2c719676762
Ref: library/configparser configparser ConfigParser optionxform9676978
Ref: 2c679676978
Ref: library/configparser configparser UNNAMED_SECTION9678181
Ref: 2c5c9678181
Ref: library/configparser configparser MAX_INTERPOLATION_DEPTH9678376
Ref: 2c729678376
Node: Objetos RawConfigParser9678622
Ref: library/configparser id159678800
Ref: 2c739678800
Ref: library/configparser rawconfigparser-objects9678800
Ref: 2c749678800
Ref: library/configparser configparser RawConfigParser9678869
Ref: f989678869
Ref: library/configparser configparser RawConfigParser add_section9680314
Ref: 2c759680314
Ref: library/configparser configparser RawConfigParser set9680852
Ref: 2c769680852
Node: Exceções<8>9681782
Ref: library/configparser exceptions9681931
Ref: 2c779681931
Ref: library/configparser configparser Error9681972
Ref: 2c789681972
Ref: library/configparser configparser NoSectionError9682089
Ref: 2c6f9682089
Ref: library/configparser configparser DuplicateSectionError9682211
Ref: 12b09682211
Ref: library/configparser configparser DuplicateOptionError9682665
Ref: 12b19682665
Ref: library/configparser configparser NoOptionError9683168
Ref: 2c799683168
Ref: library/configparser configparser InterpolationError9683318
Ref: 2c7a9683318
Ref: library/configparser configparser InterpolationDepthError9683482
Ref: 2c7b9683482
Ref: library/configparser configparser InterpolationMissingOptionError9683757
Ref: 2c7c9683757
Ref: library/configparser configparser InterpolationSyntaxError9683961
Ref: 2c7d9683961
Ref: library/configparser configparser MissingSectionHeaderError9684206
Ref: 2c7e9684206
Ref: library/configparser configparser ParsingError9684362
Ref: 5059684362
Ref: library/configparser configparser MultilineContinuationError9684684
Ref: 2c689684684
Node: tomllib — Analisa arquivos TOML9684881
Ref: library/tomllib doc9685095
Ref: 2c7f9685095
Ref: library/tomllib module-tomllib9685095
Ref: fc9685095
Ref: library/tomllib tomllib-parse-toml-files9685095
Ref: 2c809685095
Ref: library/tomllib translation-repo9685095
Ref: 2c819685095
Ref: library/tomllib tomllib load9686003
Ref: 2c829686003
Ref: library/tomllib tomllib loads9686864
Ref: 2c859686864
Ref: library/tomllib tomllib TOMLDecodeError9687327
Ref: 2c849687327
Ref: tomllib — Analisa arquivos TOML-Footnote-19687506
Ref: tomllib — Analisa arquivos TOML-Footnote-29687570
Ref: tomllib — Analisa arquivos TOML-Footnote-39687598
Ref: tomllib — Analisa arquivos TOML-Footnote-49687640
Node: Exemplos<11>9687682
Ref: library/tomllib examples9687793
Ref: 2c869687793
Node: Tabela de conversão9688145
Ref: library/tomllib conversion-table9688256
Ref: 2c879688256
Ref: library/tomllib toml-to-py-table9688316
Ref: 2c839688316
Node: netrc — Arquivo de processamento netrc9689735
Ref: library/netrc doc9689930
Ref: 2c889689930
Ref: library/netrc module-netrc9689930
Ref: 9b9689930
Ref: library/netrc netrc-netrc-file-processing9689930
Ref: 2c899689930
Ref: library/netrc translation-repo9689930
Ref: 2c8a9689930
Ref: library/netrc netrc netrc9690269
Ref: 1a059690269
Ref: library/netrc netrc NetrcParseError9692357
Ref: 2c8b9692357
Ref: library/netrc netrc NetrcParseError msg9692592
Ref: 2c8c9692592
Ref: library/netrc netrc NetrcParseError filename9692657
Ref: 2c8d9692657
Ref: library/netrc netrc NetrcParseError lineno9692726
Ref: 2c8e9692726
Ref: netrc — Arquivo de processamento netrc-Footnote-19692877
Node: Objetos netrc9692942
Ref: library/netrc id19693032
Ref: 2c8f9693032
Ref: library/netrc netrc-objects9693032
Ref: 2c909693032
Ref: library/netrc netrc netrc authenticators9693151
Ref: 2c919693151
Ref: library/netrc netrc netrc __repr__9693530
Ref: 2c929693530
Ref: library/netrc netrc netrc hosts9693795
Ref: 2c939693795
Ref: library/netrc netrc netrc macros9693998
Ref: 2c949693998
Node: plistlib — Gera e analisa arquivos Apple plist9694093
Ref: library/plistlib doc9694246
Ref: 2c959694246
Ref: library/plistlib module-plistlib9694246
Ref: ab9694246
Ref: library/plistlib plistlib-generate-and-parse-apple-plist-files9694246
Ref: 2c969694246
Ref: library/plistlib translation-repo9694246
Ref: 2c979694246
Ref: library/plistlib plistlib load9695852
Ref: 9569695852
Ref: library/plistlib plistlib loads9697224
Ref: 9579697224
Ref: library/plistlib plistlib dump9697593
Ref: 9589697593
Ref: library/plistlib plistlib dumps9699120
Ref: 9599699120
Ref: library/plistlib plistlib UID9699496
Ref: a2b9699496
Ref: library/plistlib plistlib UID data9699683
Ref: 2c989699683
Ref: library/plistlib plistlib FMT_XML9699879
Ref: fad9699879
Ref: library/plistlib plistlib FMT_BINARY9699981
Ref: fae9699981
Ref: library/plistlib plistlib InvalidFileException9700133
Ref: 1a879700133
Ref: plistlib — Gera e analisa arquivos Apple plist-Footnote-19700344
Ref: plistlib — Gera e analisa arquivos Apple plist-Footnote-29700412
Node: Exemplos<12>9700511
Ref: library/plistlib examples9700608
Ref: 2c999700608
Node: Serviços Criptográficos9701465
Ref: library/crypto doc9701637
Ref: 2c9a9701637
Ref: library/crypto crypto9701637
Ref: 2c9b9701637
Ref: library/crypto cryptographic-services9701637
Ref: 2c9c9701637
Ref: library/crypto translation-repo9701637
Ref: 2c9d9701637
Node: hashlib — Resumos de mensagens e hashes seguros9702089
Ref: library/hashlib doc9702270
Ref: 2c9e9702270
Ref: library/hashlib hashlib-secure-hashes-and-message-digests9702270
Ref: 2c9f9702270
Ref: library/hashlib module-hashlib9702270
Ref: 689702270
Ref: hashlib — Resumos de mensagens e hashes seguros-Footnote-19703223
Ref: hashlib — Resumos de mensagens e hashes seguros-Footnote-29703290
Ref: hashlib — Resumos de mensagens e hashes seguros-Footnote-39703347
Ref: hashlib — Resumos de mensagens e hashes seguros-Footnote-49703397
Ref: hashlib — Resumos de mensagens e hashes seguros-Footnote-59703467
Node: Algoritmos de hash9703526
Ref: library/hashlib hash-algorithms9703642
Ref: 2ca09703642
Ref: library/hashlib id19703642
Ref: 2ca19703642
Ref: library/hashlib hashlib-usedforsecurity9705948
Ref: 2caa9705948
Ref: Algoritmos de hash-Footnote-19706674
Ref: Algoritmos de hash-Footnote-29706782
Node: Uso9706829
Ref: library/hashlib usage9706966
Ref: 2cab9706966
Node: Construtores9707614
Ref: library/hashlib constructors9707742
Ref: 2cac9707742
Ref: library/hashlib hashlib new9707787
Ref: 1abb9707787
Ref: library/hashlib hashlib md59708377
Ref: 16269708377
Ref: library/hashlib hashlib sha19708438
Ref: 2ca59708438
Ref: library/hashlib hashlib sha2249708500
Ref: 2ca69708500
Ref: library/hashlib hashlib sha2569708564
Ref: 164a9708564
Ref: library/hashlib hashlib sha3849708628
Ref: 2ca79708628
Ref: library/hashlib hashlib sha5129708692
Ref: 2ca89708692
Ref: library/hashlib hashlib sha3_2249708756
Ref: cc29708756
Ref: library/hashlib hashlib sha3_2569708822
Ref: cc39708822
Ref: library/hashlib hashlib sha3_3849708888
Ref: cc49708888
Ref: library/hashlib hashlib sha3_5129708954
Ref: cc59708954
Node: Atributos9709132
Ref: library/hashlib attributes9709269
Ref: 2cad9709269
Ref: library/hashlib hashlib algorithms_guaranteed9709373
Ref: 13ba9709373
Ref: library/hashlib hashlib algorithms_available9709757
Ref: 13bb9709757
Node: Objetos hash9710209
Ref: library/hashlib hash-objects9710375
Ref: 2cae9710375
Ref: library/hashlib hashlib hash digest_size9710532
Ref: 2caf9710532
Ref: library/hashlib hashlib hash block_size9710605
Ref: 2cb09710605
Ref: library/hashlib hashlib hash name9710740
Ref: f7b9710740
Ref: library/hashlib hashlib hash update9711177
Ref: 2ca29711177
Ref: library/hashlib hashlib hash digest9711468
Ref: 2ca39711468
Ref: library/hashlib hashlib hash hexdigest9711718
Ref: 2ca49711718
Ref: library/hashlib hashlib hash copy9712022
Ref: 2cb19712022
Node: Resumos de comprimento variável de SHAKE9712231
Ref: library/hashlib shake-variable-length-digests9712403
Ref: 2cb29712403
Ref: library/hashlib hashlib shake_1289712505
Ref: cc69712505
Ref: library/hashlib hashlib shake_2569712572
Ref: cc79712572
Ref: library/hashlib hashlib shake digest9712927
Ref: 1bb19712927
Ref: library/hashlib hashlib shake hexdigest9713163
Ref: 1bb29713163
Node: Hash de arquivo9713625
Ref: library/hashlib file-hashing9713805
Ref: 2cb39713805
Ref: library/hashlib hashlib file_digest9713958
Ref: 6449713958
Node: Derivação de chave9715767
Ref: library/hashlib key-derivation9715912
Ref: 2cb49715912
Ref: library/hashlib hashlib pbkdf2_hmac9716268
Ref: 50f9716268
Ref: library/hashlib hashlib scrypt9718136
Ref: c599718136
Ref: Derivação de chave-Footnote-19718949
Ref: Derivação de chave-Footnote-29719006
Ref: Derivação de chave-Footnote-39719093
Ref: Derivação de chave-Footnote-49719204
Node: BLAKE29719263
Ref: library/hashlib blake29719384
Ref: 2cb59719384
Ref: library/hashlib hashlib-blake29719384
Ref: 1f179719384
Ref: BLAKE2-Footnote-19720122
Ref: BLAKE2-Footnote-29720153
Ref: BLAKE2-Footnote-39720212
Node: Criando objetos hash9720290
Ref: library/hashlib creating-hash-objects9720375
Ref: 2cb69720375
Ref: library/hashlib hashlib blake2b9720504
Ref: 6429720504
Ref: library/hashlib hashlib blake2s9720740
Ref: 6439720740
Ref: Criando objetos hash-Footnote-19723822
Node: Constantes<5>9723873
Ref: library/hashlib constants9723979
Ref: 2cb79723979
Ref: library/hashlib hashlib blake2b SALT_SIZE9724022
Ref: 2cb89724022
Ref: library/hashlib hashlib blake2s SALT_SIZE9724051
Ref: 2cb99724051
Ref: library/hashlib hashlib blake2b PERSON_SIZE9724136
Ref: 2cba9724136
Ref: library/hashlib hashlib blake2s PERSON_SIZE9724167
Ref: 2cbb9724167
Ref: library/hashlib hashlib blake2b MAX_KEY_SIZE9724272
Ref: 2cbc9724272
Ref: library/hashlib hashlib blake2s MAX_KEY_SIZE9724304
Ref: 2cbd9724304
Ref: library/hashlib hashlib blake2b MAX_DIGEST_SIZE9724355
Ref: 2cbe9724355
Ref: library/hashlib hashlib blake2s MAX_DIGEST_SIZE9724390
Ref: 2cbf9724390
Node: Exemplos<13>9724481
Ref: library/hashlib examples9724574
Ref: 2cc09724574
Node: Simple hashing9724753
Ref: library/hashlib simple-hashing9724853
Ref: 2cc19724853
Node: Using different digest sizes9726307
Ref: library/hashlib using-different-digest-sizes9726429
Ref: 2cc29726429
Node: Keyed hashing9727572
Ref: library/hashlib keyed-hashing9727698
Ref: 2cc39727698
Ref: Keyed hashing-Footnote-19729709
Node: Randomized hashing9729752
Ref: library/hashlib randomized-hashing9729865
Ref: 2cc49729865
Ref: Randomized hashing-Footnote-19732467
Ref: Randomized hashing-Footnote-29732519
Node: Personalization9732554
Ref: library/hashlib personalization9732666
Ref: 2cc59732666
Ref: Personalization-Footnote-19734661
Node: Modo árvore9734731
Ref: library/hashlib tree-mode9734816
Ref: 2cc69734816
Node: Credits9736072
Ref: library/hashlib credits9736143
Ref: 2cc79736143
Ref: library/hashlib hashlib-seealso9737574
Ref: 2ca99737574
Ref: Credits-Footnote-19738566
Ref: Credits-Footnote-29738597
Ref: Credits-Footnote-39738658
Ref: Credits-Footnote-49738736
Ref: Credits-Footnote-59738773
Ref: Credits-Footnote-69738816
Node: hmac — Código de autenticação de mensagem com chave hash9738859
Ref: library/hmac doc9739118
Ref: 2cc89739118
Ref: library/hmac hmac-keyed-hashing-for-message-authentication9739118
Ref: 2cc99739118
Ref: library/hmac module-hmac9739118
Ref: 6a9739118
Ref: library/hmac translation-repo9739118
Ref: 2cca9739118
Ref: library/hmac hmac new9739633
Ref: aae9739633
Ref: library/hmac hmac digest9740539
Ref: b509740539
Ref: library/hmac hmac HMAC9741177
Ref: b519741177
Ref: library/hmac hmac HMAC update9741248
Ref: f7d9741248
Ref: library/hmac hmac HMAC digest9741618
Ref: 2ccb9741618
Ref: library/hmac hmac HMAC hexdigest9742235
Ref: 2ccc9742235
Ref: library/hmac hmac HMAC copy9742863
Ref: 15a99742863
Ref: library/hmac hmac HMAC digest_size9743117
Ref: f809743117
Ref: library/hmac hmac HMAC block_size9743201
Ref: f7e9743201
Ref: library/hmac hmac HMAC name9743329
Ref: f7f9743329
Ref: library/hmac hmac compare_digest9743681
Ref: 11089743681
Ref: hmac — Código de autenticação de mensagem com chave hash-Footnote-19744686
Ref: hmac — Código de autenticação de mensagem com chave hash-Footnote-29744750
Node: secrets — Gera números aleatórios seguros para gerenciar segredos9744809
Ref: library/secrets doc9745010
Ref: 2ccd9745010
Ref: library/secrets module-secrets9745010
Ref: c09745010
Ref: library/secrets secrets-generate-secure-random-numbers-for-managing-secrets9745010
Ref: 2cce9745010
Ref: library/secrets translation-repo9745010
Ref: 2ccf9745010
Ref: secrets — Gera números aleatórios seguros para gerenciar segredos-Footnote-19745929
Ref: secrets — Gera números aleatórios seguros para gerenciar segredos-Footnote-29745996
Node: Números aleatórios9746038
Ref: library/secrets random-numbers9746187
Ref: 2cd09746187
Ref: library/secrets secrets SystemRandom9746366
Ref: 2cd19746366
Ref: library/secrets secrets choice9746601
Ref: 2cd29746601
Ref: library/secrets secrets randbelow9746723
Ref: 2cd39746723
Ref: library/secrets secrets randbits9746855
Ref: 2cd49746855
Node: Gerando tokens9746952
Ref: library/secrets generating-tokens9747126
Ref: 2cd59747126
Ref: library/secrets secrets token_bytes9747350
Ref: 28909747350
Ref: library/secrets secrets token_hex9747657
Ref: 18ae9747657
Ref: library/secrets secrets token_urlsafe9748029
Ref: 2cd69748029
Node: Quantos bytes os tokens devem usar?9748505
Ref: library/secrets how-many-bytes-should-tokens-use9748591
Ref: 2cd79748591
Ref: Quantos bytes os tokens devem usar?-Footnote-19749757
Node: Outras funções9749818
Ref: library/secrets other-functions9750001
Ref: 2cd89750001
Ref: library/secrets secrets compare_digest9750052
Ref: 2cd99750052
Ref: Outras funções-Footnote-19750452
Node: Receitas e melhores práticas9750509
Ref: library/secrets recipes-and-best-practices9750669
Ref: 2cda9750669
Ref: Receitas e melhores práticas-Footnote-19752533
Ref: Receitas e melhores práticas-Footnote-29752589
Node: Serviços Genéricos do Sistema Operacional9752619
Ref: library/allos doc9752816
Ref: 2cdb9752816
Ref: library/allos allos9752816
Ref: 2cdc9752816
Ref: library/allos generic-operating-system-services9752816
Ref: 2cdd9752816
Ref: library/allos translation-repo9752816
Ref: 2cde9752816
Node: os — Diversas interfaces de sistema operacional9753904
Ref: library/os doc9754097
Ref: 2cdf9754097
Ref: library/os module-os9754097
Ref: a19754097
Ref: library/os os-miscellaneous-operating-system-interfaces9754097
Ref: 2ce09754097
Ref: library/os os error9756581
Ref: 2ce29756581
Ref: library/os os name9756669
Ref: 2ce39756669
Ref: library/os os-filenames9757161
Ref: 2c279757161
Ref: os — Diversas interfaces de sistema operacional-Footnote-19757662
Node: Nomes de arquivos argumentos de linha de comando e variáveis de ambiente9757724
Ref: library/os file-names-command-line-arguments-and-environment-variables9757912
Ref: 2ce49757912
Ref: library/os filesystem-encoding9757912
Ref: 29709757912
Node: Modo UTF-8 do Python9759481
Ref: library/os python-utf-8-mode9759701
Ref: 2ce59759701
Ref: library/os utf8-mode9759701
Ref: 6569759701
Ref: Modo UTF-8 do Python-Footnote-19762897
Ref: Modo UTF-8 do Python-Footnote-29762939
Node: Parâmetros de processo9762981
Ref: library/os os-procinfo9763157
Ref: 2ce69763157
Ref: library/os process-parameters9763157
Ref: 2ce79763157
Ref: library/os os ctermid9763320
Ref: 2ce89763320
Ref: library/os os environ9763490
Ref: 11f99763490
Ref: library/os os environb9765661
Ref: 12579765661
Ref: library/os os fsencode9766483
Ref: c709766483
Ref: library/os os fsdecode9766917
Ref: c6f9766917
Ref: library/os os fspath9767355
Ref: c6e9767355
Ref: library/os os PathLike9767840
Ref: c6c9767840
Ref: library/os os PathLike __fspath__9768062
Ref: c6d9768062
Ref: library/os os getenv9768337
Ref: 2cea9768337
Ref: library/os os getenvb9769067
Ref: 12569769067
Ref: library/os os get_exec_path9769688
Ref: 2ceb9769688
Ref: library/os os getegid9770089
Ref: 2cec9770089
Ref: library/os os geteuid9770329
Ref: 18fd9770329
Ref: library/os os getgid9770468
Ref: 2ced9770468
Ref: library/os os getgrouplist9770707
Ref: 11539770707
Ref: library/os os getgroups9771134
Ref: 2cee9771134
Ref: library/os os getlogin9772476
Ref: 16139772476
Ref: library/os os getpgid9772984
Ref: 2cf09772984
Ref: library/os os getpgrp9773200
Ref: 2cf19773200
Ref: library/os os getpid9773328
Ref: 2ce19773328
Ref: library/os os getppid9773511
Ref: 17439773511
Ref: library/os os getpriority9773894
Ref: 113e9773894
Ref: library/os os PRIO_PROCESS9774607
Ref: 2cf29774607
Ref: library/os os PRIO_PGRP9774633
Ref: 2cf39774633
Ref: library/os os PRIO_USER9774656
Ref: 2cf49774656
Ref: library/os os PRIO_DARWIN_THREAD9774862
Ref: 2cf59774862
Ref: library/os os PRIO_DARWIN_PROCESS9774894
Ref: 2cf69774894
Ref: library/os os PRIO_DARWIN_BG9774927
Ref: 2cf79774927
Ref: library/os os PRIO_DARWIN_NONUI9774955
Ref: 2cf89774955
Ref: library/os os getresuid9775160
Ref: 135a9775160
Ref: library/os os getresgid9775394
Ref: 13599775394
Ref: library/os os getuid9775626
Ref: 16129775626
Ref: library/os os initgroups9775868
Ref: 135d9775868
Ref: library/os os putenv9776218
Ref: 9229776218
Ref: library/os os setegid9777408
Ref: 2cfa9777408
Ref: library/os os seteuid9777563
Ref: 2cfb9777563
Ref: library/os os setgid9777721
Ref: 2cfc9777721
Ref: library/os os setgroups9777866
Ref: 2cef9777866
Ref: library/os os setns9778593
Ref: 18ca9778593
Ref: library/os os setpgrp9780215
Ref: 2cfe9780215
Ref: library/os os setpgid9780470
Ref: 2cff9780470
Ref: library/os os setpriority9780757
Ref: 113f9780757
Ref: library/os os setregid9781629
Ref: 2d009781629
Ref: library/os os setresgid9781800
Ref: 135b9781800
Ref: library/os os setresuid9782018
Ref: 135c9782018
Ref: library/os os setreuid9782239
Ref: 2d019782239
Ref: library/os os getsid9782413
Ref: 2d029782413
Ref: library/os os setsid9782595
Ref: 1b4c9782595
Ref: library/os os setuid9782771
Ref: 2d039782771
Ref: library/os os strerror9782919
Ref: 2d049782919
Ref: library/os os supports_bytes_environ9783193
Ref: 12559783193
Ref: library/os os umask9783393
Ref: 2d059783393
Ref: library/os os uname9783609
Ref: 11559783609
Ref: library/os os unsetenv9785056
Ref: 9219785056
Ref: library/os os unshare9785865
Ref: 18cb9785865
Ref: library/os os-unshare-clone-flags9786647
Ref: 2cfd9786647
Ref: library/os os CLONE_FILES9786827
Ref: 2d079786827
Ref: library/os os CLONE_FS9786852
Ref: 2d089786852
Ref: library/os os CLONE_NEWCGROUP9786874
Ref: 2d099786874
Ref: library/os os CLONE_NEWIPC9786903
Ref: 2d0a9786903
Ref: library/os os CLONE_NEWNET9786929
Ref: 2d0b9786929
Ref: library/os os CLONE_NEWNS9786955
Ref: 2d0c9786955
Ref: library/os os CLONE_NEWPID9786980
Ref: 2d0d9786980
Ref: library/os os CLONE_NEWTIME9787006
Ref: 2d0e9787006
Ref: library/os os CLONE_NEWUSER9787033
Ref: 2d0f9787033
Ref: library/os os CLONE_NEWUTS9787060
Ref: 2d109787060
Ref: library/os os CLONE_SIGHAND9787086
Ref: 2d119787086
Ref: library/os os CLONE_SYSVSEM9787113
Ref: 2d129787113
Ref: library/os os CLONE_THREAD9787140
Ref: 2d139787140
Ref: library/os os CLONE_VM9787166
Ref: 2d149787166
Ref: Parâmetros de processo-Footnote-19787225
Ref: Parâmetros de processo-Footnote-29787267
Ref: Parâmetros de processo-Footnote-39787309
Ref: Parâmetros de processo-Footnote-49787354
Ref: Parâmetros de processo-Footnote-59787404
Ref: Parâmetros de processo-Footnote-69787451
Node: Criação de objetos arquivos9787498
Ref: library/os file-object-creation9787693
Ref: 2d159787693
Ref: library/os os-newstreams9787693
Ref: 2d169787693
Ref: library/os os fdopen9787903
Ref: 20c49787903
Node: Operações dos descritores de arquivos9788241
Ref: library/os file-descriptor-operations9788435
Ref: 2d179788435
Ref: library/os os-fd-ops9788435
Ref: 2d189788435
Ref: library/os os close9789383
Ref: b8a9789383
Ref: library/os os closerange9789849
Ref: 2d199789849
Ref: library/os os copy_file_range9790216
Ref: 2d1a9790216
Ref: library/os os device_encoding9792088
Ref: 19c09792088
Ref: library/os os dup9792531
Ref: 1b549792531
Ref: library/os os dup29792957
Ref: b799792957
Ref: library/os os fchmod9793503
Ref: 21c9793503
Ref: library/os os fchown9794124
Ref: db29794124
Ref: library/os os fdatasync9794729
Ref: db39794729
Ref: library/os os fpathconf9794992
Ref: 2d1c9794992
Ref: library/os os fstat9796147
Ref: db49796147
Ref: library/os os fstatvfs9796414
Ref: db59796414
Ref: library/os os fsync9796716
Ref: db69796716
Ref: library/os os ftruncate9797250
Ref: db79797250
Ref: library/os os get_blocking9797735
Ref: e669797735
Ref: library/os os grantpt9798391
Ref: 17799798391
Ref: library/os os isatty9798813
Ref: 19bf9798813
Ref: library/os os lockf9798984
Ref: 11529798984
Ref: library/os os F_LOCK9799552
Ref: 2d1e9799552
Ref: library/os os F_TLOCK9799572
Ref: 2d1f9799572
Ref: library/os os F_ULOCK9799593
Ref: 2d209799593
Ref: library/os os F_TEST9799614
Ref: 2d219799614
Ref: library/os os login_tty9799798
Ref: 18529799798
Ref: library/os os lseek9800171
Ref: 11569800171
Ref: library/os os SEEK_SET9801090
Ref: 12cf9801090
Ref: library/os os SEEK_CUR9801112
Ref: 12d09801112
Ref: library/os os SEEK_END9801134
Ref: 12d19801134
Ref: library/os os SEEK_HOLE9801716
Ref: 2d229801716
Ref: library/os os SEEK_DATA9801739
Ref: 2d239801739
Ref: library/os os open9802562
Ref: dba9802562
Ref: library/os os O_RDONLY9804846
Ref: 2d249804846
Ref: library/os os O_WRONLY9804868
Ref: 2d259804868
Ref: library/os os O_RDWR9804890
Ref: 2d279804890
Ref: library/os os O_APPEND9804910
Ref: 2d289804910
Ref: library/os os O_CREAT9804932
Ref: 2d299804932
Ref: library/os os O_EXCL9804953
Ref: 2a089804953
Ref: library/os os O_TRUNC9804973
Ref: 2d2a9804973
Ref: library/os os O_DSYNC9805060
Ref: 2d2b9805060
Ref: library/os os O_RSYNC9805081
Ref: 2d2c9805081
Ref: library/os os O_SYNC9805102
Ref: 2d2d9805102
Ref: library/os os O_NDELAY9805122
Ref: 2d2e9805122
Ref: library/os os O_NONBLOCK9805144
Ref: e689805144
Ref: library/os os O_NOCTTY9805168
Ref: 2d2f9805168
Ref: library/os os O_CLOEXEC9805190
Ref: 10b59805190
Ref: library/os os O_BINARY9805358
Ref: 2d269805358
Ref: library/os os O_NOINHERIT9805380
Ref: 2d309805380
Ref: library/os os O_SHORT_LIVED9805405
Ref: 2d319805405
Ref: library/os os O_TEMPORARY9805432
Ref: 2d329805432
Ref: library/os os O_RANDOM9805457
Ref: 2d339805457
Ref: library/os os O_SEQUENTIAL9805479
Ref: 2d349805479
Ref: library/os os O_TEXT9805505
Ref: 2d359805505
Ref: library/os os O_EVTONLY9805591
Ref: 81d9805591
Ref: library/os os O_FSYNC9805614
Ref: 81e9805614
Ref: library/os os O_SYMLINK9805635
Ref: 81f9805635
Ref: library/os os O_NOFOLLOW_ANY9805658
Ref: 8209805658
Ref: library/os os O_ASYNC9805911
Ref: 2d369805911
Ref: library/os os O_DIRECT9805932
Ref: 2d379805932
Ref: library/os os O_DIRECTORY9805954
Ref: 2d389805954
Ref: library/os os O_NOFOLLOW9805979
Ref: 2d399805979
Ref: library/os os O_NOATIME9806003
Ref: 2d3a9806003
Ref: library/os os O_PATH9806026
Ref: fa69806026
Ref: library/os os O_TMPFILE9806046
Ref: fa79806046
Ref: library/os os O_SHLOCK9806069
Ref: 14769806069
Ref: library/os os O_EXLOCK9806091
Ref: 14779806091
Ref: library/os os openpty9806428
Ref: 2d3b9806428
Ref: library/os os pipe9806916
Ref: 18ef9806916
Ref: library/os os pipe29807299
Ref: 11289807299
Ref: library/os os posix_fallocate9807755
Ref: dbc9807755
Ref: library/os os posix_fadvise9808047
Ref: dbb9808047
Ref: library/os os POSIX_FADV_NORMAL9808693
Ref: 2d3c9808693
Ref: library/os os POSIX_FADV_SEQUENTIAL9808724
Ref: 2d3d9808724
Ref: library/os os POSIX_FADV_RANDOM9808759
Ref: 2d3e9808759
Ref: library/os os POSIX_FADV_NOREUSE9808790
Ref: 2d3f9808790
Ref: library/os os POSIX_FADV_WILLNEED9808822
Ref: 2d409808822
Ref: library/os os POSIX_FADV_DONTNEED9808855
Ref: 2d419808855
Ref: library/os os pread9809125
Ref: b759809125
Ref: library/os os posix_openpt9809539
Ref: 17789809539
Ref: library/os os preadv9810208
Ref: b739810208
Ref: library/os os RWF_NOWAIT9811329
Ref: 2d439811329
Ref: library/os os RWF_HIPRI9811885
Ref: 2d429811885
Ref: library/os os ptsname9812341
Ref: 177b9812341
Ref: library/os os pwrite9812948
Ref: b789812948
Ref: library/os os pwritev9813262
Ref: b769813262
Ref: library/os os RWF_DSYNC9814411
Ref: 2d449814411
Ref: library/os os RWF_SYNC9814748
Ref: 2d459814748
Ref: library/os os RWF_APPEND9815083
Ref: 1aba9815083
Ref: library/os os read9815696
Ref: dbd9815696
Ref: library/os os sendfile9816697
Ref: b219816697
Ref: library/os os SF_NODISKIO9818342
Ref: 2d469818342
Ref: library/os os SF_MNOWAIT9818367
Ref: 2d479818367
Ref: library/os os SF_SYNC9818391
Ref: 2d489818391
Ref: library/os os SF_NOCACHE9818603
Ref: 2d499818603
Ref: library/os os set_blocking9818921
Ref: e679818921
Ref: library/os os splice9819592
Ref: 81c9819592
Ref: library/os os SPLICE_F_MOVE9821185
Ref: 2d4a9821185
Ref: library/os os SPLICE_F_NONBLOCK9821212
Ref: 2d4b9821212
Ref: library/os os SPLICE_F_MORE9821243
Ref: 2d4c9821243
Ref: library/os os readv9821305
Ref: b749821305
Ref: library/os os tcgetpgrp9821984
Ref: 2d4d9821984
Ref: library/os os tcsetpgrp9822228
Ref: 2d4e9822228
Ref: library/os os ttyname9822485
Ref: 2d4f9822485
Ref: library/os os unlockpt9822767
Ref: 177a9822767
Ref: library/os os write9823184
Ref: dc39823184
Ref: library/os os writev9824110
Ref: b779824110
Ref: Operações dos descritores de arquivos-Footnote-19824889
Ref: Operações dos descritores de arquivos-Footnote-29824931
Ref: Operações dos descritores de arquivos-Footnote-39824975
Ref: Operações dos descritores de arquivos-Footnote-49825038
Ref: Operações dos descritores de arquivos-Footnote-59825080
Node: Consultando o tamanho de um terminal9825122
Ref: library/os querying-the-size-of-a-terminal9825278
Ref: 2d509825278
Ref: library/os terminal-size9825278
Ref: 2d519825278
Ref: library/os os get_terminal_size9825399
Ref: 11419825399
Ref: library/os os terminal_size9826082
Ref: 2a349826082
Ref: library/os os terminal_size columns9826213
Ref: 2d529826213
Ref: library/os os terminal_size lines9826297
Ref: 2d539826297
Node: Herança de descritores de arquivos9826378
Ref: library/os fd-inheritance9826534
Ref: f2b9826534
Ref: library/os inheritance-of-file-descriptors9826534
Ref: 2d549826534
Ref: library/os os get_inheritable9827785
Ref: f2c9827785
Ref: library/os os set_inheritable9827927
Ref: f2d9827927
Ref: library/os os get_handle_inheritable9828068
Ref: f2e9828068
Ref: library/os os set_handle_inheritable9828257
Ref: f2f9828257
Node: Arquivos e diretórios9828440
Ref: library/os files-and-directories9828630
Ref: 2d559828630
Ref: library/os os-file-dir9828630
Ref: 2ce99828630
Ref: library/os path-fd9828796
Ref: b729828796
Ref: library/os dir-fd9829833
Ref: 11299829833
Ref: library/os follow-symlinks9830595
Ref: 112a9830595
Ref: library/os os access9831195
Ref: 112b9831195
Ref: library/os os F_OK9834002
Ref: 2d569834002
Ref: library/os os R_OK9834020
Ref: 2d579834020
Ref: library/os os W_OK9834038
Ref: 2d589834038
Ref: library/os os X_OK9834056
Ref: 2d599834056
Ref: library/os os chdir9834275
Ref: 60d9834275
Ref: library/os os chflags9835039
Ref: 112c9835039
Ref: library/os os chmod9836209
Ref: 21b9836209
Ref: library/os os chown9838420
Ref: 112d9838420
Ref: library/os os chroot9839540
Ref: 1b0b9839540
Ref: library/os os fchdir9839782
Ref: db19839782
Ref: library/os os getcwd9840211
Ref: 16829840211
Ref: library/os os getcwdb9840310
Ref: a9b9840310
Ref: library/os os lchflags9840648
Ref: 2d5b9840648
Ref: library/os os lchmod9841177
Ref: 21a9841177
Ref: library/os os lchown9842084
Ref: 2d5c9842084
Ref: library/os os link9842630
Ref: 112e9842630
Ref: library/os os listdir9843484
Ref: 11399843484
Ref: library/os os listdrives9845132
Ref: 49d9845132
Ref: library/os os listmounts9845810
Ref: 49f9845810
Ref: library/os os listvolumes9846721
Ref: 49e9846721
Ref: library/os os lstat9847521
Ref: 4a19847521
Ref: library/os os mkdir9848747
Ref: 21d9848747
Ref: library/os mkdir-modebits9849082
Ref: 2d5d9849082
Ref: library/os os makedirs9850370
Ref: 21e9850370
Ref: library/os os mkfifo9852254
Ref: db89852254
Ref: library/os os mknod9853234
Ref: db99853234
Ref: library/os os major9854224
Ref: 17049854224
Ref: library/os os minor9854415
Ref: 17059854415
Ref: library/os os makedev9854602
Ref: 17069854602
Ref: library/os os pathconf9854761
Ref: 113a9854761
Ref: library/os os pathconf_names9856009
Ref: 2d5f9856009
Ref: library/os os readlink9856367
Ref: 9269856367
Ref: library/os os remove9857974
Ref: 112f9857974
Ref: library/os os removedirs9858998
Ref: 2d609858998
Ref: library/os os rename9859894
Ref: 11309859894
Ref: library/os os renames9861725
Ref: 2d619861725
Ref: library/os os replace9862638
Ref: 11319862638
Ref: library/os os rmdir9863598
Ref: 11329863598
Ref: library/os os scandir9864299
Ref: a689864299
Ref: library/os os scandir close9866262
Ref: cdc9866262
Ref: library/os os DirEntry9867895
Ref: 49b9867895
Ref: library/os os DirEntry name9869243
Ref: 2d639869243
Ref: library/os os DirEntry path9869641
Ref: 17729869641
Ref: library/os os DirEntry inode9870410
Ref: 17cc9870410
Ref: library/os os DirEntry is_dir9870801
Ref: 2d629870801
Ref: library/os os DirEntry is_file9872407
Ref: dac9872407
Ref: library/os os DirEntry is_symlink9873221
Ref: 2d649873221
Ref: library/os os DirEntry is_junction9874188
Ref: 49c9874188
Ref: library/os os DirEntry stat9874694
Ref: 17ed9874694
Ref: library/os os stat9876601
Ref: 4a09876601
Ref: library/os os stat_result9879440
Ref: 15099879440
Ref: library/os os stat_result st_mode9879690
Ref: a149879690
Ref: library/os os stat_result st_ino9879813
Ref: 2d659879813
Ref: library/os os stat_result st_dev9880111
Ref: 2d669880111
Ref: library/os os stat_result st_nlink9880207
Ref: 2d679880207
Ref: library/os os stat_result st_uid9880274
Ref: 2d689880274
Ref: library/os os stat_result st_gid9880367
Ref: 2d699880367
Ref: library/os os stat_result st_size9880457
Ref: 2d6a9880457
Ref: library/os os stat_result st_atime9880745
Ref: 2d6b9880745
Ref: library/os os stat_result st_mtime9880835
Ref: 2bf79880835
Ref: library/os os stat_result st_ctime9880955
Ref: 2d6c9880955
Ref: library/os os stat_result st_atime_ns9881360
Ref: 2d6d9881360
Ref: library/os os stat_result st_mtime_ns9881530
Ref: 2d6e9881530
Ref: library/os os stat_result st_ctime_ns9881720
Ref: 2d6f9881720
Ref: library/os os stat_result st_birthtime9882201
Ref: 2d709882201
Ref: library/os os stat_result st_birthtime_ns9882505
Ref: 2d719882505
Ref: library/os os stat_result st_blocks9884203
Ref: 2d729884203
Ref: library/os os stat_result st_blksize9884404
Ref: 2d739884404
Ref: library/os os stat_result st_rdev9884643
Ref: 15f49884643
Ref: library/os os stat_result st_flags9884732
Ref: 2d749884732
Ref: library/os os stat_result st_gen9884991
Ref: 2d759884991
Ref: library/os os stat_result st_fstype9885154
Ref: b7a9885154
Ref: library/os os stat_result st_rsize9885382
Ref: 2d769885382
Ref: library/os os stat_result st_creator9885447
Ref: 2d779885447
Ref: library/os os stat_result st_type9885509
Ref: 2d789885509
Ref: library/os os stat_result st_file_attributes9885649
Ref: e659885649
Ref: library/os os stat_result st_reparse_tag9886037
Ref: a159886037
Ref: library/os os statvfs9888613
Ref: 113b9888613
Ref: library/os os supports_dir_fd9890949
Ref: 11369890949
Ref: library/os os supports_effective_ids9892228
Ref: 113d9892228
Ref: library/os os supports_fd9892993
Ref: 113c9892993
Ref: library/os os supports_follow_symlinks9893903
Ref: 11379893903
Ref: library/os os symlink9895135
Ref: 11339895135
Ref: library/os os sync9897316
Ref: 11519897316
Ref: library/os os truncate9897462
Ref: e699897462
Ref: library/os os unlink9898042
Ref: 11349898042
Ref: library/os os utime9898612
Ref: 11359898612
Ref: library/os os walk9900700
Ref: 4a99900700
Ref: library/os os fwalk9906393
Ref: b719906393
Ref: library/os os memfd_create9909232
Ref: a139909232
Ref: library/os os MFD_CLOEXEC9910133
Ref: 2d799910133
Ref: library/os os MFD_ALLOW_SEALING9910158
Ref: 2d7a9910158
Ref: library/os os MFD_HUGETLB9910189
Ref: 2d7b9910189
Ref: library/os os MFD_HUGE_SHIFT9910214
Ref: 2d7c9910214
Ref: library/os os MFD_HUGE_MASK9910242
Ref: 2d7d9910242
Ref: library/os os MFD_HUGE_64KB9910269
Ref: 2d7e9910269
Ref: library/os os MFD_HUGE_512KB9910296
Ref: 2d7f9910296
Ref: library/os os MFD_HUGE_1MB9910324
Ref: 2d809910324
Ref: library/os os MFD_HUGE_2MB9910350
Ref: 2d819910350
Ref: library/os os MFD_HUGE_8MB9910376
Ref: 2d829910376
Ref: library/os os MFD_HUGE_16MB9910402
Ref: 2d839910402
Ref: library/os os MFD_HUGE_32MB9910429
Ref: 2d849910429
Ref: library/os os MFD_HUGE_256MB9910456
Ref: 2d859910456
Ref: library/os os MFD_HUGE_512MB9910484
Ref: 2d869910484
Ref: library/os os MFD_HUGE_1GB9910512
Ref: 2d879910512
Ref: library/os os MFD_HUGE_2GB9910538
Ref: 2d889910538
Ref: library/os os MFD_HUGE_16GB9910564
Ref: 2d899910564
Ref: library/os os eventfd9910872
Ref: 81b9910872
Ref: library/os os eventfd_read9912985
Ref: 2d8b9912985
Ref: library/os os eventfd_write9913290
Ref: 2d8c9913290
Ref: library/os os EFD_CLOEXEC9913613
Ref: 18e39913613
Ref: library/os os EFD_NONBLOCK9913824
Ref: 18e49913824
Ref: library/os os EFD_SEMAPHORE9914056
Ref: 18e59914056
Ref: Arquivos e diretórios-Footnote-19914468
Ref: Arquivos e diretórios-Footnote-29914514
Ref: Arquivos e diretórios-Footnote-39914556
Ref: Arquivos e diretórios-Footnote-49914621
Ref: Arquivos e diretórios-Footnote-59914701
Ref: Arquivos e diretórios-Footnote-69914783
Ref: Arquivos e diretórios-Footnote-79914872
Ref: Arquivos e diretórios-Footnote-89914961
Ref: Arquivos e diretórios-Footnote-99915019
Node: Descritores de arquivo de temporizador9915066
Ref: library/os os-timerfd9915201
Ref: 1539915201
Ref: library/os timer-file-descriptors9915201
Ref: 2d8d9915201
Ref: library/os os timerfd_create9915417
Ref: 2119915417
Ref: library/os os timerfd_settime9918435
Ref: 2129918435
Ref: library/os os timerfd_settime_ns9921497
Ref: 2139921497
Ref: library/os os timerfd_gettime9921868
Ref: 2149921868
Ref: library/os os timerfd_gettime_ns9922549
Ref: 2159922549
Ref: library/os os TFD_NONBLOCK9922787
Ref: 2169922787
Ref: library/os os TFD_CLOEXEC9923201
Ref: 2179923201
Ref: library/os os TFD_TIMER_ABSTIME9923538
Ref: 2189923538
Ref: library/os os TFD_TIMER_CANCEL_ON_SET9923956
Ref: 2199923956
Ref: Descritores de arquivo de temporizador-Footnote-19924391
Ref: Descritores de arquivo de temporizador-Footnote-29924445
Ref: Descritores de arquivo de temporizador-Footnote-39924499
Ref: Descritores de arquivo de temporizador-Footnote-49924554
Ref: Descritores de arquivo de temporizador-Footnote-59924606
Ref: Descritores de arquivo de temporizador-Footnote-69924659
Ref: Descritores de arquivo de temporizador-Footnote-79924703
Node: Atributos estendidos do Linux9924758
Ref: library/os linux-extended-attributes9924893
Ref: 2d8f9924893
Ref: library/os os getxattr9925062
Ref: 11439925062
Ref: library/os os listxattr9925783
Ref: 11449925783
Ref: library/os os removexattr9926468
Ref: 11459926468
Ref: library/os os setxattr9927222
Ref: 11469927222
Ref: library/os os XATTR_SIZE_MAX9928560
Ref: 2d929928560
Ref: library/os os XATTR_CREATE9928699
Ref: 2d919928699
Ref: library/os os XATTR_REPLACE9928865
Ref: 2d909928865
Node: Gerenciamento de processo9929052
Ref: library/os os-process9929225
Ref: 2d939929225
Ref: library/os process-management9929225
Ref: 2d949929225
Ref: library/os os abort9929890
Ref: 2d969929890
Ref: library/os os add_dll_directory9930289
Ref: 9f29930289
Ref: library/os os execl9931611
Ref: 2d959931611
Ref: library/os os execle9931658
Ref: 2d979931658
Ref: library/os os execlp9931711
Ref: 2d989931711
Ref: library/os os execlpe9931759
Ref: 2d999931759
Ref: library/os os execv9931813
Ref: 2cf99931813
Ref: library/os os execve9931849
Ref: 11389931849
Ref: library/os os execvp9931891
Ref: 2d9a9931891
Ref: library/os os execvpe9931928
Ref: 2d9b9931928
Ref: library/os os _exit9935521
Ref: 242f9935521
Ref: library/os os EX_OK9936355
Ref: 2d9c9936355
Ref: library/os os EX_USAGE9936619
Ref: 2d9d9936619
Ref: library/os os EX_DATAERR9936839
Ref: 2d9e9936839
Ref: library/os os EX_NOINPUT9937002
Ref: 2d9f9937002
Ref: library/os os EX_NOUSER9937184
Ref: 2da09937184
Ref: library/os os EX_NOHOST9937345
Ref: 2da19937345
Ref: library/os os EX_UNAVAILABLE9937497
Ref: 2da29937497
Ref: library/os os EX_SOFTWARE9937670
Ref: 2da39937670
Ref: library/os os EX_OSERR9937838
Ref: 2da49937838
Ref: library/os os EX_OSFILE9938068
Ref: 2da59938068
Ref: library/os os EX_CANTCREAT9938286
Ref: 2da69938286
Ref: library/os os EX_IOERR9938483
Ref: 2da79938483
Ref: library/os os EX_TEMPFAIL9938652
Ref: 2da89938652
Ref: library/os os EX_PROTOCOL9938965
Ref: 2da99938965
Ref: library/os os EX_NOPERM9939157
Ref: 2daa9939157
Ref: library/os os EX_CONFIG9939412
Ref: 2dab9939412
Ref: library/os os EX_NOTFOUND9939581
Ref: 2dac9939581
Ref: library/os os fork9939751
Ref: 1979939751
Ref: library/os os forkpty9942036
Ref: 1989942036
Ref: library/os os kill9943229
Ref: 13ae9943229
Ref: library/os os killpg9944182
Ref: 1b4d9944182
Ref: library/os os nice9944456
Ref: 11409944456
Ref: library/os os pidfd_open9944654
Ref: 47a9944654
Ref: library/os os PIDFD_NONBLOCK9945083
Ref: 49a9945083
Ref: library/os os plock9945573
Ref: 2dad9945573
Ref: library/os os popen9945817
Ref: a919945817
Ref: library/os os posix_spawn9947946
Ref: 2209947946
Ref: library/os os POSIX_SPAWN_OPEN9949104
Ref: 2dae9949104
Ref: library/os os POSIX_SPAWN_CLOSE9949275
Ref: 2daf9949275
Ref: library/os os POSIX_SPAWN_DUP29949396
Ref: 2db09949396
Ref: library/os os POSIX_SPAWN_CLOSEFROM9949532
Ref: 2219949532
Ref: library/os os posix_spawnp9952566
Ref: 1ba79952566
Ref: library/os os register_at_fork9953351
Ref: 3009953351
Ref: library/os os spawnl9954978
Ref: 18269954978
Ref: library/os os spawnle9955020
Ref: 2db19955020
Ref: library/os os spawnlp9955068
Ref: 2db29955068
Ref: library/os os spawnlpe9955111
Ref: 2db39955111
Ref: library/os os spawnv9955160
Ref: 2db49955160
Ref: library/os os spawnve9955203
Ref: 2db59955203
Ref: library/os os spawnvp9955252
Ref: 2db69955252
Ref: library/os os spawnvpe9955296
Ref: 2db79955296
Ref: library/os os P_NOWAIT9959379
Ref: 2db89959379
Ref: library/os os P_NOWAITO9959401
Ref: 2dba9959401
Ref: library/os os P_WAIT9959765
Ref: 2db99959765
Ref: library/os os P_DETACH9960233
Ref: 2dbb9960233
Ref: library/os os P_OVERLAY9960255
Ref: 2dbc9960255
Ref: library/os os startfile9960752
Ref: 1a0f9960752
Ref: library/os os system9963606
Ref: 14a59963606
Ref: library/os os times9965421
Ref: 11549965421
Ref: library/os os wait9966550
Ref: dc09966550
Ref: library/os os waitid9967546
Ref: dc19967546
Ref: library/os os waitpid9969075
Ref: dc29969075
Ref: library/os os wait39971666
Ref: dbe9971666
Ref: library/os os wait49972365
Ref: dbf9972365
Ref: library/os os P_PID9973022
Ref: 2dbd9973022
Ref: library/os os P_PGID9973041
Ref: 2dbe9973041
Ref: library/os os P_ALL9973061
Ref: 2dbf9973061
Ref: library/os os P_PIDFD9973080
Ref: 9209973080
Ref: library/os os WCONTINUED9973879
Ref: 2dc29973879
Ref: library/os os WEXITED9974280
Ref: 2dc09974280
Ref: library/os os WSTOPPED9974674
Ref: 2dc19974674
Ref: library/os os WUNTRACED9975046
Ref: 2dc79975046
Ref: library/os os WNOHANG9975482
Ref: 2dc39975482
Ref: library/os os WNOWAIT9975816
Ref: 2dc49975816
Ref: library/os os CLD_EXITED9976234
Ref: 2dc69976234
Ref: library/os os CLD_KILLED9976258
Ref: 91e9976258
Ref: library/os os CLD_DUMPED9976282
Ref: 2dc89976282
Ref: library/os os CLD_TRAPPED9976306
Ref: 2dc99976306
Ref: library/os os CLD_STOPPED9976331
Ref: 91f9976331
Ref: library/os os CLD_CONTINUED9976356
Ref: 2dca9976356
Ref: library/os os waitstatus_to_exitcode9976710
Ref: 9239976710
Ref: library/os os WCOREDUMP9978352
Ref: 2dd19978352
Ref: library/os os WIFCONTINUED9978699
Ref: 2dd29978699
Ref: library/os os WIFSTOPPED9979076
Ref: 2dcf9979076
Ref: library/os os WIFSIGNALED9979536
Ref: 2dcd9979536
Ref: library/os os WIFEXITED9979759
Ref: 2dcb9979759
Ref: library/os os WEXITSTATUS9980064
Ref: 2dcc9980064
Ref: library/os os WSTOPSIG9980318
Ref: 2dd09980318
Ref: library/os os WTERMSIG9980586
Ref: 2dce9980586
Ref: Gerenciamento de processo-Footnote-19980901
Ref: Gerenciamento de processo-Footnote-29980973
Ref: Gerenciamento de processo-Footnote-39981016
Ref: Gerenciamento de processo-Footnote-49981066
Ref: Gerenciamento de processo-Footnote-59981112
Ref: Gerenciamento de processo-Footnote-69981157
Ref: Gerenciamento de processo-Footnote-79981209
Ref: Gerenciamento de processo-Footnote-89981318
Ref: Gerenciamento de processo-Footnote-99981360
Node: Interface do agendador9981406
Ref: library/os interface-to-the-scheduler9981590
Ref: 2dd49981590
Ref: library/os os-scheduling-policy9982018
Ref: 2dd59982018
Ref: library/os os SCHED_OTHER9982018
Ref: 2dd69982018
Ref: library/os os SCHED_BATCH9982086
Ref: 2dd79982086
Ref: library/os os SCHED_IDLE9982249
Ref: 2dd89982249
Ref: library/os os SCHED_SPORADIC9982374
Ref: 2dd99982374
Ref: library/os os SCHED_FIFO9982475
Ref: 2dda9982475
Ref: library/os os SCHED_RR9982604
Ref: 2ddb9982604
Ref: library/os os SCHED_RESET_ON_FORK9982675
Ref: 2ddc9982675
Ref: library/os os sched_param9982962
Ref: 168a9982962
Ref: library/os os sched_param sched_priority9983271
Ref: 2ddd9983271
Ref: library/os os sched_get_priority_min9983380
Ref: 11489983380
Ref: library/os os sched_get_priority_max9983560
Ref: 11479983560
Ref: library/os os sched_setscheduler9983740
Ref: 114f9983740
Ref: library/os os sched_getscheduler9984057
Ref: 114b9984057
Ref: library/os os sched_setparam9984302
Ref: 114e9984302
Ref: library/os os sched_getparam9984537
Ref: 114a9984537
Ref: library/os os sched_rr_get_interval9984760
Ref: 114c9984760
Ref: library/os os sched_yield9984941
Ref: 11509984941
Ref: library/os os sched_setaffinity9985061
Ref: 114d9985061
Ref: library/os os sched_getaffinity9985335
Ref: 11499985335
Ref: Interface do agendador-Footnote-19985685
Node: Diversas informações de sistema9985736
Ref: library/os miscellaneous-system-information9985918
Ref: 2dde9985918
Ref: library/os os-path9985918
Ref: 2ddf9985918
Ref: library/os os confstr9986005
Ref: 16509986005
Ref: library/os os confstr_names9987154
Ref: 2de09987154
Ref: library/os os cpu_count9987489
Ref: 1c59987489
Ref: library/os os getloadavg9987998
Ref: 16d19987998
Ref: library/os os process_cpu_count9988262
Ref: 1c49988262
Ref: library/os os sysconf9988889
Ref: 16519988889
Ref: library/os os sysconf_names9989362
Ref: 2de19989362
Ref: library/os os curdir9990017
Ref: 29909990017
Ref: library/os os pardir9990225
Ref: 2d5e9990225
Ref: library/os os sep9990432
Ref: 66a9990432
Ref: library/os os altsep9990875
Ref: 66b9990875
Ref: library/os os extsep9991214
Ref: 2de29991214
Ref: library/os os pathsep9991396
Ref: 1ecc9991396
Ref: library/os os defpath9991670
Ref: 1b799991670
Ref: library/os os linesep9991886
Ref: 23119991886
Ref: library/os os devnull9992309
Ref: 1bab9992309
Ref: library/os os RTLD_LAZY9992503
Ref: 11579992503
Ref: library/os os RTLD_NOW9992526
Ref: 11589992526
Ref: library/os os RTLD_GLOBAL9992548
Ref: 11599992548
Ref: library/os os RTLD_LOCAL9992573
Ref: 115a9992573
Ref: library/os os RTLD_NODELETE9992597
Ref: 115b9992597
Ref: library/os os RTLD_NOLOAD9992624
Ref: 115c9992624
Ref: library/os os RTLD_DEEPBIND9992649
Ref: 115d9992649
Ref: Diversas informações de sistema-Footnote-19992973
Node: Números aleatórios<2>9993019
Ref: library/os random-numbers9993170
Ref: 2de39993170
Ref: library/os os getrandom9993231
Ref: cdd9993231
Ref: library/os os urandom9994161
Ref: 5239994161
Ref: library/os os GRND_NONBLOCK9996524
Ref: 2de59996524
Ref: library/os os GRND_RANDOM9997032
Ref: 2de49997032
Ref: Números aleatórios<2>-Footnote-19997261
Ref: Números aleatórios<2>-Footnote-29997324
Node: io — Ferramentas essenciais para trabalhar com fluxos9997366
Ref: library/io doc9997609
Ref: 2de69997609
Ref: library/io io-core-tools-for-working-with-streams9997609
Ref: 2de79997609
Ref: library/io module-io9997609
Ref: 7f9997609
Ref: library/io translation-repo9997609
Ref: 2de89997609
Ref: io — Ferramentas essenciais para trabalhar com fluxos-Footnote-19998041
Node: Visão Geral<2>9998103
Ref: library/io io-overview9998241
Ref: 230f9998241
Ref: library/io overview9998241
Ref: 2de99998241
Node: E/S de texto9999662
Ref: library/io text-i-o9999747
Ref: 2dea9999747
Node: E/S binária10000561
Ref: library/io binary-i-o10000664
Ref: 2deb10000664
Node: E/S bruta10001661
Ref: library/io raw-i-o10001743
Ref: 2dec10001743
Node: Codificação do texto10002272
Ref: library/io io-text-encoding10002454
Ref: 7be10002454
Ref: library/io text-encoding10002454
Ref: 2ded10002454
Ref: Codificação do texto-Footnote-110003820
Node: Ativar EncodingWarning10003862
Ref: library/io io-encoding-warning10003943
Ref: 1ed910003943
Ref: library/io opt-in-encodingwarning10003943
Ref: 2dee10003943
Ref: Ativar EncodingWarning-Footnote-110004813
Node: Interface de alto nível do módulo10004855
Ref: library/io high-level-module-interface10005042
Ref: 2def10005042
Ref: library/io io DEFAULT_BUFFER_SIZE10005131
Ref: 17ba10005131
Ref: library/io io open10005398
Ref: 51d10005398
Ref: library/io io open_code10005827
Ref: 181c10005827
Ref: library/io io text_encoding10006495
Ref: 17b910006495
Ref: library/io io BlockingIOError10007648
Ref: 2df010007648
Ref: library/io io UnsupportedOperation10007780
Ref: 1b0e10007780
Node: hierarquia de classe10008132
Ref: library/io class-hierarchy10008310
Ref: 2df110008310
Node: I/O Base Classes10013029
Ref: library/io i-o-base-classes10013123
Ref: 2df210013123
Ref: library/io io IOBase10013176
Ref: 1f510013176
Ref: library/io io IOBase close10015024
Ref: 1f610015024
Ref: library/io io IOBase closed10015435
Ref: 1ba410015435
Ref: library/io io IOBase fileno10015509
Ref: 15d010015509
Ref: library/io io IOBase flush10015731
Ref: 2df310015731
Ref: library/io io IOBase isatty10015892
Ref: 1e0910015892
Ref: library/io io IOBase readable10016033
Ref: 13f410016033
Ref: library/io io IOBase readline10016196
Ref: 241f10016196
Ref: library/io io IOBase readlines10016569
Ref: 24c710016569
Ref: library/io io IOBase seek10017134
Ref: 12ce10017134
Ref: library/io io IOBase seekable10018125
Ref: 13f610018125
Ref: library/io io IOBase tell10018359
Ref: 13f310018359
Ref: library/io io IOBase truncate10018433
Ref: 135510018433
Ref: library/io io IOBase writable10019013
Ref: 13f510019013
Ref: library/io io IOBase writelines10019215
Ref: 15a110019215
Ref: library/io io IOBase __del__10019439
Ref: 2df410019439
Ref: library/io io RawIOBase10019657
Ref: 110f10019657
Ref: library/io io RawIOBase read10020164
Ref: e4810020164
Ref: library/io io RawIOBase readall10020849
Ref: 2df510020849
Ref: library/io io RawIOBase readinto10021006
Ref: e4910021006
Ref: library/io io RawIOBase write10021348
Ref: 13f210021348
Ref: library/io io BufferedIOBase10021988
Ref: 69410021988
Ref: library/io io BufferedIOBase raw10023204
Ref: 13f710023204
Ref: library/io io BufferedIOBase detach10023474
Ref: 2b4910023474
Ref: library/io io BufferedIOBase read10023916
Ref: 136d10023916
Ref: library/io io BufferedIOBase read110025202
Ref: 2b3810025202
Ref: library/io io BufferedIOBase readinto10025791
Ref: 2df610025791
Ref: library/io io BufferedIOBase readinto110026327
Ref: e4710026327
Ref: library/io io BufferedIOBase write10026831
Ref: cfc10026831
Ref: I/O Base Classes-Footnote-110027689
Ref: I/O Base Classes-Footnote-210027731
Node: Raw File I/O10027773
Ref: library/io raw-file-i-o10027892
Ref: 2df710027892
Ref: library/io io FileIO10027939
Ref: 135410027939
Ref: library/io io FileIO mode10030263
Ref: 2df810030263
Ref: library/io io FileIO name10030337
Ref: 2b5310030337
Node: Buffered Streams10030481
Ref: library/io buffered-streams10030599
Ref: 2df910030599
Ref: library/io io BytesIO10030745
Ref: ed310030745
Ref: library/io io BytesIO getbuffer10031227
Ref: 123110031227
Ref: library/io io BytesIO getvalue10031802
Ref: 2b3610031802
Ref: library/io io BytesIO read110031925
Ref: 2dfa10031925
Ref: library/io io BytesIO readinto110032110
Ref: 2dfb10032110
Ref: library/io io BufferedReader10032272
Ref: 124e10032272
Ref: library/io io BufferedReader peek10033113
Ref: 2dfc10033113
Ref: library/io io BufferedReader read10033414
Ref: 2dfd10033414
Ref: library/io io BufferedReader read110033561
Ref: 2dfe10033561
Ref: library/io io BufferedWriter10033783
Ref: 13f810033783
Ref: library/io io BufferedWriter flush10034904
Ref: 2dff10034904
Ref: library/io io BufferedWriter write10035090
Ref: 2e0010035090
Ref: library/io io BufferedRandom10035449
Ref: 13f910035449
Ref: library/io io BufferedRWPair10036152
Ref: 13fa10036152
Node: E/S de texto<2>10037091
Ref: library/io id110037188
Ref: 2e0110037188
Ref: library/io io TextIOBase10037235
Ref: 69510037235
Ref: library/io io TextIOBase encoding10037552
Ref: 2e0210037552
Ref: library/io io TextIOBase errors10037711
Ref: 135310037711
Ref: library/io io TextIOBase newlines10037794
Ref: 2e0310037794
Ref: library/io io TextIOBase buffer10038037
Ref: 12e510038037
Ref: library/io io TextIOBase detach10038335
Ref: 15a810038335
Ref: library/io io TextIOBase read10038858
Ref: 1e0c10038858
Ref: library/io io TextIOBase readline10039067
Ref: 1e4610039067
Ref: library/io io TextIOBase seek10039338
Ref: 2e0410039338
Ref: library/io io TextIOBase tell10040317
Ref: 2e0510040317
Ref: library/io io TextIOBase write10040522
Ref: 1dfb10040522
Ref: library/io io TextIOWrapper10040655
Ref: 7bc10040655
Ref: library/io io TextIOWrapper line_buffering10044555
Ref: 2e0610044555
Ref: library/io io TextIOWrapper write_through10044636
Ref: 2e0710044636
Ref: library/io io TextIOWrapper reconfigure10044800
Ref: b5e10044800
Ref: library/io io TextIOWrapper seek10045697
Ref: 2e0810045697
Ref: library/io io TextIOWrapper tell10046624
Ref: 15d410046624
Ref: library/io io StringIO10046848
Ref: f5910046848
Ref: library/io io StringIO getvalue10048014
Ref: 2e0910048014
Ref: library/io io IncrementalNewlineDecoder10048671
Ref: 17bb10048671
Node: Desempenho<3>10048859
Ref: library/io performance10048993
Ref: 2e0a10048993
Node: E/S binária<2>10049252
Ref: library/io id210049341
Ref: 2e0b10049341
Node: E/S de texto<3>10049996
Ref: library/io id310050112
Ref: 2e0c10050112
Node: Multi-threading<3>10050683
Ref: library/io multi-threading10050794
Ref: 2e0d10050794
Ref: Multi-threading<3>-Footnote-110051368
Node: Reentrancy10051412
Ref: library/io reentrancy10051499
Ref: 2e0e10051499
Node: time — Acesso ao horário e conversões10052292
Ref: library/time doc10052541
Ref: 2e0f10052541
Ref: library/time module-time10052541
Ref: ee10052541
Ref: library/time time-time-access-and-conversions10052541
Ref: 2e1010052541
Ref: library/time translation-repo10052541
Ref: 2e1110052541
Ref: library/time epoch10053308
Ref: 2bf610053308
Ref: time — Acesso ao horário e conversões-Footnote-110058261
Ref: time — Acesso ao horário e conversões-Footnote-210058311
Ref: time — Acesso ao horário e conversões-Footnote-310058376
Node: Funções<5>10058434
Ref: library/time functions10058561
Ref: 2e1410058561
Ref: library/time time-functions10058561
Ref: 2e1510058561
Ref: library/time time asctime10058598
Ref: 122710058598
Ref: library/time time pthread_getcpuclockid10059339
Ref: baa10059339
Ref: library/time time clock_getres10060029
Ref: 119c10060029
Ref: library/time time clock_gettime10060329
Ref: 119d10060329
Ref: library/time time clock_gettime_ns10060736
Ref: af410060736
Ref: library/time time clock_settime10060956
Ref: 119e10060956
Ref: library/time time clock_settime_ns10061363
Ref: af510061363
Ref: library/time time ctime10061608
Ref: 25f410061608
Ref: library/time time get_clock_info10062252
Ref: 119b10062252
Ref: library/time time gmtime10063489
Ref: 120010063489
Ref: library/time time localtime10064012
Ref: 154110064012
Ref: library/time time mktime10064749
Ref: 122810064749
Ref: library/time time monotonic10065576
Ref: 25310065576
Ref: library/time time monotonic_ns10066760
Ref: af610066760
Ref: library/time time perf_counter10066921
Ref: a9210066921
Ref: library/time time perf_counter_ns10067878
Ref: af710067878
Ref: library/time time process_time10068047
Ref: a9310068047
Ref: library/time time process_time_ns10068589
Ref: af810068589
Ref: library/time time sleep10068758
Ref: 69d10068758
Ref: library/time time strftime10071074
Ref: 122910071074
Ref: library/time leap-second10078982
Ref: 2e1710078982
Ref: library/time time strptime10080269
Ref: 147410080269
Ref: library/time time struct_time10082112
Ref: d0b10082112
Ref: library/time time struct_time tm_year10082782
Ref: 154010082782
Ref: library/time time struct_time tm_mon10083046
Ref: 2e1810083046
Ref: library/time time struct_time tm_mday10083309
Ref: 2e1910083309
Ref: library/time time struct_time tm_hour10083571
Ref: 2e1a10083571
Ref: library/time time struct_time tm_min10083832
Ref: 2e1b10083832
Ref: library/time time struct_time tm_sec10084094
Ref: 2e1c10084094
Ref: library/time time struct_time tm_wday10084575
Ref: 2e1d10084575
Ref: library/time time struct_time tm_yday10084857
Ref: 2e1e10084857
Ref: library/time time struct_time tm_isdst10085122
Ref: 260510085122
Ref: library/time time struct_time tm_zone10085390
Ref: 2e1310085390
Ref: library/time time struct_time tm_gmtoff10085675
Ref: 2e1210085675
Ref: library/time time time10086509
Ref: 25410086509
Ref: library/time time time_ns10088182
Ref: af910088182
Ref: library/time time thread_time10088385
Ref: 93d10088385
Ref: library/time time thread_time_ns10089059
Ref: ba910089059
Ref: library/time time tzset10089226
Ref: 2e1f10089226
Ref: Funções<5>-Footnote-110093496
Ref: Funções<5>-Footnote-210093557
Ref: Funções<5>-Footnote-310093656
Ref: Funções<5>-Footnote-410093698
Ref: Funções<5>-Footnote-510094551
Ref: Funções<5>-Footnote-610095404
Ref: Funções<5>-Footnote-710095454
Ref: Funções<5>-Footnote-810095513
Ref: Funções<5>-Footnote-910096366
Ref: Funções<5>-Footnote-1010096414
Ref: Funções<5>-Footnote-1110096465
Ref: Funções<5>-Footnote-1210096514
Node: Constantes de ID de Relógio10096561
Ref: library/time clock-id-constants10096724
Ref: 2e2010096724
Ref: library/time time-clock-id-constants10096724
Ref: 2d8e10096724
Ref: library/time time CLOCK_BOOTTIME10096915
Ref: ba610096915
Ref: library/time time CLOCK_HIGHRES10097437
Ref: 2e2110097437
Ref: library/time time CLOCK_MONOTONIC10097790
Ref: 69910097790
Ref: library/time time CLOCK_MONOTONIC_RAW10098023
Ref: 2e2210098023
Ref: library/time time CLOCK_MONOTONIC_RAW_APPROX10098308
Ref: 2e2310098308
Ref: library/time time CLOCK_PROCESS_CPUTIME_ID10098595
Ref: 2e2410098595
Ref: library/time time CLOCK_PROF10098764
Ref: ba710098764
Ref: library/time time CLOCK_TAI10098944
Ref: 1ae410098944
Ref: library/time time CLOCK_THREAD_CPUTIME_ID10099265
Ref: 2e2510099265
Ref: library/time time CLOCK_UPTIME10099433
Ref: ba810099433
Ref: library/time time CLOCK_UPTIME_RAW10099755
Ref: a4c10099755
Ref: library/time time CLOCK_UPTIME_RAW_APPROX10100085
Ref: 2e2610100085
Ref: library/time time CLOCK_REALTIME10100469
Ref: 69a10100469
Ref: Constantes de ID de Relógio-Footnote-110100753
Node: Constantes de Fuso Horário10100880
Ref: library/time time-timezone-constants10101022
Ref: 2e2710101022
Ref: library/time timezone-constants10101022
Ref: 2e2810101022
Ref: library/time time altzone10101096
Ref: 2e2910101096
Ref: library/time time daylight10101435
Ref: 2e2a10101435
Ref: library/time time timezone10101545
Ref: 2e2b10101545
Ref: library/time time tzname10101796
Ref: 2e2c10101796
Node: logging — Recursos de registro de eventos para Python10103100
Ref: library/logging doc10103346
Ref: 2e2d10103346
Ref: library/logging logging-logging-facility-for-python10103346
Ref: 2e2e10103346
Ref: library/logging module-logging10103346
Ref: 8710103346
Ref: library/logging translation-repo10103346
Ref: 2e2f10103346
Ref: logging — Recursos de registro de eventos para Python-Footnote-110107307
Node: Objetos Logger10107384
Ref: library/logging logger10107517
Ref: 2e3010107517
Ref: library/logging logger-objects10107517
Ref: 2e3110107517
Ref: library/logging logging Logger10108688
Ref: b6410108688
Ref: library/logging logging Logger name10108716
Ref: 2e3210108716
Ref: library/logging logging Logger level10108963
Ref: 2e3310108963
Ref: library/logging logging Logger parent10109255
Ref: 2e3410109255
Ref: library/logging logging Logger propagate10109522
Ref: 14dd10109522
Ref: library/logging logging Logger handlers10111860
Ref: 2e3510111860
Ref: library/logging logging Logger disabled10112236
Ref: 2e3810112236
Ref: library/logging logging Logger setLevel10112528
Ref: 14db10112528
Ref: library/logging logging Logger isEnabledFor10114685
Ref: 133a10114685
Ref: library/logging logging Logger getEffectiveLevel10115044
Ref: 2e3c10115044
Ref: library/logging logging Logger getChild10115576
Ref: 133810115576
Ref: library/logging logging Logger getChildren10116098
Ref: 18dc10116098
Ref: library/logging logging Logger debug10116674
Ref: e5710116674
Ref: library/logging logging Logger info10122170
Ref: 2e3f10122170
Ref: library/logging logging Logger warning10122356
Ref: 17f610122356
Ref: library/logging logging Logger error10122769
Ref: 2e4110122769
Ref: library/logging logging Logger critical10122957
Ref: e5610122957
Ref: library/logging logging Logger log10123162
Ref: e5410123162
Ref: library/logging logging Logger exception10123359
Ref: e5510123359
Ref: library/logging logging Logger addFilter10123681
Ref: 2e4410123681
Ref: library/logging logging Logger removeFilter10123781
Ref: 2e4510123781
Ref: library/logging logging Logger filter10123889
Ref: 2e4610123889
Ref: library/logging logging Logger addHandler10124327
Ref: 2e3610124327
Ref: library/logging logging Logger removeHandler10124433
Ref: 2e3710124433
Ref: library/logging logging Logger findCaller10124540
Ref: 2e4710124540
Ref: library/logging logging Logger handle10125343
Ref: 2e4810125343
Ref: library/logging logging Logger makeRecord10125743
Ref: 2e4910125743
Ref: library/logging logging Logger hasHandlers10126007
Ref: 2e4a10126007
Node: Níveis de Logging10126635
Ref: library/logging levels10126792
Ref: 65a10126792
Ref: library/logging logging-levels10126792
Ref: 2e4b10126792
Ref: library/logging logging NOTSET10127524
Ref: 2e3910127524
Ref: library/logging logging DEBUG10128134
Ref: 2e3d10128134
Ref: library/logging logging INFO10128469
Ref: 2e3b10128469
Ref: library/logging logging WARNING10128731
Ref: 2e3a10128731
Ref: library/logging logging ERROR10129240
Ref: 2e4210129240
Ref: library/logging logging CRITICAL10129557
Ref: 2e4310129557
Node: Objetos Handler10129773
Ref: library/logging handler10129933
Ref: 2e4c10129933
Ref: library/logging handler-objects10129933
Ref: 2e4d10129933
Ref: library/logging logging Handler10130253
Ref: 14de10130253
Ref: library/logging logging Handler __init__10130282
Ref: 2e4e10130282
Ref: library/logging logging Handler createLock10130578
Ref: 2e4f10130578
Ref: library/logging logging Handler acquire10130767
Ref: 2e5010130767
Ref: library/logging logging Handler release10130882
Ref: 2e5110130882
Ref: library/logging logging Handler setLevel10130985
Ref: 2e5210130985
Ref: library/logging logging Handler setFormatter10131581
Ref: 2e5310131581
Ref: library/logging logging Handler addFilter10131763
Ref: 2e5410131763
Ref: library/logging logging Handler removeFilter10131864
Ref: 2e5510131864
Ref: library/logging logging Handler filter10131973
Ref: 2e5610131973
Ref: library/logging logging Handler flush10132373
Ref: 2e5710132373
Ref: library/logging logging Handler close10132542
Ref: 2e5810132542
Ref: library/logging logging Handler handle10132887
Ref: 2e5910132887
Ref: library/logging logging Handler handleError10133166
Ref: 2e5a10133166
Ref: library/logging logging Handler format10133969
Ref: 2e5c10133969
Ref: library/logging logging Handler emit10134138
Ref: 2e5b10134138
Node: Formatter Objects10135669
Ref: library/logging formatter-objects10135825
Ref: 2e5d10135825
Ref: library/logging id110135825
Ref: 2e5e10135825
Ref: library/logging logging Formatter10135880
Ref: 14df10135880
Ref: library/logging logging Formatter format10138068
Ref: 2e6110138068
Ref: library/logging logging Formatter formatTime10139546
Ref: 2e5f10139546
Ref: library/logging logging Formatter formatException10141943
Ref: 2e6210141943
Ref: library/logging logging Formatter formatStack10142282
Ref: 2e6310142282
Ref: library/logging logging BufferingFormatter10142575
Ref: 2e6410142575
Ref: library/logging logging BufferingFormatter formatHeader10142994
Ref: 2e6510142994
Ref: library/logging logging BufferingFormatter formatFooter10143309
Ref: 2e6610143309
Ref: library/logging logging BufferingFormatter format10143615
Ref: 2e6710143615
Node: Filter Objects10143947
Ref: library/logging filter10144105
Ref: 2e6810144105
Ref: library/logging filter-objects10144105
Ref: 2e6910144105
Ref: library/logging logging Filter10144619
Ref: 123b10144619
Ref: library/logging logging Filter filter10144911
Ref: 2e6a10144911
Node: LogRecord Objects10147320
Ref: library/logging log-record10147480
Ref: 2e6d10147480
Ref: library/logging logrecord-objects10147480
Ref: 2e6e10147480
Ref: library/logging logging LogRecord10147774
Ref: 101c10147774
Ref: library/logging logging LogRecord getMessage10150344
Ref: 2e7110150344
Node: Atributos LogRecord10151847
Ref: library/logging id210152014
Ref: 2e7410152014
Ref: library/logging logrecord-attributes10152014
Ref: 2e3e10152014
Node: LoggerAdapter Objects10160885
Ref: library/logging logger-adapter10161048
Ref: 2e7510161048
Ref: library/logging loggeradapter-objects10161048
Ref: 2e7610161048
Ref: library/logging logging LoggerAdapter10161329
Ref: 133910161329
Ref: library/logging logging LoggerAdapter process10161919
Ref: 2e7810161919
Ref: library/logging logging LoggerAdapter manager10162375
Ref: 2e7910162375
Ref: library/logging logging LoggerAdapter _log10162469
Ref: 2e7a10162469
Node: Thread Safety10163702
Ref: library/logging thread-safety10163876
Ref: 2e7b10163876
Node: Funções de nível de módulo10164535
Ref: library/logging module-level-functions10164711
Ref: 2e7c10164711
Ref: library/logging logging getLogger10164881
Ref: 96710164881
Ref: library/logging logging getLoggerClass10165612
Ref: 2e7d10165612
Ref: library/logging logging getLogRecordFactory10166090
Ref: 2e7210166090
Ref: library/logging logging debug10166558
Ref: 2e4010166558
Ref: library/logging logging info10167450
Ref: 2e6b10167450
Ref: library/logging logging warning10167659
Ref: 2ff10167659
Ref: library/logging logging error10168082
Ref: 2e7f10168082
Ref: library/logging logging critical10168293
Ref: 2e8010168293
Ref: library/logging logging exception10168510
Ref: 14dc10168510
Ref: library/logging logging log10168842
Ref: 2e8110168842
Ref: library/logging logging disable10169048
Ref: 2e8210169048
Ref: library/logging logging addLevelName10170265
Ref: 2e8310170265
Ref: library/logging logging getLevelNamesMapping10170932
Ref: 65910170932
Ref: library/logging logging getLevelName10171266
Ref: 2e8510171266
Ref: library/logging logging getHandlerByName10172906
Ref: 18ed10172906
Ref: library/logging logging getHandlerNames10173096
Ref: 17f010173096
Ref: library/logging logging makeLogRecord10173231
Ref: 2e6f10173231
Ref: library/logging logging basicConfig10173599
Ref: a0810173599
Ref: library/logging logging shutdown10179034
Ref: 2e8610179034
Ref: library/logging logging setLoggerClass10179476
Ref: 2e7e10179476
Ref: library/logging logging setLogRecordFactory10180092
Ref: 2e7310180092
Ref: Funções de nível de módulo-Footnote-110181435
Node: Module-Level Attributes10181500
Ref: library/logging module-level-attributes10181699
Ref: 2e8710181699
Ref: library/logging logging lastResort10181768
Ref: 123a10181768
Ref: library/logging logging raiseExceptions10182380
Ref: 123910182380
Node: Integration with the warnings module10182777
Ref: library/logging integration-with-the-warnings-module10182937
Ref: 2e8810182937
Ref: library/logging logging captureWarnings10183159
Ref: 2e8910183159
Ref: Integration with the warnings module-Footnote-110184560
Ref: Integration with the warnings module-Footnote-210184602
Node: logging config — Configuração do módulo logging10184655
Ref: library/logging config doc10184905
Ref: 2e8a10184905
Ref: library/logging config logging-config-logging-configuration10184905
Ref: 2e8b10184905
Ref: library/logging config module-logging config10184905
Ref: 8810184905
Ref: library/logging config translation-repo10184905
Ref: 2e8c10184905
Ref: logging config — Configuração do módulo logging-Footnote-110185645
Node: Funções de configuração10185719
Ref: library/logging config configuration-functions10185873
Ref: 2e8d10185873
Ref: library/logging config logging-config-api10185873
Ref: 133510185873
Ref: library/logging config logging config dictConfig10186332
Ref: 11ef10186332
Ref: library/logging config logging config fileConfig10188632
Ref: b6610188632
Ref: library/logging config logging config listen10191731
Ref: f9910191731
Ref: library/logging config logging-eval-security10193554
Ref: 2e9210193554
Ref: library/logging config logging config stopListening10195396
Ref: 2e9110195396
Node: Considerações de segurança10195659
Ref: library/logging config security-considerations10195862
Ref: 2e9310195862
Node: Esquema do Dicionário de Configuração10196688
Ref: library/logging config configuration-dictionary-schema10196900
Ref: 2e9510196900
Ref: library/logging config logging-config-dictschema10196900
Ref: 2e8e10196900
Node: Detalhes do Esquema de Dicionário10198025
Ref: library/logging config dictionary-schema-details10198171
Ref: 2e9710198171
Ref: library/logging config logging-config-dictschema-formatters10199105
Ref: 2e9810199105
Node: Configuração Incremental10204341
Ref: library/logging config incremental-configuration10204515
Ref: 2e9a10204515
Ref: library/logging config logging-config-dict-incremental10204515
Ref: 2e9910204515
Node: Conexões de objeto10206157
Ref: library/logging config logging-config-dict-connections10206328
Ref: 2e9610206328
Ref: library/logging config object-connections10206328
Ref: 2e9b10206328
Node: Objetos definidos pelo usuário10208868
Ref: library/logging config logging-config-dict-userdef10209053
Ref: 2e9410209053
Ref: library/logging config user-defined-objects10209053
Ref: 2e9c10209053
Node: Ordem de configuração de manipuladores10213949
Ref: library/logging config handler-config-dict-order10214140
Ref: 2e9d10214140
Ref: library/logging config handler-configuration-order10214140
Ref: 2e9e10214140
Node: Acesso a objetos externos10215635
Ref: library/logging config access-to-external-objects10215820
Ref: 2e9f10215820
Ref: library/logging config logging-config-dict-externalobj10215820
Ref: 2ea010215820
Node: Acesso a objetos internos10217210
Ref: library/logging config access-to-internal-objects10217413
Ref: 2ea110217413
Ref: library/logging config logging-config-dict-internalobj10217413
Ref: 2ea210217413
Node: Resolução de importações e importadores personalizados10220977
Ref: library/logging config import-resolution-and-custom-importers10221196
Ref: 2ea410221196
Ref: library/logging config logging-import-resolution10221196
Ref: 2ea510221196
Node: Configurando QueueHandler e QueueListener10222230
Ref: library/logging config configure-queue10222415
Ref: 16c510222415
Ref: library/logging config configuring-queuehandler-and-queuelistener10222415
Ref: 2ea610222415
Node: Formato do arquivo de configuração10225799
Ref: library/logging config configuration-file-format10225973
Ref: 2eab10225973
Ref: library/logging config logging-config-fileformat10225973
Ref: 2e8f10225973
Node: logging handlers — Manipuladores de logging10233598
Ref: library/logging handlers doc10233866
Ref: 2eac10233866
Ref: library/logging handlers logging-handlers-logging-handlers10233866
Ref: 2ead10233866
Ref: library/logging handlers module-logging handlers10233866
Ref: 8910233866
Ref: library/logging handlers translation-repo10233866
Ref: 2eae10233866
Ref: logging handlers — Manipuladores de logging-Footnote-110234993
Node: StreamHandler10235070
Ref: library/logging handlers stream-handler10235185
Ref: 2eaf10235185
Ref: library/logging handlers streamhandler10235185
Ref: 2eb010235185
Ref: library/logging handlers logging StreamHandler10235518
Ref: 123810235518
Ref: library/logging handlers logging StreamHandler emit10235773
Ref: 2eb110235773
Ref: library/logging handlers logging StreamHandler flush10236142
Ref: 2eb310236142
Ref: library/logging handlers logging StreamHandler setStream10236487
Ref: b6510236487
Ref: library/logging handlers logging StreamHandler terminator10236931
Ref: 2eb210236931
Node: FileHandler10237408
Ref: library/logging handlers file-handler10237543
Ref: 2eb410237543
Ref: library/logging handlers filehandler10237543
Ref: 2eb510237543
Ref: library/logging handlers logging FileHandler10237798
Ref: 19de10237798
Ref: library/logging handlers logging FileHandler close10238704
Ref: 2eb710238704
Ref: library/logging handlers logging FileHandler emit10238760
Ref: 2eb610238760
Ref: FileHandler-Footnote-110239098
Node: NullHandler10239163
Ref: library/logging handlers null-handler10239303
Ref: 2eb810239303
Ref: library/logging handlers nullhandler10239303
Ref: 2eb910239303
Ref: library/logging handlers logging NullHandler10239609
Ref: 12c610239609
Ref: library/logging handlers logging NullHandler emit10239711
Ref: 2eba10239711
Ref: library/logging handlers logging NullHandler handle10239783
Ref: 2ebb10239783
Ref: library/logging handlers logging NullHandler createLock10239857
Ref: 2ebc10239857
Node: WatchedFileHandler10240158
Ref: library/logging handlers watched-file-handler10240306
Ref: 2ebe10240306
Ref: library/logging handlers watchedfilehandler10240306
Ref: 2ebf10240306
Ref: library/logging handlers logging handlers WatchedFileHandler10241495
Ref: 2ec010241495
Ref: library/logging handlers logging handlers WatchedFileHandler reopenIfNeeded10242414
Ref: cd610242414
Ref: library/logging handlers logging handlers WatchedFileHandler emit10242740
Ref: 2ec110242740
Node: BaseRotatingHandler10242935
Ref: library/logging handlers base-rotating-handler10243091
Ref: 2ec210243091
Ref: library/logging handlers baserotatinghandler10243091
Ref: 2ec310243091
Ref: library/logging handlers logging handlers BaseRotatingHandler10243506
Ref: 2ec410243506
Ref: library/logging handlers logging handlers BaseRotatingHandler namer10243702
Ref: 2ec510243702
Ref: library/logging handlers logging handlers BaseRotatingHandler rotator10245585
Ref: 2ec810245585
Ref: library/logging handlers logging handlers BaseRotatingHandler rotation_filename10245891
Ref: 2ec610245891
Ref: library/logging handlers logging handlers BaseRotatingHandler rotate10246510
Ref: 2ec910246510
Node: RotatingFileHandler10247984
Ref: library/logging handlers rotating-file-handler10248146
Ref: 2ecb10248146
Ref: library/logging handlers rotatingfilehandler10248146
Ref: 2ecc10248146
Ref: library/logging handlers logging handlers RotatingFileHandler10248356
Ref: 16c210248356
Ref: library/logging handlers logging handlers RotatingFileHandler doRollover10250543
Ref: 2ece10250543
Ref: library/logging handlers logging handlers RotatingFileHandler emit10250635
Ref: 2ecd10250635
Ref: library/logging handlers logging handlers RotatingFileHandler shouldRollover10250772
Ref: 2ecf10250772
Node: TimedRotatingFileHandler10250926
Ref: library/logging handlers timed-rotating-file-handler10251082
Ref: 2ed010251082
Ref: library/logging handlers timedrotatingfilehandler10251082
Ref: 2ed110251082
Ref: library/logging handlers logging handlers TimedRotatingFileHandler10251342
Ref: f9510251342
Ref: library/logging handlers logging handlers TimedRotatingFileHandler doRollover10257162
Ref: 2ed310257162
Ref: library/logging handlers logging handlers TimedRotatingFileHandler emit10257254
Ref: 2ed210257254
Ref: library/logging handlers logging handlers TimedRotatingFileHandler getFilesToDelete10257403
Ref: 2ec710257403
Ref: library/logging handlers logging handlers TimedRotatingFileHandler shouldRollover10257676
Ref: 2ed410257676
Node: SocketHandler10257864
Ref: library/logging handlers socket-handler10258016
Ref: 2ed510258016
Ref: library/logging handlers sockethandler10258016
Ref: 2ed610258016
Ref: library/logging handlers logging handlers SocketHandler10258238
Ref: f9610258238
Ref: library/logging handlers logging handlers SocketHandler close10258680
Ref: 2ed710258680
Ref: library/logging handlers logging handlers SocketHandler emit10258736
Ref: 2ed810258736
Ref: library/logging handlers logging handlers SocketHandler handleError10259213
Ref: 2ed910259213
Ref: library/logging handlers logging handlers SocketHandler makeSocket10259455
Ref: 2eda10259455
Ref: library/logging handlers logging handlers SocketHandler makePickle10259704
Ref: 2edb10259704
Ref: library/logging handlers logging handlers SocketHandler send10260612
Ref: 2edc10260612
Ref: library/logging handlers logging handlers SocketHandler createSocket10260977
Ref: 65d10260977
Node: DatagramHandler10262311
Ref: library/logging handlers datagram-handler10262452
Ref: 2edd10262452
Ref: library/logging handlers datagramhandler10262452
Ref: 2ede10262452
Ref: library/logging handlers logging handlers DatagramHandler10262703
Ref: f9710262703
Ref: library/logging handlers logging handlers DatagramHandler emit10263705
Ref: 2edf10263705
Ref: library/logging handlers logging handlers DatagramHandler makeSocket10264101
Ref: 2ee010264101
Ref: library/logging handlers logging handlers DatagramHandler send10264297
Ref: 2ee110264297
Node: SysLogHandler10264560
Ref: library/logging handlers syslog-handler10264705
Ref: 2ee210264705
Ref: library/logging handlers sysloghandler10264705
Ref: 2ee310264705
Ref: library/logging handlers logging handlers SysLogHandler10264922
Ref: 65c10264922
Ref: library/logging handlers logging handlers SysLogHandler close10266994
Ref: 2ee410266994
Ref: library/logging handlers logging handlers SysLogHandler createSocket10267069
Ref: 65b10267069
Ref: library/logging handlers logging handlers SysLogHandler emit10267562
Ref: 2ee510267562
Ref: library/logging handlers logging handlers SysLogHandler encodePriority10269552
Ref: 2ee610269552
Ref: library/logging handlers logging handlers SysLogHandler mapPriority10273629
Ref: 2ee710273629
Ref: SysLogHandler-Footnote-110274120
Ref: SysLogHandler-Footnote-210274175
Ref: SysLogHandler-Footnote-310274240
Ref: SysLogHandler-Footnote-410274299
Node: NTEventLogHandler10274364
Ref: library/logging handlers nt-eventlog-handler10274505
Ref: 2ee810274505
Ref: library/logging handlers nteventloghandler10274505
Ref: 2ee910274505
Ref: library/logging handlers logging handlers NTEventLogHandler10274840
Ref: 2eea10274840
Ref: library/logging handlers logging handlers NTEventLogHandler close10275902
Ref: 2eeb10275902
Ref: library/logging handlers logging handlers NTEventLogHandler emit10276305
Ref: 2eec10276305
Ref: library/logging handlers logging handlers NTEventLogHandler getEventCategory10276464
Ref: 2eed10276464
Ref: library/logging handlers logging handlers NTEventLogHandler getEventType10276667
Ref: 2eee10276667
Ref: library/logging handlers logging handlers NTEventLogHandler getMessageID10277255
Ref: 2eef10277255
Node: SMTPHandler10277686
Ref: library/logging handlers smtp-handler10277827
Ref: 2ef010277827
Ref: library/logging handlers smtphandler10277827
Ref: 2ef110277827
Ref: library/logging handlers logging handlers SMTPHandler10278024
Ref: 164e10278024
Ref: library/logging handlers logging handlers SMTPHandler emit10279281
Ref: 2ef210279281
Ref: library/logging handlers logging handlers SMTPHandler getSubject10279386
Ref: 2ef310279386
Node: MemoryHandler10279533
Ref: library/logging handlers memory-handler10279668
Ref: 2ef410279668
Ref: library/logging handlers memoryhandler10279668
Ref: 2ef510279668
Ref: library/logging handlers logging handlers BufferingHandler10280371
Ref: 2ef610280371
Ref: library/logging handlers logging handlers BufferingHandler emit10280568
Ref: 2ef710280568
Ref: library/logging handlers logging handlers BufferingHandler flush10280759
Ref: 2ef910280759
Ref: library/logging handlers logging handlers BufferingHandler shouldFlush10280997
Ref: 2ef810280997
Ref: library/logging handlers logging handlers MemoryHandler10281181
Ref: 2ea310281181
Ref: library/logging handlers logging handlers MemoryHandler close10281998
Ref: 2efb10281998
Ref: library/logging handlers logging handlers MemoryHandler flush10282127
Ref: 2efc10282127
Ref: library/logging handlers logging handlers MemoryHandler setTarget10282435
Ref: 2efa10282435
Ref: library/logging handlers logging handlers MemoryHandler shouldFlush10282526
Ref: 2efd10282526
Node: HTTPHandler10282653
Ref: library/logging handlers http-handler10282789
Ref: 2efe10282789
Ref: library/logging handlers httphandler10282789
Ref: 2eff10282789
Ref: library/logging handlers logging handlers HTTPHandler10283020
Ref: e5810283020
Ref: library/logging handlers logging handlers HTTPHandler mapLogRecord10283982
Ref: 2f0010283982
Ref: library/logging handlers logging handlers HTTPHandler emit10284440
Ref: 2f0110284440
Node: QueueHandler10285175
Ref: library/logging handlers queue-handler10285311
Ref: 2f0210285311
Ref: library/logging handlers queuehandler10285311
Ref: 2f0310285311
Ref: library/logging handlers logging handlers QueueHandler10286057
Ref: 18ec10286057
Ref: library/logging handlers logging handlers QueueHandler emit10287197
Ref: 2f0610287197
Ref: library/logging handlers logging handlers QueueHandler prepare10287701
Ref: 2f0710287701
Ref: library/logging handlers logging handlers QueueHandler enqueue10289641
Ref: 2f0410289641
Ref: library/logging handlers logging handlers QueueHandler listener10289888
Ref: 2ea710289888
Node: QueueListener10290187
Ref: library/logging handlers queue-listener10290303
Ref: 2f0810290303
Ref: library/logging handlers queuelistener10290303
Ref: 2f0910290303
Ref: library/logging handlers logging handlers QueueListener10291330
Ref: e5910291330
Ref: library/logging handlers logging handlers QueueListener dequeue10292563
Ref: 2f0a10292563
Ref: library/logging handlers logging handlers QueueListener prepare10292845
Ref: 2f0b10292845
Ref: library/logging handlers logging handlers QueueListener handle10293163
Ref: 2f0c10293163
Ref: library/logging handlers logging handlers QueueListener start10293426
Ref: 162c10293426
Ref: library/logging handlers logging handlers QueueListener stop10293718
Ref: 2f0d10293718
Ref: library/logging handlers logging handlers QueueListener enqueue_sentinel10294030
Ref: 2f0e10294030
Node: platform — Acesso aos dados de identificação da plataforma subjacente10294554
Ref: library/platform doc10294814
Ref: 2f0f10294814
Ref: library/platform module-platform10294814
Ref: aa10294814
Ref: library/platform platform-access-to-underlying-platform-s-identifying-data10294814
Ref: 2f1010294814
Ref: library/platform translation-repo10294814
Ref: 2f1110294814
Ref: platform — Acesso aos dados de identificação da plataforma subjacente-Footnote-110295466
Node: Multiplataforma10295534
Ref: library/platform cross-platform10295683
Ref: 2f1210295683
Ref: library/platform platform architecture10295734
Ref: 178110295734
Ref: library/platform platform machine10297226
Ref: 2f1310297226
Ref: library/platform platform node10297524
Ref: 2f1410297524
Ref: library/platform platform platform10297720
Ref: 184e10297720
Ref: library/platform platform processor10298727
Ref: 2f1610298727
Ref: library/platform platform python_build10299077
Ref: 2f1710299077
Ref: library/platform platform python_compiler10299243
Ref: 2f1810299243
Ref: library/platform platform python_branch10299371
Ref: 2f1910299371
Ref: library/platform platform python_implementation10299499
Ref: 2f1a10299499
Ref: library/platform platform python_revision10299725
Ref: 2f1b10299725
Ref: library/platform platform python_version10299858
Ref: 2f1c10299858
Ref: library/platform platform python_version_tuple10300115
Ref: 2f1d10300115
Ref: library/platform platform release10300403
Ref: 2f1e10300403
Ref: library/platform platform system10300591
Ref: 1fe910300591
Ref: library/platform platform system_alias10301051
Ref: 2f1510301051
Ref: library/platform platform version10301366
Ref: 2f1f10301366
Ref: library/platform platform uname10301725
Ref: 1baa10301725
Node: Plataforma Java10302530
Ref: library/platform java-platform10302706
Ref: 2f2010302706
Ref: library/platform platform java_ver10302757
Ref: 2a710302757
Node: Plataforma Windows10303448
Ref: library/platform windows-platform10303625
Ref: 2f2110303625
Ref: library/platform platform win32_ver10303682
Ref: 1ad710303682
Ref: library/platform platform win32_edition10304697
Ref: 2f2210304697
Ref: library/platform platform win32_is_iot10305048
Ref: 2f2310305048
Node: Plataforma macOS10305258
Ref: library/platform macos-platform10305434
Ref: 2f2410305434
Ref: library/platform platform mac_ver10305487
Ref: 1bac10305487
Node: Plataforma iOS10305907
Ref: library/platform ios-platform10306081
Ref: 2f2510306081
Ref: library/platform platform ios_ver10306130
Ref: 1fe810306130
Node: Plataformas Unix10307022
Ref: library/platform unix-platforms10307197
Ref: 2f2610307197
Ref: library/platform platform libc_ver10307250
Ref: 1ba910307250
Node: Plataformas Linux10307919
Ref: library/platform linux-platforms10308098
Ref: 2f2710308098
Ref: library/platform platform freedesktop_os_release10308153
Ref: 82910308153
Ref: Plataformas Linux-Footnote-110309722
Node: Plataforma Android10309795
Ref: library/platform android-platform10309984
Ref: 2f2810309984
Ref: library/platform platform android_ver10310041
Ref: 173d10310041
Ref: Plataforma Android-Footnote-110311338
Ref: Plataforma Android-Footnote-210311417
Ref: Plataforma Android-Footnote-310311488
Ref: Plataforma Android-Footnote-410311560
Node: Uso na linha de comando<3>10311634
Ref: library/platform command-line-usage10311797
Ref: 2f2910311797
Ref: library/platform platform-cli10311797
Ref: 2f2a10311797
Ref: library/platform cmdoption-platform-terse10312085
Ref: 2f2b10312085
Ref: library/platform cmdoption-platform-nonaliased10312278
Ref: 2f2c10312278
Node: errno — Símbolos padrão do sistema errno10312713
Ref: library/errno doc10312987
Ref: 2f2d10312987
Ref: library/errno errno-standard-errno-system-symbols10312987
Ref: 2f2e10312987
Ref: library/errno module-errno10312987
Ref: 5710312987
Ref: library/errno translation-repo10312987
Ref: 2f2f10312987
Ref: library/errno errno errorcode10313398
Ref: 2f3010313398
Ref: library/errno errno EPERM10313959
Ref: 18e110313959
Ref: library/errno errno ENOENT10314087
Ref: 244110314087
Ref: library/errno errno ESRCH10314226
Ref: 244510314226
Ref: library/errno errno EINTR10314353
Ref: daf10314353
Ref: library/errno errno EIO10314488
Ref: 2f3110314488
Ref: library/errno errno ENXIO10314527
Ref: 2f3210314527
Ref: library/errno errno E2BIG10314593
Ref: 2f3310314593
Ref: library/errno errno ENOEXEC10314654
Ref: 2f3410314654
Ref: library/errno errno EBADF10314706
Ref: 96210314706
Ref: library/errno errno ECHILD10314766
Ref: 243a10314766
Ref: library/errno errno EAGAIN10314898
Ref: 243510314898
Ref: library/errno errno ENOMEM10315018
Ref: 2f3510315018
Ref: library/errno errno EACCES10315070
Ref: 244410315070
Ref: library/errno errno EFAULT10315191
Ref: 2f3610315191
Ref: library/errno errno ENOTBLK10315241
Ref: 2f3710315241
Ref: library/errno errno EBUSY10315303
Ref: 2f3810315303
Ref: library/errno errno EEXIST10315363
Ref: 244010315363
Ref: library/errno errno EXDEV10315482
Ref: 2d1b10315482
Ref: library/errno errno ENODEV10315545
Ref: 2f3910315545
Ref: library/errno errno ENOTDIR10315599
Ref: 244310315599
Ref: library/errno errno EISDIR10315729
Ref: 244210315729
Ref: library/errno errno EINVAL10315852
Ref: 1b6610315852
Ref: library/errno errno ENFILE10315902
Ref: 2f3a10315902
Ref: library/errno errno EMFILE10315962
Ref: 2f3b10315962
Ref: library/errno errno ENOTTY10316016
Ref: 2f3c10316016
Ref: library/errno errno ETXTBSY10316063
Ref: 2f3d10316063
Ref: library/errno errno EFBIG10316116
Ref: 2f3e10316116
Ref: library/errno errno ENOSPC10316166
Ref: 2f3f10316166
Ref: library/errno errno ESPIPE10316240
Ref: 2f4010316240
Ref: library/errno errno EROFS10316285
Ref: 2f4110316285
Ref: library/errno errno EMLINK10316353
Ref: 2f4210316353
Ref: library/errno errno EPIPE10316396
Ref: 243b10316396
Ref: library/errno errno EDOM10316513
Ref: 2f4310316513
Ref: library/errno errno ERANGE10316592
Ref: 2f4410316592
Ref: library/errno errno EDEADLK10316664
Ref: 2f4510316664
Ref: library/errno errno ENAMETOOLONG10316739
Ref: 2f4610316739
Ref: library/errno errno ENOLCK10316803
Ref: 2f4710316803
Ref: library/errno errno ENOSYS10316871
Ref: 18e210316871
Ref: library/errno errno ENOTEMPTY10316928
Ref: 2f4810316928
Ref: library/errno errno ELOOP10316983
Ref: 2f4910316983
Ref: library/errno errno EWOULDBLOCK10317055
Ref: 243710317055
Ref: library/errno errno ENOMSG10317192
Ref: 2f4a10317192
Ref: library/errno errno EIDRM10317256
Ref: 2f4b10317256
Ref: library/errno errno ECHRNG10317308
Ref: 2f4c10317308
Ref: library/errno errno EL2NSYNC10317373
Ref: 2f4d10317373
Ref: library/errno errno EL3HLT10317432
Ref: 2f4e10317432
Ref: library/errno errno EL3RST10317489
Ref: 2f4f10317489
Ref: library/errno errno ELNRNG10317546
Ref: 2f5010317546
Ref: library/errno errno EUNATCH10317606
Ref: 2f5110317606
Ref: library/errno errno ENOCSI10317670
Ref: 2f5210317670
Ref: library/errno errno EL2HLT10317735
Ref: 2f5310317735
Ref: library/errno errno EBADE10317792
Ref: 2f5410317792
Ref: library/errno errno EBADR10317837
Ref: 2f5510317837
Ref: library/errno errno EXFULL10317902
Ref: 2f5610317902
Ref: library/errno errno ENOANO10317947
Ref: 2f5710317947
Ref: library/errno errno EBADRQC10317987
Ref: 2f5810317987
Ref: library/errno errno EBADSLT10318052
Ref: 2f5910318052
Ref: library/errno errno EDEADLOCK10318098
Ref: 2f5a10318098
Ref: library/errno errno EBFONT10318172
Ref: 2f5b10318172
Ref: library/errno errno ENOSTR10318240
Ref: 2f5c10318240
Ref: library/errno errno ENODATA10318300
Ref: 2f5d10318300
Ref: library/errno errno ETIME10318359
Ref: 2f5e10318359
Ref: library/errno errno ENOSR10318410
Ref: 2f5f10318410
Ref: library/errno errno ENONET10318463
Ref: 2f6010318463
Ref: library/errno errno ENOPKG10318523
Ref: 2f6110318523
Ref: library/errno errno EREMOTE10318575
Ref: 2f6210318575
Ref: library/errno errno ENOLINK10318625
Ref: 2f6310318625
Ref: library/errno errno EADV10318679
Ref: 2f6410318679
Ref: library/errno errno ESRMNT10318724
Ref: 2f6510318724
Ref: library/errno errno ECOMM10318767
Ref: 2f6610318767
Ref: library/errno errno EPROTO10318828
Ref: 2f6710318828
Ref: library/errno errno EMULTIHOP10318876
Ref: 2f6810318876
Ref: library/errno errno EDOTDOT10318938
Ref: 2f6910318938
Ref: library/errno errno EBADMSG10318993
Ref: 2f6a10318993
Ref: library/errno errno EOVERFLOW10319054
Ref: 2f6b10319054
Ref: library/errno errno ENOTUNIQ10319136
Ref: 2f6c10319136
Ref: library/errno errno EBADFD10319198
Ref: 2f6d10319198
Ref: library/errno errno EREMCHG10319263
Ref: 2f6e10319263
Ref: library/errno errno ELIBACC10319317
Ref: 2f6f10319317
Ref: library/errno errno ELIBBAD10319415
Ref: 2f7010319415
Ref: library/errno errno ELIBSCN10319496
Ref: 2f7110319496
Ref: library/errno errno ELIBMAX10319560
Ref: 2f7210319560
Ref: library/errno errno ELIBEXEC10319643
Ref: 2f7310319643
Ref: library/errno errno EILSEQ10319743
Ref: 2f7410319743
Ref: library/errno errno ERESTART10319800
Ref: 2f7510319800
Ref: library/errno errno ESTRPIPE10319884
Ref: 2f7610319884
Ref: library/errno errno EUSERS10319939
Ref: 2f7710319939
Ref: library/errno errno ENOTSOCK10319986
Ref: 2f7810319986
Ref: library/errno errno EDESTADDRREQ10320062
Ref: 2f7910320062
Ref: library/errno errno EMSGSIZE10320131
Ref: 2f7a10320131
Ref: library/errno errno EPROTOTYPE10320184
Ref: 2f7b10320184
Ref: library/errno errno ENOPROTOOPT10320255
Ref: 2f7c10320255
Ref: library/errno errno EPROTONOSUPPORT10320317
Ref: 2f7d10320317
Ref: library/errno errno ESOCKTNOSUPPORT10320378
Ref: 2f7e10320378
Ref: library/errno errno EOPNOTSUPP10320441
Ref: 2f7f10320441
Ref: library/errno errno ENOTSUP10320527
Ref: 2f8010320527
Ref: library/errno errno EPFNOSUPPORT10320614
Ref: 2f8110320614
Ref: library/errno errno EAFNOSUPPORT10320684
Ref: 2f8210320684
Ref: library/errno errno EADDRINUSE10320770
Ref: 2f8310320770
Ref: library/errno errno EADDRNOTAVAIL10320825
Ref: 2f8410320825
Ref: library/errno errno ENETDOWN10320912
Ref: 2f8510320912
Ref: library/errno errno ENETUNREACH10320965
Ref: 1b7e10320965
Ref: library/errno errno ENETRESET10321029
Ref: 2f8610321029
Ref: library/errno errno ECONNABORTED10321097
Ref: 243d10321097
Ref: library/errno errno ECONNRESET10321260
Ref: 243f10321260
Ref: library/errno errno ENOBUFS10321407
Ref: 18fc10321407
Ref: library/errno errno EISCONN10321477
Ref: 2f8710321477
Ref: library/errno errno ENOTCONN10321556
Ref: 2f8810321556
Ref: library/errno errno ESHUTDOWN10321637
Ref: 243c10321637
Ref: library/errno errno ETOOMANYREFS10321790
Ref: 2f8910321790
Ref: library/errno errno ETIMEDOUT10321861
Ref: 244610321861
Ref: library/errno errno ECONNREFUSED10321985
Ref: 243e10321985
Ref: library/errno errno EHOSTDOWN10322121
Ref: 2f8a10322121
Ref: library/errno errno EHOSTUNREACH10322167
Ref: 2f8b10322167
Ref: library/errno errno EALREADY10322220
Ref: 243610322220
Ref: library/errno errno EINPROGRESS10322356
Ref: 243810322356
Ref: library/errno errno ESTALE10322491
Ref: 2f8c10322491
Ref: library/errno errno EUCLEAN10322543
Ref: 2f8d10322543
Ref: library/errno errno ENOTNAM10322599
Ref: 2f8e10322599
Ref: library/errno errno ENAVAIL10322658
Ref: 2f8f10322658
Ref: library/errno errno EISNAM10322719
Ref: 2f9010322719
Ref: library/errno errno EREMOTEIO10322779
Ref: 2f9110322779
Ref: library/errno errno EDQUOT10322831
Ref: 2f9210322831
Ref: library/errno errno EQFULL10322876
Ref: 2f9310322876
Ref: library/errno errno ENOMEDIUM10322971
Ref: 2f9410322971
Ref: library/errno errno EMEDIUMTYPE10323020
Ref: 2f9510323020
Ref: library/errno errno ENOKEY10323073
Ref: 2f9610323073
Ref: library/errno errno EKEYEXPIRED10323130
Ref: 2f9710323130
Ref: library/errno errno EKEYREVOKED10323181
Ref: 2f9810323181
Ref: library/errno errno EKEYREJECTED10323237
Ref: 2f9910323237
Ref: library/errno errno ERFKILL10323301
Ref: 2f9a10323301
Ref: library/errno errno ELOCKUNMAPPED10323370
Ref: 2f9b10323370
Ref: library/errno errno ENOTACTIVE10323432
Ref: 2f9c10323432
Ref: library/errno errno EAUTH10323489
Ref: 2f9d10323489
Ref: library/errno errno EBADARCH10323572
Ref: 2f9e10323572
Ref: library/errno errno EBADEXEC10323664
Ref: 2f9f10323664
Ref: library/errno errno EBADMACHO10323764
Ref: 2fa010323764
Ref: library/errno errno EDEVERR10323852
Ref: 2fa110323852
Ref: library/errno errno EFTYPE10323929
Ref: 2fa210323929
Ref: library/errno errno ENEEDAUTH10324026
Ref: 2fa310324026
Ref: library/errno errno ENOATTR10324111
Ref: 2fa410324111
Ref: library/errno errno ENOPOLICY10324195
Ref: 2fa510324195
Ref: library/errno errno EPROCLIM10324278
Ref: 2fa610324278
Ref: library/errno errno EPROCUNAVAIL10324362
Ref: 2fa710324362
Ref: library/errno errno EPROGMISMATCH10324457
Ref: 2fa810324457
Ref: library/errno errno EPROGUNAVAIL10324549
Ref: 2fa910324549
Ref: library/errno errno EPWROFF10324639
Ref: 2faa10324639
Ref: library/errno errno EBADRPC10324723
Ref: 2fab10324723
Ref: library/errno errno ERPCMISMATCH10324805
Ref: 2fac10324805
Ref: library/errno errno ESHLIBVERS10324892
Ref: 2fad10324892
Ref: library/errno errno ENOTCAPABLE10324991
Ref: 18c810324991
Ref: library/errno errno ECANCELED10325211
Ref: 15f710325211
Ref: library/errno errno EOWNERDEAD10325296
Ref: 2fae10325296
Ref: library/errno errno ENOTRECOVERABLE10325374
Ref: 2faf10325374
Node: ctypes — Uma biblioteca de funções externas para Python10325468
Ref: library/ctypes doc10325660
Ref: 2fb010325660
Ref: library/ctypes ctypes-a-foreign-function-library-for-python10325660
Ref: 2fb110325660
Ref: library/ctypes module-ctypes10325660
Ref: 2a10325660
Ref: library/ctypes translation-repo10325660
Ref: 2fb210325660
Ref: ctypes — Uma biblioteca de funções externas para Python-Footnote-110326244
Node: Tutorial ctypes10326307
Ref: library/ctypes ctypes-ctypes-tutorial10326445
Ref: 2fb310326445
Ref: library/ctypes ctypes-tutorial10326445
Ref: 2fb410326445
Node: Carregando bibliotecas de links dinâmicos10328025
Ref: library/ctypes ctypes-loading-dynamic-link-libraries10328166
Ref: 2fb710328166
Ref: library/ctypes loading-dynamic-link-libraries10328166
Ref: 2fb810328166
Node: Acessando funções de dlls carregadas10330390
Ref: library/ctypes accessing-functions-from-loaded-dlls10330558
Ref: 2fba10330558
Ref: library/ctypes ctypes-accessing-functions-from-loaded-dlls10330558
Ref: 2fbb10330558
Node: Chamando funções10332840
Ref: library/ctypes calling-functions10332993
Ref: 2fbc10332993
Ref: library/ctypes ctypes-calling-functions10332993
Ref: 2fbd10332993
Node: Tipos de dados fundamentais10335659
Ref: library/ctypes ctypes-fundamental-data-types10335806
Ref: 2fbe10335806
Ref: library/ctypes fundamental-data-types10335806
Ref: 2fbf10335806
Node: Chamando funções continuação10345955
Ref: library/ctypes calling-functions-continued10346111
Ref: 2fd410346111
Ref: library/ctypes ctypes-calling-functions-continued10346111
Ref: 2fd510346111
Node: Chamando funções variadas10347226
Ref: library/ctypes calling-variadic-functions10347422
Ref: 2fd610347422
Ref: library/ctypes ctypes-calling-variadic-functions10347422
Ref: 2fd710347422
Node: Chamando funções com seus próprios tipos de dados personalizados10348163
Ref: library/ctypes calling-functions-with-your-own-custom-data-types10348400
Ref: 2fd810348400
Ref: library/ctypes ctypes-calling-functions-with-own-custom-data-types10348400
Ref: 2fd910348400
Node: Especificando os tipos de argumentos necessários protótipos de função10349414
Ref: library/ctypes ctypes-specifying-required-argument-types10349640
Ref: 2fda10349640
Ref: library/ctypes specifying-the-required-argument-types-function-prototypes10349640
Ref: 2fdb10349640
Node: Tipos de Retorno10351674
Ref: library/ctypes ctypes-return-types10351891
Ref: 2fdd10351891
Ref: library/ctypes return-types10351891
Ref: 2fde10351891
Node: Passando ponteiros ou passando parâmetros por referência10355155
Ref: library/ctypes ctypes-passing-pointers10355319
Ref: 2fe210355319
Ref: library/ctypes passing-pointers-or-passing-parameters-by-reference10355319
Ref: 2fe310355319
Node: Estruturas e uniões10356492
Ref: library/ctypes ctypes-structures-unions10356680
Ref: 2fe510356680
Ref: library/ctypes structures-and-unions10356680
Ref: 2fe610356680
Ref: library/ctypes ctypes-structureunion-alignment-byte-order10358820
Ref: 2fe810358820
Node: Structure/union alignment and byte order10359153
Ref: library/ctypes structure-union-alignment-and-byte-order10359320
Ref: 2fe910359320
Node: Campos de bit em estruturas e uniões10360367
Ref: library/ctypes bit-fields-in-structures-and-unions10360521
Ref: 2fed10360521
Ref: library/ctypes ctypes-bit-fields-in-structures-unions10360521
Ref: 2fee10360521
Node: Vetores10361129
Ref: library/ctypes arrays10361252
Ref: 2fef10361252
Ref: library/ctypes ctypes-arrays10361252
Ref: 2ff010361252
Node: Ponteiros10362572
Ref: library/ctypes ctypes-pointers10362677
Ref: 2ff110362677
Ref: library/ctypes pointers10362677
Ref: 2ff210362677
Node: Conversão de Tipos10365421
Ref: library/ctypes ctypes-type-conversions10365536
Ref: 2ff410365536
Ref: library/ctypes type-conversions10365536
Ref: 2ff510365536
Node: Tipos Incompletos10368301
Ref: library/ctypes ctypes-incomplete-types10368426
Ref: 2ff710368426
Ref: library/ctypes incomplete-types10368426
Ref: 2ff810368426
Node: Funções Callbacks10370106
Ref: library/ctypes callback-functions10370248
Ref: 2ff910370248
Ref: library/ctypes ctypes-callback-functions10370248
Ref: 2ffa10370248
Node: Acessando valores exportados de dlls10374527
Ref: library/ctypes accessing-values-exported-from-dlls10374661
Ref: 2ffd10374661
Ref: library/ctypes ctypes-accessing-values-exported-from-dlls10374661
Ref: 2ffe10374661
Node: Surpresas10377481
Ref: library/ctypes ctypes-surprises10377631
Ref: 300110377631
Ref: library/ctypes surprises10377631
Ref: 300210377631
Node: Tipos de dados de tamanho variável10379917
Ref: library/ctypes ctypes-variable-sized-data-types10380022
Ref: 300310380022
Ref: library/ctypes variable-sized-data-types10380022
Ref: 300410380022
Node: Referência ctypes10381501
Ref: library/ctypes ctypes-ctypes-reference10381639
Ref: 300610381639
Ref: library/ctypes ctypes-reference10381639
Ref: 300710381639
Node: Encontrando bibliotecas compartilhadas10381986
Ref: library/ctypes ctypes-finding-shared-libraries10382112
Ref: 300810382112
Ref: library/ctypes finding-shared-libraries10382112
Ref: 300910382112
Node: Loading shared libraries10385005
Ref: library/ctypes ctypes-loading-shared-libraries10385157
Ref: 300a10385157
Ref: library/ctypes loading-shared-libraries10385157
Ref: 300b10385157
Ref: library/ctypes ctypes CDLL10385358
Ref: 9f110385358
Ref: library/ctypes ctypes OleDLL10386498
Ref: 186a10386498
Ref: library/ctypes ctypes WinDLL10387436
Ref: 186b10387436
Ref: library/ctypes ctypes PyDLL10388066
Ref: 186c10388066
Ref: library/ctypes ctypes PyDLL _handle10392081
Ref: 301110392081
Ref: library/ctypes ctypes PyDLL _name10392162
Ref: 301210392162
Ref: library/ctypes ctypes LibraryLoader10392510
Ref: 301310392510
Ref: library/ctypes ctypes LibraryLoader LoadLibrary10392969
Ref: 2fb910392969
Ref: Loading shared libraries-Footnote-110394630
Ref: Loading shared libraries-Footnote-210394696
Node: Foreign functions10394742
Ref: library/ctypes ctypes-foreign-functions10394875
Ref: 301410394875
Ref: library/ctypes foreign-functions10394875
Ref: 301510394875
Ref: library/ctypes ctypes _CFuncPtr10395571
Ref: 301610395571
Ref: library/ctypes ctypes _CFuncPtr restype10395874
Ref: 2fdf10395874
Ref: library/ctypes ctypes _CFuncPtr argtypes10396550
Ref: 15f610396550
Ref: library/ctypes ctypes _CFuncPtr errcheck10397812
Ref: 2fe110397812
Ref: library/ctypes ctypes ArgumentError10398797
Ref: 301710398797
Node: Function prototypes10399437
Ref: library/ctypes ctypes-function-prototypes10399568
Ref: 301810399568
Ref: library/ctypes function-prototypes10399568
Ref: 301910399568
Ref: library/ctypes ctypes CFUNCTYPE10400150
Ref: 2ffb10400150
Ref: library/ctypes ctypes WINFUNCTYPE10400661
Ref: 2ffc10400661
Ref: library/ctypes ctypes PYFUNCTYPE10401045
Ref: 301a10401045
Node: Funções utilitárias10406513
Ref: library/ctypes ctypes-utility-functions10406637
Ref: 301b10406637
Ref: library/ctypes utility-functions10406637
Ref: 301c10406637
Ref: library/ctypes ctypes addressof10406701
Ref: 301d10406701
Ref: library/ctypes ctypes alignment10406953
Ref: 301e10406953
Ref: library/ctypes ctypes byref10407113
Ref: 2fe410407113
Ref: library/ctypes ctypes cast10407627
Ref: 2ff610407627
Ref: library/ctypes ctypes create_string_buffer10407921
Ref: 2fd310407921
Ref: library/ctypes ctypes create_unicode_buffer10409425
Ref: 1b4610409425
Ref: library/ctypes ctypes DllCanUnloadNow10409965
Ref: 301f10409965
Ref: library/ctypes ctypes DllGetClassObject10410240
Ref: 302010410240
Ref: library/ctypes ctypes util find_library10410525
Ref: d6c10410525
Ref: library/ctypes ctypes util find_msvcrt10411012
Ref: 302110411012
Ref: library/ctypes ctypes FormatError10411499
Ref: 302210411499
Ref: library/ctypes ctypes GetLastError10411768
Ref: 2fe010411768
Ref: library/ctypes ctypes get_errno10412066
Ref: 300d10412066
Ref: library/ctypes ctypes get_last_error10412322
Ref: 300f10412322
Ref: library/ctypes ctypes memmove10412631
Ref: 302310412631
Ref: library/ctypes ctypes memset10412875
Ref: 302410412875
Ref: library/ctypes ctypes POINTER10413128
Ref: 17d810413128
Ref: library/ctypes ctypes pointer10413355
Ref: 17d710413355
Ref: library/ctypes ctypes resize10413664
Ref: 300510413664
Ref: library/ctypes ctypes set_errno10414002
Ref: 300e10414002
Ref: library/ctypes ctypes set_last_error10414318
Ref: 301010414318
Ref: library/ctypes ctypes sizeof10414688
Ref: 302510414688
Ref: library/ctypes ctypes string_at10414859
Ref: 302610414859
Ref: library/ctypes ctypes WinError10415180
Ref: 302710415180
Ref: library/ctypes ctypes wstring_at10415749
Ref: 302810415749
Node: Data types10416116
Ref: library/ctypes ctypes-data-types10416251
Ref: 302910416251
Ref: library/ctypes data-types10416251
Ref: 302a10416251
Ref: library/ctypes ctypes _CData10416294
Ref: 302b10416294
Ref: library/ctypes ctypes _CData from_buffer10416930
Ref: 302d10416930
Ref: library/ctypes ctypes _CData from_buffer_copy10417537
Ref: 302e10417537
Ref: library/ctypes ctypes _CData from_address10418102
Ref: 302f10418102
Ref: library/ctypes ctypes _CData from_param10418462
Ref: 2fdc10418462
Ref: library/ctypes ctypes _CData in_dll10419024
Ref: 2fff10419024
Ref: library/ctypes ctypes _CData _b_base_10419321
Ref: 303010419321
Ref: library/ctypes ctypes _CData _b_needsfree_10419625
Ref: 303110419625
Ref: library/ctypes ctypes _CData _objects10419798
Ref: 302c10419798
Node: Tipos de dados fundamentais<2>10420109
Ref: library/ctypes ctypes-fundamental-data-types-210420249
Ref: 303210420249
Ref: library/ctypes id110420249
Ref: 303310420249
Ref: library/ctypes ctypes _SimpleCData10420326
Ref: 303410420326
Ref: library/ctypes ctypes _SimpleCData value10420800
Ref: 303510420800
Ref: library/ctypes ctypes c_byte10422161
Ref: 186810422161
Ref: library/ctypes ctypes c_char10422374
Ref: 2fc110422374
Ref: library/ctypes ctypes c_char_p10422615
Ref: 17d910422615
Ref: library/ctypes ctypes c_double10422910
Ref: 1a4410422910
Ref: library/ctypes ctypes c_longdouble10423040
Ref: 1a4510423040
Ref: library/ctypes ctypes c_float10423288
Ref: 2fd210423288
Ref: library/ctypes ctypes c_int10423416
Ref: 2fb510423416
Ref: library/ctypes ctypes c_int810423681
Ref: 2fc510423681
Ref: library/ctypes ctypes c_int1610423803
Ref: 2fc610423803
Ref: library/ctypes ctypes c_int3210423930
Ref: 2fc710423930
Ref: library/ctypes ctypes c_int6410424055
Ref: 2fc810424055
Ref: library/ctypes ctypes c_long10424185
Ref: 2fb610424185
Ref: library/ctypes ctypes c_longlong10424350
Ref: 2fcf10424350
Ref: library/ctypes ctypes c_short10424529
Ref: 2fc310424529
Ref: library/ctypes ctypes c_size_t10424696
Ref: 2fd110424696
Ref: library/ctypes ctypes c_ssize_t10424771
Ref: 127d10424771
Ref: library/ctypes ctypes c_time_t10424881
Ref: 18ee10424881
Ref: library/ctypes ctypes c_ubyte10424990
Ref: 186910424990
Ref: library/ctypes ctypes c_uint10425205
Ref: 2fc910425205
Ref: library/ctypes ctypes c_uint810425475
Ref: 2fca10425475
Ref: library/ctypes ctypes c_uint1610425601
Ref: 2fcb10425601
Ref: library/ctypes ctypes c_uint3210425732
Ref: 2fcc10425732
Ref: library/ctypes ctypes c_uint6410425861
Ref: 2fcd10425861
Ref: library/ctypes ctypes c_ulong10425995
Ref: 2fce10425995
Ref: library/ctypes ctypes c_ulonglong10426163
Ref: 2fd010426163
Ref: library/ctypes ctypes c_ushort10426345
Ref: 2fc410426345
Ref: library/ctypes ctypes c_void_p10426515
Ref: 17db10426515
Ref: library/ctypes ctypes c_wchar10426679
Ref: 2fc210426679
Ref: library/ctypes ctypes c_wchar_p10426945
Ref: 17da10426945
Ref: library/ctypes ctypes c_bool10427153
Ref: 2fc010427153
Ref: library/ctypes ctypes HRESULT10427368
Ref: 300c10427368
Ref: library/ctypes ctypes py_object10427560
Ref: 147f10427560
Node: Tipos de dados estruturados10427950
Ref: library/ctypes ctypes-structured-data-types10428099
Ref: 303610428099
Ref: library/ctypes structured-data-types10428099
Ref: 303710428099
Ref: library/ctypes ctypes Union10428176
Ref: 177710428176
Ref: library/ctypes ctypes BigEndianUnion10428282
Ref: 194110428282
Ref: library/ctypes ctypes LittleEndianUnion10428430
Ref: 194210428430
Ref: library/ctypes ctypes BigEndianStructure10428584
Ref: 2feb10428584
Ref: library/ctypes ctypes LittleEndianStructure10428706
Ref: 2fec10428706
Ref: library/ctypes ctypes Structure10428976
Ref: 1d410428976
Ref: library/ctypes ctypes Structure _fields_10429401
Ref: 2fe710429401
Ref: library/ctypes ctypes Structure _pack_10430994
Ref: 2fea10430994
Ref: library/ctypes ctypes Structure _align_10431358
Ref: 1d510431358
Ref: library/ctypes ctypes Structure _anonymous_10431658
Ref: 303810431658
Node: Arrays and pointers10434013
Ref: library/ctypes arrays-and-pointers10434123
Ref: 303910434123
Ref: library/ctypes ctypes-arrays-pointers10434123
Ref: 303a10434123
Ref: library/ctypes ctypes Array10434184
Ref: 1ba210434184
Ref: library/ctypes ctypes Array _length_10434699
Ref: 303b10434699
Ref: library/ctypes ctypes Array _type_10434927
Ref: 303c10434927
Ref: library/ctypes ctypes ARRAY10435124
Ref: 29c10435124
Ref: library/ctypes ctypes _Pointer10435420
Ref: 303d10435420
Ref: library/ctypes ctypes _Pointer _type_10436079
Ref: 162a10436079
Ref: library/ctypes ctypes _Pointer contents10436148
Ref: 2ff310436148
Node: Bibliotecas de interface de linha de comando10436337
Ref: library/cmdlinelibs doc10436531
Ref: 303e10436531
Ref: library/cmdlinelibs cmdlinelibs10436531
Ref: 303f10436531
Ref: library/cmdlinelibs command-line-interface-libraries10436531
Ref: 304010436531
Ref: library/cmdlinelibs translation-repo10436531
Ref: 304110436531
Node: argparse — Analisador sintático para opções de linha de comando argumentos e subcomandos10437776
Ref: library/argparse doc10438027
Ref: 304210438027
Ref: library/argparse argparse-parser-for-command-line-options-arguments-and-subcommands10438027
Ref: 304310438027
Ref: library/argparse module-argparse10438027
Ref: 610438027
Ref: argparse — Analisador sintático para opções de linha de comando argumentos e subcomandos-Footnote-110441443
Node: Objetos ArgumentParser10441511
Ref: library/argparse argumentparser-objects10441694
Ref: 304810441694
Ref: library/argparse argparse ArgumentParser10441759
Ref: 53910441759
Node: prog10444742
Ref: library/argparse id110444819
Ref: 305510444819
Ref: library/argparse prog10444819
Ref: 304910444819
Node: usage10446373
Ref: library/argparse usage10446470
Ref: 304a10446470
Node: description10447225
Ref: library/argparse description10447324
Ref: 304b10447324
Ref: library/argparse id210447324
Ref: 305610447324
Node: epilog10447891
Ref: library/argparse epilog10447992
Ref: 304c10447992
Node: parents10448831
Ref: library/argparse parents10448936
Ref: 304d10448936
Node: formatter_class10450432
Ref: library/argparse formatter-class10450543
Ref: 304e10450543
Ref: library/argparse id310450543
Ref: 305710450543
Ref: library/argparse argparse RawDescriptionHelpFormatter10450804
Ref: 305810450804
Ref: library/argparse argparse RawTextHelpFormatter10450853
Ref: 305910450853
Ref: library/argparse argparse ArgumentDefaultsHelpFormatter10450895
Ref: 19db10450895
Ref: library/argparse argparse MetavarTypeHelpFormatter10450946
Ref: 305a10450946
Node: prefix_chars10454591
Ref: library/argparse prefix-chars10454716
Ref: 304f10454716
Node: fromfile_prefix_chars10455545
Ref: library/argparse fromfile-prefix-chars10455671
Ref: 305010455671
Node: argument_default10457860
Ref: library/argparse argument-default10457986
Ref: 305110457986
Node: allow_abbrev10458917
Ref: library/argparse allow-abbrev10459038
Ref: de810459038
Ref: library/argparse id410459038
Ref: 305f10459038
Node: conflict_handler10459728
Ref: library/argparse conflict-handler10459841
Ref: 305210459841
Node: add_help10461408
Ref: library/argparse add-help10461522
Ref: 305310461522
Node: exit_on_error10462739
Ref: library/argparse exit-on-error10462828
Ref: 305410462828
Node: O método add_argument10463772
Ref: library/argparse the-add-argument-method10463984
Ref: 306010463984
Ref: library/argparse argparse ArgumentParser add_argument10464054
Ref: 19e10464054
Node: name ou flags10466109
Ref: library/argparse id510466196
Ref: 306110466196
Ref: library/argparse name-or-flags10466196
Ref: 306910466196
Node: ação10467381
Ref: library/argparse action10467482
Ref: 306210467482
Ref: library/argparse id610467482
Ref: 306a10467482
Node: nargs10474048
Ref: library/argparse id710474141
Ref: 306c10474141
Ref: library/argparse nargs10474141
Ref: 169210474141
Node: const10478468
Ref: library/argparse const10478562
Ref: 306310478562
Ref: library/argparse id810478562
Ref: 306e10478562
Node: default10479870
Ref: library/argparse default10479963
Ref: 306410479963
Ref: library/argparse id910479963
Ref: 306f10479963
Node: tipo10482570
Ref: library/argparse argparse-type10482665
Ref: 307010482665
Ref: library/argparse type10482665
Ref: 305b10482665
Node: choices10485850
Ref: library/argparse choices10485946
Ref: 168f10485946
Ref: library/argparse id1010485946
Ref: 307210485946
Node: required10487884
Ref: library/argparse id1110487980
Ref: 307310487980
Ref: library/argparse required10487980
Ref: 306510487980
Node: help10489006
Ref: library/argparse help10489102
Ref: 306610489102
Ref: library/argparse id1210489102
Ref: 307410489102
Node: metavar10490709
Ref: library/argparse id1310490801
Ref: 307510490801
Ref: library/argparse metavar10490801
Ref: 306710490801
Node: dest10493073
Ref: library/argparse dest10493171
Ref: 305c10493171
Ref: library/argparse id1410493171
Ref: 307610493171
Node: deprecated10494863
Ref: library/argparse deprecated10494971
Ref: 306810494971
Ref: library/argparse id1510494971
Ref: 307710494971
Node: Classes de ação10495931
Ref: library/argparse action-classes10496026
Ref: 307810496026
Ref: library/argparse argparse Action10496331
Ref: 191710496331
Ref: library/argparse argparse Action __call__10497280
Ref: 307910497280
Ref: library/argparse argparse Action format_usage10498633
Ref: 307a10498633
Ref: library/argparse argparse BooleanOptionalAction10498957
Ref: 197b10498957
Node: O método parse_args10499573
Ref: library/argparse the-parse-args-method10499782
Ref: 307b10499782
Ref: library/argparse argparse ArgumentParser parse_args10499848
Ref: 304610499848
Node: Sintaxe de valores da opção10500805
Ref: library/argparse option-value-syntax10500921
Ref: 307e10500921
Node: Argumentos inválidos10502375
Ref: library/argparse invalid-arguments10502521
Ref: 307f10502521
Node: Argumentos contendo -10503527
Ref: library/argparse arguments-containing10503698
Ref: 308010503698
Node: Abreviações de argumento correspondência de prefixo10505922
Ref: library/argparse argument-abbreviations-prefix-matching10506089
Ref: 308110506089
Ref: library/argparse prefix-matching10506089
Ref: de710506089
Node: Além do sys argv10507073
Ref: library/argparse args10507237
Ref: 307c10507237
Ref: library/argparse beyond-sys-argv10507237
Ref: 308210507237
Node: O objeto Namespace10508214
Ref: library/argparse namespace10508315
Ref: 307d10508315
Ref: library/argparse the-namespace-object10508315
Ref: 308310508315
Ref: library/argparse argparse Namespace10508374
Ref: 304710508374
Node: Outros utilitários10509534
Ref: library/argparse other-utilities10509734
Ref: 308410509734
Node: Subcomandos10510104
Ref: library/argparse subcommands10510196
Ref: 308510510196
Ref: library/argparse argparse ArgumentParser add_subparsers10510241
Ref: c3110510241
Node: Objetos FileType10519090
Ref: library/argparse filetype-objects10519211
Ref: 308610519211
Ref: library/argparse argparse FileType10519266
Ref: f4d10519266
Node: Grupos de argumentos10520769
Ref: library/argparse argument-groups10520895
Ref: 308710520895
Ref: library/argparse argparse ArgumentParser add_argument_group10520958
Ref: 308810520958
Node: Exclusão mútua10523854
Ref: library/argparse mutual-exclusion10523997
Ref: 308910523997
Ref: library/argparse argparse ArgumentParser add_mutually_exclusive_group10524050
Ref: 308a10524050
Node: Padrões do analisador sintático10526851
Ref: library/argparse parser-defaults10526992
Ref: 308b10526992
Ref: library/argparse argparse ArgumentParser set_defaults10527079
Ref: 305e10527079
Ref: library/argparse argparse ArgumentParser get_default10528508
Ref: 308c10528508
Node: Imprimindo a ajuda10528888
Ref: library/argparse printing-help10529029
Ref: 308d10529029
Ref: library/argparse argparse ArgumentParser print_usage10529300
Ref: 308e10529300
Ref: library/argparse argparse ArgumentParser print_help10529542
Ref: 308f10529542
Ref: library/argparse argparse ArgumentParser format_usage10529920
Ref: 1b4210529920
Ref: library/argparse argparse ArgumentParser format_help10530102
Ref: 309010530102
Node: Análise parcial10530322
Ref: library/argparse partial-parsing10530467
Ref: 309110530467
Ref: library/argparse argparse ArgumentParser parse_known_args10530521
Ref: 309210530521
Node: Personalizando a análise de arquivos10531794
Ref: library/argparse customizing-file-parsing10531939
Ref: 309310531939
Ref: library/argparse argparse ArgumentParser convert_arg_line_to_args10532035
Ref: 305d10532035
Node: Métodos de saída10532992
Ref: library/argparse exiting-methods10533139
Ref: 309410533139
Ref: library/argparse argparse ArgumentParser exit10533196
Ref: 309510533196
Ref: library/argparse argparse ArgumentParser error10533781
Ref: 309610533781
Node: Análise misturada10533982
Ref: library/argparse intermixed-parsing10534134
Ref: 309710534134
Ref: library/argparse argparse ArgumentParser parse_intermixed_args10534192
Ref: b1310534192
Ref: library/argparse argparse ArgumentParser parse_known_intermixed_args10534281
Ref: 309810534281
Node: Registrando ações e tipos personalizados10536016
Ref: library/argparse registering-custom-types-or-actions10536141
Ref: 309910536141
Ref: library/argparse argparse ArgumentParser register10536246
Ref: 306b10536246
Node: Exceções<9>10537769
Ref: library/argparse exceptions10537940
Ref: 309a10537940
Ref: library/argparse argparse ArgumentError10537981
Ref: 309b10537981
Ref: library/argparse argparse ArgumentTypeError10538214
Ref: 307110538214
Node: Tutorial de Argparse10538473
Ref: howto/argparse doc10538591
Ref: 309c10538591
Ref: howto/argparse argparse-tutorial10538591
Ref: 304510538591
Ref: howto/argparse id110538591
Ref: 309d10538591
Node: Conceitos10539988
Ref: howto/argparse concepts10540072
Ref: 309e10540072
Node: O básico10542259
Ref: howto/argparse the-basics10542390
Ref: 309f10542390
Node: Apresentando os argumentos posicionais10543623
Ref: howto/argparse introducing-positional-arguments10543781
Ref: 30a010543781
Node: Apresentando os argumentos opcionais10547189
Ref: howto/argparse introducing-optional-arguments10547383
Ref: 30a110547383
Node: Opções curtas10550479
Ref: howto/argparse short-options10550567
Ref: 30a210550567
Node: Combinando argumentos posicionais e opcionais10551362
Ref: howto/argparse combining-positional-and-optional-arguments10551542
Ref: 30a310551542
Node: Avançando um pouco mais10559831
Ref: howto/argparse getting-a-little-more-advanced10560009
Ref: 30a410560009
Node: Especificando argumentos ambíguos10561991
Ref: howto/argparse id210562116
Ref: 30a510562116
Ref: howto/argparse specifying-ambiguous-arguments10562116
Ref: 306d10562116
Node: Opções conflitantes10563078
Ref: howto/argparse conflicting-options10563203
Ref: 30a610563203
Node: Como traduzir a saída do argparse10566353
Ref: howto/argparse how-to-translate-the-argparse-output10566520
Ref: 30a710566520
Ref: Como traduzir a saída do argparse-Footnote-110568315
Node: Conversores de tipo personalizados10568348
Ref: howto/argparse custom-type-converters10568501
Ref: 30a910568501
Node: Conclusão10570411
Ref: howto/argparse conclusion10570521
Ref: 30aa10570521
Ref: howto/argparse-optparse upgrading-optparse-code10570803
Ref: 11ed10570803
Node: Migrando código optparse para argparse10570805
Ref: howto/argparse-optparse doc10570923
Ref: 30ab10570923
Ref: howto/argparse-optparse migrating-optparse-code10570923
Ref: 30ac10570923
Ref: howto/argparse-optparse migrating-optparse-code-to-argparse10570923
Ref: 30ad10570923
Ref: howto/argparse-optparse translation-repo10570923
Ref: 30ae10570923
Node: optparse — Analisador sintático para opções de linha de comando10574196
Ref: library/optparse doc10574494
Ref: 30b410574494
Ref: library/optparse module-optparse10574494
Ref: a010574494
Ref: library/optparse optparse-parser-for-command-line-options10574494
Ref: 30b510574494
Ref: library/optparse translation-repo10574494
Ref: 30b610574494
Ref: optparse — Analisador sintático para opções de linha de comando-Footnote-110575048
Node: Escolhendo uma biblioteca de análise de linha de comando10575116
Ref: library/optparse choosing-an-argument-parser10575302
Ref: 304410575302
Ref: library/optparse choosing-an-argument-parsing-library10575302
Ref: 30b710575302
Ref: Escolhendo uma biblioteca de análise de linha de comando-Footnote-110581452
Ref: Escolhendo uma biblioteca de análise de linha de comando-Footnote-210581492
Ref: Escolhendo uma biblioteca de análise de linha de comando-Footnote-310581532
Node: Introdução<7>10581580
Ref: library/optparse introduction10581783
Ref: 30b810581783
Node: Contexto10584307
Ref: library/optparse background10584464
Ref: 30b910584464
Ref: library/optparse optparse-background10584464
Ref: 30ba10584464
Node: Terminologia10585114
Ref: library/optparse optparse-terminology10585208
Ref: 30bb10585208
Ref: library/optparse terminology10585208
Ref: 30bc10585208
Node: Para que servem as opções?10589366
Ref: library/optparse optparse-what-options-for10589511
Ref: 30bd10589511
Ref: library/optparse what-are-options-for10589511
Ref: 30be10589511
Node: Para que servem os argumentos posicionais?10591341
Ref: library/optparse optparse-what-positional-arguments-for10591465
Ref: 30bf10591465
Ref: library/optparse what-are-positional-arguments-for10591465
Ref: 30c010591465
Node: Tutorial<2>10592958
Ref: library/optparse optparse-tutorial10593119
Ref: 30c110593119
Ref: library/optparse tutorial10593119
Ref: 30c210593119
Node: Compreendendo as ações de opções10595973
Ref: library/optparse optparse-understanding-option-actions10596080
Ref: 30c710596080
Ref: library/optparse understanding-option-actions10596080
Ref: 30c810596080
Node: A ação store10596742
Ref: library/optparse optparse-store-action10596902
Ref: 30ca10596902
Ref: library/optparse the-store-action10596902
Ref: 30cb10596902
Node: Manipulando opções sinalizadores booleanas10599183
Ref: library/optparse handling-boolean-flag-options10599321
Ref: 30cc10599321
Ref: library/optparse optparse-handling-boolean-options10599321
Ref: 30cd10599321
Node: Outras ações10600299
Ref: library/optparse optparse-other-actions10600438
Ref: 30ce10600438
Ref: library/optparse other-actions10600438
Ref: 30cf10600438
Node: Valores padrão10600950
Ref: library/optparse default-values10601067
Ref: 30d310601067
Ref: library/optparse optparse-default-values10601067
Ref: 30d410601067
Node: Gerando texto de ajuda10603071
Ref: library/optparse generating-help10603204
Ref: 30d510603204
Ref: library/optparse optparse-generating-help10603204
Ref: 30d610603204
Node: Agrupando opções10607575
Ref: library/optparse grouping-options10607652
Ref: 30d710607652
Ref: library/optparse optparse OptionGroup10607999
Ref: 30d810607999
Ref: library/optparse optparse OptionParser get_option_group10611549
Ref: 30d910611549
Node: Exibindo uma string de versão10611840
Ref: library/optparse optparse-printing-version-string10611983
Ref: 30da10611983
Ref: library/optparse printing-a-version-string10611983
Ref: 30db10611983
Ref: library/optparse optparse OptionParser print_version10612918
Ref: 30dc10612918
Ref: library/optparse optparse OptionParser get_version10613307
Ref: 30de10613307
Node: Como optparse trata erros10613453
Ref: library/optparse how-optparse-handles-errors10613587
Ref: 30df10613587
Ref: library/optparse optparse-how-optparse-handles-errors10613587
Ref: 30e010613587
Node: Juntando tudo10615864
Ref: library/optparse optparse-putting-it-all-together10615959
Ref: 30e110615959
Ref: library/optparse putting-it-all-together10615959
Ref: 30e210615959
Node: Guia de referência10616866
Ref: library/optparse optparse-reference-guide10617050
Ref: 30d110617050
Ref: library/optparse reference-guide10617050
Ref: 30e310617050
Node: Criando o analisador sintático10617469
Ref: library/optparse creating-the-parser10617600
Ref: 30e410617600
Ref: library/optparse optparse-creating-parser10617600
Ref: 30e510617600
Ref: library/optparse optparse OptionParser10617775
Ref: 151510617775
Node: Preenchendo o analisador sintático10621102
Ref: library/optparse optparse-populating-parser10621263
Ref: 30e710621263
Ref: library/optparse populating-the-parser10621263
Ref: 30e810621263
Node: Definindo as opções10622658
Ref: library/optparse defining-options10622814
Ref: 30e910622814
Ref: library/optparse optparse-defining-options10622814
Ref: 30ea10622814
Ref: library/optparse optparse OptionParser add_option10623296
Ref: 30af10623296
Ref: library/optparse optparse Values10625553
Ref: 30b110625553
Node: Atributos da classe Option10626884
Ref: library/optparse option-attributes10627031
Ref: 30ee10627031
Ref: library/optparse optparse-option-attributes10627031
Ref: 30ef10627031
Ref: library/optparse optparse Option10627106
Ref: 30eb10627106
Ref: library/optparse optparse Option action10627800
Ref: 30c310627800
Ref: library/optparse optparse Option type10628038
Ref: 30c410628038
Ref: library/optparse optparse Option dest10628277
Ref: 30c510628277
Ref: library/optparse optparse Option default10628635
Ref: 30f110628635
Ref: library/optparse optparse Option nargs10628832
Ref: 30f310628832
Ref: library/optparse optparse Option const10629075
Ref: 30d010629075
Ref: library/optparse optparse Option choices10629197
Ref: 30f410629197
Ref: library/optparse optparse Option callback10629325
Ref: 30f510629325
Ref: library/optparse optparse Option callback_args10629597
Ref: 30f610629597
Ref: library/optparse optparse Option callback_kwargs10629632
Ref: 30f710629632
Ref: library/optparse optparse Option help10629816
Ref: 30c610629816
Ref: library/optparse optparse Option metavar10630196
Ref: 30f810630196
Node: Ações de opção padrão10630435
Ref: library/optparse optparse-standard-option-actions10630585
Ref: 30ec10630585
Ref: library/optparse standard-option-actions10630585
Ref: 30f910630585
Node: Tipos de opção padrão10639107
Ref: library/optparse optparse-standard-option-types10639253
Ref: 30f010639253
Ref: library/optparse standard-option-types10639253
Ref: 30fa10639253
Node: Análise de argumentos10640929
Ref: library/optparse optparse-parsing-arguments10641112
Ref: 30ed10641112
Ref: library/optparse parsing-arguments10641112
Ref: 30fb10641112
Ref: library/optparse optparse OptionParser parse_args10641290
Ref: 151610641290
Node: Consultando e manipulando seu analisador sintático de opções10642815
Ref: library/optparse optparse-querying-manipulating-option-parser10642998
Ref: 30fc10642998
Ref: library/optparse querying-and-manipulating-your-option-parser10642998
Ref: 30fd10642998
Ref: library/optparse optparse OptionParser disable_interspersed_args10643397
Ref: 30b010643397
Ref: library/optparse optparse OptionParser enable_interspersed_args10644250
Ref: 30fe10644250
Ref: library/optparse optparse OptionParser get_option10644477
Ref: 30ff10644477
Ref: library/optparse optparse OptionParser has_option10644665
Ref: 310010644665
Ref: library/optparse optparse OptionParser remove_option10644862
Ref: 310110644862
Node: Conflitos entre opções10645291
Ref: library/optparse conflicts-between-options10645459
Ref: 310210645459
Ref: library/optparse optparse-conflicts-between-options10645459
Ref: 30e610645459
Node: Limpeza10648082
Ref: library/optparse cleanup10648202
Ref: 310410648202
Ref: library/optparse optparse-cleanup10648202
Ref: 310510648202
Node: Outros métodos10648662
Ref: library/optparse optparse-other-methods10648749
Ref: 310610648749
Ref: library/optparse other-methods10648749
Ref: 310710648749
Ref: library/optparse optparse OptionParser set_usage10648857
Ref: 310810648857
Ref: library/optparse optparse OptionParser print_usage10649158
Ref: 30dd10649158
Ref: library/optparse optparse OptionParser get_usage10649499
Ref: 310910649499
Ref: library/optparse optparse OptionParser set_defaults10649637
Ref: 30f210649637
Node: Funções de retorno de opção10650845
Ref: library/optparse option-callbacks10651037
Ref: 310a10651037
Ref: library/optparse optparse-option-callbacks10651037
Ref: 30d210651037
Node: Definindo uma opção de retorno de chamada10652687
Ref: library/optparse defining-a-callback-option10652848
Ref: 310b10652848
Ref: library/optparse optparse-defining-callback-option10652848
Ref: 310c10652848
Node: Como os retornos de chamada são chamados10655397
Ref: library/optparse how-callbacks-are-called10655610
Ref: 310d10655610
Ref: library/optparse optparse-how-callbacks-called10655610
Ref: 310e10655610
Node: Levantando erros em uma função de retorno10658496
Ref: library/optparse optparse-raising-errors-in-callback10658725
Ref: 310f10658725
Ref: library/optparse raising-errors-in-a-callback10658725
Ref: 311010658725
Node: Exemplo de função de retorno 1 retorno de chamada trivial10659250
Ref: library/optparse callback-example-1-trivial-callback10659501
Ref: 311110659501
Ref: library/optparse optparse-callback-example-110659501
Ref: 311210659501
Node: Exemplo de função de retorno 2 verificar a ordem das opções10660016
Ref: library/optparse callback-example-2-check-option-order10660300
Ref: 311310660300
Ref: library/optparse optparse-callback-example-210660300
Ref: 311410660300
Node: Exemplo 3 de função de retorno verificar a ordem das opções generalizada10660917
Ref: library/optparse callback-example-3-check-option-order-generalized10661211
Ref: 311510661211
Ref: library/optparse optparse-callback-example-310661211
Ref: 311610661211
Node: Exemplo de função de retorno 4 verificar uma condição arbitrária10662091
Ref: library/optparse callback-example-4-check-arbitrary-condition10662371
Ref: 311710662371
Ref: library/optparse optparse-callback-example-410662371
Ref: 311810662371
Node: Exemplo de função de retorno 5 argumentos fixos10663239
Ref: library/optparse callback-example-5-fixed-arguments10663497
Ref: 311910663497
Ref: library/optparse optparse-callback-example-510663497
Ref: 311a10663497
Node: Exemplo de função de retorno 6 argumentos variáveis10664707
Ref: library/optparse callback-example-6-variable-arguments10664887
Ref: 311b10664887
Ref: library/optparse optparse-callback-example-610664887
Ref: 311c10664887
Node: Estendendo optparse10667238
Ref: library/optparse extending-optparse10667425
Ref: 311d10667425
Ref: library/optparse optparse-extending-optparse10667425
Ref: 30c910667425
Node: Adicionando novos tipos10667803
Ref: library/optparse adding-new-types10667916
Ref: 311e10667916
Ref: library/optparse optparse-adding-new-types10667916
Ref: 311f10667916
Ref: library/optparse optparse Option TYPES10668238
Ref: 312010668238
Ref: library/optparse optparse Option TYPE_CHECKER10668404
Ref: 312110668404
Node: Adicionando novas ações10671621
Ref: library/optparse adding-new-actions10671734
Ref: 312210671734
Ref: library/optparse optparse-adding-new-actions10671734
Ref: 312310671734
Ref: library/optparse optparse Option ACTIONS10672884
Ref: 312410672884
Ref: library/optparse optparse Option STORE_ACTIONS10672968
Ref: 312510672968
Ref: library/optparse optparse Option TYPED_ACTIONS10673061
Ref: 312610673061
Ref: library/optparse optparse Option ALWAYS_TYPED_ACTIONS10673154
Ref: 312710673154
Node: Exceções<10>10676538
Ref: library/optparse exceptions10676685
Ref: 312810676685
Ref: library/optparse optparse OptionError10676726
Ref: 30b210676726
Ref: library/optparse optparse OptionConflictError10676881
Ref: 310310676881
Ref: library/optparse optparse OptionValueError10677035
Ref: 30b310677035
Ref: library/optparse optparse BadOptionError10677167
Ref: 312910677167
Ref: library/optparse optparse AmbiguousOptionError10677281
Ref: 312a10677281
Node: getpass — Entrada de senha portátil10677400
Ref: library/getpass doc10677669
Ref: 312b10677669
Ref: library/getpass getpass-portable-password-input10677669
Ref: 312c10677669
Ref: library/getpass module-getpass10677669
Ref: 6210677669
Ref: library/getpass translation-repo10677669
Ref: 312d10677669
Ref: library/getpass getpass getpass10678104
Ref: 312e10678104
Ref: library/getpass getpass GetPassWarning10679022
Ref: 312f10679022
Ref: library/getpass getpass getuser10679183
Ref: 41810679183
Ref: getpass — Entrada de senha portátil-Footnote-110679956
Node: fileinput — Itera sobre linhas de múltiplos fluxos de entrada10680023
Ref: library/fileinput doc10680304
Ref: 313010680304
Ref: library/fileinput fileinput-iterate-over-lines-from-multiple-input-streams10680304
Ref: 313110680304
Ref: library/fileinput module-fileinput10680304
Ref: 5b10680304
Ref: library/fileinput translation-repo10680304
Ref: 313210680304
Ref: library/fileinput fileinput input10682902
Ref: 80210682902
Ref: library/fileinput fileinput filename10684197
Ref: 313310684197
Ref: library/fileinput fileinput fileno10684359
Ref: 147510684359
Ref: library/fileinput fileinput lineno10684583
Ref: 313410684583
Ref: library/fileinput fileinput filelineno10684842
Ref: 313510684842
Ref: library/fileinput fileinput isfirstline10685099
Ref: 313610685099
Ref: library/fileinput fileinput isstdin10685272
Ref: 313710685272
Ref: library/fileinput fileinput nextfile10685423
Ref: 313810685423
Ref: library/fileinput fileinput close10685997
Ref: 313910685997
Ref: library/fileinput fileinput FileInput10686178
Ref: 73710686178
Ref: library/fileinput fileinput hook_compressed10689077
Ref: 80310689077
Ref: library/fileinput fileinput hook_encoded10689934
Ref: cc010689934
Ref: fileinput — Itera sobre linhas de múltiplos fluxos de entrada-Footnote-110690561
Node: curses — Gerenciador de terminal para visualizadores de células de caracteres10690630
Ref: library/curses doc10690929
Ref: 313a10690929
Ref: library/curses curses-terminal-handling-for-character-cell-displays10690929
Ref: 313b10690929
Ref: library/curses module-curses10690929
Ref: 2b10690929
Ref: library/curses translation-repo10690929
Ref: 313c10690929
Ref: curses — Gerenciador de terminal para visualizadores de células de caracteres-Footnote-110692770
Node: Funções<6>10692833
Ref: library/curses curses-functions10692985
Ref: 313e10692985
Ref: library/curses functions10692985
Ref: 313f10692985
Ref: library/curses curses error10693085
Ref: 314010693085
Ref: library/curses curses baudrate10693453
Ref: 314210693453
Ref: library/curses curses beep10693805
Ref: 314310693805
Ref: library/curses curses can_change_color10693871
Ref: 314410693871
Ref: library/curses curses cbreak10694043
Ref: 314510694043
Ref: library/curses curses color_content10694521
Ref: 7f310694521
Ref: library/curses curses color_pair10694904
Ref: 314710694904
Ref: library/curses curses curs_set10695291
Ref: 314b10695291
Ref: library/curses curses def_prog_mode10695719
Ref: 314c10695719
Ref: library/curses curses def_shell_mode10696047
Ref: 314e10696047
Ref: library/curses curses delay_output10696393
Ref: 315010696393
Ref: library/curses curses doupdate10696483
Ref: 315110696483
Ref: library/curses curses echo10697309
Ref: 315510697309
Ref: library/curses curses endwin10697445
Ref: 315610697445
Ref: library/curses curses erasechar10697548
Ref: 315710697548
Ref: library/curses curses filter10697816
Ref: 315810697816
Ref: library/curses curses flash10698427
Ref: 315910698427
Ref: library/curses curses flushinp10698690
Ref: 315a10698690
Ref: library/curses curses getmouse10698876
Ref: 315b10698876
Ref: library/curses curses getsyx10699878
Ref: 316510699878
Ref: library/curses curses getwin10700089
Ref: 316710700089
Ref: library/curses curses has_colors10700344
Ref: 316910700344
Ref: library/curses curses has_extended_color_support10700476
Ref: 7f710700476
Ref: library/curses curses has_ic10700867
Ref: 316a10700867
Ref: library/curses curses has_il10701123
Ref: 316b10701123
Ref: library/curses curses has_key10701420
Ref: 316c10701420
Ref: library/curses curses halfdelay10701574
Ref: 316d10701574
Ref: library/curses curses init_color10702012
Ref: 7f410702012
Ref: library/curses curses init_pair10702668
Ref: 7f510702668
Ref: library/curses curses initscr10703389
Ref: 168910703389
Ref: library/curses curses is_term_resized10703664
Ref: 317110703664
Ref: library/curses curses isendwin10703835
Ref: 317210703835
Ref: library/curses curses keyname10703993
Ref: 317310703993
Ref: library/curses curses killchar10704524
Ref: 317410704524
Ref: library/curses curses longname10704795
Ref: 317510704795
Ref: library/curses curses meta10705070
Ref: 317610705070
Ref: library/curses curses mouseinterval10705227
Ref: 317710705227
Ref: library/curses curses mousemask10705534
Ref: 317810705534
Ref: library/curses curses napms10705954
Ref: 168810705954
Ref: library/curses curses newpad10706022
Ref: 317910706022
Ref: library/curses curses newwin10707110
Ref: 317a10707110
Ref: library/curses curses nl10707477
Ref: 317b10707477
Ref: library/curses curses nocbreak10707692
Ref: 316e10707692
Ref: library/curses curses noecho10707813
Ref: 317c10707813
Ref: library/curses curses nonl10707912
Ref: 317d10707912
Ref: library/curses curses noqiflush10708405
Ref: 317e10708405
Ref: library/curses curses noraw10708795
Ref: 317f10708795
Ref: library/curses curses pair_content10708910
Ref: 7f610708910
Ref: library/curses curses pair_number10709136
Ref: 314a10709136
Ref: library/curses curses putp10709328
Ref: 318010709328
Ref: library/curses curses qiflush10709574
Ref: 318110709574
Ref: library/curses curses raw10709840
Ref: 314610709840
Ref: library/curses curses reset_prog_mode10710082
Ref: 314d10710082
Ref: library/curses curses reset_shell_mode10710230
Ref: 314f10710230
Ref: library/curses curses resetty10710378
Ref: 318210710378
Ref: library/curses curses resize_term10710520
Ref: 169110710520
Ref: library/curses curses resizeterm10711059
Ref: 169010711059
Ref: library/curses curses savetty10711332
Ref: 318310711332
Ref: library/curses curses get_escdelay10711467
Ref: 8f610711467
Ref: library/curses curses set_escdelay10711598
Ref: 8f710711598
Ref: library/curses curses get_tabsize10711901
Ref: 8f810711901
Ref: library/curses curses set_tabsize10712030
Ref: 8f910712030
Ref: library/curses curses setsyx10712248
Ref: 318410712248
Ref: library/curses curses setupterm10712418
Ref: 318510712418
Ref: library/curses curses start_color10712835
Ref: 318610712835
Ref: library/curses curses termattrs10713528
Ref: 318910713528
Ref: library/curses curses termname10713758
Ref: 318a10713758
Ref: library/curses curses tigetflag10713907
Ref: 318b10713907
Ref: library/curses curses tigetnum10714223
Ref: 318c10714223
Ref: library/curses curses tigetstr10714539
Ref: 318d10714539
Ref: library/curses curses tparm10714849
Ref: 318e10714849
Ref: library/curses curses typeahead10715186
Ref: 318f10715186
Ref: library/curses curses unctrl10715779
Ref: 319010715779
Ref: library/curses curses ungetch10716060
Ref: 319110716060
Ref: library/curses curses update_lines_cols10716237
Ref: e1610716237
Ref: library/curses curses unget_wch10716435
Ref: 10d710716435
Ref: library/curses curses ungetmouse10716661
Ref: 319210716661
Ref: library/curses curses use_env10716827
Ref: 319310716827
Ref: library/curses curses use_default_colors10717337
Ref: 316f10717337
Ref: library/curses curses wrapper10717770
Ref: a8a10717770
Node: Window Objects10718596
Ref: library/curses curses-window-objects10718770
Ref: 317010718770
Ref: library/curses window-objects10718770
Ref: 319410718770
Ref: library/curses curses window10718819
Ref: 10d410718819
Ref: library/curses curses window addch10718987
Ref: 319510718987
Ref: library/curses curses window addnstr10719592
Ref: 319610719592
Ref: library/curses curses window addstr10719853
Ref: 315310719853
Ref: library/curses curses window attroff10720855
Ref: 319710720855
Ref: library/curses curses window attron10721001
Ref: 319810721001
Ref: library/curses curses window attrset10721141
Ref: 319910721141
Ref: library/curses curses window bkgd10721290
Ref: 319a10721290
Ref: library/curses curses window bkgdset10721736
Ref: 319b10721736
Ref: library/curses curses window border10722303
Ref: 319c10722303
Ref: library/curses curses window box10724314
Ref: 31a310724314
Ref: library/curses curses window chgat10724543
Ref: 31a410724543
Ref: library/curses curses window clear10725171
Ref: 31a610725171
Ref: library/curses curses window clearok10725327
Ref: 31a810725327
Ref: library/curses curses window clrtobot10725473
Ref: 31a910725473
Ref: library/curses curses window clrtoeol10725671
Ref: 31aa10725671
Ref: library/curses curses window cursyncup10725752
Ref: 31ab10725752
Ref: library/curses curses window delch10725921
Ref: 31ac10725921
Ref: library/curses curses window deleteln10726001
Ref: 31ad10726001
Ref: library/curses curses window derwin10726126
Ref: 31ae10726126
Ref: library/curses curses window echochar10726538
Ref: 31b010726538
Ref: library/curses curses window enclose10726693
Ref: 1a1d10726693
Ref: library/curses curses window encoding10727115
Ref: 10d510727115
Ref: library/curses curses window erase10727500
Ref: 31a710727500
Ref: library/curses curses window getbegyx10727554
Ref: 31b110727554
Ref: library/curses curses window getbkgd10727658
Ref: 31b210727658
Ref: library/curses curses window getch10727774
Ref: 162710727774
Ref: library/curses curses window get_wch10728095
Ref: 10d610728095
Ref: library/curses curses window getkey10728369
Ref: 31b310728369
Ref: library/curses curses window getmaxyx10728678
Ref: 31b410728678
Ref: library/curses curses window getparyx10728784
Ref: 31b510728784
Ref: library/curses curses window getstr10728989
Ref: 31b610728989
Ref: library/curses curses window getyx10729209
Ref: 31b710729209
Ref: library/curses curses window hline10729351
Ref: 31b810729351
Ref: library/curses curses window idcok10729539
Ref: 31b910729539
Ref: library/curses curses window idlok10729886
Ref: 31ba10729886
Ref: library/curses curses window immedok10730080
Ref: 31bb10730080
Ref: library/curses curses window inch10730430
Ref: 31bc10730430
Ref: library/curses curses window insch10730619
Ref: 31bd10730619
Ref: library/curses curses window insdelln10730835
Ref: 31be10730835
Ref: library/curses curses window insertln10731215
Ref: 31bf10731215
Ref: library/curses curses window insnstr10731346
Ref: 31c010731346
Ref: library/curses curses window insstr10731861
Ref: 31c110731861
Ref: library/curses curses window instr10732282
Ref: 31c210732282
Ref: library/curses curses window is_linetouched10732680
Ref: 31c310732680
Ref: library/curses curses window is_wintouched10732964
Ref: 31c410732964
Ref: library/curses curses window keypad10733145
Ref: 31c510733145
Ref: library/curses curses window leaveok10733414
Ref: 316610733414
Ref: library/curses curses window move10733766
Ref: 31c610733766
Ref: library/curses curses window mvderwin10733850
Ref: 31c710733850
Ref: library/curses curses window mvwin10734128
Ref: 31c810734128
Ref: library/curses curses window nodelay10734245
Ref: 31c910734245
Ref: library/curses curses window notimeout10734355
Ref: 31ca10734355
Ref: library/curses curses window noutrefresh10734620
Ref: 315210734620
Ref: library/curses curses window overlay10734895
Ref: 31cb10734895
Ref: library/curses curses window overwrite10735545
Ref: 31cc10735545
Ref: library/curses curses window putwin10736198
Ref: 316810736198
Ref: library/curses curses window redrawln10736405
Ref: 31cd10736405
Ref: library/curses curses window redrawwin10736612
Ref: 31ce10736612
Ref: library/curses curses window refresh10736759
Ref: 315410736759
Ref: library/curses curses window resize10737781
Ref: 31cf10737781
Ref: library/curses curses window scroll10738134
Ref: 31d010738134
Ref: library/curses curses window scrollok10738243
Ref: 31d110738243
Ref: library/curses curses window setscrreg10738780
Ref: 31d210738780
Ref: library/curses curses window standend10738950
Ref: 31d310738950
Ref: library/curses curses window standout10739102
Ref: 31d410739102
Ref: library/curses curses window subpad10739173
Ref: 31d510739173
Ref: library/curses curses window subwin10739414
Ref: 31af10739414
Ref: library/curses curses window syncdown10739774
Ref: 31d610739774
Ref: library/curses curses window syncok10740021
Ref: 31d710740021
Ref: library/curses curses window syncup10740185
Ref: 31d810740185
Ref: library/curses curses window timeout10740312
Ref: 31d910740312
Ref: library/curses curses window touchline10740816
Ref: 31a510740816
Ref: library/curses curses window touchwin10741125
Ref: 31da10741125
Ref: library/curses curses window untouchwin10741251
Ref: 31db10741251
Ref: library/curses curses window vline10741385
Ref: 188610741385
Ref: Window Objects-Footnote-110741646
Node: Constantes<6>10741689
Ref: library/curses constants10741842
Ref: 31dc10741842
Ref: library/curses curses ERR10741949
Ref: 31dd10741949
Ref: library/curses curses OK10742094
Ref: 31de10742094
Ref: library/curses curses version10742237
Ref: 31df10742237
Ref: library/curses curses ncurses_version10742332
Ref: 9ef10742332
Ref: library/curses curses COLORS10742756
Ref: 318710742756
Ref: library/curses curses COLOR_PAIRS10742912
Ref: 318810742912
Ref: library/curses curses COLS10743078
Ref: e1810743078
Ref: library/curses curses LINES10743338
Ref: e1710743338
Ref: library/curses curses A_ALTCHARSET10743895
Ref: 31e010743895
Ref: library/curses curses A_BLINK10743999
Ref: 31e110743999
Ref: library/curses curses A_BOLD10744098
Ref: 31e210744098
Ref: library/curses curses A_DIM10744196
Ref: 31e310744196
Ref: library/curses curses A_INVIS10744296
Ref: 31e410744296
Ref: library/curses curses A_ITALIC10744410
Ref: 31e510744410
Ref: library/curses curses A_NORMAL10744511
Ref: 314110744511
Ref: library/curses curses A_PROTECT10744618
Ref: 31e610744618
Ref: library/curses curses A_REVERSE10744722
Ref: 314910744722
Ref: library/curses curses A_STANDOUT10744864
Ref: 314810744864
Ref: library/curses curses A_UNDERLINE10744938
Ref: 31e710744938
Ref: library/curses curses A_HORIZONTAL10745013
Ref: 31e810745013
Ref: library/curses curses A_LEFT10745108
Ref: 31e910745108
Ref: library/curses curses A_LOW10745211
Ref: 31ea10745211
Ref: library/curses curses A_RIGHT10745316
Ref: 31eb10745316
Ref: library/curses curses A_TOP10745419
Ref: 31ec10745419
Ref: library/curses curses A_VERTICAL10745509
Ref: 31ed10745509
Ref: library/curses curses A_ATTRIBUTES10745908
Ref: 31ee10745908
Ref: library/curses curses A_CHARTEXT10746019
Ref: 31ef10746019
Ref: library/curses curses A_COLOR10746140
Ref: 31f010746140
Ref: library/curses curses KEY_MIN10746590
Ref: 31f110746590
Ref: library/curses curses KEY_BREAK10746702
Ref: 31f210746702
Ref: library/curses curses KEY_DOWN10746816
Ref: 31f310746816
Ref: library/curses curses KEY_UP10746917
Ref: 31f410746917
Ref: library/curses curses KEY_LEFT10747020
Ref: 31f510747020
Ref: library/curses curses KEY_RIGHT10747124
Ref: 31f610747124
Ref: library/curses curses KEY_HOME10747227
Ref: 31f710747227
Ref: library/curses curses KEY_BACKSPACE10747332
Ref: 31f810747332
Ref: library/curses curses KEY_F010747431
Ref: 31f910747431
Ref: library/curses curses KEY_Fn10747607
Ref: 31fa10747607
Ref: library/curses curses KEY_DL10747725
Ref: 31fb10747725
Ref: library/curses curses KEY_IL10747829
Ref: 31fc10747829
Ref: library/curses curses KEY_DC10747933
Ref: 31fd10747933
Ref: library/curses curses KEY_IC10748042
Ref: 31fe10748042
Ref: library/curses curses KEY_EIC10748168
Ref: 31ff10748168
Ref: library/curses curses KEY_CLEAR10748284
Ref: 320010748284
Ref: library/curses curses KEY_EOS10748387
Ref: 320110748387
Ref: library/curses curses KEY_EOL10748502
Ref: 320210748502
Ref: library/curses curses KEY_SF10748614
Ref: 320310748614
Ref: library/curses curses KEY_SR10748728
Ref: 320410748728
Ref: library/curses curses KEY_NPAGE10748856
Ref: 320510748856
Ref: library/curses curses KEY_PPAGE10748958
Ref: 320610748958
Ref: library/curses curses KEY_STAB10749063
Ref: 320710749063
Ref: library/curses curses KEY_CTAB10749163
Ref: 320810749163
Ref: library/curses curses KEY_CATAB10749266
Ref: 320910749266
Ref: library/curses curses KEY_ENTER10749373
Ref: 320a10749373
Ref: library/curses curses KEY_SRESET10749493
Ref: 320b10749493
Ref: library/curses curses KEY_RESET10749618
Ref: 320c10749618
Ref: library/curses curses KEY_PRINT10749743
Ref: 320d10749743
Ref: library/curses curses KEY_LL10749838
Ref: 320e10749838
Ref: library/curses curses KEY_A110749963
Ref: 320f10749963
Ref: library/curses curses KEY_A310750076
Ref: 321010750076
Ref: library/curses curses KEY_B210750190
Ref: 321110750190
Ref: library/curses curses KEY_C110750299
Ref: 321210750299
Ref: library/curses curses KEY_C310750412
Ref: 321310750412
Ref: library/curses curses KEY_BTAB10750528
Ref: 321410750528
Ref: library/curses curses KEY_BEG10750628
Ref: 321510750628
Ref: library/curses curses KEY_CANCEL10750739
Ref: 321610750739
Ref: library/curses curses KEY_CLOSE10750839
Ref: 321710750839
Ref: library/curses curses KEY_COMMAND10750920
Ref: 321810750920
Ref: library/curses curses KEY_COPY10751012
Ref: 321910751012
Ref: library/curses curses KEY_CREATE10751111
Ref: 321a10751111
Ref: library/curses curses KEY_END10751207
Ref: 321b10751207
Ref: library/curses curses KEY_EXIT10751304
Ref: 321c10751304
Ref: library/curses curses KEY_FIND10751401
Ref: 321d10751401
Ref: library/curses curses KEY_HELP10751498
Ref: 321e10751498
Ref: library/curses curses KEY_MARK10751595
Ref: 321f10751595
Ref: library/curses curses KEY_MESSAGE10751676
Ref: 322010751676
Ref: library/curses curses KEY_MOVE10751762
Ref: 322110751762
Ref: library/curses curses KEY_NEXT10751859
Ref: 322210751859
Ref: library/curses curses KEY_OPEN10751956
Ref: 322310751956
Ref: library/curses curses KEY_OPTIONS10752037
Ref: 322410752037
Ref: library/curses curses KEY_PREVIOUS10752108
Ref: 322510752108
Ref: library/curses curses KEY_REDO10752202
Ref: 322610752202
Ref: library/curses curses KEY_REFERENCE10752283
Ref: 322710752283
Ref: library/curses curses KEY_REFRESH10752361
Ref: 322810752361
Ref: library/curses curses KEY_REPLACE10752431
Ref: 322910752431
Ref: library/curses curses KEY_RESTART10752501
Ref: 322a10752501
Ref: library/curses curses KEY_RESUME10752589
Ref: 322b10752589
Ref: library/curses curses KEY_SAVE10752686
Ref: 322c10752686
Ref: library/curses curses KEY_SBEG10752783
Ref: 322d10752783
Ref: library/curses curses KEY_SCANCEL10752883
Ref: 322e10752883
Ref: library/curses curses KEY_SCOMMAND10752960
Ref: 322f10752960
Ref: library/curses curses KEY_SCOPY10753055
Ref: 323010753055
Ref: library/curses curses KEY_SCREATE10753143
Ref: 323110753143
Ref: library/curses curses KEY_SDC10753235
Ref: 323210753235
Ref: library/curses curses KEY_SDL10753347
Ref: 323310753347
Ref: library/curses curses KEY_SELECT10753462
Ref: 323410753462
Ref: library/curses curses KEY_SEND10753559
Ref: 323510753559
Ref: library/curses curses KEY_SEOL10753663
Ref: 323610753663
Ref: library/curses curses KEY_SEXIT10753775
Ref: 323710753775
Ref: library/curses curses KEY_SFIND10753880
Ref: 323810753880
Ref: library/curses curses KEY_SHELP10753985
Ref: 323910753985
Ref: library/curses curses KEY_SHOME10754090
Ref: 323a10754090
Ref: library/curses curses KEY_SIC10754193
Ref: 323b10754193
Ref: library/curses curses KEY_SLEFT10754301
Ref: 323c10754301
Ref: library/curses curses KEY_SMESSAGE10754395
Ref: 323d10754395
Ref: library/curses curses KEY_SMOVE10754490
Ref: 323e10754490
Ref: library/curses curses KEY_SNEXT10754595
Ref: 323f10754595
Ref: library/curses curses KEY_SOPTIONS10754683
Ref: 324010754683
Ref: library/curses curses KEY_SPREVIOUS10754761
Ref: 324110754761
Ref: library/curses curses KEY_SPRINT10754854
Ref: 324210754854
Ref: library/curses curses KEY_SREDO10754959
Ref: 324310754959
Ref: library/curses curses KEY_SREPLACE10755047
Ref: 324410755047
Ref: library/curses curses KEY_SRIGHT10755143
Ref: 324510755143
Ref: library/curses curses KEY_SRSUME10755255
Ref: 324610755255
Ref: library/curses curses KEY_SSAVE10755362
Ref: 324710755362
Ref: library/curses curses KEY_SSUSPEND10755450
Ref: 324810755450
Ref: library/curses curses KEY_SUNDO10755545
Ref: 324910755545
Ref: library/curses curses KEY_SUSPEND10755633
Ref: 324a10755633
Ref: library/curses curses KEY_UNDO10755719
Ref: 324b10755719
Ref: library/curses curses KEY_MOUSE10755817
Ref: 315c10755817
Ref: library/curses curses KEY_RESIZE10755935
Ref: 324c10755935
Ref: library/curses curses KEY_MAX10756046
Ref: 324d10756046
Ref: library/curses curses-acs-codes10757250
Ref: 324e10757250
Ref: library/curses curses ACS_BBSS10757832
Ref: 324f10757832
Ref: library/curses curses ACS_BLOCK10757960
Ref: 325010757960
Ref: library/curses curses ACS_BOARD10758068
Ref: 325110758068
Ref: library/curses curses ACS_BSBS10758173
Ref: 325210758173
Ref: library/curses curses ACS_BSSB10758297
Ref: 325310758297
Ref: library/curses curses ACS_BSSS10758423
Ref: 325410758423
Ref: library/curses curses ACS_BTEE10758539
Ref: 325510758539
Ref: library/curses curses ACS_BULLET10758623
Ref: 325610758623
Ref: library/curses curses ACS_CKBOARD10758690
Ref: 325710758690
Ref: library/curses curses ACS_DARROW10758774
Ref: 325810758774
Ref: library/curses curses ACS_DEGREE10758854
Ref: 325910758854
Ref: library/curses curses ACS_DIAMOND10758928
Ref: 325a10758928
Ref: library/curses curses ACS_GEQUAL10758996
Ref: 325b10758996
Ref: library/curses curses ACS_HLINE10759098
Ref: 319e10759098
Ref: library/curses curses ACS_LANTERN10759186
Ref: 325c10759186
Ref: library/curses curses ACS_LARROW10759261
Ref: 325d10759261
Ref: library/curses curses ACS_LEQUAL10759332
Ref: 325e10759332
Ref: library/curses curses ACS_LLCORNER10759414
Ref: 31a110759414
Ref: library/curses curses ACS_LRCORNER10759497
Ref: 31a210759497
Ref: library/curses curses ACS_LTEE10759597
Ref: 325f10759597
Ref: library/curses curses ACS_NEQUAL10759679
Ref: 326010759679
Ref: library/curses curses ACS_PI10759768
Ref: 326110759768
Ref: library/curses curses ACS_PLMINUS10759853
Ref: 326210759853
Ref: library/curses curses ACS_PLUS10759948
Ref: 326310759948
Ref: library/curses curses ACS_RARROW10760035
Ref: 326410760035
Ref: library/curses curses ACS_RTEE10760123
Ref: 326510760123
Ref: library/curses curses ACS_S110760220
Ref: 326610760220
Ref: library/curses curses ACS_S310760321
Ref: 326710760321
Ref: library/curses curses ACS_S710760422
Ref: 326810760422
Ref: library/curses curses ACS_S910760523
Ref: 326910760523
Ref: library/curses curses ACS_SBBS10760626
Ref: 326a10760626
Ref: library/curses curses ACS_SBSB10760753
Ref: 326b10760753
Ref: library/curses curses ACS_SBSS10760875
Ref: 326c10760875
Ref: library/curses curses ACS_SSBB10760993
Ref: 326d10760993
Ref: library/curses curses ACS_SSBS10761119
Ref: 326e10761119
Ref: library/curses curses ACS_SSSB10761238
Ref: 326f10761238
Ref: library/curses curses ACS_SSSS10761355
Ref: 327010761355
Ref: library/curses curses ACS_STERLING10761469
Ref: 327110761469
Ref: library/curses curses ACS_TTEE10761560
Ref: 327210761560
Ref: library/curses curses ACS_UARROW10761641
Ref: 327310761641
Ref: library/curses curses ACS_ULCORNER10761710
Ref: 319f10761710
Ref: library/curses curses ACS_URCORNER10761788
Ref: 31a010761788
Ref: library/curses curses ACS_VLINE10761884
Ref: 319d10761884
Ref: library/curses curses BUTTONn_PRESSED10762268
Ref: 315d10762268
Ref: library/curses curses BUTTONn_RELEASED10762413
Ref: 315e10762413
Ref: library/curses curses BUTTONn_CLICKED10762557
Ref: 315f10762557
Ref: library/curses curses BUTTONn_DOUBLE_CLICKED10762678
Ref: 316010762678
Ref: library/curses curses BUTTONn_TRIPLE_CLICKED10762790
Ref: 316110762790
Ref: library/curses curses BUTTON_SHIFT10762922
Ref: 316210762922
Ref: library/curses curses BUTTON_CTRL10763082
Ref: 316310763082
Ref: library/curses curses BUTTON_ALT10763244
Ref: 316410763244
Ref: library/curses curses COLOR_BLACK10763690
Ref: 327410763690
Ref: library/curses curses COLOR_BLUE10763776
Ref: 327510763776
Ref: library/curses curses COLOR_CYAN10763873
Ref: 327610763873
Ref: library/curses curses COLOR_GREEN10763974
Ref: 327710763974
Ref: library/curses curses COLOR_MAGENTA10764042
Ref: 327810764042
Ref: library/curses curses COLOR_RED10764144
Ref: 327910764144
Ref: library/curses curses COLOR_WHITE10764223
Ref: 327a10764223
Ref: library/curses curses COLOR_YELLOW10764291
Ref: 327b10764291
Node: curses textpad — Text input widget for curses programs10764351
Ref: library/curses curses-textpad-text-input-widget-for-curses-programs10764637
Ref: 327c10764637
Ref: library/curses module-curses textpad10764637
Ref: 2e10764637
Ref: library/curses curses textpad rectangle10765225
Ref: 327e10765225
Node: Textbox objects10765948
Ref: library/curses curses-textpad-objects10766056
Ref: 327f10766056
Ref: library/curses textbox-objects10766056
Ref: 328010766056
Ref: library/curses curses textpad Textbox10766170
Ref: 327d10766170
Ref: library/curses curses textpad Textbox edit10766650
Ref: 328210766650
Ref: library/curses curses textpad Textbox do_command10767222
Ref: 328310767222
Ref: library/curses curses textpad Textbox gather10770953
Ref: 328410770953
Ref: library/curses curses textpad Textbox stripspaces10771147
Ref: 328110771147
Node: curses ascii — Utilitários para caracteres ASCII10771557
Ref: library/curses ascii doc10771828
Ref: 328510771828
Ref: library/curses ascii curses-ascii-utilities-for-ascii-characters10771828
Ref: 328610771828
Ref: library/curses ascii module-curses ascii10771828
Ref: 2c10771828
Ref: library/curses ascii translation-repo10771828
Ref: 328710771828
Ref: library/curses ascii curses ascii NUL10772467
Ref: 328810772467
Ref: library/curses ascii curses ascii SOH10772505
Ref: 328910772505
Ref: library/curses ascii curses ascii STX10772601
Ref: 328a10772601
Ref: library/curses ascii curses ascii ETX10772666
Ref: 328b10772666
Ref: library/curses ascii curses ascii EOT10772727
Ref: 328c10772727
Ref: library/curses ascii curses ascii ENQ10772795
Ref: 328d10772795
Ref: library/curses ascii curses ascii ACK10772938
Ref: 328e10772938
Ref: library/curses ascii curses ascii BEL10773000
Ref: 328f10773000
Ref: library/curses ascii curses ascii BS10773058
Ref: 329010773058
Ref: library/curses ascii curses ascii TAB10773115
Ref: 329110773115
Ref: library/curses ascii curses ascii HT10773175
Ref: 329210773175
Ref: library/curses ascii curses ascii LF10773322
Ref: 329310773322
Ref: library/curses ascii curses ascii NL10773407
Ref: 329410773407
Ref: library/curses ascii curses ascii VT10773501
Ref: 329510773501
Ref: library/curses ascii curses ascii FF10773569
Ref: 329610773569
Ref: library/curses ascii curses ascii CR10773660
Ref: 329710773660
Ref: library/curses ascii curses ascii SO10773745
Ref: 329810773745
Ref: library/curses ascii curses ascii SI10773916
Ref: 329910773916
Ref: library/curses ascii curses ascii DLE10774083
Ref: 329a10774083
Ref: library/curses ascii curses ascii DC110774172
Ref: 329b10774172
Ref: library/curses ascii curses ascii DC210774248
Ref: 329c10774248
Ref: library/curses ascii curses ascii DC310774394
Ref: 329d10774394
Ref: library/curses ascii curses ascii DC410774471
Ref: 329e10774471
Ref: library/curses ascii curses ascii NAK10774545
Ref: 329f10774545
Ref: library/curses ascii curses ascii SYN10774616
Ref: 32a010774616
Ref: library/curses ascii curses ascii ETB10774688
Ref: 32a110774688
Ref: library/curses ascii curses ascii CAN10774765
Ref: 32a210774765
Ref: library/curses ascii curses ascii EM10774822
Ref: 32a310774822
Ref: library/curses ascii curses ascii SUB10774883
Ref: 32a410774883
Ref: library/curses ascii curses ascii ESC10774942
Ref: 32a510774942
Ref: library/curses ascii curses ascii FS10774998
Ref: 32a610774998
Ref: library/curses ascii curses ascii GS10775067
Ref: 32a710775067
Ref: library/curses ascii curses ascii RS10775134
Ref: 32a810775134
Ref: library/curses ascii curses ascii US10775230
Ref: 32a910775230
Ref: library/curses ascii curses ascii SP10775299
Ref: 32aa10775299
Ref: library/curses ascii curses ascii DEL10775354
Ref: 32ab10775354
Ref: library/curses ascii curses ascii isalnum10775654
Ref: 32ac10775654
Ref: library/curses ascii curses ascii isalpha10775798
Ref: 32ad10775798
Ref: library/curses ascii curses ascii isascii10775940
Ref: 32ae10775940
Ref: library/curses ascii curses ascii isblank10776073
Ref: 32af10776073
Ref: library/curses ascii curses ascii iscntrl10776216
Ref: 32b010776216
Ref: library/curses ascii curses ascii isdigit10776353
Ref: 32b110776353
Ref: library/curses ascii curses ascii isgraph10776512
Ref: 32b210776512
Ref: library/curses ascii curses ascii islower10776625
Ref: 32b310776625
Ref: library/curses ascii curses ascii isprint10776718
Ref: 32b410776718
Ref: library/curses ascii curses ascii ispunct10776834
Ref: 32b510776834
Ref: library/curses ascii curses ascii isspace10776991
Ref: 32b610776991
Ref: library/curses ascii curses ascii isupper10777204
Ref: 32b710777204
Ref: library/curses ascii curses ascii isxdigit10777294
Ref: 32b810777294
Ref: library/curses ascii curses ascii isctrl10777437
Ref: 32b910777437
Ref: library/curses ascii curses ascii ismeta10777564
Ref: 32ba10777564
Ref: library/curses ascii curses ascii ascii10778200
Ref: 32bb10778200
Ref: library/curses ascii curses ascii ctrl10778312
Ref: 32bc10778312
Ref: library/curses ascii curses ascii alt10778505
Ref: 32bd10778505
Ref: library/curses ascii curses ascii unctrl10778809
Ref: 32be10778809
Ref: library/curses ascii curses ascii controlnames10779396
Ref: 32bf10779396
Ref: curses ascii — Utilitários para caracteres ASCII-Footnote-110779700
Node: curses panel — Uma extensão de pilha de painéis para o curses10779772
Ref: library/curses panel doc10780053
Ref: 32c010780053
Ref: library/curses panel curses-panel-a-panel-stack-extension-for-curses10780053
Ref: 32c110780053
Ref: library/curses panel module-curses panel10780053
Ref: 2d10780053
Ref: library/curses panel translation-repo10780053
Ref: 32c210780053
Node: Funções<7>10780596
Ref: library/curses panel cursespanel-functions10780733
Ref: 32c310780733
Ref: library/curses panel functions10780733
Ref: 32c410780733
Ref: library/curses panel curses panel bottom_panel10780836
Ref: 32c510780836
Ref: library/curses panel curses panel new_panel10780934
Ref: 32c610780934
Ref: library/curses panel curses panel top_panel10781257
Ref: 32c710781257
Ref: library/curses panel curses panel update_panels10781352
Ref: 32c810781352
Node: Objetos painel10781569
Ref: library/curses panel curses-panel-objects10781706
Ref: 32c910781706
Ref: library/curses panel panel-objects10781706
Ref: 32ca10781706
Ref: library/curses panel curses panel Panel above10782087
Ref: 32cb10782087
Ref: library/curses panel curses panel Panel below10782162
Ref: 32cc10782162
Ref: library/curses panel curses panel Panel bottom10782238
Ref: 32cd10782238
Ref: library/curses panel curses panel Panel hidden10782313
Ref: 32ce10782313
Ref: library/curses panel curses panel Panel hide10782446
Ref: 32cf10782446
Ref: library/curses panel curses panel Panel move10782572
Ref: 32d010782572
Ref: library/curses panel curses panel Panel replace10782666
Ref: 32d110782666
Ref: library/curses panel curses panel Panel set_userptr10782763
Ref: 32d210782763
Ref: library/curses panel curses panel Panel show10782976
Ref: 32d310782976
Ref: library/curses panel curses panel Panel top10783050
Ref: 32d410783050
Ref: library/curses panel curses panel Panel userptr10783121
Ref: 32d510783121
Ref: library/curses panel curses panel Panel window10783243
Ref: 32d610783243
Node: cmd — Suporte para interpretadores de comando orientado a linhas10783327
Ref: library/cmd doc10783548
Ref: 32d710783548
Ref: library/cmd cmd-support-for-line-oriented-command-interpreters10783548
Ref: 32d810783548
Ref: library/cmd module-cmd10783548
Ref: 1910783548
Ref: library/cmd translation-repo10783548
Ref: 32d910783548
Ref: library/cmd cmd Cmd10784088
Ref: 17b810784088
Ref: cmd — Suporte para interpretadores de comando orientado a linhas-Footnote-110785923
Node: Objetos Cmd10785986
Ref: library/cmd cmd-objects10786123
Ref: 32db10786123
Ref: library/cmd id110786123
Ref: 32dc10786123
Ref: library/cmd cmd Cmd cmdloop10786226
Ref: 32dd10786226
Ref: library/cmd cmd Cmd do_help10788514
Ref: 17a710788514
Ref: library/cmd cmd Cmd onecmd10789095
Ref: 32e010789095
Ref: library/cmd cmd Cmd emptyline10789711
Ref: 32e310789711
Ref: library/cmd cmd Cmd default10789922
Ref: 32e210789922
Ref: library/cmd cmd Cmd completedefault10790144
Ref: 32e410790144
Ref: library/cmd cmd Cmd columnize10790403
Ref: 199210790403
Ref: library/cmd cmd Cmd precmd10790668
Ref: 32e110790668
Ref: library/cmd cmd Cmd postcmd10791178
Ref: 32df10791178
Ref: library/cmd cmd Cmd preloop10791833
Ref: 32e510791833
Ref: library/cmd cmd Cmd postloop10792048
Ref: 32e610792048
Ref: library/cmd cmd Cmd prompt10792372
Ref: 32e710792372
Ref: library/cmd cmd Cmd identchars10792451
Ref: 32e810792451
Ref: library/cmd cmd Cmd lastcmd10792548
Ref: 32e910792548
Ref: library/cmd cmd Cmd cmdqueue10792628
Ref: 32ea10792628
Ref: library/cmd cmd Cmd intro10792930
Ref: 32de10792930
Ref: library/cmd cmd Cmd doc_header10793099
Ref: 32eb10793099
Ref: library/cmd cmd Cmd misc_header10793234
Ref: 32ec10793234
Ref: library/cmd cmd Cmd undoc_header10793461
Ref: 32ed10793461
Ref: library/cmd cmd Cmd ruler10793692
Ref: 32ee10793692
Ref: library/cmd cmd Cmd use_rawinput10793910
Ref: 32da10793910
Node: Exemplo do Cmd10794426
Ref: library/cmd cmd-example10794563
Ref: 32ef10794563
Ref: library/cmd id210794563
Ref: 32f010794563
Node: Execução Concorrente10800017
Ref: library/concurrency doc10800205
Ref: 32f210800205
Ref: library/concurrency concurrency10800205
Ref: 32f310800205
Ref: library/concurrency concurrent-execution10800205
Ref: 32f410800205
Ref: library/concurrency translation-repo10800205
Ref: 32f510800205
Node: threading — Paralelismo baseado em threads10801241
Ref: library/threading doc10801404
Ref: 32f610801404
Ref: library/threading module-threading10801404
Ref: ed10801404
Ref: library/threading threading-thread-based-parallelism10801404
Ref: 32f710801404
Ref: threading — Paralelismo baseado em threads-Footnote-110802197
Node: Introdução<8>10802266
Ref: library/threading introduction10802405
Ref: 32f810802405
Ref: Introdução<8>-Footnote-110805419
Node: GIL and performance considerations10805476
Ref: library/threading gil-and-performance-considerations10805638
Ref: 32f910805638
Ref: GIL and performance considerations-Footnote-110806443
Node: Referência<2>10806485
Ref: library/threading reference10806691
Ref: 32fa10806691
Ref: library/threading threading active_count10806778
Ref: 30a10806778
Ref: library/threading threading current_thread10807071
Ref: 30910807071
Ref: library/threading threading excepthook10807468
Ref: 84e10807468
Ref: library/threading threading __excepthook__10808890
Ref: 84d10808890
Ref: library/threading threading get_ident10809167
Ref: 119910809167
Ref: library/threading threading get_native_id10809629
Ref: a4710809629
Ref: library/threading threading enumerate10810239
Ref: 19e510810239
Ref: library/threading threading main_thread10810623
Ref: 100810810623
Ref: library/threading threading settrace10810855
Ref: 84b10810855
Ref: library/threading threading settrace_all_threads10811112
Ref: 4c810811112
Ref: library/threading threading gettrace10811472
Ref: 84910811472
Ref: library/threading threading setprofile10811618
Ref: 84c10811618
Ref: library/threading threading setprofile_all_threads10811881
Ref: 4c910811881
Ref: library/threading threading getprofile10812247
Ref: 84a10812247
Ref: library/threading threading stack_size10812417
Ref: 32fb10812417
Ref: library/threading threading TIMEOUT_MAX10813902
Ref: 32fc10813902
Node: Thread-local data10815126
Ref: library/threading thread-local-data10815217
Ref: 32fd10815217
Ref: library/threading threading local10818331
Ref: 163110818331
Node: Thread objects10818409
Ref: library/threading id110818521
Ref: 32fe10818521
Ref: library/threading thread-objects10818521
Ref: 32ff10818521
Ref: library/threading threading Thread10821199
Ref: 95310821199
Ref: library/threading threading Thread start10822656
Ref: 2e9010822656
Ref: library/threading threading Thread run10823034
Ref: a4610823034
Ref: library/threading meth-thread-join10823847
Ref: 330010823847
Ref: library/threading threading Thread join10823847
Ref: 122410823847
Ref: library/threading threading Thread name10825119
Ref: 30810825119
Ref: library/threading threading Thread getName10825336
Ref: 330110825336
Ref: library/threading threading Thread setName10825365
Ref: 30710825365
Ref: library/threading threading Thread ident10825553
Ref: 2e1610825553
Ref: library/threading threading Thread native_id10825944
Ref: a4810825944
Ref: library/threading threading Thread is_alive10826764
Ref: 95410826764
Ref: library/threading threading Thread daemon10827103
Ref: 30610827103
Ref: library/threading threading Thread isDaemon10827696
Ref: 330210827696
Ref: library/threading threading Thread setDaemon10827726
Ref: 30510827726
Node: Lock objects10827918
Ref: library/threading id210828026
Ref: 330310828026
Ref: library/threading lock-objects10828026
Ref: 330410828026
Ref: library/threading threading Lock10829443
Ref: 176d10829443
Ref: library/threading threading Lock acquire10829848
Ref: 69810829848
Ref: library/threading threading Lock release10831185
Ref: 130510831185
Ref: library/threading threading Lock locked10831671
Ref: 330610831671
Node: RLock objects10831754
Ref: library/threading id310831865
Ref: 330710831865
Ref: library/threading rlock-objects10831865
Ref: 330810831865
Ref: library/threading threading RLock10833234
Ref: 2de10833234
Ref: library/threading threading RLock acquire10833757
Ref: eaa10833757
Ref: library/threading threading RLock release10835748
Ref: 330910835748
Node: Condition objects10836446
Ref: library/threading condition-objects10836562
Ref: 330a10836562
Ref: library/threading id410836562
Ref: 330b10836562
Ref: library/threading threading Condition10839681
Ref: 119410839681
Ref: library/threading threading Condition acquire10840226
Ref: 330c10840226
Ref: library/threading threading Condition release10840439
Ref: 330d10840439
Ref: library/threading threading Condition wait10840623
Ref: 19f110840623
Ref: library/threading threading Condition wait_for10842156
Ref: 330e10842156
Ref: library/threading threading Condition notify10843136
Ref: 18f110843136
Ref: library/threading threading Condition notify_all10844039
Ref: 30310844039
Node: Semaphore objects10844456
Ref: library/threading id510844576
Ref: 330f10844576
Ref: library/threading semaphore-objects10844576
Ref: 331010844576
Ref: library/threading threading Semaphore10845275
Ref: 119510845275
Ref: library/threading threading Semaphore acquire10845968
Ref: 129510845968
Ref: library/threading threading Semaphore release10847265
Ref: 331110847265
Ref: library/threading threading BoundedSemaphore10847644
Ref: 119610847644
Node: Semaphore example10848177
Ref: library/threading semaphore-example10848293
Ref: 331210848293
Ref: library/threading semaphore-examples10848293
Ref: 331310848293
Node: Event objects10849164
Ref: library/threading event-objects10849276
Ref: 331410849276
Ref: library/threading id610849276
Ref: 331510849276
Ref: library/threading threading Event10849680
Ref: 119710849680
Ref: library/threading threading Event is_set10850078
Ref: 30410850078
Ref: library/threading threading Event set10850251
Ref: 331610850251
Ref: library/threading threading Event clear10850480
Ref: 331710850480
Ref: library/threading threading Event wait10850710
Ref: 136b10850710
Node: Timer objects10851442
Ref: library/threading id710851552
Ref: 331810851552
Ref: library/threading timer-objects10851552
Ref: 331910851552
Ref: library/threading threading Timer10852316
Ref: 119810852316
Ref: library/threading threading Timer cancel10852767
Ref: 331a10852767
Node: Barrier objects10852958
Ref: library/threading barrier-objects10853046
Ref: 331b10853046
Ref: library/threading threading Barrier10854008
Ref: 122310854008
Ref: library/threading threading Barrier wait10854353
Ref: 331c10854353
Ref: library/threading threading Barrier reset10855502
Ref: 331d10855502
Ref: library/threading threading Barrier abort10855940
Ref: 331e10855940
Ref: library/threading threading Barrier parties10856431
Ref: 331f10856431
Ref: library/threading threading Barrier n_waiting10856522
Ref: 332010856522
Ref: library/threading threading Barrier broken10856619
Ref: 332110856619
Ref: library/threading threading BrokenBarrierError10856735
Ref: 122510856735
Node: Using locks conditions and semaphores in the with statement10856913
Ref: library/threading using-locks-conditions-and-semaphores-in-the-with-statement10857076
Ref: 332210857076
Ref: library/threading with-locks10857076
Ref: 330510857076
Node: multiprocessing — Paralelismo baseado em processo10857917
Ref: library/multiprocessing doc10858180
Ref: 332310858180
Ref: library/multiprocessing module-multiprocessing10858180
Ref: 9410858180
Ref: library/multiprocessing multiprocessing-process-based-parallelism10858180
Ref: 332410858180
Ref: library/multiprocessing translation-repo10858180
Ref: 332510858180
Ref: multiprocessing — Paralelismo baseado em processo-Footnote-110858748
Node: Introdução<9>10858821
Ref: library/multiprocessing introduction10858947
Ref: 332610858947
Node: A classe Process10861113
Ref: library/multiprocessing the-process-class10861229
Ref: 332810861229
Node: Contextos e métodos de inicialização10862727
Ref: library/multiprocessing contexts-and-start-methods10862884
Ref: 332a10862884
Ref: library/multiprocessing multiprocessing-start-methods10862884
Ref: 2c810862884
Ref: library/multiprocessing multiprocessing-start-method-spawn10863122
Ref: 332b10863122
Ref: library/multiprocessing multiprocessing-start-method-fork10863697
Ref: 332d10863697
Ref: library/multiprocessing multiprocessing-start-method-forkserver10864843
Ref: 332e10864843
Ref: Contextos e métodos de inicialização-Footnote-110869090
Node: Trocando objetos entre processos10869155
Ref: library/multiprocessing exchanging-objects-between-processes10869327
Ref: 332f10869327
Node: Sincronização entre processos10871302
Ref: library/multiprocessing synchronization-between-processes10871472
Ref: 333110871472
Node: Compartilhando estado entre processos10872197
Ref: library/multiprocessing sharing-state-between-processes10872360
Ref: 333210872360
Node: Usando um pool de workers10875766
Ref: library/multiprocessing using-a-pool-of-workers10875889
Ref: 333a10875889
Node: Referência<3>10879236
Ref: library/multiprocessing reference10879393
Ref: 333b10879393
Node: Global start method10879944
Ref: library/multiprocessing global-start-method10880043
Ref: 333c10880043
Ref: library/multiprocessing id110880043
Ref: 333d10880043
Node: Process e exceções10880662
Ref: library/multiprocessing process-and-exceptions10880791
Ref: 333e10880791
Ref: library/multiprocessing multiprocessing Process10880860
Ref: b6f10880860
Ref: library/multiprocessing multiprocessing Process run10884122
Ref: 332c10884122
Ref: library/multiprocessing multiprocessing Process start10884938
Ref: 13d810884938
Ref: library/multiprocessing multiprocessing Process join10885202
Ref: 13da10885202
Ref: library/multiprocessing multiprocessing Process name10885960
Ref: 333f10885960
Ref: library/multiprocessing multiprocessing Process is_alive10886427
Ref: 13d910886427
Ref: library/multiprocessing multiprocessing Process daemon10886681
Ref: 334010886681
Ref: library/multiprocessing multiprocessing Process pid10887630
Ref: 334310887630
Ref: library/multiprocessing multiprocessing Process exitcode10887755
Ref: 334210887755
Ref: library/multiprocessing multiprocessing Process authkey10888390
Ref: 334410888390
Ref: library/multiprocessing multiprocessing Process sentinel10888943
Ref: 112010888943
Ref: library/multiprocessing multiprocessing Process terminate10889686
Ref: 332710889686
Ref: library/multiprocessing multiprocessing Process kill10890567
Ref: b6d10890567
Ref: library/multiprocessing multiprocessing Process close10890733
Ref: b6c10890733
Ref: library/multiprocessing multiprocessing ProcessError10892067
Ref: 334610892067
Ref: library/multiprocessing multiprocessing BufferTooShort10892185
Ref: 334710892185
Ref: library/multiprocessing multiprocessing AuthenticationError10892517
Ref: 334810892517
Ref: library/multiprocessing multiprocessing TimeoutError10892623
Ref: 334910892623
Ref: Process e exceções-Footnote-110892788
Node: Encadeamentos e filas10892844
Ref: library/multiprocessing pipes-and-queues10892965
Ref: 334a10892965
Ref: library/multiprocessing multiprocessing Pipe10897013
Ref: 333010897013
Ref: library/multiprocessing multiprocessing Queue10897590
Ref: 191410897590
Ref: library/multiprocessing multiprocessing Queue qsize10898384
Ref: 335510898384
Ref: library/multiprocessing multiprocessing Queue empty10898746
Ref: 16e610898746
Ref: library/multiprocessing multiprocessing Queue full10899069
Ref: 335610899069
Ref: library/multiprocessing multiprocessing Queue put10899285
Ref: 1bb410899285
Ref: library/multiprocessing multiprocessing Queue put_nowait10900172
Ref: 335710900172
Ref: library/multiprocessing multiprocessing Queue get10900256
Ref: 1bb510900256
Ref: library/multiprocessing multiprocessing Queue get_nowait10901116
Ref: 335210901116
Ref: library/multiprocessing multiprocessing Queue close10901396
Ref: 191510901396
Ref: library/multiprocessing multiprocessing Queue join_thread10901851
Ref: 335810901851
Ref: library/multiprocessing multiprocessing Queue cancel_join_thread10902446
Ref: 335310902446
Ref: library/multiprocessing multiprocessing SimpleQueue10903683
Ref: 91a10903683
Ref: library/multiprocessing multiprocessing SimpleQueue close10903952
Ref: 91b10903952
Ref: library/multiprocessing multiprocessing SimpleQueue empty10904270
Ref: 16e710904270
Ref: library/multiprocessing multiprocessing SimpleQueue get10904482
Ref: 335910904482
Ref: library/multiprocessing multiprocessing SimpleQueue put10904553
Ref: 335a10904553
Ref: library/multiprocessing multiprocessing JoinableQueue10904617
Ref: 334b10904617
Ref: library/multiprocessing multiprocessing JoinableQueue task_done10904966
Ref: 334e10904966
Ref: library/multiprocessing multiprocessing JoinableQueue join10905734
Ref: 335b10905734
Ref: Encadeamentos e filas-Footnote-110906281
Node: Diversos<4>10906345
Ref: library/multiprocessing miscellaneous10906465
Ref: 335c10906465
Ref: library/multiprocessing multiprocessing active_children10906504
Ref: 335d10906504
Ref: library/multiprocessing multiprocessing cpu_count10906736
Ref: fa310906736
Ref: library/multiprocessing multiprocessing current_process10907523
Ref: 335e10907523
Ref: library/multiprocessing multiprocessing parent_process10907715
Ref: 335f10907715
Ref: library/multiprocessing multiprocessing freeze_support10907982
Ref: 162810907982
Ref: library/multiprocessing multiprocessing get_all_start_methods10908973
Ref: f9d10908973
Ref: library/multiprocessing multiprocessing get_context10909380
Ref: 2c610909380
Ref: library/multiprocessing multiprocessing get_start_method10910048
Ref: f9e10910048
Ref: library/multiprocessing multiprocessing set_executable10910860
Ref: 191b10910860
Ref: library/multiprocessing multiprocessing set_forkserver_preload10911462
Ref: 168110911462
Ref: library/multiprocessing multiprocessing set_start_method10912285
Ref: 2c710912285
Ref: Diversos<4>-Footnote-110913460
Node: Objetos de conexão10913525
Ref: library/multiprocessing connection-objects10913653
Ref: 336010913653
Ref: library/multiprocessing multiprocessing connection Connection10914020
Ref: 111f10914020
Ref: library/multiprocessing multiprocessing connection Connection send10914071
Ref: 336210914071
Ref: library/multiprocessing multiprocessing connection Connection recv10914474
Ref: 336310914474
Ref: library/multiprocessing multiprocessing connection Connection fileno10914801
Ref: 336410914801
Ref: library/multiprocessing multiprocessing connection Connection close10914920
Ref: 336510914920
Ref: library/multiprocessing multiprocessing connection Connection poll10915071
Ref: 336610915071
Ref: library/multiprocessing multiprocessing connection Connection send_bytes10915599
Ref: 336710915599
Ref: library/multiprocessing multiprocessing connection Connection recv_bytes10916118
Ref: 336810916118
Ref: library/multiprocessing multiprocessing connection Connection recv_bytes_into10916810
Ref: 336910916810
Ref: library/multiprocessing multiprocessing-recv-pickle-security10918736
Ref: 336a10918736
Node: Primitivas de sincronização10919515
Ref: library/multiprocessing synchronization-primitives10919661
Ref: 336b10919661
Ref: library/multiprocessing multiprocessing Barrier10920065
Ref: 333910920065
Ref: library/multiprocessing multiprocessing BoundedSemaphore10920363
Ref: 333710920363
Ref: library/multiprocessing multiprocessing Condition10921020
Ref: 333810921020
Ref: library/multiprocessing multiprocessing Event10921503
Ref: 198f10921503
Ref: library/multiprocessing multiprocessing Lock10921710
Ref: 168310921710
Ref: library/multiprocessing multiprocessing Lock acquire10922788
Ref: 336c10922788
Ref: library/multiprocessing multiprocessing Lock release10924451
Ref: 336d10924451
Ref: library/multiprocessing multiprocessing RLock10924848
Ref: 168410924848
Ref: library/multiprocessing multiprocessing RLock acquire10925776
Ref: 336e10925776
Ref: library/multiprocessing multiprocessing RLock release10927540
Ref: 336f10927540
Ref: library/multiprocessing multiprocessing Semaphore10928626
Ref: 333610928626
Ref: Primitivas de sincronização-Footnote-110929692
Node: Objetos ctypes compartilhados10929756
Ref: library/multiprocessing shared-ctypes-objects10929896
Ref: 337010929896
Ref: library/multiprocessing multiprocessing Value10930101
Ref: 333310930101
Ref: library/multiprocessing multiprocessing Array10931600
Ref: 333410931600
Node: O módulo multiprocessing sharedctypes10933270
Ref: library/multiprocessing module-multiprocessing sharedctypes10933374
Ref: 9a10933374
Ref: library/multiprocessing the-multiprocessing-sharedctypes-module10933374
Ref: 337110933374
Ref: library/multiprocessing multiprocessing sharedctypes RawArray10934041
Ref: 337210934041
Ref: library/multiprocessing multiprocessing sharedctypes RawValue10934879
Ref: 337410934879
Ref: library/multiprocessing multiprocessing sharedctypes Array10935650
Ref: 337310935650
Ref: library/multiprocessing multiprocessing sharedctypes Value10936699
Ref: 337510936699
Ref: library/multiprocessing multiprocessing sharedctypes copy10937729
Ref: 337610937729
Ref: library/multiprocessing multiprocessing sharedctypes synchronized10937896
Ref: e5e10937896
Node: Gerenciadores10941159
Ref: library/multiprocessing managers10941285
Ref: 337710941285
Ref: library/multiprocessing multiprocessing-managers10941285
Ref: 334f10941285
Ref: library/multiprocessing multiprocessing Manager10941645
Ref: cda10941645
Ref: library/multiprocessing module-multiprocessing managers10941992
Ref: 9710941992
Ref: library/multiprocessing multiprocessing managers BaseManager10942181
Ref: 337910942181
Ref: library/multiprocessing multiprocessing managers BaseManager start10943708
Ref: 337a10943708
Ref: library/multiprocessing multiprocessing managers BaseManager get_server10943944
Ref: 337c10943944
Ref: library/multiprocessing multiprocessing managers BaseManager connect10944489
Ref: 337e10944489
Ref: library/multiprocessing multiprocessing managers BaseManager shutdown10944771
Ref: 337b10944771
Ref: library/multiprocessing multiprocessing managers BaseManager register10945008
Ref: 337f10945008
Ref: library/multiprocessing multiprocessing managers BaseManager address10947324
Ref: 337d10947324
Ref: library/multiprocessing multiprocessing managers SyncManager10947865
Ref: 337810947865
Ref: library/multiprocessing multiprocessing managers SyncManager Barrier10948308
Ref: 338210948308
Ref: library/multiprocessing multiprocessing managers SyncManager BoundedSemaphore10948506
Ref: 338310948506
Ref: library/multiprocessing multiprocessing managers SyncManager Condition10948663
Ref: 338410948663
Ref: library/multiprocessing multiprocessing managers SyncManager Event10949043
Ref: 338510949043
Ref: library/multiprocessing multiprocessing managers SyncManager Lock10949171
Ref: 13de10949171
Ref: library/multiprocessing multiprocessing managers SyncManager Namespace10949297
Ref: 338610949297
Ref: library/multiprocessing multiprocessing managers SyncManager Queue10949423
Ref: 2eaa10949423
Ref: library/multiprocessing multiprocessing managers SyncManager RLock10949556
Ref: 13df10949556
Ref: library/multiprocessing multiprocessing managers SyncManager Semaphore10949683
Ref: 13e010949683
Ref: library/multiprocessing multiprocessing managers SyncManager Array10949826
Ref: 338710949826
Ref: library/multiprocessing multiprocessing managers SyncManager Value10949926
Ref: 338810949926
Ref: library/multiprocessing multiprocessing managers SyncManager dict10950072
Ref: 338910950072
Ref: library/multiprocessing multiprocessing managers SyncManager list10950256
Ref: 338a10950256
Ref: library/multiprocessing multiprocessing managers Namespace10950696
Ref: 333510950696
Node: Customized managers10951537
Ref: library/multiprocessing customized-managers10951637
Ref: 338b10951637
Node: Using a remote manager10952409
Ref: library/multiprocessing using-a-remote-manager10952509
Ref: 338c10952509
Node: Objetos proxies10954650
Ref: library/multiprocessing multiprocessing-proxy-objects10954760
Ref: cd910954760
Ref: library/multiprocessing proxy-objects10954760
Ref: 338d10954760
Ref: library/multiprocessing multiprocessing managers BaseProxy10958232
Ref: 338010958232
Ref: library/multiprocessing multiprocessing managers BaseProxy _callmethod10958354
Ref: 338110958354
Ref: library/multiprocessing multiprocessing managers BaseProxy _getvalue10959936
Ref: 338e10959936
Ref: library/multiprocessing multiprocessing managers BaseProxy __repr__10960097
Ref: 338f10960097
Ref: library/multiprocessing multiprocessing managers BaseProxy __str__10960184
Ref: 339010960184
Node: Limpeza<2>10960301
Ref: library/multiprocessing cleanup10960363
Ref: 339110960363
Node: Process Pools10960652
Ref: library/multiprocessing module-multiprocessing pool10960770
Ref: 9810960770
Ref: library/multiprocessing process-pools10960770
Ref: 339210960770
Ref: library/multiprocessing multiprocessing pool Pool10960931
Ref: f9f10960931
Ref: library/multiprocessing multiprocessing pool Pool apply10963943
Ref: 13dc10963943
Ref: library/multiprocessing multiprocessing pool Pool apply_async10964315
Ref: 13dd10964315
Ref: library/multiprocessing multiprocessing pool Pool map10965168
Ref: 112410965168
Ref: library/multiprocessing multiprocessing pool Pool map_async10965954
Ref: 112510965954
Ref: library/multiprocessing multiprocessing pool Pool imap10966810
Ref: 339610966810
Ref: library/multiprocessing multiprocessing pool Pool imap_unordered10967523
Ref: 339710967523
Ref: library/multiprocessing multiprocessing pool Pool starmap10967850
Ref: 112110967850
Ref: library/multiprocessing multiprocessing pool Pool starmap_async10968211
Ref: 112210968211
Ref: library/multiprocessing multiprocessing pool Pool close10968572
Ref: 339310968572
Ref: library/multiprocessing multiprocessing pool Pool terminate10968760
Ref: 339410968760
Ref: library/multiprocessing multiprocessing pool Pool join10968995
Ref: 339810968995
Ref: library/multiprocessing multiprocessing pool AsyncResult10969456
Ref: 339510969456
Ref: library/multiprocessing multiprocessing pool AsyncResult get10969615
Ref: 339910969615
Ref: library/multiprocessing multiprocessing pool AsyncResult wait10969981
Ref: 339a10969981
Ref: library/multiprocessing multiprocessing pool AsyncResult ready10970106
Ref: 339b10970106
Ref: library/multiprocessing multiprocessing pool AsyncResult successful10970184
Ref: 339c10970184
Node: Listeners and Clients10971479
Ref: library/multiprocessing listeners-and-clients10971601
Ref: 339d10971601
Ref: library/multiprocessing module-multiprocessing connection10971601
Ref: 9510971601
Ref: library/multiprocessing multiprocessing-listeners-clients10971601
Ref: 336110971601
Ref: library/multiprocessing multiprocessing connection deliver_challenge10972137
Ref: 339e10972137
Ref: library/multiprocessing multiprocessing connection answer_challenge10972543
Ref: 339f10972543
Ref: library/multiprocessing multiprocessing connection Client10972857
Ref: 33a010972857
Ref: library/multiprocessing multiprocessing connection Listener10973628
Ref: 179e10973628
Ref: library/multiprocessing multiprocessing connection Listener accept10975411
Ref: 175610975411
Ref: library/multiprocessing multiprocessing connection Listener close10975694
Ref: 33a210975694
Ref: library/multiprocessing multiprocessing connection Listener address10975995
Ref: 33a310975995
Ref: library/multiprocessing multiprocessing connection Listener last_accepted10976090
Ref: 33a410976090
Ref: library/multiprocessing multiprocessing connection wait10976521
Ref: 111e10976521
Node: Formatos de Endereços10980552
Ref: library/multiprocessing address-formats10980632
Ref: 33a510980632
Ref: library/multiprocessing multiprocessing-address-formats10980632
Ref: 33a110980632
Node: Authentication keys10981357
Ref: library/multiprocessing authentication-keys10981481
Ref: 33a610981481
Ref: library/multiprocessing multiprocessing-auth-keys10981481
Ref: 334510981481
Node: Gerando logs<2>10982665
Ref: library/multiprocessing logging10982800
Ref: 33a710982800
Ref: library/multiprocessing multiprocessing get_logger10983078
Ref: 2f0510983078
Ref: library/multiprocessing multiprocessing log_to_stderr10983597
Ref: 33a810983597
Node: The multiprocessing dummy module10984704
Ref: library/multiprocessing module-multiprocessing dummy10984811
Ref: 9610984811
Ref: library/multiprocessing the-multiprocessing-dummy-module10984811
Ref: 33a910984811
Ref: library/multiprocessing multiprocessing pool ThreadPool10985335
Ref: 1a6010985335
Node: Programming guidelines10987095
Ref: library/multiprocessing multiprocessing-programming10987249
Ref: 332910987249
Ref: library/multiprocessing programming-guidelines10987249
Ref: 33aa10987249
Node: All start methods10987497
Ref: library/multiprocessing all-start-methods10987620
Ref: 33ab10987620
Ref: library/multiprocessing multiprocessing-programming-spawn10993680
Ref: 334110993680
Ref: All start methods-Footnote-110993717
Ref: All start methods-Footnote-210993781
Ref: All start methods-Footnote-310993845
Node: The spawn and forkserver start methods10993909
Ref: library/multiprocessing multiprocessing-programming-forkserver10994032
Ref: 33ac10994032
Ref: library/multiprocessing the-spawn-and-forkserver-start-methods10994032
Ref: 33ad10994032
Ref: library/multiprocessing multiprocessing-safe-main-import10994838
Ref: 33ae10994838
Node: Exemplos<14>10996113
Ref: library/multiprocessing examples10996244
Ref: 33af10996244
Ref: library/multiprocessing multiprocessing-examples10996244
Ref: 335410996244
Node: multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos11005155
Ref: library/multiprocessing shared_memory doc11005393
Ref: 33b011005393
Ref: library/multiprocessing shared_memory module-multiprocessing shared_memory11005393
Ref: 9911005393
Ref: library/multiprocessing shared_memory multiprocessing-shared-memory-shared-memory-for-direct-access-across-processes11005393
Ref: 33b111005393
Ref: library/multiprocessing shared_memory translation-repo11005393
Ref: 33b211005393
Ref: library/multiprocessing shared_memory multiprocessing shared_memory SharedMemory11007167
Ref: 174f11007167
Ref: library/multiprocessing shared_memory multiprocessing shared_memory SharedMemory close11010960
Ref: 33b411010960
Ref: library/multiprocessing shared_memory multiprocessing shared_memory SharedMemory unlink11011518
Ref: 33b511011518
Ref: library/multiprocessing shared_memory multiprocessing shared_memory SharedMemory buf11012263
Ref: 33b611012263
Ref: library/multiprocessing shared_memory multiprocessing shared_memory SharedMemory name11012388
Ref: 33b711012388
Ref: library/multiprocessing shared_memory multiprocessing shared_memory SharedMemory size11012508
Ref: 33b811012508
Ref: library/multiprocessing shared_memory multiprocessing managers SharedMemoryManager11015718
Ref: 33b311015718
Ref: library/multiprocessing shared_memory multiprocessing managers SharedMemoryManager SharedMemory11017285
Ref: 33b911017285
Ref: library/multiprocessing shared_memory multiprocessing managers SharedMemoryManager ShareableList11017437
Ref: 33ba11017437
Ref: library/multiprocessing shared_memory multiprocessing shared_memory ShareableList11019392
Ref: 1ae711019392
Ref: library/multiprocessing shared_memory multiprocessing shared_memory ShareableList count11022043
Ref: 33bb11022043
Ref: library/multiprocessing shared_memory multiprocessing shared_memory ShareableList index11022133
Ref: 33bc11022133
Ref: library/multiprocessing shared_memory multiprocessing shared_memory ShareableList format11022305
Ref: 33bd11022305
Ref: library/multiprocessing shared_memory multiprocessing shared_memory ShareableList shm11022493
Ref: 33be11022493
Ref: multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos-Footnote-111025112
Ref: multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos-Footnote-211025202
Ref: multiprocessing shared_memory — Memória compartilhada para acesso direto entre processos-Footnote-311025229
Node: O pacote concurrent11025285
Ref: library/concurrent doc11025519
Ref: 33bf11025519
Ref: library/concurrent the-concurrent-package11025519
Ref: 33c011025519
Ref: library/concurrent translation-repo11025519
Ref: 33c111025519
Node: concurrent futures — Launching parallel tasks11025701
Ref: library/concurrent futures doc11025888
Ref: 33c211025888
Ref: library/concurrent futures concurrent-futures-launching-parallel-tasks11025888
Ref: 33c311025888
Ref: library/concurrent futures module-concurrent futures11025888
Ref: 2111025888
Ref: library/concurrent futures translation-repo11025888
Ref: 33c411025888
Ref: concurrent futures — Launching parallel tasks-Footnote-111027175
Ref: concurrent futures — Launching parallel tasks-Footnote-211027261
Node: Executor Objects11027348
Ref: library/concurrent futures executor-objects11027475
Ref: 33c711027475
Ref: library/concurrent futures concurrent futures Executor11027528
Ref: 33c511027528
Ref: library/concurrent futures concurrent futures Executor submit11027728
Ref: a8c11027728
Ref: library/concurrent futures concurrent futures Executor map11028139
Ref: e0e11028139
Ref: library/concurrent futures concurrent futures Executor shutdown11029598
Ref: 8f311029598
Node: ThreadPoolExecutor11031768
Ref: library/concurrent futures threadpoolexecutor11031923
Ref: 33c811031923
Ref: library/concurrent futures concurrent futures ThreadPoolExecutor11032993
Ref: 74211032993
Node: Exemplo de ThreadPoolExecutor11035377
Ref: library/concurrent futures id111035461
Ref: 33ca11035461
Ref: library/concurrent futures threadpoolexecutor-example11035461
Ref: 11f211035461
Node: ProcessPoolExecutor11036675
Ref: library/concurrent futures processpoolexecutor11036828
Ref: 33cb11036828
Ref: library/concurrent futures concurrent futures ProcessPoolExecutor11037853
Ref: 8f411037853
Ref: ProcessPoolExecutor-Footnote-111041761
Node: ProcessPoolExecutor Example11041817
Ref: library/concurrent futures id211041900
Ref: 33cd11041900
Ref: library/concurrent futures processpoolexecutor-example11041900
Ref: 11f311041900
Node: Future Objects11042806
Ref: library/concurrent futures future-objects11042957
Ref: 33ce11042957
Ref: library/concurrent futures concurrent futures Future11043168
Ref: 11f111043168
Ref: library/concurrent futures concurrent futures Future cancel11043409
Ref: 33cf11043409
Ref: library/concurrent futures concurrent futures Future cancelled11043709
Ref: 33d011043709
Ref: library/concurrent futures concurrent futures Future running11043810
Ref: 33d111043810
Ref: library/concurrent futures concurrent futures Future done11043944
Ref: 33d211043944
Ref: library/concurrent futures concurrent futures Future result11044070
Ref: 33d311044070
Ref: library/concurrent futures concurrent futures Future exception11044728
Ref: 33d411044728
Ref: library/concurrent futures concurrent futures Future add_done_callback11045369
Ref: 33d511045369
Ref: library/concurrent futures concurrent futures Future set_running_or_notify_cancel11046208
Ref: 33d611046208
Ref: library/concurrent futures concurrent futures Future set_result11047196
Ref: 33d711047196
Ref: library/concurrent futures concurrent futures Future set_exception11047616
Ref: 33d811047616
Node: Module Functions11048071
Ref: library/concurrent futures module-functions11048220
Ref: 33d911048220
Ref: library/concurrent futures concurrent futures wait11048273
Ref: 198e11048273
Ref: library/concurrent futures concurrent futures FIRST_COMPLETED11049593
Ref: 33da11049593
Ref: library/concurrent futures concurrent futures FIRST_EXCEPTION11049910
Ref: 33db11049910
Ref: library/concurrent futures concurrent futures ALL_COMPLETED11050431
Ref: 33dc11050431
Ref: library/concurrent futures concurrent futures as_completed11050647
Ref: 173e11050647
Ref: Module Functions-Footnote-111051686
Node: Exception classes11051728
Ref: library/concurrent futures exception-classes11051854
Ref: 33dd11051854
Ref: library/concurrent futures concurrent futures CancelledError11051909
Ref: 9e311051909
Ref: library/concurrent futures concurrent futures TimeoutError11052000
Ref: 33de11052000
Ref: library/concurrent futures concurrent futures BrokenExecutor11052267
Ref: 33df11052267
Ref: library/concurrent futures concurrent futures InvalidStateError11052530
Ref: 16f711052530
Ref: library/concurrent futures concurrent futures thread BrokenThreadPool11052719
Ref: 33c911052719
Ref: library/concurrent futures concurrent futures process BrokenProcessPool11052984
Ref: 33cc11052984
Node: subprocess — Gerenciamento de subprocessos11053357
Ref: library/subprocess doc11053555
Ref: 33e011053555
Ref: library/subprocess module-subprocess11053555
Ref: d611053555
Ref: library/subprocess subprocess-subprocess-management11053555
Ref: 33e111053555
Ref: library/subprocess translation-repo11053555
Ref: 33e211053555
Ref: subprocess — Gerenciamento de subprocessos-Footnote-111054750
Ref: subprocess — Gerenciamento de subprocessos-Footnote-211054820
Node: Usando o módulo subprocess11054862
Ref: library/subprocess using-the-subprocess-module11055008
Ref: 33e311055008
Ref: library/subprocess subprocess run11055334
Ref: b9e11055334
Ref: library/subprocess subprocess CompletedProcess11060175
Ref: ea211060175
Ref: library/subprocess subprocess CompletedProcess args11060313
Ref: 33e611060313
Ref: library/subprocess subprocess CompletedProcess returncode11060440
Ref: 33e711060440
Ref: library/subprocess subprocess CompletedProcess stdout11060717
Ref: 33e811060717
Ref: library/subprocess subprocess CompletedProcess stderr11061164
Ref: 33e911061164
Ref: library/subprocess subprocess CompletedProcess check_returncode11061425
Ref: 33ea11061425
Ref: library/subprocess subprocess DEVNULL11061611
Ref: 118d11061611
Ref: library/subprocess subprocess PIPE11061863
Ref: b9f11061863
Ref: library/subprocess subprocess STDOUT11062131
Ref: 33e511062131
Ref: library/subprocess subprocess SubprocessError11062342
Ref: 33eb11062342
Ref: library/subprocess subprocess TimeoutExpired11062483
Ref: 15ce11062483
Ref: library/subprocess subprocess TimeoutExpired cmd11062657
Ref: 33ec11062657
Ref: library/subprocess subprocess TimeoutExpired timeout11062743
Ref: 33ed11062743
Ref: library/subprocess subprocess TimeoutExpired output11062808
Ref: 33ee11062808
Ref: library/subprocess subprocess TimeoutExpired stdout11063227
Ref: 33ef11063227
Ref: library/subprocess subprocess TimeoutExpired stderr11063326
Ref: 33f011063326
Ref: library/subprocess subprocess CalledProcessError11063853
Ref: 136911063853
Ref: library/subprocess subprocess CalledProcessError returncode11064149
Ref: 33f211064149
Ref: library/subprocess subprocess CalledProcessError cmd11064335
Ref: 33f311064335
Ref: library/subprocess subprocess CalledProcessError output11064421
Ref: 33f411064421
Ref: library/subprocess subprocess CalledProcessError stdout11064597
Ref: 33f511064597
Ref: library/subprocess subprocess CalledProcessError stderr11064696
Ref: 33f611064696
Node: Argumentos usados frequentemente11065028
Ref: library/subprocess frequently-used-arguments11065149
Ref: 33e411065149
Ref: library/subprocess id111065149
Ref: 33f711065149
Node: Construtor Popen11069700
Ref: library/subprocess popen-constructor11069844
Ref: 33fc11069844
Ref: library/subprocess subprocess Popen11070165
Ref: 19911070165
Ref: Construtor Popen-Footnote-111088615
Node: Exceções<11>11088675
Ref: library/subprocess exceptions11088778
Ref: 340d11088778
Node: Considerações de Segurança11090086
Ref: library/subprocess security-considerations11090254
Ref: 33fb11090254
Ref: library/subprocess subprocess-security11090254
Ref: 340e11090254
Ref: Considerações de Segurança-Footnote-111091379
Ref: Considerações de Segurança-Footnote-211091449
Node: Objetos Popen11091505
Ref: library/subprocess popen-objects11091667
Ref: 341011091667
Ref: library/subprocess subprocess Popen poll11091783
Ref: 341111091783
Ref: library/subprocess subprocess Popen wait11091943
Ref: d0511091943
Ref: library/subprocess subprocess Popen communicate11092956
Ref: 15cd11092956
Ref: library/subprocess subprocess Popen send_signal11095128
Ref: 142511095128
Ref: library/subprocess subprocess Popen terminate11095518
Ref: 142311095518
Ref: library/subprocess subprocess Popen kill11095738
Ref: 142411095738
Ref: library/subprocess subprocess Popen args11096045
Ref: 341211096045
Ref: library/subprocess subprocess Popen stdin11096250
Ref: 33f811096250
Ref: library/subprocess subprocess Popen stdout11096690
Ref: 33f911096690
Ref: library/subprocess subprocess Popen stderr11097202
Ref: 33fa11097202
Ref: library/subprocess subprocess Popen pid11097974
Ref: 341311097974
Ref: library/subprocess subprocess Popen returncode11098160
Ref: a9c11098160
Node: Windows Popen Helpers11098655
Ref: library/subprocess windows-popen-helpers11098818
Ref: 341411098818
Ref: library/subprocess subprocess STARTUPINFO11098972
Ref: 340011098972
Ref: library/subprocess subprocess STARTUPINFO dwFlags11099393
Ref: 341511099393
Ref: library/subprocess subprocess STARTUPINFO hStdInput11099706
Ref: 341611099706
Ref: library/subprocess subprocess STARTUPINFO hStdOutput11100027
Ref: 341811100027
Ref: library/subprocess subprocess STARTUPINFO hStdError11100337
Ref: 341911100337
Ref: library/subprocess subprocess STARTUPINFO wShowWindow11100644
Ref: 341a11100644
Ref: library/subprocess subprocess STARTUPINFO lpAttributeList11101135
Ref: c2811101135
Ref: Windows Popen Helpers-Footnote-111102397
Ref: Windows Popen Helpers-Footnote-211102469
Ref: Windows Popen Helpers-Footnote-311102541
Node: Constantes do Windows11102630
Ref: library/subprocess windows-constants11102709
Ref: 341d11102709
Ref: library/subprocess subprocess STD_INPUT_HANDLE11102839
Ref: 341e11102839
Ref: library/subprocess subprocess STD_OUTPUT_HANDLE11102976
Ref: 341f11102976
Ref: library/subprocess subprocess STD_ERROR_HANDLE11103124
Ref: 342011103124
Ref: library/subprocess subprocess SW_HIDE11103270
Ref: 341c11103270
Ref: library/subprocess subprocess STARTF_USESTDHANDLES11103352
Ref: 341711103352
Ref: library/subprocess subprocess STARTF_USESHOWWINDOW11103583
Ref: 341b11103583
Ref: library/subprocess subprocess STARTF_FORCEONFEEDBACK11103736
Ref: 342111103736
Ref: library/subprocess subprocess STARTF_FORCEOFFFEEDBACK11104035
Ref: 342211104035
Ref: library/subprocess subprocess CREATE_NEW_CONSOLE11104250
Ref: 340111104250
Ref: library/subprocess subprocess CREATE_NEW_PROCESS_GROUP11104397
Ref: 340211104397
Ref: library/subprocess subprocess ABOVE_NORMAL_PRIORITY_CLASS11104720
Ref: 340311104720
Ref: library/subprocess subprocess BELOW_NORMAL_PRIORITY_CLASS11104931
Ref: 340411104931
Ref: library/subprocess subprocess HIGH_PRIORITY_CLASS11105141
Ref: 340511105141
Ref: library/subprocess subprocess IDLE_PRIORITY_CLASS11105334
Ref: 340611105334
Ref: library/subprocess subprocess NORMAL_PRIORITY_CLASS11105537
Ref: 340711105537
Ref: library/subprocess subprocess REALTIME_PRIORITY_CLASS11105745
Ref: 340811105745
Ref: library/subprocess subprocess CREATE_NO_WINDOW11106286
Ref: 340911106286
Ref: library/subprocess subprocess DETACHED_PROCESS11106475
Ref: 340a11106475
Ref: library/subprocess subprocess CREATE_DEFAULT_ERROR_MODE11106736
Ref: 340b11106736
Ref: library/subprocess subprocess CREATE_BREAKAWAY_FROM_JOB11107143
Ref: 340c11107143
Node: API de alto nível mais antiga11107347
Ref: library/subprocess call-function-trio11107549
Ref: 342311107549
Ref: library/subprocess older-high-level-api11107549
Ref: 342411107549
Ref: library/subprocess subprocess call11107838
Ref: ba011107838
Ref: library/subprocess subprocess check_call11109249
Ref: 33f111109249
Ref: library/subprocess subprocess check_output11110941
Ref: ff611110941
Node: Replacing Older Functions with the subprocess Module11113558
Ref: library/subprocess replacing-older-functions-with-the-subprocess-module11113772
Ref: 342511113772
Ref: library/subprocess subprocess-replacements11113772
Ref: 11c711113772
Node: Replacing /bin/sh shell command substitution11114946
Ref: library/subprocess replacing-bin-sh-shell-command-substitution11115112
Ref: 342611115112
Node: Replacing shell pipeline11115318
Ref: library/subprocess replacing-shell-pipeline11115515
Ref: 342711115515
Node: Substituindo os system11116168
Ref: library/subprocess replacing-os-system11116350
Ref: 342811116350
Node: Replacing the os spawn family11117297
Ref: library/subprocess replacing-the-os-spawn-family11117493
Ref: 342911117493
Node: Replacing os popen os popen2 os popen311118126
Ref: library/subprocess replacing-os-popen-os-popen2-os-popen311118342
Ref: 342a11118342
Node: Replacing functions from the popen2 module11119637
Ref: library/subprocess replacing-functions-from-the-popen2-module11119815
Ref: 342b11119815
Node: Legacy Shell Invocation Functions11121129
Ref: library/subprocess legacy-shell-invocation-functions11121321
Ref: 342c11121321
Ref: library/subprocess subprocess getstatusoutput11121685
Ref: ff811121685
Ref: library/subprocess subprocess getoutput11123030
Ref: ff711123030
Node: Notas<2>11123608
Ref: library/subprocess notes11123739
Ref: 342d11123739
Node: Timeout Behavior11123955
Ref: library/subprocess subprocess-timeout-behavior11124088
Ref: 342e11124088
Ref: library/subprocess timeout-behavior11124088
Ref: 342f11124088
Node: Converter uma sequência de argumentos em uma string no Windows11124875
Ref: library/subprocess converting-an-argument-sequence-to-a-string-on-windows11125054
Ref: 343011125054
Ref: library/subprocess converting-argument-sequence11125054
Ref: 33fd11125054
Ref: library/subprocess disable-vfork11126236
Ref: 343111126236
Node: Disabling use of vfork or posix_spawn11126236
Ref: library/subprocess disable-posix-spawn11126390
Ref: 343211126390
Ref: library/subprocess disabling-use-of-vfork-or-posix-spawn11126390
Ref: 343311126390
Node: sched — Agendador de eventos11127815
Ref: library/sched doc11128002
Ref: 343411128002
Ref: library/sched module-sched11128002
Ref: bf11128002
Ref: library/sched sched-event-scheduler11128002
Ref: 343511128002
Ref: library/sched translation-repo11128002
Ref: 343611128002
Ref: library/sched sched scheduler11128286
Ref: 116611128286
Ref: sched — Agendador de eventos-Footnote-111130402
Node: Objetos Scheduler11130467
Ref: library/sched id111130551
Ref: 343711130551
Ref: library/sched scheduler-objects11130551
Ref: 343811130551
Ref: library/sched sched scheduler enterabs11130685
Ref: 116811130685
Ref: library/sched sched scheduler enter11131620
Ref: 116711131620
Ref: library/sched sched scheduler cancel11132045
Ref: 1a8811132045
Ref: library/sched sched scheduler empty11132222
Ref: 343911132222
Ref: library/sched sched scheduler run11132316
Ref: 116511132316
Ref: library/sched sched scheduler queue11133451
Ref: 343a11133451
Node: queue — A synchronized queue class11133730
Ref: library/queue doc11133911
Ref: 343b11133911
Ref: library/queue module-queue11133911
Ref: b611133911
Ref: library/queue queue-a-synchronized-queue-class11133911
Ref: 343c11133911
Ref: library/queue translation-repo11133911
Ref: 343d11133911
Ref: library/queue queue Queue11135237
Ref: 13db11135237
Ref: library/queue queue LifoQueue11135602
Ref: 23eb11135602
Ref: library/queue queue PriorityQueue11135971
Ref: 23ec11135971
Ref: library/queue queue SimpleQueue11136969
Ref: b8011136969
Ref: library/queue queue Empty11137151
Ref: 335011137151
Ref: library/queue queue Full11137337
Ref: 335111137337
Ref: library/queue queue ShutDown11137521
Ref: 23b11137521
Ref: queue — A synchronized queue class-Footnote-111137815
Node: Objetos Queue11137880
Ref: library/queue queue-objects11137994
Ref: 344011137994
Ref: library/queue queueobjects11137994
Ref: 344111137994
Ref: library/queue queue Queue qsize11138174
Ref: 344211138174
Ref: library/queue queue Queue empty11138404
Ref: 344311138404
Ref: library/queue queue Queue full11138734
Ref: 344411138734
Ref: library/queue queue Queue put11139060
Ref: 343f11139060
Ref: library/queue queue Queue put_nowait11139720
Ref: 2ea811139720
Ref: library/queue queue Queue get11139808
Ref: 2ea911139808
Ref: library/queue queue Queue get_nowait11140846
Ref: 343e11140846
Ref: library/queue queue Queue task_done11141040
Ref: 334c11141040
Ref: library/queue queue Queue join11141693
Ref: 334d11141693
Node: Waiting for task completion11142196
Ref: library/queue waiting-for-task-completion11142300
Ref: 344511142300
Node: Terminating queues11142954
Ref: library/queue terminating-queues11143058
Ref: 344611143058
Ref: library/queue queue Queue shutdown11143244
Ref: 23a11143244
Node: Objetos SimpleQueue11144729
Ref: library/queue simplequeue-objects11144843
Ref: 344711144843
Ref: library/queue queue SimpleQueue qsize11144979
Ref: 344811144979
Ref: library/queue queue SimpleQueue empty11145146
Ref: 344911145146
Ref: library/queue queue SimpleQueue put11145364
Ref: 344a11145364
Ref: library/queue queue SimpleQueue put_nowait11146138
Ref: 344b11146138
Ref: library/queue queue SimpleQueue get11146301
Ref: 344c11146301
Ref: library/queue queue SimpleQueue get_nowait11146884
Ref: 344d11146884
Node: contextvars — Variáveis de contexto11147338
Ref: library/contextvars doc11147536
Ref: 344e11147536
Ref: library/contextvars contextvars-context-variables11147536
Ref: 344f11147536
Ref: library/contextvars module-contextvars11147536
Ref: 2411147536
Ref: library/contextvars translation-repo11147536
Ref: 345011147536
Ref: contextvars — Variáveis de contexto-Footnote-111148486
Node: Variáveis de contexto11148528
Ref: library/contextvars context-variables11148666
Ref: 345211148666
Ref: library/contextvars contextvars ContextVar11148730
Ref: 164311148730
Ref: library/contextvars contextvars ContextVar name11149527
Ref: 345411149527
Ref: library/contextvars contextvars ContextVar get11149666
Ref: 345311149666
Ref: library/contextvars contextvars ContextVar set11150154
Ref: 15b811150154
Ref: library/contextvars contextvars ContextVar reset11150575
Ref: 345611150575
Ref: library/contextvars contextvars Token11151182
Ref: 345511151182
Ref: library/contextvars contextvars Token var11151526
Ref: 345711151526
Ref: library/contextvars contextvars Token old_value11151669
Ref: 345811151669
Ref: library/contextvars contextvars Token MISSING11151995
Ref: 345911151995
Node: Gerenciamento de contexto manual11152092
Ref: library/contextvars manual-context-management11152256
Ref: 345a11152256
Ref: library/contextvars contextvars copy_context11152341
Ref: 345111152341
Ref: library/contextvars contextvars Context11152843
Ref: 15b711152843
Ref: library/contextvars contextvars Context run11154862
Ref: 16f311154862
Ref: library/contextvars contextvars Context copy11156221
Ref: 345b11156221
Ref: library/contextvars contextvars Context get11156683
Ref: 345c11156683
Ref: library/contextvars contextvars Context keys11157147
Ref: 345d11157147
Ref: library/contextvars contextvars Context values11157246
Ref: 345e11157246
Ref: library/contextvars contextvars Context items11157369
Ref: 345f11157369
Node: Suporte a asyncio11157525
Ref: library/contextvars asyncio-support11157658
Ref: 346011157658
Node: _thread— API de segmentação de baixo nível11159426
Ref: library/_thread doc11159579
Ref: 346111159579
Ref: library/_thread module-_thread11159579
Ref: 211159579
Ref: library/_thread thread-low-level-threading-api11159579
Ref: 346211159579
Ref: library/_thread translation-repo11159579
Ref: 346311159579
Ref: library/_thread thread error11160399
Ref: 346411160399
Ref: library/_thread thread LockType11160587
Ref: 346511160587
Ref: library/_thread thread start_new_thread11160657
Ref: 19611160657
Ref: library/_thread thread interrupt_main11161784
Ref: 84611161784
Ref: library/_thread thread exit11162744
Ref: 346611162744
Ref: library/_thread thread allocate_lock11162894
Ref: 346711162894
Ref: library/_thread thread get_ident11163057
Ref: 346811163057
Ref: library/_thread thread get_native_id11163484
Ref: 346911163484
Ref: library/_thread thread stack_size11164092
Ref: 346a11164092
Ref: library/_thread thread TIMEOUT_MAX11165525
Ref: 346b11165525
Ref: library/_thread thread lock acquire11165837
Ref: 346c11165837
Ref: library/_thread thread lock release11167034
Ref: 346d11167034
Ref: library/_thread thread lock locked11167183
Ref: 346e11167183
Node: Comunicação em Rede e Interprocesso11168515
Ref: library/ipc doc11168688
Ref: 346f11168688
Ref: library/ipc ipc11168688
Ref: 347011168688
Ref: library/ipc networking-and-interprocess-communication11168688
Ref: 347111168688
Ref: library/ipc translation-repo11168688
Ref: 347211168688
Node: asyncio — E/S assíncrona11169544
Ref: library/asyncio doc11169698
Ref: 347311169698
Ref: library/asyncio asyncio-asynchronous-i-o11169698
Ref: 347411169698
Ref: library/asyncio module-asyncio11169698
Ref: a11169698
Ref: library/asyncio asyncio-cli11171634
Ref: 348011171634
Node: Runners11172927
Ref: library/asyncio-runner doc11173027
Ref: 348111173027
Ref: library/asyncio-runner runners11173027
Ref: 348211173027
Ref: Runners-Footnote-111173449
Node: Executando um programa asyncio11173525
Ref: library/asyncio-runner running-an-asyncio-program11173630
Ref: 348311173630
Ref: library/asyncio-runner asyncio run11173711
Ref: 47c11173711
Node: Runner context manager11175484
Ref: library/asyncio-runner runner-context-manager11175628
Ref: 348511175628
Ref: library/asyncio-runner asyncio Runner11175693
Ref: 60011175693
Ref: library/asyncio-runner asyncio Runner run11176858
Ref: 17a111176858
Ref: library/asyncio-runner asyncio Runner close11177385
Ref: 348611177385
Ref: library/asyncio-runner asyncio Runner get_loop11177609
Ref: 348711177609
Node: Handling Keyboard Interruption11178052
Ref: library/asyncio-runner handling-keyboard-interruption11178157
Ref: 348811178157
Node: Corrotinas e tarefas11179672
Ref: library/asyncio-task doc11179788
Ref: 348911179788
Ref: library/asyncio-task coroutines-and-tasks11179788
Ref: 348a11179788
Ref: library/asyncio-task translation-repo11179788
Ref: 348b11179788
Node: Corrotinas<3>11180337
Ref: library/asyncio-task coroutine11180428
Ref: 347611180428
Ref: library/asyncio-task coroutines11180428
Ref: 348c11180428
Ref: Corrotinas<3>-Footnote-111183841
Node: Aguardáveis11183920
Ref: library/asyncio-task asyncio-awaitables11184035
Ref: 348d11184035
Ref: library/asyncio-task awaitables11184035
Ref: 348e11184035
Node: Criando tarefas11186839
Ref: library/asyncio-task creating-tasks11186964
Ref: 348f11186964
Ref: library/asyncio-task asyncio create_task11187123
Ref: 1bf11187123
Ref: Criando tarefas-Footnote-111189245
Node: Cancelamento de tarefas11189318
Ref: library/asyncio-task task-cancellation11189448
Ref: 349011189448
Node: Grupos de tarefas11190530
Ref: library/asyncio-task task-groups11190653
Ref: 349111190653
Ref: library/asyncio-task taskgroups11190653
Ref: 349211190653
Ref: library/asyncio-task asyncio TaskGroup11190861
Ref: 1b511190861
Ref: library/asyncio-task asyncio TaskGroup create_task11191179
Ref: 1bc11191179
Node: Encerrando um grupo de tarefas11195452
Ref: library/asyncio-task terminating-a-task-group11195536
Ref: 349311195536
Node: Dormindo11196877
Ref: library/asyncio-task sleeping11197012
Ref: 349411197012
Ref: library/asyncio-task asyncio sleep11197051
Ref: a7911197051
Ref: library/asyncio-task asyncio-example-sleep11197615
Ref: 349511197615
Node: Executando tarefas concorrentemente11198281
Ref: library/asyncio-task running-tasks-concurrently11198427
Ref: 349611198427
Ref: library/asyncio-task asyncio gather11198520
Ref: 5fd11198520
Ref: library/asyncio-task asyncio-example-gather11200404
Ref: 349711200404
Node: Fábrica de tarefas ansiosas11202576
Ref: library/asyncio-task eager-task-factory11202744
Ref: 349811202744
Ref: library/asyncio-task id111202744
Ref: 349911202744
Ref: library/asyncio-task asyncio eager_task_factory11202822
Ref: 47711202822
Ref: library/asyncio-task asyncio create_eager_task_factory11203973
Ref: 47811203973
Node: Protegendo contra cancelamento11204648
Ref: library/asyncio-task shielding-from-cancellation11204793
Ref: 349a11204793
Ref: library/asyncio-task asyncio shield11204876
Ref: a7a11204876
Node: Tempo limite11206772
Ref: library/asyncio-task timeouts11206909
Ref: 349b11206909
Ref: library/asyncio-task asyncio timeout11206956
Ref: 5fe11206956
Ref: library/asyncio-task asyncio Timeout11208699
Ref: 17bd11208699
Ref: library/asyncio-task asyncio Timeout when11209181
Ref: 349d11209181
Ref: library/asyncio-task asyncio Timeout reschedule11209354
Ref: 349c11209354
Ref: library/asyncio-task asyncio Timeout expired11209460
Ref: 349e11209460
Ref: library/asyncio-task asyncio timeout_at11210306
Ref: 193d11210306
Ref: library/asyncio-task asyncio wait_for11210926
Ref: 5ff11210926
Ref: library/asyncio-task asyncio-example-waitfor11211816
Ref: 349f11211816
Node: Primitivas de espera11212655
Ref: library/asyncio-task waiting-primitives11212783
Ref: 34a011212783
Ref: library/asyncio-task asyncio wait11212846
Ref: 47f11212846
Ref: library/asyncio-task asyncio FIRST_COMPLETED11214090
Ref: 34a111214090
Ref: library/asyncio-task asyncio FIRST_EXCEPTION11214407
Ref: 34a211214407
Ref: library/asyncio-task asyncio ALL_COMPLETED11214928
Ref: 34a311214928
Ref: library/asyncio-task asyncio as_completed11215521
Ref: 1aa11215521
Node: Executando em threads11218425
Ref: library/asyncio-task running-in-threads11218577
Ref: 34a411218577
Ref: library/asyncio-task asyncio to_thread11218642
Ref: 8ee11218642
Node: Agendando a partir de outras threads11221007
Ref: library/asyncio-task scheduling-from-other-threads11221153
Ref: 34a511221153
Ref: library/asyncio-task asyncio run_coroutine_threadsafe11221248
Ref: 88611221248
Node: Introspecção11222789
Ref: library/asyncio-task introspection11222925
Ref: 34a711222925
Ref: library/asyncio-task asyncio current_task11222974
Ref: 47d11222974
Ref: library/asyncio-task asyncio all_tasks11223292
Ref: 95d11223292
Ref: library/asyncio-task asyncio iscoroutine11223593
Ref: 47e11223593
Node: Objeto Task11223723
Ref: library/asyncio-task asyncio-task-obj11223814
Ref: 34a811223814
Ref: library/asyncio-task task-object11223814
Ref: 34a911223814
Ref: library/asyncio-task asyncio Task11223859
Ref: 1be11223859
Ref: library/asyncio-task asyncio Task done11226875
Ref: 34ac11226875
Ref: library/asyncio-task asyncio Task result11227127
Ref: 34ad11227127
Ref: library/asyncio-task asyncio Task exception11227628
Ref: 34af11227628
Ref: library/asyncio-task asyncio Task add_done_callback11228136
Ref: 34b011228136
Ref: library/asyncio-task asyncio Task remove_done_callback11228535
Ref: 34b111228535
Ref: library/asyncio-task asyncio Task get_stack11228882
Ref: 34b211228882
Ref: library/asyncio-task asyncio Task print_stack11230069
Ref: 185811230069
Ref: library/asyncio-task asyncio Task get_coro11230589
Ref: 9e411230589
Ref: library/asyncio-task asyncio Task get_context11231050
Ref: 34b311231050
Ref: library/asyncio-task asyncio Task get_name11231215
Ref: 9e611231215
Ref: library/asyncio-task asyncio Task set_name11231507
Ref: 9e511231507
Ref: library/asyncio-task asyncio Task cancel11231856
Ref: 1b711231856
Ref: library/asyncio-task asyncio-example-task-cancel11233080
Ref: 34b411233080
Ref: library/asyncio-task asyncio Task cancelled11233946
Ref: 34aa11233946
Ref: library/asyncio-task asyncio Task uncancel11234238
Ref: 1bb11234238
Ref: library/asyncio-task asyncio Task cancelling11236520
Ref: 1ba11236520
Node: Streams11237361
Ref: library/asyncio-stream doc11237496
Ref: 34b511237496
Ref: library/asyncio-stream asyncio-streams11237496
Ref: 347711237496
Ref: library/asyncio-stream streams11237496
Ref: 34b611237496
Ref: library/asyncio-stream translation-repo11237496
Ref: 34b711237496
Ref: library/asyncio-stream asyncio-example-stream11237827
Ref: 34b811237827
Ref: library/asyncio-stream asyncio open_connection11238603
Ref: b2b11238603
Ref: library/asyncio-stream asyncio start_server11239931
Ref: b2c11239931
Ref: library/asyncio-stream asyncio open_unix_connection11241620
Ref: 34bc11241620
Ref: library/asyncio-stream asyncio start_unix_server11242608
Ref: 34be11242608
Ref: Streams-Footnote-111244006
Node: StreamReader11244082
Ref: library/asyncio-stream streamreader11244159
Ref: 34bf11244159
Ref: library/asyncio-stream asyncio StreamReader11244206
Ref: 1a0911244206
Ref: library/asyncio-stream asyncio StreamReader feed_eof11244596
Ref: 34c011244596
Ref: library/asyncio-stream asyncio StreamReader read11244659
Ref: 34c111244659
Ref: library/asyncio-stream asyncio StreamReader readline11245289
Ref: 34c211245289
Ref: library/asyncio-stream asyncio StreamReader readexactly11245661
Ref: c9711245661
Ref: library/asyncio-stream asyncio StreamReader readuntil11245967
Ref: 1b411245967
Ref: library/asyncio-stream asyncio StreamReader at_eof11247315
Ref: 34c511247315
Node: StreamWriter11247449
Ref: library/asyncio-stream streamwriter11247547
Ref: 34c611247547
Ref: library/asyncio-stream asyncio StreamWriter11247594
Ref: 17f211247594
Ref: library/asyncio-stream asyncio StreamWriter write11247886
Ref: 34c711247886
Ref: library/asyncio-stream asyncio StreamWriter writelines11248387
Ref: 34c811248387
Ref: library/asyncio-stream asyncio StreamWriter close11248824
Ref: 34ba11248824
Ref: library/asyncio-stream asyncio StreamWriter can_write_eof11249098
Ref: 34c911249098
Ref: library/asyncio-stream asyncio StreamWriter write_eof11249273
Ref: 34ca11249273
Ref: library/asyncio-stream asyncio StreamWriter transport11249425
Ref: 34cb11249425
Ref: library/asyncio-stream asyncio StreamWriter get_extra_info11249507
Ref: 34cc11249507
Ref: library/asyncio-stream asyncio StreamWriter drain11249692
Ref: 18b111249692
Ref: library/asyncio-stream asyncio StreamWriter start_tls11250353
Ref: 60411250353
Ref: library/asyncio-stream asyncio StreamWriter is_closing11251374
Ref: b1f11251374
Ref: library/asyncio-stream asyncio StreamWriter wait_closed11251544
Ref: b1e11251544
Node: Exemplos<15>11251873
Ref: library/asyncio-stream examples11251950
Ref: 34b911251950
Node: Cliente para eco TCP usando streams11252169
Ref: library/asyncio-stream asyncio-tcp-echo-client-streams11252293
Ref: 34cd11252293
Ref: library/asyncio-stream tcp-echo-client-using-streams11252293
Ref: 34ce11252293
Node: Servidor eco TCP usando streams11253113
Ref: library/asyncio-stream asyncio-tcp-echo-server-streams11253265
Ref: 34d011253265
Ref: library/asyncio-stream tcp-echo-server-using-streams11253265
Ref: 34d111253265
Node: Obtém headers HTTP11254323
Ref: library/asyncio-stream get-http-headers11254505
Ref: 34d311254505
Node: Registra um soquete aberto para aguardar por dados usando streams11255783
Ref: library/asyncio-stream asyncio-example-create-connection-streams11255925
Ref: 34d411255925
Ref: library/asyncio-stream register-an-open-socket-to-wait-for-data-using-streams11255925
Ref: 34d511255925
Node: Synchronization Primitives11257448
Ref: library/asyncio-sync doc11257575
Ref: 34d911257575
Ref: library/asyncio-sync asyncio-sync11257575
Ref: 347a11257575
Ref: library/asyncio-sync synchronization-primitives11257575
Ref: 34da11257575
Ref: library/asyncio-sync translation-repo11257575
Ref: 34db11257575
Ref: Synchronization Primitives-Footnote-111258656
Node: Lock11258729
Ref: library/asyncio-sync lock11258811
Ref: 34dc11258811
Ref: library/asyncio-sync asyncio Lock11258842
Ref: a7b11258842
Ref: library/asyncio-sync asyncio Lock acquire11259506
Ref: 34dd11259506
Ref: library/asyncio-sync asyncio Lock release11259997
Ref: 34de11259997
Ref: library/asyncio-sync asyncio Lock locked11260215
Ref: 34df11260215
Node: Evento11260298
Ref: library/asyncio-sync event11260399
Ref: 34e011260399
Ref: library/asyncio-sync asyncio Event11260434
Ref: a7c11260434
Ref: library/asyncio-sync asyncio-example-sync-event11260965
Ref: 34e411260965
Ref: library/asyncio-sync asyncio Event wait11261594
Ref: 34e311261594
Ref: library/asyncio-sync asyncio Event set11261801
Ref: 34e111261801
Ref: library/asyncio-sync asyncio Event clear11261942
Ref: 34e211261942
Ref: library/asyncio-sync asyncio Event is_set11262144
Ref: 34e511262144
Node: Condição11262223
Ref: library/asyncio-sync condition11262329
Ref: 34e611262329
Ref: library/asyncio-sync asyncio Condition11262370
Ref: a7d11262370
Ref: library/asyncio-sync asyncio Condition acquire11263604
Ref: 34e711263604
Ref: library/asyncio-sync asyncio Condition notify11263804
Ref: 177011263804
Ref: library/asyncio-sync asyncio Condition locked11264169
Ref: 34e811264169
Ref: library/asyncio-sync asyncio Condition notify_all11264263
Ref: 34e911264263
Ref: library/asyncio-sync asyncio Condition release11264642
Ref: 34ea11264642
Ref: library/asyncio-sync asyncio Condition wait11264805
Ref: 179b11264805
Ref: library/asyncio-sync asyncio Condition wait_for11265546
Ref: 34eb11265546
Node: Semaphore11265895
Ref: library/asyncio-sync semaphore11266011
Ref: 34ec11266011
Ref: library/asyncio-sync asyncio Semaphore11266052
Ref: a7e11266052
Ref: library/asyncio-sync asyncio Semaphore acquire11267166
Ref: 179c11267166
Ref: library/asyncio-sync asyncio Semaphore locked11267451
Ref: 34ee11267451
Ref: library/asyncio-sync asyncio Semaphore release11267556
Ref: 34ed11267556
Node: BoundedSemaphore11267871
Ref: library/asyncio-sync boundedsemaphore11267984
Ref: 34ef11267984
Ref: library/asyncio-sync asyncio BoundedSemaphore11268039
Ref: a7f11268039
Node: Barrier11268400
Ref: library/asyncio-sync barrier11268495
Ref: 34f011268495
Ref: library/asyncio-sync asyncio Barrier11268532
Ref: 60111268532
Ref: library/asyncio-sync asyncio-example-barrier11269128
Ref: 34f211269128
Ref: library/asyncio-sync asyncio Barrier wait11270001
Ref: 34f111270001
Ref: library/asyncio-sync asyncio Barrier reset11271079
Ref: 34f311271079
Ref: library/asyncio-sync asyncio Barrier abort11271376
Ref: 34f411271376
Ref: library/asyncio-sync asyncio Barrier parties11271690
Ref: 34f511271690
Ref: library/asyncio-sync asyncio Barrier n_waiting11271779
Ref: 34f611271779
Ref: library/asyncio-sync asyncio Barrier broken11271898
Ref: 34f711271898
Ref: library/asyncio-sync asyncio BrokenBarrierError11272014
Ref: 60211272014
Node: Subprocessos11272485
Ref: library/asyncio-subprocess doc11272610
Ref: 34f811272610
Ref: library/asyncio-subprocess asyncio-subprocess11272610
Ref: 347811272610
Ref: library/asyncio-subprocess subprocesses11272610
Ref: 34f911272610
Ref: library/asyncio-subprocess translation-repo11272610
Ref: 34fa11272610
Ref: library/asyncio-subprocess asyncio-example-subprocess-shell11272905
Ref: 34fb11272905
Ref: Subprocessos-Footnote-111274255
Ref: Subprocessos-Footnote-211274334
Node: Criando subprocessos11274418
Ref: library/asyncio-subprocess creating-subprocesses11274509
Ref: 34fd11274509
Ref: library/asyncio-subprocess asyncio create_subprocess_exec11274572
Ref: a8111274572
Ref: library/asyncio-subprocess asyncio create_subprocess_shell11275351
Ref: a8211275351
Ref: Criando subprocessos-Footnote-111277176
Node: Constantes<7>11277246
Ref: library/asyncio-subprocess constants11277374
Ref: 350811277374
Ref: library/asyncio-subprocess asyncio subprocess PIPE11277417
Ref: 350911277417
Ref: library/asyncio-subprocess asyncio subprocess STDOUT11277894
Ref: 350b11277894
Ref: library/asyncio-subprocess asyncio subprocess DEVNULL11278091
Ref: 350c11278091
Node: Interagindo com subprocessos11278386
Ref: library/asyncio-subprocess interacting-with-subprocesses11278485
Ref: 350d11278485
Ref: library/asyncio-subprocess asyncio subprocess Process11278825
Ref: 350011278825
Ref: library/asyncio-subprocess asyncio subprocess Process wait11279871
Ref: 350e11279871
Ref: library/asyncio-subprocess asyncio subprocess Process communicate11280427
Ref: 182311280427
Ref: library/asyncio-subprocess asyncio subprocess Process send_signal11281927
Ref: 16e311281927
Ref: library/asyncio-subprocess asyncio subprocess Process terminate11282353
Ref: 351111282353
Ref: library/asyncio-subprocess asyncio subprocess Process kill11282654
Ref: 351211282654
Ref: library/asyncio-subprocess asyncio subprocess Process stdin11282905
Ref: 350a11282905
Ref: library/asyncio-subprocess asyncio subprocess Process stdout11283066
Ref: 34fe11283066
Ref: library/asyncio-subprocess asyncio subprocess Process stderr11283228
Ref: 34ff11283228
Ref: library/asyncio-subprocess asyncio subprocess Process pid11283730
Ref: 351311283730
Ref: library/asyncio-subprocess asyncio subprocess Process returncode11283971
Ref: 351011283971
Node: Subprocesso e Threads11284320
Ref: library/asyncio-subprocess asyncio-subprocess-threads11284427
Ref: 350f11284427
Ref: library/asyncio-subprocess subprocess-and-threads11284427
Ref: 351411284427
Node: Exemplos<16>11285442
Ref: library/asyncio-subprocess examples11285549
Ref: 34fc11285549
Ref: library/asyncio-subprocess asyncio-example-create-subprocess-exec11285744
Ref: 351611285744
Node: Filas11286556
Ref: library/asyncio-queue doc11286669
Ref: 351811286669
Ref: library/asyncio-queue asyncio-queues11286669
Ref: 347911286669
Ref: library/asyncio-queue queues11286669
Ref: 351911286669
Ref: library/asyncio-queue translation-repo11286669
Ref: 351a11286669
Ref: Filas-Footnote-111287507
Node: Queue11287581
Ref: library/asyncio-queue queue11287655
Ref: 351c11287655
Ref: library/asyncio-queue asyncio Queue11287688
Ref: a8011287688
Ref: library/asyncio-queue asyncio Queue maxsize11288391
Ref: 351f11288391
Ref: library/asyncio-queue asyncio Queue empty11288467
Ref: 352011288467
Ref: library/asyncio-queue asyncio Queue full11288589
Ref: 352111288589
Ref: library/asyncio-queue asyncio Queue get11288827
Ref: 351d11288827
Ref: library/asyncio-queue asyncio Queue get_nowait11289121
Ref: 352211289121
Ref: library/asyncio-queue asyncio Queue join11289279
Ref: df011289279
Ref: library/asyncio-queue asyncio Queue put11289807
Ref: 352411289807
Ref: library/asyncio-queue asyncio Queue put_nowait11290077
Ref: 352511290077
Ref: library/asyncio-queue asyncio Queue qsize11290279
Ref: 351e11290279
Ref: library/asyncio-queue asyncio Queue shutdown11290354
Ref: 1b011290354
Ref: library/asyncio-queue asyncio Queue task_done11292088
Ref: df111292088
Node: Fila de prioridade11292934
Ref: library/asyncio-queue priority-queue11293060
Ref: 352711293060
Ref: library/asyncio-queue asyncio PriorityQueue11293119
Ref: 352811293119
Node: Filas LIFO último a entrar primeiro a sair11293351
Ref: library/asyncio-queue lifo-queue11293486
Ref: 352911293486
Ref: library/asyncio-queue asyncio LifoQueue11293600
Ref: 352a11293600
Node: Exceções<12>11293782
Ref: library/asyncio-queue exceptions11293911
Ref: 352b11293911
Ref: library/asyncio-queue asyncio QueueEmpty11293952
Ref: 352311293952
Ref: library/asyncio-queue asyncio QueueFull11294099
Ref: 352611294099
Ref: library/asyncio-queue asyncio QueueShutDown11294257
Ref: 1b111294257
Node: Exemplos<17>11294450
Ref: library/asyncio-queue examples11294527
Ref: 351b11294527
Ref: library/asyncio-queue asyncio-example-queue-dist11294566
Ref: 352c11294566
Node: Exceções<13>11296389
Ref: library/asyncio-exceptions doc11296506
Ref: 352d11296506
Ref: library/asyncio-exceptions asyncio-exceptions11296506
Ref: 352e11296506
Ref: library/asyncio-exceptions exceptions11296506
Ref: 352f11296506
Ref: library/asyncio-exceptions translation-repo11296506
Ref: 353011296506
Ref: library/asyncio-exceptions asyncio TimeoutError11296662
Ref: 183c11296662
Ref: library/asyncio-exceptions asyncio CancelledError11296925
Ref: 1b811296925
Ref: library/asyncio-exceptions asyncio InvalidStateError11297363
Ref: 34ae11297363
Ref: library/asyncio-exceptions asyncio SendfileNotAvailableError11297626
Ref: 353111297626
Ref: library/asyncio-exceptions asyncio IncompleteReadError11297830
Ref: 1a7511297830
Ref: library/asyncio-exceptions asyncio IncompleteReadError expected11298070
Ref: 353211298070
Ref: library/asyncio-exceptions asyncio IncompleteReadError partial11298164
Ref: 34c311298164
Ref: library/asyncio-exceptions asyncio LimitOverrunError11298290
Ref: 34c411298290
Ref: library/asyncio-exceptions asyncio LimitOverrunError consumed11298462
Ref: 353311298462
Ref: Exceções<13>-Footnote-111298583
Node: Laço de eventos11298662
Ref: library/asyncio-eventloop doc11298781
Ref: 353411298781
Ref: library/asyncio-eventloop asyncio-event-loop11298781
Ref: d9e11298781
Ref: library/asyncio-eventloop event-loop11298781
Ref: 353511298781
Ref: library/asyncio-eventloop translation-repo11298781
Ref: 353611298781
Ref: library/asyncio-eventloop asyncio get_running_loop11299757
Ref: b1d11299757
Ref: library/asyncio-eventloop asyncio get_event_loop11300128
Ref: 2c211300128
Ref: library/asyncio-eventloop asyncio set_event_loop11301315
Ref: 18df11301315
Ref: library/asyncio-eventloop asyncio new_event_loop11301459
Ref: 348411301459
Ref: Laço de eventos-Footnote-111302909
Ref: Laço de eventos-Footnote-211302983
Node: Métodos do laço de eventos11303063
Ref: library/asyncio-eventloop asyncio-event-loop-methods11303186
Ref: 353d11303186
Ref: library/asyncio-eventloop event-loop-methods11303186
Ref: 353811303186
Node: Executar e interromper o laço11303894
Ref: library/asyncio-eventloop running-and-stopping-the-loop11304028
Ref: 353e11304028
Ref: library/asyncio-eventloop asyncio loop run_until_complete11304110
Ref: c9311304110
Ref: library/asyncio-eventloop asyncio loop run_forever11304468
Ref: 353f11304468
Ref: library/asyncio-eventloop asyncio loop stop11305299
Ref: c9811305299
Ref: library/asyncio-eventloop asyncio loop is_running11305357
Ref: 354011305357
Ref: library/asyncio-eventloop asyncio loop is_closed11305460
Ref: dec11305460
Ref: library/asyncio-eventloop asyncio loop close11305552
Ref: 354111305552
Ref: library/asyncio-eventloop asyncio loop shutdown_asyncgens11306007
Ref: c9a11306007
Ref: library/asyncio-eventloop asyncio loop shutdown_default_executor11306702
Ref: 8ed11306702
Node: Agendando funções de retorno11307746
Ref: library/asyncio-eventloop scheduling-callbacks11307929
Ref: 354211307929
Ref: library/asyncio-eventloop asyncio loop call_soon11308010
Ref: b1711308010
Ref: library/asyncio-eventloop asyncio loop call_soon_threadsafe11308771
Ref: b1811308771
Ref: library/asyncio-eventloop asyncio-pass-keywords11309620
Ref: 354311309620
Ref: Agendando funções de retorno-Footnote-111310151
Node: Agendando funções de retorno atrasadas11310193
Ref: library/asyncio-eventloop asyncio-delayed-calls11310369
Ref: 354411310369
Ref: library/asyncio-eventloop scheduling-delayed-callbacks11310369
Ref: 354511310369
Ref: library/asyncio-eventloop asyncio loop call_later11310656
Ref: b2911310656
Ref: library/asyncio-eventloop asyncio loop call_at11312184
Ref: b1911312184
Ref: library/asyncio-eventloop asyncio loop time11313217
Ref: 354611313217
Ref: Agendando funções de retorno atrasadas-Footnote-111313674
Ref: Agendando funções de retorno atrasadas-Footnote-211313716
Node: Criando Futures e Tasks11313758
Ref: library/asyncio-eventloop creating-futures-and-tasks11313929
Ref: 354711313929
Ref: library/asyncio-eventloop asyncio loop create_future11313998
Ref: c9511313998
Ref: library/asyncio-eventloop asyncio loop create_task11314379
Ref: 1c011314379
Ref: library/asyncio-eventloop asyncio loop set_task_factory11315951
Ref: dee11315951
Ref: library/asyncio-eventloop asyncio loop get_task_factory11316775
Ref: def11316775
Node: Abrindo conexões de rede11316908
Ref: library/asyncio-eventloop opening-network-connections11317065
Ref: 354811317065
Ref: library/asyncio-eventloop asyncio loop create_connection11317137
Ref: 60311317137
Ref: library/asyncio-eventloop asyncio loop create_datagram_endpoint11324448
Ref: 73311324448
Ref: library/asyncio-eventloop asyncio loop create_unix_connection11328469
Ref: 34bd11328469
Ref: Abrindo conexões de rede-Footnote-111329596
Ref: Abrindo conexões de rede-Footnote-211329655
Node: Criando servidores de rede11329714
Ref: library/asyncio-eventloop creating-network-servers11329869
Ref: 355011329869
Ref: library/asyncio-eventloop loop-create-server11329944
Ref: 347b11329944
Ref: library/asyncio-eventloop asyncio loop create_server11329944
Ref: b2511329944
Ref: library/asyncio-eventloop asyncio loop create_unix_server11334934
Ref: 1ae11334934
Ref: library/asyncio-eventloop asyncio loop connect_accepted_socket11336249
Ref: 7df11336249
Node: Transferindo arquivos11337889
Ref: library/asyncio-eventloop transferring-files11338034
Ref: 355211338034
Ref: library/asyncio-eventloop asyncio loop sendfile11338099
Ref: 355311338099
Node: Atualizando TLS11339254
Ref: library/asyncio-eventloop tls-upgrade11339406
Ref: 355411339406
Ref: library/asyncio-eventloop asyncio loop start_tls11339459
Ref: b1b11339459
Node: Observando descritores de arquivo11341482
Ref: library/asyncio-eventloop watching-file-descriptors11341656
Ref: 355511341656
Ref: library/asyncio-eventloop asyncio loop add_reader11341745
Ref: 34d811341745
Ref: library/asyncio-eventloop asyncio loop remove_reader11342092
Ref: 355611342092
Ref: library/asyncio-eventloop asyncio loop add_writer11342274
Ref: 355711342274
Ref: library/asyncio-eventloop asyncio loop remove_writer11342732
Ref: 355811342732
Node: Trabalhando com objetos soquete diretamente11343021
Ref: library/asyncio-eventloop working-with-socket-objects-directly11343183
Ref: 355a11343183
Ref: library/asyncio-eventloop asyncio loop sock_recv11343688
Ref: c2b11343688
Ref: library/asyncio-eventloop asyncio loop sock_recv_into11344187
Ref: b1c11344187
Ref: library/asyncio-eventloop asyncio loop sock_recvfrom11344501
Ref: 60611344501
Ref: library/asyncio-eventloop asyncio loop sock_recvfrom_into11344814
Ref: 60711344814
Ref: library/asyncio-eventloop asyncio loop sock_sendall11345164
Ref: c2c11345164
Ref: library/asyncio-eventloop asyncio loop sock_sendto11345992
Ref: 60511345992
Ref: library/asyncio-eventloop asyncio loop sock_connect11346280
Ref: df211346280
Ref: library/asyncio-eventloop asyncio loop sock_accept11346916
Ref: c2d11346916
Ref: library/asyncio-eventloop asyncio loop sock_sendfile11347771
Ref: b2011347771
Node: DNS11349096
Ref: library/asyncio-eventloop dns11349254
Ref: 355b11349254
Ref: library/asyncio-eventloop asyncio loop getaddrinfo11349283
Ref: c2e11349283
Ref: library/asyncio-eventloop asyncio loop getnameinfo11349445
Ref: c2f11349445
Node: Trabalhando com encadeamentos11350308
Ref: library/asyncio-eventloop working-with-pipes11350434
Ref: 355c11350434
Ref: library/asyncio-eventloop asyncio loop connect_read_pipe11350515
Ref: 350411350515
Ref: library/asyncio-eventloop asyncio loop connect_write_pipe11351132
Ref: 350511351132
Node: Sinais Unix11352010
Ref: library/asyncio-eventloop unix-signals11352188
Ref: 355f11352188
Ref: library/asyncio-eventloop loop-add-signal-handler11352233
Ref: 347d11352233
Ref: library/asyncio-eventloop asyncio loop add_signal_handler11352233
Ref: 356011352233
Ref: library/asyncio-eventloop asyncio loop remove_signal_handler11353148
Ref: 356111353148
Node: Executando código em conjuntos de threads ou processos11353472
Ref: library/asyncio-eventloop executing-code-in-thread-or-process-pools11353642
Ref: 356211353642
Ref: library/asyncio-eventloop asyncio loop run_in_executor11353774
Ref: 8ef11353774
Ref: library/asyncio-eventloop asyncio loop set_default_executor11356516
Ref: 74311356516
Node: Tratando erros da API11356828
Ref: library/asyncio-eventloop error-handling-api11357014
Ref: 356311357014
Ref: library/asyncio-eventloop asyncio loop set_exception_handler11357150
Ref: 356411357150
Ref: library/asyncio-eventloop asyncio loop get_exception_handler11358067
Ref: c9611358067
Ref: library/asyncio-eventloop asyncio loop default_exception_handler11358268
Ref: 356611358268
Ref: library/asyncio-eventloop asyncio loop call_exception_handler11358701
Ref: 356511358701
Node: Habilitando o modo de debug11359957
Ref: library/asyncio-eventloop enabling-debug-mode11360111
Ref: 356711360111
Ref: library/asyncio-eventloop asyncio loop get_debug11360188
Ref: deb11360188
Ref: library/asyncio-eventloop asyncio loop set_debug11360468
Ref: dea11360468
Ref: library/asyncio-eventloop asyncio loop slow_callback_duration11360718
Ref: 356811360718
Node: Executando subprocessos11361052
Ref: library/asyncio-eventloop running-subprocesses11361176
Ref: 356911361176
Ref: library/asyncio-eventloop loop-subprocess-exec11361746
Ref: 347c11361746
Ref: library/asyncio-eventloop asyncio loop subprocess_exec11361746
Ref: 350111361746
Ref: library/asyncio-eventloop asyncio loop subprocess_shell11365870
Ref: 350211365870
Ref: Executando subprocessos-Footnote-111367389
Node: Tratadores de função de retorno11367459
Ref: library/asyncio-eventloop callback-handles11367605
Ref: 353911367605
Ref: library/asyncio-eventloop asyncio Handle11367692
Ref: 1c1d11367692
Ref: library/asyncio-eventloop asyncio Handle get_context11367858
Ref: 356c11367858
Ref: library/asyncio-eventloop asyncio Handle cancel11368031
Ref: 356d11368031
Ref: library/asyncio-eventloop asyncio Handle cancelled11368207
Ref: b2d11368207
Ref: library/asyncio-eventloop asyncio TimerHandle11368347
Ref: 186511368347
Ref: library/asyncio-eventloop asyncio TimerHandle when11368566
Ref: b2a11368566
Node: Objetos Server11368857
Ref: library/asyncio-eventloop server-objects11369011
Ref: 353a11369011
Ref: library/asyncio-eventloop asyncio Server11369299
Ref: b2411369299
Ref: library/asyncio-eventloop asyncio Server close11370025
Ref: 34bb11370025
Ref: library/asyncio-eventloop asyncio Server close_clients11370495
Ref: 1b211370495
Ref: library/asyncio-eventloop asyncio Server abort_clients11370869
Ref: 1b311370869
Ref: library/asyncio-eventloop asyncio Server get_loop11371317
Ref: b2311371317
Ref: library/asyncio-eventloop asyncio Server start_serving11371455
Ref: b2611371455
Ref: library/asyncio-eventloop asyncio Server serve_forever11372087
Ref: b2711372087
Ref: library/asyncio-eventloop asyncio Server is_serving11373001
Ref: b2811373001
Ref: library/asyncio-eventloop asyncio Server wait_closed11373151
Ref: 17bc11373151
Ref: library/asyncio-eventloop asyncio Server sockets11373307
Ref: c3011373307
Ref: library/asyncio-eventloop asyncio-event-loops11373672
Ref: 356f11373672
Node: Implementações do laço de eventos11373672
Ref: library/asyncio-eventloop asyncio-event-loop-implementations11373805
Ref: 357011373805
Ref: library/asyncio-eventloop event-loop-implementations11373805
Ref: 353b11373805
Ref: library/asyncio-eventloop asyncio SelectorEventLoop11374093
Ref: 60811374093
Ref: library/asyncio-eventloop asyncio ProactorEventLoop11374782
Ref: 60911374782
Ref: library/asyncio-eventloop asyncio EventLoop11375065
Ref: 17e911375065
Ref: library/asyncio-eventloop asyncio AbstractEventLoop11375381
Ref: 96611375381
Ref: Implementações do laço de eventos-Footnote-111375703
Node: Exemplos<18>11375782
Ref: library/asyncio-eventloop examples11375892
Ref: 353c11375892
Node: Hello World com call_soon11376535
Ref: library/asyncio-eventloop asyncio-example-lowlevel-helloworld11376651
Ref: 357111376651
Ref: library/asyncio-eventloop hello-world-with-call-soon11376651
Ref: 357211376651
Node: Exibe a data atual com call_later11377449
Ref: library/asyncio-eventloop asyncio-example-call-later11377628
Ref: 357311377628
Ref: library/asyncio-eventloop display-the-current-date-with-call-later11377628
Ref: 357411377628
Node: Observa um descritor de arquivo por eventos de leitura11378637
Ref: library/asyncio-eventloop asyncio-example-watch-fd11378840
Ref: 34d711378840
Ref: library/asyncio-eventloop watch-a-file-descriptor-for-read-events11378840
Ref: 357511378840
Node: Define tratadores de sinais para SIGINT e SIGTERM11380219
Ref: library/asyncio-eventloop asyncio-example-unix-signals11380380
Ref: 357611380380
Ref: library/asyncio-eventloop set-signal-handlers-for-sigint-and-sigterm11380380
Ref: 357711380380
Node: Futuros11381330
Ref: library/asyncio-future doc11381457
Ref: 33c611381457
Ref: library/asyncio-future asyncio-futures11381457
Ref: 347f11381457
Ref: library/asyncio-future futures11381457
Ref: 357811381457
Ref: library/asyncio-future translation-repo11381457
Ref: 357911381457
Ref: Futuros-Footnote-111381885
Ref: Futuros-Footnote-211381961
Node: Funções Future11382042
Ref: library/asyncio-future future-functions11382124
Ref: 357a11382124
Ref: library/asyncio-future asyncio isfuture11382177
Ref: 357b11382177
Ref: library/asyncio-future asyncio ensure_future11382490
Ref: c9211382490
Ref: library/asyncio-future asyncio wrap_future11383731
Ref: 1a0811383731
Node: Objeto Future11384080
Ref: library/asyncio-future asyncio-future-obj11384162
Ref: 357c11384162
Ref: library/asyncio-future future-object11384162
Ref: 357d11384162
Ref: library/asyncio-future asyncio Future11384211
Ref: be611384211
Ref: library/asyncio-future asyncio Future result11385517
Ref: 357e11385517
Ref: library/asyncio-future asyncio Future set_result11386129
Ref: 34ab11386129
Ref: library/asyncio-future asyncio Future set_exception11386326
Ref: c9911386326
Ref: library/asyncio-future asyncio Future done11386531
Ref: 357f11386531
Ref: library/asyncio-future asyncio Future cancelled11386795
Ref: 358011386795
Ref: library/asyncio-future asyncio Future add_done_callback11387101
Ref: b1a11387101
Ref: library/asyncio-future asyncio Future remove_done_callback11388129
Ref: 168b11388129
Ref: library/asyncio-future asyncio Future cancel11388371
Ref: 193411388371
Ref: library/asyncio-future asyncio Future exception11388730
Ref: 358111388730
Ref: library/asyncio-future asyncio Future get_loop11389171
Ref: b2211389171
Ref: library/asyncio-future asyncio-example-future11389304
Ref: 358211389304
Ref: Objeto Future-Footnote-111391514
Node: Transports e Protocols11391556
Ref: library/asyncio-protocol doc11391677
Ref: 358311391677
Ref: library/asyncio-protocol asyncio-transports-protocols11391677
Ref: 347e11391677
Ref: library/asyncio-protocol translation-repo11391677
Ref: 358411391677
Ref: library/asyncio-protocol transports-and-protocols11391677
Ref: 358511391677
Node: Transportes11394049
Ref: library/asyncio-protocol asyncio-transport11394138
Ref: 354a11394138
Ref: library/asyncio-protocol transports11394138
Ref: 358611394138
Ref: Transportes-Footnote-111394892
Node: Transports Hierarchy11394971
Ref: library/asyncio-protocol transports-hierarchy11395062
Ref: 358d11395062
Ref: library/asyncio-protocol asyncio BaseTransport11395125
Ref: 358811395125
Ref: library/asyncio-protocol asyncio WriteTransport11395255
Ref: 355e11395255
Ref: library/asyncio-protocol asyncio ReadTransport11395587
Ref: 355d11395587
Ref: library/asyncio-protocol asyncio Transport11395915
Ref: 358911395915
Ref: library/asyncio-protocol asyncio DatagramTransport11396519
Ref: 18af11396519
Ref: library/asyncio-protocol asyncio SubprocessTransport11396763
Ref: 356b11396763
Node: Base Transport11397090
Ref: library/asyncio-protocol base-transport11397210
Ref: 358e11397210
Ref: library/asyncio-protocol asyncio BaseTransport close11397261
Ref: 354d11397261
Ref: library/asyncio-protocol asyncio BaseTransport is_closing11397690
Ref: c9411397690
Ref: library/asyncio-protocol asyncio BaseTransport get_extra_info11397810
Ref: aab11397810
Ref: library/asyncio-protocol asyncio BaseTransport set_protocol11399969
Ref: 359311399969
Ref: library/asyncio-protocol asyncio BaseTransport get_protocol11400161
Ref: 359411400161
Node: Read-only Transports11400238
Ref: library/asyncio-protocol read-only-transports11400359
Ref: 359511400359
Ref: library/asyncio-protocol asyncio ReadTransport is_reading11400422
Ref: b2e11400422
Ref: library/asyncio-protocol asyncio ReadTransport pause_reading11400561
Ref: b3011400561
Ref: library/asyncio-protocol asyncio ReadTransport resume_reading11400932
Ref: b2f11400932
Node: Write-only Transports11401272
Ref: library/asyncio-protocol write-only-transports11401403
Ref: 359611401403
Ref: library/asyncio-protocol asyncio WriteTransport abort11401468
Ref: 356e11401468
Ref: library/asyncio-protocol asyncio WriteTransport can_write_eof11401808
Ref: 359711401808
Ref: library/asyncio-protocol asyncio WriteTransport get_write_buffer_size11401966
Ref: 359911401966
Ref: library/asyncio-protocol asyncio WriteTransport get_write_buffer_limits11402094
Ref: ded11402094
Ref: library/asyncio-protocol asyncio WriteTransport set_write_buffer_limits11402416
Ref: 359a11402416
Ref: library/asyncio-protocol asyncio WriteTransport write11403829
Ref: 15dd11403829
Ref: library/asyncio-protocol asyncio WriteTransport writelines11404029
Ref: 15dc11404029
Ref: library/asyncio-protocol asyncio WriteTransport write_eof11404314
Ref: 359811404314
Node: Transportes de datagrama11404604
Ref: library/asyncio-protocol datagram-transports11404741
Ref: 359d11404741
Ref: library/asyncio-protocol asyncio DatagramTransport sendto11404812
Ref: 1af11404812
Ref: library/asyncio-protocol asyncio DatagramTransport abort11405426
Ref: 359e11405426
Node: Transportes de Subprocesso11405769
Ref: library/asyncio-protocol asyncio-subprocess-transports11405876
Ref: 350611405876
Ref: library/asyncio-protocol subprocess-transports11405876
Ref: 359f11405876
Ref: library/asyncio-protocol asyncio SubprocessTransport get_pid11405951
Ref: 35a011405951
Ref: library/asyncio-protocol asyncio SubprocessTransport get_pipe_transport11406050
Ref: 35a111406050
Ref: library/asyncio-protocol asyncio SubprocessTransport get_returncode11406797
Ref: 35a211406797
Ref: library/asyncio-protocol asyncio SubprocessTransport kill11407033
Ref: 35a311407033
Ref: library/asyncio-protocol asyncio SubprocessTransport send_signal11407294
Ref: 35a511407294
Ref: library/asyncio-protocol asyncio SubprocessTransport terminate11407454
Ref: 35a411407454
Ref: library/asyncio-protocol asyncio SubprocessTransport close11407779
Ref: 35a611407779
Node: Protocolos11408006
Ref: library/asyncio-protocol asyncio-protocol11408116
Ref: 354911408116
Ref: library/asyncio-protocol protocols11408116
Ref: 358711408116
Ref: Protocolos-Footnote-111408934
Node: Protocolos de Base11409012
Ref: library/asyncio-protocol base-protocols11409099
Ref: 35a711409099
Ref: library/asyncio-protocol asyncio BaseProtocol11409158
Ref: 358a11409158
Ref: library/asyncio-protocol asyncio Protocol11409251
Ref: 358b11409251
Ref: library/asyncio-protocol asyncio BufferedProtocol11409385
Ref: aac11409385
Ref: library/asyncio-protocol asyncio DatagramProtocol11409542
Ref: 6cf11409542
Ref: library/asyncio-protocol asyncio SubprocessProtocol11409659
Ref: 356a11409659
Node: Base Protocol11409826
Ref: library/asyncio-protocol base-protocol11409941
Ref: 35a811409941
Ref: library/asyncio-protocol asyncio BaseProtocol connection_made11410264
Ref: 354b11410264
Ref: library/asyncio-protocol asyncio BaseProtocol connection_lost11410530
Ref: 358f11410530
Ref: library/asyncio-protocol asyncio BaseProtocol pause_writing11411077
Ref: 359b11411077
Ref: library/asyncio-protocol asyncio BaseProtocol resume_writing11411194
Ref: 359c11411194
Node: Streaming Protocols11411659
Ref: library/asyncio-protocol streaming-protocols11411792
Ref: 35a911411792
Ref: library/asyncio-protocol asyncio Protocol data_received11412202
Ref: 188a11412202
Ref: library/asyncio-protocol asyncio Protocol eof_received11412884
Ref: 35aa11412884
Node: Protocolos de Streaming Bufferizados11413749
Ref: library/asyncio-protocol buffered-streaming-protocols11413893
Ref: 35ab11413893
Ref: library/asyncio-protocol asyncio BufferedProtocol get_buffer11414607
Ref: 35ac11414607
Ref: library/asyncio-protocol asyncio BufferedProtocol buffer_updated11415093
Ref: 35ad11415093
Ref: library/asyncio-protocol asyncio BufferedProtocol eof_received11415299
Ref: 35ae11415299
Node: Protocolos de Datagramas11415872
Ref: library/asyncio-protocol datagram-protocols11416022
Ref: 35af11416022
Ref: library/asyncio-protocol asyncio DatagramProtocol datagram_received11416232
Ref: 35b011416232
Ref: library/asyncio-protocol asyncio DatagramProtocol error_received11416498
Ref: 35b111416498
Node: Protocolos de Subprocesso11417434
Ref: library/asyncio-protocol asyncio-subprocess-protocols11417539
Ref: 350711417539
Ref: library/asyncio-protocol subprocess-protocols11417539
Ref: 35b211417539
Ref: library/asyncio-protocol asyncio SubprocessProtocol pipe_data_received11417787
Ref: 18d911417787
Ref: library/asyncio-protocol asyncio SubprocessProtocol pipe_connection_lost11418061
Ref: 35b311418061
Ref: library/asyncio-protocol asyncio SubprocessProtocol process_exited11418276
Ref: 18d811418276
Node: Exemplos<19>11418493
Ref: library/asyncio-protocol examples11418583
Ref: 358c11418583
Node: TCP Echo Server11418838
Ref: library/asyncio-protocol asyncio-example-tcp-echo-server-protocol11418926
Ref: 34d211418926
Ref: library/asyncio-protocol tcp-echo-server11418926
Ref: 35b411418926
Node: TCP Echo Client11420205
Ref: library/asyncio-protocol asyncio-example-tcp-echo-client-protocol11420317
Ref: 34cf11420317
Ref: library/asyncio-protocol tcp-echo-client11420317
Ref: 35b511420317
Node: UDP Echo Server11421880
Ref: library/asyncio-protocol asyncio-udp-echo-server-protocol11421992
Ref: 354f11421992
Ref: library/asyncio-protocol udp-echo-server11421992
Ref: 35b611421992
Node: UDP Echo Client11423128
Ref: library/asyncio-protocol asyncio-udp-echo-client-protocol11423252
Ref: 354e11423252
Ref: library/asyncio-protocol udp-echo-client11423252
Ref: 35b711423252
Node: Connecting Existing Sockets11424784
Ref: library/asyncio-protocol asyncio-example-create-connection11424936
Ref: 34d611424936
Ref: library/asyncio-protocol connecting-existing-sockets11424936
Ref: 35b811424936
Node: loop subprocess_exec and SubprocessProtocol11426855
Ref: library/asyncio-protocol asyncio-example-subprocess-proto11426983
Ref: 351711426983
Ref: library/asyncio-protocol loop-subprocess-exec-and-subprocessprotocol11426983
Ref: 35b911426983
Node: Políticas11429294
Ref: library/asyncio-policy doc11429429
Ref: 35ba11429429
Ref: library/asyncio-policy asyncio-policies11429429
Ref: 353711429429
Ref: library/asyncio-policy policies11429429
Ref: 35bb11429429
Ref: library/asyncio-policy translation-repo11429429
Ref: 35bc11429429
Node: Getting and Setting the Policy11430369
Ref: library/asyncio-policy asyncio-policy-get-set11430469
Ref: 35bd11430469
Ref: library/asyncio-policy getting-and-setting-the-policy11430469
Ref: 35c211430469
Ref: library/asyncio-policy asyncio get_event_loop_policy11430642
Ref: 35c311430642
Ref: library/asyncio-policy asyncio set_event_loop_policy11430742
Ref: 35c411430742
Node: Policy Objects11430923
Ref: library/asyncio-policy asyncio-policy-objects11431054
Ref: 35c011431054
Ref: library/asyncio-policy policy-objects11431054
Ref: 35c511431054
Ref: library/asyncio-policy asyncio AbstractEventLoopPolicy11431173
Ref: 35c111431173
Ref: library/asyncio-policy asyncio AbstractEventLoopPolicy get_event_loop11431269
Ref: 35c611431269
Ref: library/asyncio-policy asyncio AbstractEventLoopPolicy set_event_loop11431564
Ref: 35c711431564
Ref: library/asyncio-policy asyncio AbstractEventLoopPolicy new_event_loop11431673
Ref: 35c811431673
Ref: library/asyncio-policy asyncio AbstractEventLoopPolicy get_child_watcher11431827
Ref: 2c111431827
Ref: library/asyncio-policy asyncio AbstractEventLoopPolicy set_child_watcher11432110
Ref: 2c011432110
Ref: library/asyncio-policy asyncio-policy-builtin11432310
Ref: 35be11432310
Ref: library/asyncio-policy asyncio DefaultEventLoopPolicy11432363
Ref: 35c911432363
Ref: library/asyncio-policy asyncio WindowsSelectorEventLoopPolicy11433071
Ref: 35ca11433071
Ref: library/asyncio-policy asyncio WindowsProactorEventLoopPolicy11433283
Ref: 35cb11433283
Node: Monitores de processos11433495
Ref: library/asyncio-policy asyncio-watchers11433611
Ref: 351511433611
Ref: library/asyncio-policy process-watchers11433611
Ref: 35cc11433611
Ref: library/asyncio-policy asyncio get_child_watcher11434491
Ref: 2bf11434491
Ref: library/asyncio-policy asyncio set_child_watcher11434640
Ref: 2be11434640
Ref: library/asyncio-policy asyncio AbstractChildWatcher11435112
Ref: 2bc11435112
Ref: library/asyncio-policy asyncio AbstractChildWatcher add_child_handler11435154
Ref: 35cd11435154
Ref: library/asyncio-policy asyncio AbstractChildWatcher remove_child_handler11435548
Ref: 35ce11435548
Ref: library/asyncio-policy asyncio AbstractChildWatcher attach_loop11435801
Ref: 18e011435801
Ref: library/asyncio-policy asyncio AbstractChildWatcher is_active11436066
Ref: 35cf11436066
Ref: library/asyncio-policy asyncio AbstractChildWatcher close11436317
Ref: 35d011436317
Ref: library/asyncio-policy asyncio ThreadedChildWatcher11436519
Ref: 47b11436519
Ref: library/asyncio-policy asyncio MultiLoopChildWatcher11436997
Ref: 2ba11436997
Ref: library/asyncio-policy asyncio SafeChildWatcher11437708
Ref: 2bd11437708
Ref: library/asyncio-policy asyncio FastChildWatcher11438341
Ref: 2bb11438341
Ref: library/asyncio-policy asyncio PidfdChildWatcher11438851
Ref: 47911438851
Node: Custom Policies11439456
Ref: library/asyncio-policy asyncio-custom-policies11439549
Ref: 35bf11439549
Ref: library/asyncio-policy custom-policies11439549
Ref: 35d111439549
Node: Suporte a plataformas11440158
Ref: library/asyncio-platforms doc11440280
Ref: 35d211440280
Ref: library/asyncio-platforms asyncio-platform-support11440280
Ref: 355911440280
Ref: library/asyncio-platforms platform-support11440280
Ref: 35d311440280
Ref: library/asyncio-platforms translation-repo11440280
Ref: 35d411440280
Node: Todas as plataformas11440609
Ref: library/asyncio-platforms all-platforms11440707
Ref: 35d511440707
Node: Windows<81>11440885
Ref: library/asyncio-platforms windows11441001
Ref: 35d611441001
Ref: Windows<81>-Footnote-111442853
Ref: Windows<81>-Footnote-211442937
Ref: Windows<81>-Footnote-311443020
Ref: Windows<81>-Footnote-411443102
Node: Suporte para subprocesso no Windows11443167
Ref: library/asyncio-platforms asyncio-windows-subprocess11443250
Ref: 350311443250
Ref: library/asyncio-platforms subprocess-support-on-windows11443250
Ref: 35d811443250
Node: macOS<51>11443643
Ref: library/asyncio-platforms macos11443730
Ref: 35d911443730
Node: Extensão11444361
Ref: library/asyncio-extending doc11444502
Ref: 35db11444502
Ref: library/asyncio-extending extending11444502
Ref: 35dc11444502
Ref: library/asyncio-extending translation-repo11444502
Ref: 35dd11444502
Node: Escrevendo um laço de eventos personalizado11445101
Ref: library/asyncio-extending writing-a-custom-event-loop11445238
Ref: 35de11445238
Node: Construtores privados de Future e Task11446027
Ref: library/asyncio-extending future-and-task-private-constructors11446208
Ref: 35df11446208
Ref: library/asyncio-extending asyncio Future __init__11446794
Ref: 35e011446794
Ref: library/asyncio-extending asyncio Task __init__11446946
Ref: 35e111446946
Node: Suporte ao ciclo de vida de tarefas11447272
Ref: library/asyncio-extending task-lifetime-support11447400
Ref: 35e211447400
Ref: library/asyncio-extending asyncio _register_task11447677
Ref: 35e311447677
Ref: library/asyncio-extending asyncio _unregister_task11447840
Ref: 35e411447840
Ref: library/asyncio-extending asyncio _enter_task11448022
Ref: 35e511448022
Ref: library/asyncio-extending asyncio _leave_task11448284
Ref: 35e611448284
Node: Índice da API de alto nível11448500
Ref: library/asyncio-api-index doc11448651
Ref: 87d11448651
Ref: library/asyncio-api-index high-level-api-index11448651
Ref: 35e711448651
Ref: library/asyncio-api-index translation-repo11448651
Ref: 35e811448651
Node: Tarefas11448965
Ref: library/asyncio-api-index tasks11449055
Ref: 35e911449055
Node: Filas<2>11453596
Ref: library/asyncio-api-index queues11453710
Ref: 35ea11453710
Node: Subprocessos<2>11454772
Ref: library/asyncio-api-index subprocesses11454889
Ref: 35eb11454889
Node: Streams<2>11455493
Ref: library/asyncio-api-index streams11455617
Ref: 35ec11455617
Node: Sincronização11457182
Ref: library/asyncio-api-index synchronization11457305
Ref: 35ed11457305
Node: Exceções<14>11458710
Ref: library/asyncio-api-index exceptions11458814
Ref: 35ee11458814
Node: Índice de APIs de baixo nível11459632
Ref: library/asyncio-llapi-index doc11459799
Ref: 35ef11459799
Ref: library/asyncio-llapi-index low-level-api-index11459799
Ref: 35f011459799
Ref: library/asyncio-llapi-index translation-repo11459799
Ref: 35f111459799
Node: Obtendo o laço de eventos11460147
Ref: library/asyncio-llapi-index obtaining-the-event-loop11460281
Ref: 35f211460281
Node: Métodos do laço de eventos<2>11461468
Ref: library/asyncio-llapi-index event-loop-methods11461625
Ref: 35f311461625
Node: Transportes<2>11474732
Ref: library/asyncio-llapi-index transports11474876
Ref: 35f411474876
Node: Protocolos<2>11481307
Ref: library/asyncio-llapi-index protocols11481450
Ref: 35f511481450
Node: Políticas de laço de eventos11485441
Ref: library/asyncio-llapi-index event-loop-policies11485561
Ref: 35f611485561
Node: Desenvolvendo com asyncio11486479
Ref: library/asyncio-dev doc11486608
Ref: 35f711486608
Ref: library/asyncio-dev asyncio-dev11486608
Ref: 35f811486608
Ref: library/asyncio-dev developing-with-asyncio11486608
Ref: 35f911486608
Ref: library/asyncio-dev translation-repo11486608
Ref: 35fa11486608
Node: Modo de Depuração11487066
Ref: library/asyncio-dev asyncio-debug-mode11487190
Ref: 1ed311487190
Ref: library/asyncio-dev debug-mode11487190
Ref: 35fb11487190
Node: Concorrência e Múltiplas Threads11488864
Ref: library/asyncio-dev asyncio-multithreading11489026
Ref: 34a611489026
Ref: library/asyncio-dev concurrency-and-multithreading11489026
Ref: 35fd11489026
Node: Executando código bloqueante11491518
Ref: library/asyncio-dev asyncio-handle-blocking11491676
Ref: 35fe11491676
Ref: library/asyncio-dev running-blocking-code11491676
Ref: 35ff11491676
Node: Gerando logs<3>11492224
Ref: library/asyncio-dev asyncio-logger11492384
Ref: 35fc11492384
Ref: library/asyncio-dev logging11492384
Ref: 360011492384
Node: Detectar corrotinas nunca aguardadas11492891
Ref: library/asyncio-dev asyncio-coroutine-not-scheduled11493059
Ref: 360211493059
Ref: library/asyncio-dev detect-never-awaited-coroutines11493059
Ref: 360311493059
Node: Detectar exceções nunca recuperadas11494102
Ref: library/asyncio-dev detect-never-retrieved-exceptions11494246
Ref: 360411494246
Ref: Detectar exceções nunca recuperadas-Footnote-111495909
Node: socket — Interface de rede de baixo nível11495974
Ref: library/socket doc11496186
Ref: 360511496186
Ref: library/socket module-socket11496186
Ref: cc11496186
Ref: library/socket socket-low-level-networking-interface11496186
Ref: 360611496186
Ref: library/socket translation-repo11496186
Ref: 360711496186
Ref: socket — Interface de rede de baixo nível-Footnote-111497883
Node: Famílias de soquete11497949
Ref: library/socket socket-families11498082
Ref: 360811498082
Ref: library/socket host-port11499466
Ref: 360911499466
Ref: Famílias de soquete-Footnote-111510055
Ref: Famílias de soquete-Footnote-211510097
Node: Conteúdo do módulo<4>11510142
Ref: library/socket module-contents11510298
Ref: 361011510298
Node: Exceções<15>11510515
Ref: library/socket exceptions11510611
Ref: 361111510611
Ref: library/socket socket error11510650
Ref: 108e11510650
Ref: library/socket socket herror11510859
Ref: 361211510859
Ref: library/socket socket gaierror11511485
Ref: 184c11511485
Ref: library/socket socket timeout11512091
Ref: 83711512091
Ref: Exceções<15>-Footnote-111512743
Node: Constantes<8>11512785
Ref: library/socket constants11512902
Ref: 361411512902
Ref: library/socket socket AF_UNIX11513084
Ref: 193a11513084
Ref: library/socket socket AF_INET11513109
Ref: 193811513109
Ref: library/socket socket AF_INET611513134
Ref: 193911513134
Ref: library/socket socket AF_UNSPEC11513448
Ref: 355111513448
Ref: library/socket socket SOCK_STREAM11513659
Ref: 133711513659
Ref: library/socket socket SOCK_DGRAM11513688
Ref: 133611513688
Ref: library/socket socket SOCK_RAW11513716
Ref: 361511513716
Ref: library/socket socket SOCK_RDM11513742
Ref: 361611513742
Ref: library/socket socket SOCK_SEQPACKET11513768
Ref: 361711513768
Ref: library/socket socket SOCK_CLOEXEC11514069
Ref: c2511514069
Ref: library/socket socket SOCK_NONBLOCK11514099
Ref: c2411514099
Ref: library/socket socket-unix-constants11514529
Ref: b8b11514529
Ref: library/socket socket SOMAXCONN11514544
Ref: e8e11514544
Ref: library/socket socket AF_CAN11517166
Ref: 360a11517166
Ref: library/socket socket PF_CAN11517190
Ref: 361811517190
Ref: library/socket socket CAN_BCM11517621
Ref: fd711517621
Ref: library/socket socket CAN_RAW_FD_FRAMES11518054
Ref: ef911518054
Ref: library/socket socket CAN_RAW_JOIN_FILTERS11518478
Ref: 93811518478
Ref: library/socket socket CAN_ISOTP11518788
Ref: 360b11518788
Ref: library/socket socket CAN_J193911519048
Ref: 93911519048
Ref: library/socket socket AF_DIVERT11519292
Ref: 361911519292
Ref: library/socket socket PF_DIVERT11519319
Ref: 361a11519319
Ref: library/socket socket AF_PACKET11519554
Ref: 360c11519554
Ref: library/socket socket PF_PACKET11519581
Ref: 361b11519581
Ref: library/socket socket ETH_P_ALL11519799
Ref: 18ab11519799
Ref: library/socket socket AF_RDS11520157
Ref: 361c11520157
Ref: library/socket socket PF_RDS11520181
Ref: 361d11520181
Ref: library/socket socket SOL_RDS11520205
Ref: 361e11520205
Ref: library/socket socket SIO_RCVALL11520454
Ref: 361f11520454
Ref: library/socket socket SIO_KEEPALIVE_VALS11520482
Ref: 362011520482
Ref: library/socket socket SIO_LOOPBACK_FAST_PATH11520518
Ref: cf411520518
Ref: library/socket socket AF_ALG11520938
Ref: cf711520938
Ref: library/socket socket SOL_ALG11520962
Ref: 362111520962
Ref: library/socket socket AF_VSOCK11521138
Ref: b8c11521138
Ref: library/socket socket IOCTL_VM_SOCKETS_GET_LOCAL_CID11521164
Ref: 362211521164
Ref: library/socket socket AF_LINK11521385
Ref: fd811521385
Ref: library/socket socket has_ipv611521492
Ref: 362311521492
Ref: library/socket socket BDADDR_ANY11521624
Ref: 362411521624
Ref: library/socket socket BDADDR_LOCAL11521652
Ref: 362511521652
Ref: library/socket socket HCI_FILTER11521921
Ref: 362611521921
Ref: library/socket socket HCI_TIME_STAMP11521949
Ref: 362711521949
Ref: library/socket socket HCI_DATA_DIR11521981
Ref: 362811521981
Ref: library/socket socket AF_QIPCRTR11522191
Ref: 360d11522191
Ref: library/socket socket SCM_CREDS211522390
Ref: 362911522390
Ref: library/socket socket LOCAL_CREDS11522418
Ref: 362a11522418
Ref: library/socket socket LOCAL_CREDS_PERSISTENT11522447
Ref: 362b11522447
Ref: library/socket socket SO_INCOMING_CPU11522893
Ref: 362c11522893
Ref: library/socket socket AF_HYPERV11523107
Ref: 360e11523107
Ref: library/socket socket HV_PROTOCOL_RAW11523134
Ref: 362d11523134
Ref: library/socket socket HVSOCKET_CONNECT_TIMEOUT11523167
Ref: 362e11523167
Ref: library/socket socket HVSOCKET_CONNECT_TIMEOUT_MAX11523209
Ref: 362f11523209
Ref: library/socket socket HVSOCKET_CONNECTED_SUSPEND11523255
Ref: 363011523255
Ref: library/socket socket HVSOCKET_ADDRESS_FLAG_PASSTHRU11523299
Ref: 363111523299
Ref: library/socket socket HV_GUID_ZERO11523347
Ref: 363211523347
Ref: library/socket socket HV_GUID_WILDCARD11523377
Ref: 363311523377
Ref: library/socket socket HV_GUID_BROADCAST11523411
Ref: 363411523411
Ref: library/socket socket HV_GUID_CHILDREN11523446
Ref: 363511523446
Ref: library/socket socket HV_GUID_LOOPBACK11523480
Ref: 363611523480
Ref: library/socket socket HV_GUID_PARENT11523514
Ref: 363711523514
Ref: library/socket socket-ethernet-types11523706
Ref: 18ac11523706
Ref: library/socket socket ETHERTYPE_ARP11523706
Ref: 363811523706
Ref: library/socket socket ETHERTYPE_IP11523737
Ref: 363911523737
Ref: library/socket socket ETHERTYPE_IPV611523767
Ref: 363a11523767
Ref: library/socket socket ETHERTYPE_VLAN11523799
Ref: 363b11523799
Ref: library/socket socket SHUT_RD11523974
Ref: 363c11523974
Ref: library/socket socket SHUT_WR11523999
Ref: 363d11523999
Ref: library/socket socket SHUT_RDWR11524024
Ref: 363e11524024
Ref: Constantes<8>-Footnote-111524227
Ref: Constantes<8>-Footnote-211524279
Ref: Constantes<8>-Footnote-311524325
Node: Funções<8>11524405
Ref: library/socket functions11524499
Ref: 364011524499
Node: Criação de sockets11524612
Ref: library/socket creating-sockets11524709
Ref: 364111524709
Ref: library/socket socket socket11524832
Ref: dc911524832
Ref: library/socket socket socketpair11527427
Ref: c1011527427
Ref: library/socket socket create_connection11528167
Ref: 67211528167
Ref: library/socket socket create_server11529682
Ref: a3511529682
Ref: library/socket socket has_dualstack_ipv611531516
Ref: a3611531516
Ref: library/socket socket fromfd11531718
Ref: 364311531718
Ref: library/socket socket fromshare11532608
Ref: c2111532608
Ref: library/socket socket SocketType11532872
Ref: 364511532872
Node: Outras funções<2>11533025
Ref: library/socket other-functions11533122
Ref: 364611533122
Ref: library/socket socket close11533249
Ref: b8911533249
Ref: library/socket socket getaddrinfo11533528
Ref: 184b11533528
Ref: library/socket socket getfqdn11537634
Ref: 187511537634
Ref: library/socket socket gethostbyname11538251
Ref: 364711538251
Ref: library/socket socket gethostbyname_ex11538906
Ref: 1a1111538906
Ref: library/socket socket gethostname11539707
Ref: 2d0611539707
Ref: library/socket socket gethostbyaddr11540143
Ref: 1a1011540143
Ref: library/socket socket getnameinfo11540895
Ref: 17b611540895
Ref: library/socket socket getprotobyname11541678
Ref: 364811541678
Ref: library/socket socket getservbyname11542178
Ref: 364911542178
Ref: library/socket socket getservbyport11542645
Ref: 364a11542645
Ref: library/socket socket ntohl11543099
Ref: 364b11543099
Ref: library/socket socket ntohs11543356
Ref: 88411543356
Ref: library/socket socket htonl11543733
Ref: 364c11543733
Ref: library/socket socket htons11543990
Ref: 88311543990
Ref: library/socket socket inet_aton11544367
Ref: 96811544367
Ref: library/socket socket inet_ntoa11545298
Ref: 364d11545298
Ref: library/socket socket inet_pton11546121
Ref: 96911546121
Ref: library/socket socket inet_ntop11546925
Ref: fd911546925
Ref: library/socket socket CMSG_LEN11547925
Ref: 1baf11547925
Ref: library/socket socket CMSG_SPACE11548615
Ref: 1bae11548615
Ref: library/socket socket getdefaulttimeout11549524
Ref: 364411549524
Ref: library/socket socket setdefaulttimeout11549802
Ref: 361311549802
Ref: library/socket socket sethostname11550090
Ref: 117a11550090
Ref: library/socket socket if_nameindex11550453
Ref: a3711550453
Ref: library/socket socket if_nametoindex11551272
Ref: a3811551272
Ref: library/socket socket if_indextoname11551756
Ref: a3911551756
Ref: library/socket socket send_fds11552242
Ref: 93a11552242
Ref: library/socket socket recv_fds11552725
Ref: 93b11552725
Ref: Outras funções<2>-Footnote-111553318
Ref: Outras funções<2>-Footnote-211553371
Ref: Outras funções<2>-Footnote-311553422
Ref: Outras funções<2>-Footnote-411553466
Node: Socket Objects11553525
Ref: library/socket id111553696
Ref: 364e11553696
Ref: library/socket socket-objects11553696
Ref: 364211553696
Ref: library/socket socket socket accept11554050
Ref: dca11554050
Ref: library/socket socket socket bind11554819
Ref: 158311554819
Ref: library/socket socket socket close11555176
Ref: d6611555176
Ref: library/socket socket socket connect11556174
Ref: dcb11556174
Ref: library/socket socket socket connect_ex11557302
Ref: 158211557302
Ref: library/socket socket socket detach11557938
Ref: 125d11557938
Ref: library/socket socket socket dup11558187
Ref: 364f11558187
Ref: library/socket socket socket fileno11558417
Ref: 365011558417
Ref: library/socket socket socket get_inheritable11558779
Ref: f3011558779
Ref: library/socket socket socket getpeername11559049
Ref: 359011559049
Ref: library/socket socket socket getsockname11559389
Ref: 359111559389
Ref: library/socket socket socket getsockopt11559639
Ref: cf511559639
Ref: library/socket socket socket getblocking11560395
Ref: b8811560395
Ref: library/socket socket socket gettimeout11560625
Ref: 365111560625
Ref: library/socket socket socket ioctl11560873
Ref: cf311560873
Ref: library/socket socket socket listen11561513
Ref: e8d11561513
Ref: library/socket socket socket makefile11561987
Ref: 11de11561987
Ref: library/socket socket socket recv11563136
Ref: dcc11563136
Ref: library/socket socket socket recvfrom11563845
Ref: dcd11563845
Ref: library/socket socket socket recvmsg11564790
Ref: dce11564790
Ref: library/socket socket socket recvmsg_into11568719
Ref: 117911568719
Ref: library/socket socket socket recvfrom_into11570368
Ref: 136311570368
Ref: library/socket socket socket recv_into11570907
Ref: 136211570907
Ref: library/socket socket socket send11571359
Ref: dcf11571359
Ref: library/socket socket socket sendall11572176
Ref: dd011572176
Ref: library/socket socket socket sendto11573156
Ref: dd111573156
Ref: library/socket socket socket sendmsg11574000
Ref: 47611574000
Ref: library/socket socket socket sendmsg_afalg11576193
Ref: cf811576193
Ref: library/socket socket socket sendfile11576542
Ref: e8c11576542
Ref: library/socket socket socket set_inheritable11577455
Ref: f3111577455
Ref: library/socket socket socket setblocking11577643
Ref: 2d1d11577643
Ref: library/socket socket socket settimeout11578217
Ref: 360f11578217
Ref: library/socket socket socket setsockopt11578955
Ref: cf611578955
Ref: library/socket socket socket shutdown11580035
Ref: 363f11580035
Ref: library/socket socket socket share11580396
Ref: c2211580396
Ref: library/socket socket socket family11581273
Ref: 365511581273
Ref: library/socket socket socket type11581327
Ref: c2611581327
Ref: library/socket socket socket proto11581377
Ref: 365611581377
Ref: Socket Objects-Footnote-111581468
Ref: Socket Objects-Footnote-211581510
Ref: Socket Objects-Footnote-311581552
Ref: Socket Objects-Footnote-411581602
Ref: Socket Objects-Footnote-511581676
Ref: Socket Objects-Footnote-611581720
Ref: Socket Objects-Footnote-711581762
Ref: Socket Objects-Footnote-811581806
Ref: Socket Objects-Footnote-911581848
Ref: Socket Objects-Footnote-1011581890
Ref: Socket Objects-Footnote-1111581935
Ref: Socket Objects-Footnote-1211581980
Ref: Socket Objects-Footnote-1311582023
Ref: Socket Objects-Footnote-1411582066
Ref: Socket Objects-Footnote-1511582109
Ref: Socket Objects-Footnote-1611582152
Node: Notas sobre tempo limite de soquete11582203
Ref: library/socket notes-on-socket-timeouts11582361
Ref: 365711582361
Ref: library/socket socket-timeouts11582361
Ref: 365411582361
Node: Timeouts and the connect method11583774
Ref: library/socket timeouts-and-the-connect-method11583916
Ref: 365811583916
Node: Timeouts and the accept method11584391
Ref: library/socket timeouts-and-the-accept-method11584533
Ref: 365911584533
Node: Exemplo<7>11585274
Ref: library/socket example11585409
Ref: 365a11585409
Ref: library/socket socket-example11585409
Ref: 365b11585409
Ref: Exemplo<7>-Footnote-111593157
Node: ssl — Invólucro de TLS/SSL para objetos socket11593216
Ref: library/ssl doc11593438
Ref: 365c11593438
Ref: library/ssl module-ssl11593438
Ref: d011593438
Ref: library/ssl ssl-tls-ssl-wrapper-for-socket-objects11593438
Ref: 365d11593438
Ref: library/ssl translation-repo11593438
Ref: 365e11593438
Ref: ssl — Invólucro de TLS/SSL para objetos socket-Footnote-111596723
Ref: ssl — Invólucro de TLS/SSL para objetos socket-Footnote-211596786
Node: Funções constantes e exceções11596828
Ref: library/ssl functions-constants-and-exceptions11596967
Ref: 365f11596967
Node: Criação de socket11597229
Ref: library/ssl socket-creation11597348
Ref: 366011597348
Node: Criação de contexto11598943
Ref: library/ssl context-creation11599085
Ref: 366111599085
Ref: library/ssl ssl create_default_context11599235
Ref: 15511599235
Ref: Criação de contexto-Footnote-111603256
Ref: Criação de contexto-Footnote-211603315
Ref: Criação de contexto-Footnote-311603360
Node: Exceções<16>11603419
Ref: library/ssl exceptions11603559
Ref: 366611603559
Ref: library/ssl ssl SSLError11603598
Ref: 12bb11603598
Ref: library/ssl ssl SSLError library11604174
Ref: 118611604174
Ref: library/ssl ssl SSLError reason11604458
Ref: 118711604458
Ref: library/ssl ssl SSLZeroReturnError11604723
Ref: 366711604723
Ref: library/ssl ssl SSLWantReadError11605025
Ref: e9811605025
Ref: library/ssl ssl SSLWantWriteError11605340
Ref: e9911605340
Ref: library/ssl ssl SSLSyscallError11605652
Ref: 366911605652
Ref: library/ssl ssl SSLEOFError11605949
Ref: 184011605949
Ref: library/ssl ssl SSLCertVerificationError11606225
Ref: b9411606225
Ref: library/ssl ssl SSLCertVerificationError verify_code11606397
Ref: 366a11606397
Ref: library/ssl ssl SSLCertVerificationError verify_message11606500
Ref: 366b11606500
Ref: library/ssl ssl CertificateError11606597
Ref: 366c11606597
Node: Random generation11606797
Ref: library/ssl random-generation11606945
Ref: 366d11606945
Ref: library/ssl ssl RAND_bytes11607000
Ref: 52411607000
Ref: library/ssl ssl RAND_status11607690
Ref: 1a0a11607690
Ref: library/ssl ssl RAND_add11608010
Ref: 366e11608010
Ref: Random generation-Footnote-111608456
Ref: Random generation-Footnote-211608550
Node: Manipulação de certificados11608609
Ref: library/ssl certificate-handling11608756
Ref: 366f11608756
Ref: library/ssl ssl cert_time_to_seconds11608833
Ref: e9a11608833
Ref: library/ssl ssl get_server_certificate11609744
Ref: 83f11609744
Ref: library/ssl ssl DER_cert_to_PEM_cert11610920
Ref: 367111610920
Ref: library/ssl ssl PEM_cert_to_DER_cert11611102
Ref: 367211611102
Ref: library/ssl ssl get_default_verify_paths11611282
Ref: fde11611282
Ref: library/ssl ssl enum_certificates11612164
Ref: fe911612164
Ref: library/ssl ssl enum_crls11613051
Ref: fea11613051
Ref: Manipulação de certificados-Footnote-111613628
Node: Constantes<9>11613687
Ref: library/ssl constants11613808
Ref: 367311613808
Ref: library/ssl ssl CERT_NONE11613981
Ref: 367411613981
Ref: library/ssl ssl CERT_OPTIONAL11614541
Ref: 367511614541
Ref: library/ssl ssl CERT_REQUIRED11615291
Ref: 366311615291
Ref: library/ssl ssl VerifyMode11616261
Ref: 367711616261
Ref: library/ssl ssl VERIFY_DEFAULT11616385
Ref: fe311616385
Ref: library/ssl ssl VERIFY_CRL_CHECK_LEAF11616645
Ref: fe411616645
Ref: library/ssl ssl VERIFY_CRL_CHECK_CHAIN11617097
Ref: fe511617097
Ref: library/ssl ssl VERIFY_X509_STRICT11617310
Ref: 15711617310
Ref: library/ssl ssl VERIFY_ALLOW_PROXY_CERTS11617497
Ref: 1a2111617497
Ref: library/ssl ssl VERIFY_X509_TRUSTED_FIRST11617680
Ref: 367811617680
Ref: library/ssl ssl VERIFY_X509_PARTIAL_CHAIN11617976
Ref: 15611617976
Ref: library/ssl ssl VerifyFlags11618415
Ref: 367911618415
Ref: library/ssl ssl PROTOCOL_TLS11618542
Ref: 366511618542
Ref: library/ssl ssl PROTOCOL_TLS_CLIENT11619050
Ref: 87611619050
Ref: library/ssl ssl PROTOCOL_TLS_SERVER11619368
Ref: 87711619368
Ref: library/ssl ssl PROTOCOL_SSLv2311619588
Ref: 367a11619588
Ref: library/ssl ssl PROTOCOL_SSLv311619746
Ref: 367011619746
Ref: library/ssl ssl PROTOCOL_TLSv111620328
Ref: 367b11620328
Ref: library/ssl ssl PROTOCOL_TLSv1_111620525
Ref: fdc11620525
Ref: library/ssl ssl PROTOCOL_TLSv1_211620806
Ref: fdd11620806
Ref: library/ssl ssl OP_ALL11621087
Ref: 367c11621087
Ref: library/ssl ssl OP_NO_SSLv211621351
Ref: 83c11621351
Ref: library/ssl ssl OP_NO_SSLv311621664
Ref: 83d11621664
Ref: library/ssl ssl OP_NO_TLSv111621977
Ref: 367d11621977
Ref: library/ssl ssl OP_NO_TLSv1_111622428
Ref: 367e11622428
Ref: library/ssl ssl OP_NO_TLSv1_211622827
Ref: 367f11622827
Ref: library/ssl ssl OP_NO_TLSv1_311623226
Ref: 19e611623226
Ref: library/ssl ssl OP_NO_RENEGOTIATION11623824
Ref: 368011623824
Ref: library/ssl ssl OP_CIPHER_SERVER_PREFERENCE11624112
Ref: 118811624112
Ref: library/ssl ssl OP_SINGLE_DH_USE11624350
Ref: 368111624350
Ref: library/ssl ssl OP_SINGLE_ECDH_USE11624610
Ref: 368211624610
Ref: library/ssl ssl OP_ENABLE_MIDDLEBOX_COMPAT11624874
Ref: 368311624874
Ref: library/ssl ssl OP_NO_COMPRESSION11625158
Ref: 118511625158
Ref: library/ssl ssl Options11625356
Ref: 368411625356
Ref: library/ssl ssl OP_NO_TICKET11625442
Ref: 368511625442
Ref: library/ssl ssl OP_IGNORE_UNEXPECTED_EOF11625563
Ref: 83a11625563
Ref: library/ssl ssl OP_ENABLE_KTLS11625756
Ref: 189711625756
Ref: library/ssl ssl OP_LEGACY_SERVER_CONNECT11626471
Ref: 187911626471
Ref: library/ssl ssl HAS_ALPN11626636
Ref: e9511626636
Ref: library/ssl ssl HAS_NEVER_CHECK_COMMON_NAME11626850
Ref: 368611626850
Ref: library/ssl ssl HAS_ECDH11627093
Ref: 368711627093
Ref: library/ssl ssl HAS_SNI11627357
Ref: 368811627357
Ref: library/ssl ssl HAS_NPN11627545
Ref: 368911627545
Ref: library/ssl ssl HAS_SSLv211627903
Ref: 368a11627903
Ref: library/ssl ssl HAS_SSLv311628047
Ref: 368b11628047
Ref: library/ssl ssl HAS_TLSv111628191
Ref: 368c11628191
Ref: library/ssl ssl HAS_TLSv1_111628335
Ref: b9b11628335
Ref: library/ssl ssl HAS_TLSv1_211628481
Ref: 368d11628481
Ref: library/ssl ssl HAS_TLSv1_311628627
Ref: 368e11628627
Ref: library/ssl ssl HAS_PSK11628773
Ref: 368f11628773
Ref: library/ssl ssl CHANNEL_BINDING_TYPES11628898
Ref: 369011628898
Ref: library/ssl ssl OPENSSL_VERSION11629124
Ref: 125f11629124
Ref: library/ssl ssl OPENSSL_VERSION_INFO11629343
Ref: 126011629343
Ref: library/ssl ssl OPENSSL_VERSION_NUMBER11629576
Ref: 126111629576
Ref: library/ssl ssl ALERT_DESCRIPTION_HANDSHAKE_FAILURE11629852
Ref: 369111629852
Ref: library/ssl ssl ALERT_DESCRIPTION_INTERNAL_ERROR11629902
Ref: 369211629902
Ref: library/ssl ssl AlertDescription11630301
Ref: 369311630301
Ref: library/ssl ssl Purpose SERVER_AUTH11630449
Ref: fe711630449
Ref: library/ssl ssl Purpose CLIENT_AUTH11630769
Ref: fe811630769
Ref: library/ssl ssl SSLErrorNumber11631089
Ref: 369411631089
Ref: library/ssl ssl TLSVersion11631222
Ref: 369511631222
Ref: library/ssl ssl TLSVersion MINIMUM_SUPPORTED11631445
Ref: 369611631445
Ref: library/ssl ssl TLSVersion MAXIMUM_SUPPORTED11631489
Ref: 369711631489
Ref: library/ssl ssl TLSVersion SSLv311631711
Ref: 369811631711
Ref: library/ssl ssl TLSVersion TLSv111631743
Ref: 369911631743
Ref: library/ssl ssl TLSVersion TLSv1_111631775
Ref: 369a11631775
Ref: library/ssl ssl TLSVersion TLSv1_211631809
Ref: 369b11631809
Ref: library/ssl ssl TLSVersion TLSv1_311631843
Ref: 369c11631843
Ref: Constantes<9>-Footnote-111632118
Ref: Constantes<9>-Footnote-211632177
Ref: Constantes<9>-Footnote-311632236
Ref: Constantes<9>-Footnote-411632314
Ref: Constantes<9>-Footnote-511632373
Node: SSL Sockets11632466
Ref: library/ssl ssl-sockets11632626
Ref: 369d11632626
Ref: library/ssl ssl SSLSocket11632669
Ref: 8f011632669
Ref: library/ssl ssl SSLSocket read11635117
Ref: e9d11635117
Ref: library/ssl ssl SSLSocket write11635947
Ref: e9e11635947
Ref: library/ssl ssl SSLSocket do_handshake11637191
Ref: e9c11637191
Ref: library/ssl ssl SSLSocket getpeercert11638128
Ref: fec11638128
Ref: library/ssl ssl SSLSocket get_verified_chain11641663
Ref: 16c611641663
Ref: library/ssl ssl SSLSocket get_unverified_chain11641978
Ref: 16c711641978
Ref: library/ssl ssl SSLSocket cipher11642178
Ref: 359211642178
Ref: library/ssl ssl SSLSocket shared_ciphers11642463
Ref: e9b11642463
Ref: library/ssl ssl SSLSocket compression11642948
Ref: 118411642948
Ref: library/ssl ssl SSLSocket get_channel_binding11643302
Ref: 118311643302
Ref: library/ssl ssl SSLSocket selected_alpn_protocol11643943
Ref: e9411643943
Ref: library/ssl ssl SSLSocket selected_npn_protocol11644362
Ref: 87811644362
Ref: library/ssl ssl SSLSocket unwrap11644798
Ref: 369e11644798
Ref: library/ssl ssl SSLSocket verify_client_post_handshake11645222
Ref: a3c11645222
Ref: library/ssl ssl SSLSocket version11646109
Ref: e9711646109
Ref: library/ssl ssl SSLSocket pending11646528
Ref: 36a011646528
Ref: library/ssl ssl SSLSocket context11646667
Ref: 369f11646667
Ref: library/ssl ssl SSLSocket server_side11646801
Ref: 36a111646801
Ref: library/ssl ssl SSLSocket server_hostname11646977
Ref: b9711646977
Ref: library/ssl ssl SSLSocket session11647487
Ref: 169311647487
Ref: library/ssl ssl SSLSocket session_reused11647849
Ref: 36a211647849
Ref: SSL Sockets-Footnote-111647958
Ref: SSL Sockets-Footnote-211648017
Node: SSL Contexts11648076
Ref: library/ssl ssl-contexts11648215
Ref: 36a311648215
Ref: library/ssl ssl SSLContext11648566
Ref: 29411648566
Ref: library/ssl ssl SSLContext cert_store_stats11653569
Ref: fe011653569
Ref: library/ssl ssl SSLContext load_cert_chain11653981
Ref: 29511653981
Ref: library/ssl ssl SSLContext load_default_certs11655607
Ref: fe611655607
Ref: library/ssl ssl SSLContext load_verify_locations11656437
Ref: f1d11656437
Ref: library/ssl ssl SSLContext get_ca_certs11657769
Ref: fe111657769
Ref: library/ssl ssl SSLContext get_ciphers11658412
Ref: cff11658412
Ref: library/ssl ssl SSLContext set_default_verify_paths11659721
Ref: fdf11659721
Ref: library/ssl ssl SSLContext set_ciphers11660191
Ref: 36a511660191
Ref: library/ssl ssl SSLContext set_alpn_protocols11660795
Ref: e9311660795
Ref: library/ssl ssl SSLContext set_npn_protocols11661444
Ref: 30211661444
Ref: library/ssl ssl SSLContext sni_callback11662198
Ref: 1a1b11662198
Ref: library/ssl ssl SSLContext set_servername_callback11664842
Ref: feb11664842
Ref: library/ssl ssl SSLContext load_dh_params11665522
Ref: 118111665522
Ref: library/ssl ssl SSLContext set_ecdh_curve11666076
Ref: 118211666076
Ref: library/ssl ssl SSLContext wrap_socket11666819
Ref: 52511666819
Ref: library/ssl ssl SSLContext sslsocket_class11669735
Ref: 36a611669735
Ref: library/ssl ssl SSLContext wrap_bio11670056
Ref: b9a11670056
Ref: library/ssl ssl SSLContext sslobject_class11670806
Ref: 36a711670806
Ref: library/ssl ssl SSLContext session_stats11671105
Ref: 36a811671105
Ref: library/ssl ssl SSLContext check_hostname11671571
Ref: 367611671571
Ref: library/ssl ssl SSLContext keylog_filename11673103
Ref: 366411673103
Ref: library/ssl ssl SSLContext maximum_version11673553
Ref: 87511673553
Ref: library/ssl ssl SSLContext minimum_version11674415
Ref: 87411674415
Ref: library/ssl ssl SSLContext num_tickets11674632
Ref: 36a911674632
Ref: library/ssl ssl SSLContext options11674869
Ref: 83b11674869
Ref: library/ssl ssl SSLContext post_handshake_auth11675605
Ref: a3b11675605
Ref: library/ssl ssl SSLContext protocol11676426
Ref: 36aa11676426
Ref: library/ssl ssl SSLContext hostname_checks_common_name11676561
Ref: b9511676561
Ref: library/ssl ssl SSLContext security_level11677001
Ref: 36ab11677001
Ref: library/ssl ssl SSLContext verify_flags11677180
Ref: fe211677180
Ref: library/ssl ssl SSLContext verify_mode11677721
Ref: 366211677721
Ref: library/ssl ssl SSLContext set_psk_client_callback11678191
Ref: 36ac11678191
Ref: library/ssl ssl SSLContext set_psk_server_callback11680199
Ref: 36ad11680199
Ref: SSL Contexts-Footnote-111682090
Ref: SSL Contexts-Footnote-211682244
Ref: SSL Contexts-Footnote-311682331
Ref: SSL Contexts-Footnote-411682418
Ref: SSL Contexts-Footnote-511682572
Ref: SSL Contexts-Footnote-611682659
Ref: SSL Contexts-Footnote-711682746
Ref: SSL Contexts-Footnote-811682823
Ref: SSL Contexts-Footnote-911682877
Ref: SSL Contexts-Footnote-1011682936
Ref: SSL Contexts-Footnote-1111683015
Ref: SSL Contexts-Footnote-1211683075
Ref: SSL Contexts-Footnote-1311683152
Ref: SSL Contexts-Footnote-1411683218
Node: Certificados11683292
Ref: library/ssl certificates11683432
Ref: 36ae11683432
Ref: library/ssl ssl-certificates11683432
Ref: 36a411683432
Ref: Certificados-Footnote-111685781
Node: Certificate chains11685840
Ref: library/ssl certificate-chains11685931
Ref: 36af11685931
Node: CA certificates11687202
Ref: library/ssl ca-certificates11687330
Ref: 36b011687330
Node: Combined key and certificate11687920
Ref: library/ssl combined-key-and-certificate11688054
Ref: 36b111688054
Node: Self-signed certificates11688670
Ref: library/ssl self-signed-certificates11688780
Ref: 36b211688780
Node: Exemplos<20>11690478
Ref: library/ssl examples11690635
Ref: 36b311690635
Node: Testing for SSL support11690764
Ref: library/ssl testing-for-ssl-support11690866
Ref: 36b411690866
Node: Client-side operation11691180
Ref: library/ssl client-side-operation11691312
Ref: 36b511691312
Node: Server-side operation11696059
Ref: library/ssl server-side-operation11696159
Ref: 36b611696159
Node: Notes on non-blocking sockets11698168
Ref: library/ssl notes-on-non-blocking-sockets11698354
Ref: 36b711698354
Ref: library/ssl ssl-nonblocking11698354
Ref: 366811698354
Node: Підтримка BIO пам’яті<2>11701271
Ref: library/ssl memory-bio-support11701456
Ref: 36b811701456
Ref: library/ssl ssl SSLObject11702602
Ref: b9911702602
Ref: library/ssl ssl MemoryBIO11706264
Ref: e9111706264
Ref: library/ssl ssl MemoryBIO pending11706393
Ref: 36b911706393
Ref: library/ssl ssl MemoryBIO eof11706491
Ref: 36ba11706491
Ref: library/ssl ssl MemoryBIO read11706620
Ref: 36bb11706620
Ref: library/ssl ssl MemoryBIO write11706782
Ref: 36bc11706782
Ref: library/ssl ssl MemoryBIO write_eof11707068
Ref: 36bd11707068
Node: SSL session11707361
Ref: library/ssl ssl-session11707549
Ref: 36be11707549
Ref: library/ssl ssl SSLSession11707622
Ref: cfe11707622
Ref: library/ssl ssl SSLSession id11707700
Ref: 36bf11707700
Ref: library/ssl ssl SSLSession time11707723
Ref: 36c011707723
Ref: library/ssl ssl SSLSession timeout11707748
Ref: 36c111707748
Ref: library/ssl ssl SSLSession ticket_lifetime_hint11707776
Ref: 36c211707776
Ref: library/ssl ssl SSLSession has_ticket11707817
Ref: 36c311707817
Node: Considerações de segurança<2>11707848
Ref: library/ssl security-considerations11708002
Ref: 36c411708002
Ref: library/ssl ssl-security11708002
Ref: 354c11708002
Node: Best defaults11708149
Ref: library/ssl best-defaults11708255
Ref: 36c511708255
Node: Manual settings11709416
Ref: library/ssl manual-settings11709547
Ref: 36c611709547
Node: Verifying certificates11709680
Ref: library/ssl verifying-certificates11709780
Ref: 36c711709780
Node: Protocol versions11710974
Ref: library/ssl protocol-versions11711099
Ref: 36c811711099
Node: Cipher selection11711923
Ref: library/ssl cipher-selection11712017
Ref: 36c911712017
Ref: Cipher selection-Footnote-111712673
Node: Multi-processing11712745
Ref: library/ssl multi-processing11712854
Ref: 36ca11712854
Node: TLS 1 311713377
Ref: library/ssl ssl-tlsv1-311713511
Ref: b9811713511
Ref: library/ssl tls-1-311713511
Ref: 36cb11713511
Ref: TLS 1 3-Footnote-111715687
Ref: TLS 1 3-Footnote-211715753
Ref: TLS 1 3-Footnote-311715812
Ref: TLS 1 3-Footnote-411715871
Ref: TLS 1 3-Footnote-511715930
Ref: TLS 1 3-Footnote-611715989
Ref: TLS 1 3-Footnote-711716048
Ref: TLS 1 3-Footnote-811716124
Ref: TLS 1 3-Footnote-911716183
Node: select — Waiting for I/O completion11716241
Ref: library/select doc11716460
Ref: 36cc11716460
Ref: library/select module-select11716460
Ref: c111716460
Ref: library/select select-waiting-for-i-o-completion11716460
Ref: 36cd11716460
Ref: library/select translation-repo11716460
Ref: 36ce11716460
Ref: library/select select error11717745
Ref: 108f11717745
Ref: library/select select devpoll11717954
Ref: fca11717954
Ref: library/select select epoll11718735
Ref: fc811718735
Ref: library/select select poll11720231
Ref: 2d8a11720231
Ref: library/select select kqueue11720550
Ref: 17c011720550
Ref: library/select select kevent11720901
Ref: 36d311720901
Ref: library/select select select11721178
Ref: dc811721178
Ref: library/select select PIPE_BUF11723467
Ref: 124a11723467
Ref: select — Waiting for I/O completion-Footnote-111724160
Ref: select — Waiting for I/O completion-Footnote-211724202
Node: /dev/poll Polling Objects11724244
Ref: library/select dev-poll-polling-objects11724396
Ref: 36d511724396
Ref: library/select devpoll-objects11724396
Ref: 36cf11724396
Ref: library/select select devpoll close11724762
Ref: fcc11724762
Ref: library/select select devpoll closed11724881
Ref: fcd11724881
Ref: library/select select devpoll fileno11724994
Ref: fcb11724994
Ref: library/select select devpoll register11725122
Ref: 36d611725122
Ref: library/select select devpoll modify11726105
Ref: 36d711726105
Ref: library/select select devpoll unregister11726314
Ref: 36d811726314
Ref: library/select select devpoll poll11726672
Ref: dc411726672
Ref: /dev/poll Polling Objects-Footnote-111727817
Node: Edge and Level Trigger Polling epoll Objects11727859
Ref: library/select edge-and-level-trigger-polling-epoll-objects11728035
Ref: 36d911728035
Ref: library/select epoll-objects11728035
Ref: 36d011728035
Ref: library/select select epoll close11730926
Ref: fc911730926
Ref: library/select select epoll closed11731016
Ref: 36da11731016
Ref: library/select select epoll fileno11731092
Ref: 36db11731092
Ref: library/select select epoll fromfd11731181
Ref: 36dc11731181
Ref: library/select select epoll register11731272
Ref: 36dd11731272
Ref: library/select select epoll modify11731373
Ref: 36de11731373
Ref: library/select select epoll unregister11731459
Ref: 96111731459
Ref: library/select select epoll poll11731654
Ref: dc511731654
Ref: Edge and Level Trigger Polling epoll Objects-Footnote-111732058
Node: Polling Objects11732100
Ref: library/select poll-objects11732265
Ref: 36d111732265
Ref: library/select polling-objects11732265
Ref: 36df11732265
Ref: library/select select poll register11732840
Ref: 36e011732840
Ref: library/select select poll modify11734822
Ref: 36e111734822
Ref: library/select select poll unregister11735124
Ref: 36e211735124
Ref: library/select select poll poll11735514
Ref: dc711735514
Ref: Polling Objects-Footnote-111736662
Node: Kqueue Objects11736704
Ref: library/select id111736839
Ref: 36e311736839
Ref: library/select kqueue-objects11736839
Ref: 36d211736839
Ref: library/select select kqueue close11736888
Ref: 36e411736888
Ref: library/select select kqueue closed11736980
Ref: 36e511736980
Ref: library/select select kqueue fileno11737058
Ref: 36e611737058
Ref: library/select select kqueue fromfd11737148
Ref: 36e711737148
Ref: library/select select kqueue control11737240
Ref: dc611737240
Ref: Kqueue Objects-Footnote-111737893
Node: Kevent Objects11737935
Ref: library/select id211738046
Ref: 36e811738046
Ref: library/select kevent-objects11738046
Ref: 36d411738046
Ref: library/select select kevent ident11738161
Ref: 36e911738161
Ref: library/select select kevent filter11738462
Ref: 36ea11738462
Ref: library/select select kevent flags11740244
Ref: 36eb11740244
Ref: library/select select kevent fflags11741908
Ref: 36ec11741908
Ref: library/select select kevent data11745671
Ref: 36ed11745671
Ref: library/select select kevent udata11745726
Ref: 36ee11745726
Node: selectors — High-level I/O multiplexing11745780
Ref: library/selectors doc11746007
Ref: 36ef11746007
Ref: library/selectors module-selectors11746007
Ref: c211746007
Ref: library/selectors selectors-high-level-i-o-multiplexing11746007
Ref: 36f011746007
Ref: library/selectors translation-repo11746007
Ref: 36f111746007
Ref: selectors — High-level I/O multiplexing-Footnote-111746375
Node: Introdução<10>11746444
Ref: library/selectors introduction11746557
Ref: 36f211746557
Node: Classes<4>11747915
Ref: library/selectors classes11748049
Ref: 36f511748049
Ref: library/selectors selectors EVENT_READ11748630
Ref: 36f611748630
Ref: library/selectors selectors EVENT_WRITE11748725
Ref: 36f711748725
Ref: library/selectors selectors SelectorKey11748807
Ref: 36f811748807
Ref: library/selectors selectors SelectorKey fileobj11749086
Ref: 36f911749086
Ref: library/selectors selectors SelectorKey fd11749149
Ref: 36fa11749149
Ref: library/selectors selectors SelectorKey events11749218
Ref: 36fb11749218
Ref: library/selectors selectors SelectorKey data11749308
Ref: 36fc11749308
Ref: library/selectors selectors BaseSelector11749473
Ref: 36f311749473
Ref: library/selectors selectors BaseSelector register11750150
Ref: 36fd11750150
Ref: library/selectors selectors BaseSelector unregister11750814
Ref: 36fe11750814
Ref: library/selectors selectors BaseSelector modify11751435
Ref: bef11751435
Ref: library/selectors selectors BaseSelector select11752032
Ref: 36ff11752032
Ref: library/selectors selectors BaseSelector close11753333
Ref: 370011753333
Ref: library/selectors selectors BaseSelector get_key11753552
Ref: 370111753552
Ref: library/selectors selectors BaseSelector get_map11753840
Ref: 370211753840
Ref: library/selectors selectors DefaultSelector11754109
Ref: 36f411754109
Ref: library/selectors selectors SelectSelector11754318
Ref: 35d711754318
Ref: library/selectors selectors PollSelector11754406
Ref: bf111754406
Ref: library/selectors selectors EpollSelector11754491
Ref: bf011754491
Ref: library/selectors selectors EpollSelector fileno11754577
Ref: 370311754577
Ref: library/selectors selectors DevpollSelector11754718
Ref: bf211754718
Ref: library/selectors selectors DevpollSelector fileno11754808
Ref: 370411754808
Ref: library/selectors selectors KqueueSelector11754984
Ref: 35da11754984
Ref: library/selectors selectors KqueueSelector fileno11755073
Ref: 370511755073
Ref: Classes<4>-Footnote-111755252
Node: Exemplos<21>11755294
Ref: library/selectors examples11755403
Ref: 370611755403
Node: signal — Define manipuladores para eventos assíncronos11756430
Ref: library/signal doc11756668
Ref: 370711756668
Ref: library/signal module-signal11756668
Ref: c611756668
Ref: library/signal signal-set-handlers-for-asynchronous-events11756668
Ref: 370811756668
Ref: library/signal translation-repo11756668
Ref: 370911756668
Ref: signal — Define manipuladores para eventos assíncronos-Footnote-111757198
Node: Regras gerais11757264
Ref: library/signal general-rules11757403
Ref: 370a11757403
Node: Execução de manipuladores de sinais Python11758465
Ref: library/signal execution-of-python-signal-handlers11758584
Ref: 370c11758584
Node: Sinais e threads11760073
Ref: library/signal id111760192
Ref: 370e11760192
Ref: library/signal signals-and-threads11760192
Ref: 370f11760192
Node: Conteúdo do módulo<5>11760727
Ref: library/signal module-contents11760887
Ref: 371011760887
Ref: library/signal signal Signals11761550
Ref: 371411761550
Ref: library/signal signal Handlers11761700
Ref: 371511761700
Ref: library/signal signal Sigmasks11761870
Ref: 371611761870
Ref: library/signal signal SIG_DFL11762282
Ref: 193c11762282
Ref: library/signal signal SIG_IGN11762652
Ref: 193b11762652
Ref: library/signal signal SIGABRT11762779
Ref: 10bb11762779
Ref: library/signal signal SIGALRM11762850
Ref: 371811762850
Ref: library/signal signal SIGBREAK11762968
Ref: 371911762968
Ref: library/signal signal SIGBUS11763087
Ref: 10bc11763087
Ref: library/signal signal SIGCHLD11763211
Ref: 2dc511763211
Ref: library/signal signal SIGCLD11763327
Ref: 371a11763327
Ref: library/signal signal SIGCONT11763439
Ref: 2dd311763439
Ref: library/signal signal SIGFPE11763566
Ref: 10ba11763566
Ref: library/signal signal SIGHUP11763825
Ref: 371b11763825
Ref: library/signal signal SIGILL11763982
Ref: 10bd11763982
Ref: library/signal signal SIGINT11764033
Ref: 84711764033
Ref: library/signal signal SIGKILL11764166
Ref: b6e11764166
Ref: library/signal signal SIGPIPE11764333
Ref: 370b11764333
Ref: library/signal signal SIGPROF11764511
Ref: 371c11764511
Ref: library/signal signal SIGQUIT11764624
Ref: 371711764624
Ref: library/signal signal SIGSEGV11764727
Ref: 10b911764727
Ref: library/signal signal SIGSTOP11764818
Ref: 371d11764818
Ref: library/signal signal SIGSTKFLT11764907
Ref: 199011764907
Ref: library/signal signal SIGTERM11765269
Ref: 142611765269
Ref: library/signal signal SIGUSR111765324
Ref: 371e11765324
Ref: library/signal signal SIGUSR211765430
Ref: 371f11765430
Ref: library/signal signal SIGVTALRM11765536
Ref: 372011765536
Ref: library/signal signal SIGWINCH11765642
Ref: 372111765642
Ref: library/signal signal SIGXCPU11765756
Ref: 372211765756
Ref: library/signal signal CTRL_C_EVENT11766490
Ref: 13af11766490
Ref: library/signal signal CTRL_BREAK_EVENT11766753
Ref: 13b011766753
Ref: library/signal signal NSIG11767024
Ref: 191611767024
Ref: library/signal signal ITIMER_REAL11767176
Ref: 372411767176
Ref: library/signal signal ITIMER_VIRTUAL11767310
Ref: 372511767310
Ref: library/signal signal ITIMER_PROF11767477
Ref: 372611767477
Ref: library/signal signal SIG_BLOCK11767880
Ref: 371111767880
Ref: library/signal signal SIG_UNBLOCK11768082
Ref: 371211768082
Ref: library/signal signal SIG_SETMASK11768289
Ref: 371311768289
Ref: library/signal signal ItimerError11768555
Ref: 372711768555
Ref: library/signal signal alarm11769110
Ref: 372a11769110
Ref: library/signal signal getsignal11769811
Ref: 17a011769811
Ref: library/signal signal strsignal11770411
Ref: 1bb611770411
Ref: library/signal signal valid_signals11770725
Ref: 372311770725
Ref: library/signal signal pause11770986
Ref: 372b11770986
Ref: library/signal signal raise_signal11771391
Ref: 191a11771391
Ref: library/signal signal pidfd_send_signal11771537
Ref: 93211771537
Ref: library/signal signal pthread_kill11772137
Ref: 117011772137
Ref: library/signal signal pthread_sigmask11773487
Ref: 116f11773487
Ref: library/signal signal setitimer11775004
Ref: 372811775004
Ref: library/signal signal getitimer11776136
Ref: 372911776136
Ref: library/signal signal set_wakeup_fd11776302
Ref: b8611776302
Ref: library/signal signal siginterrupt11778822
Ref: 117411778822
Ref: library/signal signal signal11779563
Ref: 117311779563
Ref: library/signal signal sigpending11781177
Ref: 117111781177
Ref: library/signal signal sigwait11781652
Ref: 117211781652
Ref: library/signal signal sigwaitinfo11782238
Ref: dd311782238
Ref: library/signal signal sigtimedwait11783544
Ref: dd211783544
Ref: Conteúdo do módulo<5>-Footnote-111784407
Ref: Conteúdo do módulo<5>-Footnote-211784458
Ref: Conteúdo do módulo<5>-Footnote-311784513
Ref: Conteúdo do módulo<5>-Footnote-411784558
Ref: Conteúdo do módulo<5>-Footnote-511784603
Ref: Conteúdo do módulo<5>-Footnote-611784649
Ref: Conteúdo do módulo<5>-Footnote-711784695
Ref: Conteúdo do módulo<5>-Footnote-811784741
Ref: Conteúdo do módulo<5>-Footnote-911784786
Ref: Conteúdo do módulo<5>-Footnote-1011784832
Ref: Conteúdo do módulo<5>-Footnote-1111784890
Ref: Conteúdo do módulo<5>-Footnote-1211784943
Ref: Conteúdo do módulo<5>-Footnote-1311784995
Ref: Conteúdo do módulo<5>-Footnote-1411785051
Ref: Conteúdo do módulo<5>-Footnote-1511785104
Ref: Conteúdo do módulo<5>-Footnote-1611785151
Ref: Conteúdo do módulo<5>-Footnote-1711785202
Ref: Conteúdo do módulo<5>-Footnote-1811785250
Ref: Conteúdo do módulo<5>-Footnote-1911785302
Ref: Conteúdo do módulo<5>-Footnote-2011785345
Ref: Conteúdo do módulo<5>-Footnote-2111785398
Node: Exemplos<22>11785441
Ref: library/signal examples11785606
Ref: 372c11785606
Ref: library/signal signal-example11785606
Ref: 372d11785606
Node: Nota sobre SIGPIPE11786635
Ref: library/signal note-on-sigpipe11786824
Ref: 372e11786824
Ref: Nota sobre SIGPIPE-Footnote-111788387
Node: Nota sobre manipuladores de sinais e exceções11788431
Ref: library/signal handlers-and-exceptions11788599
Ref: 242211788599
Ref: library/signal note-on-signal-handlers-and-exceptions11788599
Ref: 372f11788599
Node: mmap — Suporte a arquivos mapeados na memória11791357
Ref: library/mmap doc11791545
Ref: 373011791545
Ref: library/mmap mmap-memory-mapped-file-support11791545
Ref: 373111791545
Ref: library/mmap module-mmap11791545
Ref: 9011791545
Ref: library/mmap translation-repo11791545
Ref: 373211791545
Ref: library/mmap mmap mmap11794464
Ref: 20b11794464
Ref: library/mmap mmap mmap close11800353
Ref: 373811800353
Ref: library/mmap mmap mmap closed11800565
Ref: 373911800565
Ref: library/mmap mmap mmap find11800675
Ref: 373a11800675
Ref: library/mmap mmap mmap flush11801107
Ref: aa711801107
Ref: library/mmap mmap mmap madvise11802024
Ref: a1011802024
Ref: library/mmap mmap mmap move11802598
Ref: 373c11802598
Ref: library/mmap mmap mmap read11802877
Ref: 111c11802877
Ref: library/mmap mmap mmap read_byte11803331
Ref: 373d11803331
Ref: library/mmap mmap mmap readline11803480
Ref: 373e11803480
Ref: library/mmap mmap mmap resize11803706
Ref: 373711803706
Ref: library/mmap mmap mmap rfind11804567
Ref: 373f11804567
Ref: library/mmap mmap mmap seek11805001
Ref: 20d11805001
Ref: library/mmap mmap mmap seekable11805491
Ref: 20c11805491
Ref: library/mmap mmap mmap size11805667
Ref: 373611805667
Ref: library/mmap mmap mmap tell11805807
Ref: 374011805807
Ref: library/mmap mmap mmap write11805895
Ref: d6d11805895
Ref: library/mmap mmap mmap write_byte11806605
Ref: 374111806605
Node: Constantes MADV_*11806974
Ref: library/mmap madv-constants11807101
Ref: 374211807101
Ref: library/mmap madvise-constants11807101
Ref: 373b11807101
Ref: library/mmap mmap MADV_NORMAL11807156
Ref: 374311807156
Ref: library/mmap mmap MADV_RANDOM11807183
Ref: 374411807183
Ref: library/mmap mmap MADV_SEQUENTIAL11807210
Ref: 374511807210
Ref: library/mmap mmap MADV_WILLNEED11807241
Ref: 374611807241
Ref: library/mmap mmap MADV_DONTNEED11807270
Ref: 374711807270
Ref: library/mmap mmap MADV_REMOVE11807299
Ref: 374811807299
Ref: library/mmap mmap MADV_DONTFORK11807326
Ref: 374911807326
Ref: library/mmap mmap MADV_DOFORK11807355
Ref: 374a11807355
Ref: library/mmap mmap MADV_HWPOISON11807382
Ref: 374b11807382
Ref: library/mmap mmap MADV_MERGEABLE11807411
Ref: 374c11807411
Ref: library/mmap mmap MADV_UNMERGEABLE11807441
Ref: 374d11807441
Ref: library/mmap mmap MADV_SOFT_OFFLINE11807473
Ref: 374e11807473
Ref: library/mmap mmap MADV_HUGEPAGE11807506
Ref: 374f11807506
Ref: library/mmap mmap MADV_NOHUGEPAGE11807535
Ref: 375011807535
Ref: library/mmap mmap MADV_DONTDUMP11807566
Ref: 375111807566
Ref: library/mmap mmap MADV_DODUMP11807595
Ref: 375211807595
Ref: library/mmap mmap MADV_FREE11807622
Ref: 375311807622
Ref: library/mmap mmap MADV_NOSYNC11807647
Ref: 375411807647
Ref: library/mmap mmap MADV_AUTOSYNC11807674
Ref: 375511807674
Ref: library/mmap mmap MADV_NOCORE11807703
Ref: 375611807703
Ref: library/mmap mmap MADV_CORE11807730
Ref: 375711807730
Ref: library/mmap mmap MADV_PROTECT11807755
Ref: 375811807755
Ref: library/mmap mmap MADV_FREE_REUSABLE11807783
Ref: 375911807783
Ref: library/mmap mmap MADV_FREE_REUSE11807817
Ref: 375a11807817
Node: Constantes MAP_*11808062
Ref: library/mmap id111808189
Ref: 375b11808189
Ref: library/mmap map-constants11808189
Ref: 373511808189
Ref: library/mmap mmap MAP_SHARED11808242
Ref: 373411808242
Ref: library/mmap mmap MAP_PRIVATE11808268
Ref: 373311808268
Ref: library/mmap mmap MAP_32BIT11808295
Ref: 179711808295
Ref: library/mmap mmap MAP_ALIGNED_SUPER11808320
Ref: 184f11808320
Ref: library/mmap mmap MAP_ANON11808353
Ref: 375c11808353
Ref: library/mmap mmap MAP_ANONYMOUS11808377
Ref: 375d11808377
Ref: library/mmap mmap MAP_CONCEAL11808406
Ref: 185011808406
Ref: library/mmap mmap MAP_DENYWRITE11808433
Ref: 375e11808433
Ref: library/mmap mmap MAP_EXECUTABLE11808462
Ref: 375f11808462
Ref: library/mmap mmap MAP_HASSEMAPHORE11808492
Ref: 179211808492
Ref: library/mmap mmap MAP_JIT11808524
Ref: 179411808524
Ref: library/mmap mmap MAP_NOCACHE11808547
Ref: 179311808547
Ref: library/mmap mmap MAP_NOEXTEND11808574
Ref: 179111808574
Ref: library/mmap mmap MAP_NORESERVE11808602
Ref: 179011808602
Ref: library/mmap mmap MAP_POPULATE11808631
Ref: 1abc11808631
Ref: library/mmap mmap MAP_RESILIENT_CODESIGN11808659
Ref: 179511808659
Ref: library/mmap mmap MAP_RESILIENT_MEDIA11808697
Ref: 179611808697
Ref: library/mmap mmap MAP_STACK11808732
Ref: 376011808732
Ref: library/mmap mmap MAP_TPRO11808757
Ref: 179a11808757
Ref: library/mmap mmap MAP_TRANSLATED_ALLOW_EXECUTE11808781
Ref: 179811808781
Ref: library/mmap mmap MAP_UNIX0311808825
Ref: 179911808825
Node: Manuseio de Dados na Internet11809785
Ref: library/netdata doc11809986
Ref: 376111809986
Ref: library/netdata internet-data-handling11809986
Ref: 376211809986
Ref: library/netdata netdata11809986
Ref: 376311809986
Ref: library/netdata translation-repo11809986
Ref: 376411809986
Node: email — Um e-mail e um pacote MIME manipulável11810639
Ref: library/email doc11810804
Ref: 376511810804
Ref: library/email email-an-email-and-mime-handling-package11810804
Ref: 376611810804
Ref: library/email module-email11810804
Ref: 3b11810804
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-111817937
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-211818011
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-311818070
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-411818129
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-511818188
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-611818247
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-711818306
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-811818365
Ref: email — Um e-mail e um pacote MIME manipulável-Footnote-911818424
Node: email message Representing an email message11818483
Ref: library/email message doc11818656
Ref: 376711818656
Ref: library/email message email-message-representing-an-email-message11818656
Ref: 376811818656
Ref: library/email message module-email message11818656
Ref: 4411818656
Ref: library/email message email message EmailMessage11821136
Ref: 27b11821136
Ref: library/email message email message EmailMessage as_string11821623
Ref: 376a11821623
Ref: library/email message email message EmailMessage __str__11823478
Ref: 376c11823478
Ref: library/email message email message EmailMessage as_bytes11823949
Ref: 376d11823949
Ref: library/email message email message EmailMessage __bytes__11825114
Ref: 376e11825114
Ref: library/email message email message EmailMessage is_multipart11825291
Ref: 376f11825291
Ref: library/email message email message EmailMessage set_unixfrom11825977
Ref: 377011825977
Ref: library/email message email message EmailMessage get_unixfrom11826200
Ref: 377211826200
Ref: library/email message email message EmailMessage __len__11827333
Ref: 377411827333
Ref: library/email message email message EmailMessage __contains__11827432
Ref: 377511827432
Ref: library/email message email message EmailMessage __getitem__11827823
Ref: 377611827823
Ref: library/email message email message EmailMessage __setitem__11828541
Ref: 377911828541
Ref: library/email message email message EmailMessage __delitem__11829580
Ref: 377a11829580
Ref: library/email message email message EmailMessage keys11829807
Ref: 377311829807
Ref: library/email message email message EmailMessage values11829902
Ref: 377b11829902
Ref: library/email message email message EmailMessage items11829993
Ref: 377c11829993
Ref: library/email message email message EmailMessage get11830125
Ref: 377d11830125
Ref: library/email message email message EmailMessage get_all11830474
Ref: 377711830474
Ref: library/email message email message EmailMessage add_header11830712
Ref: 377e11830712
Ref: library/email message email message EmailMessage replace_header11832680
Ref: 377f11832680
Ref: library/email message email message EmailMessage get_content_type11832987
Ref: 378011832987
Ref: library/email message email message EmailMessage get_content_maintype11833873
Ref: 378211833873
Ref: library/email message email message EmailMessage get_content_subtype11834080
Ref: 378311834080
Ref: library/email message email message EmailMessage get_default_type11834274
Ref: 378111834274
Ref: library/email message email message EmailMessage set_default_type11834595
Ref: 378411834595
Ref: library/email message email message EmailMessage set_param11835038
Ref: 378511835038
Ref: library/email message email message EmailMessage del_param11836684
Ref: 378711836684
Ref: library/email message email message EmailMessage get_filename11837123
Ref: 378811837123
Ref: library/email message email message EmailMessage get_boundary11837663
Ref: 378a11837663
Ref: library/email message email message EmailMessage set_boundary11838028
Ref: 378b11838028
Ref: library/email message email message EmailMessage get_content_charset11838697
Ref: 378d11838697
Ref: library/email message email message EmailMessage get_charsets11839000
Ref: 378e11839000
Ref: library/email message email message EmailMessage is_attachment11839694
Ref: 378f11839694
Ref: library/email message email message EmailMessage get_content_disposition11840063
Ref: 379111840063
Ref: library/email message email message EmailMessage walk11840546
Ref: 379211840546
Ref: library/email message email message EmailMessage get_body11842560
Ref: 379311842560
Ref: library/email message email message EmailMessage iter_attachments11844680
Ref: 379411844680
Ref: library/email message email message EmailMessage iter_parts11845655
Ref: 379511845655
Ref: library/email message email message EmailMessage get_content11845869
Ref: 379611845869
Ref: library/email message email message EmailMessage set_content11846280
Ref: 19e811846280
Ref: library/email message email message EmailMessage make_related11846691
Ref: 379911846691
Ref: library/email message email message EmailMessage make_alternative11847180
Ref: 379a11847180
Ref: library/email message email message EmailMessage make_mixed11847700
Ref: 379b11847700
Ref: library/email message email message EmailMessage add_related11848240
Ref: 379c11848240
Ref: library/email message email message EmailMessage add_alternative11848998
Ref: 379e11848998
Ref: library/email message email message EmailMessage add_attachment11849689
Ref: 379f11849689
Ref: library/email message email message EmailMessage clear11850675
Ref: 37a011850675
Ref: library/email message email message EmailMessage clear_content11850757
Ref: 37a111850757
Ref: library/email message email message EmailMessage preamble11851019
Ref: 37a211851019
Ref: library/email message email message EmailMessage epilogue11852282
Ref: 37a311852282
Ref: library/email message email message EmailMessage defects11852627
Ref: 37a411852627
Ref: library/email message email message MIMEPart11852868
Ref: f6d11852868
Ref: email message Representing an email message-Footnote-111853235
Ref: email message Representing an email message-Footnote-211853308
Ref: email message Representing an email message-Footnote-311853505
Ref: email message Representing an email message-Footnote-411853564
Ref: email message Representing an email message-Footnote-511853623
Ref: email message Representing an email message-Footnote-611853682
Ref: email message Representing an email message-Footnote-711854004
Ref: email message Representing an email message-Footnote-811854063
Ref: email message Representing an email message-Footnote-911854122
Ref: email message Representing an email message-Footnote-1011854181
Ref: email message Representing an email message-Footnote-1111854241
Ref: email message Representing an email message-Footnote-1211854301
Ref: email message Representing an email message-Footnote-1311854361
Ref: email message Representing an email message-Footnote-1411854421
Node: email parser Parsing email messages11854481
Ref: library/email parser doc11854707
Ref: 37a511854707
Ref: library/email parser email-parser-parsing-email-messages11854707
Ref: 37a611854707
Ref: library/email parser module-email parser11854707
Ref: 4e11854707
Ref: library/email parser translation-repo11854707
Ref: 37a711854707
Ref: email parser Parsing email messages-Footnote-111857106
Node: API do FeedParser11857178
Ref: library/email parser feedparser-api11857286
Ref: 37a811857286
Ref: library/email parser email parser BytesFeedParser11858591
Ref: 120b11858591
Ref: library/email parser email parser BytesFeedParser feed11859815
Ref: 37a911859815
Ref: library/email parser email parser BytesFeedParser close11860251
Ref: 37aa11860251
Ref: library/email parser email parser FeedParser11860492
Ref: 15ac11860492
Node: Parser API11860972
Ref: library/email parser parser-api11861105
Ref: 37ab11861105
Ref: library/email parser email parser BytesParser11861839
Ref: 120c11861839
Ref: library/email parser email parser BytesParser parse11862511
Ref: 37ac11862511
Ref: library/email parser email parser BytesParser parsebytes11863557
Ref: 37ad11863557
Ref: library/email parser email parser BytesHeaderParser11864071
Ref: 10fa11864071
Ref: library/email parser email parser Parser11864298
Ref: 11dc11864298
Ref: library/email parser email parser Parser parse11864647
Ref: 37ae11864647
Ref: library/email parser email parser Parser parsestr11865086
Ref: 37af11865086
Ref: library/email parser email parser HeaderParser11865516
Ref: 10fb11865516
Ref: library/email parser email message_from_bytes11865915
Ref: 120911865915
Ref: library/email parser email message_from_binary_file11866391
Ref: 120a11866391
Ref: library/email parser email message_from_string11866875
Ref: 37b011866875
Ref: library/email parser email message_from_file11867272
Ref: 37b111867272
Ref: Parser API-Footnote-111868006
Ref: Parser API-Footnote-211868065
Node: Additional notes11868124
Ref: library/email parser additional-notes11868231
Ref: 37b211868231
Node: email generator Geração de documentos MIME11869785
Ref: library/email generator doc11869995
Ref: 37b411869995
Ref: library/email generator email-generator-generating-mime-documents11869995
Ref: 37b511869995
Ref: library/email generator module-email generator11869995
Ref: 4011869995
Ref: library/email generator translation-repo11869995
Ref: 37b611869995
Ref: library/email generator email generator BytesGenerator11872265
Ref: 120f11872265
Ref: library/email generator email generator BytesGenerator flatten11874342
Ref: 37b811874342
Ref: library/email generator email generator BytesGenerator clone11876322
Ref: 37bb11876322
Ref: library/email generator email generator BytesGenerator write11876538
Ref: 37b911876538
Ref: library/email generator email generator Generator11877647
Ref: 120e11877647
Ref: library/email generator email generator Generator flatten11879646
Ref: 37bc11879646
Ref: library/email generator email generator Generator clone11881557
Ref: 37be11881557
Ref: library/email generator email generator Generator write11881750
Ref: 37bd11881750
Ref: library/email generator email generator DecodedGenerator11882698
Ref: cb611882698
Ref: email generator Geração de documentos MIME-Footnote-111884147
Ref: email generator Geração de documentos MIME-Footnote-211884223
Ref: email generator Geração de documentos MIME-Footnote-311884792
Ref: email generator Geração de documentos MIME-Footnote-411884844
Ref: email generator Geração de documentos MIME-Footnote-511884903
Ref: email generator Geração de documentos MIME-Footnote-611884955
Node: email policy Policy Objects11885014
Ref: library/email policy doc11885232
Ref: 37bf11885232
Ref: library/email policy email-policy-policy-objects11885232
Ref: 37c011885232
Ref: library/email policy module-email policy11885232
Ref: 4f11885232
Ref: library/email policy translation-repo11885232
Ref: 37c111885232
Ref: library/email policy email policy Policy11891217
Ref: 10f211891217
Ref: library/email policy email policy Policy max_line_length11892041
Ref: 376b11892041
Ref: library/email policy email policy Policy linesep11892346
Ref: 37c211892346
Ref: library/email policy email policy Policy cte_type11892614
Ref: 37ba11892614
Ref: library/email policy email policy Policy raise_on_defect11893724
Ref: 37c411893724
Ref: library/email policy email policy Policy mangle_from_11893967
Ref: e2211893967
Ref: library/email policy email policy Policy message_factory11894300
Ref: cb711894300
Ref: library/email policy email policy Policy verify_generated_headers11894581
Ref: 1e011894581
Ref: library/email policy email policy Policy clone11895433
Ref: 10f411895433
Ref: library/email policy email policy Policy handle_defect11895920
Ref: 37c711895920
Ref: library/email policy email policy Policy register_defect11896413
Ref: 37c511896413
Ref: library/email policy email policy Policy header_max_count11897120
Ref: 37c911897120
Ref: library/email policy email policy Policy header_source_parse11898183
Ref: 37ca11898183
Ref: library/email policy email policy Policy header_store_parse11899197
Ref: 37cb11899197
Ref: library/email policy email policy Policy header_fetch_parse11899959
Ref: 37cc11899959
Ref: library/email policy email policy Policy fold11900783
Ref: 37cd11900783
Ref: library/email policy email policy Policy fold_binary11901500
Ref: 37c311901500
Ref: library/email policy email policy EmailPolicy11901835
Ref: 10f611901835
Ref: library/email policy email policy EmailPolicy utf811902674
Ref: e2411902674
Ref: library/email policy email policy EmailPolicy refold_source11903069
Ref: 37b711903069
Ref: library/email policy email policy EmailPolicy header_factory11903870
Ref: 37ce11903870
Ref: library/email policy email policy EmailPolicy content_manager11904480
Ref: f6e11904480
Ref: library/email policy email policy EmailPolicy header_max_count11905196
Ref: 37d011905196
Ref: library/email policy email policy EmailPolicy header_source_parse11905403
Ref: 168c11905403
Ref: library/email policy email policy EmailPolicy header_store_parse11905789
Ref: 37d211905789
Ref: library/email policy email policy EmailPolicy header_fetch_parse11906271
Ref: 37d311906271
Ref: library/email policy email policy EmailPolicy fold11906698
Ref: 176b11906698
Ref: library/email policy email policy EmailPolicy fold_binary11907862
Ref: 37d411907862
Ref: library/email policy email policy default11908683
Ref: 15ad11908683
Ref: library/email policy email policy SMTP11908893
Ref: 37d511908893
Ref: library/email policy email policy SMTPUTF811909095
Ref: 37d611909095
Ref: library/email policy email policy HTTP11909509
Ref: 37d711909509
Ref: library/email policy email policy strict11909701
Ref: 37d811909701
Ref: library/email policy email policy Compat3211911079
Ref: 10f311911079
Ref: library/email policy email policy Compat32 mangle_from_11911613
Ref: 37d911911613
Ref: library/email policy email policy Compat32 header_source_parse11911799
Ref: 168d11911799
Ref: library/email policy email policy Compat32 header_store_parse11912185
Ref: 37da11912185
Ref: library/email policy email policy Compat32 header_fetch_parse11912292
Ref: 37db11912292
Ref: library/email policy email policy Compat32 fold11912535
Ref: 37dc11912535
Ref: library/email policy email policy Compat32 fold_binary11912879
Ref: 37dd11912879
Ref: library/email policy email policy compat3211913410
Ref: cb811913410
Ref: email policy Policy Objects-Footnote-111913865
Ref: email policy Policy Objects-Footnote-211913937
Ref: email policy Policy Objects-Footnote-311913996
Ref: email policy Policy Objects-Footnote-411914055
Ref: email policy Policy Objects-Footnote-511914114
Ref: email policy Policy Objects-Footnote-611914173
Ref: email policy Policy Objects-Footnote-711914232
Ref: email policy Policy Objects-Footnote-811914291
Ref: email policy Policy Objects-Footnote-911914361
Ref: email policy Policy Objects-Footnote-1011914420
Ref: email policy Policy Objects-Footnote-1111914480
Ref: email policy Policy Objects-Footnote-1211914540
Node: email errors Classes de Exceção e Defeito11914600
Ref: library/email errors doc11914816
Ref: 37de11914816
Ref: library/email errors email-errors-exception-and-defect-classes11914816
Ref: 37df11914816
Ref: library/email errors module-email errors11914816
Ref: 3f11914816
Ref: library/email errors translation-repo11914816
Ref: 37e011914816
Ref: library/email errors email errors MessageError11915120
Ref: 37e111915120
Ref: library/email errors email errors MessageParseError11915362
Ref: 37e211915362
Ref: library/email errors email errors HeaderParseError11915662
Ref: 378c11915662
Ref: library/email errors email errors BoundaryError11916305
Ref: 37e311916305
Ref: library/email errors email errors MultipartConversionError11916387
Ref: 37e411916387
Ref: library/email errors email errors HeaderWriteError11916748
Ref: 37c611916748
Ref: library/email errors email errors MessageDefect11916880
Ref: 37c811916880
Ref: library/email errors email errors HeaderDefect11917051
Ref: 37e711917051
Ref: library/email errors email errors NoBoundaryInMultipartDefect11917664
Ref: 37e811917664
Ref: library/email errors email errors StartBoundaryNotFoundDefect11917806
Ref: 37e911917806
Ref: library/email errors email errors CloseBoundaryNotFoundDefect11917951
Ref: 37ea11917951
Ref: library/email errors email errors FirstHeaderLineIsContinuationDefect11918132
Ref: 37eb11918132
Ref: library/email errors email errors MisplacedEnvelopeHeaderDefect11918265
Ref: 37ec11918265
Ref: library/email errors email errors MissingHeaderBodySeparatorDefect11918398
Ref: 37ed11918398
Ref: library/email errors email errors MalformedHeaderDefect11918687
Ref: 37ee11918687
Ref: library/email errors email errors MultipartInvariantViolationDefect11918927
Ref: 37b311918927
Ref: library/email errors email errors InvalidBase64PaddingDefect11919245
Ref: 37ef11919245
Ref: library/email errors email errors InvalidBase64CharactersDefect11919489
Ref: 37f011919489
Ref: library/email errors email errors InvalidBase64LengthDefect11919745
Ref: 37f111919745
Ref: library/email errors email errors InvalidDateDefect11919985
Ref: 37f211919985
Ref: email errors Classes de Exceção e Defeito-Footnote-111920165
Ref: email errors Classes de Exceção e Defeito-Footnote-211920237
Node: email headerregistry Custom Header Objects11920296
Ref: library/email headerregistry doc11920532
Ref: 37f311920532
Ref: library/email headerregistry email-headerregistry-custom-header-objects11920532
Ref: 37f411920532
Ref: library/email headerregistry module-email headerregistry11920532
Ref: 4211920532
Ref: library/email headerregistry translation-repo11920532
Ref: 37f511920532
Ref: library/email headerregistry email headerregistry BaseHeader11922308
Ref: 377811922308
Ref: library/email headerregistry email headerregistry BaseHeader name11922622
Ref: 37f811922622
Ref: library/email headerregistry email headerregistry BaseHeader defects11922872
Ref: 37f911922872
Ref: library/email headerregistry email headerregistry BaseHeader max_count11923230
Ref: 37d111923230
Ref: library/email headerregistry email headerregistry BaseHeader fold11923746
Ref: 37fa11923746
Ref: library/email headerregistry email headerregistry UnstructuredHeader11925938
Ref: 37f711925938
Ref: library/email headerregistry email headerregistry DateHeader11927018
Ref: 37fb11927018
Ref: library/email headerregistry email headerregistry DateHeader datetime11927382
Ref: 37fc11927382
Ref: library/email headerregistry email headerregistry AddressHeader11928950
Ref: 37fd11928950
Ref: library/email headerregistry email headerregistry AddressHeader groups11929235
Ref: 37fe11929235
Ref: library/email headerregistry email headerregistry AddressHeader addresses11929549
Ref: 380111929549
Ref: library/email headerregistry email headerregistry SingleAddressHeader11930710
Ref: 380311930710
Ref: library/email headerregistry email headerregistry SingleAddressHeader address11930855
Ref: 380411930855
Ref: library/email headerregistry email headerregistry MIMEVersionHeader11931386
Ref: 380511931386
Ref: library/email headerregistry email headerregistry MIMEVersionHeader version11931779
Ref: 380611931779
Ref: library/email headerregistry email headerregistry MIMEVersionHeader major11931905
Ref: 380711931905
Ref: library/email headerregistry email headerregistry MIMEVersionHeader minor11931981
Ref: 380811931981
Ref: library/email headerregistry email headerregistry ParameterizedMIMEHeader11932057
Ref: 380911932057
Ref: library/email headerregistry email headerregistry ParameterizedMIMEHeader params11932441
Ref: 378611932441
Ref: library/email headerregistry email headerregistry ContentTypeHeader11932537
Ref: 380a11932537
Ref: library/email headerregistry email headerregistry ContentTypeHeader content_type11932689
Ref: 380b11932689
Ref: library/email headerregistry email headerregistry ContentTypeHeader maintype11932794
Ref: 380c11932794
Ref: library/email headerregistry email headerregistry ContentTypeHeader subtype11932823
Ref: 380d11932823
Ref: library/email headerregistry email headerregistry ContentDispositionHeader11932851
Ref: 380e11932851
Ref: library/email headerregistry email headerregistry ContentDispositionHeader content_disposition11933022
Ref: 380f11933022
Ref: library/email headerregistry email headerregistry ContentTransferEncodingHeader11933158
Ref: 381011933158
Ref: library/email headerregistry email headerregistry ContentTransferEncodingHeader cte11933280
Ref: 381111933280
Ref: library/email headerregistry email headerregistry HeaderRegistry11933448
Ref: 37f611933448
Ref: library/email headerregistry email headerregistry HeaderRegistry map_to_type11935182
Ref: 381211935182
Ref: library/email headerregistry email headerregistry HeaderRegistry __getitem__11935518
Ref: 381311935518
Ref: library/email headerregistry email headerregistry HeaderRegistry __call__11935642
Ref: 381411935642
Ref: library/email headerregistry email headerregistry Address11936285
Ref: 380211936285
Ref: library/email headerregistry email headerregistry Address display_name11937125
Ref: 381511937125
Ref: library/email headerregistry email headerregistry Address username11937350
Ref: 381611937350
Ref: library/email headerregistry email headerregistry Address domain11937469
Ref: 381711937469
Ref: library/email headerregistry email headerregistry Address addr_spec11937548
Ref: 381811937548
Ref: library/email headerregistry email headerregistry Address __str__11937765
Ref: 381911937765
Ref: library/email headerregistry email headerregistry Group11938205
Ref: 37ff11938205
Ref: library/email headerregistry email headerregistry Group display_name11938755
Ref: 380011938755
Ref: library/email headerregistry email headerregistry Group addresses11939009
Ref: 381a11939009
Ref: library/email headerregistry email headerregistry Group __str__11939156
Ref: 381b11939156
Ref: email headerregistry Custom Header Objects-Footnote-111939597
Ref: email headerregistry Custom Header Objects-Footnote-211939678
Ref: email headerregistry Custom Header Objects-Footnote-311939747
Ref: email headerregistry Custom Header Objects-Footnote-411939806
Ref: email headerregistry Custom Header Objects-Footnote-511939865
Ref: email headerregistry Custom Header Objects-Footnote-611939924
Ref: email headerregistry Custom Header Objects-Footnote-711939983
Ref: email headerregistry Custom Header Objects-Footnote-811940042
Ref: email headerregistry Custom Header Objects-Footnote-911940101
Ref: email headerregistry Custom Header Objects-Footnote-1011940160
Ref: email headerregistry Custom Header Objects-Footnote-1111940220
Ref: email headerregistry Custom Header Objects-Footnote-1211940280
Ref: email headerregistry Custom Header Objects-Footnote-1311940340
Ref: email headerregistry Custom Header Objects-Footnote-1411940400
Ref: email headerregistry Custom Header Objects-Footnote-1511940460
Ref: email headerregistry Custom Header Objects-Footnote-1611940520
Ref: email headerregistry Custom Header Objects-Footnote-1711940580
Node: email contentmanager Gerenciando conteúdo MIME11940640
Ref: library/email contentmanager doc11940847
Ref: 381c11940847
Ref: library/email contentmanager email-contentmanager-managing-mime-content11940847
Ref: 381d11940847
Ref: library/email contentmanager module-email contentmanager11940847
Ref: 3d11940847
Ref: library/email contentmanager translation-repo11940847
Ref: 381e11940847
Ref: library/email contentmanager email contentmanager ContentManager11941122
Ref: 381f11941122
Ref: library/email contentmanager email contentmanager ContentManager get_content11941427
Ref: 379711941427
Ref: library/email contentmanager email contentmanager ContentManager set_content11942284
Ref: 379811942284
Ref: library/email contentmanager email contentmanager ContentManager add_get_handler11943917
Ref: 382011943917
Ref: library/email contentmanager email contentmanager ContentManager add_set_handler11944110
Ref: 382211944110
Ref: email contentmanager Gerenciando conteúdo MIME-Footnote-111944476
Ref: email contentmanager Gerenciando conteúdo MIME-Footnote-211944557
Node: Content Manager Instances11944626
Ref: library/email contentmanager content-manager-instances11944735
Ref: 382411944735
Ref: library/email contentmanager email contentmanager raw_data_manager11945076
Ref: 37cf11945076
Ref: library/email contentmanager email contentmanager get_content11945806
Ref: 382111945806
Ref: library/email contentmanager email contentmanager set_content11946406
Ref: 382311946406
Ref: Content Manager Instances-Footnote-111951196
Node: email Exemplos11951255
Ref: library/email examples doc11951494
Ref: 382511951494
Ref: library/email examples email-examples11951494
Ref: f6f11951494
Ref: library/email examples id111951494
Ref: 382611951494
Ref: library/email examples translation-repo11951494
Ref: 382711951494
Ref: email Exemplos-Footnote-111966715
Ref: email Exemplos-Footnote-211966773
Node: email message Message Representing an email message using the compat32 API11966858
Ref: library/email compat32-message doc11967108
Ref: 382811967108
Ref: library/email compat32-message compat32-message11967108
Ref: 376911967108
Ref: library/email compat32-message email-message-message-representing-an-email-message-using-the-compat32-api11967108
Ref: 382911967108
Ref: library/email compat32-message translation-repo11967108
Ref: 382a11967108
Ref: library/email compat32-message email message Message11969666
Ref: 27c11969666
Ref: library/email compat32-message email message Message as_string11970201
Ref: f6911970201
Ref: library/email compat32-message email message Message __str__11972353
Ref: 382b11972353
Ref: library/email compat32-message email message Message as_bytes11972519
Ref: f6a11972519
Ref: library/email compat32-message email message Message __bytes__11974083
Ref: f6b11974083
Ref: library/email compat32-message email message Message is_multipart11974296
Ref: 379011974296
Ref: library/email compat32-message email message Message set_unixfrom11974973
Ref: 382c11974973
Ref: library/email compat32-message email message Message get_unixfrom11975114
Ref: 382d11975114
Ref: library/email compat32-message email message Message attach11975272
Ref: 379d11975272
Ref: library/email compat32-message email message Message get_payload11975897
Ref: 120d11975897
Ref: library/email compat32-message email message Message set_payload11978580
Ref: 382e11978580
Ref: library/email compat32-message email message Message set_charset11979065
Ref: 382f11979065
Ref: library/email compat32-message email message Message get_charset11980843
Ref: 383011980843
Ref: library/email compat32-message email message Message __len__11982302
Ref: 383211982302
Ref: library/email compat32-message email message Message __contains__11982401
Ref: 187c11982401
Ref: library/email compat32-message email message Message __getitem__11982772
Ref: 383311982772
Ref: library/email compat32-message email message Message __setitem__11983308
Ref: 383511983308
Ref: library/email compat32-message email message Message __delitem__11983866
Ref: 383611983866
Ref: library/email compat32-message email message Message keys11984093
Ref: 383111984093
Ref: library/email compat32-message email message Message values11984188
Ref: 383711984188
Ref: library/email compat32-message email message Message items11984279
Ref: 383811984279
Ref: library/email compat32-message email message Message get11984411
Ref: 383911984411
Ref: library/email compat32-message email message Message get_all11984725
Ref: 383411984725
Ref: library/email compat32-message email message Message add_header11984963
Ref: 383a11984963
Ref: library/email compat32-message email message Message replace_header11986928
Ref: 383b11986928
Ref: library/email compat32-message email message Message get_content_type11987218
Ref: 383c11987218
Ref: library/email compat32-message email message Message get_content_maintype11988077
Ref: 383e11988077
Ref: library/email compat32-message email message Message get_content_subtype11988284
Ref: 383f11988284
Ref: library/email compat32-message email message Message get_default_type11988478
Ref: 383d11988478
Ref: library/email compat32-message email message Message set_default_type11988799
Ref: 384011988799
Ref: library/email compat32-message email message Message get_params11989087
Ref: 384111989087
Ref: library/email compat32-message email message Message get_param11990150
Ref: 384211990150
Ref: library/email compat32-message email message Message set_param11992159
Ref: f6c11992159
Ref: library/email compat32-message email message Message del_param11993449
Ref: 384411993449
Ref: library/email compat32-message email message Message set_type11993891
Ref: 384511993891
Ref: library/email compat32-message email message Message get_filename11994781
Ref: 384611994781
Ref: library/email compat32-message email message Message get_boundary11995321
Ref: 384711995321
Ref: library/email compat32-message email message Message set_boundary11995686
Ref: 384811995686
Ref: library/email compat32-message email message Message get_content_charset11996502
Ref: 384911996502
Ref: library/email compat32-message email message Message get_charsets11996991
Ref: 384a11996991
Ref: library/email compat32-message email message Message get_content_disposition11997694
Ref: e2311997694
Ref: library/email compat32-message email message Message walk11998065
Ref: 384b11998065
Ref: library/email compat32-message email message Message preamble12000186
Ref: 384c12000186
Ref: library/email compat32-message email message Message epilogue12001449
Ref: 384d12001449
Ref: library/email compat32-message email message Message defects12001847
Ref: 384e12001847
Ref: email message Message Representing an email message using the compat32 API-Footnote-112002124
Ref: email message Message Representing an email message using the compat32 API-Footnote-212002183
Ref: email message Message Representing an email message using the compat32 API-Footnote-312002242
Ref: email message Message Representing an email message using the compat32 API-Footnote-412002301
Ref: email message Message Representing an email message using the compat32 API-Footnote-512002360
Ref: email message Message Representing an email message using the compat32 API-Footnote-612002419
Ref: email message Message Representing an email message using the compat32 API-Footnote-712002478
Ref: email message Message Representing an email message using the compat32 API-Footnote-812002537
Ref: email message Message Representing an email message using the compat32 API-Footnote-912002596
Ref: email message Message Representing an email message using the compat32 API-Footnote-1012002655
Ref: email message Message Representing an email message using the compat32 API-Footnote-1112002715
Ref: email message Message Representing an email message using the compat32 API-Footnote-1212002775
Node: email mimeemail mime Criando e-mail e objetos MIME do zero12002835
Ref: library/email mime doc12003109
Ref: 384f12003109
Ref: library/email mime email-mime-creating-email-and-mime-objects-from-scratch12003109
Ref: 385012003109
Ref: library/email mime module-email mime12003109
Ref: 4512003109
Ref: library/email mime translation-repo12003109
Ref: 385112003109
Ref: library/email mime module-email mime base12004472
Ref: 4812004472
Ref: library/email mime email mime base MIMEBase12004472
Ref: 385212004472
Ref: library/email mime module-email mime nonmultipart12005711
Ref: 4c12005711
Ref: library/email mime email mime nonmultipart MIMENonMultipart12005711
Ref: 37e512005711
Ref: library/email mime module-email mime multipart12006220
Ref: 4b12006220
Ref: library/email mime email mime multipart MIMEMultipart12006220
Ref: 385312006220
Ref: library/email mime module-email mime application12007623
Ref: 4612007623
Ref: library/email mime email mime application MIMEApplication12007623
Ref: 385412007623
Ref: library/email mime module-email mime audio12009078
Ref: 4712009078
Ref: library/email mime email mime audio MIMEAudio12009078
Ref: 385512009078
Ref: library/email mime module-email mime image12010810
Ref: 4912010810
Ref: library/email mime email mime image MIMEImage12010810
Ref: 37e612010810
Ref: library/email mime module-email mime message12012608
Ref: 4a12012608
Ref: library/email mime email mime message MIMEMessage12012608
Ref: 385612012608
Ref: library/email mime module-email mime text12013349
Ref: 4d12013349
Ref: library/email mime email mime text MIMEText12013349
Ref: e2512013349
Ref: email mimeemail mime Criando e-mail e objetos MIME do zero-Footnote-112015118
Node: email header Internationalized headers12015186
Ref: library/email header doc12015437
Ref: 385712015437
Ref: library/email header email-header-internationalized-headers12015437
Ref: 385812015437
Ref: library/email header module-email header12015437
Ref: 4112015437
Ref: library/email header translation-repo12015437
Ref: 385912015437
Ref: library/email header email header Header12018128
Ref: 19e912018128
Ref: library/email header email header Header append12020001
Ref: 385a12020001
Ref: library/email header email header Header encode12021337
Ref: 385b12021337
Ref: library/email header email header Header __str__12022982
Ref: 385c12022982
Ref: library/email header email header Header __eq__12023483
Ref: 385d12023483
Ref: library/email header email header Header __ne__12023620
Ref: 385e12023620
Ref: library/email header email header decode_header12023845
Ref: 10f712023845
Ref: library/email header email header make_header12025311
Ref: 10f812025311
Ref: email header Internationalized headers-Footnote-112026136
Ref: email header Internationalized headers-Footnote-212026208
Ref: email header Internationalized headers-Footnote-312026267
Ref: email header Internationalized headers-Footnote-412026325
Ref: email header Internationalized headers-Footnote-512026384
Ref: email header Internationalized headers-Footnote-612026443
Ref: email header Internationalized headers-Footnote-712026502
Ref: email header Internationalized headers-Footnote-812026561
Ref: email header Internationalized headers-Footnote-912026620
Ref: email header Internationalized headers-Footnote-1012026679
Ref: email header Internationalized headers-Footnote-1112026739
Ref: email header Internationalized headers-Footnote-1212026799
Ref: email header Internationalized headers-Footnote-1312026859
Ref: email header Internationalized headers-Footnote-1412026919
Ref: email header Internationalized headers-Footnote-1512026979
Node: email charset Representando conjuntos de caracteres12027039
Ref: library/email charset doc12027260
Ref: 385f12027260
Ref: library/email charset email-charset-representing-character-sets12027260
Ref: 386012027260
Ref: library/email charset module-email charset12027260
Ref: 3c12027260
Ref: library/email charset translation-repo12027260
Ref: 386112027260
Ref: library/email charset email charset Charset12028121
Ref: e2612028121
Ref: library/email charset email charset Charset input_charset12029887
Ref: 386212029887
Ref: library/email charset email charset Charset header_encoding12030184
Ref: 386312030184
Ref: library/email charset email charset Charset body_encoding12030619
Ref: 386412030619
Ref: library/email charset email charset Charset output_charset12030905
Ref: 386512030905
Ref: library/email charset email charset Charset input_codec12031269
Ref: 386612031269
Ref: library/email charset email charset Charset output_codec12031488
Ref: 386712031488
Ref: library/email charset email charset Charset get_body_encoding12031816
Ref: 386812031816
Ref: library/email charset email charset Charset get_output_charset12032558
Ref: 386912032558
Ref: library/email charset email charset Charset header_encode12032772
Ref: 386a12032772
Ref: library/email charset email charset Charset header_encode_lines12032989
Ref: 386b12032989
Ref: library/email charset email charset Charset body_encode12033476
Ref: 386c12033476
Ref: library/email charset email charset Charset __str__12033819
Ref: 386d12033819
Ref: library/email charset email charset Charset __eq__12033993
Ref: 386e12033993
Ref: library/email charset email charset Charset __ne__12034152
Ref: 386f12034152
Ref: library/email charset email charset add_charset12034484
Ref: 387012034484
Ref: library/email charset email charset add_alias12035981
Ref: 387212035981
Ref: library/email charset email charset add_codec12036379
Ref: 387112036379
Ref: email charset Representando conjuntos de caracteres-Footnote-112036804
Node: email encoders Codificadores12036877
Ref: library/email encoders doc12037093
Ref: 387312037093
Ref: library/email encoders email-encoders-encoders12037093
Ref: 387412037093
Ref: library/email encoders module-email encoders12037093
Ref: 3e12037093
Ref: library/email encoders translation-repo12037093
Ref: 387512037093
Ref: library/email encoders email encoders encode_quopri12038963
Ref: 387612038963
Ref: library/email encoders email encoders encode_base6412039340
Ref: 387712039340
Ref: library/email encoders email encoders encode_7or8bit12039796
Ref: 387812039796
Ref: library/email encoders email encoders encode_noop12040064
Ref: 387912040064
Ref: email encoders Codificadores-Footnote-112040242
Ref: email encoders Codificadores-Footnote-212040316
Node: email utils Utilitários diversos12040458
Ref: library/email utils doc12040649
Ref: 387a12040649
Ref: library/email utils email-utils-miscellaneous-utilities12040649
Ref: 387b12040649
Ref: library/email utils module-email utils12040649
Ref: 5012040649
Ref: library/email utils translation-repo12040649
Ref: 387c12040649
Ref: library/email utils email utils localtime12040936
Ref: 2c412040936
Ref: library/email utils email utils make_msgid12041591
Ref: 387d12041591
Ref: library/email utils email utils quote12042544
Ref: 387e12042544
Ref: library/email utils email utils unquote12042753
Ref: 378912042753
Ref: library/email utils email utils parseaddr12043038
Ref: 1e212043038
Ref: library/email utils email utils formataddr12043656
Ref: 11d912043656
Ref: library/email utils email utils getaddresses12044369
Ref: 1e112044369
Ref: library/email utils email utils parsedate12045304
Ref: 387f12045304
Ref: library/email utils email utils parsedate_tz12045979
Ref: 19ac12045979
Ref: library/email utils email utils parsedate_to_datetime12046588
Ref: 10fd12046588
Ref: library/email utils email utils mktime_tz12047545
Ref: 388012047545
Ref: library/email utils email utils formatdate12047815
Ref: 14b212047815
Ref: library/email utils email utils format_datetime12048868
Ref: 10fc12048868
Ref: library/email utils email utils decode_rfc223112049650
Ref: 388112049650
Ref: library/email utils email utils encode_rfc223112049753
Ref: 388212049753
Ref: library/email utils email utils collapse_rfc2231_value12050203
Ref: 384312050203
Ref: library/email utils email utils decode_params12051109
Ref: 161c12051109
Ref: email utils Utilitários diversos-Footnote-112051382
Ref: email utils Utilitários diversos-Footnote-212051453
Ref: email utils Utilitários diversos-Footnote-312051512
Ref: email utils Utilitários diversos-Footnote-412051571
Ref: email utils Utilitários diversos-Footnote-512051630
Ref: email utils Utilitários diversos-Footnote-612051689
Ref: email utils Utilitários diversos-Footnote-712051965
Ref: email utils Utilitários diversos-Footnote-812052024
Ref: email utils Utilitários diversos-Footnote-912052083
Ref: email utils Utilitários diversos-Footnote-1012052142
Ref: email utils Utilitários diversos-Footnote-1112052202
Ref: email utils Utilitários diversos-Footnote-1212052262
Node: email iterators Iteradores12052322
Ref: library/email iterators doc12052476
Ref: 388312052476
Ref: library/email iterators email-iterators-iterators12052476
Ref: 388412052476
Ref: library/email iterators module-email iterators12052476
Ref: 4312052476
Ref: library/email iterators translation-repo12052476
Ref: 388512052476
Ref: library/email iterators email iterators body_line_iterator12052923
Ref: 388612052923
Ref: library/email iterators email iterators typed_subpart_iterator12053547
Ref: 388712053547
Ref: library/email iterators email iterators _structure12054304
Ref: 388812054304
Ref: email iterators Iteradores-Footnote-112055782
Node: json — Codificador e decodificador JSON12055858
Ref: library/json doc12056091
Ref: 388912056091
Ref: library/json json-json-encoder-and-decoder12056091
Ref: 388a12056091
Ref: library/json module-json12056091
Ref: 8212056091
Ref: library/json translation-repo12056091
Ref: 388b12056091
Ref: json — Codificador e decodificador JSON-Footnote-112061009
Ref: json — Codificador e decodificador JSON-Footnote-212061082
Ref: json — Codificador e decodificador JSON-Footnote-312061107
Ref: json — Codificador e decodificador JSON-Footnote-412061166
Ref: json — Codificador e decodificador JSON-Footnote-512061225
Ref: json — Codificador e decodificador JSON-Footnote-612061312
Ref: json — Codificador e decodificador JSON-Footnote-712061361
Ref: json — Codificador e decodificador JSON-Footnote-812061633
Node: Uso básico<2>12061659
Ref: library/json basic-usage12061791
Ref: 388d12061791
Ref: library/json json dump12061833
Ref: d6712061833
Ref: library/json json dumps12066583
Ref: d6812066583
Ref: library/json json load12067445
Ref: cd412067445
Ref: library/json json loads12071477
Ref: 95c12071477
Ref: Uso básico<2>-Footnote-112072224
Node: Codificadores e decodificadores12072256
Ref: library/json encoders-and-decoders12072411
Ref: 389112072411
Ref: library/json json JSONDecoder12072494
Ref: d6a12072494
Ref: library/json json-to-py-table12072761
Ref: 389012072761
Ref: library/json json JSONDecoder decode12075973
Ref: 389212075973
Ref: library/json json JSONDecoder raw_decode12076252
Ref: 389312076252
Ref: library/json json JSONEncoder12076672
Ref: d6912076672
Ref: library/json py-to-json-table12076994
Ref: 388e12076994
Ref: library/json json JSONEncoder default12081818
Ref: 388f12081818
Ref: library/json json JSONEncoder encode12082536
Ref: 389412082536
Ref: library/json json JSONEncoder iterencode12082798
Ref: 389512082798
Ref: Codificadores e decodificadores-Footnote-112083107
Node: Exceções<17>12083139
Ref: library/json exceptions12083328
Ref: 389612083328
Ref: library/json json JSONDecodeError12083367
Ref: e4d12083367
Ref: library/json json JSONDecodeError msg12083506
Ref: 389712083506
Ref: library/json json JSONDecodeError doc12083576
Ref: 389812083576
Ref: library/json json JSONDecodeError pos12083645
Ref: 389912083645
Ref: library/json json JSONDecodeError lineno12083733
Ref: 389a12083733
Ref: library/json json JSONDecodeError colno12083803
Ref: 389b12083803
Node: Conformidade e interoperabilidade entre padrões12083906
Ref: library/json standard-compliance-and-interoperability12084096
Ref: 389c12084096
Ref: Conformidade e interoperabilidade entre padrões-Footnote-112085355
Ref: Conformidade e interoperabilidade entre padrões-Footnote-212085414
Node: Codificações de caracteres12085501
Ref: library/json character-encodings12085657
Ref: 389d12085657
Node: Valores numéricos infinitos e NaN12087099
Ref: library/json infinite-and-nan-number-values12087299
Ref: 389e12087299
Node: Nomes repetidos dentro de um objeto12088125
Ref: library/json repeated-names-within-an-object12088348
Ref: 389f12088348
Node: Valores não objeto e não vetor de nível superior12088911
Ref: library/json top-level-non-object-non-array-values12089131
Ref: 38a012089131
Ref: Valores não objeto e não vetor de nível superior-Footnote-112089828
Ref: Valores não objeto e não vetor de nível superior-Footnote-212089887
Node: Limitações de implementação12089946
Ref: library/json implementation-limitations12090122
Ref: 38a112090122
Node: Interface de linha de comando<5>12091164
Ref: library/json command-line-interface12091331
Ref: 38a212091331
Ref: library/json json-commandline12091331
Ref: 388c12091331
Ref: library/json module-json tool12091331
Ref: 8312091331
Ref: Interface de linha de comando<5>-Footnote-112092297
Node: Opções da linha de comando12092366
Ref: library/json command-line-options12092463
Ref: 38a412092463
Ref: library/json cmdoption-json tool-arg-infile12092540
Ref: 38a512092540
Ref: library/json cmdoption-json tool-arg-outfile12093023
Ref: 38a612093023
Ref: library/json cmdoption-json tool-sort-keys12093159
Ref: 38a312093159
Ref: library/json cmdoption-json tool-no-ensure-ascii12093283
Ref: 38a712093283
Ref: library/json cmdoption-json tool-json-lines12093457
Ref: 38a812093457
Ref: library/json cmdoption-json tool-indent12093582
Ref: 38a912093582
Ref: library/json cmdoption-json tool-tab12093582
Ref: 38aa12093582
Ref: library/json cmdoption-json tool-no-indent12093582
Ref: 38ab12093582
Ref: library/json cmdoption-json tool-compact12093582
Ref: 38ac12093582
Ref: library/json cmdoption-json tool-h12093743
Ref: 38ad12093743
Ref: library/json cmdoption-json tool-help12093743
Ref: 38ae12093743
Node: mailbox — Manipule caixas de entradas em vários formatos12093800
Ref: library/mailbox doc12094038
Ref: 38af12094038
Ref: library/mailbox mailbox-manipulate-mailboxes-in-various-formats12094038
Ref: 38b012094038
Ref: library/mailbox module-mailbox12094038
Ref: 8b12094038
Ref: library/mailbox translation-repo12094038
Ref: 38b112094038
Ref: mailbox — Manipule caixas de entradas em vários formatos-Footnote-112094997
Node: Objetos Mailbox12095064
Ref: library/mailbox id112095199
Ref: 38b212095199
Ref: library/mailbox mailbox-objects12095199
Ref: 38b312095199
Ref: library/mailbox mailbox Mailbox12095258
Ref: 128e12095258
Ref: library/mailbox mailbox Mailbox add12098320
Ref: 128d12098320
Ref: library/mailbox mailbox Mailbox remove12099115
Ref: 38b412099115
Ref: library/mailbox mailbox Mailbox __delitem__12099146
Ref: 38b812099146
Ref: library/mailbox mailbox Mailbox discard12099182
Ref: 38b512099182
Ref: library/mailbox mailbox Mailbox __setitem__12099728
Ref: 38b912099728
Ref: library/mailbox mailbox Mailbox iterkeys12100615
Ref: 38ba12100615
Ref: library/mailbox mailbox Mailbox keys12100702
Ref: 38bb12100702
Ref: library/mailbox mailbox Mailbox itervalues12100865
Ref: 38bc12100865
Ref: library/mailbox mailbox Mailbox __iter__12100897
Ref: 38bd12100897
Ref: library/mailbox mailbox Mailbox values12101385
Ref: 38be12101385
Ref: library/mailbox mailbox Mailbox iteritems12101552
Ref: 38bf12101552
Ref: library/mailbox mailbox Mailbox items12101974
Ref: 38c012101974
Ref: library/mailbox mailbox Mailbox get12102168
Ref: 38c112102168
Ref: library/mailbox mailbox Mailbox __getitem__12102210
Ref: 38c212102210
Ref: library/mailbox mailbox Mailbox get_message12102786
Ref: 38c312102786
Ref: library/mailbox mailbox Mailbox get_bytes12103076
Ref: 129012103076
Ref: library/mailbox mailbox Mailbox get_string12103317
Ref: 129112103317
Ref: library/mailbox mailbox Mailbox get_file12103657
Ref: 128f12103657
Ref: library/mailbox mailbox Mailbox __contains__12104690
Ref: 38c412104690
Ref: library/mailbox mailbox Mailbox __len__12104825
Ref: 38c512104825
Ref: library/mailbox mailbox Mailbox clear12104909
Ref: 38c612104909
Ref: library/mailbox mailbox Mailbox pop12104986
Ref: 38c712104986
Ref: library/mailbox mailbox Mailbox popitem12105425
Ref: 38c812105425
Ref: library/mailbox mailbox Mailbox update12105942
Ref: 38c912105942
Ref: library/mailbox mailbox Mailbox flush12106645
Ref: 173812106645
Ref: library/mailbox mailbox Mailbox lock12106931
Ref: 38b612106931
Ref: library/mailbox mailbox Mailbox unlock12107351
Ref: 38b712107351
Ref: library/mailbox mailbox Mailbox close12107432
Ref: 38cb12107432
Node: Maildir objects12107719
Ref: library/mailbox mailbox-maildir12107807
Ref: 38cc12107807
Ref: library/mailbox maildir-objects12107807
Ref: 38cd12107807
Ref: library/mailbox mailbox Maildir12107866
Ref: 41c12107866
Ref: library/mailbox mailbox Maildir colon12109998
Ref: 38cf12109998
Ref: library/mailbox mailbox Maildir list_folders12110812
Ref: 38d012110812
Ref: library/mailbox mailbox Maildir get_folder12110901
Ref: 38d112110901
Ref: library/mailbox mailbox Maildir add_folder12111136
Ref: 38d312111136
Ref: library/mailbox mailbox Maildir remove_folder12111288
Ref: 38d412111288
Ref: library/mailbox mailbox Maildir clean12111531
Ref: 38d612111531
Ref: library/mailbox mailbox Maildir get_flags12111768
Ref: 17c412111768
Ref: library/mailbox mailbox Maildir set_flags12112579
Ref: 17c512112579
Ref: library/mailbox mailbox Maildir add_flag12113336
Ref: 17c612113336
Ref: library/mailbox mailbox Maildir remove_flag12113854
Ref: 17c712113854
Ref: library/mailbox mailbox Maildir get_info12114383
Ref: 17c212114383
Ref: library/mailbox mailbox Maildir set_info12115119
Ref: 17c312115119
Ref: library/mailbox mailbox Maildir add12115923
Ref: 38de12115923
Ref: library/mailbox mailbox Maildir __setitem__12115955
Ref: 38db12115955
Ref: library/mailbox mailbox Maildir update12116000
Ref: 38df12116000
Ref: library/mailbox mailbox Maildir flush12116412
Ref: 38e012116412
Ref: library/mailbox mailbox Maildir lock12116548
Ref: 38e112116548
Ref: library/mailbox mailbox Maildir unlock12116574
Ref: 38e212116574
Ref: library/mailbox mailbox Maildir close12116708
Ref: 38e312116708
Ref: library/mailbox mailbox Maildir get_file12116900
Ref: 38e412116900
Ref: Maildir objects-Footnote-112117442
Ref: Maildir objects-Footnote-212117491
Node: mbox objects12117535
Ref: library/mailbox mailbox-mbox12117642
Ref: 38e512117642
Ref: library/mailbox mbox-objects12117642
Ref: 38e612117642
Ref: library/mailbox mailbox mbox12117695
Ref: 177512117695
Ref: library/mailbox mailbox mbox get_bytes12119115
Ref: 38e712119115
Ref: library/mailbox mailbox mbox get_file12119413
Ref: 38e812119413
Ref: library/mailbox mailbox mbox get_string12119897
Ref: 38e912119897
Ref: library/mailbox mailbox mbox lock12120196
Ref: 38ea12120196
Ref: library/mailbox mailbox mbox unlock12120222
Ref: 38eb12120222
Ref: mbox objects-Footnote-112120805
Ref: mbox objects-Footnote-212120865
Ref: mbox objects-Footnote-312120917
Node: MH objects12120995
Ref: library/mailbox mailbox-mh12121100
Ref: 38ec12121100
Ref: library/mailbox mh-objects12121100
Ref: 38ed12121100
Ref: library/mailbox mailbox MH12121149
Ref: 17a912121149
Ref: library/mailbox mailbox MH list_folders12122688
Ref: 38ef12122688
Ref: library/mailbox mailbox MH get_folder12122777
Ref: 38f012122777
Ref: library/mailbox mailbox MH add_folder12123008
Ref: 38f112123008
Ref: library/mailbox mailbox MH remove_folder12123156
Ref: 38f212123156
Ref: library/mailbox mailbox MH get_sequences12123399
Ref: 38f312123399
Ref: library/mailbox mailbox MH set_sequences12123577
Ref: 38f412123577
Ref: library/mailbox mailbox MH pack12123816
Ref: 38f512123816
Ref: library/mailbox mailbox MH remove12124232
Ref: 38f612124232
Ref: library/mailbox mailbox MH __delitem__12124263
Ref: 38f712124263
Ref: library/mailbox mailbox MH discard12124299
Ref: 38f812124299
Ref: library/mailbox mailbox MH lock12124509
Ref: 38f912124509
Ref: library/mailbox mailbox MH unlock12124535
Ref: 38fa12124535
Ref: library/mailbox mailbox MH get_file12124911
Ref: 38fb12124911
Ref: library/mailbox mailbox MH flush12125104
Ref: 38fc12125104
Ref: library/mailbox mailbox MH close12125235
Ref: 38fd12125235
Ref: MH objects-Footnote-112125701
Ref: MH objects-Footnote-212125737
Node: Babyl objects12125782
Ref: library/mailbox babyl-objects12125887
Ref: 38fe12125887
Ref: library/mailbox mailbox-babyl12125887
Ref: 38ff12125887
Ref: library/mailbox mailbox Babyl12125942
Ref: 390012125942
Ref: library/mailbox mailbox Babyl get_labels12127507
Ref: 390212127507
Ref: library/mailbox mailbox Babyl get_file12128035
Ref: 390312128035
Ref: library/mailbox mailbox Babyl lock12128556
Ref: 390412128556
Ref: library/mailbox mailbox Babyl unlock12128582
Ref: 390512128582
Ref: Babyl objects-Footnote-112128982
Ref: Babyl objects-Footnote-212129026
Node: MMDF objects12129104
Ref: library/mailbox mailbox-mmdf12129190
Ref: 390612129190
Ref: library/mailbox mmdf-objects12129190
Ref: 390712129190
Ref: library/mailbox mailbox MMDF12129243
Ref: 177612129243
Ref: library/mailbox mailbox MMDF get_bytes12130502
Ref: 390912130502
Ref: library/mailbox mailbox MMDF get_file12130800
Ref: 390a12130800
Ref: library/mailbox mailbox MMDF lock12131284
Ref: 390b12131284
Ref: library/mailbox mailbox MMDF unlock12131310
Ref: 390c12131310
Ref: MMDF objects-Footnote-112131753
Ref: MMDF objects-Footnote-212131813
Node: Message objects12131856
Ref: library/mailbox mailbox-message-objects12132014
Ref: 390d12132014
Ref: library/mailbox message-objects12132014
Ref: 390e12132014
Ref: library/mailbox mailbox Message12132073
Ref: 129212132073
Ref: Message objects-Footnote-112134119
Node: MaildirMessage objects12134178
Ref: library/mailbox mailbox-maildirmessage12134280
Ref: 390f12134280
Ref: library/mailbox maildirmessage-objects12134280
Ref: 391012134280
Ref: library/mailbox mailbox MaildirMessage12134353
Ref: 38ce12134353
Ref: library/mailbox mailbox MaildirMessage get_subdir12136205
Ref: 391112136205
Ref: library/mailbox mailbox MaildirMessage set_subdir12136720
Ref: 391212136720
Ref: library/mailbox mailbox MaildirMessage get_flags12136892
Ref: 38d712136892
Ref: library/mailbox mailbox MaildirMessage set_flags12137365
Ref: 38d812137365
Ref: library/mailbox mailbox MaildirMessage add_flag12137470
Ref: 38d912137470
Ref: library/mailbox mailbox MaildirMessage remove_flag12137821
Ref: 38da12137821
Ref: library/mailbox mailbox MaildirMessage get_date12138177
Ref: 391312138177
Ref: library/mailbox mailbox MaildirMessage set_date12138334
Ref: 391412138334
Ref: library/mailbox mailbox MaildirMessage get_info12138500
Ref: 38dc12138500
Ref: library/mailbox mailbox MaildirMessage set_info12138724
Ref: 38dd12138724
Node: mboxMessage objects12141522
Ref: library/mailbox mailbox-mboxmessage12141650
Ref: 391512141650
Ref: library/mailbox mboxmessage-objects12141650
Ref: 391612141650
Ref: library/mailbox mailbox mboxMessage12141717
Ref: 377112141717
Ref: library/mailbox mailbox mboxMessage get_from12143515
Ref: 391712143515
Ref: library/mailbox mailbox mboxMessage set_from12143747
Ref: 391812143747
Ref: library/mailbox mailbox mboxMessage get_flags12144286
Ref: 391912144286
Ref: library/mailbox mailbox mboxMessage set_flags12144635
Ref: 391a12144635
Ref: library/mailbox mailbox mboxMessage add_flag12144927
Ref: 391b12144927
Ref: library/mailbox mailbox mboxMessage remove_flag12145148
Ref: 391c12145148
Node: MHMessage objects12148127
Ref: library/mailbox mailbox-mhmessage12148253
Ref: 391d12148253
Ref: library/mailbox mhmessage-objects12148253
Ref: 391e12148253
Ref: library/mailbox mailbox MHMessage12148318
Ref: 38ee12148318
Ref: library/mailbox mailbox MHMessage get_sequences12149280
Ref: 391f12149280
Ref: library/mailbox mailbox MHMessage set_sequences12149404
Ref: 392012149404
Ref: library/mailbox mailbox MHMessage add_sequence12149513
Ref: 392112149513
Ref: library/mailbox mailbox MHMessage remove_sequence12149644
Ref: 392212149644
Node: BabylMessage objects12151510
Ref: library/mailbox babylmessage-objects12151636
Ref: 392312151636
Ref: library/mailbox mailbox-babylmessage12151636
Ref: 392412151636
Ref: library/mailbox mailbox BabylMessage12151707
Ref: 390112151707
Ref: library/mailbox mailbox BabylMessage get_labels12153064
Ref: 392512153064
Ref: library/mailbox mailbox BabylMessage set_labels12153148
Ref: 392612153148
Ref: library/mailbox mailbox BabylMessage add_label12153249
Ref: 392712153249
Ref: library/mailbox mailbox BabylMessage remove_label12153347
Ref: 392812153347
Ref: library/mailbox mailbox BabylMessage get_visible12153453
Ref: 392912153453
Ref: library/mailbox mailbox BabylMessage set_visible12153622
Ref: 392a12153622
Ref: library/mailbox mailbox BabylMessage update_visible12153974
Ref: 392b12153974
Node: MMDFMessage objects12156415
Ref: library/mailbox mailbox-mmdfmessage12156515
Ref: 392c12156515
Ref: library/mailbox mmdfmessage-objects12156515
Ref: 392d12156515
Ref: library/mailbox mailbox MMDFMessage12156584
Ref: 390812156584
Ref: library/mailbox mailbox MMDFMessage get_from12158266
Ref: 392e12158266
Ref: library/mailbox mailbox MMDFMessage set_from12158498
Ref: 392f12158498
Ref: library/mailbox mailbox MMDFMessage get_flags12159037
Ref: 393012159037
Ref: library/mailbox mailbox MMDFMessage set_flags12159386
Ref: 393112159386
Ref: library/mailbox mailbox MMDFMessage add_flag12159678
Ref: 393212159678
Ref: library/mailbox mailbox MMDFMessage remove_flag12159899
Ref: 393312159899
Node: Exceções<18>12162879
Ref: library/mailbox exceptions12163034
Ref: 393412163034
Ref: library/mailbox mailbox Error12163149
Ref: 393512163149
Ref: library/mailbox mailbox NoSuchMailboxError12163243
Ref: 38d212163243
Ref: library/mailbox mailbox NotEmptyError12163550
Ref: 38d512163550
Ref: library/mailbox mailbox ExternalClashError12163712
Ref: 38ca12163712
Ref: library/mailbox mailbox FormatError12164025
Ref: 393612164025
Node: Exemplos<23>12164222
Ref: library/mailbox examples12164353
Ref: 393712164353
Ref: library/mailbox mailbox-examples12164353
Ref: 393812164353
Node: mimetypes — Mapeia nomes de arquivos para tipos MIME12166631
Ref: library/mimetypes doc12166881
Ref: 393912166881
Ref: library/mimetypes mimetypes-map-filenames-to-mime-types12166881
Ref: 393a12166881
Ref: library/mimetypes module-mimetypes12166881
Ref: 8f12166881
Ref: library/mimetypes translation-repo12166881
Ref: 393b12166881
Ref: library/mimetypes mimetypes guess_type12167834
Ref: 20812167834
Ref: library/mimetypes mimetypes guess_file_type12169587
Ref: 20712169587
Ref: library/mimetypes mimetypes guess_all_extensions12169955
Ref: 19d512169955
Ref: library/mimetypes mimetypes guess_extension12170603
Ref: 393d12170603
Ref: library/mimetypes mimetypes init12171397
Ref: 393c12171397
Ref: library/mimetypes mimetypes read_mime_types12172521
Ref: 1ab712172521
Ref: library/mimetypes mimetypes add_type12172950
Ref: 393f12172950
Ref: library/mimetypes mimetypes inited12173413
Ref: 394012173413
Ref: library/mimetypes mimetypes knownfiles12173600
Ref: 393e12173600
Ref: library/mimetypes mimetypes suffix_map12173839
Ref: 394112173839
Ref: library/mimetypes mimetypes encodings_map12174261
Ref: 394212174261
Ref: library/mimetypes mimetypes types_map12174390
Ref: 394312174390
Ref: library/mimetypes mimetypes common_types12174495
Ref: 394412174495
Ref: mimetypes — Mapeia nomes de arquivos para tipos MIME-Footnote-112175061
Ref: mimetypes — Mapeia nomes de arquivos para tipos MIME-Footnote-212175130
Node: Objetos MimeTypes12175201
Ref: library/mimetypes id112175309
Ref: 394512175309
Ref: library/mimetypes mimetypes-objects12175309
Ref: 394612175309
Ref: library/mimetypes mimetypes MimeTypes12175561
Ref: 154312175561
Ref: library/mimetypes mimetypes MimeTypes suffix_map12176309
Ref: 394912176309
Ref: library/mimetypes mimetypes MimeTypes encodings_map12176831
Ref: 394a12176831
Ref: library/mimetypes mimetypes MimeTypes types_map12177066
Ref: 394b12177066
Ref: library/mimetypes mimetypes MimeTypes types_map_inv12177401
Ref: 394c12177401
Ref: library/mimetypes mimetypes MimeTypes guess_extension12177757
Ref: 394d12177757
Ref: library/mimetypes mimetypes MimeTypes guess_type12177936
Ref: 1bb012177936
Ref: library/mimetypes mimetypes MimeTypes guess_file_type12178103
Ref: 394e12178103
Ref: library/mimetypes mimetypes MimeTypes guess_all_extensions12178323
Ref: 394f12178323
Ref: library/mimetypes mimetypes MimeTypes read12178512
Ref: 394712178512
Ref: library/mimetypes mimetypes MimeTypes readfp12178886
Ref: 394812178886
Ref: library/mimetypes mimetypes MimeTypes read_windows_registry12179271
Ref: 395012179271
Ref: library/mimetypes mimetypes MimeTypes add_type12179677
Ref: 395112179677
Node: base64 — Base16 Base32 Base64 Base85 Data Encodings12180175
Ref: library/base64 doc12180410
Ref: 395212180410
Ref: library/base64 base64-base16-base32-base64-base85-data-encodings12180410
Ref: 395312180410
Ref: library/base64 module-base6412180410
Ref: e12180410
Ref: library/base64 translation-repo12180410
Ref: 395412180410
Ref: base64 — Base16 Base32 Base64 Base85 Data Encodings-Footnote-112182252
Ref: base64 — Base16 Base32 Base64 Base85 Data Encodings-Footnote-212182318
Ref: base64 — Base16 Base32 Base64 Base85 Data Encodings-Footnote-312182377
Ref: base64 — Base16 Base32 Base64 Base85 Data Encodings-Footnote-412182436
Ref: base64 — Base16 Base32 Base64 Base85 Data Encodings-Footnote-512182495
Node: RFC 4648 Encodings12182554
Ref: library/base64 base64-rfc-464812182687
Ref: 395512182687
Ref: library/base64 rfc-4648-encodings12182687
Ref: 395812182687
Ref: library/base64 base64 b64encode12182917
Ref: 395912182917
Ref: library/base64 base64 b64decode12183609
Ref: 1b1f12183609
Ref: library/base64 base64 standard_b64encode12184623
Ref: 395a12184623
Ref: library/base64 base64 standard_b64decode12184796
Ref: 395b12184796
Ref: library/base64 base64 urlsafe_b64encode12184985
Ref: 395c12184985
Ref: library/base64 base64 urlsafe_b64decode12185325
Ref: 395d12185325
Ref: library/base64 base64 b32encode12185642
Ref: 395e12185642
Ref: library/base64 base64 b32decode12185788
Ref: 105b12185788
Ref: library/base64 base64 b32hexencode12186792
Ref: 7e512186792
Ref: library/base64 base64 b32hexdecode12186975
Ref: 7e612186975
Ref: library/base64 base64 b16encode12187429
Ref: 395f12187429
Ref: library/base64 base64 b16decode12187575
Ref: 396012187575
Ref: RFC 4648 Encodings-Footnote-112188108
Ref: RFC 4648 Encodings-Footnote-212188167
Ref: RFC 4648 Encodings-Footnote-312188226
Ref: RFC 4648 Encodings-Footnote-412188285
Node: Base85 Encodings12188344
Ref: library/base64 base64-base-8512188502
Ref: 395612188502
Ref: library/base64 base85-encodings12188502
Ref: 396112188502
Ref: library/base64 base64 a85encode12189277
Ref: f5012189277
Ref: library/base64 base64 a85decode12190284
Ref: f5112190284
Ref: library/base64 base64 b85encode12191110
Ref: f5212191110
Ref: library/base64 base64 b85decode12191469
Ref: f5312191469
Ref: library/base64 base64 z85encode12191717
Ref: 14f12191717
Ref: library/base64 base64 z85decode12191967
Ref: 15012191967
Ref: Base85 Encodings-Footnote-112192251
Ref: Base85 Encodings-Footnote-212192291
Node: Legacy Interface12192331
Ref: library/base64 base64-legacy12192503
Ref: 395712192503
Ref: library/base64 legacy-interface12192503
Ref: 396212192503
Ref: library/base64 base64 decode12192556
Ref: 396312192556
Ref: library/base64 base64 decodebytes12192865
Ref: 95b12192865
Ref: library/base64 base64 encode12193100
Ref: 396412193100
Ref: library/base64 base64 encodebytes12193620
Ref: 95a12193620
Ref: Legacy Interface-Footnote-112194295
Ref: Legacy Interface-Footnote-212194354
Node: Considerações de Segurança<2>12194413
Ref: library/base64 base64-security12194560
Ref: 396512194560
Ref: library/base64 security-considerations12194560
Ref: 396612194560
Ref: Considerações de Segurança<2>-Footnote-112195245
Ref: Considerações de Segurança<2>-Footnote-212195304
Node: binascii — Converte entre binário e ASCII12195363
Ref: library/binascii doc12195610
Ref: 396712195610
Ref: library/binascii binascii-convert-between-binary-and-ascii12195610
Ref: 396812195610
Ref: library/binascii module-binascii12195610
Ref: 1012195610
Ref: library/binascii translation-repo12195610
Ref: 396912195610
Ref: library/binascii binascii a2b_uu12196672
Ref: 396a12196672
Ref: library/binascii binascii b2a_uu12196970
Ref: b3312196970
Ref: library/binascii binascii a2b_base6412197394
Ref: 171912197394
Ref: library/binascii binascii b2a_base6412198135
Ref: c9c12198135
Ref: library/binascii binascii a2b_qp12198538
Ref: 396b12198538
Ref: library/binascii binascii b2a_qp12198835
Ref: 396c12198835
Ref: library/binascii binascii crc_hqx12199603
Ref: 73412199603
Ref: library/binascii binascii crc3212199908
Ref: 178c12199908
Ref: library/binascii binascii b2a_hex12200586
Ref: 25ae12200586
Ref: library/binascii binascii hexlify12200650
Ref: 396d12200650
Ref: library/binascii binascii a2b_hex12201848
Ref: 25af12201848
Ref: library/binascii binascii unhexlify12201888
Ref: 1bbf12201888
Ref: library/binascii binascii Error12202417
Ref: 105c12202417
Ref: library/binascii binascii Incomplete12202521
Ref: 396e12202521
Ref: binascii — Converte entre binário e ASCII-Footnote-112202993
Ref: binascii — Converte entre binário e ASCII-Footnote-212203052
Ref: binascii — Converte entre binário e ASCII-Footnote-312203111
Node: quopri — Codifica e decodifica dados MIME imprimidos entre aspas12203170
Ref: library/quopri doc12203355
Ref: 396f12203355
Ref: library/quopri module-quopri12203355
Ref: b712203355
Ref: library/quopri quopri-encode-and-decode-mime-quoted-printable-data12203355
Ref: 397012203355
Ref: library/quopri translation-repo12203355
Ref: 397112203355
Ref: library/quopri quopri decode12204177
Ref: 25b112204177
Ref: library/quopri quopri encode12204783
Ref: 25b012204783
Ref: library/quopri quopri decodestring12205539
Ref: 397212205539
Ref: library/quopri quopri encodestring12205750
Ref: 397312205750
Ref: quopri — Codifica e decodifica dados MIME imprimidos entre aspas-Footnote-112206222
Ref: quopri — Codifica e decodifica dados MIME imprimidos entre aspas-Footnote-212206288
Ref: quopri — Codifica e decodifica dados MIME imprimidos entre aspas-Footnote-312206347
Ref: quopri — Codifica e decodifica dados MIME imprimidos entre aspas-Footnote-412206406
Ref: quopri — Codifica e decodifica dados MIME imprimidos entre aspas-Footnote-512206465
Node: Ferramentas de Processamento de Markup Estruturado12206524
Ref: library/markup doc12206720
Ref: 397412206720
Ref: library/markup markup12206720
Ref: 397512206720
Ref: library/markup structured-markup-processing-tools12206720
Ref: 397612206720
Ref: library/markup translation-repo12206720
Ref: 397712206720
Node: html — Suporte HTML HyperText Markup Language12208445
Ref: library/html doc12208638
Ref: 397812208638
Ref: library/html html-hypertext-markup-language-support12208638
Ref: 397912208638
Ref: library/html module-html12208638
Ref: 6b12208638
Ref: library/html html escape12208924
Ref: 104412208924
Ref: library/html html unescape12209525
Ref: 95e12209525
Ref: html — Suporte HTML HyperText Markup Language-Footnote-112210281
Node: html parser — Analisador simples de HTML e XHTML12210354
Ref: library/html parser doc12210614
Ref: 397a12210614
Ref: library/html parser html-parser-simple-html-and-xhtml-parser12210614
Ref: 397b12210614
Ref: library/html parser module-html parser12210614
Ref: 6d12210614
Ref: library/html parser translation-repo12210614
Ref: 397c12210614
Ref: library/html parser html parser HTMLParser12211008
Ref: 87b12211008
Ref: html parser — Analisador simples de HTML e XHTML-Footnote-112212650
Node: Exemplo de aplicação para análise de HTML12212721
Ref: library/html parser example-html-parser-application12212880
Ref: 397d12212880
Node: Métodos HTMLParser12214250
Ref: library/html parser htmlparser-methods12214430
Ref: 397e12214430
Ref: library/html parser html parser HTMLParser feed12214563
Ref: 397f12214563
Ref: library/html parser html parser HTMLParser close12214914
Ref: 162e12214914
Ref: library/html parser html parser HTMLParser reset12215316
Ref: 398012215316
Ref: library/html parser html parser HTMLParser getpos12215497
Ref: 398112215497
Ref: library/html parser html parser HTMLParser get_starttag_text12215589
Ref: 398212215589
Ref: library/html parser html parser HTMLParser handle_starttag12216213
Ref: 398412216213
Ref: library/html parser html parser HTMLParser handle_endtag12217049
Ref: 398512217049
Ref: library/html parser html parser HTMLParser handle_startendtag12217295
Ref: 398312217295
Ref: library/html parser html parser HTMLParser handle_data12217737
Ref: 398612217737
Ref: library/html parser html parser HTMLParser handle_entityref12217944
Ref: 398712217944
Ref: library/html parser html parser HTMLParser handle_charref12218283
Ref: 398812218283
Ref: library/html parser html parser HTMLParser handle_comment12218726
Ref: 398912218726
Ref: library/html parser html parser HTMLParser handle_decl12219322
Ref: 398a12219322
Ref: library/html parser html parser HTMLParser handle_pi12219628
Ref: 398b12219628
Ref: library/html parser html parser HTMLParser unknown_decl12220371
Ref: 398c12220371
Node: Exemplos<24>12220760
Ref: library/html parser examples12220887
Ref: 398d12220887
Ref: library/html parser htmlparser-examples12220887
Ref: 398e12220887
Node: html entities — Definições de entidades gerais de HTML12224579
Ref: library/html entities doc12224824
Ref: 398f12224824
Ref: library/html entities html-entities-definitions-of-html-general-entities12224824
Ref: 399012224824
Ref: library/html entities module-html entities12224824
Ref: 6c12224824
Ref: library/html entities translation-repo12224824
Ref: 399112224824
Ref: library/html entities html entities html512225214
Ref: 111112225214
Ref: library/html entities html entities entitydefs12225752
Ref: 399412225752
Ref: library/html entities html entities name2codepoint12225905
Ref: 399212225905
Ref: library/html entities html entities codepoint2name12226042
Ref: 399312226042
Ref: html entities — Definições de entidades gerais de HTML-Footnote-112226212
Ref: html entities — Definições de entidades gerais de HTML-Footnote-212226285
Node: Módulos de Processamento de XML12226392
Ref: library/xml doc12226634
Ref: 399512226634
Ref: library/xml module-xml12226634
Ref: 12012226634
Ref: library/xml translation-repo12226634
Ref: 399612226634
Ref: library/xml xml12226634
Ref: 399712226634
Ref: library/xml xml-processing-modules12226634
Ref: 399812226634
Ref: library/xml xml-security12227975
Ref: 399912227975
Ref: Módulos de Processamento de XML-Footnote-112228043
Node: Segurança no XML12228104
Ref: library/xml id112228190
Ref: 399a12228190
Ref: library/xml xml-vulnerabilities12228190
Ref: 399b12228190
Ref: Segurança no XML-Footnote-112231137
Ref: Segurança no XML-Footnote-212231182
Ref: Segurança no XML-Footnote-312231235
Ref: Segurança no XML-Footnote-412231288
Ref: Segurança no XML-Footnote-512231335
Node: xml etree ElementTree — A API XML ElementTree12231391
Ref: library/xml etree elementtree doc12231616
Ref: 399c12231616
Ref: library/xml etree elementtree module-xml etree ElementTree12231616
Ref: 12512231616
Ref: library/xml etree elementtree translation-repo12231616
Ref: 399d12231616
Ref: library/xml etree elementtree xml-etree-elementtree-the-elementtree-xml-api12231616
Ref: 399e12231616
Ref: xml etree ElementTree — A API XML ElementTree-Footnote-112232472
Node: Tutorial<3>12232554
Ref: library/xml etree elementtree tutorial12232673
Ref: 399f12232673
Node: Árvore e elementos XML12233144
Ref: library/xml etree elementtree xml-tree-and-elements12233238
Ref: 39a012233238
Node: Analisando XML12233854
Ref: library/xml etree elementtree elementtree-parsing-xml12233997
Ref: 39a112233997
Ref: library/xml etree elementtree parsing-xml12233997
Ref: 39a212233997
Node: A API de pull para análise sem bloqueio12236648
Ref: library/xml etree elementtree elementtree-pull-parsing12236803
Ref: 102a12236803
Ref: library/xml etree elementtree pull-api-for-non-blocking-parsing12236803
Ref: 39a412236803
Node: Encontrando elementos interessantes12239148
Ref: library/xml etree elementtree finding-interesting-elements12239315
Ref: 39a712239315
Node: Modificando um arquivo XML12240594
Ref: library/xml etree elementtree modifying-an-xml-file12240747
Ref: 39aa12240747
Node: Construindo documentos XML12243820
Ref: library/xml etree elementtree building-xml-documents12243974
Ref: 39ad12243974
Node: Analisando XML com espaços de nomes12244368
Ref: library/xml etree elementtree parsing-xml-with-namespaces12244487
Ref: 39af12244487
Ref: Analisando XML com espaços de nomes-Footnote-112246889
Ref: Analisando XML com espaços de nomes-Footnote-212246941
Node: Suporte a XPath12246993
Ref: library/xml etree elementtree elementtree-xpath12247135
Ref: bc512247135
Ref: library/xml etree elementtree xpath-support12247135
Ref: 39b012247135
Ref: Suporte a XPath-Footnote-112247528
Node: Exemplo<8>12247564
Ref: library/xml etree elementtree example12247657
Ref: 39b112247657
Node: Supported XPath syntax12248676
Ref: library/xml etree elementtree supported-xpath-syntax12248769
Ref: 39b212248769
Node: Referência<4>12253777
Ref: library/xml etree elementtree reference12253926
Ref: 39b312253926
Node: Funções<9>12254007
Ref: library/xml etree elementtree elementtree-functions12254070
Ref: 39b412254070
Ref: library/xml etree elementtree functions12254070
Ref: 39b512254070
Ref: library/xml etree elementtree xml etree ElementTree canonicalize12254109
Ref: a5d12254109
Ref: library/xml etree elementtree xml etree ElementTree Comment12256504
Ref: 39b612256504
Ref: library/xml etree elementtree xml etree ElementTree dump12257189
Ref: 39b712257189
Ref: library/xml etree elementtree xml etree ElementTree fromstring12257664
Ref: 39a312257664
Ref: library/xml etree elementtree xml etree ElementTree fromstringlist12258023
Ref: 121112258023
Ref: library/xml etree elementtree xml etree ElementTree indent12258438
Ref: 39b912258438
Ref: library/xml etree elementtree xml etree ElementTree iselement12258971
Ref: 39ba12258971
Ref: library/xml etree elementtree xml etree ElementTree iterparse12259185
Ref: 27312259185
Ref: library/xml etree elementtree xml etree ElementTree parse12261365
Ref: 39bb12261365
Ref: library/xml etree elementtree xml etree ElementTree ProcessingInstruction12261709
Ref: 39bc12261709
Ref: library/xml etree elementtree xml etree ElementTree register_namespace12262437
Ref: 121212262437
Ref: library/xml etree elementtree xml etree ElementTree SubElement12262873
Ref: 39ae12262873
Ref: library/xml etree elementtree xml etree ElementTree tostring12263443
Ref: 102b12263443
Ref: library/xml etree elementtree xml etree ElementTree tostringlist12264559
Ref: 102c12264559
Ref: library/xml etree elementtree xml etree ElementTree XML12265852
Ref: 39b812265852
Ref: library/xml etree elementtree xml etree ElementTree XMLID12266246
Ref: 39bd12266246
Ref: Funções<9>-Footnote-112266721
Ref: Funções<9>-Footnote-212266762
Ref: Funções<9>-Footnote-312267071
Node: Suporte a XInclude12267380
Ref: library/xml etree elementtree elementtree-xinclude12267528
Ref: 39be12267528
Ref: library/xml etree elementtree xinclude-support12267528
Ref: 39bf12267528
Ref: Suporte a XInclude-Footnote-112267897
Node: Exemplo<9>12267937
Ref: library/xml etree elementtree id312268002
Ref: 39c012268002
Node: Referência<5>12269816
Ref: library/xml etree elementtree id412269941
Ref: 39c112269941
Node: Funções<10>12270187
Ref: library/xml etree elementtree elementinclude-functions12270275
Ref: 39c212270275
Ref: library/xml etree elementtree id512270275
Ref: 39c312270275
Ref: library/xml etree elementtree module-xml etree ElementInclude12270314
Ref: 12412270314
Ref: library/xml etree elementtree xml etree ElementInclude default_loader12270314
Ref: 39c412270314
Ref: library/xml etree elementtree xml etree ElementInclude include12270909
Ref: 39c512270909
Node: Element Objects12271794
Ref: library/xml etree elementtree element-objects12271910
Ref: 39c612271910
Ref: library/xml etree elementtree elementtree-element-objects12271910
Ref: 39c712271910
Ref: library/xml etree elementtree xml etree ElementTree Element12271963
Ref: 31012271963
Ref: library/xml etree elementtree xml etree ElementTree Element tag12272446
Ref: 139312272446
Ref: library/xml etree elementtree xml etree ElementTree Element text12272590
Ref: 39a812272590
Ref: library/xml etree elementtree xml etree ElementTree Element tail12272614
Ref: 39c812272614
Ref: library/xml etree elementtree xml etree ElementTree Element attrib12273729
Ref: 39c912273729
Ref: library/xml etree elementtree xml etree ElementTree Element clear12274272
Ref: 39ca12274272
Ref: library/xml etree elementtree xml etree ElementTree Element get12274466
Ref: 39a912274466
Ref: library/xml etree elementtree xml etree ElementTree Element items12274655
Ref: 39cb12274655
Ref: library/xml etree elementtree xml etree ElementTree Element keys12274825
Ref: 39cc12274825
Ref: library/xml etree elementtree xml etree ElementTree Element set12274968
Ref: 39ab12274968
Ref: library/xml etree elementtree xml etree ElementTree Element append12275147
Ref: 39ac12275147
Ref: library/xml etree elementtree xml etree ElementTree Element extend12275384
Ref: 121312275384
Ref: library/xml etree elementtree xml etree ElementTree Element find12275621
Ref: 164b12275621
Ref: library/xml etree elementtree xml etree ElementTree Element findall12276044
Ref: 164d12276044
Ref: library/xml etree elementtree xml etree ElementTree Element findtext12276464
Ref: 164c12276464
Ref: library/xml etree elementtree xml etree ElementTree Element insert12277069
Ref: 39cd12277069
Ref: library/xml etree elementtree xml etree ElementTree Element iter12277281
Ref: 139412277281
Ref: library/xml etree elementtree xml etree ElementTree Element iterfind12277779
Ref: 121412277779
Ref: library/xml etree elementtree xml etree ElementTree Element itertext12278119
Ref: 121512278119
Ref: library/xml etree elementtree xml etree ElementTree Element makeelement12278350
Ref: 39ce12278350
Ref: library/xml etree elementtree xml etree ElementTree Element remove12278574
Ref: 164f12278574
Ref: Element Objects-Footnote-112281327
Node: ElementTree Objects12281370
Ref: library/xml etree elementtree elementtree-elementtree-objects12281486
Ref: 39cf12281486
Ref: library/xml etree elementtree elementtree-objects12281486
Ref: 39d012281486
Ref: library/xml etree elementtree xml etree ElementTree ElementTree12281547
Ref: 95512281547
Ref: library/xml etree elementtree xml etree ElementTree ElementTree _setroot12281900
Ref: 39d112281900
Ref: library/xml etree elementtree xml etree ElementTree ElementTree find12282150
Ref: 39d212282150
Ref: library/xml etree elementtree xml etree ElementTree ElementTree findall12282290
Ref: 39d312282290
Ref: library/xml etree elementtree xml etree ElementTree ElementTree findtext12282436
Ref: 39d412282436
Ref: library/xml etree elementtree xml etree ElementTree ElementTree getroot12282598
Ref: 39d512282598
Ref: library/xml etree elementtree xml etree ElementTree ElementTree iter12282679
Ref: 39d612282679
Ref: library/xml etree elementtree xml etree ElementTree ElementTree iterfind12282950
Ref: 39d712282950
Ref: library/xml etree elementtree xml etree ElementTree ElementTree parse12283136
Ref: 39d812283136
Ref: library/xml etree elementtree xml etree ElementTree ElementTree write12283483
Ref: aa412283483
Ref: ElementTree Objects-Footnote-112286294
Node: QName Objects12286603
Ref: library/xml etree elementtree elementtree-qname-objects12286723
Ref: 39d912286723
Ref: library/xml etree elementtree qname-objects12286723
Ref: 39da12286723
Ref: library/xml etree elementtree xml etree ElementTree QName12286772
Ref: 39db12286772
Node: TreeBuilder Objects12287286
Ref: library/xml etree elementtree elementtree-treebuilder-objects12287404
Ref: 39dc12287404
Ref: library/xml etree elementtree treebuilder-objects12287404
Ref: 39dd12287404
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder12287465
Ref: a5f12287465
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder close12288584
Ref: 39de12288584
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder data12288747
Ref: 39df12288747
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder end12288912
Ref: 121612288912
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder start12289046
Ref: 1afb12289046
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder comment12289249
Ref: 39e012289249
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder pi12289453
Ref: 39e112289453
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder doctype12289794
Ref: aa612289794
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder start_ns12290126
Ref: 39e212290126
Ref: library/xml etree elementtree xml etree ElementTree TreeBuilder end_ns12290528
Ref: 39e312290528
Ref: library/xml etree elementtree xml etree ElementTree C14NWriterTarget12290783
Ref: 39e412290783
Ref: TreeBuilder Objects-Footnote-112291338
Node: Objetos XMLParser12291379
Ref: library/xml etree elementtree elementtree-xmlparser-objects12291505
Ref: 39e512291505
Ref: library/xml etree elementtree xmlparser-objects12291505
Ref: 39e612291505
Ref: library/xml etree elementtree xml etree ElementTree XMLParser12291562
Ref: a5e12291562
Ref: library/xml etree elementtree xml etree ElementTree XMLParser close12292279
Ref: 39e812292279
Ref: library/xml etree elementtree xml etree ElementTree XMLParser feed12292536
Ref: 39e712292536
Ref: library/xml etree elementtree xml etree ElementTree XMLParser flush12292629
Ref: 26f12292629
Ref: Objetos XMLParser-Footnote-112295273
Node: XMLPullParser Objects12295582
Ref: library/xml etree elementtree elementtree-xmlpullparser-objects12295703
Ref: 39e912295703
Ref: library/xml etree elementtree xmlpullparser-objects12295703
Ref: 39ea12295703
Ref: library/xml etree elementtree xml etree ElementTree XMLPullParser12295768
Ref: 102912295768
Ref: library/xml etree elementtree xml etree ElementTree XMLPullParser feed12296462
Ref: 39a512296462
Ref: library/xml etree elementtree xml etree ElementTree XMLPullParser flush12296545
Ref: 27012296545
Ref: library/xml etree elementtree xml etree ElementTree XMLPullParser close12297410
Ref: 39eb12297410
Ref: library/xml etree elementtree xml etree ElementTree XMLPullParser read_events12297722
Ref: 39a612297722
Node: Exceções<19>12299472
Ref: library/xml etree elementtree exceptions12299567
Ref: 39ec12299567
Ref: library/xml etree elementtree xml etree ElementTree ParseError12299608
Ref: 12b912299608
Ref: library/xml etree elementtree xml etree ElementTree ParseError code12299937
Ref: 39ed12299937
Ref: library/xml etree elementtree xml etree ElementTree ParseError position12300141
Ref: 39ee12300141
Node: xml dom — The Document Object Model API12300265
Ref: library/xml dom doc12300504
Ref: 39ef12300504
Ref: library/xml dom module-xml dom12300504
Ref: 12112300504
Ref: library/xml dom translation-repo12300504
Ref: 39f012300504
Ref: library/xml dom xml-dom-the-document-object-model-api12300504
Ref: 39f112300504
Ref: xml dom — The Document Object Model API-Footnote-112303995
Ref: xml dom — The Document Object Model API-Footnote-212304072
Ref: xml dom — The Document Object Model API-Footnote-312304138
Ref: xml dom — The Document Object Model API-Footnote-412304185
Node: Conteúdo do módulo<6>12304231
Ref: library/xml dom module-contents12304359
Ref: 39f412304359
Ref: library/xml dom xml dom registerDOMImplementation12304477
Ref: 39f512304477
Ref: library/xml dom xml dom getDOMImplementation12304925
Ref: 39f212304925
Ref: library/xml dom xml dom EMPTY_NAMESPACE12305834
Ref: 39f612305834
Ref: library/xml dom xml dom XML_NAMESPACE12306107
Ref: 39f712306107
Ref: library/xml dom xml dom XMLNS_NAMESPACE12306264
Ref: 39f812306264
Ref: library/xml dom xml dom XHTML_NAMESPACE12306450
Ref: 39f912306450
Ref: Conteúdo do módulo<6>-Footnote-112307185
Ref: Conteúdo do módulo<6>-Footnote-212307230
Ref: Conteúdo do módulo<6>-Footnote-312307287
Node: Objects in the DOM12307325
Ref: library/xml dom dom-objects12307473
Ref: 39fa12307473
Ref: library/xml dom objects-in-the-dom12307473
Ref: 39fb12307473
Node: DOMImplementation Objects12312013
Ref: library/xml dom dom-implementation-objects12312114
Ref: 39fc12312114
Ref: library/xml dom domimplementation-objects12312114
Ref: 3a0612312114
Ref: library/xml dom xml dom DOMImplementation hasFeature12312470
Ref: 3a0712312470
Ref: library/xml dom xml dom DOMImplementation createDocument12312650
Ref: 3a0812312650
Ref: library/xml dom xml dom DOMImplementation createDocumentType12313171
Ref: 3a0912313171
Node: Objetos Node12313480
Ref: library/xml dom dom-node-objects12313606
Ref: 39fd12313606
Ref: library/xml dom node-objects12313606
Ref: 3a0a12313606
Ref: library/xml dom xml dom Node nodeType12313723
Ref: 3a0b12313723
Ref: library/xml dom xml dom Node parentNode12314145
Ref: 3a0c12314145
Ref: library/xml dom xml dom Node attributes12314553
Ref: 3a0d12314553
Ref: library/xml dom xml dom Node previousSibling12314765
Ref: 3a0e12314765
Ref: library/xml dom xml dom Node nextSibling12315250
Ref: 3a0f12315250
Ref: library/xml dom xml dom Node childNodes12315515
Ref: 3a1012315515
Ref: library/xml dom xml dom Node firstChild12315633
Ref: 3a1112315633
Ref: library/xml dom xml dom Node lastChild12315769
Ref: 3a1212315769
Ref: library/xml dom xml dom Node localName12315903
Ref: 3a1312315903
Ref: library/xml dom xml dom Node prefix12316066
Ref: 3a1412316066
Ref: library/xml dom xml dom Node namespaceURI12316233
Ref: 3a1512316233
Ref: library/xml dom xml dom Node nodeName12316395
Ref: 3a1612316395
Ref: library/xml dom xml dom Node nodeValue12316831
Ref: 3a1712316831
Ref: library/xml dom xml dom Node hasAttributes12317064
Ref: 3a1812317064
Ref: library/xml dom xml dom Node hasChildNodes12317156
Ref: 3a1912317156
Ref: library/xml dom xml dom Node isSameNode12317249
Ref: 3a1a12317249
Ref: library/xml dom xml dom Node appendChild12317879
Ref: 3a1b12317879
Ref: library/xml dom xml dom Node insertBefore12318088
Ref: 3a1c12318088
Ref: library/xml dom xml dom Node removeChild12318430
Ref: 3a1d12318430
Ref: library/xml dom xml dom Node replaceChild12318719
Ref: 3a1e12318719
Ref: library/xml dom xml dom Node normalize12318934
Ref: 3a1f12318934
Ref: library/xml dom xml dom Node cloneNode12319152
Ref: 3a2012319152
Node: Objetos NodeList12319297
Ref: library/xml dom dom-nodelist-objects12319418
Ref: 39fe12319418
Ref: library/xml dom nodelist-objects12319418
Ref: 3a2112319418
Ref: library/xml dom xml dom NodeList item12319899
Ref: 3a2212319899
Ref: library/xml dom xml dom NodeList length12320130
Ref: 3a2312320130
Node: DocumentType Objects12320799
Ref: library/xml dom documenttype-objects12320924
Ref: 3a2412320924
Ref: library/xml dom dom-documenttype-objects12320924
Ref: 39ff12320924
Ref: library/xml dom xml dom DocumentType publicId12321557
Ref: 3a2512321557
Ref: library/xml dom xml dom DocumentType systemId12321722
Ref: 3a2612321722
Ref: library/xml dom xml dom DocumentType internalSubset12321897
Ref: 3a2712321897
Ref: library/xml dom xml dom DocumentType name12322149
Ref: 3a2812322149
Ref: library/xml dom xml dom DocumentType entities12322277
Ref: 3a2912322277
Ref: library/xml dom xml dom DocumentType notations12322659
Ref: 3a2a12322659
Node: Document Objects12323037
Ref: library/xml dom document-objects12323164
Ref: 3a2b12323164
Ref: library/xml dom dom-document-objects12323164
Ref: 3a0012323164
Ref: library/xml dom xml dom Document documentElement12323411
Ref: 15a712323411
Ref: library/xml dom xml dom Document createElement12323504
Ref: 3a2c12323504
Ref: library/xml dom xml dom Document createElementNS12323794
Ref: 3a2d12323794
Ref: library/xml dom xml dom Document createTextNode12324146
Ref: 3a2e12324146
Ref: library/xml dom xml dom Document createComment12324366
Ref: 3a2f12324366
Ref: library/xml dom xml dom Document createProcessingInstruction12324588
Ref: 3a3012324588
Ref: library/xml dom xml dom Document createAttribute12324861
Ref: 3a3112324861
Ref: library/xml dom xml dom Document createAttributeNS12325169
Ref: 3a3212325169
Ref: library/xml dom xml dom Document getElementsByTagName12325558
Ref: 3a3312325558
Ref: library/xml dom xml dom Document getElementsByTagNameNS12325735
Ref: 3a3412325735
Node: Element Objects<2>12326007
Ref: library/xml dom dom-element-objects12326126
Ref: 3a0112326126
Ref: library/xml dom element-objects12326126
Ref: 3a3512326126
Ref: library/xml dom xml dom Element tagName12326267
Ref: 3a3612326267
Ref: library/xml dom xml dom Element getElementsByTagName12326413
Ref: 3a3712326413
Ref: library/xml dom xml dom Element getElementsByTagNameNS12326527
Ref: 3a3812326527
Ref: library/xml dom xml dom Element hasAttribute12326659
Ref: 3a3912326659
Ref: library/xml dom xml dom Element hasAttributeNS12326774
Ref: 3a3a12326774
Ref: library/xml dom xml dom Element getAttribute12326939
Ref: 3a3b12326939
Ref: library/xml dom xml dom Element getAttributeNode12327153
Ref: 3a3c12327153
Ref: library/xml dom xml dom Element getAttributeNS12327275
Ref: 3a3d12327275
Ref: library/xml dom xml dom Element getAttributeNodeNS12327534
Ref: 3a3e12327534
Ref: library/xml dom xml dom Element removeAttribute12327689
Ref: 3a3f12327689
Ref: library/xml dom xml dom Element removeAttributeNode12327848
Ref: 3a4112327848
Ref: library/xml dom xml dom Element removeAttributeNS12328041
Ref: 3a4212328041
Ref: library/xml dom xml dom Element setAttribute12328251
Ref: 3a4312328251
Ref: library/xml dom xml dom Element setAttributeNode12328344
Ref: 3a4412328344
Ref: library/xml dom xml dom Element setAttributeNodeNS12328689
Ref: 3a4612328689
Ref: library/xml dom xml dom Element setAttributeNS12329063
Ref: 3a4712329063
Node: Attr Objects12329300
Ref: library/xml dom attr-objects12329423
Ref: 3a4812329423
Ref: library/xml dom dom-attr-objects12329423
Ref: 3a0212329423
Ref: library/xml dom xml dom Attr name12329538
Ref: 3a4912329538
Ref: library/xml dom xml dom Attr localName12329649
Ref: 3a4a12329649
Ref: library/xml dom xml dom Attr prefix12329802
Ref: 3a4b12329802
Ref: library/xml dom xml dom Attr value12329921
Ref: 3a4c12329921
Node: NamedNodeMap Objects12330045
Ref: library/xml dom dom-attributelist-objects12330165
Ref: 3a4d12330165
Ref: library/xml dom namednodemap-objects12330165
Ref: 3a4e12330165
Ref: library/xml dom xml dom NamedNodeMap length12330284
Ref: 3a4f12330284
Ref: library/xml dom xml dom NamedNodeMap item12330359
Ref: 3a5012330359
Node: Comment Objects12330841
Ref: library/xml dom comment-objects12330978
Ref: 3a5112330978
Ref: library/xml dom dom-comment-objects12330978
Ref: 3a0312330978
Ref: library/xml dom xml dom Comment data12331150
Ref: 3a5212331150
Node: Text and CDATASection Objects12331367
Ref: library/xml dom dom-text-objects12331513
Ref: 3a0412331513
Ref: library/xml dom text-and-cdatasection-objects12331513
Ref: 3a5312331513
Ref: library/xml dom xml dom Text data12332009
Ref: 3a5412332009
Node: Objetos ProcessingInstruction12332501
Ref: library/xml dom dom-pi-objects12332646
Ref: 3a0512332646
Ref: library/xml dom processinginstruction-objects12332646
Ref: 3a5512332646
Ref: library/xml dom xml dom ProcessingInstruction target12332858
Ref: 3a5612332858
Ref: library/xml dom xml dom ProcessingInstruction data12333025
Ref: 3a5712333025
Node: Exceções<20>12333162
Ref: library/xml dom dom-exceptions12333269
Ref: 3a5812333269
Ref: library/xml dom exceptions12333269
Ref: 3a5912333269
Ref: library/xml dom xml dom DOMException12333946
Ref: 3a5a12333946
Ref: library/xml dom xml dom DomstringSizeErr12334108
Ref: 3a5b12334108
Ref: library/xml dom xml dom HierarchyRequestErr12334363
Ref: 3a5c12334363
Ref: library/xml dom xml dom IndexSizeErr12334502
Ref: 3a5d12334502
Ref: library/xml dom xml dom InuseAttributeErr12334644
Ref: 3a4512334644
Ref: library/xml dom xml dom InvalidAccessErr12334808
Ref: 3a5e12334808
Ref: library/xml dom xml dom InvalidCharacterErr12334941
Ref: 3a5f12334941
Ref: library/xml dom xml dom InvalidModificationErr12335301
Ref: 3a6012335301
Ref: library/xml dom xml dom InvalidStateErr12335415
Ref: 3a6112335415
Ref: library/xml dom xml dom NamespaceErr12335558
Ref: 3a6212335558
Ref: library/xml dom xml dom NotFoundErr12335767
Ref: 3a4012335767
Ref: library/xml dom xml dom NotSupportedErr12335998
Ref: 3a6312335998
Ref: library/xml dom xml dom NoDataAllowedErr12336140
Ref: 3a6412336140
Ref: library/xml dom xml dom NoModificationAllowedErr12336268
Ref: 3a6512336268
Ref: library/xml dom xml dom SyntaxErr12336434
Ref: 3a6612336434
Ref: library/xml dom xml dom WrongDocumentErr12336529
Ref: 3a6712336529
Ref: Exceções<20>-Footnote-112339570
Node: Conformance12339615
Ref: library/xml dom conformance12339731
Ref: 3a6812339731
Ref: library/xml dom dom-conformance12339731
Ref: 39f312339731
Node: Type Mapping12339988
Ref: library/xml dom dom-type-mapping12340073
Ref: 3a6912340073
Ref: library/xml dom type-mapping12340073
Ref: 3a6a12340073
Node: Accessor Methods12340901
Ref: library/xml dom accessor-methods12340986
Ref: 3a6b12340986
Ref: library/xml dom dom-accessor-methods12340986
Ref: 3a6c12340986
Node: xml dom minidom — Minimal DOM implementation12342862
Ref: library/xml dom minidom doc12343121
Ref: 3a6d12343121
Ref: library/xml dom minidom module-xml dom minidom12343121
Ref: 12212343121
Ref: library/xml dom minidom translation-repo12343121
Ref: 3a6e12343121
Ref: library/xml dom minidom xml-dom-minidom-minimal-dom-implementation12343121
Ref: 3a6f12343121
Ref: library/xml dom minidom xml dom minidom parse12344381
Ref: 3a7012344381
Ref: library/xml dom minidom xml dom minidom parseString12344946
Ref: 3a7112344946
Ref: xml dom minidom — Minimal DOM implementation-Footnote-112347520
Ref: xml dom minidom — Minimal DOM implementation-Footnote-212347596
Node: Objetos DOM12347643
Ref: library/xml dom minidom dom-objects12347757
Ref: 3a7212347757
Ref: library/xml dom minidom minidom-objects12347757
Ref: 3a7312347757
Ref: library/xml dom minidom xml dom minidom Node unlink12347992
Ref: 3a7412347992
Ref: library/xml dom minidom xml dom minidom Node writexml12348769
Ref: aa112348769
Ref: library/xml dom minidom xml dom minidom Node toxml12350011
Ref: aa212350011
Ref: library/xml dom minidom xml dom minidom Node toprettyxml12350821
Ref: aa312350821
Ref: Objetos DOM-Footnote-112351562
Node: DOM Example12351965
Ref: library/xml dom minidom dom-example12352111
Ref: 3a7512352111
Ref: library/xml dom minidom id212352111
Ref: 3a7612352111
Node: minidom e o padrão DOM12354143
Ref: library/xml dom minidom minidom-and-dom12354269
Ref: 3a7712354269
Ref: library/xml dom minidom minidom-and-the-dom-standard12354269
Ref: 3a7812354269
Node: xml dom pulldom — Suporte para construir árvores parciais de DOM12356899
Ref: library/xml dom pulldom doc12357153
Ref: 3a7912357153
Ref: library/xml dom pulldom module-xml dom pulldom12357153
Ref: 12312357153
Ref: library/xml dom pulldom translation-repo12357153
Ref: 3a7a12357153
Ref: library/xml dom pulldom xml-dom-pulldom-support-for-building-partial-dom-trees12357153
Ref: 3a7b12357153
Ref: library/xml dom pulldom xml dom pulldom PullDOM12360027
Ref: 3a7d12360027
Ref: library/xml dom pulldom xml dom pulldom SAX2DOM12360150
Ref: 3a7f12360150
Ref: library/xml dom pulldom xml dom pulldom parse12360273
Ref: 3a8012360273
Ref: library/xml dom pulldom xml dom pulldom parseString12360939
Ref: 3a8212360939
Ref: library/xml dom pulldom xml dom pulldom default_bufsize12361090
Ref: 3a8312361090
Ref: xml dom pulldom — Suporte para construir árvores parciais de DOM-Footnote-112361404
Node: Objetos DOMEventStream12361480
Ref: library/xml dom pulldom domeventstream-objects12361606
Ref: 3a8412361606
Ref: library/xml dom pulldom id112361606
Ref: 3a8512361606
Ref: library/xml dom pulldom xml dom pulldom DOMEventStream12361671
Ref: 73512361671
Ref: library/xml dom pulldom xml dom pulldom DOMEventStream getEvent12361842
Ref: 3a8612361842
Ref: library/xml dom pulldom xml dom pulldom DOMEventStream expandNode12362366
Ref: 3a7c12362366
Ref: library/xml dom pulldom xml dom pulldom DOMEventStream reset12363091
Ref: 3a8712363091
Node: xml sax — Support for SAX2 parsers12363119
Ref: library/xml sax doc12363385
Ref: 3a8812363385
Ref: library/xml sax module-xml sax12363385
Ref: 12912363385
Ref: library/xml sax translation-repo12363385
Ref: 3a8912363385
Ref: library/xml sax xml-sax-support-for-sax2-parsers12363385
Ref: 3a8a12363385
Ref: library/xml sax xml sax make_parser12364412
Ref: 1bb312364412
Ref: library/xml sax xml sax parse12364911
Ref: 1b7b12364911
Ref: library/xml sax xml sax parseString12365506
Ref: ecb12365506
Ref: library/xml sax xml sax SAXException12367432
Ref: 3a8f12367432
Ref: library/xml sax xml sax SAXParseException12368304
Ref: 3a8d12368304
Ref: library/xml sax xml sax SAXNotRecognizedException12368715
Ref: 3a9012368715
Ref: library/xml sax xml sax SAXNotSupportedException12369017
Ref: 3a9112369017
Ref: xml sax — Support for SAX2 parsers-Footnote-112370036
Ref: xml sax — Support for SAX2 parsers-Footnote-212370113
Node: SAXException Objects12370148
Ref: library/xml sax sax-exception-objects12370241
Ref: 3a9212370241
Ref: library/xml sax saxexception-objects12370241
Ref: 3a9312370241
Ref: library/xml sax xml sax SAXException getMessage12370381
Ref: 3a9412370381
Ref: library/xml sax xml sax SAXException getException12370492
Ref: 3a9512370492
Node: xml sax handler — Classes base para manipuladores de SAX12370597
Ref: library/xml sax handler doc12370836
Ref: 3a9612370836
Ref: library/xml sax handler module-xml sax handler12370836
Ref: 12a12370836
Ref: library/xml sax handler translation-repo12370836
Ref: 3a9712370836
Ref: library/xml sax handler xml-sax-handler-base-classes-for-sax-handlers12370836
Ref: 3a9812370836
Ref: library/xml sax handler xml sax handler ContentHandler12371559
Ref: 3a7e12371559
Ref: library/xml sax handler xml sax handler DTDHandler12371800
Ref: 3a9912371800
Ref: library/xml sax handler xml sax handler EntityResolver12371990
Ref: 3a9a12371990
Ref: library/xml sax handler xml sax handler ErrorHandler12372273
Ref: 3a8c12372273
Ref: library/xml sax handler xml sax handler LexicalHandler12372548
Ref: 85f12372548
Ref: library/xml sax handler xml sax handler feature_namespaces12372840
Ref: 3a9b12372840
Ref: library/xml sax handler xml sax handler feature_namespace_prefixes12373179
Ref: 3a9c12373179
Ref: library/xml sax handler xml sax handler feature_string_interning12373608
Ref: 3a9d12373608
Ref: library/xml sax handler xml sax handler feature_validation12374023
Ref: 3a9e12374023
Ref: library/xml sax handler xml sax handler feature_external_ges12374362
Ref: 15e012374362
Ref: library/xml sax handler xml sax handler feature_external_pes12374908
Ref: 3a9f12374908
Ref: library/xml sax handler xml sax handler all_features12375289
Ref: 3aa012375289
Ref: library/xml sax handler xml sax handler property_lexical_handler12375363
Ref: 3aa112375363
Ref: library/xml sax handler xml sax handler property_declaration_handler12375702
Ref: 3aa212375702
Ref: library/xml sax handler xml sax handler property_dom_node12376068
Ref: 3aa312376068
Ref: library/xml sax handler xml sax handler property_xml_string12376458
Ref: 3aa412376458
Ref: library/xml sax handler xml sax handler all_properties12376732
Ref: 3aa512376732
Ref: xml sax handler — Classes base para manipuladores de SAX-Footnote-112376989
Ref: xml sax handler — Classes base para manipuladores de SAX-Footnote-212377065
Ref: xml sax handler — Classes base para manipuladores de SAX-Footnote-312377130
Node: ContentHandler Objects12377181
Ref: library/xml sax handler content-handler-objects12377325
Ref: 3aa612377325
Ref: library/xml sax handler contenthandler-objects12377325
Ref: 3aa712377325
Ref: library/xml sax handler xml sax handler ContentHandler setDocumentLocator12377579
Ref: 3aa812377579
Ref: library/xml sax handler xml sax handler ContentHandler startDocument12378655
Ref: 3aa912378655
Ref: library/xml sax handler xml sax handler ContentHandler endDocument12378934
Ref: 3aaa12378934
Ref: library/xml sax handler xml sax handler ContentHandler startPrefixMapping12379303
Ref: 3aab12379303
Ref: library/xml sax handler xml sax handler ContentHandler endPrefixMapping12380506
Ref: 3aac12380506
Ref: library/xml sax handler xml sax handler ContentHandler startElement12380850
Ref: 158c12380850
Ref: library/xml sax handler xml sax handler ContentHandler endElement12381450
Ref: 158d12381450
Ref: library/xml sax handler xml sax handler ContentHandler startElementNS12381679
Ref: 3aae12381679
Ref: library/xml sax handler xml sax handler ContentHandler endElementNS12382624
Ref: 3ab012382624
Ref: library/xml sax handler xml sax handler ContentHandler characters12382896
Ref: 158e12382896
Ref: library/xml sax handler xml sax handler ContentHandler ignorableWhitespace12383924
Ref: 3ab112383924
Ref: library/xml sax handler xml sax handler ContentHandler processingInstruction12384592
Ref: 3ab212384592
Ref: library/xml sax handler xml sax handler ContentHandler skippedEntity12385053
Ref: 3ab312385053
Node: DTDHandler Objects12385554
Ref: library/xml sax handler dtd-handler-objects12385729
Ref: 3ab412385729
Ref: library/xml sax handler dtdhandler-objects12385729
Ref: 3ab512385729
Ref: library/xml sax handler xml sax handler DTDHandler notationDecl12385860
Ref: 3ab612385860
Ref: library/xml sax handler xml sax handler DTDHandler unparsedEntityDecl12385968
Ref: 3ab712385968
Node: EntityResolver Objects12386107
Ref: library/xml sax handler entity-resolver-objects12386280
Ref: 3ab812386280
Ref: library/xml sax handler entityresolver-objects12386280
Ref: 3ab912386280
Ref: library/xml sax handler xml sax handler EntityResolver resolveEntity12386347
Ref: 3aba12386347
Node: ErrorHandler Objects12386616
Ref: library/xml sax handler errorhandler-objects12386793
Ref: 3abb12386793
Ref: library/xml sax handler sax-error-handler12386793
Ref: 3abc12386793
Ref: library/xml sax handler xml sax handler ErrorHandler error12387448
Ref: 3abd12387448
Ref: library/xml sax handler xml sax handler ErrorHandler fatalError12387818
Ref: 3abe12387818
Ref: library/xml sax handler xml sax handler ErrorHandler warning12388005
Ref: 3abf12388005
Node: LexicalHandler Objects12388351
Ref: library/xml sax handler lexical-handler-objects12388497
Ref: 3ac012388497
Ref: library/xml sax handler lexicalhandler-objects12388497
Ref: 3ac112388497
Ref: library/xml sax handler xml sax handler LexicalHandler comment12389102
Ref: 3ac212389102
Ref: library/xml sax handler xml sax handler LexicalHandler startDTD12389257
Ref: 3ac312389257
Ref: library/xml sax handler xml sax handler LexicalHandler endDTD12389416
Ref: 3ac412389416
Ref: library/xml sax handler xml sax handler LexicalHandler startCDATA12389497
Ref: 3ac512389497
Ref: library/xml sax handler xml sax handler LexicalHandler endCDATA12389692
Ref: 3ac612389692
Node: xml sax saxutils — Utilitários de SAX12389782
Ref: library/xml sax utils doc12390032
Ref: 3ac712390032
Ref: library/xml sax utils module-xml sax saxutils12390032
Ref: 12b12390032
Ref: library/xml sax utils translation-repo12390032
Ref: 3ac812390032
Ref: library/xml sax utils xml-sax-saxutils-sax-utilities12390032
Ref: 3ac912390032
Ref: library/xml sax utils xml sax saxutils escape12390425
Ref: 3aca12390425
Ref: library/xml sax utils xml sax saxutils unescape12391106
Ref: 3acb12391106
Ref: library/xml sax utils xml sax saxutils quoteattr12391620
Ref: 3acc12391620
Ref: library/xml sax utils xml sax saxutils XMLGenerator12392599
Ref: 3acd12392599
Ref: library/xml sax utils xml sax saxutils XMLFilterBase12393516
Ref: 3ace12393516
Ref: library/xml sax utils xml sax saxutils prepare_input_source12393997
Ref: 3acf12393997
Ref: xml sax saxutils — Utilitários de SAX-Footnote-112394541
Node: xml sax xmlreader — Interface for XML parsers12394618
Ref: library/xml sax reader doc12394860
Ref: 3ad112394860
Ref: library/xml sax reader module-xml sax xmlreader12394860
Ref: 12c12394860
Ref: library/xml sax reader translation-repo12394860
Ref: 3ad212394860
Ref: library/xml sax reader xml-sax-xmlreader-interface-for-xml-parsers12394860
Ref: 3ad312394860
Ref: library/xml sax reader xml sax xmlreader XMLReader12395362
Ref: 3a8112395362
Ref: library/xml sax reader xml sax xmlreader IncrementalParser12395459
Ref: 3ad412395459
Ref: library/xml sax reader xml sax xmlreader Locator12396587
Ref: 3a8e12396587
Ref: library/xml sax reader xml sax xmlreader InputSource12396921
Ref: eca12396921
Ref: library/xml sax reader xml sax xmlreader AttributesImpl12397690
Ref: 3ad512397690
Ref: library/xml sax reader xml sax xmlreader AttributesNSImpl12398290
Ref: 3ad612398290
Ref: xml sax xmlreader — Interface for XML parsers-Footnote-112399048
Node: XMLReader Objects12399126
Ref: library/xml sax reader id112399261
Ref: 3ad712399261
Ref: library/xml sax reader xmlreader-objects12399261
Ref: 3ad812399261
Ref: library/xml sax reader xml sax xmlreader XMLReader parse12399388
Ref: 3ad012399388
Ref: library/xml sax reader xml sax xmlreader XMLReader getContentHandler12399980
Ref: 3ad912399980
Ref: library/xml sax reader xml sax xmlreader XMLReader setContentHandler12400078
Ref: 3ada12400078
Ref: library/xml sax reader xml sax xmlreader XMLReader getDTDHandler12400262
Ref: 3adb12400262
Ref: library/xml sax reader xml sax xmlreader XMLReader setDTDHandler12400352
Ref: 3adc12400352
Ref: library/xml sax reader xml sax xmlreader XMLReader getEntityResolver12400520
Ref: 3add12400520
Ref: library/xml sax reader xml sax xmlreader XMLReader setEntityResolver12400618
Ref: 3ade12400618
Ref: library/xml sax reader xml sax xmlreader XMLReader getErrorHandler12400911
Ref: 3adf12400911
Ref: library/xml sax reader xml sax xmlreader XMLReader setErrorHandler12401005
Ref: 3ae012401005
Ref: library/xml sax reader xml sax xmlreader XMLReader setLocale12401210
Ref: 3ae112401210
Ref: library/xml sax reader xml sax xmlreader XMLReader getFeature12401577
Ref: 3ae212401577
Ref: library/xml sax reader xml sax xmlreader XMLReader setFeature12401860
Ref: 3a8b12401860
Ref: library/xml sax reader xml sax xmlreader XMLReader getProperty12402150
Ref: 3ae312402150
Ref: library/xml sax reader xml sax xmlreader XMLReader setProperty12402442
Ref: 3ae412402442
Node: IncrementalParser Objects12402737
Ref: library/xml sax reader incremental-parser-objects12402896
Ref: 3ae512402896
Ref: library/xml sax reader incrementalparser-objects12402896
Ref: 3ae612402896
Ref: library/xml sax reader xml sax xmlreader IncrementalParser feed12403054
Ref: 3ae712403054
Ref: library/xml sax reader xml sax xmlreader IncrementalParser close12403131
Ref: 3ae812403131
Ref: library/xml sax reader xml sax xmlreader IncrementalParser reset12403371
Ref: 3ae912403371
Node: Locator Objects12403634
Ref: library/xml sax reader id212403795
Ref: 3aea12403795
Ref: library/xml sax reader locator-objects12403795
Ref: 3aeb12403795
Ref: library/xml sax reader xml sax xmlreader Locator getColumnNumber12403906
Ref: 3aec12403906
Ref: library/xml sax reader xml sax xmlreader Locator getLineNumber12404010
Ref: 3aed12404010
Ref: library/xml sax reader xml sax xmlreader Locator getPublicId12404110
Ref: 3aee12404110
Ref: library/xml sax reader xml sax xmlreader Locator getSystemId12404205
Ref: 3aef12404205
Node: InputSource Objects12404300
Ref: library/xml sax reader input-source-objects12404460
Ref: 3af012404460
Ref: library/xml sax reader inputsource-objects12404460
Ref: 3af112404460
Ref: library/xml sax reader xml sax xmlreader InputSource setPublicId12404521
Ref: 3af212404521
Ref: library/xml sax reader xml sax xmlreader InputSource getPublicId12404629
Ref: 3af312404629
Ref: library/xml sax reader xml sax xmlreader InputSource setSystemId12404738
Ref: 3af412404738
Ref: library/xml sax reader xml sax xmlreader InputSource getSystemId12404846
Ref: 3af512404846
Ref: library/xml sax reader xml sax xmlreader InputSource setEncoding12404955
Ref: 3af612404955
Ref: library/xml sax reader xml sax xmlreader InputSource getEncoding12405342
Ref: 3af712405342
Ref: library/xml sax reader xml sax xmlreader InputSource setByteStream12405445
Ref: 3af812405445
Ref: library/xml sax reader xml sax xmlreader InputSource getByteStream12405879
Ref: 3af912405879
Ref: library/xml sax reader xml sax xmlreader InputSource setCharacterStream12406088
Ref: 3afa12406088
Ref: library/xml sax reader xml sax xmlreader InputSource getCharacterStream12406403
Ref: 3afb12406403
Node: The Attributes Interface12406505
Ref: library/xml sax reader attributes-objects12406676
Ref: 3aad12406676
Ref: library/xml sax reader the-attributes-interface12406676
Ref: 3afc12406676
Ref: library/xml sax reader xml sax xmlreader Attributes getLength12407006
Ref: 3afd12407006
Ref: library/xml sax reader xml sax xmlreader Attributes getNames12407083
Ref: 3afe12407083
Ref: library/xml sax reader xml sax xmlreader Attributes getType12407162
Ref: 3aff12407162
Ref: library/xml sax reader xml sax xmlreader Attributes getValue12407288
Ref: 3b0012407288
Node: The AttributesNS Interface12407373
Ref: library/xml sax reader attributes-ns-objects12407516
Ref: 3aaf12407516
Ref: library/xml sax reader the-attributesns-interface12407516
Ref: 3b0112407516
Ref: library/xml sax reader xml sax xmlreader AttributesNS getValueByQName12407849
Ref: 3b0212407849
Ref: library/xml sax reader xml sax xmlreader AttributesNS getNameByQName12407944
Ref: 3b0312407944
Ref: library/xml sax reader xml sax xmlreader AttributesNS getQNameByName12408068
Ref: 3b0412408068
Ref: library/xml sax reader xml sax xmlreader AttributesNS getQNames12408190
Ref: 3b0512408190
Node: xml parsers expat — Fast XML parsing using Expat12408282
Ref: library/pyexpat doc12408475
Ref: 3b0612408475
Ref: library/pyexpat module-xml parsers expat12408475
Ref: 12612408475
Ref: library/pyexpat translation-repo12408475
Ref: 3b0712408475
Ref: library/pyexpat xml-parsers-expat-fast-xml-parsing-using-expat12408475
Ref: 3b0812408475
Ref: library/pyexpat xml parsers expat ExpatError12409521
Ref: 12ba12409521
Ref: library/pyexpat xml parsers expat error12409749
Ref: 3b0a12409749
Ref: library/pyexpat xml parsers expat XMLParserType12409832
Ref: 3b0b12409832
Ref: library/pyexpat xml parsers expat ErrorString12410016
Ref: 3b0d12410016
Ref: library/pyexpat xml parsers expat ParserCreate12410156
Ref: 3b0c12410156
Ref: library/pyexpat xmlparser-non-root12410706
Ref: 3b0e12410706
Ref: xml parsers expat — Fast XML parsing using Expat-Footnote-112413065
Ref: xml parsers expat — Fast XML parsing using Expat-Footnote-212413374
Node: Objetos XMLParser<2>12413407
Ref: library/pyexpat id212413544
Ref: 3b0f12413544
Ref: library/pyexpat xmlparser-objects12413544
Ref: 15db12413544
Ref: library/pyexpat xml parsers expat xmlparser Parse12413654
Ref: 3b1012413654
Ref: library/pyexpat xml parsers expat xmlparser ParseFile12414033
Ref: 3b1112414033
Ref: library/pyexpat xml parsers expat xmlparser SetBase12414254
Ref: 3b1212414254
Ref: library/pyexpat xml parsers expat xmlparser GetBase12414671
Ref: 3b1612414671
Ref: library/pyexpat xml parsers expat xmlparser GetInputContext12414870
Ref: 3b1712414870
Ref: library/pyexpat xml parsers expat xmlparser ExternalEntityParserCreate12415154
Ref: 15ef12415154
Ref: library/pyexpat xml parsers expat xmlparser SetParamEntityParsing12415672
Ref: 3b1a12415672
Ref: library/pyexpat xml parsers expat xmlparser UseForeignDTD12416038
Ref: 3b1b12416038
Ref: library/pyexpat xml parsers expat xmlparser SetReparseDeferralEnabled12417026
Ref: 27212417026
Ref: library/pyexpat xml parsers expat xmlparser GetReparseDeferralEnabled12418543
Ref: 27112418543
Ref: library/pyexpat xml parsers expat xmlparser SetAllocTrackerActivationThreshold12418829
Ref: 15d912418829
Ref: library/pyexpat xml parsers expat xmlparser SetAllocTrackerMaximumAmplification12419431
Ref: 15da12419431
Ref: library/pyexpat xml parsers expat xmlparser buffer_size12420902
Ref: 3b2012420902
Ref: library/pyexpat xml parsers expat xmlparser buffer_text12421163
Ref: 150a12421163
Ref: library/pyexpat xml parsers expat xmlparser buffer_used12421708
Ref: 3b2212421708
Ref: library/pyexpat xml parsers expat xmlparser ordered_attributes12421980
Ref: 3b1812421980
Ref: library/pyexpat xml parsers expat xmlparser specified_attributes12422471
Ref: 3b1912422471
Ref: library/pyexpat xml parsers expat xmlparser ErrorByteIndex12423277
Ref: 3b2312423277
Ref: library/pyexpat xml parsers expat xmlparser ErrorCode12423362
Ref: 3b2412423362
Ref: library/pyexpat xml parsers expat xmlparser ErrorColumnNumber12423592
Ref: 3b2512423592
Ref: library/pyexpat xml parsers expat xmlparser ErrorLineNumber12423683
Ref: 3b2612423683
Ref: library/pyexpat xml parsers expat xmlparser CurrentByteIndex12424175
Ref: 3b2712424175
Ref: library/pyexpat xml parsers expat xmlparser CurrentColumnNumber12424263
Ref: 3b2812424263
Ref: library/pyexpat xml parsers expat xmlparser CurrentLineNumber12424357
Ref: 3b2912424357
Ref: library/pyexpat xml parsers expat xmlparser XmlDeclHandler12424769
Ref: 3b2a12424769
Ref: library/pyexpat xml parsers expat xmlparser StartDoctypeDeclHandler12425383
Ref: 3b1c12425383
Ref: library/pyexpat xml parsers expat xmlparser EndDoctypeDeclHandler12425937
Ref: 3b1d12425937
Ref: library/pyexpat xml parsers expat xmlparser ElementDeclHandler12426104
Ref: 15d612426104
Ref: library/pyexpat xml parsers expat xmlparser AttlistDeclHandler12426319
Ref: 3b2b12426319
Ref: library/pyexpat xml parsers expat xmlparser StartElementHandler12427223
Ref: 3b2c12427223
Ref: library/pyexpat xml parsers expat xmlparser EndElementHandler12427621
Ref: 3b2d12427621
Ref: library/pyexpat xml parsers expat xmlparser ProcessingInstructionHandler12427713
Ref: 3b2e12427713
Ref: library/pyexpat xml parsers expat xmlparser CharacterDataHandler12427828
Ref: 3b2112427828
Ref: library/pyexpat xml parsers expat xmlparser UnparsedEntityDeclHandler12428494
Ref: 3b1512428494
Ref: library/pyexpat xml parsers expat xmlparser EntityDeclHandler12428888
Ref: 3b3112428888
Ref: library/pyexpat xml parsers expat xmlparser NotationDeclHandler12429634
Ref: 3b1412429634
Ref: library/pyexpat xml parsers expat xmlparser StartNamespaceDeclHandler12429926
Ref: 3b3212429926
Ref: library/pyexpat xml parsers expat xmlparser EndNamespaceDeclHandler12430205
Ref: 3b3312430205
Ref: library/pyexpat xml parsers expat xmlparser CommentHandler12430729
Ref: 3b3412430729
Ref: library/pyexpat xml parsers expat xmlparser StartCdataSectionHandler12430916
Ref: 3b2f12430916
Ref: library/pyexpat xml parsers expat xmlparser EndCdataSectionHandler12431154
Ref: 3b3012431154
Ref: library/pyexpat xml parsers expat xmlparser DefaultHandler12431248
Ref: 3b3512431248
Ref: library/pyexpat xml parsers expat xmlparser DefaultHandlerExpand12431534
Ref: 3b3612431534
Ref: library/pyexpat xml parsers expat xmlparser NotStandaloneHandler12431775
Ref: 3b3712431775
Ref: library/pyexpat xml parsers expat xmlparser ExternalEntityRefHandler12432298
Ref: 3b1312432298
Ref: Objetos XMLParser<2>-Footnote-112433707
Ref: Objetos XMLParser<2>-Footnote-212433772
Node: Exceções ExpatError12433823
Ref: library/pyexpat expaterror-exceptions12433980
Ref: 3b3812433980
Ref: library/pyexpat expaterror-objects12433980
Ref: 3b0912433980
Ref: library/pyexpat xml parsers expat ExpatError code12434120
Ref: 3b3912434120
Ref: library/pyexpat xml parsers expat ExpatError lineno12434768
Ref: 3b1e12434768
Ref: library/pyexpat xml parsers expat ExpatError offset12434894
Ref: 3b1f12434894
Node: Exemplo<10>12435034
Ref: library/pyexpat example12435197
Ref: 3b3c12435197
Ref: library/pyexpat expat-example12435197
Ref: 3b3d12435197
Node: Content Model Descriptions12436295
Ref: library/pyexpat content-model-descriptions12436470
Ref: 3b3e12436470
Ref: library/pyexpat expat-content-models12436470
Ref: 3b3f12436470
Ref: library/pyexpat module-xml parsers expat model12436470
Ref: 12812436470
Node: Constantes de erro de expatriados12438309
Ref: library/pyexpat expat-error-constants12438464
Ref: 3b4012438464
Ref: library/pyexpat expat-errors12438464
Ref: 3b4112438464
Ref: library/pyexpat module-xml parsers expat errors12438464
Ref: 12712438464
Ref: library/pyexpat xml parsers expat errors codes12439078
Ref: 3b3b12439078
Ref: library/pyexpat xml parsers expat errors messages12439222
Ref: 3b3a12439222
Ref: library/pyexpat xml parsers expat errors XML_ERROR_ASYNC_ENTITY12439382
Ref: 3b4212439382
Ref: library/pyexpat xml parsers expat errors XML_ERROR_ATTRIBUTE_EXTERNAL_ENTITY_REF12439441
Ref: 3b4312439441
Ref: library/pyexpat xml parsers expat errors XML_ERROR_BAD_CHAR_REF12439642
Ref: 3b4412439642
Ref: library/pyexpat xml parsers expat errors XML_ERROR_BINARY_ENTITY_REF12439837
Ref: 3b4512439837
Ref: library/pyexpat xml parsers expat errors XML_ERROR_DUPLICATE_ATTRIBUTE12440011
Ref: 3b4612440011
Ref: library/pyexpat xml parsers expat errors XML_ERROR_INCORRECT_ENCODING12440136
Ref: 3b4712440136
Ref: library/pyexpat xml parsers expat errors XML_ERROR_INVALID_TOKEN12440201
Ref: 3b4812440201
Ref: library/pyexpat xml parsers expat errors XML_ERROR_JUNK_AFTER_DOC_ELEMENT12440415
Ref: 3b4912440415
Ref: library/pyexpat xml parsers expat errors XML_ERROR_MISPLACED_XML_PI12440564
Ref: 3b4a12440564
Ref: library/pyexpat xml parsers expat errors XML_ERROR_NO_ELEMENTS12440717
Ref: 3b4b12440717
Ref: library/pyexpat xml parsers expat errors XML_ERROR_NO_MEMORY12440892
Ref: 3b4c12440892
Ref: library/pyexpat xml parsers expat errors XML_ERROR_PARAM_ENTITY_REF12441004
Ref: 3b4d12441004
Ref: library/pyexpat xml parsers expat errors XML_ERROR_PARTIAL_CHAR12441138
Ref: 3b4e12441138
Ref: library/pyexpat xml parsers expat errors XML_ERROR_RECURSIVE_ENTITY_REF12441251
Ref: 3b4f12441251
Ref: library/pyexpat xml parsers expat errors XML_ERROR_SYNTAX12441453
Ref: 3b5012441453
Ref: library/pyexpat xml parsers expat errors XML_ERROR_TAG_MISMATCH12441559
Ref: 3b5112441559
Ref: library/pyexpat xml parsers expat errors XML_ERROR_UNCLOSED_TOKEN12441679
Ref: 3b5212441679
Ref: library/pyexpat xml parsers expat errors XML_ERROR_UNDEFINED_ENTITY12441863
Ref: 3b5312441863
Ref: library/pyexpat xml parsers expat errors XML_ERROR_UNKNOWN_ENCODING12441989
Ref: 3b5412441989
Ref: library/pyexpat xml parsers expat errors XML_ERROR_UNCLOSED_CDATA_SECTION12442107
Ref: 3b5512442107
Ref: library/pyexpat xml parsers expat errors XML_ERROR_EXTERNAL_ENTITY_HANDLING12442221
Ref: 3b5612442221
Ref: library/pyexpat xml parsers expat errors XML_ERROR_NOT_STANDALONE12442292
Ref: 3b5712442292
Ref: library/pyexpat xml parsers expat errors XML_ERROR_UNEXPECTED_STATE12442555
Ref: 3b5812442555
Ref: library/pyexpat xml parsers expat errors XML_ERROR_ENTITY_DECLARED_IN_PE12442618
Ref: 3b5912442618
Ref: library/pyexpat xml parsers expat errors XML_ERROR_FEATURE_REQUIRES_XML_DTD12442686
Ref: 3b5a12442686
Ref: library/pyexpat xml parsers expat errors XML_ERROR_CANT_CHANGE_FEATURE_ONCE_PARSING12442992
Ref: 3b5b12442992
Ref: library/pyexpat xml parsers expat errors XML_ERROR_UNBOUND_PREFIX12443265
Ref: 3b5c12443265
Ref: library/pyexpat xml parsers expat errors XML_ERROR_UNDECLARING_PREFIX12443407
Ref: 3b5d12443407
Ref: library/pyexpat xml parsers expat errors XML_ERROR_INCOMPLETE_PE12443568
Ref: 3b5e12443568
Ref: library/pyexpat xml parsers expat errors XML_ERROR_XML_DECL12443682
Ref: 3b5f12443682
Ref: library/pyexpat xml parsers expat errors XML_ERROR_TEXT_DECL12443794
Ref: 3b6012443794
Ref: library/pyexpat xml parsers expat errors XML_ERROR_PUBLICID12443930
Ref: 3b6112443930
Ref: library/pyexpat xml parsers expat errors XML_ERROR_SUSPENDED12444052
Ref: 3b6212444052
Ref: library/pyexpat xml parsers expat errors XML_ERROR_NOT_SUSPENDED12444276
Ref: 3b6312444276
Ref: library/pyexpat xml parsers expat errors XML_ERROR_ABORTED12444428
Ref: 3b6412444428
Ref: library/pyexpat xml parsers expat errors XML_ERROR_FINISHED12444540
Ref: 3b6512444540
Ref: library/pyexpat xml parsers expat errors XML_ERROR_SUSPEND_PE12444786
Ref: 3b6612444786
Ref: library/pyexpat xml parsers expat errors XML_ERROR_RESERVED_PREFIX_XML12444843
Ref: 3b6712444843
Ref: library/pyexpat xml parsers expat errors XML_ERROR_RESERVED_PREFIX_XMLNS12445029
Ref: 3b6812445029
Ref: library/pyexpat xml parsers expat errors XML_ERROR_RESERVED_NAMESPACE_URI12445191
Ref: 3b6912445191
Ref: library/pyexpat xml parsers expat errors XML_ERROR_INVALID_ARGUMENT12445401
Ref: 3b6a12445401
Ref: library/pyexpat xml parsers expat errors XML_ERROR_NO_BUFFER12445522
Ref: 3b6b12445522
Ref: library/pyexpat xml parsers expat errors XML_ERROR_AMPLIFICATION_LIMIT_BREACH12445636
Ref: 3b6c12445636
Node: Protocolos de Internet e Suporte12445803
Ref: library/internet doc12445991
Ref: 3b6d12445991
Ref: library/internet internet12445991
Ref: 3b6e12445991
Ref: library/internet internet-protocols-and-support12445991
Ref: 3b6f12445991
Ref: library/internet translation-repo12445991
Ref: 3b7012445991
Node: webbrowser — Controlador de navegador web conveniente12448079
Ref: library/webbrowser doc12448274
Ref: 3b7112448274
Ref: library/webbrowser module-webbrowser12448274
Ref: 11512448274
Ref: library/webbrowser webbrowser-convenient-web-browser-controller12448274
Ref: 3b7212448274
Ref: webbrowser — Controlador de navegador web conveniente-Footnote-112450645
Ref: webbrowser — Controlador de navegador web conveniente-Footnote-212450715
Node: Interface de linha de comando<6>12450857
Ref: library/webbrowser command-line-interface12451024
Ref: 3b7412451024
Ref: library/webbrowser webbrowser-cli12451024
Ref: 3b7512451024
Ref: library/webbrowser cmdoption-webbrowser-n12451284
Ref: 3b7612451284
Ref: library/webbrowser cmdoption-webbrowser-new-window12451284
Ref: 3b7712451284
Ref: library/webbrowser cmdoption-webbrowser-t12451378
Ref: 3b7812451378
Ref: library/webbrowser cmdoption-webbrowser-new-tab12451378
Ref: 3b7912451378
Ref: library/webbrowser webbrowser Error12451669
Ref: 3b7a12451669
Ref: library/webbrowser webbrowser open12451818
Ref: 3b7312451818
Ref: library/webbrowser webbrowser open_new12452839
Ref: 3b7b12452839
Ref: library/webbrowser webbrowser open_new_tab12453117
Ref: 3b7c12453117
Ref: library/webbrowser webbrowser get12453427
Ref: 3b7d12453427
Ref: library/webbrowser webbrowser register12453667
Ref: 3b7e12453667
Node: Objetos controladores de navegador12460267
Ref: library/webbrowser browser-controller-objects12460434
Ref: 3b7f12460434
Ref: library/webbrowser browser-controllers12460434
Ref: 3b8012460434
Ref: library/webbrowser webbrowser controller name12460692
Ref: 29712460692
Ref: library/webbrowser webbrowser controller open12460774
Ref: 3b8112460774
Ref: library/webbrowser webbrowser controller open_new12461092
Ref: 3b8212461092
Ref: library/webbrowser webbrowser controller open_new_tab12461335
Ref: 3b8312461335
Node: wsgiref — Implementação de referência e utilitários WSGI12461567
Ref: library/wsgiref doc12461814
Ref: 3b8412461814
Ref: library/wsgiref module-wsgiref12461814
Ref: 11812461814
Ref: library/wsgiref translation-repo12461814
Ref: 3b8512461814
Ref: library/wsgiref wsgiref-wsgi-utilities-and-reference-implementation12461814
Ref: 3b8612461814
Ref: wsgiref — Implementação de referência e utilitários WSGI-Footnote-112464116
Ref: wsgiref — Implementação de referência e utilitários WSGI-Footnote-212464180
Ref: wsgiref — Implementação de referência e utilitários WSGI-Footnote-312464222
Node: wsgiref util – Utilidades do ambiente WSGI12464259
Ref: library/wsgiref module-wsgiref util12464473
Ref: 11d12464473
Ref: library/wsgiref wsgiref-util-wsgi-environment-utilities12464473
Ref: 3b8712464473
Ref: library/wsgiref wsgiref util guess_scheme12465074
Ref: 3b8912465074
Ref: library/wsgiref wsgiref util request_uri12465764
Ref: 3b8a12465764
Ref: library/wsgiref wsgiref util application_uri12466116
Ref: 3b8b12466116
Ref: library/wsgiref wsgiref util shift_path_info12466388
Ref: 3b8c12466388
Ref: library/wsgiref wsgiref util setup_testing_defaults12468124
Ref: 3b8d12468124
Ref: library/wsgiref wsgiref util is_hop_by_hop12469900
Ref: 17b712469900
Ref: library/wsgiref wsgiref util FileWrapper12470087
Ref: 73612470087
Ref: wsgiref util – Utilidades do ambiente WSGI-Footnote-112471385
Ref: wsgiref util – Utilidades do ambiente WSGI-Footnote-212471427
Ref: wsgiref util – Utilidades do ambiente WSGI-Footnote-312471469
Ref: wsgiref util – Utilidades do ambiente WSGI-Footnote-412471511
Ref: wsgiref util – Utilidades do ambiente WSGI-Footnote-512471553
Node: wsgiref headers – Ferramentas de cabeçalho de resposta WSGI12471612
Ref: library/wsgiref module-wsgiref headers12471890
Ref: 11a12471890
Ref: library/wsgiref wsgiref-headers-wsgi-response-header-tools12471890
Ref: 3b9012471890
Ref: library/wsgiref wsgiref headers Headers12472210
Ref: ec712472210
Ref: library/wsgiref wsgiref headers Headers get_all12474800
Ref: 3b9112474800
Ref: library/wsgiref wsgiref headers Headers add_header12475296
Ref: 3b9212475296
Ref: wsgiref headers – Ferramentas de cabeçalho de resposta WSGI-Footnote-112476596
Node: wsgiref simple_server – um servidor HTTP WSGI simples12476638
Ref: library/wsgiref module-wsgiref simple_server12476925
Ref: 11b12476925
Ref: library/wsgiref wsgiref-simple-server-a-simple-wsgi-http-server12476925
Ref: 3b9312476925
Ref: library/wsgiref wsgiref simple_server make_server12477561
Ref: 3b9412477561
Ref: library/wsgiref wsgiref simple_server demo_app12478441
Ref: 3b8e12478441
Ref: library/wsgiref wsgiref simple_server WSGIServer12478988
Ref: 3b9612478988
Ref: library/wsgiref wsgiref simple_server WSGIServer set_app12479788
Ref: 3b9812479788
Ref: library/wsgiref wsgiref simple_server WSGIServer get_app12479937
Ref: 3b9912479937
Ref: library/wsgiref wsgiref simple_server WSGIRequestHandler12480332
Ref: 3b9a12480332
Ref: library/wsgiref wsgiref simple_server WSGIRequestHandler get_environ12481003
Ref: 3b9b12481003
Ref: library/wsgiref wsgiref simple_server WSGIRequestHandler get_stderr12481539
Ref: 3b9c12481539
Ref: library/wsgiref wsgiref simple_server WSGIRequestHandler handle12481731
Ref: 3b9d12481731
Ref: wsgiref simple_server – um servidor HTTP WSGI simples-Footnote-112482024
Ref: wsgiref simple_server – um servidor HTTP WSGI simples-Footnote-212482066
Node: wsgiref validate — Verificador de conformidade WSGI12482108
Ref: library/wsgiref module-wsgiref validate12482386
Ref: 11e12482386
Ref: library/wsgiref wsgiref-validate-wsgi-conformance-checker12482386
Ref: 3b9e12482386
Ref: library/wsgiref wsgiref validate validator12483344
Ref: 3b9f12483344
Ref: wsgiref validate — Verificador de conformidade WSGI-Footnote-112485670
Ref: wsgiref validate — Verificador de conformidade WSGI-Footnote-212485712
Ref: wsgiref validate — Verificador de conformidade WSGI-Footnote-312485771
Node: wsgiref handlers – classes base de servidor/gateway12485813
Ref: library/wsgiref module-wsgiref handlers12486089
Ref: 11912486089
Ref: library/wsgiref wsgiref-handlers-server-gateway-base-classes12486089
Ref: 3ba012486089
Ref: library/wsgiref wsgiref handlers CGIHandler12486508
Ref: 3ba112486508
Ref: library/wsgiref wsgiref handlers IISCGIHandler12487176
Ref: 3ba312487176
Ref: library/wsgiref wsgiref handlers BaseCGIHandler12488661
Ref: 3ba212488661
Ref: library/wsgiref wsgiref handlers SimpleHandler12489529
Ref: 3ba412489529
Ref: library/wsgiref wsgiref handlers BaseHandler12490479
Ref: 1b6712490479
Ref: library/wsgiref wsgiref handlers BaseHandler run12490839
Ref: 3baa12490839
Ref: library/wsgiref wsgiref handlers BaseHandler _write12491179
Ref: 3ba812491179
Ref: library/wsgiref wsgiref handlers BaseHandler _flush12491526
Ref: 3ba912491526
Ref: library/wsgiref wsgiref handlers BaseHandler get_stdin12491736
Ref: 3ba512491736
Ref: library/wsgiref wsgiref handlers BaseHandler get_stderr12491940
Ref: 3ba612491940
Ref: library/wsgiref wsgiref handlers BaseHandler add_cgi_vars12492146
Ref: 3ba712492146
Ref: library/wsgiref wsgiref handlers BaseHandler wsgi_multithread12492699
Ref: 3bad12492699
Ref: library/wsgiref wsgiref handlers BaseHandler wsgi_multiprocess12492989
Ref: 3bae12492989
Ref: library/wsgiref wsgiref handlers BaseHandler wsgi_run_once12493281
Ref: 3baf12493281
Ref: library/wsgiref wsgiref handlers BaseHandler os_environ12493523
Ref: 3bb012493523
Ref: library/wsgiref wsgiref handlers BaseHandler server_software12494028
Ref: 3bb112494028
Ref: library/wsgiref wsgiref handlers BaseHandler get_scheme12494647
Ref: 3bb312494647
Ref: library/wsgiref wsgiref handlers BaseHandler setup_environ12495009
Ref: 3bb412495009
Ref: library/wsgiref wsgiref handlers BaseHandler log_exception12495670
Ref: 3bb612495670
Ref: library/wsgiref wsgiref handlers BaseHandler traceback_limit12496171
Ref: 3bb712496171
Ref: library/wsgiref wsgiref handlers BaseHandler error_output12496392
Ref: 3bb812496392
Ref: library/wsgiref wsgiref handlers BaseHandler error_status12497575
Ref: 3bb912497575
Ref: library/wsgiref wsgiref handlers BaseHandler error_headers12497779
Ref: 3bba12497779
Ref: library/wsgiref wsgiref handlers BaseHandler error_body12498070
Ref: 3bbb12498070
Ref: library/wsgiref wsgiref handlers BaseHandler wsgi_file_wrapper12498415
Ref: 3bb512498415
Ref: library/wsgiref wsgiref handlers BaseHandler sendfile12498687
Ref: 3bbc12498687
Ref: library/wsgiref wsgiref handlers BaseHandler origin_server12499264
Ref: 3bb212499264
Ref: library/wsgiref wsgiref handlers BaseHandler http_version12499790
Ref: 3bbd12499790
Ref: library/wsgiref wsgiref handlers read_environ12500011
Ref: 11f812500011
Ref: wsgiref handlers – classes base de servidor/gateway-Footnote-112500932
Ref: wsgiref handlers – classes base de servidor/gateway-Footnote-212500974
Ref: wsgiref handlers – classes base de servidor/gateway-Footnote-312501016
Ref: wsgiref handlers – classes base de servidor/gateway-Footnote-412501058
Ref: wsgiref handlers – classes base de servidor/gateway-Footnote-512501100
Node: wsgiref types – WSGI types for static type checking12501142
Ref: library/wsgiref module-wsgiref types12501377
Ref: 11c12501377
Ref: library/wsgiref wsgiref-types-wsgi-types-for-static-type-checking12501377
Ref: 3bbe12501377
Ref: library/wsgiref wsgiref types StartResponse12501629
Ref: 3b9512501629
Ref: library/wsgiref wsgiref types WSGIEnvironment12501768
Ref: 3b8812501768
Ref: library/wsgiref wsgiref types WSGIApplication12501870
Ref: 3bbf12501870
Ref: library/wsgiref wsgiref types InputStream12501970
Ref: 3bab12501970
Ref: library/wsgiref wsgiref types ErrorStream12502080
Ref: 3bac12502080
Ref: library/wsgiref wsgiref types FileWrapper12502190
Ref: 3b8f12502190
Ref: wsgiref types – WSGI types for static type checking-Footnote-112502431
Ref: wsgiref types – WSGI types for static type checking-Footnote-212502473
Ref: wsgiref types – WSGI types for static type checking-Footnote-312502543
Ref: wsgiref types – WSGI types for static type checking-Footnote-412502585
Ref: wsgiref types – WSGI types for static type checking-Footnote-512502651
Ref: wsgiref types – WSGI types for static type checking-Footnote-612502717
Node: Exemplos<25>12502801
Ref: library/wsgiref examples12502974
Ref: 3bc012502974
Node: urllib — Módulos de manipulação de URL12505806
Ref: library/urllib doc12506055
Ref: 3bc112506055
Ref: library/urllib module-urllib12506055
Ref: 10812506055
Ref: library/urllib translation-repo12506055
Ref: 3bc212506055
Ref: library/urllib urllib-url-handling-modules12506055
Ref: 3bc312506055
Ref: urllib — Módulos de manipulação de URL-Footnote-112506664
Node: urllib request — Biblioteca extensível para abrir URLs12506728
Ref: library/urllib request doc12506966
Ref: 3bc412506966
Ref: library/urllib request module-urllib request12506966
Ref: 10b12506966
Ref: library/urllib request translation-repo12506966
Ref: 3bc512506966
Ref: library/urllib request urllib-request-extensible-library-for-opening-urls12506966
Ref: 3bc612506966
Ref: library/urllib request urllib request urlopen12508156
Ref: 29312508156
Ref: library/urllib request urllib request install_opener12512051
Ref: 3bcd12512051
Ref: library/urllib request urllib request build_opener12512535
Ref: 3bce12512535
Ref: library/urllib request urllib request pathname2url12513653
Ref: 167c12513653
Ref: library/urllib request urllib request url2pathname12514156
Ref: 167d12514156
Ref: library/urllib request urllib request getproxies12514666
Ref: 3bc712514666
Ref: library/urllib request urllib request Request12515817
Ref: 100e12515817
Ref: library/urllib request urllib request OpenerDirector12520326
Ref: 3bcb12520326
Ref: library/urllib request urllib request BaseHandler12520546
Ref: 3bcf12520546
Ref: library/urllib request urllib request HTTPDefaultErrorHandler12520707
Ref: 3bd012520707
Ref: library/urllib request urllib request HTTPRedirectHandler12520901
Ref: 3bd112520901
Ref: library/urllib request urllib request HTTPCookieProcessor12521000
Ref: 3bd612521000
Ref: library/urllib request urllib request ProxyHandler12521107
Ref: 1b4712521107
Ref: library/urllib request urllib request HTTPPasswordMgr12522209
Ref: 3bd712522209
Ref: library/urllib request urllib request HTTPPasswordMgrWithDefaultRealm12522327
Ref: 3bd812522327
Ref: library/urllib request urllib request HTTPPasswordMgrWithPriorAuth12522569
Ref: ec312522569
Ref: library/urllib request urllib request AbstractBasicAuthHandler12522963
Ref: 19fb12522963
Ref: library/urllib request urllib request HTTPBasicAuthHandler12524313
Ref: 3bdb12524313
Ref: library/urllib request urllib request ProxyBasicAuthHandler12524778
Ref: 3bdc12524778
Ref: library/urllib request urllib request AbstractDigestAuthHandler12525119
Ref: 1afa12525119
Ref: library/urllib request urllib request HTTPDigestAuthHandler12525530
Ref: 3bdd12525530
Ref: library/urllib request urllib request ProxyDigestAuthHandler12526394
Ref: 3bde12526394
Ref: library/urllib request urllib request HTTPHandler12526736
Ref: d1d12526736
Ref: library/urllib request urllib request HTTPSHandler12526822
Ref: 126412526822
Ref: library/urllib request urllib request FileHandler12527154
Ref: 3bd312527154
Ref: library/urllib request urllib request DataHandler12527222
Ref: 100d12527222
Ref: library/urllib request urllib request FTPHandler12527322
Ref: 3bd212527322
Ref: library/urllib request urllib request CacheFTPHandler12527385
Ref: 181d12527385
Ref: library/urllib request urllib request UnknownHandler12527515
Ref: 3bcc12527515
Ref: library/urllib request urllib request HTTPErrorProcessor12527606
Ref: 3bd412527606
Ref: urllib request — Biblioteca extensível para abrir URLs-Footnote-112528487
Ref: urllib request — Biblioteca extensível para abrir URLs-Footnote-212528561
Ref: urllib request — Biblioteca extensível para abrir URLs-Footnote-312528612
Ref: urllib request — Biblioteca extensível para abrir URLs-Footnote-412528671
Ref: urllib request — Biblioteca extensível para abrir URLs-Footnote-512528730
Node: Objeto Request12528789
Ref: library/urllib request id112528928
Ref: 3bdf12528928
Ref: library/urllib request request-objects12528928
Ref: 3be012528928
Ref: library/urllib request urllib request Request full_url12529198
Ref: 101012529198
Ref: library/urllib request urllib request Request type12529494
Ref: 3be112529494
Ref: library/urllib request urllib request Request host12529544
Ref: 3be212529544
Ref: library/urllib request urllib request Request origin_req_host12529670
Ref: 3be312529670
Ref: library/urllib request urllib request Request selector12529764
Ref: 3be412529764
Ref: library/urllib request urllib request Request data12529928
Ref: 101112529928
Ref: library/urllib request urllib request Request unverifiable12530192
Ref: 3be512530192
Ref: library/urllib request urllib request Request method12530321
Ref: 100f12530321
Ref: library/urllib request urllib request Request get_method12531038
Ref: 11a812531038
Ref: library/urllib request urllib request Request add_header12531465
Ref: 3bd512531465
Ref: library/urllib request urllib request Request add_unredirected_header12532146
Ref: 3be612532146
Ref: library/urllib request urllib request Request has_header12532273
Ref: 3be712532273
Ref: library/urllib request urllib request Request remove_header12532415
Ref: 101312532415
Ref: library/urllib request urllib request Request get_full_url12532637
Ref: 3be812532637
Ref: library/urllib request urllib request Request set_proxy12532797
Ref: 3be912532797
Ref: library/urllib request urllib request Request get_header12533051
Ref: 3bea12533051
Ref: library/urllib request urllib request Request header_items12533218
Ref: 3beb12533218
Ref: Objeto Request-Footnote-112533579
Node: OpenerDirector Objects12533638
Ref: library/urllib request opener-director-objects12533805
Ref: 3bec12533805
Ref: library/urllib request openerdirector-objects12533805
Ref: 3bed12533805
Ref: library/urllib request urllib request OpenerDirector add_handler12533937
Ref: 3bee12533937
Ref: library/urllib request urllib request OpenerDirector open12535524
Ref: 101212535524
Ref: library/urllib request urllib request OpenerDirector error12536208
Ref: 3bf312536208
Node: BaseHandler Objects12538004
Ref: library/urllib request base-handler-objects12538184
Ref: 3bf612538184
Ref: library/urllib request basehandler-objects12538184
Ref: 3bf712538184
Ref: library/urllib request urllib request BaseHandler add_parent12538424
Ref: 3bf812538424
Ref: library/urllib request urllib request BaseHandler close12538504
Ref: 3bf912538504
Ref: library/urllib request urllib request BaseHandler parent12538881
Ref: 3bfa12538881
Ref: library/urllib request urllib request BaseHandler default_open12539034
Ref: 3bf412539034
Ref: library/urllib request protocol-open12539730
Ref: 3bef12539730
Ref: library/urllib request urllib request BaseHandler unknown_open12540102
Ref: 3bf512540102
Ref: library/urllib request urllib request BaseHandler http_error_default12540515
Ref: 3bfb12540515
Ref: library/urllib request http-error-nnn12541402
Ref: 3bf012541402
Ref: library/urllib request protocol-request12541907
Ref: 3bf112541907
Ref: library/urllib request protocol-response12542324
Ref: 3bf212542324
Node: HTTPRedirectHandler Objects12542916
Ref: library/urllib request http-redirect-handler12543101
Ref: 3bfc12543101
Ref: library/urllib request httpredirecthandler-objects12543101
Ref: 3bfd12543101
Ref: library/urllib request urllib request HTTPRedirectHandler redirect_request12543607
Ref: 3bfe12543607
Ref: library/urllib request urllib request HTTPRedirectHandler http_error_30112544695
Ref: 3bff12544695
Ref: library/urllib request urllib request HTTPRedirectHandler http_error_30212544967
Ref: 3c0012544967
Ref: library/urllib request urllib request HTTPRedirectHandler http_error_30312545147
Ref: 3c0112545147
Ref: library/urllib request urllib request HTTPRedirectHandler http_error_30712545331
Ref: 3c0212545331
Ref: library/urllib request urllib request HTTPRedirectHandler http_error_30812545606
Ref: 3c0312545606
Ref: HTTPRedirectHandler Objects-Footnote-112545951
Ref: HTTPRedirectHandler Objects-Footnote-212546010
Node: HTTPCookieProcessor Objects12546069
Ref: library/urllib request http-cookie-processor12546255
Ref: 3c0412546255
Ref: library/urllib request httpcookieprocessor-objects12546255
Ref: 3c0512546255
Ref: library/urllib request urllib request HTTPCookieProcessor cookiejar12546394
Ref: 3c0612546394
Node: ProxyHandler Objects12546521
Ref: library/urllib request proxy-handler12546703
Ref: 3c0812546703
Ref: library/urllib request proxyhandler-objects12546703
Ref: 3c0912546703
Node: HTTPPasswordMgr Objects12547182
Ref: library/urllib request http-password-mgr12547373
Ref: 3bd912547373
Ref: library/urllib request httppasswordmgr-objects12547373
Ref: 3c0a12547373
Ref: library/urllib request urllib request HTTPPasswordMgr add_password12547559
Ref: 3c0b12547559
Ref: library/urllib request urllib request HTTPPasswordMgr find_user_password12547907
Ref: 196012547907
Node: HTTPPasswordMgrWithPriorAuth Objects12548282
Ref: library/urllib request http-password-mgr-with-prior-auth12548485
Ref: 3bda12548485
Ref: library/urllib request httppasswordmgrwithpriorauth-objects12548485
Ref: 3c0c12548485
Ref: library/urllib request urllib request HTTPPasswordMgrWithPriorAuth add_password12548739
Ref: 3c0d12548739
Ref: library/urllib request urllib request HTTPPasswordMgrWithPriorAuth find_user_password12549154
Ref: 3c0e12549154
Ref: library/urllib request urllib request HTTPPasswordMgrWithPriorAuth update_authenticated12549314
Ref: 3c0f12549314
Ref: library/urllib request urllib request HTTPPasswordMgrWithPriorAuth is_authenticated12549511
Ref: 196112549511
Node: AbstractBasicAuthHandler Objects12549688
Ref: library/urllib request abstract-basic-auth-handler12549896
Ref: 3c1012549896
Ref: library/urllib request abstractbasicauthhandler-objects12549896
Ref: 3c1112549896
Ref: library/urllib request urllib request AbstractBasicAuthHandler http_error_auth_reqed12549981
Ref: 3c1212549981
Node: HTTPBasicAuthHandler Objects12550803
Ref: library/urllib request http-basic-auth-handler12551004
Ref: 3c1312551004
Ref: library/urllib request httpbasicauthhandler-objects12551004
Ref: 3c1412551004
Ref: library/urllib request urllib request HTTPBasicAuthHandler http_error_40112551083
Ref: 3c1512551083
Node: ProxyBasicAuthHandler Objects12551241
Ref: library/urllib request proxy-basic-auth-handler12551443
Ref: 3c1612551443
Ref: library/urllib request proxybasicauthhandler-objects12551443
Ref: 3c1712551443
Ref: library/urllib request urllib request ProxyBasicAuthHandler http_error_40712551524
Ref: 3c1812551524
Node: AbstractDigestAuthHandler Objects12551683
Ref: library/urllib request abstract-digest-auth-handler12551886
Ref: 3c1912551886
Ref: library/urllib request abstractdigestauthhandler-objects12551886
Ref: 3c1a12551886
Ref: library/urllib request urllib request AbstractDigestAuthHandler http_error_auth_reqed12551975
Ref: 3c1b12551975
Node: HTTPDigestAuthHandler Objects12552354
Ref: library/urllib request http-digest-auth-handler12552558
Ref: 3c1c12552558
Ref: library/urllib request httpdigestauthhandler-objects12552558
Ref: 3c1d12552558
Ref: library/urllib request urllib request HTTPDigestAuthHandler http_error_40112552639
Ref: 3c1e12552639
Node: ProxyDigestAuthHandler Objects12552798
Ref: library/urllib request proxy-digest-auth-handler12552988
Ref: 3c1f12552988
Ref: library/urllib request proxydigestauthhandler-objects12552988
Ref: 3c2012552988
Ref: library/urllib request urllib request ProxyDigestAuthHandler http_error_40712553071
Ref: 3c2112553071
Node: HTTPHandler Objects12553231
Ref: library/urllib request http-handler-objects12553412
Ref: 3c2212553412
Ref: library/urllib request httphandler-objects12553412
Ref: 3c2312553412
Ref: library/urllib request urllib request HTTPHandler http_open12553473
Ref: 3c2412553473
Node: Objetos HTTPSHandler12553610
Ref: library/urllib request https-handler-objects12553780
Ref: 3c2512553780
Ref: library/urllib request httpshandler-objects12553780
Ref: 3c2612553780
Ref: library/urllib request urllib request HTTPSHandler https_open12553843
Ref: 3c2712553843
Node: FileHandler Objects12553983
Ref: library/urllib request file-handler-objects12554153
Ref: 3c2812554153
Ref: library/urllib request filehandler-objects12554153
Ref: 3c2912554153
Ref: library/urllib request urllib request FileHandler file_open12554214
Ref: 3c2a12554214
Node: DataHandler Objects12554517
Ref: library/urllib request data-handler-objects12554685
Ref: 3c2b12554685
Ref: library/urllib request datahandler-objects12554685
Ref: 3c2c12554685
Ref: library/urllib request urllib request DataHandler data_open12554746
Ref: 3c2d12554746
Ref: DataHandler Objects-Footnote-112555305
Node: FTPHandler Objects12555364
Ref: library/urllib request ftp-handler-objects12555536
Ref: 3c2e12555536
Ref: library/urllib request ftphandler-objects12555536
Ref: 3c2f12555536
Ref: library/urllib request urllib request FTPHandler ftp_open12555595
Ref: 3c3012555595
Node: CacheFTPHandler Objects12555744
Ref: library/urllib request cacheftp-handler-objects12555919
Ref: 3c3112555919
Ref: library/urllib request cacheftphandler-objects12555919
Ref: 3c3212555919
Ref: library/urllib request urllib request CacheFTPHandler setTimeout12556101
Ref: 3c3312556101
Ref: library/urllib request urllib request CacheFTPHandler setMaxConns12556195
Ref: 3c3412556195
Node: Objetos UnknownHandler12556296
Ref: library/urllib request unknown-handler-objects12556479
Ref: 3c3512556479
Ref: library/urllib request unknownhandler-objects12556479
Ref: 3c3612556479
Ref: library/urllib request urllib request UnknownHandler unknown_open12556546
Ref: 3c3712556546
Node: HTTPErrorProcessor Objects12556638
Ref: library/urllib request http-error-processor-objects12556810
Ref: 3c3812556810
Ref: library/urllib request httperrorprocessor-objects12556810
Ref: 3c3912556810
Ref: library/urllib request urllib request HTTPErrorProcessor http_response12556885
Ref: 3c3a12556885
Ref: library/urllib request urllib request HTTPErrorProcessor https_response12557357
Ref: 3c3b12557357
Node: Exemplos<26>12557521
Ref: library/urllib request examples12557687
Ref: 3c3c12557687
Ref: library/urllib request urllib-request-examples12557687
Ref: 3c3d12557687
Ref: library/urllib request urllib-examples12563587
Ref: 3c3f12563587
Node: Legacy interface12565079
Ref: library/urllib request legacy-interface12565246
Ref: 3c4012565246
Ref: library/urllib request urllib request urlretrieve12565477
Ref: 3c4112565477
Ref: library/urllib request urllib request urlcleanup12568146
Ref: 1b4e12568146
Ref: library/urllib request urllib request URLopener12568306
Ref: 30e12568306
Ref: library/urllib request urllib request URLopener open12569811
Ref: 3c4412569811
Ref: library/urllib request urllib request URLopener open_unknown12570315
Ref: 3c4512570315
Ref: library/urllib request urllib request URLopener retrieve12570428
Ref: 1b6512570428
Ref: library/urllib request urllib request URLopener version12571978
Ref: 3c4312571978
Ref: library/urllib request urllib request FancyURLopener12572298
Ref: 30f12572298
Ref: library/urllib request urllib request FancyURLopener prompt_user_passwd12574043
Ref: 3c4612574043
Ref: Legacy interface-Footnote-112574584
Node: urllib request Restrictions12574643
Ref: library/urllib request urllib-request-restrictions12574789
Ref: 3c4712574789
Node: urllib response — Response classes used by urllib12577357
Ref: library/urllib request module-urllib response12577598
Ref: 10c12577598
Ref: library/urllib request urllib-response-response-classes-used-by-urllib12577598
Ref: 3c4812577598
Ref: library/urllib request urllib response addinfourl12578062
Ref: 3bc812578062
Ref: library/urllib request urllib response addinfourl url12578102
Ref: 3c4912578102
Ref: library/urllib request urllib response addinfourl headers12578233
Ref: 3c4a12578233
Ref: library/urllib request urllib response addinfourl status12578371
Ref: 3c4b12578371
Ref: library/urllib request urllib response addinfourl geturl12578479
Ref: 3c4c12578479
Ref: library/urllib request urllib response addinfourl info12578604
Ref: 3c4d12578604
Ref: library/urllib request urllib response addinfourl code12578731
Ref: 3c4e12578731
Ref: library/urllib request urllib response addinfourl getcode12578855
Ref: 3c4f12578855
Node: urllib parse — Analisa URLs para componentes12578984
Ref: library/urllib parse doc12579235
Ref: 3c5012579235
Ref: library/urllib parse module-urllib parse12579235
Ref: 10a12579235
Ref: library/urllib parse translation-repo12579235
Ref: 3c5112579235
Ref: library/urllib parse urllib-parse-parse-urls-into-components12579235
Ref: 3c5212579235
Ref: urllib parse — Analisa URLs para componentes-Footnote-112581377
Ref: urllib parse — Analisa URLs para componentes-Footnote-212581449
Ref: urllib parse — Analisa URLs para componentes-Footnote-312581508
Node: Análise de URL12581567
Ref: library/urllib parse url-parsing12581701
Ref: 3c5312581701
Ref: library/urllib parse urllib parse urlparse12581914
Ref: 30d12581914
Ref: library/urllib parse urllib parse parse_qs12590282
Ref: 27a12590282
Ref: library/urllib parse urllib parse parse_qsl12592723
Ref: 27912592723
Ref: library/urllib parse urllib parse urlunparse12594985
Ref: 16c112594985
Ref: library/urllib parse urllib parse urlsplit12595448
Ref: d6112595448
Ref: library/urllib parse urllib parse urlunsplit12600364
Ref: 16c012600364
Ref: library/urllib parse urllib parse urljoin12600864
Ref: ec512600864
Ref: library/urllib parse urllib parse urldefrag12602628
Ref: 128912602628
Ref: library/urllib parse urllib parse unwrap12604076
Ref: 3c5612604076
Ref: Análise de URL-Footnote-112604464
Ref: Análise de URL-Footnote-212604523
Ref: Análise de URL-Footnote-312604582
Ref: Análise de URL-Footnote-412604641
Ref: Análise de URL-Footnote-512604703
Node: Segurança ao analisar URLs12604762
Ref: library/urllib parse id112604942
Ref: 3c5712604942
Ref: library/urllib parse url-parsing-security12604942
Ref: 3c5512604942
Ref: Segurança ao analisar URLs-Footnote-112606633
Ref: Segurança ao analisar URLs-Footnote-212606695
Node: Analisando bytes codificados em ASCII12606754
Ref: library/urllib parse id212606943
Ref: 3c5812606943
Ref: library/urllib parse parsing-ascii-encoded-bytes12606943
Ref: 128b12606943
Node: Structured Parse Results12609285
Ref: library/urllib parse structured-parse-results12609458
Ref: 3c5912609458
Ref: library/urllib parse urlparse-result-object12609458
Ref: 3c5412609458
Ref: library/urllib parse urllib parse urllib parse SplitResult geturl12609875
Ref: 3c5a12609875
Ref: library/urllib parse urllib parse DefragResult12611000
Ref: 3c5b12611000
Ref: library/urllib parse urllib parse ParseResult12611267
Ref: 3c5d12611267
Ref: library/urllib parse urllib parse SplitResult12611539
Ref: 3c5f12611539
Ref: library/urllib parse urllib parse DefragResultBytes12611945
Ref: 3c5c12611945
Ref: library/urllib parse urllib parse ParseResultBytes12612214
Ref: 3c5e12612214
Ref: library/urllib parse urllib parse SplitResultBytes12612521
Ref: 3c6012612521
Node: URL Quoting12612820
Ref: library/urllib parse url-quoting12612947
Ref: 3c6112612947
Ref: library/urllib parse urllib parse quote12613350
Ref: bbb12613350
Ref: library/urllib parse urllib parse quote_plus12614726
Ref: 128a12614726
Ref: library/urllib parse urllib parse quote_from_bytes12615219
Ref: 18da12615219
Ref: library/urllib parse urllib parse unquote12615512
Ref: 188312615512
Ref: library/urllib parse urllib parse unquote_plus12616294
Ref: 3c6212616294
Ref: library/urllib parse urllib parse unquote_to_bytes12616634
Ref: 188412616634
Ref: library/urllib parse urllib parse urlencode12617067
Ref: ec412617067
Ref: URL Quoting-Footnote-112620939
Ref: URL Quoting-Footnote-212620998
Ref: URL Quoting-Footnote-312621057
Ref: URL Quoting-Footnote-412621094
Ref: URL Quoting-Footnote-512621153
Ref: URL Quoting-Footnote-612621212
Ref: URL Quoting-Footnote-712621271
Ref: URL Quoting-Footnote-812621330
Ref: URL Quoting-Footnote-912621389
Node: urllib error — Classes de exceção levantadas por urllib request12621448
Ref: library/urllib error doc12621706
Ref: 3c6312621706
Ref: library/urllib error module-urllib error12621706
Ref: 10912621706
Ref: library/urllib error translation-repo12621706
Ref: 3c6412621706
Ref: library/urllib error urllib-error-exception-classes-raised-by-urllib-request12621706
Ref: 3c6512621706
Ref: library/urllib error urllib error URLError12622239
Ref: 3bca12622239
Ref: library/urllib error urllib error URLError reason12622431
Ref: 3c6612622431
Ref: library/urllib error urllib error HTTPError12622726
Ref: 101412622726
Ref: library/urllib error urllib error HTTPError url12623137
Ref: 3c6712623137
Ref: library/urllib error urllib error HTTPError code12623255
Ref: 3c6812623255
Ref: library/urllib error urllib error HTTPError reason12623544
Ref: 3c6a12623544
Ref: library/urllib error urllib error HTTPError headers12623684
Ref: 101512623684
Ref: library/urllib error urllib error HTTPError fp12623911
Ref: 3c6b12623911
Ref: library/urllib error urllib error ContentTooShortError12624028
Ref: 3c4212624028
Ref: library/urllib error urllib error ContentTooShortError content12624306
Ref: 3c6c12624306
Ref: urllib error — Classes de exceção levantadas por urllib request-Footnote-112624427
Ref: urllib error — Classes de exceção levantadas por urllib request-Footnote-212624499
Node: urllib robotparser — Analisador sintático de robots txt12624558
Ref: library/urllib robotparser doc12624792
Ref: 3c6d12624792
Ref: library/urllib robotparser module-urllib robotparser12624792
Ref: 10d12624792
Ref: library/urllib robotparser translation-repo12624792
Ref: 3c6e12624792
Ref: library/urllib robotparser urllib-robotparser-parser-for-robots-txt12624792
Ref: 3c6f12624792
Ref: library/urllib robotparser urllib robotparser RobotFileParser12625379
Ref: d1f12625379
Ref: library/urllib robotparser urllib robotparser RobotFileParser set_url12625560
Ref: 3c7012625560
Ref: library/urllib robotparser urllib robotparser RobotFileParser read12625658
Ref: 3c7112625658
Ref: library/urllib robotparser urllib robotparser RobotFileParser parse12625776
Ref: 1c1c12625776
Ref: library/urllib robotparser urllib robotparser RobotFileParser can_fetch12625851
Ref: 3c7212625851
Ref: library/urllib robotparser urllib robotparser RobotFileParser mtime12626073
Ref: 3c7312626073
Ref: library/urllib robotparser urllib robotparser RobotFileParser modified12626347
Ref: 3c7412626347
Ref: library/urllib robotparser urllib robotparser RobotFileParser crawl_delay12626495
Ref: 3c7512626495
Ref: library/urllib robotparser urllib robotparser RobotFileParser request_rate12626911
Ref: 3c7612626911
Ref: library/urllib robotparser urllib robotparser RobotFileParser site_maps12627384
Ref: 1bb912627384
Ref: urllib robotparser — Analisador sintático de robots txt-Footnote-112628310
Node: http — módulos HTTP12628389
Ref: library/http doc12628592
Ref: 3c7712628592
Ref: library/http http-http-modules12628592
Ref: 3c7812628592
Ref: library/http module-http12628592
Ref: 6e12628592
Ref: library/http translation-repo12628592
Ref: 3c7912628592
Ref: library/http http HTTPStatus12629459
Ref: 90612629459
Ref: http — módulos HTTP-Footnote-112630250
Node: códigos de status HTTP12630323
Ref: library/http http-status-codes12630439
Ref: 3c7a12630439
Ref: library/http id112630439
Ref: 3c7b12630439
Ref: códigos de status HTTP-Footnote-112645063
Ref: códigos de status HTTP-Footnote-212645147
Ref: códigos de status HTTP-Footnote-312645206
Ref: códigos de status HTTP-Footnote-412645265
Ref: códigos de status HTTP-Footnote-512645324
Ref: códigos de status HTTP-Footnote-612645383
Ref: códigos de status HTTP-Footnote-712645442
Ref: códigos de status HTTP-Footnote-812645501
Ref: códigos de status HTTP-Footnote-912645560
Ref: códigos de status HTTP-Footnote-1012645619
Ref: códigos de status HTTP-Footnote-1112645679
Ref: códigos de status HTTP-Footnote-1212645739
Ref: códigos de status HTTP-Footnote-1312645799
Ref: códigos de status HTTP-Footnote-1412645859
Ref: códigos de status HTTP-Footnote-1512645919
Ref: códigos de status HTTP-Footnote-1612645979
Ref: códigos de status HTTP-Footnote-1712646039
Ref: códigos de status HTTP-Footnote-1812646099
Ref: códigos de status HTTP-Footnote-1912646159
Ref: códigos de status HTTP-Footnote-2012646219
Ref: códigos de status HTTP-Footnote-2112646279
Ref: códigos de status HTTP-Footnote-2212646339
Ref: códigos de status HTTP-Footnote-2312646399
Ref: códigos de status HTTP-Footnote-2412646459
Ref: códigos de status HTTP-Footnote-2512646519
Ref: códigos de status HTTP-Footnote-2612646579
Ref: códigos de status HTTP-Footnote-2712646639
Ref: códigos de status HTTP-Footnote-2812646699
Ref: códigos de status HTTP-Footnote-2912646759
Ref: códigos de status HTTP-Footnote-3012646819
Ref: códigos de status HTTP-Footnote-3112646879
Ref: códigos de status HTTP-Footnote-3212646939
Ref: códigos de status HTTP-Footnote-3312646999
Ref: códigos de status HTTP-Footnote-3412647059
Ref: códigos de status HTTP-Footnote-3512647119
Ref: códigos de status HTTP-Footnote-3612647179
Ref: códigos de status HTTP-Footnote-3712647239
Ref: códigos de status HTTP-Footnote-3812647299
Ref: códigos de status HTTP-Footnote-3912647359
Ref: códigos de status HTTP-Footnote-4012647419
Ref: códigos de status HTTP-Footnote-4112647479
Ref: códigos de status HTTP-Footnote-4212647539
Ref: códigos de status HTTP-Footnote-4312647599
Ref: códigos de status HTTP-Footnote-4412647659
Ref: códigos de status HTTP-Footnote-4512647719
Ref: códigos de status HTTP-Footnote-4612647779
Ref: códigos de status HTTP-Footnote-4712647839
Ref: códigos de status HTTP-Footnote-4812647899
Ref: códigos de status HTTP-Footnote-4912647959
Ref: códigos de status HTTP-Footnote-5012648019
Ref: códigos de status HTTP-Footnote-5112648079
Ref: códigos de status HTTP-Footnote-5212648139
Ref: códigos de status HTTP-Footnote-5312648199
Ref: códigos de status HTTP-Footnote-5412648259
Ref: códigos de status HTTP-Footnote-5512648319
Ref: códigos de status HTTP-Footnote-5612648379
Ref: códigos de status HTTP-Footnote-5712648439
Ref: códigos de status HTTP-Footnote-5812648499
Ref: códigos de status HTTP-Footnote-5912648559
Ref: códigos de status HTTP-Footnote-6012648619
Ref: códigos de status HTTP-Footnote-6112648679
Ref: códigos de status HTTP-Footnote-6212648739
Ref: códigos de status HTTP-Footnote-6312648799
Node: Categorias de HTTP status12648859
Ref: library/http http-status-category12648997
Ref: 3c7c12648997
Ref: library/http http HTTPMethod12650623
Ref: 3c7d12650623
Ref: Categorias de HTTP status-Footnote-112651458
Ref: Categorias de HTTP status-Footnote-212651517
Ref: Categorias de HTTP status-Footnote-312651576
Ref: Categorias de HTTP status-Footnote-412651635
Ref: Categorias de HTTP status-Footnote-512651694
Node: Métodos HTTP12651753
Ref: library/http http-methods12651859
Ref: 3c7e12651859
Ref: library/http id212651859
Ref: 3c7f12651859
Ref: Métodos HTTP-Footnote-112654251
Ref: Métodos HTTP-Footnote-212654324
Ref: Métodos HTTP-Footnote-312654383
Ref: Métodos HTTP-Footnote-412654442
Ref: Métodos HTTP-Footnote-512654501
Ref: Métodos HTTP-Footnote-612654560
Ref: Métodos HTTP-Footnote-712654619
Ref: Métodos HTTP-Footnote-812654678
Ref: Métodos HTTP-Footnote-912654737
Ref: Métodos HTTP-Footnote-1012654796
Node: http client — HTTP protocol client12654856
Ref: library/http client doc12655031
Ref: 3c8012655031
Ref: library/http client http-client-http-protocol-client12655031
Ref: 3c8112655031
Ref: library/http client module-http client12655031
Ref: 6f12655031
Ref: library/http client translation-repo12655031
Ref: 3c8212655031
Ref: library/http client http client HTTPConnection12655914
Ref: b5312655914
Ref: library/http client http client HTTPSConnection12657512
Ref: b5412657512
Ref: library/http client http client HTTPResponse12659279
Ref: 110d12659279
Ref: library/http client http client parse_headers12659696
Ref: 1bc112659696
Ref: library/http client http client HTTPException12660727
Ref: 3c8612660727
Ref: library/http client http client NotConnected12660874
Ref: 3c8712660874
Ref: library/http client http client InvalidURL12660965
Ref: 3c8812660965
Ref: library/http client http client UnknownProtocol12661130
Ref: 3c8912661130
Ref: library/http client http client UnknownTransferEncoding12661224
Ref: 3c8a12661224
Ref: library/http client http client UnimplementedFileMode12661326
Ref: 3c8b12661326
Ref: library/http client http client IncompleteRead12661426
Ref: 3c8c12661426
Ref: library/http client http client ImproperConnectionState12661519
Ref: 3c8d12661519
Ref: library/http client http client CannotSendRequest12661621
Ref: 3c8e12661621
Ref: library/http client http client CannotSendHeader12661727
Ref: 3c8f12661727
Ref: library/http client http client ResponseNotReady12661832
Ref: 3c9012661832
Ref: library/http client http client BadStatusLine12661937
Ref: 3c9112661937
Ref: library/http client http client LineTooLong12662122
Ref: 3c9212662122
Ref: library/http client http client RemoteDisconnected12662307
Ref: e3512662307
Ref: library/http client http client HTTP_PORT12662810
Ref: 3c9312662810
Ref: library/http client http client HTTPS_PORT12662906
Ref: 3c9412662906
Ref: library/http client http client responses12663005
Ref: 3c9512663005
Ref: http client — HTTP protocol client-Footnote-112663509
Ref: http client — HTTP protocol client-Footnote-212663580
Ref: http client — HTTP protocol client-Footnote-312663631
Node: Objetos de HTTPConnection12663690
Ref: library/http client httpconnection-objects12663817
Ref: 3c9612663817
Ref: library/http client id112663817
Ref: 3c9712663817
Ref: library/http client http client HTTPConnection request12663961
Ref: cc912663961
Ref: library/http client http client HTTPConnection getresponse12667885
Ref: e3412667885
Ref: library/http client http client HTTPConnection set_debuglevel12668478
Ref: 3c9912668478
Ref: library/http client http client HTTPConnection set_tunnel12668888
Ref: 126912668888
Ref: library/http client http client HTTPConnection get_proxy_response_headers12670573
Ref: 17f512670573
Ref: library/http client http client HTTPConnection connect12670860
Ref: 3c9a12670860
Ref: library/http client http client HTTPConnection close12671226
Ref: 3c9812671226
Ref: library/http client http client HTTPConnection blocksize12671306
Ref: 3c9b12671306
Ref: library/http client http client HTTPConnection putrequest12671602
Ref: 3c9c12671602
Ref: library/http client http client HTTPConnection putheader12672152
Ref: 3c9d12672152
Ref: library/http client http client HTTPConnection endheaders12672488
Ref: cca12672488
Ref: library/http client http client HTTPConnection send12673861
Ref: 3c9e12673861
Ref: Objetos de HTTPConnection-Footnote-112674240
Ref: Objetos de HTTPConnection-Footnote-212674313
Ref: Objetos de HTTPConnection-Footnote-312674386
Ref: Objetos de HTTPConnection-Footnote-412674459
Ref: Objetos de HTTPConnection-Footnote-512674527
Ref: Objetos de HTTPConnection-Footnote-612674585
Node: Objetos HTTPResponse12674644
Ref: library/http client httpresponse-objects12674792
Ref: 3c9f12674792
Ref: library/http client id212674792
Ref: 3ca012674792
Ref: library/http client http client HTTPResponse read12675208
Ref: 166912675208
Ref: library/http client http client HTTPResponse readinto12675322
Ref: 110e12675322
Ref: library/http client http client HTTPResponse getheader12675517
Ref: 3ca112675517
Ref: library/http client http client HTTPResponse getheaders12675905
Ref: 3ca212675905
Ref: library/http client http client HTTPResponse fileno12675993
Ref: 3ca312675993
Ref: library/http client http client HTTPResponse msg12676086
Ref: 3c8412676086
Ref: library/http client http client HTTPResponse version12676304
Ref: 3ca412676304
Ref: library/http client http client HTTPResponse url12676424
Ref: 3ca512676424
Ref: library/http client http client HTTPResponse headers12676553
Ref: 3ca612676553
Ref: library/http client http client HTTPResponse status12676691
Ref: 3ca712676691
Ref: library/http client http client HTTPResponse reason12676764
Ref: 3bc912676764
Ref: library/http client http client HTTPResponse debuglevel12676839
Ref: 3ca812676839
Ref: library/http client http client HTTPResponse closed12677033
Ref: 3ca912677033
Ref: library/http client http client HTTPResponse geturl12677113
Ref: 3caa12677113
Ref: library/http client http client HTTPResponse info12677236
Ref: 3cab12677236
Ref: library/http client http client HTTPResponse getcode12677361
Ref: 3cac12677361
Node: Exemplos<27>12677488
Ref: library/http client examples12677630
Ref: 3cad12677630
Node: HTTPMessage Objects12680518
Ref: library/http client httpmessage-objects12680631
Ref: 3cae12680631
Ref: library/http client id312680631
Ref: 3caf12680631
Ref: library/http client http client HTTPMessage12680692
Ref: 3c8312680692
Node: ftplib — FTP protocol client12680914
Ref: library/ftplib doc12681103
Ref: 3cb012681103
Ref: library/ftplib ftplib-ftp-protocol-client12681103
Ref: 3cb112681103
Ref: library/ftplib module-ftplib12681103
Ref: 5e12681103
Ref: library/ftplib translation-repo12681103
Ref: 3cb212681103
Ref: ftplib — FTP protocol client-Footnote-112682973
Ref: ftplib — FTP protocol client-Footnote-212683039
Ref: ftplib — FTP protocol client-Footnote-312683097
Node: Referência<6>12683156
Ref: library/ftplib ftplib-reference12683237
Ref: 3cb312683237
Ref: library/ftplib reference12683237
Ref: 3cb412683237
Node: FTP objects12683348
Ref: library/ftplib ftp-objects12683434
Ref: 3cb512683434
Ref: library/ftplib id112683434
Ref: 3cb612683434
Ref: library/ftplib ftplib FTP12683479
Ref: 90012683479
Ref: library/ftplib ftplib FTP set_debuglevel12686375
Ref: 3cb812686375
Ref: library/ftplib ftplib FTP connect12686933
Ref: 3cb712686933
Ref: library/ftplib ftplib FTP getwelcome12688336
Ref: 3cb912688336
Ref: library/ftplib ftplib FTP login12688593
Ref: 3cba12688593
Ref: library/ftplib ftplib FTP abort12689634
Ref: 3cbb12689634
Ref: library/ftplib ftplib FTP sendcmd12689784
Ref: 3cbc12689784
Ref: library/ftplib ftplib FTP voidcmd12690040
Ref: 3cbd12690040
Ref: library/ftplib ftplib FTP retrbinary12690456
Ref: 3cbf12690456
Ref: library/ftplib ftplib FTP retrlines12691517
Ref: 3cc112691517
Ref: library/ftplib ftplib FTP set_pasv12692255
Ref: 3cc212692255
Ref: library/ftplib ftplib FTP storbinary12692418
Ref: 134e12692418
Ref: library/ftplib ftplib FTP storlines12693594
Ref: 3cc312693594
Ref: library/ftplib ftplib FTP transfercmd12694093
Ref: 3cc012694093
Ref: library/ftplib ftplib FTP ntransfercmd12695338
Ref: 3cc412695338
Ref: library/ftplib ftplib FTP mlsd12695715
Ref: 110112695715
Ref: library/ftplib ftplib FTP nlst12696476
Ref: 110212696476
Ref: library/ftplib ftplib FTP dir12696919
Ref: 110312696919
Ref: library/ftplib ftplib FTP rename12697617
Ref: 3cc512697617
Ref: library/ftplib ftplib FTP delete12697723
Ref: 3cc612697723
Ref: library/ftplib ftplib FTP cwd12698008
Ref: 3cc812698008
Ref: library/ftplib ftplib FTP mkd12698094
Ref: 3cc912698094
Ref: library/ftplib ftplib FTP pwd12698177
Ref: 3cca12698177
Ref: library/ftplib ftplib FTP rmd12698274
Ref: 3ccb12698274
Ref: library/ftplib ftplib FTP size12698370
Ref: 3ccc12698370
Ref: library/ftplib ftplib FTP quit12698722
Ref: 3ccd12698722
Ref: library/ftplib ftplib FTP close12699163
Ref: 3cce12699163
Ref: FTP objects-Footnote-112699665
Ref: FTP objects-Footnote-212699723
Ref: FTP objects-Footnote-312699782
Ref: FTP objects-Footnote-412699840
Node: FTP_TLS objects12699899
Ref: library/ftplib ftp-tls-objects12700010
Ref: 3ccf12700010
Ref: library/ftplib ftplib FTP_TLS12700063
Ref: 90112700063
Ref: library/ftplib ftplib FTP_TLS ssl_version12703783
Ref: 3cd112703783
Ref: library/ftplib ftplib FTP_TLS auth12703907
Ref: 3cd212703907
Ref: library/ftplib ftplib FTP_TLS ccc12704299
Ref: 110012704299
Ref: library/ftplib ftplib FTP_TLS prot_p12704564
Ref: 3cd012704564
Ref: library/ftplib ftplib FTP_TLS prot_c12704635
Ref: 3cd312704635
Ref: FTP_TLS objects-Footnote-112704746
Ref: FTP_TLS objects-Footnote-212704805
Ref: FTP_TLS objects-Footnote-312704863
Node: Module variables12704922
Ref: library/ftplib module-variables12705013
Ref: 3cd412705013
Ref: library/ftplib ftplib error_reply12705068
Ref: 3cbe12705068
Ref: library/ftplib ftplib error_temp12705185
Ref: 3cd512705185
Ref: library/ftplib ftplib error_perm12705348
Ref: 3cc712705348
Ref: library/ftplib ftplib error_proto12705511
Ref: 3cd612705511
Ref: library/ftplib ftplib all_errors12705742
Ref: 3cd712705742
Node: poplib — Cliente de protocolo POP312706329
Ref: library/poplib doc12706515
Ref: 3cd812706515
Ref: library/poplib module-poplib12706515
Ref: ac12706515
Ref: library/poplib poplib-pop3-protocol-client12706515
Ref: 3cd912706515
Ref: library/poplib translation-repo12706515
Ref: 3cda12706515
Ref: library/poplib poplib POP312707889
Ref: 92a12707889
Ref: library/poplib poplib POP3_SSL12708871
Ref: 92b12708871
Ref: library/poplib poplib error_proto12710539
Ref: 11db12710539
Ref: poplib — Cliente de protocolo POP3-Footnote-112711198
Ref: poplib — Cliente de protocolo POP3-Footnote-212711264
Ref: poplib — Cliente de protocolo POP3-Footnote-312711323
Ref: poplib — Cliente de protocolo POP3-Footnote-412711382
Ref: poplib — Cliente de protocolo POP3-Footnote-512711441
Node: Objetos POP312711503
Ref: library/poplib id112711609
Ref: 3cdb12711609
Ref: library/poplib pop3-objects12711609
Ref: 3cdc12711609
Ref: library/poplib poplib POP3 set_debuglevel12711840
Ref: 3cdd12711840
Ref: library/poplib poplib POP3 getwelcome12712306
Ref: 3cde12712306
Ref: library/poplib poplib POP3 capa12712398
Ref: fb012712398
Ref: library/poplib poplib POP3 user12712595
Ref: 3cdf12712595
Ref: library/poplib poplib POP3 pass_12712714
Ref: 3ce012712714
Ref: library/poplib poplib POP3 apop12712910
Ref: 3ce112712910
Ref: library/poplib poplib POP3 rpop12713029
Ref: 3ce212713029
Ref: library/poplib poplib POP3 stat12713149
Ref: 3ce312713149
Ref: library/poplib poplib POP3 list12713282
Ref: 3ce412713282
Ref: library/poplib poplib POP3 retr12713475
Ref: 3ce512713475
Ref: library/poplib poplib POP3 dele12713639
Ref: 3ce612713639
Ref: library/poplib poplib POP3 rset12713918
Ref: 3ce712713918
Ref: library/poplib poplib POP3 noop12713994
Ref: 3ce812713994
Ref: library/poplib poplib POP3 quit12714071
Ref: 11da12714071
Ref: library/poplib poplib POP3 top12714162
Ref: 3ce912714162
Ref: library/poplib poplib POP3 uidl12714700
Ref: 3cea12714700
Ref: library/poplib poplib POP3 utf812714985
Ref: e7712714985
Ref: library/poplib poplib POP3 stls12715201
Ref: fb112715201
Ref: Objetos POP3-Footnote-112716014
Ref: Objetos POP3-Footnote-212716073
Ref: Objetos POP3-Footnote-312716132
Node: Exemplo POP312716191
Ref: library/poplib id212716297
Ref: 3ceb12716297
Ref: library/poplib pop3-example12716297
Ref: 3cec12716297
Node: imaplib — IMAP4 protocol client12716809
Ref: library/imaplib doc12717002
Ref: 3ced12717002
Ref: library/imaplib imaplib-imap4-protocol-client12717002
Ref: 3cee12717002
Ref: library/imaplib module-imaplib12717002
Ref: 7412717002
Ref: library/imaplib translation-repo12717002
Ref: 3cef12717002
Ref: library/imaplib imaplib IMAP412717847
Ref: 90912717847
Ref: library/imaplib imaplib IMAP4 error12719075
Ref: 15fa12719075
Ref: library/imaplib imaplib IMAP4 abort12719218
Ref: 3cf012719218
Ref: library/imaplib imaplib IMAP4 readonly12719480
Ref: 3cf112719480
Ref: library/imaplib imaplib IMAP4_SSL12719837
Ref: 90a12719837
Ref: library/imaplib imaplib IMAP4_stream12721303
Ref: 90c12721303
Ref: library/imaplib imaplib Internaldate2tuple12721574
Ref: 3cf212721574
Ref: library/imaplib imaplib Int2AP12721824
Ref: 3cf312721824
Ref: library/imaplib imaplib ParseFlags12721972
Ref: 3cf412721972
Ref: library/imaplib imaplib Time2Internaldate12722093
Ref: 3cf512722093
Ref: imaplib — IMAP4 protocol client-Footnote-112723441
Ref: imaplib — IMAP4 protocol client-Footnote-212723508
Ref: imaplib — IMAP4 protocol client-Footnote-312723567
Node: Objetos IMAP412723626
Ref: library/imaplib id112723731
Ref: 3cf612723731
Ref: library/imaplib imap4-objects12723731
Ref: 3cf712723731
Ref: library/imaplib imaplib IMAP4 append12725233
Ref: 3cf812725233
Ref: library/imaplib imaplib IMAP4 authenticate12725338
Ref: 3cf912725338
Ref: library/imaplib imaplib IMAP4 check12726176
Ref: 3cfa12726176
Ref: library/imaplib imaplib IMAP4 close12726241
Ref: 90e12726241
Ref: library/imaplib imaplib IMAP4 copy12726427
Ref: 3cfb12726427
Ref: library/imaplib imaplib IMAP4 create12726540
Ref: 3cfc12726540
Ref: library/imaplib imaplib IMAP4 delete12726619
Ref: 3cfd12726619
Ref: library/imaplib imaplib IMAP4 deleteacl12726698
Ref: 3cfe12726698
Ref: library/imaplib imaplib IMAP4 enable12726809
Ref: e3912726809
Ref: library/imaplib imaplib IMAP4 expunge12727134
Ref: 3cff12727134
Ref: library/imaplib imaplib IMAP4 fetch12727383
Ref: 3d0012727383
Ref: library/imaplib imaplib IMAP4 getacl12727664
Ref: 3d0112727664
Ref: library/imaplib imaplib IMAP4 getannotation12727819
Ref: 3d0212727819
Ref: library/imaplib imaplib IMAP4 getquota12728021
Ref: 3d0312728021
Ref: library/imaplib imaplib IMAP4 getquotaroot12728196
Ref: 3d0412728196
Ref: library/imaplib imaplib IMAP4 list12728385
Ref: 3d0512728385
Ref: library/imaplib imaplib IMAP4 login12728655
Ref: 3d0612728655
Ref: library/imaplib imaplib IMAP4 login_cram_md512728789
Ref: 15f912728789
Ref: library/imaplib imaplib IMAP4 logout12729160
Ref: a9d12729160
Ref: library/imaplib imaplib IMAP4 lsub12729359
Ref: 3d0712729359
Ref: library/imaplib imaplib IMAP4 myrights12729650
Ref: 3d0812729650
Ref: library/imaplib imaplib IMAP4 namespace12729770
Ref: 3d0912729770
Ref: library/imaplib imaplib IMAP4 noop12729860
Ref: 3d0a12729860
Ref: library/imaplib imaplib IMAP4 open12729928
Ref: 90b12729928
Ref: library/imaplib imaplib IMAP4 partial12730885
Ref: 3d0f12730885
Ref: library/imaplib imaplib IMAP4 proxyauth12731063
Ref: 3d1012731063
Ref: library/imaplib imaplib IMAP4 read12731216
Ref: 3d0b12731216
Ref: library/imaplib imaplib IMAP4 readline12731333
Ref: 3d0c12731333
Ref: library/imaplib imaplib IMAP4 recent12731446
Ref: 3d1112731446
Ref: library/imaplib imaplib IMAP4 rename12731602
Ref: 3d1212731602
Ref: library/imaplib imaplib IMAP4 response12731711
Ref: 3d1312731711
Ref: library/imaplib imaplib IMAP4 search12731870
Ref: 3d1412731870
Ref: library/imaplib imaplib IMAP4 select12732546
Ref: 3d1512732546
Ref: library/imaplib imaplib IMAP4 send12732842
Ref: 3d0d12732842
Ref: library/imaplib imaplib IMAP4 setacl12733066
Ref: 3d1612733066
Ref: library/imaplib imaplib IMAP4 setannotation12733230
Ref: 3d1712733230
Ref: library/imaplib imaplib IMAP4 setquota12733420
Ref: 3d1812733420
Ref: library/imaplib imaplib IMAP4 shutdown12733595
Ref: 3d0e12733595
Ref: library/imaplib imaplib IMAP4 socket12733777
Ref: 3d1912733777
Ref: library/imaplib imaplib IMAP4 sort12733864
Ref: 3d1a12733864
Ref: library/imaplib imaplib IMAP4 starttls12734809
Ref: 126612734809
Ref: library/imaplib imaplib IMAP4 status12735351
Ref: 3d1b12735351
Ref: library/imaplib imaplib IMAP4 store12735448
Ref: 3d1c12735448
Ref: library/imaplib imaplib IMAP4 subscribe12736650
Ref: 3d1d12736650
Ref: library/imaplib imaplib IMAP4 thread12736722
Ref: 3d1e12736722
Ref: library/imaplib imaplib IMAP4 uid12737852
Ref: 3d1f12737852
Ref: library/imaplib imaplib IMAP4 unsubscribe12738171
Ref: 3d2012738171
Ref: library/imaplib imaplib IMAP4 unselect12738249
Ref: 90d12738249
Ref: library/imaplib imaplib IMAP4 xatom12738654
Ref: 3d2112738654
Ref: library/imaplib imaplib IMAP4 PROTOCOL_VERSION12738859
Ref: 3d2212738859
Ref: library/imaplib imaplib IMAP4 debug12738993
Ref: 3d2312738993
Ref: library/imaplib imaplib IMAP4 utf8_enabled12739195
Ref: e3a12739195
Ref: Objetos IMAP4-Footnote-112739479
Ref: Objetos IMAP4-Footnote-212739538
Ref: Objetos IMAP4-Footnote-312739597
Ref: Objetos IMAP4-Footnote-412739656
Ref: Objetos IMAP4-Footnote-512739715
Ref: Objetos IMAP4-Footnote-612739774
Node: Exemplo IMAP412739833
Ref: library/imaplib id212739938
Ref: 3d2412739938
Ref: library/imaplib imap4-example12739938
Ref: 3d2512739938
Node: smtplib — Cliente de protocolo SMTP12740444
Ref: library/smtplib doc12740640
Ref: 3d2612740640
Ref: library/smtplib module-smtplib12740640
Ref: ca12740640
Ref: library/smtplib smtplib-smtp-protocol-client12740640
Ref: 3d2712740640
Ref: library/smtplib translation-repo12740640
Ref: 3d2812740640
Ref: library/smtplib smtplib SMTP12741355
Ref: 93412741355
Ref: library/smtplib smtplib SMTP_SSL12743983
Ref: 93512743983
Ref: library/smtplib smtplib LMTP12745526
Ref: 93612745526
Ref: library/smtplib smtplib SMTPException12746465
Ref: fd512746465
Ref: library/smtplib smtplib SMTPServerDisconnected12746722
Ref: 3d2b12746722
Ref: library/smtplib smtplib SMTPResponseException12746950
Ref: 3d2c12746950
Ref: library/smtplib smtplib SMTPResponseException smtp_code12747168
Ref: 3d2d12747168
Ref: library/smtplib smtplib SMTPResponseException smtp_error12747228
Ref: 3d2e12747228
Ref: library/smtplib smtplib SMTPSenderRefused12747289
Ref: 3d2f12747289
Ref: library/smtplib smtplib SMTPRecipientsRefused12747530
Ref: 3d3012747530
Ref: library/smtplib smtplib SMTPRecipientsRefused recipients12747615
Ref: 3d3112747615
Ref: library/smtplib smtplib SMTPDataError12747800
Ref: 3d3212747800
Ref: library/smtplib smtplib SMTPConnectError12747897
Ref: 3d2912747897
Ref: library/smtplib smtplib SMTPHeloError12748004
Ref: 3d3312748004
Ref: library/smtplib smtplib SMTPNotSupportedError12748092
Ref: 1b4012748092
Ref: library/smtplib smtplib SMTPAuthenticationError12748241
Ref: 3d3412748241
Ref: smtplib — Cliente de protocolo SMTP-Footnote-112748969
Ref: smtplib — Cliente de protocolo SMTP-Footnote-212749036
Ref: smtplib — Cliente de protocolo SMTP-Footnote-312749094
Ref: smtplib — Cliente de protocolo SMTP-Footnote-412749153
Ref: smtplib — Cliente de protocolo SMTP-Footnote-512749212
Ref: smtplib — Cliente de protocolo SMTP-Footnote-612749270
Node: Objetos SMTP12749329
Ref: library/smtplib id112749436
Ref: 3d3512749436
Ref: library/smtplib smtp-objects12749436
Ref: 3d3612749436
Ref: library/smtplib smtplib SMTP set_debuglevel12749540
Ref: e8712749540
Ref: library/smtplib smtplib SMTP docmd12749911
Ref: 3d3712749911
Ref: library/smtplib smtplib SMTP connect12750562
Ref: 1b4112750562
Ref: library/smtplib smtplib SMTP helo12751258
Ref: 3d3812751258
Ref: library/smtplib smtplib SMTP ehlo12751726
Ref: 3d3a12751726
Ref: library/smtplib smtplib SMTP ehlo_or_helo_if_needed12752653
Ref: 3d3f12752653
Ref: library/smtplib smtplib SMTP has_extn12752996
Ref: 3d3b12752996
Ref: library/smtplib smtplib SMTP verify12753192
Ref: 3d4012753192
Ref: library/smtplib smtplib SMTP login12753623
Ref: 3d4112753623
Ref: library/smtplib smtplib SMTP auth12755206
Ref: e8612755206
Ref: library/smtplib smtplib SMTP starttls12757463
Ref: 117712757463
Ref: library/smtplib smtplib SMTP sendmail12758980
Ref: e8812758980
Ref: library/smtplib smtplib SMTP send_message12762423
Ref: e8912762423
Ref: library/smtplib smtplib SMTP quit12764513
Ref: 3d2a12764513
Ref: library/smtplib smtplib SMTP helo_resp12765003
Ref: 3d3912765003
Ref: library/smtplib smtplib SMTP ehlo_resp12765103
Ref: 3d3c12765103
Ref: library/smtplib smtplib SMTP does_esmtp12765203
Ref: 3d3d12765203
Ref: library/smtplib smtplib SMTP esmtp_features12765331
Ref: 3d3e12765331
Ref: Objetos SMTP-Footnote-112765515
Ref: Objetos SMTP-Footnote-212765573
Ref: Objetos SMTP-Footnote-312765632
Ref: Objetos SMTP-Footnote-412765691
Ref: Objetos SMTP-Footnote-512765749
Ref: Objetos SMTP-Footnote-612765807
Node: Exemplo SMTP12765866
Ref: library/smtplib id212765973
Ref: 3d4212765973
Ref: library/smtplib smtp-example12765973
Ref: 3d4312765973
Ref: Exemplo SMTP-Footnote-112767401
Node: uuid — Objetos UUID conforme RFC 412212767459
Ref: library/uuid doc12767675
Ref: 3d4412767675
Ref: library/uuid module-uuid12767675
Ref: 11012767675
Ref: library/uuid translation-repo12767675
Ref: 3d4512767675
Ref: library/uuid uuid-uuid-objects-according-to-rfc-412212767675
Ref: 3d4612767675
Ref: library/uuid uuid SafeUUID12768848
Ref: 3d4712768848
Ref: library/uuid uuid SafeUUID safe12768908
Ref: 3d4812768908
Ref: library/uuid uuid SafeUUID unsafe12769029
Ref: 3d4912769029
Ref: library/uuid uuid SafeUUID unknown12769131
Ref: 3d4a12769131
Ref: library/uuid uuid UUID12769271
Ref: a6a12769271
Ref: library/uuid uuid UUID bytes12771363
Ref: 3d4c12771363
Ref: library/uuid uuid UUID bytes_le12771500
Ref: 3d4d12771500
Ref: library/uuid uuid UUID fields12771657
Ref: 3d4e12771657
Ref: library/uuid uuid UUID time_low12772045
Ref: 3d4f12772045
Ref: library/uuid uuid UUID time_mid12772242
Ref: 3d5012772242
Ref: library/uuid uuid UUID time_hi_version12772446
Ref: 3d5112772446
Ref: library/uuid uuid UUID clock_seq_hi_variant12772648
Ref: 3d5212772648
Ref: library/uuid uuid UUID clock_seq_low12772837
Ref: 3d5312772837
Ref: library/uuid uuid UUID node12773024
Ref: 3d5412773024
Ref: library/uuid uuid UUID time12773220
Ref: 3d5512773220
Ref: library/uuid uuid UUID clock_seq12773430
Ref: 3d5612773430
Ref: library/uuid uuid UUID hex12773550
Ref: 3d5712773550
Ref: library/uuid uuid UUID int12773649
Ref: 3d4b12773649
Ref: library/uuid uuid UUID urn12773715
Ref: 3d5812773715
Ref: library/uuid uuid UUID variant12773802
Ref: 3d5912773802
Ref: library/uuid uuid UUID version12774045
Ref: 3d5e12774045
Ref: library/uuid uuid UUID is_safe12774188
Ref: bbe12774188
Ref: library/uuid uuid getnode12774442
Ref: bbf12774442
Ref: library/uuid uuid uuid112775574
Ref: bc012775574
Ref: library/uuid uuid uuid312775980
Ref: 164512775980
Ref: library/uuid uuid uuid412776227
Ref: 164612776227
Ref: library/uuid uuid uuid512776287
Ref: 164712776287
Ref: library/uuid uuid NAMESPACE_DNS12776678
Ref: 3d5f12776678
Ref: library/uuid uuid NAMESPACE_URL12776828
Ref: 3d6012776828
Ref: library/uuid uuid NAMESPACE_OID12776943
Ref: 3d6112776943
Ref: library/uuid uuid NAMESPACE_X50012777061
Ref: 3d6212777061
Ref: library/uuid uuid RESERVED_NCS12777341
Ref: 3d5a12777341
Ref: library/uuid uuid RFC_412212777416
Ref: 3d5b12777416
Ref: library/uuid uuid RESERVED_MICROSOFT12777501
Ref: 3d5c12777501
Ref: library/uuid uuid RESERVED_FUTURE12777588
Ref: 3d5d12777588
Ref: uuid — Objetos UUID conforme RFC 4122-Footnote-112778095
Ref: uuid — Objetos UUID conforme RFC 4122-Footnote-212778159
Ref: uuid — Objetos UUID conforme RFC 4122-Footnote-312778218
Ref: uuid — Objetos UUID conforme RFC 4122-Footnote-412778277
Ref: uuid — Objetos UUID conforme RFC 4122-Footnote-512778336
Ref: uuid — Objetos UUID conforme RFC 4122-Footnote-612778395
Ref: uuid — Objetos UUID conforme RFC 4122-Footnote-712778454
Node: Uso na linha de comando<4>12778513
Ref: library/uuid command-line-usage12778635
Ref: 3d6312778635
Ref: library/uuid uuid-cli12778635
Ref: 44412778635
Ref: library/uuid cmdoption-uuid-h12778941
Ref: 3d6412778941
Ref: library/uuid cmdoption-uuid-help12778941
Ref: 3d6512778941
Ref: library/uuid cmdoption-uuid-u12779005
Ref: 3d6612779005
Ref: library/uuid cmdoption-uuid-uuid12779027
Ref: 3d6712779027
Ref: library/uuid cmdoption-uuid-n12779171
Ref: 3d6812779171
Ref: library/uuid cmdoption-uuid-namespace12779198
Ref: 3d6912779198
Ref: library/uuid cmdoption-uuid-N12779534
Ref: 3d6a12779534
Ref: library/uuid cmdoption-uuid-name12779556
Ref: 3d6b12779556
Node: Exemplo<11>12779717
Ref: library/uuid example12779875
Ref: 3d6c12779875
Ref: library/uuid uuid-example12779875
Ref: 3d6d12779875
Node: Exemplo de linha de comando12781195
Ref: library/uuid command-line-example12781318
Ref: 3d6e12781318
Ref: library/uuid uuid-cli-example12781318
Ref: 3d6f12781318
Node: socketserver — Um framework para servidores de rede12781734
Ref: library/socketserver doc12781941
Ref: 3d7012781941
Ref: library/socketserver module-socketserver12781941
Ref: cd12781941
Ref: library/socketserver socketserver-a-framework-for-network-servers12781941
Ref: 3d7112781941
Ref: library/socketserver translation-repo12781941
Ref: 3d7212781941
Ref: library/socketserver socketserver TCPServer12782505
Ref: 136412782505
Ref: library/socketserver socketserver UDPServer12782963
Ref: 3d7512782963
Ref: library/socketserver socketserver UnixStreamServer12783277
Ref: 3d7612783277
Ref: library/socketserver socketserver UnixDatagramServer12783391
Ref: 3d7712783391
Ref: socketserver — Um framework para servidores de rede-Footnote-112786002
Node: Notas sobre criação do servidor12786074
Ref: library/socketserver server-creation-notes12786223
Ref: 3d7a12786223
Ref: library/socketserver socketserver ForkingMixIn12787030
Ref: b9012787030
Ref: library/socketserver socketserver ThreadingMixIn12787068
Ref: b5812787068
Ref: library/socketserver socketserver ThreadingMixIn block_on_close12787762
Ref: b8f12787762
Ref: library/socketserver socketserver ThreadingMixIn daemon_threads12788193
Ref: 3d7c12788193
Ref: library/socketserver socketserver ForkingTCPServer12788783
Ref: 3d7d12788783
Ref: library/socketserver socketserver ForkingUDPServer12788825
Ref: 3d7e12788825
Ref: library/socketserver socketserver ThreadingTCPServer12788867
Ref: 3d7f12788867
Ref: library/socketserver socketserver ThreadingUDPServer12788911
Ref: 3d7b12788911
Ref: library/socketserver socketserver ForkingUnixStreamServer12788955
Ref: 3d8012788955
Ref: library/socketserver socketserver ForkingUnixDatagramServer12789004
Ref: 3d8112789004
Ref: library/socketserver socketserver ThreadingUnixStreamServer12789055
Ref: 3d8212789055
Ref: library/socketserver socketserver ThreadingUnixDatagramServer12789106
Ref: 3d8312789106
Node: Objetos Server<2>12791747
Ref: library/socketserver server-objects12791941
Ref: 3d8512791941
Ref: library/socketserver socketserver BaseServer12791992
Ref: 117c12791992
Ref: library/socketserver socketserver BaseServer fileno12792403
Ref: 3d8812792403
Ref: library/socketserver socketserver BaseServer handle_request12792705
Ref: 136712792705
Ref: library/socketserver socketserver BaseServer serve_forever12793350
Ref: 117e12793350
Ref: library/socketserver socketserver BaseServer service_actions12794064
Ref: 117d12794064
Ref: library/socketserver socketserver BaseServer shutdown12794393
Ref: 1bad12794393
Ref: library/socketserver socketserver BaseServer server_close12794728
Ref: b8e12794728
Ref: library/socketserver socketserver BaseServer address_family12794816
Ref: 3d8c12794816
Ref: library/socketserver socketserver BaseServer RequestHandlerClass12795251
Ref: 3d8712795251
Ref: library/socketserver socketserver BaseServer server_address12795452
Ref: 3d8612795452
Ref: library/socketserver socketserver BaseServer socket12795886
Ref: 3d8d12795886
Ref: library/socketserver socketserver BaseServer allow_reuse_address12796093
Ref: 3d8e12796093
Ref: library/socketserver socketserver BaseServer request_queue_size12796315
Ref: 3d8f12796315
Ref: library/socketserver socketserver BaseServer socket_type12796862
Ref: 3d9012796862
Ref: library/socketserver socketserver BaseServer timeout12797055
Ref: 136512797055
Ref: library/socketserver socketserver BaseServer finish_request12797646
Ref: 3d9112797646
Ref: library/socketserver socketserver BaseServer get_request12797865
Ref: 3d8912797865
Ref: library/socketserver socketserver BaseServer handle_error12798114
Ref: d6412798114
Ref: library/socketserver socketserver BaseServer handle_timeout12798581
Ref: 136612798581
Ref: library/socketserver socketserver BaseServer process_request12799075
Ref: 3d8b12799075
Ref: library/socketserver socketserver BaseServer server_activate12799460
Ref: 3d7412799460
Ref: library/socketserver socketserver BaseServer server_bind12799718
Ref: 3d7312799718
Ref: library/socketserver socketserver BaseServer verify_request12799880
Ref: 3d8a12799880
Node: Objetos manipulador de requisições12800499
Ref: library/socketserver request-handler-objects12800672
Ref: 3d9212800672
Ref: library/socketserver socketserver BaseRequestHandler12800765
Ref: 3d7812800765
Ref: library/socketserver socketserver BaseRequestHandler setup12801177
Ref: 3d9312801177
Ref: library/socketserver socketserver BaseRequestHandler handle12801390
Ref: 3d7912801390
Ref: library/socketserver socketserver BaseRequestHandler finish12802177
Ref: 3d9712802177
Ref: library/socketserver socketserver BaseRequestHandler request12802474
Ref: 3d9412802474
Ref: library/socketserver socketserver BaseRequestHandler client_address12802610
Ref: 3d9512802610
Ref: library/socketserver socketserver BaseRequestHandler server12802739
Ref: 3d9612802739
Ref: library/socketserver socketserver StreamRequestHandler12802856
Ref: cfb12802856
Ref: library/socketserver socketserver DatagramRequestHandler12802902
Ref: 3d8412802902
Ref: library/socketserver socketserver DatagramRequestHandler rfile12803147
Ref: 3d9812803147
Ref: library/socketserver socketserver DatagramRequestHandler wfile12803330
Ref: cfa12803330
Node: Exemplos<28>12803627
Ref: library/socketserver examples12803774
Ref: 3d9912803774
Node: Exemplo de socketserver TCPServer12803985
Ref: library/socketserver socketserver-tcpserver-example12804106
Ref: 3d9a12804106
Node: Exemplo socketserver UDPServer12808123
Ref: library/socketserver socketserver-udpserver-example12808272
Ref: 3d9b12808272
Node: Mixins assíncronos12809929
Ref: library/socketserver asynchronous-mixins12810036
Ref: 3d9c12810036
Node: http server — HTTP servers12812440
Ref: library/http server doc12812646
Ref: 3d9d12812646
Ref: library/http server http-server-http-servers12812646
Ref: 3d9e12812646
Ref: library/http server module-http server12812646
Ref: 7212812646
Ref: library/http server translation-repo12812646
Ref: 3d9f12812646
Ref: library/http server http server HTTPServer12813633
Ref: 3b9712813633
Ref: library/http server http server ThreadingHTTPServer12813989
Ref: b5712813989
Ref: library/http server http server BaseHTTPRequestHandler12814545
Ref: 110a12814545
Ref: library/http server http server BaseHTTPRequestHandler client_address12815536
Ref: 3da112815536
Ref: library/http server http server BaseHTTPRequestHandler server12815677
Ref: 3da212815677
Ref: library/http server http server BaseHTTPRequestHandler close_connection12815745
Ref: 3da312815745
Ref: library/http server http server BaseHTTPRequestHandler requestline12815979
Ref: 3da512815979
Ref: library/http server http server BaseHTTPRequestHandler command12816293
Ref: 3da612816293
Ref: library/http server http server BaseHTTPRequestHandler path12816396
Ref: 3da712816396
Ref: library/http server http server BaseHTTPRequestHandler request_version12816669
Ref: 3da812816669
Ref: library/http server http server BaseHTTPRequestHandler headers12816804
Ref: 3c8512816804
Ref: library/http server http server BaseHTTPRequestHandler rfile12817230
Ref: 3daa12817230
Ref: library/http server http server BaseHTTPRequestHandler wfile12817381
Ref: 3dab12817381
Ref: library/http server http server BaseHTTPRequestHandler server_version12817828
Ref: 3dac12817828
Ref: library/http server http server BaseHTTPRequestHandler sys_version12818114
Ref: 3dad12818114
Ref: library/http server http server BaseHTTPRequestHandler error_message_format12818368
Ref: f8412818368
Ref: library/http server http server BaseHTTPRequestHandler error_content_type12818728
Ref: 3daf12818728
Ref: library/http server http server BaseHTTPRequestHandler protocol_version12818907
Ref: 3db012818907
Ref: library/http server http server BaseHTTPRequestHandler MessageClass12819502
Ref: 3da912819502
Ref: library/http server http server BaseHTTPRequestHandler responses12819739
Ref: 3c6912819739
Ref: library/http server http server BaseHTTPRequestHandler handle12820311
Ref: 3db312820311
Ref: library/http server http server BaseHTTPRequestHandler handle_one_request12820612
Ref: 3da412820612
Ref: library/http server http server BaseHTTPRequestHandler handle_expect_10012820811
Ref: 3db412820811
Ref: library/http server http server BaseHTTPRequestHandler send_error12821328
Ref: f8312821328
Ref: library/http server http server BaseHTTPRequestHandler send_response12822457
Ref: 3db512822457
Ref: library/http server http server BaseHTTPRequestHandler send_header12823277
Ref: 3db112823277
Ref: library/http server http server BaseHTTPRequestHandler send_response_only12823862
Ref: 3db212823862
Ref: library/http server http server BaseHTTPRequestHandler end_headers12824290
Ref: 110b12824290
Ref: library/http server http server BaseHTTPRequestHandler flush_headers12824592
Ref: 110c12824592
Ref: library/http server http server BaseHTTPRequestHandler log_request12824772
Ref: 3db712824772
Ref: library/http server http server BaseHTTPRequestHandler log_error12825070
Ref: 3db812825070
Ref: library/http server http server BaseHTTPRequestHandler log_message12825316
Ref: 3db912825316
Ref: library/http server http server BaseHTTPRequestHandler version_string12825806
Ref: 3dae12825806
Ref: library/http server http server BaseHTTPRequestHandler date_time_string12826021
Ref: 3db612826021
Ref: library/http server http server BaseHTTPRequestHandler log_date_time_string12826410
Ref: 3dba12826410
Ref: library/http server http server BaseHTTPRequestHandler address_string12826522
Ref: 3dbb12826522
Ref: library/http server http server SimpleHTTPRequestHandler12826771
Ref: b5612826771
Ref: library/http server http server SimpleHTTPRequestHandler server_version12827553
Ref: 3dbe12827553
Ref: library/http server http server SimpleHTTPRequestHandler extensions_map12827713
Ref: 3dbf12827713
Ref: library/http server http server SimpleHTTPRequestHandler do_HEAD12828215
Ref: 3dbd12828215
Ref: library/http server http server SimpleHTTPRequestHandler do_GET12828504
Ref: 3dbc12828504
Ref: library/http server http server CGIHTTPRequestHandler12830947
Ref: 2a112830947
Ref: library/http server http server CGIHTTPRequestHandler cgi_directories12832137
Ref: 3dc012832137
Ref: library/http server http server CGIHTTPRequestHandler do_POST12832376
Ref: 3dc112832376
Ref: http server — HTTP servers-Footnote-112833347
Ref: http server — HTTP servers-Footnote-212833418
Ref: http server — HTTP servers-Footnote-312833477
Ref: http server — HTTP servers-Footnote-412833536
Node: Interface de linha de comando<7>12833607
Ref: library/http server command-line-interface12833745
Ref: 3dc212833745
Ref: library/http server http-server-cli12833745
Ref: f8512833745
Ref: library/http server cmdoption-http server-arg-port12834102
Ref: 3dc312834102
Ref: library/http server cmdoption-http server-b12834295
Ref: 3dc412834295
Ref: library/http server cmdoption-http server-bind12834295
Ref: 3dc512834295
Ref: library/http server cmdoption-http server-d12834741
Ref: 3dc612834741
Ref: library/http server cmdoption-http server-directory12834741
Ref: 3dc712834741
Ref: library/http server cmdoption-http server-p12835049
Ref: 3dc812835049
Ref: library/http server cmdoption-http server-protocol12835049
Ref: 3dc912835049
Ref: library/http server cmdoption-http server-cgi12835375
Ref: 3dca12835375
Node: Considerações de segurança<3>12835993
Ref: library/http server http-server-security12836131
Ref: 3da012836131
Ref: library/http server security-considerations12836131
Ref: 3dcb12836131
Node: http cookies — HTTP state management12836784
Ref: library/http cookies doc12836988
Ref: 3dcc12836988
Ref: library/http cookies http-cookies-http-state-management12836988
Ref: 3dcd12836988
Ref: library/http cookies module-http cookies12836988
Ref: 7112836988
Ref: library/http cookies translation-repo12836988
Ref: 3dce12836988
Ref: library/http cookies http cookies CookieError12838392
Ref: 3dcf12838392
Ref: library/http cookies http cookies BaseCookie12838559
Ref: 3dd012838559
Ref: library/http cookies http cookies SimpleCookie12838949
Ref: 1bbb12838949
Ref: http cookies — HTTP state management-Footnote-112839815
Ref: http cookies — HTTP state management-Footnote-212839887
Ref: http cookies — HTTP state management-Footnote-312839946
Ref: http cookies — HTTP state management-Footnote-412840005
Ref: http cookies — HTTP state management-Footnote-512840064
Node: Objetos Cookie12840123
Ref: library/http cookies cookie-objects12840235
Ref: 3dd412840235
Ref: library/http cookies id112840235
Ref: 3dd512840235
Ref: library/http cookies http cookies BaseCookie value_decode12840286
Ref: 3dd212840286
Ref: library/http cookies http cookies BaseCookie value_encode12840559
Ref: 3dd312840559
Ref: library/http cookies http cookies BaseCookie output12841012
Ref: 3dd612841012
Ref: library/http cookies http cookies BaseCookie js_output12841381
Ref: 3dd812841381
Ref: library/http cookies http cookies BaseCookie load12841661
Ref: 3dd112841661
Node: Objetos Morsel12841944
Ref: library/http cookies id212842076
Ref: 3dd912842076
Ref: library/http cookies morsel-objects12842076
Ref: 3dda12842076
Ref: library/http cookies http cookies Morsel12842127
Ref: c1e12842127
Ref: library/http cookies http cookies Morsel expires12842359
Ref: 3ddb12842359
Ref: library/http cookies http cookies Morsel path12842391
Ref: 3ddc12842391
Ref: library/http cookies http cookies Morsel comment12842420
Ref: 3ddd12842420
Ref: library/http cookies http cookies Morsel domain12842452
Ref: 3dde12842452
Ref: library/http cookies http cookies Morsel secure12842516
Ref: 3ddf12842516
Ref: library/http cookies http cookies Morsel version12842547
Ref: 3de012842547
Ref: library/http cookies http cookies Morsel httponly12842579
Ref: 141712842579
Ref: library/http cookies http cookies Morsel samesite12842612
Ref: 3de112842612
Ref: library/http cookies http cookies Morsel value12843800
Ref: c1c12843800
Ref: library/http cookies http cookies Morsel coded_value12843853
Ref: c1d12843853
Ref: library/http cookies http cookies Morsel key12843958
Ref: c1b12843958
Ref: library/http cookies http cookies Morsel set12844008
Ref: c1f12844008
Ref: library/http cookies http cookies Morsel isReservedKey12844118
Ref: 3de212844118
Ref: library/http cookies http cookies Morsel output12844230
Ref: 3dd712844230
Ref: library/http cookies http cookies Morsel js_output12844571
Ref: 3de312844571
Ref: library/http cookies http cookies Morsel OutputString12844846
Ref: 3de412844846
Ref: library/http cookies http cookies Morsel update12845059
Ref: ef812845059
Ref: library/http cookies http cookies Morsel copy12845361
Ref: ef712845361
Ref: library/http cookies http cookies Morsel setdefault12845518
Ref: 3de512845518
Ref: Objetos Morsel-Footnote-112845735
Ref: Objetos Morsel-Footnote-212845794
Ref: Objetos Morsel-Footnote-312845853
Ref: Objetos Morsel-Footnote-412845912
Node: Exemplo<12>12845971
Ref: library/http cookies cookie-example12846080
Ref: 3de612846080
Ref: library/http cookies example12846080
Ref: 3de712846080
Node: http cookiejar — Cookie handling for HTTP clients12847723
Ref: library/http cookiejar doc12847947
Ref: 3de812847947
Ref: library/http cookiejar http-cookiejar-cookie-handling-for-http-clients12847947
Ref: 3de912847947
Ref: library/http cookiejar module-http cookiejar12847947
Ref: 7012847947
Ref: library/http cookiejar translation-repo12847947
Ref: 3dea12847947
Ref: library/http cookiejar http cookiejar LoadError12849516
Ref: 3deb12849516
Ref: library/http cookiejar http cookiejar CookieJar12849934
Ref: 3c0712849934
Ref: library/http cookiejar http cookiejar FileCookieJar12850411
Ref: 3dec12850411
Ref: library/http cookiejar http cookiejar CookiePolicy12851251
Ref: 3ded12851251
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy12851412
Ref: 1b8912851412
Ref: library/http cookiejar http cookiejar Cookie12853237
Ref: 3df212853237
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-112854939
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-212855013
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-312855072
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-412855131
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-512855190
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-612855249
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-712855308
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-812855367
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-912855426
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-1012855485
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-1112855545
Ref: http cookiejar — Cookie handling for HTTP clients-Footnote-1212855605
Node: CookieJar and FileCookieJar Objects12855665
Ref: library/http cookiejar cookie-jar-objects12855856
Ref: 3df312855856
Ref: library/http cookiejar cookiejar-and-filecookiejar-objects12855856
Ref: 3df412855856
Ref: library/http cookiejar http cookiejar CookieJar add_cookie_header12856132
Ref: 3df512856132
Ref: library/http cookiejar http cookiejar CookieJar extract_cookies12857052
Ref: 3df612857052
Ref: library/http cookiejar http cookiejar CookieJar set_policy12858288
Ref: 3df812858288
Ref: library/http cookiejar http cookiejar CookieJar make_cookies12858393
Ref: 3df912858393
Ref: library/http cookiejar http cookiejar CookieJar set_cookie_if_ok12858681
Ref: 3dfa12858681
Ref: library/http cookiejar http cookiejar CookieJar set_cookie12858807
Ref: 3dfb12858807
Ref: library/http cookiejar http cookiejar CookieJar clear12858957
Ref: 3dfc12858957
Ref: library/http cookiejar http cookiejar CookieJar clear_session_cookies12859463
Ref: 3dfd12859463
Ref: library/http cookiejar http cookiejar FileCookieJar save12860110
Ref: 3dfe12860110
Ref: library/http cookiejar http cookiejar FileCookieJar load12860964
Ref: 3dee12860964
Ref: library/http cookiejar http cookiejar FileCookieJar revert12861547
Ref: 3def12861547
Ref: library/http cookiejar http cookiejar FileCookieJar filename12861947
Ref: 3dff12861947
Ref: library/http cookiejar http cookiejar FileCookieJar delayload12862083
Ref: 3e0012862083
Node: FileCookieJar subclasses and co-operation with web browsers12862503
Ref: library/http cookiejar file-cookie-jar-classes12862722
Ref: 3df012862722
Ref: library/http cookiejar filecookiejar-subclasses-and-co-operation-with-web-browsers12862722
Ref: 3e0112862722
Ref: library/http cookiejar http cookiejar MozillaCookieJar12862950
Ref: 3e0212862950
Ref: library/http cookiejar http cookiejar LWPCookieJar12863760
Ref: 3e0312863760
Ref: FileCookieJar subclasses and co-operation with web browsers-Footnote-112864245
Node: Objeto CookiePolicy12864304
Ref: library/http cookiejar cookie-policy-objects12864515
Ref: 3e0412864515
Ref: library/http cookiejar cookiepolicy-objects12864515
Ref: 3e0512864515
Ref: library/http cookiejar http cookiejar CookiePolicy set_ok12864666
Ref: 3df712864666
Ref: library/http cookiejar http cookiejar CookiePolicy return_ok12864993
Ref: 3e0612864993
Ref: library/http cookiejar http cookiejar CookiePolicy domain_return_ok12865323
Ref: 3e0712865323
Ref: library/http cookiejar http cookiejar CookiePolicy path_return_ok12866702
Ref: 3e0812866702
Ref: library/http cookiejar http cookiejar CookiePolicy netscape12867155
Ref: 3e0912867155
Ref: library/http cookiejar http cookiejar CookiePolicy rfc296512867227
Ref: 3e0a12867227
Ref: library/http cookiejar http cookiejar CookiePolicy hide_cookie212867301
Ref: 3e0b12867301
Ref: Objeto CookiePolicy-Footnote-112867851
Ref: Objeto CookiePolicy-Footnote-212867910
Node: DefaultCookiePolicy Objects12867969
Ref: library/http cookiejar default-cookie-policy-objects12868138
Ref: 3e0c12868138
Ref: library/http cookiejar defaultcookiepolicy-objects12868138
Ref: 3e0d12868138
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy blocked_domains12870457
Ref: 3e0e12870457
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy set_blocked_domains12870569
Ref: 3e0f12870569
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy is_blocked12870684
Ref: 3e1012870684
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy allowed_domains12870833
Ref: 3e1112870833
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy set_allowed_domains12870970
Ref: 3e1212870970
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy is_not_allowed12871105
Ref: 3e1312871105
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy rfc2109_as_netscape12871446
Ref: 3df112871446
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy strict_domain12872032
Ref: 3e1412872032
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy strict_rfc2965_unverifiable12872335
Ref: 3e1512872335
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy strict_ns_unverifiable12872712
Ref: 3e1612872712
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy strict_ns_domain12872860
Ref: 3e1712872860
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy strict_ns_set_initial_dollar12873040
Ref: 3e1812873040
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy strict_ns_set_path12873194
Ref: 3e1912873194
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy DomainStrictNoDots12873524
Ref: 3e1a12873524
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy DomainStrictNonDomain12873768
Ref: 3e1b12873768
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy DomainRFC2965Match12874115
Ref: 3e1c12874115
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy DomainLiberal12874351
Ref: 3e1d12874351
Ref: library/http cookiejar http cookiejar DefaultCookiePolicy DomainStrict12874498
Ref: 3e1e12874498
Ref: DefaultCookiePolicy Objects-Footnote-112874650
Ref: DefaultCookiePolicy Objects-Footnote-212874709
Ref: DefaultCookiePolicy Objects-Footnote-312874768
Ref: DefaultCookiePolicy Objects-Footnote-412874827
Ref: DefaultCookiePolicy Objects-Footnote-512874886
Ref: DefaultCookiePolicy Objects-Footnote-612874945
Ref: DefaultCookiePolicy Objects-Footnote-712875004
Node: Objetos Cookie<2>12875063
Ref: library/http cookiejar cookie-objects12875225
Ref: 3e1f12875225
Ref: library/http cookiejar http cookiejar Cookie version12875994
Ref: 3e2012875994
Ref: library/http cookiejar http cookiejar Cookie name12876351
Ref: 3e2112876351
Ref: library/http cookiejar http cookiejar Cookie value12876408
Ref: 3e2212876408
Ref: library/http cookiejar http cookiejar Cookie port12876487
Ref: 3e2312876487
Ref: library/http cookiejar http cookiejar Cookie domain12876625
Ref: 3e2412876625
Ref: library/http cookiejar http cookiejar Cookie path12876686
Ref: 3e2512876686
Ref: library/http cookiejar http cookiejar Cookie secure12876780
Ref: 3e2612876780
Ref: library/http cookiejar http cookiejar Cookie expires12876886
Ref: 3e2712876886
Ref: library/http cookiejar http cookiejar Cookie discard12877038
Ref: 3e2912877038
Ref: library/http cookiejar http cookiejar Cookie comment12877114
Ref: 3e2a12877114
Ref: library/http cookiejar http cookiejar Cookie comment_url12877246
Ref: 3e2b12877246
Ref: library/http cookiejar http cookiejar Cookie rfc210912877392
Ref: 3e2c12877392
Ref: library/http cookiejar http cookiejar Cookie port_specified12877801
Ref: 3e2d12877801
Ref: library/http cookiejar http cookiejar Cookie domain_specified12877979
Ref: 3e2e12877979
Ref: library/http cookiejar http cookiejar Cookie domain_initial_dot12878087
Ref: 3e2f12878087
Ref: library/http cookiejar http cookiejar Cookie has_nonstandard_attr12878342
Ref: 3e3012878342
Ref: library/http cookiejar http cookiejar Cookie get_nonstandard_attr12878457
Ref: 3e3112878457
Ref: library/http cookiejar http cookiejar Cookie set_nonstandard_attr12878620
Ref: 3e3212878620
Ref: library/http cookiejar http cookiejar Cookie is_expired12878793
Ref: 3e2812878793
Ref: Objetos Cookie<2>-Footnote-112879087
Ref: Objetos Cookie<2>-Footnote-212879146
Ref: Objetos Cookie<2>-Footnote-312879205
Ref: Objetos Cookie<2>-Footnote-412879264
Node: Exemplos<29>12879323
Ref: library/http cookiejar examples12879449
Ref: 3e3312879449
Ref: Exemplos<29>-Footnote-112880902
Node: xmlrpc — Módulos de servidor e cliente XMLRPC12880961
Ref: library/xmlrpc doc12881180
Ref: 3e3412881180
Ref: library/xmlrpc module-xmlrpc12881180
Ref: 12d12881180
Ref: library/xmlrpc translation-repo12881180
Ref: 3e3512881180
Ref: library/xmlrpc xmlrpc-xmlrpc-server-and-client-modules12881180
Ref: 3e3612881180
Node: xmlrpc client — Cliente XML-RPC12881732
Ref: library/xmlrpc client doc12881945
Ref: 3e3712881945
Ref: library/xmlrpc client module-xmlrpc client12881945
Ref: 12e12881945
Ref: library/xmlrpc client translation-repo12881945
Ref: 3e3812881945
Ref: library/xmlrpc client xmlrpc-client-xml-rpc-client-access12881945
Ref: 3e3912881945
Ref: library/xmlrpc client xmlrpc client ServerProxy12883125
Ref: a6112883125
Ref: xmlrpc client — Cliente XML-RPC-Footnote-112891550
Ref: xmlrpc client — Cliente XML-RPC-Footnote-212891623
Ref: xmlrpc client — Cliente XML-RPC-Footnote-312891717
Ref: xmlrpc client — Cliente XML-RPC-Footnote-412891773
Ref: xmlrpc client — Cliente XML-RPC-Footnote-512891832
Node: Objetos ServerProxy12891878
Ref: library/xmlrpc client id112891992
Ref: 3e3d12891992
Ref: library/xmlrpc client serverproxy-objects12891992
Ref: 3e3e12891992
Ref: library/xmlrpc client xmlrpc client ServerProxy system listMethods12892648
Ref: 3e3f12892648
Ref: library/xmlrpc client xmlrpc client ServerProxy system methodSignature12892812
Ref: 3e4012892812
Ref: library/xmlrpc client xmlrpc client ServerProxy system methodHelp12893837
Ref: 3e4112893837
Node: Objetos DateTime12894914
Ref: library/xmlrpc client datetime-objects12895054
Ref: 3e4212895054
Ref: library/xmlrpc client id212895054
Ref: 3e4312895054
Ref: library/xmlrpc client xmlrpc client DateTime12895109
Ref: 142a12895109
Ref: library/xmlrpc client xmlrpc client DateTime decode12895419
Ref: 3e4412895419
Ref: library/xmlrpc client xmlrpc client DateTime encode12895517
Ref: 3e4512895517
Node: Objetos Binários12896603
Ref: library/xmlrpc client binary-objects12896737
Ref: 3e4612896737
Ref: library/xmlrpc client id312896737
Ref: 3e4712896737
Ref: library/xmlrpc client xmlrpc client Binary12896793
Ref: 3e3a12896793
Ref: library/xmlrpc client xmlrpc client Binary data12897011
Ref: 3e4812897011
Ref: library/xmlrpc client xmlrpc client Binary decode12897316
Ref: 3e4912897316
Ref: library/xmlrpc client xmlrpc client Binary encode12897456
Ref: 3e4a12897456
Ref: Objetos Binários-Footnote-112898701
Node: Objetos Fault12898772
Ref: library/xmlrpc client fault-objects12898911
Ref: 3e4b12898911
Ref: library/xmlrpc client id412898911
Ref: 3e4c12898911
Ref: library/xmlrpc client xmlrpc client Fault12898960
Ref: 3e3b12898960
Ref: library/xmlrpc client xmlrpc client Fault faultCode12899128
Ref: 3e4d12899128
Ref: library/xmlrpc client xmlrpc client Fault faultString12899203
Ref: 3e4e12899203
Node: Objetos ProtocolError12900164
Ref: library/xmlrpc client protocol-error-objects12900303
Ref: 3e4f12900303
Ref: library/xmlrpc client protocolerror-objects12900303
Ref: 3e5012900303
Ref: library/xmlrpc client xmlrpc client ProtocolError12900368
Ref: 3e3c12900368
Ref: library/xmlrpc client xmlrpc client ProtocolError url12900646
Ref: 3e5112900646
Ref: library/xmlrpc client xmlrpc client ProtocolError errcode12900722
Ref: 3e5212900722
Ref: library/xmlrpc client xmlrpc client ProtocolError errmsg12900780
Ref: 3e5312900780
Ref: library/xmlrpc client xmlrpc client ProtocolError headers12900858
Ref: 3e5412900858
Node: Objetos MultiCall12901597
Ref: library/xmlrpc client multicall-objects12901744
Ref: 3e5512901744
Ref: library/xmlrpc client xmlrpc client MultiCall12901927
Ref: 3e5612901927
Ref: Objetos MultiCall-Footnote-112903634
Node: Convenience Functions12903813
Ref: library/xmlrpc client convenience-functions12903964
Ref: 3e5712903964
Ref: library/xmlrpc client xmlrpc client dumps12904029
Ref: 3e5812904029
Ref: library/xmlrpc client xmlrpc client loads12904741
Ref: 147c12904741
Node: Exemplo de uso do cliente12905625
Ref: library/xmlrpc client example-of-client-usage12905793
Ref: 3e5912905793
Ref: library/xmlrpc client xmlrpc-client-example12905793
Ref: 3e5a12905793
Node: Example of Client and Server Usage12907104
Ref: library/xmlrpc client example-of-client-and-server-usage12907242
Ref: 3e5b12907242
Node: xmlrpc server — Servidores XML-RPC básicos12907382
Ref: library/xmlrpc server doc12907601
Ref: 3e5d12907601
Ref: library/xmlrpc server module-xmlrpc server12907601
Ref: 12f12907601
Ref: library/xmlrpc server translation-repo12907601
Ref: 3e5e12907601
Ref: library/xmlrpc server xmlrpc-server-basic-xml-rpc-servers12907601
Ref: 3e5f12907601
Ref: library/xmlrpc server xmlrpc server SimpleXMLRPCServer12908523
Ref: 3e6012908523
Ref: library/xmlrpc server xmlrpc server CGIXMLRPCRequestHandler12910137
Ref: 3e6112910137
Ref: library/xmlrpc server xmlrpc server SimpleXMLRPCRequestHandler12910825
Ref: 136c12910825
Ref: xmlrpc server — Servidores XML-RPC básicos-Footnote-112911368
Node: Objetos de SimpleXMLRPCServer12911441
Ref: library/xmlrpc server simple-xmlrpc-servers12911584
Ref: 3e6212911584
Ref: library/xmlrpc server simplexmlrpcserver-objects12911584
Ref: 3e6312911584
Ref: library/xmlrpc server xmlrpc server SimpleXMLRPCServer register_function12911828
Ref: 3e6412911828
Ref: library/xmlrpc server xmlrpc server SimpleXMLRPCServer register_instance12912638
Ref: 3e6512912638
Ref: library/xmlrpc server xmlrpc server SimpleXMLRPCServer register_introspection_functions12914317
Ref: 3e6612914317
Ref: library/xmlrpc server xmlrpc server SimpleXMLRPCServer register_multicall_functions12914527
Ref: 3e6712914527
Ref: library/xmlrpc server xmlrpc server SimpleXMLRPCRequestHandler rpc_paths12914660
Ref: 3e6812914660
Node: Exemplo de SimpleXMLRPCServer12915133
Ref: library/xmlrpc server id112915228
Ref: 3e6912915228
Ref: library/xmlrpc server simplexmlrpcserver-example12915228
Ref: 3e5c12915228
Node: CGIXMLRPCRequestHandler12919896
Ref: library/xmlrpc server cgixmlrpcrequesthandler12920076
Ref: 3e6a12920076
Ref: library/xmlrpc server xmlrpc server CGIXMLRPCRequestHandler register_function12920279
Ref: 3e6b12920279
Ref: library/xmlrpc server xmlrpc server CGIXMLRPCRequestHandler register_instance12921094
Ref: 3e6c12921094
Ref: library/xmlrpc server xmlrpc server CGIXMLRPCRequestHandler register_introspection_functions12922002
Ref: 3e6d12922002
Ref: library/xmlrpc server xmlrpc server CGIXMLRPCRequestHandler register_multicall_functions12922217
Ref: 3e6e12922217
Ref: library/xmlrpc server xmlrpc server CGIXMLRPCRequestHandler handle_request12922361
Ref: 3e6f12922361
Node: Documentando servidor XMLRPC12922966
Ref: library/xmlrpc server documenting-xmlrpc-server12923143
Ref: 3e7012923143
Ref: library/xmlrpc server xmlrpc server DocXMLRPCServer12923494
Ref: 1b3512923494
Ref: library/xmlrpc server xmlrpc server DocCGIXMLRPCRequestHandler12924021
Ref: 3e7112924021
Ref: library/xmlrpc server xmlrpc server DocXMLRPCRequestHandler12924169
Ref: 3e7212924169
Node: Objetos de DocXMLRPCServer12924537
Ref: library/xmlrpc server doc-xmlrpc-servers12924717
Ref: 3e7312924717
Ref: library/xmlrpc server docxmlrpcserver-objects12924717
Ref: 3e7412924717
Ref: library/xmlrpc server xmlrpc server DocXMLRPCServer set_server_title12925201
Ref: 3e7512925201
Ref: library/xmlrpc server xmlrpc server DocXMLRPCServer set_server_name12925394
Ref: 3e7612925394
Ref: library/xmlrpc server xmlrpc server DocXMLRPCServer set_server_documentation12925618
Ref: 3e7712925618
Node: DocCGIXMLRPCRequestHandler12925875
Ref: library/xmlrpc server doccgixmlrpcrequesthandler12926018
Ref: 3e7812926018
Ref: library/xmlrpc server xmlrpc server DocCGIXMLRPCRequestHandler set_server_title12926503
Ref: 3e7912926503
Ref: library/xmlrpc server xmlrpc server DocCGIXMLRPCRequestHandler set_server_name12926707
Ref: 3e7a12926707
Ref: library/xmlrpc server xmlrpc server DocCGIXMLRPCRequestHandler set_server_documentation12926942
Ref: 3e7b12926942
Node: ipaddress — Biblioteca de manipulação de IPv4/IPv612927210
Ref: library/ipaddress doc12927387
Ref: 3e7c12927387
Ref: library/ipaddress ipaddress-ipv4-ipv6-manipulation-library12927387
Ref: 3e7d12927387
Ref: library/ipaddress module-ipaddress12927387
Ref: 8012927387
Ref: library/ipaddress translation-repo12927387
Ref: 3e7e12927387
Ref: ipaddress — Biblioteca de manipulação de IPv4/IPv6-Footnote-112928494
Node: Funções de fábrica de conveniência12928563
Ref: library/ipaddress convenience-factory-functions12928714
Ref: 3e8012928714
Ref: library/ipaddress ipaddress ip_address12928938
Ref: 3e8112928938
Ref: library/ipaddress ipaddress ip_network12929551
Ref: 3e8212929551
Ref: library/ipaddress ipaddress ip_interface12930313
Ref: 3e8312930313
Node: Endereços IP12931239
Ref: library/ipaddress ip-addresses12931422
Ref: 3e8412931422
Node: Objetos de endereço12931573
Ref: library/ipaddress address-objects12931686
Ref: 3e8512931686
Ref: library/ipaddress ipaddress IPv4Address12932176
Ref: 1fc12932176
Ref: library/ipaddress ipaddress IPv4Address version12933579
Ref: 3e8712933579
Ref: library/ipaddress ipaddress IPv4Address max_prefixlen12933689
Ref: 3e8812933689
Ref: library/ipaddress ipaddress IPv4Address compressed12934034
Ref: 3e8912934034
Ref: library/ipaddress ipaddress IPv4Address exploded12934065
Ref: 3e8a12934065
Ref: library/ipaddress ipaddress IPv4Address packed12934583
Ref: 3e8b12934583
Ref: library/ipaddress ipaddress IPv4Address reverse_pointer12934828
Ref: e4b12934828
Ref: library/ipaddress ipaddress IPv4Address is_multicast12935390
Ref: 3e8c12935390
Ref: library/ipaddress ipaddress IPv4Address is_private12935569
Ref: 173a12935569
Ref: library/ipaddress ipaddress IPv4Address is_global12937278
Ref: f9312937278
Ref: library/ipaddress ipaddress IPv4Address is_unspecified12938241
Ref: 3e8e12938241
Ref: library/ipaddress ipaddress IPv4Address is_reserved12938412
Ref: 3e8f12938412
Ref: library/ipaddress ipaddress IPv4Address is_loopback12939175
Ref: 3e9112939175
Ref: library/ipaddress ipaddress IPv4Address is_link_local12939340
Ref: 3e9212939340
Ref: library/ipaddress ipaddress IPv4Address ipv6_mapped12939481
Ref: 1fb12939481
Ref: library/ipaddress ipaddress IPv4Address __format__12939674
Ref: 3e9312939674
Ref: library/ipaddress ipaddress IPv6Address12940972
Ref: 1fd12940972
Ref: library/ipaddress ipaddress IPv6Address compressed12942416
Ref: 3e9412942416
Ref: library/ipaddress ipaddress IPv6Address exploded12942744
Ref: 3e9512942744
Ref: library/ipaddress ipaddress IPv6Address packed12943042
Ref: 3e9612943042
Ref: library/ipaddress ipaddress IPv6Address reverse_pointer12943069
Ref: 16bf12943069
Ref: library/ipaddress ipaddress IPv6Address version12943105
Ref: 3e9712943105
Ref: library/ipaddress ipaddress IPv6Address max_prefixlen12943133
Ref: 3e9812943133
Ref: library/ipaddress ipaddress IPv6Address is_multicast12943167
Ref: 3e9912943167
Ref: library/ipaddress ipaddress IPv6Address is_private12943200
Ref: 173b12943200
Ref: library/ipaddress ipaddress IPv6Address is_global12943231
Ref: 173c12943231
Ref: library/ipaddress ipaddress IPv6Address is_unspecified12943299
Ref: 3e9a12943299
Ref: library/ipaddress ipaddress IPv6Address is_reserved12943334
Ref: 3e9b12943334
Ref: library/ipaddress ipaddress IPv6Address is_loopback12943366
Ref: 172012943366
Ref: library/ipaddress ipaddress IPv6Address is_link_local12943398
Ref: 3e9c12943398
Ref: library/ipaddress ipaddress IPv6Address is_site_local12943432
Ref: 3e9012943432
Ref: library/ipaddress ipaddress IPv6Address ipv4_mapped12943816
Ref: 3e8d12943816
Ref: library/ipaddress ipaddress IPv6Address scope_id12944105
Ref: 91412944105
Ref: library/ipaddress ipaddress IPv6Address sixtofour12944431
Ref: 3e9d12944431
Ref: library/ipaddress ipaddress IPv6Address teredo12944742
Ref: 3e9e12944742
Ref: library/ipaddress ipaddress IPv6Address __format__12945088
Ref: 3e9f12945088
Ref: Objetos de endereço-Footnote-112945290
Ref: Objetos de endereço-Footnote-212945349
Ref: Objetos de endereço-Footnote-312945408
Ref: Objetos de endereço-Footnote-412945510
Ref: Objetos de endereço-Footnote-512945612
Ref: Objetos de endereço-Footnote-612945714
Ref: Objetos de endereço-Footnote-712945816
Ref: Objetos de endereço-Footnote-812945875
Ref: Objetos de endereço-Footnote-912945934
Ref: Objetos de endereço-Footnote-1012946020
Ref: Objetos de endereço-Footnote-1112946123
Ref: Objetos de endereço-Footnote-1212946183
Ref: Objetos de endereço-Footnote-1312946243
Ref: Objetos de endereço-Footnote-1412946303
Ref: Objetos de endereço-Footnote-1512946363
Ref: Objetos de endereço-Footnote-1612946423
Ref: Objetos de endereço-Footnote-1712946483
Ref: Objetos de endereço-Footnote-1812946543
Ref: Objetos de endereço-Footnote-1912946603
Ref: Objetos de endereço-Footnote-2012946663
Ref: Objetos de endereço-Footnote-2112946723
Ref: Objetos de endereço-Footnote-2212946783
Node: Conversão para strings e inteiros12946843
Ref: library/ipaddress conversion-to-strings-and-integers12946978
Ref: 3ea012946978
Node: Operadores<3>12947631
Ref: library/ipaddress operators12947737
Ref: 3ea112947737
Node: Operadores de comparação12948048
Ref: library/ipaddress comparison-operators12948156
Ref: 3ea212948156
Node: Operadores aritméticos12948799
Ref: library/ipaddress arithmetic-operators12948907
Ref: 3ea312948907
Node: Definições de rede IP12949426
Ref: library/ipaddress ip-network-definitions12949591
Ref: 3ea412949591
Node: Prefixo máscara de rede e máscara de host12950355
Ref: library/ipaddress prefix-net-mask-and-host-mask12950482
Ref: 3ea512950482
Node: Objetos de rede12951305
Ref: library/ipaddress network-objects12951454
Ref: 3ea612951454
Ref: library/ipaddress ipaddress IPv4Network12951959
Ref: 1fe12951959
Ref: library/ipaddress ipaddress IPv4Network version12954744
Ref: 3ea812954744
Ref: library/ipaddress ipaddress IPv4Network max_prefixlen12954772
Ref: 3ea912954772
Ref: library/ipaddress ipaddress IPv4Network is_multicast12954907
Ref: 3eaa12954907
Ref: library/ipaddress ipaddress IPv4Network is_private12954940
Ref: 3eab12954940
Ref: library/ipaddress ipaddress IPv4Network is_unspecified12954971
Ref: 3eac12954971
Ref: library/ipaddress ipaddress IPv4Network is_reserved12955006
Ref: 3ead12955006
Ref: library/ipaddress ipaddress IPv4Network is_loopback12955038
Ref: 3eae12955038
Ref: library/ipaddress ipaddress IPv4Network is_link_local12955070
Ref: 3eaf12955070
Ref: library/ipaddress ipaddress IPv4Network network_address12955290
Ref: 3eb012955290
Ref: library/ipaddress ipaddress IPv4Network broadcast_address12955464
Ref: 3eb112955464
Ref: library/ipaddress ipaddress IPv4Network hostmask12955666
Ref: 3eb212955666
Ref: library/ipaddress ipaddress IPv4Network netmask12955765
Ref: 3eb312955765
Ref: library/ipaddress ipaddress IPv4Network with_prefixlen12955863
Ref: 3eb412955863
Ref: library/ipaddress ipaddress IPv4Network compressed12955898
Ref: 3eb512955898
Ref: library/ipaddress ipaddress IPv4Network exploded12955929
Ref: 3eb612955929
Ref: library/ipaddress ipaddress IPv4Network with_netmask12956230
Ref: 3eb712956230
Ref: library/ipaddress ipaddress IPv4Network with_hostmask12956372
Ref: 3eb812956372
Ref: library/ipaddress ipaddress IPv4Network num_addresses12956515
Ref: 3eb912956515
Ref: library/ipaddress ipaddress IPv4Network prefixlen12956599
Ref: 3eba12956599
Ref: library/ipaddress ipaddress IPv4Network hosts12956681
Ref: 15d112956681
Ref: library/ipaddress ipaddress IPv4Network overlaps12957703
Ref: 3ebb12957703
Ref: library/ipaddress ipaddress IPv4Network address_exclude12957883
Ref: 3ebc12957883
Ref: library/ipaddress ipaddress IPv4Network subnets12958488
Ref: ecf12958488
Ref: library/ipaddress ipaddress IPv4Network supernet12960064
Ref: ed012960064
Ref: library/ipaddress ipaddress IPv4Network subnet_of12960902
Ref: 3ebd12960902
Ref: library/ipaddress ipaddress IPv4Network supernet_of12961209
Ref: 3ebe12961209
Ref: library/ipaddress ipaddress IPv4Network compare_networks12961522
Ref: 3ebf12961522
Ref: library/ipaddress ipaddress IPv6Network12962229
Ref: 1ff12962229
Ref: library/ipaddress ipaddress IPv6Network version12964333
Ref: 3ec012964333
Ref: library/ipaddress ipaddress IPv6Network max_prefixlen12964361
Ref: 3ec112964361
Ref: library/ipaddress ipaddress IPv6Network is_multicast12964395
Ref: 3ec212964395
Ref: library/ipaddress ipaddress IPv6Network is_private12964428
Ref: 3ec312964428
Ref: library/ipaddress ipaddress IPv6Network is_unspecified12964459
Ref: 3ec412964459
Ref: library/ipaddress ipaddress IPv6Network is_reserved12964494
Ref: 3ec512964494
Ref: library/ipaddress ipaddress IPv6Network is_loopback12964526
Ref: 3ec612964526
Ref: library/ipaddress ipaddress IPv6Network is_link_local12964558
Ref: 3ec712964558
Ref: library/ipaddress ipaddress IPv6Network network_address12964592
Ref: 3ec812964592
Ref: library/ipaddress ipaddress IPv6Network broadcast_address12964628
Ref: 3ec912964628
Ref: library/ipaddress ipaddress IPv6Network hostmask12964666
Ref: 3eca12964666
Ref: library/ipaddress ipaddress IPv6Network netmask12964695
Ref: 3ecb12964695
Ref: library/ipaddress ipaddress IPv6Network with_prefixlen12964723
Ref: 3ecc12964723
Ref: library/ipaddress ipaddress IPv6Network compressed12964758
Ref: 3ecd12964758
Ref: library/ipaddress ipaddress IPv6Network exploded12964789
Ref: 3ece12964789
Ref: library/ipaddress ipaddress IPv6Network with_netmask12964818
Ref: 3ecf12964818
Ref: library/ipaddress ipaddress IPv6Network with_hostmask12964851
Ref: 3ed012964851
Ref: library/ipaddress ipaddress IPv6Network num_addresses12964885
Ref: 3ed112964885
Ref: library/ipaddress ipaddress IPv6Network prefixlen12964919
Ref: 3ed212964919
Ref: library/ipaddress ipaddress IPv6Network hosts12964949
Ref: 15d212964949
Ref: library/ipaddress ipaddress IPv6Network overlaps12965458
Ref: 3ed312965458
Ref: library/ipaddress ipaddress IPv6Network address_exclude12965494
Ref: 3ed412965494
Ref: library/ipaddress ipaddress IPv6Network subnets12965539
Ref: 3ed512965539
Ref: library/ipaddress ipaddress IPv6Network supernet12965602
Ref: 3ed612965602
Ref: library/ipaddress ipaddress IPv6Network subnet_of12965666
Ref: 3ed712965666
Ref: library/ipaddress ipaddress IPv6Network supernet_of12965703
Ref: 3ed812965703
Ref: library/ipaddress ipaddress IPv6Network compare_networks12965742
Ref: 3ed912965742
Ref: library/ipaddress ipaddress IPv6Network is_site_local12965887
Ref: 3eda12965887
Node: Operadores<4>12966101
Ref: library/ipaddress id112966198
Ref: 3edb12966198
Node: Operadores lógicos12966528
Ref: library/ipaddress logical-operators12966616
Ref: 3edc12966616
Node: Iteração12966861
Ref: library/ipaddress iteration12966995
Ref: 3edd12966995
Node: Redes como contêineres de endereços12967857
Ref: library/ipaddress networks-as-containers-of-addresses12967963
Ref: 3ede12967963
Node: Objetos de interface12968437
Ref: library/ipaddress interface-objects12968626
Ref: 3edf12968626
Ref: library/ipaddress ipaddress IPv4Interface12968800
Ref: 192412968800
Ref: library/ipaddress ipaddress IPv4Interface ip12969230
Ref: 3ee012969230
Ref: library/ipaddress ipaddress IPv4Interface network12969463
Ref: 3ee112969463
Ref: library/ipaddress ipaddress IPv4Interface with_prefixlen12969720
Ref: 3ee212969720
Ref: library/ipaddress ipaddress IPv4Interface with_netmask12969995
Ref: 3ee312969995
Ref: library/ipaddress ipaddress IPv4Interface with_hostmask12970275
Ref: 3ee412970275
Ref: library/ipaddress ipaddress IPv6Interface12970553
Ref: 192512970553
Ref: library/ipaddress ipaddress IPv6Interface ip12970983
Ref: 3ee512970983
Ref: library/ipaddress ipaddress IPv6Interface network12971006
Ref: 3ee612971006
Ref: library/ipaddress ipaddress IPv6Interface with_prefixlen12971034
Ref: 3ee712971034
Ref: library/ipaddress ipaddress IPv6Interface with_netmask12971069
Ref: 3ee812971069
Ref: library/ipaddress ipaddress IPv6Interface with_hostmask12971102
Ref: 3ee912971102
Node: Operadores<5>12971279
Ref: library/ipaddress id212971349
Ref: 3eea12971349
Node: Operadores lógicos<2>12971650
Ref: library/ipaddress id312971722
Ref: 3eeb12971722
Node: Outras funções de nível de módulo12972436
Ref: library/ipaddress other-module-level-functions12972627
Ref: 3eec12972627
Ref: library/ipaddress ipaddress v4_int_to_packed12972794
Ref: 3eed12972794
Ref: library/ipaddress ipaddress v6_int_to_packed12973317
Ref: 3eee12973317
Ref: library/ipaddress ipaddress summarize_address_range12973675
Ref: ed112973675
Ref: library/ipaddress ipaddress collapse_addresses12974611
Ref: ed212974611
Ref: library/ipaddress ipaddress get_mixed_type_key12975208
Ref: 3eef12975208
Node: Exceções personalizadas12975842
Ref: library/ipaddress custom-exceptions12976004
Ref: 3ef012976004
Ref: library/ipaddress ipaddress AddressValueError12976210
Ref: 3e8612976210
Ref: library/ipaddress ipaddress NetmaskValueError12976322
Ref: 3ea712976322
Node: Serviços Multimídia12976441
Ref: library/mm doc12976600
Ref: 3ef112976600
Ref: library/mm mmedia12976600
Ref: 3ef212976600
Ref: library/mm multimedia-services12976600
Ref: 3ef312976600
Ref: library/mm translation-repo12976600
Ref: 3ef412976600
Node: wave — Read and write WAV files12976977
Ref: library/wave doc12977125
Ref: 3ef512977125
Ref: library/wave module-wave12977125
Ref: 11312977125
Ref: library/wave wave-read-and-write-wav-files12977125
Ref: 3ef612977125
Ref: library/wave wave open12977725
Ref: 95212977725
Ref: library/wave wave Error12978810
Ref: 3ef912978810
Ref: wave — Read and write WAV files-Footnote-112979064
Node: Objetos Wave_read12979128
Ref: library/wave id112979242
Ref: 3efa12979242
Ref: library/wave wave-read-objects12979242
Ref: 3efb12979242
Ref: library/wave wave Wave_read12979297
Ref: 2b612979297
Ref: library/wave wave Wave_read close12979440
Ref: 3ef712979440
Ref: library/wave wave Wave_read getnchannels12979637
Ref: 3efc12979637
Ref: library/wave wave Wave_read getsampwidth12979766
Ref: 3efd12979766
Ref: library/wave wave Wave_read getframerate12979851
Ref: 3efe12979851
Ref: library/wave wave Wave_read getnframes12979934
Ref: 3eff12979934
Ref: library/wave wave Wave_read getcomptype12980018
Ref: 3f0012980018
Ref: library/wave wave Wave_read getcompname12980141
Ref: 3f0112980141
Ref: library/wave wave Wave_read getparams12980305
Ref: 102012980305
Ref: library/wave wave Wave_read readframes12980523
Ref: 3f0212980523
Ref: library/wave wave Wave_read rewind12980656
Ref: 3f0312980656
Ref: library/wave wave Wave_read getmarkers12980895
Ref: 2b512980895
Ref: library/wave wave Wave_read getmark12981166
Ref: 2b412981166
Ref: library/wave wave Wave_read setpos12981569
Ref: 3f0412981569
Ref: library/wave wave Wave_read tell12981672
Ref: 3f0512981672
Node: Objetos Wave_write12981760
Ref: library/wave id212981874
Ref: 3f0612981874
Ref: library/wave wave-write-objects12981874
Ref: 102112981874
Ref: library/wave wave Wave_write12981931
Ref: 2b712981931
Ref: library/wave wave Wave_write close12982978
Ref: 3ef812982978
Ref: library/wave wave Wave_write setnchannels12983325
Ref: 3f0912983325
Ref: library/wave wave Wave_write setsampwidth12983400
Ref: 3f0a12983400
Ref: library/wave wave Wave_write setframerate12983482
Ref: 3f0b12983482
Ref: library/wave wave Wave_write setnframes12983673
Ref: 3f0712983673
Ref: library/wave wave Wave_write setcomptype12983943
Ref: 3f0c12983943
Ref: library/wave wave Wave_write setparams12984137
Ref: 3f0812984137
Ref: library/wave wave Wave_write tell12984367
Ref: 3f0d12984367
Ref: library/wave wave Wave_write writeframesraw12984570
Ref: 102212984570
Ref: library/wave wave Wave_write writeframes12984777
Ref: 102312984777
Node: colorsys — Conversões entre sistemas de cores12985436
Ref: library/colorsys doc12985584
Ref: 3f0e12985584
Ref: library/colorsys colorsys-conversions-between-color-systems12985584
Ref: 3f0f12985584
Ref: library/colorsys module-colorsys12985584
Ref: 1f12985584
Ref: library/colorsys translation-repo12985584
Ref: 3f1012985584
Ref: library/colorsys colorsys rgb_to_yiq12986620
Ref: 3f1112986620
Ref: library/colorsys colorsys yiq_to_rgb12986727
Ref: 3f1212986727
Ref: library/colorsys colorsys rgb_to_hls12986834
Ref: 17f412986834
Ref: library/colorsys colorsys hls_to_rgb12986941
Ref: 3f1312986941
Ref: library/colorsys colorsys rgb_to_hsv12987048
Ref: 3f1412987048
Ref: library/colorsys colorsys hsv_to_rgb12987155
Ref: 3f1512987155
Ref: colorsys — Conversões entre sistemas de cores-Footnote-112987464
Node: Internacionalização12987532
Ref: library/i18n doc12987698
Ref: 3f1612987698
Ref: library/i18n i18n12987698
Ref: 3f1712987698
Ref: library/i18n internationalization12987698
Ref: 3f1812987698
Ref: library/i18n translation-repo12987698
Ref: 3f1912987698
Node: gettext — Serviços de internacionalização multilíngues12988193
Ref: library/gettext doc12988365
Ref: 3f1a12988365
Ref: library/gettext gettext-multilingual-internationalization-services12988365
Ref: 3f1b12988365
Ref: library/gettext module-gettext12988365
Ref: 6312988365
Ref: gettext — Serviços de internacionalização multilíngues-Footnote-112989399
Node: API do GNU gettext12989466
Ref: library/gettext gnu-gettext-api12989611
Ref: 3f1c12989611
Ref: library/gettext gettext bindtextdomain12990177
Ref: 3f1d12990177
Ref: library/gettext gettext textdomain12990759
Ref: 3f1e12990759
Ref: library/gettext gettext gettext12991026
Ref: 14b112991026
Ref: library/gettext gettext dgettext12991308
Ref: 3f1f12991308
Ref: library/gettext gettext ngettext12991454
Ref: 3f2012991454
Ref: library/gettext gettext dngettext12992226
Ref: 3f2112992226
Ref: library/gettext gettext pgettext12992386
Ref: 9fd12992386
Ref: library/gettext gettext dpgettext12992437
Ref: 3f2212992437
Ref: library/gettext gettext npgettext12992497
Ref: 3f2312992497
Ref: library/gettext gettext dnpgettext12992561
Ref: 3f2412992561
Ref: API do GNU gettext-Footnote-112993408
Ref: API do GNU gettext-Footnote-212993902
Node: API baseada em classe12993967
Ref: library/gettext class-based-api12994166
Ref: 3f2512994166
Ref: library/gettext gettext find12994716
Ref: 3f2712994716
Ref: library/gettext gettext translation12996244
Ref: a8312996244
Ref: library/gettext gettext install12997646
Ref: a8412997646
Ref: API baseada em classe-Footnote-112998725
Node: A classe NullTranslations12998804
Ref: library/gettext the-nulltranslations-class12998920
Ref: 3f2a12998920
Ref: library/gettext gettext NullTranslations12999420
Ref: 3f2812999420
Ref: library/gettext gettext NullTranslations _parse12999854
Ref: 3f2c12999854
Ref: library/gettext gettext NullTranslations add_fallback13000197
Ref: 3f2b13000197
Ref: library/gettext gettext NullTranslations gettext13000478
Ref: 3f2d13000478
Ref: library/gettext gettext NullTranslations ngettext13000698
Ref: 3f2e13000698
Ref: library/gettext gettext NullTranslations pgettext13000989
Ref: 3f2f13000989
Ref: library/gettext gettext NullTranslations npgettext13001275
Ref: 3f3013001275
Ref: library/gettext gettext NullTranslations info13001576
Ref: 3f3113001576
Ref: library/gettext gettext NullTranslations charset13001722
Ref: 3f3213001722
Ref: library/gettext gettext NullTranslations install13001825
Ref: 3f2913001825
Node: A classe GNUTranslations13003099
Ref: library/gettext the-gnutranslations-class13003267
Ref: 3f3313003267
Ref: library/gettext gettext GNUTranslations13004928
Ref: 3f2613004928
Ref: library/gettext gettext GNUTranslations gettext13005061
Ref: 3f3413005061
Ref: library/gettext gettext GNUTranslations ngettext13005496
Ref: 3f3513005496
Ref: library/gettext gettext GNUTranslations pgettext13006507
Ref: 3f3613006507
Ref: library/gettext gettext GNUTranslations npgettext13007019
Ref: 3f3713007019
Ref: A classe GNUTranslations-Footnote-113007743
Node: Suporte a catálogo de mensagens do Solaris13007801
Ref: library/gettext solaris-message-catalog-support13007964
Ref: 3f3813007964
Node: O construtor Catalog13008261
Ref: library/gettext the-catalog-constructor13008391
Ref: 3f3913008391
Node: Internacionalizando seus programas e módulos13009084
Ref: library/gettext i18n-howto13009283
Ref: 30a813009283
Ref: library/gettext internationalizing-your-programs-and-modules13009283
Ref: 3f3a13009283
Ref: Internacionalizando seus programas e módulos-Footnote-113013282
Ref: Internacionalizando seus programas e módulos-Footnote-213013315
Node: Localizando seu módulo13013358
Ref: library/gettext localizing-your-module13013499
Ref: 3f3b13013499
Node: Localizando sua aplicação13014113
Ref: library/gettext localizing-your-application13014297
Ref: 3f3c13014297
Node: Alterando os idiomas durante o uso13015080
Ref: library/gettext changing-languages-on-the-fly13015260
Ref: 3f3d13015260
Node: Traduções adiadas13015970
Ref: library/gettext deferred-translations13016114
Ref: 3f3e13016114
Node: Reconhecimentos<9>13018438
Ref: library/gettext acknowledgements13018607
Ref: 3f3f13018607
Node: locale — Serviços de internacionalização13019013
Ref: library/locale doc13019185
Ref: 3f4013019185
Ref: library/locale locale-internationalization-services13019185
Ref: 3f4113019185
Ref: library/locale module-locale13019185
Ref: 8613019185
Ref: library/locale translation-repo13019185
Ref: 3f4213019185
Ref: library/locale locale Error13019948
Ref: 3f4313019948
Ref: library/locale locale setlocale13020086
Ref: 2db13020086
Ref: library/locale locale localeconv13022172
Ref: c1813022172
Ref: library/locale locale nl_langinfo13030608
Ref: 3f4813030608
Ref: library/locale locale CODESET13031204
Ref: 3f4913031204
Ref: library/locale locale D_T_FMT13031349
Ref: 3f4a13031349
Ref: library/locale locale D_FMT13031584
Ref: 3f4b13031584
Ref: library/locale locale T_FMT13031810
Ref: 3f4c13031810
Ref: library/locale locale T_FMT_AMPM13032036
Ref: 3f4d13032036
Ref: library/locale locale DAY_113032196
Ref: 3f4e13032196
Ref: library/locale locale DAY_213032224
Ref: 3f4f13032224
Ref: library/locale locale DAY_313032252
Ref: 3f5013032252
Ref: library/locale locale DAY_413032280
Ref: 3f5113032280
Ref: library/locale locale DAY_513032308
Ref: 3f5213032308
Ref: library/locale locale DAY_613032336
Ref: 3f5313032336
Ref: library/locale locale DAY_713032364
Ref: 3f5413032364
Ref: library/locale locale ABDAY_113032659
Ref: 3f5513032659
Ref: library/locale locale ABDAY_213032689
Ref: 3f5613032689
Ref: library/locale locale ABDAY_313032719
Ref: 3f5713032719
Ref: library/locale locale ABDAY_413032749
Ref: 3f5813032749
Ref: library/locale locale ABDAY_513032779
Ref: 3f5913032779
Ref: library/locale locale ABDAY_613032809
Ref: 3f5a13032809
Ref: library/locale locale ABDAY_713032839
Ref: 3f5b13032839
Ref: library/locale locale MON_113032932
Ref: 3f5c13032932
Ref: library/locale locale MON_213032960
Ref: 3f5d13032960
Ref: library/locale locale MON_313032988
Ref: 3f5e13032988
Ref: library/locale locale MON_413033016
Ref: 3f5f13033016
Ref: library/locale locale MON_513033044
Ref: 3f6013033044
Ref: library/locale locale MON_613033072
Ref: 3f6113033072
Ref: library/locale locale MON_713033100
Ref: 3f6213033100
Ref: library/locale locale MON_813033128
Ref: 3f6313033128
Ref: library/locale locale MON_913033156
Ref: 3f6413033156
Ref: library/locale locale MON_1013033184
Ref: 3f6513033184
Ref: library/locale locale MON_1113033213
Ref: 3f6613033213
Ref: library/locale locale MON_1213033242
Ref: 3f6713033242
Ref: library/locale locale ABMON_113033322
Ref: 3f6813033322
Ref: library/locale locale ABMON_213033352
Ref: 3f6913033352
Ref: library/locale locale ABMON_313033382
Ref: 3f6a13033382
Ref: library/locale locale ABMON_413033412
Ref: 3f6b13033412
Ref: library/locale locale ABMON_513033442
Ref: 3f6c13033442
Ref: library/locale locale ABMON_613033472
Ref: 3f6d13033472
Ref: library/locale locale ABMON_713033502
Ref: 3f6e13033502
Ref: library/locale locale ABMON_813033532
Ref: 3f6f13033532
Ref: library/locale locale ABMON_913033562
Ref: 3f7013033562
Ref: library/locale locale ABMON_1013033592
Ref: 3f7113033592
Ref: library/locale locale ABMON_1113033623
Ref: 3f7213033623
Ref: library/locale locale ABMON_1213033654
Ref: 3f7313033654
Ref: library/locale locale RADIXCHAR13033746
Ref: 3f7413033746
Ref: library/locale locale THOUSEP13033877
Ref: 3f7513033877
Ref: library/locale locale YESEXPR13034000
Ref: 3f7613034000
Ref: library/locale locale NOEXPR13034195
Ref: 3f7713034195
Ref: library/locale locale CRNCYSTR13034666
Ref: 3f7813034666
Ref: library/locale locale ERA13034955
Ref: 3f7913034955
Ref: library/locale locale ERA_D_T_FMT13035793
Ref: 3f7a13035793
Ref: library/locale locale ERA_D_FMT13036010
Ref: 3f7b13036010
Ref: library/locale locale ERA_T_FMT13036218
Ref: 3f7c13036218
Ref: library/locale locale ALT_DIGITS13036426
Ref: 3f7d13036426
Ref: library/locale locale getdefaultlocale13036724
Ref: 2d913036724
Ref: library/locale locale getlocale13038203
Ref: 2da13038203
Ref: library/locale locale getpreferredencoding13038829
Ref: 53a13038829
Ref: library/locale locale getencoding13040081
Ref: 2dc13040081
Ref: library/locale locale normalize13040937
Ref: 3f8113040937
Ref: library/locale locale strcoll13041422
Ref: 3f8213041422
Ref: library/locale locale strxfrm13041751
Ref: 15f313041751
Ref: library/locale locale format_string13042136
Ref: 51f13042136
Ref: library/locale locale currency13042899
Ref: 3f8413042899
Ref: library/locale locale str13043593
Ref: 3f8513043593
Ref: library/locale locale delocalize13043787
Ref: e5213043787
Ref: library/locale locale localize13043985
Ref: 3f8613043985
Ref: library/locale locale atof13044224
Ref: 3f8713044224
Ref: library/locale locale atoi13044468
Ref: 3f8813044468
Ref: library/locale locale LC_CTYPE13044610
Ref: 3f7f13044610
Ref: library/locale locale LC_COLLATE13045402
Ref: 3f8313045402
Ref: library/locale locale LC_TIME13045610
Ref: 3f8913045610
Ref: library/locale locale LC_MONETARY13045767
Ref: 3f4713045767
Ref: library/locale locale LC_MESSAGES13045962
Ref: 3f8a13045962
Ref: library/locale locale LC_NUMERIC13046486
Ref: 3f4513046486
Ref: library/locale locale LC_ALL13046837
Ref: 3f7e13046837
Ref: library/locale locale CHAR_MAX13047381
Ref: 3f4613047381
Ref: locale — Serviços de internacionalização-Footnote-113047800
Ref: locale — Serviços de internacionalização-Footnote-213047866
Ref: locale — Serviços de internacionalização-Footnote-313047964
Ref: locale — Serviços de internacionalização-Footnote-413048006
Node: Histórico detalhes dicas dicas e advertências13048048
Ref: library/locale background-details-hints-tips-and-caveats13048206
Ref: 3f8b13048206
Node: Nomes de localidades13050701
Ref: library/locale locale-name13050930
Ref: 3f4413050930
Ref: library/locale locale-names13050930
Ref: 3f8c13050930
Ref: Nomes de localidades-Footnote-113052768
Ref: Nomes de localidades-Footnote-213052918
Ref: Nomes de localidades-Footnote-313052968
Ref: Nomes de localidades-Footnote-413053024
Ref: Nomes de localidades-Footnote-513053204
Ref: Nomes de localidades-Footnote-613053300
Ref: Nomes de localidades-Footnote-713053346
Node: Para escritores de extensão e programas que incorporam Python13053388
Ref: library/locale embedding-locale13053602
Ref: 3f8d13053602
Ref: library/locale for-extension-writers-and-programs-that-embed-python13053602
Ref: 3f8e13053602
Node: Acesso a catálogos de mensagens13054488
Ref: library/locale access-to-message-catalogs13054673
Ref: 3f8f13054673
Ref: library/locale locale-gettext13054673
Ref: 3f9013054673
Ref: library/locale locale gettext13054757
Ref: 3f9113054757
Ref: library/locale locale dgettext13054793
Ref: 3f9213054793
Ref: library/locale locale dcgettext13054838
Ref: 3f9313054838
Ref: library/locale locale textdomain13054894
Ref: 3f9413054894
Ref: library/locale locale bindtextdomain13054936
Ref: 3f9513054936
Ref: library/locale locale bind_textdomain_codeset13054987
Ref: 3f9613054987
Node: Interfaces gráficas de usuário com Tk13056017
Ref: library/tk doc13056192
Ref: 3f9713056192
Ref: library/tk graphical-user-interfaces-with-tk13056192
Ref: 3f9813056192
Ref: library/tk tkinter13056192
Ref: 3f9913056192
Ref: library/tk translation-repo13056192
Ref: 3f9a13056192
Ref: Interfaces gráficas de usuário com Tk-Footnote-113058256
Node: tkinter — Interface Python para Tcl/Tk13058308
Ref: library/tkinter doc13058484
Ref: 3f9b13058484
Ref: library/tkinter module-tkinter13058484
Ref: f013058484
Ref: library/tkinter tkinter-python-interface-to-tcl-tk13058484
Ref: 3f9c13058484
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-113061603
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-213061680
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-313061708
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-413061749
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-513061806
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-613061833
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-713061870
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-813061968
Ref: tkinter — Interface Python para Tcl/Tk-Footnote-913062020
Node: Arquitetura13062079
Ref: library/tkinter architecture13062192
Ref: 3f9d13062192
Ref: Arquitetura-Footnote-113064750
Node: Módulos Tkinter13064790
Ref: library/tkinter tkinter-modules13064939
Ref: 3f9f13064939
Ref: library/tkinter tkinter Tk13065295
Ref: 172213065295
Ref: library/tkinter tkinter Tk tk13067608
Ref: 3fa113067608
Ref: library/tkinter tkinter Tk master13067886
Ref: 3fa213067886
Ref: library/tkinter tkinter Tk children13068472
Ref: 3fa313068472
Ref: library/tkinter tkinter Tcl13068680
Ref: 3fa013068680
Ref: library/tkinter module-_tkinter13070375
Ref: 313070375
Node: Preservador de vida Tkinter13071339
Ref: library/tkinter tkinter-life-preserver13071496
Ref: 3fa413071496
Node: Um programa Olá Mundo13072371
Ref: library/tkinter a-hello-world-program13072493
Ref: 3fa513072493
Node: Conceitos importantes do Tk13074024
Ref: library/tkinter important-tk-concepts13074193
Ref: 3fa613074193
Node: Entendendo como Tkinter envolve Tcl/Tk13075706
Ref: library/tkinter understanding-how-tkinter-wraps-tcl-tk13075891
Ref: 3fa713075891
Node: Como é que eu…? Que opção faz…?13078118
Ref: library/tkinter how-do-i-what-option-does13078317
Ref: 3fa813078317
Node: Navegando no Manual de Referência Tcl/Tk13080234
Ref: library/tkinter navigating-the-tcl-tk-reference-manual13080386
Ref: 3fa913080386
Ref: Navegando no Manual de Referência Tcl/Tk-Footnote-113082708
Ref: Navegando no Manual de Referência Tcl/Tk-Footnote-213082765
Ref: Navegando no Manual de Referência Tcl/Tk-Footnote-313082824
Ref: Navegando no Manual de Referência Tcl/Tk-Footnote-413082877
Ref: Navegando no Manual de Referência Tcl/Tk-Footnote-513082933
Ref: Navegando no Manual de Referência Tcl/Tk-Footnote-613082992
Node: Modelo de threading13083046
Ref: library/tkinter threading-model13083204
Ref: 3f9e13083204
Node: Referência Útil13086625
Ref: library/tkinter handy-reference13086778
Ref: 3faa13086778
Node: Opções de Definição13087078
Ref: library/tkinter setting-options13087177
Ref: 3fab13087177
Ref: library/tkinter tkinter-setting-options13087177
Ref: 3fac13087177
Ref: Opções de Definição-Footnote-113090735
Node: O Empacotador13090782
Ref: library/tkinter the-packer13090913
Ref: 3fad13090913
Node: Opções do Empacotador13092634
Ref: library/tkinter packer-options13092773
Ref: 3fae13092773
Node: Acoplando Variáveis de Widgets13093493
Ref: library/tkinter coupling-widget-variables13093642
Ref: 3faf13093642
Node: O Gerenciador de Janela13095943
Ref: library/tkinter the-window-manager13096101
Ref: 3fb013096101
Node: Opções de Tipos de Dados do Tk13097585
Ref: library/tkinter tk-option-data-types13097732
Ref: 3fb113097732
Node: Ligações e Eventos13101070
Ref: library/tkinter bindings-and-events13101212
Ref: 3fb213101212
Ref: library/tkinter id213101212
Ref: 3fb313101212
Ref: Ligações e Eventos-Footnote-113104236
Node: O Parâmetro index13104282
Ref: library/tkinter the-index-parameter13104399
Ref: 3fb413104399
Node: Imagens13106562
Ref: library/tkinter images13106650
Ref: 3fb513106650
Ref: Imagens-Footnote-113108091
Node: Tratadores de arquivos13108126
Ref: library/tkinter file-handlers13108251
Ref: 3fb613108251
Ref: library/tkinter tkinter-file-handlers13108251
Ref: 3fb713108251
Ref: library/tkinter tkinter Widget tk createfilehandler13109297
Ref: 3fb813109297
Ref: library/tkinter tkinter Widget tk deletefilehandler13109776
Ref: 3fb913109776
Ref: library/tkinter tkinter READABLE13109877
Ref: 3fba13109877
Ref: library/tkinter tkinter WRITABLE13109905
Ref: 3fbb13109905
Ref: library/tkinter tkinter EXCEPTION13109933
Ref: 3fbc13109933
Node: tkinter colorchooser — Diálogo de escolha de cor13110010
Ref: library/tkinter colorchooser doc13110240
Ref: 3fbd13110240
Ref: library/tkinter colorchooser module-tkinter colorchooser13110240
Ref: f113110240
Ref: library/tkinter colorchooser tkinter-colorchooser-color-choosing-dialog13110240
Ref: 3fbe13110240
Ref: library/tkinter colorchooser translation-repo13110240
Ref: 3fbf13110240
Ref: library/tkinter colorchooser tkinter colorchooser Chooser13110760
Ref: 3fc013110760
Ref: library/tkinter colorchooser tkinter colorchooser askcolor13110827
Ref: 3fc213110827
Ref: tkinter colorchooser — Diálogo de escolha de cor-Footnote-113111249
Node: tkinter font — Invólucro de fontes Tkinter13111330
Ref: library/tkinter font doc13111537
Ref: 3fc313111537
Ref: library/tkinter font module-tkinter font13111537
Ref: f513111537
Ref: library/tkinter font tkinter-font-tkinter-font-wrapper13111537
Ref: 3fc413111537
Ref: library/tkinter font translation-repo13111537
Ref: 3fc513111537
Ref: library/tkinter font tkinter font NORMAL13111933
Ref: 3fc613111933
Ref: library/tkinter font tkinter font BOLD13111963
Ref: 3fc713111963
Ref: library/tkinter font tkinter font ITALIC13111991
Ref: 3fc813111991
Ref: library/tkinter font tkinter font ROMAN13112021
Ref: 3fc913112021
Ref: library/tkinter font tkinter font Font13112051
Ref: 1a5a13112051
Ref: library/tkinter font tkinter font Font actual13113527
Ref: 3fca13113527
Ref: library/tkinter font tkinter font Font cget13113625
Ref: 3fcb13113625
Ref: library/tkinter font tkinter font Font config13113700
Ref: 3fcc13113700
Ref: library/tkinter font tkinter font Font copy13113778
Ref: 3fcd13113778
Ref: library/tkinter font tkinter font Font measure13113860
Ref: 3fce13113860
Ref: library/tkinter font tkinter font Font metrics13114175
Ref: 3fcf13114175
Ref: library/tkinter font tkinter font families13114821
Ref: 3fd013114821
Ref: library/tkinter font tkinter font names13114935
Ref: 3fd113114935
Ref: library/tkinter font tkinter font nametofont13115026
Ref: 1a5c13115026
Ref: tkinter font — Invólucro de fontes Tkinter-Footnote-113115270
Node: Diálogos Tkinter13115342
Ref: library/dialog doc13115551
Ref: 3fd213115551
Ref: library/dialog tkinter-dialogs13115551
Ref: 3fd313115551
Ref: library/dialog translation-repo13115551
Ref: 3fd413115551
Node: tkinter simpledialog — Diálogos de entrada padrão do Tkinter13115995
Ref: library/dialog module-tkinter simpledialog13116187
Ref: f813116187
Ref: library/dialog tkinter-simpledialog-standard-tkinter-input-dialogs13116187
Ref: 3fd513116187
Ref: library/dialog tkinter simpledialog askfloat13116614
Ref: 3fd613116614
Ref: library/dialog tkinter simpledialog askinteger13116680
Ref: 1a5d13116680
Ref: library/dialog tkinter simpledialog askstring13116748
Ref: 3fd713116748
Ref: library/dialog tkinter simpledialog Dialog13116943
Ref: 3fd813116943
Ref: library/dialog tkinter simpledialog Dialog body13117056
Ref: 3fd913117056
Ref: library/dialog tkinter simpledialog Dialog buttonbox13117215
Ref: 3fda13117215
Ref: tkinter simpledialog — Diálogos de entrada padrão do Tkinter-Footnote-113117409
Node: tkinter filedialog — Caixas de diálogo de seleção de arquivo13117490
Ref: library/dialog module-tkinter filedialog13117745
Ref: f413117745
Ref: library/dialog tkinter-filedialog-file-selection-dialogs13117745
Ref: 3fdb13117745
Ref: tkinter filedialog — Caixas de diálogo de seleção de arquivo-Footnote-113118248
Node: Caixas de diálogo nativos de carregar/salvar13118327
Ref: library/dialog native-load-save-dialogs13118474
Ref: 3fdc13118474
Ref: library/dialog tkinter filedialog askopenfile13119657
Ref: 3fdd13119657
Ref: library/dialog tkinter filedialog askopenfiles13119724
Ref: 3fde13119724
Ref: library/dialog tkinter filedialog asksaveasfile13119974
Ref: 3fe013119974
Ref: library/dialog tkinter filedialog askopenfilename13120162
Ref: 3fe213120162
Ref: library/dialog tkinter filedialog askopenfilenames13120223
Ref: 3fe313120223
Ref: library/dialog tkinter filedialog asksaveasfilename13120467
Ref: 3fe413120467
Ref: library/dialog tkinter filedialog askdirectory13120630
Ref: 3fe513120630
Ref: library/dialog tkinter filedialog Open13120888
Ref: 3fdf13120888
Ref: library/dialog tkinter filedialog SaveAs13120949
Ref: 3fe113120949
Ref: library/dialog tkinter filedialog Directory13121285
Ref: 3fe613121285
Ref: library/dialog tkinter filedialog FileDialog13121566
Ref: 3fe713121566
Ref: library/dialog tkinter filedialog FileDialog cancel_command13121696
Ref: 3fe813121696
Ref: library/dialog tkinter filedialog FileDialog dirs_double_event13121799
Ref: 3fe913121799
Ref: library/dialog tkinter filedialog FileDialog dirs_select_event13121931
Ref: 3fea13121931
Ref: library/dialog tkinter filedialog FileDialog files_double_event13122047
Ref: 3feb13122047
Ref: library/dialog tkinter filedialog FileDialog files_select_event13122167
Ref: 3fec13122167
Ref: library/dialog tkinter filedialog FileDialog filter_command13122288
Ref: 3fed13122288
Ref: library/dialog tkinter filedialog FileDialog get_filter13122381
Ref: 3fee13122381
Ref: library/dialog tkinter filedialog FileDialog get_selection13122473
Ref: 3fef13122473
Ref: library/dialog tkinter filedialog FileDialog go13122560
Ref: 3ff013122560
Ref: library/dialog tkinter filedialog FileDialog ok_event13122733
Ref: 3ff113122733
Ref: library/dialog tkinter filedialog FileDialog quit13122835
Ref: 3ff213122835
Ref: library/dialog tkinter filedialog FileDialog set_filter13122957
Ref: 3ff313122957
Ref: library/dialog tkinter filedialog FileDialog set_selection13123037
Ref: 3ff413123037
Ref: library/dialog tkinter filedialog LoadFileDialog13123139
Ref: 3ff513123139
Ref: library/dialog tkinter filedialog LoadFileDialog ok_command13123316
Ref: 3ff613123316
Ref: library/dialog tkinter filedialog SaveFileDialog13123453
Ref: 3ff713123453
Ref: library/dialog tkinter filedialog SaveFileDialog ok_command13123631
Ref: 3ff813123631
Node: tkinter commondialog — Modelos de janela de diálogo13123859
Ref: library/dialog module-tkinter commondialog13124041
Ref: f213124041
Ref: library/dialog tkinter-commondialog-dialog-window-templates13124041
Ref: 3ff913124041
Ref: library/dialog tkinter commondialog Dialog13124451
Ref: 3fc113124451
Ref: library/dialog tkinter commondialog Dialog show13124517
Ref: 3ffa13124517
Ref: tkinter commondialog — Modelos de janela de diálogo-Footnote-113124739
Node: tkinter messagebox — Prompts de mensagem do Tkinter13124820
Ref: library/tkinter messagebox doc13125034
Ref: 3ffb13125034
Ref: library/tkinter messagebox module-tkinter messagebox13125034
Ref: f613125034
Ref: library/tkinter messagebox tkinter-messagebox-tkinter-message-prompts13125034
Ref: 3ffc13125034
Ref: library/tkinter messagebox translation-repo13125034
Ref: 3ffd13125034
Ref: library/tkinter messagebox tkinter messagebox Message13125789
Ref: 400213125789
Ref: library/tkinter messagebox tkinter messagebox Message show13128110
Ref: 400713128110
Ref: library/tkinter messagebox tkinter messagebox showinfo13128442
Ref: 400813128442
Ref: library/tkinter messagebox tkinter messagebox showwarning13128668
Ref: 400913128668
Ref: library/tkinter messagebox tkinter messagebox showerror13128860
Ref: 400a13128860
Ref: library/tkinter messagebox tkinter messagebox askquestion13129081
Ref: 400b13129081
Ref: library/tkinter messagebox tkinter messagebox askokcancel13129335
Ref: 400c13129335
Ref: library/tkinter messagebox tkinter messagebox askretrycancel13129622
Ref: 400d13129622
Ref: library/tkinter messagebox tkinter messagebox askyesno13129921
Ref: 400f13129921
Ref: library/tkinter messagebox tkinter messagebox askyesnocancel13130173
Ref: 401013130173
Ref: library/tkinter messagebox messagebox-buttons13130476
Ref: 400313130476
Ref: library/tkinter messagebox tkinter messagebox ABORT13130508
Ref: 401113130508
Ref: library/tkinter messagebox tkinter messagebox RETRY13130554
Ref: 400e13130554
Ref: library/tkinter messagebox tkinter messagebox IGNORE13130600
Ref: 401213130600
Ref: library/tkinter messagebox tkinter messagebox OK13130648
Ref: 3ffe13130648
Ref: library/tkinter messagebox tkinter messagebox CANCEL13130688
Ref: 3fff13130688
Ref: library/tkinter messagebox tkinter messagebox YES13130736
Ref: 400013130736
Ref: library/tkinter messagebox tkinter messagebox NO13130778
Ref: 400113130778
Ref: library/tkinter messagebox messagebox-types13130817
Ref: 400613130817
Ref: library/tkinter messagebox tkinter messagebox ABORTRETRYIGNORE13130851
Ref: 401313130851
Ref: library/tkinter messagebox tkinter messagebox OKCANCEL13131141
Ref: 401413131141
Ref: library/tkinter messagebox tkinter messagebox RETRYCANCEL13131290
Ref: 401513131290
Ref: library/tkinter messagebox tkinter messagebox YESNO13131448
Ref: 401613131448
Ref: library/tkinter messagebox tkinter messagebox YESNOCANCEL13131588
Ref: 401713131588
Ref: library/tkinter messagebox messagebox-icons13131760
Ref: 400413131760
Ref: library/tkinter messagebox tkinter messagebox ERROR13131781
Ref: 401813131781
Ref: library/tkinter messagebox tkinter messagebox INFO13131827
Ref: 400513131827
Ref: library/tkinter messagebox tkinter messagebox QUESTION13131871
Ref: 401913131871
Ref: library/tkinter messagebox tkinter messagebox WARNING13131923
Ref: 401a13131923
Ref: tkinter messagebox — Prompts de mensagem do Tkinter-Footnote-113132009
Node: tkinter scrolledtext — Widget de texto de rolado13132088
Ref: library/tkinter scrolledtext doc13132331
Ref: 401b13132331
Ref: library/tkinter scrolledtext module-tkinter scrolledtext13132331
Ref: f713132331
Ref: library/tkinter scrolledtext tkinter-scrolledtext-scrolled-text-widget13132331
Ref: 401c13132331
Ref: library/tkinter scrolledtext translation-repo13132331
Ref: 401d13132331
Ref: library/tkinter scrolledtext tkinter scrolledtext ScrolledText13133329
Ref: 401e13133329
Ref: library/tkinter scrolledtext tkinter scrolledtext ScrolledText frame13133396
Ref: 401f13133396
Ref: library/tkinter scrolledtext tkinter scrolledtext ScrolledText vbar13133494
Ref: 402013133494
Ref: tkinter scrolledtext — Widget de texto de rolado-Footnote-113133596
Node: tkinter dnd — Suporte para arrastar e soltar13133677
Ref: library/tkinter dnd doc13133907
Ref: 402113133907
Ref: library/tkinter dnd module-tkinter dnd13133907
Ref: f313133907
Ref: library/tkinter dnd tkinter-dnd-drag-and-drop-support13133907
Ref: 402213133907
Ref: library/tkinter dnd translation-repo13133907
Ref: 402313133907
Ref: library/tkinter dnd tkinter dnd DndHandler13135581
Ref: 402513135581
Ref: library/tkinter dnd tkinter dnd DndHandler cancel13135783
Ref: 402613135783
Ref: library/tkinter dnd tkinter dnd DndHandler finish13135874
Ref: 402713135874
Ref: library/tkinter dnd tkinter dnd DndHandler on_motion13135979
Ref: 402813135979
Ref: library/tkinter dnd tkinter dnd DndHandler on_release13136124
Ref: 402913136124
Ref: library/tkinter dnd tkinter dnd dnd_start13136255
Ref: 402413136255
Ref: tkinter dnd — Suporte para arrastar e soltar-Footnote-113136466
Node: tkinter ttk — Widgets temáticos do Tk13136537
Ref: library/tkinter ttk doc13136752
Ref: 402a13136752
Ref: library/tkinter ttk module-tkinter ttk13136752
Ref: f913136752
Ref: library/tkinter ttk tkinter-ttk-tk-themed-widgets13136752
Ref: 402b13136752
Ref: library/tkinter ttk translation-repo13136752
Ref: 402c13136752
Ref: tkinter ttk — Widgets temáticos do Tk-Footnote-113137755
Ref: tkinter ttk — Widgets temáticos do Tk-Footnote-213137826
Node: Usando Ttk13137879
Ref: library/tkinter ttk using-ttk13137986
Ref: 402d13137986
Ref: Usando Ttk-Footnote-113139282
Node: Widgets Ttk13139346
Ref: library/tkinter ttk ttk-widgets13139468
Ref: 402e13139468
Node: Widget13140612
Ref: library/tkinter ttk widget13140732
Ref: 403413140732
Node: Opções padrão13141069
Ref: library/tkinter ttk standard-options13141168
Ref: 403513141168
Node: Opções de ferramenta rolável13142757
Ref: library/tkinter ttk scrollable-widget-options13142884
Ref: 403613142884
Node: Opções de rótulo13144050
Ref: library/tkinter ttk label-options13144188
Ref: 403713144188
Node: Opções de compatibilidade13146691
Ref: library/tkinter ttk compatibility-options13146815
Ref: 403813146815
Node: Estados de Widget13147318
Ref: library/tkinter ttk widget-states13147433
Ref: 403a13147433
Node: ttk Widget13149072
Ref: library/tkinter ttk ttk-widget13149151
Ref: 403b13149151
Ref: library/tkinter ttk tkinter ttk Widget13149349
Ref: 403213149349
Ref: library/tkinter ttk tkinter ttk Widget identify13149381
Ref: 403c13149381
Ref: library/tkinter ttk tkinter ttk Widget instate13149623
Ref: 403d13149623
Ref: library/tkinter ttk tkinter ttk Widget state13149968
Ref: 403913149968
Node: Combobox13150357
Ref: library/tkinter ttk combobox13150473
Ref: 403e13150473
Node: Opções13151179
Ref: library/tkinter ttk options13151257
Ref: 403f13151257
Node: Eventos virtuais13153603
Ref: library/tkinter ttk virtual-events13153702
Ref: 404013153702
Node: ttk Combobox13153886
Ref: library/tkinter ttk ttk-combobox13153968
Ref: 404113153968
Ref: library/tkinter ttk tkinter ttk Combobox13154015
Ref: 402f13154015
Ref: library/tkinter ttk tkinter ttk Combobox current13154049
Ref: 404213154049
Ref: library/tkinter ttk tkinter ttk Combobox get13154326
Ref: 404313154326
Ref: library/tkinter ttk tkinter ttk Combobox set13154398
Ref: 404413154398
Node: Spinbox13154483
Ref: library/tkinter ttk spinbox13154601
Ref: 404513154601
Node: Opções<2>13155367
Ref: library/tkinter ttk id113155450
Ref: 404613155450
Node: Eventos virtuais<2>13157841
Ref: library/tkinter ttk id213157944
Ref: 404713157944
Node: ttk Spinbox13158156
Ref: library/tkinter ttk ttk-spinbox13158239
Ref: 404813158239
Ref: library/tkinter ttk tkinter ttk Spinbox13158284
Ref: bac13158284
Ref: library/tkinter ttk tkinter ttk Spinbox get13158317
Ref: 404913158317
Ref: library/tkinter ttk tkinter ttk Spinbox set13158396
Ref: 404a13158396
Node: Notebook13158480
Ref: library/tkinter ttk notebook13158601
Ref: 404b13158601
Node: Opções<3>13158963
Ref: library/tkinter ttk id313159039
Ref: 404c13159039
Node: Tab Options13160119
Ref: library/tkinter ttk tab-options13160219
Ref: 404d13160219
Node: Tab Identifiers13162106
Ref: library/tkinter ttk tab-identifiers13162209
Ref: 404f13162209
Node: Virtual Events13162743
Ref: library/tkinter ttk id413162847
Ref: 405113162847
Node: ttk Notebook13162991
Ref: library/tkinter ttk ttk-notebook13163071
Ref: 405213163071
Ref: library/tkinter ttk tkinter ttk Notebook13163118
Ref: 403013163118
Ref: library/tkinter ttk tkinter ttk Notebook add13163152
Ref: 405313163152
Ref: library/tkinter ttk tkinter ttk Notebook forget13163438
Ref: 405413163438
Ref: library/tkinter ttk tkinter ttk Notebook hide13163577
Ref: 405513163577
Ref: library/tkinter ttk tkinter ttk Notebook identify13163888
Ref: 405613163888
Ref: library/tkinter ttk tkinter ttk Notebook index13164031
Ref: 405013164031
Ref: library/tkinter ttk tkinter ttk Notebook insert13164211
Ref: 405713164211
Ref: library/tkinter ttk tkinter ttk Notebook select13164597
Ref: 405813164597
Ref: library/tkinter ttk tkinter ttk Notebook tab13164912
Ref: 405913164912
Ref: library/tkinter ttk tkinter ttk Notebook tabs13165259
Ref: 405a13165259
Ref: library/tkinter ttk tkinter ttk Notebook enable_traversal13165348
Ref: 404e13165348
Node: Progressbar13166200
Ref: library/tkinter ttk progressbar13166323
Ref: 405b13166323
Node: Opções<4>13166766
Ref: library/tkinter ttk id513166849
Ref: 405c13166849
Node: ttk Progressbar13168555
Ref: library/tkinter ttk ttk-progressbar13168638
Ref: 405d13168638
Ref: library/tkinter ttk tkinter ttk Progressbar13168691
Ref: 403113168691
Ref: library/tkinter ttk tkinter ttk Progressbar start13168728
Ref: 405e13168728
Ref: library/tkinter ttk tkinter ttk Progressbar step13168997
Ref: 405f13168997
Ref: library/tkinter ttk tkinter ttk Progressbar stop13169145
Ref: 406013169145
Node: Separator13169331
Ref: library/tkinter ttk separator13169454
Ref: 406113169454
Node: Opções<5>13169686
Ref: library/tkinter ttk id613169743
Ref: 406213169743
Node: Sizegrip13170099
Ref: library/tkinter ttk sizegrip13170219
Ref: 406313170219
Node: Platform-specific notes13170569
Ref: library/tkinter ttk platform-specific-notes13170650
Ref: 406413170650
Node: Bugs13170906
Ref: library/tkinter ttk bugs13170987
Ref: 406513170987
Node: Treeview13171260
Ref: library/tkinter ttk treeview13171382
Ref: 406613171382
Node: Opções<6>13172742
Ref: library/tkinter ttk id713172819
Ref: 406a13172819
Node: Item Options13175240
Ref: library/tkinter ttk item-options13175337
Ref: 406b13175337
Node: Tag Options13176395
Ref: library/tkinter ttk tag-options13176499
Ref: 406c13176499
Node: Column Identifiers13177151
Ref: library/tkinter ttk column-identifiers13177260
Ref: 406713177260
Node: Virtual Events<2>13178132
Ref: library/tkinter ttk id813178242
Ref: 406d13178242
Node: ttk Treeview13179074
Ref: library/tkinter ttk ttk-treeview13179157
Ref: 406f13179157
Ref: library/tkinter ttk tkinter ttk Treeview13179204
Ref: a9f13179204
Ref: library/tkinter ttk tkinter ttk Treeview bbox13179238
Ref: 407013179238
Ref: library/tkinter ttk tkinter ttk Treeview get_children13179676
Ref: 407113179676
Ref: library/tkinter ttk tkinter ttk Treeview set_children13179843
Ref: 407213179843
Ref: library/tkinter ttk tkinter ttk Treeview column13180236
Ref: 407313180236
Ref: library/tkinter ttk tkinter ttk Treeview delete13181482
Ref: 407413181482
Ref: library/tkinter ttk tkinter ttk Treeview detach13181629
Ref: 407513181629
Ref: library/tkinter ttk tkinter ttk Treeview exists13181941
Ref: 407613181941
Ref: library/tkinter ttk tkinter ttk Treeview focus13182052
Ref: 406e13182052
Ref: library/tkinter ttk tkinter ttk Treeview heading13182246
Ref: 407713182246
Ref: library/tkinter ttk tkinter ttk Treeview identify13183238
Ref: 407813183238
Ref: library/tkinter ttk tkinter ttk Treeview identify_row13183476
Ref: 407913183476
Ref: library/tkinter ttk tkinter ttk Treeview identify_column13183572
Ref: 407a13183572
Ref: library/tkinter ttk tkinter ttk Treeview identify_region13183734
Ref: 407b13183734
Ref: library/tkinter ttk tkinter ttk Treeview identify_element13184371
Ref: 407c13184371
Ref: library/tkinter ttk tkinter ttk Treeview index13184500
Ref: 407d13184500
Ref: library/tkinter ttk tkinter ttk Treeview insert13184629
Ref: 407e13184629
Ref: library/tkinter ttk tkinter ttk Treeview item13185528
Ref: 407f13185528
Ref: library/tkinter ttk tkinter ttk Treeview move13185907
Ref: 408013185907
Ref: library/tkinter ttk tkinter ttk Treeview next13186346
Ref: 408113186346
Ref: library/tkinter ttk tkinter ttk Treeview parent13186502
Ref: 408213186502
Ref: library/tkinter ttk tkinter ttk Treeview prev13186654
Ref: 408313186654
Ref: library/tkinter ttk tkinter ttk Treeview reattach13186815
Ref: 408413186815
Ref: library/tkinter ttk tkinter ttk Treeview see13186918
Ref: 408513186918
Ref: library/tkinter ttk tkinter ttk Treeview selection13187175
Ref: a9e13187175
Ref: library/tkinter ttk tkinter ttk Treeview selection_set13187425
Ref: aa013187425
Ref: library/tkinter ttk tkinter ttk Treeview selection_add13187632
Ref: 408613187632
Ref: library/tkinter ttk tkinter ttk Treeview selection_remove13187834
Ref: 408713187834
Ref: library/tkinter ttk tkinter ttk Treeview selection_toggle13188044
Ref: 408813188044
Ref: library/tkinter ttk tkinter ttk Treeview set13188271
Ref: 408913188271
Ref: library/tkinter ttk tkinter ttk Treeview tag_bind13188637
Ref: 408a13188637
Ref: library/tkinter ttk tkinter ttk Treeview tag_configure13188908
Ref: 408b13188908
Ref: library/tkinter ttk tkinter ttk Treeview tag_has13189338
Ref: 408c13189338
Ref: library/tkinter ttk tkinter ttk Treeview xview13189624
Ref: 406813189624
Ref: library/tkinter ttk tkinter ttk Treeview yview13189721
Ref: 406913189721
Node: Ttk Styling13189816
Ref: library/tkinter ttk ttk-styling13189921
Ref: 408d13189921
Ref: library/tkinter ttk ttkstyling13189921
Ref: 403313189921
Ref: library/tkinter ttk tkinter ttk Style13190518
Ref: 25913190518
Ref: library/tkinter ttk tkinter ttk Style configure13190608
Ref: 408e13190608
Ref: library/tkinter ttk tkinter ttk Style map13191336
Ref: 1a7313191336
Ref: library/tkinter ttk tkinter ttk Style lookup13192602
Ref: 408f13192602
Ref: library/tkinter ttk tkinter ttk Style layout13193124
Ref: 409013193124
Ref: library/tkinter ttk tkinter ttk Style element_create13194437
Ref: 25813194437
Ref: library/tkinter ttk tkinter ttk Style element_names13199812
Ref: 409213199812
Ref: library/tkinter ttk tkinter ttk Style element_options13199918
Ref: 409313199918
Ref: library/tkinter ttk tkinter ttk Style theme_create13200025
Ref: 409413200025
Ref: library/tkinter ttk tkinter ttk Style theme_settings13200439
Ref: 409513200439
Ref: library/tkinter ttk tkinter ttk Style theme_names13201916
Ref: 409613201916
Ref: library/tkinter ttk tkinter ttk Style theme_use13201997
Ref: 409713201997
Ref: Ttk Styling-Footnote-113202295
Node: Layouts13202357
Ref: library/tkinter ttk layouts13202412
Ref: 409113202412
Ref: library/tkinter ttk layout13203484
Ref: 409813203484
Node: IDLE — editor e console Python<2>13203485
Ref: library/idle doc13203684
Ref: 409913203684
Ref: library/idle idle13203684
Ref: 104b13203684
Ref: library/idle idle-python-editor-and-shell13203684
Ref: 409a13203684
Ref: library/idle translation-repo13203684
Ref: 409b13203684
Ref: IDLE — editor e console Python<2>-Footnote-113205217
Node: Menus13205282
Ref: library/idle menus13205390
Ref: 409c13205390
Node: Menu File Console e editor13206753
Ref: library/idle file-menu-shell-and-editor13206854
Ref: 409d13206854
Node: Menu Edit Shell e Editor13208970
Ref: library/idle edit-menu-shell-and-editor13209119
Ref: 409e13209119
Node: Menu Format Somente na janela do Editor13211057
Ref: library/idle format-menu13211207
Ref: 40a113211207
Ref: library/idle format-menu-editor-window-only13211207
Ref: 40a213211207
Node: Run menu Editor window only13212736
Ref: library/idle run-menu-editor-window-only13212890
Ref: 40a413212890
Ref: library/idle run-module13212969
Ref: 40a513212969
Ref: library/idle run-custom13213461
Ref: 40a713213461
Ref: library/idle check-module13213721
Ref: 40a613213721
Ref: library/idle python-shell13214065
Ref: 40a813214065
Node: Shell menu Shell window only13214127
Ref: library/idle shell-menu-shell-window-only13214270
Ref: 40a913214270
Node: Debug menu Shell window only13214787
Ref: library/idle debug-menu-shell-window-only13214932
Ref: 40aa13214932
Node: Options menu Shell and Editor13215888
Ref: library/idle options-menu-shell-and-editor13216033
Ref: 40ab13216033
Node: Window menu Shell and Editor13217650
Ref: library/idle window-menu-shell-and-editor13217793
Ref: 40ae13217793
Node: Help menu Shell and Editor13217985
Ref: library/idle help-menu-shell-and-editor13218112
Ref: 40af13218112
Node: Context menus13218832
Ref: library/idle context-menus13218922
Ref: 40b113218922
Node: Editing and Navigation13220127
Ref: library/idle editing-and-navigation13220270
Ref: 40b213220270
Ref: library/idle id113220270
Ref: 40b313220270
Node: Editor windows13220547
Ref: library/idle editor-windows13220645
Ref: 40b413220645
Node: Teclas de atalho13221267
Ref: library/idle key-bindings13221398
Ref: 40b513221398
Node: Indentação automática13222825
Ref: library/idle automatic-indentation13222964
Ref: 40b613222964
Node: Busca e Substituição13223630
Ref: library/idle search-and-replace13223764
Ref: 40b713223764
Node: Completions13224104
Ref: library/idle completions13224230
Ref: 409f13224230
Ref: library/idle id213224230
Ref: 40b813224230
Node: Dicas de chamada13226880
Ref: library/idle calltips13226996
Ref: 40a013226996
Ref: library/idle id313226996
Ref: 40b913226996
Node: Format block13228638
Ref: library/idle format-block13228755
Ref: 40a313228755
Ref: library/idle id413228755
Ref: 40ba13228755
Node: Code Context13229278
Ref: library/idle code-context13229391
Ref: 40ad13229391
Ref: library/idle id513229391
Ref: 40bb13229391
Node: Shell window13230279
Ref: library/idle shell-window13230391
Ref: 40bc13230391
Node: Text colors13232070
Ref: library/idle text-colors13232161
Ref: 40bd13232161
Node: Startup and Code Execution13233194
Ref: library/idle startup-and-code-execution13233352
Ref: 40be13233352
Node: Uso na linha de comando<5>13234515
Ref: library/idle command-line-usage13234628
Ref: 40bf13234628
Ref: library/idle idlelib-cli13234628
Ref: 40c013234628
Ref: library/idle cmdoption-idle-c13234869
Ref: 40c113234869
Ref: library/idle cmdoption-idle-d13235081
Ref: 40c213235081
Ref: library/idle cmdoption-idle-e13235150
Ref: 40c313235150
Ref: library/idle cmdoption-idle-h13235195
Ref: 40c413235195
Ref: library/idle cmdoption-idle-i13235283
Ref: 40c513235283
Ref: library/idle cmdoption-idle-r13235326
Ref: 40c613235326
Ref: library/idle cmdoption-idle-s13235399
Ref: 40c713235399
Ref: library/idle cmdoption-idle-t13235574
Ref: 40c813235574
Ref: library/idle cmdoption-idle-013235639
Ref: 40c913235639
Node: Startup failure13236226
Ref: library/idle startup-failure13236365
Ref: 40ca13236365
Node: Running user code13239552
Ref: library/idle running-user-code13239685
Ref: 40cb13239685
Node: User output in Shell13242469
Ref: library/idle user-output-in-shell13242618
Ref: 40cc13242618
Node: Developing tkinter applications13245704
Ref: library/idle developing-tkinter-applications13245864
Ref: 40cd13245864
Node: Running without a subprocess13247113
Ref: library/idle running-without-a-subprocess13247244
Ref: 40ce13247244
Node: Help and Preferences13248631
Ref: library/idle help-and-preferences13248813
Ref: 40cf13248813
Node: Help sources13248960
Ref: library/idle help-sources13249057
Ref: 40b013249057
Ref: library/idle id613249057
Ref: 40d013249057
Node: Setting preferences13249927
Ref: library/idle preferences13250046
Ref: 40ac13250046
Ref: library/idle setting-preferences13250046
Ref: 40d113250046
Node: IDLE on macOS13251055
Ref: library/idle idle-on-macos13251172
Ref: 40d213251172
Node: Extensions13251439
Ref: library/idle extensions13251528
Ref: 40d313251528
Node: idlelib — implementation of IDLE application13251879
Ref: library/idle idlelib-implementation-of-idle-application13252026
Ref: 40d413252026
Ref: library/idle module-idlelib13252026
Ref: 7313252026
Ref: idlelib — implementation of IDLE application-Footnote-113252734
Ref: idlelib — implementation of IDLE application-Footnote-213252798
Node: turtle — Gráficos tartaruga13252840
Ref: library/turtle doc13252990
Ref: 40d513252990
Ref: library/turtle module-turtle13252990
Ref: 10113252990
Ref: library/turtle translation-repo13252990
Ref: 40d613252990
Ref: library/turtle turtle-turtle-graphics13252990
Ref: 40d713252990
Ref: turtle — Gráficos tartaruga-Footnote-113253811
Node: Introdução<11>13253877
Ref: library/turtle introduction13253982
Ref: 40d813253982
Ref: Introdução<11>-Footnote-113254258
Node: Começando<2>13254301
Ref: library/turtle get-started13254426
Ref: 40d913254426
Node: Tutorial<4>13255767
Ref: library/turtle turtle-tutorial13255889
Ref: 40da13255889
Ref: library/turtle tutorial13255889
Ref: 40db13255889
Node: Iniciando um ambiente da tartaruga13256176
Ref: library/turtle starting-a-turtle-environment13256282
Ref: 40dc13256282
Node: Desenho básico13256667
Ref: library/turtle basic-drawing13256817
Ref: 40dd13256817
Node: Controle da Caneta13257543
Ref: library/turtle pen-control13257646
Ref: 40de13257646
Node: A posição da tartaruga13258005
Ref: library/turtle the-turtle-s-position13258108
Ref: 40df13258108
Node: Criação de padrões algorítmicos13258613
Ref: library/turtle making-algorithmic-patterns13258720
Ref: 40e013258720
Node: Como fazer…13259845
Ref: library/turtle how-to13259988
Ref: 40e113259988
Ref: library/turtle turtle-how-to13259988
Ref: 40e213259988
Node: Comece o mais rápido possível13260359
Ref: library/turtle get-started-as-quickly-as-possible13260489
Ref: 40e313260489
Ref: library/turtle note13261358
Ref: 40e413261358
Node: Use o espaço de nomes do módulo turtle13261684
Ref: library/turtle use-the-turtle-module-namespace13261902
Ref: 40e513261902
Node: Use o módulo gráfico de tartaruga dentro de um script com código específico13262963
Ref: library/turtle use-turtle-graphics-in-a-script13263206
Ref: 40e613263206
Node: Use o módulo gráficos da tartaruga orientado a objetos13264126
Ref: library/turtle use-object-oriented-turtle-graphics13264320
Ref: 40e713264320
Node: Referência Gráficos de Tartaruga13265701
Ref: library/turtle turtle-graphics-reference13265889
Ref: 40ea13265889
Node: Métodos de Turtle13266238
Ref: library/turtle turtle-methods13266367
Ref: 40eb13266367
Node: Métodos de TurtleScreen/Screen13269461
Ref: library/turtle methods-of-turtlescreen-screen13269590
Ref: 413813269590
Node: Métodos de RawTurtle/Turtle e funções correspondentes13270951
Ref: library/turtle methods-of-rawturtle-turtle-and-corresponding-functions13271188
Ref: 415713271188
Node: Movimentos de Turtle13271659
Ref: library/turtle turtle-motion13271804
Ref: 415813271804
Ref: library/turtle turtle forward13271869
Ref: 32f113271869
Ref: library/turtle turtle fd13271909
Ref: 40ec13271909
Ref: library/turtle turtle back13272371
Ref: 40ef13272371
Ref: library/turtle turtle bk13272408
Ref: 40ee13272408
Ref: library/turtle turtle backward13272443
Ref: 40ed13272443
Ref: library/turtle turtle right13272836
Ref: 40f013272836
Ref: library/turtle turtle rt13272871
Ref: 40f113272871
Ref: library/turtle turtle left13273392
Ref: 40f213273392
Ref: library/turtle turtle lt13273426
Ref: 40f313273426
Ref: library/turtle turtle goto13273946
Ref: 40f413273946
Ref: library/turtle turtle setpos13273984
Ref: 40f513273984
Ref: library/turtle turtle setposition13274024
Ref: 40f613274024
Ref: library/turtle turtle teleport13274859
Ref: 181b13274859
Ref: library/turtle turtle setx13276000
Ref: 40f713276000
Ref: library/turtle turtle sety13276349
Ref: 40f813276349
Ref: library/turtle turtle setheading13276697
Ref: 40f913276697
Ref: library/turtle turtle seth13276740
Ref: 40fa13276740
Ref: library/turtle turtle home13277582
Ref: 40fb13277582
Ref: library/turtle turtle circle13278012
Ref: 40fc13278012
Ref: library/turtle turtle dot13279484
Ref: 40fd13279484
Ref: library/turtle turtle stamp13280231
Ref: 40fe13280231
Ref: library/turtle turtle clearstamp13280576
Ref: 40ff13280576
Ref: library/turtle turtle clearstamps13281107
Ref: 410013281107
Ref: library/turtle turtle undo13281664
Ref: 410113281664
Ref: library/turtle turtle speed13282034
Ref: 410213282034
Node: Fala o estado de Turtle13283194
Ref: library/turtle tell-turtle-s-state13283373
Ref: 415a13283373
Ref: library/turtle turtle position13283444
Ref: 410313283444
Ref: library/turtle turtle pos13283477
Ref: 410413283477
Ref: library/turtle turtle towards13283655
Ref: 410513283655
Ref: library/turtle turtle xcor13284249
Ref: 410613284249
Ref: library/turtle turtle ycor13284530
Ref: 410713284530
Ref: library/turtle turtle heading13284818
Ref: 410813284818
Ref: library/turtle turtle distance13285070
Ref: 410913285070
Node: Configurações de medida13285691
Ref: library/turtle settings-for-measurement13285871
Ref: 415b13285871
Ref: library/turtle turtle degrees13285944
Ref: 410a13285944
Ref: library/turtle turtle radians13286643
Ref: 410b13286643
Node: Controle da Caneta<2>13286979
Ref: library/turtle id113287155
Ref: 415c13287155
Node: Estado do Desenho13287323
Ref: library/turtle drawing-state13287422
Ref: 415d13287422
Ref: library/turtle turtle pendown13287481
Ref: 410c13287481
Ref: library/turtle turtle pd13287513
Ref: 410d13287513
Ref: library/turtle turtle down13287540
Ref: 410e13287540
Ref: library/turtle turtle penup13287614
Ref: 410f13287614
Ref: library/turtle turtle pu13287644
Ref: 411013287644
Ref: library/turtle turtle up13287671
Ref: 411113287671
Ref: library/turtle turtle pensize13287760
Ref: 411213287760
Ref: library/turtle turtle width13287802
Ref: 411313287802
Ref: library/turtle turtle pen13288335
Ref: 411413288335
Ref: library/turtle turtle isdown13290368
Ref: 411513290368
Node: Controle da Cor13290646
Ref: library/turtle color-control13290767
Ref: 415e13290767
Ref: library/turtle turtle pencolor13290822
Ref: 411713290822
Ref: library/turtle turtle fillcolor13292625
Ref: 411813292625
Ref: library/turtle turtle color13294325
Ref: 411613294325
Node: Preenchimento13295736
Ref: library/turtle filling13295872
Ref: 415f13295872
Ref: library/turtle turtle filling13295923
Ref: 411913295923
Ref: library/turtle turtle begin_fill13296210
Ref: 411a13296210
Ref: library/turtle turtle end_fill13296315
Ref: 411b13296315
Node: Mais sobre o Controle do Desenho13296911
Ref: library/turtle more-drawing-control13297023
Ref: 416013297023
Ref: library/turtle turtle reset13297112
Ref: 411c13297112
Ref: library/turtle turtle clear13297573
Ref: 411d13297573
Ref: library/turtle turtle write13297790
Ref: 411e13297790
Node: Estado da tartaruga13298582
Ref: library/turtle turtle-state13298751
Ref: 416113298751
Node: Visibilidade13298856
Ref: library/turtle visibility13298943
Ref: 416213298943
Ref: library/turtle turtle hideturtle13298992
Ref: 412113298992
Ref: library/turtle turtle ht13299027
Ref: 412213299027
Ref: library/turtle turtle showturtle13299276
Ref: 411f13299276
Ref: library/turtle turtle st13299311
Ref: 412013299311
Ref: library/turtle turtle isvisible13299409
Ref: 412313299409
Node: Aparência13299699
Ref: library/turtle appearance13299786
Ref: 416313299786
Ref: library/turtle turtle shape13299830
Ref: 412413299830
Ref: library/turtle turtle resizemode13300618
Ref: 412513300618
Ref: library/turtle turtle shapesize13301643
Ref: 412613301643
Ref: library/turtle turtle turtlesize13301735
Ref: 412713301735
Ref: library/turtle turtle shearfactor13302766
Ref: 412813302766
Ref: library/turtle turtle tilt13303497
Ref: 412913303497
Ref: library/turtle turtle tiltangle13303967
Ref: 72513303967
Ref: library/turtle turtle shapetransform13304758
Ref: 412a13304758
Ref: library/turtle turtle get_shapepoly13305867
Ref: 412b13305867
Node: Eventos Utilizados13306263
Ref: library/turtle using-events13306442
Ref: 416413306442
Ref: library/turtle turtle onrelease13307413
Ref: 412d13307413
Ref: library/turtle turtle ondrag13308496
Ref: 412e13308496
Node: Métodos Especiais da Tartaruga13309465
Ref: library/turtle special-turtle-methods13309641
Ref: 416513309641
Ref: library/turtle turtle begin_poly13309727
Ref: 412f13309727
Ref: library/turtle turtle end_poly13309893
Ref: 413013309893
Ref: library/turtle turtle get_poly13310103
Ref: 413113310103
Ref: library/turtle turtle clone13310511
Ref: 413213310511
Ref: library/turtle turtle getturtle13310725
Ref: 413313310725
Ref: library/turtle turtle getpen13310759
Ref: 413413310759
Ref: library/turtle turtle getscreen13311028
Ref: 413513311028
Ref: library/turtle turtle setundobuffer13311370
Ref: 413613311370
Ref: library/turtle turtle undobufferentries13311843
Ref: 413713311843
Node: Formas compostas13312004
Ref: library/turtle compound-shapes13312153
Ref: 416713312153
Ref: library/turtle compoundshapes13312153
Ref: 416813312153
Node: métodos do TurtleScreen/Screen e as funções correspondentes13313236
Ref: library/turtle methods-of-turtlescreen-screen-and-corresponding-functions13313456
Ref: 416b13313456
Node: Controle da Janela13314027
Ref: library/turtle window-control13314175
Ref: 416c13314175
Ref: library/turtle turtle bgcolor13314236
Ref: 413913314236
Ref: library/turtle turtle bgpic13315579
Ref: 413a13315579
Ref: library/turtle turtle clearscreen13316507
Ref: 413b13316507
Ref: library/turtle turtle resetscreen13317038
Ref: 413c13317038
Ref: library/turtle turtle screensize13317142
Ref: 413d13317142
Ref: library/turtle turtle setworldcoordinates13318127
Ref: 413e13318127
Node: Controle da animação13319310
Ref: library/turtle animation-control13319492
Ref: 416d13319492
Ref: library/turtle turtle delay13319559
Ref: 413f13319559
Ref: library/turtle turtle tracer13320046
Ref: 414013320046
Ref: library/turtle turtle update13320835
Ref: 414113320835
Node: Usando os eventos de tela13321038
Ref: library/turtle using-screen-events13321221
Ref: 416e13321221
Ref: library/turtle turtle listen13321296
Ref: 414213321296
Ref: library/turtle turtle onkey13321543
Ref: 414313321543
Ref: library/turtle turtle onkeyrelease13321581
Ref: 414413321581
Ref: library/turtle turtle onkeypress13322259
Ref: 414513322259
Ref: library/turtle turtle onclick13322958
Ref: 412c13322958
Ref: library/turtle turtle onscreenclick13323010
Ref: 414613323010
Ref: library/turtle turtle ontimer13324245
Ref: 414713324245
Ref: library/turtle turtle mainloop13324737
Ref: 414813324737
Ref: library/turtle turtle done13324770
Ref: 414913324770
Node: Métodos de entrada13325142
Ref: library/turtle input-methods13325339
Ref: 416f13325339
Ref: library/turtle turtle textinput13325401
Ref: 1a0613325401
Ref: library/turtle turtle numinput13325947
Ref: 1a0713325947
Node: Configurações e métodos especiais13327040
Ref: library/turtle settings-and-special-methods13327292
Ref: 417013327292
Ref: library/turtle turtle mode13327386
Ref: 414a13327386
Ref: library/turtle turtle colormode13328709
Ref: 414b13328709
Ref: library/turtle turtle getcanvas13329361
Ref: 414c13329361
Ref: library/turtle turtle getshapes13329610
Ref: 414d13329610
Ref: library/turtle turtle register_shape13329830
Ref: 414e13329830
Ref: library/turtle turtle addshape13329885
Ref: 414f13329885
Ref: library/turtle turtle turtles13330882
Ref: 415013330882
Ref: library/turtle turtle window_height13331047
Ref: 415113331047
Ref: library/turtle turtle window_width13331185
Ref: 415213331185
Node: Métodos específico do Screen estes métodos não são herdados do TurtleScreen13331322
Ref: library/turtle methods-specific-to-screen-not-inherited-from-turtlescreen13331546
Ref: 417113331546
Ref: library/turtle screenspecific13331546
Ref: 417213331546
Ref: library/turtle turtle bye13331728
Ref: 415313331728
Ref: library/turtle turtle exitonclick13331805
Ref: 415413331805
Ref: library/turtle turtle setup13332304
Ref: 415513332304
Ref: library/turtle turtle title13333816
Ref: 415613333816
Node: Classes Públicas13334111
Ref: library/turtle public-classes13334290
Ref: 417313334290
Ref: library/turtle turtle RawTurtle13334348
Ref: 417413334348
Ref: library/turtle turtle RawPen13334386
Ref: 417513334386
Ref: library/turtle turtle Turtle13334675
Ref: 417713334675
Ref: library/turtle turtle TurtleScreen13334888
Ref: 416613334888
Ref: library/turtle turtle Screen13335095
Ref: 40e913335095
Ref: library/turtle turtle ScrolledCanvas13335205
Ref: 417613335205
Ref: library/turtle turtle Shape13335542
Ref: 416913335542
Ref: library/turtle turtle Shape addcomponent13336360
Ref: 416a13336360
Ref: library/turtle turtle Vec2D13337022
Ref: 415913337022
Node: Explicação<2>13337628
Ref: library/turtle explanation13337767
Ref: 417813337767
Ref: library/turtle turtle-explanation13337767
Ref: 40e813337767
Node: Ajuda e Configuração13339327
Ref: library/turtle help-and-configuration13339489
Ref: 417913339489
Node: Como usar a Ajuda13339678
Ref: library/turtle how-to-use-help13339809
Ref: 417a13339809
Node: Tradução de docstrings em diferentes idiomas13342192
Ref: library/turtle translation-of-docstrings-into-different-languages13342366
Ref: 417b13342366
Ref: library/turtle turtle write_docstringdict13342651
Ref: 417c13342651
Node: Como configurar Screen and Turtles13343753
Ref: library/turtle how-to-configure-screen-and-turtles13343901
Ref: 417d13343901
Node: turtledemo — Scripts de Demonstração13346985
Ref: library/turtle module-turtledemo13347176
Ref: 10213347176
Ref: library/turtle turtledemo-demo-scripts13347176
Ref: 417e13347176
Node: Modificações desde a versão do Python 2 613354090
Ref: library/turtle changes-since-python-2-613354303
Ref: 417f13354303
Node: Modificações desde a versão do Python 3 013355451
Ref: library/turtle changes-since-python-3-013355615
Ref: 418013355615
Node: Ferramentas de Desenvolvimento13357079
Ref: library/development doc13357259
Ref: 418113357259
Ref: library/development development13357259
Ref: 418213357259
Ref: library/development development-tools13357259
Ref: 418313357259
Ref: library/development translation-repo13357259
Ref: 418413357259
Node: typing — Suporte para dicas de tipo13359317
Ref: library/typing doc13359491
Ref: 418513359491
Ref: library/typing typing-support-for-type-hints13359491
Ref: 418613359491
Ref: library/typing module-typing13359588
Ref: 10413359588
Ref: typing — Suporte para dicas de tipo-Footnote-113362053
Ref: typing — Suporte para dicas de tipo-Footnote-213362119
Ref: typing — Suporte para dicas de tipo-Footnote-313362171
Ref: typing — Suporte para dicas de tipo-Footnote-413362238
Ref: typing — Suporte para dicas de tipo-Footnote-513362295
Node: Especificação para o sistema de tipos do Python13362340
Ref: library/typing relevant-peps13362488
Ref: 418713362488
Ref: library/typing specification-for-the-python-type-system13362488
Ref: 418813362488
Ref: Especificação para o sistema de tipos do Python-Footnote-113362778
Node: Apelidos de tipo13362838
Ref: library/typing id213363002
Ref: 418913363002
Ref: library/typing type-aliases13363002
Ref: 45413363002
Node: NewType13364631
Ref: library/typing distinct13364779
Ref: 418a13364779
Ref: library/typing newtype13364779
Ref: 418b13364779
Ref: NewType-Footnote-113368174
Node: Anotações de objetos chamáveis13368216
Ref: library/typing annotating-callable-objects13368358
Ref: 418c13368358
Ref: library/typing annotating-callables13368358
Ref: 240413368358
Ref: Anotações de objetos chamáveis-Footnote-113371614
Node: Genéricos13371656
Ref: library/typing generics13371806
Ref: 210b13371806
Ref: library/typing id313371806
Ref: 418e13371806
Node: Anotando tuplas13373195
Ref: library/typing annotating-tuples13373339
Ref: 240513373339
Ref: library/typing id413373339
Ref: 418f13373339
Node: O tipo de objetos de classe13375848
Ref: library/typing the-type-of-class-objects13376013
Ref: 419013376013
Ref: library/typing type-of-class-objects13376013
Ref: 419113376013
Node: Anotando geradores e corrotinas13377750
Ref: library/typing annotating-generators-and-coroutines13377940
Ref: 26cd13377940
Ref: library/typing id513377940
Ref: 419313377940
Node: Tipos genéricos definidos pelo usuário13380564
Ref: library/typing user-defined-generic-types13380737
Ref: 419413380737
Ref: library/typing user-defined-generics13380737
Ref: 4cf13380737
Ref: Tipos genéricos definidos pelo usuário-Footnote-113387099
Node: O tipo Any13387141
Ref: library/typing the-any-type13387315
Ref: 419613387315
Node: Subtipagem nominal vs estrutural13390235
Ref: library/typing nominal-vs-structural-subtyping13390392
Ref: 419713390392
Ref: Subtipagem nominal vs estrutural-Footnote-113392257
Ref: Subtipagem nominal vs estrutural-Footnote-213392299
Ref: Subtipagem nominal vs estrutural-Footnote-313392341
Node: Conteúdo do módulo<7>13392383
Ref: library/typing module-contents13392584
Ref: 419813392584
Node: Tipos primitivos especiais13392928
Ref: library/typing special-typing-primitives13393036
Ref: 419913393036
Node: Tipos especiais13393241
Ref: library/typing special-types13393344
Ref: 419a13393344
Ref: library/typing typing Any13393507
Ref: 6ac13393507
Ref: library/typing typing AnyStr13393948
Ref: 2b213393948
Ref: library/typing typing LiteralString13395827
Ref: 5ca13395827
Ref: library/typing typing Never13397118
Ref: 6a813397118
Ref: library/typing typing NoReturn13397141
Ref: 419c13397141
Ref: library/typing typing Self13398446
Ref: 5c713398446
Ref: library/typing typing TypeAlias13400401
Ref: 7ca13400401
Ref: Tipos especiais-Footnote-113402145
Ref: Tipos especiais-Footnote-213402187
Ref: Tipos especiais-Footnote-313402229
Ref: Tipos especiais-Footnote-413402279
Ref: Tipos especiais-Footnote-513402321
Node: Formas especiais13402363
Ref: library/typing special-forms13402518
Ref: 419d13402518
Ref: library/typing typing Union13402720
Ref: 63b13402720
Ref: library/typing typing Optional13404262
Ref: 6b313404262
Ref: library/typing typing Concatenate13405067
Ref: 7c513405067
Ref: library/typing typing Literal13407544
Ref: 85813407544
Ref: library/typing typing ClassVar13409799
Ref: 26613409799
Ref: library/typing typing Final13411165
Ref: 26713411165
Ref: library/typing typing Required13412025
Ref: 5c413412025
Ref: library/typing typing NotRequired13412345
Ref: 5c513412345
Ref: library/typing typing ReadOnly13412605
Ref: 16113412605
Ref: library/typing typing Annotated13413212
Ref: 94413413212
Ref: library/typing typing TypeIs13419419
Ref: 16313419419
Ref: library/typing typing TypeGuard13423584
Ref: 16413423584
Ref: library/typing typing Unpack13426217
Ref: 171b13426217
Ref: Formas especiais-Footnote-113428060
Ref: Formas especiais-Footnote-213428102
Ref: Formas especiais-Footnote-313428144
Ref: Formas especiais-Footnote-413428186
Ref: Formas especiais-Footnote-513428228
Ref: Formas especiais-Footnote-613428270
Ref: Formas especiais-Footnote-713428312
Ref: Formas especiais-Footnote-813428354
Ref: Formas especiais-Footnote-913428396
Ref: Formas especiais-Footnote-1013428438
Ref: Formas especiais-Footnote-1113428481
Node: Criando tipos genéricos e apelidos de tipo13428524
Ref: library/typing building-generic-types-and-type-aliases13428690
Ref: 419f13428690
Ref: library/typing typing Generic13429241
Ref: 15d713429241
Ref: library/typing typevar13430516
Ref: 419513430516
Ref: library/typing typing TypeVar13430516
Ref: 15d13430516
Ref: library/typing typing-constrained-typevar13434367
Ref: 419b13434367
Ref: library/typing typing TypeVar __name__13435013
Ref: 41a013435013
Ref: library/typing typing TypeVar __covariant__13435079
Ref: 41a113435079
Ref: library/typing typing TypeVar __contravariant__13435188
Ref: 41a213435188
Ref: library/typing typing TypeVar __infer_variance__13435315
Ref: 41a313435315
Ref: library/typing typing TypeVar __bound__13435493
Ref: 41a413435493
Ref: library/typing typing TypeVar __constraints__13435891
Ref: 41a513435891
Ref: library/typing typing TypeVar __default__13436316
Ref: 41a613436316
Ref: library/typing typing TypeVar has_default13436502
Ref: 41a713436502
Ref: library/typing typevartuple13437185
Ref: 419e13437185
Ref: library/typing typing TypeVarTuple13437185
Ref: 15f13437185
Ref: library/typing typing TypeVarTuple __name__13441789
Ref: 41a813441789
Ref: library/typing typing TypeVarTuple __default__13441866
Ref: 41a913441866
Ref: library/typing typing TypeVarTuple has_default13442061
Ref: 41aa13442061
Ref: library/typing typing ParamSpec13442750
Ref: 15e13442750
Ref: library/typing typing ParamSpec args13445559
Ref: 41ac13445559
Ref: library/typing typing ParamSpec kwargs13445584
Ref: 41ad13445584
Ref: library/typing typing ParamSpec __name__13446420
Ref: 41ae13446420
Ref: library/typing typing ParamSpec __default__13446502
Ref: 41af13446502
Ref: library/typing typing ParamSpec has_default13446699
Ref: 41b013446699
Ref: library/typing typing ParamSpecArgs13448177
Ref: 7c713448177
Ref: library/typing typing ParamSpecKwargs13448208
Ref: 7c813448208
Ref: library/typing typing TypeAliasType13448989
Ref: 45513448989
Ref: library/typing typing TypeAliasType __name__13449279
Ref: 41b113449279
Ref: library/typing typing TypeAliasType __module__13449440
Ref: 41b213449440
Ref: library/typing typing TypeAliasType __type_params__13449639
Ref: 41b313449639
Ref: library/typing typing TypeAliasType __value__13450018
Ref: 41b413450018
Ref: Criando tipos genéricos e apelidos de tipo-Footnote-113450649
Ref: Criando tipos genéricos e apelidos de tipo-Footnote-213450691
Ref: Criando tipos genéricos e apelidos de tipo-Footnote-313450733
Ref: Criando tipos genéricos e apelidos de tipo-Footnote-413450775
Ref: Criando tipos genéricos e apelidos de tipo-Footnote-513450817
Ref: Criando tipos genéricos e apelidos de tipo-Footnote-613450859
Ref: Criando tipos genéricos e apelidos de tipo-Footnote-713450901
Node: Outras diretivas especiais13450943
Ref: library/typing other-special-directives13451084
Ref: 41b513451084
Ref: library/typing typing NamedTuple13451314
Ref: 2b013451314
Ref: library/typing typing NewType13454823
Ref: d1613454823
Ref: library/typing typing NewType __module__13455312
Ref: 41b613455312
Ref: library/typing typing NewType __name__13455405
Ref: 41b713455405
Ref: library/typing typing NewType __supertype__13455466
Ref: 41b813455466
Ref: library/typing typing Protocol13455680
Ref: 26413455680
Ref: library/typing typing runtime_checkable13457242
Ref: 44313457242
Ref: library/typing typing TypedDict13460292
Ref: 16213460292
Ref: library/typing typing TypedDict __total__13465353
Ref: 41b913465353
Ref: library/typing typing TypedDict __required_keys__13466404
Ref: 41ba13466404
Ref: library/typing typing TypedDict __optional_keys__13466480
Ref: 41bb13466480
Ref: library/typing typing TypedDict __readonly_keys__13468370
Ref: 41bc13468370
Ref: library/typing typing TypedDict __mutable_keys__13468646
Ref: 41bd13468646
Ref: Outras diretivas especiais-Footnote-113470246
Ref: Outras diretivas especiais-Footnote-213470288
Ref: Outras diretivas especiais-Footnote-313470330
Ref: Outras diretivas especiais-Footnote-413470372
Node: Protocolos<3>13470414
Ref: library/typing protocols13470558
Ref: 41be13470558
Ref: library/typing typing SupportsAbs13470725
Ref: 41bf13470725
Ref: library/typing typing SupportsBytes13470855
Ref: 5ea13470855
Ref: library/typing typing SupportsComplex13470943
Ref: 5e913470943
Ref: library/typing typing SupportsFloat13471035
Ref: 41c013471035
Ref: library/typing typing SupportsIndex13471123
Ref: a4f13471123
Ref: library/typing typing SupportsInt13471244
Ref: a4e13471244
Ref: library/typing typing SupportsRound13471328
Ref: 41c113471328
Node: ABCs para trabalhar com E/S13471463
Ref: library/typing abcs-for-working-with-io13471604
Ref: 41c213471604
Ref: library/typing typing IO13471681
Ref: 72b13471681
Ref: library/typing typing TextIO13471703
Ref: 41c313471703
Ref: library/typing typing BinaryIO13471729
Ref: 41c413471729
Node: Funções e decoradores13471957
Ref: library/typing functions-and-decorators13472113
Ref: 41c513472113
Ref: library/typing typing cast13472180
Ref: 41ab13472180
Ref: library/typing typing assert_type13472512
Ref: 6ab13472512
Ref: library/typing typing assert_never13473690
Ref: 6a713473690
Ref: library/typing typing reveal_type13475219
Ref: 6aa13475219
Ref: library/typing typing dataclass_transform13476559
Ref: 4d413476559
Ref: library/typing overload13482766
Ref: 418d13482766
Ref: library/typing typing overload13482766
Ref: 41c613482766
Ref: library/typing typing get_overloads13484437
Ref: 6ae13484437
Ref: library/typing typing clear_overloads13485171
Ref: 6af13485171
Ref: library/typing typing final13485385
Ref: 6ad13485385
Ref: library/typing typing no_type_check13486707
Ref: 6b413486707
Ref: library/typing typing no_type_check_decorator13487247
Ref: 2b113487247
Ref: library/typing typing override13487734
Ref: 44b13487734
Ref: library/typing typing type_check_only13489141
Ref: 41c713489141
Ref: Funções e decoradores-Footnote-113489938
Ref: Funções e decoradores-Footnote-213490007
Ref: Funções e decoradores-Footnote-313490049
Ref: Funções e decoradores-Footnote-413490091
Ref: Funções e decoradores-Footnote-513490133
Node: Auxiliares de introspecção13490175
Ref: library/typing introspection-helpers13490313
Ref: 41c813490313
Ref: library/typing typing get_type_hints13490390
Ref: 6b113490390
Ref: library/typing typing get_origin13493204
Ref: 2ec13493204
Ref: library/typing typing get_args13494115
Ref: 2ed13494115
Ref: library/typing typing get_protocol_members13494836
Ref: 26313494836
Ref: library/typing typing is_protocol13495317
Ref: 26513495317
Ref: library/typing typing is_typeddict13495630
Ref: 85913495630
Ref: library/typing typing ForwardRef13496107
Ref: 196413496107
Ref: library/typing typing NoDefault13496793
Ref: 26213496793
Ref: Auxiliares de introspecção-Footnote-113497201
Ref: Auxiliares de introspecção-Footnote-213497243
Node: Constante13497285
Ref: library/typing constant13497423
Ref: 41c913497423
Ref: library/typing typing TYPE_CHECKING13497464
Ref: d1513497464
Ref: library/typing generic-concrete-collections13498559
Ref: 41ca13498559
Ref: Constante-Footnote-113498595
Node: Apelidos descontinuados13498637
Ref: library/typing deprecated-aliases13498738
Ref: 41cb13498738
Ref: library/typing id613498738
Ref: 41cc13498738
Ref: Apelidos descontinuados-Footnote-113500488
Node: Apelidos de tipos embutidos13500530
Ref: library/typing aliases-to-built-in-types13500660
Ref: 41cd13500660
Ref: library/typing corresponding-to-built-in-types13500660
Ref: 41ce13500660
Ref: library/typing typing Dict13500737
Ref: 41cf13500737
Ref: library/typing typing List13501191
Ref: 41d013501191
Ref: library/typing typing Set13501673
Ref: 41d113501673
Ref: library/typing typing FrozenSet13502140
Ref: 41d213502140
Ref: library/typing typing Tuple13502448
Ref: 41d313502448
Ref: library/typing typing Type13502858
Ref: 419213502858
Ref: Apelidos de tipos embutidos-Footnote-113503364
Ref: Apelidos de tipos embutidos-Footnote-213503406
Ref: Apelidos de tipos embutidos-Footnote-313503448
Ref: Apelidos de tipos embutidos-Footnote-413503490
Ref: Apelidos de tipos embutidos-Footnote-513503532
Ref: Apelidos de tipos embutidos-Footnote-613503574
Node: Apelidos para tipos em collections13503616
Ref: library/typing aliases-to-types-in-collections13503789
Ref: 41d413503789
Ref: library/typing corresponding-to-types-in-collections13503789
Ref: 41d513503789
Ref: library/typing typing DefaultDict13503888
Ref: 41d613503888
Ref: library/typing typing OrderedDict13504274
Ref: 41d713504274
Ref: library/typing typing ChainMap13504658
Ref: 41d813504658
Ref: library/typing typing Counter13505030
Ref: 41d913505030
Ref: library/typing typing Deque13505380
Ref: 41da13505380
Ref: Apelidos para tipos em collections-Footnote-113505750
Ref: Apelidos para tipos em collections-Footnote-213505792
Ref: Apelidos para tipos em collections-Footnote-313505834
Ref: Apelidos para tipos em collections-Footnote-413505876
Ref: Apelidos para tipos em collections-Footnote-513505918
Node: Apelidos de outros tipos concretos13505960
Ref: library/typing aliases-to-other-concrete-types13506153
Ref: 41db13506153
Ref: library/typing other-concrete-types13506153
Ref: 41dc13506153
Ref: library/typing typing Pattern13506244
Ref: 72c13506244
Ref: library/typing typing Match13506271
Ref: 41dd13506271
Ref: library/typing typing Text13506876
Ref: 30b13506876
Ref: library/typing abstract-base-classes13507747
Ref: 41de13507747
Ref: Apelidos de outros tipos concretos-Footnote-113507783
Node: Apelidos de contêineres ABC em collections abc13507825
Ref: library/typing aliases-to-container-abcs-in-collections-abc13508034
Ref: 41df13508034
Ref: library/typing corresponding-to-collections-in-collections-abc13508034
Ref: 41e013508034
Ref: library/typing typing AbstractSet13508160
Ref: 41e113508160
Ref: library/typing typing ByteString13508462
Ref: 2ee13508462
Ref: library/typing typing Collection13509591
Ref: d1413509591
Ref: library/typing typing Container13509959
Ref: 41e213509959
Ref: library/typing typing ItemsView13510268
Ref: 41e313510268
Ref: library/typing typing KeysView13510619
Ref: 41e413510619
Ref: library/typing typing Mapping13510943
Ref: 41e513510943
Ref: library/typing typing MappingView13511265
Ref: 41e613511265
Ref: library/typing typing MutableMapping13511577
Ref: 41e713511577
Ref: library/typing typing MutableSequence13511913
Ref: 41e813511913
Ref: library/typing typing MutableSet13512247
Ref: 41e913512247
Ref: library/typing typing Sequence13512561
Ref: 41ea13512561
Ref: library/typing typing ValuesView13512889
Ref: 41eb13512889
Ref: Apelidos de contêineres ABC em collections abc-Footnote-113513256
Ref: Apelidos de contêineres ABC em collections abc-Footnote-213513298
Ref: Apelidos de contêineres ABC em collections abc-Footnote-313513356
Ref: Apelidos de contêineres ABC em collections abc-Footnote-413513398
Ref: Apelidos de contêineres ABC em collections abc-Footnote-513513440
Ref: Apelidos de contêineres ABC em collections abc-Footnote-613513482
Ref: Apelidos de contêineres ABC em collections abc-Footnote-713513524
Ref: Apelidos de contêineres ABC em collections abc-Footnote-813513566
Ref: Apelidos de contêineres ABC em collections abc-Footnote-913513608
Ref: Apelidos de contêineres ABC em collections abc-Footnote-1013513650
Ref: Apelidos de contêineres ABC em collections abc-Footnote-1113513693
Ref: Apelidos de contêineres ABC em collections abc-Footnote-1213513736
Ref: Apelidos de contêineres ABC em collections abc-Footnote-1313513779
Node: Apelidos para ABCs assíncronas em collections abc13513822
Ref: library/typing aliases-to-asynchronous-abcs-in-collections-abc13514041
Ref: 41ec13514041
Ref: library/typing asynchronous-programming13514041
Ref: 41ed13514041
Ref: library/typing typing Coroutine13514171
Ref: 1abe13514171
Ref: library/typing typing AsyncGenerator13514767
Ref: 171813514767
Ref: library/typing typing AsyncIterable13515477
Ref: 41ee13515477
Ref: library/typing typing AsyncIterator13515836
Ref: 41ef13515836
Ref: library/typing typing Awaitable13516201
Ref: 41f013516201
Ref: Apelidos para ABCs assíncronas em collections abc-Footnote-113516579
Ref: Apelidos para ABCs assíncronas em collections abc-Footnote-213516621
Ref: Apelidos para ABCs assíncronas em collections abc-Footnote-313516663
Ref: Apelidos para ABCs assíncronas em collections abc-Footnote-413516705
Ref: Apelidos para ABCs assíncronas em collections abc-Footnote-513516747
Node: Apelidos para outros ABCs em collections abc13516789
Ref: library/typing aliases-to-other-abcs-in-collections-abc13516991
Ref: 41f113516991
Ref: library/typing corresponding-to-other-types-in-collections-abc13516991
Ref: 41f213516991
Ref: library/typing typing Iterable13517112
Ref: 41f313517112
Ref: library/typing typing Iterator13517418
Ref: 41f413517418
Ref: library/typing typing Callable13517725
Ref: 7c613517725
Ref: library/typing typing Generator13518360
Ref: 171713518360
Ref: library/typing typing Hashable13519015
Ref: 4f313519015
Ref: library/typing typing Reversible13519213
Ref: 41f513519213
Ref: library/typing typing Sized13519524
Ref: 4f413519524
Ref: Apelidos para outros ABCs em collections abc-Footnote-113519749
Ref: Apelidos para outros ABCs em collections abc-Footnote-213519791
Ref: Apelidos para outros ABCs em collections abc-Footnote-313519833
Ref: Apelidos para outros ABCs em collections abc-Footnote-413519875
Ref: Apelidos para outros ABCs em collections abc-Footnote-513519917
Ref: Apelidos para outros ABCs em collections abc-Footnote-613519959
Node: Apelidos de ABCs da contextlib13520001
Ref: library/typing aliases-to-contextlib-abcs13520144
Ref: 41f613520144
Ref: library/typing context-manager-types13520144
Ref: 41f713520144
Ref: library/typing typing ContextManager13520235
Ref: cac13520235
Ref: library/typing typing AsyncContextManager13521010
Ref: 171513521010
Ref: Apelidos de ABCs da contextlib-Footnote-113521842
Ref: Apelidos de ABCs da contextlib-Footnote-213521884
Node: Cronograma de descontinuação dos principais recursos13521926
Ref: library/typing deprecation-timeline-of-major-features13522086
Ref: 41f813522086
Ref: Cronograma de descontinuação dos principais recursos-Footnote-113524905
Ref: Cronograma de descontinuação dos principais recursos-Footnote-213524947
Ref: Cronograma de descontinuação dos principais recursos-Footnote-313525002
Ref: Cronograma de descontinuação dos principais recursos-Footnote-413525057
Ref: Cronograma de descontinuação dos principais recursos-Footnote-513525112
Ref: Cronograma de descontinuação dos principais recursos-Footnote-613525154
Ref: Cronograma de descontinuação dos principais recursos-Footnote-713525210
Node: pydoc — Gerador de documentação e sistema de ajuda online13525266
Ref: library/pydoc doc13525482
Ref: 41f913525482
Ref: library/pydoc module-pydoc13525482
Ref: b513525482
Ref: library/pydoc pydoc-documentation-generator-and-online-help-system13525482
Ref: 41fa13525482
Ref: library/pydoc translation-repo13525482
Ref: 41fb13525482
Ref: pydoc — Gerador de documentação e sistema de ajuda online-Footnote-113530974
Node: Modo de Desenvolvimento do Python13531039
Ref: library/devmode doc13531266
Ref: 41fc13531266
Ref: library/devmode devmode13531266
Ref: 1f813531266
Ref: library/devmode python-development-mode13531266
Ref: 41fd13531266
Ref: library/devmode translation-repo13531266
Ref: 41fe13531266
Node: Efeitos do Modo de Desenvolvimento do Python13532039
Ref: library/devmode effects-of-the-python-development-mode13532188
Ref: 41ff13532188
Node: Exemplo de ResourceWarning13536344
Ref: library/devmode resourcewarning-example13536551
Ref: 420013536551
Node: Exemplo de erro de descritor de arquivo inválido13538525
Ref: library/devmode bad-file-descriptor-error-example13538679
Ref: 420113538679
Ref: Exemplo de erro de descritor de arquivo inválido-Footnote-113540303
Node: doctest — Teste exemplos interativos de Python13540368
Ref: library/doctest doc13540577
Ref: 420213540577
Ref: library/doctest doctest-test-interactive-python-examples13540577
Ref: 420313540577
Ref: library/doctest module-doctest13540577
Ref: 3a13540577
Ref: library/doctest translation-repo13540577
Ref: 420413540577
Ref: doctest — Teste exemplos interativos de Python-Footnote-113545024
Node: Uso simples verificando exemplos em Docstrings13545091
Ref: library/doctest doctest-simple-testmod13545290
Ref: 420513545290
Ref: library/doctest simple-usage-checking-examples-in-docstrings13545290
Ref: 420613545290
Node: Utilização comum Verificando exemplos em um arquivo texto13546818
Ref: library/doctest doctest-simple-testfile13547052
Ref: 420913547052
Ref: library/doctest simple-usage-checking-examples-in-a-text-file13547052
Ref: 420a13547052
Node: Uso na linha de comando<6>13549210
Ref: library/doctest command-line-usage13549415
Ref: 420c13549415
Ref: library/doctest doctest-cli13549415
Ref: 420713549415
Ref: library/doctest cmdoption-doctest-v13549635
Ref: 420d13549635
Ref: library/doctest cmdoption-doctest-verbose13549635
Ref: 420e13549635
Ref: library/doctest cmdoption-doctest-o13550274
Ref: 420f13550274
Ref: library/doctest cmdoption-doctest-option13550274
Ref: 421013550274
Ref: library/doctest cmdoption-doctest-f13550489
Ref: 421113550489
Ref: library/doctest cmdoption-doctest-fail-fast13550489
Ref: 421213550489
Node: Como ele funciona13550600
Ref: library/doctest doctest-how-it-works13550755
Ref: 421313550755
Ref: library/doctest how-it-works13550755
Ref: 421413550755
Node: Quais docstrings são examinadas?13551508
Ref: library/doctest doctest-which-docstrings13551653
Ref: 421513551653
Ref: library/doctest which-docstrings-are-examined13551653
Ref: 421613551653
Ref: library/doctest module __test__13551897
Ref: 421713551897
Node: Como os exemplos de docstrings são reconhecidos?13553624
Ref: library/doctest doctest-finding-examples13553811
Ref: 421813553811
Ref: library/doctest how-are-docstring-examples-recognized13553811
Ref: 421913553811
Node: Qual é o contexto de execução?13557257
Ref: library/doctest doctest-execution-context13557435
Ref: 421d13557435
Ref: library/doctest what-s-the-execution-context13557435
Ref: 421e13557435
Node: E quanto às exceções?13558264
Ref: library/doctest doctest-exceptions13558408
Ref: 421f13558408
Ref: library/doctest what-about-exceptions13558408
Ref: 422013558408
Ref: library/doctest option-flags-and-directives13563024
Ref: 422113563024
Ref: E quanto às exceções?-Footnote-113563061
Node: Flags opcionais13563261
Ref: library/doctest doctest-options13563382
Ref: f6613563382
Ref: library/doctest option-flags13563382
Ref: 422213563382
Ref: library/doctest doctest DONT_ACCEPT_TRUE_FOR_113563951
Ref: 422313563951
Ref: library/doctest doctest DONT_ACCEPT_BLANKLINE13564579
Ref: 422413564579
Ref: library/doctest doctest NORMALIZE_WHITESPACE13565032
Ref: 421a13565032
Ref: library/doctest doctest ELLIPSIS13565522
Ref: 14b613565522
Ref: library/doctest doctest IGNORE_EXCEPTION_DETAIL13565958
Ref: 134d13565958
Ref: library/doctest doctest SKIP13567423
Ref: 422513567423
Ref: library/doctest doctest COMPARISON_FLAGS13567937
Ref: 422613567937
Ref: library/doctest doctest REPORT_UDIFF13568109
Ref: 14b713568109
Ref: library/doctest doctest REPORT_CDIFF13568265
Ref: 14b813568265
Ref: library/doctest doctest REPORT_NDIFF13568425
Ref: 14b913568425
Ref: library/doctest doctest REPORT_ONLY_FIRST_FAILURE13568889
Ref: 422713568889
Ref: library/doctest doctest FAIL_FAST13569468
Ref: f6713569468
Ref: library/doctest doctest REPORTING_FLAGS13569806
Ref: 422813569806
Ref: library/doctest doctest register_optionflag13570063
Ref: 422913570063
Node: Directives13570553
Ref: library/doctest directives13570659
Ref: 422c13570659
Ref: library/doctest doctest-directives13570659
Ref: 421b13570659
Ref: library/doctest grammar-token-doctest-directive13570886
Ref: 422d13570886
Ref: library/doctest grammar-token-doctest-directive_options13570963
Ref: 422e13570963
Ref: library/doctest grammar-token-doctest-directive_option13571061
Ref: 422f13571061
Ref: library/doctest grammar-token-doctest-on_or_off13571150
Ref: 423013571150
Ref: library/doctest grammar-token-doctest-directive_option_name13571191
Ref: 423113571191
Node: Avisos<2>13573298
Ref: library/doctest doctest-warnings13573380
Ref: 423213573380
Ref: library/doctest warnings13573380
Ref: 423313573380
Node: Basic API13575128
Ref: library/doctest basic-api13575272
Ref: 423413575272
Ref: library/doctest doctest-basic-api13575272
Ref: 420813575272
Ref: library/doctest doctest testfile13575672
Ref: 420b13575672
Ref: library/doctest doctest testmod13579620
Ref: 14b513579620
Ref: library/doctest doctest run_docstring_examples13581344
Ref: 423613581344
Node: API do Unittest13582322
Ref: library/doctest doctest-unittest-api13582461
Ref: 423713582461
Ref: library/doctest unittest-api13582461
Ref: 423813582461
Ref: library/doctest doctest DocFileSuite13583242
Ref: 423a13583242
Ref: library/doctest doctest DocTestSuite13587112
Ref: e1f13587112
Ref: library/doctest doctest set_unittest_reportflags13590445
Ref: 423d13590445
Node: Advanced API13591622
Ref: library/doctest advanced-api13591763
Ref: 423e13591763
Ref: library/doctest doctest-advanced-api13591763
Ref: 423f13591763
Node: DocTest Objects13593928
Ref: library/doctest doctest-doctest13594016
Ref: 424113594016
Ref: library/doctest doctest-objects13594016
Ref: 424213594016
Ref: library/doctest doctest DocTest13594069
Ref: 17a513594069
Ref: library/doctest doctest DocTest examples13594486
Ref: 424313594486
Ref: library/doctest doctest DocTest globs13594660
Ref: 423c13594660
Ref: library/doctest doctest DocTest name13594994
Ref: 424413594994
Ref: library/doctest doctest DocTest filename13595186
Ref: 424513595186
Ref: library/doctest doctest DocTest lineno13595415
Ref: 160613595415
Ref: library/doctest doctest DocTest docstring13595692
Ref: 424613595692
Node: Example Objects13595890
Ref: library/doctest doctest-example13596008
Ref: 424713596008
Ref: library/doctest example-objects13596008
Ref: 424813596008
Ref: library/doctest doctest Example13596061
Ref: 424013596061
Ref: library/doctest doctest Example source13596501
Ref: 424913596501
Ref: library/doctest doctest Example want13596744
Ref: 424a13596744
Ref: library/doctest doctest Example exc_msg13597094
Ref: 424b13597094
Ref: library/doctest doctest Example lineno13597577
Ref: 424c13597577
Ref: library/doctest doctest Example indent13597807
Ref: 424d13597807
Ref: library/doctest doctest Example options13597999
Ref: 424e13597999
Node: DocTestFinder objects13598410
Ref: library/doctest doctest-doctestfinder13598534
Ref: 424f13598534
Ref: library/doctest doctestfinder-objects13598534
Ref: 425013598534
Ref: library/doctest doctest DocTestFinder13598599
Ref: 171e13598599
Ref: library/doctest doctest DocTestFinder find13599739
Ref: 17f113599739
Node: DocTestParser objects13601864
Ref: library/doctest doctest-doctestparser13601992
Ref: 425113601992
Ref: library/doctest doctestparser-objects13601992
Ref: 425213601992
Ref: library/doctest doctest DocTestParser13602057
Ref: 421c13602057
Ref: library/doctest doctest DocTestParser get_doctest13602292
Ref: 425313602292
Ref: library/doctest doctest DocTestParser get_examples13602681
Ref: 425413602681
Ref: library/doctest doctest DocTestParser parse13603020
Ref: 425513603020
Node: TestResults objects13603409
Ref: library/doctest testresults-objects13603537
Ref: 425613603537
Ref: library/doctest doctest TestResults13603598
Ref: 425713603598
Ref: library/doctest doctest TestResults failed13603651
Ref: 425813603651
Ref: library/doctest doctest TestResults attempted13603713
Ref: 425913603713
Ref: library/doctest doctest TestResults skipped13603781
Ref: 1de13603781
Node: DocTestRunner objects13603884
Ref: library/doctest doctest-doctestrunner13604012
Ref: 425a13604012
Ref: library/doctest doctestrunner-objects13604012
Ref: 425b13604012
Ref: library/doctest doctest DocTestRunner13604077
Ref: 422b13604077
Ref: library/doctest doctest DocTestRunner report_start13606516
Ref: 425c13606516
Ref: library/doctest doctest DocTestRunner report_success13607015
Ref: 425d13607015
Ref: library/doctest doctest DocTestRunner report_failure13607548
Ref: 425f13607548
Ref: library/doctest doctest DocTestRunner report_unexpected_exception13608071
Ref: 425e13608071
Ref: library/doctest doctest DocTestRunner run13608746
Ref: 1dc13608746
Ref: library/doctest doctest DocTestRunner summarize13609817
Ref: 423513609817
Ref: library/doctest doctest DocTestRunner tries13610279
Ref: 426013610279
Ref: library/doctest doctest DocTestRunner failures13610346
Ref: 426113610346
Ref: library/doctest doctest DocTestRunner skips13610413
Ref: 1dd13610413
Node: OutputChecker objects13610517
Ref: library/doctest doctest-outputchecker13610617
Ref: 426213610617
Ref: library/doctest outputchecker-objects13610617
Ref: 426313610617
Ref: library/doctest doctest OutputChecker13610682
Ref: 422a13610682
Ref: library/doctest doctest OutputChecker check_output13611178
Ref: 426413611178
Ref: library/doctest doctest OutputChecker output_difference13611669
Ref: 426513611669
Node: Depuração13611985
Ref: library/doctest debugging13612118
Ref: 426613612118
Ref: library/doctest doctest-debugging13612118
Ref: 426713612118
Ref: library/doctest doctest script_from_examples13614219
Ref: 426a13614219
Ref: library/doctest doctest testsource13615206
Ref: 426b13615206
Ref: library/doctest doctest debug13616003
Ref: 426913616003
Ref: library/doctest doctest debug_src13617094
Ref: 426d13617094
Ref: library/doctest doctest DebugRunner13617968
Ref: 426813617968
Ref: library/doctest doctest DocTestFailure13618746
Ref: 426f13618746
Ref: library/doctest doctest DocTestFailure test13619109
Ref: 427013619109
Ref: library/doctest doctest DocTestFailure example13619231
Ref: 427113619231
Ref: library/doctest doctest DocTestFailure got13619313
Ref: 427213619313
Ref: library/doctest doctest UnexpectedException13619384
Ref: 426e13619384
Ref: library/doctest doctest UnexpectedException test13619734
Ref: 427313619734
Ref: library/doctest doctest UnexpectedException example13619861
Ref: 427413619861
Ref: library/doctest doctest UnexpectedException exc_info13619948
Ref: 427513619948
Node: Soapbox13620108
Ref: library/doctest doctest-soapbox13620220
Ref: 427613620220
Ref: library/doctest soapbox13620220
Ref: 427713620220
Node: unittest — Framework de testes unitários13624061
Ref: library/unittest doc13624274
Ref: 427813624274
Ref: library/unittest module-unittest13624274
Ref: 10613624274
Ref: library/unittest translation-repo13624274
Ref: 427913624274
Ref: library/unittest unittest-unit-testing-framework13624274
Ref: 427a13624274
Ref: unittest — Framework de testes unitários-Footnote-113627857
Ref: unittest — Framework de testes unitários-Footnote-213627935
Ref: unittest — Framework de testes unitários-Footnote-313628028
Ref: unittest — Framework de testes unitários-Footnote-413628061
Ref: unittest — Framework de testes unitários-Footnote-513628125
Ref: unittest — Framework de testes unitários-Footnote-613628183
Ref: unittest — Framework de testes unitários-Footnote-713628213
Ref: unittest — Framework de testes unitários-Footnote-813628245
Ref: unittest — Framework de testes unitários-Footnote-913628289
Node: Exemplo Básico13628323
Ref: library/unittest basic-example13628459
Ref: 427c13628459
Ref: library/unittest unittest-minimal-example13628459
Ref: 427d13628459
Node: Interface de linha de comando<8>13631721
Ref: library/unittest command-line-interface13631880
Ref: 427f13631880
Ref: library/unittest unittest-command-line-interface13631880
Ref: 428013631880
Node: Opções de linha de comando<4>13633498
Ref: library/unittest command-line-options13633598
Ref: 428213633598
Ref: library/unittest cmdoption-unittest-b13633740
Ref: 137613633740
Ref: library/unittest cmdoption-unittest-buffer13633740
Ref: 428313633740
Ref: library/unittest cmdoption-unittest-c13634023
Ref: 137713634023
Ref: library/unittest cmdoption-unittest-catch13634023
Ref: 428413634023
Ref: library/unittest cmdoption-unittest-f13634411
Ref: 137913634411
Ref: library/unittest cmdoption-unittest-failfast13634411
Ref: 428613634411
Ref: library/unittest cmdoption-unittest-k13634500
Ref: 428713634500
Ref: library/unittest cmdoption-unittest-locals13635317
Ref: 428813635317
Ref: library/unittest cmdoption-unittest-durations13635384
Ref: 428913635384
Node: Test Discovery13635924
Ref: library/unittest test-discovery13636093
Ref: 428a13636093
Ref: library/unittest unittest-test-discovery13636093
Ref: 428113636093
Ref: library/unittest cmdoption-unittest-discover-v13637012
Ref: 428b13637012
Ref: library/unittest cmdoption-unittest-discover-verbose13637012
Ref: 428c13637012
Ref: library/unittest cmdoption-unittest-discover-s13637060
Ref: 428d13637060
Ref: library/unittest cmdoption-unittest-discover-start-directory13637060
Ref: 428e13637060
Ref: library/unittest cmdoption-unittest-discover-p13637178
Ref: 428f13637178
Ref: library/unittest cmdoption-unittest-discover-pattern13637178
Ref: 429013637178
Ref: library/unittest cmdoption-unittest-discover-t13637309
Ref: 429113637309
Ref: library/unittest cmdoption-unittest-discover-top-level-directory13637309
Ref: 429213637309
Node: Organizando código teste13639984
Ref: library/unittest organizing-test-code13640159
Ref: 429413640159
Ref: library/unittest organizing-tests13640159
Ref: 427e13640159
Node: Reutilizando códigos de teste antigos13645417
Ref: library/unittest legacy-unit-tests13645613
Ref: 429513645613
Ref: library/unittest re-using-old-test-code13645613
Ref: 429613645613
Node: Ignorando testes e falhas esperadas13647360
Ref: library/unittest skipping-tests-and-expected-failures13647585
Ref: 429713647585
Ref: library/unittest unittest-skipping13647585
Ref: 429813647585
Ref: library/unittest unittest skip13650830
Ref: 1b5013650830
Ref: library/unittest unittest skipIf13650998
Ref: 429b13650998
Ref: library/unittest unittest skipUnless13651111
Ref: 429c13651111
Ref: library/unittest unittest expectedFailure13651241
Ref: 429a13651241
Ref: library/unittest unittest SkipTest13651585
Ref: 101a13651585
Node: Distinguindo iterações de teste utilizando subtestes13652184
Ref: library/unittest distinguishing-test-iterations-using-subtests13652390
Ref: 429d13652390
Ref: library/unittest subtests13652390
Ref: 101813652390
Node: Classes e funções13655021
Ref: library/unittest classes-and-functions13655237
Ref: 429e13655237
Ref: library/unittest unittest-contents13655237
Ref: 429f13655237
Node: Casos de teste13655461
Ref: library/unittest test-cases13655554
Ref: 42a013655554
Ref: library/unittest testcase-objects13655554
Ref: 42a113655554
Ref: library/unittest unittest TestCase13655605
Ref: 44f13655605
Ref: library/unittest unittest TestCase setUp13657042
Ref: 137e13657042
Ref: library/unittest unittest TestCase tearDown13657467
Ref: 137f13657467
Ref: library/unittest unittest TestCase setUpClass13658331
Ref: a5813658331
Ref: library/unittest unittest TestCase tearDownClass13658855
Ref: 137c13658855
Ref: library/unittest unittest TestCase run13659389
Ref: 11a513659389
Ref: library/unittest unittest TestCase skipTest13660093
Ref: 429913660093
Ref: library/unittest unittest TestCase subTest13660374
Ref: 101713660374
Ref: library/unittest unittest TestCase debug13660995
Ref: 19d413660995
Ref: library/unittest assert-methods13661217
Ref: 427b13661217
Ref: library/unittest unittest TestCase assertEqual13665140
Ref: 52913665140
Ref: library/unittest unittest TestCase assertNotEqual13666067
Ref: 52a13666067
Ref: library/unittest unittest TestCase assertTrue13666266
Ref: 52713666266
Ref: library/unittest unittest TestCase assertFalse13666312
Ref: 52813666312
Ref: library/unittest unittest TestCase assertIs13666863
Ref: 138013666863
Ref: library/unittest unittest TestCase assertIsNot13666916
Ref: 138113666916
Ref: library/unittest unittest TestCase assertIsNone13667087
Ref: 12cc13667087
Ref: library/unittest unittest TestCase assertIsNotNone13667135
Ref: 12cd13667135
Ref: library/unittest unittest TestCase assertIn13667280
Ref: 138913667280
Ref: library/unittest unittest TestCase assertNotIn13667337
Ref: 138a13667337
Ref: library/unittest unittest TestCase assertIsInstance13667503
Ref: 138213667503
Ref: library/unittest unittest TestCase assertNotIsInstance13667559
Ref: 138313667559
Ref: library/unittest unittest TestCase assertRaises13671101
Ref: 52d13671101
Ref: library/unittest unittest TestCase assertRaisesRegex13672845
Ref: 52f13672845
Ref: library/unittest unittest TestCase assertWarns13673916
Ref: 11a313673916
Ref: library/unittest unittest TestCase assertWarnsRegex13675834
Ref: 11a413675834
Ref: library/unittest unittest TestCase assertLogs13676818
Ref: 85c13676818
Ref: library/unittest unittest TestCase records13678014
Ref: 42a513678014
Ref: library/unittest unittest TestCase output13678210
Ref: 42a613678210
Ref: library/unittest unittest TestCase assertNoLogs13678825
Ref: 85b13678825
Ref: library/unittest unittest TestCase assertAlmostEqual13682525
Ref: 52b13682525
Ref: library/unittest unittest TestCase assertNotAlmostEqual13682624
Ref: 52c13682624
Ref: library/unittest unittest TestCase assertGreater13683845
Ref: 138413683845
Ref: library/unittest unittest TestCase assertGreaterEqual13683903
Ref: 138513683903
Ref: library/unittest unittest TestCase assertLess13683966
Ref: 138613683966
Ref: library/unittest unittest TestCase assertLessEqual13684021
Ref: 138713684021
Ref: library/unittest unittest TestCase assertRegex13684414
Ref: 52e13684414
Ref: library/unittest unittest TestCase assertNotRegex13684468
Ref: 53013684468
Ref: library/unittest unittest TestCase assertCountEqual13685256
Ref: 126b13685256
Ref: library/unittest type-specific-methods13685940
Ref: 42a413685940
Ref: library/unittest unittest TestCase addTypeEqualityFunc13686259
Ref: 138d13686259
Ref: library/unittest unittest TestCase assertMultiLineEqual13689015
Ref: 138813689015
Ref: library/unittest unittest TestCase assertSequenceEqual13689438
Ref: 12cb13689438
Ref: library/unittest unittest TestCase assertListEqual13690073
Ref: 12c913690073
Ref: library/unittest unittest TestCase assertTupleEqual13690133
Ref: 12ca13690133
Ref: library/unittest unittest TestCase assertSetEqual13690589
Ref: 12c713690589
Ref: library/unittest unittest TestCase assertDictEqual13691052
Ref: 12c813691052
Ref: library/unittest other-methods-and-attrs13691418
Ref: 42a713691418
Ref: library/unittest unittest TestCase fail13691509
Ref: 42a813691509
Ref: library/unittest unittest TestCase failureException13691653
Ref: 423b13691653
Ref: library/unittest unittest TestCase longMessage13692067
Ref: 137a13692067
Ref: library/unittest unittest TestCase maxDiff13692811
Ref: 126c13692811
Ref: library/unittest unittest TestCase countTestCases13693521
Ref: 42a913693521
Ref: library/unittest unittest TestCase defaultTestResult13693708
Ref: 42a313693708
Ref: library/unittest unittest TestCase id13694141
Ref: 42aa13694141
Ref: library/unittest unittest TestCase shortDescription13694350
Ref: 42ab13694350
Ref: library/unittest unittest TestCase addCleanup13694972
Ref: a8b13694972
Ref: library/unittest unittest TestCase enterContext13695586
Ref: 6b913695586
Ref: library/unittest unittest TestCase doCleanups13695921
Ref: 137d13695921
Ref: library/unittest unittest TestCase addClassCleanup13696583
Ref: a5613696583
Ref: library/unittest unittest TestCase enterClassContext13697265
Ref: 6ba13697265
Ref: library/unittest unittest TestCase doClassCleanups13697622
Ref: 42ac13697622
Ref: library/unittest unittest IsolatedAsyncioTestCase13698334
Ref: 30c13698334
Ref: library/unittest unittest IsolatedAsyncioTestCase loop_factory13698553
Ref: 42ad13698553
Ref: library/unittest unittest IsolatedAsyncioTestCase asyncSetUp13698813
Ref: 42ae13698813
Ref: library/unittest unittest IsolatedAsyncioTestCase asyncTearDown13699265
Ref: 42af13699265
Ref: library/unittest unittest IsolatedAsyncioTestCase addAsyncCleanup13700113
Ref: 42b013700113
Ref: library/unittest unittest IsolatedAsyncioTestCase enterAsyncContext13700272
Ref: 6bb13700272
Ref: library/unittest unittest IsolatedAsyncioTestCase run13700639
Ref: 42b113700639
Ref: library/unittest unittest FunctionTestCase13702385
Ref: 17fb13702385
Node: Grouping tests13702864
Ref: library/unittest grouping-tests13702996
Ref: 42b213702996
Ref: library/unittest testsuite-objects13702996
Ref: 42b313702996
Ref: library/unittest unittest TestSuite13703047
Ref: e2013703047
Ref: library/unittest unittest TestSuite addTest13703995
Ref: 42b413703995
Ref: library/unittest unittest TestSuite addTests13704116
Ref: 42b513704116
Ref: library/unittest unittest TestSuite run13704493
Ref: 42b613704493
Ref: library/unittest unittest TestSuite debug13704797
Ref: 42b713704797
Ref: library/unittest unittest TestSuite countTestCases13705071
Ref: 42b813705071
Ref: library/unittest unittest TestSuite __iter__13705236
Ref: 105f13705236
Node: Carregando e executando testes13706684
Ref: library/unittest loading-and-running-tests13706793
Ref: 42b913706793
Ref: library/unittest unittest TestLoader13706876
Ref: 28e13706876
Ref: library/unittest unittest TestLoader errors13707387
Ref: ebb13707387
Ref: library/unittest unittest TestLoader loadTestsFromTestCase13707878
Ref: 29013707878
Ref: library/unittest unittest TestLoader loadTestsFromModule13708428
Ref: 28f13708428
Ref: library/unittest unittest TestLoader loadTestsFromName13709828
Ref: 138b13709828
Ref: library/unittest unittest TestLoader loadTestsFromNames13711629
Ref: 42bb13711629
Ref: library/unittest unittest TestLoader getTestCaseNames13711916
Ref: 29113711916
Ref: library/unittest unittest TestLoader discover13712120
Ref: 101b13712120
Ref: library/unittest unittest TestLoader testMethodPrefix13715410
Ref: 42bc13715410
Ref: library/unittest unittest TestLoader sortTestMethodsUsing13715695
Ref: 42bd13715695
Ref: library/unittest unittest TestLoader suiteClass13715905
Ref: 138c13715905
Ref: library/unittest unittest TestLoader testNamePatterns13716199
Ref: 42be13716199
Ref: library/unittest unittest TestResult13716917
Ref: 11a613716917
Ref: library/unittest unittest TestResult errors13717784
Ref: 42bf13717784
Ref: library/unittest unittest TestResult failures13718013
Ref: 42c013718013
Ref: library/unittest unittest TestResult skipped13718296
Ref: 42c113718296
Ref: library/unittest unittest TestResult expectedFailures13718498
Ref: 42c213718498
Ref: library/unittest unittest TestResult unexpectedSuccesses13718739
Ref: 42c313718739
Ref: library/unittest unittest TestResult collectedDurations13718903
Ref: 17fe13718903
Ref: library/unittest unittest TestResult shouldStop13719117
Ref: 42c413719117
Ref: library/unittest unittest TestResult testsRun13719250
Ref: 42c613719250
Ref: library/unittest unittest TestResult buffer13719328
Ref: 42c713719328
Ref: library/unittest unittest TestResult failfast13719783
Ref: 42ca13719783
Ref: library/unittest unittest TestResult tb_locals13720014
Ref: 42cb13720014
Ref: library/unittest unittest TestResult wasSuccessful13720168
Ref: 42cc13720168
Ref: library/unittest unittest TestResult stop13720507
Ref: 42c513720507
Ref: library/unittest unittest TestResult startTest13721468
Ref: 42c813721468
Ref: library/unittest unittest TestResult stopTest13721568
Ref: 42c913721568
Ref: library/unittest unittest TestResult startTestRun13721704
Ref: 138f13721704
Ref: library/unittest unittest TestResult stopTestRun13721831
Ref: 139013721831
Ref: library/unittest unittest TestResult addError13721956
Ref: 19d713721956
Ref: library/unittest unittest TestResult addFailure13722424
Ref: 19d613722424
Ref: library/unittest unittest TestResult addSuccess13722883
Ref: 42cd13722883
Ref: library/unittest unittest TestResult addSkip13723026
Ref: 19d813723026
Ref: library/unittest unittest TestResult addExpectedFailure13723323
Ref: 42ce13723323
Ref: library/unittest unittest TestResult addUnexpectedSuccess13723750
Ref: 42cf13723750
Ref: library/unittest unittest TestResult addSubTest13724057
Ref: 19d913724057
Ref: library/unittest unittest TestResult addDuration13724737
Ref: 183f13724737
Ref: library/unittest unittest TextTestResult13724989
Ref: 53113724989
Ref: library/unittest unittest defaultTestLoader13725395
Ref: 42ba13725395
Ref: library/unittest unittest TextTestRunner13725650
Ref: 183e13725650
Ref: library/unittest unittest TextTestRunner _makeResult13727068
Ref: 42d113727068
Ref: library/unittest unittest TextTestRunner run13727720
Ref: 42d213727720
Ref: library/unittest unittest main13728083
Ref: 101913728083
Node: load_tests Protocol13731062
Ref: library/unittest id113731148
Ref: 429313731148
Ref: library/unittest load-tests-protocol13731148
Ref: 423913731148
Node: Classes e Módulos de Definição de Contexto13733829
Ref: library/unittest class-and-module-fixtures13734010
Ref: 42a213734010
Node: setUpClass and tearDownClass13735964
Ref: library/unittest setupclass-and-teardownclass13736113
Ref: 42d313736113
Node: setUpModule and tearDownModule13737028
Ref: library/unittest setupmodule-and-teardownmodule13737177
Ref: 42d413737177
Ref: library/unittest unittest setUpModule13737260
Ref: a5713737260
Ref: library/unittest unittest addModuleCleanup13737791
Ref: a5513737791
Ref: library/unittest unittest enterModuleContext13738401
Ref: 6bc13738401
Ref: library/unittest unittest doModuleCleanups13738728
Ref: 195d13738728
Node: Tratamento de sinal13739383
Ref: library/unittest signal-handling13739536
Ref: 428513739536
Ref: library/unittest unittest installHandler13740784
Ref: 42d513740784
Ref: library/unittest unittest registerResult13741028
Ref: 42d613741028
Ref: library/unittest unittest removeResult13741524
Ref: 42d713741524
Ref: library/unittest unittest removeHandler13741750
Ref: 137813741750
Node: unittest mock — mock object library13742140
Ref: library/unittest mock doc13742339
Ref: 42d813742339
Ref: library/unittest mock module-unittest mock13742339
Ref: 10713742339
Ref: library/unittest mock translation-repo13742339
Ref: 42d913742339
Ref: library/unittest mock unittest-mock-mock-object-library13742339
Ref: 42da13742339
Ref: unittest mock — mock object library-Footnote-113744102
Ref: unittest mock — mock object library-Footnote-213744175
Node: Guia Rápido13744214
Ref: library/unittest mock quick-guide13744322
Ref: 42db13744322
Node: A classe Mock13750031
Ref: library/unittest mock the-mock-class13750171
Ref: 42e013750171
Ref: library/unittest mock unittest mock Mock13751252
Ref: a5413751252
Ref: library/unittest mock unittest mock Mock assert_called13754742
Ref: d1913754742
Ref: library/unittest mock unittest mock Mock assert_called_once13755044
Ref: d1a13755044
Ref: library/unittest mock unittest mock Mock assert_called_with13755692
Ref: 1b9913755692
Ref: library/unittest mock unittest mock Mock assert_called_once_with13756077
Ref: 42e613756077
Ref: library/unittest mock unittest mock Mock assert_any_call13756759
Ref: 42e713756759
Ref: library/unittest mock unittest mock Mock assert_has_calls13757426
Ref: 179d13757426
Ref: library/unittest mock unittest mock Mock assert_not_called13758272
Ref: ebd13758272
Ref: library/unittest mock unittest mock Mock reset_mock13758750
Ref: d1b13758750
Ref: library/unittest mock unittest mock Mock mock_add_spec13760378
Ref: 42e913760378
Ref: library/unittest mock unittest mock Mock attach_mock13760704
Ref: 16fa13760704
Ref: library/unittest mock unittest mock Mock configure_mock13760998
Ref: 42e513760998
Ref: library/unittest mock unittest mock Mock __dir__13762237
Ref: 42eb13762237
Ref: library/unittest mock unittest mock Mock _get_child_mock13762571
Ref: 42ed13762571
Ref: library/unittest mock unittest mock Mock called13762972
Ref: 42ee13762972
Ref: library/unittest mock unittest mock Mock call_count13763271
Ref: 15aa13763271
Ref: library/unittest mock unittest mock Mock return_value13763601
Ref: 42e413763601
Ref: library/unittest mock unittest mock Mock side_effect13764421
Ref: 42dc13764421
Ref: library/unittest mock unittest mock Mock call_args13766922
Ref: 1af813766922
Ref: library/unittest mock unittest mock Mock call_args_list13768768
Ref: 42ef13768768
Ref: library/unittest mock unittest mock Mock method_calls13769810
Ref: 42ea13769810
Ref: library/unittest mock unittest mock Mock mock_calls13770547
Ref: 42e813770547
Ref: library/unittest mock unittest mock Mock __class__13772084
Ref: 42f113772084
Ref: library/unittest mock unittest mock NonCallableMock13772842
Ref: 42e113772842
Ref: library/unittest mock unittest mock PropertyMock13775398
Ref: 42f213775398
Ref: library/unittest mock unittest mock AsyncMock13777299
Ref: a5313777299
Ref: library/unittest mock unittest mock AsyncMock assert_awaited13780168
Ref: 42f313780168
Ref: library/unittest mock unittest mock AsyncMock assert_awaited_once13780904
Ref: 42f413780904
Ref: library/unittest mock unittest mock AsyncMock assert_awaited_with13781468
Ref: 42f513781468
Ref: library/unittest mock unittest mock AsyncMock assert_awaited_once_with13782139
Ref: 42f613782139
Ref: library/unittest mock unittest mock AsyncMock assert_any_await13782865
Ref: 42f713782865
Ref: library/unittest mock unittest mock AsyncMock assert_has_awaits13783509
Ref: 42f813783509
Ref: library/unittest mock unittest mock AsyncMock assert_not_awaited13784605
Ref: 42f913784605
Ref: library/unittest mock unittest mock AsyncMock reset_mock13784780
Ref: 42fa13784780
Ref: library/unittest mock unittest mock AsyncMock await_count13785012
Ref: 42fb13785012
Ref: library/unittest mock unittest mock AsyncMock await_args13785457
Ref: 42fc13785457
Ref: library/unittest mock unittest mock AsyncMock await_args_list13786075
Ref: 1af713786075
Ref: library/unittest mock unittest mock ThreadingMock13786786
Ref: 42fd13786786
Ref: library/unittest mock unittest mock ThreadingMock wait_until_called13787494
Ref: 42ff13787494
Ref: library/unittest mock unittest mock ThreadingMock wait_until_any_call_with13788048
Ref: 430013788048
Ref: library/unittest mock unittest mock ThreadingMock DEFAULT_TIMEOUT13788648
Ref: 42fe13788648
Ref: A classe Mock-Footnote-113788984
Node: Fazendo chamadas13789406
Ref: library/unittest mock calling13789500
Ref: 430113789500
Node: Deletando Atributos13792788
Ref: library/unittest mock deleting-attributes13792922
Ref: 430213792922
Ref: library/unittest mock id213792922
Ref: 430313792922
Node: Nomes de Mock e o atributo name13793699
Ref: library/unittest mock mock-names-and-the-name-attribute13793846
Ref: 430413793846
Node: Anexando Mocks como Atributos13794436
Ref: library/unittest mock attaching-mocks-as-attributes13794555
Ref: 430513794555
Node: Os criadores de patches13796419
Ref: library/unittest mock the-patchers13796581
Ref: 430613796581
Node: patch13797231
Ref: library/unittest mock patch13797317
Ref: 430713797317
Ref: library/unittest mock unittest mock patch13797464
Ref: ec113797464
Node: patch object13806439
Ref: library/unittest mock patch-object13806544
Ref: 430913806544
Ref: library/unittest mock unittest mock patch object13806589
Ref: 167f13806589
Node: patch dict13808068
Ref: library/unittest mock patch-dict13808182
Ref: 430a13808182
Ref: library/unittest mock unittest mock patch dict13808225
Ref: 1b6a13808225
Node: patch multiple13812359
Ref: library/unittest mock patch-multiple13812491
Ref: 430c13812491
Ref: library/unittest mock unittest mock patch multiple13812542
Ref: 430d13812542
Node: métodos do patch start e stop13815250
Ref: library/unittest mock patch-methods-start-and-stop13815390
Ref: 430e13815390
Ref: library/unittest mock start-and-stop13815390
Ref: 430f13815390
Ref: library/unittest mock unittest mock patch stopall13818144
Ref: 431013818144
Node: patch de embutidos13818253
Ref: library/unittest mock id413818390
Ref: 431113818390
Ref: library/unittest mock patch-builtins13818390
Ref: 431213818390
Node: TEST_PREFIX13818719
Ref: library/unittest mock id513818853
Ref: 431313818853
Ref: library/unittest mock test-prefix13818853
Ref: 430b13818853
Node: Aninhando Decoradores Patch13819736
Ref: library/unittest mock nesting-patch-decorators13819868
Ref: 431413819868
Node: Onde fazer patch13820791
Ref: library/unittest mock id613820950
Ref: 430813820950
Ref: library/unittest mock where-to-patch13820950
Ref: 42dd13820950
Node: Patching Descriptors and Proxy Objects13822720
Ref: library/unittest mock patching-descriptors-and-proxy-objects13822843
Ref: 431513822843
Ref: Patching Descriptors and Proxy Objects-Footnote-113823284
Node: MagicMock and magic method support13823409
Ref: library/unittest mock magicmock-and-magic-method-support13823567
Ref: 431613823567
Node: Simulando Métodos Mágicos13823715
Ref: library/unittest mock magic-methods13823832
Ref: 42de13823832
Ref: library/unittest mock mocking-magic-methods13823832
Ref: 431713823832
Ref: Simulando Métodos Mágicos-Footnote-113827761
Ref: Simulando Métodos Mágicos-Footnote-213828000
Node: Magic Mock13828121
Ref: library/unittest mock magic-mock13828238
Ref: 431913828238
Ref: library/unittest mock unittest mock MagicMock13828383
Ref: ebe13828383
Ref: library/unittest mock unittest mock NonCallableMagicMock13828868
Ref: 42e213828868
Node: Ajudantes13832207
Ref: library/unittest mock helpers13832399
Ref: 431a13832399
Node: sentinel13832594
Ref: library/unittest mock sentinel13832664
Ref: 431b13832664
Ref: library/unittest mock unittest mock sentinel13832703
Ref: bb813832703
Node: DEFAULT13833865
Ref: library/unittest mock default13833951
Ref: 431c13833951
Ref: library/unittest mock unittest mock DEFAULT13833988
Ref: 42e313833988
Node: chamada13834241
Ref: library/unittest mock call13834334
Ref: 431d13834334
Ref: library/unittest mock unittest mock call13834371
Ref: 1b4513834371
Ref: library/unittest mock unittest mock call call_list13834912
Ref: 431e13834912
Ref: library/unittest mock calls-as-tuples13835865
Ref: 42f013835865
Node: create_autospec13837491
Ref: library/unittest mock create-autospec13837580
Ref: 431f13837580
Ref: library/unittest mock unittest mock create_autospec13837633
Ref: 16f413837633
Node: ANY13838949
Ref: library/unittest mock any13839041
Ref: 432013839041
Ref: library/unittest mock unittest mock ANY13839070
Ref: 1b4313839070
Node: FILTER_DIR13840232
Ref: library/unittest mock filter-dir13840318
Ref: 432113840318
Ref: library/unittest mock unittest mock FILTER_DIR13840361
Ref: 42ec13840361
Node: mock_open13842377
Ref: library/unittest mock mock-open13842487
Ref: 432213842487
Ref: library/unittest mock unittest mock mock_open13842528
Ref: 101d13842528
Ref: mock_open-Footnote-113845372
Node: Especificação automática13845397
Ref: library/unittest mock auto-speccing13845510
Ref: 42df13845510
Ref: library/unittest mock autospeccing13845510
Ref: 432313845510
Ref: Especificação automática-Footnote-113854257
Node: Vedando mocks13854498
Ref: library/unittest mock sealing-mocks13854593
Ref: 432413854593
Ref: library/unittest mock unittest mock seal13854642
Ref: bb913854642
Node: Order of precedence of side_effect return_value and wraps13855461
Ref: library/unittest mock order-of-precedence-of-side-effect-return-value-and-wraps13855610
Ref: 432513855610
Node: unittest mock — primeiros passos13859693
Ref: library/unittest mock-examples doc13859898
Ref: 432613859898
Ref: library/unittest mock-examples translation-repo13859898
Ref: 432713859898
Ref: library/unittest mock-examples unittest-mock-getting-started13859898
Ref: 432813859898
Ref: library/unittest mock-examples getting-started13860017
Ref: 432913860017
Node: Usando Mock13860085
Ref: library/unittest mock-examples using-mock13860192
Ref: 432a13860192
Node: Métodos de aplicação de patches em Mock13860697
Ref: library/unittest mock-examples mock-patching-methods13860837
Ref: 432b13860837
Node: Mock de chamadas de métodos em um objeto13862497
Ref: library/unittest mock-examples mock-for-method-calls-on-an-object13862661
Ref: 432c13862661
Node: Mocking Classes13863818
Ref: library/unittest mock-examples mocking-classes13863957
Ref: 432d13863957
Node: Nomeando os mocks13864954
Ref: library/unittest mock-examples naming-your-mocks13865080
Ref: 432e13865080
Node: Rastreando todas as chamadas13865512
Ref: library/unittest mock-examples tracking-all-calls13865659
Ref: 432f13865659
Node: Setting Return Values and Attributes13867101
Ref: library/unittest mock-examples setting-return-values-and-attributes13867260
Ref: 433013867260
Node: Raising exceptions with mocks13868771
Ref: library/unittest mock-examples raising-exceptions-with-mocks13868937
Ref: 433113868937
Node: Side effect functions and iterables13869317
Ref: library/unittest mock-examples side-effect-functions-and-iterables13869477
Ref: 433213869477
Node: Mocking asynchronous iterators13870517
Ref: library/unittest mock-examples mocking-asynchronous-iterators13870684
Ref: 433313870684
Node: Mocking asynchronous context manager13871258
Ref: library/unittest mock-examples mocking-asynchronous-context-manager13871429
Ref: 433413871429
Node: Creating a Mock from an Existing Object13872339
Ref: library/unittest mock-examples creating-a-mock-from-an-existing-object13872524
Ref: 433513872524
Node: Using side_effect to return per file content13874370
Ref: library/unittest mock-examples using-side-effect-to-return-per-file-content13874510
Ref: 433613874510
Node: Patch Decorators13875361
Ref: library/unittest mock-examples patch-decorators13875493
Ref: 433713875493
Node: Further Examples13880800
Ref: library/unittest mock-examples further-examples13880912
Ref: 433813880912
Ref: library/unittest mock-examples id113880912
Ref: 433913880912
Node: Mocking chained calls13881540
Ref: library/unittest mock-examples mocking-chained-calls13881638
Ref: 433a13881638
Node: Partial mocking13884753
Ref: library/unittest mock-examples partial-mocking13884886
Ref: 433b13884886
Ref: Partial mocking-Footnote-113886887
Node: Mocking a Generator Method13886988
Ref: library/unittest mock-examples mocking-a-generator-method13887144
Ref: 433c13887144
Ref: Mocking a Generator Method-Footnote-113888278
Node: Applying the same patch to every test method13888598
Ref: library/unittest mock-examples applying-the-same-patch-to-every-test-method13888762
Ref: 433d13888762
Node: Mocking Unbound Methods13891062
Ref: library/unittest mock-examples mocking-unbound-methods13891233
Ref: 433e13891233
Node: Checking multiple calls with mock13893003
Ref: library/unittest mock-examples checking-multiple-calls-with-mock13893159
Ref: 433f13893159
Node: Coping with mutable arguments13894775
Ref: library/unittest mock-examples coping-with-mutable-arguments13894923
Ref: 434013894923
Node: Nesting Patches13899107
Ref: library/unittest mock-examples nesting-patches13899257
Ref: 434113899257
Node: Mocking a dictionary with MagicMock13901066
Ref: library/unittest mock-examples mocking-a-dictionary-with-magicmock13901223
Ref: 434213901223
Node: Mock subclasses and their attributes13903870
Ref: library/unittest mock-examples mock-subclasses-and-their-attributes13904043
Ref: 434313904043
Ref: Mock subclasses and their attributes-Footnote-113906179
Ref: Mock subclasses and their attributes-Footnote-213906349
Ref: Mock subclasses and their attributes-Footnote-313906407
Node: Mocking imports with patch dict13906488
Ref: library/unittest mock-examples mocking-imports-with-patch-dict13906682
Ref: 434413906682
Node: Tracking order of calls and less verbose call assertions13909330
Ref: library/unittest mock-examples tracking-order-of-calls-and-less-verbose-call-assertions13909518
Ref: 434513909518
Node: More complex argument matching13912857
Ref: library/unittest mock-examples more-complex-argument-matching13913005
Ref: 434613913005
Ref: More complex argument matching-Footnote-113916077
Ref: More complex argument matching-Footnote-213916120
Node: test — Pacote de Testes de Regressão do Python13916242
Ref: library/test doc13916474
Ref: 434713916474
Ref: library/test module-test13916474
Ref: e213916474
Ref: library/test test-regression-tests-package-for-python13916474
Ref: 434813916474
Ref: library/test translation-repo13916474
Ref: 434913916474
Node: Escrever testes unitários para o pacote test13918052
Ref: library/test writing-tests13918248
Ref: 434a13918248
Ref: library/test writing-unit-tests-for-the-test-package13918248
Ref: 434b13918248
Node: Executando testes usando a interface de linha de comando13923308
Ref: library/test module-test regrtest13923504
Ref: e313923504
Ref: library/test regrtest13923504
Ref: 103f13923504
Ref: library/test running-tests-using-the-command-line-interface13923504
Ref: 434c13923504
Node: test support — Utilitários para o conjunto de teste do Python13925660
Ref: library/test module-test support13925915
Ref: e413925915
Ref: library/test test-support-utilities-for-the-python-test-suite13925915
Ref: 434d13925915
Ref: library/test test support TestFailed13926452
Ref: 434e13926452
Ref: library/test test support ResourceDenied13926692
Ref: 434f13926692
Ref: library/test test support verbose13926993
Ref: 435113926993
Ref: library/test test support is_jython13927256
Ref: 435213927256
Ref: library/test test support is_android13927352
Ref: 435313927352
Ref: library/test test support unix_shell13927429
Ref: 435413927429
Ref: library/test test support LOOPBACK_TIMEOUT13927552
Ref: 1b2b13927552
Ref: library/test test support INTERNET_TIMEOUT13928201
Ref: 1b2c13928201
Ref: library/test test support SHORT_TIMEOUT13928753
Ref: 19ee13928753
Ref: library/test test support LONG_TIMEOUT13929178
Ref: 1b2d13929178
Ref: library/test test support PGO13929740
Ref: 435613929740
Ref: library/test test support PIPE_MAX_SIZE13929859
Ref: 435713929859
Ref: library/test test support Py_DEBUG13930057
Ref: 435813930057
Ref: library/test test support SOCK_MAX_SIZE13930285
Ref: 435a13930285
Ref: library/test test support TEST_SUPPORT_DIR13930485
Ref: 435b13930485
Ref: library/test test support TEST_HOME_DIR13930613
Ref: 435c13930613
Ref: library/test test support TEST_DATA_DIR13930721
Ref: 435d13930721
Ref: library/test test support MAX_Py_ssize_t13930826
Ref: 435e13930826
Ref: library/test test support max_memuse13930936
Ref: 435f13930936
Ref: library/test test support real_max_memuse13931099
Ref: 436113931099
Ref: library/test test support MISSING_C_DOCSTRINGS13931271
Ref: 436213931271
Ref: library/test test support HAVE_DOCSTRINGS13931558
Ref: 436313931558
Ref: library/test test support TEST_HTTP_URL13931833
Ref: 436413931833
Ref: library/test test support ALWAYS_EQ13931942
Ref: 436513931942
Ref: library/test test support NEVER_EQ13932058
Ref: 436613932058
Ref: library/test test support LARGEST13932210
Ref: 436713932210
Ref: library/test test support SMALLEST13932344
Ref: 436813932344
Ref: library/test test support busy_retry13932542
Ref: 436913932542
Ref: library/test test support sleeping_retry13933184
Ref: 436a13933184
Ref: library/test test support is_resource_enabled13934068
Ref: 436b13934068
Ref: library/test test support get_resource_value13934300
Ref: 436c13934300
Ref: library/test test support python_is_optimized13934511
Ref: 436d13934511
Ref: library/test test support with_pymalloc13934639
Ref: 436e13934639
Ref: library/test test support requires13934728
Ref: 435013934728
Ref: library/test test support sortdict13935099
Ref: 436f13935099
Ref: library/test test support findfile13935191
Ref: 437013935191
Ref: library/test test support get_pagesize13935563
Ref: 437113935563
Ref: library/test test support setswitchinterval13935676
Ref: 437213935676
Ref: library/test test support check_impl_detail13935902
Ref: 437313935902
Ref: library/test test support set_memlimit13936420
Ref: 436013936420
Ref: library/test test support record_original_stdout13936591
Ref: 437413936591
Ref: library/test test support get_original_stdout13936761
Ref: 437513936761
Ref: library/test test support args_from_interpreter_flags13936951
Ref: 437613936951
Ref: library/test test support optim_args_from_interpreter_flags13937149
Ref: 437713937149
Ref: library/test test support captured_stdin13937350
Ref: 437813937350
Ref: library/test test support captured_stdout13937395
Ref: 437913937395
Ref: library/test test support captured_stderr13937441
Ref: 1b6d13937441
Ref: library/test test support disable_faulthandler13938186
Ref: 437a13938186
Ref: library/test test support gc_collect13938329
Ref: 437b13938329
Ref: library/test test support disable_gc13938717
Ref: 437c13938717
Ref: library/test test support swap_attr13938898
Ref: 437d13938898
Ref: library/test test support swap_item13939482
Ref: 437e13939482
Ref: library/test test support flush_std_streams13940064
Ref: 437f13940064
Ref: library/test test support print_warning13940345
Ref: 438013940345
Ref: library/test test support wait_process13940624
Ref: 1aec13940624
Ref: library/test test support calcobjsize13941148
Ref: 438213941148
Ref: library/test test support calcvobjsize13941381
Ref: 438313941381
Ref: library/test test support checksizeof13941619
Ref: 438513941619
Ref: library/test test support anticipate_failure13941790
Ref: 438613941790
Ref: library/test test support system_must_validate_cert13942052
Ref: 438713942052
Ref: library/test test support run_with_locale13942205
Ref: 438813942205
Ref: library/test test support run_with_tz13942565
Ref: 438913942565
Ref: library/test test support requires_freebsd_version13942727
Ref: 438a13942727
Ref: library/test test support requires_linux_version13942941
Ref: 438b13942941
Ref: library/test test support requires_mac_version13943150
Ref: 438c13943150
Ref: library/test test support requires_gil_enabled13943356
Ref: 438d13943356
Ref: library/test test support requires_IEEE_75413943549
Ref: 438e13943549
Ref: library/test test support requires_zlib13943658
Ref: 438f13943658
Ref: library/test test support requires_gzip13943773
Ref: 439013943773
Ref: library/test test support requires_bz213943887
Ref: 439113943887
Ref: library/test test support requires_lzma13943999
Ref: 439213943999
Ref: library/test test support requires_resource13944113
Ref: 439313944113
Ref: library/test test support requires_docstrings13944238
Ref: 439413944238
Ref: library/test test support requires_limited_api13944361
Ref: 439513944361
Ref: library/test test support cpython_only13944501
Ref: 439613944501
Ref: library/test test support impl_detail13944597
Ref: 439713944597
Ref: library/test test support no_tracing13944827
Ref: 439813944827
Ref: library/test test support refcount_test13944950
Ref: 439913944950
Ref: library/test test support bigmemtest13945254
Ref: 439a13945254
Ref: library/test test support bigaddrspacetest13946001
Ref: 439b13946001
Ref: library/test test support check_syntax_error13946112
Ref: 439c13946112
Ref: library/test test support open_urlresource13946666
Ref: 439d13946666
Ref: library/test test support reap_children13946801
Ref: 439e13946801
Ref: library/test test support get_attribute13947075
Ref: 439f13947075
Ref: library/test test support catch_unraisable_exception13947238
Ref: 1b4f13947238
Ref: library/test test support load_package_tests13948129
Ref: 43a013948129
Ref: library/test test support detect_api_mismatch13948759
Ref: 43a113948759
Ref: library/test test support patch13949235
Ref: 43a213949235
Ref: library/test test support run_in_subinterp13949571
Ref: 43a313949571
Ref: library/test test support check_free_after_iterating13949740
Ref: 43a413949740
Ref: library/test test support missing_compiler_executable13949897
Ref: 43a513949897
Ref: library/test test support check__all__13950219
Ref: 1ac013950219
Ref: library/test test support skip_if_broken_multiprocessing_synchronize13952047
Ref: 1ac113952047
Ref: library/test test support check_disallow_instantiation13952345
Ref: 43a613952345
Ref: library/test test support adjust_int_max_str_digits13952558
Ref: 43a713952558
Ref: library/test test support SuppressCrashReport13953034
Ref: 43a813953034
Ref: library/test test support SaveSignals13953639
Ref: 43aa13953639
Ref: library/test test support SaveSignals save13953771
Ref: 43ab13953771
Ref: library/test test support SaveSignals restore13953918
Ref: 43ac13953918
Ref: library/test test support Matcher13954058
Ref: 43ad13954058
Ref: library/test test support Matcher matches13954092
Ref: 43ae13954092
Ref: library/test test support Matcher match_value13954231
Ref: 43af13954231
Node: test support socket_helper — Utilities for socket tests13954379
Ref: library/test module-test support socket_helper13954656
Ref: e913954656
Ref: library/test test-support-socket-helper-utilities-for-socket-tests13954656
Ref: 43b013954656
Ref: library/test test support socket_helper IPV6_ENABLED13954908
Ref: 43b113954908
Ref: library/test test support socket_helper find_unused_port13955039
Ref: 43b213955039
Ref: library/test test support socket_helper bind_port13956362
Ref: 43b313956362
Ref: library/test test support socket_helper bind_unix_socket13957307
Ref: 43b413957307
Ref: library/test test support socket_helper skip_unless_bind_unix_socket13957491
Ref: 43b513957491
Ref: library/test test support socket_helper transient_internet13957661
Ref: 435513957661
Node: test support script_helper — Utilities for the Python execution tests13957934
Ref: library/test module-test support script_helper13958246
Ref: e813958246
Ref: library/test test-support-script-helper-utilities-for-the-python-execution-tests13958246
Ref: 43b613958246
Ref: library/test test support script_helper interpreter_requires_environment13958519
Ref: 43b713958519
Ref: library/test test support script_helper run_python_until_end13959495
Ref: 43b813959495
Ref: library/test test support script_helper assert_python_ok13959874
Ref: 43b913959874
Ref: library/test test support script_helper assert_python_failure13960508
Ref: 43ba13960508
Ref: library/test test support script_helper spawn_python13960943
Ref: 43bb13960943
Ref: library/test test support script_helper kill_python13961256
Ref: 43bc13961256
Ref: library/test test support script_helper make_script13961412
Ref: 43bd13961412
Ref: library/test test support script_helper make_zip_script13961727
Ref: 43be13961727
Ref: library/test test support script_helper make_pkg13962100
Ref: 43bf13962100
Ref: library/test test support script_helper make_zip_pkg13962310
Ref: 43c013962310
Node: test support bytecode_helper — Ferramentas de suporte para testar a geração correta de bytecode13962840
Ref: library/test module-test support bytecode_helper13963158
Ref: e513963158
Ref: library/test test-support-bytecode-helper-support-tools-for-testing-correct-bytecode-generation13963158
Ref: 43c113963158
Ref: library/test test support bytecode_helper BytecodeTestCase13963561
Ref: 43c213963561
Ref: library/test test support bytecode_helper BytecodeTestCase get_disassembly_as_string13963721
Ref: 43c313963721
Ref: library/test test support bytecode_helper BytecodeTestCase assertInBytecode13963831
Ref: 43c413963831
Ref: library/test test support bytecode_helper BytecodeTestCase assertNotInBytecode13964012
Ref: 43c513964012
Node: test support threading_helper — Utilities for threading tests13964168
Ref: library/test module-test support threading_helper13964464
Ref: ea13964464
Ref: library/test test-support-threading-helper-utilities-for-threading-tests13964464
Ref: 43c613964464
Ref: library/test test support threading_helper join_thread13964735
Ref: 43c713964735
Ref: library/test test support threading_helper reap_threads13964957
Ref: 43c813964957
Ref: library/test test support threading_helper start_threads13965098
Ref: 43c913965098
Ref: library/test test support threading_helper threading_cleanup13965506
Ref: 43ca13965506
Ref: library/test test support threading_helper threading_setup13965744
Ref: 43cb13965744
Ref: library/test test support threading_helper wait_threads_exit13965872
Ref: 43cc13965872
Ref: library/test test support threading_helper catch_threading_exception13966055
Ref: 43cd13966055
Node: test support os_helper — Utilities for os tests13967019
Ref: library/test module-test support os_helper13967273
Ref: e713967273
Ref: library/test test-support-os-helper-utilities-for-os-tests13967273
Ref: 43ce13967273
Ref: library/test test support os_helper FS_NONASCII13967502
Ref: 43cf13967502
Ref: library/test test support os_helper SAVEDCWD13967615
Ref: 43d013967615
Ref: library/test test support os_helper TESTFN13967696
Ref: 43d113967696
Ref: library/test test support os_helper TESTFN_NONASCII13967896
Ref: 43d213967896
Ref: library/test test support os_helper TESTFN_UNENCODABLE13968281
Ref: 43d313968281
Ref: library/test test support os_helper TESTFN_UNDECODABLE13968552
Ref: 43d413968552
Ref: library/test test support os_helper TESTFN_UNICODE13968827
Ref: 43d513968827
Ref: library/test test support os_helper EnvironmentVarGuard13968936
Ref: 142913968936
Ref: library/test test support os_helper FakePath13969421
Ref: 43d613969421
Ref: library/test test support os_helper EnvironmentVarGuard set13969684
Ref: 43d713969684
Ref: library/test test support os_helper EnvironmentVarGuard unset13969835
Ref: 43d813969835
Ref: library/test test support os_helper can_symlink13969953
Ref: 43d913969953
Ref: library/test test support os_helper can_xattr13970088
Ref: 43da13970088
Ref: library/test test support os_helper change_cwd13970212
Ref: 43db13970212
Ref: library/test test support os_helper create_empty_file13970581
Ref: 43dc13970581
Ref: library/test test support os_helper fd_count13970733
Ref: 43dd13970733
Ref: library/test test support os_helper fs_is_case_insensitive13970841
Ref: 43de13970841
Ref: library/test test support os_helper make_bad_fd13970999
Ref: 43df13970999
Ref: library/test test support os_helper rmdir13971172
Ref: 43e013971172
Ref: library/test test support os_helper rmtree13971480
Ref: 43e113971480
Ref: library/test test support os_helper skip_unless_symlink13971823
Ref: 43e213971823
Ref: library/test test support os_helper skip_unless_xattr13971972
Ref: 43e313971972
Ref: library/test test support os_helper temp_cwd13972112
Ref: 43e413972112
Ref: library/test test support os_helper temp_dir13972780
Ref: 43e513972780
Ref: library/test test support os_helper temp_umask13973238
Ref: 43e613973238
Ref: library/test test support os_helper unlink13973381
Ref: 43e713973381
Node: test support import_helper — Utilities for import tests13973626
Ref: library/test module-test support import_helper13973878
Ref: e613973878
Ref: library/test test-support-import-helper-utilities-for-import-tests13973878
Ref: 43e813973878
Ref: library/test test support import_helper forget13974131
Ref: 43e913974131
Ref: library/test test support import_helper import_fresh_module13974316
Ref: 19ed13974316
Ref: library/test test support import_helper import_module13975941
Ref: 43ea13975941
Ref: library/test test support import_helper modules_setup13976568
Ref: 43eb13976568
Ref: library/test test support import_helper modules_cleanup13976678
Ref: 43ec13976678
Ref: library/test test support import_helper unload13976856
Ref: 43ed13976856
Ref: library/test test support import_helper make_legacy_pyc13976956
Ref: 43ee13976956
Ref: library/test test support import_helper CleanImport13977305
Ref: 43ef13977305
Ref: library/test test support import_helper DirsOnSysPath13977696
Ref: 43f013977696
Ref: test support import_helper — Utilities for import tests-Footnote-113978254
Ref: test support import_helper — Utilities for import tests-Footnote-213978296
Node: test support warnings_helper — Utilities for warnings tests13978338
Ref: library/test module-test support warnings_helper13978532
Ref: eb13978532
Ref: library/test test-support-warnings-helper-utilities-for-warnings-tests13978532
Ref: 43f113978532
Ref: library/test test support warnings_helper ignore_warnings13978797
Ref: 43f213978797
Ref: library/test test support warnings_helper check_no_resource_warning13979315
Ref: 43f313979315
Ref: library/test test support warnings_helper check_syntax_warning13979605
Ref: 43f413979605
Ref: library/test test support warnings_helper check_warnings13980429
Ref: 43f513980429
Ref: library/test test support warnings_helper WarningsRecorder13983554
Ref: 43f613983554
Node: Depuração e perfilamento13983746
Ref: library/debug doc13983929
Ref: 43f713983929
Ref: library/debug debugging-and-profiling13983929
Ref: 43f813983929
Ref: library/debug translation-repo13983929
Ref: 43f913983929
Ref: library/audit_events audit-events13984477
Ref: 199c13984477
Node: Tabela de eventos de auditoria13984855
Ref: library/audit_events doc13984987
Ref: 43fa13984987
Ref: library/audit_events audit-events-table13984987
Ref: 43fb13984987
Ref: Tabela de eventos de auditoria-Footnote-114043957
Node: bdb — Framework do depurador14043999
Ref: library/bdb doc14044182
Ref: 441a14044182
Ref: library/bdb bdb-debugger-framework14044182
Ref: 441b14044182
Ref: library/bdb module-bdb14044182
Ref: f14044182
Ref: library/bdb translation-repo14044182
Ref: 441c14044182
Ref: library/bdb bdb BdbQuit14044553
Ref: 441d14044553
Ref: library/bdb bdb Breakpoint14044719
Ref: 441e14044719
Ref: library/bdb bdb Breakpoint deleteMe14045834
Ref: 442514045834
Ref: library/bdb bdb Breakpoint enable14046075
Ref: 442614046075
Ref: library/bdb bdb Breakpoint disable14046160
Ref: 442714046160
Ref: library/bdb bdb Breakpoint bpformat14046249
Ref: 442814046249
Ref: library/bdb bdb Breakpoint bpprint14046726
Ref: 442914046726
Ref: library/bdb bdb Breakpoint file14046960
Ref: 442114046960
Ref: library/bdb bdb Breakpoint line14047039
Ref: 442a14047039
Ref: library/bdb bdb Breakpoint temporary14047157
Ref: 442b14047157
Ref: library/bdb bdb Breakpoint cond14047282
Ref: 442414047282
Ref: library/bdb bdb Breakpoint funcname14047396
Ref: 442214047396
Ref: library/bdb bdb Breakpoint enabled14047539
Ref: 442c14047539
Ref: library/bdb bdb Breakpoint bpbynumber14047633
Ref: 441f14047633
Ref: library/bdb bdb Breakpoint bplist14047755
Ref: 442014047755
Ref: library/bdb bdb Breakpoint ignore14047917
Ref: 442d14047917
Ref: library/bdb bdb Breakpoint hits14048011
Ref: 442314048011
Ref: library/bdb bdb Bdb14048131
Ref: 134614048131
Ref: library/bdb bdb Bdb canonic14048997
Ref: 442e14048997
Ref: library/bdb bdb Bdb reset14049453
Ref: 442f14049453
Ref: library/bdb bdb Bdb trace_dispatch14049655
Ref: 443114049655
Ref: library/bdb bdb Bdb dispatch_line14051196
Ref: 443214051196
Ref: library/bdb bdb Bdb dispatch_call14051705
Ref: 443414051705
Ref: library/bdb bdb Bdb dispatch_return14052230
Ref: 443614052230
Ref: library/bdb bdb Bdb dispatch_exception14052761
Ref: 443814052761
Ref: library/bdb bdb Bdb is_skipped_module14053472
Ref: 443a14053472
Ref: library/bdb bdb Bdb stop_here14053618
Ref: 443b14053618
Ref: library/bdb bdb Bdb break_here14053746
Ref: 443c14053746
Ref: library/bdb bdb Bdb break_anywhere14054101
Ref: 443e14054101
Ref: library/bdb bdb Bdb user_call14054379
Ref: 443514054379
Ref: library/bdb bdb Bdb user_line14054703
Ref: 443314054703
Ref: library/bdb bdb Bdb user_return14054902
Ref: 443714054902
Ref: library/bdb bdb Bdb user_exception14055079
Ref: 443914055079
Ref: library/bdb bdb Bdb do_clear14055258
Ref: 443f14055258
Ref: library/bdb bdb Bdb set_step14055578
Ref: 444014055578
Ref: library/bdb bdb Bdb set_next14055654
Ref: 444114055654
Ref: library/bdb bdb Bdb set_return14055760
Ref: 444214055760
Ref: library/bdb bdb Bdb set_until14055847
Ref: 444314055847
Ref: library/bdb bdb Bdb set_trace14056016
Ref: 444414056016
Ref: library/bdb bdb Bdb set_continue14056388
Ref: 444614056388
Ref: library/bdb bdb Bdb set_quit14056615
Ref: 443014056615
Ref: library/bdb bdb Bdb set_break14057070
Ref: 444714057070
Ref: library/bdb bdb Bdb clear_break14057459
Ref: 444814057459
Ref: library/bdb bdb Bdb clear_bpbynumber14057652
Ref: 444914057652
Ref: library/bdb bdb Bdb clear_all_file_breaks14057906
Ref: 444a14057906
Ref: library/bdb bdb Bdb clear_all_breaks14058096
Ref: 444b14058096
Ref: library/bdb bdb Bdb get_bpbynumber14058270
Ref: 444c14058270
Ref: library/bdb bdb Bdb get_break14058692
Ref: 444d14058692
Ref: library/bdb bdb Bdb get_breaks14058845
Ref: 444e14058845
Ref: library/bdb bdb Bdb get_file_breaks14059032
Ref: 444f14059032
Ref: library/bdb bdb Bdb get_all_breaks14059202
Ref: 445014059202
Ref: library/bdb bdb Bdb get_stack14059482
Ref: 445114059482
Ref: library/bdb bdb Bdb format_stack_entry14059784
Ref: 445214059784
Ref: library/bdb bdb Bdb run14060418
Ref: 445314060418
Ref: library/bdb bdb Bdb runeval14060666
Ref: 445414060666
Ref: library/bdb bdb Bdb runctx14060899
Ref: 445514060899
Ref: library/bdb bdb Bdb runcall14061021
Ref: a8814061021
Ref: library/bdb bdb checkfuncname14061197
Ref: 445614061197
Ref: library/bdb bdb effective14061661
Ref: 443d14061661
Ref: library/bdb bdb set_trace14062452
Ref: 444514062452
Ref: bdb — Framework do depurador-Footnote-114062622
Node: faulthandler — Dump the Python traceback14062685
Ref: library/faulthandler doc14062867
Ref: 445714062867
Ref: library/faulthandler faulthandler-dump-the-python-traceback14062867
Ref: 445814062867
Ref: library/faulthandler module-faulthandler14062867
Ref: 5814062867
Ref: library/faulthandler translation-repo14062867
Ref: 445914062867
Node: Dumping the traceback14065292
Ref: library/faulthandler dumping-the-traceback14065420
Ref: 445a14065420
Ref: library/faulthandler faulthandler dump_traceback14065483
Ref: e2a14065483
Node: Fault handler state14065916
Ref: library/faulthandler fault-handler-state14066091
Ref: 445b14066091
Ref: library/faulthandler faulthandler enable14066150
Ref: cbe14066150
Ref: library/faulthandler faulthandler disable14067009
Ref: 445d14067009
Ref: library/faulthandler faulthandler is_enabled14067150
Ref: 445e14067150
Node: Dumping the tracebacks after a timeout14067237
Ref: library/faulthandler dumping-the-tracebacks-after-a-timeout14067429
Ref: 445f14067429
Ref: library/faulthandler faulthandler dump_traceback_later14067526
Ref: e2b14067526
Ref: library/faulthandler faulthandler cancel_dump_traceback_later14068560
Ref: 446014068560
Node: Dumping the traceback on a user signal14068684
Ref: library/faulthandler dumping-the-traceback-on-a-user-signal14068884
Ref: 446114068884
Ref: library/faulthandler faulthandler register14068981
Ref: e2914068981
Ref: library/faulthandler faulthandler unregister14069616
Ref: 446214069616
Node: Issue with file descriptors14069894
Ref: library/faulthandler faulthandler-fd14070067
Ref: 445c14070067
Ref: library/faulthandler issue-with-file-descriptors14070067
Ref: 446314070067
Node: Exemplo<13>14070535
Ref: library/faulthandler example14070661
Ref: 446414070661
Node: pdb — O depurador do Python14071205
Ref: library/pdb doc14071379
Ref: 446514071379
Ref: library/pdb debugger14071379
Ref: 446614071379
Ref: library/pdb module-pdb14071379
Ref: a514071379
Ref: library/pdb pdb-the-python-debugger14071379
Ref: 446714071379
Ref: library/pdb translation-repo14071379
Ref: 446814071379
Ref: pdb — O depurador do Python-Footnote-114073862
Node: Interface de linha de comando<9>14073925
Ref: library/pdb command-line-interface14074055
Ref: 446a14074055
Ref: library/pdb pdb-cli14074055
Ref: 446b14074055
Ref: library/pdb cmdoption-pdb-c14074762
Ref: 446c14074762
Ref: library/pdb cmdoption-pdb-command14074762
Ref: 446d14074762
Ref: library/pdb cmdoption-pdb-m14074986
Ref: 446f14074986
Ref: library/pdb pdb run14076197
Ref: 426c14076197
Ref: library/pdb pdb runeval14076947
Ref: 447214076947
Ref: library/pdb pdb runcall14077288
Ref: 447314077288
Ref: library/pdb pdb set_trace14077642
Ref: 23514077642
Ref: library/pdb pdb post_mortem14078290
Ref: 142114078290
Ref: library/pdb pdb pm14078644
Ref: 23714078644
Ref: library/pdb pdb Pdb14078983
Ref: 92814078983
Ref: library/pdb pdb Pdb run14080528
Ref: 447414080528
Ref: library/pdb pdb Pdb runeval14080589
Ref: 447514080589
Ref: library/pdb pdb Pdb runcall14080655
Ref: 447614080655
Ref: library/pdb pdb Pdb set_trace14080707
Ref: 447714080707
Ref: Interface de linha de comando<9>-Footnote-114080848
Ref: Interface de linha de comando<9>-Footnote-214080890
Node: Comandos de depuração14081022
Ref: library/pdb debugger-commands14081152
Ref: 446e14081152
Ref: library/pdb id214081152
Ref: 447814081152
Ref: library/pdb pdbcommand-help14085067
Ref: 447b14085067
Ref: library/pdb pdbcommand-where14085472
Ref: 447c14085472
Ref: library/pdb pdbcommand-down14085709
Ref: 447d14085709
Ref: library/pdb pdbcommand-up14085861
Ref: 447e14085861
Ref: library/pdb pdbcommand-break14086012
Ref: 447f14086012
Ref: library/pdb pdbcommand-tbreak14087345
Ref: 448014087345
Ref: library/pdb pdbcommand-clear14087596
Ref: 448114087596
Ref: library/pdb pdbcommand-disable14087956
Ref: 448214087956
Ref: library/pdb pdbcommand-enable14088394
Ref: 448314088394
Ref: library/pdb pdbcommand-ignore14088493
Ref: 448414088493
Ref: library/pdb pdbcommand-condition14089021
Ref: 448514089021
Ref: library/pdb pdbcommand-commands14089394
Ref: 448614089394
Ref: library/pdb pdbcommand-step14091269
Ref: 447014091269
Ref: library/pdb pdbcommand-next14091435
Ref: 447114091435
Ref: library/pdb pdbcommand-until14091845
Ref: 448a14091845
Ref: library/pdb pdbcommand-return14092273
Ref: 448714092273
Ref: library/pdb pdbcommand-continue14092362
Ref: 446914092362
Ref: library/pdb pdbcommand-jump14092493
Ref: 448814092493
Ref: library/pdb pdbcommand-list14092950
Ref: 447914092950
Ref: library/pdb pdbcommand-ll14093718
Ref: 448b14093718
Ref: library/pdb pdbcommand-args14093918
Ref: 448c14093918
Ref: library/pdb pdbcommand-p14094011
Ref: faa14094011
Ref: library/pdb pdbcommand-pp14094264
Ref: 448d14094264
Ref: library/pdb pdbcommand-whatis14094426
Ref: 448e14094426
Ref: library/pdb pdbcommand-source14094497
Ref: 448f14094497
Ref: library/pdb pdbcommand-display14094626
Ref: 449014094626
Ref: library/pdb pdbcommand-undisplay14096160
Ref: 449114096160
Ref: library/pdb pdbcommand-interact14096369
Ref: 449214096369
Ref: library/pdb debugger-aliases14097363
Ref: 447a14097363
Ref: library/pdb pdbcommand-alias14097363
Ref: 449314097363
Ref: library/pdb pdbcommand-unalias14098594
Ref: 449414098594
Ref: library/pdb pdbcommand-014098667
Ref: 449514098667
Ref: library/pdb pdbcommand-run14099236
Ref: 449614099236
Ref: library/pdb pdbcommand-restart14099267
Ref: 449714099267
Ref: library/pdb pdbcommand-quit14099632
Ref: 448914099632
Ref: library/pdb pdbcommand-debug14099731
Ref: 449814099731
Ref: library/pdb pdbcommand-retval14099913
Ref: 449914099913
Ref: library/pdb pdbcommand-exceptions14100012
Ref: 23814100012
Node: Os Profilers do Python14101349
Ref: library/profile doc14101549
Ref: 449a14101549
Ref: library/profile profile14101549
Ref: 449b14101549
Ref: library/profile the-python-profilers14101549
Ref: 449c14101549
Ref: library/profile translation-repo14101549
Ref: 449d14101549
Ref: Os Profilers do Python-Footnote-114101996
Ref: Os Profilers do Python-Footnote-214102063
Node: Introdução aos profilers14102129
Ref: library/profile introduction-to-the-profilers14102246
Ref: 449e14102246
Ref: library/profile profiler-introduction14102246
Ref: 449f14102246
Node: Instant User’s Manual14103728
Ref: library/profile instant-user-s-manual14103891
Ref: 44a014103891
Ref: library/profile profile-instant14103891
Ref: 44a114103891
Ref: library/profile profile-cli14106795
Ref: 44a314106795
Ref: library/profile cmdoption-cProfile-o14107008
Ref: 44a414107008
Ref: library/profile cmdoption-cProfile-s14107103
Ref: 44a514107103
Ref: library/profile cmdoption-cProfile-m14107287
Ref: 44a714107287
Node: profile and cProfile Module Reference14110242
Ref: library/profile module-cProfile14110393
Ref: 2714110393
Ref: library/profile profile-and-cprofile-module-reference14110393
Ref: 44aa14110393
Ref: library/profile module-profile14110504
Ref: af14110504
Ref: library/profile profile run14110598
Ref: 44ab14110598
Ref: library/profile profile runctx14111233
Ref: 44ac14111233
Ref: library/profile profile Profile14111630
Ref: 9eb14111630
Ref: library/profile profile Profile enable14113235
Ref: 44ad14113235
Ref: library/profile profile Profile disable14113356
Ref: 44ae14113356
Ref: library/profile profile Profile create_stats14113475
Ref: 44af14113475
Ref: library/profile profile Profile print_stats14113620
Ref: 44b014113620
Ref: library/profile profile Profile dump_stats14114113
Ref: 44b114114113
Ref: library/profile profile Profile run14114221
Ref: 44b214114221
Ref: library/profile profile Profile runctx14114300
Ref: 44b314114300
Ref: library/profile profile Profile runcall14114458
Ref: a8714114458
Node: A classe Stats14114804
Ref: library/profile profile-stats14114964
Ref: 44b414114964
Ref: library/profile the-stats-class14114964
Ref: 44b514114964
Ref: library/profile module-pstats14115096
Ref: b014115096
Ref: library/profile pstats Stats14115096
Ref: 44a214115096
Ref: library/profile pstats Stats strip_dirs14116365
Ref: 44a814116365
Ref: library/profile pstats Stats add14117188
Ref: 44b614117188
Ref: library/profile pstats Stats dump_stats14117682
Ref: 44b714117682
Ref: library/profile pstats Stats sort_stats14118064
Ref: 44a614118064
Ref: library/profile pstats Stats reverse_order14123433
Ref: 44b814123433
Ref: library/profile pstats Stats print_stats14123720
Ref: 44a914123720
Ref: library/profile pstats Stats print_callers14125168
Ref: 44b914125168
Ref: library/profile pstats Stats print_callees14126285
Ref: 44ba14126285
Ref: library/profile pstats Stats get_stats_profile14126667
Ref: 44bb14126667
Node: What Is Deterministic Profiling?14127220
Ref: library/profile deterministic-profiling14127355
Ref: 44bc14127355
Ref: library/profile what-is-deterministic-profiling14127355
Ref: 44bd14127355
Node: Limitações14129153
Ref: library/profile limitations14129285
Ref: 44be14129285
Ref: library/profile profile-limitations14129285
Ref: 44bf14129285
Node: Calibration14131168
Ref: library/profile calibration14131288
Ref: 44c014131288
Ref: library/profile profile-calibration14131288
Ref: 44c114131288
Node: Using a custom timer14132981
Ref: library/profile profile-timers14133080
Ref: 44c214133080
Ref: library/profile using-a-custom-timer14133080
Ref: 44c314133080
Node: timeit — Mede o tempo de execução de pequenos trechos de código14135531
Ref: library/timeit doc14135769
Ref: 44c414135769
Ref: library/timeit module-timeit14135769
Ref: ef14135769
Ref: library/timeit timeit-measure-execution-time-of-small-code-snippets14135769
Ref: 44c514135769
Ref: library/timeit translation-repo14135769
Ref: 44c614135769
Ref: timeit — Mede o tempo de execução de pequenos trechos de código-Footnote-114136631
Node: Exemplos básicos<2>14136697
Ref: library/timeit basic-examples14136850
Ref: 44c914136850
Node: Interface em Python14138183
Ref: library/timeit id114138378
Ref: 44cb14138378
Ref: library/timeit python-interface14138378
Ref: 44c814138378
Ref: library/timeit timeit timeit14138497
Ref: ead14138497
Ref: library/timeit timeit repeat14139017
Ref: 44cc14139017
Ref: library/timeit timeit default_timer14139683
Ref: 44ce14139683
Ref: library/timeit timeit Timer14140011
Ref: 151014140011
Ref: library/timeit timeit Timer timeit14141630
Ref: d0e14141630
Ref: library/timeit timeit Timer autorange14142868
Ref: d0d14142868
Ref: library/timeit timeit Timer repeat14143643
Ref: 44cd14143643
Ref: library/timeit timeit Timer print_exc14145027
Ref: 44cf14145027
Node: Interface de linha de comando<10>14145641
Ref: library/timeit command-line-interface14145828
Ref: 44d014145828
Ref: library/timeit timeit-command-line-interface14145828
Ref: 44c714145828
Ref: library/timeit cmdoption-timeit-n14146136
Ref: 44d114146136
Ref: library/timeit cmdoption-timeit-number14146136
Ref: 44d214146136
Ref: library/timeit cmdoption-timeit-r14146216
Ref: 44d314146216
Ref: library/timeit cmdoption-timeit-repeat14146216
Ref: 44d414146216
Ref: library/timeit cmdoption-timeit-s14146322
Ref: 44d514146322
Ref: library/timeit cmdoption-timeit-setup14146322
Ref: 44d614146322
Ref: library/timeit cmdoption-timeit-p14146445
Ref: 44d714146445
Ref: library/timeit cmdoption-timeit-process14146445
Ref: 44d814146445
Ref: library/timeit cmdoption-timeit-u14146693
Ref: 44d914146693
Ref: library/timeit cmdoption-timeit-unit14146693
Ref: 44da14146693
Ref: library/timeit cmdoption-timeit-v14146891
Ref: 44db14146891
Ref: library/timeit cmdoption-timeit-verbose14146891
Ref: 44dc14146891
Ref: library/timeit cmdoption-timeit-h14147011
Ref: 44dd14147011
Ref: library/timeit cmdoption-timeit-help14147011
Ref: 44de14147011
Node: Exemplos<30>14148339
Ref: library/timeit examples14148498
Ref: 44df14148498
Ref: library/timeit timeit-examples14148498
Ref: 44ca14148498
Node: trace — Rastreia ou acompanha a execução de instruções Python14152260
Ref: library/trace doc14152516
Ref: 44e014152516
Ref: library/trace module-trace14152516
Ref: fd14152516
Ref: library/trace trace-trace-or-track-python-statement-execution14152516
Ref: 44e114152516
Ref: library/trace translation-repo14152516
Ref: 44e214152516
Ref: trace — Rastreia ou acompanha a execução de instruções Python-Footnote-114153393
Ref: trace — Rastreia ou acompanha a execução de instruções Python-Footnote-214153458
Node: Uso na linha de comando<7>14153499
Ref: library/trace command-line-usage14153661
Ref: 44e314153661
Ref: library/trace trace-cli14153661
Ref: 44e414153661
Ref: library/trace cmdoption-trace-help14154053
Ref: 44e514154053
Ref: library/trace cmdoption-trace-version14154106
Ref: 44e614154106
Node: Opções principais14154342
Ref: library/trace main-options14154446
Ref: 44e714154446
Ref: library/trace cmdoption-trace-c14154831
Ref: 44ea14154831
Ref: library/trace cmdoption-trace-count14154831
Ref: 44eb14154831
Ref: library/trace cmdoption-trace-t14155105
Ref: 44e914155105
Ref: library/trace cmdoption-trace-trace14155105
Ref: 44ef14155105
Ref: library/trace cmdoption-trace-l14155176
Ref: 44e814155176
Ref: library/trace cmdoption-trace-listfuncs14155176
Ref: 44f014155176
Ref: library/trace cmdoption-trace-r14155264
Ref: 44f114155264
Ref: library/trace cmdoption-trace-report14155264
Ref: 44f214155264
Ref: library/trace cmdoption-trace-T14155466
Ref: 44f314155466
Ref: library/trace cmdoption-trace-trackcalls14155466
Ref: 44f414155466
Node: Modificadores14155576
Ref: library/trace modifiers14155696
Ref: 44f514155696
Ref: library/trace cmdoption-trace-f14155743
Ref: 44ed14155743
Ref: library/trace cmdoption-trace-file14155743
Ref: 44f614155743
Ref: library/trace cmdoption-trace-C14155918
Ref: 44ec14155918
Ref: library/trace cmdoption-trace-coverdir14155918
Ref: 44f714155918
Ref: library/trace cmdoption-trace-m14156134
Ref: 44f814156134
Ref: library/trace cmdoption-trace-missing14156134
Ref: 44f914156134
Ref: library/trace cmdoption-trace-s14156261
Ref: 44fa14156261
Ref: library/trace cmdoption-trace-summary14156261
Ref: 44fb14156261
Ref: library/trace cmdoption-trace-R14156415
Ref: 44ee14156415
Ref: library/trace cmdoption-trace-no-report14156415
Ref: 44fc14156415
Ref: library/trace cmdoption-trace-g14156642
Ref: 44fd14156642
Ref: library/trace cmdoption-trace-timing14156642
Ref: 44fe14156642
Node: Filtros14156777
Ref: library/trace filters14156869
Ref: 44ff14156869
Ref: library/trace cmdoption-trace-ignore-module14156955
Ref: 450014156955
Ref: library/trace cmdoption-trace-ignore-dir14157161
Ref: 450114157161
Node: Interface programática14157370
Ref: library/trace programmatic-interface14157532
Ref: 450214157532
Ref: library/trace trace-api14157532
Ref: 450314157532
Ref: library/trace trace Trace14157598
Ref: 450414157598
Ref: library/trace trace Trace run14158650
Ref: 450514158650
Ref: library/trace trace Trace runctx14158899
Ref: 450614158899
Ref: library/trace trace Trace runfunc14159220
Ref: a8914159220
Ref: library/trace trace Trace results14159430
Ref: 450714159430
Ref: library/trace trace CoverageResults14159778
Ref: 450814159778
Ref: library/trace trace CoverageResults update14159962
Ref: 450914159962
Ref: library/trace trace CoverageResults write_results14160065
Ref: 450a14160065
Node: tracemalloc — Trace memory allocations14161580
Ref: library/tracemalloc doc14161759
Ref: 450b14161759
Ref: library/tracemalloc module-tracemalloc14161759
Ref: ff14161759
Ref: library/tracemalloc tracemalloc-trace-memory-allocations14161759
Ref: 450c14161759
Ref: library/tracemalloc translation-repo14161759
Ref: 450d14161759
Ref: tracemalloc — Trace memory allocations-Footnote-114163108
Node: Exemplos<31>14163179
Ref: library/tracemalloc examples14163280
Ref: 450e14163280
Node: Exibe o top 1014163425
Ref: library/tracemalloc display-the-top-1014163516
Ref: 450f14163516
Node: Compute differences14164992
Ref: library/tracemalloc compute-differences14165127
Ref: 451114165127
Node: Get the traceback of a memory block14167317
Ref: library/tracemalloc get-the-traceback-of-a-memory-block14167448
Ref: 451414167448
Node: Pretty top14170080
Ref: library/tracemalloc pretty-top14170183
Ref: 451514170183
Node: Record the current and peak size of all traced memory blocks14172645
Ref: library/tracemalloc record-the-current-and-peak-size-of-all-traced-memory-blocks14172752
Ref: 451614172752
Node: API14174444
Ref: library/tracemalloc api14174545
Ref: 451814174545
Node: Funções<11>14174717
Ref: library/tracemalloc functions14174791
Ref: 451914174791
Ref: library/tracemalloc tracemalloc clear_traces14174828
Ref: 451a14174828
Ref: library/tracemalloc tracemalloc get_object_traceback14174963
Ref: 1cd214174963
Ref: library/tracemalloc tracemalloc get_traceback_limit14175369
Ref: 451b14175369
Ref: library/tracemalloc tracemalloc get_traced_memory14175692
Ref: 451714175692
Ref: library/tracemalloc tracemalloc reset_peak14175897
Ref: 94214175897
Ref: library/tracemalloc tracemalloc get_tracemalloc_memory14176534
Ref: 451d14176534
Ref: library/tracemalloc tracemalloc is_tracing14176731
Ref: 451e14176731
Ref: library/tracemalloc tracemalloc start14176963
Ref: 1ec314176963
Ref: library/tracemalloc tracemalloc stop14178327
Ref: 166814178327
Ref: library/tracemalloc tracemalloc take_snapshot14178761
Ref: 451c14178761
Node: DomainFilter14179459
Ref: library/tracemalloc domainfilter14179548
Ref: 452214179548
Ref: library/tracemalloc tracemalloc DomainFilter14179593
Ref: d1214179593
Ref: library/tracemalloc tracemalloc DomainFilter inclusive14179765
Ref: 452314179765
Ref: library/tracemalloc tracemalloc DomainFilter domain14180064
Ref: 452414180064
Node: Filter14180168
Ref: library/tracemalloc filter14180249
Ref: 452514180249
Ref: library/tracemalloc tracemalloc Filter14180284
Ref: 452614180284
Ref: library/tracemalloc tracemalloc Filter domain14181149
Ref: 452714181149
Ref: library/tracemalloc tracemalloc Filter inclusive14181419
Ref: 452814181419
Ref: library/tracemalloc tracemalloc Filter lineno14181850
Ref: 452a14181850
Ref: library/tracemalloc tracemalloc Filter filename_pattern14182001
Ref: 452914182001
Ref: library/tracemalloc tracemalloc Filter all_frames14182114
Ref: 452b14182114
Node: Frame14182520
Ref: library/tracemalloc frame14182597
Ref: 452d14182597
Ref: library/tracemalloc tracemalloc Frame14182630
Ref: 452e14182630
Ref: library/tracemalloc tracemalloc Frame filename14182779
Ref: 452f14182779
Ref: library/tracemalloc tracemalloc Frame lineno14182841
Ref: 453014182841
Node: Snapshot14182909
Ref: library/tracemalloc snapshot14182989
Ref: 453114182989
Ref: library/tracemalloc tracemalloc Snapshot14183028
Ref: 452114183028
Ref: library/tracemalloc tracemalloc Snapshot compare_to14183207
Ref: 452014183207
Ref: library/tracemalloc tracemalloc Snapshot dump14183936
Ref: 451214183936
Ref: library/tracemalloc tracemalloc Snapshot filter_traces14184073
Ref: 453814184073
Ref: library/tracemalloc tracemalloc Snapshot load14184752
Ref: 451314184752
Ref: library/tracemalloc tracemalloc Snapshot statistics14184879
Ref: 451014184879
Ref: library/tracemalloc tracemalloc Snapshot traceback_limit14186081
Ref: 452c14186081
Ref: library/tracemalloc tracemalloc Snapshot traces14186299
Ref: 453914186299
Node: Statistic14186593
Ref: library/tracemalloc statistic14186681
Ref: 453e14186681
Ref: library/tracemalloc tracemalloc Statistic14186722
Ref: 453a14186722
Ref: library/tracemalloc tracemalloc Statistic count14186947
Ref: 453614186947
Ref: library/tracemalloc tracemalloc Statistic size14187021
Ref: 453b14187021
Ref: library/tracemalloc tracemalloc Statistic traceback14187107
Ref: 453c14187107
Node: StatisticDiff14187238
Ref: library/tracemalloc statisticdiff14187323
Ref: 453f14187323
Ref: library/tracemalloc tracemalloc StatisticDiff14187372
Ref: 453214187372
Ref: library/tracemalloc tracemalloc StatisticDiff count14187673
Ref: 454014187673
Ref: library/tracemalloc tracemalloc StatisticDiff count_diff14187846
Ref: 453514187846
Ref: library/tracemalloc tracemalloc StatisticDiff size14188067
Ref: 453414188067
Ref: library/tracemalloc tracemalloc StatisticDiff size_diff14188262
Ref: 453314188262
Ref: library/tracemalloc tracemalloc StatisticDiff traceback14188495
Ref: 453714188495
Node: Trace14188628
Ref: library/tracemalloc trace14188713
Ref: 454114188713
Ref: library/tracemalloc tracemalloc Trace14188746
Ref: 453d14188746
Ref: library/tracemalloc tracemalloc Trace domain14188981
Ref: 454214188981
Ref: library/tracemalloc tracemalloc Trace size14189258
Ref: 454314189258
Ref: library/tracemalloc tracemalloc Trace traceback14189341
Ref: 454414189341
Node: Traceback14189472
Ref: library/tracemalloc traceback14189535
Ref: 454514189535
Ref: library/tracemalloc tracemalloc Traceback14189576
Ref: bae14189576
Ref: library/tracemalloc tracemalloc Traceback total_nframe14190505
Ref: 451f14190505
Ref: library/tracemalloc tracemalloc Traceback format14190814
Ref: baf14190814
Node: Empacotamento e Distribuição de Software14191883
Ref: library/distribution doc14192075
Ref: 454714192075
Ref: library/distribution software-packaging-and-distribution14192075
Ref: 454814192075
Ref: library/distribution translation-repo14192075
Ref: 454914192075
Ref: Empacotamento e Distribuição de Software-Footnote-114192655
Node: ensurepip — Inicialização do instalador do pip14192680
Ref: library/ensurepip doc14192858
Ref: 454a14192858
Ref: library/ensurepip ensurepip-bootstrapping-the-pip-installer14192858
Ref: 454b14192858
Ref: library/ensurepip module-ensurepip14192858
Ref: 5514192858
Ref: ensurepip — Inicialização do instalador do pip-Footnote-114194633
Ref: ensurepip — Inicialização do instalador do pip-Footnote-214194699
Node: Interface de linha de comando<11>14194741
Ref: library/ensurepip command-line-interface14194884
Ref: 454c14194884
Ref: library/ensurepip ensurepip-cli14194884
Ref: 454d14194884
Ref: library/ensurepip cmdoption-ensurepip-root14195687
Ref: 454e14195687
Ref: library/ensurepip cmdoption-ensurepip-user14195905
Ref: 454f14195905
Ref: library/ensurepip cmdoption-ensurepip-altinstall14196382
Ref: 455014196382
Ref: library/ensurepip cmdoption-ensurepip-default-pip14196511
Ref: 455114196511
Node: API do módulo14196747
Ref: library/ensurepip module-api14196890
Ref: 455214196890
Ref: library/ensurepip ensurepip version14197008
Ref: 455314197008
Ref: library/ensurepip ensurepip bootstrap14197166
Ref: 440514197166
Node: venv — Criação de ambientes virtuais14198998
Ref: library/venv doc14199240
Ref: 455414199240
Ref: library/venv module-venv14199240
Ref: 11114199240
Ref: library/venv translation-repo14199240
Ref: 455514199240
Ref: library/venv venv-creation-of-virtual-environments14199240
Ref: 455614199240
Ref: library/venv venv-def14199468
Ref: 455714199468
Ref: library/venv venv-intro14199468
Ref: 455814199468
Ref: venv — Criação de ambientes virtuais-Footnote-114201602
Ref: venv — Criação de ambientes virtuais-Footnote-214201664
Ref: venv — Criação de ambientes virtuais-Footnote-314201702
Ref: venv — Criação de ambientes virtuais-Footnote-414201744
Node: Criando ambientes virtuais<2>14201885
Ref: library/venv creating-virtual-environments14202023
Ref: 455914202023
Ref: library/venv venv-cli14203870
Ref: 455a14203870
Ref: library/venv cmdoption-venv-arg-ENV_DIR14203870
Ref: 455b14203870
Ref: library/venv cmdoption-venv-system-site-packages14203979
Ref: 455c14203979
Ref: library/venv cmdoption-venv-symlinks14204101
Ref: 455d14204101
Ref: library/venv cmdoption-venv-copies14204249
Ref: 455e14204249
Ref: library/venv cmdoption-venv-clear14204399
Ref: 455f14204399
Ref: library/venv cmdoption-venv-upgrade14204529
Ref: 456014204529
Ref: library/venv cmdoption-venv-without-pip14204684
Ref: 456114204684
Ref: library/venv cmdoption-venv-prompt14204825
Ref: 456214204825
Ref: library/venv cmdoption-venv-upgrade-deps14204923
Ref: 456314204923
Ref: library/venv cmdoption-venv-without-scm-ignore-files14205042
Ref: 456414205042
Ref: Criando ambientes virtuais<2>-Footnote-114207116
Node: Como funcionam os venvs14207171
Ref: library/venv how-venvs-work14207324
Ref: 456514207324
Ref: library/venv venv-explanation14207324
Ref: 44d14207324
Node: API<2>14211918
Ref: library/venv api14212079
Ref: 456614212079
Ref: library/venv venv-api14212079
Ref: f2414212079
Ref: library/venv venv EnvBuilder14212350
Ref: 26a14212350
Ref: library/venv venv EnvBuilder create14214768
Ref: 456814214768
Ref: library/venv venv EnvBuilder ensure_directories14216024
Ref: 456914216024
Ref: library/venv venv EnvBuilder create_configuration14218798
Ref: 456a14218798
Ref: library/venv venv EnvBuilder setup_python14218922
Ref: 456b14218922
Ref: library/venv venv EnvBuilder setup_scripts14219317
Ref: 456c14219317
Ref: library/venv venv EnvBuilder upgrade_dependencies14219462
Ref: 456f14219462
Ref: library/venv venv EnvBuilder post_setup14219857
Ref: 456d14219857
Ref: library/venv venv EnvBuilder install_scripts14220108
Ref: 456e14220108
Ref: library/venv venv EnvBuilder create_git_ignore_file14221571
Ref: 456714221571
Ref: library/venv venv create14222495
Ref: 26b14222495
Ref: API<2>-Footnote-114223189
Ref: API<2>-Footnote-214223227
Node: Um exemplo de extensão de EnvBuilder14223272
Ref: library/venv an-example-of-extending-envbuilder14223401
Ref: 457014223401
Ref: Um exemplo de extensão de EnvBuilder-Footnote-114233549
Node: zipapp — Gerencia arquivos zip executáveis do Python14233596
Ref: library/zipapp doc14233779
Ref: 457114233779
Ref: library/zipapp module-zipapp14233779
Ref: 13014233779
Ref: library/zipapp translation-repo14233779
Ref: 457214233779
Ref: library/zipapp zipapp-manage-executable-python-zip-archives14233779
Ref: 457314233779
Ref: zipapp — Gerencia arquivos zip executáveis do Python-Footnote-114234627
Node: Exemplo básico14234693
Ref: library/zipapp basic-example14234842
Ref: 457614234842
Node: Interface de linha de comando<12>14235262
Ref: library/zipapp command-line-interface14235433
Ref: 457714235433
Ref: library/zipapp zipapp-command-line-interface14235433
Ref: 457414235433
Ref: library/zipapp cmdoption-zipapp-o14235981
Ref: 457814235981
Ref: library/zipapp cmdoption-zipapp-output14235981
Ref: 457914235981
Ref: library/zipapp cmdoption-zipapp-p14236548
Ref: 457a14236548
Ref: library/zipapp cmdoption-zipapp-python14236548
Ref: 457b14236548
Ref: library/zipapp cmdoption-zipapp-m14236863
Ref: 457c14236863
Ref: library/zipapp cmdoption-zipapp-main14236863
Ref: 457d14236863
Ref: library/zipapp cmdoption-zipapp-c14237285
Ref: 457e14237285
Ref: library/zipapp cmdoption-zipapp-compress14237285
Ref: 457f14237285
Ref: library/zipapp cmdoption-zipapp-info14237582
Ref: 458014237582
Ref: library/zipapp cmdoption-zipapp-h14237795
Ref: 458114237795
Ref: library/zipapp cmdoption-zipapp-help14237795
Ref: 458214237795
Node: API do Python14237863
Ref: library/zipapp python-api14238031
Ref: 458314238031
Ref: library/zipapp zipapp-python-api14238031
Ref: 457514238031
Ref: library/zipapp zipapp create_archive14238129
Ref: bc814238129
Ref: library/zipapp zipapp get_interpreter14242104
Ref: 458414242104
Node: Exemplos<32>14242483
Ref: library/zipapp examples14242647
Ref: 458514242647
Ref: library/zipapp zipapp-examples14242647
Ref: 458614242647
Node: Especificando o interpretador14244067
Ref: library/zipapp specifying-the-interpreter14244260
Ref: 458714244260
Ref: library/zipapp zipapp-specifying-the-interpreter14244260
Ref: 458814244260
Node: Criando aplicações autônomas com zipapp14245594
Ref: library/zipapp creating-standalone-applications-with-zipapp14245821
Ref: 458914245821
Node: Advertência14247644
Ref: library/zipapp caveats14247735
Ref: 458a14247735
Node: O formato de arquivo da aplicação zip Python14248615
Ref: library/zipapp the-python-zip-application-archive-format14248804
Ref: 458b14248804
Node: Serviços de Tempo de Execução Python14250909
Ref: library/python doc14251112
Ref: 458c14251112
Ref: library/python python14251112
Ref: 458d14251112
Ref: library/python python-runtime-services14251112
Ref: 458e14251112
Ref: library/python translation-repo14251112
Ref: 458f14251112
Node: sys — Parâmetros e funções específicas do sistema14252195
Ref: library/sys doc14252392
Ref: 459014252392
Ref: library/sys module-sys14252392
Ref: d914252392
Ref: library/sys sys-system-specific-parameters-and-functions14252392
Ref: 459114252392
Ref: library/sys sys abiflags14252850
Ref: a6d14252850
Ref: library/sys sys addaudithook14253264
Ref: 43fc14253264
Ref: library/sys sys argv14255763
Ref: 12a614255763
Ref: library/sys auditing14256830
Ref: 19fa14256830
Ref: library/sys sys audit14256830
Ref: 16a014256830
Ref: library/sys sys base_exec_prefix14258378
Ref: 3ee14258378
Ref: library/sys sys base_prefix14259078
Ref: 3ef14259078
Ref: library/sys sys byteorder14259768
Ref: 233014259768
Ref: library/sys sys builtin_module_names14260029
Ref: 1de514260029
Ref: library/sys sys call_tracing14260380
Ref: 194d14260380
Ref: library/sys sys copyright14260988
Ref: 459214260988
Ref: library/sys sys _clear_type_cache14261103
Ref: 176714261103
Ref: library/sys sys _clear_internal_caches14261599
Ref: 176614261599
Ref: library/sys sys _current_frames14261873
Ref: 147a14261873
Ref: library/sys sys _current_exceptions14262843
Ref: 4c214262843
Ref: library/sys sys breakpointhook14263659
Ref: aea14263659
Ref: library/sys sys _debugmallocstats14265718
Ref: 459314265718
Ref: library/sys sys dllhandle14266225
Ref: 459414266225
Ref: library/sys sys displayhook14266366
Ref: 156814266366
Ref: library/sys sys dont_write_bytecode14267968
Ref: 459514267968
Ref: library/sys sys _emscripten_info14268410
Ref: 191914268410
Ref: library/sys sys _emscripten_info emscripten_version14268618
Ref: 459614268618
Ref: library/sys sys _emscripten_info runtime14268785
Ref: 459714268785
Ref: library/sys sys _emscripten_info pthreads14268966
Ref: 459814268966
Ref: library/sys sys _emscripten_info shared_memory14269108
Ref: 459914269108
Ref: library/sys sys pycache_prefix14269337
Ref: 9ac14269337
Ref: library/sys sys excepthook14270416
Ref: 80e14270416
Ref: library/sys sys __breakpointhook__14271943
Ref: 459a14271943
Ref: library/sys sys __displayhook__14271976
Ref: 459b14271976
Ref: library/sys sys __excepthook__14272006
Ref: 459c14272006
Ref: library/sys sys __unraisablehook__14272035
Ref: 459d14272035
Ref: library/sys sys exception14272545
Ref: 68b14272545
Ref: library/sys sys exc_info14273092
Ref: 68a14273092
Ref: library/sys sys exec_prefix14274159
Ref: 3b214274159
Ref: library/sys sys executable14275175
Ref: 3b814275175
Ref: library/sys sys exit14275497
Ref: 138e14275497
Ref: library/sys sys flags14277358
Ref: 68c14277358
Ref: library/sys sys flags debug14277552
Ref: 459e14277552
Ref: library/sys sys flags inspect14277752
Ref: 15b514277752
Ref: library/sys sys flags interactive14277954
Ref: 459f14277954
Ref: library/sys sys flags isolated14278149
Ref: 45a014278149
Ref: library/sys sys flags optimize14278346
Ref: 45a114278346
Ref: library/sys sys flags dont_write_bytecode14278573
Ref: 45a214278573
Ref: library/sys sys flags no_user_site14278764
Ref: 45a314278764
Ref: library/sys sys flags no_site14278957
Ref: 45a414278957
Ref: library/sys sys flags ignore_environment14279166
Ref: 45a514279166
Ref: library/sys sys flags verbose14279352
Ref: 45a614279352
Ref: library/sys sys flags bytes_warning14279556
Ref: 45a714279556
Ref: library/sys sys flags quiet14279745
Ref: 45a814279745
Ref: library/sys sys flags hash_randomization14279956
Ref: 45a914279956
Ref: library/sys sys flags dev_mode14280144
Ref: 1c1b14280144
Ref: library/sys sys flags utf8_mode14280454
Ref: 45aa14280454
Ref: library/sys sys flags safe_path14280656
Ref: 23614280656
Ref: library/sys sys flags int_max_str_digits14280862
Ref: 241014280862
Ref: library/sys sys flags warn_default_encoding14281219
Ref: 45ab14281219
Ref: library/sys sys float_info14282287
Ref: 1b6214282287
Ref: library/sys sys float_info epsilon14283304
Ref: 45ad14283304
Ref: library/sys sys float_info dig14284004
Ref: 45ae14284004
Ref: library/sys sys float_info mant_dig14284614
Ref: 45af14284614
Ref: library/sys sys float_info max14285212
Ref: 45b014285212
Ref: library/sys sys float_info max_exp14285604
Ref: 45b114285604
Ref: library/sys sys float_info max_10_exp14286120
Ref: 45b214286120
Ref: library/sys sys float_info min14286717
Ref: 45b314286717
Ref: library/sys sys float_info min_exp14287629
Ref: 45b414287629
Ref: library/sys sys float_info min_10_exp14288135
Ref: 45b514288135
Ref: library/sys sys float_info radix14288626
Ref: 45b614288626
Ref: library/sys sys float_info rounds14288996
Ref: 45b714288996
Ref: library/sys sys float_repr_style14292378
Ref: 133e14292378
Ref: library/sys sys getallocatedblocks14292950
Ref: ffb14292950
Ref: library/sys sys getunicodeinternedsize14293669
Ref: 45b814293669
Ref: library/sys sys getandroidapilevel14293817
Ref: ba214293817
Ref: library/sys sys getdefaultencoding14294251
Ref: 45b914294251
Ref: library/sys sys getdlopenflags14294426
Ref: 155714294426
Ref: library/sys sys getfilesystemencoding14294780
Ref: c7414294780
Ref: library/sys sys getfilesystemencodeerrors14296398
Ref: d0714296398
Ref: library/sys sys get_int_max_str_digits14297271
Ref: 161414297271
Ref: library/sys sys getrefcount14297523
Ref: 45ba14297523
Ref: library/sys sys getrecursionlimit14298360
Ref: 4c414298360
Ref: library/sys sys getsizeof14298669
Ref: 186314298669
Ref: library/sys sys getswitchinterval14299716
Ref: 95014299716
Ref: library/sys sys _getframe14299912
Ref: 6e114299912
Ref: library/sys sys _getframemodulename14300578
Ref: 186714300578
Ref: library/sys sys getobjects14301325
Ref: 42714301325
Ref: library/sys sys getprofile14302520
Ref: 142714302520
Ref: library/sys sys gettrace14302651
Ref: 142814302651
Ref: library/sys sys getwindowsversion14303102
Ref: d0814303102
Ref: library/sys sys get_asyncgen_hooks14305884
Ref: 194e14305884
Ref: library/sys sys get_coroutine_origin_tracking_depth14306484
Ref: ba314306484
Ref: library/sys sys hash_info14306893
Ref: 103514306893
Ref: library/sys sys hash_info width14307126
Ref: 45be14307126
Ref: library/sys sys hash_info modulus14307224
Ref: 233614307224
Ref: library/sys sys hash_info inf14307328
Ref: 45bf14307328
Ref: library/sys sys hash_info nan14307425
Ref: 45c014307425
Ref: library/sys sys hash_info imag14307505
Ref: 45c114307505
Ref: library/sys sys hash_info algorithm14307631
Ref: 45c214307631
Ref: library/sys sys hash_info hash_bits14307739
Ref: 45c314307739
Ref: library/sys sys hash_info seed_bits14307839
Ref: 45c414307839
Ref: library/sys sys hash_info cutoff14307935
Ref: 45c514307935
Ref: library/sys sys hexversion14308209
Ref: 45c614308209
Ref: library/sys sys implementation14309169
Ref: 51714309169
Ref: library/sys sys int_info14311513
Ref: 12d514311513
Ref: library/sys sys int_info bits_per_digit14311700
Ref: 45c814311700
Ref: library/sys sys int_info sizeof_digit14311914
Ref: 45c914311914
Ref: library/sys sys int_info default_max_str_digits14312031
Ref: 241114312031
Ref: library/sys sys int_info str_digits_check_threshold14312215
Ref: 45ca14312215
Ref: library/sys sys __interactivehook__14312625
Ref: ffd14312625
Ref: library/sys sys intern14313210
Ref: 131e14313210
Ref: library/sys sys _is_gil_enabled14314138
Ref: 45cb14314138
Ref: library/sys sys is_finalizing14314400
Ref: a9914314400
Ref: library/sys sys last_exc14314688
Ref: 4be14314688
Ref: library/sys sys _is_interned14315301
Ref: 25014315301
Ref: library/sys sys last_type14315572
Ref: 4bf14315572
Ref: library/sys sys last_value14315596
Ref: 4c014315596
Ref: library/sys sys last_traceback14315621
Ref: 4c114315621
Ref: library/sys sys maxsize14315870
Ref: 120514315870
Ref: library/sys sys maxunicode14316124
Ref: 108514316124
Ref: library/sys sys meta_path14316538
Ref: d4d14316538
Ref: library/sys sys modules14317905
Ref: 163614317905
Ref: library/sys sys orig_argv14318576
Ref: 84314318576
Ref: library/sys sys path14319084
Ref: 3b414319084
Ref: library/sys sys path_hooks14320531
Ref: 105a14320531
Ref: library/sys sys path_importer_cache14320869
Ref: 5e414320869
Ref: library/sys sys platform14321359
Ref: a9714321359
Ref: library/sys sys platlibdir14323815
Ref: 93f14323815
Ref: library/sys sys prefix14324882
Ref: 3b614324882
Ref: library/sys sys ps114325574
Ref: 1ecd14325574
Ref: library/sys sys ps214325592
Ref: 1ece14325592
Ref: library/sys sys setdlopenflags14326098
Ref: 115e14326098
Ref: library/sys sys set_int_max_str_digits14326790
Ref: 18c514326790
Ref: library/sys sys setprofile14327061
Ref: 154614327061
Ref: library/sys sys setrecursionlimit14329694
Ref: 4c314329694
Ref: library/sys sys setswitchinterval14330561
Ref: 95114330561
Ref: library/sys sys settrace14331175
Ref: 154714331175
Ref: library/sys sys set_asyncgen_hooks14336483
Ref: 171214336483
Ref: library/sys sys set_coroutine_origin_tracking_depth14337640
Ref: ba414337640
Ref: library/sys sys activate_stack_trampoline14338549
Ref: 46f14338549
Ref: library/sys sys deactivate_stack_trampoline14338941
Ref: 47014338941
Ref: library/sys sys is_stack_trampoline_active14339224
Ref: 47114339224
Ref: library/sys sys _enablelegacywindowsfsencoding14339434
Ref: 2ae14339434
Ref: library/sys sys stdin14340511
Ref: 53d14340511
Ref: library/sys sys stdout14340531
Ref: ae614340531
Ref: library/sys sys stderr14340552
Ref: 94014340552
Ref: library/sys sys __stdin__14344134
Ref: 45cd14344134
Ref: library/sys sys __stdout__14344158
Ref: 2a3314344158
Ref: library/sys sys __stderr__14344183
Ref: 438114344183
Ref: library/sys sys stdlib_module_names14345198
Ref: 84414345198
Ref: library/sys sys thread_info14346015
Ref: 118f14346015
Ref: library/sys sys thread_info name14346142
Ref: 45ce14346142
Ref: library/sys sys thread_info lock14346512
Ref: 45cf14346512
Ref: library/sys sys thread_info version14346827
Ref: 45d014346827
Ref: library/sys sys tracebacklimit14347035
Ref: 16c414347035
Ref: library/sys sys unraisablehook14347451
Ref: 1f714347451
Ref: library/sys sys version14349468
Ref: 17814349468
Ref: library/sys sys api_version14349889
Ref: 45d114349889
Ref: library/sys sys version_info14350084
Ref: 6a014350084
Ref: library/sys sys warnoptions14350750
Ref: 3b014350750
Ref: library/sys sys winver14350982
Ref: 45d214350982
Ref: library/sys sys _xoptions14351688
Ref: 1ec714351688
Ref: library/sys c9914352512
Ref: 45ac14352512
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-114352730
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-214352772
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-314352814
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-414352856
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-514352961
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-614353003
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-714353045
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-814353087
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-914353129
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1014353171
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1114353214
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1214353257
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1314353300
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1414353343
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1514353386
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1614353467
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1714353510
Ref: sys — Parâmetros e funções específicas do sistema-Footnote-1814353553
Node: sys monitoring — Monitoramento de eventos de execução14353596
Ref: library/sys monitoring doc14353876
Ref: 45d314353876
Ref: library/sys monitoring module-sys monitoring14353876
Ref: da14353876
Ref: library/sys monitoring sys-monitoring-execution-event-monitoring14353876
Ref: 45d414353876
Ref: library/sys monitoring translation-repo14353876
Ref: 45d514353876
Node: Identificadores de ferramenta14355115
Ref: library/sys monitoring tool-identifiers14355254
Ref: 45d614355254
Node: Registro e uso de ferramentas14355944
Ref: library/sys monitoring registering-and-using-tools14356039
Ref: 45d914356039
Ref: library/sys monitoring sys monitoring use_tool_id14356118
Ref: 45da14356118
Ref: library/sys monitoring sys monitoring free_tool_id14356397
Ref: 45db14356397
Ref: library/sys monitoring sys monitoring get_tool14356854
Ref: 45dc14356854
Node: Eventos14357407
Ref: library/sys monitoring events14357592
Ref: 45d714357592
Ref: library/sys monitoring monitoring-event-BRANCH14357666
Ref: 45dd14357666
Ref: library/sys monitoring monitoring-event-CALL14357774
Ref: 173414357774
Ref: library/sys monitoring monitoring-event-C_RAISE14357896
Ref: 45de14357896
Ref: library/sys monitoring monitoring-event-C_RETURN14358066
Ref: 45df14358066
Ref: library/sys monitoring monitoring-event-EXCEPTION_HANDLED14358225
Ref: 45e014358225
Ref: library/sys monitoring monitoring-event-INSTRUCTION14358320
Ref: 45e114358320
Ref: library/sys monitoring monitoring-event-JUMP14358433
Ref: 45e214358433
Ref: library/sys monitoring monitoring-event-LINE14358555
Ref: 45e314358555
Ref: library/sys monitoring monitoring-event-PY_RESUME14358725
Ref: 45e414358725
Ref: library/sys monitoring monitoring-event-PY_RETURN14358902
Ref: 45e514358902
Ref: library/sys monitoring monitoring-event-PY_START14359079
Ref: 45e614359079
Ref: library/sys monitoring monitoring-event-PY_THROW14359264
Ref: 45e714359264
Ref: library/sys monitoring monitoring-event-PY_UNWIND14359387
Ref: 45e814359387
Ref: library/sys monitoring monitoring-event-PY_YIELD14359513
Ref: 45e914359513
Ref: library/sys monitoring monitoring-event-RAISE14359686
Ref: 16da14359686
Ref: library/sys monitoring monitoring-event-RERAISE14359840
Ref: 45eb14359840
Ref: library/sys monitoring monitoring-event-STOP_ITERATION14359996
Ref: 45ea14359996
Ref: library/sys monitoring monitoring-event-NO_EVENTS14360617
Ref: 45ed14360617
Node: Eventos locais14360987
Ref: library/sys monitoring local-events14361072
Ref: 45ee14361072
Ref: library/sys monitoring monitoring-event-local14361072
Ref: 45ef14361072
Node: Eventos auxiliares14361583
Ref: library/sys monitoring ancillary-events14361691
Ref: 45f014361691
Node: Outros eventos14362158
Ref: library/sys monitoring monitoring-event-global14362275
Ref: 45f114362275
Ref: library/sys monitoring other-events14362275
Ref: 45f214362275
Node: O evento STOP_ITERATION14362654
Ref: library/sys monitoring the-stop-iteration-event14362744
Ref: 45ec14362744
Ref: O evento STOP_ITERATION-Footnote-114363473
Node: Ativação e desativação de eventos14363554
Ref: library/sys monitoring turning-events-on-and-off14363753
Ref: 45f414363753
Node: Definir eventos globalmente14364166
Ref: library/sys monitoring setting-events-globally14364302
Ref: 45f514364302
Ref: library/sys monitoring sys monitoring get_events14364488
Ref: 45f614364488
Ref: library/sys monitoring sys monitoring set_events14364630
Ref: 45f714364630
Node: Eventos por objeto código14364892
Ref: library/sys monitoring per-code-object-events14365061
Ref: 45f814365061
Ref: library/sys monitoring sys monitoring get_local_events14365417
Ref: 45f914365417
Ref: library/sys monitoring sys monitoring set_local_events14365578
Ref: 45fa14365578
Node: Desativação de eventos14366073
Ref: library/sys monitoring disabling-events14366206
Ref: 45fb14366206
Ref: library/sys monitoring sys monitoring DISABLE14366275
Ref: 45f314366275
Ref: library/sys monitoring sys monitoring restart_events14367254
Ref: 45fc14367254
Node: Registro de funções de retorno de chamada14367438
Ref: library/sys monitoring callbacks14367621
Ref: 45d814367621
Ref: library/sys monitoring registering-callback-functions14367621
Ref: 45fd14367621
Ref: library/sys monitoring sys monitoring register_callback14367777
Ref: 440a14367777
Node: Argumentos da função de retorno de chamada14368572
Ref: library/sys monitoring callback-function-arguments14368696
Ref: 45fe14368696
Ref: library/sys monitoring sys monitoring MISSING14368805
Ref: 45ff14368805
Node: sysconfig — Fornece acesso às informações de configuração do Python14370522
Ref: library/sysconfig doc14370777
Ref: 460014370777
Ref: library/sysconfig module-sysconfig14370777
Ref: db14370777
Ref: library/sysconfig sysconfig-provide-access-to-python-s-configuration-information14370777
Ref: 460114370777
Ref: library/sysconfig translation-repo14370777
Ref: 460214370777
Ref: sysconfig — Fornece acesso às informações de configuração do Python-Footnote-114371591
Node: Variáveis de configuração14371657
Ref: library/sysconfig configuration-variables14371829
Ref: 460314371829
Ref: library/sysconfig sysconfig get_config_vars14372369
Ref: 106414372369
Ref: library/sysconfig sysconfig get_config_var14372775
Ref: 106314372775
Node: Caminhos de instalação14373226
Ref: library/sysconfig id114373426
Ref: 460414373426
Ref: library/sysconfig installation-paths14373426
Ref: 68f14373426
Node: Esquema de usuário14376077
Ref: library/sysconfig sysconfig-user-scheme14376264
Ref: 1ed014376264
Ref: library/sysconfig user-scheme14376264
Ref: 460514376264
Node: posix_user14376837
Ref: library/sysconfig posix-user14376919
Ref: 460614376919
Node: nt_user14377767
Ref: library/sysconfig nt-user14377876
Ref: 460714377876
Node: osx_framework_user14378712
Ref: library/sysconfig osx-framework-user14378802
Ref: 460814378802
Node: Esquema de home14379646
Ref: library/sysconfig home-scheme14379827
Ref: 460914379827
Ref: library/sysconfig sysconfig-home-scheme14379827
Ref: 460a14379827
Node: posix_home14380354
Ref: library/sysconfig posix-home14380416
Ref: 460b14380416
Node: Esquema de prefixo14381270
Ref: library/sysconfig prefix-scheme14381468
Ref: 460c14381468
Ref: library/sysconfig sysconfig-prefix-scheme14381468
Ref: 460d14381468
Node: posix_prefix14382935
Ref: library/sysconfig posix-prefix14383013
Ref: 460e14383013
Node: nt14383946
Ref: library/sysconfig nt14384024
Ref: 460f14384024
Node: Funções de caminho de instalação14384869
Ref: library/sysconfig installation-path-functions14385071
Ref: 461014385071
Ref: library/sysconfig sysconfig get_scheme_names14385258
Ref: 461114385258
Ref: library/sysconfig sysconfig get_default_scheme14385405
Ref: 193f14385405
Ref: library/sysconfig sysconfig get_preferred_scheme14385779
Ref: 69014385779
Ref: library/sysconfig sysconfig _get_preferred_schemes14386408
Ref: 461214386408
Ref: library/sysconfig sysconfig get_path_names14387138
Ref: 461314387138
Ref: library/sysconfig sysconfig get_path14387292
Ref: 137214387292
Ref: library/sysconfig sysconfig get_paths14388614
Ref: 128514388614
Node: Outras funções<3>14389293
Ref: library/sysconfig other-functions14389503
Ref: 461414389503
Ref: library/sysconfig sysconfig get_python_version14389556
Ref: 128414389556
Ref: library/sysconfig sysconfig get_platform14389736
Ref: 128314389736
Ref: library/sysconfig sysconfig is_python_build14390889
Ref: 2dd14390889
Ref: library/sysconfig sysconfig parse_config_h14391250
Ref: 461514391250
Ref: library/sysconfig sysconfig get_config_h_filename14391688
Ref: 461614391688
Ref: library/sysconfig sysconfig get_makefile_filename14391783
Ref: 461714391783
Ref: library/sysconfig sysconfig-cli14391875
Ref: 461814391875
Node: Uso na linha de comando<8>14391876
Ref: library/sysconfig command-line-usage14392041
Ref: 461914392041
Ref: library/sysconfig using-sysconfig-as-a-script14392041
Ref: 461a14392041
Node: builtins — Objetos embutidos14393112
Ref: library/builtins doc14393352
Ref: 461b14393352
Ref: library/builtins builtins-built-in-objects14393352
Ref: 461c14393352
Ref: library/builtins module-builtins14393352
Ref: 1214393352
Ref: library/builtins translation-repo14393352
Ref: 461d14393352
Node: __main__ — Ambiente de código principal14395027
Ref: library/__main__ doc14395224
Ref: 461e14395224
Ref: library/__main__ main-top-level-code-environment14395224
Ref: 461f14395224
Ref: library/__main__ module-__main__14395224
Ref: 114395224
Ref: library/__main__ translation-repo14395224
Ref: 462014395224
Node: __name__ == '__main__'14396065
Ref: library/__main__ name-equals-main14396204
Ref: 462114396204
Ref: library/__main__ name-main14396204
Ref: 462214396204
Node: O que é o “ambiente de código principal”?14397002
Ref: library/__main__ what-is-the-top-level-code-environment14397132
Ref: 462314397132
Node: Uso idiomático14399378
Ref: library/__main__ idiomatic-usage14399546
Ref: 462414399546
Node: Considerações sobre pacotes14401702
Ref: library/__main__ packaging-considerations14401814
Ref: 462514401814
Ref: Considerações sobre pacotes-Footnote-114403464
Ref: Considerações sobre pacotes-Footnote-214403493
Node: __main__ py em pacotes Python14403531
Ref: library/__main__ main-py-in-python-packages14403694
Ref: 462614403694
Node: Uso idiomático<2>14405170
Ref: library/__main__ id114405254
Ref: 462714405254
Node: import __main__14406746
Ref: library/__main__ import-main14406878
Ref: 462814406878
Node: warnings — Controle de avisos14410178
Ref: library/warnings doc14410373
Ref: 462914410373
Ref: library/warnings module-warnings14410373
Ref: 11214410373
Ref: library/warnings translation-repo14410373
Ref: 462a14410373
Ref: library/warnings warnings-warning-control14410373
Ref: 462b14410373
Ref: warnings — Controle de avisos-Footnote-114412857
Node: Categorias de avisos14412925
Ref: library/warnings id114413040
Ref: 462f14413040
Ref: library/warnings warning-categories14413040
Ref: 244914413040
Node: O filtro de avisos14417481
Ref: library/warnings the-warnings-filter14417637
Ref: 463014417637
Ref: library/warnings warning-filter14417637
Ref: 8cf14417637
Node: Critérios de supressão de avisos repetidos14421205
Ref: library/warnings id214421341
Ref: 463114421341
Ref: library/warnings repeated-warning-suppression-criteria14421341
Ref: 463214421341
Node: Descrevendo filtros de aviso14422032
Ref: library/warnings describing-warning-filters14422201
Ref: 1ec114422201
Ref: library/warnings id314422201
Ref: 463314422201
Node: Filtro de avisos padrão14423985
Ref: library/warnings default-warning-filter14424139
Ref: 463414424139
Ref: library/warnings id414424139
Ref: 463514424139
Node: Overriding the default filter14425245
Ref: library/warnings overriding-the-default-filter14425362
Ref: 463614425362
Ref: library/warnings warning-disable14425362
Ref: 463714425362
Node: Temporarily Suppressing Warnings14426797
Ref: library/warnings temporarily-suppressing-warnings14426949
Ref: 463814426949
Ref: library/warnings warning-suppress14426949
Ref: 463914426949
Node: Testing Warnings14427965
Ref: library/warnings testing-warnings14428145
Ref: 463a14428145
Ref: library/warnings warning-testing14428145
Ref: 463b14428145
Node: Updating Code For New Versions of Dependencies14430207
Ref: library/warnings updating-code-for-new-versions-of-dependencies14430377
Ref: 463c14430377
Ref: library/warnings warning-ignored14430377
Ref: 42d014430377
Node: Funções disponíveis14431767
Ref: library/warnings available-functions14431959
Ref: 463d14431959
Ref: library/warnings warning-functions14431959
Ref: 463e14431959
Ref: library/warnings warnings warn14432023
Ref: 156214432023
Ref: library/warnings warnings warn_explicit14434609
Ref: d2214434609
Ref: library/warnings warnings showwarning14435986
Ref: 462e14435986
Ref: library/warnings warnings formatwarning14436624
Ref: 1b8d14436624
Ref: library/warnings warnings filterwarnings14437056
Ref: 14f114437056
Ref: library/warnings warnings simplefilter14437732
Ref: 6c114437732
Ref: library/warnings warnings resetwarnings14438168
Ref: 462d14438168
Ref: library/warnings warnings deprecated14438436
Ref: 16014438436
Ref: Funções disponíveis-Footnote-114440308
Node: Gerenciadores de contexto disponíveis14440350
Ref: library/warnings available-context-managers14440487
Ref: 463f14440487
Ref: library/warnings warnings catch_warnings14440585
Ref: 58414440585
Node: dataclasses — Data Classes14442336
Ref: library/dataclasses doc14442551
Ref: 464014442551
Ref: library/dataclasses dataclasses-data-classes14442551
Ref: 464114442551
Ref: library/dataclasses module-dataclasses14442551
Ref: 2f14442551
Ref: library/dataclasses translation-repo14442551
Ref: 464214442551
Ref: dataclasses — Data Classes-Footnote-114444351
Ref: dataclasses — Data Classes-Footnote-214444422
Ref: dataclasses — Data Classes-Footnote-314444464
Node: Conteúdo do módulo<8>14444506
Ref: library/dataclasses module-contents14444637
Ref: 464314444637
Ref: library/dataclasses dataclasses dataclass14444696
Ref: 1cb14444696
Ref: library/dataclasses dataclasses field14455182
Ref: 1b9814455182
Ref: library/dataclasses dataclasses Field14459971
Ref: 23ea14459971
Ref: library/dataclasses dataclasses InitVar14460736
Ref: 193e14460736
Ref: library/dataclasses dataclasses fields14461144
Ref: 183b14461144
Ref: library/dataclasses dataclasses asdict14461552
Ref: 181914461552
Ref: library/dataclasses dataclasses astuple14462612
Ref: 182214462612
Ref: library/dataclasses dataclasses make_dataclass14463373
Ref: 183d14463373
Ref: library/dataclasses dataclasses replace14465168
Ref: 17ec14465168
Ref: library/dataclasses dataclasses is_dataclass14466668
Ref: 19a014466668
Ref: library/dataclasses dataclasses MISSING14467162
Ref: 464614467162
Ref: library/dataclasses dataclasses KW_ONLY14467265
Ref: 464514467265
Ref: library/dataclasses dataclasses FrozenInstanceError14468213
Ref: 464914468213
Ref: Conteúdo do módulo<8>-Footnote-114468524
Ref: Conteúdo do módulo<8>-Footnote-214468579
Node: Processamento pós-inicialização14468634
Ref: library/dataclasses id114468794
Ref: 464a14468794
Ref: library/dataclasses post-init-processing14468794
Ref: 464b14468794
Ref: library/dataclasses dataclasses __post_init__14468880
Ref: 464814468880
Node: Variáveis de classe14470641
Ref: library/dataclasses class-variables14470814
Ref: 464c14470814
Ref: library/dataclasses dataclasses-class-variables14470814
Ref: 464d14470814
Ref: Variáveis de classe-Footnote-114471381
Node: Variáveis de inicialização apenas14471423
Ref: library/dataclasses dataclasses-init-only-variables14471578
Ref: 464714471578
Ref: library/dataclasses init-only-variables14471578
Ref: 464e14471578
Node: Frozen instances14472838
Ref: library/dataclasses dataclasses-frozen14472984
Ref: 464414472984
Ref: library/dataclasses frozen-instances14472984
Ref: 464f14472984
Node: Herança<2>14473581
Ref: library/dataclasses dataclasses-inheritance14473741
Ref: 465014473741
Ref: library/dataclasses inheritance14473741
Ref: 465114473741
Node: Re-ordering of keyword-only parameters in __init__14474790
Ref: library/dataclasses re-ordering-of-keyword-only-parameters-in-init14474963
Ref: 465214474963
Node: Funções padrão de fábrica14476218
Ref: library/dataclasses default-factory-functions14476405
Ref: 465314476405
Node: Valores padrão mutáveis14477027
Ref: library/dataclasses mutable-default-values14477187
Ref: 465414477187
Node: Descriptor-typed fields14479217
Ref: library/dataclasses descriptor-typed-fields14479339
Ref: 465514479339
Node: contextlib — Utilitários para contextos da instrução with14481317
Ref: library/contextlib doc14481531
Ref: 465614481531
Ref: library/contextlib contextlib-utilities-for-with-statement-contexts14481531
Ref: 465714481531
Ref: library/contextlib module-contextlib14481531
Ref: 2314481531
Ref: library/contextlib translation-repo14481531
Ref: 465814481531
Ref: contextlib — Utilitários para contextos da instrução with-Footnote-114482250
Node: Utilitários14482320
Ref: library/contextlib utilities14482462
Ref: 465914482462
Ref: library/contextlib contextlib AbstractContextManager14482539
Ref: cab14482539
Ref: library/contextlib contextlib AbstractAsyncContextManager14483061
Ref: b3d14483061
Ref: library/contextlib contextlib contextmanager14483604
Ref: 124214483604
Ref: library/contextlib contextlib asynccontextmanager14486819
Ref: b3c14486819
Ref: library/contextlib contextlib closing14488987
Ref: 13d014488987
Ref: library/contextlib contextlib aclosing14490293
Ref: 7ef14490293
Ref: library/contextlib simplifying-support-for-single-optional-context-managers14491515
Ref: 465a14491515
Ref: library/contextlib contextlib nullcontext14491515
Ref: 7f014491515
Ref: library/contextlib contextlib suppress14493352
Ref: f5814493352
Ref: library/contextlib contextlib redirect_stdout14495012
Ref: e1214495012
Ref: library/contextlib contextlib redirect_stderr14496497
Ref: e1114496497
Ref: library/contextlib contextlib chdir14496772
Ref: 60c14496772
Ref: library/contextlib contextlib ContextDecorator14497514
Ref: 124114497514
Ref: library/contextlib contextlib AsyncContextDecorator14499961
Ref: 7f114499961
Ref: library/contextlib contextlib ExitStack14501059
Ref: b3b14501059
Ref: library/contextlib contextlib ExitStack enter_context14503062
Ref: 5d314503062
Ref: library/contextlib contextlib ExitStack push14503654
Ref: 465c14503654
Ref: library/contextlib contextlib ExitStack callback14504547
Ref: a8d14504547
Ref: library/contextlib contextlib ExitStack pop_all14505004
Ref: 465d14505004
Ref: library/contextlib contextlib ExitStack close14506057
Ref: 465e14506057
Ref: library/contextlib contextlib AsyncExitStack14506346
Ref: b3e14506346
Ref: library/contextlib contextlib AsyncExitStack enter_async_context14506714
Ref: 5d614506714
Ref: library/contextlib contextlib AsyncExitStack push_async_exit14507051
Ref: 466014507051
Ref: library/contextlib contextlib AsyncExitStack push_async_callback14507231
Ref: a8e14507231
Ref: library/contextlib contextlib AsyncExitStack aclose14507398
Ref: 465f14507398
Node: Exemplos e receitas<3>14508013
Ref: library/contextlib examples-and-recipes14508214
Ref: 466114508214
Node: Supporting a variable number of context managers14508660
Ref: library/contextlib supporting-a-variable-number-of-context-managers14508818
Ref: 466214508818
Node: Catching exceptions from __enter__ methods14509860
Ref: library/contextlib catching-exceptions-from-enter-methods14510069
Ref: 466314510069
Node: Cleaning up in an __enter__ implementation14511217
Ref: library/contextlib cleaning-up-in-an-enter-implementation14511429
Ref: 466414511429
Node: Replacing any use of try-finally and flag variables14513332
Ref: library/contextlib replacing-any-use-of-try-finally-and-flag-variables14513549
Ref: 466514513549
Node: Using a context manager as a function decorator14516122
Ref: library/contextlib using-a-context-manager-as-a-function-decorator14516288
Ref: 466614516288
Ref: Using a context manager as a function decorator-Footnote-114518131
Node: Single use reusable and reentrant context managers14518173
Ref: library/contextlib single-use-reusable-and-reentrant-cms14518353
Ref: f5a14518353
Ref: library/contextlib single-use-reusable-and-reentrant-context-managers14518353
Ref: 466714518353
Node: Reentrant context managers14519906
Ref: library/contextlib reentrant-cms14520068
Ref: 465b14520068
Ref: library/contextlib reentrant-context-managers14520068
Ref: 466814520068
Node: Gerenciadores de contexto reutilizáveis14521605
Ref: library/contextlib reusable-cms14521767
Ref: 466914521767
Ref: library/contextlib reusable-context-managers14521767
Ref: 466a14521767
Node: abc — Classes base abstratas14524474
Ref: library/abc doc14524694
Ref: 466b14524694
Ref: library/abc abc-abstract-base-classes14524694
Ref: 466c14524694
Ref: library/abc module-abc14524694
Ref: 414524694
Ref: library/abc translation-repo14524694
Ref: 466d14524694
Ref: library/abc abc ABC14525784
Ref: f4914525784
Ref: library/abc abc ABCMeta14526650
Ref: f4a14526650
Ref: library/abc abc ABCMeta register14527474
Ref: 10c714527474
Ref: library/abc abc ABCMeta __subclasshook__14528197
Ref: 26cb14528197
Ref: library/abc abc abstractmethod14531190
Ref: 10c414531190
Ref: library/abc abc abstractclassmethod14534438
Ref: 10c514534438
Ref: library/abc abc abstractstaticmethod14535202
Ref: 10c614535202
Ref: library/abc abc abstractproperty14535971
Ref: 10c314535971
Ref: library/abc abc get_cache_token14537467
Ref: f4814537467
Ref: library/abc abc update_abstractmethods14537851
Ref: 466e14537851
Ref: abc — Classes base abstratas-Footnote-114538562
Ref: abc — Classes base abstratas-Footnote-214538625
Ref: abc — Classes base abstratas-Footnote-314538667
Ref: abc — Classes base abstratas-Footnote-414538709
Node: atexit — Manipuladores de saída14538825
Ref: library/atexit doc14539038
Ref: 466f14539038
Ref: library/atexit atexit-exit-handlers14539038
Ref: 467014539038
Ref: library/atexit module-atexit14539038
Ref: c14539038
Ref: library/atexit translation-repo14539038
Ref: 467114539038
Ref: library/atexit atexit register14540188
Ref: 88214540188
Ref: library/atexit atexit unregister14542017
Ref: 15a614542017
Node: Exemplo do atexit14542798
Ref: library/atexit atexit-example14542886
Ref: 467214542886
Ref: library/atexit id114542886
Ref: 467314542886
Node: traceback — Imprime ou recupera um traceback da pilha14544297
Ref: library/traceback doc14544530
Ref: 467414544530
Ref: library/traceback module-traceback14544530
Ref: fe14544530
Ref: library/traceback traceback-print-or-retrieve-a-stack-traceback14544530
Ref: 467514544530
Ref: library/traceback translation-repo14544530
Ref: 467614544530
Ref: traceback — Imprime ou recupera um traceback da pilha-Footnote-114546643
Node: Funções de nível de módulo<2>14546712
Ref: library/traceback module-level-functions14546872
Ref: 467714546872
Ref: library/traceback traceback print_tb14546951
Ref: eb414546951
Ref: library/traceback traceback print_exception14547899
Ref: 85214547899
Ref: library/traceback traceback print_exc14549422
Ref: 19ad14549422
Ref: library/traceback traceback print_last14549605
Ref: 467814549605
Ref: library/traceback traceback print_stack14549911
Ref: eb514549911
Ref: library/traceback traceback extract_tb14550474
Ref: 467914550474
Ref: library/traceback traceback extract_stack14551123
Ref: 467e14551123
Ref: library/traceback traceback print_list14551436
Ref: 467f14551436
Ref: library/traceback traceback format_list14551739
Ref: 468014551739
Ref: library/traceback traceback format_exception_only14552248
Ref: 85114552248
Ref: library/traceback traceback format_exception14553634
Ref: 85014553634
Ref: library/traceback traceback format_exc14554376
Ref: 468114554376
Ref: library/traceback traceback format_tb14554536
Ref: 454614554536
Ref: library/traceback traceback format_stack14554652
Ref: 468214554652
Ref: library/traceback traceback clear_frames14554777
Ref: 100a14554777
Ref: library/traceback traceback walk_stack14555027
Ref: eb014555027
Ref: library/traceback traceback walk_tb14555350
Ref: eb114555350
Node: TracebackException Objects14555597
Ref: library/traceback tracebackexception-objects14555786
Ref: 468414555786
Ref: library/traceback traceback TracebackException14556274
Ref: 25c14556274
Ref: library/traceback traceback TracebackException __cause__14557587
Ref: 468614557587
Ref: library/traceback traceback TracebackException __context__14557694
Ref: 468514557694
Ref: library/traceback traceback TracebackException exceptions14557815
Ref: 468814557815
Ref: library/traceback traceback TracebackException __suppress_context__14558098
Ref: 468714558098
Ref: library/traceback traceback TracebackException __notes__14558233
Ref: 468914558233
Ref: library/traceback traceback TracebackException stack14558547
Ref: 468a14558547
Ref: library/traceback traceback TracebackException exc_type14558639
Ref: 25d14558639
Ref: library/traceback traceback TracebackException exc_type_str14558763
Ref: 25b14558763
Ref: library/traceback traceback TracebackException filename14558901
Ref: 468b14558901
Ref: library/traceback traceback TracebackException lineno14559001
Ref: 468c14559001
Ref: library/traceback traceback TracebackException end_lineno14559101
Ref: 468d14559101
Ref: library/traceback traceback TracebackException text14559293
Ref: 468e14559293
Ref: library/traceback traceback TracebackException offset14559384
Ref: 468f14559384
Ref: library/traceback traceback TracebackException end_offset14559503
Ref: 469014559503
Ref: library/traceback traceback TracebackException msg14559704
Ref: 469114559704
Ref: library/traceback traceback TracebackException from_exception14559787
Ref: 469214559787
Ref: library/traceback traceback TracebackException print14560171
Ref: 6a414560171
Ref: library/traceback traceback TracebackException format14560385
Ref: 469314560385
Ref: library/traceback traceback TracebackException format_exception_only14560837
Ref: 25e14560837
Node: StackSummary Objects14561878
Ref: library/traceback stacksummary-objects14562054
Ref: 469414562054
Ref: library/traceback traceback StackSummary14562226
Ref: eb214562226
Ref: library/traceback traceback StackSummary extract14562262
Ref: 468314562262
Ref: library/traceback traceback StackSummary from_list14563256
Ref: 469514563256
Ref: library/traceback traceback StackSummary format14563561
Ref: 469614563561
Ref: library/traceback traceback StackSummary format_frame_summary14564195
Ref: 6a314564195
Node: FrameSummary Objects14564605
Ref: library/traceback framesummary-objects14564799
Ref: 469714564799
Ref: library/traceback traceback FrameSummary14564992
Ref: eb314564992
Ref: library/traceback traceback FrameSummary filename14565911
Ref: 467a14565911
Ref: library/traceback traceback FrameSummary lineno14566113
Ref: 467b14566113
Ref: library/traceback traceback FrameSummary name14566202
Ref: 467c14566202
Ref: library/traceback traceback FrameSummary line14566337
Ref: 467d14566337
Ref: library/traceback traceback FrameSummary end_lineno14566545
Ref: 469814566545
Ref: library/traceback traceback FrameSummary colno14566828
Ref: 469914566828
Ref: library/traceback traceback FrameSummary end_colno14566988
Ref: 469a14566988
Node: Examples of Using the Module-Level Functions14567157
Ref: library/traceback examples-of-using-the-module-level-functions14567367
Ref: 469b14567367
Ref: library/traceback traceback-example14567367
Ref: 469c14567367
Node: Examples of Using TracebackException14572812
Ref: library/traceback examples-of-using-tracebackexception14572993
Ref: 469d14572993
Node: __future__ — Definições de instruções future14575649
Ref: library/__future__ doc14575887
Ref: 469e14575887
Ref: library/__future__ future-future-statement-definitions14575887
Ref: 469f14575887
Ref: library/__future__ module-__future__14575887
Ref: 014575887
Ref: library/__future__ translation-repo14575887
Ref: 46a014575887
Ref: __future__ — Definições de instruções future-Footnote-114577621
Node: Conteúdo do módulo<9>14577691
Ref: library/__future__ module-contents14577801
Ref: 46a114577801
Ref: library/__future__ future__ nested_scopes14578475
Ref: 46a214578475
Ref: library/__future__ future__ generators14578876
Ref: 46a314578876
Ref: library/__future__ future__ division14579270
Ref: 46a414579270
Ref: library/__future__ future__ absolute_import14579677
Ref: 46a514579677
Ref: library/__future__ future__ with_statement14580185
Ref: 46a614580185
Ref: library/__future__ future__ print_function14580586
Ref: 46a714580586
Ref: library/__future__ future__ unicode_literals14580985
Ref: 46a814580985
Ref: library/__future__ future__ generator_stop14581392
Ref: 46a914581392
Ref: library/__future__ future__ annotations14581809
Ref: 46aa14581809
Ref: library/__future__ future-classes14582123
Ref: 46ab14582123
Ref: library/__future__ future__ _Feature14582123
Ref: 22fd14582123
Ref: library/__future__ future__ _Feature getOptionalRelease14582780
Ref: 46ac14582780
Ref: library/__future__ future__ _Feature getMandatoryRelease14582916
Ref: 46ad14582916
Ref: library/__future__ future__ _Feature compiler_flag14583562
Ref: 20d814583562
Ref: Conteúdo do módulo<9>-Footnote-114584185
Ref: Conteúdo do módulo<9>-Footnote-214584227
Ref: Conteúdo do módulo<9>-Footnote-314584269
Ref: Conteúdo do módulo<9>-Footnote-414584311
Ref: Conteúdo do módulo<9>-Footnote-514584353
Ref: Conteúdo do módulo<9>-Footnote-614584395
Ref: Conteúdo do módulo<9>-Footnote-714584437
Ref: Conteúdo do módulo<9>-Footnote-814584479
Ref: Conteúdo do módulo<9>-Footnote-914584521
Ref: Conteúdo do módulo<9>-Footnote-1014585123
Ref: Conteúdo do módulo<9>-Footnote-1114585166
Node: gc — Interface para o coletor de lixo14585209
Ref: library/gc doc14585428
Ref: 46ae14585428
Ref: library/gc gc-garbage-collector-interface14585428
Ref: 46af14585428
Ref: library/gc module-gc14585428
Ref: 6014585428
Ref: library/gc translation-repo14585428
Ref: 46b014585428
Ref: library/gc gc enable14586409
Ref: 46b114586409
Ref: library/gc gc disable14586482
Ref: 46b214586482
Ref: library/gc gc isenabled14586558
Ref: 46b314586558
Ref: library/gc gc collect14586658
Ref: a4314586658
Ref: library/gc gc set_debug14587464
Ref: 46b414587464
Ref: library/gc gc get_debug14587785
Ref: 46b514587785
Ref: library/gc gc get_objects14587884
Ref: 80614587884
Ref: library/gc gc get_stats14588332
Ref: f7714588332
Ref: library/gc gc set_threshold14589028
Ref: 46b614589028
Ref: library/gc gc get_count14590290
Ref: 46b714590290
Ref: library/gc gc get_threshold14590419
Ref: 46b814590419
Ref: library/gc gc get_referrers14590562
Ref: 80714590562
Ref: library/gc gc get_referents14591668
Ref: 80814591668
Ref: library/gc gc is_tracked14592496
Ref: 135214592496
Ref: library/gc gc is_finalized14593394
Ref: 90314593394
Ref: library/gc gc freeze14593911
Ref: b4c14593911
Ref: library/gc gc unfreeze14594796
Ref: b4d14594796
Ref: library/gc gc get_freeze_count14594962
Ref: b4e14594962
Ref: library/gc gc garbage14595225
Ref: 120114595225
Ref: library/gc gc callbacks14596176
Ref: 110614596176
Ref: library/gc gc DEBUG_STATS14597627
Ref: 46ba14597627
Ref: library/gc gc DEBUG_COLLECTABLE14597778
Ref: 46bb14597778
Ref: library/gc gc DEBUG_UNCOLLECTABLE14597881
Ref: 120214597881
Ref: library/gc gc DEBUG_SAVEALL14598303
Ref: 46b914598303
Ref: library/gc gc DEBUG_LEAK14598521
Ref: 46bc14598521
Ref: gc — Interface para o coletor de lixo-Footnote-114598786
Ref: gc — Interface para o coletor de lixo-Footnote-214598942
Node: inspect — Inspecione objetos vivos14598984
Ref: library/inspect doc14599206
Ref: 46bd14599206
Ref: library/inspect inspect-inspect-live-objects14599206
Ref: 46be14599206
Ref: library/inspect translation-repo14599206
Ref: 46bf14599206
Ref: library/inspect module-inspect14599303
Ref: 7e14599303
Ref: inspect — Inspecione objetos vivos-Footnote-114600574
Node: Tipos e membros14600641
Ref: library/inspect inspect-types14600760
Ref: 1b2114600760
Ref: library/inspect types-and-members14600760
Ref: 46c014600760
Ref: library/inspect inspect getmembers14619256
Ref: 197a14619256
Ref: library/inspect inspect getmembers_static14619869
Ref: 64914619869
Ref: library/inspect inspect getmodulename14620613
Ref: d5b14620613
Ref: library/inspect inspect ismodule14621291
Ref: 46c214621291
Ref: library/inspect inspect isclass14621383
Ref: 46c314621383
Ref: library/inspect inspect ismethod14621522
Ref: 46c414621522
Ref: library/inspect inspect isfunction14621638
Ref: 46c514621638
Ref: library/inspect inspect isgeneratorfunction14621816
Ref: 18e614621816
Ref: library/inspect inspect isgenerator14622289
Ref: 46c614622289
Ref: library/inspect inspect iscoroutinefunction14622387
Ref: 2e414622387
Ref: library/inspect inspect markcoroutinefunction14623245
Ref: 49014623245
Ref: library/inspect inspect iscoroutine14623841
Ref: e4214623841
Ref: library/inspect inspect isawaitable14624034
Ref: e4314624034
Ref: library/inspect inspect isasyncgenfunction14624515
Ref: 18e714624515
Ref: library/inspect inspect isasyncgen14625232
Ref: 46c714625232
Ref: library/inspect inspect istraceback14625467
Ref: 46c814625467
Ref: library/inspect inspect isframe14625565
Ref: 46c914625565
Ref: library/inspect inspect iscode14625655
Ref: 46ca14625655
Ref: library/inspect inspect isbuiltin14625743
Ref: 46cb14625743
Ref: library/inspect inspect ismethodwrapper14625879
Ref: 64a14625879
Ref: library/inspect inspect isroutine14626189
Ref: 16d614626189
Ref: library/inspect inspect isabstract14626324
Ref: 46cc14626324
Ref: library/inspect inspect ismethoddescriptor14626432
Ref: 16d514626432
Ref: library/inspect inspect isdatadescriptor14627642
Ref: 46cd14627642
Ref: library/inspect inspect isgetsetdescriptor14628272
Ref: 46ce14628272
Ref: library/inspect inspect ismemberdescriptor14628632
Ref: 46cf14628632
Node: Retrieving source code14629003
Ref: library/inspect inspect-source14629180
Ref: 46d014629180
Ref: library/inspect retrieving-source-code14629180
Ref: 46d114629180
Ref: library/inspect inspect getdoc14629247
Ref: a0214629247
Ref: library/inspect inspect getcomments14629772
Ref: 16b014629772
Ref: library/inspect inspect getfile14630196
Ref: 1c1e14630196
Ref: library/inspect inspect getmodule14630432
Ref: 18f814630432
Ref: library/inspect inspect getsourcefile14630592
Ref: 18f914630592
Ref: library/inspect inspect getsourcelines14630893
Ref: 15d814630893
Ref: library/inspect inspect getsource14631610
Ref: 15f814631610
Ref: library/inspect inspect cleandoc14632163
Ref: 17a814632163
Node: Introspecting callables with the Signature object14632574
Ref: library/inspect inspect-signature-object14632758
Ref: 46d214632758
Ref: library/inspect introspecting-callables-with-the-signature-object14632758
Ref: 46d314632758
Ref: library/inspect inspect signature14633094
Ref: 73814633094
Ref: library/inspect inspect Signature14635680
Ref: 1cf14635680
Ref: library/inspect inspect Signature empty14636797
Ref: 46d614636797
Ref: library/inspect inspect Signature parameters14636916
Ref: 46d414636916
Ref: library/inspect inspect Signature return_annotation14637411
Ref: 46d714637411
Ref: library/inspect inspect Signature bind14637629
Ref: 164814637629
Ref: library/inspect inspect Signature bind_partial14637908
Ref: 46d814637908
Ref: library/inspect inspect Signature replace14638286
Ref: 46d514638286
Ref: library/inspect inspect Signature format14639161
Ref: 46d914639161
Ref: library/inspect inspect Signature from_callable14639581
Ref: 73a14639581
Ref: library/inspect inspect Parameter14640304
Ref: 1d014640304
Ref: library/inspect inspect Parameter empty14640748
Ref: 46db14640748
Ref: library/inspect inspect Parameter name14640896
Ref: 46dc14640896
Ref: library/inspect inspect Parameter default14641342
Ref: 46dd14641342
Ref: library/inspect inspect Parameter annotation14641542
Ref: 46de14641542
Ref: library/inspect inspect Parameter kind14641739
Ref: 46df14641739
Ref: library/inspect inspect Parameter kind description14644769
Ref: 46e014644769
Ref: library/inspect inspect Parameter replace14645336
Ref: 46da14645336
Ref: library/inspect inspect BoundArguments14646515
Ref: 10a214646515
Ref: library/inspect inspect BoundArguments arguments14646720
Ref: 91214646720
Ref: library/inspect inspect BoundArguments args14647569
Ref: 46e114647569
Ref: library/inspect inspect BoundArguments kwargs14647719
Ref: 46e214647719
Ref: library/inspect inspect BoundArguments signature14647963
Ref: 46e314647963
Ref: library/inspect inspect BoundArguments apply_defaults14648060
Ref: e4114648060
Ref: Introspecting callables with the Signature object-Footnote-114649050
Node: Classes e funções<2>14649092
Ref: library/inspect classes-and-functions14649278
Ref: 46e414649278
Ref: library/inspect inspect-classes-functions14649278
Ref: 46e514649278
Ref: library/inspect inspect getclasstree14649337
Ref: 46e614649337
Ref: library/inspect inspect getfullargspec14649916
Ref: 73914649916
Ref: library/inspect inspect getargvalues14652287
Ref: eee14652287
Ref: library/inspect inspect formatargvalues14652792
Ref: eef14652792
Ref: library/inspect inspect getmro14653262
Ref: 46e714653262
Ref: library/inspect inspect getcallargs14653626
Ref: eed14653626
Ref: library/inspect inspect getclosurevars14655001
Ref: 111414655001
Ref: library/inspect inspect unwrap14655724
Ref: f9014655724
Ref: library/inspect inspect get_annotations14656465
Ref: 81614656465
Node: A pilha to interpretador14659413
Ref: library/inspect inspect-stack14659580
Ref: 46e814659580
Ref: library/inspect the-interpreter-stack14659580
Ref: 46e914659580
Ref: library/inspect inspect FrameInfo14659908
Ref: 64c14659908
Ref: library/inspect inspect FrameInfo frame14659939
Ref: 46ea14659939
Ref: library/inspect inspect FrameInfo filename14660037
Ref: 46eb14660037
Ref: library/inspect inspect FrameInfo lineno14660182
Ref: 46ec14660182
Ref: library/inspect inspect FrameInfo function14660347
Ref: 46ed14660347
Ref: library/inspect inspect FrameInfo code_context14660479
Ref: 46ee14660479
Ref: library/inspect inspect FrameInfo index14660646
Ref: 46ef14660646
Ref: library/inspect inspect FrameInfo positions14660777
Ref: 46f014660777
Ref: library/inspect inspect Traceback14661317
Ref: 64d14661317
Ref: library/inspect inspect Traceback filename14661348
Ref: 46f214661348
Ref: library/inspect inspect Traceback lineno14661496
Ref: 46f314661496
Ref: library/inspect inspect Traceback function14661664
Ref: 46f414661664
Ref: library/inspect inspect Traceback code_context14661799
Ref: 46f514661799
Ref: library/inspect inspect Traceback index14661969
Ref: 46f614661969
Ref: library/inspect inspect Traceback positions14662100
Ref: 46f714662100
Ref: library/inspect inspect getframeinfo14664031
Ref: 64f14664031
Ref: library/inspect inspect getouterframes14664299
Ref: 65014664299
Ref: library/inspect inspect getinnerframes14664908
Ref: 65114664908
Ref: library/inspect inspect currentframe14665513
Ref: 6e214665513
Ref: library/inspect inspect stack14665923
Ref: 65214665923
Ref: library/inspect inspect trace14666424
Ref: 65314666424
Node: Fetching attributes statically14667014
Ref: library/inspect fetching-attributes-statically14667225
Ref: 46f814667225
Ref: library/inspect inspect getattr_static14667807
Ref: 49414667807
Node: Current State of Generators Coroutines and Asynchronous Generators14669619
Ref: library/inspect current-state-of-generators-coroutines-and-asynchronous-generators14669828
Ref: 46f914669828
Ref: library/inspect inspect getgeneratorstate14670310
Ref: 127714670310
Ref: library/inspect inspect getcoroutinestate14670710
Ref: e4514670710
Ref: library/inspect inspect getasyncgenstate14671331
Ref: 49214671331
Ref: library/inspect inspect getgeneratorlocals14672208
Ref: 111514672208
Ref: library/inspect inspect getcoroutinelocals14673099
Ref: e4414673099
Ref: library/inspect inspect getasyncgenlocals14673342
Ref: 49314673342
Node: Code Objects Bit Flags14673635
Ref: library/inspect code-objects-bit-flags14673826
Ref: 46fa14673826
Ref: library/inspect inspect-module-co-flags14673826
Ref: 20d714673826
Ref: library/inspect inspect CO_OPTIMIZED14673996
Ref: 46fb14673996
Ref: library/inspect inspect CO_NEWLOCALS14674083
Ref: 46fc14674083
Ref: library/inspect inspect CO_VARARGS14674234
Ref: 46fd14674234
Ref: library/inspect inspect CO_VARKEYWORDS14674342
Ref: 46fe14674342
Ref: library/inspect inspect CO_NESTED14674454
Ref: 46ff14674454
Ref: library/inspect inspect CO_GENERATOR14674548
Ref: 470014674548
Ref: library/inspect inspect CO_COROUTINE14674723
Ref: 470114674723
Ref: library/inspect inspect CO_ITERABLE_COROUTINE14674965
Ref: 470214674965
Ref: library/inspect inspect CO_ASYNC_GENERATOR14675285
Ref: 470314675285
Ref: Code Objects Bit Flags-Footnote-114675937
Ref: Code Objects Bit Flags-Footnote-214675979
Ref: Code Objects Bit Flags-Footnote-314676021
Node: Buffer flags14676063
Ref: library/inspect buffer-flags14676221
Ref: 470414676221
Ref: library/inspect inspect BufferFlags14676268
Ref: 46014676268
Ref: library/inspect inspect BufferFlags SIMPLE14676591
Ref: 470614676591
Ref: library/inspect inspect BufferFlags WRITABLE14676618
Ref: 470714676618
Ref: library/inspect inspect BufferFlags FORMAT14676647
Ref: 470814676647
Ref: library/inspect inspect BufferFlags ND14676674
Ref: 470914676674
Ref: library/inspect inspect BufferFlags STRIDES14676697
Ref: 470a14676697
Ref: library/inspect inspect BufferFlags C_CONTIGUOUS14676725
Ref: 470b14676725
Ref: library/inspect inspect BufferFlags F_CONTIGUOUS14676758
Ref: 470c14676758
Ref: library/inspect inspect BufferFlags ANY_CONTIGUOUS14676791
Ref: 470d14676791
Ref: library/inspect inspect BufferFlags INDIRECT14676826
Ref: 470e14676826
Ref: library/inspect inspect BufferFlags CONTIG14676855
Ref: 470f14676855
Ref: library/inspect inspect BufferFlags CONTIG_RO14676882
Ref: 471014676882
Ref: library/inspect inspect BufferFlags STRIDED14676912
Ref: 471114676912
Ref: library/inspect inspect BufferFlags STRIDED_RO14676940
Ref: 471214676940
Ref: library/inspect inspect BufferFlags RECORDS14676971
Ref: 471314676971
Ref: library/inspect inspect BufferFlags RECORDS_RO14676999
Ref: 471414676999
Ref: library/inspect inspect BufferFlags FULL14677030
Ref: 471514677030
Ref: library/inspect inspect BufferFlags FULL_RO14677055
Ref: 471614677055
Ref: library/inspect inspect BufferFlags READ14677083
Ref: 169c14677083
Ref: library/inspect inspect BufferFlags WRITE14677108
Ref: 169d14677108
Node: Interface de linha de comando<13>14677168
Ref: library/inspect command-line-interface14677295
Ref: 471714677295
Ref: library/inspect inspect-module-cli14677295
Ref: f8f14677295
Ref: library/inspect cmdoption-inspect-details14677686
Ref: 471814677686
Node: site — Gancho de configuração específico do site14677793
Ref: library/site doc14677967
Ref: 471914677967
Ref: library/site module-site14677967
Ref: c714677967
Ref: library/site site-site-specific-configuration-hook14677967
Ref: 471a14677967
Ref: library/site translation-repo14677967
Ref: 471b14677967
Ref: site — Gancho de configuração específico do site-Footnote-114683506
Node: sitecustomize14683570
Ref: library/site module-sitecustomize14683695
Ref: c814683695
Ref: library/site sitecustomize14683695
Ref: 471c14683695
Node: usercustomize14684536
Ref: library/site module-usercustomize14684693
Ref: 10e14684693
Ref: library/site usercustomize14684693
Ref: 471d14684693
Node: Configuração Readline14685586
Ref: library/site readline-configuration14685754
Ref: 471f14685754
Ref: library/site rlcompleter-config14685754
Ref: fff14685754
Node: Conteúdo do módulo<10>14686474
Ref: library/site module-contents14686662
Ref: 472014686662
Ref: library/site site PREFIXES14686723
Ref: 472114686723
Ref: library/site site ENABLE_USER_SITE14686807
Ref: 471e14686807
Ref: library/site site USER_SITE14687329
Ref: 1ecf14687329
Ref: library/site site USER_BASE14688003
Ref: 136114688003
Ref: library/site site main14688634
Ref: 1ebe14688634
Ref: library/site site addsitedir14689035
Ref: 1ff314689035
Ref: library/site site getsitepackages14689270
Ref: 127f14689270
Ref: library/site site getuserbase14689430
Ref: 128014689430
Ref: library/site site getusersitepackages14689699
Ref: 128114689699
Node: Interface de linha de comando<14>14690141
Ref: library/site command-line-interface14690297
Ref: 472214690297
Ref: library/site site-commandline14690297
Ref: 472314690297
Ref: library/site cmdoption-site-user-base14690858
Ref: 472414690858
Ref: library/site cmdoption-site-user-site14690941
Ref: 472514690941
Ref: Interface de linha de comando<14>-Footnote-114691758
Node: Interpretadores Python Personalizados14691800
Ref: library/custominterp doc14691980
Ref: 472614691980
Ref: library/custominterp custom-python-interpreters14691980
Ref: 472714691980
Ref: library/custominterp custominterp14691980
Ref: 472814691980
Ref: library/custominterp translation-repo14691980
Ref: 472914691980
Node: code — Classes bases do interpretador14692640
Ref: library/code doc14692795
Ref: 472a14692795
Ref: library/code code-interpreter-base-classes14692795
Ref: 472b14692795
Ref: library/code module-code14692795
Ref: 1a14692795
Ref: library/code code InteractiveInterpreter14693268
Ref: 16c314693268
Ref: library/code code InteractiveConsole14694148
Ref: 253314694148
Ref: library/code code interact14694744
Ref: 17c814694744
Ref: library/code code compile_command14695779
Ref: 472e14695779
Ref: code — Classes bases do interpretador-Footnote-114697141
Node: Objetos de interpretador interativo14697205
Ref: library/code interactive-interpreter-objects14697354
Ref: 472f14697354
Ref: library/code interpreter-objects14697354
Ref: 473014697354
Ref: library/code code InteractiveInterpreter runsource14697445
Ref: 473114697445
Ref: library/code code InteractiveInterpreter runcode14698777
Ref: 473314698777
Ref: library/code code InteractiveInterpreter showsyntaxerror14699278
Ref: 473214699278
Ref: library/code code InteractiveInterpreter showtraceback14699797
Ref: df814699797
Ref: library/code code InteractiveInterpreter write14700185
Ref: 473414700185
Node: Objetos de console Interativo14700429
Ref: library/code console-objects14700578
Ref: 473514700578
Ref: library/code interactive-console-objects14700578
Ref: 473614700578
Ref: library/code code InteractiveConsole interact14700856
Ref: 472d14700856
Ref: library/code code InteractiveConsole push14701790
Ref: 473714701790
Ref: library/code code InteractiveConsole resetbuffer14702524
Ref: 473814702524
Ref: library/code code InteractiveConsole raw_input14702641
Ref: 472c14702641
Node: codeop — Compila código Python14703040
Ref: library/codeop doc14703195
Ref: 473914703195
Ref: library/codeop codeop-compile-python-code14703195
Ref: 473a14703195
Ref: library/codeop module-codeop14703195
Ref: 1c14703195
Ref: library/codeop translation-repo14703195
Ref: 473b14703195
Ref: library/codeop codeop compile_command14704261
Ref: 18dd14704261
Ref: library/codeop codeop Compile14705787
Ref: 473c14705787
Ref: library/codeop codeop CommandCompiler14706203
Ref: 473d14706203
Ref: codeop — Compila código Python-Footnote-114706645
Node: Importando módulos14706711
Ref: library/modules doc14706881
Ref: 473e14706881
Ref: library/modules importing-modules14706881
Ref: 473f14706881
Ref: library/modules modules14706881
Ref: 474014706881
Ref: library/modules translation-repo14706881
Ref: 474114706881
Node: zipimport - Importa módulos de arquivos Zip14707934
Ref: library/zipimport doc14708089
Ref: 474214708089
Ref: library/zipimport module-zipimport14708089
Ref: 13214708089
Ref: library/zipimport zipimport-import-modules-from-zip-archives14708089
Ref: 474314708089
Ref: library/zipimport zipimport ZipImportError14710500
Ref: 474414710500
Ref: zipimport - Importa módulos de arquivos Zip-Footnote-114710809
Ref: zipimport - Importa módulos de arquivos Zip-Footnote-214710878
Ref: zipimport - Importa módulos de arquivos Zip-Footnote-314710946
Ref: zipimport - Importa módulos de arquivos Zip-Footnote-414710988
Ref: zipimport - Importa módulos de arquivos Zip-Footnote-514711030
Node: Objetos zipimporter14711072
Ref: library/zipimport id114711193
Ref: 474514711193
Ref: library/zipimport zipimporter-objects14711193
Ref: 474614711193
Ref: library/zipimport zipimport zipimporter14711318
Ref: 474714711318
Ref: library/zipimport zipimport zipimporter create_module14712004
Ref: 86214712004
Ref: library/zipimport zipimport zipimporter exec_module14712263
Ref: 31214712263
Ref: library/zipimport zipimport zipimporter find_spec14712429
Ref: 86114712429
Ref: library/zipimport zipimport zipimporter get_code14712619
Ref: 474814712619
Ref: library/zipimport zipimport zipimporter get_data14712819
Ref: 474914712819
Ref: library/zipimport zipimport zipimporter get_filename14713125
Ref: 474a14713125
Ref: library/zipimport zipimport zipimporter get_source14713406
Ref: 474b14713406
Ref: library/zipimport zipimport zipimporter is_package14713715
Ref: 474c14713715
Ref: library/zipimport zipimport zipimporter load_module14713937
Ref: 31114713937
Ref: library/zipimport zipimport zipimporter invalidate_caches14714320
Ref: 86314714320
Ref: library/zipimport zipimport zipimporter archive14714502
Ref: 474d14714502
Ref: library/zipimport zipimport zipimporter prefix14714627
Ref: 474e14714627
Node: Exemplos<33>14715049
Ref: library/zipimport examples14715170
Ref: 474f14715170
Ref: library/zipimport zipimport-examples14715170
Ref: 475014715170
Node: pkgutil — Utilitário de extensão de pacote14715859
Ref: library/pkgutil doc14716077
Ref: 475114716077
Ref: library/pkgutil module-pkgutil14716077
Ref: a914716077
Ref: library/pkgutil pkgutil-package-extension-utility14716077
Ref: 475214716077
Ref: library/pkgutil translation-repo14716077
Ref: 475314716077
Ref: library/pkgutil pkgutil ModuleInfo14716394
Ref: d6f14716394
Ref: library/pkgutil pkgutil extend_path14716574
Ref: 16d014716574
Ref: library/pkgutil pkgutil find_loader14718488
Ref: 2cb14718488
Ref: library/pkgutil pkgutil get_importer14719281
Ref: 475414719281
Ref: library/pkgutil pkgutil get_loader14719880
Ref: 2cc14719880
Ref: library/pkgutil pkgutil iter_importers14720793
Ref: 11d814720793
Ref: library/pkgutil pkgutil iter_modules14721645
Ref: d6e14721645
Ref: library/pkgutil pkgutil walk_packages14722567
Ref: c1914722567
Ref: library/pkgutil pkgutil get_data14724293
Ref: 475514724293
Ref: library/pkgutil pkgutil resolve_name14725480
Ref: 475714725480
Ref: pkgutil — Utilitário de extensão de pacote-Footnote-114727485
Ref: pkgutil — Utilitário de extensão de pacote-Footnote-214727552
Ref: pkgutil — Utilitário de extensão de pacote-Footnote-314727594
Ref: pkgutil — Utilitário de extensão de pacote-Footnote-414727636
Ref: pkgutil — Utilitário de extensão de pacote-Footnote-514727678
Ref: pkgutil — Utilitário de extensão de pacote-Footnote-614727720
Ref: pkgutil — Utilitário de extensão de pacote-Footnote-714727762
Ref: pkgutil — Utilitário de extensão de pacote-Footnote-814727804
Ref: pkgutil — Utilitário de extensão de pacote-Footnote-914727846
Ref: pkgutil — Utilitário de extensão de pacote-Footnote-1014727888
Node: modulefinder — Procura módulos usados por um script14727954
Ref: library/modulefinder doc14728178
Ref: 475814728178
Ref: library/modulefinder module-modulefinder14728178
Ref: 9114728178
Ref: library/modulefinder modulefinder-find-modules-used-by-a-script14728178
Ref: 475914728178
Ref: library/modulefinder translation-repo14728178
Ref: 475a14728178
Ref: library/modulefinder modulefinder AddPackagePath14728764
Ref: 475b14728764
Ref: library/modulefinder modulefinder ReplacePackage14728930
Ref: 475c14728930
Ref: library/modulefinder modulefinder ModuleFinder14729094
Ref: 1b7a14729094
Ref: library/modulefinder modulefinder ModuleFinder report14729834
Ref: 475e14729834
Ref: library/modulefinder modulefinder ModuleFinder run_script14730064
Ref: 475d14730064
Ref: library/modulefinder modulefinder ModuleFinder modules14730203
Ref: 475f14730203
Ref: modulefinder — Procura módulos usados por um script-Footnote-114730445
Node: Exemplo de uso de ModuleFinder14730517
Ref: library/modulefinder example-usage-of-modulefinder14730638
Ref: 476114730638
Ref: library/modulefinder modulefinder-example14730638
Ref: 476014730638
Node: runpy — Localizando e executando módulos Python14732008
Ref: library/runpy doc14732227
Ref: 476214732227
Ref: library/runpy module-runpy14732227
Ref: be14732227
Ref: library/runpy runpy-locating-and-executing-python-modules14732227
Ref: 476314732227
Ref: library/runpy translation-repo14732227
Ref: 476414732227
Ref: library/runpy runpy run_module14733372
Ref: 192214733372
Ref: library/runpy runpy run_path14737129
Ref: 18114737129
Ref: runpy — Localizando e executando módulos Python-Footnote-114742060
Ref: runpy — Localizando e executando módulos Python-Footnote-214742125
Ref: runpy — Localizando e executando módulos Python-Footnote-314742167
Ref: runpy — Localizando e executando módulos Python-Footnote-414742209
Ref: runpy — Localizando e executando módulos Python-Footnote-514742251
Ref: runpy — Localizando e executando módulos Python-Footnote-614742293
Ref: runpy — Localizando e executando módulos Python-Footnote-714742335
Ref: runpy — Localizando e executando módulos Python-Footnote-814742377
Node: importlib — A implementação de import14742419
Ref: library/importlib doc14742655
Ref: 476514742655
Ref: library/importlib importlib-the-implementation-of-import14742655
Ref: 476614742655
Ref: library/importlib module-importlib14742655
Ref: 7714742655
Ref: library/importlib translation-repo14742655
Ref: 476714742655
Ref: importlib — A implementação de import-Footnote-114743401
Node: Introdução<12>14743480
Ref: library/importlib introduction14743596
Ref: 476814743596
Ref: Introdução<12>-Footnote-114746130
Ref: Introdução<12>-Footnote-214746182
Ref: Introdução<12>-Footnote-314746224
Ref: Introdução<12>-Footnote-414746266
Ref: Introdução<12>-Footnote-514746308
Ref: Introdução<12>-Footnote-614746350
Ref: Introdução<12>-Footnote-714746392
Ref: Introdução<12>-Footnote-814746434
Ref: Introdução<12>-Footnote-914746476
Ref: Introdução<12>-Footnote-1014746518
Ref: Introdução<12>-Footnote-1114746561
Ref: Introdução<12>-Footnote-1214746604
Ref: Introdução<12>-Footnote-1314746647
Node: Funções<12>14746690
Ref: library/importlib functions14746883
Ref: 476914746883
Ref: library/importlib importlib __import__14746920
Ref: 10a614746920
Ref: library/importlib importlib import_module14747223
Ref: 51814747223
Ref: library/importlib importlib invalidate_caches14748653
Ref: c2a14748653
Ref: library/importlib importlib reload14749363
Ref: 51914749363
Node: importlib abc – classes base abstratas relacionadas a importação14753176
Ref: library/importlib importlib-abc-abstract-base-classes-related-to-import14753410
Ref: 476a14753410
Ref: library/importlib module-importlib abc14753410
Ref: 7814753410
Ref: library/importlib importlib abc MetaPathFinder14754261
Ref: 87214754261
Ref: library/importlib importlib abc MetaPathFinder find_spec14754506
Ref: 86c14754506
Ref: library/importlib importlib abc MetaPathFinder invalidate_caches14755319
Ref: 476b14755319
Ref: library/importlib importlib abc PathEntryFinder14755751
Ref: 87314755751
Ref: library/importlib importlib abc PathEntryFinder find_spec14756243
Ref: 87014756243
Ref: library/importlib importlib abc PathEntryFinder invalidate_caches14756960
Ref: 476c14756960
Ref: library/importlib importlib abc Loader14757277
Ref: ef614757277
Ref: library/importlib importlib abc Loader create_module14757755
Ref: cce14757755
Ref: library/importlib importlib abc Loader exec_module14758193
Ref: 86e14758193
Ref: library/importlib importlib abc Loader load_module14758699
Ref: 86d14758699
Ref: library/importlib importlib abc ResourceLoader14760919
Ref: c0214760919
Ref: library/importlib importlib abc ResourceLoader get_data14761418
Ref: 475614761418
Ref: library/importlib importlib abc InspectLoader14762324
Ref: f8814762324
Ref: library/importlib importlib abc InspectLoader get_code14762532
Ref: f8914762532
Ref: library/importlib importlib abc InspectLoader get_source14763167
Ref: f8c14763167
Ref: library/importlib importlib abc InspectLoader is_package14763882
Ref: 476e14763882
Ref: library/importlib importlib abc InspectLoader source_to_code14764297
Ref: e3d14764297
Ref: library/importlib importlib abc InspectLoader exec_module14765017
Ref: 104814765017
Ref: library/importlib importlib abc InspectLoader load_module14765158
Ref: 476f14765158
Ref: library/importlib importlib abc ExecutionLoader14765382
Ref: 477014765382
Ref: library/importlib importlib abc ExecutionLoader get_filename14765635
Ref: 477114765635
Ref: library/importlib importlib abc FileLoader14766295
Ref: 10ac14766295
Ref: library/importlib importlib abc FileLoader name14766801
Ref: 477214766801
Ref: library/importlib importlib abc FileLoader path14766888
Ref: 477314766888
Ref: library/importlib importlib abc FileLoader load_module14766958
Ref: 477414766958
Ref: library/importlib importlib abc FileLoader get_filename14767172
Ref: 477514767172
Ref: library/importlib importlib abc FileLoader get_data14767267
Ref: 477614767267
Ref: library/importlib importlib abc SourceLoader14767392
Ref: 477714767392
Ref: library/importlib importlib abc SourceLoader path_stats14768601
Ref: 11c914768601
Ref: library/importlib importlib abc SourceLoader path_mtime14769421
Ref: 11c814769421
Ref: library/importlib importlib abc SourceLoader set_data14770008
Ref: 477814770008
Ref: library/importlib importlib abc SourceLoader get_code14770556
Ref: 477914770556
Ref: library/importlib importlib abc SourceLoader exec_module14770671
Ref: 104914770671
Ref: library/importlib importlib abc SourceLoader load_module14770821
Ref: 477a14770821
Ref: library/importlib importlib abc SourceLoader get_source14771054
Ref: 105714771054
Ref: library/importlib importlib abc SourceLoader is_package14771183
Ref: 477b14771183
Ref: library/importlib importlib abc ResourceReader14771632
Ref: b1014771632
Ref: library/importlib importlib abc ResourceReader open_resource14773636
Ref: 477c14773636
Ref: library/importlib importlib abc ResourceReader resource_path14773935
Ref: 477d14773935
Ref: library/importlib importlib abc ResourceReader is_resource14774201
Ref: 477e14774201
Ref: library/importlib importlib abc ResourceReader contents14774435
Ref: 1bbc14774435
Ref: library/importlib importlib abc Traversable14775453
Ref: 19b214775453
Ref: library/importlib importlib abc Traversable name14775907
Ref: 477f14775907
Ref: library/importlib importlib abc Traversable iterdir14776018
Ref: 478014776018
Ref: library/importlib importlib abc Traversable is_dir14776122
Ref: 478114776122
Ref: library/importlib importlib abc Traversable is_file14776229
Ref: 478214776229
Ref: library/importlib importlib abc Traversable joinpath14776334
Ref: 478314776334
Ref: library/importlib importlib abc Traversable __truediv__14776439
Ref: 478414776439
Ref: library/importlib importlib abc Traversable open14776553
Ref: 478514776553
Ref: library/importlib importlib abc Traversable read_bytes14776940
Ref: 478614776940
Ref: library/importlib importlib abc Traversable read_text14777026
Ref: 478714777026
Ref: library/importlib importlib abc TraversableResources14777124
Ref: 19b014777124
Ref: library/importlib importlib abc TraversableResources files14777923
Ref: 478814777923
Ref: importlib abc – classes base abstratas relacionadas a importação-Footnote-114778114
Ref: importlib abc – classes base abstratas relacionadas a importação-Footnote-214778187
Ref: importlib abc – classes base abstratas relacionadas a importação-Footnote-314778229
Ref: importlib abc – classes base abstratas relacionadas a importação-Footnote-414778271
Ref: importlib abc – classes base abstratas relacionadas a importação-Footnote-514778313
Node: importlib machinery – Importadores e ganchos de caminho14778355
Ref: library/importlib importlib-machinery-importers-and-path-hooks14778621
Ref: 478914778621
Ref: library/importlib module-importlib machinery14778621
Ref: 7914778621
Ref: library/importlib importlib machinery SOURCE_SUFFIXES14778981
Ref: 51414778981
Ref: library/importlib importlib machinery DEBUG_BYTECODE_SUFFIXES14779174
Ref: 478a14779174
Ref: library/importlib importlib machinery OPTIMIZED_BYTECODE_SUFFIXES14779461
Ref: 478b14779461
Ref: library/importlib importlib machinery BYTECODE_SUFFIXES14779747
Ref: 51614779747
Ref: library/importlib importlib machinery EXTENSION_SUFFIXES14780052
Ref: 51514780052
Ref: library/importlib importlib machinery all_suffixes14780244
Ref: 46c114780244
Ref: library/importlib importlib machinery BuiltinImporter14780750
Ref: ccf14780750
Ref: library/importlib importlib machinery FrozenImporter14781368
Ref: 105514781368
Ref: library/importlib importlib machinery WindowsRegistryFinder14781815
Ref: d4c14781815
Ref: library/importlib importlib machinery PathFinder14782363
Ref: 105914782363
Ref: library/importlib importlib machinery PathFinder find_spec14782698
Ref: 104714782698
Ref: library/importlib importlib machinery PathFinder invalidate_caches14784022
Ref: c2914784022
Ref: library/importlib importlib machinery FileFinder14784693
Ref: 10ab14784693
Ref: library/importlib importlib machinery FileFinder path14786188
Ref: 478c14786188
Ref: library/importlib importlib machinery FileFinder find_spec14786267
Ref: ef514786267
Ref: library/importlib importlib machinery FileFinder invalidate_caches14786456
Ref: 478d14786456
Ref: library/importlib importlib machinery FileFinder path_hook14786530
Ref: 478e14786530
Ref: library/importlib importlib machinery SourceFileLoader14787006
Ref: 10ad14787006
Ref: library/importlib importlib machinery SourceFileLoader name14787317
Ref: 478f14787317
Ref: library/importlib importlib machinery SourceFileLoader path14787407
Ref: 479014787407
Ref: library/importlib importlib machinery SourceFileLoader is_package14787475
Ref: 479114787475
Ref: library/importlib importlib machinery SourceFileLoader path_stats14787605
Ref: 479214787605
Ref: library/importlib importlib machinery SourceFileLoader set_data14787744
Ref: 479314787744
Ref: library/importlib importlib machinery SourceFileLoader load_module14787885
Ref: d4a14787885
Ref: library/importlib importlib machinery SourcelessFileLoader14788241
Ref: 10ae14788241
Ref: library/importlib importlib machinery SourcelessFileLoader name14788787
Ref: 479414788787
Ref: library/importlib importlib machinery SourcelessFileLoader path14788873
Ref: 479514788873
Ref: library/importlib importlib machinery SourcelessFileLoader is_package14788947
Ref: 479614788947
Ref: library/importlib importlib machinery SourcelessFileLoader get_code14789064
Ref: 479714789064
Ref: library/importlib importlib machinery SourcelessFileLoader get_source14789209
Ref: 479814789209
Ref: library/importlib importlib machinery SourcelessFileLoader load_module14789377
Ref: d4b14789377
Ref: library/importlib importlib machinery ExtensionFileLoader14789708
Ref: cd014789708
Ref: library/importlib importlib machinery ExtensionFileLoader name14790466
Ref: 479914790466
Ref: library/importlib importlib machinery ExtensionFileLoader path14790552
Ref: 479a14790552
Ref: library/importlib importlib machinery ExtensionFileLoader create_module14790625
Ref: 479b14790625
Ref: library/importlib importlib machinery ExtensionFileLoader exec_module14790815
Ref: 479c14790815
Ref: library/importlib importlib machinery ExtensionFileLoader is_package14790983
Ref: 479d14790983
Ref: library/importlib importlib machinery ExtensionFileLoader get_code14791167
Ref: 479e14791167
Ref: library/importlib importlib machinery ExtensionFileLoader get_source14791309
Ref: 479f14791309
Ref: library/importlib importlib machinery ExtensionFileLoader get_filename14791448
Ref: f8d14791448
Ref: library/importlib importlib machinery NamespaceLoader14791566
Ref: f8a14791566
Ref: library/importlib importlib machinery ModuleSpec14792264
Ref: 1fee14792264
Ref: library/importlib importlib machinery ModuleSpec name14793071
Ref: 20a814793071
Ref: library/importlib importlib machinery ModuleSpec loader14793280
Ref: 2e314793280
Ref: library/importlib importlib machinery ModuleSpec origin14793482
Ref: 47a014793482
Ref: library/importlib importlib machinery ModuleSpec submodule_search_locations14793983
Ref: 20ac14793983
Ref: library/importlib importlib machinery ModuleSpec loader_state14794632
Ref: 47a114794632
Ref: library/importlib importlib machinery ModuleSpec cached14794875
Ref: 2d614794875
Ref: library/importlib importlib machinery ModuleSpec parent14795172
Ref: 2d814795172
Ref: library/importlib importlib machinery ModuleSpec has_location14795462
Ref: 47a214795462
Ref: library/importlib importlib machinery AppleFrameworkLoader14795748
Ref: 1fed14795748
Ref: library/importlib importlib machinery AppleFrameworkLoader name14799102
Ref: 47a314799102
Ref: library/importlib importlib machinery AppleFrameworkLoader path14799188
Ref: 47a414799188
Ref: importlib machinery – Importadores e ganchos de caminho-Footnote-114799316
Ref: importlib machinery – Importadores e ganchos de caminho-Footnote-214799396
Ref: importlib machinery – Importadores e ganchos de caminho-Footnote-314799438
Ref: importlib machinery – Importadores e ganchos de caminho-Footnote-414799480
Ref: importlib machinery – Importadores e ganchos de caminho-Footnote-514799522
Node: importlib util – Utility code for importers14799564
Ref: library/importlib importlib-util-utility-code-for-importers14799774
Ref: 47a514799774
Ref: library/importlib module-importlib util14799774
Ref: 7d14799774
Ref: library/importlib importlib util MAGIC_NUMBER14800100
Ref: 51314800100
Ref: library/importlib importlib util cache_from_source14800345
Ref: 2fe14800345
Ref: library/importlib importlib util source_from_cache14802277
Ref: 51a14802277
Ref: library/importlib importlib util decode_source14802924
Ref: f8b14802924
Ref: library/importlib importlib util resolve_name14803201
Ref: 91014803201
Ref: library/importlib importlib util find_spec14804109
Ref: 2cd14804109
Ref: library/importlib importlib util module_from_spec14805068
Ref: e3e14805068
Ref: library/importlib importlib util spec_from_loader14805708
Ref: 87114805708
Ref: library/importlib importlib util spec_from_file_location14806168
Ref: cd114806168
Ref: library/importlib importlib util source_hash14806671
Ref: b5c14806671
Ref: library/importlib importlib util _incompatible_extension_module_restrictions14806949
Ref: 47a614806949
Ref: library/importlib importlib util LazyLoader14808071
Ref: ccd14808071
Ref: library/importlib importlib util LazyLoader factory14809562
Ref: 47a714809562
Ref: importlib util – Utility code for importers-Footnote-114810126
Ref: importlib util – Utility code for importers-Footnote-214810200
Ref: importlib util – Utility code for importers-Footnote-314810242
Ref: importlib util – Utility code for importers-Footnote-414810284
Ref: importlib util – Utility code for importers-Footnote-514810326
Ref: importlib util – Utility code for importers-Footnote-614810368
Ref: importlib util – Utility code for importers-Footnote-714810410
Node: Exemplos<34>14810452
Ref: library/importlib examples14810596
Ref: 47a814810596
Ref: library/importlib importlib-examples14810596
Ref: 47a914810596
Node: Importing programmatically14810902
Ref: library/importlib importing-programmatically14811026
Ref: 47aa14811026
Node: Checando se o módulo pode ser importado14811257
Ref: library/importlib checking-if-a-module-can-be-imported14811429
Ref: 47ab14811429
Node: Importa o arquivo de origem diretamente14812349
Ref: library/importlib importing-a-source-file-directly14812520
Ref: 47ac14812520
Node: Implementing lazy imports14813702
Ref: library/importlib implementing-lazy-imports14813855
Ref: 47ad14813855
Node: Setting up an importer14814574
Ref: library/importlib setting-up-an-importer14814725
Ref: 47ae14814725
Node: Approximating importlib import_module14816302
Ref: library/importlib approximating-importlib-import-module14816419
Ref: 47af14816419
Node: importlib resources – Leitura abertura e acesso a recursos de pacotes14817919
Ref: library/importlib resources doc14818169
Ref: 47b014818169
Ref: library/importlib resources importlib-resources-package-resource-reading-opening-and-access14818169
Ref: 47b114818169
Ref: library/importlib resources module-importlib resources14818169
Ref: 7b14818169
Ref: library/importlib resources translation-repo14818169
Ref: 47b214818169
Ref: library/importlib resources importlib resources Anchor14820359
Ref: 47b314820359
Ref: library/importlib resources importlib resources files14820572
Ref: 48e14820572
Ref: library/importlib resources importlib resources as_file14821725
Ref: 48d14821725
Ref: importlib resources – Leitura abertura e acesso a recursos de pacotes-Footnote-114822646
Ref: importlib resources – Leitura abertura e acesso a recursos de pacotes-Footnote-214822735
Ref: importlib resources – Leitura abertura e acesso a recursos de pacotes-Footnote-314822829
Ref: importlib resources – Leitura abertura e acesso a recursos de pacotes-Footnote-414822900
Ref: importlib resources – Leitura abertura e acesso a recursos de pacotes-Footnote-514822972
Node: API funcional14823049
Ref: library/importlib resources functional-api14823170
Ref: 47b414823170
Ref: library/importlib resources importlib-resources-functional14823170
Ref: 47b514823170
Ref: library/importlib resources importlib resources open_binary14824588
Ref: 1ed14824588
Ref: library/importlib resources importlib resources open_text14825091
Ref: 1ee14825091
Ref: library/importlib resources importlib resources read_binary14826119
Ref: 1f014826119
Ref: library/importlib resources importlib resources read_text14826533
Ref: 1f114826533
Ref: library/importlib resources importlib resources path14827469
Ref: 1ef14827469
Ref: library/importlib resources importlib resources is_resource14828550
Ref: 1ec14828550
Ref: library/importlib resources importlib resources contents14829029
Ref: 1f214829029
Node: importlib resources abc – Classes base abstratas para recursos14829782
Ref: library/importlib resources abc doc14830043
Ref: 47b614830043
Ref: library/importlib resources abc importlib-resources-abc-abstract-base-classes-for-resources14830043
Ref: 47b714830043
Ref: library/importlib resources abc module-importlib resources abc14830043
Ref: 7c14830043
Ref: library/importlib resources abc translation-repo14830043
Ref: 47b814830043
Ref: library/importlib resources abc importlib resources abc ResourceReader14830343
Ref: 476d14830343
Ref: library/importlib resources abc importlib resources abc ResourceReader open_resource14832292
Ref: 47b914832292
Ref: library/importlib resources abc importlib resources abc ResourceReader resource_path14832571
Ref: 47ba14832571
Ref: library/importlib resources abc importlib resources abc ResourceReader is_resource14832822
Ref: 47bb14832822
Ref: library/importlib resources abc importlib resources abc ResourceReader contents14833127
Ref: 47bc14833127
Ref: library/importlib resources abc importlib resources abc Traversable14834075
Ref: 1f314834075
Ref: library/importlib resources abc importlib resources abc Traversable name14834375
Ref: 47bd14834375
Ref: library/importlib resources abc importlib resources abc Traversable iterdir14834486
Ref: 47be14834486
Ref: library/importlib resources abc importlib resources abc Traversable is_dir14834578
Ref: 47bf14834578
Ref: library/importlib resources abc importlib resources abc Traversable is_file14834679
Ref: 47c014834679
Ref: library/importlib resources abc importlib resources abc Traversable joinpath14834778
Ref: 47c114834778
Ref: library/importlib resources abc importlib resources abc Traversable __truediv__14835943
Ref: 47c214835943
Ref: library/importlib resources abc importlib resources abc Traversable open14836098
Ref: 47c314836098
Ref: library/importlib resources abc importlib resources abc Traversable read_bytes14836485
Ref: 47c414836485
Ref: library/importlib resources abc importlib resources abc Traversable read_text14836565
Ref: 47c514836565
Ref: library/importlib resources abc importlib resources abc TraversableResources14836657
Ref: 2c514836657
Ref: library/importlib resources abc importlib resources abc TraversableResources files14837229
Ref: 47c614837229
Ref: importlib resources abc – Classes base abstratas para recursos-Footnote-114837420
Node: importlib metadata – Acessando metadados do pacote14837504
Ref: library/importlib metadata doc14837755
Ref: 47c714837755
Ref: library/importlib metadata importlib-metadata-accessing-package-metadata14837755
Ref: 47c814837755
Ref: library/importlib metadata module-importlib metadata14837755
Ref: 7a14837755
Ref: library/importlib metadata translation-repo14837755
Ref: 47c914837755
Ref: library/importlib metadata using14837755
Ref: 47ca14837755
Ref: importlib metadata – Acessando metadados do pacote-Footnote-114840339
Ref: importlib metadata – Acessando metadados do pacote-Footnote-214840427
Ref: importlib metadata – Acessando metadados do pacote-Footnote-314840508
Ref: importlib metadata – Acessando metadados do pacote-Footnote-414840589
Ref: importlib metadata – Acessando metadados do pacote-Footnote-514840674
Ref: importlib metadata – Acessando metadados do pacote-Footnote-614840759
Ref: importlib metadata – Acessando metadados do pacote-Footnote-714840797
Ref: importlib metadata – Acessando metadados do pacote-Footnote-814840892
Ref: importlib metadata – Acessando metadados do pacote-Footnote-914840961
Node: Visão Geral<3>14841037
Ref: library/importlib metadata overview14841166
Ref: 47cb14841166
Ref: library/importlib metadata importlib metadata PackageNotFoundError14842742
Ref: 47d014842742
Ref: Visão Geral<3>-Footnote-114843045
Node: API funcional<2>14843132
Ref: library/importlib metadata functional-api14843285
Ref: 47d114843285
Node: Pontos de entrada14843624
Ref: library/importlib metadata entry-points14843730
Ref: 28414843730
Ref: library/importlib metadata id214843730
Ref: 47d214843730
Ref: library/importlib metadata importlib metadata entry_points14843785
Ref: 47d314843785
Ref: library/importlib metadata importlib metadata EntryPoints14844414
Ref: 47d414844414
Ref: library/importlib metadata importlib metadata EntryPoint14844732
Ref: 47d514844732
Ref: Pontos de entrada-Footnote-114847664
Ref: Pontos de entrada-Footnote-214847736
Node: Metadados de distribuição14847804
Ref: library/importlib metadata distribution-metadata14847945
Ref: 47d614847945
Ref: library/importlib metadata metadata14847945
Ref: 47cc14847945
Ref: library/importlib metadata importlib metadata metadata14848018
Ref: 47d714848018
Ref: library/importlib metadata importlib metadata PackageMetadata14848385
Ref: 47d814848385
Ref: Metadados de distribuição-Footnote-114849738
Ref: Metadados de distribuição-Footnote-214849843
Ref: Metadados de distribuição-Footnote-314849930
Ref: Metadados de distribuição-Footnote-414849972
Node: Versões de distribuição14850067
Ref: library/importlib metadata distribution-versions14850217
Ref: 47d914850217
Ref: library/importlib metadata version14850217
Ref: 47cd14850217
Ref: library/importlib metadata importlib metadata version14850287
Ref: 169914850287
Ref: Versões de distribuição-Footnote-114850818
Ref: Versões de distribuição-Footnote-214850907
Node: Arquivos de distribuição14850994
Ref: library/importlib metadata distribution-files14851145
Ref: 47da14851145
Ref: library/importlib metadata files14851145
Ref: 47ce14851145
Ref: library/importlib metadata importlib metadata files14851216
Ref: 47db14851216
Ref: library/importlib metadata importlib metadata PackagePath14851729
Ref: 47dc14851729
Ref: Arquivos de distribuição-Footnote-114853419
Ref: Arquivos de distribuição-Footnote-214853506
Node: Requisitos de distribuição14853603
Ref: library/importlib metadata distribution-requirements14853779
Ref: 47dd14853779
Ref: library/importlib metadata requirements14853779
Ref: 47cf14853779
Ref: library/importlib metadata importlib metadata requires14853854
Ref: 47de14853854
Ref: library/importlib metadata package-distributions14854387
Ref: 81314854387
Ref: Requisitos de distribuição-Footnote-114854424
Node: Mapeando importação pra pacotes de distribuição14854511
Ref: library/importlib metadata import-distribution-package-mapping14854652
Ref: 47df14854652
Ref: library/importlib metadata mapping-import-to-distribution-packages14854652
Ref: 47e014854652
Ref: library/importlib metadata importlib metadata packages_distributions14854771
Ref: 47e114854771
Ref: Mapeando importação pra pacotes de distribuição-Footnote-114855955
Ref: Mapeando importação pra pacotes de distribuição-Footnote-214856042
Ref: Mapeando importação pra pacotes de distribuição-Footnote-314856123
Node: Distribuições14856185
Ref: library/importlib metadata distributions14856351
Ref: 81414856351
Ref: library/importlib metadata id914856351
Ref: 47e214856351
Ref: library/importlib metadata importlib metadata distribution14856400
Ref: 47e314856400
Ref: library/importlib metadata importlib metadata Distribution14856723
Ref: 47e414856723
Ref: Distribuições-Footnote-114858526
Ref: Distribuições-Footnote-214858613
Ref: Distribuições-Footnote-314858655
Node: Descoberta de distribuição14858750
Ref: library/importlib metadata distribution-discovery14858934
Ref: 47e514858934
Ref: Descoberta de distribuição-Footnote-114859672
Node: Estendendo o algoritmo de pesquisa14859759
Ref: library/importlib metadata extending-the-search-algorithm14859919
Ref: 47e614859919
Ref: Estendendo o algoritmo de pesquisa-Footnote-114862033
Node: Exemplo<14>14862120
Ref: library/importlib metadata example14862202
Ref: 47e714862202
Node: A inicialização do caminho de pesquisa de módulos sys path14865664
Ref: library/sys_path_init doc14865842
Ref: 47e814865842
Ref: library/sys_path_init sys-path-init14865842
Ref: 1de614865842
Ref: library/sys_path_init the-initialization-of-the-sys-path-module-search-path14865842
Ref: 47e914865842
Ref: library/sys_path_init translation-repo14865842
Ref: 47ea14865842
Node: Ambientes virtuais<2>14869721
Ref: library/sys_path_init virtual-environments14869862
Ref: 47ec14869862
Node: Arquivos _pth14870504
Ref: library/sys_path_init pth-files14870670
Ref: 47ed14870670
Node: Python embarcado14871989
Ref: library/sys_path_init embedded-python14872125
Ref: 47ee14872125
Node: Serviços da Linguagem Python14872640
Ref: library/language doc14872809
Ref: 47ef14872809
Ref: library/language language14872809
Ref: 47f014872809
Ref: library/language python-language-services14872809
Ref: 47f114872809
Ref: library/language translation-repo14872809
Ref: 47f214872809
Node: ast — Árvores de Sintaxe Abstrata14873730
Ref: library/ast doc14873896
Ref: 47f314873896
Ref: library/ast ast-abstract-syntax-trees14873896
Ref: 47f414873896
Ref: library/ast module-ast14873896
Ref: 814873896
Ref: ast — Árvores de Sintaxe Abstrata-Footnote-114875022
Node: Gramática Abstrata14875085
Ref: library/ast abstract-grammar14875201
Ref: 47f614875201
Ref: library/ast id114875201
Ref: 47f714875201
Node: Classes de nós14882756
Ref: library/ast node-classes14882898
Ref: 47f814882898
Ref: library/ast ast AST14882948
Ref: 1a614882948
Ref: library/ast ast AST _fields14883779
Ref: 15e314883779
Ref: library/ast ast AST _field_types14884642
Ref: 1a714884642
Ref: library/ast ast AST lineno14885052
Ref: 47f914885052
Ref: library/ast ast AST col_offset14885078
Ref: 47fa14885078
Ref: library/ast ast AST end_lineno14885108
Ref: 47fb14885108
Ref: library/ast ast AST end_col_offset14885138
Ref: 47fc14885138
Ref: Classes de nós-Footnote-114889064
Node: Nós raízes14889122
Ref: library/ast ast-root-nodes14889206
Ref: 47fe14889206
Ref: library/ast root-nodes14889206
Ref: 47ff14889206
Ref: library/ast ast Module14889249
Ref: 480014889249
Ref: library/ast ast Expression14889942
Ref: 480214889942
Ref: library/ast ast Interactive14890330
Ref: 480414890330
Ref: library/ast ast FunctionType14891067
Ref: 480514891067
Ref: Nós raízes-Footnote-114892160
Node: Literais<3>14892202
Ref: library/ast literals14892305
Ref: 480614892305
Ref: library/ast ast Constant14892342
Ref: 2b914892342
Ref: library/ast ast FormattedValue14892865
Ref: 480714892865
Ref: library/ast ast JoinedStr14893796
Ref: 17de14893796
Ref: library/ast ast List14894774
Ref: 480814894774
Ref: library/ast ast Tuple14894807
Ref: 480914894807
Ref: library/ast ast Set14895710
Ref: 480b14895710
Ref: library/ast ast Dict14896116
Ref: 1ad614896116
Node: Variáveis14896949
Ref: library/ast variables14897054
Ref: 480c14897054
Ref: library/ast ast Name14897094
Ref: 1aaf14897094
Ref: library/ast ast Load14897239
Ref: 1a414897239
Ref: library/ast ast Store14897260
Ref: 480a14897260
Ref: library/ast ast Del14897282
Ref: 480d14897282
Ref: library/ast ast Starred14898194
Ref: 480e14898194
Node: Expressões<2>14899004
Ref: library/ast ast-expressions14899110
Ref: 480314899110
Ref: library/ast expressions14899110
Ref: 481014899110
Ref: library/ast ast Expr14899152
Ref: 481114899152
Ref: library/ast ast UnaryOp14899827
Ref: 47fd14899827
Ref: library/ast ast UAdd14899969
Ref: 481514899969
Ref: library/ast ast USub14899990
Ref: 481614899990
Ref: library/ast ast Not14900011
Ref: 481714900011
Ref: library/ast ast Invert14900031
Ref: 481814900031
Ref: library/ast ast BinOp14900394
Ref: 1b4414900394
Ref: library/ast ast Add14900836
Ref: 481914900836
Ref: library/ast ast Sub14900856
Ref: 481a14900856
Ref: library/ast ast Mult14900876
Ref: 481b14900876
Ref: library/ast ast Div14900897
Ref: 481c14900897
Ref: library/ast ast FloorDiv14900917
Ref: 481d14900917
Ref: library/ast ast Mod14900942
Ref: 481e14900942
Ref: library/ast ast Pow14900962
Ref: 481f14900962
Ref: library/ast ast LShift14900982
Ref: 482014900982
Ref: library/ast ast RShift14901005
Ref: 482114901005
Ref: library/ast ast BitOr14901028
Ref: 482214901028
Ref: library/ast ast BitXor14901050
Ref: 482314901050
Ref: library/ast ast BitAnd14901073
Ref: 482414901073
Ref: library/ast ast MatMult14901096
Ref: 482514901096
Ref: library/ast ast BoolOp14901156
Ref: 482614901156
Ref: library/ast ast And14901813
Ref: 482814901813
Ref: library/ast ast Or14901833
Ref: 482714901833
Ref: library/ast ast Compare14901888
Ref: 482914901888
Ref: library/ast ast Eq14902537
Ref: 482a14902537
Ref: library/ast ast NotEq14902556
Ref: 482b14902556
Ref: library/ast ast Lt14902578
Ref: 482c14902578
Ref: library/ast ast LtE14902597
Ref: 482d14902597
Ref: library/ast ast Gt14902617
Ref: 482e14902617
Ref: library/ast ast GtE14902636
Ref: 482f14902636
Ref: library/ast ast Is14902656
Ref: 483014902656
Ref: library/ast ast IsNot14902675
Ref: 483114902675
Ref: library/ast ast In14902697
Ref: 483214902697
Ref: library/ast ast NotIn14902716
Ref: 483314902716
Ref: library/ast ast Call14902781
Ref: 480f14902781
Ref: library/ast ast keyword14903930
Ref: 483514903930
Ref: library/ast ast IfExp14904149
Ref: 483614904149
Ref: library/ast ast Attribute14904639
Ref: 483414904639
Ref: library/ast ast NamedExpr14905255
Ref: 483714905255
Node: Subscrição14905931
Ref: library/ast subscripting14906016
Ref: 483914906016
Ref: library/ast ast Subscript14906059
Ref: 483a14906059
Ref: library/ast ast Slice14906962
Ref: 483b14906962
Node: Compreensões14907563
Ref: library/ast comprehensions14907648
Ref: 483c14907648
Ref: library/ast ast ListComp14907694
Ref: 483d14907694
Ref: library/ast ast SetComp14907737
Ref: 483e14907737
Ref: library/ast ast GeneratorExp14907779
Ref: 483f14907779
Ref: library/ast ast DictComp14907826
Ref: 484014907826
Ref: library/ast ast comprehension14909752
Ref: 484114909752
Node: Instruções14912832
Ref: library/ast ast-statements14912945
Ref: 480114912945
Ref: library/ast statements14912945
Ref: 484214912945
Ref: library/ast ast Assign14912988
Ref: 483814912988
Ref: library/ast ast Assign type_comment14913354
Ref: 484314913354
Ref: library/ast ast AnnAssign14914299
Ref: 484414914299
Ref: library/ast ast AugAssign14916562
Ref: 484514916562
Ref: library/ast ast Raise14917289
Ref: 484614917289
Ref: library/ast ast Assert14917844
Ref: 484714917844
Ref: library/ast ast Delete14918252
Ref: 484814918252
Ref: library/ast ast Pass14918772
Ref: 484914918772
Ref: library/ast ast TypeAlias14918954
Ref: 17d414918954
Node: Importações14919686
Ref: library/ast imports14919748
Ref: 484b14919748
Ref: library/ast ast Import14919795
Ref: 484c14919795
Ref: library/ast ast ImportFrom14920222
Ref: 484d14920222
Ref: library/ast ast alias14920964
Ref: 1a0014920964
Node: Fluxo de controle14921485
Ref: library/ast control-flow14921612
Ref: 484e14921612
Ref: library/ast ast If14921790
Ref: 484f14921790
Ref: library/ast ast For14923061
Ref: 485014923061
Ref: library/ast ast For type_comment14923634
Ref: 485114923634
Ref: library/ast ast While14924363
Ref: 485214924363
Ref: library/ast ast Break14925041
Ref: 485314925041
Ref: library/ast ast Continue14925063
Ref: 485414925063
Ref: library/ast ast Try14926070
Ref: 485514926070
Ref: library/ast ast TryStar14927663
Ref: 485714927663
Ref: library/ast ast ExceptHandler14928675
Ref: 485614928675
Ref: library/ast ast With14929835
Ref: 485814929835
Ref: library/ast ast With type_comment14930076
Ref: 485a14930076
Ref: library/ast ast withitem14930215
Ref: 485914930215
Node: Correspondência de padrões14931531
Ref: library/ast pattern-matching14931666
Ref: 485b14931666
Ref: library/ast ast Match14931743
Ref: 485c14931743
Ref: library/ast ast match_case14932065
Ref: 485d14932065
Ref: library/ast ast MatchValue14934080
Ref: 485e14934080
Ref: library/ast ast MatchSingleton14935126
Ref: 485f14935126
Ref: library/ast ast MatchSequence14936028
Ref: 486014936028
Ref: library/ast ast MatchStar14937292
Ref: 486114937292
Ref: library/ast ast MatchMapping14938964
Ref: 486214938964
Ref: library/ast ast MatchClass14941046
Ref: 486314941046
Ref: library/ast ast MatchAs14944214
Ref: 486414944214
Ref: library/ast ast MatchOr14945867
Ref: 486514945867
Node: Anotações de tipos14947186
Ref: library/ast type-annotations14947323
Ref: 486614947323
Ref: library/ast ast TypeIgnore14947384
Ref: 189614947384
Node: Parâmetros de tipo14948672
Ref: library/ast ast-type-params14948814
Ref: 484a14948814
Ref: library/ast type-parameters14948814
Ref: 486714948814
Ref: library/ast ast TypeVar14948963
Ref: 486814948963
Ref: library/ast ast ParamSpec14950186
Ref: 486914950186
Ref: library/ast ast TypeVarTuple14951575
Ref: 486a14951575
Node: Definições de função e classe14952797
Ref: library/ast function-and-class-definitions14952932
Ref: 486b14952932
Ref: library/ast ast FunctionDef14953017
Ref: 17fa14953017
Ref: library/ast ast FunctionDef type_comment14953665
Ref: 486d14953665
Ref: library/ast ast Lambda14953866
Ref: 481214953866
Ref: library/ast ast arguments14954500
Ref: 486c14954500
Ref: library/ast ast arg14955279
Ref: 486e14955279
Ref: library/ast ast arg type_comment14955501
Ref: 486f14955501
Ref: library/ast ast Return14957073
Ref: 487014957073
Ref: library/ast ast Yield14957319
Ref: 481314957319
Ref: library/ast ast YieldFrom14957349
Ref: 481414957349
Ref: library/ast ast Global14958022
Ref: 487114958022
Ref: library/ast ast Nonlocal14958053
Ref: 487214958053
Ref: library/ast ast ClassDef14958709
Ref: 17f814958709
Ref: Definições de função e classe-Footnote-114960459
Node: Async e await14960501
Ref: library/ast async-and-await14960608
Ref: 487314960608
Ref: library/ast ast AsyncFunctionDef14960657
Ref: 17f914960657
Ref: library/ast ast Await14960944
Ref: 487414960944
Ref: library/ast ast AsyncFor14961562
Ref: 487514961562
Ref: library/ast ast AsyncWith14961630
Ref: 487614961630
Node: Auxiliares de ast14962313
Ref: library/ast ast-helpers14962466
Ref: 487714962466
Ref: library/ast ast parse14962674
Ref: 1a814962674
Ref: library/ast ast unparse14966008
Ref: 8eb14966008
Ref: library/ast ast literal_eval14966662
Ref: c3214966662
Ref: library/ast ast get_docstring14968668
Ref: 1bd414968668
Ref: library/ast ast get_source_segment14969121
Ref: 9e014969121
Ref: library/ast ast fix_missing_locations14969655
Ref: 487914969655
Ref: library/ast ast increment_lineno14970147
Ref: 189514970147
Ref: library/ast ast copy_location14970400
Ref: 487a14970400
Ref: library/ast ast iter_fields14970673
Ref: 487b14970673
Ref: library/ast ast iter_child_nodes14970836
Ref: 487c14970836
Ref: library/ast ast walk14971033
Ref: 487d14971033
Ref: library/ast ast NodeVisitor14971325
Ref: a7714971325
Ref: library/ast ast NodeVisitor visit14971700
Ref: 487e14971700
Ref: library/ast ast NodeVisitor generic_visit14971979
Ref: 487f14971979
Ref: library/ast ast NodeVisitor visit_Constant14972347
Ref: a7814972347
Ref: library/ast ast NodeTransformer14972999
Ref: 488014972999
Ref: library/ast ast dump14974970
Ref: 8ea14974970
Ref: Auxiliares de ast-Footnote-114977422
Ref: Auxiliares de ast-Footnote-214977464
Ref: Auxiliares de ast-Footnote-314977506
Node: Sinalizadores do compilador<2>14977548
Ref: library/ast ast-compiler-flags14977712
Ref: 22fc14977712
Ref: library/ast compiler-flags14977712
Ref: 488114977712
Ref: library/ast ast PyCF_ALLOW_TOP_LEVEL_AWAIT14977919
Ref: 488214977919
Ref: library/ast ast PyCF_ONLY_AST14978123
Ref: 47f514978123
Ref: library/ast ast PyCF_OPTIMIZED_AST14978261
Ref: 488314978261
Ref: library/ast ast PyCF_TYPE_COMMENTS14978458
Ref: 487814978458
Ref: Sinalizadores do compilador<2>-Footnote-114978693
Ref: Sinalizadores do compilador<2>-Footnote-214978735
Node: Uso na linha de comando<9>14978777
Ref: library/ast ast-cli14978915
Ref: 488414978915
Ref: library/ast command-line-usage14978915
Ref: 488514978915
Ref: library/ast cmdoption-ast-h14979200
Ref: 488614979200
Ref: library/ast cmdoption-ast-help14979200
Ref: 488714979200
Ref: library/ast cmdoption-ast-m14979264
Ref: 488814979264
Ref: library/ast cmdoption-ast-mode14979286
Ref: 488914979286
Ref: library/ast cmdoption-ast-no-type-comments14979422
Ref: 488a14979422
Ref: library/ast cmdoption-ast-a14979495
Ref: 488b14979495
Ref: library/ast cmdoption-ast-include-attributes14979495
Ref: 488c14979495
Ref: library/ast cmdoption-ast-i14979607
Ref: 488d14979607
Ref: library/ast cmdoption-ast-indent14979631
Ref: 488e14979631
Ref: Uso na linha de comando<9>-Footnote-114980870
Ref: Uso na linha de comando<9>-Footnote-214980918
Ref: Uso na linha de comando<9>-Footnote-314980985
Ref: Uso na linha de comando<9>-Footnote-414981059
Ref: Uso na linha de comando<9>-Footnote-514981098
Node: symtable — Acesso a tabela de símbolos do compilador14981135
Ref: library/symtable doc14981373
Ref: 488f14981373
Ref: library/symtable module-symtable14981373
Ref: d814981373
Ref: library/symtable symtable-access-to-the-compiler-s-symbol-tables14981373
Ref: 489014981373
Ref: library/symtable translation-repo14981373
Ref: 489114981373
Ref: symtable — Acesso a tabela de símbolos do compilador-Footnote-114982018
Node: Generating Symbol Tables14982086
Ref: library/symtable generating-symbol-tables14982234
Ref: 489214982234
Ref: library/symtable symtable symtable14982303
Ref: 1b6414982303
Node: Examining Symbol Tables14982583
Ref: library/symtable examining-symbol-tables14982767
Ref: 489414982767
Ref: library/symtable symtable SymbolTableType14982834
Ref: 16f814982834
Ref: library/symtable symtable SymbolTableType MODULE14982956
Ref: 489514982956
Ref: library/symtable symtable SymbolTableType FUNCTION14983044
Ref: 489614983044
Ref: library/symtable symtable SymbolTableType CLASS14983138
Ref: 489714983138
Ref: library/symtable symtable SymbolTableType ANNOTATION14983316
Ref: 489814983316
Ref: library/symtable symtable SymbolTableType TYPE_ALIAS14983459
Ref: 489914983459
Ref: library/symtable symtable SymbolTableType TYPE_PARAMETERS14983577
Ref: 489a14983577
Ref: library/symtable symtable SymbolTableType TYPE_VARIABLE14983744
Ref: 489b14983744
Ref: library/symtable symtable SymbolTable14984117
Ref: 489314984117
Ref: library/symtable symtable SymbolTable get_type14984220
Ref: 16f914984220
Ref: library/symtable symtable SymbolTable get_id14984889
Ref: 489c14984889
Ref: library/symtable symtable SymbolTable get_name14984962
Ref: 489d14984962
Ref: library/symtable symtable SymbolTable get_lineno14985609
Ref: 489e14985609
Ref: library/symtable symtable SymbolTable is_optimized14985735
Ref: 489f14985735
Ref: library/symtable symtable SymbolTable is_nested14985845
Ref: 48a014985845
Ref: library/symtable symtable SymbolTable has_children14985950
Ref: 48a114985950
Ref: library/symtable symtable SymbolTable get_identifiers14986125
Ref: 48a314986125
Ref: library/symtable symtable SymbolTable lookup14986303
Ref: 48a414986303
Ref: library/symtable symtable SymbolTable get_symbols14986427
Ref: 48a514986427
Ref: library/symtable symtable SymbolTable get_children14986553
Ref: 48a214986553
Ref: library/symtable symtable Function14986642
Ref: 48a614986642
Ref: library/symtable symtable Function get_parameters14986773
Ref: 48a714986773
Ref: library/symtable symtable Function get_locals14986895
Ref: 48a814986895
Ref: library/symtable symtable Function get_globals14986999
Ref: 48a914986999
Ref: library/symtable symtable Function get_nonlocals14987105
Ref: 48aa14987105
Ref: library/symtable symtable Function get_frees14987245
Ref: 48ab14987245
Ref: library/symtable symtable Class14987389
Ref: 48ac14987389
Ref: library/symtable symtable Class get_methods14987503
Ref: 2e514987503
Ref: library/symtable symtable Symbol14988740
Ref: 17c114988740
Ref: library/symtable symtable Symbol get_name14988897
Ref: 48ad14988897
Ref: library/symtable symtable Symbol is_referenced14988967
Ref: 48ae14988967
Ref: library/symtable symtable Symbol is_imported14989068
Ref: 48af14989068
Ref: library/symtable symtable Symbol is_parameter14989192
Ref: 48b014989192
Ref: library/symtable symtable Symbol is_global14989286
Ref: 48b114989286
Ref: library/symtable symtable Symbol is_nonlocal14989372
Ref: 1ba314989372
Ref: library/symtable symtable Symbol is_declared_global14989462
Ref: 136a14989462
Ref: library/symtable symtable Symbol is_local14989600
Ref: 48b214989600
Ref: library/symtable symtable Symbol is_annotated14989697
Ref: 48b314989697
Ref: library/symtable symtable Symbol is_free14989827
Ref: 48b414989827
Ref: library/symtable symtable Symbol is_assigned14989959
Ref: 48b514989959
Ref: library/symtable symtable Symbol is_namespace14990065
Ref: 48b614990065
Ref: library/symtable symtable Symbol get_namespaces14990708
Ref: 48b714990708
Ref: library/symtable symtable Symbol get_namespace14990804
Ref: 48b814990804
Node: Uso na linha de comando<10>14991005
Ref: library/symtable command-line-usage14991156
Ref: 48b914991156
Ref: library/symtable symtable-cli14991156
Ref: 48ba14991156
Node: token — Constantes usadas com árvores de análises do Python14991527
Ref: library/token doc14991779
Ref: 48bb14991779
Ref: library/token module-token14991779
Ref: fa14991779
Ref: library/token token-constants-used-with-python-parse-trees14991779
Ref: 48bc14991779
Ref: library/token translation-repo14991779
Ref: 48bd14991779
Ref: library/token token tok_name14992841
Ref: 48c214992841
Ref: library/token token ISTERMINAL14993085
Ref: 48c314993085
Ref: library/token token ISNONTERMINAL14993180
Ref: 48c414993180
Ref: library/token token ISEOF14993283
Ref: 48c514993283
Ref: library/token token NAME14993423
Ref: 48c014993423
Ref: library/token token NUMBER14993615
Ref: 48c614993615
Ref: library/token token STRING14993705
Ref: 48c714993705
Ref: library/token token OP14994054
Ref: 48bf14994054
Ref: library/token token COMMENT14994338
Ref: 48c914994338
Ref: library/token token NEWLINE14994478
Ref: 48ca14994478
Ref: library/token token NL14994575
Ref: 48cb14994575
Ref: library/token token INDENT14994844
Ref: 1e9514994844
Ref: library/token token DEDENT14995003
Ref: 48cc14995003
Ref: library/token token FSTRING_START14995158
Ref: 48cd14995158
Ref: library/token token FSTRING_MIDDLE14995382
Ref: 48ce14995382
Ref: library/token token FSTRING_END14995806
Ref: 48d314995806
Ref: library/token token ENDMARKER14995980
Ref: 48d414995980
Ref: library/token token ENCODING14996057
Ref: 48d514996057
Ref: library/token token TYPE_IGNORE14996566
Ref: 48d614996566
Ref: library/token token TYPE_COMMENT14996831
Ref: 48d714996831
Ref: library/token token SOFT_KEYWORD14997080
Ref: 48c114997080
Ref: library/token token ERRORTOKEN14997382
Ref: 48d914997382
Ref: library/token token-operators-delimiters14997729
Ref: 48c814997729
Ref: library/token token LPAR14998283
Ref: 48da14998283
Ref: library/token token RPAR14998460
Ref: 48db14998460
Ref: library/token token LSQB14998637
Ref: 48dc14998637
Ref: library/token token RSQB14998814
Ref: 48dd14998814
Ref: library/token token COLON14998992
Ref: 48d214998992
Ref: library/token token COMMA14999169
Ref: 48de14999169
Ref: library/token token SEMI14999345
Ref: 48df14999345
Ref: library/token token PLUS14999522
Ref: 48be14999522
Ref: library/token token MINUS14999700
Ref: 48e014999700
Ref: library/token token STAR14999876
Ref: 48e114999876
Ref: library/token token SLASH15000054
Ref: 48e215000054
Ref: library/token token VBAR15000230
Ref: 48e315000230
Ref: library/token token AMPER15000408
Ref: 48e415000408
Ref: library/token token LESS15000584
Ref: 48e515000584
Ref: library/token token GREATER15000764
Ref: 48e615000764
Ref: library/token token EQUAL15000939
Ref: 48e715000939
Ref: library/token token DOT15001114
Ref: 48e815001114
Ref: library/token token PERCENT15001295
Ref: 48e915001295
Ref: library/token token LBRACE15001471
Ref: 48cf15001471
Ref: library/token token RBRACE15001648
Ref: 48d015001648
Ref: library/token token EQEQUAL15001826
Ref: 48ea15001826
Ref: library/token token NOTEQUAL15002005
Ref: 48eb15002005
Ref: library/token token LESSEQUAL15002184
Ref: 48ec15002184
Ref: library/token token GREATEREQUAL15002365
Ref: 48ed15002365
Ref: library/token token TILDE15002536
Ref: 48ee15002536
Ref: library/token token CIRCUMFLEX15002718
Ref: 48ef15002718
Ref: library/token token LEFTSHIFT15002894
Ref: 48f015002894
Ref: library/token token RIGHTSHIFT15003073
Ref: 48f115003073
Ref: library/token token DOUBLESTAR15003251
Ref: 48f215003251
Ref: library/token token PLUSEQUAL15003428
Ref: 48f315003428
Ref: library/token token MINEQUAL15003605
Ref: 48f415003605
Ref: library/token token STAREQUAL15003784
Ref: 48f515003784
Ref: library/token token SLASHEQUAL15003963
Ref: 48f615003963
Ref: library/token token PERCENTEQUAL15004143
Ref: 48f715004143
Ref: library/token token AMPEREQUAL15004319
Ref: 48f815004319
Ref: library/token token VBAREQUAL15004496
Ref: 48f915004496
Ref: library/token token CIRCUMFLEXEQUAL15004680
Ref: 48fa15004680
Ref: library/token token LEFTSHIFTEQUAL15004857
Ref: 48fb15004857
Ref: library/token token RIGHTSHIFTEQUAL15005037
Ref: 48fc15005037
Ref: library/token token DOUBLESTAREQUAL15005216
Ref: 48fd15005216
Ref: library/token token DOUBLESLASH15005391
Ref: 48fe15005391
Ref: library/token token DOUBLESLASHEQUAL15005574
Ref: 48ff15005574
Ref: library/token token AT15005739
Ref: 490015005739
Ref: library/token token ATEQUAL15005921
Ref: 490115005921
Ref: library/token token RARROW15006098
Ref: 490215006098
Ref: library/token token ELLIPSIS15006278
Ref: 490315006278
Ref: library/token token COLONEQUAL15006459
Ref: 490415006459
Ref: library/token token EXCLAMATION15006638
Ref: 48d115006638
Ref: library/token token N_TOKENS15006787
Ref: 490515006787
Ref: library/token token EXACT_TOKEN_TYPES15006872
Ref: 167b15006872
Ref: token — Constantes usadas com árvores de análises do Python-Footnote-115007899
Node: keyword — Testando palavras reservadas do Python15007964
Ref: library/keyword doc15008211
Ref: 490615008211
Ref: library/keyword keyword-testing-for-python-keywords15008211
Ref: 490715008211
Ref: library/keyword module-keyword15008211
Ref: 8415008211
Ref: library/keyword translation-repo15008211
Ref: 490815008211
Ref: library/keyword keyword iskeyword15008588
Ref: 235c15008588
Ref: library/keyword keyword kwlist15008712
Ref: 490915008712
Ref: library/keyword keyword issoftkeyword15009031
Ref: 48d815009031
Ref: library/keyword keyword softkwlist15009202
Ref: 490a15009202
Ref: keyword — Testando palavras reservadas do Python-Footnote-115009603
Node: tokenize — Tokenizador para código-fonte Python15009670
Ref: library/tokenize doc15009902
Ref: 490b15009902
Ref: library/tokenize module-tokenize15009902
Ref: fb15009902
Ref: library/tokenize tokenize-tokenizer-for-python-source15009902
Ref: 490c15009902
Ref: library/tokenize translation-repo15009902
Ref: 490d15009902
Ref: tokenize — Tokenizador para código-fonte Python-Footnote-115011289
Node: Tokenizando entradas15011357
Ref: library/tokenize tokenizing-input15011500
Ref: 490e15011500
Ref: library/tokenize tokenize tokenize15011619
Ref: 4d915011619
Ref: library/tokenize tokenize generate_tokens15013165
Ref: 4da15013165
Ref: library/tokenize tokenize untokenize15013977
Ref: 166b15013977
Ref: library/tokenize tokenize detect_encoding15015006
Ref: 2a1915015006
Ref: library/tokenize tokenize open15016136
Ref: 2a1815016136
Ref: library/tokenize tokenize TokenError15016328
Ref: 54215016328
Ref: Tokenizando entradas-Footnote-115016658
Ref: Tokenizando entradas-Footnote-215016700
Node: Uso na linha de comando<11>15016742
Ref: library/tokenize command-line-usage15016906
Ref: 490f15016906
Ref: library/tokenize tokenize-cli15016906
Ref: 491015016906
Ref: library/tokenize cmdoption-tokenize-h15017209
Ref: 491115017209
Ref: library/tokenize cmdoption-tokenize-help15017209
Ref: 491215017209
Ref: library/tokenize cmdoption-tokenize-e15017275
Ref: 491315017275
Ref: library/tokenize cmdoption-tokenize-exact15017275
Ref: 491415017275
Node: Exemplos<35>15017499
Ref: library/tokenize examples15017634
Ref: 491515017634
Node: tabnanny — Detecção de indentação ambígua15022159
Ref: library/tabnanny doc15022393
Ref: 491615022393
Ref: library/tabnanny module-tabnanny15022393
Ref: dd15022393
Ref: library/tabnanny tabnanny-detection-of-ambiguous-indentation15022393
Ref: 491715022393
Ref: library/tabnanny translation-repo15022393
Ref: 491815022393
Ref: library/tabnanny tabnanny check15022946
Ref: 491915022946
Ref: library/tabnanny tabnanny verbose15023453
Ref: 491a15023453
Ref: library/tabnanny tabnanny filename_only15023638
Ref: 491b15023638
Ref: library/tabnanny tabnanny NannyNag15023888
Ref: 491c15023888
Ref: library/tabnanny tabnanny process_tokens15024056
Ref: 491d15024056
Ref: tabnanny — Detecção de indentação ambígua-Footnote-115024367
Node: pyclbr — Suporte a navegador de módulos do Python15024435
Ref: library/pyclbr doc15024666
Ref: 491e15024666
Ref: library/pyclbr module-pyclbr15024666
Ref: b415024666
Ref: library/pyclbr pyclbr-python-module-browser-support15024666
Ref: 491f15024666
Ref: library/pyclbr translation-repo15024666
Ref: 492015024666
Ref: library/pyclbr pyclbr readmodule15025440
Ref: 82e15025440
Ref: library/pyclbr pyclbr readmodule_ex15026126
Ref: 82f15026126
Ref: pyclbr — Suporte a navegador de módulos do Python-Footnote-115027292
Node: Objetos Function15027358
Ref: library/pyclbr function-objects15027489
Ref: 492115027489
Ref: library/pyclbr pyclbr-function-objects15027489
Ref: 492215027489
Ref: library/pyclbr pyclbr Function15027542
Ref: 492315027542
Ref: library/pyclbr pyclbr Function file15027706
Ref: 492415027706
Ref: library/pyclbr pyclbr Function module15027793
Ref: 492515027793
Ref: library/pyclbr pyclbr Function name15027881
Ref: 492615027881
Ref: library/pyclbr pyclbr Function lineno15027937
Ref: 492715027937
Ref: library/pyclbr pyclbr Function parent15028039
Ref: 492815028039
Ref: library/pyclbr pyclbr Function children15028206
Ref: 492915028206
Ref: library/pyclbr pyclbr Function is_async15028391
Ref: 492a15028391
Node: Objetos classe<2>15028588
Ref: library/pyclbr class-objects15028719
Ref: 492b15028719
Ref: library/pyclbr pyclbr-class-objects15028719
Ref: 492c15028719
Ref: library/pyclbr pyclbr Class15028768
Ref: 492d15028768
Ref: library/pyclbr pyclbr Class file15028967
Ref: 492e15028967
Ref: library/pyclbr pyclbr Class module15029052
Ref: 492f15029052
Ref: library/pyclbr pyclbr Class name15029138
Ref: 493015029138
Ref: library/pyclbr pyclbr Class lineno15029192
Ref: 493115029192
Ref: library/pyclbr pyclbr Class parent15029294
Ref: 493215029294
Ref: library/pyclbr pyclbr Class children15029457
Ref: 493315029457
Ref: library/pyclbr pyclbr Class super15029630
Ref: 493415029630
Ref: library/pyclbr pyclbr Class methods15030009
Ref: 493515030009
Node: py_compile — Compila arquivos fonte do Python15030277
Ref: library/py_compile doc15030519
Ref: 493615030519
Ref: library/py_compile module-py_compile15030519
Ref: b315030519
Ref: library/py_compile py-compile-compile-python-source-files15030519
Ref: 493715030519
Ref: library/py_compile translation-repo15030519
Ref: 493815030519
Ref: library/py_compile py_compile PyCompileError15031203
Ref: 493915031203
Ref: library/py_compile py_compile compile15031328
Ref: a2f15031328
Ref: library/py_compile py_compile PycInvalidationMode15035559
Ref: 493a15035559
Ref: library/py_compile py_compile PycInvalidationMode TIMESTAMP15036055
Ref: 493c15036055
Ref: library/py_compile py_compile PycInvalidationMode CHECKED_HASH15036360
Ref: 493b15036360
Ref: library/py_compile py_compile PycInvalidationMode UNCHECKED_HASH15036633
Ref: 493d15036633
Ref: py_compile — Compila arquivos fonte do Python-Footnote-115037226
Ref: py_compile — Compila arquivos fonte do Python-Footnote-215037296
Ref: py_compile — Compila arquivos fonte do Python-Footnote-315037338
Ref: py_compile — Compila arquivos fonte do Python-Footnote-415037380
Ref: py_compile — Compila arquivos fonte do Python-Footnote-515037422
Node: Interface de linha de comando<15>15037464
Ref: library/py_compile command-line-interface15037581
Ref: 493e15037581
Ref: library/py_compile py-compile-cli15037581
Ref: 493f15037581
Ref: library/py_compile cmdoption-python-m-py_compile-arg-file15038098
Ref: 494015038098
Ref: library/py_compile cmdoption-python-m-py_compile15038129
Ref: 494115038129
Ref: library/py_compile cmdoption-python-m-py_compile-q15038297
Ref: 494215038297
Ref: library/py_compile cmdoption-python-m-py_compile-quiet15038297
Ref: 494315038297
Node: compileall — Compilar bibliotecas do Python para bytecode15038631
Ref: library/compileall doc15038863
Ref: 494415038863
Ref: library/compileall compileall-byte-compile-python-libraries15038863
Ref: 494515038863
Ref: library/compileall module-compileall15038863
Ref: 2015038863
Ref: library/compileall translation-repo15038863
Ref: 494615038863
Ref: compileall — Compilar bibliotecas do Python para bytecode-Footnote-115039847
Node: Uso na linha de comando<12>15039917
Ref: library/compileall command-line-use15040068
Ref: 494715040068
Ref: library/compileall compileall-cli15040068
Ref: 494815040068
Ref: library/compileall cmdoption-compileall-arg-directory15040247
Ref: 494915040247
Ref: library/compileall cmdoption-compileall-arg-file15040273
Ref: 494a15040273
Ref: library/compileall cmdoption-compileall-l15040564
Ref: 494b15040564
Ref: library/compileall cmdoption-compileall-f15040743
Ref: 494c15040743
Ref: library/compileall cmdoption-compileall-q15040853
Ref: 494d15040853
Ref: library/compileall cmdoption-compileall-d15041060
Ref: 494e15041060
Ref: library/compileall cmdoption-compileall-s15041444
Ref: 494f15041444
Ref: library/compileall cmdoption-compileall-p15041678
Ref: 495015041678
Ref: library/compileall cmdoption-compileall-x15041921
Ref: 495115041921
Ref: library/compileall cmdoption-compileall-i15042160
Ref: 495215042160
Ref: library/compileall cmdoption-compileall-b15042373
Ref: 495315042373
Ref: library/compileall cmdoption-compileall-r15042709
Ref: 495415042709
Ref: library/compileall cmdoption-compileall-j15042988
Ref: 495515042988
Ref: library/compileall cmdoption-compileall-invalidation-mode15043185
Ref: 495615043185
Ref: library/compileall cmdoption-compileall-o15044136
Ref: 495715044136
Ref: library/compileall cmdoption-compileall-e15044338
Ref: 495815044338
Ref: library/compileall cmdoption-compileall-hardlink-dupes15044444
Ref: 495915044444
Ref: Uso na linha de comando<12>-Footnote-115045843
Node: Funções públicas15045885
Ref: library/compileall public-functions15046036
Ref: 495a15046036
Ref: library/compileall compileall compile_dir15046092
Ref: b3815046092
Ref: library/compileall compileall compile_file15050625
Ref: e0b15050625
Ref: library/compileall compileall compile_path15053908
Ref: e0c15053908
Ref: Funções públicas-Footnote-115055816
Ref: Funções públicas-Footnote-215055858
Node: dis — Disassembler de bytecode do Python15055900
Ref: library/dis doc15056140
Ref: 495b15056140
Ref: library/dis dis-disassembler-for-python-bytecode15056140
Ref: 495c15056140
Ref: library/dis module-dis15056140
Ref: 3815056140
Ref: library/dis translation-repo15056140
Ref: 495d15056140
Ref: dis — Disassembler de bytecode do Python-Footnote-115059032
Node: Interface de linha de comando<16>15059095
Ref: library/dis command-line-interface15059236
Ref: 495e15059236
Ref: library/dis dis-cli15059236
Ref: 495f15059236
Ref: library/dis cmdoption-dis-h15059478
Ref: 496015059478
Ref: library/dis cmdoption-dis-help15059478
Ref: 496115059478
Ref: library/dis cmdoption-dis-C15059535
Ref: 496215059535
Ref: library/dis cmdoption-dis-show-caches15059535
Ref: 496315059535
Ref: library/dis cmdoption-dis-O15059629
Ref: 1d815059629
Ref: library/dis cmdoption-dis-show-offsets15059629
Ref: 496415059629
Node: Análise de bytecode15059920
Ref: library/dis bytecode-analysis15060091
Ref: 496515060091
Ref: library/dis dis Bytecode15060359
Ref: f6115060359
Ref: library/dis dis Bytecode from_traceback15062035
Ref: f6315062035
Ref: library/dis dis Bytecode codeobj15062306
Ref: 496615062306
Ref: library/dis dis Bytecode first_line15062372
Ref: 496715062372
Ref: library/dis dis Bytecode dis15062495
Ref: f6215062495
Ref: library/dis dis Bytecode info15062720
Ref: 496815062720
Node: Funções de análise15063303
Ref: library/dis analysis-functions15063475
Ref: 496915063475
Ref: library/dis dis code_info15063800
Ref: 127a15063800
Ref: library/dis dis show_code15064440
Ref: f5e15064440
Ref: library/dis dis dis15064954
Ref: b4615064954
Ref: library/dis dis distb15067035
Ref: f5f15067035
Ref: library/dis dis disassemble15067706
Ref: f6015067706
Ref: library/dis dis get_instructions15069039
Ref: 1d915069039
Ref: library/dis dis findlinestarts15070259
Ref: 496a15070259
Ref: library/dis dis findlabels15071017
Ref: 496b15071017
Ref: library/dis dis stack_effect15071190
Ref: f6415071190
Ref: Funções de análise-Footnote-115072188
Node: Instruções em bytecode do Python15072230
Ref: library/dis bytecodes15072400
Ref: 5b215072400
Ref: library/dis python-bytecode-instructions15072400
Ref: 496c15072400
Ref: library/dis dis Instruction15072655
Ref: 1da15072655
Ref: library/dis dis Instruction opcode15072729
Ref: 496d15072729
Ref: library/dis dis Instruction opname15072935
Ref: 496f15072935
Ref: library/dis dis Instruction baseopcode15073013
Ref: 497015073013
Ref: library/dis dis Instruction baseopname15073186
Ref: 497115073186
Ref: library/dis dis Instruction arg15073377
Ref: 497315073377
Ref: library/dis dis Instruction oparg15073496
Ref: 497415073496
Ref: library/dis dis Instruction argval15073559
Ref: 497515073559
Ref: library/dis dis Instruction argrepr15073672
Ref: 497615073672
Ref: library/dis dis Instruction offset15073824
Ref: 497715073824
Ref: library/dis dis Instruction start_offset15073925
Ref: 497815073925
Ref: library/dis dis Instruction cache_offset15074173
Ref: 497915074173
Ref: library/dis dis Instruction end_offset15074278
Ref: 497a15074278
Ref: library/dis dis Instruction starts_line15074377
Ref: 497b15074377
Ref: library/dis dis Instruction line_number15074488
Ref: 497c15074488
Ref: library/dis dis Instruction is_jump_target15074615
Ref: 497d15074615
Ref: library/dis dis Instruction jump_target15074725
Ref: 497e15074725
Ref: library/dis dis Instruction positions15074880
Ref: 497f15074880
Ref: library/dis dis Instruction cache_info15075028
Ref: 498015075028
Ref: library/dis dis Positions15075757
Ref: 46f115075757
Ref: library/dis dis Positions lineno15075876
Ref: 498115075876
Ref: library/dis dis Positions end_lineno15075899
Ref: 498215075899
Ref: library/dis dis Positions col_offset15075926
Ref: 498315075926
Ref: library/dis dis Positions end_col_offset15075953
Ref: 498415075953
Ref: library/dis opcode-NOP15076329
Ref: 498515076329
Ref: library/dis opcode-POP_TOP15076498
Ref: 498615076498
Ref: library/dis opcode-END_FOR15076580
Ref: 498715076580
Ref: library/dis opcode-END_SEND15076770
Ref: 498815076770
Ref: library/dis opcode-COPY15076916
Ref: 70915076916
Ref: library/dis opcode-SWAP15077123
Ref: 70a15077123
Ref: library/dis opcode-CACHE15077296
Ref: 6f915077296
Ref: library/dis opcode-UNARY_NEGATIVE15078208
Ref: 498915078208
Ref: library/dis opcode-UNARY_NOT15078283
Ref: 17e315078283
Ref: library/dis opcode-UNARY_INVERT15078479
Ref: 498a15078479
Ref: library/dis opcode-GET_ITER15078552
Ref: 498b15078552
Ref: library/dis opcode-GET_YIELD_FROM_ITER15078626
Ref: 498c15078626
Ref: library/dis opcode-TO_BOOL15078877
Ref: 17e015078877
Ref: library/dis opcode-BINARY_OP15079430
Ref: 70615079430
Ref: library/dis opcode-BINARY_SUBSCR15079667
Ref: 183515079667
Ref: library/dis opcode-STORE_SUBSCR15079814
Ref: 193615079814
Ref: library/dis opcode-DELETE_SUBSCR15079984
Ref: 498d15079984
Ref: library/dis opcode-BINARY_SLICE15080121
Ref: 4df15080121
Ref: library/dis opcode-STORE_SLICE15080337
Ref: 4e015080337
Ref: library/dis opcode-GET_AWAITABLE15080603
Ref: 195115080603
Ref: library/dis opcode-GET_AITER15081246
Ref: 498e15081246
Ref: library/dis opcode-GET_ANEXT15081470
Ref: 498f15081470
Ref: library/dis opcode-END_ASYNC_FOR15081674
Ref: ab915081674
Ref: library/dis opcode-CLEANUP_THROW15082181
Ref: 4e315082181
Ref: library/dis opcode-BEFORE_ASYNC_WITH15082575
Ref: 499015082575
Ref: library/dis opcode-SET_ADD15082880
Ref: 499115082880
Ref: library/dis opcode-LIST_APPEND15083045
Ref: 499215083045
Ref: library/dis opcode-MAP_ADD15083214
Ref: abb15083214
Ref: library/dis opcode-RETURN_VALUE15083854
Ref: 18a815083854
Ref: library/dis opcode-RETURN_CONST15083939
Ref: 4e915083939
Ref: library/dis opcode-YIELD_VALUE15084075
Ref: 31415084075
Ref: library/dis opcode-SETUP_ANNOTATIONS15084534
Ref: d7815084534
Ref: library/dis opcode-POP_EXCEPT15084877
Ref: 499315084877
Ref: library/dis opcode-RERAISE15085123
Ref: 499415085123
Ref: library/dis opcode-PUSH_EXC_INFO15085506
Ref: 70315085506
Ref: library/dis opcode-CHECK_EXC_MATCH15085766
Ref: 70b15085766
Ref: library/dis opcode-CHECK_EG_MATCH15086079
Ref: 70215086079
Ref: library/dis opcode-WITH_EXCEPT_START15086658
Ref: 499515086658
Ref: library/dis opcode-LOAD_ASSERTION_ERROR15087196
Ref: 96e15087196
Ref: library/dis opcode-LOAD_BUILD_CLASS15087367
Ref: 499615087367
Ref: library/dis opcode-BEFORE_WITH15087536
Ref: 70d15087536
Ref: library/dis opcode-GET_LEN15088002
Ref: 499715088002
Ref: library/dis opcode-MATCH_MAPPING15088221
Ref: 499815088221
Ref: library/dis opcode-MATCH_SEQUENCE15088574
Ref: 499915088574
Ref: library/dis opcode-MATCH_KEYS15089028
Ref: 71315089028
Ref: library/dis opcode-STORE_NAME15089573
Ref: 499a15089573
Ref: library/dis opcode-DELETE_NAME15089854
Ref: 499c15089854
Ref: library/dis opcode-UNPACK_SEQUENCE15090018
Ref: 195315090018
Ref: library/dis opcode-UNPACK_EX15090327
Ref: 499d15090327
Ref: library/dis opcode-STORE_ATTR15091337
Ref: 195215091337
Ref: library/dis opcode-DELETE_ATTR15091576
Ref: 499e15091576
Ref: library/dis opcode-STORE_GLOBAL15091782
Ref: 499b15091782
Ref: library/dis opcode-DELETE_GLOBAL15091912
Ref: 499f15091912
Ref: library/dis opcode-LOAD_CONST15092021
Ref: 49a015092021
Ref: library/dis opcode-LOAD_NAME15092107
Ref: 49a115092107
Ref: library/dis opcode-LOAD_LOCALS15092284
Ref: 4e815092284
Ref: library/dis opcode-LOAD_FROM_DICT_OR_GLOBALS15092564
Ref: 4e715092564
Ref: library/dis opcode-BUILD_TUPLE15093004
Ref: 49a215093004
Ref: library/dis opcode-BUILD_LIST15093330
Ref: 49a315093330
Ref: library/dis opcode-BUILD_SET15093422
Ref: 49a415093422
Ref: library/dis opcode-BUILD_MAP15093512
Ref: 17d515093512
Ref: library/dis opcode-BUILD_CONST_KEY_MAP15093894
Ref: d7515093894
Ref: library/dis opcode-BUILD_STRING15094221
Ref: d7415094221
Ref: library/dis opcode-LIST_EXTEND15094391
Ref: 49a515094391
Ref: library/dis opcode-SET_UPDATE15094565
Ref: 49a615094565
Ref: library/dis opcode-DICT_UPDATE15094736
Ref: 49a715094736
Ref: library/dis opcode-DICT_MERGE15094910
Ref: 49a815094910
Ref: library/dis opcode-LOAD_ATTR15095056
Ref: 4de15095056
Ref: library/dis opcode-LOAD_SUPER_ATTR15095994
Ref: 4dc15095994
Ref: library/dis opcode-COMPARE_OP15097070
Ref: 97015097070
Ref: library/dis opcode-IS_OP15097450
Ref: 49a915097450
Ref: library/dis opcode-CONTAINS_OP15097585
Ref: 49aa15097585
Ref: library/dis opcode-IMPORT_NAME15097726
Ref: 49ab15097726
Ref: library/dis opcode-IMPORT_FROM15098146
Ref: 49ac15098146
Ref: library/dis opcode-JUMP_FORWARD15098395
Ref: 16cb15098395
Ref: library/dis opcode-JUMP_BACKWARD15098475
Ref: 70c15098475
Ref: library/dis opcode-JUMP_BACKWARD_NO_INTERRUPT15098614
Ref: 6ff15098614
Ref: library/dis opcode-POP_JUMP_IF_TRUE15098779
Ref: 17e115098779
Ref: library/dis opcode-POP_JUMP_IF_FALSE15099345
Ref: 17e215099345
Ref: library/dis opcode-POP_JUMP_IF_NOT_NONE15099914
Ref: 190b15099914
Ref: library/dis opcode-POP_JUMP_IF_NONE15100183
Ref: 190a15100183
Ref: library/dis opcode-FOR_ITER15100444
Ref: 184a15100444
Ref: library/dis opcode-LOAD_GLOBAL15100858
Ref: 17dc15100858
Ref: library/dis opcode-LOAD_FAST15101105
Ref: 49ad15101105
Ref: library/dis opcode-LOAD_FAST_LOAD_FAST15101415
Ref: 49ae15101415
Ref: library/dis opcode-LOAD_FAST_CHECK15101611
Ref: 4e515101611
Ref: library/dis opcode-LOAD_FAST_AND_CLEAR15101865
Ref: 4e415101865
Ref: library/dis opcode-STORE_FAST15102168
Ref: 17e515102168
Ref: library/dis opcode-STORE_FAST_STORE_FAST15102276
Ref: 49af15102276
Ref: library/dis opcode-STORE_FAST_LOAD_FAST15102487
Ref: 49b015102487
Ref: library/dis opcode-DELETE_FAST15102740
Ref: 49b115102740
Ref: library/dis opcode-MAKE_CELL15102823
Ref: 70015102823
Ref: library/dis opcode-LOAD_DEREF15103002
Ref: 49b215103002
Ref: library/dis opcode-LOAD_FROM_DICT_OR_DEREF15103288
Ref: 4e615103288
Ref: library/dis opcode-STORE_DEREF15103824
Ref: 49b315103824
Ref: library/dis opcode-DELETE_DEREF15104070
Ref: 49b415104070
Ref: library/dis opcode-COPY_FREE_VARS15104369
Ref: 6fe15104369
Ref: library/dis opcode-RAISE_VARARGS15104624
Ref: 49b515104624
Ref: library/dis opcode-CALL15105093
Ref: 70715105093
Ref: library/dis opcode-CALL_KW15105872
Ref: 17d615105872
Ref: library/dis opcode-CALL_FUNCTION_EX15106709
Ref: d7715106709
Ref: library/dis opcode-PUSH_NULL15107396
Ref: 70815107396
Ref: library/dis opcode-MAKE_FUNCTION15107605
Ref: d7615107605
Ref: library/dis opcode-SET_FUNCTION_ATTRIBUTE15108085
Ref: 49b615108085
Ref: library/dis opcode-BUILD_SLICE15108805
Ref: 49b715108805
Ref: library/dis opcode-EXTENDED_ARG15109274
Ref: 18a615109274
Ref: library/dis opcode-CONVERT_VALUE15109611
Ref: 49b815109611
Ref: library/dis opcode-FORMAT_SIMPLE15110092
Ref: 49b915110092
Ref: library/dis opcode-FORMAT_WITH_SPEC15110363
Ref: 49ba15110363
Ref: library/dis opcode-MATCH_CLASS15110685
Ref: 71215110685
Ref: library/dis opcode-RESUME15111429
Ref: 31515111429
Ref: library/dis opcode-RETURN_GENERATOR15112184
Ref: 6fc15112184
Ref: library/dis opcode-SEND15112483
Ref: 6fd15112483
Ref: library/dis opcode-HAVE_ARGUMENT15112855
Ref: 48915112855
Ref: library/dis opcode-CALL_INTRINSIC_115113723
Ref: 4e115113723
Ref: library/dis opcode-CALL_INTRINSIC_215117007
Ref: 4e215117007
Ref: library/dis opcode-SETUP_FINALLY15119055
Ref: 49bb15119055
Ref: library/dis opcode-SETUP_CLEANUP15119319
Ref: 49bc15119319
Ref: library/dis opcode-SETUP_WITH15119724
Ref: 49bd15119724
Ref: library/dis opcode-POP_BLOCK15120156
Ref: 49be15120156
Ref: library/dis opcode-JUMP15120309
Ref: 49bf15120309
Ref: library/dis opcode-JUMP_NO_INTERRUPT15120327
Ref: 193015120327
Ref: library/dis opcode-LOAD_CLOSURE15120494
Ref: 17df15120494
Ref: library/dis opcode-LOAD_METHOD15120790
Ref: c3915120790
Node: Opcode collections15120924
Ref: library/dis id115121064
Ref: 49c015121064
Ref: library/dis opcode-collections15121064
Ref: 496e15121064
Ref: library/dis dis opname15121419
Ref: 497215121419
Ref: library/dis dis opmap15121506
Ref: 49c115121506
Ref: library/dis dis cmp_op15121582
Ref: 49c215121582
Ref: library/dis dis hasarg15121651
Ref: 29e15121651
Ref: library/dis dis hasconst15121760
Ref: 49c315121760
Ref: library/dis dis hasfree15121836
Ref: 49c415121836
Ref: library/dis dis hasname15122184
Ref: 49c515122184
Ref: library/dis dis hasjump15122269
Ref: 49c615122269
Ref: library/dis dis haslocal15122409
Ref: 49c715122409
Ref: library/dis dis hascompare15122491
Ref: 49c815122491
Ref: library/dis dis hasexc15122568
Ref: 48a15122568
Ref: library/dis dis hasjrel15122683
Ref: 49c915122683
Ref: library/dis dis hasjabs15122869
Ref: 49ca15122869
Node: pickletools — Ferramentas para desenvolvedores pickle15123050
Ref: library/pickletools doc15123222
Ref: 49cb15123222
Ref: library/pickletools module-pickletools15123222
Ref: a715123222
Ref: library/pickletools pickletools-tools-for-pickle-developers15123222
Ref: 49cc15123222
Ref: library/pickletools translation-repo15123222
Ref: 49cd15123222
Ref: pickletools — Ferramentas para desenvolvedores pickle-Footnote-115124077
Node: Uso na linha de comando<13>15124148
Ref: library/pickletools command-line-usage15124302
Ref: 49ce15124302
Ref: library/pickletools pickletools-cli15124302
Ref: 49cf15124302
Node: Opções da linha de comando<2>15125337
Ref: library/pickletools command-line-options15125432
Ref: 49d015125432
Ref: library/pickletools cmdoption-pickletools-a15125509
Ref: 49d115125509
Ref: library/pickletools cmdoption-pickletools-annotate15125509
Ref: 49d215125509
Ref: library/pickletools cmdoption-pickletools-o15125612
Ref: 49d315125612
Ref: library/pickletools cmdoption-pickletools-output15125612
Ref: 49d415125612
Ref: library/pickletools cmdoption-pickletools-l15125705
Ref: 49d515125705
Ref: library/pickletools cmdoption-pickletools-indentlevel15125705
Ref: 49d615125705
Ref: library/pickletools cmdoption-pickletools-m15125815
Ref: 49d715125815
Ref: library/pickletools cmdoption-pickletools-memo15125815
Ref: 49d815125815
Ref: library/pickletools cmdoption-pickletools-p15125928
Ref: 49d915125928
Ref: library/pickletools cmdoption-pickletools-preamble15125928
Ref: 49da15125928
Node: Interface programática<2>15126102
Ref: library/pickletools programmatic-interface15126256
Ref: 49db15126256
Ref: library/pickletools pickletools dis15126324
Ref: ce315126324
Ref: library/pickletools pickletools genops15127273
Ref: 49dc15127273
Ref: library/pickletools pickletools optimize15127793
Ref: 2a4f15127793
Node: Serviços Específicos do MS Windows15128122
Ref: library/windows doc15128302
Ref: 49dd15128302
Ref: library/windows ms-windows-specific-services15128302
Ref: 49de15128302
Ref: library/windows mswin-specific-services15128302
Ref: 1fbb15128302
Ref: library/windows translation-repo15128302
Ref: 49df15128302
Node: msvcrt — Rotinas úteis do runtime MS VC++15128649
Ref: library/msvcrt doc15128817
Ref: 49e015128817
Ref: library/msvcrt module-msvcrt15128817
Ref: 9315128817
Ref: library/msvcrt msvcrt-useful-routines-from-the-ms-vc-runtime15128817
Ref: 49e115128817
Node: Operações com arquivos15129936
Ref: library/msvcrt file-operations15130064
Ref: 49e215130064
Ref: library/msvcrt msvcrt-files15130064
Ref: 49e315130064
Ref: library/msvcrt msvcrt locking15130131
Ref: 440815130131
Ref: library/msvcrt msvcrt LK_LOCK15130856
Ref: 49e415130856
Ref: library/msvcrt msvcrt LK_RLCK15130881
Ref: 49e515130881
Ref: library/msvcrt msvcrt LK_NBLCK15131151
Ref: 49e615131151
Ref: library/msvcrt msvcrt LK_NBRLCK15131177
Ref: 49e715131177
Ref: library/msvcrt msvcrt LK_UNLCK15131334
Ref: 49e815131334
Ref: library/msvcrt msvcrt setmode15131448
Ref: 49e915131448
Ref: library/msvcrt msvcrt open_osfhandle15131719
Ref: 440915131719
Ref: library/msvcrt msvcrt get_osfhandle15132456
Ref: 440715132456
Node: E/S de console15132744
Ref: library/msvcrt console-i-o15132900
Ref: 49ea15132900
Ref: library/msvcrt msvcrt-console15132900
Ref: 49eb15132900
Ref: library/msvcrt msvcrt kbhit15132949
Ref: 49ec15132949
Ref: library/msvcrt msvcrt getch15133107
Ref: 49ed15133107
Ref: library/msvcrt msvcrt getwch15133665
Ref: 143c15133665
Ref: library/msvcrt msvcrt getche15133790
Ref: 49ee15133790
Ref: library/msvcrt msvcrt getwche15133953
Ref: 143d15133953
Ref: library/msvcrt msvcrt putch15134080
Ref: 49ef15134080
Ref: library/msvcrt msvcrt putwch15134195
Ref: 143e15134195
Ref: library/msvcrt msvcrt ungetch15134332
Ref: 49f015134332
Ref: library/msvcrt msvcrt ungetwch15134551
Ref: 49f115134551
Node: Outras funções<4>15134692
Ref: library/msvcrt msvcrt-other15134815
Ref: 49f215134815
Ref: library/msvcrt other-functions15134815
Ref: 49f315134815
Ref: library/msvcrt msvcrt heapmin15134866
Ref: 49f415134866
Ref: library/msvcrt msvcrt set_error_mode15135070
Ref: 49f515135070
Ref: library/msvcrt msvcrt OUT_TO_DEFAULT15135485
Ref: 49f715135485
Ref: library/msvcrt msvcrt OUT_TO_STDERR15135662
Ref: 49f815135662
Ref: library/msvcrt msvcrt OUT_TO_MSGBOX15135821
Ref: 49f915135821
Ref: library/msvcrt msvcrt REPORT_ERRMODE15135985
Ref: 49f615135985
Ref: library/msvcrt msvcrt CrtSetReportMode15136140
Ref: 49fa15136140
Ref: library/msvcrt msvcrt CrtSetReportFile15136572
Ref: 49fb15136572
Ref: library/msvcrt msvcrt CRT_WARN15137042
Ref: 49fd15137042
Ref: library/msvcrt msvcrt CRT_ERROR15137145
Ref: 49fe15137145
Ref: library/msvcrt msvcrt CRT_ASSERT15137260
Ref: 49ff15137260
Ref: library/msvcrt msvcrt CRTDBG_MODE_DEBUG15137317
Ref: 4a0015137317
Ref: library/msvcrt msvcrt CRTDBG_MODE_FILE15137412
Ref: 49fc15137412
Ref: library/msvcrt msvcrt CRTDBG_MODE_WNDW15137654
Ref: 4a0115137654
Ref: library/msvcrt msvcrt CRTDBG_REPORT_MODE15137817
Ref: 4a0215137817
Ref: library/msvcrt msvcrt CRT_ASSEMBLY_VERSION15137913
Ref: 13a615137913
Ref: library/msvcrt msvcrt VC_ASSEMBLY_PUBLICKEYTOKEN15138028
Ref: 13a715138028
Ref: library/msvcrt msvcrt LIBRARIES_ASSEMBLY_NAME_PREFIX15138169
Ref: 13a815138169
Node: winreg — Acesso aos registros do Windows15138313
Ref: library/winreg doc15138550
Ref: 4a0315138550
Ref: library/winreg module-winreg15138550
Ref: 11615138550
Ref: library/winreg translation-repo15138550
Ref: 4a0415138550
Ref: library/winreg winreg-windows-registry-access15138550
Ref: 4a0515138550
Ref: library/winreg exception-changed15139053
Ref: 4a0715139053
Node: Funções<13>15139317
Ref: library/winreg functions15139432
Ref: 4a0815139432
Ref: library/winreg id115139432
Ref: 4a0915139432
Ref: library/winreg winreg CloseKey15139515
Ref: 4a0a15139515
Ref: library/winreg winreg ConnectRegistry15139866
Ref: 440d15139866
Ref: library/winreg winreg CreateKey15140602
Ref: 440e15140602
Ref: library/winreg winreg CreateKeyEx15141627
Ref: 13a915141627
Ref: library/winreg winreg DeleteKey15143062
Ref: 440f15143062
Ref: library/winreg winreg DeleteKeyEx15143863
Ref: 13aa15143863
Ref: library/winreg winreg DeleteValue15145244
Ref: 441015145244
Ref: library/winreg winreg EnumKey15145633
Ref: 441115145633
Ref: library/winreg winreg EnumValue15146356
Ref: 441215146356
Ref: library/winreg winreg ExpandEnvironmentStrings15147694
Ref: 143f15147694
Ref: library/winreg winreg FlushKey15148081
Ref: 4a1115148081
Ref: library/winreg winreg LoadKey15148991
Ref: 441315148991
Ref: library/winreg winreg OpenKey15150289
Ref: 441415150289
Ref: library/winreg winreg OpenKeyEx15150362
Ref: 4a1415150362
Ref: library/winreg winreg QueryInfoKey15151527
Ref: 441615151527
Ref: library/winreg winreg QueryValue15152539
Ref: 441715152539
Ref: library/winreg winreg QueryValueEx15153456
Ref: 15ab15153456
Ref: library/winreg winreg SaveKey15154403
Ref: 441815154403
Ref: library/winreg winreg SetValue15155538
Ref: 441915155538
Ref: library/winreg winreg SetValueEx15156783
Ref: 188b15156783
Ref: library/winreg winreg DisableReflectionKey15158141
Ref: 13ab15158141
Ref: library/winreg winreg EnableReflectionKey15158844
Ref: 13ac15158844
Ref: library/winreg winreg QueryReflectionKey15159393
Ref: 13ad15159393
Ref: Funções<13>-Footnote-115159930
Ref: Funções<13>-Footnote-215160007
Node: Constantes<10>15160084
Ref: library/winreg constants15160241
Ref: 4a1915160241
Ref: library/winreg id215160241
Ref: 4a1a15160241
Node: Constantes HKEY_*15160446
Ref: library/winreg hkey-constants15160541
Ref: 4a0c15160541
Ref: library/winreg id315160541
Ref: 4a1b15160541
Ref: library/winreg winreg HKEY_CLASSES_ROOT15160596
Ref: 4a1c15160596
Ref: library/winreg winreg HKEY_CURRENT_USER15160864
Ref: 4a1d15160864
Ref: library/winreg winreg HKEY_LOCAL_MACHINE15161199
Ref: 4a1315161199
Ref: library/winreg winreg HKEY_USERS15161440
Ref: 4a1215161440
Ref: library/winreg winreg HKEY_PERFORMANCE_DATA15161675
Ref: 4a1e15161675
Ref: library/winreg winreg HKEY_CURRENT_CONFIG15161954
Ref: 4a1f15161954
Ref: library/winreg winreg HKEY_DYN_DATA15162090
Ref: 4a2015162090
Node: Direitos de acesso15162195
Ref: library/winreg access-rights15162315
Ref: 4a0e15162315
Ref: library/winreg id415162315
Ref: 4a2115162315
Ref: library/winreg winreg KEY_ALL_ACCESS15162458
Ref: 4a2215162458
Ref: library/winreg winreg KEY_WRITE15162747
Ref: 4a0d15162747
Ref: library/winreg winreg KEY_READ15162900
Ref: 4a1515162900
Ref: library/winreg winreg KEY_EXECUTE15163070
Ref: 4a2815163070
Ref: library/winreg winreg KEY_QUERY_VALUE15163142
Ref: 4a2315163142
Ref: library/winreg winreg KEY_SET_VALUE15163246
Ref: 4a1715163246
Ref: library/winreg winreg KEY_CREATE_SUB_KEY15163349
Ref: 4a2415163349
Ref: library/winreg winreg KEY_ENUMERATE_SUB_KEYS15163454
Ref: 4a2515163454
Ref: library/winreg winreg KEY_NOTIFY15163566
Ref: 4a2615163566
Ref: library/winreg winreg KEY_CREATE_LINK15163734
Ref: 4a2715163734
Ref: Direitos de acesso-Footnote-115163880
Node: Específico de 64 bits15163957
Ref: library/winreg bit-access-rights15164034
Ref: 4a2915164034
Ref: library/winreg bit-specific15164034
Ref: 4a2a15164034
Ref: library/winreg winreg KEY_WOW64_64KEY15164192
Ref: 4a0f15164192
Ref: library/winreg winreg KEY_WOW64_32KEY15164394
Ref: 4a2b15164394
Ref: Específico de 64 bits-Footnote-115164632
Node: Tipos de valores15164704
Ref: library/winreg id515164798
Ref: 4a2c15164798
Ref: library/winreg value-types15164798
Ref: 4a1815164798
Ref: library/winreg winreg REG_BINARY15164923
Ref: 4a2d15164923
Ref: library/winreg winreg REG_DWORD15164995
Ref: 4a2e15164995
Ref: library/winreg winreg REG_DWORD_LITTLE_ENDIAN15165049
Ref: 4a2f15165049
Ref: library/winreg winreg REG_DWORD_BIG_ENDIAN15165188
Ref: 4a3015165188
Ref: library/winreg winreg REG_EXPAND_SZ15165278
Ref: 4a1015165278
Ref: library/winreg winreg REG_LINK15165409
Ref: 4a3115165409
Ref: library/winreg winreg REG_MULTI_SZ15165470
Ref: 1b5515165470
Ref: library/winreg winreg REG_NONE15165657
Ref: 4a3215165657
Ref: library/winreg winreg REG_QWORD15165721
Ref: d2415165721
Ref: library/winreg winreg REG_QWORD_LITTLE_ENDIAN15165811
Ref: 4a3315165811
Ref: library/winreg winreg REG_RESOURCE_LIST15165982
Ref: 4a3415165982
Ref: library/winreg winreg REG_FULL_RESOURCE_DESCRIPTOR15166072
Ref: 4a3515166072
Ref: library/winreg winreg REG_RESOURCE_REQUIREMENTS_LIST15166157
Ref: 4a3615166157
Ref: library/winreg winreg REG_SZ15166247
Ref: 4a1615166247
Ref: Tipos de valores-Footnote-115166344
Node: Objetos identificador de registro15166421
Ref: library/winreg handle-object15166556
Ref: 4a0615166556
Ref: library/winreg registry-handle-objects15166556
Ref: 4a3715166556
Ref: library/winreg winreg PyHKEY Close15167700
Ref: 4a0b15167700
Ref: library/winreg winreg PyHKEY Detach15167856
Ref: 441515167856
Ref: library/winreg winreg PyHKEY __enter__15168500
Ref: 4a3815168500
Ref: library/winreg winreg PyHKEY __exit__15168533
Ref: 4a3915168533
Node: winsound — Interface de reprodução de som para o Windows15168957
Ref: library/winsound doc15169141
Ref: 4a3a15169141
Ref: library/winsound module-winsound15169141
Ref: 11715169141
Ref: library/winsound translation-repo15169141
Ref: 4a3b15169141
Ref: library/winsound winsound-sound-playing-interface-for-windows15169141
Ref: 4a3c15169141
Ref: library/winsound winsound Beep15169558
Ref: d2615169558
Ref: library/winsound winsound PlaySound15169972
Ref: d2815169972
Ref: library/winsound winsound MessageBeep15170600
Ref: d2715170600
Ref: library/winsound winsound SND_FILENAME15171232
Ref: 4a3d15171232
Ref: library/winsound winsound SND_ALIAS15171362
Ref: 4a3e15171362
Ref: library/winsound winsound SND_LOOP15173140
Ref: 4a4015173140
Ref: library/winsound winsound SND_MEMORY15173347
Ref: 4a4215173347
Ref: library/winsound winsound SND_PURGE15173784
Ref: 4a4315173784
Ref: library/winsound winsound SND_ASYNC15173977
Ref: 4a4115173977
Ref: library/winsound winsound SND_NODEFAULT15174105
Ref: 4a3f15174105
Ref: library/winsound winsound SND_NOSTOP15174242
Ref: 4a4415174242
Ref: library/winsound winsound SND_NOWAIT15174334
Ref: 4a4515174334
Ref: library/winsound winsound SND_APPLICATION15174525
Ref: 4a4615174525
Ref: library/winsound winsound MB_ICONASTERISK15174797
Ref: 4a4715174797
Ref: library/winsound winsound MB_ICONEXCLAMATION15174875
Ref: 4a4815174875
Ref: library/winsound winsound MB_ICONHAND15174960
Ref: 4a4915174960
Ref: library/winsound winsound MB_ICONQUESTION15175031
Ref: 4a4a15175031
Ref: library/winsound winsound MB_OK15175110
Ref: 4a4b15175110
Node: Serviços específicos do Unix15175178
Ref: library/unix doc15175374
Ref: 4a4c15175374
Ref: library/unix translation-repo15175374
Ref: 4a4d15175374
Ref: library/unix unix15175374
Ref: 4a4e15175374
Ref: library/unix unix-specific-services15175374
Ref: 4a4f15175374
Node: shlex — Simple lexical analysis15176133
Ref: library/shlex doc15176295
Ref: 4a5015176295
Ref: library/shlex module-shlex15176295
Ref: c415176295
Ref: library/shlex shlex-simple-lexical-analysis15176295
Ref: 4a5115176295
Ref: library/shlex shlex split15176818
Ref: 53c15176818
Ref: library/shlex shlex join15177416
Ref: a3115177416
Ref: library/shlex shlex quote15177879
Ref: 27d15177879
Ref: library/shlex shlex-quote-warning15178107
Ref: 340f15178107
Ref: library/shlex shlex shlex15179735
Ref: ced15179735
Ref: shlex — Simple lexical analysis-Footnote-115181993
Node: shlex Objects15182058
Ref: library/shlex id115182168
Ref: 4a5515182168
Ref: library/shlex shlex-objects15182168
Ref: 4a5615182168
Ref: library/shlex shlex shlex get_token15182272
Ref: 4a5715182272
Ref: library/shlex shlex shlex push_token15182636
Ref: 4a5815182636
Ref: library/shlex shlex shlex read_token15182719
Ref: 4a5a15182719
Ref: library/shlex shlex shlex sourcehook15182959
Ref: 4a5b15182959
Ref: library/shlex shlex shlex push_source15184499
Ref: 4a5d15184499
Ref: library/shlex shlex shlex pop_source15184803
Ref: 4a5e15184803
Ref: library/shlex shlex shlex error_leader15185003
Ref: 4a5f15185003
Ref: library/shlex shlex shlex commenters15185733
Ref: 4a5215185733
Ref: library/shlex shlex shlex wordchars15185954
Ref: 4a5415185954
Ref: library/shlex shlex shlex whitespace15186649
Ref: 4a6115186649
Ref: library/shlex shlex shlex escape15186846
Ref: 4a6215186846
Ref: library/shlex shlex shlex quotes15187010
Ref: 4a6315187010
Ref: library/shlex shlex shlex escapedquotes15187294
Ref: 4a6415187294
Ref: library/shlex shlex shlex whitespace_split15187522
Ref: 4a6015187522
Ref: library/shlex shlex shlex infile15188060
Ref: 4a5315188060
Ref: library/shlex shlex shlex instream15188290
Ref: 4a6515188290
Ref: library/shlex shlex shlex source15188414
Ref: 4a5c15188414
Ref: library/shlex shlex shlex debug15189002
Ref: 4a6615189002
Ref: library/shlex shlex shlex lineno15189265
Ref: 4a6715189265
Ref: library/shlex shlex shlex token15189360
Ref: 4a6815189360
Ref: library/shlex shlex shlex eof15189476
Ref: 4a5915189476
Ref: library/shlex shlex shlex punctuation_chars15189651
Ref: 1b4815189651
Node: Regras de análise15190066
Ref: library/shlex parsing-rules15190219
Ref: 4a6915190219
Ref: library/shlex shlex-parsing-rules15190219
Ref: 4a6a15190219
Node: Improved Compatibility with Shells15192249
Ref: library/shlex improved-compatibility-with-shells15192380
Ref: 4a6b15192380
Ref: library/shlex improved-shell-compatibility15192380
Ref: cee15192380
Node: posix — As chamadas de sistema mais comuns do POSIX15195220
Ref: library/posix doc15195424
Ref: 4a6c15195424
Ref: library/posix module-posix15195424
Ref: ad15195424
Ref: library/posix posix-the-most-common-posix-system-calls15195424
Ref: 4a6d15195424
Ref: library/posix translation-repo15195424
Ref: 4a6e15195424
Node: Suporte a arquivos grandes15196756
Ref: library/posix large-file-support15196910
Ref: 4a6f15196910
Ref: library/posix posix-large-files15196910
Ref: 4a7015196910
Node: Conteúdo notável do módulo15197967
Ref: library/posix notable-module-contents15198121
Ref: 4a7115198121
Ref: library/posix posix-contents15198121
Ref: 4a7215198121
Ref: library/posix posix environ15198327
Ref: 4a7315198327
Node: pwd — A senha do banco de dados15199565
Ref: library/pwd doc15199770
Ref: 4a7415199770
Ref: library/pwd module-pwd15199770
Ref: b215199770
Ref: library/pwd pwd-the-password-database15199770
Ref: 4a7515199770
Ref: library/pwd translation-repo15199770
Ref: 4a7615199770
Ref: library/pwd pwd getpwuid15202194
Ref: 1ba815202194
Ref: library/pwd pwd getpwnam15202313
Ref: 33ff15202313
Ref: library/pwd pwd getpwall15202435
Ref: 4a7715202435
Node: grp — O banco de dados de grupos15202700
Ref: library/grp doc15202895
Ref: 4a7815202895
Ref: library/grp grp-the-group-database15202895
Ref: 4a7915202895
Ref: library/grp module-grp15202895
Ref: 6615202895
Ref: library/grp translation-repo15202895
Ref: 4a7a15202895
Ref: library/grp grp getgrgid15204685
Ref: d4815204685
Ref: library/grp grp getgrnam15205044
Ref: 33fe15205044
Ref: library/grp grp getgrall15205259
Ref: 167e15205259
Node: termios — Controle de tty no estilo POSIX15205508
Ref: library/termios doc15205711
Ref: 4a7b15205711
Ref: library/termios module-termios15205711
Ref: e115205711
Ref: library/termios termios-posix-style-tty-control15205711
Ref: 4a7c15205711
Ref: library/termios translation-repo15205711
Ref: 4a7d15205711
Ref: library/termios termios tcgetattr15206854
Ref: 176c15206854
Ref: library/termios termios tcsetattr15207482
Ref: 17eb15207482
Ref: library/termios termios TCSANOW15207772
Ref: 4a7e15207772
Ref: library/termios termios TCSADRAIN15207850
Ref: 4a7f15207850
Ref: library/termios termios TCSAFLUSH15207977
Ref: 4a8015207977
Ref: library/termios termios tcsendbreak15208147
Ref: 4a8115208147
Ref: library/termios termios tcdrain15208437
Ref: 4a8215208437
Ref: library/termios termios tcflush15208570
Ref: 4a8315208570
Ref: library/termios termios tcflow15208838
Ref: 4a8415208838
Ref: library/termios termios tcgetwinsize15209155
Ref: 4a8515209155
Ref: library/termios termios tcsetwinsize15209423
Ref: 4a8615209423
Ref: termios — Controle de tty no estilo POSIX-Footnote-115210090
Node: Exemplo<15>15210137
Ref: library/termios example15210228
Ref: 4a8715210228
Ref: library/termios termios-example15210228
Ref: 4a8815210228
Node: tty — Funções de controle de terminal15211004
Ref: library/tty doc15211211
Ref: 4a8915211211
Ref: library/tty module-tty15211211
Ref: 10015211211
Ref: library/tty translation-repo15211211
Ref: 4a8a15211211
Ref: library/tty tty-terminal-control-functions15211211
Ref: 4a8b15211211
Ref: library/tty tty cfmakeraw15211690
Ref: 17bf15211690
Ref: library/tty tty cfmakecbreak15211922
Ref: 176f15211922
Ref: library/tty tty setraw15212527
Ref: 17be15212527
Ref: library/tty tty setcbreak15213023
Ref: 176e15213023
Ref: tty — Funções de controle de terminal-Footnote-115214099
Node: pty — Utilitários de pseudoterminal15214162
Ref: library/pty doc15214372
Ref: 4a8c15214372
Ref: library/pty module-pty15214372
Ref: b115214372
Ref: library/pty pty-pseudo-terminal-utilities15214372
Ref: 4a8d15214372
Ref: library/pty translation-repo15214372
Ref: 4a8e15214372
Ref: library/pty pty fork15215079
Ref: 185115215079
Ref: library/pty pty openpty15215694
Ref: 2ce15215694
Ref: library/pty pty spawn15216004
Ref: fb615216004
Ref: pty — Utilitários de pseudoterminal-Footnote-115218390
Node: Exemplo<16>15218453
Ref: library/pty example15218539
Ref: 4a8f15218539
Ref: Exemplo<16>-Footnote-115219776
Node: fcntl — as chamadas de sistema fcntl e ioctl15219822
Ref: library/fcntl doc15220035
Ref: 4a9015220035
Ref: library/fcntl fcntl-the-fcntl-and-ioctl-system-calls15220035
Ref: 4a9115220035
Ref: library/fcntl module-fcntl15220035
Ref: 5915220035
Ref: library/fcntl translation-repo15220035
Ref: 4a9215220035
Ref: library/fcntl fcntl fcntl15223669
Ref: 365215223669
Ref: library/fcntl fcntl ioctl15225710
Ref: 14c315225710
Ref: library/fcntl fcntl flock15228492
Ref: 440615228492
Ref: library/fcntl fcntl lockf15229073
Ref: 143315229073
Ref: library/fcntl fcntl LOCK_UN15229445
Ref: 4a9315229445
Ref: library/fcntl fcntl LOCK_SH15229514
Ref: 4a9415229514
Ref: library/fcntl fcntl LOCK_EX15229588
Ref: 4a9515229588
Ref: library/fcntl fcntl LOCK_NB15229658
Ref: 4a9615229658
Ref: fcntl — as chamadas de sistema fcntl e ioctl-Footnote-115232036
Ref: fcntl — as chamadas de sistema fcntl e ioctl-Footnote-215232081
Ref: fcntl — as chamadas de sistema fcntl e ioctl-Footnote-315232126
Node: resource — Informação de uso de recursos15232171
Ref: library/resource doc15232393
Ref: 4a9715232393
Ref: library/resource module-resource15232393
Ref: bc15232393
Ref: library/resource resource-resource-usage-information15232393
Ref: 4a9815232393
Ref: library/resource translation-repo15232393
Ref: 4a9915232393
Ref: library/resource resource error15232980
Ref: 4a9a15232980
Ref: resource — Informação de uso de recursos-Footnote-115233281
Node: Limites de recursos15233323
Ref: library/resource resource-limits15233447
Ref: 4a9b15233447
Ref: library/resource resource RLIM_INFINITY15234402
Ref: 160415234402
Ref: library/resource resource getrlimit15234509
Ref: 160315234509
Ref: library/resource resource setrlimit15234820
Ref: 160515234820
Ref: library/resource resource prlimit15236079
Ref: fbe15236079
Ref: library/resource resource RLIMIT_CORE15237766
Ref: 43a915237766
Ref: library/resource resource RLIMIT_CPU15238063
Ref: 4a9d15238063
Ref: library/resource resource RLIMIT_FSIZE15238458
Ref: 4a9e15238458
Ref: library/resource resource RLIMIT_DATA15238556
Ref: 4a9f15238556
Ref: library/resource resource RLIMIT_STACK15238644
Ref: 4aa015238644
Ref: library/resource resource RLIMIT_RSS15238841
Ref: 4aa115238841
Ref: library/resource resource RLIMIT_NPROC15238973
Ref: 4aa215238973
Ref: library/resource resource RLIMIT_NOFILE15239076
Ref: 4a9c15239076
Ref: library/resource resource RLIMIT_OFILE15239196
Ref: 4aa315239196
Ref: library/resource resource RLIMIT_MEMLOCK15239278
Ref: 4aa415239278
Ref: library/resource resource RLIMIT_VMEM15239384
Ref: 4aa515239384
Ref: library/resource resource RLIMIT_AS15239599
Ref: 4aa615239599
Ref: library/resource resource RLIMIT_MSGQUEUE15239727
Ref: fbf15239727
Ref: library/resource resource RLIMIT_NICE15239932
Ref: fc015239932
Ref: library/resource resource RLIMIT_RTPRIO15240137
Ref: fc115240137
Ref: library/resource resource RLIMIT_RTTIME15240299
Ref: fc215240299
Ref: library/resource resource RLIMIT_SIGPENDING15240593
Ref: fc315240593
Ref: library/resource resource RLIMIT_SBSIZE15240774
Ref: fc415240774
Ref: library/resource resource RLIMIT_SWAP15241126
Ref: fc515241126
Ref: library/resource resource RLIMIT_NPTS15241548
Ref: fc615241548
Ref: library/resource resource RLIMIT_KQUEUES15241739
Ref: 1a3215241739
Ref: Limites de recursos-Footnote-115241986
Ref: Limites de recursos-Footnote-215242035
Ref: Limites de recursos-Footnote-315242084
Node: Uso de recursos15242151
Ref: library/resource resource-usage15242275
Ref: 4aa715242275
Ref: library/resource resource getrusage15242404
Ref: 147815242404
Ref: library/resource resource getpagesize15247353
Ref: 4aa815247353
Ref: library/resource resource RUSAGE_SELF15247689
Ref: 4aa915247689
Ref: library/resource resource RUSAGE_CHILDREN15247902
Ref: 4aaa15247902
Ref: library/resource resource RUSAGE_BOTH15248104
Ref: 4aab15248104
Ref: library/resource resource RUSAGE_THREAD15248320
Ref: 4aac15248320
Ref: Uso de recursos-Footnote-115248580
Node: syslog — Rotinas da biblioteca syslog do Unix15248629
Ref: library/syslog doc15248796
Ref: 4aad15248796
Ref: library/syslog module-syslog15248796
Ref: dc15248796
Ref: library/syslog syslog-unix-syslog-library-routines15248796
Ref: 4aae15248796
Ref: library/syslog translation-repo15248796
Ref: 4aaf15248796
Ref: library/syslog syslog syslog15249505
Ref: 54015249505
Ref: library/syslog syslog openlog15251059
Ref: 53e15251059
Ref: library/syslog syslog closelog15252521
Ref: 53f15252521
Ref: library/syslog syslog setlogmask15253442
Ref: 440b15253442
Ref: library/syslog syslog LOG_EMERG15254101
Ref: 4ab215254101
Ref: library/syslog syslog LOG_ALERT15254128
Ref: 4ab315254128
Ref: library/syslog syslog LOG_CRIT15254155
Ref: 4ab415254155
Ref: library/syslog syslog LOG_ERR15254181
Ref: 4ab515254181
Ref: library/syslog syslog LOG_WARNING15254206
Ref: 4ab615254206
Ref: library/syslog syslog LOG_NOTICE15254235
Ref: 4ab715254235
Ref: library/syslog syslog LOG_INFO15254263
Ref: 4ab015254263
Ref: library/syslog syslog LOG_DEBUG15254289
Ref: 4ab815254289
Ref: library/syslog syslog LOG_AUTH15254361
Ref: 4ab915254361
Ref: library/syslog syslog LOG_AUTHPRIV15254387
Ref: 4aba15254387
Ref: library/syslog syslog LOG_CRON15254417
Ref: 4abb15254417
Ref: library/syslog syslog LOG_DAEMON15254443
Ref: 4abc15254443
Ref: library/syslog syslog LOG_FTP15254471
Ref: 4abd15254471
Ref: library/syslog syslog LOG_INSTALL15254496
Ref: 4abe15254496
Ref: library/syslog syslog LOG_KERN15254525
Ref: 4abf15254525
Ref: library/syslog syslog LOG_LAUNCHD15254551
Ref: 4ac015254551
Ref: library/syslog syslog LOG_LPR15254580
Ref: 4ac115254580
Ref: library/syslog syslog LOG_MAIL15254605
Ref: 4ac215254605
Ref: library/syslog syslog LOG_NETINFO15254631
Ref: 4ac315254631
Ref: library/syslog syslog LOG_NEWS15254660
Ref: 4ac415254660
Ref: library/syslog syslog LOG_RAS15254686
Ref: 4ac515254686
Ref: library/syslog syslog LOG_REMOTEAUTH15254711
Ref: 4ac615254711
Ref: library/syslog syslog LOG_SYSLOG15254743
Ref: 4ac715254743
Ref: library/syslog syslog LOG_USER15254771
Ref: 4ab115254771
Ref: library/syslog syslog LOG_UUCP15254797
Ref: 4ac815254797
Ref: library/syslog syslog LOG_LOCAL015254823
Ref: 4ac915254823
Ref: library/syslog syslog LOG_LOCAL115254851
Ref: 4aca15254851
Ref: library/syslog syslog LOG_LOCAL215254879
Ref: 4acb15254879
Ref: library/syslog syslog LOG_LOCAL315254907
Ref: 4acc15254907
Ref: library/syslog syslog LOG_LOCAL415254935
Ref: 4acd15254935
Ref: library/syslog syslog LOG_LOCAL515254963
Ref: 4ace15254963
Ref: library/syslog syslog LOG_LOCAL615254991
Ref: 4acf15254991
Ref: library/syslog syslog LOG_LOCAL715255019
Ref: 4ad015255019
Ref: library/syslog syslog LOG_PID15255486
Ref: 4ad115255486
Ref: library/syslog syslog LOG_CONS15255511
Ref: 4ad215255511
Ref: library/syslog syslog LOG_NDELAY15255537
Ref: 4ad315255537
Ref: library/syslog syslog LOG_ODELAY15255565
Ref: 4ad415255565
Ref: library/syslog syslog LOG_NOWAIT15255593
Ref: 4ad515255593
Ref: library/syslog syslog LOG_PERROR15255621
Ref: 4ad615255621
Node: Exemplos<36>15255848
Ref: library/syslog examples15255944
Ref: 4ad715255944
Node: Exemplo simples15256013
Ref: library/syslog simple-example15256077
Ref: 4ad815256077
Node: Interface de linha de comando CLI de módulos15256621
Ref: library/cmdline doc15256803
Ref: 4ad915256803
Ref: library/cmdline modules-command-line-interface-cli15256803
Ref: 4ada15256803
Ref: library/cmdline translation-repo15256803
Ref: 4adb15256803
Node: Módulos substituídos15258398
Ref: library/superseded doc15258568
Ref: 4adc15258568
Ref: library/superseded superseded15258568
Ref: 4add15258568
Ref: library/superseded superseded-modules15258568
Ref: 4ade15258568
Ref: library/superseded translation-repo15258568
Ref: 4adf15258568
Ref: Módulos substituídos-Footnote-115259801
Node: getopt — Analisador sintático no estilo C para opções de linha de comando15259843
Ref: library/getopt doc15259980
Ref: 4ae015259980
Ref: library/getopt getopt-c-style-parser-for-command-line-options15259980
Ref: 4ae115259980
Ref: library/getopt module-getopt15259980
Ref: 6115259980
Ref: library/getopt getopt getopt15261575
Ref: 150315261575
Ref: library/getopt getopt gnu_getopt15264004
Ref: 150215264004
Ref: library/getopt getopt GetoptError15264664
Ref: 4ae215264664
Ref: library/getopt getopt error15265288
Ref: 4ae315265288
Ref: getopt — Analisador sintático no estilo C para opções de linha de comando-Footnote-115268624
Node: Módulos removidos15268690
Ref: library/removed doc15268847
Ref: 4ae415268847
Ref: library/removed removed15268847
Ref: 4ae515268847
Ref: library/removed removed-modules15268847
Ref: 4ae615268847
Ref: library/removed translation-repo15268847
Ref: 4ae715268847
Node: aifc — Lê e escreve arquivos AIFF e AIFC15270343
Ref: library/aifc doc15270516
Ref: 4ae815270516
Ref: library/aifc aifc-read-and-write-aiff-and-aifc-files15270516
Ref: 4ae915270516
Ref: library/aifc module-aifc15270516
Ref: 515270516
Ref: aifc — Lê e escreve arquivos AIFF e AIFC-Footnote-115271001
Ref: aifc — Lê e escreve arquivos AIFF e AIFC-Footnote-215271043
Node: asynchat — Manipulador de comando/resposta de socket assíncrono15271098
Ref: library/asynchat doc15271326
Ref: 4aea15271326
Ref: library/asynchat asynchat-asynchronous-socket-command-response-handler15271326
Ref: 4aeb15271326
Ref: library/asynchat module-asynchat15271326
Ref: 915271326
Ref: library/asynchat translation-repo15271326
Ref: 4aec15271326
Ref: asynchat — Manipulador de comando/resposta de socket assíncrono-Footnote-115271929
Ref: asynchat — Manipulador de comando/resposta de socket assíncrono-Footnote-215271971
Node: asyncore — Manipulador de socket assíncrono15272030
Ref: library/asyncore doc15272263
Ref: 4aed15272263
Ref: library/asyncore asyncore-asynchronous-socket-handler15272263
Ref: 4aee15272263
Ref: library/asyncore module-asyncore15272263
Ref: b15272263
Ref: library/asyncore translation-repo15272263
Ref: 4aef15272263
Ref: asyncore — Manipulador de socket assíncrono-Footnote-115272826
Ref: asyncore — Manipulador de socket assíncrono-Footnote-215272868
Node: audioop — Manipulando dados de áudio original15272927
Ref: library/audioop doc15273136
Ref: 4af015273136
Ref: library/audioop audioop-manipulate-raw-audio-data15273136
Ref: 4af115273136
Ref: library/audioop module-audioop15273136
Ref: d15273136
Ref: library/audioop translation-repo15273136
Ref: 4af215273136
Ref: audioop — Manipulando dados de áudio original-Footnote-115273634
Ref: audioop — Manipulando dados de áudio original-Footnote-215273676
Node: cgi — Suporte a Common Gateway Interface15273734
Ref: library/cgi doc15273951
Ref: 4af315273951
Ref: library/cgi cgi-common-gateway-interface-support15273951
Ref: 4af415273951
Ref: library/cgi module-cgi15273951
Ref: 1515273951
Ref: library/cgi translation-repo15273951
Ref: 4af515273951
Ref: cgi — Suporte a Common Gateway Interface-Footnote-115274600
Ref: cgi — Suporte a Common Gateway Interface-Footnote-215274642
Ref: cgi — Suporte a Common Gateway Interface-Footnote-315274687
Node: cgitb — Gerenciador de traceback para scripts de CGI15274741
Ref: library/cgitb doc15274943
Ref: 4af615274943
Ref: library/cgitb cgitb-traceback-manager-for-cgi-scripts15274943
Ref: 4af715274943
Ref: library/cgitb module-cgitb15274943
Ref: 1615274943
Ref: library/cgitb translation-repo15274943
Ref: 4af815274943
Ref: cgitb — Gerenciador de traceback para scripts de CGI-Footnote-115275625
Ref: cgitb — Gerenciador de traceback para scripts de CGI-Footnote-215275667
Ref: cgitb — Gerenciador de traceback para scripts de CGI-Footnote-315275712
Node: chunk — Lê dados em blocos IFF15275768
Ref: library/chunk doc15275973
Ref: 4af915275973
Ref: library/chunk chunk-read-iff-chunked-data15275973
Ref: 4afa15275973
Ref: library/chunk module-chunk15275973
Ref: 1715275973
Ref: library/chunk translation-repo15275973
Ref: 4afb15275973
Ref: chunk — Lê dados em blocos IFF-Footnote-115276439
Ref: chunk — Lê dados em blocos IFF-Footnote-215276481
Node: crypt — Função para verificar senhas Unix15276537
Ref: library/crypt doc15276748
Ref: 4afc15276748
Ref: library/crypt crypt-function-to-check-unix-passwords15276748
Ref: 4afd15276748
Ref: library/crypt module-crypt15276748
Ref: 2815276748
Ref: library/crypt translation-repo15276748
Ref: 4afe15276748
Ref: crypt — Função para verificar senhas Unix-Footnote-115277504
Ref: crypt — Função para verificar senhas Unix-Footnote-215277546
Ref: crypt — Função para verificar senhas Unix-Footnote-315277592
Ref: crypt — Função para verificar senhas Unix-Footnote-415277633
Ref: crypt — Função para verificar senhas Unix-Footnote-515277679
Node: distutils — Criação e instalação de módulos do Python15277735
Ref: library/distutils doc15277954
Ref: 4aff15277954
Ref: library/distutils distutils-building-and-installing-python-modules15277954
Ref: 4b0015277954
Ref: library/distutils module-distutils15277954
Ref: 3915277954
Ref: library/distutils translation-repo15277954
Ref: 4b0115277954
Ref: distutils — Criação e instalação de módulos do Python-Footnote-115278515
Ref: distutils — Criação e instalação de módulos do Python-Footnote-215278557
Ref: distutils — Criação e instalação de módulos do Python-Footnote-315278616
Node: imghdr — Determina o tipo de uma imagem15278676
Ref: library/imghdr doc15278904
Ref: 4b0215278904
Ref: library/imghdr imghdr-determine-the-type-of-an-image15278904
Ref: 4b0315278904
Ref: library/imghdr module-imghdr15278904
Ref: 7515278904
Ref: library/imghdr translation-repo15278904
Ref: 4b0415278904
Ref: imghdr — Determina o tipo de uma imagem-Footnote-115279575
Ref: imghdr — Determina o tipo de uma imagem-Footnote-215279617
Ref: imghdr — Determina o tipo de uma imagem-Footnote-315279660
Ref: imghdr — Determina o tipo de uma imagem-Footnote-415279704
Ref: imghdr — Determina o tipo de uma imagem-Footnote-515279751
Node: imp — Acessa os componentes internos de importação15279808
Ref: library/imp doc15280020
Ref: 4b0515280020
Ref: library/imp imp-access-the-import-internals15280020
Ref: 4b0615280020
Ref: library/imp module-imp15280020
Ref: 7615280020
Ref: library/imp translation-repo15280020
Ref: 4b0715280020
Ref: imp — Acessa os componentes internos de importação-Footnote-115280597
Node: mailcap — Manipulação de arquivo Mailcap15280651
Ref: library/mailcap doc15280878
Ref: 4b0815280878
Ref: library/mailcap mailcap-mailcap-file-handling15280878
Ref: 4b0915280878
Ref: library/mailcap module-mailcap15280878
Ref: 8c15280878
Ref: library/mailcap translation-repo15280878
Ref: 4b0a15280878
Ref: mailcap — Manipulação de arquivo Mailcap-Footnote-115281369
Ref: mailcap — Manipulação de arquivo Mailcap-Footnote-215281411
Node: msilib — Lê e escreve arquivos do Microsoft Installer15281469
Ref: library/msilib doc15281688
Ref: 4b0b15281688
Ref: library/msilib module-msilib15281688
Ref: 9215281688
Ref: library/msilib msilib-read-and-write-microsoft-installer-files15281688
Ref: 4b0c15281688
Ref: library/msilib translation-repo15281688
Ref: 4b0d15281688
Ref: msilib — Lê e escreve arquivos do Microsoft Installer-Footnote-115282203
Ref: msilib — Lê e escreve arquivos do Microsoft Installer-Footnote-215282245
Node: nis — Interface para NIS da Sun Yellow Pages15282302
Ref: library/nis doc15282514
Ref: 4b0e15282514
Ref: library/nis module-nis15282514
Ref: 9c15282514
Ref: library/nis nis-interface-to-suns-nis-yellow-pages15282514
Ref: 4b0f15282514
Ref: library/nis translation-repo15282514
Ref: 4b1015282514
Ref: nis — Interface para NIS da Sun Yellow Pages-Footnote-115283011
Ref: nis — Interface para NIS da Sun Yellow Pages-Footnote-215283053
Node: nntplib — Cliente de protocolo NNTP15283107
Ref: library/nntplib doc15283331
Ref: 4b1115283331
Ref: library/nntplib module-nntplib15283331
Ref: 9d15283331
Ref: library/nntplib nntplib-nntp-protocol-client15283331
Ref: 4b1215283331
Ref: library/nntplib translation-repo15283331
Ref: 4b1315283331
Ref: nntplib — Cliente de protocolo NNTP-Footnote-115283810
Ref: nntplib — Cliente de protocolo NNTP-Footnote-215283852
Node: ossaudiodev — Acesso a dispositivos de áudio compatíveis com OSS15283910
Ref: library/ossaudiodev doc15284131
Ref: 4b1415284131
Ref: library/ossaudiodev module-ossaudiodev15284131
Ref: a315284131
Ref: library/ossaudiodev ossaudiodev-access-to-oss-compatible-audio-devices15284131
Ref: 4b1515284131
Ref: library/ossaudiodev translation-repo15284131
Ref: 4b1615284131
Ref: ossaudiodev — Acesso a dispositivos de áudio compatíveis com OSS-Footnote-115284674
Ref: ossaudiodev — Acesso a dispositivos de áudio compatíveis com OSS-Footnote-215284716
Node: pipes — Interface para pipelines do shell15284778
Ref: library/pipes doc15284986
Ref: 4b1715284986
Ref: library/pipes module-pipes15284986
Ref: a815284986
Ref: library/pipes pipes-interface-to-shell-pipelines15284986
Ref: 4b1815284986
Ref: library/pipes translation-repo15284986
Ref: 4b1915284986
Ref: pipes — Interface para pipelines do shell-Footnote-115285549
Ref: pipes — Interface para pipelines do shell-Footnote-215285591
Node: smtpd — Serviços SMTP15285647
Ref: library/smtpd doc15285833
Ref: 4b1a15285833
Ref: library/smtpd module-smtpd15285833
Ref: c915285833
Ref: library/smtpd smtpd-smtp-server15285833
Ref: 4b1b15285833
Ref: library/smtpd translation-repo15285833
Ref: 4b1c15285833
Ref: smtpd — Serviços SMTP-Footnote-115286432
Ref: smtpd — Serviços SMTP-Footnote-215286474
Ref: smtpd — Serviços SMTP-Footnote-315286517
Node: sndhdr — Determina o tipo de arquivos de som15286573
Ref: library/sndhdr doc15286758
Ref: 4b1d15286758
Ref: library/sndhdr module-sndhdr15286758
Ref: cb15286758
Ref: library/sndhdr sndhdr-determine-type-of-sound-file15286758
Ref: 4b1e15286758
Ref: library/sndhdr translation-repo15286758
Ref: 4b1f15286758
Ref: sndhdr — Determina o tipo de arquivos de som-Footnote-115287436
Ref: sndhdr — Determina o tipo de arquivos de som-Footnote-215287478
Ref: sndhdr — Determina o tipo de arquivos de som-Footnote-315287521
Ref: sndhdr — Determina o tipo de arquivos de som-Footnote-415287565
Ref: sndhdr — Determina o tipo de arquivos de som-Footnote-515287612
Node: spwd — O banco de dados de senhas shadow15287669
Ref: library/spwd doc15287872
Ref: 4b2015287872
Ref: library/spwd module-spwd15287872
Ref: ce15287872
Ref: library/spwd spwd-the-shadow-password-database15287872
Ref: 4b2115287872
Ref: library/spwd translation-repo15287872
Ref: 4b2215287872
Ref: spwd — O banco de dados de senhas shadow-Footnote-115288510
Ref: spwd — O banco de dados de senhas shadow-Footnote-215288552
Ref: spwd — O banco de dados de senhas shadow-Footnote-315288597
Node: sunau — Lê e escreve arquivos AU da Sun15288652
Ref: library/sunau doc15288837
Ref: 4b2315288837
Ref: library/sunau module-sunau15288837
Ref: d715288837
Ref: library/sunau sunau-read-and-write-sun-au-files15288837
Ref: 4b2415288837
Ref: library/sunau translation-repo15288837
Ref: 4b2515288837
Ref: sunau — Lê e escreve arquivos AU da Sun-Footnote-115289323
Ref: sunau — Lê e escreve arquivos AU da Sun-Footnote-215289365
Node: telnetlib — cliente Telnet15289421
Ref: library/telnetlib doc15289610
Ref: 4b2615289610
Ref: library/telnetlib module-telnetlib15289610
Ref: df15289610
Ref: library/telnetlib telnetlib-telnet-client15289610
Ref: 4b2715289610
Ref: library/telnetlib translation-repo15289610
Ref: 4b2815289610
Ref: telnetlib — cliente Telnet-Footnote-115290242
Ref: telnetlib — cliente Telnet-Footnote-215290284
Ref: telnetlib — cliente Telnet-Footnote-315290329
Ref: telnetlib — cliente Telnet-Footnote-415290372
Node: uu — Codifica e decodifica arquivos uuencode15290432
Ref: library/uu doc15290621
Ref: 4b2915290621
Ref: library/uu module-uu15290621
Ref: 10f15290621
Ref: library/uu translation-repo15290621
Ref: 4b2a15290621
Ref: library/uu uu-encode-and-decode-uuencode-files15290621
Ref: 4b2b15290621
Ref: uu — Codifica e decodifica arquivos uuencode-Footnote-115291113
Ref: uu — Codifica e decodifica arquivos uuencode-Footnote-215291155
Node: xdrlib — Codifica e decodifica dados XDR15291208
Ref: library/xdrlib doc15291360
Ref: 4b2c15291360
Ref: library/xdrlib module-xdrlib15291360
Ref: 11f15291360
Ref: library/xdrlib translation-repo15291360
Ref: 4b2d15291360
Ref: library/xdrlib xdrlib-encode-and-decode-xdr-data15291360
Ref: 4b2e15291360
Ref: library/security_warnings security-warnings15291812
Ref: 4b2f15291812
Ref: xdrlib — Codifica e decodifica dados XDR-Footnote-115291848
Ref: xdrlib — Codifica e decodifica dados XDR-Footnote-215291890
Node: Considerações de Segurança<3>15291947
Ref: library/security_warnings doc15292073
Ref: 4b3015292073
Ref: library/security_warnings security-considerations15292073
Ref: 4b3115292073
Ref: library/security_warnings translation-repo15292073
Ref: 4b3215292073
Ref: Considerações de Segurança<3>-Footnote-115294056
Node: Estendendo e incorporando o interpretador Python15294115
Ref: extending/index doc15294288
Ref: 4b3315294288
Ref: extending/index extending-and-embedding-the-python-interpreter15294288
Ref: 4b3415294288
Ref: extending/index extending-index15294288
Ref: 1d5615294288
Ref: extending/index translation-repo15294288
Ref: 4b3515294288
Node: Ferramentas de terceiros recomendadas15295812
Ref: extending/index recommended-third-party-tools15295990
Ref: 4b3615295990
Node: Criando extensões sem ferramentas de terceiros15296358
Ref: extending/index creating-extensions-without-third-party-tools15296615
Ref: 4b3815296615
Ref: Criando extensões sem ferramentas de terceiros-Footnote-115297382
Node: Estendendo Python com C ou C++15297424
Ref: extending/extending doc15297584
Ref: 4b3915297584
Ref: extending/extending extending-intro15297584
Ref: 4b3a15297584
Ref: extending/extending extending-python-with-c-or-c15297584
Ref: 4b3b15297584
Ref: Estendendo Python com C ou C++-Footnote-115299806
Node: Um Exemplo Simples15299843
Ref: extending/extending a-simple-example15299966
Ref: 4b3c15299966
Ref: extending/extending extending-simpleexample15299966
Ref: 4b3d15299966
Ref: Um Exemplo Simples-Footnote-115304623
Node: Intermezzo erros e exceções15304764
Ref: extending/extending extending-errors15304915
Ref: 4b3e15304915
Ref: extending/extending intermezzo-errors-and-exceptions15304915
Ref: 4b3f15304915
Node: De volta ao exemplo15313009
Ref: extending/extending back-to-the-example15313205
Ref: 4b4615313205
Ref: extending/extending backtoexample15313205
Ref: 4b4715313205
Node: A tabela de métodos e a função de inicialização do módulo15314861
Ref: extending/extending methodtable15315055
Ref: 4b4915315055
Ref: extending/extending the-module-s-method-table-and-initialization-function15315055
Ref: 4b4a15315055
Node: Compilação e vinculação15320086
Ref: extending/extending compilation15320291
Ref: 4b4f15320291
Ref: extending/extending compilation-and-linkage15320291
Ref: 4b5015320291
Node: Chamando funções Python de C15321816
Ref: extending/extending calling-python-functions-from-c15322005
Ref: 4b5215322005
Ref: extending/extending callingpython15322005
Ref: 4b5315322005
Node: Extraindo parâmetros em funções de extensão15328806
Ref: extending/extending extracting-parameters-in-extension-functions15329016
Ref: 4b5715329016
Ref: extending/extending parsetuple15329016
Ref: 4b5415329016
Node: Parâmetros nomeados para funções de extensão15331719
Ref: extending/extending keyword-parameters-for-extension-functions15331931
Ref: 4b5815331931
Ref: extending/extending parsetupleandkeywords15331931
Ref: 4b5915331931
Node: Construindo valores arbitrários15334660
Ref: extending/extending building-arbitrary-values15334850
Ref: 4b5a15334850
Ref: extending/extending buildvalue15334850
Ref: 4b5b15334850
Node: Contagens de referências15336949
Ref: extending/extending refcounts15337119
Ref: 4b5515337119
Ref: extending/extending reference-counts15337119
Ref: 4b5c15337119
Node: Contagem de referências no Python15341843
Ref: extending/extending refcountsinpython15341969
Ref: 4b5d15341969
Ref: extending/extending reference-counting-in-python15341969
Ref: 4b5e15341969
Ref: Contagem de referências no Python-Footnote-115344357
Ref: Contagem de referências no Python-Footnote-215344503
Node: Regras de propriedade15344674
Ref: extending/extending ownership-rules15344818
Ref: 4b5f15344818
Ref: extending/extending ownershiprules15344818
Ref: 4b6015344818
Node: Gelo fino15347320
Ref: extending/extending thin-ice15347444
Ref: 4b6415347444
Ref: extending/extending thinice15347444
Ref: 4b6515347444
Ref: Gelo fino-Footnote-115351194
Node: Ponteiros NULL15351236
Ref: extending/extending null-pointers15351330
Ref: 4b6815351330
Ref: extending/extending nullpointers15351330
Ref: 4b6915351330
Ref: Ponteiros NULL-Footnote-115352957
Node: Escrevendo extensões em C++15353094
Ref: extending/extending cplusplus15353281
Ref: 4b6a15353281
Ref: extending/extending writing-extensions-in-c15353281
Ref: 4b6b15353281
Node: Fornecendo uma API C para um módulo de extensão15354087
Ref: extending/extending providing-a-c-api-for-an-extension-module15354240
Ref: 4b6c15354240
Ref: extending/extending using-capsules15354240
Ref: 13a415354240
Node: Definindo Tipos de Extensão Tutorial15363169
Ref: extending/newtypes_tutorial doc15363378
Ref: 194515363378
Ref: extending/newtypes_tutorial defining-extension-types-tutorial15363378
Ref: 4b6e15363378
Ref: extending/newtypes_tutorial defining-new-types15363378
Ref: 4b6f15363378
Ref: extending/newtypes_tutorial translation-repo15363378
Ref: 4b7015363378
Node: O básico<2>15364098
Ref: extending/newtypes_tutorial dnt-basics15364240
Ref: 4b7115364240
Ref: extending/newtypes_tutorial the-basics15364240
Ref: 4b7215364240
Node: Adicionando dados e métodos ao exemplo básico15374147
Ref: extending/newtypes_tutorial adding-data-and-methods-to-the-basic-example15374355
Ref: 4b7815374355
Ref: Adicionando dados e métodos ao exemplo básico-Footnote-115391020
Ref: Adicionando dados e métodos ao exemplo básico-Footnote-215391121
Node: Fornecendo controle mais preciso sobre atributos de dados15391259
Ref: extending/newtypes_tutorial providing-finer-control-over-data-attributes15391489
Ref: 4b7f15391489
Ref: Fornecendo controle mais preciso sobre atributos de dados-Footnote-115401526
Node: Apoiando a coleta de lixo cíclica15401967
Ref: extending/newtypes_tutorial supporting-cyclic-garbage-collection15402184
Ref: 4b8115402184
Ref: Apoiando a coleta de lixo cíclica-Footnote-115413085
Node: Criando subclasses de outros tipos15413286
Ref: extending/newtypes_tutorial subclassing-other-types15413437
Ref: 4b8315413437
Node: Defining Extension Types Assorted Topics15418827
Ref: extending/newtypes doc15419036
Ref: 4b8515419036
Ref: extending/newtypes defining-extension-types-assorted-topics15419036
Ref: 4b8615419036
Ref: extending/newtypes new-types-topics15419036
Ref: 4b8715419036
Ref: extending/newtypes translation-repo15419036
Ref: 4b8815419036
Ref: extending/newtypes dnt-type-methods15419133
Ref: 4b8915419133
Node: Finalization and De-allocation15423893
Ref: extending/newtypes finalization-and-de-allocation15424028
Ref: 4b8a15424028
Ref: Finalization and De-allocation-Footnote-115427531
Node: Object Presentation15427573
Ref: extending/newtypes object-presentation15427737
Ref: 4b8c15427737
Node: Attribute Management15429389
Ref: extending/newtypes attribute-management15429540
Ref: 4b8f15429540
Node: Generic Attribute Management15431089
Ref: extending/newtypes generic-attribute-management15431217
Ref: 4b7c15431217
Ref: extending/newtypes id115431217
Ref: 4b9015431217
Node: Type-specific Attribute Management15434789
Ref: extending/newtypes type-specific-attribute-management15434917
Ref: 4b9515434917
Node: Object Comparison15436688
Ref: extending/newtypes object-comparison15436845
Ref: 4b9815436845
Node: Abstract Protocol Support15438628
Ref: extending/newtypes abstract-protocol-support15438787
Ref: 4b9b15438787
Node: Weak Reference Support15444490
Ref: extending/newtypes weak-reference-support15444648
Ref: 4ba015444648
Ref: extending/newtypes weakref-support15444648
Ref: 26ff15444648
Node: More Suggestions15445944
Ref: extending/newtypes more-suggestions15446068
Ref: 4ba115446068
Node: Construindo extensões C e C++15447042
Ref: extending/building doc15447255
Ref: 4ba215447255
Ref: extending/building building15447255
Ref: 4b5115447255
Ref: extending/building building-c-and-c-extensions15447255
Ref: 4ba315447255
Ref: extending/building translation-repo15447255
Ref: 4ba415447255
Ref: extending/building c PyInit_modulename15447804
Ref: 4ba515447804
Ref: extending/building install-index15449102
Ref: f2815449102
Ref: Construindo extensões C e C++-Footnote-115449200
Node: Construindo extensões C e C ++ com setuptools15449242
Ref: extending/building building-c-and-c-extensions-with-setuptools15449355
Ref: 4ba815449355
Ref: extending/building setuptools-index15449355
Ref: f2915449355
Node: Construindo Extensões C e C++ no Windows15449721
Ref: extending/windows doc15449885
Ref: 4ba915449885
Ref: extending/windows building-c-and-c-extensions-on-windows15449885
Ref: 4baa15449885
Ref: extending/windows building-on-windows15449885
Ref: 1fbf15449885
Ref: extending/windows translation-repo15449885
Ref: 4bab15449885
Node: Uma abordagem de livro de receitas15451254
Ref: extending/windows a-cookbook-approach15451411
Ref: 4bac15451411
Ref: extending/windows win-cookbook15451411
Ref: 4bad15451411
Ref: Uma abordagem de livro de receitas-Footnote-115452141
Node: Diferenças entre o Unix e o Windows15452219
Ref: extending/windows differences-between-unix-and-windows15452408
Ref: 4bae15452408
Ref: extending/windows dynamic-linking15452408
Ref: 4baf15452408
Node: Usando DLLs na prática15455723
Ref: extending/windows using-dlls-in-practice15455869
Ref: 4bb015455869
Ref: extending/windows win-dlls15455869
Ref: 4bb115455869
Node: Incorporando o tempo de execução do CPython em uma aplicação maior15457494
Ref: extending/index embedding-the-cpython-runtime-in-a-larger-application15457705
Ref: 4bb215457705
Node: Incorporando o Python numa Outra Aplicação15458195
Ref: extending/embedding doc15458346
Ref: 4bb315458346
Ref: extending/embedding embedding15458346
Ref: 1fdd15458346
Ref: extending/embedding embedding-python-in-another-application15458346
Ref: 4bb415458346
Node: Very High Level Embedding15460802
Ref: extending/embedding high-level-embedding15460961
Ref: 4bb715460961
Ref: extending/embedding very-high-level-embedding15460961
Ref: 4bb815460961
Node: Beyond Very High Level Embedding An overview15463291
Ref: extending/embedding beyond-very-high-level-embedding-an-overview15463473
Ref: 4bb915463473
Ref: extending/embedding lower-level-embedding15463473
Ref: 4bba15463473
Node: Pure Embedding15465192
Ref: extending/embedding id115465374
Ref: 4bbb15465374
Ref: extending/embedding pure-embedding15465374
Ref: 4bbc15465374
Node: Extending Embedded Python15469999
Ref: extending/embedding extending-embedded-python15470160
Ref: 4bbe15470160
Ref: extending/embedding extending-with-embedding15470160
Ref: 4bbf15470160
Node: Embedding Python in C++15472195
Ref: extending/embedding embedding-python-in-c15472387
Ref: 4bc015472387
Ref: extending/embedding embeddingincplusplus15472387
Ref: 4bc115472387
Node: Compiling and Linking under Unix-like systems15472759
Ref: extending/embedding compiling15472917
Ref: 4bbd15472917
Ref: extending/embedding compiling-and-linking-under-unix-like-systems15472917
Ref: 4bc215472917
Node: Manual de referência da API Python/C15475114
Ref: c-api/index doc15475283
Ref: 4bc415475283
Ref: c-api/index c-api-index15475283
Ref: 1d5715475283
Ref: c-api/index python-c-api-reference-manual15475283
Ref: 4bc515475283
Ref: c-api/index translation-repo15475283
Ref: 4bc615475283
Node: Introdução<13>15476268
Ref: c-api/intro doc15476388
Ref: 4bc715476388
Ref: c-api/intro api-intro15476388
Ref: 4bc815476388
Ref: c-api/intro introduction15476388
Ref: 4bc915476388
Node: Padrões de codificação15478243
Ref: c-api/intro coding-standards15478351
Ref: 4bca15478351
Ref: Padrões de codificação-Footnote-115478854
Node: Arquivos de inclusão15478896
Ref: c-api/intro api-includes15479026
Ref: 78415479026
Ref: c-api/intro include-files15479026
Ref: 4bcb15479026
Node: Macros úteis15481845
Ref: c-api/intro useful-macros15481991
Ref: 4bcc15481991
Ref: c-api/intro c PyMODINIT_FUNC15482312
Ref: 151b15482312
Ref: c-api/intro c Py_ABS15483138
Ref: 4bcd15483138
Ref: c-api/intro c Py_ALWAYS_INLINE15483400
Ref: 19f615483400
Ref: c-api/intro c Py_CHARMASK15484533
Ref: 4bce15484533
Ref: c-api/intro c Py_DEPRECATED15484739
Ref: ab315484739
Ref: c-api/intro c Py_GETENV15485031
Ref: 4bcf15485031
Ref: c-api/intro c Py_LOCAL15485225
Ref: 149215485225
Ref: c-api/intro c Py_LOCAL_INLINE15485460
Ref: 149315485460
Ref: c-api/intro c Py_LOCAL_SYMBOL15485607
Ref: 4bd015485607
Ref: c-api/intro c Py_MAX15485896
Ref: 4bd115485896
Ref: c-api/intro c Py_MEMBER_SIZE15486012
Ref: 4bd215486012
Ref: c-api/intro c Py_MIN15486169
Ref: 4bd315486169
Ref: c-api/intro c Py_NO_INLINE15486285
Ref: 19f715486285
Ref: c-api/intro c Py_STRINGIFY15486638
Ref: 4bd415486638
Ref: c-api/intro c Py_UNREACHABLE15486807
Ref: bcd15486807
Ref: c-api/intro c Py_UNUSED15488085
Ref: 180c15488085
Ref: c-api/intro c Py_BUILD_ASSERT15488334
Ref: 172915488334
Ref: c-api/intro c Py_BUILD_ASSERT_EXPR15488700
Ref: 172a15488700
Ref: c-api/intro c PyDoc_STRVAR15489164
Ref: 1aea15489164
Ref: c-api/intro c PyDoc_STR15489784
Ref: 192115489784
Ref: c-api/intro c PyDoc_VAR15490342
Ref: 1b8515490342
Ref: c-api/intro c Py_ARRAY_LENGTH15490703
Ref: 4bd515490703
Ref: c-api/intro c Py_EXPORTED_SYMBOL15491208
Ref: 4bd615491208
Ref: c-api/intro c Py_IMPORTED_SYMBOL15491569
Ref: 4bd715491569
Ref: c-api/intro c PyAPI_FUNC15491803
Ref: 4bd815491803
Ref: c-api/intro c PyAPI_DATA15492106
Ref: 4bd915492106
Ref: Macros úteis-Footnote-115492460
Ref: Macros úteis-Footnote-215492525
Ref: Macros úteis-Footnote-315492567
Node: Objetos tipos e contagens de referências15492609
Ref: c-api/intro api-objects15492748
Ref: 4bda15492748
Ref: c-api/intro objects-types-and-reference-counts15492748
Ref: 4bdb15492748
Node: Contagens de referências<2>15494314
Ref: c-api/intro api-refcounts15494434
Ref: 4bdc15494434
Ref: c-api/intro reference-counts15494434
Ref: 4bdd15494434
Node: Detalhes da contagem de referências15498738
Ref: c-api/intro api-refcountdetails15498839
Ref: 4bde15498839
Ref: c-api/intro reference-count-details15498839
Ref: 4bdf15498839
Node: Tipos15506540
Ref: c-api/intro api-types15506660
Ref: 4be315506660
Ref: c-api/intro types15506660
Ref: 4be415506660
Ref: c-api/intro c Py_ssize_t15507158
Ref: a6915507158
Ref: Tipos-Footnote-115507563
Node: Exceções<21>15507605
Ref: c-api/intro api-exceptions15507753
Ref: 4be515507753
Ref: c-api/intro exceptions15507753
Ref: 4be615507753
Node: Incorporando Python<2>15514390
Ref: c-api/intro api-embedding15514525
Ref: 4be815514525
Ref: c-api/intro embedding-python15514525
Ref: 4be915514525
Node: Compilações de depuração15517993
Ref: c-api/intro api-debugging15518154
Ref: 4beb15518154
Ref: c-api/intro debugging-builds15518154
Ref: 4bec15518154
Ref: c-api/intro c Py_DEBUG15518964
Ref: 435915518964
Node: Ferramentas de terceiros recomendadas<2>15520222
Ref: c-api/intro c-api-tools15520352
Ref: 4b3715520352
Ref: c-api/intro recommended-third-party-tools15520352
Ref: 4bed15520352
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-115521982
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-215522010
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-315522046
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-415522078
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-515522121
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-615522155
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-715522196
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-815522221
Ref: Ferramentas de terceiros recomendadas<2>-Footnote-915522250
Node: Estabilidade da API C15522323
Ref: c-api/stable doc15522481
Ref: 4bee15522481
Ref: c-api/stable c-api-stability15522481
Ref: 4bef15522481
Ref: c-api/stable stable15522481
Ref: 55315522481
Ref: c-api/stable translation-repo15522481
Ref: 4bf015522481
Ref: Estabilidade da API C-Footnote-115524305
Ref: Estabilidade da API C-Footnote-215524347
Node: API C Instável15524402
Ref: c-api/stable id115524526
Ref: 4bf215524526
Ref: c-api/stable unstable-c-api15524526
Ref: 54715524526
Node: Interface Binária de Aplicação Estável15525105
Ref: c-api/stable stable-application-binary-interface15525267
Ref: 4bf315525267
Node: API C Limitada15525664
Ref: c-api/stable id215525778
Ref: 4bf415525778
Ref: c-api/stable limited-c-api15525778
Ref: 39615525778
Ref: c-api/stable c Py_LIMITED_API15526086
Ref: 41e15526086
Node: ABI Estável15527020
Ref: c-api/stable id315527178
Ref: 4bf515527178
Ref: c-api/stable stable-abi15527178
Ref: 4bf615527178
Ref: ABI Estável-Footnote-115528826
Node: Escopo e Desempenho da API Limitada15528868
Ref: c-api/stable limited-api-scope-and-performance15529040
Ref: 4bf715529040
Node: Limitações da API Limitada15530316
Ref: c-api/stable limited-api-caveats15530467
Ref: 4bf915530467
Node: Considerações da plataforma15532321
Ref: c-api/stable platform-considerations15532493
Ref: 4bfa15532493
Ref: c-api/stable stable-abi-platform15532493
Ref: 4bf115532493
Node: Conteúdo da API Limitada15533223
Ref: c-api/stable contents-of-limited-api15533344
Ref: 4bfb15533344
Ref: c-api/stable limited-api-list15533344
Ref: 79a15533344
Node: A camada de nível muito alto15574727
Ref: c-api/veryhigh doc15574893
Ref: 4e5215574893
Ref: c-api/veryhigh the-very-high-level-layer15574893
Ref: 4e5315574893
Ref: c-api/veryhigh translation-repo15574893
Ref: 4e5415574893
Ref: c-api/veryhigh veryhigh15574893
Ref: 4e5515574893
Ref: c-api/veryhigh c PyRun_AnyFile15576037
Ref: 4e5a15576037
Ref: c-api/veryhigh c PyRun_AnyFileFlags15576282
Ref: 4e5c15576282
Ref: c-api/veryhigh c PyRun_AnyFileEx15576543
Ref: 4e5d15576543
Ref: c-api/veryhigh c PyRun_AnyFileExFlags15576791
Ref: 4e5b15576791
Ref: c-api/veryhigh c PyRun_SimpleString15577515
Ref: 4bb515577515
Ref: c-api/veryhigh c PyRun_SimpleStringFlags15577756
Ref: 4e5f15577756
Ref: c-api/veryhigh c PyRun_SimpleFile15578460
Ref: 4bb615578460
Ref: c-api/veryhigh c PyRun_SimpleFileEx15578711
Ref: 4e6015578711
Ref: c-api/veryhigh c PyRun_SimpleFileExFlags15578955
Ref: 1a5615578955
Ref: c-api/veryhigh c PyRun_InteractiveOneObject15579725
Ref: 4e6115579725
Ref: c-api/veryhigh c PyRun_InteractiveOne15580476
Ref: 4e6215580476
Ref: c-api/veryhigh c PyRun_InteractiveOneFlags15580699
Ref: 4e6315580699
Ref: c-api/veryhigh c PyRun_InteractiveLoop15581019
Ref: 4e5e15581019
Ref: c-api/veryhigh c PyRun_InteractiveLoopFlags15581244
Ref: 4e6415581244
Ref: c-api/veryhigh c PyOS_InputHook15581735
Ref: 58515581735
Ref: c-api/veryhigh c PyOS_ReadlineFunctionPointer15582414
Ref: 58615582414
Ref: c-api/veryhigh c PyRun_String15583602
Ref: 1b5215583602
Ref: c-api/veryhigh c PyRun_StringFlags15583905
Ref: 4e6515583905
Ref: c-api/veryhigh c PyRun_File15584655
Ref: 4e6715584655
Ref: c-api/veryhigh c PyRun_FileEx15585005
Ref: 4e6915585005
Ref: c-api/veryhigh c PyRun_FileFlags15585346
Ref: 4e6a15585346
Ref: c-api/veryhigh c PyRun_FileExFlags15585700
Ref: 4e6815585700
Ref: c-api/veryhigh c Py_CompileString15586330
Ref: 88915586330
Ref: c-api/veryhigh c Py_CompileStringFlags15586668
Ref: 4e6b15586668
Ref: c-api/veryhigh c Py_CompileStringObject15586991
Ref: 4e6d15586991
Ref: c-api/veryhigh c Py_CompileStringExFlags15588225
Ref: 4e6c15588225
Ref: c-api/veryhigh c PyEval_EvalCode15588661
Ref: 88a15588661
Ref: c-api/veryhigh c PyEval_EvalCodeEx15589057
Ref: 186215589057
Ref: c-api/veryhigh c PyEval_EvalFrame15589820
Ref: 4c7415589820
Ref: c-api/veryhigh c PyEval_EvalFrameEx15590122
Ref: 106615590122
Ref: c-api/veryhigh c PyEval_MergeCompilerFlags15590950
Ref: 4e6e15590950
Ref: c-api/veryhigh c PyCompilerFlags15591165
Ref: ab015591165
Ref: c-api/veryhigh c PyCompilerFlags cf_flags15591761
Ref: 4e6f15591761
Ref: c-api/veryhigh c PyCompilerFlags cf_feature_version15591834
Ref: 4e7015591834
Ref: c-api/veryhigh c PyCF_ALLOW_TOP_LEVEL_AWAIT15592331
Ref: 4e7115592331
Ref: c-api/veryhigh c PyCF_ONLY_AST15592376
Ref: 4e7215592376
Ref: c-api/veryhigh c PyCF_OPTIMIZED_AST15592408
Ref: 4e7315592408
Ref: c-api/veryhigh c PyCF_TYPE_COMMENTS15592445
Ref: 4e7415592445
Node: Símbolos iniciais disponíveis15593066
Ref: c-api/veryhigh available-start-symbols15593185
Ref: 4e7715593185
Ref: c-api/veryhigh start-symbols15593185
Ref: 4e6615593185
Ref: c-api/veryhigh c Py_eval_input15593260
Ref: 4e5615593260
Ref: c-api/veryhigh c Py_file_input15593418
Ref: 4e5715593418
Ref: c-api/veryhigh c Py_single_input15593728
Ref: 4e5815593728
Ref: c-api/veryhigh c Py_func_type_input15593967
Ref: 4e5915593967
Ref: Símbolos iniciais disponíveis-Footnote-115594463
Ref: Símbolos iniciais disponíveis-Footnote-215594505
Node: Stack Effects15594547
Ref: c-api/veryhigh stack-effects15594666
Ref: 4e7815594666
Ref: c-api/veryhigh c PY_INVALID_STACK_EFFECT15594763
Ref: 4e7915594763
Ref: c-api/veryhigh c PyCompile_OpcodeStackEffect15594946
Ref: 4e7a15594946
Ref: c-api/veryhigh c PyCompile_OpcodeStackEffectWithJump15595251
Ref: 1bcb15595251
Node: Contagem de referências15595786
Ref: c-api/refcounting doc15595958
Ref: 4e7b15595958
Ref: c-api/refcounting countingrefs15595958
Ref: 4e7c15595958
Ref: c-api/refcounting reference-counting15595958
Ref: 4e7d15595958
Ref: c-api/refcounting translation-repo15595958
Ref: 4e7e15595958
Ref: c-api/refcounting c Py_REFCNT15596133
Ref: 8ae15596133
Ref: c-api/refcounting c Py_SET_REFCNT15596963
Ref: 8af15596963
Ref: c-api/refcounting c Py_INCREF15597450
Ref: 56e15597450
Ref: c-api/refcounting c Py_XINCREF15598372
Ref: a6e15598372
Ref: c-api/refcounting c Py_NewRef15598583
Ref: 89e15598583
Ref: c-api/refcounting c Py_XNewRef15599300
Ref: 89f15599300
Ref: c-api/refcounting c Py_DECREF15599616
Ref: 56f15599616
Ref: c-api/refcounting c Py_XDECREF15601247
Ref: 78f15601247
Ref: c-api/refcounting c Py_CLEAR15601486
Ref: 57815601486
Ref: c-api/refcounting c Py_IncRef15602318
Ref: 4dc915602318
Ref: c-api/refcounting c Py_DecRef15602593
Ref: 4dc115602593
Ref: c-api/refcounting c Py_SETREF15602856
Ref: 57915602856
Ref: c-api/refcounting c Py_XSETREF15603618
Ref: 57a15603618
Ref: Contagem de referências-Footnote-115604000
Ref: Contagem de referências-Footnote-215604042
Node: Tratamento de exceções<2>15604084
Ref: c-api/exceptions doc15604242
Ref: 4e7f15604242
Ref: c-api/exceptions exception-handling15604242
Ref: 4e8015604242
Ref: c-api/exceptions exceptionhandling15604242
Ref: 462c15604242
Ref: c-api/exceptions translation-repo15604242
Ref: 4e8115604242
Node: Impressão e limpeza15606712
Ref: c-api/exceptions printing-and-clearing15606829
Ref: 4e8215606829
Ref: c-api/exceptions c PyErr_Clear15606883
Ref: 106915606883
Ref: c-api/exceptions c PyErr_PrintEx15607063
Ref: 4c6715607063
Ref: c-api/exceptions c PyErr_Print15608081
Ref: 1ab915608081
Ref: c-api/exceptions c PyErr_WriteUnraisable15608203
Ref: 34d15608203
Ref: c-api/exceptions c PyErr_FormatUnraisable15609240
Ref: 34c15609240
Ref: c-api/exceptions c PyErr_DisplayException15609783
Ref: 40215609783
Node: Levantando exceções<2>15610073
Ref: c-api/exceptions raising-exceptions15610214
Ref: 4e8315610214
Ref: c-api/exceptions c PyErr_SetString15610456
Ref: 57c15610456
Ref: c-api/exceptions c PyErr_SetObject15610986
Ref: 57b15610986
Ref: c-api/exceptions c PyErr_Format15611252
Ref: ee015611252
Ref: c-api/exceptions c PyErr_FormatV15611782
Ref: edf15611782
Ref: c-api/exceptions c PyErr_SetNone15612156
Ref: 4c7015612156
Ref: c-api/exceptions c PyErr_BadArgument15612325
Ref: 4c6415612325
Ref: c-api/exceptions c PyErr_NoMemory15612634
Ref: 4b4215612634
Ref: c-api/exceptions c PyErr_SetFromErrno15612993
Ref: 4b4115612993
Ref: c-api/exceptions c PyErr_SetFromErrnoWithFilenameObject15613980
Ref: 4c6c15613980
Ref: c-api/exceptions c PyErr_SetFromErrnoWithFilenameObjects15614523
Ref: 4c6d15614523
Ref: c-api/exceptions c PyErr_SetFromErrnoWithFilename15615019
Ref: 180715615019
Ref: c-api/exceptions c PyErr_SetFromWindowsErr15615421
Ref: 4c6e15615421
Ref: c-api/exceptions c PyErr_SetExcFromWindowsErr15616380
Ref: 4c6915616380
Ref: c-api/exceptions c PyErr_SetFromWindowsErrWithFilename15616779
Ref: 180915616779
Ref: c-api/exceptions c PyErr_SetExcFromWindowsErrWithFilenameObject15617461
Ref: 4c6a15617461
Ref: c-api/exceptions c PyErr_SetExcFromWindowsErrWithFilenameObjects15618077
Ref: 4c6b15618077
Ref: c-api/exceptions c PyErr_SetExcFromWindowsErrWithFilename15618559
Ref: 180815618559
Ref: c-api/exceptions c PyErr_SetImportError15619008
Ref: d6015619008
Ref: c-api/exceptions c PyErr_SetImportErrorSubclass15619569
Ref: d3815619569
Ref: c-api/exceptions c PyErr_SyntaxLocationObject15620026
Ref: 4e8415620026
Ref: c-api/exceptions c PyErr_RangedSyntaxLocationObject15620449
Ref: 4e8515620449
Ref: c-api/exceptions c PyErr_SyntaxLocationEx15620803
Ref: 4c7215620803
Ref: c-api/exceptions c PyErr_SyntaxLocation15621196
Ref: 4c7115621196
Ref: c-api/exceptions c PyErr_BadInternalCall15621422
Ref: 4c6515621422
Ref: c-api/exceptions c PyErr_ProgramTextObject15621780
Ref: 4e8615621780
Ref: c-api/exceptions c PyErr_ProgramText15622204
Ref: 4c6815622204
Node: Emitindo avisos15622592
Ref: c-api/exceptions issuing-warnings15622744
Ref: 4e8715622744
Ref: c-api/exceptions c PyErr_WarnEx15623746
Ref: 149415623746
Ref: c-api/exceptions c PyErr_WarnExplicitObject15625042
Ref: 4e8915625042
Ref: c-api/exceptions c PyErr_WarnExplicit15625638
Ref: 180f15625638
Ref: c-api/exceptions c PyErr_WarnFormat15626106
Ref: 4c7315626106
Ref: c-api/exceptions c PyErr_WarnExplicitFormat15626470
Ref: 4e8a15626470
Ref: c-api/exceptions c PyErr_ResourceWarning15626862
Ref: d3915626862
Node: Consultando o indicador de erro15627250
Ref: c-api/exceptions querying-the-error-indicator15627400
Ref: 4e8b15627400
Ref: c-api/exceptions c PyErr_Occurred15627477
Ref: 1a3b15627477
Ref: c-api/exceptions c PyErr_ExceptionMatches15628360
Ref: 4be715628360
Ref: c-api/exceptions c PyErr_GivenExceptionMatches15628683
Ref: 4c6615628683
Ref: c-api/exceptions c PyErr_GetRaisedException15629119
Ref: 3f415629119
Ref: c-api/exceptions c PyErr_SetRaisedException15629978
Ref: 3f715629978
Ref: c-api/exceptions c PyErr_Fetch15630348
Ref: 3f315630348
Ref: c-api/exceptions c PyErr_Restore15631409
Ref: 3f615631409
Ref: c-api/exceptions c PyErr_NormalizeException15632584
Ref: 3f515632584
Ref: c-api/exceptions c PyErr_GetHandledException15633664
Ref: 76f15633664
Ref: c-api/exceptions c PyErr_SetHandledException15634475
Ref: 77015634475
Ref: c-api/exceptions c PyErr_GetExcInfo15635154
Ref: 77215635154
Ref: c-api/exceptions c PyErr_SetExcInfo15636129
Ref: 77115636129
Node: Tratamento de sinal<2>15637313
Ref: c-api/exceptions signal-handling15637468
Ref: 4e8c15637468
Ref: c-api/exceptions c PyErr_CheckSignals15637521
Ref: 46715637521
Ref: c-api/exceptions c PyErr_SetInterrupt15638780
Ref: 4c6f15638780
Ref: c-api/exceptions c PyErr_SetInterruptEx15639125
Ref: 8a215639125
Ref: c-api/exceptions c PySignal_SetWakeupFd15640218
Ref: 142215640218
Node: Classes de exceção15640913
Ref: c-api/exceptions exception-classes15641053
Ref: 4e8d15641053
Ref: c-api/exceptions c PyErr_NewException15641106
Ref: 12ab15641106
Ref: c-api/exceptions c PyErr_NewExceptionWithDoc15642115
Ref: 12aa15642115
Ref: c-api/exceptions c PyExceptionClass_Check15642586
Ref: 4e8e15642586
Ref: c-api/exceptions c PyExceptionClass_Name15642750
Ref: a6f15642750
Node: Objeto Exceção15642943
Ref: c-api/exceptions exception-objects15643089
Ref: 4e8f15643089
Ref: c-api/exceptions c PyExceptionInstance_Check15643134
Ref: 4e9015643134
Ref: c-api/exceptions c PyExceptionInstance_Class15643320
Ref: 4e9115643320
Ref: c-api/exceptions c PyException_GetTraceback15643409
Ref: 4cba15643409
Ref: c-api/exceptions c PyException_SetTraceback15643806
Ref: 1b6115643806
Ref: c-api/exceptions c PyException_GetContext15644066
Ref: 4cb915644066
Ref: c-api/exceptions c PyException_SetContext15644527
Ref: 4cbc15644527
Ref: c-api/exceptions c PyException_GetCause15644854
Ref: 4cb815644854
Ref: c-api/exceptions c PyException_SetCause15645245
Ref: 4cbb15645245
Ref: c-api/exceptions c PyException_GetArgs15645706
Ref: 56a15645706
Ref: c-api/exceptions c PyException_SetArgs15645934
Ref: 56b15645934
Ref: c-api/exceptions c PyUnstable_Exc_PrepReraiseStar15646127
Ref: 4e9215646127
Node: Objetos de exceção Unicode15647073
Ref: c-api/exceptions unicode-exception-objects15647220
Ref: 4e9315647220
Ref: c-api/exceptions unicodeexceptions15647220
Ref: 4e9415647220
Ref: c-api/exceptions c PyUnicodeDecodeError_Create15647373
Ref: 4d7c15647373
Ref: c-api/exceptions c PyUnicodeDecodeError_GetEncoding15647849
Ref: 4d7d15647849
Ref: c-api/exceptions c PyUnicodeEncodeError_GetEncoding15647946
Ref: 4d8515647946
Ref: c-api/exceptions c PyUnicodeDecodeError_GetObject15648187
Ref: 4d7f15648187
Ref: c-api/exceptions c PyUnicodeEncodeError_GetObject15648282
Ref: 4d8715648282
Ref: c-api/exceptions c PyUnicodeTranslateError_GetObject15648377
Ref: 4d8f15648377
Ref: c-api/exceptions c PyUnicodeDecodeError_GetStart15648616
Ref: 4d8115648616
Ref: c-api/exceptions c PyUnicodeEncodeError_GetStart15648711
Ref: 4d8915648711
Ref: c-api/exceptions c PyUnicodeTranslateError_GetStart15648806
Ref: 4d9115648806
Ref: c-api/exceptions c PyUnicodeDecodeError_SetStart15649123
Ref: 4d8415649123
Ref: c-api/exceptions c PyUnicodeEncodeError_SetStart15649217
Ref: 4d8c15649217
Ref: c-api/exceptions c PyUnicodeTranslateError_SetStart15649311
Ref: 4d9415649311
Ref: c-api/exceptions c PyUnicodeDecodeError_GetEnd15649599
Ref: 4d7e15649599
Ref: c-api/exceptions c PyUnicodeEncodeError_GetEnd15649690
Ref: 4d8615649690
Ref: c-api/exceptions c PyUnicodeTranslateError_GetEnd15649781
Ref: 4d8e15649781
Ref: c-api/exceptions c PyUnicodeDecodeError_SetEnd15650114
Ref: 4d8215650114
Ref: c-api/exceptions c PyUnicodeEncodeError_SetEnd15650204
Ref: 4d8a15650204
Ref: c-api/exceptions c PyUnicodeTranslateError_SetEnd15650294
Ref: 4d9215650294
Ref: c-api/exceptions c PyUnicodeDecodeError_GetReason15650554
Ref: 4d8015650554
Ref: c-api/exceptions c PyUnicodeEncodeError_GetReason15650649
Ref: 4d8815650649
Ref: c-api/exceptions c PyUnicodeTranslateError_GetReason15650744
Ref: 4d9015650744
Ref: c-api/exceptions c PyUnicodeDecodeError_SetReason15650983
Ref: 4d8315650983
Ref: c-api/exceptions c PyUnicodeEncodeError_SetReason15651080
Ref: 4d8b15651080
Ref: c-api/exceptions c PyUnicodeTranslateError_SetReason15651177
Ref: 4d9315651177
Node: Controle de recursão15651450
Ref: c-api/exceptions recursion15651608
Ref: 4e9515651608
Ref: c-api/exceptions recursion-control15651608
Ref: 4e9615651608
Ref: c-api/exceptions c Py_EnterRecursiveCall15652047
Ref: 97a15652047
Ref: c-api/exceptions c Py_LeaveRecursiveCall15652994
Ref: 97b15652994
Ref: c-api/exceptions c Py_ReprEnter15653714
Ref: 4dcc15653714
Ref: c-api/exceptions c Py_ReprLeave15654532
Ref: 4dcd15654532
Ref: c-api/exceptions c Py_GetRecursionLimit15654770
Ref: 4dc715654770
Ref: c-api/exceptions c Py_SetRecursionLimit15655229
Ref: 4dce15655229
Node: Exception and warning types15655548
Ref: c-api/exceptions exception-and-warning-types15655688
Ref: 4e9715655688
Ref: c-api/exceptions standardexceptions15655688
Ref: 4e9815655688
Node: Tipos de exceção15656106
Ref: c-api/exceptions exception-types15656212
Ref: 4e9915656212
Ref: c-api/exceptions c PyExc_BaseException15656594
Ref: 4c7b15656594
Ref: c-api/exceptions c PyExc_BaseExceptionGroup15656775
Ref: 4c7c15656775
Ref: c-api/exceptions c PyExc_Exception15656988
Ref: 4c8a15656988
Ref: c-api/exceptions c PyExc_ArithmeticError15657165
Ref: 4c7815657165
Ref: c-api/exceptions c PyExc_AssertionError15657349
Ref: 4c7915657349
Ref: c-api/exceptions c PyExc_AttributeError15657531
Ref: 4c7a15657531
Ref: c-api/exceptions c PyExc_BlockingIOError15657713
Ref: 4c7d15657713
Ref: c-api/exceptions c PyExc_BrokenPipeError15657923
Ref: 4c7e15657923
Ref: c-api/exceptions c PyExc_BufferError15658133
Ref: 4c7f15658133
Ref: c-api/exceptions c PyExc_ChildProcessError15658313
Ref: 4c8115658313
Ref: c-api/exceptions c PyExc_ConnectionAbortedError15658525
Ref: 4c8215658525
Ref: c-api/exceptions c PyExc_ConnectionError15658742
Ref: 4c8315658742
Ref: c-api/exceptions c PyExc_ConnectionRefusedError15658951
Ref: 4c8415658951
Ref: c-api/exceptions c PyExc_ConnectionResetError15659168
Ref: 4c8515659168
Ref: c-api/exceptions c PyExc_EOFError15659399
Ref: 4c8715659399
Ref: c-api/exceptions c PyExc_FileExistsError15659519
Ref: 4c8b15659519
Ref: c-api/exceptions c PyExc_FileNotFoundError15659729
Ref: 4c8c15659729
Ref: c-api/exceptions c PyExc_FloatingPointError15659940
Ref: 4c8d15659940
Ref: c-api/exceptions c PyExc_GeneratorExit15660127
Ref: 4c8f15660127
Ref: c-api/exceptions c PyExc_ImportError15660309
Ref: 4c9115660309
Ref: c-api/exceptions c PyExc_IndentationError15660488
Ref: 4c9315660488
Ref: c-api/exceptions c PyExc_IndexError15660672
Ref: 4c9415660672
Ref: c-api/exceptions c PyExc_InterruptedError15660851
Ref: 4c9515660851
Ref: c-api/exceptions c PyExc_IsADirectoryError15661061
Ref: 4c9615661061
Ref: c-api/exceptions c PyExc_KeyError15661289
Ref: 4c9715661289
Ref: c-api/exceptions c PyExc_KeyboardInterrupt15661408
Ref: 4c9815661408
Ref: c-api/exceptions c PyExc_LookupError15661593
Ref: 4c9915661593
Ref: c-api/exceptions c PyExc_MemoryError15661773
Ref: 4c9a15661773
Ref: c-api/exceptions c PyExc_ModuleNotFoundError15661953
Ref: 4c9b15661953
Ref: c-api/exceptions c PyExc_NameError15662166
Ref: 4c9c15662166
Ref: c-api/exceptions c PyExc_NotADirectoryError15662343
Ref: 4c9d15662343
Ref: c-api/exceptions c PyExc_NotImplementedError15662556
Ref: 4c9e15662556
Ref: c-api/exceptions c PyExc_OSError15662758
Ref: 4b4415662758
Ref: c-api/exceptions c PyExc_OverflowError15662877
Ref: 4c9f15662877
Ref: c-api/exceptions c PyExc_PermissionError15663058
Ref: 4ca115663058
Ref: c-api/exceptions c PyExc_ProcessLookupError15663267
Ref: 4ca215663267
Ref: c-api/exceptions c PyExc_PythonFinalizationError15663480
Ref: 4e9a15663480
Ref: c-api/exceptions c PyExc_RecursionError15663629
Ref: ee115663629
Ref: c-api/exceptions c PyExc_ReferenceError15663837
Ref: 4ca315663837
Ref: c-api/exceptions c PyExc_RuntimeError15664020
Ref: 4ca515664020
Ref: c-api/exceptions c PyExc_StopAsyncIteration15664200
Ref: 4ca715664200
Ref: c-api/exceptions c PyExc_StopIteration15664413
Ref: 4ca815664413
Ref: c-api/exceptions c PyExc_SyntaxError15664594
Ref: 4ca915664594
Ref: c-api/exceptions c PyExc_SystemError15664773
Ref: 4cab15664773
Ref: c-api/exceptions c PyExc_SystemExit15664952
Ref: 4cac15664952
Ref: c-api/exceptions c PyExc_TabError15665146
Ref: 4cad15665146
Ref: c-api/exceptions c PyExc_TimeoutError15665265
Ref: 4cae15665265
Ref: c-api/exceptions c PyExc_TypeError15665471
Ref: 4b4315665471
Ref: c-api/exceptions c PyExc_UnboundLocalError15665648
Ref: 4caf15665648
Ref: c-api/exceptions c PyExc_UnicodeDecodeError15665834
Ref: 4cb015665834
Ref: c-api/exceptions c PyExc_UnicodeEncodeError15666020
Ref: 4cb115666020
Ref: c-api/exceptions c PyExc_UnicodeError15666206
Ref: 4cb215666206
Ref: c-api/exceptions c PyExc_UnicodeTranslateError15666387
Ref: 4cb315666387
Ref: c-api/exceptions c PyExc_ValueError15666577
Ref: 4b4515666577
Ref: c-api/exceptions c PyExc_ZeroDivisionError15666755
Ref: 4b4015666755
Ref: Tipos de exceção-Footnote-115667801
Node: OSError aliases15667843
Ref: c-api/exceptions oserror-aliases15667971
Ref: 4e9b15667971
Ref: c-api/exceptions c PyExc_EnvironmentError15668547
Ref: 4c8915668547
Ref: c-api/exceptions c PyExc_IOError15668727
Ref: 4c9015668727
Ref: c-api/exceptions c PyExc_WindowsError15668898
Ref: 4cb715668898
Ref: c-api/exceptions win15669178
Ref: 4e9c15669178
Node: Warning types15669334
Ref: c-api/exceptions standardwarningcategories15669435
Ref: 4e8815669435
Ref: c-api/exceptions warning-types15669435
Ref: 4e9d15669435
Ref: c-api/exceptions c PyExc_Warning15669824
Ref: 4cb615669824
Ref: c-api/exceptions c PyExc_BytesWarning15669944
Ref: 4c8015669944
Ref: c-api/exceptions c PyExc_DeprecationWarning15670124
Ref: 4c8615670124
Ref: c-api/exceptions c PyExc_EncodingWarning15670310
Ref: 4c8815670310
Ref: c-api/exceptions c PyExc_FutureWarning15670521
Ref: 4c8e15670521
Ref: c-api/exceptions c PyExc_ImportWarning15670702
Ref: 4c9215670702
Ref: c-api/exceptions c PyExc_PendingDeprecationWarning15670883
Ref: 4ca015670883
Ref: c-api/exceptions c PyExc_ResourceWarning15671076
Ref: 4ca415671076
Ref: c-api/exceptions c PyExc_RuntimeWarning15671285
Ref: 4ca615671285
Ref: c-api/exceptions c PyExc_SyntaxWarning15671467
Ref: 4caa15671467
Ref: c-api/exceptions c PyExc_UnicodeWarning15671648
Ref: 4cb415671648
Ref: c-api/exceptions c PyExc_UserWarning15671831
Ref: 4cb515671831
Node: Tracebacks15672101
Ref: c-api/exceptions tracebacks15672211
Ref: 4e9e15672211
Ref: c-api/exceptions c PyTraceBack_Type15672248
Ref: 4d7315672248
Ref: c-api/exceptions c PyTraceBack_Check15672471
Ref: 4e9f15672471
Ref: c-api/exceptions c PyTraceBack_Here15672642
Ref: 4d7115672642
Ref: c-api/exceptions c PyTraceBack_Print15673090
Ref: 4d7215673090
Node: Utilitários<2>15673373
Ref: c-api/utilities doc15673534
Ref: 4ea015673534
Ref: c-api/utilities id115673534
Ref: 4ea115673534
Ref: c-api/utilities translation-repo15673534
Ref: 4ea215673534
Ref: c-api/utilities utilities15673534
Ref: 4ea315673534
Node: Utilitários do sistema operacional15674289
Ref: c-api/sys doc15674405
Ref: 4ea415674405
Ref: c-api/sys operating-system-utilities15674405
Ref: 4ea515674405
Ref: c-api/sys os15674405
Ref: 4ea615674405
Ref: c-api/sys c PyOS_FSPath15674489
Ref: d3a15674489
Ref: c-api/sys c Py_FdIsInteractive15675157
Ref: 4ea715675157
Ref: c-api/sys c PyOS_BeforeFork15675733
Ref: bd815675733
Ref: c-api/sys c PyOS_AfterFork_Parent15676387
Ref: bd915676387
Ref: c-api/sys c PyOS_AfterFork_Child15677164
Ref: 3fb15677164
Ref: c-api/sys c PyOS_AfterFork15678247
Ref: 3fa15678247
Ref: c-api/sys c PyOS_CheckStack15678760
Ref: 192c15678760
Ref: c-api/sys c PyOS_sighandler_t15679307
Ref: 4d2015679307
Ref: c-api/sys c PyOS_getsig15679401
Ref: 158715679401
Ref: c-api/sys c PyOS_setsig15679695
Ref: 158815679695
Ref: c-api/sys c PyOS_InterruptOccurred15680065
Ref: 1acf15680065
Ref: c-api/sys c Py_DecodeLocale15680842
Ref: be015680842
Ref: c-api/sys c Py_EncodeLocale15683407
Ref: be115683407
Node: Funções de sistema15685379
Ref: c-api/sys system-functions15685525
Ref: 4ea915685525
Ref: c-api/sys systemfunctions15685525
Ref: 4eaa15685525
Ref: c-api/sys c PySys_GetObject15685851
Ref: 38915685851
Ref: c-api/sys c PySys_SetObject15686131
Ref: 4d5e15686131
Ref: c-api/sys c PySys_ResetWarnOptions15686453
Ref: 3af15686453
Ref: c-api/sys c PySys_WriteStdout15686839
Ref: 4d6015686839
Ref: c-api/sys c PySys_WriteStderr15687823
Ref: 4d5f15687823
Ref: c-api/sys c PySys_FormatStdout15688044
Ref: 4d5c15688044
Ref: c-api/sys c PySys_FormatStderr15688369
Ref: 4d5b15688369
Ref: c-api/sys c PySys_GetXOptions15688625
Ref: 4d5d15688625
Ref: c-api/sys c PySys_Audit15689008
Ref: 36f15689008
Ref: c-api/sys c PySys_AuditTuple15690532
Ref: 36e15690532
Ref: c-api/sys c PySys_AddAuditHook15690895
Ref: 43fd15690895
Ref: c-api/sys c Py_AuditHookFunction15692832
Ref: 4eab15692832
Ref: Funções de sistema-Footnote-115693355
Node: Controle de processos15693397
Ref: c-api/sys process-control15693530
Ref: 4ead15693530
Ref: c-api/sys processcontrol15693530
Ref: 4eae15693530
Ref: c-api/sys c Py_FatalError15693587
Ref: 98a15693587
Ref: c-api/sys c Py_Exit15694414
Ref: d7215694414
Ref: c-api/sys c Py_AtExit15694851
Ref: 4dbf15694851
Node: Importando módulos<2>15695722
Ref: c-api/import doc15695865
Ref: 4eaf15695865
Ref: c-api/import importing15695865
Ref: 4eb015695865
Ref: c-api/import importing-modules15695865
Ref: 4eb115695865
Ref: c-api/import translation-repo15695865
Ref: 4eb215695865
Ref: c-api/import c PyImport_ImportModule15695917
Ref: 3be15695917
Ref: c-api/import c PyImport_ImportModuleNoBlock15696255
Ref: 3bd15696255
Ref: c-api/import c PyImport_ImportModuleEx15696974
Ref: 11e415696974
Ref: c-api/import c PyImport_ImportModuleLevelObject15697805
Ref: 4cd215697805
Ref: c-api/import c PyImport_ImportModuleLevel15698717
Ref: 11e315698717
Ref: c-api/import c PyImport_Import15699205
Ref: 144315699205
Ref: c-api/import c PyImport_ReloadModule15699811
Ref: 4cd315699811
Ref: c-api/import c PyImport_AddModuleRef15700154
Ref: 35615700154
Ref: c-api/import c PyImport_AddModuleObject15701241
Ref: 4cc915701241
Ref: c-api/import c PyImport_AddModule15701630
Ref: 35715701630
Ref: c-api/import c PyImport_ExecCodeModule15701911
Ref: 4cca15701911
Ref: c-api/import c PyImport_ExecCodeModuleEx15704104
Ref: 4ccb15704104
Ref: c-api/import c PyImport_ExecCodeModuleObject15704549
Ref: 4ccc15704549
Ref: c-api/import c PyImport_ExecCodeModuleWithPathnames15705229
Ref: 4ccd15705229
Ref: c-api/import c PyImport_GetMagicNumber15706032
Ref: 11e215706032
Ref: c-api/import c PyImport_GetMagicTag15706479
Ref: 4cce15706479
Ref: c-api/import c PyImport_GetModuleDict15706846
Ref: 4ccf15706846
Ref: c-api/import c PyImport_GetModule15707170
Ref: bcb15707170
Ref: c-api/import c PyImport_GetImporter15707595
Ref: 180615707595
Ref: c-api/import c PyImport_ImportFrozenModuleObject15708326
Ref: 4cd115708326
Ref: c-api/import c PyImport_ImportFrozenModule15709018
Ref: 4cd015709018
Ref: c-api/import c _frozen15709275
Ref: 77515709275
Ref: c-api/import c PyImport_FrozenModules15709937
Ref: 300015709937
Ref: c-api/import c PyImport_AppendInittab15710398
Ref: 18a415710398
Ref: c-api/import c _inittab15711000
Ref: 4eb315711000
Ref: c-api/import c _inittab name15711330
Ref: 4eb415711330
Ref: c-api/import c _inittab initfunc15711423
Ref: 4eb515711423
Ref: c-api/import c PyImport_ExtendInittab15711569
Ref: 18a515711569
Ref: c-api/import c PyImport_Inittab15712354
Ref: 18a315712354
Ref: Importando módulos<2>-Footnote-115712652
Node: Suporte a marshalling de dados15712694
Ref: c-api/marshal doc15712864
Ref: 4eb615712864
Ref: c-api/marshal data-marshalling-support15712864
Ref: 4eb715712864
Ref: c-api/marshal marshalling-utils15712864
Ref: 4eb815712864
Ref: c-api/marshal translation-repo15712864
Ref: 4eb915712864
Ref: c-api/marshal c PyMarshal_WriteLongToFile15713720
Ref: 79615713720
Ref: c-api/marshal c PyMarshal_WriteObjectToFile15714190
Ref: 79715714190
Ref: c-api/marshal c PyMarshal_WriteObjectToString15714540
Ref: 79915714540
Ref: c-api/marshal c PyMarshal_ReadLongFromFile15714919
Ref: 4eba15714919
Ref: c-api/marshal c PyMarshal_ReadShortFromFile15715278
Ref: 4ebb15715278
Ref: c-api/marshal c PyMarshal_ReadObjectFromFile15715639
Ref: 4ebc15715639
Ref: c-api/marshal c PyMarshal_ReadLastObjectFromFile15716004
Ref: 4ebd15716004
Ref: c-api/marshal c PyMarshal_ReadObjectFromString15716820
Ref: 79815716820
Node: Análise de argumentos e construção de valores15717246
Ref: c-api/arg doc15717428
Ref: 4ebe15717428
Ref: c-api/arg arg-parsing15717428
Ref: 8ad15717428
Ref: c-api/arg parsing-arguments-and-building-values15717428
Ref: 4ebf15717428
Ref: c-api/arg translation-repo15717428
Ref: 4ec015717428
Node: Análise de argumentos<2>15718146
Ref: c-api/arg parsing-arguments15718284
Ref: 4ec115718284
Node: Strings e buffers15719094
Ref: c-api/arg arg-parsing-string-and-buffers15719193
Ref: 38b15719193
Ref: c-api/arg strings-and-buffers15719193
Ref: 4ec215719193
Ref: c-api/arg c-arg-borrowed-buffer15720652
Ref: 4ec315720652
Node: Números<2>15730838
Ref: c-api/arg numbers15730960
Ref: 4ec415730960
Node: Outros objetos15733955
Ref: c-api/arg other-objects15734076
Ref: 4ec615734076
Ref: c-api/arg o-ampersand15734929
Ref: 4ec715734929
Ref: c-api/arg c Py_CLEANUP_SUPPORTED15735738
Ref: 4ec815735738
Node: Funções da API15739621
Ref: c-api/arg api-functions15739722
Ref: 4ec915739722
Ref: c-api/arg c PyArg_ParseTuple15739771
Ref: 57115739771
Ref: c-api/arg c PyArg_VaParse15740128
Ref: 4bfd15740128
Ref: c-api/arg c PyArg_ParseTupleAndKeywords15740400
Ref: 38315740400
Ref: c-api/arg c PyArg_VaParseTupleAndKeywords15741617
Ref: 38415741617
Ref: c-api/arg c PyArg_ValidateKeywordArguments15741963
Ref: 4bfe15741963
Ref: c-api/arg c PyArg_Parse15742331
Ref: 1b5b15742331
Ref: c-api/arg c PyArg_UnpackTuple15743053
Ref: 154f15743053
Ref: c-api/arg c PY_CXX_CONST15745124
Ref: 38515745124
Node: Construindo valores15745568
Ref: c-api/arg building-values15745706
Ref: 4eca15745706
Ref: c-api/arg c Py_BuildValue15745763
Ref: 8ac15745763
Ref: c-api/arg capi-py-buildvalue-format-k15751023
Ref: 163a15751023
Ref: c-api/arg c Py_VaBuildValue15754113
Ref: 4de015754113
Node: Conversão e formação de strings15754421
Ref: c-api/conversion doc15754615
Ref: 4ecb15754615
Ref: c-api/conversion string-conversion15754615
Ref: 4ecc15754615
Ref: c-api/conversion string-conversion-and-formatting15754615
Ref: 4ecd15754615
Ref: c-api/conversion translation-repo15754615
Ref: 4ece15754615
Ref: c-api/conversion c PyOS_snprintf15754765
Ref: 155215754765
Ref: c-api/conversion c PyOS_vsnprintf15755077
Ref: 155315755077
Ref: c-api/conversion c PyOS_strtoul15756881
Ref: 4d2215756881
Ref: c-api/conversion c PyOS_strtol15758023
Ref: 4d2115758023
Ref: c-api/conversion c PyOS_string_to_double15758552
Ref: 12d715758552
Ref: c-api/conversion c PyOS_double_to_string15760454
Ref: 4d1f15760454
Ref: c-api/conversion c Py_DTSF_SIGN15761115
Ref: 4ecf15761115
Ref: c-api/conversion c Py_DTSF_ADD_DOT_015761265
Ref: 4ed015761265
Ref: c-api/conversion c Py_DTSF_ALT15761394
Ref: 4ed115761394
Ref: c-api/conversion c Py_DTSF_NO_NEG_015761610
Ref: 4ed215761610
Ref: c-api/conversion c Py_DTST_FINITE15762235
Ref: 4ed315762235
Ref: c-api/conversion c Py_DTST_INFINITE15762433
Ref: 4ed415762433
Ref: c-api/conversion c Py_DTST_NAN15762626
Ref: 4ed515762626
Ref: c-api/conversion c PyOS_mystricmp15762990
Ref: 1ac815762990
Ref: c-api/conversion c PyOS_mystrnicmp15763062
Ref: 1ac715763062
Ref: c-api/conversion c PyOS_stricmp15763951
Ref: 4ed615763951
Ref: c-api/conversion c PyOS_strnicmp15764021
Ref: 4ed715764021
Ref: Conversão e formação de strings-Footnote-115764465
Ref: Conversão e formação de strings-Footnote-215764513
Ref: Conversão e formação de strings-Footnote-315764562
Ref: Conversão e formação de strings-Footnote-415764609
Node: Classificação e conversão de caracteres15764655
Ref: c-api/conversion character-classification-and-conversion15764814
Ref: 4ed815764814
Ref: c-api/conversion c Py_ISALNUM15765113
Ref: 139715765113
Ref: c-api/conversion c Py_ISALPHA15765223
Ref: 139815765223
Ref: c-api/conversion c Py_ISDIGIT15765355
Ref: 139915765355
Ref: c-api/conversion c Py_ISLOWER15765469
Ref: 139a15765469
Ref: c-api/conversion c Py_ISUPPER15765594
Ref: 139c15765594
Ref: c-api/conversion c Py_ISSPACE15765719
Ref: 139b15765719
Ref: c-api/conversion c Py_ISXDIGIT15765948
Ref: 139d15765948
Ref: c-api/conversion c Py_TOLOWER15766090
Ref: 139e15766090
Ref: c-api/conversion c Py_TOUPPER15766180
Ref: 139f15766180
Node: API do PyHash15766270
Ref: c-api/hash doc15766404
Ref: 4ed915766404
Ref: c-api/hash pyhash-api15766404
Ref: 4eda15766404
Ref: c-api/hash translation-repo15766404
Ref: 4edb15766404
Ref: c-api/hash c Py_hash_t15766545
Ref: 12a515766545
Ref: c-api/hash c Py_uhash_t15766654
Ref: 4edc15766654
Ref: c-api/hash c Py_HASH_ALGORITHM15766764
Ref: 4edd15766764
Ref: c-api/hash c Py_HASH_FNV15767037
Ref: 4ede15767037
Ref: c-api/hash c Py_HASH_SIPHASH2415767062
Ref: 4edf15767062
Ref: c-api/hash c Py_HASH_SIPHASH1315767093
Ref: 4ee015767093
Ref: c-api/hash c Py_HASH_CUTOFF15767553
Ref: 4ee115767553
Ref: c-api/hash c PyHASH_MODULUS15768296
Ref: 175f15768296
Ref: c-api/hash c PyHASH_BITS15768521
Ref: 176015768521
Ref: c-api/hash c PyHASH_MULTIPLIER15768648
Ref: 170c15768648
Ref: c-api/hash c PyHASH_INF15768785
Ref: 176115768785
Ref: c-api/hash c PyHASH_IMAG15768970
Ref: 176215768970
Ref: c-api/hash c PyHash_FuncDef15769180
Ref: 4ee215769180
Ref: c-api/hash c PyHash_FuncDef hash15769299
Ref: 4ee415769299
Ref: c-api/hash c PyHash_FuncDef name15769437
Ref: 4ee515769437
Ref: c-api/hash c PyHash_FuncDef hash_bits15769625
Ref: 4ee615769625
Ref: c-api/hash c PyHash_FuncDef seed_bits15769806
Ref: 4ee715769806
Ref: c-api/hash c PyHash_GetFuncDef15770014
Ref: 4ee315770014
Ref: c-api/hash c Py_HashPointer15770267
Ref: 36815770267
Ref: c-api/hash c PyObject_GenericHash15770618
Ref: 36715770618
Ref: API do PyHash-Footnote-115771003
Ref: API do PyHash-Footnote-215771059
Node: Reflexão15771101
Ref: c-api/reflection doc15771233
Ref: 4ee815771233
Ref: c-api/reflection id115771233
Ref: 4ee915771233
Ref: c-api/reflection reflection15771233
Ref: 4eea15771233
Ref: c-api/reflection translation-repo15771233
Ref: 4eeb15771233
Ref: c-api/reflection c PyEval_GetBuiltins15771267
Ref: 34f15771267
Ref: c-api/reflection c PyEval_GetLocals15771695
Ref: 35315771695
Ref: c-api/reflection c PyEval_GetGlobals15773331
Ref: 35115773331
Ref: c-api/reflection c PyEval_GetFrame15773730
Ref: 18c115773730
Ref: c-api/reflection c PyEval_GetFrameBuiltins15774060
Ref: 34e15774060
Ref: c-api/reflection c PyEval_GetFrameLocals15774449
Ref: 35215774449
Ref: c-api/reflection c PyEval_GetFrameGlobals15775100
Ref: 35015775100
Ref: c-api/reflection c PyEval_GetFuncName15775530
Ref: 4c7615775530
Ref: c-api/reflection c PyEval_GetFuncDesc15775759
Ref: 4c7515775759
Ref: Reflexão-Footnote-115776243
Node: Registro de codec e funções de suporte15776285
Ref: c-api/codec doc15776416
Ref: 4eec15776416
Ref: c-api/codec codec-registry15776416
Ref: d5715776416
Ref: c-api/codec codec-registry-and-support-functions15776416
Ref: 4eed15776416
Ref: c-api/codec translation-repo15776416
Ref: 4eee15776416
Ref: c-api/codec c PyCodec_Register15776511
Ref: 4c3f15776511
Ref: c-api/codec c PyCodec_Unregister15776880
Ref: 89b15776880
Ref: c-api/codec c PyCodec_KnownEncoding15777286
Ref: 4c3d15777286
Ref: c-api/codec c PyCodec_Encode15777547
Ref: 40015777547
Ref: c-api/codec c PyCodec_Decode15778184
Ref: 3ff15778184
Node: API de pesquisa de codec15778981
Ref: c-api/codec codec-lookup-api15779157
Ref: 4eef15779157
Ref: c-api/codec c PyCodec_Encoder15779564
Ref: 4c3915779564
Ref: c-api/codec c PyCodec_Decoder15779796
Ref: 4c3815779796
Ref: c-api/codec c PyCodec_IncrementalEncoder15780030
Ref: 4c3c15780030
Ref: c-api/codec c PyCodec_IncrementalDecoder15780310
Ref: 4c3b15780310
Ref: c-api/codec c PyCodec_StreamReader15780590
Ref: 4c4215780590
Ref: c-api/codec c PyCodec_StreamWriter15780891
Ref: 4c4315780891
Node: API de registro de tratamentos de erros de decodificação Unicode15781192
Ref: c-api/codec registry-api-for-unicode-encoding-error-handlers15781409
Ref: 4ef015781409
Ref: c-api/codec c PyCodec_RegisterError15781560
Ref: 4c4015781560
Ref: c-api/codec c PyCodec_LookupError15782806
Ref: 4c3e15782806
Ref: c-api/codec c PyCodec_StrictErrors15783222
Ref: 4c4415783222
Ref: c-api/codec c PyCodec_IgnoreErrors15783408
Ref: 4c3a15783408
Ref: c-api/codec c PyCodec_ReplaceErrors15783637
Ref: 4c4115783637
Ref: c-api/codec c PyCodec_XMLCharRefReplaceErrors15783864
Ref: 4c4515783864
Ref: c-api/codec c PyCodec_BackslashReplaceErrors15784112
Ref: 4c3715784112
Ref: c-api/codec c PyCodec_NameReplaceErrors15784388
Ref: ede15784388
Node: Variáveis utilitárias de codec15784692
Ref: c-api/codec codec-utility-variables15784876
Ref: 4ef115784876
Ref: c-api/codec c Py_hexdigits15784959
Ref: 4ef215784959
Node: API C PyTime15785140
Ref: c-api/time doc15785285
Ref: 15a15785285
Ref: c-api/time c-api-time15785285
Ref: 4ef315785285
Ref: c-api/time pytime-c-api15785285
Ref: 4ef415785285
Ref: c-api/time translation-repo15785285
Ref: 4ef515785285
Node: Tipos<2>15785675
Ref: c-api/time types15785762
Ref: 4ef715785762
Ref: c-api/time c PyTime_t15785793
Ref: 32d15785793
Ref: c-api/time c PyTime_MIN15786406
Ref: 32e15786406
Ref: c-api/time c PyTime_MAX15786500
Ref: 32f15786500
Node: Funções de relógio15786594
Ref: c-api/time clock-functions15786718
Ref: 4ef815786718
Ref: c-api/time c PyTime_Monotonic15787547
Ref: 33115787547
Ref: c-api/time c PyTime_PerfCounter15787723
Ref: 33315787723
Ref: c-api/time c PyTime_Time15787908
Ref: 33515787908
Node: Funções de relógio brutas15788080
Ref: c-api/time raw-clock-functions15788219
Ref: 4ef915788219
Ref: c-api/time c PyTime_MonotonicRaw15788785
Ref: 33215788785
Ref: c-api/time c PyTime_PerfCounterRaw15788973
Ref: 33415788973
Ref: c-api/time c PyTime_TimeRaw15789165
Ref: 33615789165
Node: Funções de conversão15789343
Ref: c-api/time conversion-functions15789452
Ref: 4efa15789452
Ref: c-api/time c PyTime_AsSecondsDouble15789516
Ref: 33015789516
Node: Suporte a Mapas do Perf15789776
Ref: c-api/perfmaps doc15789872
Ref: 4efb15789872
Ref: c-api/perfmaps perfmaps15789872
Ref: 4efc15789872
Ref: c-api/perfmaps support-for-perf-maps15789872
Ref: 4efd15789872
Ref: c-api/perfmaps translation-repo15789872
Ref: 4efe15789872
Ref: c-api/perfmaps c PyUnstable_PerfMapState_Init15790666
Ref: 182f15790666
Ref: c-api/perfmaps c PyUnstable_WritePerfMapEntry15791622
Ref: 182e15791622
Ref: c-api/perfmaps c PyUnstable_PerfMapState_Fini15792503
Ref: 183015792503
Ref: Suporte a Mapas do Perf-Footnote-115793127
Ref: Suporte a Mapas do Perf-Footnote-215793184
Node: Camada de Objetos Abstratos15793308
Ref: c-api/abstract doc15793469
Ref: 4eff15793469
Ref: c-api/abstract abstract15793469
Ref: 4b9c15793469
Ref: c-api/abstract abstract-objects-layer15793469
Ref: 4f0015793469
Ref: c-api/abstract translation-repo15793469
Ref: 4f0115793469
Node: Protocolo de objeto15794275
Ref: c-api/object doc15794387
Ref: 4f0215794387
Ref: c-api/object object15794387
Ref: 4f0315794387
Ref: c-api/object object-protocol15794387
Ref: 4f0415794387
Ref: c-api/object c Py_GetConstant15794440
Ref: 35415794440
Ref: c-api/object c Py_CONSTANT_NONE15795133
Ref: 4f0515795133
Ref: c-api/object c Py_CONSTANT_FALSE15795337
Ref: 4f0615795337
Ref: c-api/object c Py_CONSTANT_TRUE15795540
Ref: 4f0715795540
Ref: c-api/object c Py_CONSTANT_ELLIPSIS15795747
Ref: 4f0815795747
Ref: c-api/object c Py_CONSTANT_NOT_IMPLEMENTED15795962
Ref: 4f0915795962
Ref: c-api/object c Py_CONSTANT_ZERO15796164
Ref: 4f0a15796164
Ref: c-api/object c Py_CONSTANT_ONE15796357
Ref: 4f0b15796357
Ref: c-api/object c Py_CONSTANT_EMPTY_STR15796557
Ref: 4f0c15796557
Ref: c-api/object c Py_CONSTANT_EMPTY_BYTES15796754
Ref: 4f0d15796754
Ref: c-api/object c Py_CONSTANT_EMPTY_TUPLE15796950
Ref: 4f0e15796950
Ref: c-api/object c Py_GetConstantBorrowed15797261
Ref: 35515797261
Ref: c-api/object c Py_NotImplemented15797837
Ref: 4f0f15797837
Ref: c-api/object c Py_RETURN_NOTIMPLEMENTED15798041
Ref: 15e615798041
Ref: c-api/object c Py_PRINT_RAW15798291
Ref: 4f1015798291
Ref: c-api/object c PyObject_Print15798579
Ref: 16dc15798579
Ref: c-api/object c PyObject_HasAttrWithError15798961
Ref: 37a15798961
Ref: c-api/object c PyObject_HasAttrStringWithError15799348
Ref: 37c15799348
Ref: c-api/object c PyObject_HasAttr15799733
Ref: 37b15799733
Ref: c-api/object c PyObject_HasAttrString15800381
Ref: 37d15800381
Ref: c-api/object c PyObject_GetAttr15801125
Ref: 34715801125
Ref: c-api/object c PyObject_GetAttrString15801642
Ref: 34815801642
Ref: c-api/object c PyObject_GetOptionalAttr15802144
Ref: 34915802144
Ref: c-api/object c PyObject_GetOptionalAttrString15802870
Ref: 34a15802870
Ref: c-api/object c PyObject_GenericGetAttr15803275
Ref: 4d2b15803275
Ref: c-api/object c PyObject_SetAttr15803958
Ref: 4d3415803958
Ref: c-api/object c PyObject_SetAttrString15804538
Ref: 16ec15804538
Ref: c-api/object c PyObject_GenericSetAttr15805468
Ref: 4d2c15805468
Ref: c-api/object c PyObject_DelAttr15806168
Ref: 161f15806168
Ref: c-api/object c PyObject_DelAttrString15806474
Ref: 162015806474
Ref: c-api/object c PyObject_GenericGetDict15807277
Ref: 1a9215807277
Ref: c-api/object c PyObject_GenericSetDict15808034
Ref: 4d2d15808034
Ref: c-api/object c _PyObject_GetDictPtr15808380
Ref: 4f1115808380
Ref: c-api/object c PyObject_RichCompare15808808
Ref: 4b9a15808808
Ref: c-api/object c PyObject_RichCompareBool15809537
Ref: 1b1b15809537
Ref: c-api/object c PyObject_Format15810075
Ref: 4d2a15810075
Ref: c-api/object c PyObject_Repr15810516
Ref: 106715810516
Ref: c-api/object c PyObject_ASCII15811100
Ref: 4d2315811100
Ref: c-api/object c PyObject_Str15811646
Ref: 106815811646
Ref: c-api/object c PyObject_Bytes15812279
Ref: 4d2515812279
Ref: c-api/object c PyObject_IsSubclass15812768
Ref: ed615812768
Ref: c-api/object c PyObject_IsInstance15813789
Ref: ed515813789
Ref: c-api/object c PyObject_Hash15814810
Ref: 40315814810
Ref: c-api/object c PyObject_HashNotImplemented15815218
Ref: 140d15815218
Ref: c-api/object c PyObject_IsTrue15815642
Ref: 4d3015815642
Ref: c-api/object c PyObject_Not15815921
Ref: 4d3215815921
Ref: c-api/object c PyObject_Type15816193
Ref: 4d3615816193
Ref: c-api/object c PyObject_TypeCheck15816901
Ref: 1a4115816901
Ref: c-api/object c PyObject_Size15817126
Ref: 4d3515817126
Ref: c-api/object c PyObject_Length15817193
Ref: 4d3115817193
Ref: c-api/object c PyObject_LengthHint15817559
Ref: 103a15817559
Ref: c-api/object c PyObject_GetItem15818025
Ref: 4be215818025
Ref: c-api/object c PyObject_SetItem15818358
Ref: 4be015818358
Ref: c-api/object c PyObject_DelItem15818742
Ref: 4d2715818742
Ref: c-api/object c PyObject_DelItemString15819014
Ref: 4d2815819014
Ref: c-api/object c PyObject_Dir15819314
Ref: 4d2915819314
Ref: c-api/object c PyObject_GetIter15819909
Ref: 4d2f15819909
Ref: c-api/object c PyObject_SelfIter15820339
Ref: 4d3315820339
Ref: c-api/object c PyObject_GetAIter15820686
Ref: 4d2e15820686
Ref: c-api/object c PyObject_GetTypeData15821254
Ref: 54915821254
Ref: c-api/object c PyType_GetTypeDataSize15821732
Ref: 54a15821732
Ref: c-api/object c PyObject_GetItemData15822419
Ref: 54c15822419
Ref: c-api/object c PyObject_VisitManagedDict15822767
Ref: 36915822767
Ref: c-api/object c PyObject_ClearManagedDict15823087
Ref: 36a15823087
Ref: Protocolo de objeto-Footnote-115823403
Ref: Protocolo de objeto-Footnote-215823445
Node: Protocolo de chamada15823487
Ref: c-api/call doc15823628
Ref: 4f1815823628
Ref: c-api/call call15823628
Ref: 58315823628
Ref: c-api/call call-protocol15823628
Ref: 4f1915823628
Ref: c-api/call translation-repo15823628
Ref: 4f1a15823628
Node: O protocolo tp_call15823875
Ref: c-api/call the-tp-call-protocol15823982
Ref: 4f1b15823982
Node: O protocolo vectorcall15824761
Ref: c-api/call the-vectorcall-protocol15824902
Ref: 4f1d15824902
Ref: c-api/call vectorcall15824902
Ref: 55215824902
Ref: c-api/call c vectorcallfunc15826815
Ref: 55715826815
Ref: c-api/call c PY_VECTORCALL_ARGUMENTS_OFFSET15827926
Ref: 55e15827926
Ref: O protocolo vectorcall-Footnote-115829179
Node: Controle de recursão<2>15829221
Ref: c-api/call recursion-control15829349
Ref: 4f1f15829349
Node: API de suporte à chamada de vetores15829809
Ref: c-api/call vectorcall-support-api15829937
Ref: 4f2015829937
Ref: c-api/call c PyVectorcall_NARGS15830027
Ref: 55515830027
Ref: c-api/call c PyVectorcall_Function15830502
Ref: 4f2115830502
Ref: c-api/call c PyVectorcall_Call15831046
Ref: 55615831046
Node: API de chamada de objetos15831678
Ref: c-api/call capi-call15831825
Ref: 4f1c15831825
Ref: c-api/call object-calling-api15831825
Ref: 4f2215831825
Ref: c-api/call c PyObject_Call15836513
Ref: 39c15836513
Ref: c-api/call c PyObject_CallNoArgs15837237
Ref: 39b15837237
Ref: c-api/call c PyObject_CallOneArg15837734
Ref: 97f15837734
Ref: c-api/call c PyObject_CallObject15838156
Ref: 4b5615838156
Ref: c-api/call c PyObject_CallFunction15838690
Ref: 39e15838690
Ref: c-api/call c PyObject_CallMethod15839588
Ref: 39f15839588
Ref: c-api/call c PyObject_CallFunctionObjArgs15840553
Ref: 4d2615840553
Ref: c-api/call c PyObject_CallMethodObjArgs15841161
Ref: 1b7415841161
Ref: c-api/call c PyObject_CallMethodNoArgs15841771
Ref: 4f2315841771
Ref: c-api/call c PyObject_CallMethodOneArg15842171
Ref: 4f2415842171
Ref: c-api/call c _PyObject_Vectorcall15842610
Ref: 4f2615842610
Ref: c-api/call c PyObject_Vectorcall15842610
Ref: 55c15842610
Ref: c-api/call c PyObject_VectorcallDict15843421
Ref: 4f2515843421
Ref: c-api/call c PyObject_VectorcallMethod15844178
Ref: 55d15844178
Node: API de suporte a chamadas15845331
Ref: c-api/call call-support-api15845447
Ref: 4f2715845447
Ref: c-api/call c PyCallable_Check15845516
Ref: 4c2b15845516
Node: Protocolo de número15845763
Ref: c-api/number doc15845908
Ref: 4f2815845908
Ref: c-api/number number15845908
Ref: 4f2915845908
Ref: c-api/number number-protocol15845908
Ref: 4f2a15845908
Ref: c-api/number translation-repo15845908
Ref: 4f2b15845908
Ref: c-api/number c PyNumber_Check15845962
Ref: a7015845962
Ref: c-api/number c PyNumber_Add15846289
Ref: 4d0215846289
Ref: c-api/number c PyNumber_Subtract15846607
Ref: 4d1c15846607
Ref: c-api/number c PyNumber_Multiply15846940
Ref: 4d1515846940
Ref: c-api/number c PyNumber_MatrixMultiply15847275
Ref: ee515847275
Ref: c-api/number c PyNumber_FloorDivide15847680
Ref: 4d0615847680
Ref: c-api/number c PyNumber_TrueDivide15848005
Ref: 4d1d15848005
Ref: c-api/number c PyNumber_Remainder15848623
Ref: 4d1a15848623
Ref: c-api/number c PyNumber_Divmod15848951
Ref: 4d0515848951
Ref: c-api/number c PyNumber_Power15849293
Ref: 4d1915849293
Ref: c-api/number c PyNumber_Negative15849814
Ref: 4d1615849814
Ref: c-api/number c PyNumber_Positive15850098
Ref: 4d1815850098
Ref: c-api/number c PyNumber_Absolute15850366
Ref: 4d0115850366
Ref: c-api/number c PyNumber_Invert15850654
Ref: 4d1315850654
Ref: c-api/number c PyNumber_Lshift15850944
Ref: 4d1415850944
Ref: c-api/number c PyNumber_Rshift15851283
Ref: 4d1b15851283
Ref: c-api/number c PyNumber_And15851623
Ref: 4d0315851623
Ref: c-api/number c PyNumber_Xor15851956
Ref: 4d1e15851956
Ref: c-api/number c PyNumber_Or15852297
Ref: 4d1715852297
Ref: c-api/number c PyNumber_InPlaceAdd15852628
Ref: 4d0715852628
Ref: c-api/number c PyNumber_InPlaceSubtract15853009
Ref: 4d1015853009
Ref: c-api/number c PyNumber_InPlaceMultiply15853402
Ref: 4d0b15853402
Ref: c-api/number c PyNumber_InPlaceMatrixMultiply15853794
Ref: ee615853794
Ref: c-api/number c PyNumber_InPlaceFloorDivide15854264
Ref: 4d0915854264
Ref: c-api/number c PyNumber_InPlaceTrueDivide15854673
Ref: 4d1115854673
Ref: c-api/number c PyNumber_InPlaceRemainder15855360
Ref: 4d0e15855360
Ref: c-api/number c PyNumber_InPlacePower15855751
Ref: 4d0d15855751
Ref: c-api/number c PyNumber_InPlaceLshift15856404
Ref: 4d0a15856404
Ref: c-api/number c PyNumber_InPlaceRshift15856812
Ref: 4d0f15856812
Ref: c-api/number c PyNumber_InPlaceAnd15857221
Ref: 4d0815857221
Ref: c-api/number c PyNumber_InPlaceXor15857623
Ref: 4d1215857623
Ref: c-api/number c PyNumber_InPlaceOr15858033
Ref: 4d0c15858033
Ref: c-api/number c PyNumber_Long15858433
Ref: a7115858433
Ref: c-api/number c PyNumber_Float15858746
Ref: a7215858746
Ref: c-api/number c PyNumber_Index15859059
Ref: 89715859059
Ref: c-api/number c PyNumber_ToBase15859525
Ref: 18fe15859525
Ref: c-api/number c PyNumber_AsSsize_t15860053
Ref: 4d0415860053
Ref: c-api/number c PyIndex_Check15860861
Ref: 99115860861
Node: Protocolo de sequência15861164
Ref: c-api/sequence doc15861312
Ref: 4f2c15861312
Ref: c-api/sequence sequence15861312
Ref: 4f2d15861312
Ref: c-api/sequence sequence-protocol15861312
Ref: 4f2e15861312
Ref: c-api/sequence translation-repo15861312
Ref: 4f2f15861312
Ref: c-api/sequence c PySequence_Check15861372
Ref: 4d3d15861372
Ref: c-api/sequence c PySequence_Size15861844
Ref: 1bcc15861844
Ref: c-api/sequence c PySequence_Length15861913
Ref: 4d4715861913
Ref: c-api/sequence c PySequence_Concat15862180
Ref: 4d3e15862180
Ref: c-api/sequence c PySequence_Repeat15862501
Ref: 4d4915862501
Ref: c-api/sequence c PySequence_InPlaceConcat15862847
Ref: 4d4415862847
Ref: c-api/sequence c PySequence_InPlaceRepeat15863235
Ref: 4d4515863235
Ref: c-api/sequence c PySequence_GetItem15863647
Ref: 1bcd15863647
Ref: c-api/sequence c PySequence_GetSlice15863935
Ref: 4d4315863935
Ref: c-api/sequence c PySequence_SetItem15864280
Ref: 1bce15864280
Ref: c-api/sequence c PySequence_DelItem15864816
Ref: 1bcf15864816
Ref: c-api/sequence c PySequence_SetSlice15865058
Ref: 4d4a15865058
Ref: c-api/sequence c PySequence_DelSlice15865353
Ref: 4d4115865353
Ref: c-api/sequence c PySequence_Count15865644
Ref: 4d4015865644
Ref: c-api/sequence c PySequence_Contains15866013
Ref: 4d3f15866013
Ref: c-api/sequence c PySequence_Index15866344
Ref: 4d4615866344
Ref: c-api/sequence c PySequence_List15866644
Ref: 4d4815866644
Ref: c-api/sequence c PySequence_Tuple15867008
Ref: 4d4b15867008
Ref: c-api/sequence c PySequence_Fast15867455
Ref: 4d4215867455
Ref: c-api/sequence c PySequence_Fast_GET_SIZE15868247
Ref: 4f3115868247
Ref: c-api/sequence c PySequence_Fast_GET_ITEM15868677
Ref: 4f3215868677
Ref: c-api/sequence c PySequence_Fast_ITEMS15868990
Ref: 4f3315868990
Ref: c-api/sequence c PySequence_ITEM15869438
Ref: 4f3415869438
Node: Protocolo de mapeamento15869827
Ref: c-api/mapping doc15869973
Ref: 4f3515869973
Ref: c-api/mapping mapping15869973
Ref: 4f3615869973
Ref: c-api/mapping mapping-protocol15869973
Ref: 4f3715869973
Ref: c-api/mapping translation-repo15869973
Ref: 4f3815869973
Ref: c-api/mapping c PyMapping_Check15870146
Ref: 4ced15870146
Ref: c-api/mapping c PyMapping_Size15870590
Ref: 1bd015870590
Ref: c-api/mapping c PyMapping_Length15870658
Ref: 4cef15870658
Ref: c-api/mapping c PyMapping_GetItemString15870928
Ref: 4cee15870928
Ref: c-api/mapping c PyMapping_GetOptionalItem15871292
Ref: 34515871292
Ref: c-api/mapping c PyMapping_GetOptionalItemString15872023
Ref: 34615872023
Ref: c-api/mapping c PyMapping_SetItemString15872427
Ref: 4cf015872427
Ref: c-api/mapping c PyMapping_DelItem15872751
Ref: 4f3915872751
Ref: c-api/mapping c PyMapping_DelItemString15872879
Ref: 4f3a15872879
Ref: c-api/mapping c PyMapping_HasKeyWithError15873138
Ref: 37e15873138
Ref: c-api/mapping c PyMapping_HasKeyStringWithError15873512
Ref: 38015873512
Ref: c-api/mapping c PyMapping_HasKey15873895
Ref: 37f15873895
Ref: c-api/mapping c PyMapping_HasKeyString15874563
Ref: 38115874563
Ref: c-api/mapping c PyMapping_Keys15875300
Ref: bd515875300
Ref: c-api/mapping c PyMapping_Values15875651
Ref: bd615875651
Ref: c-api/mapping c PyMapping_Items15876005
Ref: bd715876005
Node: Protocolo Iterador15876422
Ref: c-api/iter doc15876564
Ref: 4f3b15876564
Ref: c-api/iter iterator15876564
Ref: 4f3c15876564
Ref: c-api/iter iterator-protocol15876564
Ref: 4f3d15876564
Ref: c-api/iter translation-repo15876564
Ref: 4f3e15876564
Ref: c-api/iter c PyIter_Check15876682
Ref: 1a3e15876682
Ref: c-api/iter c PyAIter_Check15876987
Ref: 4bfc15876987
Ref: c-api/iter c PyIter_Next15877305
Ref: 4cd615877305
Ref: c-api/iter c PySendResult15878367
Ref: 4f3f15878367
Ref: c-api/iter c PyIter_Send15878533
Ref: 89c15878533
Node: Protocolo de buffer15879150
Ref: c-api/buffer doc15879260
Ref: 4f4015879260
Ref: c-api/buffer buffer-protocol15879260
Ref: 4f4115879260
Ref: c-api/buffer bufferobjects15879260
Ref: 2e815879260
Ref: c-api/buffer translation-repo15879260
Ref: 4f4215879260
Node: Estrutura de Buffer15882303
Ref: c-api/buffer buffer-structure15882419
Ref: 4f4415882419
Ref: c-api/buffer id115882419
Ref: 4f4515882419
Ref: c-api/buffer c Py_buffer15883657
Ref: 75815883657
Ref: c-api/buffer c Py_buffer buf15883781
Ref: 4f4715883781
Ref: c-api/buffer c Py_buffer obj15884250
Ref: 4f4915884250
Ref: c-api/buffer c Py_buffer len15884952
Ref: 4f4a15884952
Ref: c-api/buffer c Py_buffer readonly15885581
Ref: 4f4b15885581
Ref: c-api/buffer c Py_buffer itemsize15885754
Ref: 4f4c15885754
Ref: c-api/buffer c Py_buffer format15886725
Ref: 4f4d15886725
Ref: c-api/buffer c Py_buffer ndim15887069
Ref: 4f4f15887069
Ref: c-api/buffer c Py_buffer shape15887502
Ref: 4f4e15887502
Ref: c-api/buffer c Py_buffer strides15888119
Ref: 4f4815888119
Ref: c-api/buffer c Py_buffer suboffsets15888716
Ref: 4f5015888716
Ref: c-api/buffer c Py_buffer internal15889735
Ref: 4f5215889735
Ref: c-api/buffer c PyBUF_MAX_NDIM15890158
Ref: 4c0615890158
Node: Tipos de solicitação do buffer15890514
Ref: c-api/buffer buffer-request-types15890656
Ref: 470515890656
Ref: c-api/buffer id215890656
Ref: 4f5315890656
Node: campos independentes do pedido15891344
Ref: c-api/buffer request-independent-fields15891469
Ref: 4f5415891469
Node: apenas em formato15891752
Ref: c-api/buffer readonly-format15891911
Ref: 4f5515891911
Ref: c-api/buffer c PyBUF_WRITABLE15891964
Ref: 13fc15891964
Ref: c-api/buffer c PyBUF_WRITEABLE15892554
Ref: 4f5615892554
Ref: c-api/buffer c PyBUF_FORMAT15892699
Ref: 4c0215892699
Node: forma avanços suboffsets15893487
Ref: c-api/buffer shape-strides-suboffsets15893640
Ref: 4f5715893640
Ref: c-api/buffer c PyBUF_INDIRECT15894200
Ref: 4c0515894200
Ref: c-api/buffer c PyBUF_STRIDES15894394
Ref: 4c0d15894394
Ref: c-api/buffer c PyBUF_ND15894574
Ref: 4c0715894574
Ref: c-api/buffer c PyBUF_SIMPLE15894763
Ref: 4c0a15894763
Node: requisições contíguas15894923
Ref: c-api/buffer contiguity-requests15895082
Ref: 4f5815895082
Ref: c-api/buffer c PyBUF_C_CONTIGUOUS15895711
Ref: 13fd15895711
Ref: c-api/buffer c PyBUF_F_CONTIGUOUS15895939
Ref: 13fe15895939
Ref: c-api/buffer c PyBUF_ANY_CONTIGUOUS15896169
Ref: 4bff15896169
Node: requisições compostas15896539
Ref: c-api/buffer compound-requests15896664
Ref: 4f5915896664
Ref: c-api/buffer c PyBUF_FULL15897603
Ref: 4c0315897603
Ref: c-api/buffer c PyBUF_FULL_RO15897885
Ref: 4c0415897885
Ref: c-api/buffer c PyBUF_RECORDS15898164
Ref: 4c0815898164
Ref: c-api/buffer c PyBUF_RECORDS_RO15898445
Ref: 4c0915898445
Ref: c-api/buffer c PyBUF_STRIDED15898720
Ref: 4c0b15898720
Ref: c-api/buffer c PyBUF_STRIDED_RO15899002
Ref: 4c0c15899002
Ref: c-api/buffer c PyBUF_CONTIG15899277
Ref: 4c0015899277
Ref: c-api/buffer c PyBUF_CONTIG_RO15899559
Ref: 4c0115899559
Node: Vetores Complexos15899810
Ref: c-api/buffer complex-arrays15899965
Ref: 4f5115899965
Node: Estilo NumPy forma e avanços15900177
Ref: c-api/buffer numpy-style-shape-and-strides15900307
Ref: 4f5a15900307
Node: Estilo-PIL forma avanços e suboffsets15902248
Ref: c-api/buffer pil-style-shape-strides-and-suboffsets15902378
Ref: 4f5b15902378
Node: Funções relacionadas ao Buffer15903647
Ref: c-api/buffer buffer-related-functions15903761
Ref: 4f5c15903761
Ref: c-api/buffer c PyObject_CheckBuffer15903844
Ref: 39815903844
Ref: c-api/buffer c PyObject_GetBuffer15904213
Ref: 39915904213
Ref: c-api/buffer c PyBuffer_Release15905337
Ref: 39a15905337
Ref: c-api/buffer c PyBuffer_SizeFromFormat15905893
Ref: 75a15905893
Ref: c-api/buffer c PyBuffer_IsContiguous15906208
Ref: 75e15906208
Ref: c-api/buffer c PyBuffer_GetPointer15906652
Ref: 75915906652
Ref: c-api/buffer c PyBuffer_FromContiguous15906973
Ref: 75c15906973
Ref: c-api/buffer c PyBuffer_ToContiguous15907378
Ref: 75b15907378
Ref: c-api/buffer c PyObject_CopyData15907877
Ref: 75d15907877
Ref: c-api/buffer c PyBuffer_FillContiguousStrides15908212
Ref: 75f15908212
Ref: c-api/buffer c PyBuffer_FillInfo15908646
Ref: 76015908646
Node: Camada de Objetos Concretos15909813
Ref: c-api/concrete doc15909998
Ref: 4f5d15909998
Ref: c-api/concrete concrete15909998
Ref: 4f5e15909998
Ref: c-api/concrete concrete-objects-layer15909998
Ref: 4f5f15909998
Ref: c-api/concrete translation-repo15909998
Ref: 4f6015909998
Node: Objetos Fundamentais15911074
Ref: c-api/concrete fundamental15911185
Ref: 4f6215911185
Ref: c-api/concrete fundamental-objects15911185
Ref: 4f6315911185
Node: Objetos tipo<2>15911383
Ref: c-api/type doc15911477
Ref: 4f6415911477
Ref: c-api/type type-objects15911477
Ref: 4f6515911477
Ref: c-api/type typeobjects15911477
Ref: 4f6615911477
Ref: c-api/type c PyTypeObject15911520
Ref: ab415911520
Ref: c-api/type c PyType_Type15911692
Ref: 54d15911692
Ref: c-api/type c PyType_Check15911901
Ref: 1b1615911901
Ref: c-api/type c PyType_CheckExact15912174
Ref: 1b1715912174
Ref: c-api/type c PyType_ClearCache15912427
Ref: 4d7915912427
Ref: c-api/type c PyType_GetFlags15912601
Ref: 1aca15912601
Ref: c-api/type c PyType_GetDict15913159
Ref: 180d15913159
Ref: c-api/type c PyType_Modified15913897
Ref: 190615913897
Ref: c-api/type c PyType_AddWatcher15914197
Ref: 56415914197
Ref: c-api/type c PyType_ClearWatcher15914720
Ref: 4f6715914720
Ref: c-api/type c PyType_Watch15915196
Ref: 56515915196
Ref: c-api/type c PyType_Unwatch15915904
Ref: 4f6815915904
Ref: c-api/type c PyType_WatchCallback15916421
Ref: 4f6915916421
Ref: c-api/type c PyType_HasFeature15916781
Ref: 1ac915916781
Ref: c-api/type c PyType_FastSubclass15917017
Ref: 4f6a15917017
Ref: c-api/type c PyType_IS_GC15917518
Ref: 4f6c15917518
Ref: c-api/type c PyType_IsSubtype15917709
Ref: 4d7a15917709
Ref: c-api/type c PyType_GenericAlloc15918120
Ref: a7515918120
Ref: c-api/type c PyType_GenericNew15918547
Ref: 4b7615918547
Ref: c-api/type c PyType_Ready15918903
Ref: 77c15918903
Ref: c-api/type c PyType_GetName15919827
Ref: 75215919827
Ref: c-api/type c PyType_GetQualName15920133
Ref: 75315920133
Ref: c-api/type c PyType_GetFullyQualifiedName15920468
Ref: 37315920468
Ref: c-api/type c PyType_GetModuleName15920902
Ref: 37515920902
Ref: c-api/type c PyType_GetSlot15921197
Ref: 8a015921197
Ref: c-api/type c PyType_GetModule15921899
Ref: 97515921899
Ref: c-api/type c PyType_GetModuleState15922867
Ref: 97615922867
Ref: c-api/type c PyType_GetModuleByDef15923473
Ref: 39415923473
Ref: c-api/type c PyUnstable_Type_AssignVersionTag15924482
Ref: 4f6f15924482
Ref: c-api/type c PyType_SUPPORTS_WEAKREFS15924974
Ref: 4f7015924974
Node: Creating Heap-Allocated Types15925365
Ref: c-api/type creating-heap-allocated-types15925446
Ref: 4f7215925446
Ref: c-api/type c PyType_FromMetaclass15925602
Ref: 55015925602
Ref: c-api/type c PyType_FromModuleAndSpec15928031
Ref: 55115928031
Ref: c-api/type c PyType_FromSpecWithBases15928954
Ref: 57e15928954
Ref: c-api/type c PyType_FromSpec15929714
Ref: 57d15929714
Ref: c-api/type c PyType_Spec15930413
Ref: 180b15930413
Ref: c-api/type c PyType_Spec name15930560
Ref: 4f7315930560
Ref: c-api/type c PyType_Spec basicsize15930682
Ref: 54815930682
Ref: c-api/type c PyType_Spec itemsize15931449
Ref: 4f7415931449
Ref: c-api/type c PyType_Spec flags15932572
Ref: 4f7515932572
Ref: c-api/type c PyType_Spec slots15932814
Ref: 4f7615932814
Ref: c-api/type c PyType_Slot15933046
Ref: 4d7b15933046
Ref: c-api/type c PyType_Slot slot15933253
Ref: 4f6d15933253
Ref: c-api/type c PyType_Slot pfunc15935521
Ref: 4f8015935521
Node: O Objeto None15935721
Ref: c-api/none doc15935815
Ref: 4f8115935815
Ref: c-api/none noneobject15935815
Ref: 4f8215935815
Ref: c-api/none the-none-object15935815
Ref: 4f8315935815
Ref: c-api/none translation-repo15935815
Ref: 4f8415935815
Ref: c-api/none c Py_None15936141
Ref: 4b4815936141
Ref: c-api/none c Py_RETURN_NONE15936393
Ref: 14bb15936393
Node: Objetos Numéricos15936474
Ref: c-api/concrete numeric-objects15936612
Ref: 4f8515936612
Ref: c-api/concrete numericobjects15936612
Ref: 4f8615936612
Node: Objetos Inteiros15936777
Ref: c-api/long doc15936874
Ref: 4f8715936874
Ref: c-api/long integer-objects15936874
Ref: 4f8815936874
Ref: c-api/long longobjects15936874
Ref: 4f8915936874
Ref: c-api/long c PyLongObject15937208
Ref: 58815937208
Ref: c-api/long c PyLong_Type15937393
Ref: 4ceb15937393
Ref: c-api/long c PyLong_Check15937641
Ref: 4f8a15937641
Ref: c-api/long c PyLong_CheckExact15937843
Ref: 4f8b15937843
Ref: c-api/long c PyLong_FromLong15938056
Ref: 195a15938056
Ref: c-api/long c PyLong_FromUnsignedLong15938550
Ref: 1b3815938550
Ref: c-api/long c PyLong_FromSsize_t15938831
Ref: 4ce715938831
Ref: c-api/long c PyLong_FromSize_t15939103
Ref: 1b3a15939103
Ref: c-api/long c PyLong_FromLongLong15939360
Ref: 195b15939360
Ref: c-api/long c PyLong_FromUnsignedLongLong15939619
Ref: 1b3915939619
Ref: c-api/long c PyLong_FromDouble15939914
Ref: 94915939914
Ref: c-api/long c PyLong_FromString15940174
Ref: 4ce815940174
Ref: c-api/long c PyLong_FromUnicodeObject15941598
Ref: 8bf15941598
Ref: c-api/long c PyLong_FromVoidPtr15941863
Ref: 4ce915941863
Ref: c-api/long c PyLong_FromNativeBytes15942173
Ref: 36215942173
Ref: c-api/long c PyLong_FromUnsignedNativeBytes15942858
Ref: 36315942858
Ref: c-api/long c PyLong_FromPid15943403
Ref: 4f8c15943403
Ref: c-api/long c PyLong_AsLong15943710
Ref: 36015943710
Ref: c-api/long c PyLong_AS_LONG15944384
Ref: 4f8d15944384
Ref: c-api/long c PyLong_AsInt15944739
Ref: 35f15944739
Ref: c-api/long c PyLong_AsLongAndOverflow15944990
Ref: 12a815944990
Ref: c-api/long c PyLong_AsLongLong15945907
Ref: 4ce115945907
Ref: c-api/long c PyLong_AsLongLongAndOverflow15946600
Ref: 12a715946600
Ref: c-api/long c PyLong_AsSsize_t15947566
Ref: 4ce315947566
Ref: c-api/long c PyLong_AsUnsignedLong15948046
Ref: 4ce415948046
Ref: c-api/long c PyLong_AsSize_t15948500
Ref: 4ce215948500
Ref: c-api/long c PyLong_AsUnsignedLongLong15948951
Ref: 12d615948951
Ref: c-api/long c PyLong_AsUnsignedLongMask15949564
Ref: 4ce515949564
Ref: c-api/long c PyLong_AsUnsignedLongLongMask15950319
Ref: 1b5d15950319
Ref: c-api/long c PyLong_AsDouble15951109
Ref: 4ce015951109
Ref: c-api/long c PyLong_AsVoidPtr15951523
Ref: 4ce615951523
Ref: c-api/long c PyLong_AsPid15951992
Ref: 174615951992
Ref: c-api/long c PyLong_AsNativeBytes15952323
Ref: 36115952323
Ref: c-api/long c Py_ASNATIVEBYTES_DEFAULTS15956474
Ref: 4f8e15956474
Ref: c-api/long c Py_ASNATIVEBYTES_BIG_ENDIAN15956652
Ref: 4f8f15956652
Ref: c-api/long c Py_ASNATIVEBYTES_LITTLE_ENDIAN15956830
Ref: 4f9015956830
Ref: c-api/long c Py_ASNATIVEBYTES_NATIVE_ENDIAN15957005
Ref: 4f9115957005
Ref: c-api/long c Py_ASNATIVEBYTES_UNSIGNED_BUFFER15957182
Ref: 4f9215957182
Ref: c-api/long c Py_ASNATIVEBYTES_REJECT_NEGATIVE15957357
Ref: 4f9315957357
Ref: c-api/long c Py_ASNATIVEBYTES_ALLOW_INDEX15957528
Ref: 4f9415957528
Ref: c-api/long c PyLong_GetInfo15959477
Ref: 4cea15959477
Ref: c-api/long c PyUnstable_Long_IsCompact15959901
Ref: 58915959901
Ref: c-api/long c PyUnstable_Long_CompactValue15960723
Ref: 58a15960723
Node: Objetos Booleanos15961208
Ref: c-api/bool doc15961340
Ref: 4f9515961340
Ref: c-api/bool boolean-objects15961340
Ref: 4f9615961340
Ref: c-api/bool boolobjects15961340
Ref: 4f9715961340
Ref: c-api/bool translation-repo15961340
Ref: 4f9815961340
Ref: c-api/bool c PyBool_Type15961685
Ref: 4c1015961685
Ref: c-api/bool c PyBool_Check15961932
Ref: 4f9b15961932
Ref: c-api/bool c Py_False15962088
Ref: 4f9915962088
Ref: c-api/bool c Py_True15962317
Ref: 4f9a15962317
Ref: c-api/bool c Py_RETURN_FALSE15962543
Ref: 14bd15962543
Ref: c-api/bool c Py_RETURN_TRUE15962626
Ref: 14bc15962626
Ref: c-api/bool c PyBool_FromLong15962707
Ref: 4c0f15962707
Node: Objetos de ponto flutuante15962949
Ref: c-api/float doc15963091
Ref: 4f9c15963091
Ref: c-api/float floating-point-objects15963091
Ref: 4f9d15963091
Ref: c-api/float floatobjects15963091
Ref: 4f9e15963091
Ref: c-api/float translation-repo15963091
Ref: 4f9f15963091
Ref: c-api/float c PyFloatObject15963162
Ref: 4fa015963162
Ref: c-api/float c PyFloat_Type15963293
Ref: 4cc415963293
Ref: c-api/float c PyFloat_Check15963556
Ref: 4fa115963556
Ref: c-api/float c PyFloat_CheckExact15963763
Ref: 4fa215963763
Ref: c-api/float c PyFloat_FromString15963976
Ref: 4cc315963976
Ref: c-api/float c PyFloat_FromDouble15964245
Ref: 4cc215964245
Ref: c-api/float c PyFloat_AsDouble15964475
Ref: a7315964475
Ref: c-api/float c PyFloat_AS_DOUBLE15965155
Ref: 4fa315965155
Ref: c-api/float c PyFloat_GetInfo15965323
Ref: 143715965323
Ref: c-api/float c PyFloat_GetMax15965682
Ref: 143515965682
Ref: c-api/float c PyFloat_GetMin15965856
Ref: 143615965856
Ref: c-api/float c Py_INFINITY15966029
Ref: 4fa415966029
Ref: c-api/float c Py_NAN15966284
Ref: 4fa515966284
Ref: c-api/float c Py_HUGE_VAL15966548
Ref: 4fa615966548
Ref: c-api/float c Py_MATH_E15966708
Ref: 4fa715966708
Ref: c-api/float c Py_MATH_El15966820
Ref: 4fa815966820
Ref: c-api/float c Py_MATH_PI15966928
Ref: 4fa915966928
Ref: c-api/float c Py_MATH_PIl15967042
Ref: 4faa15967042
Ref: c-api/float c Py_MATH_TAU15967152
Ref: 4fab15967152
Ref: c-api/float c Py_RETURN_NAN15967301
Ref: 4fac15967301
Ref: c-api/float c Py_RETURN_INF15967474
Ref: 4fad15967474
Ref: c-api/float c Py_IS_FINITE15967747
Ref: 4fae15967747
Ref: c-api/float c Py_IS_INFINITY15968100
Ref: 4faf15968100
Ref: c-api/float c Py_IS_NAN15968405
Ref: 14be15968405
Node: As funções Pack e Unpack15968745
Ref: c-api/float pack-and-unpack-functions15968834
Ref: 4fb015968834
Node: Funções Pack15970368
Ref: c-api/float pack-functions15970473
Ref: 4fb115970473
Ref: c-api/float c PyFloat_Pack215971332
Ref: 76515971332
Ref: c-api/float c PyFloat_Pack415971480
Ref: 76615971480
Ref: c-api/float c PyFloat_Pack815971631
Ref: 76715971631
Node: Funções de Unpack15971781
Ref: c-api/float unpack-functions15971886
Ref: 4fb215971886
Ref: c-api/float c PyFloat_Unpack215972739
Ref: 76815972739
Ref: c-api/float c PyFloat_Unpack415972890
Ref: 76915972890
Ref: c-api/float c PyFloat_Unpack815973044
Ref: 76a15973044
Node: Objetos números complexos15973196
Ref: c-api/complex doc15973312
Ref: 4fb315973312
Ref: c-api/complex complex-number-objects15973312
Ref: 4fb415973312
Ref: c-api/complex complexobjects15973312
Ref: 4fb515973312
Ref: c-api/complex translation-repo15973312
Ref: 4fb615973312
Node: Números complexos como estruturas C15973810
Ref: c-api/complex complex-numbers-as-c-structures15973956
Ref: 4fb715973956
Ref: c-api/complex c Py_complex15974258
Ref: 4ec515974258
Ref: c-api/complex c Py_complex real15974549
Ref: 4fb815974549
Ref: c-api/complex c Py_complex imag15974580
Ref: 4fb915974580
Ref: c-api/complex c _Py_c_sum15974754
Ref: 4fba15974754
Ref: c-api/complex c _Py_c_diff15974960
Ref: 4fbb15974960
Ref: c-api/complex c _Py_c_neg15975176
Ref: 4fbc15975176
Ref: c-api/complex c _Py_c_prod15975357
Ref: 4fbd15975357
Ref: c-api/complex c _Py_c_quot15975567
Ref: 4fbe15975567
Ref: c-api/complex c _Py_c_pow15975882
Ref: 169b15975882
Node: Números complexos como objetos Python15976224
Ref: c-api/complex complex-numbers-as-python-objects15976370
Ref: 4fbf15976370
Ref: c-api/complex c PyComplexObject15976464
Ref: 4fc015976464
Ref: c-api/complex c PyComplex_Type15976595
Ref: 4c4715976595
Ref: c-api/complex c PyComplex_Check15976857
Ref: 4fc115976857
Ref: c-api/complex c PyComplex_CheckExact15977070
Ref: 4fc215977070
Ref: c-api/complex c PyComplex_FromCComplex15977294
Ref: 4fc315977294
Ref: c-api/complex c PyComplex_FromDoubles15977592
Ref: 4c4615977592
Ref: c-api/complex c PyComplex_RealAsDouble15977922
Ref: 178d15977922
Ref: c-api/complex c PyComplex_ImagAsDouble15978681
Ref: 178e15978681
Ref: c-api/complex c PyComplex_AsCComplex15979462
Ref: 143815979462
Node: Objetos Sequência15980344
Ref: c-api/concrete sequence-objects15980472
Ref: 4fc415980472
Ref: c-api/concrete sequenceobjects15980472
Ref: 4fc515980472
Node: Objetos bytes<2>15980886
Ref: c-api/bytes doc15980984
Ref: 4fc615980984
Ref: c-api/bytes bytes-objects15980984
Ref: 4fc715980984
Ref: c-api/bytes bytesobjects15980984
Ref: 4fc815980984
Ref: c-api/bytes c PyBytesObject15981167
Ref: 79215981167
Ref: c-api/bytes c PyBytes_Type15981297
Ref: 4c2115981297
Ref: c-api/bytes c PyBytes_Check15981546
Ref: 13e615981546
Ref: c-api/bytes c PyBytes_CheckExact15981755
Ref: 4fc915981755
Ref: c-api/bytes c PyBytes_FromString15981969
Ref: 4c1e15981969
Ref: c-api/bytes c PyBytes_FromStringAndSize15982331
Ref: 13e715982331
Ref: c-api/bytes c PyBytes_FromFormat15982755
Ref: 1ba115982755
Ref: c-api/bytes c PyBytes_FromFormatV15986801
Ref: 4c1c15986801
Ref: c-api/bytes c PyBytes_FromObject15987090
Ref: 4c1d15987090
Ref: c-api/bytes c PyBytes_Size15987337
Ref: 4c2015987337
Ref: c-api/bytes c PyBytes_GET_SIZE15987505
Ref: 4fca15987505
Ref: c-api/bytes c PyBytes_AsString15987651
Ref: 88b15987651
Ref: c-api/bytes c PyBytes_AS_STRING15988300
Ref: 4fcb15988300
Ref: c-api/bytes c PyBytes_AsStringAndSize15988443
Ref: 4c1815988443
Ref: c-api/bytes c PyBytes_Concat15989566
Ref: 4c1915989566
Ref: c-api/bytes c PyBytes_ConcatAndDel15990107
Ref: 4c1a15990107
Ref: c-api/bytes c _PyBytes_Resize15990495
Ref: 174515990495
Ref: c-api/bytes c PyBytes_Repr15991287
Ref: 4c1f15991287
Ref: c-api/bytes c PyBytes_DecodeEscape15992316
Ref: 4c1b15992316
Ref: Objetos bytes<2>-Footnote-115993217
Ref: Objetos bytes<2>-Footnote-215993377
Ref: Objetos bytes<2>-Footnote-315993537
Ref: Objetos bytes<2>-Footnote-415993697
Ref: Objetos bytes<2>-Footnote-515993857
Ref: Objetos bytes<2>-Footnote-615994017
Ref: Objetos bytes<2>-Footnote-715994177
Ref: Objetos bytes<2>-Footnote-815994337
Node: Objetos byte array15994497
Ref: c-api/bytearray doc15994628
Ref: 4fcc15994628
Ref: c-api/bytearray byte-array-objects15994628
Ref: 4fcd15994628
Ref: c-api/bytearray bytearrayobjects15994628
Ref: 4fce15994628
Ref: c-api/bytearray translation-repo15994628
Ref: 4fcf15994628
Ref: c-api/bytearray c PyByteArrayObject15994683
Ref: 4fd015994683
Ref: c-api/bytearray c PyByteArray_Type15994806
Ref: 4c1615994806
Node: Macros para verificação de tipo15995152
Ref: c-api/bytearray type-check-macros15995273
Ref: 4fd115995273
Ref: c-api/bytearray c PyByteArray_Check15995356
Ref: 4fd215995356
Ref: c-api/bytearray c PyByteArray_CheckExact15995577
Ref: 4fd315995577
Node: Funções diretas da API15995803
Ref: c-api/bytearray direct-api-functions15995939
Ref: 4fd415995939
Ref: c-api/bytearray c PyByteArray_FromObject15996004
Ref: 13ef15996004
Ref: c-api/bytearray c PyByteArray_FromStringAndSize15996327
Ref: 13f015996327
Ref: c-api/bytearray c PyByteArray_Concat15996679
Ref: 4c1315996679
Ref: c-api/bytearray c PyByteArray_Size15997012
Ref: 4c1515997012
Ref: c-api/bytearray c PyByteArray_AsString15997229
Ref: 4c1215997229
Ref: c-api/bytearray c PyByteArray_Resize15997521
Ref: 4c1415997521
Node: Macros15997724
Ref: c-api/bytearray macros15997818
Ref: 4fd515997818
Ref: c-api/bytearray c PyByteArray_AS_STRING15997927
Ref: 4fd615997927
Ref: c-api/bytearray c PyByteArray_GET_SIZE15998082
Ref: 4fd715998082
Node: Objetos Unicode e Codecs15998259
Ref: c-api/unicode doc15998386
Ref: 11df15998386
Ref: c-api/unicode translation-repo15998386
Ref: 4fd815998386
Ref: c-api/unicode unicode-objects-and-codecs15998386
Ref: 4fd915998386
Ref: c-api/unicode unicodeobjects15998386
Ref: 4fda15998386
Node: Objetos Unicode15998534
Ref: c-api/unicode unicode-objects15998634
Ref: 4fdb15998634
Ref: Objetos Unicode-Footnote-115999602
Ref: Objetos Unicode-Footnote-215999644
Node: Tipo Unicode15999686
Ref: c-api/unicode unicode-type15999792
Ref: 4fdc15999792
Ref: c-api/unicode c Py_UCS415999933
Ref: 29b15999933
Ref: c-api/unicode c Py_UCS215999958
Ref: 11b315999958
Ref: c-api/unicode c Py_UCS115999983
Ref: 11b215999983
Ref: c-api/unicode c Py_UNICODE16000325
Ref: 3ed16000325
Ref: c-api/unicode c PyASCIIObject16000768
Ref: 11b416000768
Ref: c-api/unicode c PyCompactUnicodeObject16000799
Ref: 11b516000799
Ref: c-api/unicode c PyUnicodeObject16000839
Ref: 79416000839
Ref: c-api/unicode c PyUnicode_Type16001184
Ref: 4db916001184
Ref: c-api/unicode c PyUnicodeIter_Type16001426
Ref: 4d8d16001426
Ref: c-api/unicode c PyUnicode_Check16001840
Ref: 4fdd16001840
Ref: c-api/unicode c PyUnicode_CheckExact16002039
Ref: 4fde16002039
Ref: c-api/unicode c PyUnicode_READY16002242
Ref: 40116002242
Ref: c-api/unicode c PyUnicode_GET_LENGTH16002501
Ref: 8b916002501
Ref: c-api/unicode c PyUnicode_1BYTE_DATA16002792
Ref: 11b916002792
Ref: c-api/unicode c PyUnicode_2BYTE_DATA16002881
Ref: 11ba16002881
Ref: c-api/unicode c PyUnicode_4BYTE_DATA16002970
Ref: 11bb16002970
Ref: c-api/unicode c PyUnicode_1BYTE_KIND16003429
Ref: 11bd16003429
Ref: c-api/unicode c PyUnicode_2BYTE_KIND16003463
Ref: 11be16003463
Ref: c-api/unicode c PyUnicode_4BYTE_KIND16003497
Ref: 11bf16003497
Ref: c-api/unicode c PyUnicode_KIND16003702
Ref: 11bc16003702
Ref: c-api/unicode c PyUnicode_DATA16004053
Ref: 11b816004053
Ref: c-api/unicode c PyUnicode_WRITE16004304
Ref: 11c216004304
Ref: c-api/unicode c PyUnicode_READ16004906
Ref: 11c016004906
Ref: c-api/unicode c PyUnicode_READ_CHAR16005230
Ref: 11c116005230
Ref: c-api/unicode c PyUnicode_MAX_CHAR_VALUE16005592
Ref: 11c316005592
Ref: c-api/unicode c PyUnicode_IsIdentifier16005965
Ref: 1b1516005965
Node: Propriedade de caracteres Unicode16006386
Ref: c-api/unicode unicode-character-properties16006539
Ref: 4fdf16006539
Ref: c-api/unicode c Py_UNICODE_ISSPACE16006846
Ref: 1a5116006846
Ref: c-api/unicode c Py_UNICODE_ISLOWER16006994
Ref: 4fe016006994
Ref: c-api/unicode c Py_UNICODE_ISUPPER16007127
Ref: 4fe116007127
Ref: c-api/unicode c Py_UNICODE_ISTITLE16007260
Ref: 4fe216007260
Ref: c-api/unicode c Py_UNICODE_ISLINEBREAK16007395
Ref: 4fe316007395
Ref: c-api/unicode c Py_UNICODE_ISDECIMAL16007545
Ref: 4fe416007545
Ref: c-api/unicode c Py_UNICODE_ISDIGIT16007677
Ref: 4fe516007677
Ref: c-api/unicode c Py_UNICODE_ISNUMERIC16007810
Ref: 4fe616007810
Ref: c-api/unicode c Py_UNICODE_ISALPHA16007944
Ref: 4fe716007944
Ref: c-api/unicode c Py_UNICODE_ISALNUM16008078
Ref: 4fe816008078
Ref: c-api/unicode c Py_UNICODE_ISPRINTABLE16008214
Ref: 4fe916008214
Ref: c-api/unicode c Py_UNICODE_TOLOWER16008464
Ref: 4fea16008464
Ref: c-api/unicode c Py_UNICODE_TOUPPER16008590
Ref: 4feb16008590
Ref: c-api/unicode c Py_UNICODE_TOTITLE16008716
Ref: 4fec16008716
Ref: c-api/unicode c Py_UNICODE_TODECIMAL16008842
Ref: 4fed16008842
Ref: c-api/unicode c Py_UNICODE_TODIGIT16009063
Ref: 4fee16009063
Ref: c-api/unicode c Py_UNICODE_TONUMERIC16009278
Ref: 4fef16009278
Ref: c-api/unicode c Py_UNICODE_IS_SURROGATE16009531
Ref: 4ff016009531
Ref: c-api/unicode c Py_UNICODE_IS_HIGH_SURROGATE16009656
Ref: 4ff116009656
Ref: c-api/unicode c Py_UNICODE_IS_LOW_SURROGATE16009791
Ref: 4ff216009791
Ref: c-api/unicode c Py_UNICODE_HIGH_SURROGATE16009924
Ref: 4ff316009924
Ref: c-api/unicode c Py_UNICODE_LOW_SURROGATE16010140
Ref: 4ff416010140
Ref: c-api/unicode c Py_UNICODE_JOIN_SURROGATES16010354
Ref: 4ff516010354
Node: Creating and accessing Unicode strings16010759
Ref: c-api/unicode creating-and-accessing-unicode-strings16010915
Ref: 4ff616010915
Ref: c-api/unicode c PyUnicode_New16011099
Ref: 8b016011099
Ref: c-api/unicode c PyUnicode_FromKindAndData16011681
Ref: 11b616011681
Ref: c-api/unicode c PyUnicode_FromStringAndSize16012535
Ref: 4db216012535
Ref: c-api/unicode c PyUnicode_FromString16013209
Ref: 4db116013209
Ref: c-api/unicode c PyUnicode_FromFormat16013465
Ref: 38a16013465
Ref: c-api/unicode c PyUnicode_FromFormatV16026497
Ref: 57416026497
Ref: c-api/unicode c PyUnicode_FromObject16026784
Ref: 4daf16026784
Ref: c-api/unicode c PyUnicode_FromOrdinal16027245
Ref: 4db016027245
Ref: c-api/unicode c PyUnicode_FromEncodedObject16027593
Ref: 4dae16027593
Ref: c-api/unicode c PyUnicode_BuildEncodingMap16028408
Ref: 17e416028408
Ref: c-api/unicode c PyUnicode_GetDefaultEncoding16028974
Ref: 4db316028974
Ref: c-api/unicode c PyUnicode_GetLength16029297
Ref: 8b816029297
Ref: c-api/unicode c PyUnicode_CopyCharacters16029600
Ref: 8ba16029600
Ref: c-api/unicode c PyUnicode_Fill16030096
Ref: 11cc16030096
Ref: c-api/unicode c PyUnicode_WriteChar16030594
Ref: 11b116030594
Ref: c-api/unicode c PyUnicode_ReadChar16031301
Ref: 11b016031301
Ref: c-api/unicode c PyUnicode_Substring16031807
Ref: 8bb16031807
Ref: c-api/unicode c PyUnicode_AsUCS416032280
Ref: 11b716032280
Ref: c-api/unicode c PyUnicode_AsUCS4Copy16032811
Ref: 8c016032811
Node: Locale Encoding16033260
Ref: c-api/unicode locale-encoding16033403
Ref: 4ff816033403
Ref: c-api/unicode c PyUnicode_DecodeLocaleAndSize16033537
Ref: be216033537
Ref: c-api/unicode c PyUnicode_DecodeLocale16034790
Ref: 4da016034790
Ref: c-api/unicode c PyUnicode_EncodeLocale16035154
Ref: be316035154
Ref: Locale Encoding-Footnote-116036419
Ref: Locale Encoding-Footnote-216036461
Node: File System Encoding16036503
Ref: c-api/unicode file-system-encoding16036623
Ref: 4ff916036623
Ref: c-api/unicode c PyUnicode_FSConverter16036984
Ref: d3b16036984
Ref: c-api/unicode c PyUnicode_FSDecoder16038258
Ref: 57716038258
Ref: c-api/unicode c PyUnicode_DecodeFSDefaultAndSize16039377
Ref: 4d9e16039377
Ref: c-api/unicode c PyUnicode_DecodeFSDefault16039955
Ref: 180a16039955
Ref: c-api/unicode c PyUnicode_EncodeFSDefault16040411
Ref: 1bca16040411
Ref: File System Encoding-Footnote-116041141
Ref: File System Encoding-Footnote-216041183
Node: wchar_t Support16041225
Ref: c-api/unicode wchar-t-support16041321
Ref: 4ffa16041321
Ref: c-api/unicode c PyUnicode_FromWideChar16041427
Ref: 11cb16041427
Ref: c-api/unicode c PyUnicode_AsWideChar16041863
Ref: 1bd116041863
Ref: c-api/unicode c PyUnicode_AsWideCharString16042856
Ref: 8c116042856
Node: Built-in Codecs16043994
Ref: c-api/unicode built-in-codecs16044129
Ref: 4ffb16044129
Ref: c-api/unicode builtincodecs16044129
Ref: 4ff716044129
Node: Generic Codecs16045352
Ref: c-api/unicode generic-codecs16045439
Ref: 4ffc16045439
Ref: c-api/unicode c PyUnicode_Decode16045523
Ref: 1b5916045523
Ref: c-api/unicode c PyUnicode_AsEncodedString16046106
Ref: 4d9616046106
Node: UTF-8 Codecs16046670
Ref: c-api/unicode utf-8-codecs16046779
Ref: 4ffd16046779
Ref: c-api/unicode c PyUnicode_DecodeUTF816046857
Ref: 4daa16046857
Ref: c-api/unicode c PyUnicode_DecodeUTF8Stateful16047219
Ref: 189f16047219
Ref: c-api/unicode c PyUnicode_AsUTF8String16047782
Ref: 11cd16047782
Ref: c-api/unicode c PyUnicode_AsUTF8AndSize16048248
Ref: 89d16048248
Ref: c-api/unicode c PyUnicode_AsUTF816049567
Ref: bd416049567
Ref: UTF-8 Codecs-Footnote-116050335
Node: UTF-32 Codecs16050388
Ref: c-api/unicode utf-32-codecs16050496
Ref: 4ffe16050496
Ref: c-api/unicode c PyUnicode_DecodeUTF3216050577
Ref: 4da616050577
Ref: c-api/unicode c PyUnicode_DecodeUTF32Stateful16051783
Ref: 4da716051783
Ref: c-api/unicode c PyUnicode_AsUTF32String16052465
Ref: 4d9816052465
Node: UTF-16 Codecs16052867
Ref: c-api/unicode utf-16-codecs16052975
Ref: 4fff16052975
Ref: c-api/unicode c PyUnicode_DecodeUTF1616053056
Ref: 4da416053056
Ref: c-api/unicode c PyUnicode_DecodeUTF16Stateful16054346
Ref: 4da516054346
Ref: c-api/unicode c PyUnicode_AsUTF16String16055037
Ref: 4d9716055037
Node: UTF-7 Codecs16055439
Ref: c-api/unicode utf-7-codecs16055555
Ref: 500016055555
Ref: c-api/unicode c PyUnicode_DecodeUTF716055633
Ref: 4da816055633
Ref: c-api/unicode c PyUnicode_DecodeUTF7Stateful16055995
Ref: 4da916055995
Node: Unicode-Escape Codecs16056560
Ref: c-api/unicode unicode-escape-codecs16056688
Ref: 500116056688
Ref: c-api/unicode c PyUnicode_DecodeUnicodeEscape16056799
Ref: 4dab16056799
Ref: c-api/unicode c PyUnicode_AsUnicodeEscapeString16057179
Ref: 11ce16057179
Node: Raw-Unicode-Escape Codecs16057552
Ref: c-api/unicode raw-unicode-escape-codecs16057682
Ref: 500216057682
Ref: c-api/unicode c PyUnicode_DecodeRawUnicodeEscape16057805
Ref: 4da316057805
Ref: c-api/unicode c PyUnicode_AsRawUnicodeEscapeString16058192
Ref: 11cf16058192
Node: Latin-1 Codecs16058572
Ref: c-api/unicode latin-1-codecs16058693
Ref: 500316058693
Ref: c-api/unicode c PyUnicode_DecodeLatin116058890
Ref: 4d9f16058890
Ref: c-api/unicode c PyUnicode_AsLatin1String16059256
Ref: 11d016059256
Node: ASCII Codecs16059620
Ref: c-api/unicode ascii-codecs16059736
Ref: 500416059736
Ref: c-api/unicode c PyUnicode_DecodeASCII16059884
Ref: 4d9b16059884
Ref: c-api/unicode c PyUnicode_AsASCIIString16060247
Ref: 11d116060247
Node: Character Map Codecs16060608
Ref: c-api/unicode character-map-codecs16060733
Ref: 500516060733
Ref: c-api/unicode c PyUnicode_DecodeCharmap16061213
Ref: 4d9c16061213
Ref: c-api/unicode c PyUnicode_AsCharmapString16062108
Ref: 4d9516062108
Ref: c-api/unicode c PyUnicode_Translate16062890
Ref: 4db816062890
Node: MBCS codecs for Windows16063791
Ref: c-api/unicode mbcs-codecs-for-windows16063895
Ref: 500616063895
Ref: c-api/unicode c PyUnicode_DecodeMBCS16064255
Ref: 4da116064255
Ref: c-api/unicode c PyUnicode_DecodeMBCSStateful16064648
Ref: 4da216064648
Ref: c-api/unicode c PyUnicode_DecodeCodePageStateful16065215
Ref: 4d9d16065215
Ref: c-api/unicode c PyUnicode_AsMBCSString16065631
Ref: 11d216065631
Ref: c-api/unicode c PyUnicode_EncodeCodePage16066027
Ref: 11d316066027
Node: Methods and Slot Functions16066521
Ref: c-api/unicode methods-and-slot-functions16066632
Ref: 500716066632
Ref: c-api/unicode unicodemethodsandslots16066632
Ref: 500816066632
Ref: c-api/unicode c PyUnicode_Concat16066955
Ref: 11e016066955
Ref: c-api/unicode c PyUnicode_Split16067186
Ref: 4db616067186
Ref: c-api/unicode c PyUnicode_RSplit16067810
Ref: 165416067810
Ref: c-api/unicode c PyUnicode_Splitlines16068228
Ref: 4db716068228
Ref: c-api/unicode c PyUnicode_Partition16068644
Ref: 165516068644
Ref: c-api/unicode c PyUnicode_RPartition16069273
Ref: 165616069273
Ref: c-api/unicode c PyUnicode_Join16069830
Ref: 11e116069830
Ref: c-api/unicode c PyUnicode_Tailmatch16070115
Ref: 8bd16070115
Ref: c-api/unicode c PyUnicode_Find16070573
Ref: 4dac16070573
Ref: c-api/unicode c PyUnicode_FindChar16071183
Ref: 8be16071183
Ref: c-api/unicode c PyUnicode_Count16071967
Ref: 4d9a16071967
Ref: c-api/unicode c PyUnicode_Replace16072286
Ref: 4db416072286
Ref: c-api/unicode c PyUnicode_Compare16072708
Ref: 8bc16072708
Ref: c-api/unicode c PyUnicode_EqualToUTF8AndSize16073072
Ref: 37616073072
Ref: c-api/unicode c PyUnicode_EqualToUTF816073681
Ref: 37716073681
Ref: c-api/unicode c PyUnicode_CompareWithASCIIString16074070
Ref: 12a916074070
Ref: c-api/unicode c PyUnicode_RichCompare16074571
Ref: 4db516074571
Ref: c-api/unicode c PyUnicode_Format16075241
Ref: 4dad16075241
Ref: c-api/unicode c PyUnicode_Contains16075525
Ref: 4d9916075525
Ref: c-api/unicode c PyUnicode_InternInPlace16075860
Ref: 8b616075860
Ref: c-api/unicode c PyUnicode_InternFromString16077236
Ref: 16ea16077236
Node: Objeto tupla16078088
Ref: c-api/tuple doc16078228
Ref: 500916078228
Ref: c-api/tuple translation-repo16078228
Ref: 500a16078228
Ref: c-api/tuple tuple-objects16078228
Ref: 500b16078228
Ref: c-api/tuple tupleobjects16078228
Ref: 500c16078228
Ref: c-api/tuple c PyTupleObject16078273
Ref: 4eac16078273
Ref: c-api/tuple c PyTuple_Type16078391
Ref: 4d7816078391
Ref: c-api/tuple c PyTuple_Check16078637
Ref: 500d16078637
Ref: c-api/tuple c PyTuple_CheckExact16078824
Ref: 500e16078824
Ref: c-api/tuple c PyTuple_New16079023
Ref: 39d16079023
Ref: c-api/tuple c PyTuple_Pack16079285
Ref: 4d7616079285
Ref: c-api/tuple c PyTuple_Size16079746
Ref: 4d7716079746
Ref: c-api/tuple c PyTuple_GET_SIZE16079992
Ref: 500f16079992
Ref: c-api/tuple c PyTuple_GetItem16080133
Ref: 4b6116080133
Ref: c-api/tuple c PyTuple_GET_ITEM16080776
Ref: 501016080776
Ref: c-api/tuple c PyTuple_GetSlice16081015
Ref: 4d7516081015
Ref: c-api/tuple c PyTuple_SetItem16081464
Ref: 4b6216081464
Ref: c-api/tuple c PyTuple_SET_ITEM16081979
Ref: 38d16081979
Ref: c-api/tuple c _PyTuple_Resize16082660
Ref: 155416082660
Node: Objetos sequência de estrutura16083607
Ref: c-api/tuple id116083734
Ref: 501116083734
Ref: c-api/tuple struct-sequence-objects16083734
Ref: 11ff16083734
Ref: c-api/tuple c PyStructSequence_NewType16084110
Ref: 4d5816084110
Ref: c-api/tuple c PyStructSequence_InitType16084563
Ref: 103916084563
Ref: c-api/tuple c PyStructSequence_InitType216084755
Ref: 103816084755
Ref: c-api/tuple c PyStructSequence_Desc16085048
Ref: bd316085048
Ref: c-api/tuple c PyStructSequence_Desc name16085251
Ref: 501216085251
Ref: c-api/tuple c PyStructSequence_Desc doc16085424
Ref: 501316085424
Ref: c-api/tuple c PyStructSequence_Desc fields16085533
Ref: 501416085533
Ref: c-api/tuple c PyStructSequence_Desc n_in_sequence16085697
Ref: 501516085697
Ref: c-api/tuple c PyStructSequence_Field16085825
Ref: bd216085825
Ref: c-api/tuple c PyStructSequence_Field name16086272
Ref: 501616086272
Ref: c-api/tuple c PyStructSequence_Field doc16086488
Ref: 501716086488
Ref: c-api/tuple c PyStructSequence_UnnamedField16086578
Ref: 98916086578
Ref: c-api/tuple c PyStructSequence_New16086844
Ref: 4d5716086844
Ref: c-api/tuple c PyStructSequence_GetItem16087187
Ref: 4d5616087187
Ref: c-api/tuple c PyStructSequence_GET_ITEM16087636
Ref: 501816087636
Ref: c-api/tuple c PyStructSequence_SetItem16087963
Ref: 4d5916087963
Ref: c-api/tuple c PyStructSequence_SET_ITEM16088533
Ref: 501916088533
Node: Objeto List16088811
Ref: c-api/list doc16088917
Ref: 501a16088917
Ref: c-api/list list-objects16088917
Ref: 501b16088917
Ref: c-api/list listobjects16088917
Ref: 501c16088917
Ref: c-api/list translation-repo16088917
Ref: 501d16088917
Ref: c-api/list c PyListObject16088960
Ref: 4f3016088960
Ref: c-api/list c PyList_Type16089077
Ref: 4b8416089077
Ref: c-api/list c PyList_Check16089327
Ref: 501e16089327
Ref: c-api/list c PyList_CheckExact16089513
Ref: 501f16089513
Ref: c-api/list c PyList_New16089711
Ref: 4be116089711
Ref: c-api/list c PyList_Size16090546
Ref: 146116090546
Ref: c-api/list c PyList_GET_SIZE16090778
Ref: 502016090778
Ref: c-api/list c PyList_GetItemRef16090925
Ref: 35916090925
Ref: c-api/list c PyList_GetItem16091473
Ref: 35a16091473
Ref: c-api/list c PyList_GET_ITEM16091803
Ref: 4bf816091803
Ref: c-api/list c PyList_SetItem16092021
Ref: 165e16092021
Ref: c-api/list c PyList_SET_ITEM16092548
Ref: 38e16092548
Ref: c-api/list c PyList_Insert16093270
Ref: 165d16093270
Ref: c-api/list c PyList_Append16093629
Ref: 4cd916093629
Ref: c-api/list c PyList_GetSlice16093943
Ref: 4cdb16093943
Ref: c-api/list c PyList_SetSlice16094386
Ref: 4cdd16094386
Ref: c-api/list c PyList_Extend16094909
Ref: 35b16094909
Ref: c-api/list c PyList_Clear16095365
Ref: 35c16095365
Ref: c-api/list c PyList_Sort16095757
Ref: 4cde16095757
Ref: c-api/list c PyList_Reverse16096013
Ref: 4cdc16096013
Ref: c-api/list c PyList_AsTuple16096276
Ref: 4cda16096276
Node: Coleções16096533
Ref: c-api/concrete container-objects16096662
Ref: 502116096662
Ref: c-api/concrete mapobjects16096662
Ref: 502216096662
Node: Objetos dicionários16096745
Ref: c-api/dict doc16096831
Ref: 502316096831
Ref: c-api/dict dictionary-objects16096831
Ref: 502416096831
Ref: c-api/dict dictobjects16096831
Ref: 502516096831
Ref: c-api/dict c PyDictObject16096889
Ref: 3c116096889
Ref: c-api/dict c PyDict_Type16097009
Ref: 4c5f16097009
Ref: c-api/dict c PyDict_Check16097264
Ref: 4f6116097264
Ref: c-api/dict c PyDict_CheckExact16097462
Ref: 502616097462
Ref: c-api/dict c PyDict_New16097677
Ref: 4c5d16097677
Ref: c-api/dict c PyDictProxy_New16097879
Ref: 4c5016097879
Ref: c-api/dict c PyDictProxy_Type16098301
Ref: 4c5116098301
Ref: c-api/dict c PyDict_Clear16098931
Ref: 4c5616098931
Ref: c-api/dict c PyDict_Contains16099092
Ref: 33816099092
Ref: c-api/dict c PyDict_ContainsString16099443
Ref: 33716099443
Ref: c-api/dict c PyDict_Copy16099732
Ref: 42016099732
Ref: c-api/dict c PyDict_SetItem16099955
Ref: 4b6316099955
Ref: c-api/dict c PyDict_SetItemString16100370
Ref: 16eb16100370
Ref: c-api/dict c PyDict_DelItem16100691
Ref: 4c5716100691
Ref: c-api/dict c PyDict_DelItemString16101103
Ref: 4c5816101103
Ref: c-api/dict c PyDict_GetItemRef16101399
Ref: 33a16101399
Ref: c-api/dict c PyDict_GetItem16102086
Ref: 38716102086
Ref: c-api/dict c PyDict_GetItemWithError16102868
Ref: 33c16102868
Ref: c-api/dict c PyDict_GetItemString16103306
Ref: 38816103306
Ref: c-api/dict c PyDict_GetItemStringRef16104061
Ref: 33b16104061
Ref: c-api/dict c PyDict_SetDefault16104442
Ref: 34016104442
Ref: c-api/dict c PyDict_SetDefaultRef16105062
Ref: 33f16105062
Ref: c-api/dict c PyDict_Pop16106232
Ref: 34116106232
Ref: c-api/dict c PyDict_PopString16107013
Ref: 34216107013
Ref: c-api/dict c PyDict_Items16107316
Ref: 4c5916107316
Ref: c-api/dict c PyDict_Keys16107547
Ref: 4c5a16107547
Ref: c-api/dict c PyDict_Values16107778
Ref: 4c6116107778
Ref: c-api/dict c PyDict_Size16108016
Ref: 4c5e16108016
Ref: c-api/dict c PyDict_GET_SIZE16108233
Ref: 502716108233
Ref: c-api/dict c PyDict_Next16108377
Ref: 16fd16108377
Ref: c-api/dict c PyDict_Merge16110809
Ref: 4c5b16110809
Ref: c-api/dict c PyDict_Update16111495
Ref: 4c6016111495
Ref: c-api/dict c PyDict_MergeFromSeq216111968
Ref: 4c5c16111968
Ref: c-api/dict c PyDict_AddWatcher16112765
Ref: 56216112765
Ref: c-api/dict c PyDict_ClearWatcher16113179
Ref: 502916113179
Ref: c-api/dict c PyDict_Watch16113527
Ref: 56316113527
Ref: c-api/dict c PyDict_Unwatch16113899
Ref: 502a16113899
Ref: c-api/dict c PyDict_WatchEvent16114367
Ref: 502b16114367
Ref: c-api/dict c PyDict_WatchCallback16114695
Ref: 502c16114695
Node: Objetos visão de dicionário16117371
Ref: c-api/dict dictionary-view-objects16117488
Ref: 502d16117488
Ref: c-api/dict c PyDictViewSet_Check16117563
Ref: 502e16117563
Ref: c-api/dict c PyDictKeys_Type16117885
Ref: 4c4f16117885
Ref: c-api/dict c PyDictKeys_Check16118135
Ref: 502f16118135
Ref: c-api/dict c PyDictValues_Type16118328
Ref: 4c5516118328
Ref: c-api/dict c PyDictValues_Check16118583
Ref: 503116118583
Ref: c-api/dict c PyDictItems_Type16118779
Ref: 4c4b16118779
Ref: c-api/dict c PyDictItems_Check16119029
Ref: 503016119029
Node: Dicionários ordenados16119222
Ref: c-api/dict ordered-dictionaries16119339
Ref: 503216119339
Ref: c-api/dict c PyODict_Type16119655
Ref: 503316119655
Ref: c-api/dict c PyODict_Check16119848
Ref: 503416119848
Ref: c-api/dict c PyODict_CheckExact16120079
Ref: 503516120079
Ref: c-api/dict c PyODictKeys_Type16120320
Ref: 503616120320
Ref: c-api/dict c PyODictValues_Type16120455
Ref: 503716120455
Ref: c-api/dict c PyODictItems_Type16120599
Ref: 503816120599
Ref: c-api/dict c PyODict_New16120736
Ref: 503916120736
Ref: c-api/dict c PyODict_SetItem16120931
Ref: 503a16120931
Ref: c-api/dict c PyODict_DelItem16121263
Ref: 503b16121263
Ref: c-api/dict c PyODict_GetItem16121974
Ref: 503c16121974
Ref: c-api/dict c PyODict_GetItemWithError16122179
Ref: 503d16122179
Ref: c-api/dict c PyODict_GetItemString16122381
Ref: 503e16122381
Ref: c-api/dict c PyODict_Contains16122578
Ref: 503f16122578
Ref: c-api/dict c PyODict_Size16122766
Ref: 504016122766
Ref: c-api/dict c PyODict_SIZE16122960
Ref: 504116122960
Node: Objeto Set16123073
Ref: c-api/set doc16123159
Ref: 504216123159
Ref: c-api/set set-objects16123159
Ref: 504316123159
Ref: c-api/set setobjects16123159
Ref: 504416123159
Ref: c-api/set translation-repo16123159
Ref: 504516123159
Ref: c-api/set c PySetObject16123941
Ref: 504616123941
Ref: c-api/set c PySet_Type16124655
Ref: 4d4f16124655
Ref: c-api/set c PyFrozenSet_Type16124852
Ref: 4cc516124852
Ref: c-api/set c PySet_Check16125254
Ref: 504716125254
Ref: c-api/set c PyFrozenSet_Check16125436
Ref: 504816125436
Ref: c-api/set c PyAnySet_Check16125630
Ref: 504916125630
Ref: c-api/set c PySet_CheckExact16125852
Ref: 8a116125852
Ref: c-api/set c PyAnySet_CheckExact16126079
Ref: 504a16126079
Ref: c-api/set c PyFrozenSet_CheckExact16126314
Ref: 504b16126314
Ref: c-api/set c PySet_New16126519
Ref: 148c16126519
Ref: c-api/set c PyFrozenSet_New16127078
Ref: 148d16127078
Ref: c-api/set c PySet_Size16127719
Ref: 149116127719
Ref: c-api/set c PySet_GET_SIZE16128093
Ref: 504c16128093
Ref: c-api/set c PySet_Contains16128242
Ref: 149016128242
Ref: c-api/set c PySet_Add16128832
Ref: 148e16128832
Ref: c-api/set c PySet_Discard16129737
Ref: 148f16129737
Ref: c-api/set c PySet_Pop16130399
Ref: 4d4e16130399
Ref: c-api/set c PySet_Clear16130858
Ref: 4d4d16130858
Node: Objetos Function<2>16131175
Ref: c-api/concrete function-objects16131300
Ref: 504d16131300
Ref: c-api/concrete otherobjects16131300
Ref: 504e16131300
Node: Objetos Function<3>16131596
Ref: c-api/function doc16131712
Ref: 504f16131712
Ref: c-api/function function-objects16131712
Ref: 505016131712
Ref: c-api/function id116131712
Ref: 505116131712
Ref: c-api/function c PyFunctionObject16131832
Ref: 56116131832
Ref: c-api/function c PyFunction_Type16131909
Ref: 505216131909
Ref: c-api/function c PyFunction_Check16132144
Ref: 505316132144
Ref: c-api/function c PyFunction_New16132380
Ref: 505416132380
Ref: c-api/function c PyFunction_NewWithQualName16133074
Ref: 505516133074
Ref: c-api/function c PyFunction_GetCode16133613
Ref: 505616133613
Ref: c-api/function c PyFunction_GetGlobals16133798
Ref: 505716133798
Ref: c-api/function c PyFunction_GetModule16133990
Ref: 505816133990
Ref: c-api/function c PyFunction_GetDefaults16134425
Ref: 505916134425
Ref: c-api/function c PyFunction_SetDefaults16134684
Ref: 505a16134684
Ref: c-api/function c PyFunction_SetVectorcall16134973
Ref: 56016134973
Ref: c-api/function c PyFunction_GetKwDefaults16135314
Ref: 505b16135314
Ref: c-api/function c PyFunction_SetKwDefaults16135597
Ref: 505c16135597
Ref: c-api/function c PyFunction_GetClosure16135996
Ref: 505d16135996
Ref: c-api/function c PyFunction_SetClosure16136239
Ref: 505e16136239
Ref: c-api/function c PyFunction_GetAnnotations16136537
Ref: 18bf16136537
Ref: c-api/function c PyFunction_SetAnnotations16136781
Ref: 505f16136781
Ref: c-api/function c PyFunction_GET_CODE16137070
Ref: 506016137070
Ref: c-api/function c PyFunction_GET_GLOBALS16137143
Ref: 506116137143
Ref: c-api/function c PyFunction_GET_MODULE16137229
Ref: 506216137229
Ref: c-api/function c PyFunction_GET_DEFAULTS16137304
Ref: 506316137304
Ref: c-api/function c PyFunction_GET_KW_DEFAULTS16137391
Ref: 506416137391
Ref: c-api/function c PyFunction_GET_CLOSURE16137481
Ref: 506516137481
Ref: c-api/function c PyFunction_GET_ANNOTATIONS16137567
Ref: 506616137567
Ref: c-api/function c PyFunction_AddWatcher16137961
Ref: 506716137961
Ref: c-api/function c PyFunction_ClearWatcher16138384
Ref: 506816138384
Ref: c-api/function c PyFunction_WatchEvent16138792
Ref: 506916138792
Ref: c-api/function c PyFunction_WatchCallback16139196
Ref: 506a16139196
Node: Objetos de Método de Instância16141659
Ref: c-api/method doc16141802
Ref: 506b16141802
Ref: c-api/method instance-method-objects16141802
Ref: 506c16141802
Ref: c-api/method instancemethod-objects16141802
Ref: 506d16141802
Ref: c-api/method translation-repo16141802
Ref: 506e16141802
Ref: c-api/method c PyInstanceMethod_Type16142109
Ref: 506f16142109
Ref: c-api/method c PyInstanceMethod_Check16142317
Ref: 507016142317
Ref: c-api/method c PyInstanceMethod_New16142577
Ref: 507116142577
Ref: c-api/method c PyInstanceMethod_Function16142892
Ref: 507216142892
Ref: c-api/method c PyInstanceMethod_GET_FUNCTION16143101
Ref: 507316143101
Node: Objetos método<2>16143346
Ref: c-api/method id116143484
Ref: 507416143484
Ref: c-api/method method-objects16143484
Ref: 507516143484
Ref: c-api/method c PyMethod_Type16143768
Ref: 507616143768
Ref: c-api/method c PyMethod_Check16143987
Ref: 507716143987
Ref: c-api/method c PyMethod_New16144217
Ref: 507816144217
Ref: c-api/method c PyMethod_Function16144615
Ref: 507916144615
Ref: c-api/method c PyMethod_GET_FUNCTION16144796
Ref: 507a16144796
Ref: c-api/method c PyMethod_Self16145022
Ref: 507b16145022
Ref: c-api/method c PyMethod_GET_SELF16145197
Ref: 507c16145197
Node: Objeto célula16145405
Ref: c-api/cell doc16145529
Ref: 507d16145529
Ref: c-api/cell cell-objects16145529
Ref: 70116145529
Ref: c-api/cell id116145529
Ref: 507e16145529
Ref: c-api/cell translation-repo16145529
Ref: 507f16145529
Ref: c-api/cell c PyCellObject16146229
Ref: 508016146229
Ref: c-api/cell c PyCell_Type16146308
Ref: 508116146308
Ref: c-api/cell c PyCell_Check16146422
Ref: 508216146422
Ref: c-api/cell c PyCell_New16146598
Ref: 508316146598
Ref: c-api/cell c PyCell_Get16146805
Ref: 508416146805
Ref: c-api/cell c PyCell_GET16147076
Ref: 508516147076
Ref: c-api/cell c PyCell_Set16147307
Ref: 508616147307
Ref: c-api/cell c PyCell_SET16147708
Ref: 8b316147708
Node: Objetos código<3>16148015
Ref: c-api/code doc16148153
Ref: 508716148153
Ref: c-api/code code-objects16148153
Ref: 508816148153
Ref: c-api/code codeobjects16148153
Ref: 5b516148153
Ref: c-api/code translation-repo16148153
Ref: 508916148153
Ref: c-api/code c PyCodeObject16148383
Ref: 77716148383
Ref: c-api/code c PyCode_Type16148563
Ref: 508a16148563
Ref: c-api/code c PyCode_Check16148731
Ref: 508b16148731
Ref: c-api/code c PyCode_GetNumFree16148887
Ref: 508c16148887
Ref: c-api/code c PyUnstable_Code_GetFirstFree16149073
Ref: 38616149073
Ref: c-api/code c PyUnstable_Code_New16149671
Ref: 508d16149671
Ref: c-api/code c PyCode_NewWithPosOnlyArgs16151187
Ref: 508e16151187
Ref: c-api/code c PyUnstable_Code_NewWithPosOnlyArgs16151187
Ref: 508f16151187
Ref: c-api/code c PyCode_NewEmpty16152472
Ref: 139616152472
Ref: c-api/code c PyCode_Addr2Line16152856
Ref: 88d16152856
Ref: c-api/code c PyCode_Addr2Location16153274
Ref: 5b416153274
Ref: c-api/code c PyCode_GetCode16153813
Ref: 77816153813
Ref: c-api/code c PyCode_GetVarnames16154438
Ref: 77916154438
Ref: c-api/code c PyCode_GetCellvars16154819
Ref: 77a16154819
Ref: c-api/code c PyCode_GetFreevars16155238
Ref: 77b16155238
Ref: c-api/code c PyCode_AddWatcher16155645
Ref: 56616155645
Ref: c-api/code c PyCode_ClearWatcher16156052
Ref: 56716156052
Ref: c-api/code c PyCodeEvent16156447
Ref: 509016156447
Ref: c-api/code c PyCode_WatchCallback16156648
Ref: 509116156648
Ref: c-api/code c PyCode_Optimize16158708
Ref: 509216158708
Ref: Objetos código<3>-Footnote-116159135
Node: Sinalizadores de objetos código16159217
Ref: c-api/code c-codeobject-flags16159363
Ref: 4e7616159363
Ref: c-api/code code-object-flags16159363
Ref: 509316159363
Ref: c-api/code c CO_OPTIMIZED16160559
Ref: 509416160559
Ref: c-api/code c CO_NEWLOCALS16160760
Ref: 509516160760
Ref: c-api/code c CO_VARARGS16160959
Ref: 509616160959
Ref: c-api/code c CO_VARKEYWORDS16161162
Ref: 509716161162
Ref: c-api/code c CO_NESTED16161360
Ref: 509816161360
Ref: c-api/code c CO_GENERATOR16161561
Ref: 509916161561
Ref: c-api/code c CO_COROUTINE16161762
Ref: 509a16161762
Ref: c-api/code c CO_ITERABLE_COROUTINE16161972
Ref: 509b16161972
Ref: c-api/code c CO_ASYNC_GENERATOR16162179
Ref: 509c16162179
Ref: c-api/code c CO_FUTURE_DIVISION16162386
Ref: 509d16162386
Ref: c-api/code c CO_FUTURE_ABSOLUTE_IMPORT16162606
Ref: 509e16162606
Ref: c-api/code c CO_FUTURE_WITH_STATEMENT16162825
Ref: 509f16162825
Ref: c-api/code c CO_FUTURE_PRINT_FUNCTION16163044
Ref: 50a016163044
Ref: c-api/code c CO_FUTURE_UNICODE_LITERALS16163265
Ref: 50a116163265
Ref: c-api/code c CO_FUTURE_GENERATOR_STOP16163539
Ref: 50a216163539
Ref: c-api/code c CO_FUTURE_ANNOTATIONS16163755
Ref: 4e7516163755
Node: Informação adicional16163869
Ref: c-api/code extra-information16163988
Ref: 50a316163988
Ref: c-api/code c _PyEval_RequestCodeExtraIndex16164419
Ref: 50a416164419
Ref: c-api/code c PyUnstable_Eval_RequestCodeExtraIndex16164419
Ref: 50a516164419
Ref: c-api/code c _PyCode_GetExtra16165546
Ref: 50a616165546
Ref: c-api/code c PyUnstable_Code_GetExtra16165546
Ref: 50a716165546
Ref: c-api/code c _PyCode_SetExtra16166394
Ref: 50a816166394
Ref: c-api/code c PyUnstable_Code_SetExtra16166394
Ref: 50a916166394
Node: Outros Objetos16167097
Ref: c-api/concrete other-objects16167244
Ref: 50aa16167244
Node: Objetos arquivos16167713
Ref: c-api/file doc16167807
Ref: 50ab16167807
Ref: c-api/file file-objects16167807
Ref: 50ac16167807
Ref: c-api/file fileobjects16167807
Ref: 50ad16167807
Ref: c-api/file c PyFile_FromFd16168452
Ref: 4cbd16168452
Ref: c-api/file c PyObject_AsFileDescriptor16169562
Ref: 4d2416169562
Ref: c-api/file c PyFile_GetLine16170043
Ref: 4cbe16170043
Ref: c-api/file c PyFile_SetOpenCodeHook16170924
Ref: 181e16170924
Ref: c-api/file c Py_OpenCodeHookFunction16171192
Ref: 50ae16171192
Ref: c-api/file c PyFile_OpenCodeObject16172419
Ref: 50af16172419
Ref: c-api/file c PyFile_OpenCode16173075
Ref: 50b016173075
Ref: c-api/file c PyFile_WriteObject16173293
Ref: 4cbf16173293
Ref: c-api/file c PyFile_WriteString16173760
Ref: 4cc016173760
Node: Objetos do Módulo16174031
Ref: c-api/module doc16174152
Ref: 50b116174152
Ref: c-api/module module-objects16174152
Ref: 50b216174152
Ref: c-api/module moduleobjects16174152
Ref: 50b316174152
Ref: c-api/module translation-repo16174152
Ref: 50b416174152
Ref: c-api/module c PyModule_Type16174206
Ref: 4d0016174206
Ref: c-api/module c PyModule_Check16174466
Ref: 50b516174466
Ref: c-api/module c PyModule_CheckExact16174650
Ref: 50b616174650
Ref: c-api/module c PyModule_NewObject16174851
Ref: 4cfe16174851
Ref: c-api/module c PyModule_New16175642
Ref: 4cfd16175642
Ref: c-api/module c PyModule_GetDict16175922
Ref: 4cfa16175922
Ref: c-api/module c PyModule_GetNameObject16176699
Ref: 4cfc16176699
Ref: c-api/module c PyModule_GetName16177116
Ref: 4cfb16177116
Ref: c-api/module c PyModule_GetState16177515
Ref: 98716177515
Ref: c-api/module c PyModule_GetDef16177804
Ref: 4cf916177804
Ref: c-api/module c PyModule_GetFilenameObject16178258
Ref: 3f916178258
Ref: c-api/module c PyModule_GetFilename16178784
Ref: 3f816178784
Node: Inicializando módulos C16179447
Ref: c-api/module initializing-c-modules16179556
Ref: 50b716179556
Ref: c-api/module initializing-modules16179556
Ref: 4ba616179556
Ref: c-api/module c PyModuleDef16180265
Ref: 98416180265
Ref: c-api/module c PyModuleDef m_base16180601
Ref: 50b916180601
Ref: c-api/module c PyModuleDef m_name16180720
Ref: 50ba16180720
Ref: c-api/module c PyModuleDef m_doc16180796
Ref: 50bb16180796
Ref: c-api/module c PyModuleDef m_size16180963
Ref: 98616180963
Ref: c-api/module c PyModuleDef m_methods16182015
Ref: 50bc16182015
Ref: c-api/module c PyModuleDef m_slots16182271
Ref: 50bd16182271
Ref: c-api/module c PyModuleDef m_slots m_reload16182680
Ref: 50be16182680
Ref: c-api/module c PyModuleDef m_traverse16182740
Ref: 98116182740
Ref: c-api/module c PyModuleDef m_clear16183536
Ref: 98216183536
Ref: c-api/module c PyModuleDef m_free16184704
Ref: 98316184704
Ref: Inicializando módulos C-Footnote-116185672
Node: inicialização de fase única16185714
Ref: c-api/module single-phase-initialization16185842
Ref: 50c016185842
Ref: c-api/module c PyModule_Create16186135
Ref: 50b816186135
Ref: c-api/module c PyModule_Create216186445
Ref: 4cf816186445
Node: Inicialização multifásica16187276
Ref: c-api/module id116187462
Ref: 50c116187462
Ref: c-api/module multi-phase-initialization16187462
Ref: 4ba716187462
Ref: c-api/module c PyModuleDef_Init16189705
Ref: 4b4c16189705
Ref: c-api/module c PyModuleDef_Slot16190268
Ref: 4cf616190268
Ref: c-api/module c PyModuleDef_Slot slot16190398
Ref: 50c316190398
Ref: c-api/module c PyModuleDef_Slot value16190526
Ref: 50c416190526
Ref: c-api/module c Py_mod_create16190755
Ref: 4de716190755
Ref: c-api/module c Py_mod_create create_module16191011
Ref: 50c516191011
Ref: c-api/module c Py_mod_exec16192492
Ref: 98516192492
Ref: c-api/module c Py_mod_exec exec_module16192827
Ref: 50c616192827
Ref: c-api/module c Py_mod_multiple_interpreters16193053
Ref: 4de816193053
Ref: c-api/module c Py_MOD_MULTIPLE_INTERPRETERS_NOT_SUPPORTED16193205
Ref: 4b4e16193205
Ref: c-api/module c Py_MOD_MULTIPLE_INTERPRETERS_SUPPORTED16193341
Ref: 50c716193341
Ref: c-api/module c Py_MOD_PER_INTERPRETER_GIL_SUPPORTED16193590
Ref: 50c816193590
Ref: c-api/module c Py_mod_gil16194205
Ref: 15816194205
Ref: c-api/module c Py_MOD_GIL_USED16194339
Ref: 50c916194339
Ref: c-api/module c Py_MOD_GIL_NOT_USED16194531
Ref: 50ca16194531
Ref: Inicialização multifásica-Footnote-116195255
Ref: Inicialização multifásica-Footnote-216195297
Node: Funções de criação de módulo de baixo nível16195339
Ref: c-api/module low-level-module-creation-functions16195512
Ref: 50cb16195512
Ref: c-api/module c PyModule_FromDefAndSpec16195913
Ref: ee216195913
Ref: c-api/module c PyModule_FromDefAndSpec216196312
Ref: ee316196312
Ref: c-api/module c PyModule_ExecDef16197086
Ref: ee416197086
Ref: c-api/module c PyModule_SetDocString16197333
Ref: 4cff16197333
Ref: c-api/module c PyModule_AddFunctions16197824
Ref: 4cf716197824
Node: Support functions16198704
Ref: c-api/module support-functions16198840
Ref: 50cc16198840
Ref: c-api/module c PyModule_AddObjectRef16199126
Ref: 36516199126
Ref: c-api/module c PyModule_Add16201060
Ref: 36416201060
Ref: c-api/module c PyModule_AddObject16201647
Ref: 36616201647
Ref: c-api/module c PyModule_AddIntConstant16203090
Ref: 158516203090
Ref: c-api/module c PyModule_AddStringConstant16203619
Ref: 158616203619
Ref: c-api/module c PyModule_AddIntMacro16204223
Ref: 143a16204223
Ref: c-api/module c PyModule_AddStringMacro16204580
Ref: 143916204580
Ref: c-api/module c PyModule_AddType16204675
Ref: 97c16204675
Ref: c-api/module c PyUnstable_Module_SetGIL16205155
Ref: 17916205155
Node: Pesquisa por módulos16206016
Ref: c-api/module module-lookup16206125
Ref: 50cd16206125
Ref: c-api/module c PyState_FindModule16206559
Ref: 4d5416206559
Ref: c-api/module c PyState_AddModule16207113
Ref: 4d5316207113
Ref: c-api/module c PyState_RemoveModule16208174
Ref: 4d5516208174
Node: Objetos Iteradores16208519
Ref: c-api/iterator doc16208643
Ref: 50ce16208643
Ref: c-api/iterator id116208643
Ref: 50cf16208643
Ref: c-api/iterator iterator-objects16208643
Ref: 50d016208643
Ref: c-api/iterator translation-repo16208643
Ref: 50d116208643
Ref: c-api/iterator c PySeqIter_Type16209076
Ref: 4d3c16209076
Ref: c-api/iterator c PySeqIter_Check16209380
Ref: 50d216209380
Ref: c-api/iterator c PySeqIter_New16209544
Ref: 4d3b16209544
Ref: c-api/iterator c PyCallIter_Type16209888
Ref: 4c2a16209888
Ref: c-api/iterator c PyCallIter_Check16210153
Ref: 50d316210153
Ref: c-api/iterator c PyCallIter_New16210319
Ref: 4c2916210319
Node: Objetos intervalo16210913
Ref: c-api/iterator range-objects16211023
Ref: 50d416211023
Ref: c-api/iterator c PyRange_Type16211078
Ref: 4d3916211078
Ref: c-api/iterator c PyRange_Check16211227
Ref: 50d516211227
Node: Tipos de iteradores embutidos16211408
Ref: c-api/iterator builtin-iterator-types16211552
Ref: 50d616211552
Ref: c-api/iterator c PyEnum_Type16212144
Ref: 4c6316212144
Ref: c-api/iterator c PyFilter_Type16212269
Ref: 4cc116212269
Ref: c-api/iterator c PyMap_Type16212454
Ref: 4cec16212454
Ref: c-api/iterator c PyReversed_Type16212573
Ref: 4d3a16212573
Ref: c-api/iterator c PyZip_Type16212760
Ref: 4dbe16212760
Node: Outros objetos iteradores16212838
Ref: c-api/iterator other-iterator-objects16212956
Ref: 50d716212956
Ref: c-api/iterator c PyByteArrayIter_Type16213027
Ref: 4c1116213027
Ref: c-api/iterator c PyBytesIter_Type16213133
Ref: 4c1716213133
Ref: c-api/iterator c PyListIter_Type16213235
Ref: 4cd716213235
Ref: c-api/iterator c PyListRevIter_Type16213336
Ref: 4cd816213336
Ref: c-api/iterator c PySetIter_Type16213440
Ref: 4d4c16213440
Ref: c-api/iterator c PyTupleIter_Type16213540
Ref: 4d7416213540
Ref: c-api/iterator c PyRangeIter_Type16213642
Ref: 4d3816213642
Ref: c-api/iterator c PyLongRangeIter_Type16213744
Ref: 4cdf16213744
Ref: c-api/iterator c PyDictIterKey_Type16213850
Ref: 4c4d16213850
Ref: c-api/iterator c PyDictRevIterKey_Type16213954
Ref: 4c5316213954
Ref: c-api/iterator c PyDictIterValue_Type16214082
Ref: 4c4e16214082
Ref: c-api/iterator c PyDictRevIterValue_Type16214188
Ref: 4c5416214188
Ref: c-api/iterator c PyDictIterItem_Type16214318
Ref: 4c4c16214318
Ref: c-api/iterator c PyDictRevIterItem_Type16214423
Ref: 4c5216214423
Ref: c-api/iterator c PyODictIter_Type16214552
Ref: 50d816214552
Node: Objetos descritores16215137
Ref: c-api/descriptor doc16215256
Ref: 50d916215256
Ref: c-api/descriptor descriptor-objects16215256
Ref: 50da16215256
Ref: c-api/descriptor id116215256
Ref: 50db16215256
Ref: c-api/descriptor translation-repo16215256
Ref: 50dc16215256
Ref: c-api/descriptor c PyProperty_Type16215447
Ref: 4d3716215447
Ref: c-api/descriptor c PyDescr_NewGetSet16215611
Ref: 4c4916215611
Ref: c-api/descriptor c PyDescr_NewMember16215809
Ref: 4c4a16215809
Ref: c-api/descriptor c PyMemberDescr_Type16216005
Ref: 4cf116216005
Ref: c-api/descriptor c PyGetSetDescr_Type16216385
Ref: 4cc816216385
Ref: c-api/descriptor c PyDescr_NewMethod16216762
Ref: 1b0416216762
Ref: c-api/descriptor c PyMethodDescr_Type16216958
Ref: 4cf516216958
Ref: c-api/descriptor c PyDescr_NewWrapper16217325
Ref: 50dd16217325
Ref: c-api/descriptor c PyWrapperDescr_Type16217498
Ref: 4dbc16217498
Ref: c-api/descriptor c PyDescr_NewClassMethod16217989
Ref: 4c4816217989
Ref: c-api/descriptor c PyDescr_IsData16218185
Ref: 1a3f16218185
Ref: c-api/descriptor c PyWrapper_New16218452
Ref: 4dbd16218452
Node: Descritores embutidos16218646
Ref: c-api/descriptor built-in-descriptors16218723
Ref: 50de16218723
Ref: c-api/descriptor c PySuper_Type16218786
Ref: 4d5a16218786
Ref: c-api/descriptor c PyClassMethod_Type16218995
Ref: 50df16218995
Ref: c-api/descriptor c PyClassMethodDescr_Type16219177
Ref: 4c3616219177
Ref: c-api/descriptor c PyClassMethod_New16219540
Ref: 50e016219540
Ref: c-api/descriptor c PyStaticMethod_Type16219989
Ref: 50e116219989
Ref: c-api/descriptor c PyStaticMethod_New16220173
Ref: 50e216220173
Node: Objetos Slice16220630
Ref: c-api/slice doc16220749
Ref: 50e316220749
Ref: c-api/slice id116220749
Ref: 50e416220749
Ref: c-api/slice slice-objects16220749
Ref: 50e516220749
Ref: c-api/slice translation-repo16220749
Ref: 50e616220749
Ref: c-api/slice c PySlice_Type16220796
Ref: 4d5216220796
Ref: c-api/slice c PySlice_Check16220992
Ref: 50e716220992
Ref: c-api/slice c PySlice_New16221160
Ref: 4d5116221160
Ref: c-api/slice c PySlice_GetIndices16221761
Ref: 4d5016221761
Ref: c-api/slice c PySlice_GetIndicesEx16222582
Ref: 3fc16222582
Ref: c-api/slice c PySlice_Unpack16224725
Ref: 3fd16224725
Ref: c-api/slice c PySlice_AdjustIndices16225501
Ref: 3fe16225501
Node: Objeto Ellipsis16226084
Ref: c-api/slice ellipsis-object16226149
Ref: 50e816226149
Ref: c-api/slice c PyEllipsis_Type16226200
Ref: 4c6216226200
Ref: c-api/slice c Py_Ellipsis16226420
Ref: 50e916226420
Ref: c-api/memoryview memoryview-objects16226687
Ref: 4f4616226687
Node: Objetos MemoryView16226687
Ref: c-api/memoryview doc16226825
Ref: 50ea16226825
Ref: c-api/memoryview id116226825
Ref: 50eb16226825
Ref: c-api/memoryview translation-repo16226825
Ref: 50ec16226825
Ref: c-api/memoryview c PyMemoryView_Type16227042
Ref: 4cf416227042
Ref: c-api/memoryview c PyMemoryView_FromObject16227306
Ref: 4cf216227306
Ref: c-api/memoryview c PyBUF_READ16227787
Ref: 178616227787
Ref: c-api/memoryview c PyBUF_WRITE16227938
Ref: 178716227938
Ref: c-api/memoryview c PyMemoryView_FromMemory16228081
Ref: 11af16228081
Ref: c-api/memoryview c PyMemoryView_FromBuffer16228493
Ref: 76116228493
Ref: c-api/memoryview c PyMemoryView_GetContiguous16228886
Ref: 4cf316228886
Ref: c-api/memoryview c PyMemoryView_Check16229591
Ref: 50ed16229591
Ref: c-api/memoryview c PyMemoryView_GET_BUFFER16229828
Ref: 50ee16229828
Ref: c-api/memoryview c PyMemoryView_GET_BASE16230155
Ref: 50ef16230155
Ref: c-api/picklebuffer picklebuffer-objects16230548
Ref: 50f016230548
Node: Objetos buffer serializados com pickle16230548
Ref: c-api/picklebuffer doc16230701
Ref: 50f116230701
Ref: c-api/picklebuffer pickle-buffer-objects16230701
Ref: 50f216230701
Ref: c-api/picklebuffer translation-repo16230701
Ref: 50f316230701
Ref: c-api/picklebuffer c PyPickleBuffer_Type16230996
Ref: 50f416230996
Ref: c-api/picklebuffer c PyPickleBuffer_Check16231260
Ref: 50f516231260
Ref: c-api/picklebuffer c PyPickleBuffer_FromObject16231443
Ref: 50f616231443
Ref: c-api/picklebuffer c PyPickleBuffer_GetBuffer16231947
Ref: 50f716231947
Ref: c-api/picklebuffer c PyPickleBuffer_Release16232614
Ref: 50f816232614
Node: Objetos referência fraca<2>16232952
Ref: c-api/weakref doc16233098
Ref: 50f916233098
Ref: c-api/weakref translation-repo16233098
Ref: 50fa16233098
Ref: c-api/weakref weak-reference-objects16233098
Ref: 50fb16233098
Ref: c-api/weakref weakrefobjects16233098
Ref: 4f7116233098
Ref: c-api/weakref c PyWeakref_Check16233475
Ref: 50fc16233475
Ref: c-api/weakref c PyWeakref_CheckRef16233654
Ref: 50fd16233654
Ref: c-api/weakref c PyWeakref_CheckRefExact16233848
Ref: 50fe16233848
Ref: c-api/weakref c PyWeakref_CheckProxy16234054
Ref: 50ff16234054
Ref: c-api/weakref c PyWeakref_NewRef16234213
Ref: 196f16234213
Ref: c-api/weakref c PyWeakref_NewProxy16235247
Ref: 4dbb16235247
Ref: c-api/weakref c PyWeakref_GetRef16236279
Ref: 37816236279
Ref: c-api/weakref c PyWeakref_GetObject16236885
Ref: 37916236885
Ref: c-api/weakref c PyWeakref_GET_OBJECT16237675
Ref: 3bf16237675
Ref: c-api/weakref c PyObject_ClearWeakRefs16237989
Ref: 57616237989
Ref: c-api/weakref c PyUnstable_Object_ClearWeakRefsNoCallbacks16238394
Ref: 16fe16238394
Node: Capsules<2>16239430
Ref: c-api/capsule doc16239551
Ref: 510016239551
Ref: c-api/capsule capsules16239551
Ref: 272316239551
Ref: c-api/capsule id116239551
Ref: 510116239551
Ref: c-api/capsule translation-repo16239551
Ref: 510216239551
Ref: c-api/capsule c PyCapsule16239747
Ref: 12b416239747
Ref: c-api/capsule c PyCapsule_Type16240262
Ref: 4c3516240262
Ref: c-api/capsule c PyCapsule_Destructor16240504
Ref: 4c2c16240504
Ref: c-api/capsule c PyCapsule_CheckExact16240839
Ref: 510316240839
Ref: c-api/capsule c PyCapsule_New16241000
Ref: 4b6d16241000
Ref: c-api/capsule c PyCapsule_GetPointer16241995
Ref: 4c3016241995
Ref: c-api/capsule c PyCapsule_GetDestructor16242523
Ref: 4c2e16242523
Ref: c-api/capsule c PyCapsule_GetContext16243024
Ref: 4c2d16243024
Ref: c-api/capsule c PyCapsule_GetName16243480
Ref: 4c2f16243480
Ref: c-api/capsule c PyCapsule_Import16243926
Ref: 199916243926
Ref: c-api/capsule c PyCapsule_IsValid16245011
Ref: 13a316245011
Ref: c-api/capsule c PyCapsule_SetContext16245953
Ref: 4c3116245953
Ref: c-api/capsule c PyCapsule_SetDestructor16246269
Ref: 4c3216246269
Ref: c-api/capsule c PyCapsule_SetName16246598
Ref: 4c3316246598
Ref: c-api/capsule c PyCapsule_SetPointer16247079
Ref: 4c3416247079
Node: Objetos Frame16247426
Ref: c-api/frame doc16247536
Ref: 510416247536
Ref: c-api/frame frame-objects16247536
Ref: 510516247536
Ref: c-api/frame translation-repo16247536
Ref: 510616247536
Ref: c-api/frame c PyFrameObject16247583
Ref: 78916247583
Ref: c-api/frame c PyFrame_Type16248143
Ref: 78716248143
Ref: c-api/frame c PyFrame_New16248427
Ref: 187716248427
Ref: c-api/frame c PyFrame_Check16248792
Ref: 78516248792
Ref: c-api/frame c PyFrame_GetBack16249029
Ref: 78616249029
Ref: c-api/frame c PyFrame_GetBuiltins16249351
Ref: 76b16249351
Ref: c-api/frame c PyFrame_GetCode16249669
Ref: 78a16249669
Ref: c-api/frame c PyFrame_GetGenerator16250039
Ref: 76c16250039
Ref: c-api/frame c PyFrame_GetGlobals16250482
Ref: 76d16250482
Ref: c-api/frame c PyFrame_GetLasti16250799
Ref: 76e16250799
Ref: c-api/frame c PyFrame_GetVar16251006
Ref: 56816251006
Ref: c-api/frame c PyFrame_GetVarString16251567
Ref: 56916251567
Ref: c-api/frame c PyFrame_GetLocals16251866
Ref: 41f16251866
Ref: c-api/frame c PyFrame_GetLineNumber16252644
Ref: 78b16252644
Ref: Objetos Frame-Footnote-116252970
Node: Proxies locais de quadro16253012
Ref: c-api/frame frame-locals-proxies16253121
Ref: 510816253121
Ref: c-api/frame c PyFrameLocalsProxy_Type16253598
Ref: 510716253598
Ref: c-api/frame c PyFrameLocalsProxy_Check16253725
Ref: 510916253725
Ref: Proxies locais de quadro-Footnote-116253893
Node: Legacy Local Variable APIs16253935
Ref: c-api/frame legacy-local-variable-apis16254068
Ref: 510a16254068
Ref: c-api/frame c PyFrame_LocalsToFast16254270
Ref: 510b16254270
Ref: c-api/frame c PyFrame_FastToLocals16254817
Ref: 510c16254817
Ref: c-api/frame c PyFrame_FastToLocalsWithError16255281
Ref: 510d16255281
Ref: Legacy Local Variable APIs-Footnote-116255746
Node: Internal Frames16255788
Ref: c-api/frame internal-frames16255888
Ref: 510e16255888
Ref: c-api/frame c _PyInterpreterFrame16255989
Ref: 510f16255989
Ref: c-api/frame c PyUnstable_InterpreterFrame_GetCode16256122
Ref: 511016256122
Ref: c-api/frame c PyUnstable_InterpreterFrame_GetLasti16256564
Ref: 511116256564
Ref: c-api/frame c PyUnstable_InterpreterFrame_GetLine16256961
Ref: 511216256961
Ref: Internal Frames-Footnote-116257417
Node: Objetos Geradores16257459
Ref: c-api/gen doc16257578
Ref: 511316257578
Ref: c-api/gen gen-objects16257578
Ref: 511416257578
Ref: c-api/gen generator-objects16257578
Ref: 511516257578
Ref: c-api/gen translation-repo16257578
Ref: 511616257578
Ref: c-api/gen c PyGenObject16257898
Ref: 511916257898
Ref: c-api/gen c PyGen_Type16257978
Ref: 511a16257978
Ref: c-api/gen c PyGen_Check16258091
Ref: 511b16258091
Ref: c-api/gen c PyGen_CheckExact16258266
Ref: 511c16258266
Ref: c-api/gen c PyGen_New16258461
Ref: 511716258461
Ref: c-api/gen c PyGen_NewWithQualName16258747
Ref: 511816258747
Ref: c-api/gen c PyGen_GetCode16259179
Ref: 511d16259179
Node: Objetos geradores assíncronos16259437
Ref: c-api/gen asynchronous-generator-objects16259521
Ref: 511e16259521
Ref: c-api/gen c PyAsyncGen_Type16259637
Ref: 511f16259637
Ref: c-api/gen c PyAsyncGen_New16259892
Ref: 512016259892
Ref: c-api/gen c PyAsyncGen_CheckExact16260465
Ref: 512116260465
Ref: Objetos geradores assíncronos-Footnote-116260723
Node: Objetos corrotina<2>16260765
Ref: c-api/coro doc16260904
Ref: 512216260904
Ref: c-api/coro coro-objects16260904
Ref: eff16260904
Ref: c-api/coro coroutine-objects16260904
Ref: 512316260904
Ref: c-api/coro translation-repo16260904
Ref: 512416260904
Ref: c-api/coro c PyCoroObject16261088
Ref: 512516261088
Ref: c-api/coro c PyCoro_Type16261174
Ref: 512616261174
Ref: c-api/coro c PyCoro_CheckExact16261288
Ref: 512716261288
Ref: c-api/coro c PyCoro_New16261479
Ref: 512816261479
Node: Objetos de variáveis de contexto16261909
Ref: c-api/contextvars doc16262062
Ref: 512916262062
Ref: c-api/contextvars context-variables-objects16262062
Ref: 512a16262062
Ref: c-api/contextvars contextvarsobjects16262062
Ref: b0b16262062
Ref: c-api/contextvars translation-repo16262062
Ref: 512b16262062
Ref: c-api/contextvars contextvarsobjects-pointertype-change16262148
Ref: c4016262148
Ref: c-api/contextvars c PyContext16262723
Ref: 512c16262723
Ref: c-api/contextvars c PyContextVar16262842
Ref: 512d16262842
Ref: c-api/contextvars c PyContextToken16262967
Ref: 512e16262967
Ref: c-api/contextvars c PyContext_Type16263089
Ref: 512f16263089
Ref: c-api/contextvars c PyContextVar_Type16263207
Ref: 513016263207
Ref: c-api/contextvars c PyContextToken_Type16263341
Ref: 513116263341
Ref: c-api/contextvars c PyContext_CheckExact16263525
Ref: 513216263525
Ref: c-api/contextvars c PyContextVar_CheckExact16263723
Ref: 513316263723
Ref: c-api/contextvars c PyContextToken_CheckExact16263928
Ref: 513416263928
Ref: c-api/contextvars c PyContext_New16264189
Ref: 513516264189
Ref: c-api/contextvars c PyContext_Copy16264374
Ref: 513616264374
Ref: c-api/contextvars c PyContext_CopyCurrent16264588
Ref: 513716264588
Ref: c-api/contextvars c PyContext_Enter16264792
Ref: 513816264792
Ref: c-api/contextvars c PyContext_Exit16264976
Ref: 513916264976
Ref: c-api/contextvars c PyContextVar_New16265245
Ref: 513a16265245
Ref: c-api/contextvars c PyContextVar_Get16265685
Ref: 513b16265685
Ref: c-api/contextvars c PyContextVar_Set16266356
Ref: 513c16266356
Ref: c-api/contextvars c PyContextVar_Reset16266649
Ref: 513d16266649
Ref: Objetos de variáveis de contexto-Footnote-116267003
Node: Objetos de indicação de tipos16267068
Ref: c-api/typehints doc16267192
Ref: 513e16267192
Ref: c-api/typehints objects-for-type-hinting16267192
Ref: 513f16267192
Ref: c-api/typehints translation-repo16267192
Ref: 514016267192
Ref: c-api/typehints typehintobjects16267192
Ref: 514116267192
Ref: c-api/typehints c Py_GenericAlias16267465
Ref: 4dc216267465
Ref: c-api/typehints c Py_GenericAliasType16268943
Ref: 4dc316268943
Node: API C para módulos de extensão16269234
Ref: c-api/concrete c-api-for-extension-modules16269353
Ref: 514216269353
Node: API C de curses16269557
Ref: c-api/curses doc16269664
Ref: 514316269664
Ref: c-api/curses curses-c-api16269664
Ref: 514416269664
Ref: c-api/curses c import_curses16270188
Ref: 514516270188
Ref: c-api/curses c PyCurses_API16270709
Ref: 514616270709
Ref: c-api/curses c PyCurses_API_pointers16271722
Ref: 514b16271722
Ref: c-api/curses c PyCursesWindow_Type16271911
Ref: 514716271911
Ref: c-api/curses c PyCursesWindow_Check16272056
Ref: 514c16272056
Ref: c-api/curses c PyCursesSetupTermCalled16272429
Ref: 514816272429
Ref: c-api/curses c PyCursesInitialised16272845
Ref: 514916272845
Ref: c-api/curses c PyCursesInitialisedColor16273251
Ref: 514a16273251
Node: Dados internos16273679
Ref: c-api/curses internal-data16273814
Ref: 514d16273814
Ref: c-api/curses c PyCurses_CAPSULE_NAME16273961
Ref: 514e16273961
Node: Objetos DateTime<2>16274158
Ref: c-api/datetime doc16274295
Ref: 514f16274295
Ref: c-api/datetime datetime-objects16274295
Ref: 515016274295
Ref: c-api/datetime datetimeobjects16274295
Ref: 4ef616274295
Ref: c-api/datetime translation-repo16274295
Ref: 515116274295
Ref: c-api/datetime c PyDateTime_IMPORT16274858
Ref: 515216274858
Ref: c-api/datetime c PyDateTime_CAPI16275344
Ref: 515416275344
Ref: c-api/datetime c PyDateTimeAPI16275581
Ref: 515316275581
Ref: c-api/datetime c PyDateTime_Date16275824
Ref: 515516275824
Ref: c-api/datetime c PyDateTime_DateTime16275955
Ref: 515616275955
Ref: c-api/datetime c PyDateTime_Time16276094
Ref: 515716276094
Ref: c-api/datetime c PyDateTime_Delta16276225
Ref: 515816276225
Ref: c-api/datetime c PyDateTime_DateType16276377
Ref: 515916276377
Ref: c-api/datetime c PyDateTime_DateTimeType16276603
Ref: 515a16276603
Ref: c-api/datetime c PyDateTime_TimeType16276841
Ref: 515b16276841
Ref: c-api/datetime c PyDateTime_DeltaType16277067
Ref: 515c16277067
Ref: c-api/datetime c PyDateTime_TZInfoType16277340
Ref: 515d16277340
Ref: c-api/datetime c PyDateTime_TimeZone_UTC16277616
Ref: bdc16277616
Ref: c-api/datetime c PyDate_Check16277870
Ref: 515e16277870
Ref: c-api/datetime c PyDate_CheckExact16278118
Ref: 515f16278118
Ref: c-api/datetime c PyDateTime_Check16278322
Ref: 516016278322
Ref: c-api/datetime c PyDateTime_CheckExact16278581
Ref: 516116278581
Ref: c-api/datetime c PyTime_Check16278798
Ref: 516216278798
Ref: c-api/datetime c PyTime_CheckExact16279045
Ref: 516316279045
Ref: c-api/datetime c PyDelta_Check16279249
Ref: 516416279249
Ref: c-api/datetime c PyDelta_CheckExact16279500
Ref: 516516279500
Ref: c-api/datetime c PyTZInfo_Check16279706
Ref: 516616279706
Ref: c-api/datetime c PyTZInfo_CheckExact16279960
Ref: 516716279960
Ref: c-api/datetime c PyDate_FromDate16280196
Ref: 516816280196
Ref: c-api/datetime c PyDateTime_FromDateAndTime16280419
Ref: 516916280419
Ref: c-api/datetime c PyDateTime_FromDateAndTimeAndFold16280756
Ref: 516a16280756
Ref: c-api/datetime c PyTime_FromTime16281153
Ref: 516b16281153
Ref: c-api/datetime c PyTime_FromTimeAndFold16281420
Ref: 516c16281420
Ref: c-api/datetime c PyDelta_FromDSU16281746
Ref: 516d16281746
Ref: c-api/datetime c PyTimeZone_FromOffset16282209
Ref: bda16282209
Ref: c-api/datetime c PyTimeZone_FromOffsetAndName16282504
Ref: c-api/datetime c PyDateTime_GET_YEAR16283079
Ref: 516e16283079
Ref: c-api/datetime c PyDateTime_GET_MONTH16283188
Ref: 516f16283188
Ref: c-api/datetime c PyDateTime_GET_DAY16283300
Ref: 517016283300
Ref: c-api/datetime c PyDateTime_DATE_GET_HOUR16283622
Ref: 517116283622
Ref: c-api/datetime c PyDateTime_DATE_GET_MINUTE16283742
Ref: 517216283742
Ref: c-api/datetime c PyDateTime_DATE_GET_SECOND16283866
Ref: 517316283866
Ref: c-api/datetime c PyDateTime_DATE_GET_MICROSECOND16283991
Ref: 517416283991
Ref: c-api/datetime c PyDateTime_DATE_GET_FOLD16284141
Ref: 517516284141
Ref: c-api/datetime c PyDateTime_DATE_GET_TZINFO16284294
Ref: 89916284294
Ref: c-api/datetime c PyDateTime_TIME_GET_HOUR16284685
Ref: 517616284685
Ref: c-api/datetime c PyDateTime_TIME_GET_MINUTE16284801
Ref: 517716284801
Ref: c-api/datetime c PyDateTime_TIME_GET_SECOND16284921
Ref: 517816284921
Ref: c-api/datetime c PyDateTime_TIME_GET_MICROSECOND16285042
Ref: 517916285042
Ref: c-api/datetime c PyDateTime_TIME_GET_FOLD16285178
Ref: 517a16285178
Ref: c-api/datetime c PyDateTime_TIME_GET_TZINFO16285327
Ref: 89a16285327
Ref: c-api/datetime c PyDateTime_DELTA_GET_DAYS16285720
Ref: 517b16285720
Ref: c-api/datetime c PyDateTime_DELTA_GET_SECONDS16285903
Ref: 517c16285903
Ref: c-api/datetime c PyDateTime_DELTA_GET_MICROSECONDS16286075
Ref: 517d16286075
Ref: c-api/datetime c PyDateTime_FromTimestamp16286337
Ref: 517e16286337
Ref: c-api/datetime c PyDate_FromTimestamp16286652
Ref: 1b8616286652
Node: Dados internos<2>16286950
Ref: c-api/datetime internal-data16287064
Ref: 517f16287064
Ref: c-api/datetime c PyDateTime_CAPSULE_NAME16287213
Ref: 518016287213
Node: Inicialização finalização e threads16287423
Ref: c-api/init doc16287624
Ref: 518116287624
Ref: c-api/init initialization16287624
Ref: 518216287624
Ref: c-api/init initialization-finalization-and-threads16287624
Ref: 518316287624
Ref: c-api/init translation-repo16287624
Ref: 518416287624
Node: Antes da inicialização do Python16288342
Ref: c-api/init before-python-initialization16288496
Ref: 518516288496
Ref: c-api/init pre-init-safe16288496
Ref: bde16288496
Node: Variáveis de configuração global16291293
Ref: c-api/init global-conf-vars16291498
Ref: 518616291498
Ref: c-api/init global-configuration-variables16291498
Ref: 518a16291498
Ref: c-api/init c Py_BytesWarningFlag16292041
Ref: 3d416292041
Ref: c-api/init c Py_DebugFlag16292627
Ref: 3c616292627
Ref: c-api/init c Py_DontWriteBytecodeFlag16293207
Ref: 3da16293207
Ref: c-api/init c Py_FrozenFlag16293811
Ref: 3d616293811
Ref: c-api/init c Py_HashRandomizationFlag16294364
Ref: 3e016294364
Ref: c-api/init c Py_IgnoreEnvironmentFlag16295043
Ref: 3d816295043
Ref: c-api/init c Py_InspectFlag16295619
Ref: 3ce16295619
Ref: c-api/init c Py_InteractiveFlag16296295
Ref: 3cc16296295
Ref: c-api/init c Py_IsolatedFlag16296680
Ref: 3e316296680
Ref: c-api/init c Py_LegacyWindowsFSEncodingFlag16297270
Ref: 3e516297270
Ref: c-api/init c Py_LegacyWindowsStdioFlag16298211
Ref: 3e716298211
Ref: c-api/init c Py_NoSiteFlag16298959
Ref: 3d216298959
Ref: c-api/init c Py_NoUserSiteDirectory16299675
Ref: 3dc16299675
Ref: c-api/init c Py_OptimizeFlag16300253
Ref: 3d016300253
Ref: c-api/init c Py_QuietFlag16300708
Ref: 3ca16300708
Ref: c-api/init c Py_UnbufferedStdioFlag16301213
Ref: 3de16301213
Ref: c-api/init c Py_VerboseFlag16301749
Ref: 3c816301749
Ref: Variáveis de configuração global-Footnote-116302576
Ref: Variáveis de configuração global-Footnote-216302618
Node: Inicializando e encerrando o interpretador16302660
Ref: c-api/init initializing-and-finalizing-the-interpreter16302861
Ref: 518b16302861
Ref: c-api/init c Py_Initialize16302960
Ref: 8b116302960
Ref: c-api/init c Py_InitializeEx16304165
Ref: 4dca16304165
Ref: c-api/init c Py_InitializeFromConfig16304677
Ref: 3c516304677
Ref: c-api/init c Py_IsInitialized16305174
Ref: 4bea16305174
Ref: c-api/init c Py_IsFinalizing16305515
Ref: 35816305515
Ref: c-api/init c Py_FinalizeEx16305819
Ref: d3716305819
Ref: c-api/init c Py_Finalize16308737
Ref: 13a016308737
Ref: c-api/init c Py_BytesMain16308932
Ref: 9c916308932
Ref: c-api/init c Py_Main16309302
Ref: c3f16309302
Ref: c-api/init c Py_RunMain16311893
Ref: 9cd16311893
Ref: c-api/init c PyUnstable_AtExit16313651
Ref: 167216313651
Node: Parâmetros de todo o processo16314314
Ref: c-api/init process-wide-parameters16314530
Ref: 519116314530
Ref: c-api/init c Py_SetProgramName16314604
Ref: 172c16314604
Ref: c-api/init c Py_GetProgramName16315860
Ref: 3b916315860
Ref: c-api/init c Py_GetPrefix16316517
Ref: 3b516316517
Ref: c-api/init c Py_GetExecPrefix16317879
Ref: 3b116317879
Ref: c-api/init c Py_GetProgramFullPath16320849
Ref: 3b716320849
Ref: c-api/init c Py_GetPath16321745
Ref: 3b316321745
Ref: c-api/init c Py_GetVersion16322954
Ref: 4dc816322954
Ref: c-api/init c Py_GetPlatform16323660
Ref: 4dc616323660
Ref: c-api/init c Py_GetCopyright16324323
Ref: 4dc516324323
Ref: c-api/init c Py_GetCompiler16324779
Ref: 4dc416324779
Ref: c-api/init c Py_GetBuildInfo16325210
Ref: 147916325210
Ref: c-api/init c PySys_SetArgvEx16325682
Ref: 172d16325682
Ref: c-api/init c PySys_SetArgv16328330
Ref: 172e16328330
Ref: c-api/init c Py_SetPythonHome16329271
Ref: 172b16329271
Ref: c-api/init c Py_GetPythonHome16330190
Ref: 3ba16330190
Ref: Parâmetros de todo o processo-Footnote-116330899
Node: Estado de thread e a trava global do interpretador16330954
Ref: c-api/init thread-state-and-the-global-interpreter-lock16331151
Ref: 519216331151
Ref: c-api/init threads16331151
Ref: 519316331151
Node: Releasing the GIL from extension code16332790
Ref: c-api/init releasing-the-gil-from-extension-code16332950
Ref: 519416332950
Node: Threads não-Python criadas16334856
Ref: c-api/init gilstate16335051
Ref: 519516335051
Ref: c-api/init non-python-created-threads16335051
Ref: 519616335051
Node: Cuidados com o uso de fork16336817
Ref: c-api/init cautions-about-fork16337014
Ref: 519716337014
Ref: c-api/init fork-and-threads16337014
Ref: 4ea816337014
Node: Cautions regarding runtime finalization16339063
Ref: c-api/init cautions-regarding-runtime-finalization16339247
Ref: 519816339247
Ref: c-api/init id116339247
Ref: 519916339247
Node: High-level API16340975
Ref: c-api/init high-level-api16341146
Ref: 519a16341146
Ref: c-api/init c PyInterpreterState16341336
Ref: 8c216341336
Ref: c-api/init c PyThreadState16342142
Ref: 78d16342142
Ref: c-api/init c PyThreadState interp16342348
Ref: 519c16342348
Ref: c-api/init c PyEval_InitThreads16342453
Ref: 172f16342453
Ref: c-api/init c PyEval_SaveThread16343049
Ref: 3a816343049
Ref: c-api/init c PyEval_RestoreThread16343411
Ref: 3a916343411
Ref: c-api/init c PyThreadState_Get16344211
Ref: 37216344211
Ref: c-api/init c PyThreadState_GetUnchecked16344591
Ref: 37116344591
Ref: c-api/init c PyThreadState_Swap16344982
Ref: 4d6316344982
Ref: c-api/init c PyGILState_STATE16345458
Ref: 4cc716345458
Ref: c-api/init c PyGILState_STATE PyGILState_LOCKED16345659
Ref: 519d16345659
Ref: c-api/init c PyGILState_STATE PyGILState_UNLOCKED16345807
Ref: 519e16345807
Ref: c-api/init c PyGILState_Ensure16345953
Ref: 3ab16345953
Ref: c-api/init c PyGILState_Release16347811
Ref: 3ac16347811
Ref: c-api/init c PyGILState_GetThisThreadState16348335
Ref: 4cc616348335
Ref: c-api/init c PyGILState_Check16348788
Ref: 519f16348788
Ref: c-api/init c Py_BEGIN_ALLOW_THREADS16349528
Ref: 4b6716349528
Ref: c-api/init c Py_END_ALLOW_THREADS16349902
Ref: a9816349902
Ref: c-api/init c Py_BLOCK_THREADS16350260
Ref: 4dc016350260
Ref: c-api/init c Py_UNBLOCK_THREADS16350484
Ref: 4ddf16350484
Ref: High-level API-Footnote-116350780
Node: Low-level API16350822
Ref: c-api/init low-level-api16350945
Ref: 51a016350945
Ref: c-api/init c PyInterpreterState_New16351161
Ref: 440016351161
Ref: c-api/init c PyInterpreterState_Clear16351555
Ref: 43ff16351555
Ref: c-api/init c PyInterpreterState_Delete16351891
Ref: 4cd416351891
Ref: c-api/init c PyThreadState_New16352228
Ref: 4d6216352228
Ref: c-api/init c PyThreadState_Clear16352582
Ref: 170b16352582
Ref: c-api/init c PyThreadState_Delete16353055
Ref: 1b1816353055
Ref: c-api/init c PyThreadState_DeleteCurrent16353355
Ref: 1b4a16353355
Ref: c-api/init c PyThreadState_GetFrame16353689
Ref: 78e16353689
Ref: c-api/init c PyThreadState_GetID16354141
Ref: 97916354141
Ref: c-api/init c PyThreadState_GetInterpreter16354429
Ref: 97816354429
Ref: c-api/init c PyThreadState_EnterTracing16354740
Ref: 75416354740
Ref: c-api/init c PyThreadState_LeaveTracing16355004
Ref: 75516355004
Ref: c-api/init c PyInterpreterState_Get16355353
Ref: 3ad16355353
Ref: c-api/init c PyInterpreterState_GetID16355731
Ref: bdf16355731
Ref: c-api/init c PyInterpreterState_GetDict16356083
Ref: 4cd516356083
Ref: c-api/init c PyUnstable_InterpreterState_GetMainModule16356823
Ref: 51a116356823
Ref: c-api/init c _PyFrameEvalFunction16357341
Ref: 77616357341
Ref: c-api/init c _PyInterpreterState_GetEvalFrameFunc16357898
Ref: 1b0616357898
Ref: c-api/init c _PyInterpreterState_SetEvalFrameFunc16358181
Ref: 1b0716358181
Ref: c-api/init c PyThreadState_GetDict16358459
Ref: 4d6116358459
Ref: c-api/init c PyThreadState_SetAsyncExc16359014
Ref: bdd16359014
Ref: c-api/init c PyEval_AcquireThread16359835
Ref: 3aa16359835
Ref: c-api/init c PyEval_ReleaseThread16361014
Ref: 4c7716361014
Ref: Low-level API-Footnote-116361660
Ref: Low-level API-Footnote-216361702
Node: Sub-interpreter support16361744
Ref: c-api/init id216361938
Ref: 51a216361938
Ref: c-api/init sub-interpreter-support16361938
Ref: 58716361938
Ref: c-api/init c PyInterpreterConfig16362869
Ref: 56d16362869
Ref: c-api/init c PyInterpreterConfig use_main_obmalloc16363164
Ref: 45bc16363164
Ref: c-api/init c PyInterpreterConfig allow_fork16363606
Ref: 51a716363606
Ref: c-api/init c PyInterpreterConfig allow_exec16363940
Ref: 51a816363940
Ref: c-api/init c PyInterpreterConfig allow_threads16364334
Ref: 51a916364334
Ref: c-api/init c PyInterpreterConfig allow_daemon_threads16364525
Ref: 51aa16364525
Ref: c-api/init c PyInterpreterConfig check_multi_interp_extensions16364809
Ref: 51a416364809
Ref: c-api/init c PyInterpreterConfig gil16365332
Ref: 51a516365332
Ref: c-api/init c PyInterpreterConfig_DEFAULT_GIL16365480
Ref: 51ab16365480
Ref: c-api/init c PyInterpreterConfig_SHARED_GIL16365640
Ref: 51ac16365640
Ref: c-api/init c PyInterpreterConfig_OWN_GIL16365753
Ref: 51a616365753
Ref: c-api/init c Py_NewInterpreterFromConfig16366004
Ref: 45c16366004
Ref: c-api/init c Py_NewInterpreter16370516
Ref: 18b916370516
Ref: c-api/init c Py_EndInterpreter16370991
Ref: 198516370991
Ref: Sub-interpreter support-Footnote-116371792
Node: A Per-Interpreter GIL16371834
Ref: c-api/init a-per-interpreter-gil16371940
Ref: 51ae16371940
Ref: c-api/init per-interpreter-gil16371940
Ref: 519b16371940
Ref: A Per-Interpreter GIL-Footnote-116374032
Ref: A Per-Interpreter GIL-Footnote-216374074
Node: Bugs and caveats16374116
Ref: c-api/init bugs-and-caveats16374222
Ref: 51ad16374222
Node: Notificações assíncronas16375828
Ref: c-api/init asynchronous-notifications16375993
Ref: 51af16375993
Ref: c-api/init c Py_AddPendingCall16376237
Ref: 98816376237
Ref: c-api/init c Py_MakePendingCalls16378517
Ref: 4dcb16378517
Node: Profiling and Tracing16379128
Ref: c-api/init profiling16379287
Ref: 51b016379287
Ref: c-api/init profiling-and-tracing16379287
Ref: 51b116379287
Ref: c-api/init c Py_tracefunc16379966
Ref: 51b216379966
Ref: c-api/init c PyTrace_CALL16382315
Ref: 51b316382315
Ref: c-api/init c PyTrace_EXCEPTION16382706
Ref: 51b416382706
Ref: c-api/init c PyTrace_LINE16383317
Ref: 51b516383317
Ref: c-api/init c PyTrace_RETURN16383620
Ref: 51b616383620
Ref: c-api/init c PyTrace_C_CALL16383774
Ref: 51b716383774
Ref: c-api/init c PyTrace_C_EXCEPTION16383937
Ref: 51b816383937
Ref: c-api/init c PyTrace_C_RETURN16384107
Ref: 51b916384107
Ref: c-api/init c PyTrace_OPCODE16384263
Ref: 51ba16384263
Ref: c-api/init c PyEval_SetProfile16384604
Ref: 154516384604
Ref: c-api/init c PyEval_SetProfileAllThreads16385284
Ref: 55f16385284
Ref: c-api/init c PyEval_SetTrace16385801
Ref: 42116385801
Ref: c-api/init c PyEval_SetTraceAllThreads16386481
Ref: 42216386481
Node: Reference tracing16386983
Ref: c-api/init reference-tracing16387140
Ref: 51bb16387140
Ref: c-api/init c PyRefTracer16387218
Ref: 51bc16387218
Ref: c-api/init c PyRefTracer_CREATE16387785
Ref: 51bd16387785
Ref: c-api/init c PyRefTracer_DESTROY16387950
Ref: 51be16387950
Ref: c-api/init c PyRefTracer_SetTracer16388118
Ref: 36c16388118
Ref: c-api/init c PyRefTracer_GetTracer16388907
Ref: 36d16388907
Node: Advanced Debugger Support16389365
Ref: c-api/init advanced-debugger-support16389529
Ref: 51bf16389529
Ref: c-api/init advanced-debugging16389529
Ref: 51c016389529
Ref: c-api/init c PyInterpreterState_Head16389671
Ref: 154816389671
Ref: c-api/init c PyInterpreterState_Main16389839
Ref: 51a316389839
Ref: c-api/init c PyInterpreterState_Next16389963
Ref: 154916389963
Ref: c-api/init c PyInterpreterState_ThreadHead16390177
Ref: 154a16390177
Ref: c-api/init c PyThreadState_Next16390431
Ref: 154b16390431
Node: Thread Local Storage Support16390690
Ref: c-api/init thread-local-storage16390866
Ref: 51c116390866
Ref: c-api/init thread-local-storage-support16390866
Ref: 51c216390866
Node: Thread Specific Storage TSS API16391975
Ref: c-api/init thread-specific-storage-api16392108
Ref: aee16392108
Ref: c-api/init thread-specific-storage-tss-api16392108
Ref: 51c316392108
Ref: c-api/init c Py_tss_t16392504
Ref: aef16392504
Ref: c-api/init c Py_tss_NEEDS_INIT16392958
Ref: 51c416392958
Ref: Thread Specific Storage TSS API-Footnote-116393249
Node: Alocação dinâmica16393291
Ref: c-api/init dynamic-allocation16393399
Ref: 51c516393399
Ref: c-api/init c PyThread_tss_alloc16393680
Ref: 40516393680
Ref: c-api/init c PyThread_tss_free16393975
Ref: 40716393975
Node: Métodos<2>16394459
Ref: c-api/init methods16394567
Ref: 51c616394567
Ref: c-api/init c PyThread_tss_is_created16394872
Ref: 4d7016394872
Ref: c-api/init c PyThread_tss_create16395124
Ref: 4d6f16395124
Ref: c-api/init c PyThread_tss_delete16395631
Ref: 40d16395631
Ref: c-api/init c PyThread_tss_set16396126
Ref: 40916396126
Ref: c-api/init c PyThread_tss_get16396446
Ref: 40b16396446
Node: Thread Local Storage TLS API16396740
Ref: c-api/init thread-local-storage-api16396873
Ref: aed16396873
Ref: c-api/init thread-local-storage-tls-api16396873
Ref: 51c716396873
Ref: c-api/init c PyThread_create_key16397501
Ref: 40416397501
Ref: c-api/init c PyThread_delete_key16397587
Ref: 40616397587
Ref: c-api/init c PyThread_set_key_value16397681
Ref: 40816397681
Ref: c-api/init c PyThread_get_key_value16397790
Ref: 40a16397790
Ref: c-api/init c PyThread_delete_key_value16397888
Ref: 40c16397888
Ref: c-api/init c PyThread_ReInitTLS16397988
Ref: 40e16397988
Node: Synchronization Primitives<2>16398074
Ref: c-api/init synchronization-primitives16398253
Ref: 51c816398253
Ref: c-api/init c PyMutex16398373
Ref: 15b16398373
Ref: c-api/init c PyMutex_Lock16399000
Ref: 32b16399000
Ref: c-api/init c PyMutex_Unlock16399307
Ref: 32c16399307
Node: Python Critical Section API16399566
Ref: c-api/init id316399687
Ref: 51c916399687
Ref: c-api/init python-critical-section-api16399687
Ref: 51ca16399687
Ref: c-api/init c Py_BEGIN_CRITICAL_SECTION16402182
Ref: 502816402182
Ref: c-api/init c Py_END_CRITICAL_SECTION16402585
Ref: 51cc16402585
Ref: c-api/init c Py_BEGIN_CRITICAL_SECTION216402901
Ref: 51cb16402901
Ref: c-api/init c Py_END_CRITICAL_SECTION216403444
Ref: 51cd16403444
Node: Legacy Locking APIs16403764
Ref: c-api/init legacy-locking-apis16403885
Ref: 51ce16403885
Ref: c-api/init c PyThread_type_lock16404117
Ref: 51cf16404117
Ref: c-api/init c PyLockStatus16404198
Ref: 51d016404198
Ref: c-api/init c PY_LOCK_FAILURE16404282
Ref: 51d116404282
Ref: c-api/init c PY_LOCK_ACQUIRED16404372
Ref: 51d216404372
Ref: c-api/init c PY_LOCK_INTR16404471
Ref: 51d316404471
Ref: c-api/init c PyThread_allocate_lock16404568
Ref: 4d6716404568
Ref: c-api/init c PyThread_free_lock16405069
Ref: 4d6916405069
Ref: c-api/init c PyThread_acquire_lock_timed16405321
Ref: 4d6616405321
Ref: c-api/init c PyThread_acquire_lock16406290
Ref: 4d6516406290
Ref: c-api/init c PyThread_release_lock16407027
Ref: 4d6d16407027
Node: Operating System Thread APIs16407284
Ref: c-api/init operating-system-thread-apis16407426
Ref: 51d416407426
Ref: c-api/init c PYTHREAD_INVALID_THREAD_ID16407499
Ref: 51d516407499
Ref: c-api/init c PyThread_start_new_thread16407650
Ref: 1bc416407650
Ref: c-api/init c PyThread_get_thread_ident16408183
Ref: 4d6b16408183
Ref: c-api/init c PyThread_GetInfo16408536
Ref: 4d6416408536
Ref: c-api/init c PY_HAVE_THREAD_NATIVE_ID16409065
Ref: 51d616409065
Ref: c-api/init c PyThread_get_thread_native_id16409176
Ref: 192d16409176
Ref: c-api/init c PyThread_exit_thread16409749
Ref: 4d6816409749
Ref: c-api/init c PyThread_init_thread16410729
Ref: 4d6c16410729
Ref: c-api/init c PyThread_set_stacksize16410972
Ref: 4d6e16410972
Ref: c-api/init c PyThread_get_stacksize16411392
Ref: 4d6a16411392
Ref: Operating System Thread APIs-Footnote-116411707
Node: Configuração de inicialização do Python16411759
Ref: c-api/init_config doc16411958
Ref: 51d716411958
Ref: c-api/init_config init-config16411958
Ref: 3a716411958
Ref: c-api/init_config python-initialization-configuration16411958
Ref: 51d816411958
Ref: c-api/init_config translation-repo16411958
Ref: 51d916411958
Ref: Configuração de inicialização do Python-Footnote-116413521
Node: Exemplo<17>16413563
Ref: c-api/init_config example16413679
Ref: 51db16413679
Node: PyWideStringList16414701
Ref: c-api/init_config pywidestringlist16414834
Ref: 51dc16414834
Ref: c-api/init_config c PyWideStringList16414883
Ref: 9b616414883
Ref: c-api/init_config c PyWideStringList_Append16415114
Ref: 9c716415114
Ref: c-api/init_config c PyWideStringList_Insert16415369
Ref: 9c816415369
Ref: c-api/init_config c PyWideStringList length16415867
Ref: 51dd16415867
Ref: c-api/init_config c PyWideStringList items16415950
Ref: 51de16415950
Node: PyStatus16416013
Ref: c-api/init_config pystatus16416146
Ref: 51df16416146
Ref: c-api/init_config c PyStatus16416179
Ref: 9b516416179
Ref: c-api/init_config c PyStatus exitcode16416422
Ref: 51e016416422
Ref: c-api/init_config c PyStatus err_msg16416523
Ref: 51e116416523
Ref: c-api/init_config c PyStatus func16416592
Ref: 51e216416592
Ref: c-api/init_config c PyStatus_Ok16416736
Ref: 9c616416736
Ref: c-api/init_config c PyStatus_Error16416818
Ref: 9c016416818
Ref: c-api/init_config c PyStatus_NoMemory16417013
Ref: 9c516417013
Ref: c-api/init_config c PyStatus_Exit16417140
Ref: 9c216417140
Ref: c-api/init_config c PyStatus_Exception16417317
Ref: 9c116417317
Ref: c-api/init_config c PyStatus_IsError16417551
Ref: 9c316417551
Ref: c-api/init_config c PyStatus_IsExit16417647
Ref: 9c416417647
Ref: c-api/init_config c Py_ExitStatusException16417745
Ref: 9ca16417745
Node: PyPreConfig16418732
Ref: c-api/init_config pypreconfig16418888
Ref: 51e316418888
Ref: c-api/init_config c PyPreConfig16418927
Ref: 9b416418927
Ref: c-api/init_config c PyPreConfig_InitPythonConfig16419070
Ref: 9bf16419070
Ref: c-api/init_config c PyPreConfig_InitIsolatedConfig16419262
Ref: 9be16419262
Ref: c-api/init_config c PyPreConfig allocator16419481
Ref: 51e416419481
Ref: c-api/init_config c PyPreConfig configure_locale16421417
Ref: 51e616421417
Ref: c-api/init_config c PyPreConfig coerce_c_locale16421847
Ref: 51e716421847
Ref: c-api/init_config c PyPreConfig coerce_c_locale_warn16422213
Ref: 51e816422213
Ref: c-api/init_config c PyPreConfig dev_mode16422451
Ref: 51e916422451
Ref: c-api/init_config c PyPreConfig isolated16422661
Ref: 51eb16422661
Ref: c-api/init_config c PyPreConfig legacy_windows_fs_encoding16422826
Ref: 3e616422826
Ref: c-api/init_config c PyPreConfig parse_argv16423448
Ref: 51ec16423448
Ref: c-api/init_config c PyPreConfig use_environment16423902
Ref: 51ed16423902
Ref: c-api/init_config c PyPreConfig utf8_mode16424150
Ref: 3ea16424150
Node: Pré-inicializar Python com PyPreConfig16424619
Ref: c-api/init_config c-preinit16424775
Ref: 3f8016424775
Ref: c-api/init_config preinitialize-python-with-pypreconfig16424775
Ref: 51ee16424775
Ref: c-api/init_config c Py_PreInitialize16425306
Ref: 3eb16425306
Ref: c-api/init_config c Py_PreInitializeFromBytesArgs16425523
Ref: 9cc16425523
Ref: c-api/init_config c Py_PreInitializeFromArgs16425923
Ref: 9cb16425923
Node: PyConfig16428028
Ref: c-api/init_config pyconfig16428201
Ref: 51ef16428201
Ref: c-api/init_config c PyConfig16428234
Ref: 3a616428234
Ref: c-api/init_config c PyConfig_InitPythonConfig16428490
Ref: 9b916428490
Ref: c-api/init_config c PyConfig_InitIsolatedConfig16428651
Ref: 9b816428651
Ref: c-api/init_config c PyConfig_SetString16428816
Ref: 9bd16428816
Ref: c-api/init_config c PyConfig_SetBytesString16429088
Ref: 9bc16429088
Ref: c-api/init_config c PyConfig_SetArgv16429418
Ref: 9ba16429418
Ref: c-api/init_config c PyConfig_SetBytesArgv16429734
Ref: 9bb16429734
Ref: c-api/init_config c PyConfig_SetWideStringList16430103
Ref: 1b5c16430103
Ref: c-api/init_config c PyConfig_Read16430410
Ref: 79016430410
Ref: c-api/init_config c PyConfig_Clear16431776
Ref: 9b716431776
Ref: c-api/init_config c PyConfig argv16432908
Ref: 3c316432908
Ref: c-api/init_config c PyConfig safe_path16433922
Ref: 77316433922
Ref: c-api/init_config c PyConfig base_exec_prefix16434805
Ref: 51f016434805
Ref: c-api/init_config c PyConfig base_executable16435054
Ref: 51f216435054
Ref: c-api/init_config c PyConfig base_prefix16435452
Ref: 51f316435452
Ref: c-api/init_config c PyConfig buffered_stdio16435682
Ref: 3df16435682
Ref: c-api/init_config c PyConfig bytes_warning16436095
Ref: 3d516436095
Ref: c-api/init_config c PyConfig warn_default_encoding16436540
Ref: 51f616436540
Ref: c-api/init_config c PyConfig code_debug_ranges16436857
Ref: 51f716436857
Ref: c-api/init_config c PyConfig check_hash_pycs_mode16437335
Ref: 51f816437335
Ref: c-api/init_config c PyConfig configure_c_stdio16438011
Ref: 51f516438011
Ref: c-api/init_config c PyConfig dev_mode16438588
Ref: 51ea16438588
Ref: c-api/init_config c PyConfig dump_refs16438890
Ref: 51f916438890
Ref: c-api/init_config c PyConfig exec_prefix16439303
Ref: 51f116439303
Ref: c-api/init_config c PyConfig executable16439655
Ref: 3a516439655
Ref: c-api/init_config c PyConfig faulthandler16439973
Ref: 51fa16439973
Ref: c-api/init_config c PyConfig filesystem_encoding16440329
Ref: 3e816440329
Ref: c-api/init_config c PyConfig filesystem_errors16441556
Ref: 3e916441556
Ref: c-api/init_config c PyConfig hash_seed16442225
Ref: 3e216442225
Ref: c-api/init_config c PyConfig use_hash_seed16442269
Ref: 3e116442269
Ref: c-api/init_config c PyConfig home16442676
Ref: 3bb16442676
Ref: c-api/init_config c PyConfig import_time16443028
Ref: 51fb16443028
Ref: c-api/init_config c PyConfig inspect16443281
Ref: 3cf16443281
Ref: c-api/init_config c PyConfig install_signal_handlers16443869
Ref: 8c316443869
Ref: c-api/init_config c PyConfig interactive16444030
Ref: 3cd16444030
Ref: c-api/init_config c PyConfig int_max_str_digits16444234
Ref: 51fc16444234
Ref: c-api/init_config c PyConfig cpu_count16445128
Ref: 51fd16445128
Ref: c-api/init_config c PyConfig isolated16445620
Ref: 3e416445620
Ref: c-api/init_config c PyConfig legacy_windows_stdio16446623
Ref: 3a416446623
Ref: c-api/init_config c PyConfig malloc_stats16447270
Ref: 51fe16447270
Ref: c-api/init_config c PyConfig platlibdir16447654
Ref: 1aae16447654
Ref: c-api/init_config c PyConfig pythonpath_env16448471
Ref: 51ff16448471
Ref: c-api/init_config c PyConfig module_search_paths16448811
Ref: 3a216448811
Ref: c-api/init_config c PyConfig module_search_paths_set16448880
Ref: 5ef16448880
Ref: c-api/init_config c PyConfig optimization_level16449405
Ref: 3d116449405
Ref: c-api/init_config c PyConfig orig_argv16449900
Ref: 89816449900
Ref: c-api/init_config c PyConfig parse_argv16450578
Ref: 1a7e16450578
Ref: c-api/init_config c PyConfig parser_debug16451478
Ref: 3c716451478
Ref: c-api/init_config c PyConfig pathconfig_warnings16451954
Ref: 3d716451954
Ref: c-api/init_config c PyConfig prefix16452374
Ref: 51f416452374
Ref: c-api/init_config c PyConfig program_name16452703
Ref: 3c416452703
Ref: c-api/init_config c PyConfig pycache_prefix16453435
Ref: 520016453435
Ref: c-api/init_config c PyConfig quiet16453897
Ref: 3cb16453897
Ref: c-api/init_config c PyConfig run_command16454163
Ref: 518d16454163
Ref: c-api/init_config c PyConfig run_filename16454340
Ref: 518e16454340
Ref: c-api/init_config c PyConfig run_module16454807
Ref: 518f16454807
Ref: c-api/init_config c PyConfig run_presite16454983
Ref: 520216454983
Ref: c-api/init_config c PyConfig show_ref_count16455474
Ref: 520316455474
Ref: c-api/init_config c PyConfig site_import16455830
Ref: 3d316455830
Ref: c-api/init_config c PyConfig skip_source_first_line16456483
Ref: 520116456483
Ref: c-api/init_config c PyConfig stdio_encoding16456856
Ref: 3a316456856
Ref: c-api/init_config c PyConfig stdio_errors16456900
Ref: 45cc16456900
Ref: c-api/init_config c PyConfig tracemalloc16457817
Ref: 520416457817
Ref: c-api/init_config c PyConfig perf_profiling16458172
Ref: 520516458172
Ref: c-api/init_config c PyConfig use_environment16458876
Ref: 3d916458876
Ref: c-api/init_config c PyConfig user_site_directory16459224
Ref: 3dd16459224
Ref: c-api/init_config c PyConfig verbose16459619
Ref: 3c916459619
Ref: c-api/init_config c PyConfig warnoptions16460227
Ref: 3a016460227
Ref: c-api/init_config c PyConfig write_bytecode16461070
Ref: 3db16461070
Ref: c-api/init_config c PyConfig xoptions16461529
Ref: 3a116461529
Ref: PyConfig-Footnote-116462153
Ref: PyConfig-Footnote-216462195
Node: Initialization with PyConfig16462237
Ref: c-api/init_config init-from-config16462393
Ref: 518c16462393
Ref: c-api/init_config initialization-with-pyconfig16462393
Ref: 520616462393
Node: Isolated Configuration16466093
Ref: c-api/init_config init-isolated-conf16466265
Ref: 51da16466265
Ref: c-api/init_config isolated-configuration16466265
Ref: 520716466265
Node: Configuração do Python16467032
Ref: c-api/init_config init-python-config16467201
Ref: 519016467201
Ref: c-api/init_config python-configuration16467201
Ref: 520816467201
Ref: Configuração do Python-Footnote-116467839
Ref: Configuração do Python-Footnote-216467881
Node: Python Path Configuration16467923
Ref: c-api/init_config init-path-config16468084
Ref: 8b216468084
Ref: c-api/init_config python-path-configuration16468084
Ref: 520916468084
Node: Py_GetArgcArgv16471820
Ref: c-api/init_config py-getargcargv16472007
Ref: 520a16472007
Ref: c-api/init_config c Py_GetArgcArgv16472058
Ref: 1ace16472058
Node: Multi-Phase Initialization Private Provisional API16472259
Ref: c-api/init_config multi-phase-initialization-private-provisional-api16472412
Ref: 520b16472412
Ref: c-api/init_config c _Py_InitializeMain16473609
Ref: 520c16473609
Ref: Multi-Phase Initialization Private Provisional API-Footnote-116475636
Ref: Multi-Phase Initialization Private Provisional API-Footnote-216475678
Node: Gerenciamento de Memória16475720
Ref: c-api/memory doc16475916
Ref: 520d16475916
Ref: c-api/memory memory16475916
Ref: 51e516475916
Ref: c-api/memory memory-management16475916
Ref: 520e16475916
Ref: c-api/memory translation-repo16475916
Ref: 520f16475916
Node: Visão Geral<4>16476331
Ref: c-api/memory memoryoverview16476434
Ref: 521016476434
Ref: c-api/memory overview16476434
Ref: 521116476434
Node: Allocator Domains16480525
Ref: c-api/memory allocator-domains16480657
Ref: 521216480657
Ref: c-api/memory id116480708
Ref: 521316480708
Node: Raw Memory Interface16482728
Ref: c-api/memory raw-memory-interface16482866
Ref: 521916482866
Ref: c-api/memory raw-memoryinterface16482866
Ref: 521516482866
Ref: c-api/memory c PyMem_RawMalloc16483314
Ref: 39016483314
Ref: c-api/memory c PyMem_RawCalloc16483760
Ref: 39116483760
Ref: c-api/memory c PyMem_RawRealloc16484326
Ref: 39216484326
Ref: c-api/memory c PyMem_RawFree16485134
Ref: 39316485134
Node: Interface da Memória16485604
Ref: c-api/memory memory-interface16485745
Ref: 521a16485745
Ref: c-api/memory memoryinterface16485745
Ref: 521616485745
Ref: c-api/memory c PyMem_Malloc16486254
Ref: c8116486254
Ref: c-api/memory c PyMem_Calloc16486672
Ref: edc16486672
Ref: c-api/memory c PyMem_Realloc16487231
Ref: 106a16487231
Ref: c-api/memory c PyMem_Free16488001
Ref: 148a16488001
Ref: c-api/memory c PyMem_New16488537
Ref: 156d16488537
Ref: c-api/memory c PyMem_Resize16488772
Ref: 521b16488772
Ref: c-api/memory c PyMem_Del16489220
Ref: 156e16489220
Node: Apelidos descontinuados<2>16489367
Ref: c-api/memory deprecated-aliases16489451
Ref: 521c16489451
Ref: c-api/memory c PyMem_MALLOC16490015
Ref: 521d16490015
Ref: c-api/memory c PyMem_NEW16490212
Ref: 521e16490212
Ref: c-api/memory c PyMem_REALLOC16490405
Ref: 521f16490405
Ref: c-api/memory c PyMem_RESIZE16490606
Ref: 522016490606
Ref: c-api/memory c PyMem_FREE16490785
Ref: 522116490785
Ref: c-api/memory c PyMem_DEL16490977
Ref: 522216490977
Node: Alocadores de objeto16491349
Ref: c-api/memory object-allocators16491500
Ref: 522316491500
Ref: c-api/memory objectinterface16491500
Ref: 521716491500
Ref: c-api/memory c PyObject_Malloc16492188
Ref: c8316492188
Ref: c-api/memory c PyObject_Calloc16492612
Ref: edd16492612
Ref: c-api/memory c PyObject_Realloc16493177
Ref: 148b16493177
Ref: c-api/memory c PyObject_Free16493965
Ref: c8016493965
Node: Alocadores de memória padrão16494410
Ref: c-api/memory default-memory-allocators16494562
Ref: 1ed416494562
Ref: c-api/memory id216494562
Ref: 522516494562
Node: Alocadores de memória16497078
Ref: c-api/memory customize-memory-allocators16497253
Ref: 522416497253
Ref: c-api/memory id316497253
Ref: 522616497253
Ref: c-api/memory c PyMemAllocatorEx16497341
Ref: efd16497341
Ref: c-api/memory c PyMemAllocatorDomain16499180
Ref: 521416499180
Ref: c-api/memory c PYMEM_DOMAIN_RAW16499278
Ref: 1ed516499278
Ref: c-api/memory c PYMEM_DOMAIN_MEM16499519
Ref: c8416499519
Ref: c-api/memory c PYMEM_DOMAIN_OBJ16499750
Ref: c8216499750
Ref: c-api/memory c PyMem_GetAllocator16499992
Ref: 518816499992
Ref: c-api/memory c PyMem_SetAllocator16500164
Ref: 58b16500164
Ref: c-api/memory c PyMem_SetupDebugHooks16502091
Ref: c8516502091
Node: Debug hooks on the Python memory allocators16502241
Ref: c-api/memory debug-hooks-on-the-python-memory-allocators16502408
Ref: 522716502408
Ref: c-api/memory pymem-debug-hooks16502408
Ref: 1ed716502408
Node: The pymalloc allocator16507676
Ref: c-api/memory pymalloc16507843
Ref: d3116507843
Ref: c-api/memory the-pymalloc-allocator16507843
Ref: 522816507843
Node: Customize pymalloc Arena Allocator16509160
Ref: c-api/memory customize-pymalloc-arena-allocator16509253
Ref: 522916509253
Ref: c-api/memory c PyObjectArenaAllocator16509370
Ref: 522a16509370
Ref: c-api/memory c PyObject_GetArenaAllocator16510383
Ref: 518916510383
Ref: c-api/memory c PyObject_SetArenaAllocator16510509
Ref: 518716510509
Node: The mimalloc allocator16510635
Ref: c-api/memory mimalloc16510776
Ref: 1ed616510776
Ref: c-api/memory the-mimalloc-allocator16510776
Ref: 522b16510776
Node: tracemalloc C API16511142
Ref: c-api/memory tracemalloc-c-api16511273
Ref: 522c16511273
Ref: c-api/memory c PyTraceMalloc_Track16511354
Ref: bce16511354
Ref: c-api/memory c PyTraceMalloc_Untrack16511766
Ref: bcf16511766
Node: Exemplos<37>16512057
Ref: c-api/memory examples16512157
Ref: 522d16512157
Ref: c-api/memory memoryexamples16512157
Ref: 522e16512157
Node: Suporte a implementação de Objetos16514073
Ref: c-api/objimpl doc16514252
Ref: 522f16514252
Ref: c-api/objimpl newtypes16514252
Ref: 523016514252
Ref: c-api/objimpl object-implementation-support16514252
Ref: 523116514252
Ref: c-api/objimpl translation-repo16514252
Ref: 523216514252
Node: Alocando objetos na heap16514571
Ref: c-api/allocation doc16514705
Ref: 523316514705
Ref: c-api/allocation allocating-objects16514705
Ref: 523416514705
Ref: c-api/allocation allocating-objects-on-the-heap16514705
Ref: 523516514705
Ref: c-api/allocation c _PyObject_New16514770
Ref: 523616514770
Ref: c-api/allocation c _PyObject_NewVar16514884
Ref: 523716514884
Ref: c-api/allocation c PyObject_Init16515032
Ref: a7416515032
Ref: c-api/allocation c PyObject_InitVar16515383
Ref: 1acd16515383
Ref: c-api/allocation c PyObject_New16515747
Ref: 98c16515747
Ref: c-api/allocation c PyObject_NewVar16516427
Ref: 98d16516427
Ref: c-api/allocation c _Py_NoneStruct16517357
Ref: 523816517357
Node: Apelidos descontinuados<3>16517764
Ref: c-api/allocation deprecated-aliases16517851
Ref: 523916517851
Ref: c-api/allocation c PyObject_NEW16518401
Ref: 523a16518401
Ref: c-api/allocation c PyObject_NEW_VAR16518600
Ref: 523b16518600
Ref: c-api/allocation c PyObject_INIT16518787
Ref: 1acb16518787
Ref: c-api/allocation c PyObject_INIT_VAR16518989
Ref: 1acc16518989
Ref: c-api/allocation c PyObject_MALLOC16519173
Ref: 523c16519173
Ref: c-api/allocation c PyObject_REALLOC16519374
Ref: 523d16519374
Ref: c-api/allocation c PyObject_FREE16519567
Ref: 523e16519567
Ref: c-api/allocation c PyObject_DEL16519761
Ref: 523f16519761
Ref: c-api/allocation c PyObject_Del16519956
Ref: 151916519956
Node: Estruturas comuns de objetos16520067
Ref: c-api/structures doc16520236
Ref: 524016520236
Ref: c-api/structures common-object-structures16520236
Ref: 524116520236
Ref: c-api/structures common-structs16520236
Ref: 524216520236
Ref: c-api/structures translation-repo16520236
Ref: 524316520236
Node: Macros e tipos de objetos base16520594
Ref: c-api/structures base-object-types-and-macros16520732
Ref: 524416520732
Ref: c-api/structures c PyObject16521268
Ref: 33916521268
Ref: c-api/structures c PyVarObject16521957
Ref: 438416521957
Ref: c-api/structures c PyObject_HEAD16522449
Ref: 132116522449
Ref: c-api/structures c PyObject_VAR_HEAD16522717
Ref: 524516522717
Ref: c-api/structures c PyBaseObject_Type16523033
Ref: 4c0e16523033
Ref: c-api/structures c Py_Is16523228
Ref: 8a416523228
Ref: c-api/structures c Py_IsNone16523461
Ref: 8a516523461
Ref: c-api/structures c Py_IsTrue16523701
Ref: 8a616523701
Ref: c-api/structures c Py_IsFalse16523941
Ref: 8a716523941
Ref: c-api/structures c Py_TYPE16524184
Ref: 78016524184
Ref: c-api/structures c Py_IS_TYPE16524625
Ref: 192b16524625
Ref: c-api/structures c Py_SET_TYPE16524851
Ref: 78116524851
Ref: c-api/structures c Py_SIZE16524993
Ref: 78216524993
Ref: c-api/structures c Py_SET_SIZE16525346
Ref: 78316525346
Ref: c-api/structures c PyObject_HEAD_INIT16525488
Ref: 524616525488
Ref: c-api/structures c PyVarObject_HEAD_INIT16525706
Ref: 524716525706
Node: Implementing functions and methods16525990
Ref: c-api/structures implementing-functions-and-methods16526176
Ref: 524816526176
Ref: c-api/structures c PyCFunction16526265
Ref: 14c016526265
Ref: c-api/structures c PyCFunctionWithKeywords16526884
Ref: 4c2416526884
Ref: c-api/structures c PyCFunctionFast16527310
Ref: 4c2216527310
Ref: c-api/structures c PyCFunctionFastWithKeywords16527718
Ref: 4c2316527718
Ref: c-api/structures c PyCMethod16528262
Ref: 76416528262
Ref: c-api/structures c PyMethodDef16528757
Ref: 151f16528757
Ref: c-api/structures c PyMethodDef ml_name16528960
Ref: 4b9216528960
Ref: c-api/structures c PyMethodDef ml_meth16529028
Ref: 524b16529028
Ref: c-api/structures c PyMethodDef ml_flags16529125
Ref: 524c16529125
Ref: c-api/structures c PyMethodDef ml_doc16529227
Ref: 524d16529227
Ref: c-api/structures c METH_VARARGS16529958
Ref: 155116529958
Ref: c-api/structures c METH_KEYWORDS16530514
Ref: 4b4b16530514
Ref: c-api/structures meth-varargs-meth-keywords16530767
Ref: 524916530767
Ref: c-api/structures c METH_FASTCALL16531204
Ref: 171316531204
Ref: c-api/structures meth-fastcall-meth-keywords16531773
Ref: 524a16531773
Ref: c-api/structures c METH_METHOD16532446
Ref: 97716532446
Ref: c-api/structures meth-method-meth-fastcall-meth-keywords16532656
Ref: 178416532656
Ref: c-api/structures c METH_NOARGS16533186
Ref: 151c16533186
Ref: c-api/structures c METH_O16533785
Ref: 155016533785
Ref: c-api/structures c METH_CLASS16534420
Ref: 151d16534420
Ref: c-api/structures c METH_STATIC16534738
Ref: 151e16534738
Ref: c-api/structures c METH_COEXIST16535168
Ref: 14bf16535168
Ref: c-api/structures c PyCMethod_Type16535876
Ref: 524e16535876
Ref: c-api/structures c PyCMethod_Check16536088
Ref: 524f16536088
Ref: c-api/structures c PyCMethod_CheckExact16536278
Ref: 525016536278
Ref: c-api/structures c PyCMethod_New16536432
Ref: 1a3716536432
Ref: c-api/structures c PyCFunction_Type16537589
Ref: 4c2816537589
Ref: c-api/structures c PyCFunction_Check16537844
Ref: 525116537844
Ref: c-api/structures c PyCFunction_CheckExact16538038
Ref: 525216538038
Ref: c-api/structures c PyCFunction_NewEx16538196
Ref: 1b0516538196
Ref: c-api/structures c PyCFunction_New16538457
Ref: 1a3d16538457
Ref: c-api/structures c PyCFunction_GetFlags16538722
Ref: 4c2516538722
Ref: c-api/structures c PyCFunction_GET_FLAGS16539136
Ref: 525316539136
Ref: c-api/structures c PyCFunction_GetFunction16539299
Ref: 4c2616539299
Ref: c-api/structures c PyCFunction_GET_FUNCTION16539741
Ref: 525416539741
Ref: c-api/structures c PyCFunction_GetSelf16539910
Ref: 4c2716539910
Ref: c-api/structures c PyCFunction_GET_SELF16540579
Ref: 525516540579
Node: Accessing attributes of extension types16540768
Ref: c-api/structures accessing-attributes-of-extension-types16540915
Ref: 525616540915
Ref: c-api/structures c PyMemberDef16541014
Ref: 54f16541014
Ref: c-api/structures c PyMemberDef name16541361
Ref: 525716541361
Ref: c-api/structures c PyMemberDef type16541562
Ref: 4b9316541562
Ref: c-api/structures c PyMemberDef offset16541708
Ref: 525816541708
Ref: c-api/structures c PyMemberDef flags16541857
Ref: 4b9416541857
Ref: c-api/structures c PyMemberDef doc16541981
Ref: 525a16541981
Ref: c-api/structures pymemberdef-offsets16542521
Ref: 4f7a16542521
Ref: c-api/structures c PyMember_GetOne16543647
Ref: 58d16543647
Ref: c-api/structures c PyMember_SetOne16544097
Ref: 58e16544097
Node: Member flags16544673
Ref: c-api/structures member-flags16544782
Ref: 525b16544782
Ref: c-api/structures pymemberdef-flags16544782
Ref: 525916544782
Ref: c-api/structures c Py_READONLY16544897
Ref: 59116544897
Ref: c-api/structures c Py_AUDIT_READ16545007
Ref: 59216545007
Ref: c-api/structures c Py_RELATIVE_OFFSET16545179
Ref: 54e16545179
Node: Member types16546483
Ref: c-api/structures member-types16546629
Ref: 525c16546629
Ref: c-api/structures pymemberdef-types16546629
Ref: 176916546629
Ref: c-api/structures c Py_T_BYTE16547514
Ref: 4dd116547514
Ref: c-api/structures c Py_T_SHORT16547733
Ref: 4dd716547733
Ref: c-api/structures c Py_T_INT16547949
Ref: 58f16547949
Ref: c-api/structures c Py_T_LONG16548168
Ref: 4dd416548168
Ref: c-api/structures c Py_T_LONGLONG16548390
Ref: 4dd516548390
Ref: c-api/structures c Py_T_UBYTE16548605
Ref: 4dda16548605
Ref: c-api/structures c Py_T_UINT16548822
Ref: 4ddb16548822
Ref: c-api/structures c Py_T_USHORT16549042
Ref: 4dde16549042
Ref: c-api/structures c Py_T_ULONG16549259
Ref: 4ddc16549259
Ref: c-api/structures c Py_T_ULONGLONG16549481
Ref: 4ddd16549481
Ref: c-api/structures c Py_T_PYSSIZET16549698
Ref: 4dd616549698
Ref: c-api/structures c Py_T_FLOAT16549913
Ref: 4dd316549913
Ref: c-api/structures c Py_T_DOUBLE16550134
Ref: 59016550134
Ref: c-api/structures c Py_T_BOOL16550352
Ref: 4dd016550352
Ref: c-api/structures c Py_T_STRING16550573
Ref: 4dd816550573
Ref: c-api/structures c Py_T_STRING_INPLACE16550804
Ref: 4dd916550804
Ref: c-api/structures c Py_T_CHAR16551017
Ref: 4dd216551017
Ref: c-api/structures c Py_T_OBJECT_EX16551245
Ref: 59416551245
Ref: c-api/structures c T_OBJECT16552200
Ref: 59316552200
Ref: c-api/structures c T_NONE16552415
Ref: 59516552415
Node: Defining Getters and Setters16552505
Ref: c-api/structures defining-getters-and-setters16552630
Ref: 525d16552630
Ref: c-api/structures c PyGetSetDef16552707
Ref: bd116552707
Ref: c-api/structures c PyGetSetDef name16552943
Ref: 525e16552943
Ref: c-api/structures c PyGetSetDef get16553006
Ref: 525f16553006
Ref: c-api/structures c PyGetSetDef set16553094
Ref: 526016553094
Ref: c-api/structures c PyGetSetDef doc16553255
Ref: 526116553255
Ref: c-api/structures c PyGetSetDef closure16553321
Ref: 526216553321
Ref: c-api/structures c getter16553453
Ref: 4e3d16553453
Ref: c-api/structures c setter16553837
Ref: 4e4b16553837
Node: Estruturas de objetos tipo16554316
Ref: c-api/typeobj doc16554494
Ref: 526316554494
Ref: c-api/typeobj translation-repo16554494
Ref: 526416554494
Ref: c-api/typeobj type-object-structures16554494
Ref: 526516554494
Ref: c-api/typeobj type-structs16554494
Ref: 99416554494
Node: Referências rápidas16556034
Ref: c-api/typeobj quick-reference16556150
Ref: 526716556150
Node: “slots tp”16556272
Ref: c-api/typeobj tp-slots16556362
Ref: 526816556362
Ref: c-api/typeobj tp-slots-table16556362
Ref: 526916556362
Ref: “slots tp”-Footnote-116569616
Ref: “slots tp”-Footnote-216569940
Node: sub-slots16570735
Ref: c-api/typeobj id316570847
Ref: 527416570847
Ref: c-api/typeobj sub-slots16570847
Ref: 526b16570847
Node: slot typedefs16581255
Ref: c-api/typeobj slot-typedefs16581344
Ref: 52a416581344
Ref: c-api/typeobj slot-typedefs-table16581344
Ref: 526a16581344
Node: PyTypeObject Definition16589207
Ref: c-api/typeobj pytypeobject-definition16589346
Ref: 52a616589346
Node: PyObject Slots16592494
Ref: c-api/typeobj pyobject-slots16592629
Ref: 52a716592629
Ref: c-api/typeobj c PyObject ob_refcnt16593064
Ref: 8a316593064
Ref: c-api/typeobj c PyObject ob_type16593651
Ref: 4b7716593651
Node: PyVarObject Slots16594820
Ref: c-api/typeobj pyvarobject-slots16594950
Ref: 52a816594950
Ref: c-api/typeobj c PyVarObject ob_size16595005
Ref: 4dba16595005
Node: PyTypeObject Slots16595493
Ref: c-api/typeobj pytypeobject-slots16595621
Ref: 52a916595621
Ref: c-api/typeobj c PyTypeObject tp_name16595979
Ref: 1a3c16595979
Ref: c-api/typeobj c PyTypeObject tp_basicsize16597738
Ref: 98e16597738
Ref: c-api/typeobj c PyTypeObject tp_itemsize16597822
Ref: 20fd16597822
Ref: c-api/typeobj c PyTypeObject tp_dealloc16601966
Ref: 4b6616601966
Ref: c-api/typeobj c Py_tp_dealloc16602151
Ref: 4e1c16602151
Ref: c-api/typeobj c PyTypeObject tp_vectorcall_offset16605359
Ref: 4f1e16605359
Ref: c-api/typeobj c PyTypeObject tp_getattr16607288
Ref: 4b9616607288
Ref: c-api/typeobj c Py_tp_getattr16607484
Ref: 4e2316607484
Ref: c-api/typeobj c PyTypeObject tp_setattr16608169
Ref: 4b9716608169
Ref: c-api/typeobj c Py_tp_setattr16608365
Ref: 4e3016608365
Ref: c-api/typeobj c PyTypeObject tp_as_async16609070
Ref: efe16609070
Ref: c-api/typeobj c PyTypeObject tp_repr16609652
Ref: 4b8d16609652
Ref: c-api/typeobj c Py_tp_repr16609829
Ref: 4e2e16609829
Ref: c-api/typeobj c PyTypeObject tp_as_number16610736
Ref: 99216610736
Ref: c-api/typeobj c PyTypeObject tp_as_sequence16611170
Ref: 526c16611170
Ref: c-api/typeobj c PyTypeObject tp_as_mapping16611615
Ref: 526d16611615
Ref: c-api/typeobj c PyTypeObject tp_hash16612055
Ref: 4b9f16612055
Ref: c-api/typeobj c Py_tp_hash16612232
Ref: 4e2616612232
Ref: c-api/typeobj c PyTypeObject tp_call16613899
Ref: 55916613899
Ref: c-api/typeobj c Py_tp_call16614079
Ref: 4e1a16614079
Ref: c-api/typeobj c PyTypeObject tp_str16614432
Ref: 4b8e16614432
Ref: c-api/typeobj c Py_tp_str16614607
Ref: 4e3216614607
Ref: c-api/typeobj c PyTypeObject tp_getattro16615516
Ref: 17e616615516
Ref: c-api/typeobj c Py_tp_getattro16615715
Ref: 4e2416615715
Ref: c-api/typeobj c PyTypeObject tp_setattro16616551
Ref: 4b9116616551
Ref: c-api/typeobj c Py_tp_setattro16616750
Ref: 4e3116616750
Ref: c-api/typeobj c PyTypeObject tp_as_buffer16617712
Ref: 99016617712
Ref: c-api/typeobj c PyTypeObject tp_flags16618145
Ref: 19fd16618145
Ref: c-api/typeobj c Py_TPFLAGS_HEAPTYPE16620115
Ref: 8b416620115
Ref: c-api/typeobj c Py_TPFLAGS_BASETYPE16620929
Ref: 4b7e16620929
Ref: c-api/typeobj c Py_TPFLAGS_READY16621256
Ref: 52af16621256
Ref: c-api/typeobj c Py_TPFLAGS_READYING16621448
Ref: 52b016621448
Ref: c-api/typeobj c Py_TPFLAGS_HAVE_GC16621649
Ref: 77d16621649
Ref: c-api/typeobj c Py_TPFLAGS_DEFAULT16622722
Ref: 4b7416622722
Ref: c-api/typeobj c Py_TPFLAGS_METHOD_DESCRIPTOR16623107
Ref: 4dcf16623107
Ref: c-api/typeobj c Py_TPFLAGS_MANAGED_DICT16624113
Ref: 36b16624113
Ref: c-api/typeobj c Py_TPFLAGS_MANAGED_WEAKREF16624784
Ref: 55a16624784
Ref: c-api/typeobj c Py_TPFLAGS_ITEMS_AT_END16625110
Ref: 54b16625110
Ref: c-api/typeobj c Py_TPFLAGS_LONG_SUBCLASS16625853
Ref: 4f6b16625853
Ref: c-api/typeobj c Py_TPFLAGS_LIST_SUBCLASS16625897
Ref: 52b116625897
Ref: c-api/typeobj c Py_TPFLAGS_TUPLE_SUBCLASS16625941
Ref: 52b216625941
Ref: c-api/typeobj c Py_TPFLAGS_BYTES_SUBCLASS16625986
Ref: 52b316625986
Ref: c-api/typeobj c Py_TPFLAGS_UNICODE_SUBCLASS16626031
Ref: 52b416626031
Ref: c-api/typeobj c Py_TPFLAGS_DICT_SUBCLASS16626078
Ref: 52b516626078
Ref: c-api/typeobj c Py_TPFLAGS_BASE_EXC_SUBCLASS16626122
Ref: 52b616626122
Ref: c-api/typeobj c Py_TPFLAGS_TYPE_SUBCLASS16626170
Ref: 52b716626170
Ref: c-api/typeobj c Py_TPFLAGS_HAVE_FINALIZE16626777
Ref: 3f216626777
Ref: c-api/typeobj c _Py_TPFLAGS_HAVE_VECTORCALL16627172
Ref: 52b816627172
Ref: c-api/typeobj c Py_TPFLAGS_HAVE_VECTORCALL16627172
Ref: 55416627172
Ref: c-api/typeobj c Py_TPFLAGS_IMMUTABLETYPE16628019
Ref: 3c216628019
Ref: c-api/typeobj c Py_TPFLAGS_DISALLOW_INSTANTIATION16628392
Ref: 58216628392
Ref: c-api/typeobj c Py_TPFLAGS_MAPPING16629526
Ref: 19e316629526
Ref: c-api/typeobj c Py_TPFLAGS_SEQUENCE16630387
Ref: 19e416630387
Ref: c-api/typeobj c Py_TPFLAGS_VALID_VERSION_TAG16631249
Ref: 52b916631249
Ref: c-api/typeobj c PyTypeObject tp_doc16631596
Ref: 4b7516631596
Ref: c-api/typeobj c Py_tp_doc16631761
Ref: 4e2016631761
Ref: c-api/typeobj c PyTypeObject tp_traverse16632035
Ref: 77e16632035
Ref: c-api/typeobj c Py_tp_traverse16632234
Ref: 4e3316632234
Ref: c-api/typeobj c PyTypeObject tp_clear16636504
Ref: 4b8b16636504
Ref: c-api/typeobj c Py_tp_clear16636682
Ref: 4e1b16636682
Ref: c-api/typeobj c PyTypeObject tp_richcompare16640536
Ref: 4b9916640536
Ref: c-api/typeobj c Py_tp_richcompare16640740
Ref: 4e2f16640740
Ref: c-api/typeobj c Py_LT16641638
Ref: 4f1216641638
Ref: c-api/typeobj c Py_LE16641738
Ref: 4f1316641738
Ref: c-api/typeobj c Py_EQ16641839
Ref: 4f1416641839
Ref: c-api/typeobj c Py_NE16641940
Ref: 4f1516641940
Ref: c-api/typeobj c Py_GT16642041
Ref: 4f1616642041
Ref: c-api/typeobj c Py_GE16642141
Ref: 4f1716642141
Ref: c-api/typeobj c Py_RETURN_RICHCOMPARE16642274
Ref: bcc16642274
Ref: c-api/typeobj c PyTypeObject tp_weaklistoffset16643550
Ref: 98f16643550
Ref: c-api/typeobj c PyTypeObject tp_iter16645080
Ref: 153716645080
Ref: c-api/typeobj c Py_tp_iter16645260
Ref: 4e2916645260
Ref: c-api/typeobj c PyTypeObject tp_iternext16645713
Ref: 153816645713
Ref: c-api/typeobj c Py_tp_iternext16645912
Ref: 4e2a16645912
Ref: c-api/typeobj c PyTypeObject tp_methods16646665
Ref: 4b7d16646665
Ref: c-api/typeobj c Py_tp_methods16646869
Ref: 4e2c16646869
Ref: c-api/typeobj c PyTypeObject tp_members16647309
Ref: 4b7b16647309
Ref: c-api/typeobj c Py_tp_members16647512
Ref: 4e2b16647512
Ref: c-api/typeobj c PyTypeObject tp_getset16647987
Ref: 4b8016647987
Ref: c-api/typeobj c Py_tp_getset16648188
Ref: 4e2516648188
Ref: c-api/typeobj c PyTypeObject tp_base16648656
Ref: 20b816648656
Ref: c-api/typeobj c Py_tp_base16648837
Ref: 4e1816648837
Ref: c-api/typeobj c PyTypeObject tp_dict16650088
Ref: 180e16650088
Ref: c-api/typeobj c PyTypeObject tp_descr_get16651606
Ref: 526e16651606
Ref: c-api/typeobj c Py_tp_descr_get16651807
Ref: 4e1e16651807
Ref: c-api/typeobj c PyTypeObject tp_descr_set16652053
Ref: 1a4016652053
Ref: c-api/typeobj c Py_tp_descr_set16652254
Ref: 4e1f16652254
Ref: c-api/typeobj c PyTypeObject tp_dictoffset16652595
Ref: 4f7916652595
Ref: c-api/typeobj c PyTypeObject tp_init16654487
Ref: 58116654487
Ref: c-api/typeobj c Py_tp_init16654664
Ref: 4e2716654664
Ref: c-api/typeobj c PyTypeObject tp_alloc16656064
Ref: 4b7a16656064
Ref: c-api/typeobj c Py_tp_alloc16656244
Ref: 4e1716656244
Ref: c-api/typeobj c PyTypeObject tp_new16656893
Ref: 57f16656893
Ref: c-api/typeobj c Py_tp_new16657067
Ref: 4e2d16657067
Ref: c-api/typeobj c PyTypeObject tp_free16658739
Ref: 4b7916658739
Ref: c-api/typeobj c Py_tp_free16658916
Ref: 4e2216658916
Ref: c-api/typeobj c PyTypeObject tp_is_gc16659582
Ref: 526f16659582
Ref: c-api/typeobj c Py_tp_is_gc16659760
Ref: 4e2816659760
Ref: c-api/typeobj c PyTypeObject tp_bases16660876
Ref: 527016660876
Ref: c-api/typeobj c Py_tp_bases16661055
Ref: 4e1916661055
Ref: c-api/typeobj c PyTypeObject tp_mro16661736
Ref: 4f7c16661736
Ref: c-api/typeobj c PyTypeObject tp_cache16662216
Ref: 4f7d16662216
Ref: c-api/typeobj c PyTypeObject tp_subclasses16662376
Ref: 57216662376
Ref: c-api/typeobj c PyTypeObject tp_weaklist16662833
Ref: 4f7e16662833
Ref: c-api/typeobj c PyTypeObject tp_del16663410
Ref: 527116663410
Ref: c-api/typeobj c Py_tp_del16663587
Ref: 4e1d16663587
Ref: c-api/typeobj c PyTypeObject tp_version_tag16663659
Ref: 527216663659
Ref: c-api/typeobj c PyTypeObject tp_finalize16663845
Ref: ab516663845
Ref: c-api/typeobj c Py_tp_finalize16664063
Ref: 4e2116664063
Ref: c-api/typeobj c PyTypeObject tp_vectorcall16665554
Ref: 4f7b16665554
Ref: c-api/typeobj c PyTypeObject tp_watched16666108
Ref: 527316666108
Ref: PyTypeObject Slots-Footnote-116666271
Ref: PyTypeObject Slots-Footnote-216666313
Ref: PyTypeObject Slots-Footnote-316666355
Ref: PyTypeObject Slots-Footnote-416666398
Node: Static Types16666440
Ref: c-api/typeobj id416666564
Ref: 52ba16666564
Ref: c-api/typeobj static-types16666564
Ref: 77f16666564
Node: Tipos no heap16667471
Ref: c-api/typeobj heap-types16667601
Ref: 96c16667601
Ref: c-api/typeobj id516667601
Ref: 52bb16667601
Node: Number Object Structures16668112
Ref: c-api/typeobj number-object-structures16668255
Ref: 52bc16668255
Ref: c-api/typeobj number-structs16668255
Ref: 52ab16668255
Ref: c-api/typeobj c PyNumberMethods16668326
Ref: 146516668326
Ref: c-api/typeobj c PyNumberMethods nb_add16670779
Ref: 4f6e16670779
Ref: c-api/typeobj c Py_nb_add16670960
Ref: 4ded16670960
Ref: c-api/typeobj c PyNumberMethods nb_subtract16670962
Ref: 527b16670962
Ref: c-api/typeobj c Py_nb_subtract16671163
Ref: 4e0c16671163
Ref: c-api/typeobj c PyNumberMethods nb_multiply16671165
Ref: 527d16671165
Ref: c-api/typeobj c Py_nb_multiply16671366
Ref: 4e0516671366
Ref: c-api/typeobj c PyNumberMethods nb_remainder16671368
Ref: 527f16671368
Ref: c-api/typeobj c Py_nb_remainder16671571
Ref: 4e0a16671571
Ref: c-api/typeobj c PyNumberMethods nb_divmod16671573
Ref: 528116671573
Ref: c-api/typeobj c Py_nb_divmod16671770
Ref: 4df016671770
Ref: c-api/typeobj c PyNumberMethods nb_power16671772
Ref: 528216671772
Ref: c-api/typeobj c Py_nb_power16671968
Ref: 4e0916671968
Ref: c-api/typeobj c PyNumberMethods nb_negative16671970
Ref: 528416671970
Ref: c-api/typeobj c Py_nb_negative16672170
Ref: 4e0616672170
Ref: c-api/typeobj c PyNumberMethods nb_positive16672172
Ref: 528516672172
Ref: c-api/typeobj c Py_nb_positive16672372
Ref: 4e0816672372
Ref: c-api/typeobj c PyNumberMethods nb_absolute16672374
Ref: 528616672374
Ref: c-api/typeobj c Py_nb_absolute16672574
Ref: 4dec16672574
Ref: c-api/typeobj c PyNumberMethods nb_bool16672576
Ref: 528716672576
Ref: c-api/typeobj c Py_nb_bool16672756
Ref: 4def16672756
Ref: c-api/typeobj c PyNumberMethods nb_invert16672758
Ref: 528816672758
Ref: c-api/typeobj c Py_nb_invert16672954
Ref: 4e0216672954
Ref: c-api/typeobj c PyNumberMethods nb_lshift16672956
Ref: 528916672956
Ref: c-api/typeobj c Py_nb_lshift16673153
Ref: 4e0316673153
Ref: c-api/typeobj c PyNumberMethods nb_rshift16673155
Ref: 528b16673155
Ref: c-api/typeobj c Py_nb_rshift16673352
Ref: 4e0b16673352
Ref: c-api/typeobj c PyNumberMethods nb_and16673354
Ref: 528d16673354
Ref: c-api/typeobj c Py_nb_and16673535
Ref: 4dee16673535
Ref: c-api/typeobj c PyNumberMethods nb_xor16673537
Ref: 528f16673537
Ref: c-api/typeobj c Py_nb_xor16673718
Ref: 4e0e16673718
Ref: c-api/typeobj c PyNumberMethods nb_or16673720
Ref: 529116673720
Ref: c-api/typeobj c Py_nb_or16673899
Ref: 4e0716673899
Ref: c-api/typeobj c PyNumberMethods nb_int16673901
Ref: 529316673901
Ref: c-api/typeobj c Py_nb_int16674081
Ref: 4e0116674081
Ref: c-api/typeobj c PyNumberMethods nb_reserved16674083
Ref: 529416674083
Ref: c-api/typeobj c PyNumberMethods nb_float16674144
Ref: 529516674144
Ref: c-api/typeobj c Py_nb_float16674338
Ref: 4df116674338
Ref: c-api/typeobj c PyNumberMethods nb_inplace_add16674340
Ref: 527a16674340
Ref: c-api/typeobj c Py_nb_inplace_add16674547
Ref: 4df416674547
Ref: c-api/typeobj c PyNumberMethods nb_inplace_subtract16674549
Ref: 527c16674549
Ref: c-api/typeobj c Py_nb_inplace_subtract16674766
Ref: 4dfe16674766
Ref: c-api/typeobj c PyNumberMethods nb_inplace_multiply16674768
Ref: 527e16674768
Ref: c-api/typeobj c Py_nb_inplace_multiply16674985
Ref: 4df916674985
Ref: c-api/typeobj c PyNumberMethods nb_inplace_remainder16674987
Ref: 528016674987
Ref: c-api/typeobj c Py_nb_inplace_remainder16675206
Ref: 4dfc16675206
Ref: c-api/typeobj c PyNumberMethods nb_inplace_power16675208
Ref: 528316675208
Ref: c-api/typeobj c Py_nb_inplace_power16675420
Ref: 4dfb16675420
Ref: c-api/typeobj c PyNumberMethods nb_inplace_lshift16675422
Ref: 528a16675422
Ref: c-api/typeobj c Py_nb_inplace_lshift16675635
Ref: 4df716675635
Ref: c-api/typeobj c PyNumberMethods nb_inplace_rshift16675637
Ref: 528c16675637
Ref: c-api/typeobj c Py_nb_inplace_rshift16675850
Ref: 4dfd16675850
Ref: c-api/typeobj c PyNumberMethods nb_inplace_and16675852
Ref: 528e16675852
Ref: c-api/typeobj c Py_nb_inplace_and16676059
Ref: 4df516676059
Ref: c-api/typeobj c PyNumberMethods nb_inplace_xor16676061
Ref: 529016676061
Ref: c-api/typeobj c Py_nb_inplace_xor16676268
Ref: 4e0016676268
Ref: c-api/typeobj c PyNumberMethods nb_inplace_or16676270
Ref: 529216676270
Ref: c-api/typeobj c Py_nb_inplace_or16676475
Ref: 4dfa16676475
Ref: c-api/typeobj c PyNumberMethods nb_floor_divide16676477
Ref: 529616676477
Ref: c-api/typeobj c Py_nb_floor_divide16676686
Ref: 4df216676686
Ref: c-api/typeobj c PyNumberMethods nb_true_divide16676688
Ref: 529816676688
Ref: c-api/typeobj c Py_nb_true_divide16676895
Ref: 4e0d16676895
Ref: c-api/typeobj c PyNumberMethods nb_inplace_floor_divide16676897
Ref: 529716676897
Ref: c-api/typeobj c Py_nb_inplace_floor_divide16677127
Ref: 4df616677127
Ref: c-api/typeobj c PyNumberMethods nb_inplace_true_divide16677129
Ref: 529916677129
Ref: c-api/typeobj c Py_nb_inplace_true_divide16677353
Ref: 4dff16677353
Ref: c-api/typeobj c PyNumberMethods nb_index16677354
Ref: 146416677354
Ref: c-api/typeobj c Py_nb_index16677548
Ref: 4df316677548
Ref: c-api/typeobj c PyNumberMethods nb_matrix_multiply16677550
Ref: 529a16677550
Ref: c-api/typeobj c Py_nb_matrix_multiply16677786
Ref: 4e0416677786
Ref: c-api/typeobj c PyNumberMethods nb_inplace_matrix_multiply16677788
Ref: 529b16677788
Ref: c-api/typeobj c Py_nb_inplace_matrix_multiply16678045
Ref: 4df816678045
Node: Mapping Object Structures16678047
Ref: c-api/typeobj mapping-object-structures16678203
Ref: 52bd16678203
Ref: c-api/typeobj mapping-structs16678203
Ref: 52ad16678203
Ref: c-api/typeobj c PyMappingMethods16678276
Ref: 4b9e16678276
Ref: c-api/typeobj c PyMappingMethods mp_length16678448
Ref: 529c16678448
Ref: c-api/typeobj c Py_mp_length16678643
Ref: 4dea16678643
Ref: c-api/typeobj c PyMappingMethods mp_subscript16678850
Ref: 1a8316678850
Ref: c-api/typeobj c Py_mp_subscript16679054
Ref: 4deb16679054
Ref: c-api/typeobj c PyMappingMethods mp_ass_subscript16679359
Ref: 529d16679359
Ref: c-api/typeobj c Py_mp_ass_subscript16679574
Ref: 4de916679574
Node: Sequence Object Structures16679970
Ref: c-api/typeobj sequence-object-structures16680126
Ref: 52be16680126
Ref: c-api/typeobj sequence-structs16680126
Ref: 52ac16680126
Ref: c-api/typeobj c PySequenceMethods16680201
Ref: 4b9d16680201
Ref: c-api/typeobj c PySequenceMethods sq_length16680352
Ref: 4f7816680352
Ref: c-api/typeobj c Py_sq_length16680548
Ref: 4e1516680548
Ref: c-api/typeobj c PySequenceMethods sq_concat16680804
Ref: 529e16680804
Ref: c-api/typeobj c Py_sq_concat16681003
Ref: 4e1016681003
Ref: c-api/typeobj c PySequenceMethods sq_repeat16681217
Ref: 529f16681217
Ref: c-api/typeobj c Py_sq_repeat16681418
Ref: 4e1616681418
Ref: c-api/typeobj c PySequenceMethods sq_item16681644
Ref: 1a8216681644
Ref: c-api/typeobj c Py_sq_item16681841
Ref: 4e1416681841
Ref: c-api/typeobj c PySequenceMethods sq_ass_item16682512
Ref: 52a016682512
Ref: c-api/typeobj c Py_sq_ass_item16682720
Ref: 4e0f16682720
Ref: c-api/typeobj c PySequenceMethods sq_contains16683115
Ref: 52a116683115
Ref: c-api/typeobj c Py_sq_contains16683318
Ref: 4e1116683318
Ref: c-api/typeobj c PySequenceMethods sq_inplace_concat16683566
Ref: 52a216683566
Ref: c-api/typeobj c Py_sq_inplace_concat16683781
Ref: 4e1216683781
Ref: c-api/typeobj c PySequenceMethods sq_inplace_repeat16684235
Ref: 52a316684235
Ref: c-api/typeobj c Py_sq_inplace_repeat16684452
Ref: 4e1316684452
Node: Buffer Object Structures16684917
Ref: c-api/typeobj buffer-object-structures16685071
Ref: 52bf16685071
Ref: c-api/typeobj buffer-structs16685071
Ref: 4f4316685071
Ref: c-api/typeobj c PyBufferProcs16685142
Ref: 4f7f16685142
Ref: c-api/typeobj c PyBufferProcs bf_getbuffer16685376
Ref: 76216685376
Ref: c-api/typeobj c Py_bf_getbuffer16685602
Ref: 4de516685602
Ref: c-api/typeobj c PyBufferProcs bf_releasebuffer16687400
Ref: 76316687400
Ref: c-api/typeobj c Py_bf_releasebuffer16687638
Ref: 4de616687638
Node: Async Object Structures16688681
Ref: c-api/typeobj async-object-structures16688827
Ref: 52c016688827
Ref: c-api/typeobj async-structs16688827
Ref: 52aa16688827
Ref: c-api/typeobj c PyAsyncMethods16688924
Ref: 4f7716688924
Ref: c-api/typeobj c PyAsyncMethods am_await16689341
Ref: 527516689341
Ref: c-api/typeobj c Py_am_await16689545
Ref: 4de316689545
Ref: c-api/typeobj c PyAsyncMethods am_aiter16689851
Ref: 527616689851
Ref: c-api/typeobj c Py_am_aiter16690055
Ref: 4de116690055
Ref: c-api/typeobj c PyAsyncMethods am_anext16690367
Ref: 527716690367
Ref: c-api/typeobj c Py_am_anext16690571
Ref: 4de216690571
Ref: c-api/typeobj c PyAsyncMethods am_send16690797
Ref: 527816690797
Ref: c-api/typeobj c Py_am_send16690999
Ref: 4de416690999
Node: Slot Type typedefs16691250
Ref: c-api/typeobj id616691384
Ref: 52a516691384
Ref: c-api/typeobj slot-type-typedefs16691384
Ref: 52c116691384
Ref: c-api/typeobj c allocfunc16691443
Ref: 4e3416691443
Ref: c-api/typeobj c destructor16692513
Ref: 4e3816692513
Ref: c-api/typeobj c freefunc16692618
Ref: 50bf16692618
Ref: c-api/typeobj c newfunc16692694
Ref: 4e4316692694
Ref: c-api/typeobj c initproc16692897
Ref: 4e3f16692897
Ref: c-api/typeobj c reprfunc16693080
Ref: 4e4716693080
Ref: c-api/typeobj c getattrfunc16693236
Ref: 4e3916693236
Ref: c-api/typeobj c setattrfunc16693448
Ref: 4e4916693448
Ref: c-api/typeobj c getattrofunc16693739
Ref: 4e3a16693739
Ref: c-api/typeobj c setattrofunc16694003
Ref: 4e4a16694003
Ref: c-api/typeobj c descrgetfunc16694346
Ref: 4e3616694346
Ref: c-api/typeobj c descrsetfunc16694557
Ref: 4e3716694557
Ref: c-api/typeobj c hashfunc16694750
Ref: 4e3e16694750
Ref: c-api/typeobj c richcmpfunc16694907
Ref: 4e4816694907
Ref: c-api/typeobj c getiterfunc16695106
Ref: 4e3c16695106
Ref: c-api/typeobj c iternextfunc16695265
Ref: 4e4116695265
Ref: c-api/typeobj c lenfunc16695429
Ref: 4e4216695429
Ref: c-api/typeobj c getbufferproc16695559
Ref: 4e3b16695559
Ref: c-api/typeobj c releasebufferproc16695727
Ref: 4e4616695727
Ref: c-api/typeobj c unaryfunc16695895
Ref: 4e5016695895
Ref: c-api/typeobj c binaryfunc16696026
Ref: 4e3516696026
Ref: c-api/typeobj c sendfunc16696181
Ref: 527916696181
Ref: c-api/typeobj c ternaryfunc16696361
Ref: 4e4e16696361
Ref: c-api/typeobj c ssizeargfunc16696540
Ref: 4e4c16696540
Ref: c-api/typeobj c ssizeobjargproc16696698
Ref: 4e4d16696698
Ref: c-api/typeobj c objobjproc16696863
Ref: 4e4516696863
Ref: c-api/typeobj c objobjargproc16697000
Ref: 4e4416697000
Node: Exemplos<38>16697163
Ref: c-api/typeobj examples16697265
Ref: 52c216697265
Ref: c-api/typeobj typedef-examples16697265
Ref: 526616697265
Node: Suporte a Coleta Cíclica de Lixo16702644
Ref: c-api/gcsupport doc16702785
Ref: 52c316702785
Ref: c-api/gcsupport supporting-cycle-detection16702785
Ref: 52ae16702785
Ref: c-api/gcsupport supporting-cyclic-garbage-collection16702785
Ref: 52c416702785
Ref: c-api/gcsupport translation-repo16702785
Ref: 52c516702785
Ref: c-api/gcsupport c PyObject_GC_New16705256
Ref: ab116705256
Ref: c-api/gcsupport c PyObject_GC_NewVar16705427
Ref: ab216705427
Ref: c-api/gcsupport c PyUnstable_Object_GC_NewWithExtraData16705610
Ref: 182d16705610
Ref: c-api/gcsupport c PyObject_GC_Resize16706638
Ref: 183216706638
Ref: c-api/gcsupport c PyObject_GC_Track16707021
Ref: 154d16707021
Ref: c-api/gcsupport c PyObject_IS_GC16707458
Ref: 98b16707458
Ref: c-api/gcsupport c PyObject_GC_IsTracked16707709
Ref: 97d16707709
Ref: c-api/gcsupport c PyObject_GC_IsFinalized16708097
Ref: 97e16708097
Ref: c-api/gcsupport c PyObject_GC_Del16708488
Ref: 154c16708488
Ref: c-api/gcsupport c PyObject_GC_UnTrack16708697
Ref: 154e16708697
Ref: c-api/gcsupport c visitproc16709417
Ref: 4e5116709417
Ref: c-api/gcsupport c traverseproc16710031
Ref: 4e4f16710031
Ref: c-api/gcsupport c Py_VISIT16711028
Ref: 4b8216711028
Ref: c-api/gcsupport c inquiry16711624
Ref: 4e4016711624
Node: Controlando o estado do coletor de lixo16712245
Ref: c-api/gcsupport controlling-the-garbage-collector-state16712395
Ref: 52c616712395
Ref: c-api/gcsupport c PyGC_Collect16712579
Ref: 99516712579
Ref: c-api/gcsupport c PyGC_Enable16713145
Ref: 8a816713145
Ref: c-api/gcsupport c PyGC_Disable16713423
Ref: 8a916713423
Ref: c-api/gcsupport c PyGC_IsEnabled16713703
Ref: 8aa16713703
Node: Querying Garbage Collector State16713998
Ref: c-api/gcsupport querying-garbage-collector-state16714148
Ref: 52c716714148
Ref: c-api/gcsupport c PyUnstable_GC_VisitObjects16714331
Ref: 52c816714331
Ref: c-api/gcsupport c gcvisitobjects_t16715133
Ref: 52c916715133
Node: API e Versionamento de ABI16715625
Ref: c-api/apiabiversion doc16715801
Ref: 52ca16715801
Ref: c-api/apiabiversion api-and-abi-versioning16715801
Ref: 52cb16715801
Ref: c-api/apiabiversion apiabiversion16715801
Ref: 45c716715801
Ref: c-api/apiabiversion translation-repo16715801
Ref: 52cc16715801
Ref: c-api/apiabiversion c PY_MAJOR_VERSION16716172
Ref: 52cd16716172
Ref: c-api/apiabiversion c PY_MINOR_VERSION16716237
Ref: 52ce16716237
Ref: c-api/apiabiversion c PY_MICRO_VERSION16716302
Ref: 52cf16716302
Ref: c-api/apiabiversion c PY_RELEASE_LEVEL16716367
Ref: 52d016716367
Ref: c-api/apiabiversion c PY_RELEASE_SERIAL16716560
Ref: 52d116716560
Ref: c-api/apiabiversion c PY_VERSION_HEX16716661
Ref: 75716716661
Ref: c-api/apiabiversion c Py_Version16718638
Ref: 75616718638
Ref: API e Versionamento de ABI-Footnote-116719108
Node: API C de monitoramento16719181
Ref: c-api/monitoring doc16719350
Ref: 52d216719350
Ref: c-api/monitoring c-api-monitoring16719350
Ref: 15c16719350
Ref: c-api/monitoring monitoring-c-api16719350
Ref: 52d316719350
Ref: c-api/monitoring translation-repo16719350
Ref: 52d416719350
Node: Gerando eventos de execução16719659
Ref: c-api/monitoring generating-execution-events16719793
Ref: 52d516719793
Ref: c-api/monitoring c PyMonitoringState16720858
Ref: 31816720858
Ref: c-api/monitoring c PyMonitoring_FirePyStartEvent16721251
Ref: 31916721251
Ref: c-api/monitoring c PyMonitoring_FirePyResumeEvent16721415
Ref: 31a16721415
Ref: c-api/monitoring c PyMonitoring_FirePyReturnEvent16721581
Ref: 31b16721581
Ref: c-api/monitoring c PyMonitoring_FirePyYieldEvent16721765
Ref: 31c16721765
Ref: c-api/monitoring c PyMonitoring_FireCallEvent16721947
Ref: 31d16721947
Ref: c-api/monitoring c PyMonitoring_FireLineEvent16722150
Ref: 31e16722150
Ref: c-api/monitoring c PyMonitoring_FireJumpEvent16722319
Ref: 31f16722319
Ref: c-api/monitoring c PyMonitoring_FireBranchEvent16722501
Ref: 32016722501
Ref: c-api/monitoring c PyMonitoring_FireCReturnEvent16722697
Ref: 32116722697
Ref: c-api/monitoring c PyMonitoring_FirePyThrowEvent16722879
Ref: 32216722879
Ref: c-api/monitoring c PyMonitoring_FireRaiseEvent16723134
Ref: 32316723134
Ref: c-api/monitoring c PyMonitoring_FireCRaiseEvent16723384
Ref: 32416723384
Ref: c-api/monitoring c PyMonitoring_FireReraiseEvent16723637
Ref: 32516723637
Ref: c-api/monitoring c PyMonitoring_FireExceptionHandledEvent16723891
Ref: 32616723891
Ref: c-api/monitoring c PyMonitoring_FirePyUnwindEvent16724164
Ref: 32716724164
Ref: c-api/monitoring c PyMonitoring_FireStopIterationEvent16724421
Ref: 32816724421
Node: Gerenciando o Estado de um Monitoramento16724873
Ref: c-api/monitoring managing-the-monitoring-state16724979
Ref: 52d616724979
Ref: c-api/monitoring c PyMonitoring_EnterScope16725225
Ref: 32916725225
Ref: c-api/monitoring c PY_MONITORING_EVENT_BRANCH16727366
Ref: 52d716727366
Ref: c-api/monitoring c PY_MONITORING_EVENT_CALL16727566
Ref: 52d816727566
Ref: c-api/monitoring c PY_MONITORING_EVENT_C_RAISE16727769
Ref: 52d916727769
Ref: c-api/monitoring c PY_MONITORING_EVENT_C_RETURN16727973
Ref: 52da16727973
Ref: c-api/monitoring c PY_MONITORING_EVENT_EXCEPTION_HANDLED16728186
Ref: 52db16728186
Ref: c-api/monitoring c PY_MONITORING_EVENT_INSTRUCTION16728393
Ref: 52dc16728393
Ref: c-api/monitoring c PY_MONITORING_EVENT_JUMP16728593
Ref: 52dd16728593
Ref: c-api/monitoring c PY_MONITORING_EVENT_LINE16728793
Ref: 52de16728793
Ref: c-api/monitoring c PY_MONITORING_EVENT_PY_RESUME16728998
Ref: 52df16728998
Ref: c-api/monitoring c PY_MONITORING_EVENT_PY_RETURN16729203
Ref: 52e016729203
Ref: c-api/monitoring c PY_MONITORING_EVENT_PY_START16729407
Ref: 52e116729407
Ref: c-api/monitoring c PY_MONITORING_EVENT_PY_THROW16729611
Ref: 52e216729611
Ref: c-api/monitoring c PY_MONITORING_EVENT_PY_UNWIND16729816
Ref: 52e316729816
Ref: c-api/monitoring c PY_MONITORING_EVENT_PY_YIELD16730020
Ref: 52e416730020
Ref: c-api/monitoring c PY_MONITORING_EVENT_RAISE16730221
Ref: 52e516730221
Ref: c-api/monitoring c PY_MONITORING_EVENT_RERAISE16730424
Ref: 52e616730424
Ref: c-api/monitoring c PY_MONITORING_EVENT_STOP_ITERATION16730634
Ref: 52e716730634
Ref: c-api/monitoring c PyMonitoring_ExitScope16730732
Ref: 32a16730732
Ref: c-api/monitoring c PY_MONITORING_IS_INSTRUMENTED_EVENT16730871
Ref: 52e816730871
Node: Instalando módulos Python16731192
Ref: installing/index doc16731326
Ref: 52e916731326
Ref: installing/index installing-index16731326
Ref: f2716731326
Ref: installing/index installing-python-modules16731326
Ref: 52ea16731326
Ref: installing/index translation-repo16731326
Ref: 52eb16731326
Ref: Instalando módulos Python-Footnote-116732688
Node: Termos chave16732766
Ref: installing/index key-terms16732864
Ref: 52ec16732864
Ref: Termos chave-Footnote-116735123
Ref: Termos chave-Footnote-216735148
Ref: Termos chave-Footnote-316735177
Ref: Termos chave-Footnote-416735209
Node: Uso básico<3>16735321
Ref: installing/index basic-usage16735440
Ref: 52ed16735440
Ref: Uso básico<3>-Footnote-116737181
Ref: Uso básico<3>-Footnote-216737218
Node: Como eu …?16737300
Ref: installing/index how-do-i16737439
Ref: 52ee16737439
Node: … instalo pip em versões do Python anteriores ao Python 3 4?16737857
Ref: installing/index install-pip-in-versions-of-python-prior-to-python-3-416738027
Ref: 52ef16738027
Ref: … instalo pip em versões do Python anteriores ao Python 3 4?-Footnote-116738481
Node: … instalo pacotes apenas para o usuário atual?16738600
Ref: installing/index install-packages-just-for-the-current-user16738822
Ref: 52f016738822
Node: … instalo pacotes científicos do Python?16739099
Ref: installing/index install-scientific-python-packages16739325
Ref: 52f116739325
Ref: … instalo pacotes científicos do Python?-Footnote-116739877
Ref: … instalo pacotes científicos do Python?-Footnote-216739923
Node: … trabalho com várias versões do Python instaladas em paralelo?16740014
Ref: installing/index work-with-multiple-versions-of-python-installed-in-parallel16740182
Ref: 52f216740182
Node: Problemas comuns de instalação16741182
Ref: installing/index common-installation-issues16741298
Ref: 52f316741298
Node: Instalando no sistema Python no Linux16741482
Ref: installing/index installing-into-the-system-python-on-linux16741615
Ref: 52f416741615
Node: Pip não instalado16742179
Ref: installing/index pip-not-installed16742352
Ref: 52f516742352
Ref: Pip não instalado-Footnote-116742629
Node: Instalando extensões binárias16742755
Ref: installing/index installing-binary-extensions16742882
Ref: 52f616742882
Ref: Instalando extensões binárias-Footnote-116743896
Ref: Instalando extensões binárias-Footnote-216743942
Node: Python HOWTOs16744029
Ref: howto/index doc16744159
Ref: 52f716744159
Ref: howto/index how-tos16744159
Ref: 52f816744159
Ref: howto/index python-howtos16744159
Ref: 52f916744159
Ref: howto/index translation-repo16744159
Ref: 52fa16744159
Node: Uma visão geral conceitual de asyncio16745419
Ref: howto/a-conceptual-overview-of-asyncio doc16745562
Ref: 52fb16745562
Ref: howto/a-conceptual-overview-of-asyncio a-conceptual-overview-of-asyncio16745562
Ref: 347516745562
Ref: howto/a-conceptual-overview-of-asyncio id116745562
Ref: 52fc16745562
Ref: Uma visão geral conceitual de asyncio-Footnote-116747104
Ref: Uma visão geral conceitual de asyncio-Footnote-216747185
Ref: Uma visão geral conceitual de asyncio-Footnote-316747278
Node: Uma visão geral conceitual parte 1 o alto nível16747359
Ref: howto/a-conceptual-overview-of-asyncio a-conceptual-overview-part-1-the-high-level16747539
Ref: 52fd16747539
Node: Laço de eventos<2>16747960
Ref: howto/a-conceptual-overview-of-asyncio event-loop16748109
Ref: 52fe16748109
Node: Funções assíncronas e corrotinas16749927
Ref: howto/a-conceptual-overview-of-asyncio asynchronous-functions-and-coroutines16750095
Ref: 52ff16750095
Node: Tarefas<2>16753192
Ref: howto/a-conceptual-overview-of-asyncio tasks16753346
Ref: 530016753346
Node: await16756594
Ref: howto/a-conceptual-overview-of-asyncio await16756704
Ref: 530116756704
Node: Uma visão geral conceitual parte 2 os detalhes16761219
Ref: howto/a-conceptual-overview-of-asyncio a-conceptual-overview-part-2-the-nuts-and-bolts16761399
Ref: 530216761399
Node: O funcionamento interno das corrotinas16761891
Ref: howto/a-conceptual-overview-of-asyncio the-inner-workings-of-coroutines16762032
Ref: 530316762032
Node: Futuros<2>16765807
Ref: howto/a-conceptual-overview-of-asyncio futures16765981
Ref: 530416765981
Node: Um asyncio sleep caseiro16767480
Ref: howto/a-conceptual-overview-of-asyncio a-homemade-asyncio-sleep16767607
Ref: 530516767607
Node: Portando módulos de extensão para o Python 316772616
Ref: howto/cporting doc16772802
Ref: 530616772802
Ref: howto/cporting cporting-howto16772802
Ref: 132416772802
Ref: howto/cporting porting-extension-modules-to-python-316772802
Ref: 530716772802
Ref: howto/cporting translation-repo16772802
Ref: 530816772802
Ref: Portando módulos de extensão para o Python 3-Footnote-116773641
Ref: Portando módulos de extensão para o Python 3-Footnote-216773692
Node: Programação em Curses com Python16773749
Ref: howto/curses doc16773916
Ref: 530916773916
Ref: howto/curses curses-howto16773916
Ref: 313d16773916
Ref: howto/curses curses-programming-with-python16773916
Ref: 530a16773916
Ref: howto/curses translation-repo16773916
Ref: 530b16773916
Node: O que é curses?16774358
Ref: howto/curses what-is-curses16774500
Ref: 530c16774500
Ref: O que é curses?-Footnote-116777289
Ref: O que é curses?-Footnote-216777329
Node: O módulo curses de Python16777373
Ref: howto/curses the-python-curses-module16777452
Ref: 530d16777452
Node: Começando e terminando uma aplicação curses16778269
Ref: howto/curses starting-and-ending-a-curses-application16778434
Ref: 530e16778434
Node: Janelas e Pads16781921
Ref: howto/curses windows-and-pads16782084
Ref: 530f16782084
Node: Exibindo texto16786823
Ref: howto/curses displaying-text16786959
Ref: 531016786959
Node: Atributos e Cor16790878
Ref: howto/curses attributes-and-color16790944
Ref: 531116790944
Node: Entrada de usuário16795863
Ref: howto/curses user-input16796008
Ref: 531216796008
Ref: Entrada de usuário-Footnote-116800163
Node: Para mais informações16800203
Ref: howto/curses for-more-information16800325
Ref: 531316800325
Ref: Para mais informações-Footnote-116801981
Ref: Para mais informações-Footnote-216802018
Ref: Para mais informações-Footnote-316802082
Ref: Para mais informações-Footnote-416802126
Ref: Para mais informações-Footnote-516802188
Ref: Para mais informações-Footnote-616802240
Node: Guia de descritores16802311
Ref: howto/descriptor doc16802491
Ref: 531416802491
Ref: howto/descriptor descriptor-guide16802491
Ref: 531516802491
Ref: howto/descriptor descriptorhowto16802491
Ref: 153516802491
Ref: howto/descriptor translation-repo16802491
Ref: 531616802491
Node: Introdução<14>16803805
Ref: howto/descriptor primer16803916
Ref: 531716803916
Node: Exemplo simples um descritor que retorna uma constante16804301
Ref: howto/descriptor simple-example-a-descriptor-that-returns-a-constant16804437
Ref: 531816804437
Node: Pesquisas dinâmicas16805973
Ref: howto/descriptor dynamic-lookups16806139
Ref: 531916806139
Node: Atributos gerenciados16807610
Ref: howto/descriptor managed-attributes16807742
Ref: 531a16807742
Node: Nomes personalizados16810484
Ref: howto/descriptor customized-names16810614
Ref: 531b16810614
Node: Pensamentos finais16813020
Ref: howto/descriptor closing-thoughts16813120
Ref: 531c16813120
Node: Exemplo completamente prático16814660
Ref: howto/descriptor complete-practical-example16814797
Ref: 531d16814797
Node: Classe Validator16815098
Ref: howto/descriptor validator-class16815216
Ref: 531e16815216
Node: Validadores personalizados16816309
Ref: howto/descriptor custom-validators16816456
Ref: 531f16816456
Ref: Validadores personalizados-Footnote-116819134
Node: Aplicação prática16819204
Ref: howto/descriptor practical-application16819326
Ref: 532016819326
Node: Tutorial técnico16820770
Ref: howto/descriptor technical-tutorial16820918
Ref: 532116820918
Node: Resumo16821382
Ref: howto/descriptor abstract16821477
Ref: 532216821477
Node: Definição e introdução16821839
Ref: howto/descriptor definition-and-introduction16821963
Ref: 532316821963
Node: Protocolo Descriptor16823253
Ref: howto/descriptor descriptor-protocol16823411
Ref: 532416823411
Node: Visão geral da invocação do descritor16824811
Ref: howto/descriptor overview-of-descriptor-invocation16824972
Ref: 532516824972
Node: Invocação de uma instância16825645
Ref: howto/descriptor invocation-from-an-instance16825811
Ref: 532616825811
Node: Invocação de uma classe16828444
Ref: howto/descriptor invocation-from-a-class16828590
Ref: 532716828590
Ref: Invocação de uma classe-Footnote-116829215
Node: Invocação de super16829288
Ref: howto/descriptor invocation-from-super16829437
Ref: 532816829437
Ref: Invocação de super-Footnote-116830116
Ref: Invocação de super-Footnote-216830189
Node: Resumo da lógica de invocação16830269
Ref: howto/descriptor summary-of-invocation-logic16830426
Ref: 532916830426
Node: Notificação automática de nome16831497
Ref: howto/descriptor automatic-name-notification16831648
Ref: 532a16831648
Ref: Notificação automática de nome-Footnote-116832592
Node: Exemplo de ORM16832665
Ref: howto/descriptor orm-example16832775
Ref: 532b16832775
Ref: Exemplo de ORM-Footnote-116834902
Ref: Exemplo de ORM-Footnote-216834969
Node: Equivalentes de Python puro16835022
Ref: howto/descriptor pure-python-equivalents16835131
Ref: 532c16835131
Node: Propriedades16835651
Ref: howto/descriptor properties16835756
Ref: 532d16835756
Node: Funções e métodos16838682
Ref: howto/descriptor functions-and-methods16838813
Ref: 532e16838813
Node: Tipos de métodos16842283
Ref: howto/descriptor kinds-of-methods16842421
Ref: 532f16842421
Node: Métodos estáticos16843739
Ref: howto/descriptor static-methods16843875
Ref: 533016843875
Node: Métodos de classe16845992
Ref: howto/descriptor class-methods16846139
Ref: 533116846139
Node: Member objects and __slots__16848205
Ref: howto/descriptor member-objects-and-slots16848324
Ref: 533216848324
Ref: Member objects and __slots__-Footnote-116855947
Node: Depurando extensões de API C e internos do CPython com GDB16856003
Ref: howto/gdb_helpers doc16856153
Ref: 533316856153
Ref: howto/gdb_helpers debugging-c-api-extensions-and-cpython-internals-with-gdb16856153
Ref: 533416856153
Ref: howto/gdb_helpers gdb16856153
Ref: 533516856153
Ref: howto/gdb_helpers translation-repo16856153
Ref: 533616856153
Ref: Depurando extensões de API C e internos do CPython com GDB-Footnote-116857652
Ref: Depurando extensões de API C e internos do CPython com GDB-Footnote-216857688
Node: Pré-requisitos16857742
Ref: howto/gdb_helpers prerequisites16857926
Ref: 533716857926
Node: Configuração com Python construído a partir do código-fonte16858705
Ref: howto/gdb_helpers setup-with-python-built-from-source16858892
Ref: 533816858892
Node: Configuração para Python a partir de uma distribuição Linux16859815
Ref: howto/gdb_helpers setup-for-python-from-a-linux-distro16860002
Ref: 533916860002
Node: Usando a compilação de depuração e o modo de desenvolvimento16860762
Ref: howto/gdb_helpers using-the-debug-build-and-development-mode16860984
Ref: 533a16860984
Node: Usando a extensão python-gdb16861727
Ref: howto/gdb_helpers using-the-python-gdb-extension16861957
Ref: 533b16861957
Node: Pretty-printers16862278
Ref: howto/gdb_helpers pretty-printers16862375
Ref: 533c16862375
Node: py-list16867036
Ref: howto/gdb_helpers py-list16867157
Ref: 533d16867157
Node: py-up e py-down16868070
Ref: howto/gdb_helpers py-up-and-py-down16868181
Ref: 533e16868181
Node: py-bt16872998
Ref: howto/gdb_helpers py-bt16873110
Ref: 533f16873110
Node: py-print16875363
Ref: howto/gdb_helpers py-print16875469
Ref: 534016875469
Node: py-locals16876221
Ref: howto/gdb_helpers py-locals16876313
Ref: 534116876313
Node: Uso com comandos do GDB16877218
Ref: howto/gdb_helpers use-with-gdb-commands16877375
Ref: 534216877375
Node: Enum16883459
Ref: howto/enum doc16883613
Ref: 534316883613
Ref: howto/enum enum-howto16883613
Ref: 534416883613
Ref: howto/enum id116883613
Ref: 534516883613
Ref: howto/enum translation-repo16883613
Ref: 534616883613
Ref: howto/enum enum-basic-tutorial16883632
Ref: 275616883632
Node: Acesso programático aos membros da enumeração e seus atributos16890132
Ref: howto/enum enum-advanced-tutorial16890284
Ref: 275716890284
Ref: howto/enum programmatic-access-to-enumeration-members-and-their-attributes16890284
Ref: 534716890284
Node: Membros e valores duplicados em enums16891130
Ref: howto/enum duplicating-enum-members-and-values16891333
Ref: 534816891333
Node: Garantindo valores únicos na enumeração16892605
Ref: howto/enum ensuring-unique-enumeration-values16892770
Ref: 534916892770
Node: Usando valores automáticos16893357
Ref: howto/enum using-automatic-values16893498
Ref: 534a16893498
Node: Iteração<2>16894463
Ref: howto/enum iteration16894578
Ref: 534b16894578
Node: Comparações<3>16895964
Ref: howto/enum comparisons16896099
Ref: 534c16896099
Node: Membros e atributos permitidos em enumerações16897367
Ref: howto/enum allowed-members-and-attributes-of-enumerations16897514
Ref: 534e16897514
Node: Herança restrita de Enum16899755
Ref: howto/enum restricted-enum-subclassing16899905
Ref: 535216899905
Node: Suporte a dataclass16901082
Ref: howto/enum dataclass-support16901193
Ref: 535416901193
Ref: howto/enum enum-dataclass-support16901193
Ref: 188116901193
Node: Pickling16902605
Ref: howto/enum pickling16902707
Ref: 535516902707
Node: API funcional<3>16903701
Ref: howto/enum functional-api16903804
Ref: 534f16903804
Node: Derived Enumerations16907193
Ref: howto/enum derived-enumerations16907319
Ref: 535616907319
Node: IntEnum16907459
Ref: howto/enum intenum16907539
Ref: 534d16907539
Node: StrEnum16908664
Ref: howto/enum strenum16908760
Ref: 535716908760
Node: IntFlag16909072
Ref: howto/enum intflag16909172
Ref: 535816909172
Node: Sinalizador16911559
Ref: howto/enum flag16911661
Ref: 535916911661
Node: Outros<2>16913977
Ref: howto/enum others16914063
Ref: 535a16914063
Node: When to use __new__ vs __init__16916107
Ref: howto/enum new-vs-init16916251
Ref: 535116916251
Ref: howto/enum when-to-use-new-vs-init16916251
Ref: 535b16916251
Node: Finer Points16917548
Ref: howto/enum finer-points16917628
Ref: 535c16917628
Node: Nomes __dunder__ suportados<2>16918039
Ref: howto/enum supported-dunder-names16918155
Ref: 535d16918155
Node: Nomes _sunder_ suportados<2>16918592
Ref: howto/enum supported-sunder-names16918732
Ref: 535e16918732
Node: _Private__names16920847
Ref: howto/enum private-names16920973
Ref: 536016920973
Node: Enum member type16921144
Ref: howto/enum enum-member-type16921295
Ref: 536116921295
Node: Creating members that are mixed with other data types16921779
Ref: howto/enum creating-members-that-are-mixed-with-other-data-types16921956
Ref: 536216921956
Node: Boolean value of Enum classes and members16922491
Ref: howto/enum boolean-value-of-enum-classes-and-members16922677
Ref: 536316922677
Node: Enum classes with methods16923242
Ref: howto/enum enum-classes-with-methods16923400
Ref: 536416923400
Node: Combining members of Flag16923940
Ref: howto/enum combining-members-of-flag16924081
Ref: 536516924081
Node: Flag and IntFlag minutia16924643
Ref: howto/enum flag-and-intflag-minutia16924750
Ref: 536616924750
Node: How are Enums and Flags different?16927286
Ref: howto/enum enum-class-differences16927423
Ref: 275916927423
Ref: howto/enum how-are-enums-and-flags-different16927423
Ref: 536716927423
Node: Enum Classes16927758
Ref: howto/enum enum-classes16927862
Ref: 536816927862
Node: Flag Classes16928452
Ref: howto/enum flag-classes16928591
Ref: 536916928591
Node: Enum Members aka instances16928957
Ref: howto/enum enum-members-aka-instances16929096
Ref: 536a16929096
Node: Flag Members16929484
Ref: howto/enum flag-members16929602
Ref: 536b16929602
Node: Enum Cookbook16930237
Ref: howto/enum enum-cookbook16930363
Ref: 275816930363
Ref: howto/enum id216930363
Ref: 536c16930363
Node: Omitting values16930828
Ref: howto/enum omitting-values16930913
Ref: 536d16930913
Node: Using auto16931707
Ref: howto/enum using-auto16931790
Ref: 536e16931790
Node: Using object16932042
Ref: howto/enum using-object16932160
Ref: 536f16932160
Node: Using a descriptive string16932813
Ref: howto/enum using-a-descriptive-string16932943
Ref: 537016932943
Node: Using a custom __new__16933230
Ref: howto/enum using-a-custom-new16933339
Ref: 537116933339
Node: OrderedEnum16935211
Ref: howto/enum orderedenum16935322
Ref: 535316935322
Node: DuplicateFreeEnum16936502
Ref: howto/enum duplicatefreeenum16936612
Ref: 537216936612
Node: MultiValueEnum16937692
Ref: howto/enum multivalueenum16937797
Ref: 535f16937797
Node: Planet16938380
Ref: howto/enum planet16938478
Ref: 535016938478
Node: TimePeriod16939539
Ref: howto/enum enum-time-period16939614
Ref: 276f16939614
Ref: howto/enum timeperiod16939614
Ref: 537316939614
Node: Subclassing EnumType16940236
Ref: howto/enum enumtype-examples16940319
Ref: 275f16940319
Ref: howto/enum subclassing-enumtype16940319
Ref: 537416940319
Node: Programação Funcional16940583
Ref: howto/functional doc16940685
Ref: 537516940685
Ref: howto/functional functional-howto16940685
Ref: 537616940685
Ref: howto/functional functional-programming-howto16940685
Ref: 537716940685
Ref: howto/functional translation-repo16940685
Ref: 537816940685
Node: Introdução<15>16941522
Ref: howto/functional introduction16941620
Ref: 537916941620
Node: Probabilidade formal16946831
Ref: howto/functional formal-provability16946925
Ref: 537b16946925
Node: Modularidade16948957
Ref: howto/functional modularity16949086
Ref: 537c16949086
Node: Fácil de depurar e testar16949526
Ref: howto/functional ease-of-debugging-and-testing16949650
Ref: 537d16949650
Node: Componibilidade16950459
Ref: howto/functional composability16950562
Ref: 537e16950562
Node: Iteradores<2>16951371
Ref: howto/functional functional-howto-iterators16951525
Ref: 537a16951525
Ref: howto/functional iterators16951525
Ref: 537f16951525
Node: Tipos de Dados que Suportam Iteradores16955036
Ref: howto/functional data-types-that-support-iterators16955124
Ref: 538016955124
Node: Expressões do gerador e compreensões de lista16957216
Ref: howto/functional generator-expressions-and-list-comprehensions16957366
Ref: 538116957366
Node: Geradores<2>16962204
Ref: howto/functional generators16962363
Ref: 538216962363
Ref: Geradores<2>-Footnote-116966469
Node: Passando valores para um gerador16966550
Ref: howto/functional passing-values-into-a-generator16966631
Ref: 538316966631
Ref: Passando valores para um gerador-Footnote-116970699
Node: Funções embutidas<4>16970741
Ref: howto/functional built-in-functions16970872
Ref: 538416970872
Ref: Funções embutidas<4>-Footnote-116974996
Node: O módulo itertools16975050
Ref: howto/functional the-itertools-module16975188
Ref: 538516975188
Node: Criando novos iteradores16975953
Ref: howto/functional creating-new-iterators16976071
Ref: 538616976071
Node: Calling functions on elements16978759
Ref: howto/functional calling-functions-on-elements16978908
Ref: 538716978908
Node: Selecionando elementos16979720
Ref: howto/functional selecting-elements16979867
Ref: 538816979867
Node: Combinatoric functions16981366
Ref: howto/functional combinatoric-functions16981503
Ref: 538916981503
Node: Agrupando elementos16983836
Ref: howto/functional grouping-elements16983942
Ref: 538a16983942
Node: O módulo functools16985496
Ref: howto/functional the-functools-module16985654
Ref: 538b16985654
Node: O módulo operator16989272
Ref: howto/functional the-operator-module16989346
Ref: 538c16989346
Node: Pequenas funções e as expressões lambda16990157
Ref: howto/functional small-functions-and-the-lambda-expression16990336
Ref: 538d16990336
Node: Histórico de Revisão e Reconhecimentos16993332
Ref: howto/functional revision-history-and-acknowledgements16993507
Ref: 538e16993507
Node: Referências<2>16994391
Ref: howto/functional references16994515
Ref: 538f16994515
Node: Geral16994624
Ref: howto/functional general16994705
Ref: 539016994705
Node: Python-specific16995782
Ref: howto/functional python-specific16995896
Ref: 539116995896
Ref: Python-specific-Footnote-116996370
Ref: Python-specific-Footnote-216996421
Ref: Python-specific-Footnote-316996474
Node: Documentação do Python16996527
Ref: howto/functional python-documentation16996627
Ref: 539216996627
Ref: Documentação do Python-Footnote-116997034
Ref: Documentação do Python-Footnote-216997076
Node: Logging16997118
Ref: howto/logging doc16997244
Ref: 539316997244
Ref: howto/logging id116997244
Ref: 539416997244
Ref: howto/logging logging-howto16997244
Ref: 539516997244
Ref: howto/logging translation-repo16997244
Ref: 539616997244
Ref: howto/logging logging-basic-tutorial16997324
Ref: 123516997324
Node: Tutorial Básico de Logging16997790
Ref: howto/logging basic-logging-tutorial16997899
Ref: 539816997899
Node: Quando usar logging16998717
Ref: howto/logging when-to-use-logging16998827
Ref: 539916998827
Node: Um exemplo simples17003346
Ref: howto/logging a-simple-example17003486
Ref: 539a17003486
Ref: howto/logging howto-minimal-example17003486
Ref: 539b17003486
Node: Logging em um arquivo17004746
Ref: howto/logging logging-to-a-file17004899
Ref: 539c17004899
Node: Logging de variáveis dinâmicas17008315
Ref: howto/logging logging-variable-data17008490
Ref: 539d17008490
Node: Alterar o formato das mensagens exibidas17009362
Ref: howto/logging changing-the-format-of-displayed-messages17009547
Ref: 539e17009547
Node: Exibindo data/hora em mensagens17010547
Ref: howto/logging displaying-the-date-time-in-messages17010716
Ref: 539f17010716
Ref: Exibindo data/hora em mensagens-Footnote-117011772
Node: Próximos Passos17011831
Ref: howto/logging next-steps17011951
Ref: 53a017011951
Ref: Próximos Passos-Footnote-117012890
Node: Tutorial Avançado do Logging17012934
Ref: howto/logging advanced-logging-tutorial17013073
Ref: 53a117013073
Ref: howto/logging logging-advanced-tutorial17013073
Ref: 123617013073
Node: Fluxo de Logging17016893
Ref: howto/logging logging-flow17016997
Ref: 53a217016997
Node: Registradores17017190
Ref: howto/logging loggers17017316
Ref: 53a317017316
Node: Manipuladores17022013
Ref: howto/logging handler-basic17022135
Ref: 53a417022135
Ref: howto/logging handlers17022135
Ref: 53a517022135
Node: Formatadores17024511
Ref: howto/logging formatters17024640
Ref: 53a717024640
Ref: howto/logging logging logging Formatter __init__17025158
Ref: 53a817025158
Node: Configurando Logging17027103
Ref: howto/logging configuring-logging17027272
Ref: 53a917027272
Node: O que acontece se nenhuma configuração é fornecida17034576
Ref: howto/logging what-happens-if-no-configuration-is-provided17034773
Ref: 53aa17034773
Node: Configurando logging para uma biblioteca17036249
Ref: howto/logging configuring-logging-for-a-library17036417
Ref: 53ab17036417
Ref: howto/logging library-config17036417
Ref: 2ebd17036417
Node: Níveis de Logging<2>17039751
Ref: howto/logging logging-levels17039878
Ref: 53ac17039878
Node: Níveis personalizados17042987
Ref: howto/logging custom-levels17043067
Ref: 2e8417043067
Ref: howto/logging id217043067
Ref: 53ad17043067
Node: Handlers úteis17043768
Ref: howto/logging id317043903
Ref: 53ae17043903
Ref: howto/logging useful-handlers17043903
Ref: 53a617043903
Node: Exceções levantadas durante logging17048630
Ref: howto/logging exceptions-raised-during-logging17048786
Ref: 53af17048786
Ref: howto/logging logging-exceptions17048786
Ref: 53b017048786
Node: Usando objetos arbitrários como mensagens17050099
Ref: howto/logging arbitrary-object-messages17050253
Ref: 2e7017050253
Ref: howto/logging using-arbitrary-objects-as-messages17050253
Ref: 53b117050253
Node: Optimização17050913
Ref: howto/logging optimization17051048
Ref: 53b217051048
Node: Outros recursos<2>17054940
Ref: howto/logging other-resources17055024
Ref: 53b317055024
Ref: howto/logging tutorial-ref-links17055024
Ref: 539717055024
Node: Livro de receitas do logging17055398
Ref: howto/logging-cookbook doc17055522
Ref: 53b417055522
Ref: howto/logging-cookbook id117055522
Ref: 53b517055522
Ref: howto/logging-cookbook logging-cookbook17055522
Ref: 123717055522
Ref: howto/logging-cookbook translation-repo17055522
Ref: 53b617055522
Node: Usando logging em vários módulos17057732
Ref: howto/logging-cookbook using-logging-in-multiple-modules17057878
Ref: 53b817057878
Node: Registro de eventos de várias threads17061555
Ref: howto/logging-cookbook logging-from-multiple-threads17061749
Ref: 53b917061749
Node: Múltiplos manipuladores e formatadores17063563
Ref: howto/logging-cookbook multiple-handlers-and-formatters17063755
Ref: 53ba17063755
Node: Logging to multiple destinations17066149
Ref: howto/logging-cookbook logging-to-multiple-destinations17066328
Ref: 53bb17066328
Ref: howto/logging-cookbook multiple-destinations17066328
Ref: 53bc17066328
Node: Custom handling of levels17069497
Ref: howto/logging-cookbook custom-handling-of-levels17069665
Ref: 53bd17069665
Ref: howto/logging-cookbook custom-level-handling17069665
Ref: 53be17069665
Node: Configuration server example17075537
Ref: howto/logging-cookbook configuration-server-example17075705
Ref: 53bf17075705
Node: Dealing with handlers that block17077265
Ref: howto/logging-cookbook blocking-handlers17077461
Ref: 360117077461
Ref: howto/logging-cookbook dealing-with-handlers-that-block17077461
Ref: 53c017077461
Node: Sending and receiving logging events across a network17081655
Ref: howto/logging-cookbook network-logging17081875
Ref: 53c117081875
Ref: howto/logging-cookbook sending-and-receiving-logging-events-across-a-network17081875
Ref: 53c217081875
Node: Running a logging socket listener in production17087410
Ref: howto/logging-cookbook running-a-logging-socket-listener-in-production17087547
Ref: 53c317087547
Ref: Running a logging socket listener in production-Footnote-117091661
Ref: Running a logging socket listener in production-Footnote-217091693
Ref: Running a logging socket listener in production-Footnote-317091765
Ref: Running a logging socket listener in production-Footnote-417091795
Node: Adding contextual information to your logging output17091867
Ref: howto/logging-cookbook adding-contextual-information-to-your-logging-output17092073
Ref: 53c417092073
Ref: howto/logging-cookbook context-info17092073
Ref: 2e7717092073
Node: Using LoggerAdapters to impart contextual information17093172
Ref: howto/logging-cookbook using-loggeradapters-to-impart-contextual-information17093369
Ref: 53c517093369
Node: Using objects other than dicts to pass contextual information17096647
Ref: howto/logging-cookbook using-objects-other-than-dicts-to-pass-contextual-information17096798
Ref: 53c617096798
Node: Using Filters to impart contextual information17097262
Ref: howto/logging-cookbook filters-contextual17097459
Ref: 2e6c17097459
Ref: howto/logging-cookbook using-filters-to-impart-contextual-information17097459
Ref: 53c717097459
Node: Use of contextvars17101274
Ref: howto/logging-cookbook use-of-contextvars17101471
Ref: 53c817101471
Node: Imparting contextual information in handlers17111049
Ref: howto/logging-cookbook imparting-contextual-information-in-handlers17111242
Ref: 53c917111242
Node: Logging to a single file from multiple processes17112189
Ref: howto/logging-cookbook logging-to-a-single-file-from-multiple-processes17112383
Ref: 53ca17112383
Ref: howto/logging-cookbook multiple-processes17112383
Ref: 53cb17112383
Node: Using concurrent futures ProcessPoolExecutor17122661
Ref: howto/logging-cookbook using-concurrent-futures-processpoolexecutor17122850
Ref: 53cc17122850
Node: Deploying Web applications using Gunicorn and uWSGI17123856
Ref: howto/logging-cookbook deploying-web-applications-using-gunicorn-and-uwsgi17124045
Ref: 53cd17124045
Ref: Deploying Web applications using Gunicorn and uWSGI-Footnote-117124705
Ref: Deploying Web applications using Gunicorn and uWSGI-Footnote-217124735
Node: Using file rotation17124788
Ref: howto/logging-cookbook using-file-rotation17124974
Ref: 53ce17124974
Node: Use of alternative formatting styles17126877
Ref: howto/logging-cookbook format-styles17127041
Ref: 53cf17127041
Ref: howto/logging-cookbook use-of-alternative-formatting-styles17127041
Ref: 53d017127041
Node: Personalizando o LogRecord17134194
Ref: howto/logging-cookbook custom-logrecord17134399
Ref: 53d117134399
Ref: howto/logging-cookbook customizing-logrecord17134399
Ref: 53d217134399
Node: Subclassing QueueHandler and QueueListener- a ZeroMQ example17138331
Ref: howto/logging-cookbook subclassing-queuehandler-and-queuelistener-a-zeromq-example17138559
Ref: 53d317138559
Ref: howto/logging-cookbook zeromq-handlers17138559
Ref: 53d417138559
Node: Subclass QueueHandler17138759
Ref: howto/logging-cookbook subclass-queuehandler17138908
Ref: 53d517138908
Node: Subclass QueueListener17140217
Ref: howto/logging-cookbook subclass-queuelistener17140366
Ref: 53d617140366
Node: Subclassing QueueHandler and QueueListener- a pynng example17141111
Ref: howto/logging-cookbook pynng-handlers17141354
Ref: 53d717141354
Ref: howto/logging-cookbook subclassing-queuehandler-and-queuelistener-a-pynng-example17141354
Ref: 53d817141354
Ref: Subclassing QueueHandler and QueueListener- a pynng example-Footnote-117141980
Ref: Subclassing QueueHandler and QueueListener- a pynng example-Footnote-217142020
Node: Subclass QueueListener<2>17142053
Ref: howto/logging-cookbook id317142207
Ref: 53d917142207
Node: Subclass QueueHandler<2>17144183
Ref: howto/logging-cookbook id417144337
Ref: 53da17144337
Node: An example dictionary-based configuration17148051
Ref: howto/logging-cookbook an-example-dictionary-based-configuration17148296
Ref: 53db17148296
Ref: An example dictionary-based configuration-Footnote-117150230
Ref: An example dictionary-based configuration-Footnote-217150316
Node: Using a rotator and namer to customize log rotation processing17150402
Ref: howto/logging-cookbook cookbook-rotator-namer17150628
Ref: 2eca17150628
Ref: howto/logging-cookbook using-a-rotator-and-namer-to-customize-log-rotation-processing17150628
Ref: 53dc17150628
Node: A more elaborate multiprocessing example17152029
Ref: howto/logging-cookbook a-more-elaborate-multiprocessing-example17152267
Ref: 53dd17152267
Node: Inserting a BOM into messages sent to a SysLogHandler17161893
Ref: howto/logging-cookbook inserting-a-bom-into-messages-sent-to-a-sysloghandler17162100
Ref: 53de17162100
Ref: Inserting a BOM into messages sent to a SysLogHandler-Footnote-117164265
Ref: Inserting a BOM into messages sent to a SysLogHandler-Footnote-217164324
Ref: Inserting a BOM into messages sent to a SysLogHandler-Footnote-317164393
Ref: Inserting a BOM into messages sent to a SysLogHandler-Footnote-417164452
Node: Implementing structured logging17164511
Ref: howto/logging-cookbook implementing-structured-logging17164714
Ref: 53df17164714
Node: Customizing handlers with dictConfig17167248
Ref: howto/logging-cookbook custom-handlers17167460
Ref: 53e017167460
Ref: howto/logging-cookbook customizing-handlers-with-dictconfig17167460
Ref: 53e117167460
Node: Using particular formatting styles throughout your application17172656
Ref: howto/logging-cookbook formatting-styles17172872
Ref: 2e6017172872
Ref: howto/logging-cookbook using-particular-formatting-styles-throughout-your-application17172872
Ref: 53e217172872
Node: Using LogRecord factories17174874
Ref: howto/logging-cookbook using-logrecord-factories17175035
Ref: 53e317175035
Node: Using custom message objects17176012
Ref: howto/logging-cookbook using-custom-message-objects17176173
Ref: 53e417176173
Node: Configuring filters with dictConfig17178888
Ref: howto/logging-cookbook configuring-filters-with-dictconfig17179099
Ref: 53e517179099
Ref: howto/logging-cookbook filters-dictconfig17179099
Ref: 53e617179099
Node: Customized exception formatting17182076
Ref: howto/logging-cookbook custom-format-exception17182250
Ref: 53e717182250
Ref: howto/logging-cookbook customized-exception-formatting17182250
Ref: 53e817182250
Node: Speaking logging messages17184315
Ref: howto/logging-cookbook speaking-logging-messages17184514
Ref: 53e917184514
Ref: howto/logging-cookbook spoken-messages17184514
Ref: 53ea17184514
Node: Buffering logging messages and outputting them conditionally17186680
Ref: howto/logging-cookbook buffered-logging17186896
Ref: 53eb17186896
Ref: howto/logging-cookbook buffering-logging-messages-and-outputting-them-conditionally17186896
Ref: 53ec17186896
Node: Sending logging messages to email with buffering17192472
Ref: howto/logging-cookbook buffered-smtp17192711
Ref: 53ed17192711
Ref: howto/logging-cookbook sending-logging-messages-to-email-with-buffering17192711
Ref: 53ee17192711
Node: Formatting times using UTC GMT via configuration17196277
Ref: howto/logging-cookbook formatting-times-using-utc-gmt-via-configuration17196501
Ref: 53ef17196501
Ref: howto/logging-cookbook utc-formatting17196501
Ref: 53f017196501
Node: Using a context manager for selective logging17198402
Ref: howto/logging-cookbook context-manager17198612
Ref: 53f117198612
Ref: howto/logging-cookbook using-a-context-manager-for-selective-logging17198612
Ref: 53f217198612
Node: A CLI application starter template17203192
Ref: howto/logging-cookbook a-cli-application-starter-template17203374
Ref: 53f317203374
Ref: howto/logging-cookbook starter-template17203374
Ref: 53f417203374
Node: A Qt GUI for logging17209355
Ref: howto/logging-cookbook a-qt-gui-for-logging17209530
Ref: 53f517209530
Ref: howto/logging-cookbook qt-gui17209530
Ref: 53f617209530
Ref: A Qt GUI for logging-Footnote-117219833
Ref: A Qt GUI for logging-Footnote-217219860
Ref: A Qt GUI for logging-Footnote-317219902
Node: Logging to syslog with RFC5424 support17219942
Ref: howto/logging-cookbook logging-to-syslog-with-rfc5424-support17220126
Ref: 53f717220126
Ref: Logging to syslog with RFC5424 support-Footnote-117223856
Ref: Logging to syslog with RFC5424 support-Footnote-217223915
Node: How to treat a logger like an output stream17223974
Ref: howto/logging-cookbook how-to-treat-a-logger-like-an-output-stream17224188
Ref: 53f817224188
Node: How to uniformly handle newlines in logging output17228864
Ref: howto/logging-cookbook how-to-uniformly-handle-newlines-in-logging-output17229057
Ref: 53f917229057
Ref: How to uniformly handle newlines in logging output-Footnote-117232587
Node: Patterns to avoid17232649
Ref: howto/logging-cookbook patterns-to-avoid17232817
Ref: 53fa17232817
Node: Opening the same log file multiple times17233369
Ref: howto/logging-cookbook opening-the-same-log-file-multiple-times17233540
Ref: 53fb17233540
Node: Using loggers as attributes in a class or passing them as parameters17235463
Ref: howto/logging-cookbook using-loggers-as-attributes-in-a-class-or-passing-them-as-parameters17235706
Ref: 53fc17235706
Node: Adding handlers other than NullHandler to a logger in a library17236392
Ref: howto/logging-cookbook adding-handlers-other-than-nullhandler-to-a-logger-in-a-library17236620
Ref: 53fd17236620
Node: Creating a lot of loggers17237060
Ref: howto/logging-cookbook creating-a-lot-of-loggers17237211
Ref: 53fe17237211
Node: Outros recursos<3>17237766
Ref: howto/logging-cookbook cookbook-ref-links17237875
Ref: 53b717237875
Ref: howto/logging-cookbook other-resources17237875
Ref: 53ff17237875
Node: Expressões Regulares17238269
Ref: howto/regex doc17238411
Ref: 540017238411
Ref: howto/regex regex-howto17238411
Ref: 248717238411
Ref: howto/regex regular-expression-howto17238411
Ref: 540117238411
Ref: howto/regex translation-repo17238411
Ref: 540217238411
Node: Introdução<16>17238936
Ref: howto/regex introduction17239035
Ref: 540317239035
Node: Padrões simples17240849
Ref: howto/regex simple-patterns17240985
Ref: 540417240985
Node: Correspondendo caracteres17241558
Ref: howto/regex matching-characters17241661
Ref: 540517241661
Node: Repetindo coisas17246922
Ref: howto/regex repeating-things17247025
Ref: 540617247025
Node: Usando expressões regulares17252562
Ref: howto/regex using-regular-expressions17252705
Ref: 540717252705
Node: Compilando expressões regulares17253259
Ref: howto/regex compiling-regular-expressions17253387
Ref: 540817253387
Node: A praga da contrabarra17254736
Ref: howto/regex id117254901
Ref: 540917254901
Ref: howto/regex the-backslash-plague17254901
Ref: 540a17254901
Node: Executando correspondências17258139
Ref: howto/regex performing-matches17258305
Ref: 540b17258305
Node: Funções de nível de módulo<3>17264500
Ref: howto/regex module-level-functions17264673
Ref: 540c17264673
Node: Sinalizadores de compilação17266005
Ref: howto/regex compilation-flags17266141
Ref: 540d17266141
Node: Mais poder dos padrões17274412
Ref: howto/regex more-pattern-power17274558
Ref: 540f17274558
Node: Mais metacaracteres17274946
Ref: howto/regex id217275045
Ref: 541017275045
Ref: howto/regex more-metacharacters17275045
Ref: 540e17275045
Node: Agrupamento17280221
Ref: howto/regex grouping17280359
Ref: 541117280359
Node: Não captura e grupos nomeados17284230
Ref: howto/regex non-capturing-and-named-groups17284370
Ref: 541217284370
Node: Asserções lookahead17289913
Ref: howto/regex lookahead-assertions17290033
Ref: 541317290033
Node: Modificando strings17293909
Ref: howto/regex modifying-strings17294043
Ref: 541417294043
Node: Dividindo as strings17295150
Ref: howto/regex splitting-strings17295260
Ref: 541517295260
Node: Busca e Substituição<2>17297784
Ref: howto/regex search-and-replace17297894
Ref: 541617297894
Node: Problemas comuns17302744
Ref: howto/regex common-problems17302870
Ref: 541717302870
Node: Usando métodos de string17303367
Ref: howto/regex use-string-methods17303473
Ref: 541817303473
Node: match versus search17305371
Ref: howto/regex match-versus-search17305513
Ref: 541917305513
Node: Gulosos versus não-gulosos17307329
Ref: howto/regex greedy-versus-non-greedy17307463
Ref: 541a17307463
Node: Usando re VERBOSE17309521
Ref: howto/regex using-re-verbose17309627
Ref: 541b17309627
Node: Comentários<2>17311369
Ref: howto/regex feedback17311467
Ref: 541c17311467
Node: Programação de Soquetes17312320
Ref: howto/sockets doc17312458
Ref: 541d17312458
Ref: howto/sockets socket-howto17312458
Ref: 365317312458
Ref: howto/sockets socket-programming-howto17312458
Ref: 541e17312458
Ref: howto/sockets translation-repo17312458
Ref: 541f17312458
Node: Soquetes17313083
Ref: howto/sockets sockets17313180
Ref: 542017313180
Node: História17314522
Ref: howto/sockets history17314576
Ref: 542117314576
Node: Criando um Soquete17315194
Ref: howto/sockets creating-a-socket17315317
Ref: 542217315317
Node: IPC17319094
Ref: howto/sockets ipc17319152
Ref: 542317319152
Node: Usando um Soquete17319685
Ref: howto/sockets using-a-socket17319813
Ref: 542417319813
Node: Dados Binários17326131
Ref: howto/sockets binary-data17326200
Ref: 542517326200
Ref: Dados Binários-Footnote-117327494
Node: Desconectando17327554
Ref: howto/sockets disconnecting17327689
Ref: 542617327689
Node: Quando o Soquete Morre17329171
Ref: howto/sockets when-sockets-die17329243
Ref: 542717329243
Node: Soquetes não-bloqueantes17330134
Ref: howto/sockets non-blocking-sockets17330243
Ref: 542817330243
Node: Técnicas de ordenação17334106
Ref: howto/sorting doc17334233
Ref: 542917334233
Ref: howto/sorting sorting-techniques17334233
Ref: 542a17334233
Ref: howto/sorting sortinghowto17334233
Ref: 231417334233
Ref: howto/sorting translation-repo17334233
Ref: 542b17334233
Node: Básico de ordenação17334989
Ref: howto/sorting sorting-basics17335096
Ref: 542c17335096
Node: Funções chave17336020
Ref: howto/sorting key-functions17336193
Ref: 542d17336193
Node: Operator Module Functions and Partial Function Evaluation17338189
Ref: howto/sorting operator-module-functions-and-partial-function-evaluation17338364
Ref: 542e17338364
Ref: Operator Module Functions and Partial Function Evaluation-Footnote-117340243
Node: Ascendente e descendente17340287
Ref: howto/sorting ascending-and-descending17340499
Ref: 542f17340499
Node: Estabilidade de Ordenação e Ordenações Complexas17341098
Ref: howto/sorting sort-stability-and-complex-sorts17341277
Ref: 543017341277
Ref: Estabilidade de Ordenação e Ordenações Complexas-Footnote-117343110
Ref: Estabilidade de Ordenação e Ordenações Complexas-Footnote-217343176
Node: Decorate-Sort-Undecorate17343222
Ref: howto/sorting decorate-sort-undecorate17343402
Ref: 543117343402
Ref: Decorate-Sort-Undecorate-Footnote-117345256
Node: Funções de comparação17345316
Ref: howto/sorting comparison-functions17345473
Ref: 543217345473
Ref: Funções de comparação-Footnote-117346450
Node: Curiosidades e conclusões<2>17346537
Ref: howto/sorting odds-and-ends17346691
Ref: 543317346691
Ref: Curiosidades e conclusões<2>-Footnote-117349100
Node: Ordenações parciais17349142
Ref: howto/sorting partial-sorts17349262
Ref: 543417349262
Node: Unicode<3>17350359
Ref: howto/unicode doc17350516
Ref: 543517350516
Ref: howto/unicode id117350516
Ref: 543617350516
Ref: howto/unicode translation-repo17350516
Ref: 543717350516
Ref: howto/unicode unicode-howto17350516
Ref: 12e717350516
Node: Introdução ao Unicode17350921
Ref: howto/unicode introduction-to-unicode17351027
Ref: 543817351027
Node: Definições17351167
Ref: howto/unicode definitions17351262
Ref: 543917351262
Ref: Definições-Footnote-117354453
Node: Codificações17354510
Ref: howto/unicode encodings17354629
Ref: 543a17354629
Node: Referências<3>17358427
Ref: howto/unicode references17358525
Ref: 543b17358525
Ref: Referências<3>-Footnote-117359403
Ref: Referências<3>-Footnote-217359435
Ref: Referências<3>-Footnote-317359476
Ref: Referências<3>-Footnote-417359528
Ref: Referências<3>-Footnote-517359575
Ref: Referências<3>-Footnote-617359749
Ref: Referências<3>-Footnote-717359806
Node: Suporte a Unicode no Python17359850
Ref: howto/unicode python-s-unicode-support17359997
Ref: 543c17359997
Node: O Tipo String17360378
Ref: howto/unicode the-string-type17360486
Ref: 543d17360486
Node: Convertendo para Bytes17363592
Ref: howto/unicode converting-to-bytes17363747
Ref: 543e17363747
Node: Unicode Literals in Python Source Code17365597
Ref: howto/unicode unicode-literals-in-python-source-code17365759
Ref: 543f17365759
Ref: Unicode Literals in Python Source Code-Footnote-117367864
Node: Propriedades Unicode17367906
Ref: howto/unicode id217368064
Ref: 544017368064
Ref: howto/unicode unicode-properties17368064
Ref: 235917368064
Ref: Propriedades Unicode-Footnote-117369841
Node: Comparando Strings17369911
Ref: howto/unicode comparing-strings17370060
Ref: 544117370060
Node: Expressões Regulares Unicode17372916
Ref: howto/unicode unicode-regular-expressions17373060
Ref: 544217373060
Node: Referências<4>17374202
Ref: howto/unicode id317374319
Ref: 544317374319
Ref: Referências<4>-Footnote-117375114
Ref: Referências<4>-Footnote-217375210
Ref: Referências<4>-Footnote-317375262
Node: Reading and Writing Unicode Data17375331
Ref: howto/unicode reading-and-writing-unicode-data17375474
Ref: 544417375474
Node: Nomes de arquivos Unicode17379194
Ref: howto/unicode unicode-filenames17379336
Ref: 544517379336
Node: Tips for Writing Unicode-aware Programs17381815
Ref: howto/unicode tips-for-writing-unicode-aware-programs17381981
Ref: 544617381981
Node: Converting Between File Encodings17383344
Ref: howto/unicode converting-between-file-encodings17383490
Ref: 544717383490
Node: Files in an Unknown Encoding17384259
Ref: howto/unicode files-in-an-unknown-encoding17384405
Ref: 544817384405
Node: Referências<5>17385306
Ref: howto/unicode id417385438
Ref: 544917385438
Ref: Referências<5>-Footnote-117386047
Ref: Referências<5>-Footnote-217386119
Ref: Referências<5>-Footnote-317386224
Node: Reconhecimentos<10>17386293
Ref: howto/unicode acknowledgements17386400
Ref: 544a17386400
Node: Como buscar recursos da Internet usando o pacote urllib17386922
Ref: howto/urllib2 doc17387092
Ref: 544b17387092
Ref: howto/urllib2 howto-fetch-internet-resources-using-the-urllib-package17387092
Ref: 544c17387092
Ref: howto/urllib2 translation-repo17387092
Ref: 544d17387092
Ref: howto/urllib2 urllib-howto17387092
Ref: 3c3e17387092
Ref: Como buscar recursos da Internet usando o pacote urllib-Footnote-117387524
Node: Introdução<17>17387563
Ref: howto/urllib2 introduction17387694
Ref: 544e17387694
Ref: Introdução<17>-Footnote-117389437
Ref: Introdução<17>-Footnote-217389554
Node: Acessando URLs17389613
Ref: howto/urllib2 fetching-urls17389780
Ref: 544f17389780
Node: Dados17392206
Ref: howto/urllib2 data17392282
Ref: 545017392282
Ref: Dados-Footnote-117395122
Node: Cabeçalhos17395191
Ref: howto/urllib2 headers17395267
Ref: 545117395267
Ref: Cabeçalhos-Footnote-117396856
Ref: Cabeçalhos-Footnote-217396885
Ref: Cabeçalhos-Footnote-317397120
Ref: Cabeçalhos-Footnote-417397240
Node: Tratamento de exceções<3>17397378
Ref: howto/urllib2 handling-exceptions17397542
Ref: 545417397542
Node: URLError17398074
Ref: howto/urllib2 urlerror17398164
Ref: 545517398164
Node: HTTPError17398739
Ref: howto/urllib2 httperror17398847
Ref: 545617398847
Ref: HTTPError-Footnote-117399815
Node: Códigos de erro17399874
Ref: howto/urllib2 error-codes17399936
Ref: 545717399936
Ref: Códigos de erro-Footnote-117402170
Node: Resumindo17402229
Ref: howto/urllib2 wrapping-it-up17402320
Ref: 545817402320
Node: Número 117402546
Ref: howto/urllib2 number-117402619
Ref: 545917402619
Node: Número 217403249
Ref: howto/urllib2 number-217403322
Ref: 545a17403322
Node: info e geturl17403847
Ref: howto/urllib2 info-and-geturl17404019
Ref: 545317404019
Node: Abridores e tratadores17405039
Ref: howto/urllib2 openers-and-handlers17405206
Ref: 545b17405206
Node: Autenticação básica17406999
Ref: howto/urllib2 basic-authentication17407160
Ref: 545c17407160
Ref: Autenticação básica-Footnote-117410862
Node: Proxies17410979
Ref: howto/urllib2 proxies17411135
Ref: 545d17411135
Ref: Proxies-Footnote-117412280
Ref: Proxies-Footnote-217412595
Node: Socekts e camadas17412778
Ref: howto/urllib2 sockets-and-layers17412928
Ref: 545e17412928
Node: Notas de rodapé17414041
Ref: howto/urllib2 footnotes17414175
Ref: 545f17414175
Node: Uma introdução ao módulo ipaddress17414277
Ref: howto/ipaddress doc17414484
Ref: 546017414484
Ref: howto/ipaddress an-introduction-to-the-ipaddress-module17414484
Ref: 546117414484
Ref: howto/ipaddress ipaddress-howto17414484
Ref: 3e7f17414484
Ref: howto/ipaddress translation-repo17414484
Ref: 546217414484
Node: Criando objetos de Endereço/Rede/Interface17415300
Ref: howto/ipaddress creating-address-network-interface-objects17415472
Ref: 546317415472
Node: Uma observação sobre versões do IP17415934
Ref: howto/ipaddress a-note-on-ip-versions17416081
Ref: 546417416081
Node: Endereços IP de host17416932
Ref: howto/ipaddress ip-host-addresses17417103
Ref: 546517417103
Node: Definindo redes17418379
Ref: howto/ipaddress defining-networks17418531
Ref: 546617418531
Node: Interfaces do host17421033
Ref: howto/ipaddress host-interfaces17421155
Ref: 546717421155
Node: Inspecionando objetos endereço/rede/interface17422220
Ref: howto/ipaddress inspecting-address-network-interface-objects17422431
Ref: 546817422431
Node: Redes como listas de Addresses17424856
Ref: howto/ipaddress networks-as-lists-of-addresses17425040
Ref: 546917425040
Node: Comparações<4>17425853
Ref: howto/ipaddress comparisons17426031
Ref: 546a17426031
Node: Usando endereços IP com outros módulos17426405
Ref: howto/ipaddress using-ip-addresses-with-other-modules17426613
Ref: 546b17426613
Node: Obtendo mais detalhes quando a criação da instância falha17427056
Ref: howto/ipaddress getting-more-detail-when-instance-creation-fails17427239
Ref: 546c17427239
Node: Instrumentando o CPython com DTrace e SystemTap17429389
Ref: howto/instrumentation doc17429586
Ref: 546d17429586
Ref: howto/instrumentation instrumentation17429586
Ref: c8717429586
Ref: howto/instrumentation instrumenting-cpython-with-dtrace-and-systemtap17429586
Ref: 546e17429586
Ref: howto/instrumentation translation-repo17429586
Ref: 546f17429586
Node: Habilitando os marcadores estáticos17430911
Ref: howto/instrumentation enabling-the-static-markers17431068
Ref: 547017431068
Node: Sondas estáticas do DTtrace17435443
Ref: howto/instrumentation static-dtrace-probes17435643
Ref: 547117435643
Node: Marcadores estáticos do SystemTap17438136
Ref: howto/instrumentation static-systemtap-markers17438334
Ref: 547217438334
Node: Marcadores estáticos disponíveis17440492
Ref: howto/instrumentation available-static-markers17440682
Ref: 547317440682
Ref: howto/instrumentation static-markers17440682
Ref: bd017440682
Node: Tapsets de SystemTap17443396
Ref: howto/instrumentation systemtap-tapsets17443564
Ref: 547417443564
Node: Exemplos<39>17445291
Ref: howto/instrumentation examples17445416
Ref: 547517445416
Node: Suporte do Python ao perfilador perf do Linux17446745
Ref: howto/perf_profiling doc17446936
Ref: 183117446936
Ref: howto/perf_profiling perf-profiling17446936
Ref: 18f17446936
Ref: howto/perf_profiling python-support-for-the-linux-perf-profiler17446936
Ref: 547617446936
Ref: howto/perf_profiling translation-repo17446936
Ref: 547717446936
Ref: Suporte do Python ao perfilador perf do Linux-Footnote-117455026
Node: Como habilitar o suporte a perfilação com perf17455063
Ref: howto/perf_profiling how-to-enable-perf-profiling-support17455235
Ref: 547817455235
Node: Como obter os melhores resultados17456409
Ref: howto/perf_profiling how-to-obtain-the-best-results17456628
Ref: 547917456628
Node: Como trabalhar sem ponteiros de quadro17457530
Ref: howto/perf_profiling how-to-work-without-frame-pointers17457692
Ref: 547a17457692
Node: Boas práticas para anotações17461819
Ref: howto/annotations doc17461993
Ref: 547b17461993
Ref: howto/annotations annotations-best-practices17461993
Ref: 547c17461993
Ref: howto/annotations annotations-howto17461993
Ref: 7da17461993
Ref: howto/annotations translation-repo17461993
Ref: 547d17461993
Node: Acessando o dicionário de anotações de um objeto no Python 3 10 e nas versões mais recentes17463581
Ref: howto/annotations accessing-the-annotations-dict-of-an-object-in-python-3-10-and-newer17463846
Ref: 547e17463846
Node: Acessando o dicionário de anotações de um objeto no Python 3 9 e nas versões mais antigas17465666
Ref: howto/annotations accessing-the-annotations-dict-of-an-object-in-python-3-9-and-older17466000
Ref: 547f17466000
Node: Recuperando manualmente anotações transformadas em strings17468679
Ref: howto/annotations manually-un-stringizing-stringized-annotations17468984
Ref: 548017468984
Ref: Recuperando manualmente anotações transformadas em strings-Footnote-117471414
Node: Melhores práticas para __annotations__ em qualquer versão Python17471456
Ref: howto/annotations best-practices-for-annotations-in-any-python-version17471701
Ref: 548117471701
Node: Peculiaridades de __annotations__17472430
Ref: howto/annotations annotations-quirks17472606
Ref: 548217472606
Node: Isolando módulos de extensão17474502
Ref: howto/isolating-extensions doc17474667
Ref: 548317474667
Ref: howto/isolating-extensions isolating-extension-modules17474667
Ref: 548417474667
Ref: howto/isolating-extensions isolating-extensions-howto17474667
Ref: 4b4d17474667
Ref: howto/isolating-extensions translation-repo17474667
Ref: 548517474667
Node: Quem deveria ler isto17475499
Ref: howto/isolating-extensions who-should-read-this17475607
Ref: 548617475607
Node: Contexto<2>17475863
Ref: howto/isolating-extensions background17476035
Ref: 548717476035
Node: Entra o estado por módulo17477888
Ref: howto/isolating-extensions enter-per-module-state17477998
Ref: 548817477998
Node: Objetos de módulo isolados17479349
Ref: howto/isolating-extensions isolated-module-objects17479501
Ref: 548917479501
Node: Casos particulares surpreendentes17480670
Ref: howto/isolating-extensions surprising-edge-cases17480787
Ref: 548b17480787
Node: Fazendo módulos seguros com múltiplos interpretadores17481928
Ref: howto/isolating-extensions making-modules-safe-with-multiple-interpreters17482095
Ref: 548c17482095
Node: Gerenciando estado global17482490
Ref: howto/isolating-extensions managing-global-state17482646
Ref: 548a17482646
Node: Gerenciando estado por módulo17483705
Ref: howto/isolating-extensions managing-per-module-state17483937
Ref: 548d17483937
Ref: Gerenciando estado por módulo-Footnote-117485852
Node: Exclusão voluntária limitando a um objeto de módulo por processo17485926
Ref: howto/isolating-extensions isolating-extensions-optout17486182
Ref: 50c217486182
Ref: howto/isolating-extensions opt-out-limiting-to-one-module-object-per-process17486182
Ref: 548e17486182
Node: Acesso ao estado de módulo a partir de funções17487685
Ref: howto/isolating-extensions module-state-access-from-functions17487902
Ref: 548f17487902
Node: Tipos no heap<2>17488750
Ref: howto/isolating-extensions heap-types17488925
Ref: 549017488925
Node: Mudando tipos estáticos para tipos no heap17490859
Ref: howto/isolating-extensions changing-static-types-to-heap-types17490987
Ref: 549117490987
Node: Definindo tipos no heap17492122
Ref: howto/isolating-extensions defining-heap-types17492292
Ref: 549217492292
Node: Protocolo de recolhimento de lixo17493010
Ref: howto/isolating-extensions garbage-collection-protocol17493186
Ref: 549317493186
Node: tp_traverse no Python 3 8 e anteriores17494410
Ref: howto/isolating-extensions tp-traverse-in-python-3-8-and-lower17494559
Ref: 549417494559
Node: Delegando a função tp_traverse17495385
Ref: howto/isolating-extensions delegating-tp-traverse17495563
Ref: 549517495563
Node: Definindo tp_dealloc17496427
Ref: howto/isolating-extensions defining-tp-dealloc17496592
Ref: 549617496592
Node: Evitar substituir tp_free17497391
Ref: howto/isolating-extensions not-overriding-tp-free17497543
Ref: 549717497543
Node: Evitar PyObject_New17497748
Ref: howto/isolating-extensions avoiding-pyobject-new17497871
Ref: 549817497871
Node: Acessando o estado do módulo a partir de classes17498715
Ref: howto/isolating-extensions module-state-access-from-classes17498926
Ref: 549917498926
Node: Acesso ao estado do módulo a partir de métodos regulares17499551
Ref: howto/isolating-extensions module-state-access-from-regular-methods17499800
Ref: 549a17499800
Node: Acesso ao estado do módulo a partir de métodos slot getters e setters17502492
Ref: howto/isolating-extensions module-state-access-from-slot-methods-getters-and-setters17502726
Ref: 549b17502726
Node: Tempo de vida do estado do módulo17504306
Ref: howto/isolating-extensions lifetime-of-the-module-state17504473
Ref: 549c17504473
Node: Problemas em aberto17505131
Ref: howto/isolating-extensions open-issues17505242
Ref: 549d17505242
Ref: Problemas em aberto-Footnote-117505620
Node: Escopo por classe17505675
Ref: howto/isolating-extensions per-class-scope17505797
Ref: 549e17505797
Node: Conversão sem perdas para tipos no heap17506119
Ref: howto/isolating-extensions lossless-conversion-to-heap-types17506241
Ref: 549f17506241
Node: Descritor de arquivo de temporizador17506520
Ref: howto/timerfd doc17506702
Ref: 54a017506702
Ref: howto/timerfd timer-file-descriptor-howto17506702
Ref: 54a117506702
Ref: howto/timerfd timerfd-howto17506702
Ref: 54a217506702
Ref: howto/timerfd translation-repo17506702
Ref: 54a317506702
Node: Exemplos<40>17506937
Ref: howto/timerfd examples17507022
Ref: 54a417507022
Node: A Ordem de Resolução de Métodos do Python 2 317516454
Ref: howto/mro doc17516656
Ref: 54a517516656
Ref: howto/mro python-2-3-mro17516656
Ref: 14f217516656
Ref: howto/mro the-python-2-3-method-resolution-order17516656
Ref: 54a617516656
Ref: howto/mro translation-repo17516656
Ref: 54a717516656
Ref: A Ordem de Resolução de Métodos do Python 2 3-Footnote-117518368
Node: O início17518415
Ref: howto/mro the-beginning17518555
Ref: 54a817518555
Ref: O início-Footnote-117523360
Ref: O início-Footnote-217523498
Node: A ordem de resolução de métodos C317523632
Ref: howto/mro the-c3-method-resolution-order17523793
Ref: 54a917523793
Node: Exemplos<41>17526121
Ref: howto/mro examples17526312
Ref: 54aa17526312
Node: Ordens de resolução de métodos ruins17531888
Ref: howto/mro bad-method-resolution-orders17532047
Ref: 54ab17532047
Ref: Ordens de resolução de métodos ruins-Footnote-117538548
Node: O fim17538746
Ref: howto/mro the-end17538904
Ref: 54ac17538904
Node: Recursos<3>17542221
Ref: howto/mro resources17542331
Ref: 54ad17542331
Node: Suporte experimental do Python para threads livres17542364
Ref: howto/free-threading-python doc17542579
Ref: 54ae17542579
Ref: howto/free-threading-python freethreading-python-howto17542579
Ref: 54af17542579
Ref: howto/free-threading-python python-experimental-support-for-free-threading17542579
Ref: 54b017542579
Ref: howto/free-threading-python translation-repo17542579
Ref: 54b117542579
Ref: Suporte experimental do Python para threads livres-Footnote-117544096
Node: Instalação17544138
Ref: howto/free-threading-python installation17544288
Ref: 54b317544288
Ref: Instalação-Footnote-117544973
Node: Identificando um Python com threads livres17545037
Ref: howto/free-threading-python identifying-free-threaded-python17545256
Ref: 54b417545256
Node: A trava global do interpretador no Python com threads livres17546021
Ref: howto/free-threading-python the-global-interpreter-lock-in-free-threaded-python17546250
Ref: 54b517546250
Node: Segurança nas threads17547095
Ref: howto/free-threading-python thread-safety17547305
Ref: 54b617547305
Node: Limitações conhecidas17548197
Ref: howto/free-threading-python known-limitations17548338
Ref: 54b717548338
Node: Imortalização17548624
Ref: howto/free-threading-python immortalization17548725
Ref: 54b817548725
Node: Objetos quadro<2>17549928
Ref: howto/free-threading-python frame-objects17550051
Ref: 54b917550051
Node: Iteradores<3>17550531
Ref: howto/free-threading-python iterators17550667
Ref: 54ba17550667
Node: Desempenho com thread única17550887
Ref: howto/free-threading-python single-threaded-performance17550997
Ref: 54bb17550997
Ref: Desempenho com thread única-Footnote-117551883
Ref: Desempenho com thread única-Footnote-217551929
Node: Suporte a extensões da API C para threads livres17551971
Ref: howto/free-threading-extensions doc17552129
Ref: 54bc17552129
Ref: howto/free-threading-extensions c-api-extension-support-for-free-threading17552129
Ref: 54bd17552129
Ref: howto/free-threading-extensions freethreading-extensions-howto17552129
Ref: 54b217552129
Ref: howto/free-threading-extensions translation-repo17552129
Ref: 54be17552129
Node: Identificando a construção com threads livres em C17552877
Ref: howto/free-threading-extensions identifying-the-free-threaded-build-in-c17553050
Ref: 54bf17553050
Node: Inicialização de módulo17553857
Ref: howto/free-threading-extensions module-initialization17554063
Ref: 54c017554063
Node: Inicialização multifásica<2>17554631
Ref: howto/free-threading-extensions multi-phase-initialization17554761
Ref: 54c117554761
Node: Inicialização monofásica17555470
Ref: howto/free-threading-extensions single-phase-initialization17555600
Ref: 54c217555600
Node: Diretrizes gerais de API17556473
Ref: howto/free-threading-extensions general-api-guidelines17556651
Ref: 54c317556651
Node: Segurança de threads de contêineres17557613
Ref: howto/free-threading-extensions container-thread-safety17557711
Ref: 54c517557711
Node: PyDict_Next17558078
Ref: howto/free-threading-extensions id117558163
Ref: 54c617558163
Ref: howto/free-threading-extensions pydict-next17558163
Ref: 54c717558163
Node: Referências emprestadas17558659
Ref: howto/free-threading-extensions borrowed-references17558841
Ref: 54c817558841
Ref: howto/free-threading-extensions id217558905
Ref: 54c417558905
Ref: Referências emprestadas-Footnote-117561893
Node: APIs de alocação de memória17561945
Ref: howto/free-threading-extensions free-threaded-memory-allocation17562137
Ref: 521817562137
Ref: howto/free-threading-extensions memory-allocation-apis17562137
Ref: 54c917562137
Node: APIs da GIL e de estado de threads17562935
Ref: howto/free-threading-extensions thread-state-and-gil-apis17563145
Ref: 54ca17563145
Node: Protegendo o estado interno das extensões17564195
Ref: howto/free-threading-extensions protecting-internal-extension-state17564436
Ref: 54cb17564436
Ref: Protegendo o estado interno das extensões-Footnote-117565289
Node: Construindo extensões para a construção com threads livres17565355
Ref: howto/free-threading-extensions building-extensions-for-the-free-threaded-build17565553
Ref: 54cc17565553
Ref: Construindo extensões para a construção com threads livres-Footnote-117566256
Ref: Construindo extensões para a construção com threads livres-Footnote-217566298
Ref: Construindo extensões para a construção com threads livres-Footnote-317566343
Node: API C limitada e ABI estável17566406
Ref: howto/free-threading-extensions limited-c-api-and-stable-abi17566553
Ref: 54cd17566553
Ref: API C limitada e ABI estável-Footnote-117567320
Node: Windows<82>17567381
Ref: howto/free-threading-extensions windows17567528
Ref: 54ce17567528
Ref: Windows<82>-Footnote-117569282
Node: Perguntas Frequentes Sobre Python17569335
Ref: faq/index doc17569456
Ref: 54cf17569456
Ref: faq/index faq-index17569456
Ref: 1e8d17569456
Ref: faq/index python-frequently-asked-questions17569456
Ref: 54d017569456
Ref: faq/index translation-repo17569456
Ref: 54d117569456
Node: Python Geral17569828
Ref: faq/general doc17569942
Ref: 54d217569942
Ref: faq/general general-python-faq17569942
Ref: 54d317569942
Node: Informações gerais17570039
Ref: faq/general general-information17570137
Ref: 54d417570137
Node: O que é Python?17571319
Ref: faq/general what-is-python17571439
Ref: 54d517571439
Ref: O que é Python?-Footnote-117572561
Node: O que é a Python Software Foundation?17572613
Ref: faq/general what-is-the-python-software-foundation17572806
Ref: 54d617572806
Ref: O que é a Python Software Foundation?-Footnote-117573504
Node: Existem restrições de direitos autorais sobre o uso de Python?17573550
Ref: faq/general are-there-copyright-restrictions-on-the-use-of-python17573779
Ref: 54d717573779
Ref: Existem restrições de direitos autorais sobre o uso de Python?-Footnote-117574792
Ref: Existem restrições de direitos autorais sobre o uso de Python?-Footnote-217574839
Node: Em primeiro lugar por que o Python foi desenvolvido?17574886
Ref: faq/general why-was-python-created-in-the-first-place17575108
Ref: 54d817575108
Node: Para o que Python é excelente?17577646
Ref: faq/general what-is-python-good-for17577865
Ref: 54d917577865
Ref: Para o que Python é excelente?-Footnote-117578822
Node: Como funciona o esquema de numeração de versões do Python?17578847
Ref: faq/general faq-version-numbering-scheme17579067
Ref: 54da17579067
Ref: faq/general how-does-the-python-version-numbering-scheme-work17579067
Ref: 54db17579067
Ref: Como funciona o esquema de numeração de versões do Python?-Footnote-117581515
Ref: Como funciona o esquema de numeração de versões do Python?-Footnote-217581589
Node: Como faço para obter uma cópia dos fonte do Python?17581631
Ref: faq/general how-do-i-obtain-a-copy-of-the-python-source17581869
Ref: 54dc17581869
Ref: Como faço para obter uma cópia dos fonte do Python?-Footnote-117582759
Node: Como faço para obter a documentação do Python?17582802
Ref: faq/general how-do-i-get-documentation-on-python17583041
Ref: 54dd17583041
Ref: Como faço para obter a documentação do Python?-Footnote-117583655
Node: Eu nunca programei antes Existe um tutorial básico do Python?17583691
Ref: faq/general i-ve-never-programmed-before-is-there-a-python-tutorial17583949
Ref: 54de17583949
Ref: Eu nunca programei antes Existe um tutorial básico do Python?-Footnote-117584405
Node: Existe um grupo de discussão ou lista de discussão dedicada ao Python?17584457
Ref: faq/general is-there-a-newsgroup-or-mailing-list-devoted-to-python17584724
Ref: 54df17584724
Ref: Existe um grupo de discussão ou lista de discussão dedicada ao Python?-Footnote-117585764
Ref: Existe um grupo de discussão ou lista de discussão dedicada ao Python?-Footnote-217585825
Node: Como faço para obter uma versão de teste beta do Python?17585906
Ref: faq/general how-do-i-get-a-beta-test-version-of-python17586176
Ref: 54e017586176
Ref: Como faço para obter uma versão de teste beta do Python?-Footnote-117586794
Node: Como eu envio um relatório de erros e correções para o Python?17586831
Ref: faq/general how-do-i-submit-bug-reports-and-patches-for-python17587114
Ref: 54e117587114
Ref: Como eu envio um relatório de erros e correções para o Python?-Footnote-117587528
Node: Existem alguns artigos publicados sobre o Python para que eu possa fazer referência?17587565
Ref: faq/general are-there-any-published-articles-about-python-that-i-can-reference17587827
Ref: 54e217587827
Ref: Existem alguns artigos publicados sobre o Python para que eu possa fazer referência?-Footnote-117588446
Node: Existem alguns livros sobre o Python?17588482
Ref: faq/general are-there-any-books-on-python17588723
Ref: 54e317588723
Node: Onde está armazenado o site www python org?17589179
Ref: faq/general where-in-the-world-is-www-python-org-located17589357
Ref: 54e417589357
Ref: Onde está armazenado o site www python org?-Footnote-117589648
Node: Por que o nome Python?17589677
Ref: faq/general why-is-it-called-python17589878
Ref: 54e517589878
Ref: Por que o nome Python?-Footnote-117590315
Node: Eu tenho que gostar de “Monty Python’s Flying Circus”?17590366
Ref: faq/general do-i-have-to-like-monty-python-s-flying-circus17590514
Ref: 54e617590514
Node: Python no mundo real17590678
Ref: faq/general python-in-the-real-world17590776
Ref: 54e717590776
Node: Quão estável é o Python?17591190
Ref: faq/general how-stable-is-python17591313
Ref: 54e817591313
Ref: Quão estável é o Python?-Footnote-117592426
Ref: Quão estável é o Python?-Footnote-217592468
Ref: Quão estável é o Python?-Footnote-317592510
Node: Quantas pessoas usam o Python?17592552
Ref: faq/general how-many-people-are-using-python17592735
Ref: 54e917592735
Node: Existe algum projeto significativo feito em Python?17593360
Ref: faq/general have-any-significant-projects-been-done-in-python17593587
Ref: 54ea17593587
Ref: Existe algum projeto significativo feito em Python?-Footnote-117594365
Ref: Existe algum projeto significativo feito em Python?-Footnote-217594417
Ref: Existe algum projeto significativo feito em Python?-Footnote-317594446
Ref: Existe algum projeto significativo feito em Python?-Footnote-417594475
Node: Quais são os novos desenvolvimentos esperados para o Python no futuro?17594506
Ref: faq/general what-new-developments-are-expected-for-python-in-the-future17594761
Ref: 54eb17594761
Ref: Quais são os novos desenvolvimentos esperados para o Python no futuro?-Footnote-117595439
Node: É razoável propor mudanças incompatíveis com o Python?17595509
Ref: faq/general is-it-reasonable-to-propose-incompatible-changes-to-python17595793
Ref: 54ec17595793
Ref: É razoável propor mudanças incompatíveis com o Python?-Footnote-117596679
Node: O Python é uma boa linguagem para quem está começando na programação agora?17596721
Ref: faq/general is-python-a-good-language-for-beginning-programmers17596925
Ref: 54ed17596925
Ref: O Python é uma boa linguagem para quem está começando na programação agora?-Footnote-117601274
Ref: O Python é uma boa linguagem para quem está começando na programação agora?-Footnote-217601325
Node: FAQ sobre programação17601387
Ref: faq/programming doc17601539
Ref: 54ee17601539
Ref: faq/programming programming-faq17601539
Ref: 54ef17601539
Ref: faq/programming translation-repo17601539
Ref: 54f017601539
Node: Perguntas gerais17601797
Ref: faq/programming general-questions17601902
Ref: 54f117601902
Node: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?17602468
Ref: faq/programming is-there-a-source-code-level-debugger-with-breakpoints-single-stepping-etc17602735
Ref: 54f217602735
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-117604443
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-217604515
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-317604559
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-417604612
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-517604658
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-617604707
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-717604746
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-817604776
Ref: Existe um depurador a nível de código-fonte que possua pontos de interrupção breakpoints single-stepping etc ?-Footnote-917604833
Node: Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?17604876
Ref: faq/programming are-there-tools-to-help-find-bugs-or-perform-static-analysis17605223
Ref: 54f317605223
Ref: Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?-Footnote-117605693
Ref: Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?-Footnote-217605747
Ref: Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?-Footnote-317605789
Ref: Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?-Footnote-417605820
Ref: Existem ferramentas para ajudar a encontrar bugs ou fazer análise estática de desempenho?-Footnote-517605852
Node: Como posso criar um binário independente a partir de um script Python?17605893
Ref: faq/programming faq-create-standalone-binary17606218
Ref: 54f417606218
Ref: faq/programming how-can-i-create-a-stand-alone-binary-from-a-python-script17606218
Ref: 54f517606218
Ref: Como posso criar um binário independente a partir de um script Python?-Footnote-117608128
Ref: Como posso criar um binário independente a partir de um script Python?-Footnote-217608193
Ref: Como posso criar um binário independente a partir de um script Python?-Footnote-317608221
Ref: Como posso criar um binário independente a partir de um script Python?-Footnote-417608254
Ref: Como posso criar um binário independente a partir de um script Python?-Footnote-517608307
Ref: Como posso criar um binário independente a partir de um script Python?-Footnote-617608359
Ref: Como posso criar um binário independente a partir de um script Python?-Footnote-717608408
Node: Existem padrões para a codificação ou um guia de estilo utilizado pela comunidade Python?17608440
Ref: faq/programming are-there-coding-standards-or-a-style-guide-for-python-programs17608665
Ref: 54f617608665
Ref: Existem padrões para a codificação ou um guia de estilo utilizado pela comunidade Python?-Footnote-117609048
Node: Núcleo da linguagem17609090
Ref: faq/programming core-language17609222
Ref: 54f717609222
Node: Porque recebo o erro UnboundLocalError quando a variável possui um valor associado?17610755
Ref: faq/programming faq-unboundlocalerror17610969
Ref: 216c17610969
Ref: faq/programming why-am-i-getting-an-unboundlocalerror-when-the-variable-has-a-value17610969
Ref: 54f817610969
Node: Quais são as regras para variáveis locais e globais em Python?17612998
Ref: faq/programming what-are-the-rules-for-local-and-global-variables-in-python17613312
Ref: 54f917613312
Node: Por que os lambdas definidos em um laço com valores diferentes retornam o mesmo resultado?17614341
Ref: faq/programming why-do-lambdas-defined-in-a-loop-with-different-values-all-return-the-same-result17614622
Ref: 54fa17614622
Node: Como definir variáveis globais dentro de módulos?17616650
Ref: faq/programming how-do-i-share-global-variables-across-modules17616953
Ref: 54fb17616953
Node: Quais são as “melhores práticas” quando fazemos uso da importação de módulos?17617824
Ref: faq/programming what-are-the-best-practices-for-using-import-in-a-module17618097
Ref: 54fc17618097
Node: Por que os valores padrão são compartilhados entre objetos?17621475
Ref: faq/programming why-are-default-values-shared-between-objects17621781
Ref: 54fd17621781
Node: Como passo parâmetros opcionais ou parâmetros nomeados de uma função para outra?17624477
Ref: faq/programming how-can-i-pass-optional-or-keyword-parameters-from-one-function-to-another17624746
Ref: 54fe17624746
Node: Qual a diferença entre argumentos e parâmetros?17625376
Ref: faq/programming faq-argument-vs-parameter17625650
Ref: 54ff17625650
Ref: faq/programming what-is-the-difference-between-arguments-and-parameters17625650
Ref: 550017625650
Node: Por que ao alterar a lista ‘y’ também altera a lista ‘x’?17626417
Ref: faq/programming why-did-changing-list-y-also-change-list-x17626684
Ref: 550117626684
Node: Como escrevo uma função com parâmetros de saída chamada por referência ?17630379
Ref: faq/programming how-do-i-write-a-function-with-output-parameters-call-by-reference17630649
Ref: 550217630649
Node: Como fazer uma função de ordem superior em Python?17633258
Ref: faq/programming how-do-you-make-a-higher-order-function-in-python17633505
Ref: 550317633505
Node: Como faço para copiar um objeto no Python?17635149
Ref: faq/programming how-do-i-copy-an-object-in-python17635378
Ref: 550417635378
Node: Como posso encontrar os métodos ou atributos de um objeto?17635906
Ref: faq/programming how-can-i-find-the-methods-or-attributes-of-an-object17636141
Ref: 550517636141
Node: Como que o meu código pode descobrir o nome de um objeto?17636511
Ref: faq/programming how-can-my-code-discover-the-name-of-an-object17636753
Ref: 550617636753
Node: O que há com a precedência do operador vírgula?17638525
Ref: faq/programming what-s-up-with-the-comma-operator-s-precedence17638766
Ref: 550717638766
Node: Existe um equivalente ao operador ternário “? ” do C?17639389
Ref: faq/programming is-there-an-equivalent-of-c-s-ternary-operator17639644
Ref: 550817639644
Node: É possível escrever instruções de uma só linha ofuscadas em Python?17640302
Ref: faq/programming is-it-possible-to-write-obfuscated-one-liners-in-python17640573
Ref: 550917640573
Node: O que a barra / na lista de parâmetros de uma função significa?17642130
Ref: faq/programming faq-positional-only-arguments17642334
Ref: 230b17642334
Ref: faq/programming what-does-the-slash-in-the-parameter-list-of-a-function-mean17642334
Ref: 550a17642334
Node: Números e strings17643495
Ref: faq/programming numbers-and-strings17643624
Ref: 550b17643624
Node: Como faço para especificar números inteiros hexadecimais e octais?17644536
Ref: faq/programming how-do-i-specify-hexadecimal-and-octal-integers17644697
Ref: 550c17644697
Node: Por que -22 // 10 retorna -3?17645453
Ref: faq/programming why-does-22-10-return-317645688
Ref: 550d17645688
Node: Como obtenho um atributo de um literal int em vez de SyntaxError?17646520
Ref: faq/programming how-do-i-get-int-literal-attribute-instead-of-syntaxerror17646738
Ref: 550e17646738
Node: Como faço para converter uma string em um número?17647320
Ref: faq/programming how-do-i-convert-a-string-to-a-number17647560
Ref: 550f17647560
Node: Como faço para converter um número em uma string?17649030
Ref: faq/programming how-do-i-convert-a-number-to-a-string17649255
Ref: 551017649255
Node: Como faço para modificar uma string internamente?17649862
Ref: faq/programming how-do-i-modify-a-string-in-place17650099
Ref: 551117650099
Node: Como faço para invocar funções/métodos através de strings?17651046
Ref: faq/programming how-do-i-use-strings-to-call-functions-methods17651314
Ref: 551217651314
Node: Existe um equivalente em Perl chomp para remover linhas novas ao final de strings?17652805
Ref: faq/programming is-there-an-equivalent-to-perl-s-chomp-for-removing-trailing-newlines-from-strings17653079
Ref: 551317653079
Node: Existe uma função scanf ou sscanf ou algo equivalente?17653869
Ref: faq/programming is-there-a-scanf-or-sscanf-equivalent17654144
Ref: 551417654144
Node: O que significa o erro UnicodeDecodeError ou UnicodeEncodeError?17654960
Ref: faq/programming what-does-unicodedecodeerror-or-unicodeencodeerror-error-mean17655223
Ref: 551517655223
Node: Posso terminar uma string bruta com um número ímpar de contrabarras?17655421
Ref: faq/programming can-i-end-a-raw-string-with-an-odd-number-of-backslashes17655619
Ref: 551617655619
Ref: faq/programming faq-programming-raw-string-backslash17655619
Ref: 1d7817655619
Node: Desempenho<4>17656993
Ref: faq/programming performance17657126
Ref: 551717657126
Node: Meu programa está muito lento Como faço para melhorar o desempenho?17657385
Ref: faq/programming my-program-is-too-slow-how-do-i-speed-it-up17657575
Ref: 551817657575
Ref: Meu programa está muito lento Como faço para melhorar o desempenho?-Footnote-117660875
Ref: Meu programa está muito lento Como faço para melhorar o desempenho?-Footnote-217660902
Node: Qual é a maneira mais eficiente de concatenar muitas strings?17660967
Ref: faq/programming efficient-string-concatenation17661157
Ref: 551917661157
Ref: faq/programming what-is-the-most-efficient-way-to-concatenate-many-strings-together17661157
Ref: 551a17661157
Node: Sequencias Tuplas/Listas17662144
Ref: faq/programming sequences-tuples-lists17662266
Ref: 551b17662266
Node: Como faço para converter tuplas em listas?17663101
Ref: faq/programming how-do-i-convert-between-tuples-and-lists17663243
Ref: 551c17663243
Node: O que é um índice negativo?17664143
Ref: faq/programming what-s-a-negative-index17664344
Ref: 551d17664344
Node: Como que eu itero uma sequência na ordem inversa?17665030
Ref: faq/programming how-do-i-iterate-over-a-sequence-in-reverse-order17665234
Ref: 551e17665234
Node: Como que removo itens duplicados de uma lista?17665596
Ref: faq/programming how-do-you-remove-duplicates-from-a-list17665816
Ref: 551f17665816
Node: How do you remove multiple items from a list?17666745
Ref: faq/programming how-do-you-remove-multiple-items-from-a-list17666945
Ref: 552017666945
Node: Como fazer um vetor em Python?17667504
Ref: faq/programming how-do-you-make-an-array-in-python17667707
Ref: 552117667707
Ref: Como fazer um vetor em Python?-Footnote-117668812
Node: Como faço para criar uma lista multidimensional?17668839
Ref: faq/programming faq-multidimensional-list17669066
Ref: 233f17669066
Ref: faq/programming how-do-i-create-a-multidimensional-list17669066
Ref: 552217669066
Ref: Como faço para criar uma lista multidimensional?-Footnote-117670382
Node: Como eu aplico um método ou função para uma sequência de objetos?17670409
Ref: faq/programming how-do-i-apply-a-method-or-function-to-a-sequence-of-objects17670691
Ref: 552317670691
Node: Porque uma_tupla[i] += [‘item’] levanta uma exceção quando a adição funciona?17671309
Ref: faq/programming faq-augmented-assignment-tuple-error17671638
Ref: 214317671638
Ref: faq/programming why-does-a-tuple-i-item-raise-an-exception-when-the-addition-works17671638
Ref: 552417671638
Node: Quero fazer uma ordenação confusa você pode fazer uma transformação schwartziana em Python?17675006
Ref: faq/programming i-want-to-do-a-complicated-sort-can-you-do-a-schwartzian-transform-in-python17675327
Ref: 552517675327
Node: Como eu posso ordenar uma lista pelos valores de outra lista?17675853
Ref: faq/programming how-can-i-sort-one-list-by-values-from-another-list17676080
Ref: 552617676080
Node: Objetos17676719
Ref: faq/programming objects17676839
Ref: 552717676839
Node: O que é uma classe?17678209
Ref: faq/programming what-is-a-class17678302
Ref: 552817678302
Node: O que é um método?17679077
Ref: faq/programming what-is-a-method17679195
Ref: 552917679195
Node: O que é o self?17679529
Ref: faq/programming what-is-self17679719
Ref: 552a17679719
Node: Como eu verifico se um objeto é uma instância de uma dada classe ou de uma subclasse dela?17680201
Ref: faq/programming how-do-i-check-if-an-object-is-an-instance-of-a-given-class-or-of-a-subclass-of-it17680392
Ref: 552c17680392
Node: O que é delegação?17682890
Ref: faq/programming what-is-delegation17683164
Ref: 552d17683164
Node: Como eu chamo um método definido em uma classe base a partir de uma classe derivada que a estende?17685440
Ref: faq/programming how-do-i-call-a-method-defined-in-a-base-class-from-a-derived-class-that-extends-it17685696
Ref: 552e17685696
Node: Como eu posso organizar meu código para facilitar a troca da classe base?17686347
Ref: faq/programming how-can-i-organize-my-code-to-make-it-easier-to-change-the-base-class17686663
Ref: 552f17686663
Node: Como faço para criar dados de classe estáticos e métodos de classe estáticos?17687243
Ref: faq/programming how-do-i-create-static-class-data-and-static-class-methods17687523
Ref: 553017687523
Node: Como eu posso sobrecarregar construtores ou métodos em Python?17689329
Ref: faq/programming how-can-i-overload-constructors-or-methods-in-python17689600
Ref: 553117689600
Node: Eu tentei usar __spam e recebi um erro sobre _SomeClassName__spam17690624
Ref: faq/programming i-try-to-use-spam-and-i-get-an-error-about-someclassname-spam17690895
Ref: 553217690895
Node: Minha classe define __del__ mas o mesmo não é chamado quando eu excluo o objeto17692200
Ref: faq/programming my-class-defines-del-but-it-is-not-called-when-i-delete-the-object17692483
Ref: 553317692483
Node: Como eu consigo pegar uma lista de todas as instâncias de uma dada classe?17694614
Ref: faq/programming how-do-i-get-a-list-of-all-instances-of-a-given-class17694883
Ref: 553417694883
Node: Por que o resultado de id aparenta não ser único?17695308
Ref: faq/programming why-does-the-result-of-id-appear-to-be-not-unique17695564
Ref: 553517695564
Node: Quando eu posso depender dos testes de identidade com o operador is?17696496
Ref: faq/programming when-can-i-rely-on-identity-tests-with-the-is-operator17696768
Ref: 553617696768
Ref: Quando eu posso depender dos testes de identidade com o operador is?-Footnote-117700382
Node: Como uma subclasse pode controlar quais dados são armazenados em uma instância imutável?17700424
Ref: faq/programming how-can-a-subclass-control-what-data-is-stored-in-an-immutable-instance17700706
Ref: 553717700706
Node: Como faço para armazenar em cache as chamadas de um método?17702269
Ref: faq/programming faq-cache-method-calls17702474
Ref: 28e717702474
Ref: faq/programming how-do-i-cache-method-calls17702474
Ref: 553817702474
Node: Módulos<5>17705728
Ref: faq/programming modules17705815
Ref: 553917705815
Node: Como faço para criar um arquivo pyc?17706400
Ref: faq/programming how-do-i-create-a-pyc-file17706532
Ref: 553a17706532
Ref: Como faço para criar um arquivo pyc?-Footnote-117709372
Node: Como encontro o nome do módulo atual?17709414
Ref: faq/programming how-do-i-find-the-current-module-name17709606
Ref: 553b17709606
Node: Como posso ter módulos que se importam mutuamente?17710214
Ref: faq/programming how-can-i-have-modules-that-mutually-import-each-other17710443
Ref: 553c17710443
Node: __import__ ‘x y z’ retorna <módulo ‘x’>; como faço para obter z?17712622
Ref: faq/programming import-x-y-z-returns-module-x-how-do-i-get-z17712913
Ref: 553d17712913
Node: Quando eu edito um módulo importado e o reimporto as mudanças não aparecem Por que isso acontece?17713223
Ref: faq/programming when-i-edit-an-imported-module-and-reimport-it-the-changes-don-t-show-up-why-does-this-happen17713454
Ref: 553e17713454
Node: FAQ sobre design e histórico17714962
Ref: faq/design doc17715133
Ref: 553f17715133
Ref: faq/design design-and-history-faq17715133
Ref: 554017715133
Ref: faq/design translation-repo17715133
Ref: 554117715133
Node: Por que o Python usa indentação para agrupamento de instruções?17717620
Ref: faq/design why-does-python-use-indentation-for-grouping-of-statements17717847
Ref: 554217717847
Node: Por que eu estou recebendo resultados estranhos com simples operações aritméticas?17719807
Ref: faq/design why-am-i-getting-strange-results-with-simple-arithmetic-operations17720104
Ref: 554317720104
Node: Por que o cálculo de pontos flutuantes são tão imprecisos?17720315
Ref: faq/design why-are-floating-point-calculations-so-inaccurate17720587
Ref: 554417720587
Node: Por que strings do Python são imutáveis?17722274
Ref: faq/design why-are-python-strings-immutable17722550
Ref: 554517722550
Node: Por que o ‘self’ deve ser usado explicitamente em definições de método e chamadas?17723196
Ref: faq/design why-must-self-be-used-explicitly-in-method-definitions-and-calls17723470
Ref: 554617723470
Ref: faq/design why-self17723470
Ref: 552b17723470
Node: Por que não posso usar uma atribuição em uma expressão?17726252
Ref: faq/design id117726598
Ref: 554717726598
Ref: faq/design why-can-t-i-use-an-assignment-in-an-expression17726598
Ref: 1dd617726598
Ref: Por que não posso usar uma atribuição em uma expressão?-Footnote-117727004
Node: Por que o Python usa métodos para algumas funcionalidades ex lista index mas funções para outras ex len lista ?17727046
Ref: faq/design why-does-python-use-methods-for-some-functionality-e-g-list-index-but-functions-for-other-e-g-len-list17727385
Ref: 554817727385
Node: Por que o join é um método de string em vez de ser um método de lista ou tupla?17728743
Ref: faq/design why-is-join-a-string-method-instead-of-a-list-or-tuple-method17729057
Ref: 554917729057
Node: Quão rápidas são as exceções?17731028
Ref: faq/design how-fast-are-exceptions17731292
Ref: 554a17731292
Node: Por que não existe uma instrução de switch ou case no Python?17732214
Ref: faq/design why-isn-t-there-a-switch-or-case-statement-in-python17732530
Ref: 554b17732530
Node: Você não pode emular threads no interpretador em vez de confiar em uma implementação de thread específica do sistema operacional?17734214
Ref: faq/design can-t-you-emulate-threads-in-the-interpreter-instead-of-relying-on-an-os-specific-thread-implementation17734554
Ref: 554c17734554
Ref: Você não pode emular threads no interpretador em vez de confiar em uma implementação de thread específica do sistema operacional?-Footnote-117735291
Node: Por que expressões lambda não podem conter instruções?17735347
Ref: faq/design why-can-t-lambda-expressions-contain-statements17735706
Ref: 554d17735706
Node: O Python pode ser compilado para linguagem de máquina C ou alguma outra linguagem?17736689
Ref: faq/design can-python-be-compiled-to-machine-code-c-or-some-other-language17736946
Ref: 554e17736946
Ref: O Python pode ser compilado para linguagem de máquina C ou alguma outra linguagem?-Footnote-117737393
Ref: O Python pode ser compilado para linguagem de máquina C ou alguma outra linguagem?-Footnote-217737421
Node: Como o Python gerencia memória?17737449
Ref: faq/design how-does-python-manage-memory17737731
Ref: 554f17737731
Ref: Como o Python gerencia memória?-Footnote-117739563
Ref: Como o Python gerencia memória?-Footnote-217739594
Node: Por que o CPython não usa uma forma mais tradicional de esquema de coleta de lixo?17739619
Ref: faq/design why-doesn-t-cpython-use-a-more-traditional-garbage-collection-scheme17739880
Ref: 555017739880
Node: Por que toda memória não é liberada quando o CPython fecha?17740930
Ref: faq/design why-isn-t-all-memory-freed-when-cpython-exits17741221
Ref: 555117741221
Node: Por que existem tipos de dados separados para tuplas e listas?17741988
Ref: faq/design why-are-there-separate-tuple-and-list-data-types17742241
Ref: 555217742241
Node: Como as listas são implementadas no CPython?17743636
Ref: faq/design how-are-lists-implemented-in-cpython17743878
Ref: 555317743878
Node: Como são os dicionários implementados no CPython?17744727
Ref: faq/design how-are-dictionaries-implemented-in-cpython17744958
Ref: 555417744958
Node: Por que chaves de dicionário devem ser imutáveis?17746046
Ref: faq/design why-must-dictionary-keys-be-immutable17746281
Ref: 555517746281
Node: Por que lista sort não retorna a lista ordenada?17750892
Ref: faq/design why-doesn-t-list-sort-return-the-sorted-list17751138
Ref: 555617751138
Node: Como você especifica e aplica um spec de interface no Python?17752031
Ref: faq/design how-do-you-specify-and-enforce-an-interface-spec-in-python17752248
Ref: 555717752248
Node: Por que não há goto?17754835
Ref: faq/design why-is-there-no-goto17755076
Ref: 555817755076
Node: Por que strings brutas r-strings não podem terminar com uma contrabarra?17756303
Ref: faq/design why-can-t-raw-strings-r-strings-end-with-a-backslash17756566
Ref: 555917756566
Node: Por que o Python não tem uma instrução “with” para atribuição de atributos?17757914
Ref: faq/design why-doesn-t-python-have-a-with-statement-for-attribute-assignments17758209
Ref: 555a17758209
Node: Por que os geradores não suportam a instrução with?17760865
Ref: faq/design why-don-t-generators-support-the-with-statement17761168
Ref: 555b17761168
Node: Por que dois pontos são necessários para as instruções de if/while/def/class?17761641
Ref: faq/design why-are-colons-required-for-the-if-while-def-class-statements17761923
Ref: 555c17761923
Node: Por que o Python permite vírgulas ao final de listas e tuplas?17762754
Ref: faq/design why-does-python-allow-commas-at-the-end-of-lists-and-tuples17762973
Ref: 555d17762973
Node: FAQ de Bibliotecas e Extensões17764150
Ref: faq/library doc17764332
Ref: 555e17764332
Ref: faq/library library-and-extension-faq17764332
Ref: 555f17764332
Ref: faq/library translation-repo17764332
Ref: 556017764332
Node: Questões gerais sobre bibliotecas17764609
Ref: faq/library general-library-questions17764734
Ref: 556117764734
Node: Como encontrar um módulo ou aplicação para realizar uma tarefa X?17765307
Ref: faq/library how-do-i-find-a-module-or-application-to-perform-task-x17765517
Ref: 556217765517
Ref: Como encontrar um módulo ou aplicação para realizar uma tarefa X?-Footnote-117766158
Ref: Como encontrar um módulo ou aplicação para realizar uma tarefa X?-Footnote-217766183
Node: Onde está o código-fonte do math py socket py regex py etc ?17766214
Ref: faq/library where-is-the-math-py-socket-py-regex-py-etc-source-file17766482
Ref: 556317766482
Node: Como tornar um script Python executável no Unix?17767340
Ref: faq/library how-do-i-make-a-python-script-executable-on-unix17767587
Ref: 556417767587
Node: Existe um pacote de curses/termcap para Python?17769100
Ref: faq/library is-there-a-curses-termcap-package-for-python17769337
Ref: 556517769337
Ref: Existe um pacote de curses/termcap para Python?-Footnote-117770188
Node: Existe a função onexit equivalente ao C no Python?17770248
Ref: faq/library is-there-an-equivalent-to-c-s-onexit-in-python17770485
Ref: 556617770485
Node: Por que o meu manipulador de sinal não funciona?17770705
Ref: faq/library why-don-t-my-signal-handlers-work17770886
Ref: 556717770886
Node: Tarefas comuns17771276
Ref: faq/library common-tasks17771417
Ref: 556817771417
Node: Como testar um programa ou componente Python?17771637
Ref: faq/library how-do-i-test-a-python-program-or-component17771798
Ref: 556917771798
Node: Como faço para criar uma documentação de doc strings?17773947
Ref: faq/library how-do-i-create-documentation-from-doc-strings17774166
Ref: 556a17774166
Ref: Como faço para criar uma documentação de doc strings?-Footnote-117774589
Ref: Como faço para criar uma documentação de doc strings?-Footnote-217774629
Node: Como faço para pressionar uma tecla de cada vez?17774664
Ref: faq/library how-do-i-get-a-single-keypress-at-a-time17774829
Ref: 556b17774829
Node: Threads17775094
Ref: faq/library threads17775220
Ref: 556c17775220
Node: Como faço para programar usando threads?17775611
Ref: faq/library how-do-i-program-using-threads17775756
Ref: 556d17775756
Node: Nenhuma de minhas threads parece funcionar por que?17776093
Ref: faq/library none-of-my-threads-seem-to-run-why17776307
Ref: 556e17776307
Node: Como distribuo o trabalho entre várias threads de trabalho?17777992
Ref: faq/library how-do-i-parcel-out-work-among-a-bunch-of-worker-threads17778232
Ref: 556f17778232
Node: Que tipos de variáveis globais mutáveis são seguras para thread?17780915
Ref: faq/library what-kinds-of-global-value-mutation-are-thread-safe17781157
Ref: 557017781157
Node: Não podemos remover a Trava Global do interpretador?17782854
Ref: faq/library can-t-we-get-rid-of-the-global-interpreter-lock17783027
Ref: 557117783027
Ref: Não podemos remover a Trava Global do interpretador?-Footnote-117786332
Ref: Não podemos remover a Trava Global do interpretador?-Footnote-217786374
Ref: Não podemos remover a Trava Global do interpretador?-Footnote-317786417
Node: Entrada e Saída<2>17786477
Ref: faq/library input-and-output17786618
Ref: 557217786618
Node: Como faço para excluir um arquivo? E outras perguntas sobre arquivos17787251
Ref: faq/library how-do-i-delete-a-file-and-other-file-questions17787410
Ref: 557317787410
Node: Como eu copio um arquivo?17788783
Ref: faq/library how-do-i-copy-a-file17788988
Ref: 557417788988
Ref: Como eu copio um arquivo?-Footnote-117789507
Ref: Como eu copio um arquivo?-Footnote-217789578
Node: Como leio ou escrevo dados binários?17789630
Ref: faq/library how-do-i-read-or-write-binary-data17789833
Ref: 557517789833
Node: Por que não consigo usar os read em um encadeamento com os popen ?17791063
Ref: faq/library i-can-t-seem-to-use-os-read-on-a-pipe-created-with-os-popen-why17791275
Ref: 557617791275
Node: Como acesso a porta serial RS232 ?17791815
Ref: faq/library how-do-i-access-the-serial-rs232-port17792035
Ref: 557717792035
Ref: Como acesso a porta serial RS232 ?-Footnote-117792362
Node: Por que o sys stdout stdin stderr não fecha?17792405
Ref: faq/library why-doesn-t-closing-sys-stdout-stdin-stderr-really-close-it17792549
Ref: 557817792549
Node: Programação Rede / Internet17793862
Ref: faq/library network-internet-programming17794009
Ref: 557917794009
Node: Quais ferramentas para WWW existem no Python?17794369
Ref: faq/library what-www-tools-are-there-for-python17794545
Ref: 557a17794545
Node: Qual módulo devo usar para ajudar na geração do HTML?17795062
Ref: faq/library what-module-should-i-use-to-help-with-generating-html17795288
Ref: 557b17795288
Ref: Qual módulo devo usar para ajudar na geração do HTML?-Footnote-117795541
Node: Como envio um e-mail de um script Python?17795593
Ref: faq/library how-do-i-send-mail-from-a-python-script17795830
Ref: 557c17795830
Node: Como evito um bloqueio no método connect de um soquete?17797227
Ref: faq/library how-do-i-avoid-blocking-in-the-connect-method-of-a-socket17797399
Ref: 557d17797399
Ref: Como evito um bloqueio no método connect de um soquete?-Footnote-117798842
Node: Base de Dados17798871
Ref: faq/library databases17799024
Ref: 557e17799024
Node: Existem interfaces para banco de dados em Python?17799189
Ref: faq/library are-there-any-interfaces-to-database-packages-in-python17799350
Ref: 557f17799350
Ref: Existem interfaces para banco de dados em Python?-Footnote-117799896
Node: Como você implementa objetos persistentes no Python?17799953
Ref: faq/library how-do-you-implement-persistent-objects-in-python17800114
Ref: 558017800114
Node: Matemáticos e Numéricos17800554
Ref: faq/library mathematics-and-numerics17800669
Ref: 558117800669
Node: Como gero número aleatórios no Python?17800789
Ref: faq/library how-do-i-generate-random-numbers-in-python17800891
Ref: 558217800891
Node: FAQ sobre Extensão/Incorporação17801985
Ref: faq/extending doc17802155
Ref: 558317802155
Ref: faq/extending extending-embedding-faq17802155
Ref: 558417802155
Ref: faq/extending translation-repo17802155
Ref: 558517802155
Node: Posso criar minhas próprias funções em C?17803941
Ref: faq/extending can-i-create-my-own-functions-in-c17804111
Ref: 558617804111
Node: Posso criar minhas próprias funções em C++?17804520
Ref: faq/extending id117804746
Ref: 558717804746
Node: Escrever C é difícil; há alguma alternativa?17805184
Ref: faq/extending c-wrapper-software17805436
Ref: 558817805436
Ref: faq/extending writing-c-is-hard-are-there-any-alternatives17805436
Ref: 558917805436
Node: Como posso executar instruções arbitrárias de Python a partir de C?17805808
Ref: faq/extending how-can-i-execute-arbitrary-python-statements-from-c17806105
Ref: 558a17806105
Node: Como posso executar e obter o resultado de uma expressão Python arbitrária a partir de C?17806689
Ref: faq/extending how-can-i-evaluate-an-arbitrary-python-expression-from-c17806994
Ref: 558b17806994
Node: Como extraio valores em C a partir de um objeto Python?17807405
Ref: faq/extending how-do-i-extract-c-values-from-a-python-object17807722
Ref: 558c17807722
Node: Como posso utilizar Py_BuildValue para criar uma tupla de comprimento arbitrário?17809048
Ref: faq/extending how-do-i-use-py-buildvalue-to-create-a-tuple-of-arbitrary-length17809326
Ref: 558d17809326
Node: Como eu chamo um método de um objeto a partir do C?17809585
Ref: faq/extending how-do-i-call-an-object-s-method-from-c17809917
Ref: 558e17809917
Node: Como posso capturar a saída da função PyErr_Print ou qualquer outra coisa que escreva para stdout/stderr ?17811274
Ref: faq/extending how-do-i-catch-the-output-from-pyerr-print-or-anything-that-prints-to-stdout-stderr17811591
Ref: 558f17811591
Node: Como faço para acessar a partir do C um módulo escrito em Python?17812878
Ref: faq/extending how-do-i-access-a-module-written-in-python-from-c17813199
Ref: 559017813199
Node: Como posso interagir com objetos C++ a partir do Python?17814131
Ref: faq/extending how-do-i-interface-to-c-objects-from-python17814415
Ref: 559117814415
Node: Adicionei um módulo usando o arquivo de Setup e o make falha; por quê?17815042
Ref: faq/extending i-added-a-module-using-the-setup-file-and-the-make-fails-why17815288
Ref: 559217815288
Node: Como eu depuro uma extensão?17815708
Ref: faq/extending how-do-i-debug-an-extension17815997
Ref: 559317815997
Node: Quero compilar um módulo Python no meu sistema Linux mas alguns arquivos estão faltando Por quê?17816599
Ref: faq/extending i-want-to-compile-a-python-module-on-my-linux-system-but-some-files-are-missing-why17816890
Ref: 559417816890
Node: Como posso distinguir “entrada incompleta” de “entrada inválida”?17817370
Ref: faq/extending how-do-i-tell-incomplete-input-from-invalid-input17817713
Ref: 559517817713
Node: Como encontro os símbolos __builtin_new ou __pure_virtual não-definidos no g++?17818775
Ref: faq/extending how-do-i-find-undefined-g-symbols-builtin-new-or-pure-virtual17819137
Ref: 559617819137
Node: Posso criar uma classe de objetos com alguns métodos implementados em C e outros em Python por exemplo via herança ?17819627
Ref: faq/extending can-i-create-an-object-class-with-some-methods-implemented-in-c-and-others-in-python-e-g-through-inheritance17819906
Ref: 559717819906
Node: Python no Windows17820494
Ref: faq/windows doc17820670
Ref: 559817820670
Ref: faq/windows python-on-windows-faq17820670
Ref: 559917820670
Ref: faq/windows translation-repo17820670
Ref: 559a17820670
Ref: faq/windows windows-faq17820670
Ref: 559b17820670
Node: Como faço para executar um programa Python no Windows?17821419
Ref: faq/windows faq-run-program-under-windows17821592
Ref: 559c17821592
Ref: faq/windows how-do-i-run-a-python-program-under-windows17821592
Ref: 559d17821592
Node: Como eu faço para criar programas Python executáveis?17825380
Ref: faq/windows how-do-i-make-python-scripts-executable17825613
Ref: 559e17825613
Node: Por que Python às vezes demora tanto para iniciar?17826214
Ref: faq/windows why-does-python-sometimes-take-so-long-to-start17826462
Ref: 559f17826462
Node: Como eu faço para criar um executável a partir de um código Python?17827415
Ref: faq/windows how-do-i-make-an-executable-from-a-python-script17827647
Ref: 55a017827647
Node: Um arquivo * pyd é o mesmo que um DLL?17827971
Ref: faq/windows is-a-pyd-file-the-same-as-a-dll17828218
Ref: 55a117828218
Node: Como eu posso embutir Python dentro de uma aplicação do Windows?17829304
Ref: faq/windows how-can-i-embed-python-into-a-windows-application17829560
Ref: 55a217829560
Node: Como eu impeço editores de adicionarem tabulações na minha source do Python?17834508
Ref: faq/windows how-do-i-keep-editors-from-inserting-tabs-into-my-python-source17834786
Ref: 55a317834786
Node: Como faço para verificar uma tecla pressionada sem bloquear?17835812
Ref: faq/windows how-do-i-check-for-a-keypress-without-blocking17836089
Ref: 55a417836089
Node: Como resolvo o erro da api-ms-win-crt-runtime-l1-1-0 dll ausente?17836470
Ref: faq/windows how-do-i-solve-the-missing-api-ms-win-crt-runtime-l1-1-0-dll-error17836659
Ref: 55a517836659
Ref: Como resolvo o erro da api-ms-win-crt-runtime-l1-1-0 dll ausente?-Footnote-117837236
Node: FAQ da Interface Gráfica do Usuário17837294
Ref: faq/gui doc17837500
Ref: 55a617837500
Ref: faq/gui graphic-user-interface-faq17837500
Ref: 55a717837500
Ref: faq/gui translation-repo17837500
Ref: 55a817837500
Node: Perguntas Gerais sobre a GUI17837702
Ref: faq/gui general-gui-questions17837857
Ref: 55a917837857
Node: Quais toolkits de GUI existem para o Python?17837930
Ref: faq/gui what-gui-toolkits-exist-for-python17838114
Ref: 55aa17838114
Ref: Quais toolkits de GUI existem para o Python?-Footnote-117838963
Ref: Quais toolkits de GUI existem para o Python?-Footnote-217839005
Ref: Quais toolkits de GUI existem para o Python?-Footnote-317839032
Ref: Quais toolkits de GUI existem para o Python?-Footnote-417839111
Node: Perguntas do Tkinter17839193
Ref: faq/gui tkinter-questions17839340
Ref: 55ab17839340
Node: Como eu congelo as aplicações Tkinter?17839669
Ref: faq/gui how-do-i-freeze-tkinter-applications17839834
Ref: 55ac17839834
Node: Posso ter eventos Tk manipulados enquanto aguardo pelo E/S?17840453
Ref: faq/gui can-i-have-tk-events-handled-while-waiting-for-i-o17840700
Ref: 55ad17840700
Node: Não consigo fazer as ligações de tecla funcionarem no Tkinter por que?17841270
Ref: faq/gui i-can-t-get-key-bindings-to-work-in-tkinter-why17841468
Ref: 55ae17841468
Node: FAD de “Por que o Python está instalado em meu computador?”17842111
Ref: faq/installed doc17842291
Ref: 55af17842291
Ref: faq/installed translation-repo17842291
Ref: 55b017842291
Ref: faq/installed why-is-python-installed-on-my-computer-faq17842291
Ref: 55b117842291
Node: O que é Python?<2>17842561
Ref: faq/installed what-is-python17842738
Ref: 55b217842738
Ref: O que é Python?<2>-Footnote-117843236
Node: Porque Python está instalado em minha máquina?17843288
Ref: faq/installed why-is-python-installed-on-my-machine17843499
Ref: 55b317843499
Node: Eu posso apagar o Python?17844704
Ref: faq/installed can-i-delete-python17844887
Ref: 55b417844887
Node: Descontinuações17845705
Ref: deprecations/index doc17845823
Ref: 55b517845823
Ref: deprecations/index deprecations17845823
Ref: 55b617845823
Ref: deprecations/index translation-repo17845823
Ref: 55b717845823
Node: Remoção pendente no Python 3 14<5>17846365
Ref: deprecations/index pending-removal-in-python-3-1417846500
Ref: 55b817846500
Ref: Remoção pendente no Python 3 14<5>-Footnote-117851272
Ref: Remoção pendente no Python 3 14<5>-Footnote-217851327
Ref: Remoção pendente no Python 3 14<5>-Footnote-317851382
Ref: Remoção pendente no Python 3 14<5>-Footnote-417851437
Ref: Remoção pendente no Python 3 14<5>-Footnote-517851492
Ref: Remoção pendente no Python 3 14<5>-Footnote-617851548
Ref: Remoção pendente no Python 3 14<5>-Footnote-717851604
Ref: Remoção pendente no Python 3 14<5>-Footnote-817851659
Ref: Remoção pendente no Python 3 14<5>-Footnote-917851714
Ref: Remoção pendente no Python 3 14<5>-Footnote-1017851770
Ref: Remoção pendente no Python 3 14<5>-Footnote-1117851826
Ref: Remoção pendente no Python 3 14<5>-Footnote-1217851882
Node: Remoção pendente no Python 3 15<5>17851938
Ref: deprecations/index pending-removal-in-python-3-1517852118
Ref: 55b917852118
Ref: Remoção pendente no Python 3 15<5>-Footnote-117856710
Ref: Remoção pendente no Python 3 15<5>-Footnote-217856765
Ref: Remoção pendente no Python 3 15<5>-Footnote-317856820
Ref: Remoção pendente no Python 3 15<5>-Footnote-417856875
Ref: Remoção pendente no Python 3 15<5>-Footnote-517856931
Ref: Remoção pendente no Python 3 15<5>-Footnote-617856973
Node: Remoção pendente no Python 3 16<5>17857029
Ref: deprecations/index pending-removal-in-python-3-1617857209
Ref: 55ba17857209
Ref: Remoção pendente no Python 3 16<5>-Footnote-117859515
Node: Remoção pendente no Python 3 17<3>17859571
Ref: deprecations/index pending-removal-in-python-3-1717859751
Ref: 55bb17859751
Ref: Remoção pendente no Python 3 17<3>-Footnote-117862886
Ref: Remoção pendente no Python 3 17<3>-Footnote-217862944
Ref: Remoção pendente no Python 3 17<3>-Footnote-317862999
Ref: Remoção pendente no Python 3 17<3>-Footnote-417863057
Node: Remoção pendente no Python 3 18<2>17863112
Ref: deprecations/index pending-removal-in-python-3-1817863297
Ref: 55bc17863297
Ref: Remoção pendente no Python 3 18<2>-Footnote-117863730
Node: Remoção pendente em versões futuras<5>17863785
Ref: deprecations/index pending-removal-in-future-versions17863960
Ref: 55bd17863960
Ref: Remoção pendente em versões futuras<5>-Footnote-117871083
Ref: Remoção pendente em versões futuras<5>-Footnote-217871138
Ref: Remoção pendente em versões futuras<5>-Footnote-317871194
Ref: Remoção pendente em versões futuras<5>-Footnote-417871250
Ref: Remoção pendente em versões futuras<5>-Footnote-517871305
Node: Descontinuações na API C17871360
Ref: deprecations/index c-api-deprecations17871490
Ref: 55be17871490
Node: Remoção pendente no Python 3 14<6>17871798
Ref: deprecations/index id117871942
Ref: 55bf17871942
Ref: Remoção pendente no Python 3 14<6>-Footnote-117874935
Ref: Remoção pendente no Python 3 14<6>-Footnote-217874977
Ref: Remoção pendente no Python 3 14<6>-Footnote-317875033
Node: Remoção pendente no Python 3 15<6>17875088
Ref: deprecations/index id217875282
Ref: 55c017875282
Node: Remoção pendente em versões futuras<6>17876445
Ref: deprecations/index id317876594
Ref: 55c117876594
Node: Glossário17878694
Ref: glossary doc17878804
Ref: 55c217878804
Ref: glossary glossary17878804
Ref: 1d5817878804
Ref: glossary id117878804
Ref: 55c317878804
Ref: glossary translation-repo17878804
Ref: 55c417878804
Ref: glossary term-017878832
Ref: 16c17878832
Ref: glossary term-17879019
Ref: 16d17879019
Ref: glossary term-abstract-base-class17879475
Ref: 11f517879475
Ref: glossary term-annotation17880397
Ref: 45817880397
Ref: glossary term-argument17881153
Ref: 44917881153
Ref: glossary term-asynchronous-context-manager17882704
Ref: 5d717882704
Ref: glossary term-asynchronous-generator17882964
Ref: 21cf17882964
Ref: glossary term-asynchronous-generator-iterator17883722
Ref: 45bd17883722
Ref: glossary term-asynchronous-iterable17884463
Ref: d9c17884463
Ref: glossary term-asynchronous-iterator17884690
Ref: 1ab17884690
Ref: glossary term-atomic-operation17885124
Ref: 55c617885124
Ref: glossary term-attribute17885677
Ref: 263b17885677
Ref: glossary term-awaitable17886264
Ref: 1ad17886264
Ref: glossary term-BDFL17886473
Ref: 55c917886473
Ref: glossary term-binary-file17886687
Ref: 1e0e17886687
Ref: glossary term-borrowed-reference17887188
Ref: 33e17887188
Ref: glossary term-bytes-like-object17887912
Ref: d4f17887912
Ref: glossary term-bytecode17889026
Ref: 18717889026
Ref: glossary term-callable17889885
Ref: 2aaf17889885
Ref: glossary term-callback17890316
Ref: 2ad217890316
Ref: glossary term-class17890484
Ref: 1a8a17890484
Ref: glossary term-class-variable17890676
Ref: 55ca17890676
Ref: glossary term-closure-variable17890851
Ref: 20d117890851
Ref: glossary term-complex-number17892076
Ref: 55cb17892076
Ref: glossary term-concurrency17892941
Ref: 55cc17892941
Ref: glossary term-concurrent-modification17893569
Ref: 55ce17893569
Ref: glossary term-context17893881
Ref: 169617893881
Ref: glossary term-context-management-protocol17894537
Ref: 169817894537
Ref: glossary term-context-manager17894711
Ref: 5d417894711
Ref: glossary term-context-variable17894916
Ref: 55cf17894916
Ref: glossary term-contiguous17895244
Ref: 23b917895244
Ref: glossary term-coroutine17895819
Ref: 49117895819
Ref: glossary term-coroutine-function17896161
Ref: d9b17896161
Ref: glossary term-CPython17896498
Ref: 6f617896498
Ref: glossary term-current-context17896756
Ref: 169717896756
Ref: glossary term-data-race17897251
Ref: 55c817897251
Ref: glossary term-deadlock17897892
Ref: 55d517897892
Ref: glossary term-decorator17898562
Ref: 73117898562
Ref: glossary term-descriptor17899349
Ref: 165817899349
Ref: glossary term-dictionary17900289
Ref: 211717900289
Ref: glossary term-dictionary-comprehension17900542
Ref: 55d717900542
Ref: glossary term-dictionary-view17900924
Ref: 26bf17900924
Ref: glossary term-docstring17901429
Ref: 22bd17901429
Ref: glossary term-duck-typing17901934
Ref: 55c517901934
Ref: glossary term-dunder17902784
Ref: 55d817902784
Ref: glossary term-EAFP17903041
Ref: 2d5a17903041
Ref: glossary term-expression17903611
Ref: 211117903611
Ref: glossary term-extension-module17904217
Ref: 47eb17904217
Ref: glossary term-f-string17904371
Ref: 43617904371
Ref: glossary term-file-object17904580
Ref: 120317904580
Ref: glossary term-file-like-object17905450
Ref: 15cf17905450
Ref: glossary term-filesystem-encoding-and-error-handler17905533
Ref: 53b17905533
Ref: glossary term-finder17906577
Ref: 20ae17906577
Ref: glossary term-floor-division17907036
Ref: 94b17907036
Ref: glossary term-free-threading17907466
Ref: 15e417907466
Ref: glossary term-free-variable17907780
Ref: 216917907780
Ref: glossary term-function17908275
Ref: 21ea17908275
Ref: glossary term-function-annotation17908595
Ref: 1db717908595
Ref: glossary term-__future__17909367
Ref: dd517909367
Ref: glossary term-garbage-collection17910008
Ref: 1a6917910008
Ref: glossary term-generator17910414
Ref: 109a17910414
Ref: glossary term-generator-iterator17910989
Ref: bf917910989
Ref: glossary term-generator-expression17911440
Ref: 55da17911440
Ref: glossary term-generic-function17911870
Ref: 9f917911870
Ref: glossary term-generic-type17912254
Ref: 43917912254
Ref: glossary term-GIL17912639
Ref: 15917912639
Ref: glossary term-global-interpreter-lock17912697
Ref: 14817912697
Ref: glossary term-global-state17914134
Ref: 55db17914134
Ref: glossary term-hash-based-pyc17914492
Ref: 55dc17914492
Ref: glossary term-hashable17914752
Ref: 61017914752
Ref: glossary term-IDLE17915831
Ref: 55dd17915831
Ref: glossary term-immortal17916075
Ref: 45bb17916075
Ref: glossary term-immutable17916451
Ref: 1d7917916451
Ref: glossary term-import-path17917012
Ref: 218517917012
Ref: glossary term-importing17917415
Ref: 217817917415
Ref: glossary term-importer17917551
Ref: 218417917551
Ref: glossary term-interactive17917688
Ref: 16917917688
Ref: glossary term-interpreted17918294
Ref: 55de17918294
Ref: glossary term-interpreter-shutdown17918892
Ref: 14e17918892
Ref: glossary term-iterable17919742
Ref: 126817919742
Ref: glossary term-iterator17921029
Ref: 1ac17921029
Ref: glossary term-key-function17922677
Ref: e3117922677
Ref: glossary term-keyword-argument17923931
Ref: d3417923931
Ref: glossary term-lambda17923983
Ref: 28ec17923983
Ref: glossary term-LBYL17924222
Ref: 55d917924222
Ref: glossary term-lexical-analyzer17925087
Ref: 55df17925087
Ref: glossary term-list17925171
Ref: 55e017925171
Ref: glossary term-list-comprehension17925388
Ref: 6ce17925388
Ref: glossary term-lock17925837
Ref: 55d117925837
Ref: glossary term-loader17926660
Ref: 17a417926660
Ref: glossary term-locale-encoding17927057
Ref: 24217927057
Ref: glossary term-magic-method17927602
Ref: 431817927602
Ref: glossary term-mapping17927685
Ref: 11fb17927685
Ref: glossary term-meta-path-finder17928102
Ref: 10a917928102
Ref: glossary term-metaclass17928471
Ref: 211217928471
Ref: glossary term-method17929386
Ref: 163817929386
Ref: glossary term-method-resolution-order17929727
Ref: 231617929727
Ref: glossary term-module17930048
Ref: 175517930048
Ref: glossary term-module-spec17930355
Ref: 20a617930355
Ref: glossary term-MRO17930622
Ref: 15c017930622
Ref: glossary term-mutable17930684
Ref: 1d7e17930684
Ref: glossary term-named-tuple17931065
Ref: 64e17931065
Ref: glossary term-namespace17932395
Ref: 1ddd17932395
Ref: glossary term-namespace-package17933218
Ref: 1dee17933218
Ref: glossary term-native-code17933860
Ref: 55d317933860
Ref: glossary term-nested-scope17934252
Ref: 20d017934252
Ref: glossary term-new-style-class17934808
Ref: 2a4217934808
Ref: glossary term-non-deterministic17935186
Ref: 55d017935186
Ref: glossary term-object17935647
Ref: 55e117935647
Ref: glossary term-optimized-scope17935838
Ref: 17e17935838
Ref: glossary term-package17936476
Ref: 20aa17936476
Ref: glossary term-parallelism17936765
Ref: 55cd17936765
Ref: glossary term-parameter17937289
Ref: 208f17937289
Ref: glossary positional-only-parameter17937820
Ref: a8f17937820
Ref: glossary keyword-only-parameter17938242
Ref: 2a517938242
Ref: glossary term-path-entry17939844
Ref: 219317939844
Ref: glossary term-path-entry-finder17940039
Ref: 10aa17940039
Ref: glossary term-path-entry-hook17940433
Ref: 219517940433
Ref: glossary term-path-based-finder17940683
Ref: 218817940683
Ref: glossary term-path-like-object17940852
Ref: 2a017940852
Ref: glossary term-PEP17941559
Ref: 55e217941559
Ref: glossary term-portion17942299
Ref: 217f17942299
Ref: glossary term-positional-argument17942503
Ref: d3517942503
Ref: glossary term-provisional-API17942558
Ref: b1617942558
Ref: glossary term-provisional-package17943717
Ref: 107a17943717
Ref: glossary term-Python-300017943776
Ref: 55e317943776
Ref: glossary term-Pythonic17944026
Ref: 55e417944026
Ref: glossary term-qualified-name17944739
Ref: 1ab117944739
Ref: glossary term-race-condition17945709
Ref: 55c717945709
Ref: glossary term-reference-count17946363
Ref: 4b7317946363
Ref: glossary term-regular-package17947254
Ref: 217c17947254
Ref: glossary term-reentrant17947434
Ref: 55d617947434
Ref: glossary term-REPL17948367
Ref: 16a17948367
Ref: glossary term-__slots__17948501
Ref: 5df17948501
Ref: glossary term-sequence17948918
Ref: 4f117948918
Ref: glossary term-set-comprehension17950107
Ref: 55e517950107
Ref: glossary term-single-dispatch17950460
Ref: 9fa17950460
Ref: glossary term-slice17950621
Ref: 231317950621
Ref: glossary term-soft-deprecated17950959
Ref: 20917950959
Ref: glossary term-special-method17951365
Ref: 19eb17951365
Ref: glossary term-standard-library17951692
Ref: 55e617951692
Ref: glossary term-statement17952278
Ref: 293517952278
Ref: glossary term-static-type-checker17952551
Ref: 26d17952551
Ref: glossary term-stdlib17952781
Ref: 15ae17952781
Ref: glossary term-strong-reference17952893
Ref: 33d17952893
Ref: glossary term-synchronization-primitive17953587
Ref: 55d217953587
Ref: glossary term-text-encoding17954303
Ref: 231017954303
Ref: glossary term-text-file17954928
Ref: 1e0d17954928
Ref: glossary term-thread-safe17955506
Ref: 55d417955506
Ref: glossary term-token17956228
Ref: 200a17956228
Ref: glossary term-triple-quoted-string17956641
Ref: 55e717956641
Ref: glossary term-type17957187
Ref: 1a8b17957187
Ref: glossary term-type-alias17957420
Ref: 43a17957420
Ref: glossary term-type-hint17958036
Ref: 210d17958036
Ref: glossary term-universal-newlines17958698
Ref: d5c17958698
Ref: glossary term-variable-annotation17959104
Ref: d7917959104
Ref: glossary term-virtual-environment17959944
Ref: 1e8617959944
Ref: glossary term-virtual-machine17960231
Ref: 370d17960231
Ref: glossary term-walrus-operator17960412
Ref: 55e817960412
Ref: glossary term-Zen-of-Python17960617
Ref: 55e917960617
Ref: Glossário-Footnote-117960881
Ref: Glossário-Footnote-217960923
Ref: Glossário-Footnote-317960965
Ref: Glossário-Footnote-417961007
Ref: Glossário-Footnote-517961049
Ref: Glossário-Footnote-617961091
Ref: Glossário-Footnote-717961133
Ref: Glossário-Footnote-817961175
Ref: Glossário-Footnote-917961217
Ref: Glossário-Footnote-1017961259
Ref: Glossário-Footnote-1117961298
Ref: Glossário-Footnote-1217961341
Ref: Glossário-Footnote-1317961384
Ref: Glossário-Footnote-1417961427
Ref: Glossário-Footnote-1517961470
Ref: Glossário-Footnote-1617961502
Ref: Glossário-Footnote-1717961545
Ref: Glossário-Footnote-1817961588
Ref: Glossário-Footnote-1917961631
Ref: Glossário-Footnote-2017961674
Ref: Glossário-Footnote-2117961717
Ref: Glossário-Footnote-2217961760
Ref: Glossário-Footnote-2317961803
Ref: Glossário-Footnote-2417961846
Ref: Glossário-Footnote-2517961889
Ref: Glossário-Footnote-2617961932
Ref: Glossário-Footnote-2717961975
Ref: Glossário-Footnote-2817962018
Ref: Glossário-Footnote-2917962061
Ref: Glossário-Footnote-3017962104
Ref: Glossário-Footnote-3117962147
Ref: Glossário-Footnote-3217962190
Ref: Glossário-Footnote-3317962233
Ref: Glossário-Footnote-3417962276
Ref: Glossário-Footnote-3517962336
Ref: Glossário-Footnote-3617962379
Ref: Glossário-Footnote-3717962422
Ref: Glossário-Footnote-3817962465
Ref: Glossário-Footnote-3917962508
Ref: Glossário-Footnote-4017962551
Node: Sobre esta documentação17962594
Ref: about doc17962703
Ref: 55ea17962703
Ref: about about-this-documentation17962703
Ref: 55eb17962703
Ref: about translation-repo17962703
Ref: 55ec17962703
Ref: Sobre esta documentação-Footnote-117963717
Ref: Sobre esta documentação-Footnote-217963766
Ref: Sobre esta documentação-Footnote-317963802
Node: Contribuidores da documentação do Python17963843
Ref: about contributors-to-the-python-documentation17963947
Ref: 55ed17963947
Ref: Contribuidores da documentação do Python-Footnote-117964440
Node: Lidando com bugs17964502
Ref: bugs doc17964618
Ref: 55ee17964618
Ref: bugs dealing-with-bugs17964618
Ref: 55ef17964618
Ref: bugs reporting-bugs17964618
Ref: 4bc317964618
Ref: bugs translation-repo17964618
Ref: 55f017964618
Node: Bugs na documentação17965238
Ref: bugs documentation-bugs17965364
Ref: 55f217965364
Ref: Bugs na documentação-Footnote-117966663
Ref: Bugs na documentação-Footnote-217966715
Ref: Bugs na documentação-Footnote-317966769
Ref: Bugs na documentação-Footnote-417966821
Ref: Bugs na documentação-Footnote-517966866
Ref: Bugs na documentação-Footnote-617966942
Node: Usando o rastreador de problemas do Python17967005
Ref: bugs using-the-python-issue-tracker17967195
Ref: 55f317967195
Ref: bugs using-the-tracker17967195
Ref: 24e17967195
Ref: Usando o rastreador de problemas do Python-Footnote-117969656
Ref: Usando o rastreador de problemas do Python-Footnote-217969719
Node: Começando a contribuir com o Python por conta própria17969785
Ref: bugs contributing-to-python17969944
Ref: 55f117969944
Ref: bugs getting-started-contributing-to-python-yourself17969944
Ref: 55f417969944
Ref: Começando a contribuir com o Python por conta própria-Footnote-117970550
Ref: Começando a contribuir com o Python por conta própria-Footnote-217970587
Node: Direitos autorais17970663
Ref: copyright doc17970774
Ref: 55f517970774
Ref: copyright copyright17970774
Ref: 55f617970774
Ref: copyright translation-repo17970774
Ref: 55f717970774
Node: História e Licença17971349
Ref: license doc17971470
Ref: 55f917971470
Ref: license history-and-license17971470
Ref: 55f817971470
Ref: license id117971470
Ref: 55fa17971470
Ref: license translation-repo17971470
Ref: 55fb17971470
Node: História do software17971664
Ref: license history-of-the-software17971799
Ref: 55fc17971799
Node: Termos e condições para acessar ou usar Python17976860
Ref: license terms-and-conditions-for-accessing-or-otherwise-using-python17977057
Ref: 55fd17977057
Node: PYTHON SOFTWARE FOUNDATION LICENSE VERSION 217978164
Ref: license psf-license17978355
Ref: 560017978355
Ref: license python-software-foundation-license-version-217978355
Ref: 560117978355
Node: ACORDO DE LICENCIAMENTO DA BEOPEN COM PARA PYTHON 2 017980977
Ref: license beopen-com-license-agreement-for-python-2-017981225
Ref: 560217981225
Node: CONTRATO DE LICENÇA DA CNRI PARA O PYTHON 1 6 117983969
Ref: license cnri-license-agreement-for-python-1-6-117984222
Ref: 560317984222
Node: ACORDO DE LICENÇA DA CWI PARA PYTHON 0 9 0 A 1 217988417
Ref: license cwi-license-agreement-for-python-0-9-0-through-1-217988677
Ref: 560417988677
Node: ZERO-CLAUSE BSD LICENSE FOR CODE IN THE PYTHON DOCUMENTATION17989944
Ref: license bsd017990147
Ref: 55fe17990147
Ref: license zero-clause-bsd-license-for-code-in-the-python-documentation17990147
Ref: 560517990147
Node: Licenças e Reconhecimentos para Software Incorporado17990937
Ref: license licenses-and-acknowledgements-for-incorporated-software17991104
Ref: 560617991104
Ref: license otherlicenses17991104
Ref: 55ff17991104
Node: Mersenne Twister17991901
Ref: license mersenne-twister17992027
Ref: 560717992027
Node: Soquetes<2>17994344
Ref: license sockets17994511
Ref: 560817994511
Node: Serviços de soquete assíncrono17996345
Ref: license asynchronous-socket-services17996520
Ref: 560917996520
Node: Gerenciamento de cookies17997758
Ref: license cookie-management17997948
Ref: 560a17997948
Node: Rastreamento de execução17999173
Ref: license execution-tracing17999360
Ref: 560b17999360
Node: Funções UUencode e UUdecode18000629
Ref: license uuencode-and-uudecode-functions18000827
Ref: 560c18000827
Node: Chamadas de procedimento remoto XML18002389
Ref: license xml-remote-procedure-calls18002571
Ref: 560d18002571
Node: test_epoll18004108
Ref: license test-epoll18004280
Ref: 560e18004280
Node: kqueue de seleção18005539
Ref: license select-kqueue18005685
Ref: 560f18005685
Node: SipHash2418007243
Ref: license siphash2418007392
Ref: 561018007392
Node: strtod e dtoa18008570
Ref: license strtod-and-dtoa18008710
Ref: 561118008710
Node: OpenSSL<2>18010130
Ref: license openssl18010266
Ref: 561218010266
Node: expat18021234
Ref: license expat18021363
Ref: 561318021363
Node: libffi18022799
Ref: license libffi18022925
Ref: 561418022925
Node: zlib<3>18024334
Ref: license zlib18024462
Ref: 561518024462
Node: cfuhash18025715
Ref: license cfuhash18025845
Ref: 561618025845
Node: libmpdec18027657
Ref: license libmpdec18027810
Ref: 561718027810
Node: Conjunto de testes C14N do W3C18029448
Ref: license w3c-c14n-test-suite18029602
Ref: 561818029602
Node: mimalloc18031525
Ref: license mimalloc18031682
Ref: 561918031682
Ref: license mimalloc-license18031682
Ref: 41118031682
Node: asyncio<12>18032896
Ref: license asyncio18033053
Ref: 561a18033053
Ref: asyncio<12>-Footnote-118034403
Node: Global Unbounded Sequences GUS18034461
Ref: license global-unbounded-sequences-gus18034601
Ref: 561b18034601
Ref: Global Unbounded Sequences GUS-Footnote-118036300
Node: Índice de Módulos Python18036378
Node: Índice18055631
Ref: howto/urllib2 quick-reference-to-http-headers20335045
Ref: 140a20335046
Ref: library/stdtypes list clear20335048
Ref: 35d20335050
Ref: 17dd20335052
Ref: library/stdtypes list remove20335054
Ref: 137b20335056
Ref: 140920335058
Ref: 11d720335060
Ref: using/cmdline audit_event_cpython_run_stdin_120335062
Ref: 440c20335064
Ref: library/stdtypes tuple count20335066
Ref: library/stdtypes tuple index20335068
Ref: using/cmdline audit_event_cpython_run_file_020335070
Ref: 440420335072
Ref: library/time audit_event_time_sleep_020335074
Ref: library/stdtypes list append20335076
Ref: 6cd20335078
Ref: 440220335080
Ref: using/cmdline audit_event_cpython_run_stdin_020335082
Ref: library/stdtypes list extend20335084
Ref: 545220335086
Ref: library/asyncio audit_event_cpython_run_stdin_220335088
Ref: library/stdtypes list pop20335090
Ref: library/unittest unittest tearDownModule20335092
Ref: 43fe20335094
Ref: 440320335096
Ref: library/stdtypes list insert20335098
Ref: 440120335100
Ref: 35e20335102
Ref: library/_thread start_new_thread20335104
Ref: 1dc320335106

End Tag Table


Local Variables:
coding: utf-8
End:
